pax_global_header00006660000000000000000000000064150306170450014513gustar00rootroot0000000000000052 comment=fc0d4e7fb66589fae1a3afd99f31e548f0313826 hdf4-hdf4.3.1/000077500000000000000000000000001503061704500130275ustar00rootroot00000000000000hdf4-hdf4.3.1/.clang-format000066400000000000000000000034121503061704500154020ustar00rootroot00000000000000--- BasedOnStyle: LLVM AlignConsecutiveAssignments: true BraceWrapping: AfterFunction: true #llvm10-11: AfterControlStatement: false - Never BeforeCatch: true BeforeElse: true #llvm11: BeforeLambdaBody: false #llvm11: BeforeWhile: false BreakBeforeBraces: Stroustrup BreakAfterJavaFieldAnnotations: true BreakStringLiterals: true ColumnLimit: 110 IndentWidth: 4 --- Language: Cpp #llvm11: AlignConsecutiveBitFields: false AlignConsecutiveDeclarations: true AlignConsecutiveMacros: true #llvm10-11: AlignOperands: true - Align #llvm11: AllowShortEnumsOnASingleLine: true AllowShortFunctionsOnASingleLine: None AlwaysBreakAfterReturnType: AllDefinitions # Can enable the following section when llvm 12.x is out #AttributeMacros: IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 3 SortPriority: 0 - Regex: '^(<|"(gtest|gmock|isl|json)/)' Priority: 4 SortPriority: 0 - Regex: '.*' Priority: 0 SortPriority: 0 - Regex: '^H4*.*' Priority: 1 SortPriority: 0 - Regex: 'private.*' Priority: 2 SortPriority: 0 IncludeIsMainRegex: '(public)?$' IndentCaseLabels: true #llvm11: IndentCaseBlocks: false IndentGotoLabels: false #llvm11: IndentExternBlock: AfterExternBlock #llvm11: InsertTrailingCommas: None ObjCBlockIndentWidth: 4 #llvm11: ObjCBreakBeforeNestedBlockParam: true ReflowComments: true SortIncludes: false #llvm10: TypenameMacros: #llvm10: - STACK_OF #llvm10: - LIST #llvm11: WhitespaceSensitiveMacros: #llvm11: - STRINGIZE #llvm11: - PP_STRINGIZE --- Language: Java BreakAfterJavaFieldAnnotations: true JavaImportGroups: ['java', 'hdf', 'hdf.hdf4lib', 'org'] ... hdf4-hdf4.3.1/.codespellrc000066400000000000000000000004121503061704500153240ustar00rootroot00000000000000# Ref: https://github.com/codespell-project/codespell#using-a-config-file [codespell] skip = .git,.codespellrc,./bin/trace,./configure,./bin/ltmain.sh,./bin/depcomp,./bin/config.guess,./bin/config.sub,./m4/libtool.m4 # ignore-regex = ignore-words-list = fillin,indx hdf4-hdf4.3.1/.gitattributes000066400000000000000000000002131503061704500157160ustar00rootroot00000000000000* text=auto *.cdf binary *.dat binary *.hdf binary *.nc binary *.raw binary hdf/util/testfiles/* binary hdf/util/testfiles/fp2hdf/* binary hdf4-hdf4.3.1/.github/000077500000000000000000000000001503061704500143675ustar00rootroot00000000000000hdf4-hdf4.3.1/.github/CODEOWNERS000066400000000000000000000011031503061704500157550ustar00rootroot00000000000000# Lines starting with '#' are comments. # Each line is a file pattern followed by one or more owners. # These owners will be the default owners for everything in the repo. * @lrknox @derobins @byrnHDF @fortnern @jhendersonHDF @qkoziol @vchoi-hdfgroup @bmribler @glennsong09 @mattjala @brtnfld @schwehr # Order is important. The last matching pattern has the most precedence. # So if a pull request only touches javascript files, only these owners # will be requested to review. /fortran/ @brtnfld @derobins @epourmal /java/ @jhendersonHDF @byrnHDF @derobins hdf4-hdf4.3.1/.github/dependabot.yml000066400000000000000000000002721503061704500172200ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly" groups: github-actions: patterns: - "*"hdf4-hdf4.3.1/.github/workflows/000077500000000000000000000000001503061704500164245ustar00rootroot00000000000000hdf4-hdf4.3.1/.github/workflows/abi-report.yml000066400000000000000000000161421503061704500212170ustar00rootroot00000000000000name: hdf4 Check Application Binary Interface (ABI) # Triggers the workflow on a call from another workflow on: workflow_call: inputs: use_tag: description: 'Release version tag' type: string required: false default: snapshot use_environ: description: 'Environment to locate files' type: string required: true default: snapshots file_base: description: "The common base name of the binary" required: true type: string file_ref: description: "The reference name for the release binary" required: true type: string permissions: contents: read jobs: check: runs-on: ubuntu-latest continue-on-error: true steps: - name: Install System dependencies run: | sudo apt update sudo apt install -q -y abi-compliance-checker abi-dumper sudo apt install -q -y japi-compliance-checker - name: Convert hdf4 reference name (Linux) id: convert-hdf4lib-refname run: | FILE_DOTS=$(echo "${{ inputs.file_ref }}" | sed -r "s/([0-9]+)\_([0-9]+)\_([0-9]+)\-([0-9]+).*/\1\.\2\.\3\-\4/") echo "HDF4R_DOTS=$FILE_DOTS" >> $GITHUB_OUTPUT - uses: actions/checkout@v4.1.7 - name: Get published binary (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }} - name: Uncompress gh binary (Linux) run: tar -zxvf ${{ github.workspace }}/${{ inputs.file_base }}-ubuntu-2404_gcc.tar.gz - name: Uncompress hdf4 binary (Linux) run: | cd "${{ github.workspace }}/hdf4" tar -zxvf ${{ github.workspace }}/hdf4/HDF-*-Linux.tar.gz --strip-components 1 - name: List files for the HDF space (Linux) run: | ls -l ${{ github.workspace }}/hdf4 ls -l ${{ github.workspace }}/hdf4/HDF_Group/HDF - name: set hdf4lib name id: set-hdf4lib-name run: | HDF4DIR=${{ github.workspace }}/hdf4/HDF_Group/HDF/ FILE_NAME_HDF4=$(ls ${{ github.workspace }}/hdf4/HDF_Group/HDF) FILE_VERS=$(echo "$FILE_NAME_HDF4" | sed -r "s/([0-9]+\.[0-9]+\.[0-9]+).*/\1/") echo "HDF4_ROOT=$HDF4DIR$FILE_NAME_HDF4" >> $GITHUB_OUTPUT echo "HDF4_VERS=$FILE_VERS" >> $GITHUB_OUTPUT - name: Download reference version run: | mkdir "${{ github.workspace }}/hdf4R" cd "${{ github.workspace }}/hdf4R" #wget -q https://github.com/HDFGroup/hdf4/releases/download/hdf${{ inputs.file_ref }}/hdf${{ inputs.file_ref }}-ubuntu-2404_gcc.tar.gz #tar zxf hdf${{ inputs.file_ref }}-ubuntu-2404_gcc.tar.gz wget -q https://github.com/HDFGroup/hdf4/releases/download/hdf${{ inputs.file_ref }}/hdf${{ inputs.file_ref }}-ubuntu-2204_gcc.tar.gz tar zxf hdf${{ inputs.file_ref }}-ubuntu-2204_gcc.tar.gz - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }}/hdf4R - name: Uncompress hdf4 reference binary (Linux) run: | cd "${{ github.workspace }}/hdf4R" tar -zxvf ${{ github.workspace }}/hdf4R/hdf4/HDF-${{ steps.convert-hdf4lib-refname.outputs.HDF4R_DOTS }}-Linux.tar.gz --strip-components 1 - name: List files for the HDFR space (Linux) run: | ls -l ${{ github.workspace }}/hdf4R ls -l ${{ github.workspace }}/hdf4R/HDF_Group/HDF - name: set hdf4lib reference name id: set-hdf4lib-refname run: | HDF4RDIR=${{ github.workspace }}/hdf4R/HDF_Group/HDF/ FILE_NAME_HDF4R=$(ls ${{ github.workspace }}/hdf4R/HDF_Group/HDF) echo "HDF4R_ROOT=$HDF4RDIR$FILE_NAME_HDF4R" >> $GITHUB_OUTPUT echo "HDF4R_VERS=$FILE_NAME_HDF4R" >> $GITHUB_OUTPUT - name: List files for the lib spaces (Linux) run: | ls -l ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/lib ls -l ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/lib - name: Run Java API report run: | japi-compliance-checker ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/lib/jarhdf-${{ steps.convert-hdf4lib-refname.outputs.HDF4R_DOTS }}.jar ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/lib/jarhdf-${{ steps.set-hdf4lib-name.outputs.HDF4_VERS }}.jar - name: Run hdf ABI report run: | abi-dumper ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/lib/libhdf.so -o ABI-0.dump -public-headers ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/include abi-dumper ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/lib/libhdf.so -o ABI-1.dump -public-headers ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/include abi-compliance-checker -l ${{ inputs.file_base }}-hdf -old ABI-0.dump -new ABI-1.dump continue-on-error: true - name: Run mfhdf ABI report run: | abi-dumper ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/lib/libmfhdf.so -o ABI-2.dump -public-headers ${{ steps.set-hdf4lib-refname.outputs.HDF4R_ROOT }}/include abi-dumper ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/lib/libmfhdf.so -o ABI-3.dump -public-headers ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/include abi-compliance-checker -l ${{ inputs.file_base }}-mfhdf -old ABI-2.dump -new ABI-3.dump continue-on-error: true - name: Copy ABI reports run: | cp compat_reports/jarhdf/${{ steps.set-hdf4lib-refname.outputs.HDF4R_VERS }}_to_${{ steps.set-hdf4lib-name.outputs.HDF4_VERS }}/compat_report.html ${{ inputs.file_base }}-java_compat_report.html ls -l compat_reports/${{ inputs.file_base }}-hdf/X_to_Y cp compat_reports/${{ inputs.file_base }}-hdf/X_to_Y/compat_report.html ${{ inputs.file_base }}-hdf_compat_report.html ls -l compat_reports/${{ inputs.file_base }}-mfhdf/X_to_Y cp compat_reports/${{ inputs.file_base }}-mfhdf/X_to_Y/compat_report.html ${{ inputs.file_base }}-mfhdf_compat_report.html - name: List files for the report spaces (Linux) run: | ls -l compat_reports ls -l *.html - name: Publish ABI reports id: publish-abi-reports run: | mkdir "${{ runner.workspace }}/buildabi" mkdir "${{ runner.workspace }}/buildabi/hdf4" cp ${{ inputs.file_base }}-hdf_compat_report.html ${{ runner.workspace }}/buildabi/hdf4 cp ${{ inputs.file_base }}-hdf_compat_report.html ${{ runner.workspace }}/buildabi/hdf4 cp ${{ inputs.file_base }}-java_compat_report.html ${{ runner.workspace }}/buildabi/hdf4 cd "${{ runner.workspace }}/buildabi" tar -zcvf ${{ inputs.file_base }}.html.abi.reports.tar.gz hdf4 shell: bash - name: Save output as artifact uses: actions/upload-artifact@v4 with: name: abi-reports path: | ${{ runner.workspace }}/buildabi/${{ inputs.file_base }}.html.abi.reports.tar.gz hdf4-hdf4.3.1/.github/workflows/aocc-auto.yml000066400000000000000000000133631503061704500210300ustar00rootroot00000000000000name: hdf4 autotools aocc on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string build_option: description: "--enable-production or --disable-production" required: true type: string permissions: contents: read jobs: aocc_build_and_test: name: "aocc ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install Dependencies shell: bash run: | sudo apt update sudo apt install -y autoconf automake libtool libtool-bin libaec-dev libjpeg-dev sudo apt install -y doxygen libncurses-dev libquadmath0 libstdc++6 libxml2 sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential - name: Install AOCC 4.2.0 shell: bash run: | wget https://download.amd.com/developer/eula/aocc/aocc-4-2/aocc-compiler-4.2.0.tar tar -xvf aocc-compiler-4.2.0.tar cd aocc-compiler-4.2.0 bash install.sh source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh which clang which flang clang -v echo "CC=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/bin/clang" >> $GITHUB_ENV echo "FC=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/bin/flang" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: Autotools Configure with aocc shell: bash run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export LD_LIBRARY_PATH=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib:/usr/local/lib export LD_RUN_PATH=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib:/usr/local/lib export PATH=/usr/local/bin:$PATH sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" $GITHUB_WORKSPACE/configure \ ${{ inputs.build_option }} \ --enable-netcdf \ --enable-shared \ --disable-fortran \ LDFLAGS="-L/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib" - name: Autotools Build shell: bash run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make -j3 working-directory: ${{ runner.workspace }}/build - name: Autotools Run Tests run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make check -j2 working-directory: ${{ runner.workspace }}/build # INSTALL (note that this runs even when we don't run the tests) - name: Autotools Install run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make install working-directory: ${{ runner.workspace }}/build aocc_static_build_and_test: name: "aocc static ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install System dependencies run: | sudo apt update sudo apt install -y autoconf automake libtool libtool-bin libaec-dev libjpeg-dev sudo apt install -y doxygen libncurses-dev libquadmath0 libstdc++6 libxml2 sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential - name: Install AOCC 4.2.0 run: | wget https://download.amd.com/developer/eula/aocc/aocc-4-2/aocc-compiler-4.2.0.tar tar -xvf aocc-compiler-4.2.0.tar cd aocc-compiler-4.2.0 bash install.sh source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh which clang which flang clang -v echo "CC=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/bin/clang" >> $GITHUB_ENV echo "FC=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/bin/flang" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib:/usr/local/lib" >> $GITHUB_ENV echo "LD_RUN_PATH=/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib:/usr/local/lib" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: Autotools Configure with aocc shell: bash run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" $GITHUB_WORKSPACE/configure \ ${{ inputs.build_option }} \ --enable-netcdf \ --disable-shared \ --enable-fortran \ LDFLAGS="-L/home/runner/work/hdf4/hdf4/aocc-compiler-4.2.0/lib" - name: Autotools Build shell: bash run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make -j3 working-directory: ${{ runner.workspace }}/build - name: Autotools Run Tests run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make check -j2 working-directory: ${{ runner.workspace }}/build # INSTALL (note that this runs even when we don't run the tests) - name: Autotools Install run: | source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh export PATH=/usr/local/bin:$PATH make install working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/aocc-cmake.yml000066400000000000000000000047061503061704500211410ustar00rootroot00000000000000name: hdf4 CMake aocc # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string permissions: contents: read jobs: aocc_build_and_test: name: "aocc ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install Dependencies shell: bash run: | sudo apt update sudo apt-get install cmake ninja-build doxygen graphviz sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev sudo apt install -y zlib1g-dev libaec-dev libjpeg-dev sudo apt install -y wget curl bzip2 flex bison libzip-dev openssl build-essential - name: Install AOCC 4.2.0 shell: bash run: | wget https://download.amd.com/developer/eula/aocc/aocc-4-2/aocc-compiler-4.2.0.tar tar -xvf aocc-compiler-4.2.0.tar cd aocc-compiler-4.2.0 bash install.sh source /home/runner/work/hdf4/hdf4/setenv_AOCC.sh which clang which flang clang -v - name: CMake Configure shell: bash run: | export LD_LIBRARY_PATH=/home/runner/work/hdf5/hdf5/aocc-compiler-4.2.0/lib:/home/runner/work/hdf5/hdf5/openmpi-4.1.6-install/lib:/usr/local/lib export LD_RUN_PATH=/home/runner/work/hdf5/hdf5/aocc-compiler-4.2.0/lib:/home/runner/work/hdf5/hdf5/openmpi-4.1.6-install/lib:/usr/local/lib export PATH=/usr/local/bin:$PATH mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DJPEG_USE_LOCALCONTENT=OFF \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ -DHDF4_BUILD_FORTRAN:BOOL=ON \ -DHDF4_BUILD_JAVA:BOOL=OFF \ $GITHUB_WORKSPACE - name: CMake Build shell: bash run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests shell: bash run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/autotools.yml000066400000000000000000000040611503061704500212010ustar00rootroot00000000000000name: hdf4 dev autools CI # Controls when the action will run. Triggers the workflow on push or pull request on: workflow_call: permissions: contents: read # A workflow run is made up of one or more jobs that can run sequentially or # in parallel. We just have one job, but the matrix items defined below will # run in parallel. jobs: call-debug-netcdf-autotools: name: "Autotools Debug NetCDF Workflows" uses: ./.github/workflows/main-auto.yml with: netcdf: enable shared: enable build_mode: "debug" build_option: "--disable-production" call-release-netcdf-autotools: name: "Autotools Release NetCDF Workflows" uses: ./.github/workflows/main-auto.yml with: netcdf: enable shared: enable build_mode: "production" build_option: "--enable-production" call-debug-static-autotools: name: "Autotools Debug Static Workflows" uses: ./.github/workflows/main-auto.yml with: netcdf: disable shared: disable build_mode: "debug" build_option: "--disable-production" call-release-static-autotools: name: "Autotools Release Static Workflows" uses: ./.github/workflows/main-auto.yml with: netcdf: disable shared: disable build_mode: "production" build_option: "--enable-production" call-release-auto-intel: name: "Autotools Intel Workflows" uses: ./.github/workflows/intel-auto.yml with: build_mode: "production" build_option: "--enable-production" call-release-auto-nvhpc: name: "Autotools nvhpc Workflows" uses: ./.github/workflows/nvhpc-auto.yml with: build_mode: "production" build_option: "--enable-production" call-release-auto-aocc: name: "Autotools aocc Workflows" uses: ./.github/workflows/aocc-auto.yml with: build_mode: "production" build_option: "--enable-production" hdf4-hdf4.3.1/.github/workflows/clang-format-check.yml000066400000000000000000000011351503061704500225740ustar00rootroot00000000000000name: clang-format Check on: pull_request: permissions: contents: read jobs: formatting-check: name: Formatting Check runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'skip-ci')" steps: - uses: actions/checkout@v4.1.7 - name: Run clang-format style check for C and Java code uses: DoozyX/clang-format-lint-action@v0.20 with: source: '.' extensions: 'c,h,cpp,hpp,java' clangFormatVersion: 17 style: file exclude: './config ./mfhdf/ncgen/ncgenyy.c ./mfhdf/ncgen/ncgentab.c ./mfhdf/ncgen/ncgentab.h' hdf4-hdf4.3.1/.github/workflows/clang-format-fix.yml000066400000000000000000000024441503061704500223110ustar00rootroot00000000000000# NOTE: This action requires write permissions to be set in your GitHub # repo/fork for it to be able to commit changes. # # This is currently enabled via: # # settings > Actions > General > Workflow permissions # # which you will need to set to "Read and write permissions" # name: clang-format Commit Changes on: workflow_dispatch: push: permissions: contents: read jobs: formatting-check: name: Commit Format Changes runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'skip-ci')" permissions: contents: write # In order to allow EndBug/add-and-commit to commit changes steps: - uses: actions/checkout@v4.1.7 - name: Fix C and Java formatting issues detected by clang-format uses: DoozyX/clang-format-lint-action@v0.20 with: source: '.' extensions: 'c,h,cpp,hpp,java' clangFormatVersion: 17 inplace: True style: file exclude: './config ./mfhdf/ncgen/ncgenyy.c ./mfhdf/ncgen/ncgentab.c ./mfhdf/ncgen/ncgentab.h' - uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4 with: author_name: github-actions author_email: 41898282+github-actions[bot]@users.noreply.github.com message: 'Committing clang-format changes' hdf4-hdf4.3.1/.github/workflows/cmake-analysis.yml000066400000000000000000000454361503061704500220640ustar00rootroot00000000000000name: hdf4 dev ctest analysis runs # Triggers the workflow on a call from another workflow on: workflow_call: inputs: snap_name: description: 'The name in the source tarballs' type: string required: false default: hdfsrc file_base: description: "The common base name of the source tarballs" required: true type: string use_environ: description: 'Environment to locate files' type: string required: true default: snapshots permissions: contents: read jobs: coverage_test_linux_GCC: # Linux (Ubuntu) w/ gcc + coverage # name: "Ubuntu GCC Coverage" runs-on: ubuntu-latest steps: - name: Install CMake Dependencies (Linux_coverage) run: | sudo apt update sudo apt-get install ninja-build doxygen graphviz curl build-essential sudo apt-get install lcov -q -y - name: Set file base name (Linux_coverage) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_coverage) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_coverage) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_coverage) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_coverage) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_coverage) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_coverage) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (LOCAL_COVERAGE_TEST "TRUE") set (LOCAL_USE_GCOV "TRUE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_COVERAGE:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCODE_COVERAGE:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_JPEG_LIB_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_PACK_EXAMPLES:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_PACKAGE_EXTLIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_NO_PACKAGES:BOOL=ON") - name: Run ctest (Linux_coverage) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}_COV,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_coverage) uses: actions/upload-artifact@v4 with: name: clang-coverage-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_LeakSanitizer: # Linux (Ubuntu) w/ clang + LeakSanitizer # name: "Ubuntu Clang LeakSanitizer" runs-on: ubuntu-22.04 steps: - name: Install CMake Dependencies (Linux_Leak) run: | sudo apt update sudo apt-get install ninja-build doxygen graphviz curl libtinfo5 - name: add clang to env uses: KyleMayes/install-llvm-action@v2.0.6 id: setup-clang with: env: true version: '18.1' - name: Set file base name (Linux_Leak) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_Leak) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_Leak) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_Leak) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_Leak) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_Leak) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_Leak) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (MODEL "Sanitize") set (GROUP "Sanitize") set (LOCAL_MEMCHECK_TEST "TRUE") set (CTEST_MEMORYCHECK_TYPE "LeakSanitizer") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SANITIZERS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_USE_SANITIZER:STRING=Leak") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux_Leak) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-LEAK,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_Leak) uses: actions/upload-artifact@v4 with: name: leak-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_AddressSanitizer: # Linux (Ubuntu) w/ clang + AddressSanitizer # name: "Ubuntu Clang AddressSanitizer" runs-on: ubuntu-22.04 steps: - name: Install CMake Dependencies (Linux_Address) run: | sudo apt update sudo apt-get install ninja-build doxygen graphviz curl libtinfo5 - name: add clang to env uses: KyleMayes/install-llvm-action@v2.0.6 id: setup-clang with: env: true version: '18.1' - name: Set file base name (Linux_Address) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_Address) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_Address) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_Address) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_Address) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_Address) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_Address) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (MODEL "Sanitize") set (GROUP "Sanitize") set (LOCAL_MEMCHECK_TEST "TRUE") set (CTEST_MEMORYCHECK_TYPE "AddressSanitizer") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SANITIZERS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_USE_SANITIZER:STRING=Address") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux_Address) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-ADDR,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_Address) uses: actions/upload-artifact@v4 with: name: address-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_UndefinedBehaviorSanitizer: # Linux (Ubuntu) w/ clang + UndefinedBehaviorSanitizer # name: "Ubuntu Clang UndefinedBehaviorSanitizer" runs-on: ubuntu-22.04 steps: - name: Install CMake Dependencies (Linux_UndefinedBehavior) run: | sudo apt update sudo apt-get install ninja-build doxygen graphviz curl libtinfo5 - name: add clang to env uses: KyleMayes/install-llvm-action@v2.0.6 id: setup-clang with: env: true version: '18.1' - name: Set file base name (Linux_UndefinedBehavior) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_UndefinedBehavior) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_UndefinedBehavior) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_UndefinedBehavior) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_UndefinedBehavior) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_UndefinedBehavior) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_UndefinedBehavior) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (MODEL "Sanitize") set (GROUP "Sanitize") set (LOCAL_MEMCHECK_TEST "TRUE") set (CTEST_MEMORYCHECK_TYPE "UndefinedBehaviorSanitizer") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SANITIZERS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_USE_SANITIZER:STRING=Undefined") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux_UndefinedBehavior) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-UNDEF,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_UndefinedBehavior) uses: actions/upload-artifact@v4 with: name: undefined-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` hdf4-hdf4.3.1/.github/workflows/cmake-bintest.yml000066400000000000000000000142521503061704500217010ustar00rootroot00000000000000name: hdf4 examples bintest runs # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string permissions: contents: read jobs: test_binary_win: # Windows w/ MSVC + CMake # name: "Windows MSVC Binary Test" runs-on: windows-latest steps: - name: Install Dependencies (Windows) run: choco install ninja - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Enable Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1.13.0 # Get files created by cmake-ctest script - name: Get published binary (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-vs2022_cl-${{ inputs.build_mode }}-binary path: ${{ github.workspace }}/hdf4 - name: Uncompress hdf4 binary (Win) working-directory: ${{ github.workspace }}/hdf4 run: 7z x HDF-*-win64.zip shell: bash - name: List files for the space (Win) run: | ls -l ${{ github.workspace }} ls -l ${{ github.workspace }}/hdf4 - name: create hdf4 location (Win) working-directory: ${{ github.workspace }}/hdf4 run: | New-Item -Path "${{ github.workspace }}/HDF_Group/HDF" -ItemType Directory Copy-Item -Path "${{ github.workspace }}/hdf4/HDF*/*" -Destination "${{ github.workspace }}/HDF_Group/HDF" -Recurse shell: pwsh - name: List files for the space (Win) run: ls -l ${{ github.workspace }}/HDF_Group/HDF - name: set hdf4lib name id: set-hdf4lib-name run: | HDF4DIR="${{ github.workspace }}/HDF_Group/HDF" echo "HDF4_ROOT=$HDF4DIR$FILE_NAME_HDF4" >> $GITHUB_OUTPUT shell: bash - name: List files for the binaries (Win) run: | ls -l ${{ github.workspace }}/HDF_Group/HDF - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Run ctest (Windows) env: HDF4_ROOT: ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }} run: | cd "${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/HDF4Examples" cmake --workflow --preset=ci-StdShar-MSVC --fresh shell: bash test_binary_linux: # Linux (Ubuntu) w/ gcc + CMake # name: "Ubuntu gcc Binary Test" runs-on: ubuntu-latest steps: - name: Install CMake Dependencies (Linux) run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Get published binary (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-ubuntu-2404_gcc-${{ inputs.build_mode }}-binary path: ${{ github.workspace }} - name: Uncompress hdf4 binary (Linux) run: | cd "${{ github.workspace }}" tar -zxvf ${{ github.workspace }}/HDF-*-Linux.tar.gz --strip-components 1 - name: set hdf4lib name id: set-hdf4lib-name run: | HDF4DIR=${{ github.workspace }}/HDF_Group/HDF/ FILE_NAME_HDF4=$(ls ${{ github.workspace }}/HDF_Group/HDF) echo "HDF4_ROOT=$HDF4DIR$FILE_NAME_HDF4" >> $GITHUB_OUTPUT - name: List files for the binaries (Linux) run: | ls -l ${{ github.workspace }}/HDF_Group/HDF - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Run ctest (Linux) env: HDF4_ROOT: ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }} run: | cd "${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/share/HDF4Examples" cmake --workflow --preset=ci-StdShar-GNUC --fresh shell: bash test_binary_mac_latest: # MacOS w/ Clang + CMake # name: "MacOS Clang Binary Test" runs-on: macos-latest steps: - name: Install Dependencies (MacOS_latest) run: brew install ninja doxygen - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Get published binary (MacOS_latest) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-macos14_clang-${{ inputs.build_mode }}-binary path: ${{ github.workspace }} - name: Uncompress hdf4 binary (MacOS_latest) run: | cd "${{ github.workspace }}" tar -zxvf ${{ github.workspace }}/HDF-*-Darwin.tar.gz --strip-components 1 - name: set hdf4lib name id: set-hdf4lib-name run: | HDF4DIR=${{ github.workspace }}/HDF_Group/HDF/ FILE_NAME_HDF4=$(ls ${{ github.workspace }}/HDF_Group/HDF) echo "HDF4_ROOT=$HDF4DIR$FILE_NAME_HDF4" >> $GITHUB_OUTPUT - name: List files for the binaries (MacOS_latest) run: | ls -l ${{ github.workspace }}/HDF_Group/HDF - name: List files for the space (MacOS_latest) run: | ls ${{ github.workspace }} ls ${{ runner.workspace }} # symlinks the compiler executables to a common location - name: Setup GNU Fortran uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: gcc version: 14 - name: Run ctest (MacOS_latest) id: run-ctest env: HDF4_ROOT: ${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }} run: | cd "${{ steps.set-hdf4lib-name.outputs.HDF4_ROOT }}/share/HDF4Examples" cmake --workflow --preset=ci-StdShar-macos-Clang --fresh shell: bash hdf4-hdf4.3.1/.github/workflows/cmake-ctest.yml000066400000000000000000000756371503061704500213710ustar00rootroot00000000000000name: hdf4 dev ctest runs # Triggers the workflow on a call from another workflow on: workflow_call: inputs: snap_name: description: 'The name in the source tarballs' type: string required: false default: hdfsrc file_base: description: "The common base name of the source tarballs" required: true type: string preset_name: description: "The common base name of the preset configuration name to control the build" required: true type: string use_environ: description: 'Environment to locate files' type: string required: true default: snapshots secrets: APPLE_CERTS_BASE64: required: true APPLE_CERTS_BASE64_PASSWD: required: true KEYCHAIN_PASSWD: required: true AZURE_TENANT_ID: required: true AZURE_CLIENT_ID: required: true AZURE_CLIENT_SECRET: required: true AZURE_ENDPOINT: required: true AZURE_CODE_SIGNING_NAME: required: true AZURE_CERT_PROFILE_NAME: required: true permissions: contents: read jobs: check-secret: name: Check Secrets exists runs-on: ubuntu-latest outputs: sign-state: ${{ steps.set-signing-state.outputs.BINSIGN }} steps: - name: Identify Signing Status id: set-signing-state env: signing_secret: ${{ secrets.AZURE_ENDPOINT }} run: | if [[ '${{ env.signing_secret }}' == '' ]] then SIGN_VAL=$(echo 'notexists') else SIGN_VAL=$(echo 'exists') fi echo "BINSIGN=$SIGN_VAL" >> $GITHUB_OUTPUT shell: bash - run: echo "signing is ${{ steps.set-signing-state.outputs.BINSIGN }}." build_and_test_win: # Windows w/ MSVC + CMake # name: "Windows MSVC CTest" runs-on: windows-latest needs: [check-secret] steps: - name: Install Dependencies (Windows) run: choco install ninja - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: Enable Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1.13.0 - name: Set file base name (Windows) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash # Get files created by release script - name: Get zip-tarball (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Uncompress source (Windows) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: bash - name: Install TrustedSigning (Windows) run: | Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile .\nuget.exe .\nuget.exe install Microsoft.Windows.SDK.BuildTools -Version 10.0.22621.3233 -x .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -x shell: pwsh if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: create-json id: create-json uses: jsdaniell/create-json@v1.2.3 with: name: "credentials.json" dir: '${{ steps.set-file-base.outputs.SOURCE_BASE }}' json: '{"Endpoint": "${{ secrets.AZURE_ENDPOINT }}","CodeSigningAccountName": "${{ secrets.AZURE_CODE_SIGNING_NAME }}","CertificateProfileName": "${{ secrets.AZURE_CERT_PROFILE_NAME }}"}' if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: Run ctest (Windows) env: BINSIGN: ${{ needs.check-secret.outputs.sign-state }} SIGNTOOLDIR: ${{ github.workspace }}/Microsoft.Windows.SDK.BuildTools/bin/10.0.22621.0/x64 run: | cd "${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}" cmake --workflow --preset=${{ inputs.preset_name }}-MSVC --fresh shell: bash - name: Sign files with Trusted Signing uses: azure/trusted-signing-action@v0.5.1 with: azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} endpoint: ${{ secrets.AZURE_ENDPOINT }} trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }} certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }} files-folder: ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-MSVC files-folder-filter: msi file-digest: SHA256 timestamp-rfc3161: http://timestamp.acs.microsoft.com timestamp-digest: SHA256 if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: Publish binary (Windows) id: publish-ctest-binary run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf4" Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING -Destination ${{ runner.workspace }}/build/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-MSVC/README.txt -Destination ${{ runner.workspace }}/build/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-MSVC/* -Destination ${{ runner.workspace }}/build/hdf4/ -Include *.zip cd "${{ runner.workspace }}/build" 7z a -tzip ${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip hdf4 shell: pwsh - name: Publish msi binary (Windows) id: publish-ctest-msi-binary run: | mkdir "${{ runner.workspace }}/buildmsi" Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-MSVC/* -Destination ${{ runner.workspace }}/buildmsi/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi -Include *.msi shell: pwsh - name: List files in the space (Windows) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh # Save files created by ctest script - name: Save published binary (Windows) uses: actions/upload-artifact@v4 with: name: zip-vs2022_cl-binary path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published msi binary (Windows) uses: actions/upload-artifact@v4 with: name: msi-vs2022_cl-binary path: ${{ runner.workspace }}/buildmsi/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux: # Linux (Ubuntu) w/ gcc + CMake # name: "Ubuntu gcc CMake" runs-on: ubuntu-latest needs: [check-secret] steps: - name: Install CMake Dependencies (Linux) run: | sudo apt-get update sudo apt-get install ninja-build graphviz - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: Set file base name (Linux) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Run ctest (Linux) run: | cd "${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}" cmake --workflow --preset=${{ inputs.preset_name }}-GNUC --fresh shell: bash - name: Publish binary (Linux) id: publish-ctest-binary run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf4" cp ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-GNUC/README.txt ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-GNUC/*.tar.gz ${{ runner.workspace }}/build/hdf4 cd "${{ runner.workspace }}/build" tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz hdf4 shell: bash - name: Publish deb binary (Linux) id: publish-ctest-deb-binary run: | mkdir "${{ runner.workspace }}/builddeb" cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-GNUC/*.deb ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb shell: bash - name: Publish rpm binary (Linux) id: publish-ctest-rpm-binary run: | mkdir "${{ runner.workspace }}/buildrpm" cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-GNUC/*.rpm ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm shell: bash - name: List files in the space (Linux) run: | ls ${{ github.workspace }} ls -l ${{ runner.workspace }} # Save files created by ctest script - name: Save published binary (Linux) uses: actions/upload-artifact@v4 with: name: tgz-ubuntu-2404_gcc-binary path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published binary deb (Linux) uses: actions/upload-artifact@v4 with: name: deb-ubuntu-2404_gcc-binary path: ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published binary rpm (Linux) uses: actions/upload-artifact@v4 with: name: rpm-ubuntu-2404_gcc-binary path: ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` # Save doxygen files created by ctest script - name: Save published doxygen (Linux) uses: actions/upload-artifact@v4 with: name: docs-doxygen path: ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-GNUC/hdf4lib_docs/html if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_mac_latest: # MacOS w/ Clang + CMake # name: "MacOS Clang CMake" runs-on: macos-latest needs: [check-secret] steps: - name: Install Dependencies (MacOS_latest) run: brew install ninja - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: check clang version shell: bash run: | which clang clang -v - name: Install the Apple certificate and provisioning profile shell: bash env: BUILD_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTS_BASE64 }} P12_PASSWORD: ${{ secrets.APPLE_CERTS_BASE64_PASSWD }} KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} run: | # create variables CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 KEYCHAIN_FILE=${{ vars.KEYCHAIN_NAME }}.keychain # import certificate from secrets echo $BUILD_CERTIFICATE_BASE64 | base64 --decode > $CERTIFICATE_PATH security -v create-keychain -p $KEYCHAIN_PASSWD $KEYCHAIN_FILE security -v list-keychain -d user -s $KEYCHAIN_FILE security -v list-keychains security -v set-keychain-settings -lut 21600 $KEYCHAIN_FILE security -v unlock-keychain -p $KEYCHAIN_PASSWD $KEYCHAIN_FILE # import certificate to keychain security -v import $CERTIFICATE_PATH -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_FILE security -v set-key-partition-list -S apple-tool:,codesign:,apple: -k $KEYCHAIN_PASSWD $KEYCHAIN_FILE if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Set file base name (MacOS_latest) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (MacOS_latest) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (MacOS_latest) run: | ls ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (MacOS_latest) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz # symlinks the compiler executables to a common location - name: Setup GNU Fortran uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: gcc version: 14 - name: Run ctest (MacOS_latest) id: run-ctest env: BINSIGN: ${{ needs.check-secret.outputs.sign-state }} SIGNER: ${{ vars.SIGNER }} run: | cd "${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}" cmake --workflow --preset=${{ inputs.preset_name }}-macos-Clang --fresh shell: bash - name: Sign dmg (MacOS_latest) id: sign-dmg env: KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} KEYCHAIN_NAME: ${{ vars.KEYCHAIN_NAME }} SIGNER: ${{ vars.SIGNER }} NOTARY_USER: ${{ vars.NOTARY_USER }} NOTARY_KEY: ${{ vars.NOTARY_KEY }} run: | /usr/bin/codesign --force --timestamp --options runtime --entitlements ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/distribution.entitlements --verbose=4 --strict --sign ${{ env.SIGNER }} --deep ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Check dmg timestamp (MacOS_latest) run: | /usr/bin/codesign -dvv ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Verify dmg (MacOS_latest) run: | /usr/bin/hdiutil verify ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Notarize dmg (MacOS_latest) id: notarize-dmg env: KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} KEYCHAIN_NAME: ${{ vars.KEYCHAIN_NAME }} SIGNER: ${{ vars.SIGNER }} NOTARY_USER: ${{ vars.NOTARY_USER }} NOTARY_KEY: ${{ vars.NOTARY_KEY }} run: | jsonout=$(/usr/bin/xcrun notarytool submit --wait --output-format json --apple-id ${{ env.NOTARY_USER }} --password ${{ env.NOTARY_KEY }} --team-id ${{ env.SIGNER }} ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg) echo "JSONOUT=$jsonout" >> $GITHUB_OUTPUT if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Get ID token (MacOS_latest) id: get-id-token run: | echo "notary result is ${{ fromJson(steps.notarize-dmg.outputs.JSONOUT) }}" token=${{ fromJson(steps.notarize-dmg.outputs.JSONOUT).id }} echo "ID_TOKEN=$token" >> "$GITHUB_OUTPUT" if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: post notary check (MacOS_latest) id: post-notary env: KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} KEYCHAIN_NAME: ${{ vars.KEYCHAIN_NAME }} SIGNER: ${{ vars.SIGNER }} NOTARY_USER: ${{ vars.NOTARY_USER }} NOTARY_KEY: ${{ vars.NOTARY_KEY }} run: | { echo 'NOTARYOUT<> $GITHUB_OUTPUT if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Get notary info (MacOS_latest) id: get-notary-info run: | echo "notary info is ${{ steps.post-notary.outputs.NOTARYOUT }}." if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash - name: Staple dmg (MacOS_latest) id: staple-dmg env: KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} KEYCHAIN_NAME: ${{ vars.KEYCHAIN_NAME }} SIGNER: ${{ vars.SIGNER }} NOTARY_USER: ${{ vars.NOTARY_USER }} NOTARY_KEY: ${{ vars.NOTARY_KEY }} run: | /usr/bin/xcrun stapler staple ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} shell: bash continue-on-error: true - name: Publish binary (MacOS_latest) id: publish-ctest-binary run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf4" cp ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/README.txt ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.tar.gz ${{ runner.workspace }}/build/hdf4 cd "${{ runner.workspace }}/build" tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz hdf4 shell: bash - name: Publish dmg binary (MacOS_latest) id: publish-ctest-dmg-binary run: | mkdir "${{ runner.workspace }}/builddmg" cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-macos-Clang/*.dmg ${{ runner.workspace }}/builddmg/${{ steps.set-file-base.outputs.FILE_BASE }}-macos14_clang.dmg shell: bash - name: List files in the space (MacOS_latest) run: | ls ${{ github.workspace }} ls -l ${{ runner.workspace }} # Save files created by ctest script - name: Save published binary (MacOS_latest) uses: actions/upload-artifact@v4 with: name: tgz-macos14_clang-binary path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published dmg binary (MacOS_latest) uses: actions/upload-artifact@v4 with: name: tgz-macos14_clang-dmg-binary path: ${{ runner.workspace }}/builddmg/${{ steps.set-file-base.outputs.FILE_BASE }}-macos14_clang.dmg if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` ####### intel builds build_and_test_win_intel: # Windows w/ OneAPI + CMake # name: "Windows Intel CTest" runs-on: windows-latest needs: [check-secret] steps: - name: Install Dependencies (Windows_intel) run: choco install ninja - name: add oneAPI to env uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: Set file base name (Windows_intel) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash # Get files created by release script - name: Get zip-tarball (Windows_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows_intel) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Uncompress source (Windows_intel) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: bash - name: Install TrustedSigning (Windows) run: | Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile .\nuget.exe .\nuget.exe install Microsoft.Windows.SDK.BuildTools -Version 10.0.22621.3233 -x .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -x shell: pwsh if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: create-json id: create-json uses: jsdaniell/create-json@v1.2.3 with: name: "credentials.json" dir: '${{ steps.set-file-base.outputs.SOURCE_BASE }}' json: '{"Endpoint": "${{ secrets.AZURE_ENDPOINT }}","CodeSigningAccountName": "${{ secrets.AZURE_CODE_SIGNING_NAME }}","CertificateProfileName": "${{ secrets.AZURE_CERT_PROFILE_NAME }}"}' if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: Run ctest (Windows_intel) with oneapi env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} BINSIGN: ${{ needs.check-secret.outputs.sign-state }} SIGNTOOLDIR: ${{ github.workspace }}/Microsoft.Windows.SDK.BuildTools/bin/10.0.22621.0/x64 run: | cd "${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}" cmake --workflow --preset=${{ inputs.preset_name }}-win-Intel --fresh shell: pwsh - name: Sign files with Trusted Signing (Windows_intel) uses: azure/trusted-signing-action@v0.5.1 with: azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} endpoint: ${{ secrets.AZURE_ENDPOINT }} trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }} certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }} files-folder: ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel files-folder-filter: msi file-digest: SHA256 timestamp-rfc3161: http://timestamp.acs.microsoft.com timestamp-digest: SHA256 if: ${{ needs.check-secret.outputs.sign-state == 'exists' }} - name: Publish binary (Windows_intel) id: publish-ctest-binary run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf4" Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING -Destination ${{ runner.workspace }}/build/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel/README.txt -Destination ${{ runner.workspace }}/build/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel/* -Destination ${{ runner.workspace }}/build/hdf4/ -Include *.zip cd "${{ runner.workspace }}/build" 7z a -tzip ${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip hdf4 shell: pwsh - name: Publish msi binary (Windows_intel) id: publish-ctest-msi-binary run: | mkdir "${{ runner.workspace }}/buildmsi" Copy-Item -Path ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel/* -Destination ${{ runner.workspace }}/buildmsi/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi -Include *.msi shell: pwsh - name: List files in the space (Windows_intel) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh # Save files created by ctest script - name: Save published binary (Windows_intel) uses: actions/upload-artifact@v4 with: name: zip-vs2022_intel-binary path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published msi binary (Windows_intel) uses: actions/upload-artifact@v4 with: name: msi-vs2022_intel-binary path: ${{ runner.workspace }}/buildmsi/${{ steps.set-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_intel: # Linux (Ubuntu) w/ OneAPI + CMake # name: "Ubuntu Intel CMake" runs-on: ubuntu-latest needs: [check-secret] steps: - name: Install CMake Dependencies (Linux_intel) run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz - name: add oneAPI to env uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: Set file base name (Linux_intel) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_intel) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_intel) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Run ctest (Linux_intel) env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cd "${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}" cmake --workflow --preset=${{ inputs.preset_name }}-Intel --fresh shell: bash - name: Publish binary (Linux_intel) id: publish-ctest-binary run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf4" cp ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel/README.txt ${{ runner.workspace }}/build/hdf4 cp ${{ runner.workspace }}/hdf4/build/${{ inputs.preset_name }}-Intel/*.tar.gz ${{ runner.workspace }}/build/hdf4 cd "${{ runner.workspace }}/build" tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz hdf4 shell: bash - name: List files in the space (Linux_intel) run: | ls ${{ github.workspace }} ls -l ${{ runner.workspace }} # Save files created by ctest script - name: Save published binary (Linux_intel) uses: actions/upload-artifact@v4 with: name: tgz-ubuntu-2404_intel-binary path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` hdf4-hdf4.3.1/.github/workflows/cmake-script.yml000066400000000000000000000746261503061704500215500ustar00rootroot00000000000000name: hdf4 dev ctest script runs # Triggers the workflow on a call from another workflow on: workflow_call: inputs: snap_name: description: 'The name in the source tarballs' type: string required: false default: hdfsrc file_base: description: "The common base name of the source tarballs" required: true type: string use_environ: description: 'Environment to locate files' type: string required: true default: snapshots permissions: contents: read jobs: build_and_test_win: # Windows w/ MSVC + CMake # name: "Windows MSVC CTest" runs-on: windows-latest steps: - name: Install Dependencies (Windows) run: choco install ninja - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: Enable Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1.13.0 - name: Set file base name (Windows) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash # Get files created by release script - name: Get zip-tarball (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Uncompress source (Windows) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: bash - name: Copy script files for the space (Windows) run: | Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake -Destination ${{ runner.workspace }}/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake -Destination ${{ runner.workspace }}/hdf4/ shell: pwsh - name: List files for the hdf4 (Windows) run: | Get-ChildItem -Path ${{ runner.workspace }}/hdf4 shell: pwsh - name: Create options file (Windows) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (MODEL "GHDaily") set (GROUP "GHDaily") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest script (Windows) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }},LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Windows_intel) uses: actions/upload-artifact@v4 with: name: cl-win-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux: # Linux (Ubuntu) w/ gcc + CMake # name: "Ubuntu gcc CMake" runs-on: ubuntu-latest steps: - name: Install CMake Dependencies (Linux) run: | sudo apt-get update sudo apt-get install ninja-build graphviz curl - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: Set file base name (Linux) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (MODEL "GHDaily") set (GROUP "GHDaily") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-GCC,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux) uses: actions/upload-artifact@v4 with: name: gcc-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_mac_latest: # MacOS w/ Clang + CMake # name: "MacOS Clang CMake" runs-on: macos-latest steps: - name: Install Dependencies (MacOS_latest) run: brew install ninja curl - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.10.0" - name: check clang version shell: bash run: | which clang clang -v - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Set file base name (MacOS_latest) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (MacOS_latest) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (MacOS_latest) run: | ls ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (MacOS_latest) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (MacOS_latest) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 # symlinks the compiler executables to a common location - name: Setup GNU Fortran uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: gcc version: 14 - name: List files for the hdf4 (MacOS_latest) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (MacOS_latest) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (NO_MAC_FORTRAN "ON") set (MODEL "GHDaily") set (GROUP "GHDaily") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (MacOS_latest) id: run-ctest run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (MacOS_latest) uses: actions/upload-artifact@v4 with: name: macos-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` ####### intel builds build_and_test_win_intel: # Windows w/ OneAPI + CMake # name: "Windows Intel CTest" runs-on: windows-latest steps: - name: Install Dependencies (Windows_intel) run: choco install ninja - name: add oneAPI to env uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: Set file base name (Windows_intel) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash # Get files created by release script - name: Get zip-tarball (Windows_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows_intel) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Uncompress source (Windows_intel) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: bash - name: Copy script files for the space (Windows_intel) run: | Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake -Destination ${{ runner.workspace }}/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake -Destination ${{ runner.workspace }}/hdf4/ shell: pwsh - name: List files for the hdf4 (Windows_intel) run: | Get-ChildItem -Path ${{ runner.workspace }}/hdf4 shell: pwsh - name: Create options file (Windows_intel) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") #set (CMAKE_GENERATOR_TOOLSET "Intel C++ Compiler 2024,fortran=ifx") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (MODEL "GHDaily") set (GROUP "GHDaily") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/intel.cmake") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Windows_intel) with oneapi env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: pwsh continue-on-error: true # Save log files created by ctest script - name: Save log (Windows_intel) uses: actions/upload-artifact@v4 with: name: intel-win-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_intel: # Linux (Ubuntu) w/ OneAPI + CMake # name: "Ubuntu Intel CMake" runs-on: ubuntu-latest steps: - name: Install CMake Dependencies (Linux_intel) run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz curl - name: add oneAPI to env uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: Set file base name (Linux_intel) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_intel) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_intel) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_intel) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_Linux) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_intel) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (MODEL "GHDaily") set (GROUP "GHDaily") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux_intel) env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_intel) uses: actions/upload-artifact@v4 with: name: intel-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` ####### clang builds build_and_test_win_clang: # Windows w/ clang + CMake # name: "Windows ClangCL CTest" runs-on: windows-latest steps: - name: Install Dependencies (Windows_clang) run: choco install ninja - name: add clang to env uses: KyleMayes/install-llvm-action@v2.0.6 id: setup-clang with: env: true version: '18' - name: Set file base name (Windows_clang) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash # Get files created by release script - name: Get zip-tarball (Windows_clang) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: using powershell shell: pwsh run: Get-Location - name: List files for the space (Windows_clang) run: | Get-ChildItem -Path ${{ github.workspace }} Get-ChildItem -Path ${{ runner.workspace }} shell: pwsh - name: Uncompress source (Windows_clang) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: bash - name: Copy script files for the space (Windows_clang) run: | Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake -Destination ${{ runner.workspace }}/hdf4/ Copy-Item -Path ${{ runner.workspace }}/hdf4/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake -Destination ${{ runner.workspace }}/hdf4/ shell: pwsh - name: List files for the hdf4 (Windows_clang) run: | Get-ChildItem -Path ${{ runner.workspace }}/hdf4 shell: pwsh - name: Create options file (Windows_clang) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CMAKE_GENERATOR_TOOLSET "ClangCL") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/clang.cmake") set (MODEL "GHDaily") set (GROUP "GHDaily") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Windows_clang) with clang run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: pwsh continue-on-error: true # Save log files created by ctest script - name: Save log (Windows_clang) uses: actions/upload-artifact@v4 with: name: clang-win-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build_and_test_linux_clang: # Linux (Ubuntu) w/ clang + CMake # name: "Ubuntu Clang CMake" runs-on: ubuntu-22.04 steps: - name: Install CMake Dependencies (Linux_clang) run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz curl libtinfo5 - name: add clang to env uses: KyleMayes/install-llvm-action@v2.0.6 id: setup-clang with: env: true version: '18.1' - name: check clang version shell: bash run: | which clang clang -v - name: Set file base name (Linux_clang) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by release script - name: Get tgz-tarball (Linux_clang) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: List files for the space (Linux_clang) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Linux_clang) run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz - name: Copy script files for the space (Linux_clang) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Linux_clang) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Linux_clang) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (MODEL "GHDaily") set (GROUP "GHDaily") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") #set (CMAKE_GENERATOR_TOOLSET "clang") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/clang.cmake") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_SZIP_ENCODING:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Linux_clang) run: | cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log shell: bash continue-on-error: true # Save log files created by ctest script - name: Save log (Linux_clang) uses: actions/upload-artifact@v4 with: name: clang-ubuntu-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` hdf4-hdf4.3.1/.github/workflows/cmake.yml000066400000000000000000000046171503061704500202370ustar00rootroot00000000000000name: hdf4 dev cmake CI # Controls when the action will run. Triggers the workflow on push or pull request on: workflow_call: permissions: contents: read # A workflow run is made up of one or more jobs that can run sequentially or # in parallel. We just have one job, but the matrix items defined below will # run in parallel. jobs: call-workflow-nonetcdf-cmake: name: "CMake Release NetCDF Off Workflows" uses: ./.github/workflows/main-cmake.yml with: netcdf: "false" shared: "true" build_mode: "Release" call-release-netcdf-cmake-mingw: name: "CMake Release NetCDF MinGW Workflows" uses: ./.github/workflows/main-cmake-mingw.yml with: netcdf: "true" shared: "true" build_mode: "Release" call-debug-netcdf-cmake: name: "CMake Debug NetCDF Workflows" uses: ./.github/workflows/main-cmake.yml with: netcdf: "true" shared: "true" build_mode: "Debug" call-release-netcdf-cmake: name: "CMake Release NetCDF Workflows" uses: ./.github/workflows/main-cmake.yml with: netcdf: "true" shared: "true" build_mode: "Release" call-release-bintest: name: "CMake Test Release Binaries" needs: call-release-netcdf-cmake uses: ./.github/workflows/cmake-bintest.yml with: build_mode: "Release" call-debug-static-cmake: name: "CMake Debug Static Workflows" uses: ./.github/workflows/main-cmake.yml with: netcdf: "false" shared: "false" build_mode: "Debug" call-release-static-cmake: name: "CMake Release Static Workflows" uses: ./.github/workflows/main-cmake.yml with: netcdf: "false" shared: "false" build_mode: "Release" call-release-cmake-intel: name: "CMake Intel Workflows" uses: ./.github/workflows/intel-cmake.yml with: build_mode: "Release" call-release-cmake-nvhpc: name: "CMake nvhpc Workflows" uses: ./.github/workflows/nvhpc-cmake.yml with: build_mode: "Release" call-release-cmake-aocc: name: "CMake aocc Workflows" uses: ./.github/workflows/aocc-cmake.yml with: build_mode: "Release" hdf4-hdf4.3.1/.github/workflows/codespell.yml000066400000000000000000000014151503061704500211220ustar00rootroot00000000000000# GitHub Action to automate the identification of common misspellings in text files # https://github.com/codespell-project/codespell # https://github.com/codespell-project/actions-codespell name: codespell on: [push, pull_request] permissions: contents: read jobs: codespell: name: Check for spelling errors runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.7 - uses: codespell-project/actions-codespell@master with: skip: ./config/sanitizer/sanitizers.cmake,./hdf/util/testfiles/*.raw,./hdf/util/testfiles/head.r8,./mfhdf/ncdump/*,./mfhdf/ncgen/*,./mfhdf/nctest/*,./mfhdf/README,./mfhdf/THANKS,./mfhdf/FAQ ignore_words_list: acount,anid,ans,clude,fillin,indx,isnt,inout,fo,msdos,nam,nd,pres,sav,shs,siz,varn,vlone hdf4-hdf4.3.1/.github/workflows/cygwin-cmake.yml000066400000000000000000000111371503061704500215300ustar00rootroot00000000000000name: hdf4 CMake cygwin # Triggers the workflow on a call from another workflow on: workflow_call: inputs: snap_name: description: 'The name in the source tarballs' type: string required: false default: hdfsrc file_base: description: "The common base name of the source tarballs" required: true type: string use_environ: description: 'Environment to locate files' type: string required: true default: snapshots permissions: contents: read jobs: cygwin_build_and_test: name: "cygwin-${{ inputs.build_mode }}" runs-on: windows-latest timeout-minutes: 30 steps: - name: Set git to use LF run: | git config --global core.autocrlf input - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install Cygwin uses: cygwin/cygwin-install-action@master with: packages: cmake gcc-fortran libjpeg-devel make ninja zlib-devel - name: Set file base name (Cygwin) id: set-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT if [[ '${{ inputs.use_environ }}' == 'release' ]] then SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") else SOURCE_NAME_BASE=$(echo "hdfsrc") fi echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' # Get files created by release script - name: Get zip-tarball (Cygwin) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} - name: List files for the space (Cygwin) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: Uncompress source (Cygwin) working-directory: ${{ github.workspace }} run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' - name: Copy script files for the space (Cygwin) run: | cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf4 cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF4config.cmake ${{ runner.workspace }}/hdf4 - name: List files for the hdf4 (Cygwin) run: | ls ${{ runner.workspace }}/hdf4 - name: Create options file (Cygwin) uses: "DamianReeves/write-file-action@master" with: path: ${{ runner.workspace }}/hdf4/HDF4options.cmake write-mode: overwrite contents: | set (CTEST_DROP_SITE_INIT "my.cdash.org") # Change following line to submit to your CDash dashboard to a different CDash project #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF4") set (MODEL "GHDaily") set (GROUP "GHDaily") set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - name: Run ctest (Cygwin) shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' run: | export PATH=/usr/bin:$PATH cd "${{ runner.workspace }}/hdf4" ctest -S HDF4config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-CYG,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf4.log continue-on-error: true # Save log files created by ctest script - name: Save log (Cygwin) uses: actions/upload-artifact@v4 with: name: gcc-cygwin-log path: ${{ runner.workspace }}/hdf4/hdf4.log if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` hdf4-hdf4.3.1/.github/workflows/daily-build.yml000066400000000000000000000124451503061704500213540ustar00rootroot00000000000000name: hdf4 dev daily build # Triggers the workflow on demand or on a call from another workflow # NOTE: inputs must be duplicated between triggers on: workflow_dispatch: inputs: use_ignore: description: 'Ignore has_changes check' type: string required: false default: check workflow_call: inputs: use_ignore: description: 'Ignore has_changes check' type: string required: false default: check permissions: contents: read jobs: get-old-names: runs-on: ubuntu-latest outputs: hdf4-name: ${{ steps.gethdf4base.outputs.HDF4_NAME_BASE }} run-ignore: ${{ steps.getinputs.outputs.INPUTS_IGNORE }} steps: - uses: actions/checkout@v4.1.7 - name: Get hdf4 release base name uses: dsaltares/fetch-gh-release-asset@master with: version: 'tags/snapshot' file: 'last-file.txt' continue-on-error: true - name: Read base-name file id: gethdf4base run: echo "HDF4_NAME_BASE=$(cat last-file.txt)" >> $GITHUB_OUTPUT - run: echo "hdf4 base name is ${{ steps.gethdf4base.outputs.HDF4_NAME_BASE }}." - name: Read inputs id: getinputs run: | echo "INPUTS_IGNORE=${{ inputs.use_ignore }}" >> $GITHUB_OUTPUT - run: echo "use_ignore is ${{ steps.getinputs.outputs.INPUTS_IGNORE }}." call-workflow-tarball: needs: [get-old-names] uses: ./.github/workflows/tarball.yml with: use_ignore: ${{ needs.get-old-names.outputs.run-ignore }} use_tag: snapshot use_environ: snapshots call-release-cmake-cygwin: needs: [get-old-names, call-workflow-tarball] name: "CMake Cygwin Workflows" uses: ./.github/workflows/cygwin-cmake.yml with: file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-c-script: needs: [get-old-names, call-workflow-tarball] uses: ./.github/workflows/cmake-script.yml with: file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-sanitizers: needs: [get-old-names, call-workflow-tarball] uses: ./.github/workflows/cmake-analysis.yml with: file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-ctest: needs: [get-old-names, call-workflow-tarball] uses: ./.github/workflows/cmake-ctest.yml with: preset_name: ci-StdShar file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} # use_tag: snapshot use_environ: snapshots secrets: APPLE_CERTS_BASE64: ${{ secrets.APPLE_CERTS_BASE64 }} APPLE_CERTS_BASE64_PASSWD: ${{ secrets.APPLE_CERTS_BASE64_PASSWD }} KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} AZURE_CODE_SIGNING_NAME: ${{ secrets.AZURE_CODE_SIGNING_NAME }} AZURE_CERT_PROFILE_NAME: ${{ secrets.AZURE_CERT_PROFILE_NAME }} if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-abi: needs: [get-old-names, call-workflow-tarball, call-workflow-ctest] uses: ./.github/workflows/abi-report.yml with: file_ref: '4.3.0' file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_tag: snapshot use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-release: needs: [get-old-names, call-workflow-tarball, call-workflow-ctest, call-workflow-abi] permissions: contents: write # In order to allow tag creation uses: ./.github/workflows/release-files.yml with: file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} file_branch: ${{ needs.call-workflow-tarball.outputs.file_branch }} file_sha: ${{ needs.call-workflow-tarball.outputs.file_sha }} use_tag: snapshot use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} call-workflow-remove: needs: [get-old-names, call-workflow-tarball, call-workflow-ctest, call-workflow-abi, call-workflow-release] permissions: contents: write # In order to allow file deletion uses: ./.github/workflows/remove-files.yml with: file_base: ${{ needs.get-old-names.outputs.hdf4-name }} use_tag: snapshot use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) && (needs.get-old-names.outputs.hdf4-name != needs.call-workflow-tarball.outputs.file_base) }} hdf4-hdf4.3.1/.github/workflows/daily-schedule.yml000066400000000000000000000006031503061704500220420ustar00rootroot00000000000000name: hdf4 dev daily build on schedule # Triggers the workflow on a schedule or on demand on: workflow_dispatch: schedule: - cron: "6 0 * * *" permissions: contents: write # In order to allow tag creation and file deletion jobs: daily-build: uses: ./.github/workflows/daily-build.yml with: use_ignore: check if: "github.repository_owner == 'HDFGroup'" hdf4-hdf4.3.1/.github/workflows/hdfeos2.yml000066400000000000000000000022141503061704500205000ustar00rootroot00000000000000name: hdfeos on: [push, pull_request] jobs: build: name: Build hdfeos runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.1 - name: Install Autotools Dependencies (Linux) run: | sudo apt update sudo apt install automake autoconf libtool libtool-bin libjpeg-dev sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev doxygen openssl libtool libtool-bin - name: Install HDF4 run: | ./autogen.sh ./configure --prefix=/usr/local --enable-shared --disable-fortran --disable-netcdf make sudo make install - name: Install HDF-EOS2 run: | wget -O hdfeos.tar.gz "https://git.earthdata.nasa.gov/projects/DAS/repos/hdfeos/raw/hdf-eos2-3.0-src.tar.gz?at=3128a738021501c821549955f6c78348e5f33850" tar zxvf hdfeos.tar.gz cd hdf-eos2-3.0 ./configure LDFLAGS="-L/usr/local/lib -lmfhdf" --prefix=/usr/local/ --enable-shared --enable-install-include make make check sudo make install hdf4-hdf4.3.1/.github/workflows/intel-auto.yml000066400000000000000000000045531503061704500212370ustar00rootroot00000000000000name: hdf4 dev autotools icx CI on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string build_option: description: "--enable-production or --disable-production" required: true type: string permissions: contents: read jobs: intel_oneapi_linux: name: "linux-oneapi ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install Dependencies shell: bash run: | sudo apt install -y autoconf automake libtool libtool-bin libaec-dev libjpeg-dev sudo apt install -y doxygen libncurses-dev libquadmath0 libstdc++6 libxml2 sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential - name: Install oneAPI (Linux) uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: Autotools Configure shell: bash env: CC: ${{ steps.setup-fortran.outputs.cc }} run: | sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" $GITHUB_WORKSPACE/configure \ ${{ inputs.build_option }} \ --enable-netcdf \ --enable-shared \ --disable-fortran - name: Autotools Build shell: bash env: CC: ${{ steps.setup-fortran.outputs.cc }} run: | make -j3 working-directory: ${{ runner.workspace }}/build - name: Autotools Run Tests shell: bash env: CC: ${{ steps.setup-fortran.outputs.cc }} run: | make check -j2 working-directory: ${{ runner.workspace }}/build - name: Autotools Install shell: bash env: CC: ${{ steps.setup-fortran.outputs.cc }} run: | make install working-directory: ${{ runner.workspace }}/build # - name: Autotools Verify Install # shell: bash # env: # CC: ${{ steps.setup-fortran.outputs.cc }} # run: | # make check-install # working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/intel-cmake.yml000066400000000000000000000100261503061704500213370ustar00rootroot00000000000000name: hdf4 CMake icx # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string permissions: contents: read jobs: intel_oneapi_linux: name: "linux-oneapi ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources (Linux) uses: actions/checkout@v4.1.7 - name: Install Dependencies (Linux) shell: bash run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev - name: Install oneAPI (Linux) uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: CMake Configure (Linux) shell: bash env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ ${{ github.workspace }} - name: CMake Build (Linux) shell: bash env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests (Linux) shell: bash env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build Intel_oneapi_windows: name: "windows-oneapi ${{ inputs.build_mode }}" runs-on: windows-latest steps: - name: Get Sources (Windows) uses: actions/checkout@v4.1.7 - name: Install Dependencies (Windows) run: choco install ninja - name: install oneAPI (Windows) uses: fortran-lang/setup-fortran@v1 id: setup-fortran with: compiler: intel version: '2024.1' - name: CMake Configure (Windows) shell: pwsh env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | mkdir "${{ runner.workspace }}/build" Set-Location -Path "${{ runner.workspace }}\\build" cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF4_BUILD_FORTRAN=OFF -DJPEG_USE_LOCALCONTENT=OFF -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }} - name: CMake Build (Windows) shell: pwsh env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests (Windows) shell: pwsh env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/main-auto.yml000066400000000000000000000051571503061704500210510ustar00rootroot00000000000000name: hdf4 dev CI # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string build_option: description: "--enable-production or --disable-production" required: true type: string shared: description: "shared enable/disable" required: true type: string netcdf: description: "netcdf enable/disable" required: true type: string permissions: contents: read jobs: # A workflow that builds the library and runs all the tests # Linux (Ubuntu) w/ gcc + Autotools # Autotools_build_and_test: name: "GCC-${{ inputs.build_mode }}-NC=${{ inputs.netcdf }}d" # Don't run the action if the commit message says to skip CI if: "!contains(github.event.head_commit.message, 'skip-ci')" # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # SETUP - name: Install Linux Dependencies run: | sudo apt update sudo apt install -y autoconf automake libtool libtool-bin libaec-dev libjpeg-dev sudo apt install -y doxygen libncurses-dev libquadmath0 libstdc++6 libxml2 sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.7 - name: Autotools Configure run: | sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" $GITHUB_WORKSPACE/configure \ ${{ inputs.build_option }} \ --${{ inputs.netcdf }}-netcdf \ --disable-fortran \ --${{ inputs.shared }}-java \ --${{ inputs.shared }}-shared shell: bash - name: Autotools Build run: make -j3 working-directory: ${{ runner.workspace }}/build - name: Autotools Run Tests run: make check -j2 working-directory: ${{ runner.workspace }}/build # INSTALL (note that this runs even when we don't run the tests) - name: Autotools Install run: make install working-directory: ${{ runner.workspace }}/build # - name: Autotools Verify Install # run: make check-install # working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/main-cmake-mingw.yml000066400000000000000000000062241503061704500222740ustar00rootroot00000000000000name: hdf4 dev CMake MinGW CI # Controls when the action will run. Triggers the workflow on a call on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string shared: description: "shared true/false" required: true type: string netcdf: description: "netcdf true/false" required: true type: string permissions: contents: read jobs: # A workflow that builds the library and runs all the tests CMake_build_and_test: name: "Ubuntu mingw-${{ inputs.build_mode }}-NC=${{ inputs.netcdf }}" # Don't run the action if the commit message says to skip CI if: "!contains(github.event.head_commit.message, 'skip-ci')" # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # # SETUP # - name: Install CMake Dependencies (Linux) run: | sudo apt update sudo apt-get install -y ninja-build libtirpc-dev graphviz - name: Install MinGW Dependencies (Linux) uses: egor-tensin/setup-mingw@v2 with: platform: x64 - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.9.7" # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.1 # # CMAKE CONFIGURE # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ -G Ninja \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DCMAKE_TOOLCHAIN_FILE=config/toolchain/mingw64.cmake \ -DBUILD_SHARED_LIBS:BOOL=${{ inputs.shared }} \ -DHDF4_BUILD_EXAMPLES:BOOL=ON \ -DBUILD_JPEG_WITH_PIC:BOOL=ON \ -DHDF4_ENABLE_NETCDF:BOOL=${{ inputs.netcdf }} \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ -DHDF4_BUILD_DOC:BOOL=ON \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DHDF4_PACK_EXAMPLES:BOOL=ON \ -DHDF4_PACKAGE_EXTLIBS:BOOL=ON \ $GITHUB_WORKSPACE shell: bash # # BUILD # - name: CMake Build run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build # # RUN TESTS # - name: CMake Run Tests run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build if: false - name: CMake Run Package run: cpack -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build - name: List files in the space run: | ls -l ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/main-cmake.yml000066400000000000000000000171111503061704500211520ustar00rootroot00000000000000name: hdf4 dev CMake CI # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string shared: description: "shared true/false" required: true type: string netcdf: description: "netcdf true/false" required: true type: string permissions: contents: read jobs: # A workflow that builds the library and runs all the tests CMake_build_and_test: strategy: # The current matrix has one dimensions: # # * config name # # Most configuration information is added via the 'include' mechanism, # which will append the key-value pairs in the configuration where the # names match. matrix: name: - "Windows MSVC" - "Ubuntu gcc" - "MacOS Clang" # This is where we list the bulk of the options for each configuration. # The key-value pair values are usually appropriate for being CMake. include: # Windows w/ MSVC + CMake # # No Fortran or parallel - name: "Windows MSVC" os: windows-latest toolchain: "" fortran: OFF java: ON docs: ON localjpeg: OFF locallibaec: OFF localzlib: OFF cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" generator: "-G \"Visual Studio 17 2022\" -A x64" run_tests: true # Linux (Ubuntu) w/ gcc + CMake # - name: "Ubuntu gcc" os: ubuntu-latest fortran: OFF java: ON docs: ON localjpeg: OFF locallibaec: OFF localzlib: OFF toolchain: "-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/config/toolchain/gcc.cmake" cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" generator: "-G Ninja" run_tests: true # MacOS w/ Clang + CMake # - name: "MacOS Clang" os: macos-latest fortran: OFF java: ON docs: ON localjpeg: OFF locallibaec: OFF localzlib: OFF toolchain: "-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/config/toolchain/clang.cmake" cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" generator: "-G Ninja" run_tests: true # Sets the job's name from the properties name: "${{ matrix.name }}-${{ inputs.build_mode }}-NC=${{ inputs.netcdf }}" # Don't run the action if the commit message says to skip CI if: "!contains(github.event.head_commit.message, 'skip-ci')" # The type of runner that the job will run on runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job steps: #Useful for debugging - name: Dump matrix context run: echo '${{ toJSON(matrix) }}' - name: Install CMake Dependencies (Linux) run: | sudo apt-get update sudo apt-get install -y ninja-build libtirpc-dev graphviz if: matrix.os == 'ubuntu-latest' - name: Install Dependencies (Windows) run: choco install ninja if: matrix.os == 'windows-latest' - name: Install Dependencies (macOS) run: brew install ninja if: ${{ matrix.os == 'macos-latest' }} - name: Install Dependencies uses: ssciwr/doxygen-install@v1 with: version: "1.9.7" - name: Set up JDK 19 uses: actions/setup-java@v4 with: java-version: '19' distribution: 'temurin' - name: Set environment for MSVC (Windows) run: | # Set these environment variables so CMake picks the correct compiler echo "CXX=cl.exe" >> $GITHUB_ENV echo "CC=cl.exe" >> $GITHUB_ENV if: matrix.os == 'windows-latest' # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.7 # CMAKE CONFIGURE - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ ${{ matrix.generator }} \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ ${{ matrix.toolchain }} \ -DBUILD_SHARED_LIBS:BOOL=${{ inputs.shared }} \ -DHDF4_BUILD_EXAMPLES:BOOL=ON \ -DBUILD_JPEG_WITH_PIC:BOOL=ON \ -DHDF4_ENABLE_NETCDF:BOOL=${{ inputs.netcdf }} \ -DHDF4_BUILD_FORTRAN:BOOL=${{ matrix.fortran }} \ -DHDF4_BUILD_JAVA:BOOL=${{ inputs.shared }} \ -DHDF4_BUILD_DOC:BOOL=${{ matrix.docs }} \ -DJPEG_USE_LOCALCONTENT:BOOL=${{ matrix.localjpeg }} \ -DLIBAEC_USE_LOCALCONTENT:BOOL=${{ matrix.locallibaec }} \ -DZLIB_USE_LOCALCONTENT:BOOL=${{ matrix.localzlib }} \ -DHDF4_PACK_EXAMPLES:BOOL=ON \ -DHDF4_PACKAGE_EXTLIBS:BOOL=ON \ -DHDF4_PACK_MACOSX_DMG:BOOL=OFF \ $GITHUB_WORKSPACE shell: bash # BUILD - name: CMake Build run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build # RUN TESTS - name: CMake Run Tests run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build if: ${{ (matrix.run_tests) && (matrix.name != 'Ubuntu mingw CMake') }} - name: CMake Run Package run: cpack -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build # - name: CMake Run Package (Mac_latest) # run: cpack -C ${{ inputs.build_mode }} -G STGZ -V # if: ${{ (matrix.os == 'macos-latest') }} - name: List files in the space run: | ls -l ${{ runner.workspace }}/build # Save files created by ctest script - name: Save published binary (Windows) uses: actions/upload-artifact@v4 with: name: zip-vs2022_cl-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF-*-win64.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` if: ${{ (matrix.os == 'windows-latest') && (matrix.name != 'Ubuntu mingw CMake') && (inputs.netcdf == 'true') && (inputs.shared == 'true') }} - name: Save published binary (linux) uses: actions/upload-artifact@v4 with: name: tgz-ubuntu-2404_gcc-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF-*-Linux.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` if: ${{ (matrix.os == 'ubuntu-latest') && (matrix.name != 'Ubuntu mingw CMake') && (inputs.netcdf == 'true') && (inputs.shared == 'true') }} - name: Save published binary (Mac_latest) uses: actions/upload-artifact@v4 with: name: tgz-macos14_clang-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF-*-Darwin.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` if: ${{ (matrix.os == 'macos-latest') && (matrix.name != 'Ubuntu mingw CMake') && (inputs.netcdf == 'true') && (inputs.shared == 'true') }} hdf4-hdf4.3.1/.github/workflows/main.yml000066400000000000000000000021661503061704500201000ustar00rootroot00000000000000name: hdf4 dev CI # Controls when the action will run. Triggers the workflow on push or pull request on: workflow_dispatch: push: pull_request: branches: [ master, hdf_4_3_1 ] paths-ignore: - '.github/CODEOWNERS' - 'release_notes/**' - 'COPYING' - '**.md' # Using concurrency to cancel any in-progress job or run concurrency: group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} cancel-in-progress: true permissions: contents: read # A workflow run is made up of one or more jobs that can run sequentially or # in parallel. We just have one job, but the matrix items defined below will # run in parallel. jobs: workflow-autotools: name: "Autotools Workflows" uses: ./.github/workflows/autotools.yml if: "!contains(github.event.head_commit.message, 'skip-ci')" workflow-cmake: name: "CMake Workflows" uses: ./.github/workflows/cmake.yml if: "!contains(github.event.head_commit.message, 'skip-ci')" workflow-msys2-cmake: name: "CMake msys2 Workflows" uses: ./.github/workflows/msys2-cmake.yml with: build_mode: "Release" hdf4-hdf4.3.1/.github/workflows/mingw-cmake.yml000066400000000000000000000046771503061704500213640ustar00rootroot00000000000000name: hdf4 CMake MinGW on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string shared: description: "shared true/false" required: true type: string permissions: contents: read jobs: mingw_build_and_test: name: "mingw-${{ inputs.build_mode }}" if: "!contains(github.event.head_commit.message, 'skip-ci')" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: Install Dependencies shell: bash run: | sudo apt update sudo apt-get install -y ninja-build libtirpc-dev graphviz - name: Install MinGW uses: egor-tensin/setup-mingw@v2 with: platform: x64 - name: Install Doxygen uses: ssciwr/doxygen-install@v1 with: version: "1.9.7" - name: CMake Configure shell: bash run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ -G Ninja \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/config/toolchain/mingw64.cmake \ -DBUILD_SHARED_LIBS:BOOL=${{ inputs.shared }} \ -DHDF4_BUILD_EXAMPLES:BOOL=ON \ -DBUILD_JPEG_WITH_PIC:BOOL=ON \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ -DHDF4_BUILD_DOC:BOOL=ON \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DHDF4_PACK_EXAMPLES:BOOL=ON \ -DHDF4_PACKAGE_EXTLIBS:BOOL=ON \ $GITHUB_WORKSPACE - name: CMake Build shell: bash run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests shell: bash run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V if: false - name: CMake Package shell: bash run: | cpack -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build - name: List files in the space run: | ls -l ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/msys2-auto.yml000066400000000000000000000031351503061704500211740ustar00rootroot00000000000000name: msys2 auto on: workflow_dispatch: permissions: contents: read # Using concurrency to cancel any in-progress job or run concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true jobs: msys2_build_and_test: runs-on: windows-latest strategy: matrix: include: - { icon: '⬛', sys: mingw32 } - { icon: '🟦', sys: mingw64 } - { icon: '🟨', sys: ucrt64 } - { icon: '🟧', sys: clang64 } name: ${{ matrix.icon }} msys2-${{ matrix.sys }}-${{ inputs.build_mode }} defaults: run: shell: msys2 {0} steps: - name: Get Sources uses: actions/checkout@v4.1.7 - name: '${{ matrix.icon }} Setup MSYS2' uses: msys2/setup-msys2@v2 with: msystem: ${{matrix.sys}} update: true install: >- git autotools pacboy: >- toolchain:p libjpeg-turbo:p - name: Autotools Configure shell: msys2 {0} run: | sh ./autogen.sh mkdir "$GITHUB_WORKSPACE/build" cd "$GITHUB_WORKSPACE/build" LDFLAGS="-lws2_32" $GITHUB_WORKSPACE/configure \ --disable-netcdf --disable-netcdf-tools --enable-static-exec - name: Autotools Build shell: msys2 {0} run: | make -j3 working-directory: $GITHUB_WORKSPACE/build - name: Autotools Run Tests shell: msys2 {0} run: | make check -j working-directory: $GITHUB_WORKSPACE/build hdf4-hdf4.3.1/.github/workflows/msys2-cmake.yml000066400000000000000000000041531503061704500213050ustar00rootroot00000000000000name: hdf4 CMake MSys2 # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string permissions: contents: read jobs: CMake_build_and_test: # The type of runner that the job will run on runs-on: windows-latest strategy: matrix: include: - { icon: '⬛', sys: mingw32 } - { icon: '🟦', sys: mingw64 } - { icon: '🟨', sys: ucrt64 } - { icon: '🟧', sys: clang64 } name: ${{ matrix.icon }} MSYS2-${{ matrix.sys }}-${{ inputs.build_mode }} defaults: run: shell: msys2 {0} steps: - name: '${{ matrix.icon }} Setup MSYS2' uses: msys2/setup-msys2@v2 with: msystem: ${{matrix.sys}} update: true install: >- base-devel git gcc make development pacboy: >- toolchain:p cmake:p ninja:p - name: Set git to use LF run: | git config --global core.autocrlf input - name: Get Sources uses: actions/checkout@v4.1.1 - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ -G Ninja \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DCMAKE_TOOLCHAIN_FILE="" \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ $GITHUB_WORKSPACE - name: CMake Build run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/netcdf-cmake.yml000066400000000000000000000067071503061704500215020ustar00rootroot00000000000000name: netCDF cmake dev on: workflow_dispatch: push: pull_request: branches: [ master ] paths-ignore: - '.github/CODEOWNERS' - 'doc/**' - 'release_docs/**' - 'COPYING' - '**.md' permissions: contents: read # Using concurrency to cancel any in-progress job or run concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - name: Install System dependencies run: | sudo apt-get update sudo apt-get install ninja-build sudo apt install libssl3 libssl-dev libcurl4 sudo apt install -y libaec-dev zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl sudo apt install -y bzip2 m4 flex bison cmake libzip-dev doxygen openssl libtool libtool-bin - name: Checkout HDF4 uses: actions/checkout@v4.1.7 - name: CMake Configure HDF4 run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ -DHDF4_BUILD_EXAMPLES:BOOL=OFF \ -DBUILD_JPEG_WITH_PIC:BOOL=ON \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DBUILD_TESTING:BOOL=OFF \ -DBUILD_STATIC_LIBS:BOOL=OFF \ -DCMAKE_INSTALL_PREFIX:PATH=/usr/local \ $GITHUB_WORKSPACE shell: bash - name: CMake Build HDF4 run: cmake --build . --parallel 3 --config Release working-directory: ${{ runner.workspace }}/build - name: Install HDF4 run: | sudo cmake --install . --config Release --prefix="/usr/local" working-directory: ${{ runner.workspace }}/build - name: Checkout HDF5 uses: actions/checkout@v4.1.7 with: repository: HDFGroup/hdf5 path: hdf5 ref: hdf5_1.14.5 - name: CMake Configure HDF5 run: | mkdir "${{ runner.workspace }}/build5" cd "${{ runner.workspace }}/build5" cmake -C $GITHUB_WORKSPACE/hdf5/config/cmake/cacheinit.cmake \ -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ -DHDF4_BUILD_EXAMPLES:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DBUILD_TESTING:BOOL=OFF \ -DBUILD_STATIC_LIBS:BOOL=OFF \ -DCMAKE_INSTALL_PREFIX:PATH=/usr/local \ $GITHUB_WORKSPACE/hdf5 shell: bash - name: CMake Build HDF5 run: cmake --build . --parallel 3 --config Release working-directory: ${{ runner.workspace }}/build5 - name: Install HDF5 run: | sudo cmake --install . --config Release --prefix="/usr/local" working-directory: ${{ runner.workspace }}/build5 - name: Checkout netCDF uses: actions/checkout@v4.1.7 with: repository: unidata/netcdf-c path: netcdf-c - name: Test netCDF run: | mkdir "netcdf-c/build" cd "netcdf-c/build" cmake .. -DUILD_SHARED_LIBS=ON -DNETCDF_ENABLE_HDF4=ON -DNETCDF_ENABLE_HDF4=ON make make test continue-on-error: true hdf4-hdf4.3.1/.github/workflows/netcdf.yml000066400000000000000000000062201503061704500204120ustar00rootroot00000000000000name: netCDF dev on: workflow_dispatch: push: pull_request: branches: [ master ] paths-ignore: - '.github/CODEOWNERS' - 'release_notes/**' - 'COPYING' - '**.md' permissions: contents: read # Using concurrency to cancel any in-progress job or run concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - name: Install System dependencies run: | sudo apt-get update sudo apt-get install ninja-build sudo apt install libssl3 libssl-dev libcurl4 sudo apt install -y automake autoconf libtool libtool-bin sudo apt install -y libaec-dev zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl sudo apt install -y bzip2 m4 flex bison cmake libzip-dev doxygen openssl - name: Checkout HDF4 uses: actions/checkout@v4.1.7 - name: Install HDF4 run: | ./autogen.sh ./configure --prefix=/usr/local --disable-netcdf --disable-netcdf-tools --enable-shared --with-szlib make -j sudo make install -j - name: Checkout HDF5 uses: actions/checkout@v4.1.7 with: repository: HDFGroup/hdf5 path: hdf5 ref: hdf5_1.14.5 - name: CMake Configure HDF5 run: | mkdir "${{ runner.workspace }}/build5" cd "${{ runner.workspace }}/build5" cmake -C $GITHUB_WORKSPACE/hdf5/config/cmake/cacheinit.cmake \ -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DHDF4_BUILD_FORTRAN:BOOL=OFF \ -DHDF4_BUILD_JAVA:BOOL=OFF \ -DHDF4_BUILD_EXAMPLES:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DBUILD_TESTING:BOOL=OFF \ -DBUILD_STATIC_LIBS:BOOL=OFF \ -DCMAKE_INSTALL_PREFIX:PATH=/usr/local \ $GITHUB_WORKSPACE/hdf5 shell: bash - name: CMake Build HDF5 run: cmake --build . --parallel 3 --config Release working-directory: ${{ runner.workspace }}/build5 - name: Install HDF5 run: | sudo cmake --install . --config Release --prefix="/usr/local" working-directory: ${{ runner.workspace }}/build5 - name: Checkout netCDF uses: actions/checkout@v4.1.7 with: repository: unidata/netcdf-c path: netcdf-c - name: Test netCDF run: | cd netcdf-c autoreconf -if CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --enable-hdf5 --enable-hdf4 --enable-hdf4-file-tests --enable-dap --disable-dap-remote-tests --enable-external-server-tests cat config.log cat libnetcdf.settings CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make check TESTS="" -j LD_LIBRARY_PATH="/home/runner/work/hdf4/hdf4/netcdf-c/liblib/.libs:/usr/local/lib:${LD_LIBRARY_PATH}" CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make check -j continue-on-error: true hdf4-hdf4.3.1/.github/workflows/nvhpc-auto.yml000066400000000000000000000064051503061704500212400ustar00rootroot00000000000000name: hdf4 dev autotools nvhpc on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string build_option: description: "--enable-production or --disable-production" required: true type: string permissions: contents: read jobs: nvhpc_build_and_test: name: "nvhpc ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.2.1 - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install autoconf automake libtool libtool-bin libaec-dev sudo apt-get install doxygen graphviz sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential - name: Install NVHPC shell: bash run: | curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list sudo apt-get update -y sudo apt-get install -y nvhpc-24-11 echo "NVHPCSDK=/opt/nvidia/hpc_sdk" >> $GITHUB_ENV echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc" >> $GITHUB_ENV echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvfortran" >> $GITHUB_ENV echo "CC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc" >> $GITHUB_ENV echo "FC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvfortran" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/lib" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: Autotools Configure shell: bash run: | export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH sh ./autogen.sh mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" $GITHUB_WORKSPACE/configure \ ${{ inputs.build_option }} \ --disable-fortran \ --enable-shared \ #cat config.log - name: Autotools Build shell: bash run: | export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH make -j3 working-directory: ${{ runner.workspace }}/build - name: Autotools Run Tests run: | export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH make check -j working-directory: ${{ runner.workspace }}/build - name: Autotools Install run: | export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH make install working-directory: ${{ runner.workspace }}/build # - name: Autotools Verify Install # run: | # export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH # make check-install # working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/nvhpc-cmake.yml000066400000000000000000000056751503061704500213600ustar00rootroot00000000000000name: hdf4 CMake nvhpc # Triggers the workflow on a call from another workflow on: workflow_call: inputs: build_mode: description: "release vs. debug build" required: true type: string permissions: contents: read jobs: nvhpc_build_and_test: name: "nvhpc ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - name: Get Sources uses: actions/checkout@v4.2.1 - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install ninja-build doxygen graphviz sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev sudo apt install -y libaec-dev zlib1g-dev wget curl bzip2 flex bison cmake libzip-dev openssl build-essential - name: Install NVHPC shell: bash run: | curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list sudo apt-get update -y sudo apt-get install -y nvhpc-24-11 echo "NVHPCSDK=/opt/nvidia/hpc_sdk" >> $GITHUB_ENV echo "OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc" >> $GITHUB_ENV echo "OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvfortran" >> $GITHUB_ENV echo "CC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc" >> $GITHUB_ENV echo "FC=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvfortran" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/cuda/12.3/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/lib" >> $GITHUB_ENV echo "DESTDIR=/tmp" >> $GITHUB_ENV - name: CMake Configure shell: bash run: | export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.11/compilers/bin:$PATH mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ -G Ninja \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DJPEG_USE_LOCALCONTENT:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ -DHDF4_BUILD_FORTRAN:BOOL=ON \ -DHDF4_BUILD_JAVA:BOOL=OFF \ $GITHUB_WORKSPACE - name: CMake Build shell: bash run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build - name: CMake Run Tests shell: bash run: | ctest . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build hdf4-hdf4.3.1/.github/workflows/ppc64.yml000066400000000000000000000035351503061704500201110ustar00rootroot00000000000000name: ppc64le workflow on: workflow_dispatch: push: pull_request: branches: [ master ] paths-ignore: - '.github/CODEOWNERS' - 'doc/**' - 'release_docs/**' - 'COPYING' - '**.md' jobs: powerpc-cmake: # The host should always be Linux runs-on: ubuntu-latest name: Ubuntu PowerPC CMake steps: - uses: actions/checkout@v4.1.7 - uses: uraimo/run-on-arch-action@v3 name: Run commands id: runcmd with: arch: ppc64le distro: ubuntu_latest # Not required, but speeds up builds by storing container images in # a GitHub package registry. githubToken: ${{ github.token }} install: | apt-get update -q -y apt-get install -q -y --no-install-recommends \ ninja-build libtirpc-dev graphviz gcc \ libc6-dev libjpeg-dev \ make sudo zlib1g zlib1g-dev \ cmake run: | mkdir "build" cd "build" cmake -C ../config/cmake/cacheinit.cmake \ -G Ninja \ --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=../config/toolchain/gcc.cmake \ -DBUILD_SHARED_LIBS:BOOL=ON \ -DHDF4_BUILD_EXAMPLES=ON \ -DHDF4_BUILD_FORTRAN=OFF \ -DHDF4_BUILD_JAVA=OFF \ -DHDF4_BUILD_DOC=OFF \ -DJPEG_USE_LOCALCONTENT=OFF \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ -DHDF4_PACK_EXAMPLES:BOOL=ON \ -DHDF4_PACKAGE_EXTLIBS:BOOL=ON \ .. cmake --build . --config Release ctest . -C Release -V -E "MFHDF_TEST-hdftest|HDP-dumpsds-18" cpack -C Release -V hdf4-hdf4.3.1/.github/workflows/publish-branch.yml000066400000000000000000000025641503061704500220570ustar00rootroot00000000000000name: hdf4 publish files in HDF4 folder from branch to S3 # Triggers the workflow on demand on: workflow_dispatch: inputs: local_dir: description: 'HDF4 local directory' type: string required: true target_dir: description: 'hdf4 target bucket directory' type: string required: true permissions: contents: read jobs: publish-tag: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@9a9194f87191a7e9055e3e9b95b8cfb13023bb08 # v4.1.7 with: fetch-depth: 0 ref: '${{ github.head_ref || github.ref_name }}' - name: List files for the space run: | ls -l ${{ github.workspace }} ls ${{ github.workspace }}/HDF4 - name: Setup AWS CLI uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} - name: Sync dir to S3 bucket run: | aws s3 sync ./HDF4/${{ inputs.local_dir }} s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }} hdf4-hdf4.3.1/.github/workflows/publish-release.yml000066400000000000000000000035131503061704500222350ustar00rootroot00000000000000name: hdf4 publishrelease # Triggers the workflow on demand on: workflow_dispatch: inputs: use_tag: description: 'HDF4 Release version tag' type: string required: true target_dir: description: 'HDF4 target bucket directory' type: string required: true permissions: contents: read jobs: publish-tag: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@9a9194f87191a7e9055e3e9b95b8cfb13023bb08 # v4.1.7 with: fetch-depth: 0 ref: '${{ github.head_ref || github.ref_name }}' - name: Get hdf4 release uses: dsaltares/fetch-gh-release-asset@master with: repo: 'HDFGroup/hdf4' version: 'tags/${{ inputs.use_tag }}' regex: true target: 'HDF4/' file: '${{ inputs.use_tag }}-*.*' - name: Setup AWS CLI uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} - name: Sync release to S3 bucket run: | aws s3 sync ./HDF4 s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/downloads --delete - name: Uncompress source (Linux) run: unzip ${{ github.workspace }}/HDF4/${{ inputs.use_tag }}.doxygen.zip - name: Sync userguide to S3 bucket run: | aws s3 sync ./${{ inputs.use_tag }}.doxygen s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/documentation/doxygen --delete hdf4-hdf4.3.1/.github/workflows/release-files.yml000066400000000000000000000304631503061704500216750ustar00rootroot00000000000000name: hdf4 dev release-files # Triggers the workflow on a call from another workflow on: workflow_call: inputs: use_tag: description: 'Release version tag' type: string required: false default: snapshot use_environ: description: 'Environment to locate files' type: string required: true default: snapshots file_base: description: "The common base name of the source tarballs" required: true type: string file_branch: description: "The branch name for the source tarballs" required: true type: string file_sha: description: "The sha for the source tarballs" required: true type: string # Minimal permissions to be inherited by any job that doesn't declare its own permissions permissions: contents: read # Previous workflows must pass to get here so tag the commit that created the files jobs: create-tag: runs-on: ubuntu-latest permissions: contents: write # In order to allow tag creation steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@9a9194f87191a7e9055e3e9b95b8cfb13023bb08 # v4.1.7 with: fetch-depth: 0 ref: '${{ github.head_ref || github.ref_name }}' - uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2 id: "tag_create" with: commit_sha: ${{ inputs.file_sha }} tag: "${{ inputs.use_tag }}" force_push_tag: false tag_exists_error: false message: "Latest snapshot" # Print result using the action output. - run: | echo "Tag already present: ${{ steps.tag_create.outputs.tag_exists }}" PreRelease-getfiles: runs-on: ubuntu-latest needs: create-tag environment: ${{ inputs.use_environ }} permissions: contents: write steps: - name: Get file base name id: get-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT # Get files created by tarball script - name: Get doxygen (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: docs-doxygen path: ${{ github.workspace }}/${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen - name: Zip Folder run: zip -r ${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen.zip ./${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen - name: Get tgz-tarball (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball path: ${{ github.workspace }} - name: Get zip-tarball (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball path: ${{ github.workspace }} # Get files created by cmake-ctest script - name: Get published binary (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-vs2022_cl-binary path: ${{ github.workspace }} - name: Get published msi binary (Windows) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: msi-vs2022_cl-binary path: ${{ github.workspace }} - name: Get published binary (MacOS) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-macos14_clang-binary path: ${{ github.workspace }} - name: Get published dmg binary (MacOS) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-macos14_clang-dmg-binary path: ${{ github.workspace }} - name: Get published binary (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published deb binary (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: deb-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published rpm binary (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: rpm-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published binary (Windows_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-vs2022_intel-binary path: ${{ github.workspace }} - name: Get published msi binary (Windows_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: msi-vs2022_intel-binary path: ${{ github.workspace }} - name: Get published binary (Linux_intel) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-ubuntu-2404_intel-binary path: ${{ github.workspace }} - name: Get published abi reports (Linux) uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: abi-reports path: ${{ github.workspace }} - name: Get published nonversioned source (tgz) if: ${{ (inputs.use_environ == 'release') }} uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: tgz-tarball-nover path: ${{ github.workspace }} - name: Get published nonversioned source (zip) if: ${{ (inputs.use_environ == 'release') }} uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: zip-tarball-nover path: ${{ github.workspace }} - name: Create sha256 sums for files run: | sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen.zip > ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - name: Create sha256 sums for files for nonversioned files if: ${{ (inputs.use_environ == 'release') }} run: | sha256sum hdf.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum hdf.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - name: Store snapshot name run: | echo "${{ steps.get-file-base.outputs.FILE_BASE }}" > ./last-file.txt - name: PreRelease tag id: create_prerelease if: ${{ (inputs.use_environ == 'snapshots') }} uses: softprops/action-gh-release@v2.2.2 with: tag_name: "${{ inputs.use_tag }}" prerelease: true files: | last-file.txt ${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen.zip ${{ steps.get-file-base.outputs.FILE_BASE }}.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Release tag id: create_release if: ${{ (inputs.use_environ == 'release') }} uses: softprops/action-gh-release@v2.2.2 with: tag_name: "${{ inputs.use_tag }}" prerelease: false #body_path: ${{ github.workspace }}-CHANGELOG.txt files: | ${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen.zip ${{ steps.get-file-base.outputs.FILE_BASE }}.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.zip hdf.tar.gz hdf.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: List files for the space (Linux) run: | ls -l ${{ github.workspace }} ls ${{ runner.workspace }} - name: dev-only-docs uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ github.workspace }}/${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen destination_dir: develop hdf4-hdf4.3.1/.github/workflows/release.yml000066400000000000000000000047131503061704500205740ustar00rootroot00000000000000name: hdf4 dev release build # Triggers the workflow on demand on: workflow_dispatch: inputs: use_tag: description: 'Release version tag' type: string required: false default: snapshot permissions: contents: read jobs: log-the-inputs: runs-on: ubuntu-latest outputs: rel_tag: ${{ steps.get-tag-name.outputs.RELEASE_TAG }} steps: - name: Get tag name id: get-tag-name env: TAG: ${{ inputs.use_tag }} run: echo "RELEASE_TAG=$TAG" >> $GITHUB_OUTPUT call-workflow-tarball: needs: log-the-inputs uses: ./.github/workflows/tarball.yml with: use_tag: ${{ needs.log-the-inputs.outputs.rel_tag }} use_environ: release call-workflow-ctest: needs: call-workflow-tarball uses: ./.github/workflows/cmake-ctest.yml with: preset_name: ci-StdShar file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} snap_name: hdf-${{ needs.call-workflow-tarball.outputs.source_base }} use_environ: release secrets: APPLE_CERTS_BASE64: ${{ secrets.APPLE_CERTS_BASE64 }} APPLE_CERTS_BASE64_PASSWD: ${{ secrets.APPLE_CERTS_BASE64_PASSWD }} KEYCHAIN_PASSWD: ${{ secrets.KEYCHAIN_PASSWD }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} AZURE_CODE_SIGNING_NAME: ${{ secrets.AZURE_CODE_SIGNING_NAME }} AZURE_CERT_PROFILE_NAME: ${{ secrets.AZURE_CERT_PROFILE_NAME }} call-workflow-abi: needs: [log-the-inputs, call-workflow-tarball, call-workflow-ctest] uses: ./.github/workflows/abi-report.yml with: file_ref: '4.3.0' file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_tag: ${{ needs.log-the-inputs.outputs.rel_tag }} use_environ: release call-workflow-release: needs: [log-the-inputs, call-workflow-tarball, call-workflow-ctest, call-workflow-abi] permissions: contents: write # In order to allow tag creation uses: ./.github/workflows/release-files.yml with: file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} file_branch: ${{ needs.call-workflow-tarball.outputs.file_branch }} file_sha: ${{ needs.call-workflow-tarball.outputs.file_sha }} use_tag: ${{ needs.log-the-inputs.outputs.rel_tag }} use_environ: release hdf4-hdf4.3.1/.github/workflows/remove-files.yml000066400000000000000000000047061503061704500215530ustar00rootroot00000000000000name: hdf4 dev remove-files # Triggers the workflow on a call from another workflow on: workflow_call: inputs: use_tag: description: 'Release version tag' type: string required: false default: snapshot use_environ: description: 'Environment to locate files' type: string required: true default: snapshots file_base: description: "The common base name of the source tarballs" required: true type: string # Minimal permissions to be inherited by any job that doesn't declare its own permissions permissions: contents: read # Previous workflows must pass to get here so tag the commit that created the files jobs: PreRelease-delfiles: runs-on: ubuntu-latest environment: ${{ inputs.use_environ }} permissions: contents: write steps: - name: Get file base name id: get-file-base run: | FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT - name: PreRelease delete from tag id: delete_prerelease if: ${{ (inputs.use_environ == 'snapshots') }} uses: mknejp/delete-release-assets@v1 with: token: ${{ github.token }} tag: "${{ inputs.use_tag }}" assets: | ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.doxygen.zip ${{ steps.get-file-base.outputs.FILE_BASE }}.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi hdf4-hdf4.3.1/.github/workflows/tarball.yml000066400000000000000000000161201503061704500205700ustar00rootroot00000000000000name: hdf4 dev tarball # Triggers the workflow on a call from another workflow on: workflow_call: inputs: use_ignore: description: 'Ignore has_changes check' type: string required: false default: check use_tag: description: 'Release version tag' type: string required: false default: snapshot use_environ: description: 'Environment to locate files' type: string required: true default: snapshots outputs: has_changes: description: "Whether there were changes the previous day" value: ${{ jobs.check_commits.outputs.has_changes }} source_base: description: "The common base name of the source tarballs" value: ${{ jobs.create_tarball.outputs.source_base }} file_base: description: "The common base name of the source tarballs" value: ${{ jobs.create_tarball.outputs.file_base }} file_branch: description: "The branch used for the source tarballs" value: ${{ jobs.check_commits.outputs.branch_ref }} file_sha: description: "The sha used for the source tarballs" value: ${{ jobs.check_commits.outputs.branch_sha }} permissions: contents: read jobs: check_commits: name: Check for recent commits runs-on: ubuntu-latest outputs: has_changes: ${{ steps.check-new-commits.outputs.has-new-commits }} branch_ref: ${{ steps.get-branch-name.outputs.BRANCH_REF }} branch_sha: ${{ steps.get-branch-sha.outputs.BRANCH_SHA }} steps: - uses: actions/checkout@v4 - name: Get branch name id: get-branch-name env: GITHUB_REF: ${{ github.ref }} GITHUB_REF_NAME: ${{ github.ref_name }} GITHUB_HEAD_REF: ${{ github.head_ref }} #run: echo "${{ env.GITHUB_REF_NAME }} | grep -P '[0-9]+/merge' &> /dev/null && BRANCH_REF=${{ env.GITHUB_HEAD_REF }} || BRANCH_REF=${{ env.GITHUB_REF_NAME }}" >> $GITHUB_OUTPUT run: echo "BRANCH_REF=${{ env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME }}" >> $GITHUB_OUTPUT - name: Get branch sha id: get-branch-sha env: GITHUB_SHA: ${{ github.sha }} GITHUB_WF_SHA: ${{ github.workflow_sha }} run: | SHORT_SHA=$(echo "${{ env.GITHUB_WF_SHA }}" | cut -c1-7) echo "BRANCH_SHA=$SHORT_SHA" >> $GITHUB_OUTPUT - name: Check for changed source id: check-new-commits uses: adriangl/check-new-commits-action@v1 with: seconds: 86400 # One day in seconds branch: '${{ steps.get-branch-name.outputs.branch_ref }}' if: ${{ (inputs.use_environ == 'snapshots' && inputs.use_ignore == 'check') }} - run: echo "You have ${{ steps.check-new-commits.outputs.new-commits-number }} new commit(s) in ${{ steps.get-branch-name.outputs.BRANCH_REF }} ✅!" if: ${{ steps.check-new-commits.outputs.has-new-commits == 'true' }} - run: echo "Short commit sha is ${{ steps.get-branch-sha.outputs.BRANCH_SHA }}!" create_tarball: name: Create a source tarball runs-on: ubuntu-latest needs: check_commits if: ${{ ((inputs.use_environ == 'snapshots') && ((needs.check_commits.outputs.has_changes == 'true') || (inputs.use_ignore == 'ignore'))) || (inputs.use_environ == 'release') }} outputs: file_base: ${{ steps.set-file-base.outputs.FILE_BASE }} source_base: ${{ steps.version.outputs.SOURCE_TAG }} steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.7 with: path: hdfsrc ref: '${{needs.check_commits.outputs.branch_ref }}' - name: Install Autotools Dependencies (Linux, serial) run: | sudo apt update sudo apt install automake autoconf libtool libtool-bin gzip dos2unix - name: Retrieve version id: version run: | cd "$GITHUB_WORKSPACE/hdfsrc" echo "SOURCE_TAG=$(bin/h4vers)" >> $GITHUB_OUTPUT - name: Set file base name id: set-file-base run: | if [[ '${{ inputs.use_environ }}' == 'snapshots' ]] then FILE_NAME_BASE=$(echo "hdf4-${{ needs.check_commits.outputs.branch_ref }}-${{ needs.check_commits.outputs.branch_sha }}") else if [[ '${{ inputs.use_tag }}' == 'snapshot' ]] then FILE_NAME_BASE=$(echo "snapshot") else FILE_NAME_BASE=$(echo "hdf${{ steps.version.outputs.SOURCE_TAG }}") fi fi echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT shell: bash - name: Create snapshot file base name id: create-file-base if: ${{ (inputs.use_environ == 'snapshots') }} run: | cd "$GITHUB_WORKSPACE/hdfsrc" bin/release -d $GITHUB_WORKSPACE --branch ${{ needs.check_commits.outputs.branch_ref }} --revision gzip zip shell: bash - name: Create release file base name id: create-rel-base if: ${{ (inputs.use_environ == 'release') }} run: | cd "$GITHUB_WORKSPACE/hdfsrc" bin/release -d $GITHUB_WORKSPACE gzip zip shell: bash - name: Rename release file base name id: ren-basename if: ${{ (inputs.use_environ == 'release') }} run: | mv hdf-${{ steps.version.outputs.SOURCE_TAG }}.tar.gz ${{ inputs.use_tag }}.tar.gz mv hdf-${{ steps.version.outputs.SOURCE_TAG }}.zip ${{ inputs.use_tag }}.zip shell: bash - name: Copy the release file source to a non-versioned file name id: cp-to-non-versioned if: ${{ (inputs.use_environ == 'release') }} run: | cp ${{ inputs.use_tag }}.tar.gz hdf.tar.gz cp ${{ inputs.use_tag }}.zip hdf.zip shell: bash - name: List files in the repository run: | ls -l ${{ github.workspace }} ls $GITHUB_WORKSPACE # Save files created by release script - name: Save tgz-tarball uses: actions/upload-artifact@v4 with: name: tgz-tarball path: ${{ inputs.use_tag }}.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save zip-tarball uses: actions/upload-artifact@v4 with: name: zip-tarball path: ${{ inputs.use_tag }}.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save tgz-tarball-nover if: ${{ (inputs.use_environ == 'release') }} uses: actions/upload-artifact@v4 with: name: tgz-tarball-nover path: hdf.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save zip-tarball-nover if: ${{ (inputs.use_environ == 'release') }} uses: actions/upload-artifact@v4 with: name: zip-tarball-nover path: hdf.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` hdf4-hdf4.3.1/.gitignore000066400000000000000000000014031503061704500150150ustar00rootroot00000000000000# .gitignore file for HDF4 # Makefile.in files **/Makefile.in # Backup files # Editor-specific extensions should go in your ~/.gitconfig, but we # include the standard Unix backup '~' extension since autoheader # backs up H5config.h.in when it creates a new one and the # extension is always '~'. **/*~ # Autotools generated files /aclocal.m4 /autom4te.cache bin/compile bin/config.guess bin/config.sub bin/depcomp bin/install-sh bin/ltmain.sh bin/missing bin/test-driver /configure hdf/src/h4config.h.in m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 # Other files /CTestDriver.cmake /HDF4-C-Trunk.cmake /atbuild /autom4te.cache /build /build* /buildat /buildstatic /cmake*.sh /config*.sh /redeploy*.sh /CMakeUserPresets.json /log.txt hdf4-hdf4.3.1/CMakeFilters.cmake000066400000000000000000000304011503061704500163400ustar00rootroot00000000000000 #----------------------------------------------------------------------------- # Options for HDF4 Filters #----------------------------------------------------------------------------- option (HDF4_USE_ZLIB_NG "Use zlib-ng library as zlib library" OFF) option (HDF4_USE_ZLIB_STATIC "Find static zlib library" OFF) option (HDF4_USE_LIBAEC_STATIC "Find static AEC library" OFF) option (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" OFF) mark_as_advanced (JPEG_USE_EXTERNAL) option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" OFF) mark_as_advanced (ZLIB_USE_EXTERNAL) option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" OFF) mark_as_advanced (SZIP_USE_EXTERNAL) option (JPEG_USE_LOCALCONTENT "Use local file for JPEG FetchContent" OFF) mark_as_advanced (JPEG_USE_LOCALCONTENT) option (ZLIB_USE_LOCALCONTENT "Use local file for ZLIB FetchContent" OFF) mark_as_advanced (ZLIB_USE_LOCALCONTENT) option (LIBAEC_USE_LOCALCONTENT "Use local file for LIBAEC FetchContent" OFF) mark_as_advanced (LIBAEC_USE_LOCALCONTENT) if (NOT JPEG_USE_LOCALCONTENT) set (JPEG_URL ${JPEG_TGZ_ORIGPATH}/${JPEG_TGZ_NAME}) else () set (JPEG_URL ${TGZPATH}/${JPEG_TGZ_NAME}) endif () message (VERBOSE "Filter JPEG file is ${JPEG_URL}") if (NOT ZLIB_USE_LOCALCONTENT) if (HDF4_USE_ZLIB_NG) set (ZLIB_URL ${ZLIBNG_TGZ_ORIGPATH}/${ZLIBNG_TGZ_NAME}) else () set (ZLIB_URL ${ZLIB_TGZ_ORIGPATH}/${ZLIB_TGZ_NAME}) endif () else () if (HDF4_USE_ZLIB_NG) set (ZLIB_URL ${TGZPATH}/${ZLIBNG_TGZ_NAME}) else () set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_NAME}) endif () endif () message (VERBOSE "Filter ZLIB file is ${ZLIB_URL}") if (NOT LIBAEC_USE_LOCALCONTENT) set (SZIP_URL ${LIBAEC_TGZ_ORIGPATH}/${LIBAEC_TGZ_NAME}) else () set (SZIP_URL ${TGZPATH}/${LIBAEC_TGZ_NAME}) endif () message (VERBOSE "Filter SZIP file is ${SZIP_URL}") include (ExternalProject) #option (HDF4_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building (NO GIT TGZ)" "NO") set (HDF4_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO GIT TGZ)") set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") set (JPEG_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for JPEG else search" FORCE) set (ZLIB_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for ZLIB else search" FORCE) set (SZIP_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for SZIP else search" FORCE) if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT") set (JPEG_URL ${JPEG_GIT_URL} CACHE STRING "Path to jpeg git repository") set (JPEG_BRANCH ${JPEG_GIT_BRANCH}) set (ZLIB_URL ${ZLIB_GIT_URL} CACHE STRING "Path to zlib git repository") set (ZLIB_BRANCH ${ZLIB_GIT_BRANCH}) set (SZIP_URL ${LIBAEC_GIT_URL} CACHE STRING "Path to szip git repository") set (SZIP_BRANCH ${LIBAEC_GIT_BRANCH}) elseif (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") if (NOT TGZPATH) set (TGZPATH ${HDF4_SOURCE_DIR}) endif () if (JPEG_USE_LOCALCONTENT) if (NOT EXISTS "${JPEG_URL}") set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) message (FATAL_ERROR "Filter JPEG support in HDF4 is required but file ${JPEG_URL} not found") endif () endif () if (ZLIB_USE_LOCALCONTENT) if (NOT EXISTS "${ZLIB_URL}") set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) message (FATAL_ERROR "Filter ZLIB support in HDF4 is required but file ${ZLIB_URL} not found") endif () endif () if (LIBAEC_USE_LOCALCONTENT) if (NOT EXISTS "${SZIP_URL}") set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) message (VERBOSE "Filter SZIP file ${SZIP_URL} not found") endif () endif () else () set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) set (JPEG_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for JPEG else search" FORCE) set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) set (ZLIB_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for ZLIB else search" FORCE) set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) set (SZIP_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for SZIP else search" FORCE) endif () endif () #----------------------------------------------------------------------------- # Option for LibJpeg support #----------------------------------------------------------------------------- set(H4_JPEG_FOUND FALSE) if (HDF4_ENABLE_JPEG_LIB_SUPPORT) if (NOT H4_JPEGLIB_HEADER) if (NOT JPEG_USE_EXTERNAL) option (HDF4_MODULE_MODE_JPEG "Prefer module mode to find JPEG" ON) mark_as_advanced (HDF4_MODULE_MODE_JPEG) set(JPEG_FOUND FALSE) if (HDF4_MODULE_MODE_JPEG) # Expect that the default shared library is expected with FindJPEG.cmake find_package (JPEG MODULE) else () # Expect that a correctly built library with CMake config files is available if (HDF4_USE_JPEG_STATIC) set(JPEG_SEARCH_TYPE static) if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") set(JPEG_USE_STATIC_LIBS ${HDF4_USE_JPEG_STATIC}) endif() else () set(JPEG_SEARCH_TYPE shared) endif () find_package (JPEG NAMES ${JPEG_PACKAGE_NAME}${HDF_PACKAGE_EXT} CONFIG OPTIONAL_COMPONENTS ${JPEG_SEARCH_TYPE}) endif () set(H4_JPEG_FOUND ${JPEG_FOUND}) if (H4_JPEG_FOUND) set (H4_JPEGLIB_HEADER "jpeglib.h") set (H4_JPEG_INCLUDE_DIR_GEN ${JPEG_INCLUDE_DIR}) set (H4_JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR}) set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${JPEG_LIBRARIES}) endif () else () if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") EXTERNAL_JPEG_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) message (VERBOSE "Filter JPEG is built") set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${H4_JPEG_STATIC_LIBRARY}) endif () endif () else () # This project is being called from within another and JPEGLib is already configured set(H4_JPEG_FOUND TRUE) endif () if (H4_JPEG_FOUND) set (H4_HAVE_JPEGLIB_H 1) set (H4_HAVE_LIBJPEG 1) set (HDF4_COMP_INCLUDE_DIRECTORIES "${HDF4_COMP_INCLUDE_DIRECTORIES};${H4_JPEG_INCLUDE_DIRS}") message (VERBOSE "Filter JPEGLIB is ON") else () set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) message (FATAL_ERROR " JPEG support in HDF4 was requested and required but not found") endif () else () message (FATAL_ERROR " JPEG support in HDF4 is required but not found") endif () #----------------------------------------------------------------------------- # Option for ZLib support #----------------------------------------------------------------------------- set(H4_ZLIB_FOUND FALSE) if(NOT DEFINED ZLIB_PACKAGE_NAME) set(ZLIB_PACKAGE_NAME "zlib") endif () if(NOT DEFINED ZLIBNG_PACKAGE_NAME) set(ZLIBNG_PACKAGE_NAME "zlib-ng") endif () if (HDF4_ENABLE_Z_LIB_SUPPORT) if (NOT H4_ZLIB_HEADER) if (NOT ZLIB_USE_EXTERNAL) option (HDF4_MODULE_MODE_ZLIB "Prefer module mode to find ZLIB" ON) mark_as_advanced (HDF4_MODULE_MODE_ZLIB) if (HDF4_USE_ZLIB_NG) set (HDF4_MODULE_MODE_ZLIB OFF CACHE BOOL "" FORCE) set (PACKAGE_NAME ${ZLIBNG_PACKAGE_NAME}${HDF_PACKAGE_EXT}) else () set (PACKAGE_NAME ${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT}) endif () set(ZLIB_FOUND FALSE) message (VERBOSE "Filter ZLIB package name:${PACKAGE_NAME}") if (HDF4_MODULE_MODE_ZLIB) # Expect that the default shared library is expected with FindZLIB.cmake find_package (ZLIB MODULE) else () # Expect that a correctly built library with CMake config files is available if (HDF4_USE_ZLIB_STATIC) set(ZLIB_SEARCH_TYPE static) if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") set(ZLIB_USE_STATIC_LIBS ${HDF4_USE_ZLIB_STATIC}) endif() else () set(ZLIB_SEARCH_TYPE shared) endif () find_package (ZLIB NAMES ${PACKAGE_NAME} CONFIG OPTIONAL_COMPONENTS ${ZLIB_SEARCH_TYPE}) endif () set(H4_ZLIB_FOUND ZLIB_FOUND}) if (H4_ZLIB_FOUND) if (HDF4_USE_ZLIB_NG) set (H4_ZLIB_HEADER "zlib-ng.h") else () set (H4_ZLIB_HEADER "zlib.h") endif () set (H4_ZLIB_INCLUDE_DIR_GEN ${ZLIB_INCLUDE_DIR}) set (H4_ZLIB_INCLUDE_DIRS ${H4_ZLIB_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) if (NOT WIN32) #windows has a list of names # The FindZLIB.cmake module does not set an OUTPUT_NAME # on the target. The target returned is: ZLIB::ZLIB get_filename_component (libname ${ZLIB_LIBRARIES} NAME_WLE) string (REGEX REPLACE "^lib" "" libname ${libname}) set_target_properties (ZLIB::ZLIB PROPERTIES OUTPUT_NAME ${libname}) endif () set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ZLIB::ZLIB) endif () else () if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") EXTERNAL_ZLIB_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) message (VERBOSE "Filter ZLIB is built") set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${H4_ZLIB_STATIC_LIBRARY}) endif () endif () else () # This project is being called from within another and ZLib is already configured set(H4_ZLIB_FOUND TRUE) endif () if (H4_ZLIB_FOUND) set (H4_HAVE_FILTER_DEFLATE 1) set (H4_HAVE_ZLIB_H 1) if (HDF4_USE_ZLIB_NG) set (H4_HAVE_ZLIBNG_H 1) endif () set (H4_HAVE_LIBZ 1) set (HDF4_COMP_INCLUDE_DIRECTORIES "${HDF4_COMP_INCLUDE_DIRECTORIES};${H4_ZLIB_INCLUDE_DIRS}") message (VERBOSE "Filter ZLIB is ON") else () set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) message (FATAL_ERROR " ZLib support in HDF4 is required but not found") endif () message (VERBOSE "H4_ZLIB_HEADER=${H4_ZLIB_HEADER}") endif () #----------------------------------------------------------------------------- # Option for SzLib support #----------------------------------------------------------------------------- set(H4_SZIP_FOUND FALSE) if(NOT DEFINED LIBAEC_PACKAGE_NAME) set(LIBAEC_PACKAGE_NAME "libaec") endif () set (SZIP_INFO "disabled") if (HDF4_ENABLE_SZIP_SUPPORT) option (HDF4_ENABLE_SZIP_ENCODING "Use SZip Encoding" ON) if (NOT SZIP_USE_EXTERNAL) if (HDF4_USE_LIBAEC_STATIC) set(LIBAEC_SEARCH_TYPE static) else () set(LIBAEC_SEARCH_TYPE shared) endif () set(libaec_USE_STATIC_LIBS ${HDF4_USE_LIBAEC_STATIC}) set(SZIP_FOUND FALSE) # Search pure Config mode, there is not a FindSZIP module available find_package (${LIBAEC_PACKAGE_NAME} NAMES ${LIBAEC_PACKAGE_NAME}${HDF_PACKAGE_EXT} OPTIONAL_COMPONENTS ${LIBAEC_SEARCH_TYPE}) set(H4_SZIP_FOUND ${${LIBAEC_PACKAGE_NAME}_FOUND}) if (H4_SZIP_FOUND) set (H4_SZIP_INCLUDE_DIR_GEN ${SZIP_INCLUDE_DIR}) set (H4_SZIP_INCLUDE_DIRS ${H4_SZIP_INCLUDE_DIRS} ${SZIP_INCLUDE_DIR}) if(LIBAEC_PACKAGE_NAME STREQUAL "libaec") set (LINK_COMP_LIBS ${LINK_COMP_LIBS} libaec::sz libaec::aec) else () set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_LIBRARIES}) endif () endif () message (VERBOSE "H4_SZIP_FOUND=${SZIP_FOUND} and LINK_COMP_LIBS=${LINK_COMP_LIBS}") else () if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") EXTERNAL_SZIP_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT} ${HDF4_ENABLE_SZIP_ENCODING}) message (VERBOSE "Filter SZIP is built using library AEC") set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${H4_SZIP_STATIC_LIBRARY}) endif () endif () message (VERBOSE "LINK_COMP_LIBS=${LINK_COMP_LIBS}") if (H4_SZIP_FOUND) set (H4_HAVE_FILTER_SZIP 1) set (H4_HAVE_SZLIB_H 1) set (H4_HAVE_LIBSZ 1) set (HDF4_COMP_INCLUDE_DIRECTORIES "${HDF4_COMP_INCLUDE_DIRECTORIES};${H4_SZIP_INCLUDE_DIRS}") message (VERBOSE "Filter SZIP is ON") if (HDF4_ENABLE_SZIP_ENCODING) set (H4_HAVE_SZIP_ENCODER 1) set (SZIP_INFO "enabled with encoder") else () set (SZIP_INFO "enabled with decoder only") endif () else () set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) message (FATAL_ERROR "SZIP support in HDF4 was requested but not found") endif () endif () hdf4-hdf4.3.1/CMakeInstallation.cmake000066400000000000000000000510341503061704500173760ustar00rootroot00000000000000include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Check for Installation Utilities #----------------------------------------------------------------------------- if (WIN32) set (PF_ENV_EXT "(x86)") find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS") if(NOT CPACK_WIX_ROOT) file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT) endif () find_program (WIX_EXECUTABLE candle PATHS "${CPACK_WIX_ROOT}/bin") endif () #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- if (NOT HDF4_INSTALL_NO_DEVELOPMENT) install ( FILES ${PROJECT_BINARY_DIR}/h4config.h DESTINATION ${HDF4_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT HDF4_EXTERNALLY_CONFIGURED) install ( EXPORT ${HDF4_EXPORTED_TARGETS} DESTINATION ${HDF4_INSTALL_CMAKE_DIR} FILE ${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake NAMESPACE ${HDF_PACKAGE_NAMESPACE} COMPONENT configinstall ) #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- export ( TARGETS ${HDF4_LIBRARIES_TO_EXPORT} ${HDF4_LIB_DEPENDENCIES} ${HDF4_UTILS_TO_EXPORT} FILE ${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake NAMESPACE ${HDF_PACKAGE_NAMESPACE} ) endif () #----------------------------------------------------------------------------- # Set includes needed for build #----------------------------------------------------------------------------- set (HDF4_INCLUDES_BUILD_TIME ${HDF4_HDF_SOURCE_DIR} ${HDF4_MFHDF_SOURCE_DIR} ${HDF4_BINARY_DIR} ) #----------------------------------------------------------------------------- # Configure the hdf4-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${HDF4_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${HDF4_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${HDF_RESOURCES_DIR}/hdf4-config.cmake.in "${HDF4_BINARY_DIR}/${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${HDF4_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the hdf4-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${HDF4_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${HDF4_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}" ) configure_package_config_file ( ${HDF_RESOURCES_DIR}/hdf4-config.cmake.in "${HDF4_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${HDF4_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT HDF4_EXTERNALLY_CONFIGURED) install ( FILES ${HDF4_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-config.cmake DESTINATION ${HDF4_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the hdf4-config-version .cmake file for the install directory #----------------------------------------------------------------------------- if (NOT HDF4_EXTERNALLY_CONFIGURED) write_basic_package_version_file ( "${HDF4_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-config-version.cmake" VERSION ${HDF4_PACKAGE_VERSION} COMPATIBILITY SameMinorVersion ) install ( FILES ${HDF4_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-config-version.cmake DESTINATION ${HDF4_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the libhdf4.settings file for the lib info #----------------------------------------------------------------------------- if (H4_WORDS_BIGENDIAN) set (BYTESEX big-endian) else () set (BYTESEX little-endian) endif () configure_file ( ${HDF_RESOURCES_DIR}/libhdf4.settings.cmake.in ${HDF4_BINARY_DIR}/libhdf4.settings ESCAPE_QUOTES @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/libhdf4.settings DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries ) #----------------------------------------------------------------------------- # Configure the HDF4_Examples.cmake file and the examples #----------------------------------------------------------------------------- option (HDF4_PACK_EXAMPLES "Package the HDF4 Library Examples Compressed File" OFF) if (HDF4_PACK_EXAMPLES) if (DEFINED CMAKE_TOOLCHAIN_FILE) get_filename_component(TOOLCHAIN ${CMAKE_TOOLCHAIN_FILE} NAME) set(CTEST_TOOLCHAIN_FILE "\${CTEST_SOURCE_DIRECTORY}/config/toolchain/${TOOLCHAIN}") endif () configure_file ( ${HDF_RESOURCES_DIR}/examples/HDF4_Examples.cmake.in ${HDF4_BINARY_DIR}/HDF4_Examples.cmake @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/HDF4_Examples.cmake DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) install ( DIRECTORY ${HDF4_SOURCE_DIR}/HDF4Examples DESTINATION ${HDF4_INSTALL_DATA_DIR} USE_SOURCE_PERMISSIONS COMPONENT hdfdocuments ) install ( FILES ${HDF4_SOURCE_DIR}/release_notes/USING_CMake_Examples.txt DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) install ( FILES ${HDF_RESOURCES_DIR}/examples/CTestScript.cmake DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) install ( FILES ${HDF_RESOURCES_DIR}/examples/HDF4_Examples_options.cmake DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) endif () #----------------------------------------------------------------------------- # Configure the README.txt file for the binary package #----------------------------------------------------------------------------- HDF_README_PROPERTIES(HDF4_BUILD_FORTRAN) #----------------------------------------------------------------------------- # Configure the COPYING.txt file for the windows binary package #----------------------------------------------------------------------------- if (WIN32) configure_file (${HDF4_SOURCE_DIR}/COPYING ${HDF4_BINARY_DIR}/COPYING.txt @ONLY) endif () #----------------------------------------------------------------------------- # Add Document File(s) to CMake Install #----------------------------------------------------------------------------- if (NOT HDF4_EXTERNALLY_CONFIGURED) install ( FILES ${HDF4_SOURCE_DIR}/COPYING DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) if (EXISTS "${HDF4_SOURCE_DIR}/release_notes" AND IS_DIRECTORY "${HDF4_SOURCE_DIR}/release_notes") set (release_files ${HDF4_SOURCE_DIR}/release_notes/USING_HDF4_CMake.txt ${HDF4_SOURCE_DIR}/release_notes/RELEASE.txt ) if (WIN32) set (release_files ${release_files} ${HDF4_SOURCE_DIR}/release_notes/USING_HDF4_VS.txt ) endif () if (HDF4_PACK_INSTALL_DOCS) set (release_files ${release_files} ${HDF4_SOURCE_DIR}/release_notes/INSTALL_CMake.txt ${HDF4_SOURCE_DIR}/release_notes/HISTORY.txt ${HDF4_SOURCE_DIR}/release_notes/INSTALL ) if (WIN32) set (release_files ${release_files} ${HDF4_SOURCE_DIR}/release_notes/INSTALL_Windows.txt ) endif () if (CYGWIN) set (release_files ${release_files} ${HDF4_SOURCE_DIR}/release_notes/INSTALL_Cygwin.txt ) endif () endif () install ( FILES ${release_files} DESTINATION ${HDF4_INSTALL_DOC_DIR} COMPONENT hdfdocuments ) endif () endif () #----------------------------------------------------------------------------- # Set the cpack variables #----------------------------------------------------------------------------- if (NOT HDF4_EXTERNALLY_CONFIGURED AND NOT HDF4_NO_PACKAGES) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${HDF4_PACKAGE_NAME}") if (NOT WIN32 OR HDF4_VERS_SUBRELEASE MATCHES "^[0-9]+$") set (CPACK_PACKAGE_VERSION "${HDF4_PACKAGE_VERSION_STRING}") else () set (CPACK_PACKAGE_VERSION "${HDF4_PACKAGE_VERSION}") endif () set (CPACK_PACKAGE_VERSION_MAJOR "${HDF4_PACKAGE_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${HDF4_PACKAGE_VERSION_MINOR}") set (CPACK_PACKAGE_VERSION_PATCH "") set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") if (EXISTS "${HDF4_SOURCE_DIR}/release_notes") set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/release_notes/RELEASE.txt") set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/release_notes/RELEASE.txt") endif () set (CPACK_PACKAGE_RELOCATABLE TRUE) if (OVERRIDE_INSTALL_VERSION) set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${OVERRIDE_INSTALL_VERSION}") else () set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${CPACK_PACKAGE_VERSION}") endif () set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_DIR}/hdf.bmp") set (CPACK_ORIG_SOURCE_DIR ${CMAKE_SOURCE_DIR}) if ("$ENV{BINSIGN}" STREQUAL "exists") set (CPACK_PRE_BUILD_SCRIPTS ${CMAKE_SOURCE_DIR}/config/cmake/SignPackageFiles.cmake) endif () set (CPACK_GENERATOR "TGZ") if (WIN32) set (CPACK_GENERATOR "ZIP") # Installers for 32- vs. 64-bit CMake: # - Root install directory (displayed to end user at installer-run time) # - "NSIS package/display name" (text used in the installer GUI) # - Registry key used to store info about the installation set (CPACK_NSIS_PACKAGE_NAME "${HDF4_PACKAGE_STRING}") if (CMAKE_CL_64) set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} (Win64)") else () set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") endif () # set the install/uninstall icon used for the installer itself # There is a bug in NSI that does not handle full unix paths properly. set (CPACK_NSIS_MUI_ICON "${HDF_RESOURCES_DIR}\\\\hdf.ico") set (CPACK_NSIS_MUI_UNIICON "${HDF_RESOURCES_DIR}\\\\hdf.ico") # set the package header icon for MUI set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_DIR}\\\\hdf.bmp") set (CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}") if (OVERRIDE_INSTALL_VERSION) set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${OVERRIDE_INSTALL_VERSION}") else () set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${CPACK_PACKAGE_VERSION}") endif () set (CPACK_NSIS_CONTACT "${HDF4_PACKAGE_BUGREPORT}") set (CPACK_NSIS_MODIFY_PATH ON) if (WIX_EXECUTABLE) list (APPEND CPACK_GENERATOR "WIX") endif () #WiX variables set (CPACK_WIX_UNINSTALL "1") set (CPACK_RESOURCE_FILE_LICENSE "${HDF4_BINARY_DIR}/COPYING.txt") set(CPACK_WIX_PRODUCT_ICON "${HDF_RESOURCES_DIR}\\\\hdf.ico") set(CPACK_WIX_PROPERTY_ARPCOMMENTS "Hierarchical Data Format (HDF) Software Library and Utilities") set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "${HDF4_PACKAGE_URL}") set(CPACK_WIX_PROPERTY_ARPHELPLINK "${HDF4_PACKAGE_BUGREPORT}") if (BUILD_SHARED_LIBS) if (${HDF_CFG_NAME} MATCHES "Debug") set (WIX_CMP_NAME "${HDF4_SRC_LIB_NAME}${CMAKE_DEBUG_POSTFIX}") else () set (WIX_CMP_NAME "${HDF4_SRC_LIB_NAME}") endif () configure_file (${HDF_RESOURCES_DIR}/patch.xml.in ${HDF4_BINARY_DIR}/patch.xml @ONLY) set(CPACK_WIX_PATCH_FILE "${HDF4_BINARY_DIR}/patch.xml") endif () elseif (APPLE) list (APPEND CPACK_GENERATOR "STGZ") option (HDF4_PACK_MACOSX_DMG "Package the HDF4 Library using DragNDrop" ON) if (HDF4_PACK_MACOSX_DMG) list (APPEND CPACK_GENERATOR "DragNDrop") endif () set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}") set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_DIR}/hdf.icns") option (HDF4_PACK_MACOSX_FRAMEWORK "Package the HDF Library in a Frameworks" OFF) if (HDF4_PACK_MACOSX_FRAMEWORK AND HDF4_BUILD_FRAMEWORKS) set (CPACK_BUNDLE_NAME "${HDF4_PACKAGE_STRING}") set (CPACK_BUNDLE_LOCATION "/") # make sure CMAKE_INSTALL_PREFIX ends in / set (CMAKE_INSTALL_PREFIX "/${CPACK_BUNDLE_NAME}.framework/Versions/${CPACK_PACKAGE_VERSION}/${CPACK_PACKAGE_NAME}/") set (CPACK_BUNDLE_ICON "${HDF_RESOURCES_DIR}/hdf.icns") set (CPACK_BUNDLE_PLIST "${HDF4_BINARY_DIR}/CMakeFiles/Info.plist") set (CPACK_SHORT_VERSION_STRING "${CPACK_PACKAGE_VERSION}") #----------------------------------------------------------------------------- # Configure the Info.plist file for the install bundle #----------------------------------------------------------------------------- configure_file ( ${HDF_RESOURCES_DIR}/CPack.Info.plist.in ${HDF4_BINARY_DIR}/CMakeFiles/Info.plist @ONLY ) configure_file ( ${HDF_RESOURCES_DIR}/PkgInfo.in ${HDF4_BINARY_DIR}/CMakeFiles/PkgInfo @ONLY ) configure_file ( ${HDF_RESOURCES_DIR}/version.plist.in ${HDF4_BINARY_DIR}/CMakeFiles/version.plist @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/CMakeFiles/PkgInfo DESTINATION .. ) endif () else () list (APPEND CPACK_GENERATOR "STGZ") set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}") set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) find_program (DPKGSHLIB_EXE dpkg-shlibdeps) if (DPKGSHLIB_EXE) list (APPEND CPACK_GENERATOR "DEB") set (CPACK_DEBIAN_PACKAGE_SECTION "Libraries") set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${HDF4_PACKAGE_BUGREPORT}") endif () find_program (RPMBUILD_EXE rpmbuild) if (RPMBUILD_EXE) list (APPEND CPACK_GENERATOR "RPM") set (CPACK_RPM_PACKAGE_RELEASE "1") set (CPACK_RPM_PACKAGE_RELEASE_DIST ON) set (CPACK_RPM_COMPONENT_INSTALL ON) set (CPACK_RPM_PACKAGE_RELOCATABLE ON) set (CPACK_RPM_FILE_NAME "RPM-DEFAULT") set (CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") set (CPACK_RPM_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") set (CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}") set (CPACK_RPM_PACKAGE_LICENSE "BSD-style") set (CPACK_RPM_PACKAGE_GROUP "Development/Libraries") set (CPACK_RPM_PACKAGE_URL "${HDF4_PACKAGE_URL}") set (CPACK_RPM_PACKAGE_SUMMARY "HDF is a unique technology suite that makes possible the management of extremely large and complex data collections.") set (CPACK_RPM_PACKAGE_DESCRIPTION "The HDF technology suite includes: * A versatile data model that can represent very complex data objects and a wide variety of metadata. * A completely portable file format with no limit on the number or size of data objects in the collection. * A software library that runs on a range of computational platforms, from laptops to massively parallel systems, and implements a high-level API with C, C++, Fortran 90, and Java interfaces. * A rich set of integrated performance features that allow for access time and storage space optimizations. * Tools and applications for managing, manipulating, viewing, and analyzing the data in the collection. The HDF data model, file format, API, library, and tools are open and distributed without charge. " ) #----------------------------------------------------------------------------- # Configure the spec file for the install RPM #----------------------------------------------------------------------------- # configure_file ("${HDF4_RESOURCES_DIR}/hdf4.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/${HDF4_PACKAGE_NAME}.spec" @ONLY IMMEDIATE) # set (CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_BINARY_DIR}/${HDF4_PACKAGE_NAME}.spec") endif () endif () # By default, do not warn when built on machines using only VS Express: if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) endif () include (InstallRequiredSystemLibraries) set (CPACK_INSTALL_CMAKE_PROJECTS "${HDF4_BINARY_DIR};HDF4;ALL;/") if (HDF4_PACKAGE_EXTLIBS) if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") if (H4_JPEG_FOUND AND JPEG_USE_EXTERNAL) if (WIN32) set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_JPEG_INCLUDE_DIR_GEN};JPEG;ALL;/") else () set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_JPEG_INCLUDE_DIR_GEN};JPEG;libraries;/") set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_JPEG_INCLUDE_DIR_GEN};JPEG;configinstall;/") endif () endif () if (H4_ZLIB_FOUND AND ZLIB_USE_EXTERNAL) if (WIN32) set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_ZLIB_INCLUDE_DIR_GEN};ZLIB;ALL;/") else () set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_ZLIB_INCLUDE_DIR_GEN};ZLIB;libraries;/") set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_ZLIB_INCLUDE_DIR_GEN};ZLIB;configinstall;/") endif () endif () if (H4_SZIP_FOUND AND SZIP_USE_EXTERNAL) if (WIN32) set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_SZIP_INCLUDE_DIR_GEN};SZIP;ALL;/") else () set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_SZIP_INCLUDE_DIR_GEN};SZIP;libraries;/") set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${H4_SZIP_INCLUDE_DIR_GEN};SZIP;configinstall;/") endif () endif () endif () endif () include (CPack) cpack_add_install_type(Full DISPLAY_NAME "Everything") cpack_add_install_type(Developer) cpack_add_component_group(Runtime) cpack_add_component_group(Documents EXPANDED DESCRIPTION "Release notes for developing HDF applications" ) cpack_add_component_group(Development EXPANDED DESCRIPTION "All of the tools you'll need to develop HDF applications" ) cpack_add_component_group(Applications EXPANDED DESCRIPTION "Tools for HDF4 files" ) #----------------------------------------------------------------------------- # Now list the cpack commands #----------------------------------------------------------------------------- cpack_add_component (libraries DISPLAY_NAME "HDF4 Libraries" REQUIRED GROUP Runtime INSTALL_TYPES Full Developer User ) cpack_add_component (headers DISPLAY_NAME "HDF4 Headers" DEPENDS libraries GROUP Development INSTALL_TYPES Full Developer ) cpack_add_component (hdfdocuments DISPLAY_NAME "HDF4 Documents" GROUP Documents INSTALL_TYPES Full Developer ) cpack_add_component (configinstall DISPLAY_NAME "HDF4 CMake files" HIDDEN DEPENDS libraries GROUP Development INSTALL_TYPES Full Developer User ) if (HDF4_BUILD_FORTRAN) cpack_add_component (fortlibraries DISPLAY_NAME "HDF4 Fortran Libraries" DEPENDS libraries GROUP Runtime INSTALL_TYPES Full Developer User ) endif () if (HDF4_BUILD_TOOLS) cpack_add_component (toolsapplications DISPLAY_NAME "HDF4 Tools Applications" DEPENDS libraries GROUP Applications INSTALL_TYPES Full Developer User ) endif () if (HDF4_BUILD_UTILS) cpack_add_component (utilsapplications DISPLAY_NAME "HDF4 Utility Applications" DEPENDS libraries GROUP Applications INSTALL_TYPES Full Developer User ) endif () endif () hdf4-hdf4.3.1/CMakeLists.txt000066400000000000000000001040771503061704500156000ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4 LANGUAGES C) if (POLICY CMP0074) # find_package() uses _ROOT variables. cmake_policy (SET CMP0074 NEW) endif () if (POLICY CMP0144) # is the upper-cased package name. cmake_policy (SET CMP0144 NEW) endif () if (POLICY CMP0083) # To control generation of Position Independent Executable (PIE) or not, # some flags are required at link time. cmake_policy (SET CMP0083 NEW) endif () # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") cmake_policy(SET CMP0135 NEW) endif() #----------------------------------------------------------------------------- # Instructions for use : Normal Build # # For standard build of HDF4 libraries,tests and tools. # Run cmake using the HDF4 source tree to generate a build tree. # Enable/Disable options according to requirements and # set CMAKE_INSTALL_PREFIX to the required install path. # Make install can be used to install all components for system-wide use. # if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) message (FATAL_ERROR "\nERROR! ${PROJECT_NAME} DOES NOT SUPPORT IN SOURCE BUILDS!\n" "CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" " == CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}\n" "NEXT STEPS:\n" "(1) Delete the CMakeCache.txt file and the CMakeFiles/ directory\n" " under the source directory for ${PROJECT_NAME}, otherwise you\n" " will not be able to configure ${PROJECT_NAME} correctly!\n" " * For example, on linux machines do:\n" " $ rm -r CMakeCache.txt CMakeFiles/\n" "(2) Create a different directory and configure ${PROJECT_NAME} in that directory.\n" " * For example, on linux machines do:\n" " $ mkdir MY_BUILD\n" " $ cd MY_BUILD\n" " $ cmake [OPTIONS] ..\n" ) endif () # Whether the most recently called project() command, in the current scope or above, # was in the top level CMakeLists.txt file. if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.21.0") if(NOT PROJECT_IS_TOP_LEVEL) set (HDF4_EXTERNALLY_CONFIGURED 1) endif() else() if (NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) set (HDF4_EXTERNALLY_CONFIGURED 1) endif() endif() #----------------------------------------------------------------------------- # Instructions for use : Sub-Project Build # # To include HDF4 as a sub-project within another project. # Set HDF4_EXTERNALLY_CONFIGURED to 1 in the parent project and # supply values for the following variables... # # HDF4_EXPORTED_TARGETS : # Set this to the name of the targets variable which controls exports # If unset (because parent project does not support/use the # install (EXPORT target...) syntax), then targets are not configured # for export during install. # # HDF4_LIB_DEPENDENCIES : # If the build of HDF4 libs is being customized, then rules for the # dependencies of the HDF4 libs may be 'incomplete', add additional # dependencies to this variable so that external projects pick them up # #option (HDF4_EXTERNAL_LIB_PREFIX "Use prefix for custom library naming." "") set (HDF4_EXTERNAL_LIB_PREFIX "" CACHE STRING "Use prefix for custom library naming.") mark_as_advanced (HDF4_EXTERNAL_LIB_PREFIX) # HDF4_EXTERNAL_LIB_PREFIX : # If the parent project needs to install hdf libraries, but avoid # name conflicts with system versions, then a prefix may be added # to ensure that the correct versions configured are used. # # HDF4_INSTALL_BIN_DIR, HDF4_INSTALL_LIB_DIR, HDF4_INSTALL_INCLUDE_DIR, HDF4_INSTALL_DATA_DIR : # Customize the 'bin', 'lib', 'include', and 'share' installation directories. # # HDF4_INSTALL_NO_DEVELOPMENT : # Set to true to skip installation of headers and CMake package files. # # Consider this example, it builds its own zlib # library and tells HDF4 to add it as a dependency - this ensures that # any project making use of this build of HDF4 will use the correct zlib # # # Tell hdf4 that we are manually overriding certain settings # set (HDF4_EXTERNALLY_CONFIGURED 1) # # Avoid duplicating names of installed libraries # set (HDF4_EXTERNAL_LIB_PREFIX "prj") # # Targets linking to the HDF4 libs need to know their names # # if they are changed in the sub project, they should be here too # set (HDF4_LIB_NAME "prjhdf4") # set (HDF4_MF_LIB_NAME "prjhdf4_mf") # set (HDF4_LIBRARY "${HDF4_LIB_NAME};${HDF4_MF_LIB_NAME}") # # Export configuration to this export variable # set (HDF4_EXPORTED_TARGETS "project-targets") # # # Setup all necessary overrides for szip so that HDF4 uses our # # internally compiled szip rather than any other version # if (HDF4_ENABLE_SZIP_SUPPORT) # # We must tell the main HDF4 library that it depends on our szip # set (HDF4_LIB_DEPENDENCIES prjszip) # # Override the szip header file # if (PRJ_USE_SYSTEM_SZIP) # set (H4_SZIP_HEADER "szip.h") # else () # set (H4_SZIP_HEADER "prj_szip.h") # # Set vars that FindSZIP would have set if used in sub project # set (H4_SZIP_INCLUDE_DIRS "${PRJ_H4_SZIP_INCLUDE_DIRS}") # set (H4_SZIP_LIBRARIES prjszip) # endif () # endif () # # # Add the sub project # add_subdirectory (Utilities/hdf4.3.0) # # Add the HDF4 dirs to our include path # set (HDF4_INCLUDE_DIR # ${PROJECT_SOURCE_DIR}/Utilities/hdf4.3.0/hdf/src # ${PROJECT_BINARY_DIR}/Utilities/hdf4.3.0 # ${PROJECT_SOURCE_DIR}/Utilities/hdf4.3.0/mfhdf/libsrc # ) # #----------------------------------------------------------------------------- string (TIMESTAMP CONFIG_DATE "%Y-%m-%d") #----------------------------------------------------------------------------- # Allow Visual Studio solution directories #----------------------------------------------------------------------------- # Provide a way for Visual Studio Express users to turn OFF the new FOLDER # organization feature. Default to ON for non-Express users. Express users must # explicitly turn off this option to build HDF4 in the Express IDE... # option (HDF4_USE_FOLDERS "Enable folder grouping of projects in IDEs." ON) mark_as_advanced (HDF4_USE_FOLDERS) if (HDF4_USE_FOLDERS) set_property (GLOBAL PROPERTY USE_FOLDERS ON) endif () option (HDF4_NO_PACKAGES "CPACK - Disable packaging" OFF) mark_as_advanced (HDF4_NO_PACKAGES) #----------------------------------------------------------------------------- # Set the core names of all the libraries #----------------------------------------------------------------------------- set (HDF4_SRC_LIB_CORENAME "hdf") set (HDF4_SRC_LIB_SYM_CORENAME "df") set (HDF4_SRC_FCSTUB_LIB_CORENAME "hdf_fcstub") set (HDF4_SRC_FORTRAN_LIB_CORENAME "hdf_fortran") set (HDF4_MF_LIB_CORENAME "mfhdf") set (HDF4_HDF_TEST_LIB_CORENAME "hdf_test") set (HDF4_HDF_TEST_FCSTUB_LIB_CORENAME "hdf_test_fcstub") set (HDF4_MF_FCSTUB_LIB_CORENAME "mfhdf_fcstub") set (HDF4_MF_FORTRAN_LIB_CORENAME "mfhdf_fortran") set (HDF4_MF_TEST_LIB_CORENAME "mf_test") set (HDF4_TOOLS_LIB_CORENAME "h4tools") set (HDF4_JAVA_JNI_LIB_CORENAME "hdf_java") set (HDF4_JAVA_HDF_LIB_CORENAME "jarhdf") set (HDF4_JAVA_TEST_LIB_CORENAME "jartest4") #----------------------------------------------------------------------------- # Set the true names of all the libraries if customized by external project #----------------------------------------------------------------------------- set (HDF4_SRC_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_SRC_LIB_CORENAME}") set (HDF4_SRC_LIB_SYM_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_SRC_LIB_SYM_CORENAME}") set (HDF4_SRC_FCSTUB_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_SRC_FCSTUB_LIB_CORENAME}") set (HDF4_SRC_FORTRAN_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_SRC_FORTRAN_LIB_CORENAME}") set (HDF4_MF_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_MF_LIB_CORENAME}") set (HDF4_HDF_TEST_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_HDF_TEST_LIB_CORENAME}") set (HDF4_HDF_TEST_FCSTUB_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_HDF_TEST_FCSTUB_LIB_CORENAME}") set (HDF4_MF_FCSTUB_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_MF_FCSTUB_LIB_CORENAME}") set (HDF4_MF_FORTRAN_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_MF_FORTRAN_LIB_CORENAME}") set (HDF4_MF_TEST_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_MF_TEST_LIB_CORENAME}") set (HDF4_TOOLS_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_TOOLS_LIB_CORENAME}") set (HDF4_JAVA_JNI_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_JAVA_JNI_LIB_CORENAME}") set (HDF4_JAVA_HDF_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_JAVA_HDF_LIB_CORENAME}") set (HDF4_JAVA_TEST_LIB_NAME "${HDF4_EXTERNAL_LIB_PREFIX}${HDF4_JAVA_TEST_LIB_CORENAME}") #----------------------------------------------------------------------------- # Set the target names of all the libraries #----------------------------------------------------------------------------- set (HDF4_SRC_LIB_TARGET "${HDF4_SRC_LIB_CORENAME}-static") set (HDF4_SRC_LIB_SYM_TARGET "${HDF4_SRC_LIB_SYM_CORENAME}-static") set (HDF4_SRC_FCSTUB_LIB_TARGET "${HDF4_SRC_FCSTUB_LIB_CORENAME}-static") set (HDF4_SRC_FORTRAN_LIB_TARGET "${HDF4_SRC_FORTRAN_LIB_CORENAME}-static") set (HDF4_MF_LIB_TARGET "${HDF4_MF_LIB_CORENAME}-static") set (HDF4_HDF_TEST_LIB_TARGET "${HDF4_HDF_TEST_LIB_CORENAME}-static") set (HDF4_HDF_TEST_FCSTUB_LIB_TARGET "${HDF4_HDF_TEST_FCSTUB_LIB_CORENAME}-static") set (HDF4_MF_FCSTUB_LIB_TARGET "${HDF4_MF_FCSTUB_LIB_CORENAME}-static") set (HDF4_MF_FORTRAN_LIB_TARGET "${HDF4_MF_FORTRAN_LIB_CORENAME}-static") set (HDF4_MF_TEST_LIB_TARGET "${HDF4_MF_TEST_LIB_CORENAME}-static") set (HDF4_TOOLS_LIB_TARGET "${HDF4_TOOLS_LIB_CORENAME}-static") set (HDF4_JAVA_JNI_LIB_TARGET "${HDF4_JAVA_JNI_LIB_CORENAME}") set (HDF4_JAVA_HDF_LIB_TARGET "${HDF4_JAVA_HDF_LIB_CORENAME}") set (HDF4_JAVA_TEST_LIB_TARGET "${HDF4_JAVA_TEST_LIB_CORENAME}") set (HDF4_SRC_LIBSH_SYM_TARGET "${HDF4_SRC_LIB_SYM_CORENAME}-shared") set (HDF4_SRC_LIBSH_TARGET "${HDF4_SRC_LIB_CORENAME}-shared") set (HDF4_SRC_FCSTUB_LIBSH_TARGET "${HDF4_SRC_FCSTUB_LIB_CORENAME}-shared") set (HDF4_SRC_FORTRAN_LIBSH_TARGET "${HDF4_SRC_FORTRAN_LIB_CORENAME}-shared") set (HDF4_MF_LIBSH_TARGET "${HDF4_MF_LIB_CORENAME}-shared") set (HDF4_MF_FCSTUB_LIBSH_TARGET "${HDF4_MF_FCSTUB_LIB_CORENAME}-shared") set (HDF4_MF_FORTRAN_LIBSH_TARGET "${HDF4_MF_FORTRAN_LIB_CORENAME}-shared") set (HDF4_TOOLS_LIBSH_TARGET "${HDF4_TOOLS_LIB_CORENAME}-shared") #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (HDF_CONFIG_DIR ${HDF4_SOURCE_DIR}/config) set (HDF_RESOURCES_DIR ${HDF4_SOURCE_DIR}/config/cmake) set (HDF4_HDFSOURCE_DIR ${HDF4_SOURCE_DIR}/hdf/src) set (HDF4_HDF_TESTSOURCE_DIR ${HDF4_SOURCE_DIR}/hdf/test) set (HDF4_MFHDFSOURCE_DIR ${HDF4_SOURCE_DIR}/mfhdf/libsrc) set (HDF4_MFHDF_TEST_DIR ${HDF4_SOURCE_DIR}/mfhdf/test) set (HDF4_MFHDF_UTIL_DIR ${HDF4_SOURCE_DIR}/mfhdf/util) set (HDF4_MFHDF_FORTRAN_DIR ${HDF4_SOURCE_DIR}/mfhdf/fortran) set (HDF4_JAVA_JNI_SRC_DIR ${HDF4_SOURCE_DIR}/java/src/jni) set (HDF4_JAVA_HDF_SRC_DIR ${HDF4_SOURCE_DIR}/java/src/hdf) set (HDF4_JAVA_TEST_SRC_DIR ${HDF4_SOURCE_DIR}/java/test) set (HDF4_JAVA_LIB_DIR ${HDF4_SOURCE_DIR}/java/lib) set (HDF4_JAVA_LOGGING_JAR ${HDF4_SOURCE_DIR}/java/lib/slf4j-api-2.0.16.jar) set (HDF4_JAVA_LOGGING_NOP_JAR ${HDF4_SOURCE_DIR}/java/lib/ext/slf4j-nop-2.0.16.jar) set (HDF4_JAVA_LOGGING_SIMPLE_JAR ${HDF4_SOURCE_DIR}/java/lib/ext/slf4j-simple-2.0.16.jar) set (HDF4_DOXYGEN_DIR ${HDF4_SOURCE_DIR}/doxygen) set (HDF4_SRC_INCLUDE_DIRS ${HDF4_HDFSOURCE_DIR} ${HDF4_MFHDFSOURCE_DIR}) set (CMAKE_MODULE_PATH ${HDF_RESOURCES_DIR} ${CMAKE_MODULE_PATH}) #----------------------------------------------------------------------------- # parse the full version number from hfile.h and include in H4_VERS_INFO #----------------------------------------------------------------------------- file (READ ${HDF4_HDFSOURCE_DIR}/hfile.h _hfile_h_contents) string (REGEX REPLACE ".*#define[ \t]+LIBVER_MAJOR[ \t]+([0-9]*).*$" "\\1" H4_VERS_MAJOR ${_hfile_h_contents}) string (REGEX REPLACE ".*#define[ \t]+LIBVER_MINOR[ \t]+([0-9]*).*$" "\\1" H4_VERS_MINOR ${_hfile_h_contents}) string (REGEX REPLACE ".*#define[ \t]+LIBVER_RELEASE[ \t]+([0-9]*).*$" "\\1" H4_VERS_RELEASE ${_hfile_h_contents}) string (REGEX REPLACE ".*#define[ \t]+LIBVER_SUBRELEASE[ \t]+\"([0-9A-Za-z._-]*)\".*$" "\\1" H4_VERS_SUBRELEASE ${_hfile_h_contents}) message (TRACE "VERSION: ${H4_VERS_MAJOR}.${H4_VERS_MINOR}.${H4_VERS_RELEASE}-${H4_VERS_SUBRELEASE}") #----------------------------------------------------------------------------- # parse the full soversion number from config/lt_vers.am and include in H4_SOVERS_INFO #----------------------------------------------------------------------------- file (READ ${HDF4_SOURCE_DIR}/config/lt_vers.am _lt_vers_am_contents) string (REGEX REPLACE ".*LT_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_DF_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_DF_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_DF_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_DF_SOVERS_MAJOR ${H4_DF_SOVERS_INTERFACE}-${H4_DF_SOVERS_RELEASE}) message (VERBOSE "HDF SOVERSION: ${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") string (REGEX MATCH ".*LT_MF_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H4_MF_SOVERS_EXISTS ${_lt_vers_am_contents}) if (H4_MF_SOVERS_EXISTS) string (REGEX REPLACE ".*LT_MF_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_MF_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_MF_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_MF_SOVERS_MAJOR ${H4_MF_SOVERS_INTERFACE}-${H4_MF_SOVERS_RELEASE}) message (VERBOSE "MFHDFSOVERSION: ${H4_MF_SOVERS_MAJOR}.${H4_MF_SOVERS_RELEASE}.${H4_MF_SOVERS_MINOR}") endif () string (REGEX MATCH ".*LT_XDR_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H4_XDR_SOVERS_EXISTS ${_lt_vers_am_contents}) if (H4_XDR_SOVERS_EXISTS) string (REGEX REPLACE ".*LT_XDR_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_XDR_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_XDR_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_XDR_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_XDR_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_XDR_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_XDR_SOVERS_MAJOR ${H4_XDR_SOVERS_INTERFACE}-${H4_XDR_SOVERS_RELEASE}) message (VERBOSE "SOVERSION_XDR: ${H4_XDR_SOVERS_MAJOR}.${H4_XDR_SOVERS_RELEASE}.${H4_XDR_SOVERS_MINOR}") endif () string (REGEX MATCH ".*LT_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H4_F_SOVERS_EXISTS ${_lt_vers_am_contents}) if (H4_F_SOVERS_EXISTS) string (REGEX REPLACE ".*LT_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_F_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_F_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_F_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_F_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_F_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_F_SOVERS_MAJOR ${H4_F_SOVERS_INTERFACE}-${H4_F_SOVERS_RELEASE}) message (VERBOSE "SOVERSION_F: ${H4_F_SOVERS_MAJOR}.${H4_F_SOVERS_RELEASE}.${H4_F_SOVERS_MINOR}") endif () string (REGEX MATCH ".*LT_MF_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H4_MF_F_SOVERS_EXISTS ${_lt_vers_am_contents}) if (H4_MF_F_SOVERS_EXISTS) string (REGEX REPLACE ".*LT_MF_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_F_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_MF_F_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_F_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_MF_F_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_MF_F_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_MF_F_SOVERS_MAJOR ${H4_MF_F_SOVERS_INTERFACE}-${H4_MF_F_SOVERS_RELEASE}) message (VERBOSE "SOVERSION_MF_F: ${H4_MF_F_SOVERS_MAJOR}.${H4_MF_F_SOVERS_RELEASE}.${H4_MF_F_SOVERS_MINOR}") endif () string (REGEX MATCH ".*LT_JAVA_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H4_JAVA_SOVERS_EXISTS ${_lt_vers_am_contents}) if(H4_JAVA_SOVERS_EXISTS) string (REGEX REPLACE ".*LT_JAVA_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_JAVA_SOVERS_INTERFACE ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_JAVA_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_JAVA_SOVERS_MINOR ${_lt_vers_am_contents}) string (REGEX REPLACE ".*LT_JAVA_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$" "\\1" H4_JAVA_SOVERS_RELEASE ${_lt_vers_am_contents}) math (EXPR H4_JAVA_SOVERS_MAJOR ${H4_JAVA_SOVERS_INTERFACE}-${H4_JAVA_SOVERS_RELEASE}) message (VERBOSE "SOVERSION_JAVA: ${H4_JAVA_SOVERS_MAJOR}.${H4_JAVA_SOVERS_RELEASE}.${H4_JAVA_SOVERS_MINOR}") endif () #----------------------------------------------------------------------------- # Basic HDF4 stuff here #----------------------------------------------------------------------------- set (HDF4_PACKAGE "hdf4") set (HDF4_PACKAGE_NAME "HDF") set (HDF4_PACKAGE_VERSION "${H4_VERS_MAJOR}.${H4_VERS_MINOR}.${H4_VERS_RELEASE}") set (HDF4_PACKAGE_VERSION_MAJOR "${H4_VERS_MAJOR}.${H4_VERS_MINOR}") set (HDF4_PACKAGE_VERSION_MINOR "${H4_VERS_RELEASE}") set (HDF4_PACKAGE_VERSION_STRING "${HDF4_PACKAGE_VERSION}") if (NOT "${H4_VERS_SUBRELEASE}" STREQUAL "") set (HDF4_PACKAGE_VERSION_STRING "${HDF4_PACKAGE_VERSION_STRING}-${H4_VERS_SUBRELEASE}") endif () set (HDF4_DF_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_DF_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") if (H4_MF_SOVERS_EXISTS) set (HDF4_MF_PACKAGE_SOVERSION "${H4_MF_SOVERS_MAJOR}.${H4_MF_SOVERS_RELEASE}.${H4_MF_SOVERS_MINOR}") set (HDF4_MF_PACKAGE_SOVERSION_MAJOR "${H4_MF_SOVERS_MAJOR}") else () set (HDF4_MF_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_MF_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") endif () if (H4_XDR_SOVERS_EXISTS) set (HDF4_XDR_PACKAGE_SOVERSION "${H4_XDR_SOVERS_MAJOR}.${H4_XDR_SOVERS_RELEASE}.${H4_XDR_SOVERS_MINOR}") set (HDF4_XDR_PACKAGE_SOVERSION_MAJOR "${H4_XDR_SOVERS_MAJOR}") else () set (HDF4_XDR_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_XDR_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") endif () if (H4_F_SOVERS_EXISTS) set (HDF4_F_PACKAGE_SOVERSION "${H4_F_SOVERS_MAJOR}.${H4_F_SOVERS_RELEASE}.${H4_F_SOVERS_MINOR}") set (HDF4_F_PACKAGE_SOVERSION_MAJOR "${H4_F_SOVERS_MAJOR}") else () set (HDF4_F_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_F_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") endif () if (H4_MF_F_SOVERS_EXISTS) set (HDF4_MF_F_PACKAGE_SOVERSION "${H4_MF_F_SOVERS_MAJOR}.${H4_MF_F_SOVERS_RELEASE}.${H4_MF_F_SOVERS_MINOR}") set (HDF4_MF_F_PACKAGE_SOVERSION_MAJOR "${H4_MF_F_SOVERS_MAJOR}") else () set (HDF4_MF_F_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_MF_F_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") endif () if (H4_JAVA_SOVERS_EXISTS) set (HDF4_JAVA_PACKAGE_SOVERSION "${H4_JAVA_SOVERS_MAJOR}.${H4_JAVA_SOVERS_RELEASE}.${H4_JAVA_SOVERS_MINOR}") set (HDF4_JAVA_PACKAGE_SOVERSION_MAJOR "${H4_JAVA_SOVERS_MAJOR}") else () set (HDF4_JAVA_PACKAGE_SOVERSION "${H4_DF_SOVERS_MAJOR}.${H4_DF_SOVERS_RELEASE}.${H4_DF_SOVERS_MINOR}") set (HDF4_JAVA_PACKAGE_SOVERSION_MAJOR "${H4_DF_SOVERS_MAJOR}") endif () set (HDF4_PACKAGE_STRING "${HDF4_PACKAGE_NAME} ${HDF4_PACKAGE_VERSION_STRING}") set (HDF4_PACKAGE_TARNAME "${HDF4_PACKAGE}${HDF_PACKAGE_EXT}") set (HDF4_PACKAGE_URL "http://www.hdfgroup.org") set (HDF4_PACKAGE_BUGREPORT "help@hdfgroup.org") #----------------------------------------------------------------------------- # Set variables needed for installation #----------------------------------------------------------------------------- set (HDF4_VERSION_STRING ${HDF4_PACKAGE_VERSION}) set (HDF4_VERSION_MAJOR ${HDF4_PACKAGE_VERSION_MAJOR}) set (HDF4_VERSION_MINOR ${HDF4_PACKAGE_VERSION_MINOR}) #----------------------------------------------------------------------------- # Include some macros for reusable code #----------------------------------------------------------------------------- include (${HDF_RESOURCES_DIR}/HDFMacros.cmake) HDF_DIR_PATHS("HDF4") include (${HDF_RESOURCES_DIR}/HDFLibMacros.cmake) include (${HDF_RESOURCES_DIR}/HDF4Macros.cmake) set (HDF4_INSTALL_UTILS_BIN_DIR ${HDF4_INSTALL_BIN_DIR}) set (HDF4_INSTALL_TOOLS_BIN_DIR ${HDF4_INSTALL_BIN_DIR}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects. #----------------------------------------------------------------------------- if (NOT HDF4_EXPORTED_TARGETS) set (HDF4_EXPORTED_TARGETS "hdf4-targets") endif () #----------------------------------------------------------------------------- # To include a library in the list exported by the project AT BUILD TIME, # add it to this variable. This is NOT used by Make Install, but for projects # which include hdf4 as a sub-project within their build tree #----------------------------------------------------------------------------- set_global_variable (HDF4_LIBRARIES_TO_EXPORT "") set_global_variable (HDF4_UTILS_TO_EXPORT "") set (EXTERNAL_HEADER_LIST "") set (EXTERNAL_LIBRARY_LIST "") set (EXTERNAL_LIBRARYDLL_LIST "") #----------------------------------------------------------------------------- # Run all the CMake configuration tests for our build environment #----------------------------------------------------------------------------- include (${HDF_RESOURCES_DIR}/ConfigureChecks.cmake) set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) #----------------------------------------------------------------------------- # Include directories in the source or build tree should come before other # directories to prioritize headers in the sources over installed ones. #----------------------------------------------------------------------------- set (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) set (HDF4_COMP_INCLUDE_DIRECTORIES) #----------------------------------------------------------------------------- # Mac OS X Options #----------------------------------------------------------------------------- if (HDF4_BUILD_FRAMEWORKS AND NOT BUILD_SHARED_LIBS) set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE) endif () #----------------------------------------------------------------------------- # Option to Build Shared and Static libs, default is both #----------------------------------------------------------------------------- option (HDF4_ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF) mark_as_advanced (HDF4_ONLY_SHARED_LIBS) option (BUILD_STATIC_LIBS "Build Static Libraries" ON) set (H4_ENABLE_STATIC_LIB NO) option (BUILD_SHARED_LIBS "Build Shared Libraries" ON) set (H4_ENABLE_SHARED_LIB NO) option (HDF4_BUILD_STATIC_TOOLS "Build Static Tools NOT Shared Tools" OFF) # only shared libraries/tools is true if user forces static OFF if (NOT BUILD_STATIC_LIBS) set (HDF4_ONLY_SHARED_LIBS ON CACHE BOOL "Only Build Shared Libraries" FORCE) endif () # only shared libraries is set ON by user then force settings if (HDF4_ONLY_SHARED_LIBS) set (H4_ENABLE_STATIC_LIB NO) set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE) set (BUILD_STATIC_LIBS OFF CACHE BOOL "Build Static Libraries" FORCE) if (HDF4_BUILD_STATIC_TOOLS) message (WARNING "Cannot build static tools without static libraries. Building shared tools.") endif () set (HDF4_BUILD_STATIC_TOOLS OFF CACHE BOOL "Build Static Tools NOT Shared Tools" FORCE) endif () if (NOT BUILD_SHARED_LIBS AND NOT HDF4_BUILD_STATIC_TOOLS) message (WARNING "Cannot build shared tools without shared libraries. Building static tools.") set (HDF4_BUILD_STATIC_TOOLS ON CACHE BOOL "Build Static Tools NOT Shared Tools" FORCE) endif () if (BUILD_STATIC_LIBS) set (H4_ENABLE_STATIC_LIB YES) endif () if (BUILD_SHARED_LIBS) set (H4_ENABLE_SHARED_LIB YES) endif () set (CMAKE_POSITION_INDEPENDENT_CODE ON) add_compile_definitions (HAVE_CONFIG_H) #----------------------------------------------------------------------------- # Temporary disable optimization flag #----------------------------------------------------------------------------- if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR CYGWIN) foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) if (${flag_var} MATCHES "O3") string (REGEX REPLACE "O3" "O2" ${flag_var} "${${flag_var}}") endif () endforeach () endif () option (HDF4_ENABLE_ANALYZER_TOOLS "enable the use of Clang tools" OFF) mark_as_advanced (HDF4_ENABLE_ANALYZER_TOOLS) if (HDF4_ENABLE_ANALYZER_TOOLS) include (${HDF4_SOURCE_DIR}/config/sanitizer/tools.cmake) endif () option (HDF4_ENABLE_SANITIZERS "execute the Clang sanitizer" OFF) mark_as_advanced (HDF4_ENABLE_SANITIZERS) if (HDF4_ENABLE_SANITIZERS) include (${HDF4_SOURCE_DIR}/config/sanitizer/sanitizers.cmake) endif () option (HDF4_ENABLE_FORMATTERS "format source files" OFF) mark_as_advanced (HDF4_ENABLE_FORMATTERS) if (HDF4_ENABLE_FORMATTERS) include (${HDF4_SOURCE_DIR}/config/sanitizer/formatting.cmake) endif () #----------------------------------------------------------------------------- # Option to use code coverage #----------------------------------------------------------------------------- option (HDF4_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF) if (HDF4_ENABLE_COVERAGE) include (${HDF4_SOURCE_DIR}/config/sanitizer/code-coverage.cmake) if(CODE_COVERAGE AND CODE_COVERAGE_ADDED) message(VERBOSE "Add instrumentation to all targets") add_code_coverage () # Adds instrumentation to all targets else () message(VERBOSE "Use --coverage option") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (LDFLAGS "${LDFLAGS} -fprofile-arcs -ftest-coverage") link_libraries (gcov) else () set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") endif () endif () endif () #----------------------------------------------------------------------------- # Option to use deprecated public API symbols #----------------------------------------------------------------------------- option (HDF4_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols" ON) if (HDF4_ENABLE_DEPRECATED_SYMBOLS) set (H4_NO_DEPRECATED_SYMBOLS 0) else () set (H4_NO_DEPRECATED_SYMBOLS 1) endif () #----------------------------------------------------------------------------- # When building utility executables that generate other (source) files : # we make use of the following variables defined in the root CMakeLists. # Certain systems may add /Debug or /Release to output paths # and we need to call the executable from inside the CMake configuration #----------------------------------------------------------------------------- if (WIN32) add_compile_definitions (_CRT_SECURE_NO_WARNINGS) if (MSVC) add_compile_definitions (_BIND_TO_CURRENT_VCLIBS_VERSION=1 _CONSOLE) endif () endif () option (HDF4_MINGW_STATIC_GCC_LIBS "Statically link libgcc/libstdc++" OFF) if (MSVC) set (CMAKE_MFC_FLAG 0) set (WIN_COMPILE_FLAGS "") set (WIN_LINK_FLAGS "") endif () include (${HDF_RESOURCES_DIR}/HDFCompilerFlags.cmake) set (CMAKE_MODULE_PATH ${HDF_RESOURCES_DIR} ${CMAKE_MODULE_PATH}) #----------------------------------------------------------------------------- # Include user macros #----------------------------------------------------------------------------- include (UserMacros.cmake) #----------------------------------------------------------------------------- # Include filter (zlib, szip, etc.) macros #----------------------------------------------------------------------------- set (HDF4_ENABLE_JPEG_LIB_SUPPORT ON) #Enable libjpeg required option (HDF4_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF) #SZip is optional set (HDF4_ENABLE_Z_LIB_SUPPORT ON) #Enable libzlib required include (CMakeFilters.cmake) #----------------------------------------------------------------------------- # Options to build tools #----------------------------------------------------------------------------- option (HDF4_BUILD_TOOLS "Build HDF4 Tools" ON) option (HDF4_BUILD_NETCDF_TOOLS "Build HDF4 versions of ncdump and ncgen" ON) #----------------------------------------------------------------------------- # Option to Build HDF4 versions of NetCDF-3 APIS #----------------------------------------------------------------------------- option (HDF4_ENABLE_NETCDF "Build HDF4 versions of NetCDF-3 APIS" ON) if (HDF4_ENABLE_NETCDF) set (H4_HAVE_NETCDF 1) set (H4_BUILD_NETCDF 1) endif () #----------------------------------------------------------------------------- # Add the HDF4 Library Target to the build #----------------------------------------------------------------------------- add_subdirectory (hdf/src) add_subdirectory (mfhdf/libsrc) #----------------------------------------------------------------------------- # Option to build documentation #----------------------------------------------------------------------------- option (HDF4_BUILD_DOC "Build documentation" OFF) if (HDF4_BUILD_DOC AND IS_DIRECTORY "${HDF4_DOXYGEN_DIR}") # check if Doxygen is installed find_package(Doxygen) if (DOXYGEN_FOUND) option (HDF4_ENABLE_DOXY_WARNINGS "Enable fail if doxygen parsing has warnings." OFF) mark_as_advanced (HDF4_ENABLE_DOXY_WARNINGS) if (HDF4_ENABLE_DOXY_WARNINGS) set (HDF4_DOXY_WARNINGS "FAIL_ON_WARNINGS_PRINT") else () set (HDF4_DOXY_WARNINGS "NO") endif () message(VERBOSE "Doxygen version: ${DOXYGEN_VERSION}") add_subdirectory (doxygen) else () message(WARNING "Doxygen needs to be installed to generate the doxygen documentation") endif () endif () #----------------------------------------------------------------------------- # Dashboard and Testing Settings #----------------------------------------------------------------------------- option (BUILD_TESTING "Build HDF4 Unit Testing" ON) if (BUILD_TESTING) set (DART_TESTING_TIMEOUT 1200 CACHE STRING "Timeout in seconds for each test (default 1200=20minutes)" ) enable_testing () include (CTest) if (NOT EXISTS "${HDF4_BINARY_DIR}/CTestCustom.ctest") include (${HDF4_SOURCE_DIR}/CTestConfig.cmake) configure_file (${HDF_RESOURCES_DIR}/CTestCustom.cmake ${HDF4_BINARY_DIR}/CTestCustom.ctest @ONLY) endif () if (NOT HDF4_EXTERNALLY_CONFIGURED) if (IS_DIRECTORY "${HDF4_SOURCE_DIR}/hdf/test") add_subdirectory (hdf/test) endif () if (IS_DIRECTORY "${HDF4_SOURCE_DIR}/mfhdf/test") add_subdirectory (mfhdf/test) endif () endif () endif () #----------------------------------------------------------------------------- # Option to build Fortran bindings/tests # Make sure this appears before the CONFIGURE_FILE step # so that fortran name mangling is detected before writing H4config.h # NOTE: # This interface is UNSAFE on 64-bit systems as the interface attempts to # store pointers in 32-bit integers. #----------------------------------------------------------------------------- # Set default name mangling : overridden by Fortran detection in fortran dir set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) name ## _") set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) name ## __") if (IS_DIRECTORY "${HDF4_SOURCE_DIR}/mfhdf/fortran") option (HDF4_BUILD_FORTRAN "Build FORTRAN support" OFF) if (HDF4_BUILD_FORTRAN) if (WIN32) set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) NAME") set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) NAME") endif () message (VERBOSE "Fortran compiler ID is ${CMAKE_Fortran_COMPILER_ID}") #include (${HDF_RESOURCES_DIR}/HDFCompilerFortranFlags.cmake) include (${HDF_RESOURCES_DIR}/HDF4UseFortran.cmake) if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0) set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fallow-argument-mismatch") set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fallow-argument-mismatch") endif () add_subdirectory (mfhdf/fortran) add_subdirectory (hdf/fortran) endif () endif () #----------------------------------------------------------------------------- # Library utilities #----------------------------------------------------------------------------- add_subdirectory (hdf) add_subdirectory (mfhdf) #----------------------------------------------------------------------------- # Option to build HDF4 Java Library #----------------------------------------------------------------------------- if (IS_DIRECTORY "${HDF4_SOURCE_DIR}/java") option (HDF4_BUILD_JAVA "Build Java HDF Library" OFF) if (HDF4_BUILD_JAVA) if (NOT BUILD_SHARED_LIBS) message (FATAL_ERROR "\nJava requires shared libraries!\n") else () add_subdirectory (java) endif () endif () endif () #----------------------------------------------------------------------------- # Generate the H4config.h file containing user settings needed by compilation #----------------------------------------------------------------------------- configure_file (${HDF_RESOURCES_DIR}/h4config.h.in ${PROJECT_BINARY_DIR}/h4config.h @ONLY) #----------------------------------------------------------------------------- # Option to build examples #----------------------------------------------------------------------------- if (IS_DIRECTORY "${HDF4_SOURCE_DIR}/HDF4Examples") option (HDF4_BUILD_EXAMPLES "Build HDF4 Library Examples" ON) if (HDF4_BUILD_EXAMPLES AND NOT HDF4_USE_SANITIZER) include (${HDF_RESOURCES_DIR}/HDF4ExampleCache.cmake) set (HDF4_VERSION ${HDF4_PACKAGE_VERSION}) add_subdirectory (HDF4Examples) endif () endif () include (CMakeInstallation.cmake) hdf4-hdf4.3.1/CMakePresets.json000066400000000000000000000271541503061704500162610ustar00rootroot00000000000000{ "version": 6, "include": [ "config/cmake-presets/hidden-presets.json" ], "configurePresets": [ { "name": "ci-base-tgz", "hidden": true, "inherits": "ci-base", "cacheVariables": { "HDF4_ALLOW_EXTERNAL_SUPPORT": {"type": "STRING", "value": "TGZ"}, "TGZPATH": {"type": "PATH", "value": "${sourceParentDir}/temp"} } }, { "name": "ci-CompressionVars", "hidden": true, "cacheVariables": { "JPEG_PACKAGE_NAME": {"type": "STRING", "value": "jpeg"}, "JPEG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://www.ijg.org/filesz"}, "JPEG_TGZ_NAME": {"type": "STRING", "value": "jpegsrc.v9e.tar.gz"}, "ZLIB_PACKAGE_NAME": {"type": "STRING", "value": "zlib"}, "ZLIB_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/madler/zlib/releases/download/v1.3.1"}, "ZLIB_TGZ_NAME": {"type": "STRING", "value": "zlib-1.3.1.tar.gz"}, "ZLIBNG_PACKAGE_NAME": {"type": "STRING", "value": "zlib-ng"}, "ZLIBNG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/zlib-ng/zlib-ng/archive/refs/tags"}, "ZLIBNG_TGZ_NAME": {"type": "STRING", "value": "2.2.4.tar.gz"}, "LIBAEC_PACKAGE_NAME": {"type": "STRING", "value": "libaec"}, "LIBAEC_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3"}, "LIBAEC_TGZ_NAME": {"type": "STRING", "value": "libaec-1.1.3.tar.gz"} } }, { "name": "ci-StdCompression", "hidden": true, "inherits": ["ci-base-tgz", "ci-CompressionVars"], "cacheVariables": { "HDF4_PACKAGE_EXTLIBS": "ON", "HDF4_ENABLE_SZIP_SUPPORT": "ON", "HDF4_ENABLE_SZIP_ENCODING": "ON", "HDF4_USE_ZLIB_NG": "OFF", "JPEG_USE_LOCALCONTENT": "OFF", "ZLIB_USE_LOCALCONTENT": "OFF", "LIBAEC_USE_LOCALCONTENT": "OFF", "HDF4_USE_ZLIB_STATIC": "ON", "HDF4_USE_LIBAEC_STATIC": "ON" } }, { "name": "ci-StdExamples", "hidden": true, "inherits": ["ci-base", "ci-base-tgz"], "cacheVariables": { "HDF4_PACK_EXAMPLES": "ON", "EXAMPLES_DOWNLOAD": "ON" } }, { "name": "ci-StdShar", "hidden": true, "inherits": ["ci-StdCompression", "ci-StdExamples"], "cacheVariables": { "HDF_PACKAGE_NAMESPACE": {"type": "STRING", "value": "hdf4::"}, "HDF4_BUILD_GENERATORS": "ON", "HDF4_ENABLE_ALL_WARNINGS": "ON", "HDF4_MINGW_STATIC_GCC_LIBS": "ON" } }, { "name": "ci-StdShar-MSVC", "description": "MSVC Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-MSVC", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-Clang", "description": "Clang Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-Clang", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-GNUC", "description": "GNUC Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-GNUC", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-macos-Clang", "description": "Clang Standard Config for macos (Release)", "inherits": [ "ci-macos-Release-Clang", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-macos-GNUC", "description": "GNUC Standard Config for macos (Release)", "inherits": [ "ci-macos-Release-GNUC", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-Clang-Fortran", "description": "Clang Standard Fortran Config for x64 (Release)", "inherits": [ "ci-x64-Release-Clang", "ci-Fortran", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-GNUC-Fortran", "description": "GNUC Standard Fortran Config for x64 (Release)", "inherits": [ "ci-x64-Release-GNUC", "ci-Fortran", "ci-Java", "ci-StdShar" ] }, { "name": "ci-StdShar-Intel", "description": "Intel Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-Intel", "ci-Java", "ci-StdShar" ] } ], "buildPresets": [ { "name": "ci-StdShar-MSVC", "description": "MSVC Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-MSVC", "inherits": [ "ci-x64-Release-MSVC" ] }, { "name": "ci-StdShar-Clang-Fortran", "description": "Clang Standard Fortran Build for x64 (Release)", "configurePreset": "ci-StdShar-Clang-Fortran", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-Clang", "description": "Clang Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-Clang", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-macos-Clang", "description": "Clang Standard Build for macos (Release)", "configurePreset": "ci-StdShar-macos-Clang", "inherits": [ "ci-macos-Release-Clang" ] }, { "name": "ci-StdShar-macos-GNUC", "description": "GNUC Standard Build for macos (Release)", "configurePreset": "ci-StdShar-macos-GNUC", "verbose": true, "inherits": [ "ci-macos-Release-GNUC" ] }, { "name": "ci-StdShar-GNUC", "description": "GNUC Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-GNUC", "verbose": true, "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-GNUC-Fortran", "description": "GNUC Standard Fortran Build for x64 (Release)", "configurePreset": "ci-StdShar-GNUC-Fortran", "verbose": true, "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-Intel", "description": "Intel Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-Intel", "verbose": true, "inherits": [ "ci-x64-Release-Intel" ] } ], "testPresets": [ { "name": "ci-StdShar-MSVC", "configurePreset": "ci-StdShar-MSVC", "inherits": [ "ci-x64-Release-MSVC" ] }, { "name": "ci-StdShar-Clang", "configurePreset": "ci-StdShar-Clang", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-Clang-Fortran", "configurePreset": "ci-StdShar-Clang-Fortran", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-macos-Clang", "configurePreset": "ci-StdShar-macos-Clang", "inherits": [ "ci-macos-Release-Clang" ], "execution": { "noTestsAction": "error", "timeout": 180, "jobs": 2 } }, { "name": "ci-StdShar-macos-GNUC", "configurePreset": "ci-StdShar-macos-GNUC", "inherits": [ "ci-macos-Release-GNUC" ] }, { "name": "ci-StdShar-GNUC", "configurePreset": "ci-StdShar-GNUC", "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-GNUC-Fortran", "configurePreset": "ci-StdShar-GNUC-Fortran", "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-win-Intel", "configurePreset": "ci-StdShar-Intel", "inherits": [ "ci-x64-Release-Intel" ], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "ci-StdShar-Intel", "configurePreset": "ci-StdShar-Intel", "inherits": [ "ci-x64-Release-Intel" ] } ], "packagePresets": [ { "name": "ci-StdShar-MSVC", "configurePreset": "ci-StdShar-MSVC", "inherits": "ci-x64-Release-MSVC" }, { "name": "ci-StdShar-Clang", "configurePreset": "ci-StdShar-Clang", "inherits": "ci-x64-Release-Clang" }, { "name": "ci-StdShar-Clang-Fortran", "configurePreset": "ci-StdShar-Clang-Fortran", "inherits": "ci-x64-Release-Clang" }, { "name": "ci-StdShar-macos-Clang", "configurePreset": "ci-StdShar-macos-Clang", "inherits": "ci-macos-Release-Clang" }, { "name": "ci-StdShar-macos-GNUC", "configurePreset": "ci-StdShar-macos-GNUC", "inherits": "ci-macos-Release-GNUC" }, { "name": "ci-StdShar-GNUC", "configurePreset": "ci-StdShar-GNUC", "inherits": "ci-x64-Release-GNUC" }, { "name": "ci-StdShar-GNUC-Fortran", "configurePreset": "ci-StdShar-GNUC-Fortran", "inherits": "ci-x64-Release-GNUC" }, { "name": "ci-StdShar-Intel", "configurePreset": "ci-StdShar-Intel", "inherits": "ci-x64-Release-Intel" } ], "workflowPresets": [ { "name": "ci-StdShar-MSVC", "steps": [ {"type": "configure", "name": "ci-StdShar-MSVC"}, {"type": "build", "name": "ci-StdShar-MSVC"}, {"type": "test", "name": "ci-StdShar-MSVC"}, {"type": "package", "name": "ci-StdShar-MSVC"} ] }, { "name": "ci-StdShar-Clang", "steps": [ {"type": "configure", "name": "ci-StdShar-Clang"}, {"type": "build", "name": "ci-StdShar-Clang"}, {"type": "test", "name": "ci-StdShar-Clang"}, {"type": "package", "name": "ci-StdShar-Clang"} ] }, { "name": "ci-StdShar-Clang-Fortran", "steps": [ {"type": "configure", "name": "ci-StdShar-Clang-Fortran"}, {"type": "build", "name": "ci-StdShar-Clang-Fortran"}, {"type": "test", "name": "ci-StdShar-Clang-Fortran"}, {"type": "package", "name": "ci-StdShar-Clang-Fortran"} ] }, { "name": "ci-StdShar-macos-Clang", "steps": [ {"type": "configure", "name": "ci-StdShar-macos-Clang"}, {"type": "build", "name": "ci-StdShar-macos-Clang"}, {"type": "test", "name": "ci-StdShar-macos-Clang"}, {"type": "package", "name": "ci-StdShar-macos-Clang"} ] }, { "name": "ci-StdShar-GNUC", "steps": [ {"type": "configure", "name": "ci-StdShar-GNUC"}, {"type": "build", "name": "ci-StdShar-GNUC"}, {"type": "test", "name": "ci-StdShar-GNUC"}, {"type": "package", "name": "ci-StdShar-GNUC"} ] }, { "name": "ci-StdShar-macos-GNUC", "steps": [ {"type": "configure", "name": "ci-StdShar-macos-GNUC"}, {"type": "build", "name": "ci-StdShar-macos-GNUC"}, {"type": "test", "name": "ci-StdShar-macos-GNUC"}, {"type": "package", "name": "ci-StdShar-macos-GNUC"} ] }, { "name": "ci-StdShar-GNUC-Fortran", "steps": [ {"type": "configure", "name": "ci-StdShar-GNUC-Fortran"}, {"type": "build", "name": "ci-StdShar-GNUC-Fortran"}, {"type": "test", "name": "ci-StdShar-GNUC-Fortran"}, {"type": "package", "name": "ci-StdShar-GNUC-Fortran"} ] }, { "name": "ci-StdShar-Intel", "steps": [ {"type": "configure", "name": "ci-StdShar-Intel"}, {"type": "build", "name": "ci-StdShar-Intel"}, {"type": "test", "name": "ci-StdShar-Intel"}, {"type": "package", "name": "ci-StdShar-Intel"} ] }, { "name": "ci-StdShar-win-Intel", "steps": [ {"type": "configure", "name": "ci-StdShar-Intel"}, {"type": "build", "name": "ci-StdShar-Intel"}, {"type": "test", "name": "ci-StdShar-win-Intel"}, {"type": "package", "name": "ci-StdShar-Intel"} ] } ] } hdf4-hdf4.3.1/COPYING000066400000000000000000000151701503061704500140660ustar00rootroot00000000000000 Copyright Notice and License Terms for Hierarchical Data Format (HDF) Software Library and Utilities --------------------------------------------------------------------------- Hierarchical Data Format (HDF) Software Library and Utilities Copyright 2006 by The HDF Group. NCSA Hierarchical Data Format (HDF) Software Library and Utilities Copyright 1988-2006 by the Board of Trustees of the University of Illinois. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted for any purpose (including commercial purposes) provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or materials provided with the distribution. 3. Neither the name of The HDF Group, the name of the University, nor the name of any Contributor may be used to endorse or promote products derived from this software without specific prior written permission from The HDF Group, the University, or the Contributor, respectively. DISCLAIMER: THIS SOFTWARE IS PROVIDED BY THE HDF GROUP AND THE CONTRIBUTORS "AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. IN NO EVENT SHALL THE HDF GROUP OR THE CONTRIBUTORS BE LIABLE FOR ANY DAMAGES SUFFERED BY THE USERS ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to The HDF Group, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such enhancements or derivative works thereof, in binary and source code form. --------------------------------------------------------------------------- --------------------------------------------------------------------------- Contributors: - National Center for Supercomputing Applications (NCSA) at the University of Illinois - Fortner Software - Unidata Program Center (netCDF) - The Independent JPEG Group (JPEG) - Jean-loup Gailly and Mark Adler (gzip) - Digital Equipment Corporation (DEC) --------------------------------------------------------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- 3rd-party software included in HDF4: netCDF The multi-file HDF interface (mfhdf library) and several netCDF tools and tests are built using netCDF 2.3.2 code under the following license (from the mfhdf/COPYRIGHT file): Copyright 1993 University Corporation for Atmospheric Research/Unidata Portions of this software were developed by the Unidata Program at the University Corporation for Atmospheric Research. Access and use of this software shall impose the following obligations and understandings on the user. The user is granted the right, without any fee or cost, to use, copy, modify, alter, enhance and distribute this software, and any derivative works thereof, and its supporting documentation for any purpose whatsoever, provided that this entire notice appears in all copies of the software, derivative works and supporting documentation. Further, UCAR requests that the user credit UCAR/Unidata in any publications that result from the use of this software or in any product that includes this software, although this is not an obligation. The names UCAR and/or Unidata, however, may not be used in any advertising or publicity to endorse or promote any products or commercial entity unless specific written permission is obtained from UCAR/Unidata. The user also understands that UCAR/Unidata is not obligated to provide the user with any support, consulting, training or assistance of any kind with regard to the use, operation and performance of this software nor to provide the user with any updates, revisions, new versions or "bug fixes." THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- 3rd-party software included in HDF4: XDR HDF4 builds the Sun RPC version of XDR as an internal 3rd-party I/O library under this license: Sun RPC is a product of Sun Microsystems, Inc. and is provided for unrestricted use provided that this legend is included on all tape media and as a part of the software program in whole or part. Users may copy or modify Sun RPC without charge, but are not authorized to license or distribute it to anyone else except as part of a product or program developed by the user. SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. Sun RPC is provided with no support and without any obligation on the part of Sun Microsystems, Inc. to assist in its use, correction, modification or enhancement. SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC OR ANY PART THEREOF. In no event will Sun Microsystems, Inc. be liable for any lost revenue or profits or other special, indirect and consequential damages, even if Sun has been advised of the possibility of such damages. Sun Microsystems, Inc. 2550 Garcia Avenue Mountain View, California 94043 --------------------------------------------------------------------------- hdf4-hdf4.3.1/CTestConfig.cmake000066400000000000000000000025161503061704500162050ustar00rootroot00000000000000## This file should be placed in the root directory of your project. ## Then modify the CMakeLists.txt file in the root directory of your ## project to incorporate the testing dashboard. ## # The following are required to use Dart and the CDash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) set (CTEST_PROJECT_NAME "HDF4") set (CTEST_NIGHTLY_START_TIME "18:00:00 CST") set (CTEST_DROP_METHOD "https") if (CTEST_DROP_SITE_INIT) set (CTEST_DROP_SITE "${CTEST_DROP_SITE_INIT}") else () set (CTEST_DROP_SITE "cdash.hdfgroup.org") endif () if (CTEST_DROP_LOCATION_INIT) set (CTEST_DROP_LOCATION "${CTEST_DROP_LOCATION_INIT}") else () set (CTEST_DROP_LOCATION "/submit.php?project=HDF4") endif () set (CTEST_DROP_SITE_CDASH TRUE) set(CTEST_LABELS_FOR_SUBPROJECTS HDF MFHDF JAVA) set (UPDATE_TYPE git) set (VALGRIND_COMMAND "/usr/bin/valgrind") set (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe") set (CTEST_TEST_TIMEOUT 3600 CACHE STRING "Maximum time allowed before CTest will kill the test.") set (DART_TESTING_TIMEOUT 3600 CACHE STRING "Maximum time allowed before CTest will kill the test." FORCE) set (CTEST_SUBMIT_RETRY_DELAY 20 CACHE STRING "How long to wait between timed-out CTest submissions.") hdf4-hdf4.3.1/HDF4Examples/000077500000000000000000000000001503061704500152135ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/000077500000000000000000000000001503061704500153755ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/AN/000077500000000000000000000000001503061704500156735ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/AN/CMakeLists.txt000066400000000000000000000102551503061704500204360ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_AN C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (C_sourcefiles.cmake) foreach (example_name ${h4examples}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () foreach (example_name ${h4examples_use}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST testname testddl dumparg) add_test ( NAME hdf_${testname}-clearall COMMAND ${CMAKE_COMMAND} -E remove ${testname}.hdf ) add_test ( NAME hdf_${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_OUTPUT=${testname}.out" -D "TEST_REFERENCE=${testname}.tst" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_${testname} PROPERTIES DEPENDS hdf_${testname}-clearall) if (HDF4_BUILD_TOOLS AND ${testddl} STREQUAL "1") add_test ( NAME hdf_HDP-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=${H4EX_HDF4_DUMP_EXECUTABLE}" -D "TEST_ARGS:STRING=${dumparg};${testname}.hdf" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testname}.ddl.out" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=${testname}.ddl" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_HDP-${testname} PROPERTIES DEPENDS hdf_${testname}) endif () endmacro () foreach (example_name ${h4examples}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_AN_TEST_FILES "${testdest}.tst") if (HDF4_BUILD_TOOLS) add_custom_command ( OUTPUT "${testdest}.ddl" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.ddl" "${testdest}.ddl" DEPENDS "${testsrc}.ddl" ) list (APPEND HDF4Examples_AN_TEST_FILES "${testdest}.ddl") endif () endforeach () foreach (example_name ${h4examples_use}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_AN_TEST_FILES "${testdest}.tst") endforeach () foreach (ex_file ${h4examples_files}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/${ex_file}") set (testdest "${PROJECT_BINARY_DIR}/${ex_file}") add_custom_command ( OUTPUT "${testdest}" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}" "${testdest}" DEPENDS "${testsrc}" ) list (APPEND HDF4Examples_AN_TEST_FILES "${testdest}") endforeach () add_custom_target (HDF4Examples_HDF_AN-files ALL COMMENT "Copying files needed by AN tests" DEPENDS ${HDF4Examples_AN_TEST_FILES}) foreach (example_name ${h4examples}) ADD_H4_TEST (h4ex_${example_name} 1 dumpvg) endforeach () foreach (example_name ${h4examples_use}) ADD_H4_TEST (h4ex_${example_name} 0 dumpvg) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/C/AN/C_sourcefiles.cmake000066400000000000000000000005571503061704500214710ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (h4examples AN_create_annotation ) set (h4examples_use AN_get_annotation_info AN_read_annotation ) set (h4examples_files General_HDFobjects.hdf ) hdf4-hdf4.3.1/HDF4Examples/C/AN/h4ex_AN_create_annotation.c000066400000000000000000000105111503061704500230400ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "h4ex_AN_create_annotation.hdf" #define VG_NAME "AN Vgroup" #define FILE_LABEL_TXT "General HDF objects" #define FILE_DESC_TXT "This is an HDF file that contains general HDF objects" #define DATA_LABEL_TXT "Common AN Vgroup" #define DATA_DESC_TXT "This is a vgroup that is used to test data annotations" int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ an_id, /* AN interface identifier */ file_label_id, /* file label identifier */ file_desc_id, /* file description identifier */ data_label_id, /* data label identifier */ data_desc_id, /* data description identifier */ vgroup_id; uint16 vgroup_tag, vgroup_ref; /********************** End of variable declaration **********************/ /* * Create the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the AN interface. */ if ((an_id = ANstart(file_id)) == FAIL) printf("*** ERROR from ANstart\n"); /* * Create the file label. */ if ((file_label_id = ANcreatef(an_id, AN_FILE_LABEL)) == FAIL) printf("*** ERROR from ANcreatef\n"); /* * Write the annotations to the file label. */ if (ANwriteann(file_label_id, FILE_LABEL_TXT, strlen(FILE_LABEL_TXT)) == FAIL) printf("*** ERROR from ANwriteann\n"); /* * Create file description. */ if ((file_desc_id = ANcreatef(an_id, AN_FILE_DESC)) == FAIL) printf("*** ERROR from ANcreatef\n"); /* * Write the annotation to the file description. */ if (ANwriteann(file_desc_id, FILE_DESC_TXT, strlen(FILE_DESC_TXT)) == FAIL) printf("*** ERROR from ANwriteann\n"); /* * Create a vgroup in the V interface. Note that the vgroup's ref number * is set to -1 for creating and the access mode is "w" for writing. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); if ((vgroup_id = Vattach(file_id, -1, "w")) == FAIL) printf("*** ERROR from Vattach\n"); if (Vsetname(vgroup_id, VG_NAME) == FAIL) printf("*** ERROR from Vsetname\n"); /* * Obtain the tag and ref number of the vgroup for subsequent * references. */ vgroup_tag = (uint16)VQuerytag(vgroup_id); vgroup_ref = (uint16)VQueryref(vgroup_id); /* * Create the data label for the vgroup identified by its tag * and ref number. */ if ((data_label_id = ANcreate(an_id, vgroup_tag, vgroup_ref, AN_DATA_LABEL)) == FAIL) printf("*** ERROR from ANcreate\n"); /* * Write the annotation text to the data label. */ if (ANwriteann(data_label_id, DATA_LABEL_TXT, strlen(DATA_LABEL_TXT)) == FAIL) printf("*** ERROR from ANwriteann\n"); /* * Create the data description for the vgroup identified by its tag * and ref number. */ if ((data_desc_id = ANcreate(an_id, vgroup_tag, vgroup_ref, AN_DATA_DESC)) == FAIL) printf("*** ERROR from ANcreate\n"); /* * Write the annotation text to the data description. */ if (ANwriteann(data_desc_id, DATA_DESC_TXT, strlen(DATA_DESC_TXT)) == FAIL) printf("*** ERROR from ANwriteann\n"); /* * Terminate access to the vgroup and to the V interface. */ if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); /* * Terminate access to each annotation explicitly. */ if (ANendaccess(file_label_id) == FAIL) printf("*** ERROR from ANendaccess(file_label_id)\n"); if (ANendaccess(file_desc_id) == FAIL) printf("*** ERROR from ANendaccess(file_desc_id)\n"); if (ANendaccess(data_label_id) == FAIL) printf("*** ERROR from ANendaccess(data_label_id)\n"); if (ANendaccess(data_desc_id) == FAIL) printf("*** ERROR from ANendaccess(data_desc_id)\n"); /* * Terminate access to the AN interface and close the HDF file. */ if (ANend(an_id) == FAIL) printf("*** ERROR from ANend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/AN/h4ex_AN_get_annotation_info.c000066400000000000000000000073271503061704500234020ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_HDFobjects.hdf" #define VG_NAME "AN Vgroup" int main() { /************************* Variable declaration **************************/ int32 file_id, an_id; int32 n_annots; /* number of annotations */ int32 *ann_list = NULL; /* list of annotation identifiers */ int32 vgroup_ref; /* reference number of the vgroup */ int32 index; /* index of an annotation in the annotation list */ ann_type annot_type = AN_DATA_DESC; /* annotation to be obtained*/ uint16 ann_tag, ann_ref, /* tag/ref number of an annotation */ vgroup_tag = DFTAG_VG; /* tag of the vgroup */ /********************** End of variable declaration **********************/ /* * Open the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get the vgroup named VG_NAME. */ if ((vgroup_ref = Vfind(file_id, VG_NAME)) == FAIL) printf("*** ERROR from Vfind\n"); /* * Initialize the AN interface and obtain an interface id. */ if ((an_id = ANstart(file_id)) == FAIL) printf("*** ERROR from ANstart\n"); /* * Get the number of object descriptions. Note that, since ANnumann takes * the tag and reference number as being of type unit16, vgroup_ref must be * safely cast to uint16 by checking for FAIL value first. */ if (vgroup_ref != FAIL) { n_annots = ANnumann(an_id, annot_type, vgroup_tag, (uint16)vgroup_ref); /* * Allocate space to hold the annotation identifiers. */ ann_list = malloc(n_annots * sizeof(int32)); /* * Get the list of identifiers of the annotations attached to the * vgroup and of type annot_type. */ n_annots = ANannlist(an_id, annot_type, vgroup_tag, (uint16)vgroup_ref, ann_list); /* * Get each annotation identifier from the list then display the * tag/ref number pair of the corresponding annotation. */ printf("List of annotations of type AN_DATA_DESC:\n"); for (index = 0; index < n_annots; index++) { /* * Get and display the ref number of the annotation from * its identifier. */ if (ANid2tagref(ann_list[index], &ann_tag, &ann_ref) == FAIL) printf("*** ERROR from ANid2tagref\n"); printf("Annotation index %d: tag = %s\nreference number= %d\n", index, ann_tag == DFTAG_DIA ? "DFTAG_DIA (data description)" : "Incorrect", ann_ref); } /* for */ } /* for */ /* * Get and display an annotation type from an annotation tag. */ annot_type = ANtag2atype(DFTAG_FID); printf("\nAnnotation type of DFTAG_FID (file label) is %s\n", annot_type == AN_FILE_LABEL ? "AN_FILE_LABEL" : "Incorrect"); /* * Get and display an annotation tag from an annotation type. */ ann_tag = ANatype2tag(AN_DATA_LABEL); printf("\nAnnotation tag of AN_DATA_LABEL is %s\n", ann_tag == DFTAG_DIL ? "DFTAG_DIL (data label)" : "Incorrect"); /* * Terminate access to the AN interface and close the HDF file. */ if (ANend(an_id) == FAIL) printf("*** ERROR from ANend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); /* * Free the space allocated for the annotation identifier list. */ free(ann_list); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/AN/h4ex_AN_read_annotation.c000066400000000000000000000064011503061704500225130ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_HDFobjects.hdf" int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ an_id, /* AN interface identifier */ ann_id, /* an annotation identifier */ index, /* position of an annotation in all of the same type*/ ann_length, /* length of the text in an annotation */ n_file_labels, n_file_descs, n_data_labels, n_data_descs; char *ann_buf; /* buffer to hold the read annotation */ /********************** End of variable declaration **********************/ /* * Open the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the AN interface. */ if ((an_id = ANstart(file_id)) == FAIL) printf("*** ERROR from ANstart\n"); /* * Get the annotation information, e.g., the numbers of file labels, file * descriptions, data labels, and data descriptions. */ if (ANfileinfo(an_id, &n_file_labels, &n_file_descs, &n_data_labels, &n_data_descs) == FAIL) printf("*** ERROR from ANfileinfo\n"); /* * Get the data labels. Note that this for loop can be used to * obtain the contents of each kind of annotation with the appropriate * number of annotations and the type of annotation, i.e., replace * n_data_labels with n_file_labels, n_file_descs, or n_data_descs, and * AN_DATA_LABEL with AN_FILE_LABEL, AN_FILE_DESC, or AN_DATA_DESC, * respectively. */ for (index = 0; index < n_data_labels; index++) { /* * Get the identifier of the current data label. */ if ((ann_id = ANselect(an_id, index, AN_DATA_LABEL)) == FAIL) printf("*** ERROR from ANselect\n"); /* * Get the length of the data label. */ ann_length = ANannlen(ann_id); /* * Allocate space for the buffer to hold the data label text. */ ann_buf = malloc((ann_length + 1) * sizeof(char)); /* * Read and display the data label. Note that the size of the buffer, * i.e., the third parameter, is 1 character more than the length of * the data label; that is for the null character. It is not the case * when a description is retrieved because the description does not * necessarily end with a null character. * */ if (ANreadann(ann_id, ann_buf, ann_length + 1) == FAIL) printf("*** ERROR from ANreadann\n"); printf("Data label index: %d\n", index); printf("Data label contents: %s\n", ann_buf); /* * Terminate access to the current data label. */ if (ANendaccess(ann_id) == FAIL) printf("*** ERROR from ANendaccess\n"); /* * Free the space allocated for the annotation buffer. */ free(ann_buf); } /* * Terminate access to the AN interface and close the HDF file. */ if (ANend(an_id) == FAIL) printf("*** ERROR from ANend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/000077500000000000000000000000001503061704500176755ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/General_HDFobjects.hdf000066400000000000000000000007251503061704500237740ustar00rootroot00000000000000Ê\d&e95hni‚:­¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 9-post0, February 25, 2013General HDF objectsThis is an HDF file that contains general HDF objects­Common AN Vgroup­This is a vgroup that is used to test data annotations AN Vgrouphdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/h4ex_AN_create_annotation.ddl000066400000000000000000000007611503061704500253710ustar00rootroot00000000000000File name: h4ex_AN_create_annotation.hdf File Label #0: General HDF objects File description #0: This is an HDF file that contains general HDF objects Vgroup:0 tag = 1965; reference = 2; name = AN Vgroup; class = ; number of entries = 0; number of attributes = 0 Name/Label=Common AN Vgroup Description=This is a vgroup that is used to test data annotations Entries:- None. Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 hdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/h4ex_AN_create_annotation.tst000066400000000000000000000000001503061704500254220ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/h4ex_AN_get_annotation_info.tst000066400000000000000000000003541503061704500257650ustar00rootroot00000000000000List of annotations of type AN_DATA_DESC: Annotation index 0: tag = DFTAG_DIA (data description) reference number= 1 Annotation type of DFTAG_FID (file label) is AN_FILE_LABEL Annotation tag of AN_DATA_LABEL is DFTAG_DIL (data label) hdf4-hdf4.3.1/HDF4Examples/C/AN/testfiles/h4ex_AN_read_annotation.tst000066400000000000000000000000721503061704500251030ustar00rootroot00000000000000Data label index: 0 Data label contents: Common AN Vgroup hdf4-hdf4.3.1/HDF4Examples/C/CMakeLists.txt000066400000000000000000000007151503061704500201400ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_C C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- add_subdirectory (${PROJECT_SOURCE_DIR}/AN) add_subdirectory (${PROJECT_SOURCE_DIR}/GR) add_subdirectory (${PROJECT_SOURCE_DIR}/VD) add_subdirectory (${PROJECT_SOURCE_DIR}/VG) add_subdirectory (${PROJECT_SOURCE_DIR}/SD) hdf4-hdf4.3.1/HDF4Examples/C/GR/000077500000000000000000000000001503061704500157055ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/CMakeLists.txt000066400000000000000000000102551503061704500204500ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_GR C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (C_sourcefiles.cmake) foreach (example_name ${h4examples}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () foreach (example_name ${h4examples_use}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST testname testddl dumparg) add_test ( NAME hdf_${testname}-clearall COMMAND ${CMAKE_COMMAND} -E remove ${testname}.hdf ) add_test ( NAME hdf_${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_OUTPUT=${testname}.out" -D "TEST_REFERENCE=${testname}.tst" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_${testname} PROPERTIES DEPENDS hdf_${testname}-clearall) if (HDF4_BUILD_TOOLS AND ${testddl} STREQUAL "1") add_test ( NAME hdf_HDP-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=${H4EX_HDF4_DUMP_EXECUTABLE}" -D "TEST_ARGS:STRING=${dumparg};${testname}.hdf" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testname}.ddl.out" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=${testname}.ddl" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_HDP-${testname} PROPERTIES DEPENDS hdf_${testname}) endif () endmacro () foreach (example_name ${h4examples}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_GR_TEST_FILES "${testdest}.tst") if (HDF4_BUILD_TOOLS) add_custom_command ( OUTPUT "${testdest}.ddl" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.ddl" "${testdest}.ddl" DEPENDS "${testsrc}.ddl" ) list (APPEND HDF4Examples_GR_TEST_FILES "${testdest}.ddl") endif () endforeach () foreach (example_name ${h4examples_use}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_GR_TEST_FILES "${testdest}.tst") endforeach () foreach (ex_file ${h4examples_files}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/${ex_file}") set (testdest "${PROJECT_BINARY_DIR}/${ex_file}") add_custom_command ( OUTPUT "${testdest}" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}" "${testdest}" DEPENDS "${testsrc}" ) list (APPEND HDF4Examples_GR_TEST_FILES "${testdest}") endforeach () add_custom_target (HDF4Examples_HDF_GR-files ALL COMMENT "Copying files needed by GR tests" DEPENDS ${HDF4Examples_GR_TEST_FILES}) foreach (example_name ${h4examples}) ADD_H4_TEST (h4ex_${example_name} 1 dumpvg) endforeach () foreach (example_name ${h4examples_use}) ADD_H4_TEST (h4ex_${example_name} 0 dumpvg) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/C/GR/C_sourcefiles.cmake000066400000000000000000000011261503061704500214740ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (h4examples GR_create_and_write_chunked_image GR_create_and_write_image GR_write_palette ) set (h4examples_use GR_get_attribute GR_image_info GR_modify_image GR_read_image GR_read_palette GR_set_attribute ) set (h4examples_files General_RImages.hdf General_RImages2.hdf General_RImages3.hdf General_RImages4.hdf Image_with_Palette.hdf ) hdf4-hdf4.3.1/HDF4Examples/C/GR/GR_read_chunks.c000066400000000000000000000050461503061704500207340ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "Image_Chunked.hdf" #define IMAGE_NAME "Image with Chunks" #define X_LENGTH 10 /* number of rows in the image */ #define Y_LENGTH 6 /* number of columns in the image */ #define NCOMPS 3 /* number of components in the image */ int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dims[2], /* dimension sizes of the image array */ start[2], /* start position to read the image array */ edges[2]; /* edges of read array */ int32 image_data[X_LENGTH][Y_LENGTH][NCOMPS]; int ii, jj; /********************** End of variable declaration **********************/ /* * Open the file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_RDONLY, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Open the raster image array. */ ri_id = GRselect(gr_id, 0); /* * Set dimensions of the image. */ dims[0] = X_LENGTH; dims[1] = Y_LENGTH; start[0] = start[1] = 0; edges[0] = dims[0]; edges[1] = dims[1]; /* Read the data in the image array. */ if (GRreadimage(ri_id, start, NULL, edges, (void *)image_data) == FAIL) printf("*** ERROR from GRreadimage\n"); printf("Image Data:\n"); printf("Component 1:\n "); for (ii = 0; ii < X_LENGTH; ii++) { for (jj = 0; jj < Y_LENGTH; jj++) printf("%i ", image_data[ii][jj][0]); printf("\n "); } printf("\nComponent 2:\n "); for (ii = 0; ii < X_LENGTH; ii++) { for (jj = 0; jj < Y_LENGTH; jj++) printf("%i ", image_data[ii][jj][1]); printf("\n "); } printf("\nComponent 3:\n "); for (ii = 0; ii < X_LENGTH; ii++) { for (jj = 0; jj < Y_LENGTH; jj++) printf("%i ", image_data[ii][jj][2]); printf("\n "); } printf("\n"); /* * Terminate access to the raster image and to the GR interface and, * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/GR_write_chunks.c000066400000000000000000000057041503061704500211540ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "Image_Chunked.hdf" #define IMAGE_NAME "Image with Chunks" #define X_LENGTH 10 /* number of rows in the image */ #define Y_LENGTH 6 /* number of columns in the image */ #define NCOMPS 3 /* number of components in the image */ int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dims[2], /* dimension sizes of the image array */ origin[2]; /* origin position to write each chunk */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 chunk00[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; int32 chunk01[] = {210, 211, 212, 220, 221, 222, 230, 231, 232, 240, 241, 242, 250, 251, 252, 260, 261, 262}; int32 chunk14[] = {1010, 1011, 1012, 1020, 1021, 1022, 1030, 1031, 1032, 1040, 1041, 1042, 1050, 1051, 1052, 1060, 1061, 1062}; /********************** End of variable declaration **********************/ /* * Create and open the file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); /* * Set dimensions of the image. */ dims[0] = Y_LENGTH; dims[1] = X_LENGTH; /* * Create the raster image array. */ ri_id = GRcreate(gr_id, IMAGE_NAME, NCOMPS, DFNT_INT32, MFGR_INTERLACE_PIXEL, dims); /* * Define chunked image. */ chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; if (GRsetchunk(ri_id, chunk_def, HDF_CHUNK | HDF_COMP) == FAIL) printf("*** ERROR from GRsetchunk\n"); /* * Write first chunk(0,0). */ origin[0] = 0; origin[1] = 0; if (GRwritechunk(ri_id, origin, (void *)chunk00) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Write second chunk(0,1). */ origin[0] = 0; origin[1] = 1; if (GRwritechunk(ri_id, origin, (void *)chunk01) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Write third chunk(1,4). */ origin[0] = 1; origin[1] = 4; if (GRwritechunk(ri_id, origin, (void *)chunk14) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Terminate access to the raster image and to the GR interface and, * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_create_and_write_chunked_image.c000066400000000000000000000062221503061704500255350ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_GR_create_and_write_chunked_image.hdf" #define IMAGE_NAME "gzip_comp_data" #define X_LENGTH 6 /* number of rows in the image */ #define Y_LENGTH 10 /* number of columns in the image */ #define NCOMPS 3 /* number of components in the image */ int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dims[2], /* dimension sizes of the image array */ start[2]; /* interlace mode of the image */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 chunk00[] = {110, 111, 112, 120, 121, 122, 130, 131, 132, 140, 141, 142, 150, 151, 152, 160, 161, 162}; int32 chunk01[] = {210, 211, 212, 220, 221, 222, 230, 231, 232, 240, 241, 242, 250, 251, 252, 260, 261, 262}; int32 chunk14[] = {1010, 1011, 1012, 1020, 1021, 1022, 1030, 1031, 1032, 1040, 1041, 1042, 1050, 1051, 1052, 1060, 1061, 1062}; /********************** End of variable declaration **********************/ /* * Create and open the file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Set dimensions of the image. */ dims[0] = X_LENGTH; dims[1] = Y_LENGTH; /* * Create the raster image array. */ if ((ri_id = GRcreate(gr_id, IMAGE_NAME, NCOMPS, DFNT_INT32, MFGR_INTERLACE_PIXEL, dims)) == FAIL) printf("*** ERROR from GRcreate\n"); /* * Define chunked image. */ chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; if (GRsetchunk(ri_id, chunk_def, HDF_CHUNK | HDF_COMP) == FAIL) printf("*** ERROR from GRsetchunk\n"); /* * Write first chunk (0,0). */ start[0] = 0; start[1] = 0; if (GRwritechunk(ri_id, start, (void *)chunk00) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Write second chunk (0,1). */ start[0] = 0; start[1] = 1; if (GRwritechunk(ri_id, start, (void *)chunk01) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Write third chunk (1,4). */ start[0] = 1; start[1] = 4; if (GRwritechunk(ri_id, start, (void *)chunk14) == FAIL) printf("*** ERROR from GRwritechunk\n"); /* * Terminate access to the raster image and to the GR interface and, * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_create_and_write_image.c000066400000000000000000000055171503061704500240420ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_GR_create_and_write_image.hdf" #define IMAGE_NAME "Image Array 1" #define X_LENGTH 10 /* number of columns in the image */ #define Y_LENGTH 5 /* number of rows in the image */ #define N_COMPS 2 /* number of components in the image */ int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ start[2], /* start position to write for each dimension */ edges[2], /* number of elements to be written along each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ i, j; int16 image_buf[Y_LENGTH][X_LENGTH][N_COMPS]; /********************** End of variable declaration **********************/ /* * Create and open the file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Set the data type, interlace mode, and dimensions of the image. */ data_type = DFNT_INT16; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = X_LENGTH; dim_sizes[1] = Y_LENGTH; /* * Create the raster image array. */ if ((ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes)) == FAIL) printf("*** ERROR from GRcreate\n"); /* * Fill the image data buffer with values. */ for (i = 0; i < Y_LENGTH; i++) { for (j = 0; j < X_LENGTH; j++) { image_buf[i][j][0] = (i + j) + 1; /* first component */ image_buf[i][j][1] = (i + j) + 1; /* second component */ } } /* * Define the size of the data to be written, i.e., start from the origin * and go as long as the length of each dimension. */ start[0] = start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; /* * Write the data in the buffer into the image array. */ if (GRwriteimage(ri_id, start, NULL, edges, (void *)image_buf) == FAIL) printf("*** ERROR from GRwriteimage\n"); /* * Terminate access to the raster image and to the GR interface and, * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_get_attribute.c000066400000000000000000000121221503061704500222310ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_RImages.hdf" #define RI_ATTR_NAME "Image Attribute 2" int main() { /************************* Variable declaration **************************/ int32 gr_id, ri_id, file_id; int32 f_att_index; /* index of file attributes */ int32 ri_att_index; /* index of raster image attributes */ int32 data_type; /* image data type */ int32 n_values; /* number of values in an attribute */ int32 value_index; /* index of values in an attribute */ int32 n_rimages; /* number of raster images in the file */ int32 n_file_attrs; /* number of file attributes */ char attr_name[H4_MAX_GR_NAME]; /* buffer to hold the attribute name */ void *data_buf = NULL; /* buffer to hold the attribute values */ int16 *int_ptr; /* int16 pointer to point to a void data buffer */ char8 *char_ptr; /* char8 pointer to point to a void data buffer */ /********************** End of variable declaration **********************/ /* * Open the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Determine the number of attributes in the file. */ if (GRfileinfo(gr_id, &n_rimages, &n_file_attrs) == FAIL) printf("*** ERROR from GRfileinfo\n"); else if (n_file_attrs > 0) { for (f_att_index = 0; f_att_index < n_file_attrs; f_att_index++) { /* * Get information about the current file attribute. */ if (GRattrinfo(gr_id, f_att_index, attr_name, &data_type, &n_values) == FAIL) printf("*** ERROR from GRattrinfo\n"); /* * Allocate a buffer to hold the file attribute data. In this example, * knowledge about the data type is assumed to be available from * the previous example for simplicity. In reality, the size * of the type must be determined based on the machine where the * program resides. */ if (data_type == DFNT_CHAR8) { data_buf = malloc(n_values * sizeof(char8)); if (data_buf == NULL) { printf("Unable to allocate space for attribute data.\n"); exit(1); } } else { printf("Unable to determine data type to allocate data buffer.\n"); exit(1); } /* * Read and display the attribute values. */ if (GRgetattr(gr_id, f_att_index, (void *)data_buf) == FAIL) printf("*** ERROR from GRgetattr\n"); char_ptr = (char8 *)data_buf; printf("Attribute %s: ", attr_name); for (value_index = 0; value_index < n_values; value_index++) printf("%c", char_ptr[value_index]); printf("\n"); /* * Free the space allocated for the data buffer. */ free(data_buf); } /* for */ } /* if */ /* * Select the second image in the file. */ if ((ri_id = GRselect(gr_id, 1)) == FAIL) printf("*** ERROR from GRselect\n"); /* * Find the image attribute named RI_ATTR_NAME. */ if ((ri_att_index = GRfindattr(ri_id, RI_ATTR_NAME)) == FAIL) printf("*** ERROR from GRfindattr\n"); /* * Get information about the attribute. */ if (GRattrinfo(ri_id, ri_att_index, attr_name, &data_type, &n_values) == FAIL) printf("*** ERROR from GRattrinfo\n"); /* * Allocate a buffer to hold the file attribute data. As mentioned above, * knowledge about the data type is assumed to be available from * the previous example for simplicity. In reality, the size of the * type must be determined based on the machine where the program resides. */ if (data_type == DFNT_INT16) data_buf = malloc(n_values * sizeof(int16)); /* * Read and display the attribute values. */ if (GRgetattr(ri_id, ri_att_index, (void *)data_buf) == FAIL) printf("*** ERROR from GRgetattr\n"); printf("\nAttribute %s: ", RI_ATTR_NAME); int_ptr = (int16 *)data_buf; for (value_index = 0; value_index < n_values; value_index++) printf("%d ", int_ptr[value_index]); printf("\n"); /* * Free the space allocated for the data buffer. */ free(data_buf); /* * Terminate access to the raster image and to the GR interface, and * close the file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_image_info.c000066400000000000000000000073341503061704500214750ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_RImages3.hdf" int main() { /************************* Variable declaration **************************/ int32 file_id, gr_id, ri_id; int32 n_rimages, /* number of raster images in the file */ n_file_attrs, /* number of file attributes */ ri_index, /* index of a image */ dim_sizes[2], /* dimensions of an image */ n_comps, /* number of components an image contains */ interlace_mode, /* interlace mode of an image */ data_type, /* number type of an image */ n_attrs; /* number of attributes belong to an image */ char name[H4_MAX_GR_NAME], /* name of an image */ *type_string, /* mapped text of a number type */ *interlace_string; /* mapped text of an interlace mode */ /********************** End of variable declaration **********************/ /* * Open the file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Determine the contents of the file. */ if (GRfileinfo(gr_id, &n_rimages, &n_file_attrs) == FAIL) printf("*** ERROR from GRfileinfo\n"); /* * For each image in the file, get and display the image information. */ printf("RI# Name Components Type Interlace \ Dimensions Attributes\n\n"); for (ri_index = 0; ri_index < n_rimages; ri_index++) { ri_id = GRselect(gr_id, ri_index); if (GRgetiminfo(ri_id, name, &n_comps, &data_type, &interlace_mode, dim_sizes, &n_attrs) == FAIL) printf("*** ERROR from GRgetiminfo\n"); /* * Map the number type and interlace mode into text strings for output * readability. Note that, in this example, only two possible types * are considered because of the simplicity of the example. For real * problems, all possible types should be checked and, if reading the * data is desired, the size of the type must be determined based on the * machine where the program resides. */ if (data_type == DFNT_CHAR8) type_string = "Char8"; else if (data_type == DFNT_INT16) type_string = "Int16"; else type_string = "Unknown"; switch (interlace_mode) { case MFGR_INTERLACE_PIXEL: interlace_string = "MFGR_INTERLACE_PIXEL"; break; case MFGR_INTERLACE_LINE: interlace_string = "MFGR_INTERLACE_LINE"; break; case MFGR_INTERLACE_COMPONENT: interlace_string = "MFGR_INTERLACE_COMPONENT"; break; default: interlace_string = "Unknown"; break; } /* switch */ /* * Display the image information for the current raster image. */ printf("%d %s %d %s %s %2d,%2d %d\n", ri_index, name, n_comps, type_string, interlace_string, dim_sizes[0], dim_sizes[1], n_attrs); /* * Terminate access to the current raster image. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); } /* * Terminate access to the GR interface and close the HDF file. */ if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_modify_image.c000066400000000000000000000105531503061704500220260ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_RImages2.hdf" #define X1_LENGTH 5 /* number of columns in the first image being modified */ #define Y1_LENGTH 2 /* number of rows in the first image being modified */ #define N1_COMPS 2 /* number of components in the first image */ #define IMAGE1_NAME "Image Array 1" #define IMAGE2_NAME "Image Array 2" #define X2_LENGTH 6 /* number of columns in the second image */ #define Y2_LENGTH 4 /* number of rows in the second image */ #define N2_COMPS 3 /* number of components in the second image */ int main() { /************************* Variable declaration **************************/ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri1_id, /* raster image identifier */ start1[2], /* start position to write for each dimension */ edges1[2], /* number of elements to be written along each dimension */ ri2_id, /* raster image identifier */ start2[2], /* start position to write for each dimension */ edges2[2], /* number of elements to be written along each dimension */ dims_sizes[2], /* sizes of the two dimensions of the image array */ data_type, /* data type of the image data */ interlace_mode; /* interlace mode of the image */ int16 i, j; /* indices for the dimensions */ int16 image1_buf[Y1_LENGTH][X1_LENGTH][N1_COMPS]; /* data of first image */ char image2_buf[Y2_LENGTH][X2_LENGTH][N2_COMPS]; /* data of second image*/ /********************** End of variable declaration **********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ if ((gr_id = GRstart(file_id)) == FAIL) printf("*** ERROR from GRstart\n"); /* * Select the first raster image in the file. */ ri1_id = GRselect(gr_id, 0); /* * Fill the first image data buffer with values. */ for (i = 0; i < Y1_LENGTH; i++) { for (j = 0; j < X1_LENGTH; j++) { image1_buf[i][j][0] = 0; /* first component */ image1_buf[i][j][1] = 0; /* second component */ } } /* * Define the size of the data to be written, i.e., start from the origin * and go as long as the length of each dimension. */ start1[0] = start1[1] = 0; edges1[0] = X1_LENGTH; edges1[1] = Y1_LENGTH; /* * Write the data in the buffer into the image array. */ if (GRwriteimage(ri1_id, start1, NULL, edges1, (void *)image1_buf) == FAIL) printf("*** ERROR from GRwriteimage\n"); /* * Set the interlace mode and dimensions of the second image. */ data_type = DFNT_CHAR8; interlace_mode = MFGR_INTERLACE_PIXEL; dims_sizes[0] = X2_LENGTH; dims_sizes[1] = Y2_LENGTH; /* * Create the second image in the file. */ ri2_id = GRcreate(gr_id, IMAGE2_NAME, N2_COMPS, data_type, interlace_mode, dims_sizes); /* * Fill the second image data buffer with values. */ for (i = 0; i < Y2_LENGTH; i++) { for (j = 0; j < X2_LENGTH; j++) { image2_buf[i][j][0] = 'A'; /* first component */ image2_buf[i][j][1] = 'B'; /* second component */ image2_buf[i][j][2] = 'C'; /* third component */ } } /* * Define the size of the data to be written, i.e., start from the origin * and go as long as the length of each dimension. */ for (i = 0; i < 2; i++) { start2[i] = 0; edges2[i] = dims_sizes[i]; } /* * Write the data in the buffer into the second image array. */ if (GRwriteimage(ri2_id, start2, NULL, edges2, (void *)image2_buf) == FAIL) printf("*** ERROR from GRwriteimage\n"); /* * Terminate access to the raster images and to the GR interface, and * close the HDF file. */ if (GRendaccess(ri1_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRendaccess(ri2_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_read_image.c000066400000000000000000000105171503061704500214520ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_RImages.hdf" #define N_COMPS 2 #define X_LENGTH 10 /* number of columns of the entire image */ #define Y_LENGTH 5 /* number of rows of the entire image */ #define PART_COLS 2 /* number of columns read for partial image */ #define PART_ROWS 3 /* number of rows read for partial image */ #define SKIP_COLS 5 /* number of columns read for skipped image */ #define SKIP_ROWS 3 /* number of rows read for skipped image */ #define COLS_PART_START 3 /* starting column to read partial image */ #define ROWS_PART_START 1 /* starting row to read partial image */ #define COLS_SKIP_START 1 /* starting column to read skipped image */ #define ROWS_SKIP_START 0 /* starting row to read skipped image */ #define N_STRIDES 2 /* number of elements to skip on each dim. */ int main() { /************************* Variable declaration **************************/ int32 file_id, gr_id, ri_id; int32 start[2]; /* start position to write for each dimension */ int32 edges[2]; /* number of elements to bewritten along each dimension */ int32 stride[2]; /* number of elements to skip on each dimension */ int16 entire_image[Y_LENGTH][X_LENGTH][N_COMPS]; int16 partial_image[PART_ROWS][PART_COLS][N_COMPS]; int16 skipped_image[SKIP_ROWS][SKIP_COLS][N_COMPS]; int32 i, j; /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); /* * Select the first raster image in the file. */ ri_id = GRselect(gr_id, 0); /* * Define the size of the data to be read, i.e., start from the origin * and go as long as the length of each dimension. */ start[0] = start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; /* * Read the data from the raster image array. */ if (GRreadimage(ri_id, start, NULL, edges, (void *)entire_image) == FAIL) printf("*** ERROR from GRreadimage\n"); /* * Display only the first component of the image since the two components * have the same data in this example. */ printf("First component of the entire image:\n"); for (i = 0; i < Y_LENGTH; i++) { for (j = 0; j < X_LENGTH; j++) printf("%d ", entire_image[i][j][0]); printf("\n"); } /* * Define the size of the data to be read. */ start[0] = COLS_PART_START; start[1] = ROWS_PART_START; edges[0] = PART_COLS; edges[1] = PART_ROWS; /* * Read a subset of the raster image array. */ if (GRreadimage(ri_id, start, NULL, edges, (void *)partial_image) == FAIL) printf("*** ERROR from GRreadimage\n"); /* * Display the first component of the read sample. */ printf("\nThree rows & two cols at 2nd row and 4th column"); printf(" of the first component:\n"); for (i = 0; i < PART_ROWS; i++) { for (j = 0; j < PART_COLS; j++) printf("%d ", partial_image[i][j][0]); printf("\n"); } /* * Define the size and the pattern to read the data. */ start[0] = COLS_SKIP_START; start[1] = ROWS_SKIP_START; edges[0] = SKIP_COLS; edges[1] = SKIP_ROWS; stride[0] = stride[1] = N_STRIDES; /* * Read all the odd rows and even columns of the image. */ if (GRreadimage(ri_id, start, stride, edges, (void *)skipped_image) == FAIL) printf("*** ERROR from GRreadimage\n"); /* * Display the first component of the read sample. */ printf("\nAll odd rows and even columns of the first component:\n"); for (i = 0; i < SKIP_ROWS; i++) { for (j = 0; j < SKIP_COLS; j++) printf("%d ", skipped_image[i][j][0]); printf("\n"); } /* * Terminate access to the raster image and to the GR interface, and * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_read_palette.c000066400000000000000000000047431503061704500220320ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "Image_with_Palette.hdf" #define IMAGE_NAME "Image with Palette" #define N_ENTRIES 256 /* number of elements of each color */ int main() { /************************* Variable declaration **************************/ intn i, j; int32 file_id, gr_id, ri_id, pal_id, ri_index; int32 data_type, n_comps, n_entries, interlace_mode; uint8 palette_data[N_ENTRIES][3]; /* static because of fixed size */ /************************* Variable declaration **************************/ /* * Open the file. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initiate the GR interface. */ gr_id = GRstart(file_id); /* * Get the index of the image IMAGR_NAME. */ ri_index = GRnametoindex(gr_id, IMAGE_NAME); /* * Get image identifier. */ ri_id = GRselect(gr_id, ri_index); /* * Get the identifier of the palette attached to the image. */ pal_id = GRgetlutid(ri_id, ri_index); /* * Obtain and display information about the palette. */ if (GRgetlutinfo(pal_id, &n_comps, &data_type, &interlace_mode, &n_entries) == FAIL) printf("*** ERROR from GRgetlutinfo\n"); printf("Palette: %d components; %d entries\n", n_comps, n_entries); /* * Read the palette data. */ if (GRreadlut(pal_id, (void *)palette_data) == FAIL) printf("*** ERROR from GRreadlut\n"); /* * Display the palette data. Recall that HDF supports only 256 colors. * Each color is defined by its 3 components. Therefore, * verifying the value of n_entries and n_comps is not necessary and * the buffer to hold the palette data can be static. However, * if more values or colors are added to the model, these parameters * must be checked to allocate sufficient space when reading a palette. */ printf(" Palette Data: \n"); for (i = 0; i < n_entries; i++) { for (j = 0; j < n_comps; j++) printf("%i ", palette_data[i][j]); printf("\n"); } printf("\n"); /* * Terminate access to the image and to the GR interface, and * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_set_attribute.c000066400000000000000000000047701503061704500222570ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_RImages4.hdf" #define IMAGE_NAME "Image Array 2" #define F_ATT1_NAME "File Attribute 1" #define F_ATT2_NAME "File Attribute 2" #define RI_ATT1_NAME "Image Attribute 1" #define RI_ATT2_NAME "Image Attribute 2" #define F_ATT1_VAL "Contents of First FILE Attribute" #define F_ATT2_VAL "Contents of Second FILE Attribute" #define F_ATT1_N_VALUES 32 #define F_ATT2_N_VALUES 33 #define RI_ATT1_VAL "Contents of IMAGE's First Attribute" #define RI_ATT1_N_VALUES 35 #define RI_ATT2_N_VALUES 6 int main() { /************************* Variable declaration **************************/ int32 gr_id, ri_id, file_id, ri_index; int16 ri_attr_2[RI_ATT2_N_VALUES] = {1, 2, 3, 4, 5, 6}; /********************** End of variable declaration **********************/ /* * Open the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); /* * Set two file attributes to the file with names, data types, numbers of * values, and values of the attributes specified. */ if (GRsetattr(gr_id, F_ATT1_NAME, DFNT_CHAR8, F_ATT1_N_VALUES, (void *)F_ATT1_VAL) == FAIL) printf("*** ERROR from GRsetattr\n"); if (GRsetattr(gr_id, F_ATT2_NAME, DFNT_CHAR8, F_ATT2_N_VALUES, (void *)F_ATT2_VAL) == FAIL) printf("*** ERROR from GRsetattr\n"); /* * Obtain the index of the image named IMAGE_NAME. */ ri_index = GRnametoindex(gr_id, IMAGE_NAME); /* * Obtain the identifier of this image. */ ri_id = GRselect(gr_id, ri_index); /* * Set two attributes to the image with names, data types, numbers of * values, and values of the attributes specified. */ if (GRsetattr(ri_id, RI_ATT1_NAME, DFNT_CHAR8, RI_ATT1_N_VALUES, (void *)RI_ATT1_VAL) == FAIL) printf("*** ERROR from GRsetattr\n"); if (GRsetattr(ri_id, RI_ATT2_NAME, DFNT_INT16, RI_ATT2_N_VALUES, (void *)ri_attr_2) == FAIL) printf("*** ERROR from GRsetattr\n"); /* * Terminate access to the image and to the GR interface, and close the * HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/h4ex_GR_write_palette.c000066400000000000000000000065131503061704500222460ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_GR_write_palette.hdf" #define NEW_IMAGE_NAME "Image with Palette" #define N_COMPS_IMG 2 /* number of image components */ #define X_LENGTH 5 /* number of rows in the image */ #define Y_LENGTH 5 /* number of columns in the image */ #define N_ENTRIES 256 /* number of entries in the palette */ #define N_COMPS_PAL 3 /* number of palette's components */ int main() { /************************* Variable declaration **************************/ intn i, j; int32 file_id, gr_id, ri_id, pal_id, interlace_mode, start[2], /* holds where to start to write for each dimension */ edges[2], /* holds how long to write for each dimension */ dim_sizes[2]; /* sizes of the two dimensions of the image array */ uint8 image_buf[Y_LENGTH][X_LENGTH][N_COMPS_IMG]; /* data of first image */ uint8 palette_buf[N_ENTRIES][N_COMPS_PAL]; /********************** End of variable declaration **********************/ /* * Open the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); /* * Define the dimensions and interlace mode of the image. */ dim_sizes[0] = X_LENGTH; dim_sizes[1] = Y_LENGTH; interlace_mode = MFGR_INTERLACE_PIXEL; /* * Create the image named NEW_IMAGE_NAME. */ ri_id = GRcreate(gr_id, NEW_IMAGE_NAME, N_COMPS_IMG, DFNT_UINT8, interlace_mode, dim_sizes); /* * Fill the image data buffer with values. */ for (i = 0; i < Y_LENGTH; i++) { for (j = 0; j < X_LENGTH; j++) { image_buf[i][j][0] = (i + j) + 1; image_buf[i][j][1] = (i + j) + 2; } } /* * Define the size of the data to be written, i.e., start from the origin * and go as long as the length of each dimension. */ start[0] = start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; /* * Write the data in the buffer into the image array. */ if (GRwriteimage(ri_id, start, NULL, edges, (void *)image_buf) == FAIL) printf("*** ERROR from GRwriteimage\n"); /* * Initialize the palette to grayscale. */ for (i = 0; i < N_ENTRIES; i++) { palette_buf[i][0] = i; palette_buf[i][1] = i; palette_buf[i][2] = i; } /* * Define palette interlace mode. */ interlace_mode = MFGR_INTERLACE_PIXEL; /* * Get the identifier of the palette attached to the image NEW_IMAGE_NAME. */ pal_id = GRgetlutid(ri_id, 0); /* * Write data to the palette. */ if (GRwritelut(pal_id, N_COMPS_PAL, DFNT_UINT8, interlace_mode, N_ENTRIES, (void *)palette_buf) == FAIL) printf("*** ERROR from GRwritelut\n"); /* * Terminate access to the image and to the GR interface, and * close the HDF file. */ if (GRendaccess(ri_id) == FAIL) printf("*** ERROR from GRendaccess\n"); if (GRend(gr_id) == FAIL) printf("*** ERROR from GRend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/000077500000000000000000000000001503061704500177075ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/General_RImages.hdf000066400000000000000000000030771503061704500233650ustar00rootroot00000000000000ãÊ\­).5Èjý,­+­A9.lHj´,¸«I#ªlJ«ë ª÷J«z ªšI HDF Version 4.2 Release 11-post0, February 16, 2015      j,. Image Array 1RI0.0­RIG0.0RIG0.0ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCj,. Image Array 2RI0.0­­RIG0.0RIG0.0,.,. Image Array 2RI0.0Contents of IMAGE's First Attribute#Image Attribute 1 RIATTR0.0N RIATTR0.0C,.,.ª Image Array 2RI0.0Image Attribute 2 RIATTR0.0N RIATTR0.0C,.,.ªª Image Array 2RI0.0Contents of First FILE Attribute File Attribute 1 RIATTR0.0N RIATTR0.0C«©!ªÊIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿContents of Second FILE Attribute!File Attribute 2 RIATTR0.0N RIATTR0.0C­­ªªRIG0.0RIG0.0hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/General_RImages2.hdf000066400000000000000000000030771503061704500234470ustar00rootroot00000000000000ãÊ\­).5Èjý,­+­A9.lHj´,¸«I#ªlJ«ë ª÷J«z ªšI HDF Version 4.2 Release 11-post0, February 16, 2015      j,. Image Array 1RI0.0­RIG0.0RIG0.0ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCj,. Image Array 2RI0.0­­RIG0.0RIG0.0,.,. Image Array 2RI0.0Contents of IMAGE's First Attribute#Image Attribute 1 RIATTR0.0N RIATTR0.0C,.,.ª Image Array 2RI0.0Image Attribute 2 RIATTR0.0N RIATTR0.0C,.,.ªª Image Array 2RI0.0Contents of First FILE Attribute File Attribute 1 RIATTR0.0N RIATTR0.0C«©!ªÊIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿContents of Second FILE Attribute!File Attribute 2 RIATTR0.0N RIATTR0.0C­­ªªRIG0.0RIG0.0hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/General_RImages3.hdf000066400000000000000000000030771503061704500234500ustar00rootroot00000000000000ãÊ\­).5Èjý,­+­A9.lHj´,¸«I#ªlJ«ë ª÷J«z ªšI HDF Version 4.2 Release 11-post0, February 16, 2015      j,. Image Array 1RI0.0­RIG0.0RIG0.0ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCj,. Image Array 2RI0.0­­RIG0.0RIG0.0,.,. Image Array 2RI0.0Contents of IMAGE's First Attribute#Image Attribute 1 RIATTR0.0N RIATTR0.0C,.,.ª Image Array 2RI0.0Image Attribute 2 RIATTR0.0N RIATTR0.0C,.,.ªª Image Array 2RI0.0Contents of First FILE Attribute File Attribute 1 RIATTR0.0N RIATTR0.0C«©!ªÊIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿContents of Second FILE Attribute!File Attribute 2 RIATTR0.0N RIATTR0.0C­­ªªRIG0.0RIG0.0hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/General_RImages4.hdf000066400000000000000000000030771503061704500234510ustar00rootroot00000000000000ãÊ\­).5Èjý,­+­A9.lHj´,¸«I#ªlJ«ë ª÷J«z ªšI HDF Version 4.2 Release 11-post0, February 16, 2015      j,. Image Array 1RI0.0­RIG0.0RIG0.0ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCj,. Image Array 2RI0.0­­RIG0.0RIG0.0,.,. Image Array 2RI0.0Contents of IMAGE's First Attribute#Image Attribute 1 RIATTR0.0N RIATTR0.0C,.,.ª Image Array 2RI0.0Image Attribute 2 RIATTR0.0N RIATTR0.0C,.,.ªª Image Array 2RI0.0Contents of First FILE Attribute File Attribute 1 RIATTR0.0N RIATTR0.0C«©!ªÊIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿContents of Second FILE Attribute!File Attribute 2 RIATTR0.0N RIATTR0.0C­­ªªRIG0.0RIG0.0hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/Image_with_Palette.hdf000066400000000000000000000023551503061704500241320ustar00rootroot00000000000000Ê\­—6.52-gjgjk3o,ƒ­Íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015    !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸ   ¡¡¡¢¢¢£££¤¤¤¥¥¥¦¦¦§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®¯¯¯°°°±±±²²²³³³´´´µµµ¶¶¶···¸¸¸¹¹¹ººº»»»¼¼¼½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÏÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕÖÖÖ×××ØØØÙÙÙÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäääåååæææçççèèèéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿjj,.3-Image with PaletteRI0.0­RIG0.0RIG0.0hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_create_and_write_chunked_image.ddl000066400000000000000000000014231503061704500300560ustar00rootroot00000000000000File name: h4ex_GR_create_and_write_chunked_image.hdf Vgroup:0 tag = 1965; reference = 2; name = gzip_comp_data; class = RI0.0; number of entries = 2; number of attributes = 0 Entries:- #0 (Image Dimensions) tag = 300; reference = 1; #1 (Raster Image Data) tag = 302; reference = 1; Vgroup:1 tag = 1965; reference = 4; name = RIG0.0; class = RIG0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 2; name = gzip_comp_data; class = RI0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Image Dimensions -- Raster Image Data vg1 -- vg0 -- Image Dimensions -- Raster Image Data hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_create_and_write_chunked_image.tst000066400000000000000000000000001503061704500301130ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_create_and_write_image.ddl000066400000000000000000000014111503061704500263520ustar00rootroot00000000000000File name: h4ex_GR_create_and_write_image.hdf Vgroup:0 tag = 1965; reference = 2; name = Image Array 1; class = RI0.0; number of entries = 2; number of attributes = 0 Entries:- #0 (Image Dimensions) tag = 300; reference = 1; #1 (Raster Image Data) tag = 302; reference = 1; Vgroup:1 tag = 1965; reference = 3; name = RIG0.0; class = RIG0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 2; name = Image Array 1; class = RI0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Image Dimensions -- Raster Image Data vg1 -- vg0 -- Image Dimensions -- Raster Image Data hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_create_and_write_image.tst000066400000000000000000000000001503061704500264120ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_get_attribute.tst000066400000000000000000000002461503061704500246270ustar00rootroot00000000000000Attribute File Attribute 1: Contents of First FILE Attribute Attribute File Attribute 2: Contents of Second FILE Attribute Attribute Image Attribute 2: 1 2 3 4 5 6 hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_image_info.tst000066400000000000000000000003631503061704500240620ustar00rootroot00000000000000RI# Name Components Type Interlace Dimensions Attributes 0 Image Array 1 2 Int16 MFGR_INTERLACE_PIXEL 10, 5 0 1 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 2 hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_modify_image.tst000066400000000000000000000000001503061704500244020ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_read_image.tst000066400000000000000000000005231503061704500240400ustar00rootroot00000000000000First component of the entire image: 0 0 0 0 0 6 7 8 9 10 0 0 0 0 0 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 Three rows & two cols at 2nd row and 4th column of the first component: 0 0 6 7 7 8 All odd rows and even columns of the first component: 0 0 6 8 10 4 6 8 10 12 6 8 10 12 14 hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_read_palette.tst000066400000000000000000000057531503061704500244260ustar00rootroot00000000000000Palette: 3 components; 256 entries Palette Data: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 36 36 36 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 48 48 48 49 49 49 50 50 50 51 51 51 52 52 52 53 53 53 54 54 54 55 55 55 56 56 56 57 57 57 58 58 58 59 59 59 60 60 60 61 61 61 62 62 62 63 63 63 64 64 64 65 65 65 66 66 66 67 67 67 68 68 68 69 69 69 70 70 70 71 71 71 72 72 72 73 73 73 74 74 74 75 75 75 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 86 86 86 87 87 87 88 88 88 89 89 89 90 90 90 91 91 91 92 92 92 93 93 93 94 94 94 95 95 95 96 96 96 97 97 97 98 98 98 99 99 99 100 100 100 101 101 101 102 102 102 103 103 103 104 104 104 105 105 105 106 106 106 107 107 107 108 108 108 109 109 109 110 110 110 111 111 111 112 112 112 113 113 113 114 114 114 115 115 115 116 116 116 117 117 117 118 118 118 119 119 119 120 120 120 121 121 121 122 122 122 123 123 123 124 124 124 125 125 125 126 126 126 127 127 127 128 128 128 129 129 129 130 130 130 131 131 131 132 132 132 133 133 133 134 134 134 135 135 135 136 136 136 137 137 137 138 138 138 139 139 139 140 140 140 141 141 141 142 142 142 143 143 143 144 144 144 145 145 145 146 146 146 147 147 147 148 148 148 149 149 149 150 150 150 151 151 151 152 152 152 153 153 153 154 154 154 155 155 155 156 156 156 157 157 157 158 158 158 159 159 159 160 160 160 161 161 161 162 162 162 163 163 163 164 164 164 165 165 165 166 166 166 167 167 167 168 168 168 169 169 169 170 170 170 171 171 171 172 172 172 173 173 173 174 174 174 175 175 175 176 176 176 177 177 177 178 178 178 179 179 179 180 180 180 181 181 181 182 182 182 183 183 183 184 184 184 185 185 185 186 186 186 187 187 187 188 188 188 189 189 189 190 190 190 191 191 191 192 192 192 193 193 193 194 194 194 195 195 195 196 196 196 197 197 197 198 198 198 199 199 199 200 200 200 201 201 201 202 202 202 203 203 203 204 204 204 205 205 205 206 206 206 207 207 207 208 208 208 209 209 209 210 210 210 211 211 211 212 212 212 213 213 213 214 214 214 215 215 215 216 216 216 217 217 217 218 218 218 219 219 219 220 220 220 221 221 221 222 222 222 223 223 223 224 224 224 225 225 225 226 226 226 227 227 227 228 228 228 229 229 229 230 230 230 231 231 231 232 232 232 233 233 233 234 234 234 235 235 235 236 236 236 237 237 237 238 238 238 239 239 239 240 240 240 241 241 241 242 242 242 243 243 243 244 244 244 245 245 245 246 246 246 247 247 247 248 248 248 249 249 249 250 250 250 251 251 251 252 252 252 253 253 253 254 254 254 255 255 255 hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_set_attribute.tst000066400000000000000000000000001503061704500246270ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_write_palette.ddl000066400000000000000000000017161503061704500245710ustar00rootroot00000000000000File name: h4ex_GR_write_palette.hdf Vgroup:0 tag = 1965; reference = 2; name = Image with Palette; class = RI0.0; number of entries = 4; number of attributes = 0 Entries:- #0 (Image Dimensions) tag = 300; reference = 1; #1 (Raster Image Data) tag = 302; reference = 1; #2 (Palette Dimension) tag = 307; reference = 1; #3 (Image Palette) tag = 301; reference = 1; Vgroup:1 tag = 1965; reference = 3; name = RIG0.0; class = RIG0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 4; name = Image with Palette; class = RI0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Image Dimensions -- Raster Image Data -- Palette Dimension -- Image Palette vg1 -- vg0 -- Image Dimensions -- Raster Image Data -- Palette Dimension -- Image Palette hdf4-hdf4.3.1/HDF4Examples/C/GR/testfiles/h4ex_GR_write_palette.tst000066400000000000000000000000001503061704500246210ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/Makefile.am000066400000000000000000000102121503061704500174250ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am DEFINES=-DNDEBUG -DHDF ############################################################################# ## Programs to build ## ############################################################################# TEST_PROG = h4ex_VD_create_vdatas h4ex_VD_write_mixed_vdata \ h4ex_VD_write_mixed_vdata_struct h4ex_VD_write_to_vdata \ h4ex_VD_read_from_vdata h4ex_VD_read_mixed_vdata \ h4ex_VD_set_get_vdata_attr h4ex_VD_create_onefield_vdatas \ h4ex_VD_get_vdata_info h4ex_VD_locate_vdata h4ex_VG_create_vgroup \ h4ex_VG_add_sds_to_vgroup h4ex_VG_insert_vdatas_to_vgroup \ h4ex_VG_set_get_vgroup_attr h4ex_VG_vgroup_contents \ h4ex_VG_get_vgroup_info h4ex_GR_create_and_write_image \ h4ex_GR_modify_image h4ex_GR_set_attribute h4ex_GR_get_attribute \ h4ex_GR_write_palette h4ex_GR_image_info h4ex_GR_read_image \ h4ex_AN_create_annotation h4ex_AN_get_annotation_info h4ex_AN_read_annotation # These are the C example files to be installed INSTALL_FILES= h4ex_VD_create_vdatas.c h4ex_VD_write_mixed_vdata.c \ h4ex_VD_write_mixed_vdata_struct.c h4ex_VD_write_to_vdata.c \ h4ex_VD_read_from_vdata.c h4ex_VD_read_mixed_vdata.c \ h4ex_VD_set_get_vdata_attr.c h4ex_VD_create_onefield_vdatas.c \ h4ex_VD_get_vdata_info.c h4ex_VD_locate_vdata.c h4ex_VG_create_vgroup.c \ h4ex_VG_add_sds_to_vgroup.c h4ex_VG_insert_vdatas_to_vgroup.c \ h4ex_VG_set_get_vgroup_attr.c h4ex_VG_vgroup_contents.c \ h4ex_VG_get_vgroup_info.c h4ex_GR_create_and_write_image.c \ h4ex_GR_modify_image.c h4ex_GR_set_attribute.c h4ex_GR_get_attribute.c \ h4ex_GR_write_palette.c h4ex_GR_image_info.c h4ex_GR_read_image.c \ h4ex_AN_create_annotation.c h4ex_AN_get_annotation_info.c h4ex_AN_read_annotation.c # Where to install example files EXAMPLEDIR=$(prefix)/HDF4Examples/C # How to build C programs using h4cc $(EXTRA_PROG): $(H4CC) $(H4CC) $(H4CCFLAGS) $(CFLAGS) -o $@ $(srcdir)/$@.c; # List dependencies for each program. Normally, automake would take # care of this for us, but if we tell automake about the programs it # will try to build them with the normal C compiler, not h4cc. # C Programs h4ex_VD_read_from_vdata: $(srcdir)/h4ex_VD_read_from_vdata.c h4ex_VD_read_mixed_vdata: $(srcdir)/h4ex_VD_read_mixed_vdata.c h4ex_VD_set_get_vdata_attr: $(srcdir)/h4ex_VD_set_get_vdata_attr.c h4ex_VD_write_mixed_vdata: $(srcdir)/h4ex_VD_write_mixed_vdata.c h4ex_VD_write_mixed_vdata_struct: $(srcdir)/h4ex_VD_write_mixed_vdata_struct.c h4ex_VD_write_to_vdata: $(srcdir)/h4ex_VD_write_to_vdata.c h4ex_VD_create_onefield_vdatas: $(srcdir)/h4ex_VD_create_onefield_vdatas.c h4ex_VD_create_vdatas: $(srcdir)/h4ex_VD_create_vdatas.c h4ex_VD_get_vdata_info: $(srcdir)/h4ex_VD_get_vdata_info.c h4ex_VD_locate_vdata: $(srcdir)/h4ex_VD_locate_vdata.c h4ex_VG_insert_vdatas_to_vgroup: $(srcdir)/h4ex_VG_insert_vdatas_to_vgroup.c h4ex_VG_set_get_vgroup_attr: $(srcdir)/h4ex_VG_set_get_vgroup_attr.c h4ex_VG_vgroup_contents: $(srcdir)/h4ex_VG_vgroup_contents.c h4ex_VG_add_sds_to_vgroup: $(srcdir)/h4ex_VG_add_sds_to_vgroup.c h4ex_VG_create_vgroup: $(srcdir)/h4ex_VG_create_vgroup.c h4ex_VG_get_vgroup_info: $(srcdir)/h4ex_VG_get_vgroup_info.c h4ex_GR_create_and_write_image: $(srcdir)/h4ex_GR_create_and_write_image.c h4ex_GR_get_attribute: $(srcdir)/h4ex_GR_get_attribute.c h4ex_GR_image_info: $(srcdir)/h4ex_GR_image_info.c h4ex_GR_modify_image: $(srcdir)/h4ex_GR_modify_image.c h4ex_GR_read_image: $(srcdir)/h4ex_GR_read_image.c h4ex_GR_read_palette: $(srcdir)/h4ex_GR_read_palette.c h4ex_GR_set_attribute: $(srcdir)/h4ex_GR_set_attribute.c h4ex_GR_write_palette: $(srcdir)/h4ex_GR_write_palette.c h4ex_AN_create_annotation: $(srcdir)/h4ex_AN_create_annotation.c h4ex_N_get_annotation_info: $(srcdir)/h4ex_AN_get_annotation_info.c h4ex_AN_read_annotation: $(srcdir)/h4ex_AN_read_annotation.c include $(top_srcdir)/config/examples.am include $(top_srcdir)/config/conclude.am DISTCLEANFILES = *.chkexe *.chklog hdf4-hdf4.3.1/HDF4Examples/C/SD/000077500000000000000000000000001503061704500157035ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/SD/CMakeLists.txt000066400000000000000000000036521503061704500204510ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_SD C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (C_sourcefiles.cmake) if (H4EX_BUILD_TESTING) # Remove any output file left over from previous test run add_test ( NAME MFHDF_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove SDS.hdf SDSchunked.hdf SDScompressed.hdf SDSUNLIMITED.hdf SLABS.hdf ExternalSDS ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (MFHDF_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (MFHDF_EXAMPLES-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "MFHDF_EXAMPLES-clearall-objects") endif () foreach (example_name ${examples}) add_executable (mf_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (mf_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME mftest_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${example_name}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (mftest_${example_name} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (mftest_${example_name} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "mftest_${example_name}") endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/C/SD/C_sourcefiles.cmake000066400000000000000000000010441503061704500214710ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples SD_create_sds SD_write_to_sds SD_write_slab SD_alter_sds_values SD_unlimited_sds SD_compress_sds SD_mv_sds_to_external SD_read_from_sds SD_read_subsets SD_get_info SD_find_sds_by_name SD_set_get_dim_info SD_dimscale_vs_sds SD_set_attr SD_get_attr SD_chunking_example ) hdf4-hdf4.3.1/HDF4Examples/C/SD/Makefile.am000066400000000000000000000052131503061704500177400ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am DEFINES=-DNDEBUG -DHDF ############################################################################# ## Programs to build ## ############################################################################# TEST_PROG = h4ex_SD_create_sds h4ex_SD_write_to_sds h4ex_SD_write_slab \ h4ex_SD_alter_sds_values h4ex_SD_unlimited_sds h4ex_SD_compress_sds \ h4ex_SD_mv_sds_to_external h4ex_SD_read_from_sds h4ex_SD_read_subsets \ h4ex_SD_get_info h4ex_SD_find_sds_by_name h4ex_SD_set_get_dim_info \ h4ex_SD_dimscale_vs_sds h4ex_SD_set_attr h4ex_SD_get_attr h4ex_SD_chunking_example INSTALL_FILES = h4ex_SD_create_sds.c h4ex_SD_write_to_sds.c h4ex_SD_write_slab.c \ h4ex_SD_alter_sds_values.c h4ex_SD_unlimited_sds.c h4ex_SD_compress_sds.c \ h4ex_SD_mv_sds_to_external.c h4ex_SD_read_from_sds.c h4ex_SD_read_subsets.c \ h4ex_SD_get_info.c h4ex_SD_find_sds_by_name.c h4ex_SD_set_get_dim_info.c \ h4ex_SD_dimscale_vs_sds.c h4ex_SD_set_attr.c h4ex_SD_get_attr.c h4ex_SD_chunking_example.c EXAMPLEDIR=$(prefix)/examples/c # How to build programs using h4cc $(EXTRA_PROG): $(H4CC) $(H4CC) $(H4CCFLAGS) $(CFLAGS) -o $@ $(srcdir)/$@.c; # List dependencies for each program. Normally, automake would take # care of this for us, but if we tell automake about the programs it # will try to build them with the normal C++ compiler, not h4cc. This is # an inelegant way of solving the problem, unfortunately. create_sds: $(srcdir)/h4ex_SD_create_sds.c write_to_sds: $(srcdir)/h4ex_SD_write_to_sds.c write_slab: $(srcdir)/h4ex_SD_write_slab.c alter_sds_values: $(srcdir)/h4ex_SD_alter_sds_values.c unlimited_sds: $(srcdir)/h4ex_SD_unlimited_sds.c compress_sds: $(srcdir)/h4ex_SD_compress_sds.c mv_sds_to_external: $(srcdir)/h4ex_SD_mv_sds_to_external.c read_from_sds: $(srcdir)/h4ex_SD_read_from_sds.c read_subsets: $(srcdir)/h4ex_SD_read_subsets.c get_info: $(srcdir)/h4ex_SD_get_info.c find_sds_by_name: $(srcdir)/h4ex_SD_find_sds_by_name.c set_get_dim_info: $(srcdir)/h4ex_SD_set_get_dim_info.c dimscale_vs_sds: $(srcdir)/h4ex_SD_dimscale_vs_sds.c set_attr: $(srcdir)/h4ex_SD_set_attr.c get_attr: $(srcdir)/h4ex_SD_get_attr.c chunking_example: $(srcdir)/h4ex_SD_chunking_example.c include $(top_srcdir)/config/examples.am include $(top_srcdir)/config/conclude.am DISTCLEANFILES = *.chklog *.chkexe ExternalSDS .deps hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_alter_sds_values.c000066400000000000000000000030511503061704500227230ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 start[2], edges[2]; int32 new_data[2]; /********************* End of variable declaration ***********************/ /* * Open the file and initialize the SD interface with write access. */ if ((sd_id = SDstart(FILE_NAME, DFACC_WRITE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Set up the start and edge parameters to write new element values * into 10th row, 2nd column place, and 11th row, 2nd column place. */ start[0] = 9; /* starting at 10th row */ start[1] = 1; /* starting at 2nd column */ edges[0] = 2; /* rows 10th and 11th */ edges[1] = 1; /* column 2nd only */ /* * Initialize buffer with the new values to be written. */ new_data[0] = new_data[1] = 1000; /* * Write the new values. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)new_data) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_chunking_example.c000077500000000000000000000210511503061704500227100ustar00rootroot00000000000000#include "mfhdf.h" #define FILE_NAME "SDSchunked.hdf" #define SDS_NAME "ChunkedData" #define RANK 2 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 flag, maxcache; int32 dim_sizes[2], origin[2]; HDF_CHUNK_DEF c_def, c_def_out; /* Chunking definitions */ int32 comp_flag, c_flags; int16 all_data[9][4]; int32 start[2], edges[2]; int16 chunk_out[3][2]; int16 row[2] = {5, 5}; int16 column[3] = {4, 4, 4}; int16 fill_value = 0; /* Fill value */ int i, j; /* * Declare chunks data type and initialize some of them. */ int16 chunk1[3][2] = {{1, 1}, {1, 1}, {1, 1}}; int16 chunk2[3][2] = {{2, 2}, {2, 2}, {2, 2}}; int16 chunk3[3][2] = {{3, 3}, {3, 3}, {3, 3}}; int16 chunk6[3][2] = {{6, 6}, {6, 6}, {6, 6}}; /********************* End of variable declaration ***********************/ /* * Define chunk's dimensions. * * In this example we do not use compression. * To use chunking with RLE, Skipping Huffman, and GZIP * compression, initialize * * c_def.comp.chunk_lengths[0] = 3; * c_def.comp.chunk_lengths[1] = 2; * * To use chunking with NBIT, initialize * * c_def.nbit.chunk_lengths[0] = 3; * c_def.nbit.chunk_lengths[1] = 2; * */ c_def.chunk_lengths[0] = 3; c_def.chunk_lengths[1] = 2; /* * Create the file and initialize SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_CREATE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Create 9x4 SDS. */ dim_sizes[0] = 9; dim_sizes[1] = 4; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT16, RANK, dim_sizes); /* * Fill the SDS array with the fill value. */ if (SDsetfillvalue(sds_id, (void *)&fill_value) == FAIL) printf("*** ERROR from SDsetfillvalue\n"); /* * Create chunked SDS. * In this example we do not use compression ( third * parameter of SDsetchunk is set to HDF_CHUNK). * * To use RLE compression, set compression type and flag * * c_def.comp.comp_type = COMP_CODE_RLE; * comp_flag = HDF_CHUNK | HDF_COMP; * * To use Skipping Huffman compression, set compression type, flag * and skipping size skp_size * * c_def.comp.comp_type = COMP_CODE_SKPHUFF; * c_def.comp.cinfo.skphuff.skp_size = value; * comp_flag = HDF_CHUNK | HDF_COMP; * * To use GZIP compression, set compression type, flag and * deflate level * * c_def.comp.comp_type = COMP_CODE_DEFLATE; * c_def.comp.cinfo.deflate.level = value; * comp_flag = HDF_CHUNK | HDF_COMP; * * To use NBIT compression, set compression flag and * compression parameters * * comp_flag = HDF_CHUNK | HDF_NBIT; * c_def.nbit.start_bit = value1; * c_def.nbit.bit_len = value2; * c_def.nbit.sign_ext = value3; * c_def.nbit.fill_one = value4; */ comp_flag = HDF_CHUNK; if (SDsetchunk(sds_id, c_def, comp_flag) == FAIL) printf("*** ERROR from SDsetchunk\n"); /* * Set chunk cache to hold maximum of 3 chunks. */ maxcache = 3; flag = 0; SDsetchunkcache(sds_id, maxcache, flag); /* * Write chunks using SDwritechunk function. * Chunks can be written in any order. */ /* * Write the chunk with the coordinates (0,0). */ origin[0] = 0; origin[1] = 0; if (SDwritechunk(sds_id, origin, (void *)chunk1) == FAIL) printf("*** ERROR from SDwritechunk\n"); /* * Write the chunk with the coordinates (1,0). */ origin[0] = 1; origin[1] = 0; if (SDwritechunk(sds_id, origin, (void *)chunk3) == FAIL) printf("*** ERROR from SDwritechunk\n"); /* * Write the chunk with the coordinates (0,1). */ origin[0] = 0; origin[1] = 1; if (SDwritechunk(sds_id, origin, (void *)chunk2) == FAIL) printf("*** ERROR from SDwritechunk\n"); /* * Write chunk with the coordinates (1,2) using * SDwritedata function. */ start[0] = 6; start[1] = 2; edges[0] = 3; edges[1] = 2; if (SDwritedata(sds_id, start, NULL, edges, (void *)chunk6) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Fill second column in the chunk with the coordinates (1,1) * using SDwritedata function. */ start[0] = 3; start[1] = 3; edges[0] = 3; edges[1] = 1; if (SDwritedata(sds_id, start, NULL, edges, (void *)column) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Fill second row in the chunk with the coordinates (0,2) * using SDwritedata function. */ start[0] = 7; start[1] = 0; edges[0] = 1; edges[1] = 2; if (SDwritedata(sds_id, start, NULL, edges, (void *)row) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); /* * Reopen the file and access the first data set. */ sd_id = SDstart(FILE_NAME, DFACC_READ); sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Get information about the SDS. Only chunk lengths and compression * flag can be returned. Compression information is not available if * NBIT, Skipping Huffman, or GZIP compression is used. */ if (SDgetchunkinfo(sds_id, &c_def_out, &c_flags) == FAIL) printf("*** ERROR from SDgetchunkinfo\n"); if (c_flags == HDF_CHUNK) printf(" SDS is chunked\nChunk's dimensions %dx%d\n", c_def_out.chunk_lengths[0], c_def_out.chunk_lengths[1]); else if (c_flags == (HDF_CHUNK | HDF_COMP)) printf("SDS is chunked and compressed\nChunk's dimensions %dx%d\n", c_def_out.comp.chunk_lengths[0], c_def_out.comp.chunk_lengths[1]); else if (c_flags == (HDF_CHUNK | HDF_NBIT)) printf("SDS is chunked (NBIT)\nChunk's dimensions %dx%d\n", c_def_out.nbit.chunk_lengths[0], c_def_out.nbit.chunk_lengths[1]); /* * Read the entire data set using SDreaddata function. */ start[0] = 0; start[1] = 0; edges[0] = 9; edges[1] = 4; if (SDreaddata(sds_id, start, NULL, edges, (void *)all_data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print out what we have read. * The following information should be displayed: * * SDS is chunked * Chunk's dimensions 3x2 * 1 1 2 * 1 1 2 2 * 1 1 2 2 * 3 3 0 4 * 3 3 0 4 * 3 3 0 4 * 0 0 6 6 * 5 5 6 6 * 0 0 6 6 */ for (j = 0; j < 9; j++) { for (i = 0; i < 4; i++) printf(" %d", all_data[j][i]); printf("\n"); } /* * Read chunk with the coordinates (2,0) and display it. */ origin[0] = 2; origin[1] = 0; if (SDreadchunk(sds_id, origin, chunk_out) == FAIL) printf("*** ERROR from SDreadchunk\n"); printf(" Chunk (2,0) \n"); for (j = 0; j < 3; j++) { for (i = 0; i < 2; i++) printf(" %d", chunk_out[j][i]); printf("\n"); } /* * Read chunk with the coordinates (1,1) and display it. */ origin[0] = 1; origin[1] = 1; if (SDreadchunk(sds_id, origin, chunk_out) == FAIL) printf("*** ERROR from SDreadchunk\n"); printf(" Chunk (1,1) \n"); for (j = 0; j < 3; j++) { for (i = 0; i < 2; i++) printf(" %d", chunk_out[j][i]); printf("\n"); } /* The following information is displayed: * * Chunk (2,0) * 0 0 * 5 5 * 0 0 * Chunk (1,1) * 0 4 * 0 4 * 0 4 */ /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_compress_sds.c000066400000000000000000000050661503061704500221000ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDScompressed.hdf" #define SDS_NAME "SDSgzip" #define X_LENGTH 5 #define Y_LENGTH 16 #define RANK 2 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; int32 comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 start[2], edges[2], dim_sizes[2]; int32 data[Y_LENGTH][X_LENGTH]; int i, j; /********************* End of variable declaration ***********************/ /* * Buffer array data and define array dimensions. */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* * Create the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_CREATE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Create the data set with the name defined in SDS_NAME. */ sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); /* * Ininitialize compression structure element and compression * flag for GZIP compression and call SDsetcompress. * * To use the Skipping Huffman compression method, initialize * comp_type = COMP_CODE_SKPHUFF * c_info.skphuff.skp_size = value * * To use the RLE compression method, initialize * comp_type = COMP_CODE_RLE * No structure element needs to be initialized. */ comp_type = COMP_CODE_DEFLATE; c_info.deflate.level = 6; if (SDsetcompress(sds_id, comp_type, &c_info) == FAIL) printf("*** ERROR from SDsetcompress\n"); /* * Define the location and size of the data set * to be written to the file. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* * Write the stored data to the data set. The last argument * must be explicitly cast to a generic pointer since SDwritedata * is designed to write generic data. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_create_sds.c000066400000000000000000000026441503061704500215070ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define SDS_NAME "SDStemplate" #define X_LENGTH 5 #define Y_LENGTH 16 #define RANK 2 /* Number of dimensions of the SDS */ int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; /* SD interface and data set identifiers */ int32 dim_sizes[2]; /* sizes of the SDS dimensions */ /********************* End of variable declaration ***********************/ /* * Create the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_CREATE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Define the dimensions of the array to be created. */ dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* * Create the data set with the name defined in SDS_NAME. Note that * DFNT_INT32 indicates that the SDS data is of type int32. Refer to * Table 2F, "Standard HDF Data Types and Flags," for definitions of * other types. */ sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_dimscale_vs_sds.c000066400000000000000000000035511503061704500225330ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 rank, data_type, dim_sizes[H4_MAX_VAR_DIMS]; int32 n_datasets, n_file_attr, n_attrs; char sds_name[H4_MAX_NC_NAME]; /********************* End of variable declaration ***********************/ /* * Open the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Obtain information about the file. */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attr) == FAIL) printf("*** ERROR from SDfileinfo\n"); /* Get information about each SDS in the file. * Check whether it is a coordinate variable, then display retrieved * information. * Output displayed: * * SDS array with the name SDStemplate * Coordinate variable with the name Y_Axis * Coordinate variable with the name X_Axis * */ for (sds_index = 0; sds_index < n_datasets; sds_index++) { sds_id = SDselect(sd_id, sds_index); if (SDgetinfo(sds_id, sds_name, &rank, dim_sizes, &data_type, &n_attrs) == FAIL) printf("*** ERROR from SDgetinfo\n"); if (SDiscoordvar(sds_id)) printf(" Coordinate variable with the name %s\n", sds_name); else printf(" SDS array with the name %s\n", sds_name); /* * Terminate access to the selected data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); } /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_find_sds_by_name.c000066400000000000000000000042421503061704500226520ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define SDS_NAME "SDStemplate" #define WRONG_NAME "WrongName" #define X_LENGTH 5 #define Y_LENGTH 16 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 start[2], edges[2]; int32 data[Y_LENGTH][X_LENGTH]; int j; /********************* End of variable declaration ***********************/ /* * Open the file for reading and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Find index of the data set with the name specified in WRONG_NAME. * Error condition occurs, since the data set with that name does not exist * in the file. */ sds_index = SDnametoindex(sd_id, WRONG_NAME); if (sds_index == FAIL) printf("Data set with the name \"WrongName\" does not exist\n"); /* * Find index of the data set with the name specified in SDS_NAME and use * the index to select the data set. */ sds_index = SDnametoindex(sd_id, SDS_NAME); sds_id = SDselect(sd_id, sds_index); /* * Set elements of the array start to 0, elements of the array edges to * SDS dimensions, and use NULL for stride argument in SDreaddata to read * the entire data. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* * Read the entire data into the buffer named data. */ if (SDreaddata(sds_id, start, NULL, edges, (void *)data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print 10th row; the following numbers should be displayed: * * 10 1000 12 13 14 */ for (j = 0; j < X_LENGTH; j++) printf("%d ", data[9][j]); printf("\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_get_attr.c000066400000000000000000000112261503061704500212000ustar00rootroot00000000000000#include #include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define FILE_ATTR_NAME "File_contents" #define SDS_ATTR_NAME "Valid_range" #define DIM_ATTR_NAME "Dim_metric" int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, dim_id; int32 attr_index, data_type, n_values; char attr_name[H4_MAX_NC_NAME]; int i; /********************* End of variable declaration ***********************/ /* * Open the file and initialize SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Find the file attribute defined by FILE_ATTR_NAME. */ attr_index = SDfindattr(sd_id, FILE_ATTR_NAME); /* * Get information about the file attribute. Note that the first * parameter is an SD interface identifier. */ if (SDattrinfo(sd_id, attr_index, attr_name, &data_type, &n_values) == FAIL) printf("*** ERROR from SDattrinfo\n"); /* The data type should be DFNT_CHAR, from SD_set_attr.c */ if (data_type == DFNT_CHAR) { char *fileattr_data; /* * Allocate a buffer to hold the attribute data. */ fileattr_data = (char *)malloc((n_values + 1) * DFKNTsize(data_type)); /* * Read the file attribute data. */ if (SDreadattr(sd_id, attr_index, fileattr_data) == FAIL) printf("*** ERROR from SDreadattr\n"); fileattr_data[n_values] = '\0'; /* * Print out file attribute value and free buffer. */ printf("File attribute value is : %s\n", fileattr_data); free(fileattr_data); } /* * Select the first data set. */ sds_id = SDselect(sd_id, 0); /* * Find the data set attribute defined by SDS_ATTR_NAME. Note that the * first parameter is a data set identifier. */ attr_index = SDfindattr(sds_id, SDS_ATTR_NAME); /* * Get information about the data set attribute. */ if (SDattrinfo(sds_id, attr_index, attr_name, &data_type, &n_values) == FAIL) printf("*** ERROR from SDattrinfo\n"); /* * The data type should be DFNT_FLOAT32, from SD_set_attr.c. */ if (data_type == DFNT_FLOAT32) { float32 *sds_data; /* * Allocate a buffer to hold the data set attribute data. */ sds_data = (float32 *)malloc(n_values * DFKNTsize(data_type)); /* * Read the SDS attribute data. */ if (SDreadattr(sds_id, attr_index, sds_data) == FAIL) printf("*** ERROR from SDreadattr\n"); /* * Print out SDS attribute data type and values and free buffer. */ printf("SDS attribute data type is : float32\n"); printf("SDS attribute values are : "); for (i = 0; i < n_values; i++) printf(" %f", sds_data[i]); printf("\n"); free(sds_data); } /* * Get the identifier for the second dimension of the SDS. */ dim_id = SDgetdimid(sds_id, 1); /* * Find dimension attribute defined by DIM_ATTR_NAME. */ attr_index = SDfindattr(dim_id, DIM_ATTR_NAME); /* * Get information about the dimension attribute. */ if (SDattrinfo(dim_id, attr_index, attr_name, &data_type, &n_values) == FAIL) printf("*** ERROR from SDattrinfo\n"); /* * The data type should be DFNT_CHAR, from SD_set_attr.c. */ if (data_type == DFNT_CHAR) { char *dimattr_data; /* * Allocate a buffer to hold the dimension attribute data. */ dimattr_data = (char *)malloc((n_values + 1) * DFKNTsize(data_type)); /* * Read the dimension attribute data. */ if (SDreadattr(dim_id, attr_index, dimattr_data) == FAIL) printf("*** ERROR from SDreadattr\n"); dimattr_data[n_values] = '\0'; /* * Print out dimension attribute value and free buffer. */ printf("Dimensional attribute values is : %s\n", dimattr_data); free(dimattr_data); } /* * Terminate access to the data set and to the SD interface and * close the file. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); /* Output of this program is : * * File attribute value is : Storm_track_data * SDS attribute data type is : float32 * SDS attribute values are : 2.000000 10.000000 * Dimensional attribute values is : Seconds */ return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_get_info.c000066400000000000000000000040751503061704500211650ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; int32 n_datasets, n_file_attrs, index; int32 dim_sizes[H4_MAX_VAR_DIMS]; int32 rank, data_type, n_attrs; char name[H4_MAX_NC_NAME]; int i; /********************* End of variable declaration ***********************/ /* * Open the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Determine the number of data sets in the file and the number * of file attributes. */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attrs) == FAIL) printf("*** ERROR from SDfileinfo\n"); /* * Access every data set and print its name, rank, dimension sizes, * data type, and number of attributes. * The following information should be displayed: * * name = SDStemplate * rank = 2 * dimension sizes are : 16 5 * data type is 24 * number of attributes is 0 */ for (index = 0; index < n_datasets; index++) { sds_id = SDselect(sd_id, index); if (SDgetinfo(sds_id, name, &rank, dim_sizes, &data_type, &n_attrs) == FAIL) printf("*** ERROR from SDgetinfo\n"); printf("name = %s\n", name); printf("rank = %d\n", rank); printf("dimension sizes are : "); for (i = 0; i < rank; i++) printf("%d ", dim_sizes[i]); printf("\n"); printf("data type is %d\n", data_type); printf("number of attributes is %d\n", n_attrs); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); } /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_mv_sds_to_external.c000066400000000000000000000021771503061704500232730ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define EXT_FILE_NAME "ExternalSDS" #define OFFSET 24 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; /********************* End of variable declaration ***********************/ /* * Open the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_WRITE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Create a file with the name EXT_FILE_NAME and move the data set * values into it, starting at byte location OFFSET. */ if (SDsetexternalfile(sds_id, EXT_FILE_NAME, OFFSET) == FAIL) printf("*** ERROR from SDsetexternalfile\n"); /* * Terminate access to the data set, SD interface, and file. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_read_from_sds.c000066400000000000000000000032021503061704500221710ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define X_LENGTH 5 #define Y_LENGTH 16 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 start[2], edges[2]; int32 data[Y_LENGTH][X_LENGTH]; int j; /********************* End of variable declaration ***********************/ /* * Open the file for reading and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Set elements of array start to 0, elements of array edges * to SDS dimensions,and use NULL for the argument stride in SDreaddata * to read the entire data. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* * Read entire data into data array. */ if (SDreaddata(sds_id, start, NULL, edges, (void *)data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print 10th row; the following numbers should be displayed. * * 10 1000 12 13 14 */ for (j = 0; j < X_LENGTH; j++) printf("%d ", data[9][j]); printf("\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_read_subsets.c000066400000000000000000000100011503061704500220400ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define SUB1_LENGTH 5 #define SUB2_LENGTH 4 #define SUB3_LENGTH1 2 #define SUB3_LENGTH2 3 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 start[2], edges[2], stride[2]; int32 sub1_data[SUB1_LENGTH]; int32 sub2_data[SUB2_LENGTH]; int32 sub3_data[SUB3_LENGTH2][SUB3_LENGTH1]; int i, j; /********************* End of variable declaration ***********************/ /* * Open the file for reading and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_READ)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Reading the first subset. * * Set elements of start, edges, and stride arrays to read * every 3rd element in the 2nd column starting at 4th row. */ start[0] = 3; /* 4th row */ start[1] = 1; /* 2nd column */ edges[0] = SUB1_LENGTH; /* SUB1_LENGTH elements are read along 2nd column*/ edges[1] = 1; stride[0] = 3; /* every 3rd element is read along 2nd column */ stride[1] = 1; /* * Read the data from the file into sub1_data array. */ if (SDreaddata(sds_id, start, stride, edges, (void *)sub1_data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print what we have just read; the following numbers should be displayed: * * 5 8 1000 14 17 */ for (j = 0; j < SUB1_LENGTH; j++) printf("%d ", sub1_data[j]); printf("\n"); /* * Reading the second subset. * * Set elements of start and edges arrays to read * first 4 elements of the 10th row. */ start[0] = 9; /* 10th row */ start[1] = 0; /* 1st column */ edges[0] = 1; edges[1] = SUB2_LENGTH; /* SUB2_LENGTH elements are read along 10th row */ /* * Read data from the file into sub2_data array. Note that the third * parameter is set to NULL for contiguous reading. */ if (SDreaddata(sds_id, start, NULL, edges, (void *)sub2_data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print what we have just read; the following numbers should be displayed: * * 10 1000 12 13 */ for (j = 0; j < SUB2_LENGTH; j++) printf("%d ", sub2_data[j]); printf("\n"); /* * Reading the third subset. * * Set elements of the arrays start, edges, and stride to read * every 6th element in the column and 4th element in the row * starting at 1st column, 3d row. */ start[0] = 2; /* 3d row */ start[1] = 0; /* 1st column */ edges[0] = SUB3_LENGTH2; /* SUB3_LENGTH2 elements are read along each column */ edges[1] = SUB3_LENGTH1; /* SUB3_LENGTH1 elements are read along each row */ stride[0] = 6; /* read every 6th element along each column */ stride[1] = 4; /* read every 4th element along each row */ /* * Read the data from the file into sub3_data array. */ if (SDreaddata(sds_id, start, stride, edges, (void *)sub3_data) == FAIL) printf("*** ERROR from SDreaddata\n"); /* * Print what we have just read; the following numbers should be displayed: * * 3 7 * 9 13 * 15 19 */ for (j = 0; j < SUB3_LENGTH2; j++) { for (i = 0; i < SUB3_LENGTH1; i++) printf("%d ", sub3_data[j][i]); printf("\n"); } /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_set_attr.c000066400000000000000000000043671503061704500212240ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define FILE_ATTR_NAME "File_contents" #define SDS_ATTR_NAME "Valid_range" #define DIM_ATTR_NAME "Dim_metric" int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 dim_id, dim_index; int32 n_values; /* number of values of the file, SDS or dimension attribute */ char8 file_values[] = "Storm_track_data"; /* values of the file attribute */ float32 sds_values[2] = {2., 10.}; /* values of the SDS attribute */ char8 dim_values[] = "Seconds"; /* values of the dimension attribute */ /********************* End of variable declaration ***********************/ /* * Open the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_WRITE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Set an attribute that describes the file contents. */ n_values = 16; if (SDsetattr(sd_id, FILE_ATTR_NAME, DFNT_CHAR, n_values, (void *)file_values) == FAIL) printf("*** ERROR from SDsetattr\n"); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Assign attribute to the first SDS. Note that attribute values * may have different data type than SDS data. */ n_values = 2; if (SDsetattr(sds_id, SDS_ATTR_NAME, DFNT_FLOAT32, n_values, (void *)sds_values) == FAIL) printf("*** ERROR from SDsetattr\n"); /* * Get the the second dimension identifier of the SDS. */ dim_index = 1; dim_id = SDgetdimid(sds_id, dim_index); /* * Set an attribute of the dimension that specifies the dimension metric. */ n_values = 7; if (SDsetattr(dim_id, DIM_ATTR_NAME, DFNT_CHAR, n_values, (void *)dim_values) == FAIL) printf("*** ERROR from SDsetattr\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_set_get_dim_info.c000066400000000000000000000124571503061704500226740ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define SDS_NAME "SDStemplate" #define DIM_NAME_X "X_Axis" #define DIM_NAME_Y "Y_Axis" #define NAME_LENGTH 6 #define X_LENGTH 5 #define Y_LENGTH 16 #define RANK 2 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 dim_index, dim_id; int32 n_values, data_type, n_attrs; int16 data_X[X_LENGTH]; /* X dimension dimension scale */ int16 data_X_out[X_LENGTH]; float64 data_Y[Y_LENGTH]; /* Y dimension dimension scale */ float64 data_Y_out[Y_LENGTH]; char dim_name[NAME_LENGTH + 1]; int i, j, nrow; /********************* End of variable declaration ***********************/ /* * Initialize dimension scales. */ for (i = 0; i < X_LENGTH; i++) data_X[i] = i; for (i = 0; i < Y_LENGTH; i++) data_Y[i] = 0.1 * i; /* * Open the file and initialize SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_WRITE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Get the index of the data set specified in SDS_NAME. */ sds_index = SDnametoindex(sd_id, SDS_NAME); /* * Select the data set corresponding to the returned index. */ sds_id = SDselect(sd_id, sds_index); /* For each dimension of the data set specified in SDS_NAME, * get its dimension identifier and set dimension name * and dimension scale. Note that data type of dimension scale * can be different between dimensions and can be different from * SDS data type. */ for (dim_index = 0; dim_index < RANK; dim_index++) { /* * Select the dimension at position dim_index. */ dim_id = SDgetdimid(sds_id, dim_index); /* * Assign name and dimension scale to selected dimension. */ switch (dim_index) { case 0: if (SDsetdimname(dim_id, DIM_NAME_Y) == FAIL) printf("*** ERROR from SDsetdimname\n"); n_values = Y_LENGTH; SDsetdimscale(dim_id, n_values, DFNT_FLOAT64, (void *)data_Y); break; case 1: if (SDsetdimname(dim_id, DIM_NAME_X) == FAIL) printf("*** ERROR from SDsetdimname\n"); n_values = X_LENGTH; SDsetdimscale(dim_id, n_values, DFNT_INT16, (void *)data_X); break; default: break; } /* * Get and display info about the dimension and its scale values. * The following information is displayed: * * Information about 1 dimension: * dimension name is Y_Axis * number of scale values is 16 * dimension scale data type is float64 * number of dimension attributes is 0 * * Scale values are : * 0.000 0.100 0.200 0.300 * 0.400 0.500 0.600 0.700 * 0.800 0.900 1.000 1.100 * 1.200 1.300 1.400 1.500 * * Information about 2 dimension: * dimension name is X_Axis * number of scale values is 5 * dimension scale data type is int16 * number of dimension attributes is 0 * * Scale values are : * 0 1 2 3 4 */ if (SDdiminfo(dim_id, dim_name, &n_values, &data_type, &n_attrs) == FAIL) printf("*** ERROR from SDdiminfo\n"); printf("Information about %d dimension:\n", dim_index + 1); printf("dimension name is %s\n", dim_name); printf("number of scale values is %d\n", n_values); if (data_type == DFNT_FLOAT64) printf("dimension scale data type is float64\n"); if (data_type == DFNT_INT16) printf("dimension scale data type is int16\n"); printf("number of dimension attributes is %d\n", n_attrs); printf("\n"); printf("Scale values are :\n"); switch (dim_index) { case 0: if (SDgetdimscale(dim_id, (void *)data_Y_out) == FAIL) printf("*** ERROR from SDgetdimscale\n"); nrow = 4; for (i = 0; i < n_values / nrow; i++) { for (j = 0; j < nrow; j++) printf(" %-6.3f", data_Y_out[i * nrow + j]); printf("\n"); } break; case 1: if (SDgetdimscale(dim_id, (void *)data_X_out) == FAIL) printf("*** ERROR from SDgetdimscale\n"); for (i = 0; i < n_values; i++) printf(" %d", data_X_out[i]); break; default: break; } printf("\n"); } /*for dim_index */ /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_unlimited_sds.c000066400000000000000000000061711503061704500222350ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDSUNLIMITED.hdf" #define SDS_NAME "AppendableData" #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 dim_sizes[2]; int32 data[Y_LENGTH][X_LENGTH], append_data[X_LENGTH]; int32 start[2], edges[2]; int i, j; /********************* End of variable declaration ***********************/ /* * Data initialization. */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + 1) + (j + 1); } /* * Create the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_CREATE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Define dimensions of the array. Make the first dimension * appendable by defining its length to be unlimited. */ dim_sizes[0] = SD_UNLIMITED; dim_sizes[1] = X_LENGTH; /* * Create the array data set. */ sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); /* * Define the location and the size of the data to be written * to the data set. */ start[0] = start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* * Write the data. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Terminate access to the array data set, terminate access * to the SD interface, and close the file. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); /* * Store the array values to be appended to the data set. */ for (i = 0; i < X_LENGTH; i++) append_data[i] = 1000 + i; /* * Reopen the file and initialize the SD interface. */ sd_id = SDstart(FILE_NAME, DFACC_WRITE); /* * Select the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Check if selected SDS is unlimited. If it is not, then terminate access * to the SD interface and close the file. */ if (SDisrecord(sds_id)) { /* * Define the location of the append to start at the first column * of the 11th row of the data set and to stop at the end of the * eleventh row. */ start[0] = Y_LENGTH; start[1] = 0; edges[0] = 1; edges[1] = X_LENGTH; /* * Append data to the data set. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)append_data) == FAIL) printf("*** ERROR from SDwritedata\n"); } /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_write_slab.c000066400000000000000000000050451503061704500215240ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SLABS.hdf" #define SDS_NAME "FilledBySlabs" #define X_LENGTH 4 #define Y_LENGTH 5 #define Z_LENGTH 6 #define RANK 3 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; int32 dim_sizes[3], start[3], edges[3]; int32 data[Z_LENGTH][Y_LENGTH][X_LENGTH]; int32 zx_data[Z_LENGTH][X_LENGTH]; int i, j, k; /********************* End of variable declaration ***********************/ /* * Data initialization. */ for (k = 0; k < Z_LENGTH; k++) for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) data[k][j][i] = (i + 1) + (j + 1) + (k + 1); /* * Create the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_CREATE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Define dimensions of the array to be created. */ dim_sizes[0] = Z_LENGTH; dim_sizes[1] = Y_LENGTH; dim_sizes[2] = X_LENGTH; /* * Create the array with the name defined in SDS_NAME. */ sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); /* * Set the parameters start and edges to write * a 6x4 element slab of data to the data set; note * that edges[1] is set to 1 to define a 2-dimensional slab * parallel to the ZX plane. * start[1] (slab position in the array) is initialized inside * the for loop. */ edges[0] = Z_LENGTH; edges[1] = 1; edges[2] = X_LENGTH; start[0] = start[2] = 0; for (j = 0; j < Y_LENGTH; j++) { start[1] = j; /* * Initialize zx_data buffer (data slab). */ for (k = 0; k < Z_LENGTH; k++) { for (i = 0; i < X_LENGTH; i++) { zx_data[k][i] = data[k][j][i]; } } /* * Write the data slab into the SDS array defined in SDS_NAME. * Note that the 3rd parameter is NULL which indicates that consecutive * slabs in the Y direction are written. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)zx_data) == FAIL) printf("*** ERROR from SDwritedata\n"); } /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/h4ex_SD_write_to_sds.c000066400000000000000000000033221503061704500220720ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE_NAME "SDS.hdf" #define X_LENGTH 5 #define Y_LENGTH 16 int main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; int32 start[2], edges[2]; int32 data[Y_LENGTH][X_LENGTH]; int i, j; /********************* End of variable declaration ***********************/ /* * Data set data initialization. */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } /* * Open the file and initialize the SD interface. */ if ((sd_id = SDstart(FILE_NAME, DFACC_WRITE)) == FAIL) printf("*** ERROR from SDstart\n"); /* * Attach to the first data set. */ sds_index = 0; sds_id = SDselect(sd_id, sds_index); /* * Define the location and size of the data to be written to the data set. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* * Write the stored data to the data set. The third argument is set to NULL * to specify contiguous data elements. The last argument must * be explicitly cast to a generic pointer since SDwritedata is designed * to write generic data. */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) printf("*** ERROR from SDwritedata\n"); /* * Terminate access to the data set. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); /* * Terminate access to the SD interface and close the file. */ if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/SD/testexamples.sh.in000066400000000000000000000005761503061704500213720ustar00rootroot00000000000000# This test script only runs all the examples right now. It needs # a lot of work. It should use h4cc to build the examples too. ./create_sds ./write_to_sds ./write_slab ./read_from_sds ./alter_sds_values ./chunking_example ./compress_sds ./dimscale_vs_sds ./find_sds_by_name ./set_attr ./get_attr ./get_info ./mv_sds_to_external ./read_subsets ./set_get_dim_info ./unlimited_sds hdf4-hdf4.3.1/HDF4Examples/C/VD/000077500000000000000000000000001503061704500157065ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/CMakeLists.txt000066400000000000000000000102551503061704500204510ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_VD C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (C_sourcefiles.cmake) foreach (example_name ${h4examples}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () foreach (example_name ${h4examples_use}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST testname testddl dumparg) add_test ( NAME hdf_${testname}-clearall COMMAND ${CMAKE_COMMAND} -E remove ${testname}.hdf ) add_test ( NAME hdf_${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_OUTPUT=${testname}.out" -D "TEST_REFERENCE=${testname}.tst" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_${testname} PROPERTIES DEPENDS hdf_${testname}-clearall) if (HDF4_BUILD_TOOLS AND ${testddl} STREQUAL "1") add_test ( NAME hdf_HDP-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=${H4EX_HDF4_DUMP_EXECUTABLE}" -D "TEST_ARGS:STRING=${dumparg};${testname}.hdf" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testname}.ddl.out" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=${testname}.ddl" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (hdf_HDP-${testname} PROPERTIES DEPENDS hdf_${testname}) endif () endmacro () foreach (example_name ${h4examples}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_VD_TEST_FILES "${testdest}.tst") if (HDF4_BUILD_TOOLS) add_custom_command ( OUTPUT "${testdest}.ddl" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.ddl" "${testdest}.ddl" DEPENDS "${testsrc}.ddl" ) list (APPEND HDF4Examples_VD_TEST_FILES "${testdest}.ddl") endif () endforeach () foreach (example_name ${h4examples_use}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_VD_TEST_FILES "${testdest}.tst") endforeach () foreach (ex_file ${h4examples_files}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/${ex_file}") set (testdest "${PROJECT_BINARY_DIR}/${ex_file}") add_custom_command ( OUTPUT "${testdest}" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}" "${testdest}" DEPENDS "${testsrc}" ) list (APPEND HDF4Examples_VD_TEST_FILES "${testdest}") endforeach () add_custom_target (HDF4Examples_HDF_VD-files ALL COMMENT "Copying files needed by VD tests" DEPENDS ${HDF4Examples_VD_TEST_FILES}) foreach (example_name ${h4examples}) ADD_H4_TEST (h4ex_${example_name} 1 dumpvg) endforeach () foreach (example_name ${h4examples_use}) ADD_H4_TEST (h4ex_${example_name} 0 dumpvg) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/C/VD/C_sourcefiles.cmake000066400000000000000000000012021503061704500214700ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (h4examples VD_create_onefield_vdatas VD_create_vdatas VD_write_mixed_vdata_struct VD_write_mixed_vdata ) set (h4examples_use VD_get_vdata_info VD_locate_vdata # VD_read_from_vdata #program will fail VD_read_mixed_vdata # VD_set_get_vdata_attr VD_write_to_vdata ) set (h4examples_files General_Vdatas.hdf General_Vdatas2.hdf General_Vdatas3.hdf Packed_Vdata.hdf Two_Vdatas.hdf ) hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_create_onefield_vdatas.c000066400000000000000000000044171503061704500240530ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_VD_create_onefield_vdatas.hdf" #define CLASS1_NAME "5x1 Array" #define CLASS2_NAME "6x4 Array" #define VDATA1_NAME "First Vdata" #define VDATA2_NAME "Second Vdata" #define FIELD1_NAME "Single-component Field" #define FIELD2_NAME "Multi-component Field" #define N_RECORDS_1 5 /* number of records the first vdata contains */ #define N_RECORDS_2 6 /* number of records the second vdata contains */ #define ORDER_2 4 /* order of the field in the second vdata */ /* Note that the order of the field in the first vdata is 1 */ int main() { /************************* Variable declaration **************************/ int32 file_id; /* * Define an array to buffer the data of the first vdata. */ char8 vdata1_buf[N_RECORDS_1] = {'V', 'D', 'A', 'T', 'A'}; /* * Define an array to buffer the data of the second vdata. */ int32 vdata2_buf[N_RECORDS_2][ORDER_2] = {{1, 2, 3, 4}, {2, 4, 6, 8}, {3, 6, 9, 12}, {4, 8, 12, 16}, {5, 10, 15, 20}, {6, 12, 18, 24}}; /********************** End of variable declaration **********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create the first vdata and populate it with data from the vdata1_buf * array. Note that the buffer vdata1_buf is cast to (uint8 *) for the * benefit of generic data type. */ VHstoredata(file_id, FIELD1_NAME, (uint8 *)vdata1_buf, N_RECORDS_1, DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME); /* * Create the second vdata and populate it with data from the vdata2_buf * array. */ VHstoredatam(file_id, FIELD2_NAME, (uint8 *)vdata2_buf, N_RECORDS_2, DFNT_INT32, VDATA2_NAME, CLASS2_NAME, ORDER_2); /* * Terminate access to the VS interface and close the HDF file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_create_vdatas.c000066400000000000000000000064201503061704500222020ustar00rootroot00000000000000#include #include "hdf.h" #define FILE1_NAME "h4ex_VD_create_vdatas.hdf" #define FILE2_NAME "Two_Vdatas.hdf" #define VDATA_NAME "Vdata 1" #define VDATA_CLASS "Empty Vdatas" int main() { /************************* Variable declaration **************************/ int32 file1_id, file2_id, vdata_id, vdata1_id, vdata2_id, vdata_ref = -1; /* ref number of a vdata, set to -1 to create */ /********************** End of variable declaration **********************/ /* * Create the first HDF file. */ if ((file1_id = Hopen(FILE1_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface associated with the first HDF file. */ if (Vstart(file1_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create a vdata in the first HDF file. */ vdata_id = VSattach(file1_id, vdata_ref, "w"); /* * Assign a name to the vdata. */ if (VSsetname(vdata_id, VDATA_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); /* * Other operations on the vdata identified by vdata_id can be carried * out starting from this point. */ /* * Create the second HDF file. */ if ((file2_id = Hopen(FILE2_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface associated with the second HDF file. */ if (Vstart(file2_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create the first vdata in the second HDF file. */ vdata1_id = VSattach(file2_id, vdata_ref, "w"); /* * Create the second vdata in the second HDF file. */ vdata2_id = VSattach(file2_id, vdata_ref, "w"); /* * Assign a class name to these vdatas. */ if (VSsetclass(vdata1_id, VDATA_CLASS) == FAIL) printf("*** ERROR from VSsetclass\n"); if (VSsetclass(vdata2_id, VDATA_CLASS) == FAIL) printf("*** ERROR from VSsetclass\n"); /* * Other operations on the vdatas identified by vdata1_id and vdata2_id * can be carried out starting from this point. */ /* * Terminate access to the first vdata in the second HDF file. */ if (VSdetach(vdata1_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * Terminate access to the second vdata in the second HDF file. */ if (VSdetach(vdata2_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * From this point on, any operations on the vdatas identified by vdata1_id and vdata2_id are invalid but not on the vdata identified by vdata_id. */ /* * Terminate access to the VS interface associated with the second HDF file. */ if (Vend(file2_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file2_id) == FAIL) printf("*** ERROR from Hclose\n"); /* * Terminate access to the vdata in the first HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * Terminate access to the VS interface associated with the first HDF file. */ if (Vend(file1_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file1_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_get_vdata_info.c000066400000000000000000000050731503061704500223510ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vdatas.hdf" #define FIELD_SIZE 80 /* maximum length of all the field names */ int main() { /************************* Variable declaration **************************/ int32 n_records, /* to retrieve the number of records in the vdata */ interlace_mode, /* to retrieve the interlace mode of the vdata */ vdata_size, /* to retrieve the size of all specified fields */ file_id, vdata_ref, vdata_id; char fieldname_list[FIELD_SIZE], /* buffer to retrieve the vdata data */ vdata_name[VSNAMELENMAX]; /* buffer to retrieve the vdata name */ /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Set vdata_ref to -1 to start the search from the beginning of file. */ vdata_ref = -1; /* * Use VSgetid to obtain each vdata by its reference number then attach * to the vdata and get its information. The loop terminates when * the last vdata is reached. */ while ((vdata_ref = VSgetid(file_id, vdata_ref)) != FAIL) { /* * Attach to the current vdata for reading. */ vdata_id = VSattach(file_id, vdata_ref, "r"); /* * Test whether the current vdata is not a storage of an attribute, then * obtain and display its information. */ if (VSisattr(vdata_id) != TRUE) { if (VSinquire(vdata_id, &n_records, &interlace_mode, fieldname_list, &vdata_size, vdata_name) == FAIL) printf("*** ERROR from VSinquire\n"); printf("Vdata %s: - contains %d records\n\tInterlace mode: %s \ \n\tFields: %s - %d bytes\n\t\n", vdata_name, n_records, interlace_mode == FULL_INTERLACE ? "FULL" : "NONE", fieldname_list, vdata_size); } /* * Detach from the current vdata. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); } /* while */ /* * Terminate access to the VS interface and close the HDF file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_locate_vdata.c000066400000000000000000000047321503061704500220270ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vdatas.hdf" #define SEARCHED_FIELDS "Position,Temperature" int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id, vdata_ref; int32 index = 0; /* index of the vdata in the file - manually kept */ int8 found_fields; /* TRUE if the specified fields exist in the vdata */ /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Set the reference number to -1 to start the search from * the beginning of file. */ vdata_ref = -1; /* * Assume that the specified fields are not found in the current vdata. */ found_fields = FALSE; /* * Use VSgetid to obtain each vdata by its reference number then * attach to the vdata and search for the fields. The loop * terminates when the last vdata is reached or when a vdata which * contains the fields listed in SEARCHED_FIELDS is found. */ while ((vdata_ref = VSgetid(file_id, vdata_ref)) != FAIL) { vdata_id = VSattach(file_id, vdata_ref, "r"); if (VSfexist(vdata_id, SEARCHED_FIELDS) != FAIL) { found_fields = TRUE; break; } /* * Detach from the current vdata before continuing searching. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); index++; /* advance the index by 1 for the next vdata */ } /* * Print the index of the vdata containing the fields or a "not found" * message if no such vdata is found. Also detach from the vdata found. */ if (!found_fields) printf("Fields Position and Temperature were not found.\n"); else { printf("Fields Position and Temperature found in the vdata at position %d\n", index); if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); } /* * Terminate access to the VS interface and close the HDF file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_read_from_vdata.c000066400000000000000000000063431503061704500225160ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_Vdatas3.hdf" #define VDATA_NAME "Solid Particle" #define N_RECORDS 5 /* number of records the vdata contains */ #define RECORD_INDEX 3 /* position where reading starts - 4th record */ #define ORDER_1 3 /* order of first field to be read */ #define ORDER_2 2 /* order of second field to be read */ #define FIELDNAME_LIST "Position,Temperature" /* only two fields are read */ #define N_VALS_PER_REC (ORDER_1 + ORDER_2) /* number of values per record */ int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id; int32 vdata_ref; /* vdata's reference number */ int32 num_of_records; /* number of records actually written to the vdata */ int16 rec_num; /* current record number in the vdata */ float32 databuf[N_RECORDS][N_VALS_PER_REC]; /* buffer for vdata values */ /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get the reference number of the vdata, whose name is specified in * VDATA_NAME, using VSfind, which will be discussed in Section 4.7.3. */ vdata_ref = VSfind(file_id, VDATA_NAME); /* * Attach to the vdata for reading if it is found, otherwise * exit the program. */ if (vdata_ref == 0) { printf("*** vdata %s is not found in file %s\n", VDATA_NAME, FILE_NAME); return (1); } vdata_id = VSattach(file_id, vdata_ref, "r"); /* * Specify the fields that will be read. */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Place the current point to the position specified in RECORD_INDEX. */ VSseek(vdata_id, RECORD_INDEX); /* * Read the next N_RECORDS records from the vdata and store the data * in the buffer databuf with fully interlaced mode. */ num_of_records = VSread(vdata_id, (uint8 *)databuf, N_RECORDS, FULL_INTERLACE); /* * Display the read data as many records as the number of records * returned by VSread. */ printf("\n Particle Position Temperature Range\n\n"); for (rec_num = 0; rec_num < num_of_records; rec_num++) { printf(" %6.2f, %6.2f, %6.2f %6.2f, %6.2f\n", databuf[rec_num][0], databuf[rec_num][1], databuf[rec_num][2], databuf[rec_num][3], databuf[rec_num][4]); } /* * Terminate access to the vdata and to the VS interface, then close * the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_read_mixed_vdata.c000066400000000000000000000064151503061704500226610ustar00rootroot00000000000000#include #include "hdf.h" #define N_RECORDS 20 /* number of records to be read */ #define N_FIELDS 2 /* number of fields to be read */ #define FILE_NAME "Packed_Vdata.hdf" #define VDATA_NAME "Mixed Data Vdata" #define FIELDNAME_LIST "Temp,Ident" /* number of bytes of the data to be read */ #define BUFFER_SIZE (sizeof(float32) + sizeof(char)) * N_RECORDS int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id; int32 num_of_records; /* number of records actually read */ int32 vdata_ref; /* reference number of the vdata to be read */ float32 itemp[N_RECORDS]; /* buffer to hold values of first field */ char idents[N_RECORDS]; /* buffer to hold values of fourth field */ uint8 databuf[BUFFER_SIZE]; /* buffer to hold read data, still packed */ void *fldbufptrs[N_FIELDS]; /*pointers to be pointing to the field buffers*/ int i; /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get the reference number of the vdata, whose name is specified in * VDATA_NAME, using VSfind, which will be discussed in Section 4.7.3. */ vdata_ref = VSfind(file_id, VDATA_NAME); /* * Attach to the vdata for reading. */ vdata_id = VSattach(file_id, vdata_ref, "r"); /* * Specify the fields that will be read. */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Read N_RECORDS records of the vdata and store the values into the * buffer databuf. */ num_of_records = VSread(vdata_id, (uint8 *)databuf, N_RECORDS, FULL_INTERLACE); /* * Build an array of pointers each of which points to an array that * will hold all values of a field after being unpacked. */ fldbufptrs[0] = &itemp[0]; fldbufptrs[1] = &idents[0]; /* * Unpack the data from the buffer databuf and store the values into the * appropriate field buffers pointed to by the set of pointers fldbufptrs. * Note that the second parameter is _HDF_VSUNPACK for unpacking and the * number of records is the one returned by VSread. */ if (VSfpack(vdata_id, _HDF_VSUNPACK, FIELDNAME_LIST, (void *)databuf, BUFFER_SIZE, num_of_records, NULL, (void *)fldbufptrs) == FAIL) printf("*** ERROR from VSfpack\n"); /* * Display the read data being stored in the field buffers. */ printf("\n Temp Ident\n"); for (i = 0; i < num_of_records; i++) printf(" %6.2f %c\n", itemp[i], idents[i]); /* * Terminate access to the vdata and the VS interface, then close * the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_set_get_vdata_attr.c000066400000000000000000000125511503061704500232420ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vdatas2.hdf" #define VDATA_NAME "Solid Particle" #define FIELD_NAME "Mass" #define VATTR_NAME "Site Ident" /* name of the vdata attribute */ #define FATTR_NAME "Scales" /* name of the field attribute */ #define VATTR_N_VALUES 3 /* number of values in the vdata attribute */ #define FATTR_N_VALUES 4 /* number of values in the field attribute */ int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_ref, vdata_id; int32 field_index, /* index of a field within the vdata */ n_vdattrs, /* number of vdata attributes */ n_fldattrs, /* number of field attributes */ vdata_type, /* to hold the type of vdata's attribute */ vdata_n_values, /* to hold the number of vdata's attribute values */ vdata_size, /* to hold the size of vdata's attribute values */ field_type, /* to hold the type of field's attribute */ field_n_values, /* to hold the number of field's attribute values */ field_size; /* to hold the size of field's attribute values */ char vd_attr[VATTR_N_VALUES] = {'A', 'B', 'C'}; /* vdata attribute values*/ int32 fld_attr[FATTR_N_VALUES] = {2, 4, 6, 8}; /* field attribute values*/ char vattr_buf[VATTR_N_VALUES]; /* to hold vdata attribute's values */ int32 fattr_buf[FATTR_N_VALUES]; /* to hold field attribute's values */ char vattr_name[30], /* name of vdata attribute */ fattr_name[30]; /* name of field attribute */ /********************** End of variable declaration **********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get the reference number of the vdata named VDATA_NAME. */ vdata_ref = VSfind(file_id, VDATA_NAME); /* * Attach to the vdata for writing. */ vdata_id = VSattach(file_id, vdata_ref, "w"); /* * Attach an attribute to the vdata, i.e., indicated by the second parameter. */ if (VSsetattr(vdata_id, _HDF_VDATA, VATTR_NAME, DFNT_CHAR, VATTR_N_VALUES, vd_attr) == FAIL) printf("*** ERROR from VSsetattr\n"); /* * Get the index of the field FIELD_NAME within the vdata. */ if (VSfindex(vdata_id, FIELD_NAME, &field_index) == FAIL) printf("*** ERROR from VSfindex\n"); /* * Attach an attribute to the field field_index. */ if (VSsetattr(vdata_id, field_index, FATTR_NAME, DFNT_INT32, FATTR_N_VALUES, fld_attr) == FAIL) printf("*** ERROR from VSsetattr\n"); /* * Get the number of attributes attached to the vdata's first * field - should be 0. */ n_fldattrs = VSfnattrs(vdata_id, 0); printf("Number of attributes of the first field of the vdata: %d\n", n_fldattrs); /* * Get the number of attributes attached to the field specified by * field_index - should be 1. */ n_fldattrs = VSfnattrs(vdata_id, field_index); printf("Number of attributes of field %s: %d\n", FIELD_NAME, n_fldattrs); /* * Get the total number of the field's and vdata's attributes - should be 2. */ n_vdattrs = VSnattrs(vdata_id); printf("Number of attributes of the vdata and its fields: %d\n", n_vdattrs); /* * Get information about the vdata's first attribute, indicated * by the third parameter which is the index of the attribute. */ if (VSattrinfo(vdata_id, _HDF_VDATA, 0, vattr_name, &vdata_type, &vdata_n_values, &vdata_size) == FAIL) printf("*** ERROR from VSattrinfo\n"); /* * Get information about the first attribute of the field specified by * field_index. */ if (VSattrinfo(vdata_id, field_index, 0, fattr_name, &field_type, &field_n_values, &field_size) == FAIL) printf("*** ERROR from VSattrinfo\n"); /* * Get the vdata's first attribute. */ if (VSgetattr(vdata_id, _HDF_VDATA, 0, vattr_buf) == FAIL) printf("*** ERROR from VSgetattr\n"); printf("Values of the vdata attribute = %c %c %c\n", vattr_buf[0], vattr_buf[1], vattr_buf[2]); /* * Get the first attribute of the field specified by field_index. */ if (VSgetattr(vdata_id, field_index, 0, fattr_buf) == FAIL) printf("*** ERROR from VSgetattr\n"); printf("Values of the field attribute = %d %d %d %d\n", fattr_buf[0], fattr_buf[1], fattr_buf[2], fattr_buf[3]); /* * Terminate access to the vdata and to the VS interface, then close * the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_write_mixed_vdata.c000066400000000000000000000105641503061704500231000ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_VD_write_mixed_vdata.hdf" #define VDATA_NAME "Mixed Data Vdata" #define CLASS_NAME "General Data Class" #define FIELD1_NAME "Temp" #define FIELD2_NAME "Height" #define FIELD3_NAME "Speed" #define FIELD4_NAME "Ident" #define ORDER 1 /* number of values in the field */ #define N_RECORDS 20 /* number of records the vdata contains */ #define N_FIELDS 4 /* number of fields in the vdata */ #define FIELDNAME_LIST "Temp,Height,Speed,Ident" /* No spaces b/w names */ /* number of bytes of the data to be written, i.e., the size of all the field values combined times the number of records */ #define BUF_SIZE (2 * sizeof(float32) + sizeof(int16) + sizeof(char)) * N_RECORDS int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id; int32 vdata_ref = -1; /* vdata's reference number, set to -1 to create */ float32 temp[N_RECORDS]; /* buffer to hold values of first field */ int16 height[N_RECORDS]; /* buffer to hold values of second field */ float32 speed[N_RECORDS]; /* buffer to hold values of third field */ char8 ident[N_RECORDS]; /* buffer to hold values of fourth field */ void *fldbufptrs[N_FIELDS]; /*pointers to be pointing to the field buffers*/ uint16 databuf[BUF_SIZE]; /* buffer to hold the data after being packed*/ int i; /********************** End of variable declaration **********************/ /* * Create an HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create a new vdata. */ vdata_id = VSattach(file_id, vdata_ref, "w"); /* * Set name and class name of the vdata. */ if (VSsetname(vdata_id, VDATA_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata_id, CLASS_NAME) == FAIL) printf("*** ERROR from VSsetclass\n"); /* * Introduce each field's name, data type, and order. This is the first * part in defining a vdata field. */ if (VSfdefine(vdata_id, FIELD1_NAME, DFNT_FLOAT32, ORDER) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD2_NAME, DFNT_INT16, ORDER) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD3_NAME, DFNT_FLOAT32, ORDER) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD4_NAME, DFNT_CHAR8, ORDER) == FAIL) printf("*** ERROR from VSfdefine\n"); /* * Finalize the definition of the fields of the vdata. */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Enter data values into the field buffers by the records. */ for (i = 0; i < N_RECORDS; i++) { temp[i] = 1.11 * (i + 1); height[i] = i; speed[i] = 1.11 * (i + 1); ident[i] = 'A' + i; } /* * Build an array of pointers each of which points to a field buffer that * holds all values of the field. */ fldbufptrs[0] = &temp[0]; fldbufptrs[1] = &height[0]; fldbufptrs[2] = &speed[0]; fldbufptrs[3] = &ident[0]; /* * Pack all data in the field buffers that are pointed to by the set of * pointers fldbufptrs, and store the packed data into the buffer * databuf. Note that the second parameter is _HDF_VSPACK for packing. */ if (VSfpack(vdata_id, _HDF_VSPACK, NULL, (void *)databuf, BUF_SIZE, N_RECORDS, NULL, (void *)fldbufptrs) == FAIL) printf("*** ERROR from VSfpack\n"); /* * Write all records of the packed data to the vdata. */ VSwrite(vdata_id, (uint8 *)databuf, N_RECORDS, FULL_INTERLACE); /* * Terminate access to the vdata and the VS interface, then close * the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_write_mixed_vdata_struct.c000066400000000000000000000135611503061704500245040ustar00rootroot00000000000000/* Example 4_struct. Writing a multi-field and mixed-type vdata with packing - using struct instead of array to buffer field values. This example illustrates the use of VSfpack and VSwrite to write a vdata with data of different types. The problem in this example is identical to that in Example 4 of Chapter Vdata in the User's Guide. However, the two programs differ in the implementation of the data structures that hold the user's data. In this example, the program creates an HDF file named "Packed_Vdata.hdf" then defines a vdata, which is named "Mixed Data Vdata" and belongs to class "General Data Class". The vdata contains four order-1 fields, "Temp", "Height", "Speed", and "Ident" of type float32, int16, float32, and char, respectively. The program then packs the data in fully interlaced mode into a buffer and writes the packed data to the vdata. Note that, in this example, each VSfpack call packs 1 record while in Example 4, a VSfpack call packs all N_RECORDS. This difference is the result of using an array of structs in this example to hold the field values instead of individual arrays as in Example 4. */ #include #include "hdf.h" #define FILE_NAME "h4ex_VD_write_mixed_vdata_struct.hdf" #define VDATA_NAME "Mixed Data Vdata" #define CLASS_NAME "General Data Class" #define N_RECORDS 20 /* number of records the vdata contains */ #define N_FIELDS 4 /* number of fields in the vdata */ #define FIELD1_NAME "Temp" #define FIELD2_NAME "Height" #define FIELD3_NAME "Speed" #define FIELD4_NAME "Ident" #define FIELDNAME_LIST "Temp,Height,Speed,Ident" /* No spaces b/w names */ /* RECORD_SIZE is the number of bytes of all the field values combined and BUFFER_SIZE is the number of bytes of data to be written */ #define RECORD_SIZE (2 * sizeof(float32) + sizeof(int16) + sizeof(char)) #define BUFFER_SIZE (RECORD_SIZE * N_RECORDS) int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id; uint8 databuf[BUFFER_SIZE]; /* buffer to hold the data after being packed */ uint8 *pntr; /* pointer pointing to the current record in the data buffer*/ int16 rec_num; /* current record number */ struct { float32 temp; /* to hold value of the first field of the vdata */ int16 height; /* to hold value of the second field of the vdata */ float32 speed; /* to hold value of the third field of the vdata */ char ident; /* to hold value of the fourth field of the vdata */ } source[N_RECORDS]; /* pointers to be pointing to the fields in the struct buffer */ void *fldbufptrs[N_FIELDS]; /********************** End of variable declaration **********************/ /* * Create the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create a new vdata. */ vdata_id = VSattach(file_id, -1, "w"); /* * Set name and class name of the vdata. */ if (VSsetname(vdata_id, VDATA_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata_id, CLASS_NAME) == FAIL) printf("*** ERROR from VSsetclass\n"); /* * Introduce each field's name, data type, and order. This is the first * part in defining a vdata field. */ if (VSfdefine(vdata_id, FIELD1_NAME, DFNT_FLOAT32, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD2_NAME, DFNT_INT16, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD3_NAME, DFNT_FLOAT32, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD4_NAME, DFNT_CHAR8, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); /* * Finalize the definition of the fields to be written to. */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Initialize pointer for traversing the buffer to pack each record. */ pntr = &databuf[0]; /* * Enter data values into each record. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { source[rec_num].temp = 1.11 * (rec_num + 1); source[rec_num].height = rec_num; source[rec_num].speed = 1.11 * (rec_num + 1); source[rec_num].ident = 'A' + rec_num; } /* * Pack one record at a time. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { /* * Build an array of pointers each of which points to a space that * holds the value of the corresponding field in this record. */ fldbufptrs[0] = &source[rec_num].temp; fldbufptrs[1] = &source[rec_num].height; fldbufptrs[2] = &source[rec_num].speed; fldbufptrs[3] = &source[rec_num].ident; /* * Pack the data in the field buffers into the data buffer at the * current record, i.e. indicated by "pntr". */ if (VSfpack(vdata_id, _HDF_VSPACK, NULL, (void *)pntr, RECORD_SIZE, 1, NULL, fldbufptrs) == FAIL) printf("*** ERROR from VSfpack\n"); /* * Advance the current position in the buffer. */ pntr = pntr + RECORD_SIZE; } /* * Write all records of the packed data to the vdata. */ VSwrite(vdata_id, (uint8 *)databuf, N_RECORDS, FULL_INTERLACE); /* * Terminate access to the Vdata and the VS interface, * then close the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/h4ex_VD_write_to_vdata.c000066400000000000000000000071531503061704500224140ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vdatas3.hdf" #define N_RECORDS 10 /* number of records the vdata contains */ #define ORDER_1 3 /* order of first field */ #define ORDER_2 1 /* order of second field */ #define ORDER_3 2 /* order of third field */ #define CLASS_NAME "Particle Data" #define VDATA_NAME "Solid Particle" #define FIELD1_NAME "Position" /* contains x, y, z values */ #define FIELD2_NAME "Mass" /* contains weight values */ #define FIELD3_NAME "Temperature" /* contains min and max values */ #define FIELDNAME_LIST "Position,Mass,Temperature" /* No spaces b/w names */ /* number of values per record */ #define N_VALS_PER_REC (ORDER_1 + ORDER_2 + ORDER_3) int main() { /************************* Variable declaration **************************/ int32 file_id, vdata_id; int32 vdata_ref = -1; /* ref number of a vdata, set to -1 to create */ int16 rec_num; /* current record number */ float32 data_buf[N_RECORDS][N_VALS_PER_REC]; /* buffer for vdata values */ /********************** End of variable declaration **********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the VS interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create a new vdata. */ vdata_id = VSattach(file_id, vdata_ref, "w"); /* * Set name and class name of the vdata. */ if (VSsetname(vdata_id, VDATA_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata_id, CLASS_NAME) == FAIL) printf("*** ERROR from VSsetclass\n"); /* * Introduce each field's name, data type, and order. This is the first * part in defining a field. */ if (VSfdefine(vdata_id, FIELD1_NAME, DFNT_FLOAT32, ORDER_1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD2_NAME, DFNT_FLOAT32, ORDER_2) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata_id, FIELD3_NAME, DFNT_FLOAT32, ORDER_3) == FAIL) printf("*** ERROR from VSfdefine\n"); /* * Finalize the definition of the fields. */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf[rec_num][0] = 1.0 * rec_num; data_buf[rec_num][1] = 2.0 * rec_num; data_buf[rec_num][2] = 3.0 * rec_num; data_buf[rec_num][3] = 0.1 + rec_num; data_buf[rec_num][4] = 0.0; data_buf[rec_num][5] = 65.0; } /* * Write the data from data_buf to the vdata with full interlacing mode. */ VSwrite(vdata_id, (uint8 *)data_buf, N_RECORDS, FULL_INTERLACE); /* * Terminate access to the vdata and to the VS interface, then close * the HDF file. */ if (VSdetach(vdata_id) == FAIL) printf("*** ERROR from VSdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/000077500000000000000000000000001503061704500177105ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/General_Vdatas.hdf000066400000000000000000000010521503061704500232500ustar00rootroot00000000000000Ê\«&ª+O«z`ªÚOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015VDATASingle-component Field First Vdata 5x1 Array    Multi-component Field Second Vdata 6x4 Arrayhdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/General_Vdatas2.hdf000066400000000000000000000010521503061704500233320ustar00rootroot00000000000000Ê\«&ª+O«z`ªÚOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015VDATASingle-component Field First Vdata 5x1 Array    Multi-component Field Second Vdata 6x4 Arrayhdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/General_Vdatas3.hdf000066400000000000000000000010521503061704500233330ustar00rootroot00000000000000Ê\«&ª+O«z`ªÚOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015VDATASingle-component Field First Vdata 5x1 Array    Multi-component Field Second Vdata 6x4 Arrayhdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/Packed_Vdata.hdf000066400000000000000000000011741503061704500227040ustar00rootroot00000000000000Ê\«&ܪyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015?Ž{?Ž{A@{@{B@U¸@U¸C@Ž{@Ž{D@±™š@±™šE@Õ¸@Õ¸F@ø£×@ø£×GA{A{HA× A× IA1™š A1™šJAC\) AC\)KAU¸ AU¸LAfáH AfáHMAx£× Ax£×NA…33A…33OAŽ{AŽ{PA–õÃA–õÃQAŸ× AŸ× RA¨¸RA¨¸RSA±™šA±™šT  TempHeightSpeedIdentMixed Data VdataGeneral Data Classhdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/Two_Vdatas.hdf000066400000000000000000000005651503061704500224540ustar00rootroot00000000000000Ê\«ÿÿÿÿÿÿÿÿ«ÿÿÿÿÿÿÿÿª&'ªM'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015 Empty Vdatas Empty Vdatashdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_GR_image_info.tst000066400000000000000000000010571503061704500240640ustar00rootroot00000000000000RI# Name Components Type Interlace Dimensions Attributes 0 Image Array 1 2 Int16 MFGR_INTERLACE_PIXEL 10, 5 0 1 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 2 2 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 0 3 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 0 4 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 0 5 Image Array 2 3 Char8 MFGR_INTERLACE_PIXEL 6, 4 0 hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_create_onefield_vdatas.ddl000066400000000000000000000001641503061704500263710ustar00rootroot00000000000000File name: h4ex_VD_create_onefield_vdatas.hdf Graphical representation of the file:- (vg#: vgroup; vd: vdata) hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_create_onefield_vdatas.tst000066400000000000000000000000001503061704500264250ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_create_vdatas.ddl000066400000000000000000000001531503061704500245220ustar00rootroot00000000000000File name: h4ex_VD_create_vdatas.hdf Graphical representation of the file:- (vg#: vgroup; vd: vdata) hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_create_vdatas.tst000066400000000000000000000000001503061704500245600ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_get_vdata_info.tst000066400000000000000000000003711503061704500247370ustar00rootroot00000000000000Vdata First Vdata: - contains 5 records Interlace mode: FULL Fields: Single-component Field - 1 bytes Vdata Second Vdata: - contains 6 records Interlace mode: FULL Fields: Multi-component Field - 16 bytes hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_locate_vdata.tst000066400000000000000000000000601503061704500244070ustar00rootroot00000000000000Fields Position and Temperature were not found. hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_read_from_vdata.tst000066400000000000000000000000641503061704500251020ustar00rootroot00000000000000 Particle Position Temperature Range hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_read_mixed_vdata.tst000066400000000000000000000006221503061704500252450ustar00rootroot00000000000000 Temp Ident 1.11 A 2.22 B 3.33 C 4.44 D 5.55 E 6.66 F 7.77 G 8.88 H 9.99 I 11.10 J 12.21 K 13.32 L 14.43 M 15.54 N 16.65 O 17.76 P 18.87 Q 19.98 R 21.09 S 22.20 T hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_set_get_vdata_attr.tst000066400000000000000000000003751503061704500256350ustar00rootroot00000000000000Number of attributes of the first field of the vdata: -1 Number of attributes of field Mass: -1 Number of attributes of the vdata and its fields: -1 Values of the vdata attribute = Values of the field attribute = 1653116424 32765 1653116208 32765 hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_write_mixed_vdata.ddl000066400000000000000000000001571503061704500254200ustar00rootroot00000000000000File name: h4ex_VD_write_mixed_vdata.hdf Graphical representation of the file:- (vg#: vgroup; vd: vdata) hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_write_mixed_vdata.tst000066400000000000000000000000001503061704500254520ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_write_mixed_vdata_struct.ddl000066400000000000000000000001661503061704500270240ustar00rootroot00000000000000File name: h4ex_VD_write_mixed_vdata_struct.hdf Graphical representation of the file:- (vg#: vgroup; vd: vdata) hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_write_mixed_vdata_struct.tst000066400000000000000000000000001503061704500270560ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VD/testfiles/h4ex_VD_write_to_vdata.tst000066400000000000000000000000001503061704500247660ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/000077500000000000000000000000001503061704500157115ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/CMakeLists.txt000066400000000000000000000126631503061704500204610ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_VG C) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (C_sourcefiles.cmake) foreach (example_name ${h4examples}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () foreach (example_name ${h4examples_use}) add_executable (hdf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (hdf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () foreach (example_name ${h4examples_mf}) add_executable (mf_h4ex_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.c) target_link_libraries (mf_h4ex_${example_name} ${H4EX_HDF4_LINK_LIBS}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST testname testddl dumparg testprefix) add_test ( NAME ${testprefix}_${testname}-clearall COMMAND ${CMAKE_COMMAND} -E remove ${testname}.hdf ) add_test ( NAME ${testprefix}_${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_OUTPUT=${testprefix}_${testname}.out" -D "TEST_REFERENCE=${testprefix}_${testname}.tst" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (${testprefix}_${testname} PROPERTIES DEPENDS ${testprefix}_${testname}-clearall) if (HDF4_BUILD_TOOLS AND ${testddl} STREQUAL "1") add_test ( NAME ${testprefix}_HDP-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=${H4EX_HDF4_DUMP_EXECUTABLE}" -D "TEST_ARGS:STRING=${dumparg};${testname}.hdf" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testprefix}_${testname}.ddl.out" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=${testprefix}_${testname}.ddl" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (${testprefix}_HDP-${testname} PROPERTIES DEPENDS ${testprefix}_${testname}) endif () endmacro () foreach (example_name ${h4examples}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}.tst") if (HDF4_BUILD_TOOLS) add_custom_command ( OUTPUT "${testdest}.ddl" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.ddl" "${testdest}.ddl" DEPENDS "${testsrc}.ddl" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}.ddl") endif () endforeach () foreach (example_name ${h4examples_use}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}.tst") endforeach () foreach (example_name ${h4examples_mf}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/h4ex_${example_name}") set (testdest "${PROJECT_BINARY_DIR}/h4ex_${example_name}") add_custom_command ( OUTPUT "${testdest}.tst" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.tst" "${testdest}.tst" DEPENDS "${testsrc}.tst" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}.tst") if (HDF4_BUILD_TOOLS) add_custom_command ( OUTPUT "${testdest}.ddl" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}.ddl" "${testdest}.ddl" DEPENDS "${testsrc}.ddl" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}.ddl") endif () endforeach () foreach (ex_file ${h4examples_files}) set (testsrc "${PROJECT_SOURCE_DIR}/testfiles/${ex_file}") set (testdest "${PROJECT_BINARY_DIR}/${ex_file}") add_custom_command ( OUTPUT "${testdest}" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${testsrc}" "${testdest}" DEPENDS "${testsrc}" ) list (APPEND HDF4Examples_VG_TEST_FILES "${testdest}") endforeach () add_custom_target (HDF4Examples_HDF_VG-files ALL COMMENT "Copying files needed by VG tests" DEPENDS ${HDF4Examples_VG_TEST_FILES}) foreach (example_name ${h4examples}) ADD_H4_TEST (h4ex_${example_name} 1 dumpvg hdf) endforeach () foreach (example_name ${h4examples_use}) ADD_H4_TEST (h4ex_${example_name} 0 dumpvg hdf) endforeach () foreach (example_name ${h4examples_mf}) ADD_H4_TEST (h4ex_${example_name} 1 dumpvg mf) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/C/VG/C_sourcefiles.cmake000066400000000000000000000010301503061704500214720ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (h4examples VG_create_vgroup ) set (h4examples_use VG_get_vgroup_info VG_insert_vdatas_to_vgroup #VG_set_get_vgroup_attr VG_vgroup_contents ) set (h4examples_mf VG_add_sds_to_vgroup ) set (h4examples_files General_Vgroups.hdf General_Vgroups2.hdf General_Vgroups3.hdf General_Vgroups4.hdf ) hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_add_sds_to_vgroup.c000066400000000000000000000052161503061704500231120ustar00rootroot00000000000000#include #include "hdf.h" /* Note: in this example, hdf.h can be omitted...*/ #include "mfhdf.h" /* ...since mfhdf.h already includes hdf.h */ #define FILE_NAME "h4ex_VG_add_sds_to_vgroup.hdf" #define SDS_NAME "Test SD" #define VG_NAME "SD Vgroup" #define VG_CLASS "Common Vgroups" int main() { /************************* Variable declaration **************************/ int32 sd_id, /* SD interface identifier */ sds_id, /* data set identifier */ sds_ref, /* reference number of the data set */ dim_sizes[1], /* dimension of the data set - only one */ rank = 1, /* rank of the data set array */ vgroup_id, /* vgroup identifier */ file_id; /* HDF file identifier, same for V interface */ /********************** End of variable declaration **********************/ /* * Create the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Initialize the SD interface. */ sd_id = SDstart(FILE_NAME, DFACC_WRITE); /* * Set the size of the SDS's dimension. */ dim_sizes[0] = 10; /* * Create the SDS. */ sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, rank, dim_sizes); /* * Create a vgroup and set its name and class. */ vgroup_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup_id, VG_NAME) == FAIL) printf("*** ERROR from Vsetname\n"); if (Vsetclass(vgroup_id, VG_CLASS) == FAIL) printf("*** ERROR from Vsetclass\n"); /* * Obtain the reference number of the SDS using its identifier. */ sds_ref = SDidtoref(sds_id); /* * Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used * when adding an SDS. Refer to Appendix A for the entire list of tags. */ if (Vaddtagref(vgroup_id, DFTAG_NDG, sds_ref) == FAIL) printf("*** ERROR from Vaddtagref\n"); /* * Terminate access to the SDS and to the SD interface. */ if (SDendaccess(sds_id) == FAIL) printf("*** ERROR from SDendaccess\n"); if (SDend(sd_id) == FAIL) printf("*** ERROR from SDend\n"); /* * Terminate access to the vgroup and to the V interface, and * close the HDF file. */ if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_create_vgroup.c000066400000000000000000000027421503061704500222530ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "h4ex_VG_create_vgroup.hdf" int main() { /************************* Variable declaration **************************/ int32 vgroup_ref = -1; int32 vgroup1_id, vgroup2_id, file_id; /********************** End of variable declaration **********************/ /* * Create the HDF file. */ if ((file_id = Hopen(FILE_NAME, DFACC_CREATE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Create the first vgroup. Note that the vgroup reference number is set * to -1 for creating and the access mode is "w" for writing. */ vgroup1_id = Vattach(file_id, vgroup_ref, "w"); /* * Create the second vgroup. */ vgroup2_id = Vattach(file_id, vgroup_ref, "w"); /* * Any operations on the vgroups. */ /* * Terminate access to the first vgroup. */ if (Vdetach(vgroup1_id) == FAIL) printf("*** ERROR from Vdetach\n"); /* * Terminate access to the second vgroup. */ if (Vdetach(vgroup2_id) == FAIL) printf("*** ERROR from Vdetach\n"); /* * Terminate access to the V interface and close the HDF file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_get_vgroup_info.c000066400000000000000000000072271503061704500226050ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_Vgroups.hdf" int main() { /************************* Variable declaration **************************/ int32 file_id, vgroup_id; int32 lone_vg_number; /* current lone vgroup number */ int32 num_of_lones = 0; /* number of lone vgroups */ int32 *ref_array = NULL; /* buffer to hold the ref numbers of lone vgroups */ char *vgroup_name, *vgroup_class; uint16 name_len; /********************** End of variable declaration **********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get and print the names and class names of all the lone vgroups. * First, call Vlone with num_of_lones set to 0 to get the number of * lone vgroups in the file, but not to get their reference numbers. */ num_of_lones = Vlone(file_id, NULL, num_of_lones); /* * Then, if there are any lone vgroups, */ if (num_of_lones > 0) { /* * use the num_of_lones returned to allocate sufficient space for the * buffer ref_array to hold the reference numbers of all lone vgroups, */ ref_array = (int32 *)malloc(sizeof(int32) * num_of_lones); /* * and call Vlone again to retrieve the reference numbers into * the buffer ref_array. */ num_of_lones = Vlone(file_id, ref_array, num_of_lones); /* * Display the name and class of each lone vgroup. */ fprintf(stderr, "Lone vgroups in this file are:\n"); for (lone_vg_number = 0; lone_vg_number < num_of_lones; lone_vg_number++) { /* * Attach to the current vgroup then get and display its * name and class. Note: the current vgroup must be detached before * moving to the next. */ vgroup_id = Vattach(file_id, ref_array[lone_vg_number], "r"); if (Vgetnamelen(vgroup_id, &name_len) == FAIL) printf("*** ERROR from Vgetnamelen\n"); vgroup_name = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgroup_name == NULL) { fprintf(stderr, "Not enough memory for vgroup_name!\n"); exit(1); } if (Vgetname(vgroup_id, vgroup_name) == FAIL) printf("*** ERROR from Vgetname\n"); if (Vgetclassnamelen(vgroup_id, &name_len) == FAIL) printf("*** ERROR from Vgetclassnamelen\n"); vgroup_class = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgroup_class == NULL) { fprintf(stderr, "Not enough memory for vgroup_class!\n"); exit(1); } if (Vgetclass(vgroup_id, vgroup_class) == FAIL) printf("*** ERROR from Vgetclass\n"); fprintf(stderr, " Vgroup name %s and class %s\n", vgroup_name, vgroup_class); if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); free(vgroup_name); free(vgroup_class); } /* for */ } /* if */ /* * Terminate access to the V interface and close the file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); /* * Free the space allocated by this program. */ free(ref_array); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_insert_vdatas_to_vgroup.c000066400000000000000000000143401503061704500243550ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vgroups3.hdf" #define N_RECORDS 30 /* number of records in the vdatas */ #define ORDER 3 /* order of field FIELD_VD2 */ #define VG_NAME "Vertices" #define VG_CLASS "Vertex Set" #define VD1_NAME "X,Y Coordinates" /* first vdata to hold X,Y...*/ #define VD1_CLASS "Position" /*...values of the vertices */ #define VD2_NAME "Temperature" /* second vdata to hold the...*/ #define VD2_CLASS "Property List" /*...temperature field */ #define VD3_NAME "Node List" /* third vdata to hold...*/ #define VD3_CLASS "Mesh" /*...the list of nodes */ #define FIELD1_VD1 "PX" /* first field of first vdata - X values */ #define FIELD2_VD1 "PY" /* second field of first vdata - Y values */ #define FIELD_VD2 "TMP" /* field of third vdata */ #define FIELD_VD3 "PLIST" /* field of second vdata */ #define FIELDNAME_LIST "PX,PY" /* field name list for first vdata */ /* Note that the second and third vdatas can use the field names as the field name lists unless more fields are added to a vdata. Then a field name list is needed for that vdata */ int main() { /************************* Variable declaration **************************/ int32 file_id, vgroup_id; int32 vdata1_id, vdata2_id, vdata3_id; int8 i, j, k = 0; float32 pxy[N_RECORDS][2] = /* buffer for data of the first vdata */ {{-1.5, 2.3}, {-1.5, 1.98}, {-2.4, .67}, {-3.4, 1.46}, {-.65, 3.1}, {-.62, 1.23}, {-.4, 3.8}, {-3.55, 2.3}, {-1.43, 2.44}, {.23, 1.13}, {-1.4, 5.43}, {-1.4, 5.8}, {-3.4, 3.85}, {-.55, .3}, {-.21, 1.22}, {-1.44, 1.9}, {-1.4, 2.8}, {.94, 1.78}, {-.4, 2.32}, {-.87, 1.99}, {-.54, 4.11}, {-1.5, 1.35}, {-1.4, 2.21}, {-.22, 1.8}, {-1.1, 4.55}, {-.44, .54}, {-1.11, 3.93}, {-.76, 1.9}, {-2.34, 1.7}, {-2.2, 1.21}}; float32 tmp[N_RECORDS]; /* buffer for data of the second vdata */ int16 plist[N_RECORDS][3]; /* buffer for data of the third vdata */ /********************** End of variable declaration ***********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Buffer the data for the second and third vdatas. */ for (i = 0; i < N_RECORDS; i++) for (j = 0; j < ORDER; j++) plist[i][j] = ++k; for (i = 0; i < N_RECORDS; i++) tmp[i] = i * 10.0; /* * Create the vgroup then set its name and class. Note that the vgroup's * reference number is set to -1 for creating and the access mode is "w" for * writing. */ vgroup_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup_id, VG_NAME) == FAIL) printf("*** ERROR from Vsetname\n"); if (Vsetclass(vgroup_id, VG_CLASS) == FAIL) printf("*** ERROR from Vsetclass\n"); /* * Create the first vdata then set its name and class. Note that the vdata's * reference number is set to -1 for creating and the access mode is "w" for * writing. */ vdata1_id = VSattach(file_id, -1, "w"); if (VSsetname(vdata1_id, VD1_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata1_id, VD1_CLASS) == FAIL) printf("*** ERROR from VSsetclass\n"); /* * Introduce and define the fields of the first vdata. */ if (VSfdefine(vdata1_id, FIELD1_VD1, DFNT_FLOAT32, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSfdefine(vdata1_id, FIELD2_VD1, DFNT_FLOAT32, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSsetfields(vdata1_id, FIELDNAME_LIST) == FAIL) printf("*** ERROR from VSsetfields\n"); /* * Write the buffered data into the first vdata with full interlace mode. */ VSwrite(vdata1_id, (uint8 *)pxy, N_RECORDS, FULL_INTERLACE); /* * Insert the vdata into the vgroup using its identifier. */ Vinsert(vgroup_id, vdata1_id); /* * Detach from the first vdata. */ if (VSdetach(vdata1_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * Create, write, and insert the second vdata to the vgroup using * steps similar to those used for the first vdata. */ vdata2_id = VSattach(file_id, -1, "w"); if (VSsetname(vdata2_id, VD2_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata2_id, VD2_CLASS) == FAIL) printf("*** ERROR from VSsetclass\n"); if (VSfdefine(vdata2_id, FIELD_VD2, DFNT_FLOAT32, 1) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSsetfields(vdata2_id, FIELD_VD2) == FAIL) printf("*** ERROR from VSsetfields\n"); VSwrite(vdata2_id, (uint8 *)tmp, N_RECORDS, FULL_INTERLACE); Vinsert(vgroup_id, vdata2_id); if (VSdetach(vdata2_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * Create, write, and insert the third vdata to the vgroup using * steps similar to those used for the first and second vdatas. */ vdata3_id = VSattach(file_id, -1, "w"); if (VSsetname(vdata3_id, VD3_NAME) == FAIL) printf("*** ERROR from VSsetname\n"); if (VSsetclass(vdata3_id, VD3_CLASS) == FAIL) printf("*** ERROR from VSsetclass\n"); if (VSfdefine(vdata3_id, FIELD_VD3, DFNT_INT16, 3) == FAIL) printf("*** ERROR from VSfdefine\n"); if (VSsetfields(vdata3_id, FIELD_VD3) == FAIL) printf("*** ERROR from VSsetfields\n"); VSwrite(vdata3_id, (uint8 *)plist, N_RECORDS, FULL_INTERLACE); Vinsert(vgroup_id, vdata3_id); if (VSdetach(vdata3_id) == FAIL) printf("*** ERROR from VSdetach\n"); /* * Terminate access to the vgroup "Vertices". */ if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); /* * Terminate access to the V interface and close the HDF file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_set_get_vgroup_attr.c000066400000000000000000000064441503061704500234770ustar00rootroot00000000000000#include #include "hdf.h" #define FILE_NAME "General_Vgroups2.hdf" #define VGROUP_NAME "SD Vgroup" #define VGATTR_NAME "First Attribute" #define N_ATT_VALUES 7 /* number of values in the attribute */ int main() { /************************* Variable declaration **************************/ intn n_attrs; /* number of attributes of the vgroup */ int32 file_id, vgroup_ref, vgroup_id, attr_index, i, vg_version, n_values; char vg_attr[N_ATT_VALUES] = {'v', 'g', 'r', 'o', 'u', 'p', '\0'}; char vgattr_buf[N_ATT_VALUES], attr_name[30]; /********************** End of variable declaration **********************/ /* * Open the HDF file for writing. */ if ((file_id = Hopen(FILE_NAME, DFACC_WRITE, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Get the reference number of the vgroup named VGROUP_NAME. */ vgroup_ref = Vfind(file_id, VGROUP_NAME); /* * Attach to the vgroup found. */ vgroup_id = Vattach(file_id, vgroup_ref, "w"); /* * Get and display the version of the attached vgroup. */ vg_version = Vgetversion(vgroup_id); switch (vg_version) { case VSET_NEW_VERSION: printf("\nVgroup %s is of the newest version, version 4\n", VGROUP_NAME); break; case VSET_VERSION: printf("Vgroup %s is of a version between 3.2 and 4.0r2\n", VGROUP_NAME); break; case VSET_OLD_VERSION: printf("Vgroup %s is of version before 3.2\n", VGROUP_NAME); break; default: printf("Unknown version = %d\n", vg_version); } /* switch */ /* * Add the attribute named VGATTR_NAME to the vgroup. */ if (Vsetattr(vgroup_id, VGATTR_NAME, DFNT_CHAR, N_ATT_VALUES, vg_attr) == FAIL) printf("*** ERROR from Vsetattr\n"); /* * Get and display the number of attributes attached to this vgroup. */ n_attrs = Vnattrs(vgroup_id); printf("\nThis vgroup has %d attribute(s)\n", n_attrs); /* * Get and display the name and the number of values of each attribute. * Note that the fourth and last parameters are set to NULL because the type * and the size of the attribute are not desired. */ for (attr_index = 0; attr_index < n_attrs; attr_index++) { if (Vattrinfo(vgroup_id, attr_index, attr_name, NULL, &n_values, NULL) == FAIL) printf("*** ERROR from Vattrinfo\n"); printf("\nAttribute #%d is named %s and has %d values: ", attr_index + 1, attr_name, n_values); /* * Get and display the attribute values. */ if (Vgetattr(vgroup_id, attr_index, vgattr_buf) == FAIL) printf("*** ERROR from Vgetattr\n"); for (i = 0; i < n_values; i++) printf("%c ", vgattr_buf[i]); printf("\n"); } /* * Terminate access to the vgroup and to the V interface, and close * the HDF file. */ if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/h4ex_VG_vgroup_contents.c000066400000000000000000000067361503061704500226540ustar00rootroot00000000000000#include #include #include "hdf.h" #define FILE_NAME "General_Vgroups4.hdf" int main() { /************************* Variable declaration **************************/ int32 file_id, vgroup_id, vgroup_ref; int32 obj_index; /* index of an object within a vgroup */ int32 num_of_pairs; /* number of tag/ref number pairs, i.e., objects */ int32 obj_tag, obj_ref; /* tag/ref number of an HDF object */ int32 vgroup_pos = 0; /* position of a vgroup in the file */ /********************** End of variable declaration ***********************/ /* * Open the HDF file for reading. */ if ((file_id = Hopen(FILE_NAME, DFACC_READ, 0)) == FAIL) printf("*** ERROR from Hopen\n"); /* * Initialize the V interface. */ if (Vstart(file_id) == FAIL) printf("*** ERROR from Vstart\n"); /* * Obtain each vgroup in the file by its reference number, get the * number of objects in the vgroup, and display the information about * that vgroup. */ vgroup_ref = -1; /* set to -1 to search from the beginning of file */ while (TRUE) { /* * Get the reference number of the next vgroup in the file. */ vgroup_ref = Vgetid(file_id, vgroup_ref); /* * Attach to the vgroup for reading or exit the loop if no more vgroups * are found. */ if (vgroup_ref == -1) break; vgroup_id = Vattach(file_id, vgroup_ref, "r"); /* * Get the total number of objects in the vgroup. */ num_of_pairs = Vntagrefs(vgroup_id); /* * If the vgroup contains any object, print the tag/ref number * pair of each object in the vgroup, in the order they appear in the * file, and indicate whether the object is a vdata, vgroup, or neither. */ if (num_of_pairs > 0) { printf("\nVgroup #%d contains:\n", vgroup_pos); for (obj_index = 0; obj_index < num_of_pairs; obj_index++) { /* * Get the tag/ref number pair of the object specified * by its index, obj_index, and display them. */ if (Vgettagref(vgroup_id, obj_index, &obj_tag, &obj_ref) == FAIL) printf("*** ERROR from Vgettagref\n"); printf("tag = %d, ref = %d", obj_tag, obj_ref); /* * State whether the HDF object referred to by obj_ref is a vdata, * a vgroup, or neither. */ if (Visvg(vgroup_id, obj_ref)) printf(" <-- is a vgroup\n"); else if (Visvs(vgroup_id, obj_ref)) printf(" <-- is a vdata\n"); else printf(" <-- neither vdata nor vgroup\n"); } /* for */ } /* if */ else printf("Vgroup #%d contains no HDF objects\n", vgroup_pos); /* * Terminate access to the current vgroup. */ if (Vdetach(vgroup_id) == FAIL) printf("*** ERROR from Vdetach\n"); /* * Move to the next vgroup position. */ vgroup_pos++; } /* while */ /* * Terminate access to the V interface and close the file. */ if (Vend(file_id) == FAIL) printf("*** ERROR from Vend\n"); if (Hclose(file_id) == FAIL) printf("*** ERROR from Hclose\n"); return 0; } hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/000077500000000000000000000000001503061704500177135ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/General_Vgroups.hdf000066400000000000000000000011611503061704500234770ustar00rootroot00000000000000Ê\«&ª*<­f!«ÿÿÿÿÿÿÿÿª‡7j¾½ÂÐÐ ­Ü0­  :­F*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015 ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 SDS variableSDSVar  jjj½Ñ­ªj½ÐTest SDVar0.0­­h4ex_VG_add_sds_to_vgroup.hdfCDF0.0Ð SD VgroupCommon Vgroupshdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/General_Vgroups2.hdf000066400000000000000000000011611503061704500235610ustar00rootroot00000000000000Ê\«&ª*<­f!«ÿÿÿÿÿÿÿÿª‡7j¾½ÂÐÐ ­Ü0­  :­F*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015 ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 SDS variableSDSVar  jjj½Ñ­ªj½ÐTest SDVar0.0­­h4ex_VG_add_sds_to_vgroup.hdfCDF0.0Ð SD VgroupCommon Vgroupshdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/General_Vgroups3.hdf000066400000000000000000000011611503061704500235620ustar00rootroot00000000000000Ê\«&ª*<­f!«ÿÿÿÿÿÿÿÿª‡7j¾½ÂÐÐ ­Ü0­  :­F*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015 ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 SDS variableSDSVar  jjj½Ñ­ªj½ÐTest SDVar0.0­­h4ex_VG_add_sds_to_vgroup.hdfCDF0.0Ð SD VgroupCommon Vgroupshdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/General_Vgroups4.hdf000066400000000000000000000011611503061704500235630ustar00rootroot00000000000000Ê\«&ª*<­f!«ÿÿÿÿÿÿÿÿª‡7j¾½ÂÐÐ ­Ü0­  :­F*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HDF Version 4.2 Release 11-post0, February 16, 2015 ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 SDS variableSDSVar  jjj½Ñ­ªj½ÐTest SDVar0.0­­h4ex_VG_add_sds_to_vgroup.hdfCDF0.0Ð SD VgroupCommon Vgroupshdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_add_sds_to_vgroup.ddl000066400000000000000000000040061503061704500254310ustar00rootroot00000000000000File name: h4ex_VG_add_sds_to_vgroup.hdf Vgroup:0 tag = 1965; reference = 3; name = SD Vgroup; class = Common Vgroups; number of entries = 1; number of attributes = 0 Entries:- #0 (Numeric Data Group) tag = 720; reference = 2; Vgroup:1 tag = 1965; reference = 5; name = fakeDim0; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 4; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = fakeDim0; class = DimVal0.1; total number of attributes = 0. Vgroup:2 tag = 1965; reference = 8; name = Test SD; class = Var0.0; number of entries = 5; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = fakeDim0; class = Dim0.0 number of attributes = 0 #1 (Vdata) tag = 1962; reference = 6; number of records = 0; interlace = 0; fields = [SDS variable]; record size (in bytes) = 4; name = ; class = SDSVar; total number of attributes = 0. #2 (Number type) tag = 106; reference = 7; #3 (SciData dimension record) tag = 701; reference = 7; #4 (Numeric Data Group) tag = 720; reference = 2; Vgroup:3 tag = 1965; reference = 9; name = h4ex_VG_add_sds_to_vgroup.hdf; class = CDF0.0; number of entries = 2; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = fakeDim0; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 8; number of entries = 5; name = Test SD; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Numeric Data Group vg1 -- vd vg2 -- vg1 -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group vg3 -- vg1 -- vd -- vg2 -- vg1 -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_add_sds_to_vgroup.tst000066400000000000000000000000001503061704500254660ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_create_vgroup.ddl000066400000000000000000000007131503061704500245720ustar00rootroot00000000000000File name: h4ex_VG_create_vgroup.hdf Vgroup:0 tag = 1965; reference = 2; name = ; class = ; number of entries = 0; number of attributes = 0 Entries:- None. Vgroup:1 tag = 1965; reference = 3; name = ; class = ; number of entries = 0; number of attributes = 0 Entries:- None. Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_create_vgroup.tst000066400000000000000000000000001503061704500246260ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_get_vgroup_info.tst000066400000000000000000000002171503061704500251670ustar00rootroot00000000000000Lone vgroups in this file are: Vgroup name SD Vgroup and class Common Vgroups Vgroup name h4ex_VG_add_sds_to_vgroup.hdf and class CDF0.0 hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_insert_vdatas_to_vgroup.tst000066400000000000000000000000001503061704500267330ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_set_get_vgroup_attr.tst000066400000000000000000000002361503061704500260620ustar00rootroot00000000000000 Vgroup SD Vgroup is of the newest version, version 4 This vgroup has 1 attribute(s) Attribute #1 is named First Attribute and has 7 values: v g r o u p hdf4-hdf4.3.1/HDF4Examples/C/VG/testfiles/h4ex_VG_vgroup_contents.tst000066400000000000000000000007171503061704500252370ustar00rootroot00000000000000 Vgroup #0 contains: tag = 720, ref = 2 <-- neither vdata nor vgroup Vgroup #1 contains: tag = 1962, ref = 4 <-- is a vdata Vgroup #2 contains: tag = 1965, ref = 5 <-- is a vgroup tag = 1962, ref = 6 <-- is a vdata tag = 106, ref = 7 <-- neither vdata nor vgroup tag = 701, ref = 7 <-- neither vdata nor vgroup tag = 720, ref = 2 <-- neither vdata nor vgroup Vgroup #3 contains: tag = 1965, ref = 5 <-- is a vgroup tag = 1965, ref = 8 <-- is a vgroup hdf4-hdf4.3.1/HDF4Examples/CMakeLists.txt000066400000000000000000000105771503061704500177650ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (H4EXAMPLES C) #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (H4EX_C_DIR ${H4EXAMPLES_SOURCE_DIR}/C) set (H4EX_HDF_FORTRAN_DIR ${H4EXAMPLES_SOURCE_DIR}/hdf/FORTRAN) set (H4EX_MFHDF_FORTRAN_DIR ${H4EXAMPLES_SOURCE_DIR}/mfhdf/FORTRAN) set (H4EX_JAVA_DIR ${H4EXAMPLES_SOURCE_DIR}/JAVA) #----------------------------------------------------------------------------- # Basic HDF4Examples stuff here #----------------------------------------------------------------------------- if (NOT EXAMPLES_EXTERNALLY_CONFIGURED) set (H4EX_RESOURCES_DIR ${H4EXAMPLES_SOURCE_DIR}/config/cmake) include (${H4EX_RESOURCES_DIR}/HDFMacros.cmake) include (${H4EX_RESOURCES_DIR}/HDFExampleMacros.cmake) set (CMAKE_JAVA_INCLUDE_PATH "") SET_HDF_BUILD_TYPE() BASIC_SETTINGS (EX) #----------------------------------------------------------------------------- # HDF4 support #----------------------------------------------------------------------------- HDF4_SUPPORT (TRUE) endif () message (STATUS "HDF4 link libs: ${H4EX_HDF4_LINK_LIBS}") #----------------------------------------------------------------------------- # Option to build JAVA examples #----------------------------------------------------------------------------- option (H4EX_BUILD_JAVA "Build JAVA support" OFF) if (H4EX_BUILD_JAVA) find_package (Java) include (${H4EX_RESOURCES_DIR}/UseJava.cmake) endif () if (WIN32) set(CMAKE_TEST_LIB_DIRECTORY "${HDF4_TOOLS_DIR}") else () set(CMAKE_TEST_LIB_DIRECTORY "${HDF4_LIBRARY_PATH}") endif () #----------------------------------------------------------------------------- # All examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${H4EX_HDF4_INCLUDE_DIRS}" ) #----------------------------------------------------------------------------- # Dashboard and Testing Settings #----------------------------------------------------------------------------- option (H4EX_BUILD_TESTING "Build HDF4 Example Testing" OFF) if (H4EX_BUILD_TESTING) set (DART_TESTING_TIMEOUT 1200 CACHE STRING "Timeout in seconds for each test (default 1200=20minutes)" ) enable_testing () include (CTest) include (${PROJECT_SOURCE_DIR}/CTestConfig.cmake) configure_file (${H4EX_RESOURCES_DIR}/CTestCustom.cmake ${PROJECT_BINARY_DIR}/CTestCustom.ctest @ONLY) endif () #----------------------------------------------------------------------------- # Option to build Fortran examples # Make sure this appears before the CONFIGURE_FILE step # so that fortran name mangling is detected before writing H4config.h #----------------------------------------------------------------------------- # Set default name mangling : overridden by Fortran detection in fortran dir set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) name ## _") set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) name ## __") if (IS_DIRECTORY "${H4EXAMPLES_SOURCE_DIR}/mfhdf/FORTRAN") option (H4EX_BUILD_FORTRAN "Build FORTRAN support" OFF) if (H4EX_BUILD_FORTRAN AND HDF4_BUILD_FORTRAN) set (H4EX_LINK_Fortran_LIBS ${H4EX_HDF4_LINK_LIBS}) if (WIN32) set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) NAME") set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) NAME") endif () else () set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build examples FORTRAN support" FORCE) endif () else () set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build examples FORTRAN support" FORCE) endif () #----------------------------------------------------------------------------- # Option to build JAVA examples #----------------------------------------------------------------------------- if (IS_DIRECTORY "${H4EXAMPLES_SOURCE_DIR}/JAVA") option (H4EX_BUILD_JAVA "Build JAVA support" OFF) else () set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build examples JAVA support" FORCE) endif () #----------------------------------------------------------------------------- # Build examples #----------------------------------------------------------------------------- add_subdirectory (C) if (H4EX_BUILD_FORTRAN AND HDF4_BUILD_FORTRAN) add_subdirectory (FORTRAN) endif () if (H4EX_BUILD_JAVA AND HDF4_BUILD_JAVA) add_subdirectory (JAVA) endif () hdf4-hdf4.3.1/HDF4Examples/CMakePresets.json000066400000000000000000000150741503061704500204430ustar00rootroot00000000000000{ "version": 6, "include": [ "config/cmake-presets/hidden-presets.json" ], "configurePresets": [ { "name": "ci-base-examples", "hidden": true, "cacheVariables": { "CPACK_PACKAGE_VERSION": "3.10.2", "HDF4_NAMESPACE": {"type": "STRING", "value": "hdf4::"}, "HDF4_PACKAGE_NAME": {"type": "STRING", "value": "hdf4"}, "H4EX_BUILD_TESTING": "ON" } }, { "name": "ci-StdJava", "hidden": true, "cacheVariables": { "H4EX_BUILD_JAVA": "ON" } }, { "name": "ci-StdFortran", "hidden": true, "cacheVariables": { "H4EX_BUILD_FORTRAN": "OFF" } }, { "name": "ci-StdShar", "hidden": true, "inherits": ["ci-base", "ci-base-examples"], "cacheVariables": { "BUILD_SHARED_LIBS": "ON", "USE_SHARED_LIBS": "ON" } }, { "name": "ci-StdShar-MSVC", "description": "MSVC Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-MSVC", "ci-StdJava", "ci-StdShar" ] }, { "name": "ci-StdShar-Clang", "description": "Clang Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-Clang", "ci-StdJava", "ci-StdShar" ] }, { "name": "ci-StdShar-GNUC", "description": "GNUC Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-GNUC", "ci-StdJava", "ci-StdShar" ] }, { "name": "ci-StdShar-macos-Clang", "description": "Clang Standard Config for macos (Release)", "inherits": [ "ci-macos-arm64-Release-Clang", "ci-StdJava", "ci-StdShar" ] }, { "name": "ci-StdShar-macos-GNUC", "description": "GNUC Standard Config for macos (Release)", "inherits": [ "ci-macos-arm64-Release-GNUC", "ci-StdJava", "ci-StdShar" ] }, { "name": "ci-StdShar-Intel", "description": "Intel Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-Intel", "ci-StdJava", "ci-StdShar" ] } ], "buildPresets": [ { "name": "ci-StdShar-MSVC", "description": "MSVC Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-MSVC", "inherits": [ "ci-x64-Release-MSVC" ] }, { "name": "ci-StdShar-Clang", "description": "Clang Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-Clang", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-GNUC", "description": "GNUC Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-GNUC", "verbose": true, "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-macos-Clang", "description": "Clang Standard Build for macos-arm64 (Release)", "configurePreset": "ci-StdShar-macos-Clang", "inherits": [ "ci-macos-arm64-Release-Clang" ] }, { "name": "ci-StdShar-macos-GNUC", "description": "GNUC Standard Build for macos-arm64 (Release)", "configurePreset": "ci-StdShar-macos-GNUC", "verbose": true, "inherits": [ "ci-macos-arm64-Release-GNUC" ] }, { "name": "ci-StdShar-Intel", "description": "Intel Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-Intel", "verbose": true, "inherits": [ "ci-x64-Release-Intel" ] } ], "testPresets": [ { "name": "ci-StdShar-MSVC", "configurePreset": "ci-StdShar-MSVC", "inherits": [ "ci-x64-Release-MSVC" ] }, { "name": "ci-StdShar-Clang", "configurePreset": "ci-StdShar-Clang", "inherits": [ "ci-x64-Release-Clang" ] }, { "name": "ci-StdShar-macos-Clang", "configurePreset": "ci-StdShar-macos-Clang", "inherits": [ "ci-macos-arm64-Release-Clang" ], "execution": { "noTestsAction": "error", "timeout": 180, "jobs": 2 } }, { "name": "ci-StdShar-macos-GNUC", "configurePreset": "ci-StdShar-macos-GNUC", "inherits": [ "ci-macos-arm64-Release-GNUC" ] }, { "name": "ci-StdShar-GNUC", "configurePreset": "ci-StdShar-GNUC", "inherits": [ "ci-x64-Release-GNUC" ] }, { "name": "ci-StdShar-win-Intel", "configurePreset": "ci-StdShar-Intel", "inherits": [ "ci-x64-Release-Intel" ], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "ci-StdShar-Intel", "configurePreset": "ci-StdShar-Intel", "inherits": [ "ci-x64-Release-Intel" ] } ], "workflowPresets": [ { "name": "ci-StdShar-MSVC", "steps": [ {"type": "configure", "name": "ci-StdShar-MSVC"}, {"type": "build", "name": "ci-StdShar-MSVC"}, {"type": "test", "name": "ci-StdShar-MSVC"} ] }, { "name": "ci-StdShar-Clang", "steps": [ {"type": "configure", "name": "ci-StdShar-Clang"}, {"type": "build", "name": "ci-StdShar-Clang"}, {"type": "test", "name": "ci-StdShar-Clang"} ] }, { "name": "ci-StdShar-macos-Clang", "steps": [ {"type": "configure", "name": "ci-StdShar-macos-Clang"}, {"type": "build", "name": "ci-StdShar-macos-Clang"}, {"type": "test", "name": "ci-StdShar-macos-Clang"} ] }, { "name": "ci-StdShar-GNUC", "steps": [ {"type": "configure", "name": "ci-StdShar-GNUC"}, {"type": "build", "name": "ci-StdShar-GNUC"}, {"type": "test", "name": "ci-StdShar-GNUC"} ] }, { "name": "ci-StdShar-macos-GNUC", "steps": [ {"type": "configure", "name": "ci-StdShar-macos-GNUC"}, {"type": "build", "name": "ci-StdShar-macos-GNUC"}, {"type": "test", "name": "ci-StdShar-macos-GNUC"} ] }, { "name": "ci-StdShar-Intel", "steps": [ {"type": "configure", "name": "ci-StdShar-Intel"}, {"type": "build", "name": "ci-StdShar-Intel"}, {"type": "test", "name": "ci-StdShar-Intel"} ] }, { "name": "ci-StdShar-win-Intel", "steps": [ {"type": "configure", "name": "ci-StdShar-Intel"}, {"type": "build", "name": "ci-StdShar-Intel"}, {"type": "test", "name": "ci-StdShar-win-Intel"} ] } ] } hdf4-hdf4.3.1/HDF4Examples/COPYING000066400000000000000000000051151503061704500162500ustar00rootroot00000000000000 Copyright Notice and License Terms for Hierarchical Data Format (HDF) Software Library and Utilities --------------------------------------------------------------------------- Hierarchical Data Format (HDF) Software Library and Utilities Copyright 2006-2016 by The HDF Group. NCSA Hierarchical Data Format (HDF) Software Library and Utilities Copyright 1988-2006 by the Board of Trustees of the University of Illinois. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted for any purpose (including commercial purposes) provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or materials provided with the distribution. 3. In addition, redistributions of modified forms of the source or binary code must carry prominent notices stating that the original code was changed and the date of the change. 4. All publications or advertising materials mentioning features or use of this software are asked, but not required, to acknowledge that it was developed by The HDF Group and by the National Center for Supercomputing Applications at the University of Illinois at Urbana-Champaign and credit the contributors. 5. Neither the name of The HDF Group, the name of the University, nor the name of any Contributor may be used to endorse or promote products derived from this software without specific prior written permission from The HDF Group, the University, or the Contributor, respectively. DISCLAIMER: THIS SOFTWARE IS PROVIDED BY THE HDF GROUP AND THE CONTRIBUTORS "AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. In no event shall The HDF Group or the Contributors be liable for any damages suffered by the users arising out of the use of this software, even if advised of the possibility of such damage. --------------------------------------------------------------------------- --------------------------------------------------------------------------- Contributors: National Center for Supercomputing Applications (NCSA) at the University of Illinois, Fortner Software, Unidata Program Center (netCDF), The Independent JPEG Group (JPEG), Jean-loup Gailly and Mark Adler (gzip), and Digital Equipment Corporation (DEC). --------------------------------------------------------------------------- hdf4-hdf4.3.1/HDF4Examples/CTestConfig.cmake000066400000000000000000000025371503061704500203740ustar00rootroot00000000000000## This file should be placed in the root directory of your project. ## Then modify the CMakeLists.txt file in the root directory of your ## project to incorporate the testing dashboard. ## # The following are required to uses Dart and the Cdash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) set (CTEST_PROJECT_NAME "HDF4EXAMPLES") set (CTEST_NIGHTLY_START_TIME "18:00:00 CST") set (CTEST_DROP_METHOD "https") if (CTEST_DROP_SITE_INIT) set (CTEST_DROP_SITE "${CTEST_DROP_SITE_INIT}") else () set (CTEST_DROP_SITE "cdash.hdfgroup.org") endif () if (CTEST_DROP_LOCATION_INIT) set (CTEST_DROP_LOCATION "${CTEST_DROP_LOCATION_INIT}") else () set (CTEST_DROP_LOCATION "/submit.php?project=HDF4EXAMPLES") endif () set (CTEST_DROP_SITE_CDASH TRUE) set(CTEST_LABELS_FOR_SUBPROJECTS HDF MFHDF JAVA) set (UPDATE_TYPE git) set (VALGRIND_COMMAND "/usr/bin/valgrind") set (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe") set (CTEST_TEST_TIMEOUT 3600 CACHE STRING "Maximum time allowed before CTest will kill the test.") set (DART_TESTING_TIMEOUT 3600 CACHE STRING "Maximum time allowed before CTest will kill the test." FORCE) set (CTEST_SUBMIT_RETRY_DELAY 20 CACHE STRING "How long to wait between timed-out CTest submissions.") hdf4-hdf4.3.1/HDF4Examples/FORTRAN/000077500000000000000000000000001503061704500163265ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/000077500000000000000000000000001503061704500166245ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/CMakeLists.txt000066400000000000000000000066451503061704500213770ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_AN_F Fortran) # -------------------------------------------------------------------- # Notes: When creating examples they should be prefixed # with "f_an". This allows for easier filtering of the examples. # -------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () #----------------------------------------------------------------------------- # Setup include Directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_Fortran_MODULE_DIRECTORY}${H4EX_MOD_EXT};${PROJECT_BINARY_DIR};${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Fortran_sourcefiles.cmake) # Remove any output file left over from previous test run add_test ( NAME AN_FORTRAN_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove General_HDFobjects.hdf General_RImages.hdf General_Vdatas.hdf General_Vgroups.hdf Image_with_Palette.hdf Packed_Vdata.hdf Two_Vdatas.hdf Two_Vgroups.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (AN_FORTRAN_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (AN_FORTRAN_EXAMPLES-clearall-objects PROPERTIES LABELS EXAMPLES) endif () set (last_test "AN_FORTRAN_EXAMPLES-clearall-objects") foreach (example_name ${examples}) add_executable (${EXAMPLE_VARNAME}_f_an_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_an_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_an_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_an_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_an_${example_name} PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (${EXAMPLE_VARNAME}_f_an_${example_name} PROPERTIES LABELS EXAMPLES) endif () set (last_test "${EXAMPLE_VARNAME}_f_ant_${example_name}") endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/Fortran_sourcefiles.cmake000066400000000000000000000004441503061704500236460ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples AN_create_annotation AN_get_annotation_info AN_read_annotation ) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/h4ex_AN_create_annotation.f000066400000000000000000000073631503061704500240070ustar00rootroot00000000000000 program create_annotation implicit none C C Parameter declaration C character*22 FILE_NAME character*9 VG_NAME character*19 FILE_LABEL_TXT character*53 FILE_DESC_TXT character*16 DATA_LABEL_TXT character*54 DATA_DESC_TXT C parameter (FILE_NAME = 'General_HDFobjects.hdf', + VG_NAME = 'AN Vgroup', + FILE_LABEL_TXT = 'General HDF objects', + DATA_LABEL_TXT = 'Common AN Vgroup', + FILE_DESC_TXT = + 'This is an HDF file that contains general HDF objects', + DATA_DESC_TXT = + 'This is a vgroup that is used to test data annotations') integer DFACC_CREATE parameter (DFACC_CREATE = 4) integer AN_FILE_LABEL, AN_FILE_DESC, AN_DATA_LABEL, AN_DATA_DESC parameter (AN_FILE_LABEL = 2, + AN_FILE_DESC = 3, + AN_DATA_LABEL = 0, + AN_DATA_DESC = 1) C C Function declaration C integer hopen, hclose integer afstart, affcreate, afwriteann, afcreate, + afendaccess, afend integer vfstart, vfatch, vfsnam, vqref, vqtag, vfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, an_id integer file_label_id, file_desc_id integer data_label_id, data_desc_id integer vgroup_id, vgroup_tag, vgroup_ref C C**** End of variable declaration ************************************ C C C Create the HDF file. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) C C Initialize the AN interface. C an_id = afstart(file_id) C C Create the file label. C file_label_id = affcreate(an_id, AN_FILE_LABEL) C C Write the annotation to the file label. C status = afwriteann(file_label_id, FILE_LABEL_TXT, + len(FILE_LABEL_TXT)) C C Create file description. C file_desc_id = affcreate(an_id, AN_FILE_DESC) C C Write the annotation to the file description. C status = afwriteann(file_desc_id, FILE_DESC_TXT, + len(FILE_DESC_TXT)) C C Create a vgroup in the file. Note that the vgroup's ref number is C set to -1 for creating and the access mode is 'w' for writing. C status = vfstart(file_id) vgroup_id = vfatch(file_id, -1, 'w') status = vfsnam(vgroup_id, VG_NAME) C C Obtain the tag and reference number of the vgroup for subsequent C references. C vgroup_ref = vqref(vgroup_id) vgroup_tag = vqtag(vgroup_id) C C Create the data label for the vgroup identified by its tag and ref C number. C data_label_id = afcreate(an_id, vgroup_tag, vgroup_ref, + AN_DATA_LABEL) C C Write the annotation text to the data label. C status = afwriteann(data_label_id, DATA_LABEL_TXT, + len(DATA_LABEL_TXT)) C C Create the data description for the vgroup identified by its tag and ref. C data_desc_id = afcreate(an_id, vgroup_tag, vgroup_ref, + AN_DATA_DESC) C C Write the annotation text to the data description. C status = afwriteann(data_desc_id, DATA_DESC_TXT, + len(DATA_DESC_TXT)) C C Terminate access to the vgroup and to the V interface. C status = vfdtch(vgroup_id) status = vfend(file_id) C C Terminate access to each annotation explicitly. C status = afendaccess(file_label_id) status = afendaccess(file_desc_id) status = afendaccess(data_label_id) status = afendaccess(data_desc_id) C C Terminate access to the AN interface and close the HDF file. C status = afend(an_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/h4ex_AN_get_annotation_info.f000066400000000000000000000071371503061704500243350ustar00rootroot00000000000000 program annotation_info implicit none C C Parameter declaration C character*22 FILE_NAME character*9 VG_NAME C parameter (FILE_NAME = 'General_HDFobjects.hdf', + VG_NAME = 'AN Vgroup') integer DFACC_READ parameter (DFACC_READ = 1) integer AN_FILE_LABEL, AN_DATA_LABEL, AN_DATA_DESC parameter (AN_FILE_LABEL = 2, + AN_DATA_LABEL = 0, + AN_DATA_DESC = 1) integer DFTAG_DIA, DFTAG_FID, DFTAG_DIL parameter (DFTAG_DIA = 105, + DFTAG_FID = 100, + DFTAG_DIL = 104) integer DFTAG_VG parameter (DFTAG_VG = 1965) C C Function declaration C integer hopen, hclose integer afstart, afnumann, afannlist, afidtagref, aftagatype, + afatypetag, afend integer vfstart, vfind C C**** Variable declaration ******************************************* C integer status integer file_id, an_id integer n_annots, ann_index, annot_type, ann_tag, ann_ref integer ann_list(10) integer vgroup_tag, vgroup_ref C C**** End of variable declaration ************************************ C annot_type = AN_DATA_DESC vgroup_tag = DFTAG_VG C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Get the group named VG_NAME. C vgroup_ref = vfind(file_id, VG_NAME) C C Initialize the AN interface. C an_id = afstart(file_id) C C Get the number of object descriptions. C if (vgroup_ref .eq. -1) goto 100 n_annots = afnumann(an_id, annot_type, vgroup_tag, vgroup_ref) C C Get the list of identifiers of the annotations attached to the C vgroup and of type annot_type. Identifiers are read into ann_list C buffer. One has to make sure that ann_list has the size big enough C to hold the list of identifiers. C n_annots = afannlist(an_id, annot_type, vgroup_tag, vgroup_ref, + ann_list) C C Get each annotation identifier from the list then display the C tag/ref number pair of the corresponding annotation. C write(*,*) 'List of annotations of type AN_DATA_DESC' do 10 ann_index = 0, n_annots - 1 C C Get and display the ref number of the annotation from its C identifier. C status = afidtagref(ann_list(ann_index+1), ann_tag, ann_ref) write(*,*) 'Annotation index: ', ann_index if (ann_tag .eq. DFTAG_DIA) then write(*,*) 'tag = DFTAG_DIA (data description)' else write(*,*) ' tag = Incorrect' endif write(*,*) 'reference number = ', ann_ref 10 continue C C Get and display an annotation type from an annotation tag. C annot_type = aftagatype(DFTAG_FID) if (annot_type .eq. AN_FILE_LABEL) then write(*,*) 'Annotation type of DFTAG_FID (file label) is ', + 'AN_FILE_LABEL ' else write(*,*) 'Annotation type of DFTAG_FID (file label) is ', + 'Incorrect' endif C C Get and display an annotation tag from an annotation type. C ann_tag = afatypetag(AN_DATA_LABEL) if (ann_tag .eq. DFTAG_DIL ) then write(*,*) 'Annotation tag of AN_DATA_LABEL is ', + 'DFTAG_DIL (data label)' else write(*,*) 'Annotation type of DFTAG_FID (file label) is ', + 'Incorrect' endif C C Terminate access to the AN interface and close the HDF file. C 100 continue status = afend(an_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/AN/h4ex_AN_read_annotation.f000066400000000000000000000047711503061704500234570ustar00rootroot00000000000000 program read_annotation implicit none C C Parameter declaration C character*22 FILE_NAME C parameter (FILE_NAME = 'General_HDFobjects.hdf') integer DFACC_READ parameter (DFACC_READ = 1) integer AN_DATA_LABEL parameter (AN_DATA_LABEL = 0) C C Function declaration C integer hopen, hclose integer afstart, affileinfo, afselect, afannlen, afreadann, + afendaccess, afend C C**** Variable declaration ******************************************* C integer status integer file_id, an_id, ann_id integer index, ann_length integer n_file_labels, n_file_descs, n_data_labels, n_data_descs character*256 ann_buf C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the AN interface. C an_id = afstart(file_id) C C Get the annotation information, i.e., the number of file labels, C file descriptions, data labels, and data descriptions. C status = affileinfo(an_id, n_file_labels, n_file_descs, + n_data_labels, n_data_descs) C C Get the data labels. Note that this DO loop can be used to obtain C the contents of each kind of annotation with the appropriate number C of annotations and the type of annotation, i.e., replace C n_data_labels with n_file_labels, n_files_descs, or n_data_descs, and C AN_DATA_LABEL with AN_FILE_LABEL, AN_FILE_DESC, or AN_DATA_DESC, C respectively. C do 10 index = 0, n_data_labels-1 C C Get the identifier of the current data label. C ann_id = afselect(an_id, index, AN_DATA_LABEL) C C Get the length of the data label. C ann_length = afannlen(ann_id) C C Read and display the data label. The data label is read into buffer C ann_buf. One has to make sure that ann_buf has sufficient size to hold C the data label. Also note, that the third argument to afreadann is C 1 greater that the actual length of the data label (see comment to C C example). C status = afreadann(ann_id, ann_buf, ann_length+1) write(*,*) 'Data label index: ', index write(*,*) 'Data label contents: ', ann_buf(1:ann_length) 10 continue C C Terminate access to the current data label. C status = afendaccess(ann_id) C C Terminate access to the AN interface and close the HDF file. C status = afend(an_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/CMakeLists.txt000066400000000000000000000007231503061704500210700ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_F Fortran) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- add_subdirectory (${PROJECT_SOURCE_DIR}/AN) add_subdirectory (${PROJECT_SOURCE_DIR}/GR) add_subdirectory (${PROJECT_SOURCE_DIR}/VD) add_subdirectory (${PROJECT_SOURCE_DIR}/VG) add_subdirectory (${PROJECT_SOURCE_DIR}/SD) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/000077500000000000000000000000001503061704500166365ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/CMakeLists.txt000066400000000000000000000066511503061704500214060ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_GR_F Fortran) # -------------------------------------------------------------------- # Notes: When creating examples they should be prefixed # with "f_gr". This allows for easier filtering of the examples. # -------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () #----------------------------------------------------------------------------- # Setup include Directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_Fortran_MODULE_DIRECTORY}${H4EX_MOD_EXT};${PROJECT_BINARY_DIR};${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Fortran_sourcefiles.cmake) # Remove any output file left over from previous test run add_test ( NAME GR_FORTRAN_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove General_HDFobjects.hdf General_RImages.hdf General_Vdatas.hdf General_Vgroups.hdf Image_with_Palette.hdf Packed_Vdata.hdf Two_Vdatas.hdf Two_Vgroups.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (GR_FORTRAN_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (GR_FORTRAN_EXAMPLES-clearall-objects PROPERTIES LABELS EXAMPLES) endif () set (last_test "GR_FORTRAN_EXAMPLES-clearall-objects") foreach (example_name ${examples}) add_executable (${EXAMPLE_VARNAME}_f_gr_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_gr_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_gr_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_gr_test_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_gr_${example_name} PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (${EXAMPLE_VARNAME}_f_gr_${example_name} PROPERTIES LABELS EXAMPLES) endif () set (last_test "${EXAMPLE_VARNAME}_f_gr_${example_name}") endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/Fortran_sourcefiles.cmake000066400000000000000000000006241503061704500236600ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples GR_create_and_write_image GR_create_and_write_chunked_image GR_modify_image GR_set_attribute GR_get_attribute GR_write_palette GR_image_info GR_read_image ) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_create_and_write_chunked_image.f000066400000000000000000000067631503061704500265030ustar00rootroot00000000000000 program gr_chunking_example implicit none C C Parameter declaraction C character*14 FILE_NAME character*14 DATASET_NAME parameter (FILE_NAME = 'gr_chunked.hdf', . DATASET_NAME = 'gzip_comp_data') integer NCOMP, MFGR_INTERLACE_PIXEL parameter(NCOMP = 3, MFGR_INTERLACE_PIXEL = 0) integer DFACC_CREATE, DFACC_READ, DFACC_WRITE parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) integer DFNT_INT32 parameter (DFNT_INT32 = 24) integer X_LENGTH, Y_LENGTH, X_CH_LENGTH, Y_CH_LENGTH parameter (X_LENGTH = 6, . Y_LENGTH = 10, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C Compression parameters. C integer COMP_CODE_DEFLATE, DEFLATE_LEVEL parameter( COMP_CODE_DEFLATE = 4, DEFLATE_LEVEL = 6) C C Function declaration. C integer mgstart, mgcreat, mgendac, mgend integer mgwchnk, mgschnk integer hopen, hclose C C**** Variable declaration ************************************************* C integer ri_id, gr_id, file_id integer dims(2), start(2) integer status, il integer comp_prm(1), comp_type C C Data buffers. C integer*4 chunk11(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 chunk21(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 chunk52(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) C C Chunking dimension arrays C integer ch_dims(2) C C**** End of variable declaration ****************************************** C C C Data initialization C data chunk11 / 110, 111, 112, 120, 121, 122, . 130, 131, 132, 140, 141, 142, . 150, 151, 152, 160, 161, 162 . /, . chunk21 / . 210, 211, 212, 220, 221, 222, . 230, 231, 232, 240, 241, 242, . 250, 251, 252, 260, 261, 262 . /, . chunk52 / . 1010, 1011, 1012, 1020, 1021, 1022, . 1030, 1031, 1032, 1040, 1041, 1042, . 1050, 1051, 1052, 1060, 1061, 1062 . / C C Define chunk dimensions. C ch_dims(1) = Y_CH_LENGTH ch_dims(2) = X_CH_LENGTH C C Create and open the file and initiate GR interface.. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) gr_id = mgstart(file_id) C C Define the number of components and dimensions of the image. C il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C C Create GR dataset. C ri_id = mgcreat(gr_id, DATASET_NAME, NCOMP, DFNT_INT32, il, dims) C C Define chunked GR dataset using GZIP compression. C comp_prm(1) = DEFLATE_LEVEL comp_type = COMP_CODE_DEFLATE status = mgschnk (ri_id, ch_dims, comp_type, comp_prm) C C Define the location of the first chunk and write the data. C start(1) = 1 start(2) = 1 status = mgwchnk(ri_id, start, chunk11) C C Define the location of the second chunk and write the data. C start(1) = 2 start(2) = 1 status = mgwchnk(ri_id, start, chunk21) C C Define the location of the third and write the data. C start(1) = 5 start(2) = 2 status = mgwchnk(ri_id, start, chunk52) C C Terminate access to the array. C status = mgendac(ri_id) C C Terminate access to the GR interface. C status = mgend(gr_id) C C Close the file. C status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_create_and_write_image.f000066400000000000000000000046151503061704500247740ustar00rootroot00000000000000 program create_raster_image implicit none C C Parameter declaration C character*19 FILE_NAME character*13 IMAGE_NAME integer X_LENGTH integer Y_LENGTH integer N_COMPS C parameter (FILE_NAME = 'General_RImages.hdf', + IMAGE_NAME = 'Image Array 1', + X_LENGTH = 10, + Y_LENGTH = 5, + N_COMPS = 2) integer DFACC_CREATE, DFNT_INT16, MFGR_INTERLACE_PIXEL parameter (DFACC_CREATE = 4, + DFNT_INT16 = 22, + MFGR_INTERLACE_PIXEL = 0) C C Function declaration C integer hopen, hclose integer mgstart, mgcreat, mgwrimg, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id integer gr_id, ri_id, num_type, interlace_mode integer start(2), stride(2), edges(2), dimsizes(2) integer i, j, k integer*2 image_buf(N_COMPS, X_LENGTH, Y_LENGTH) C C**** End of variable declaration ************************************ C C C Create and open the file. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Set the number type, interlace mode, and dimensions of the image. C num_type = DFNT_INT16 interlace_mode = MFGR_INTERLACE_PIXEL dimsizes(1) = X_LENGTH dimsizes(2) = Y_lENGTH C C Create the raster image array. C ri_id = mgcreat(gr_id, IMAGE_NAME, N_COMPS, num_type, + interlace_mode, dimsizes) C C Fill the image data buffer with values. C do 30 i = 1, Y_LENGTH do 20 j = 1, X_LENGTH do 10 k = 1, N_COMPS image_buf(k,j,i) = (i+j) - 1 10 continue 20 continue 30 continue C C Define the size of the data to be written, i.e., start from the origin C and go as long as the length of each dimension. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Write the data in the buffer into the image array. C status = mgwrimg(ri_id, start, stride, edges, image_buf) C C Terminate access to the raster image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_get_attribute.f000066400000000000000000000052761503061704500232010ustar00rootroot00000000000000 program get_attribute implicit none C C Parameter declaration C character*19 FILE_NAME character*17 RI_ATTR_NAME C parameter (FILE_NAME = 'General_RImages.hdf', + RI_ATTR_NAME = 'Image Attribute 2') integer DFACC_READ, DFNT_INT16, DFNT_CHAR8 parameter (DFACC_READ = 1, + DFNT_CHAR8 = 4, + DFNT_INT16 = 22) C C Function declaration C integer hopen, hclose integer mgstart, mgfinfo, mgatinf, mggcatt, mggnatt , mgfndat, + mgselct, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id, gr_id, ri_id integer f_att_index, ri_att_index, data_type, n_values integer n_rimages, n_file_attrs integer*2 int_buf(10) character*17 attr_name character*80 char_buf integer i C C**** End of variable declaration ************************************ C C C Open the HDF file. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Determine the number of attributes in the file. C status = mgfinfo(gr_id, n_rimages, n_file_attrs) if ((status .NE. -1) .AND. (n_file_attrs .GT. 0)) then do 10 f_att_index = 0, n_file_attrs-1 C C Get information about the current file attribute. C attr_name = ' ' status = mgatinf(gr_id, f_att_index, attr_name, data_type, + n_values) C C Check whether data type is DFNT_CHAR8 in order to use allocated buffer. C if(data_type .NE. DFNT_CHAR8) then write(*,*) + 'Unable to determine data type to use allocated buffer' else C C Read and display the attribute values. C status = mggcatt(gr_id, f_att_index, char_buf) write(*,*) 'Attribute ', attr_name, ' : ', + char_buf(1:n_values) endif 10 continue endif C C Select the second image in the file. C ri_id = mgselct(gr_id, 1) C C Find the image attribute named RI_ATTR_NAME. C ri_att_index = mgfndat(ri_id, RI_ATTR_NAME) C C Get information about the attribute. C status = mgatinf(ri_id, ri_att_index, attr_name, data_type, + n_values) C C Read and display attribute values. C status = mggnatt(ri_id, ri_att_index, int_buf) write(*,*) 'Attributes :', (int_buf(i), i = 1, n_values) C C Terminate access to the image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_image_info.f000066400000000000000000000051121503061704500224210ustar00rootroot00000000000000 program image_info implicit none C C Parameter declaration C character*19 FILE_NAME C parameter (FILE_NAME = 'General_RImages.hdf') integer DFACC_READ parameter (DFACC_READ = 1) C C Function declaration C integer hopen, hclose integer mgstart, mgselct, mgfinfo, mggiinf, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id, gr_id, ri_id integer n_rimages, n_file_attrs, ri_index integer n_comps, interlace_mode, n_attrs, data_type integer dim_sizes(2) character*10 type_string character*24 interlace_string character*64 name C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Determine the contents of the file. C status = mgfinfo(gr_id, n_rimages, n_file_attrs) C C For each image in the file, get and display image information. C do 100 ri_index = 0, n_rimages-1 ri_id = mgselct(gr_id, ri_index) name = ' ' status = mggiinf(ri_id, name, n_comps, data_type, + interlace_mode, dim_sizes, n_attrs) C C Map the number type and interlace mode into text strings for C output readability. C if(data_type .eq. 4) then type_string = 'DFNT_CHAR8' else if(data_type .eq. 22) then type_string = 'DFNT_INT16' else type_string = 'Unknown' endif if (interlace_mode .eq. 0) then interlace_string = 'MFGR_INTERLACE_PIXEL' else if(interlace_mode .eq. 1) then interlace_string = 'MFGR_INTERLACE_LINE' else if(interlace_mode .eq. 2) then interlace_string = 'MFGR_INTERLACE_COMPONENT' else interlace_string = 'Unknown' endif C C Display the image information for the current image. C write(*,*) 'Image index: ', ri_index write(*,*) 'Image name: ', name write(*,*) 'Number of components: ', n_comps write(*,*) 'Number type: ', type_string write(*,*) 'Interlace mode: ', interlace_string write(*,*) 'Dimnesions: ', dim_sizes(1), dim_sizes(2) write(*,*) 'Number of image attributes: ', n_attrs write(*,*) C C Terminate access to the current raster image. C status = mgendac(ri_id) 100 continue C C Terminate access to the GR interface and close the HDF file. status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_modify_image.f000066400000000000000000000071451503061704500227650ustar00rootroot00000000000000 program modify_image implicit none C C Parameter declaration C character*19 FILE_NAME character*13 IMAGE1_NAME integer X1_LENGTH integer Y1_LENGTH integer N1_COMPS character*13 IMAGE2_NAME integer X2_LENGTH integer Y2_LENGTH integer N2_COMPS C parameter (FILE_NAME = 'General_RImages.hdf', + IMAGE1_NAME = 'Image Array 1', + IMAGE2_NAME = 'Image Array 2', + X1_LENGTH = 5, + Y1_LENGTH = 2, + N1_COMPS = 2, + X2_LENGTH = 6, + Y2_LENGTH = 4, + N2_COMPS = 3) integer DFACC_WRITE, DFNT_INT16, DFNT_CHAR8, + MFGR_INTERLACE_PIXEL parameter (DFACC_WRITE = 2, + DFNT_CHAR8 = 4, + DFNT_INT16 = 22, + MFGR_INTERLACE_PIXEL = 0) C C Function declaration C integer hopen, hclose integer mgstart, mgselct, mgcreat, mgwrimg, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id integer gr_id, ri1_id, ri2_id, data_type, interlace_mode integer start1(2), stride1(2), edges1(2) integer start2(2), stride2(2), edges2(2), dim_sizes(2) integer i, j, k integer*2 image1_buf(N1_COMPS, X1_LENGTH, Y1_LENGTH) character image2_buf(N2_COMPS, X2_LENGTH, Y2_LENGTH) C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Select the first raster image in the file. C ri1_id = mgselct(gr_id, 0) C C Fill the buffer with values. C do 20 i = 1, Y1_LENGTH do 10 j = 1, X1_LENGTH image1_buf(1,j,i) = 0 image1_buf(2,j,i) = 0 10 continue 20 continue C C Define the part of the data in the first image that will be overwritten C with the new values from image1_buf. C start1(1) = 0 start1(2) = 0 edges1(1) = X1_LENGTH edges1(2) = Y1_LENGTH stride1(1) = 1 stride1(2) = 1 C C Write the data in the buffer into the image array. C status = mgwrimg(ri1_id, start1, stride1, edges1, image1_buf) C C Set the number type, interlace mode, and dimensions of the second image. C data_type = DFNT_CHAR8 interlace_mode = MFGR_INTERLACE_PIXEL dim_sizes(1) = X2_LENGTH dim_sizes(2) = Y2_LENGTH C C Create the second image in the file. C ri2_id = mgcreat(gr_id, IMAGE2_NAME, N2_COMPS, data_type, + interlace_mode, dim_sizes) C C Fill the image data buffer with values. C do 60 i = 1, Y2_LENGTH do 50 j = 1, X2_LENGTH do 40 k = 1, N2_COMPS image2_buf(k,j,i) = char(65 + k - 1) 40 continue 50 continue 60 continue C C Define the size of the data to be written, i.e., start from the origin C and go as long as the length of each dimension. C start2(1) = 0 start2(2) = 0 edges2(1) = dim_sizes(1) edges2(2) = dim_sizes(2) stride2(1) = 1 stride2(2) = 1 C C Write the data in the buffer into the image array. C status = mgwrimg(ri2_id, start2, stride2, edges2, image2_buf) C C Terminate access to the raster images and to the GR interface, C and close the HDF file. C status = mgendac(ri1_id) status = mgendac(ri2_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_read_image.f000066400000000000000000000074341503061704500224120ustar00rootroot00000000000000 program read_raster_image implicit none C C Parameter declaration C character*19 FILE_NAME integer X_LENGTH integer Y_LENGTH integer N_COMPS C parameter (FILE_NAME = 'General_RImages.hdf', + X_LENGTH = 10, + Y_LENGTH = 5, + N_COMPS = 2) integer PART_COLS, PART_ROWS, SKIP_COLS, SKIP_ROWS integer COLS_PART_START, ROWS_PART_START integer COLS_SKIP_START, ROWS_SKIP_START integer N_STRIDES parameter (PART_COLS = 3, PART_ROWS = 2, + SKIP_COLS = 3, SKIP_ROWS = 5, + COLS_PART_START = 1, ROWS_PART_START = 3, + COLS_SKIP_START = 0, ROWS_SKIP_START = 1, + N_STRIDES = 2) integer DFACC_READ parameter (DFACC_READ = 1) C C Function declaration C integer hopen, hclose integer mgstart, mgselct, mgrdimg, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id integer gr_id, ri_id integer start(2), stride(2), edges(2) integer i, j integer*2 entire_image(N_COMPS, X_LENGTH, Y_LENGTH) integer*2 partial_image(N_COMPS, PART_ROWS, PART_COLS) integer*2 skipped_image(N_COMPS, SKIP_ROWS, SKIP_COLS) C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Select the first raster image in the file. C ri_id = mgselct(gr_id, 0) C C Define the size of the data to be read, i.e., start from the origin C and go as long as the length of each dimension. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Read the data from the raster image array. C status = mgrdimg(ri_id, start, stride, edges, entire_image) C C Display only the first component of the image since the two components C have the same data in this example. C write(*,*) 'First component of the entire image' write(*,*) do 10 i = 1, X_LENGTH write(*,1000) (entire_image(1,i,j), j = 1, Y_LENGTH) 10 continue write(*,*) C C Define the size of the data to be read. C start(1) = ROWS_PART_START start(2) = COLS_PART_START edges(1) = PART_ROWS edges(2) = PART_COLS stride(1) = 1 stride(2) = 1 C C Read a subset of the raster image array. C status = mgrdimg(ri_id, start, stride, edges, partial_image) C C Display only the first component of the read sample. C write(*,*) + 'Two rows and three columns at 4th row and 2nd column', + ' of the first component' write(*,*) do 20 i = 1, PART_ROWS write(*,1000) (partial_image(1,i,j), j = 1, PART_COLS) 20 continue write(*,*) C C Define the size and the pattern to read the data. C start(1) = ROWS_SKIP_START start(2) = COLS_SKIP_START edges(1) = SKIP_ROWS edges(2) = SKIP_COLS stride(1) = N_STRIDES stride(2) = N_STRIDES C C Read all the odd rows and even columns of the image. C status = mgrdimg(ri_id, start, stride, edges, skipped_image) C C Display only the first component of the read sample. C write(*,*) 'All even rows and odd columns of the first component' write(*,*) do 30 i = 1, SKIP_ROWS write(*,1000) (skipped_image(1,i,j), j = 1, SKIP_COLS) 30 continue write(*,*) C C Terminate access to the raster image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) 1000 format(1x, 5(I4)) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_read_palette.f000066400000000000000000000043661503061704500227670ustar00rootroot00000000000000 program read_palette implicit none C C Parameter declaration C character*22 FILE_NAME character*18 IMAGE_NAME integer N_ENTRIES integer N_COMPS_PAL C parameter (FILE_NAME = 'Image_with_Palette.hdf', + IMAGE_NAME = 'Image with Palette', + N_COMPS_PAL = 3, + N_ENTRIES = 256) integer DFACC_READ, DFNT_CHAR8, DFNT_UINT8, MFGR_INTERLACE_PIXEL parameter (DFACC_READ = 1, + DFNT_CHAR8 = 4, + DFNT_UINT8 = 21, + MFGR_INTERLACE_PIXEL = 0) C C Function declaration C integer hopen, hclose integer mgstart, mgn2ndx, mgselct, mggltid, mgglinf, + mgrclut, mgendac, mgend C C**** Variable declaration ******************************************* C integer file_id, gr_id, ri_id, ri_index, pal_id, pal_index integer interlace_mode integer data_type, n_comps, n_entries_out integer status integer i, j character palette_data(N_COMPS_PAL, N_ENTRIES) C C**** End of variable declaration ************************************ C C C Open the file. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Get the index of the image IMAGE_NAME. C ri_index = mgn2ndx(gr_id, IMAGE_NAME) C C Get the image identifier. C ri_id = mgselct(gr_id, 0) C C Get the identifier of the palette attached to the image. C pal_index = 0 pal_id = mggltid(ri_id, pal_index) C C Obtain information about the palette. C status = mgglinf(pal_id, n_comps, data_type, interlace_mode, + n_entries_out) write(*,*) ' Palette: ', n_comps, ' components; ', + n_entries_out, ' entries' C C Read the palette. C status = mgrclut(pal_id, palette_data) C C Display the palette data. C write(*,*) "Palette data" do 10 i = 1, n_entries_out write(*,*) (ichar(palette_data(j,i)), j = 1, n_comps) 10 continue C C Terminate access to the raster image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_set_attribute.f000066400000000000000000000057741503061704500232200ustar00rootroot00000000000000 program set_attribute implicit none C C Parameter declaration C character*19 FILE_NAME character*13 IMAGE_NAME character*16 F_ATT1_NAME character*16 F_ATT2_NAME character*17 RI_ATT1_NAME character*17 RI_ATT2_NAME character*32 F_ATT1_VAL character*33 F_ATT2_VAL integer F_ATT1_N_VALUES integer F_ATT2_N_VALUES character*35 RI_ATT1_VAL integer RI_ATT1_N_VALUES integer RI_ATT2_N_VALUES C parameter (FILE_NAME = 'General_RImages.hdf', + IMAGE_NAME = 'Image Array 2', + F_ATT1_NAME = 'File Attribute 1', + F_ATT2_NAME = 'File Attribute 2', + RI_ATT1_NAME = 'Image Attribute 1', + RI_ATT2_NAME = 'Image Attribute 2', + F_ATT1_VAL = 'Contents of First FILE Attribute', + F_ATT2_VAL = 'Contents of Second FILE Attribute', + F_ATT1_N_VALUES = 32, + F_ATT2_N_VALUES = 33, + RI_ATT1_VAL = 'Contents of IMAGE''s First Attribute', + RI_ATT1_N_VALUES = 35, + RI_ATT2_N_VALUES = 6) integer DFACC_WRITE, DFNT_INT16, DFNT_CHAR8 parameter (DFACC_WRITE = 2, + DFNT_CHAR8 = 4, + DFNT_INT16 = 22) C C Function declaration C integer hopen, hclose integer mgstart, mgscatt, mgsnatt , mgn2ndx, + mgselct, mgendac, mgend C C**** Variable declaration ******************************************* C integer status integer file_id, gr_id, ri_id, ri_index integer*2 ri_attr_2(RI_ATT2_N_VALUES) integer i do 10 i = 1, RI_ATT2_N_VALUES ri_attr_2(i) = i 10 continue C C**** End of variable declaration ************************************ C C C Open the HDF file. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Set two file attributes to the file with names, data type, numbers of C values, and values of attributes specified. C status = mgscatt(gr_id, F_ATT1_NAME, DFNT_CHAR8, + F_ATT1_N_VALUES, F_ATT1_VAL) status = mgscatt(gr_id, F_ATT2_NAME, DFNT_CHAR8, + F_ATT2_N_VALUES, F_ATT2_VAL) C C Obtain the index of the image named IMAGE_NAMR. C ri_index = mgn2ndx(gr_id, IMAGE_NAME) C C Obtain the identifier of this image. C ri_id = mgselct(gr_id, ri_index) C C Set two attributes of the image with names, data types, number of C values, and values of the attributes specified. C status = mgscatt(ri_id, RI_ATT1_NAME, DFNT_CHAR8, + RI_ATT1_N_VALUES, RI_ATT1_VAL) status = mgsnatt(ri_id, RI_ATT2_NAME, DFNT_INT16, + RI_ATT2_N_VALUES, ri_attr_2) C C Terminate access to the image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/GR/h4ex_GR_write_palette.f000066400000000000000000000063151503061704500232020ustar00rootroot00000000000000 program write_palette implicit none C C Parameter declaration C character*22 FILE_NAME character*18 NEW_IMAGE_NAME integer X_LENGTH integer Y_LENGTH integer N_ENTRIES integer N_COMPS_IMG integer N_COMPS_PAL C parameter (FILE_NAME = 'Image_with_Palette.hdf', + NEW_IMAGE_NAME = 'Image with Palette', + X_LENGTH = 5, + Y_LENGTH = 5, + N_ENTRIES = 256, + N_COMPS_IMG = 2, + N_COMPS_PAL = 3) integer DFACC_CREATE, DFNT_CHAR8, DFNT_UINT8, MFGR_INTERLACE_PIXEL parameter (DFACC_CREATE = 4, + DFNT_CHAR8 = 4, + DFNT_UINT8 = 21, + MFGR_INTERLACE_PIXEL = 0) C C Function declaration C integer hopen, hclose integer mgstart, mgcreat, mgwcimg, mggltid, mgwclut, + mgendac, mgend C C**** Variable declaration ******************************************* C integer file_id, gr_id, ri_id, pal_id integer interlace_mode integer start(2), stride(2), edges(2), dim_sizes(2) integer status integer i, j character image_buf(N_COMPS_IMG, X_LENGTH, Y_LENGTH) character palette_buf(N_COMPS_PAL, N_ENTRIES) C C**** End of variable declaration ************************************ C C C Create and open the file. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) C C Initialize the GR interface. C gr_id = mgstart(file_id) C C Define interlace mode and dimensions of the image. C interlace_mode = MFGR_INTERLACE_PIXEL dim_sizes(1) = X_LENGTH dim_sizes(2) = Y_lENGTH C C Create the raster image array. C ri_id = mgcreat(gr_id, NEW_IMAGE_NAME, N_COMPS_IMG, DFNT_CHAR8, + interlace_mode, dim_sizes) C C Fill the image data buffer with values. C do 20 i = 1, Y_LENGTH do 10 j = 1, X_LENGTH image_buf(1,j,i) = char(i + j - 1 ) image_buf(2,j,i) = char(i + j) 10 continue 20 continue C C Define the size of the data to be written, i.e., start from the origin C and go as long as the length of each dimension. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Write the data in the buffer into the image array. C status = mgwcimg(ri_id, start, stride, edges, image_buf) C C Initialize the palette buffer to grayscale. C do 40 i = 1, N_ENTRIES do 30 j = 1, N_COMPS_PAL palette_buf(j,i) = char(i) 30 continue 40 continue C C Get the identifier of the palette attached to the image NEW_IMAGE_NAME. C pal_id = mggltid(ri_id, 0) C C Set palette interlace mode. C interlace_mode = MFGR_INTERLACE_PIXEL C C Write data to the palette. C status = mgwclut(pal_id, N_COMPS_PAL, DFNT_UINT8, interlace_mode, + N_ENTRIES, palette_buf) C C Terminate access to the raster image and to the GR interface, C and close the HDF file. C status = mgendac(ri_id) status = mgend(gr_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/000077500000000000000000000000001503061704500166345ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/CMakeLists.txt000066400000000000000000000070611503061704500214000ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_SD_F Fortran) # -------------------------------------------------------------------- # Notes: When creating examples they should be prefixed # with "f_sd_". This allows for easier filtering of the examples. # -------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () #----------------------------------------------------------------------------- # Setup include Directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_Fortran_MODULE_DIRECTORY}${H4EX_MOD_EXT};${PROJECT_BINARY_DIR};${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Fortran_sourcefiles.cmake) if (H4EX_BUILD_TESTING) # Remove any output file left over from previous test run add_test ( NAME MF_SD_FORTRAN_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove SDS.hdf SDSchunked.hdf SDScompressed.hdf SDSUNLIMITED.hdf SLABS.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (MF_SD_FORTRAN_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (MF_SD_FORTRAN_EXAMPLES-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "MF_SD_FORTRAN_EXAMPLES-clearall-objects") endif () foreach (example_name ${examples}) add_executable (${EXAMPLE_VARNAME}_f_mf_sd_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_mf_sd_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_mf_sd_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_mf_sd_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${H4EX_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_mf_sd_${example_name} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (${EXAMPLE_VARNAME}_f_mf_sd_${example_name} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "${EXAMPLE_VARNAME}_f_mf_sd_${example_name}") endif () endforeach () foreach (example_name ${skip_examples}) add_executable (${EXAMPLE_VARNAME}_f_mf_sd_skip_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_mf_sd_skip_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_mf_sd_skip_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_mf_sd_skip_${example_name} COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${EXAMPLE_VARNAME}_f_mf_sd_skip_${example_name}" ) endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/Fortran_sourcefiles.cmake000066400000000000000000000011631503061704500236550ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples SD_create_sds SD_write_to_sds SD_write_slab SD_alter_sds_values SD_unlimited_sds SD_mv_sds_to_external SD_read_from_sds SD_read_subsets #SD_get_info SD_find_sds_by_name SD_set_get_dim_info #SD_dimscale_vs_sds SD_set_attr #SD_get_attr SD_compress_sds SD_chunking_example ) set (skip_examples SD_get_info SD_dimscale_vs_sds SD_get_attr ) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/Makefile.am000066400000000000000000000054321503061704500206740ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am DEFINES=-DNDEBUG -DHDF ############################################################################# ## Programs to build ## ############################################################################# # These are the Fortran test programs to build. TEST_PROG=h4ex_SD_create_sds h4ex_SD_write_to_sds h4ex_SD_write_slab h4ex_SD_alter_sds_values h4ex_SD_unlimited_sds \ h4ex_SD_mv_sds_to_external h4ex_SD_read_from_sds h4ex_SD_read_subsets h4ex_SD_get_info \ h4ex_SD_find_sds_by_name h4ex_SD_set_get_dim_info h4ex_SD_dimscale_vs_sds h4ex_SD_set_attr \ h4ex_SD_get_attr h4ex_SD_compress_sds h4ex_SD_chunking_example # These are the Fortran example files to be installed INSTALL_FILES=h4ex_SD_create_sds.f h4ex_SD_write_to_sds.f h4ex_SD_write_slab.f h4ex_SD_alter_sds_values.f \ h4ex_SD_unlimited_sds.f h4ex_SD_mv_sds_to_external.f h4ex_SD_read_from_sds.f h4ex_SD_read_subsets.f \ h4ex_SD_get_info.f h4ex_SD_find_sds_by_name.f h4ex_SD_set_get_dim_info.f h4ex_SD_dimscale_vs_sds.f \ h4ex_SD_set_attr.f h4ex_SD_get_attr.f h4ex_SD_compress_sds.f h4ex_SD_chunking_example.f # Where to install example files EXAMPLEDIR=$(prefix)/examples/fortran # How to build Fortran programs using h4fc $(EXTRA_PROG): $(H4FC) $(H4FC) $(H4FCFLAGS) $(FCFLAGS) -o $@ $(srcdir)/$@.f; # List dependencies for each program. Normally, automake would take # care of this for us, but if we tell automake about the programs it # will try to build them with the normal Fortran compiler, not h4fc. h4ex_SD_create_sds: $(srcdir)/h4ex_SD_create_sds.f h4ex_SD_write_to_sds: $(srcdir)/h4ex_SD_write_to_sds.f h4ex_SD_write_slab: $(srcdir)/h4ex_SD_write_slab.f h4ex_SD_alter_sds_values: $(srcdir)/h4ex_SD_alter_sds_values.f h4ex_SD_unlimited_sds: $(srcdir)/h4ex_SD_unlimited_sds.f h4ex_SD_mv_sds_to_external: $(srcdir)/h4ex_SD_mv_sds_to_external.f h4ex_SD_read_from_sds: $(srcdir)/h4ex_SD_read_from_sds.f h4ex_SD_read_subsets: $(srcdir)/h4ex_SD_read_subsets.f h4ex_SD_get_info: $(srcdir)/h4ex_SD_get_info.f h4ex_SD_find_sds_by_name: $(srcdir)/h4ex_SD_find_sds_by_name.f h4ex_SD_set_get_dim_info: $(srcdir)/h4ex_SD_set_get_dim_info.f h4ex_SD_dimscale_vs_sds: $(srcdir)/h4ex_SD_dimscale_vs_sds.f h4ex_SD_set_attr: $(srcdir)/h4ex_SD_set_attr.f h4ex_SD_get_attr: $(srcdir)/h4ex_SD_get_attr.f h4ex_SD_compress_sds: $(srcdir)/h4ex_SD_compress_sds.f h4ex_SD_chunking_example: $(srcdir)/h4ex_SD_chunking_example.f include $(top_srcdir)/config/examples.am include $(top_srcdir)/config/conclude.am DISTCLEANFILES = *.chkexe *.chklog ExternalSDS hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_alter_sds_values.f000066400000000000000000000027711503061704500236670ustar00rootroot00000000000000 program alter_data implicit none C C Parameter declaration. C character*7 FILE_NAME integer DFACC_WRITE parameter (FILE_NAME = 'SDS.hdf', + DFACC_WRITE = 2) C C Function declaration. C integer sfstart, sfselect, sfwdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index integer start(2), edges(2), stride(2) integer status integer new_data(2) C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Select the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Initialize the start, edge, and stride parameters to write C two elements into 2nd row, 10th column and 11th column places. C C Specify 2nd row. C start(1) = 1 C C Specify 10th column. C start(2) = 9 edges(1) = 1 C C Two elements are written along 2nd row. C edges(2) = 2 stride(1) = 1 stride(2) = 1 C C Initialize the new values to be written. C new_data(1) = 1000 new_data(2) = 1000 C C Write the new values. C status = sfwdata(sds_id, start, stride, edges, new_data) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_chunking_example.f000066400000000000000000000162641503061704500236530ustar00rootroot00000000000000 program chunk_examples implicit none C C Parameter declaration. C character*14 FILE_NAME character*11 SDS_NAME integer RANK parameter (FILE_NAME = 'SDSchunked.hdf', + SDS_NAME = 'ChunkedData', + RANK = 2) integer DFACC_CREATE, DFACC_READ, DFNT_INT16 parameter (DFACC_CREATE = 4, + DFACC_READ = 1, + DFNT_INT16 = 22) integer COMP_CODE_NONE parameter (COMP_CODE_NONE = 0) C C This example does not use compression. C C To use RLE compression, declare: C C integer COMP_CODE_RLE C parameter (COMP_CODE_RLE = 1) C C To use NBIT compression, declare: C C integer COMP_CODE_NBIT C parameter (COMP_CODE_NBIT = 2) C C To use Skipping Huffman compression, declare: C C integer COMP_CODE_SKPHUFF C parameter (COMP_CODE_SKPHUFF = 3) C C To use GZIP compression, declare: C C integer COMP_CODE_DEFLATE C parameter (COMP_CODE_DEFLATE = 4) C C C Function declaration. C integer sfstart, sfcreate, sfendacc, sfend, + sfselect, sfsfill, sfschnk, sfwchnk, + sfrchnk, sfgichnk, sfwdata, sfrdata, + sfscchnk C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer dim_sizes(2), origin(2) integer fill_value, maxcache, new_maxcache, flag integer start(2), edges(2), stride(2) integer*2 all_data(4,9) integer*2 row(3), column(2) integer*2 chunk_out(2,3) integer*2 chunk1(2,3), + chunk2(2,3), + chunk3(2,3), + chunk6(2,3) integer i, j C C Compression flag and parameters. C integer comp_type, comp_flag, comp_prm(4) C C Chunk's dimensions. C integer dim_length(2), dim_length_out(2) C C Initialize four chunks C data chunk1 /6*1/ data chunk2 /6*2/ data chunk3 /6*3/ data chunk6 /6*6/ C C Initialize row and column arrays. C data row /3*4/ data column /2*5/ C C**** End of variable declaration ************************************ C C C Define chunk's dimensions. C dim_length(1) = 2 dim_length(2) = 3 C C Create the file and initialize SD interface. C sd_id = sfstart(FILE_NAME, DFACC_CREATE) C C Create 4x9 SDS C dim_sizes(1) = 4 dim_sizes(2) = 9 sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT16, + RANK, dim_sizes) C C Fill SDS array with the fill value. C fill_value = 0 status = sfsfill( sds_id, fill_value) C C Create chunked SDS. C C In this example we do not use compression. C C To use RLE compression, initialize comp_type parameter C before the call to sfschnk function. C comp_type = COMP_CODE_RLE C C To use NBIT, Skipping Huffman, or GZIP compression, C initialize comp_prm array and comp type parameter C before call to sfschnk function C C NBIT: C comp_prm(1) = value_of(sign_ext) C comp_prm(2) = value_of(fill_one) C comp_prm(3) = value_of(start_bit) C comp_prm(4) = value_of(bit_len) C comp_type = COMP_CODE_NBIT C C Skipping Huffman: C comp_prm(1) = value_of(skp_size) C comp_type = COMP_CODE_SKPHUFF C C GZIP: C comp_prm(1) = value_of(deflate_level) C comp_type = COMP_CODE_DEFLATE C C comp_type = COMP_CODE_NONE status = sfschnk(sds_id, dim_length, comp_type, comp_prm) C C Set chunk cache to hold maximum 2 chunks. C flag = 0 maxcache = 2 new_maxcache = sfscchnk(sds_id, maxcache, flag) C C Write chunks using SDwritechunk function. C Chunks can be written in any order. C C Write chunk with the coordinates (1,1). C origin(1) = 1 origin(2) = 1 status = sfwchnk(sds_id, origin, chunk1) C C Write chunk with the coordinates (1,2). C origin(1) = 1 origin(2) = 2 status = sfwchnk(sds_id, origin, chunk3) C C Write chunk with the coordinates (2,1). C origin(1) = 2 origin(2) = 1 status = sfwchnk(sds_id, origin, chunk2) C C Write chunk with the coordinates (2,3). C origin(1) = 2 origin(2) = 3 status = sfwchnk(sds_id, origin, chunk6) C C Fill second row in the chunk with the coordinates (2,2). C start(1) = 3 start(2) = 3 edges(1) = 1 edges(2) = 3 stride(1) = 1 stride(2) = 1 status = sfwdata(sds_id, start, stride, edges, row) C C Fill second column in the chunk with the coordinates (1,3). C start(1) = 0 start(2) = 7 edges(1) = 2 edges(2) = 1 stride(1) = 1 stride(2) = 1 status = sfwdata(sds_id, start, stride, edges, column) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) C C Reopen the file and access the first data set. C sd_id = sfstart(FILE_NAME, DFACC_READ) sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Get information about the SDS. C status = sfgichnk(sds_id, dim_length_out, comp_flag) if (comp_flag .eq. 0) then write(*,*) 'SDS is chunked' endif if (comp_flag .eq. 1) then write(*,*) 'SDS is chunked and compressed' endif if (comp_flag .eq. 2) then write(*,*) 'SDS is chunked and NBIT compressed' endif write(*,*) 'Chunks dimensions are ', dim_length_out(1), + ' x' ,dim_length_out(2) C C Read the whole SDS using sfrdata function and display C what we have read. The following information will be displayed: C C C SDS is chunked C Chunks dimensions are 2 x 3 C C 1 1 1 3 3 3 0 5 0 C 1 1 1 3 3 3 0 5 0 C 2 2 2 0 0 0 6 6 6 C 2 2 2 4 4 4 6 6 6 C start(1) = 0 start(2) = 0 edges(1) = 4 edges(2) = 9 stride(1) = 1 stride(2) = 1 status = sfrdata(sds_id, start, stride, edges, all_data) C C Display the SDS. C write(*,*) do 10 i = 1,4 write(*,*) (all_data(i,j), j=1,9) 10 continue C C Read chunks with the coordinates (2,2) and (1,3) and display. C The following information will be shown: C C Chunk (2,2) C C 0 0 0 C 4 4 4 C C Chunk (1,3) C C 0 5 0 C 0 5 0 C origin(1) = 2 origin(2) = 2 status = sfrchnk(sds_id, origin, chunk_out) write(*,*) write(*,*) 'Chunk (2,2)' write(*,*) do 20 i = 1,2 write(*,*) (chunk_out(i,j), j=1,3) 20 continue C origin(1) = 1 origin(2) = 3 status = sfrchnk(sds_id, origin, chunk_out) write(*,*) write(*,*) 'Chunk (1,3)' write(*,*) do 30 i = 1,2 write(*,*) (chunk_out(i,j), j=1,3) 30 continue C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_compress_sds.f000066400000000000000000000052631503061704500230330ustar00rootroot00000000000000 program write_compressed_data implicit none C C Parameter declaration. C character*17 FILE_NAME character*7 SDS_NAME integer X_LENGTH, Y_LENGTH, RANK parameter (FILE_NAME = 'SDScompressed.hdf', + SDS_NAME = 'SDSgzip', + X_LENGTH = 5, + Y_LENGTH = 16, + RANK = 2) integer DFACC_CREATE, DFNT_INT32 parameter (DFACC_CREATE = 4, + DFNT_INT32 = 24) integer COMP_CODE_DEFLATE parameter (COMP_CODE_DEFLATE = 4) integer DEFLATE_LEVEL parameter (DEFLATE_LEVEL = 6) C To use Skipping Huffman compression method, declare C integer COMP_CODE_SKPHUFF C parameter(COMP_CODE_SKPHUFF = 3) C To use RLE compression method, declare C integer COMP_CODE_RLE C parameter(COMP_CODE_RLE = 1) C C C Function declaration. C integer sfstart, sfcreate, sfwdata, sfendacc, sfend, + sfscompress C C**** Variable declaration ******************************************* C integer sd_id, sds_id, status integer start(2), edges(2), stride(2), dim_sizes(2) integer comp_type integer comp_prm(1) integer data(X_LENGTH, Y_LENGTH) integer i, j C C**** End of variable declaration ************************************ C C C Buffer array data and define array dimensions. C do 20 j = 1, Y_LENGTH do 10 i = 1, X_LENGTH data(i, j) = i + j - 1 10 continue 20 continue dim_sizes(1) = X_LENGTH dim_sizes(2) = Y_LENGTH C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_CREATE) C C Create the data set with the name SDS_NAME. C sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes) C C Initialize compression parameter (deflate level) C and call sfscompress function C For Skipping Huffman compression, comp_prm(1) should be set C to skipping sizes value (skp_size). C comp_type = COMP_CODE_DEFLATE comp_prm(1) = deflate_level status = sfscompress(sds_id, comp_type, comp_prm(1)) C C Define the location and size of the data that will be written to C the data set. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Write the stored data to the data set. C status = sfwdata(sds_id, start, stride, edges, data) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_create_sds.f000066400000000000000000000027101503061704500224350ustar00rootroot00000000000000 program create_SDS implicit none C C Parameter declaration. C character*7 FILE_NAME character*11 SDS_NAME integer X_LENGTH, Y_LENGTH, RANK parameter (FILE_NAME = 'SDS.hdf', + SDS_NAME = 'SDStemplate', + X_LENGTH = 5, + Y_LENGTH = 16, + RANK = 2) integer DFACC_CREATE, DFNT_INT32 parameter (DFACC_CREATE = 4, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfcreate, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, dim_sizes(2) integer status C C**** End of variable declaration ************************************ C C C Create the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_CREATE) C C Define dimensions of the array to be created. C dim_sizes(1) = X_LENGTH dim_sizes(2) = Y_LENGTH C C Create the array with the name defined in SDS_NAME. C Note that DFNT_INT32 indicates that the SDS data is of type C integer. Refer to Tables 2E and 2I for the definition of other types. C sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, . dim_sizes) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_dimscale_vs_sds.f000066400000000000000000000037371503061704500234750ustar00rootroot00000000000000 program sds_vrs_coordvar implicit none C C Parameter declaration. C character*7 FILE_NAME parameter (FILE_NAME = 'SDS.hdf') integer DFACC_READ, DFNT_INT32 parameter (DFACC_READ = 1, + DFNT_INT32 = 24) integer MAX_VAR_DIMS parameter (MAX_VAR_DIMS = 32) C C Function declaration. C integer sfstart, sfselect, sfiscvar, sffinfo, sfginfo integer sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer rank, data_type integer n_datasets, n_file_attrs, n_attrs integer dim_sizes(MAX_VAR_DIMS) character*256 sds_name C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Obtain information about the file. C status = sffinfo(sd_id, n_datasets, n_file_attrs) C C Get information about each SDS in the file. C Check whether it is a coordinate variable, then display retrieved C information. C Output displayed: C C SDS array with the name SDStemplate C Coordinate variable with the name X_Axis C Coordinate variable with the name Y_Axis C do 10 sds_index = 0, n_datasets-1 sds_id = sfselect(sd_id, sds_index) status = sfginfo(sds_id, sds_name, rank, dim_sizes, + data_type, n_attrs) status = sfiscvar(sds_id) if (status .eq. 1) then write(*,*) "Coordinate variable with the name ", + sds_name(1:6) else write(*,*) "SDS array with the name ", + sds_name(1:11) endif C C Terminate access to the data set. C status = sfendacc(sds_id) 10 continue C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_find_sds_by_name.f000066400000000000000000000044141503061704500236070ustar00rootroot00000000000000 program locate_by_name implicit none C C Parameter declaration. C character*7 FILE_NAME character*11 SDS_NAME character*9 WRONG_NAME integer X_LENGTH, Y_LENGTH parameter (FILE_NAME = 'SDS.hdf', + SDS_NAME = 'SDStemplate', + WRONG_NAME = 'WrongName', + X_LENGTH = 5, + Y_LENGTH = 16) integer DFACC_READ, DFNT_INT32 parameter (DFACC_READ = 1, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfn2index, sfselect, sfrdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer start(2), edges(2), stride(2) integer data(X_LENGTH, Y_LENGTH) integer j C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Find index of the data set with the name specified in WRONG_NAME. C Error condition occurs, since a data set with this name C does not exist in the file. C sds_index = sfn2index(sd_id, WRONG_NAME) if (sds_index .eq. -1) then write(*,*) "Data set with the name ", WRONG_NAME, + " does not exist" endif C C Find index of the data set with the name specified in SDS_NAME C and use the index to attach to the data set. C sds_index = sfn2index(sd_id, SDS_NAME) sds_id = sfselect(sd_id, sds_index) C C Set elements of start array to 0, elements of edges array C to SDS dimensions, and elements of stride array to 1 to read entire data. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Read entire data into array named data. C status = sfrdata(sds_id, start, stride, edges, data) C C Print 10th column; the following numbers should be displayed: C C 10 1000 12 13 14 C write(*,*) (data(j,10), j = 1, X_LENGTH) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_get_attr.f000066400000000000000000000066261503061704500221440ustar00rootroot00000000000000 program attr_info implicit none C C Parameter declaration. C character*7 FILE_NAME character*13 FILE_ATTR_NAME character*11 SDS_ATTR_NAME character*10 DIM_ATTR_NAME parameter (FILE_NAME = 'SDS.hdf', + FILE_ATTR_NAME = 'File_contents', + SDS_ATTR_NAME = 'Valid_range', + DIM_ATTR_NAME = 'Dim_metric') integer DFACC_READ, DFNT_FLOAT32 parameter (DFACC_READ = 1, + DFNT_FLOAT32 = 5) C C Function declaration. C integer sfstart, sffattr, sfgainfo, sfrattr, sfselect integer sfdimid, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, dim_id integer attr_index, data_type, n_values, status real sds_data(2) character*20 attr_name character*16 file_data character*7 dim_data integer i C C**** End of variable declaration ************************************ C C C Open the file and initialize SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Find the file attribute defined by FILE_ATTR_NAME. C Note that the first parameter is an SD interface identifier. C attr_index = sffattr(sd_id, FILE_ATTR_NAME) C C Get information about the file attribute. C status = sfgainfo(sd_id, attr_index, attr_name, data_type, + n_values) C C Read the file attribute data. C status = sfrattr(sd_id, attr_index, file_data) C C Print file attribute value. C write(*,*) "File attribute value is : ", file_data C C Select the first data set. C sds_id = sfselect(sd_id, 0) C C Find the data set attribute defined by SDS_ATTR_NAME. C Note that the first parameter is a data set identifier. C attr_index = sffattr(sds_id, SDS_ATTR_NAME) C C Get information about the data set attribute. C status = sfgainfo(sds_id, attr_index, attr_name, data_type, + n_values) C C Read the SDS attribute data. C status = sfrattr(sds_id, attr_index, sds_data) C C Print SDS attribute data type and values. C if (data_type .eq. DFNT_FLOAT32) then write(*,*) "SDS attribute data type is : float32 " endif write(*,*) "SDS attribute values are : " write(*,*) (sds_data(i), i=1, n_values) C C Get the identifier for the first dimension of the SDS. C dim_id = sfdimid(sds_id, 0) C C Find the dimensional attribute defined by DIM_ATTR_NAME. C Note that the first parameter is a dimension identifier. C attr_index = sffattr(dim_id, DIM_ATTR_NAME) C C Get information about dimension attribute. C status = sfgainfo(dim_id, attr_index, attr_name, data_type, + n_values) C C Read the dimension attribute data. C status = sfrattr(dim_id, attr_index, dim_data) C C Print dimension attribute value. C write(*,*) "Dimensional attribute value is : ", dim_data C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) C C Output of this program is : C C C File attribute value is : Storm_track_data C SDS attribute data type is : float32 C SDS attribute values are : C 2.00000 10.00000 C Dimensional attribute value is : Seconds C end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_get_info.f000066400000000000000000000041541503061704500221170ustar00rootroot00000000000000 program get_data_set_info implicit none C C Parameter declaration. C character*7 FILE_NAME parameter (FILE_NAME = 'SDS.hdf') integer DFACC_READ, DFNT_INT32 parameter (DFACC_READ = 1, + DFNT_INT32 = 24) integer MAX_NC_NAME, MAX_VAR_DIMS parameter (MAX_NC_NAME = 256, + MAX_VAR_DIMS = 32) C C Function declaration. C integer sfstart, sffinfo, sfselect, sfginfo integer sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id integer n_datasets, n_file_attrs, index integer status, n_attrs integer rank, data_type integer dim_sizes(MAX_VAR_DIMS) character name *(MAX_NC_NAME) integer i C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Determine the number of data sets in the file and the number of C file attributes. C status = sffinfo(sd_id, n_datasets, n_file_attrs) C C Access every data set in the file and print its name, rank, C dimension sizes, data type, and number of attributes. C The following information should be displayed: C C name = SDStemplate C rank = 2 C dimension sizes are : 5 16 C data type is 24 C number of attributes is 0 C do 10 index = 0, n_datasets - 1 sds_id = sfselect(sd_id, index) status = sfginfo(sds_id, name, rank, dim_sizes, data_type, . n_attrs) write(*,*) "name = ", name(1:15) write(*,*) "rank = ", rank write(*,*) "dimension sizes are : ", (dim_sizes(i), i=1, rank) write(*,*) "data type is ", data_type write(*,*) "number of attributes is ", n_attrs C C Terminate access to the current data set. C status = sfendacc(sds_id) 10 continue C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_mv_sds_to_external.f000066400000000000000000000023341503061704500242220ustar00rootroot00000000000000 program write_extfile implicit none C C Parameter declaration. C character*7 FILE_NAME character*11 EXT_FILE_NAME integer OFFSET integer DFACC_WRITE parameter (FILE_NAME = 'SDS.hdf', + EXT_FILE_NAME = 'ExternalSDS', + OFFSET = 24, + DFACC_WRITE = 2) C C Function declaration. C integer sfstart, sfselect, sfsextf, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index integer status C C**** End of variable declaration ************************************ C C C Open the HDF file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Select the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Create a file with the name EXT_FILE_NAME and move the data set C into it, starting at byte location OFFSET. C status = sfsextf(sds_id, EXT_FILE_NAME, OFFSET) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_read_from_sds.f000066400000000000000000000033221503061704500231300ustar00rootroot00000000000000 program read_data implicit none C C Parameter declaration. C character*7 FILE_NAME integer X_LENGTH, Y_LENGTH parameter (FILE_NAME = 'SDS.hdf', + X_LENGTH = 5, + Y_LENGTH = 16) integer DFACC_READ, DFNT_INT32 parameter (DFACC_READ = 1, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfselect, sfrdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer start(2), edges(2), stride(2) integer data(X_LENGTH, Y_LENGTH) integer j C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Select the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Set elements of the array start to 0, elements of the array edges to C SDS dimensions, and elements of the array stride to 1 to read the C entire data. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Read entire data into data array. Note that sfrdata is used C to read the numeric data. C status = sfrdata(sds_id, start, stride, edges, data) C C Print 10th column; the following numbers are displayed: C C 10 1000 12 13 14 C write(*,*) (data(j,10), j = 1, X_LENGTH) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_read_subsets.f000066400000000000000000000061661503061704500230150ustar00rootroot00000000000000 program read_subsets implicit none C C Parameter declaration. C character*7 FILE_NAME parameter (FILE_NAME = 'SDS.hdf') integer DFACC_READ, DFNT_INT32 parameter (DFACC_READ = 1, + DFNT_INT32 = 24) integer SUB1_LENGTH, SUB2_LENGTH, SUB3_LENGTH1, + SUB3_LENGTH2 parameter (SUB1_LENGTH = 5, + SUB2_LENGTH = 4, + SUB3_LENGTH1 = 2, + SUB3_LENGTH2 = 3) C C Function declaration. C integer sfstart, sfselect, sfrdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer start(2), edges(2), stride(2) integer sub1_data(SUB1_LENGTH) integer sub2_data(SUB2_LENGTH) integer sub3_data(SUB3_LENGTH1,SUB3_LENGTH2) integer i, j C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_READ) C C Select the first data set. C sds_index = 0 sds_id =sfselect(sd_id, sds_index) C C Reading the first subset. C C Set elements of start, stride, and edges arrays to read C every 3d element in in the 2nd row starting in the 4th column. C start(1) = 1 start(2) = 3 edges(1) = 1 edges(2) = SUB1_LENGTH stride(1) = 1 stride(2) = 3 C C Read the data from sub1_data array. C status = sfrdata(sds_id, start, stride, edges, sub1_data) C C Print what we have just read, the following numbers should be displayed: C C 5 8 1000 14 17 C write(*,*) (sub1_data(j), j = 1, SUB1_LENGTH) C C Reading the second subset. C C Set elements of start, stride, and edges arrays to read C first 4 elements of 10th column. C start(1) = 0 start(2) = 9 edges(1) = SUB2_LENGTH edges(2) = 1 stride(1) = 1 stride(2) = 1 C C Read the data into sub2_data array. C status = sfrdata(sds_id, start, stride, edges, sub2_data) C C Print what we have just read; the following numbers should be displayed: C C 10 1000 12 13 C write(*,*) (sub2_data(j), j = 1, SUB2_LENGTH) C C Reading the third subset. C C Set elements of start, stride and edges arrays to read C every 6th element in the row and every 4th element in the column C starting at 1st row, 3rd column. C start(1) = 0 start(2) = 2 edges(1) = SUB3_LENGTH1 edges(2) = SUB3_LENGTH2 stride(1) = 4 stride(2) = 6 C C Read the data from the file into sub3_data array. C status = sfrdata(sds_id, start, stride, edges, sub3_data) C C Print what we have just read; the following numbers should be displayed: C C 3 9 15 C 7 13 19 C do 50 i = 1, SUB3_LENGTH1 write(*,*) (sub3_data(i,j), j = 1, SUB3_LENGTH2) 50 continue C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_set_attr.f000066400000000000000000000043761503061704500221600ustar00rootroot00000000000000 program set_attribs implicit none C C Parameter declaration. C character*7 FILE_NAME character*13 FILE_ATTR_NAME character*11 SDS_ATTR_NAME character*10 DIM_ATTR_NAME parameter (FILE_NAME = 'SDS.hdf', + FILE_ATTR_NAME = 'File_contents', + SDS_ATTR_NAME = 'Valid_range', + DIM_ATTR_NAME = 'Dim_metric') integer DFACC_WRITE, DFNT_CHAR8, DFNT_FLOAT32 parameter (DFACC_WRITE = 2, + DFNT_CHAR8 = 4, + DFNT_FLOAT32 = 5) C C Function declaration. C integer sfstart, sfscatt, sfsnatt, sfselect, sfdimid integer sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer dim_id, dim_index integer n_values character*16 file_values real sds_values(2) character*7 dim_values file_values = 'Storm_track_data' sds_values(1) = 2. sds_values(2) = 10. dim_values = 'Seconds' C C**** End of variable declaration ************************************ C C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Set an attribute that describes the file contents. C n_values = 16 status = sfscatt(sd_id, FILE_ATTR_NAME, DFNT_CHAR8, n_values, + file_values) C C Select the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Assign attribute to the first SDS. Note that attribute values C may have different data type than SDS data. C n_values = 2 status = sfsnatt(sds_id, SDS_ATTR_NAME, DFNT_FLOAT32, n_values, + sds_values) C C Get the identifier for the first dimension. C dim_index = 0 dim_id = sfdimid(sds_id, dim_index) C C Set an attribute to the dimension that specifies the C dimension metric. C n_values = 7 status = sfscatt(dim_id, DIM_ATTR_NAME, DFNT_CHAR8, n_values, + dim_values) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_set_get_dim_info.f000066400000000000000000000113431503061704500236210ustar00rootroot00000000000000 program dimension_info implicit none C C Parameter declaration. C character*7 FILE_NAME character*11 SDS_NAME character*6 DIM_NAME_X character*6 DIM_NAME_Y integer X_LENGTH, Y_LENGTH, RANK parameter (FILE_NAME = 'SDS.hdf', + SDS_NAME = 'SDStemplate', + DIM_NAME_X = 'X_Axis', + DIM_NAME_Y = 'Y_Axis', + X_LENGTH = 5, + Y_LENGTH = 16, + RANK = 2) integer DFACC_WRITE, DFNT_INT16, DFNT_FLOAT64 parameter (DFACC_WRITE = 2, + DFNT_INT16 = 22, + DFNT_FLOAT64 = 6) C C Function declaration. C integer sfstart, sfn2index, sfdimid, sfgdinfo integer sfsdscale, sfgdscale, sfsdmname, sfendacc integer sfend, sfselect C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer dim_index, dim_id integer n_values, n_attrs, data_type integer*2 data_X(X_LENGTH) integer*2 data_X_out(X_LENGTH) real*8 data_Y(Y_LENGTH) real*8 data_Y_out(Y_LENGTH) character*6 dim_name integer i C C**** End of variable declaration ************************************ C C C Initialize dimension scales. C do 10 i = 1, X_LENGTH data_X(i) = i - 1 10 continue do 20 i = 1, Y_LENGTH data_Y(i) = 0.1 * (i - 1) 20 continue C C Open the file and initialize SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Get the index of the data set with the name specified in SDS_NAME. C sds_index = sfn2index(sd_id, SDS_NAME) C C Select the data set corresponding to the returned index. C sds_id = sfselect(sd_id, sds_index) C C For each dimension of the data set, C get its dimension identifier and set dimension name C and dimension scales. Note that data type of dimension scale can C be different between dimensions and can be different from SDS data type. C do 30 dim_index = 0, RANK - 1 C C Select the dimension at position dim_index. C dim_id = sfdimid(sds_id, dim_index) C C Assign name and dimension scale to the dimension. C if (dim_index .eq. 0) then status = sfsdmname(dim_id, DIM_NAME_X) n_values = X_LENGTH status = sfsdscale(dim_id, n_values, DFNT_INT16, data_X) end if if (dim_index .eq. 1) then status = sfsdmname(dim_id, DIM_NAME_Y) n_values = Y_LENGTH status = sfsdscale(dim_id, n_values, DFNT_FLOAT64, data_Y) end if C C Get and display information about dimension and its scale values. C The following information is displayed: C C Information about 1 dimension : C dimension name is X_Axis C number of scale values is 5 C dimension scale data type is int16 C C number of dimension attributes is 0 C Scale values are: C 0 1 2 3 4 C C Information about 2 dimension : C dimension name is Y_Axis C number of scale values is 16 C dimension scale data type is float64 C number of dimension attributes is 0 C C Scale values are: C 0.000 0.100 0.200 0.300 C 0.400 0.500 0.600 0.700 C 0.800 0.900 1.000 1.100 C 1.200 1.300 1.400 1.500 C status = sfgdinfo(dim_id, dim_name, n_values, data_type, n_attrs) C write(*,*) "Information about ", dim_index+1," dimension :" write(*,*) "dimension name is ", dim_name write(*,*) "number of scale values is", n_values if (data_type. eq. 22) then write(*,*) "dimension scale data type is int16" endif if (data_type. eq. 6) then write(*,*) "dimension scale data type is float64" endif write(*,*) "number of dimension attributes is ", n_attrs C write(*,*) "Scale values are:" if (dim_index .eq. 0) then status = sfgdscale(dim_id, data_X_out) write(*,*) (data_X_out(i), i= 1, X_LENGTH) endif if (dim_index .eq. 1) then status = sfgdscale(dim_id, data_Y_out) write(*,100) (data_Y_out(i), i= 1, Y_LENGTH) 100 format(4(1x,f10.3)/) endif 30 continue C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_unlimited_sds.f000066400000000000000000000060061503061704500231660ustar00rootroot00000000000000 program append_sds implicit none C C Parameter declaration. C character*16 FILE_NAME character*14 SDS_NAME integer X_LENGTH, Y_LENGTH, RANK parameter (FILE_NAME = 'SDSUNLIMITED.hdf', + SDS_NAME = 'AppendableData', + X_LENGTH = 10, + Y_LENGTH = 10, + RANK = 2) integer DFACC_CREATE, DFACC_WRITE, SD_UNLIMITED, + DFNT_INT32 parameter (DFACC_CREATE = 4, + DFACC_WRITE = 2, + SD_UNLIMITED = 0, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfcreate, sfwdata, sfselect integer sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer dim_sizes(2) integer start(2), edges(2), stride(2) integer i, j integer data (X_LENGTH, Y_LENGTH), append_data(X_LENGTH) C C**** End of variable declaration ************************************ C C C Data initialization. C do 20 j = 1, Y_LENGTH do 10 i = 1, X_LENGTH data(i, j) = i + j 10 continue 20 continue C C Create the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_CREATE) C C Define dimensions of the array. Make the C last dimension appendable by defining its length as unlimited. C dim_sizes(1) = X_LENGTH dim_sizes(2) = SD_UNLIMITED C Create the array data set. sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, . dim_sizes) C C Define the location and the size of the data to be written C to the data set. Note that the elements of array stride are C set to 1 for contiguous writing. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Write the data. C status = sfwdata(sds_id, start, stride, edges, data) C C Terminate access to the data set, terminate access C to the SD interface, and close the file. C status = sfendacc(sds_id) status = sfend(sd_id) C C Store the array values to be appended to the data set. C do 30 i = 1, X_LENGTH append_data(i) = 1000 + i - 1 30 continue C C Reopen the file and initialize the SD. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Select the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Define the location of the append to start at the 11th C column of the 1st row and to stop at the end of the 10th row. C start(1) = 0 start(2) = Y_LENGTH edges(1) = X_LENGTH edges(2) = 1 C C Append the data to the data set. C status = sfwdata(sds_id, start, stride, edges, append_data) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_write_slab.f000066400000000000000000000053211503061704500224550ustar00rootroot00000000000000 program write_slab implicit none C C Parameter declaration. C character*9 FILE_NAME character*13 SDS_NAME integer X_LENGTH, Y_LENGTH, Z_LENGTH, RANK parameter (FILE_NAME = 'SLABS.hdf', + SDS_NAME = 'FilledBySlabs', + X_LENGTH = 4, + Y_LENGTH = 5, + Z_LENGTH = 6, + RANK = 3) integer DFACC_CREATE, DFNT_INT32 parameter (DFACC_CREATE = 4, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfcreate, sfwdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id integer dim_sizes(3), start(3), edges(3), stride(3) integer i, j, k, status integer data(X_LENGTH, Y_LENGTH, Z_LENGTH) integer xz_data(X_LENGTH, Z_LENGTH) C C**** End of variable declaration ************************************ C C C Data initialization. C do 30 k = 1, Z_LENGTH do 20 j = 1, Y_LENGTH do 10 i = 1, X_LENGTH data(i, j, k) = i + j + k 10 continue 20 continue 30 continue C C Create the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_CREATE) C C Define dimensions of the array to be created. C dim_sizes(1) = X_LENGTH dim_sizes(2) = Y_LENGTH dim_sizes(3) = Z_LENGTH C C Create the data set with the name defined in SDS_NAME. C sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, . dim_sizes) C C Set the parameters start and edges to write C a 4x6 element slab of data to the data set; C note that edges(2) is set to 1 to define a 2 dimensional slab C parallel to the XZ plane; C start(2) (slab position in the array) is initialized inside the C for loop. C edges(1) = X_LENGTH edges(2) = 1 edges(3) = Z_LENGTH start(1) = 0 start(3) = 0 stride(1) = 1 stride(2) = 1 stride(3) = 1 do 60 j = 1, Y_LENGTH start(2) = j - 1 C C Initialize the buffer xz_data (data slab). C do 50 k = 1, Z_LENGTH do 40 i = 1, X_LENGTH xz_data(i, k) = data(i, j, k) 40 continue 50 continue C C Write the data slab into SDS array defined in SDS_NAME. C Note that the elements of array stride are set to 1 to C specify that the consecutive slabs in the Y direction are written. C status = sfwdata(sds_id, start, stride, edges, xz_data) 60 continue C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/SD/h4ex_SD_write_to_sds.f000066400000000000000000000036631503061704500230360ustar00rootroot00000000000000 program write_data implicit none C C Parameter declaration. C character*7 FILE_NAME character*11 SDS_NAME integer X_LENGTH, Y_LENGTH, RANK parameter (FILE_NAME = 'SDS.hdf', + SDS_NAME = 'SDStemplate', + X_LENGTH = 5, + Y_LENGTH = 16, + RANK = 2) integer DFACC_WRITE, DFNT_INT32 parameter (DFACC_WRITE = 2, + DFNT_INT32 = 24) C C Function declaration. C integer sfstart, sfselect, sfwdata, sfendacc, sfend C C**** Variable declaration ******************************************* C integer sd_id, sds_id, sds_index, status integer start(2), edges(2), stride(2) integer i, j integer data(X_LENGTH, Y_LENGTH) C C**** End of variable declaration ************************************ C C C Data set data initialization. C do 20 j = 1, Y_LENGTH do 10 i = 1, X_LENGTH data(i, j) = i + j - 1 10 continue 20 continue C C Open the file and initialize the SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Attach to the first data set. C sds_index = 0 sds_id = sfselect(sd_id, sds_index) C C Define the location and size of the data to be written C to the data set. Note that setting values of the array stride to 1 C specifies the contiguous writing of data. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C C Write the stored data to the data set named in SDS_NAME. C Note that the routine sfwdata is used instead of sfwcdata C to write the numeric data. C status = sfwdata(sds_id, start, stride, edges, data) C C Terminate access to the data set. C status = sfendacc(sds_id) C C Terminate access to the SD interface and close the file. C status = sfend(sd_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/000077500000000000000000000000001503061704500166375ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/CMakeLists.txt000066400000000000000000000077341503061704500214120ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_VD_F Fortran) # -------------------------------------------------------------------- # Notes: When creating examples they should be prefixed # with "f_vd". This allows for easier filtering of the examples. # -------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () #----------------------------------------------------------------------------- # Setup include Directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_Fortran_MODULE_DIRECTORY}${H4EX_MOD_EXT};${PROJECT_BINARY_DIR};${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Fortran_sourcefiles.cmake) # Remove any output file left over from previous test run add_test ( NAME VD_FORTRAN_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove General_HDFobjects.hdf General_RImages.hdf General_Vdatas.hdf General_Vgroups.hdf Image_with_Palette.hdf Packed_Vdata.hdf Two_Vdatas.hdf Two_Vgroups.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (VD_FORTRAN_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (VD_FORTRAN_EXAMPLES-clearall-objects PROPERTIES LABELS EXAMPLES) endif () set (last_test "VD_FORTRAN_EXAMPLES-clearall-objects") foreach (example_name ${examples}) add_executable (${EXAMPLE_VARNAME}_f_vd_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_vd_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_vd_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_vd_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_vd_${example_name} PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (${EXAMPLE_VARNAME}_f_vd_${example_name} PROPERTIES LABELS EXAMPLES) endif () set (last_test "${EXAMPLE_VARNAME}_f_vd_${example_name}") endif () endforeach () foreach (example_name ${skip_examples}) add_executable (${EXAMPLE_VARNAME}_f_vd_skip_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_vd_skip_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_vd_skip_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_vd_skip_${example_name} COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${EXAMPLE_VARNAME}_f_vd_skip_${example_name}" ) endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/Fortran_sourcefiles.cmake000066400000000000000000000007361503061704500236650ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples VD_create_vdatas VD_write_mixed_vdata VD_write_to_vdata VD_create_onefield_vdatas VD_read_from_vdata VD_read_mixed_vdata VD_get_vdata_info VD_locate_vdata #VD_set_get_vdata_attr ) set (skip_examples VD_set_get_vdata_attr ) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_create_onefield_vdatas.f000066400000000000000000000046411503061704500250060ustar00rootroot00000000000000 program create_onefield_vdatas implicit none C C Parameter declaration C character*18 FILE_NAME character*9 CLASS1_NAME character*9 CLASS2_NAME character*11 VDATA1_NAME character*12 VDATA2_NAME character*22 FIELD1_NAME character*21 FIELD2_NAME integer N_RECORDS_1, N_RECORDS_2 integer ORDER_2 C parameter (FILE_NAME = 'General_Vdatas.hdf', + CLASS1_NAME = '5x1 Array', + CLASS2_NAME = '6x4 Array', + VDATA1_NAME = 'First Vdata', + VDATA2_NAME = 'Second Vdata', + FIELD1_NAME = 'Single-component Field', + FIELD2_NAME = 'Multi-component Field') parameter (N_RECORDS_1 = 5, + N_RECORDS_2 = 6, + ORDER_2 = 4) integer DFACC_WRITE, DFNT_CHAR8, DFNT_INT32 parameter (DFACC_WRITE = 2, + DFNT_CHAR8 = 4, + DFNT_INT32 = 24) C C Function declaration C integer hopen, hclose integer vfstart, vhfscd, vhfsdm, vfend C C**** Variable declaration ******************************************* C integer status integer file_id integer vdata1_ref, vdata2_ref character vdata1_buf(N_RECORDS_1) integer vdata2_buf(ORDER_2, N_RECORDS_2) data vdata1_buf /'V','D','A','T','A'/ data vdata2_buf / 1, 2, 3, 4, + 2, 4, 6, 8, + 3, 6, 9, 12, + 4, 8, 12, 16, + 5, 10, 15, 20, + 6, 12, 18, 24/ C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Create the first vdata and populate it with data from vdata1_buf array. C vdata1_ref = vhfscd(file_id, FIELD1_NAME, vdata1_buf, N_RECORDS_1, + DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME) C C Create the second vdata and populate it with data from vdata2_buf array. C vdata2_ref = vhfsdm(file_id, FIELD2_NAME, vdata2_buf, N_RECORDS_2, + DFNT_INT32, VDATA2_NAME, CLASS2_NAME, + ORDER_2) C C Terminate access to the VS interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_create_vdatas.f000066400000000000000000000052561503061704500231440ustar00rootroot00000000000000 program create_vdatas implicit none C C Parameter declaration C character*18 FILE1_NAME character*14 FILE2_NAME character*7 VDATA_NAME character*12 VDATA_CLASS C parameter (FILE1_NAME = 'General_Vdatas.hdf', + FILE2_NAME = 'Two_Vdatas.hdf', + VDATA_NAME = 'Vdata 1', + VDATA_CLASS = 'Empty Vdatas') integer DFACC_CREATE parameter (DFACC_CREATE = 4) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsfsnam, vsfscls, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file1_id, file2_id integer vdata_id, vdata1_id, vdata2_id integer vdata_ref C C**** End of variable declaration ************************************ C C C Create the first HDF file. C file1_id = hopen(FILE1_NAME, DFACC_CREATE, 0) C C Initialize the VS interface associated with the first HDF file. C status = vfstart(file1_id) C C Create a vdata in the first HDF file. C vdata_ref = -1 vdata_id = vsfatch(file1_id, vdata_ref, 'w') C C Assign a name to the vdata. C status = vsfsnam(vdata_id, VDATA_NAME) C C Other operations on the vdata identified by vdata_id can be carried out C starting from this point. C C Create the second HDF file. C file2_id = hopen(FILE2_NAME, DFACC_CREATE, 0) C C Initialize the VS interface associated with the second HDF file. C status = vfstart(file2_id) C C Create the first vdata in the second HDF file. C vdata1_id = vsfatch(file2_id, vdata_ref, 'w') C C Create the second vdata in the second HDF file. C vdata2_id = vsfatch(file2_id, vdata_ref, 'w') C C Assign a class name to these vdatas. C status = vsfscls(vdata1_id, VDATA_CLASS) status = vsfscls(vdata2_id, VDATA_CLASS) C C Other operations on the vdatas identified by vdata1_id and vdata2_id C can be carried out starting from this point. C C C Terminate access to the first vdata in the second HDF file. C status = vsfdtch(vdata1_id) C C Terminate access to the second vdata in the second HDF file. C status = vsfdtch(vdata2_id) C C Terminate access to the VS interface associated with the second HDF file. C status = vfend(file2_id) C C Close the second HDF file. C status = hclose(file2_id) C C Terminate access to the vdata in the first HDF file. C status = vsfdtch(vdata_id) C C terminate access to the VS interface associated with the first HDF file. C status = vfend(file1_id) C C Close the first HDF file. C status = hclose(file1_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_get_vdata_info.f000066400000000000000000000053011503061704500232770ustar00rootroot00000000000000 program vdata_info implicit none C C Parameter declaration C character*18 FILE_NAME integer DFACC_READ, FULL_INTERLACE integer FIELD_SIZE C parameter (FILE_NAME = 'General_Vdatas.hdf', + DFACC_READ = 1, + FULL_INTERLACE = 0, + FIELD_SIZE = 80) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsfgid, vsfinq, + vsfisat, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id, vdata_ref integer n_records, interlace_mode, vdata_size character*64 vdata_name character*80 fieldname_list C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Set the reference number to -1 to start the search from the beginning C of the file. C vdata_ref = -1 10 continue C C Use vsfgid to obtain each vdata by its reference number then C attach to the vdata and get information. The loop terminates C when the last vdata is reached. C vdata_ref = vsfgid(file_id, vdata_ref) if (vdata_ref .eq. -1) goto 100 C C Attach to the current vdata for reading. C vdata_id = vsfatch(file_id, vdata_ref, 'r') C C Test whether the current vdata is not a storage for an attribute, C then obtain and display its information. if (vsfisat(vdata_id) .ne. 1) then C Initialize buffers before getting values back. vdata_name = ' ' fieldname_list = ' ' n_records = -1 vdata_size = -1 status = vsfinq(vdata_id, n_records, interlace_mode, + fieldname_list, vdata_size, vdata_name) if (status .eq. 0) then write(*,*) 'Vdata: ', vdata_name write(*,*) 'contains ', n_records, ' records' if (interlace_mode .eq. 0) then write(*,*) 'Interlace mode: FULL' else write(*,*) 'Interlace mode: NONE' endif write(*,*) 'Fields: ', fieldname_list(1:30) write(*,*) 'Vdata record size in bytes :', vdata_size write(*,*) endif endif C C Detach from the current vdata. C status = vsfdtch(vdata_id) goto 10 100 continue C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_locate_vdata.f000066400000000000000000000045411503061704500227610ustar00rootroot00000000000000 program locate_vdata implicit none C C Parameter declaration C character*18 FILE_NAME character*20 SEARCHED_FIELDS C parameter (FILE_NAME = 'General_Vdatas.hdf', + SEARCHED_FIELDS = 'Position,Temperature') integer DFACC_READ parameter (DFACC_READ = 1) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsfgid, vsfex, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id, vdata_ref integer index logical found_fields C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the VS interface. C status = vfstart(file_id) index = 0 C C Set the reference number to -1 to start the search from the beginning C of the file. C vdata_ref = -1 C C Assume that the specified fields are not found in the current vdata. C found_fields = .FALSE. 10 continue C C Use vsfgid to obtain each vdata by its reference number then C attach to the vdata and search for the fields. The loop terminates C when the last vdata is reached or when a vdata which contains the C fields listed in SEARCHED_FIELDS is found. C vdata_ref = vsfgid(file_id, vdata_ref) if (vdata_ref .eq. -1) goto 100 vdata_id = vsfatch(file_id, vdata_ref, 'r') status = vsfex(vdata_id, SEARCHED_FIELDS) if (status .ne. -1) then found_fields = .TRUE. goto 100 endif status = vsfdtch(vdata_id) index = index + 1 goto 10 100 continue C C Print the index of the vdata containing the fields or a 'not found' C message if no such vdata is found. Also detach from the vdata found. C if(.NOT.found_fields) then write(*,*) 'Fields Positions and Temperature were not found' else write(*,*) + 'Fields Positions and Temperature were found in the vdata', + ' at position ', index C C Terminate access to the vdata C status = vsfdtch(vdata_id) endif C C Terminate access to the VS interface and close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_read_from_vdata.f000066400000000000000000000053061503061704500234500ustar00rootroot00000000000000 program read_from_vdata implicit none C C Parameter declaration C character*18 FILE_NAME character*14 VDATA_NAME character*20 FIELDNAME_LIST integer N_RECORDS, RECORD_INDEX integer ORDER_1, ORDER_2 integer N_VALS_PER_REC C parameter (FILE_NAME = 'General_Vdatas.hdf', + VDATA_NAME = 'Solid Particle', + FIELDNAME_LIST = 'Position,Temperature') parameter (N_RECORDS = 5, + RECORD_INDEX = 3, + ORDER_1 = 3, + ORDER_2 = 2, + N_VALS_PER_REC = ORDER_1 + ORDER_2 ) integer DFACC_READ, FULL_INTERLACE parameter (DFACC_READ = 1, + FULL_INTERLACE = 0) C C Function declaration C integer hopen, hclose integer vfstart, vsffnd, vsfatch, vsfsfld, vsfrd, vsfseek, + vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id integer vdata_ref, rec_num, num_of_records, rec_pos real databuf(N_VALS_PER_REC, N_RECORDS) integer i C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Get the reference number of the vdata, whose name is specified in C VDATA_NAME, using vsffnd, which will be discussed in Section 4.7.3. C vdata_ref = vsffnd(file_id, VDATA_NAME) C C Attach to the vdata for reading if it is found, C otherwise exit the program. C if (vdata_ref .eq. 0) stop vdata_id = vsfatch(file_id, vdata_ref, 'r') C C Specify the fields that will be read. C status = vsfsfld(vdata_id, FIELDNAME_LIST) C C Place the current point to the position specified in RECORD_INDEX. C rec_pos = vsfseek(vdata_id, RECORD_INDEX) C C Read the next N_RECORDS from the vdata and store the data in the buffer C databuf with fully interlace mode. C num_of_records = vsfrd(vdata_id, databuf, N_RECORDS, + FULL_INTERLACE) C C Display the read data as many records as the number of records returned C by vsfrd. C write(*,*) ' Particle Position Temperature Range' write(*,*) do 10 rec_num = 1, num_of_records write(*,1000) (databuf(i, rec_num), i = 1, N_VALS_PER_REC) 10 continue 1000 format(1x,3(f6.2), 8x,2(f6.2)) C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_read_mixed_vdata.f000066400000000000000000000063121503061704500236110ustar00rootroot00000000000000 program read_mixed_vdata implicit none C C Parameter declaration C character*16 FILE_NAME character*16 VDATA_NAME character*4 FIELD1_NAME character*5 FIELD2_NAME character*10 FIELDNAME_LIST integer N_RECORDS, N_FIELDS integer BUFFER_SIZE C parameter (FILE_NAME = 'Packed_Vdata.hdf', + VDATA_NAME = 'Mixed Data Vdata', + FIELD1_NAME = 'Temp', + FIELD2_NAME = 'Ident', + FIELDNAME_LIST = 'Temp,Ident') parameter (N_RECORDS = 20, + N_FIELDS = 2, + BUFFER_SIZE = (4 + 1)*N_RECORDS) integer DFACC_READ, DFNT_FLOAT32, DFNT_CHAR8, + FULL_INTERLACE, HDF_VSUNPACK parameter (DFACC_READ = 1, + DFNT_FLOAT32 = 5, + DFNT_CHAR8 = 4, + FULL_INTERLACE = 0, + HDF_VSUNPACK = 1) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsffnd, vsfsfld, + vsfnpak, vsfcpak, vsfread, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id integer vdata_ref, num_of_records real temp(N_RECORDS) character ident(N_RECORDS) integer i C C Buffer for read packed data should be big enough to hold N_RECORDS. C integer databuf(BUFFER_SIZE/4 + 1) C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Get the reference number of the vdata, whose name is specified in C VDATA_NAME, using vsffnd, which will be discussed in Section 4.7.3. C vdata_ref = vsffnd(file_id, VDATA_NAME) C C Attach to the vdata for reading if it is found, C otherwise exit the program. C if (vdata_ref .eq. 0) stop vdata_id = vsfatch(file_id, vdata_ref, 'r') C C Specify the fields that will be read. C status = vsfsfld(vdata_id, FIELDNAME_LIST) C C Read N_RECORDS records of the vdata and store the values into the databuf. C num_of_records = vsfread(vdata_id, databuf, N_RECORDS, + FULL_INTERLACE) C C Unpack N_RECORDS from databuf into temp and ident arrays. C In Fortran, each field is unpacked using separate calls to C vsfnpak or vsfcpak. C status = vsfnpak(vdata_id, HDF_VSUNPACK, FIELDNAME_LIST, databuf, + BUFFER_SIZE, num_of_records, FIELD1_NAME, temp) status = vsfcpak(vdata_id, HDF_VSUNPACK, FIELDNAME_LIST, databuf, + BUFFER_SIZE, num_of_records, FIELD2_NAME, ident) C C Display the read data being stored in the field databufs. C write (*,*) ' Temp Ident' do 10 i = 1, num_of_records write(*,1000) temp(i), ident(i) 10 continue 1000 format (3x,F6.2, 4x, a) C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_set_get_vdata_attr.f000066400000000000000000000104561503061704500242000ustar00rootroot00000000000000 program vdata_attributes implicit none C C Parameter declaration C character*18 FILE_NAME character*14 VDATA_NAME character*4 FIELD_NAME character*10 VATTR_NAME character*6 FATTR_NAME integer VATTR_N_VALUES, FATTR_N_VALUES C parameter (FILE_NAME = 'General_Vdatas.hdf', + VDATA_NAME = 'Solid Particle', + FIELD_NAME = 'Mass', + VATTR_NAME = 'Site Ident', + FATTR_NAME = 'Scales') parameter (VATTR_N_VALUES = 3, + FATTR_N_VALUES = 4) integer DFACC_WRITE, FULL_INTERLACE, HDF_VDATA integer DFNT_INT32, DFNT_CHAR8 parameter (DFACC_WRITE = 2, + FULL_INTERLACE = 0, + HDF_VDATA = -1, + DFNT_INT32 = 24, + DFNT_CHAR8 = 4) C C Function declaration C integer hopen, hclose integer vfstart, vsffnd, vsfatch, vsfscat, vsfsnat, + vsffnas, vsffidx, vsfnats, vsfainf, vsfgcat, vsfgnat, + vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id, vdata_ref integer field_index, n_vdattrs, n_fldattrs integer vdata_type, vdata_n_values, vdata_size integer field_type, field_n_values, field_size character vd_attr(VATTR_N_VALUES) integer fld_attr(FATTR_N_VALUES) character vattr_buf(VATTR_N_VALUES) integer fattr_buf(FATTR_N_VALUES) character vattr_name_out(30), fattr_name_out(30) data vd_attr /'A', 'B', 'C'/ data fld_attr /2, 4, 6, 8/ C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Get the reference number of the vdata named VDATA_NAME. C vdata_ref = vsffnd(file_id, VDATA_NAME) C C Attach to the vdata for writing. C vdata_id = vsfatch(file_id, vdata_ref, 'w') C C Attach an attribute to the vdata, as it is indicated by second parameter. C status = vsfscat(vdata_id, HDF_VDATA, VATTR_NAME, DFNT_CHAR8, + VATTR_N_VALUES, vd_attr) C C Get the index of the field FIELD_NAME within the vdata. C status = vsffidx(vdata_id, FIELD_NAME, field_index) C C Attach an attribute to the field with the index field_index. C status = vsfsnat(vdata_id, field_index, FATTR_NAME, DFNT_INT32, + FATTR_N_VALUES, fld_attr) C C Get the number of attributes attached to the vdata's first C field - should be 0. C n_fldattrs = vsffnas(vdata_id, 0) write(*,*) 'Number of attributes of the first field' write(*,*) ' of the vdata: ', n_fldattrs C C Get the number of the attributes attached to the field specified by C index field_index - should be 1. C n_fldattrs = vsffnas(vdata_id, field_index) write(*,*) 'Number of attributes of field ', FIELD_NAME, + n_fldattrs C C Get the total number of the field's and vdata's attributes - should be 2. C n_vdattrs = vsfnats(vdata_id) write(*,*) 'Number of attributes of the vdata and its fields: ', + n_vdattrs C C Get information about the vdata's first attribute, indicated by C the third parameter, which is the index of the attribute. C status = vsfainf(vdata_id, HDF_VDATA, 0, vattr_name_out, + vdata_type, vdata_n_values, vdata_size) C C Get information about the first attribute of the field specified by C field_index. C status = vsfainf(vdata_id, field_index, 0, fattr_name_out, + field_type, field_n_values, field_size) C C Get the vdata's first attribute. C status = vsfgcat(vdata_id, HDF_VDATA, 0, vattr_buf) write(*,*) 'Values of vdata attribute ', vattr_buf C C Get the first attribute of the field specified by field_index. C status = vsfgnat(vdata_id, field_index, 0, fattr_buf) write(*,*) 'Values of the field attribute = ', fattr_buf C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_write_mixed_vdata.f000066400000000000000000000077671503061704500240470ustar00rootroot00000000000000 program write_mixed_vdata implicit none C C Parameter declaration C character*16 FILE_NAME character*18 CLASS_NAME character*16 VDATA_NAME character*4 FIELD1_NAME character*6 FIELD2_NAME character*5 FIELD3_NAME character*5 FIELD4_NAME character*23 FIELDNAME_LIST integer N_RECORDS, N_FIELDS, ORDER integer BUF_SIZE C parameter (FILE_NAME = 'Packed_Vdata.hdf', + CLASS_NAME = 'General Data Class', + VDATA_NAME = 'Mixed Data Vdata', + FIELD1_NAME = 'Temp', + FIELD2_NAME = 'Height', + FIELD3_NAME = 'Speed', + FIELD4_NAME = 'Ident', + FIELDNAME_LIST = 'Temp,Height,Speed,Ident') parameter (N_RECORDS = 20, + N_FIELDS = 4, + ORDER = 1, + BUF_SIZE = (4 + 2 + 4 + 1)*N_RECORDS) integer DFACC_WRITE, DFNT_FLOAT32, DFNT_INT16, DFNT_CHAR8, + FULL_INTERLACE, HDF_VSPACK parameter (DFACC_WRITE = 2, + DFNT_FLOAT32 = 5, + DFNT_INT16 = 22, + DFNT_CHAR8 = 4, + FULL_INTERLACE = 0, + HDF_VSPACK = 0) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsfsnam, vsfscls, vsffdef, vsfsfld, + vsfnpak, vsfcpak, vsfwrit, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id integer vdata_ref, num_of_records real temp(N_RECORDS) integer*2 height(N_RECORDS) real speed(N_RECORDS) character ident(N_RECORDS) integer i C C Buffer for packed data should be big enough to hold N_RECORDS. C integer databuf(BUF_SIZE/4 + 1) C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Create a new vdata. C vdata_ref = -1 vdata_id = vsfatch(file_id, vdata_ref, 'w') C C Set name and class name of the vdata. C status = vsfsnam(vdata_id, VDATA_NAME) status = vsfscls(vdata_id, CLASS_NAME) C C Introduce each field's name, data type, and order. This is the C first part in defining a field. C status = vsffdef(vdata_id, FIELD1_NAME, DFNT_FLOAT32, ORDER) status = vsffdef(vdata_id, FIELD2_NAME, DFNT_INT16, ORDER) status = vsffdef(vdata_id, FIELD3_NAME, DFNT_FLOAT32, ORDER) status = vsffdef(vdata_id, FIELD4_NAME, DFNT_CHAR8, ORDER) C C Finalize the definition of the fields. C status = vsfsfld(vdata_id, FIELDNAME_LIST) C C Enter data values into the field databufs by the records. C do 10 i = 1, N_RECORDS temp(i) = 1.11 * i height(i) = i - 1 speed(i) = 1.11 * i ident(i) = char(64+i) 10 continue C C Pack N_RECORDS of data into databuf. In Fortran, each field is packed C using separate calls to vsfnpak or vsfcpak. C status = vsfnpak(vdata_id, HDF_VSPACK, ' ', databuf, BUF_SIZE, + N_RECORDS, FIELD1_NAME, temp) status = vsfnpak(vdata_id, HDF_VSPACK, ' ', databuf, BUF_SIZE, + N_RECORDS, FIELD2_NAME, height) status = vsfnpak(vdata_id, HDF_VSPACK, ' ', databuf, BUF_SIZE, + N_RECORDS, FIELD3_NAME, speed) status = vsfcpak(vdata_id, HDF_VSPACK, ' ', databuf, BUF_SIZE, + N_RECORDS, FIELD4_NAME, ident) C C Write all the records of the packed data to the vdata. C num_of_records = vsfwrit(vdata_id, databuf, N_RECORDS, + FULL_INTERLACE) C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VD/h4ex_VD_write_to_vdata.f000066400000000000000000000065141503061704500233500ustar00rootroot00000000000000 program write_to_vdata implicit none C C Parameter declaration C character*18 FILE_NAME character*13 CLASS_NAME character*14 VDATA_NAME character*8 FIELD1_NAME character*4 FIELD2_NAME character*11 FIELD3_NAME character*27 FIELDNAME_LIST integer N_RECORDS integer ORDER_1, ORDER_2, ORDER_3 integer N_VALS_PER_REC C parameter (FILE_NAME = 'General_Vdatas.hdf', + CLASS_NAME = 'Particle Data', + VDATA_NAME = 'Solid Particle', + FIELD1_NAME = 'Position', + FIELD2_NAME = 'Mass', + FIELD3_NAME = 'Temperature', + FIELDNAME_LIST = 'Position,Mass,Temperature') parameter (N_RECORDS = 10, + ORDER_1 = 3, + ORDER_2 = 1, + ORDER_3 = 2, + N_VALS_PER_REC = ORDER_1 + ORDER_2 + ORDER_3) integer DFACC_WRITE, DFNT_FLOAT32, FULL_INTERLACE parameter (DFACC_WRITE = 2, + DFNT_FLOAT32 = 5, + FULL_INTERLACE = 0) C C Function declaration C integer hopen, hclose integer vfstart, vsfatch, vsfsnam, vsfscls, vsffdef, vsfsfld, + vsfwrt, vsfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id, vdata_id integer vdata_ref, rec_num, num_of_records real data_buf(N_VALS_PER_REC, N_RECORDS) C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the VS interface. C status = vfstart(file_id) C C Create a new vdata. C vdata_ref = -1 vdata_id = vsfatch(file_id, vdata_ref, 'w') C C Set name and class name of the vdata. C status = vsfsnam(vdata_id, VDATA_NAME) status = vsfscls(vdata_id, CLASS_NAME) C C Introduce each field's name, data type, and order. This is the C first part in defining a field. C status = vsffdef(vdata_id, FIELD1_NAME, DFNT_FLOAT32, ORDER_1) status = vsffdef(vdata_id, FIELD2_NAME, DFNT_FLOAT32, ORDER_2) status = vsffdef(vdata_id, FIELD3_NAME, DFNT_FLOAT32, ORDER_3) C C Finalize the definition of the fields. C status = vsfsfld(vdata_id, FIELDNAME_LIST) C C Buffer the data by the record for fully interlaced mode. Note that the C first three elements contain the three values of the first field, C the forth element contains the value of the second field, and the last two C elements contain the two values of the third field. C do 10 rec_num = 1, N_RECORDS data_buf(1, rec_num) = 1.0 * rec_num data_buf(2, rec_num) = 2.0 * rec_num data_buf(3, rec_num) = 3.0 * rec_num data_buf(4, rec_num) = 0.1 + rec_num data_buf(5, rec_num) = 0.0 data_buf(6, rec_num) = 65.0 10 continue C C Write the data from data_buf to the vdata with the full interlacing mode. C num_of_records = vsfwrt(vdata_id, data_buf, N_RECORDS, + FULL_INTERLACE) C C Terminate access to the vdata and to the VS interface, and C close the HDF file. C status = vsfdtch(vdata_id) status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/000077500000000000000000000000001503061704500166425ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/CMakeLists.txt000066400000000000000000000112531503061704500214040ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_VG_F Fortran) # -------------------------------------------------------------------- # Notes: When creating examples they should be prefixed # with "f_vg_vg". This allows for easier filtering of the examples. # -------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () #----------------------------------------------------------------------------- # Setup include Directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_Fortran_MODULE_DIRECTORY}${H4EX_MOD_EXT};${PROJECT_BINARY_DIR};${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Fortran_sourcefiles.cmake) # Remove any output file left over from previous test run add_test ( NAME VG_FORTRAN_EXAMPLES-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove General_HDFobjects.hdf General_RImages.hdf General_Vdatas.hdf General_Vgroups.hdf Image_with_Palette.hdf Packed_Vdata.hdf Two_Vdatas.hdf Two_Vgroups.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (VG_FORTRAN_EXAMPLES-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (VG_FORTRAN_EXAMPLES-clearall-objects PROPERTIES LABELS EXAMPLES) endif () set (last_test "VG_FORTRAN_EXAMPLES-clearall-objects") foreach (example_name ${examples}) add_executable (${EXAMPLE_VARNAME}_f_vg_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_vg_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_vg_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_vg_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_vg_${example_name} PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (${EXAMPLE_VARNAME}_f_vg_${example_name} PROPERTIES LABELS EXAMPLES) endif () set (last_test "${EXAMPLE_VARNAME}_f_vg_${example_name}") endif () endforeach () foreach (example_name ${examples_mf}) add_executable (${EXAMPLE_VARNAME}_f_vg_mf_${example_name} ${PROJECT_SOURCE_DIR}/h4ex_${example_name}.f) set_target_properties (${EXAMPLE_VARNAME}_f_vg_mf_${example_name} PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries (${EXAMPLE_VARNAME}_f_vg_mf_${example_name} ${H4EX_HDF4_LINK_LIBS}) if (H4EX_BUILD_TESTING) add_test ( NAME ${EXAMPLE_VARNAME}_f_vg_mf_${example_name} COMMAND "${CMAKE_COMMAND}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -D "TEST_OUTPUT=${testname}.out" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -P "${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/runTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_f_vg_mf_${example_name} PROPERTIES DEPENDS ${last_test} LABELS EXAMPLES) else () set_tests_properties (${EXAMPLE_VARNAME}_f_vg_mf_${example_name} PROPERTIES LABELS EXAMPLES) endif () set (last_test "${EXAMPLE_VARNAME}_f_vg_mf_${example_name}") endif () endforeach () hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/Fortran_sourcefiles.cmake000066400000000000000000000006021503061704500236600ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (examples VG_create_vgroup VG_insert_vdatas_to_vgroup VG_set_get_vgroup_attr VG_vgroup_contents VG_get_vgroup_info ) set (examples_mf VG_add_sds_to_vgroup ) hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_add_sds_to_vgroup.f000066400000000000000000000044701503061704500240470ustar00rootroot00000000000000 program add_SDS_to_a_vgroup implicit none C C Parameter declaration C character*19 FILE_NAME character*7 SDS_NAME character*9 VG_NAME character*13 VG_CLASS C parameter (FILE_NAME = 'General_Vgroups.hdf', + SDS_NAME = 'Test SD', + VG_NAME = 'SD Vgroup', + VG_CLASS = 'Common Vgroups') integer DFACC_CREATE, DFACC_WRITE parameter (DFACC_CREATE = 4, DFACC_WRITE = 2) integer DFNT_INT32 parameter (DFNT_INT32 = 24) integer DFTAG_NDG parameter (DFTAG_NDG = 720) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfsnam, vfscls, vfadtr, vfdtch, vfend integer sfstart, sfcreate, sfid2ref, sfendacc, sfend C C**** Variable declaration ******************************************* C integer status integer file_id integer vgroup_id integer sd_id, sds_id, sds_ref integer dim_sizes(1), rank C C**** End of variable declaration ************************************ C C C Create the HDF file. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Initialize SD interface. C sd_id = sfstart(FILE_NAME, DFACC_WRITE) C C Set the rank and the size of SDS's dimension. C rank = 1 dim_sizes(1) = 10 C C Create the SDS. C sds_id = sfcreate(sd_id, SDS_NAME, DFNT_INT32, rank, dim_sizes) C C Create a vgroup and set its name and class. C vgroup_id = vfatch(file_id, -1 , 'w') status = vfsnam(vgroup_id, VG_NAME) status = vfscls(vgroup_id, VG_CLASS) C C Obtain the reference number of the SDS using its identifier. C sds_ref = sfid2ref(sds_id) C C Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used C when adding an SDS. Refer to HDF Reference Manual, Section III, Table 3K, C for the entire list of tags. C status = vfadtr(vgroup_id, DFTAG_NDG, sds_ref) C C Terminate access to the SDS and to the SD interface. C status = sfendacc(sds_id) status = sfend(sd_id) C C Terminate access to the vgroup. C status = vfdtch(vgroup_id) C C Terminate access to the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_create_vgroup.f000066400000000000000000000026031503061704500232030ustar00rootroot00000000000000 program create_vgroup implicit none C C Parameter declaration C character*15 FILE_NAME C parameter (FILE_NAME = 'Two_Vgroups.hdf') integer DFACC_CREATE parameter (DFACC_CREATE = 4) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id integer vgroup1_id, vgroup2_id, vgroup_ref C C**** End of variable declaration ************************************ C C C Create the HDF file. C file_id = hopen(FILE_NAME, DFACC_CREATE, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Create the first vgroup. Note that the vgroup reference number is set C to -1 for creating and the access mode is 'w' for writing. C vgroup_ref = -1 vgroup1_id = vfatch(file_id, vgroup_ref, 'w') C C Create the second vgroup. C vgroup2_id = vfatch(file_id, vgroup_ref, 'w') C C Any operations on the vgroups. C C .............................. C C Terminate access to the first vgroup. C status = vfdtch(vgroup1_id) C C Terminate access to the second vgroup. C status = vfdtch(vgroup2_id) C C Terminate access to the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_get_vgroup_info.f000066400000000000000000000053321503061704500235340ustar00rootroot00000000000000 program getinfo_about_vgroup implicit none C C Parameter declaration C character*19 FILE_NAME C parameter (FILE_NAME = 'General_Vgroups.hdf') integer DFACC_READ parameter (DFACC_READ = 1) integer SIZE parameter(SIZE = 10) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfgnam, vfgcls, vflone, vfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id integer vgroup_id integer lone_vg_number, num_of_lones character*64 vgroup_name, vgroup_class integer ref_array(SIZE) integer i C C**** End of variable declaration ************************************ C C C Initialize ref_array. C do 10 i = 1, SIZE ref_array(i) = 0 10 continue C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Get and print the name and class name of all lone vgroups. C First, call vflone with num_of_lones set to 0 to get the number of C lone vgroups in the file and check whether size of ref_array is C big enough to hold reference numbers of ALL lone groups. C If ref_array is not big enough, exit the program after displaying an C informative message. C num_of_lones = 0 num_of_lones = vflone(file_id, ref_array, num_of_lones) if (num_of_lones .gt. SIZE) then write(*,*) num_of_lones, 'lone vgroups is found' write(*,*) 'increase the size of ref_array to hold reference ' write(*,*) 'numbers of all lone vgroups in the file' stop endif C C If there are any lone groups in the file, C if (num_of_lones .gt. 0) then C C call vflone again to retrieve the reference numbers into ref_array. C num_of_lones = vflone(file_id, ref_array, num_of_lones) C C Display the name and class of each vgroup. C write(*,*) 'Lone vgroups in the file are:' do 20 lone_vg_number = 1, num_of_lones C C Attach to the current vgroup, then get and display its name and class. C Note: the current vgroup must be detached before moving to the next. C vgroup_name = ' ' vgroup_class = ' ' vgroup_id = vfatch(file_id, ref_array(lone_vg_number), 'r') status = vfgnam(vgroup_id, vgroup_name) status = vfgcls(vgroup_id, vgroup_class) write(*,*) 'Vgroup name ' , vgroup_name write(*,*) 'Vgroup class ' , vgroup_class write(*,*) status = vfdtch(vgroup_id) 20 continue endif C C Terminate access to the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_insert_vdatas_to_vgroup.f000066400000000000000000000125321503061704500253120ustar00rootroot00000000000000 program add_vdatas_to_a_vgroup implicit none C C Parameter declaration C character*19 FILE_NAME character*8 VG_NAME character*10 VG_CLASS character*15 VD1_NAME character*8 VD1_CLASS character*11 VD2_NAME character*13 VD2_CLASS character*9 VD3_NAME character*4 VD3_CLASS C parameter (FILE_NAME = 'General_Vgroups.hdf', + VG_NAME = 'Vertices', + VG_CLASS = 'Vertex Set') parameter (VD1_NAME = 'X,Y Coordinates', + VD2_NAME = 'Temperature', + VD3_NAME = 'Node List') parameter (VD1_CLASS = 'Position', + VD2_CLASS = 'Property List', + VD3_CLASS = 'Mesh') character*2 FIELD1_VD1 character*2 FIELD2_VD1 character*3 FIELD_VD2 character*4 FIELD_VD3 character*5 FIELDNAME_LIST parameter (FIELD1_VD1 = 'PX', + FIELD2_VD1 = 'PY', + FIELD_VD2 = 'TMP', + FIELD_VD3 = 'PLIST', + FIELDNAME_LIST = 'PX,PY') integer N_RECORDS parameter (N_RECORDS = 30) integer DFACC_WRITE parameter (DFACC_WRITE = 2) integer DFNT_FLOAT32, DFNT_INT16 parameter (DFNT_FLOAT32 = 5, DFNT_INT16 = 22) integer FULL_INTERLACE parameter (FULL_INTERLACE = 0) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfsnam, vfscls, vfinsrt, vfdtch, vfend integer vsfatch, vsfsnam, vsfscls, vsffdef, vsfsfld, + vsfwrt, vsfwrtc, vsfdtch C C**** Variable declaration ******************************************* C integer status integer file_id integer vgroup_id integer vdata1_id, vdata2_id, vdata3_id, vd_index integer num_of_records integer i, j, k real pxy(2,N_RECORDS), tmp(N_RECORDS) integer plist(3,N_RECORDS) data pxy /-1.5, 2.3, -1.5, 1.98, -2.4, .67, + -3.4, 1.46, -.65, 3.1, -.62, 1.23, + -.4, 3.8, -3.55, 2.3, -1.43, 2.44, + .23, 1.13, -1.4, 5.43, -1.4, 5.8, + -3.4, 3.85, -.55, .3, -.21, 1.22, + -1.44, 1.9, -1.4, 2.8, .94, 1.78, + -.4, 2.32, -.87, 1.99, -.54, 4.11, + -1.5, 1.35, -1.4, 2.21, -.22, 1.8, + -1.1, 4.55, -.44, .54, -1.11, 3.93, + -.76, 1.9, -2.34, 1.7, -2.2, 1.21/ C C**** End of variable declaration ************************************ C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Buffer the data for the third and second vdatas. C do 20 i = 1, N_RECORDS do 10 j = 1, 3 plist(j,i) = k k = k+1 10 continue 20 continue do 30 i = 1, N_RECORDS tmp(i) = (i-1) * 10.0 30 continue C C Create a vgroup and set its name and class. C Note that the vgroup's reference number is set to -1 for creating C and the access mode is 'w' for writing. C vgroup_id = vfatch(file_id, -1 , 'w') status = vfsnam(vgroup_id, VG_NAME) status = vfscls(vgroup_id, VG_CLASS) C C Create the first vdata then set its name and class. Note that the vdata's C reference number is set to -1 for creating and the access mode is 'w' for C writing. C vdata1_id = vsfatch(file_id, -1, 'w') status = vsfsnam(vdata1_id, VD1_NAME) status = vsfscls(vdata1_id, VD1_CLASS) C C Introduce and define the fields of the first vdata. C status = vsffdef(vdata1_id, FIELD1_VD1, DFNT_FLOAT32, 1) status = vsffdef(vdata1_id, FIELD2_VD1, DFNT_FLOAT32, 1) status = vsfsfld(vdata1_id, FIELDNAME_LIST) C C Write the buffered data into the first vdata. C num_of_records = vsfwrt(vdata1_id, pxy, N_RECORDS, + FULL_INTERLACE) C C Insert the vdata into the vgroup using its identifier. C vd_index = vfinsrt(vgroup_id, vdata1_id) C C Detach from the first vdata. C status = vsfdtch(vdata1_id) C C Create, write, and insert the second vdata to the vgroup using C steps similar to those used for the first vdata. C vdata2_id = vsfatch(file_id, -1, 'w') status = vsfsnam(vdata2_id, VD2_NAME) status = vsfscls(vdata2_id, VD2_CLASS) status = vsffdef(vdata2_id, FIELD_VD2, DFNT_FLOAT32, 1) status = vsfsfld(vdata2_id, FIELD_VD2) num_of_records = vsfwrt(vdata2_id, tmp, N_RECORDS, + FULL_INTERLACE) vd_index = vfinsrt(vgroup_id, vdata2_id) status = vsfdtch(vdata2_id) C C Create, write, and insert the third vdata to the vgroup using C steps similar to those used for the first and second vdatas. C vdata3_id = vsfatch(file_id, -1, 'w') status = vsfsnam(vdata3_id, VD3_NAME) status = vsfscls(vdata3_id, VD3_CLASS) status = vsffdef(vdata3_id, FIELD_VD3, DFNT_INT16, 3) status = vsfsfld(vdata3_id, FIELD_VD3) num_of_records = vsfwrtc(vdata3_id, plist, N_RECORDS, + FULL_INTERLACE) vd_index = vfinsrt(vgroup_id, vdata3_id) status = vsfdtch(vdata3_id) C C Terminate access to the vgroup 'Vertices'. C status = vfdtch(vgroup_id) C C Terminate access to the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_set_get_vgroup_attr.f000066400000000000000000000065041503061704500244300ustar00rootroot00000000000000 program vgroup_attribute implicit none C C Parameter declaration C character*19 FILE_NAME character*9 VGROUP_NAME character*15 VGATTR_NAME C parameter (FILE_NAME = 'General_Vgroups.hdf', + VGROUP_NAME = 'SD Vgroup', + VGATTR_NAME = 'First Attribute') integer VSET_NEW_VERSION, VSET_VERSION, VSET_OLD_VERSION parameter (VSET_NEW_VERSION = 4, + VSET_VERSION = 3, + VSET_OLD_VERSION = 2) integer DFACC_WRITE parameter (DFACC_WRITE = 2) integer DFNT_CHAR parameter (DFNT_CHAR = 4) integer N_ATT_VALUES parameter (N_ATT_VALUES = 6) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfgver, vfscatt, vfnatts, vfainfo, + vfind, vfgcatt, vfdtch, vfend C C**** Variable declaration ******************************************* C integer status, n_attrs integer file_id integer vgroup_id, vgroup_ref, vg_version integer attr_index, i integer data_type, n_values, size character vg_attr(N_ATT_VALUES) character vgattr_buf(N_ATT_VALUES), attr_name(30) data vg_attr /'v','g','r','o','u','p'/ C C**** End of variable declaration ************************************ C C C Open the HDF file for reading/writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Get the reference number of the vgroup named VGROUP_NAME. C vgroup_ref = vfind(file_id, VGROUP_NAME) C C Attach to the vgroup found. C vgroup_id = vfatch(file_id, vgroup_ref , 'w') C C Get and display the version of the attached vgroup. C vg_version = vfgver(vgroup_id) if (vg_version .eq. VSET_NEW_VERSION) write(*,*) + VGROUP_NAME, ' is of the newest version, version 4' if (vg_version .eq. VSET_VERSION) write(*,*) + VGROUP_NAME, ' is of a version between 3.2 and 4.0r2' if(vg_version .eq. VSET_OLD_VERSION) write(*,*) + VGROUP_NAME, ' is of version before 3.2' if ((vg_version .ne. VSET_NEW_VERSION) .and. + (vg_version .ne. VSET_VERSION) .and. + (vg_version .ne. VSET_OLD_VERSION)) write(*,*) + 'Unknown version' C C Add the attribute named VGATTR_NAME to the vgroup. C status = vfscatt(vgroup_id, VGATTR_NAME, DFNT_CHAR, N_ATT_VALUES, + vg_attr) C C Get and display the number of attributes attached to this group. C n_attrs = vfnatts(vgroup_id) write(*,*) 'This group has', n_attrs, ' attributes' C C Get and display the name and the number of values of each attribute. C do 10 attr_index=1, n_attrs attr_name = ' ' status = vfainfo(vgroup_id, attr_index-1, attr_name, data_type, + n_values, size) write(*,*) 'Attribute #', attr_index-1, ' is named ', attr_name write(*,*) 'and has', n_values, ' values: ' C C Get and display the attribute values. C status = vfgcatt(vgroup_id, attr_index-1, vgattr_buf) write(*,*) (vgattr_buf(i), i=1,n_values) 10 continue C C Terminate access to the vgroup. C status = vfdtch(vgroup_id) C C Terminate accessto the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/FORTRAN/VG/h4ex_VG_vgroup_contents.f000066400000000000000000000055641503061704500236060ustar00rootroot00000000000000 program vgroup_contents implicit none C C Parameter declaration C character*19 FILE_NAME C parameter (FILE_NAME = 'General_Vgroups.hdf') integer DFACC_ READ parameter (DFACC_READ = 1) C C Function declaration C integer hopen, hclose integer vfstart, vfatch, vfgid, vntrc, vfgttr, vfisvg, + vfisvs, vfdtch, vfend C C**** Variable declaration ******************************************* C integer status integer file_id integer vgroup_id, vgroup_ref, vgroup_pos integer obj_index, num_of_pairs integer obj_tag, obj_ref C C**** End of variable declaration ************************************ C C C Open the HDF file for reading. C file_id = hopen(FILE_NAME, DFACC_READ, 0) C C Initialize the V interface. C status = vfstart(file_id) C C Obtain each vgroup in the file by its reference number, get the C number of objects in the vgroup, and display the information C about that vgroup. C vgroup_ref = -1 vgroup_pos = 0 10 continue C C Get the reference number of the next vgroup in the file. C vgroup_ref = vfgid(file_id, vgroup_ref) C C Attach to the vgroup or go to the end if no additional vgroup is found. C if(vgroup_ref. eq. -1) goto 100 vgroup_id = vfatch(file_id, vgroup_ref , 'r') C C Get the total number of objects in the vgroup. C num_of_pairs = vntrc(vgroup_id) C C If the vgroup contains any object, print the tag/ref number C pair of each object in vgroup, in the order they appear in the C file, and indicate whether the object is a vdata, vgroup, or neither. C if (num_of_pairs .gt. 0) then write(*,*) 'Vgroup # ', vgroup_pos, ' contains:' do 20 obj_index = 1, num_of_pairs C C Get the tag/ref number pair of the object specified by its index C and display them. C status = vfgttr(vgroup_id, obj_index-1, obj_tag, obj_ref) C C State whether the HDF object referred to by obj_ref is a vdata, C a vgroup, or neither. C if( vfisvg(vgroup_id, obj_ref) .eq. 1) then write(*,*) 'tag = ', obj_tag, ' ref = ', obj_ref, + ' <--- is a vgroup ' else if ( vfisvs(vgroup_id, obj_ref) .eq. 1) then write(*,*) 'tag = ', obj_tag, ' ref = ', obj_ref, + ' <--- is a vdata ' else write(*,*) 'tag = ', obj_tag, ' ref = ', obj_ref, + ' <--- neither vdata nor vgroup ' endif 20 continue else write (*,*) 'Vgroup #', vgroup_pos, ' contains no HDF objects' endif write(*,*) vgroup_pos = vgroup_pos + 1 goto 10 100 continue C C Terminate access to the vgroup. C status = vfdtch(vgroup_id) C C Terminate access to the V interface and close the HDF file. C status = vfend(file_id) status = hclose(file_id) end hdf4-hdf4.3.1/HDF4Examples/JAVA/000077500000000000000000000000001503061704500157345ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/CMakeLists.txt000066400000000000000000000004771503061704500205040ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA Java) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDFJAVA_LIB_DIR};${JAVA_INCLUDE_PATH};${JAVA_INCLUDE_PATH2}" ) add_subdirectory (exAN) add_subdirectory (exGR) add_subdirectory (exVD) add_subdirectory (exSD) add_subdirectory (exJ) hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/000077500000000000000000000000001503061704500165675ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/CMakeLists.txt000066400000000000000000000100061503061704500213240ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA_AN Java) set (CMAKE_VERBOSE_MAKEFILE 1) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Java_sourcefiles.cmake) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () set (CMAKE_JAVA_INCLUDE_PATH ".") foreach (CMAKE_JINCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_JINCLUDE_PATH}") endforeach () set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${H4EX_JAVA_LIBRARY}$<$:${CMAKE_DEBUG_POSTFIX}>;") set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () foreach (HCP_JAR ${HDF4_JAVA_INCLUDE_DIRS}) get_filename_component (_HCP_FILE ${HCP_JAR} NAME) set (HDFJAVA_CLASSJARS "${_HCP_FILE} ${HDFJAVA_CLASSJARS}") endforeach () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) file (WRITE ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt "Main-Class: ${example_name} Class-Path: ${HDFJAVA_CLASSJARS} " ) add_jar (${EXAMPLE_VARNAME}J_${example_name} SOURCES ${example} MANIFEST ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt ) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_JAR_FILE ${EXAMPLE_VARNAME}J_${example_name} JAR_FILE) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_CLASSPATH ${EXAMPLE_VARNAME}J_${example_name} CLASSDIR) add_dependencies (${EXAMPLE_VARNAME}J_${example_name} ${H4EX_JAVA_LIBRARIES}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST resultfile resultcode) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_PROGRAM=${resultfile}" -D "TEST_ARGS:STRING=${ARGN};${CMD_ARGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${EXAMPLE_VARNAME}J_${resultfile}_JAR_FILE}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${PROJECT_BINARY_DIR}/${resultfile}.out" -D "TEST_REFERENCE=${resultfile}.txt" -D "TEST_EXPECT=${resultcode}" -D "TEST_SKIP_COMPARE=TRUE" -P "${H4EX_RESOURCES_DIR}/jrunTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${resultfile} PROPERTIES DEPENDS ${last_test}) endif () set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${resultfile}") endmacro () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${example_name}.hdf ${example_name}.out ${example_name}.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${example_name}.txt ${PROJECT_BINARY_DIR}/${example_name}.txt ) set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects) set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects") ADD_H4_TEST (${example_name} 0) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/Java_sourcefiles.cmake000066400000000000000000000004071503061704500230560ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (H4EX_JAVA_EXAMPLES h4jex_AN_create_annotation.java ) hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/h4jex_AN_create_annotation.java000066400000000000000000000212021503061704500246040ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; public class h4jex_AN_create_annotation { private static String FILE_NAME = "h4jex_AN_create_annotation.hdf"; private static String VG_NAME = "AN Vgroup"; private static String FILE_LABEL_TXT = "General HDF objects"; private static String FILE_DESC_TXT = "This is an HDF file that contains general HDF objects"; private static String DATA_LABEL_TXT = "Common AN Vgroup"; private static String DATA_DESC_TXT = "This is a vgroup that is used to test data annotations"; public static void main(String args[]) throws Exception { //************************* Variable declaration ************************** long file_id; // HDF file identifier long an_id; // AN interface identifier long file_label_id; // file label identifier long file_desc_id; // file description identifier long data_label_id; // data label identifier long data_desc_id; // data description identifier long vgroup_id; int vgroup_tag; int vgroup_ref; //********************** End of variable declaration ********************** // Create the HDF file. try { file_id = HDFLibrary.Hopen(FILE_NAME, HDFConstants.DFACC_CREATE); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to open file " + FILE_NAME + "for writing."); return; } // Initialize the AN interface. try { an_id = HDFLibrary.ANstart(file_id); try { // Create the file label. file_label_id = HDFLibrary.ANcreatef(an_id, HDFConstants.AN_FILE_LABEL); try { // Write the annotations to the file label. HDFLibrary.ANwriteann(file_label_id, FILE_LABEL_TXT, FILE_LABEL_TXT.length()); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to write label annotation."); } try { // Create file description. file_desc_id = HDFLibrary.ANcreatef(an_id, HDFConstants.AN_FILE_DESC); try { // Write the annotation to the file description. HDFLibrary.ANwriteann(file_desc_id, FILE_DESC_TXT, FILE_DESC_TXT.length()); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to write description annotation."); } try { // Create a vgroup in the V interface. Note that the vgroup's ref number // is set to -1 for creating and the access mode is "w" for writing. HDFLibrary.Vstart(file_id); try { vgroup_id = HDFLibrary.Vattach(file_id, -1, "w"); try { HDFLibrary.Vsetname(vgroup_id, VG_NAME); } catch (Exception e) { e.printStackTrace(); System.err.println("Could not name group."); } try { // Obtain the tag and ref number of the vgroup for subsequent // references. vgroup_tag = HDFLibrary.VQuerytag(vgroup_id); vgroup_ref = HDFLibrary.VQueryref(vgroup_id); // Create the data label for the vgroup identified by its tag // and ref number. data_label_id = HDFLibrary.ANcreate( an_id, (short)vgroup_tag, (short)vgroup_ref, HDFConstants.AN_DATA_LABEL); try { // Write the annotation text to the data label. HDFLibrary.ANwriteann(data_label_id, DATA_LABEL_TXT, DATA_LABEL_TXT.length()); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to write data label annotation."); } try { // Create the data description for the vgroup identified by its tag // and ref number. data_desc_id = HDFLibrary.ANcreate(an_id, (short)vgroup_tag, (short)vgroup_ref, HDFConstants.AN_DATA_DESC); try { // Write the annotation text to the data description. HDFLibrary.ANwriteann(data_desc_id, DATA_DESC_TXT, DATA_DESC_TXT.length()); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to write data description annotation."); } HDFLibrary.ANendaccess(data_desc_id); } catch (Exception e) { e.printStackTrace(); System.err.println("annot create a new data description annotation."); } HDFLibrary.ANendaccess(data_label_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot create a new data label annotation."); } // Terminate access to the vgroup and to the V interface. HDFLibrary.Vdetach(vgroup_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Could not attach to VGroup interface"); } HDFLibrary.Vend(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Could not start VGroup interface"); } HDFLibrary.ANendaccess(file_desc_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot create a new file description annotation."); } HDFLibrary.ANendaccess(file_label_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot create a new file label annotation."); } // Terminate access to the AN interface and close the HDF file. HDFLibrary.ANend(an_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot start annotation handling on the file " + FILE_NAME); } HDFLibrary.Hclose(file_id); System.out.println("AN_create_annotation done"); } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/testfiles/000077500000000000000000000000001503061704500205715ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exAN/testfiles/h4jex_AN_create_annotation.txt000066400000000000000000000000321503061704500265020ustar00rootroot00000000000000AN_create_annotation done hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/000077500000000000000000000000001503061704500166015ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/CMakeLists.txt000066400000000000000000000100061503061704500213360ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA_GR Java) set (CMAKE_VERBOSE_MAKEFILE 1) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Java_sourcefiles.cmake) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () set (CMAKE_JAVA_INCLUDE_PATH ".") foreach (CMAKE_JINCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_JINCLUDE_PATH}") endforeach () set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${H4EX_JAVA_LIBRARY}$<$:${CMAKE_DEBUG_POSTFIX}>;") set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () foreach (HCP_JAR ${HDF4_JAVA_INCLUDE_DIRS}) get_filename_component (_HCP_FILE ${HCP_JAR} NAME) set (HDFJAVA_CLASSJARS "${_HCP_FILE} ${HDFJAVA_CLASSJARS}") endforeach () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) file (WRITE ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt "Main-Class: ${example_name} Class-Path: ${HDFJAVA_CLASSJARS} " ) add_jar (${EXAMPLE_VARNAME}J_${example_name} SOURCES ${example} MANIFEST ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt ) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_JAR_FILE ${EXAMPLE_VARNAME}J_${example_name} JAR_FILE) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_CLASSPATH ${EXAMPLE_VARNAME}J_${example_name} CLASSDIR) add_dependencies (${EXAMPLE_VARNAME}J_${example_name} ${H4EX_JAVA_LIBRARIES}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST resultfile resultcode) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_PROGRAM=${resultfile}" -D "TEST_ARGS:STRING=${ARGN};${CMD_ARGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${EXAMPLE_VARNAME}J_${resultfile}_JAR_FILE}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${PROJECT_BINARY_DIR}/${resultfile}.out" -D "TEST_REFERENCE=${resultfile}.txt" -D "TEST_EXPECT=${resultcode}" -D "TEST_SKIP_COMPARE=TRUE" -P "${H4EX_RESOURCES_DIR}/jrunTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${resultfile} PROPERTIES DEPENDS ${last_test}) endif () set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${resultfile}") endmacro () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${example_name}.hdf ${example_name}.out ${example_name}.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${example_name}.txt ${PROJECT_BINARY_DIR}/${example_name}.txt ) set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects) set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects") ADD_H4_TEST (${example_name} 0) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/Java_sourcefiles.cmake000066400000000000000000000004141503061704500230660ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (H4EX_JAVA_EXAMPLES h4jex_GR_create_and_write_image.java ) hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/h4jex_GR_create_and_write_image.java000066400000000000000000000113261503061704500256020ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; public class h4jex_GR_create_and_write_image { private static String FILE_NAME = "h4ex_GR_create_and_write_image.hdf"; private static String IMAGE_NAME = "Image Array 1"; private static int X_LENGTH = 10; // number of columns in the image private static int Y_LENGTH = 5; // number of rows in the image private static int N_COMPS = 2; // number of components in the image public static void main(String args[]) throws Exception { //************************* Variable declaration ************************** long file_id; // HDF file identifier long gr_id; // GR interface identifier long ri_id; // raster image identifier int[] start = new int[2]; // start position to write for each dimension int[] edges = new int[2]; // number of elements to be written along each dimension int[] dim_sizes = new int[2]; // dimension sizes of the image array int interlace_mode; // interlace mode of the image int data_type; // data type of the image data short[][][] image_buf = new short[Y_LENGTH][X_LENGTH][N_COMPS]; //********************** End of variable declaration ********************** // Create and open the file. try { file_id = HDFLibrary.Hopen(FILE_NAME, HDFConstants.DFACC_CREATE); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to open file " + FILE_NAME + "for writing."); return; } // Initialize the GR interface. try { gr_id = HDFLibrary.GRstart(file_id); // Set the data type, interlace mode, and dimensions of the image. data_type = HDFConstants.DFNT_INT16; interlace_mode = HDFConstants.MFGR_INTERLACE_PIXEL; dim_sizes[0] = X_LENGTH; dim_sizes[1] = Y_LENGTH; try { // Create the raster image array. ri_id = HDFLibrary.GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); // Fill the image data buffer with values. for (int i = 0; i < Y_LENGTH; i++) { for (int j = 0; j < X_LENGTH; j++) { image_buf[i][j][0] = (short)((i + j) + 1); // first component image_buf[i][j][1] = (short)((i + j) + 1); // second component } } // Define the size of the data to be written, i.e., start from the origin // and go as long as the length of each dimension. start[0] = start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; // Write the data in the buffer into the image array. try { HDFLibrary.GRwriteimage(ri_id, start, null, edges, image_buf); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to create the raster image array"); } // Terminate access to the raster image HDFLibrary.GRendaccess(ri_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to create the raster image array"); } // Terminate access to the GR interface HDFLibrary.GRend(gr_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot start GR interface handling on the file " + FILE_NAME); } HDFLibrary.Hclose(file_id); System.out.println("GR_create_and_write_image done"); } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/testfiles/000077500000000000000000000000001503061704500206035ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exGR/testfiles/h4jex_GR_create_and_write_image.txt000066400000000000000000000000371503061704500274770ustar00rootroot00000000000000GR_create_and_write_image done hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/000077500000000000000000000000001503061704500164625ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/CMakeLists.txt000066400000000000000000000101731503061704500212240ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA_J Java) set (CMAKE_VERBOSE_MAKEFILE 1) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- set (H4EX_JAVA_EXAMPLES HDF4FileCreate.java HDF4GroupCreate.java HDF4DatasetCreate.java VDWriteToVdata.java VDReadFromVdata.java ) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () set (CMAKE_JAVA_INCLUDE_PATH ".") foreach (CMAKE_JINCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_JINCLUDE_PATH}") endforeach () set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${H4EX_JAVA_LIBRARY}$<$:${CMAKE_DEBUG_POSTFIX}>;") set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () foreach (HCP_JAR ${HDF4_JAVA_INCLUDE_DIRS}) get_filename_component (_HCP_FILE ${HCP_JAR} NAME) set (HDFJAVA_CLASSJARS "${_HCP_FILE} ${HDFJAVA_CLASSJARS}") endforeach () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) file (WRITE ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt "Main-Class: ${example_name} Class-Path: ${HDFJAVA_CLASSJARS} " ) add_jar (${EXAMPLE_VARNAME}J_${example_name} SOURCES ${example} MANIFEST ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt ) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_JAR_FILE ${EXAMPLE_VARNAME}J_${example_name} JAR_FILE) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_CLASSPATH ${EXAMPLE_VARNAME}J_${example_name} CLASSDIR) add_dependencies (${EXAMPLE_VARNAME}J_${example_name} ${H4EX_JAVA_LIBRARIES}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST resultfile resultcode) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_PROGRAM=${resultfile}" -D "TEST_ARGS:STRING=${ARGN};${CMD_ARGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${EXAMPLE_VARNAME}J_${resultfile}_JAR_FILE}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${PROJECT_BINARY_DIR}/${resultfile}.out" -D "TEST_REFERENCE=${resultfile}.txt" -D "TEST_EXPECT=${resultcode}" -D "TEST_SKIP_COMPARE=TRUE" -P "${H4EX_RESOURCES_DIR}/jrunTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${resultfile} PROPERTIES DEPENDS ${last_test}) endif () set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${resultfile}") endmacro () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${example_name}.hdf ${example_name}.out ${example_name}.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${example_name}.txt ${PROJECT_BINARY_DIR}/${example_name}.txt ) set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects) set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects") ADD_H4_TEST (${example_name} 0) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/HDF4DatasetCreate.java000066400000000000000000000202031503061704500224410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; /** *

* Title: HDF Native Package (Java) Example *

*

* Description: this example shows how to create HDF4 datasets using the * "HDF Native Package (Java)". The example creates the group structure and * datasets: * *

 *     "/" (root)
 *         integer arrays
 *             2D 32-bit integer 20x10
 *             3D unsigned 8-bit integer 20x10x5
 *         float arrays
 *             2D 64-bit double 20x10
 *             3D 32-bit float  20x10x5
 * 
* * Reference the C Example, VG_add_sds_to_vgroup. *

*/ public class HDF4DatasetCreate { private static String fname = "HDF4DatasetCreate.hdf"; private static int[] dims2D = {20, 10}; private static int[] dims3D = {20, 10, 5}; public static void main(String args[]) throws Exception { long file_id = -1; long vgroup_id1 = -1; long vgroup_id2 = -1; long sd_id = -1; long sds_id = -1; int sds_ref = -1; // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(fname, HDFConstants.DFACC_CREATE); // Initialize the V interface. HDFLibrary.Vstart(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to create file:" + fname); return; } // Create two vgroups and set their name and class. try { // Create the vgroup. Note that the vgroup reference number is set // to -1 for creating and the access mode is "w" for writing. vgroup_id1 = HDFLibrary.Vattach(file_id, -1, "w"); if (vgroup_id1 >= 0) { HDFLibrary.Vsetname(vgroup_id1, "integer arrays"); HDFLibrary.Vsetclass(vgroup_id1, "Common Vgroups"); } vgroup_id2 = HDFLibrary.Vattach(file_id, -1, "w"); if (vgroup_id2 >= 0) { HDFLibrary.Vsetname(vgroup_id2, "float arrays"); HDFLibrary.Vsetclass(vgroup_id2, "Common Vgroups"); } } catch (Exception e) { e.printStackTrace(); } // Initialize the SD interface. try { sd_id = HDFLibrary.SDstart(fname, HDFConstants.DFACC_WRITE); } catch (Exception e) { e.printStackTrace(); } if (sd_id > 0) { // create the SDS, 2D 32-bit (4 bytes) integer dataset of 20 by 10 try { sds_id = HDFLibrary.SDcreate(sd_id, "2D 32-bit integer 20x10", (long)HDFConstants.DFNT_INT32, 2, dims2D); if (sds_id >= 0) { // Obtain the reference number of the SDS using its identifier. sds_ref = HDFLibrary.SDidtoref(sds_id); System.out.println("sds_ref:" + sds_ref); // Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used // when adding an SDS. Refer to Appendix A for the entire list of tags. HDFLibrary.Vaddtagref(vgroup_id1, HDFConstants.DFTAG_NDG, sds_ref); // Terminate access to the data set. HDFLibrary.SDendaccess(sds_id); } } catch (Exception e) { e.printStackTrace(); } try { // create 3D 8-bit (1 byte) unsigned integer dataset of 20 by 10 by 5 sds_id = HDFLibrary.SDcreate(sd_id, "3D 8-bit unsigned integer 20x10x5", (long)HDFConstants.DFNT_INT8, 3, dims3D); if (sds_id >= 0) { // Obtain the reference number of the SDS using its identifier. sds_ref = HDFLibrary.SDidtoref(sds_id); System.out.println("sds_ref:" + sds_ref); // Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used // when adding an SDS. Refer to Appendix A for the entire list of tags. HDFLibrary.Vaddtagref(vgroup_id1, HDFConstants.DFTAG_NDG, sds_ref); // Terminate access to the data set. HDFLibrary.SDendaccess(sds_id); } } catch (Exception e) { e.printStackTrace(); } try { // create 2D 64-bit (8 bytes) double dataset of 20 by 10 sds_id = HDFLibrary.SDcreate(sd_id, "2D 64-bit double 20x10", HDFConstants.DFNT_FLOAT64, 2, dims2D); if (sds_id >= 0) { // Obtain the reference number of the SDS using its identifier. sds_ref = HDFLibrary.SDidtoref(sds_id); System.out.println("sds_ref:" + sds_ref); // Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used // when adding an SDS. Refer to Appendix A for the entire list of tags. HDFLibrary.Vaddtagref(vgroup_id2, HDFConstants.DFTAG_NDG, sds_ref); // Terminate access to the data set. HDFLibrary.SDendaccess(sds_id); } } catch (Exception e) { e.printStackTrace(); } try { // create 3D 32-bit (4 bytes) float dataset of 20 by 10 by 5 sds_id = HDFLibrary.SDcreate(sd_id, "3D 32-bit float 20x10x5", HDFConstants.DFNT_FLOAT32, 3, dims3D); if (sds_id >= 0) { // Obtain the reference number of the SDS using its identifier. sds_ref = HDFLibrary.SDidtoref(sds_id); System.out.println("sds_ref:" + sds_ref); // Add the SDS to the vgroup. Note: the tag DFTAG_NDG is used // when adding an SDS. Refer to Appendix A for the entire list of tags. HDFLibrary.Vaddtagref(vgroup_id2, HDFConstants.DFTAG_NDG, sds_ref); // Terminate access to the data set. HDFLibrary.SDendaccess(sds_id); } } catch (Exception e) { e.printStackTrace(); } // Terminate access to the SD interface and close the file. try { HDFLibrary.SDend(sd_id); } catch (Exception e) { e.printStackTrace(); } } else { System.err.println("Could not initialize SDS interface"); } // Close the groups. try { if (vgroup_id2 >= 0) HDFLibrary.Vdetach(vgroup_id2); } catch (Exception e) { e.printStackTrace(); } try { if (vgroup_id1 >= 0) HDFLibrary.Vdetach(vgroup_id1); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/HDF4FileCreate.java000066400000000000000000000035271503061704500217450ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; /** *

* Title: HDF Native Package (Java) Example *

*

* Description: this example shows how to create an empty HDF4 file using the * "HDF Native Package (Java)". *

*/ public class HDF4FileCreate { private static String fname = "HDF4FileCreate.hdf"; public static void main(String args[]) throws Exception { long file_id = -1; // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(fname, HDFConstants.DFACC_CREATE); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to create file:" + fname); return; } System.out.println("File created:" + fname); // Close the file. try { if (file_id >= 0) HDFLibrary.Hclose(file_id); } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/HDF4GroupCreate.java000066400000000000000000000067201503061704500221600ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; /** *

* Title: HDF Native Package (Java) Example *

*

* Description: this example shows how to create HDF4 groups using the * "HDF Native Package (Java)". The example creates the group structure: * *

 *     "/" (root)
 *         g1
 *             g11
 *             g12
 *         g2
 *             g21
 *             g22
 * 
* *

*/ public class HDF4GroupCreate { private static String fname = "HDF4GroupCreate.hdf"; public static void main(String args[]) throws Exception { long file_id = -1; long subvgroup_id = -1; long vgroup_id1 = -1; long vgroup_id2 = -1; // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(fname, HDFConstants.DFACC_CREATE); // Initialize the V interface. if (file_id >= 0) HDFLibrary.Vstart(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to create file:" + fname); return; } System.out.println("File created:" + fname); try { // Create the vgroup. Note that the vgroup reference number is set // to -1 for creating and the access mode is "w" for writing. if (file_id >= 0) { vgroup_id1 = HDFLibrary.VSattach(file_id, -1, "w"); if (vgroup_id1 >= 0) { HDFLibrary.VSsetname(vgroup_id1, "g1"); HDFLibrary.VSsetclass(vgroup_id1, "Empty Vdatas"); } vgroup_id2 = HDFLibrary.VSattach(file_id, -1, "w"); if (vgroup_id2 >= 0) { HDFLibrary.VSsetname(vgroup_id2, "g2"); HDFLibrary.VSsetclass(vgroup_id2, "Empty Vdatas"); } } } catch (Exception e) { e.printStackTrace(); } // Close the groups. try { if (vgroup_id2 >= 0) HDFLibrary.VSdetach(vgroup_id2); } catch (Exception e) { e.printStackTrace(); } try { if (vgroup_id1 >= 0) HDFLibrary.VSdetach(vgroup_id1); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/Makefile.am000066400000000000000000000022311503061704500205140ustar00rootroot00000000000000# # HDF Java native interface (JNI) Library Examples Makefile(.in) include $(top_srcdir)/config/commence.am # Mark this directory as part of the JNI API JAVA_API=yes JAVAROOT = .classes classes: test -d $(@D)/$(JAVAROOT) || $(MKDIR_P) $(@D)/$(JAVAROOT) pkgpath = examples hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar jarfile = jar$(PACKAGE_TARNAME)examples.jar CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-2.0.16.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-2.0.16.jar:$$CLASSPATH AM_JAVACFLAGS = $(H4_JAVACFLAGS) -deprecation noinst_JAVA = \ HDF4FileCreate.java \ HDF4GroupCreate.java \ HDF4DatasetCreate.java $(jarfile): classnoinst.stamp classes $(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath) noinst_DATA = $(jarfile) .PHONY: classes check_SCRIPTS = TEST_SCRIPT = $(check_SCRIPTS) CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class #JAVA_JUNIT = $(JAVA_SRCS) #noinst_JAVA = @JAVA_JUNIT@ #EXTRA_JAVA = $(JAVA_JUNIT) #EXTRA_TEST = $(TESTS_JUNIT) clean: rm -rf $(JAVAROOT)/* rm -f $(jarfile) rm -f classnoinst.stamp include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/VDReadFromVdata.java000066400000000000000000000124141503061704500222400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; /** *

* Title: HDF Native Package (Java) Example *

*

* Description: this example shows how to read from a HDF4 vdata file using the * "HDF Native Package (Java)". *

*/ public class VDReadFromVdata { private static String fname = "General_Vdatas.hdf"; private static String CLASS_NAME = "Particle Data"; private static String VDATA_NAME = "Solid Particle"; private static String FIELD1_NAME = "Position"; /* contains x, y, z values */ private static String FIELD2_NAME = "Mass"; /* contains weight values */ private static String FIELD3_NAME = "Temperature"; /* contains min and max values */ private static String FIELDNAME_LIST = "Position,Temperature"; /* only two fields are read */ private static int N_RECORDS = 5; /* number of records the vdata contains */ private static int ORDER_1 = 3; /* order of first field */ private static int ORDER_2 = 2; /* order of second field */ private static int N_VALS_PER_REC = 5; /* number of values per record (ORDER_1 + ORDER_2) */ private static int RECORD_INDEX = 3; /* position where reading starts - 4th record */ public static void main(String args[]) throws Exception { long file_id = -1; int vdata_ref = -1; long vdata_id = -1; int num_of_records = -1; float data_buf[][] = new float[N_RECORDS][N_VALS_PER_REC]; /* buffer for vdata values */ // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(fname, HDFConstants.DFACC_READ); // Initialize the V interface. if (file_id >= 0) HDFLibrary.Vstart(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to open file:" + fname); return; } try { /* * Get the reference number of the vdata, whose name is specified in * VDATA_NAME, using VSfind, which will be discussed in Section 4.7.3. */ if (file_id >= 0) { vdata_ref = HDFLibrary.VSfind(file_id, VDATA_NAME); if (vdata_ref > 0) { vdata_id = HDFLibrary.VSattach(file_id, vdata_ref, "r"); } } } catch (Exception e) { e.printStackTrace(); } try { /* * Specify the fields that will be read. */ HDFLibrary.VSsetfields(vdata_id, FIELDNAME_LIST); } catch (Exception e) { e.printStackTrace(); } try { /* * Place the current point to the position specified in RECORD_INDEX. */ HDFLibrary.VSseek(vdata_id, RECORD_INDEX); } catch (Exception e) { e.printStackTrace(); } try { /* * Read the next N_RECORDS records from the vdata and store the data * in the buffer databuf with fully interlaced mode. */ num_of_records = HDFLibrary.VSread(vdata_id, data_buf, N_RECORDS, HDFConstants.FULL_INTERLACE); } catch (Exception e) { e.printStackTrace(); } /* * Display the read data as many records as the number of records * returned by VSread. */ System.out.println(" Particle Position Temperature Range"); for (int rec_num = 0; rec_num < num_of_records; rec_num++) { System.out.println(" " + data_buf[rec_num][0] + ", " + data_buf[rec_num][1] + ", " + data_buf[rec_num][2] + ", " + data_buf[rec_num][3] + ", " + data_buf[rec_num][4]); } // Close the groups. try { if (vdata_id >= 0) HDFLibrary.VSdetach(vdata_id); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/VDWriteToVdata.java000066400000000000000000000131371503061704500221410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; /** *

* Title: HDF Native Package (Java) Example *

*

* Description: this example shows how to create a HDF4 vdata file using the * "HDF Native Package (Java)". *

*/ public class VDWriteToVdata { private static String fname = "General_Vdatas.hdf"; private static String CLASS_NAME = "Particle Data"; private static String VDATA_NAME = "Solid Particle"; private static String FIELD1_NAME = "Position"; /* contains x, y, z values */ private static String FIELD2_NAME = "Mass"; /* contains weight values */ private static String FIELD3_NAME = "Temperature"; /* contains min and max values */ private static String FIELDNAME_LIST = "Position,Mass,Temperature"; /* No spaces b/w names */ private static int N_RECORDS = 10; /* number of records the vdata contains */ private static int ORDER_1 = 3; /* order of first field */ private static int ORDER_2 = 1; /* order of second field */ private static int ORDER_3 = 2; /* order of third field */ private static int N_VALS_PER_REC = 6; /* number of values per record (ORDER_1 + ORDER_2 + ORDER_3) */ public static void main(String args[]) throws Exception { long file_id = -1; long vdata_id = -1; float data_buf[][] = new float[N_RECORDS][N_VALS_PER_REC]; /* buffer for vdata values */ // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(fname, HDFConstants.DFACC_CREATE); // Initialize the V interface. if (file_id >= 0) HDFLibrary.Vstart(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to create file:" + fname); return; } System.out.println("File created:" + fname); try { // Create the vgroup. Note that the vgroup reference number is set // to -1 for creating and the access mode is "w" for writing. if (file_id >= 0) { vdata_id = HDFLibrary.VSattach(file_id, -1, "w"); if (vdata_id >= 0) { HDFLibrary.VSsetname(vdata_id, VDATA_NAME); HDFLibrary.VSsetclass(vdata_id, CLASS_NAME); } } } catch (Exception e) { e.printStackTrace(); } try { /* * Introduce each field's name, data type, and order. This is the first * part in defining a field. */ HDFLibrary.VSfdefine(vdata_id, FIELD1_NAME, HDFConstants.DFNT_FLOAT32, ORDER_1); HDFLibrary.VSfdefine(vdata_id, FIELD2_NAME, HDFConstants.DFNT_FLOAT32, ORDER_2); HDFLibrary.VSfdefine(vdata_id, FIELD3_NAME, HDFConstants.DFNT_FLOAT32, ORDER_3); } catch (Exception e) { e.printStackTrace(); } try { /* * Finalize the definition of the fields. */ HDFLibrary.VSsetfields(vdata_id, FIELDNAME_LIST); } catch (Exception e) { e.printStackTrace(); } /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (int rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf[rec_num][0] = (float)(1.0 * rec_num); data_buf[rec_num][1] = (float)(2.0 * rec_num); data_buf[rec_num][2] = (float)(3.0 * rec_num); data_buf[rec_num][3] = (float)(0.1 + rec_num); data_buf[rec_num][4] = (float)0.0; data_buf[rec_num][5] = (float)65.0; } try { /* * Write the data from data_buf to the vdata with full interlacing mode. */ HDFLibrary.VSwrite(vdata_id, data_buf, N_RECORDS, HDFConstants.FULL_INTERLACE); } catch (Exception e) { e.printStackTrace(); } // Close the groups. try { if (vdata_id >= 0) HDFLibrary.VSdetach(vdata_id); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/000077500000000000000000000000001503061704500204645ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/HDF4DatasetCreate.txt000066400000000000000000000000501503061704500243370ustar00rootroot00000000000000sds_ref:4 sds_ref:5 sds_ref:6 sds_ref:7 hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/HDF4FileCreate.txt000066400000000000000000000000001503061704500236240ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/HDF4GroupCreate.txt000066400000000000000000000000001503061704500240410ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/VDReadFromVdata.txt000066400000000000000000000003051503061704500241340ustar00rootroot00000000000000 Particle Position Temperature Range 3.0, 6.0, 9.0, 0.0, 65.0 4.0, 8.0, 12.0, 0.0, 65.0 5.0, 10.0, 15.0, 0.0, 65.0 6.0, 12.0, 18.0, 0.0, 65.0 7.0, 14.0, 21.0, 0.0, 65.0 hdf4-hdf4.3.1/HDF4Examples/JAVA/exJ/testfiles/VDWriteToVdata.txt000066400000000000000000000000001503061704500240220ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/000077500000000000000000000000001503061704500165775ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/CMakeLists.txt000066400000000000000000000100061503061704500213340ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA_SD Java) set (CMAKE_VERBOSE_MAKEFILE 1) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Java_sourcefiles.cmake) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () set (CMAKE_JAVA_INCLUDE_PATH ".") foreach (CMAKE_JINCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_JINCLUDE_PATH}") endforeach () set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${H4EX_JAVA_LIBRARY}$<$:${CMAKE_DEBUG_POSTFIX}>;") set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () foreach (HCP_JAR ${HDF4_JAVA_INCLUDE_DIRS}) get_filename_component (_HCP_FILE ${HCP_JAR} NAME) set (HDFJAVA_CLASSJARS "${_HCP_FILE} ${HDFJAVA_CLASSJARS}") endforeach () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) file (WRITE ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt "Main-Class: ${example_name} Class-Path: ${HDFJAVA_CLASSJARS} " ) add_jar (${EXAMPLE_VARNAME}J_${example_name} SOURCES ${example} MANIFEST ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt ) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_JAR_FILE ${EXAMPLE_VARNAME}J_${example_name} JAR_FILE) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_CLASSPATH ${EXAMPLE_VARNAME}J_${example_name} CLASSDIR) add_dependencies (${EXAMPLE_VARNAME}J_${example_name} ${H4EX_JAVA_LIBRARIES}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST resultfile resultcode) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_PROGRAM=${resultfile}" -D "TEST_ARGS:STRING=${ARGN};${CMD_ARGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${EXAMPLE_VARNAME}J_${resultfile}_JAR_FILE}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${PROJECT_BINARY_DIR}/${resultfile}.out" -D "TEST_REFERENCE=${resultfile}.txt" -D "TEST_EXPECT=${resultcode}" -D "TEST_SKIP_COMPARE=TRUE" -P "${H4EX_RESOURCES_DIR}/jrunTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${resultfile} PROPERTIES DEPENDS ${last_test}) endif () set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${resultfile}") endmacro () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${example_name}.hdf ${example_name}.out ${example_name}.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${example_name}.txt ${PROJECT_BINARY_DIR}/${example_name}.txt ) set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects) set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects") ADD_H4_TEST (${example_name} 0) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/Java_sourcefiles.cmake000066400000000000000000000004031503061704500230620ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (H4EX_JAVA_EXAMPLES h4jex_SD_unlimited_sds.java ) hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/h4jex_SD_unlimited_sds.java000066400000000000000000000140401503061704500237740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; public class h4jex_SD_unlimited_sds { private static String FILE_NAME = "h4jex_SD_unlimited_sds.hdf"; private static String SDS_NAME = "AppendableData"; private static int X_LENGTH = 10; private static int Y_LENGTH = 10; private static int RANK = 2; public static void main(String args[]) throws Exception { //************************* Variable declaration ************************** long sd_id; long sds_id; int sds_index; int[] dim_sizes = new int[2]; int[][] data = new int[Y_LENGTH][X_LENGTH]; int[] append_data = new int[X_LENGTH]; int[] start = new int[2]; int[] edges = new int[2]; //********************** End of variable declaration ********************** // Data initialization. for (int j = 0; j < Y_LENGTH; j++) { for (int i = 0; i < X_LENGTH; i++) data[j][i] = (i + 1) + (j + 1); } // Create the file and initialize the SD interface. try { sd_id = HDFLibrary.SDstart(FILE_NAME, HDFConstants.DFACC_CREATE); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to open file " + FILE_NAME + "for writing."); return; } // Define dimensions of the array. Make the first dimension // appendable by defining its length to be unlimited. dim_sizes[0] = HDFConstants.SD_UNLIMITED; dim_sizes[1] = X_LENGTH; try { // Create the array data set. sds_id = HDFLibrary.SDcreate(sd_id, SDS_NAME, HDFConstants.DFNT_INT32, RANK, dim_sizes); // Define the location and the size of the data to be written // to the data set. start[0] = start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; try { // Write the data. HDFLibrary.SDwritedata(sds_id, start, null, edges, data); try { // Terminate access to the array data set, terminate access // to the SD interface, and close the file. HDFLibrary.SDendaccess(sds_id); HDFLibrary.SDend(sd_id); // Store the array values to be appended to the data set. for (int i = 0; i < X_LENGTH; i++) append_data[i] = 1000 + i; try { // Reopen the file and initialize the SD interface. sd_id = HDFLibrary.SDstart(FILE_NAME, HDFConstants.DFACC_WRITE); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to reopen file " + FILE_NAME + "for writing."); return; } // Select the first data set. sds_index = 0; try { sds_id = HDFLibrary.SDselect(sd_id, sds_index); // Check if selected SDS is unlimited. If it is not, then terminate access // to the SD interface and close the file. if (HDFLibrary.SDisrecord(sds_id)) { // Define the location of the append to start at the first column // of the 11th row of the data set and to stop at the end of the // eleventh row. start[0] = Y_LENGTH; start[1] = 0; edges[0] = 1; edges[1] = X_LENGTH; try { // Append data to the data set. HDFLibrary.SDwritedata(sds_id, start, null, edges, append_data); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to append data."); } } } catch (Exception e) { e.printStackTrace(); System.err.println("Could not select the first data set"); } } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to terminate access."); } } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to write data."); } // Terminate access to the data set. HDFLibrary.SDendaccess(sds_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot create the array data set " + SDS_NAME); } // Terminate access to the SD interface and close the HDF file. HDFLibrary.SDend(sd_id); System.out.println("SD_unlimited_sds done"); } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/testfiles/000077500000000000000000000000001503061704500206015ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exSD/testfiles/h4jex_SD_unlimited_sds.txt000066400000000000000000000000261503061704500256730ustar00rootroot00000000000000SD_unlimited_sds done hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/000077500000000000000000000000001503061704500166025ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/CMakeLists.txt000066400000000000000000000100061503061704500213370ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4Examples_JAVA_VD Java) set (CMAKE_VERBOSE_MAKEFILE 1) #----------------------------------------------------------------------------- # Define Sources #----------------------------------------------------------------------------- include (Java_sourcefiles.cmake) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () set (CMAKE_JAVA_INCLUDE_PATH ".") foreach (CMAKE_JINCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_JINCLUDE_PATH}") endforeach () set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${H4EX_JAVA_LIBRARY}$<$:${CMAKE_DEBUG_POSTFIX}>;") set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${HDF4_JAVA_INCLUDE_DIRS}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () foreach (HCP_JAR ${HDF4_JAVA_INCLUDE_DIRS}) get_filename_component (_HCP_FILE ${HCP_JAR} NAME) set (HDFJAVA_CLASSJARS "${_HCP_FILE} ${HDFJAVA_CLASSJARS}") endforeach () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) file (WRITE ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt "Main-Class: ${example_name} Class-Path: ${HDFJAVA_CLASSJARS} " ) add_jar (${EXAMPLE_VARNAME}J_${example_name} SOURCES ${example} MANIFEST ${PROJECT_BINARY_DIR}/${example_name}_Manifest.txt ) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_JAR_FILE ${EXAMPLE_VARNAME}J_${example_name} JAR_FILE) get_target_property (${EXAMPLE_VARNAME}J_${example_name}_CLASSPATH ${EXAMPLE_VARNAME}J_${example_name} CLASSDIR) add_dependencies (${EXAMPLE_VARNAME}J_${example_name} ${H4EX_JAVA_LIBRARIES}) endforeach () if (H4EX_BUILD_TESTING) macro (ADD_H4_TEST resultfile resultcode) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_PROGRAM=${resultfile}" -D "TEST_ARGS:STRING=${ARGN};${CMD_ARGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${EXAMPLE_VARNAME}J_${resultfile}_JAR_FILE}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_LIB_DIRECTORY}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${PROJECT_BINARY_DIR}/${resultfile}.out" -D "TEST_REFERENCE=${resultfile}.txt" -D "TEST_EXPECT=${resultcode}" -D "TEST_SKIP_COMPARE=TRUE" -P "${H4EX_RESOURCES_DIR}/jrunTest.cmake" ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${resultfile} PROPERTIES DEPENDS ${last_test}) endif () set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${resultfile}") endmacro () foreach (example ${H4EX_JAVA_EXAMPLES}) get_filename_component (example_name ${example} NAME_WE) add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${example_name}.hdf ${example_name}.out ${example_name}.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () add_test ( NAME ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${example_name}.txt ${PROJECT_BINARY_DIR}/${example_name}.txt ) set_tests_properties (${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects PROPERTIES DEPENDS ${EXAMPLE_VARNAME}_jnative-h4-${example_name}-clearall-objects) set (last_test "${EXAMPLE_VARNAME}_jnative-h4-${example_name}-copy-objects") ADD_H4_TEST (${example_name} 0) endforeach () endif () hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/Java_sourcefiles.cmake000066400000000000000000000004141503061704500230670ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Define Sources, one file per application #----------------------------------------------------------------------------- set (H4EX_JAVA_EXAMPLES h4jex_VD_create_onefield_vdatas.java ) hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/h4jex_VD_create_onefield_vdatas.java000066400000000000000000000134531503061704500256200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; public class h4jex_VD_create_onefield_vdatas { private static String FILE_NAME = "h4jex_VD_create_onefield_vdatas.hdf"; private static String CLASS1_NAME = "5x1 Array"; private static String CLASS2_NAME = "6x4 Array"; private static String VDATA1_NAME = "First Vdata"; private static String VDATA2_NAME = "Second Vdata"; private static String FIELD1_NAME = "Single-component Field"; private static String FIELD2_NAME = "Multi-component Field"; private static String VDATA_NAME = "Vdata 1"; private static String VDATA_CLASS = "Empty Vdatas"; private static int N_RECORDS_1 = 5; // number of records the first vdata contains private static int N_RECORDS_2 = 6; // number of records the second vdata contains private static int ORDER_2 = 4; // order of the field in the second vdata // Note that the order of the field in the first vdata is 1 public static void main(String args[]) throws Exception { //************************* Variable declaration ************************** long file_id, vdata1_ref, vdata2_ref; // Define an array to buffer the data of the first vdata. byte[] vdata1_buf = {'V', 'D', 'A', 'T', 'A'}; // Define an array to buffer the data of the second vdata. int[] vdata2_buf = {1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16, 5, 10, 15, 20, 6, 12, 18, 24}; //********************** End of variable declaration ********************** // create file VD_create_vdatas(); // Open the HDF file for writing. try { file_id = HDFLibrary.Hopen(FILE_NAME, HDFConstants.DFACC_WRITE); } catch (Exception e) { e.printStackTrace(); System.err.println("Unable to open file " + FILE_NAME + "for writing."); return; } try { // Initialize the VS interface. HDFLibrary.Vstart(file_id); try { // Create the first vdata and populate it with data from the vdata1_buf // array. vdata1_ref = HDFLibrary.VHstoredata(file_id, FIELD1_NAME, vdata1_buf, N_RECORDS_1, HDFConstants.DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME); // Create the second vdata and populate it with data from the vdata2_buf array. vdata2_ref = HDFLibrary.VHstoredatam(file_id, FIELD2_NAME, vdata2_buf, N_RECORDS_2, HDFConstants.DFNT_INT32, VDATA2_NAME, CLASS2_NAME, ORDER_2); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot populate data"); } } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot start V interface handling on the file " + FILE_NAME); } // Terminate access to the VS interface and close the HDF file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } System.out.println("VD_create_onefield_vdatas done"); } public static void VD_create_vdatas() throws Exception { long file_id = -1; long subvgroup_id = -1; long vgroup_id1 = -1; // Create a new file using default properties. try { file_id = HDFLibrary.Hopen(FILE_NAME, HDFConstants.DFACC_CREATE); // Initialize the V interface. if (file_id >= 0) HDFLibrary.Vstart(file_id); } catch (Exception e) { e.printStackTrace(); System.err.println("Failed to create file:" + FILE_NAME); return; } try { // Create the vgroup. Note that the vgroup reference number is set // to -1 for creating and the access mode is "w" for writing. if (file_id >= 0) { vgroup_id1 = HDFLibrary.VSattach(file_id, -1, "w"); if (vgroup_id1 >= 0) { HDFLibrary.VSsetname(vgroup_id1, VDATA_NAME); HDFLibrary.VSsetclass(vgroup_id1, VDATA_CLASS); } } } catch (Exception e) { e.printStackTrace(); } // Close the group. try { if (vgroup_id1 >= 0) HDFLibrary.VSdetach(vgroup_id1); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) { HDFLibrary.Vend(file_id); HDFLibrary.Hclose(file_id); } } catch (Exception e) { e.printStackTrace(); } } } hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/testfiles/000077500000000000000000000000001503061704500206045ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/JAVA/exVD/testfiles/h4jex_VD_create_onefield_vdatas.txt000066400000000000000000000000371503061704500275120ustar00rootroot00000000000000VD_create_onefield_vdatas done hdf4-hdf4.3.1/HDF4Examples/Using_CMake.txt000066400000000000000000000216331503061704500201060ustar00rootroot00000000000000************************************************************************ * Build and Test HDF4 Examples with CMake * ************************************************************************ Notes: This short instruction is written for users who want to quickly build HDF4 Examples using the HDF4 binary package using the CMake tools. More information about using CMake can be found at the Kitware site, www.cmake.org. CMake uses the command line; however, the visual CMake tool is available for the configuration step. The steps are similar for all of the operating systems supported by CMake. NOTES: 1. Using CMake for building and using HDF4 is under active development. While we have attempted to provide error-free files, please understand that development with CMake has not been extensively tested outside of HDF. The CMake specific files may change before the next release. 2. CMake for HDF4 development should be usable on any system where CMake is supported. Please send us any comments on how CMake support can be improved on any system. ======================================================================== I. Preconditions ======================================================================== 1. We suggest you obtain the latest CMake from the Kitware web site. The HDF 4.3.x product requires a minimum CMake version of 3.18. If you are using VS2022, the minimum CMake version is 3.21. CMakePresets.json, requires CMake 3.25 or higher. 2. You have installed the HDF4 library built with CMake, by executing the HDF Install Utility (the *.msi file in the binary package for Windows or the *.sh on Linux). If you are using a Windows platform, you can obtain a pre-built binary from The HDF Group's website at www.hdfgroup.org. 3. Set the HDF4_ROOT CMake variable, -DHDF4_ROOT= or environment variable, set(ENV{HDF4_ROOT} "") to the installed location of HDF4. On Windows: HDF4_ROOT=C:/Program Files/HDF_Group/HDF4/z.y.x/ On unix: HDF4_ROOT=/HDF_Group/HDF4/z.y.x/ If you are using shared libraries, you may need to add to the path environment variable. Set the path environment variable to the installed location of the library files for HDF4. On Windows (*.dll): PATH=%PATH%;C:/Program Files/HDF_Group/HDF4/z.y.x/bin On unix (*.so): LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF4/z.y.x/lib (Note there are no quote characters used on Windows and all platforms use forward slashes) 4. Create separate source and build directories. (CMake commands are executed in the build directory) ======================================================================== II. Building HDF4 Examples with CMake ======================================================================== Go through these steps to build HDF4 applications with CMake. 1. Run CMake 2. Configure the cache settings 3. Build HDF4 Examples 4. Test HDF4 Examples. These steps are described in more detail below. 1. Run CMake The visual CMake executable is named "cmake-gui.exe" on Windows and should be available in your Start menu. For Linux, UNIX, and Mac users the executable is named "cmake-gui" and can be found where CMake was installed. Specify the source and build directories. Make the build and source directories different. For example on Windows, if the source is at c:\MyHDFstuff\HDF4Examples, then use c:\MyHDFstuff\HDF4Examples\build or c:\MyHDFstuff\build\HDF4Examples for the build directory. PREFERRED: Users can perform the configuration step without using the visual cmake-gui program. The following is an example command line configuration step executed within the build directory: cmake -G "" [-D] Where is * Borland Makefiles * MSYS Makefiles * MinGW Makefiles * NMake Makefiles * Unix Makefiles * Visual Studio 15 2017 * Visual Studio 15 2017 Win64 * Visual Studio 16 2019 * ... in addition VS2019 will need to set the "-A" option, * ... [Win32, x64, ARM, ARM64] * Visual Studio 17 2022 * ... in addition VS2022 will need to set the "-A" option, * ... [Win32, x64, ARM, ARM64] is: * H4EX_BUILD_TESTING:BOOL=ON * BUILD_SHARED_LIBS:BOOL=[ON | OFF] * H4EX_BUILD_FORTRAN:BOOL=[ON | OFF] * H4EX_BUILD_JAVA:BOOL=[ON | OFF] if the hdf4 library was built with a namespace (i.e. "hdf4::") add: -D HDF4_NAMESPACE:STRING=hdf4:: 2. Configure the cache settings 2.1 Visual CMake users, click the Configure button. If this is the first time you are running cmake-gui in this directory, you will be prompted for the generator you wish to use (for example on Windows, Visual Studio 15). CMake will read in the CMakeLists.txt files from the source directory and display options for the HDF4 Examples project. After the first configure you can adjust the cache settings and/or specify locations of other programs. Any conflicts or new values will be highlighted by the configure process in red. Once you are happy with all the settings and there are no more values in red, click the Generate button to produce the appropriate build files. On Windows, if you are using a Visual Studio generator, the solution and project files will be created in the build folder. On linux, if you are using the Unix Makefiles generator, the Makefiles will be created in the build folder. 2.2 Alternative command line example on Windows in c:\MyHDFstuff\HDF4Examples\build directory: cmake -G "Visual Studio 19" -DH4EX_BUILD_TESTING:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON .. 3. Build HDF4 examples On Windows, you can build HDF4 examples using either the Visual Studio Environment or the command line. The command line is normally used on linux, Unix, and Mac. To build from the command line, navigate to your build directory and execute the following: cmake --build . --config {Debug | Release} NOTE: "--config {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release on Windows. If you are using the pre-built binaries from HDF, use Release. 3.1 If you wish to use the Visual Studio environment, open the solution file in your build directory. Be sure to select either Debug or Release and build the solution. 4. Test HDF4 Examples. To test the build, navigate to your build directory and execute: ctest . -C {Debug | Release} NOTE: "-C {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release to match the build step on Windows. 5. The files that support building with CMake are all of the files in the config/cmake folder, the CMakeLists.txt files in each source folder, and CTestConfig.cmake. CTestConfig.cmake is specific to the internal testing performed by The HDF Group. It should be altered for the user's installation and needs. The cacheinit.cmake file settings are used by The HDF Group for daily testing. It should be altered/ignored for the user's installation and needs. ======================================================================== III. Using HDF4 Libraries with Visual Studio 2008 (no longer supported) ======================================================================== 1. Set up path for external libraries and headers Invoke Microsoft Visual Studio and go to "Tools" and select "Options", find "Projects", and then "VC++ Directories". 1.1 If you are building on 64-bit Windows, find the "Platform" dropdown and select "x64". 1.2 Find the box "Show directories for", choose "Include files", add the header path (i.e. c:\Program Files\HDF Group\HDF4\hdf4.3.x\include) to the included directories. 1.3 Find the box "Show directories for", choose "Library files", add the library path (i.e. c:\Program Files\HDF Group\HDF4\hdf4.3.x\lib) to the library directories. 1.4 If using Fortran libraries, you will also need to setup the path for the Intel Fortran compiler. ************************************************************************ Need further assistance, send email to help@hdfgroup.org hdf4-hdf4.3.1/HDF4Examples/config/000077500000000000000000000000001503061704500164605ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/config/cmake-presets/000077500000000000000000000000001503061704500212235ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/config/cmake-presets/hidden-presets.json000066400000000000000000000266341503061704500250470ustar00rootroot00000000000000{ "version": 6, "configurePresets": [ { "name": "ci-base", "displayName": "Basic Config", "description": "Basic build using Ninja generator", "generator": "Ninja", "hidden": true, "cacheVariables": { "H4EX_BUILD_C": "ON" }, "binaryDir": "${sourceParentDir}/build/${presetName}", "installDir": "${sourceParentDir}/install/${presetName}" }, { "name": "ci-x64", "architecture": { "value": "x64", "strategy": "external" }, "hidden": true }, { "name": "ci-x86", "architecture": { "value": "Win32", "strategy": "external" }, "hidden": true }, { "name": "ci-arm64", "architecture": { "value": "ARM64", "strategy": "external" }, "hidden": true }, { "name": "ci-Debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }, "hidden": true }, { "name": "ci-Release", "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo" }, "hidden": true }, { "name": "ci-MSVC", "hidden": true, "cacheVariables": { "CMAKE_C_COMPILER": "cl", "CMAKE_CXX_COMPILER": "cl" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "ci-macos-arm64", "hidden": true, "cacheVariables": { "CMAKE_OSX_ARCHITECTURES": "arm64" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" } }, { "name": "ci-macos-x86_64", "hidden": true, "cacheVariables": { "CMAKE_OSX_ARCHITECTURES": "x86_64" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" } }, { "name": "ci-Clang", "hidden": true, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "config/toolchain/clang.cmake" } }, { "name": "ci-GNUC", "hidden": true, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "config/toolchain/gcc.cmake" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" } }, { "name": "ci-Intel", "hidden": true }, { "name": "ci-Fortran", "hidden": true, "cacheVariables": { "H4EX_BUILD_FORTRAN": "ON" } }, { "name": "ci-Fortran-Clang", "hidden": true, "inherits": "ci-Fortran", "cacheVariables": { "CMAKE_Fortran_COMPILER": {"type": "FILEPATH", "value": "gfortran"} }, "condition": { "type": "matches", "string": "${presetName}", "regex": ".*-Clang" } }, { "name": "ci-Java", "hidden": true, "cacheVariables": { "H4EX_BUILD_JAVA": "ON" } }, { "name": "ci-x64-Debug-MSVC", "description": "MSVC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-MSVC" ] }, { "name": "ci-x64-Release-MSVC", "description": "MSVC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-MSVC" ] }, { "name": "ci-x64-Debug-Clang", "description": "Clang/LLVM for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-Clang" ] }, { "name": "ci-x64-Release-Clang", "description": "Clang/LLVM for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-Clang" ] }, { "name": "ci-x64-Debug-GNUC", "description": "GNUC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-GNUC" ] }, { "name": "ci-x64-Release-GNUC", "description": "GNUC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-GNUC" ] }, { "name": "ci-macos-arm64-Debug-Clang", "description": "Clang/LLVM for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-macos-arm64", "ci-Debug", "ci-Clang" ] }, { "name": "ci-macos-arm64-Release-Clang", "description": "Clang/LLVM for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-macos-arm64", "ci-Release", "ci-Clang" ] }, { "name": "ci-macos-arm64-Debug-GNUC", "description": "GNUC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-macos-arm64", "ci-Debug", "ci-GNUC" ] }, { "name": "ci-macos-arm64-Release-GNUC", "description": "GNUC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-macos-arm64", "ci-Release", "ci-GNUC" ] }, { "name": "ci-x64-Debug-Intel", "description": "Intel for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-Intel" ] }, { "name": "ci-x64-Release-Intel", "description": "Intel for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-Intel" ] } ], "buildPresets": [ { "name": "ci-base", "configurePreset": "ci-base", "hidden": true, "verbose": true, "jobs": 8 }, { "name": "ci-x64-Debug-MSVC", "configurePreset": "ci-x64-Debug-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", "configurePreset": "ci-x64-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC", "configurePreset": "ci-x64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Debug-Clang", "configurePreset": "ci-macos-arm64-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Release-Clang", "configurePreset": "ci-macos-arm64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Debug-GNUC", "configurePreset": "ci-macos-arm64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Release-GNUC", "configurePreset": "ci-macos-arm64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-Intel", "configurePreset": "ci-x64-Debug-Intel", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" } ], "testPresets": [ { "name": "ci-base", "configurePreset": "ci-base", "output": { "outputOnFailure": false, "shortProgress": true, "verbosity": "verbose" }, "hidden": true, "execution": { "noTestsAction": "error", "timeout": 180, "jobs": 4 } }, { "name": "ci-x64-Debug-MSVC", "configurePreset": "ci-x64-Debug-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", "configurePreset": "ci-x64-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC", "configurePreset": "ci-x64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Debug-Clang", "configurePreset": "ci-macos-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Release-Clang", "configurePreset": "ci-macos-arm64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Debug-GNUC", "configurePreset": "ci-macos-arm64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-arm64-Release-GNUC", "configurePreset": "ci-macos-arm64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-Intel", "configurePreset": "ci-x64-Debug-Intel", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": [ "ci-base" ] } ], "packagePresets": [ { "name": "ci-base", "hidden": true, "output": { "verbose": true } }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": "ci-base", "configurations": ["RelWithDebInfo"] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": "ci-base" }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": "ci-base" }, { "name": "ci-macos-arm64-Release-Clang", "configurePreset": "ci-macos-arm64-Release-Clang", "hidden": true, "inherits": "ci-base" }, { "name": "ci-macos-arm64-Release-GNUC", "configurePreset": "ci-macos-arm64-Release-GNUC", "hidden": true, "inherits": "ci-base" }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": "ci-base" } ] } hdf4-hdf4.3.1/HDF4Examples/config/cmake/000077500000000000000000000000001503061704500175405ustar00rootroot00000000000000hdf4-hdf4.3.1/HDF4Examples/config/cmake/CMakeFindJavaCommon.cmake000066400000000000000000000017411503061704500243010ustar00rootroot00000000000000# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # Do not include this module directly from code outside CMake! set(_JAVA_HOME "") if(JAVA_HOME AND IS_DIRECTORY "${JAVA_HOME}") set(_JAVA_HOME "${JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 1) else() set(_ENV_JAVA_HOME "") if(DEFINED ENV{JAVA_HOME}) file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _ENV_JAVA_HOME) endif() if(_ENV_JAVA_HOME AND IS_DIRECTORY "${_ENV_JAVA_HOME}") set(_JAVA_HOME "${_ENV_JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 1) else() set(_CMD_JAVA_HOME "") if(APPLE AND EXISTS "/usr/libexec/java_home") execute_process(COMMAND /usr/libexec/java_home OUTPUT_VARIABLE _CMD_JAVA_HOME OUTPUT_STRIP_TRAILING_WHITESPACE) endif() if(_CMD_JAVA_HOME AND IS_DIRECTORY "${_CMD_JAVA_HOME}") set(_JAVA_HOME "${_CMD_JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 0) endif() unset(_CMD_JAVA_HOME) endif() unset(_ENV_JAVA_HOME) endif() hdf4-hdf4.3.1/HDF4Examples/config/cmake/CTestCustom.cmake000066400000000000000000000007421503061704500227620ustar00rootroot00000000000000set (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 1500) set (CTEST_CUSTOM_WARNING_EXCEPTION ${CTEST_CUSTOM_WARNING_EXCEPTION} "SZIP.src.*:[ \t]*warning" "jpeg.src.*:[ \t]*warning" "POSIX name for this item is deprecated" "disabling jobserver mode" "config.cmake.xlatefile.c" ) set (CTEST_CUSTOM_MEMCHECK_IGNORE ${CTEST_CUSTOM_MEMCHECK_IGNORE} HDF_FORTRAN_EXAMPLES-clearall-objects MFHDF_EXAMPLES-clearall-objects MFHDF_TEST-clearall-objects )hdf4-hdf4.3.1/HDF4Examples/config/cmake/HDF4UseFortran.cmake000066400000000000000000000152671503061704500232530ustar00rootroot00000000000000# # This file provides functions for Fortran support. # #------------------------------------------------------------------------------- enable_language (Fortran) set (H4EX_PREFIX "H4") #------------------------------------------------------------------------------- # Fix Fortran flags if we are compiling statically on Windows using # Windows_MT.cmake from config/cmake/UserMacros #------------------------------------------------------------------------------- if (BUILD_STATIC_CRT_LIBS) TARGET_STATIC_CRT_FLAGS () endif () #----------------------------------------------------------------------------- # Detect name mangling convention used between Fortran and C #----------------------------------------------------------------------------- include (FortranCInterface) FortranCInterface_HEADER ( ${CMAKE_BINARY_DIR}/F77Mangle.h MACRO_NAMESPACE "H4_F77_" SYMBOL_NAMESPACE "H4_F77_" SYMBOLS mysub mymod:my_sub ) file (STRINGS ${CMAKE_BINARY_DIR}/F77Mangle.h CONTENTS REGEX "H4_F77_GLOBAL\\(.*,.*\\) +(.*)") string (REGEX MATCH "H4_F77_GLOBAL\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) ${CMAKE_MATCH_1}") file (STRINGS ${CMAKE_BINARY_DIR}/F77Mangle.h CONTENTS REGEX "H4_F77_GLOBAL_\\(.*,.*\\) +(.*)") string (REGEX MATCH "H4_F77_GLOBAL_\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) ${CMAKE_MATCH_1}") #----------------------------------------------------------------------------- # The provided CMake Fortran macros don't provide a general check function # so this one is used for a sizeof test. #----------------------------------------------------------------------------- macro (CHECK_FORTRAN_FEATURE FUNCTION CODE VARIABLE) message (STATUS "Testing Fortran ${FUNCTION}") if (HDF4_REQUIRED_LIBRARIES) set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${HDF4_REQUIRED_LIBRARIES}") else () set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) endif () file (WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f "${CODE}" ) TRY_COMPILE (RESULT_VAR ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f CMAKE_FLAGS "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}" OUTPUT_VARIABLE OUTPUT ) # message ( "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ") # message ( "Test result ${OUTPUT}") # message ( "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ") if (${RESULT_VAR}) set (${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}") message (STATUS "Testing Fortran ${FUNCTION} - OK") file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n" "${OUTPUT}\n\n" ) else () message (STATUS "Testing Fortran ${FUNCTION} - Fail") set (${VARIABLE} 0 CACHE INTERNAL "Have Fortran function ${FUNCTION}") file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n" "${OUTPUT}\n\n") endif () endmacro () #----------------------------------------------------------------------------- # Configure Checks which require Fortran compilation must go in here # not in the main ConfigureChecks.cmake files, because if the user has # no Fortran compiler, problems arise. # # Be careful with leading spaces here, do not remove them. #----------------------------------------------------------------------------- # Check for Non-standard extension intrinsic function SIZEOF set (${H4EX_PREFIX}_FORTRAN_HAVE_SIZEOF FALSE) CHECK_FORTRAN_FEATURE(sizeof " PROGRAM main i = sizeof(x) END PROGRAM " ${H4EX_PREFIX}_FORTRAN_HAVE_SIZEOF ) # Check for F2008 standard intrinsic function C_SIZEOF set (${H4EX_PREFIX}_FORTRAN_HAVE_C_SIZEOF FALSE) CHECK_FORTRAN_FEATURE(c_sizeof " PROGRAM main USE ISO_C_BINDING INTEGER(C_INT) :: a INTEGER(C_SIZE_T) :: result result = c_sizeof(a) END PROGRAM " ${H4EX_PREFIX}_FORTRAN_HAVE_C_SIZEOF ) # Check for F2008 standard intrinsic function STORAGE_SIZE CHECK_FORTRAN_FEATURE(storage_size " PROGRAM main INTEGER :: a INTEGER :: result result = storage_size(a) END PROGRAM " ${H4EX_PREFIX}_FORTRAN_HAVE_STORAGE_SIZE ) # Check for F2008 standard intrinsic module "ISO_FORTRAN_ENV" set (${H4EX_PREFIX}_HAVE_ISO_FORTRAN_ENV FALSE) CHECK_FORTRAN_FEATURE(ISO_FORTRAN_ENV " PROGRAM main USE, INTRINSIC :: ISO_FORTRAN_ENV END PROGRAM " ${H4EX_PREFIX}_HAVE_ISO_FORTRAN_ENV ) set (${H4EX_PREFIX}_FORTRAN_DEFAULT_REAL_NOT_DOUBLE FALSE) CHECK_FORTRAN_FEATURE(RealIsNotDouble " MODULE type_mod INTERFACE h4t MODULE PROCEDURE h4t_real MODULE PROCEDURE h4t_dble END INTERFACE CONTAINS SUBROUTINE h4t_real(r) REAL :: r END SUBROUTINE h4t_real SUBROUTINE h4t_dble(d) DOUBLE PRECISION :: d END SUBROUTINE h4t_dble END MODULE type_mod PROGRAM main USE type_mod REAL :: r DOUBLE PRECISION :: d CALL h4t(r) CALL h4t(d) END PROGRAM main " ${H4EX_PREFIX}_FORTRAN_DEFAULT_REAL_NOT_DOUBLE ) #----------------------------------------------------------------------------- # Checks if the ISO_C_BINDING module meets all the requirements #----------------------------------------------------------------------------- set (${H4EX_PREFIX}_FORTRAN_HAVE_ISO_C_BINDING FALSE) CHECK_FORTRAN_FEATURE(iso_c_binding " PROGRAM main USE iso_c_binding IMPLICIT NONE TYPE(C_PTR) :: ptr TYPE(C_FUNPTR) :: funptr INTEGER(C_INT64_T) :: c_int64_type CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr ptr = C_LOC(ichr(1:1)) END PROGRAM " ${H4EX_PREFIX}_FORTRAN_HAVE_ISO_C_BINDING ) #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () hdf4-hdf4.3.1/HDF4Examples/config/cmake/HDFExampleMacros.cmake000066400000000000000000000250211503061704500236240ustar00rootroot00000000000000#------------------------------------------------------------------------------- macro (BASIC_SETTINGS varname) string (TOUPPER ${varname} EXAMPLE_PACKAGE_VARNAME) string (TOLOWER ${varname} EXAMPLE_VARNAME) set (H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE "h4${EXAMPLE_VARNAME}") set (H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME "h4${EXAMPLE_VARNAME}") string (TOUPPER ${H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_PACKAGE_NAME) string (TOLOWER ${H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_NAME) set (CMAKE_NO_SYSTEM_FROM_IMPORTED 1) #----------------------------------------------------------------------------- # Setup output Directories #----------------------------------------------------------------------------- SET_HDF_OUTPUT_DIRS(${EXAMPLE_PACKAGE_NAME}) set (CMAKE_POSITION_INDEPENDENT_CODE ON) if (MSVC) set (CMAKE_MFC_FLAG 0) endif () set (CMAKE_C_STANDARD 99) set (CMAKE_C_STANDARD_REQUIRED TRUE) #----------------------------------------------------------------------------- # Compiler specific flags : Shouldn't there be compiler tests for these #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -fomit-frame-pointer -finline-functions -fno-common") endif () #----------------------------------------------------------------------------- # This is in here to help some of the GCC based IDES like Eclipse # and code blocks parse the compiler errors and warnings better. #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") endif () #----------------------------------------------------------------------------- # Option to allow the user to disable compiler warnings #----------------------------------------------------------------------------- option (H4EX_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF) if (H4EX_DISABLE_COMPILER_WARNINGS) # MSVC uses /w to suppress warnings. It also complains if another # warning level is given, so remove it. if (MSVC) set (H4EX_WARNINGS_BLOCKED 1) string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /w") endif () if (WIN32) add_definitions (-D_CRT_SECURE_NO_WARNINGS) endif () # Borland uses -w- to suppress warnings. if (BORLAND) set (H4EX_WARNINGS_BLOCKED 1) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-") endif () # Most compilers use -w to suppress warnings. if (NOT H4EX_WARNINGS_BLOCKED) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w") if (CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") endif () endif () endif () #----------------------------------------------------------------------------- # Set includes needed for build #----------------------------------------------------------------------------- set (${EXAMPLE_PACKAGE_NAME}_INCLUDES_BUILD_TIME ${${EXAMPLE_PACKAGE_NAME}_SRC_DIR} ${${EXAMPLE_PACKAGE_NAME}_BINARY_DIR} ) endmacro () macro (HDF4_SUPPORT) set (CMAKE_MODULE_PATH ${H4EX_RESOURCES_DIR} ${CMAKE_MODULE_PATH}) option (USE_SHARED_LIBS "Use Shared Libraries" ON) if (NOT H4EX_HDF4_HEADER) if (USE_SHARED_LIBS) set (FIND_HDF_COMPONENTS C shared) else () set (FIND_HDF_COMPONENTS C static) set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE) message (STATUS "Using static HDF4 - disable build of Java examples") endif () if (H4EX_BUILD_FORTRAN) set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran) endif () if (H4EX_BUILD_JAVA) set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java) set (HDF4_Java_FOUND 1) #default setting for 4.2.14 and earlier endif () message (STATUS "HDF4 find comps: ${FIND_HDF_COMPONENTS}") set (SEARCH_PACKAGE_NAME ${HDF4_PACKAGE_NAME}) find_package (HDF4 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS}) message (STATUS "HDF4 C libs:${HDF4_FOUND} static:${HDF4_static_C_FOUND} and shared:${HDF4_shared_C_FOUND}") message (STATUS "HDF4 Fortran libs: static:${HDF4_static_Fortran_FOUND} and shared:${HDF4_shared_Fortran_FOUND}") message (STATUS "HDF4 Java libs: ${HDF4_Java_FOUND}") if (HDF4_FOUND) if (NOT HDF4_static_C_FOUND AND NOT HDF4_shared_C_FOUND) #find library from non-dual-binary package set (FIND_HDF_COMPONENTS C) if (H4EX_BUILD_FORTRAN) set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran) endif () if (H4EX_BUILD_JAVA) set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java) endif () message (STATUS "HDF4 find comps: ${FIND_HDF_COMPONENTS}") find_package (HDF4 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS}) message (STATUS "HDF4 libs:${HDF4_FOUND} C:${HDF4_C_FOUND} Fortran:${HDF4_Fortran_FOUND} Java:${HDF4_Java_FOUND}") set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LIBRARIES}) if (HDF4_BUILD_SHARED_LIBS) add_definitions (-DH4_BUILT_AS_DYNAMIC_LIB) else () add_definitions (-DH4_BUILT_AS_STATIC_LIB) endif () if (USE_SHARED_LIBS AND WIN32) set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdpdll") else () set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdp") endif () if (H4EX_BUILD_JAVA) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF4_JAVA_INCLUDE_DIRS}") message (STATUS "HDF4 jars:${HDF4_JAVA_INCLUDE_DIRS}") endif () set (H4EX_HDF4_DUMP_EXECUTABLE $) else () if (HDF4_BUILD_MODE) string (TOUPPER "_${HDF4_BUILD_MODE}" UPPER_BUILD_TYPE) elseif (HDF_CFG_NAME) string (TOUPPER "_${HDF_CFG_NAME}" UPPER_BUILD_TYPE) else () set (UPPER_BUILD_TYPE "") endif () get_filename_component (_LIBRARY_PATH ${HDF4_INCLUDE_DIR} DIRECTORY) set (HDF4_LIBRARY_PATH "${_LIBRARY_PATH}/lib") if (USE_SHARED_LIBS AND HDF4_shared_C_FOUND) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_C_SHARED_LIBRARY}) else () set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_C_STATIC_LIBRARY}) endif () if (HDF4_VERSION VERSION_LESS "4.3" AND NOT HDF4_shared_C_FOUND) if (NOT TARGET ${HDF4_NAMESPACE}hdp-shared) add_executable (${HDF4_NAMESPACE}hdp-shared IMPORTED) endif () set (H4EX_HDF4_DUMP_EXECUTABLE $) else () if (NOT TARGET ${HDF4_NAMESPACE}hdp) add_executable (${HDF4_NAMESPACE}hdp IMPORTED) endif() set (H4EX_HDF4_DUMP_EXECUTABLE $) endif() if (NOT HDF4_static_Fortran_FOUND AND NOT HDF4_shared_Fortran_FOUND) set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE) message (STATUS "HDF4 Fortran libs not found - disable build of Fortran examples") else () if (H4EX_BUILD_FORTRAN AND ${HDF4_BUILD_FORTRAN}) if (BUILD_SHARED_LIBS AND HDF4_shared_Fortran_FOUND) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_FORTRAN_SHARED_LIBRARY}) elseif (HDF4_static_Fortran_FOUND) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_FORTRAN_STATIC_LIBRARY}) else () set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE) message (STATUS "HDF4 Fortran libs not found - disable build of Fortran examples") endif () endif () endif () if (H4EX_BUILD_JAVA AND HDF4_Java_FOUND) if (${HDF4_BUILD_JAVA}) set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF4_JAVA_INCLUDE_DIRS}") get_target_property (libsoname ${HDF4_JAVA_LIBRARY} IMPORTED_SONAME${UPPER_BUILD_TYPE}) get_filename_component (libname ${libsoname} NAME_WE) string (REGEX REPLACE "^lib" "" libname ${libname}) message (STATUS "HDF4 lib:${HDF4_JAVA_LIBRARY} OR ${libsoname} OR ${libname}") set (H4EX_JAVA_LIBRARY ${libname}) set (H4EX_JAVA_LIBRARIES ${HDF4_JAVA_LIBRARY}) message (STATUS "HDF4 lib:${H4EX_JAVA_LIBRARY} jars:${HDF4_JAVA_INCLUDE_DIRS}}") else () set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE) message (STATUS "HDF4 Java libs not found - disable build of Java examples") endif () else () set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE) endif () endif () else () find_package (HDF4) # Legacy find #Legacy find_package does not set HDF4_TOOLS_DIR, so we set it here set (HDF4_TOOLS_DIR ${HDF4_LIBRARY_DIRS}/../bin) #Legacy find_package does not set HDF4_BUILD_SHARED_LIBS, so we set it here if (USE_SHARED_LIBS AND EXISTS "${HDF4_LIBRARY_DIRS}/libhdf4.so") set (HDF4_BUILD_SHARED_LIBS 1) else () set (HDF4_BUILD_SHARED_LIBS 0) endif () set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LIBRARIES}) add_executable (${HDF4_NAMESPACE}hdp IMPORTED) set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdp") set (H4EX_HDF4_DUMP_EXECUTABLE $) endif () set (HDF4_PACKAGE_NAME ${SEARCH_PACKAGE_NAME}) if (HDF4_FOUND) set (H4EX_HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR}) set (H4EX_HDF4_HAVE_HDF_H 1) set (H4EX_HDF4_HAVE_HDF4 1) set (H4EX_HDF4_HEADER "hdf.h") message (STATUS "HDF4-${HDF4_VERSION_STRING} found: INC=${HDF4_INCLUDE_DIR} TOOLS=${HDF4_TOOLS_DIR}") else () message (FATAL_ERROR " HDF4 is Required for HDF4 Examples") endif () else () # This project is being called from within another and HDF4 is already configured set (H4EX_HDF4_HAVE_HDF_H 1) set (H4EX_HDF4_HAVE_HDF4 1) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LINK_LIBS}) endif () if (H4EX_BUILD_FORTRAN) list (APPEND H4EX_HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR_FORTRAN}) endif () message (STATUS "HDF4 link libs: ${H4EX_HDF4_LINK_LIBS} Includes: ${H4EX_HDF4_INCLUDE_DIRS}") endmacro () hdf4-hdf4.3.1/HDF4Examples/config/cmake/HDFMacros.cmake000066400000000000000000000174221503061704500223160ustar00rootroot00000000000000# #------------------------------------------------------------------------------- # Setup output Directories #----------------------------------------------------------------------------- macro (SET_HDF_OUTPUT_DIRS package_prefix) if (NOT ${package_prefix}_EXTERNALLY_CONFIGURED) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables." ) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Libraries" ) set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all static libraries." ) set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/mod CACHE PATH "Single Directory for all fortran modules." ) get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(_isMultiConfig) set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${HDF_CFG_NAME}) set (CMAKE_PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all pdb files." ) else () set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endif () else () # if we are externally configured, but the project uses old cmake scripts # this may not be set and some utilities may fail if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) endif () endif () endmacro () #------------------------------------------------------------------------------- macro (SET_HDF_BUILD_TYPE) get_property (_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if (_isMultiConfig) # HDF_CFG_BUILD_TYPE is used in the Fortran install commands for the build location of the .mod files set (HDF_CFG_BUILD_TYPE \${CMAKE_INSTALL_CONFIG_NAME}) if (CMAKE_BUILD_TYPE) # set the default to the specified command line define set (HDF_CFG_NAME ${CMAKE_BUILD_TYPE}) else () # set the default to the MultiConfig variable set (HDF_CFG_NAME "$") endif () else () set (HDF_CFG_BUILD_TYPE ".") if (CMAKE_BUILD_TYPE) set (HDF_CFG_NAME ${CMAKE_BUILD_TYPE}) else () set (HDF_CFG_NAME "Release") endif () endif () endmacro () #------------------------------------------------------------------------------- macro (TARGET_C_PROPERTIES wintarget libtype) target_compile_options(${wintarget} PRIVATE "$<$:${WIN_COMPILE_FLAGS}>" "$<$:${WIN_COMPILE_FLAGS}>" ) if(MSVC) set_property(TARGET ${wintarget} APPEND PROPERTY LINK_FLAGS "${WIN_LINK_FLAGS}") endif() endmacro () macro (HDFTEST_COPY_FILE src dest target) add_custom_command( OUTPUT "${dest}" COMMAND "${CMAKE_COMMAND}" ARGS -E copy_if_different "${src}" "${dest}" DEPENDS "${src}" ) list (APPEND ${target}_list "${dest}") endmacro () macro (HDF_DIR_PATHS package_prefix) option (H4EX_USE_GNU_DIRS "ON to use GNU Coding Standard install directory variables, OFF to use historical settings" OFF) if (H4EX_USE_GNU_DIRS) include(GNUInstallDirs) if (NOT ${package_prefix}_INSTALL_BIN_DIR) set (${package_prefix}_INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR}) endif () if (NOT ${package_prefix}_INSTALL_LIB_DIR) set (${package_prefix}_INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR}) endif () if (NOT ${package_prefix}_INSTALL_JAR_DIR) set (${package_prefix}_INSTALL_JAR_DIR ${CMAKE_INSTALL_LIBDIR}) endif () if (NOT ${package_prefix}_INSTALL_INCLUDE_DIR) set (${package_prefix}_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) endif () if (NOT ${package_prefix}_INSTALL_MODULE_DIR) set (${package_prefix}_INSTALL_MODULE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/mod) endif () if (NOT ${package_prefix}_INSTALL_DATA_DIR) set (${package_prefix}_INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}) endif () if (NOT ${package_prefix}_INSTALL_CMAKE_DIR) set (${package_prefix}_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake) endif () if (NOT ${package_prefix}_INSTALL_DOC_DIR) set (${package_prefix}_INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}) endif () message(STATUS "GNU: ${${package_prefix}_INSTALL_DOC_DIR}") endif () if (APPLE) option (${package_prefix}_BUILD_FRAMEWORKS "ON to build as frameworks libraries, OFF to build according to BUILD_SHARED_LIBS" OFF) endif () if (NOT ${package_prefix}_INSTALL_BIN_DIR) set (${package_prefix}_INSTALL_BIN_DIR bin) endif () if (NOT ${package_prefix}_INSTALL_LIB_DIR) if (APPLE) if (${package_prefix}_BUILD_FRAMEWORKS) set (${package_prefix}_INSTALL_JAR_DIR ../Java) else () set (${package_prefix}_INSTALL_JAR_DIR lib) endif () set (${package_prefix}_INSTALL_FMWK_DIR ${CMAKE_INSTALL_FRAMEWORK_PREFIX}) else () set (${package_prefix}_INSTALL_JAR_DIR lib) endif () set (${package_prefix}_INSTALL_LIB_DIR lib) endif () if (NOT ${package_prefix}_INSTALL_INCLUDE_DIR) set (${package_prefix}_INSTALL_INCLUDE_DIR include) endif () if (NOT ${package_prefix}_INSTALL_MODULE_DIR) set (${package_prefix}_INSTALL_MODULE_DIR mod) endif () if (NOT ${package_prefix}_INSTALL_DATA_DIR) if (NOT MSVC) if (APPLE) if (${package_prefix}_BUILD_FRAMEWORKS) set (${package_prefix}_INSTALL_EXTRA_DIR ../SharedSupport) else () set (${package_prefix}_INSTALL_EXTRA_DIR share) endif () set (${package_prefix}_INSTALL_FWRK_DIR ${CMAKE_INSTALL_FRAMEWORK_PREFIX}) endif () set (${package_prefix}_INSTALL_DATA_DIR share) else () set (${package_prefix}_INSTALL_DATA_DIR ".") endif () endif () if (NOT ${package_prefix}_INSTALL_CMAKE_DIR) set (${package_prefix}_INSTALL_CMAKE_DIR cmake) endif () if (NOT ${package_prefix}_INSTALL_DOC_DIR) set (${package_prefix}_INSTALL_DOC_DIR ${${package_prefix}_INSTALL_DATA_DIR}) endif () message(STATUS "Final: ${${package_prefix}_INSTALL_DOC_DIR}") # Always use full RPATH, i.e. don't skip the full RPATH for the build tree set (CMAKE_SKIP_BUILD_RPATH OFF) # when building, don't use the install RPATH already # (but later on when installing) set (CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF) # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH set (CMAKE_BUILD_WITH_INSTALL_RPATH ON) if (APPLE) set (CMAKE_INSTALL_NAME_DIR "@rpath") set (CMAKE_INSTALL_RPATH "@executable_path/../${${package_prefix}_INSTALL_LIB_DIR}" "@executable_path/" "@loader_path/../${${package_prefix}_INSTALL_LIB_DIR}" "@loader_path/" ) else () set (CMAKE_INSTALL_RPATH "\$ORIGIN/../${${package_prefix}_INSTALL_LIB_DIR}:\$ORIGIN/") endif () if (DEFINED ADDITIONAL_CMAKE_PREFIX_PATH AND EXISTS "${ADDITIONAL_CMAKE_PREFIX_PATH}") set (CMAKE_PREFIX_PATH ${ADDITIONAL_CMAKE_PREFIX_PATH} ${CMAKE_PREFIX_PATH}) endif () #set the default debug suffix for all library targets if(NOT CMAKE_DEBUG_POSTFIX) if (WIN32) set (CMAKE_DEBUG_POSTFIX "_D") else () set (CMAKE_DEBUG_POSTFIX "_debug") endif () endif () SET_HDF_BUILD_TYPE() SET_HDF_OUTPUT_DIRS(${package_prefix}) include (FetchContent) endmacro () macro (ADD_H4_FLAGS h4_flag_var infile) file (STRINGS ${infile} TEST_FLAG_STREAM) list (LENGTH TEST_FLAG_STREAM len_flag) if (len_flag GREATER 0) math (EXPR _FP_LEN "${len_flag} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET TEST_FLAG_STREAM ${line} str_flag) string (REGEX REPLACE "^#.*" "" str_flag "${str_flag}") if (str_flag) list (APPEND ${h4_flag_var} "${str_flag}") endif () endforeach () endif () endmacro () hdf4-hdf4.3.1/HDF4Examples/config/cmake/UseJava.cmake000066400000000000000000001764751503061704500221240ustar00rootroot00000000000000# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. #[=======================================================================[.rst: UseJava ------- This file provides support for ``Java``. It is assumed that :module:`FindJava` has already been loaded. See :module:`FindJava` for information on how to load Java into your CMake project. Synopsis ^^^^^^^^ .. parsed-literal:: `Creating and Installing JARS`_ `add_jar`_ ( [SOURCES] [...] ...) `install_jar`_ ( DESTINATION [COMPONENT ]) `install_jni_symlink`_ ( DESTINATION [COMPONENT ]) `Header Generation`_ `create_javah`_ ((TARGET | GENERATED_FILES ) CLASSES ... ...) `Exporting JAR Targets`_ `install_jar_exports`_ (TARGETS ... FILE DESTINATION ...) `export_jars`_ (TARGETS ... [NAMESPACE ] FILE ) `Finding JARs`_ `find_jar`_ ( NAMES [...] [PATHS [... ENV ]] ...) `Creating Java Documentation`_ `create_javadoc`_ ( (PACKAGES [...] | FILES [...]) ...) Creating And Installing JARs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _add_jar: .. command:: add_jar Creates a jar file containing java objects and, optionally, resources:: add_jar( [SOURCES] [...] [...] [RESOURCES NAMESPACE ... [NAMESPACE ...]... ] [INCLUDE_JARS [...]] [ENTRY_POINT ] [VERSION ] [MANIFEST ] [OUTPUT_NAME ] [OUTPUT_DIR ] [GENERATE_NATIVE_HEADERS [DESTINATION (|INSTALL [BUILD ])]] ) This command creates a ``.jar``. It compiles the given ```` files and adds the given ```` files to the jar file. Source files can be java files or listing files (prefixed by ``@``). If only resource files are given then just a jar file is created. ``SOURCES`` Compiles the specified source files and adds the result in the jar file. .. versionadded:: 3.4 Support for response files, prefixed by ``@``. ``RESOURCES`` .. versionadded:: 3.21 Adds the named ```` files to the jar by stripping the source file path and placing the file beneath ```` within the jar. For example:: RESOURCES NAMESPACE "/com/my/namespace" "a/path/to/resource.txt" results in a resource accessible via ``/com/my/namespace/resource.txt`` within the jar. Resources may be added without adjusting the namespace by adding them to the list of ``SOURCES`` (original behavior), in this case, resource paths must be relative to ``CMAKE_CURRENT_SOURCE_DIR``. Adding resources without using the ``RESOURCES`` parameter in out of source builds will almost certainly result in confusion. .. note:: Adding resources via the ``SOURCES`` parameter relies upon a hard-coded list of file extensions which are tested to determine whether they compile (e.g. File.java). ``SOURCES`` files which match the extensions are compiled. Files which do not match are treated as resources. To include uncompiled resources matching those file extensions use the ``RESOURCES`` parameter. ``INCLUDE_JARS`` The list of jars are added to the classpath when compiling the java sources and also to the dependencies of the target. ``INCLUDE_JARS`` also accepts other target names created by ``add_jar()``. For backwards compatibility, jar files listed as sources are ignored (as they have been since the first version of this module). ``ENTRY_POINT`` Defines an entry point in the jar file. ``VERSION`` Adds a version to the target output name. The following example will create a jar file with the name ``shibboleet-1.2.0.jar`` and will create a symlink ``shibboleet.jar`` pointing to the jar with the version information. .. code-block:: cmake add_jar(shibboleet shibbotleet.java VERSION 1.2.0) ``MANIFEST`` Defines a custom manifest for the jar. ``OUTPUT_NAME`` Specify a different output name for the target. ``OUTPUT_DIR`` Sets the directory where the jar file will be generated. If not specified, :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory. ``GENERATE_NATIVE_HEADERS`` .. versionadded:: 3.11 Generates native header files for methods declared as native. These files provide the connective glue that allow your Java and C code to interact. An INTERFACE target will be created for an easy usage of generated files. Sub-option ``DESTINATION`` can be used to specify the output directory for generated header files. This option requires, at least, version 1.8 of the JDK. For an optimum usage of this option, it is recommended to include module JNI before any call to ``add_jar()``. The produced target for native headers can then be used to compile C/C++ sources with the :command:`target_link_libraries` command. .. code-block:: cmake find_package(JNI) add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native) add_library(bar bar.cpp) target_link_libraries(bar PRIVATE foo-native) .. versionadded:: 3.20 ``DESTINATION`` sub-option now supports the possibility to specify different output directories for ``BUILD`` and ``INSTALL`` steps. If ``BUILD`` directory is not specified, a default directory will be used. To export the interface target generated by ``GENERATE_NATIVE_HEADERS`` option, sub-option ``INSTALL`` of ``DESTINATION`` is required: .. code-block:: cmake add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native DESTINATION INSTALL include) install(TARGETS foo-native EXPORT native) install(DIRECTORY "$/" DESTINATION include) install(EXPORT native DESTINATION /to/export NAMESPACE foo) Some variables can be set to customize the behavior of ``add_jar()`` as well as the java compiler: ``CMAKE_JAVA_COMPILE_FLAGS`` Specify additional flags to java compiler. ``CMAKE_JAVA_INCLUDE_PATH`` Specify additional paths to the class path. ``CMAKE_JNI_TARGET`` If the target is a JNI library, sets this boolean variable to ``TRUE`` to enable creation of a JNI symbolic link (see also :ref:`install_jni_symlink() `). ``CMAKE_JAR_CLASSES_PREFIX`` If multiple jars should be produced from the same java source filetree, to prevent the accumulation of duplicate class files in subsequent jars, set/reset ``CMAKE_JAR_CLASSES_PREFIX`` prior to calling the ``add_jar()``: .. code-block:: cmake set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo) add_jar(foo foo.java) set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar) add_jar(bar bar.java) The ``add_jar()`` function sets the following target properties on ````: ``INSTALL_FILES`` The files which should be installed. This is used by :ref:`install_jar() `. ``JNI_SYMLINK`` The JNI symlink which should be installed. This is used by :ref:`install_jni_symlink() `. ``JAR_FILE`` The location of the jar file so that you can include it. ``CLASSDIR`` The directory where the class files can be found. For example to use them with ``javah``. ``NATIVE_HEADERS_DIRECTORY`` .. versionadded:: 3.20 The directory where native headers are generated. Defined when option ``GENERATE_NATIVE_HEADERS`` is specified. .. _install_jar: .. command:: install_jar This command installs the jar file to the given destination:: install_jar( ) install_jar( DESTINATION [COMPONENT ]) This command installs the ```` file to the given ````. It should be called in the same scope as :ref:`add_jar() ` or it will fail. .. versionadded:: 3.4 The second signature with ``DESTINATION`` and ``COMPONENT`` options. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". The ``install_jar()`` command sets the following target properties on ````: ``INSTALL_DESTINATION`` Holds the ```` as described above, and is used by :ref:`install_jar_exports() `. .. _install_jni_symlink: .. command:: install_jni_symlink Installs JNI symlinks for target generated by :ref:`add_jar() `:: install_jni_symlink( ) install_jni_symlink( DESTINATION [COMPONENT ]) This command installs the ```` JNI symlinks to the given ````. It should be called in the same scope as :ref:`add_jar() ` or it will fail. .. versionadded:: 3.4 The second signature with ``DESTINATION`` and ``COMPONENT`` options. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". Utilize the following commands to create a JNI symbolic link: .. code-block:: cmake set(CMAKE_JNI_TARGET TRUE) add_jar(shibboleet shibbotleet.java VERSION 1.2.0) install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet) install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR}) Header Generation ^^^^^^^^^^^^^^^^^ .. _create_javah: .. command:: create_javah .. versionadded:: 3.4 Generates C header files for java classes:: create_javah(TARGET | GENERATED_FILES CLASSES ... [CLASSPATH ...] [DEPENDS ...] [OUTPUT_NAME |OUTPUT_DIR ] ) .. deprecated:: 3.11 This command will no longer be supported starting with version 10 of the JDK due to the `suppression of javah tool `_. The :ref:`add_jar(GENERATE_NATIVE_HEADERS) ` command should be used instead. Create C header files from java classes. These files provide the connective glue that allow your Java and C code to interact. There are two main signatures for ``create_javah()``. The first signature returns generated files through variable specified by the ``GENERATED_FILES`` option. For example: .. code-block:: cmake create_javah(GENERATED_FILES files_headers CLASSES org.cmake.HelloWorld CLASSPATH hello.jar ) The second signature for ``create_javah()`` creates a target which encapsulates header files generation. E.g. .. code-block:: cmake create_javah(TARGET target_headers CLASSES org.cmake.HelloWorld CLASSPATH hello.jar ) Both signatures share same options. ``CLASSES`` Specifies Java classes used to generate headers. ``CLASSPATH`` Specifies various paths to look up classes. Here ``.class`` files, jar files or targets created by command add_jar can be used. ``DEPENDS`` Targets on which the javah target depends. ``OUTPUT_NAME`` Concatenates the resulting header files for all the classes listed by option ``CLASSES`` into ````. Same behavior as option ``-o`` of ``javah`` tool. ``OUTPUT_DIR`` Sets the directory where the header files will be generated. Same behavior as option ``-d`` of ``javah`` tool. If not specified, :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory. Exporting JAR Targets ^^^^^^^^^^^^^^^^^^^^^ .. _install_jar_exports: .. command:: install_jar_exports .. versionadded:: 3.7 Installs a target export file:: install_jar_exports(TARGETS ... [NAMESPACE ] FILE DESTINATION [COMPONENT ]) This command installs a target export file ```` for the named jar targets to the given ```` directory. Its function is similar to that of :command:`install(EXPORT)`. ``TARGETS`` List of targets created by :ref:`add_jar() ` command. ``NAMESPACE`` .. versionadded:: 3.9 The ```` value will be prepend to the target names as they are written to the import file. ``FILE`` Specify name of the export file. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". .. _export_jars: .. command:: export_jars .. versionadded:: 3.7 Writes a target export file:: export_jars(TARGETS ... [NAMESPACE ] FILE ) This command writes a target export file ```` for the named ```` targets. Its function is similar to that of :command:`export`. ``TARGETS`` List of targets created by :ref:`add_jar() ` command. ``NAMESPACE`` .. versionadded:: 3.9 The ```` value will be prepend to the target names as they are written to the import file. ``FILE`` Specify name of the export file. Finding JARs ^^^^^^^^^^^^ .. _find_jar: .. command:: find_jar Finds the specified jar file:: find_jar( | NAMES [...] [PATHS [... ENV ]] [VERSIONS []] [DOC "cache documentation string"] ) This command is used to find a full path to the named jar. A cache entry named by ```` is created to store the result of this command. If the full path to a jar is found the result is stored in the variable and the search will not repeated unless the variable is cleared. If nothing is found, the result will be ``-NOTFOUND``, and the search will be attempted again next time ``find_jar()`` is invoked with the same variable. ``NAMES`` Specify one or more possible names for the jar file. ``PATHS`` Specify directories to search in addition to the default locations. The ``ENV`` var sub-option reads paths from a system environment variable. ``VERSIONS`` Specify jar versions. ``DOC`` Specify the documentation string for the ```` cache entry. Creating Java Documentation ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _create_javadoc: .. command:: create_javadoc Creates java documentation based on files and packages:: create_javadoc( (PACKAGES [...] | FILES [...]) [SOURCEPATH ] [CLASSPATH ] [INSTALLPATH ] [DOCTITLE ] [WINDOWTITLE ] [AUTHOR (TRUE|FALSE)] [USE (TRUE|FALSE)] [VERSION (TRUE|FALSE)] ) The ``create_javadoc()`` command can be used to create java documentation. There are two main signatures for ``create_javadoc()``. The first signature works with package names on a path with source files: .. code-block:: cmake create_javadoc(my_example_doc PACKAGES com.example.foo com.example.bar SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}" CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} WINDOWTITLE "My example" DOCTITLE "

My example

" AUTHOR TRUE USE TRUE VERSION TRUE ) The second signature for ``create_javadoc()`` works on a given list of files: .. code-block:: cmake create_javadoc(my_example_doc FILES java/A.java java/B.java CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} WINDOWTITLE "My example" DOCTITLE "

My example

" AUTHOR TRUE USE TRUE VERSION TRUE ) Both signatures share most of the options. For more details please read the javadoc manpage. ``PACKAGES`` Specify java packages. ``FILES`` Specify java source files. If relative paths are specified, they are relative to :variable:`CMAKE_CURRENT_SOURCE_DIR`. ``SOURCEPATH`` Specify the directory where to look for packages. By default, :variable:`CMAKE_CURRENT_SOURCE_DIR` directory is used. ``CLASSPATH`` Specify where to find user class files. Same behavior as option ``-classpath`` of ``javadoc`` tool. ``INSTALLPATH`` Specify where to install the java documentation. If you specified, the documentation will be installed to ``${CMAKE_INSTALL_PREFIX}/share/javadoc/``. ``DOCTITLE`` Specify the title to place near the top of the overview summary file. Same behavior as option ``-doctitle`` of ``javadoc`` tool. ``WINDOWTITLE`` Specify the title to be placed in the HTML ```` tag. Same behavior as option ``-windowtitle`` of ``javadoc`` tool. ``AUTHOR`` When value ``TRUE`` is specified, includes the ``@author`` text in the generated docs. Same behavior as option ``-author`` of ``javadoc`` tool. ``USE`` When value ``TRUE`` is specified, creates class and package usage pages. Includes one Use page for each documented class and package. Same behavior as option ``-use`` of ``javadoc`` tool. ``VERSION`` When value ``TRUE`` is specified, includes the version text in the generated docs. Same behavior as option ``-version`` of ``javadoc`` tool. #]=======================================================================] include(CMakeParseArguments) function (__java_copy_file src dest comment) add_custom_command( OUTPUT ${dest} COMMAND ${CMAKE_COMMAND} -E copy_if_different ARGS ${src} ${dest} DEPENDS ${src} COMMENT ${comment} VERBATIM ) endfunction () function(__java_lcat VAR) foreach(_line IN LISTS ARGN) string(APPEND ${VAR} "${_line}\n") endforeach() set(${VAR} "${${VAR}}" PARENT_SCOPE) endfunction() function(__java_export_jar VAR TARGET PATH) get_target_property(_jarpath ${TARGET} JAR_FILE) get_filename_component(_jarname ${_jarpath} NAME) set(_target "${_jar_NAMESPACE}${TARGET}") __java_lcat(${VAR} "# Create imported target ${_target}" "add_library(${_target} IMPORTED STATIC)" "set_target_properties(${_target} PROPERTIES" " IMPORTED_LOCATION \"${PATH}/${_jarname}\"" " JAR_FILE \"${PATH}/${_jarname}\")" "" ) set(${VAR} "${${VAR}}" PARENT_SCOPE) endfunction() function(__java_copy_resource_namespaces VAR DEST JAVA_RESOURCE_FILES JAVA_RESOURCE_FILES_RELATIVE) set(_ns_ID "") set(_ns_VAL "") foreach(_item IN LISTS VAR) if(NOT _ns_ID) if(NOT _item STREQUAL "NAMESPACE") message(FATAL_ERROR "UseJava: Expecting \"NAMESPACE\", got\t\"${_item}\"") return() endif() endif() if(_item STREQUAL "NAMESPACE") set(_ns_VAL "") # Prepare for next namespace set(_ns_ID "${_item}") continue() endif() if( NOT _ns_VAL) # we're expecting the next token to be a namespace value # whatever it is, we're treating it like a namespace set(_ns_VAL "${_item}") continue() endif() if(_ns_ID AND _ns_VAL) # We're expecting a file name, check to see if we got one cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _test_file_name) if (NOT EXISTS "${_test_file_name}") message(FATAL_ERROR "UseJava: File does not exist:\t${_item}") return() endif() endif() cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _abs_file_name) cmake_path(GET _item FILENAME _resource_file_name) set(_dest_resource_file_name "${_ns_VAL}/${_resource_file_name}" ) __java_copy_file( ${_abs_file_name} ${DEST}/${_dest_resource_file_name} "Copying ${_item} to the build directory") list(APPEND RESOURCE_FILES_LIST ${DEST}/${_dest_resource_file_name}) list(APPEND RELATIVE_RESOURCE_FILES_LIST ${_dest_resource_file_name}) endforeach() set(${JAVA_RESOURCE_FILES} "${RESOURCE_FILES_LIST}" PARENT_SCOPE) set(${JAVA_RESOURCE_FILES_RELATIVE} "${RELATIVE_RESOURCE_FILES_LIST}" PARENT_SCOPE) endfunction() # define helper scripts set(_JAVA_EXPORT_TARGETS_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/javaTargets.cmake.in) set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake) set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake) if (CMAKE_HOST_WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") set(_UseJava_PATH_SEP "$<SEMICOLON>") else () set(_UseJava_PATH_SEP ":") endif() function(add_jar _TARGET_NAME) cmake_parse_arguments(_add_jar "" "VERSION;OUTPUT_DIR;OUTPUT_NAME;ENTRY_POINT;MANIFEST" "SOURCES;INCLUDE_JARS;GENERATE_NATIVE_HEADERS" ${ARGN} ) # In CMake < 2.8.12, add_jar used variables which were set prior to calling # add_jar for customizing the behavior of add_jar. In order to be backwards # compatible, check if any of those variables are set, and use them to # initialize values of the named arguments. (Giving the corresponding named # argument will override the value set here.) # # New features should use named arguments only. if(NOT DEFINED _add_jar_VERSION AND DEFINED CMAKE_JAVA_TARGET_VERSION) set(_add_jar_VERSION "${CMAKE_JAVA_TARGET_VERSION}") endif() if(NOT DEFINED _add_jar_OUTPUT_DIR AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR) set(_add_jar_OUTPUT_DIR "${CMAKE_JAVA_TARGET_OUTPUT_DIR}") endif() if(NOT DEFINED _add_jar_OUTPUT_NAME AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_NAME) set(_add_jar_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}") # reset set(CMAKE_JAVA_TARGET_OUTPUT_NAME) endif() if(NOT DEFINED _add_jar_ENTRY_POINT AND DEFINED CMAKE_JAVA_JAR_ENTRY_POINT) set(_add_jar_ENTRY_POINT "${CMAKE_JAVA_JAR_ENTRY_POINT}") endif() # This *should* still work if <resources1>... are included without a # named RESOURCES argument. In that case, the old behavior of potentially # misplacing the within the Jar will behave as previously (incorrectly) set(_JAVA_SOURCE_FILES ${_add_jar_SOURCES} ${_add_jar_UNPARSED_ARGUMENTS}) if (NOT DEFINED _add_jar_OUTPUT_DIR) set(_add_jar_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) else() get_filename_component(_add_jar_OUTPUT_DIR ${_add_jar_OUTPUT_DIR} ABSOLUTE) endif() # ensure output directory exists file (MAKE_DIRECTORY "${_add_jar_OUTPUT_DIR}") if (_add_jar_ENTRY_POINT) set(_ENTRY_POINT_OPTION e) set(_ENTRY_POINT_VALUE ${_add_jar_ENTRY_POINT}) endif () if (_add_jar_MANIFEST) set(_MANIFEST_OPTION m) get_filename_component (_MANIFEST_VALUE "${_add_jar_MANIFEST}" ABSOLUTE) endif () unset (_GENERATE_NATIVE_HEADERS) if (_add_jar_GENERATE_NATIVE_HEADERS) # Raise an error if JDK version is less than 1.8 because javac -h is not supported # by earlier versions. if (Java_VERSION VERSION_LESS 1.8) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS is not supported with this version of Java.") endif() unset (_GENERATE_NATIVE_HEADERS_OUTPUT_DESC) cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS "" "" "DESTINATION" ${_add_jar_GENERATE_NATIVE_HEADERS}) if (NOT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: missing required argument.") endif() list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS length) if (length GREATER 1) list (REMOVE_AT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS 0) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}: unexpected argument(s).") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION) set (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers") else() list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION length) if (NOT length EQUAL 1) cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "" "BUILD;INSTALL" "" "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}") if (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: ${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS}: unexpected argument(s).") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: INSTALL sub-option is required.") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD) set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers") endif() set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}") set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "$<BUILD_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}>" "$<INSTALL_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL}>") endif() endif() set (_GENERATE_NATIVE_HEADERS_TARGET ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}) set (_GENERATE_NATIVE_HEADERS_OUTPUT_DIR "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}") set (_GENERATE_NATIVE_HEADERS -h "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") if(NOT _GENERATE_NATIVE_HEADERS_OUTPUT_DESC) set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") endif() endif() if (LIBRARY_OUTPUT_PATH) set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}) else () set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${_add_jar_OUTPUT_DIR}) endif () set(CMAKE_JAVA_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_JAVA_OBJECT_OUTPUT_PATH} ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH} ) foreach (JAVA_INCLUDE_DIR IN LISTS CMAKE_JAVA_INCLUDE_PATH) string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${JAVA_INCLUDE_DIR}") endforeach() set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir") set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar") if (_add_jar_OUTPUT_NAME AND _add_jar_VERSION) set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}-${_add_jar_VERSION}.jar") set(_JAVA_TARGET_OUTPUT_LINK "${_add_jar_OUTPUT_NAME}.jar") elseif (_add_jar_VERSION) set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${_add_jar_VERSION}.jar") set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar") elseif (_add_jar_OUTPUT_NAME) set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}.jar") endif () set(_JAVA_CLASS_FILES) set(_JAVA_COMPILE_FILES) set(_JAVA_COMPILE_FILELISTS) set(_JAVA_DEPENDS) set(_JAVA_COMPILE_DEPENDS) set(_JAVA_RESOURCE_FILES) set(_JAVA_RESOURCE_FILES_RELATIVE) foreach(_JAVA_SOURCE_FILE IN LISTS _JAVA_SOURCE_FILES) get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT) get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE) get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH) get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE) if (_JAVA_SOURCE_FILE MATCHES "^@(.+)$") get_filename_component(_JAVA_FULL ${CMAKE_MATCH_1} ABSOLUTE) list(APPEND _JAVA_COMPILE_FILELISTS ${_JAVA_FULL}) elseif (_JAVA_EXT MATCHES ".java") file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} ${_JAVA_FULL}) file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL}) string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN) string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN) if (_BIN_LEN LESS _SRC_LEN) set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH}) else () set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH}) endif () get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH) list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE}) set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class") set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE}) elseif (_JAVA_EXT MATCHES ".jar" OR _JAVA_EXT MATCHES ".war" OR _JAVA_EXT MATCHES ".ear" OR _JAVA_EXT MATCHES ".sar") # Ignored for backward compatibility elseif (_JAVA_EXT STREQUAL "") list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH}) list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}}) else () __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE} "Copying ${_JAVA_SOURCE_FILE} to the build directory") list(APPEND _JAVA_RESOURCE_FILES ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}) list(APPEND _JAVA_RESOURCE_FILES_RELATIVE ${_JAVA_SOURCE_FILE}) endif () endforeach() if(_add_jar_RESOURCES) # Process RESOURCES if it exists __java_copy_resource_namespaces("${_add_jar_RESOURCES}" ${CMAKE_JAVA_CLASS_OUTPUT_PATH} _JAVA_RESOURCE_FILES _JAVA_RESOURCE_FILES_RELATIVE) endif() foreach(_JAVA_INCLUDE_JAR IN LISTS _add_jar_INCLUDE_JARS) if (TARGET ${_JAVA_INCLUDE_JAR}) get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE) if (_JAVA_JAR_PATH) string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_JAR_PATH}") list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH}) list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR}) list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_JAR_PATH}) else () message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar") endif () else () string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_INCLUDE_JAR}") list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}") list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}") list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}") endif () endforeach() if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS) set (_JAVA_SOURCES_FILELISTS) if (_JAVA_COMPILE_FILES) # Create the list of files to compile. set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources) string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"") file(WRITE ${_JAVA_SOURCES_FILE} ${_JAVA_COMPILE_STRING}) list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_SOURCES_FILE}") endif() if (_JAVA_COMPILE_FILELISTS) foreach (_JAVA_FILELIST IN LISTS _JAVA_COMPILE_FILELISTS) list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_FILELIST}") endforeach() endif() # Compile the java files and create a list of class files add_custom_command( # NOTE: this command generates an artificial dependency file OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} COMMAND ${Java_JAVAC_EXECUTABLE} ${CMAKE_JAVA_COMPILE_FLAGS} -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}" -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_GENERATE_NATIVE_HEADERS} ${_JAVA_SOURCES_FILELISTS} COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_SOURCES_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Building Java objects for ${_TARGET_NAME}.jar" VERBATIM ) add_custom_command( OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist COMMAND ${CMAKE_COMMAND} -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH} -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX} -P ${_JAVA_CLASS_FILELIST_SCRIPT} DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM ) else () # create an empty java_class_filelist if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist) file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "") endif() endif () # create the jar file set(_JAVA_JAR_OUTPUT_PATH "${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME}") if (CMAKE_JNI_TARGET) add_custom_command( OUTPUT ${_JAVA_JAR_OUTPUT_PATH} COMMAND ${Java_JAR_EXECUTABLE} -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE} ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" VERBATIM ) else () add_custom_command( OUTPUT ${_JAVA_JAR_OUTPUT_PATH} COMMAND ${Java_JAR_EXECUTABLE} -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE} ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" VERBATIM ) endif () # Add the target and make sure we have the latest resource files. add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH}) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ${_JAVA_JAR_OUTPUT_PATH} ) if (_JAVA_TARGET_OUTPUT_LINK) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ${_JAVA_JAR_OUTPUT_PATH} ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} ) if (CMAKE_JNI_TARGET) set_property( TARGET ${_TARGET_NAME} PROPERTY JNI_SYMLINK ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} ) endif () endif () set_property( TARGET ${_TARGET_NAME} PROPERTY JAR_FILE ${_JAVA_JAR_OUTPUT_PATH} ) set_property( TARGET ${_TARGET_NAME} PROPERTY CLASSDIR ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ) if (_GENERATE_NATIVE_HEADERS) # create an INTERFACE library encapsulating include directory for generated headers add_library (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE) target_include_directories (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE "${_GENERATE_NATIVE_HEADERS_OUTPUT_DESC}" ${JNI_INCLUDE_DIRS}) set_property(TARGET ${_GENERATE_NATIVE_HEADERS_TARGET} PROPERTY NATIVE_HEADERS_DIRECTORY "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") # this INTERFACE library depends on jar generation add_dependencies (${_GENERATE_NATIVE_HEADERS_TARGET} ${_TARGET_NAME}) set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") endif() endfunction() function(INSTALL_JAR _TARGET_NAME) if (ARGC EQUAL 2) set (_DESTINATION ${ARGV1}) else() cmake_parse_arguments(_install_jar "" "DESTINATION;COMPONENT" "" ${ARGN}) if (_install_jar_DESTINATION) set (_DESTINATION ${_install_jar_DESTINATION}) else() message(SEND_ERROR "install_jar: ${_TARGET_NAME}: DESTINATION must be specified.") endif() if (_install_jar_COMPONENT) set (_COMPONENT COMPONENT ${_install_jar_COMPONENT}) endif() endif() get_property(__FILES TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_DESTINATION ${_DESTINATION} ) if (__FILES) install( FILES ${__FILES} DESTINATION ${_DESTINATION} ${_COMPONENT} ) else () message(SEND_ERROR "install_jar: The target ${_TARGET_NAME} is not known in this scope.") endif () endfunction() function(INSTALL_JNI_SYMLINK _TARGET_NAME) if (ARGC EQUAL 2) set (_DESTINATION ${ARGV1}) else() cmake_parse_arguments(_install_jni_symlink "" "DESTINATION;COMPONENT" "" ${ARGN}) if (_install_jni_symlink_DESTINATION) set (_DESTINATION ${_install_jni_symlink_DESTINATION}) else() message(SEND_ERROR "install_jni_symlink: ${_TARGET_NAME}: DESTINATION must be specified.") endif() if (_install_jni_symlink_COMPONENT) set (_COMPONENT COMPONENT ${_install_jni_symlink_COMPONENT}) endif() endif() get_property(__SYMLINK TARGET ${_TARGET_NAME} PROPERTY JNI_SYMLINK ) if (__SYMLINK) install( FILES ${__SYMLINK} DESTINATION ${_DESTINATION} ${_COMPONENT} ) else () message(SEND_ERROR "install_jni_symlink: The target ${_TARGET_NAME} is not known in this scope.") endif () endfunction() function (find_jar VARIABLE) set(_jar_names) set(_jar_files) set(_jar_versions) set(_jar_paths /usr/share/java/ /usr/local/share/java/ ${Java_JAR_PATHS}) set(_jar_doc "NOTSET") set(_state "name") foreach (arg IN LISTS ARGN) if (_state STREQUAL "name") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_names ${arg}) if (_jar_doc STREQUAL "NOTSET") set(_jar_doc "Finding ${arg} jar") endif () endif () elseif (_state STREQUAL "versions") if (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_versions ${_jar_versions} ${arg}) endif () elseif (_state STREQUAL "names") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_names ${_jar_names} ${arg}) if (_jar_doc STREQUAL "NOTSET") set(_jar_doc "Finding ${arg} jar") endif () endif () elseif (_state STREQUAL "paths") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_paths ${_jar_paths} ${arg}) endif () elseif (_state STREQUAL "doc") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") else () set(_jar_doc ${arg}) endif () endif () endforeach () if (NOT _jar_names) message(FATAL_ERROR "find_jar: No name to search for given") endif () foreach (jar_name IN LISTS _jar_names) foreach (version IN LISTS _jar_versions) set(_jar_files ${_jar_files} ${jar_name}-${version}.jar) endforeach () set(_jar_files ${_jar_files} ${jar_name}.jar) endforeach () find_file(${VARIABLE} NAMES ${_jar_files} PATHS ${_jar_paths} DOC ${_jar_doc} NO_DEFAULT_PATH) endfunction () function(create_javadoc _target) set(_javadoc_packages) set(_javadoc_files) set(_javadoc_overview) set(_javadoc_sourcepath) set(_javadoc_classpath) set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc") set(_javadoc_doctitle) set(_javadoc_windowtitle) set(_javadoc_author FALSE) set(_javadoc_version FALSE) set(_javadoc_use FALSE) set(_state "package") foreach (arg IN LISTS ARGN) if (_state STREQUAL "package") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_packages ${arg}) set(_state "packages") endif () elseif (_state STREQUAL "packages") if (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_packages ${arg}) endif () elseif (_state STREQUAL "files") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_files ${arg}) endif () elseif (_state STREQUAL "sourcepath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_sourcepath ${arg}) endif () elseif (_state STREQUAL "classpath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_classpath ${arg}) endif () elseif (_state STREQUAL "installpath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_installpath ${arg}) endif () elseif (_state STREQUAL "doctitle") if (${arg} STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_doctitle ${arg}) endif () elseif (_state STREQUAL "windowtitle") if (${arg} STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_windowtitle ${arg}) endif () elseif (_state STREQUAL "author") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_author ${arg}) endif () elseif (_state STREQUAL "use") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_use ${arg}) endif () elseif (_state STREQUAL "version") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_version ${arg}) endif () elseif (_state STREQUAL "overview") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_overview ${arg}) endif () endif () endforeach () set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target}) set(_javadoc_options -d ${_javadoc_builddir}) if (_javadoc_sourcepath) list(JOIN _javadoc_sourcepath "${_UseJava_PATH_SEP}" _javadoc_sourcepath) list(APPEND _javadoc_options -sourcepath "\"${_javadoc_sourcepath}\"") endif () if (_javadoc_overview) list(JOIN _javadoc_overview "${_UseJava_PATH_SEP}" _javadoc_overview) list(APPEND _javadoc_options -overview "\"${_javadoc_overview}\"") endif () if (_javadoc_classpath) list(JOIN _javadoc_classpath "${_UseJava_PATH_SEP}" _javadoc_classpath) list(APPEND _javadoc_options -classpath "\"${_javadoc_classpath}\"") endif () if (_javadoc_doctitle) list(APPEND _javadoc_options -doctitle '${_javadoc_doctitle}') endif () if (_javadoc_windowtitle) list(APPEND _javadoc_options -windowtitle '${_javadoc_windowtitle}') endif () if (_javadoc_author) list(APPEND _javadoc_options -author) endif () if (_javadoc_use) list(APPEND _javadoc_options -use) endif () if (_javadoc_version) list(APPEND _javadoc_options -version) endif () add_custom_target(${_target}_javadoc ALL COMMAND ${Java_JAVADOC_EXECUTABLE} -Xdoclint:none ${_javadoc_options} ${_javadoc_files} ${_javadoc_packages} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) install( DIRECTORY ${_javadoc_builddir} DESTINATION ${_javadoc_installpath} ) endfunction() function (create_javah) if (Java_VERSION VERSION_GREATER_EQUAL 10) message (FATAL_ERROR "create_javah: not supported with this Java version. Use add_jar(GENERATE_NATIVE_HEADERS) instead.") elseif (Java_VERSION VERSION_GREATER_EQUAL 1.8) message (DEPRECATION "create_javah: this command will no longer be supported starting with version 10 of JDK. Update your project by using command add_jar(GENERATE_NATIVE_HEADERS) instead.") endif() cmake_parse_arguments(_create_javah "" "TARGET;GENERATED_FILES;OUTPUT_NAME;OUTPUT_DIR" "CLASSES;CLASSPATH;DEPENDS" ${ARGN}) # check parameters if (NOT _create_javah_TARGET AND NOT _create_javah_GENERATED_FILES) message (FATAL_ERROR "create_javah: TARGET or GENERATED_FILES must be specified.") endif() if (_create_javah_OUTPUT_NAME AND _create_javah_OUTPUT_DIR) message (FATAL_ERROR "create_javah: OUTPUT_NAME and OUTPUT_DIR are mutually exclusive.") endif() if (NOT _create_javah_CLASSES) message (FATAL_ERROR "create_javah: CLASSES is a required parameter.") endif() set (_output_files) # handle javah options set (_javah_options) if (_create_javah_CLASSPATH) # CLASSPATH can specify directories, jar files or targets created with add_jar command set (_classpath) foreach (_path IN LISTS _create_javah_CLASSPATH) if (TARGET ${_path}) get_target_property (_jar_path ${_path} JAR_FILE) if (_jar_path) list (APPEND _classpath "${_jar_path}") list (APPEND _create_javah_DEPENDS "${_path}") else() message(SEND_ERROR "create_javah: CLASSPATH target ${_path} is not a jar.") endif() elseif (EXISTS "${_path}") list (APPEND _classpath "${_path}") if (NOT IS_DIRECTORY "${_path}") list (APPEND _create_javah_DEPENDS "${_path}") endif() else() message(SEND_ERROR "create_javah: CLASSPATH entry ${_path} does not exist.") endif() endforeach() string (REPLACE ";" "${_UseJava_PATH_SEP}" _classpath "${_classpath}") list (APPEND _javah_options -classpath "${_classpath}") endif() if (_create_javah_OUTPUT_DIR) list (APPEND _javah_options -d "${_create_javah_OUTPUT_DIR}") endif() if (_create_javah_OUTPUT_NAME) list (APPEND _javah_options -o "${_create_javah_OUTPUT_NAME}") set (_output_files "${_create_javah_OUTPUT_NAME}") get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_NAME}" DIRECTORY) get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_DIR}" ABSOLUTE) endif() if (NOT _create_javah_OUTPUT_DIR) set (_create_javah_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() if (NOT _create_javah_OUTPUT_NAME) # compute output names foreach (_class IN LISTS _create_javah_CLASSES) string (REPLACE "." "_" _c_header "${_class}") set (_c_header "${_create_javah_OUTPUT_DIR}/${_c_header}.h") list (APPEND _output_files "${_c_header}") endforeach() endif() # finalize custom command arguments if (_create_javah_DEPENDS) list (INSERT _create_javah_DEPENDS 0 DEPENDS) endif() add_custom_command (OUTPUT ${_output_files} COMMAND "${Java_JAVAH_EXECUTABLE}" ${_javah_options} -jni ${_create_javah_CLASSES} ${_create_javah_DEPENDS} WORKING_DIRECTORY ${_create_javah_OUTPUT_DIR} COMMENT "Building C header files from classes...") if (_create_javah_TARGET) add_custom_target (${_create_javah_TARGET} ALL DEPENDS ${_output_files}) endif() if (_create_javah_GENERATED_FILES) set (${_create_javah_GENERATED_FILES} ${_output_files} PARENT_SCOPE) endif() endfunction() function(export_jars) # Parse and validate arguments cmake_parse_arguments(_export_jars "" "FILE;NAMESPACE" "TARGETS" ${ARGN} ) if (NOT _export_jars_FILE) message(SEND_ERROR "export_jars: FILE must be specified.") endif() if (NOT _export_jars_TARGETS) message(SEND_ERROR "export_jars: TARGETS must be specified.") endif() set(_jar_NAMESPACE "${_export_jars_NAMESPACE}") # Set content of generated exports file string(REPLACE ";" " " __targets__ "${_export_jars_TARGETS}") set(__targetdefs__ "") foreach(_target IN LISTS _export_jars_TARGETS) get_target_property(_jarpath ${_target} JAR_FILE) get_filename_component(_jarpath ${_jarpath} PATH) __java_export_jar(__targetdefs__ ${_target} "${_jarpath}") endforeach() # Generate exports file configure_file( ${_JAVA_EXPORT_TARGETS_SCRIPT} ${_export_jars_FILE} @ONLY ) endfunction() function(install_jar_exports) # Parse and validate arguments cmake_parse_arguments(_install_jar_exports "" "FILE;DESTINATION;COMPONENT;NAMESPACE" "TARGETS" ${ARGN} ) if (NOT _install_jar_exports_FILE) message(SEND_ERROR "install_jar_exports: FILE must be specified.") endif() if (NOT _install_jar_exports_DESTINATION) message(SEND_ERROR "install_jar_exports: DESTINATION must be specified.") endif() if (NOT _install_jar_exports_TARGETS) message(SEND_ERROR "install_jar_exports: TARGETS must be specified.") endif() set(_jar_NAMESPACE "${_install_jar_exports_NAMESPACE}") if (_install_jar_exports_COMPONENT) set (_COMPONENT COMPONENT ${_install_jar_exports_COMPONENT}) endif() # Determine relative path from installed export file to install prefix if(IS_ABSOLUTE "${_install_jar_exports_DESTINATION}") file(RELATIVE_PATH _relpath ${_install_jar_exports_DESTINATION} ${CMAKE_INSTALL_PREFIX} ) else() file(RELATIVE_PATH _relpath ${CMAKE_INSTALL_PREFIX}/${_install_jar_exports_DESTINATION} ${CMAKE_INSTALL_PREFIX} ) endif() # Set up unique location for generated exports file string(SHA256 _hash "${_install_jar_exports_DESTINATION}") set(_tmpdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/JavaExports/${_hash}) # Set content of generated exports file string(REPLACE ";" " " __targets__ "${_install_jar_exports_TARGETS}") set(__targetdefs__ "set(_prefix \${CMAKE_CURRENT_LIST_DIR}/${_relpath})\n\n") foreach(_target IN LISTS _install_jar_exports_TARGETS) get_target_property(_dir ${_target} INSTALL_DESTINATION) __java_export_jar(__targetdefs__ ${_target} "\${_prefix}/${_dir}") endforeach() __java_lcat(__targetdefs__ "\nunset(_prefix)") # Generate and install exports file configure_file( ${_JAVA_EXPORT_TARGETS_SCRIPT} ${_tmpdir}/${_install_jar_exports_FILE} @ONLY ) install(FILES ${_tmpdir}/${_install_jar_exports_FILE} DESTINATION ${_install_jar_exports_DESTINATION} ${_COMPONENT}) endfunction() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/UseJavaClassFilelist.cmake����������������������������������0000664�0000000�0000000�00000003173�15030617045�0024566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # This script creates a list of compiled Java class files to be added to # a jar file. This avoids including cmake files which get created in # the binary directory. if (CMAKE_JAVA_CLASS_OUTPUT_PATH) if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") set(_JAVA_GLOBBED_FILES) if (CMAKE_JAR_CLASSES_PREFIX) foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX}) message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}") file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class") if (_JAVA_GLOBBED_TMP_FILES) list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES}) endif () endforeach() else() file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class") endif () set(_JAVA_CLASS_FILES) # file(GLOB_RECURSE foo RELATIVE) is broken so we need this. foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES}) file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE}) set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n) endforeach() # write to file file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES}) else () message(SEND_ERROR "FATAL: Java class output path doesn't exist") endif () else () message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH") endif () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/UseJavaSymlinks.cmake���������������������������������������0000664�0000000�0000000�00000001051�15030617045�0023627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # Helper script for UseJava.cmake if (UNIX AND _JAVA_TARGET_OUTPUT_LINK) if (_JAVA_TARGET_OUTPUT_NAME) find_program(LN_EXECUTABLE NAMES ln) execute_process( COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}" WORKING_DIRECTORY ${_JAVA_TARGET_DIR} ) else () message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME") endif () endif () ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/cacheinit.cmake���������������������������������������������0000775�0000000�0000000�00000001407�15030617045�0022476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is the CMakeCache file. ######################## # EXTERNAL cache entries ######################## set (BUILD_SHARED_LIBS OFF CACHE BOOL "Build Shared Libraries" FORCE) set (H4EX_BUILD_TESTING ON CACHE BOOL "Build HDF4 Unit Testing" FORCE) set (H4EX_COMPARE_TESTING ON CACHE BOOL "Compare HDF4 Unit Testing to Reference" FORCE) set (H4EX_BUILD_C ON CACHE BOOL "Build C support" FORCE) set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE) set (H4EX_BUILD_JAVA ON CACHE BOOL "Build Java support" FORCE) set (HDF4_PACKAGE_NAME "hdf4" CACHE STRING "Name of HDF4 package" FORCE) set (HDF4_NAMESPACE "hdf4::" CACHE STRING "Name space of HDF4 library" FORCE) set (CPACK_PACKAGE_VERSION "0.3.10" CACHE STRING "Version of HDF4 source package" FORCE) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/grepTest.cmake����������������������������������������������0000664�0000000�0000000�00000021316�15030617045�0022342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# grepTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. # arguments checking if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_REFERENCE) message (FATAL_ERROR "Require TEST_REFERENCE to be defined") endif () if (NOT TEST_FILTER) message (VERBOSE "Optional TEST_FILTER is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () message (STATUS "COMMAND: ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) message (STATUS "COMMAND Result: ${TEST_RESULT}") message (STATUS "COMMAND Error: ${TEST_ERROR}") # remove special regex text from the output if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "ulimit -s" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*ulimit -s[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () # if the TEST_ERRREF exists grep the error output with the error reference set (TEST_ERRREF_RESULT 0) # grep result variable; 0 is success # TEST_ERRREF should always be matched if (TEST_ERRREF) # if the .err file exists grep the error output with the error reference before comparing stdout if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_ERR_STREAM) list (LENGTH TEST_ERR_STREAM test_len) # verify there is text output in the error file if (test_len GREATER 0) string (REGEX MATCH "${TEST_ERRREF}" TEST_MATCH ${TEST_ERR_STREAM}) string (COMPARE EQUAL "${TEST_ERRREF}" "${TEST_MATCH}" TEST_ERRREF_RESULT) if (NOT TEST_ERRREF_RESULT) # dump the output unless nodisplay option is set if (NOT TEST_NO_DISPLAY) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_ERR_STREAM} RESULT_VARIABLE TEST_ERRREF_RESULT ) endif () message (FATAL_ERROR "Failed: The error output of ${TEST_PROGRAM} did not contain '${TEST_ERRREF}'. Error output was: '${TEST_ERR_STREAM}'") endif () endif () endif () # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_REFERENCE} ${TEST_FOLDER}/${TEST_REFERENCE}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_REFERENCE}.tmp ${TEST_FOLDER}/${TEST_REFERENCE}) endif () #file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) #file (WRITE ${TEST_FOLDER}/${TEST_REFERENCE} "${TEST_STREAM}") endif () if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) if (TEST_SORT_COMPARE) list (SORT test_act) list (SORT test_ref) endif () math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () endif () endif () message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () endif () # end of TEST_SKIP_COMPARE else () # TEST_ERRREF is not defined # TEST_REFERENCE should always be matched unless TEST_GREP_COMPARE is set to 0 set (TEST_GREP_RESULT 0) # grep result variable; 0 is success if (TEST_GREP_COMPARE AND EXISTS "${TEST_PROCESSED_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER) if (EXISTS "${TEST_PROCESSED_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "Passed: The output of ${TEST_PROGRAM} matched") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/javaTargets.cmake.in����������������������������������������0000664�0000000�0000000�00000002311�15030617045�0023417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required(VERSION 3.18) cmake_policy(PUSH) cmake_policy(VERSION 2.8) #---------------------------------------------------------------- # Generated CMake Java target import file. #---------------------------------------------------------------- # Protect against multiple inclusion, which would fail when already imported targets are added once more. set(_targetsDefined) set(_targetsNotDefined) set(_expectedTargets) foreach(_expectedTarget @__targets__@) list(APPEND _expectedTargets ${_expectedTarget}) if(TARGET ${_expectedTarget}) list(APPEND _targetsDefined ${_expectedTarget}) else() list(APPEND _targetsNotDefined ${_expectedTarget}) endif() endforeach() if("%${_targetsDefined}" STREQUAL "%${_expectedTargets}") unset(_targetsDefined) unset(_targetsNotDefined) unset(_expectedTargets) cmake_policy(POP) return() endif() if(NOT "${_targetsDefined}" STREQUAL "") message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\n" "Targets Defined: ${_targetsDefined}\n" "Targets not yet defined: ${_targetsNotDefined}\n") endif() unset(_targetsDefined) unset(_targetsNotDefined) unset(_expectedTargets) @__targetdefs__@ cmake_policy(POP) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/cmake/jrunTest.cmake����������������������������������������������0000664�0000000�0000000�00000031773�15030617045�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# jrunTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0053 NEW) # arguments checking if (NOT TEST_TESTER) message (FATAL_ERROR "Require TEST_TESTER to be defined") endif () if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_LIBRARY_DIRECTORY) # Directory to add to PATH message (VERBOSE "Optional TEST_LIBRARY_DIRECTORY is not defined") endif () if (NOT TEST_CLASSPATH) message (VERBOSE "Optional TEST_CLASSPATH is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (NOT TEST_LOG_LEVEL) # java logger verbosity level set (LOG_LEVEL "info") else () set (LOG_LEVEL "${TEST_LOG_LEVEL}") endif () message (STATUS "COMMAND: ${TEST_TESTER} -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=${LOG_LEVEL} -Djava.library.path=\"${TEST_LIBRARY_DIRECTORY}\" -cp \"${TEST_CLASSPATH}\" ${TEST_ARGS} ${TEST_PROGRAM} ${ARGN}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_TESTER} -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLogLevel=${LOG_LEVEL} -Djava.library.path=${TEST_LIBRARY_DIRECTORY} -cp "${TEST_CLASSPATH}" ${TEST_ARGS} ${TEST_PROGRAM} ${ARGN} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) message (STATUS "COMMAND Result: ${TEST_RESULT}") message (STATUS "COMMAND Error: ${TEST_ERROR}") # if the .err file exists and ERRROR_APPEND is enabled if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (TEST_MASK_FILE) # replace directory name with generic name STRING(REGEX REPLACE "CurrentDir is [^\n]+\n" "CurrentDir is (dir name)\n" TEST_STREAM "${TEST_STREAM}") endif () if (NOT ERROR_APPEND) # write back to original .err file file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) else () # append error output to the stdout output file file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () endif () # if the output file or the .err file needs to mask out error stack info if (TEST_MASK_ERROR) if (NOT TEST_ERRREF) # the error stack has been appended to the output file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) endif () else () # the error stack remains in the .err file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) endif () endif () string (REGEX REPLACE "Time:[^\n]+\n" "Time: XXXX\n" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") #string (REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "HDF4 .[1-9]*[.][0-9]*[.][0-9]*[^)]*" "HDF4 (version (number)" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files if (NOT TEST_ERRREF) file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) else () file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) endif () endif () # if the return value is !=expected bail out if (NOT TEST_RESULT EQUAL TEST_EXPECT) message (STATUS "ERROR OUTPUT: ${TEST_STREAM}") message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n${TEST_ERROR}") endif () # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) # verify there is text output in the reference file if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_REFERENCE} ${TEST_FOLDER}/${TEST_REFERENCE}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_REFERENCE}.tmp ${TEST_FOLDER}/${TEST_REFERENCE}) endif () endif () if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () # sort the output files first before comparing file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) if (line GREATER_EQUAL len_act) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_FOLDER}/${TEST_OUTPUT}") set (TEST_COMPARE_RESULT 1) break () elseif (line GREATER_EQUAL len_ref) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_FOLDER}/${TEST_REFERENCE}") set (TEST_COMPARE_RESULT 1) break () else () list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () endif () # TEST_COMPARE_RESULT endif () # test_len GREATER 0 endif () # EXISTS "${TEST_FOLDER}/${TEST_REFERENCE} message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () # now compare the .err file with the error reference, if supplied if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") set (TEST_ERRREF_RESULT 0) if (TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF}") file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_ERRREF} ${TEST_FOLDER}/${TEST_ERRREF}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_ERRREF}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_ERRREF}.tmp ${TEST_FOLDER}/${TEST_ERRREF}) endif () endif () # now compare the error output with the error reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF} RESULT_VARIABLE TEST_ERRREF_RESULT ) if (TEST_ERRREF_RESULT) set (TEST_ERRREF_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref) list (LENGTH test_ref len_ref) math (EXPR _FP_LEN "${len_ref} - 1") if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_ERRREF_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT}.err is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_ERRREF} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_ERRREF_RESULT 1) endif () endif () # TEST_ERRREF_RESULT endif () # test_len GREATER 0 message (STATUS "COMPARE Result: ${TEST_ERRREF_RESULT}") # again, if return value is !=0 scream and shout if (TEST_ERRREF_RESULT) message (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}") endif () endif () # TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF} else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT}.err does not exist") endif () endif () set (TEST_GREP_RESULT 0) if (TEST_GREP_COMPARE AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") # now grep the output with the reference file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # TEST_REFERENCE should always be matched string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () # dump the output unless nodisplay option is set if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_STREAM} RESULT_VARIABLE TEST_RESULT ) endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") �����hdf4-hdf4.3.1/HDF4Examples/config/cmake/runTest.cmake�����������������������������������������������0000664�0000000�0000000�00000040721�15030617045�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# runTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0053 NEW) # arguments checking if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_EXPECT) message (VERBOSE "Optional TEST_EXPECT is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () message (STATUS "COMMAND: ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () if (NOT TEST_INPUT) # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) else () # run the test program with stdin, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT INPUT_FILE ${TEST_INPUT} OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) endif () message (STATUS "COMMAND Result: ${TEST_RESULT}") # append the test result status with a predefined text if (TEST_APPEND) file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_RESULT}\n") endif () message (STATUS "COMMAND Error: ${TEST_ERROR}") ############################################# # Begin of file filtering ############################################# if (TEST_REGEX) # TEST_REGEX and TEST_MATCH should always be checked if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_REGEX}" REGEX_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${REGEX_MATCH}" "${TEST_MATCH}" REGEX_RESULT) if (NOT REGEX_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_MATCH}") endif () else () message (STATUS "Failed: No output of ${TEST_PROGRAM}") endif () endif () # if the .err file exists if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (TEST_MASK_FILE) # replace directory name with generic name STRING(REGEX REPLACE "CurrentDir is [^\n]+\n" "CurrentDir is (dir name)\n" TEST_STREAM "${TEST_STREAM}") endif () # remove special output string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*no version information available[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}") endif () if (NOT ERROR_APPEND) # write back to original .err file file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) else () # append error output to the stdout output file file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () endif () # if the return value is !=${TEST_EXPECT} bail out if (NOT TEST_RESULT EQUAL TEST_EXPECT) if (NOT TEST_NOERRDISPLAY) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) message (STATUS "Output :\n${TEST_STREAM}") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) message (STATUS "Error Output :\n${TEST_STREAM}") endif () endif () message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != ${TEST_EXPECT}.\n${TEST_ERROR}") endif () # remove special regex text from the output if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "ulimit -s" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*ulimit -s[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*no version information available[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () # if the output file needs Storage text masked out if (TEST_MASK_STORE) string (REGEX REPLACE "Storage:[^\n]+\n" "Storage: <details removed for portability>\n" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () # if the output file needs Modified text removed if (TEST_MASK_MOD) string (REGEX REPLACE "Modified:[^\n]+\n" "Modified: XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () endif () # if the output file or the .err file needs to mask out error stack info if (TEST_MASK_ERROR) if (NOT TEST_ERRREF) # the error stack has been appended to the output file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) endif () else () # the error stack remains in the .err file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) endif () endif () string (REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files if (NOT TEST_ERRREF) file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) else () file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) endif () endif () if (TEST_REF_FILTER) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) string (REGEX REPLACE "${TEST_REF_APPEND}" "${TEST_REF_FILTER}" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_REFERENCE} "${TEST_STREAM}") endif () endif () # replace text from the output file if (TEST_FILTER) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) message (STATUS "TEST_FILTER: ${TEST_FILTER} TEST_FILTER_REPLACE: ${TEST_FILTER_REPLACE}") string (REGEX REPLACE "${TEST_FILTER}" "${TEST_FILTER_REPLACE}" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () endif () # mask text in the output file set(TEST_PROCESSED_OUTPUT "${TEST_FOLDER}/${TEST_OUTPUT}") set(TEST_PROCESSED_REFERENCE "${TEST_FOLDER}/${TEST_REFERENCE}") if (TEST_MASK AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") H4_MASK_FILE("${TEST_FOLDER}/${TEST_OUTPUT}") # Later comparisons should use the masked value set(TEST_PROCESSED_OUTPUT "${TEST_FOLDER}/${TEST_OUTPUT}_masked") set(TEST_PROCESSED_REFERENCE "${TEST_FOLDER}/${TEST_REFERENCE}_masked") endif () ############################################# # End of file filtering ############################################# # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) # verify there is text output in the reference file if (test_len GREATER 0) if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_PROCESSED_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () # sort the output files first before comparing file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) if (TEST_SORT_COMPARE) list (SORT test_act) list (SORT test_ref) endif () math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) if (line GREATER_EQUAL len_act) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_PROCESSED_OUTPUT}") set (TEST_COMPARE_RESULT 1) break () elseif (line GREATER_EQUAL len_ref) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_PROCESSED_REFERENCE}") set (TEST_COMPARE_RESULT 1) break () else () list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () endif () # TEST_COMPARE_RESULT endif () # test_len GREATER 0 endif () # EXISTS "${TEST_FOLDER}/${TEST_REFERENCE} message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () # now compare the .err file with the error reference, if supplied if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") set (TEST_ERRREF_RESULT 0) if (TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF}") file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # now compare the error output with the error reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF} RESULT_VARIABLE TEST_ERRREF_RESULT ) if (TEST_ERRREF_RESULT) set (TEST_ERRREF_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref) list (LENGTH test_ref len_ref) math (EXPR _FP_LEN "${len_ref} - 1") if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_ERRREF_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT}.err is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_ERRREF} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_ERRREF_RESULT 1) endif () endif () # TEST_ERRREF_RESULT endif () # test_len GREATER 0 message (STATUS "COMPARE Result: ${TEST_ERRREF_RESULT}") # again, if return value is !=0 scream and shout if (TEST_ERRREF_RESULT) message (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}") endif () endif () # TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF} else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT}.err does not exist") endif () endif () # TEST_SKIP_COMPARE set (TEST_GREP_RESULT 0) if (TEST_GREP_COMPARE AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") # now grep the output with the reference file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # TEST_REFERENCE should always be matched string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () # dump the output unless nodisplay option is set if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_STREAM} RESULT_VARIABLE TEST_RESULT ) endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") �����������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/��������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0020440�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/aarch64.cmake�������������������������������������������0000664�0000000�0000000�00000001345�15030617045�0022675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������set(TOOLCHAIN_PREFIX aarch64-linux-gnu) set(ANDROID_NDK /opt/android-ndk-linux) set (CMAKE_SYSTEM_NAME Android) set (CMAKE_ANDROID_ARCH_ABI x86_64) #set (CMAKE_ANDROID_STANDALONE_TOOLCHAIN ${ANDROID_NDK}/build/cmake/android.toolchain.cmake) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) #set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR qemu-aarch64) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/build32.cmake�������������������������������������������0000664�0000000�0000000�00000006731�15030617045�0022715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������if (WIN32) set (CMAKE_SYSTEM_NAME Windows) set (CMAKE_GENERATOR_PLATFORM "x86") elseif(APPLE) set (CMAKE_OSX_ARCHITECTURES "i386") elseif(MINGW) set (CMAKE_SYSTEM_NAME Windows) set (TOOLCHAIN_PREFIX i686-w64-mingw32) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags") set (LIB32 /usr/lib) # Fedora if (EXISTS "/usr/lib32") set (LIB32 /usr/lib32) # Arch, Solus endif () set (CMAKE_SYSTEM_LIBRARY_PATH ${LIB32} CACHE STRING "system library search path" FORCE) set (CMAKE_LIBRARY_PATH ${LIB32} CACHE STRING "library search path" FORCE) # this is probably unlikely to be needed, but just in case set (CMAKE_EXE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "executable linker flags" FORCE) set (CMAKE_SHARED_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "shared library linker flags" FORCE) set (CMAKE_MODULE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "module linker flags" FORCE) # on Fedora and Arch and similar, point pkgconfig at 32 bit .pc files. We have # to include the regular system .pc files as well (at the end), because some # are not always present in the 32 bit directory if (EXISTS "${LIB32}/pkgconfig") set (ENV{PKG_CONFIG_LIBDIR} ${LIB32}/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig) endif () set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR wine) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") else () set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags") set (LIB32 /usr/lib) # Fedora if (EXISTS "/usr/lib32") set (LIB32 /usr/lib32) # Arch, Solus endif () set (CMAKE_SYSTEM_LIBRARY_PATH ${LIB32} CACHE STRING "system library search path" FORCE) set (CMAKE_LIBRARY_PATH ${LIB32} CACHE STRING "library search path" FORCE) # this is probably unlikely to be needed, but just in case set (CMAKE_EXE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "executable linker flags" FORCE) set (CMAKE_SHARED_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "shared library linker flags" FORCE) set (CMAKE_MODULE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "module linker flags" FORCE) # on Fedora and Arch and similar, point pkgconfig at 32 bit .pc files. We have # to include the regular system .pc files as well (at the end), because some # are not always present in the 32 bit directory if (EXISTS "${LIB32}/pkgconfig") set (ENV{PKG_CONFIG_LIBDIR} ${LIB32}/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig) endif () # where is the target environment set (CMAKE_FIND_ROOT_PATH ${LIB32}) # search for programs in the build host directories set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif () ���������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/clang.cmake���������������������������������������������0000664�0000000�0000000�00000000621�15030617045�0022525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "clang") if(WIN32) set (CMAKE_C_COMPILER clang-cl) set (CMAKE_CXX_COMPILER clang-cl) else() set (CMAKE_C_COMPILER clang) set (CMAKE_CXX_COMPILER clang++) endif() set (CMAKE_EXPORT_COMPILE_COMMANDS ON) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/crayle.cmake��������������������������������������������0000664�0000000�0000000�00000000417�15030617045�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The following line will use cross-compiling set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment") set (CMAKE_C_COMPILER cc) set (CMAKE_Fortran_COMPILER ftn) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/gcc.cmake�����������������������������������������������0000664�0000000�0000000�00000000505�15030617045�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following line and the correct system name to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "GCC") set (CMAKE_C_COMPILER cc) set (CMAKE_CXX_COMPILER c++) set (CMAKE_Fortran_COMPILER gfortran) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/icc.cmake�����������������������������������������������0000664�0000000�0000000�00000000437�15030617045�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_COMPILER_VENDOR "intel") set(CMAKE_C_COMPILER icc) set(CMAKE_CXX_COMPILER icpc) set(CMAKE_Fortran_COMPILER ifort) # the following is used if cross-compiling set(CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/intel.cmake���������������������������������������������0000664�0000000�0000000�00000000435�15030617045�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_COMPILER_VENDOR "intel") set(CMAKE_C_COMPILER icx) set(CMAKE_CXX_COMPILER icpx) set(CMAKE_Fortran_COMPILER ifx) # the following is used if cross-compiling set(CMAKE_CROSSCOMPILING_EMULATOR "") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/mingw64.cmake�������������������������������������������0000664�0000000�0000000�00000001203�15030617045�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) set (CMAKE_SYSTEM_NAME Windows) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR wine64) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/HDF4Examples/config/toolchain/pgi.cmake�����������������������������������������������0000664�0000000�0000000�00000000445�15030617045�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "PGI") set (CMAKE_C_COMPILER pgcc) set (CMAKE_CXX_COMPILER pgc++) set (CMAKE_Fortran_COMPILER pgf90) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/Makefile.am���������������������������������������������������������������������������0000664�0000000�0000000�00000001544�15030617045�0015067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# ## Subdirectories to build in ## ############################################################################# include $(top_srcdir)/config/commence.am # include Doxygen rules (requires autoconf-archive >2016-03-20) @DX_RULES@ if BUILD_JAVA_CONDITIONAL JAVA_DIR=java else JAVA_DIR= endif SUBDIRS = hdf mfhdf $(JAVA_DIR) # install libhdf4.settings in lib directory settingsdir = $(libdir) settings_DATA = libhdf4.settings # doxygen support if BUILD_DOXYGEN_CONDITIONAL doxygen: doxygen-doc endif # 'make-install-all' will be redundant but will still work. install: install-recursive uninstall: uninstall-recursive # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall ������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/Makefile.dist�������������������������������������������������������������������������0000664�0000000�0000000�00000002141�15030617045�0015427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Top-level distributed Makefile -*- makefile -*- # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # This Makefile is a stub (copied from Makefile.dist) which will run # configure and then invoke the same target in the new Makefile created # by configure. # Uncomment this variable if your make(1) doesn't set it automatically. # #MAKE=make SHELL=/bin/sh all lib progs check test _test install uninstall dep depend: _config $(MAKE) $@ clean mostlyclean distclean maintainer-clean TAGS: _config $(MAKE) $@ _config: sh configure .PHONY: all lib progs test install uninstall dep depend clean mostlyclean \ distclean maintainer-clean _config �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/Makefile.in���������������������������������������������������������������������������0000664�0000000�0000000�00000100343�15030617045�0015075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = doxygen/Doxyfile libhdf4.settings CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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)$(settingsdir)" DATA = $(settings_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = hdf mfhdf java am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libhdf4.settings.in \ $(top_srcdir)/bin/compile $(top_srcdir)/bin/config.guess \ $(top_srcdir)/bin/config.sub $(top_srcdir)/bin/install-sh \ $(top_srcdir)/bin/ltmain.sh $(top_srcdir)/bin/missing \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/doxygen/Doxyfile.in COPYING bin/compile \ bin/config.guess bin/config.sub bin/depcomp bin/install-sh \ bin/ltmain.sh bin/missing 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 GZIP_ENV = --best DIST_TARGETS = 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog @BUILD_JAVA_CONDITIONAL_FALSE@JAVA_DIR = @BUILD_JAVA_CONDITIONAL_TRUE@JAVA_DIR = java SUBDIRS = hdf mfhdf $(JAVA_DIR) # install libhdf4.settings in lib directory settingsdir = $(libdir) settings_DATA = libhdf4.settings all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): doxygen/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/doxygen/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ libhdf4.settings: $(top_builddir)/config.status $(srcdir)/libhdf4.settings.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 install-settingsDATA: $(settings_DATA) @$(NORMAL_INSTALL) @list='$(settings_DATA)'; test -n "$(settingsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(settingsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(settingsdir)" || 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_DATA) $$files '$(DESTDIR)$(settingsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(settingsdir)" || exit $$?; \ done uninstall-settingsDATA: @$(NORMAL_UNINSTALL) @list='$(settings_DATA)'; test -n "$(settingsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(settingsdir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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) | eval GZIP= gzip $(GZIP_ENV) -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-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(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/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(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 $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(settingsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install-exec: install-exec-recursive install-data: install-data-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-settingsDATA 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: uninstall-settingsDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip dist-zstd 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-settingsDATA 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-am uninstall uninstall-am uninstall-settingsDATA .PRECIOUS: Makefile # include Doxygen rules (requires autoconf-archive >2016-03-20) @DX_RULES@ # doxygen support @BUILD_DOXYGEN_CONDITIONAL_TRUE@doxygen: doxygen-doc # 'make-install-all' will be redundant but will still work. install: install-recursive uninstall: uninstall-recursive # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall # 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/README.md�����������������������������������������������������������������������������0000664�0000000�0000000�00000012625�15030617045�0014314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������HDF version 4.3.1 released on 2025-06-30 ![HDF Logo](doc/img/HDF4.png) [![master build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf4/main.yml?branch=master&label=master)](https://github.com/HDFGroup/hdf4/actions?query=branch%3Amaster) [![HDF-EOS build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf4/hdfeos2.yml?branch=master&label=HDF-EOS)](https://github.com/HDFGroup/hdf4/actions?query=branch%3Amaster) [![netCDF build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf4/netcdf.yml?branch=master&label=netCDF)](https://github.com/HDFGroup/hdf4/actions?query=branch%3Amaster) [![BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://github.com/HDFGroup/hdf4/blob/master/COPYING) DOCUMENTATION ------------- Full Documentation and Programming Resources for this release can be found at https://portal.hdfgroup.org/hdf4/ See the RELEASE.txt file in the release\_notes/ directory for information specific to the features and updates included in this release of the library. Several more files are located within the release\_notes/ directory with specific details for several common platforms and configurations. INSTALL - Start Here. General instructions for compiling and installing the library INSTALL_CMAKE - instructions for building with CMake (Kitware.com) INSTALL_WINDOWS and INSTALL_CYGWIN - MS Windows installations. FORUM and NEWS -------------- The following public forums are provided for public announcements and discussions of interest to the general HDF4 Community. - Homepage of the Forum https://forum.hdfgroup.org - News and Announcement https://forum.hdfgroup.org/c/news-and-announcements-from-the-hdf-group - HDF4 Topics https://forum.hdfgroup.org/c/hdf4 These forums are provided as an open and public service for searching and reading. Posting requires completing a simple registration and allows one to join in the conversation. Please read the following instructions pertaining to the Forum's use and configuration https://forum.hdfgroup.org/t/quickstart-guide-welcome-to-the-new-hdf-forum RELEASE SCHEDULE ---------------- ![HDF4 release schedule](doc/img/release-schedule.png) HDF4 does not release on a regular schedule. Instead, releases are driven by new features and bug fixes, though we try to have at least one release of each maintenance branch per year. Future HDF4 releases indicated on this schedule are tentative. | Release | New Features | | -------- | ------------ | | HDF4 3.1 | Fix memory issues and update documentation to match the software | HDF4 4.0 | Drop FORTRAN 77 support, Drop netCDF 2.3.2 API + tools, Unified library (maybe) | HDF4 3.1 is scheduled to be released at the end of May, 2025. HDF4 4.0 (Tentatively Feb, 2026) * We will drop support for FORTRAN 77 and move to modern Fortran (2003 or 2008) * HDF4 includes an ancient netCDF 2.3.2 API along with HDF4-built ncdump and ncgen tools. These will be removed in 4.0 and are available by installing the [netCDF-C library](https://github.com/Unidata/netcdf-c). * (maybe) libdf and libmfhdf will be merged into a single libhdf4 library, Fortran will be built as a separate library The goal of the HDF4 4.0 release is to address long-standing deficiencies and bring HDF4 in line with HDF5's build practices. This should allow HDF4 to work better with modern systems and compilers and be more easily maintained. There will be one more release in the HDF4 3.x series, 3.1, then the 4.3 maintenance line will be retired when HDF4 4.0 releases. SNAPSHOTS, PREVIOUS RELEASES AND SOURCE CODE -------------------------------------------- Periodically development code snapshots are provided at the following URL: https://github.com/HDFGroup/hdf4/releases/tag/snapshot Source packages for current and previous releases are located at: https://portal.hdfgroup.org/downloads/ Development code is available at our Github location: https://github.com/HDFGroup/hdf4.git Source Distribution Layout -------------------------- The top level of the source code distribution contains the following subdirectories: bin -- Scripts for maintenance. config -- Configuration files to be used by configure script. doc -- HDF 4.2 to 4.3 Migration Guide hdf -- The source code for the HDF 'base library', the multi-file annotation interface, the multi-file raster image interface, HDF command line utilities, and a test suite. Please see the README in each directory for further information on each package. java -- The Java HDF JNI library m4 -- Autotools macros and libtool files for building with autotools. mfhdf -- The netCDF(mfhdf) part of the HDF/mfhdf distribution and additional HDF utilities, such as hdp, hrepack, hdfimport, etc. release\_notes -- Installation instructions for UNIX and Windows. Descriptions of new features and bug fixes in this release. Files in this sub-directory can be used as supplemental documentation for HDF. Third Party Software Requirements --------------------------------- * JPEG distribution release 6b or later. * ZLIB 1.1.4(libz.a) or later. System Requirements ------------------- To build the HDF library from source, you need: * C and Fortran compilers. For a list of the supported compilers, see release_notes/RELEASE.txt file. �����������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/UserMacros.cmake����������������������������������������������������������������������0000664�0000000�0000000�00000002022�15030617045�0016110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################## # Include file for user options ######################################################## #----------------------------------------------------------------------------- #------------------- E X A M P L E B E G I N-------------------------------- #----------------------------------------------------------------------------- # Option to Build with User Defined Values #----------------------------------------------------------------------------- macro (MACRO_USER_DEFINED_LIBS) set (USER_DEFINED_VALUE "FALSE") endmacro () #------------------------------------------------------------------------------- option (BUILD_USER_DEFINED_LIBS "Build With User Defined Values" OFF) if (BUILD_USER_DEFINED_LIBS) MACRO_USER_DEFINED_LIBS () endif () #----------------------------------------------------------------------------- #------------------- E X A M P L E E N D ----------------------------------- #----------------------------------------------------------------------------- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/aclocal.m4����������������������������������������������������������������������������0000664�0000000�0000000�00000126465�15030617045�0014705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.16.2 -*- Autoconf -*- # Copyright (C) 1996-2020 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. 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'.])]) # Copyright (C) 2002-2020 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. # 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.16' 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.16.2], [], [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.16.2])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-2020 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. # 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], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2020 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. # 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-2020 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. # 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-2020 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _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. # This creates each '.Po' and '.Plo' makefile fragment that we'll 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" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2020 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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.]) 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 # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). 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 AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) 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-2020 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. # 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+set}" != 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-2020 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. # 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])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2020 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. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2020 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. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2020 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. # 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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2020 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. # _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])]) # Copyright (C) 1999-2020 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2020 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2020 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. # 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-2020 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. # 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-2020 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. # 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-2020 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. # _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-2020 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. # _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}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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 <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/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 m4_include([m4/ax_check_class.m4]) m4_include([m4/ax_check_classpath.m4]) m4_include([m4/ax_check_java_home.m4]) m4_include([m4/ax_check_junit.m4]) m4_include([m4/ax_java_options.m4]) m4_include([m4/ax_jni_include_dir.m4]) m4_include([m4/ax_prog_doxygen.m4]) m4_include([m4/ax_prog_jar.m4]) m4_include([m4/ax_prog_java.m4]) m4_include([m4/ax_prog_java_works.m4]) m4_include([m4/ax_prog_javac.m4]) m4_include([m4/ax_prog_javac_works.m4]) m4_include([m4/ax_prog_javadoc.m4]) m4_include([m4/ax_try_compile_java.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/autogen.sh����������������������������������������������������������������������������0000775�0000000�0000000�00000002346�15030617045�0015035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # A script to reconfigure autotools for HDF4 echo echo "**************************" echo "* HDF4 autogen.sh script *" echo "**************************" echo echo echo "NOTE: You can ignore the warning about adding -I m4." echo " We already do this in an included file." echo echo echo "NOTE: You can ignore the warning about adding subdir-objects." echo " This currently causes failures on older systems. It will" echo " be added once we fix the problem." echo # The "obsolete" warnings category flags our Java macros as obsolete. # Since there is no clear way to upgrade them (Java support in the Autotools # is not great) and they work well enough for now, we suppress those warnings. autoreconf -Wno-obsolete --force --install ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0013577�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/cmakehdf4�������������������������������������������������������������������������0000775�0000000�0000000�00000026552�15030617045�0015365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Build and Test HDF4 using cmake. # Author: Allen Byrne # Albert Cheng # Creation Date: Nov 2012 # Modified: # Changed to use the quick steps described in INSTALL_CMake.txt. (AKC 2014/1/7) # Copyright: The HDF Group, 2012-14 # Debug Print: remove the comment hash if you want DPRINT to do echo DPRINT=: #DPRINT=echo # use the ctest scripting method if --script is given if [ "$1" != "--script" ]; then # variable names # The "extra" number is the step number and easier to see all logfiles in # the sorted order of steps progname=`basename $0` # program name configlog="#${progname}_1config.log" makelog="#${progname}_2build.log" testlog="#${progname}_3test.log" packlog="#${progname}_4pack.log" installlog="#${progname}_5install.log" exit_code=0 # This command should be in the source directory's bin/ # and should have invoked as "$srcdir/bin/$progname" or # "bin/$progname". So, by striping bin/$program from $0, # we can find $srcdir. if [ $0 == bin/$progname ]; then srcdir="." # current directory else # $0 is $srdir/bin/$progname srcdir=`echo $0 | sed -e s%/bin/$progname\$%%` fi # Sanity check if [ ! -r $srcdir/bin/$progname ]; then echo "encountered error while trying to find srcdir($srdir)" exit 1 fi #============= # Function definitions #============= # Show user help page HELP() { echo "Usage: $progname [--script]" echo " --script: Use the ctest scripting method of $progname" echo "" } # Display a time stamp TIMESTAMP() { echo "=====" "`date`" "=====" } # Do one step bracketed with time stamps # The '< /dev/null' is needed to prevent some applications like MPI # jobs blocked for reading when they read stdin unnecessary. # $1 is banner message to be displayed. # $2 is command to run # $3 is logfile name for saving output from the command STEP() { banner="$1" command="$2" logfile="$3" echo "$banner" with output saved in $logfile (TIMESTAMP; nerror=0 ; echo "eval $command" eval $command || nerror=1 ; TIMESTAMP; exit $nerror) < /dev/null >> "$logfile" 2>&1 if [ $? -ne 0 ]; then echo "error in '$banner'. $progname aborted." exit 1 fi } #========== # main #========== # Show a start time stamp/hdf4 TIMESTAMP # Always display the help page HELP # Verify there is a valid hdf4 source directory present if [ ! -d $srcdir ]; then echo $srcdir not found. Aborted. exit 1 fi # figure out version information vers=bin/h4vers if [ ! -x $srcdir/$vers ]; then echo $srcdir/$vers not found or not executable. Aborted. exit 1 fi version=`cd $srcdir; $vers` if [ $? != 0 ]; then echo $vers failed. Aborted. exit 1 fi echo Running Cmake for HDF4-${version} ... # 4. Configure the C library, tools and tests with this command: STEP "Configure..." "cmake -C $srcdir/config/cmake/cacheinit.cmake -G 'Unix Makefiles' -DCMAKE_INSTALL_PREFIX:PATH="$PWD" -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING="" -DHDF4_PACKAGE_EXTLIBS:BOOL=OFF -DHDF4_BUILD_TOOLS:BOOL=ON -DHDF4_BUILD_UTILS:BOOL=ON -DBUILD_TESTING:BOOL=ON $srcdir" $configlog # 5. Build the C library, tools and tests with this command: STEP "Build the library, tools and tests, ..." "cmake --build . --config Release" $makelog # 6. Test the C library and tools with this command: STEP "Test the library and tools..." "ctest . -C Release" $testlog # 7. Create an install image with this command: STEP "Create an install image..." "cpack -C Release CPackConfig.cmake" $packlog # 8. Install with this command: STEP "Install..." "./HDF-${version}-Linux.sh --skip-license" $installlog # save the last exit code exit_code=$? # Show a closing time stamp TIMESTAMP exit $exit_code else # --------------- # older version # --------------- # variable names progname=`basename $0` # program name cminfile="cmakemin.$$" # Cmake minimum file cfgfile=$progname.$$ # configure file ctest_log=ctest.log # output of ctest script install_log=install.log # output of installation $DPRINT $cfgfile # Remove temporary generated files if exit 0 trap "rm -f $cminfile $cfgfile" 0 #============= # Function definitions #============= TIMESTAMP() { echo "=====" "`date`" "=====" } #========== # main #========== # Show a start time stamp TIMESTAMP # Explain what and where log files are. cat <<EOF $ctest_log: output of ctest script. $install_log: output of installation Log files will be stored in Testing/Temporary: LastConfigure_<timestamp>.log: output of configure LastBuild_<timestamp>.log: output of build LastTest_<timestamp>.log: output of testing LastTestsFailed_<timestamp>.log: list of failed tests EOF # First generate the two needed input files, the $cimnfile and $cfgfile. # Then use ctest to use the two input files. #========== # create the configure file #========== # Create the cmake minimum required file to be used by the following # configure file. Though not absolute needed, it is better to generate # this file before the configure file. Quote the EOF to prevent substitution # in the text. #========== #========== cat > $cfgfile <<'EOF' cmake_minimum_required(VERSION 3.18) ######################################################## # This dashboard is maintained by The HDF Group # For any comments please contact cdashhelp@hdfgroup.org # ######################################################## set (CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY}) set (CTEST_SOURCE_DIRECTORY "../hdf4") set (CTEST_BINARY_DIRECTORY ".") set (CTEST_CMAKE_GENERATOR "Unix Makefiles") set (CTEST_CONFIGURATION_TYPE "Release") set (CTEST_MAX_N 8) # -- CDash variables set (LOCAL_NO_SUBMIT TRUE) # No CDash submit. set (MODEL "Experimental") set (CDASH_LOCAL TRUE) set (SITE_BUILDNAME_SUFFIX "cmakehdf4") # -- URL set for internal check, default is to not update set (LOCAL_SKIP_UPDATE TRUE) set (REPOSITORY_URL "https://github.com/HDFGroup/hdf4") # -- Standard build options set (ADD_BUILD_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=${CTEST_BINARY_DIRECTORY} -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING=\"SVN\" -DHDF4_PACKAGE_EXTLIBS:BOOL=ON") # Use multiple CPU cores to build include(ProcessorCount) ProcessorCount(N) if(NOT N EQUAL 0) if(N GREATER ${CTEST_MAX_N}) set(N ${CTEST_MAX_N}) endif() set(CTEST_BUILD_FLAGS -j${N}) set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) endif() # ----------------------------------------------------------- # -- Get environment # ----------------------------------------------------------- ## -- set hostname ## -------------------------- find_program (HOSTNAME_CMD NAMES hostname) exec_program (${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE HOSTNAME) set (CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}") find_program (UNAME NAMES uname) macro (getuname name flag) exec_program ("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}") endmacro (getuname) getuname (osname -s) getuname (osrel -r) getuname (cpu -m) if (SITE_BUILDNAME_SUFFIX) set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}-${SITE_BUILDNAME_SUFFIX}") else () set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}") endif () # ----------------------------------------------------------- set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}") #----------------------------------------------------------------------------- # MAC machines need special option #----------------------------------------------------------------------------- if (APPLE) # Compiler choice execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE) SET(ENV{CC} "${XCODE_CC}") # Shared fortran is not supported, build static set (BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_JPEG_WITH_PIC:BOOL=ON") set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF") endif () # ----------------------------------------------------------- find_package (Subversion) set (CTEST_UPDATE_COMMAND "${Subversion_SVN_EXECUTABLE}") # -- Only clean build folder if LOCAL_CLEAR_BUILD is set if (LOCAL_CLEAR_BUILD) set (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE) ctest_empty_binary_directory (${CTEST_BINARY_DIRECTORY}) endif () #----------------------------------------------------------------------------- # Send the main script as a note. list (APPEND CTEST_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}" "${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake" ) # Check for required variables. foreach (req CTEST_CMAKE_GENERATOR CTEST_SITE CTEST_BUILD_NAME ) if (NOT DEFINED ${req}) message(FATAL_ERROR "The containing script must set ${req}") endif (}) endforeach () ## -- set output to english set($ENV{LC_MESSAGES} "en_EN") #----------------------------------------------------------------------------- # Initialize the CTEST commands #------------------------------ set (CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"") set (CTEST_CONFIGURE_COMMAND "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\"") # Print summary information. foreach (v CTEST_SITE CTEST_BUILD_NAME CTEST_SOURCE_DIRECTORY CTEST_BINARY_DIRECTORY CTEST_CMAKE_GENERATOR CTEST_CONFIGURATION_TYPE CTEST_CONFIGURE_COMMAND CTEST_SCRIPT_DIRECTORY ) set (vars "${vars} ${v}=[${${v}}]\n") endforeach () message ("Dashboard script configuration:\n${vars}\n") CTEST_START (${MODEL} TRACK ${MODEL}) if (NOT LOCAL_SKIP_UPDATE) CTEST_UPDATE (SOURCE "${CTEST_SOURCE_DIRECTORY}") endif () CTEST_CONFIGURE (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) if(NOT res STREQUAL "0") message (FATAL_ERROR "Configure FAILED") endif() message ("Configure DONE") CTEST_READ_CUSTOM_FILES ("${CTEST_BINARY_DIRECTORY}") if (NOT LOCAL_NO_SUBMIT) CTEST_SUBMIT (PARTS Update Configure Notes) endif () CTEST_BUILD (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND RETURN_VALUE res) if (NOT LOCAL_NO_SUBMIT) CTEST_SUBMIT (PARTS Build) endif () if(NOT res STREQUAL "0") message (FATAL_ERROR "Build FAILED") endif() message ("build DONE") if (NOT LOCAL_SKIP_TEST) CTEST_TEST (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res) if (NOT LOCAL_NO_SUBMIT) CTEST_SUBMIT (PARTS Test) endif () if(NOT res STREQUAL "0") message (FATAL_ERROR "Test FAILED") endif() message ("test DONE") endif () if(NOT LOCAL_MEMCHECK_TEST) ##----------------------------------------------- ## Package the product ##----------------------------------------------- execute_process(COMMAND cpack -C ${CTEST_CONFIGURATION_TYPE} -V WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY} RESULT_VARIABLE cpackResult OUTPUT_VARIABLE cpackLog ERROR_VARIABLE cpackLog.err ) file(WRITE ${CTEST_BINARY_DIRECTORY}/cpack.log "${cpackLog.err}" "${cpackLog}") endif() #----------------------------------------------------------------------------- message ("DONE") EOF # Run ctest ctest -S $cfgfile -C Release -V -O $ctest_log exit_code=$? if [ $exit_code = 0 ]; then echo CTest script completed without error else echo Error encountered CTest script fi # Using HDF-*.sh because actual name is unavailable install_sh=HDF-*.sh echo installing with $install_sh ... ./$install_sh --skip-license > $install_log exit_code=$? if [ $exit_code = 0 ]; then echo Complete without error else echo Error encountered fi TIMESTAMP exit $exit_code fi ������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/compile���������������������������������������������������������������������������0000775�0000000�0000000�00000016350�15030617045�0015162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2020 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # 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 <https://www.gnu.org/licenses/>. # 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. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/config.guess����������������������������������������������������������������������0000775�0000000�0000000�00000140446�15030617045�0016130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2021-01-25' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to <config-patches@gnu.org>. me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -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 <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 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 # 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. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { 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" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" 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 } # 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 ; 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_SYSTEM" in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include <stdarg.h> /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # 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". UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)) case "$UNAME_MACHINE_ARCH" in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') machine="${arch}${endian}"-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) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) 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 # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; 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/[-_].*//' | cut -d. -f1,2) ;; 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}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Twizzler:*:*) echo "$UNAME_MACHINE"-unknown-twizzler exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 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 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-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-unknown-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.*:*) 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 test "$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-unknown-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) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include <stdio.h> /* 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 test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$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 test -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 set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <sys/systemcfg.h> 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 test -x /usr/bin/lslpp ; then IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) 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:4.4BSD:*) 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 test -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 test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> 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 test "$HP_ARCH" = hppa2.0w then 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:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <unistd.h> 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 test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-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-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=$(uname -p) set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=$(/usr/bin/uname -p) case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys 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-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) 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=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" 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-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI="$LIBC"x32 fi fi echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" 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"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-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-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*: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-unknown-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' </usr/options/cb.name) echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL" elif /bin/uname -X 2>/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 configure 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-unknown-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-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-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 <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # 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 test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-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 ;; x86_64:Haiku:*:*) echo x86_64-unknown-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 ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; arm64:Darwin:*:*) echo aarch64-apple-darwin"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=$(uname -p) case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$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 case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi 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 ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-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. # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-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 ;; *:AROS:*:*) echo "$UNAME_MACHINE"-unknown-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" <<EOF #ifdef _SEQUENT_ #include <sys/types.h> #include <sys/utsname.h> #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include <signal.h> #if defined(_SIZE_T_) || defined(SIGLOST) #include <sys/utsname.h> #endif #endif #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 <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #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 <sys/param.h> #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 #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #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; } echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <<EOF NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize the system type. Please install a C compiler and try again. EOF ;; esac cat >&2 <<EOF This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: https://git.savannah.gnu.org/cgit/config.git/plain/config.guess and https://git.savannah.gnu.org/cgit/config.git/plain/config.sub EOF year=$(echo $timestamp | sed 's,-.*,,') # shellcheck disable=SC2003 if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then cat >&2 <<EOF If $0 has already been updated, send the following data and any information you think might be pertinent to config-patches@gnu.org to provide the necessary 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 fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/config.sub������������������������������������������������������������������������0000775�0000000�0000000�00000103154�15030617045�0015566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2021-01-08' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # 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: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # 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 or ALIAS Canonicalize a configuration name. Options: -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 <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 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 ;; *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 # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <<EOF $1 EOF # Separate into logical components for further validation case $1 in *-*-*-*-*) echo Invalid configuration \`"$1"\': more than four components >&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | 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* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # 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) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv4 ;; i*86v) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv ;; i*86sol2) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <<EOF $basic_machine EOF ;; # 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) cpu=$basic_machine vendor=pc ;; # These rules are duplicated from below for sake of the special case above; # i.e. things that normalized to x86 arches should also default to "pc" pc98) cpu=i386 vendor=pc ;; x64 | amd64) cpu=x86_64 vendor=pc ;; # Recognize the basic CPU types without company name. *) cpu=$basic_machine vendor=unknown ;; esac unset -v basic_machine # Decode basic machines in the full and proper CPU-Company form. case $cpu-$vendor in # Here we handle the default manufacturer of certain CPU types in canonical form. It is in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant ;; romp-unknown) vendor=ibm ;; mmix-unknown) vendor=knuth ;; microblaze-unknown | microblazeel-unknown) vendor=xilinx ;; rs6000-unknown) vendor=ibm ;; vax-unknown) vendor=dec ;; pdp11-unknown) vendor=dec ;; we32k-unknown) vendor=att ;; cydra-unknown) vendor=cydrome ;; i370-ibm*) vendor=ibm ;; orion-unknown) vendor=highlevel ;; xps-unknown | xps100-unknown) cpu=xps100 vendor=honeywell ;; # Here we normalize CPU types with a missing or matching vendor dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor amd64-*) cpu=x86_64 ;; blackfin-*) cpu=bfin basic_os=linux ;; c54x-*) cpu=tic54x ;; c55x-*) cpu=tic55x ;; c6x-*) cpu=tic6x ;; e500v[12]-*) cpu=powerpc basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 ;; ms1-*) cpu=mt ;; m68knommu-*) cpu=m68k basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z ;; openrisc-*) cpu=or32 ;; parisc-*) cpu=hppa basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 ;; pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) cpu=i686 ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) cpu=i686 ;; pentium4-*) cpu=i786 ;; pc98-*) cpu=i386 ;; ppc-* | ppcbe-*) cpu=powerpc ;; ppcle-* | powerpclittle-*) cpu=powerpcle ;; ppc64-*) cpu=powerpc64 ;; ppc64le-* | powerpc64little-*) cpu=powerpc64le ;; sb1-*) cpu=mipsisa64sb1 ;; sb1el-*) cpu=mipsisa64sb1el ;; sh5e[lb]-*) cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/') ;; spur-*) cpu=spur ;; strongarm-* | thumb-*) cpu=arm ;; tx39-*) cpu=mipstx39 ;; tx39el-*) cpu=mipstx39el ;; x64-*) cpu=x86_64 ;; xscale-* | xscalee[bl]-*) cpu=$(echo "$cpu" | sed 's/^xscale/arm/') ;; arm64-*) cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 vendor=axis ;; cris-* | etrax*-*) cpu=cris vendor=axis ;; crx-*) basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo vendor=tandem ;; nse-tandem) cpu=nse vendor=tandem ;; nsr-tandem) cpu=nsr vendor=tandem ;; nsv-tandem) cpu=nsv vendor=tandem ;; nsx-tandem) cpu=nsx vendor=tandem ;; mipsallegrexel-sony) cpu=mipsallegrexel vendor=sony ;; tile*-*) basic_os=${basic_os:-linux-gnu} ;; *) # Recognize the canonical CPU types that are allowed with any # company name. case $cpu in 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ | alphapca5[67] | alpha64pca5[67] \ | am33_2.0 \ | amdgcn \ | arc | arceb \ | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ | be32 | be64 \ | bfin | bpf | bs2000 \ | c[123]* | c30 | [cjt]90 | c4x \ | c8051 | clipper | craynv | csky | cydra \ | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | loongarch32 | loongarch64 | loongarchx32 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64eb | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ | none | np1 | ns16k | ns32k | nvptx \ | open8 \ | or1k* \ | or32 \ | orion \ | picochip \ | pdp10 | pdp11 | pj | pjl | pn | power \ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pru \ | pyramid \ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ | rl78 | romp | rs6000 | rx \ | s390 | s390x \ | score \ | sh | shl \ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ | spu \ | tahoe \ | thumbv7* \ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ | tron \ | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ | visium \ | w65 \ | wasm32 | wasm64 \ | we32k \ | x86 | x86_64 | xc16x | xgate | xps100 \ | xstormy16 | xtensa* \ | ymp \ | z8k | z80) ;; *) echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') ;; os2-emx) kernel=os2 os=$(echo $basic_os | sed -e 's|os2-emx|emx|') ;; nto-qnx*) kernel=nto os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') ;; *-*) # shellcheck disable=SC2162 IFS="-" read kernel os <<EOF $basic_os EOF ;; # Default OS when just kernel was specified nto*) kernel=nto os=$(echo $basic_os | sed -e 's|nto|qnx|') ;; linux*) kernel=linux os=$(echo $basic_os | sed -e 's|linux|gnu|') ;; *) kernel= os=$basic_os ;; esac # Now, normalize the OS (knowing we just have one component, it's not a kernel, # etc.) 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 ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=$(echo $os | sed -e 's|solaris1|sunos4|') ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=$(echo $os | sed -e 's/sco3.2./sco3.2v/') ;; sco*v* | scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; qnx*) os=qnx ;; hiux*) os=hiuxwe2 ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynxos*) # don't get caught up in next wildcard ;; lynx*) os=lynxos ;; mac[0-9]*) os=$(echo "$os" | sed -e 's|mac|macos|') ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=$(echo "$os" | sed -e 's|sunos5|solaris2|') ;; sunos6*) os=$(echo "$os" | sed -e 's|sunos6|solaris3|') ;; wince*) os=wince ;; 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 ;; # 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 ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; *) # No normalization, but not necessarily accepted, that comes below. ;; 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. kernel= case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) kernel=linux os=gnu ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; 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 ;; pru-*) os=elf ;; *-be) os=beos ;; *-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 ;; *-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 ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Now, validate our (potentially fixed-up) OS. case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. musl* | newlib* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) ;; # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ | os9* | macos* | osx* | ios* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; none) ;; *) echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$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 ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) 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 ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/depcomp���������������������������������������������������������������������������0000775�0000000�0000000�00000056020�15030617045�0015157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2020 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 <https://www.gnu.org/licenses/>. # 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 <oliva@dcc.unicamp.br>. 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 <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 information. 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. tr ' ' "$nl" < "$tmpdepfile" \ | 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 -ne 0; then 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 make_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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then 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 "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool 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$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; 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 -ne 0; then 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" echo >> "$depfile" # make sure the fragment doesn't end with a backslash 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" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/deploy����������������������������������������������������������������������������0000775�0000000�0000000�00000002074�15030617045�0015024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the files COPYING. COPYING can be found at the root # of the source code distribution tree. If you do not have # access to the file, you may request a copy from hdfhelp@ncsa.uiuc.edu. # # Deploy the HDF4 binary. # # Programmer: Albert Cheng # Created Date: 2005/04/07 # # Modifications # Function definitions # # Print Usage page USAGE() { cat << EOF Usage: $0 <dir> Install the binary to directory <dir> Examples: $ bin/deploy /usr/local/hdf4 .... EOF } # Variables if [ $# != 1 ]; then USAGE exit 1 fi installdir=$1 # create installdir if it does not exist yet. if [ -d $installdir ] || mkdir $installdir ; then ${MAKE:-gmake} install prefix=$installdir && \ ( cd $installdir/bin; ./h4redeploy -force) exit $? else echo $installdir is not a valid directory USAGE exit 1 fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/format_source���������������������������������������������������������������������0000775�0000000�0000000�00000001502�15030617045�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # # Recursively format all C & C++ sources and header files, except those in the # 'config' directory and generated files, such as ncgenyy.c, etc. # # Note that any files or directories that are excluded here should also be # added to the 'exclude' list in .github/workflows/clang-format-check.yml COMMAND="clang-format" if [ $# -eq 1 ]; then COMMAND="$COMMAND-$1" fi echo "" echo "bin/format_source <version>" echo "" echo "Format the HDF4 source using clang-format. The <version>" echo "parameter is optional and can be used to force a specific" echo "installed version of clang-format to be used." echo "" find . \( -type d -path ./config -prune -and -not -path ./config \) \ -or \( -iname *.h -or -iname *.c -or -iname *.java \) \ | xargs -P0 -n1 ${COMMAND} -style=file -i -fallback-style=none exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/genparser�������������������������������������������������������������������������0000775�0000000�0000000�00000011312�15030617045�0015511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # This script runs flex/lex and bison/yacc to generate parser code for # the mfhdf code. # # NOTE CAREFULLY! # # There is NO dependency in either the autotools or CMake to regenerate # the parser code. If you modify ncgen.l or ncgen.y, you will need to run # this script manually on a system with a suitable lexer and parser generator. # # IMPORTANT OS X NOTE # # If you are using OS X, you will probably not have flex or bison # installed. In addition, even if you do have bison installed, the bison # version you have installed may also have a bug that makes it unable to # process our input files. # # The easiest way to fix this is to install everything via Homebrew: # # http://brew.sh/ # # After you install the base packages, install flex/bison. # # brew install flex # brew install bison # # END IMPORTANT OS X NOTE # # If you want to use a particular version of flex or bison, the paths # to each tool can be overridden using the following environment # variables: # # HDF_FLEX # HDF_BISON # # This script takes one option: # # -v # # This emits some extra information, mainly tool versions. echo echo "***************************************" echo "* HDF4 NetCDF parser generator script *" echo "***************************************" echo # Default is not verbose output verbose=false optspec=":hpv-" while getopts "$optspec" optchar; do case "${optchar}" in h) echo "usage: $0 [OPTIONS] /path/to/ncgen/directory" echo echo " -h Print this help message." echo echo " -v Show more verbose output." echo echo " NOTE: Each tool can be set via an environment variable." echo " These are documented inside this script." echo exit 0 ;; v) echo "Setting verbosity: high" echo verbose=true ;; *) if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then echo "Non-option argument: '-${OPTARG}'" >&2 fi ;; esac done # Get the path to the ncgen directory shift $(($OPTIND - 1)) path_to_ncgen_src=$1 if test -z ${path_to_ncgen_src}; then echo "*** ERROR *** - Path to mfhdf/ncgen not set" echo "Please add the path to the mfhdf/ncgen directory as a parameter" echo "See $0 -h for more help." echo exit -1 fi # If paths to autotools are not specified, use whatever the system # has installed as the default. We use 'which <tool>' to # show exactly what's being used. if test -z ${HDF_BISON}; then HDF_BISON="$(command -v bison)" fi if test -z ${HDF_FLEX}; then HDF_FLEX="$(command -v flex)" fi # Make sure that these versions of the tools are in the path BISON_DIR=`dirname ${HDF_BISON}` FLEX_DIR=`dirname ${HDF_FLEX}` PATH=${FLEX_DIR}:${BISON_DIR}:$PATH # Run flex and bison # automatically generates mfhdf/ncgen/ncgenyy.c and mfhdf/ncgen/ncgentab.c # Note that, as of Xcode 6.1 (2015), the default bison version on OS X # is old enough to have the circular dependency bug. You'll have # to install a later version of bison. See the OS X note at the top # of this script. echo echo "Generating ncgen parser code (requires yacc/bison):" echo "Generate mfhdf/ncgen/ncgenyy.c from mfhdf/ncgen/ncgen.y" # HDF_BISON is set via the environment or 'command -v bison', above if test -z ${HDF_BISON}; then echo echo "*************************" echo " ERROR - bison not found" echo "*************************" echo "bison is required to generate parser code in mfhdf/ncgen" echo exit 127 fi if [ "$verbose" = true ] ; then ${HDF_BISON} --version fi ${HDF_BISON} -o ${path_to_ncgen_src}/ncgentab.c -d ${path_to_ncgen_src}/ncgen.y echo echo "Generating ncgen lexer code (requires lex/flex):" echo "Generate mfhdf/ncgen/ncgentab.c from mfhdf/ncgen/ncgen.l" # HDF_FLEX is set via the environment or 'command -v flex', above if test -z ${HDF_FLEX}; then echo echo "************************" echo " ERROR - flex not found" echo "************************" echo "flex is required to generate lexer code in mfhdf/ncgen" echo exit 127 fi if [ "$verbose" = true ] ; then ${HDF_FLEX} --version fi ${HDF_FLEX} --nounistd -o ${path_to_ncgen_src}/ncgenyy.c ${path_to_ncgen_src}/ncgen.l echo exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/h4_release_check.sh���������������������������������������������������������������0000775�0000000�0000000�00000016440�15030617045�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash red=$(tput setaf 1) green=$(tput setaf 2) yellow=$(tput setaf 3) magenta=$(tput setaf 5) reset=$(tput sgr0) pass=0 fail=1 ################################################## # TESTING CONTENTS OF lib/libhdf4.settings file. ################################################## if [ ! -f ./lib/libhdf4.settings ]; then echo " $red FAILED$reset: ./lib/libhdf4.settings DOES NOT EXIST" exit 1 fi # CHECKING FOR SHARED LIBRARIES if grep -q "Shared Libraries: no" ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- Shared Libraries ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- Shared Libraries ... $red FAILED$reset" echo " ... Should be 'Shared Libraries: no'" fi # CHECKING FOR STATIC LIBRARIES if grep -q "Static Libraries: yes" ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- Static Libraries ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- Shared Libraries ... $red FAILED$reset" echo " ... Should be 'Static Libraries: yes'" fi # CHECKING FOR FORTRAN ENABLED if grep -q "Fortran: yes" ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- Fortran Support ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- Fortran Support ... $red FAILED$reset" echo " ... Should be 'Fortran: yes'" fi # CHECKING CONFIGURE MODE if grep -q "Configure mode: production" ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- Configure mode ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- Configure mode ... $red FAILED$reset" echo " ... Should be 'Configure mode: production'" fi # CHECKING OPTIMIZATION if grep -q " -g " ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- Optimization Mode ... $red FAILED$reset" echo " ... Should be no there is no '-g' flag among compiler flags" else echo "Checking ./lib/libhdf4.settings -- Optimization Mode ... $green PASSED$reset" fi #CHECKING COMPRESSION if grep -q " -ljpeg " ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- JPEG COMPRESSION ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- JPEG COMPRESSION ... $yellow WARNING$reset" echo " ... JPEG compression was not found" fi if grep -q " -lz " ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- ZLIB COMPRESSION ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- ZLIB COMPRESSION ... $red FAILED$reset" echo " ... ZLIB compression is required" fi if grep -q "SZIP compression: enabled" ./lib/libhdf4.settings; then echo "Checking ./lib/libhdf4.settings -- SZIP COMPRESSION ... $green PASSED$reset" else echo "Checking ./lib/libhdf4.settings -- SZIP COMPRESSION ... $red FAILED$reset" echo " ... SZIP compression should be enabled" fi ######################### # TESTING IF FILES EXISTS ######################### include_file=( dffunc.f90 dffunc.inc H4api_adpt.h df.h h4config.h hbitio.h hcomp.h hdatainfo.h hdf2netcdf.h hdf.f90 hdf.h hdf.inc herr.h hfile.h hlimits.h hntdefs.h hproto_fortran.h hproto.h htags.h mfan.h mfdatainfo.h mffunc.f90 mffunc.inc mfgr.h mfhdf.h netcdf.f90 netcdf.h netcdf.inc vg.h) lib_file=(libdf.a libdf.la libhdf4.settings libmfhdf.a libmfhdf.la) bin_file=(gif2hdf h4cc h4fc h4redeploy hdf24to8 hdf2gif hdf2jpeg hdf8to24 hdfcomp hdfed hdfimport hdfls hdfpack hdftopal hdftor8 hdfunpac hdiff hdp hrepack jpeg2hdf ncdump ncgen paltohdf r8tohdf ristosds vmake vshow) # TEST TO MAKE SURE THE DIRECTORIES EXISTS if [ ! -d ./include ]; then echo " FAILED: ./include DIRECTORY DOES NOT EXIST" exit fi if [ ! -d ./bin ]; then echo " FAILED: ./bin DIRECTORY DOES NOT EXIST" exit fi if [ ! -d ./lib ]; then echo " FAILED: ./lib DIRECTORY DOES NOT EXIST" exit fi # TESTING FOR INCLUDE FILES status=$pass for var in "${include_file[@]}" do if [ ! -f ./include/$var ]; then echo "FILE$red ./include/${var}$reset DOES NOT EXIST" status=$fail fi done if [ "$status" -eq "$fail" ]; then echo "Testing for include files ... $red FAILED $reset" else echo "Testing for include files ... $green PASSED $reset" fi # TESTING FOR LIB FILES status=$pass for var in "${lib_file[@]}" do if [ ! -f ./lib/$var ]; then echo "FILE$red ./lib/${var}$reset DOES NOT EXIST" status=$fail fi done if [ "$status" -eq "$fail" ]; then echo "Testing for lib files ... $red FAILED $reset" else echo "Testing for lib files ... $green PASSED $reset" fi # TESTING FOR BIN FILES status=$pass for var in "${bin_file[@]}" do if [ ! -f ./bin/$var ]; then echo "FILE$red ./bin/${var}$reset DOES NOT EXIST" status=$fail fi done if [ "$status" -eq "$fail" ]; then echo "Testing for bin files ... $red FAILED $reset" else echo "Testing for bin files ... $green PASSED $reset" fi # Check settings in libhdf4.settings match what is in RELEASE.txt # Check the OS type UnameInfo=`grep -i 'Uname information:' lib/libhdf4.settings` OStype=`echo $UnameInfo | cut -d ":" -f 2 | cut -d " " -f 4` # This code will change the OStype to remove all the code between # the "- first number" and ".el". For example 2.6.32-573.22.1.el6.x86_64 # will become 2.6.32-573.el6.x86_64 # #OSsize=`echo ${OStype} | cut -d "e" -f 2` #OSsize=`echo .e${OSsize}` # #kernel=`echo ${OStype} | cut -d "-" -f 1` #vendor_kernel=`echo ${OStype} | cut -d "-" -f 2 | cut -d "." -f 1` #OStype=`echo ${kernel}-${vendor_kernel}${OSsize}` libCC=`grep -i 'C compiler' lib/libhdf4.settings` libFC=`grep -i 'Fortran Compiler' lib/libhdf4.settings` IFS='%' if grep -i -q "$OStype" RELEASE.txt; then echo "Testing for OS type ... $green PASSED $reset" # Check the processor line_start=`grep -in "$OStype" RELEASE.txt | cut -d : -f 1` # print to screen to have the user check compiler versions echo "$yellow __ ________ _____ _____ ________ __ $reset" echo "$yellow \ \ / / ____| __ \|_ _| ____\ \ / / $reset" echo "$yellow \ \ / /| |__ | |__) | | | | |__ \ \_/ / $reset" echo "$yellow \ \/ / | __| | _ / | | | __| \ / $reset" echo "$yellow \ / | |____| | \ \ _| |_| | | | $reset" echo "$yellow \/ |______|_| \_\_____|_| |_| $reset" echo "" echo "$yellow (1) VERIFY: C Compiler in libhdf4.settings: $reset" echo " $libCC" echo "$yellow should match a compiler listed in RELEASE.txt $reset" line_end=$line_start-2 sed -n "$line_start,/^$/p" RELEASE.txt | { while read line; do ((line_end++)) ## counter=$[$line_endcounter +1] done sed -n $line_start,${line_end}p RELEASE.txt } else echo "Testing for OS type ... $red FAILED $reset" echo " Operating system $OStype not found in RELEASE.txt" fi echo "" echo "$yellow (2) VERIFY: Binary executables do not require any external $reset" echo "$yellow libraries (except system libraries on some machines): $reset" echo `echo " Result from ${magenta}ldd bin/hdp${reset}: "; ldd bin/hdp` echo "" echo "" echo "$yellow (3) VERIFY: Binary executables match libhdf4.settings $reset" echo `echo " Result from ${magenta}file bin/hdp${reset}: "; file bin/hdp` echo `echo " Result from lib/libhdf4.settings: "; echo ${UnameInfo}` echo "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/h4vers����������������������������������������������������������������������������0000775�0000000�0000000�00000043134�15030617045�0014745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh perl -x -S $0 "$@" exit #! perl require 5.003; use strict; # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # # Robb Matzke <matzke@llnl.gov> # 17 July 1998 # # HDF4 alterations # Larry Knox <lrknox@hdfgroup.org> # 25 September 2009 ### Purpose # Increments the hdf4 version number by changing the value of # constants in the hdf/src/hfile.h file. The new version number is # printed on the standard output. An alternate source file name can be # specified as an argument. In any case, the original file is saved # by appending a tilde `~' to the name. ### Usage: # h4vers [OPTIONS] [FILE] # Without options this program only displays the current version and # doesn't modify any files or create backups. The default is to print # The space and parentheses around A are only printed if A is not empty. # # The `-s VERSION' switch will set the version as specified. If the # string contains a dotted triple then it will be used as the version # number, otherwise up to three numbers will be read from the end of # the string and used as the major version, minor version, and release # number. If any numbers are missing then zero is assumed. This # allows versions to be specified like `-s "version 4.2 release 4"' or # `-s hdf4-4.2.4.tar.bz2'. If the new version is less than the old # version then a warning message is generated on standard error. The # annotation string, A, is set only if it appears immediately after the # third number, separated by a dash (e.g., `1.2.3-pre1') or in parentheses # (e.g., `version 1.2 release 3 (pre1)'). # # The `-i [major|minor|release|annot|last]' option increments the major # number, minor number, release number, or annotation string. The `last' # switch increments the annotation string if present, otherwise the # release number. If the release number is incremented then the annotation # string is cleared. If the minor number is incremented then the release # number is set to zero and the annotation string is cleared; if the major # number is incremented then the minor and release numbers are set to zero # and the annotation string is cleared. # # If a file is specified then that file is used instead of # ./hfile.h or ./hdf/src/hfile.h. # # If the version number is changed (either `-s' or `-i' was used on # the command line) then the first line of the README.md and # release_notes/RELEASE.txt two levels above the hfile.h file are also # modified so it looks something like: This is hdf4-1.2.3-pre1 currently # under development. The AC_INIT macro in configure.in will also change # in this case to be something like: AC_INIT([HDF4], [hdf4-1.2.3-pre1], # [help@hdfgroup.org]). # #Following paragraph from h5vers does not apply for HDF4? # Whenever the version changes, this script will increment the revision # field in HDF4's libtool shared library version in config/lt_vers.am, # which is included in src/Makefile.am. Incrementing the revision field # indicates that the source code has changed since the last version # (which it probably has). ############################################################################## sub getvers { local ($_) = @_; my (@vers); ($vers[0]) = /^\#\s*define\s+LIBVER_MAJOR\s+(\d+)/m; ($vers[1]) = /^\#\s*define\s+LIBVER_MINOR\s+(\d+)/m; ($vers[2]) = /^\#\s*define\s+LIBVER_RELEASE\s+(\d+)/m; ($vers[3]) = /^\#\s*define\s+LIBVER_SUBRELEASE\s+\"([^\"]*)\"/m; ($vers[4]) = /^\#\s*define\s+LIBVER_STRING\s+\"([^\"]*\d+)\"/m; #The above gets the entire string, below would get just the date portion. #($vers[4]) = /^\#\s*define\s+LIBVER_STRING\s+\"[^\"]*,(.*,\s+\d+)\"/m; return @vers; } sub setvers { my ($contents, @vers) = @_; my @months = ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); my @date = (localtime(time)); $_[0] =~ s/^(\#\s*define\s+LIBVER_MAJOR\s+)\d+/$1$vers[0]/m; $_[0] =~ s/^(\#\s*define\s+LIBVER_MINOR\s+)\d+/$1$vers[1]/m; $_[0] =~ s/^(\#\s*define\s+LIBVER_RELEASE\s+)\d+/$1$vers[2]/m; $_[0] =~ s/^(\#\s*define\s+LIBVER_SUBRELEASE\s+\")[^\"]*/$1$vers[3]/m; $_[0] =~ s/^(\#\s*define\s+LIBVER_STRING\s+\")[^\"]*/ sprintf("%sHDF Version %d.%d Release %d%s%s, %s %d, %d", $1, @vers[0,1,2], $vers[3]?"-":"", $vers[3], $months[@date[4]], @date[3], 1900+@date[5])/me; my $stringlength = 25 + 32 + length $months[@date[4]] + 2 + 6; die "Version string too long: $stringlength characters." unless $stringlength < 81; #printf("HDF Version %d.%d Release %d%s%s, %s %d, %d\n", @vers[0,1,2], # $vers[3]?"-":"", $vers[3], $months[@date[4]], @date[3], 1900+@date[5]); return $_[0]; } sub usage { my ($prog) = $0 =~ /([^\/]+)$/; print STDERR <<EOF; Usage: $prog [OPTS] [FILE] -i major|minor|release|annot Increment specified version component and set following components to zero. -s VERSION Set the version as specified. The version number can be embedded in some other string such as \"hdf4-1.1.0-pre1.tar.bz2\" or even \"this is HDF4 library version 1.1 release 0 (pre1)\" for convenience. -v Instead of displaying only a dotted triple version number a line such as \"version 1.1 release 0 (pre1)\" will be printed. FILE The name of the file that contains version information. This is seldom necessary since files hfile.h, hdf/src/hfile.h, src/hfile.h, and ../hdf/src/hfile.h are automatically checked. EOF exit 1; } # Parse arguments my ($verbose, $set, $inc, $file, $rc); my (@files) = ("hdf/src/hfile.h", "../hdf/src/hfile.h", "src/hfile.h", "hfile.h"); while ($_ = shift) { $_ eq "-s" && do { die "-s switch needs a version number\n" unless @ARGV; $set = shift; next; }; $_ eq "-i" && do { if (@ARGV && $ARGV[0]=~/^(major|minor|release|annot)$/) { $inc = shift; } else { $inc = "last"; } next; }; $_ eq "-v" && do { $verbose = 1; next; }; /^-(h|\?|-?help)$/ && usage; /^-/ && die "unrecognized option: $_\n"; die "only one file name can be specified\n" if $file; $file = $_; } die "mutually exclusive options given\n" if $set && $inc; #print "file is $file.\n"; #print "File array is ", @files; # Determine file to use as hfile.h, README.md, # release_notes/RELEASE.txt, configure.in, # and config/cmake/scripts/HDF4config.cmake. # The paths to README.md, release_notes/RELEASE.txt, configure.ac, # and config/cmake/scripts/HDF4config.cmake # files are always from the directory two levels above hfile.h. unless ($file) { for (@files) { ($file=$_,last) if -f $_; } } #print "file is $file.\n"; die "unable to find source file $file\n" unless defined $file; die "unable to read file: $file\n" unless -r $file; # config/lt_vers.am - HDF4 doesn't have this at present #my $LT_VERS = $file; #$LT_VERS =~ s/[^\/]*$/..\/config\/lt_vers.am/; #die "unable to read file: $LT_VERS\n" unless -r $file; # config/cmake/scripts/HDF4config.cmake my $HDF4CONFIGCMAKE = $file; $HDF4CONFIGCMAKE =~ s/[^\/]*$/..\/..\/config\/cmake\/scripts\/HDF4config.cmake/; die "unable to read file: $HDF4CONFIGCMAKE\n" unless -r $file; # java/src/hdf/hdflib/HDFLibrary.java my $H4_JAVA = $file; $H4_JAVA =~ s/[^\/]*$/..\/..\/java\/src\/hdf\/hdflib\/HDFLibrary.java/; die "unable to read file: $H4_JAVA\n" unless -r $file; # java/test/TestH4.java my $H4_TESTJAVA = $file; $H4_TESTJAVA =~ s/[^\/]*$/..\/..\/java\/test\/TestH4.java/; die "unable to read file: $H4_TESTJAVA\n" unless -r $file; # README.md my $README = $file; $README =~ s/[^\/]*$/..\/..\/README.md/; die "unable to read file: $README\n" unless -r $file; # release_notes/RELEASE.txt my $RELEASE = $file; $RELEASE =~ s/[^\/]*$/..\/..\/release_notes\/RELEASE.txt/; die "unable to read file: $RELEASE\n" unless -r $file; #print $RELEASE, "\n"; # configure.in my $CONFIGURE = $file; $CONFIGURE =~ s/[^\/]*$/..\/..\/configure.ac/; die "unable to read file: $CONFIGURE\n" unless -r $file; # Get the current version number. open FILE, $file or die "unable to open $file: $!\n"; my ($contents) = join "", <FILE>; close FILE; my (@curver) = getvers $contents; #print "Contents: $contents\n"; #print "curver", @curver, "\n"; # Determine the new version number. my @newver; #new version if ($set) { if ($set =~ /(\d+)\.(\d+)\.(\d+)(-([\da-zA-Z]\w*))?/) { @newver = ($1, $2, $3, $5); } elsif ($set =~ /(\d+)\D+(\d+)\D+(\d+)(\s*\(([a-zA-Z]\w*)\))?\D*$/) { @newver = ($1, $2, $3, $5); } elsif ($set =~ /(\d+)\D+(\d+)\D*$/) { @newver = ($1, $2, 0, ""); } elsif ($set =~ /(\d+)\D*$/) { @newver = ($1, 0, 0, ""); } else { die "illegal version number specified: $set\n"; } } elsif ($inc) { $inc = $curver[3] eq "" ? 'release' : 'annot' if $inc eq 'last'; if ($inc eq "major") { $newver[0] = $curver[0]+1; @newver[1,2,3] = (0,0,""); } elsif ($inc eq "minor") { $newver[0] = $curver[0]; $newver[1] = $curver[1]+1; @newver[2,3] = (0,""); } elsif ($inc eq "release") { @newver[0,1] = @curver[0,1]; $newver[2] = $curver[2]+1; $newver[3] = ""; } elsif ($inc eq "annot") { @newver[0,1,2] = @curver[0,1,2]; $newver[3] = $curver[3]; $newver[3] =~ s/(\d+)\D*$/$1+1/e or die "Annotation \"".$newver[3]."\" cannot be incremented.\n"; } else { die "unknown increment field: $inc\n"; } } else { # Nothing to do but print result $README = ""; $RELEASE = ""; $CONFIGURE = ""; $HDF4CONFIGCMAKE = ""; $H4_JAVA = ""; $H4_TESTJAVA = ""; @newver = @curver; } # Note if the version increased or decreased my $version_increased=""; # Print a warning if the version got smaller (don't check annot field) if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] < $curver[0]*1000000 + $curver[1]*1000 + $curver[2]) { printf STDERR "Warning: version decreased from %d.%d.%d to %d.%d.%d\n", @curver[0,1,2], @newver[0,1,2]; } if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] > $curver[0]*1000000 + $curver[1]*1000 + $curver[2]) { $version_increased="true"; } # Update the version number if it changed. if ($newver[0]!=$curver[0] || $newver[1]!=$curver[1] || $newver[2]!=$curver[2] || $newver[3]ne$curver[3]) { setvers $contents, @newver or die "unable to set version\n"; rename $file, "$file~" or die "unable to save backup file\n"; open FILE, ">$file" or die "unable to open $file but backup saved!\n"; print FILE $contents; close FILE; } # Update the libtool shared library version in src/Makefile.am if # the version number has increased. #if ($LT_VERS && $version_increased) { # open FILE, $LT_VERS or die "$LT_VERS: $!\n"; # my ($contentsy) = join "", <FILE>; # close FILE; # local($_) = $contentsy; # my ($lt_revision) = /^LT_VERS_REVISION\s*=\s*(\d+)/m; # my $new_lt_revision = $lt_revision+1; # ($contentsy) =~ s/^(LT_VERS_REVISION\s*=\s*)\d+/$1$new_lt_revision/m; # open FILE, ">$LT_VERS" or die "$LT_VERS: $!\n"; # print FILE $contentsy; # close FILE; #} # Update the README file if ($README) { open FILE, $README or die "$README: $!\n"; my @contents = <FILE>; close FILE; $contents[0] = sprintf("HDF version %d.%d.%d%s %s", @newver[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3], "currently under development\n"); open FILE, ">$README" or die "$README: $!\n"; print FILE @contents; close FILE; } # Update the release_notes/RELEASE.txt file if ($RELEASE) { open FILE, $RELEASE or die "$RELEASE: $!\n"; my @contents = <FILE>; close FILE; $contents[0] = sprintf("HDF version %d.%d.%d%s %s", @newver[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3], "currently under development\n"); open FILE, ">$RELEASE" or die "$RELEASE: $!\n"; print FILE @contents; close FILE; } # Update the config/cmake/scripts/HDF4config.cmake file if ($HDF4CONFIGCMAKE) { my $data = read_file($HDF4CONFIGCMAKE); # my $sub_rel_ver_str = ""; my $sub_rel_ver_str = ( $newver[3] eq "" ? sprintf("\"%s\"", "") : sprintf("\"%s\"", "-".$newver[3]) ); my $version_string = sprintf("\"%d.%d.%d\"", @newver[0,1,2]); $data =~ s/set \(CTEST_SOURCE_VERSION .*\)/set \(CTEST_SOURCE_VERSION $version_string\)/; $data =~ s/set \(CTEST_SOURCE_VERSEXT .*\)/set \(CTEST_SOURCE_VERSEXT $sub_rel_ver_str\)/; write_file($HDF4CONFIGCMAKE, $data); } # Update the java/src/hdf/hdflib/HDFLibrary.java file if ($H4_JAVA) { my $data = read_file($H4_JAVA); my $version_string = sprintf("%d.%d.%d", @newver[0,1,2]); $data =~ s/ private final static String JHI_VERSION = "\d*.\d*.\d*";/ private final static String JHI_VERSION = "$version_string";/; write_file($H4_JAVA, $data); } # Update the java/test/TestH4.java file if ($H4_TESTJAVA) { my $data = read_file($H4_TESTJAVA); my $version_string = sprintf("%d, %d, %d", @newver[0,1,2]); $data =~ s/ int LIB_VERSION\[\] = \{.*\};/ int LIB_VERSION\[\] = \{$version_string\};/; write_file($H4_TESTJAVA, $data); } # Update the man/hdf.1 file # There are currently 2 occurrences of the version string in the man/hdf.1 file. # Since they aren't the top line of the file we search rewrite the file line by # line, searching for the current major.minor.release version string, and replacing # it with the new one. In case someone changes the version string manually or it # otherwise gets out of sync, or another match is found that should not be updated, # we will track the changes in this file, issue an error message and exit at if # the number of changes is different than the 2 expected. # helper function to read the file for updating # config/cmake/scripts/HDF4Config.cmake and # java/src/hdf/hdflib/HDFLibrary.java files. # The version string in those files is not at the top, so the string replacement # is not for the first line, and reading/writing the entire file as one string # facilitates the substring replacement. sub read_file { my ($filename) = @_; open my $in, $filename or die "Could not open '$filename' for reading $!"; local $/ = undef; my $all = <$in>; close $in; return $all; } # helper function to write the file for updating # config/cmake/scripts/HDF4config.cmake and # java/src/hdf/hdflib/HDFLibrary.java files. sub write_file { my ($filename, $content) = @_; open my $out, ">$filename" or die "Could not open '$filename' for writing $!";; print $out $content; close $out; return; } sub gen_configure { my ($name, $conf) = @_; open FILE, $conf or die "$conf: $!\n"; my @contents = <FILE>; close FILE; for (my $i = 0; $i < $#contents; ++$i) { if ($contents[$i] =~ /^AC_INIT/) { $contents[$i] = sprintf("AC_INIT([$name], [%d.%d.%d%s], [help\@hdfgroup.org])\n", @newver[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3]); last; } } open FILE, ">$conf" or die "$conf: $!\n"; print FILE @contents; close FILE; $conf =~ /^(.*?)\/?configure.ac$/; if ($1) { $rc = system("cd $1 && ./autogen.sh >/dev/null 2>/dev/null && rm -rf autom4te.cache"); } else { $rc = system("./autogen.sh >/dev/null 2>/dev/null && rm -rf autom4te.cache"); } if ($rc) { printf("./autogen.sh failed with exit code %d. Aborted.\n", $rc); exit 1; } } # Update the configure.ac files and regenerate them gen_configure("HDF", $CONFIGURE) if $CONFIGURE; sub gen_h4pubconf { my ($name, $pubconf, @vers) = @_; my $namelc = lc($name); my $nameuc = uc($name); open FILE, $pubconf or die "$pubconf: $!\n"; my @contents = <FILE>; close FILE; for (my $i = 0; $i < $#contents; ++$i) { if ($contents[$i] =~ /\#\s*define\s+H4_PACKAGE\s+/) { $contents[$i] = "\#define H4_PACKAGE \"$namelc\"\n"; } elsif ($contents[$i] =~ /\#\s*define\s+H4_PACKAGE_NAME\s+/) { $contents[$i] = "\#define H4_PACKAGE_NAME \"$nameuc\"\n"; } elsif ($contents[$i] =~ /\#\s*define\s+H4_PACKAGE_STRING\s+/) { $contents[$i] = sprintf("\#define H4_PACKAGE_STRING \"$nameuc %d.%d.%d%s\"\n", @vers[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3]); } elsif ($contents[$i] =~ /\#\s*define\s+H4_PACKAGE_TARNAME\s+/) { $contents[$i] = "\#define H4_PACKAGE_TARNAME \"$namelc\"\n"; } elsif ($contents[$i] =~ /\#\s*define\s+H4_PACKAGE_VERSION\s+/) { $contents[$i] = sprintf("\#define H4_PACKAGE_VERSION \"%d.%d.%d%s\"\n", @vers[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3]); } elsif ($contents[$i] =~ /\#\s*define\s+H4_VERSION\s+/) { $contents[$i] = sprintf("\#define H4_VERSION \"%d.%d.%d%s\"\n", @vers[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3]); } } open FILE, ">$pubconf" or die "$pubconf: $!\n"; print FILE @contents; close FILE; } # Print the new version number if ($verbose) { #printf("Version %d.%d Release %d%s\n", @newver[0,1,2], # $newver[3] eq "" ? "" : " (".$newver[3].")"); printf("%s\n", $newver[4]); } else { printf("%d.%d.%d%s\n", @newver[0,1,2], $newver[3] eq "" ? "" : "-".$newver[3]); } exit 0; # Because the first line of this file looks like a Bourne shell script, we # must tell XEmacs explicitly that this is really a perl script. # # Local Variables: # mode:perl # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/install-sh������������������������������������������������������������������������0000775�0000000�0000000�00000035776�15030617045�0015625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # 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_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly 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 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. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -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 By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " 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 *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi 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 if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi 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=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi 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. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # 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 # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # 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 oIFS=$IFS IFS=/ set -f set fnord $dstdir shift 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=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_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 && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $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` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # 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 "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��hdf4-hdf4.3.1/bin/ltmain.sh�������������������������������������������������������������������������0000664�0000000�0000000�00001051522�15030617045�0015425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 <bug-libtool@gnu.org>. # GNU libtool home page: <http://www.gnu.org/software/libtool/>. # General help using GNU software: <http://www.gnu.org/gethelp/>. 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 <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "${write_libobj}" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name 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. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $opt_debug func_convert_core_file_wine_to_w32_result="$1" if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/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 <import library>. $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 >/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 <<EOF /* $cwrappersource - temporary wrapper executable 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 executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> /* 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 <<EOF volatile const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test "$fast_install" = yes; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; intptr_t rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (strcmp (argv[i], dumpscript_opt) == 0) { EOF case "$host" in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (strcmp (argv[i], debug_opt) == 0) { lt_debug = 1; continue; } if (strcmp (argv[i], ltwrapper_option_prefix) == 0) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 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 <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." 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 I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) func_append newdeplibs " $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." 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 a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) func_append newdeplibs " $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_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\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test "$want_nocaseglob" = yes; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/missing���������������������������������������������������������������������������0000775�0000000�0000000�00000015336�15030617045�0015206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2020 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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 <https://www.gnu.org/licenses/>. # 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." 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 # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/newer�����������������������������������������������������������������������������0000775�0000000�0000000�00000002004�15030617045�0014641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # Compare the modification time of file argument 1 against other file arguments. # Return true (0) if argument 1 is newer than all others, otherwise return # false (1). If any of the argument is not a file, return false (1). # if test $# -lt 2; then exit 1 fi if test ! -f $1; then exit 1 fi f1=$1 shift for f in $*; do if test ! -f $f; then exit 1 fi if test X = X`find $f1 -newer $f -print`; then exit 1 fi done # passed all tests. Must be a file newer than all others. exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/release���������������������������������������������������������������������������0000775�0000000�0000000�00000043755�15030617045�0015163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # Make a release of hdf4. # Function definitions # # Print Usage page USAGE() { cat << EOF Usage: $0 -d <dir> [-h] [--private] [--revision [--branch BRANCHNAME]] <methods> ... -d DIR The name of the directory where the release(s) should be placed. --branch BRANCHNAME This is to get the correct version of the branch name from the repository. BRANCHNAME for v4.2.16 should be hdf4_2_16. -h print the help page. --private Make a private release with today's date in version information. --revision Make a private release with the code revision number in version information. This must be run at the top level of the source directory. The other command-line options are the names of the programs to use for compressing the resulting tar archive (if none are given then "tar" is assumed): tar -- use tar and don't do any compressing. gzip -- use gzip with "-9" and append ".gz" to the output name. bzip2 -- use bzip2 with "-9" and append ".bz2" to the output name. zip -- convert all text files to DOS style and form a zip file for Windows use. cmake-tgz -- create a tar file using the gzip default level with a build-unix.sh command file and all other CMake files needed to build HDF4 source using CMake on unix machines. cmake-zip -- convert all text files to DOS style and create a zip file including cmake scripts and .bat files to build HDF4 source using CMake on Windows. A sha256 checksum is produced for each archive created and stored in the sha256 file. Examples: $ bin/release -d /tmp /tmp/hdf-4.2.15-RELEASE.txt /tmp/hdf-4.2.15.sha256 /tmp/hdf-4.2.15.tar $ bin/release -d /tmp gzip /tmp/hdf-4.2.15-RELEASE.txt /tmp/hdf-4.2.15.sha256 /tmp/hdf-4.2.15.tar.gz $ bin/release -d /tmp tar gzip zip /tmp/hdf-4.2.15-RELEASE.txt /tmp/hdf-4.2.15.sha256 /tmp/hdf-4.2.15.tar /tmp/hdf-4.2.15.tar.gz /tmp/hdf-4.2.15.zip EOF } # Function name: tar2zip # Convert the release tarball to a Windows zipball. # # Steps: # 1. untar the tarball in a temporary directory; # Note: do this in a temporary directory to avoid changing # the original source directory which may be around. # 2. convert all its text files to DOS (LF-CR) style; # 3. form a zip file which is usable by Windows users. # # Parameters: # $1 version # $2 release tarball # $3 output zipball file name # # Returns 0 if successful; 1 otherwise # tar2zip() { if [ $# -ne 3 ]; then echo "usage: tar2zip <tarfilename> <zipfilename>" return 1 fi ztmpdir=/tmp/ztmpdir$$ mkdir -p $ztmpdir version=$1 tarfile=$2 zipfile=$3 # step 1: untar tarball in ztmpdir (cd $ztmpdir; tar xf -) < $tarfile # sanity check if [ ! -d $ztmpdir/$version ]; then echo "untar did not create $ztmpdir/$version source dir" # cleanup rm -rf $ztmpdir return 1 fi # step 2: convert text files # There maybe a simpler way to do this. # options used in unix2dos: # -k Keep the date stamp # -q quiet mode # grep redirect output to /dev/null because -q or -s are not portable. find $ztmpdir/$version | \ while read inf; do \ if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \ unix2dos -q -k $inf; \ fi\ done # step 3: make zipball # -9 maximum compression # -y Store symbolic links as such in the zip archive # -r recursive # -q quiet (cd $ztmpdir; zip -9 -y -r -q $version.zip $version) mv $ztmpdir/$version.zip $zipfile # cleanup rm -rf $ztmpdir } # Function name: tar2cmakezip # Convert the release tarball to a Windows zipball with files to run CMake build. # # Steps: # 1. untar the tarball in a temporary directory; # Note: do this in a temporary directory to avoid changing # the original source directory which may be around. # 2. add build-unix.sh script. # 3. add LIBAEC.tar.gz, ZLib.tar.gz and cmake files to top level directory. # 4. create gzipped tar file with these contents: # build-unix.sh script # hdf4-<version> source code directory extracted from tar file # CTestScript.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # HDF4config.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # HDF4options.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # LIBAEC.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # ZLib.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # JPEG9e.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # Parameters: # $1 version # $2 release tarball # $3 output zipball file name # # Returns 0 if successful; 1 otherwise # # need function to create another temporary directory, extract the # $tmpdir/$HDF4_VERS.tar into it, create build-VS*.bat files, # add CTestScript.cmake, HDF4config.cmake, LIBAEC.tar.gz, ZLib.tar.gz, # and JPEG9e.tar.gz, HDF4 examples and then zip it. tar2cmakezip() { if [ $# -ne 3 ]; then echo "usage: tar2cmakezip <tarfilename> <zipfilename>" return 1 fi cmziptmpdir=/tmp/cmziptmpdir$$ cmziptmpsubdir=$cmziptmpdir/CMake-$HDF4_VERS mkdir -p $cmziptmpsubdir version=$1 tarfile=$2 zipfile=$3 # step 1: untar tarball in cmgztmpdir (cd $cmziptmpsubdir; tar xf -) < $tarfile # sanity check if [ ! -d $cmziptmpsubdir/$version ]; then echo "untar did not create $cmziptmpsubdir/$version source dir" # cleanup rm -rf $cmziptmpdir return 1 fi # step 2: add batch file for building CMake on Windows (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2015 -C Release -V -O hdf4.log" > build-VS2015-32.bat; chmod 755 build-VS2015-32.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201564 -C Release -V -O hdf4.log" > build-VS2015-64.bat; chmod 755 build-VS2015-32.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2017 -C Release -V -O hdf4.log" > build-VS2017-32.bat; chmod 755 build-VS2017-32.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201764 -C Release -V -O hdf4.log" > build-VS2017-64.bat; chmod 755 build-VS2017-64.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2019 -C Release -V -O hdf4.log" > build-VS2019-32.bat; chmod 755 build-VS2019-32.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201964 -C Release -V -O hdf4.log" > build-VS2019-64.bat; chmod 755 build-VS2019-64.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2022 -C Release -V -O hdf4.log" > build-VS2022-32.bat; chmod 755 build-VS2022-32.bat) (cd $cmziptmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=VS202264 -C Release -V -O hdf4.log" > build-VS2022-64.bat; chmod 755 build-VS2022-32.bat) # step 3: add LIBAEC.tar.gz, ZLib.tar.gz and cmake files cp /mnt/scr1/pre-release/hdf4/CMake/LIBAEC.tar.gz $cmziptmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/ZLib.tar.gz $cmziptmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/JPEG9e.tar.gz $cmziptmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/HDF4Examples-0.3.10-Source.zip $cmziptmpsubdir cp $cmziptmpsubdir/$version/config/cmake/scripts/CTestScript.cmake $cmziptmpsubdir cp $cmziptmpsubdir/$version/config/cmake/scripts/HDF4config.cmake $cmziptmpsubdir cp $cmziptmpsubdir/$version/config/cmake/scripts/HDF4options.cmake $cmziptmpsubdir # step 4: convert text files # There maybe a simpler way to do this. # options used in unix2dos: # -k Keep the date stamp # -q quiet mode # grep redirect output to /dev/null because -q or -s are not portable. find $cmziptmpsubdir/$version | \ while read inf; do \ if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \ unix2dos -q -k $inf; \ fi\ done # step 3: make zipball # -9 maximum compression # -y Store symbolic links as such in the zip archive # -r recursive # -q quiet (cd $cmziptmpdir; zip -9 -y -r -q CMake-$version.zip *) mv $cmziptmpdir/CMake-$version.zip $zipfile # cleanup rm -rf $cmziptmpdir } # Function name: tar2cmaketgz # Convert the release tarball to a gzipped tar file with files to run CMake build. # # # Steps: # 1. untar the tarball in a temporary directory; # Note: do this in a temporary directory to avoid changing # the original source directory which may be around. # 2. add build-unix.sh script. # 3. add LIBAEC.tar.gz, ZLib.tar.gz and cmake files to top level directory. # 4. create gzipped tar file with these contents: # build-unix.sh script # hdf4-<version> source code directory extracted from tar file # CTestScript.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # HDF4config.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # HDF4options.cmake cmake file copied from <hdf4 source code>/config/cmake/scripts # LIBAEC.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # ZLib.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # JPEG8d.tar.gz copied from /mnt/scr1/pre-release/hdf4/CMake # Parameters: # $1 version # $2 release tarball # $3 output zipball file name # # Returns 0 if successful; 1 otherwise # # need function to create another temporary directory, extract the # $tmpdir/$HDF4_VERS.tar into it, create build-unix.sh, # add CTestScript.cmake, HDF4config.cmake, LIBAEC.tar.gz # ZLib.tar.gz, JPEG9e.tar.gz, HDF4 examples and then tar.gz it. tar2cmaketgz() { if [ $# -ne 3 ]; then echo "usage: tar2cmaketgz <tarfilename> <tgzfilename>" return 1 fi cmgztmpdir=/tmp/cmgztmpdir$$ cmgztmpsubdir=$cmgztmpdir/CMake-$HDF4_VERS mkdir -p $cmgztmpsubdir version=$1 tarfile=$2 tgzfile=$3 # step 1: untar tarball in cmgztmpdir (cd $cmgztmpsubdir; tar xf -) < $tarfile # sanity check if [ ! -d $cmgztmpsubdir/$version ]; then echo "untar did not create $cmgztmpsubdir/$version source dir" # cleanup rm -rf $cmgztmpdir return 1 fi # step 2: add build-unix.sh script (cd $cmgztmpsubdir; echo "ctest -S HDF4config.cmake,BUILD_GENERATOR=Unix -C Release -V -O hdf4.log" > build-unix.sh; chmod 755 build-unix.sh) # step 3: add LIBAEC.tar.gz, ZLib.tar.gz and cmake files cp /mnt/scr1/pre-release/hdf4/CMake/LIBAEC.tar.gz $cmgztmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/ZLib.tar.gz $cmgztmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/JPEG9e.tar.gz $cmgztmpsubdir cp /mnt/scr1/pre-release/hdf4/CMake/HDF4Examples-0.3.10-Source.tar.gz $cmgztmpsubdir cp $cmgztmpsubdir/$version/config/cmake/scripts/CTestScript.cmake $cmgztmpsubdir cp $cmgztmpsubdir/$version/config/cmake/scripts/HDF4config.cmake $cmgztmpsubdir cp $cmgztmpsubdir/$version/config/cmake/scripts/HDF4options.cmake $cmgztmpsubdir tar czf $DEST/CMake-$HDF4_VERS.tar.gz -C $cmgztmpdir . || exit 1 # cleanup rm -rf $cmgztmpdir } # This command must be run at the top level of the hdf4 source directory. # Verify this requirement. if [ ! \( -f configure.ac -a -f bin/release \) ]; then echo "$0 must be run at the top level of the hdf4 source directory" exit 1 fi # Defaults DEST=releases VERS=`perl bin/h4vers` VERS_OLD= test "$VERS" || exit 1 verbose=yes check=yes release_date=`date +%F` today=`date +%Y%m%d` pmode='no' revmode='no' tmpdir="../#release_tmp.$$" # tmp work directory MAINT_MODE_ENABLED="" # If maintainer mode is enabled in configure, it should be disabled for release, # and enabled again after release files have been created. If already disabled # there's no need to do either. MAINT_MODE_ENABLED=`grep ^AM_MAINTAINER_MODE ./configure.ac | grep enable` if [ "${MAINT_MODE_ENABLED}" != "" ]; then bin/switch_maint_mode -disable ./configure.ac fi # Restore previous Version information RESTORE_VERSION() { if [ X-${VERS_OLD} != X- ]; then echo restoring version information back to $VERS_OLD bin/h4vers -s $VERS_OLD VERS_OLD= fi } # Command-line arguments while [ -n "$1" ]; do arg=$1 shift case "$arg" in -d) DEST=$1 shift ;; -h) USAGE exit 0 ;; --private) pmode=yes ;; --revision) revmode=yes ;; --branch) BRANCHNAME=$1 shift ;; -*) echo "Unknown switch: $arg" 1>&2 USAGE exit 1 ;; *) methods="$methods $arg" ;; esac done # Default method is tar if [ "X$methods" = "X" ]; then methods="tar" fi # Create the temporary work directory. if mkdir $tmpdir; then echo "temporary work directory for release. "\ "Can be deleted after release completes." > $tmpdir/README else echo "Failed to mkdir tmpdir($tmpdir)" exit 1 fi # setup restoration in case of abort. trap RESTORE_VERSION 0 if [ X$pmode = Xyes ]; then VERS_OLD=$VERS # Set version information to m.n.r-of$today. # (h4vers does not correctly handle just m.n.r-$today.) VERS=`echo $VERS | sed -e s/-.*//`-of$today echo Private release of $VERS bin/h4vers -s $VERS fi if [ X$revmode = Xyes ]; then VERS_OLD=$VERS echo "Save old version $VERS_OLD for restoration later." if [ "${BRANCHNAME}" = "" ]; then BRANCHNAME=`git symbolic-ref -q --short HEAD` fi revision=`git rev-parse --short HEAD` # Set version information to m.n.r-r$revision. # (h4vers does not correctly handle just m.n.r-$today.) VERS=`echo $VERS | sed -e s/-.*//`-$revision echo Private release of $VERS HDF4_VERS=hdf4-$BRANCHNAME-$revision echo file base of $HDF4_VERS bin/h4vers -s $VERS # use a generic directory name for revision releases HDF4_IN_VERS=hdfsrc else # Store hdf4-$VERS ("hdf-4.2.15", e.g.) to a variable to avoid typos HDF4_VERS=hdf-$VERS # directory name matches tar file name for non-revision releases HDF4_IN_VERS=$HDF4_VERS fi test "$verbose" && echo "Releasing $HDF4_VERS to $DEST" 1>&2 if [ ! -d $DEST ]; then echo " Destination directory $DEST does not exist" 1>&2 exit 1 fi # Create a symlink to the source so files in the tarball have the prefix # we want (gnu's --transform isn't portable) ln -s `pwd` $tmpdir/$HDF4_IN_VERS || exit 1 # Save a backup copy of Makefile if exists. test -f Makefile && mv Makefile $tmpdir/Makefile.x cp -p Makefile.dist Makefile # Update README.md and release_notes/RELEASE.txt with release information in # line 1. for f in README.md release_notes/RELEASE.txt; do echo "HDF version $VERS released on $release_date" >$f.x sed -e 1d $f >>$f.x mv $f.x $f # Make sure new files are of the right access mode chmod 644 $f done # Create the tar file test "$verbose" && echo " Running tar..." 1>&2 (cd "$tmpdir" && exec tar -ch --exclude-vcs --exclude=.clang-format --exclude=.git* -f "$HDF4_VERS.tar" "./$HDF4_IN_VERS" || exit 1 ) # Compress SHA256=$HDF4_VERS.sha256 cp /dev/null $DEST/$SHA256 for comp in $methods; do case $comp in tar) cp -p $tmpdir/$HDF4_VERS.tar $DEST/$HDF4_VERS.tar (cd $DEST; sha256sum $HDF4_VERS.tar >> $SHA256) ;; gzip) test "$verbose" && echo " Running gzip..." 1>&2 gzip -9 <$tmpdir/$HDF4_VERS.tar >$DEST/$HDF4_VERS.tar.gz (cd $DEST; sha256sum $HDF4_VERS.tar.gz >> $SHA256) ;; cmake-tgz) test "$verbose" && echo " Creating CMake tar.gz file..." 1>&2 tar2cmaketgz $HDF4_IN_VERS $tmpdir/$HDF4_VERS.tar $DEST/CMake-$HDF4_VERS.tar.gz 1>&2 (cd $DEST; sha256sum CMake-$HDF4_VERS.tar.gz >> $SHA256) ;; bzip2) test "$verbose" && echo " Running bzip2..." 1>&2 bzip2 -9 <$tmpdir/$HDF4_VERS.tar >$DEST/$HDF4_VERS.tar.bz2 (cd $DEST; sha256sum $HDF4_VERS.tar.bz2 >> $SHA256) ;; zip) test "$verbose" && echo " Creating zip ball..." 1>&2 tar2zip $HDF4_IN_VERS $tmpdir/$HDF4_VERS.tar $DEST/$HDF4_VERS.zip 1>&2 (cd $DEST; sha256sum $HDF4_VERS.zip >> $SHA256) ;; cmake-zip) test "$verbose" && echo " Creating CMake-zip ball..." 1>&2 tar2cmakezip $HDF4_IN_VERS $tmpdir/$HDF4_VERS.tar $DEST/CMake-$HDF4_VERS.zip 1>&2 (cd $DEST; sha256sum CMake-$HDF4_VERS.zip >> $SHA256) ;; *) echo "***Error*** Unknown method $comp" exit 1 ;; esac done # If AM_MAINTAINER_MODE was enabled before running this script # restore it to "enabled". if [ "${MAINT_MODE_ENABLED}" != "" ]; then bin/switch_maint_mode -enable ./configure.ac fi # Copy the RELEASE.txt to the release area. cp release_notes/RELEASE.txt $DEST/$HDF4_VERS-RELEASE.txt # Remove distributed Makefile and restore previous Makefile if existed. rm -f Makefile test -f $tmpdir/Makefile.x && mv $tmpdir/Makefile.x Makefile # Restore OLD version information, then no need for trap. if [ X$pmode = Xyes ] || [ X$revmode = Xyes ]; then echo "Restore the original version $VERS_OLD" RESTORE_VERSION trap 0 fi # Remove temporary things rm -rf $tmpdir echo "DONE" exit 0 �������������������hdf4-hdf4.3.1/bin/restore.sh������������������������������������������������������������������������0000775�0000000�0000000�00000002733�15030617045�0015626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # A script to clean up the action of autogen.sh # # If this script fails to clean up generated files on a particular # platform, please contact help@hdfgroup.org or comment on the forum. echo echo "*******************************" echo "* HDF4 autogen.sh undo script *" echo "*******************************" echo echo "Remove autom4te.cache directory" rm -rf autom4te.cache echo "Remove configure script" rm -f configure echo "Remove Makefile.in files" find . -type f -name 'Makefile.in' -exec rm {} \; echo "Remove files generated by libtoolize" rm -f bin/ltmain.sh rm -f m4/libtool.m4 rm -f m4/ltoptions.m4 rm -f m4/ltsugar.m4 rm -f m4/ltversion.m4 rm -f m4/lt~obsolete.m4 echo "Remove files generated by automake" rm -f bin/compile rm -f bin/config.guess rm -f bin/config.sub rm -f bin/install-sh rm -f bin/missing rm -f bin/test-driver rm -f bin/depcomp echo "Remove files generated by autoheader" rm -f src/H4config.h.in echo "Remove remaining generated files" rm -f aclocal.m4 �������������������������������������hdf4-hdf4.3.1/bin/switch_maint_mode�����������������������������������������������������������������0000775�0000000�0000000�00000003547�15030617045�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # USAGE() { cat <<EOF switch_maint_mode reverses the status of AM_MAINTAINER_MODE in configure.ac from enable to disable or vice-versa. When enabled, this feature forces the autotools to run when the input files are older than the output files. This is the default for development branches. When disabled, the autotools will NOT be re-run regardless of their timestamps or any modifications. This is the default for tarballs and release branches since it avoids having end-users requiring the autotools. Command Syntax ============== switch_maint_mode [-help] [-enable|disable] <path-to-configure.ac> EOF } MODE="notset" CONFIG_AC_PATH= # Display help/usage if any options were passed in while [ $# -gt 0 ]; do case "$1" in -enable) MODE="enable" ;; -disable) MODE="disable" ;; -help) USAGE exit 0 ;; *) CONFIG_AC_PATH="$1" ;; esac shift done # Did we get a file path? if test -z $CONFIG_AC_PATH ; then USAGE exit 1 fi # Did we get a mode? if test -z $MODE ; then USAGE exit 1 fi # Run perl over configure.ac if test "X-$MODE" = "X-enable" ; then perl -pi -e 's/^(AM_MAINTAINER_MODE\(\[)([a-z]+)(\]\))/$1enable$3/g' $CONFIG_AC_PATH fi if test "X-$MODE" = "X-disable" ; then perl -pi -e 's/^(AM_MAINTAINER_MODE\(\[)([a-z]+)(\]\))/$1disable$3/g' $CONFIG_AC_PATH fi ���������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/test-driver�����������������������������������������������������������������������0000775�0000000�0000000�00000011042�15030617045�0015773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2020 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 <https://www.gnu.org/licenses/>. # 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. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <<END Usage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory. END } test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. expect_failure=no color_tests=no enable_hard_errors=yes while test $# -gt 0; do case $1 in --help) print_usage; exit $?;; --version) echo "test-driver $scriptversion"; exit $?;; --test-name) test_name=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --color-tests) color_tests=$2; shift;; --expect-failure) expect_failure=$2; shift;; --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; *) break;; esac shift done missing_opts= test x"$test_name" = x && missing_opts="$missing_opts --test-name" test x"$log_file" = x && missing_opts="$missing_opts --log-file" test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" if test x"$missing_opts" != x; then usage_error "the following mandatory options are missing:$missing_opts" fi if test $# -eq 0; then usage_error "missing argument" fi if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. grn='' # Green. lgn='' # Light green. blu='' # Blue. mgn='' # Magenta. std='' # No color. else red= grn= lgn= blu= mgn= std= fi do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' trap "st=129; $do_exit" 1 trap "st=130; $do_exit" 2 trap "st=141; $do_exit" 13 trap "st=143; $do_exit" 15 # Test script is run here. "$@" >$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/bin/warnhist��������������������������������������������������������������������������0000775�0000000�0000000�00000043423�15030617045�0015372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env perl require 5.003; use warnings; # # Copyright by The HDF Group. # All rights reserved. # # This file is part of HDF4. The full HDF4 copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # # Purpose: Given an input file containing the output from a build of the # library, gather the file names and line numbers, alias # identical types of warnings together into a single bin and # report the number of warnings for each type of warning, each file # and the total count of warnings # Perl modules/settings use strict; use Getopt::Std; # Global variables, for accumulating information my $totalcount = 0; my $notecount = 0; my $dupcount = 0; my %warn_count = (); my $warncount; my %warn_file = (); my %warn_file_line = (); my %warn_file_line_offset = (); my %file_count = (); my $filecount; my $ignorecount = 0; my @ignorenames; my %ignored_files = (); my %warn_file_indices = (); my %file_warn_indices = (); my @warn_match_strings; my @file_match_strings; my %file_warn = (); my %file_warn_line = (); my $current_warning = 0; my $current_file = 0; my $warn_index; my $genericize = 1; # Info about last name / line / offset for file my $last_c_name; my $last_fort_name; my $last_fort_line; my $last_fort_offset; # Display usage sub do_help { print "Usage: 'warnhist [-h, --help] [-t <prefix>] [-w <n>] [-W] [-f <n>] [-F] [-s <warning string list>] [-S <file string list] [-l] [-u] [-i <name list>] [file]'\n"; print "\t-h, --help\tDisplay this usage\n"; print "\t-t <prefix>\tTrim pathname prefix from filenames, <prefix>\n"; print "\t-w <n>\tDisplay files for a given warning index list, <n>\n"; print "\t\t<n> can be a single value, a range, or a comma separated list\n"; print "\t\tFor example: '0' or '0,4' or '8-10' or '0,2-4,8-10,13'\n"; print "\t-W\tDisplay files for all warnings\n"; print "\t-f <n>\tDisplay warnings for a given file index list, <n>\n"; print "\t\t<n> can be a single value, a range, or a comma separated list\n"; print "\t\tFor example: '0' or '0,4' or '8-10' or '0,2-4,8-10,13'\n"; print "\t-F\tDisplay warnings for all files\n"; print "\t-s <warning string list>\tDisplay files for warnings which contain a string, <warning string list>\n"; print "\t\t<warning string list> is a comma separated list, with no spaces\n"; print "\t\tFor example: 'Wunused-dummy-argument' or 'Wunused-dummy-argument,Wunused-variable'\n"; print "\t-S <file string list>\tDisplay warnings for files which contain a string, <file string list>\n"; print "\t\t<file string list> is a comma separated list, with no spaces\n"; print "\t\tFor example: 'H5Fint' or 'H5Fint,H5Gnode'\n"; print "\t-l\tDisplay line numbers for file/warning\n"; print "\t-u\tLeave 'unique' types in warnings, instead of genericizing them\n"; print "\t-i <name list>\tIgnore named files, <name list>\n"; print "\t\t<name list> is a comma separated list, with no spaces\n"; print "\t\tFor example: 'H5LTparse' or 'H5LTparse,H5LTanalyze'\n"; print "\tfile\tFilename containing build output\n"; print "\t\tIf no file is given, standard input is used.\n"; exit; } sub main::HELP_MESSAGE { do_help(); } # declare the Perl command line flags/options we want to allow my %options=(); getopts("FWhut:w:f:s:S:i:l", \%options); # Display usage, if requested if($options{h}) { do_help(); } # Parse list of file names to ignore if(exists $options{i}) { @ignorenames = split /,/, $options{i}; #print STDERR @ignorenames; } # Parse list of warning indices to expand file names if(exists $options{w}) { my @tmp_indices; @tmp_indices = split /,/, $options{w}; #print STDERR @tmp_indices; for my $x (@tmp_indices) { #print STDERR "x = '$x'\n"; if($x =~ /\-/) { my $start_index; my $end_index; #print STDERR "matched = '$x'\n"; ($start_index, $end_index) = split /\-/, $x; #print STDERR "start_index = '$start_index', end_index = '$end_index'\n"; for my $y ($start_index..$end_index) { #print STDERR "y = '$y'\n"; if(!exists $warn_file_indices{$y}) { $warn_file_indices{$y} = $y; } } } else { if(!exists $warn_file_indices{$x}) { $warn_file_indices{$x} = $x; } } } #foreach (sort keys %warn_file_indices) { # print STDERR "$_ : $warn_file_indices{$_}\n"; #} } # Parse list of warning strings to expand file names if(exists $options{s}) { @warn_match_strings = split /,/, $options{s}; # print STDERR @warn_match_strings; } # Parse list of file indices to expand warnings if(exists $options{f}) { my @tmp_indices; @tmp_indices = split /,/, $options{f}; #print STDERR @tmp_indices; for my $x (@tmp_indices) { #print STDERR "x = '$x'\n"; if($x =~ /\-/) { my $start_index; my $end_index; #print STDERR "matched = '$x'\n"; ($start_index, $end_index) = split /\-/, $x; #print STDERR "start_index = '$start_index', end_index = '$end_index'\n"; for my $y ($start_index..$end_index) { #print STDERR "y = '$y'\n"; if(!exists $file_warn_indices{$y}) { $file_warn_indices{$y} = $y; } } } else { if(!exists $file_warn_indices{$x}) { $file_warn_indices{$x} = $x; } } } #foreach (sort keys %warn_file_indices) { # print STDERR "$_ : $warn_file_indices{$_}\n"; #} } # Parse list of warning strings for files to expand warnings if(exists $options{S}) { @file_match_strings = split /,/, $options{S}; # print STDERR @file_match_strings; } # Check if warnings should stay unique and not be "genericized" if($options{u}) { $genericize = 0; } PARSE_LINES: while (<>) { my $name; my $line; my $prev_line; my $toss; my $offset; my $warning; my $extra; my $extra2; # Retain last FORTRAN compile line, which comes a few lines before warning if($_ =~ /.*\.[fF]90:.*/) { ($last_fort_name, $last_fort_line, $last_fort_offset) = split /\:/, $_; ($last_fort_line, $toss) = split /\./, $last_fort_line; } # Retain last C/C++ compile line, which possibly comes a few lines before warning if($_ =~ /.*[A-Za-z0-9_]\.[cC]:.*/) { ($last_c_name, $toss) = split /\:/, $_; } # Retain C/C++ compile line, which comes with the line of warning if($_ =~ /.*[A-Za-z0-9_]\.[chC]\(.*[0-9]\):.*#.*/) { $last_c_name = $_; } # Skip lines that don't have the word "warning" next if $_ !~ /[Ww]arning/; # Skip warnings from linker next if $_ =~ /ld: warning:/; # Skip warnings from build_py and install_lib next if $_ =~ /warning: (build_py|install_lib)/; # Skip variables with the word 'warning' in them next if $_ =~ /_warning_/; # Skip AMD Optimizing Compiler (aocc) lines "<#> warning(s) generated." next if $_ =~ / warnings? generated\./; # "Hide" the C++ '::' symbol until we've parsed out the parts of the line while($_ =~ /\:\:/) { $_ =~ s/\:\:/@@@@/g; } # Check for weird formatting of warning message $line = "??"; $offset = "??"; if($_ =~ /^cc1: warning:.*/) { $name = $last_c_name; ($toss, $toss, $warning, $extra, $extra2) = split /\:/, $_; # Check for CMAKE build with warning on first line and no filename } elsif($_ =~ /^\s*[Ww]arning:.*/) { $name = $last_c_name; ($toss, $warning, $extra, $extra2) = split /\:/, $_; # Check for file-scope gcc Fortran warning output } elsif($_ =~ /f\d\d\d: Warning:/) { # These are interspersed with the "compiling a file" output # when compiling with `make -j` and thus difficult to tie to # any particular file. They are due to things like inappropriate # build options and don't have a line number. # # They start with f, as in f951 $name = "(generic)"; $line = int(rand(1000000)); # Hack to avoid counting as duplictates ($warning) = $_ =~ /\[(.*)\]/x; # Check for FORTRAN warning output } elsif($_ =~ /^Warning:.*/) { $name = $last_fort_name; $line = $last_fort_line; $offset = $last_fort_offset; ($toss, $warning, $extra, $extra2) = split /\:/, $_; # Check for improperly parsed filename or line if($name =~ /^$/) { print "Filename is a null string! Input line #$. is: '$_'"; next } if($line =~ /^$/) { print "Line is a null string! Input line #$. is: '$_'"; next } # Check for non-GCC warning (Solaris/Oracle?) } elsif($_ =~ /^\".*, line [0-9]+: *[Ww]arning:.*/) { ($name, $toss, $warning, $extra, $extra2) = split /\:/, $_; ($name, $line) = split /\,/, $name; $name =~ s/^\"//g; $name =~ s/\"$//g; $line =~ s/^\s*line\s*//g; # Check for Intel icc warning } elsif($_ =~ /.*[A-Za-z0-9_]\.[chC]\(.*[0-9]\):.*#.*/) { ($last_c_name, $toss, $warning) = split /\:/, $last_c_name; ($name, $line) = split /\(/, $last_c_name; $line =~ s/\)//g; } else { # Check for 'character offset' field appended to file & line # # (This is probably specific to GCC) if($_ =~ /^.*[0-9]+\:[0-9]+\:/) { ($name, $line, $offset, $toss, $warning, $extra, $extra2) = split /\:/, $_; } else { ($name, $line, $toss, $warning, $extra, $extra2) = split /\:/, $_; } } # Check for extra ':' followed by more text in original warning string, # and append the ':' and text back onto the parsed warning # (Use 'length $extra' idiom to avoid warning when $extra is undefined) if(length $extra ) { $warning = join ':', $warning, $extra; } if(length $extra2 ) { $warning = join ':', $warning, $extra2; } # Restore the C++ '::' symbol now that we've parsed out the parts of the line while($warning =~ /@@@@/) { $warning =~ s/@@@@/\:\:/g; } # Trim leading '..' paths from filename while($name =~ /^\.\.\//) { $name =~ s/^\.\.\///g; } # Check for trimming prefix if((exists $options{t}) && ($name =~ /$options{t}/)) { $name =~ s/^$options{t}\///g; } # Check for ignored file if(exists $options{i}) { for my $x (@ignorenames) { if($name =~ /$x/) { $ignorecount++; if(!(exists $ignored_files{$name})) { $ignored_files{$name} = $name; } next PARSE_LINES; } } } # Check for improperly parsed warning (usually an undefined warning string) if(!defined $warning) { print "Warning Undefined! Input line is: '$_'"; next } # Get rid of leading & trailing whitespace $warning =~ s/^\s//g; $warning =~ s/\s$//g; # Check for improperly parsed warning if($warning =~ /^$/) { print "Warning is a null string! Input line is: '$_'"; next } # Convert all quotes to ' $warning =~ s/‘/'/g; $warning =~ s/’/'/g; $warning =~ s/"/'/g; # # These skipped messages & "genericizations" may be specific to GCC # Skip supplemental warning message if($warning =~ /near initialization for/) { $notecount++; next } # Skip C++ supplemental warning message if($warning =~ /in call to/) { $notecount++; next } # Skip GCC warning that should be a note if($_ =~ /\(this will be reported only once per input file\)/) { $notecount++; next } if($genericize) { # Eliminate C/C++ "{aka <some type>}" and "{aka '<some type>'}" info if($warning =~ /\s(\{|\()aka '?[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\ ]*'?(\}|\))/) { $warning =~ s/\s(\{|\()aka '?[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\ ]*'?(\}|\))//g; } # Genericize C/C++ '<some type>', printf format '%<some format>', and # "unknown warning group" into '-' if($warning =~ /'[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=\ ]*'/) { $warning =~ s/'[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=\ ]*'/'-'/g; } if($warning =~ /'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinosuxX]'/) { $warning =~ s/'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinosuxX]'/'-'/g; } # Genericize C/C++ "<macro>" warnings into "-" if($warning =~ /"[A-Za-z_0-9]*"/) { $warning =~ s/"[A-Za-z_0-9]*"/"-"/g; } # Genericize [GCC?] C/C++ warning text about suggested attribute if($warning =~ /attribute=[A-Za-z_0-9]*\]/) { $warning =~ s/=[A-Za-z_0-9]*\]/=-\]/g; } # Genericize FORTRAN "at (<n>)" into "at (-)", "REAL(<n>)" into "REAL(-)", # and "INTEGER(<n>)" into "INTEGER(-)" if($warning =~ /.*at\s\([0-9]+\).*/) { $warning =~ s/at\s\([0-9]+\)/at \(-\)/g; } if($warning =~ /.*REAL\([0-9]+\).*/) { $warning =~ s/REAL\([0-9]+\)/REAL\(-\)/g; } if($warning =~ /.*INTEGER\([0-9]+\).*/) { $warning =~ s/INTEGER\([0-9]+\)/INTEGER\(-\)/g; } # Genericize standalone numbers in warnings if($warning =~ /(\s|')-?[0-9]+(\s|')/) { $warning =~ s/-?[0-9]+/-/g; } # Genericize unusual GCC/G++/GFORTRAN warnings that aren't handled above if($warning =~ /\[deprecation\] [A-Za-z_0-9]*\([A-Za-z_,0-9]*\) in [A-Za-z_0-9]* has been deprecated.*/) { $warning =~ s/[A-Za-z_0-9]*\([A-Za-z_,0-9]*\) in [A-Za-z_0-9]*/-\(-\) in -/g; } } # <end possible GCC-specific code> # Check if we've already seen this warning on this line in this file # (Can happen for warnings from inside header files) if( !exists $warn_file_line_offset{$warning}{$name}{$line}{$offset} ) { # Increment count for [generic] warning $warn_count{$warning}++; $warn_file{$warning}{$name}++; $warn_file_line{$warning}{$name}{$line}++; $warn_file_line_offset{$warning}{$name}{$line}{$offset}++; # Increment count for filename $file_count{$name}++; $file_warn{$name}{$warning}++; $file_warn_line{$name}{$warning}{$line}++; # Increment total count of warnings $totalcount++; } else { # Increment count of duplicate warnings $dupcount++; } # print STDERR "name = $name\n"; # print STDERR "line = $line\n"; # print STDERR "offset = $offset\n"; # print STDERR "warning = \"$warning\"\n"; } print "Total unique [non-ignored] warnings: $totalcount\n"; print "Ignored notes / supplemental warning lines [not counted in unique warnings]: $notecount\n"; print "Duplicated warning lines [not counted in unique warnings]: $dupcount\n"; print "Total ignored warnings: $ignorecount\n"; $warncount = keys %warn_count; print "Total unique kinds of warnings: $warncount\n"; $filecount = keys %file_count; print "Total files with warnings: $filecount\n\n"; # Print warnings in decreasing frequency print "# of Warnings by frequency (file count)\n"; print "=======================================\n"; for my $x (sort {$warn_count{$b} <=> $warn_count{$a}} keys(%warn_count)) { printf ("[%2d] %4d (%2d) - %s\n", $current_warning++, $warn_count{$x}, scalar(keys %{$warn_file{$x}}), $x); if((exists $options{W}) || (exists $options{w}) || (exists $options{s})) { my $curr_index = $current_warning - 1; my $match = 0; # Check for string from list in current warning if(exists $options{s}) { for my $y (@warn_match_strings) { # print STDERR "y = '$y'\n"; if($x =~ /$y/) { # print STDERR "matched warning = '$x'\n"; $match = 1; last; } } } # Check if current warning index matches if((exists $warn_file_indices{$curr_index}) && $curr_index == $warn_file_indices{$curr_index}) { $match = 1; } if($match) { for my $y (sort {$warn_file{$x}{$b} <=> $warn_file{$x}{$a}} keys(%{$warn_file{$x}})) { printf ("\t%4d - %s\n", $warn_file{$x}{$y}, $y); if(exists $options{l}) { my $lines = join ", ", sort {$a <=> $b} keys %{$warn_file_line{$x}{$y}}; printf("\t\tLines: $lines \n"); } } } } } # Print warnings in decreasing frequency, by filename print "\n# of Warnings by filename (warning type)\n"; print "========================================\n"; for my $x (sort {$file_count{$b} <=> $file_count{$a}} keys(%file_count)) { printf ("[%3d] %4d (%2d) - %s\n", $current_file++, $file_count{$x}, scalar(keys %{$file_warn{$x}}), $x); if((exists $options{F}) || (exists $options{f}) || (exists $options{S})) { my $curr_index = $current_file - 1; my $match = 0; # Check for string from list in current file if(exists $options{S}) { for my $y (@file_match_strings) { # print STDERR "y = '$y'\n"; if($x =~ /$y/) { # print STDERR "matched warning = '$x'\n"; $match = 1; last; } } } # Check if current file index matches if((exists $file_warn_indices{$curr_index}) && $curr_index == $file_warn_indices{$curr_index}) { $match = 1; } if($match) { for my $y (sort {$file_warn{$x}{$b} <=> $file_warn{$x}{$a}} keys(%{$file_warn{$x}})) { printf ("\t%4d - %s\n", $file_warn{$x}{$y}, $y); if(exists $options{l}) { my $lines = join ", ", sort {$a <=> $b} keys %{$file_warn_line{$x}{$y}}; printf("\t\tLines: $lines \n"); } } } } } # Print names of files that were ignored # Check for ignored file if(exists $options{i}) { print "\nIgnored filenames\n"; print "=================\n"; for my $x (sort keys(%ignored_files)) { print "$x\n"; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0014274�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/BlankForm����������������������������������������������������������������������0000664�0000000�0000000�00000011221�15030617045�0016067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. if test "X-$CC" = "X-"; then CC="/some/default/compiler/named/foo -ansi" CC_BASENAME=foo fi if test "X-$F77" = "X-"; then F77="/some/default/compiler/named/foo -ansi" F77_BASENAME=foo fi # C and Fortran Compiler and Preprocessor Flags # --------------------------------------------------- # # - Flags that end with `_CFLAGS' are always passed to the C compiler. # - Flags that end with `_FFLAGS' are always passed to the Fortran # compiler. # - Flags that end with `_CPPFLAGS' are passed to the C compiler # when compiling but not when linking. # # DEBUG_CFLAGS # DEBUG_FFLAGS # DEBUG_CPPFLAGS - Flags to pass to the compiler to create a # library suitable for use with debugging # tools. Usually this list will exclude # optimization switches (like `-O') and include # switches that turn on symbolic debugging support # (like `-g'). # # PROD_CFLAGS # PROD_FFLAGS # PROD_CPPFLAGS - Flags to pass to the compiler to create a # production version of the library. These # usually exclude symbolic debugging switches (like # `-g') and include optimization switches (like # `-O'). # # PROFILE_CFLAGS # PROFILE_FFLAGS # PROFILE_CPPFLAGS- Flags to pass to the compiler to create a # library suitable for performance testing (like # `-pg'). This may or may not include debugging or # production flags. # # FFLAGS # CFLAGS - Flags can be added to these variable which # might already be partially initialized. These # flags will always be passed to the compiler and # should include switches to turn on full warnings. # # WARNING: flags do not have to be added to the CFLAGS # or FFLAGS variable if the compiler is the GNU gcc # and g77 compiler. # # FFLAGS and CFLAGS should contain *something* or else # configure will probably add `-g'. For most systems # this isn't a problem but some systems will disable # optimizations in favor of the `-g'. The configure # script will remove the `-g' flag in production mode # only. # # These flags should be set according to the compiler being used. # There are two ways to check the compiler. You can try using `-v' or # `--version' to see if the compiler will print a version string. You # can use the value of $FOO_BASENAME which is the base name of the # first word in $FOO, where FOO is either CC or F77 (note that the # value of CC may have changed above). case $CC_BASENAME in gcc) CFLAGS="$CFLAGS" DEBUG_CFLAGS="-g -fverbose-asm" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3 -fomit-frame-pointer" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; *) CFLAGS="$CFLAGS -ansi" DEBUG_CFLAGS="-g" DEBUG_CPPFLAGS= PROD_CFLAGS="-O" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; esac case $F77_BASENAME in g77) FFLAGS="$FFLAGS -Wsign-compare" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O3 -fomit-frame-pointer" PROFILE_FFLAGS="-pg" ;; *) FFLAGS="$FFLAGS -ansi" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; esac # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/README.md����������������������������������������������������������������������0000664�0000000�0000000�00000010716�15030617045�0015560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The `config` directory ## Intro HDF4 can be configured using both the GNU Autotools and CMake. We try to keep them in sync, but you can expect minor differences to crop up. Please create a GitHub issue for any differences noted. Note that with the Autotools, we do NOT check generated files into GitHub until release time, so you will need to generate `configure`, `Makefile.in`(s), etc. via `autogen.sh` in the project root if you want to build with that system. Configuration information for the HDF4 library and tools is (unfortunately) spread across the repository. Basic library configuration will generally be found in `configure.ac` (Autotools) and the root's `CMakeLists.txt` (CMake). Each subdirectory of the project also has its own `Makefile.am` or CMake build and test files. This directory contains a few important things: * Autotools OS- and compiler-specific configuration * CMake support files (in `cmake`) * Warning files shared between the two systems (in `*-warnings` directories) * CMake toolchain files (in `toolchain`) * CMake sanitizer files (in `sanitizer`) CMake will be documented elsewhere. This document focuses on the Autotools files and the shared warning files. ## Autotools An Autotools build will first use `$host_cpu`, `$host_os`, etc. to try to find a suitable platform file in `config` to source and start checking compilers. The code that does this is in `configure.ac` (search for `host_os`). For example, MacOS will source the `apple` file and FreeBSD will source the `freebsd` file. If you dig into one of these files, the way that they check for compilers is rather crude. Each OS script will simply source the various C, C++, and Fortran compiler files that are listed inside. Each compiler file checks the designated compiler's version output to see if there's a match, and if so, the flag processing proceeds, and a variable like `cc_flags_set` will be set at the end. In case it's not obvious, the C files end in `-flags`, C++ in `-cxxflags`, and Fortran in `-fflags`. When a compiler matches, the script will attempt to set the `CFLAGS`, etc. variables based on the platform and compiler's properties. There are typically a large number of flag categories (e.g., `DEBUG_OPT_CFLAGS`) that are conditionally appended to the canonical variables, like `AM_FLAGS`, by the remainder of the `configure` script. For the major compilers, like Clang and gcc, there will be a section at the end where we append version-specific flags, mainly for warnings. These are imported via a function in the script (`load_gnu_arguments()` for gcc). See below for more detail. ## Warnings files Keeping the Autotools and CMake build files in sync has always been a bit of a struggle. One way that we help to ensure that the same flags are used in each build system is to import the warnings settings from text files that are maintained separately from the Autotools and CMake build files. We like to configure the compiler to be as crabby as possible so as to catch subtle bugs, so there are a LOT of warning flags for popular compilers like Clang and gcc. We've located these files in `config/*-warnings` directories. Each file represents a compiler version and contains the warning flags we set, one to a line. Lines that start with `#` are considered comment lines. You'll also see `developer` and `no-developer` flavors of compiler version files. The former corresponds to "developer flags" that are usually either only semi-useful and/or generate a lot of (usually unfixable) noise. The latter corresponds to things that we want to ensure do NOT appear in non-developer builds of the library. These might involve a different level setting (`-Wfoo=x`) or something that gets incorporated in a "conglomerate" flag like `-Wextra` so we need to set `-Wno-foo` in non-developer builds. Developer warnings can be turned on via a configure option. You will also sometimes see `error` files. Those are files that include warnings that will be considered errors if you have enabled the "warnings as errors" configure option set. Now that the library is largely warning-free, these are less useful than in the past as you can now just set -Werror directly in many cases (our configure script is smart about not running configure checks with -Werror). For anyone interested, we are always interested in improving both the OS and compiler files, so pull requests for those are always welcome, especially for platforms we don't have routine access to. If you are a compiler or platform expert/aficionado, please help us out! ��������������������������������������������������hdf4-hdf4.3.1/config/aix����������������������������������������������������������������������������0000664�0000000�0000000�00000011073�15030617045�0015002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. if test "X-$CC" = "X-"; then CC=xlc CC_BASENAME=xlc fi if test "X-$F77" = "X-"; then F77=xlf F77_BASENAME=xlf fi # C and Fortran Compiler and Preprocessor Flags # --------------------------------------------------- # # - Flags that end with `_CFLAGS' are always passed to the C compiler. # - Flags that end with `_FFLAGS' are always passed to the Fortran # compiler. # - Flags that end with `_CPPFLAGS' are passed to the C compiler # when compiling but not when linking. # # DEBUG_CFLAGS # DEBUG_FFLAGS # DEBUG_CPPFLAGS - Flags to pass to the compiler to create a # library suitable for use with debugging # tools. Usually this list will exclude # optimization switches (like `-O') and include # switches that turn on symbolic debugging support # (like `-g'). # # PROD_CFLAGS # PROD_FFLAGS # PROD_CPPFLAGS - Flags to pass to the compiler to create a # production version of the library. These # usually exclude symbolic debugging switches (like # `-g') and include optimization switches (like # `-O'). # # PROFILE_CFLAGS # PROFILE_FFLAGS # PROFILE_CPPFLAGS- Flags to pass to the compiler to create a # library suitable for performance testing (like # `-pg'). This may or may not include debugging or # production flags. # # FFLAGS # CFLAGS - Flags can be added to these variable which # might already be partially initialized. These # flags will always be passed to the compiler and # should include switches to turn on full warnings. # # WARNING: flags do not have to be added to the CFLAGS # or FFLAGS variable if the compiler is the GNU gcc # and g77 compiler. # # FFLAGS and CFLAGS should contain *something* or else # configure will probably add `-g'. For most systems # this isn't a problem but some systems will disable # optimizations in favor of the `-g'. The configure # script will remove the `-g' flag in production mode # only. # # These flags should be set according to the compiler being used. # There are two ways to check the compiler. You can try using `-v' or # `--version' to see if the compiler will print a version string. You # can use the value of $FOO_BASENAME which is the base name of the # first word in $FOO, where FOO is either CC or F77 (note that the # value of CC may have changed above). case $CC_BASENAME in gcc) CFLAGS="$CFLAGS" DEBUG_CFLAGS="-g -fverbose-asm" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3 -fomit-frame-pointer" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; *) CFLAGS="$CFLAGS" DEBUG_CFLAGS="-g" DEBUG_CPPFLAGS= PROD_CFLAGS="-O" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; esac case $F77_BASENAME in g77) FFLAGS="$FFLAGS -Wsign-compare" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O3 -fomit-frame-pointer" PROFILE_FFLAGS="-pg" ;; *) FFLAGS="$FFLAGS" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; esac # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/apple��������������������������������������������������������������������������0000664�0000000�0000000�00000010331�15030617045�0015316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. # The default compiler is `clang'. if test "X-$CC" = "X-"; then CC=clang CC_BASENAME=clang fi # Figure out GNU C compiler flags . $srcdir/config/gnu-flags # Figure out Intel oneAPI C compiler flags . $srcdir/config/oneapi-flags # Figure out Intel classic C compiler flags . $srcdir/config/intel-flags # Figure out Clang C compiler flags . $srcdir/config/clang-flags # Use gfortran as the default F77 compiler. if test "X-$F77" = "X-"; then F77=gfortran F77_BASENAME=gfortran fi # Figure out GNU FC compiler flags . $srcdir/config/gnu-fflags # compiler version strings # check if the compiler_version_info is already set if test -z "$cc_version_info"; then case $CC in # whatever matches *pgcc* will also match *gcc*, so this one must come first *pgcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS -V 2>&1 | grep 'pgcc'` ;; *gcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS --version 2>&1 | grep -v 'PathScale' |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` ;; *icc*|*icx*) cc_version_info=`$CC $CCFLAGS $H4_CCFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` ;; *clang*) cc_version_info="`$CC $CFLAGS $H4_CFLAGS --version 2>&1 |\ grep 'clang version' | sed 's/.*clang version \([-a-z0-9\.]*\).*/\1/'`" ;; *) echo "No match to get cc_version_info for $CC" ;; esac fi # get fortran version info case $F77 in *gfortran*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` fc_version="`$F77 $FFLAGS -v 2>&1 |grep 'gcc version' |\ sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/[-a-z]//g'` fi ;; *ifc*|*ifort*|*ifx*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^Intel'`" if test X != "X$fc_version"; then fc_version="`echo $fc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`" fi ;; *f95*) # Figure out which compiler we are using: pgf90 or Absoft f95 RM='rm -f' tmpfile=/tmp/cmpver.$$ $F77 -V >$tmpfile if test -s "$tmpfile"; then if( grep -s 'Absoft' $tmpfile > /dev/null) then FC_BASENAME=f95 fi fi $RM $tmpfile fc_version_info=`$F77 -V | grep Absoft` ;; *g95*|*g77*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC'` ;; *pgf90*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'pgf90'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^pgf90 '`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/pgf90 \([-a-z0-9\.\-]*\).*/\1/'` fi ;; *) echo "No match to get fc_version_info for $F77" ;; esac if test X != "X$fc_version"; then # Get the compiler version numbers fc_vers_major=`echo $fc_version | cut -f1 -d.` fi �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/clang-flags��������������������������������������������������������������������0000664�0000000�0000000�00000006145�15030617045�0016403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # # Prepend `$srcdir/config/clang-warnings/` to the filename suffix(es) given as # subroutine argument(s), remove comments starting with # and ending # at EOL, replace spans of whitespace (including newlines) with spaces, # and re-emit the file(s) thus filtered on the standard output stream. # load_clang_arguments() { set -- $(for arg; do sed 's,#.*$,,' $srcdir/config/clang-warnings/${arg} done) IFS=' ' echo "$*" } # Get the compiler version in a way that works for clang # unless a compiler version is already known # # cc_vendor: The compiler name: clang # cc_version: Version number: 6.0.0, 7.3.0, ... 10.0.1 # if test "X-" = "X-$cc_flags_set"; then # clang -v will return version number following "clang" on Linux machines, # but on Xcode the version number will follow "Apple LLVM version" # Note that the Xcode reported LLVM version doesn't match the canonical # LLVM version, so you'll need to do different version checks for # Xcode. cc_version="`$CC $CFLAGS -v 2>&1 |\ grep 'clang version' | sed 's/.*clang version \([-a-z0-9\.]*\).*/\1/'`" if test -n "$cc_version"; then cc_vendor="clang" else cc_version="`$CC $CFLAGS $H4_CFLAGS -v 2>&1 |\ grep 'Apple LLVM version' | sed 's/.*Apple LLVM version \([-a-z0-9\.]*\).*/\1/'`" if test -n "$cc_version"; then cc_vendor="Apple LLVM" fi fi if test "X-" != "X-$cc_version"; then # Get the compiler version numbers cc_vers_major=`echo $cc_version | cut -f1 -d.` cc_vers_minor=`echo $cc_version | cut -f2 -d.` cc_vers_patch=`echo $cc_version | cut -f3 -d.` test -n "$cc_vers_major" || cc_vers_major=0 test -n "$cc_vers_minor" || cc_vers_minor=0 test -n "$cc_vers_patch" || cc_vers_patch=0 fi fi if test "X-clang" = "X-$cc_vendor" -o "X-Apple LLVM" = "X-$cc_vendor"; then echo "compiler '$CC' is $cc_vendor-$cc_version" CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" CFLAGS="$CFLAGS -std=c99" DEBUG_CFLAGS="-g -ftrapv -fno-common" # -Og is only understood by clang 4+ and Xcode 9+ # Otherwise use -O1 (which is what -Og usually equates to) if test "X-clang" = "X-$cc_vendor" -a $cc_vers_major -ge 4 -o "X-Apple LLVM" = "X-$cc_vendor" -a $cc_vers_major -ge 9; then DEBUG_CFLAGS="$DEBUG_CFLAGS -Og" else DEBUG_CFLAGS="$DEBUG_CFLAGS -O1" fi DEBUG_CPPFLAGS= PROD_CFLAGS="-O3" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ########### # General # ########### CFLAGS="$CFLAGS $(load_clang_arguments general)" CFLAGS="$CFLAGS $(load_clang_arguments no-developer-general)" ################# # Flags are set # ################# cc_flags_set=yes fi # Clear cc info if no flags set if test "X$cc_flags_set" = "X"; then cc_vendor= cc_version= fi ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/clang-warnings/����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017206�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/clang-warnings/developer-general�����������������������������������������������0000664�0000000�0000000�00000000073�15030617045�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wmissing-noreturn -Wsometimes-uninitialized -Wswitch-enum ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/clang-warnings/general���������������������������������������������������������0000664�0000000�0000000�00000001257�15030617045�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# general clang warnings flags -Wall -Warray-bounds -Wbad-function-cast -Wcast-align -Wcast-qual -Wconversion -Wdouble-promotion -Wextra -Wformat=2 -Wframe-larger-than=16384 -Wimplicit-fallthrough -Wimplicit-function-declaration -Wincompatible-pointer-types -Wincompatible-pointer-types-discards-qualifiers -Wmissing-declarations -Wnull-dereference -Wpacked -Wpedantic -Wshadow -Wswitch -Wunused-const-variable -Wunused-function -Wunused-variable -Wunused-parameter -Wwrite-strings -Wvolatile-register-var # NOTE: Due to the divergence in the C and C++, we're dropping support for # compiling the C library with a C++ compiler and dropping the -Wc++-compat # warning. # -Wno-c++-compat �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/clang-warnings/no-developer-general��������������������������������������������0000664�0000000�0000000�00000000026�15030617045�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wno-missing-noreturn ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake-presets/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017037�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake-presets/hidden-presets.json����������������������������������������������0000664�0000000�0000000�00000033463�15030617045�0022661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 6, "configurePresets": [ { "name": "ci-base", "displayName": "Basic Config", "description": "Basic build using Ninja generator", "generator": "Ninja", "hidden": true, "binaryDir": "${sourceParentDir}/build/${presetName}", "installDir": "${sourceParentDir}/install/${presetName}" }, { "name": "ci-x64", "architecture": { "value": "x64", "strategy": "external" }, "hidden": true }, { "name": "ci-x86", "architecture": { "value": "Win32", "strategy": "external" }, "hidden": true }, { "name": "ci-arm64", "architecture": { "value": "ARM64", "strategy": "external" }, "hidden": true }, { "name": "ci-Debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }, "hidden": true }, { "name": "ci-Release", "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo", "HDF4_BUILD_DOC": "ON" }, "hidden": true }, { "name": "ci-MSVC", "hidden": true, "cacheVariables": { "CMAKE_C_COMPILER": "cl", "CMAKE_CXX_COMPILER": "cl" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "ci-macos", "hidden": true, "cacheVariables": { "CMAKE_OSX_ARCHITECTURES": "arm64;x86_64" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" } }, { "name": "ci-Clang", "hidden": true, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "config/toolchain/clang.cmake" } }, { "name": "ci-GNUC", "hidden": true, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "config/toolchain/gcc.cmake" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" } }, { "name": "ci-Intel", "hidden": true }, { "name": "ci-Fortran", "hidden": true, "cacheVariables": { "HDF4_BUILD_FORTRAN": "ON" } }, { "name": "ci-Fortran-Clang", "hidden": true, "inherits": "ci-Fortran", "cacheVariables": { "CMAKE_Fortran_COMPILER": {"type": "FILEPATH", "value": "gfortran"} }, "condition": { "type": "matches", "string": "${presetName}", "regex": ".*-Clang" } }, { "name": "ci-Java", "hidden": true, "cacheVariables": { "HDF4_BUILD_JAVA": "ON" } }, { "name": "ci-x64-Debug-MSVC", "description": "MSVC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-MSVC" ] }, { "name": "ci-x64-Release-MSVC", "description": "MSVC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-MSVC" ] }, { "name": "ci-x64-Debug-Clang", "description": "Clang/LLVM for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-Clang" ] }, { "name": "ci-x64-Release-Clang", "description": "Clang/LLVM for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-Clang" ] }, { "name": "ci-x64-Debug-GNUC", "description": "GNUC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-GNUC" ] }, { "name": "ci-x64-Release-GNUC", "description": "GNUC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-GNUC" ] }, { "name": "ci-macos-Debug-Clang", "description": "Clang/LLVM for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-macos", "ci-Debug", "ci-Clang" ] }, { "name": "ci-macos-Release-Clang", "description": "Clang/LLVM for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-macos", "ci-Release", "ci-Clang" ] }, { "name": "ci-macos-Debug-GNUC", "description": "GNUC for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-macos", "ci-Debug", "ci-GNUC" ] }, { "name": "ci-macos-Release-GNUC", "description": "GNUC for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-macos", "ci-Release", "ci-GNUC" ] }, { "name": "ci-x64-Debug-Intel", "description": "Intel for x64 (Debug)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Debug", "ci-Intel" ] }, { "name": "ci-x64-Release-Intel", "description": "Intel for x64 (Release)", "hidden": true, "inherits": [ "ci-base", "ci-x64", "ci-Release", "ci-Intel" ] }, { "name": "ci-x64-Debug-MSVC-asan", "description": "x64-Debug-MSVC with /fsanitize=address", "hidden": true, "inherits": "ci-x64-Debug-MSVC", "cacheVariables": { "HDF4_USE_SANITIZER": "Address", "HDF4_ENABLE_SANITIZERS": "ON" } }, { "name": "ci-x64-Debug-GNUC-asan", "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { "HDF4_USE_SANITIZER": "Address", "HDF4_ENABLE_SANITIZERS": "ON" } }, { "name": "ci-x64-Debug-GNUC-tsan", "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { "HDF4_USE_SANITIZER": "Thread", "HDF4_ENABLE_SANITIZERS": "ON" } }, { "name": "ci-x64-Debug-GNUC-lsan", "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { "HDF4_USE_SANITIZER": "Leak", "HDF4_ENABLE_SANITIZERS": "ON" } }, { "name": "ci-x64-Debug-GNUC-ubsan", "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { "HDF4_USE_SANITIZER": "Undefined", "HDF4_ENABLE_SANITIZERS": "ON" } } ], "buildPresets": [ { "name": "ci-base", "configurePreset": "ci-base", "hidden": true, "verbose": true, "jobs": 8 }, { "name": "ci-x64-Debug-MSVC", "configurePreset": "ci-x64-Debug-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", "configurePreset": "ci-x64-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC", "configurePreset": "ci-x64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Debug-Clang", "configurePreset": "ci-macos-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Release-Clang", "configurePreset": "ci-macos-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Debug-GNUC", "configurePreset": "ci-macos-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Release-GNUC", "configurePreset": "ci-macos-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-Intel", "configurePreset": "ci-x64-Debug-Intel", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-asan", "configurePreset": "ci-x64-Debug-GNUC-asan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-tsan", "configurePreset": "ci-x64-Debug-GNUC-tsan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-lsan", "configurePreset": "ci-x64-Debug-GNUC-lsan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-ubsan", "configurePreset": "ci-x64-Debug-GNUC-ubsan", "hidden": true, "inherits": [ "ci-base" ] } ], "testPresets": [ { "name": "ci-base", "configurePreset": "ci-base", "output": { "outputOnFailure": false, "shortProgress": true, "verbosity": "verbose" }, "hidden": true, "execution": { "noTestsAction": "error", "timeout": 180, "jobs": 4 } }, { "name": "ci-x64-Debug-MSVC", "configurePreset": "ci-x64-Debug-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "Debug" }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": [ "ci-base" ], "configuration": "RelWithDebInfo" }, { "name": "ci-x64-Debug-Clang", "configurePreset": "ci-x64-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC", "configurePreset": "ci-x64-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Debug-Clang", "configurePreset": "ci-macos-Debug-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Release-Clang", "configurePreset": "ci-macos-Release-Clang", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Debug-GNUC", "configurePreset": "ci-macos-Debug-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-macos-Release-GNUC", "configurePreset": "ci-macos-Release-GNUC", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-Intel", "configurePreset": "ci-x64-Debug-Intel", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-asan", "configurePreset": "ci-x64-Debug-GNUC-asan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-tsan", "configurePreset": "ci-x64-Debug-GNUC-tsan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-lsan", "configurePreset": "ci-x64-Debug-GNUC-lsan", "hidden": true, "inherits": [ "ci-base" ] }, { "name": "ci-x64-Debug-GNUC-ubsan", "configurePreset": "ci-x64-Debug-GNUC-ubsan", "inherits": [ "ci-base" ] } ], "packagePresets": [ { "name": "ci-base", "hidden": true, "output": { "verbose": true } }, { "name": "ci-x64-Release-MSVC", "configurePreset": "ci-x64-Release-MSVC", "hidden": true, "inherits": "ci-base", "configurations": ["RelWithDebInfo"] }, { "name": "ci-x64-Release-Clang", "configurePreset": "ci-x64-Release-Clang", "hidden": true, "inherits": "ci-base" }, { "name": "ci-x64-Release-GNUC", "configurePreset": "ci-x64-Release-GNUC", "hidden": true, "inherits": "ci-base" }, { "name": "ci-macos-Release-Clang", "configurePreset": "ci-macos-Release-Clang", "hidden": true, "inherits": "ci-base" }, { "name": "ci-macos-Release-GNUC", "configurePreset": "ci-macos-Release-GNUC", "hidden": true, "inherits": "ci-base" }, { "name": "ci-x64-Release-Intel", "configurePreset": "ci-x64-Release-Intel", "hidden": true, "inherits": "ci-base" } ] } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0015354�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/CMakeFindJavaCommon.cmake������������������������������������������������0000664�0000000�0000000�00000001741�15030617045�0022115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # Do not include this module directly from code outside CMake! set(_JAVA_HOME "") if(JAVA_HOME AND IS_DIRECTORY "${JAVA_HOME}") set(_JAVA_HOME "${JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 1) else() set(_ENV_JAVA_HOME "") if(DEFINED ENV{JAVA_HOME}) file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _ENV_JAVA_HOME) endif() if(_ENV_JAVA_HOME AND IS_DIRECTORY "${_ENV_JAVA_HOME}") set(_JAVA_HOME "${_ENV_JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 1) else() set(_CMD_JAVA_HOME "") if(APPLE AND EXISTS "/usr/libexec/java_home") execute_process(COMMAND /usr/libexec/java_home OUTPUT_VARIABLE _CMD_JAVA_HOME OUTPUT_STRIP_TRAILING_WHITESPACE) endif() if(_CMD_JAVA_HOME AND IS_DIRECTORY "${_CMD_JAVA_HOME}") set(_JAVA_HOME "${_CMD_JAVA_HOME}") set(_JAVA_HOME_EXPLICIT 0) endif() unset(_CMD_JAVA_HOME) endif() unset(_ENV_JAVA_HOME) endif() �������������������������������hdf4-hdf4.3.1/config/cmake/CPack.Info.plist.in������������������������������������������������������0000664�0000000�0000000�00000002246�15030617045�0020715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" ?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>@CPACK_PACKAGE_FILE_NAME@</string> <key>CFBundleIconFile</key> <string>@CPACK_BUNDLE_ICON@</string> <key>CFBundleIdentifier</key> <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <!-- See https://developer.apple.com/app-store/categories/ for list of AppStore categories --> <key>LSApplicationCategoryType</key> <string>public.app-category.developer-tools</string> <key>CFBundleVersion</key> <string>@CPACK_PACKAGE_VERSION@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_SHORT_VERSION_STRING@</string> <key>NSHumanReadableCopyright</key> <string>Copyright 2006 by The HDF Group</string> <key>CSResourcesFileMapped</key> <string>true</string> </dict> </plist> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/CTestCustom.cmake��������������������������������������������������������0000664�0000000�0000000�00000010116�15030617045�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# CTestCustom.cmake set (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 3000) # Allow full output to go to CDash set to 0 set (CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 50000) set (CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 50000) # WARNING! This could be a lot of output and could overwhelm CDash and the # MySQL DB so this might not be a good idea! set (CTEST_CUSTOM_WARNING_EXCEPTION ${CTEST_CUSTOM_WARNING_EXCEPTION} "note.*expected.*void.*but argument is of type.*volatile" "plugin-build.*:[ \t]*warning" "stamp.verify" "CMake Warning*stamp" "src.ZLIB.*:[ \t]*warning" "src.ZLIB.*:[ \t]*warning" "warning LNK4197:.*ZLIB-prefix" "src.SZIP.*:[ \t]*warning" "disabling jobserver mode" "config.cmake.xlatefile.c" "warning.*unknown pragma" "warning.*unrecognized .pragma" # "note: expanded from macro" "This directive is not standard" ".*note.*expected.*void.*but argument is of type.*volatile.*" ".*src.SZIP.*:[ \t]*warning.*" ".*src.ZLIB.*:[ \t]*warning.*" ".*src.ZLIB.*:[ \t]*warning.*" ".*src.JPEG.*:[ \t]*warning.*" ".*POSIX name for this item is deprecated.*" ".*disabling jobserver mode.*" ".*warning.*implicit declaration of function.*" ".*note: expanded from macro.*" ) set (CTEST_CUSTOM_MEMCHECK_IGNORE ${CTEST_CUSTOM_MEMCHECK_IGNORE} hdfpack-clear-refs hdfpalette-clear-refs hdfjpeg-clear-refs HDP_tst-clearall-objects HDP_tst_err-clearall-objects HDP-clear-my.dat HDP-clear-mybin.dat hdfimport-clear-refs HDIFF-clearall-objects hrepack-clearall-objects HDF_EXAMPLES-clearall-objects HDF_FORTRAN_EXAMPLES-clearall-objects MFHDF_EXAMPLES-clearall-objects MFHDF_FORTRAN_EXAMPLES-clearall-objects MFHDF_TEST-clearall-objects testhdf-clearall-objects testhdf_thf0-clearall-objects testhdf_thf1-clearall-objects testhdf_thf2-clearall-objects testhdf_thf3-clearall-objects testhdf_thf4-clearall-objects testhdf_thf5-clearall-objects testhdf_thf6-clearall-objects testhdf_thf7-clearall-objects testhdf_thf8-clearall-objects testhdf_thf9-clearall-objects testhdf_thf10-clearall-objects testhdf_thf11-clearall-objects testhdf_thf12-clearall-objects testhdf_thf13-clearall-objects testhdf_thf14-clearall-objects testhdf_thf15-clearall-objects testhdf_thf16-clearall-objects testhdf_thf17-clearall-objects testhdf_thf18-clearall-objects testhdf_thf19-clearall-objects testhdf_thf20-clearall-objects testhdf_thf21-clearall-objects testhdf_thf22-clearall-objects testhdf_thf23-clearall-objects testhdf_thf24-clearall-objects testhdf_thf25-clearall-objects testhdf_thf26-clearall-objects testhdf_thf27-clearall-objects testhdf_thf28-clearall-objects testhdf_thf29-clearall-objects testhdf_thf30-clearall-objects testhdf_thf31-clearall-objects testhdf_thf32-clearall-objects testhdf_thf33-clearall-objects testhdf_thf34-clearall-objects testhdf_thf35-clearall-objects testhdf_thf36-clearall-objects testhdf_thf37-clearall-objects testhdf_thf38-clearall-objects testhdf_thf39-clearall-objects testhdf_thf40-clearall-objects testhdf_thf41-clearall-objects testhdf_thf42-clearall-objects testhdf_thf43-clearall-objects testhdf_thf44-clearall-objects testhdf_thf45-clearall-objects testhdf_thf46-clearall-objects testhdf_thf47-clearall-objects testhdf_thf48-clearall-objects testhdf_thf49-clearall-objects testhdf_thf50-clearall-objects testhdf_thf51-clearall-objects testhdf_thf52-clearall-objects testhdf_thf53-clearall-objects testhdf_thf54-clearall-objects testhdf_thf55-clearall-objects testhdf_thf56-clearall-objects testhdf_thf57-clearall-objects testhdf_thf58-clearall-objects testhdf_thf59-clearall-objects testhdf_thf60-clearall-objects hrepack-clearall-objects MFHDF_FORTRAN-clearall-objects HDF_FORTRAN-clearall-objects hdfgif-clear-refs ncdump-clearall-objects NC_TEST-clearall-objects HEDIT-hdfed.input1 HEDIT-ristosds.input1 ) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ConfigureChecks.cmake����������������������������������������������������0000664�0000000�0000000�00000017630�15030617045�0021427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # Include all the necessary files for macros #----------------------------------------------------------------------------- include (CheckFunctionExists) include (CheckIncludeFile) include (CheckIncludeFiles) include (CheckLibraryExists) include (CheckSymbolExists) include (CheckTypeSize) include (CheckVariableExists) include (TestBigEndian) include (CheckStructHasMember) set (HDF_PREFIX "H4") # Check for Darwin (not just Apple - we also want to catch OpenDarwin) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set (${HDF_PREFIX}_HAVE_DARWIN 1) endif () # Check for Solaris if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") set (${HDF_PREFIX}_HAVE_SOLARIS 1) endif () #----------------------------------------------------------------------------- # This MACRO checks IF the symbol exists in the library and IF it # does, it appends library to the list. #----------------------------------------------------------------------------- set (LINK_LIBS "") set (LINK_PUB_LIBS "") macro (CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE) CHECK_LIBRARY_EXISTS ("${LIBRARY};${LINK_LIBS}" ${SYMBOL} "" ${VARIABLE}) if (${VARIABLE}) set (LINK_LIBS ${LINK_LIBS} ${LIBRARY}) endif () endmacro () # ---------------------------------------------------------------------- # WINDOWS Hard code Values # ---------------------------------------------------------------------- set (WINDOWS) if (MINGW) set (${HDF_PREFIX}_HAVE_MINGW 1) set (WINDOWS 1) # MinGW tries to imitate Windows set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1") set (__USE_MINGW_ANSI_STDIO 1) endif () if (WIN32 AND NOT MINGW) if (NOT UNIX) set (WINDOWS 1) set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1") if (MSVC) set (${HDF_PREFIX}_HAVE_VISUAL_STUDIO 1) endif () endif () message (TRACE "MSVC=${MSVC}") message (TRACE "HAVE_VISUAL_STUDIO=${${HDF_PREFIX}_HAVE_VISUAL_STUDIO}") endif () if (WINDOWS) set (HDF4_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib") set (${HDF_PREFIX}_HAVE_WIN32_API 1) set (${HDF_PREFIX}_HAVE_SYSTEM 1) if (NOT UNIX AND NOT CYGWIN) set (${HDF_PREFIX}_HAVE_LIBWS2_32 1) set (${HDF_PREFIX}_HAVE_LIBWSOCK32 1) endif () endif () # ---------------------------------------------------------------------- # END of WINDOWS Hard code Values # ---------------------------------------------------------------------- if (NOT WINDOWS) TEST_BIG_ENDIAN (${HDF_PREFIX}_WORDS_BIGENDIAN) endif () #----------------------------------------------------------------------------- # Check IF header file exists and add it to the list. #----------------------------------------------------------------------------- macro (CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE) CHECK_INCLUDE_FILES ("${USE_INCLUDES};${FILE}" ${VARIABLE}) if (${VARIABLE}) set (USE_INCLUDES ${USE_INCLUDES} ${FILE}) endif () endmacro () #----------------------------------------------------------------------------- # Check for the existence of certain header files #----------------------------------------------------------------------------- CHECK_INCLUDE_FILE_CONCAT ("fcntl.h" ${HDF_PREFIX}_HAVE_FCNTL_H) CHECK_INCLUDE_FILE_CONCAT ("sys/file.h" ${HDF_PREFIX}_HAVE_SYS_FILE_H) CHECK_INCLUDE_FILE_CONCAT ("sys/resource.h" ${HDF_PREFIX}_HAVE_SYS_RESOURCE_H) CHECK_INCLUDE_FILE_CONCAT ("sys/stat.h" ${HDF_PREFIX}_HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE_CONCAT ("sys/time.h" ${HDF_PREFIX}_HAVE_SYS_TIME_H) CHECK_INCLUDE_FILE_CONCAT ("sys/types.h" ${HDF_PREFIX}_HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE_CONCAT ("unistd.h" ${HDF_PREFIX}_HAVE_UNISTD_H) CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" ${HDF_PREFIX}_HAVE_NETINET_IN_H) CHECK_INCLUDE_FILE_CONCAT ("arpa/inet.h" ${HDF_PREFIX}_HAVE_INET_H) CHECK_INCLUDE_FILE_CONCAT ("sys/wait.h" ${HDF_PREFIX}_HAVE_SYS_WAIT_H) if (MINGW OR CYGWIN) set (CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE") add_definitions ("-D_GNU_SOURCE") endif () #----------------------------------------------------------------------------- # Library checks #----------------------------------------------------------------------------- if (MINGW OR NOT WINDOWS) CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM) CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32) CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32) endif () # For other tests to use the same libraries set (HDF4_REQUIRED_LIBRARIES ${HDF4_REQUIRED_LIBRARIES} ${LINK_LIBS}) set (USE_INCLUDES "") if (WINDOWS) set (USE_INCLUDES ${USE_INCLUDES} "windows.h") endif () #----------------------------------------------------------------------------- # Platform-specific flags #----------------------------------------------------------------------------- set (HDF_EXTRA_C_FLAGS) # Linux-specific flags if (CMAKE_SYSTEM_NAME MATCHES "Linux") # This was originally defined as _POSIX_SOURCE which was updated to # _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX # functionality so clock_gettime and CLOCK_MONOTONIC are defined # correctly. This was later updated to 200112L so that # posix_memalign() is visible for the direct VFD code on Linux # systems. Even later, this was changed to 200809L to support # pread/pwrite in VFDs. # # POSIX feature information can be found in the gcc manual at: # http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html set (HDF_EXTRA_C_FLAGS -D_POSIX_C_SOURCE=200809L) # Need to add this so that O_DIRECT is visible for the direct # VFD on Linux systems. set (HDF_EXTRA_C_FLAGS ${HDF_EXTRA_C_FLAGS} -D_GNU_SOURCE) # Set up large file support. This is only necessary on 32-bit systems # but is used on all Linux systems. It has no effect on 64-bit systems # so it's not worth hacking up a 32/64-bit test to selectively include it. # # The library currently does not use any of the 64-flavored API calls # or types set (HDF_EXTRA_C_FLAGS ${HDF_EXTRA_C_FLAGS} -D_LARGEFILE_SOURCE) set (HDF_EXTRA_C_FLAGS ${HDF_EXTRA_C_FLAGS} -D_FILE_OFFSET_BITS=64) set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF_EXTRA_C_FLAGS}) endif () # As of 2024, both AIX and Solaris are uncommon, but still exist! The default # compiler options are also often set to -m32, which produces 32-bit binaries. # 32-bit AIX compiles might require _LARGE_FILES, but we don't have a system on # which to test this (yet). # # https://www.ibm.com/docs/en/aix/7.1?topic=volumes-writing-programs-that-access-large-files # 32-bit Solaris probably needs _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64, # as in Linux, above. # # https://docs.oracle.com/cd/E23824_01/html/821-1474/lfcompile-5.html # MinGW and Cygwin if (MINGW OR CYGWIN) set (CMAKE_REQUIRED_DEFINITIONS "${CURRENT_TEST_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" ) endif () #----------------------------------------------------------------------------- # Check the size in bytes of types #----------------------------------------------------------------------------- macro (HDF_CHECK_TYPE_SIZE type var) set (aType ${type}) set (aVar ${var}) message (TRACE "Checking size of ${aType} and storing into ${aVar}") CHECK_TYPE_SIZE (${aType} ${aVar}) if (NOT ${aVar}) set (${aVar} 0 CACHE INTERNAL "SizeOf for ${aType}") message (TRACE "Size of ${aType} was NOT Found") endif () endmacro () if (NOT APPLE) HDF_CHECK_TYPE_SIZE (long ${HDF_PREFIX}_SIZEOF_LONG) endif () #----------------------------------------------------------------------------- # Check for some functions that are used # CHECK_FUNCTION_EXISTS (fcntl ${HDF_PREFIX}_HAVE_FCNTL) CHECK_FUNCTION_EXISTS (fork ${HDF_PREFIX}_HAVE_FORK) CHECK_FUNCTION_EXISTS (getrusage ${HDF_PREFIX}_HAVE_GETRUSAGE) CHECK_FUNCTION_EXISTS (system ${HDF_PREFIX}_HAVE_SYSTEM) CHECK_FUNCTION_EXISTS (wait ${HDF_PREFIX}_HAVE_WAIT) ��������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/FindSZIP.cmake�����������������������������������������������������������0000664�0000000�0000000�00000007146�15030617045�0017754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# - Derived from the FindTiff.cmake and FindJPEG.cmake that is included with cmake # FindSZIP # Find the native SZIP includes and library # Imported targets ################## # This module defines the following :prop_tgt:`IMPORTED` targets: # # SZIP::SZIP # The SZIP library, if found. # # Result variables ################### # This module will set the following variables in your project: # SZIP_FOUND, true if the SZIP headers and libraries were found. # SZIP_INCLUDE_DIR, the directory containing the SZIP headers. # SZIP_INCLUDE_DIRS, the directory containing the SZIP headers. # SZIP_LIBRARIES, libraries to link against to use SZIP. # Cache variables ################# # The following variables may also be set: # SZIP_LIBRARY, where to find the SZIP library. # SZIP_LIBRARY_DEBUG - Debug version of SZIP library # SZIP_LIBRARY_RELEASE - Release Version of SZIP library # message (STATUS "Finding SZIP library and headers..." ) ######################################################################### find_path(SZIP_INCLUDE_DIR szlib.h) set(szip_names ${SZIP_NAMES} sz szip szip-static libsz libszip libszip-static) foreach(name ${szip_names}) list (APPEND szip_names_debug "${name}d") endforeach() if(NOT SZIP_LIBRARY) find_library(SZIP_LIBRARY_RELEASE NAMES ${szip_names}) find_library(SZIP_LIBRARY_DEBUG NAMES ${szip_names_debug}) include(SelectLibraryConfigurations) select_library_configurations(SZIP) mark_as_advanced(SZIP_LIBRARY_RELEASE SZIP_LIBRARY_DEBUG) endif() unset(szip_names) unset(szip_names_debug) if(SZIP_INCLUDE_DIR AND EXISTS "${SZIP_INCLUDE_DIR}/SZconfig.h") file(STRINGS "${SZIP_INCLUDE_DIR}/SZconfig.h" szip_version_str REGEX "^#define[\t ]+SZIP_PACKAGE_VERSION[\t ]+.*") string(REGEX REPLACE "^#define[\t ]+SZIP_PACKAGE_VERSION[\t ]+([0-9]+).*" "\\1" SZIP_VERSION "${szip_version_str}") unset(szip_version_str) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SZIP REQUIRED_VARS SZIP_LIBRARY SZIP_INCLUDE_DIR VERSION_VAR SZIP_VERSION) if(SZIP_FOUND) set(SZIP_LIBRARIES ${SZIP_LIBRARY}) set(SZIP_INCLUDE_DIRS "${SZIP_INCLUDE_DIR}") if(NOT TARGET SZIP::SZIP) add_library(SZIP::SZIP UNKNOWN IMPORTED) if(SZIP_INCLUDE_DIRS) set_target_properties(SZIP::SZIP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SZIP_INCLUDE_DIRS}") endif() if(EXISTS "${SZIP_LIBRARY}") set_target_properties(SZIP::SZIP PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${SZIP_LIBRARY}") endif() if(EXISTS "${SZIP_LIBRARY_RELEASE}") set_property(TARGET SZIP::SZIP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(SZIP::SZIP PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" IMPORTED_LOCATION_RELEASE "${SZIP_LIBRARY_RELEASE}") endif() if(EXISTS "${SZIP_LIBRARY_DEBUG}") set_property(TARGET SZIP::SZIP APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(SZIP::SZIP PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" IMPORTED_LOCATION_DEBUG "${SZIP_LIBRARY_DEBUG}") endif() endif() endif() mark_as_advanced(SZIP_LIBRARY SZIP_INCLUDE_DIR) # Report the results. if (NOT SZIP_FOUND) set (SZIP_DIR_MESSAGE "SZip was not found. Make sure SZIP_LIBRARY and SZIP_INCLUDE_DIR are set or set the SZIP_INSTALL environment variable." ) if (NOT SZIP_FIND_QUIETLY) message (VERBOSE "${SZIP_DIR_MESSAGE}") else () if (SZIP_FIND_REQUIRED) message (FATAL_ERROR "SZip was NOT found and is Required by this project") endif () endif () endif () ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDF4ExampleCache.cmake���������������������������������������������������0000664�0000000�0000000�00000005703�15030617045�0021310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# CMake cache file for examples ######################### # EXTERNAL cache entries ######################### # set example options to match build options set (H4EX_BUILD_TESTING ${BUILD_TESTING} CACHE BOOL "Enable examples testing" FORCE) set (H4EX_BUILD_EXAMPLES ${HDF4_BUILD_EXAMPLES} CACHE BOOL "Build Examples" FORCE) set (H4EX_BUILD_C ON CACHE BOOL "Build examples C support" FORCE) set (H4EX_BUILD_FORTRAN ${HDF4_BUILD_FORTRAN} CACHE BOOL "Build examples FORTRAN support" FORCE) set (H4EX_BUILD_JAVA ${HDF4_BUILD_JAVA} CACHE BOOL "Build examples JAVA support" FORCE) set (H4EX_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS} CACHE BOOL "ON to use GNU Coding Standard install directory variables, OFF to use historical settings" FORCE) #preset HDF4 cache vars to this projects libraries instead of searching set (H4EX_HDF4_HEADER "H4config.h" CACHE STRING "Name of HDF4 header" FORCE) #set (H4EX_HDF4_INCLUDE_DIRS $<TARGET_PROPERTY:${HDF4_LIBSH_TARGET},INCLUDE_DIRECTORIES> CACHE PATH "HDF4 include dirs" FORCE) set (H4EX_HDF4_INCLUDE_DIRS "${HDF4_SRC_INCLUDE_DIRS};${HDF4_BINARY_DIR}" CACHE PATH "HDF4 include dirs" FORCE) set (H4EX_HDF4_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE STRING "HDF4 build folder" FORCE) set (EXAMPLES_EXTERNALLY_CONFIGURED ON CACHE BOOL "Examples build is used in another project" FORCE) set (EXAMPLE_VARNAME "H4") set (H4EX_RESOURCES_DIR ${HDF_RESOURCES_DIR}) message (STATUS "HDF4 Example H4EX_RESOURCES_DIR: ${H4EX_RESOURCES_DIR}") if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) set (USE_SHARED_LIBS OFF CACHE BOOL "Use Shared Libraries for Examples" FORCE) set (H4EX_HDF4_LINK_LIBS "${HDF4_SRC_LIB_TARGET};${HDF4_MF_LIB_TARGET}" CACHE STRING "HDF4 target" FORCE) if (HDF4_BUILD_FORTRAN) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_F90_LIB_TARGET}) set (H4EX_MOD_EXT "/static" CACHE STRING "Use Static Modules for Examples" FORCE) endif () else () set (USE_SHARED_LIBS ON CACHE BOOL "Use Shared Libraries for Examples" FORCE) set (H4EX_HDF4_LINK_LIBS "${HDF4_SRC_LIBSH_TARGET};${HDF4_MF_LIBSH_TARGET}" CACHE STRING "HDF4 target" FORCE) if (HDF4_BUILD_FORTRAN) set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_F90_LIBSH_TARGET}) set (H4EX_MOD_EXT "/shared" CACHE STRING "Use Shared Modules for Examples" FORCE) endif () if (HDF4_BUILD_JAVA) set (HDF4_JAVA_INCLUDE_DIRS ${HDF4_JAVA_JARS} ${HDF4_JAVA_LOGGING_JAR}) set (H4EX_JAVA_LIBRARY ${HDF4_JAVA_JNI_LIB_TARGET}) set (H4EX_JAVA_LIBRARIES ${HDF4_JAVA_HDF_LIB_TARGET} ${HDF4_JAVA_JNI_LIB_TARGET}) set (HDF4_LIBRARY_PATH ${CMAKE_TEST_OUTPUT_DIRECTORY}) message (STATUS "HDF4 Example java lib: ${H4EX_JAVA_LIBRARY} jars: ${HDF4_JAVA_INCLUDE_DIRS}") endif () endif () message (STATUS "HDF4 Example link libs: ${H4EX_HDF4_LINK_LIBS} Includes: ${H4EX_HDF4_INCLUDE_DIRS}") set (HDF4_TOOLS_DIR ${CMAKE_TEST_OUTPUT_DIRECTORY} CACHE STRING "HDF4 Directory for all Executables" FORCE) set (H4EX_HDF4_DUMP_EXECUTABLE $<TARGET_FILE:hdp> CACHE STRING "HDF4 hdp target" FORCE) �������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDF4Macros.cmake���������������������������������������������������������0000664�0000000�0000000�00000004340�15030617045�0020211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------- macro (H4_SET_LIB_OPTIONS libtarget libname libtype libpackage) set (LIB_OUT_NAME "${libname}") # SOVERSION passed in ARGN when shared if (${libtype} MATCHES "SHARED") set (PACKAGE_SOVERSION ${HDF4_${libpackage}_PACKAGE_SOVERSION}) set (PACKAGE_COMPATIBILITY ${H4_${libpackage}_SOVERS_INTERFACE}.0.0) set (PACKAGE_CURRENT ${H4_${libpackage}_SOVERS_INTERFACE}.${H4_${libpackage}_SOVERS_MINOR}.0) if (WIN32) set (LIBHDF_VERSION ${HDF4_PACKAGE_VERSION_MAJOR}) else () set (LIBHDF_VERSION ${HDF4_${libpackage}_PACKAGE_SOVERSION_MAJOR}) endif () set_target_properties (${libtarget} PROPERTIES VERSION ${PACKAGE_SOVERSION}) if (WIN32) set (${LIB_OUT_NAME} "${LIB_OUT_NAME}-${LIBHDF_VERSION}") else () set_target_properties (${libtarget} PROPERTIES SOVERSION ${LIBHDF_VERSION}) endif () if (CMAKE_C_OSX_CURRENT_VERSION_FLAG) set_property(TARGET ${libtarget} APPEND PROPERTY LINK_FLAGS "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}${PACKAGE_CURRENT} ${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}${PACKAGE_COMPATIBILITY}" ) endif () endif () HDF_SET_LIB_OPTIONS (${libtarget} ${LIB_OUT_NAME} ${libtype}) #-- Apple Specific install_name for libraries if (APPLE) option (HDF4_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF) if (HDF4_BUILD_WITH_INSTALL_NAME) set_target_properties (${libtarget} PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" BUILD_WITH_INSTALL_RPATH ${HDF4_BUILD_WITH_INSTALL_NAME} ) endif () if (HDF4_BUILD_FRAMEWORKS) if (${libtype} MATCHES "SHARED") # adapt target to build frameworks instead of dylibs set_target_properties(${libtarget} PROPERTIES XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" FRAMEWORK TRUE FRAMEWORK_VERSION ${HDF4_PACKAGE_VERSION_MAJOR} MACOSX_FRAMEWORK_IDENTIFIER org.hdfgroup.${libtarget} MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${HDF4_PACKAGE_VERSION_MAJOR} MACOSX_FRAMEWORK_BUNDLE_VERSION ${HDF4_PACKAGE_VERSION_MAJOR}) endif () endif () endif () endmacro () ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDF4UseFortran.cmake�����������������������������������������������������0000664�0000000�0000000�00000000615�15030617045�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This file provides functions for additional Fortran support. # #------------------------------------------------------------------------------- include (${HDF_RESOURCES_DIR}/HDFUseFortran.cmake) if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif () �������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDFCompilerFlags.cmake���������������������������������������������������0000664�0000000�0000000�00000047400�15030617045�0021434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# set (CMAKE_C_STANDARD 99) set (CMAKE_C_STANDARD_REQUIRED TRUE) set (CMAKE_C_FLAGS "${CMAKE_C99_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}") set (CMAKE_C_FLAGS "${CMAKE_C_SANITIZER_FLAGS} ${CMAKE_C_FLAGS}") message (VERBOSE "Warnings Configuration: C default: ${CMAKE_C_FLAGS}") #----------------------------------------------------------------------------- # Compiler specific flags #----------------------------------------------------------------------------- if (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "Intel" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")) set (_INTEL_WINDOWS 1) endif () if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC") set (_CLANG_MSVC_WINDOWS 1) endif () # Disable deprecation warnings for standard C functions. # really only needed for newer versions of VS, but should # not hurt other versions, and this will work into the # future if (MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS) add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) endif () if (MSVC) add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000") endif () # MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. if (CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105") endif () if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000") endif() if (CMAKE_C_COMPILER_ID STREQUAL "NVHPC" ) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn") if (NOT ${HDF_CFG_NAME} MATCHES "Debug") if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") endif () else () set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -g") endif () # With at least NVHPC 23.5 - 23.9, compiling with -O2 or higher and -DNDEBUG # appears to have issues that manifest in the tests as incorrect metadata # checksums being read or memory being corrupted. Compiling without -DNDEBUG # does not appear to have these issues, but is not ideal due to compiling in # asserts and other library debug code. Compiling with -O1 also does not appear # to have these issues, so set maximum optimization level to -O1 for now until # it can be determined whether these issues are compiler-specific or issues # in the library. set (cmake_c_flags_minsizerel_edited "${CMAKE_C_FLAGS_MINSIZEREL}") string (REPLACE "-O2" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") string (REPLACE "-O3" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") string (REPLACE "-O4" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") string (REPLACE "-Ofast" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") string (REPLACE "-fast" "" cmake_c_flags_minsizerel_edited "${cmake_c_flags_minsizerel_edited}") string (STRIP "${cmake_c_flags_minsizerel_edited}" cmake_c_flags_minsizerel_edited) string (PREPEND cmake_c_flags_minsizerel_edited "-O1 ") set (CMAKE_C_FLAGS_MINSIZEREL "${cmake_c_flags_minsizerel_edited}") set (cmake_c_flags_release_edited "${CMAKE_C_FLAGS_RELEASE}") string (REPLACE "-O2" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") string (REPLACE "-O3" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") string (REPLACE "-O4" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") string (REPLACE "-Ofast" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") string (REPLACE "-fast" "" cmake_c_flags_release_edited "${cmake_c_flags_release_edited}") string (STRIP "${cmake_c_flags_release_edited}" cmake_c_flags_release_edited) string (PREPEND cmake_c_flags_release_edited "-O1 ") set (CMAKE_C_FLAGS_RELEASE "${cmake_c_flags_release_edited}") set (cmake_c_flags_relwithdebinfo_edited "${CMAKE_C_FLAGS_RELWITHDEBINFO}") string (REPLACE "-O2" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") string (REPLACE "-O3" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") string (REPLACE "-O4" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") string (REPLACE "-Ofast" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") string (REPLACE "-fast" "" cmake_c_flags_relwithdebinfo_edited "${cmake_c_flags_relwithdebinfo_edited}") string (STRIP "${cmake_c_flags_relwithdebinfo_edited}" cmake_c_flags_relwithdebinfo_edited) string (PREPEND cmake_c_flags_relwithdebinfo_edited "-O1 ") set (CMAKE_C_FLAGS_RELWITHDEBINFO "${cmake_c_flags_relwithdebinfo_edited}") endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer") if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common") endif () else () if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND NOT CMAKE_C_CLANG_TIDY) # `clang-tidy` does not understand -fstdarg-opt set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstdarg-opt") endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) #----------------------------------------------------------------------------- # Option to allow the user to enable build extended diagnostics # # This should NOT be on by default as it can cause process issues. #----------------------------------------------------------------------------- option (HDF4_ENABLE_BUILD_DIAGS "Enable color and URL extended diagnostic messages" OFF) mark_as_advanced (HDF4_ENABLE_BUILD_DIAGS) if (HDF4_ENABLE_BUILD_DIAGS) message (STATUS "... default color and URL extended diagnostic messages enabled") else () message (STATUS "... disable color and URL extended diagnostic messages") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") endif () endif () endif () endif () #----------------------------------------------------------------------------- # Option to allow the user to disable compiler warnings #----------------------------------------------------------------------------- option (HDF4_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF) if (HDF4_DISABLE_COMPILER_WARNINGS) message (STATUS "....Compiler warnings are suppressed") # MSVC uses /w to suppress warnings. It also complains if another # warning level is given, so remove it. if (MSVC) set (HDF4_WARNINGS_BLOCKED 1) string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W0") endif () if (WIN32) add_definitions (-D_CRT_SECURE_NO_WARNINGS) endif () # Most compilers use -w to suppress warnings. if (NOT HDF4_WARNINGS_BLOCKED) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w") endif () endif () #----------------------------------------------------------------------------- # HDF4 library compile options - to be made available to all targets #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Option to allow the user to interpret certain warnings as errors # # This should NOT be on by default as it can cause a lot of conflicts with # new operating systems and compiler versions. Header files that are out of # our control can also raise warnings. #----------------------------------------------------------------------------- option (HDF4_ENABLE_WARNINGS_AS_ERRORS "Interpret some warnings as errors" OFF) if (HDF4_ENABLE_WARNINGS_AS_ERRORS) message (STATUS "...some warnings will be interpreted as errors") endif () if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") list (APPEND HDF4_CMAKE_C_FLAGS "-erroff=%none -DBSD_COMP") else () # General flags # # Note that some of the flags listed here really should be developer # flags (listed in a separate variable, below) but we put them here # because they are not raised by the current code and we'd like to # know if they do start showing up. # # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) # warnings that are emitted. If you need it, add it at configure time. if (CMAKE_C_COMPILER_ID STREQUAL "Intel") if (_INTEL_WINDOWS) ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/win-general") else () ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/general") endif() if (NOT _INTEL_WINDOWS) if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/15") endif () # this is just a failsafe list (APPEND H4_CFLAGS "-finline-functions") if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/18") endif () endif () elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") # Add general CFlags for GCC versions 4.8 and above if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/general") endif () # gcc automatically inlines based on the optimization level # this is just a failsafe list (APPEND H4_CFLAGS "-finline-functions") elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") if (_INTEL_WINDOWS) ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") else () # this is just a failsafe list (APPEND H4_CFLAGS "-finline-functions") ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/general") endif () elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/general") elseif (CMAKE_C_COMPILER_ID STREQUAL "PGI") list (APPEND HDF4_CMAKE_C_FLAGS "-Minform=inform") endif () message (VERBOSE "CMAKE_C_FLAGS_GENERAL=${HDF4_CMAKE_C_FLAGS}") endif () #----------------------------------------------------------------------------- # Option to allow the user to enable developer warnings # Developer warnings (suggestions from gcc, not code problems) #----------------------------------------------------------------------------- option (HDF4_ENABLE_DEV_WARNINGS "Enable HDF4 developer group warnings" OFF) if (${HDF_CFG_NAME} MATCHES "Developer") # Developer build modes should always have these types of warnings enabled set (HDF4_ENABLE_DEV_WARNINGS ON CACHE BOOL "Enable HDF4 developer group warnings" FORCE) endif () if (HDF4_ENABLE_DEV_WARNINGS) message (STATUS "....HDF4 developer group warnings are enabled") if (CMAKE_C_COMPILER_ID STREQUAL "Intel") if (_INTEL_WINDOWS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") else () ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/developer-general") endif () elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-general") elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") if (_INTEL_WINDOWS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") else () ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") endif () elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/developer-general") endif () else () if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-general") elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/no-developer-general") endif () endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") # Technically, variable-length arrays are part of the C99 standard, but # we should approach them a bit cautiously... Only needed for gcc 4.X if (CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/4.8-4.last") endif () # Append more extra warning flags that only gcc 4.8+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/4.8") if (HDF4_ENABLE_DEV_WARNINGS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-4.8") else () ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-4.8") endif () endif () # Append more extra warning flags that only gcc 4.9+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/4.9") endif () # Append more extra warning flags that only gcc 5.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/5") endif () # Append more extra warning flags that only gcc 6.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/6") endif () # Append more extra warning flags that only gcc 7.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/7") if (HDF4_ENABLE_DEV_WARNINGS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-7") #else () # ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-7") endif () endif () # Append more extra warning flags that only gcc 8.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/8") if (HDF4_ENABLE_DEV_WARNINGS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-8") else () ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-8") endif () endif () # Append more extra warning flags that only gcc 9.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/9") endif () # Append more extra warning flags that only gcc 9.3+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/9.3") endif () # Append more extra warning flags that only gcc 10.x+ knows about if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) if (HDF4_ENABLE_DEV_WARNINGS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-10") #else () # ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-10") endif () endif () # Append more extra warning flags that only gcc 12.x+ knows about # or which should only be enabled for gcc 12.x+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0) if (HDF4_ENABLE_DEV_WARNINGS) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-12") #else () # ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-12") endif () endif () endif () #----------------------------------------------------------------------------- # Option to allow the user to enable all warnings #----------------------------------------------------------------------------- option (HDF4_ENABLE_ALL_WARNINGS "Enable all warnings" ON) if (HDF4_ENABLE_ALL_WARNINGS) message (STATUS "....All Warnings are enabled") if (MSVC) if (HDF4_ENABLE_DEV_WARNINGS) string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") list (APPEND HDF4_CMAKE_C_FLAGS "/Wall" "/wd4668") else () string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") list (APPEND HDF4_CMAKE_C_FLAGS "/W3" "/wd4100" "/wd4706" "/wd4127") endif () else () list (APPEND HDF4_CMAKE_C_FLAGS ${H4_CFLAGS}) endif () endif () #----------------------------------------------------------------------------- # This is in here to help some of the GCC based IDES like Eclipse # and code blocks parse the compiler errors and warnings better. #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") endif () #----------------------------------------------------------------------------- # Option for --enable-asserts # By default, CMake adds NDEBUG to CMAKE_${lang}_FLAGS for Release build types # This option will force/override the default setting for all configurations #----------------------------------------------------------------------------- #option (HDF4_ENABLE_ASSERTS "Determines whether NDEBUG is defined to control assertions." OFF) set (HDF4_ENABLE_ASSERTS "OFF" CACHE STRING "Determines whether NDEBUG is defined to control assertions (OFF NO YES)") set_property (CACHE HDF4_ENABLE_ASSERTS PROPERTY STRINGS OFF NO YES) if (HDF4_ENABLE_ASSERTS MATCHES "YES") add_compile_options ("-UNDEBUG") elseif (HDF4_ENABLE_ASSERTS MATCHES "NO") add_compile_options ("-DNDEBUG") endif () MARK_AS_ADVANCED (HDF4_ENABLE_ASSERTS) #----------------------------------------------------------------------------- # Option for --enable-symbols # This option will force/override the default setting for all configurations #----------------------------------------------------------------------------- #option (HDF4_ENABLE_SYMBOLS "Add debug symbols to the library independent of the build mode and optimization level." OFF) set (HDF4_ENABLE_SYMBOLS "OFF" CACHE STRING "Add debug symbols to the library independent of the build mode and optimization level (OFF NO YES)") set_property (CACHE HDF4_ENABLE_SYMBOLS PROPERTY STRINGS OFF NO YES) if (HDF4_ENABLE_SYMBOLS MATCHES "YES") if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fno-omit-frame-pointer") endif () elseif (HDF4_ENABLE_SYMBOLS MATCHES "NO") if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-s") elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") endif () endif () MARK_AS_ADVANCED (HDF4_ENABLE_SYMBOLS) #----------------------------------------------------------------------------- # Option for --enable-profiling # This option will force/override the default setting for all configurations #----------------------------------------------------------------------------- option (HDF4_ENABLE_PROFILING "Enable profiling flags independently from the build mode." OFF) if (HDF4_ENABLE_PROFILING) list (APPEND HDF4_CMAKE_C_FLAGS "${PROFILE_CFLAGS}") endif () MARK_AS_ADVANCED (HDF4_ENABLE_PROFILING) #----------------------------------------------------------------------------- # Option for --enable-optimization # This option will force/override the default setting for all configurations #----------------------------------------------------------------------------- option (HDF4_ENABLE_OPTIMIZATION "Enable optimization flags/settings independently from the build mode" OFF) if (HDF4_ENABLE_OPTIMIZATION) list (APPEND HDF4_CMAKE_C_FLAGS "${OPTIMIZE_CFLAGS}") endif () MARK_AS_ADVANCED (HDF4_ENABLE_OPTIMIZATION) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDFLibMacros.cmake�������������������������������������������������������0000664�0000000�0000000�00000010373�15030617045�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------- macro (EXTERNAL_ZLIB_LIBRARY compress_type) if (HDF4_USE_ZLIB_NG) set (zlib_folder "ZLIBNG") else () set (zlib_folder "ZLIB") endif () if (${compress_type} MATCHES "GIT") if (${ZLIB_BRANCH} MATCHES "develop") set (ZLIB_FILE "devCMakeLists") else () set (ZLIB_FILE "CMakeLists") endif () FetchContent_Declare (ZLIB GIT_REPOSITORY ${ZLIB_URL} GIT_TAG ${ZLIB_BRANCH} PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/${zlib_folder}/${ZLIB_FILE}.txt <SOURCE_DIR>/CMakeLists.txt ) elseif (${compress_type} MATCHES "TGZ") message (VERBOSE "Filter ZLIB file ${ZLIB_URL}") FetchContent_Declare (ZLIB URL ${ZLIB_URL} URL_HASH "" PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/${zlib_folder}/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt ) endif () FetchContent_MakeAvailable(ZLIB) add_library(${HDF_PACKAGE_NAMESPACE}zlib-static ALIAS zlib-static) set (H4_ZLIB_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}zlib-static") set (H4_ZLIB_LIBRARIES ${H4_ZLIB_STATIC_LIBRARY}) if (HDF4_USE_ZLIB_NG) set (H4_ZLIB_HEADER "zlib-ng.h") else () set (H4_ZLIB_HEADER "zlib.h") endif () set (H4_ZLIB_INCLUDE_DIR_GEN "${zlib_BINARY_DIR}") set (H4_ZLIB_INCLUDE_DIR "${zlib_SOURCE_DIR}") set (H4_ZLIB_FOUND 1) set (H4_ZLIB_INCLUDE_DIRS ${H4_ZLIB_INCLUDE_DIR_GEN} ${H4_ZLIB_INCLUDE_DIR}) message (VERBOSE "H4_ZLIB link libs: ${H4_ZLIB_LIBRARIES} with ${H4_ZLIB_INCLUDE_DIRS}") endmacro () #------------------------------------------------------------------------------- macro (EXTERNAL_JPEG_LIBRARY compress_type) if (${compress_type} MATCHES "GIT") FetchContent_Declare (JPEG GIT_REPOSITORY ${JPEG_URL} GIT_TAG ${JPEG_BRANCH} PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/JPEG/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt ) elseif (${compress_type} MATCHES "TGZ") message (VERBOSE "Filter JPEG file ${JPEG_URL}") FetchContent_Declare (JPEG URL ${JPEG_URL} URL_HASH "" PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/JPEG/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt ) endif () FetchContent_MakeAvailable(JPEG) add_library(${HDF_PACKAGE_NAMESPACE}jpeg-static ALIAS jpeg-static) set (H4_JPEG_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}jpeg-static") set (H4_JPEG_LIBRARIES ${H4_JPEG_STATIC_LIBRARY}) set (H4_JPEG_INCLUDE_DIR_GEN "${jpeg_BINARY_DIR}") set (H4_JPEG_INCLUDE_DIR "${jpeg_SOURCE_DIR}") set (H4_JPEG_FOUND 1) set (H4_JPEG_INCLUDE_DIRS ${H4_JPEG_INCLUDE_DIR_GEN} ${H4_JPEG_INCLUDE_DIR}) message (VERBOSE "JPEG link libs: ${H4_JPEG_LIBRARIES} with ${H4_JPEG_INCLUDE_DIRS}") endmacro () #------------------------------------------------------------------------------- macro (EXTERNAL_SZIP_LIBRARY compress_type encoding) # Only libaec library is usable if (${compress_type} MATCHES "GIT") FetchContent_Declare (SZIP GIT_REPOSITORY ${SZIP_URL} GIT_TAG ${SZIP_BRANCH} PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/LIBAEC/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt ) elseif (${compress_type} MATCHES "TGZ") message (VERBOSE "Filter SZIP file ${SZIP_URL}") FetchContent_Declare (SZIP URL ${SZIP_URL} URL_HASH "" PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${HDF_RESOURCES_DIR}/LIBAEC/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt ) endif () FetchContent_MakeAvailable(SZIP) add_library (${HDF_PACKAGE_NAMESPACE}szaec-static ALIAS szaec-static) add_library (${HDF_PACKAGE_NAMESPACE}aec-static ALIAS aec-static) set (H4_SZIP_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}szaec-static;${HDF_PACKAGE_NAMESPACE}aec-static") set (H4_SZIP_LIBRARIES ${H4_SZIP_STATIC_LIBRARY}) set (H4_SZIP_INCLUDE_DIR_GEN "${szip_BINARY_DIR}") set (H4_SZIP_INCLUDE_DIR "${szip_SOURCE_DIR}/include") set (H4_SZIP_FOUND 1) set (H4_SZIP_INCLUDE_DIRS ${H4_SZIP_INCLUDE_DIR_GEN} ${H4_SZIP_INCLUDE_DIR}) message (VERBOSE "SZIP link libs: ${H4_SZIP_LIBRARIES} with ${H4_SZIP_INCLUDE_DIRS}") endmacro () ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDFMacros.cmake����������������������������������������������������������0000664�0000000�0000000�00000047166�15030617045�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# #------------------------------------------------------------------------------- # Setup output Directories #----------------------------------------------------------------------------- macro (SET_HDF_OUTPUT_DIRS package_prefix) if (NOT ${package_prefix}_EXTERNALLY_CONFIGURED) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables." ) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Libraries" ) set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all static libraries." ) set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/mod CACHE PATH "Single Directory for all fortran modules." ) get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(_isMultiConfig) set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${HDF_CFG_NAME}) set (CMAKE_PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all pdb files." ) else () set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endif () else () # if we are externally configured, but the project uses old cmake scripts # this may not be set and some utilities may fail if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) endif () endif () if (NOT ${package_prefix}_EXTERNALLY_CONFIGURED AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if (CMAKE_HOST_UNIX) set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/HDF_Group/${HDF4_PACKAGE_NAME}/${HDF4_PACKAGE_VERSION}" CACHE PATH "Install path prefix, prepended onto install directories." FORCE) else () GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES) set (CMAKE_INSTALL_PREFIX "${CMAKE_GENERIC_PROGRAM_FILES}/HDF_Group/${HDF4_PACKAGE_NAME}/${HDF4_PACKAGE_VERSION}" CACHE PATH "Install path prefix, prepended onto install directories." FORCE) set (CMAKE_GENERIC_PROGRAM_FILES) endif () set (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 0 CACHE PATH "" FORCE) endif () endmacro () #------------------------------------------------------------------------------- macro (SET_HDF_BUILD_TYPE) get_property (_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if (_isMultiConfig) # HDF_CFG_BUILD_TYPE is used in the Fortran install commands for the build location of the .mod files set (HDF_CFG_BUILD_TYPE \${CMAKE_INSTALL_CONFIG_NAME}) if (CMAKE_BUILD_TYPE) # set the default to the specified command line define set (HDF_CFG_NAME ${CMAKE_BUILD_TYPE}) else () # set the default to the MultiConfig variable set (HDF_CFG_NAME "$<CONFIG>") endif () else () set (HDF_CFG_BUILD_TYPE ".") if (CMAKE_BUILD_TYPE) set (HDF_CFG_NAME ${CMAKE_BUILD_TYPE}) else () set (HDF_CFG_NAME "Release") endif () # Set available build types for cmake-gui/ccmake convenience set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel") endif () endmacro () #------------------------------------------------------------------------------- macro (SET_GLOBAL_VARIABLE name value) set (${name} ${value} CACHE INTERNAL "Used to pass variables between directories" FORCE) endmacro () #------------------------------------------------------------------------------- macro (IDE_GENERATED_PROPERTIES SOURCE_PATH HEADERS SOURCES) #set (source_group_path "Source/AIM/${NAME}") string (REPLACE "/" "\\\\" source_group_path ${SOURCE_PATH}) source_group (${source_group_path} FILES ${HEADERS} ${SOURCES}) #-- The following is needed if we ever start to use OS X Frameworks but only #-- works on CMake 2.6 and greater #set_property (SOURCE ${HEADERS} # PROPERTY MACOSX_PACKAGE_LOCATION Headers/${NAME} #) endmacro () #------------------------------------------------------------------------------- macro (IDE_SOURCE_PROPERTIES SOURCE_PATH HEADERS SOURCES) # install (FILES ${HEADERS} # DESTINATION include/R3D/${NAME} # COMPONENT Headers # ) string (REPLACE "/" "\\\\" source_group_path ${SOURCE_PATH} ) source_group (${source_group_path} FILES ${HEADERS} ${SOURCES}) #-- The following is needed if we ever start to use OS X Frameworks but only #-- works on CMake 2.6 and greater #set_property (SOURCE ${HEADERS} # PROPERTY MACOSX_PACKAGE_LOCATION Headers/${NAME} #) endmacro () #------------------------------------------------------------------------------- macro (INSTALL_TARGET_PDB libtarget targetdestination targetcomponent) option (HDF4_DISABLE_PDB_FILES "Do not install PDB files" OFF) mark_as_advanced (HDF4_DISABLE_PDB_FILES) if (WIN32 AND MSVC AND NOT HDF4_DISABLE_PDB_FILES) get_target_property (target_type ${libtarget} TYPE) if (${target_type} MATCHES "SHARED") set (targetfilename $<TARGET_PDB_FILE:${libtarget}>) else () get_property (target_name TARGET ${libtarget} PROPERTY "$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:Developer>>,OUTPUT_NAME_DEBUG,OUTPUT_NAME_RELWITHDEBINFO>") set (targetfilename $<TARGET_FILE_DIR:${libtarget}>/${target_name}.pdb) endif () install ( FILES ${targetfilename} DESTINATION ${targetdestination} CONFIGURATIONS Debug RelWithDebInfo COMPONENT ${targetcomponent} OPTIONAL ) endif () endmacro () #------------------------------------------------------------------------------- macro (INSTALL_PROGRAM_PDB progtarget targetdestination targetcomponent) if (WIN32 AND MSVC) install ( FILES $<TARGET_PDB_FILE:${progtarget}> DESTINATION ${targetdestination} CONFIGURATIONS Debug RelWithDebInfo COMPONENT ${targetcomponent} OPTIONAL ) endif () endmacro () #------------------------------------------------------------------------------- macro (HDF_SET_LIB_OPTIONS libtarget libname libtype) if (${libtype} MATCHES "SHARED") set (LIB_RELEASE_NAME "${libname}") set (LIB_DEBUG_NAME "${libname}${CMAKE_DEBUG_POSTFIX}") else () if (WIN32 AND NOT MINGW) set (LIB_RELEASE_NAME "lib${libname}") set (LIB_DEBUG_NAME "lib${libname}${CMAKE_DEBUG_POSTFIX}") else () set (LIB_RELEASE_NAME "${libname}") set (LIB_DEBUG_NAME "${libname}${CMAKE_DEBUG_POSTFIX}") endif () endif () set_target_properties (${libtarget} PROPERTIES OUTPUT_NAME ${LIB_RELEASE_NAME} # OUTPUT_NAME_DEBUG ${LIB_DEBUG_NAME} OUTPUT_NAME_RELEASE ${LIB_RELEASE_NAME} OUTPUT_NAME_MINSIZEREL ${LIB_RELEASE_NAME} OUTPUT_NAME_RELWITHDEBINFO ${LIB_RELEASE_NAME} ) if (${libtype} MATCHES "STATIC") if (WIN32) set_target_properties (${libtarget} PROPERTIES COMPILE_PDB_NAME_DEBUG ${LIB_DEBUG_NAME} COMPILE_PDB_NAME_RELEASE ${LIB_RELEASE_NAME} COMPILE_PDB_NAME_MINSIZEREL ${LIB_RELEASE_NAME} COMPILE_PDB_NAME_RELWITHDEBINFO ${LIB_RELEASE_NAME} COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) endif () endif () option (HDF4_MSVC_NAMING_CONVENTION "Use MSVC Naming conventions for Shared Libraries" OFF) if (HDF4_MSVC_NAMING_CONVENTION AND MINGW AND ${libtype} MATCHES "SHARED") set_target_properties (${libtarget} PROPERTIES IMPORT_SUFFIX ".lib" IMPORT_PREFIX "" PREFIX "" ) endif () endmacro () #------------------------------------------------------------------------------- macro (HDF_IMPORT_SET_LIB_OPTIONS libtarget libname libtype libversion) HDF_SET_LIB_OPTIONS (${libtarget} ${libname} ${libtype}) if (${importtype} MATCHES "IMPORT") set (importprefix "${CMAKE_STATIC_LIBRARY_PREFIX}") endif () if (${HDF_CFG_NAME} MATCHES "Debug") set (IMPORT_LIB_NAME ${LIB_DEBUG_NAME}) else () set (IMPORT_LIB_NAME ${LIB_RELEASE_NAME}) endif () if (${libtype} MATCHES "SHARED") if (WIN32) if (MINGW) set_target_properties (${libtarget} PROPERTIES IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}.lib" IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" ) else () set_target_properties (${libtarget} PROPERTIES IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${HDF_CFG_NAME}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}" IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${HDF_CFG_NAME}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" ) endif () else () if (MINGW) set_target_properties (${libtarget} PROPERTIES IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}.lib" IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" ) elseif (CYGWIN) set_target_properties (${libtarget} PROPERTIES IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}" IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" ) else () set_target_properties (${libtarget} PROPERTIES IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${libversion}" SOVERSION "${libversion}" ) endif () endif () else () if (WIN32 AND NOT MINGW) set_target_properties (${libtarget} PROPERTIES IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${HDF_CFG_NAME}/${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) else () set_target_properties (${libtarget} PROPERTIES IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_STATIC_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) endif () endif () endmacro () #------------------------------------------------------------------------------- macro (TARGET_C_PROPERTIES wintarget libtype) target_compile_options(${wintarget} PRIVATE "$<$<C_COMPILER_ID:MSVC>:${WIN_COMPILE_FLAGS}>" ) if(MSVC) set_property(TARGET ${wintarget} APPEND PROPERTY LINK_FLAGS "${WIN_LINK_FLAGS}") endif() #Disable UNITY_BUILD for now set_property(TARGET ${wintarget} APPEND PROPERTY UNITY_BUILD OFF) endmacro () #----------------------------------------------------------------------------- # Configure the README.txt file for the binary package #----------------------------------------------------------------------------- macro (HDF_README_PROPERTIES target_fortran) set (BINARY_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) set (BINARY_PLATFORM "${CMAKE_SYSTEM_NAME}") if (WIN32) set (BINARY_EXAMPLE_ENDING "zip") set (BINARY_INSTALL_ENDING "msi") set (BINARY_COMPRESS_ENDING "zip") if (CMAKE_CL_64) set (BINARY_SYSTEM_NAME "win64") else () set (BINARY_SYSTEM_NAME "win32") endif () if (${CMAKE_SYSTEM_VERSION} MATCHES "6.1") set (BINARY_PLATFORM "${BINARY_PLATFORM} 7") elseif (${CMAKE_SYSTEM_VERSION} MATCHES "6.2") set (BINARY_PLATFORM "${BINARY_PLATFORM} 8") elseif (${CMAKE_SYSTEM_VERSION} MATCHES "6.3") set (BINARY_PLATFORM "${BINARY_PLATFORM} 10") endif () if (CMAKE_C_COMPILER_ID MATCHES "Intel") set (BINARY_PLATFORM "${BINARY_PLATFORM} Intel") if (${CMAKE_C_COMPILER_VERSION} MATCHES "^17.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using Intel 17") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^18.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using Intel 18") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using Intel 19") else () set (BINARY_PLATFORM "${BINARY_PLATFORM}, using Intel ${CMAKE_C_COMPILER_VERSION}") endif () elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC") set (BINARY_PLATFORM "${BINARY_PLATFORM} ${MSVC_C_ARCHITECTURE_ID}") if (${CMAKE_C_COMPILER_VERSION} MATCHES "^16.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2010") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^15.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2008") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^17.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2012") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^18.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2013") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.*") if (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.0.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2015") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.1.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2017") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.2.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2019") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.3.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2022") elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "^19.4.*") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2022") else () set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO ????") endif () else () set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO ${CMAKE_C_COMPILER_VERSION}") endif () endif () elseif (APPLE) set (BINARY_EXAMPLE_ENDING "tar.gz") set (BINARY_COMPRESS_ENDING "tar.gz") set (BINARY_INSTALL_ENDING "sh") # if packaging changes - use dmg set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}") else () set (BINARY_EXAMPLE_ENDING "tar.gz") set (BINARY_COMPRESS_ENDING "tar.gz") set (BINARY_INSTALL_ENDING "sh/deb/rpm") set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}") set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}") endif () if (target_fortran) set (BINARY_PLATFORM "${BINARY_PLATFORM} / ${CMAKE_Fortran_COMPILER_ID} Fortran") endif () if (HDF4_ONLY_SHARED_LIBS) set (LIB_TYPE "Shared") elseif (BUILD_SHARED_LIBS) set (LIB_TYPE "Static and Shared") else () set (LIB_TYPE "Static") endif () configure_file ( ${HDF_RESOURCES_DIR}/README.txt.cmake.in ${CMAKE_BINARY_DIR}/README.txt @ONLY ) endmacro () macro (HDFTEST_COPY_FILE src dest target) add_custom_command( OUTPUT "${dest}" COMMAND "${CMAKE_COMMAND}" ARGS -E copy_if_different "${src}" "${dest}" DEPENDS "${src}" ) list (APPEND ${target}_list "${dest}") endmacro () macro (HDF_DIR_PATHS package_prefix) option (HDF4_USE_GNU_DIRS "ON to use GNU Coding Standard install directory variables, OFF to use historical settings" OFF) if (HDF4_USE_GNU_DIRS) include(GNUInstallDirs) if (NOT ${package_prefix}_INSTALL_BIN_DIR) set (${package_prefix}_INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR}) endif () if (NOT ${package_prefix}_INSTALL_LIB_DIR) set (${package_prefix}_INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR}) endif () if (NOT ${package_prefix}_INSTALL_JAR_DIR) set (${package_prefix}_INSTALL_JAR_DIR ${CMAKE_INSTALL_LIBDIR}) endif () if (NOT ${package_prefix}_INSTALL_INCLUDE_DIR) set (${package_prefix}_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) endif () if (NOT ${package_prefix}_INSTALL_MODULE_DIR) set (${package_prefix}_INSTALL_MODULE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/mod) endif () if (NOT ${package_prefix}_INSTALL_DATA_DIR) set (${package_prefix}_INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}) endif () if (NOT ${package_prefix}_INSTALL_CMAKE_DIR) set (${package_prefix}_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake) endif () if (NOT ${package_prefix}_INSTALL_DOC_DIR) set (${package_prefix}_INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}) endif () message(STATUS "GNU: ${${package_prefix}_INSTALL_DOC_DIR}") endif () if (APPLE) option (${package_prefix}_BUILD_FRAMEWORKS "ON to build as frameworks libraries, OFF to build according to BUILD_SHARED_LIBS" OFF) endif () if (NOT ${package_prefix}_INSTALL_BIN_DIR) set (${package_prefix}_INSTALL_BIN_DIR bin) endif () if (NOT ${package_prefix}_INSTALL_LIB_DIR) if (APPLE) if (${package_prefix}_BUILD_FRAMEWORKS) set (${package_prefix}_INSTALL_JAR_DIR ../Java) else () set (${package_prefix}_INSTALL_JAR_DIR lib) endif () set (${package_prefix}_INSTALL_FMWK_DIR ${CMAKE_INSTALL_FRAMEWORK_PREFIX}) else () set (${package_prefix}_INSTALL_JAR_DIR lib) endif () set (${package_prefix}_INSTALL_LIB_DIR lib) endif () if (NOT ${package_prefix}_INSTALL_INCLUDE_DIR) set (${package_prefix}_INSTALL_INCLUDE_DIR include) endif () if (NOT ${package_prefix}_INSTALL_MODULE_DIR) set (${package_prefix}_INSTALL_MODULE_DIR mod) endif () if (NOT ${package_prefix}_INSTALL_DATA_DIR) if (NOT MSVC) if (APPLE) if (${package_prefix}_BUILD_FRAMEWORKS) set (${package_prefix}_INSTALL_EXTRA_DIR ../SharedSupport) else () set (${package_prefix}_INSTALL_EXTRA_DIR share) endif () set (${package_prefix}_INSTALL_FWRK_DIR ${CMAKE_INSTALL_FRAMEWORK_PREFIX}) endif () set (${package_prefix}_INSTALL_DATA_DIR share) else () set (${package_prefix}_INSTALL_DATA_DIR ".") endif () endif () if (NOT ${package_prefix}_INSTALL_CMAKE_DIR) set (${package_prefix}_INSTALL_CMAKE_DIR cmake) endif () if (NOT ${package_prefix}_INSTALL_DOC_DIR) set (${package_prefix}_INSTALL_DOC_DIR ${${package_prefix}_INSTALL_DATA_DIR}) endif () message(STATUS "Final: ${${package_prefix}_INSTALL_DOC_DIR}") # Append the needed INSTALL_RPATH for HDF Standard binary packages if (APPLE) list (APPEND CMAKE_INSTALL_RPATH "@loader_path/../${${package_prefix}_INSTALL_LIB_DIR}" "@loader_path/" ) else () list (APPEND CMAKE_INSTALL_RPATH "\$ORIGIN/../${${package_prefix}_INSTALL_LIB_DIR}:\$ORIGIN/") endif () if (DEFINED ADDITIONAL_CMAKE_PREFIX_PATH AND EXISTS "${ADDITIONAL_CMAKE_PREFIX_PATH}") set (CMAKE_PREFIX_PATH ${ADDITIONAL_CMAKE_PREFIX_PATH} ${CMAKE_PREFIX_PATH}) endif () #set the default debug suffix for all library targets if(NOT CMAKE_DEBUG_POSTFIX) if (WIN32) set (CMAKE_DEBUG_POSTFIX "_D") else () set (CMAKE_DEBUG_POSTFIX "_debug") endif () endif () SET_HDF_BUILD_TYPE() SET_HDF_OUTPUT_DIRS(${package_prefix}) include (FetchContent) endmacro () macro (ADD_H4_FLAGS h4_flag_var infile) file (STRINGS ${infile} TEST_FLAG_STREAM) list (LENGTH TEST_FLAG_STREAM len_flag) if (len_flag GREATER 0) math (EXPR _FP_LEN "${len_flag} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET TEST_FLAG_STREAM ${line} str_flag) string (REGEX REPLACE "^#.*" "" str_flag "${str_flag}") if (str_flag) list (APPEND ${h4_flag_var} "${str_flag}") endif () endforeach () endif () endmacro () ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/HDFUseFortran.cmake������������������������������������������������������0000664�0000000�0000000�00000010425�15030617045�0020772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file provides functions for Fortran support. # #------------------------------------------------------------------------------- enable_language (Fortran) set (HDF_PREFIX "H4") include (CheckFortranSourceRuns) include (CheckFortranSourceCompiles) #------------------------------------------------------------------------------- # Fix Fortran flags if we are compiling statically on Windows using # Windows_MT.cmake from config/cmake/UserMacros #------------------------------------------------------------------------------- if (BUILD_STATIC_CRT_LIBS) TARGET_STATIC_CRT_FLAGS () endif () #----------------------------------------------------------------------------- # Detect name mangling convention used between Fortran and C #----------------------------------------------------------------------------- include (FortranCInterface) #----------------------------------------------------------------------------- # Verify that the Fortran and C/C++ compilers work together #----------------------------------------------------------------------------- FortranCInterface_VERIFY() FortranCInterface_HEADER ( ${CMAKE_BINARY_DIR}/F77Mangle.h MACRO_NAMESPACE "H4_F77_" SYMBOL_NAMESPACE "H4_F77_" SYMBOLS mysub mymod:my_sub ) file (STRINGS ${CMAKE_BINARY_DIR}/F77Mangle.h CONTENTS REGEX "H4_F77_GLOBAL\\(.*,.*\\) +(.*)") string (REGEX MATCH "H4_F77_GLOBAL\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) set (H4_F77_FUNC "H4_F77_FUNC(name,NAME) ${CMAKE_MATCH_1}") file (STRINGS ${CMAKE_BINARY_DIR}/F77Mangle.h CONTENTS REGEX "H4_F77_GLOBAL_\\(.*,.*\\) +(.*)") string (REGEX MATCH "H4_F77_GLOBAL_\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) set (H4_F77_FUNC_ "H4_F77_FUNC_(name,NAME) ${CMAKE_MATCH_1}") #test code source set (SIZEOF_CODE " PROGRAM main i = sizeof(x) END PROGRAM " ) set (C_SIZEOF_CODE " PROGRAM main USE ISO_C_BINDING INTEGER(C_INT) :: a INTEGER(C_SIZE_T) :: result result = c_sizeof(a) END PROGRAM " ) set (STORAGE_SIZE_CODE " PROGRAM main INTEGER :: a INTEGER :: result result = storage_size(a) END PROGRAM " ) set (ISO_FORTRAN_ENV_CODE " PROGRAM main USE, INTRINSIC :: ISO_FORTRAN_ENV END PROGRAM " ) set (REALISNOTDOUBLE_CODE " MODULE type_mod INTERFACE h4t MODULE PROCEDURE h4t_real MODULE PROCEDURE h4t_dble END INTERFACE CONTAINS SUBROUTINE h4t_real(r) REAL :: r END SUBROUTINE h4t_real SUBROUTINE h4t_dble(d) DOUBLE PRECISION :: d END SUBROUTINE h4t_dble END MODULE type_mod PROGRAM main USE type_mod REAL :: r DOUBLE PRECISION :: d CALL h4t(r) CALL h4t(d) END PROGRAM main " ) set (ISO_C_BINDING_CODE " PROGRAM main USE iso_c_binding IMPLICIT NONE TYPE(C_PTR) :: ptr TYPE(C_FUNPTR) :: funptr INTEGER(C_INT64_T) :: c_int64_type CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr ptr = C_LOC(ichr(1:1)) END PROGRAM " ) if (HDF4_REQUIRED_LIBRARIES) set (CMAKE_REQUIRED_LIBRARIES "${HDF4_REQUIRED_LIBRARIES}") endif () check_fortran_source_compiles (${SIZEOF_CODE} ${HDF_PREFIX}_FORTRAN_HAVE_SIZEOF SRC_EXT f90) check_fortran_source_compiles (${C_SIZEOF_CODE} ${HDF_PREFIX}_FORTRAN_HAVE_C_SIZEOF SRC_EXT f90) check_fortran_source_compiles (${STORAGE_SIZE_CODE} ${HDF_PREFIX}_FORTRAN_HAVE_STORAGE_SIZE SRC_EXT f90) check_fortran_source_compiles (${ISO_FORTRAN_ENV_CODE} ${HDF_PREFIX}_HAVE_ISO_FORTRAN_ENV SRC_EXT f90) check_fortran_source_compiles (${REALISNOTDOUBLE_CODE} ${HDF_PREFIX}_FORTRAN_DEFAULT_REAL_NOT_DOUBLE SRC_EXT f90) check_fortran_source_compiles (${ISO_C_BINDING_CODE} ${HDF_PREFIX}_FORTRAN_HAVE_ISO_C_BINDING SRC_EXT f90) #----------------------------------------------------------------------------- # Add debug information (intel Fortran : JB) #----------------------------------------------------------------------------- if (CMAKE_Fortran_COMPILER MATCHES ifort) if (WIN32 AND NOT MINGW) set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE STRING "flags" FORCE) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "flags" FORCE) endif () endif () �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016101�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/CMakeLists.txt������������������������������������������������������0000664�0000000�0000000�00000051730�15030617045�0020647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) PROJECT (JPEG C) #----------------------------------------------------------------------------- # Basic JPEG stuff here #----------------------------------------------------------------------------- set (JPEG_PACKAGE_EXT ${HDF_PACKAGE_EXT}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE}) if (MINGW) set (WINDOWS 1) # MinGW tries to imitate Windows endif () if (WINDOWS) set (HAVE_STDDEF_H 1) set (HAVE_SYS_TYPES_H 1) endif () set (HAVE_PROTOTYPES 1) # jpeg CHECK_INCLUDE_FILE_CONCAT ("sys/types.h" HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE_CONCAT ("stddef.h" HAVE_STDDEF_H) #---------------------------------------------------------------- # JPEG special check #---------------------------------------------------------------- CHECK_TYPE_SIZE ("unsigned char" HAVE_UNSIGNED_CHAR) CHECK_TYPE_SIZE ("unsigned short" HAVE_UNSIGNED_SHORT) CHECK_INCLUDE_FILE_CONCAT ("string.h" HAVE_STRING_H) CHECK_INCLUDE_FILE_CONCAT ("strings.h" HAVE_STRINGS_H) CHECK_INCLUDE_FILE_CONCAT ("stdlib.h" HAVE_STDLIB_H) # _Bool type support CHECK_INCLUDE_FILE_CONCAT (stdbool.h HAVE_STDBOOL_H) #----------------------------------------------------------------------------- # Check for some functions that are used # CHECK_FUNCTION_EXISTS (void HAVE_VOID) CHECK_FUNCTION_EXISTS (const HAVE_CONST) #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (JPEG_RESOURCES_DIR ${HDF_RESOURCES_DIR}/JPEG) set (JPEG_SRC_DIR ${JPEG_SOURCE_DIR}) #----------------------------------------------------------------------------- # Set the core names of all the libraries #----------------------------------------------------------------------------- set (JPEG_LIB_CORENAME "jpeg") #----------------------------------------------------------------------------- # Set the true names of all the libraries if customized by external project #----------------------------------------------------------------------------- set (JPEG_LIB_NAME "${JPEG_EXTERNAL_LIB_PREFIX}${JPEG_LIB_CORENAME}") #----------------------------------------------------------------------------- # Set the target names of all the libraries #----------------------------------------------------------------------------- set (JPEG_LIB_TARGET "${JPEG_LIB_CORENAME}-static") #----------------------------------------------------------------------------- # parse the full version number from jpeglib.h and include in JPEG_FULL_VERSION #----------------------------------------------------------------------------- file (READ ${JPEG_SRC_DIR}/jpeglib.h _jpeglib_h_contents) string (REGEX REPLACE ".*#define[ \t]+JPEG_LIB_VERSION[ \t]+([0-9][0-9]*).*$" "\\1" JPEG_FULL_VERSION ${_jpeglib_h_contents}) string (REGEX REPLACE ".*#define[ \t]+JPEG_LIB_VERSION_MAJOR[ \t]+([0-9][0-9]*).*$" "\\1" JPEG_VERS_MAJOR ${_jpeglib_h_contents}) string (REGEX REPLACE ".*#define[ \t]+JPEG_LIB_VERSION_MINOR[ \t]+([0-9][0-9]*).*$" "\\1" JPEG_VERS_MINOR ${_jpeglib_h_contents}) #message (STATUS "VERSION: ${JPEG_FULL_VERSION}") #set (JPEG_VERS_MAJOR 9) #set (JPEG_VERS_MINOR 0) set (JPEG_VERS_RELEASE 0) #----------------------------------------------------------------------------- set (JPEG_PACKAGE "jpeg") set (JPEG_PACKAGE_NAME "JPEG") set (JPEG_PACKAGE_VERSION "${JPEG_VERS_MAJOR}.${JPEG_VERS_MINOR}") set (JPEG_PACKAGE_VERSION_MAJOR "${JPEG_VERS_MAJOR}.${JPEG_VERS_MINOR}") set (JPEG_PACKAGE_VERSION_MINOR "${JPEG_VERS_RELEASE}") set (JPEG_PACKAGE_STRING "${JPEG_PACKAGE_NAME} ${JPEG_PACKAGE_VERSION}") set (JPEG_PACKAGE_TARNAME "${JPEG_PACKAGE_NAME}${HDF_PACKAGE_EXT}") set (JPEG_PACKAGE_URL "http://www.hdfgroup.org") set (JPEG_PACKAGE_BUGREPORT "help@hdfgroup.org") set (JPEG_PACKAGE_SOVERSION "${JPEG_VERS_MAJOR}.${JPEG_VERS_MINOR}.${JPEG_VERS_RELEASE}") set (JPEG_PACKAGE_SOVERSION_MAJOR "${JPEG_VERS_MAJOR}") HDF_DIR_PATHS(${JPEG_PACKAGE_NAME}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects #----------------------------------------------------------------------------- if (NOT JPEG_EXPORTED_TARGETS) set (JPEG_EXPORTED_TARGETS "jpeg-targets") endif () #----------------------------------------------------------------------------- # To include a library in the list exported by the project AT BUILD TIME, # add it to this variable. This is NOT used by Make Install, but for projects # which include JPEG as a sub-project within their build tree #----------------------------------------------------------------------------- set_global_variable (JPEG_LIBRARIES_TO_EXPORT "") #----------------------------------------------------------------------------- # Mac OS X Options #----------------------------------------------------------------------------- if (JPEG_BUILD_FRAMEWORKS AND NOT BUILD_SHARED_LIBS) set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries") endif () set (CMAKE_POSITION_INDEPENDENT_CODE ON) #----------------------------------------------------------------------------- # When building utility executables that generate other (source) files : # we make use of the following variables defined in the root CMakeLists. # Certain systems may add /Debug or /Release to output paths # and we need to call the executable from inside the CMake configuration #----------------------------------------------------------------------------- set (EXE_EXT "") if (WIN32) set (EXE_EXT ".exe") add_compile_definitions (_BIND_TO_CURRENT_VCLIBS_VERSION=1) add_compile_definitions (_CRT_SECURE_NO_WARNINGS) add_compile_definitions (_CONSOLE) endif () if (MSVC) set (CMAKE_MFC_FLAG 0) endif () #----------------------------------------------------------------------------- set (MEMORYMGR jmemnobs) option (ENABLE_MEMORYMGR "Select memory manager" OFF) if (ENABLE_MEMORYMGR) set (MEMORYMGR jmemname) endif () #----------------------------------------------------------------------------- # All libs/tests/examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${JPEG_BINARY_DIR};${JPEG_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) set (JPEG_SRCS ${JPEG_SRC_DIR}/jaricom.c ${JPEG_SRC_DIR}/jcapimin.c ${JPEG_SRC_DIR}/jcapistd.c ${JPEG_SRC_DIR}/jcarith.c ${JPEG_SRC_DIR}/jccoefct.c ${JPEG_SRC_DIR}/jccolor.c ${JPEG_SRC_DIR}/jcdctmgr.c ${JPEG_SRC_DIR}/jchuff.c ${JPEG_SRC_DIR}/jcinit.c ${JPEG_SRC_DIR}/jcmainct.c ${JPEG_SRC_DIR}/jcmarker.c ${JPEG_SRC_DIR}/jcmaster.c ${JPEG_SRC_DIR}/jcomapi.c ${JPEG_SRC_DIR}/jcparam.c ${JPEG_SRC_DIR}/jcprepct.c ${JPEG_SRC_DIR}/jcsample.c ${JPEG_SRC_DIR}/jctrans.c ${JPEG_SRC_DIR}/jdapimin.c ${JPEG_SRC_DIR}/jdapistd.c ${JPEG_SRC_DIR}/jdarith.c ${JPEG_SRC_DIR}/jdatadst.c ${JPEG_SRC_DIR}/jdatasrc.c ${JPEG_SRC_DIR}/jdcoefct.c ${JPEG_SRC_DIR}/jdcolor.c ${JPEG_SRC_DIR}/jddctmgr.c ${JPEG_SRC_DIR}/jdhuff.c ${JPEG_SRC_DIR}/jdinput.c ${JPEG_SRC_DIR}/jdmainct.c ${JPEG_SRC_DIR}/jdmarker.c ${JPEG_SRC_DIR}/jdmaster.c ${JPEG_SRC_DIR}/jdmerge.c ${JPEG_SRC_DIR}/jdpostct.c ${JPEG_SRC_DIR}/jdsample.c ${JPEG_SRC_DIR}/jdtrans.c ${JPEG_SRC_DIR}/jerror.c ${JPEG_SRC_DIR}/jfdctflt.c ${JPEG_SRC_DIR}/jfdctfst.c ${JPEG_SRC_DIR}/jfdctint.c ${JPEG_SRC_DIR}/jidctflt.c ${JPEG_SRC_DIR}/jidctfst.c ${JPEG_SRC_DIR}/jidctint.c ${JPEG_SRC_DIR}/jquant1.c ${JPEG_SRC_DIR}/jquant2.c ${JPEG_SRC_DIR}/jutils.c ${JPEG_SRC_DIR}/jmemmgr.c ${JPEG_SRC_DIR}/${MEMORYMGR}.c ) set (JPEG_HDRS ${JPEG_SRC_DIR}/jdct.h ${JPEG_SRC_DIR}/jinclude.h ${JPEG_SRC_DIR}/jmemsys.h ${JPEG_SRC_DIR}/jpegint.h ${JPEG_SRC_DIR}/jversion.h ) set (JPEG_PUBLIC_HEADERS ${JPEG_SRC_DIR}/jerror.h ${JPEG_SRC_DIR}/jmorecfg.h ${JPEG_SRC_DIR}/jpeglib.h ) add_library (${JPEG_LIB_TARGET} STATIC ${JPEG_SRCS} ${JPEG_HDRS} ${JPEG_PUBLIC_HEADERS}) target_include_directories(${JPEG_LIB_TARGET} PRIVATE "${JPEG_SRC_DIR};${CMAKE_BINARY_DIR}") if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${JPEG_LIB_TARGET} PRIVATE -Wno-strict-prototypes) endif () if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${JPEG_LIB_TARGET} PRIVATE -Wno-deprecated-non-prototype -Wno-strict-prototypes) endif () if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${JPEG_LIB_TARGET} PRIVATE -Wno-implicit-function-declaration -Wno-typedef-redefinition) endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${JPEG_LIB_TARGET} PRIVATE -fmessage-length=0) endif () TARGET_C_PROPERTIES (${JPEG_LIB_TARGET} STATIC) target_link_libraries (${JPEG_LIB_TARGET} PRIVATE ${LINK_LIBS}) H4_SET_LIB_OPTIONS (${JPEG_LIB_TARGET} ${JPEG_LIB_NAME} STATIC 0) set_target_properties(${JPEG_LIB_TARGET} PROPERTIES PUBLIC_HEADER "" LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>" ) set_global_variable (JPEG_LIBRARIES_TO_EXPORT ${JPEG_LIB_TARGET}) set (install_targets ${JPEG_LIB_TARGET}) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (JPEG_EXPORTED_TARGETS) INSTALL_TARGET_PDB (${JPEG_LIB_TARGET} ${JPEG_INSTALL_BIN_DIR} libraries) install ( TARGETS ${install_targets} EXPORT ${JPEG_EXPORTED_TARGETS} LIBRARY DESTINATION ${JPEG_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${JPEG_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${JPEG_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${JPEG_INSTALL_FWRK_DIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${JPEG_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () #----------------------------------------------------------------------------- # Generate the jconfig.h file containing user settings needed by compilation #----------------------------------------------------------------------------- configure_file (${JPEG_RESOURCES_DIR}/jconfig.h.in ${JPEG_BINARY_DIR}/jconfig.h @ONLY) include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Check for Installation Utilities #----------------------------------------------------------------------------- if (WIN32) set (PF_ENV_EXT "(x86)") find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS") if(NOT CPACK_WIX_ROOT) file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT) endif () find_program (WIX_EXECUTABLE candle PATHS "${CPACK_WIX_ROOT}/bin") endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT JPEG_EXTERNALLY_CONFIGURED) install ( EXPORT ${JPEG_EXPORTED_TARGETS} DESTINATION ${JPEG_INSTALL_CMAKE_DIR} FILE ${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- if (NOT JPEG_EXTERNALLY_CONFIGURED) export ( TARGETS ${JPEG_LIBRARIES_TO_EXPORT} ${JPEG_LIB_DEPENDENCIES} FILE ${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} ) export (PACKAGE ${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}) endif () #----------------------------------------------------------------------------- # Set includes needed for build #----------------------------------------------------------------------------- set (JPEG_INCLUDES_BUILD_TIME ${JPEG_SRC_DIR} ${JPEG_BINARY_DIR} ) #----------------------------------------------------------------------------- # Set variables needed for installation #----------------------------------------------------------------------------- set (JPEG_VERSION_STRING ${JPEG_PACKAGE_VERSION}) set (JPEG_VERSION_MAJOR ${JPEG_PACKAGE_VERSION_MAJOR}) set (JPEG_VERSION_MINOR ${JPEG_PACKAGE_VERSION_MINOR}) #----------------------------------------------------------------------------- # Configure the jpeg-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${JPEG_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${JPEG_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${JPEG_RESOURCES_DIR}/jpeg-config.cmake.in "${JPEG_BINARY_DIR}/${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${JPEG_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the jpeg-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${JPEG_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${JPEG_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}" ) configure_package_config_file ( ${JPEG_RESOURCES_DIR}/jpeg-config.cmake.in "${JPEG_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${JPEG_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT JPEG_EXTERNALLY_CONFIGURED) install ( FILES ${JPEG_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-config.cmake DESTINATION ${JPEG_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the jpeg-config-version.cmake file for the install directory #----------------------------------------------------------------------------- if (NOT JPEG_EXTERNALLY_CONFIGURED) configure_file ( ${JPEG_RESOURCES_DIR}/jpeg-config-version.cmake.in ${JPEG_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-config-version.cmake @ONLY ) install ( FILES ${JPEG_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${JPEG_PACKAGE}${JPEG_PACKAGE_EXT}-config-version.cmake DESTINATION ${JPEG_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Check for Installation Utilities #----------------------------------------------------------------------------- if (WIN32) set (PF_ENV_EXT "(x86)") find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS") if(NOT CPACK_WIX_ROOT) file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT) endif() find_program (WIX_EXECUTABLE candle PATHS "${CPACK_WIX_ROOT}/bin") endif () #----------------------------------------------------------------------------- # Configure the README file for the binary package #----------------------------------------------------------------------------- configure_file (${JPEG_SOURCE_DIR}/README ${JPEG_BINARY_DIR}/JPEG_README @ONLY) #----------------------------------------------------------------------------- # Set the cpack variables #----------------------------------------------------------------------------- if (NOT JPEG_EXTERNALLY_CONFIGURED) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${JPEG_PACKAGE_NAME}") if (NOT WIN32 OR JPEG_VERS_SUBRELEASE MATCHES "^[0-9]+$") set (CPACK_PACKAGE_VERSION "${JPEG_PACKAGE_VERSION_STRING}") else () set (CPACK_PACKAGE_VERSION "${JPEG_PACKAGE_VERSION}") endif () set (CPACK_PACKAGE_VERSION_MAJOR "${JPEG_PACKAGE_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${JPEG_PACKAGE_VERSION_MINOR}") set (CPACK_PACKAGE_VERSION_PATCH "") set (CPACK_RESOURCE_FILE_LICENSE "${JPEG_BINARY_DIR}/JPEG_README") set (CPACK_PACKAGE_DESCRIPTION_FILE "${JPEG_BINARY_DIR}/JPEG_README") set (CPACK_RESOURCE_FILE_README "${JPEG_BINARY_DIR}/JPEG_README") set (CPACK_PACKAGE_RELOCATABLE TRUE) set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "jpeg9e Installation") set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${CPACK_PACKAGE_VERSION}") set (CPACK_GENERATOR "TGZ") if (WIN32) set (CPACK_GENERATOR "ZIP") if (NSIS_EXECUTABLE) list (APPEND CPACK_GENERATOR "NSIS") endif () # Installers for 32- vs. 64-bit CMake: # - Root install directory (displayed to end user at installer-run time) # - "NSIS package/display name" (text used in the installer GUI) # - Registry key used to store info about the installation set (CPACK_NSIS_PACKAGE_NAME "${JPEG_PACKAGE_STRING}") if (CMAKE_CL_64) set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} (Win64)") else () set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") endif () set (CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}") set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${CPACK_PACKAGE_VERSION}") set (CPACK_NSIS_CONTACT "${JPEG_PACKAGE_BUGREPORT}") set (CPACK_NSIS_MODIFY_PATH ON) set (CPACK_NSIS_PACKAGE_NAME "JPEG ${JPEG_PACKAGE_VERSION}") if (WIX_EXECUTABLE) list (APPEND CPACK_GENERATOR "WIX") endif () #WiX variables set (CPACK_WIX_UNINSTALL "1") set (CPACK_RESOURCE_FILE_LICENSE "${JPEG_BINARY_DIR}/JPEG_README") elseif (APPLE) list (APPEND CPACK_GENERATOR "STGZ") list (APPEND CPACK_GENERATOR "DragNDrop") set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}") #set (CPACK_PACKAGE_ICON "${JPEG_RESOURCES_DIR}/hdf.icns") option (JPEG_PACK_MACOSX_FRAMEWORK "Package the JPEG Library in a Framework" OFF) if (JPEG_PACK_MACOSX_FRAMEWORK AND JPEG_BUILD_FRAMEWORKS) list (APPEND CPACK_GENERATOR "Bundle") set (CPACK_BUNDLE_NAME "${JPEG_PACKAGE_STRING}") set (CPACK_BUNDLE_LOCATION "/") # make sure CMAKE_INSTALL_PREFIX ends in / set (CMAKE_INSTALL_PREFIX "/${CPACK_BUNDLE_NAME}.framework/Versions/${CPACK_PACKAGE_VERSION}/${CPACK_PACKAGE_NAME}/") set (CPACK_SHORT_VERSION_STRING "${CPACK_PACKAGE_VERSION}") #----------------------------------------------------------------------------- # Configure the Info.plist file for the install bundle #----------------------------------------------------------------------------- configure_file ( ${JPEG_RESOURCES_DIR}/CPack.Info.plist.in ${JPEG_BINARY_DIR}/CMakeFiles/Info.plist @ONLY ) configure_file ( ${JPEG_RESOURCES_DIR}/PkgInfo.in ${JPEG_BINARY_DIR}/CMakeFiles/PkgInfo @ONLY ) install ( FILES ${JPEG_BINARY_DIR}/CMakeFiles/PkgInfo DESTINATION .. ) endif () else () list (APPEND CPACK_GENERATOR "STGZ") set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}") set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) set (CPACK_DEBIAN_PACKAGE_SECTION "Libraries") set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${JPEG_PACKAGE_BUGREPORT}") # list (APPEND CPACK_GENERATOR "RPM") set (CPACK_RPM_PACKAGE_RELEASE "1") set (CPACK_RPM_COMPONENT_INSTALL ON) set (CPACK_RPM_PACKAGE_RELOCATABLE ON) endif () # By default, do not warn when built on machines using only VS Express: if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) endif () include (InstallRequiredSystemLibraries) set (CPACK_INSTALL_CMAKE_PROJECTS "${JPEG_BINARY_DIR};JPEG;libraries;/") set (CPACK_INSTALL_CMAKE_PROJECTS "${JPEG_BINARY_DIR};JPEG;configinstall;/") set (CPACK_ALL_INSTALL_TYPES Full Developer User) set (CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything") set(CPACK_COMPONENTS_ALL libraries headers documents configinstall) include (CPack) cpack_add_component_group(Runtime) cpack_add_component (libraries DISPLAY_NAME "JPEG Libraries" REQUIRED GROUP Runtime INSTALL_TYPES Full Developer User ) cpack_add_component (configinstall DISPLAY_NAME "JPEG CMake files" DEPENDS libraries GROUP Development INSTALL_TYPES Full Developer User ) endif () ����������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/CPack.Info.plist.in�������������������������������������������������0000664�0000000�0000000�00000001627�15030617045�0021444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>@CPACK_PACKAGE_FILE_NAME@</string> <key>CFBundleIconFile</key> <string>@CPACK_BUNDLE_ICON@</string> <key>CFBundleIdentifier</key> <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>@CPACK_PACKAGE_VERSIO@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_SHORT_VERSION_STRING@</string> <key>CSResourcesFileMapped</key> <true/> </dict> </plist> ���������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/jconfig.h.in��������������������������������������������������������0000664�0000000�0000000�00000014122�15030617045�0020276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * jconfig.txt * * Copyright (C) 1991-1994, Thomas G. Lane. * Modified 2009-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file documents the configuration options that are required to * customize the JPEG software for a particular system. * */ /* Does your compiler support function prototypes? * (If not, you also need to use ansi2knr, see install.txt) */ #cmakedefine HAVE_PROTOTYPES @HAVE_PROTOTYPES@ /* Does your compiler support the declaration "unsigned char" ? * How about "unsigned short" ? */ #cmakedefine HAVE_UNSIGNED_CHAR @HAVE_UNSIGNED_CHAR@ #cmakedefine HAVE_UNSIGNED_SHORT @HAVE_UNSIGNED_SHORT@ /* Define "void" as "char" if your compiler doesn't know about type void. * NOTE: be sure to define void such that "void *" represents the most general * pointer type, e.g., that returned by malloc(). */ /* #cmakedefine void char */ /* Define "const" as empty if your compiler doesn't know the "const" keyword. */ /* #cmakedefine const */ /* Define this if an ordinary "char" type is unsigned. * If you're not sure, leaving it undefined will work at some cost in speed. * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. */ #undef CHAR_IS_UNSIGNED /* Define this if your system has an ANSI-conforming <stddef.h> file. */ #cmakedefine HAVE_STDDEF_H @HAVE_STDDEF_H@ /* Define this if your system has an ANSI-conforming <stdlib.h> file. */ #cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@ /* Define to 1 if you have the <strings.h> header file. */ #cmakedefine HAVE_STRINGS_H @HAVE_STRINGS_H@ /* Define to 1 if you have the <string.h> header file. */ #cmakedefine HAVE_STRING_H @HAVE_STRING_H@ /* Define this if your system does not have an ANSI/SysV <string.h>, * but does have a BSD-style <strings.h>. */ #ifdef HAVE_STRING_H #undef NEED_BSD_STRINGS #elif HAVE_STRINGS_H #define NEED_BSD_STRINGS #endif /* Define this if your system does not provide typedef size_t in any of the * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in * <sys/types.h> instead. */ #cmakedefine NEED_SYS_TYPES_H @HAVE_SYS_TYPES_H@ /* For 80x86 machines, you need to define NEED_FAR_POINTERS, * unless you are using a large-data memory model or 80386 flat-memory mode. * On less brain-damaged CPUs this symbol must not be defined. * (Defining this symbol causes large data structures to be referenced through * "far" pointers and to be allocated with a special version of malloc.) */ #undef NEED_FAR_POINTERS /* Define this if your linker needs global names to be unique in less * than the first 15 characters. */ #undef NEED_SHORT_EXTERNAL_NAMES /* Although a real ANSI C compiler can deal perfectly well with pointers to * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you * actually get "missing structure definition" warnings or errors while * compiling the JPEG code. */ #undef INCOMPLETE_TYPES_BROKEN /* Define "boolean" as unsigned char, not enum, on Windows systems. */ #ifdef _WIN32 #ifndef HAVE_STDBOOL_H #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ typedef unsigned char boolean; #endif #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif #ifndef TRUE #define TRUE 1 #endif #else #include <stdbool.h> typedef bool boolean; #ifndef FALSE /* in case these macros already exist */ #define FALSE false /* values of boolean */ #endif #ifndef TRUE #define TRUE true #endif #endif #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ #endif /* * The following options affect code selection within the JPEG library, * but they don't need to be visible to applications using the library. * To minimize application namespace pollution, the symbols won't be * defined unless JPEG_INTERNALS has been defined. */ #ifdef JPEG_INTERNALS /* Define this if your compiler implements ">>" on signed values as a logical * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, * which is the normal and rational definition. */ #undef RIGHT_SHIFT_IS_UNSIGNED #endif /* JPEG_INTERNALS */ /* * The remaining options do not affect the JPEG library proper, * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). * Other applications can ignore these. */ #ifdef JPEG_CJPEG_DJPEG /* These defines indicate which image (non-JPEG) file formats are allowed. */ #define BMP_SUPPORTED /* BMP image file format */ #define GIF_SUPPORTED /* GIF image file format */ #define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ #undef RLE_SUPPORTED /* Utah RLE image file format */ #define TARGA_SUPPORTED /* Targa image file format */ /* Define this if you want to name both input and output files on the command * line, rather than using stdout and optionally stdin. You MUST do this if * your system can't cope with binary I/O to stdin/stdout. See comments at * head of cjpeg.c or djpeg.c. */ #if !defined(__APPLE__) #undef TWO_FILE_COMMANDLINE #else #define USE_CCOMMAND /* Command line reader for Macintosh */ #define TWO_FILE_COMMANDLINE /* Binary I/O thru stdin/stdout doesn't work */ #endif /* Define this if your system needs explicit cleanup of temporary files. * This is crucial under MS-DOS, where the temporary "files" may be areas * of extended memory; on most other systems it's not as important. */ #undef NEED_SIGNAL_CATCHER /* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). * This is necessary on systems that distinguish text files from binary files, * and is harmless on most systems that don't. If you have one of the rare * systems that complains about the "b" spec, define this symbol. */ #undef DONT_USE_B_MODE /* Define this if you want percent-done progress reports from cjpeg/djpeg. */ #undef PROGRESS_REPORT #endif /* JPEG_CJPEG_DJPEG */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/jpeg-config-version.cmake.in����������������������������������������0000664�0000000�0000000�00000003062�15030617045�0023364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # JPEG Version file for install directory #----------------------------------------------------------------------------- set (PACKAGE_VERSION "@JPEG_VERSION_STRING@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() if ("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "@JPEG_VERSION_MAJOR@") # exact match for version @JPEG_VERSION_MAJOR@.@JPEG_VERSION_MINOR@ if ("${PACKAGE_FIND_VERSION_MINOR}" STREQUAL "@JPEG_VERSION_MINOR@") # compatible with any version @JPEG_VERSION_MAJOR@.@JPEG_VERSION_MINOR@.x set (PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_FIND_VERSION_PATCH}" STREQUAL "@JPEG_VERSION_RELEASE@") set (PACKAGE_VERSION_EXACT TRUE) if ("${PACKAGE_FIND_VERSION_TWEAK}" STREQUAL "@JPEG_VERSION_SUBRELEASE@") # not using this yet endif () endif () else () set (PACKAGE_VERSION_COMPATIBLE FALSE) endif () endif () endif () # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") return() endif() # check that the installed version has the same 32/64bit-ness as the one which is currently searching: if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/JPEG/jpeg-config.cmake.in������������������������������������������������0000664�0000000�0000000�00000005124�15030617045�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # JPEG Config file for compiling against JPEG install directory #----------------------------------------------------------------------------- @PACKAGE_INIT@ string(TOUPPER @JPEG_PACKAGE@ JPEG_PACKAGE_NAME) set (${JPEG_PACKAGE_NAME}_VALID_COMPONENTS static shared) #----------------------------------------------------------------------------- # User Options #----------------------------------------------------------------------------- set (${JPEG_PACKAGE_NAME}_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) set (${JPEG_PACKAGE_NAME}_EXPORT_LIBRARIES @JPEG_LIBRARIES_TO_EXPORT@) #----------------------------------------------------------------------------- # Directories #----------------------------------------------------------------------------- set (${JPEG_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set (${JPEG_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@") set_and_check (${JPEG_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@") #----------------------------------------------------------------------------- # Version Strings #----------------------------------------------------------------------------- set (${JPEG_PACKAGE_NAME}_VERSION_STRING @JPEG_VERSION_STRING@) set (${JPEG_PACKAGE_NAME}_VERSION_MAJOR @JPEG_VERSION_MAJOR@) set (${JPEG_PACKAGE_NAME}_VERSION_MINOR @JPEG_VERSION_MINOR@) #----------------------------------------------------------------------------- # Don't include targets if this file is being picked up by another # project which has already build JPEG as a subproject #----------------------------------------------------------------------------- if (NOT TARGET "@JPEG_PACKAGE@") include (@PACKAGE_SHARE_INSTALL_DIR@/@JPEG_PACKAGE@@HDF_PACKAGE_EXT@-targets.cmake) endif () # Handle default component(static) : if (NOT ${JPEG_PACKAGE_NAME}_FIND_COMPONENTS) set (${JPEG_PACKAGE_NAME}_FIND_COMPONENTS static) set (${JPEG_PACKAGE_NAME}_FIND_REQUIRED_static true) endif () # Handle requested components: list (REMOVE_DUPLICATES ${JPEG_PACKAGE_NAME}_FIND_COMPONENTS) foreach (comp IN LISTS ${JPEG_PACKAGE_NAME}_FIND_COMPONENTS) list (FIND ${JPEG_PACKAGE_NAME}_EXPORT_LIBRARIES "@JPEG_LIB_CORENAME@-${comp}" HAVE_COMP) if (${HAVE_COMP} LESS 0) set (${JPEG_PACKAGE_NAME}_${comp}_FOUND 0) else () set (${JPEG_PACKAGE_NAME}_${comp}_FOUND 1) string(TOUPPER ${JPEG_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @JPEG_LIB_CORENAME@-${comp}) endif () endforeach () check_required_components (${JPEG_PACKAGE_NAME}) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016273�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/CMakeLists.txt����������������������������������������������������0000664�0000000�0000000�00000030616�15030617045�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) project (LIBAEC C) #----------------------------------------------------------------------------- # Basic LIBAEC stuff here #----------------------------------------------------------------------------- set (CMAKE_C_STANDARD 99) set (CMAKE_C_VISIBILITY_PRESET hidden) set (CMAKE_POSITION_INDEPENDENT_CODE ON) set (LIBAEC_PACKAGE_EXT ${HDF_PACKAGE_EXT}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE}) if (MINGW) set (WINDOWS 1) # MinGW tries to imitate Windows endif () if (WINDOWS) set (HAVE_SYS_STAT_H 1) set (HAVE_SYS_TYPES_H 1) endif () if (NOT WINDOWS) include (TestBigEndian) test_big_endian (WORDS_BIGENDIAN) endif () # Check for __builtin_clzll for faster decoding include (CheckCSourceCompiles) check_c_source_compiles( "int main(void)\n{return __builtin_clzll(1LL);}" HAVE_DECL___BUILTIN_CLZLL) if (NOT HAVE_DECL___BUILTIN_CLZLL) # With MSVC we can use _BitScanReverse64 check_c_source_compiles ( "int main(void){unsigned long foo; unsigned __int64 bar=1LL; return _BitScanReverse64(&foo, bar);}" HAVE_BSR64) endif () include (CheckSymbolExists) check_symbol_exists (snprintf "stdio.h" HAVE_SNPRINTF) if (NOT HAVE_SNPRINTF) check_symbol_exists (_snprintf "stdio.h" HAVE__SNPRINTF) check_symbol_exists (_snprintf_s "stdio.h" HAVE__SNPRINTF_S) endif () #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (LIBAEC_RESOURCES_DIR ${HDF_RESOURCES_DIR}/LIBAEC) set (LIBAEC_SRC_DIR ${LIBAEC_SOURCE_DIR}/src) set (LIBAEC_INC_DIR ${LIBAEC_SOURCE_DIR}/include) #----------------------------------------------------------------------------- # Set the core names of all the libraries #----------------------------------------------------------------------------- set (LIBAEC_LIB_CORENAME "aec") set (SZIP_LIB_CORENAME "szaec") #----------------------------------------------------------------------------- # Set the true names of all the libraries if customized by external project #----------------------------------------------------------------------------- set (LIBAEC_LIB_NAME "${LIBAEC_EXTERNAL_LIB_PREFIX}${LIBAEC_LIB_CORENAME}") set (SZIP_LIB_NAME "${LIBAEC_EXTERNAL_LIB_PREFIX}${SZIP_LIB_CORENAME}") #----------------------------------------------------------------------------- # Set the target names of all the libraries #----------------------------------------------------------------------------- set (LIBAEC_LIB_TARGET "${LIBAEC_LIB_CORENAME}-static") set (SZIP_LIB_TARGET "${SZIP_LIB_CORENAME}-static") set (libaec_VERS_MAJOR 1) set (libaec_VERS_MINOR 1) set (libaec_VERS_RELEASE 3) #----------------------------------------------------------------------------- set (LIBAEC_PACKAGE "libaec") set (LIBAEC_PACKAGE_NAME "LIBAEC") set (LIBAEC_PACKAGE_VERSION "${libaec_VERS_MAJOR}.${libaec_VERS_MINOR}") set (LIBAEC_PACKAGE_VERSION_MAJOR "${libaec_VERS_MAJOR}.${libaec_VERS_MINOR}") set (LIBAEC_PACKAGE_VERSION_MINOR "${libaec_VERS_RELEASE}") set (LIBAEC_PACKAGE_STRING "${LIBAEC_PACKAGE_NAME} ${LIBAEC_PACKAGE_VERSION}") set (LIBAEC_PACKAGE_TARNAME "${LIBAEC_PACKAGE_NAME}${LIBAEC_PACKAGE_EXT}") set (LIBAEC_PACKAGE_URL "http://www.hdfgroup.org") set (LIBAEC_PACKAGE_BUGREPORT "help@hdfgroup.org") set (LIBAEC_PACKAGE_SOVERSION "${libaec_VERS_MAJOR}.${libaec_VERS_MINOR}.${libaec_VERS_RELEASE}") set (LIBAEC_PACKAGE_SOVERSION_MAJOR "${libaec_VERS_MAJOR}") HDF_DIR_PATHS(${LIBAEC_PACKAGE_NAME}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects #----------------------------------------------------------------------------- if (NOT LIBAEC_EXPORTED_TARGETS) set (LIBAEC_EXPORTED_TARGETS "libaec-targets") endif () set_global_variable (LIBAEC_LIBRARIES_TO_EXPORT "") #----------------------------------------------------------------------------- # All libs/tests/examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "${LIBAEC_BINARY_DIR};${LIBAEC_SOURCE_DIR}/src;${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) if (MSVC) set (CMAKE_MFC_FLAG 0) set(CMAKE_DEBUG_POSTFIX "d") endif () set (EXE_EXT "") if (WIN32) set (EXE_EXT ".exe") add_compile_definitions (_BIND_TO_CURRENT_VCLIBS_VERSION=1) add_compile_definitions (_CRT_SECURE_NO_WARNINGS) add_compile_definitions (_CONSOLE) endif () #----------------------------------------------------------------------------- # Generate the aec_config.h file containing user settings needed by compilation #----------------------------------------------------------------------------- configure_file (${LIBAEC_RESOURCES_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) # Create libaec.h with current version information configure_file( "include/libaec.h.in" "${CMAKE_CURRENT_BINARY_DIR}/libaec.h") #----------------------------------------------------------------------------- # Define LIBAEC Library #----------------------------------------------------------------------------- set (LIBAEC_PUBLIC_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/libaec.h ) set(LIBAEC_SRCS ${LIBAEC_SRC_DIR}/encode.c ${LIBAEC_SRC_DIR}/encode_accessors.c ${LIBAEC_SRC_DIR}/decode.c ${LIBAEC_SRC_DIR}/vector.c ) add_library (${LIBAEC_LIB_TARGET} STATIC ${LIBAEC_SRCS} ${LIBAEC_PUBLIC_HEADERS}) target_include_directories (${LIBAEC_LIB_TARGET} PUBLIC "$<BUILD_INTERFACE:${LIBAEC_SOURCE_DIR}>" "$<BUILD_INTERFACE:${LIBAEC_SOURCE_DIR}/include>" "$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>" "$<INSTALL_INTERFACE:include>") if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0)) target_compile_options(${LIBAEC_LIB_TARGET} PRIVATE -Wno-deprecated-non-prototype) endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${LIBAEC_LIB_TARGET} PRIVATE -fmessage-length=0) endif () TARGET_C_PROPERTIES (${LIBAEC_LIB_TARGET} STATIC) H4_SET_LIB_OPTIONS (${LIBAEC_LIB_TARGET} ${LIBAEC_LIB_NAME} STATIC 0) set_target_properties (${LIBAEC_LIB_TARGET} PROPERTIES VERSION 0.0.12 SOVERSION 0 PUBLIC_HEADER "" LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>" ) set_global_variable (LIBAEC_LIBRARIES_TO_EXPORT ${LIBAEC_LIB_TARGET}) set (install_targets ${LIBAEC_LIB_TARGET}) set(SZIP_SRCS ${LIBAEC_SRC_DIR}/sz_compat.c ) set (SZIP_PUBLIC_HEADERS ${LIBAEC_INC_DIR}/szlib.h ) add_library (${SZIP_LIB_TARGET} STATIC ${SZIP_SRCS} ${SZIP_PUBLIC_HEADERS}) target_include_directories (${SZIP_LIB_TARGET} PUBLIC "${LIBAEC_SOURCE_DIR};${LIBAEC_SOURCE_DIR}/include;${CMAKE_BINARY_DIR}") TARGET_C_PROPERTIES (${SZIP_LIB_TARGET} STATIC) target_link_libraries (${SZIP_LIB_TARGET} PRIVATE ${LIBAEC_LIB_TARGET}) H4_SET_LIB_OPTIONS (${SZIP_LIB_TARGET} ${SZIP_LIB_NAME} STATIC 0) set_target_properties (${SZIP_LIB_TARGET} PROPERTIES VERSION 2.0.1 SOVERSION 2 PUBLIC_HEADER "" LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>" ) set_global_variable (LIBAEC_LIBRARIES_TO_EXPORT "${LIBAEC_LIBRARIES_TO_EXPORT};${SZIP_LIB_TARGET}") set (install_targets ${install_targets} ${SZIP_LIB_TARGET}) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (LIBAEC_EXPORTED_TARGETS) INSTALL_TARGET_PDB (${LIBAEC_LIB_TARGET} ${LIBAEC_INSTALL_BIN_DIR} libraries) install ( TARGETS ${install_targets} EXPORT ${LIBAEC_EXPORTED_TARGETS} LIBRARY DESTINATION ${LIBAEC_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${LIBAEC_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${LIBAEC_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${LIBAEC_INSTALL_FWRK_DIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${LIBAEC_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Set includes needed for build #----------------------------------------------------------------------------- set (LIBAEC_INCLUDES_BUILD_TIME ${LIBAEC_SRC_DIR} ${LIBAEC_INC_DIR} ${LIBAEC_BINARY_DIR} ) #----------------------------------------------------------------------------- # Set variables needed for installation #----------------------------------------------------------------------------- set (LIBAEC_VERSION_STRING ${LIBAEC_PACKAGE_VERSION}) set (LIBAEC_VERSION_MAJOR ${LIBAEC_PACKAGE_VERSION_MAJOR}) set (LIBAEC_VERSION_MINOR ${LIBAEC_PACKAGE_VERSION_MINOR}) #----------------------------------------------------------------------------- # Configure the libaec-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${LIBAEC_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LIBAEC_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${LIBAEC_RESOURCES_DIR}/libaec-config.cmake.in "${LIBAEC_BINARY_DIR}/${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${LIBAEC_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the libaec-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${LIBAEC_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIBAEC_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}") configure_package_config_file ( ${LIBAEC_RESOURCES_DIR}/libaec-config.cmake.in "${LIBAEC_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-config.cmake" INSTALL_DESTINATION "${LIBAEC_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT LIBAEC_EXTERNALLY_CONFIGURED) install ( FILES ${LIBAEC_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-config.cmake DESTINATION ${LIBAEC_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the libaec-config-version.cmake file for the install directory #----------------------------------------------------------------------------- if (NOT LIBAEC_EXTERNALLY_CONFIGURED) configure_file ( ${LIBAEC_RESOURCES_DIR}/libaec-config-version.cmake.in ${LIBAEC_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-config-version.cmake @ONLY ) install ( FILES ${LIBAEC_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-config-version.cmake DESTINATION ${LIBAEC_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT LIBAEC_EXTERNALLY_CONFIGURED) install ( EXPORT ${LIBAEC_EXPORTED_TARGETS} DESTINATION ${LIBAEC_INSTALL_CMAKE_DIR} FILE ${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- if (NOT LIBAEC_EXTERNALLY_CONFIGURED) export ( TARGETS ${LIBAEC_LIBRARIES_TO_EXPORT} ${LIBAEC_LIB_DEPENDENCIES} FILE ${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} ) export (PACKAGE ${LIBAEC_PACKAGE}${LIBAEC_PACKAGE_EXT}) endif () ������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/CPack.Info.plist.in�����������������������������������������������0000664�0000000�0000000�00000001630�15030617045�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>@CPACK_PACKAGE_FILE_NAME@</string> <key>CFBundleIconFile</key> <string>@CPACK_BUNDLE_ICON@</string> <key>CFBundleIdentifier</key> <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>@CPACK_PACKAGE_VERSION@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_SHORT_VERSION_STRING@</string> <key>CSResourcesFileMapped</key> <true/> </dict> </plist> ��������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/config.h.in�������������������������������������������������������0000664�0000000�0000000�00000000263�15030617045�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#cmakedefine WORDS_BIGENDIAN #cmakedefine01 HAVE_DECL___BUILTIN_CLZLL #cmakedefine HAVE_BSR64 #cmakedefine HAVE_SNPRINTF #cmakedefine HAVE__SNPRINTF #cmakedefine HAVE__SNPRINTF_S ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/libaec-config-version.cmake.in������������������������������������0000664�0000000�0000000�00000001074�15030617045�0024051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������set(PACKAGE_VERSION_MAJOR @PROJECT_VERSION_MAJOR@) set(PACKAGE_VERSION_MINOR @PROJECT_VERSION_MINOR@) set(PACKAGE_VERSION_PATCH @PROJECT_VERSION_PATCH@) set(PACKAGE_VERSION @PROJECT_VERSION@) # Check whether the requested PACKAGE_FIND_VERSION is compatible if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION OR PACKAGE_VERSION_MAJOR GREATER PACKAGE_FIND_VERSION_MAJOR) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_EXACT TRUE) endif() endif() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/LIBAEC/libaec-config.cmake.in��������������������������������������������0000664�0000000�0000000�00000006271�15030617045�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libaec-config.cmake # ---------------- # # Finds the AEC library, specify the starting search path in libaec_ROOT. # # Static vs. shared # ----------------- # To make use of the static library instead of the shared one, one needs # to set the variable libaec_USE_STATIC_LIBS to ON before calling find_package. # Example: # set(libaec_USE_STATIC_LIBS ON) # find_package(libaec CONFIG) # # This will define the following variables: # # libaec_FOUND - True if the system has the AEC library. # libaec_VERSION - The version of the AEC library which was found. # SZIP_FOUND - True if the system has the SZIP library. # SZIP_VERSION - The version of the SZIP library which was found. # SZIP_LIBRARIES - All the required libraries to make use of SZIP. # # and the following imported targets: # # libaec::aec - The AEC library. # libaec::sz - The SZIP compatible version of the AEC library. find_path(libaec_INCLUDE_DIR NAMES libaec.h DOC "AEC include directory") find_path(SZIP_INCLUDE_DIR NAMES szlib.h DOC "SZIP include directory") if (libaec_USE_STATIC_LIBS) if (MSVC) find_library(libaec_LIBRARY NAMES aec-static.lib DOC "AEC library") find_library(SZIP_LIBRARY NAMES szip-static.lib DOC "SZIP compatible version of the AEC library") else () find_library(libaec_LIBRARY NAMES libaec.a DOC "AEC library") find_library(SZIP_LIBRARY NAMES libsz.a DOC "SZIP compatible version of the AEC library") endif () else () find_library(libaec_LIBRARY NAMES aec DOC "AEC library") find_library(SZIP_LIBRARY NAMES sz szip DOC "SZIP compatible version of the AEC library") endif () # Check version here if (libaec_INCLUDE_DIR AND libaec_LIBRARY) set(libaec_VERSION "@PROJECT_VERSION@") set(SZIP_VERSION "2.0.1") endif () include(FindPackageHandleStandardArgs) set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG "${CMAKE_CURRENT_LIST_FILE}") find_package_handle_standard_args(libaec FOUND_VAR libaec_FOUND REQUIRED_VARS libaec_LIBRARY libaec_INCLUDE_DIR SZIP_LIBRARY SZIP_INCLUDE_DIR VERSION_VAR libaec_VERSION CONFIG_MODE ) if (libaec_FOUND) if (libaec_USE_STATIC_LIBS) add_library(libaec::aec STATIC IMPORTED) else () add_library(libaec::aec SHARED IMPORTED) target_compile_definitions(libaec::aec INTERFACE LIBAEC_SHARED) if (MSVC) set_target_properties(libaec::aec PROPERTIES IMPORTED_IMPLIB "${libaec_LIBRARY}" ) endif () endif () set_target_properties(libaec::aec PROPERTIES IMPORTED_LOCATION "${libaec_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${libaec_INCLUDE_DIR}" ) # SZIP if (libaec_USE_STATIC_LIBS) add_library(libaec::sz STATIC IMPORTED) else () add_library(libaec::sz SHARED IMPORTED) target_compile_definitions(libaec::sz INTERFACE LIBAEC_SHARED) if (MSVC) set_target_properties(libaec::sz PROPERTIES IMPORTED_IMPLIB "${SZIP_LIBRARY}" ) endif () endif () set_target_properties(libaec::sz PROPERTIES IMPORTED_LOCATION "${SZIP_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${SZIP_INCLUDE_DIR}" ) # Set SZIP variables. set(SZIP_FOUND TRUE) set(SZIP_LIBRARIES "${SZIP_LIBRARY}") endif () mark_as_advanced( libaec_LIBRARY libaec_INCLUDE_DIR SZIP_LIBRARY SZIP_INCLUDE_DIR ) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/NSIS.InstallOptions.ini.in�����������������������������������������������0000664�0000000�0000000�00000001221�15030617045�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Settings] NumFields=5 [Field 1] Type=label Text=By default the @CPACK_PACKAGE_NAME@ bin directory is added to the system PATH. This allows shared library (dll) discovery (if installed) and running HDF4 tools from the command line. Left=0 Right=-1 Top=0 Bottom=20 [Field 2] Type=radiobutton Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH Left=0 Right=-1 Top=30 Bottom=40 State=0 [Field 3] Type=radiobutton Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users Left=0 Right=-1 Top=40 Bottom=50 State=1 [Field 4] Type=radiobutton Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user Left=0 Right=-1 Top=50 Bottom=60 State=0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/NSIS.template.in���������������������������������������������������������0000664�0000000�0000000�00000067414�15030617045�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������; CPack install script designed for a nmake build ;-------------------------------- ; You must define these values !define VERSION "@CPACK_PACKAGE_VERSION@" !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" ;-------------------------------- ;Variables Var MUI_TEMP Var STARTMENU_FOLDER Var SV_ALLUSERS Var START_MENU Var DO_NOT_ADD_TO_PATH Var ADD_TO_PATH_ALL_USERS Var ADD_TO_PATH_CURRENT_USER Var INSTALL_DESKTOP Var IS_DEFAULT_INSTALLDIR ;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;Default installation folder InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" ;-------------------------------- ;General ;Name and file Name "@CPACK_NSIS_PACKAGE_NAME@" OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" ;Set compression SetCompressor @CPACK_NSIS_COMPRESSOR@ @CPACK_NSIS_DEFINES@ !include Sections.nsh ;--- Component support macros: --- ; The code for the add/remove functionality is from: ; http://nsis.sourceforge.net/Add/Remove_Functionality ; It has been modified slightly and extended to provide ; inter-component dependencies. Var AR_SecFlags Var AR_RegFlags @CPACK_NSIS_SECTION_SELECTED_VARS@ ; Loads the "selected" flag for the section named SecName into the ; variable VarName. !macro LoadSectionSelectedIntoVar SecName VarName SectionGetFlags ${${SecName}} $${VarName} IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits !macroend ; Loads the value of a variable... can we get around this? !macro LoadVar VarName IntOp $R0 0 + $${VarName} !macroend ; Sets the value of a variable !macro StoreVar VarName IntValue IntOp $${VarName} 0 + ${IntValue} !macroend !macro InitSection SecName ; This macro reads component installed flag from the registry and ;changes checked state of the section on the components page. ;Input: section index constant name specified in Section command. ClearErrors ;Reading component status from registry ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" IfErrors "default_${SecName}" ;Status will stay default if registry value not found ;(component was never installed) IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit ; Note whether this component was installed before !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags IntOp $R0 $AR_RegFlags & $AR_RegFlags ;Writing modified flags SectionSetFlags ${${SecName}} $AR_SecFlags "default_${SecName}:" !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected !macroend !macro FinishSection SecName ; This macro reads section flag set by user and removes the section ;if it is not selected. ;Then it writes component installed flag to registry ;Input: section index constant name specified in Section command. SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags ;Checking lowest bit: IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} IntCmp $AR_SecFlags 1 "leave_${SecName}" ;Section is not selected: ;Calling Section uninstall macro and writing zero installed flag !insertmacro "Remove_${${SecName}}" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ "Installed" 0 Goto "exit_${SecName}" "leave_${SecName}:" ;Section is selected: WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ "Installed" 1 "exit_${SecName}:" !macroend !macro RemoveSection_CPack SecName ; This macro is used to call section's Remove_... macro ;from the uninstaller. ;Input: section index constant name specified in Section command. !insertmacro "Remove_${${SecName}}" !macroend ; Determine whether the selection of SecName changed !macro MaybeSelectionChanged SecName !insertmacro LoadVar ${SecName}_selected SectionGetFlags ${${SecName}} $R1 IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits ; See if the status has changed: IntCmp $R0 $R1 "${SecName}_unchanged" !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" !insertmacro "Deselect_required_by_${SecName}" goto "${SecName}_unchanged" "${SecName}_was_selected:" !insertmacro "Select_${SecName}_depends" "${SecName}_unchanged:" !macroend ;--- End of Add/Remove macros --- ;-------------------------------- ;Interface Settings !define MUI_HEADERIMAGE !define MUI_ABORTWARNING ;-------------------------------- ; path functions !verbose 3 !include "WinMessages.NSH" !verbose 4 ;---------------------------------------- ; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" ;---------------------------------------- !verbose 3 !include "WinMessages.NSH" !verbose 4 ;==================================================== ; get_NT_environment ; Returns: the selected environment ; Output : head of the stack ;==================================================== !macro select_NT_profile UN Function ${UN}select_NT_profile StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single DetailPrint "Selected environment for all users" Push "all" Return environment_single: DetailPrint "Selected environment for current user only." Push "current" Return FunctionEnd !macroend !insertmacro select_NT_profile "" !insertmacro select_NT_profile "un." ;---------------------------------------------------- !define NT_current_env 'HKCU "Environment"' !define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' !ifndef WriteEnvStr_RegKey !ifdef ALL_USERS !define WriteEnvStr_RegKey \ 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' !else !define WriteEnvStr_RegKey 'HKCU "Environment"' !endif !endif ; AddToPath - Adds the given dir to the search path. ; Input - head of the stack ; Note - Win9x systems requires reboot Function AddToPath Exch $0 Push $1 Push $2 Push $3 # don't add if the path doesn't exist IfFileExists "$0\*.*" "" AddToPath_done ReadEnvStr $1 PATH ; if the path is too long for a NSIS variable NSIS will return a 0 ; length string. If we find that, then warn and skip any path ; modification as it will trash the existing path. StrLen $2 $1 IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done CheckPathLength_ShowPathWarning: Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" Goto AddToPath_done CheckPathLength_Done: Push "$1;" Push "$0;" Call StrStr Pop $2 StrCmp $2 "" "" AddToPath_done Push "$1;" Push "$0\;" Call StrStr Pop $2 StrCmp $2 "" "" AddToPath_done GetFullPathName /SHORT $3 $0 Push "$1;" Push "$3;" Call StrStr Pop $2 StrCmp $2 "" "" AddToPath_done Push "$1;" Push "$3\;" Call StrStr Pop $2 StrCmp $2 "" "" AddToPath_done Call IsNT Pop $1 StrCmp $1 1 AddToPath_NT ; Not on NT StrCpy $1 $WINDIR 2 FileOpen $1 "$1\autoexec.bat" a FileSeek $1 -1 END FileReadByte $1 $2 IntCmp $2 26 0 +2 +2 # DOS EOF FileSeek $1 -1 END # write over EOF FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" FileClose $1 SetRebootFlag true Goto AddToPath_done AddToPath_NT: StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey ReadRegStr $1 ${NT_current_env} "PATH" Goto DoTrim ReadAllKey: ReadRegStr $1 ${NT_all_env} "PATH" DoTrim: StrCmp $1 "" AddToPath_NTdoIt Push $1 Call Trim Pop $1 StrCpy $0 "$1;$0" AddToPath_NTdoIt: StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey WriteRegExpandStr ${NT_current_env} "PATH" $0 Goto DoSend WriteAllKey: WriteRegExpandStr ${NT_all_env} "PATH" $0 DoSend: SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 AddToPath_done: Pop $3 Pop $2 Pop $1 Pop $0 FunctionEnd ; RemoveFromPath - Remove a given dir from the path ; Input: head of the stack Function un.RemoveFromPath Exch $0 Push $1 Push $2 Push $3 Push $4 Push $5 Push $6 IntFmt $6 "%c" 26 # DOS EOF Call un.IsNT Pop $1 StrCmp $1 1 unRemoveFromPath_NT ; Not on NT StrCpy $1 $WINDIR 2 FileOpen $1 "$1\autoexec.bat" r GetTempFileName $4 FileOpen $2 $4 w GetFullPathName /SHORT $0 $0 StrCpy $0 "SET PATH=%PATH%;$0" Goto unRemoveFromPath_dosLoop unRemoveFromPath_dosLoop: FileRead $1 $3 StrCpy $5 $3 1 -1 # read last char StrCmp $5 $6 0 +2 # if DOS EOF StrCpy $3 $3 -1 # remove DOS EOF so we can compare StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine StrCmp $3 "" unRemoveFromPath_dosLoopEnd FileWrite $2 $3 Goto unRemoveFromPath_dosLoop unRemoveFromPath_dosLoopRemoveLine: SetRebootFlag true Goto unRemoveFromPath_dosLoop unRemoveFromPath_dosLoopEnd: FileClose $2 FileClose $1 StrCpy $1 $WINDIR 2 Delete "$1\autoexec.bat" CopyFiles /SILENT $4 "$1\autoexec.bat" Delete $4 Goto unRemoveFromPath_done unRemoveFromPath_NT: StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey ReadRegStr $1 ${NT_current_env} "PATH" Goto unDoTrim unReadAllKey: ReadRegStr $1 ${NT_all_env} "PATH" unDoTrim: StrCpy $5 $1 1 -1 # copy last char StrCmp $5 ";" +2 # if last char != ; StrCpy $1 "$1;" # append ; Push $1 Push "$0;" Call un.StrStr ; Find `$0;` in $1 Pop $2 ; pos of our dir StrCmp $2 "" unRemoveFromPath_done ; else, it is in path # $0 - path to add # $1 - path var StrLen $3 "$0;" StrLen $4 $2 StrCpy $5 $1 -$4 # $5 is now the part before the path to remove StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove StrCpy $3 $5$6 StrCpy $5 $3 1 -1 # copy last char StrCmp $5 ";" 0 +2 # if last char == ; StrCpy $3 $3 -1 # remove last char StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey WriteRegExpandStr ${NT_current_env} "PATH" $3 Goto unDoSend unWriteAllKey: WriteRegExpandStr ${NT_all_env} "PATH" $3 unDoSend: SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 unRemoveFromPath_done: Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Uninstall stuff ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ########################################### # Utility Functions # ########################################### ;==================================================== ; IsNT - Returns 1 if the current system is NT, 0 ; otherwise. ; Output: head of the stack ;==================================================== ; IsNT ; no input ; output, top of the stack = 1 if NT or 0 if not ; ; Usage: ; Call IsNT ; Pop $R0 ; ($R0 at this point is 1 or 0) !macro IsNT un Function ${un}IsNT Push $0 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion StrCmp $0 "" 0 IsNT_yes ; we are not NT. Pop $0 Push 0 Return IsNT_yes: ; NT!!! Pop $0 Push 1 FunctionEnd !macroend !insertmacro IsNT "" !insertmacro IsNT "un." ; StrStr ; input, top of stack = string to search for ; top of stack-1 = string to search in ; output, top of stack (replaces with the portion of the string remaining) ; modifies no other variables. ; ; Usage: ; Push "this is a long ass string" ; Push "ass" ; Call StrStr ; Pop $R0 ; ($R0 at this point is "ass string") !macro StrStr un Function ${un}StrStr Exch $R1 ; st=haystack,old$R1, $R1=needle Exch ; st=old$R1,haystack Exch $R2 ; st=old$R1,old$R2, $R2=haystack Push $R3 Push $R4 Push $R5 StrLen $R3 $R1 StrCpy $R4 0 ; $R1=needle ; $R2=haystack ; $R3=len(needle) ; $R4=cnt ; $R5=tmp loop: StrCpy $R5 $R2 $R3 $R4 StrCmp $R5 $R1 done StrCmp $R5 "" done IntOp $R4 $R4 + 1 Goto loop done: StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 FunctionEnd !macroend !insertmacro StrStr "" !insertmacro StrStr "un." Function Trim ; Added by Pelaca Exch $R1 Push $R2 Loop: StrCpy $R2 "$R1" 1 -1 StrCmp "$R2" " " RTrim StrCmp "$R2" "$\n" RTrim StrCmp "$R2" "$\r" RTrim StrCmp "$R2" ";" RTrim GoTo Done RTrim: StrCpy $R1 "$R1" -1 Goto Loop Done: Pop $R2 Exch $R1 FunctionEnd Function ConditionalAddToRegisty Pop $0 Pop $1 StrCmp "$0" "" ConditionalAddToRegisty_EmptyString WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ "$1" "$0" ;MessageBox MB_OK "Set Registry: '$1' to '$0'" DetailPrint "Set install registry entry: '$1' to '$0'" ConditionalAddToRegisty_EmptyString: FunctionEnd ;-------------------------------- !ifdef CPACK_USES_DOWNLOAD Function DownloadFile IfFileExists $INSTDIR\* +2 CreateDirectory $INSTDIR Pop $0 ; Skip if already downloaded IfFileExists $INSTDIR\$0 0 +2 Return StrCpy $1 "@CPACK_DOWNLOAD_SITE@" try_again: NSISdl::download "$1/$0" "$INSTDIR\$0" Pop $1 StrCmp $1 "success" success StrCmp $1 "Cancelled" cancel MessageBox MB_OK "Download failed: $1" cancel: Return success: FunctionEnd !endif ;-------------------------------- ; Installation types @CPACK_NSIS_INSTALLATION_TYPES@ ;-------------------------------- ; Component sections @CPACK_NSIS_COMPONENT_SECTIONS@ ;-------------------------------- ; Define some macro setting for the gui @CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ @CPACK_NSIS_INSTALLER_ICON_CODE@ @CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ @CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" Page custom InstallOptionsPage !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER @CPACK_NSIS_PAGE_COMPONENTS@ !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;first language is the default language !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Welsh" ;-------------------------------- ;Reserve Files ;These files should be inserted before other files in the data block ;Keep these lines before any File command ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) ReserveFile "NSIS.InstallOptions.ini" !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;-------------------------------- ;Installer Sections Section "-Core installation" ;Use the entire tree produced by the INSTALL target. Keep the ;list of directories here in sync with the RMDir commands below. SetOutPath "$INSTDIR" @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ @CPACK_NSIS_FULL_INSTALL@ ;Store installation folder WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR ;Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" Push "DisplayName" Push "@CPACK_NSIS_DISPLAY_NAME@" Call ConditionalAddToRegisty Push "DisplayVersion" Push "@CPACK_PACKAGE_VERSION@" Call ConditionalAddToRegisty Push "Publisher" Push "@CPACK_PACKAGE_VENDOR@" Call ConditionalAddToRegisty Push "UninstallString" Push "$INSTDIR\Uninstall.exe" Call ConditionalAddToRegisty Push "NoRepair" Push "1" Call ConditionalAddToRegisty !ifdef CPACK_NSIS_ADD_REMOVE ;Create add/remove functionality Push "ModifyPath" Push "$INSTDIR\AddRemove.exe" Call ConditionalAddToRegisty !else Push "NoModify" Push "1" Call ConditionalAddToRegisty !endif ; Optional registration Push "DisplayIcon" Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" Call ConditionalAddToRegisty Push "HelpLink" Push "@CPACK_NSIS_HELP_LINK@" Call ConditionalAddToRegisty Push "URLInfoAbout" Push "@CPACK_NSIS_URL_INFO_ABOUT@" Call ConditionalAddToRegisty Push "Contact" Push "@CPACK_NSIS_CONTACT@" Call ConditionalAddToRegisty !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" @CPACK_NSIS_CREATE_ICONS@ @CPACK_NSIS_CREATE_ICONS_EXTRA@ CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" ;Read a value from an InstallOptions INI file !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" ; Write special uninstall registry entries Push "StartMenu" Push "$STARTMENU_FOLDER" Call ConditionalAddToRegisty Push "DoNotAddToPath" Push "$DO_NOT_ADD_TO_PATH" Call ConditionalAddToRegisty Push "AddToPathAllUsers" Push "$ADD_TO_PATH_ALL_USERS" Call ConditionalAddToRegisty Push "AddToPathCurrentUser" Push "$ADD_TO_PATH_CURRENT_USER" Call ConditionalAddToRegisty Push "InstallToDesktop" Push "$INSTALL_DESKTOP" Call ConditionalAddToRegisty !insertmacro MUI_STARTMENU_WRITE_END @CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ SectionEnd Section "-Add to path" Push $INSTDIR\bin StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 Call AddToPath doNotAddToPath: SectionEnd ;-------------------------------- ; Create custom pages Function InstallOptionsPage !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" FunctionEnd ;-------------------------------- ; determine admin versus local install Function un.onInit ClearErrors UserInfo::GetName IfErrors noLM Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" 0 +3 SetShellVarContext all ;MessageBox MB_OK 'User "$0" is in the Admin group' Goto done StrCmp $1 "Power" 0 +3 SetShellVarContext all ;MessageBox MB_OK 'User "$0" is in the Power Users group' Goto done noLM: ;Get installation folder from registry if available done: FunctionEnd ;--- Add/Remove callback functions: --- !macro SectionList MacroName ;This macro used to perform operation on multiple sections. ;List all of your components in following manner here. @CPACK_NSIS_COMPONENT_SECTION_LIST@ !macroend Section -FinishComponents ;Removes unselected components and writes component status to registry !insertmacro SectionList "FinishSection" !ifdef CPACK_NSIS_ADD_REMOVE ; Get the name of the installer executable System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' StrCpy $R3 $R0 ; Strip off the last 13 characters, to see if we have AddRemove.exe StrLen $R1 $R0 IntOp $R1 $R0 - 13 StrCpy $R2 $R0 13 $R1 StrCmp $R2 "AddRemove.exe" addremove_installed ; We're not running AddRemove.exe, so install it CopyFiles $R3 $INSTDIR\AddRemove.exe addremove_installed: !endif SectionEnd ;--- End of Add/Remove callback functions --- ;-------------------------------- ; Component dependencies Function .onSelChange !insertmacro SectionList MaybeSelectionChanged FunctionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" ReadRegStr $START_MENU SHCTX \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" ;MessageBox MB_OK "Start menu is in: $START_MENU" ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" ReadRegStr $INSTALL_DESKTOP SHCTX \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " @CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ ;Remove files we installed. ;Keep the list of directories here in sync with the File commands above. @CPACK_NSIS_DELETE_FILES@ @CPACK_NSIS_DELETE_DIRECTORIES@ !ifdef CPACK_NSIS_ADD_REMOVE ;Remove the add/remove program Delete "$INSTDIR\AddRemove.exe" !endif ;Remove the uninstaller itself. Delete "$INSTDIR\Uninstall.exe" DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" ;Remove the installation directory if it is empty. RMDir "$INSTDIR" ; Remove the registry entries. DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" ; Removes all optional components !insertmacro SectionList "RemoveSection_CPack" !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" @CPACK_NSIS_DELETE_ICONS@ @CPACK_NSIS_DELETE_ICONS_EXTRA@ ;Delete empty start menu parent directories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" startMenuDeleteLoop: ClearErrors RMDir $MUI_TEMP GetFullPathName $MUI_TEMP "$MUI_TEMP\.." IfErrors startMenuDeleteLoopDone StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop startMenuDeleteLoopDone: ; If the user changed the shortcut, then untinstall may not work. This should ; try to fix it. StrCpy $MUI_TEMP "$START_MENU" Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" @CPACK_NSIS_DELETE_ICONS_EXTRA@ ;Delete empty start menu parent directories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" secondStartMenuDeleteLoop: ClearErrors RMDir $MUI_TEMP GetFullPathName $MUI_TEMP "$MUI_TEMP\.." IfErrors secondStartMenuDeleteLoopDone StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop secondStartMenuDeleteLoopDone: DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" Push $INSTDIR\bin StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 Call un.RemoveFromPath doNotRemoveFromPath: SectionEnd ;-------------------------------- ; determine admin versus local install ; Is install for "AllUsers" or "JustMe"? ; Default to "JustMe" - set to "AllUsers" if admin or on Win9x ; This function is used for the very first "custom page" of the installer. ; This custom page does not show up visibly, but it executes prior to the ; first visible page and sets up $INSTDIR properly... ; Choose different default installation folder based on SV_ALLUSERS... ; "Program Files" for AllUsers, "My Documents" for JustMe... Function .onInit StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" StrCmp $0 "" inst MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ IDYES uninst IDNO inst Abort ;Run the uninstaller uninst: ClearErrors StrLen $2 "\Uninstall.exe" StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file IfErrors uninst_failed inst uninst_failed: MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." Abort inst: ; Reads components status for registry !insertmacro SectionList "InitSection" ; check to see if /D has been used to change ; the install directory by comparing it to the ; install directory that is expected to be the ; default StrCpy $IS_DEFAULT_INSTALLDIR 0 StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 StrCpy $IS_DEFAULT_INSTALLDIR 1 StrCpy $SV_ALLUSERS "JustMe" ; if default install dir then change the default ; if it is installed for JustMe StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" ClearErrors UserInfo::GetName IfErrors noLM Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" 0 +4 SetShellVarContext all ;MessageBox MB_OK 'User "$0" is in the Admin group' StrCpy $SV_ALLUSERS "AllUsers" Goto done StrCmp $1 "Power" 0 +4 SetShellVarContext all ;MessageBox MB_OK 'User "$0" is in the Power Users group' StrCpy $SV_ALLUSERS "AllUsers" Goto done noLM: StrCpy $SV_ALLUSERS "AllUsers" ;Get installation folder from registry if available done: StrCmp $SV_ALLUSERS "AllUsers" 0 +3 StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" noOptionsPage: FunctionEnd ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/PkgInfo.in���������������������������������������������������������������0000664�0000000�0000000�00000000011�15030617045�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������FMWK???? �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/README.txt.cmake.in������������������������������������������������������0000664�0000000�0000000�00000007504�15030617045�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@HDF4_PACKAGE_NAME@ version @HDF4_PACKAGE_VERSION_STRING@ ------------------------------------------------------------------------------ This directory contains the binary (release) distribution of @HDF4_PACKAGE_NAME@-@HDF4_PACKAGE_VERSION_MAJOR@.@HDF4_PACKAGE_VERSION_MINOR@ that was compiled on; @BINARY_PLATFORM@. It was built with the following options: -- @LIB_TYPE@ C/Fortran libraries -- SZIP (encoder enabled), ZLIB, and JPEG -- @LIB_TYPE@ HDF4 tools -- Java @Java_VERSION@ The contents of this directory are: COPYING - Copyright notice README.txt - This file @HDF4_PACKAGE_NAME@-@HDF4_PACKAGE_VERSION@-@BINARY_SYSTEM_NAME@.@BINARY_INSTALL_ENDING@ - HDF4 Install Utility This binary was built with the ZLIB and SZIP/Libaec external libraries and are included for convenience. Libaec is an unrestricted open-source replacement for SZIP (Encoder ENABLED). The official ZLIB and SZIP/Libaec pages are at: ZLIB: https://git.savannah.gnu.org/cgit/gzip.git/ https://git.savannah.gnu.org/cgit/gzip.git/tree/COPYING SZIP/Libaec: https://gitlab.dkrz.de/k202009/libaec https://gitlab.dkrz.de/k202009/libaec/-/blob/master/Copyright.txt Installation =========================================================================== 1. Execute @HDF4_PACKAGE_NAME@-@HDF4_PACKAGE_VERSION@-@BINARY_SYSTEM_NAME@.@BINARY_INSTALL_ENDING@ 2. Follow prompts =========================================================================== After Installation =========================================================================== The examples folder, HDF4Examples, located in the HDF4 install folder, can be built and tested with CMake and the supplied HDF4_Examples.cmake file. The HDF4_Examples.cmake expects HDF4 to have been installed in the default location with above compilers (see the libhdf4.settings file in the lib install folder). Also, the CMake utility should be installed. To test the installation with the examples; Create a directory to run the examples. Copy HDF4Examples folder to this directory. Copy CTestScript.cmake to this directory. Copy HDF4_Examples.cmake to this directory. Copy HDF4_Examples_options.cmake to this directory. The default source folder is defined as "HDF4Examples". It can be changed with the CTEST_SOURCE_NAME script option. The default installation folder is defined as "@CMAKE_INSTALL_PREFIX@". It can be changed with the INSTALLDIR script option. The default ctest configuration is defined as "Release". It can be changed with the CTEST_CONFIGURATION_TYPE script option. Note that this must be the same as the value used with the -C command line option. The default build configuration is defined to build and use static libraries. Shared libraries can be used with the STATICONLYLIBRARIES script option set to "NO". Other options can be changed by editing the HDF4_Examples_options.cmake file. If the defaults are okay, execute from this directory: ctest -S HDF4_Examples.cmake -C Release -V -O test.log If the defaults need change, execute from this directory: ctest -S HDF4_Examples.cmake,CTEST_SOURCE_NAME=MyExamples,INSTALLDIR=MyLocation -C Release -V -O test.log When executed, the ctest script will save the results to the log file, test.log, as indicated by the ctest command. If you wish the to see more build and test information, add "-VV" to the ctest command. The output should show; 100% tests passed, 0 tests failed out of 49. For more information see USING_CMake_Examples.txt in the install folder. =========================================================================== Documentation for this release can be found at the following URL: https://portal.hdfgroup.org/documentation/index.html#hdf4 Bugs should be reported to help@hdfgroup.org. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/SignPackageFiles.cmake���������������������������������������������������0000664�0000000�0000000�00000004303�15030617045�0021515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This script signs the targets for the package message(VERBOSE "Signing script in ${CPACK_TEMPORARY_INSTALL_DIRECTORY} and ${CPACK_PACKAGE_INSTALL_DIRECTORY}") # RPM needs ALL_COMPONENTS_IN_ONE added to path between ${CPACK_TEMPORARY_INSTALL_DIRECTORY} and ${CPACK_PACKAGE_INSTALL_DIRECTORY} if (CPACK_GENERATOR MATCHES "RPM") set (CPACK_TARGET_FILE_DIRECTORY "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_COMPONENTS_IN_ONE/${CPACK_PACKAGE_INSTALL_DIRECTORY}") elseif (CPACK_GENERATOR MATCHES "WIX" OR CPACK_GENERATOR MATCHES "NSIS") set (CPACK_TARGET_FILE_DIRECTORY "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/libraries") elseif (CPACK_GENERATOR MATCHES "ZIP") set (CPACK_TARGET_FILE_DIRECTORY "${CPACK_TEMPORARY_INSTALL_DIRECTORY}") elseif (CPACK_GENERATOR MATCHES "DragNDrop") set (CPACK_TARGET_FILE_DIRECTORY "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${CPACK_PACKAGE_INSTALL_DIRECTORY}") else () set (CPACK_TARGET_FILE_DIRECTORY "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/${CPACK_PACKAGE_INSTALL_DIRECTORY}") endif () file (GLOB target_list LIST_DIRECTORIES false "${CPACK_TARGET_FILE_DIRECTORY}/lib/*" "${CPACK_TARGET_FILE_DIRECTORY}/bin/*") foreach (targetfile IN LISTS target_list) if (WIN32) # Sign the targets execute_process (COMMAND $ENV{SIGNTOOLDIR}/signtool sign /v /debug /fd SHA256 /tr http://timestamp.acs.microsoft.com /td SHA256 /dlib "Microsoft.Trusted.Signing.Client/bin/x64/Azure.CodeSigning.Dlib.dll" /dmdf ${CPACK_ORIG_SOURCE_DIR}/credentials.json ${targetfile} ) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo "Signing the target ${targetfile}" ) elseif (APPLE) # Sign the targets execute_process (COMMAND codesign --force --timestamp --options runtime --entitlements ${CPACK_ORIG_SOURCE_DIR}/config/cmake/distribution.entitlements --verbose=4 --strict --sign "$ENV{SIGNER}" ${targetfile} ) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo "Signing the target ${targetfile}" ) else () execute_process ( COMMAND ${CMAKE_COMMAND} -E echo "Signing the target ${targetfile}" ) endif () endforeach () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/UseJava.cmake������������������������������������������������������������0000664�0000000�0000000�00000176475�15030617045�0017740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. #[=======================================================================[.rst: UseJava ------- This file provides support for ``Java``. It is assumed that :module:`FindJava` has already been loaded. See :module:`FindJava` for information on how to load Java into your CMake project. Synopsis ^^^^^^^^ .. parsed-literal:: `Creating and Installing JARS`_ `add_jar`_ (<target_name> [SOURCES] <source1> [<source2>...] ...) `install_jar`_ (<target_name> DESTINATION <destination> [COMPONENT <component>]) `install_jni_symlink`_ (<target_name> DESTINATION <destination> [COMPONENT <component>]) `Header Generation`_ `create_javah`_ ((TARGET <target> | GENERATED_FILES <VAR>) CLASSES <class>... ...) `Exporting JAR Targets`_ `install_jar_exports`_ (TARGETS <jars>... FILE <filename> DESTINATION <destination> ...) `export_jars`_ (TARGETS <jars>... [NAMESPACE <namespace>] FILE <filename>) `Finding JARs`_ `find_jar`_ (<VAR> NAMES <name1> [<name2>...] [PATHS <path1> [<path2>... ENV <var>]] ...) `Creating Java Documentation`_ `create_javadoc`_ (<VAR> (PACKAGES <pkg1> [<pkg2>...] | FILES <file1> [<file2>...]) ...) Creating And Installing JARs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _add_jar: .. command:: add_jar Creates a jar file containing java objects and, optionally, resources:: add_jar(<target_name> [SOURCES] <source1> [<source2>...] [<resource1>...] [RESOURCES NAMESPACE <ns1> <resource1>... [NAMESPACE <nsX> <resourceX>...]... ] [INCLUDE_JARS <jar1> [<jar2>...]] [ENTRY_POINT <entry>] [VERSION <version>] [MANIFEST <manifest>] [OUTPUT_NAME <name>] [OUTPUT_DIR <dir>] [GENERATE_NATIVE_HEADERS <target> [DESTINATION (<dir>|INSTALL <dir> [BUILD <dir>])]] ) This command creates a ``<target_name>.jar``. It compiles the given ``<source>`` files and adds the given ``<resource>`` files to the jar file. Source files can be java files or listing files (prefixed by ``@``). If only resource files are given then just a jar file is created. ``SOURCES`` Compiles the specified source files and adds the result in the jar file. .. versionadded:: 3.4 Support for response files, prefixed by ``@``. ``RESOURCES`` .. versionadded:: 3.21 Adds the named ``<resource>`` files to the jar by stripping the source file path and placing the file beneath ``<ns>`` within the jar. For example:: RESOURCES NAMESPACE "/com/my/namespace" "a/path/to/resource.txt" results in a resource accessible via ``/com/my/namespace/resource.txt`` within the jar. Resources may be added without adjusting the namespace by adding them to the list of ``SOURCES`` (original behavior), in this case, resource paths must be relative to ``CMAKE_CURRENT_SOURCE_DIR``. Adding resources without using the ``RESOURCES`` parameter in out of source builds will almost certainly result in confusion. .. note:: Adding resources via the ``SOURCES`` parameter relies upon a hard-coded list of file extensions which are tested to determine whether they compile (e.g. File.java). ``SOURCES`` files which match the extensions are compiled. Files which do not match are treated as resources. To include uncompiled resources matching those file extensions use the ``RESOURCES`` parameter. ``INCLUDE_JARS`` The list of jars are added to the classpath when compiling the java sources and also to the dependencies of the target. ``INCLUDE_JARS`` also accepts other target names created by ``add_jar()``. For backwards compatibility, jar files listed as sources are ignored (as they have been since the first version of this module). ``ENTRY_POINT`` Defines an entry point in the jar file. ``VERSION`` Adds a version to the target output name. The following example will create a jar file with the name ``shibboleet-1.2.0.jar`` and will create a symlink ``shibboleet.jar`` pointing to the jar with the version information. .. code-block:: cmake add_jar(shibboleet shibbotleet.java VERSION 1.2.0) ``MANIFEST`` Defines a custom manifest for the jar. ``OUTPUT_NAME`` Specify a different output name for the target. ``OUTPUT_DIR`` Sets the directory where the jar file will be generated. If not specified, :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory. ``GENERATE_NATIVE_HEADERS`` .. versionadded:: 3.11 Generates native header files for methods declared as native. These files provide the connective glue that allow your Java and C code to interact. An INTERFACE target will be created for an easy usage of generated files. Sub-option ``DESTINATION`` can be used to specify the output directory for generated header files. This option requires, at least, version 1.8 of the JDK. For an optimum usage of this option, it is recommended to include module JNI before any call to ``add_jar()``. The produced target for native headers can then be used to compile C/C++ sources with the :command:`target_link_libraries` command. .. code-block:: cmake find_package(JNI) add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native) add_library(bar bar.cpp) target_link_libraries(bar PRIVATE foo-native) .. versionadded:: 3.20 ``DESTINATION`` sub-option now supports the possibility to specify different output directories for ``BUILD`` and ``INSTALL`` steps. If ``BUILD`` directory is not specified, a default directory will be used. To export the interface target generated by ``GENERATE_NATIVE_HEADERS`` option, sub-option ``INSTALL`` of ``DESTINATION`` is required: .. code-block:: cmake add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native DESTINATION INSTALL include) install(TARGETS foo-native EXPORT native) install(DIRECTORY "$<TARGET_PROPERTY:foo-native,NATIVE_HEADERS_DIRECTORY>/" DESTINATION include) install(EXPORT native DESTINATION /to/export NAMESPACE foo) Some variables can be set to customize the behavior of ``add_jar()`` as well as the java compiler: ``CMAKE_JAVA_COMPILE_FLAGS`` Specify additional flags to java compiler. ``CMAKE_JAVA_INCLUDE_PATH`` Specify additional paths to the class path. ``CMAKE_JNI_TARGET`` If the target is a JNI library, sets this boolean variable to ``TRUE`` to enable creation of a JNI symbolic link (see also :ref:`install_jni_symlink() <install_jni_symlink>`). ``CMAKE_JAR_CLASSES_PREFIX`` If multiple jars should be produced from the same java source filetree, to prevent the accumulation of duplicate class files in subsequent jars, set/reset ``CMAKE_JAR_CLASSES_PREFIX`` prior to calling the ``add_jar()``: .. code-block:: cmake set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo) add_jar(foo foo.java) set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar) add_jar(bar bar.java) The ``add_jar()`` function sets the following target properties on ``<target_name>``: ``INSTALL_FILES`` The files which should be installed. This is used by :ref:`install_jar() <install_jar>`. ``JNI_SYMLINK`` The JNI symlink which should be installed. This is used by :ref:`install_jni_symlink() <install_jni_symlink>`. ``JAR_FILE`` The location of the jar file so that you can include it. ``CLASSDIR`` The directory where the class files can be found. For example to use them with ``javah``. ``NATIVE_HEADERS_DIRECTORY`` .. versionadded:: 3.20 The directory where native headers are generated. Defined when option ``GENERATE_NATIVE_HEADERS`` is specified. .. _install_jar: .. command:: install_jar This command installs the jar file to the given destination:: install_jar(<target_name> <destination>) install_jar(<target_name> DESTINATION <destination> [COMPONENT <component>]) This command installs the ``<target_name>`` file to the given ``<destination>``. It should be called in the same scope as :ref:`add_jar() <add_jar>` or it will fail. .. versionadded:: 3.4 The second signature with ``DESTINATION`` and ``COMPONENT`` options. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". The ``install_jar()`` command sets the following target properties on ``<target_name>``: ``INSTALL_DESTINATION`` Holds the ``<destination>`` as described above, and is used by :ref:`install_jar_exports() <install_jar_exports>`. .. _install_jni_symlink: .. command:: install_jni_symlink Installs JNI symlinks for target generated by :ref:`add_jar() <add_jar>`:: install_jni_symlink(<target_name> <destination>) install_jni_symlink(<target_name> DESTINATION <destination> [COMPONENT <component>]) This command installs the ``<target_name>`` JNI symlinks to the given ``<destination>``. It should be called in the same scope as :ref:`add_jar() <add_jar>` or it will fail. .. versionadded:: 3.4 The second signature with ``DESTINATION`` and ``COMPONENT`` options. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". Utilize the following commands to create a JNI symbolic link: .. code-block:: cmake set(CMAKE_JNI_TARGET TRUE) add_jar(shibboleet shibbotleet.java VERSION 1.2.0) install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet) install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR}) Header Generation ^^^^^^^^^^^^^^^^^ .. _create_javah: .. command:: create_javah .. versionadded:: 3.4 Generates C header files for java classes:: create_javah(TARGET <target> | GENERATED_FILES <VAR> CLASSES <class>... [CLASSPATH <classpath>...] [DEPENDS <depend>...] [OUTPUT_NAME <path>|OUTPUT_DIR <path>] ) .. deprecated:: 3.11 This command will no longer be supported starting with version 10 of the JDK due to the `suppression of javah tool <https://openjdk.org/jeps/313>`_. The :ref:`add_jar(GENERATE_NATIVE_HEADERS) <add_jar>` command should be used instead. Create C header files from java classes. These files provide the connective glue that allow your Java and C code to interact. There are two main signatures for ``create_javah()``. The first signature returns generated files through variable specified by the ``GENERATED_FILES`` option. For example: .. code-block:: cmake create_javah(GENERATED_FILES files_headers CLASSES org.cmake.HelloWorld CLASSPATH hello.jar ) The second signature for ``create_javah()`` creates a target which encapsulates header files generation. E.g. .. code-block:: cmake create_javah(TARGET target_headers CLASSES org.cmake.HelloWorld CLASSPATH hello.jar ) Both signatures share same options. ``CLASSES`` Specifies Java classes used to generate headers. ``CLASSPATH`` Specifies various paths to look up classes. Here ``.class`` files, jar files or targets created by command add_jar can be used. ``DEPENDS`` Targets on which the javah target depends. ``OUTPUT_NAME`` Concatenates the resulting header files for all the classes listed by option ``CLASSES`` into ``<path>``. Same behavior as option ``-o`` of ``javah`` tool. ``OUTPUT_DIR`` Sets the directory where the header files will be generated. Same behavior as option ``-d`` of ``javah`` tool. If not specified, :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory. Exporting JAR Targets ^^^^^^^^^^^^^^^^^^^^^ .. _install_jar_exports: .. command:: install_jar_exports .. versionadded:: 3.7 Installs a target export file:: install_jar_exports(TARGETS <jars>... [NAMESPACE <namespace>] FILE <filename> DESTINATION <destination> [COMPONENT <component>]) This command installs a target export file ``<filename>`` for the named jar targets to the given ``<destination>`` directory. Its function is similar to that of :command:`install(EXPORT)`. ``TARGETS`` List of targets created by :ref:`add_jar() <add_jar>` command. ``NAMESPACE`` .. versionadded:: 3.9 The ``<namespace>`` value will be prepend to the target names as they are written to the import file. ``FILE`` Specify name of the export file. ``DESTINATION`` Specify the directory on disk to which a file will be installed. ``COMPONENT`` Specify an installation component name with which the install rule is associated, such as "runtime" or "development". .. _export_jars: .. command:: export_jars .. versionadded:: 3.7 Writes a target export file:: export_jars(TARGETS <jars>... [NAMESPACE <namespace>] FILE <filename>) This command writes a target export file ``<filename>`` for the named ``<jars>`` targets. Its function is similar to that of :command:`export`. ``TARGETS`` List of targets created by :ref:`add_jar() <add_jar>` command. ``NAMESPACE`` .. versionadded:: 3.9 The ``<namespace>`` value will be prepend to the target names as they are written to the import file. ``FILE`` Specify name of the export file. Finding JARs ^^^^^^^^^^^^ .. _find_jar: .. command:: find_jar Finds the specified jar file:: find_jar(<VAR> <name> | NAMES <name1> [<name2>...] [PATHS <path1> [<path2>... ENV <var>]] [VERSIONS <version1> [<version2>]] [DOC "cache documentation string"] ) This command is used to find a full path to the named jar. A cache entry named by ``<VAR>`` is created to store the result of this command. If the full path to a jar is found the result is stored in the variable and the search will not repeated unless the variable is cleared. If nothing is found, the result will be ``<VAR>-NOTFOUND``, and the search will be attempted again next time ``find_jar()`` is invoked with the same variable. ``NAMES`` Specify one or more possible names for the jar file. ``PATHS`` Specify directories to search in addition to the default locations. The ``ENV`` var sub-option reads paths from a system environment variable. ``VERSIONS`` Specify jar versions. ``DOC`` Specify the documentation string for the ``<VAR>`` cache entry. Creating Java Documentation ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _create_javadoc: .. command:: create_javadoc Creates java documentation based on files and packages:: create_javadoc(<VAR> (PACKAGES <pkg1> [<pkg2>...] | FILES <file1> [<file2>...]) [SOURCEPATH <sourcepath>] [CLASSPATH <classpath>] [INSTALLPATH <install path>] [DOCTITLE <the documentation title>] [WINDOWTITLE <the title of the document>] [AUTHOR (TRUE|FALSE)] [USE (TRUE|FALSE)] [VERSION (TRUE|FALSE)] ) The ``create_javadoc()`` command can be used to create java documentation. There are two main signatures for ``create_javadoc()``. The first signature works with package names on a path with source files: .. code-block:: cmake create_javadoc(my_example_doc PACKAGES com.example.foo com.example.bar SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}" CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} WINDOWTITLE "My example" DOCTITLE "<h1>My example</h1>" AUTHOR TRUE USE TRUE VERSION TRUE ) The second signature for ``create_javadoc()`` works on a given list of files: .. code-block:: cmake create_javadoc(my_example_doc FILES java/A.java java/B.java CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} WINDOWTITLE "My example" DOCTITLE "<h1>My example</h1>" AUTHOR TRUE USE TRUE VERSION TRUE ) Both signatures share most of the options. For more details please read the javadoc manpage. ``PACKAGES`` Specify java packages. ``FILES`` Specify java source files. If relative paths are specified, they are relative to :variable:`CMAKE_CURRENT_SOURCE_DIR`. ``SOURCEPATH`` Specify the directory where to look for packages. By default, :variable:`CMAKE_CURRENT_SOURCE_DIR` directory is used. ``CLASSPATH`` Specify where to find user class files. Same behavior as option ``-classpath`` of ``javadoc`` tool. ``INSTALLPATH`` Specify where to install the java documentation. If you specified, the documentation will be installed to ``${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>``. ``DOCTITLE`` Specify the title to place near the top of the overview summary file. Same behavior as option ``-doctitle`` of ``javadoc`` tool. ``WINDOWTITLE`` Specify the title to be placed in the HTML ``<title>`` tag. Same behavior as option ``-windowtitle`` of ``javadoc`` tool. ``AUTHOR`` When value ``TRUE`` is specified, includes the ``@author`` text in the generated docs. Same behavior as option ``-author`` of ``javadoc`` tool. ``USE`` When value ``TRUE`` is specified, creates class and package usage pages. Includes one Use page for each documented class and package. Same behavior as option ``-use`` of ``javadoc`` tool. ``VERSION`` When value ``TRUE`` is specified, includes the version text in the generated docs. Same behavior as option ``-version`` of ``javadoc`` tool. #]=======================================================================] include(CMakeParseArguments) function (__java_copy_file src dest comment) add_custom_command( OUTPUT ${dest} COMMAND ${CMAKE_COMMAND} -E copy_if_different ARGS ${src} ${dest} DEPENDS ${src} COMMENT ${comment} VERBATIM ) endfunction () function(__java_lcat VAR) foreach(_line IN LISTS ARGN) string(APPEND ${VAR} "${_line}\n") endforeach() set(${VAR} "${${VAR}}" PARENT_SCOPE) endfunction() function(__java_export_jar VAR TARGET PATH) get_target_property(_jarpath ${TARGET} JAR_FILE) get_filename_component(_jarname ${_jarpath} NAME) set(_target "${_jar_NAMESPACE}${TARGET}") __java_lcat(${VAR} "# Create imported target ${_target}" "add_library(${_target} IMPORTED STATIC)" "set_target_properties(${_target} PROPERTIES" " IMPORTED_LOCATION \"${PATH}/${_jarname}\"" " JAR_FILE \"${PATH}/${_jarname}\")" "" ) set(${VAR} "${${VAR}}" PARENT_SCOPE) endfunction() function(__java_copy_resource_namespaces VAR DEST JAVA_RESOURCE_FILES JAVA_RESOURCE_FILES_RELATIVE) set(_ns_ID "") set(_ns_VAL "") foreach(_item IN LISTS VAR) if(NOT _ns_ID) if(NOT _item STREQUAL "NAMESPACE") message(FATAL_ERROR "UseJava: Expecting \"NAMESPACE\", got\t\"${_item}\"") return() endif() endif() if(_item STREQUAL "NAMESPACE") set(_ns_VAL "") # Prepare for next namespace set(_ns_ID "${_item}") continue() endif() if( NOT _ns_VAL) # we're expecting the next token to be a namespace value # whatever it is, we're treating it like a namespace set(_ns_VAL "${_item}") continue() endif() if(_ns_ID AND _ns_VAL) # We're expecting a file name, check to see if we got one cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _test_file_name) if (NOT EXISTS "${_test_file_name}") message(FATAL_ERROR "UseJava: File does not exist:\t${_item}") return() endif() endif() cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _abs_file_name) cmake_path(GET _item FILENAME _resource_file_name) set(_dest_resource_file_name "${_ns_VAL}/${_resource_file_name}" ) __java_copy_file( ${_abs_file_name} ${DEST}/${_dest_resource_file_name} "Copying ${_item} to the build directory") list(APPEND RESOURCE_FILES_LIST ${DEST}/${_dest_resource_file_name}) list(APPEND RELATIVE_RESOURCE_FILES_LIST ${_dest_resource_file_name}) endforeach() set(${JAVA_RESOURCE_FILES} "${RESOURCE_FILES_LIST}" PARENT_SCOPE) set(${JAVA_RESOURCE_FILES_RELATIVE} "${RELATIVE_RESOURCE_FILES_LIST}" PARENT_SCOPE) endfunction() # define helper scripts set(_JAVA_EXPORT_TARGETS_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/javaTargets.cmake.in) set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake) set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake) if (CMAKE_HOST_WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") set(_UseJava_PATH_SEP "$<SEMICOLON>") else () set(_UseJava_PATH_SEP ":") endif() function(add_jar _TARGET_NAME) cmake_parse_arguments(_add_jar "" "VERSION;OUTPUT_DIR;OUTPUT_NAME;ENTRY_POINT;MANIFEST" "SOURCES;INCLUDE_JARS;GENERATE_NATIVE_HEADERS" ${ARGN} ) # In CMake < 2.8.12, add_jar used variables which were set prior to calling # add_jar for customizing the behavior of add_jar. In order to be backwards # compatible, check if any of those variables are set, and use them to # initialize values of the named arguments. (Giving the corresponding named # argument will override the value set here.) # # New features should use named arguments only. if(NOT DEFINED _add_jar_VERSION AND DEFINED CMAKE_JAVA_TARGET_VERSION) set(_add_jar_VERSION "${CMAKE_JAVA_TARGET_VERSION}") endif() if(NOT DEFINED _add_jar_OUTPUT_DIR AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR) set(_add_jar_OUTPUT_DIR "${CMAKE_JAVA_TARGET_OUTPUT_DIR}") endif() if(NOT DEFINED _add_jar_OUTPUT_NAME AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_NAME) set(_add_jar_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}") # reset set(CMAKE_JAVA_TARGET_OUTPUT_NAME) endif() if(NOT DEFINED _add_jar_ENTRY_POINT AND DEFINED CMAKE_JAVA_JAR_ENTRY_POINT) set(_add_jar_ENTRY_POINT "${CMAKE_JAVA_JAR_ENTRY_POINT}") endif() # This *should* still work if <resources1>... are included without a # named RESOURCES argument. In that case, the old behavior of potentially # misplacing the within the Jar will behave as previously (incorrectly) set(_JAVA_SOURCE_FILES ${_add_jar_SOURCES} ${_add_jar_UNPARSED_ARGUMENTS}) if (NOT DEFINED _add_jar_OUTPUT_DIR) set(_add_jar_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) else() get_filename_component(_add_jar_OUTPUT_DIR ${_add_jar_OUTPUT_DIR} ABSOLUTE) endif() # ensure output directory exists file (MAKE_DIRECTORY "${_add_jar_OUTPUT_DIR}") if (_add_jar_ENTRY_POINT) set(_ENTRY_POINT_OPTION e) set(_ENTRY_POINT_VALUE ${_add_jar_ENTRY_POINT}) endif () if (_add_jar_MANIFEST) set(_MANIFEST_OPTION m) get_filename_component (_MANIFEST_VALUE "${_add_jar_MANIFEST}" ABSOLUTE) endif () unset (_GENERATE_NATIVE_HEADERS) if (_add_jar_GENERATE_NATIVE_HEADERS) # Raise an error if JDK version is less than 1.8 because javac -h is not supported # by earlier versions. if (Java_VERSION VERSION_LESS 1.8) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS is not supported with this version of Java.") endif() unset (_GENERATE_NATIVE_HEADERS_OUTPUT_DESC) cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS "" "" "DESTINATION" ${_add_jar_GENERATE_NATIVE_HEADERS}) if (NOT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: missing required argument.") endif() list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS length) if (length GREATER 1) list (REMOVE_AT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS 0) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}: unexpected argument(s).") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION) set (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers") else() list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION length) if (NOT length EQUAL 1) cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "" "BUILD;INSTALL" "" "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}") if (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: ${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS}: unexpected argument(s).") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL) message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: INSTALL sub-option is required.") endif() if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD) set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers") endif() set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}") set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "$<BUILD_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}>" "$<INSTALL_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL}>") endif() endif() set (_GENERATE_NATIVE_HEADERS_TARGET ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}) set (_GENERATE_NATIVE_HEADERS_OUTPUT_DIR "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}") set (_GENERATE_NATIVE_HEADERS -h "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") if(NOT _GENERATE_NATIVE_HEADERS_OUTPUT_DESC) set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") endif() endif() if (LIBRARY_OUTPUT_PATH) set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}) else () set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${_add_jar_OUTPUT_DIR}) endif () set(CMAKE_JAVA_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_JAVA_OBJECT_OUTPUT_PATH} ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH} ) foreach (JAVA_INCLUDE_DIR IN LISTS CMAKE_JAVA_INCLUDE_PATH) string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${JAVA_INCLUDE_DIR}") endforeach() set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir") set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar") if (_add_jar_OUTPUT_NAME AND _add_jar_VERSION) set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}-${_add_jar_VERSION}.jar") set(_JAVA_TARGET_OUTPUT_LINK "${_add_jar_OUTPUT_NAME}.jar") elseif (_add_jar_VERSION) set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${_add_jar_VERSION}.jar") set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar") elseif (_add_jar_OUTPUT_NAME) set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}.jar") endif () set(_JAVA_CLASS_FILES) set(_JAVA_COMPILE_FILES) set(_JAVA_COMPILE_FILELISTS) set(_JAVA_DEPENDS) set(_JAVA_COMPILE_DEPENDS) set(_JAVA_RESOURCE_FILES) set(_JAVA_RESOURCE_FILES_RELATIVE) foreach(_JAVA_SOURCE_FILE IN LISTS _JAVA_SOURCE_FILES) get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT) get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE) get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH) get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE) if (_JAVA_SOURCE_FILE MATCHES "^@(.+)$") get_filename_component(_JAVA_FULL ${CMAKE_MATCH_1} ABSOLUTE) list(APPEND _JAVA_COMPILE_FILELISTS ${_JAVA_FULL}) elseif (_JAVA_EXT MATCHES ".java") file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} ${_JAVA_FULL}) file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL}) string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN) string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN) if (_BIN_LEN LESS _SRC_LEN) set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH}) else () set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH}) endif () get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH) list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE}) set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class") set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE}) elseif (_JAVA_EXT MATCHES ".jar" OR _JAVA_EXT MATCHES ".war" OR _JAVA_EXT MATCHES ".ear" OR _JAVA_EXT MATCHES ".sar") # Ignored for backward compatibility elseif (_JAVA_EXT STREQUAL "") list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH}) list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}}) else () __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE} "Copying ${_JAVA_SOURCE_FILE} to the build directory") list(APPEND _JAVA_RESOURCE_FILES ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}) list(APPEND _JAVA_RESOURCE_FILES_RELATIVE ${_JAVA_SOURCE_FILE}) endif () endforeach() if(_add_jar_RESOURCES) # Process RESOURCES if it exists __java_copy_resource_namespaces("${_add_jar_RESOURCES}" ${CMAKE_JAVA_CLASS_OUTPUT_PATH} _JAVA_RESOURCE_FILES _JAVA_RESOURCE_FILES_RELATIVE) endif() foreach(_JAVA_INCLUDE_JAR IN LISTS _add_jar_INCLUDE_JARS) if (TARGET ${_JAVA_INCLUDE_JAR}) get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE) if (_JAVA_JAR_PATH) string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_JAR_PATH}") list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH}) list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR}) list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_JAR_PATH}) else () message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar") endif () else () string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_INCLUDE_JAR}") list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}") list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}") list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}") endif () endforeach() if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS) set (_JAVA_SOURCES_FILELISTS) if (_JAVA_COMPILE_FILES) # Create the list of files to compile. set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources) string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"") file(WRITE ${_JAVA_SOURCES_FILE} ${_JAVA_COMPILE_STRING}) list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_SOURCES_FILE}") endif() if (_JAVA_COMPILE_FILELISTS) foreach (_JAVA_FILELIST IN LISTS _JAVA_COMPILE_FILELISTS) list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_FILELIST}") endforeach() endif() # Compile the java files and create a list of class files add_custom_command( # NOTE: this command generates an artificial dependency file OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} COMMAND ${Java_JAVAC_EXECUTABLE} ${CMAKE_JAVA_COMPILE_FLAGS} -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}" -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_GENERATE_NATIVE_HEADERS} ${_JAVA_SOURCES_FILELISTS} COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_SOURCES_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Building Java objects for ${_TARGET_NAME}.jar" VERBATIM ) add_custom_command( OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist COMMAND ${CMAKE_COMMAND} -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH} -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX} -P ${_JAVA_CLASS_FILELIST_SCRIPT} DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM ) else () # create an empty java_class_filelist if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist) file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "") endif() endif () # create the jar file set(_JAVA_JAR_OUTPUT_PATH "${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME}") if (CMAKE_JNI_TARGET) add_custom_command( OUTPUT ${_JAVA_JAR_OUTPUT_PATH} COMMAND ${Java_JAR_EXECUTABLE} -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE} ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" VERBATIM ) else () add_custom_command( OUTPUT ${_JAVA_JAR_OUTPUT_PATH} COMMAND ${Java_JAR_EXECUTABLE} -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE} ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist COMMAND ${CMAKE_COMMAND} -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR} -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} -P ${_JAVA_SYMLINK_SCRIPT} WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" VERBATIM ) endif () # Add the target and make sure we have the latest resource files. add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH}) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ${_JAVA_JAR_OUTPUT_PATH} ) if (_JAVA_TARGET_OUTPUT_LINK) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ${_JAVA_JAR_OUTPUT_PATH} ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} ) if (CMAKE_JNI_TARGET) set_property( TARGET ${_TARGET_NAME} PROPERTY JNI_SYMLINK ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} ) endif () endif () set_property( TARGET ${_TARGET_NAME} PROPERTY JAR_FILE ${_JAVA_JAR_OUTPUT_PATH} ) set_property( TARGET ${_TARGET_NAME} PROPERTY CLASSDIR ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ) if (_GENERATE_NATIVE_HEADERS) # create an INTERFACE library encapsulating include directory for generated headers add_library (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE) target_include_directories (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE "${_GENERATE_NATIVE_HEADERS_OUTPUT_DESC}" ${JNI_INCLUDE_DIRS}) set_property(TARGET ${_GENERATE_NATIVE_HEADERS_TARGET} PROPERTY NATIVE_HEADERS_DIRECTORY "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") # this INTERFACE library depends on jar generation add_dependencies (${_GENERATE_NATIVE_HEADERS_TARGET} ${_TARGET_NAME}) set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}") endif() endfunction() function(INSTALL_JAR _TARGET_NAME) if (ARGC EQUAL 2) set (_DESTINATION ${ARGV1}) else() cmake_parse_arguments(_install_jar "" "DESTINATION;COMPONENT" "" ${ARGN}) if (_install_jar_DESTINATION) set (_DESTINATION ${_install_jar_DESTINATION}) else() message(SEND_ERROR "install_jar: ${_TARGET_NAME}: DESTINATION must be specified.") endif() if (_install_jar_COMPONENT) set (_COMPONENT COMPONENT ${_install_jar_COMPONENT}) endif() endif() get_property(__FILES TARGET ${_TARGET_NAME} PROPERTY INSTALL_FILES ) set_property( TARGET ${_TARGET_NAME} PROPERTY INSTALL_DESTINATION ${_DESTINATION} ) if (__FILES) install( FILES ${__FILES} DESTINATION ${_DESTINATION} ${_COMPONENT} ) else () message(SEND_ERROR "install_jar: The target ${_TARGET_NAME} is not known in this scope.") endif () endfunction() function(INSTALL_JNI_SYMLINK _TARGET_NAME) if (ARGC EQUAL 2) set (_DESTINATION ${ARGV1}) else() cmake_parse_arguments(_install_jni_symlink "" "DESTINATION;COMPONENT" "" ${ARGN}) if (_install_jni_symlink_DESTINATION) set (_DESTINATION ${_install_jni_symlink_DESTINATION}) else() message(SEND_ERROR "install_jni_symlink: ${_TARGET_NAME}: DESTINATION must be specified.") endif() if (_install_jni_symlink_COMPONENT) set (_COMPONENT COMPONENT ${_install_jni_symlink_COMPONENT}) endif() endif() get_property(__SYMLINK TARGET ${_TARGET_NAME} PROPERTY JNI_SYMLINK ) if (__SYMLINK) install( FILES ${__SYMLINK} DESTINATION ${_DESTINATION} ${_COMPONENT} ) else () message(SEND_ERROR "install_jni_symlink: The target ${_TARGET_NAME} is not known in this scope.") endif () endfunction() function (find_jar VARIABLE) set(_jar_names) set(_jar_files) set(_jar_versions) set(_jar_paths /usr/share/java/ /usr/local/share/java/ ${Java_JAR_PATHS}) set(_jar_doc "NOTSET") set(_state "name") foreach (arg IN LISTS ARGN) if (_state STREQUAL "name") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_names ${arg}) if (_jar_doc STREQUAL "NOTSET") set(_jar_doc "Finding ${arg} jar") endif () endif () elseif (_state STREQUAL "versions") if (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_versions ${_jar_versions} ${arg}) endif () elseif (_state STREQUAL "names") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "PATHS") set(_state "paths") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_names ${_jar_names} ${arg}) if (_jar_doc STREQUAL "NOTSET") set(_jar_doc "Finding ${arg} jar") endif () endif () elseif (_state STREQUAL "paths") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "DOC") set(_state "doc") else () set(_jar_paths ${_jar_paths} ${arg}) endif () elseif (_state STREQUAL "doc") if (arg STREQUAL "VERSIONS") set(_state "versions") elseif (arg STREQUAL "NAMES") set(_state "names") elseif (arg STREQUAL "PATHS") set(_state "paths") else () set(_jar_doc ${arg}) endif () endif () endforeach () if (NOT _jar_names) message(FATAL_ERROR "find_jar: No name to search for given") endif () foreach (jar_name IN LISTS _jar_names) foreach (version IN LISTS _jar_versions) set(_jar_files ${_jar_files} ${jar_name}-${version}.jar) endforeach () set(_jar_files ${_jar_files} ${jar_name}.jar) endforeach () find_file(${VARIABLE} NAMES ${_jar_files} PATHS ${_jar_paths} DOC ${_jar_doc} NO_DEFAULT_PATH) endfunction () function(create_javadoc _target) set(_javadoc_packages) set(_javadoc_files) set(_javadoc_overview) set(_javadoc_sourcepath) set(_javadoc_classpath) set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc") set(_javadoc_doctitle) set(_javadoc_windowtitle) set(_javadoc_author FALSE) set(_javadoc_version FALSE) set(_javadoc_use FALSE) set(_state "package") foreach (arg IN LISTS ARGN) if (_state STREQUAL "package") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_packages ${arg}) set(_state "packages") endif () elseif (_state STREQUAL "packages") if (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_packages ${arg}) endif () elseif (_state STREQUAL "files") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_files ${arg}) endif () elseif (_state STREQUAL "sourcepath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_sourcepath ${arg}) endif () elseif (_state STREQUAL "classpath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () list(APPEND _javadoc_classpath ${arg}) endif () elseif (_state STREQUAL "installpath") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_installpath ${arg}) endif () elseif (_state STREQUAL "doctitle") if (${arg} STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_doctitle ${arg}) endif () elseif (_state STREQUAL "windowtitle") if (${arg} STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_windowtitle ${arg}) endif () elseif (_state STREQUAL "author") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_author ${arg}) endif () elseif (_state STREQUAL "use") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_use ${arg}) endif () elseif (_state STREQUAL "version") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "OVERVIEW") set(_state "overview") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_version ${arg}) endif () elseif (_state STREQUAL "overview") if (arg STREQUAL "PACKAGES") set(_state "packages") elseif (arg STREQUAL "FILES") set(_state "files") elseif (arg STREQUAL "SOURCEPATH") set(_state "sourcepath") elseif (arg STREQUAL "CLASSPATH") set(_state "classpath") elseif (arg STREQUAL "INSTALLPATH") set(_state "installpath") elseif (arg STREQUAL "DOCTITLE") set(_state "doctitle") elseif (arg STREQUAL "WINDOWTITLE") set(_state "windowtitle") elseif (arg STREQUAL "AUTHOR") set(_state "author") elseif (arg STREQUAL "USE") set(_state "use") elseif (arg STREQUAL "VERSION") set(_state "version") else () set(_javadoc_overview ${arg}) endif () endif () endforeach () set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target}) set(_javadoc_options -d ${_javadoc_builddir}) if (_javadoc_sourcepath) list(JOIN _javadoc_sourcepath "${_UseJava_PATH_SEP}" _javadoc_sourcepath) list(APPEND _javadoc_options -sourcepath "\"${_javadoc_sourcepath}\"") endif () if (_javadoc_overview) list(JOIN _javadoc_overview "${_UseJava_PATH_SEP}" _javadoc_overview) list(APPEND _javadoc_options -overview "\"${_javadoc_overview}\"") endif () if (_javadoc_classpath) list(JOIN _javadoc_classpath "${_UseJava_PATH_SEP}" _javadoc_classpath) list(APPEND _javadoc_options -classpath "\"${_javadoc_classpath}\"") endif () if (_javadoc_doctitle) list(APPEND _javadoc_options -doctitle '${_javadoc_doctitle}') endif () if (_javadoc_windowtitle) list(APPEND _javadoc_options -windowtitle '${_javadoc_windowtitle}') endif () if (_javadoc_author) list(APPEND _javadoc_options -author) endif () if (_javadoc_use) list(APPEND _javadoc_options -use) endif () if (_javadoc_version) list(APPEND _javadoc_options -version) endif () add_custom_target(${_target}_javadoc ALL COMMAND ${Java_JAVADOC_EXECUTABLE} -Xdoclint:none ${_javadoc_options} ${_javadoc_files} ${_javadoc_packages} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) install( DIRECTORY ${_javadoc_builddir} DESTINATION ${_javadoc_installpath} ) endfunction() function (create_javah) if (Java_VERSION VERSION_GREATER_EQUAL 10) message (FATAL_ERROR "create_javah: not supported with this Java version. Use add_jar(GENERATE_NATIVE_HEADERS) instead.") elseif (Java_VERSION VERSION_GREATER_EQUAL 1.8) message (DEPRECATION "create_javah: this command will no longer be supported starting with version 10 of JDK. Update your project by using command add_jar(GENERATE_NATIVE_HEADERS) instead.") endif() cmake_parse_arguments(_create_javah "" "TARGET;GENERATED_FILES;OUTPUT_NAME;OUTPUT_DIR" "CLASSES;CLASSPATH;DEPENDS" ${ARGN}) # check parameters if (NOT _create_javah_TARGET AND NOT _create_javah_GENERATED_FILES) message (FATAL_ERROR "create_javah: TARGET or GENERATED_FILES must be specified.") endif() if (_create_javah_OUTPUT_NAME AND _create_javah_OUTPUT_DIR) message (FATAL_ERROR "create_javah: OUTPUT_NAME and OUTPUT_DIR are mutually exclusive.") endif() if (NOT _create_javah_CLASSES) message (FATAL_ERROR "create_javah: CLASSES is a required parameter.") endif() set (_output_files) # handle javah options set (_javah_options) if (_create_javah_CLASSPATH) # CLASSPATH can specify directories, jar files or targets created with add_jar command set (_classpath) foreach (_path IN LISTS _create_javah_CLASSPATH) if (TARGET ${_path}) get_target_property (_jar_path ${_path} JAR_FILE) if (_jar_path) list (APPEND _classpath "${_jar_path}") list (APPEND _create_javah_DEPENDS "${_path}") else() message(SEND_ERROR "create_javah: CLASSPATH target ${_path} is not a jar.") endif() elseif (EXISTS "${_path}") list (APPEND _classpath "${_path}") if (NOT IS_DIRECTORY "${_path}") list (APPEND _create_javah_DEPENDS "${_path}") endif() else() message(SEND_ERROR "create_javah: CLASSPATH entry ${_path} does not exist.") endif() endforeach() string (REPLACE ";" "${_UseJava_PATH_SEP}" _classpath "${_classpath}") list (APPEND _javah_options -classpath "${_classpath}") endif() if (_create_javah_OUTPUT_DIR) list (APPEND _javah_options -d "${_create_javah_OUTPUT_DIR}") endif() if (_create_javah_OUTPUT_NAME) list (APPEND _javah_options -o "${_create_javah_OUTPUT_NAME}") set (_output_files "${_create_javah_OUTPUT_NAME}") get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_NAME}" DIRECTORY) get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_DIR}" ABSOLUTE) endif() if (NOT _create_javah_OUTPUT_DIR) set (_create_javah_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() if (NOT _create_javah_OUTPUT_NAME) # compute output names foreach (_class IN LISTS _create_javah_CLASSES) string (REPLACE "." "_" _c_header "${_class}") set (_c_header "${_create_javah_OUTPUT_DIR}/${_c_header}.h") list (APPEND _output_files "${_c_header}") endforeach() endif() # finalize custom command arguments if (_create_javah_DEPENDS) list (INSERT _create_javah_DEPENDS 0 DEPENDS) endif() add_custom_command (OUTPUT ${_output_files} COMMAND "${Java_JAVAH_EXECUTABLE}" ${_javah_options} -jni ${_create_javah_CLASSES} ${_create_javah_DEPENDS} WORKING_DIRECTORY ${_create_javah_OUTPUT_DIR} COMMENT "Building C header files from classes...") if (_create_javah_TARGET) add_custom_target (${_create_javah_TARGET} ALL DEPENDS ${_output_files}) endif() if (_create_javah_GENERATED_FILES) set (${_create_javah_GENERATED_FILES} ${_output_files} PARENT_SCOPE) endif() endfunction() function(export_jars) # Parse and validate arguments cmake_parse_arguments(_export_jars "" "FILE;NAMESPACE" "TARGETS" ${ARGN} ) if (NOT _export_jars_FILE) message(SEND_ERROR "export_jars: FILE must be specified.") endif() if (NOT _export_jars_TARGETS) message(SEND_ERROR "export_jars: TARGETS must be specified.") endif() set(_jar_NAMESPACE "${_export_jars_NAMESPACE}") # Set content of generated exports file string(REPLACE ";" " " __targets__ "${_export_jars_TARGETS}") set(__targetdefs__ "") foreach(_target IN LISTS _export_jars_TARGETS) get_target_property(_jarpath ${_target} JAR_FILE) get_filename_component(_jarpath ${_jarpath} PATH) __java_export_jar(__targetdefs__ ${_target} "${_jarpath}") endforeach() # Generate exports file configure_file( ${_JAVA_EXPORT_TARGETS_SCRIPT} ${_export_jars_FILE} @ONLY ) endfunction() function(install_jar_exports) # Parse and validate arguments cmake_parse_arguments(_install_jar_exports "" "FILE;DESTINATION;COMPONENT;NAMESPACE" "TARGETS" ${ARGN} ) if (NOT _install_jar_exports_FILE) message(SEND_ERROR "install_jar_exports: FILE must be specified.") endif() if (NOT _install_jar_exports_DESTINATION) message(SEND_ERROR "install_jar_exports: DESTINATION must be specified.") endif() if (NOT _install_jar_exports_TARGETS) message(SEND_ERROR "install_jar_exports: TARGETS must be specified.") endif() set(_jar_NAMESPACE "${_install_jar_exports_NAMESPACE}") if (_install_jar_exports_COMPONENT) set (_COMPONENT COMPONENT ${_install_jar_exports_COMPONENT}) endif() # Determine relative path from installed export file to install prefix if(IS_ABSOLUTE "${_install_jar_exports_DESTINATION}") file(RELATIVE_PATH _relpath ${_install_jar_exports_DESTINATION} ${CMAKE_INSTALL_PREFIX} ) else() file(RELATIVE_PATH _relpath ${CMAKE_INSTALL_PREFIX}/${_install_jar_exports_DESTINATION} ${CMAKE_INSTALL_PREFIX} ) endif() # Set up unique location for generated exports file string(SHA256 _hash "${_install_jar_exports_DESTINATION}") set(_tmpdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/JavaExports/${_hash}) # Set content of generated exports file string(REPLACE ";" " " __targets__ "${_install_jar_exports_TARGETS}") set(__targetdefs__ "set(_prefix \${CMAKE_CURRENT_LIST_DIR}/${_relpath})\n\n") foreach(_target IN LISTS _install_jar_exports_TARGETS) get_target_property(_dir ${_target} INSTALL_DESTINATION) __java_export_jar(__targetdefs__ ${_target} "\${_prefix}/${_dir}") endforeach() __java_lcat(__targetdefs__ "\nunset(_prefix)") # Generate and install exports file configure_file( ${_JAVA_EXPORT_TARGETS_SCRIPT} ${_tmpdir}/${_install_jar_exports_FILE} @ONLY ) install(FILES ${_tmpdir}/${_install_jar_exports_FILE} DESTINATION ${_install_jar_exports_DESTINATION} ${_COMPONENT}) endfunction() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/UseJavaClassFilelist.cmake�����������������������������������������������0000664�0000000�0000000�00000003173�15030617045�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # This script creates a list of compiled Java class files to be added to # a jar file. This avoids including cmake files which get created in # the binary directory. if (CMAKE_JAVA_CLASS_OUTPUT_PATH) if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") set(_JAVA_GLOBBED_FILES) if (CMAKE_JAR_CLASSES_PREFIX) foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX}) message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}") file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class") if (_JAVA_GLOBBED_TMP_FILES) list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES}) endif () endforeach() else() file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class") endif () set(_JAVA_CLASS_FILES) # file(GLOB_RECURSE foo RELATIVE) is broken so we need this. foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES}) file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE}) set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n) endforeach() # write to file file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES}) else () message(SEND_ERROR "FATAL: Java class output path doesn't exist") endif () else () message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH") endif () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/UseJavaSymlinks.cmake����������������������������������������������������0000664�0000000�0000000�00000001051�15030617045�0021443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details. # Helper script for UseJava.cmake if (UNIX AND _JAVA_TARGET_OUTPUT_LINK) if (_JAVA_TARGET_OUTPUT_NAME) find_program(LN_EXECUTABLE NAMES ln) execute_process( COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}" WORKING_DIRECTORY ${_JAVA_TARGET_DIR} ) else () message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME") endif () endif () ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/UserMacros/��������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017437�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/UserMacros/Windows_MT.cmake����������������������������������������������0000664�0000000�0000000�00000001613�15030617045�0022474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################## # Include file for user options ######################################################## # To use this option, copy both the macro and option code # into the root UserMacros.cmake file. Then enable the option, # using the command line add "-DBUILD_STATIC_CRT_LIBS:BOOL=ON" # OR add an include to the root UserMacros.cmake file: # INCLUDE(path_to_file/WINDOWS_MT.cmake) #----------------------------------------------------------------------------- # Option to Build with Static CRT libraries on Windows (USE WITH CAUTION!!!) #----------------------------------------------------------------------------- option (HDF4_BUILD_STATIC_CRT_LIBS "Build With Static Windows CRT Libraries" OFF) mark_as_advanced (HDF4_BUILD_STATIC_CRT_LIBS) if (HDF4_BUILD_STATIC_CRT_LIBS) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif () ���������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016114�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/CMakeLists.txt������������������������������������������������������0000664�0000000�0000000�00000027227�15030617045�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) set (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) project (ZLIB C) set(VERSION "1.3.1") #----------------------------------------------------------------------------- # Basic ZLIB stuff here #----------------------------------------------------------------------------- set (CMAKE_POSITION_INDEPENDENT_CODE ON) set (ZLIB_PACKAGE_EXT ${HDF_PACKAGE_EXT}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE}) if (MINGW) set (WINDOWS 1) # MinGW tries to imitate Windows endif () if (WINDOWS) set (HAVE_STDDEF_H 1) set (HAVE_SYS_TYPES_H 1) endif () include (CheckTypeSize) include (CheckFunctionExists) include (CheckIncludeFile) include (CheckCSourceCompiles) check_include_file (sys/types.h HAVE_SYS_TYPES_H) check_include_file (stdint.h HAVE_STDINT_H) check_include_file (stddef.h HAVE_STDDEF_H) # # Check to see if we have large file support # set (CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) # We add these other definitions here because CheckTypeSize.cmake # in CMake 2.4.x does not automatically do so and we want # compatibility with CMake 2.4.x. if (HAVE_SYS_TYPES_H) list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) endif () if (HAVE_STDINT_H) list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) endif () if (HAVE_STDDEF_H) list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) endif () check_type_size (off64_t OFF64_T) if (HAVE_OFF64_T) add_definitions(-D_LARGEFILE64_SOURCE=1) endif () set (CMAKE_REQUIRED_DEFINITIONS) # clear variable # # Check for fseeko # check_function_exists (fseeko HAVE_FSEEKO) if (NOT HAVE_FSEEKO) add_definitions (-DNO_FSEEKO) endif () # # Check for unistd.h # check_include_file (unistd.h Z_HAVE_UNISTD_H) #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (ZLIB_RESOURCES_DIR ${HDF_RESOURCES_DIR}/ZLIB) set (ZLIB_SRC_DIR ${ZLIB_SOURCE_DIR}) #----------------------------------------------------------------------------- # Set the core names of all the libraries #----------------------------------------------------------------------------- set (ZLIB_LIB_CORENAME "zlib-static") #----------------------------------------------------------------------------- # Set the true names of all the libraries if customized by external project #----------------------------------------------------------------------------- set (ZLIB_LIB_NAME "${ZLIB_EXTERNAL_LIB_PREFIX}${ZLIB_LIB_CORENAME}") #----------------------------------------------------------------------------- # Set the target names of all the libraries #----------------------------------------------------------------------------- set (ZLIB_LIB_TARGET "zlib-static") # parse the full version number from zlib.h and include in ZLIB_FULL_VERSION file (READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) string (REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) set (zlib_VERS_MAJOR 1) set (zlib_VERS_MINOR 3) set (zlib_VERS_RELEASE 0) #----------------------------------------------------------------------------- set (ZLIB_PACKAGE "zlib") set (ZLIB_PACKAGE_NAME "ZLIB") set (ZLIB_PACKAGE_VERSION "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}") set (ZLIB_PACKAGE_VERSION_MAJOR "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}") set (ZLIB_PACKAGE_VERSION_MINOR "${zlib_VERS_RELEASE}") set (ZLIB_PACKAGE_STRING "${ZLIB_PACKAGE_NAME} ${ZLIB_PACKAGE_VERSION}") set (ZLIB_PACKAGE_TARNAME "${ZLIB_PACKAGE_NAME}${ZLIB_PACKAGE_EXT}") set (ZLIB_PACKAGE_URL "http://www.hdfgroup.org") set (ZLIB_PACKAGE_BUGREPORT "help@hdfgroup.org") set (ZLIB_PACKAGE_SOVERSION "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}.${zlib_VERS_RELEASE}") set (ZLIB_PACKAGE_SOVERSION_MAJOR "${zlib_VERS_MAJOR}") HDF_DIR_PATHS(${ZLIB_PACKAGE_NAME}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXPORTED_TARGETS) set (ZLIB_EXPORTED_TARGETS "zlib-targets") endif () set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "") #----------------------------------------------------------------------------- # All libs/tests/examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "${ZLIB_BINARY_DIR};${ZLIB_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) if (MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1) add_definitions (-D_CRT_SECURE_NO_DEPRECATE) add_definitions (-D_CRT_SECURE_NO_WARNINGS) add_definitions (-D_CONSOLE) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) endif () if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) # If we're doing an out of source build and the user has a zconf.h # in their source tree... if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) message(STATUS "Renaming") message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") message(STATUS "to 'zconf.h.included' because this file is included with zlib") message(STATUS "but CMake generates it automatically in the build directory.") file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) endif() endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) #----------------------------------------------------------------------------- # Define ZLIB Library #----------------------------------------------------------------------------- set(ZLIB_PUBLIC_HDRS ${CMAKE_CURRENT_BINARY_DIR}/zconf.h zlib.h ) set(ZLIB_PRIVATE_HDRS crc32.h deflate.h gzguts.h inffast.h inffixed.h inflate.h inftrees.h trees.h zutil.h ) set(ZLIB_SRCS adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c inflate.c infback.c inftrees.c inffast.c trees.c uncompr.c zutil.c ) add_library(${ZLIB_LIB_TARGET} STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) target_include_directories(${ZLIB_LIB_TARGET} PRIVATE "${CMAKE_BINARY_DIR}" PUBLIC "${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}" ) if (MSVC AND CMAKE_CL_64) set_target_properties (${ZLIB_LIB_TARGET} PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") endif () set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES PUBLIC_HEADER "" LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>" ) #----------------------------------------------------------------------------- # Compiler specific flags #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -Wno-strict-prototypes -Wno-implicit-function-declaration) endif () if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -Wno-implicit-function-declaration) endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -fmessage-length=0) endif () set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES OUTPUT_NAME zlib-static) set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "${ZLIB_LIB_TARGET}") set (install_targets ${ZLIB_LIB_TARGET}) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (ZLIB_EXPORTED_TARGETS) INSTALL_TARGET_PDB (${ZLIB_LIB_TARGET} ${ZLIB_INSTALL_BIN_DIR} libraries) install ( TARGETS ${install_targets} EXPORT ${ZLIB_EXPORTED_TARGETS} LIBRARY DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${ZLIB_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${ZLIB_INSTALL_FWRK_DIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${ZLIB_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}") configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the ZLIB-config-version.cmake file for the install directory #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) configure_file ( ${ZLIB_RESOURCES_DIR}/zlib-config-version.cmake.in ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake @ONLY ) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( EXPORT ${ZLIB_EXPORTED_TARGETS} DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) export ( TARGETS ${ZLIB_LIBRARIES_TO_EXPORT} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} ) export (PACKAGE zlib) endif () �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/CPack.Info.plist.in�������������������������������������������������0000664�0000000�0000000�00000001627�15030617045�0021457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>@CPACK_PACKAGE_FILE_NAME@</string> <key>CFBundleIconFile</key> <string>@CPACK_BUNDLE_ICON@</string> <key>CFBundleIdentifier</key> <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>@CPACK_PACKAGE_VERSIO@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_SHORT_VERSION_STRING@</string> <key>CSResourcesFileMapped</key> <true/> </dict> </plist> ���������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/devCMakeLists.txt���������������������������������������������������0000664�0000000�0000000�00000034047�15030617045�0021363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) project( ZLIB LANGUAGES C VERSION 1.4.1.1 HOMEPAGE_URL "https://zlib.net/" DESCRIPTION "a general-purpose lossless data-compression library") set (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) #----------------------------------------------------------------------------- # Basic ZLIB stuff here #----------------------------------------------------------------------------- set (CMAKE_POSITION_INDEPENDENT_CODE ON) set (ZLIB_PACKAGE_EXT ${HDF_PACKAGE_EXT}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE}) if (MINGW) set (WINDOWS 1) # MinGW tries to imitate Windows endif () if (WINDOWS) set (HAVE_STDDEF_H 1) set (HAVE_SYS_TYPES_H 1) endif () # ============================================================================ # configuration # ============================================================================ option(ZLIB_BUILD_TESTING "Enable Zlib Examples as tests" OFF) option(ZLIB_BUILD_SHARED "Enable building zlib shared library" OFF) option(ZLIB_BUILD_STATIC "Enable building zlib static library" ON) option(ZLIB_BUILD_MINIZIP "Enable building libminizip contrib library" OFF) option(ZLIB_INSTALL "Enable installation of zlib" OFF) option(ZLIB_PREFIX "prefix for all types and library functions, see zconf.h.in" OFF) mark_as_advanced(ZLIB_PREFIX) if(WIN32) option(ZLIB_INSTALL_COMPAT_DLL "Install a copy as zlib1.dll" ON) endif(WIN32) get_property(IS_MULTI GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) message(STATUS "No CMAKE_BUILD_TYPE set -- using Release") set(CMAKE_BUILD_TYPE Release) endif(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) include(CheckCSourceCompiles) include(CheckFunctionExists) include(CheckIncludeFile) include(CMakePackageConfigHelpers) include(CheckTypeSize) include(CPack) include(GNUInstallDirs) set(CPACK_INCLUDED FALSE) if(NOT ZLIB_CONF_WRITTEN) set(Z_PREFIX ${ZLIB_PREFIX}) set(CONF_OUT_FILE ${ZLIB_BINARY_DIR}/zconf.h.cmakein) file(READ ${ZLIB_SOURCE_DIR}/zconf.h ZCONF_CONTENT LIMIT 245) file(WRITE ${CONF_OUT_FILE} ${ZCONF_CONTENT}) file(APPEND ${CONF_OUT_FILE} "#cmakedefine Z_PREFIX 1\n") file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_STDARG_H 1\n") file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_UNISTD_H 1\n") file(READ ${ZLIB_SOURCE_DIR}/zconf.h ZCONF_CONTENT OFFSET 244) set(FIRST_ITEM TRUE) foreach(item IN LISTS ZCONF_CONTENT) if(FIRST_ITEM) string(APPEND OUT_CONTENT ${item}) set(FIRST_ITEM FALSE) else(FIRST_ITEM) string(APPEND OUT_CONTENT "\;" ${item}) endif(FIRST_ITEM) endforeach(item IN LISTS ${ZCONF_CONTENT}) file(APPEND ${CONF_OUT_FILE} ${OUT_CONTENT}) set(ZLIB_CONF_WRITTEN TRUE CACHE BOOL "zconf.h.cmakein was created") mark_as_advanced(ZLIB_CONF_WRITTEN) endif(NOT ZLIB_CONF_WRITTEN) # # Check to see if we have large file support # set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) check_type_size(off64_t OFF64_T) unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable # # Check for fseeko # check_function_exists(fseeko HAVE_FSEEKO) # # Check for stdarg.h # check_include_file(stdarg.h HAVE_STDARG_H) # # Check for unistd.h # check_include_file(unistd.h HAVE_UNISTD_H) # # Check visibility attribute is supported # if(MSVC) set(CMAKE_REQUIRED_FLAGS "-WX") else(MSVC) set(CMAKE_REQUIRED_FLAGS "-WError") endif(MSVC) check_c_source_compiles( " #include <stdlib.h> static void f(void) __attribute__ ((visibility(\"hidden\"))); int main(void) {return 0;} " HAVE___ATTR__VIS_HIDDEN) unset(CMAKE_COMPILE_FLAGS) set(ZLIB_PC ${ZLIB_BINARY_DIR}/zlib.pc) configure_file(${ZLIB_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY) configure_file(${ZLIB_BINARY_DIR}/zconf.h.cmakein ${ZLIB_BINARY_DIR}/zconf.h) include_directories(${ZLIB_BINARY_DIR} ${ZLIB_SOURCE_DIR}) #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (ZLIB_RESOURCES_DIR ${HDF_RESOURCES_DIR}/ZLIB) set (ZLIB_SRC_DIR ${ZLIB_SOURCE_DIR}) #----------------------------------------------------------------------------- # Set the core names of all the libraries #----------------------------------------------------------------------------- set (ZLIB_LIB_CORENAME "zlib-static") #----------------------------------------------------------------------------- # Set the true names of all the libraries if customized by external project #----------------------------------------------------------------------------- set (ZLIB_LIB_NAME "${ZLIB_EXTERNAL_LIB_PREFIX}${ZLIB_LIB_CORENAME}") #----------------------------------------------------------------------------- # Set the target names of all the libraries #----------------------------------------------------------------------------- set (ZLIB_LIB_TARGET "zlib-static") set (zlib_VERS_MAJOR 1) set (zlib_VERS_MINOR 4) set (zlib_VERS_RELEASE 1) #----------------------------------------------------------------------------- set (ZLIB_PACKAGE "zlib") set (ZLIB_PACKAGE_NAME "ZLIB") set (ZLIB_PACKAGE_VERSION "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}") set (ZLIB_PACKAGE_VERSION_MAJOR "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}") set (ZLIB_PACKAGE_VERSION_MINOR "${zlib_VERS_RELEASE}") set (ZLIB_PACKAGE_STRING "${ZLIB_PACKAGE_NAME} ${ZLIB_PACKAGE_VERSION}") set (ZLIB_PACKAGE_TARNAME "${ZLIB_PACKAGE_NAME}${ZLIB_PACKAGE_EXT}") set (ZLIB_PACKAGE_URL "http://www.hdfgroup.org") set (ZLIB_PACKAGE_BUGREPORT "help@hdfgroup.org") set (ZLIB_PACKAGE_SOVERSION "${zlib_VERS_MAJOR}.${zlib_VERS_MINOR}.${zlib_VERS_RELEASE}") set (ZLIB_PACKAGE_SOVERSION_MAJOR "${zlib_VERS_MAJOR}") HDF_DIR_PATHS(${ZLIB_PACKAGE_NAME}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXPORTED_TARGETS) set (ZLIB_EXPORTED_TARGETS "zlib-targets") endif () set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "") #----------------------------------------------------------------------------- # All libs/tests/examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "${ZLIB_BINARY_DIR};${ZLIB_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) if (MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1) add_definitions (-D_CRT_SECURE_NO_WARNINGS) add_definitions (-D_CONSOLE) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) endif () if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) # If we're doing an out of source build and the user has a zconf.h # in their source tree... if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) message(VERBOSE "Renaming") message(VERBOSE " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") message(VERBOSE "to 'zconf.h.included' because this file is included with zlib") message(VERBOSE "but CMake generates it automatically in the build directory.") file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) endif() endif() include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) #----------------------------------------------------------------------------- # Define ZLIB Library #----------------------------------------------------------------------------- set(ZLIB_PUBLIC_HDRS ${ZLIB_BINARY_DIR}/zconf.h zlib.h) set(ZLIB_PRIVATE_HDRS crc32.h deflate.h gzguts.h inffast.h inffixed.h inflate.h inftrees.h trees.h zutil.h) set(ZLIB_SRCS adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c inflate.c infback.c inftrees.c inffast.c trees.c uncompr.c zutil.c) add_library(${ZLIB_LIB_TARGET} STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) target_include_directories( ${ZLIB_LIB_TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) target_compile_definitions( ${ZLIB_LIB_TARGET} PRIVATE $<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> $<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> $<$<BOOL:${MSVC}>:_BIND_TO_CURRENT_VCLIBS_VERSION=1> $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> $<$<BOOL:${MSVC}>:_CONSOLE> PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) target_include_directories(${ZLIB_LIB_TARGET} PRIVATE "${CMAKE_BINARY_DIR}" PUBLIC "${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}" ) if (MSVC AND CMAKE_CL_64) set_target_properties (${ZLIB_LIB_TARGET} PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") endif () set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES PUBLIC_HEADER "" LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>" ) #----------------------------------------------------------------------------- # Compiler specific flags #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -Wno-strict-prototypes -Wno-implicit-function-declaration) endif () if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -Wno-implicit-function-declaration) endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(${ZLIB_LIB_TARGET} PRIVATE -fmessage-length=0) endif () set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES OUTPUT_NAME zlib-static) set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "${ZLIB_LIB_TARGET}") set (install_targets ${ZLIB_LIB_TARGET}) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (ZLIB_EXPORTED_TARGETS) install ( TARGETS ${install_targets} EXPORT ${ZLIB_EXPORTED_TARGETS} LIBRARY DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${ZLIB_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${ZLIB_INSTALL_FWRK_DIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${ZLIB_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}") configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the ZLIB-config-version.cmake file for the install directory #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) configure_file ( ${ZLIB_RESOURCES_DIR}/zlib-config-version.cmake.in ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake @ONLY ) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( EXPORT ${ZLIB_EXPORTED_TARGETS} DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) export ( TARGETS ${ZLIB_LIBRARIES_TO_EXPORT} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} ) export (PACKAGE zlib) endif () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/zconf.h.in����������������������������������������������������������0000664�0000000�0000000�00000040535�15030617045�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #ifndef ZCONF_H #define ZCONF_H #cmakedefine Z_PREFIX #cmakedefine Z_HAVE_UNISTD_H /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. * Even better than compiling with -DZ_PREFIX would be to use configure to set * this permanently in zconf.h using "./configure --zprefix". */ #ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ # define Z_PREFIX_SET /* all linked symbols and init macros */ # define _dist_code z__dist_code # define _length_code z__length_code # define _tr_align z__tr_align # define _tr_flush_bits z__tr_flush_bits # define _tr_flush_block z__tr_flush_block # define _tr_init z__tr_init # define _tr_stored_block z__tr_stored_block # define _tr_tally z__tr_tally # define adler32 z_adler32 # define adler32_combine z_adler32_combine # define adler32_combine64 z_adler32_combine64 # define adler32_z z_adler32_z # ifndef Z_SOLO # define compress z_compress # define compress2 z_compress2 # define compressBound z_compressBound # endif # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 # define crc32_combine_gen z_crc32_combine_gen # define crc32_combine_gen64 z_crc32_combine_gen64 # define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound # define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd # define deflateGetDictionary z_deflateGetDictionary # define deflateInit z_deflateInit # define deflateInit2 z_deflateInit2 # define deflateInit2_ z_deflateInit2_ # define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams # define deflatePending z_deflatePending # define deflatePrime z_deflatePrime # define deflateReset z_deflateReset # define deflateResetKeep z_deflateResetKeep # define deflateSetDictionary z_deflateSetDictionary # define deflateSetHeader z_deflateSetHeader # define deflateTune z_deflateTune # define deflate_copyright z_deflate_copyright # define get_crc_table z_get_crc_table # ifndef Z_SOLO # define gz_error z_gz_error # define gz_intmax z_gz_intmax # define gz_strwinerror z_gz_strwinerror # define gzbuffer z_gzbuffer # define gzclearerr z_gzclearerr # define gzclose z_gzclose # define gzclose_r z_gzclose_r # define gzclose_w z_gzclose_w # define gzdirect z_gzdirect # define gzdopen z_gzdopen # define gzeof z_gzeof # define gzerror z_gzerror # define gzflush z_gzflush # define gzfread z_gzfread # define gzfwrite z_gzfwrite # define gzgetc z_gzgetc # define gzgetc_ z_gzgetc_ # define gzgets z_gzgets # define gzoffset z_gzoffset # define gzoffset64 z_gzoffset64 # define gzopen z_gzopen # define gzopen64 z_gzopen64 # ifdef _WIN32 # define gzopen_w z_gzopen_w # endif # define gzprintf z_gzprintf # define gzputc z_gzputc # define gzputs z_gzputs # define gzread z_gzread # define gzrewind z_gzrewind # define gzseek z_gzseek # define gzseek64 z_gzseek64 # define gzsetparams z_gzsetparams # define gztell z_gztell # define gztell64 z_gztell64 # define gzungetc z_gzungetc # define gzvprintf z_gzvprintf # define gzwrite z_gzwrite # endif # define inflate z_inflate # define inflateBack z_inflateBack # define inflateBackEnd z_inflateBackEnd # define inflateBackInit z_inflateBackInit # define inflateBackInit_ z_inflateBackInit_ # define inflateCodesUsed z_inflateCodesUsed # define inflateCopy z_inflateCopy # define inflateEnd z_inflateEnd # define inflateGetDictionary z_inflateGetDictionary # define inflateGetHeader z_inflateGetHeader # define inflateInit z_inflateInit # define inflateInit2 z_inflateInit2 # define inflateInit2_ z_inflateInit2_ # define inflateInit_ z_inflateInit_ # define inflateMark z_inflateMark # define inflatePrime z_inflatePrime # define inflateReset z_inflateReset # define inflateReset2 z_inflateReset2 # define inflateResetKeep z_inflateResetKeep # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateUndermine z_inflateUndermine # define inflateValidate z_inflateValidate # define inflate_copyright z_inflate_copyright # define inflate_fast z_inflate_fast # define inflate_table z_inflate_table # ifndef Z_SOLO # define uncompress z_uncompress # define uncompress2 z_uncompress2 # endif # define zError z_zError # ifndef Z_SOLO # define zcalloc z_zcalloc # define zcfree z_zcfree # endif # define zlibCompileFlags z_zlibCompileFlags # define zlibVersion z_zlibVersion /* all zlib typedefs in zlib.h and zconf.h */ # define Byte z_Byte # define Bytef z_Bytef # define alloc_func z_alloc_func # define charf z_charf # define free_func z_free_func # ifndef Z_SOLO # define gzFile z_gzFile # endif # define gz_header z_gz_header # define gz_headerp z_gz_headerp # define in_func z_in_func # define intf z_intf # define out_func z_out_func # define uInt z_uInt # define uIntf z_uIntf # define uLong z_uLong # define uLongf z_uLongf # define voidp z_voidp # define voidpc z_voidpc # define voidpf z_voidpf /* all zlib structs in zlib.h and zconf.h */ # define gz_header_s z_gz_header_s # define internal_state z_internal_state #endif #if defined(__MSDOS__) && !defined(MSDOS) # define MSDOS #endif #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) # define OS2 #endif #if defined(_WINDOWS) && !defined(WINDOWS) # define WINDOWS #endif #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) # ifndef WIN32 # define WIN32 # endif #endif #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) # if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) # ifndef SYS16BIT # define SYS16BIT # endif # endif #endif /* * Compile with -DMAXSEG_64K if the alloc function cannot allocate more * than 64k bytes at a time (needed on systems with 16-bit int). */ #ifdef SYS16BIT # define MAXSEG_64K #endif #ifdef MSDOS # define UNALIGNED_OK #endif #ifdef __STDC_VERSION__ # ifndef STDC # define STDC # endif # if __STDC_VERSION__ >= 199901L # ifndef STDC99 # define STDC99 # endif # endif #endif #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) # define STDC #endif #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) # define STDC #endif #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) # define STDC #endif #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) # define STDC #endif #if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ # define STDC #endif #ifndef STDC # ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ # define const /* note: need a more gentle solution here */ # endif #endif #if defined(ZLIB_CONST) && !defined(z_const) # define z_const const #else # define z_const #endif #ifdef Z_SOLO # ifdef _WIN64 typedef unsigned long long z_size_t; # else typedef unsigned long z_size_t; # endif #else # define z_longlong long long # if defined(NO_SIZE_T) typedef unsigned NO_SIZE_T z_size_t; # elif defined(STDC) # include <stddef.h> typedef size_t z_size_t; # else typedef unsigned long z_size_t; # endif # undef z_longlong #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # ifdef MAXSEG_64K # define MAX_MEM_LEVEL 8 # else # define MAX_MEM_LEVEL 9 # endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus about 7 kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC # define OF(args) args # else # define OF(args) () # endif #endif #ifndef Z_ARG /* function prototypes for stdarg */ # if defined(STDC) || defined(Z_HAVE_STDARG_H) # define Z_ARG(args) args # else # define Z_ARG(args) () # endif #endif /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, * just define FAR to be empty. */ #ifdef SYS16BIT # if defined(M_I86SM) || defined(M_I86MM) /* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR _far # else # define FAR far # endif # endif # if (defined(__SMALL__) || defined(__MEDIUM__)) /* Turbo C small or medium model */ # define SMALL_MEDIUM # ifdef __BORLANDC__ # define FAR _far # else # define FAR far # endif # endif #endif #if defined(WINDOWS) || defined(WIN32) /* If building or using zlib as a DLL, define ZLIB_DLL. * This is not mandatory, but it offers a little performance increase. */ # ifdef ZLIB_DLL # if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) # ifdef ZLIB_INTERNAL # define ZEXTERN extern __declspec(dllexport) # else # define ZEXTERN extern __declspec(dllimport) # endif # endif # endif /* ZLIB_DLL */ /* If building or using zlib with the WINAPI/WINAPIV calling convention, * define ZLIB_WINAPI. * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. */ # ifdef ZLIB_WINAPI # ifdef FAR # undef FAR # endif # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # endif # include <windows.h> /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV # else # define ZEXPORTVA FAR CDECL # endif # endif #endif #if defined (__BEOS__) # ifdef ZLIB_DLL # ifdef ZLIB_INTERNAL # define ZEXPORT __declspec(dllexport) # define ZEXPORTVA __declspec(dllexport) # else # define ZEXPORT __declspec(dllimport) # define ZEXPORTVA __declspec(dllimport) # endif # endif #endif #ifndef ZEXTERN # define ZEXTERN extern #endif #ifndef ZEXPORT # define ZEXPORT #endif #ifndef ZEXPORTVA # define ZEXPORTVA #endif #ifndef FAR # define FAR #endif #if !defined(__MACTYPES__) typedef unsigned char Byte; /* 8 bits */ #endif typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void const *voidpc; typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte const *voidpc; typedef Byte FAR *voidpf; typedef Byte *voidp; #endif #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) # include <limits.h> # if (UINT_MAX == 0xffffffffUL) # define Z_U4 unsigned # elif (ULONG_MAX == 0xffffffffUL) # define Z_U4 unsigned long # elif (USHRT_MAX == 0xffffffffUL) # define Z_U4 unsigned short # endif #endif #ifdef Z_U4 typedef Z_U4 z_crc_t; #else typedef unsigned long z_crc_t; #endif #ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ # define Z_HAVE_UNISTD_H #endif #ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ # define Z_HAVE_STDARG_H #endif #ifdef STDC # ifndef Z_SOLO # include <sys/types.h> /* for off_t */ # endif #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifndef Z_SOLO # include <stdarg.h> /* for va_list */ # endif #endif #ifdef _WIN32 # ifndef Z_SOLO # include <stddef.h> /* for wchar_t */ # endif #endif /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even * though the former does not conform to the LFS document), but considering * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as * equivalently requesting no 64-bit operations */ #if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 # undef _LARGEFILE64_SOURCE #endif #ifndef Z_HAVE_UNISTD_H # ifdef __WATCOMC__ # define Z_HAVE_UNISTD_H # endif #endif #ifndef Z_HAVE_UNISTD_H # if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) # define Z_HAVE_UNISTD_H # endif #endif #ifndef Z_SOLO # if defined(Z_HAVE_UNISTD_H) # include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include <unixio.h> /* for off_t */ # endif # ifndef z_off_t # define z_off_t off_t # endif # endif #endif #if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 # define Z_LFS64 #endif #if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) # define Z_LARGE64 #endif #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) # define Z_WANT64 #endif #if !defined(SEEK_SET) && !defined(Z_SOLO) # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t # define z_off_t long #endif #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else # if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t # endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) #pragma map(deflateInit_,"DEIN") #pragma map(deflateInit2_,"DEIN2") #pragma map(deflateEnd,"DEEND") #pragma map(deflateBound,"DEBND") #pragma map(inflateInit_,"ININ") #pragma map(inflateInit2_,"ININ2") #pragma map(inflateEnd,"INEND") #pragma map(inflateSync,"INSY") #pragma map(inflateSetDictionary,"INSEDI") #pragma map(compressBound,"CMBND") #pragma map(inflate_table,"INTABL") #pragma map(inflate_fast,"INFA") #pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/zlib-config-version.cmake.in����������������������������������������0000664�0000000�0000000�00000003062�15030617045�0023412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # ZLIB Version file for install directory #----------------------------------------------------------------------------- set (PACKAGE_VERSION "@ZLIB_VERSION_STRING@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() if ("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "@ZLIB_VERSION_MAJOR@") # exact match for version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@ if ("${PACKAGE_FIND_VERSION_MINOR}" STREQUAL "@ZLIB_VERSION_MINOR@") # compatible with any version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@.x set (PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_FIND_VERSION_PATCH}" STREQUAL "@ZLIB_VERSION_RELEASE@") set (PACKAGE_VERSION_EXACT TRUE) if ("${PACKAGE_FIND_VERSION_TWEAK}" STREQUAL "@ZLIB_VERSION_SUBRELEASE@") # not using this yet endif () endif () else () set (PACKAGE_VERSION_COMPATIBLE FALSE) endif () endif () endif () # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") return() endif() # check that the installed version has the same 32/64bit-ness as the one which is currently searching: if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIB/zlib-config.cmake.in������������������������������������������������0000664�0000000�0000000�00000005017�15030617045�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # ZLIB Config file for compiling against ZLIB build directory #----------------------------------------------------------------------------- @PACKAGE_INIT@ string(TOUPPER @ZLIB_PACKAGE@ ZLIB_PACKAGE_NAME) set (${ZLIB_PACKAGE_NAME}_VALID_COMPONENTS static shared) #----------------------------------------------------------------------------- # User Options #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES @ZLIB_LIBRARIES_TO_EXPORT@) #----------------------------------------------------------------------------- # Directories #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set (${ZLIB_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@") set_and_check (${ZLIB_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@") #----------------------------------------------------------------------------- # Version Strings #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_VERSION_STRING @ZLIB_VERSION_STRING@) set (${ZLIB_PACKAGE_NAME}_VERSION_MAJOR @ZLIB_VERSION_MAJOR@) set (${ZLIB_PACKAGE_NAME}_VERSION_MINOR @ZLIB_VERSION_MINOR@) #----------------------------------------------------------------------------- # Don't include targets if this file is being picked up by another # project which has already built ZLIB as a subproject #----------------------------------------------------------------------------- if (NOT TARGET "@ZLIB_PACKAGE@") include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE@@ZLIB_PACKAGE_EXT@-targets.cmake) endif () # Handle default component(static) : if (NOT ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) set (${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS static) set (${ZLIB_PACKAGE_NAME}_FIND_REQUIRED_static true) endif () # Handle requested components: list (REMOVE_DUPLICATES ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) foreach (comp IN LISTS ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) list (FIND ${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES "@ZLIB_LIB_CORENAME@-${comp}" HAVE_COMP) if (${HAVE_COMP} LESS 0) set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 0) else () set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 1) string(TOUPPER ${ZLIB_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @ZLIB_LIB_CORENAME@-${comp}) endif () endforeach () check_required_components (${ZLIB_PACKAGE_NAME}) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016341�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/CMakeLists.txt����������������������������������������������������0000664�0000000�0000000�00000153455�15030617045�0021116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required(VERSION 3.18) project(ZLIB LANGUAGES C) message(STATUS "Using CMake version ${CMAKE_VERSION}") # If not specified on the command line, enable C11 as the default # Configuration items that affect the global compiler environment standards # should be issued before the "project" command. if(NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 11) # The C standard whose features are requested to build this target endif() if(NOT CMAKE_C_STANDARD_REQUIRED) set(CMAKE_C_STANDARD_REQUIRED ON) # Boolean describing whether the value of C_STANDARD is a requirement endif() if(NOT CMAKE_C_EXTENSIONS) set(CMAKE_C_EXTENSIONS OFF) # Boolean specifying whether compiler specific extensions are requested endif() set(VALID_C_STANDARDS "99" "11") if(NOT CMAKE_C_STANDARD IN_LIST VALID_C_STANDARDS) MESSAGE(FATAL_ERROR "CMAKE_C_STANDARD:STRING=${CMAKE_C_STANDARD} not in known standards list\n ${VALID_C_STANDARDS}") endif() # Parse the full version number from zlib.h.in and include in ZLIB_FULL_VERSION file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h.in _zlib_h_contents) string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9]+.[0-9]+.[0-9]+).*\".*" "\\1" ZLIB_HEADER_VERSION ${_zlib_h_contents}) string(REGEX REPLACE ".*#define[ \t]+ZLIBNG_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" "\\1" ZLIBNG_HEADER_VERSION ${_zlib_h_contents}) message(STATUS "ZLIB_HEADER_VERSION: ${ZLIB_HEADER_VERSION}") message(STATUS "ZLIBNG_HEADER_VERSION: ${ZLIBNG_HEADER_VERSION}") #----------------------------------------------------------------------------- # Basic ZLIB stuff here #----------------------------------------------------------------------------- set (ZLIB_PACKAGE_EXT ${HDF_PACKAGE_EXT}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE}) #----------------------------------------------------------------------------- # Define some CMake variables for use later in the project #----------------------------------------------------------------------------- set (ZLIB_RESOURCES_DIR ${HDF_RESOURCES_DIR}/ZLIB) set (ZLIB_SRC_DIR ${ZLIB_SOURCE_DIR}) #----------------------------------------------------------------------------- # Targets built within this project are exported at Install time for use # by other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXPORTED_TARGETS) set (ZLIB_EXPORTED_TARGETS "zlib-targets") endif () set (CMAKE_POSITION_INDEPENDENT_CODE ON) HDF_DIR_PATHS(ZLIB) #----------------------------------------------------------------------------- # All libs/tests/examples need the main include directories #----------------------------------------------------------------------------- set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${ZLIB_BINARY_DIR};${ZLIB_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) include(CheckTypeSize) include(CheckSymbolExists) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckCSourceCompiles) include(CheckCSourceRuns) include(CheckCCompilerFlag) include(CMakeDependentOption) include(CMakePackageConfigHelpers) include(FeatureSummary) include(cmake/detect-arch.cmake) include(cmake/detect-install-dirs.cmake) include(cmake/detect-coverage.cmake) include(cmake/detect-intrinsics.cmake) include(cmake/detect-sanitizer.cmake) include(cmake/fallback-macros.cmake) if(CMAKE_TOOLCHAIN_FILE) message(STATUS "Using CMake toolchain: ${CMAKE_TOOLCHAIN_FILE}") endif() # Make sure we use an appropriate BUILD_TYPE by default, "Release" to be exact # this should select the maximum generic optimisation on the current platform (i.e. -O3 for gcc/clang) get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(NOT GENERATOR_IS_MULTI_CONFIG) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, standard options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) add_feature_info(CMAKE_BUILD_TYPE 1 "Build type: ${CMAKE_BUILD_TYPE} (default)") else() add_feature_info(CMAKE_BUILD_TYPE 1 "Build type: ${CMAKE_BUILD_TYPE} (selected)") endif() endif() # # Options parsing # option(WITH_GZFILEOP "Compile with support for gzFile related functions" ON) option(ZLIB_COMPAT "Compile with zlib compatible API" OFF) option(ZLIB_ENABLE_TESTS "Build test binaries" OFF) option(ZLIBNG_ENABLE_TESTS "Test zlib-ng specific API" OFF) option(WITH_GTEST "Build gtest_zlib" OFF) option(WITH_FUZZERS "Build test/fuzz" OFF) option(WITH_BENCHMARKS "Build test/benchmarks" OFF) option(WITH_BENCHMARK_APPS "Build application benchmarks" OFF) option(WITH_OPTIM "Build with optimisation" ON) option(WITH_REDUCED_MEM "Reduced memory usage for special cases (reduces performance)" OFF) option(WITH_NEW_STRATEGIES "Use new strategies" ON) option(WITH_NATIVE_INSTRUCTIONS "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)" OFF) option(WITH_RUNTIME_CPU_DETECTION "Build with runtime detection of CPU architecture" ON) option(WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings" OFF) option(WITH_CODE_COVERAGE "Enable code coverage reporting" OFF) option(WITH_INFLATE_STRICT "Build with strict inflate distance checking" OFF) option(WITH_INFLATE_ALLOW_INVALID_DIST "Build with zero fill for inflate invalid distances" OFF) option(WITH_UNALIGNED "Support unaligned reads on platforms that support it" ON) set(ZLIB_SYMBOL_PREFIX "" CACHE STRING "Give this prefix to all publicly exported symbols. Useful when embedding into a larger library. Default is no prefix (empty prefix).") # Add multi-choice option set(WITH_SANITIZER AUTO CACHE STRING "Enable sanitizer support") set_property(CACHE WITH_SANITIZER PROPERTY STRINGS "Memory" "Address" "Undefined" "Thread") if(BASEARCH_ARM_FOUND) option(WITH_ACLE "Build with ACLE" ON) option(WITH_NEON "Build with NEON intrinsics" ON) cmake_dependent_option(WITH_ARMV6 "Build with ARMv6 SIMD" ON "NOT ARCH STREQUAL \"aarch64\"" OFF) elseif(BASEARCH_PPC_FOUND) option(WITH_ALTIVEC "Build with AltiVec (VMX) optimisations for PowerPC" ON) option(WITH_POWER8 "Build with optimisations for POWER8" ON) option(WITH_POWER9 "Build with optimisations for POWER9" ON) elseif(BASEARCH_RISCV_FOUND) option(WITH_RVV "Build with RVV intrinsics" ON) elseif(BASEARCH_S360_FOUND) option(WITH_DFLTCC_DEFLATE "Build with DFLTCC intrinsics for compression on IBM Z" OFF) option(WITH_DFLTCC_INFLATE "Build with DFLTCC intrinsics for decompression on IBM Z" OFF) option(WITH_CRC32_VX "Build with vectorized CRC32 on IBM Z" ON) elseif(BASEARCH_X86_FOUND) option(WITH_SSE2 "Build with SSE2" ON) cmake_dependent_option(WITH_SSSE3 "Build with SSSE3" ON "WITH_SSE2" OFF) cmake_dependent_option(WITH_SSE42 "Build with SSE42" ON "WITH_SSSE3" OFF) cmake_dependent_option(WITH_PCLMULQDQ "Build with PCLMULQDQ" ON "WITH_SSE42" OFF) cmake_dependent_option(WITH_AVX2 "Build with AVX2" ON "WITH_SSE42" OFF) cmake_dependent_option(WITH_AVX512 "Build with AVX512" ON "WITH_AVX2" OFF) cmake_dependent_option(WITH_AVX512VNNI "Build with AVX512 VNNI extensions" ON "WITH_AVX512" OFF) cmake_dependent_option(WITH_VPCLMULQDQ "Build with VPCLMULQDQ" ON "WITH_PCLMULQDQ;WITH_AVX512" OFF) endif() option(INSTALL_UTILS "Copy minigzip and minideflate during install" OFF) mark_as_advanced(FORCE ZLIB_SYMBOL_PREFIX WITH_REDUCED_MEM WITH_ACLE WITH_NEON WITH_ARMV6 WITH_DFLTCC_DEFLATE WITH_DFLTCC_INFLATE WITH_CRC32_VX WITH_AVX2 WITH_SSE2 WITH_SSSE3 WITH_SSE42 WITH_PCLMULQDQ WITH_ALTIVEC WITH_POWER8 WITH_POWER9 WITH_RVV WITH_INFLATE_STRICT WITH_INFLATE_ALLOW_INVALID_DIST WITH_UNALIGNED INSTALL_UTILS ) if(ZLIB_COMPAT) add_definitions(-DZLIB_COMPAT) set(WITH_GZFILEOP ON) set(SUFFIX "") set(ZLIB_FULL_VERSION ${ZLIB_HEADER_VERSION}.zlib-ng) set(EXPORT_NAME ZLIB) else() set(SUFFIX "-ng") set(ZLIB_FULL_VERSION ${ZLIBNG_HEADER_VERSION}) set(EXPORT_NAME zlib-ng) endif() if(WITH_GZFILEOP) add_definitions(-DWITH_GZFILEOP) endif() if(CMAKE_C_COMPILER_ID MATCHES "^Intel") if(CMAKE_HOST_UNIX) set(WARNFLAGS -Wall) set(WARNFLAGS_MAINTAINER -Wall -Wcheck -Wremarks) set(WARNFLAGS_DISABLE) else() set(WARNFLAGS /Wall) set(WARNFLAGS_MAINTAINER /W5) set(WARNFLAGS_DISABLE) endif() check_c_compiler_flag(-diag-disable=10441 HAVE_DIAG_10441) if(HAVE_DIAG_10441) list(APPEND WARNFLAGS_DISABLE "-diag-disable=10441") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -diag-disable=10441") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -diag-disable=10441") endif() elseif(MSVC) # Minimum supported MSVC version is 1800 = Visual Studio 12.0/2013 # See also https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html if(MSVC_VERSION VERSION_LESS 1800) message(SEND_ERROR "Unsupported Visual Studio compiler version (requires 2013 or later).") endif() # TODO. ICC can be used through MSVC. I'm not sure if we'd ever see that combination # (who'd use cmake from an IDE...) but checking for ICC before checking for MSVC should # avoid mistakes. # /Oi ? set(WARNFLAGS /W3 /w34242 /WX) set(WARNFLAGS_MAINTAINER /W4) set(WARNFLAGS_DISABLE /wd4206 /wd4054) if(BASEARCH_ARM_FOUND) add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE) if(NOT "${ARCH}" MATCHES "aarch64") set(NEONFLAG "/arch:VFPv4") endif() endif() elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") # Enable warnings in GCC and Clang set(WARNFLAGS -Wall) set(WARNFLAGS_MAINTAINER -Wextra) set(WARNFLAGS_DISABLE) # Check whether -fno-lto is available set(CMAKE_REQUIRED_FLAGS "-fno-lto") check_c_source_compiles( "int main() { return 0; }" FNO_LTO_AVAILABLE FAIL_REGEX "not supported") set(CMAKE_REQUIRED_FLAGS) if(FNO_LTO_AVAILABLE) set(ZNOLTOFLAG "-fno-lto") endif() if(NOT WITH_NATIVE_INSTRUCTIONS) if(BASEARCH_ARM_FOUND) if("${ARCH}" MATCHES "arm" AND NOT CMAKE_C_FLAGS MATCHES "-mfloat-abi") # Auto-detect support for ARM floating point ABI check_include_file(features.h HAVE_FEATURES_H) if(HAVE_FEATURES_H) set(CMAKE_REQUIRED_FLAGS -mfloat-abi=softfp) check_c_source_compiles( "#include <features.h> int main() { return 0; }" HAVE_FLOATABI_SOFTFP) if(HAVE_FLOATABI_SOFTFP) set(FLOATABI -mfloat-abi=softfp) else() set(CMAKE_REQUIRED_FLAGS -mfloat-abi=hard) check_c_source_compiles( "#include <features.h> int main() { return 0; }" HAVE_FLOATABI_HARD) if(HAVE_FLOATABI_HARD) set(FLOATABI -mfloat-abi=hard) endif() endif() set(CMAKE_REQUIRED_FLAGS) endif() if(FLOATABI) message(STATUS "ARM floating point arch: ${FLOATABI}") add_compile_options(${FLOATABI}) else() message(STATUS "ARM floating point arch not auto-detected") endif() endif() endif() # Disable LTO unless Native Instructions are enabled if(FNO_LTO_AVAILABLE) set(NOLTOFLAG ${ZNOLTOFLAG}) endif() endif() if(MINGW) # Add `-Wno-pedantic-ms-format` only if the toolchain supports it check_c_compiler_flag(-Wno-pedantic-ms-format HAVE_NO_PEDANTIC_MS_FORMAT) if(HAVE_NO_PEDANTIC_MS_FORMAT) list(APPEND WARNFLAGS_DISABLE -Wno-pedantic-ms-format) endif() endif() endif() # Set native march/mcpu if(WITH_NATIVE_INSTRUCTIONS) if(NATIVE_ARCH_OVERRIDE) message(STATUS "WARNING: WITH_NATIVE_INSTRUCTIONS enabled, but running with NATIVE_ARCH_OVERRIDE: ${NATIVE_ARCH_OVERRIDE}") set(NATIVEFLAG "${NATIVE_ARCH_OVERRIDE}") else() if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") check_c_compiler_flag(-march=native HAVE_MARCH_NATIVE) if(HAVE_MARCH_NATIVE) set(NATIVEFLAG "-march=native") else() check_c_compiler_flag(-mcpu=native HAVE_MCPU_NATIVE) if(HAVE_MCPU_NATIVE) set(NATIVEFLAG "-mcpu=native") endif() endif() # Fall through endif() endif() if(NATIVEFLAG) # Apply flags to all source files and compilation checks if(WIN32) separate_arguments(NATIVEOPTIONS WINDOWS_COMMAND "${NATIVEFLAG}") else() separate_arguments(NATIVEOPTIONS UNIX_COMMAND "${NATIVEFLAG}") endif() add_compile_options(${NATIVEOPTIONS}) set(WITH_RUNTIME_CPU_DETECTION OFF) else() message(STATUS "Ignoring WITH_NATIVE_INSTRUCTIONS; not implemented yet on this configuration") set(WITH_NATIVE_INSTRUCTIONS OFF) endif() endif() # Compile without functable or CPU detection if(NOT WITH_RUNTIME_CPU_DETECTION) if(MSVC AND BASEARCH_X86_FOUND) message(STATUS "WARNING: Microsoft Visual Studio does not support compile time detection of CPU features for \"/arch\" before \"AVX\"") # Workaround for MSVC. By default MSVC does not define the __SSE*__ macros. # Fix it if AVX is enabled. set(CMAKE_REQUIRED_FLAGS "${NATIVEFLAG}") check_c_source_compiles( "#ifndef __AVX__ # error \"AVX is not enabled.\" #endif int main(void) { return 0; }" MSVC_IS_ENABLED_AVX ) set(CMAKE_REQUIRED_FLAGS) if(MSVC_IS_ENABLED_AVX) add_definitions( -D__SSE__=1 -D__SSE2__=1 -D__SSE3__=1 -D__SSSE3__=1 -D__SSE4_1__=1 -D__SSE4_2__=1 -D__PCLMUL__=1 ) endif() endif() add_definitions(-DDISABLE_RUNTIME_CPU_DETECTION) endif() # Force disable LTO if WITH_NATIVE_INSTRUCTIONS is not active if(NOT WITH_NATIVE_INSTRUCTIONS) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF) foreach(_cfg_name IN LISTS CMAKE_CONFIGURATION_TYPES) string(TOUPPER "${_cfg_name}" _cfg_name_uc) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_${_cfg_name_uc} OFF) endforeach() endif() # Set architecture alignment requirements if(NOT WITH_UNALIGNED) add_definitions(-DNO_UNALIGNED) message(STATUS "Unaligned reads manually disabled") endif() # Apply warning compiler flags if(WITH_MAINTAINER_WARNINGS) add_compile_options(${WARNFLAGS} ${WARNFLAGS_MAINTAINER} ${WARNFLAGS_DISABLE}) else() add_compile_options(${WARNFLAGS} ${WARNFLAGS_DISABLE}) endif() # Set code coverage compiler flags if(WITH_CODE_COVERAGE) add_code_coverage() endif() # Replace optimization level 3 added by default with level 2 if(NOT WITH_CODE_COVERAGE AND NOT MSVC AND NOT CMAKE_C_FLAGS MATCHES "([\\/\\-]O)3") string(REGEX REPLACE "([\\/\\-]O)3" "\\12" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() # # Check for standard/system includes # check_include_file(arm_acle.h HAVE_ARM_ACLE_H) if(HAVE_ARM_ACLE_H) add_definitions(-DHAVE_ARM_ACLE_H) endif() check_include_file(sys/auxv.h HAVE_SYS_AUXV_H) if(HAVE_SYS_AUXV_H) add_definitions(-DHAVE_SYS_AUXV_H) endif() check_include_file(sys/sdt.h HAVE_SYS_SDT_H) if(HAVE_SYS_SDT_H) add_definitions(-DHAVE_SYS_SDT_H) endif() check_include_file(unistd.h HAVE_UNISTD_H) # # Check for Linux includes # check_include_file(linux/auxvec.h HAVE_LINUX_AUXVEC_H) if(HAVE_LINUX_AUXVEC_H) add_definitions(-DHAVE_LINUX_AUXVEC_H) endif() # # Check to see if we have large file support # set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64) check_type_size(off64_t OFF64_T) if(HAVE_OFF64_T) add_definitions(-D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64) else() check_type_size(_off64_t _OFF64_T) if(HAVE__OFF64_T) add_definitions(-D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64) else() check_type_size(__off64_t __OFF64_T) endif() endif() set(CMAKE_REQUIRED_DEFINITIONS) # clear variable # # Check for fseeko and other optional functions # check_function_exists(fseeko HAVE_FSEEKO) if(NOT HAVE_FSEEKO) add_definitions(-DNO_FSEEKO) endif() check_function_exists(strerror HAVE_STRERROR) if(NOT HAVE_STRERROR) add_definitions(-DNO_STRERROR) endif() set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200112L) check_symbol_exists(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN) if(HAVE_POSIX_MEMALIGN) add_definitions(-DHAVE_POSIX_MEMALIGN) endif() set(CMAKE_REQUIRED_DEFINITIONS) set(CMAKE_REQUIRED_DEFINITIONS -D_ISOC11_SOURCE=1) check_symbol_exists(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC) if(HAVE_ALIGNED_ALLOC) add_definitions(-DHAVE_ALIGNED_ALLOC) endif() set(CMAKE_REQUIRED_DEFINITIONS) if(WITH_SANITIZER STREQUAL "Address") add_address_sanitizer() elseif(WITH_SANITIZER STREQUAL "Memory") add_memory_sanitizer() elseif(WITH_SANITIZER STREQUAL "Thread") add_thread_sanitizer() elseif(WITH_SANITIZER STREQUAL "Undefined") add_undefined_sanitizer() endif() # # Check whether compiler supports -fno-semantic-interposition parameter # check_c_compiler_flag(-fno-semantic-interposition HAVE_NO_INTERPOSITION) # # Check if we can hide zlib internal symbols that are linked between separate source files using hidden # check_c_source_compiles( "#define Z_INTERNAL __attribute__((visibility (\"hidden\"))) int Z_INTERNAL foo; int main() { return 0; }" HAVE_ATTRIBUTE_VISIBILITY_HIDDEN FAIL_REGEX "visibility") if(HAVE_ATTRIBUTE_VISIBILITY_HIDDEN) add_definitions(-DHAVE_VISIBILITY_HIDDEN) endif() # # Check if we can hide zlib internal symbols that are linked between separate source files using internal # check_c_source_compiles( "#define Z_INTERNAL __attribute__((visibility (\"internal\"))) int Z_INTERNAL foo; int main() { return 0; }" HAVE_ATTRIBUTE_VISIBILITY_INTERNAL FAIL_REGEX "visibility") if(HAVE_ATTRIBUTE_VISIBILITY_INTERNAL) add_definitions(-DHAVE_VISIBILITY_INTERNAL) endif() # # Check for __attribute__((aligned(x))) support in the compiler # check_c_source_compiles( "int main(void) { __attribute__((aligned(8))) int test = 0; (void)test; return 0; }" HAVE_ATTRIBUTE_ALIGNED FAIL_REGEX "aligned") if(HAVE_ATTRIBUTE_ALIGNED) add_definitions(-DHAVE_ATTRIBUTE_ALIGNED) endif() # # Check for __builtin_assume_aligned(x,n) support in the compiler # check_c_source_compiles( "char *test(char *buffer) { char *abuffer = __builtin_assume_aligned(buffer,64); return abuffer; } int main() { return 0; }" HAVE_BUILTIN_ASSUME_ALIGNED) if(HAVE_BUILTIN_ASSUME_ALIGNED) add_definitions(-DHAVE_BUILTIN_ASSUME_ALIGNED) endif() # # check for __builtin_ctz() support in the compiler # check_c_source_compiles( "int main(void) { unsigned int zero = 0; long test = __builtin_ctz(zero); (void)test; return 0; }" HAVE_BUILTIN_CTZ ) if(HAVE_BUILTIN_CTZ) add_definitions(-DHAVE_BUILTIN_CTZ) endif() # # check for __builtin_ctzll() support in the compiler # check_c_source_compiles( "int main(void) { unsigned int zero = 0; long test = __builtin_ctzll(zero); (void)test; return 0; }" HAVE_BUILTIN_CTZLL ) if(HAVE_BUILTIN_CTZLL) add_definitions(-DHAVE_BUILTIN_CTZLL) endif() # # check for ptrdiff_t support # check_c_source_compiles( "#include <stddef.h> int main() { ptrdiff_t *a; (void)a; return 0; }" HAVE_PTRDIFF_T ) if(NOT HAVE_PTRDIFF_T) set(NEED_PTRDIFF_T 1) check_type_size("void *" SIZEOF_DATA_PTR) message(STATUS "sizeof(void *) is ${SIZEOF_DATA_PTR} bytes") if(${SIZEOF_DATA_PTR} MATCHES "4") set(PTRDIFF_TYPE "uint32_t") elseif(${SIZEOF_DATA_PTR} MATCHES "8") set(PTRDIFF_TYPE "uint64_t") else() message(FATAL_ERROR "sizeof(void *) is neither 32 nor 64 bit") endif() endif() add_compile_options($<$<CONFIG:Debug>:-DZLIB_DEBUG>) if(MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions(-D_CRT_SECURE_NO_DEPRECATE) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) endif() if(BASEARCH_X86_FOUND) # FORCE_SSE2 option will only be shown if HAVE_SSE2_INTRIN is true if("${ARCH}" MATCHES "i[3-6]86") cmake_dependent_option(FORCE_SSE2 "Always assume CPU is SSE2 capable" OFF "HAVE_SSE2_INTRIN" OFF) endif() endif() # # Enable deflate_quick at level 1 # if(NOT WITH_NEW_STRATEGIES) add_definitions(-DNO_QUICK_STRATEGY) endif() # # Enable deflate_medium at level 4-6 # if(NOT WITH_NEW_STRATEGIES) add_definitions(-DNO_MEDIUM_STRATEGY) endif() # # Enable inflate compilation options # if(WITH_INFLATE_STRICT) add_definitions(-DINFLATE_STRICT) message(STATUS "Inflate strict distance checking enabled") endif() if(WITH_INFLATE_ALLOW_INVALID_DIST) add_definitions(-DINFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR) message(STATUS "Inflate zero data for invalid distances enabled") endif() # # Enable reduced memory configuration # if(WITH_REDUCED_MEM) add_definitions(-DHASH_SIZE=32768u -DGZBUFSIZE=8192 -DNO_LIT_MEM) message(STATUS "Configured for reduced memory environment") endif() set(GENERIC_ARCHDIR "arch/generic") set(ZLIB_ARCH_SRCS) set(ZLIB_ARCH_HDRS ${GENERIC_ARCHDIR}/generic_functions.h) if(BASEARCH_ARM_FOUND) set(ARCHDIR "arch/arm") elseif(BASEARCH_PPC_FOUND) set(ARCHDIR "arch/power") elseif(BASEARCH_RISCV_FOUND) set(ARCHDIR "arch/riscv") elseif(BASEARCH_S360_FOUND) set(ARCHDIR "arch/s390") elseif(BASEARCH_X86_FOUND) set(ARCHDIR "arch/x86") if(NOT ${ARCH} MATCHES "x86_64") add_feature_info(SSE2 1 "Support the SSE2 instruction set, using \"${SSE2FLAG}\"") endif() else() set(ARCHDIR ${GENERIC_ARCHDIR}) message(STATUS "No optimized architecture: using ${ARCHDIR}") endif() if(WITH_OPTIM) if(BASEARCH_ARM_FOUND) add_definitions(-DARM_FEATURES) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if("${ARCH}" MATCHES "aarch64") check_c_source_compiles( "#include <sys/auxv.h> int main() { return (getauxval(AT_HWCAP) & HWCAP_CRC32); }" ARM_AUXV_HAS_CRC32 ) if(ARM_AUXV_HAS_CRC32) add_definitions(-DARM_AUXV_HAS_CRC32) else() message(STATUS "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime.") endif() else() check_c_source_compiles( "#include <sys/auxv.h> int main() { return (getauxval(AT_HWCAP2) & HWCAP2_CRC32); }" ARM_AUXV_HAS_CRC32 ) if(ARM_AUXV_HAS_CRC32) add_definitions(-DARM_AUXV_HAS_CRC32) else() check_c_source_compiles( "#include <sys/auxv.h> #include <asm/hwcap.h> int main() { return (getauxval(AT_HWCAP2) & HWCAP2_CRC32); }" ARM_HWCAP_HAS_CRC32 ) if (ARM_HWCAP_HAS_CRC32) add_definitions(-DARM_AUXV_HAS_CRC32 -DARM_ASM_HWCAP) else() message(STATUS "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime.") endif() endif() check_c_source_compiles( "#include <sys/auxv.h> int main() { return (getauxval(AT_HWCAP) & HWCAP_ARM_NEON); }" ARM_AUXV_HAS_NEON ) if(ARM_AUXV_HAS_NEON) add_definitions(-DARM_AUXV_HAS_NEON) else() check_c_source_compiles( "#include <sys/auxv.h> int main() { return (getauxval(AT_HWCAP) & HWCAP_NEON); }" ARM_AUXV_HAS_NEON ) if (ARM_AUXV_HAS_NEON) add_definitions(-DARM_AUXV_HAS_NEON) else() message(STATUS "Neither HWCAP_ARM_NEON or HWCAP_NEON present in sys/auxv.h; cannot detect support at runtime.") endif() endif() endif() endif() list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_functions.h) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_features.h) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/arm_features.c) endif() if(WITH_ACLE) check_acle_compiler_flag() if(HAVE_ACLE_FLAG) add_definitions(-DARM_ACLE) set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c) set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}") list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS}) add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"") else() set(WITH_ACLE OFF) endif() else() set(WITH_ACLE OFF) endif() if(WITH_NEON) check_neon_compiler_flag() if(NEON_AVAILABLE) add_definitions(-DARM_NEON) set(NEON_SRCS ${ARCHDIR}/adler32_neon.c ${ARCHDIR}/chunkset_neon.c ${ARCHDIR}/compare256_neon.c ${ARCHDIR}/slide_hash_neon.c) list(APPEND ZLIB_ARCH_SRCS ${NEON_SRCS}) set_property(SOURCE ${NEON_SRCS} PROPERTY COMPILE_FLAGS "${NEONFLAG} ${NOLTOFLAG}") if(MSVC) add_definitions(-D__ARM_NEON__) endif() add_feature_info(NEON_ADLER32 1 "Support NEON instructions in adler32, using \"${NEONFLAG}\"") add_feature_info(NEON_SLIDEHASH 1 "Support NEON instructions in slide_hash, using \"${NEONFLAG}\"") check_neon_ld4_intrinsics() if(NEON_HAS_LD4) add_definitions(-DARM_NEON_HASLD4) endif() else() set(WITH_NEON OFF) endif() endif() if(WITH_ARMV6) check_armv6_compiler_flag() if(HAVE_ARMV6_INLINE_ASM OR HAVE_ARMV6_INTRIN) add_definitions(-DARM_SIMD) set(ARMV6_SRCS ${ARCHDIR}/slide_hash_armv6.c) set_property(SOURCE ${ARMV6_SRCS} PROPERTY COMPILE_FLAGS "${ARMV6FLAG} ${NOLTOFLAG}") list(APPEND ZLIB_ARCH_SRCS ${ARMV6_SRCS}) add_feature_info(ARMV6 1 "Support ARMv6 SIMD instructions in slide_hash, using \"${ARMV6FLAG}\"") if(HAVE_ARMV6_INTRIN) add_definitions(-DARM_SIMD_INTRIN) endif() else() set(WITH_ARMV6 OFF) endif() else() set(WITH_ARMV6 OFF) endif() elseif(BASEARCH_PPC_FOUND) # Common arch detection code if(WITH_ALTIVEC) check_ppc_intrinsics() endif() if(WITH_POWER8) check_power8_intrinsics() endif() if(WITH_POWER9) check_power9_intrinsics() endif() if(POWER8_NEED_AUXVEC_H OR POWER9_NEED_AUXVEC_H) add_definitions(-DPOWER_NEED_AUXVEC_H) endif() if(HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN) add_definitions(-DPOWER_FEATURES) endif() if(HAVE_VMX OR HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_functions.h) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_features.h) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power_features.c) endif() endif() # VMX specific options and files if(WITH_ALTIVEC) if(HAVE_VMX) add_definitions(-DPPC_FEATURES) if(HAVE_ALTIVEC) add_definitions(-DPPC_VMX) set(PPC_SRCS ${ARCHDIR}/adler32_vmx.c ${ARCHDIR}/slide_hash_vmx.c) list(APPEND ZLIB_ARCH_SRCS ${PPC_SRCS}) add_feature_info(ALTIVEC 1 "Support the AltiVec instruction set, using \"-maltivec\"") set_property(SOURCE ${PPC_SRCS} PROPERTY COMPILE_FLAGS "${PPCFLAGS}") else() set(WITH_ALTIVEC OFF) endif() endif() endif() # Power8 specific options and files if(WITH_POWER8) if(HAVE_POWER8_INTRIN) add_definitions(-DPOWER8_VSX) set(POWER8_SRCS ${ARCHDIR}/adler32_power8.c ${ARCHDIR}/chunkset_power8.c ${ARCHDIR}/slide_hash_power8.c) if("${ARCH}" MATCHES "powerpc64(le)?") add_definitions(-DPOWER8_VSX_CRC32) list(APPEND POWER8_SRCS ${ARCHDIR}/crc32_power8.c) endif() list(APPEND ZLIB_ARCH_SRCS ${POWER8_SRCS}) set_property(SOURCE ${POWER8_SRCS} PROPERTY COMPILE_FLAGS "${POWER8FLAG} ${NOLTOFLAG}") else() set(WITH_POWER8 OFF) endif() endif() # Power9 specific options and files if(WITH_POWER9) if(HAVE_POWER9_INTRIN) add_definitions(-DPOWER9) set(POWER9_SRCS ${ARCHDIR}/compare256_power9.c) list(APPEND ZLIB_ARCH_SRCS ${POWER9_SRCS}) set_property(SOURCE ${POWER9_SRCS} PROPERTY COMPILE_FLAGS "${POWER9FLAG} ${NOLTOFLAG}") else() set(WITH_POWER9 OFF) endif() endif() elseif(BASEARCH_RISCV_FOUND) if(WITH_RVV) check_rvv_intrinsics() if(HAVE_RVV_INTRIN) add_definitions(-DRISCV_FEATURES) add_definitions(-DRISCV_RVV) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_functions.h) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_features.h) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/riscv_features.c) endif() # FIXME: we will not set compile flags for riscv_features.c when # the kernels update hwcap or hwprobe for riscv set(RVV_SRCS ${ARCHDIR}/adler32_rvv.c ${ARCHDIR}/chunkset_rvv.c ${ARCHDIR}/compare256_rvv.c ${ARCHDIR}/slide_hash_rvv.c) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND RVV_SRCS ${ARCHDIR}/riscv_features.c) endif() list(APPEND ZLIB_ARCH_SRCS ${RVV_SRCS}) set_property(SOURCE ${RVV_SRCS} PROPERTY COMPILE_FLAGS "${RISCVFLAG} ${NOLTOFLAG}") else() set(WITH_RVV OFF) endif() endif() elseif(BASEARCH_S360_FOUND) check_s390_intrinsics() if(HAVE_S390_INTRIN) add_definitions(-DS390_FEATURES) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_functions.h) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_features.h) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/s390_features.c) endif() endif() if(WITH_DFLTCC_DEFLATE) add_definitions(-DS390_DFLTCC_DEFLATE) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_deflate.c) endif() if(WITH_DFLTCC_INFLATE) add_definitions(-DS390_DFLTCC_INFLATE) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_inflate.c) endif() if(WITH_CRC32_VX) check_vgfma_intrinsics() if(HAVE_VGFMA_INTRIN) add_definitions(-DS390_CRC32_VX) set(CRC32_VX_SRCS ${ARCHDIR}/crc32-vx.c) list(APPEND ZLIB_ARCH_SRCS ${CRC32_VX_SRCS}) set_property(SOURCE ${CRC32_VX_SRCS} PROPERTY COMPILE_FLAGS "${VGFMAFLAG} ${NOLTOFLAG}") else() set(WITH_CRC32_VX OFF) endif() endif() elseif(BASEARCH_X86_FOUND) add_definitions(-DX86_FEATURES) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_functions.h) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_features.h) list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/x86_features.c) endif() if(MSVC) list(APPEND ZLIB_ARCH_HDRS fallback_builtins.h) endif() check_xsave_intrinsics() if(HAVE_XSAVE_INTRIN) add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"") if(WITH_RUNTIME_CPU_DETECTION) set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}") endif() if(NOT (CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 8.2)) add_definitions(-DX86_HAVE_XSAVE_INTRIN) endif() endif() if(WITH_SSE2) check_sse2_intrinsics() if(HAVE_SSE2_INTRIN) add_definitions(-DX86_SSE2) set(SSE2_SRCS ${ARCHDIR}/chunkset_sse2.c ${ARCHDIR}/compare256_sse2.c ${ARCHDIR}/slide_hash_sse2.c) list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS}) if(NOT ${ARCH} MATCHES "x86_64") set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}") add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable") if(FORCE_SSE2) add_definitions(-DX86_NOCHECK_SSE2) endif() endif() else() set(WITH_SSE2 OFF) endif() endif() if(WITH_SSSE3) check_ssse3_intrinsics() if(HAVE_SSSE3_INTRIN AND WITH_SSE2) add_definitions(-DX86_SSSE3) set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c ${ARCHDIR}/chunkset_ssse3.c) add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS}) set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}") else() set(WITH_SSSE3 OFF) endif() endif() if(WITH_SSE42) check_sse42_intrinsics() if(HAVE_SSE42_INTRIN AND WITH_SSSE3) add_definitions(-DX86_SSE42) set(SSE42_SRCS ${ARCHDIR}/adler32_sse42.c) add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized adler32 hash generation, using \"${SSE42FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS}) set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${NOLTOFLAG}") else() set(WITH_SSE42 OFF) endif() endif() if(WITH_PCLMULQDQ) check_pclmulqdq_intrinsics() if(HAVE_PCLMULQDQ_INTRIN AND WITH_SSE42) add_definitions(-DX86_PCLMULQDQ_CRC) set(PCLMULQDQ_SRCS ${ARCHDIR}/crc32_pclmulqdq.c) add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSE42FLAG} ${PCLMULFLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS}) set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${PCLMULFLAG} ${NOLTOFLAG}") else() set(WITH_PCLMULQDQ OFF) endif() endif() if(WITH_AVX2) check_avx2_intrinsics() if(HAVE_AVX2_INTRIN AND WITH_SSE42) add_definitions(-DX86_AVX2) set(AVX2_SRCS ${ARCHDIR}/slide_hash_avx2.c) add_feature_info(AVX2_SLIDEHASH 1 "Support AVX2 optimized slide_hash, using \"${AVX2FLAG}\"") list(APPEND AVX2_SRCS ${ARCHDIR}/chunkset_avx2.c) add_feature_info(AVX2_CHUNKSET 1 "Support AVX2 optimized chunkset, using \"${AVX2FLAG}\"") list(APPEND AVX2_SRCS ${ARCHDIR}/compare256_avx2.c) add_feature_info(AVX2_COMPARE256 1 "Support AVX2 optimized compare256, using \"${AVX2FLAG}\"") list(APPEND AVX2_SRCS ${ARCHDIR}/adler32_avx2.c) add_feature_info(AVX2_ADLER32 1 "Support AVX2-accelerated adler32, using \"${AVX2FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${AVX2_SRCS}) set_property(SOURCE ${AVX2_SRCS} PROPERTY COMPILE_FLAGS "${AVX2FLAG} ${NOLTOFLAG}") else() set(WITH_AVX2 OFF) endif() endif() if(WITH_AVX512) check_avx512_intrinsics() if(HAVE_AVX512_INTRIN AND WITH_AVX2) add_definitions(-DX86_AVX512) list(APPEND AVX512_SRCS ${ARCHDIR}/adler32_avx512.c) add_feature_info(AVX512_ADLER32 1 "Support AVX512-accelerated adler32, using \"${AVX512FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${AVX512_SRCS}) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/adler32_avx512_p.h) set_property(SOURCE ${AVX512_SRCS} PROPERTY COMPILE_FLAGS "${AVX512FLAG} ${NOLTOFLAG}") else() set(WITH_AVX512 OFF) endif() endif() if(WITH_AVX512VNNI) check_avx512vnni_intrinsics() if(HAVE_AVX512VNNI_INTRIN AND WITH_AVX2) add_definitions(-DX86_AVX512VNNI) add_feature_info(AVX512VNNI_ADLER32 1 "Support AVX512VNNI adler32, using \"${AVX512VNNIFLAG}\"") list(APPEND AVX512VNNI_SRCS ${ARCHDIR}/adler32_avx512_vnni.c) list(APPEND ZLIB_ARCH_SRCS ${AVX512VNNI_SRCS}) set_property(SOURCE ${AVX512VNNI_SRCS} PROPERTY COMPILE_FLAGS "${AVX512VNNIFLAG} ${NOLTOFLAG}") else() set(WITH_AVX512VNNI OFF) endif() endif() if(WITH_VPCLMULQDQ) check_vpclmulqdq_intrinsics() if(HAVE_VPCLMULQDQ_INTRIN AND WITH_PCLMULQDQ AND WITH_AVX512) add_definitions(-DX86_VPCLMULQDQ_CRC) set(VPCLMULQDQ_SRCS ${ARCHDIR}/crc32_vpclmulqdq.c) add_feature_info(VPCLMUL_CRC 1 "Support CRC hash generation using VPCLMULQDQ, using \"${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${VPCLMULQDQ_SRCS}) set_property(SOURCE ${VPCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG} ${NOLTOFLAG}") else() set(WITH_VPCLMULQDQ OFF) endif() endif() endif() endif() message(STATUS "Architecture-specific source files: ${ZLIB_ARCH_SRCS}") #============================================================================ # zconf.h #============================================================================ macro(generate_cmakein input output) file(REMOVE ${output}) file(STRINGS ${input} _lines) foreach(_line IN LISTS _lines) string(REGEX REPLACE "#ifdef HAVE_UNISTD_H.*" "@ZCONF_UNISTD_LINE@" _line "${_line}") string(REGEX REPLACE "#ifdef NEED_PTRDIFF_T.*" "@ZCONF_PTRDIFF_LINE@" _line "${_line}") if(NEED_PTRDIFF_T) string(REGEX REPLACE "typedef PTRDIFF_TYPE" "typedef @PTRDIFF_TYPE@" _line "${_line}") endif() file(APPEND ${output} "${_line}\n") endforeach() endmacro(generate_cmakein) generate_cmakein( ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.in ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h.cmakein ) if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) # If we're doing an out of source build and the user has a zconf.h # in their source tree... if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h) message(STATUS "Renaming") message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h") message(STATUS "to 'zconf${SUFFIX}.h.included' because this file is included with zlib") message(STATUS "but CMake generates it automatically in the build directory.") file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.included) endif() # If we're doing an out of source build and the user has a zconf.h.cmakein # in their source tree... if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein) message(STATUS "Renaming") message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein") message(STATUS "to 'zconf${SUFFIX}.h.cmakeincluded' because this file is included with zlib") message(STATUS "but CMake generates it automatically in the build directory.") file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakeincluded) endif() endif() # The user is allowed (but discouraged) to set absolute CMAKE_INSTALL_*DIR paths. # If they do, we copy these non-relocatable paths into the pkg-config file. if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") set(PC_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") else() set(PC_INC_INSTALL_DIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") endif() if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") set(PC_LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") else() set(PC_LIB_INSTALL_DIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") endif() #----------------------------------------------------------------------------- # Define ZLIB Library #----------------------------------------------------------------------------- set(ZLIB_PUBLIC_HDRS ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.h ) set(ZLIB_PRIVATE_HDRS adler32_p.h chunkset_tpl.h compare256_rle.h arch_functions.h crc32_braid_p.h crc32_braid_comb_p.h crc32_braid_tbl.h deflate.h deflate_p.h functable.h inffast_tpl.h inffixed_tbl.h inflate.h inflate_p.h inftrees.h insert_string_tpl.h match_tpl.h trees.h trees_emit.h trees_tbl.h zbuild.h zendian.h zutil.h ) set(ZLIB_SRCS arch/generic/adler32_c.c arch/generic/adler32_fold_c.c arch/generic/chunkset_c.c arch/generic/compare256_c.c arch/generic/crc32_braid_c.c arch/generic/crc32_fold_c.c arch/generic/slide_hash_c.c adler32.c compress.c crc32.c crc32_braid_comb.c deflate.c deflate_fast.c deflate_huff.c deflate_medium.c deflate_quick.c deflate_rle.c deflate_slow.c deflate_stored.c functable.c infback.c inflate.c inftrees.c insert_string.c insert_string_roll.c trees.c uncompr.c zutil.c ) if(WITH_RUNTIME_CPU_DETECTION) list(APPEND ZLIB_PRIVATE_HDRS cpu_features.h) list(APPEND ZLIB_SRCS cpu_features.c) endif() set(ZLIB_GZFILE_PRIVATE_HDRS gzguts.h ) set(ZLIB_GZFILE_SRCS gzlib.c ${CMAKE_CURRENT_BINARY_DIR}/gzread.c gzwrite.c ) set(ZLIB_ALL_SRCS ${ZLIB_SRCS} ${ZLIB_ARCH_HDRS} ${ZLIB_ARCH_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) if(WITH_GZFILEOP) list(APPEND ZLIB_ALL_SRCS ${ZLIB_GZFILE_PRIVATE_HDRS} ${ZLIB_GZFILE_SRCS}) endif() add_library(zlib-static STATIC ${ZLIB_ALL_SRCS}) target_include_directories(zlib-static PRIVATE "${CMAKE_BINARY_DIR}") # INFO: Mimics official zlib CMake target # Generates ZLIB.cmake in case ZLIB_COMPAT=ON and always exports the CMake target ZLIB::ZLIB # In case ZLIB_COMPAT=OFF, the CMake target and file follows zlib-ng naming convention if (ZLIB_COMPAT) set_target_properties(zlib-static PROPERTIES EXPORT_NAME ZLIB) endif() set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "zlib-static") set (install_targets zlib-static) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${ARCHDIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/arch/generic) #----------------------------------------------------------------------------- # Compiler specific flags #----------------------------------------------------------------------------- if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(zlib-static PRIVATE -Wno-strict-prototypes -Wno-implicit-function-declaration) endif () if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(zlib-static PRIVATE -Wno-implicit-function-declaration) endif () foreach(ZLIB_INSTALL_LIBRARY ${ZLIB_INSTALL_LIBRARIES}) if(NOT ZLIB_COMPAT) target_compile_definitions(${ZLIB_INSTALL_LIBRARY} PUBLIC ZLIBNG_NATIVE_API) endif() target_include_directories(${ZLIB_INSTALL_LIBRARY} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}$<SEMICOLON>${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>") endforeach() set_target_properties(zlib-static PROPERTIES OUTPUT_NAME zlib-static${SUFFIX}) if(HAVE_UNISTD_H) SET(ZCONF_UNISTD_LINE "#if 1 /* was set to #if 1 by configure/cmake/etc */") else() SET(ZCONF_UNISTD_LINE "#if 0 /* was set to #if 0 by configure/cmake/etc */") endif() if(NEED_PTRDIFF_T) SET(ZCONF_PTRDIFF_LINE "#if 1 /* was set to #if 1 by configure/cmake/etc */") else() SET(ZCONF_PTRDIFF_LINE "#ifdef NEED_PTRDIFF_T /* may be set to #if 1 by configure/cmake/etc */") endif() set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.pc) if(WITH_GZFILEOP) set(PKG_CONFIG_CFLAGS "-DWITH_GZFILEOP") endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY) configure_file(${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib${SUFFIX}.h.in ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gzread.c.in ${CMAKE_CURRENT_BINARY_DIR}/gzread.c @ONLY) if (NOT ZLIB_SYMBOL_PREFIX STREQUAL "") add_feature_info(ZLIB_SYMBOL_PREFIX ON "Publicly exported symbols have a custom prefix") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib_name_mangling${SUFFIX}.h.in ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h @ONLY) else() add_feature_info(ZLIB_SYMBOL_PREFIX OFF "Publicly exported symbols DO NOT have a custom prefix") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib_name_mangling.h.empty ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h COPYONLY) endif() # add_definitions(-DZLIB_SYMBOL_PREFIX=${ZLIB_SYMBOL_PREFIX}) # not needed #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (ZLIB_EXPORTED_TARGETS) INSTALL_TARGET_PDB (zlib-static ${ZLIB_INSTALL_BIN_DIR} libraries) install ( TARGETS ${install_targets} EXPORT ${ZLIB_EXPORTED_TARGETS} LIBRARY DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${ZLIB_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${ZLIB_INSTALL_FWRK_DIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${ZLIB_INSTALL_INCLUDE_DIR} COMPONENT headers ) endif () include (CMakePackageConfigHelpers) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the build directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ) configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" ) #----------------------------------------------------------------------------- # Configure the zlib-config.cmake file for the install directory #----------------------------------------------------------------------------- set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR}) set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${ZLIB_INSTALL_CMAKE_DIR}" ) set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}") configure_package_config_file ( ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake" INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}" PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR ) if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Configure the ZLIB-config-version.cmake file for the install directory #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) configure_file ( ${ZLIB_RESOURCES_DIR}/zlib-config-version.cmake.in ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake @ONLY ) install ( FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) install ( EXPORT ${ZLIB_EXPORTED_TARGETS} DESTINATION ${ZLIB_INSTALL_CMAKE_DIR} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} COMPONENT configinstall ) endif () #----------------------------------------------------------------------------- # Export all exported targets to the build tree for use by parent project #----------------------------------------------------------------------------- if (NOT ZLIB_EXTERNALLY_CONFIGURED) export ( TARGETS ${ZLIB_LIBRARIES_TO_EXPORT} FILE zlib-targets.cmake NAMESPACE ${PACKAGE_NAMESPACE} ) export (PACKAGE zlib) endif () add_feature_info(WITH_GZFILEOP WITH_GZFILEOP "Compile with support for gzFile related functions") add_feature_info(ZLIB_COMPAT ZLIB_COMPAT "Compile with zlib compatible API") add_feature_info(ZLIB_ENABLE_TESTS ZLIB_ENABLE_TESTS "Build test binaries") add_feature_info(ZLIBNG_ENABLE_TESTS ZLIBNG_ENABLE_TESTS "Test zlib-ng specific API") add_feature_info(WITH_SANITIZER WITH_SANITIZER "Enable sanitizer support") add_feature_info(WITH_GTEST WITH_GTEST "Build gtest_zlib") add_feature_info(WITH_FUZZERS WITH_FUZZERS "Build test/fuzz") add_feature_info(WITH_BENCHMARKS WITH_BENCHMARKS "Build test/benchmarks") add_feature_info(WITH_BENCHMARK_APPS WITH_BENCHMARK_APPS "Build application benchmarks") add_feature_info(WITH_OPTIM WITH_OPTIM "Build with optimisation") add_feature_info(WITH_NEW_STRATEGIES WITH_NEW_STRATEGIES "Use new strategies") add_feature_info(WITH_NATIVE_INSTRUCTIONS WITH_NATIVE_INSTRUCTIONS "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)") add_feature_info(WITH_RUNTIME_CPU_DETECTION WITH_RUNTIME_CPU_DETECTION "Build with runtime CPU detection") add_feature_info(WITH_MAINTAINER_WARNINGS WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings") add_feature_info(WITH_CODE_COVERAGE WITH_CODE_COVERAGE "Enable code coverage reporting") add_feature_info(WITH_INFLATE_STRICT WITH_INFLATE_STRICT "Build with strict inflate distance checking") add_feature_info(WITH_INFLATE_ALLOW_INVALID_DIST WITH_INFLATE_ALLOW_INVALID_DIST "Build with zero fill for inflate invalid distances") if(BASEARCH_ARM_FOUND) add_feature_info(WITH_ACLE WITH_ACLE "Build with ACLE") add_feature_info(WITH_NEON WITH_NEON "Build with NEON intrinsics") add_feature_info(WITH_ARMV6 WITH_ARMV6 "Build with ARMv6 SIMD") elseif(BASEARCH_PPC_FOUND) add_feature_info(WITH_ALTIVEC WITH_ALTIVEC "Build with AltiVec optimisations") add_feature_info(WITH_POWER8 WITH_POWER8 "Build with optimisations for POWER8") add_feature_info(WITH_POWER9 WITH_POWER9 "Build with optimisations for POWER9") elseif(BASEARCH_RISCV_FOUND) add_feature_info(WITH_RVV WITH_RVV "Build with RVV intrinsics") elseif(BASEARCH_S360_FOUND) add_feature_info(WITH_DFLTCC_DEFLATE WITH_DFLTCC_DEFLATE "Build with DFLTCC intrinsics for compression on IBM Z") add_feature_info(WITH_DFLTCC_INFLATE WITH_DFLTCC_INFLATE "Build with DFLTCC intrinsics for decompression on IBM Z") add_feature_info(WITH_CRC32_VX WITH_CRC32_VX "Build with vectorized CRC32 on IBM Z") elseif(BASEARCH_X86_FOUND) add_feature_info(WITH_AVX2 WITH_AVX2 "Build with AVX2") add_feature_info(WITH_AVX512 WITH_AVX512 "Build with AVX512") add_feature_info(WITH_AVX512VNNI WITH_AVX512VNNI "Build with AVX512 VNNI") add_feature_info(WITH_SSE2 WITH_SSE2 "Build with SSE2") add_feature_info(WITH_SSSE3 WITH_SSSE3 "Build with SSSE3") add_feature_info(WITH_SSE42 WITH_SSE42 "Build with SSE42") add_feature_info(WITH_PCLMULQDQ WITH_PCLMULQDQ "Build with PCLMULQDQ") add_feature_info(WITH_VPCLMULQDQ WITH_VPCLMULQDQ "Build with VPCLMULQDQ") endif() add_feature_info(INSTALL_UTILS INSTALL_UTILS "Copy minigzip and minideflate during install") FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/CPack.Info.plist.in�����������������������������������������������0000664�0000000�0000000�00000001627�15030617045�0021704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>@CPACK_PACKAGE_FILE_NAME@</string> <key>CFBundleIconFile</key> <string>@CPACK_BUNDLE_ICON@</string> <key>CFBundleIdentifier</key> <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>@CPACK_PACKAGE_VERSIO@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_SHORT_VERSION_STRING@</string> <key>CSResourcesFileMapped</key> <true/> </dict> </plist> ���������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/zconf.h.in��������������������������������������������������������0000664�0000000�0000000�00000012611�15030617045�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #ifndef ZCONF_H #define ZCONF_H #include "zlib_name_mangling.h" #if !defined(_WIN32) && defined(__WIN32__) # define _WIN32 #endif /* Clang macro for detecting declspec support * https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute */ #ifndef __has_declspec_attribute # define __has_declspec_attribute(x) 0 #endif #if defined(ZLIB_CONST) && !defined(z_const) # define z_const const #else # define z_const #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # define MAX_MEM_LEVEL 9 #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MIN_WBITS # define MIN_WBITS 8 /* 256 LZ77 window */ #endif #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus about 7 kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # define OF(args) args #endif #ifdef ZLIB_INTERNAL # define Z_INTERNAL ZLIB_INTERNAL #endif /* If building or using zlib as a DLL, define ZLIB_DLL. * This is not mandatory, but it offers a little performance increase. */ #if defined(ZLIB_DLL) && (defined(_WIN32) || (__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport))) # ifdef Z_INTERNAL # define Z_EXTERN extern __declspec(dllexport) # else # define Z_EXTERN extern __declspec(dllimport) # endif #endif /* If building or using zlib with the WINAPI/WINAPIV calling convention, * define ZLIB_WINAPI. * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. */ #if defined(ZLIB_WINAPI) && defined(_WIN32) # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # endif # include <windows.h> /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ # define Z_EXPORT WINAPI # define Z_EXPORTVA WINAPIV #endif #ifndef Z_EXTERN # define Z_EXTERN extern #endif #ifndef Z_EXPORT # define Z_EXPORT #endif #ifndef Z_EXPORTVA # define Z_EXPORTVA #endif /* Conditional exports */ #define ZNG_CONDEXPORT Z_INTERNAL /* For backwards compatibility */ #ifndef ZEXTERN # define ZEXTERN Z_EXTERN #endif #ifndef ZEXPORT # define ZEXPORT Z_EXPORT #endif #ifndef ZEXPORTVA # define ZEXPORTVA Z_EXPORTVA #endif #ifndef FAR # define FAR #endif /* Legacy zlib typedefs for backwards compatibility. Don't assume stdint.h is defined. */ typedef unsigned char Byte; typedef Byte Bytef; typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ typedef char charf; typedef int intf; typedef uInt uIntf; typedef uLong uLongf; typedef void const *voidpc; typedef void *voidpf; typedef void *voidp; typedef unsigned int z_crc_t; #ifdef HAVE_UNISTD_H /* may be set to #if 1 by configure/cmake/etc */ # define Z_HAVE_UNISTD_H #endif #ifdef NEED_PTRDIFF_T /* may be set to #if 1 by configure/cmake/etc */ typedef PTRDIFF_TYPE ptrdiff_t; #endif #include <sys/types.h> /* for off_t */ #include <stddef.h> /* for wchar_t and NULL */ /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even * though the former does not conform to the LFS document), but considering * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as * equivalently requesting no 64-bit operations */ #if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 # undef _LARGEFILE64_SOURCE #endif #if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) # include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifndef z_off_t # define z_off_t off_t # endif #endif #if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 # define Z_LFS64 #endif #if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) # define Z_LARGE64 #endif #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) # define Z_WANT64 #endif #if !defined(SEEK_SET) # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t # define z_off_t long #endif #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else # if defined(__MSYS__) # define z_off64_t _off64_t # elif defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t # endif #endif typedef size_t z_size_t; #endif /* ZCONF_H */ �����������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/zlib-config-version.cmake.in��������������������������������������0000664�0000000�0000000�00000003062�15030617045�0023637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # ZLIB Version file for install directory #----------------------------------------------------------------------------- set (PACKAGE_VERSION "@ZLIB_VERSION_STRING@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() if ("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "@ZLIB_VERSION_MAJOR@") # exact match for version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@ if ("${PACKAGE_FIND_VERSION_MINOR}" STREQUAL "@ZLIB_VERSION_MINOR@") # compatible with any version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@.x set (PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_FIND_VERSION_PATCH}" STREQUAL "@ZLIB_VERSION_RELEASE@") set (PACKAGE_VERSION_EXACT TRUE) if ("${PACKAGE_FIND_VERSION_TWEAK}" STREQUAL "@ZLIB_VERSION_SUBRELEASE@") # not using this yet endif () endif () else () set (PACKAGE_VERSION_COMPATIBLE FALSE) endif () endif () endif () # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") return() endif() # check that the installed version has the same 32/64bit-ness as the one which is currently searching: if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/ZLIBNG/zlib-config.cmake.in����������������������������������������������0000664�0000000�0000000�00000005017�15030617045�0022156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # ZLIB Config file for compiling against ZLIB build directory #----------------------------------------------------------------------------- @PACKAGE_INIT@ string(TOUPPER @ZLIB_PACKAGE@ ZLIB_PACKAGE_NAME) set (${ZLIB_PACKAGE_NAME}_VALID_COMPONENTS static shared) #----------------------------------------------------------------------------- # User Options #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES @ZLIB_LIBRARIES_TO_EXPORT@) #----------------------------------------------------------------------------- # Directories #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set (${ZLIB_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@") set_and_check (${ZLIB_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@") #----------------------------------------------------------------------------- # Version Strings #----------------------------------------------------------------------------- set (${ZLIB_PACKAGE_NAME}_VERSION_STRING @ZLIB_VERSION_STRING@) set (${ZLIB_PACKAGE_NAME}_VERSION_MAJOR @ZLIB_VERSION_MAJOR@) set (${ZLIB_PACKAGE_NAME}_VERSION_MINOR @ZLIB_VERSION_MINOR@) #----------------------------------------------------------------------------- # Don't include targets if this file is being picked up by another # project which has already built ZLIB as a subproject #----------------------------------------------------------------------------- if (NOT TARGET "@ZLIB_PACKAGE@") include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE@@ZLIB_PACKAGE_EXT@-targets.cmake) endif () # Handle default component(static) : if (NOT ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) set (${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS static) set (${ZLIB_PACKAGE_NAME}_FIND_REQUIRED_static true) endif () # Handle requested components: list (REMOVE_DUPLICATES ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) foreach (comp IN LISTS ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS) list (FIND ${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES "@ZLIB_LIB_CORENAME@-${comp}" HAVE_COMP) if (${HAVE_COMP} LESS 0) set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 0) else () set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 1) string(TOUPPER ${ZLIB_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @ZLIB_LIB_CORENAME@-${comp}) endif () endforeach () check_required_components (${ZLIB_PACKAGE_NAME}) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/cacheinit.cmake����������������������������������������������������������0000664�0000000�0000000�00000007251�15030617045�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is the CMakeCache file. ######################## # EXTERNAL cache entries ######################## set (CMAKE_INSTALL_FRAMEWORK_PREFIX "Library/Frameworks" CACHE STRING "Frameworks installation directory" FORCE) set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE) set (HDF_PACKAGE_NAMESPACE "hdf4::" CACHE STRING "Name for HDF package namespace (can be empty)" FORCE) set (HDF4_BUILD_EXAMPLES ON CACHE BOOL "Build HDF4 Library Examples" FORCE) set (HDF4_BUILD_JAVA ON CACHE BOOL "Build HDF4 Java" FORCE) set (HDF4_BUILD_UTILS ON CACHE BOOL "Build HDF4 Library Utilities" FORCE) set (HDF4_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE) set (HDF4_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE) set (HDF4_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE) set (HDF4_ENABLE_ALL_WARNINGS ON CACHE BOOL "Enable all warnings" FORCE) set (HDF4_MINGW_STATIC_GCC_LIBS ON CACHE BOOL "Statically link libgcc/libstdc++" FORCE) set (HDF4_ALLOW_EXTERNAL_SUPPORT "TGZ" CACHE STRING "Allow External Library Building (NO GIT TGZ)" FORCE) set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) ######################## # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE) set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (HDF4_USE_ZLIB_STATIC ON CACHE BOOL "Use static zlib library" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) set (ZLIBNG_TGZ_NAME "2.2.4.tar.gz" CACHE STRING "Use ZLibNG from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE) set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE) set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE) set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE) set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from GitHub repository" FORCE) set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE) set (HDF4_USE_LIBAEC_STATIC ON CACHE BOOL "Use static AEC library" FORCE) ####### # jpeg ####### set (JPEG_GIT_URL "https://github.com/libjpeg-turbo/libjpeg-turbo.git" CACHE STRING "Use JPEG from TurboJPEG" FORCE) set (JPEG_GIT_BRANCH "jpeg-9e" CACHE STRING "" FORCE) #set (JPEG_GIT_URL "https://github.com/LuaDist/libjpeg.git" CACHE STRING "Use JPEG from ILG" FORCE) #set (JPEG_GIT_BRANCH "master" CACHE STRING "" FORCE) set (JPEG_TGZ_ORIGPATH "https://www.ijg.org/files" CACHE STRING "Use JPEG from original location" FORCE) set (JPEG_TGZ_NAME "jpegsrc.v9e.tar.gz" CACHE STRING "Use JPEG from original compressed file" FORCE) set (JPEG_USE_LOCALCONTENT ON CACHE BOOL "Use local file for JPEG FetchContent" FORCE) set (JPEG_PACKAGE_NAME "jpeg" CACHE STRING "Name of JPEG package" FORCE) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/distribution.entitlements������������������������������������������������0000664�0000000�0000000�00000001073�15030617045�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.cs.allow-jit</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.disable-executable-page-protection</key> <true/> <key>com.apple.security.cs.disable-library-validation</key> <true/> <key>com.apple.security.cs.allow-dyld-environment-variables</key> <true/> </dict> </plist> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/examples/����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017172�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/examples/CTestScript.cmake�����������������������������������������������0000664�0000000�0000000�00000016033�15030617045�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) ######################################################## # For any comments please contact help@hdfgroup.org # ######################################################## # ----------------------------------------------------------- # -- Get environment # ----------------------------------------------------------- if (NOT SITE_OS_NAME) ## machine name not provided - attempt to discover with uname ## -- set hostname ## -------------------------- find_program (HOSTNAME_CMD NAMES hostname) execute_process (COMMAND ${HOSTNAME_CMD} OUTPUT_VARIABLE HOSTNAME OUTPUT_STRIP_TRAILING_WHITESPACE) set (CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}") find_program (UNAME NAMES uname) macro (getuname name flag) execute_process (COMMAND "${UNAME}" "${flag}" OUTPUT_VARIABLE "${name}" OUTPUT_STRIP_TRAILING_WHITESPACE) endmacro () getuname (osname -s) string(STRIP ${osname} osname) getuname (osrel -r) string(STRIP ${osrel} osrel) getuname (cpu -m) string(STRIP ${cpu} cpu) message (STATUS "Dashboard script uname output: ${osname}-${osrel}-${cpu}\n") set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}") else () ## machine name provided ## -------------------------- if (CMAKE_HOST_UNIX) set (CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_OS_BITS}-${SITE_COMPILER_NAME}-${SITE_COMPILER_VERSION}") else () set (CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_COMPILER_NAME}") endif () endif () if (SITE_BUILDNAME_SUFFIX) set (CTEST_BUILD_NAME "${SITE_BUILDNAME_SUFFIX}-${CTEST_BUILD_NAME}") endif () set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}") # Launchers work only with Makefile and Ninja generators. if (NOT "${CTEST_CMAKE_GENERATOR}" MATCHES "Make|Ninja" OR LOCAL_SKIP_TEST) set (CTEST_USE_LAUNCHERS 0) set (ENV{CTEST_USE_LAUNCHERS_DEFAULT} 0) set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=OFF") else () set (CTEST_USE_LAUNCHERS 1) set (ENV{CTEST_USE_LAUNCHERS_DEFAULT} 1) set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON") endif () #----------------------------------------------------------------------------- # MacOS machines need special options #----------------------------------------------------------------------------- if (APPLE) # Compiler choice execute_process (COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE) set (ENV{CC} "${XCODE_CC}") if (NOT NO_MAC_FORTRAN) # Shared fortran is not supported, build static set (BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_JPEG_WITH_PIC:BOOL=ON") else () set (BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") endif () set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF") endif () #----------------------------------------------------------------------------- set (NEED_REPOSITORY_CHECKOUT 0) set (CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"") if (CTEST_USE_TAR_SOURCE) ## -------------------------- if (WIN32 AND NOT MINGW) message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip]") execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip RESULT_VARIABLE rv) else () message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar]") execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar RESULT_VARIABLE rv) endif () if (NOT rv EQUAL 0) message (STATUS "extracting... [error-(${rv}) clean up]") file (REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}") message (FATAL_ERROR "error: extract of ${CTEST_USE_TAR_SOURCE} failed") endif () endif () #----------------------------------------------------------------------------- ## Clear the build directory ## -------------------------- set (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE) if (NOT EXISTS "${CTEST_BINARY_DIRECTORY}") file (MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}") else () ctest_empty_binary_directory (${CTEST_BINARY_DIRECTORY}) endif () # Use multiple CPU cores to build include (ProcessorCount) ProcessorCount (N) if (NOT N EQUAL 0) if (MAX_PROC_COUNT) if (N GREATER MAX_PROC_COUNT) set (N ${MAX_PROC_COUNT}) endif () endif () if (NOT WIN32) set (CTEST_BUILD_FLAGS -j${N}) endif () set (ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) endif () #----------------------------------------------------------------------------- # Initialize the CTEST commands #------------------------------ if (CMAKE_GENERATOR_TOOLSET) set (CTEST_CONFIGURE_TOOLSET "\"-T${CMAKE_GENERATOR_TOOLSET}\"") else () set (CTEST_CONFIGURE_TOOLSET) endif() if (CMAKE_GENERATOR_ARCHITECTURE) set (CTEST_CONFIGURE_ARCHITECTURE "\"-A${CMAKE_GENERATOR_ARCHITECTURE}\"") else () set (CTEST_CONFIGURE_ARCHITECTURE) endif() set (CTEST_CONFIGURE_COMMAND "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_CONFIGURE_ARCHITECTURE}\" \"${CTEST_CONFIGURE_TOOLSET}\" \"${CTEST_SOURCE_DIRECTORY}\"" ) #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- ## -- set output to english set (ENV{LC_MESSAGES} "en_EN") #----------------------------------------------------------------------------- configure_file(${CTEST_SOURCE_DIRECTORY}/config/cmake/CTestCustom.cmake ${CTEST_BINARY_DIRECTORY}/CTestCustom.cmake) ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}") #----------------------------------------------------------------------------- ## NORMAL process ## -- LOCAL_SUBMIT reports to CDash server ## -------------------------- ctest_start (Experimental) ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) if (LOCAL_SUBMIT) ctest_submit (PARTS Configure Notes) endif () if (${res} LESS 0 OR ${res} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Configure: ${res}\n") endif () ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND RETURN_VALUE res NUMBER_ERRORS errval) if (LOCAL_SUBMIT) ctest_submit (PARTS Build) endif () if (${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed ${errval} Build: ${res}\n") endif () ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res) if (LOCAL_SUBMIT) ctest_submit (PARTS Test) endif() if (${res} LESS 0 OR ${res} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Tests: ${res}\n") endif () if (${res} LESS 0 OR ${res} GREATER 0) message (FATAL_ERROR "tests FAILED") endif () #----------------------------------------------------------------------------- �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/examples/HDF4_Examples.cmake.in������������������������������������������0000664�0000000�0000000�00000011245�15030617045�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) ############################################################################################################### # This script will build and run the examples from a folder # Execute from a command line: # ctest -S HDF4_Examples.cmake,OPTION=VALUE -C Release -VV -O test.log ############################################################################################################### set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@") if("@CMAKE_GENERATOR_TOOLSET@") set(CMAKE_GENERATOR_TOOLSET "@CMAKE_GENERATOR_TOOLSET@") endif() if("@CMAKE_GENERATOR_ARCHITECTURE@") set(CMAKE_GENERATOR_ARCHITECTURE "@CMAKE_GENERATOR_ARCHITECTURE@") endif() set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY}) # handle input parameters to script. #INSTALLDIR - HDF4 root folder #CTEST_CONFIGURATION_TYPE - Release, Debug, RelWithDebInfo #CTEST_SOURCE_NAME - name of source folder; HDF4Examples if(DEFINED CTEST_SCRIPT_ARG) # transform ctest script arguments of the form # script.ctest,var1=value1,var2=value2 # to variables with the respective names set to the respective values string(REPLACE "," ";" script_args "${CTEST_SCRIPT_ARG}") foreach(current_var ${script_args}) if("${current_var}" MATCHES "^([^=]+)=(.+)$") set("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}") endif() endforeach() endif() if(DEFINED CTEST_VSVERS) if(${CTEST_VSVERS} STREQUAL "64_VS2022") # 64-bit Visual Studio 2022 set(CTEST_CMAKE_GENERATOR "Visual Studio 17 2022") set(CMAKE_GENERATOR_ARCHITECTURE "x64") elseif(${VS_VERS} STREQUAL "64_VS2019") # 64-bit Visual Studio 2019 set(CTEST_CMAKE_GENERATOR "Visual Studio 16 2019") set(CMAKE_GENERATOR_ARCHITECTURE "x64") endif() endif() ################################################################### ### Following Line is one of [Release, RelWithDebInfo, Debug] ##### set(CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}") if(NOT DEFINED CTEST_CONFIGURATION_TYPE) set(CTEST_CONFIGURATION_TYPE "Release") endif() set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCTEST_CONFIGURATION_TYPE:STRING=${CTEST_CONFIGURATION_TYPE}") ################################################################## if(NOT DEFINED INSTALLDIR) if(WIN32) set(INSTALLDIR "\"%ProgramFiles%/HDF_Group/@HDF4_PACKAGE_NAME@/@HDF4_PACKAGE_VERSION@\"") else() set(INSTALLDIR "/opt/HDF_Group/@HDF4_PACKAGE_NAME@/@HDF4_PACKAGE_VERSION@") endif() endif() if(NOT DEFINED CTEST_SOURCE_NAME) set(CTEST_SOURCE_NAME "HDF4Examples") endif() if(NOT DEFINED CTEST_SITE) set(CTEST_SITE "local") endif() if(NOT DEFINED CTEST_BUILD_NAME) set(CTEST_BUILD_NAME "examples") endif() set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}") #TAR_SOURCE - name of tarfile #if(NOT DEFINED TAR_SOURCE) # set(CTEST_USE_TAR_SOURCE "HDF4Examples-0.3.10-Source") #endif() ############################################################################################################### set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ROOT:PATH=${INSTALLDIR}") set (ENV{HDF4_ROOT} "${INSTALLDIR}") if(WIN32) set(SITE_OS_NAME "Windows") set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}\\build) set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}") set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}") elseif(APPLE) set(ENV{DYLD_LIBRARY_PATH} "${INSTALLDIR}/lib") set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build) set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}") set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}") else() set(ENV{LD_LIBRARY_PATH} "${INSTALLDIR}/lib") set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build) set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}") set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}") endif() ### use a toolchain file (supported everywhere) #### #if(NOT DEFINED CTEST_TOOLCHAIN_FILE) # set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=@CTEST_TOOLCHAIN_FILE@") #else() # set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=${CTEST_TOOLCHAIN_FILE}") #endif() ############################################################################################################### # For any comments please contact help@hdfgroup.org # ############################################################################################################### if(WIN32) include(${CTEST_SCRIPT_DIRECTORY}\\HDF4_Examples_options.cmake) include(${CTEST_SCRIPT_DIRECTORY}\\CTestScript.cmake) else() include(${CTEST_SCRIPT_DIRECTORY}/HDF4_Examples_options.cmake) include(${CTEST_SCRIPT_DIRECTORY}/CTestScript.cmake) endif() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/examples/HDF4_Examples_options.cmake�������������������������������������0000775�0000000�0000000�00000005621�15030617045�0024301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################################# #### Change default configuration of options in config/cmake/cacheinit.cmake file ### #### format: set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DXXX:YY=ZZZZ") ### #### DEFAULT: ### #### BUILD_SHARED_LIBS:BOOL=OFF ### #### H4EX_BUILD_C:BOOL=ON ### #### H4EX_BUILD_FORTRAN:BOOL=ON ### #### H4EX_BUILD_JAVA:BOOL=ON ### #### H4EX_BUILD_TESTING:BOOL=ON ### ############################################################################################# ### uncomment/comment and change the following lines for other configuration options ### build with shared libraries #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") ############################################################################################# #### maximum parallel processor count for build and test #### #set(MAX_PROC_COUNT 8) ############################################################################################# #### alternate toolsets (Windows usually) #### #set(CMAKE_GENERATOR_TOOLSET "Intel C++ Compiler 17.0") ############################################################################################# ### use a toolchain file (supported everywhere) #### #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/clang.cmake") #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/intel.cmake") ############################################################################################# #### languages #### ### disable C builds #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DH4EX_BUILD_C:BOOL=OFF") ### disable Fortran builds #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DH4EX_BUILD_FORTRAN:BOOL=OFF") ### disable JAVA builds #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DH4EX_BUILD_JAVA:BOOL=OFF") ############################################################################################# ### match the hdf4 library namespace set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_NAMESPACE:STRING=hdf4::") ############################################################################################# ### disable test program builds, requires reference files in testfiles subdirectory #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DH4EX_BUILD_TESTING:BOOL=OFF") #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DH4EX_COMPARE_TESTING:BOOL=OFF") ############################################################################################# ���������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/grepTest.cmake�����������������������������������������������������������0000664�0000000�0000000�00000021504�15030617045�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# grepTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0053 NEW) # arguments checking if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_REFERENCE) message (FATAL_ERROR "Require TEST_REFERENCE to be defined") endif () if (NOT TEST_FILTER) message (VERBOSE "Optional TEST_FILTER is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () message (STATUS "COMMAND: ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) message (STATUS "COMMAND Result: ${TEST_RESULT}") message (STATUS "COMMAND Error: ${TEST_ERROR}") # remove special regex text from the output if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "ulimit -s" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*ulimit -s[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () # if the TEST_ERRREF exists grep the error output with the error reference set (TEST_ERRREF_RESULT 0) # grep result variable; 0 is success # TEST_ERRREF should always be matched if (TEST_ERRREF) # if the .err file exists grep the error output with the error reference before comparing stdout if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_ERR_STREAM) list (LENGTH TEST_ERR_STREAM test_len) # verify there is text output in the error file if (test_len GREATER 0) string (REGEX MATCH "${TEST_ERRREF}" TEST_MATCH ${TEST_ERR_STREAM}) string (COMPARE EQUAL "${TEST_ERRREF}" "${TEST_MATCH}" TEST_ERRREF_RESULT) if (NOT TEST_ERRREF_RESULT) # dump the output unless nodisplay option is set if (NOT TEST_NO_DISPLAY) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_ERR_STREAM} RESULT_VARIABLE TEST_ERRREF_RESULT ) endif () message (FATAL_ERROR "Failed: The error output of ${TEST_PROGRAM} did not contain '${TEST_ERRREF}'. Error output was: '${TEST_ERR_STREAM}'") endif () endif () endif () # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) # verify there is text output in the reference file if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_REFERENCE} ${TEST_FOLDER}/${TEST_REFERENCE}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_REFERENCE}.tmp ${TEST_FOLDER}/${TEST_REFERENCE}) endif () #file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) #file (WRITE ${TEST_FOLDER}/${TEST_REFERENCE} "${TEST_STREAM}") endif () if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) if (TEST_SORT_COMPARE) list (SORT test_act) list (SORT test_ref) endif () math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () endif () endif () message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () endif () # end of TEST_SKIP_COMPARE else () # TEST_ERRREF is not defined # TEST_REFERENCE should always be matched unless TEST_GREP_COMPARE is set to 0 set (TEST_GREP_RESULT 0) # grep result variable; 0 is success if (TEST_GREP_COMPARE AND EXISTS "${TEST_PROCESSED_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER) if (EXISTS "${TEST_PROCESSED_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "Passed: The output of ${TEST_PROGRAM} matched") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/h4config.h.in������������������������������������������������������������0000664�0000000�0000000�00000012762�15030617045�0017643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hdf/src/h4config.h Generated By CMake during the configuration */ #ifndef H4_CONFIG_H_ #define H4_CONFIG_H_ /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #cmakedefine H4_F77_DUMMY_MAIN @H4_F77_DUMMY_MAIN@ /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #define @H4_F77_FUNC@ /* As F77_FUNC, but for C identifiers containing underscores. */ #define @H4_F77_FUNC_@ /* Define to 1 if your Fortran compiler doesn't accept -c and -o together. */ #cmakedefine H4_F77_NO_MINUS_C_MINUS_O @H4_F77_NO_MINUS_C_MINUS_O@ /* Define if F77 and FC dummy `main' functions are identical. */ #cmakedefine H4_FC_DUMMY_MAIN_EQ_F77 @H4_FC_DUMMY_MAIN_EQ_F77@ /* Define to 1 if you have the <arpa/inet.h> header file. */ #cmakedefine H4_HAVE_ARPA_INET_H @H4_HAVE_ARPA_INET_H@ /* Define to 1 if you have the <fcntl.h> header file. */ #cmakedefine H4_HAVE_FCNTL_H @H4_HAVE_FCNTL_H@ /* Define to 1 if you have the `fork' function. */ #cmakedefine H4_HAVE_FORK @H4_HAVE_FORK@ /* Define to 1 if you have the `getrusage' function. */ #cmakedefine H4_HAVE_GETRUSAGE @H4_HAVE_GETRUSAGE@ /* Define to 1 if you have the <winsock2.h> header file. */ #cmakedefine H4_HAVE_WINSOCK2_H @H4_HAVE_WINSOCK2_H@ /* Define to 1 if you have the <inttypes.h> header file. */ #cmakedefine H4_HAVE_INTTYPES_H @H4_HAVE_INTTYPES_H@ /* Define to 1 if you have the <jpeglib.h> header file. */ #cmakedefine H4_HAVE_JPEGLIB_H @H4_HAVE_JPEGLIB_H@ /* Define to 1 if you have the `jpeg' library (-ljpeg). */ #cmakedefine H4_HAVE_LIBJPEG @H4_HAVE_LIBJPEG@ /* Define to 1 if you have the `sz' library (-lsz). */ #cmakedefine H4_HAVE_LIBSZ @H4_HAVE_LIBSZ@ /* Define to 1 if you have the `z' library (-lz). */ #cmakedefine H4_HAVE_LIBZ @H4_HAVE_LIBZ@ /* Define if we export HDF4-built unmangled netCDF 2.3.2 API calls */ #cmakedefine H4_HAVE_NETCDF @H4_HAVE_NETCDF@ /* Define to 1 if you have the <netinet/in.h> header file. */ #cmakedefine H4_HAVE_NETINET_IN_H @H4_HAVE_NETINET_IN_H@ /* Define to 1 if you have the <stdint.h> header file. */ #define H4_HAVE_STDINT_H 1 /* Define to 1 if you have the <stdio.h> header file. */ #define H4_HAVE_STDIO_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ #define H4_HAVE_STDLIB_H 1 /* Define to 1 if you have the <strings.h> header file. */ #define H4_HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ #define H4_HAVE_STRING_H 1 /* Define to 1 if you have the `system' function. */ #cmakedefine H4_HAVE_SYSTEM @H4_HAVE_SYSTEM@ /* Define to 1 if you have the <sys/file.h> header file. */ #cmakedefine H4_HAVE_SYS_FILE_H @H4_HAVE_SYS_FILE_H@ /* Define to 1 if you have the <sys/resource.h> header file. */ #cmakedefine H4_HAVE_SYS_RESOURCE_H @H4_HAVE_SYS_RESOURCE_H@ /* Define to 1 if you have the <sys/stat.h> header file. */ #cmakedefine H4_HAVE_SYS_STAT_H @H4_HAVE_SYS_STAT_H@ /* Define to 1 if you have the <sys/time.h> header file. */ #cmakedefine H4_HAVE_SYS_TIME_H @H4_HAVE_SYS_TIME_H@ /* Define to 1 if you have the <sys/types.h> header file. */ #cmakedefine H4_HAVE_SYS_TYPES_H @H4_HAVE_SYS_TYPES_H@ /* Define to 1 if you have the <sys/wait.h> header file. */ #cmakedefine H4_HAVE_SYS_WAIT_H @H4_HAVE_SYS_WAIT_H@ /* Define if szip has encoder */ #cmakedefine H4_HAVE_SZIP_ENCODER @H4_HAVE_SZIP_ENCODER@ /* Define to 1 if you have the <szlib.h> header file. */ #cmakedefine H4_HAVE_SZLIB_H @H4_HAVE_SZLIB_H@ /* Define to 1 if you have the <unistd.h> header file. */ #cmakedefine H4_HAVE_UNISTD_H @H4_HAVE_UNISTD_H@ /* Define to 1 if you have the `wait' function. */ #cmakedefine H4_HAVE_WAIT @H4_HAVE_WAIT@ /* Define to 1 if you use the WIN32_API. */ #cmakedefine H4_HAVE_WIN32_API @H4_HAVE_WIN32_API@ /* Define to 1 if you have the <zlib.h> header file. */ #cmakedefine H4_HAVE_ZLIB_H @H4_HAVE_ZLIB_H@ /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define H4_LT_OBJDIR "@HDF4_LT_OBJDIR@" /* Define if deprecated public API symbols are disabled */ #cmakedefine H4_NO_DEPRECATED_SYMBOLS @H4_NO_DEPRECATED_SYMBOLS@ /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #cmakedefine H4_NO_MINUS_C_MINUS_O @H4_NO_MINUS_C_MINUS_O@ /* Name of package */ #define H4_PACKAGE "@HDF4_PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define H4_PACKAGE_BUGREPORT "@HDF4_PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define H4_PACKAGE_NAME "@HDF4_PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define H4_PACKAGE_STRING "@HDF4_PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define H4_PACKAGE_TARNAME "@HDF4_PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define H4_PACKAGE_URL "@HDF4_PACKAGE_URL@" /* Define to the version of this package. */ #define H4_PACKAGE_VERSION "@HDF4_PACKAGE_VERSION_STRING@" /* The size of `long', as computed by sizeof. */ #define H4_SIZEOF_LONG @H4_SIZEOF_LONG@ /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #define H4_STDC_HEADERS 1 /* Version number of package */ #define H4_VERSION "@HDF4_PACKAGE_VERSION_STRING@" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #cmakedefine H4_WORDS_BIGENDIAN @H4_WORDS_BIGENDIAN@ #endif ��������������hdf4-hdf4.3.1/config/cmake/hdf.bmp������������������������������������������������������������������0000664�0000000�0000000�00000002346�15030617045�0016622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMæ������6���(���������������°��Ä��Ä����������üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü´ä´¼ä¼üüüüüüüüüìôìœÜœœÔœ¬Ü¬ÜôÜüüüüüüäôäœÜœìôìüüüüüüüüüüüüüüü$¬$<´Düüüüüüüüü¬Ü¬ ¤ ¤¤$¬,dÄdÜìܜܜœ ¬Ü¬üüüüüüüüüüüüüüü$¬$<´Düüôüüüüüüôüô¬Ü¬œÔœ„Ì„D´D¤4´<\¼\¤¤Ü¤üüüüüüüüüüüüüüü,¤$L´Lüüüüüüüüüüüüüüüüüüüüüìôì”Ô”,¤$$¤$$¤$¤Ü¤üüüüüüüüüüüüüüüD”$\¤DìôìôüôüüüüüôüüüüüüüüüüüüüüüŒ¼t<”<”¤Ìœôüôüüôüüüüüüüüüd\„$tŒ4tŒ4lŒ4tŒ4dŒ,´Ä”üüüüüüüüüÌÔ´T„\„$dŒ,lŒ4lŒ4dŒ,´Ä”üüü„l„l„|,„|,„|,„t$td´¬|üüüüüüüüüÔ̬|l|l„t$„|,„|4||,ļ”üüüœT¬l,üììüôôüôôÔ´œœDÌœ|üüüüüüüüü¼ŒdœDœT Ô´”üôôüôôüüôüüüüüü¼< ÌT,üüüüüüüüüä´¤¼,Üœ|üüüüôôÜ”|¼D¼D¼<ä´¤üüüüüüüüüüüüüüüä$ä@$üüüüüüüüüô¬œÜ$ä\Dì|lÜD$Ü$Ü,Í,Ü$ìl\ô¤”ô¤”ô¤”ô¤”ô¼´ôô4$üôôüüüüüüü¬¬ì ôôì ô ô ôôì ìôìììü¬¬ü´¬üüüüüüüüüüôìü””üŒ„üŒ„üŒ„ü”„üŒ„üŒ„üŒ„üŒ„üŒŒüŒ„üŒ„üŒ„ü¬¬üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/hdf.icns�����������������������������������������������������������������0000664�0000000�0000000�00001174574�15030617045�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MM�*��æ€?à@$ „BaP¸þˆD`°Ø”V-Y­ßâ0�H"ƒ9�ºéþþ‡�@Pø þ~€A˜ 1àu;ÑGÐD”|žNO`�&û��à0� ��¡Ò°�ü�C’±+@òi ¡Ž!ˆ*2éB& dX‰ªÛ|¥•.gkÉøû}?Í%€¹¬²‚¿_¯ð@!©Ïe±b�Â,‚¢Õ t2™¦ßT‚� C1°î(—îgsÙd‹¸X`Òƒ ƒÁ€ˆ&ª�q;/'³å˜‚9†‚ è)‰6©V2š@ÈGh |¿ƒ1�qS)Ð… È4*…à )^lˆ%˜‚@ lÒ¯G«lH</רÀ4‚H¼ áxä Øh5"Æ‘Øj …°ÔtžÇXôŽxb3¡`áJ ¡`Ü;ú |§ÁÂzqðw§IˆO$ø€ç™öy !PÔ9£¢ ” Àà# \; ¤é²MFXð€@(08# ð¸_ BøL0IRbaœæB„�Ø §!êrÇIŠ �àˆHÁØ‚˜1~á 8ƒ¨b\‹Ñ‰eFÒ:)HÒˆ*�����������������������Ð��������������������Ö����������������������������������Ý������æ������î�������(�������1������ö=�������S������‡s��� H�� �����icon_16x16.png��H������H������tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6‚@Ÿñ¤V-‡Ä£¸ävHdQ¹ŽM'†Ie¹dªY/‘¨Õ/äêmþO)€Mæp ö«X¿ÒÉ—ûô�ŸDfèŽd0�AA×³ÙØ�À –8 <£Âž¯`� t÷r6¢`ˆ\NÉÄéÛ ñþ��ÂL �²Ö¡0ˆ x<ŸâÒ#±Îê@ ÃÝü�~ÄÀ 8R Öø5Åòù‰[¢b!� ¶Ÿ¹{ø”­‰ù8SÅæþÛîG;ð  ÁLKõˆÍ{3¯gËéü �ì7+ú'Ø�¤Ï¡ ¨Ds¶ÄÀžq¸¼²voûø Ž£‰¶ÍëÑú‹&‰Æt xšE`^ `:"a™§¡MœEé–w€JœÒŒÌ še`b À28 å¹ø:à8bàF hYäzŸ°È`gQî`)ˆK‡±œjƒŸm˜ÐE%!tp€S‰Ã§ø€†12 €¨Ž¢©Fù 0fb”þ!'ñú�ÃQVqGœ®Xœƒ rzÐ|:FñÐx€Ï[fÀP h‚¼ Þ#�ÀÆG"OX(á(AÈQõ•¦A²yžçÈ€¥ñ�/„@¸"‡E‰ˆA•†G"TH,‡X2¡ñÿP�¢°pƒ ˜‚ƒƒˆôž£G©ò}Å‹“T‚§ �¨D—c˜à ¢[šf˜¸NÀX Þ�+�}¤ ’ {ŸgД…ehÒ5€Iè@?ŒÈ*äzŸgµŒÑ!W¬X (aÄ@F (qtlâéJGX²}{G²5z¡áò%¹R/(‘‚¥2€bð`%‚ HŠ. Šáp†�bK%a`€h;Çô\Šá`€ËÈ}2çø�ÂV @h*‚„ĸ†Ì☱~-”€ ­)l¡ø|‰ÅhÆmÇ�´Egà†¶T .†…%kºlà9b&”á�&Áö=äTmòÄÌ( ` ‚iV `Â8•!Vè€`A\#•á�$ÌÉúdF9(j’†AÐdd Qô~Ÿ30 ¬õÀad#–€ÈŽ£aYVxÝàWˆ¥ˆ?á¡Çôxi¡éŸ'gên&Ùžv™Æ±Þ5‹°ü�àaø=Â(£Xx aØ>Z%âÈ# W¼øÀ)@˜‚À0ú‹ž)ü}@À0BèÉC$� Ý+F�…8ú>Ð à¤4…àJÂh¹ høu�ð Â8µ@( À`+Ahé㤠�€,.BP»à%Û¡Ð=‡8C¡yÁç ‹Y`  �p&@¸; �œ1 & ‘Àõ"Ð!è8€à ‚è% Ð$À‘CŒ\Šaº)B` L…R(+Fø¬ã€W�X\�0F€lT #¼K‰¤*L ±R7…HV!X* ¬HIs}—DZ\˹|S¿˜Df`Ì9ŒB¥ìǘó&eL9™3eù�������� ������� �����������������������������������T������������������� ��������Á������������ �������(�������1������(=�������S������8‡s��� H��>��&H���icon_16x16@2x.png����� ������ ��tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6‚@Ÿñ¤V-‡Ä£¸ävHdQ¹ŽM'†Ie¹dªY/‘¨Õ/äêmþO)€Mæp ö«X¿ÒÉ—ûô�ŸDfèŽd0�AA×³ÙØ�À –8 <£Âž¯`� t÷r6¢`ˆ\NÉÄéÛ ñþ��ÂL �²Ö¡0ˆ x<ŸâÒ#±Îê@ ÃÝü�~ÄÀ 8R Öø5Åòù‰[¢b!� ¶Ÿ¹{ø”­‰ù8SÅæþÛîG;ð  ÁLKõˆÍ{3¯gËéü �ì7+ú'Ø�¤Ï¡ ¨Ds¶ÄÀžq¸¼²voûø Ž£‰¶ÍëÑú‹&‰Æt xšE`^ `:"a™§¡MœEé–w€JœÒŒÌ še`b À28 å¹ø:à8bàF hYäzŸ°È`gQî`)ˆK‡±œjƒŸm˜ÐE%!tp€S‰Ã§ø€†12 €¨Ž¢©Fù 0fb”þ!'ñú�ÃQVqGœ®Xœƒ rzÐ|:FñÐx€Ï[fÀP h‚¼ Þ#�ÀÆG"OX(á(AÈQõ•¦A²yžçÈ€¥ñ�/„@¸"‡E‰ˆA•†G"TH,‡X2¡ñÿP�¢°pƒ ˜‚ƒƒˆôž£G©ò}Å‹“T‚§ �¨D—c˜à ¢[šf˜¸NÀX Þ�+�}¤ ’ {ŸgД…ehÒ5€Iè@?ŒÈ*äzŸgµŒÑ!W¬X (aÄ@F (qtlâéJGX²}{G²5z¡áò%¹R/(‘‚¥2€bð`%‚ HŠ. Šáp†�bK%a`€h;Çô\Šá`€ËÈ}2çø�ÂV @h*‚„ĸ†Ì☱~-”€ ­)l¡ø|‰ÅhÆmÇ�´Egà†¶T .†…%kºlà9b&”á�&Áö=äTmòÄÌ( ` ‚iV `Â8•!Vè€`A\#•á�$ÌÉúdF9(j’†AÐdd Qô~Ÿ30 ¬õÀad#–€ÈŽ£aYVxÝàWˆ¥ˆ?á¡Çôxi¡éŸ'gên&Ùžv™Æ±Þ5‹°ü�àaø=Â(£Xx aØ>Z%âÈ# W¼øÀ)@˜‚À0ú‹ž)ü}@À0BèÉC$� Ý+F�…8ú>Ð à¤4…àJÂh¹ høu�ð Â8µ@( À`+Ahé㤠�€,.BP»à%Û¡Ð=‡8C¡yÁç ‹Y`  �p&@¸; �œ1 & ‘Àõ"Ð!è8€à ‚è% Ð$À‘CŒ\Šaº)B` L…R(+Fø¬ã€W�X\�0F€lT #¼K‰¤*L ±R7…HV!X* ¬HIs}—DZ\˹|S¿˜Df`Ì9ŒB¥ìǘó&eL9™3eù�������� ������� ��������'2��������������������'8������!†������������������� ��������Á������'H������'P�������(�������1������'X=�������S������'h‡s��� H��'n��=ú���icon_32x32.png��H������H������tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤RÿŠÆcQ¸äv=…Åä9$–M'‡H¥¹d¶]•KæS9¤’c5œNgR˜î}?ŸMè:$²…E¤RcÔzU6¦SêU8=F©W§Õ«ºEj¹_ŸÅÚ Gú­\ÿ|>�bm™6[€J±þëw?À@;â1 À%hV(�-—oâ©müõwÁ�Y ?rrvþQ,¿ÎxÅð�¬_áˆ4`¨žêàš­<6þý�B—E X<}5Oà0. û}�  Uˆµ‘çæàzL}2|@~Î3¬¿ôâ¥Ë ñ>žÀ0œ <ÀwÀÒþú}€«0HèjÓ#ljæ…aéêsGø "ÈóÄñ¨›Ê×¾«H�„k^ï6¨¹ø~�&!`œžg¡þˆ§Âr 0 ‚:o��ð¤¯:+¢±ÄnˆÆ îzŸÁPR!)Ì ‡ëpa€˜p€ÉæzŸá€tœ',bÇ9þ{žíp�€{&�³oB«Cu °Ú{žÇð�Nh„lƒ>­j =@¨T ¨›Í”öŒIÇù‚TaÀ`ÊÒ b&œ‡Ì}ÆP“hÀCðœ4úð~GÁü�Í @V“¢0ÖÊ«J€"àœ@„Ú”O€�$€BpˆÁ� ²CHO†Fá{™H˜¤nU5À‚ gìøc•!`'QÚ~Gôb™Ç±pažfI¦zžõp€``˜PKX~O@@ �šEˆJòª|†Æt˜ÉÀ~Oá¸\ã[‡èh,§Î}T+ýÊ~ŸøØP… bdG©,T%Yvv\ÎUfÖµÕÄûsà8 ¥)ø˜±ûkr XÉ|MÁ°XÊDZú ¦iÂsŸ5¨�h…ñ0ë@r(]çxèH†±¾z TOAC·$á©Ó挄àf„Úvˆeâ0Õ5“ÖÑ–¤ lnìP{¸ÆcGIï²||o¢„˜n@‚4uÇȾAš%á˜uÛÔú†ÜÇð€F0„àödŸbQeƒQçùý–Dxz ”¬{ŸÈÐ^œGQì`;ñþêŸåÙúž²8xž§Ø–;˜Fq´w@Föˆè€?€`’BNZá>DSsÀ¹\ºA‚svGÇ ÷`è7 Wº=@+À;ËP‹‘àl#ÃHoŽðŠŹÕÌ\†0à€(0%‚`8æ‰Ø x…x^ËDHQÀ„ ’>?Á p„u7À}»Up"àAðj €¹%"la ‘n4ÝËoÍMr?˜b0ÄPV ]·à0Ä¢>6eýÀñ&‚ *±cðÄ ·#Àz€ExÙÝè¶¡\‚@2IFˆà!A@S$†ÈcÎ I Š0ÞÁuÄlŸ0À` (,ˆÎ"SûB&´…ÂÓTEÚ µ| 6IaPB‚lkAÔþb…Æœñ ¸Y2¥¤.<& /ðÒð@ä8àþDSã*#i…ÉÂàGð´Aœ‚<JœbÄg 0š’u$1ÕÝ£çvAÛÏ#ì~ ÐÆ¨4D,‡PëHrvŸÓ0„ºfþJQ»ÂÌ6ðfÁ(â´T‰±ˆ0@hN§é–iǨù‚¡Vƒi áð5‘ÊZÁP‚ºc8X†pî Àè"%ìYŠa21EÐ �à%ÇÂÙ¢Á(ˆ�ƒä{„0L …@`„,ˆ ÄÔÏ#|jF|ô%&h»@¨s¤1ˆ I@lÂTU „�=+"l°ÜQZÔDhücô~ ÀªÂx+D,°D@ °ÅûÕ™ò™›âa—8N…0ð @ÅJ&Ä`'Š0î3‡0Ù~ÑŠ·��Uœ˜#iðƒ85 h„b xPMèqsÑH /�˜¡3lA@H ña‘ñÀ<0J¬|Ñô¯¡"·M¡ç4p (ˆƒ B_‘”|�@ |̈Q*ÖsTI‚à.b éCM‰–(/Ó ¥¶òý‹P®'A�¾¤ì‰ €l « `pW‚Hpà#Œ( ðÄ=Gàö½‚ö€0 ,BˆŸ`B“àP'ÁÎ c¨& Ðbn(!CÐ}PÂ.ƒXÊ8€POk}‡Qç€a`E #à„Ÿ‚‘IBáëUc¤$ bA~J ì{ŽÀä1¸Á£ý<z>™aÄ�@W„‘S˜­Q;B£$Æ3f}nh©¢˜@aœ…àå‚ gˆ‘¸<Fà Yêä‰h—EhF Œ2~ ÅX)on €†*A€%a„Á’:Æ@¤bŒ]ŽQtj� ÛX„Ðö�iŒ„ h1ZE†¬ÕÄûX`‹ Çî¶Zç]”1ô?GÈê¬n!¶2‡PɃ¤b Þ5ÇØÿmèl‚ç°'àØŽáè?™¨M»Tm}³«ux«ÛÓ/pn-ÈJHêüs íóA÷cÌwÛº‡S¢#Ä}œÑÀ3àa{L†!ö<ÈUØAQ†ÇfëWï†píµÄxšoâ¡që¢J(FРC8@PôÀŒÚM€�½—»ÑÖ7ñ×¼�%à–"°ŒB Z„çÍúÔ½»[lt}¹Ä˜½ÍâÝ8Žqì9ÂX¸ zs[o1€õ †ÀVC' ¨S•árù°ñî*¹ðÞëÄ1ðª¸Ï¥kÑRÅ_#ã<v Ь/B¯2ì%-ìëÊ>@`„€Ð CP&÷Pƒò ˜.O>Jùç€ExE@ˆh’tEÐNðgj'Ž�/(ø@ ‹P-À ¤€uÕñÂS±ºžÁûyo8þ½ùï„�2 ¦ ¨`"Äâ{î ¡r A¾a¾ i¢úà4@6üÁp³h'o¶ÀÒ€Ì¡ê¢ �a ÀD âPÁÀ ö`òÉèëªáKÐ~À� �>€@à&îr@d€fûÂ4A ì èñ" ßÁ �@ "ˆ"îüî8ÁôÁô .Nâd¡Þ¡ƒ �½ øð~ÀÀ2@2� "�à"%¡¦Á¤Ø¡t·€ˆ`Œ×-.+£bÎQ &‚½1(µlÿ±0”‘18$q'±@"Q?1H6Ñ7±P*O1X“1W±`¨QclÓñi1Gñqñu‘s±8 �������@�������@��������>ä��������������������>ê������3¶�������������������@�������� D������>ü������?�������(�������1������? =�������S������?‡s��� H��?"��c‚���icon_32x32@2x.png����� ������ ��tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv ǤR9$–M'”JeR¸¤‚Y/˜LfS9¤Öa.›NgS¹äö}#œOèT:%/ ÑéTºe6ÓêU:¥V‘Q«VkUºäB“]°XlU*ýŽÍg´Nì¶›e¶Ý&µÛîW;¤Jãu¼^o7{Õöýi¾_ðX:Þ ‡ÄSpØœf6‹ÇdrS<†O-—“ås¼äk5ÐhkÕ—M-ÒiõZ¸VY¯Ìk¶<ŽËi·Äm·»þëy¿¼]ÞO0Äÿ~>ÀP :¼¾_@ûþö{€� ø�àÀ`�Ã(.g@+Ö÷C¬�þ�€ �Ì^�# )‰ÎâÆz  KÅ1Vœ�~¨$ ð 8� ¼Âˆš�ŽH h2@føª.Ç´‚`� ÇòB»/¸�7 à C€NÚ´qœ �¨.Ÿ¦Q†‚?€ í6 ¨ŒJк +!Ð. ð4Á.»J'1BÒÛ!ì�p�T ^€'i܇1úmš§ø L¨\¸ü�éâ�Ĉ8ÄÊ¡ô鈂‘úa—t"‡Lró[ KÔìÔ‡Í ³+ÌrüÃ+ÅUmP…SÕeFŠV5U^ƒg‘þ Œ\�¤A"~©ú‚H•J}Ÿ Ê�f *D©:~ƒiøõ•lîTµukRKðÒ BÕ•=¿[\õœÒ–ÝõMWv(W æ¢õÅyT²Ñôw�Ðú‚!ðf§ø LóT¬}ž§ùbT�Âp’©ˆx&&1Œ�Ïâ3uPÕƒµÞgýí{!9dº‹d™-½uTUu•w"ÙekNÇrÖwwËçã¦r6ze¹Â4G¡þKà8Ò0½*Y礡ùêq”§~çvM›h-å*�+Œ/³fz—u½[ráx¦»ovî¦L~Ÿ¸P:xÈצn‚Ÿ'™þK‘àHÐ/ÊjYê{ဆz‡üñ©ÕAÁm7[º[ÈFk|t7ÏA¼f]:!±HÈÅ4e×·˜ ùVO·K/Áþ„IÐ\;ó§äh4 Ðò–{Ÿøf$FÁ¶~óçkØl3GG·Ýݵéq£}¢K}gºV“ël.áx}\}ŸgøF€€@BûoÒ ŸŸ‰.#�hh ¬1å¼ÐfGx؃ñÌ+ìêf®Ñ³”eö¸“›\Åb¿´´øˆœM)r A§DÊWkK'p{ŽáüƒÐ �tAõÌC^Òí8L°Âã")O0ƒ@–;ÀÝ€O>R+ãr"/ê "§`ö¢‘D„M÷E3´¨bÌO £ÜyàX À0Á@X‚aȹR§s§já0"@ˆg `0¦D@hGDIn`ð>·Zïгâ\)eïE¹R£4†í¶JChÂGÝ“BÍšÇ9<Aê:LÏ©³Æ Hð!R÷sïî8€à@‡Ó‘àS‰ , @¤p7&Ï��ö‘ØD@΀l}y Ô'ŽQ°7¤L#I{“ñ,RºE�€�Ͱ�‘[b}¤9Ÿ´˜H«$´¬KñUï(�§2‚“ªRž¢BQÀ `(„`BØÀ2B€� ë¤m“ªD%që0ÄȇÁ˜,-×–>Gø5 #ˆláõHÑÒÁl'�àV @8ÞƒìoŽ1ö8G(ûè~!è…P¨=' �ù3B‰Œó#ιIñH#�È6à$³’�“qð�°\6]»w"ƒÔzá2!�Àf ên‹ðlõ@iN¹ÆíRý„E°¼�£Ü!Ì>ƨÛ#(iqŽ4°ÔcàxûO@ž‚Nh²Ê,%²òúÎU‘ñ5†¤@èÄ#Ô+ΩV ú&D ÁYdÑqü °Ü||½W\R«ÖÄ3TRE†Í¼ƒyŠáx<FHÑ«ƒØ~ÔônŽ$enURzH—qeäšövÒ|¨{>?…èž øGÃA¨Ïa¯¤�1ê?Ѐá”*Hû5¸Y÷&ÞÖØ¼«/°ý¿7ì*RF3¨õÀvбr;‡Pî`,Y5Ïcvn­°Ü¹ˆÀŸâðN€| æI„ÀàeÅfU#eZ^C×ðBB˜¿ãø±¨6G�÷„jûÁ2@ÈD n1ð#�æbÐu§â€K!3Ö.’'ƒ&±HúÂðL¼^Œ8cʽÅN?ñݯ ”2… .S/87 Ã@mìz'‹Û!™äL‡Ìø10ÃDy±(7Æ�ÍìÓçÆI‡ÆjBXƒàeEŒÉ?2‘\&Ø' ¡D ä0tFXØ#Ü�Z [^hwPL‡ N€&™xq@8DH¡ä%çXqŽhiJל] @dd0`@ ‹Ø<¹U»à ¹4LV~Ê)wœ†A‘¡G­l °CV¥ý†?Àw›Àè±b0GHfSÄ:�âu@Ìr^ÖèU·6 ÂÚ˜0"EÎ&•d3‰pì C NÚ�|ÐtÆ ÙCÔëæ`…¹(uܧ•“áŽ5xXÃ,uô@0¨[ªs9¾' Çþ¡ÂäG®7qÌ ÓlJ–èš9È0 a0hô?AØi#hq=V¨c¢ä¡Ìv>ÊPÆ ÒD=Œaò>ÙÜ4›kbѰUoQÍBàFàz ¯ñ„a,WÉZÝ ôãðKfÂX"ìÃôÁx6Góæ»ì»sì>İrŒ%2Ž)Åèá b(dpû)k;„ìe÷m´Ç">Øüâ$!Ð[”Ì ©ë]™é$À�òõâX8r�c$‰�X4 …BáØ[áôý— §+ÈAÀ0Wü;€$0W›Ýö•7 àBXt¾a1˜L„ÚÙ´aR9,6C#…Ϥ‘÷ýðû~­Äaè°/2©Tê•Z˜T¦¥H+uØ4üB‚½Ò“pèÄHU­–؃ôzrY¶œ8@X¨ <¤Ú;1ÄöÜ5QØñ{Nk7;¹ìÆá”K ‚¾É/rLÜÞ¶A’‡‚ÀÆQ©ÕJÊ –;Øì€ 5…éIJ‡˜1N«ˆŽªø³Âïy˜X¨»‹*PÖ>1·ü´%(³iŒPx, ×—í²ô—êÕ�M Ã^/w¾ -&ê™ùÒP“4 DQSàà"à|<†ÙÌw€À#”˜, áæ{D Ð Œ"(W�:Çiä{‡ÃÉTsç¨ £psÞ£(‰h? !àT Ã1“T ‹¤³8Ë£ˆK-žP‰86âÐ~êÆm@r;†ÉÊw# Žæ§É+2Ì£©9ôIŒÂ(Â!…²3‚C†1U˜Àxµ-¢¶Ë6à]Èlƒ2ü "‡9‰‚’~ "\ €üð«gáú@•FBzÁ`N‘2ìÒºüDÆ#ÐA…Ô'Ò#e#j�DÑÒc?%éõE’Ž =@…Ä ÐàH€L� Œ„b8±U±Äy*QøÌ5”ñ# LI¼–£ì®2çš IŒ"XÀ 5à E¢ Nšç)ÖÁR™þÙ#ÕE+(JvìÛ}¡k˜¡ß¶ZdÚ€0Pk€¡˜D Âlᬠ$4r†R‘ÞÛˆv=nªWâKÏ´­V“çÉ$0 ã�|Üí@ÐN•¥9Žh DÒžª˜xŽŸ×¦0™Z‹ÖO,7¦„ÀX8ò'ˆC’ 5@ØØ@ç±ÂÛŸÕz6¶®³{æ<›:¯*Kéè|Ÿ$€¸(Œèm™0är`åinW÷Ë*°ä¨6†Ïä¹¾†Õ©ÿ Jl»;?6–üzŸÉ,/ŠÂàuº0ÀàÞ>lü¨3^†ÎlÔEÿ³¶æÆ—·;p´* áàqº°ÅyšgŒdùHÞ,ÔÝ’loŽ¢GžN1}JFOçà6”(µú Qx: à$­€àæ;õž®‹¯c½‡GóAÙ^­ä>6¢öDx°, áÐuÜ­¦ÚAHK‰PIãÏtމø›éŠã‹Mp$å¼wÒýÑ}yÐ$ì=ĘY axƒÂ؃¸rhœÌ¶uøßáKÑ‚N•´½Gf"¨uùVØ>xU„0þ–Á˜8FðNÂ8�6 ØûÓ=´E7ÙkÓi-h¯¿8=Ã`@Â&…XJƒq 6fyè8è§£Cñc-}þ¦Øz#‚ ^ ÀÜD2¬50ã ‚\D4ŲUbËÐ@ì¯Â¹^xòx‘¹láô4Ã9Á"”71l˯—b|/”ði°ÃQþåGÀ A„/f«  ÈNtd<‡UÏ!<;Êò`‰>1CÔJ@Θ?-€€@GæÆÒ”Pw-Uºˆ¯ fé–cä{ˆà è4Rت ñ¸4BÈ£@(ž‘“f“±`÷‘ø>À¨ âà2ˆ@0€‘l" /ÏcQ<`s IùƒD “lâ4'pº Â$ê*b”g Ðâ,„¸ �à!áÀ×^£“!‘”M¤5©òL–€ýãð|‰€¢B-fpµK%ASƒü~­¤«!ÔN`N¨®8H`—ǘúÂ@&†ÐÀ ÂE *B _ &1Eh �à*GMxc d,$ôÔ׉LŸ|ª‘¥J¹â’>O� ¡0† hÍP"AZnÁcm— ÿ`(Ò…‡"[ ɪ%YéÒÊ>È? Á@TÀL¸¨ƒp ®Ï,Å ª±¾*"B4�L¥|ÇŽ8FÓ>�@ @dfAˆ-gТщý+YkÐŽQô=Ä0E Ad{Jžù“RH2î¡Ð=hG!¨y‘줩•m¢DôÙ+$ÃÅÇ0±ð‘ÄÀ€K}� !�JµQœTõ#­°{ÐÂÐ- 7 RT5EÈo €`6&ýï‚DŽ~¡\„ˆ4Hc £0J$ð‰luƒÐ}a [¡3ãµÎ³Â¸®#0s00SGQVn@¸&�'àù!HH€6§ñâ�ÂX#O¢E]È>2Â(!`¶ vWÍ |\ á„Ũx¯îSÐé„CÇèú!@I€4¹³IîÂ` ÒʤØ"«ƒèzˆ ‚Ø+ ÿI!ó¯ ÃPu˜ šcbl±­m7/u•²u:#>-&uÁ8›´…Qʹ¢G°‰áì-‚ £«uñ©4Mˆ±–%°Ø ^ÕAÍ‚9­2pý"œ& €pYŽ¿5@ O½•Hv2¢$‡Ð´ BžØÝL`AŠÐpR` þ4{6Æ ‹ìE4èS„¡9µv¾é0À Ps­¸H<áhNÃHXÒƒP0‹°Ö<Év�sÒ™¿KrúJ)Úœ$ àn§-  QCa·rD,cìzˆ€t ‚Ð'Œœ£‡ Ö4ƒ0¾ £°|À‘©}/xµ†éQò)‚?à×`R)3ö ÛÅ{p€r!Ð& ÝOt qÂ.ÐÈÃÈ}<ŠÏ(k­Þ®EeôÁLE7îw± T)Áuyc”OA(Y¡c½æ‘ì?°’bLN q<f€?®¼rï">E(D Ü w¯LP¨“ÖGVÐ�=ç3â,‚@³éqX¿ÂøG!4`ЀoPláu,Óí*5îA炦ô\Û�V*’)ªðbgQ~œ¶c¸i Qª%ØåFk"ä|ÑóE(Aþ‰Ü}ò ÅX(à£ìz}¡Aï?¡;‡À~¸bHbho…`a@`¼h{�P�QÁ¡ñ‚À¢Í ¦?{ø€³ùÀ…¿³ü ì³þ¿üs˜i‡xjðr…èaÀhm‡ˆm–�I„>!/ªH~� �X�€¹èÿsø?”Aû¿ËýÁ;ÿ@& hàu‡Àu‡�y†øj‡xj†wˆjpi‡ z‡ |‡ð|¼¸»€_-€øØØ�ˆƒM†ÀMp|‡r&/©ÂLA*4Â{þB“€@{‡@v¸uÀÂÛ<è|6ƒÁ‡ˆ}€v‡ÀvÄxs‡z‡t°tEx¸¼5Ëx€0Ä Ã‰#C˜¥*PGÀHø ø …¨ <hzĶD,%Ä@ƒÄT¿ÔFAKI†Xu†PMÀL½ðg‡«×ÀÀ’B´¬|À°”˜Ä-©IÅ™P ÔLÀÉ€(C¨DxˆrÃ@'Ð&Æ aÀÐÀä%@ücÆD'FT(AD)±àPÐO„0h(ˆ‡Ã¢€P€âFÊ`4˜z¹ €H „X„l]¥¨�C8q‚x]t|Â$b@Ûh@ìcH��FHàA4‚²¸Z‡Zƒ`cH€Œ€B¤ ˜}‡˜� H„X�züˆ<‘É,“½|} ¬bÇü—É„I”eÂŒf°”h\‚dQ‡;?dÇT €#°€#ˆ\¨I4”D‘I[ÏGôCÆ<˜¾Ä®I£ †,‚ð_‚ãõÀ˽´`8@?@è 5ˆ‡K¤©F”ÇÜ~Ä4¬��XÌH¶<C>Ø--±XS†èSÀe°€(½*¹<p}‡¸ �H Ø‚à1@2€x�xªL¼»IQ¦‡è|@è�°ÌôÐMs‰‹Á„hp) œ°T†ðT¸dƒ«à¶C‡EªœÍÈ� &€ø'€i‰Œ4²JŠœ‡´ªð°Â°TUˆ µd¬°^ f`eÁÚÊÊ«Î3¸T‚U 7úñ†hv`,è+ M Â4u,x€`‚P`+,ùŽ´M‡€%À$DðvÇ ¶B5… $° �QÊÀT†èSƒdˆ�0 d`p €U VE{/}ð}P(*ˆv†€Ë’u 4+R°},x €@ ¨ °#�à#‚ $RQ€cƒpW�V€p€p¶Jy‚ ‚OøP¢l¬@|0aƒ^Á�=9‰ƒ¦0PøQØ !#4†hu†`/†.ÇT³˜£@´#E¬ R˜ €P Òhô^Ð Ø�Xl‡€l¨^‚¤`Õ ˜ÇT€XS‚TX½LÏ Ø‡|@R(8…àr…ÜrG`ƒh3¸ �H ðH3;_Ôp^Mx;DxtAÜ;IùW,x�‰¥«œo+˜ÍGdÙ�h �H Wx €€€Nâ®è]‡ ]°e¥º,ÌÐ�B4ô�‰``„p"€ã-Öc.Š#p…ˆ[‡[z¥°ØÝZ°¸ Õ»”z „ðc‡Hc:v5Dv@ˆK‚€N OU�Õ[�è�`U°WÐ Ãkløy†ðN†ÈNs†wÐwšTငçÀ2@3Ìl§Xý {¦ 5`ÁU1Ñ©hÙ‚š0 „RÏÔcÁ`sÅ8‡ð ÖíƒÛ}w:EÅÜuÇ•ÅwÜ…ÉÜ¢l¥5ÊÜÅÌ‘•É\ÕÎÜðëÜåÏÝÑÆ%ËÝ%ÓÝAÄÝ5ÔÝeÖÝ ÖÝ…ÔÝ}ØÝ¥Ñ]ÚÝÅÌݽÜÝåÈ]ÝÞÞÝýàÞ$€^âÞD^=äÞcéÞ]æÞƒ±^}èÞ£†ÞêÞÃ_Þ½ìÞã?ÞÝîßÞýðß"îßòßB[_=ôßaºß]ößD_}øß¥RÝ]úßÅ÷_½üßåù_Ýþàˆ��������€�������€��������dl��������������������dr������Kj�������������������€��������������d„������dŒ�������(�������1������d”=�������S������d¤‡s��� H��dª��¨Ô���icon_128x128.png��H������H������tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”F OùL¶]/˜LfS9¤Öm7œNgS¸¼®y? PhT:%G¤Re3êU6O¨TjU:¥VmL«VkUºåv½_°I+%–Íg´ZmS;®Ýo¸\nW:í¶éw¼^oW»äŠí}À`pX<%¾ÿ…ÄbqX¼e ÈdrY<¤c•ÌfsY¼N_9ŸÐhtV|öM§Ôjhú]V·]¯ØJ5›¦×m·‡l÷½æ÷Uºßpx\<Ÿ‰ÇäroœnW7ÏÒ@ú>§W£,ëv{]ºŸ3¹ßðxeÝï—Íç•t½¿g¶7ä÷|~^o‡Ïí÷ë}¿ç#ôþÀ pÿÀP, ß½P<·$ Œ« ÂÐÌ4»ÃÜ=­0ìAÄ‹¬ÅJãEQl\£E‘|e§QŒiÇ „mÇ‘êGÇÒ „ŒÈ#¡ò,‘%Ɉ,•&Ê4Ÿ(Ê‘ì§*ˤ¯,Ë‘l·.Ì$¿0ÌÜÇ2ͤÏ4Í\×6Îß8ÎÜç:Ï”ï<Ï\÷>Ðàœ‡(�fùäy €��"�!poÁâx€¡®›§��é�4 H€e"€�À0�ƒÀà�o|N†g`�S‡ùLUŸæÑ¼žZì!($ �PL�‹âÐ,Š€;ŽÁl]äáB™Fqþs!õSB4r µh*�P.Šà˜$� H‰4¤©6‘yür¨ �� 0��hyø~Tw8�~€(R�Ž#X4ŒU+ fà�ä<ŸÆˆ–;8aõÑ;õ b�$‚t±<€"˜—!k±áN c¡üS‰fàéö| š€Ä3�D¡|ßn!"LãÑ�ÇžZ€:_éè& 5ãD ehJ°yž€�š,Æ r€”žÊ“ gáÞ� "ÈT€ …7„)ƒÝ €�( äcÖB‘Ì¡¼â Ï$Ña;°�ôõ ³!™GWÒsÝeŽu)HˆöüêÍsè!ú´à˜(€EyFî2sÔ4gñ2Ià($¶m\ì>�$Hýu6¥%€.ŒGðàR÷›7ÓÚý=VÚÉÝ_M÷oýWà‚óŸºÉÜ÷¿rëC¼~OúÀ%F©Ytw¤ —>§üç @ÿuN AXé_Ä } ºˆìSe'ÏÕ÷À÷âéVCš¯ú;( Ü Cñ‚P– 4/Ÿé¹€d!û¿¢ ûû��4À%Ä[ Xä] ñþÂpý�ŽP�½Âÿ¸þbŒL� p�ÁØ6…ÆŒrŽuà‡â›z Ô?wdætƒÐæ6Á&€©œ8„ŠŽÀ[ßlcu01ÙÇùüŸ„ƒ…ïÎ=¿8k³†qÞDH¸ôí cQ`ˆ;˜±'L…ŠHÀH¯!c¤±â?IPB¤Ù…/ÊTÈ iáÚ£f@�~7QV)€(T À ˆG较ø*©]!ßK±—æVqô£ˆT�B´P>yjghx¢PIÐ ˆ¬>wpD”J ¥+›“º”ÏþGè],fœ —+ò|Éy§(e4 5sì™Ð)Õ>e[ñ“RBGÊ8ùçƒí¡IPI^>‡°�àÀ ‘r†XÏÀè#·Ê��.Òª‡Pw4?T€eƒDa�PLæù•#‚°t>Ǹùo‘(¹ø��Á pP … oøL2'„ÂâQdZƒ€bð¨J- ŠG¤ÐHÌ¢W*ŒJäÉŒÊg4šÍ¥ ¼9'’Ê䓪 —NáñIÌeôô«TÀt:Aöy=?@Àú U:¥CO'ú19š€u«Mª×lµ%“ÏÓY½ôQ­·Š<¦e0¯^®óYäV‚¡a/5¹|v‹¿áïsæ#H‰¿äY<~&g—”Ácôœ2ÓDÃhó2É&e.¿D$˜ îV%ˆÊ_/7ùD "ß Åëø Í×$ÚÜDôó�‹ÀE P ÊêõºóÙ¡ô¦S¿�ÀÞ6WŽ—égñM¯Ñ£ñlµ˜ÿ?‹ËïÑ^«\˜ô;ž“´D~Є^fDáãOšò‚Yá^áaïjf¹Øež—íëz^D˜ý?€�@�@ xö?ÖÙíM ç±’I“ÔÿÄ`¸*@xj=œ¡ W> ’ìýÀ¸Â K_ná)6†^X=[zv je&5,jÚ‡ÖQr¡˜ÉŠŒeÔùø–¤øõùJSøý��`lô€¦Èa‹d“Ú6@2à¨gŠ…J&ä1c€á?ÀPcB™ùBšf*^g…!å®IÞz„R¡yå”ÞÔrw_á62§¨jÂx˜aÑCª8mgåôe¶GÀptòž”Šò.OiÄÖ|Ÿ£’Ŭlùàø>@�ðN=LãAW”^©í >eZìTÑ zšT!^Ø*í –d¦†N¥¬‰Q”¼šdB©kÐDr-H•·òQ‡f‹“Q.‡“¿vª˜OTuúÂßЂoqì¡D³�¼g!„±põ-‹“îGdíì KgfÍÇ_nÛÎ mQ¬I§—œ†sΟ”n º‘jRK‚à\Úæ±r÷͵ÑXÊúL¦s¤Ò¯È—ZMB3•ªÓž:ݾn¼ÇPôdÝ ?¢0;ߨ3Cˆ3 ZM~qÁ. `3WßQ$[= ‚ìû2 §g`x¬‰D™a+F+~F`»Ó¦–dã.>nçmþBšÏ¯F'¤LjIš­ê7mK¬±ºTLû?��l�€€€îuuœÕ„>`�HÞKr•áßüu·<Ë‚ôú�®­ˆæº,SZäi¹nðë©Å šÍ¹Þ{Âtn“¼ò,5³ÝÕ v«5ܱE×;ß›®Á=”,øSEÁXì]oÔ›´ÈCÇÂ5x@[Š@ùàyZ !px¼Çœô ƒ˜m  ×TÓ{ªU¯yO¦³í—ºâƒN¥ð*‡ÚÓ¹üWm0ù6& F‹×[ŒÑº5â­Wºlzg¹ûÁ˜@cà@ÿBˆ€€F:Ö1F)L½ùÃô¯_ÿá !À±F Ä`&$.˜>^xg(Iš0þÏr-‡(=õ(býÊ B}Á²<‡y!n@ŠaÐ=økàüaP¨û¿„Û4o‘`�{§Ðd €(ÇàL‚AÒ¼N1’[åò99)‚]2&U’€”‡x·ÃäÁuê©M‹Šir²•2»c‹_pþ/h &#Èqò ï¾)ŽÕÔFtoáôGøBÒôËŽ¡s4V@‘·`P! A(ç•’˜$„0-…—sȃ ¾;eŒ³–²‰žÂ‰H•gô%V,ÁUÄ,Ý[@z‘ñÖ½×(Œ Ø¡SrÆÅàÔI Qê7˜bÄÍSOVhj}¤ó.?Ǹñâ?�ð`q ˜r½t4]×9(®v‹a@'œó A€vKðRDUŸõ3þƒù—@Ràˆ¯ã1T ü€´‘ÎP’ÓVå»S£Nƒ&·Ô¹Üý™©ŽIV‘6¡!¢d~±þ>“èr �<F‡ÉTC�P'h6DVo ¤e]q2M>„„°Ÿµy Â:Ÿ¿à* ½Ã­WÑü½–ΙóªúÄ}}«Ö‡rshìšá›.Áî¥x÷Mf¥ˆÊ½µ€~?€p�B: Ø©@¤pÍ™pžµŒ &Èka+Pb6bÍK[­X!õhš¤i›ÃÐÀa…$Tm~ð3ëY”9tðúÃ.”G¬5][ãøÚÚòÙYæu"Xé¡û^[‹Ãk®Ãè''ž�BXAb8 V T‰,@¨pL‰>Gm«^=´U__€=‡¸þ ! a:îô‰ aŒt a~=€[ÐЮĵ,H˜­àú®©Ü–€�Œñ5un„ŠÞ¹‹Œí¹Ö¢@Ú8Ƙ�Y-*I{!³ £/[fLžM20�€,ÐLÁ°/D"€°Z Ñá6`°oIˆRt™Ð‹QíŠB� Å g3A€–0¶Üå<u˜ï}36ó5� <@ õÅ´wÑÙ©åûA  "€0� %jÐÖ‰¦–Ú |vë]!­)/ýˆ¶Ñè{Qüà Á^/« ?“´a8 @€&@¹¶çQ¹wìSÑ&z~„ €¨œ[B„°Ê9tˆôÇ¡íP#’O&¡Å ø‹!0ÇÍuÔcønŽ1ô;pý£¤~ ®>FÐßC¯RAÎ>ÇÀ÷!cüm@ ¬�&ó “>…°Æ‡ù5O‡ é§$˜ymôÍp<r=QZ¦†äÒôz*§\Qä?DHyáØ2=×Ñ—� Ãk’*T­wèóA¼¹ ÑèQý¹@Xµ@s£¼p–‡·×m·á">%½¸t•uP—¹… ™¥hyìQ°7GÈÔcèl áò1höã}ŽqÖ>À#�{Si€Ñ ^öÖÄÏ/*œhf?½1Øf,¨{G ó¢:€òéÿ\õ*°[r]Í&;ä%o±h&€÷ªjá03Ž!l0wÝåêǪ„ ~{‡¸CCt±˜4ǸÊùâðcA¸8‡ÐïÔž4��€ªõkr}m¡ÉëâsY#Ǿۆ®r{ðþ‡ ôAÐ ‡Íd½ÏøG 0T_­M –¡6ŒHÜZ?ßÐ&�}þLd 8Ø0ƒÌÀ%ÙNôqšá{Í|UDDŸŸ&�€¬ð6ƒ€>C3Ô,ô<C,5Ü;´?� p™jÒÙWùÌ@ÖÒŒéPÜÜ’-kŠM0 Õ­xæÃÍèBÀhA•u`6‡(�Ì5´äŸ‰Í“Dž”@ÃъЂÐ%à’ÊĤ7ÂÜ0ƒÉÙÍÌ“q{¹¾A$_%Àˆòx9è-C<‚°.CÀ3ƒ\=ƒÐ=Cõ÷\qµH­•±XU¼WVÉ.È:ƒð!ÈáL!®(…°@Ð4T5’1i[|ET@úÂZ¢Œ¡A0ƒt-àYÓýÊ©{†œ„Ä~+€ö,@‘+45ƒØ(BÄ;`´<Œ9ÅЀãV*GVÉ]}WÐkÈuŸÏÌÏÌíù¢±˜šã¤H¡9èÆ'Á‘¢âÒ=Ü@Ø3Ò±ìã,ÂV2#Ô›4l-ƒ <`U¼ÔtçÒEX„®@ôÂÌ%�•l¤;Cì*Ü;‚h+¨5ƒp=À÷£]¶Æk—8h˜_¥}âLxÓ 3#t¢ð!ÁÀAàÛª@$ìL@8 Ã5AÞYÚÙŒ`Ý@?ÃÑ¡(@BD¤ROøA´6¢ä< U‘×ÔØß®PÞÉŠ$%0$À™£È=ô(BÌ:Â`*ƒ¤5ƒyf€ �œ€fTMV_¨—%½¤¥äÜÆCD2LäÔÁà€nSæE�8C,¬¥õBáæWÂÌ$ÀžaˆhA¸6Ü1%V•ÊfVD¨[�D,‚H ¦Yô"„9B\*ƒ ;ÃÈ?�0š¶9Â]%Õ°Vá•TU½ÏÙæ¤)��<CÎM¼à]ndç4Àì2PÅ”åT0ºáÚÄí”æ€=ÃöW¦$@¦sG\¼5¦`;Ûɽ é(£ÄB@îx�ªƒp8ÃÜ Bd8‚ .C®\¤úÑHü#¬½NV¦,­”NCÄ=$Ð@†rÊxæÀð1ý{æ†W€H,‚B}(Lr8T-Ã;€,$$k¥_’%†º†€î‡< #Ð+ô;à$ƒt7ƒ”>�4Þ:œŽ^ ?ÞVY,å5N2K^`JÂq‚@Œòh‚O�<ƒzÑÍxVu'èÄÂÊ)hb8CN‰C¸"ñGT†f„�î™B8 dì9ð>ì%Ct(‚Ø:�"\zÛR¦0ZšbJ&zq)L�Á~)¢NÀ< RR9 ¥Ú{åΡ‘¹�èÂÄ#€º¥…àÁÌ4h”;h¢ŠžU³á0A(j©Ä#@¾sBx,ƒ˜‚H6ªˆh¦Ýž0’²*ê€×ÆÄ®ª>M¬ AÜ€†ªd�/ɱi¥ †€æ©B4 +T[<@-Ã:é¼�]HÜ•$‹†µmp=âw€äÄ#�ƈ4ÃÀ4Ã|9ƒÞm(ªT…X“¹+,aPÕ#8NƒÂƒB€˜Áv,ëŠ(ÀD‚õçXì…®™`…Ö½ @T,B.¿,pZA<C8.+¢B#il ?lªË( êX9¬>hC<0Ã@;ÀD‡R£å®Òùç­:Ó¤¨BƒÄ=bp�¢Æ@ŽÌ,té—Øu2—äÙéÒÊÂÆÏ­|V@ƒ0-à :«ªÃê8MɄ޷@T,$ kˆ:ÃÀ>À$P*Bô9€8šÁÍÕ¥”…ª€­™˜gmU‰­”€�%>Â�¤ÁnS­²€D‚â.Z˜¬æLáÍ|Ó¬ ?$�Zßmþè„Üà2‚âܪÁ™*6Éë„? �\, ®Ü‚04Bl,ƒ€€2Ó%åmçNVÐ`¹-`>€¬®‚íáX -˜ö&(N¬êñ®Ð!ÀÞøÄØä2à2C¦Š Þ“­6È~éÀì ï !ÀâíÃè?XC0ƒ@;�8ë­© ¬é"ë)-H`yN"ùød*”œBh2æÁ˜ ئJü_à$,ã§Èÿ�p ,p¤MDƒýƒ¢B )̬áÓX C0 €`+°¤:ƒ¼>A0 4ÃzAÀ"þ¡ÒpÖŠÂÛÖ^ªÊÉg=nl@´fiðÙê€LÂÅ!-ÎÕ”º› hâñ@ÜB¼!q'„ÄAð10îþgYÎ&ãñ0 ‚1çCÄØ0Ì=Ã윃‰Yûžmä¥îÓà¿ZU ƒþ÷�¼bx±å×�LB¹MœkCþû1+Âr KDC .(9€0-1G±m•Ml•ÓaybüDï@Ø‚¸ ò×-‚À1ŒB1²M—%̆0NvÖ+ ÆÖè!Aˆ Ô�¯-<+/eÎD¼Œ™zC±È�×3B ³¤JHƒ.,9±ý䆄¶Êì�ظ @ÿ>„ l3B4+X�0¤WöC2�WÁ5‰|Ì×ÄRJ„ÜQNÖç8ÀÈAZt=£�P¦ï㣠3Ó=´04¸DÁH ü.C,9oå4&ì‡1¾^©�1ÈÀ×BÂ�tº÷ä5C„;À'$ïfœthš­H—D<CØ>‚�ÏJéçN™<H)×Èà åË"±Ƭ=µ( 54µ¤AÁH Bô.C09(¢õK”­£g¯AÁ]¸Á^‚ø4˜ü.ã^mùgí[G38u Ôjë^—xAP) ]A„ =\�ÀÌ63c¶Œ�L ‚ì.6@Š{.[ïðAµÔ>ö(B´Al€�0/¨0ƒx@(VvI¤°øjCop Á| AÔ+‡qÖLAX(žQË |šb:„½o �sqqÁL Âè.C48¶ ú¶ÔMav¬?6·pÁð÷6ƒ<�ø‚ÃCù‘®5Ré9² %S7WSgAx ÁÐì¿wÓÌ`'ö¢LnÃk@x+x |B.7×}ñQ6¯p@ˉìxt�¤%C�(Bð5®)ž0N¼KîzÑ­nxEB\ͽ[I @äH ¸Û‡h'c¬¿ ‹ÐwL)N7�€È·7ÉÃ88v ±§eDÞÁ¸ƒà>ù|´+ƒ87C¨ð+@ªÙhvkz\˜`Õ<Ì–ßXCä ÁpÐ@Ó”“ÈÁl&‘Ù`ju@¸Àù€+äù!ÂÐ.C88 W`ãjÙw¦Pö'§àzD�|$Ü+ƒ6è¢5T™È޾ÞëGˆÜä´KnDDº$ hú:íºÉ"@\B]ðª):˜Ÿœ@ȳ¬9"BÈ.ƒ?©Àª`ð„†Ë¤­ÔpI8À€ÄB°Á;¬‚ì4C€ ,�(î2ãdÁ[Ç×»5z‘c¢B €ôÁ>òû9"@`ÂV{FVĪ|Eö¬> �„*ÁÜ÷B(,ä3Ã~ caï ><d �ˆ*ÁØ:ÉÀôAø)C`9C·¿jÄ©´xë!(l.b­Òo•L<µˆ `¼.ü<9@`BJn2]˰ºÄ¬ >$ €Œ*AÓÌvÈÂ4+Âßž6 5£ª‚Þœ�¼´*ù?Ó‚+ƒ!‚´1�8Yã'ÙvÓ<»Î…6ѾÕ@�<5Ô"At´{7Ó@Aˆ$"ZgüQ »ˆ‹öDLˆƒü©¼ �yýÔ–R@¼œªëƒÅE´5ˆ:ú86%pp’¹³ÚÃ耼¬ÁSÓƒ5ÈB$)õcVxCÌ! ȃ…<=Ãä?D €£Æ£þ¾�Jì?À6¡�F›Èˆ?€\À0ÀT2ÿñVLA#b÷voŒ¹¿ƒÊÉʲ½u^yx;ÚDþ���`ph �B ÐX<CaиN �` þC$qHÄ‚AeQXTªS…½Ÿ²0¼Fª9¦séýƒB¡Ñ(´j=èø}é×µâŽÃásœ¾‘Z¡ÕjÓ\H�ù}¿_O×ín+ŸÊ¥uwývD¸Ëì2MÒQr�GÀ7×ô0�ÑȘ<L‰È¢á%§#’ƒLÈ»ÍÂe µç3W¸µÏ= ¸ÁïR˜Ž‚¯VÓBn¹«Í«E™’döµ¼î~#¤½ÆeÍDýêù}…ÂUQÀ±¶åó9¼ê…0­W²š ¼U“×Q«4‹_?kÚÞkõsÿ†‡Ú?ŸïÏeùD¡Ó©4~Aü<ðhh"†±þQ6• gÚ7™©W[w•éªK\ÁÞzhißL’£ÙÃcœq¼Zbhž(O‰’ôÉJRÔ@xQ,]ádކ›ù³ G’>^#È-­Šb”’=‘S%U-Ñö>§ÌwÔL$e¤Hfm!j¶­pW[¦yÞld½A˜ÝÄÆ6ŽœÆºHƒah%0F&ù:'xá(xgœ$Ü- J‘¸\–èª-Ë-Í`Z%JP,¤Ž&R†á.’›™%y©‡:›^X*9ÑtN6‘?^ÓÈ÷> >!A*ŒQ±¬ƒQªØ&ihzvB *9®®yÚ(¥rÜЧž›ÉÝa\­FÒ;¢èE r¤mkÛžèQN°îHbU6|€ Ž$;R V›F’j­½l™ùƒn–Ú~Ÿ$ð�ð=Ïr8ZFa�:ÁÑppm !xò ª[)™ª*È1¾œ[Çjiަô…¶*|†W粯“h·‚È›’‰ž ÈQUÛ?�\'â*±Òt«Ä@!É#|ê;@`§®|&³è©ÊÌž/Ìç/‚ãlϰë#ù}-Ç1¬-­(Çí&¥Êuªš¨³pª‰þ›0=†úžô¦Hõ”„mi¸>.ç{Oñ,%ŒÃ|â<–øž`ÙŸ~‡9Äù¸Žd;;…ói"ö¶‘ŒÛyk,>•¾ ,í{Îs={z«Ú÷ù‚@ˆ«†nXÁÁÁÄ|Ýú ?¯ã<¾·µÚôŸ)nÒä´A0*sÏi[;ó"™Öõvi‘\ÂÉ]ï®à ‚’ iüï΋‰rh½5Í,¥µc"›a¿uÄØ¾v:ýë¹UohϪךéKl#Ð|ZƒHA�¡ƒÐäY£Ym?©wG „ 4Lÿ´ò´ÛÛóéD}„GÜ*8e…pñ‡¡\+ĸÀ�8�v~EŸQË…/(Í›ôʇJú4æén;BN¶SRÅs¯0£¸%–V3£(cÈ|€Äè ¡^@ïQCÜz% ð>€¿SãuAg=¸Ö“ê{ ùM¾'¾´ßx‰Nå(®�R …8f ðöJœá&/…à}"¼€d¡4"‰l‘ÇØµ’Kÿ4éâ0EÔ”Ù úƒð`..ƒ€u ÿ(À<ƒ¡EŽÑâ1ʇÉM)tž:LVûå„20ñ׳À�ˆÌ7bœ2™-8 °‚àA A`Œeå¨VW¬Xý;ÝÔÍo¹Øßß!ž[°Iô±Ö\í`rKLƱz¹™äÊUý—€^�ô€\àx<AF' ofõÒÅTÞ!°có:x,£Ñ!`Œ™q5b AH+ÁŒ5ѪnVÅÈaÈV @ÀE"€p ˜ÁŒé椯9©Í8Q)X4ü©²™ðJ"d{GóT�‚Ü6€L€Êçáä7Ê©Y¨)£€ðEÔ-°f {¬T•<粈¨J«~‰,ò¦âÀŠå1¢˜1Êqb 0­ã(4 q6¥G(ñ2?ÒÙIëÜU­uÕÕÒw¦!iXt¶¯rF?Gøþ�À  `Ô«bW |=†ÙèèTz™).ÏÏØø±çµ¸ÖºÈUXµSª3](Í Oan±7P¡ ‘œ1ƒ`ª¶EÔ‰ãRm<Saæ§Zk2›]»Ï¸óJÉÌŠKåbÙ{mb´••d?Þ ¼ ‚�)XÃèj™öÜÕHøà°AXŸëTß´X¿ä)çtõ°‡_ZôcÝç¸/¡"Ò£üáfÐ(˜/‡ «Š ð’"Ô@‹qS@R™«p¬_S o)¸·¾û[ùŽPšåÁžD ±°X@ð³ Áð€GНA�~ –jG38íò®ª˜åØã:ÔúhÃ6zyàEs‚ '”/,wœ‘"ÌA Œa'ðVDX—³Í.AÝMì<¥Ò‘ ‘=åZÊÁ¨¢«TóT<GÀö  ä#€˜8 šßc샣'ŽŸgWÂÝÅ;é^ts˜²–_=Rlu;YìRzu®D½­ Jœ(ø€˜ PºóŽp£�Wˆqx*±‹]´²ºöšL5©%îHú·ŬÿZ蚨ºŠa2–>EP_`ô½4 ƒb„öŠón¸¹™Š.ÍÈu§+J´4e¹Þ— Úžì>ÇÈCºø.]…ŽÃ�¨ÂÜkŒ·ùPŠÓ�­[+š´w` ŸÏ}Üœ;'ž¤¾w ;LöEã(ö À¬‰°ªKë"LÄëu?v|xTr3zð‡ÒWõ ï´›êÜtiÉs9J:ìH£‡?± „)Š2×—ˆÍd;*ëbrÔš.;ñë¨Ë0ûâÌ0ˆPJ�ÛJ"/`¬{¶Š Ñ1r+庤wfJo›utÚ.ùÙ]#Ûコ'ˆB %éáfõ:p>Gé7aØoÑÎG�&ÎŽ7¿BÊÚ‰ ‘nìòkãKÕßÐó<Ä÷áò?Ø” ¼)‚À|ã‡Q=Ÿv¸Ê÷zã—EÞ<,ôk‘Hf1áàà!‚@f)ÀzòôàpÒDèuãí)¯:• ™CŸâôM°-û™1ç$-‹Øºï¢†Œ£é9oc¡E°þij°Š jÐ1sô ˆ"Qâjg#7ÇbS0ts*#Yã&§÷uö°Ta&mµ(³æ="—LG× 0W<—ÜQ Á àШ¼�ƒÖ|‘\±ozã=f_0wÈw—ŒmURå-\¶Š$ðô ÷� �À|�`€HCÀ"X>Ug5Ö£içýEY@üqtI\VBQ·ÿu6]k FP5 €X(0Q ™  °༠Å@c'fEáèt†?7‡…05~^!r7,È^d5zzÁÍ&ÿZ˜áey  �@�" xà^–0‹Ò†¨‚z5–CŽ?À °`ò(·Æx˜kjèbbšm!£~Öòñ~@ù€Àˆv‡„àÀ«ð¾ àÌ�°qŒ<sæîLUW¨Ñï†h„w€TH݈§ü=á ƒ€�˜¶� °ðE@7P¥ˆ@G{&o q}@B 3 �S78Ï‘'2ÐéB°ð€ôp¡°éPî�Pz#ôcWöQ„÷ç�p\ðJ�)ˆ·Yx…$eY�‹Pˆ³X$àQ@gƒt'ú`Ó`‡Ô@"`¡0‘iQ•)S��¼ àÊà®È×�–a†^Hdu3&Ë:00òôAh@U•Iq $ �O†¶Ñ{5-©*9L R,r˜)ƒbw ° 0Ò 0 �hM¥†ÆË$3¡!`ò ôn@fÐ6€ù„™áAP‘׊‹ôƒ@×ù†„Y$V±‰õ°÷0!`¢…™ù·›ƒô–€ô@£@ì`ï�I"cׂ-SçfV~™_9»°<y›¹¹AP“·¤g¨Lò~!p¢_YåžbŠ Ð×  m …˜ÉŽ—‚Ø'|óá×ëc‰a3AFPõ©ÐÐ5|Iç™ð% @IF%+„eíTxœ“;L —À €¡ð‡ J¡¡Ë„àõóÁ Ðï0�6P/Å•*–6e·«¦ÌDÙΰiÀ4.j˜0& h @%lÓ)y** Nš8¤ŠIPµ À¿@¶ �p  È“86ƒùh0{ j£Wv¤©T`—S‹7a šDЋ¦m¦àøÀù0¯Õ°Û�€�hn¥eæ\BDÑ –‰þ¥Ðl3H¦éQ`˜8½£ä,•€6:)*¨ÆšðAð9 Lʉ©ê8 p× t à…�Ð�±H wD™'̧è“)–0zlÀ2sjŸŒð' ©1‰Τ   °«ªÇI°L Ð`àø[^Tø òÛ“2FŽA« z€nÀ1«šÈyp' °?Q öÀ÷ ¬0Jú⯠„ ¿ª ±ªp ŽÇšd~~…G‹¡“« ypo­ða¯ã À='hça7øhµÞ*è® ° °›‘`­ °´�¾Óü�©>N7~‡x9–K°`08«l ( Ð<Zg^c™ª„ F^>’ AÐ<±€‘³+EsðØàÚpµi®jÒ­xBˆqéohÑ¥­°6�kò´f;€Ÿ1Wŧؔ› ðG ;_¶ÅÔ¬ðï ·{H   �P &ÿRA/óš,i(2ÂzµHBuš¥õƒñ>°05kðd¶Ö(€ Šç®B´Ÿ`”¹IPøÐø ¾@º ¿�à�ײ‚ ­–W˪¨ÚŠåà›‹6°.¹ žX€( 6 è<J·ï4ÊO±A±@AÀ=¹ •»«Í¦a €¬ °±¥ Ž“°²§îs»vwþºñ¶°04»t;¼å¢[–kÈàŸP–¾{ó+ѠƤ §�к¸Ž½ù`™s’—àó ó€4CliÛôI`) 04ªöP1¹“AŸ¼p¾ðD |Â&pü€  …¿ ¨º ‚$ì¡<ÈWѺ@SdXo~õ¢« x< Ô”Â<¤*µZ¢š‘„bM è¾Ððž0˜ÄU`åPæ�Ä@É€Ê�Ëþà Ým‰‘°û«Æ‰– y u -eLV?@) P0²geUz(<«¿MŠéÅC œtÈaG `è €v px@ôXת›dzV¡0§Îs†5:©Cm9D[ v ,Ç<‡8°* `/ÌÇÓwÄëÈÅA ¼¦ËA> Ù 0ˆ ð‹yù§˜ÙÁ‹Û&«ÄÉæ€ˆìgÉ‘@ÆÌnpj´ßËSJI.B¹{Ëí°@ ì²Í¦ ô ‚ Ѓ °ã Èœ�‘z+;ߢìFh&©¡D{|[¼c ñ®À€ò€1ŒÎÍ Ý0p* €,0¨$zyóµXˆÂ0ö�Í A ÝÂa €Ýp°ÒàëpìÉ+á’I5J[@¸?x½#»\ €0Ïð+Œí.€+ –çŸV÷À;ÆÍ}ž Ó Í Pè @“ P“ é •¬50?ê×Ik(T½"ˆÌJ³Ð� ûÏÀ0j¥6Óòç°ªÕtÓqHÊðÑ,QÕû_ €ð p‘ @ °å ³Ž� N¡Û~›Ã„‹­iñþµ+ŠÕ€xðzÕÍ^Ö²‹Ö)Æf} \¯i ý‰¯�ÛÛ Û ² ±ù Ö[óÕ|üØ]‡ÙmŠ ´Ng ¾ý«¤¡ Àë °¥ À¤ �ç ðïï� ×p5]?Ú}„Øm]ÛB[½­¾ÀA­±Û=Íž`êpê  å °�® @î K Œè‘MÇÚ½ÉÚÌÝb(Üý®N °Û-•ÞÙ‚÷A Ms ÐÐÑ`öY!�Z$�|y˜8äéÚSÞ­ËØõíïÝÓß>ŒüßÉ É àæ ÐÎÐÍöÔÀdéÄža#€þ€� À„ã4®Ú®á€ Õb€ „BaP¸d6ö~=ˆ!¢t|Ÿ‡FcQ¸äv=HdR9$”�þ¿/wKMÞÒh»Z §S%ºón»ŸÐŸ� I5G…€@�³õì ƒñá”vy¾ÞsÐ"¼�y>ÞGyèÔ*5×íV»e¶Ý A-ôx„J)Œ\ïW»åö¼ü?ï§{mâÚq½\lÇ[/ Ús=œÎÇòPý�€ \Ð}~Ð[Ÿ×ÀTQTÀÀ(0޶">ßϺæ†9a±Ùlö¶÷}¿\xÛ¬N+áòy\<ñøÿ~hÞî›ÖøuåŽg«•ªïj».ÇSÝÕ”uói@ È2Ï�ù9&É÷@&Ç©ÑÀXrnžFà¦]Š'Ñü}6¯¢ Ü,‹2ÑBŠÜáBHCŠ»¹¬4¹žGÑârÇ)æ}GŒ<ƒà0„Ÿ§ùújÆ™öè)@ "sg¡Ä¤ç„<|Ÿ§ÌFyÇÉÝ@ÉLx¾2h¾1¬7)£rB J‡d¸Š ˆÈ4�nÀb„‘ÂcuÊ“LÔ‡B’œ.ã¯3\äQŽWåi”u™'YîuŸ'ñòЈ0C¡´–ƒ+ ¹Ñô=Éò”çK£q©î~žàh ‘!±#‚:/Ì3®Â34ÞSŒ76ÃszñYW�¨o‘F‘^…Õ}�ŠŸLˆ5¤©uÍœ¯F§¡øz@P4L„ØZ ¨eP]ÌP=’úUÍÝŸs¹U¤5[C7D¨Xœ%gjv€€]õÝ×ë|¬ža0’AÑ(‚J3oÜ0EW \³Eý‰¯—T+vN8£èS›¥0öe/x �ØÖL½Ð‡ûqRõ  4èæUU“*ÅÜÙ>tµbЖ1¸f)Òb ¼ù�o~¥«Ï³ì.„¢ðô€8£ùŇչ¼ÏXi› CžÂ9þľœ®è¬^Šo)Õ«k>ä.±H©Â˜B*$ºÖšÁXŽÁ¹ð‹‚4ìÜ*Ü?™£é:l“€€ q\ªŸ§¡öz ¨lB†¤6(ÛõÆùð\·Tƒl‡Õ¨ÇAìt eȺ¾=‡{Ÿ‡¸bÀD,Ž`âø ÷M®fÍÍ_ÝrÝl×ú !^p㉎75€g«±sÑè‚™Öݺ¶ù|ɯyþÿ é>ž§äqƒñ@mÔðýÙÐõƒÔ€08c %¡|�²ôûXƒðg0±?Cæý ¡ à 2 ÁÊ.ÀPPet3F‹ø¼‡�bÁ‘¡‚ uçA8HÐ ±Ëƒ܇!„�æð†ÃÄæɲ@¸ ‚ðÖ ƒhG áÃ7šÁxy‰á²#4�T*Á:–bäDã+xºFÃÁ ãsŒ‰ÐÔ&@ÃäZA0a À|(,Prâ³,AðàÌ C<pdà´V§1Sâ ÀŒ,¥E"ˆÈmÁ°Zdò t˜7é-Þt– �˜1oAP(ð¢÷PÜ(^ìéÎK„„Š0xì¢b¤bqn8Å´ ‚#È9ÐèñCŒÂ!‚(hˆ‘(5„� :iÇ1)Là XPB‚X Œ’¥Dn…ÈK€CÕÜŸD–Jðªb±m‚麿E ÛEX;·d’ÇÐýBÕp,'ù $Ô. ð°P�<¢$Ž„P¤€8àd @BeüÁVN`- à°cX �€%Ð"Àˆµ â*6¹ÆøòÁ@]„è‘=NL&à< Њ+ãõ? Й…²<FÅQªDtûBhü @x&e<ÖB¢ÄÄ Õb-_?é"æÂˆ B<‰¶¹ÙKŒ¢xl‰Ú r˜�ˆTAd…šîBXà§ã$:�à 7,9iÈà:ÀèI¡*t„Èê ' ;ƒÔr±pEH7É,ºŠ`‚*AÈ6E\²›F9 ¼ +Øv·}<Áx !Šªµm�&ˆy:Œwü²ã<ø>É ÷Ùp<Â@DK”Œ 3�(åD0Ђ\k jþoØ�RLEƒP•ÈV,¤ƒ ÑÌ/C@Ä ­!¥ÈLÿ…0B,!…_"ÚG WÁXsQÍ.ƒ«ºFÌûk€ð ÀØ ƒpvÁà6ÀÞ·=òÂ<ÂÝ.c¸i\ð� š5ž`tÑZ…ÞÀÊâú…à,¨Éj5hþ[g˜�ÀHFƒ‘�ÈAÇd8gŽÑŸÃ¼í.|9ƒšsÇá\›@8€À> €€' Xð& € ¿±œl°aøç2S(¶£RëMÀˆœ"ò e;j¡HX¿Âú½ ñæ7àns$Q" .Ä æ�@¹hb46‡ˆÙc 8e( DJ‰-ÌeÔ\?Gðý £ýI)à8`nT– ôØ(�4Úª¶5Ç€× òod }PPÊ1—+#Ð�àF$È’…àÇO,ìzCIX鯂pX/d9Ñ©ï£Dœ“œÒ¸ €ˆ+ @Œ-Ò`«o¶é��@ pH, äúx§›)Õ#qFê|:€€ �€€`üƒH€�#õÿ'È@édªU ?ßÓ)¤²9’�@@˜&ô!8F& à ȊŽT@€©Z¯X¬Ö«uÊíz¿ZxÂS tº­¼©u=Ý@`.œU¦¯·óíòþ|ÑäÐñ8à,8…!{ˆÄâ±xÌm~__µ:˜n†5ØÌl¼[/·ëè —‚€€±PDT: ŽÇ¡ðÇl¶{M®5Êör°œìÛ‘tàz8aƒéß’×_á8H Gßô„PA 0Ht¨†Â€€ 0 Á…©â0^“_±Û|¾O¬Èõr*­ çàã<“ÁLœ” @Ðl ÚèTE`¤ _hZ†!–ÑlÃøüI$};!¨š'ŠcØü=œcÀâp’W)ZtÁð0hÀ¸ˆwSˆ’)$ `M_ƒã=N3°ø:ÒðLÁ•J6× W–%–6–¥Ùz_˜&Šc™&Yšg}eÉ¢k›&Ùºoœ'ÊsŠf©Òwž'™ê{Ÿ'Ùùµ§ú ƒ¡(Z‡¢"j‰£(Ú:¤)拤©ZZ—¦)ši³¥)ºzŸ¨*Љ§j:š§ª*šª^©jºº¯¬+Ɇ«k:Ú·®+šŽµ®«Úú¿°(:òÁ±,[ǘì;"˳,Û9ô²¬ûJÓµ-U^ѵ­›jÛ±­‹r߸.¾Þ¸®[šç¦.K¢ë».Û 0»¯Êó¡n«Ò÷¾/™jö¾¯Ûúÿ}¯ÌÁ0VÁ°œ+ A0Œ3Ä/ì;Å1[»űœjàÆ1¼{´±Üƒ#É,L‹%Ê2šÛ'ʲܺ¨Ë2üË3¦³Ó7Î(ìÛ9Ï3Ú ;Ï´ tÐ4=Gš4]#KÓ*ËÃMÔ5ïJÔµ][Óõ}k[™5Ms_Ø {aÙ6U[cÙ¶§hڶ݃lÛ·_pÜ·]CtÝ·xÞ·Üû|߸߀à¸\»„Ḝ—ˆâ¸Ü{Œã¹Wä¹\3”幜˜æ¹ÜKYçºï èº\ù����������������������©¾��������������������©Ä������©Ø�������������������ª��������©à������©è������©ð�������(�������1������©ø=�������S������ª‡s��� H��ª��î8���icon_128x128@2x.png���pò��ë��,ù�� é���� ������ ��tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”F OùL¶]/˜LfS9¤Öm7œNgS¸¼®y? PhT:%G¤Re3êU6O¨TjU:¥VmL«VkUºåv½_°I+%–Íg´ZmS;®Ýo¸\nW:í¶éw¼^oW»äŠí}À`pX<%¾ÿ…ÄbqX¼e ÈdrY<¤c•ÌfsY¼N_9ŸÐhtV|öM§Ôjhú]V·]¯ØJ5›¦×m·‡l÷½æ÷Uºßpx\<Ÿ‰ÇäroœnW7ÏÒ@ú>§W£,ëv{]ºŸ3¹ßðxeÝï—Íç•t½¿g¶7ä÷|~^o‡Ïí÷ë}¿ç#ôþÀ pÿÀP, ß½P<·$ Œ« ÂÐÌ4»ÃÜ=­0ìAÄ‹¬ÅJãEQl\£E‘|e§QŒiÇ „mÇ‘êGÇÒ „ŒÈ#¡ò,‘%Ɉ,•&Ê4Ÿ(Ê‘ì§*ˤ¯,Ë‘l·.Ì$¿0ÌÜÇ2ͤÏ4Í\×6Îß8ÎÜç:Ï”ï<Ï\÷>Ðàœ‡(�fùäy €��"�!poÁâx€¡®›§��é�4 H€e"€�À0�ƒÀà�o|N†g`�S‡ùLUŸæÑ¼žZì!($ �PL�‹âÐ,Š€;ŽÁl]äáB™Fqþs!õSB4r µh*�P.Šà˜$� H‰4¤©6‘yür¨ �� 0��hyø~Tw8�~€(R�Ž#X4ŒU+ fà�ä<ŸÆˆ–;8aõÑ;õ b�$‚t±<€"˜—!k±áN c¡üS‰fàéö| š€Ä3�D¡|ßn!"LãÑ�ÇžZ€:_éè& 5ãD ehJ°yž€�š,Æ r€”žÊ“ gáÞ� "ÈT€ …7„)ƒÝ €�( äcÖB‘Ì¡¼â Ï$Ña;°�ôõ ³!™GWÒsÝeŽu)HˆöüêÍsè!ú´à˜(€EyFî2sÔ4gñ2Ià($¶m\ì>�$Hýu6¥%€.ŒGðàR÷›7ÓÚý=VÚÉÝ_M÷oýWà‚óŸºÉÜ÷¿rëC¼~OúÀ%F©Ytw¤ —>§üç @ÿuN AXé_Ä } ºˆìSe'ÏÕ÷À÷âéVCš¯ú;( Ü Cñ‚P– 4/Ÿé¹€d!û¿¢ ûû��4À%Ä[ Xä] ñþÂpý�ŽP�½Âÿ¸þbŒL� p�ÁØ6…ÆŒrŽuà‡â›z Ô?wdætƒÐæ6Á&€©œ8„ŠŽÀ[ßlcu01ÙÇùüŸ„ƒ…ïÎ=¿8k³†qÞDH¸ôí cQ`ˆ;˜±'L…ŠHÀH¯!c¤±â?IPB¤Ù…/ÊTÈ iáÚ£f@�~7QV)€(T À ˆG较ø*©]!ßK±—æVqô£ˆT�B´P>yjghx¢PIÐ ˆ¬>wpD”J ¥+›“º”ÏþGè],fœ —+ò|Éy§(e4 5sì™Ð)Õ>e[ñ“RBGÊ8ùçƒí¡IPI^>‡°�àÀ ‘r†XÏÀè#·Ê��.Òª‡Pw4?T€eƒDa�PLæù•#‚°t>Ǹùo‘(¹ø��Á pP … oøL2'„ÂâQdZƒ€bð¨J- ŠG¤ÐHÌ¢W*ŒJäÉŒÊg4šÍ¥ ¼9'’Ê䓪 —NáñIÌeôô«TÀt:Aöy=?@Àú U:¥CO'ú19š€u«Mª×lµ%“ÏÓY½ôQ­·Š<¦e0¯^®óYäV‚¡a/5¹|v‹¿áïsæ#H‰¿äY<~&g—”Ácôœ2ÓDÃhó2É&e.¿D$˜ îV%ˆÊ_/7ùD "ß Åëø Í×$ÚÜDôó�‹ÀE P ÊêõºóÙ¡ô¦S¿�ÀÞ6WŽ—égñM¯Ñ£ñlµ˜ÿ?‹ËïÑ^«\˜ô;ž“´D~Є^fDáãOšò‚Yá^áaïjf¹Øež—íëz^D˜ý?€�@�@ xö?ÖÙíM ç±’I“ÔÿÄ`¸*@xj=œ¡ W> ’ìýÀ¸Â K_ná)6†^X=[zv je&5,jÚ‡ÖQr¡˜ÉŠŒeÔùø–¤øõùJSøý��`lô€¦Èa‹d“Ú6@2à¨gŠ…J&ä1c€á?ÀPcB™ùBšf*^g…!å®IÞz„R¡yå”ÞÔrw_á62§¨jÂx˜aÑCª8mgåôe¶GÀptòž”Šò.OiÄÖ|Ÿ£’Ŭlùàø>@�ðN=LãAW”^©í >eZìTÑ zšT!^Ø*í –d¦†N¥¬‰Q”¼šdB©kÐDr-H•·òQ‡f‹“Q.‡“¿vª˜OTuúÂßЂoqì¡D³�¼g!„±põ-‹“îGdíì KgfÍÇ_nÛÎ mQ¬I§—œ†sΟ”n º‘jRK‚à\Úæ±r÷͵ÑXÊúL¦s¤Ò¯È—ZMB3•ªÓž:ݾn¼ÇPôdÝ ?¢0;ߨ3Cˆ3 ZM~qÁ. `3WßQ$[= ‚ìû2 §g`x¬‰D™a+F+~F`»Ó¦–dã.>nçmþBšÏ¯F'¤LjIš­ê7mK¬±ºTLû?��l�€€€îuuœÕ„>`�HÞKr•áßüu·<Ë‚ôú�®­ˆæº,SZäi¹nðë©Å šÍ¹Þ{Âtn“¼ò,5³ÝÕ v«5ܱE×;ß›®Á=”,øSEÁXì]oÔ›´ÈCÇÂ5x@[Š@ùàyZ !px¼Çœô ƒ˜m  ×TÓ{ªU¯yO¦³í—ºâƒN¥ð*‡ÚÓ¹üWm0ù6& F‹×[ŒÑº5â­Wºlzg¹ûÁ˜@cà@ÿBˆ€€F:Ö1F)L½ùÃô¯_ÿá !À±F Ä`&$.˜>^xg(Iš0þÏr-‡(=õ(býÊ B}Á²<‡y!n@ŠaÐ=økàüaP¨û¿„Û4o‘`�{§Ðd €(ÇàL‚AÒ¼N1’[åò99)‚]2&U’€”‡x·ÃäÁuê©M‹Šir²•2»c‹_pþ/h &#Èqò ï¾)ŽÕÔFtoáôGøBÒôËŽ¡s4V@‘·`P! A(ç•’˜$„0-…—sȃ ¾;eŒ³–²‰žÂ‰H•gô%V,ÁUÄ,Ý[@z‘ñÖ½×(Œ Ø¡SrÆÅàÔI Qê7˜bÄÍSOVhj}¤ó.?Ǹñâ?�ð`q ˜r½t4]×9(®v‹a@'œó A€vKðRDUŸõ3þƒù—@Ràˆ¯ã1T ü€´‘ÎP’ÓVå»S£Nƒ&·Ô¹Üý™©ŽIV‘6¡!¢d~±þ>“èr �<F‡ÉTC�P'h6DVo ¤e]q2M>„„°Ÿµy Â:Ÿ¿à* ½Ã­WÑü½–ΙóªúÄ}}«Ö‡rshìšá›.Áî¥x÷Mf¥ˆÊ½µ€~?€p�B: Ø©@¤pÍ™pžµŒ &Èka+Pb6bÍK[­X!õhš¤i›ÃÐÀa…$Tm~ð3ëY”9tðúÃ.”G¬5][ãøÚÚòÙYæu"Xé¡û^[‹Ãk®Ãè''ž�BXAb8 V T‰,@¨pL‰>Gm«^=´U__€=‡¸þ ! a:îô‰ aŒt a~=€[ÐЮĵ,H˜­àú®©Ü–€�Œñ5un„ŠÞ¹‹Œí¹Ö¢@Ú8Ƙ�Y-*I{!³ £/[fLžM20�€,ÐLÁ°/D"€°Z Ñá6`°oIˆRt™Ð‹QíŠB� Å g3A€–0¶Üå<u˜ï}36ó5� <@ õÅ´wÑÙ©åûA  "€0� %jÐÖ‰¦–Ú |vë]!­)/ýˆ¶Ñè{Qüà Á^/« ?“´a8 @€&@¹¶çQ¹wìSÑ&z~„ €¨œ[B„°Ê9tˆôÇ¡íP#’O&¡Å ø‹!0ÇÍuÔcønŽ1ô;pý£¤~ ®>FÐßC¯RAÎ>ÇÀ÷!cüm@ ¬�&ó “>…°Æ‡ù5O‡ é§$˜ymôÍp<r=QZ¦†äÒôz*§\Qä?DHyáØ2=×Ñ—� Ãk’*T­wèóA¼¹ ÑèQý¹@Xµ@s£¼p–‡·×m·á">%½¸t•uP—¹… ™¥hyìQ°7GÈÔcèl áò1höã}ŽqÖ>À#�{Si€Ñ ^öÖÄÏ/*œhf?½1Øf,¨{G ó¢:€òéÿ\õ*°[r]Í&;ä%o±h&€÷ªjá03Ž!l0wÝåêǪ„ ~{‡¸CCt±˜4ǸÊùâðcA¸8‡ÐïÔž4��€ªõkr}m¡ÉëâsY#Ǿۆ®r{ðþ‡ ôAÐ ‡Íd½ÏøG 0T_­M –¡6ŒHÜZ?ßÐ&�}þLd 8Ø0ƒÌÀ%ÙNôqšá{Í|UDDŸŸ&�€¬ð6ƒ€>C3Ô,ô<C,5Ü;´?� p™jÒÙWùÌ@ÖÒŒéPÜÜ’-kŠM0 Õ­xæÃÍèBÀhA•u`6‡(�Ì5´äŸ‰Í“Dž”@ÃъЂÐ%à’ÊĤ7ÂÜ0ƒÉÙÍÌ“q{¹¾A$_%Àˆòx9è-C<‚°.CÀ3ƒ\=ƒÐ=Cõ÷\qµH­•±XU¼WVÉ.È:ƒð!ÈáL!®(…°@Ð4T5’1i[|ET@úÂZ¢Œ¡A0ƒt-àYÓýÊ©{†œ„Ä~+€ö,@‘+45ƒØ(BÄ;`´<Œ9ÅЀãV*GVÉ]}WÐkÈuŸÏÌÏÌíù¢±˜šã¤H¡9èÆ'Á‘¢âÒ=Ü@Ø3Ò±ìã,ÂV2#Ô›4l-ƒ <`U¼ÔtçÒEX„®@ôÂÌ%�•l¤;Cì*Ü;‚h+¨5ƒp=À÷£]¶Æk—8h˜_¥}âLxÓ 3#t¢ð!ÁÀAàÛª@$ìL@8 Ã5AÞYÚÙŒ`Ý@?ÃÑ¡(@BD¤ROøA´6¢ä< U‘×ÔØß®PÞÉŠ$%0$À™£È=ô(BÌ:Â`*ƒ¤5ƒyf€ �œ€fTMV_¨—%½¤¥äÜÆCD2LäÔÁà€nSæE�8C,¬¥õBáæWÂÌ$ÀžaˆhA¸6Ü1%V•ÊfVD¨[�D,‚H ¦Yô"„9B\*ƒ ;ÃÈ?�0š¶9Â]%Õ°Vá•TU½ÏÙæ¤)��<CÎM¼à]ndç4Àì2PÅ”åT0ºáÚÄí”æ€=ÃöW¦$@¦sG\¼5¦`;Ûɽ é(£ÄB@îx�ªƒp8ÃÜ Bd8‚ .C®\¤úÑHü#¬½NV¦,­”NCÄ=$Ð@†rÊxæÀð1ý{æ†W€H,‚B}(Lr8T-Ã;€,$$k¥_’%†º†€î‡< #Ð+ô;à$ƒt7ƒ”>�4Þ:œŽ^ ?ÞVY,å5N2K^`JÂq‚@Œòh‚O�<ƒzÑÍxVu'èÄÂÊ)hb8CN‰C¸"ñGT†f„�î™B8 dì9ð>ì%Ct(‚Ø:�"\zÛR¦0ZšbJ&zq)L�Á~)¢NÀ< RR9 ¥Ú{åΡ‘¹�èÂÄ#€º¥…àÁÌ4h”;h¢ŠžU³á0A(j©Ä#@¾sBx,ƒ˜‚H6ªˆh¦Ýž0’²*ê€×ÆÄ®ª>M¬ AÜ€†ªd�/ɱi¥ †€æ©B4 +T[<@-Ã:é¼�]HÜ•$‹†µmp=âw€äÄ#�ƈ4ÃÀ4Ã|9ƒÞm(ªT…X“¹+,aPÕ#8NƒÂƒB€˜Áv,ëŠ(ÀD‚õçXì…®™`…Ö½ @T,B.¿,pZA<C8.+¢B#il ?lªË( êX9¬>hC<0Ã@;ÀD‡R£å®Òùç­:Ó¤¨BƒÄ=bp�¢Æ@ŽÌ,té—Øu2—äÙéÒÊÂÆÏ­|V@ƒ0-à :«ªÃê8MɄ޷@T,$ kˆ:ÃÀ>À$P*Bô9€8šÁÍÕ¥”…ª€­™˜gmU‰­”€�%>Â�¤ÁnS­²€D‚â.Z˜¬æLáÍ|Ó¬ ?$�Zßmþè„Üà2‚âܪÁ™*6Éë„? �\, ®Ü‚04Bl,ƒ€€2Ó%åmçNVÐ`¹-`>€¬®‚íáX -˜ö&(N¬êñ®Ð!ÀÞøÄØä2à2C¦Š Þ“­6È~éÀì ï !ÀâíÃè?XC0ƒ@;�8ë­© ¬é"ë)-H`yN"ùød*”œBh2æÁ˜ ئJü_à$,ã§Èÿ�p ,p¤MDƒýƒ¢B )̬áÓX C0 €`+°¤:ƒ¼>A0 4ÃzAÀ"þ¡ÒpÖŠÂÛÖ^ªÊÉg=nl@´fiðÙê€LÂÅ!-ÎÕ”º› hâñ@ÜB¼!q'„ÄAð10îþgYÎ&ãñ0 ‚1çCÄØ0Ì=Ã윃‰Yûžmä¥îÓà¿ZU ƒþ÷�¼bx±å×�LB¹MœkCþû1+Âr KDC .(9€0-1G±m•Ml•ÓaybüDï@Ø‚¸ ò×-‚À1ŒB1²M—%̆0NvÖ+ ÆÖè!Aˆ Ô�¯-<+/eÎD¼Œ™zC±È�×3B ³¤JHƒ.,9±ý䆄¶Êì�ظ @ÿ>„ l3B4+X�0¤WöC2�WÁ5‰|Ì×ÄRJ„ÜQNÖç8ÀÈAZt=£�P¦ï㣠3Ó=´04¸DÁH ü.C,9oå4&ì‡1¾^©�1ÈÀ×BÂ�tº÷ä5C„;À'$ïfœthš­H—D<CØ>‚�ÏJéçN™<H)×Èà åË"±Ƭ=µ( 54µ¤AÁH Bô.C09(¢õK”­£g¯AÁ]¸Á^‚ø4˜ü.ã^mùgí[G38u Ôjë^—xAP) ]A„ =\�ÀÌ63c¶Œ�L ‚ì.6@Š{.[ïðAµÔ>ö(B´Al€�0/¨0ƒx@(VvI¤°øjCop Á| AÔ+‡qÖLAX(žQË |šb:„½o �sqqÁL Âè.C48¶ ú¶ÔMav¬?6·pÁð÷6ƒ<�ø‚ÃCù‘®5Ré9² %S7WSgAx ÁÐì¿wÓÌ`'ö¢LnÃk@x+x |B.7×}ñQ6¯p@ˉìxt�¤%C�(Bð5®)ž0N¼KîzÑ­nxEB\ͽ[I @äH ¸Û‡h'c¬¿ ‹ÐwL)N7�€È·7ÉÃ88v ±§eDÞÁ¸ƒà>ù|´+ƒ87C¨ð+@ªÙhvkz\˜`Õ<Ì–ßXCä ÁpÐ@Ó”“ÈÁl&‘Ù`ju@¸Àù€+äù!ÂÐ.C88 W`ãjÙw¦Pö'§àzD�|$Ü+ƒ6è¢5T™È޾ÞëGˆÜä´KnDDº$ hú:íºÉ"@\B]ðª):˜Ÿœ@ȳ¬9"BÈ.ƒ?©Àª`ð„†Ë¤­ÔpI8À€ÄB°Á;¬‚ì4C€ ,�(î2ãdÁ[Ç×»5z‘c¢B €ôÁ>òû9"@`ÂV{FVĪ|Eö¬> �„*ÁÜ÷B(,ä3Ã~ caï ><d �ˆ*ÁØ:ÉÀôAø)C`9C·¿jÄ©´xë!(l.b­Òo•L<µˆ `¼.ü<9@`BJn2]˰ºÄ¬ >$ €Œ*AÓÌvÈÂ4+Âßž6 5£ª‚Þœ�¼´*ù?Ó‚+ƒ!‚´1�8Yã'ÙvÓ<»Î…6ѾÕ@�<5Ô"At´{7Ó@Aˆ$"ZgüQ »ˆ‹öDLˆƒü©¼ �yýÔ–R@¼œªëƒÅE´5ˆ:ú86%pp’¹³ÚÃ耼¬ÁSÓƒ5ÈB$)õcVxCÌ! ȃ…<=Ãä?D €£Æ£þ¾�Jì?À6¡�F›Èˆ?€\À0ÀT2ÿñVLA#b÷voŒ¹¿ƒÊÉʲ½u^yx;ÚDþ���`ph �B ÐX<CaиN �` þC$qHÄ‚AeQXTªS…½Ÿ²0¼Fª9¦séýƒB¡Ñ(´j=èø}é×µâŽÃásœ¾‘Z¡ÕjÓ\H�ù}¿_O×ín+ŸÊ¥uwývD¸Ëì2MÒQr�GÀ7×ô0�ÑȘ<L‰È¢á%§#’ƒLÈ»ÍÂe µç3W¸µÏ= ¸ÁïR˜Ž‚¯VÓBn¹«Í«E™’döµ¼î~#¤½ÆeÍDýêù}…ÂUQÀ±¶åó9¼ê…0­W²š ¼U“×Q«4‹_?kÚÞkõsÿ†‡Ú?ŸïÏeùD¡Ó©4~Aü<ðhh"†±þQ6• gÚ7™©W[w•éªK\ÁÞzhißL’£ÙÃcœq¼Zbhž(O‰’ôÉJRÔ@xQ,]ádކ›ù³ G’>^#È-­Šb”’=‘S%U-Ñö>§ÌwÔL$e¤Hfm!j¶­pW[¦yÞld½A˜ÝÄÆ6ŽœÆºHƒah%0F&ù:'xá(xgœ$Ü- J‘¸\–èª-Ë-Í`Z%JP,¤Ž&R†á.’›™%y©‡:›^X*9ÑtN6‘?^ÓÈ÷> >!A*ŒQ±¬ƒQªØ&ihzvB *9®®yÚ(¥rÜЧž›ÉÝa\­FÒ;¢èE r¤mkÛžèQN°îHbU6|€ Ž$;R V›F’j­½l™ùƒn–Ú~Ÿ$ð�ð=Ïr8ZFa�:ÁÑppm !xò ª[)™ª*È1¾œ[Çjiަô…¶*|†W粯“h·‚È›’‰ž ÈQUÛ?�\'â*±Òt«Ä@!É#|ê;@`§®|&³è©ÊÌž/Ìç/‚ãlϰë#ù}-Ç1¬-­(Çí&¥Êuªš¨³pª‰þ›0=†úžô¦Hõ”„mi¸>.ç{Oñ,%ŒÃ|â<–øž`ÙŸ~‡9Äù¸Žd;;…ói"ö¶‘ŒÛyk,>•¾ ,í{Îs={z«Ú÷ù‚@ˆ«†nXÁÁÁÄ|Ýú ?¯ã<¾·µÚôŸ)nÒä´A0*sÏi[;ó"™Öõvi‘\ÂÉ]ï®à ‚’ iüï΋‰rh½5Í,¥µc"›a¿uÄØ¾v:ýë¹UohϪךéKl#Ð|ZƒHA�¡ƒÐäY£Ym?©wG „ 4Lÿ´ò´ÛÛóéD}„GÜ*8e…pñ‡¡\+ĸÀ�8�v~EŸQË…/(Í›ôʇJú4æén;BN¶SRÅs¯0£¸%–V3£(cÈ|€Äè ¡^@ïQCÜz% ð>€¿SãuAg=¸Ö“ê{ ùM¾'¾´ßx‰Nå(®�R …8f ðöJœá&/…à}"¼€d¡4"‰l‘ÇØµ’Kÿ4éâ0EÔ”Ù úƒð`..ƒ€u ÿ(À<ƒ¡EŽÑâ1ʇÉM)tž:LVûå„20ñ׳À�ˆÌ7bœ2™-8 °‚àA A`Œeå¨VW¬Xý;ÝÔÍo¹Øßß!ž[°Iô±Ö\í`rKLƱz¹™äÊUý—€^�ô€\àx<AF' ofõÒÅTÞ!°có:x,£Ñ!`Œ™q5b AH+ÁŒ5ѪnVÅÈaÈV @ÀE"€p ˜ÁŒé椯9©Í8Q)X4ü©²™ðJ"d{GóT�‚Ü6€L€Êçáä7Ê©Y¨)£€ðEÔ-°f {¬T•<粈¨J«~‰,ò¦âÀŠå1¢˜1Êqb 0­ã(4 q6¥G(ñ2?ÒÙIëÜU­uÕÕÒw¦!iXt¶¯rF?Gøþ�À  `Ô«bW |=†ÙèèTz™).ÏÏØø±çµ¸ÖºÈUXµSª3](Í Oan±7P¡ ‘œ1ƒ`ª¶EÔ‰ãRm<Saæ§Zk2›]»Ï¸óJÉÌŠKåbÙ{mb´••d?Þ ¼ ‚�)XÃèj™öÜÕHøà°AXŸëTß´X¿ä)çtõ°‡_ZôcÝç¸/¡"Ò£üáfÐ(˜/‡ «Š ð’"Ô@‹qS@R™«p¬_S o)¸·¾û[ùŽPšåÁžD ±°X@ð³ Áð€GНA�~ –jG38íò®ª˜åØã:ÔúhÃ6zyàEs‚ '”/,wœ‘"ÌA Œa'ðVDX—³Í.AÝMì<¥Ò‘ ‘=åZÊÁ¨¢«TóT<GÀö  ä#€˜8 šßc샣'ŽŸgWÂÝÅ;é^ts˜²–_=Rlu;YìRzu®D½­ Jœ(ø€˜ PºóŽp£�Wˆqx*±‹]´²ºöšL5©%îHú·ŬÿZ蚨ºŠa2–>EP_`ô½4 ƒb„öŠón¸¹™Š.ÍÈu§+J´4e¹Þ— Úžì>ÇÈCºø.]…ŽÃ�¨ÂÜkŒ·ùPŠÓ�­[+š´w` ŸÏ}Üœ;'ž¤¾w ;LöEã(ö À¬‰°ªKë"LÄëu?v|xTr3zð‡ÒWõ ï´›êÜtiÉs9J:ìH£‡?± „)Š2×—ˆÍd;*ëbrÔš.;ñë¨Ë0ûâÌ0ˆPJ�ÛJ"/`¬{¶Š Ñ1r+庤wfJo›utÚ.ùÙ]#Ûコ'ˆB %éáfõ:p>Gé7aØoÑÎG�&ÎŽ7¿BÊÚ‰ ‘nìòkãKÕßÐó<Ä÷áò?Ø” ¼)‚À|ã‡Q=Ÿv¸Ê÷zã—EÞ<,ôk‘Hf1áàà!‚@f)ÀzòôàpÒDèuãí)¯:• ™CŸâôM°-û™1ç$-‹Øºï¢†Œ£é9oc¡E°þij°Š jÐ1sô ˆ"Qâjg#7ÇbS0ts*#Yã&§÷uö°Ta&mµ(³æ="—LG× 0W<—ÜQ Á àШ¼�ƒÖ|‘\±ozã=f_0wÈw—ŒmURå-\¶Š$ðô ÷� �À|�`€HCÀ"X>Ug5Ö£içýEY@üqtI\VBQ·ÿu6]k FP5 €X(0Q ™  °༠Å@c'fEáèt†?7‡…05~^!r7,È^d5zzÁÍ&ÿZ˜áey  �@�" xà^–0‹Ò†¨‚z5–CŽ?À °`ò(·Æx˜kjèbbšm!£~Öòñ~@ù€Àˆv‡„àÀ«ð¾ àÌ�°qŒ<sæîLUW¨Ñï†h„w€TH݈§ü=á ƒ€�˜¶� °ðE@7P¥ˆ@G{&o q}@B 3 �S78Ï‘'2ÐéB°ð€ôp¡°éPî�Pz#ôcWöQ„÷ç�p\ðJ�)ˆ·Yx…$eY�‹Pˆ³X$àQ@gƒt'ú`Ó`‡Ô@"`¡0‘iQ•)S��¼ àÊà®È×�–a†^Hdu3&Ë:00òôAh@U•Iq $ �O†¶Ñ{5-©*9L R,r˜)ƒbw ° 0Ò 0 �hM¥†ÆË$3¡!`ò ôn@fÐ6€ù„™áAP‘׊‹ôƒ@×ù†„Y$V±‰õ°÷0!`¢…™ù·›ƒô–€ô@£@ì`ï�I"cׂ-SçfV~™_9»°<y›¹¹AP“·¤g¨Lò~!p¢_YåžbŠ Ð×  m …˜ÉŽ—‚Ø'|óá×ëc‰a3AFPõ©ÐÐ5|Iç™ð% @IF%+„eíTxœ“;L —À €¡ð‡ J¡¡Ë„àõóÁ Ðï0�6P/Å•*–6e·«¦ÌDÙΰiÀ4.j˜0& h @%lÓ)y** Nš8¤ŠIPµ À¿@¶ �p  È“86ƒùh0{ j£Wv¤©T`—S‹7a šDЋ¦m¦àøÀù0¯Õ°Û�€�hn¥eæ\BDÑ –‰þ¥Ðl3H¦éQ`˜8½£ä,•€6:)*¨ÆšðAð9 Lʉ©ê8 p× t à…�Ð�±H wD™'̧è“)–0zlÀ2sjŸŒð' ©1‰Τ   °«ªÇI°L Ð`àø[^Tø òÛ“2FŽA« z€nÀ1«šÈyp' °?Q öÀ÷ ¬0Jú⯠„ ¿ª ±ªp ŽÇšd~~…G‹¡“« ypo­ða¯ã À='hça7øhµÞ*è® ° °›‘`­ °´�¾Óü�©>N7~‡x9–K°`08«l ( Ð<Zg^c™ª„ F^>’ AÐ<±€‘³+EsðØàÚpµi®jÒ­xBˆqéohÑ¥­°6�kò´f;€Ÿ1Wŧؔ› ðG ;_¶ÅÔ¬ðï ·{H   �P &ÿRA/óš,i(2ÂzµHBuš¥õƒñ>°05kðd¶Ö(€ Šç®B´Ÿ`”¹IPøÐø ¾@º ¿�à�ײ‚ ­–W˪¨ÚŠåà›‹6°.¹ žX€( 6 è<J·ï4ÊO±A±@AÀ=¹ •»«Í¦a €¬ °±¥ Ž“°²§îs»vwþºñ¶°04»t;¼å¢[–kÈàŸP–¾{ó+ѠƤ §�к¸Ž½ù`™s’—àó ó€4CliÛôI`) 04ªöP1¹“AŸ¼p¾ðD |Â&pü€  …¿ ¨º ‚$ì¡<ÈWѺ@SdXo~õ¢« x< Ô”Â<¤*µZ¢š‘„bM è¾Ððž0˜ÄU`åPæ�Ä@É€Ê�Ëþà Ým‰‘°û«Æ‰– y u -eLV?@) P0²geUz(<«¿MŠéÅC œtÈaG `è €v px@ôXת›dzV¡0§Îs†5:©Cm9D[ v ,Ç<‡8°* `/ÌÇÓwÄëÈÅA ¼¦ËA> Ù 0ˆ ð‹yù§˜ÙÁ‹Û&«ÄÉæ€ˆìgÉ‘@ÆÌnpj´ßËSJI.B¹{Ëí°@ ì²Í¦ ô ‚ Ѓ °ã Èœ�‘z+;ߢìFh&©¡D{|[¼c ñ®À€ò€1ŒÎÍ Ý0p* €,0¨$zyóµXˆÂ0ö�Í A ÝÂa €Ýp°ÒàëpìÉ+á’I5J[@¸?x½#»\ €0Ïð+Œí.€+ –çŸV÷À;ÆÍ}ž Ó Í Pè @“ P“ é •¬50?ê×Ik(T½"ˆÌJ³Ð� ûÏÀ0j¥6Óòç°ªÕtÓqHÊðÑ,QÕû_ €ð p‘ @ °å ³Ž� N¡Û~›Ã„‹­iñþµ+ŠÕ€xðzÕÍ^Ö²‹Ö)Æf} \¯i ý‰¯�ÛÛ Û ² ±ù Ö[óÕ|üØ]‡ÙmŠ ´Ng ¾ý«¤¡ Àë °¥ À¤ �ç ðïï� ×p5]?Ú}„Øm]ÛB[½­¾ÀA­±Û=Íž`êpê  å °�® @î K Œè‘MÇÚ½ÉÚÌÝb(Üý®N °Û-•ÞÙ‚÷A Ms ÐÐÑ`öY!�Z$�|y˜8äéÚSÞ­ËØõíïÝÓß>ŒüßÉ É àæ ÐÎÐÍöÔÀdéÄža#€þ€� À„ã4®Ú®á€ Õb€ „BaP¸d6ö~=ˆ!¢t|Ÿ‡FcQ¸äv=HdR9$”�þ¿/wKMÞÒh»Z §S%ºón»ŸÐŸ� I5G…€@�³õì ƒñá”vy¾ÞsÐ"¼�y>ÞGyèÔ*5×íV»e¶Ý A-ôx„J)Œ\ïW»åö¼ü?ï§{mâÚq½\lÇ[/ Ús=œÎÇòPý�€ \Ð}~Ð[Ÿ×ÀTQTÀÀ(0޶">ßϺæ†9a±Ùlö¶÷}¿\xÛ¬N+áòy\<ñøÿ~hÞî›ÖøuåŽg«•ªïj».ÇSÝÕ”uói@ È2Ï�ù9&É÷@&Ç©ÑÀXrnžFà¦]Š'Ñü}6¯¢ Ü,‹2ÑBŠÜáBHCŠ»¹¬4¹žGÑârÇ)æ}GŒ<ƒà0„Ÿ§ùújÆ™öè)@ "sg¡Ä¤ç„<|Ÿ§ÌFyÇÉÝ@ÉLx¾2h¾1¬7)£rB J‡d¸Š ˆÈ4�nÀb„‘ÂcuÊ“LÔ‡B’œ.ã¯3\äQŽWåi”u™'YîuŸ'ñòЈ0C¡´–ƒ+ ¹Ñô=Éò”çK£q©î~žàh ‘!±#‚:/Ì3®Â34ÞSŒ76ÃszñYW�¨o‘F‘^…Õ}�ŠŸLˆ5¤©uÍœ¯F§¡øz@P4L„ØZ ¨eP]ÌP=’úUÍÝŸs¹U¤5[C7D¨Xœ%gjv€€]õÝ×ë|¬ža0’AÑ(‚J3oÜ0EW \³Eý‰¯—T+vN8£èS›¥0öe/x �ØÖL½Ð‡ûqRõ  4èæUU“*ÅÜÙ>tµbЖ1¸f)Òb ¼ù�o~¥«Ï³ì.„¢ðô€8£ùŇչ¼ÏXi› CžÂ9þľœ®è¬^Šo)Õ«k>ä.±H©Â˜B*$ºÖšÁXŽÁ¹ð‹‚4ìÜ*Ü?™£é:l“€€ q\ªŸ§¡öz ¨lB†¤6(ÛõÆùð\·Tƒl‡Õ¨ÇAìt eȺ¾=‡{Ÿ‡¸bÀD,Ž`âø ÷M®fÍÍ_ÝrÝl×ú !^p㉎75€g«±sÑè‚™Öݺ¶ù|ɯyþÿ é>ž§äqƒñ@mÔðýÙÐõƒÔ€08c %¡|�²ôûXƒðg0±?Cæý ¡ à 2 ÁÊ.ÀPPet3F‹ø¼‡�bÁ‘¡‚ uçA8HÐ ±Ëƒ܇!„�æð†ÃÄæɲ@¸ ‚ðÖ ƒhG áÃ7šÁxy‰á²#4�T*Á:–bäDã+xºFÃÁ ãsŒ‰ÐÔ&@ÃäZA0a À|(,Prâ³,AðàÌ C<pdà´V§1Sâ ÀŒ,¥E"ˆÈmÁ°Zdò t˜7é-Þt– �˜1oAP(ð¢÷PÜ(^ìéÎK„„Š0xì¢b¤bqn8Å´ ‚#È9ÐèñCŒÂ!‚(hˆ‘(5„� :iÇ1)Là XPB‚X Œ’¥Dn…ÈK€CÕÜŸD–Jðªb±m‚麿E ÛEX;·d’ÇÐýBÕp,'ù $Ô. ð°P�<¢$Ž„P¤€8àd @BeüÁVN`- à°cX �€%Ð"Àˆµ â*6¹ÆøòÁ@]„è‘=NL&à< Њ+ãõ? Й…²<FÅQªDtûBhü @x&e<ÖB¢ÄÄ Õb-_?é"æÂˆ B<‰¶¹ÙKŒ¢xl‰Ú r˜�ˆTAd…šîBXà§ã$:�à 7,9iÈà:ÀèI¡*t„Èê ' ;ƒÔr±pEH7É,ºŠ`‚*AÈ6E\²›F9 ¼ +Øv·}<Áx !Šªµm�&ˆy:Œwü²ã<ø>É ÷Ùp<Â@DK”Œ 3�(åD0Ђ\k jþoØ�RLEƒP•ÈV,¤ƒ ÑÌ/C@Ä ­!¥ÈLÿ…0B,!…_"ÚG WÁXsQÍ.ƒ«ºFÌûk€ð ÀØ ƒpvÁà6ÀÞ·=òÂ<ÂÝ.c¸i\ð� š5ž`tÑZ…ÞÀÊâú…à,¨Éj5hþ[g˜�ÀHFƒ‘�ÈAÇd8gŽÑŸÃ¼í.|9ƒšsÇá\›@8€À> €€' Xð& € ¿±œl°aøç2S(¶£RëMÀˆœ"ò e;j¡HX¿Âú½ ñæ7àns$Q" .Ä æ�@¹hb46‡ˆÙc 8e( DJ‰-ÌeÔ\?Gðý £ýI)à8`nT– ôØ(�4Úª¶5Ç€× òod }PPÊ1—+#Ð�àF$È’…àÇO,ìzCIX鯂pX/d9Ñ©ï£Dœ“œÒ¸ €ˆ+ @Œ-Ò`«o¶é��@ pH, äúx§›)Õ#qFê|:€€ �€€`üƒH€�#õÿ'È@édªU ?ßÓ)¤²9’�@@˜&ô!8F& à ȊŽT@€©Z¯X¬Ö«uÊíz¿ZxÂS tº­¼©u=Ý@`.œU¦¯·óíòþ|ÑäÐñ8à,8…!{ˆÄâ±xÌm~__µ:˜n†5ØÌl¼[/·ëè —‚€€±PDT: ŽÇ¡ðÇl¶{M®5Êör°œìÛ‘tàz8aƒéß’×_á8H Gßô„PA 0Ht¨†Â€€ 0 Á…©â0^“_±Û|¾O¬Èõr*­ çàã<“ÁLœ” @Ðl ÚèTE`¤ _hZ†!–ÑlÃøüI$};!¨š'ŠcØü=œcÀâp’W)ZtÁð0hÀ¸ˆwSˆ’)$ `M_ƒã=N3°ø:ÒðLÁ•J6× W–%–6–¥Ùz_˜&Šc™&Yšg}eÉ¢k›&Ùºoœ'ÊsŠf©Òwž'™ê{Ÿ'Ùùµ§ú ƒ¡(Z‡¢"j‰£(Ú:¤)拤©ZZ—¦)ši³¥)ºzŸ¨*Љ§j:š§ª*šª^©jºº¯¬+Ɇ«k:Ú·®+šŽµ®«Úú¿°(:òÁ±,[ǘì;"˳,Û9ô²¬ûJÓµ-U^ѵ­›jÛ±­‹r߸.¾Þ¸®[šç¦.K¢ë».Û 0»¯Êó¡n«Ò÷¾/™jö¾¯Ûúÿ}¯ÌÁ0VÁ°œ+ A0Œ3Ä/ì;Å1[»űœjàÆ1¼{´±Üƒ#É,L‹%Ê2šÛ'ʲܺ¨Ë2üË3¦³Ó7Î(ìÛ9Ï3Ú ;Ï´ tÐ4=Gš4]#KÓ*ËÃMÔ5ïJÔµ][Óõ}k[™5Ms_Ø {aÙ6U[cÙ¶§hڶ݃lÛ·_pÜ·]CtÝ·xÞ·Üû|߸߀à¸\»„Ḝ—ˆâ¸Ü{Œã¹Wä¹\3”幜˜æ¹ÜKYçºï èº\ù����������������������ï"��������������������ï(������ï:�������������������ª��������ïB������ïJ������ïR�������(�������1������ïZ=�������S������ïj‡s��� H��ïp�œ®���icon_256x256.png����¶V��ãO��,ù�� éH������H������tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*ËRì½/Ì ¹0Ì“,Í3¤ÓÑ5Í“l܆MS|å9Î’üã:ÏÌõ$NóÜý?Ð|û@Д- Pt=EÑ FÒ$öQô-KÓ­+LÓ”í<àStýEQÔ]CRÕMTô8u]]WÖ …OXÖ•­l¸Öu½u]×[^Ø „º×6cÙ Å‹dÙ–mœýWö}¥iÚŠ—jÛÍ´ƒZöݽoÙ¶íÁqÜ•íÅrÝM_sÝWmÝOÝ—}åyÒ7é{ß í|ß—ìç}ߨ2à ƒÊø.…á’N†âŒw‡âX®-☾5Æ6Ž9äÎ3ä™, ‘äÙNTüe^]—Ò˜öa™æ‘6[šç˧›çYî|ãç™þ…¡ÈÙ–‰£é®ƒ¤éškI¥éÚŽ¥V'šž­«»Z†±­ëŒµ®ì ‰£l[.ÍYl›>ÕµéûNÙ·î¦ã¹îŒÎ¿ºïÌÅ·o[îü»nûÿÁµ›ç Ãñ €?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*¤‡±î‰ŸÀ�ËLT½2ÍJÊ*t¸‹gX�ggùz`€Æ˜Æbxž� €�<€!HH�¡À…À�R€ 8 5,¦¹°œ'�^˜€Ç=˜Æ]��PTÅUU©hQ”tØ�Çè� ‚`‚��h�ApÍ©¬Þ†çˆ�]Çù0OŸæ¹¬'B 0 ÀB-B€Ú à�:�0~�Œ"à5MX¦g`�Q•'ùfZŸæQžžÖRm]ø¥Ÿ ÂTÐ@ ´ƒ`�t€"ˆ”�ˆÂ\)eŽƒY >Rä©4ÆÒ ”¸ ”$ÇôÂ~Û’ø�˜š�ŽƒmÖ]Ørk'ùJå‘ng2€�´Öö¥© � ƒAá˜T.¿ÀÇä ñˆÅ ‘,b/�EP 6I ‡Ä$²DÂyþŠG¿›í¸$�Jg˜#ùü�~½f ¨Ñ4v8�FBùê™M§Sê•N©U«UçN×p�î€)•o÷»ÂB+›U®Ùm·[î•Îéu»]ï›Õîù}¿No¨Ø� € …` !ƒêòzƒm¼�9_ËEœBnßá“ÉóÌ� �gPìçKÐkö•Ýb¶œçh���`=Ÿ‰ÅãqùžW/™ÍçsùÏ×èüô�„À±Èg0kª*bÍrÿ1ŸÎÇ8� ¿�ø9± ýä�4�(Cð&è?ð§ŠFŸÄ1Î&¬üAð„# Bp¤+ BðÂJ}Ÿ(&2Œ` C7ÀZœñ%$,>ˆ‚h›"Йö²á Z•€6 Ã1äz»/¨ -Æt€;ßIrd›'Iò„"”>B–‡ R£Œ” o„¦„KÏš +J ­0KÀ Ìs*-Ë$Í8Æ;]1ÍólÃ1N“‚ <J“¼Ò‡ŸŠØ†&�%YB±éÔN†Äqü=gø߀@x‘Ÿgˆ�@ mGRKS!G‹H( !z€¬…OYVu£A623êÓ0)“Kç,ÏIo] ¨„­6Xó›çb¤rÜÑ5!rU›<Êvdû+ÎÔß`Ùó¬¹>OÓÜôƒIW‡OÖÝÁiÜ3ü¿,Y–-Ý< ÖzÍs-Ûr×UÌé_®5ºÕz ‡Ú€`FM�aÐmÞ’ºK%ƒXÒ�`s{LÉ´Ý:áÆ9t�ðmk“C0 �&Šò!yW´÷ÞN¸àyÙ~ÜsT»sX–…×ygYõ½uhKÁ^ͳÅÔ’Y­1ÖùÖ¡qÙHV©ßz–nÛ7î´†Ìù½é°Æ–°©_W>}‡ÞÙÚ©eéº q«'¦ÙyÞZ¾«n©6o¤ìzU­›nè=ïÀo¶îá«qyçžÜ[§¢pVM¸ çÛ¬„� ¦c�€~2†QÈ)”gâ@ °ÖgÛê5  $DSÞeÝB éüE§ð é™Íýdí3 Éo숵‚‹rÒÝÓ¤y.¿Ì™Æír[š/;ozsîpþ÷t_*ŽÁÊü›vÇÈ©ûäÝö. \ýû§±µyi' Â/…zõÚ»×Wð ǽÐØœL�|e]ŧxÓŸâã^ Æ´&Ðó`™9r/áÆ6e|ù—‹Š„Ou`A´Äx‹áxƹn-±IKk}P±.%5®ÑáSK‡ `}Qþ‚…Ð:$¿ Èõ0€ô$Ñž2É«¢€ÏÉÿ¿2˜ÛâSÇ‚ÏÙ:ÁÚ�˜˜�A°2;—wNp’Cø7†ñüËÊ|Ð*ņNýc©9~¯©ÉÅx¸ùà U‚¯Ç4h ½ßÁ:rk>·îÕ!45ƒ É><æ©"äd`2jNÉu¿××N0U.-W™dÕ“)ú¸6#Ó«Å‹ÒÅkÉ“ß-¢]‡«ÎB¨ädT-yîI5Ê5|µû9Xò¡9Jxpô$Á’†a M5µ &|˜y1¼¸Ù+ ÒôN2ÑêAia$'‹Ãî0†Î�„ð“-%¤‡Á ?„(x'ø”Á–‡§ k.ƒô}€�‰FxÂ�`‰ÎFª qưØàì#ÑäP�¯|°=Ëwä% ?{ÏYÇÎy¯, P•äÊi&T¤3‚“RžIApáã„rŽ?<¶˜¹æ«s]°4­·ý ›ò»™D9xÐ(±*=>—Í5ÿT÷:›zÀ$ï~/SdÃ7›D΃1mt̪˜à¦CèLórsEÙ_š+Ü«­aÔfÉL(ô€ŽíéÀ׿ÓA(ìz¨Á¶Õwúå#ûÛ¯íMi>v±•Ý-™3MrÀ ÙQåJoMkÁåW…˜OGØ÷âÀT�PžcCÏKcXl€�b‘À8EÒ¦·øû,;ÕFCü5†à%Mµ¢7Ù°Î?E0¢ÀÓ­)«!‘ÍšU´; «SO„éÊ轪¾õX‹Òp·f*½’ÔT:q’õoYÇOçd/¤²ºH&Ô© å5ä¬7’tÎztåfÍ"ºÐÊpÐ;3,©J庶 )€gfºM~W¬ˆs8kˆÀö*Ĭ¶¼·ié5rANZÀoåkkÓÃÌ{ãGêÚçO÷k_ªo)W=’0žñ·15%ÌêÄó-8ó߈cþÀTï#¶¨¿ä+<³2Ýá*²¿ úC€|�ž0@0f°†�Ø?Ež¹¦B7õ£œ)VVá2]x=†›‰Ò��,�ž0À #¡÷C±„1ÇøG òƒ±§ô¡ÝyÇr'<C\ª„œ¯D5ÅâêøÞ„ÛÎro+P £–uV#ƒä™§×©›+ZúÞÓ4£68qYò|W»øÕœêˆš1£Û—šŽ¼Þë§dïž3Å-"ógZâý¦öw˜­Ç)ëG¨°ñü:’³ äÞü‘M¯;£Ù–ÂmÎÝwMB°QeÀnºu¹é&²zxJrXÚ£±¥&zK7z¹`÷uêT‚°�¡Þ?ÄHŠ�¡Ø6\BN6Ðÿ@üÀÐ�®$³Ü:JsWLKfšåøÒÖ±mµ_†o ¸É$}þƒh·CórðÂÀüÂÌ~€`~cÆ‹X_Uej:ßsŠÚÈs"øb]wwvuk•M&¤/DÒvÜÅÎ2²Ç´OŒ6UNè´ÒÆm\{¥×î¹­£ß»0^ÖòèûÏ ^èTõGn]ÛNJ®’â,yàc~`ý7-`ÛïÁkë²Áyœ°&ɦ7WD¹´îùÔ7ÍýjY=b|2&ZÝ•@a6ijÞêl#ð}ð6€Ñ 2,¡þ!„xýR|ÿ7yÌ;ÉeîíÞþ ºí}lI‡ç¨”k p €ÆíçT¨ A®?ÁÀDCà‰œçè £½9µz?Eã_Ÿ„nгö>Ÿ9_{ýØëØoQr]Oø°äZÿ^‚P¼Ùª—ƒ÷°ó}ŠzšŠl©ËàÃ{½bû¿²u£³Ñ( %›ó]¶âðœJŸ"´­¹›1c»¿òê;³=@CÀÀŒÀ„ÀXæÀH¨ }€„`E�09ƒP¸|øØ}ðo‰¨›¬Šý±!î¬á`<²¦Áè¸*:+]1v³z©¬°Ðú…N€ /»¾´0 °A„p~ƒð>‡Ø�{â@#ã?*¾¢Í¬ZÁÁ ̼ëä¼»S?9¥¥!*°zÀ¤Z¤À„=AT 1A»Ã{ºÁ#¤;Ñ2@Ã;óÀ¹S¼7|C¦tB¤àÄÜ60SÅÁ½Ã¢?¨ª)™ìº¢ ¼a>?ãð¶´L‹f7SÕº‹µ$s?ëµ®š¿!¨} °Y€Cìð|‡È�­[Ò=ùD¤gÃF•È}˜‚)€V…ŽC p ˆùÐ%Ðe†bæ³ú.Ä:<t=µœ *ËÄ»Ìw7³¾1à¡Sr¿L ?jÀ{ôA;ä¼,<„ œƒ sR©‹&¹$ ¼SñÁbÅ¥ÔR$ó`)R»¼:û*U·Óf´ÁŸ«|[¥ap+k¶ª¬‡«Ûn£Â=HLIq ÉuÀÄƇØ{ø`¨èR‡à1ƒ44Š®ã|,·üAYý¼óÈÀޏ�fØ€XÇ ­ ÐgÐ#‡Èé˜Ô™ *¾Á4’“¾ ìêH"¨ÅcÆ+z¼¢âºªtŠÊIs*¼)|?)lY¶qw¯[I²T/¤FŠšÈZð |²¤³JT‰Lt~“›¯Êj> ɱ«Ã\hGù.µÓ]63‘¥<Ó—zIK;}7 ”·E)a5ÅDIv*+K¬#28˘@B€8.ƒP}Q‡à�jo¿Ì€?tÁ¼hÄÔKEÜv0Ñ8È�Àc�@�üjJÜ­…@Xè,‚à|ÃL+-/<wB{M¢Í0³€Ÿä¹H¤[O³MrªIJ¼1ü¤�D\)’mL´™L‰�ÉlË?º¡³²šDäÌ0�½GÃ#Ïܙ쿩󸠤ϥÌÌÅ´ŽÈr«$ù˜»9i¼½L™³Ãü?;n:ÜxE{7Òšì±Ä½;;VÁL¤0… ÈóÄÏ\}ž2èbºº|7I#y¬| ˜  @$�'è|…˜Y‡à€T+HbP5Ð$þ¸jˆ˜Z…X‚(ÆtðSh„P;ÐK„Ôä ý/«´êŽCÐËLJƃI24¢܈/×6JÆOÚ³±\K™âš¹;®Ṫ L¡›Oº­4ók²‹ä7ü~.ìº;£bÔ:ÁR| ?¼†Mdæ¢Ãá¶H&þ0 i9Znó–I:üRS&{lEƒH$P¡dÙŸZè°Š¨ËÍA «@S$Òiù¯iñQÚ°U¬Ã!ÜI2´Õ‚ž¥[–µ“Œ‡ø€äœ‰ì“ÑìKEJV@µ¤Ô‰hD€0:ƒ\oÓuz8)|…xWÓ©luÐ|§ ”›ó”Kµ#ÂI¥:dÍ[AÔäÿŸ%=¼+õC̾55j5µA“¹@íWË3eÅ#üÏu#´¡3¯”L¡M1Ø´Uü\GìzÖe‹×3Hº„ØÖ#ÙœjÕëK¿äTI#â¶ÓµÎ}N¯éyËósEͤ²EVÍj¥$ ¬V#«RX]<ÊÑ+¾ˆz€Ê2ZWMMU'Bu*•[$;Í£¡-Íð„xF€885y×­»,ƒ8|@TÎDåMT6»»`;Û*ÖÄ]%ý†.õ¯—'Ôü–SÌSPÉ÷OÅKÈt¦TSX"‘Ñœò²W;ø›Û‘6k)K¥ÉDy¡‹ǬÐ]’/±»¡ÕX¹Rø*mGµÃ£\2T—rïÔeÅ¿%Êm' tšÄÍ\zMm!ÖtxÚÄ€8ÊËszµ­¡CuWÌÔX EÈ‹w9(�àëHÌÍ¿ž^mÌ=Ñ=¥[>ÛpG„e¹[¥»Û¹T‡ø‚8{†èo›¼òÄ µKøX±.Ë ¡í‡_[”ÞÝiC_bÉ3g¼‰±0j¨^§Kkĵ0¢´ï¬4€ÜÅÎ?}åà-ša$JÖÚX3ÉD’%M jÑ5Š\êÀtja<hÄížÖ6 jÜáuaÅd]LƒL üΖ&W1?×Òª0\ZÔâZµ…´^ƒùàÖ-ˆø`[ºß¬ðPvøÀz‡ªÒ?Qàü â%cââµÒ^9Ne.ÃÃËý•Èñb6Šn Eu’áUÕVâTˆVUÒI¶8á ãc®d®YÓÎÅ 'œeèN¤§‹¼ÒÉ­<`Þ8aõDôä–7ƒJ0�8¬ÂT=À`=À`S~ä ªÂEêѬvÓëù|‡•·„^0ƒ5ÿã%7 Ð&‡¨j†©à€Eß×+‚—^2ZXÐ¥$C›3} Ê5—Þ˜»~;ÊÛxeü;^ìåÙ”\ºÝe/PÓ<ÆRâMÛNO N >.%ÒNxÞT:Û6üZZ=ZŸ ±Pu¯¼È›,¸e$£àå>\ކ¤E;‚ ÞXe‘ ÙSúe¦oßùÍð�†cx2æNeW -ƒP{0TØ€n`à-›@žSG•È\ÎEÞÔRÓ ²ç…e¥ýî‹gnŸd–V2½ÅDœµ›qÝ{[ආÂUa[¥çz“縶j-ÐjÆy³¾z¬t]\ñ3d@d$Xúð.ÕŠÝBžU,•Êá­œ™­7ô(WþH0YèžKj½T€ñNä¦Hކ�€·i@éV–im6‚¸3°Uh}�8C…Rhf›èHYý2¥²`s€2­XЋÃD¥Mä½–XÛ닎~ÛfîÂ)v£èÜæúÿA.  ™gBªÂšÔ|@Å´˜)±kË2K5û"&fÑE.ÃÒó+Žäµºíd•jý J]óT5àX¾¦M~ì4V˜zi\ªß-†ì{¶>L[dîîÆ¦Ä‹ ¿h¦…§E0!&È„VɃ)’ì¶Ëƒ8zìÞšlþ°Q3«$åÉv‡°U�ÚΆdôQж`BUI¦±æÌ8¹m%8ê±QfúPÅË f.;Dù–W_m¤!Ãj´j']<mÕàH.u\öo/z¡X…Z\­\= [dXò9¬\üDž†ZææmÙ4>2c­g<w 6~ñôØÖmY;”^>;eö´»sÔòf"¾[<§m ß!¸}¨8€þÿa½„a÷'FkÐ…ÉCþðç&È9€HPiWðT­‚¿lÞÎÓ¶l,¡j¯Û¥ÙÙveøÔŖ̓ãHƒsfŸr±ÎZR.â.ð’ÍÚrì\näCp±¹¥eÏkßOjEÀçÝus•SØ@â¥õÀÆø_Fs6;vO•í.l. ó.ÃΟ_ó,ÈCöÛ¾®ö4‡õCÕ­�à�(�û„¤›¿EzñÜuê»É–{; Rè4™£º“Fa‡ÿC€X7ƒ'Eôdp‚¸4§H�GXdÀLÞù£Þ‚5{ ä$»áöâ¦=çBƒ¨<)*ÐõlÝÚOˆMÔRggZ_YpþrÀßÒeääF ßTþ·ì‘v¶ñâ–ƒõ$FL¸ºÅT£ë>ÈOl«œ òM ÈåØc{ÔZf¹bÌÚÇÖ^°îáñç>ùÖûÇ|FÀ2�€8 ßtÊö†ÈÔ6Ú'2QÐ|t7DwÜuw÷FøUp|ø&÷tß…êůûÂõÙ¬H¿jv– éþLr˜ô�¼l`¼íÍ Ï®éÜeL¦Å‰_n\e]‘]ÉïbœDB>¶^Ïv1—muçµ ¶ûOeŽzõîMz¬QvƒTG§´ó·Ü9v¿è £â2ć `O€¬#*ÒÖNŽ®è+V#ݨ2¢·vli{/|O}'´üìpx�yûo·ø/ îø¶–?ÇSAÝåì[d¾øì{iWÝ:¯M®9úß�üCùNéßgûÆ#Ÿfzæ‘k"–K¿œ0øÈ¬Åü���ÀàÐ($�BàÐø„F!ƒC"Qx1ÿ‰G"1èĆE#’H£’xÌš!ˆÆ¡²Yd>)+…H¦39,¶k N"±8|ºi/œÐhGãð� �šËà˜ BíÆ(TYMr?æ5‹«E|<Ÿé@,ÞdØmÖû…Æåsº]n×yÉ\ÒóU+Ÿ�€e~á ¼apØx¾YÅÂfUœT«£KåªÔÿ•‘ϲ–ú¼f Êç¢T-—cžUr9œv¿’ÍPôÚš> ‰ºï2ûZ<óM½àçêÚËÆâ·¬åXy²W> \ÍìdšŽW]•èç<l+Cº¯A+¾l/ϱ…ökP/tIñòõ=sþÖžó—yvø‚?(ª@Ò,r(ߦÍ:Žë0Þ4d�ÖÕ±M»v飯>”½MœH‡ŸŠÎD‹ZÛÅÑ|aÆQŠôyEzþ°I»4ø,is¦™°ˆrzÛ3ñãTÕA kxæ&²[ äI’JŠÙ1zC+3rj:‹Ë ›ˆ†È3¥/¹oû/JI£pŠ<lK Ô<Ó#©)·qëÿ9K¨«¼Ó«‘ò3�Ì,Á;Ϊ«ÑLJú¯@$¯„ÿ?éœG&²$Ÿ9A-\ñL½2ŒÈÌ>Tã”ѳTgKs…@ÕC“¼³R$äâ5ïâ^ø¬oÝRPò6ÿW켂ùºÖ<ÆöÍiû¸ŸgÈ�c@˜l�°¹ÕYV6;»I²’…sÔ´-!KÙ.<ÐáT4=Å hÞ1űézÞ×½ð‡ŠãQâ¾¯ì ½>¾“Ì˸t”é`­Ó2ÄêÁuœÆ»-ЄÑM\ë>¤sÓÃŽ7/c¯Œ§ÕTÕb5^fX“›¿Utãývb7tãÙ}ÆòH×&ažÐ¹ÌÕʲ>‚¡¢tr-”Ïik½e&V+ë=7+©d\0ÎzÝO–K“K„åù‡dOxÍ;8j5ƒ9G×Û6ØŒ22´¸ËKz=»î8vÛtÝ»{ž‡ð’"¡>¦€@�Û2žÂËv·°àû–ÁQ9rÑx `UóÐô]H¹ áRWžàLt¯?/DC«D8£ciüª[ÚÔÌ_(Ø<yu~Èet%»“IôCiŸkþN~¬APf‡æÛxC0Sr‚¾ýȚƵ£ÍãðÎ÷)cú‹+Öžñgšå/Ý×8§—³ãì>ôº~¬ê·KY&)Næê½q·ó®ú›á˜`äi/–Ã^«iU¥m*§øôÜòzIÙÌ8&øŸ[a"Cø²”/H Øg:T©E5±M Ãí�Š»Oé¸í@„J¸%R"qü$8^.ÒĘ•âS§¤X:°âÙÃzvÅó.·] àÄ=]oA²)U!LQý‚*%J?ÖˆÎâ;n‘ûª—”]Û¢I~0mî·æw£ (EÆù¡togJ‚<-·4¬Õëq¶F>ÄGÌ”‡rÑîGªÄÎåäœ.2& vŠÝ ‰­R1Øät?èn¢(<€ò" èI Þ17£-ãT”ooqV$Ñÿ*â  áŠ$J•2æa³ ®'º À#‚0Rl@1!d$+6p2Ã#érr*ÕŸMé}$[Õ~*ŒÖ—i'£cn—Î^]A‰Ø|›rnfÎYE!'<š'$C°EÂuW+#az #ØÒV“|miSé£< *lÌŒº“ÅÂP@:®ÍaãÜÀR†@¯À(•ð ;Òv´MdN†ìÒ& IAñ CL`Äè E¨Õ¬Lñß´ÓŠ‘å¡dLbVVíPÄÐÖÀÚZ«ŒºÒ;R+!xoUˆ”4•̧•Äð¤¯^‹±¦OÚ­shD›¤ÄmªŒL¤)ê"øÂÊŒœè‚pIDͧþlW”;*)v*e7¡F‹29õNDÔñ"ÃïXÊ4Y×l°›ëÆHªéˈÀÞ_ úCü€€2Eˆ € G4ˆRÍ= ïGÌ=€$”üH`!1ê%e¹×>¢…€Ø;K«š“üçO¹ûYŸtibö&rŸi-)l²ÀxLüïCÄÖ­ZêÉQ”jlš‘>o]Ú)nâ3•j‚}ô&w<É.Ü=¡hÓŠGà n Q™;2žE³&´ö¬fIK0Å®V¯ Emi2^]ôðÓ•ärN‡¢*x¨íAã© z?*ñOfÃB‚­ù¥F÷o¯àûcü~”¡<#�˜_ w4€L9UD »&è[‘rƒxa™G,e—Kt® °©·^â³Z?AiÝ,1ÆtÏÌ ±œõg0åOÜlRoï¥ÁǸCw°Öuϲ¡›kÀÅ_‡Àøæ™ga=Òì[NæÝ�äFð~4ž“ .¦Z§òƒË´æ é«Éñ• w×ånF¹ðûW#°XŠòóCV-¥ñ<—RM©soðˆËH̤ý‚'DX œä¬™§Í®(i„ö‰âDèø[ä9Š ^UݪHn@…9W+ëýŸÑÒµ2iÞ ¬ìÙ®°§¿ žK“l¼VU·H¿)…UhA¹?„ž¬1yâª÷›ðA¶w]0íd—u®ðÀ–­ŒnæáÁqÜr‘‘nÈ­CžláX}6°Žj+Y‚àpБëWïÏ*8»JDë¼ÚÈûsšû“DWº6ﯯÑ4ÚÉQDË}´.Mf´QÍ|ÐÃǸù#cô‰ñr6á( $ŽH dtÕjM XS†]}ùâëfg¦¼œ\[O°ñˆ{{*€ÞqÜû¡x !´v Œ¼³¾ƒ;eú¥kÅ•n:žÊèóáø¥·b™ÀÇ|È×^}÷ê2Ê’aSÌ%ʼn¦´m‹7x~ë+£ûæþ1Ÿt½®  Ò\PÏ^? èeÿ¼‰sŠQˆë;ùÞ7÷œFêé3í}žºÎZ÷æoFægçmÀ�Q À˜K3$°� P8øKo«›QuYƒíÍ^Í8· °j·ÑÓö]¼ ðÁܾ_õþÄ”,áÙ¯|7KÄ­lðÊtïÏÔ¯î¾-´µOˆÓBý-8«g€‡J¸Û‚¢ FøNÐÿ�¦Æôð”†úæGôTvçj¤“îˆçìal,:ÄÌçEθI Q xÐ@ùŠÀøj0á,8rÏ4W¦¢¯o&®Î¶l°HÇ4ÙVì,ÔÁ¡þ+^®œ ”a &`<�¢äûAÄÍgÌ匜…®’nLûÆ…æRžjJì¬`ч¬ j~!`ÜþpPö À² ÁÖbÿ¤t[ã˜ðR²°âëÅ)Øé,LÛpyÏo©"8îÏã|Éír[PœË´ÁFCEZ̯`[Ž<ާÂÓ† ë¥<Ô*ªÅDçnÀ <½©,k(®æhÙ ¯ÌÅ�Q&½Tc§p7¬n*ÌõcĈ fü®ËàëÆÖ¢ PÍXe"¹ŽF³)4SÞ;bˆ ^ÊP@R@$ `Éê@R/0ÝÏÑ §Dxá°n¼ìtR¯ÜÐëàÀÐù!OïÁÕ!èq”›é{"¦lç±<aïºÓ­A#(¢/ÖÆ*#¥ÎÒ¦§èëˆ`RÉJŒ±˜»e\Hð&ÙÌ ×ˆù�†®zøÑAIÚŽ¼nPÌ@Î-&‘ÎÆ<RT°q¸f'øÖñf"cè'¨^}§©ò~í1ºí·~ëŽ:àéâo/ÌÒIêiÌœY ? ò=®DçÑðçƒÔX¬Ó�2;'o íJám(baøáôéÀ��`ÀN�À¬  ¸�$êž/�AÁ"æõ¬jh’Û3-}r!ñ!25ê ß!Ád€u¯Äój¾Úm„ò<òο²ÜaªÒ¾e—ryˆ¾ÖLíËI °Ê\ê´IqŸ%„Òz\who$øÕ‹2=¥ŒRn²-²f¤òí+ R–”ð)6®+)8äî8lù¦ÞÆ08öPj°Ü$Ï6òQ$n)ÈP‹Fô²c&éÔ½‡q3otô«ÜÛÒ±dzPòœÑkLçèÈÕÄ8ŒÄ@´êäª+Å•ÎeÂhÇÌ€ �„"µà�· <@ �n ž   †` �~.,äàÃP_Ð,ŠúmP‚Ë.ð ,o1@ýÁú!4 À–SSJÍÉ5aÒ]6 ¢£ÛC-þRÍiÝq9KK?Ù%ÈCÈ/OÅn‘<§H’ƒ³¯/IT€³òÆwèg hr  Ç*/$fëLw'.€³ Ä|ò¾ÕFv&ðÇG½¤ÓCÌVª”ذ+â9ãIDã éd]TðA PÌ’9#oØáJ4çLÔöuNÓ´Z€"�`$�`b�P` ànUz�eð@VÊÆâdñQåEK× ‡‚X‡_PHwMŒÖ%áìt @* À¿J´¯]L² à·5è¦Ð±ÂrPf‹@LJøíSCôxíðOÀ�¡î#tR Ç�` R Y  G3âÑALÚÆÔê×°p赿>p+IÜ‘5BèÌdUò4  ¹ÏVDí O<é‚p]-4üµ#Sâ¸áìàŒÀ@îµ×]ujEÖ‰dÄbÔJ€2�€'X)š@X«ýR/QD,)(Rw¯LmªÚäeÛqIô£\À¾…m Ÿ]µÞAä`"TšøIZVŒD‚¯0þ @„`h€ ÁÞAúA–à;!ÐaøáÔ€Y¡òêT� G qvO•Gò@Úv:¡ÔÒóïWeíOHNxÎÒ¿Mo“(ÄGS°’÷Jçt˜35R.æÍSkŠ=�V'-Q7Käz¡êÀ² ÀÁVÓyןz�¹ ÛW­RÖüÓÙ#ã†>?ëpa" -\öÏzÒ™`²!ÏKvÜuš¡màÑoLó~eKeÔA ÏD"!êíÁ>À0 �¥]"1qAø¡Ò€0á‚!ìÁ⡾ø²ÜýáÊø„Laý0×/G4q0×vBê~ç&»¶.?N„ìÏÔÂï½Bt¡-6zç¸(†e(î4ÄÔÁÐ{"¿cDõPF iýD6lÁw®`‚,ê ¬ `! wÕ‹Ø¿`¡¶·Ç%¦½Œ¶ oÕX8‚¹€ WÌ À#ŒêtwØÁPwán&QRfÈ4¸Ø‹‘qÏ•:*¿"\¡æÁ, 0 ³} AÚ¡ÄÁöÊa ÁòÕ“¡¬ǃáàýáý„b�€ �W9Ãjå.36VôK¾ü]9õüù9�ü¢}xp[?‘…w0Tö+ '~|õ(²§œ{0ÜdÏ#nDaRàóÆŽGÕ(<Åh†2fA¥,:x«Šà”ø·‹¸íYÖËXÄXWõQsê IQ}‰b/‘t �. Øç™þF@´AÊø÷6úÓw鈣wV#{²zìº!#ŽT¹Á.€0 �³Ž…î4¶!õ!|ì!ÊAœð·¡ßD® �`�XQsS£42Î%"iBN¯N/>î‚{ņÚÒˆÚlþí ~štňa›y‰rløod- 僢eg6•4ÞÓÉîÁ)&›:mþÒðDתMxìÀ­œÁRà9 箉š`^2ÐéO™™‘îD¯w+1‘÷A�Ú º;®»/�´z m ne3Ðä5ÃÀPí^šËx*Ev x4þ!áépa,€5’;™CHÄA¤ð¡œáˆ¡ì¡ÆAÜbà�Új·8Û5êVÒÔ÷Ó?'¶ó¬3ˆ×išLÝ¡º« íPP¶g}Z­N;(–@ƒ¸ªÀ¯œÁPà;±›Ó½Eð €Åí€ ‚¿à°€( ƒ?áè\- ŠÅâqˆ´nÃ£ÐØ@%„€19TB9ŠKbò¬šZôy?RH�Á´º‹ÐhT:%G¤RiTºe6O¨TjT‚ÑÍȧY¼A€°fECŠGa2YM~5 ³Ëæqš š#™XlÖëD¢8~¥Ð£AbSÀ``­· é¦Ù|1¯f#9ìÞq¾®×ä @’ëU:Ãv´Æ$ô,ü릎Q¤r:³œ¹×¨1¸ö»]M“\-:]m¿GlØïè¹ÈŒÊ- ·l46¹D‹y æn4û*Ñêþ+’ê„p{ßðx|^?'—Íçôz|ృ_kѶs8šŸ+oGºQ«ÿ›VÆÆ•¡G¡æàÊ|¿½PLÁk¾ªªå¡à­«¯+î£Âê$2Õ:kè».‹Á.Aƒkì=I¡ºqEÁ†y™†¡î`™g©ÄsŸgñú€€(€ÉZVº¾m#tèHìQ%°0Û†‡¤)SÒþD { “$©ŠNÜ­¨ÓVäIÍl�š>­>Ö9Mš\˜¡rȯ:ÎÀ’;Žô™;ÏÌõ=Ï“ê&´ü¦ÌïÓ¨Û, ì>‹/þ 'ÀIÒ”¬-‡O BÝ-&ÉO¼@äMO½ià~š†Ùð^™¡l`žUiò|Ÿè�R…7,)òؽëSrá5bPÛ®+z'"ÃŽ:“4Õ C›`Ô2¥¥$J®J)Hô\ªŽ£t-Ãp"’ËS4Ý–=3QJüâ+ÎeAÚ·Íõ}ß—ë@·{©¬Š-‡O#·6m¢+žÙòpœ”p66‹”•ýã—Í0qå¬&®[x…£3[ "…0Ô-PÉà朒õ*ûc¯!ü�aª{eùä[˜u­][Ÿà8̳s^úÊÊöéÞ3„–,ö<½o¦ºŽå]6ä­h-ÛüØ9Ól“±¿nÏ0[˜:DÖLÆÀÛO3¼ÜjYæzŸ· #{Ï ÃñLPF¥ ± îCMjPºÄ‰Lkß6Ëšä5DòZ„fiÐücÇÕõ8´:ä¡Þä›Z# ÑŽUÝjýÅJû;:¢o™–hA£@¯Õu¯wžçå)fwåéâqØ„Xæ_ûá“õµ*x¹:¿büšô¡•Xø/Ú™ÜÜânŽZ‘³`~j,ßÜIpb0¿è àCþ€Ìi¹öÒøž¤~¯Ý%.§oVS$) Ñ5ʻ౧! 4>º€¸ L)…E-a¦ݙ\tK°ù—Òž[Û]#͉qòB¼(…g”wø0†`õ‚°v a =Gxð€¥«è†´ß1içÁÈ<C–³„Y^-©Í¬–ÉŸl)±˜-HÂx`ôB EÀX¯ãÄyI`0 å /~çÌ·7Œä™Y }Ñ µ¬ß›é‡„ê†Ð¶cÔ™Ál;L-Gs´|­ó²ö\ð� “â�<¨…&)„äb10*‡XÕƒÜ�0ŒÄpë˜üH÷|Sá¡?Èaw ÆYÛÓk.,à5¸Ë˜CN�+„ˆæ"Á°œSŽrð F‚‹KA¶–†È™fŠâ†çžI‰ ød´˜œ³í~ÉÁ¾)…´¡Rý>Ùæ¡&3¡3ÛE’'*„� Z}OÃÈ=°þcy á\;ÐÅ#è~ð@—Ó\šÈ„=KbÏ‹“a.55M&HÇ5·2xÎúçkû¦2*™Óê_ £G|®þl9ùO#*|o‘:ê0?B°G›àŽ‹UÚ½8Àh6îüÛ®¨¶Õ¥3ó”ñ¸Æ*åê“2„è=Ï€¶ªýyRal;ê@¨$9ë³°7*èRëq`pæ¶ÔÇâñ‡è˜�€3ÑJôzbpôbèw 1fdÇpüEp=²äü¦¤6%Î娜j\äæ[dÙ)7ùšäª«Åe[Öûßµk?G¦HWàT­M 7Ñþ¥Ã2Sn <q �LSˆ IeîÅÙÕ„gF¹Ü¨i“ZjUº§6ÉC˜ä5“Ô>àÚ«ÅÚ¾H8-‡»'å |á»PÊ–” ÝMF¥f²»Nh)q¶=åÎjVgH€ÄÀ~²Zøß3Î7ø¢œtŠAj;G`î`*Ò«Fu‰mSÉkA 1`Ô7™ì·ÜŠh&LËžuÇÎúÔg›}=aØî´X" ßÎÅÓâ&ëál“×È ã4ébˆE4˜C¸†µG\™ªl–ñCÌ~ 0öÃ`ZùC6[ê7E8¶²ŠvÖÈÙÎXÈϽd?Ú”º ‘¬ÌvD?‚Îp®m<Ø`| AP:E(´ƒ°wâ<K`OŒÊÍ&>»Ÿ´ ÁŒ–&šDÐXîýÂ¥~8„p)’Á.ŠÖZÍ&�àn3)ä] ì2Cc¼|Sð<‡­,º,Ç™CØ g5ëMœT/¨ÜâÜvJ"ák³öœ‹Gm „t0UÙ»? á‘**FÒzT­€0…JsùÇ”ïÎ[ý–_ ƒ™´Fç¨=¾ì-åUkÍæ=œ®â nNÃÏ .ªàZ‰ [¹­›×Û¹Ù\nõÇY‡2½Ž$ÃÖÊ cˆrÒŠÃÈÛÚyÍÚÈ ‘Áà-ãa”¸o±ðˆ# áSqòí†D ©âlVŽ‘î>Gð  oo<XŒÿ¿/þ[e7šH3m,¹,¡·´ùÓ¬mÏZœn¶Ûݹ֦„‘•·T9Öe°FÕâ ônýßÊ8#)û`›ß¶CJ¸§~°N/±tóž¦7±!é™CÈ!Ù|³ÀwආÖq€:ýSGž)”Ê×Ù,L&Êû6,aã ©œ{‰ÐïB žsΞ‚3ˆŠ”]Œ‘àA€SK=‹Ç9ëfp>tI=øó¯žqVok~„»k’gjÛO:M­Ã;^ƒéìwž÷¸·+÷ xH¸8üï TSˆpQïÇÀèdó{Æ`‹Ò¼ð�·ê˜îD0>6¬¢"ro2Ù`2ÿ.ZóïBÖ”KÄïÔ­é²ÞOû®Æ]ì$‰„7Ä¥¢Óø�úކ÷$=!OÁaÄá¾À'¾—Ð Çè"L#Jò)¦‹Lro­NÞ&§àNäÎîÂ<Mv[ç0×ãú箺:, í\Á 0c .àví BËŠà*jÊæÐ*(ÔÞ¡âÌ`Ø # Mž €ö-§àÓË Ž°0ÕG†>æPÔi"5bQpV\ póCÒ¡î°jA&ÊjJ˜ 0”°Ÿ ®@·ÎvA­ºÐ/Ì|‘R•ÐQBÚÓÊu 4žxq2 àŠн -,Úàxîèì �E”™%œ¨‘Ëp³ B äàñÀ°Q„ÖpøgØÙíTxH#ðœ)aâòá0`L ñ)$!š æáº¡¬N¤¥JËQÌíñþ¨ÄîÄä‹oʦƒ¦ßqäG,th(MïRD#®þaL U0¾@¡Œlª#î®Ô Ž{ b¥&�H €¯2Ê�¸¯aÔv€¡£ù‰ äQòŽâA1!qÚ r]%ãÔ¥r6!&!ÈDr`�gzõíâvÍ{ cí Ìj5íü­êlÀéZìp†ªX|R˜ìŒ¬Ì]$küÞçHp�­²*r.ê½#aˆ)nØf'Ý/°<r²ÊÅÎ,Pæ¡&àK%’‹/ µ&2f!ÒÚÒþ‘®Ð©K í*o5 Ÿb-( öàÎ S1ÃÔ!œ�èá¸Á²@#6B«_,«[3RHKcDü6õ”J3€úÇèHMHùÄ@ò3zð±“äðk‘°Ù'ÌŽïè€Y5¸œ@Á†Ê¬TÈE³Æõц« º„2PàL €¬sº» ¸¡¬$êP|`ÏÀ§cj\£hų¤wN¬µ’G#ÓuâP È ôàÌ Sé>¤)úá".ÁÈ �c5 Íwê 0j’6s°âÖä¬c3BãW$æ˜jàê°€.Á´-Gè®à~QÏî²8óþ¼ÌÀÐ <f¬‘ÏOˆ.7!àòá&Óâ À9H ó>áªu2j˜´jw/¦ÏÔ‹*ñÊ¡†Ú7ôªa2 SBt+K„LÐ a1Dß‘™A2¿ æÂ¼I²¨²Û<ÒÔÎó*õSËÁFª×P¦£ø  ˆLt}NÕ<À ƒ ®,ü¶ñŒõŽ|‡Sœ<4ª( N tµSê,  üOL Ls«9tÈö”œ)_N4æ 4·VÄ ¶¡¦Á®@ À +õUS¬)’Ø™¢àeœJs"¨)—¨‚Ñœí¯L¹‚½ „²ÓÎÜjÊ® À†J`]Y•üq� !~kñ[˜<òL=_V5f  ;_éÈ  þuvz”u õ¹®± Õ+r6ñÓ`ð@ÍYV AaÊaða.B¡ÊÑÝÀðÒÈ´M�Ê“=•% C{ EŒnãJ$†æÎ¶È+€¿´Tw“€Zð«JB^Jã_�2¡öSk¥û`!}Q5lhm9G@ñTHjMHâMá(€P `ªNÖ¼V%btõ{&èÿ=5ÄD JK±i6ðá`µ™öFJ À¡aöêA€ôÁ´aV"3MàÆ´jµÍ`Ñ\ß”iæÄLôPÏhÍ"*0z¼?Uº)Ö®–² aq÷lRÀ A{[pœYêƒ,§% µ€¡Šjüîsx±\ôÁ ²$Ì è6ån—nˆ`º¥LõLv2íPýö¦0×$Ö×Â;Uá0àWq—z¤‚ º!¢J �¢»cÒÀíP­'vÿ×õEÄ•a)öÆFd¯äwf7ݤö †¢¹vš¿ç…'4¥” û˜L„„Á†æ¶‘‚Æj¢-Uá'z Ö …ñÈU~a£LÍ&ÔÖÛ.ég7\ý®;{¶Ï‡£}�ì—z˜\=!baÒ �áù *‹m7 Õ6ëÂ.Xmpï×gø_Jžx½Fb#J°V²�eˆ¸ÐAÀ"v4ë‰QQwéÝÄ©-4ÒABAÁö`æxW…¸Ò€×æPxfRouVYm?UY8ëÎkªà¤Ô‚Ce1ÔÀZ ÀŸˆ™<ábAÐ!$¶Vw*„Ï@O(ª’’¨ÊÁÕÂ,U ²Ü\8Fµ'c”ÔÓëÆ8jì¹plôW—î`ª@4¡�y?š#Ð Š6 ‡ /Møø€Ö yšGV ÁáOÖ.jk–ùig£F¤98DîuËIH°ÅÒA.À]“™¿œÎÔà ”!¸Vi[+{R˜àÔ†$òSqƒÈµ7ù…yxE8Ï^n¨Íi5Îç3Žz6~ nCfø¹Ù@þÏä@6€ÿšý¦#¾ Œ …gí¶=ÛsÕ!ÿda$Y¸ g ¦GœAœx®¥[%Ö×£a‘Öx±Lú˸sŠtÐÛ#YMá. _ŸšŒ=YN àð:  ‘¿LÑ¢|øß -�âÚA^¶ÿ!oTã0ÕŠúÛªö7•„îúW¥ üšÃ°¢  ŽìPlþj.¼ìEÑI'&Q5 77˜[†è6˜é3¦!ö@⹺ŽÛ cºz–÷Hç$K% ý‘RÚXxßõá‡Â…³Á-«ÀÌ Ú‹´£ÎÖX àòªáâ ‘8¿3¹QT<ú› «U¶Å†ì½'Óxäï�ƒ°@k¸Ä)�$ám$/l,‚mLµÖ¸7ŠíÊm¢ ùU»ƒ»ÙJO ´ß´�\ `¥´›Æ_€¼a™µË6yŒo–Ä“rs 78"Ù·@è{·ü<¡²Aè Ðñ@÷ï6دŠÎÚ7›â[+• ¹±[í:×Äà ,_T·—, R9"bþ9–¡H»ÃÃ<€"À$ !kj«øMs–5PãU0–e4§gQuº­Qà¿`á¿ ¤œ<‚_@¼œ µ<»Ðµ6‰*Š9'ªv@¬û<àæ Ê ÜËcLjáÌ Á wí£jŽ8´ò±ör.š+ª¶w»K‹X›ç 2ªà8£-ݵب‘YÓ¥8ïRà€œzüéÈ<†e£sXoÓAÍr BŠ!ë³àÞàÕË=>Z¼º{QµY°‘ÎLÃïÑKžyõɘèÑ+mƒð†"¼Ú`d  ›Î}f<AbÌ !aü$'¿hûœ¿Œõswö™{†´¯«•¯ôi½ún^=<t=8€qÚ<@”EPÛT_ɉMºÂ žá$�` @¢«èR¼ðAR¡ÇµwÍ]š/Hºá¨Õ×UÝ»dˆâäˆ7áÕ¡.]š ¼µàãÊ¡^€Øáš@�þ4*>b8äîÎ2últªž3ARÂÞ™eæƒCNAÁ„]5Ç€÷Þ~I´½ì=ƒÂÛp:¥Aý eÛ²‹o°‹¢<ª\> àÞ’OÀ¾Á•µÅáÝTR{¢;ûkëaöàãä>Áì#½²A(á.!·f€ Õ2ÈYyÙÑ{ê¼eºMê{µß[ŸÒ×?¹Ýw=,?0`¨à<€ö>é° & aa/ÔÈî¤Øõ'vmÅáÝŽ5’ÚpI1k€ö þ¼ ›óä÷ìa’}ìúÔ*x·'Xt¡JË–EÕ¡, h  ™îp<ž „!zºðv�·ƒÆ;°ÛcPÔe˜�¿ñú«çÄ»õ"7ú?@œ拙tŒªÝ2 ¿4`ô_Ÿ¦@& Åp ‚�`ø8� ƒCâÀ:…ÄbøÌ7‹Ddj/#x=i#pÈÔPHæ”Îi5›Mç™Ôîy=—Ðì…Jù gqØL– …¿êxu6!N…FêpútB³«L«ðGŒ¡,q™I‚9õ®Ùm·[îëÖö!œ—ŽgkÜ×j‘û nÛ]°àjðˆ¬zIK­á µ–/!K†Gaµ…*C‡˜æã”Í2«–ÎÄ^ogÙT~Qž‡w-–ÏiµÛm÷Öà&NVÇôü n-žƒU©Z &•æDáXø-ô‘6Œå¢]ßo¹Ýïwè uBý£ÕàøL”ŒõÁñ1îèãåéõ-êA€Ï8Œx§Ñ,8Ã(–—»ðdAéfcœ‚éb€Oh $Lãõ?Œ«âÊ#  þ«O£„ûÅM,Y DK$hQæ{µmiF<‡‘„{Gòƒ!' éXœ¸ÑŠ@Â"¨¢¾Œ«›BöÀ(JÊ2®‚¦ö«o³ðÉpPëƒPžíHsDÓ5'‚ùc/ €‘4då²1S+'1I Æ“³•,+ˆœø‚¤ð(àÁ0\×GQóHøOIPj�bÒ3RL[:°cMHAóü•QCÒóš†�-KV5ÃÈ{QÖu¥k[M` žU³’{à©1Lxè½ÎLS<ErŒµT*µ”‹8Ìô}’#dÈ'„Õ½³mA¢ùbÎåMFqdQ<Ôñ$§>Ð’œërÙ£—P^ ê}’£u%ÌöÝû-‡±ð~C©ri›Ç€/è“ßAÔ´VÛb5=S\²j—OÉ•N«c‘käѦ'¡î~ µyD<×þ[—eù‚F SÎשÖ@ÚçI¤:¯Àn¨ÖÌ¡>c£héµ»o˜ýÅd]Ñ>;EFE‹Þw4¿tjZ…ÊxÀ„¨Þ ¢U±¤lû9ˆjBXö]€€ PÈ̘öCìuU­nÕõV‹KúÔÅ©¯\¿bKi$L¨qÌ·N0Or¥wDQMç‡âö<“A$±ö*Á F;å›GKÓtñ€((•C¹ #Xl5 Ú/[ÛfùbZ`9½.…;ËÎ°ÛØ{;½!úü 7#&ËÛúvÈúPÄIRiS�4³¿?œ$XÁðí`PÛý~¬ðÞ ÕB+صh&ø§è¦k©ÌÿΊïB;ƒ÷©�`'¨S§räÏ ³ø4 eä²5ÌûÈ3_b@5; œ $Ta€E 1R0Fòâ+É˵g„¼œÃ9Ìyˆ¨8PLü_@$»X9Qû ;‹aª8x�À›xüYËÄ…P çÄõ?Iãõ'Ж'fJ>Ÿà"AØ C¨Á^˜ b™t¥ƒìtœÊQa¦i÷'…œæOÛ[]«%ù¢E耨&Á¨Å Q€`c Â0¸Ý+Æ~ I*³gš%Ch; ÞAIs¾0†ç aô\�€-ÈP$†@€#’ô9ȉÊ5<Þߢb‘R¢×öbàu2b_Kõ¶B˜¤j„$ÉFøÜÔÜ<0X‘8ÝËb`ëÃH8 !4Ì °nC�Œ0„n´é_|j~Mm«JdÑ$Cd” 2lÎòâTøQ"è] áÈï¤Sà'MìFdžÆ#ªz}¦9*žÙäfÌqr<æ·T» ^CX+î‡NhÏ‹%sÀò]„)áHi>¡TQѧã×[R•p¥UDØaJÍ)04H€s5AU#§…²mŒT0†è "fj+R(5(”±·À©Ô HÔö«‘²9ˆAâÄ|±ú�˜Ä-ªÅyù ˜ü.KŠ’J‚{Wƒ]YN´±W Öàu+j¯¸ÔÅ zÅtu^ÃXsgIE4•%)Ë8 ä[ÊïI”UŽK"žViw‚%Œ|‰�ÒƒHL§v"ÓÀ#Eøª3|ó¬8ðøck~*mÖшæßÒâVSd–Ç7Ú.Ft‘ `ö©Í{OrI€tƒI‹!¦�[Ý®&šhû®OeªYvjÉ,óˆ°ˆ€óxØ è.Uë½„Ì …aBæÜ]24xÔã&àO[ˆžGÞÞ<àΣ¬çP¼ˆG°Ïh‚`+½¸6Ô‹áT0æýEœöü‘R¨àð¬¯ms¥F±-žh” W$Z\ƒG�é@ð: ëÊ?Õd_·d™×K98qÍ.©6FÛ2d=/(T¼â„9„\S’rP â|ÐL†¡*¢e3¾Ò®Í㨲ò±ôQ@3ƒ»Gƒ2UÉ "8_ ‘„6ÀiG‰æDâWkg ×RÍbÔ¿ _|:åb–# @ø2|Q˜ï`u£I‹1¢ÀXCÖT®üðú^ü2\˜â<Âãäb¿¿‚ÜauÐú#I–‹!PQB²F‚Õ–œ <amÊ ŠÐ+'Ýü¬óD~_ !,jÛDx¼# n4åyue&¯Z¥ÇC'öy:cÔ|‰@ÒóþbØ' v…]_¬7ÑÆL}§Yk}ô¢“þ9ç,õK%†˜¯¹§ý-@rÓ÷’ój€â¶ï§ X,‰ÒáváŒMßS›MB¹HÖ@º àô4„­Á)î˜DmÏ©X¨`ÒaÚa¸üÜc6™®3�Ì<æGˆöBP4 ·Æ®Puà J Mžì©'sdÎSó3³iÅÞúÏÅ+b¹2ÞxÓväÀE¦Á0¡!uù°‚МËP°­$î!ÑìeÝä[µg¹S=ÌÇÈ  û‹‚ÞÁHƒxDmO¤—…¥iÌ=YD™Y¤«…ªO0]9õ¼‚B<9§6çŒ÷› 7G@ñaÔSâÜû,·Ç*ø¥+$ˆêc\Ò;ÏJ²þ±Ö…p cÛF ,ÄÑ›¶[Òp²mŠONõr>ðÝÿwöód0‰uß§0áïOÒ¿Ü„ gAË|Ú¬?}�TÈ^ ÄäIÀèðŸ‘húÞUã|+Ó£zúÕ!Kî !Ý`:Ø8Kð@€¸-„Èû±²q (4›ü:›¤“~ ð�|€2‚�4H@"_>x\…PbÓ镲*+:Ÿ°Æ>Óî"»Ä)à`†¨q‚xB…€€)¸¹ P¢;{ª ;8ˆªµÁQ0�´iô˜Ëþ£Æ ĺß4Èù-€Èœè)¿øPƒx%AŒ/@ ‚àL,›¥£ZV5«6£, š¹ ñ¯»˜2@Ð$|/¤0„\XbÉß.£¹2í.ãürX“³à¸‹¼“šƒ0!ÁtCªw‡Ð~èÐSÐr‡|€%¸‹ì"È-é;¼PüɺB‹ÇªZ´7Jº¤a$?ð…�7\HE©£�¸/ºZ )½:Ì6qs¾ª³¬³ö- á½<¶¬84D:E²ƒI¸U,>*)Ç:úŸI÷ :ÛBqB †CK,9‰æ°|„˜2‚$@ìh'x>(apYX€SF1r?sú˜Ô½óÁ몌ûNÄ<Àƒ¶=`㜣¬ÌXƒp&G|‰ì\¬5˜“(™@¼*³"‰À§+ÕÑô!”+£’—4 x1‚f„‰  1˜[F¨l€k ?´~8\s(Ó+‘ðŠ;”uG`"F|—¥ðn8wø>$I‡ò±Éë`@QŽ :»û!Ð)ÀE”ˆÊ,¯ øJ:zÚ#bÊ™òÜÁà?ä)HZ·Óu<©©6°Gƒ!Él¯ž 1 [Xb†º¢:§2”ÈL¨ë¨7Û‰H0¦Ê�2(1ʽ¤»Ðø'„8U†k|�,6Š£úM C>" ;lÅB‰Ë˜ŠÃÈZKqg=ée:Ä­�6‚tÊÍÙ4�À0›x˃jG §¸sëÄâ¹t¼@#ŒÞl¾…¨U†4Á"$1áÄÍ}–€/™ö£BýIÌÄ£Gœt˜201‚—NŠ@„À\†h9…]ǸFLÄ×9Lò®²+Âs†Fú–—d#9¥L<¹ÁKJô«‚HPdÝO… € >xÝM$ ÃG,jÈÐJc°8z‡ÀL@Ø/‚ Gй¤@L°Rj’ê+[ã­ÓfÍbÌ c´W?’àFÓË0ˆÀ´õDöÏ}!ÈoHxè>„ø~‡è½+“ô’³¥N;,¬¤ãDñ˜²|ÊÈ„ø5Э%ÓHí€À1‚€ÎKÃÉ.&j£¼c�#RˆÉÓP¬˜ÉÌIø�ð�ð ,bx¦½Lð·s¥AÃB¼¯êüͶ,&ÆôcL+×óh+i/ãZ·Œ·Ì}´ù�Øh†ðm‡8w",NóýÐÌ<lcEkÂı‡¸|„1R@!Î…5 ÜË‚ˆE!k ¡"3P?£Ò«ÅÏû|M2*µi°$}<Bȸè4‚}aÕ€‚J|½Ó`G—mR§“Í)†Ò rÕ¢´:T5> �‡ÄI*ø~> /ÂeN,ÛgO:–±^²‘T|ÅêÓ¡bI)¾WR:Vد%|€AãáNÔð¥ VdÀTžB$ÅÓ借[ FB2:»I$É]aW „�UøFb4üÏ$àŠe ¬ÚRÂ()û–K¨,pù¼ d¬ÊbÇôý‰à§L¹…�0 �pØâ™œ?’ïS¥§BC;¯´þÁB³W•JB¥H3sZ½ã–§!Hü’ɹØ€ôψƒñø˜P[¨ €�è €{¼€È2u¯·…0)ÛÖºQÆD\Q¬£³gÜ|„‡ZòØÍ};•LR—õMLáTÛK[ ÆÃjtBC´´ðá9˜|˜1P1Y’Hm‡ &HR ˜|SÑä³¼YòW{u0%ÎñB§òˆÐ%”º„¾5kK’š+sU¶óÐ+�B;ã!,Ã#KRÓêEÝ-ÖÍiDEyÏû¥Ý „MmÕˆdIãÐ:E*mß�˜€X€¨8.�(�è µh ƒ(F]d½!.Ë…NÕÇÕLj%H:ƒ¹}I“ÅHU7È y3k+*d-õâZ`É¡QÊ?µMJ¾§%<È»µátU7¥9Ñê…œ¡ÇÝpHƒ%É]ÚݲUà}È>„Èspy€)¸UP3ò¾9'¨mëFÓÎˈOÖWêú“äòÚ\RV‹”^½u§Q¸•ÐÐãH\^ XÌíbº¶·M�aKã ôÛÈ}RœIì›�8�à ø*¸:}­0 ƒ0E°üã;uªb†úþÕ[VÖ . ÑéT`®6Ìuø¾¬™åëÕIÙ0ôœ;$PŸuŠ_²ïI2ÔdWRº¯­¼Œ™_|3TL Ø„¹ß ‘âÕMÆÜqÅû9¥VV@©€„– ž! $˃LhW†PkLÍU.=xÚd„áS…xTTb¨" 2­Í/ÕóÞÄäáÆ,V­z ~WtžÏ;ö›Íg_O¬¾O“�ÌÙTí‡úò‡è}Ę€ð @"¸,ÐÁÕW¬6E„V^1óÔ\Õ”ÈþI¼-9=ëI03“%>te…°Ã8bþP¶kâ_tguÎ-Õ#tÑØ*ïÜŽH– ²Ÿÿ ¼¶W£d«ÞNZf(Ef£…çÖ„ÄZ{JQÞÅëSžp‰…–�&iæªÈ^P;0[*$|êsáç®-´„ðXAP)ŽÖtØÐCâÇî·Yþ)(„·ŽM”õ(ÃZ«ÙÆ FS(q.ÈÔƒaek†^/âM*äþ,kÀË|)œ°„1Ž" B°#p�Ê«€Ð3„Abãb”ªV¸(SgßT~jD5çÝö^=óÑÅ‹º5gÙ˜—”ÖH&‘–ÁÀ¤¸æ9ñÛF¿K.žéÔÈ™mVæK]±f.ß`nD¦]pI�&ƒ ¦® Ø`¸o€F…�0e¦€³°ÄâµeÖLؽûBT8nÇ0ýh¾¾QnB”†dÔ‘Ej†ŽBþéùÔ•·U•¢äÆùÜòÈåUjZ†½ _§+¦´º™Gé‡È|€x€@=‚x!ƒ8!ž�Ð4>oâäqئӬy=ö‘VÆ1Ú$´Y ”Z—íí.ž6}w êƒÕâöÓ³Mâùg•/cFLI=¸ïÅ”°½ŠÕñT^)ä ™nÀ/‚vînöï u‡˜zð@„°wÑ) 7?‡ ËQÉ,q;:R1¶˜?¾cÃ)«ñ¬`Æ@Ìd­lb¹UlÇÿ f IÞcoÎML¨`Žé3Õƒi«z€ °äI‡ø4‚ ñ" îD¤¸ HCbض%›K–»FúÚïæÈ`¶RamËËUðo|‚Ö¼^4%^¬ë¶ët ÄÝÏíÔÿ:bÿò„ŽëÊ´ÚÄŒæèÇ+l¦aR%нVÂîõf�ác‘(gO@{„ˆ/~î¯0 =‚ CÈk‡0u% No“Ñé…¥‡!æ-k¸oBî­‹j¬ª2›NlVP`âèÖ霖wáEx%¢e?ëžqeÆ ’yhz°( „ð3ÂDõ 0€Ð5*X,¸ÿÉÍžöZ: ¼ªøŒì—aôÄ ½ót6äðCvQo°ÌaÒß&>Â'9`åék0°p›ÃÕ–/N>{ÀM„b„³Ÿ í›¶ëÃÇquLéó‰ˆ{‡Çqw ·s Ø7Waa9YÝ/åÆ:v¯F·Ç¢ö3HOœsχ{Ï~vâöö÷vVyÎáÂË]çåæà»HMðÈÙ½6Êjg‰øœÃ<{‚`Ó(2‚Ê¢ù�Ð5„òÛ!TúÄìMSH/†^Æh’Z6ûÞ‘foÕ`á¼u'ú7&çw¼ì3ÁòHôw½Te9G­ó×”ù¶}Ú]EÊ­Æ£ýÆÔ ~ð(±û*°^†(=HZɶôû§öö ju¯p"ƒ¼,Ú]Wéܾ.%gÆ¥úåÖHGBrâˆü‚� P0 ÿ„Àáø4‰ÁaP—ü…ÆbQi�+H¡ÑøŒ*AÉäÑà V)™Ëf³Yt¢C$ƒBdr9ÔºLgt)L5Úôz JD“©(‡GªUjÕzÅfµX ›R™T.©8­ÙlÖz½’“4‘K)[UÕ%“D PËeZ6¾Uèvû¾At”a/·ûZr¾E/ó‰¾+;Çâ°×YåúO8½Õ3¶›?¡„¼^Ï„‰p¢b´:ý†Çe³ÚmvÛ}³°Ý($€À8‹¡Æ(³ù–+“Ž¢]l—º4Fï>ÌÞz0é/^×<‡Åh×LGJ}‘•\%½¿F%ÖÁ{lwÝõ9Ìø}ž¿'»ñåÆs½oªÈÂ8îk¾ÿª«‹Àû¦i‚„·,J©üÇÉòJ °¶†Ä9¨àØÚ@±,ĽI›DÌ»ìô½ñ#¶Ë¼®FÂÃÌóèÜ1o2«­Ë+¼Í£lë®éìH±Hê 7Iz>Š0ޤ„Ê>ŠˆÁ) É"¶‘Ûäü¿i ’¾:0ZðžÇç‰î|à¤1Á¼o:ÎÓ¼ñ<ÏM‰Žm›â$N� *FLÔj’DÓ$ªâ½ÓBÛÉŽ¬Ç(¼ô;E¬\{ÇîËõ RQä[=ÔÔd ¶)û§2Iq²/MÒ(òVš4uªàñ¶ ™ô~ xC Ú€•Od« àÚ@&òT©&Ö‹ ðźqd…¸Ñ‚±[­/:´ HʳžÉÄîD´ø0êDœþF1£úÿVw…,8¶š’ËhÕtú¸ˆU^ÇÕ•HwKùÚ©ƒÂù?µ-̈ÀµCÅaŽmÝXG˜%65ئ0ÎvVI’äÙ>P‚çÑö¤yÈwž”¾÷ó߉ԕ¿Õ˜Þ5‹:ü¡ c2Ý'.wI¬¬ !+,wîomÖú¼FIUC ‚Í4Ãç¨ñli°WWÞ‚“!§”Ú&†i@2‹Ô(›d àÜ?Gk*Ì[JT^’móê3x&VC.Iëc»¿<S?ê»5Uå/bÌ¥[oçQDZÔ{µ*ü&hžpœ’_Âõ½W_­ÈpMððÌGo¤ÔT;6䈶* !èqÒxÞ?‘䪹Yö¤iÌx4ën+Mr“ì–ïF¬ë—º³ÛÚ–Á¦|ºæÊ¿â‡µ«#¶ç5sKWÏ$픳è؇C¦R†‰„=ö¾¼›RKrŽiE D©/#ÃÌ|XÃ0D@¥å' 8Ãé³€Oˆì0wö^K²#s긤¾ó®¤Ób?ÉuÑ?Ø2ñžÃ8aï]p.'x~¹k‹†>h„ÅÒ ˆo©ð›|$BÓ æÅ¥ÓÚáœPŠaZ3p �àÊ7րΚé9;Ëm£¹WFŽßûãs1¿åqÑAH«F#1c†xÜTpé°·&üQq€\nÁ2¶¨q{š‹’#À\ÒÞ´#cjiÿ«†Ðè: ì8&¤TC€p8Èá#ÔB2~°ì­¥—eã\fv­«)èàØM¬0m0ÅûÄ4™&Õ„ŽJ.WÈÉ’¨”I£Žñ%NÃ&4öã¡k`j)$ÇUGHb]È0Œ¶Äܨa‘BSN™Õ:͈x‚¼L ñ„€Ho™›°†%7šb’¦0æ.yòÒD´…ÉÔ‰´4kB”Ä„’²R‡PhjÍÕ{ŒEêMÚHz0î”Ж2Öƒ›b*=GÐú!°5ƒÀJ 'a´Ä=9g4fYÊc”ÆèÙ!¡ËÚA´Ýu3ÕòBê!ê›°©-$Æ¿¹iÒCÁúù”™w”Eu–ƒ4£SŽŸóÔ ch±ÃŽÄÅθ" ‹[T ~9[K»lâ@,…iÌ©m}¯Õü‡P*…�ÄÓÐ4Ù#>$+[ó}ÊËé‰U#}\°yöXõ ÷(<0u R~˜0ã‘’iV•/Ñäfž‰Åv A ˆ`¤¬¹¡¡È<ɸ}Ueܰ™N•ÍÐú³Sä™û©’V×k ®; #63»•¡BOÈ=ŠÑ/BÚ¦Vn!±¢ej<È÷iVh!µvUɨoM!–¡°áßW€¯^í­õ¾ÑHI‹Ñ|ň±8&ÌÜV¾š S(Íõf¤•ൠŸ[âög¡qH‡0Ú['i6:JÅ|MX /(í^·oZTfQµÝ½F j‘ø?‚ô9‡P€5÷+@t9‡Œ]#luÛÄ×{Þ›ÈÖl­ºµPê¯ÏÛQ‰Í|ƆSRª›z‰!®†¯~6Ú¦K„b€Ì¤…šdÜ/˜<xû8gR1†àÜ ÂPIã° Ùñó¸rs8„Ń2É–….…r¥-—0NÏùõÌ7.¬²Vɳ GèV"˜ò «xKÇ8¿iÝÏ­sy¨ºûáSJŠ­ºY2–áð>ÇØ° A¸:YœŠ¨Þñd™!"%Õš®x¦ËbüÎö^e½óK½ÙgYTåØh:bÚÖ£Uªít[zßY}šm$¡ ®Â@,Àó~¼ÝÛ½< ´6B˜—¹êYBÑ <6Á¬à¹ïÜ#4´–ÐÚW-œY!jÃè±{Ã"àí÷w8|‹Ð.ÍкƒÇ3¥´×[…Rjì pQ á#qBC¨vÕfFÈÌ~ªwÕxNžì›9ÁSÞãÈœK+jÇò×Týì£÷›‚8×OEk›N†,VbàÙýz¹SÖ9¢æ:¾/Ñ wÂ<+…ÂÁç*ìÝœÙo!°À”ÇqƒˆÏ­…Üw&áÙÝ;¥Ð½6Z&§NÒ ÚïñK…¨xoCîÏŸx{I¨*Àô#à)h&ÂècíPê¡ë{ô²ÛR94[GA¼? –—<âÚA. Šºï§’·ÝW¦j’žÁý"­1yü7­ÑЊÑtùo ’"­qâ‚ô'Xûüö§ékŸ–ÈOïv6T¼¤‚ø…p´×eòÿðŽÔÎy�ÝÃ{Ow+,cçÊÓûÄæ=‹D)k—Î%Hä~¡j8^Ä¢îŒÛv6OLTÌÈÜozÊÃì¢Z¡ìaô`F¡P €Ú�à�ŽÐÀîeiFoìÂ1ªÖs¢z®MÑI´ÕãÒøÄR}¥}†~øk¶ëk€þ&ž«¤<ð%vÁë>ðcþè§@RˆÒ(Êæi"¹kŠæÃ^{ ºîb,Mì0û€zü0¯ @Á²Àªü  ´MHËe¨…Çò;Žç ÄñN/�‹xÒ‹6Ø®rbí¼¬âàº0ïJŠ›ˆÞëeÊ3eJ—(æÿ¯ô³‹°Ð @øNªì˜õP”ê*ÀÛf ~Â’B!ú` ˆ€þ€®Ð îFúöêºoêŸé£Gw.:ßPrßðæ•ið–—¬’Èoú‹(—ðÚQ ”³æèëˆþ蒡΂+pœu¡äìઠ« 1« ¨ÁÈ ¡,ú¡ü� bv÷1hÅî°áGV¢Nvî†v»¯Œ¨Ê,rÏZÅ0ø(ŽªGÂX`,<à ý-Àð-;èBbqôÛqk RZÏòý1æ›2Ùò&ÚäÈü    äà&`í€�ÿ�ÁaP¸d †Cb0È„:#‰Â£8¬n3‚Å¡üRI%HàÒ¨T:7–Éar™œÊ#"‡ÍàЙ„ês>‹Ìf²Ø8i6¤Pet™üâ‡N¦L¥2ꌂW=¥Õ©Ó;þ±žH«Òz»Y£Blñú-ª©)£?îTÛ%â÷{£Ê¥Ã�ä}UÀ`pX<& ‡ÄbqX¹+íúý#Nk¬ Xêõiõº_¥Ù­´IdþÙsžCë³ÚÅRccžë¨T©^ÂÉ&’ÜôÛºÍ Y·§ã8\:ŒWGºÔÉ"Üžâqf´jº9¸^ÚOž—á¨ñ=”~1ÝâBŸçð@ `œP0X3Ãïć&üD{™kø}xþÌï^Ð)J‚@ä3ÍÛ ¯5¯ô¢´Ë:Œê¼>ƒ5 SJ¬´iŒä:ðì(Ü'Pz€°8ê$’DMóö©CñKB†ÁêFè%« T±@B Í, [÷3®“4ÙBÐküyç±* «è~üÊŒ¥)Ê’«|gØ€G'Þv€  1Ž4f™"ÐØÆ)Ì%#MtÔÅ»r´ìŒÂLCŸH.¬A>EhêPü;Ô O:³“ÄI?(kdÏ20TB2ñŸ¯0`Ž Ø÷Nôê Cs›FÅn y<ÑJ9CÄôMS¤2ÈûÆé*ÐÇC°·DKZÒ¹NIi ÃôiV3k4 ºÕ{}9Õitá[.I…{cQSt.ëÏmÌ2­óEÂî)-ŒuZ®‰§UÅôe=v°.Ùâ|IB˜½']÷Íõ}ß—éð~KDy/L�v:Êu»h+I5—RLˆÅ‰tÇ5tÛÂ6dXÃØ-ãsmÏS\?Wan܆9ÌlåĵmЋÀ®ri“e·s™p\¸»kUXÙdŸÃm&‚œµ­Ð�~ŸçðFàA‚Omû*ÃØÛŠ¢Vl"«ê¤|®[xÎ=Žè¹I?ÒeFüÕ$âæ»]˜îÕX{[Za$'µ f߸êo~·4e8¢ï% ‚øÀIüÇò‹�Ç¡ù ?'qÖ³ -%ùŽ_ÑÝ4‘’Å\!7ù•#7Ö:ˆÔØxÅÛŸF½+k‘O¹E�ãU>7ÕE]Ûãi¶:Î#Í”†ØHŽSKnÄr6 ÚV­{…oiË~€`_¤"Sœ“ˆcf/5n‹#Ž–z•Äfu.ÿx0»môÿŽ�z¯åä17…™FwNà“fyVÙÛl‹e¬'Ø,·4oMá7´vÚ)-KÐG ÀâÂê…P®51Ð<‡€F‚wqê�QÄ¡—1â’´4=6Žü=(t‰ªm"íõj±´qC\kÉ´©ÂŒµ‘lAYÊ¡\¢gêlÖüD‚§ÂAHÌ»”[ÜhŽœ¤×|UG¨ú! ƒ@pEдÄðø”Z*eÁ"ƆÞ}•,‡­Ö1'UVôE…E±E©*‡ôíùš°ÆVêâ?‘$ÌÑ-¢ã—ÅF/.QR°ÊámVíys¶7´ÈÓ:Ë~lQ<Á5Ǽ%q@Ü ÇÉ1æAïãhja>#�`HHØvC[Äc<2dÿªg€ÞJ<ˆæ7AÔ`&ªP’íé¬I¸9fóÙ$,y‘îAàIa(-O3Ãèiˆq¢y@é:𫢇ŠAϬ ¤0A ù œø ž³­ZKQìõºLj›ê´ÁÇ÷ž2Îx±�ï«Wp…ì…x-ÜÈÉØSeS‰ Y+"vÐàä ¦ïò•(’´% !‚bOêSê2#pjÌá€(¥ ñÅf?;è<NœÌªQÕãYh5¨pîˆ(3¢ì“¢ZëF**Æû5)ô2R φ\‡ úŒ.(è «1ƒø4@:Ã[k\˜‘Ur«ik;VÄ¥5TÑk,L¯œHk•¢$×Õïg2l’Déf¤6Ä! {1Oú/³ºÅ_ª “¡dŠ“ÈzË8“­½wéì»XJƒ�6V&æ\ÙŽ0ª U*¬U§øÃÚ$@‹7 “WváIjüÚyV™:FÈK •c¤ „Ê· ŠeÓ¦*ô)¼Ê àÊèÓË4©š5®éwZžÅ¿Jšþ*¹ž«D<cø�` 0X‡�8ÜâªøgW’®tyY™ÝÀvû�1Ki$áH‹ñr‚Ò:#^¯Y„µ÷‹Si®Îo·®¶_Z„B—I 7"åc¬‘×è£R雪![›p¯Qøçðô¥) ‡.»æë£dˆÇô’wY‹`¢¥ö\yˆu4à­èÂdO%cì9Š©™U˕̠Úü\é_Š~½®ÖÁ†ókG´r xŠàÂÜâcÉÈ�Í5˜ZØÄùlªÒ|ÿs4ñƒn™zñߨCdŸ~pV˜ìÊë+wçtg?‘ 4Ù9¹ŽtûÈfƒ€#‚€b àØ!é=±Ò ÅãX)‰á @0œN­“Ù3;q-«pRVºGk¡K¸x™Éîâ*ˆìe²›ê"ÚÌmÕ s¬i€Šjçöî¼Ç † a„3ƒ“²4  «Â^•¿¨I»Ã{n!Ýä©´ïQ†½Úk¬ÖotÌŠ»[ª·k]óU©´SˆÒ5­)¬W·:�ãÄ,Ö£ Æyͦ j|¾±rŽ á“aì^Ïú‹ãLc†V$ðhÆ™#Œï\I `TbÜv´¦ªóÊvªˆeß”ÍÛ_8e_ s¯¯·,t¤‡Ðý€h1v;K]‰‚èEô3öhÞÔ yŸXÎXåš™œsZPó–‘/z+åZCY½±äí}ç¹ o.6~Ov¢ÑJd¶zåC€ ’MiÛ¹y½.(+£)·ã¦¸3³q»¿äéôéUç…ðj;§ÁøF�:‹1:(Pº­3ÎËf¥ºô³ŸNP½éXWϤ”­³{ZWÌm?ÏÄÜω¬ÿUµ3euÇ?kæT…¼¦¼ÛÇyQƒf+á‘@@Äô)ÐÎêüΆÂ%ƒ°½‚ê,ïÀ6…|CºžZ“ë>WÉJ¼GšÍÍdë¯:ú.ÂŒ‹LÝïœÃ®»NnïãBŠNhxå‹€ô ¼1"¨„aì œ ¯|øûpx!€öÁ@AÏ–+ÖMæÐN”û¤þáËtü,ȃD¦ön,½í6Šp>ê¨Ò¢n@ÄÔõ‹B» ^Ê£© Œ<¿ƒë>—J•麠"ÕP:o –‹`¶¬�þNØaz áÏ™ �! $¬Ýìz€ªx±ÌJ¡PÞ®.9¤"A)- ŒÎׯo +"¶Q®È2é¯NÌgI ím$Ö©É,Pûc|Iê ž À¾€‹‘pø!ü.@ØÁ(¡¦`�ɦWípä‚44J'îL´DhÇh³ÇZ¶Ð DÀ¥Ϧ×*ΨϠ9J4–®¦õȰ9ð°hn ±ëÒõ Èœ$gO¸üQБìòôPc å "æž¡î ž `´+—1 €Á9�p²]m¾ëïFe/ÙG=±K"R,¬ ‘lì¼Æºd jkòÇ Ü’p¨ýÆ# ä¬ÛöÍ2*0†¸þ°l ñkò &­Žáö@€àæÁä` ˆ'¸PJ ?´­‹FBÖÐGxÔ®—k¼Á ¿róN2Uï/)¬W%±]ã",Z8m<¿ãœ—p^~Í ¤B°!î ÀTA6 €ç& ! äPa§¡ Ló/±* +Ç-ìÕ p¯²Ä\1”ËD5ªäÕ¤ÜòrYލˆ©n&éRÆÀyðÖÄdñ rÖÇ®tëm\dæh|Víu)m ²d€.ÓpÈÒp@„ ä¡â#,ma$D¤Þl½ó^v3JÅpPá)y3M"ð¢·s­§ÿ�a Ð=�QXÜëÌ6‚ ¡öà> 0€Ê �Ð.ÀD ¼Êɰ”åµ 0ÀFæë/¯6Zê^C„Ì¡ìAÎÆDqÑ#‹;¬úõªgÄv¤1IJÎXnê„’²Äù¯rʳõq¾µ ^3ì/½ ,E…!Ï¥CäZ„qb  Ð àg6ósFë˜!Æàªa�‡�-22ôÐW,¬ÑêâLîö®É0˜ïÐ\PÐá2'î I CÒ³5žü¦Xö”(N%•L$Hê'§D0ªœtÙi(ã`Áö ,€ `®`Z�EG�DÀ¸ÔoTõqâêrJQìfÔîÊŠë ¨MmÌü¦„ñEÆ»lKJ Gu?ÊÉHÑLáô\Ö"¥R(£C¦5JÄ\ki{'@ô¯œÛJ-FA ”f`Gxª!~¡ž !L@�óâ6îüÆ4O<RTÍ„nŒ3XàäWL¨ã vÑ2mbৈÔÏ“³0‘V:rG0ʽR”°.¥a<Q¨GEŽYmW h–7äq ˆ¢–gfu’÷L¯a±#Â_'ð !H �ø€/OµzA sˆ²2É"HóR“$±äÄÇnNi,â¤IÃ/mjÏs»-2Ìɵ9I·;“—“½$'“t¥‘6&¥n TiWu{giæ|A&¡\š BÐ éâËbé2µØðµ MÆ…PÖ£$ðÊ—6¦Ðθ£uNc^‹uÁ^Hš qâÞm0»§é 4ÔåP9оêÃVðÏš¥q1æuô©/®¬ýöä"h H Àú”ùg‚ AŸ±*Þ41EÚ‹ª>.‰¿‚(µCáC"9lIQ08‹1®zM €0B·+N(‚²X§P fw5T-<b+F `Ô Àf  w¨ølÁFÁpš -6e)qÍ#Ó'UqJ-° ̃Œo}1°ÐE’§)’Weïªë¨z5Õt/m{q6l¨÷ VGAnhþ4·e·¹I%ΰ$ÃÈíð@Fa€È@,}pá 6ª²·�·Ä‘ÄTG0M*PŽýUµDvX+WUSk~ïUÉT´ÊD.ï¤~a þàÅfZb;$ÆLìýmÌ5In‰ïm1(×&Ä")‚šZÏ?rW»mÚ4/câ1b @Ö Àew˜‰'aü –�èáÔ��€ ‡óWm6W}©‡ö#‡r+US8Ò1+´ÚþsµMrÈ&zXüôÓØS4µ;)÷ç:Ge#dËbPôò@ €h Àîàº�à�¸•€@°¿ªr·Fs+$g­f„yÒ´X ³nuèÀ5¤\ ÀІ³÷’˜|åWf7c´¼7<õ=Ž8Z³þð‰HTU?*L‚˜LF§BÜ‘I|¸Çijó6 »_v æÏ$ ¬‚ ” ˜‰šeòÁÜÀ’�ç‰÷7¦5B<C2Lpv= Œá)/Úžu›Hrοgõ@Ìa;°¶Î;cxä8ð–6rŽD‰Zñ’5Rî)òôí!÷a�F@ˆ ÀvÀ]š‚a åI5Õ*{+.~È=ŸR›iÒÔ59φÊ1‹µ)>ǧcT©d·_lQðÏP!9’ÜínV㕇x&Ö¯TƒbÑ»Yz…YQTûAþAòÁ 9 Mÿ¢Z NÁ`Á‚ áb �ÀmUéA*U“5[3 ,ëdøyb”E”êK3wE¸NÄú¹|ym€éäô¶>® ;—ôÐ)ùq Öñ?„;n™‡Œ¥k‰†�¡ö!�SàÈ`ž Tà�‹­ª"a Å[RíSn¡\¸Ñ}©92ëpïrp:[î™D8gqí«Ug#¬>ïºí+‡GZ“·¦V.d7K¬¯O’#L^aæ œ¹ Û1¹d¤ár@Áj «u«!—*‚q¤›Näªs¡'o‡ÇêhËѶåItd0Öù)4“ŒñÙ#r:Ý–u²ÔT[ Vf¤›!X˜íAüƒ.� :à.@* ¸�’�: ²Û˜# F€ªÅN+QY÷ƒ,ôêø¾aš >xù˜1¹:åû{X¾I<´˜Å[Å»ƒ 7à”9jògîwYë†Ô„B¡JãHð“Cuñ†@ ¡ò  P€f`S¼¨8G¾ HX¤à ŠÃ¾ñæ@nزëÅÔQkññÌÕ¹rDó™€5#ÈÛ–0ä3ŠÄÍ»1+.Usù0ÀëüTñ¦gñ—)ïÉ"` 9� &ÀB 4 :Àh`U=õÊ¢eÂà©‚L?S„_ÔÓƒÓ÷ŽºßmYùoZц@.áè�˜ ¶öuÔy×½}×ãÞÞÀ@Üí!ø�hô^<¶gxNou”z1:a5¶T0ûR @�è`¼ÂÖQ¥÷ÂÍúsµÒ'M|T&ÀSÁxª2à‡]€0 F §6²Qês’Ú|¶ööX<b¢B FÀÔ `g¹]ãá~á¾"!6¡^xѺî}`ÛR¾ìÓÁkÛ §k2 y¿¾B°!ì @TA* `ñáþeª�HÀ¢ÀZ‡‘É!Q±›‡C§X‚ Ùáæ~‘é>•‰@Îa A°==Åëš¾üRú•+‡D#”s&TòÜ àP0 €÷é~Íg`Hà ­÷ã7:‘è^ˆ @d þÏî¾íîï†áð@Œ@Òì€a¶?ßcõëT‰ç<YŒž­¬4 Qáèaì ÀOì@˜žñó1qí>éã­QKµ3TrýÚƒž„~à ¾åó¿5õ¿]õéü¸ Â ÿ«  ý+)VUÚlÚÎ8ߘXÓQ´JÝr¬D¾T ÿ*à˜¿aú.~!èûáŶÛaùw:½JFäOìT^×ú_ÍüÿÐS±vàÀ�öÁ¾J°7®="ª-Ç"Ws �þ�A�h.‚Â!PØ<%„ÅaÑxdB‰€^¯§±<NAK’ϱ‰T®Y-—Kæ”Îi5›Mç™Ôîy=ŸM‰lJ†Ñgˆe*#¢Fà”Ùe*ŸªE"thÐäùz!ȆãÄ¡?³Yí›U®Ùm·[î•Îéu»Z)Hg~¿ß   ï…ŸÕãU¨´.¥«A£˜¸]Hˆd"Qç£íîOI‰gì6I¥Óiõq"H™ŒÈÆhºüMc'µÊÆë(®ê;ދֱ¹¦ïiZ®×Èfû—SÍçsú—O©Õë\“¬õií~‘Á•n¾â·>ÞNð`+‰KŠìx~M¾K€ô‘IIrV‹Çýÿ?ðú’BZVÄ*ïJà7l¤õ6¯z:¨¸0ƒÖø·Jšö=0Êx«Ä8„å"ŒDñDSEqdZ›géö$”ã9¶w@8½Ì“˪°\€ó¼Ok1p¢jÈ*-ì|á+p´#Hˆ#_%ÇcrÙ¡) ì'ïÈ’?ÅÓ$Ë3Là�JI‰KKÃɲŒ§ Ë :Ý#Š‘þ+§© !ŽaÍ% CPôE2˜Ç!ž,•Ø �¬$-NèÄÝ:ÉHtƒ'¾rª "­@ŠOQ䶦%• +K)ÈŠ=WÁï¥i;=,­BÍžâpM0UƒaXkxJJ /’[!¦Zef¥p̳8# âºyÂã@ŠV%»o[÷Ãq8Gø¼XŽÅùÀd`(DzJ_gÎvƒãLIÉÜgÕ »#yÂH¤)KHÅv'³ qáxeÄ¢B=,©¯„± Ù/l’ŽI’BU Ùµ" +½Ï^B8ä0ƒmž—eù†c™4f!Æf E€ä�€<UÇó­ù9U”Þ7 ¦wý àwÂÓ*u삾ÉL!’ÂF™ëzäPÂ=Q)é8õ6ɽJ6àUz¯~¶Y-ÞƒÖ•-§’ §‰ôze6Ð_–ë¼Áp|�Ø\%q²\ 0‚'wŽ€˜ÓK6—ÀúŒ"—iúmkK·À¨'„¢&°ApGRÓkâ6‘©s¶¦²¡ÏéºÒ×øÌ"òŽ'«Šñ ŽcýÕxþG“åEáÞpŠEhÒ{3€ùw§/ÌÞ½†ÇOó*aê}ËÁ.®#~ÇÓõ'1."û1>Ó´`œŒ‡Î�6± xx©õ¿ø�`æ áxY‡1~8F8 q©,Ë«¶ýŸ¢T.ȵ9Bf•ÈŒj ™Q”òÜÒ;~dUñ%àHé_<…´…‚a0’@&P…'&˜å’Ù0>ÔØ¶.¦úb‡GŠÿ¡tK‰‘5õŒaÊ3‚ȱ ¬ìB^ä•2ž{n½’WîìR‚HÐÚª¨r§+*¸ù;vêJ˜Ò8UÝ·2@øÂt)ÁBDé�òá€C4­³Ã”èÑ LCoq0‚à« d”“’Œ4}áøŨrcŒe�  šzW ¾CBªãÉ´§^îE§Ad‰*Íó¹6†n:PŒ!d¬»p�œL„&ÄpaÑuY¦ZÃG4÷ã;ÀZàü:Èù#/&”Óš‰RQ^ø„àB7Àœ&4àc1uUEþå ³Gl’fKã Âh$¢X"Ë©«>W&!¢½åS"Ëg+m¥¨B(zG_œ^ Ê„?t‡Ö¸>™à¸+Oª1FhÑÍÔu1`Ç8ô@;BïIr«b®>;Èâç ÊMŸäÑÌ$W_MݵYG .Ï9êD5¨Š(  €ï£Lïi²µi–Å÷< ŒCˆ ø;[Eê-[«•t´áˆ#ÐÑ€D�ú ÷fT\sqz€SZ_Ô=/*…"yOA,=^¯ˆ¸‰ ~“§]jfäz±V«í‹±–4†Œ±Ð4д j¸ÂBmBìɉZIâ8ˆ5JLcq´Œõ«iI\—Åš)ní8§Tãh Ë®$ªy0^kÝŽ·‡ô‰°|Àc„Ëw‰ÚU[ZWM)äŠO-¸˜¿{bhW··VëQÒ=‡X[²ƒpx ðtjZRª¦»&6ÇÕll«Í‘ª UÖ‹ŽéI›Aqn3´Ž÷ÞѲ2?¬K¡:Ü Pˆ".¾ :�œNÛͧ46¦ìNsj¨!Aèx ²ê`ÌAˆbhrøS q_Y€OT-º6f@è#eçsøÑ9JH6ÐØÅÌvgD)Ö)D1ꪎ8FÛ>0šÂ8•x+dó ƒ°…,6 7:bÈš Œ  €ü%‰³ƒ"èœ;‡ò†kÍY ÑrðxW‰[ûÕr æzlÓ„ú!vÙz§Ow÷¢ÙL—o¡*fJ°œ',–ÄNmÒ…À‰Ðy+¡ûB*y cZžL¥Hêµ\åˆñr’”¥+1­¼ÄPyš`XÒº×[2ñ¾<GKál}áô¥ÝÄEљ䇦=rHH¡ Ië} OÁ@žy®Lµq¡óܘsžƉʆ-:ï" äyPw¬‚ÎÑÝ›µD«´EÀjC¼n€€5,4ˆ;/Ó èoS¼gô3 iÊןkm„9ä‡e=˜„Vîâ„Ø ðu± ¼!àÕºÕJÿ…(v Bety@xƒ+Ý|W—rôP�z#hXZ)ÃÝ^ôúälm 1b{jjºï³ß€/Y-nŠÊ”#ò‹™mÄ£óe""ù‡[%œ\š‰Õ¿Ë>|"UPB¾UË:çkí‡<>Œq '† ¥ÀôGpÐ]* Xœ\±Þc¦‚Å»n2f ËA;þŠ|ƆÐx+BT!èø¡²L²JßÊA$J„µÛ}(V¥Œ‚ìaÊ6Ñ‹^Kf뱯"Y8d°ÁÚ½»÷…ÌYánEðt€˜+0زÔÁ©r+/ëòdóÏŒ½“ŒÉlhÇéúŠ O·V},ÁzEKW3-ÒØÑþWÝ”ÒØ&ùß?è}ï[ô€ãÉ}{“ãþVI‡8ü�?ãĉk;8=ƒÓùÀ\ ø\^p`¸…€!ë>aX›A‹¶Ó¾º,;Û/ëo½bD˜Ò‡¥Bô8TšS†*‹†/ðòˆ€Í‡«G‚HJ�F@k—½ ©‰%+æ1cÔ±Ù¸¯Ñ "´¼À̳ËÌ b–2Ȧ"“Ð>@DAÔ-BØ—…Èp…è6†�:ˆ �(¢¼ ˜“ĻҜ¾kÇ¿~¡Ú,·#>¼s º|�²ù+' “9ƽ¤ÁLÁ¬„l.7p>Âæ|$›2ÁªT"*™>‹§;ùOCÄ"Ss(è0@LDÅ,S@|† 1“Ô36€<1| ˜âC²½ ´9콊4šcþ2î ’y DE3h@Qª·ÅËךt ÃD‹CW„ ¸ÜcFÜ…Èqà6ÅQ=C(EsüÄs‹kì$9Š,ë/8ÑŠ˜¤iÆ‘¢Æyi£ª„#´ûçˆ+Í‚la „tn5°…E“1A‚šÆ[¥ºçF“é’£È8ðƒ@,Pƒ�ÆÔƒÈû­Àx]ƒpa¢R)0<ˆù0ªÍ¥3AGTIƒÿªƒlÇB14ІÈ‚T‚H43h……¢Ðç6»×H¼�Äs²‡Ó“ÌQH.Iü©7doG�`ƒœ2�0IJ/Gœ>Š& U¼±µ†D޳ÔL¼É±œÃq˜ì¸A ¡ÇYQGò3¾ë0¢ûÇÁ˜&žøGÊ›5ÊÈ‹O²§H‚ø<<)™ŒñŽ:rX‡}¹8ôŽJŒÁLÛ5…€o˜<8> ür�)ß<‹;¼»MJT9F‚ͿܜCì8ÅÛ…+Jº1Í”A²ºùøÇ2ã÷¾IØJðHLãPRœ•Cظ»$×JB›"ì* üÌÎDí.¸>†H@…�l:³¨�€½˜pzw?ô‡#(ÅL\ŒLT¹©¢cÆŒ}Ë‚ÏMk¼\GÄêÑϜ˙»­\K!) Kä¿N,ãÎÛHR‰íI¬5M»ýŠ×ÊH¥¼Ë‚¶ôÚ,μìÐe*às‡°tHg`WèX>(Œ¨EÁÎz§ T «dz£ ˸ü£ Òö:$MÄ—ÁX¶P@%ÐU®°…-%‰ÌPœ£¤K€<QLE¢×Ç{ù·-3m³Q�í%Ó*}àx†è6†8v˜�;ɼès„:c"ÅŒ¦U¹QMª©C\ÝK“Ó³"dA ”Ê× “1#ª‡¨&$èHÓ2ÞRh4_Hj/I-'YWMD=64ÉQàóÃøÇ²,ÊA¸@1ÔµY$ [‡\ƒ c¸|à{¯ wS¸ÇÉ‹ÆR3B¹åBwD�–¼ÝHÔJÕšÅPS|é‚.SêC[?=”œVá“ÊeV„ XS%hW*„@gPO†ÈPÇJ"½!Ä¥NHµ!Q”f¹ lP¥>V‡žÕD¯Ä=WãpU- I˜÷V`Ô˜IW2¾V•j ‚ k˾Y9Œm<¸[ÊH‚P©·Ø(ôÕXAµW@/Xe“]4à@†`A†s€  ëˤ³Y½n±ä¢ Œ¼CQKÑâýÂÃ9ÝD4[OØ´7ϵbVÅCñ¥H‚`Jå…Ù:­PSspט¸ÖH»Â¥×’Zµ²O†ÀP€iˆx‡ØxÙ‰Ç-™‰”ÓÄÐÛNÙÝ{ ´è ̉ɴGMo;ëð±øzàzh‚hIÚ¥²ª%¬j¸CÍ!¡å ô–Röˆ]°¸A�Ù-ÆÝ ††ðyðJ J…HnIÆ�iê€#ë¯y¨¼©Â=m(B.² Ü/L #T‹ÎiŸ)êá¿eQDÔ´Ë] ØÉ­ÊX5 D€€ø&\XIÝŒÜ|]XÅNGÑ Ü¹ï•ÌÄ LU°µq8/ÞÅöõ³„øH¶Ðx`ðÃ¥|ßÍ¢WÅîO²™WìÜ•b¦CTl\ÛµkÁDL¸M;H©×(`ÍÜ=ê\XJ_j|ˆ�©P,�A`Ð` ÿ†CaÐød$ ƒ€a/ø¤>%Ä#P¨tv=#ƒ¼Ÿo$Õ`—ä’ù„Æe3šMfÓyÄæu;žOgÓú…C¢QhÓ¦ÛŶ‚f ˜.f( �€‘€ŠŠ�c0XÝz'ŽÇ,–7ýzÅ]†BâÖØœJIi…\¢ó«¤v/i‹Bí7ëÊA]ÁAëøL&×"ÅWàלujÁpÄcò×i•b³›EdGãÔš&$ÇiJ>§U«ÖkuÚý†ÆF*TŠìU›^c¬Ù«x v{y[áð¬Û{,Fë’c-™i{Éõ( å’í—gµÛîw{Ýÿ‡Å°s=œÉ–²ebáX</`hÅ[x9>…1ºÊáÿ Û"‘¹èrÙ® â·0¨| ΫÐRüú®oü›Àpl ÿ¹ˆü "póâ@0"Hzm>&´ÍCÇÅÑ|aÆ  Vâ!±nå1ï»9Á¬Ci“%C­Ä?"G‰ôx©/¥±”©*ÊÒ¼±,ËRÙì~ÅY¼U“¦Á8ofð€Ñ 8ü¤r*bÆHi¬€ÞAi´ò™Î´5-·RDõ2g¬N&E$˜uPT}!HÒNÓh?r ¿;Ns¼ÆÓ­ë&Í? Ë ²ÓÐÀçÎ2°·ºN¡/„Ã'ZÖÕ½q\×Miˆtd9 CGi¤€€H€èÅWQ¦Ì-›MаsŠÓ‘ì(¸Ô ô3Û22!V°L‹ >‘ëïÓPM RÀö…l8Wd÷NW”Š­Q­D­w€àXl•AM®OK½Áa¸vzÐÎ<ƒUWŠÆI’t¡YV˜&AäYHïW¦8lf!Òa¬�@Z–£"Zù-­jçÉêЉ€õý€gz‰¢¨86‘ÓYªx“%¤£YèÚž©ªêÕÆO”“YaˆçíŒ\ھɲ¢íù QšͶíÙ&‘mÏpÄyˆÁ‹eáyÇ/í§�G‘´¹?Ø}âÕähBãÛÆñÜzh}ŸÇÙ’uÖ¹¯l�&ÅÂrþq´gúAÒôÒ¨VU…ÇNpú…d0õ½ŸiÚ×WÙZp…1¸RÌÆéø–0±öÞ>ÑmWÿ‘æùÊ7SÕùè_¨ö^Ÿ±ìûJ9¼y¥Q¼T—ç1|kž&¸�à0xÞßá-y]'ãúþÈg£ûz½ïþÿÏÁFN*F𨣰fáà� �À?ø$–›k‚p]ç?—êþÁ3׃~6d̘_½¢ôm°›�"É} Bd‹à«Ì†pÝÇÁ§ã ô8‡ÐýIÂ1„9Æ&£Hw Þ>G| ÐB Eà [dRŠÍ?yâä];‘ " ÑÍÇhÑèx�@ VP†y-#æ$ò"¤pŽÌ†,½¸·ãä}&Íxè8F aÂñaÆhÑ£d/†1ù+¡ò?‡Êl�r0À=ˆë$$â“/j=ÉÙEÇpùФlŒQÐ1DƒÔqÊQÝ#!tn‘ò,‘ú>x�Ø ƒq46Ã0/fMˉ”•ˆ€ Õb€ „BaP¸d6ˆDbQ8CÉôòA…ñ1†)HdR9$–M'”JeR¹d¶]/˜DßOçÓaà×g»ísA”êd¹ÞÎwëýø©�@1¨TjU:¤•øþ«€Ë‚Jé¯741 Àð(>«g´B^¯Ç©0<MIŽ’¶›¥Öíw¼^oU÷—E£¨ä{‡ÄbqX¼f6U3š¼ çc5¤íh´ÝÍ'ÙÆø~> À€"˜ÇjuZ¸M]ùE~£‡ h|œ§n©Žì£¨8 ÖpmvÛ}ÆçÁäry\¾dûÍÖ`£1¸ïC­×ìv{Q÷ÿu¾ôoµÝíf›½§âk9žÎgÑÄø~è  `(�€?=¿çöH~(̓dG‰ ðžƒ7 Óxß8òðá­Ë‚åB¬,í9ðºòé0ެ5Ä D…Géôlž&ÉÄz&©ÞjG¹ÔjEçIîtÑà~ŸÇè Çêrü?Q ÇúhšáÉ#‰ÈLÝ·­üލÂ,'+Ë’ì¼”C2ú¡:Œ4Å3ÍJVnžFáì~Ç X›ì’uÌLpfùösùö€R�´êh5QŽÉÞ}ã N2!™†Jp\­F¤ÒÌ$ãÓ• EÌ5M20µ5UU»fáämÏGËò�˜ÇQŒzG›†efJ �φùî~Øqìþ}� ’¤Ù4;ïYÕ–‹”xŸGˆ´ d8jDÑTÃs*A–’'O8×Ís±Õ-ЈÕõ×wÈæüú @ËH$RIýWj)üý¡‘‰Ög¦h�µBlkNGN‚Ÿóa»XÙ­ï$Ÿöh ¤ Ò›h^ YjZÖÁYLʰnD„\’Þ_™æ‰}Õš ÷lÍœgŒAØ|†=ložFôVqG‘´üa ºy›ÀÀ ` ‘@å\n6R4/‹õ€ À&ƒ©àÿ_ãÖJ ¯g»‹S’ZâÞO”ȨŽYpç™A¹p ›ç¹×ên€c&+pSÎGÔs5Í>Ìm{[æ¤ë7ÒEYã`6òˆîGLë_L¶‹›¿J‡ïtÞq¿tý®åÂgœ7mÝ£çYðu”†ÙDUÅIÑô NÞy›“\Ø !´@†„_½[ôÖ]šöžo½u÷Çuïûì,k¥IºSœ§±Ê€`L‡ò~™åÌ‘a¹'ƒâ‚Pì^Û4{¯Ö*7ÂÍ_tÌgš hì€)«?8ׂ‚_B4ˆðœ‰\�g° BT¿Ù¤ „ÌÑ} 1¸(„(Ïhð~€a\9UŠÌørš�ßÈ À}’ØDßKb\°ê&"(PÌáTM\ê8ŒpÞ,‡°`6ˆ¥ÔàócÌ€ðPþD`/`À˜ÄwgRÓŒÌíÄö_c¢£PAÀc†è°,@pÏ^<ÈT@=GØõ@À¸‰@:�ñRÏr8)ù %΄vdQâL&tJ>CÉ"Äp �‹4•H]}#‘à(`:pX©É8%b\«—K¤¸y9.Ò¸™â\@Œá�€8˜,íÐ@g�°9,ÒÓ-™œ$™“l¼É¦C/æâƒ a…ñ€@8�ëvpÎÓV›Ç´§â%ó6|ÚÓì©Íåá8'áÚŒCÌ)‹° 7š‚÷ 4,¿¯©à #ZM@„‚ÿ>ú¡”l•Oåß@(áÍSN 7 ` !¥EIA5´ÂØ}AýИŠ0ÈhÕ+§D~.ºANÍRòá8\„¶³ªI%cÜ~zP¥DCˆ¦2›¯ sRªÁ §«¢ŸÕ“`zchP€ÙW«A6 0f$p ¢¦®ª®ú¯ZjÍ[\õv¼‘Þ>GxFá¹zûaÈULçÐ) ÌXm äWU×]ìE;¯Kš¾Y’è'ÆÐžÁüEË=aë\‰@PÓ ü À 4:YtY‹OHlÚâ³¶Ü©9Ê0ƒ½Âñª€»yVlU“ `œ2Y�ÝdÎÅ´\öÚãлr´­ÝÕ&È} ”-Â8ì#²Ã]ª8k§…°aò™Þ£ýt—5ԼӺ뭳|É`È#/ ºÇø›nfDP&À˜rÁÐ*«t¥ð\WËM»ê«/¾%°o ©B[æ™gÀ|(°ÀÈ@€Ä>ðZXSK¼.ªðÎ5$‘T7‹Â+î.:“»` ƒ, „”¹Œ–Ž4ÈRwª¬s”É�j [ŽAmrÄM_CÐ~L%€^ @¨6a»”fRÌ2*ªl¯œÈk¡¤[1k˜3ÄÀƒìzZPKÂØ\¡xIœ^rÐ1ƒ:ª<ï¤ÈvzÏ™û@i‡vægƒ— dÀTmX3TÚAUi-=4ª¢0SÐA†�Lµy,ÓY÷?€K®]2ÇÀ�à2Ã,Ñ�X.-X©ŽI¡(K±1°1´½pFBƒQ A(_Û¤°†ar9ÆÜl‰Ì±bf>Á°áÔm–W†ÏTyz�JD�3[®UT \»™f«éE Њ,#('à„˜>ŒÀ÷ … �€3‰®@>ǵŒ¢�Â!… ƒçS/ßJЉ€x&¶Jã²\‹ tï‡]Hfkéf‹`.@ø üÌ‘‹1Â,CXÆ X‡¢*@œ¾(ámîà Üaäe‡rÉ*_Ý8ÏñÿtØè0nã€WZ^8Í(ú@8аˆ+@h½˜ Î/àVNBwÄBlxõc`cu0PAÈNŸ^ь߄8fŽg¸‰Ð~'Áðþ0 ¬%Ä0Ðç½³IáèAø ‹Òr;Â@¶ÃÄ}uíPÑÄ€Th>‚0àä ù7˜z‡(Há×NÆBÖ}`» "ø�p!ð"hËc(, Эá0 "áè‡ÀÐ COà"i$~†rÄ/G(¼‚_ù§2©ì_ÀJÀJ�4)` ’'ê߀¬€¦â‹eìH‘aJ!N¡Oú…i਀˜!æ*]ç< ¡bÁf Ð:"gˆ æ�âžP^ � ƒAá˜T. ý¿^¯Ç¨ †ˆD€é$$‚€€¨dŽI%“Iå™T¬æÈ8«[êÀ`+›Mç™#Íôò0Š h’ uE£QéšU.™M§Sê7ýMÎ@' °pQ¯WàÏgãØ„!¦G©°`·[î”1Öøu”—d÷SÝÔnx …•ÔßÏwëÝýS ‚B¤ é2:H…ÇXlÖn¶q­M,C84 Îi䑪ˆ€¤†Ú–ÏiµÛlªoöÛŶR^߯çèÛéÞ/·’Xv–&‡‰ü~—O©%=³JFÒ€õ|rù>OçØ, lñáØ`v†<šM‰íx'›§‘º€`;ô¹éðAqP!•`0@Ф+ Bêcr&XîS…+HÓC ||à`@XˆÅšfšÄ‘„b¥§yªÿ-`ˆãFQäz¯Ÿàþ}½Q3ØÁazÊ!ˆ�Ђá<})$dQ¢D’f©"»Òš”xŸGˆö£@T4˳DÓ54ðÒ�¢ir% Gûˆ¶Íi<€Ÿ'éòL„؈ ˆ“Å 5‘f‰IšÄˆ«´5#4ÏR÷>+ð ¡t ‡l–‚ÁÅ%HœÇ±Ì&"Iì}ž "ÿS$§Ñú}`@&Z‰À$‚UƒaXi$Ú‚&¡!*‘�:Xˆ!è}ž‚(8#aé;h[p1à|žX’½@0 Û—CdÆŸÏIõZŸW( Sà.PB(d iEtÏ¡ªI‘F‘G;÷úy'¤hB‹á0Á„âx¤¥c lQî4c1„s˜ ˜=XO1ó#B1h€þ+—6…¹Æ[ ÆÉGY~r¤Ÿ‡ùùJŸSH°eF†€ k}_‰uBÝ¢Ù|,™‡a—#Z���žgÙæƒB@”:Ìw§lûCm‹ §êq EРxGx9 ‡ úJDºÊ!m<# ,Di¤EÅÜ/Ýt­Ú� # Å�† ˆb2! xMÇXF™Üi‹eø±Ér–€~EÅLÁ'GÛvë†Öƒš'i 1˜CæxnÛă4ORùà:…ÃÀÞÇ¢° &¾^œ¥Ú·„zVõ×]¨E•ƒá°*"â@ƒ¿¹n&`Üc €€k:Í u뇙: ðŒ;»¢ïóÀxO¼£öÂÇia¬>&8 JHò9Ll3 AÐ0ÊÚƒHÁÈ¥ÚŽˆ€(€ V¨F€D@ _Ä%])ée‰Vw@t;K«¬Õ<°ìXn‡‘6'˜Bƈîa„vq؈ zDÀ$�Ú Ãxfž'Ærnÿ@Ä £sŒ¶â$h3oxÆö¥\™í� ,Gæ– À¨4¤%¼c£g#DC‰Q¬$Ús„ÃüèòÃÄJ ².OCÈ¢HÝ(Ò*¢�cŽ¡d¡à€d‘ DK‚“òÔ“ŸÁ,5„¨’Y2%LËd2]s{u`À_` P™pv€@ŽÑœLl"ˆ†ˆPÇØö…Ôª&‰*&M‰Ðôe %AÜC  ‡Å*ë‘2¬Ó±“‚?x !䇰0Äé „ŒRÁH#Ƙ\gtÏiÓ™ä–<Ãè¸öÀX@( ‚p Á€3  €@&‹AÄ,ÃØË0py5sÀž‡ª¯  ˆpl"WÅ.¨Ž6u’¨Ü0ðÙƒtŒCsJÀD×0#Ü~À�?˜„ –‚eE¬„Œo1¾&F¸˜cxT$��¿`Ìvd�®ÓpËaÆ�P¬ÌÁ«I@/P{TH¥T²²Î²<FÀƒ  4q"M©üOE”"ÀbØ"±ö•Trr0øŸ©ƒAÞ¼'&�Ëð…e!u³Áø¥íŒÍaˆ0’‚U´×‚‹ÑÌ/*X#¨d)T"—ÄReNÜe/íp\ ¿Å×3A’F´t ¯T\+Gã'¡p8ެ­Pe¶TE)p]h™ü€.mðcsJ÷`v)j @Þcy ®/�Ü#Üt䂺ÉETDTt X€ˆ(7 á¾¿œŠH`̓0^=ˆÜ0Fàòj\ã�»EëíÔ)Íï µ*ÞÈJ8 �R°‡«‚t«`Òo€³r§Ú.‹À(V@îŽ*Ë„šø3!@6„ú4¯ñ]W]V§™ Lj °˹Õt`¢ ;ÇÈïãÀk`Á¼5ÇxÖ—ù�õZ:@ ϰ@4+´‘&·Hvvö@öö¸h7Ð�9ôâ&ÆåDÆð.µIí!3æÅ‚©–@ÓÕ|€`È•ÖЯ2t®çIëòŸdFÈÀÂøiá¤5xÔÓc™J×l„BÂz"€W ZÁh/@¼ƒ5]®ÀÜ‹<n]С‘1ÈÔzÁé_ ‹{àf ^&é߇V«}”4Ñ2_2œco" §äßG°epWT·ïTÛŸŠq~1Æx×ã’‹qÞAÈy#䜕YñþMÊyW+圷—^QËù—3æœ×›s}dTùÇ;çœ÷Ÿsþ9ÌzCè£txKкGKé7§t÷»Îº‡SêW«ut}ÒºÇ[ëw¯uò—Ö»cì—³v>ÅÙûWkí·ŸöžÝÜ{—sîœw¸w^ñÞ{×{Àýß¾wÿà|OïÞÃxâm?Rñ^7Çxÿ!âò_‘òžWËytÕá|Ç›óžwÏ;Ÿçý£ôž—Ðy?Mê}W«õ„§Ízßaì}—ˆõþÏÛ{qÜ}¯¹÷ž÷ßuwïþÃøàü_‘ò~W,øÿ/ç|ÿ¡ÅþoÑúŸWëb¯§õþ×Ûû“¤€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*ËRì½/Ì ¹0Ì“,Í3¤ÓÑ5Í“l܆MS|å9Î’üã:ÏÌõ$NóÜý?Ð|û@Д- Pt=EÑ FÒ$öQô-KÓ­+LÓ”í<àStýEQÔ]CRÕMTô8u]]WÖ …OXÖ•­l¸Öu½u]×[^Ø „º×6cÙ Å‹dÙ–mœýWö}¥iÚŠ—jÛÍ´ƒZöݽoÙ¶íÁqÜ•íÅrÝM_sÝWmÝOÝ—}åyÒ7é{ß í|ß—ìç}ߨ2à ƒÊø.…á’N†âŒw‡âX®-☾5Æ6Ž9äÎ3ä™, ‘äÙNTüe^]—Ò˜öa™æ‘6[šç˧›çYî|ãç™þ…¡ÈÙ–‰£é®ƒ¤éškI¥éÚŽ¥V'šž­«»Z†±­ëŒµ®ì ‰£l[.ÍYl›>ÕµéûNÙ·î¦ã¹îŒÎ¿ºïÌÅ·o[îü»nûÿÁµ›ç Ãñ €?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQ���������������������˜�������������������ž�����²�������������������U�������Î�����ê�����ò�������(�������1�����ú=�������S�����ž ‡s��� H�ž�KN���icon_256x256@2x.png���û¸��þÆ�(°�]¿�†Ù�™@�œN����)ê��5��)��g�����`���� ������ ��tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*ËRì½/Ì ¹0Ì“,Í3¤ÓÑ5Í“l܆MS|å9Î’üã:ÏÌõ$NóÜý?Ð|û@Д- Pt=EÑ FÒ$öQô-KÓ­+LÓ”í<àStýEQÔ]CRÕMTô8u]]WÖ …OXÖ•­l¸Öu½u]×[^Ø „º×6cÙ Å‹dÙ–mœýWö}¥iÚŠ—jÛÍ´ƒZöݽoÙ¶íÁqÜ•íÅrÝM_sÝWmÝOÝ—}åyÒ7é{ß í|ß—ìç}ߨ2à ƒÊø.…á’N†âŒw‡âX®-☾5Æ6Ž9äÎ3ä™, ‘äÙNTüe^]—Ò˜öa™æ‘6[šç˧›çYî|ãç™þ…¡ÈÙ–‰£é®ƒ¤éškI¥éÚŽ¥V'šž­«»Z†±­ëŒµ®ì ‰£l[.ÍYl›>ÕµéûNÙ·î¦ã¹îŒÎ¿ºïÌÅ·o[îü»nûÿÁµ›ç Ãñ €?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*¤‡±î‰ŸÀ�ËLT½2ÍJÊ*t¸‹gX�ggùz`€Æ˜Æbxž� €�<€!HH�¡À…À�R€ 8 5,¦¹°œ'�^˜€Ç=˜Æ]��PTÅUU©hQ”tØ�Çè� ‚`‚��h�ApÍ©¬Þ†çˆ�]Çù0OŸæ¹¬'B 0 ÀB-B€Ú à�:�0~�Œ"à5MX¦g`�Q•'ùfZŸæQžžÖRm]ø¥Ÿ ÂTÐ@ ´ƒ`�t€"ˆ”�ˆÂ\)eŽƒY >Rä©4ÆÒ ”¸ ”$ÇôÂ~Û’ø�˜š�ŽƒmÖ]Ørk'ùJå‘ng2€�´Öö¥© � ƒAá˜T.¿ÀÇä ñˆÅ ‘,b/�EP 6I ‡Ä$²DÂyþŠG¿›í¸$�Jg˜#ùü�~½f ¨Ñ4v8�FBùê™M§Sê•N©U«UçN×p�î€)•o÷»ÂB+›U®Ùm·[î•Îéu»]ï›Õîù}¿No¨Ø� € …` !ƒêòzƒm¼�9_ËEœBnßá“ÉóÌ� �gPìçKÐkö•Ýb¶œçh���`=Ÿ‰ÅãqùžW/™ÍçsùÏ×èüô�„À±Èg0kª*bÍrÿ1ŸÎÇ8� ¿�ø9± ýä�4�(Cð&è?ð§ŠFŸÄ1Î&¬üAð„# Bp¤+ BðÂJ}Ÿ(&2Œ` C7ÀZœñ%$,>ˆ‚h›"Йö²á Z•€6 Ã1äz»/¨ -Æt€;ßIrd›'Iò„"”>B–‡ R£Œ” o„¦„KÏš +J ­0KÀ Ìs*-Ë$Í8Æ;]1ÍólÃ1N“‚ <J“¼Ò‡ŸŠØ†&�%YB±éÔN†Äqü=gø߀@x‘Ÿgˆ�@ mGRKS!G‹H( !z€¬…OYVu£A623êÓ0)“Kç,ÏIo] ¨„­6Xó›çb¤rÜÑ5!rU›<Êvdû+ÎÔß`Ùó¬¹>OÓÜôƒIW‡OÖÝÁiÜ3ü¿,Y–-Ý< ÖzÍs-Ûr×UÌé_®5ºÕz ‡Ú€`FM�aÐmÞ’ºK%ƒXÒ�`s{LÉ´Ý:áÆ9t�ðmk“C0 �&Šò!yW´÷ÞN¸àyÙ~ÜsT»sX–…×ygYõ½uhKÁ^ͳÅÔ’Y­1ÖùÖ¡qÙHV©ßz–nÛ7î´†Ìù½é°Æ–°©_W>}‡ÞÙÚ©eéº q«'¦ÙyÞZ¾«n©6o¤ìzU­›nè=ïÀo¶îá«qyçžÜ[§¢pVM¸ çÛ¬„� ¦c�€~2†QÈ)”gâ@ °ÖgÛê5  $DSÞeÝB éüE§ð é™Íýdí3 Éo숵‚‹rÒÝÓ¤y.¿Ì™Æír[š/;ozsîpþ÷t_*ŽÁÊü›vÇÈ©ûäÝö. \ýû§±µyi' Â/…zõÚ»×Wð ǽÐØœL�|e]ŧxÓŸâã^ Æ´&Ðó`™9r/áÆ6e|ù—‹Š„Ou`A´Äx‹áxƹn-±IKk}P±.%5®ÑáSK‡ `}Qþ‚…Ð:$¿ Èõ0€ô$Ñž2É«¢€ÏÉÿ¿2˜ÛâSÇ‚ÏÙ:ÁÚ�˜˜�A°2;—wNp’Cø7†ñüËÊ|Ð*ņNýc©9~¯©ÉÅx¸ùà U‚¯Ç4h ½ßÁ:rk>·îÕ!45ƒ É><æ©"äd`2jNÉu¿××N0U.-W™dÕ“)ú¸6#Ó«Å‹ÒÅkÉ“ß-¢]‡«ÎB¨ädT-yîI5Ê5|µû9Xò¡9Jxpô$Á’†a M5µ &|˜y1¼¸Ù+ ÒôN2ÑêAia$'‹Ãî0†Î�„ð“-%¤‡Á ?„(x'ø”Á–‡§ k.ƒô}€�‰FxÂ�`‰ÎFª qưØàì#ÑäP�¯|°=Ëwä% ?{ÏYÇÎy¯, P•äÊi&T¤3‚“RžIApáã„rŽ?<¶˜¹æ«s]°4­·ý ›ò»™D9xÐ(±*=>—Í5ÿT÷:›zÀ$ï~/SdÃ7›D΃1mt̪˜à¦CèLórsEÙ_š+Ü«­aÔfÉL(ô€ŽíéÀ׿ÓA(ìz¨Á¶Õwúå#ûÛ¯íMi>v±•Ý-™3MrÀ ÙQåJoMkÁåW…˜OGØ÷âÀT�PžcCÏKcXl€�b‘À8EÒ¦·øû,;ÕFCü5†à%Mµ¢7Ù°Î?E0¢ÀÓ­)«!‘ÍšU´; «SO„éÊ轪¾õX‹Òp·f*½’ÔT:q’õoYÇOçd/¤²ºH&Ô© å5ä¬7’tÎztåfÍ"ºÐÊpÐ;3,©J庶 )€gfºM~W¬ˆs8kˆÀö*Ĭ¶¼·ié5rANZÀoåkkÓÃÌ{ãGêÚçO÷k_ªo)W=’0žñ·15%ÌêÄó-8ó߈cþÀTï#¶¨¿ä+<³2Ýá*²¿ úC€|�ž0@0f°†�Ø?Ež¹¦B7õ£œ)VVá2]x=†›‰Ò��,�ž0À #¡÷C±„1ÇøG òƒ±§ô¡ÝyÇr'<C\ª„œ¯D5ÅâêøÞ„ÛÎro+P £–uV#ƒä™§×©›+ZúÞÓ4£68qYò|W»øÕœêˆš1£Û—šŽ¼Þë§dïž3Å-"ógZâý¦öw˜­Ç)ëG¨°ñü:’³ äÞü‘M¯;£Ù–ÂmÎÝwMB°QeÀnºu¹é&²zxJrXÚ£±¥&zK7z¹`÷uêT‚°�¡Þ?ÄHŠ�¡Ø6\BN6Ðÿ@üÀÐ�®$³Ü:JsWLKfšåøÒÖ±mµ_†o ¸É$}þƒh·CórðÂÀüÂÌ~€`~cÆ‹X_Uej:ßsŠÚÈs"øb]wwvuk•M&¤/DÒvÜÅÎ2²Ç´OŒ6UNè´ÒÆm\{¥×î¹­£ß»0^ÖòèûÏ ^èTõGn]ÛNJ®’â,yàc~`ý7-`ÛïÁkë²Áyœ°&ɦ7WD¹´îùÔ7ÍýjY=b|2&ZÝ•@a6ijÞêl#ð}ð6€Ñ 2,¡þ!„xýR|ÿ7yÌ;ÉeîíÞþ ºí}lI‡ç¨”k p €ÆíçT¨ A®?ÁÀDCà‰œçè £½9µz?Eã_Ÿ„nгö>Ÿ9_{ýØëØoQr]Oø°äZÿ^‚P¼Ùª—ƒ÷°ó}ŠzšŠl©ËàÃ{½bû¿²u£³Ñ( %›ó]¶âðœJŸ"´­¹›1c»¿òê;³=@CÀÀŒÀ„ÀXæÀH¨ }€„`E�09ƒP¸|øØ}ðo‰¨›¬Šý±!î¬á`<²¦Áè¸*:+]1v³z©¬°Ðú…N€ /»¾´0 °A„p~ƒð>‡Ø�{â@#ã?*¾¢Í¬ZÁÁ ̼ëä¼»S?9¥¥!*°zÀ¤Z¤À„=AT 1A»Ã{ºÁ#¤;Ñ2@Ã;óÀ¹S¼7|C¦tB¤àÄÜ60SÅÁ½Ã¢?¨ª)™ìº¢ ¼a>?ãð¶´L‹f7SÕº‹µ$s?ëµ®š¿!¨} °Y€Cìð|‡È�­[Ò=ùD¤gÃF•È}˜‚)€V…ŽC p ˆùÐ%Ðe†bæ³ú.Ä:<t=µœ *ËÄ»Ìw7³¾1à¡Sr¿L ?jÀ{ôA;ä¼,<„ œƒ sR©‹&¹$ ¼SñÁbÅ¥ÔR$ó`)R»¼:û*U·Óf´ÁŸ«|[¥ap+k¶ª¬‡«Ûn£Â=HLIq ÉuÀÄƇØ{ø`¨èR‡à1ƒ44Š®ã|,·üAYý¼óÈÀޏ�fØ€XÇ ­ ÐgÐ#‡Èé˜Ô™ *¾Á4’“¾ ìêH"¨ÅcÆ+z¼¢âºªtŠÊIs*¼)|?)lY¶qw¯[I²T/¤FŠšÈZð |²¤³JT‰Lt~“›¯Êj> ɱ«Ã\hGù.µÓ]63‘¥<Ó—zIK;}7 ”·E)a5ÅDIv*+K¬#28˘@B€8.ƒP}Q‡à�jo¿Ì€?tÁ¼hÄÔKEÜv0Ñ8È�Àc�@�üjJÜ­…@Xè,‚à|ÃL+-/<wB{M¢Í0³€Ÿä¹H¤[O³MrªIJ¼1ü¤�D\)’mL´™L‰�ÉlË?º¡³²šDäÌ0�½GÃ#Ïܙ쿩󸠤ϥÌÌÅ´ŽÈr«$ù˜»9i¼½L™³Ãü?;n:ÜxE{7Òšì±Ä½;;VÁL¤0… ÈóÄÏ\}ž2èbºº|7I#y¬| ˜  @$�'è|…˜Y‡à€T+HbP5Ð$þ¸jˆ˜Z…X‚(ÆtðSh„P;ÐK„Ôä ý/«´êŽCÐËLJƃI24¢܈/×6JÆOÚ³±\K™âš¹;®Ṫ L¡›Oº­4ók²‹ä7ü~.ìº;£bÔ:ÁR| ?¼†Mdæ¢Ãá¶H&þ0 i9Znó–I:üRS&{lEƒH$P¡dÙŸZè°Š¨ËÍA «@S$Òiù¯iñQÚ°U¬Ã!ÜI2´Õ‚ž¥[–µ“Œ‡ø€äœ‰ì“ÑìKEJV@µ¤Ô‰hD€0:ƒ\oÓuz8)|…xWÓ©luÐ|§ ”›ó”Kµ#ÂI¥:dÍ[AÔäÿŸ%=¼+õC̾55j5µA“¹@íWË3eÅ#üÏu#´¡3¯”L¡M1Ø´Uü\GìzÖe‹×3Hº„ØÖ#ÙœjÕëK¿äTI#â¶ÓµÎ}N¯éyËósEͤ²EVÍj¥$ ¬V#«RX]<ÊÑ+¾ˆz€Ê2ZWMMU'Bu*•[$;Í£¡-Íð„xF€885y×­»,ƒ8|@TÎDåMT6»»`;Û*ÖÄ]%ý†.õ¯—'Ôü–SÌSPÉ÷OÅKÈt¦TSX"‘Ñœò²W;ø›Û‘6k)K¥ÉDy¡‹ǬÐ]’/±»¡ÕX¹Rø*mGµÃ£\2T—rïÔeÅ¿%Êm' tšÄÍ\zMm!ÖtxÚÄ€8ÊËszµ­¡CuWÌÔX EÈ‹w9(�àëHÌÍ¿ž^mÌ=Ñ=¥[>ÛpG„e¹[¥»Û¹T‡ø‚8{†èo›¼òÄ µKøX±.Ë ¡í‡_[”ÞÝiC_bÉ3g¼‰±0j¨^§Kkĵ0¢´ï¬4€ÜÅÎ?}åà-ša$JÖÚX3ÉD’%M jÑ5Š\êÀtja<hÄížÖ6 jÜáuaÅd]LƒL üΖ&W1?×Òª0\ZÔâZµ…´^ƒùàÖ-ˆø`[ºß¬ðPvøÀz‡ªÒ?Qàü â%cââµÒ^9Ne.ÃÃËý•Èñb6Šn Eu’áUÕVâTˆVUÒI¶8á ãc®d®YÓÎÅ 'œeèN¤§‹¼ÒÉ­<`Þ8aõDôä–7ƒJ0�8¬ÂT=À`=À`S~ä ªÂEêѬvÓëù|‡•·„^0ƒ5ÿã%7 Ð&‡¨j†©à€Eß×+‚—^2ZXÐ¥$C›3} Ê5—Þ˜»~;ÊÛxeü;^ìåÙ”\ºÝe/PÓ<ÆRâMÛNO N >.%ÒNxÞT:Û6üZZ=ZŸ ±Pu¯¼È›,¸e$£àå>\ކ¤E;‚ ÞXe‘ ÙSúe¦oßùÍð�†cx2æNeW -ƒP{0TØ€n`à-›@žSG•È\ÎEÞÔRÓ ²ç…e¥ýî‹gnŸd–V2½ÅDœµ›qÝ{[ආÂUa[¥çz“縶j-ÐjÆy³¾z¬t]\ñ3d@d$Xúð.ÕŠÝBžU,•Êá­œ™­7ô(WþH0YèžKj½T€ñNä¦Hކ�€·i@éV–im6‚¸3°Uh}�8C…Rhf›èHYý2¥²`s€2­XЋÃD¥Mä½–XÛ닎~ÛfîÂ)v£èÜæúÿA.  ™gBªÂšÔ|@Å´˜)±kË2K5û"&fÑE.ÃÒó+Žäµºíd•jý J]óT5àX¾¦M~ì4V˜zi\ªß-†ì{¶>L[dîîÆ¦Ä‹ ¿h¦…§E0!&È„VɃ)’ì¶Ëƒ8zìÞšlþ°Q3«$åÉv‡°U�ÚΆdôQж`BUI¦±æÌ8¹m%8ê±QfúPÅË f.;Dù–W_m¤!Ãj´j']<mÕàH.u\öo/z¡X…Z\­\= [dXò9¬\üDž†ZææmÙ4>2c­g<w 6~ñôØÖmY;”^>;eö´»sÔòf"¾[<§m ß!¸}¨8€þÿa½„a÷'FkÐ…ÉCþðç&È9€HPiWðT­‚¿lÞÎÓ¶l,¡j¯Û¥ÙÙveøÔŖ̓ãHƒsfŸr±ÎZR.â.ð’ÍÚrì\näCp±¹¥eÏkßOjEÀçÝus•SØ@â¥õÀÆø_Fs6;vO•í.l. ó.ÃΟ_ó,ÈCöÛ¾®ö4‡õCÕ­�à�(�û„¤›¿EzñÜuê»É–{; Rè4™£º“Fa‡ÿC€X7ƒ'Eôdp‚¸4§H�GXdÀLÞù£Þ‚5{ ä$»áöâ¦=çBƒ¨<)*ÐõlÝÚOˆMÔRggZ_YpþrÀßÒeääF ßTþ·ì‘v¶ñâ–ƒõ$FL¸ºÅT£ë>ÈOl«œ òM ÈåØc{ÔZf¹bÌÚÇÖ^°îáñç>ùÖûÇ|FÀ2�€8 ßtÊö†ÈÔ6Ú'2QÐ|t7DwÜuw÷FøUp|ø&÷tß…êůûÂõÙ¬H¿jv– éþLr˜ô�¼l`¼íÍ Ï®éÜeL¦Å‰_n\e]‘]ÉïbœDB>¶^Ïv1—muçµ ¶ûOeŽzõîMz¬QvƒTG§´ó·Ü9v¿è £â2ć `O€¬#*ÒÖNŽ®è+V#ݨ2¢·vli{/|O}'´üìpx�yûo·ø/ îø¶–?ÇSAÝåì[d¾øì{iWÝ:¯M®9úß�üCùNéßgûÆ#Ÿfzæ‘k"–K¿œ0øÈ¬Åü���ÀàÐ($�BàÐø„F!ƒC"Qx1ÿ‰G"1èĆE#’H£’xÌš!ˆÆ¡²Yd>)+…H¦39,¶k N"±8|ºi/œÐhGãð� �šËà˜ BíÆ(TYMr?æ5‹«E|<Ÿé@,ÞdØmÖû…Æåsº]n×yÉ\ÒóU+Ÿ�€e~á ¼apØx¾YÅÂfUœT«£KåªÔÿ•‘ϲ–ú¼f Êç¢T-—cžUr9œv¿’ÍPôÚš> ‰ºï2ûZ<óM½àçêÚËÆâ·¬åXy²W> \ÍìdšŽW]•èç<l+Cº¯A+¾l/ϱ…ökP/tIñòõ=sþÖžó—yvø‚?(ª@Ò,r(ߦÍ:Žë0Þ4d�ÖÕ±M»v飯>”½MœH‡ŸŠÎD‹ZÛÅÑ|aÆQŠôyEzþ°I»4ø,is¦™°ˆrzÛ3ñãTÕA kxæ&²[ äI’JŠÙ1zC+3rj:‹Ë ›ˆ†È3¥/¹oû/JI£pŠ<lK Ô<Ó#©)·qëÿ9K¨«¼Ó«‘ò3�Ì,Á;Ϊ«ÑLJú¯@$¯„ÿ?éœG&²$Ÿ9A-\ñL½2ŒÈÌ>Tã”ѳTgKs…@ÕC“¼³R$äâ5ïâ^ø¬oÝRPò6ÿW켂ùºÖ<ÆöÍiû¸ŸgÈ�c@˜l�°¹ÕYV6;»I²’…sÔ´-!KÙ.<ÐáT4=Å hÞ1űézÞ×½ð‡ŠãQâ¾¯ì ½>¾“Ì˸t”é`­Ó2ÄêÁuœÆ»-ЄÑM\ë>¤sÓÃŽ7/c¯Œ§ÕTÕb5^fX“›¿Utãývb7tãÙ}ÆòH×&ažÐ¹ÌÕʲ>‚¡¢tr-”Ïik½e&V+ë=7+©d\0ÎzÝO–K“K„åù‡dOxÍ;8j5ƒ9G×Û6ØŒ22´¸ËKz=»î8vÛtÝ»{ž‡ð’"¡>¦€@�Û2žÂËv·°àû–ÁQ9rÑx `UóÐô]H¹ áRWžàLt¯?/DC«D8£ciüª[ÚÔÌ_(Ø<yu~Èet%»“IôCiŸkþN~¬APf‡æÛxC0Sr‚¾ýȚƵ£ÍãðÎ÷)cú‹+Öžñgšå/Ý×8§—³ãì>ôº~¬ê·KY&)Næê½q·ó®ú›á˜`äi/–Ã^«iU¥m*§øôÜòzIÙÌ8&øŸ[a"Cø²”/H Øg:T©E5±M Ãí�Š»Oé¸í@„J¸%R"qü$8^.ÒĘ•âS§¤X:°âÙÃzvÅó.·] àÄ=]oA²)U!LQý‚*%J?ÖˆÎâ;n‘ûª—”]Û¢I~0mî·æw£ (EÆù¡togJ‚<-·4¬Õëq¶F>ÄGÌ”‡rÑîGªÄÎåäœ.2& vŠÝ ‰­R1Øät?èn¢(<€ò" èI Þ17£-ãT”ooqV$Ñÿ*â  áŠ$J•2æa³ ®'º À#‚0Rl@1!d$+6p2Ã#érr*ÕŸMé}$[Õ~*ŒÖ—i'£cn—Î^]A‰Ø|›rnfÎYE!'<š'$C°EÂuW+#az #ØÒV“|miSé£< *lÌŒº“ÅÂP@:®ÍaãÜÀR†@¯À(•ð ;Òv´MdN†ìÒ& IAñ CL`Äè E¨Õ¬Lñß´ÓŠ‘å¡dLbVVíPÄÐÖÀÚZ«ŒºÒ;R+!xoUˆ”4•̧•Äð¤¯^‹±¦OÚ­shD›¤ÄmªŒL¤)ê"øÂÊŒœè‚pIDͧþlW”;*)v*e7¡F‹29õNDÔñ"ÃïXÊ4Y×l°›ëÆHªéˈÀÞ_ úCü€€2Eˆ € G4ˆRÍ= ïGÌ=€$”üH`!1ê%e¹×>¢…€Ø;K«š“üçO¹ûYŸtibö&rŸi-)l²ÀxLüïCÄÖ­ZêÉQ”jlš‘>o]Ú)nâ3•j‚}ô&w<É.Ü=¡hÓŠGà n Q™;2žE³&´ö¬fIK0Å®V¯ Emi2^]ôðÓ•ärN‡¢*x¨íAã© z?*ñOfÃB‚­ù¥F÷o¯àûcü~”¡<#�˜_ w4€L9UD »&è[‘rƒxa™G,e—Kt® °©·^â³Z?AiÝ,1ÆtÏÌ ±œõg0åOÜlRoï¥ÁǸCw°Öuϲ¡›kÀÅ_‡Àøæ™ga=Òì[NæÝ�äFð~4ž“ .¦Z§òƒË´æ é«Éñ• w×ånF¹ðûW#°XŠòóCV-¥ñ<—RM©soðˆËH̤ý‚'DX œä¬™§Í®(i„ö‰âDèø[ä9Š ^UݪHn@…9W+ëýŸÑÒµ2iÞ ¬ìÙ®°§¿ žK“l¼VU·H¿)…UhA¹?„ž¬1yâª÷›ðA¶w]0íd—u®ðÀ–­ŒnæáÁqÜr‘‘nÈ­CžláX}6°Žj+Y‚àpБëWïÏ*8»JDë¼ÚÈûsšû“DWº6ﯯÑ4ÚÉQDË}´.Mf´QÍ|ÐÃǸù#cô‰ñr6á( $ŽH dtÕjM XS†]}ùâëfg¦¼œ\[O°ñˆ{{*€ÞqÜû¡x !´v Œ¼³¾ƒ;eú¥kÅ•n:žÊèóáø¥·b™ÀÇ|È×^}÷ê2Ê’aSÌ%ʼn¦´m‹7x~ë+£ûæþ1Ÿt½®  Ò\PÏ^? èeÿ¼‰sŠQˆë;ùÞ7÷œFêé3í}žºÎZ÷æoFægçmÀ�Q À˜K3$°� P8øKo«›QuYƒíÍ^Í8· °j·ÑÓö]¼ ðÁܾ_õþÄ”,áÙ¯|7KÄ­lðÊtïÏÔ¯î¾-´µOˆÓBý-8«g€‡J¸Û‚¢ FøNÐÿ�¦Æôð”†úæGôTvçj¤“îˆçìal,:ÄÌçEθI Q xÐ@ùŠÀøj0á,8rÏ4W¦¢¯o&®Î¶l°HÇ4ÙVì,ÔÁ¡þ+^®œ ”a &`<�¢äûAÄÍgÌ匜…®’nLûÆ…æRžjJì¬`ч¬ j~!`ÜþpPö À² ÁÖbÿ¤t[ã˜ðR²°âëÅ)Øé,LÛpyÏo©"8îÏã|Éír[PœË´ÁFCEZ̯`[Ž<ާÂÓ† ë¥<Ô*ªÅDçnÀ <½©,k(®æhÙ ¯ÌÅ�Q&½Tc§p7¬n*ÌõcĈ fü®ËàëÆÖ¢ PÍXe"¹ŽF³)4SÞ;bˆ ^ÊP@R@$ `Éê@R/0ÝÏÑ §Dxá°n¼ìtR¯ÜÐëàÀÐù!OïÁÕ!èq”›é{"¦lç±<aïºÓ­A#(¢/ÖÆ*#¥ÎÒ¦§èëˆ`RÉJŒ±˜»e\Hð&ÙÌ ×ˆù�†®zøÑAIÚŽ¼nPÌ@Î-&‘ÎÆ<RT°q¸f'øÖñf"cè'¨^}§©ò~í1ºí·~ëŽ:àéâo/ÌÒIêiÌœY ? ò=®DçÑðçƒÔX¬Ó�2;'o íJám(baøáôéÀ��`ÀN�À¬  ¸�$êž/�AÁ"æõ¬jh’Û3-}r!ñ!25ê ß!Ád€u¯Äój¾Úm„ò<òο²ÜaªÒ¾e—ryˆ¾ÖLíËI °Ê\ê´IqŸ%„Òz\who$øÕ‹2=¥ŒRn²-²f¤òí+ R–”ð)6®+)8äî8lù¦ÞÆ08öPj°Ü$Ï6òQ$n)ÈP‹Fô²c&éÔ½‡q3otô«ÜÛÒ±dzPòœÑkLçèÈÕÄ8ŒÄ@´êäª+Å•ÎeÂhÇÌ€ �„"µà�· <@ �n ž   †` �~.,äàÃP_Ð,ŠúmP‚Ë.ð ,o1@ýÁú!4 À–SSJÍÉ5aÒ]6 ¢£ÛC-þRÍiÝq9KK?Ù%ÈCÈ/OÅn‘<§H’ƒ³¯/IT€³òÆwèg hr  Ç*/$fëLw'.€³ Ä|ò¾ÕFv&ðÇG½¤ÓCÌVª”ذ+â9ãIDã éd]TðA PÌ’9#oØáJ4çLÔöuNÓ´Z€"�`$�`b�P` ànUz�eð@VÊÆâdñQåEK× ‡‚X‡_PHwMŒÖ%áìt @* À¿J´¯]L² à·5è¦Ð±ÂrPf‹@LJøíSCôxíðOÀ�¡î#tR Ç�` R Y  G3âÑALÚÆÔê×°p赿>p+IÜ‘5BèÌdUò4  ¹ÏVDí O<é‚p]-4üµ#Sâ¸áìàŒÀ@îµ×]ujEÖ‰dÄbÔJ€2�€'X)š@X«ýR/QD,)(Rw¯LmªÚäeÛqIô£\À¾…m Ÿ]µÞAä`"TšøIZVŒD‚¯0þ @„`h€ ÁÞAúA–à;!ÐaøáÔ€Y¡òêT� G qvO•Gò@Úv:¡ÔÒóïWeíOHNxÎÒ¿Mo“(ÄGS°’÷Jçt˜35R.æÍSkŠ=�V'-Q7Käz¡êÀ² ÀÁVÓyןz�¹ ÛW­RÖüÓÙ#ã†>?ëpa" -\öÏzÒ™`²!ÏKvÜuš¡màÑoLó~eKeÔA ÏD"!êíÁ>À0 �¥]"1qAø¡Ò€0á‚!ìÁ⡾ø²ÜýáÊø„Laý0×/G4q0×vBê~ç&»¶.?N„ìÏÔÂï½Bt¡-6zç¸(†e(î4ÄÔÁÐ{"¿cDõPF iýD6lÁw®`‚,ê ¬ `! wÕ‹Ø¿`¡¶·Ç%¦½Œ¶ oÕX8‚¹€ WÌ À#ŒêtwØÁPwán&QRfÈ4¸Ø‹‘qÏ•:*¿"\¡æÁ, 0 ³} AÚ¡ÄÁöÊa ÁòÕ“¡¬ǃáàýáý„b�€ �W9Ãjå.36VôK¾ü]9õüù9�ü¢}xp[?‘…w0Tö+ '~|õ(²§œ{0ÜdÏ#nDaRàóÆŽGÕ(<Åh†2fA¥,:x«Šà”ø·‹¸íYÖËXÄXWõQsê IQ}‰b/‘t �. Øç™þF@´AÊø÷6úÓw鈣wV#{²zìº!#ŽT¹Á.€0 �³Ž…î4¶!õ!|ì!ÊAœð·¡ßD® �`�XQsS£42Î%"iBN¯N/>î‚{ņÚÒˆÚlþí ~štňa›y‰rløod- 僢eg6•4ÞÓÉîÁ)&›:mþÒðDתMxìÀ­œÁRà9 箉š`^2ÐéO™™‘îD¯w+1‘÷A�Ú º;®»/�´z m ne3Ðä5ÃÀPí^šËx*Ev x4þ!áépa,€5’;™CHÄA¤ð¡œáˆ¡ì¡ÆAÜbà�Új·8Û5êVÒÔ÷Ó?'¶ó¬3ˆ×išLÝ¡º« íPP¶g}Z­N;(–@ƒ¸ªÀ¯œÁPà;±›Ó½Eð €Åí€ ‚¿à°€( ƒ?áè\- ŠÅâqˆ´nÃ£ÐØ@%„€19TB9ŠKbò¬šZôy?RH�Á´º‹ÐhT:%G¤RiTºe6O¨TjT‚ÑÍȧY¼A€°fECŠGa2YM~5 ³Ëæqš š#™XlÖëD¢8~¥Ð£AbSÀ``­· é¦Ù|1¯f#9ìÞq¾®×ä @’ëU:Ãv´Æ$ô,ü릎Q¤r:³œ¹×¨1¸ö»]M“\-:]m¿GlØïè¹ÈŒÊ- ·l46¹D‹y æn4û*Ñêþ+’ê„p{ßðx|^?'—Íçôz|ృ_kѶs8šŸ+oGºQ«ÿ›VÆÆ•¡G¡æàÊ|¿½PLÁk¾ªªå¡à­«¯+î£Âê$2Õ:kè».‹Á.Aƒkì=I¡ºqEÁ†y™†¡î`™g©ÄsŸgñú€€(€ÉZVº¾m#tèHìQ%°0Û†‡¤)SÒþD { “$©ŠNÜ­¨ÓVäIÍl�š>­>Ö9Mš\˜¡rȯ:ÎÀ’;Žô™;ÏÌõ=Ï“ê&´ü¦ÌïÓ¨Û, ì>‹/þ 'ÀIÒ”¬-‡O BÝ-&ÉO¼@äMO½ià~š†Ùð^™¡l`žUiò|Ÿè�R…7,)òؽëSrá5bPÛ®+z'"ÃŽ:“4Õ C›`Ô2¥¥$J®J)Hô\ªŽ£t-Ãp"’ËS4Ý–=3QJüâ+ÎeAÚ·Íõ}ß—ë@·{©¬Š-‡O#·6m¢+žÙòpœ”p66‹”•ýã—Í0qå¬&®[x…£3[ "…0Ô-PÉà朒õ*ûc¯!ü�aª{eùä[˜u­][Ÿà8̳s^úÊÊöéÞ3„–,ö<½o¦ºŽå]6ä­h-ÛüØ9Ól“±¿nÏ0[˜:DÖLÆÀÛO3¼ÜjYæzŸ· #{Ï ÃñLPF¥ ± îCMjPºÄ‰Lkß6Ëšä5DòZ„fiÐücÇÕõ8´:ä¡Þä›Z# ÑŽUÝjýÅJû;:¢o™–hA£@¯Õu¯wžçå)fwåéâqØ„Xæ_ûá“õµ*x¹:¿büšô¡•Xø/Ú™ÜÜânŽZ‘³`~j,ßÜIpb0¿è àCþ€Ìi¹öÒøž¤~¯Ý%.§oVS$) Ñ5ʻ౧! 4>º€¸ L)…E-a¦ݙ\tK°ù—Òž[Û]#͉qòB¼(…g”wø0†`õ‚°v a =Gxð€¥«è†´ß1içÁÈ<C–³„Y^-©Í¬–ÉŸl)±˜-HÂx`ôB EÀX¯ãÄyI`0 å /~çÌ·7Œä™Y }Ñ µ¬ß›é‡„ê†Ð¶cÔ™Ál;L-Gs´|­ó²ö\ð� “â�<¨…&)„äb10*‡XÕƒÜ�0ŒÄpë˜üH÷|Sá¡?Èaw ÆYÛÓk.,à5¸Ë˜CN�+„ˆæ"Á°œSŽrð F‚‹KA¶–†È™fŠâ†çžI‰ ød´˜œ³í~ÉÁ¾)…´¡Rý>Ùæ¡&3¡3ÛE’'*„� Z}OÃÈ=°þcy á\;ÐÅ#è~ð@—Ó\šÈ„=KbÏ‹“a.55M&HÇ5·2xÎúçkû¦2*™Óê_ £G|®þl9ùO#*|o‘:ê0?B°G›àŽ‹UÚ½8Àh6îüÛ®¨¶Õ¥3ó”ñ¸Æ*åê“2„è=Ï€¶ªýyRal;ê@¨$9ë³°7*èRëq`pæ¶ÔÇâñ‡è˜�€3ÑJôzbpôbèw 1fdÇpüEp=²äü¦¤6%Î娜j\äæ[dÙ)7ùšäª«Åe[Öûßµk?G¦HWàT­M 7Ñþ¥Ã2Sn <q �LSˆ IeîÅÙÕ„gF¹Ü¨i“ZjUº§6ÉC˜ä5“Ô>àÚ«ÅÚ¾H8-‡»'å |á»PÊ–” ÝMF¥f²»Nh)q¶=åÎjVgH€ÄÀ~²Zøß3Î7ø¢œtŠAj;G`î`*Ò«Fu‰mSÉkA 1`Ô7™ì·ÜŠh&LËžuÇÎúÔg›}=aØî´X" ßÎÅÓâ&ëál“×È ã4ébˆE4˜C¸†µG\™ªl–ñCÌ~ 0öÃ`ZùC6[ê7E8¶²ŠvÖÈÙÎXÈϽd?Ú”º ‘¬ÌvD?‚Îp®m<Ø`| AP:E(´ƒ°wâ<K`OŒÊÍ&>»Ÿ´ ÁŒ–&šDÐXîýÂ¥~8„p)’Á.ŠÖZÍ&�àn3)ä] ì2Cc¼|Sð<‡­,º,Ç™CØ g5ëMœT/¨ÜâÜvJ"ák³öœ‹Gm „t0UÙ»? á‘**FÒzT­€0…JsùÇ”ïÎ[ý–_ ƒ™´Fç¨=¾ì-åUkÍæ=œ®â nNÃÏ .ªàZ‰ [¹­›×Û¹Ù\nõÇY‡2½Ž$ÃÖÊ cˆrÒŠÃÈÛÚyÍÚÈ ‘Áà-ãa”¸o±ðˆ# áSqòí†D ©âlVŽ‘î>Gð  oo<XŒÿ¿/þ[e7šH3m,¹,¡·´ùÓ¬mÏZœn¶Ûݹ֦„‘•·T9Öe°FÕâ ônýßÊ8#)û`›ß¶CJ¸§~°N/±tóž¦7±!é™CÈ!Ù|³ÀwආÖq€:ýSGž)”Ê×Ù,L&Êû6,aã ©œ{‰ÐïB žsΞ‚3ˆŠ”]Œ‘àA€SK=‹Ç9ëfp>tI=øó¯žqVok~„»k’gjÛO:M­Ã;^ƒéìwž÷¸·+÷ xH¸8üï TSˆpQïÇÀèdó{Æ`‹Ò¼ð�·ê˜îD0>6¬¢"ro2Ù`2ÿ.ZóïBÖ”KÄïÔ­é²ÞOû®Æ]ì$‰„7Ä¥¢Óø�úކ÷$=!OÁaÄá¾À'¾—Ð Çè"L#Jò)¦‹Lro­NÞ&§àNäÎîÂ<Mv[ç0×ãú箺:, í\Á 0c .àví BËŠà*jÊæÐ*(ÔÞ¡âÌ`Ø # Mž €ö-§àÓË Ž°0ÕG†>æPÔi"5bQpV\ póCÒ¡î°jA&ÊjJ˜ 0”°Ÿ ®@·ÎvA­ºÐ/Ì|‘R•ÐQBÚÓÊu 4žxq2 àŠн -,Úàxîèì �E”™%œ¨‘Ëp³ B äàñÀ°Q„ÖpøgØÙíTxH#ðœ)aâòá0`L ñ)$!š æáº¡¬N¤¥JËQÌíñþ¨ÄîÄä‹oʦƒ¦ßqäG,th(MïRD#®þaL U0¾@¡Œlª#î®Ô Ž{ b¥&�H €¯2Ê�¸¯aÔv€¡£ù‰ äQòŽâA1!qÚ r]%ãÔ¥r6!&!ÈDr`�gzõíâvÍ{ cí Ìj5íü­êlÀéZìp†ªX|R˜ìŒ¬Ì]$küÞçHp�­²*r.ê½#aˆ)nØf'Ý/°<r²ÊÅÎ,Pæ¡&àK%’‹/ µ&2f!ÒÚÒþ‘®Ð©K í*o5 Ÿb-( öàÎ S1ÃÔ!œ�èá¸Á²@#6B«_,«[3RHKcDü6õ”J3€úÇèHMHùÄ@ò3zð±“äðk‘°Ù'ÌŽïè€Y5¸œ@Á†Ê¬TÈE³Æõц« º„2PàL €¬sº» ¸¡¬$êP|`ÏÀ§cj\£hų¤wN¬µ’G#ÓuâP È ôàÌ Sé>¤)úá".ÁÈ �c5 Íwê 0j’6s°âÖä¬c3BãW$æ˜jàê°€.Á´-Gè®à~QÏî²8óþ¼ÌÀÐ <f¬‘ÏOˆ.7!àòá&Óâ À9H ó>áªu2j˜´jw/¦ÏÔ‹*ñÊ¡†Ú7ôªa2 SBt+K„LÐ a1Dß‘™A2¿ æÂ¼I²¨²Û<ÒÔÎó*õSËÁFª×P¦£ø  ˆLt}NÕ<À ƒ ®,ü¶ñŒõŽ|‡Sœ<4ª( N tµSê,  üOL Ls«9tÈö”œ)_N4æ 4·VÄ ¶¡¦Á®@ À +õUS¬)’Ø™¢àeœJs"¨)—¨‚Ñœí¯L¹‚½ „²ÓÎÜjÊ® À†J`]Y•üq� !~kñ[˜<òL=_V5f  ;_éÈ  þuvz”u õ¹®± Õ+r6ñÓ`ð@ÍYV AaÊaða.B¡ÊÑÝÀðÒÈ´M�Ê“=•% C{ EŒnãJ$†æÎ¶È+€¿´Tw“€Zð«JB^Jã_�2¡öSk¥û`!}Q5lhm9G@ñTHjMHâMá(€P `ªNÖ¼V%btõ{&èÿ=5ÄD JK±i6ðá`µ™öFJ À¡aöêA€ôÁ´aV"3MàÆ´jµÍ`Ñ\ß”iæÄLôPÏhÍ"*0z¼?Uº)Ö®–² aq÷lRÀ A{[pœYêƒ,§% µ€¡Šjüîsx±\ôÁ ²$Ì è6ån—nˆ`º¥LõLv2íPýö¦0×$Ö×Â;Uá0àWq—z¤‚ º!¢J �¢»cÒÀíP­'vÿ×õEÄ•a)öÆFd¯äwf7ݤö †¢¹vš¿ç…'4¥” û˜L„„Á†æ¶‘‚Æj¢-Uá'z Ö …ñÈU~a£LÍ&ÔÖÛ.ég7\ý®;{¶Ï‡£}�ì—z˜\=!baÒ �áù *‹m7 Õ6ëÂ.Xmpï×gø_Jžx½Fb#J°V²�eˆ¸ÐAÀ"v4ë‰QQwéÝÄ©-4ÒABAÁö`æxW…¸Ò€×æPxfRouVYm?UY8ëÎkªà¤Ô‚Ce1ÔÀZ ÀŸˆ™<ábAÐ!$¶Vw*„Ï@O(ª’’¨ÊÁÕÂ,U ²Ü\8Fµ'c”ÔÓëÆ8jì¹plôW—î`ª@4¡�y?š#Ð Š6 ‡ /Møø€Ö yšGV ÁáOÖ.jk–ùig£F¤98DîuËIH°ÅÒA.À]“™¿œÎÔà ”!¸Vi[+{R˜àÔ†$òSqƒÈµ7ù…yxE8Ï^n¨Íi5Îç3Žz6~ nCfø¹Ù@þÏä@6€ÿšý¦#¾ Œ …gí¶=ÛsÕ!ÿda$Y¸ g ¦GœAœx®¥[%Ö×£a‘Öx±Lú˸sŠtÐÛ#YMá. _ŸšŒ=YN àð:  ‘¿LÑ¢|øß -�âÚA^¶ÿ!oTã0ÕŠúÛªö7•„îúW¥ üšÃ°¢  ŽìPlþj.¼ìEÑI'&Q5 77˜[†è6˜é3¦!ö@⹺ŽÛ cºz–÷Hç$K% ý‘RÚXxßõá‡Â…³Á-«ÀÌ Ú‹´£ÎÖX àòªáâ ‘8¿3¹QT<ú› «U¶Å†ì½'Óxäï�ƒ°@k¸Ä)�$ám$/l,‚mLµÖ¸7ŠíÊm¢ ùU»ƒ»ÙJO ´ß´�\ `¥´›Æ_€¼a™µË6yŒo–Ä“rs 78"Ù·@è{·ü<¡²Aè Ðñ@÷ï6دŠÎÚ7›â[+• ¹±[í:×Äà ,_T·—, R9"bþ9–¡H»ÃÃ<€"À$ !kj«øMs–5PãU0–e4§gQuº­Qà¿`á¿ ¤œ<‚_@¼œ µ<»Ðµ6‰*Š9'ªv@¬û<àæ Ê ÜËcLjáÌ Á wí£jŽ8´ò±ör.š+ª¶w»K‹X›ç 2ªà8£-ݵب‘YÓ¥8ïRà€œzüéÈ<†e£sXoÓAÍr BŠ!ë³àÞàÕË=>Z¼º{QµY°‘ÎLÃïÑKžyõɘèÑ+mƒð†"¼Ú`d  ›Î}f<AbÌ !aü$'¿hûœ¿Œõswö™{†´¯«•¯ôi½ún^=<t=8€qÚ<@”EPÛT_ɉMºÂ žá$�` @¢«èR¼ðAR¡ÇµwÍ]š/Hºá¨Õ×UÝ»dˆâäˆ7áÕ¡.]š ¼µàãÊ¡^€Øáš@�þ4*>b8äîÎ2últªž3ARÂÞ™eæƒCNAÁ„]5Ç€÷Þ~I´½ì=ƒÂÛp:¥Aý eÛ²‹o°‹¢<ª\> àÞ’OÀ¾Á•µÅáÝTR{¢;ûkëaöàãä>Áì#½²A(á.!·f€ Õ2ÈYyÙÑ{ê¼eºMê{µß[ŸÒ×?¹Ýw=,?0`¨à<€ö>é° & aa/ÔÈî¤Øõ'vmÅáÝŽ5’ÚpI1k€ö þ¼ ›óä÷ìa’}ìúÔ*x·'Xt¡JË–EÕ¡, h  ™îp<ž „!zºðv�·ƒÆ;°ÛcPÔe˜�¿ñú«çÄ»õ"7ú?@œ拙tŒªÝ2 ¿4`ô_Ÿ¦@& Åp ‚�`ø8� ƒCâÀ:…ÄbøÌ7‹Ddj/#x=i#pÈÔPHæ”Îi5›Mç™Ôîy=—Ðì…Jù gqØL– …¿êxu6!N…FêpútB³«L«ðGŒ¡,q™I‚9õ®Ùm·[îëÖö!œ—ŽgkÜ×j‘û nÛ]°àjðˆ¬zIK­á µ–/!K†Gaµ…*C‡˜æã”Í2«–ÎÄ^ogÙT~Qž‡w-–ÏiµÛm÷Öà&NVÇôü n-žƒU©Z &•æDáXø-ô‘6Œå¢]ßo¹Ýïwè uBý£ÕàøL”ŒõÁñ1îèãåéõ-êA€Ï8Œx§Ñ,8Ã(–—»ðdAéfcœ‚éb€Oh $Lãõ?Œ«âÊ#  þ«O£„ûÅM,Y DK$hQæ{µmiF<‡‘„{Gòƒ!' éXœ¸ÑŠ@Â"¨¢¾Œ«›BöÀ(JÊ2®‚¦ö«o³ðÉpPëƒPžíHsDÓ5'‚ùc/ €‘4då²1S+'1I Æ“³•,+ˆœø‚¤ð(àÁ0\×GQóHøOIPj�bÒ3RL[:°cMHAóü•QCÒóš†�-KV5ÃÈ{QÖu¥k[M` žU³’{à©1Lxè½ÎLS<ErŒµT*µ”‹8Ìô}’#dÈ'„Õ½³mA¢ùbÎåMFqdQ<Ôñ$§>Ð’œërÙ£—P^ ê}’£u%ÌöÝû-‡±ð~C©ri›Ç€/è“ßAÔ´VÛb5=S\²j—OÉ•N«c‘käѦ'¡î~ µyD<×þ[—eù‚F SÎשÖ@ÚçI¤:¯Àn¨ÖÌ¡>c£héµ»o˜ýÅd]Ñ>;EFE‹Þw4¿tjZ…ÊxÀ„¨Þ ¢U±¤lû9ˆjBXö]€€ PÈ̘öCìuU­nÕõV‹KúÔÅ©¯\¿bKi$L¨qÌ·N0Or¥wDQMç‡âö<“A$±ö*Á F;å›GKÓtñ€((•C¹ #Xl5 Ú/[ÛfùbZ`9½.…;ËÎ°ÛØ{;½!úü 7#&ËÛúvÈúPÄIRiS�4³¿?œ$XÁðí`PÛý~¬ðÞ ÕB+صh&ø§è¦k©ÌÿΊïB;ƒ÷©�`'¨S§räÏ ³ø4 eä²5ÌûÈ3_b@5; œ $Ta€E 1R0Fòâ+É˵g„¼œÃ9Ìyˆ¨8PLü_@$»X9Qû ;‹aª8x�À›xüYËÄ…P çÄõ?Iãõ'Ж'fJ>Ÿà"AØ C¨Á^˜ b™t¥ƒìtœÊQa¦i÷'…œæOÛ[]«%ù¢E耨&Á¨Å Q€`c Â0¸Ý+Æ~ I*³gš%Ch; ÞAIs¾0†ç aô\�€-ÈP$†@€#’ô9ȉÊ5<Þߢb‘R¢×öbàu2b_Kõ¶B˜¤j„$ÉFøÜÔÜ<0X‘8ÝËb`ëÃH8 !4Ì °nC�Œ0„n´é_|j~Mm«JdÑ$Cd” 2lÎòâTøQ"è] áÈï¤Sà'MìFdžÆ#ªz}¦9*žÙäfÌqr<æ·T» ^CX+î‡NhÏ‹%sÀò]„)áHi>¡TQѧã×[R•p¥UDØaJÍ)04H€s5AU#§…²mŒT0†è "fj+R(5(”±·À©Ô HÔö«‘²9ˆAâÄ|±ú�˜Ä-ªÅyù ˜ü.KŠ’J‚{Wƒ]YN´±W Öàu+j¯¸ÔÅ zÅtu^ÃXsgIE4•%)Ë8 ä[ÊïI”UŽK"žViw‚%Œ|‰�ÒƒHL§v"ÓÀ#Eøª3|ó¬8ðøck~*mÖшæßÒâVSd–Ç7Ú.Ft‘ `ö©Í{OrI€tƒI‹!¦�[Ý®&šhû®OeªYvjÉ,óˆ°ˆ€óxØ è.Uë½„Ì …aBæÜ]24xÔã&àO[ˆžGÞÞ<àΣ¬çP¼ˆG°Ïh‚`+½¸6Ô‹áT0æýEœöü‘R¨àð¬¯ms¥F±-žh” W$Z\ƒG�é@ð: ëÊ?Õd_·d™×K98qÍ.©6FÛ2d=/(T¼â„9„\S’rP â|ÐL†¡*¢e3¾Ò®Í㨲ò±ôQ@3ƒ»Gƒ2UÉ "8_ ‘„6ÀiG‰æDâWkg ×RÍbÔ¿ _|:åb–# @ø2|Q˜ï`u£I‹1¢ÀXCÖT®üðú^ü2\˜â<Âãäb¿¿‚ÜauÐú#I–‹!PQB²F‚Õ–œ <amÊ ŠÐ+'Ýü¬óD~_ !,jÛDx¼# n4åyue&¯Z¥ÇC'öy:cÔ|‰@ÒóþbØ' v…]_¬7ÑÆL}§Yk}ô¢“þ9ç,õK%†˜¯¹§ý-@rÓ÷’ój€â¶ï§ X,‰ÒáváŒMßS›MB¹HÖ@º àô4„­Á)î˜DmÏ©X¨`ÒaÚa¸üÜc6™®3�Ì<æGˆöBP4 ·Æ®Puà J Mžì©'sdÎSó3³iÅÞúÏÅ+b¹2ÞxÓväÀE¦Á0¡!uù°‚МËP°­$î!ÑìeÝä[µg¹S=ÌÇÈ  û‹‚ÞÁHƒxDmO¤—…¥iÌ=YD™Y¤«…ªO0]9õ¼‚B<9§6çŒ÷› 7G@ñaÔSâÜû,·Ç*ø¥+$ˆêc\Ò;ÏJ²þ±Ö…p cÛF ,ÄÑ›¶[Òp²mŠONõr>ðÝÿwöód0‰uß§0áïOÒ¿Ü„ gAË|Ú¬?}�TÈ^ ÄäIÀèðŸ‘húÞUã|+Ó£zúÕ!Kî !Ý`:Ø8Kð@€¸-„Èû±²q (4›ü:›¤“~ ð�|€2‚�4H@"_>x\…PbÓ镲*+:Ÿ°Æ>Óî"»Ä)à`†¨q‚xB…€€)¸¹ P¢;{ª ;8ˆªµÁQ0�´iô˜Ëþ£Æ ĺß4Èù-€Èœè)¿øPƒx%AŒ/@ ‚àL,›¥£ZV5«6£, š¹ ñ¯»˜2@Ð$|/¤0„\XbÉß.£¹2í.ãürX“³à¸‹¼“šƒ0!ÁtCªw‡Ð~èÐSÐr‡|€%¸‹ì"È-é;¼PüɺB‹ÇªZ´7Jº¤a$?ð…�7\HE©£�¸/ºZ )½:Ì6qs¾ª³¬³ö- á½<¶¬84D:E²ƒI¸U,>*)Ç:úŸI÷ :ÛBqB †CK,9‰æ°|„˜2‚$@ìh'x>(apYX€SF1r?sú˜Ô½óÁ몌ûNÄ<Àƒ¶=`㜣¬ÌXƒp&G|‰ì\¬5˜“(™@¼*³"‰À§+ÕÑô!”+£’—4 x1‚f„‰  1˜[F¨l€k ?´~8\s(Ó+‘ðŠ;”uG`"F|—¥ðn8wø>$I‡ò±Éë`@QŽ :»û!Ð)ÀE”ˆÊ,¯ øJ:zÚ#bÊ™òÜÁà?ä)HZ·Óu<©©6°Gƒ!Él¯ž 1 [Xb†º¢:§2”ÈL¨ë¨7Û‰H0¦Ê�2(1ʽ¤»Ðø'„8U†k|�,6Š£úM C>" ;lÅB‰Ë˜ŠÃÈZKqg=ée:Ä­�6‚tÊÍÙ4�À0›x˃jG §¸sëÄâ¹t¼@#ŒÞl¾…¨U†4Á"$1áÄÍ}–€/™ö£BýIÌÄ£Gœt˜201‚—NŠ@„À\†h9…]ǸFLÄ×9Lò®²+Âs†Fú–—d#9¥L<¹ÁKJô«‚HPdÝO… € >xÝM$ ÃG,jÈÐJc°8z‡ÀL@Ø/‚ Gй¤@L°Rj’ê+[ã­ÓfÍbÌ c´W?’àFÓË0ˆÀ´õDöÏ}!ÈoHxè>„ø~‡è½+“ô’³¥N;,¬¤ãDñ˜²|ÊÈ„ø5Э%ÓHí€À1‚€ÎKÃÉ.&j£¼c�#RˆÉÓP¬˜ÉÌIø�ð�ð ,bx¦½Lð·s¥AÃB¼¯êüͶ,&ÆôcL+×óh+i/ãZ·Œ·Ì}´ù�Øh†ðm‡8w",NóýÐÌ<lcEkÂı‡¸|„1R@!Î…5 ÜË‚ˆE!k ¡"3P?£Ò«ÅÏû|M2*µi°$}<Bȸè4‚}aÕ€‚J|½Ó`G—mR§“Í)†Ò rÕ¢´:T5> �‡ÄI*ø~> /ÂeN,ÛgO:–±^²‘T|ÅêÓ¡bI)¾WR:Vد%|€AãáNÔð¥ VdÀTžB$ÅÓ借[ FB2:»I$É]aW „�UøFb4üÏ$àŠe ¬ÚRÂ()û–K¨,pù¼ d¬ÊbÇôý‰à§L¹…�0 �pØâ™œ?’ïS¥§BC;¯´þÁB³W•JB¥H3sZ½ã–§!Hü’ɹØ€ôψƒñø˜P[¨ €�è €{¼€È2u¯·…0)ÛÖºQÆD\Q¬£³gÜ|„‡ZòØÍ};•LR—õMLáTÛK[ ÆÃjtBC´´ðá9˜|˜1P1Y’Hm‡ &HR ˜|SÑä³¼YòW{u0%ÎñB§òˆÐ%”º„¾5kK’š+sU¶óÐ+�B;ã!,Ã#KRÓêEÝ-ÖÍiDEyÏû¥Ý „MmÕˆdIãÐ:E*mß�˜€X€¨8.�(�è µh ƒ(F]d½!.Ë…NÕÇÕLj%H:ƒ¹}I“ÅHU7È y3k+*d-õâZ`É¡QÊ?µMJ¾§%<È»µátU7¥9Ñê…œ¡ÇÝpHƒ%É]ÚݲUà}È>„Èspy€)¸UP3ò¾9'¨mëFÓÎˈOÖWêú“äòÚ\RV‹”^½u§Q¸•ÐÐãH\^ XÌíbº¶·M�aKã ôÛÈ}RœIì›�8�à ø*¸:}­0 ƒ0E°üã;uªb†úþÕ[VÖ . ÑéT`®6Ìuø¾¬™åëÕIÙ0ôœ;$PŸuŠ_²ïI2ÔdWRº¯­¼Œ™_|3TL Ø„¹ß ‘âÕMÆÜqÅû9¥VV@©€„– ž! $˃LhW†PkLÍU.=xÚd„áS…xTTb¨" 2­Í/ÕóÞÄäáÆ,V­z ~WtžÏ;ö›Íg_O¬¾O“�ÌÙTí‡úò‡è}Ę€ð @"¸,ÐÁÕW¬6E„V^1óÔ\Õ”ÈþI¼-9=ëI03“%>te…°Ã8bþP¶kâ_tguÎ-Õ#tÑØ*ïÜŽH– ²Ÿÿ ¼¶W£d«ÞNZf(Ef£…çÖ„ÄZ{JQÞÅëSžp‰…–�&iæªÈ^P;0[*$|êsáç®-´„ðXAP)ŽÖtØÐCâÇî·Yþ)(„·ŽM”õ(ÃZ«ÙÆ FS(q.ÈÔƒaek†^/âM*äþ,kÀË|)œ°„1Ž" B°#p�Ê«€Ð3„Abãb”ªV¸(SgßT~jD5çÝö^=óÑÅ‹º5gÙ˜—”ÖH&‘–ÁÀ¤¸æ9ñÛF¿K.žéÔÈ™mVæK]±f.ß`nD¦]pI�&ƒ ¦® Ø`¸o€F…�0e¦€³°ÄâµeÖLؽûBT8nÇ0ýh¾¾QnB”†dÔ‘Ej†ŽBþéùÔ•·U•¢äÆùÜòÈåUjZ†½ _§+¦´º™Gé‡È|€x€@=‚x!ƒ8!ž�Ð4>oâäqئӬy=ö‘VÆ1Ú$´Y ”Z—íí.ž6}w êƒÕâöÓ³Mâùg•/cFLI=¸ïÅ”°½ŠÕñT^)ä ™nÀ/‚vînöï u‡˜zð@„°wÑ) 7?‡ ËQÉ,q;:R1¶˜?¾cÃ)«ñ¬`Æ@Ìd­lb¹UlÇÿ f IÞcoÎML¨`Žé3Õƒi«z€ °äI‡ø4‚ ñ" îD¤¸ HCbض%›K–»FúÚïæÈ`¶RamËËUðo|‚Ö¼^4%^¬ë¶ët ÄÝÏíÔÿ:bÿò„ŽëÊ´ÚÄŒæèÇ+l¦aR%нVÂîõf�ác‘(gO@{„ˆ/~î¯0 =‚ CÈk‡0u% No“Ñé…¥‡!æ-k¸oBî­‹j¬ª2›NlVP`âèÖ霖wáEx%¢e?ëžqeÆ ’yhz°( „ð3ÂDõ 0€Ð5*X,¸ÿÉÍžöZ: ¼ªøŒì—aôÄ ½ót6äðCvQo°ÌaÒß&>Â'9`åék0°p›ÃÕ–/N>{ÀM„b„³Ÿ í›¶ëÃÇquLéó‰ˆ{‡Çqw ·s Ø7Waa9YÝ/åÆ:v¯F·Ç¢ö3HOœsχ{Ï~vâöö÷vVyÎáÂË]çåæà»HMðÈÙ½6Êjg‰øœÃ<{‚`Ó(2‚Ê¢ù�Ð5„òÛ!TúÄìMSH/†^Æh’Z6ûÞ‘foÕ`á¼u'ú7&çw¼ì3ÁòHôw½Te9G­ó×”ù¶}Ú]EÊ­Æ£ýÆÔ ~ð(±û*°^†(=HZɶôû§öö ju¯p"ƒ¼,Ú]Wéܾ.%gÆ¥úåÖHGBrâˆü‚� P0 ÿ„Àáø4‰ÁaP—ü…ÆbQi�+H¡ÑøŒ*AÉäÑà V)™Ëf³Yt¢C$ƒBdr9ÔºLgt)L5Úôz JD“©(‡GªUjÕzÅfµX ›R™T.©8­ÙlÖz½’“4‘K)[UÕ%“D PËeZ6¾Uèvû¾At”a/·ûZr¾E/ó‰¾+;Çâ°×YåúO8½Õ3¶›?¡„¼^Ï„‰p¢b´:ý†Çe³ÚmvÛ}³°Ý($€À8‹¡Æ(³ù–+“Ž¢]l—º4Fï>ÌÞz0é/^×<‡Åh×LGJ}‘•\%½¿F%ÖÁ{lwÝõ9Ìø}ž¿'»ñåÆs½oªÈÂ8îk¾ÿª«‹Àû¦i‚„·,J©üÇÉòJ °¶†Ä9¨àØÚ@±,ĽI›DÌ»ìô½ñ#¶Ë¼®FÂÃÌóèÜ1o2«­Ë+¼Í£lë®éìH±Hê 7Iz>Š0ޤ„Ê>ŠˆÁ) É"¶‘Ûäü¿i ’¾:0ZðžÇç‰î|à¤1Á¼o:ÎÓ¼ñ<ÏM‰Žm›â$N� *FLÔj’DÓ$ªâ½ÓBÛÉŽ¬Ç(¼ô;E¬\{ÇîËõ RQä[=ÔÔd ¶)û§2Iq²/MÒ(òVš4uªàñ¶ ™ô~ xC Ú€•Od« àÚ@&òT©&Ö‹ ðźqd…¸Ñ‚±[­/:´ HʳžÉÄîD´ø0êDœþF1£úÿVw…,8¶š’ËhÕtú¸ˆU^ÇÕ•HwKùÚ©ƒÂù?µ-̈ÀµCÅaŽmÝXG˜%65ئ0ÎvVI’äÙ>P‚çÑö¤yÈwž”¾÷ó߉ԕ¿Õ˜Þ5‹:ü¡ c2Ý'.wI¬¬ !+,wîomÖú¼FIUC ‚Í4Ãç¨ñli°WWÞ‚“!§”Ú&†i@2‹Ô(›d àÜ?Gk*Ì[JT^’móê3x&VC.Iëc»¿<S?ê»5Uå/bÌ¥[oçQDZÔ{µ*ü&hžpœ’_Âõ½W_­ÈpMððÌGo¤ÔT;6䈶* !èqÒxÞ?‘䪹Yö¤iÌx4ën+Mr“ì–ïF¬ë—º³ÛÚ–Á¦|ºæÊ¿â‡µ«#¶ç5sKWÏ$픳è؇C¦R†‰„=ö¾¼›RKrŽiE D©/#ÃÌ|XÃ0D@¥å' 8Ãé³€Oˆì0wö^K²#s긤¾ó®¤Ób?ÉuÑ?Ø2ñžÃ8aï]p.'x~¹k‹†>h„ÅÒ ˆo©ð›|$BÓ æÅ¥ÓÚáœPŠaZ3p �àÊ7րΚé9;Ëm£¹WFŽßûãs1¿åqÑAH«F#1c†xÜTpé°·&üQq€\nÁ2¶¨q{š‹’#À\ÒÞ´#cjiÿ«†Ðè: ì8&¤TC€p8Èá#ÔB2~°ì­¥—eã\fv­«)èàØM¬0m0ÅûÄ4™&Õ„ŽJ.WÈÉ’¨”I£Žñ%NÃ&4öã¡k`j)$ÇUGHb]È0Œ¶Äܨa‘BSN™Õ:͈x‚¼L ñ„€Ho™›°†%7šb’¦0æ.yòÒD´…ÉÔ‰´4kB”Ä„’²R‡PhjÍÕ{ŒEêMÚHz0î”Ж2Öƒ›b*=GÐú!°5ƒÀJ 'a´Ä=9g4fYÊc”ÆèÙ!¡ËÚA´Ýu3ÕòBê!ê›°©-$Æ¿¹iÒCÁúù”™w”Eu–ƒ4£SŽŸóÔ ch±ÃŽÄÅθ" ‹[T ~9[K»lâ@,…iÌ©m}¯Õü‡P*…�ÄÓÐ4Ù#>$+[ó}ÊËé‰U#}\°yöXõ ÷(<0u R~˜0ã‘’iV•/Ñäfž‰Åv A ˆ`¤¬¹¡¡È<ɸ}Ueܰ™N•ÍÐú³Sä™û©’V×k ®; #63»•¡BOÈ=ŠÑ/BÚ¦Vn!±¢ej<È÷iVh!µvUɨoM!–¡°áßW€¯^í­õ¾ÑHI‹Ñ|ň±8&ÌÜV¾š S(Íõf¤•ൠŸ[âög¡qH‡0Ú['i6:JÅ|MX /(í^·oZTfQµÝ½F j‘ø?‚ô9‡P€5÷+@t9‡Œ]#luÛÄ×{Þ›ÈÖl­ºµPê¯ÏÛQ‰Í|ƆSRª›z‰!®†¯~6Ú¦K„b€Ì¤…šdÜ/˜<xû8gR1†àÜ ÂPIã° Ùñó¸rs8„Ń2É–….…r¥-—0NÏùõÌ7.¬²Vɳ GèV"˜ò «xKÇ8¿iÝÏ­sy¨ºûáSJŠ­ºY2–áð>ÇØ° A¸:YœŠ¨Þñd™!"%Õš®x¦ËbüÎö^e½óK½ÙgYTåØh:bÚÖ£Uªít[zßY}šm$¡ ®Â@,Àó~¼ÝÛ½< ´6B˜—¹êYBÑ <6Á¬à¹ïÜ#4´–ÐÚW-œY!jÃè±{Ã"àí÷w8|‹Ð.ÍкƒÇ3¥´×[…Rjì pQ á#qBC¨vÕfFÈÌ~ªwÕxNžì›9ÁSÞãÈœK+jÇò×Týì£÷›‚8×OEk›N†,VbàÙýz¹SÖ9¢æ:¾/Ñ wÂ<+…ÂÁç*ìÝœÙo!°À”ÇqƒˆÏ­…Üw&áÙÝ;¥Ð½6Z&§NÒ ÚïñK…¨xoCîÏŸx{I¨*Àô#à)h&ÂècíPê¡ë{ô²ÛR94[GA¼? –—<âÚA. Šºï§’·ÝW¦j’žÁý"­1yü7­ÑЊÑtùo ’"­qâ‚ô'Xûüö§ékŸ–ÈOïv6T¼¤‚ø…p´×eòÿðŽÔÎy�ÝÃ{Ow+,cçÊÓûÄæ=‹D)k—Î%Hä~¡j8^Ä¢îŒÛv6OLTÌÈÜozÊÃì¢Z¡ìaô`F¡P €Ú�à�ŽÐÀîeiFoìÂ1ªÖs¢z®MÑI´ÕãÒøÄR}¥}†~øk¶ëk€þ&ž«¤<ð%vÁë>ðcþè§@RˆÒ(Êæi"¹kŠæÃ^{ ºîb,Mì0û€zü0¯ @Á²Àªü  ´MHËe¨…Çò;Žç ÄñN/�‹xÒ‹6Ø®rbí¼¬âàº0ïJŠ›ˆÞëeÊ3eJ—(æÿ¯ô³‹°Ð @øNªì˜õP”ê*ÀÛf ~Â’B!ú` ˆ€þ€®Ð îFúöêºoêŸé£Gw.:ßPrßðæ•ið–—¬’Èoú‹(—ðÚQ ”³æèëˆþ蒡΂+pœu¡äìઠ« 1« ¨ÁÈ ¡,ú¡ü� bv÷1hÅî°áGV¢Nvî†v»¯Œ¨Ê,rÏZÅ0ø(ŽªGÂX`,<à ý-Àð-;èBbqôÛqk RZÏòý1æ›2Ùò&ÚäÈü    äà&`í€�ÿ�ÁaP¸d †Cb0È„:#‰Â£8¬n3‚Å¡üRI%HàÒ¨T:7–Éar™œÊ#"‡ÍàЙ„ês>‹Ìf²Ø8i6¤Pet™üâ‡N¦L¥2ꌂW=¥Õ©Ó;þ±žH«Òz»Y£Blñú-ª©)£?îTÛ%â÷{£Ê¥Ã�ä}UÀ`pX<& ‡ÄbqX¹+íúý#Nk¬ Xêõiõº_¥Ù­´IdþÙsžCë³ÚÅRccžë¨T©^ÂÉ&’ÜôÛºÍ Y·§ã8\:ŒWGºÔÉ"Üžâqf´jº9¸^ÚOž—á¨ñ=”~1ÝâBŸçð@ `œP0X3Ãïć&üD{™kø}xþÌï^Ð)J‚@ä3ÍÛ ¯5¯ô¢´Ë:Œê¼>ƒ5 SJ¬´iŒä:ðì(Ü'Pz€°8ê$’DMóö©CñKB†ÁêFè%« T±@B Í, [÷3®“4ÙBÐküyç±* «è~üÊŒ¥)Ê’«|gØ€G'Þv€  1Ž4f™"ÐØÆ)Ì%#MtÔÅ»r´ìŒÂLCŸH.¬A>EhêPü;Ô O:³“ÄI?(kdÏ20TB2ñŸ¯0`Ž Ø÷Nôê Cs›FÅn y<ÑJ9CÄôMS¤2ÈûÆé*ÐÇC°·DKZÒ¹NIi ÃôiV3k4 ºÕ{}9Õitá[.I…{cQSt.ëÏmÌ2­óEÂî)-ŒuZ®‰§UÅôe=v°.Ùâ|IB˜½']÷Íõ}ß—éð~KDy/L�v:Êu»h+I5—RLˆÅ‰tÇ5tÛÂ6dXÃØ-ãsmÏS\?Wan܆9ÌlåĵmЋÀ®ri“e·s™p\¸»kUXÙdŸÃm&‚œµ­Ð�~ŸçðFàA‚Omû*ÃØÛŠ¢Vl"«ê¤|®[xÎ=Žè¹I?ÒeFüÕ$âæ»]˜îÕX{[Za$'µ f߸êo~·4e8¢ï% ‚øÀIüÇò‹�Ç¡ù ?'qÖ³ -%ùŽ_ÑÝ4‘’Å\!7ù•#7Ö:ˆÔØxÅÛŸF½+k‘O¹E�ãU>7ÕE]Ûãi¶:Î#Í”†ØHŽSKnÄr6 ÚV­{…oiË~€`_¤"Sœ“ˆcf/5n‹#Ž–z•Äfu.ÿx0»môÿŽ�z¯åä17…™FwNà“fyVÙÛl‹e¬'Ø,·4oMá7´vÚ)-KÐG ÀâÂê…P®51Ð<‡€F‚wqê�QÄ¡—1â’´4=6Žü=(t‰ªm"íõj±´qC\kÉ´©ÂŒµ‘lAYÊ¡\¢gêlÖüD‚§ÂAHÌ»”[ÜhŽœ¤×|UG¨ú! ƒ@pEдÄðø”Z*eÁ"ƆÞ}•,‡­Ö1'UVôE…E±E©*‡ôíùš°ÆVêâ?‘$ÌÑ-¢ã—ÅF/.QR°ÊámVíys¶7´ÈÓ:Ë~lQ<Á5Ǽ%q@Ü ÇÉ1æAïãhja>#�`HHØvC[Äc<2dÿªg€ÞJ<ˆæ7AÔ`&ªP’íé¬I¸9fóÙ$,y‘îAàIa(-O3Ãèiˆq¢y@é:𫢇ŠAϬ ¤0A ù œø ž³­ZKQìõºLj›ê´ÁÇ÷ž2Îx±�ï«Wp…ì…x-ÜÈÉØSeS‰ Y+"vÐàä ¦ïò•(’´% !‚bOêSê2#pjÌá€(¥ ñÅf?;è<NœÌªQÕãYh5¨pîˆ(3¢ì“¢ZëF**Æû5)ô2R φ\‡ úŒ.(è «1ƒø4@:Ã[k\˜‘Ur«ik;VÄ¥5TÑk,L¯œHk•¢$×Õïg2l’Déf¤6Ä! {1Oú/³ºÅ_ª “¡dŠ“ÈzË8“­½wéì»XJƒ�6V&æ\ÙŽ0ª U*¬U§øÃÚ$@‹7 “WváIjüÚyV™:FÈK •c¤ „Ê· ŠeÓ¦*ô)¼Ê àÊèÓË4©š5®éwZžÅ¿Jšþ*¹ž«D<cø�` 0X‡�8ÜâªøgW’®tyY™ÝÀvû�1Ki$áH‹ñr‚Ò:#^¯Y„µ÷‹Si®Îo·®¶_Z„B—I 7"åc¬‘×è£R雪![›p¯Qøçðô¥) ‡.»æë£dˆÇô’wY‹`¢¥ö\yˆu4à­èÂdO%cì9Š©™U˕̠Úü\é_Š~½®ÖÁ†ókG´r xŠàÂÜâcÉÈ�Í5˜ZØÄùlªÒ|ÿs4ñƒn™zñߨCdŸ~pV˜ìÊë+wçtg?‘ 4Ù9¹ŽtûÈfƒ€#‚€b àØ!é=±Ò ÅãX)‰á @0œN­“Ù3;q-«pRVºGk¡K¸x™Éîâ*ˆìe²›ê"ÚÌmÕ s¬i€Šjçöî¼Ç † a„3ƒ“²4  «Â^•¿¨I»Ã{n!Ýä©´ïQ†½Úk¬ÖotÌŠ»[ª·k]óU©´SˆÒ5­)¬W·:�ãÄ,Ö£ Æyͦ j|¾±rŽ á“aì^Ïú‹ãLc†V$ðhÆ™#Œï\I `TbÜv´¦ªóÊvªˆeß”ÍÛ_8e_ s¯¯·,t¤‡Ðý€h1v;K]‰‚èEô3öhÞÔ yŸXÎXåš™œsZPó–‘/z+åZCY½±äí}ç¹ o.6~Ov¢ÑJd¶zåC€ ’MiÛ¹y½.(+£)·ã¦¸3³q»¿äéôéUç…ðj;§ÁøF�:‹1:(Pº­3ÎËf¥ºô³ŸNP½éXWϤ”­³{ZWÌm?ÏÄÜω¬ÿUµ3euÇ?kæT…¼¦¼ÛÇyQƒf+á‘@@Äô)ÐÎêüΆÂ%ƒ°½‚ê,ïÀ6…|CºžZ“ë>WÉJ¼GšÍÍdë¯:ú.ÂŒ‹LÝïœÃ®»NnïãBŠNhxå‹€ô ¼1"¨„aì œ ¯|øûpx!€öÁ@AÏ–+ÖMæÐN”û¤þáËtü,ȃD¦ön,½í6Šp>ê¨Ò¢n@ÄÔõ‹B» ^Ê£© Œ<¿ƒë>—J•麠"ÕP:o –‹`¶¬�þNØaz áÏ™ �! $¬Ýìz€ªx±ÌJ¡PÞ®.9¤"A)- ŒÎׯo +"¶Q®È2é¯NÌgI ím$Ö©É,Pûc|Iê ž À¾€‹‘pø!ü.@ØÁ(¡¦`�ɦWípä‚44J'îL´DhÇh³ÇZ¶Ð DÀ¥Ϧ×*ΨϠ9J4–®¦õȰ9ð°hn ±ëÒõ Èœ$gO¸üQБìòôPc å "æž¡î ž `´+—1 €Á9�p²]m¾ëïFe/ÙG=±K"R,¬ ‘lì¼Æºd jkòÇ Ü’p¨ýÆ# ä¬ÛöÍ2*0†¸þ°l ñkò &­Žáö@€àæÁä` ˆ'¸PJ ?´­‹FBÖÐGxÔ®—k¼Á ¿róN2Uï/)¬W%±]ã",Z8m<¿ãœ—p^~Í ¤B°!î ÀTA6 €ç& ! äPa§¡ Ló/±* +Ç-ìÕ p¯²Ä\1”ËD5ªäÕ¤ÜòrYލˆ©n&éRÆÀyðÖÄdñ rÖÇ®tëm\dæh|Víu)m ²d€.ÓpÈÒp@„ ä¡â#,ma$D¤Þl½ó^v3JÅpPá)y3M"ð¢·s­§ÿ�a Ð=�QXÜëÌ6‚ ¡öà> 0€Ê �Ð.ÀD ¼Êɰ”åµ 0ÀFæë/¯6Zê^C„Ì¡ìAÎÆDqÑ#‹;¬úõªgÄv¤1IJÎXnê„’²Äù¯rʳõq¾µ ^3ì/½ ,E…!Ï¥CäZ„qb  Ð àg6ósFë˜!Æàªa�‡�-22ôÐW,¬ÑêâLîö®É0˜ïÐ\PÐá2'î I CÒ³5žü¦Xö”(N%•L$Hê'§D0ªœtÙi(ã`Áö ,€ `®`Z�EG�DÀ¸ÔoTõqâêrJQìfÔîÊŠë ¨MmÌü¦„ñEÆ»lKJ Gu?ÊÉHÑLáô\Ö"¥R(£C¦5JÄ\ki{'@ô¯œÛJ-FA ”f`Gxª!~¡ž !L@�óâ6îüÆ4O<RTÍ„nŒ3XàäWL¨ã vÑ2mbৈÔÏ“³0‘V:rG0ʽR”°.¥a<Q¨GEŽYmW h–7äq ˆ¢–gfu’÷L¯a±#Â_'ð !H �ø€/OµzA sˆ²2É"HóR“$±äÄÇnNi,â¤IÃ/mjÏs»-2Ìɵ9I·;“—“½$'“t¥‘6&¥n TiWu{giæ|A&¡\š BÐ éâËbé2µØðµ MÆ…PÖ£$ðÊ—6¦Ðθ£uNc^‹uÁ^Hš qâÞm0»§é 4ÔåP9оêÃVðÏš¥q1æuô©/®¬ýöä"h H Àú”ùg‚ AŸ±*Þ41EÚ‹ª>.‰¿‚(µCáC"9lIQ08‹1®zM €0B·+N(‚²X§P fw5T-<b+F `Ô Àf  w¨ølÁFÁpš -6e)qÍ#Ó'UqJ-° ̃Œo}1°ÐE’§)’Weïªë¨z5Õt/m{q6l¨÷ VGAnhþ4·e·¹I%ΰ$ÃÈíð@Fa€È@,}pá 6ª²·�·Ä‘ÄTG0M*PŽýUµDvX+WUSk~ïUÉT´ÊD.ï¤~a þàÅfZb;$ÆLìýmÌ5In‰ïm1(×&Ä")‚šZÏ?rW»mÚ4/câ1b @Ö Àew˜‰'aü –�èáÔ��€ ‡óWm6W}©‡ö#‡r+US8Ò1+´ÚþsµMrÈ&zXüôÓØS4µ;)÷ç:Ge#dËbPôò@ €h Àîàº�à�¸•€@°¿ªr·Fs+$g­f„yÒ´X ³nuèÀ5¤\ ÀІ³÷’˜|åWf7c´¼7<õ=Ž8Z³þð‰HTU?*L‚˜LF§BÜ‘I|¸Çijó6 »_v æÏ$ ¬‚ ” ˜‰šeòÁÜÀ’�ç‰÷7¦5B<C2Lpv= Œá)/Úžu›Hrοgõ@Ìa;°¶Î;cxä8ð–6rŽD‰Zñ’5Rî)òôí!÷a�F@ˆ ÀvÀ]š‚a åI5Õ*{+.~È=ŸR›iÒÔ59φÊ1‹µ)>ǧcT©d·_lQðÏP!9’ÜínV㕇x&Ö¯TƒbÑ»Yz…YQTûAþAòÁ 9 Mÿ¢Z NÁ`Á‚ áb �ÀmUéA*U“5[3 ,ëdøyb”E”êK3wE¸NÄú¹|ym€éäô¶>® ;—ôÐ)ùq Öñ?„;n™‡Œ¥k‰†�¡ö!�SàÈ`ž Tà�‹­ª"a Å[RíSn¡\¸Ñ}©92ëpïrp:[î™D8gqí«Ug#¬>ïºí+‡GZ“·¦V.d7K¬¯O’#L^aæ œ¹ Û1¹d¤ár@Áj «u«!—*‚q¤›Näªs¡'o‡ÇêhËѶåItd0Öù)4“ŒñÙ#r:Ý–u²ÔT[ Vf¤›!X˜íAüƒ.� :à.@* ¸�’�: ²Û˜# F€ªÅN+QY÷ƒ,ôêø¾aš >xù˜1¹:åû{X¾I<´˜Å[Å»ƒ 7à”9jògîwYë†Ô„B¡JãHð“Cuñ†@ ¡ò  P€f`S¼¨8G¾ HX¤à ŠÃ¾ñæ@nزëÅÔQkññÌÕ¹rDó™€5#ÈÛ–0ä3ŠÄÍ»1+.Usù0ÀëüTñ¦gñ—)ïÉ"` 9� &ÀB 4 :Àh`U=õÊ¢eÂà©‚L?S„_ÔÓƒÓ÷ŽºßmYùoZц@.áè�˜ ¶öuÔy×½}×ãÞÞÀ@Üí!ø�hô^<¶gxNou”z1:a5¶T0ûR @�è`¼ÂÖQ¥÷ÂÍúsµÒ'M|T&ÀSÁxª2à‡]€0 F §6²Qês’Ú|¶ööX<b¢B FÀÔ `g¹]ãá~á¾"!6¡^xѺî}`ÛR¾ìÓÁkÛ §k2 y¿¾B°!ì @TA* `ñáþeª�HÀ¢ÀZ‡‘É!Q±›‡C§X‚ Ùáæ~‘é>•‰@Îa A°==Åëš¾üRú•+‡D#”s&TòÜ àP0 €÷é~Íg`Hà ­÷ã7:‘è^ˆ @d þÏî¾íîï†áð@Œ@Òì€a¶?ßcõëT‰ç<YŒž­¬4 Qáèaì ÀOì@˜žñó1qí>éã­QKµ3TrýÚƒž„~à ¾åó¿5õ¿]õéü¸ Â ÿ«  ý+)VUÚlÚÎ8ߘXÓQ´JÝr¬D¾T ÿ*à˜¿aú.~!èûáŶÛaùw:½JFäOìT^×ú_ÍüÿÐS±vàÀ�öÁ¾J°7®="ª-Ç"Ws �þ�A�h.‚Â!PØ<%„ÅaÑxdB‰€^¯§±<NAK’ϱ‰T®Y-—Kæ”Îi5›Mç™Ôîy=ŸM‰lJ†Ñgˆe*#¢Fà”Ùe*ŸªE"thÐäùz!ȆãÄ¡?³Yí›U®Ùm·[î•Îéu»Z)Hg~¿ß   ï…ŸÕãU¨´.¥«A£˜¸]Hˆd"Qç£íîOI‰gì6I¥Óiõq"H™ŒÈÆhºüMc'µÊÆë(®ê;ދֱ¹¦ïiZ®×Èfû—SÍçsú—O©Õë\“¬õií~‘Á•n¾â·>ÞNð`+‰KŠìx~M¾K€ô‘IIrV‹Çýÿ?ðú’BZVÄ*ïJà7l¤õ6¯z:¨¸0ƒÖø·Jšö=0Êx«Ä8„å"ŒDñDSEqdZ›géö$”ã9¶w@8½Ì“˪°\€ó¼Ok1p¢jÈ*-ì|á+p´#Hˆ#_%ÇcrÙ¡) ì'ïÈ’?ÅÓ$Ë3Là�JI‰KKÃɲŒ§ Ë :Ý#Š‘þ+§© !ŽaÍ% CPôE2˜Ç!ž,•Ø �¬$-NèÄÝ:ÉHtƒ'¾rª "­@ŠOQ䶦%• +K)ÈŠ=WÁï¥i;=,­BÍžâpM0UƒaXkxJJ /’[!¦Zef¥p̳8# âºyÂã@ŠV%»o[÷Ãq8Gø¼XŽÅùÀd`(DzJ_gÎvƒãLIÉÜgÕ »#yÂH¤)KHÅv'³ qáxeÄ¢B=,©¯„± Ù/l’ŽI’BU Ùµ" +½Ï^B8ä0ƒmž—eù†c™4f!Æf E€ä�€<UÇó­ù9U”Þ7 ¦wý àwÂÓ*u삾ÉL!’ÂF™ëzäPÂ=Q)é8õ6ɽJ6àUz¯~¶Y-ÞƒÖ•-§’ §‰ôze6Ð_–ë¼Áp|�Ø\%q²\ 0‚'wŽ€˜ÓK6—ÀúŒ"—iúmkK·À¨'„¢&°ApGRÓkâ6‘©s¶¦²¡ÏéºÒ×øÌ"òŽ'«Šñ ŽcýÕxþG“åEáÞpŠEhÒ{3€ùw§/ÌÞ½†ÇOó*aê}ËÁ.®#~ÇÓõ'1."û1>Ó´`œŒ‡Î�6± xx©õ¿ø�`æ áxY‡1~8F8 q©,Ë«¶ýŸ¢T.ȵ9Bf•ÈŒj ™Q”òÜÒ;~dUñ%àHé_<…´…‚a0’@&P…'&˜å’Ù0>ÔØ¶.¦úb‡GŠÿ¡tK‰‘5õŒaÊ3‚ȱ ¬ìB^ä•2ž{n½’WîìR‚HÐÚª¨r§+*¸ù;vêJ˜Ò8UÝ·2@øÂt)ÁBDé�òá€C4­³Ã”èÑ LCoq0‚à« d”“’Œ4}áøŨrcŒe�  šzW ¾CBªãÉ´§^îE§Ad‰*Íó¹6†n:PŒ!d¬»p�œL„&ÄpaÑuY¦ZÃG4÷ã;ÀZàü:Èù#/&”Óš‰RQ^ø„àB7Àœ&4àc1uUEþå ³Gl’fKã Âh$¢X"Ë©«>W&!¢½åS"Ëg+m¥¨B(zG_œ^ Ê„?t‡Ö¸>™à¸+Oª1FhÑÍÔu1`Ç8ô@;BïIr«b®>;Èâç ÊMŸäÑÌ$W_MݵYG .Ï9êD5¨Š(  €ï£Lïi²µi–Å÷< ŒCˆ ø;[Eê-[«•t´áˆ#ÐÑ€D�ú ÷fT\sqz€SZ_Ô=/*…"yOA,=^¯ˆ¸‰ ~“§]jfäz±V«í‹±–4†Œ±Ð4д j¸ÂBmBìɉZIâ8ˆ5JLcq´Œõ«iI\—Åš)ní8§Tãh Ë®$ªy0^kÝŽ·‡ô‰°|Àc„Ëw‰ÚU[ZWM)äŠO-¸˜¿{bhW··VëQÒ=‡X[²ƒpx ðtjZRª¦»&6ÇÕll«Í‘ª UÖ‹ŽéI›Aqn3´Ž÷ÞѲ2?¬K¡:Ü Pˆ".¾ :�œNÛͧ46¦ìNsj¨!Aèx ²ê`ÌAˆbhrøS q_Y€OT-º6f@è#eçsøÑ9JH6ÐØÅÌvgD)Ö)D1ꪎ8FÛ>0šÂ8•x+dó ƒ°…,6 7:bÈš Œ  €ü%‰³ƒ"èœ;‡ò†kÍY ÑrðxW‰[ûÕr æzlÓ„ú!vÙz§Ow÷¢ÙL—o¡*fJ°œ',–ÄNmÒ…À‰Ðy+¡ûB*y cZžL¥Hêµ\åˆñr’”¥+1­¼ÄPyš`XÒº×[2ñ¾<GKál}áô¥ÝÄEљ䇦=rHH¡ Ië} OÁ@žy®Lµq¡óܘsžƉʆ-:ï" äyPw¬‚ÎÑÝ›µD«´EÀjC¼n€€5,4ˆ;/Ó èoS¼gô3 iÊןkm„9ä‡e=˜„Vîâ„Ø ðu± ¼!àÕºÕJÿ…(v Bety@xƒ+Ý|W—rôP�z#hXZ)ÃÝ^ôúälm 1b{jjºï³ß€/Y-nŠÊ”#ò‹™mÄ£óe""ù‡[%œ\š‰Õ¿Ë>|"UPB¾UË:çkí‡<>Œq '† ¥ÀôGpÐ]* Xœ\±Þc¦‚Å»n2f ËA;þŠ|ƆÐx+BT!èø¡²L²JßÊA$J„µÛ}(V¥Œ‚ìaÊ6Ñ‹^Kf뱯"Y8d°ÁÚ½»÷…ÌYánEðt€˜+0زÔÁ©r+/ëòdóÏŒ½“ŒÉlhÇéúŠ O·V},ÁzEKW3-ÒØÑþWÝ”ÒØ&ùß?è}ï[ô€ãÉ}{“ãþVI‡8ü�?ãĉk;8=ƒÓùÀ\ ø\^p`¸…€!ë>aX›A‹¶Ó¾º,;Û/ëo½bD˜Ò‡¥Bô8TšS†*‹†/ðòˆ€Í‡«G‚HJ�F@k—½ ©‰%+æ1cÔ±Ù¸¯Ñ "´¼À̳ËÌ b–2Ȧ"“Ð>@DAÔ-BØ—…Èp…è6†�:ˆ �(¢¼ ˜“ĻҜ¾kÇ¿~¡Ú,·#>¼s º|�²ù+' “9ƽ¤ÁLÁ¬„l.7p>Âæ|$›2ÁªT"*™>‹§;ùOCÄ"Ss(è0@LDÅ,S@|† 1“Ô36€<1| ˜âC²½ ´9콊4šcþ2î ’y DE3h@Qª·ÅËךt ÃD‹CW„ ¸ÜcFÜ…Èqà6ÅQ=C(EsüÄs‹kì$9Š,ë/8ÑŠ˜¤iÆ‘¢Æyi£ª„#´ûçˆ+Í‚la „tn5°…E“1A‚šÆ[¥ºçF“é’£È8ðƒ@,Pƒ�ÆÔƒÈû­Àx]ƒpa¢R)0<ˆù0ªÍ¥3AGTIƒÿªƒlÇB14ІÈ‚T‚H43h……¢Ðç6»×H¼�Äs²‡Ó“ÌQH.Iü©7doG�`ƒœ2�0IJ/Gœ>Š& U¼±µ†D޳ÔL¼É±œÃq˜ì¸A ¡ÇYQGò3¾ë0¢ûÇÁ˜&žøGÊ›5ÊÈ‹O²§H‚ø<<)™ŒñŽ:rX‡}¹8ôŽJŒÁLÛ5…€o˜<8> ür�)ß<‹;¼»MJT9F‚ͿܜCì8ÅÛ…+Jº1Í”A²ºùøÇ2ã÷¾IØJðHLãPRœ•Cظ»$×JB›"ì* üÌÎDí.¸>†H@…�l:³¨�€½˜pzw?ô‡#(ÅL\ŒLT¹©¢cÆŒ}Ë‚ÏMk¼\GÄêÑϜ˙»­\K!) Kä¿N,ãÎÛHR‰íI¬5M»ýŠ×ÊH¥¼Ë‚¶ôÚ,μìÐe*às‡°tHg`WèX>(Œ¨EÁÎz§ T «dz£ ˸ü£ Òö:$MÄ—ÁX¶P@%ÐU®°…-%‰ÌPœ£¤K€<QLE¢×Ç{ù·-3m³Q�í%Ó*}àx†è6†8v˜�;ɼès„:c"ÅŒ¦U¹QMª©C\ÝK“Ó³"dA ”Ê× “1#ª‡¨&$èHÓ2ÞRh4_Hj/I-'YWMD=64ÉQàóÃøÇ²,ÊA¸@1ÔµY$ [‡\ƒ c¸|à{¯ wS¸ÇÉ‹ÆR3B¹åBwD�–¼ÝHÔJÕšÅPS|é‚.SêC[?=”œVá“ÊeV„ XS%hW*„@gPO†ÈPÇJ"½!Ä¥NHµ!Q”f¹ lP¥>V‡žÕD¯Ä=WãpU- I˜÷V`Ô˜IW2¾V•j ‚ k˾Y9Œm<¸[ÊH‚P©·Ø(ôÕXAµW@/Xe“]4à@†`A†s€  ëˤ³Y½n±ä¢ Œ¼CQKÑâýÂÃ9ÝD4[OØ´7ϵbVÅCñ¥H‚`Jå…Ù:­PSspט¸ÖH»Â¥×’Zµ²O†ÀP€iˆx‡ØxÙ‰Ç-™‰”ÓÄÐÛNÙÝ{ ´è ̉ɴGMo;ëð±øzàzh‚hIÚ¥²ª%¬j¸CÍ!¡å ô–Röˆ]°¸A�Ù-ÆÝ ††ðyðJ J…HnIÆ�iê€#ë¯y¨¼©Â=m(B.² Ü/L #T‹ÎiŸ)êá¿eQDÔ´Ë] ØÉ­ÊX5 D€€ø&\XIÝŒÜ|]XÅNGÑ Ü¹ï•ÌÄ LU°µq8/ÞÅöõ³„øH¶Ðx`ðÃ¥|ßÍ¢WÅîO²™WìÜ•b¦CTl\ÛµkÁDL¸M;H©×(`ÍÜ=ê\XJ_j|ˆ�©P,�A`Ð` ÿ†CaÐød$ ƒ€a/ø¤>%Ä#P¨tv=#ƒ¼Ÿo$Õ`—ä’ù„Æe3šMfÓyÄæu;žOgÓú…C¢QhÓ¦ÛŶ‚f ˜.f( �€‘€ŠŠ�c0XÝz'ŽÇ,–7ýzÅ]†BâÖØœJIi…\¢ó«¤v/i‹Bí7ëÊA]ÁAëøL&×"ÅWàלujÁpÄcò×i•b³›EdGãÔš&$ÇiJ>§U«ÖkuÚý†ÆF*TŠìU›^c¬Ù«x v{y[áð¬Û{,Fë’c-™i{Éõ( å’í—gµÛîw{Ýÿ‡Å°s=œÉ–²ebáX</`hÅ[x9>…1ºÊáÿ Û"‘¹èrÙ® â·0¨| ΫÐRüú®oü›Àpl ÿ¹ˆü "póâ@0"Hzm>&´ÍCÇÅÑ|aÆ  Vâ!±nå1ï»9Á¬Ci“%C­Ä?"G‰ôx©/¥±”©*ÊÒ¼±,ËRÙì~ÅY¼U“¦Á8ofð€Ñ 8ü¤r*bÆHi¬€ÞAi´ò™Î´5-·RDõ2g¬N&E$˜uPT}!HÒNÓh?r ¿;Ns¼ÆÓ­ë&Í? Ë ²ÓÐÀçÎ2°·ºN¡/„Ã'ZÖÕ½q\×Miˆtd9 CGi¤€€H€èÅWQ¦Ì-›MаsŠÓ‘ì(¸Ô ô3Û22!V°L‹ >‘ëïÓPM RÀö…l8Wd÷NW”Š­Q­D­w€àXl•AM®OK½Áa¸vzÐÎ<ƒUWŠÆI’t¡YV˜&AäYHïW¦8lf!Òa¬�@Z–£"Zù-­jçÉêЉ€õý€gz‰¢¨86‘ÓYªx“%¤£YèÚž©ªêÕÆO”“YaˆçíŒ\ھɲ¢íù QšͶíÙ&‘mÏpÄyˆÁ‹eáyÇ/í§�G‘´¹?Ø}âÕähBãÛÆñÜzh}ŸÇÙ’uÖ¹¯l�&ÅÂrþq´gúAÒôÒ¨VU…ÇNpú…d0õ½ŸiÚ×WÙZp…1¸RÌÆéø–0±öÞ>ÑmWÿ‘æùÊ7SÕùè_¨ö^Ÿ±ìûJ9¼y¥Q¼T—ç1|kž&¸�à0xÞßá-y]'ãúþÈg£ûz½ïþÿÏÁFN*F𨣰fáà� �À?ø$–›k‚p]ç?—êþÁ3׃~6d̘_½¢ôm°›�"É} Bd‹à«Ì†pÝÇÁ§ã ô8‡ÐýIÂ1„9Æ&£Hw Þ>G| ÐB Eà [dRŠÍ?yâä];‘ " ÑÍÇhÑèx�@ VP†y-#æ$ò"¤pŽÌ†,½¸·ãä}&Íxè8F aÂñaÆhÑ£d/†1ù+¡ò?‡Êl�r0À=ˆë$$â“/j=ÉÙEÇpùФlŒQÐ1DƒÔqÊQÝ#!tn‘ò,‘ú>x�Ø ƒq46Ã0/fMˉ”•ˆ€ Õb€ „BaP¸d6ˆDbQ8CÉôòA…ñ1†)HdR9$–M'”JeR¹d¶]/˜DßOçÓaà×g»ísA”êd¹ÞÎwëýø©�@1¨TjU:¤•øþ«€Ë‚Jé¯741 Àð(>«g´B^¯Ç©0<MIŽ’¶›¥Öíw¼^oU÷—E£¨ä{‡ÄbqX¼f6U3š¼ çc5¤íh´ÝÍ'ÙÆø~> À€"˜ÇjuZ¸M]ùE~£‡ h|œ§n©Žì£¨8 ÖpmvÛ}ÆçÁäry\¾dûÍÖ`£1¸ïC­×ìv{Q÷ÿu¾ôoµÝíf›½§âk9žÎgÑÄø~è  `(�€?=¿çöH~(̓dG‰ ðžƒ7 Óxß8òðá­Ë‚åB¬,í9ðºòé0ެ5Ä D…Géôlž&ÉÄz&©ÞjG¹ÔjEçIîtÑà~ŸÇè Çêrü?Q ÇúhšáÉ#‰ÈLÝ·­üލÂ,'+Ë’ì¼”C2ú¡:Œ4Å3ÍJVnžFáì~Ç X›ì’uÌLpfùösùö€R�´êh5QŽÉÞ}ã N2!™†Jp\­F¤ÒÌ$ãÓ• EÌ5M20µ5UU»fáämÏGËò�˜ÇQŒzG›†efJ �φùî~Øqìþ}� ’¤Ù4;ïYÕ–‹”xŸGˆ´ d8jDÑTÃs*A–’'O8×Ís±Õ-ЈÕõ×wÈæüú @ËH$RIýWj)üý¡‘‰Ög¦h�µBlkNGN‚Ÿóa»XÙ­ï$Ÿöh ¤ Ò›h^ YjZÖÁYLʰnD„\’Þ_™æ‰}Õš ÷lÍœgŒAØ|†=ložFôVqG‘´üa ºy›ÀÀ ` ‘@å\n6R4/‹õ€ À&ƒ©àÿ_ãÖJ ¯g»‹S’ZâÞO”ȨŽYpç™A¹p ›ç¹×ên€c&+pSÎGÔs5Í>Ìm{[æ¤ë7ÒEYã`6òˆîGLë_L¶‹›¿J‡ïtÞq¿tý®åÂgœ7mÝ£çYðu”†ÙDUÅIÑô NÞy›“\Ø !´@†„_½[ôÖ]šöžo½u÷Çuïûì,k¥IºSœ§±Ê€`L‡ò~™åÌ‘a¹'ƒâ‚Pì^Û4{¯Ö*7ÂÍ_tÌgš hì€)«?8ׂ‚_B4ˆðœ‰\�g° BT¿Ù¤ „ÌÑ} 1¸(„(Ïhð~€a\9UŠÌørš�ßÈ À}’ØDßKb\°ê&"(PÌáTM\ê8ŒpÞ,‡°`6ˆ¥ÔàócÌ€ðPþD`/`À˜ÄwgRÓŒÌíÄö_c¢£PAÀc†è°,@pÏ^<ÈT@=GØõ@À¸‰@:�ñRÏr8)ù %΄vdQâL&tJ>CÉ"Äp �‹4•H]}#‘à(`:pX©É8%b\«—K¤¸y9.Ò¸™â\@Œá�€8˜,íÐ@g�°9,ÒÓ-™œ$™“l¼É¦C/æâƒ a…ñ€@8�ëvpÎÓV›Ç´§â%ó6|ÚÓì©Íåá8'áÚŒCÌ)‹° 7š‚÷ 4,¿¯©à #ZM@„‚ÿ>ú¡”l•Oåß@(áÍSN 7 ` !¥EIA5´ÂØ}AýИŠ0ÈhÕ+§D~.ºANÍRòá8\„¶³ªI%cÜ~zP¥DCˆ¦2›¯ sRªÁ §«¢ŸÕ“`zchP€ÙW«A6 0f$p ¢¦®ª®ú¯ZjÍ[\õv¼‘Þ>GxFá¹zûaÈULçÐ) ÌXm äWU×]ìE;¯Kš¾Y’è'ÆÐžÁüEË=aë\‰@PÓ ü À 4:YtY‹OHlÚâ³¶Ü©9Ê0ƒ½Âñª€»yVlU“ `œ2Y�ÝdÎÅ´\öÚãлr´­ÝÕ&È} ”-Â8ì#²Ã]ª8k§…°aò™Þ£ýt—5ԼӺ뭳|É`È#/ ºÇø›nfDP&À˜rÁÐ*«t¥ð\WËM»ê«/¾%°o ©B[æ™gÀ|(°ÀÈ@€Ä>ðZXSK¼.ªðÎ5$‘T7‹Â+î.:“»` ƒ, „”¹Œ–Ž4ÈRwª¬s”É�j [ŽAmrÄM_CÐ~L%€^ @¨6a»”fRÌ2*ªl¯œÈk¡¤[1k˜3ÄÀƒìzZPKÂØ\¡xIœ^rÐ1ƒ:ª<ï¤ÈvzÏ™û@i‡vægƒ— dÀTmX3TÚAUi-=4ª¢0SÐA†�Lµy,ÓY÷?€K®]2ÇÀ�à2Ã,Ñ�X.-X©ŽI¡(K±1°1´½pFBƒQ A(_Û¤°†ar9ÆÜl‰Ì±bf>Á°áÔm–W†ÏTyz�JD�3[®UT \»™f«éE Њ,#('à„˜>ŒÀ÷ … �€3‰®@>ǵŒ¢�Â!… ƒçS/ßJЉ€x&¶Jã²\‹ tï‡]Hfkéf‹`.@ø üÌ‘‹1Â,CXÆ X‡¢*@œ¾(ámîà Üaäe‡rÉ*_Ý8ÏñÿtØè0nã€WZ^8Í(ú@8аˆ+@h½˜ Î/àVNBwÄBlxõc`cu0PAÈNŸ^ь߄8fŽg¸‰Ð~'Áðþ0 ¬%Ä0Ðç½³IáèAø ‹Òr;Â@¶ÃÄ}uíPÑÄ€Th>‚0àä ù7˜z‡(Há×NÆBÖ}`» "ø�p!ð"hËc(, Эá0 "áè‡ÀÐ COà"i$~†rÄ/G(¼‚_ù§2©ì_ÀJÀJ�4)` ’'ê߀¬€¦â‹eìH‘aJ!N¡Oú…i਀˜!æ*]ç< ¡bÁf Ð:"gˆ æ�âžP^ � ƒAá˜T. ý¿^¯Ç¨ †ˆD€é$$‚€€¨dŽI%“Iå™T¬æÈ8«[êÀ`+›Mç™#Íôò0Š h’ uE£QéšU.™M§Sê7ýMÎ@' °pQ¯WàÏgãØ„!¦G©°`·[î”1Öøu”—d÷SÝÔnx …•ÔßÏwëÝýS ‚B¤ é2:H…ÇXlÖn¶q­M,C84 Îi䑪ˆ€¤†Ú–ÏiµÛlªoöÛŶR^߯çèÛéÞ/·’Xv–&‡‰ü~—O©%=³JFÒ€õ|rù>OçØ, lñáØ`v†<šM‰íx'›§‘º€`;ô¹éðAqP!•`0@Ф+ Bêcr&XîS…+HÓC ||à`@XˆÅšfšÄ‘„b¥§yªÿ-`ˆãFQäz¯Ÿàþ}½Q3ØÁazÊ!ˆ�Ђá<})$dQ¢D’f©"»Òš”xŸGˆö£@T4˳DÓ54ðÒ�¢ir% Gûˆ¶Íi<€Ÿ'éòL„؈ ˆ“Å 5‘f‰IšÄˆ«´5#4ÏR÷>+ð ¡t ‡l–‚ÁÅ%HœÇ±Ì&"Iì}ž "ÿS$§Ñú}`@&Z‰À$‚UƒaXi$Ú‚&¡!*‘�:Xˆ!è}ž‚(8#aé;h[p1à|žX’½@0 Û—CdÆŸÏIõZŸW( Sà.PB(d iEtÏ¡ªI‘F‘G;÷úy'¤hB‹á0Á„âx¤¥c lQî4c1„s˜ ˜=XO1ó#B1h€þ+—6…¹Æ[ ÆÉGY~r¤Ÿ‡ùùJŸSH°eF†€ k}_‰uBÝ¢Ù|,™‡a—#Z���žgÙæƒB@”:Ìw§lûCm‹ §êq EРxGx9 ‡ úJDºÊ!m<# ,Di¤EÅÜ/Ýt­Ú� # Å�† ˆb2! xMÇXF™Üi‹eø±Ér–€~EÅLÁ'GÛvë†Öƒš'i 1˜CæxnÛă4ORùà:…ÃÀÞÇ¢° &¾^œ¥Ú·„zVõ×]¨E•ƒá°*"â@ƒ¿¹n&`Üc €€k:Í u뇙: ðŒ;»¢ïóÀxO¼£öÂÇia¬>&8 JHò9Ll3 AÐ0ÊÚƒHÁÈ¥ÚŽˆ€(€ V¨F€D@ _Ä%])ée‰Vw@t;K«¬Õ<°ìXn‡‘6'˜Bƈîa„vq؈ zDÀ$�Ú Ãxfž'Ærnÿ@Ä £sŒ¶â$h3oxÆö¥\™í� ,Gæ– À¨4¤%¼c£g#DC‰Q¬$Ús„ÃüèòÃÄJ ².OCÈ¢HÝ(Ò*¢�cŽ¡d¡à€d‘ DK‚“òÔ“ŸÁ,5„¨’Y2%LËd2]s{u`À_` P™pv€@ŽÑœLl"ˆ†ˆPÇØö…Ôª&‰*&M‰Ðôe %AÜC  ‡Å*ë‘2¬Ó±“‚?x !䇰0Äé „ŒRÁH#Ƙ\gtÏiÓ™ä–<Ãè¸öÀX@( ‚p Á€3  €@&‹AÄ,ÃØË0py5sÀž‡ª¯  ˆpl"WÅ.¨Ž6u’¨Ü0ðÙƒtŒCsJÀD×0#Ü~À�?˜„ –‚eE¬„Œo1¾&F¸˜cxT$��¿`Ìvd�®ÓpËaÆ�P¬ÌÁ«I@/P{TH¥T²²Î²<FÀƒ  4q"M©üOE”"ÀbØ"±ö•Trr0øŸ©ƒAÞ¼'&�Ëð…e!u³Áø¥íŒÍaˆ0’‚U´×‚‹ÑÌ/*X#¨d)T"—ÄReNÜe/íp\ ¿Å×3A’F´t ¯T\+Gã'¡p8ެ­Pe¶TE)p]h™ü€.mðcsJ÷`v)j @Þcy ®/�Ü#Üt䂺ÉETDTt X€ˆ(7 á¾¿œŠH`̓0^=ˆÜ0Fàòj\ã�»EëíÔ)Íï µ*ÞÈJ8 �R°‡«‚t«`Òo€³r§Ú.‹À(V@îŽ*Ë„šø3!@6„ú4¯ñ]W]V§™ Lj °˹Õt`¢ ;ÇÈïãÀk`Á¼5ÇxÖ—ù�õZ:@ ϰ@4+´‘&·Hvvö@öö¸h7Ð�9ôâ&ÆåDÆð.µIí!3æÅ‚©–@ÓÕ|€`È•ÖЯ2t®çIëòŸdFÈÀÂøiá¤5xÔÓc™J×l„BÂz"€W ZÁh/@¼ƒ5]®ÀÜ‹<n]С‘1ÈÔzÁé_ ‹{àf ^&é߇V«}”4Ñ2_2œco" §äßG°epWT·ïTÛŸŠq~1Æx×ã’‹qÞAÈy#䜕YñþMÊyW+圷—^QËù—3æœ×›s}dTùÇ;çœ÷Ÿsþ9ÌzCè£txKкGKé7§t÷»Îº‡SêW«ut}ÒºÇ[ëw¯uò—Ö»cì—³v>ÅÙûWkí·ŸöžÝÜ{—sîœw¸w^ñÞ{×{Àýß¾wÿà|OïÞÃxâm?Rñ^7Çxÿ!âò_‘òžWËytÕá|Ç›óžwÏ;Ÿçý£ôž—Ðy?Mê}W«õ„§Ízßaì}—ˆõþÏÛ{qÜ}¯¹÷ž÷ßuwïþÃøàü_‘ò~W,øÿ/ç|ÿ¡ÅþoÑúŸWëb¯§õþ×Ûû“¤€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQÝN­W¬VkUºåv½_°XlV;%–™U³ZmV»e¶Ýo¸\nW;¥Öí´]ïW»åöýÀ`pX<&3yÃbqX¼f7ÈdrX\FO-—ÌfsY¼æw=ŸÊçôZ=&—M§ÔjuRݯ]¯Ølv[=¦Öå­Ûnw[½æ÷}¿àaà|'ÇäryXÝÇ/Ïètz]>¤û›Õìv{]¾çw©×ïx|^?'—͘ðyý^¿g·Ýï¯z~?§×í÷üIþ_Ÿç÷üÿÀƒ÷�À, Á Ál ´¬- à \' Ãì=Ä 7Ä‘,MÅÔGÅ‘l]Ãñ\aÆ‘¬lþÆQ¼uÇ‘ë·ÇÒ …!ÈÜ"ÉL•%³r<™'ÊŒ¤¾ÉÒœ­+ËÊ¿*ËRì½/Ì ¹0Ì“,Í3¤ÓÑ5Í“l܆MS|å9Î’üã:ÏÌõ$NóÜý?Ð|û@Д- Pt=EÑ FÒ$öQô-KÓ­+LÓ”í<àStýEQÔ]CRÕMTô8u]]WÖ …OXÖ•­l¸Öu½u]×[^Ø „º×6cÙ Å‹dÙ–mœýWö}¥iÚŠ—jÛÍ´ƒZöݽoÙ¶íÁqÜ•íÅrÝM_sÝWmÝOÝ—}åyÒ7é{ß í|ß—ìç}ߨ2à ƒÊø.…á’N†âŒw‡âX®-☾5Æ6Ž9äÎ3ä™, ‘äÙNTüe^]—Ò˜öa™æ‘6[šç˧›çYî|ãç™þ…¡ÈÙ–‰£é®ƒ¤éškI¥éÚŽ¥V'šž­«»Z†±­ëŒµ®ì ‰£l[.ÍYl›>ÕµéûNÙ·î¦ã¹îŒÎ¿ºïÌÅ·o[îü»nûÿÁµ›ç Ãñ €?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œL OùÌö}? PhT:%G¤RiTºe6O¨TjQ���������������������L8�������������������L>�����LP�������������������U�������Ll�����Lˆ�����L�������(�������1�����L˜=�������S�����L¨‡s��� H�L®�ëB���icon_512x512.png���ªX�­f�×P� _�5y�Gà�Jî����)ê��5��)��g�����`H������H������tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ð±œ�rœgø€‘ª�¤9üI9ø|€I�è�@�F€ À-@Õ ™¾p€1ËEQ†q£L‘T˜T×Íu]·çáð�Ä„(yü}€�ð>�ƒ ÛA«&¡®“¤éþ \Zæù¤‚�è ‚�ÔWP€ ˜_…ÁØ�"ˆ� ûL#p€ y}©‡Ý>§ñø~�� ôVGùÂj\És_˜Ž%‰âŒÝ‘O¢øL�h} ‡í~À¶*ä • ¤ŸÁcŸãPócÔ'ä�†ò •¸ pÝ)Õô}žè&‹Œ!0�Ü ˆ"�¤X\!xY”âºÊLfçùây€XéPYù­ˆ  `�ܺµ·îŽäÉètÀ�z çè�`�B€îð8Ž l€x`�€ûjÉ•¨F¦�Å1üj n€+_à�h €� H<6ˆDbQ8¤Vû}ÁŸÐçÈ� �L€Iœ#Å¥R¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:$˜Ï�'“ïäºz…A€0 5­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nW;¥Öí3Fß±L�üƒ=€²¨U).�Bá]ÞXÿÈc Ìö“ý¯—¯÷ƒš … Õ ”Ç"üv€¡À4œ8@"ÑUûK·Ünw[½æöîÞp� Çú@þv½Àç ('¾ètz]>§W­×ìv{]¾çw½ßðx|]j›íé�C`!x6€BA0€=ºÈi.,Ö€>ã’¤â À*�ÓÆƒ#b ªŽ£02 €LÁpÌ5 ÃêÒzž  GÄáFG !;GFŒeÆ‘¬mÇÌuÇ‘ì|ܼ«ã��9@ÐJ� BØ>€ª®ïÊÜišÇøþDåù~Îît m@� >âX–�ŽˆT¶ÒüÝ7ÎЬp`HTäñ<æÚú€�$NT- CÑMEÑ”mGÒŠŠòŸH3ÎÈã:L+Š`<õ®2’ÔF‡øê9#`LZÊ$}JAʈî4€C�À�…=%]וë®c™l ~çr ¡VE}eÙ–mgÚ¥iÚ–­}£ ñ1ƒ�nX€a^·ÔK”fÉYük‡ø©€0%vÓ€�8Æ•¤ð †Zإǫ+ ÇñˆdŸç‘æ…EN ‰â˜®-‹ãÎ5ã”3Êå €� à =€!LØ´\ªæ �©þI‡ôR��myY¯-²óŠRQXP�Sn;£é6QåPeÚ EØ–“«ëε­ëšî½¯èõ‚þƒ[dQ¯ŠË–«½¶' çéxY#Îx€UÖ‹ÊÔ‹"èQ“`„ì/ éDIü?hX´Z·Éòœ¯-ËóÏ5Í­‡ú6~aäI b¸ ÛªþØ¢>›×ÅÁþ‚:9÷c  -‹ ¨×óž„«ÆYþS”Çù(L]ÙÖyáú¥éúž¯­_/Ûϲ¾Åìp©²)jïòHª¡£%¾Ú'õ ÿb%ó¡  Ÿx�ñú�§©þ –ñd�Á 0}YÕ”‰Ðw k!È=Ö:yG‰R�`K� έ޼ƒD`ŒaþB þc­/>X7 áD)…P­Í¾â(øßA{oÀšÃG¹ ¡|&oe£7–¬úŸD<ÐÙøš1þù „~H&¾ÒŸX”=‡H)í¾F% ";íÄAñš8€C¢£Ü~O„©>} Èsò^†Ÿ¨TŸ„]ŠðÞ,ŧ%“lx?/ÒDHŒŒB‰dóÆhu!"„„’,GBúyGÀ�8‹q`¸2+PžTHÂîP í¯1ú`ò!bhFý %ƒ”Xü#„èD`€*ª‡Æ^KÙ}/Øä~‘± ¢Ì)÷b”Ä™$½íLD_£”S‘Ò5ø¿ žÌYq‚2ÆhÔ$߈ï|ÒFrs %Ú/ŠÑ2ŸÝà”ËšsÊ1NÉ×3ãäT‰óPˆDæ_gü\$Fs&Ù· #Mžr&…N¨5^ädŸ‘.mQ’úäDušqj5Dhß@$1Ž“Ž(ω¸ûi´JΙãC¨Z` tÒMWáédb)ãìÁ �EȲ�P&“é8NHÁâP€F©=Ü0ÿ~ãùm‰a) ÄÀ«LjðG™‚�‹*­ÖZÌõ¡q4ž„ÊtPYáHi”Î!óƒPÒ'7â…n‰‘‚›ÐÚ)QIUx¤ó‚cÚo<,$†£”f&ÄH]_áÍPžÔ‚ÒZ÷K¦=¡’pÌé 7#­mÆ#ѪcÌp‰ÏÒœ¾[Gâôõ®1–ØDÉÉ@¤u¦°Ñ"¼X©=-å5}”©ïÆ9çg#õž6–܈«@!Ä‹~qšÛÊQ3â-*ŽÖVpMzcEmôý†vîèH[N.üŽ¥ŽwÜûwiM´ûˆIBk8ûïtT¾”¾íL‹cm©uŸµ¶†â²Û­5ìuš1jqX([ïTÖˆtÎ8Ü›#Câ€û[gÍ‘ƒ°)DàI壓A #Çð{˹‘JG1)¥B!Ž1…ËYñ½0„`›‘4cäW1h¬)5­3ƒ a,flE rXÞd›¡DItÆ‘4å;o;/VTÂ3ö™_šë_éQ¥6qM)ï oûé »ܺKq$4BÉÓ7"Yl±23Í'®¶_&ÞdÁ0ï\s¦¯ÆÁFËý|cUw[._Í!äOº·ÞŒWù÷˜sW¼7`¨§­ˆ¢‚›NØ™|(Îd²öæßæ¥Ë î]§SÔR¬ÛræÎV·W4ß«g}¯dõ›Ù.nÆLµïöu»·ÿÖŸyfÍÒ±º¶Ïa*;I¬5/ÁûŽînw¢ö[|´~e¾x‰#t¥pû¿aç½ÃEnÛóдC5Ä9ÇM2íø£×oØa kKò[y��†€¯À¹y‰IhúR¢8Kàóªq}yï©?U¶%Ĩ XØ8LËÔm] ð„yV*ÉÌ ½š|ÛŠÎ×"‡ kfÂÖV‡.îì§F0}쥴ÆÕkI¥Ï¬$êß´nÃÇ}…]!ÎÀÌ®þç®™¨+Œù†×PÐm£$Vç»]/jnªçØ.U²Ž{6‹í+·Ô·7]ï«OÏÍ빤~ÉîV#ÞKiÝgE®à:–øô|ÕÕµ> ѯe%àb4к]uì_)“»ŒVÓøÄf=vï?–¼”"à?êûîÝî™jÅöÛvw.ã˜^‹oÎk›v$~e¦‚öh©®Í Ó4råÿ}r#~9¦yܚᣭǟÃêzØÉ"ôÞø0ÛGY å“n?ÂܘB½îÚäû'×à¿ÖÃÖz/²¢~øÎS¦jýjînÔõN ‡ÎŒôÌʆl–Íì úÐþnø°ªH×Nüš´³+à¾L0ñïʦ°2Ü-ZÓkŒÞΈîé°ÔlⲄÀ~‹H^ôÁþ @¤�Ajî\'N0%žaþ\Aü�cžÅǪª¦9AÌÀ .ç˜PÁ†þ `¢–â—O|F'Üýìêªôû(Ý/ ËÊÇÜÏOʯ\ÑhúõîÒ›m˜™/®ÊKM ÊÖ°ÎýPÚ­ãôØÏ°ñ*욊ìóO.ò0ã�.òÌPø$ù-ºðúúi°ÐP÷ÉÞýoX§N‹¨Ø¸1!� ¸§KúÓ°K‘ íD¯FÐ @ÎÍžµ- .ÐýŠæ¾ËfÓ”ý‘è¦óN€‹XøNöÊh؈¼ôm2Ò/:Ù0Ê¥)þçMÕO "1œñé+¨¶1C¬¸ˆ¶±ï»Œøè±+ N›£ÆéïžôY ñι­& NØì‹¶‰²K ¦ÝÌ,‹ñ‚þñi˦ùëñ/dêÊ ÓQN‘íõq¤Û JÖm¢¡nŒ^üÛï8}î„ú/ì÷*òìRè­ù¨ƒ±Ù£âéÑÕ#-ÎõéŒÁÌø-_¾ý­Rò0@¯*ô˜¹òlÏ1™©ìKxÔ`ý«O'ÐøíðàúO0¶®ø÷S$ B‘2ø~à@Á~�`\ÌGÅ‚\c�  ®Ár‡fb(NÃ@� `¬�AFK‹ ²ôKà¦a!\uÀ Qµ©òèlбÍ íÐÅ%®¯Ò%ïß Xõ-‚Ý’9J]«¯)ß/êò Ü£q‰Ì¢RW*ÏÑ¿*r ×nxë!Òg1m¸ëÎ÷3LþïR1 i¶ï‘ÎÞ¢obê1í,ñ ùˆ`×Ïq$ÒŸ+&ìh» Ó”î_9ôë*VéQÎÏ8s°3°àé®§=}2k€éó/(Ø›NއqÓQí)Œ¤ÓçR ÓfçÐ Õ’ ÆïâÎl ßH¾è •1j8ö3âï0A+ÔM/-bõ®yïWC«d×MVýtA/€»Ó,¾Q{ ‘ÞúqoBÐÇ>Ïu*ѬÜÊÝ/´ºª=kó&‰g´í5ï7!ˆæÞ0êíËÂìG�rZžLÍG¬&¥¯õ8´a°-ëK‘IÍpÛ |ØFÀê¯3’ÏÓÂ.ôô¥I²E óªìêl×[Q‰/›M  ñÓôÝ‘›>ìîÖ2©AòHËŽÇÈf‰"F¨\�€prÈ"Ðr"AÖ^ ´ Aünvs–'n��¦ @á:�B/u`FÀþqAü�€Q ›:XTS 9ª-QžÚ&îë5:«½!½·�Kœ0Õ’†·SíN±'#îñ¨ñÍÐUÍþþ”2ísKô+3œ›­.%sé3³Kp¬“0ÑM]Ëó¡@®ëŠ<¤oI;/‡DÕ·SÍ#2ÈÁÂU ª&ð’`ñq‘§5Ó/­V±Ô7:)õý6V3_S®áÚÐÒ=YI¤ÿLÇdË&¡»& z©ì<RVÀRS1ÑTΖ8Ûʯ¯.æÁÒîÏÿZñ(ì¯Ï8ÓböPC«³ñ«MY+ÆðqOu‚Ã5±9/Í]ÔîöteðWf÷'Ô‘†Ø´÷HMOôž´_±³!ï Ï–ÙjÓ‰­H´Ô‹ŽÌðRŠÚ˜}oS[‹Å9“×aÑ'_òk¬‰7wlÒXêð$ŠKí’]X2NT»4TÙ^̶éSlÏïnÛÔ)b‹™QMDÙÖƒCöiÖÒn×K=;ñ© tËñté/3CŽòü«^ß /ð·¾dBd �¡h�€bµ2}òÌ%Af*¼ ü�°–϶-{“h­T_>S‡Y±/gÂb1Ÿ`Ì'}$aØ� ¾$Á@—£V7ì:ÄA$ÀøUndBýrÑq_õ“hUËiK Ò3Vœú�òt¡ׯü/uj•<—=q.¢Ê­1—rÖÇ„7A®½³Ë;¯@ÓÒ7%¸Uo·Dë±wÓ‚ýì£eu©&–SJïø"N š4 Ò±iÐgî³$´øUÓ93±Snn„¿k=4nïg*ït"Ùt–Ò”'ÔàwE” gO%8 ë˜ž²leoÒùµ4àà­©Z¸ ô͵×nñµn*÷«+rüvÙˆ¸ßlו£ؘ¡ík4W[’CX­Šu³‚Xý<÷͆s½B8)i•�îD™A9¨Õpá2’jëx&Û+‡F’)9øs€ñÇN³w”sØøñ2Ž Yí8£«v4’àŽå,§9Ruq Ø¹vO3Blд’EJëP¤¯âØ×zðd¤yƒL³v¤j5rí ”…Ž™WÐö÷«Í!µÛ 8+tGs!@ˆSëŒÓŒÕµ¾ÞvÍZ•¿ÓÂ*§öÀU÷“ë0í‘"ïHMR�R@A„� DêÙzb&!œƒèB¡ä]À 5³Á Œçf²¤Wxó«g1ô¹ÍF1¥Px/a)¹&i­QÑq7AøR &à¡x�`JCï¨ã¾  r€§¾@‹ŒRÍt«3ó±Ö%|+¹Aðõ"Z²ÍÙ¼†+©€â-b/ÑÙù•÷ˆ5õ|N|¹a‰8-n¾:«‘e"qèÞÔPÜ·mjvÅ ô}NUiÔED«zØúÍ9“#}xKö— Žý—:ªüðYm=®˜éš¯KJ9^Ýt鲓š™¹õhn¢í²ÒºÓ²‘¯%¿¥P½Zs;•™^L¤–ŸC†Ù5ÓŠÕ”ÇLh_BRCi í5ÌûWYÞèŒÞ¡zéFë]4·Nº:k%[«3úéô­9óë?¯ë¸TþŠ5;oyMše°(°àï ˜tÝ®ùXö·YxyའÉvŒÅ¯Mþ®{A·“¶ÙV ¤­´Í”€µ—€ôÏG½+mW•ðßÒÁZ›Û ™Jg],  ÷oÁð ónµ4iH¹€ÔÙ„¢ÙÿŸê_Žójœ8ÜHï·“»šXÀÏhºº[¯>Ìá0°3rÏ»>O<mU5÷)}9)cÚÄй-O;—ÈÎ݆[Hû0+>‰vØÐ^�À`ääbX €?à@$ ‚– OåJþ €�0'ü ŠÁ"ñpÆ¡(¬f9&ŽF$ш4~;“Æã29;þe‰H ñ9ÄjO=”Ë&1‰¼®{¡D ³i,¶u”Q)±ùÕ6•@’GeÐX›íê�‡�,æ( ÈíV»e¶Ýo¸\nW;¥Öíw¼^oW»åöýÀ`pX<%íäó�ËÏÕãü×%r,þ¹PŸÚhÔ¨¦Ù ˜e©Œìþg™ÑQç:ª%f—;Ëë4ÛlÎEXÜm©ÒÊŒš™G”ìërªT×W0£Í¥š8Õ[5ŸÖíùÕ ŽžuÁ•m¥Ò¥byÈ­Z»UžG~‹Ò‹só|¾ïÍÔôUõõÎ g;Å?ú¿ƒ”Ù=ŽÛNË¥núF£&Ï»ª˜¿)Ãþò©‰ã8×»p¢ž 4Í„�ê¾n’6ö?Éó؃@mÂv«>ã@ª8ëúÏ<ӦحP2DÔÄpËŠå"o—8ÑrZ’¸j“n×2NâsÅÑã ¤Œ¬"”7Mjjÿ&I“îEŽË‚ª¼1´ºÊJ |{Br{®ª¨0’S"C°ôœÐÅ®4ŠÐ¢ŠÜˆàÅüTúÄŒ¼Ü—ÉÈ !ÁЬ+Я“:œ3Ï{@ÿµsŒ…N¯”‡:9s3K@´òz‘<B”ìš8$KlM?‹|ÛRÔ „N †ÑD.jE*ÕuÓLç­r,:ÝX–Lc`­ÖCÄÑQken W6u1:/ÌÄnëçbFŽuÃvl0ñFI½-5·Ñ:<öÒñYZ©qôØH2;Õ C³òfßPíäý«R¥ß}TÒU‹I=CMrµÊ1*  ‡áÞ“dà2 €èý.9¤ü6ëi>ŠIY×ô¦sU “ÂêÀ³ì×Á26ml3O\fAlpøÈràËg€�L�Î0�L.µ­ëšî½¯ìűì›.̼ ¡úL‘§ð  ‡óS=BU4Þ¶¾øRáÏ,“oIz©™¾¦šÌs"|îJ±Äw˜Rµ e Þ0Do pÜóGçnlÅ┆œ¡èî=íÁYo‹‹8æØƒgÛ.ÃUkhtägÆðµ„Tµý×Ôá{¬HÔ7õ3ž8ñ«8;TïzÒ´ß<ê\ç“!<Ý’šÍÕÕà'7ou2f%0ä”Ôß7^ö˜Ptþ%.ÄÓÏ(×Mt$¾é»SsJø•½B*i>ºÖ$ƒÎžSéV*ÀX*òO¨ì“æd¢[á¥Mí欅(ƒÑ Y$ˆ!J'¥|s•ÛÛ„HÐÛB–‹\[iªÅt»”V™‚êTéÙS¥cI Ñ¢ðiÊ¡3½÷¬Š^„)wÇõùDÇ”]\³º_‹¡r%в9ÐZKÚDò¢ìâ{ËRíÍn™£-á³År(‰…EÆñV¤S]ÍšÆ¸Ê·Ô H[‹ÌØ<èÎjRt}ƒ©¹µq˜‚þ_ïEa@v £[­@jM¤Ä‡ÂD‹©•Ì=w\u+èwŒE/+g"eâ¤7ìY›ºµÿ)$ã tN©-Ÿ&ë-R±SZäˆ}0Áи€À\ŸIk£Ü�€L? ÷!à ÀÁȨw–ú8›Od<ig&уó{¨š@#"ð”´A1V8G™Â§d Kcä�ð<�ÈË�€6yý?è T‚PZ AÈ0Õü#„Ñú:Gpÿ�@Ϊcs#$Yé^nYh™ÜÒ¯rš-"ýÖʰŠÑx¢ø@—å”zn:83¥*hH." Å÷jø]ó»‹ò•â¿IKeu7Eê¾�ÀG¡Rç$‘ÙÉúm%Ä1ªrᾕvòé;ŠW²ÁÅöÞÛ*åðÑÆüùÖBïʼ8‚ç ’“Nu[/eîsÌ#<µ1‡Ê¸þÌ—ü+¥•|ä¼µtUôbUGÑ8& W6¬CÊxNJ¥Éd€ÏT&w}]R•d·™õ›uGž7­‚,µfòÀŒÌ5Ü9÷T¼Ûš€:r<.ZÿI‚Ã¥KZC¿…³¢®ˆ§^ÕJžº“´”~÷B‰Mq­$.ªô‚!Cè²åå¼ <Í4Gê2¸ ‰@P.vˤڊ¯„½Vm€¼Ã’à×|QΧ,6ù]©ÝŽp½Z&‹¾–k” ’Í=‹,‹‰î¸Ìβºõj{ÝÍ@>Ïýæ)< ßÛÝž…¯&²Ó»&Ýà%'Q.TÄãv¶"‹ñ¦gê›8ÔÁ/Ij?™9ÁX#cKqôyÖFÌrrocâ³60¥¦¤Bh¢Š ’Zƒ|Â@FÐS€wqp4…·GšUÃÌÌç!)‡:ØCóÄ©ÙCSN.<cYvNÕÚkº?Š€:ÆEB4F‰ÑZ/Fhݣ˙b~ˆqcÀ”jupNKymjf¼'KQÒýÎ¥Žªß*Ç"&ÂTö”=ßĉ2C\:º¹Ê‚>Oñ »> ®Ã‘ýd:š’l/[Ò¡k”Q‡ÒjL*Çwhœ[¤S¥„8ÌâÄsN ïæªª'#”sÁQ6IÂâdþÿ¢âÓbZ~kª±ªóù‘vÍ|ÎeUŸ6I·±N>‹³‘­½*Ã.>ok!c¾p‰ Ó€ºCÝ['m½Xb8D|>¹b¦Ð¤±’‹ºj[›µÛ¯µQk!BnK}éEP¿6W™ŒÇk’ž¸€Õ±ÚºrÖÁá.tºj†DäJÍVŠM‘Tcv>n}oöØ2ÏWÊÝcyÔf;U©ËÌ”XV±Åg¢°îÞ©ïrsÁÑ·q <÷óË1OøÑ—¿ø"u“eåéá(¨ÃØ·ƒ¾ï.QDµ$“OÅ{’1Ë6ô5#|+n’¸Ž W]¦ýRÒÌ‹.T˜¥ÄxÌ(CŽîÚEíý‘„MŽ8¦F:XÑk¤í¢w`õ¬ë+é¼Ç°ÀE¾kn»•ê ýc�‚ ApA 0k&Ö6Q´7@�F ƒôrŽš$¾)4>®ÖÝ©p8§CØFÐê®ë‡©ÖvwP§zõ/']¤Ý|…ùýÊVGèû��”€„.� šCþßüÿð�0-Áì�� @aø"©¨°iÐDl Tô²FÃONÞj,°Í ó…èf£Ö‘îVn®´®.°„è`ÔŒ«~ºÅ³ëöôíNíKަ¼RåÚ–Êࢮ:µ…È7¦–áÏ@´È´°xúèf¼î¼ŒôÃô­h‡§úº¤vÉK„À$Åp®›+âêØÌ&–§ÈtÉMŠKÍ6õÍtöÈÐOÒäï>·PºÔËÆÕ-DõíÎXì qI „Ž® Îz³Ð*¹ŽdU¨7*é ­4ƬdÖ¦hìM6}NæëäÌ1$@’¬Cm˜§Ëíƒ7*¸hæ ¾Eô[ÊŽí.®v ºÇ¨~•/.⤔lPámÆÂï(Ù H‡’½,Ìò§EèÜ­«y Âð Q…{+B®qÎZ^Ž&áQhã ræF¦PΩG´i¦‹e–¬êq&»®Þ¨Ñ(àI»)Â冘öe@xŒÚòNDŦvÉ-ôB¬|zð:°Gž×«ÆL(rõ°¢ö‚ððgB渎gIYî,ô¯j{Œì}¯U%ð­'V"áô¡þ À¶�aL` �o†<NÈ üÀô  "-tÚH†ß ØÌï´¥²tû ÑѰ’R~¬,wé¿(¬-CrºãWF³$ �!6�`Ì ÒW�r½+òÁ,2Å,böïœ �СzæVe®†Í…ÐÞ„@ÅQð¸«I¥<‘ñ@߉:âŽ,ßRü¶.ä C¬ËIÖj8å28ÄèrPªà#˜»‚ã3(QÑ.ÄÊŸq>ÆéÔ”Œ Ûò w¤²?#È$ØkVª½³NgK$…1 vèbÌpØÔ„ ×G\³NÖ8ù02½OF¹‹œÏ‚éVŠ­¹ 0DNd&•'h½ð Ɇ‡±òV뢇ð*&Œnsq¢²^z“d¤q¤vÃF§ 8²1,ëgÞž„2‹ÊÔçN· ®Ù)É!n˜]!íÔãð§#ÎÐN0„ÝÍÆ<ìÏ3,£ìdûî‡Ñ­) D•碀 Wq³1ÐÀ¦1Ýl”¸kA.2ä1êàP˜Âk"ûÇ­@¦öØk¨æðÚ°-ŠôJ>Þrô¬2h®ˆ(‘ßoq9+ÚÈñªVæû‹Â‰"' $0¹s ÒôàÐ#‰rg„ƆP4`T8…NœîËÚÂóPCŽ4y«dªPvMGààed rÊäIcx#)¤Az�àprº×$ª™`�àNp �� +¨2–Ò¤“Ô…³©?*œÏfÿ8.øxÌDò'´¿1Æéd·.Œ(ÕS y²iF”ðêñ t.¦B@Aô��8€áœ�•i,•mVõqW5tÑÁfü À’†ßRQM#ôá‹fpLë5ôy=¯eÆM3…AŽîf00öЪ|Ùqr_ ©'4åQÄêQt’ô$ogÈ€®{2â’`àOhúÈ©V­kñkþs ñEiÜöì­14ÇŒ5<F&L&îj0æÅª¬0Nò±^Û-G” Sä°“dbÙµDQމV[ȳ0ÖŽQYLÎ k?l`¶çÜØ,E¼í´œ€Ô˜û%¿ c24?fê+Y±}g¨´ÐžagocD´^ýä®[ôbÅs¨‰0/g²êÔÑä6¯ k ±jô­<¨á ”'>Œ—!DªšÊG* ÑQìÖ]t×òsNOdŽVq²¤Ãæmò% }UJÃÊT£±Nx{7LÓ6Ie</ÐÈ6»KìK 7ñë;M8àn»Gg@¾.'.QXÍO³nv³mÒ‡ ÷3qo¤Îv¹Ñ°g ÃsÓ)PÈÙJ”»×C6sY"Ò”¹ñÙD3°‰ÎЃ×]k0o3¢pP àš�a`,«$ª &Ô!.ËÀ…ô^7ʲÅ$·CÔ¾~[ho–¼ýsB­ï5ÕT–tꨒ‰s/M“!4­F…´å“â;Aú �á�@ì ­Wx€8€x/ot�^¡w¤¶‘_ÊÔ2M›®úñ§4tTS•í ­Dîñ5Žû4EWSVHæÊŽp‘zçèKS=• ²”prrœIÑmÜo¦ŽäÐJmßvJŸ`ôŽÄn°Zn uËYêçN¿d3ÁkP‰qó(8žÕìJø•­)¤úéQÙ[8¬Êún›†ª7>Ö‰:óB•É|oÓ±ßmvâ×4.T˜¶‡óçŽrïH1Í.˜ï´¢ô%ê0Ôâ4Gi34ïøÙHe1k;Ö©qæýRXüw8û× Zj3|6á׬¯.؈ç÷'år%jÌûl&{8‹HÒqE±#ªûIQv²ßêÐY7ˆWF×3^nëDËîÂlr¯ù§ÌXÓlñæ?óJÈ® Ö§3*ßY at13Y Ò/v3ITn¼ïʱwk„óm¿æB×@âIh¯9ÙR3”}“ýxW_ la=φqjÕ®ô•MÔQžÏR�/tànAŒ` `]OnÒ `º ø¡F1ànëGcåmlá4S2y®à±p¬ÎBóHH7vÍò‰£‘9Xú] €�¡ò��N �T� Bùm€º}§ú¨0!ä��*ÁôÐ%tÏ NóEMìŪAf˜£/.ÃùW°éZNg!β¤¹ˆ"ŒX툓 Ù£‡ºCjò ͘‹™/%ŽLQgè9GvÚÏiqÅšxÚîË›tl/'ígðj|îOu¡GmA3iiG´;!}vp‹¹$TyI²®<eäë®5Í5·‘d]ˆ;%:Z 'ñýx+À´×zS [7kÖu2BÝ­Nÿm¶ì¶{‰$ãõúí«n®/ ¸;OtÑLg',¨zJŽ¥Ã’Ëe:¸žž3Òë•ÇÛksêž�Nc–÷G×­oó“vŽÙM™²)h4ƒ»'+ºë¹¨­qÐ×Ezèô[XÎû´ÊÐÓ;øÕ]7ª¤Çé›®}rÖ¥t›«›SŠÓ#Ž£=ŸºAi³Ð.[#›Å·òvU³!©Y1ÂûºE§’[u¬[l^4Ê×…¯1Y¨Záôc`¦ �a:�Ú &aŠAþ`Šaþe£ÿAM®á¶¸rw1˜­9^Hýõ¬Ú丼õx0°‘¾)ÔŽ•·n~×I®Ø¡ø%Œ *¡Ôá¨` `Q§º…Í|Ùͼܟà Áö!>À z{B6‡3›+•;©„g’šÔqk™ŸŒ«©lqüÔÛ1¶L³ÖòØÅ¼v×±J‚_QB½“¹±‘E<¸ž,Ë¿'3Ù3•ãI 3K±_ÛãË[»æ{rñ˜r‚ë•5OWö,ã}Ot=pÐ'du?õÓ×®˜ÜšnËùÉ‹¿q‡<n’ôw»ª;ìù…gw‘øóÜ:¬‘/w<Ný¹•¥½|›( Ù(ù¯¶6y3W}E¹œöµÀô»ù·³°A:<;Õ°šÓœq’—w±÷zF®Íh÷UXÓºÙÜeÑɧµÉÓV™¥ÝA*úª»�Ô8¹=ÅÕúûàZA£bë0þ;ä¼ ¼ƒöú"ò›|B0§pªã›ÙàLßÅ·;ÄÛ•eVý¸6ã¾´þ_;vt9ò~&Ð AZ�àŒþ"��ª Aö!bmÉ}G4”Ç\8›Jq.á9û< ùe5ô®ù2z$®Ä“˯–ìÓG—öï°; iKà-o»¨p�!ôÁþ  Ä�4×ÿÍÿñ?ñc `¦ öá[&€®ªi@6C˜U¤ô]•ECìu,Y­¨™aÛåµÏçwÓ¾ûC0\¥©ùx5›ô•A“#åÞ~ƒJ÷?øoó—À¶¬coÚ Š^ЖÕÎgçãD3˜×|\¡£ü¿d‘rt÷3ϧ=‚¾}Foä܉ŸÁÞýɼùõèxá\Öµ0ømýÿ(ΣÞT©wßµïI¸\õvòëh|Š � ÿ�@øT"‚C€0Xt' ‰AáH,d‹E#1x܆) “Gd‘Ù<F!‰G%òé,ž)Lb°hôš/œÏg2ZÚƒ-ƒN"t8üªS,¥P¨óé¥/!¤Mfó™Ýƒ[™Öbµê-ŽÉ*©ØaÓŠäêo$¢U&°ˆU’ßX³Øî²Úuš¸¹Z¬·Ë¥þ»`Àਸ਼+¤ÿ •Ïq¶Šò¯V�°Òµ3 B«Ý¤s{œîµ`˜C.yÜå/\Êα–,µú?¨–A-؈¤¾«±Žävö}F޳´ânï‘ë”>9Þl𒉤÷[¡Ôò´S¬'7UXÞF$Y.Û¿£ê9[ô+ÅòÊ_NçúÁ^'‘Àq§ûáò�„gÉô~� 0‹6ˆKn¿±Êúxä3ISØã% Jjß3hÖì®+Ú^ã-p[~Ò))ZHñ&lbPàºÒ­DɃ'0ÉŠ ­ˆÓ’³A-ŒZ‡ŸGÐ�  Æh�Ì<“%Ird›'Iò„£)Jr¤«+Jòij-KräºÃ–%¹ü+‹gÑþ²îZb§»ðŠE3tõÁÑ›¢ª/1Ã<«Qê¶ç·SŒÔ÷<ðZÞõ¼ŒSq =)]�Ê:±ÂA8"qš–ÝÄî\È(JkÍA3Ž e»ªƒ¤‹44k&ÂÕ4rÒ£4Êzƒ=E´ý*¤ÐmÃÌÄQ5xôR-5\¶4nÜGT­vï8ͨ}L²XŠ+¯]Å,mmFÍPMFµUôv‘A¨\æà*,j«^Ä—HÉZ(Õ4¬AMT}uOÖ­;QUwS¼ˆ)Sey¥ÖåHÁ(w´ià­«ÞÈA–CARÒ’U‘<aM-•dÍjÔídÙµåV¾àPm›Ñn&¸Om*"§&Ê$ñ㫆_;bx}[”,5¥²“f>+¹ÕÆY Äxfu7B°{A·º5wŽUN•¤»³öuO¨Ùo~@ê-(l\¨Cêeʈ9Ödc½XM/SRnÃXÊEOeA¸å·sŠòÕö!„ÁZ•°­ÐëWì “5±^°’ÛN¨w*÷kX.=Íx&Pöïh[ûƒ¯9äQ–“².6ë§µ¸|”O¼ØnfrëERü½³ÎÕCÎ!Çéö��n Côþ��èZ|ç€�€Ž¹ÓIú´ù¶æ©c®;I=,wOy]ÿ›eóõ+¹§«<­É‘ûNW7§ÜNÌŸ €é.Šbl /çûÿ?ø�`€AR+ÇèX #è3œë“ƒFB¤ì×Òº.‹ ‡#>Ä– „n¡Æ­£™Þ²¬F*é•­æa+CV 1~ª*ô Á_uêÉ¡uæÜÍ\k†uÇÁ£^À ÙBø«”‡®÷—; SÌ©sAtØÅ*±1ìÕsÂ8€QÚ 3ZʪȺÍÒjögñ /,f×'g…Ú§%,££c=/ z>½6mÙgqù$¸òbXÓ‘Ž&è{¢cÛ͆Gö>Αv’í­kžæÔš›|ëex5%·ä)44ïuµœC•£œ`&m®35[OráŒM]ÅæL UùÑ=]Õ·æÐö›J•Ž5ÓFˆ¬¿›¹^è2&§Ê°›2¯Š°y_·¨‰ŽS)×5hí6£±E’®r=Æ ^e´^aÑmö*ˆ&ú£3­11Ÿ¯…H„L‘‡Ra+1ÙŽŸ™ Á1T6®5±%4×0,ÑŸ/3HÐô*/°žv.õžc–à2À{`w‚\KÀ¤a,´DÐ+ˆU¡ä48Q<½)ö(øH{Ù^&‰Ȓ¢ãæ=6.OJ£\ÍZKn5$�¡Ø?ÃHo�bXE?8Xkc¬•–³VzÑZRˆô �±ð9Ç8ÿ�@k=Êç‰ú³¨Ð¡´vË$Ö‹K–1ÎÍÄ$穳¬‹ç}ÉSÉgÊý€‘eIëÏHèÛœC–¬FnF‡D¥XÄ ¢²Ò@ǶœÔ'íª;ÑŽÐNûRé^L€£r{Ñ{R¾lͬœI.aº(Ôÿ(³ r6ĦˉY@d˜™ ´FSÛoiý³d¥ÞçMÙù ä#³PÔêâFV ÞüîlͶ¾*æÎ¾.¬T¦vñ¸I«ÆƒŽÓä›ñà©¢É"ÓÎ…è–3ÊÖ°;ŽšWy×o1ŽTÉk‚øžYµDj!Ó¨¶/k+Ù0‚ǾÕkÕ»´Ñi ™Ö˜¤nÓ‘£1åºÆ{K}* ߆7¾Èë‡ <.™v‘P¹ Öª~¨×§ÛíbÒ©D‹—JçÚè¨ì°ô_²tâ¡] ñ# Á“/"6Õ¯ fŒ™kkuÒé‹et–G¹T‘5ÓY3­8¾K‰F#Qò<ðP €WŠ�{èjbPÐ ÌÔÀÆNiÏØW«)$ .·÷2tÁRÛš²œ_Ì2C©ˆå†Ü:SpJ7·,çõªÄåL}þ°b°V­a¬u–³Öš×[V¡æ=øCà};`f j¢‚Ô×a7‡lŒê“´fãŒ^ÅÚɵòóÜ­žÝQ ÔÓ)nçP%sYmØ„5I’O7|ÜÁ‡ÜŒªérË»j¢²RLíÍï:ÿ´#ûƒ£…YH0|yˆ(Ý e58‰w$& ‚nÇ‘ãW_h¦0°6‡Bo]Ã`—$çÔs3©— ÖNÌŸpÒíXÉ~â-GQ>òæë¢ÔX^}h¦[f Ëˉ®j…y‚cSJÒnŠf·Wd8¬gš×Ò‡Ü3å’BsUw^Ç™-=ÆEfÆ¥¨r%@øò³Î¿Z“©YSÏ#Gæí¨4Ö££­Æ[í¤Þ±´Ô,½g*†]_î“bJ$žZ%@è<!}í}íÜìùíÁY®#W—â¯{Ýix ^E]Tò=–C ×vYG4|¡ ]ØÂÅy^ëÉÌÏ0³·Ý¿óh)ÌœCFpóœÑsùnã>KËn¹ŠßùÊŶo›FÍ9q;ÿ¨á“ét­ÿA‡Ðóáp.�QF%@8íÃø-Aö.…àý�€-®Þx«Ñœ´’Ù½GôlËGm_º[Y;ŠIKhò¨_Ъ»¼—Cà¥S~p�� À`ÀŸÓ[À|@Œ @œ 5°2ˆ}„ðO‡à€[g2Ü7Šÿ¨9o/ÉJ,ªÜ;að´ºë²46zß?[ý/º@ù'*Yº+}š-1ëqu¯ H7’Y‰“Û0Y ó;#Ï‹Ÿ¯‚Z8’¾°i’·J‘SÛ°úù âÊ:é¼;Ù³)é¾yj®â^ºÀ%¹À¹ÒÍ‘’pšúþB™K:‰ 2é ¥#›ŽÙ#Ë´ñ²¢à¼aL‘sO' õ)¼8ê{$íž”<Úð§J‹![8*å¶êÄ»!:Rÿ¼l ˜°Ù!Û¶¬œë*­´I „ÃâFž¡p3CË®‹D3`²Ùä\¡‚{ S¤ÚûÀ ó¿ú ™#ݬI½¹‹¬/K 2P¨,$?6ºS¤SPáj%ñ•!ªžõã­.<9 ™ÂAaG¢,`Áã'SÄéš-¤,u¶¤<¸˜ñ¬{CÃ#±D %¬DG+•A2ÂÂrù‘Ë2;Zˆ“ü:›M³xÝ+»üÈŠ<‚ø,RS ㇬ƒ,²)!k¯‚^€ ~øW…@XX‡à*‚š�´P¹Y@µ¤-¬=»Â¨ÂòÄ9šî5#ùê«8;H3ã¼ZƒËÉœ8Ór´[S‡øcÈ@t ʼ¬JÌ­JÜ®P&‚à} X‡è€zt0šÛ¢jšDSݽqfl "¬‚Á{›!qbɺcBtr£KãÇ‘yļÀºÉäeÇ#mËy}»XǬt#ÈÉ»¸ËºÁð™3 l6›¢1?T #ۋĘܖ“%KDš¼Tdš9Ô,¡FƒÃ<Ë{°ÜS´á9;‹¼96¼Ñ¡¶,E=jBƒ{$»°A”X“Ú©ÁØ´tjMé‰FSe¿ü‰"Qc ¤¼ nŠÜšû7*‘S½² 9ÂZE³ø'¢kB¤ÇÏÀFºu­ v3É'k¡$*¨›ôµ:Èýc…´f¼±:7:½CôÑòXä`FÈ䑚¦¯)ÐP$# äÁÃ;‡ª€‰ƒ„¨d»ÆÚ¼ä¶ Ë¥©ì‹ÇK™BÁ:4ÿ&!GÂê?O¨µ18ÍÂ22h½{.á~M´È¼ ¡¶£,¼‚QP0®SŽÈ²ìMAq4lS% �žr4°U'¤`H¾‹J=¼Óºk®/¢Ã¹«,PÛÕM¡:ü4Ó©P©¢,Ô}–u”ÒVÐ¥)¿àÏR™Ž;²PR¸é¬#dŽ$™¦Íý:Ç Èv‡ðZ……x[à(‚ |€0J±tO°µ°¢R}1ÔËÿ>+ H#R«ô…9[ÔRbÌ “•Aq%>Šî§tN›é‡øc…øÀÔ”®Õ½\UÍ]UÚ²¸3ÐU8~�4³<tQ);Bz¡ÓrŠM¹ÀµˆÏð´ëư ¦›e!±Û,íÕ+x!óƒÔ¢Gª,K‚AÖ‘ <AtÅLƒÖ[·¸x°--:ƒ¦&EsAƒ©-Y†ÕZØ.¼àÖÙ@Q#U ,Î¥M£ÒN¯ϱ@¼ÑZNDxÂÃl#8 EÁÉaÌœ¹-¤B^9l;Ä9¡½¬NŒËÐuS°µ ɲ36׺H´¤"ºçŽMlBT}(œ^Ç$;›´…X[‡³jä6Œ¸´ bl·ÁKÎ(ÜÓ"^×Î׃H¼DøBbqº¡v3.ÄÊýÌt+»…f»k+!%=Tåk—iæ;¨ñу²!N(ô,ËýO¯j©¹L[’¨Mµk§Ã'Ü ´©?µ‚ÑüäËLRŸjæÃ[‹×èE冢9lZlT±U6¥‹9ÍØK yÕ¦ÝS„5F½T›½©Ý¢ºi›{&:m0lgMåÌKÛ³BÅ•¦ÂÏ ÔbF›¨UP‡ÐyøF8…°^à%mG€’`Ej8‹¨ìZ#Æ**ë$Z6(s­»£Í- Õ`°=}’ƒqÍñ×¥*£Ò'‰}W†Xa€@}[Uåü_Íý_Ýþ g†™1ø|†ðrð€4«YĺLD¹Ó-Ñ–rmÎmOÆÕLG[í+3³Heð ð'Á?ƃöN[‘¥X ;äLØ!ÍYA¹ØÇ¼š>mÕPt$ßyICù™’vC…ÛFK3¨”fP™¯!ònáë¤`æ FÚÖ‘|û´ß¬WOUdZ%j1:ÇÅ›Ëú#ZcNñv‘Ú”-�9*dzCõžSý݃H;ö(FUÂ[EM ੱi]üÖ¤cm¬8Ø]ˆ³C4ÌÂÆW‰9á9ÓS|™°4j?õ4(í$HP‰�l&Ô/³k Ⱥä¨j%§Ì½G\ÖKlûÑB6BÍÎbˆEÁ´œ¦9q².Ôý—¯ÚÞOO9ú O&:uˬ¥b5Ç[Cu]ƒ‘Ö£øIÓ”Ù]Ð…É:䀹3šfƒŒQAF Á~XãÜS5™ZM û]Ø®¯doNÞ$޳çÏÎw9ðÛPº§ä6'÷H~6#õ=.(7M‚LÜw dé€:¢9ãŽmRSów°…ÆhuÍc=ÙÖ… ÆvÉ©~ )uãxêç`ŠÐ|��G„À}ƒ;ЀdQEõ4ãÚu‰µ9&bj`áM‰­ÈÉU"fŒ„ÌKÝðh-j¿‘ÃMäc¡Ü-tˆ@|è¸ ZíþêέjÞ®U¸OÖ1`€½«ãºIX±Y-…LTÅýê/ª¿K‚8ɬ5—Ž6*q[8]šYc¹<d=YËk¢­ìaža‚C{€­Ü=<Lù£Ån˜|qv´c ÙÌŒÕBÚâVr7Sí|¸N‚ŠI‚Ç4FgpÈ-p¦ü%<É´¯\Zc N½7ö3:ÒqU5‰9+ûÖ”¢hdRÜ+L%…óXä5e×vE%CÙÄm¥t××ÃB¯n:  ΃ É iÔ æí>V¼£ó¬¢îÏ$âÖ¶—*![¡•ÇÝÊþ¾FöîûÜB®ÖmžÒ¦¥«$»¦\Õ·Æ™‘;»¹f><™cÚÍͱì4º¡ÇVýn?{c dÚ³fjuÕL ¼?¥ôâŽJQ—^Ö†®-¦®*Ó¹"œ4¸ÜBªEu\ÀÃçmPUÝ>$­Ì+WZ£¬ÓÄ^ãîŒÈ­qÊlj¸iEGüÌ,/[ÜU£&DXÚܺN×jNPÒÝu§É«gíz&&¤—¯+ëÍßîC"UЦ¦Zõ•¹� °;X[Õ-y–7;¸oÚM-ÑÏcLv‚Є*˜!¶0©‡SuŠgÝí ÓzH·>¯·Wq^��ð €p†xêïKt¿LtÊ´…0V‡à-àHgòF+I&Ó+™½:,äÒÐ5¯l×AtTSH<»ÄãwÏ•ö‘æ…=„w˜¼i\<îä ½PnÐ*f:¡3¼A_kù;“ìõb]“YáÎáí[6—>r9–¼ã•Ÿ¯{ÈÑZÜ}ÂD¯.AÌŒ_m´é½ò&`Ï×+qzHh´ý!vQH뾃п­6Hsåvú>u›öž$bbkÕLÇO2ë—äÍ>Ï|ê®ó�‡üî†&¢;˜’bGØ¿dÆN'ƒJxu“§½=!ÃJ±Ë‹p­zíFË×+iÚCœ^OÁÛçBç�+é¬âŒ+¹½Q5Q ¦tìÒ{ùòU‹ÔéÞ˜Ñj#’h5ŸPHÈÒ (Ù* Ò*ºé Y Þê4wÄ>:r,³½[B0·EQn¶ÐÅ.L¦Ò8Ÿ–ðñr÷vHóÞv Æá„ßÜÉgRoâÁ“ T cÒÙfVKz;“Ïòfƒz>ñtÓb2Ä»}ÆÖ‹'?ñÍß âAÝ0œpgWXpÒŸ]œ«Å¼õΊšlB"4Á=៛¤ÃKj�€0 «m‰cn4ÃÏï7î‹&''á?ê3á$LïràŸB§ÕnäR–T1ý¬1ßù�€��†àet¯M~ÿðñ×Ntð/‡À€ŽLlŒúòs{…³é·Œv1˜™{ίÑþS¥S !���‚?Àø†C ÐÐ &‰Bà°¨„ ÆãXT†Eb¯ø4FA``|– )™Dáy4^u0†Â Q¹äzQ/ŸÈ`QD‰1¥N铈´¶Q#E"yô®-6’ÖiT™T~Y °Bè4©%jɤJbTÊ-®$Y)—YÕšED¼Õ«T5î‹1¾YjØ ]à jÄÓcŒ}Âõo¿[%Ñ«½öÃ"ÉÞóå&¯ŒÇ'—j>9MÐè*xêþ>A„¸ßj; Þ7]¢£Ë-8Ê&Ÿ1’ÂÖxÜ þ?-Ô^&Ù'M£Ãu'²ú~’W›ÃêåS–²§®ëÅû“;×aã½l°y cËUŸÍ-U Æö…¸±÷ö+›³¸¬Û„˜-ÈœÚ>ìË Á*¬òN°3o´ʦëCDç¼Ë:¨ð$j꾡¿ÊÛl³µ‰d>·,ª̇< òÞF šÜÊ1P2æóÂ*¢ŒšCQ·9JŒ2ï£Î¢ô£ð‚{&Ä‹,5Gï³ë²­ÊÅ&Äi«_Én[øÝ>‰”$ÁL’£,QTÐÅ6ð܆íK+S7NRÄì­NÎdîÆMÈìÃ>Îm#“9O“Ã+-ÐSJNÿ®®‹åEÁ ›á=¢Š„œ¼PtÓ­�ÀÙëJO®›Nû²Ðji'ñ´Â‰?.›ú—D«Š‘K¢“NÃ' ô ýÁ1€è¡RU;.;U##Ñ͵‡'KKÒ6}`�F�&Ù’ÒVݹnÛÖýÁpÜWÉrÜ×=ÑtÝW]ÙvÝÖáLW‚ؾ|�À|¹ºVlþ¸JäÁ½Žz}GT±SW˜"Ó†¿õeدŽëà°’g5c-ëq<ÈXB±´˜Ãs!P Èê–‰>s|¾ëPóÔ/-•ÆY}Ãd£UÙ-'�àP¥n¼» âÑRÅÏ}1m\’ü¶ï”­ ߪô‰Iá­õkKF°òJúDØæµ3cBÿQR^­*«jŽÁ/x¾ŽãISZïVn9[ܱN»$¿™êL\ž¦ãÕO“P,LEWѳýÆä5äíÑrìfð-qÔó´xß,ì[›á¥Í\–ƒLÆ:¬£”¦¶ZzŽç±ï3ƺ«e²¯Ò>3Ò.cÑÄVpËÇoN ¿º½Œ`ñàùJsY5t `¦Ú{a©/ï@óŠ…»6xb3;±s±­ù›|âëK6$°Ðæúç‹QKŽ Qг#c¬oË1cµxúPD�ø¾:LÚ¢ÆN -Û£�ìÝJPè9ò›'özO »z.y$<Ô¨”‹“ÉRo©u(Ü l(we|·Áô3 ]‹LtçüÒ¤¶®Êœ['{Lq™ÁÕ"hR²UFi6ÕúšÑ {p*†ŠËY3¼Vd¡OGîøÚÃz¯dß1`ðÝ1©2*`¢³ˆÂO3Ül*ý¶Óp€ âºnî1Gš§ÎqÎZ…f¯¸™63~i‰MCåj7H ]ò>HI%$䤕’Ò^LI™4Jň¸¡@*pL¡·4ýD¸Î–Ûâk+ ±³2œß2Œ3J ý'§º´"*±…ë¡¿è/,ÒŸ72•¬¢Ø¿ `9w/¶gF÷$ÍuO@H°D±Œ 9óÀXø4âfªÁþÌÄÀP j– !MK§ªQ¬�–G1­§ÉjõOôèIðÌÙ˜Cü“*œÉ,â·BÖSÖCJÔb+G&]"]ŒÅ½±sÜRÓŠSfåàö*‡O4Þ#½wëîJx'™¡¨@*¸ïGæçI#côÅØ¼äÏáô±0*f(6g.T;L°Œ¾ijëÓ£ qk•ÎÉJ† •}DPÕ>£ÃÕ>Ž\õK0YVÏg”…žõX©“AaDyDå©ì~y8EMçŠp­¨œÕCŸ“SL.%¥ù©å58PEü¨¦Þ]^\P‰ðfa*7‡%Êg+tò ŸÄ$Øé¬sõ‰[ öš¬Ïº‘S5Fy:úÓQj¬Å{sÁËšËf½_¶“7¾ª‘”8TÌj«2 lCú¡Œ(}Ó3=7¨½ŽnÑ´�À‡ ÖžÒ5Ô­\ÃÉRæ•8J.Œcñ2ä•‚T¥æ»6ëj5¹r0ÀüC¢È´€"ZÒ2GI»õ~ïåý¿×ÿ�`¢Ç¸ø�”9N*GØHM$ËÈl{P»ZhÇ ÚÑè[ ÍMT†ˆAë½JítH€“e/>F­'áÉAQZžÞLM¦{qË7øDÜjý ¼Î–3¢FÖƒÊ\VaV†¼6òÅJPš–Æ#¶yË?ëZœ².Ö½fõÜtñŽÆ·Z%”D$©¥Èžã¯¬5£#§žŒ[#æQuò²Ì†cJƒÛ–g-‹ŠêŽ_âÕàÖS)á´• m˜l^® ¸0˜õè{l”³²bÜ–ûPÏ”xºY”™ðš_º GöÖÓº*²Ð›¬ÊlÐŽ|¤érœ5:ŠQEB^²œöišUˆ" [³Ô}\,ñ‹Ì—BXJƒ•©ŸqÉ®, Õ&wTóÝßAê]ëC½¯å9Ù«åJ‹Û 7=g–ßíÇÛ‹õüBÙÇ üQ„6‰ŸǽiÄ/ýåNÔmºQtøÝÛcp**~R³CÓilj›ƒÊw8Î ¸Â�£l5*üT\.3ªÕ0³G­4B÷àn–7�[•¦³Ï¬–ŸtŠÞ©ñé2;R�@ÙåßppÜd^@0ë‚#LÌò'IJóñU¸X3^í%§0'a¦6‰,°ŒÈ皜ó 4c.Õ0Å3œ ¨ùKRûŒ€ûgmíÝ¿¸wåhïàP@@ÎÛŸLq$ƒÙC_o:õúáÈMh¤¡]ÿJ¥Ã%8ö—ùaönˆ™ÒzEzwYùõ­d6{²Æ_o×Óés,o¦ºµKÛRvØ»*ôEzÏ;å™Ö©%¸¬÷Ô×MµoW`ä6’aä+ASZ[b´ŸÞ¿®®¸*ŸÁÑuTuÓòa_ÎÝ{Û'+(Ç´òí ˜Ì¿™§$(·q'êÌ{}ФÉ5b’ìÀ©N,såê:ÞÎ,¦KFRËMÈHõf&Å0 ÎÉTÏéLÉ­‰Ò×î"»N¤²ê”ÆÃš°èFD¬¶J¶G"÷EšÊf”g06Qè@¡Ž*µð¢Òú'Ü®«q¥ÖRË€Õ0t[âÄ©š¢~ãK†…+Êë~‡®·Ê¦ù'¶ar°°yœð\²¯TÌ„®á’õÉÄNˆ[èÙ.º¹ÔC¬¤ù rzíXË:÷pi êäD‚އê€H~ùƒ2oëˆçËZšF�Ñj~©%lmÇ@êjüÖ«.Ú$XŽü¹jYÏÜo00Ü«ÃHg ì:WF`ÚÚ¬$^W pÇ!þà�…¬[ÖîqW‘[Ñ_ÜÁàà<AèNÎæ§MÌÛ-jÔoljâèqРd@ŽíHãâìöÍâ|$R÷B§ÈY�nLqO†QƒŒýЯ gôÅΚú ®õ1”sè6›o¼nÃb¬âŠ|¸m„eðß N pÑxëe»ŒÑ Åúêšñª»ΨÚÏ@µ –ÕF@©Nš¡… oòÝ äx©¸~jåGøŠQø¤ÐžÈÍL¡jDb¦ÚnëâsP.ÒFÔçüüÌH鈊î‘ÒÈF ¯…váb®  t³á‘”èÑ‚*ÚÝGÙ ’ê}*¢ëë]'+^g|µ)Tÿë>²*pœæN©"иôŽ3íôh,c e$õð†VW fñMM‹Ü¯£€Âð~þ¨­é´ÜP×2ñ+RzÆÐ|àKži‹êé( µo&r"RE‰¬2šÄs"n¦äî·QÔ‡í #¶çR®üH�V 0jÆÔ!!üèë‚AŒ+-1<¬Ð#möÍs-ggÖ¡Åbø• «\k`¡ç$¦’ÃÏS'ìràû ‡ófÓŠ¿ h®» ”±ŠÍ­øŒ®³-‰úˆƒ‚‰QFrÇnã«fâ ZE¨å®íQc=Ó=S×=“ÚQqfà?îÌ��²Ç0- jZÞ¢×6úŠÌª†bä°O/q,`, ùÍü·-Í N„™P>tPÑ"j»Š—ÒŒÍÔ.¬ŒxV‘0BªE0+ð²ÌêÜæÐi(�àM°ƒlÄ›æ#éæê²iEü*SN³ª*öq­jÄð/Óû;¦Y30Fë °•A3W Ï,ó ú ”·(~tt*…Å/Ô›íÏî]9§/@FG1é:4Í?£,ÅÂX³nßT–ñQÈ·“÷Iñ–üQBJi\dz_*‚¥.rž¶ÒM0°ªÐÆtA’Z·óM¦Œ˜Ôè©°± Fˆ¢†Žé‡=éúÈ4v0ðßô¹*Ôz§èøQoûÏå?kÑNMÅM}C‹# «ÜâÒó'Jœðg¬ý0ÊS‡úûRÀÈŽ•*—Ç;4ÂÌ)ijótß3F|õ @l/W1U8¹§<¤´pM§`‘6Âiàî¾Üm¯1”ºfE*u¢7“|BΠòdyP&ØŽÿ‘$snJí>qJ¼IÃ_)rß›:zµU¿.1 ÇdŒˆ³‰Eüuíáô0"˜aöàDà‘‘U=Ö3cV7c–:¿nêà0Ž~âŽj³,YC/®ÜK ÚrI^î`ùÈ0wm††%fÜw ä®qö(޼í¾_Ðö9¶Â‡£;äW S˜TBÍÇÒ|©†…“lÃÁ'Ãvö†z¶~ùõð5íÕ²o#6|ôÐ(ÚR¬žéÔLÇ;åLµW –Á-døRÉ!–Á)S;!P¹W4âã‘—j”�«1·]Âss\ÖóÓ'm¶âý”¸æ÷ñ¿(C*tqô 3$Àû2z:‡¨¢Õ—7ëd»C©i’½r=3Õ,Óqöa£•2t™Yòi4ôæ³7kVóZQ‰V7B–ÐÇ[Éö+mEUu2Öçsm1ð²ÖÑÝQ+59k)10þ'.nÉI¨FL7!×I<'xõ¦v£UÙP [ÌxrƒÄì+Ø¢O›X'ð‚Õã!09l6«,gôEKô¬å1’ÞöÔciÅ~qßJ¥˜@Iouò'j“eî³ ÷NN±ÿP` ` ¡åvLœåŠ´óí,äÖÆö·*L5T¬qÍ@È%2èî‰Vùg(óòøg 8C\BiZ¥®�c؇ˆ˜‹ˆØŽ[ø€�á& þe샟j7%m÷™n¸(å°½W‚ûµ‘K4å‹V„ tñŽ>ð6Ô[°‡'®ü·ã@¥w­éÇ ðµLxuª¡nI[S‰¸¹6¿Ò 9NtuOµlÌo!EsS_�ÍB­whþTˆ<3˜âËS«B÷ýlÙ;‘á[2OJÕ¥ŽS)€1ŽQõo²­)»lt7’°i %»s +ZŒVhÆ8´ì¢7¥GöÑ’ôš­ r«º{Ø5®“‘Y&Fò2Ïglæë$ro póÊCpÚw}‹5Rn3=39y-—WŠC7€Ñ.¢V4©‘MXÅUG2‰¯y#¬w ßã“‘vÍr7Ï@uN䉹N¸ÂÛµmQèjw~Âõ¡DÈjza¢*—ïЇ UDÉŸM¹8,‹4 [›-ŒW­W¡T5âšvO#&•⺳l<   ÓxSAÒÇqX÷m9Wus[¨+kfS¹? ´ªî#eMx(Ú3ŸØ³ÏŽß#8¾˜~aˆX‘«Ú¿¬Ãc!Z¡ö €²ÉF!+ZuWœ—z½·#‹ 34¸q„8ÓVòË,æN÷ôYSï¡Ú©.•nT¶ýU@·²†ósrQ94Ƙݓqžª)k2²ãÑ2°¬7f'ƒ) ¯Ùvf±×;K¿¡è+³p�õF»x‹Uù:Î:'›¶ës`‚ò;”Z‰÷<ýº- ¯]v-Bô7c'æÒ•lÄ9ÔLq÷i´¡¸V¸O3ôn`u‚-òˇè¾Zö.>yœÚS‡:EŒ÷•×ÚÈl_`èãLöÝjsC¶‹O’Vk¸au‰žÉn;J-àó/,ž§¾TKrW“4mQ[{vÚ¡¹m'\’héW§œ¹¯{œ£“b¥ïUšòš±Óø8‘´_3uB ÒžÆ\õ­WGÃŦšYKjÕ V…†Q»ª$‰2»îÂnk°„ñ¸ j¯q……9| ij—EG251ÁB¶¢Í·›eòT mÿˆr „|F�À<\¦Å·\üÕDoŠÕ8È w‹tòl;kOÏ/LRðe¿°h{Ÿ2¥-¯2«éXQ_/p¯‰åª�A·ˆ:ÅÑÑÝÀEâ`¶ !ê�à!­v·n›!¢% Å•R±f6Pã»×]TQ¼µadôî22íÓ›…¶ÚFòe‚%Ë[‡–YSÖ8àÛ«º®/…Ë;rÊ·p»iׯîÝŒ>—õ« ™çU*°r†gƒÐ мå±s=ôZ°¦t½ÈÉíÒkÚIf÷ôiû-.Œ’¹KÛêo$±’ôÌÆæ<1Â]=¸×èåy{=`}BÃ–Š¸A)y/¬Ž{¯+u·‡?^¾•¤ï–´ísú~áOl‚ûKn·fq-ìw¹ ï»?Y•)Öž ãÛ·ž=2Úm’)`ÞM›Ÿ¤(2rbR0„y×Ùp)jÏQfuQHhÙÔÉÐ;Ä‹Hc÷´ÐâÙÞAÞŠY—¬÷Õ¥š|‹‘mÏöé~+s9àúð€¸“I¢Z먺‡²;¨yÿhÉ[žœÍ}5–ãë+¨)ŒW¦f@Áã˜|…+kÍyÜÞí³!ãu4¡QÕÆ±úÿLûUvë/ðOmš?s‹1rí«!õSõ_V]%Ò,.)µG y5YfñJWyu•’©Ñƒ…ÇjK¾¹[Iwy”ˆ×˜Õų9o¹emy™Ø\ͽ[ÃYôó^ÏÇöË á9 �Ök°ÙO1AØ}w›,Üh¥7ÍÿÇ|ú[zÔWFßÖ».ÈœóSÎ=ùì&û;‚�ÿ�€�/ð �BáPXLˆ€`p¸„ ŠÆ"Q¸Œ2‚?ä‘H”*O†Fàq¸Ôf=,Å£0™\ªE—ÊgˆT’{”M£òØDöU& R)”*Lf#§R*tùäâ…ŸÆ t¹¥Fc]È&ñyÄb]9´Hä±ú”Þ½X´Å.0Ú$þÉ&‰[çV9”µ‹QçÕª…)U`ø™$rg/³c®öä 1YšËqvì­j‡Xá³\6‡‹º^ë ]³a¢T±ô©+S+ÃcâÛ¼†ÚYjÛÈêó{Ý/FžK#Ø+üÛqÉ®ákÕÌ §¥b¢Äö|-FOÓñN±9}FöûÈ•d|õúäê¿ëÓÛý“ê…»ãXÄk°ùϺ`â/ �æ¨ÉšÈÝ=i*”§¬ÍË4ø/Oûòð5,ƒD³¯/Ä1 °Ðëð´@ðûàïÄm4=îÔ=5-"ã0‹Ó ¾J„¸ NÓt—'k\HÃ3«ø’�àñâþ¾Ê‹Þð¼+¼c 70ÛŒ¦J¬¬7E²Š{+ÄКÔ÷L0| 'Äo¬g&Í3,À¦ÊIô}�@f8*Ï3Ô÷>O³ôÿ@P4BP´5DQ4UFQ´uB”Åqô-Œ'°?Ê#‚¬¨ëã¡,3,ÂiF1Ô7A3¨qó%6®œ¦µ<Z©7o f·0< ÍÓë3-MÐ:ßU,~›As4m4.QƒŠª>îSfü¿ÍbÕ=ó+‚ðGªË>+¬„E lwrZ–ËMÝV5Ê4Šº¦˜»ŽÚê ÚÌ<·?\}EvË­£&Dòü ÈÀÕ+DÑ´eç>-2“9^aòåßͯˆ·I šù¹"ÍP1I’;xºÿMYŠ×t娶  GoVPòßt® ÅÀËÆp3Ý[¸—Km{MnT8”ߘÆHÛ:‹®ªš:0›AœÄdV‘èé˰Ä)ׯ#F[ /�1µÕc¬¿ëmasÛQ>¸¸È2Ä­1E–´ES¶ô¶úÔÚ„Ò¤`×ì?ª@‘¶+ ÇöÝk§Il-ý®ñ ®ÁR>w2™UÓË/òl;•Ä­°­{Uk:W§¹½÷ªWšFãÕ½œovf8µ HkÜÉÊ”QÊ; ó!§S›WÆI|ÌÃä%Î,¿ƒêÊ{ŽY=[¾sÙp쥾Ĥå"²4‘{ßÜGåh?7yAº Ioã{‚ÜsŠ•T¯ º‘{$A-匧“€k_ÌeæÝµ&ÖrϸúiȧTî¤ ô„†B8I a4'…¥F a^¥õ�à<:eT·Œ“JWÍið25VÿÓ`k¦|®æ(R` b$H907ƒk So•29÷v®ÜÂʼn+aD…®æÒûú\f1Ϲ— ½t.ÏÍö¥8%»éENEþ=‡öc[a¸]°ËÅe¶ŽJoLgmVÇ } [S©®?²Ú“Y»Sˆ14ÿ«âVÒÒ£×5k-»$4XÒâSmkæE–ð« BX’N6¦è­™Ã2eЗ¤óÎtŽ=+éÏ:ÃxzY¾r­#8[¤½\Œ©úIV\Õœm2VP,‡,ØÝ’âpo,Ô1fý#Ñßr¨dýM8£8–ªÏ^hŠe4æiçKt‡ÎwÄðfÛjI²qí¯%¬°&”M™SÊu®ùô{U£ÂAÉTªÇpþUú^c´Fy&§DâD6—”1ëGºÃŽÛ*¡&(®WR†$k~Œ­±'Di]ÌCŠ3ñ °˜žS©‹¢1ÑÙ]9ö³QL7‰îvhÏRýg44S"C:ytýäù(3á°Ç¾ÑMlÈcÏUTÎÇßå&} Ž:«IÚÃj,a&y\¸ȇN«±™‘ü$aàµd¥D…-y5ˆ‘X$e5¬Ý%,z0Øß•zœ©¹C×–ÞZÛ¶l¶ ¤Øê JÅ rȼA„䨯OªÑZ;Iim5§µ¦ÕBY ¡‚™œõ¾š¸ûNíMtù.ÔG�¶m¼;€´,ÎÁiïFŒ¥¤ìê0§ªýÞ÷;Ôm7w,ÎîjC‘ÊŒö=Ê“/ëÑû˜ôé¨/ÅÐWžsnrE§¤ã–À¯-ݨ©ø ÆÍ|Vl’EŸÍ:?v+\í‡ ý3EÜ©¦6–u&A¡(yéŠÓ{lÂÉ¿å´ó¶‰kÝA/_–Þ¢5¶™¡J8j’²ÕìôÏföqmí�q8Šø°Öñ§ìr°su×ÃÌsŽ%æ�Š* Ãø¾´9}{÷™‰áì15'½÷m¦I¶Oó™@iõ¾‰N¢åIH#z×Ä©ÅYÀ`“}Ì챟ëîSâr‹@ÏaÐ,O"q¼Õ¿†YR’J|¥Wß\CªrZqfW“f Ó碬}¹º˜ÂË:ß›©Z²6KAÚ&¿E‚;¹'§F–E6|Òþµ:ÌVL1ƒ]Ì“IW7§ Ï3ï¹)u¡ÍØq±ÅÈ*­3ꆵNÖsN\jâíÚðSZòÌiz—ˆmêm‚Ïw=ݪú‰tsn�Ü{� é`ÜI½f»*w+¬y‡Õ’I¦; .Ëe÷+÷e’æP INoËŠe9ŸsÖ³µóĪϓl�'þœÓ¨ÆÖ¯…p¾ÃxwâD•ZÕ*=�8�QàÏä½t_c.ŽhTmŠõ,•¾Ôg±¡â纙5aài,w MÅ]9eÞ §PýšÝ%Q¼O-þ4–¬ßìîX„®¥’6I*rü$ôȜÒrt… ãLu€7 À´k&´«*yÂÖ rö›²ã›.“\]é6Tdìû~¯t&ñ£þãÉ.´Çܺ”ü à:æöhgÕö>°Xn’u|7šª®úêJÆ…ÛœÁ®ÚSnÍÕ•ž½“·’±²ˆ/ix=MÛ3èè’g' 5”^OLé•þÆ:\âúÕ0UE˜Ë}¥b©­ÔhZæì£§\œÏr¿0Ò¨¦ÅùD‡ÆéåY6ùU{mÞl°Û¡hsóª7ÔSܧòú§cnê•«ÿòTCEwD¹ê§Ñ™Ðm"qîŽÕöâŸcºÙTë²:³Î¡©££÷&«ÎŠ£J.š ËÄ®¢vT¼¹ú,ì2ZôÀ»»§¡>3L ƒô'©}/˺SB›ãš*Sª[ <b§ 7è}‡øà�@‡yM•ê•<©ô¹£¾§›=13j a­»©WÁ2~@ñ63´ý+áß,»"Š¡ò˜@ˆa8��,ó„8”2Ã43ÃD4ÃT5…:‚Ð1-yÓ=¢ý s ¶Ã0äêñ[ê› 6²s;skÀ-1RŠ¡š#qA ”¿‰¿c½žô)#ƒr’ƒœ ·Žº"ŸZt":´c™¾Ù?â C±/Âî=j0Š{б œÚL© ù›CéëŽàè¹L½*Z¶™X!Ü`륙I'±Sÿ«À¶D“%À›[”g> U¢ƒ{ 9ß™\’‰£lJ5¡$Ÿ1±R>l.>CD/++ƪºí­£ž:‘_™Q+Ÿå’ãQ=ÊÜŸ`‘6xù+;ü¬Cß¹ä<ÄCð?Ø«(£,IŸÀHÅ™¢6¾Üw¿zëJÄâVÄk»jLD3ÇD­‹ýD¡½§ã´ˆØ6„$ÁYZ– "AÆ»û(³ q#ü#·ü#IÔ :b¨|‚µÜ‘ ɾ3´¬NÂKg¹²­‘Éì@³«À$¡?œ±w‚.ºò<›ñV´{$µäz´‘2!¤Y¦©Û%&'B#?Sº;{½ÅBÜDÃîDP²Àx‡ø^ˆAèwÅ$C¯Ü‘Â¥DbõŸ# ,´*Š ‰¦Ä›‹™'<Ta1, Jš•tULC¿%|3j–ºJßx| ËƒØb¸L5ÍDÔÍTÕÍd֔ЂØ1 ÉÅü¤D+ÒFÝ*Øñ+CDƼ¹+„‚H ¿—¼Œ°qÕ/dzª#Cú$d0to›#’DË-µÃħñ*Â?(RN¹[)»\“™Ðî¢óȳ1) Zž#ä§–Œ„)â*Z—ÅÊ62ñ×1”’ŒÍLÆùg%€Í¦Ô±™)3—c:S£Áiÿ¢”SšãK“0< î:iǰ\­—¼y´Ë;¨Ti2»9q´‹Wг´:‘¾*JtÏMòÛÄÛúÊè»(ÄY(;®LZ£\W¹«²!¤¸±Óü¿bÍLJÅ#ê*HÌ“II€¢ý$I ‚Ä”�Â,~ŽO«õ$“!n¦³ðN,—@ñ½(tý®©7#ÃÍ»Aºâ8?Ê;:­+O=7Ä›ÄíRSÊeÊ«ìÁ{0–[îÍÉ (3»0áÂä§é2ÇûÞ»Œ-Ô:”Î<åʉÈÒô€¶+òÇ eĪ¿Ž,û³t$ ®G¡Å41Çe8 }*Ñj¶“éTõTIX¦Ä…xS�x�w2}FÆ79¤4á½+zwÀ$!54ùHó3ŠÛù94l¹Ø1ù\©ó)뺒¸+c/¤2í;+(¬4W#èÃÒ(Íur×5s×Et¸rÈ-ƒ‹�x“4I•:Å‘Q¹7 W¦"XK8Ô‹5zbCù«¶D‹Â;Ï1Ý;«ëù%)Ò5jR9r/¤*7kÌËk.}?*¼ ųÏXÝd³lNб`µº¯±L¢®z H¬ ¢¹›.<_$Â`E¼¸D[þAšþ4²„@JMYÓ#²C³È„WÌáºÙcóš!¾1Kªíž=[âBôgØô¶ù¬V>´ Òí%’Úª@ýPJñ@=ÄÛ”çÓL‘Àù Z½N°ŒöœÁ{UKî·äÞ»ô,?ª™x4{ªT‚±SûJ¸Õ¢H;ù²@Ib·\õ<0áÁ”~%Û Ç<Éš\6ekM´‘Š)3ù-SÛÁQŒ;,­SÕy0»ù03ÅI£¸Ùø¬£»U#Ã<t65M6Y>ÇìæÂÑBµœ‚*”ŸÁ¥²ÈDÂ[­ÜŸ¬’ÄasP=ÜJB¾#c3‹®1Ó//;¼ 3«½SR-·ãm…€R�x€ý\Rë“täÑ-]À{P^BpSó)3åkZÄ…¼ÊÙTžPsÇšõÒÇÊ|Û»â@dM‘©8!9€Ò×%u`†à– à¡C…8XÈ- ‹�ˆ×ºÊh©üá̤^œâR~Cú„Qô{ÝÚßäA¾‹³U4e’(”¦Mã³›7=ë ôu¿=/»§¬ÇÆTQ„_¹—D�SsMRõ—ÖßÑtIÔéà<T½ÆÏ<|¥¢®KLƒF¥½>Î/ÓÃu̵&ÒÜFžŠ7ÒŽT©=Û(Êá?¶%·c}ÚPcÂÕuÚÓ¤ÜDÃæŠK˜L㔩]~36Lˆ¥5›–“Á™³XLI§´è¢ÚÿâQZËK³”K·>ü¥–…#ãB͉½5ãyªŠÌQ4tc‹j»½Îä³"³Å¾b¾[ÇÖ>ÄMÖ]ðÕmL]ݶ•ì}¡"Þå­Þ¨„ÿeö?Þ8 £“Fä‚DD$©<2GæF+²ËÆ"Ä´ì‹=‹ü9ËXÆÌ‡e]é2 ,ÙÚÿ¬uÂÅ] >ÛÚekG8Æ µÜØ2Xº5ç8åÁ|‚¸*€@R„˜�8l˜gÞVí¬áµkޤäšaóJ±}ŠK4E¦™dÉ1µg0ñ‘8×®Ìü±£I¢µÍÚ:?5"^®8�‡Ð|¸*Ï(`®éæžéö…6 Mˆy”ÃŒ¶þJ¿Ûu%3yµm¾ý)YFe¶v8A…ÃÛIs¼X<D@VbÈ;uAª±¬lÓü†3µùæ}EÝöR´$¶3¶aY:k„CÓ-à<‰VÅ6å¦-j=5²´—Úlø™|%@}ŸY],½é(•|h\U Q¬äúýF–­ÉºKèÄï=^Ù6J>³úS ¾ÆiÏ}æÚê*ÝÝÏaK#e£íLT”NºfeèÖ©h•Leß”>¯l#‡ã¥··dp*ŒfëÇ_¢÷AÛç $ìµ§2mÂ@Õ¦¨_¡Š]²BZO¯=×ßÍÔ,2a-¡Ò²æíìB,“Fê Þ¤çÜÔZX>oÔÍõ£¾Qf³þLmU­ ƒgÞ<"Î6¼§}ª“þþ¶ZK…ÍRÛȹúQìŒßü­¡¾-¾eÏÉvÔÒüå9€|è(0‚ð„èF�p€€€çø �Áàà+þ�‚Âb1p„Æb‘XDR‚È!÷ür-ŠÃ$ $.,…IaQh”N32™Ã¢PxŒ²C*”Ìä: y –Eá³JTB‘0’ΩÑj\v§L”Oe9lòoV—Õ+”`åö�‡ÀM¶(BÉo¸\nW;¥Öíw¼^oW»åöýÀ`pX<& ‡Â©Ö¢Ñ‰äL-òJÔ‡'[œØ&“ý#3 ÐN+µjöw-š»R£ùøüîÅGŽê¤úȦn;QÒgôîQ»ªä¬2Øt›3P»êìu}†¯•Á¡r¨Z.,Ž‘ÃØJ9ÙÞΓOA°ö¶zz4ÖOÜ­s+Õ¼–b/çÎÓfrÚ†Ÿ‘¯­ÏþóŽÖ|ù³¢ã¸›{�¾ï{]#jKÈ—,dÔ@¯¾ý?Ы„壊#š÷COsv|�®5i“ZÌ..➨´i»}03¤ÖFlDu=K»ôó/°Äzå¯sÊð¼¯òÈô7+œŒþ$í”F¬¸ šé ,,Ž«Æò„/(»Ò^ä*²Šs&9³_»3Kjà+ïZnœ6Îü"H´«O2k攺’ãٲКÁ£HôA ¿*–Ë>¯¬’‘Ì­‹‚×J/�®ê§Š$;&ÉîëÆ'n2ðÊK/ì!U-ñTت#RDÂPM*ûM”O&HÉìTлÒôMR×MÌB§U--_Àt'>H‘câ£×Ê ”ÜÙÐݳDE¤X¦7üÌ÷ѬÔM+§éþ  ¶b`€�áÚŸ4PÜõ%Û“ú1Y35f×¢“k6ÏÍPÇðlÈçIHšWÕ“5¥^Y˜~%¼/K3j6• ë?âí$nË'ÒÐ-f #æ™®m›çÎuç™î}Ÿ¯ Qò- g˜½´ÜH„>PKXÓ;ºN:룄)àp„õY(Ñ+¿¦+šµXÖÑïj?Rê{<ýll »+ROnš[¶<ã;év~¯uÀöOÔÎ×há0®0ÝGQλ�JUŽÿšÙúßKP%UòîO3NÜ/t‘Ã]TÆÑ/LÀYìhé³yJl±AíU—ÑÔP7Lõ\Ì÷I5M5¯E] ƒCR4§oÅ)tNo´iUR<ôù? ÿØÜ8Ÿ£Be0´©( æ¯Ür\Uÿ9R´ÕaØ)ôWIÝûø|‘€$—5½ôrMÓéÛ“ªyÎÉñlOmÚ·F²Ü‹n{Ëö8Ò¨¬•J~fé8µ†áÙ3êQ-ù%²#(O]š‡s*IÝ*$.¸ÃwÍíE öÞ Þ¢2}-aʵ(û‚–zŽž ½bšŒÓ•TjJä»]k¬Epqò¤´LŒ]ƒOLèèè¡+ò6ð˜æ¸Õ´›ÛjéSŽ#âv¿i/æ…jpGèü��T €¾1À � ÚŸC8­a¶õ�JÏûT=fMY$²١RŸ}KE#Ô`M_ª Y‰Lç±ÃøqŸ2šTËUd´–¸ÉŸ©qL¸3æÌÚ±–RÎZKYm-åĹ0M ¢0ңшì AÔNQ»WçmÂ=U|øâ³Õ@S=>©ãÄðbêãvôô7tZûÜâCIîÑÁÎ $Ë«ù„®j)ÍiCK«æCS¼Ô¹ØÀûe;›y �á@å¡ Îaûœl5Û¢XH\!¬,³A’›Èg%KîTt2u£Ðè&„D}”Fa6Ê9$tmªA1’©FgžL&°û§ç KNŠüz !=Òª:Q#‰ìÔçQqšrÌŸ?&ý9´!¸?ÄzOÎÄôqs†q.H•;«˜QUÇ2Bå#š’•(3Î{Ó-&Ðr(DUBhПšllUÕU+MSµ!5;2‡nNräF“̓hvE¹—=¦ëª¬èaaÌ£~¸ž[!fN¤<t&¿¬š=™Ž²s.·Og+äGíAlÈÇy)ì’Þ›†‚“H˜hצ$ÎÄa½º´¦kgCÐD©H…Ð÷Sd˜£½úŸªØÿß 9Ÿ²>ÛJœÊóRS–Å" =ÇXþ‚|… ¢|}Œr$”µ;áE~¡U€ÚVÇ�| ¡0ú¦—fêÊÛœUк¹•˜A> C"Ãè}ðD‹XÅRë`܃ð†ÂXB^1â E³åêö_e”üa «öÞx_ u[¤E}°fa¾z8›iâç{í0Ü;¦¶§î&`˜Í•A÷¯ãks“ ÒÙ–ÿ]§ú= ;ƶ«a™ÇUµ„Äê71¥!Rüè0[YIW,8¯õ.TS*²èƒ€MgÈëYPÚRe@ìg9¹x…V®*ÄU M¦ç±4å³ËJæzü·Ò´p®¯FR*[5¬5…±—[Bç ³í-·¼ò̘¶æë�¥Ç8&%–é\WaÑ5.IS Oä¥6B¦ÖÈ5}Æ…Ñ$*ÖOhî>йÁD–÷‘lZ“å!Ò8[ᤄ¾yßQê¹±n•F Å¨Ï,S«rö¨Ì-Ýg1©%¢ïõ(Ly£nƵw©›XNÒiÙóã^V¹ý1;ÆÃ'ÜÈÌ å0·éª*ž©:÷B¦÷e¬läPµ‡nÑvš¬ÐB \ªÏ&’-——µI¿ßIÙIù"¦Å¼wC8÷ÉËðèúãü@ *DÈ \p‡bDVõ–t7ÇÓAÜ/,à:zЬY¨—Ä’î/•½Æ÷mnŽåì+W&¾å_kT½Aʰ�€ø•øO¶vÞÝÛû‡qîF(|4Aå†9íŽÔÛ/Q.Gs°¶‹ÀôËéVÓá÷ñïr]Ÿd9uÁÔjæDˆ4ª5O²›°<¥´ìYlÎÜÍ´‹ž—ñ¥,éX©ñh"m}® |ò¦©,õÚ¸¶ÔS*èÛ|Î�YMYäq£·úiü÷?!þÐ,ƒ|[V6£CØ7ÿ¶oó ½Ì—Pæˆl©Kz¬’ŒôÅW±©ýª^èþY5ÓlÄ‚_ÅñĉÏÜšbï£ýÏ §Ù­J½lšéd¹ˆÇ&§jÿh†{+ìïëÎmŒVðŠ”ÓGôͤªÕçPÏ*÷IûhÎÕ Ì-œ>š½B\yð#gZ°‹‚Û(ï¬hÉîRüöúÊ–P*êÑD„lF ap ÜÊ„Ö |×êTcïhÑ0bà¤þЪlŒîFÿ'så§�®8ÇŠb«lÛ딹ëà£M²hP“é’«¯´Íͽ j‚æàÅæô®MºÇ¦Ò¦TŒG™íÔûd(dhµh¾{ÜÖ‹òÕ«tÈÌVP+ôM/Ü“¥"ò( ÆÊšé‚iîáü €¶AF�(N~mžöððêJ¦Ú0fÖ-Êo‡Êðþw€ú¬J0Ž”¼Ì40D´"H•l í%æÁnåñ1…qˆ/Îè @ÈÂà ç±`xÏnp~а™‡cbèÍpºAgË Ox©)Ì«^‰)ë*¨¨Ôä"Š`Î"k­*Þp$ÙÊÆ¡¥Åuô´ªÆ°}�íøÈ/vØŠ·±ce&NÃÀá¼Íˆˆ¯,ô鎶pLbìûJÐÌN¤Oð&,¢g#¬ÅÏPç €„(È„§‰"Êiišø²Hå(ÛˆVá§ù‡¸Û+$t£®ñI‘-ìÙ‡†y°Fº¤.²tƒ Ø$8Þm×#l¤c¦ ôÄH®,¾¸2ŒËZÿnÒ‰¦óÉ>ºŠÊÊblàrÈà1Ü\/êë* ÞF'§Â”Ï^뎖LêÎÏ/ŽÏç“KêmfÔ}pÕ ÏÐ÷ÀOqj¬ô'™΢«P.ê$­O²¹²ÎT«%åk'ƒ€Éh¨yy¢°“m5¯>´/•/é8A¯›Ðp†:*F}Žþ³ïæõªÄŒ)¯MÌ~gs5/>‰/N­$>±¬œ`Š yÆÒÒoVm2FX‘ÿ(ÇîZé±yï0ypºnF@ª;*ç_áüÂ-<l€$ t�Ñ<AÖªIØÙ¨snÃrñR½lÔq¡0 Fä‹ÈHªæÝsI!í½âN•aüÀà ±‹Aô!B4%Blñ’ �BLX/°AŒÌRe^UæÎ:Ë[5/²÷/bÓ”àѨƒm|Ò)LdMW%ËôQoýFÅ6‹’ªô“HG*ø¤°U@e¸Ònž1Pó^öЭ zš2bñ/vñÐÍÞܯ&‰ti#Ãë@,cQÇ%..ôn[?’ó' È“Ml,ªü«Ã/'çÖÔÆ°Xß©¤Q¨dáU…¬û Žìhv´k,¿ðIÍàßkdTë{%b¬t°¸‘´Œ 2ªÏêæ }EÅNøgŽ÷Oø‡u98óN¾M"tδèOE3PAîPolœál¢²­¨Ûm’rӪذÞò«g�ŸmÆuÛRõ$uFϯ\Ç0̤íÄ×hœµÄ³P޼X$¸àóM’ÌŸ%Qó„ìiQGD³8ŠVØËhÇJ÷L *NJPþ¹r°Ý0ŠpU¬LŒ…¥Šþ’\díÅ5ê¶(Äò+vWR94È.ɯŸÅŽËõý@³u>ó0ˆ0^Z«q/€ƒ­]¬~ÜÜd~E´BktBHQÖš[ô¯Kaô � x�Áv &-î~QºåŽ*{L ®¨c@‰SË!66€ëSr/gÑÊõ¼ÓЉ0¬×ÔŸ³$ŸÓfã À‘víA‡f4)kv¹k¶½kãàÊñ*‰ÎªS³h¨óuÈü¯üJH^ú/³ú‡ˆn (°ØmÞ¦ô 7òü7O°Tá\ˆŒ-a?Âèvû– Gì¦úû_V8Ä’ìƒìöÍî)ë ƒÚÑCñcí°ïkpURÎGŒ5ük‰p-÷bŒqS ÿ92ýtÔ¯ Šï,O8{´m¤>έµ;nUV*ÎÃûtjÓF攨Óñ<,^KßWPï ”v|‰òP‘Ó ,; ¥X9T¬ÊŸ‰ w>>)hRÕV%ÆÈßqo)t‡RÔøsȶiÄÕ#r.šŽ„ll¹ãÁ"´©1ñ T*5yÑUXØí[{JÑmq!ÒJ.ýQÖ-{sïz ˜Wh¥ Lù^ò‰qʆã’r±àéµ{&“Éõb,py~”ói…¯qC±˜g²ùdWÚ­�ƒ‘§N à ˆëw 2¸«VÜù•eVÖ ’¬�”UÇxìè¦K’8B5°å×Tž˜ü¹:õneožžŠÃ[èŸ^ÄXáâÁ„`* m=‚È�Gf†ÿtÖàÍL•9“t[ªtô?b²êS( y³­MO RjcÌéf¶ 2n&µÒKS›h‚iXí!µk6Á“y9“¹=kL!ð `Él”3 ‰9$Dá$ˆË]ÈDã7&DS ³(Fpvõi"‡:“YFË!ZlŸ•ÍŸä’ð§RŒ¾Ü’+m}+ ‰k,Eø‹owÁ1îÑȽ)©÷øê“v­K­3·^¯ÌÒ¨˜¥0ðÒåmœµ—/w²|p=OW9Ý8”Š…‹«b.¸qE]ÑÁuI=x;ƒ=3Ø'•sTs’™;F´àLØnä±65Äãkª‚6†õÚÜ3LbY_/£ñÒŠÆíµ×Œf"P±[6©ŠDõs´¡ ÍÏijôz‡›Ôsx yæê­smyJßX7?õ'?0žûš€á/ª oX佩D†ÇpUVÎK`pø0#M—ŸMp7i7�üJž –Gy.·Z'¨¹û›]&Œx¢ò5î»_8žäkpr Ö”$Úí–VKùw³nëˋͩ­ùöÕ,ÆÈ'?d·‹ÆJÑ›—%<áàÀ  À* �Å<çáÓ_H-¯Í7©‡ðñL̫٠­‹qWԕΛ¬ùO±pØù3ÂȾÊ:i ò\e¢Ñ“5“û¡º;¥ºt+”Q�25ÒE;vÛv´c§Ð½Ð[ZȾµ$Šh-¼D0­.R\tT*ÓÉr •ž{9Ŷâ6üÛ¬9ðé«zQÁJë#FY©“K»wŸÛg©Šã«ç NšXw8Ô•µäê€SŒÈQ|/—Dµ6³Š9ª£«.”1 @ ×iˆƽK1;QEœ_¨³|'϶›oƒ§2gO·9 ³ dˆ¥Àww$–aòw­Wjì.¾üwƒ«Ú“²T·ˆ÷}o»~U´U'ê³V ‹;ÙŠ}ËÙpø™-Ò4ƒ6ƒdìñ%Æ;½w§7¿§Å§ëöM RL–%<7u²Ë(ÏÓõέ!iÑ uMtˆ’îÿö0}Sk¾<P¼”häW˜X …Ñ_ÈØAŒJ/`ÒŠ¸r˜(·ŠênLêùÕ I¾ù› N°SÑXÚ3çá‰ÐåHå²BÞ³È��`à& r�âåŽAÕÂ/@;ŸŽŽë3УVã# OP'®½;ÐÅÈ’;Ü<Ý L~Ç;ˆOjEVRâÒ�™3k[©Þ½íÞýðf™C”`ÈöÊzWΫV6ý /*ä°+0-·àÓƒ;»ºãS¹°e*R¿A<VÏåTJƒœHIW[ÍðUšŠcÉUó7h¹€í91uq³*÷W}H?™}¹|ŽA,’ƒ®ÙŠlÄÎb0°óÞgnƒiå•À’j;+)Ïï¶mîå%nµ,ú¨;²¨qFrÖS“ATûÉÕW¶’=w6È…Ó-Ã~émjþ‹Ô¸më+Þø–㉹ÌiݪøƒžÝÙ.WŸiÈ‹±;Á\º;{öÞKâUû•¾À“°ë˜ï{YwNŒd �gEÐØÆáFu¬O¿¡]¬©þ¥Ñ®œ’GܽÂY‰XÜ«ªÚˆª¡D-¿Z¯?Yyˆ›ÛÔ­Û»Òh•Ý}<ÚÛÎýÿ£c_É­ÔY’·¸}ÑIÑàx›×Þ‡>Ñë~ÜJÿ£Ñ˜û¶„}>,]·PÎ뙤qÏ`¦È˲á@€°  .¸ä9 S/¶²2Ý*ô›5àÖ“9_•=wÖ ��þÿ�` þƒ@á ”) ‰C¢Ð¨4j%…Bãðˆ$6+„I$p($~7 •Å#±ù\²MÄ&’¨[˜ÁañÙ„ª4ù}�aði„™Sê•N©U«UëšÕn¹]¯WìŽÉe³Yí›U®¦§X¾ FGx$#8ƒÆ¢5œRˆC$38Í_‘ÅhX ED¨ßñØ»Ü2w¢BfRèöQ Åaäq=ªù‘›d/¸¨|.O=–å¥5^ý>ŽIgpzê‡!ØeæYʶº{½anó˼ös¹¨oã~_çK0“>v[K¹Õe.Ýê‹MÓòö«Ý“4ÏJ8ù’-ÐÅæiô¿£¹†æ<iã„Ù9)²ô×8«bÒ2Œ“Pè¿- ʰÉËÐê(Oļ9i¤0½/îÌŸ.ÉK¿Ãs*ê²î¼V½ÂŽ„'¿ðš‚‡6pCÚߪ„ Ç.kpíÄ0¤$GqÔ2檯û6’0’l™G$L÷3OºúæÆí.ì£ Ȳʇ7Kã¤à¼mƒ8û>ÎS*Í3 cÌöÌileÀ ÌÖÇFJ�8)?=N3Ú«BÎò3=ÆÉƒ‰,I5-G‹Ã+N"8Û>òL·#OÒ¬å*ÔÉJTª½9BkÞÌuDIU«tÒJŽEòTCÁ²sO!TôuÕHµLU9E©<+B¿mÚoS×.ÕTÏ]£51sDáN–=\ÜËŒ›FYô”Žó¿Í oUBvƒÖÉ;L³Z•³¨ô{á ^äè& ‚À²‡EîüÎl{!Or/aÊ3míÐÉä=_Á2[c*Tí=XK¬ ûzÇÕ|ý|V ®¬P½{v%—Éò© "˜§-™æ{Ÿgúƒ¡hz&‹£hú"Ü{®'€€U´¿5±:”-˜¼5“A0¸¹£ç•LJ–+uÎ ;±4c&ËDe[9—JO£ãxNî ƒEÊ£™Šm0ç·ªlÅ&Úe MU Lûö­(C›‡‹Òø„|åɼàê¾UN_kTs³k«P|$Æ7¯´­5Ò•û= QQ¬øÕîwdÒÜ—i¾Ô4 ·Ôdq>æX¦«‘øj¾¯%ïrTÍÚøŽu¿™ž]&¿ýÛûqöñŤÁp0GmRGû†¯D­ÆéêmœóÝS{õ/®änapùùC<µqúó=Ãþ?ÅýUdcÈqµ7¢¼üŸéeˆñ‡(Bn§®Sé ØµˆÇ^‹¢O/‰Ï“…ÊÉ!Æ^éi:7V× ‘Å;ë.§`‰–2ðF¦tÞÅÚöÍ›˜YÈmî¨Ã ±ÖBÂ… É“¥„¢á³†Eˆa±%–¨ Ñ �Sd™] 3á•"âQqX¼½ãòé]«ÊK0ñ5µØš‡Øüà,€!Æ2@È Müª�–ÖPZÈR(õØ¥‚šP+\7pa“(h ›ÚCQtð¹…†^a«’túž³¼i]º¯bÏj åìža97Soq˜R:>‡Ðÿ@}œŒ*Ò%”³–’Ö[Kyq.eÔ³iAh2ŽðéÑtÎZB7T|Të—%Ë<¢é(MQj;‡fñö7ù-$$¦k¤¹m-%8Êd©å}Ñöd¶¤€½\«Ù}q]îÀôØ„[$4Íé'£Ö†ääŸe åçFS[(aÌn©ý’Át-BLÜù]e"9®øb“3n”*„ÎèÙH«¯>T°ÎÊ •Ï|{›`›ã¨Aèkø%ðñÍ×:’j•|ÑN ¸6Dè{îŸTrC -§S÷Z¨H˜ôWK‚\ΦŠú™BÊ#s‹°1.c\iþ€RAÚª~&r …MèðRÚnç™\‡Æ%5BÃi$[‹SŒíåØ6åÉ&Y£üMÆÒ=ºT±"tG³†Ôú¹R'²ãzÌf¿¦”@äQ5c4…6›XYRjÍ]ÇHÔX ÜלBñ¯kºÀ¾ú¼w"\Ȭ+^¹Áxj_Š"¥1]Gd½ «Z�XÇ&2AªŽ§“êåB nEcýdô@ó%.œk•M ñkÖÁa]:qeË[,¦Yâ^ ¼¶•h¶ÔPF¡~òß¿ë>?‡ð�À`â„Hx|QÏ +<ß…ïF½{a!UÛâDÊDßi¼ïÕâ nBÏ (Ö¬ =îöž›)šžD"vvOå:ú'±€cè <ÎF±—x×c|qŽqÖ;Ç…b^†aÜ@€‹î ?š¬ŽÕÊòŒ¯5ÉĉKrE3vÏÏŸƒ_]Þ[ÅH¹2‚eu’tÙ:w‘t›Ù9Äý™]Ÿ>å‹©62í›Íð‘¹fâµ7 ÊocŒ¶‹Ã—Ê·!£mž¹ªxkKÔJ»AíY˜hjuj],9…ö3Ëu\-Ú¨Ðêb¢Á( ’´ì ÓÓ1ÿ2'(íIÃʬ-‚Ñ«çˆ܈Ÿ¦|‡a €£5ši6Ãô­¦‘úƒÚŠN¬Ó}5r–lÂmÉ”˜yBÄŽÅ&lÓZäÝÛE \¢'D–û0$jÆrШm¸¼ž¨•¥— ŸZ«FkQÖ_>–óy€É'4¸Uœ‰ôòv‡jk7Õéaàf­°j®º®dx%D} ®Óž‘'üøAš ujwWònò±Ì*m×ݯ'3Ý)s; ÑÐ{Ýy·ew…9Ú¥ÔĤÕ}°|Ê=¡ùàq,ã©­úºGñ̬Rä²?(ëÔÑÍøPõÖeðó¸>Çør à8B‡`X¯øçl3zðȉ¼Ò®@Íoqý($ ô©³0Ûwº¶«ý8­Zê´k†£´ ¶§N›buê {ã Zqh�J¡üR@(Ú–÷Çxÿ!ä|—“ò…Kä‡:ÇnÜJ{GçŸCg¦ïaœ‡yéù3ž“*k LÇYy—H²Ìü#™©x!b#\×ûve†ª›î±"¾liñ«r6�ˆóæó–‡Q ¡á3,‹ôΖ›WjÇK€«aÝÈë–«¾OB¯ç*d–Ï¿³$Ûúû¾ÚÖ+'E9·ÎÌQf•ê‰H¸-Ó!bÉÉY®âÖ;Õ0é=jœ™h%B$èÛ&˜ë& õÓÒ¶BJ©qÑSãÀ )R¬¡U‘³ò«—®Øô=RŒ* íÁo¥2lªÃ;Q—”¦R÷ƒ"ª“^¶Úº)h†>c¶«zš-ÂA{ÿ$é*+×7¤ 8Òn#4j…‡ù¨?…¢ *Q7'¼'ûjŸ’жŠõ´c µáx�î6ÙER" D ‡ ‹OÁ“u¸ñù–T¬jP-º#¢¢(Àzp¶ëm7ª)°ô5¹š"4Dh ä3ä?•ä>¼ ºCÿ( ÕÊ€›ñp/b>4sšã œü*';“3/7DÁ)Y“Ê' Ú¤Ÿå3ÒL¤œ62ó  aO¾˜\XDy!›CX?yˆ¸{¨�à € q†0 *ÿ‡1Á3»î.65:M-ò­¸Wªs¤.<p¿R ·ªò8aô³«º"ý£ºC™zDë&‡ø|º‘œÐ`�³ÊÇÜ~GìGü€ ‡h€{å'*6ô8‹o*´_=jöÇkü6[ì=Cî¿CI;«ÓÈÉýê*)ò*«ƒª[Q­«|s‘*!(@d”(Z¬9y\¬ã!K§© =¤9ʺw°\,Eã?¹¢- ÀÊ‘ŸªF”@Ä”`I“Pœ 4ÔRĺ—/S;?%EãÁzì®Ü¦3ì"4 [)ªîŽÛk“û @t†³Áî5x®¸š–6z‰É0œpÈËs„):M+$5"Ély´Š§˜¢?Bµ·âzÈLŠ*,dž¹r 'l% ²h·Óî§Û üXºCÚ®J·"t8ƒ}JÉò1’¼ã`|ޤ•¤ópÉs f·rŠÅ3¢Ë¸[ ëSJ:ïÀcï.C¥sD«B³qÔ;#yœdy9 ,TجjT+y®Ál’!IJúIDSë<Ù-;·’HÊáFÇ ‹t¨Îûk<Þ 8y·5äâ–c}¸L×¢¬‰À|8Ìn« ±TGDÛ„KséŠ#‡ø€ �…XL� %‹(3®2dU)lìãUÊ÷>Rœº³>2C¸Ó©ý½êF¡ôƒˆÚß§„üQ&A)Þ)Jø(,¿ñ´³‘ÂÓ©1œÇÌ€Ò-#R=$RK8YX3H#Ì­P�¾PÝ«;‚¶ù¯°«°Äbn;kãÏtM¼Â(Ë×3±2Ç“TRà¤#<*G%ÈP4…P*«½}0,À Cð­Ì2QÁ=ªË–¡Ô>J,¦kjET¬ÄÔDÜÊS'?Ûüìþ<ùˆ°cúÐÆâpBû¸¶œ³:¹ôý‰´YÎ[¿8˵™%0á˧Èõ$£›=«iT(À›*±»ä #ÔÛ ET 2-W»Ô½1,áK’3+$œìF!¶³GMM›[B‘Ö¹Ù"4«L¡©6SŒ<Ôí5˜Ã‚.ÂIK+œ¤šÞJ’×D*Ò?l ;»Ý°‹x!3DWq?QmžÐÆ|/?úÊ“¨Ù¯œÓT”ÉVã ÆÉ=Œà›%ËU-U<ž¢L<êKªÙ²*§UËl7",ä7 ÓSõPÒœ++Í„‡=@¦‚ÏVäSó=ÔZâÓrjXšÊ°°<Ë'{ÌOÙŒ¼¿‰µ›ØWâ È…ZtñÄìôÌ,®3Ÿ€ æ@[‹&-*jæ¥-c9ZQ<ª6£X¢Š’b1:›X|‡À€@€�Yø �@´�H‡2z˜ù¼@#°›Œ!=¼ˆQºK8 $Úˆ³Ì°¢€Û¿íHýBsA¼4?l•bU%bWGÀ ÒUÒ]-Ó]=Ô (·°-;Ì‚Á@åGJ”×)êNÁÜl8«Q\1Ã5_’Moº…N½óð»šw>t¸ \éÄ#P¢«íÃËÁÁÍv²½ÈX£ã:¿M=Š?C¾=5×ô†Éø¢kÕ 7!òßS2'Sû¢ÚUÙ‹¿lqÛϹÝAO¹Y:rw¬ê—¸¼Æ+"Ù^&cgª;UÀÚ¦Ljð(êÍàE³8õáF¼žŒª4SVjA»-t¶´ôº ëCPÜQÁ$ú©¢¹E[ŽA¶ûsºI¬_‚'5û\E’IFÖ”X¼4:7…άrèF㊕íŒMI0Š„¶ÒK¦�ÚìÍÃ$-Ä×­LÖÎ[lLcbÁf[K'·òºÃÍ‚)‰†Cn%Ì4"nYíQôÚá­¤9/¨¬@$¿•V@ ,,úVzÄ[@;µ¨O<7SÒïÖ³—8lAô)C·=+WtÐ';3.Œ·‚A—Ä d¶MI1ÞdØÉʃ_^ÓÒ¨¬ÙLøªŠ�ˆ@}™°��…xM€°#õ¾ P0r¨A[,V*¸†9Ê\»ê© ÙqO±ÜËûDâÛ÷fd%©_”t¨âü°È’Ò›¥pl…ýÑÝNtgNug]ÒReÖR|‚È=˜¦tô4%޼ßÔ%ÈíÆ#bÀÍT$S/+ä§¥| ³æQ|ˆ¸]‘,B-ÙÛÁ[BÍñáC¡+PEö7É«tѤ_˜ócDÜ—Ä£‚¡’oÕ»£YÝà”ÎÄŒ‡7e^ÀÛSÊyeÐúŽL Q$Uä¹Åt·ñÍÝ—æ.fê¬þ`)e@*»fœö“Æ)3áo¤iéœy7X™“+½?täNÛÀ³lxê%ÏYÁÀ¢cfóâ@JÒá{yjúe}Ø4 §�îË­Ã+FÊܣꅷ@ðÕM»›:cNW¤þâ®Ã63À>�êéüM´ufáfÚ€çÑši¬4Å Åæ†Ó%ÇB`H=þÓ(*ø0qHBVX~5ÐÑÑöÙ3ö¾(¤ÊÃ[‘&,Yè¤\Ðä<WQ ›´h5©Õ¶M¹Ü48ûÒAü$Á¼6 ‚º}‡hsŠ!£ý wÚûŽJ¾‘FbMê|ÑÖ53Ñz³¸¦?¤* c kþÖ µAõÆâ½øÓ°�R¡ìÙ×f vá¦H¯¡›�H��X„ð ‚娶P¸rOóPYr-WcCÐëø"®­¦ÌþEr(a¾Ãdƒ®Þ#§Ùf\1=ŽÞb’0e=o1B=®äµÒÞ‰U ���襆� ggqßqëçuÖ‡`2qä òSíã* ™Zºµ¾§“þ,ñ„ÚN*ø/TÉ–pÖ·­D˜Þ;Ÿc·*@C#r+HÕ­—¤AÊ6NnŒuëX7StNêß¶òSc…+ÙºÈD›íƒ‘äý¤Ì;>;^ÐOw=~át4äÅàß|Ä)åêPãËOE‰f¤”ät9ë•?ô=àiêÙØÞþgEÏ•+Êƒ†à"“ÕD=læÑÂòS3z3ÁQ^Â+NÄ#¶Ì¢¹è»z^&¬1U«™‚ë\~ã">¸¿ m)ÌŽë„Ô"d3³©!b/:i&{ä¶ËÎîµÞÑ©ª41i5)-nU óYÅ]Ál-ÌÑï+•|ÉVŠõžjŸ1´ÆëßçÐ}Ñæ‰äNµÂLëíò\ß?Þ¯_|c&mRÆB9"•ôvÆl:ËëüU·ìbêpõƒ5J>\;'óêãböÏÀÓ^öÏbºÈ<\éêîöâÈó–&ÝÝÏ€Z†[‚8ЩŸÐ¸rä­Ki·iòƒ~àG)õÜôXsL¶§¶–C¬7tªÀïi{´ëÞÚˆ¥?3•EYÖÒѲtæÚÑåÝ!)BÜúV™È_ñÏ{¸{¹ÿ 8vg‰K²E1{領\ÒÖ–øàÞ´XAmàt©ëäA‘å_cJòË:ükr®Pâ0‡¿ùKlî5íZ‘œÜmáŽàÌJÛm½)±¶5lÿbrpÏ`è~*(›\Åï‘|ëMÖÛK>ø:Ø!;g°Ÿ–¡9èã$ÂF¸Ù»¡Ä”܈îùOzÔ=E|mL9ãØ¬Z‘þÈ+¤D.Ò±k´6ÅÅZÕJ×Ö3Ö¦´k¶(zMj#einæj§Nuú% ÅþÕC?��¿àÀ� & €ðX\‡A ÐøL6ŠCãp˜¤V B$ÑØ”: •F"rØÆI˜Åa’ˆŒB%†Â¥Pˆ,–=5‘A'’Zn%Ò¤ÑdZ—7ŒÔ' Å:_¦V+µš½FGD¯Ó¤6[-zSj§×-u›…b!%¢V§¶5‚•L@«°xüž~µÒ#Õº¶€š\'µ æЏÞ2³:}2IŸd%7yµž8šHèÙ9Dvë˜Ðâõ³lE]£¶á³™ÛM"µz·[oÛ¬¶~w‰³ÊçxwûúS>ÍÖï•ÍÕÇ?ªÂg§8‹Þi¤³oúû –Sw’áR¡UûMg®Óoµ“»áþ € ÐÁ téˈœ‹“$õ¼ûš¦ªÍêtÀÁ­ê&à³0<%8Sš½&¬^Ù)0ä>«9›€ï9£Á 8ñDJ×£rLÆBÉáò}�>%ø0ÿÇÑü ÈR‰"ÈÒ<‘$ÉR\™&ÉÒ|¡(ÊR›üS–G°´4€H/°„ì©.Û!/¬RêËðLR—£‰B‡ ÅMSØÓ­+šy¥PÂ@èÅñC;?±S¬îNÌe ë; j¯8Å“Øõ'3BØÁ0nëP¼Áð3¯7Ó0lî³K|†1ð]<Ø:/ -THÃçÑ- â<uŠŒ÷³së€È¦lL¨³µTûSX±Œö%ŠaK±õ:Ç"uèÌ­ }¯­µ&É´o=I?.êlAJZÊȤFu3/Ü0‚úÑY«Ü‹OÊmZòO/r÷Æ5<'"U1óÒÿTwƒ<´%jÇ*w=-I_•F�È&U´UqýüÛ­×ËÆkA6SØÓÒÚk[d–Ró$l`4lWd=÷ŸUCø­ÿO3œÏ®ê!žµm‚ɵ0$þÊ5–…™è.”àÔÌîÍ ,/EI…7ÍÞ¸Þ-—Î$Àåx›É[àšî þí³Þ¡\#‡˜ºV¬öñ`°•®¼p#¶Í¬³¢çRÒ«…×?ÖWVÞg0ËÊ£TLåÝðG.Êí3o‘!§Ñöƒ€ÀMÀ Œ2¢â@TŒG|éV–‘~Þ(¼;v[©]´–ÝÆø“¬kû£9âÛ5á9‰”8Ò#.6=Q׃縋ÿwØë:Œºð¨1õQÉ´_ƒ=gÑôý__Ùöýßáøþ_š¡+KAÖKµ.7•ïuš)fˆ¼Íqbêq»„:¿“[�klÁ¡«”°y³.]¤2CÒK‘“4«¹h¹6ŠÓŒâzy'µk*Ô6°ša $M-ȬôÆQYÛa7ÅlµVfEÖYÚ/òÃG–M×ûÔ…íýÇ­M3%.…U~¢#FãÛ*Ó1¥ÈÃ6CÐÛ@ZŽEo¦§tʈô�p«†0(ÝÙ„[ÄÕç.Å� Cˆeê ˜BHô¢Ù)b.­Æ»"Þìä yd M'ç.ÃSjì}ºF©̲Ð_B;3(ΰԫŒs§µs8e µ jÛ;FíÂ=‡,‰â£±;ÈiŒ—úÌäqi§^C(”¶ ›s‰Í©³•<bB˶ß$ÏDi/ká·8gÂcR½®l¯Læ8È¥ã~`éÀ弇,Â#éµ—lúPµÉòPštnÎ8Ú�'tàûTœr8ÏKå "\ü[Òd©"7$ऒ‡<ðrv+ÉêUÎâû¡R!B5g-æ!œ³µz3º*'{žOùIsC+Ú‹i¤F}À�>ǘÿÄp꟠�uÈ٬ªuzûPMÃ"øÓ$;m„ =Py“aD¥P)½5¶V/>d4…l!Ú§‰Í@ =S‡P4·Õ¢&Gûã�ch_ªkZëem­Õ¾¸Wå\ˈ§i`3ޤ¸�Õr±ƒç­¹Oו V1¿Žy᩟bEBÐýéÙbÐÚ/eJM¢J˜ÈY÷)pmº¨ƒ¹%,]ÓØõ'v:õ^™úDFÈ < À‹IÍU;k5æ=° ªJ±ïXcðŽqœØÇ帶“D6¸ˆ¹a&£4ô,€\õþ5óÀôÚ<¶ •L0tÜòVŠy„YÂШä”û³¼ÖÂGV•8-B•·Q®ÙK…ØÃ<WŸs²ÖÉ;].›Ë?ö‚`Äy©0du¶JÖàÈóÉð~ˆR H4ÕÒÎîÖs²Å…©‹·X\¬ï·å\71Š×^#lGšæÏH`ÿjU¨9Ôà»ÔA& q•ŠuRDV¬œ=­ EË!l’Ë{ÓfVÆwAÙßR¨ÛvÇOñFóz×UÒW5!<UÂìË“…Ñ~SœÇº®òñ‡”÷ö&ÜÅ~iá¤&MërñÀ›ÁebJ¯†uE QEm_Ó ÐÏÅœ¥áþ=°ÿ�@଄Hw¦•°‚Åyç\ÕϱZ›š’¦|ùMÖåh¹ÂãM:wѤÍ+¡Ð|R[:–øHLÜ¢PÃq¤îü|ºFQÕi®›dl•²öfÍ~IXz… Ò:Òâ^§snÃY¥Ûªòay3áÛ-(e3iÐV"©Ï%Ëï,Ûvù&06¼4lMÂ&)#¡§ÞgaôñÔ¶¼œæ4_³wELÓÍwlKD¸ŽÏ¯^Ю}¬™Qñ‘\‹¿}ÛF®?òŒéÅ¢±ÌÎ~]d~?!lo äÉÛ7ÞE¾íÞïá²45õ®³]\ÐÐy!_Kû"¡)9OZÃñìÃ,SœÏ3Æ ×¥gLåºÊOcèá’=ü×4–ƒµn™“ÖýÔFJ;×”{- *©³8ëÕÐ’år–"òžƒ2™¹× ìr©p®š1ÍP[:6¬MÖS: Êò‚H¦“Q+yš¿o>œÔš…Ù26ÝZª‚ôjÚ‰¸4äJœD–N‹«:‰Þ‡Zóãr IÇw¬ïà1w}í”›ÅL ì˜$—¿q*­ õE0?ŽPüƒü}!ü È ¢p @%_+x ÓZùMHK^Ölʸ„…òÇÈ9ùo¼‘0G‰]hµé¦G³TYPÂnÙ¿¢õCýHfZíZk„Ð(¬„p�¡²ªÔÙÐÐ#JäÚ ¤$ºÛînœF»ç~f*r¤<eÄäfå\Ô –ï RýÐ8ކêwÃ\ʵÉr-Ær÷K²ÇD›Ì›K�¾K´Ê€üPxÅífó¬XñLŠa¯ˆ¶îFâê¶æ|iêߎ¬š(ÔN:ÛÍü{i¦e†:ÃIºBèZ÷.RïÎΓÎx&&ÁÈ¢Ç̆»*0¾0ÊÊfì*8ð¯hÅ+Ó„†ä ¢&‚ënÐÄ)s‹>îÇÿ)þë°u«¬ñp¢øŒdœgŒ‚²÷gsƒnï°ð×h>ˆŠ´ªÌz“£¨ôð`(©\¹¯ÐæONÑÕ%�x¨¶0¤ð©,DpBd†¤BÌÃÅ:KËÊ–j °«®o¬ jI ¯vjå7E ”*snbºâ€ièë êì8ÂQZ¸gùH؉ƎŠæÀq¸×%8ÝŠoÄâŠál¤‹lŽÊfx‘tÐ,o7lº[Ñø5krfÄXËW©.Þ¬ÂA«.b#6Â¥ �`.�a &€z@$Ò æûÁÂVPx2Q-t…ˆ^¡ƒÐ³Èvae~iež€ÉÉe&‰DöŠ ¬ÉÄDÑ>×øòïFX&2ó΀=R[ �Ø!þ`<�pp'*R§*’«*Ò®?°* !ÔJøô‚n±0„odýèF;0îö*¼0lS(ÌA‘Ór€qF»-‡1ðèÁ žlBÖp—/2ìÞ žiÑ$‘±ÔÁë{-ä€n-d©´ïî¼l(âgH í~ê„ði>oŒjC¨ŽëÆî‘Hî¬`ãÉDCÄö Þê0§Ñ@„®â÷%´“Ù3 ÆP˜ÔÈ!Œ •âÂ÷çPÌÀ3mçüé«þš1ïRkz1l6ð2ÏÈM/e–q‰-, ”VnÊëLu†‚q_MÑeXwË$Ä©³Ó(A šÎ“0ág˯n8YNª¶ŒVgÎdsF({32x¬’÷ÂL—@5+æÊg‘Cg¾ì2êøÑh0H ²üìG€þÆÒy¬Ô1H¹ ÍBò®ÅÃ×M;$ô$ß?/÷g¸1SZd } óHÞI,ÍÆne´uè™!©Í†¡³äŒ\ݯ1E• 3•sŠ¿kB²"ùÀ�â ü (�ÜI8Øà!ÂJ“ O-Ä’ñÒÛ ´#„okWs>Á ïËþ»-'3²�'¬ <GA{*2±QQUQ‡è®Í£+gô"Ž@D”› L‹&ôÆg3.“WS Ÿ&LQSËîýgF êô9¯ŠoðÖWƒŽìÔNT3ãA.ÀÏO`ë“;ëM,PãSã-92ï6 *-TX\e™ OP°/ÌÄô2ÿ¼]¥w5PX׬þPª FìØ(ç––EÑ0rÖ´D÷,⨠ÐñÊ«(i¤ºˆ ïk$fäv”$yŽ,;È;6ðú¤õn °rµ/Ôèð¬ 9 õžp AG3*Î'VÌUO0„d*:ŠR,_!0¦wç» ž‡­YAêFÃSk<e\t~çÑ^ Äà$C45_F£ §&òïì[rdîn†. *dZ¨Qxé[ é@5 ²˜ê½[PM]hì¬ODb¨“qGÎ4œµ® mänÓ%mWÔ¥.1© ÑÒœñª¢âÐ…o!E°ð¶s­ ·R–•I6èUH¹Œ](‚½;N(]¶(ÊôÙY«3:­ÖLL‘/¬âíécF\Áï"!ðÀÀ€h�ò $ pup@T ÿlSîŠqÌ´æÿ9‹øÐ>£ZEÔ‡¢Ä8q f±§pxȂà ô ±ÂíÃt Êð•Q·—y—›yמ?õÚAÒp0îRÅ8kCµkA°á?ôQ3‚礢iv¦€®]{ÓGbm,mËB,cbrúø/ÉRªbeSiµ;,òŒ,ÔÝOÊŸîí&uøÿg”°Ô2L”<ñ1Ñ7J [ ÞÛìÅ\hï&èYpC±2 mGó„dŽˆE¦†U·e¶/Cïofq6IRýXói9𓱷{©ðÄÐÖI tÝc~‰õOn æçŒÞ(¦æõ¶^9Ðl4'°5UMCIÁ[Ñ9=é‰û‡S 8‹Þ®¹IM€ðîËðmO ΡK~ñ¤ºHh6ØÊ0ß3ÌëfRøþõÝ€C ¼Øåe¿p±–Я.±pòmtˆÃk%Uuˆžò¯Êw«-ˆÐÂUO3O.€¯ ºlÝ<Xˆô馋ˆÇªÖ#=“˜Q˜ùˆ3×”TßJ–+u‘RÖ8®'ƒðì…%ùvþ;¨’ÎN£’©¡|íW-Lxa̳ ›>%Q1–Å”ÔÞùÃ�AÞÀz�€6�€¼  �os°'s÷B·"¿3MV-l´¦d5ÀUqØå©¿h‰£'Ñ´-K½�VÀYÔá*F2gÂ��EP—¡  Z*Šì¤WªžOÍjpô“ d͵ДClz˜—”&ì‡ðW£o˲fÊ»FOò„OŒ,=^‰zö/á6é³Q/mß{c>tçžñ ÕLε9Øc{¬10Ù8HÕ™Ífïoe’Y×=£j¿Ø~‹+:—¢´jÙm C:V¡#Š{f¦‘¢ ð팽W±m¤Ó]£‰ OläëóÃ5³T–êœÎó4ˆ¤"4•2(õÀTÙXú­H–h�ˆL‘™âÔ—G”P¯­Åè•’[ƒyåOCwŠŽ/V´#C×M¨·96øà”A±ÞóðƒqI“úëÊHÞÅì³o,š»©ÏY<Ô0Šøƒ^c‚ž£t礆îžÿ±BN³#<™sj.gbñ¦Æ1Z*{×Ò÷O[?¤ôèûp›4ÖõÙ¢Y9l·cµØþͪºÁ+STµ^w¥³v9ÏAjü˜A€rÛª·K ¯`¹x6<ÁìAú(�2 � �!À( |` Ê?*÷>÷e]Ç®§»·Û•7™ðâÓíËÃE[…_2t™ñ~\Bù Ú[Ê�Š@;!{Ÿú ÇÜÈ‚­Paè Ô2»v`z+Û1± ‘[�¸¥åA‹ôÐö°“Rõ3E ¦¨“è¶–¾È‘˱'sx·1[¯k¤6îõqå;ÖZþ›i«ÍÃ'HŒféb™ÑcΨª'« `Ü­¦kYMÚí¯?‡Úø1ŒÙfʱ)lº.é‚›àä6ÓS¥™/Wy$Ç ñ—øýg²r‹ý0(»ËÙ/Qi¶ÿÀQ3“&®ºp]ÍÝbm¦ d¹Á²A¯9æ°>ÐlðÆmc3–³¸A[ùÑ’˜³i­eãW?‰³¸'Ÿ¼H­\Ú·ÒòU“OÓ0Q@igW¯û㑱ðƒ8uS«?€´VÕk.°ÉQÞ„ñ^^Xaœ°»ß/ÿLš&“•”£E¥RÚý Ël†ÔxñÚ\Å“Ñae¸ç—ôàqr7 / šy¶Ö¹0•ûa§é²Y¼ZqÕ™EÈ¥•Üe¶Ö ŒmÜ$IÓc•"&°!è9\ ` À@@ì  Á|Ë`A¿wvnkXó†a„8J¨ÉTLu÷…XKÙ·ý%|; \¡ä™e¦*¼õÎb«4ŠÉÇ5 ¼…ížÛíÞÞI¼‰ÈÜ‘¡Idíq‘¼içFémYO2Íc¶¤¿hJª^êiŸ‰ÐV6›†RBðI:ˆ#ÿ¾{C¼mÞ}ÓÖ~*v'… dßïÐÝu2:²UÈÔ5ëc¯¶Q·n_N9Ìï뀜J|ˆÙ/^g£mÊôó°.Ök{|ÄïyσOtqyQŽ{“vð™6¶ê}ˆ¹52ÒÌcöópùp‹ßoSÁÜŒöVÊЕ¿uÒ´Sð¸PéÊþ'‘{`j˜ÕÏõUÓ�fjã[Æ ?=\©:"����@0'ü „Báxd „Ã!Ñþ ƒÆàpHÜf(ÿƒÁ#Q¼JM Æ phl²)‘F&18|že MåñØ\Î[’Eçó©,+D–Òh³yŒŠ;(‡Æ& ŒZƒ žQàµ*$•JšÖ+óZ,ÂÅR®Èè¶ ÔºÝ.¹M§W9Ô~y[¼J¨P»%¾ÍL§]¯7˜­ÿ ‰©Îì4ÛZm^œàìXK&Jý™›Ó34®w¼b$¶Œ¬â–ek–šÕÆ9YÆãæX*EŠ»€ÄÊ-ÛlFÙ¸žJ*´Ýþú3¶Èb¡¯àÙéÎÔ€¯ð00�ŸÐpPŽ=@ x æzýžßw¾ò ·è‘É$JEÉE¢5Ê{òÜ®KŠT¶* hÖ'ò ä) ‚ÌÝ ÎL ý*Žº¹0búµ©n Lã(Jº^ñKû8õ \J¾«ðô}ŸÁ:›%à:øG1ÔwG±ô H2‡"H²4$I2TŠT‡ ²4�P2(„22²@°Cð#Pz¿Ákœ@ƒ)-kð™>òÚL±¨ ô¶±ÌŠ¢ù26í\7 O0äöí#dÓÂ,3j”µð‚]4QˆšŸ?¤mkŠ'.+�Ï2ŠÓ ©â) 6P¥͹‹T%BTtƒ36Dodß0¨ ë÷ M4[K7D­µq[.ò2ÌÍDû0¤óÝ„«+•1A”„Õ4Ñ*Ì,âÖ³>¡ÎMêU\@+,$ûYv¼4J:&åªrºO в³ e'î ýI0–ûGSÅ=çAXhíâ¹NêºZw2–¡RöjàÞÌ’Ë–Œ»[0.ÜÕϬ³DÝ5Zj™ÖsÕoJ´wÜY„busc,R­þ\‡ÙN%'T³ô–ÛÔV’ÎÏ®ªr zžÎé÷C=wÖAzÄ::óLÝjó;˜g×V^°éllY¤Ú*lªÆÏ±LëÐ;BÌQ; ßPÀHÞ¹²ÀSƒ¥o]Oíá°5ËN5È“Gê3ƒ}z´K o­ëåOBìóšïk[5å‰júwÉÄ4ˤæl¶G_³L•u~^Úþ» oœª~€�( "h‡Ÿ'Áü�PÄ)î˜p’_AY½Ÿomß‹än‘oŒÙó—>»Ë¸l›IÅi—µiš] åJÚeÕåŸ8͸eý 3ÚÃøà{qió¢q¡±ø—çú~¿·ïü?×÷þ=å@³ad5Ž€•âñU¬¾5JµS«Þrѯ‡°qº+r-ùU®‚ôÏYÉý>ËMÆšW,ÊÐú–oðxÈ«´ô©SkQÊ‘¯uÆj‹óqJÅU, È {nrhz ¦öb‚žÑ>z ‚©vÐñÔÁ•4Á,E(ÔÞz¤j‰Ê*&²Û’Òd\†œß"$ msj{ é;±‚¸²Y›(b’HÚ´£s7Cf˜Î²çS<7ŠÌ±Ã˜Ç¥ ]J>Ÿãñ‚/mI˜5âÞS‚Ç$Ç&‹b¾DΈݵ—£¤aî`™6B(3(¢,F…NœæBH‘$ÃNq…©E–¥ðP‡ËB ¡Œ„�l_ìÇ™ñÓK9]2¦lÉzÒrhLÉ¥,¦DËšsfm#ù°aGñ΀(@v¦Üç1/ âÅoÔBppË­©ÆBÕr’ajLÎBB†‰ á*1N%'óö‡£¢²l'Ýž*šƒ’üt`3¡%™*⺞)/l‘ø�˜"ìNŠIIi5'¥¦•<›�CT� m7VAWñ´†Ð\ž¹µBµÛýŒŒzz¨õe+סŠWK8¿%·¶§K‹Õ3hj&3´Pñ¥¢Û—PBG:‹7áå_-�Œ¾ö¾åkJŽÎ-FÔ6*ˆäŒ2s躞ÔXG<Õ¤òsFåæ3Ò«X)g2¼ÐG¢¶Ö ¹òywIµ`"D˜”]ÌIeZ³ˆ¢ÇµÂ*9!l<ÝjÖú:²ä‘ÔflNzÒ1ÔZŽUŨ”¦rÇ™¯u­¬ÐÊTÇ’ŒTÏÉÓV y52Æ[”RŒ°ð}½I$þˆk;&ŒïFÔ6£–B¶† ^¼óVænsb³lî'Ç"=GˆýBd …Pi]ï¾Æù_;é}oµ÷¿ Á»aÓ–Œ×&·¦¾fµÌ³/féÉé ÇVK2r‰£Ûì-ª£džŠá-&DUsìϸ ŠE~q6'ŧRJ[�‡8 Õ‰†±‚ÚŠèie—†ò:³•PÇî\:AÒYw°ðÉj•=rúHûÛ®±‰Ã·]»9̇êY/�IUÞ ¸ŸóÃÍÔåÆÜÎÅ¢³Q¶æ¬›3íŠy3±ÑU;Uf³‰Ím74.és ùŽ-F¬P kÃËѩػ‡v“Å Ç—jC¬M ‚\Û†2Z'W”fôÍžƒ’²B³úøžlÕ1w+TE\óÑd|&¶fÌÕŽ¬fqµiîä½i`®s¾5O¢‰ØÆÓnA‘Sç-¶½× ‰óÖÈÔ³â-(x‡yo8¡�h/aŠööß܇qn=ɹR@ ¿/è©7 ²R÷¸úÿv%µ©SôïÎ2Îèk)‚î#–]ƒ�ﵜõ±=§ºU¯õp [ì£Àv °?¹¸·ãfùbÐÔ9à(¢Aã½ÝŸS³­»lXNeÀø‰•e ÆkºXû]3ùzúTÉÍhÑð>‡ø*€bŠ”pzÆ�ÉÂpS8–˜ú@�X‹æu\!€€ 'É�TÊvǤk/U+AtÉ[tr¬‚ƒ@!IªËUéÍàǸYÏUÌ ¬&W3SÅjÛÞõùÎsª¡˜Áh¨Í¥¬°CïHò—1ÉjÖRÊÒa?/x¼o8ó7|ºö½r—|–î=Ò¨ýPíy“Ú\ØTõJ;›ögsóÕ…èœ{B­DD\ãY7=íý5?àÝ–»Ø@[/²±ü“ü|0»mVi!÷˜m€3¶Ý×ü‡ñ~?Éù1ï¿cr~´úšã·Ó[ çzûù†pqª+lyTÕ«Åš¨ »r¥8S!-kº®A”21„@Q4²(¹:€� lÐ?< ÀäÀð¼±h5‡3¿²Ñ)Ùx™’Ü-²‰0ów´û™›á`²i¥¿õ2[YKÝ$ûQ¿³ùAy<²é¯ ñ•®¨ƒÀ|‡ø0†€Y8©"…X[³1”XN…Xx†(e‡¸�@Žpx˜ç¨Ù�IÖ+Ô“‘ò°Û ´’w"i<Ãj%�÷¬«5ª3c Û&»»Ü³£™´¾x+{f—cJŠñOžàµŠ¹…®i –1‹4jىʷ- ´°a«rÚ"’}•ò Ä$§‹~Š0Žú¤'놦‰zê¨E]ŒË�™Þ¢#a)Ù¾¿á¹7|#ûúÁ»ü¤‹ÿ­Áí:%9VàÖ.ƒý="+7²/Is˜¶6, ²ˆ4YS bÈEr"¬ªò/0~…G€Ø.‚ƒïÀüsÇDtÇTuÇa#·@n9:¡d "DÒŠºàŒÙ‹ÇÉâ¢éM’º(«ÓC™«]—")šDAÜ]!Œ5=Bã É!À�@˜�ó…Ô'ÇlÈ䎯ƒƒ`r (Á3È&éV5²Æ˜“£D¤9‹Î7sâ3kK,Ë\Ø=Ìœ5ð›Â<$Â\&ÈÑûØ}‡øy‡¨� ¬¸çCPw�*ˆPYðz‡é¡�¦�@ì�Ä`¨­é&kÿ›MÆ (Dkš¡žcµÅ‚Á93Ù½á/=£¿5<¸®‡—l�¤<DKcé<^/ –k©É2´T‰¤cì2:+|h49"’Y*»Pɪª9Ü;$ê‰Iºß󆱼µª\¸>Y3'Ë'"òï.º6»z#Â!¼ŒtR<y‚{š%Që-±õ-,_Í2ñ;+'ûÀôVKëâžr^ª³äÄ ²Ëtš6a8z”ptqÇ,NäîÎôïÏp�X†ÙÐCd ÁȤKj4*gHCª¤DœÅÅË:Ïj[ËKc|ÉÚ²¸ˆ;@¨†À\ ðÐEÐQ#’hyÈ6AÉ#¶L9¹Œ»Ê¨¢9.³I”лI¢ª0C&±l†Ä:PÂ~Lj›»Ô‡MÃh¤ÒÞƒ'‹{ž€%�0hŒ /X…èz‹1J¨˜„�I‡`sH~� Èy‡ êŽRX�€@ð4ÄI¾jÔË©© Ü8ͤ.M0´èËÃŽ2M4•Ê0͔Ĝ)M–é~£Á3ÓZ{ K"Ô¬3ĪŒµNkv´ºñ®¢=DŒZ'tWȵ™ÁÔ š#[ "<Ä+´7ÆTb»Ä’@K4Z£è»ÑSDÜPœ»»¶Ý “)·_PѤB-«Ó–T»Æ=3`\[²¡/²xÓbXÇ ®éXÁRß(:¯Ç¡–•Q8e0 ™ð ú (ie‰ >ØH�Ø/|sP]lÖÕmÖån’ñÏ,ÏŠÜÆë³Uƒ½Ïê?*Ü…,•H´<êD"Ô(ÍQ‹%WlO¿ÂäÔbÁ8;ü++Ÿ`ȵP5oX5ƒÖÝÐ|©Œ†‘Sæ®1Ót¸ *Ÿ8`üMò·»Q”üÂ5zŒ5»R# Wùƽý-U»²»AJ3|†,*¶9èl%†xXÐ;è‡ËŸC8„èH‡Xo}€0€�mð}†Èk¹Õ*±�PP˜´(+È=ëI$› Ǫ¼ 5¢ F4¾bXD<Ö2™ïÓ„ËÀ²¶QÓL5ÍçRÍ}½‹NËŒ>Õ–#ü!Zó\FœÙ\9ÔT"¬ãÐ7Y‹°´#»)ƒ²MP­}“ÝN¼›á%!‚E-]¿Á›ÝGÆÉ‡4zy¯õ‰«kþª ½®ÂÛ­Ëà+Ý.“u•!:M$~¸3ú™ZB=òß´²w›ç8K)áMȧ+¤Ð=Íi qVµlXEçÞ…èÞ”vˆ€Å­ �„Aßðx4&ˆDa0¸,J-ŒFa±HT2=ŽÅbñ¹ŠEŒÉâp` ¢–Hd $&k)—Ã&àüni<‡KñÇËì�#Zë‘ âO¨TjU:¥V­W¬VkUºåv½_°XlP…BÕäY69`àk>“J%Óú.i  Oeó”2]!ŸÎa×kÄó @¸â"S{æ †ˆcâ³]ê-Pè1Û¤Ã9—Ìecùéó5&ƒ_ïs¼´sLø}?Å‚P;=cM±îkÍÇ é~Æz@à'{Åü|H:€SL«Ýðÿ?c€0 Ìg$—­‡¼æm×ü÷g´�xïÓʳ“›KnЭ6 -à‚ç®·O„VÞÍ5/ðÒ4í îÊ% RžÁH›Ê“¨l @+Ûôø/Ìʤ‰ŠnŽ;rm>Ïc �?Ìæ÷>Kô5&[\ŸCâs½ÌºžÂ?i³ß±P$Œ°ì¤r‰@ˆûG@í$JÈ¢2L|Å4oZL‡ÈÌœ"�€Kì}1ÂÀ(³ ¸&1D„ü±P¬ ÉNëÁò£?-ЬÔLs£ç4ÈíüÖÈ«s ÏΉ;%´\îBoèxŸ¥ ‹ÂxÝS”í=OÔ EQÔ•-MSÕMUUÕ€X\‚%)Ü—%L‰j¹ÊmRd¼Ϻu'O¥j¼»ñÔsHPô4ÖùÙ‰ÌÅ)Pqb{iÌ0[ËLm:=7Î1ë3<§ùôØ„@è l)•eÕuÝ—mÝwÞЬ²¬ëH­¨½ ˆ½²Õ¶™Ew…^ÏôŒ¦½Ì‹Å•VV4‘~GöŒ±~ÇSZ_]N/} »tl°ï<óÅ®ðÐÌC`…­£lÜ^UIÐvŒyM¦y¬|�îÆtf© {€�0:–½3Ì„º×óÜØ•d´c÷ <8-¹pÅ5¦I· ib1–ž=3Úökó^jY#êæB8< ä²õ‹ @±ûëaîQ q0Ęv"͢ܟ1J.ÄÊö'1ÖÜdwa ßÎþ)*±Ñ;Qm`û%„É<’³™0ÖÆån,¾ûÌnŠ…¶õð¦ÉAm^ß`ÈÖ¤—ªJKéÊ.èîßm?Œ– …p<14ø˜®¿Ãi\jäÆÉüþ>þ¡´™úQÀàº'‚oÅñüŸ/ÍóýOÕõý X^lØÝÌ3/M‹œõBó´>çø³|'èà R8nÊÝe1vš\•¢usŽ-8)ÀÈIYçxIU" Æü±2¾cð‚’6À"}ŽBXM áA ^d6Ž5îS÷[PøÃDLòû$O.• Øç ëJ@«Y³Ÿ—`¤XF5hµÄ²$ÇXVntî¯ø‘l�€M=¿1dbÂÇÉÏ`œa¡J©ƒ¤~ !t<€3G¢°x Á¤>�1ØãÜ@�ÀhéI‘¤ã¶éQìakÇ,4j‰ârQ†íqß·ÃÄš»Ë‹eÈÀgGŸ‹Kf•]µ’Å2C‰¢¤Ÿâü~)m­¶Ö@ò7j²1(æ¥ØrÜmOùÖ8ãå¤l6Y Ú,̹\hñ‰tÍÎbX.}ÐLÔ’F}¯°øšèŒNpS1丈pÖÊ ·NÏòS$©Ôãfòe‹°åM´Êæ cxciýw´÷�ëß|1¦‚PZ AèE ¡T-T¾çá4Q´805i1•²À`hzï0ø±£Ú 2+>Ìz&KDŽ֔cykÖÏYî²VÛ WýÓȘ*î (ÿ)�kÂOêA¨P¦ÂÕî�äáæG”Šr»‰õÍ2a,OI{,´©î8‡¼R®œ±}šªùÚ¿¹/Læ´å5#à|€�V £,g¨jzQü<˜ý‡H7AÐ=G¸ÿƒ¼~ !žÐ�(�4)FòVCaGš\5ÙÔ”l–Œ^ÓiëR`CQhy3ŸE¨x+ªw&¢(EZYJà!*²'â ¼Zk�ëKOYôU¨9#ím*Å·èöŽ;Éß<Å[Om”þ»‰Árgã¡wâµ]Jªßåì㟵Ϸ[¶êe6z—}D¬:Ã:ÔTÜ¥¤X¶M)oC¤Uš«·iF®\YW2hŠQàöÔ½®x`\ ðF + 1÷¶'«%ïAŒužt¸ÉZ„ìŒKpËößR–§0©lŸE²A¦ø°Â ,ÇÉÈÐL¬[%ÌBNyMÓDœÉApn®a°-Á ÈY"dRSQG E¡(«&ÏvXѳJGŽåÓµšî‹`ôCGétWÅÏ ­‹‡UÂ˵ŠmUÈknÈø9à²2 ñ_r2¤C¸~ qd<NbØy ”=@9Ø\g@…€9�¤'{Ȇ´“Yxáæd«þiÒ};oڊ߀±ìåØ!v¾½)€¸7Í)•‘|ºNÜêF*ÖOWf®ÓI»}íó™‚nvZZ¸~¯±Í¹z‹K'n¾õåûÚF³f£wü¢Z¤‘»ÅI Ox¼â“쎺®±×º,Týs&ÆÖ)‘Øe›Jµ\ô1Áó·P½4S&B7ת÷QºÙ b§øØ <ð^ ÁøG áE„°ÝrzÒÉè{½ÂÆvF23)3e<ÞŒ7$[9JÛT»Dj甄D[òKa–;'õìžÕ#àîX>‡Þ=\ù…óÞ}ÏßIe!d72× /~ªr¬J|r™5yvëƒ`Ðöó?ù[·ÞÝaø_™H­1FʃãŒÿáµíÂcãäÐL3¶xè €zaü:óàÀC~ð?;¨þö €@ Jûu<½|Äïgº3®ßIJ‡ïÅñ—±ÿÍJ½9<ן{Ó˜Õ Ž³ž¶ázq>·×C’¾ÏìñcíT³®˜&¢bOóO«oo¼Q,ÓØÝÊÊP›[Ý)0r¦x]­æ[üü®d~g}O”ª›± ±*[Çz ÕéÑ¿Dãñ”ýZJ8|Ïö~ßÝûÿ„)`Àk죫j´Â‡6ëI:’=¼ö'd¥Dêš%K+œlŽ •dº�-f˜/6Å)Ö¹J^€)˜ ˜tbþN²£¥ÆÅʧnã°Mâ¸èNˆH^–06¶ïúôp*ÆAäÖéù-ö•fÇç|M­¬1dü¾ªÐdF"‹*(£¨(yð˜ÿjHêØ6FTðIJAèÁ6AÜ,øa8`hAúÀ ¡þ�È`�À ñ$ªM†H Ȭhx vO‰úiÌ8Å&˜‡púꊲbi¸›íx5«m oDû("ê,.ØÅvÞÅbùmn*$:½M£."Vâ ñ%Žüª¬EÅ©±2u‘¨v¦œñ‹d¤Ð3h´3©PwMHÛD„ÿL-Ã:åq&ßä@‚Ã)¨&8o‡šÃŽ*–êF4HzÄm¼bïΦ08Dk2£‘¤•Ž”C,Tˆ‰î©LfI€RaøAý@# ÑÍñÑ1Ô*æç~sQ¬£®+ ôøBu$�gJYJnÅn²ˆÐË8úiN¹ð=è‚éª˜Ì ¾—-Cˆ‚‚Ð[Kæâ-’Ñ`DÊxЫr=#ïÞlènŠ^亸)×¥¾DhXë/ ¯ºêO½+zæi¬ïí&i²’ǰuer5P;pîÕ,×'°¢6ná ’@T¡¸Aô�dºˆÞahÎÏÈô� �/�ˆ`ñQ(pï(æ0dÚQ0õËÒ·2i-­q(O-è"éI' 1öŸ+ÖòI ´jÅ~ÝL\ì‹4vËŒEíñ-q.%fضigö´…¼ß¦À0ÆÐQÄÚ÷y ó¨¹lÒÇî—ˆhÌvñ© W/ ´Éä“-ÒÆ­&¾+Ëp÷mÂJ‰ÕëpöDÐíFÔ⤖"ã(¬¶�æRDà@º ÑË)s™9³9ì„`bÑTœÎ@ãÑø1¼²r�GK2±ã´Ãí*¶‘l­)œ·/r=OŒ·M´/ÌÖP‡ƒ7îCitÚÌÌ()ð;ó$rÔ�påÊ�á±#“¡@´ ÀðT ðXäºF0‡5³cè¤DSl~’-Çì¦tæ²Ì$´£ 1Ð÷"!Mè½ÃÔKòBÍ|'rŽ®žÀK@åP¡ªátAæÑ AJ¡÷* d¸T_ì>êmÐo#ºÌ®Ü°:æÉ¶lKëtFG/0ù;E ¤¨µj^K²ë2­0;CnÇCÈÿS<‹&æÎ.´ò'>±\§WN°s;Ñ=ñ1À¨ •¦O”yQŽYìf‘ r©É;¯töo;‘GC”BÖÌo$ôö¤õ Íœä«Öp„†ˆXéNq¢ÕJБBfËTžBAT´Æ´n3Jó&–Ã×8§¶ ?93—F•X5…Xeà“¦ø ¡JÕd«rÎñr|qÒÈãHŸ.çCK»6(sSp÷,¿tXzKë%ÑŸ'-ç/cí?ðBámFu‰]µÜ}’DV¥ñL¢F¦°^ûÏË")øz­–ñóRñ¯ºÛräQî$´òõ3Gmc”ÈN6'ǘ'¡ò6 VeTe]åP¡Ôaæ®ÁÁÒáº!®ìäR€-€ :¯å[%0’·r#(‡S4Ñ.ùM¡&•*ŠÄ“«ù8Uû.*&ÓvqfX.j¥iR^ì »Yô¬¬)p£-nx°†ó‰&ôàVsâ‡'é‹Bë-TD6²“îÿuÅak‹.)< –òé½'b~røÖ35 N·D-ái†!PÊÔ×oùIvxYÌáiYÃÄéþ€AWÖ5r7%rw(*UŒª®¾æ-M²W ƒŽ®"lL%Œp~H¸òn®ÆË=;Óä«Åš~ðê`æ˜zÄýu°Íâ€H8\¢” Mr·‰x¥O^ ² á‚ØZ)`‚“NoÏ% &‘$'qæ×µqK]pQU1vÞwÔß=êB‰,FNFº£SÕVpgz0žºë»AκPV*ÀV’“xwŒUAN¡á)¡òAbá¸áò�` là h@9w9{ÊeRò†³#1h›Bì AÑEYOAq`½T£P5iVZ±³>„]I—Æ'ÄܤlÄÊ„12•®yxDF øû oå…¥–³‚i‘eÌ¥ƒ×ÓnU"º,¦<+¦Òñíu62YzéTÝ®k>$³d3tÏ�dÔËìCpO[W íj­êü2ZÖ«�øRó@NO[i¸ÒÍ]{ˆÄÑvy/‹:°¢)ÅW œW÷y ´ XÁ¨I· º‰“5Kó{>‰ KR ~×õ 7u$‘KoIBXFôâ¯ë²a¯¹”U—ªs]7…ÙY•¢³y•^Š‘;&ÜìÓº´•°‡VžÛ×nt ÞG‘?ñ~2'h«÷]{%OÄØvìJÇ×4ÿ/£hæLí’‘F7õ•ÅNÖ:8¡ú>Tlá¼ò¿Áú�à ôq>õÿzØ[n0€¬•G(´MZ©ôìÓÏŸfñ|ø{80r¤’d¹~à f–±ôÆŒm˜ ›=Ñô¦ !kíEubL¢ßéÃSFÚ M?®©,PåÖx6mís¢Ií ‘¥O¬í+í™™‘S\«V¢9—wŽ!´™I(3$r0ûvrKå!éîaá799›Z¡ª:¤á@a¨H4 Aª+˜¢DÒÕÆlâå%–ÙnyÿYç*Ã¥ùvI1`—IL®BUH–Ë:©q»QvóJ¡o²ð¼IB\EÈÀái›:§°» –À…è¡„Ž½`ËQˆReYŒKl¨¢M׌1A—ñV¦7[!9?¤Ùu˜çI¬$Û+1Èm©ªžÓ ãœÃf9±°ÅÖAn¦aîv!°Að8U9` �´¶{@¶Qh ™Šô¢œÈ‘sw¶rX³Ú¡äfÜóbqxPLHž»×QªY7qQ¨.?9‡cÒ©‹p—°z—r¬³èŠIA5j¦j¦=¸ó_¢³²ºxK¯v–ÆÐ´QZ•Kº†­=fÕ5Cñ¾t›I²A _4D ÝÑœ•V^ÞÌcgTSÛ)Iºø×zyKÆšÃã}§3*]Pòá8‹ÿW;iÆüqÇ* ddg[:±I¶ŠÚÙ®ÕS™Ég«5¡2ûS'ò¼zÙÉ×'uË3pôºÌ_NµË%&®h!RŠx OÇ\Í·;-£¯QL1g³>i$™oo 7¼—ÐmL*Ëšÿ7n Ó5³"ÑN—Ð|ë–Ï82!™é2¿bè­€)œ» ÌåS›öa~! !ÖáöÁÀÀ�8`u=�GRcì£Ê¢ÍEB©V÷F%oY¡ã¡è$—lW¦LÊܪ¢öóôO†Ò‰U¦ƒùIòBÓŽÍ\œ‰ÑÕ«žz½ÄŽ™×ݘß<›“‰èöH­NéªùÚa.kÃVa˜Ú^+¹@*1þ»‚¨ôõ V—h›yçZPã¦ÔØÓ{#WAD`C©Ý-à>àe媡¤Ú­$µT•,°šxýTâŒsÙCMçÒù51ºÖ§³Î­j$ŽÃ½±¼^šÇ-®!t´”´b(¡ü|ÄÁj æuÜn à�Ñ9ºÕýa„U¢&—1T“Þ²å_Õ«•À2 !xï|H0ß±|j#ÒÕú<n‹%&Ù ÂE0Ð1‚s‡“£a~ÀI¶A[̾h]a¶!òÁZ¡Âáôá`À Õ0Ž"¡Oÿq.Êò‘§–ôë'²]¬ß}zƒ­OSS_®[ÉwDŠmd'›ÚÝËÞœ|øבc*"˜x¢òÝÝYPGé�±çÖ ô|²óp hË úÎV»]-™A­Œ o£HÐ/OËyˆÏ{nvŠeµÔZÂ{©7E…C’×4¢ Þ”›\Úaä{aßümí?¹û¿¼,ZªlE¨{8`ºkUŸgRÇï}ÚÔn˜]Œ™O­emͧû‰øœÚî.¹«V¯ò ��þ��Á PH,þ‡@áPX< Dá1xLFÿ…C€/§ÓüD5–¢ˆ,®Y-—Kæ”Îi5›Mç™Ôîy=ŸOè‰E£QéÕBÝÞY88€à>] Já°Ê¤63[Ì+ñ¨ô~)]ƒÇ£QJÔ9V„Dí›}š±XŒG"ÒêôZ®D/–¨öû¼Ùl·XD²Ã ¯ÙâÕKÍË WŠ×àçûáò� �ìålª“¥ÓiõT¹üþ�2šOSŠ)Èóz¿Z­Ç¸ö�ƒÀ€,MËsŠËï9ÎfÊÊL¸¼î<²Õp±Eâ1éZñ‹–Ç8¼kÁŒÂÃrXô¯ zõEìüžG²[ñöb{7̧/•ò¸ï ð°ËR"-Ìcê¶@¬³žú*ës¢™,,lë@ÐJ´:°Kˆõ§°£&´£oÓ¨±¿‰œ*þ»Î’¸#ñTD®,±TCÆÐÓ¾ÅÄ1ŒwCï£ó:pæxŸ¥ ¢h$ÕÉò„£)Jr¤«+Jòij-Krä»/' hfi/ì;¸è³LsûHb×�C,‚Øê+ Ëí1Læ¶°ˆìó;Oø=°òíÂ1¤òºÃQ…ºÓ+˜ÁªÎÚ2²?ÏÚúð?)ò}¤€àk–$¿STõESUUueZ••²š8›êЧ8ÒÓ­Á¬¼.ÁÇ1r6ö¢ŒÓ³\"±Í)4EԢ走³½ƒ5ÓëÖíYo‹ÑN8”<:Ã+S½ÅQ3#½q-Χ¬”ÓÎÁ`J™ÅeKW^÷ÅòÄÙÐygñ(SG±ð�à0€p„o»ô­özÛ9âîM³\÷bã7Á„<ò&¶‰ Qh„IÙ*^ò1/>BúݳB\tÄås9%\¾$ØõR] :è0M/h“{ë9·4 ºÑÌ×9Åø‚; ²X¬ñŒh]÷*®¦'¨fïûѤáÉŒjûçùÎ'±Qî~çCP »ã;ƒÎP¯ýƒEB4~¬óÀ甎QRXš ß\‡#Ér|§+ËrüÇ2¡¢Œ=ñý!sýäîÃîé¹–šÇÄ|DýCo6õ�jÚ¿Òk3´;hÌŒPÆG¹ugN¬ÂWOáLkO5éz~§«ëKÊ]do p ßGè”ݲÕÒ!rætCl;º<)Mèpv7Ûé5ä1§,][Ý´m’ßÚ5çZè_û]H<‚ô¼"óEëÀø NˆÙâhUŽÁX.xêFt€ @þt¦DÊ,5 ŽŠy]¬èœ¼S*à”‘“lÉb¶¤W LÚcÐFòtßârmPþ�²óˆïY1ó†°3/ ¢ñeÅé‹DâÒú[5tíž+ÚYÚ{XNÅá±Fo—#b†ÎÇÇ“QV/è`åGTf™S*ÙRªYµ¶ŒùÌÄyjÐñ(Õ‚¢^2|gìÁð”Œ?[qðFKIy1&dÔ›“’qÎ9çY#y5\ կǨTš#ÊDB®; 5Ë\ûæWjñCFòP[:ŠˆùEì¹›#t:,qj¿7‚¢ þ@t“‹0U'f”Óš“US=²^ÙR~°¢XÎáS>€²ÕoKcðþYÊ#FÚ:£èQ8ËÔ¯|Άy76XÐdTæg²ÍØ?²ÌÈ$P�#ä¯3E\šÔ5Ì!Î>„h ¸yÑH+‡`@ =à�×Ic+€¯Â@�ßÔ[â>'¤æKØÀí&*Š\.ªÎãÍV¡Û€q‚�:IÕ-¢%M´ÚT¬¶Sd|líj.K¹€Ãå­jªæG8u™MšR,Dç4È8eÑãÚ–Xq*<¢zÂØ5^ªÕA×H¸Ø'j݇\çU†#>Кȗs‰jLŸ%K&Mjú5G^¯aq÷0 u+¨ÈÏ›‚.eªaK´ƒ ¡\L’@&IZhm£´––ÓA� Fƒø•oÜ¡4êxQé:FÔÞ¡-Ëol'm›¶¼˜DÚðX-Ë߯gÜ¿Gô_I ™à®ÓÜû¡thtØCuî=â†|¥er‰ñ~ÛÛ9WÛ5†§Ó½]×F0â5¿[õ*zÌølçm“ºöWÂ+ RósFé_õV0ÆpôbDr á®=‡¨ñ€€0i1 QµžÅO•.»(PS™»¸hˆ`g­É+*©T‹jÝSDuƱT8˜Ô ¿—S¬¢2wóŽ”m‹žù¶‹3f»]¯ðíù#ôZ‚‹ò¬X•™òv!ø¥–ð?Tij•F:¹Amb2·VŒµ•ZW¥j¸|™KáÙLŒµõ³Æ´ óaü¾ÎÕüˆR¦W$‘B&ÏÐ)€4ƒÐšChpjm^y™95ÖËö%q2~œ-Ç'cÇÑk-Ûi¼µ ¬F¶ëŒ¦õø†˜ÂPÐ ‰28Æe¨}ÂHînˆÖš×[%¹°î´"¾y ÷©'Û§,=0Ÿ “^æ"Läsð|+ŽÂÆvª…ÃBÅ1)àĸ§#[Œ'ÂË*ü‘ú 2óW;[ît¢-ðÃ�x Ѳ=†PÌ`$Ñð 9³ŽIxµßHÊg)á}d—ŽáÞ´Äy˜î$dE«¬Î¶¤ì\"CÅ3üÏF"ÒãˆV·‡XŠÕ!l•]Ù®ñ”¬›{/©~%XY»(ž8í’ì‘ßPÎ#jU§N>¹5Hó’7(Û {.ü˜÷¾Ú©eN–@¦Vðý(¦xÝwy!:CjÖ¢È8òCðQçà¸4èì—³v~Е�h6öò-ã¹Ïn}k˜fve;´ì·ê‡ksD\Ïn$Mô…½FT¶é¾‹¿»O³)Å >‡ÜÌT#XYnnÓæ|×›UâÜwä7�h�º’Ø,à´zÍuEò ÕRüÌN¯ŒÃoÎ]<¬Çë&Px0¡!UHËê ìÁ×ÞB˜çÇÜÉm^ Èfî_9ôJé£ì] aäÄäã±O‘àƒÚ}á„ÔËKÕ3ý}kSá÷j2ß•«Ë{‘=?Øãæ›;îÁ²žãÝ «™ó®+(º»:9J[;é¶¡™ êñÙN/3’ª‰õÆ¿²à±ƒ-Å2’QŸcÅû8” a/DZ«¤hëµ3IœQ£rE§x˜©™ ¹ž$1û'ú(šb Ë®:ðD#°»éB<$BL%4+µ†xò/¡³Àþ–‹#,»ó³³Çt(8@ê¿»‹¥¸T-À‘×>1Ù6Si²;P¢›l3©Š>(ëX’€;Ë<Ä%ü<-(T¼ð,= Ñ€"&¯»Æ§™Ð<Jq24šD@¢Ú!¬S~#óä¸$3:œT2*ö¼K<$B¶“™c*ú/X{‰ [çô<ÅH° D„ðs…`]pf†{zŽ�`À·úá=R¿;ôœ.*$ ‹©e@oAI¹³Œ‘ºF)û©6c2ÀdH'#€,Š:aÆ´A$^¥ù¡¹c’£ò—;„q1 4zž@¼{˜=ó•¹¾œ·½Û¨*D4’x@²÷D@ã|{“Äe=Êy8óÔ£¼z¬K¿BãׯáÞ@PšH°¬Û¯Â#±ETŒHÌHÙÉ»Xg@ÔAËSZZŒƒÆÙÕ12©ûÀº;Æ›šyòÄ »´(Ù ;âC8Yò.§kž¹”),|¶H޼‘P�@j¼¼ŽJl§˜¥¼ø9†ÛÑ·Ë‚x¸HDDÜd¹jÂB„7üÇY_#`ÄJ•º¬§Qr2<6Y¯TÊÒS¼�Æ#L–±ˆ@�/ÐÏ€Pf…LTJ|Xw‡à](xËí‡Cïê�h°œœ ²–¥F2IœBy™ŠººÔH7Ó/{¹ËTy/”%ägÇT‘,»­|@0½¾"o8Ä€#ûš‹¢T<D¶»º:£ìʦ3%¤œ¹ÉÚ4qk¼ºÀÈç+Dæ½Û¢Á™À«¿®ʼ׵ñ· #¤ ª ïÄD)$ …D,"Ì$÷O|øOˆ¢€h†jî,ºZ*ùšÍÌ×=›‘Gœü¡ÙýÏÙJ¿Ù^— ÄŸô®¸111ÆÌ® _‘bA‘ü,ž;‘É�JD9†°XdùQðT…ÀwCìªéá6DžÎL+‹/È üFù—%{¼¹¤lÇ$.DÕFtN±ïÀ|� ïé KáÄ´Ó‡ÊZ†pTÑÈØ~è„hPÅ|X†`h˜ê±^­l_Q|r¥Å¶Ó†ÎšYML„ $ÐÆa™b»4ÅÀ %ÇJݸ [ü8Ò=ZnÑmA@rÞ·â´1´ÔLÚ*;|ê>-F ´E‰Ñ³%GÈdˆÀB×·íLµüÞAÙñTÌÊ)G¬‹G¬x°`Q@è&�­*ÕZU¬§�tú£Äì3[Ú»Ô,«ÖUô{­’x9s›Ö4kLpDü¹©pG¤:Ë'L½Åɕ֬à)ídªðçÌùMËk/ˆå€8j…€ÕµuWX¤@\h,ƒ˜n�qî³M_M­j4b®'ëÞª4¡»œ©‚¥0ëH…!H £§:º4ËüPLÜ {N ë¬\/Û¾ BƒÅ0T×MvHÈv‡€~Àb€<ˆqHw<˜×�`0œï®ÊÜÔ«k6T0T}b-ñGܧêÜ?#ú-òÙÖBF$· ,7ÎY•=ºTX<i/Z,л‹:„¹1Uœ³Ê^ª}Ò Ôšýуš™@®òbTN\Ñu{ÂÒ"¿Ã²ò±uBË©ÑC5}X˜È¤õ» YXí¾[í¿5­\c)ì\¿unF@ùÓ¥Q_ÉÄÞÆagJÑš5!q¶ò™ÜÏ£U~«ÒÁµdÒ×¹·S53¦<íÓÊ×E¿Ý]Ö …wW„©Ãúb‘Äá@Š¥ÓÝ£ÁìK™RÑÌè+¤ÛOÍ;4IT ££?d<*ÆC-»'ÒÇËÍß3¸‡ Cp †hTR¥ÖÅH}µ€G… s…X\‡hfE €€àˆš‘¶¬æ¥lî×Êúº ²m¢J:Nþ"­«Ø£NÑÛ†#„¹ýT!r¼Kš–S›øT+Q.+}] AA||S­]Ô‹Õš:L ÙºÏΤ/‰ØÏ3iVë,G20`K…N$ûàœ’³Ó™MDó¹yi=mª´ô„@à%ÛÝïâ!bL€p\MÁ)cŒ<“ݪ²EâÌ*ÝÈ 3`/$ó›‘Øa\]?¤ï%â³”E³/:rÅ96|¶¶‹‹šàŠÐðJUÕb&9W]‡h, mW¢ì ÅJÔ£c‰¾>ÑãYŶ1<HTÓÈ[&.!@]§Û]O.AÛ9ˆÎXÌÀEŽcœ<‡s¸a‡x<„˜q‡LÇ¡ L§,± MŽ$ÌÐŸÚ «U&ÑÙþÈ"¬^XF®GáªI%µL~“¢ ÉÜIV|)ãF1ä <sà5QLR:£C[5âf V+¶ ÁÖ,,#«¿~[Lä¡Ä-êí`ÎË›¿ÎgÖ¦.Ζ/fÅp™ì}S釋®…CáîäÖ}gÞ~Æ#agÃ["\Œ0Ê$¬‘”`6ݨGÛçŒÑ`¹×'öDÇ[¦Ýµä·@4ìæÖFÀ|vˆ2å¦msxgî“OxTß8,ž<žîe[º$m8“Ãh fœ"¨‹´ÕP5δL'SâäLÚõ8<Óc\NÝ&V"rÇ+4FÜHÎ^Íí䯓ÅIw„˜S‡@UÐu†`g˜�’Œ–u1ÕáÅàz¾. |I$‘Û­+k2|gCfl9æE¶|6¯S}²î¹ëÜGᆲñ²³F›çM£+» ´Ü”AŠÁ™ŠWC9•Ó2™“"X¿àåiœ“$t°Í¹ŸR#‹34Ñ®Š6 åÒ12•#!¬7&%Bg\1±Þ§®™Ž<ô„8áö j®ßmþà @Èe:­ßD™lbÊ{U¤Î´Ý+ìÉÜÄYÖ%ÜÛ„Mi¢X¸\ãå›Tø™5{XéîóCÆ”‡f;én=Æî '½Ê«IDhSÄ`†t#v¸)¢î¥å¾nBÚùd„çìÑmÜiÒ™'ý((HSï.óÃÀx˜~ `x9po‡[ê€s{Úû‚ÝäëË>ÊÐsJH•iPMdãfAfä¢ÔjM\½ìSŸç&+± æu¬ìÕŸÇÎ0ç6*É —®YÅ|Ä$~ײ$¬£ÍÖåDfer†nmŒ“þbK!‘' þ8ÆÀä•;N$KlêQSá»å²ªÊ+#Š,ζ›<ÓÁaÕX}…C@.çÏóÏ=sØ™€vâeh®4àžC[EI­åÒ`l/¥³ŠF^‘¤e…¶×ãlÚV6”ü9†¨Wð‡>të³oNõãÕ›Xzt¢6-g‚pbúõb«ƒêeJÍ/[è 6q†UŸW©ô3iÁf›'T=™¯tá¯ÐKôçOBPahyRÐr… bt[€M¤¸¢S¶^x@–JæÛG)¬cýFµÿBÔ T ãPÞCnÇ dÀ‘¥Ø§ZÎc¦)|»Aª§qóÞqN;­e=•Æ*(®:B9$»³7ºÆ¼±²Fæñ‰3,4í5Ucà¬êнT^Öj9—8Ù­h?7Ô”Í0«0¢Ø…OHCmØ%€·eù™mÿ?TÝ*é!µÊùG(ä/‰V•µd'HB·¡ìgmQÎDžFðÆ!.îÛ²à`ÑoL…pyŸ¬4?P¨lãÖHæ`¹°üÕÎfAŸ š2$÷Kž°º¸3+‰«¶„“\lkÂò.åɬ5Ǫ=U-ÓFÞŠë@Í Hv@f?«úÌ;…`‡pLPs…ðeˆ�˜` ÿ„[“‡š%9 §x¬\/ñMò«Á³hÿrkfI.ÈTKü½õ}ËäòÑ’ø_\퉶û®ÿØh´…²½œzG{ê(ö&^ž'z~üH|'=èUÓ}§U½¬–Ì2Í Þ> EUº÷–á÷˜|Wò-Õ€pLAZ^�‰ß¢bž?KŒì@ÄDæÉïŸsx#‰á ûˆ���ÿ�@�ü& †AàðH\@†ÀŸñHeôûˆƒ€†ª¸a’IdÒyD¦U+–KeÒù„Æe3šMfÓyÄæu;žOgÒõJåØX:¶Àà,V ‚D¢‘µ>†B!”èJ‡@êP¸rOP‚Ŭ±› j ƒU¢ñ8MBÃbºUk°J]âQ†Þ¤–Ht"Ý`¥É*U«."3X…a«uØ´ðú `¦jžG?ÎgsÙý‡E£ž¿¯ö+AäT:5ÝŽ×Õ ·U²û½~©W©ÄkÛª›o+ÅL8±÷‰gÞâìøŽ=ò¹‚é]xW>¾úË…ê㪨NÓ¿|ê[{ð{_J±¸Æ+øn›Ïßv0wŒ=¶·r»Ôé«JÀ7Svè?Kc¦³8 SÔü, #Ȭ­ëë™�1o3šÿ¹JËÄļC¬çD ¢œ§©‰+Äð܃'‘öQÁ@¸%í$qÇQÜyÇÑü ÈR‰"ÈÑØŠž¹ÃP´PêÉð,0мúÒöA14P¼»pÔ›�¾lr¯1¯Ò²Þ¶°¢LÝ@®œßÍ3 …:ÍÄ¿;°L «Ÿ'Ò:¤hc#ÐÔ=DÑT]E('X°; xI’»xôAŠó}¶¨½A«ÒÄœ²;“Í49œ<ÛÌïʨó¿Nä¸ô;ˆ+w ©Ëclû¼Q[ 9³# ÁÉK�ªSîbžÉŸÁXF™¥37FÚÖ½±l§æq°zeÑØIç)öàPÌ­ÌëS.Cìñ½ÏLFíMµìWìÒÀÞÑœóAªÍ9El%:ŒLòÓ3>vK¦âàóâìë<.ÃÅŠÕx–c–>ŠÍ˜SèÈBcµ’dÙ,¼ø:¬çXå™ \M’Þ UOSzU¼÷ò£P»3æ ºç}”ΩËÞ§ÅçäeFÖÖ©ªêÚ¾±¬ëZÞ¹®¤ t•„gêS³\èvîÅ/8ki*øS©›c·ì=U¯„Á!Ïúß|<ïº]“ZJJ”N7›]ƒ 912õ*áŽ�|£ˆðj•¡–½ÎóÜÿAÐÇô}#I×V”ú̲léÓІIÀ<0Ûß+?ÜRQ¤äY¼+Šd:?{¢ã9£xü6Û?y÷©n|'øXFaKBô^¿±ì¦§aà}‹Ãá²[—§` €À½Ó—âU3ùV[ø¥·ËuðV<B¿vÍLØ*åÀ @ÒÛÛË}§%>´gÑsÌy/�þ˜ãäIØ#¸~¨…/”íIJY€„Æ6H1 áv>I† ¢††ËÛJcDÐV)—â­Xi·Cðx ŒÑª7{Pþ D…â$Ek <Œw„Ìá’jvLëBRªÿá\U° ø´&Fÿ݃"vÅžãÛq×.,Á‹–³ —’þ)ý´$Ö]ÃëO �}Áü€Û™ Î#H ä"=tÜk€òsšxVF²Cx�mWyŒLÇAÙ7·"±cŠmÆN*T´îÑ"ûUâ58ØúäÒr}¯1–9bí1]ãäÐHÞ£Ö²þ`(Ñä=Gଃ°?‰qÂ9@øÀ0�ÒÅOãD‚'õÝCVå &Òd¤±Ý%ÒÄðàQcxÉ>:–ìòå)PÅW øZúÅ•µ�BÇËϱ‘ž‹õ›;•Ú»™É›/!±ÉÙ© •¸q0±G4¬ë ±U(*²„Àˆ]lÔŠP:&ÑÒdÓ‡“P ¦ÌUJée-¥Ô½lĈ”Ê"wCðÖ2·Ê.ƒé©pXñv€?r”Çaß`*`ý¸ª@LmŽr9=ªÅÚÛUA…’¥ ý¬¢åY¹]䙉%t凸#` j9ºaZëem‡î;H¥›1L`PÅ€Næk)åvÒi/Ðã<ÙÌc­ÍÔ³bj"®›æ%-Jæ4ÿlKįéAgixõku³Äød 1äD°àÃDy�04€]ŽRQ°ÓЕ´¯-Ò*¥:Ò%P±¥¢(HÕYX`‹*2A&Pg(qW¥9SSÅ£8gŽÅë/=rÖÏ›#@Ÿõ‹š³èÃ2Ø¥ ÅÜTÔd™ ·nY£ƒí©ÂSgiVoeÀŸ‰÷÷8(´Ta^•aàŒ…T¦Ïàœ‚ðf ˆÀ8 hC,„Öšò²áK(˜¨Z#¿/ú±Aÿ¯èãÕx{ñ\§NöF©ÛF0ÂgA£í˰Z\æÇØÿ !R.”€vÒ(¤Ý3Õ`r]}åœ7ÒÝbe•ÉDÒƒÝØ›‡gMè6 2D¶SlyÃÌ 8WœeV‹Ôǹ8d(‡{ƒ~Õ��ùì­å%iÆ æd3“±=ø–5µÉèeM˜60Ñ, ~Bh²ÜrlÝvåÙŸ¸ˆÄ²\=ÿ9ð!½QR:ÈyåJwˆ¨Û*´TßÍQ·†þq˜IS*f¦qsåá/4Z£>¯v÷L²º‘ ï‘ð<²…ˆãY¾ðßf7¡1ºYp1€¯gµ¶öæÝÛÄäá½CtüÔ;’¯—ÝŽ^mžNˆ]7'7ìÞlSµòaQ-Gzì=?¿oq]J3˜"äv̱’Áô õh’oñ%¶òEÈõÎâ´·' ÃtÄS³ ]¼ËS%,6“îÍ~f)÷è­ßŠÎ{fœúÊg'5W÷dí¤]Àû¶hf N!Äú%.ã°} 6E¹@0 �`�´¥T‹7êŸ9=©TÄíÓÈ-–%#~­{¥ÔEej4™U™o+M黲p~cm,9õ”XrÝU†Ñ•teãW/ ÄÅ7«´·&¯m½èInà.¥±Çw„>¥/ªô®ºÞRäPöålw—p4n14KУ…œwË´–,Ô6¾Ù辿Ø{eK7Å~ÑÄÝÕ7…VDÿÌVSå·Ü¥–OÃWÖ¾åÄ[Â¿ŠøpPÃz «§ÈÙ#ãPUƒOgöþäÀÈc¨,~.¥§'¹\‹ÀÝ\ÿÆ¥W#Ðó{0ò8op5 ù¯°×aïªy֙ÅîüMgØ‹ê”ùÃø�!î2Ž€èO»ˆˆ¡î¡D¡Ð!>AÂáîÀ�®¨¯Ëb†æù+,×XXjpá.w´Ä¨Lªd(JŒÌׇ|¿lÈå‡fÖpòÈ,¢* Õ©¶;l¼ÿ%ÚÐ$š¿é.XŠuÏÍ+ŽØƒ*–ì<7¯ìšïÔ%ìgH¯ +å ·£WéVå*’…Öꇎ£iø•/êdÌL‘꺒MFõl Û�’P÷úQ`¡‰�¯‰oÞùLÇ¢|º¯æã,ýíãÑ ÐÏÜò- ¤.Úþ †ØëºáhöÇA¨µÑG†°ûïÂüiï¯NÆ.¶$ŒíV:®6tÅ Â;.ꛘK)T^d.*®pƒÐrNüíf%è”Ê�ÿ‹žÅ0”ÖF®ã&çévGQKF¼¬`äá¶á°ch}¨Øk„<Œ¯=í¢(¨Ö0LØa%ÜŠç*¨*¬·ŠJäM8àÍ”œ_G€ÜË©éÎNxÒh´Òï3ì6ô§kp¾–J¶¥fÙ'cO  $k’•Nº×K ÉfÙD±Œ·o fç�?Æ.¿lC¯[·'Ò(‚%€Á†TPŽØ­!ŽÐí’ZƒR<ƒQ2’$¦£¢^«‚n¤öÉ‹ K&OÉZym�~ ,£ !Ì^)Q1âú¨øÇo³(Rã.Dyàð©RËžCl>}Q†°Ë þ-„õ+&ÙÉFNË”‰j¹ §Úï0âÂÍPµóžJ¤²ÃÒÞ/è+!üm«zKénz/àk.sF[!"ÁǶ�Ãf�åÒÕª¨æŒW *ó¨6…ªpý±Z›,¯1sPºÂrª^§\بÂï𚢠í îøÿp°ùò,÷ÒM+аã†f~Œ»Ï"¼:cäh"Ñ"P`ý­ÞýŒ\úoÒ½ózX ûÊîðÑc7rÞ¦ØÝ&ˆ7E@iáF`X ’{4“ÿ@âb€ÌGø �„?À � …Ã`Ðø¤V ‰Å#ø(ŠÆáðxŒ&E¥R¸dš5”Æ$r¹¾3,šËbs)t²/0ˆK£ò$öœÐgpØäz £Ác°ÇËíü" ‚Zб¬ú½_°XlV;%–Íg´ZmV»e¶Ýo¸\nW;¥Ö©]:‹†˜@©Å*¼ ¶›<ŽE媚`èüLz‡‘G±3¬ÞB NL©˜mR•ŽT&ùé<ß;+ŽÊ2Ù¹üJ¥QÆm$Yhœ+#‰E¨¹Ãåü,‚Ùj:íÛÏètz]>§W­np¹ß${m\½uAàJl&SG™è§pšNãI:ánì4\Ÿ!¦j½øÉ¼«è±§/û8¥7ècèۥO3ìÄ3¯T©2*y0Íl'?©ྠô?5q$Ç¥QI¢ Cc3ê+ ¡CTV ³¬^Û>If’©ñJpÆÇ1ë(q Bû®0êxgÙFA…‚à’ ºò̵-Ë’ì½/Ì Å1Ì“,Í3¬H‡&M{Ð!JE8ͬl–Ͱü ¦±„â¥Â4zô½”+?C&sÄ #¶hsôÊOñŠKGP“Ò- ÂŒ•©ÏL#@ûAo[ʋŠ2}*Ê´UÓE]WÖeYÖ’ÙR]¯CÁ¨À$`›2²JyDͱ\*…�HiüøP­FÏ– eGÎa7³¼/$³¶áPñuºÿµ1jaÙÊ\;?XjCÖ¶’]…7&‡Áô~…afumkàžçÉú*×E©†u`H�³óPؼ÷tŽ×[ª}¯f\–Ìñ&P2 Fp%‚ùÔ#Ù&0\x’[Ð6:ø]öcÛ'Ïm¯Ð-ÛƒZ-ì5œ¥ÒuÁé­ÛfT7`µEÊu¥TÖ[RGVqu<í `3*|àÖkìö[r[v•-ŠÈgå)Al­,`{®í»ïÎõ½ï›íj‡æÖûëÙ&,D—Áë`69ÛûDªDEbjÔ>±DÏuçji™ê…¨Ù¶ŸL&ŠÍTh9ô~á4ePo¿wÏuÝ÷޽nt¯kêÿÈâ­S$¾³„wõ˜æ‡Æë]DÂR9Fm79W%ÞSÜJiEÏ%Q/B“«ûOü甡³}9w÷{ùþŸ¬ÐªŸÆQªx‹Cá¨;xú v¢¯ÖÁ°qe‰'2w·’Ac@MPÿ>ÈXœÉ^0(5ð6h2ÍÕ3ây…ñAWCÌjqm\Òµ”há™Ûk7/ò‘¶tg âñ2nx²@ÖÂŒÊw|«Áâ>†XÒÜa,…‹QO¹`ò*Pn É+¿h­âÄY‹Qn.7W�0W3šF.4ÙÄ“\~Ú”dl†"›ÃÌŽ–;KN§ ß"ÓhdšÛBPiÈˑЦU" S±Ö™u<ÇÏ«0zPê2¡D\‹MÞlä1TÀD€PÔvÑvNIÙ='γ¿/cP7±–3RYÏž0™„¢<cÆ}8”І^2t@æKÊèpfœ¬d‘Ì­K'Ġᄺ‘0Ù‘Ë5·‰‚r(”ü“§Ü  ~2‚nMÙ¼�€Úa,8 áÐ;GÐ  ,—Ræá$ÆF‹•°)v˜äãAŽ?Ê5ŠÃ”ÜêÊ3OhJ)‹ÌÔÞg 4nTP Ê§Œ‚Q|¹„­5ÉF¢0S‡ó…Shš³ôµäO•1΂³cR»M’Šd¨ ¡ªNΑíR﬛=§¸¢¢’&½ ((N¡@¸§3�©Q´©”A¤êByAÞ<ÇУ@¸.†é7êÅY«Un®UÔÄÂ`]ÎÓÀéw=Úµghq ˜§Lió'¬•ç3'»3Þ™“?1®8©÷.Ÿa ž‰ÐCzôéÉ4µO¯ ªõT5K·«ÖNÊYWq(ƒËÂ�‹R¼ÈÖ×l#£‚šǸòçi‹•¨ƒVŒ»6È@òID×›#,QY+-mí³ã´|Š¡v:C˜ *uÎÇ=Ú«ébÓ¾²¨hmäm¬ˆIžXX áӫᕯBÐ+:Fž,++ðÙÃÍIN£4´™0áÄDCå¨äñ&ˆ`œM7 ìX¾çà×A7:æ”sGiîæX$Í)Àºï=rKÊVmf=ÿiã½·Š1�Õ¹ÃXoaÜ<ïk�Áy0Ô2EA4Òb ºÌM©Å–µá³ÅljŠ6{H©íZf>WÖÜ~è›+=u¦šÍ*:çù0#“¸¦×*_]xÿ h­ q‡òÆYËEÔT‹Ç€F Äâ; –ýZ+iÖ2Ü“#'­$…V5Æ*j¢Ê"v½´¹‹1ÚALq[N1F^¼@叨)¡üš {•i±6… ¶ËzOJA,+GkC\€` & ˜Ú(PhuC\êǾ&Us’PIBË Ø—¼|sG¤LÍD"wš3?¤P×K-Žc\ŽucYº‰~“ÜߊTÊ®­‰$3ø¦Öµ-¡þ‡¶5Ÿ=¬ærº1¦ÜØ¡·^Q'ЉüÂÍ[ë¡1-F˜xšímüô‘˜ž(P»$—Æ“ãc!ƒìR^⮕á\/†pÞW€€A j2Ä©hºu²¡–1†åfU2÷óÔÄŒ~ã¾#oF =†Ê”F}¯o¦+µÐí”ß”o_óVI¦Ñ(‚²5FWáý¢aÌ»—ó ³pŠù@|r#<M´Ü^Kõ àñ@–¶!ÌÄÚ÷=¹L§oUÂ6gAËô_'Ý]S¨][Ð�Ë`Ht.‹ÝûÀ�b¬p‰QR8Æøçì6©*ãÛ†gì¾£ñª;™ã¶�åúv-¿ ¨Õ¯z7Ú÷ä!-XyöówI½ > Ä:kýrC¢žÎβÏ#ë(Hhh®~¶\yñVk§ÐŽØÖcgžLÄÏ|šeH¸™µ5S×P …TñõÁx8HÃ=çî}ß½÷ß°ÿ¶ñI›Hñ¾ñ•n×:mL¡:~Azx†Tÿ‹óLÎå7IíÖþÌõâŒëkømˆ$òfŽã‚&Uü 8+AN/Á0$Šån�°A¢"þÞ#Nà ÛE~tæÊÕ&BˆeÆÀhınT=i¨‹ÈñjBõ'ÂÿêLÈiN"!ü˜®²Ÿg°Y-¢ÝĨ…€êÏ<1-^'íd�& }îëpœË0 Àö!bÓLȵmú±��£&’YçÖ2͈¨/4¥X»øioB™íÜâ«’¢ÃÐãíj?JhŸÉt|AÊòÕ„xº„ntêX¼ýÉd½¤èâŒÐÅF|ŸIò¥ðYδjǾTcHΪ 5„BßÕõÌ ŸI_Oì¡€þÎrçFzgïîìˆà£ãVÝmgíˆ]¤ì(° oµ ñy±}ã®â/Éî@ùnº® èu&j’ èìéäX0êê+ÊñL­Käß« kï@Îì^.»n4}…ØÅ1ÂêÑ©!ùl¨è�uÝåd˰,02xhb‘º7Ltêlvóò®,ì)n¾ðúNPŽe´Ú®]èî‘ ¬ŠfŽØY¬ZcÑÐÌžzj–öâ¶I´!H«gÜ €þAZáÊ€"b� VMl‘šÜ Ê)ÝjpiÂ’ŸÐŠù±Pä(Šyç&´/ûʯ ¹’´ÐJtrm)…¤ÄèÆ÷r©¬òHR¡'/ÊÅJ+èÕ"Êt¯*‡’…)¡,²ŠæÌ ­Íhq„v4Š�× Tž$úÇþŠN �¶ï·$³0s î"ÎX¾J¬â7&B¢çC`ÇbRll­ˆ¬®œ…ð×�%¤¼È3h$Q‡/ jS‡0GÎÈ÷/.ͼÜP @i2ñÛ0³q7#¡ ± p4<„2NL|ŒsE HE°íE>¨„èùoÕ\]&Ø‚[&Ic9Ë ä¯Ù5â>S±ÉÍ,*PFQ ð�0AòAþ_2C$su>(´úá ºÁpÁÀðIÔ�qf]g¤šP‹(&2 10)¬™ΪS ‹Ïo; …²ó¨Ž‚0äFªv5òÝ*8±SÆØ¬Š §2ÇO#2ês†0zë4e’3sœÌ¦/"D�/ðõlí L—.‹Añ+b1 1“+Šè„ž‡ÌÁ¯=+lGÐܤ°XæƒàúÁH�cS>B��@àX4 …BáØt>!‰Dâ‘X´^1Fã‘Øô~A!‘Häp {�Á_à[ýþ�•€&0IœÖ7ƒMå`lþi:‚ÌàrÙ”âi*Mg”zM*}I—M)”¹ÍZD—ʦ5X$ÆuBÖ tJu2_H™V,U M‡V´ÌªvùõÞ‹f¨Þ@·ÓøB4Ôã©.‰Åbñ˜Üv?!‘ÉAUKÇA\öЃ@´ºDº}0°Òêuë|ÚYuŸÞìóÚ-ËD®Ò§i½‚窰èwÊýº£«ÙÞ¯3•‰dØPk|ª†ÏQJÓÝ'uÞ ªÍj±ï­o‹ø°D e'Ç9?7ŸÑéõzý’&«yæI8³n÷Ð(˜v´Ú]ëö×9Ëj½4 ‚Ö§­‹$§­°BÛ5èSƒ�­K2ë)ÈC>Ü´‰³ Ò%Ð#¤¦*°Ì/³Ñ#¨Úº*;DÕEj2Ê¢ÂÍ\¯¬ ’÷4élc·¨\-Äò$RßÄëãX×®«#M ¹Ñ¤$ ÏìTµÁÌt´µç‘öR€¶#ƒolÏ4M3T×6M³tß8N3’.¥ ³fÜ:鲿ÔBTvÏGNb·Fk[µC­„(áÃRr¬¸+t{öà@êÔ,ÄÊä`ì¨.ÒÅ”ÝR7Î%êÏÊðª;ãk€Éö„@ÐÂsw^Wµõ`1åIxs‹ È ÎBëDÿ#;Ì«.2¥¥AT«, ß¯–»hé!6á9q*{KCÒ0äÓÄ’ÚB1íŸ!!0U±âÖ nñü„@a–O°Ö‚`¸4Øi‡˜˜9™gIÜ|€H Ö2¥—A‘Ä¡KEµ ÂVu«^²µñ@´“nêZxó—jJ­MIYV˳<¹ÖÅåf!¹ÜüÆæÒ¦ÈQYŽC å©d¡¡C=ÒçÜOýªCNwž«0zpwžgäÃ1̸>Dzl»6Ï´m;UvˆeâìèÄqÆ—QižD«Û.Þñ¹æéÕ¾¶ÁËɧPñþ‰¾ÛëŒÆHQÑ-]øÄ±8”§º?gÝhÀ×0yµô=GÒtVŠ>ìØ «Q ÛCÌÞ•lCØnÖ£ÿ¦k9–}–Óñs«uU{Ú¨ÿ[°0î+^MísÜ]ê¯r¹z¹ÊÊÁó~_ØuÒû¾÷¿^çæ#ŽYÔwŸ [óuJËwÔî?n"¼@äîå¢dÑY­'‡¹#•ºÜT8çP¬Ö0’R%QnC”PßË¢zRIIÉ"Çà`ÊIs )%U”ò‚¦oï Â.–BœS}!l±ÄÀRÄi›“þy+*#†º˜ûa‚!D8‰b4G‰L„Ax€3qj‘9ÿ¯tqÕ#F^în8÷2‹P2£hQR ;dQÔ-¦”s®àÒx«™Ç(³„“ÜRGñ©<œ2V?ž£QCðÀ!¦)]I‘&EH²*…èç3¨Î‡¢’ßsHfÎM¤§t›ṆJ M'xÎ^W ZfèB!`ÿ£zr²]á»6Xk•Z…j*”¨ªÈõ×à#£,O=É1f4Ç ãLn0–ÆS}@ F8I-R“^&ðžKɬ^ “Áv ݵ£pºÁÒ…p®£³n‡¹Uh’yòØsZt_&²r'­$U”ƒ*F±Lˆ©Èw7åÔPo&Õää¹PÄ&!b'¶®ÓâÊ™[qrŒ#¥TkÕ‰¢fpé×»TRž‰”=ý2D‘Kiu/¦Æ™`ˆ.çŠÒ©¹¿†6]¦Ã9£Ê ý$×›%'[z¨éa Á£Î™±p³GT×…@[ºõE¨’^@•×<¢‡VcüÀ€¡©!©g­¤öÈé s«fôƉIxÂDŸ»ò¤®R%$®¹Pb🅱FªÂõÇè+˜,NÈzÕclsÀz€à2çÀ@�yíV I:l©JET4w ÍFµÈÕ8vÒctj„.Ì¡§ÇªË­AR@H.6@‰Ï& ²³Ò‰àÚ˜¸—$¡\åjØ;ó•F«¸·ÍézÎúp!™MI—:k®b‡`SÑ£óò5ZœJáwR/ñnϦ“ÎALk£èRàeJì}÷¿æý_³#ÅÕ ½oÉÁJH9YÄëd‘Ñųú*hÙƒ[Ÿ…5âYöW„u´,–¼ÊãlÐ"Hµ1h·VL¹Gü¬JÞBƒëù‹qv/ Õ°+Öêá‡hnôêÜ`+ÇG ôÝSXR¥–«lÛÔ/¶· `õÏÛ¬Õbô6d˜½¡I.Ñžu¡ð>ì9á±V3f<Èc˜HòB¬oŠx9@ Î� ¥\Òãz"±þnW&ÜÁˆ,(¥YÉ$2ˆG'žaT. pÝœŒÊðû34”jàç˜óx(Ì ³™úÊ%<k¤¬í]fŸDªˆòŠYÚ芥ÀÏZ-LõuÖ*ñ·)®ÆíljgÈÈ?7dû[È£ …®4Á}/¶eÙ'elºZ(¹°Ž&¿œƒå}¦TßHÔ)ÿ�±Ü3bØ_-SškîK®•U¾7}°D)0vÓ馑!ôç1P¥Å›3}o¹#‡0X­Ë ÎÜ'µrš6¤Úyx-Ní~·:9Ù8ˆTmŽŸ·5eÀÝÉ0ã‚N7•@·«1ü Á ÷~r¾XED°®¸G 0@�h]¦¨‰¸ô‘ìÿ»x>›åe¶á¡¢šK›Šè䌟W«Ã+½µVÞsêõ»*D–Ðó‰ͳ«uô±©°L×øÁŽöö¨9 ¸OmÏ@býæ§êV-—¬Mtrc´“9áù¿ûmAfݽy9p�—¡ð3 a–rßã|wM`GgðÅŸÃü²hço¥ÞÒË´;…‡̆â\o¯ø‹®¤Þ’¨p’>d!ÅBùiíVþ áö·¬œé­r&Ÿ´y?Pš¦¨h Þ+A«wm£U¸Ð-kª¯QŸ•>€é×p” +ç§WêÝâáed_ÁV`å>ÛõxÁ8,‡gcD±0Î|òTi¦ïËØ-;>ÿ‹AD$á:)æ«ë·0‚½·2.šSÊ–iD˜ûO:Ún'*±Ô ›³ï.Q”°ÒP¹Ó­R–\޲S¥ªªBS>y"ËQ´Ó£> ™óº8Sð0Bw©¡œ¶ûrˆs´€ƒb?<CÅ?\$ÂT%Â`‡¼“h(«Í‹œKýBÓ¡y¾2;½­ÂÖ§cÂ!‰­Sá¼!k¨(šæ$ë*@"x*Rž”Œ) ²@Œ� ÙBl=ÃàÈ·ð,ðf Ø"ô2Œ�»ËÓÃQv@û #²Lµ 꺉ý>ùm;²®£úîóá4£1# ”´)ã®Ä’ðP›—ع8eë|ÃìW¯àK…poƒhG†“š€+œ) ª²«¡ çŠÉ£C[À¾z­ˆÁ¬D)Þ7‚YC<Ÿùž!xáºSÌ%C¼;zwÆz’D8"sÑ ’…Æ{¿DËv=J A‰š cO8Lg%ʪ>co¸â“8™#¶CQŽ¢Â,#€ìXH€È2€ˆ#ÄnªJ:Ôq¯[A²€»0cû“Ât¹é%Çr[´ÛV©ì:ÌG4¡M8£#Jò=üv½�–7¨°RÉ”™ˆ«Üèf�8y-²k?¼6µº©JÖÊ$’.:¥äiÄòT=+Õ¾û¥G@+Ó©ÊO¿Ä!°‡¸ïPNEtšK˜àY‡4Xh�h3zò¼ü¥Ä{±%³v¹ûÊû¯Å4sžiy”™¨‘ ï€Có–ÑOi¥G£JÄY|£³8rÒšzÝL{·=S!«¬�„i·,¨Dš¨£úOL„Ë™é‹+¤ÆÁ ”ǃµŸrM ˆw‡ }>£ÄÇü±ÍÄÜÍÒ$�#º µ„NGÊ­&£¿(ä¤&Ò�—jç¨AU£Œz0Âñ”„‹Ljˆ¡¨ç‘"À”L±W¾ò ¿ã³¢Ð–½t;ŒQÉŒÝÏd±P_+ÜÉÄNÙ˜±W­ ‘|‘Nñø™«ë)ºÚ7‚J™ O#¬»>[&/A¡|Ò?7|¿KìÇ5Ñü¬(¿ÅPñãÙÏm¤HL€oƒ`G‰‰9Ãûq™{…Áä|yب;Ée@1gM ¦ÌŽÍdE8í:ÄF\Ï0ë ÉúöˆÛ-ˆ›GsË!;ÌÊQ¡¸ò2;¡çR“\t+5q./ŒÙ¬ÛPõ/Ó0–� <ß»ÀàO,»dÿѬÁ@ƒ�¡lú¸ër%L’@³'3üï¶ìu íššVN,º@±´ÿÈR¢µûÈ©YÜ–CÀi ÓIÂZG,@D€1éÈÚPl8Ê”ºAü¸?äeˆ²¹ÃK5M>ã»N¶ò«>º#o-ˆ%kÓšEHÊõ Ô¥`žðN…˜pHF†€Ka8ûˆÊ³‰NiÝ8Üê8å!Ò…D4 «:›IJZ®Ê|h7'úô;20kÖ½&Vüª ”ç&ÔC„7# F|ÆÍH•d é|Íj©Ôv$æ½A ô~í.‚,ÛÖ…Øe†Œe2³ ÕÃDB4d` á’?DÌa/yAKð§¬oÒ³ñÔ=]‹yaWý=ÔàÛΩȨ¸žC°€ÌôÔ•‡Yã}Ï}KƒðeZ¹Ê‹&D»¨Uun°Â¾²tþZJöN‰!ÑsZ9{Tû«·Pˆ;ø ‹.—äU„ÜõÙí±›HPnˆI €}M£Â¥µÃÁLJÔŸpÑ×ËWDÁÚ-êì(™U«U‹“¶-#>W¬{tèCM(8­Ã9ÙãPw7kR»Ï׌R×<:}¬´µS œÉ*$u³ËD³ÿŸÜÖÄÁUŒØM=Òè#�õ²]•ÙÝ †€ˆ#…²ßÍKˆ11«pµÀÆÒêµCHFj¼:stÙ2ZD1q¾â\Ìí¹»$¦E qܸšÏÃ{Š­…"¡9![�XiÝ­ó¯Ì÷‡ ,ý¡TÑ塲¤Þ)ú”%fU©ÕWdaߺ¬E{V~�Ó;R­þRm)ó/M_5ô`q7†úÌø6�u‡€}XýHå[ÜMlZ“Ó6q+´·Ñem3úNÆa„)Ý<;1-WÀrWÔb¾j£0¥g.ÂÖ”âXN=æ.ã£ä/Ó¢¢^ §®b'j š¼êµ‰F¾NKÚÙYšÖ/M>°-‚-Øà~/ã`€$­"`ú¢®B­©É|dQÓõÒ¼áaTÙMµyŽÔR’X’â4Iæ8Ý]»µ‘%ÄçN âÛ ¾ÔkØ_P‚0är˜ßUö_t­^8׬SÓBÙ#¡Ú=xOàÛVb3ÏuBâ…^3»«ŒQZSu´lÖ®1L©*’€|‡Ð~¹6änGåàö†Ðq "ƒ˜a˜x|?˜2ɘÞþ(ì+ÌCÌboX í0T8L\*â´“¢Ñ‘ p.¥Ãš[åHý£Bõ(×îÄõ6MBÔëAc=,ǼOÙ üK‘"WŠ ¨þá†l»5)ÀÓºðÐD¼Ó²U* èwœÙæ-âî^膈È HZ@Ä2D¤¹Ã4MÜÅàYd ×+¥–åEçDaíÏgؤÄËvõAe}ø8{VÉRkz‡ëØ�`idf‰iò$äˆ?†S¡TÿU´ü¨ÍCÝržfÁþåiùÃÎTKËš43¾>&5uˆ¦JKÒAwˆ.ÅT¯Ö]éþµŒxi†ðx‚h;(u‚hàÓä<Ìã5üÔ.ÕÝßSÎØÑá]î’Oâ¦R-?Îv™</5¼¸åß¹ñBÛµP3ñÙ#8n®Ì<Á£UisËÊJÒÊT7µåÕ.NÍíÊt6e+ûÃ>¾.bö¶mÆÜ¼fŠž›M;R6\Æ™ÉNÏó\åq­\Fsá]mçv³)nã0™þ€• €Xh…!íÖïH„d€D%Ò\¬ñË9âæêìI/< Ôý×4LYV˜Ý€UvQY8ÆÖRªz%$Jí>hðØÎƒí¸Tü?*Ã�N´ï ‰(lò˜aIô¿˜£õ“´#²gÔêZßñÁî ¸µ´}RµìÍX*>ÕÊ}éÛ£mR£°*C©áÂÚu—ÇÔPfÜϲ¡()Î<ðQ„ª Eפq¥É:LîÛ†”•w¼îxEKÝÊÕA$/ˆQÞÚ‚(ð§2ó2þmàÆ?&¦cFP—8döR¸÷&± Ýö÷ÆÌÍDc”dÓþ‘ÕÕXŠ9͇øTxP'3ôa‚ßP,„�d€„jd)¹ @ìÃN#âp²´ ä…ì÷oG"é~ªÆÎSX¶Kgãìò»a#lç;j4[„ìÁ5Óà�àH�†W to_ˆÎ·ˆ&Àa‡`x‡Ð€0Ä]å¿ëEãÂ)·Cq²Òßýh_®ÉWkßš’[[y¦ôÑ©ÌÆÆ,cFNßÕ‘¥ïå¢SMûÛÈÆ\3^™%¤Ü…jŽÐʲ,jÚ+ר’KÖØ¶ Qm -‚'2vƒøBc�%mìÄašŽFeòÔm÷¶�WBYÝ)×Éô{K¶x¿7ÍV—­&Êëme;š¤éØ tY¾íExO˜“xU…øq‚¿HÄèÑŽ¤\Ú«ó¿wìi|‡cd¦²Þ±Ÿ¾0«Œâ4Æ]½wK¢ò‹µ#£_R›uÎaY¬8€xd„Æïy—°ˆw ƒh_Úð¹Ê‰j|Ám’JHòëìµ _­{¢'ìÏÌ•Š£akw%%ç$á-aA©«u²â¬ÊãÜžuM8ë&¸µüFAÅXjHv£{¨Ã[vS9'rèƒòø=Ç‚x7±}GÔ……—×ȸ‡•¶ôieô%'h'‘btñäw¡žuap[ûmúÂ6ÏMë<Ü®}âi>[Tví…�"ýWê@UørÈ@†@€dá/"¯ãd×öŽÿ@ûE Kû¦ç’çM2U#­¥ÑhÍ6 ÁœhÿWK¸€���ýÿ‚A@ð 2†Ä °xáöþì¤ÉHdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgSRê’¥]8`ð<R„äÊT~™ ˆÇé1)&©ÀáQ0 v±¦Cà•Ý&§¯Õiq E:¡'¬VlU»\’V»U.JÄÊû,£Bìrký:õ"ÂÞëXjmJQr”_ñ2¼ jå“ÇA«°¸…ƒ!"¼g$¹ú³ÁæúPžÇ² ~w¯Ølv[=¦×m·Ünw[½æ÷}¿àpf"RÊcÄÁ°õlW-WÁg±wÉ #CÐéÙm<~fjÅ ëu|6]s¯bå[sz+ǧɚ«Tj|ëf#ÇÐÆÜèý;lš³?ÌB…ŸH¸@ f‘>#8PlÂŒ% ¡V_œbÁd�h þ¼‹Ëžò»“ ì°‹Ó>Ê:âŽÍ¾‹«B¸®Q¤*ÌuÅ1»@÷¼.Ûì‰9ª®¤"§Ùú„�q’L°¬¥)Ê’¬­+Ëyî|Ÿ¢Ùc–Ê À2æ÷=‘ pµDŽ«£<ók‘4°Qû÷;3®BŒÊÎrBÈý9O¬‘ Ð+œM=¤sê岃òèF Õ ÑÇ‘ÌBÉE´Ø“ErCÊÒMót?ÑìÄw:"t•6§Î “<Ï=kÙHÓ »º¨Šø¡J1ÞyŸeôÕˆ³cÙM•eÙ–mgÚ ¸$%–1œ[0õꪴSÕ î¾½,ƒòÀÒ.: Á®·<ÕJÒÕ"¤Ü‘|ÏQ@>üT1ÓÛxÕ\ä¥Ýû°ÎGáü Y£Ú8n‡âŒ²U˜Éc‚ dÍu]ÕT}yÕVüê²Û‘BŸdµ¢ß"Õ´½¾Ú×4ëS³Œ•á#:w ¥R,ùKå4dXöpÕ“ù< ê$ë È´–IòŽ%©êš®­†Ÿ§ñÿ/噌r 0ù±ÚßSÕ²,×o/“!™SÓæáv¿FËq¹yÝSrÓT•»!Ü·D÷]¼ÏeÀëWYìïÄ»‹Z•nå/ÖýÉÖ+vË{Ìîõ·;Þù_iw纙nãKDûjGÏ´ÝÕÖTLBw4åô‹V.¯Ý÷ï}ßø„ ‰ezõ¹rÏ6}Á«¯üìù™ÎܲPhEnÁ½ºZªæÈÊý\p\<©º“Êî Å@ò²{ÿµ¶ewCÙf5Ò}¢á h“Â?„ÿà€HMŠ1aŒÆS3v|èÌ.³hë ‹JcìÕ€¹–L¶_k®FΩ³GVì“£ÈZäL|¡ü Á Nè2ÂØ] àÝ£ÐÑfÀX�`;xÀ܃†Mª†">¶•Γ…ˆi±‘:gÔãÞB4Rj9Ò)…jJÕ`d‘é”çNå×/O(-¶tÚ]#‚Šâ(+4@ TQ^sQTµ+uÞZ_*ŠhÇùx8ȺL•T¬ØÆx~«;Ö}̵Ú¡DAѬXÐÂJIY-%äÄ™YÀL&<dÜSc”v Ì¥³Rˆã‚=$ëØÂÈ™T‘d‹mð«¶è?(“L¦„1Õ¿˜Vƒ ºþ,„0§û&¦DÉ™O¡¨@,#%L±{9ÒÍܺ<pHÅkÆ.ÝÔʆ¨®[Èí4}VÑ¡ÆGYI{vp•%‚2a\ËŸSî~””?„à´¡¼J Ð�$;mQPò:Ôí ¤|]s´¾Hº¹ÙTgrRV=Óôæ³cïpË3¸ £ŸBØ£PU’Áf8$Dµ’¦wQ'”¶¥ªÜ}QW–GøšOs±®uA'³* Ë9œÎb2Ѹ6›¨c‚‰“„�i$Ì“Ÿµn®UÚ½WßüœËf ÊŽÍË4yeZ²Q¶‰DbU&Qt~T:”T#{|ñ)zéHâ`mT©Ò÷ÊɤH(þ,%þŠÁcì…‘7 PqÀ`{±[>9hŽWÚ´/aD"¼Ö£R”³Ñ ð qi—[L‹ìÅWù´ÀL†¶î¦_·¤é+˜ŠD|Âb3=çÍ’¹W.¯‰qb6Ø— .„(Fòæ•Ûd\‡õÏ+Yå‘G¨°^":ˆ¯ êþ¦ÂÀÚß)NúòmF9ûK[Çn™aj*†ûëCÎóöQJI·IZEl¤J|(*Œ¯_γjËÅFÑNíÁè.Ñ|wI$ˆD73b\M‰ñA3a6±¶µ+9U58N6•B$zŒÏ½±­²È”ãKwxq¼ßŽ—zXÛKÝÇý‰±s$✓î]”²Ó>hÆ ãlò≋û &ü`ÔZÖlˆº)Ðü¿l"[„¸"¹ÞVG:g\EeÊ3+ß8¸¯zê)pOa’%ŸöPÐZ ß!,3Dx¬�P¢3RJÜ«Câ(òƒG¯ÈÌòž¼|µ¯Žøž(G‚eõ>lÑ“®sþÙkŸ^²•æàÚK74¥¥XØÎ´K]ÚF“¨IòÅ7YÑ–¨4Ž WK¸Î¥#kŽme—Û*`©ïÇd _‘DÛ¹Äznmݽ·à µùæëUu¯¤§SŽ¿5dKý©«²x›Wÿ8Í™°ßO<ØÈÒâˆÕ)o¾ç#—‰Àø–µÈS¶, ;“wâP�U ÄDÅc6iX³íªm“Öˆ÷£ÓIfy<ràÚí¹™A;v…„šèS—Ù¾Z5Q¦w’´Óì\šùn°xôÔÐÏB23þâ}/¦!Qž7xPƒ�uóu�8§¹ÒЏˆ;OmÓyá\é(DÞœ[!9›DíA«Ï~ Ëæ×R‡Ti)rû­ÁQÙ·bàÒ&ß‹˜þÖ§Q¾G€N¬ëlÓ¯p'P¨±äñ‹Ù¢á«š•ÏN0¢¤ w!ò(ÃÈ< AmôßMéýG©7دr#µ:Üx-œÎ^/Rm’ë;ÛÛ´PûH¢JÙ,3ÕÕßY^YËž8&F¼iÌ »Ú@ñ@c†ðÿUõþÂYâ¼\AŒ@$J-50Åz¸v<4cQ4e^ÞFˆCëǾß_hëø×ƾCš%<]ÓÒ@3j4ŽíphLò=+ŠˆP«û0¢vA¼àª!„AÞ��jR4À÷L*Æï‚– ¿B&¥êâà0œâˆO¯  `øæHÈIä¼ÌvÝÇ®”-øËΆ̃¢øŽH‹ÍSe‰/6ÂÈÞtêfJñÉvÖg\©/Ò¯B Wì>ôOIй °½­Ä‹Ø›‹âÍm~¯eÂMZ=.Ðý¬¶~Nrp®Ö|§BàД-"ðN ÕC¹ OÆÓE¸Ò‡’mïü:Ó©|h€×P8½ ˜aúa�8 P¿ñ06¦(.0€"ÀsŽG jʸ+ÖzHØÓ‘Hù †®¬ÀËÏÑ‘H¼îˆnÂÖË:¿«Jª#¾ÙœqŒŒ3oíO ‰ˆàìË\n+Š„à?-q31¤#á"Á® (€§‡d2H‚Ñåf·Šò–(-tŒ‡ê?ꔕ§£ÐXFLî‰júÙM¦K‹ÝzªitèL‡PÕìiAü�HÈH-ÿ,ò„ ®¿h´~F„à-†”ijéí²`ErA$2D¬�( ÁX,+²µ‘,‰*^ìE §^¨ÇÌ纷ä÷¤à[îÂΤŽå«V-LGE`=œòªPñ ·ð̰÷Šã ¢>`¡ü¨1+$rµ+bI`²‘<CÏ|ÃƉ È9#îHKD?ihÙ¯ÔFÍôrïlrŠöª ÄÚqhÁæß¬‹ ÎßÎT¸¦Ÿ*â¹1/S#@ÐÁŽÁ” �Ð5ÃA brœ†8œs,Üñâ%0n&ƒ½Jž³ñèÁÑ''²ÕjˆOÑ÷0 8ª$�ÃQYêÚÿ /(¯Ê.GХȸyФ.2`ou 0bÌlÛ.Dë Dðµ#ó:3¥:gv€ždp¾±Ô—%ú¿«PÕ®åJæ°€�ðà;ãæu®A Åë M'1P[m2%àyïÎ=žñ­N¥RØç³9(Ef{ËDgëd‹æ àC*ò³:”V18†$<»¯7þ=G©Õ8CÒ~îËM>r,„j[ëºPŽ@›1nÂŒ""’í2ÐÍHªö 8¿c¯2ÍCÎÖÅ⸅�")1Hí¸ÁÚÀ> AXÀ�Èy Œ¤*Û4”@öH~oÒRUô-Q*ÒÍã¾i*1>­ó ÓÓ3‡Ze®lãÑ’3".2y1}=sèOx9S̵æR40ØÍã#'’{T.°gÃ/4]åPUÑ’ÒÏ”¦ï tCL!B�| @…:‘TuIT¤&€ UP¨žýpü„/îñÊZÙ$JtÐY=/þ_.òÁ®ì91Ó<QÏR3Úª…¬m)€ÎÔvÓN~- ®$± @.`—TÕ¬ôôB4&šdÖÝ"FH’æ©ÓúýΈ©-þ¼îdÏõ-ñé4“E-3¢nž„™)Õ¯_k–f ÁdA¢3j÷ó{©|¬•g ” L±Í„‚UJÃWI$P¯rTÎX[s†,Óø¾Ï{7eÌ•Íï)³´ÁÔÆqÝ@°iQ¦Í< &~ˆ÷(H®þ°—XgYcJèÌGm2OAÜÃÓ›SõC_–•iv˜'€Ê   Á °ˆT1ÿ�Â@X”.$�ŠÄá1¸œv1„€b1xœ.?ˆÁá°wü†- ŠÉ"Ò9 E*†J€PéL†6›Â%³yl–{’ËaòhDš‰‹CãЪUsQˆK#ô¼FD¥Å'‰tæ&ú~?D!€cA6L±ÜnW;¥Öíw¼^oW»åöýÀ`pX<& ‡ÄbqX»â­‚à,¡ahqRG#³Ù&nÍs”UáÒ©N5*‡Æé’º•"q`–D52¸Õ›M«R¦Ò*.žk_±E&»INž¯ÎËæÙ~-;GÉÞQk:í&®p÷´ ÄBL—Œðx|^?'—Íçôz}^¼9�ä¸c5]A�h3#†êê½- Æ¥¬* åªB ¦7¨Rn ÉÛT©!gò†Ù5€ü麋 ’–"ðÔž¶P›ô²ÃmCz‘%í ¤ë:‰†ÿÄ â`¨9 üÏ:JÛšËÀ­"‘¬ê„—Dhô!6Ž3ná,±ìÿ)í«~FŠbÅ)AIâ¦Ù¿±\‚Þ+QÃ^w‡ÉD;ÂЄ=“lÝ7ÎŒå9Γ¬í;ÏÌôõ‚S.³±úòå.nSõ ´04|“Ã-$Å®\;*GÔ:è“9¬•´Ñ4»MP”ÒÆ£Ð {k!4oʵ"§Ñöµ-‹p›=Ö•­m[×Ítò±Ì a `ü7 žß@Rk[¸J›'Å-d(™Y®u¸È²5DêØÖ<­´‰#[Ùt…L×#4£ ©íUQ]2Ddª�.Áú yŽI®Ýýà¼FQ°u‹dA„wGÀ I«%ÇjªÐäÅuÕ0¶÷N£Fô= +D¬¼H×ÝÑÃo«Tµ;x®O»4ÝÓÔ^ao¦Qæ_UKî_QP&JÏÛZ.GèM—#ÉzU!IÓqr­•\ ²½DÌ46{tk$^›ç™òPŽÁüÕ6`›NÕµí›nÝ·î‹É>Ïö3§ˆ´Oü?/G7>9NcÖÆƒ'@í½3Nïú.…$éQ}«ÅÂ2Î>�( Râñp1þóò¯Ÿhœ‡Bûè‡Ñú ºÚMV{—]×ödÂW¢Õ`²ÜVCˆ²w«¬ß#qÛÙ+ñæ#ÎÛZRg+®X£E¾Ý™í1AA24£œoÖ‘”µM,Aq¶zt²Û)Áö`øîß½ŸåùþŸ®L†ÈÒF˜`¨&šËDkHd¬ª »Jò0U„Õ¡·c|Ïš:#‰Ktˆ§Ó-AÅ›<tqQ¢ ‚j©&~™"£ee°"„L‘z˜s¬]! ’PôI]rðíC%Ç@ˆ\òÝ6 e¡“Fv‚€ 6°¹Ãd’õ×{‡ £¹±&vÌö‹Qn.EؽãèDT@%ñ’2‰QèhᙨRÒï,йµõ×Ö<wZqæRªÎ¡Aü4L©RèšÕrÚ:0Ý­Bl~Ë2®u�d¶‰dÄ™“RlÁ ±„¯†fY§”eÄÐ`2ÞtŠ¥k2‰\ùôH†Ì‘ ,ˆ¢jº*Sä19u—ÚæPHŠÃ”>·eÜ3jèaÍ2€@ùtÇh q$üdäÙ›Sn-Áâ>@‘ÂèfŽ@€!Q7äpëLõäS£rL[‰x˜3˜1 ‰îµ©èù§ô«4 áãÐâË7.Èž„@HåœÒVf/Eøp¹Ô›?ô “Q"ÄÊY2¨™QJ„©÷F 0Lƒá3„�´bÌܦTΚSZmMÌ4còÖAÎÊ/ %äst'VÒ™ÙPZÚ�„(‘à•˜”fIŠŠ€s½¼ˆYcÁu((]SÔ:4ß<¯dGá0AÆ…*ÇÉiE°g‰ŸN+…q®JîOJpsc‰»i3Ö“Q&g1ÑÜqªÓ@¦³c œÜ;R0%bG¸HÏ©Ü|ëÄÔ»÷³V£ë/Ž¡J#¿EY³â”íœÍ!û5&³­®v®ÖZÓÐ:æø b �‰ÒMÚó¡LÆ‚Ué¤<kI½P÷=ÞÄýV3²i”%U3VL» ï½Ïs'Ì-Cut„¨ž&í¥»(¶ÞÓ¸ñ¦}µ¸<¢$,­q Þú\ŠN"¢fÔº˜ZëýðÀIä !ME¢l¨ŒÊ’Ë£>W¼ÃžÐÕ½µd7Tciù¯íÝç7Á.& ðT­ ³e¯^«Ì*pfÁKâ Zð V5»ã\mËÄžîØ`�£¥RT/©Êx)<XûL„ìÒÁ^9ma\”ñz1ãVW¦Ó f#°,¶4¨Ùs)¡ 5¡Œþ²VtlgÚvDoO©öùª$­V8ÎYÎÖã$+ƨ†ã<0÷Cl4®¾õ¬è •{íÛy.ª:ahL«^Ò¡üªz+E²ÌBÑΤùj%ÚT£ö])h¦™¤µ`¿ÜÊ«h-%|‘ZÁX¸³Î\…!­„} ë)Žt×Zï^kÛXžDI  ]­=–Fo{%Ñ—CëûÚ8Ô_S–gm”Erì6,Æ` )HxSiDh™nƒYÙ–¥µ21ZGû©’µ¿_o]íL±Ó¶æPµš¹¦{VEÈz°d/Á0NJUlüæjÕ·§o´»˜2Ï—x“ËßOTÕ&N>&žnšÒ_{ò^MÂ0yà j@)qDVi¥t}v† ²ØŸP(6;„ù¶ÑÔ‹qɹž¸[#‡éKbˆ£:7=èj›YRm-¸¨>¡Äü3Ka)•,ûT¹OQbêr]N%EÉ$“ôË­¯à$äýϺw^ìÀ¶�¥8œ/uñ¢oAt©²ŸLŸ0ÑuëÒ¶VQ •‡ùÆCrN)¾œ2 ƒÞÓ`´êÖx˜ ßÒzVß¾D>ûÇò–bÕK‹™Eëã¯Weý["j¬¾ÔkFðs.ý¬y§p]W.]?V57ì‚Óð"1Ä$ôßOê+±ˆ5G@EâØ�£ívïRÉËT$®Ãü‘ Ù÷ܱýFìÿ„ëÄÍÚQóö% ƒ„nÆÉñÐ'(u§ö)Ÿ/Ä3ffæªNF \Tp ÄÏ&t-&ÂMB¼Øéþýθžî Òˆ‚íÁò�è*^îO«pI°L/ * nôãeLo‰É&’Ü('Ž‚¢Éf]¤t±©|Èk¬8 l2–¤À˜ á«:¤% à `\ˆ k HÚbbº¨<’Ld¡ ôPO p¸NPł߭ Ò¥œýìZñ4Ð/6ç0ؼ®6Ñ*2æÂÌ·©Ž´¥”Ôå¯|¸ÄtÂù‡ÚO úP»ñ<!òUà¬zÁ¤ �Àkð ¬Ï,÷ï© â÷lÍ ˆ'˜OŽâPÑË‚yŽ*žfr‚&0©G&ïOÒj¬¸ë†4¥Bˆe*´ix§ãœQ‰3ň„B¨j·ÅÈË|#Höw2DäÈLÀè�² K1¹±¼×`* Iíâ0àT±Ò¾m@h4còÍOípèŽf‘ÌT "ý””È{.Ÿ º!!ö‡P�á. 1¿!²/é<À´ÀXNšÔª cTN°Zì΄ö ¦™ Ž•)b{g#íRP+v:ÈÔw± 8d äùo Þ’'rx.j! €þ�&À�m4ÃL¾±Æ@Å#LÂ&Pÿ œÃPl²Hd…%üéë&¯FBF²h†‰U^mOðyLJÁ¥”ìäªáHŠäÁ0ŽzlAé“ eP€P⾪šUrƼgɲ�óPþõѪ è@´E'³!23$‹À( ¡Fsj€òìÉ‘l»FIˆ·Ò“,/dý§Í$­^÷0ðêRÆgk‡ úZÑ_… Õ. ¬`u2!s'7²a‡"A"­ú¬ñFƒ&„—2ÌêïtË3jë­¶³ë.Ê'’‘ðê¢&_%é’‰±Èi•M6EËÁ�…¼Q…ˆÍOœá ôs}>2!^`ö!”@�“9 ¶ös”¢d5ˆT¹Ð�Ã’öÌsloL‰�ïd¾¨Ë JiðKNij0øŠQ÷4#Y¬ƒ&M¬©ò·òÏ 1ÐKS­.®fo§‚—ŠŽId-Xý¢<s1óåGtyG¥v ªI„ðíDðç «ÎФ–¬Óœp.›A³V£M;PÝ<r§AòTñp–¥@±t^[ss!žÀ¥GÔÍY82&¬}8®¦/Õä1ZEŽÉr÷=XsÊ33‹„|¾’=&0tÙˆxðr¹�‚°Kh{Aâ•oš!ŒòLõ0úµ$€Î!Þ¡õ) A—JL@]Q+¬˜oGTófã®~zª« uLhÈrCe0©‰úF@â0ô£qLoâPì…˜‘ ‹Dõ‡:0 ÁÎnÿòâ„d£¯Eq”i ³ wNtóZàFÀçG�u3\µÍ\ãËHFsòH/R/N ;E®x1#HMnÚ´;UbïåJÜåÒI$-rL•Ña-ï8¼a4Ù"Òèi²–ILÈÅ-Üæ<áú‡¯øÓÈ Ï0ù0<Ïò°ëÙÐ^|)å)ôe ]Tð™ÎÍѤ µ$@<ùõ-aVxäÁ<A° aà,�c➬­5iv"ƒS¤ÌöšK eWQܰŒ-)袦N|µk6TI#B¹Duë6b|5!.õ½H–]eµüµò¸Ž-UÞŸPüÁN(5Ë<¬Tß63žÝAàôÃ1µÉg· p÷.4€OÕ]“ºZQQóDRQˆâ±¥A5q&pÿ5“Zó«,NeÏð¢PõriíPvßo°Yn•H¾âó³uL`§q7hÀV a”Ú¬mu¬/ÿE&:6ŒÒz6™t©^Ê-]c.ý°qE®ÇJ“­Jq‹èÓ­1,Á3B‹fóÚÔËv·ÄÀaÎÁì áÁ¬AÞs÷WÂúfDf^,ªçÅ#4è f ¤,­-ÖÍU›=SÏ-J“xˆ@±|Ù$ÄÊ•(c²ÿrÈE€÷UOH×)Œ —‚M Ú x ô³Ao•F®Þ@† €×Ç…xYGÀ* ÁCB·ðèo ñÔ£<޳[W䕿Ņ8â‹+/Ù^oŠ…MÌ05åenxo[+ LA+vx[Šªma€µw0Ã_ó—†qO6µZÃçšx¬V™ ¾Õ•xm¦æUtZE`%%-ËÌqùYÔP³Š¿wñ‚ª'Õ&à<U+|8­jâad@ô‘?Sù7¯w‰§fmðSwèñ­—øál’3 Ö«.ŒêEo‚÷CyLõô™~ð/Qÿrœ¨r^ ÐúÅJB@‰…U™˜1…áACègQÒËŽ1§dÓ»âÁÅ0©°ÎÃENj¬¿j0ëWBˆöîñ6¼»‘îdE¼UÁû áž «˜YܓҠ´Awwok%[w‰‡øË“iSaˆ—X0çDÍ[y^0$]çmCþÍ€Wg!ŒØ©ú,“l``ÐÖþ�r²JüÙ-iÊøº‰ð`vN¥)—º ‚¯ó_9̲KBex’Äsktt·NˆM‡Ù:xšL¤µ§Hºols’ÁêðÑ—ž™ŠHqÑð¢6Ä�ä¹}¢úµ«nè ¯˜¯c§Øqœ7yËnÄá¨îi÷IfxyHÙòÖ9U4QŸk‡[Ñšžyð4g¾ðX>«,:e_7Aš¹°çf‰žApÂð_›Å.’ýWtëùB¾ØÛç£yÅe’I•’í~” ª™Ik©G¤C �Ó¢9�º+±h~ÁB° €. ä$öóI ð:°€Ð¸™fLò4G–“u¨†Ÿ+Õ?«Ýš[.wåJÆxÑQ”»LJóÇA ŽFªCÖJ)*0„ `±[†ïm›z‚ºn›@tºžÈ”·¦�ªà²ù¶¼À,� °ìÍ_Ó™J2×»ºÿ]…OêĨ$ÈRû-¨af-3ÎÕÚk-9j-¸q–õÂL+m­ÊqX¢Áœ™ÛÀ\\m;™æ˜·øG”Îq€z£¼8lñYNÐñÞ¸·U…ÍmYI9âõ¡+Òe‘–q¶ ©Åü¨nAÌÁê !¡ª!ܶ¯¿xª…+É:Í%uõ¸“Á¦çÈS[§ I$ZUÆÙY:zk;éÕÌh½å±Nhn9ï`öª6†š�¬œÊKˆéçŸx{<ÝÝËÕ�¡à¡ð�ã«�~ü«Ó½<›z¼Ö‡„YÁg lE¾2ÿ’ì.u…Ÿ–øDu 0׃ c¡Ün.Óru\V ý?Ø%mÆ9ç±Å…Œ™~¹E–ÙªP»<Ðs¿O35xÛC0ʔۗ†L¹yz€Ü*0ö¤½«Ãµ¥_¶Œ¼§Ø]Ø`A&a£>áŽ÷Œúz‚Xwƒo]Z×LøÛéy…¨U—,=ü¾$U4 Èц³:uxNÎÂ×÷¯1 ijˆâT’@.ËHò•¨ˆˆÚÑá;g?ZXÔìéU÷·€«©­»Ï ür%sÓ;ûÓÛæ~hv@, !:êþ5¾G¿&O™pŸ•z†(}µk£ì…“O^wO#$뀑ïZ+·}”H9Oj!½z¡œ}æ¾ÀMýˆauÆ­I:7Sueü‘JTf)øUh|¯&àW, {šþ¹ðåwŠJüý·2OâjØ0ܘûÝžÃñ¤òtáþàÎAâÁóTYcg{�SUB1‘B:Ûpd»¯mºˆ6ÉîçÖ½zo“>£»Ð�Ÿ Ê1cc¯È±ö™ƒNÉ*q½)QJŽD2á{KIO°'æ¥~’#õ? àÞcñß©ú¥þÀ±ç>ó¬œq‚{ѸQyÈ:ƒ~>¤0)R¼ñåÃUí_̽ÚãÈÖ³0- âþ¹ëß­ÿ#Åì~Ê �À8�ÿ€!p .„A XtF ˆÂ#�lb9ŽÄãà¤R=‡IdòHìŠ3ŽJ¥’i,bA—Âe³iŒÖO9‡ÆäPH4îQ-JãÔ9\^-8¦N©óÙ¼qîû~ŠÃÁ20­H¯WìŽÉe³Yí›U®Ùm·[î•Îéu»]ïø:‰|Ö1#×a`ˆ&†ÿ…ÑçIB¡†„á¢ñx4¦Yˆ‰dgé”ç5ˆH)Y(,«?Ÿe¦ÙÕJ)Žˆcq’º>i‡¥Rgö u_­¢e*9 ´ÃqSba|yï&OÃêaûLÞ®ƒÍÅåé‘\õ{'ÉÑË"pØÖ¾C×—HµÛ-Ϧix=_ ²?ÞŸ×ïùýÿ?ð@p$ @ðD´‚âÉ:Þ1*šj5l£ŽŸ'nÒ¤ ¼î‹”¤9îì ï<Pƒ8϶/Tɦê<*”CJ*–¦¦ ã·¤‰„Nμ­|BŒ·p’ "çÑø ÀgBÄ'Iò„£)Jr¤ªÿ†)¸-‘eÈ €Ï#f†=iò&Ä5 ã"¸N‚‚¡</I4Dl´zæ©‘ÄZѨPÚy1OMÌ^ÈÆìê€ÊÂ-LðäQjDjÅ4+§G¶Qiò~¡P: +jì­OSõCQTu$ r§ ¦C†±Äv@@…Lôlàà5”es Ñ/L¨ºµšÃ1BÖ_>1Läc_¸Ñ"Ó2¬5¢¯´Å\GTlûJ"Ö;·bG1,e_B ¬ó,n%‘ Ò ŒåG,w-�ç£â8 È|ûÔ·åû_ø`x& ´ÂÉ6èÍñ|'D)Î,ë;É£†ôDõëvï´V­Žaxê\Ì\v&7uC)øÒbU¾M>Gvìa†6Žf'1¶¶ŒëpÛé÷#�°grn £húF“¥IòÁ·-— Š 4îFCŠÚÝqgpûºìêôS2é]6]~ölTÍF<NdÛA±öÓ¹ª;‘ޏ¯ké0¢‡ÁötÑŠ®i|' ÃpüCüH–F€þR˜ 8 ¼šÚËtÛ0Û¿4»]¼ÐÙú›‹sVzò\;£cµ ¿ÔWt•Æégs–í«ÇékÜõÝ5GGSÇ~Í÷ ¥õzÔÝöúÎ+_´§ýè|¾WÅõÄúþdzí{~绂ÂÖoLœöê£Pß7ÊÌ6ýÜkõÃ0í‡scBI­= üïšüyÎ`‰£ÚìY£Y¦Õ‹¿†r^œâ[Må—•T‘Gè!íI—½`Ôƒˆ¦¥±p@hQ+Hã:ƒ¢¡Æ<I�åº"*ž“ î\MÀ¨¿CŠÙ[BÃ]¯¥Ó«Æ8åË=‰¬ç¬S̘“òÚcI ¾©…41„XWƒ±V+Ex°é¡€MØÀ�@Ý~/Ác;\x[»b~"œ·/#‰qvr:ÜòãÂât®™HÃèPŠW;ö}«)ÖÇÔ„¢ÎÓUvD¤ž»äòȈɭwÑ”ÏG2^úÁï"|7½PQe£”’–SJt ‚ÛâgÞ6¨xÒtj‘dB±dâ…œ¢x=?RLü!š(Ïý±¼¤RmŒô*\’M@<…|ÞVü¾Rs+§r>вHã4HÁ‰Q8gã`°|FBÖÕܾmŒ¾]œè ÑäHbN©Ê¡( Ä3"vr(â„~°KÓq†²bă:Ë$?wíô~€&1DTTœ”V‹Qv’=Ò(R¢Èd¡Î€ \êŽ:–‰0[£3XM‹6 œV[%—ï ñ¤$†·zfxÒºbÓe@¦ÃÂ’ÈÉ›OèÚþÔ¡!Î;9*ÊѕƚE”…è|CxI_2†ŒUúÁXkc`2¨ML «j[,j…OfÐæ£Ÿ)î¨UŸ/gúž02#·[<œº2ôÆJ”DG!kÈQ›H#“6‡è à<g µY,Õ›³…Âs v¢Љĥ4•’ÓvÅaÓ¼y•&ÇÃ÷n¹jü´ò¾="`;¤Cí™ñ™j‡›l™k5\|¢®€•œvç\û ]…èÑA,A ä½ ³ šJRžÔÖdʬ-r¸ˆíiÕI›[ÝêaìFÚ”µÜæk½Ï2&ØêãIÙiên1ÅÖ»vÚŸbÓ†¬@gY4*$öˆÎ®?À†î×чx…wG§VêíÑØwaû ÂØ™¾òõÖ@{ ,°:z­Ú–_�‰£&f‘ ”MJîæMñW§¢Ù!:Lꣵ7QéÊÏ;É>|‚€8f‰�·ˆ2–Sœ|F‹`"á!Œ¿Ø&y¿{uzÝê¾ï—2¼Z ‘×eüY-˼ �È×}Å:ö•žG»ù?LTOp,E\Ü© t›%X,ˆÁj-ÆhÞó¥ùàé$ùcÚëD²ò×;ÉO[Ö+7T)ýÉ9­i™“©é¹¹çNki®n<éÒ„™ÔÇ#ããéFFûP?'ÉšÞ5¨Õ‹™ߔɬ:ÍOò3‘Ü<êÕ\À§Aìý¡´v“HápL>kUÏ[a¦×™çPZÓŽè!»“åÐÌó3¯õ”ÊÖKB\–öÉ®ËM3¨°ç!”‹‘dÀµ–ÊOo÷ –Ð[Ù`BM‡5¹êf¦Ù[n‹y0ó¬;y.¨ê\M¶²QTN±¿ìG90liÎ[— ®œ{¹”/%ùv"ì vóà¢9ÿ€s~qEðÒ\ZÑü�Ÿc<Iv¶úãn¹ 2årÂY@=²… Mõ]¯»aÔÊ—¬ÃVyðÔûpQ[Â}J¿˜ûƒ|É›4ØŠ ¦Æ»^ܹ úµVyGœë¸£Æz²Eê'ÃpJ ÷gsŸâ|W‹.{Wk–-5‰ò5ñ½—ºd)#i|¯“Ç•Ìë±7DÝïA°¥ÝX香¦î]…Dôo³”Ç«$’�€ÍùGÆ{pÓ7Êùg-š(HVÇÎ 'yIÓA›ŸjÎü7H[èçÑœD‚ÒúP<å’«…ö’èñ¯uO¥Éq"ú~)(1DN€÷?·÷/à4Dº—  1ÃæÍ;òãÁ6/'‚€=”/bŸ;«¼(:B®Ú³»Yµ3l&«²C^” t±Ñú9a˜+¬ úܱsÐ ‘¨®3¦£Ë?_z#ˆ1é$óÂ<3÷ÁœA«g€¸.„»"—I@¤–, 4ƒë:så20µyÔ»â94‰Ïj7|%¦"‰"’:ʽ .A´.B踅cÝ‚àF…¨8:B *¨3‚Ÿ*bò» Þ¬(ç�…>}/Ù˜µ¹¹ªrÖ+†¾$³È·j‚™$ )£K¤ ˆ }.@€êˆ„JÌÂôID™�¸àR†K…¸h�P€#c¾bÖ°s‹¿â¤º50{Z9jDšó [⪻6D(ß“rµ@D”D ºìY6�<¹I;´&=c¸);˜ùÌ‹AÚœû«¤4*2KɦYݪËÁ[¼<JFÌmFÚ,�ÄžJ™$ÑšC;M“ ÀÓâ–Úª«áÿŸ;Uc$Ì\¸‰h9"ÞrCÃ�Åa=©z¦A›²ãS¢I<«ò}CØ€»Ù„|-Æä‡FÔ0Ð.pZ‹-Û 1‹I4ú™¢vºažjLÅãèŸÉ`=w®|¦R×ZÄ:s½S\ƒà:"w9XÞª8šc;|@’'”ʈ„CÛH|£J8´…ài�"ƒðT€É¨º [«©ªŸŒB›<c)ÿ!ë»Êá3¡\aÉ#·Ç‚k;!°7¼V¡Ê“0=:½¯ëMÀ‹—–´¹CY;jîµ+ì5‰Ë9Š$£ªÒ=„Æ 7F°T¤L\ÆLi€€¸/´Q\>‘å–ª¶H–3Z !é–‰äw¬,S>ãc±hƪ¯ÆK©F{–Ü£<¯1£RLœ QŸòÊ2pGôÇMëÛÃ�l‚ØGÈ«-*©¹ƒz!<¼1Ô¯£ <ÚÓ'SÕ-š{²ä>$g$Hè  µ�åNäÔ YÊÒùIô‘GàÔ´*(J†Íô÷J@pPx‚ÀFˆk‡(wDò’$°+ÀröŽœäª‚?Ã…Ìã³s#DD([ ’›:z3±À#"Fq:ñç3”þ!óLµ!Âb~$¢õÎt“Ð$ÒÍ ¢Ï „xz¤è6LDÅO}Q­Èªš´±­Îq”/ûz°Š™Jñ· ÇËÚ÷Èä<9‚º%É”²™¾BÖÅdpž$ÿPJ}“iâ«ä˜Ç)œ²bʆdÝѽ26|àHœŠ¸;ê êá8½,¡AŠ󰚣—Ü¿Eê˜Ëî¿ê±U=·7B_¬—ÊÄ‹ÎÔZ¦«ï KÐä €õH(ˆCÏm2ÔÌ.hYPAHbDðÎi®#еÓc…Rϸúº/•U, ZQE‰”€«Àá›î!C˽¡B3J©ž-+MŠ?B,¾F,ÿ©EVT¼™"ð‰p÷‡ÀOƒ`&ÄÄÔÕmVÝn  ‚ý'Â8& žGŒ*TŠv»r8±Zµ„Q2£SÃéÅq6Ì�T$Σák¢3’És¡Jù1Ä&zÁ© Ý”°~}Ó/Öí‡,ìàèHšìªBÉÛȳËÓ“€�CÛŸè K[<ÍGrZ$9¤®ËJ»� Å Ô/#V¯PÌó®§ÝG©Û‡*2'Ì ¨ˆÞ‡É"ÄmKí‡ÚKÛ4„¸z(п»ƒ»&)ͪzWÑ °3`NÚ‚Í7aŒ7“ŒXóX”{S›&»ÔcÕ¤&s£dëÜãLÑsÇdάZ¥8×À›µ•qÀùËAß#ìÆc$„?Uk¼�|ð6‚`,àÚUÌ\Ì÷€À/„¤ÎÌU$:ØMb•í‚Ú¬ÂD?£¹Ý3”ÉÝÐF-a-´P­Ô«3 ¬±ô 5\E ± &èGXmÍ^qÓ=‰½ó —>¹rP“U̽;+^¹d×CÍÄZìqVmFV†]MFYô¶Ðeª :®;ó€ëô„=¤^%ö4äð$„Tˆo‡@©G™¸É[M~ ÔuÄ×+´àÜ#ñº§Š]Á-J\R=Z°CÒ­Vµñå¯Y�â;K8—E` <­Þõ+‘™Ë­ Í<Í3ð¸p‡Quj`&Ü­Ëßna¬.\àI¤³Úå°¬î¹ _áV5:zœ¨= ?'ù:""!R…#È<ïIíҌȅY ›ØÂG |“]”£}VÔˆ˜¬’Ê&èFƒcJ+`c†È.xY2ÈÏ2&7´ày4Us[`º€GµqÍYCÑõ:;V\ Û°ËSíØOúž>ü[µc£Þâ!ËÄ·`¡: 1 Õó?@b„4ÞcVP.€`¨p‚0@…0 �h>¥âR«š¥u[/Ën] cººR2C»çL%TÒ!_I?N{qŸ6;Ê»j–Íwer•É+üÌ 7 ¶Ü;6»›0Hî=£„ƒeu>ÝÒï }¶RÒ\(ŒapOƒ^ܶPçnw7ø »Å e Å"ÎŽ'PÖ2- Y”ËK›¥¯L¬}b«|ÉÀRu¼í8]<¸Ø^3ç~о6À.†8²Ñd†HåÀº&’%©.!Å&^¼êÅÕ°êLµ·GjXK{§¨ '¸µ~8îd¸äʇû>_@bdöŠê Œ@m()„XVD³û#¾»¶ÆJžâÛáFm“,{žzIШàÞd)¡æV*SY%Ú@-WÉ镤ž°u˜  –dIuMV¯èt¯­–\à]ñ:d낺ãùH×”`±à�QrNçP,gf¡l>Ä,è Ù9þ¥Þ\ž<ÍTµ:¦˜L[47 —¥Ö-¦il{˜Š@úÛä5n/­{3ßé‘´Ç4èDQKèˆ`FcFÄíé‚hc†À-èÐ 8;Sžñfî–ÂBGý y[“Í µû8µ|[:Kn›J'­UP‡b½/óNê‚fF—ŽüT¦† Z ~H�®NäþßoªQƒpNÀM…èg²Èš€ÙyoÿNöKqy_Ú9*÷Ë¥ÅÕ†L ŸITSŸ#½ÒT-ÝI±Uº·n¢€Œ†GÚ1J»ˆ†ÓrW°§uW‘UŸo\³¼õýèe^νL00ßx{Ö¨'‚Àážûr/#%&Å„Õjña@cϲ·eggéC®*­=(àü4ídÖub3Fƒ`ôCphŒ2` mÈF#óYPX’ðð]¦³EÆ—@ÄQ¥´ò­¥aq$>, GÚíÜr¢Ag*Ç^¬q‹¯¼6 "\:k°µt~ôpÄ?0�à iýásgPàB…hbPX,OhÎ3¾¾ÇB «²P¼ÊðOVó%¸iŠÉBv›t›î–TÍKC`eÖ(kD€1sèPy^ëÔ>[´n¹åRIÔK�¦:¯ÊÙáìS~ÀÑ~t‚w!r'P÷/s@ ƒ%q& [$4IÜ9YpÃj`Ûª´~uÝ:Æ”¹ÿ¡ë;\R°„ðu÷*­et÷ªÓt_”M‚²r` íÙˆ´‰räå…�ˆe„_5w?@X†Pm¸Gsß$´ÁÑ2B í›ßk�‡Y ”˜ŽD8õ”b´E•u*nÓøM.Þ\ï_xùí€ÕCøi±_Ö÷lŒ´Ç>Iô:mÄŽª(x€°b/Oøÿ®XpJÜ‚‘ŽËþ\W¥±žqt}*©m¿J¾I*&÷@´¬éÎa³Ò†a-óLÍÂÙí±´øšç¬Qé|[ö§U¯,Î 6?¦d\ÇW…‘Ð¥hZü:é)H‡x{$è4÷g®ýÑþÅ„„æ'’p£PÝqÚîU«Ò¶±A;°'‰ª>€Ëýº8ÉËå‡È:œû§»;ZzFë*P~¸ €˜x<§Åí•™:Jü g/ê™’»¤¯éMf¼cáhçÖ|þá~€µÆ%í–wïü'�PX²Àž|àÏ苇ò \xnƒ˜P…ØDö‚ˆ��?à@üƒÁ oø\�…Â`ñ8|# ‰Fãq(ä ‘È`rI,"5"‹Áä’¸,Ž+ —Êe’ü‚ %G!r©”Æ1 œÆ"ÑI¼žYŸI§ø[áôü‡B¬D!‚M[®WkÕû†Åc²YlÖ{E¦Õk¶[mÖû…Æåsº]@×󸆀Qµ\Ž (  ¦N!™üŠi>ÂÄ"pjeYHÂÁ(Ùì¿-J‘ä'8º>rJžÐbÑŒÔî‡O¤Ïò¸I~R+•N)z½&³i–Æsz­üs+$×HwRmOq]ÖjwÙ)Þ.Ìðz½ÓÆ¢y`v-»w{Ýÿ‡Åãòy|ÞG§Õëö{}Á“C•šmiÛž Ï—¡~1ÈÛ޳-«ìݦ òϤèƒ"›¡ sN‰© Z€±(J ŠÁ,Œ¨o¢zË2Œê\£¥kxü³3BÓ¥çÙú~Ä/Ô&¤·¯Ûn£Fèì4Ǧsd·¸ìó‚æGmÓŽ³I*$É’zË"BÌSzž?ñsž²9ÐsĸВtáÉmc â)-g7Ž“V›(Hô0?RrQ¹Í{®I,<í,Nétß'@�€”#„Ñ¥©*˜šH‰‹BÓįÎÊ$»JÊT L6Œ$Ê™´o´HÄñ¬êÍ?’µǺM ÒôÓU�Õ±âŸÖ•‚d|ŸgàR*êËÝbØÖ=‘dÙV]™f¬æ!®qä)H@=UGѳ#9·ôÜå¿ Üë&­ì·/È0«-È)Š)RÓPDvú"€—%ÏTãÕ£ñ4GF WÂX!x$ËA3<IÅj„?wR 4âÖÍt ÔXµ@B2Û>çNH1Üê”Ãx¦(†ÁM–åÙ~a˜æYžišæÙºÎ€€€LH÷ø�A¡�ûþ ˆBáÑ� : ŠÁã0xt* „Ca`ô2 ‹F¢‘8D*&‹Éä1©dª’Cáñˆ”â9>šÎ¡1i<¦.™ÅåSI¤òuŽF¤´9ÄòE9™ÐétHŒŠŸ¤R!“ê̾GQŠNäpi½.gX´KkQû5ÖX£\¥óš ’[fV:Šu@šEeÕj †‡¡Yêö«ujÏ„HlX‰ŒBoƒ‰er7©NÙL®Ó%“,n71R«M²zɬ{ «âäÖ\z7p–Uu[Ûtc'¹Éoœ*¦Jv‘ѯ›,”v‡·¶u®ömÕÎõ£ðe7ö¨ÿÑ©ùýZ>Go¡„¸w<<.Å\ÃLu~,-æöÃ=(Áò}ŸH: ˜„ÂõÁlÂŒ% ¬- ÃÌ5 Ãì=Ä 8]šFð’B”`¸ 3ë‹l¨ºk‹Rµ»/ÚêÐ)NÒèò¨ŽË 9é|löÇj|€ô«jêŠîGÑ‹¡Fñ’VÐÉ-–ç·Î‹v½¬ 󂵩î4¨Ì¥±kv©´#d’"¯¢Òš±¨óržË,ÎÀ,s辇éþÅ@L¯s(Ò+kêU$0«C7*уOF²n¢[$GŽÝ*ÍF'952t½2Trtt°§ô»þÁFOŒ·,Ê)B\ÀÈT‹¶ßÍ³Äæ¿µsÄÀ¡±z¡2ÔZûY®¯-:Р®›¤ìÍ“‚íXtK”´ þ*ˆ!,¯Í"~ŸÇýÀH]—mÝwÞä„)Ù•DŸ*XlëNºW¨•®ù&Ô5¥C7N.ªeeG,õÌÉ^Jm]€Èa¹qPï ‘ZË�S´ÛÖ×$)ÄŽËdø«…¼ÏðßS,ôïŒä˼³O½´sJú¶5¤½•Kð„žÕU<¶Øúóe #]±5.S‘© *W4Ìwæ1f“c2$¬~z…É‚¥+JPþzþ\)›Q“ ¶ö8¬V·¯Ò^}¿kÉBåL6‹å†»Ø^¼÷Ô|©fëµy&>m[7ª]ÁQhš-’_¯G&Ë¿ÐûHÅyõo]×öeÙö¯lnp¸I•ÆÙÎv�à ï˼}W´YBË/MžŸFΖtÇje§ŒQø½ °k-EœÖIïwE=:V€ñïRæ ±s¹¨ïѬë[¥3b^}2Çñ¡_t,ŠéÙÒYk¸#2>Sê}m%Üß–ÒŽÙM Æz¹ª”Ð\“™YoN û@â¤Äšj²)Láï…W‹sÍE®^ 0#¯�Ïd1Œ…0(¦&z”,R: ¿Ö¾Qf­Õ;ÖŒÕáê3}Ì弯Ê}�`œ¥â��øCð08Ø-"`)† € ´iQ®6!•ê#˜Š_Mçhˬ•š÷VTM„HÝ+—ˆ\×^ºþ`êº (èt~ÓiGÒ'³b~šV¬Lhi–0§¬Ó"2¥TëÇÌz¤üޱ©¾=ƒÔÙ˜âHŒqó'¨äVâ„+°Ùõ8§:òºª“ B)'¢¤ä”>~Œï7(°è¢ñˆM­¢·y.R2ÉH0 ȯ†! ÜA¬>ÍÙ“ Ì´±2(ôÄb¸‘ìÀfðäDIJÃ%”ÍœóMŶ3ÌÇU"MH "O¡N¯È8øƒð°*0Ä«´.†PÚCè…¢HP8 n%ÅÐÊ€83˜õ`Ätœlz|*K •D(“Ôœ¯µäÄ©Uq®—nr£É8ÿÔ¹‹“¬ék¶ tä RLbP}M“†Â^d³cò>¼V@¢àƒG.:1x^Ì’aŒjGÍ»ÀffŸ,ïj0•¼—Yb$àVÊ$ÊÖsÎØÞ#q®3Ú±š˜òÔæ3qÐXûÙ6[æ»qÓ}X£fñ(‹Â²ŸV²å£1 ÁMgJ½ÌÈIjÀª´8V¯ØŸè¨� @ý¨ ±Å@ÁX! cø‚ 4‚88  €ðºè¹·Ví¯Qeªì‰©jV\¯óo^¥uh”¨²!ËÙ%E¤é¶L"’×õR€µ¾ Ÿ‰Ù $JcŒøÉêè᪠{3©„ÀI¹,™”ÿ¹”Ä÷Á$~ÇdB‡ŸëN§^Ø2çɯ¸¨IO¼z¼òž)µ»räÊ”$Å& Â7½è(¦kW4©ÁÊà ™,¤µáoµ#Ëxm[¬,¸°1ÕúßæÖYgkÏ–­Öò\*¢ ÛŸOÊêÇ™váÞ>'İÞh@ A@è-aŽÞdÜ“ò†QÊTLVŒ‘ªDð´\ )Ýà®i¬—‰˜ÇšwœÈ•Åšgu¥§–¶f‘Íàb5N$O‘"eñ0¦™†E6öÍîN.«’fæ™å60Z1^MKk´ÿ¢L£_‰Ê]‰ÂÄ0Ûã…+þ’ Ö7‚œ¥Ò¯ùÌ×½í(ZJ…/®%ÅÈUY Ú›’fs²®£gl!áFt°ˆÜ¹Ãæà,¹kðK ìL_5&œÄ²Jeû%dtæq™ÒŸ2•V ΪÑy÷Ô8"ƒ`_XF_©Â6C‡°úK”åÒ> ÀØ àø‚¾Ah$Ê{ï~;2mí1ÚH©žËõ"¾ª¶µãi­7œŽ|ƲùJæW*ẫåC¸lÄbÊ»=j ÓrúGDéÚfÛplï`¦vgl‡ ¦--£ïN%af¦i9xf¯Rhÿ¡ÜNšN’´ñ ‡‚®bJÇgùÿ󷹇¥¼M­P“_­›Vñ…lï¾ægüù††Ï �W¶x_zE‚Ûù†+´Æ…˜&Œæ~ÌԞŠä-ök瞬GéìÕŸ_7x—Å ñ¨"Êåy@h 7ï‘ò^OÊy_,Bv£Œw0 2òh¸£©'¼ì|¸î+¥Ï%Íã#c'½mi—‹ÂqDxÒ¯þh°×{_-;†]“Ö f{b¸°°îuÁ°Ó£%Ÿ©{öÇ¥¿ž÷ͺ©6â©áõ!îý‹ Æ·olÝaª%¥2ýn»Wc´5/qì¢Æ–ºß[ˆÝ=—_Z‰wïûô5ô–ŒLè.ŠèÄ1�lŒ¥°�­ï’øDìYD¡à¡ðÀ``à2 â š .àòðEcÎ Êà'¥m¦ŸÉXùÌ?ðV¯ÊòŽNF/í€>ð^Òiöä¦NÇ®zÜ,$ïpîì~°Lˆæ"Ò¼ŽrI%Lhî©ï˜Í8ä,†‡d^}KÆs¯zHÎá àÔîâÿ«Ìþ«‚ºè`€Ð€«ÌÄ£€çå(½IÒï 8:ËŽõÌⳈ*0LÌ,ŽK${gÄüã¾of?C± ‚F«ªEh„e„ûHˆ‰) d‹ ì †®€mí|½n€V¾ærí­?�)èS…ÂhϰED᪖ÍÍZFTËî9$Ø‹OñÏ!‘y±}ñ€CMØààâÁòŠB2Ñg4ƒãŽ‘KÒ%m´Û+�è%.ÖB¾“­¿ËÐÉœ|+˜‰"oºZ§F±ò¯æ`(ŽX«oÆ` MlÐ1\8Ízæm”ün®SLôYNè7IP„½‘Òl-È»ÎpÛ¯Îi/ðoÿM�ö)¶šðhú¨x9+¦í"„«�Ð|‚nPâͦ‚ ïbÔF.’ƒ¦$.HjòýP€±¼ælîèm‚ÚËÀ1Ä’ Ôˆ.”iP¥`üÁîAöŠ`óà`–€¦àX[À%2¬Ê`4 ¡„nãðIR8•ƒü†ªËÏlžŒ}±0쀾 0qNT•í’ 휓’^hëòV®-/~ýÞŠÎ Ã˺‰ŽÙ-‚|’Ã0\çQ*ÆÂe lsLÚÙñ:»ìD•r&ø²ºÜÐ�Ñ„tù2ÆSÓJÍ-²(åË0§QŽËÙhD6Ѐű.íª8ˆT-åŠû¨L/6‡1ìÖjì‰E .Üj’i$kMPQïNFêÓl pæµ1’h¤lHãò.|m®ÓK€åAî@€V€,ar¯=³Ý=óàòb&Á~€äAn€�Ì¥ó¯"² M1Ù"Jæùjk“å,ÈÔ4D6ðD-�ÊÒÍFœSw.ë5’Mˆy Dë2Q8,þH4Ñót”èeSÄôãïEbÿ˜ì o$®4‰zkŽÑéfÃRsFï®Â±èÌR¿“Ho AN¾ˆñ2ÒJë F¿‡Œì4[;°x4’Dб©4±E +)GaØaêà2ÀŒàJ�œà( >4Ü 2 Áǵ0‹¾äO®„å-JΕ M 0)gbæ)"Û6GtðÑ K#=3Í™òÂÔ’W8³¼Ç§2…¯£;îq2ô=Ԝ䇕RŒoÉÅS"Ù³ÏL±IÊh. Æ¥M’áÊ®íËúìs(aåp‚²ôðð¼MÓ°ÿ,æýã®q*XÓ^'¥PБWN(8gÙ"QÇ(-RòQDÆ&¯Dõ„Á,°r7.+D”šÔ-œJÑ ÉÌôgú\(ïQeˆqëIÅ “(›”7Í; üa¤†ìÞ!ˆ ËMö `¶ `èÒ¼ ~!6�CÍV¥” ¬Ì�–/HÀÊBëO7†F†¯8ÆJ¤UA-ÕRqJ™‘×5R Roî•Ϥé©*ÂöS Ï}1®6iæ@»,¡HÐ…3f oJ”q;[‹[%#«ðÃTt܈)'e–”å ®ªÙ“Î6.éÐÝHªªpLc‘½v/T‹úöC ? (8ªŠs]Æ-1¶Â‡0v}Ó/6Orãµò[$ú! xRœ ¢ V`.vqåßN!æFW u)¶[KO. ¬™FR³‡*Ò¶*°²üMNæ²vV;æœùVE3o@E‚Eé°úU÷9n¤àƒm/°‘« Bé$ð¿6™D¶sS•yU²~mÂbƒjUÇdC‘-Gi§sËzvL7¡'óNÅõë  üËÿ V@•e³‡væœ(£fÿB­¨‡ÚWÕRÔÔƒŽ†SU7HAS(/\- }Í”ÅqôíõÁÔ Û‘FNUãBey Æz5°TÓG¸¸I{IÍÌ_"Ap@Tñ¡†�ÍrI„¸M„ä&!¸`˜ABŠKLº'Ùe‹ÔŽm©{w-XWF³Q7SX}k&á²?bª<ÐîŽúv2Ž%~(/0«{©³fÍɉ³˜b´]~LT…±fgó£Ô.×cYÃVP`_m*Xt†øöçŸjÕùCÆ’¦Xz—TO©@¦Q¢;±ã{Öt‚ùKxoüˆ¸ŒõQ¼OsŒk"KNuönðm^®³tCiT×*ö¤6øÐ¯‚ÿÕ â´o: L * Ø Z 1…`B·$œ3XJësPê?LqgrùlU´rµwH®s¤Yä6³|¾ Ç“6=XTn®žxËATY€Èez Ñgø5wÔR¼x®äW|ÙuhY96ÚB“&ùhöqÁdvX©x0ï ËDJÀ„ о‘×~‹ÂÅÅ€&,¦œeÕK˜ŸhiÖçÔ`ÀÑϹE7vc…wp“—PýŠ¿ž5nÿ¦NsMq‚¹Ù³·&¹Adêmy´°vaF:=ƒ—.–—|™†þ#ÕδötøA„Yc§:u§v&àîáp¡t� V$à­˜nV÷k3i‹ÓA-�¥Ò½—O,s#VРîpiq­—Òò“Mb7νt0餶Ŗä¹2E‚O QÍhÖÔSyÖAA&í{VØûõžRŠvªæwk²óŒ6ùŸØ‘ŒË'¡±”Ù)EvSU÷KJrgîå²eqª+—‰1CkuDȨO%5®lå@З $]©u“K WlöIÝ6¬ÕOSZµÇË6³÷\ü ÀfA: ÀªËºy¹"t Î'›‚ÑÇžì埶Õ.ÃÿlÙ+™—Ê5iÉšL(à‰`©Ï ¬Ž`qß·–ž€XãÓ‡ XûI3¹“txêcœÏ/դ˷€¥øæÃ“¤hŽ_9šT*˜KÝŒpô¹§ÖáOié¥uw§ý;Œ&Ð[ˆ9Žd‘ky¨B:eNöÚ×YÇi/õ©ƒÑ°WWcœŸ'­.ÑJšã…OÐýûKT|O‚î*Nñ:±jŸ{ŸŽC3Wiä¦2tvõNÛ–O-ㄠϹ\¡Ê<¥`ó¨$A¨ WZõl›S‘{'z·•Wg�U|†wFÓ9øêcL?—µPG¢ïz§,Ciü׉S‡OIÅfì|Š­y…yâ¸í´N,xã[£YÎáø%¢±»%7—Zç½mRÙ†§ýwµò™uÛ´ï=&W²ÕÇže9úõÅñŶÆ€& ëÑþãÐU›Ã,ô­[aYΡSÅÒ0‰ç´rq!—–™—üE3X3‡s S /bÌað�l`< àx`º gÊzt@ÐÉEùÕ: ´û&‰÷½}¤ü{€|I”;y²W|À¼³ÂÙ’þ¥-wÓpì©‘w4Ö÷ÌË­»ö¡ÔÉ)ÄÉÆýš8š£×õ?#ŽUAd!’�nœ7[}í~' &êÖ‹Ù›T£]^I·Ù;©mŧ§ðÑÁ‰«Á}g²o‹µ¦s[ž3ÄS NÚÖ©” AŒÊî!¡UÍÙÍèüQ¦23"ê=U"Éj „ ÑÛ^­êþ°·`Þ!dA|%f³é˜Ê¬k G~6…ÿ,už‹ª³y#ŽœŽ‚º¼Å9>ÔY�›±)]ÒsP’º®þPòÈ|rxS~?‹o¦ƒÑÑ].ª œºò¸eÕp¼…¡;Jý»žh}ìý›×}S¯/™—>ò–¿]ãÉí>ó4Õqéo—› Åéù¤³[Þ\ÁŠÓÖÑšj¹C÷¬€´)ÂfÔ®¤›TãÍÊaZÓr²`c¸Õ蘅nXrŽ&á& à Þ`ië8IÛ½F«Ã:xƒéd4ê¸tC%…4em~¿Ë3>õ"uϼÚ<Ußã9ú_‡@ �þ��`p(Dÿ‚�aH0ÿ†Áâ0h<V‰F£°ÈŒ: �Gáñ¨´!'ƒË!3œ¾•ƦQˆ¤ºo=Î(h„’U ħsˆ}]@ Eæs¸ü6WI§UéÕ ÅnMAƒR'9¥^«®Çæ–‹6µ%¶Flv $þ=¡Ã¢IE‹=±Ì(ÑY<¶ñ2„U°s=¯n´Xnð¬}Ç„”Êc×ëÎ 1iÄ˲ÙhÅ6k%¹Ì"•)²s‹ÄX*–˜¾/+ ¿Kã¸Ý¦Oq9ÏDñ²*þKù}?!À³ þh®sú—O©Õëuûž×o¹ÝïwüÉåótZ®GII¡x½ß�0 ó¤¯êlº|ÿÚ—Á%«zr‹3Jú|‘°é{ÁÀmì›5Ë’„º$ëÃÉ2í’ªÓ¯pC^·(¨Ú¥�,É»~Õ­k2‹«ÊŒI µ‘d^é-­âþï1Ü>ß'ñBijÇP m#l*ÂÅ0DÂ’D ÆŠƒrʬKjJª)mÙ 8m”Þ@ â§#§ªBá(ÃR*ËA0üÉÇŒ[Nª$1ã;®K¬ÊFÓD¬Û1*L‡%S²œÇ® +V®E¥1ɸ£ÇTbÈâ+ ¸Å+ªôÅ §éüžçÉöIŒˆ¬…à8 <õ…cYVu¢¸ <MHQQtUDK­L7ÑúÓLŠÌ†Âq}?´t:8„ÂÕå$Ý(ìÄÅ,È Sg²Í¼F½(Qàà·“bºSî}اÚJÅM±ÊÔ>ZÌ«ZJ²¤ŒÖ?VÖÀ(”åß´’/ÈMê‰@[R}¢Ì˰eÈá¶-ລPµ–ÿÚwµ7ª¶IM2SIDÕYsÕq¶q ¦“&Öå#m¬­$%“OqõváF¶jÃx[7äUàÙÄW€çˆä6FÔt͉jæVØZé㶉ž$ÏdrîÂαJ…J}… Ø.æ9Õ®ã¹n{¦ë»nûÆó½oo(j>' Úx�À¤Ó;÷cOϲ·{J7ž‰X·õ-ªHÙ5'#Ú´b—‡g—GÂZì·j¦W$Ÿ–G,u€¬·ùœ 51=íHKm¡hÎ+E©×¾î#Æ´R¤àôØ6çÞS—Q’?œFGÐc=þ¹R³Ç7NGqŒÂÝå|··FÒ_'É{2•ïª]7M ]ò×_Ñ.”ÏØ<‹¡È^´ƒEt?vt_z¿}K û,·6ñRcÆ6'QwÀ?Gøýƒð°$…ho Œ 6ùa#:Àh4«“H¾ 3n(Ñ (äbtÓS,R%Í…h\ÆÌCfB™e.¢p`C·bŒ¤¾8¥Æl‰Q6¨a1Àb0gŠˆcgÞ CÖ \ó™#&Ec<E‰Â:~ ý­8x^…˜ÒÃ$oÕúDÊêÊS`Aªm‚9b˜¶£‚9?¯°Ì´äö…«]v $½;àñÐK¸}fµfRé$T‘òM»¦Ê³Íì PÍ%M)^ˆPŒ"eÜ©±ç($Z2eÙž•tèÑå!ca2&�¯ T™beý5–uØÍ%ÌGrDòG0ÉûfDŠ2 =§L¢$>Ðû`p Œ üa$Û›“voMùÁ8gxAÔEŽÑè=€ �r]Kˆtg&"A{~'”òjÁ àŠ­œ¤õ?ä0KÑË¿XicŒx Ê±9�uŸE Q®>Oõ(î:­1œ¨§;,Ó¹[kJ1¢À'úŸÚ½¡RÂ0¹Xÿèk¡©çB©ñ*^¬˜}R&Ɔ@ÎÔüCióZ.Y‘H]„Ê¡™ùÓäv•äÌ6}ÆjÔz L£Qµ¨Êq_¸õttõ2NÑ Y¦€€ ƒa„ -8ë•s<Àl4ˆVÎ`R+BRÐöŠ:š¬Ú&bs”Ë¡—Ç™S0ëîJÑé2Ï"E.ì A±µÄXõFÝ=i‰,Ù$:…, wQ&±:úqIâSé´×HÈÏšû L4qä˜þp¤œ |ŽM¡Ç4ºœŒÂž,=„¼:QmÉdTh65MFW à €æç-Û–€š*™’mëÓ§ÞâårH7VMçUä´Î©»7£QÚΩ–�nkÛut-HkUxÕíò‡Ÿèésï‚+P5Š$™ÿp˜zw‘ÑZ(Ž›�^mNÕK¢>ØüM¶lMªéˆq#Ę—bs®Ȩ£<kªÕ_LÚm¹=NÌwñRÝdµ8êŠTW/Ž]Í|´n!½Šr¡înI•QÊÕx!*%/·´&ð໺_üor¯æ`YÊIsjƒ´ö^ß¡ÆoJo¯¿Oó3)›ŒäT-@·‹ëU8^ÇåÌð˵PÆ2¦¤˜ã¥Ð»qÍíךë Í?P³FG ù,íÖY$.]/¢ì¾ª0Ñv±ÈÂKG¤Ò @ @è„£WjèL!,6tD£ZJÌŸí•A“òö¼ÅŽËpÁÖÔoCKBçé\Îi)¥š‹ŽëZÛŠ†4"PÃãQé5åÏl€Õ%¸ãŸäDÎÛ2k�Ì[ŠÔî–.º{K¹Ÿ°ÜìúǹZ4k¶5´¸’WÖ°©öL�–¬¶ø1D*¶â¬Æ¿TbK5æÃAxttÙ¹íÛÅ1«´Û俬 Àå3%߀¹_»km¶9ÜÆý V±‘'ª›Þ 0_5Ô™°ƒÊ¿m2{4½õÎËô´™6 qók{nÁ«Wôþ¡Ôz—Sꇀi1ΔÀ$ÓžŽë2æ™Ò/Šäò*jù÷Ò”½F)ärÇs”÷‚P5WÔˆ³KÍcéÀ¯¶É;va »©÷hûc9xÎÌô †Ô©íh®"\v>~¯&Þ ×N)$—¬9ýw¦Á0¯+äÚWOB¶Íf'«jì4Æ(ïY½zÔîn&ÌîJÍ!3lc—Çå®Å4þŠËÛ'…-Í™wIÀŒ‰LxûñÆ5˜¦æP*9øö.—]G8»²RÄÒëêöÒaêqµ-l ሚãÕT$A¨BÉ ÈÐå+¥z,îwÕw}üR^[Úoš!#% _–c·"3ù;«-»IÄ$Ñ)½:3­ÚJ´ò•7á~7�Ü­êéž¡{»ñ<8Ú‹Ry- ¾b:¯ØÌ£êªòX¸‚N·pÖ‘í¸sŽ‘)oš œrž)I¥Kq$¢Æ4#.;iГ):³Ë¶<{\úû&Z“¤b$7º¼8â!>it6ÙÏú+ã¢Ò(¼5¶‹sp²CA"Y‡Aˆ™ä$#Ø«^5ûl,ÒÝ(¹K¤ázAsѶ«2»ã2  0à &»¦¿\ED\FDlG&ðdàp‚0D„Ë®€C'2ú¶áг8ª”:C뇿™èÑÙ“â-£rEÅ2b¿Ò´‹N)ÔY¾³GŠÅEý4Ó´B$V³27¼ò ±²ÁžäF"øE°¬ªû×°Ö®Ñÿ”òó‹´c‘1ô®ËÊ#:Ã+…6]<dªœ[BúÏRë)«8®@üEË[®ñ”C{p‹#)Æ!Õ–û’B ëÄÖ.£ižšð8ľ3r®üvÇLYCÓOšÊ¥È<{¸! ­#4¨�‡ |‡Êµ�xVh0LCÄ|˜ XAÆ *3“â$YŸŠÎÂrì¨þ*²£r?ê§™¿Ê2B»’*ª„4;`;Ì)û*0ªÅö;A»ô 58òUÃK-6 ‡¸H½” ÉAdjY©@£[:n£T¬Û%+�E,,Ã Š»¹Ç1x­zÒŠÌ›»Â27$}Á2Í$ó‘¹¼ÉÙ‹²©õ“jõŒ)Ëë˜5ʎɬÀÀTÇIôM)ìb²ë"Ãé¤ œ>)™¡;‚TQs´[±EìгÑ5ëB´H•(ä0ð>ƒ\Í|ØMŒÙM˜è†LI@EÈ€C¯šs·Ì-r/ |j/J€<Ù;ŠS;’ǰKÌ<Œá0ßBÁ9ÆóÄœ™ÔÇ”YŠ p˹ØðšÄó/+â÷¿úH¿šäÇZ~ÊÌä8\iÅ#ÔF†ËáüÂkÝJ4½Ê,ËS²Å‰×¨Ä3°iÏ”Tkß”ù1ÔªGA@"ÇŠ.ô™9,ô uKDL·j3¥‘;½¡7>ˆ?Û&%kCˆãÇ)K¹Ò;!ýŸ³˜¸Â–ªÂŸ£ôV¢ê…8å¤ô›€u‡˜z¸Kƒ�+M¥#Ü„’Åô£—{nª4Ÿ#¤¡Ïùl±´+À½-pàEÌ%ǤîH]»Ã|A’òŽ,q>Œm‘ꯘêwO²Ì²F‘%J{Ó2sØ®TnÏñë"ËüAÅR˜ëËûÐR‘9S^ÄšO~ž[”žì_PT(EŠRò‰=)Î)ÛšF2û«ã;Rq©²{Ó»4ÑÓÜxRãLÍúRE­LË4QÇÙy<Ô!¢„ü­e[+Ã…%¥ôñÏéjS€À`ƒä×R=cV=dVKáPƒÀT…˜Mød:믄k¹±Ž'ÜrŸtÔAÌœ4dýÀth¸:å¶ù:2ðºKèÀ,÷;3!0±B£)$<T;È-yxÎË)Bc×%³;ªÃ= ô…ž™™×Á)X?9©àOkà‘4{=ò)<Á­¼œ«T¢Q¤t¯Ð:9W%4°#¿·]&Ÿ¹p‘5X­Ø¾ÍôQLQ‘kC¬MGñN“z)Añ㡚O¬ ˆ#y“ëå¹³€N|#¾\¯ÂÛv¦#„¼Ü/>c80s &„ºS=+GùÍ9€~pD¨&ƒ ÖU° p ƒ`AU…E£2QÌZÊ0 ›ÊAò»‚ƒ«ÃÚ}G<¢WŠïJ\_Ñéªb »:“LšéUÍtTE *=›²]M2Œ¦»\o½4Ûiż[0=RP)CtUév²„†ÊYìê—¥3[ÑÌ"u ¡JžÄíŸÒúõ8í0³ iÉl™DÂ(Yæ9Il3|¢¤Š~X:Ãͪ¯ 2¼ƒB<ÕY»á#E.OêLP)Ö;%¦4…Ç»türMS€½aƒe°ß ñ_ò˜?…h[h[†�€XËþ’È”4å;,žKMzW3(W=·rVÃ4¬±Ó­ËÀ4·E*àÅ×6ç@ÜÁ”wOížT¹¶be¢dSJ\ ºÄZk '¼m,}—ôàÐsº¥ÂT‡Ç1ŒRšʽÔTì ÞÔåYZ‡¾öË”2øé³ù.%\º3¸*„´bW{hÔ$ø/MPÚªÚ]SÎÔBà0¥—>™TKÝZ„·}x¹|–Å3¹˜W£ûCz JeéP‡°}ÐKR -À_-dÛ²Ú„QbDìTl]Ì|Ù¤@Ú¢ÓñœÆÍ4q=ÏôÇ;DÐÆéµ2ÅæF<¼ÊÛ5Vׯ%ÕÅ[zïÐò®Ÿ»þ®¾CÌ$W-t½\„–b–¥EPÉ|£ÌÛ‰fQ£½3s— ʽ³xÕnQ²bJaÖJGÅ7=ãIF]<Zc³Â&f®)±åRTä~GÎh°<êQ£¾Úª$’©-*ƳÄDˆ´žù=7²Ã>k¤›X €ÀaÝðc¦zg®{g¸èƒèV…¨G…À`€€_}%ÄÜ«¶ã ߃º”¡TÓS±^< 3:Rªf*4©'†2‰(\ 1¦ˆPÃ#d³›N5éÛÅ•Clü¢Ìº”VÝ6GÜOEÂ2hÉ×y¤Ý“ªmÃÐeèÞ*Sô˜žB3}uZŽ*Ì+ÃÁc¸™ë\ázU6TœAªÆXû¶¥†Ã’ò=UÖ è-þ6p¾rÍêäç¹UA;Ú0ãÓÄé¾ÜT½iä?Cø °˜|ÀaÐ8€î|M±„ æ{ÝöK®‘c¹¾„j© Ò]±NaÒ>ÝbÁº‘žñÿZ{ºf^×[ƶZ ÊEení:ÓE£ø^…o¾eåÞŽÅTòéÅ}{E¹>W%Eãõ€š3hIΊÂÊîNû]Fm…¬¶¹ú%;Êlý¬.ãÚEÀ| Gí;¾k†Ù2éŒRÖß6у¦例gG<à³FâæËë G?‰/æþ™"3Ú`¶ÝÕùÊJWAI¦mªç+.ÔUÎoÌ*М{MK Fwçˆ6ìpo_;…HX„ ^ �XéNUãjë4´Ï®R™!¦ÛÙá²f¥í}oÔÿìlAÎ\²b ’iœèb³CPW‡YBØÛ#®\]ÎêKÎóÙTÃ!bD³ÈLÄÂõrªÎT¶4„bb`ä´NN­E;Ocò¾É.%ãÔ iBإ湟&T‡ð¾Q†û×ó"LE|Cb%Ñ®Q Þ¬MM×ÿò:sn^ ˜\ëqs•Ë.Ioy–ê ̆šc`}˜ˆK‚ø+—>ð|E€Ø6„CëLS¦ 4–ÞÖ›¦>,sË¢Ÿ£zÞ¶f4}‹êQÔÑTû ´F X þpø–KÁ®ÅQ=Ž‹ßÍ<]Ñšn³Ã|k<²û"MŽX­«vAÈ'Ö&uY|nƒÃM"[×/]C‚y¾Iù\d9;úÕ¶’,_ãäRHèŸÄ ¹NÙ¹EÕžô=½Ó쇓‡jçBu²C–ÅvHËz÷Cж,aåŽÃ_jx+ËE—P?­’#ñp¼*@Äô¶€îh`ƒØ7t§xߎDpN�cƒØV… ™qJ’#M¾(`_²¯=ÂâÞ£.4ã÷ªÜF”»l<·su†¾üˆÎg=·¾ìã}áú‡õå·]L¶0Dt^^MÛÏ01ÝGŽ×/dç)ìHñsM'-Wóc!ÇÓ£ÝnH8‘ÅYÚè>«àB¦Ã:ÔxwOaSÁ?¶Gå?bb–ÑÆeïƒÁÅV[Hú}/Ó}”‰Ô5ÞÀ‚@y‡˜>`$ƒð(OŽº¨wL1¿g+*Ær©8Ûñ6qw™>Sa"_m—¦Ø²ÖÜÃ7xYß•M+³åNïáä¹½‹™sJvœ¼Ýú.qó£òÜóä®Ñ¼©yóÏe{г~Ìýq¼{ÐðÔP­ˆsîæ¬ å•>@§¢‰#¶ Húx)îõÙlj›åUÝî²oߢ q˜®CÌö°iÞ¥Ò¬r¦pˆ���Á oðü„€ah|& ‰ÁàqX¼fŠA¢P(Œ !G#Rhüuÿ!…Ç!¨„b]•¢’9”² ˜D£±™¢%6†Dftô¦? ‚Î ôÙ|vw0¢Å Õ:lfQ+’Õjõ¨µz/?|¾ß‚€Øa„z7F­Öû…Æåsº]n×{Åæõ{¾_o×üƒÂapØ|F'p ÑÍçS° Éá»ý ãbç3r &]kq‹–zÝ—•P41|Õj³°f)UÌÄ’}UªH"rJ j«PšIªzŒîÃucäÕ§r~ú¹Ü[ôò(O9Xåè©rå"eßìun=Þ¤—űçX;ÞÚ/›{ÊìSàîG³A çÜ+Îz•¿ZÆà¤Íbj‰¨¨¢¢Û%ï¬Î¦ï£þé)Éú”â­Ðœò@®Ëa)Šcƒ ·Ïâk «9 {ʰºLÛÂúÆô-¾0‚ºÎ2ñ{ŽŠÁˆjǤPzYÀÔæ7rc’²Ÿ€è$”Ã8ƒ ».ËÒüÀƒpþô"Éë×ÂQ ;AQ»H×µ:ß 5ð‚«1 ^ü½®kÀ’sº»Cs…®Š$W"PéJ"Òºt³4Q*¥ÅÑRÞAÍ£}4%°O¡TŒûSÈ‘CB¡°ê{¶qƒþ–£qmG9Ï’-Vô'ˈϨϬfíN±š,1¬Ö£ºÓÚ‡�?´r´Ó·-úx¬¶4 ÎÚBö­±e¹¶C²¬È*½nXu>¨ÕQ´›ÎïÜ' ¥íPªR4›8ÙNõ†¯×oÔw~Ãs…(’ÎsÓ>ŸT4ÌþõWÔTþëÙ);ÄçO8ÍÖÕ5b) Ð.`C|ÔåY^Y–åÙ~a˜æYžhºä p‡k&b—K}6Ò…ñ‡8ð]S Ô 4÷€èô$ ¦Ê]Œû;í#ÜôÝ=WkÜ'LES55Išm¹ˆÑV¾Œ=öí%ê“MíÆrºÐ5¼2¹Ýt}yKQW¥c·Ñ{¦7†íÏK‰Ya ’Ý::ýʹ51ƒC1ü=­kQŽïŸÒî_DªjÅ\òuÊsñeËÍ\-›¿¸N_h¤^Ñ- êáu]¸Ýíí™õ|^0 !ÚSø×mpM¸WžþÞ2{0yŸÈH ¦Pü;æ¿ÉšƒcpýÆuÒVõNU›;å5 —ˆ¨1EóëÛ—AÍéù87&óV#Rbé +BTÚJKü9Ž%i®ò �ˆIø+êЦ/Cn| º]êÙS•$ΫàŠÒ2Ʊ%”et‹ÒJ·Wí]<³ÈóAk­mÉ/Õ:´É‰ûVϵ甤†oJä<Íø§´5\èÝ»eˆKñ¨ X á’HO <ÍDv²ZCðjkEµâ¶°ZÊ>0¡;“®ÿPbH }%ÔÜä <¥ A§Œ‹à£Ž1ùKCCâ¹ êy)¼ØÕ´xeNÎõ4Æ–÷!Íü<p$‰¹ø^bâ9(Kªœb@È€È!í”>YU*åd­•Ò¾XKd[ÁÀ‚c|và�Àï\ѳž÷è\Ë^Œ¨á†A×ü#˜Èá>>©ÚÑ$guó.-ÌJuÈñøZò0HçèÛiÂD¨ð¹Î ÈyUBšjf:œ•Œªœùœ³É#ÇU`WPlx+xÕ¸ðì ì˜>ˆJN°^dk+ ²Á—Nþâ”ã#s Î#,ÅΡ½^ëíR8Õ�v–…sHñ‹:ȬŠ&™b_(E|Rä>«i+ ›“5ËMs5Zo^4 Ö>·ôÚй!ŒsöwCB6£ $Μô²JŸˆ¿j3C5¨=È‘ø?D¸] L)gXë!sLaùXÔȪ~gÔÚQî?­J.ÿ鼘xIp¨zïVóixfýýUˆ~½Øƒ€ˆºÇë\§ чŠ>aÐvšþÚUU}f•¬9µŽ€g‹—pâh°”Û)öRM>ÌEYE“QI5EÝ»E¸üU|XcµJÈhé^#´°*£I7ƒ4ߌ2 4aHEwkhür5tÖÈ®êdbŒÐ¦åÂ7»Ùè„致ŽuXbål]œ¹ö¦Ñcõ"¥épõ:^ÛÞ¡í}î¾7Xë7“`È€Ô¦A²à€ð&ÀØÅ‚Àø!`ò€€Dk˜u»Drk¹©Úé(‰ò}×ÀàOµÆýÑ;¢§8^εg8¡lœav§"Îö ã[Åz;k1Õk‚üé­sQ/áá¹+ê*n« *v$*‚³¢9ÁŽîä‰ÎÀ˜eÚ%Íu¾)Æ8Ùä”WˆyjÃÚ÷J妗µ¹’x]ëŤLI®×âg=‰V¤;R¬€°H”¬­Lç½gÍݧåz¼aqÑ¢ÔØf¿*-»zm./Â9¯7ãsøÑO&2!¥Ñ‡«]ˆ:/ÁþÒ÷؇‡“Û€ŠP΀x 8#X>@8ÃíÊ`3Iµe�t€1¹¾Æd']N•Ž½Ðªb@±«Cvë–@»ëþeSCoXó¶6˜Ç*Ún•$$&niKåÉ@±]çËð[jÓ!$ÕÚØîŒ Ýµ–T¼ÌmÊ)|¬FiߘÍm¡«qnn'×6¿Qg}Ф‘¼¸ÅòémBôJ‘®Ù»~Z+bÝ+h¦v[]ì^êa®1MneÿºÚ[amë¹f«6h›´Oùxü¬U *¦kÞ÷æÐd«« abG�#à~¦G)ƒÈqÖ=?¨u¥Ôú£*âÐ\ˆÑr/�Nh÷¡´>÷‰^W%ÎøéÌ ¬ýb¸Sø¿M3°iØ©Åãó&¢lŽ3I³ÃnœÌ<õsu U‰P‹°aå¬8$�¶š:xuÇ:º†ƒôÎV4x›®¹´ÃAìö‘ªxU¼6òË¿_¬̹a…¡–jS(A aµØrmÙAºŠ¶‰r’'K?{*%Ë1ÐCvr†E>s'½úÎæ¾’§ÝÛ”¤C§¤›`›Ê¤CcíR±Dî rv;Þ¶úo«ótV¶LsÒ»¤³Ä§¥¿··*u]Ä #x¡E%ŽT AæaX @Î `\®«D¼Ömj§ŽÌ([-žƒNôELÒÚod¡® +f§¬&®Ë†:XQŽDù¦ú³-àk 8p¸…*æË.€“'ÆÏë×+ؼGbßÔ‹Mô‰o€s<[­ÜMnv*èÆ@ËdÔôæÊŽZªœÊ‹ÌÛë<¥¦ôlbÒ 2(G¦ÊNné†äÇ@¦G ˜°8M/å,.›È”ÜÍÒóf<òÏ.iE(˰ºgé>ÊË:4í�™¤ìOÃD“ªhÄ‚d:/rÎð³Ef’É Ð·MÊÃ$¤Kú›q3Q7‘:À¡°áÐ!`�w/ðqV°Ï{%&sg¯‡p‘+~œQ²Hz©PF±éµ¯úFI’®ï² hP©nÕÄ(ð@j+XßeØ^Cª  ê7cŽÑFˆ±K¤µ…<W&ž¹‡η"ÞÆÛP°}J^?PôîL»È`¾-âž-`Nh¹œ`ȵ ‡˜é6ƒeyPtPÆ0¶-‹/§ ©(zŒJÆoF†ÍŒ äoX`«FM°²6J?pˆÒÐ÷ Íül+Æbe¬|üãÇìÍøáü€*¡„�ëÒn/°Ϩ*èOÎTÇ0%,!Ëc.®ZÇïôÆò]¨–°Î6ö ’ˆ<æ¥&†æ°÷Æ8Ç/È$w…™ɨ¾òDÅšÍéô쪲ƒÂæíãÍÓÒlÎçï†ýçš:’¼_Gé§Œ£ª ÊðÚ82Ž€G‚ƒž[‚G(QÀx‘Ô³Hô±�¼¤-’]i<X‰@tK ³Ï Û¯ð½ŠòŸ<§«°tÇÚvLQ¬ø¥ÌØ·ÆãLì0´²Ëjîþœ’óï¦ÊjŽJvò²Ií¸ ¯�ü¤§˜ˆÈ’wώˉ –ˆ‰-P¡ÇäÆÃDAö®–�ðéÒq<“Ë<ÓÏ=¡Â@ˆa" �Æ"ê ^¢u#Ëɘªh„ýLÑŠ$’ò§>‰ÊucøûhQ"æ«9‹ 2s.8¥#?‰þ]òNzDìWB¼ËäÊ£´ÑÏãÇ$$#oaåž~êéÐÀA†ýÈO(VhJîk¡7/c ÉêÖÈëK3ÈHÊ›ˆ†„K0¸%ÔÇ£ ñ¨fSËS/Ò†Ò±Ðo¯Èø¨‰ ‡æO ˜u¯+ôO“0ìÐtÊqTçžýJ2Ø%zÈjxÉɳ%.qñ3%þÍ €€1ƒ9E` ¤¤€¶ ¬ i=5 `8�öXí–÷Q" ®ÄR¤4g KrŒ+êã±^è&ó"”îÃèulʾ Q°šÞRäPD6EŠïi%Gã5\§%æc/HµcT‘m ôQMëŸHŒÔ¼e6Å’v>E÷Tž³LÄIDá¯WoêE•‘AÏ�DÕCO ha(Rþ­&ÊL/Ql&¡Ke!*8˜(gO â·ï5#¨Hô(ÈŦ¨ªÅZ¶Œø¢Då i©LæHªÐêñ;G Œì(@ŠwYi4€d9+«1ð öRË kì¹k⿉L�åPÖ/c3cP=aÄ¡�è ,àFðIðnµIï¦NÉ+@5$èè§té-õ>¼æ°~…gx‚RV¯BotŒå„lµ4õë[W\ 3V#J•QZ2Ôp%ToËKK¦’vÙmÛk#ØÆ²\Ç\ɰ~Ër,kF9Ž|ÛV›ŠØ©¶Ð/R‰\ãSõ¾a¶ìšýo÷3(_v7µûaïü‰Ð'ÊÞçðÊ�àáî @d!@ @ÅcsÌ€ãQPN“n‰[Öã/´>z¯¨Ÿ �Ø×h–å‚§?Ó²¶±ì*õ›2’KjþÊ)Z´ß´ÚÈóH÷ÔŽÎÉ~ƒëhÇÛúÏFÉÅLÿÔ$9»?➌wTÊ (ý–Q3!òV~he¢s "tiPƒW´I^uÞåQÐÞnP¹²‹g±,þõ·VóK~ТW¯…2«V=m”Ö÷&lT:s"ƒ£%C‡E'*3…6/îÔiDø®×æ+hÈ$ys33? êgj?5ŠÝnÌ¡/fqQŽj5ÛEt ù#Ð úA¤�4!‚ö-sx‡ˆ˜‹ˆÉUc¶>à1P·ÆqÎ`ËRØŸuã\ O2©¬ô ›w%O0ø^\­$¯'`n<àn"zÍ:M¸Å·ÑHfy)‹ŒóMÃÛ|¯Åetm4Kye–š.Yn®BDÑôžJBÄ ü¤r–7xsW€ 9MŽNVŠªåÂ>ת”ùØÄ‡ 1eÈV¢ûÕ«{¯Ã§yeÌõ3ÒKÕGoú¯ë²V}7Õ-yó9^êò§Œ™~÷òÇÏ^ÈfUC͇–—±gTËm¦§Õ!‘•¬×Da0“P­¥ú$að,ÀF{Á> $²�1ˆñ5s ôY¨9wì^F7Ú˜I*¶ìÌtòï.Ò›LϰYtr8ŠI»žfªõ‘rúÍ)(Õ‘g‚tˆ pª¦ò®z™ÑxHÑ~:ž…Ñ5™ùF6‰ÏùZô #Dy9ìZ/iôPÅÔƒNuSe‘Xt&åTåz#MÎ4óÉÉ|N$°nntýq¼Þ˜Ë™íE>°š„fйÒ6¯ Œå­`(¥>ò¦Ý†zåT²ÒÔ,ö³MÀhжKERël*óNR&Í¢1šÁödx~àç›úß®ã®C c ˆd@~°† öÞô=TKm‘Ó÷wÖËpFÎRű*Ⱦ·SÍ*«™¤éÒ±iª†÷ߤl3{—„Hß”å6Ìö—[r¿™7×éï*}lKO–¯kºSY”o³ö’Ó «t-¸°¹²ðXQ ‰X2ái:L§(¦ððÞßy uÚqa5$ÄñMê†}B‘­h;„¼ ù“Ž AÎ!âàÔ `”À]®n¦ â*=`j}z¤c¨óV ânq£¾A³þ“84ÐÙ4ÌṁyXò:"Îx=ñ[„—ªNe¥{iº! Œí. Œ{Yæ@Œõž¡W!^–² ãÇÜ·Lxº3c¹ÒÊ£Žõé ; ®aäó-®ÓôËnct§±µVÙ˜êWDM¥‰úܹ”Ägd© ƒz¡¢ñ“?iÍŽ°HŸ lª´ùnìÆÖê¢qëe|ò“iºycC+|ð!MfÞÅpfœ/Ò¢ïóÆü!- BI1¥¥—9ãT›nÙÍ´ ŠI*ûÏB¿†Jàé½}ÑÑ¡–ÀA€$` u®ç¨Ó²+“¨ºJÊL‹µ;Æ{*­!´½Ÿ£l ƒ˜.Êv¸­.……àì‘øm Š<¥Ý?³¸ 9¯T�81¨›ˆZ5t°¬w¢VµëéÙK-K@ó”©D¨a¹\·`ÉUŠ·³‹‚µwv`œ©¥†Úæú>‰(ž3kÁ¬Qƒ…»WõX˜¢‡Ì+–8ÁUOãͱ.ŸÏS“í6y×Ùí¡¡tM•o‚&$:m¬ÌÄŽ¿Uýmbš$ˆô@°Àn`ª À�†}ÑÌ  ä`×yeÇ ôîhôV¦ÕúðëKTqÜÆª®§Ó]Â숡+/¡]ªGÍ!ÚÐ:æ‘§mÛ?þ^xž…ønTxÍðŒºx`6oÇP õ©jS ¤™‹E<”áõ]Žî3}s.]ŽxS3Zºì”;iòXZ$¿]sÏüá·Š‚Ç-« z\Eo.» 9MܳÍà Ÿ.­Áªü Ïx°Y…‘¼¦˜ŒSîÌèÃWÕ OÔ*놷3¨ÅК3Dw Ükø!€ÝåkößoPÁíä�ìaV¡QL 6rIß]ýÝIö‘á^·e¦Vòp>ÎÍÅùÇEW <þ¡â?§è5Èja¥··ÊuæÂœx)6tƒÊÉŠÓ÷“ï%XEêZ"Æ_èSèxø6¢���@÷ø ?À0˜d> „AàðÐ …B ‘X\F!‰ÆãPHL*+ƒI£1¹t?’G&1Ù|¾1,ˆÍæpÙ¼a ‡Ng“9”~AœEæ õ….ŠNâÒØ•&%9©Ò¨õ¹´Žiת3Št6¡(Ùa–ü¦±/¸Î%Òz•Ó2±Lm‘¹Ô®¥&²Q®°»µ2ÛT¾^ OçóýÀ‰E�@:._1™Ífó™ÜöA¡ÑQC§#ÄÂí@›à ±|<jWvˆÇ­p9µ?[%Ýk­U™F²ñD×[c²˜6Ó…‰Ùð0Ö NÒ³ ÛÛê¼|dúgÊ£Ô¥;^v*II¡ØvØÙ '‹ú�8ý÷bkEÄà)yäæUó¨ðÀéb¾ú¨®Ã`š%ª{b•0¯nü£ŒBÖꪊÄÁ7ŽóÀà¯íòø7­ªO©ÎkZ´*28­BN³á¬é è,«ô`èµ ËrÖ®IC�ò¶qêèíAëҸ¨ÊÄ@qÌ^ÞÃMZï!»póé&Á°Œg È‘s©ªëËTýÊn$£Ä #» >+»ð㾌½ÇèÛÝ3,Ð*½$(OTÖ ®+‹»JLÚæËµì"yŸ'Ùøƒ@Á€;­'JR´µ/LS4Õ7NS´õ?PT5GRTD9l[űj @\âž­ Ý ÈóÛ?VŽÛU ªÏ,ÀÔCp{õ7WËÿ0­‘ã‘«vL)$ÍJ[šñ×ö;Ó*¶3ŠÖH+Ü�ÝVsÒÇF úJš¸²ÅÑ(:oðÅ®‘µÄáH ê¢´Ý ”}Þ)<ö+òew @ÑÔÎé'ëÒç(Šž¦ÓD¥VïÌë^Hn#xX ºÕâ6Þâ2Eq¿R•ŠÉ–dÃ×ø…|åAÛ2 HK•Á”ËVê-6ËòÅ8ÀòTLæE*å÷<;Ð]ÍY7÷ó›J*Õ!¾DÚ±/sŽJ "à †U.×¶m´ð:9Žð¤‘o¾ò#b–ô ®¹ôŠåÉõÂk‡/7üI®1Ž •›:Æ^缑+@¹Þ ëu?úEºýÖ ¶üÎFò~on³„‹6Å“=}¯8’ëj¼-ÃÑD÷Z›»êö5d9 G Ú]=BO;þµYó„eà³Ô%ïƒ÷^o=Mk-—±àueß{™_xû<&ÁpÙ<³£ïï4dOÅ<X¿¿4¶ÊÖõÞ©¿Š4zUË=ƒø´RŠQ€eG‡`ìÛ t‚F A8)`´ƒˆA‹Af"Åȸ�$%⸠]“RFêÝm·BÆ’Ý2ÐìCð“N²Í8hiצ“`×ã­jNÌå4·¼‚˜ã¼j¨ˆÂ¢Þ¢Š5omÚ,gÊÑ390¹…™†æ—*Yg§iª:´ž’ákËa¨Æ Åè³�ßafE©¢;ŰDÔ3»jÎa‡Ç4Æ|[Ég‰JÝo¹•ðšRú,í9a¡áÖ¹=V-)5µ¤ïãª+Kü–1—æ\9Ê‘«:9¦D¿'Å?ÕÅI¢Üq£TxPêΧòàçÞRsîÁ#çtBG÷á±TÃ\™%M7ä°\ý à Ä5ý™Áow-‚"³óã:#Œæ¦9».Ùlx‘Ü̼’2ÏgI]‘O9¼Ê·b|VD$wím#¹æé¼j ‰:¥ìn$œŸ0ëµÔ¾ùbõcDxHå&ͳ>BGñä4oMé‡ÚøŸÂœZ³]@Ðé«8+ÿP mè«•Þé”D¢[‘=7¥ÅpÕ`••/4PúZJZo:0äJt–䄱u49Þ„ᯇ/…#UBQ"4Dì4ºÎ„[,âl|]/•-$hž»`8ü`¤ ¡€T”Ê®ƹW:é]kµw‚PlYÁp.�x tš€¼*DØjcMk•Âv2¸ÒjÔkïâ”ÏDÓP¥Ëìf¤]:0ʺí*<Ú[%ꛇ Çßec|kö?HhŠžX°yOF£P2©eŠe@+•§5FrPå2pŽ:ª:ÉäÜéU«bA‚)äýé¶·¶ÚÚ®ø¥8£²lJ”I©—ƒù@™ ‹†”9j/DÁŸmÚ;GXcá±4¢ò‚;Ó8RÝÞ=cºQrÙD¦°eݽϮݷéo<æD^ô梡֎lnF¸kjZôïTR±Cä{…Pd DÐ] 5ãW@8»­“•‰2SEäéa¦*À ~–>,b¨d›Ô¢’’3á…%ãý²™Ê¸Çïe»™æýwc …‹"`N®¹~ÈHà™"”ˆ'ïÚ›Ú¨fxš2zk²5:ùžðèÔ·Œ*âªHýeÎ5ÇïÛã‰ef/VpŒ©Ä´å|dÒT€ZÆÍøÌÖhëÉn‘‡73™7­P~X!ú0–ô•í®^f÷†|<HŒÀ_»þFN&zI¢§$¤?kpÝy²Âd>ÕiU°:ÀÜG­u¶·×ç]kµ4 …¥{ƒà@Â9ÏMl°¶ÒŠ/ÙþŒ&N´m5ú¸üRÞ)ÒmÍ©¾”uœWÐ(Í h}8ÿubgW¸±ß¬“B­?}FvúÒÌ[ŸY%¬ÖܾÒíåj)ÔrAå¨îÍ-vkVZɱZv­]¬=zÉks*vTªŸr¬Eñ?)Ä{D%rØf4â#$t  !fÅ¥©cÝÊaéÈÑßYuù¶A©/çwCÎ]]Ze|ŒÂkøIéŽ�À à¾�&:ó©6°:5¢ƒ|èn�¼ˆ˜÷K(uÆç5Ù,×o¤¦ª1²-»eÍ% †ü0X8ËÈ,ÿªË“£˜î@±ÚÏœäÎh¬¥Í.úàóšÏWûij•w+­¨•uóH€f4LºÕf3›ºCX\¾Ë~F7µ³‚-…²PÒör¨k•ýÍ‘-’vF•ôe‚¹ø·ØiY«¦ÿ`g—0Œó Åo5‡Éƒ3EååàË$ŸŽ3sT2è Òñ¿Çò{tµœŠ˜Ä°d{ÎL Ðo·A'¾RÅŸ‡?ÝêÑú>Hu·«õ?éý·÷ÿåPW¡.…¸¡ #ké j#ù§²’Jœëw£Ö-Š/¯+×)›ÅšÓˆ@Sñ¥»~b±"c¹·ðê3›æŽ‰1¨’«‘Áu®êr¥ƒ¸§:èûG@Yã:ÛÓ'1™{· SSãå»Ñ¿‘;—"j8+"²™cÒëB1¡÷­Ú÷—Ó6(ïÀòÀ»ž%À̶Àù!;¹Cz˜"KŠB $”0¼¬ "ø»»Ã{!4+'Z*3¡ƒÂÒÔ“гó„({¿2bÓ±X²‡Xy‡£¦+ ?ÔC”£ª””3¾ Í©C³J*D&¼,7D¡õŽË/ )“/RÓ>šXAûQ1©Ë#CÛÁIf•à–r(­;J'¤ÚÁ)Ÿ¥B)©JC61÷ ËŒ>2™Ò'ÓŽº ˜'k·Ajž'"ÊŸ9â·R¥Ã뱤r§ÃRðžÛ0œëÈ);Å'ª×B™[;ôÂ#Ý'z%(ùѧ š;{í"9c<)áA‹ß=3sÅzЋ“e7ëS.ƒ˜Æ3ûÄŠ¼ã4i¾G#uÅ}¢œ>Aó7­+Œ§ü%x´?{Y¼DHÔÈäŽÈóZ«ÐE…Ð[�‹aÁ9Á;ÏB²Æ¨›ò qd=„]–"ÜF)¾#Ð.;€>™ë<ÑGㆵöž{,»*7ãPDcÍÀ|£¡Ûñ®›œÚÊ:^D-·»Ùêl¯4L”žD´:74yË ÓK»AZ.1šÃÅzœãá2Ú¯$ „¥œY»r=‹:¨ó|7Ô,ÉlÃéo¬Œ9CU4°-t½,zœ¯Y+.³Î¡ÈÝ®Q]7ùzÅ©Æ7ÈßÁ±å´Øx°{:`2‚˜¬Í ž€ާ@��Â!PX;þˆBÀ8T%‹E!OøÄ&9†Ã£QŒ>'&†Hc‘hô²S"ŒÂå’¹<NC –Æ£°ét²15›Égð‰DúO1‹ÑéPˆ4Ê!0‘Ê#ñZŒv%8�ËgÓš½"Ÿ#®Ãdqšå·T§VlêdêOE¥LæÒX¤>‘f¢I,S©E>ab¦Ç­³kNMšÔî³L<Ê?j‚ÎfõéT]¼Ñã7¼-R‡}°dïqL…Æ¥d¬êhëÌû¹Òm›µ¾ÚÚ4ë^òïnÁßw“ˆ¾"˜Ìñ¬s[®ö—`äl8 &¶«%ÚÚ·6郛ß廳¾WdñÉ=]*5¯³Ô¨Î¦7j…Ï%ÍÁQ¨v¼tó¼Å¯N;,ó0‹#`«!KFÆÁŒÂÄ|‡ÐT ƒeøè;¿Ì5 Ãì=Ä EÄ‘,MÅLUÅ‘l]ÆŒeÅ$jX‘…Ñn R¾×²NÚ4¿²í‹¾¸¾ ûÖÜÈJt…1)��™;rk@Ú1pÀþI²;ù%5c|ëKŽ›âçJ“:®ùJò¢Æ ´3‹”ݵl˪îΪë¯9C®—7ÐQÉ+§ªÔ°R›g<Á³c²Ú½.K°Û¸TS1Il;8ü?nM&Ptšx Ô.Ó!74쌧L¢ªÌGQðë Ç®ÉUhßAl3ÖîHÔ¥<ÄÊtMæ?TlQBÃó¼72ËpÓÛR.–dûh¬gyêz(Ø%|iqÜ—-Í ƒ£°é%-4kÛGJ\¾ñº6E±1±Ï³šÎV ¢¿ÖN[JåÏ‹ó½y>•­)`´ŽãüÒWÝ’ûRx¥‹eOu*á!еdöÆÐK´Û£wd5Ú“#¹­0Î4Åa>Su“áKmBÜ.s¢ôÛ3UŒ7 ¯ë ’­do<×€Ê5 ×ÕØ10Tô W#•óJ¨V"÷Ͱ"Õa°ˆ¨×:fRÅk÷Å�âW.>U¶ëÜAæ«óÅM¤Šä¿[M3,3˜E7ëýÌ,Ÿ¨Ú¤†ó´® ª-÷TO9*ëFa¨9ò}ŸaH2 —ã˜ósõOUÕõo]×öeÙÄ!jXeÜvvFc<–U­mÒO~ùVY¢–áNžË-NÖsQT¹ì¯a랦cc1X]¬Ëš²Ë!p]ýpßW*&Ù²úM¦Áaä·¼——°›–q_øîÛQ¼_ƒ`Íq3Aû@E"àŒ»'PK±ç³×졌Lß&ô2ÇVC>Oªr¦•J÷ kÄIéèªÌ™QÈKme² ¢[™6…Œ±a'6 É_Û›SOœÛ%è Q×t-Æ|ÿ….fÖ"\0 @á1ÆÆ¢]a¬VÂÒF>‡àýÀp ÀÌ€`Ò2FTb—S@gGA-E¦ñ9ikæìÖ*5¤|Ï“boã=U|µNzšoì–Aw¶þM¢gdpP´7Eô³ž#‡±N'žTxá|n>Šå æ� 3z?F-§¶uuŠÑ¦‡ !0¶ã“é|1ʯh7‰IÔ| ‰“Æé&Oß z쑺¯·ØáÜÌ‘‚qa¿‡ù[{Imâ$ÂùžÊ£J,³9¼Í¨dpW„ßW rC"ÌÁcÃc—mõF@È 7˜\HAMúbăÜ{&;ŽÌ¶Lf,õƒB:RªY6†÷8áÔ‹„n|~:'Hé£5¢TNŠQZ-EèÅCŽØX»‘l�P )“¼ÏЗ֧"#NÁ¿N9dä\¹î¥ðucÃzf›UJ&v'¶ENeclò_äÉ­À¯)ÉÅ??¯))%çÔÖ¤Œ¥Ò?N ¨ž)«òLq 0TBpØó]@ËaœHSpȤú`'íÞÎY&±ßDk‘m.|–óŒNè,|ýCÌ 8T ’¿|§¾šÖË%<ˆó–UjÑ2ë¯q ©2˜Q�ì3–«J@¦ÙÙ] K‚Ï=ìSÄ«a¿‡'ý$ÙYˆ}i›úM*c·!ú?ÇðÒ‚ �°F®Î~·G‚—m,=T´ÏOÕÜÖm (ŽQODÕ2Lå*úq&å]:‹$šÙ¬rÕ$Kx`ኤœYó6/æ¯4 «Æ°7º'(Am&¢µhl 8¤òð‡÷häíL!Æ‹x«¥c%ðÙ7™–k)+mi±Ùƒ±ˆám�—&faF)&i½ˆ^J¾ÿÜû=4oÔ¶z³J ßZß$i¼k¿sN÷a„P˜lä­‚ŽY¤óJ&\¾ÁÇ6úë}oCòyÒ31ñò?N”=\­•òÆYËYo.:Ñ-…‚9£à)/…U^ž|ƒÐ‡5@¶}œU£œG)®¯š]Xó´¯ìÅVì‰@/LϪµ´æÎ¤!“ˆsS´üášòI팤rvÌO6n§k½f•ºYæg,Ï"qSw .n%—†å.XJA+ÓÓäI­¨s³;Õ9ÍcT1¡§´:Y‘››¬Qži›ÅŸíÙœ4á>1Rè–“t•}zšBR›W@c¤ØzóZÆÖg “-“îÐoNJSƒðpuS´®2Ùß0æŽ8�` f @S½Ë»íÔÐî¬ög” è=ª‹ž%胛/hæŒiygºõ¿¯ßwª Ù²b*K/ÝÇâ "Òlб>iðò Êç#U5éžÿÌŠØû)<sot¢®X–æÛbü6iŸ•}Ñž“Ùȸ› H|]"Κ”šbwÑD“Ëæ¡ðÌ ‘/ŒÏÖóK!õ½…«ú3í›g9fÉcšø3Õ¿C[ëFa‚ªûÛÎ6nš'\õ’ßaálrâ[ß>e¹ …‘y=М¦²®üñ^/ÆxßãÝ{¨H‹ñr�` ^×MÇ” êëVìµþgBù në´ÛoDnYhS6"Y¨•ÏIÞ«'‚ô}MåòZvª®Ø6­Ïç—…Km4¤Ÿu—4mòï|´=ÍÌ£ã—-›ELêµv«%M jUkŽòdÈyõâËרãËUW?öÇ ìUûé{Ý»9õßI‹±k5 ºz8ÛÙ3;0ì©¢bg¼`jâÏzÕ‰¾¶Ž6‚$4å¬P gê°€^læ/Æ”:üZ%Vˆ%2“iˆþ£`�æÞ­îß/!äRÀî%Š~,˜ÿC(ÝÊô³LvÝmzïè>ž­ÚÍcsŠòéÎÂÆkjȧî©”7ð~oéî¹pˆÃkÞâ&w l†ô&°mÆ®Žák„†lz.s ªøïh7®æ²ËÚÁp�áåÞÍ©Š4.x¦‡öûN‚¿%I °ŠíúÊÿ ÉHÕjäéM Ma«©.šÈ0 6.è‹ æ8›Œ’¨ŒÐâPÖŸ&"¨Ìs È’ÝŒ)î&C[ ”‡o,,¤àäpQ1eqi¯AÔà¨A"¡èä�lxÇ(þp.º½dÎÛîFÿh„ç%[ 0®OE¦Ð¯mÇ$ ø‘F ;8ÆJÑ´ý0¤3nTIÁ)Ä7Hl‚Í>×hHÛ>í0~ö(<¨Ï¨o©ôùH&Æ$ŽÚ˼ë-¦À´îzú¸®t:mÁc¨ÏÑLMˆ¦+`ä±²e ý)l Áî žê…#Ñ”иÂ/tg¶§ED=ðû˜Ó®ÏŽzèï¯pŒ%�Þí®žª–8à A–á ß õÒ-`<X¬q °³Ä´øŸ’q&MlLkýòœã/‡’0MŒ›¼Ïï|«e,–o- `Y®È…xHv‘LM&¤SòxûÒ±·Ç°–¦ÏL°Æù'qÖÛþ7¨Nì þÎòþº£èå>ÍL?+"îæ¢;É6ÙÑÕ…6VèRo Ʀ’Š2hZÅPχðï S/Jj¥HÓ0ºx¥b¶ tgíNn 9Ðh—…«Ä2iV8ìž¡¯ àã“9³9ó¡:%Èáa´!Ï( n«¨a‘ Nsv è`eã\î.^ Ò®s ±ÒïO8?1¼Á4íÉÀ“)*m## øˆóna‹¥2+œú¤ê膮®±è³_ ÊÝÑôšp’%®rDl}ð*Z ~—hr0 ÂOî ê…Wç¡CØbìà±!²PóÉ-Î}4' *ô+?SE+æ•îb]±¯+0¾>1ЬGã "ª¦éªN„Éü` ÀÑ3Î~…à. Úá꘯tŠº«F„Í"ÐÂn�Íç(r‹Ó¥)—’[,®ì§-pôÙf>š“̼ÒiqâP¼üîÐÄrä’Q‰74)xöô2NÔX4 žÌ,¨ñºíHÚ`çþ±.Ô1DfL•)ÍG.Ö¨äñLéÔ§ÆÝôNó(P4}>sÆ™²H䆶„±“Fk[,òàb‡4kÈÀ‹C §ïÏkíq+¦õÓü+cPµÂ„”4ô ´‡èÏ#ää•RõKïÒZŸ•¨|¥n…&ïÆ°î-O´â´÷*“ ,)X™"4B ¢B³—Luá^5å^uâ!¼aÑ;N¾=Ÿ#²O vJfðI|/í,á(Q%)†”tSF´µ'ŽÝ/`}TM[F{$Õ/å¥0pÄÚÆ™d±û=2ªDH”ôqñ1 ž‡É|–‘£K2ÙB†‘-)ý@"¿b,†²RÇÈtª¦j¾åygüþõ²}4úúÏg, giÖ¤U…ŒÆÏ„F4v–³Còò¾‚åJ¬þTÚj Q<� �r†ò^‘e)`Þ¥v.ýïZ„Jg”°¥åúTÙîìµÑ̜ϑ,VY=UevTZ¯5ô3 îMŠãmµ�0¹O2Á&5>ä0´ÈFÖÀ0ÁOÝ3Q8ø­Šþ/`®F¸Û×6”"³VBc"ÎÔ‘©XË;plq•жsBUfÚsL”U~¼2`nª¦ï2ÓŒ@—Dm2,BÀÚKÀÁÎì4öÉ5'³eî‡pÈìá\ÝLi�TßQ ‘[ “Y2Åy¦HBõ•Ü–á·ýø�Ë`z¡�¡Ö2‚�¨9ÃJyËclp4†w-�òÍ(›S1$BÚ$A,dex&Ã0fË<Ôêî±vA#,_y&t{a±›7•\”‚ôá°ÿ„Å[xç­v3‡óЕ,xùëÐxáŽñ6t›Dzç‹Û ge‰2G‡_Qù’µÒesÇM6¯ç¬ö{Q7ÛS„L•W#ô/<¨~€ðtÜ•`ÏW4sÕrÀ�� �A–Ámøñ <6çM÷Õ!ó&÷“€¦ËõhöC†mÚ©Õ“†÷¬û–Pš)¶Î¬™>å,òm¶½F—[kV@®•~u,iQ>À–SgwÞ)j<¤¿çÞÏoˆÉ·s.+µÏÙ‚VØÕNE'Äìùdž¹] ƒ9]G§‰ÊÕ>X~óôävìQõº‚Q±>í$Åw+oušœ˜yPˆ­&Ö˜YjÃ*×CÔ€Lù8Ã@ðq“˜œ2"U$­46ºð lNn¦<Êw OŃæÃz€sáö(àᙢº-¢ú0u@zØ _T½Vƒ‡Eñ‘ñ/4ÉnÃп-S;¤mƺ×)kŽM–9F6¶¢v0éø½ž˜¡Špƒ²Å/ÔNMXúxQšJí’wY-“kž½oç–rwhv˜Ûò9{8ZåßbwB­9¹.EU2Å™§lk–yEM¸7‘dlÈ'b˜A”m¤L–aí ˜£d™[q³jÿtlØQ ª‘U˜^ì@‰My«ü!1ƒ¸ÿLZ2Ë€>@ß8Gj.Re×mu9+–"OC§®dNç"÷ÖÒo`Ñ“E8D˜q º”)®PrsS¥§˜Ÿ]õ#v™_ šeµø•sëM*âípÓde-]6ÃPªÔ”:ÚâW U½© N‡³sÖyvhµCž»÷=»oQ‘Èrù@çtQƒMÎå;©¶Lóuu%‡sîåÐ ·®r¸=¬»Ìh”QHk_ôT2QÉušð°™n’j”çÔ§]6|ÔQc "‚)8àQ à»ÃüAÄ<DCú6ø � ¤Q¦¬fëš²¾Ïã°˜1ù…-èßšÛ Äñ:¼µ¡lóêë5q}‹XxIßMŽë>ÜŠÍs[L‘p)†yxãû†;«ÛccøêÓÒêÔ=—'˜&à¯Ôs1Äý†Ó³Ôx¦\Ò"æýZgõ`‘!h7zÄMVÄcÉäbGlY2oSD¥ƒTñÉpàûvE³e®WŽj8¯ÀÌÃw“Üd)0Ÿt«?)Ñe!ÏGÕ!”ÁFÊÀ<@ݖм²aX“Ej²Ø}‚ÇùuÓÁx; Ø"à‰ž}Qš/8‘ÇÄ@ðÅgzÃ;›œÈU‰*•Mbï/‹–Ö©ïM”ŠÃ3_i*ßuågÉ"^´Ü/žrt•Ý~â¾÷©»´Æã­k Û/Ê×ìnß cO*úЛT0?TÝOV<·jq­tlS¯‹C6ºDöašã•/Ÿ47똌âŒpÛ”öT¼™¿'0;¡W|Ó²nǸÿù™àçÂ�5ÙZ%ÃÝCå~Yå¹£`üØ �|U5}²Ž%iÝÒÛNSäÚÐÅßvÍgúã´:ý®³ö¼,çŸYQêwwÎ.«P%½ØG‹ál=«eÌ#¾ª¨}ô~q%ê—[q’Kì/ÇŠô¥ÚÕ¸Y1fm½ ´ã67ƒap–nŠYÓ’F‘å{ß=´¦©ä Ü[wž:‹wú Y5¤Å°!%h*•¿ËžÚ¸…¿w³ôL¹U"Ñ/Ô(Z|ÏU!ܵ¡×ù”lÓ ó_·TJQ=© Íc%x!2×µ2Þ4¾¡Ô\¢û" ¶ÇEºcORNõTAÂ;·eA½ÄÕ‚í¿ªzö²±ù’ubJ›º2Å5©ÝóÛqê´#¾Ö­ÍN—Þxˆvcà·i©ÿÖÍÖù£ûó–9¿Ž—ü5C ~Ýn™Ÿ+¦lí7� ��¿à`, †A`𨔂A¡Ð¸dN‚Gb‘ÈÜNG‚€aÐøl†5*•¿å²¨Ì‚I ”ÄbRy\–76Ì!SH„fE$’JdÑ)Ä&™8Ge³é´êI”Q%ÑILž¡A„×eY¼*?IŠF§ÔhŒÆ{,šPeª„Â31¢LìÕŠ%†!žK/÷Û|Ž/¦Uo±\$º…†Ââ­¸‹f‡‰Àeð/—ãðP /ÍçìI¥ÓiõV¯Y­×kö–ÏiµÛm÷Öïy½£ÍÇc Úeð:^T­a,´ ÆC HžKms¼~KÃÐ,5ØK­qðO)x,?k+9òèéÔ[?·•Ž™EyZœï)ü‘+‹;ø»%Kãüî¿ÊŠÞü½ÏDú¾,b‘¹ˆ¯<“ Ä/μ ‘£ÐŒ*å&nl(È=δF­*nd$´»r*/ Td‚*邦¨:®|nƒ¢Èzl™¼)ÊV´:‹\ ,‹š¾µ+hü’ñÈ¢zÆÇ¨l޳DO»ÑÚ®¦±pü¶»*PT¬,S$S25sZe*/ëÛ¸®F‘|é6¾³²ï Àì ¼N«ä‰*<Aü�`–:`ˆ·´¥+KRëø<=²ËÕ/,‰úêï20„Ç ´“‹ç Õ-#‘C²nœ‰ %¥LÆMŒ´6ëÔu4[S§ËÓ×=Ê®›1Ô‰úã ®S¬ ð¼ÎëÎò¨S¡ºUíˆÅKé|ïPY˽›ÐïBçSîÛÓQ 3ÅBJô ‚­«Ï”‡ ×°@ÇÉS[+XK¬dí²ö KVAÖ-Y=W, ¤ÔaMn!mUi‚ßöD%Ãôàº/õ«÷]+8âËO°OÌ�òc¸ =vNqƒYa“¢ub´ëÇ�çqdÍaH0 —ÃxÿLhúF“¥izf›§iú†£©5é>§YÔ�€&H¿*ŽÌíHÛì SÏ0P¯m`MõåÛg® ;�±Ü÷óæøÔn­xUQü‚û®©¿°£ŽÍ žíñÇPOÒëÉ*|KjÇ0ŒBÑo&1Ke]7̲6M¶ñ|óeXÖ ’tLŒáÑܰëá'^›Òkؓٳ÷$-HQŒmÁ*«¢Ÿdñm÷%ïŽÒoÆq’É1(Ù»ª¹*ÎçZµ` ÝõZȲ¿žAøËÿPßjEç,ãï=oeÛ{rÝVô‘ÒM<ÐjŒé8±‡¢Ï^«ÇrdPP 2C˜ˆR 1©Àø n€ø{ ‹i¼¬T2äŽzß=ìlõ¸wvÎŽpMüœ®ɳxous8nrVû»Fe8´&å°QÓÂ8fÉù²'ðûÞÚ©y0å^$%ãí}•2¸Gn¥`글 ,¶E8¬Ó"S4l¬5œ:ÇÍbu&Í`¢g�È‹Üyèz¼µÊ‘â#sÏÍÛ¬¨\‡[›9 ù ŸuîõùyG͆ 2²}DAËÉǸ¨ØÛ››né¦1ÁرâÜxDb1Bøvˆ˜øcìp6/ÃF‚2¶WJùa,e”³–’ÔÓ„"ÆÐéÀµ×' VëñFNa ;³œXlb˜i“¶{  XË…&D‰�¥‹F§ˆù2¦[Q|>vIHk&¼m~ð‚ °7\þŸ+qJÍ}Œ9Hd¬$;–Jì*J²Önƒ )Ë;Çå•J&Yޱ½cž¶ |0O(®z¦ØŒ¢;¦I.B³1&݃3Où”, Pa³ïoʺNE¹=Þ,)v†M1¨0šáÂ*F¦ :­G«Jc]€­Ò{³‡ «\í½¦Ç$ä@ñØI0È >˜RÚ¯K�> ¬d‹Ðï·X9;c;^ÙOEZ ìÝë„TÖ¯Éìäh« ª¢mNÈTýä‚ey°ý®fN†”é&±æ·¦—Ë¡1ZóélÁâšÈ¢œG¡5¥Í-µn¯lžsÒÌ1…`¡ûžp¬ë¤Ú{jcyb©±EWÖÖä†íŸ.TË.(T­’¿S©)ž˜þžÑL‹}ɺpŸÛNéä$È„.=7/‹ ÜÓYÔn§#Ok"cälù)¥A Þ÷^ûá|o•ó¾ŠXZAšE`ƒô~€,>™ciª)Î.Òƒ–×äÚŸ ó(¼Ë,úü nÚ:Y¼ø‹rÌ:í(Y–Àª3Ò¡3 À­k8óÊ<]‹ î¶¶>[a©"UôU0ÜŠÈò¦%xˆ5‰ãìzÝ¡s,J½ø¾ÛjÁ#£†Žñv¹—<Îí¹v‰hál8ô ÂU¹Ú³Ge=‡Wªý¦”ìËY{Ž€´úL×å'}КÉjëççM—bùû`Êbí¨¾Z°ô ?aà=Ǩ  ¸'‚Ðm}t“I¬!¬Ø×rÄó|Ì× 2çf©ØŠ¶[,Ï3’ôÚ ½e¤°^DY£×%5K&#jæ2 M6g^kT³]?׳d*ÛºÌÊgÝSôÆiõ™šÇìë1–Õ Ç{8C8Ý!íRrÇû­ÌÌ÷´5Rž)ï;5ú4i¤k¸›u�¥¢Í§‹5Š+öÞ8!Œ¾ÿ_²äv©WiùóM$êšzp¼ÂöFe¨eýÂ=H‹q±eÌØ¯ Ÿ…ô‘vô”¡l‹W’ó„É š@¤ Á|¯n“圷—rþaÌZP{b˜IŒ!jÀX Ä8œåCÈÏzD+˜ ÜÒŽ-B›­”ogfl]k´º0NX¥Z…úgºÑ§³•AUP¦¤¥É›k“£¼¬êÜXþ¥¼>si#RDc%“ØÉZm}R,ÝXïm$ˆ54¿ðLã­öV¶ ù(ÓÜñŽnìá-ú5mË|whUG°k¸ P™…î¸ïÍÄ¥ç»Ç’‡¿µ¤èе»‹ÿl¹Ýa×½³g]5Äœt1à'BÐl �Èó/€lëjÅåû×i˜¿Õ÷¬â›Ùé–í(ß³mYUxJ2¼«´<¯Fà/ðÄ£»]¸¤µ·ÖF'ÃnÝ¢Ují ØßquTÇ©!e?ŽA!Ç]8(¾Èؼ+õ5ó<?ëÙ,ƒc²’â»âË?ñºcųRt:)D¹úˆ¦¡µò™¢#¶èÁ²`ò¤™UIi4eŠÙä£Y™;,@9d±‹+s [g¡™k¢Yà°±;/n.¼&<Ê‚ÁRN®’/: ,6’ç8c~³+·Šc+<Ã9º²*!1ω‚ôT9H@¾ .Bì/Bü0/¨BÈU„h_ˆ�J6›$Ãò=kÇ‘歘꣣0¼™ù¨k},9t·á‘*8Ÿ6œR´”'¸Ób6Óu-ëCª'¬ÉÔú”?a¤�ùºî>l§3q1bà,#BAŠh6“'„ºŠâ²ãÅ¢ªg6ò¬Aä>±†A‰.z:;¨Z)+ç3Ëô”ºçÄYÎAB|`z>¡ÑQ19#µ0û2»Ä.á¸[åŸ"gª[^7ÂND$aÀré¸9Sø€°è,ƒ`�  C v ƒè4¾ZÆb;‹ƒ’Ó±õ›¡óúo«iÕ·£¡¾SRa)ÛĒŒ$ƒQÚDdº#N1ÓŠß)ÿA´•"d¼sлᨛ5‚²Ñ7LC›Ãµ£»3c¶³dg»»¦A²£,K— ‰( ×­ÁøIÛ®¼)ÈŽ‚ލ²píA›’”;CÌ#6Ä"+»²ÙB$PHyÑ116D<ŒG³)¤Ó!Ĭ‚º:áº:+-‘Ìk׿ â¶§B¡|­ãh¸ƒ^£iĶa�›q‡Ca=3‹D!(ÆÀl*Éøƒû“9@7BÜvÌ\ÆLlÇLxÛ2t3€IA ž»Õû¶¼µb©˜[d½ZÏÆ¾«:*¸û­±û'-Ë,Ê‹•+Æ)Ò¤#dÛŠï°£»¸DÝIZ1ô+Li>9|Èê Î@Ô=ƒm³¨ÕÆ8Æ7\_À è SºEó㣋ð­£Z!$¿#ÊG:»4M+;–|"!DݦQlÂK{¿¤8K²%£ÃwÄŒK!;¢ª·¨DHd (ñÜž †ÇúǼ—ê:r¿¬J5’ª‚°àK‚´x̄ƀø?C —A‚§Os‹”š¡ä—ºyÎC©Ý”|;¢§À20Ï1, ä°ck±[NDê:’m¦|:™‚#Ë<²‘µ°‰00§dVÁÑ=4ñ”Ä!¡¼{Ÿä´,­±jêάâH´ÑÑ3®žìCÒÃ/:Ì}µ4–ÂAÁëìMáÊÍ<Ü Òƒ«Ò•,Ù~Q)쨚C!yhIœ£84·;ÁœþŠjCHí#´ §$óë²A ºqŠÐÒê-jàÍûtK¹ƒ<|ìÐ#|© E…7>¼"Ò“Í\ñ#Y—ÃÛ²²ù’ ˜Í ä,ƒhAP¥XUYUœvÌUp_…”4”œ¢$ÜW"ã0ÐDÔ´(RD鳤H*Ѹs¾ÄôO%pPS)ˆ˜+1³sF¤ ‘<y«ZÜÔÃ|Iòžyw:,¤W(¤ÍškŸR·sò7£gFd’ØòW›4-ÛRÖ£éÇãµKý¿R#“B}7´‘˜ÜO¾|Ú?J˜Tæ2…jÌó?BHjسí;–âÐ i¿p�Xø *bd(B‡NL<µ|&DTG›b&ü…Òd÷½RˆPy‡È{`°O‚Ð7Õ¤0Çx4Ù11¥?$cZÙ‹‹Ii!–Å|¹üÎ1”ÁMÔŠ:“ù¬’ÛGúr½cAO ÑÛ ‹G”z³›.Ò«=;³Ñ¼b ›5NUê³(Êå6¢>JkC5qoIZÊžÃ!RW¨$ÞRóøcy1RÄÝ×+-­FI⺣C~<U*UEÀÁœSQô—ªt[ÍÀÍR¢—:òÑÊÉÝV}J¾Íj±ì¼“ó8;„à>ýÍ¢GéÏ<^ÛJ×á´CkθðΜ¢ÚÝÏ1OºãIqÈ~¥4rõWZé^ê^ª[CUh_Ã@Õã>A;kB•ïÎ-A2ŒcÀñ=$Á<¸åµž$ƒZE+ÞT°ºYõJ ®¯T58±²á:BFSšc>C¿¬l9,Ô%M+ŒZu¸´5Ö=Œ<ÜüCk@½3n`z¶Q`"óÏ2h–5s3ÊÅ©CMôŒÀ]I$³Ë­Óæ3öCÉ,tCJ¬´&‹K E/VÔCÙ—R>Ø+¤®s©”CìKS!eÅC²Z0a[mÂ8”`]ƒHB� �µë>ø3Äü.Ôž‹%⚘×lø¦ ÑùrK;/#ºÏ±jS¬ÔÛéí°ˆèÞF=K|hÈÊ›¬ºÚAd“)†§üÕ;eE^r3_6_œê¦äD«Üܱ Û";uØI€ôDúÒÔbÖ]f&!EÄÓMŠ×*-‘•ßLùIµ„ªIÀD890›µÛÞLñ«Ñ˜À†VãÛ$¢Q“ódì" S¸‹Lý&?<¥_äF¼Éu²4Tô"»¬¨/4˜—Ýô*›E0Û7t|H|ŸK¤;f2f¼ÌY­æTˆbR� 9@6.çÎ}gÞ~ B…ÐU`_„Ë^ó8[[Ø]ò>ŠD©d®¦“ý7Û÷ˆkæ}ÊÞ;þ1’ÙàÞÀ £LHvkd6AN3Ti3ÅSí–·augƒ¥du§Ê ™­ãÉ(¥¦=<áûbãÛøR}9¼DöW»Ø&Ë«ÎWÄ»átƒ)âÓ±¸×¹ð´Í áoiqÌV¸�€eÁ©Íö¬ÕÂ} £t±,•ËÌá;}›"lû«‘úÝ£¯æ†*¶˜­@f¤¶k‘&WFÜÒo^+0`ÃÔ¬öÈ@�Ö¸�‚˜;¨€0gë—�?8õ3$×E— äÛY>%Ý8›Ýé¶g3Ðɉ§%ÝE»Õ•©µÜÞVXÍAE"xäÜÐMú¥ÜóxÕMÉ%{×SAÚÊèaV2Œnd̽å3¤wˆÌËôVzñžnªdåuK3ûÏßÎ$±ÐìÚÖU¯©°k„¡±‰ÜJõ¿=YÏž½µ^?iä™WC³:Öa¬XŽ 'F½8ܨ3î=(ÔÄUh']KØtë]Ê]ßpP�úSç¶|lÇ pÏ pØ’çýì…øW€}î½SƼ²@ÙœƒÃìâBS(ê].•vãoàÍÅC”d­;øÞjýêy?¸Ìoëõjy÷&¾ÂqÅâqcù mm8vÔHž¸1—Ùc –ú=,7àQ^ÑF%ì-¥ÕOžyëÁ‡1­Ö¤À|æcw¸šeT!e8“>å¶ÎŽd?.†ã‚>-Ø DÏn‰ë¬þh›óš :E<°RiÉëÅnZ¼3vHÆ¢ nç+F|#æOÒzI.&ážÅv凸~ð0 €ØY >ì®ËðâùâþÎ>…$–­òÀ=¢CxÁ᜻ÙÔ›pge;«5ÉrTU[<ÖA!¶-ƒ÷ånÈRÅ0SZd\lã9CïÖ´Ü Ž)Àã€dè¥í îæ<¸ç&`Rã-—Mé"ÑZo›?ó›ŠÄ†še÷7q8»6ì˜eEPŸÄ oìØÁŠ’ÍΛa°Ö5Cí â<idElÑ¡X6¦U—v »›æœ^ƈEiêsâ§} ž$£¿Jœ¢Šh¾ÿÞ'öüôb�ÿ±röL©(îuѵÜ:V<ߌ( GÓŒŽZem¨�% }%8…ö{õg¤zO¥U BØTÞÐX�ˆ�cŒåo;澈A'ÅYDÁÜ ÷Ε.ŠŸÙxÙ?³f@ïg7×e#¼zÄ8¦7®ú n†Nf‚)“óÍ'õà¤ý”-ò”¤¯®i0eþX¿CUP®l?œ,<eünî³@o"ÂX¾nbÓ_rƒÌì4C‰÷o®D†ÆÉjÌëE÷Å„àÀ±çU&¯Kš#µ;NtœÍ©-UªÊM6Tw0½K²h@fã_ÌÌ7=2,œÙz§?;1€ÏTm@-~œžàƒBØ;ûñ1±‡`z‡˜Tè;P¯¥¯�3NnôÍë2r…E7ÉÅÒsîŽ-|W¾û²ýþ‚� Ïð �ƒCap˜H‡B¡xŒRŽCbÑè„./ ŠGáQ,V7 F ñxDŽGÃeh”v-0ŒÎf“ˆLÆ<‡Q#“9Uk?•Æ(ÔÊ…F‹“Ñ ²Øí>¥[©Îbt¹u‚m¬Ù$0ÊD¶¯Y–IëthüâÛe¬H¥PH~•'¸Û¥ÕëÝ"I0´@âséE¶?>ÂY1˜ ¦&Å×àS+6B§‰³Â0ùë”ß?~©\gk½âëiž`­p}5R…±Xìøìª7­S+ÛKÖnùÄV- =*Ãàïê9ú„Ãc\|¿b€¸q|kBW;Ýÿ‡Åãòy|ÞG§Õëö{}Þÿ‡Çåóõ¡Wj”jý^-®"<˶ÈóZ—¬É£Ï(ëf·/PS^Î9Ž:ÀÆ)-¼ä3i"öÛ4j3 ¦Œ²Í3 T?ÃPp³¦ìš›�®ÐâÜÖ@éKŒ· Ô]ºj¬aC±š‚½%1’4è4Òxæ°òBŽè!ëÌ å:NJÕ6nbm%6’›"KK›)Ä-Òµ1ªmÒb‰F³t™¯Ót²ÅJÈÄŸ+È)’ù#)qÄ&ɸ BJ°ºlrLå@Úó"6ItæŽR4’E6QP½/JCq2Û»ôœä½¯«²-Oh«NTój‚äÆ0»/ÓêX!Gñþ~€@O‹€€Ï¥‰bØÖ::4ÜγÂåfª••iW31„Ëi$°Ì¯ BÒêC6ÌhAü†�RZ޲JJ-L¤ÛòÂlç)À »WL(Í(±{k´ ½JšÞ€ü‘7ðs10ÍQÜëLÔÕ¦—·“Õ£€ßòk[‰È¬,Õ8[mjÐR LJGØÍùQ·Œt_y4Ëì«E¥íÍ–¶ \›ƒJ™^ ¥r¥ýG«Q"]  ΧµÅv¯“Ž,ˆ¯ ì…-e5vZ…`t\yS5Ó¦‘ЍRÂf´ÔU"#'ä2ÝZ¡ÅšYf®p¤¹hèLƒŽP®CŽÄm:–åp]4ñq±;Q-S†¦àГDÁRqríjÛÁÐÆa›ÆÐë/jÛÉô~NÀ:^»–GQÔõ]_YÖõÝaØö]I ]?\@[  ÕÚëšñ‹ÍwV¸•-`§18W}5Xlºy­K…ÖŒ¼Ž¥ßù-+kD^ŽÁc¼Ÿ/qxÛoØK02k<ý—Åà0#QõÞSMÆ3ž…ú,Á (DbåŠb:,N-y"æ¡”Ò` s½ƒÀž›Â’MëÅ´“ Ðò;]Í•u*Ç úß*c{)Ív¶FøaÜ j(t™½†ePëŽE õ†9% Ú•zoLEo¢•ÀÃâ 2HFQ&78*¢RsX|í¥Y*Ç¦Ššz4OYµ95ûú^6Q.,Ö´ÛKDfÐÖ(E•:Gˆ÷¡H±6ƒ{³ŽÑÝc‚�yHѽ¡CŒâZž$½ 4õ�ý”‹ÁHjãÈçàQÓ¢*}²«•Å!Øûì{¬]ÂÅB„šÒoRT•³Èú‹ ‘¤]q­9—3qUTgè…E¿â¸Ôsü_‡¦)Hfãäz=P&B[¤Þ1M™¦JBž?^E-et°rjaÔždŒºXA‡“å*ðPpõ}·™:È‹“¾ŠQyŠ/¶ÀÎZ„œ"±.&÷8§DC{‹²\·ß%¤sÒ]͹$H&«=dX°!ÈÄYCA€hl‘ëÂD˜Îà‘�#ä}º3²vÄ4x¤Ôž”RšUJée-¥ÄF; .E@`4³Awç7¨ëŒ™ ˆÙT-”L h(Æ¡V½éä·i1‚¸ ¥åáË<µ-ËY•‰ùÃg’ÁT•º±!Û2$*= ‰­;*¢ ‡0JXûÔ£›bPË$¢Èš#âg0þm¨…Æ—ëÓ {Ó^P·éó=èÃÎcÈ-$¹>‘µ[Î]M“©‹ T=bzñùt¢)…blí]²Õ¶«@JhÏL,m†Ôͪr¯V¥QÙ˜PBGØýƒ�5 H�Õ/¸×†‚P¼ï­Ô˯ֈL›…o¡ó)i)%Ëù © ¥zÈ)Àê–T/Åt“ “ ¶•¥¦dŸ\ CH§,«*²úþ_Ô’nŠILĆØJ†“ö¾ì7k0‡}p’IHQ»Úð‘ZJ2ÉPOE–Á].‰µ§k¨Ó›Y2 iŒ-;$ÍŸ£•Fø%ï7"zâ'1™?˜Ç™XÌq×9€Mìžê]ÞqPún¯¥·2D¨Hæ*ÿ¿¶êŒÓ+/±’&`˜kë‡kÌ¡q3uOD#(ÝýO"‹–€U‰W†'h¯õg2 #RhÒ‚'t£æ+Ó5_È"ÇT}‚“²/CU%¹Dh¢ôf=# yðÎ*ÄËcl�P ÝSäP ÌøÛY&rÃé}W¡·³I!/ÒNžc͉Eý! .V—²Ž¹¡æÆï²ôl±k,/.pÌ΂ÒZŒÐFÑÔÄ:jÒW7^èåòz9˜Æ§¢v sIf Uu›ø;Zƒ f5Îer©šÔ†»­;"Ù«kíAÒ­[ÌËw" ¶Ìáǽ;䦂( yz�Ø„]*5N ñœ•RŸ…§5bT Ú³N¡ÝâO½ÍÖjŒ–òu ]x¶Ê_ŠJvÛ8Šùi"Æ=GÈ÷ ÀÀ‰0¢´w=v@„@†<ë1”{~˸Aö>kîW\ÖÊK;XG)®á9‘]Žsªþ2hP $º;a9H¾µÒpdëß;éW 5;Z¡Ê–?²^©žÌÅ…¹Ñ_+í«½Ý2²·!Ô ‹NžeƒQk6–¸šäU^Î:¶Ü8þ÷o—sG:Å^}k­ê7US†öè1]|¦1°‰½‚ƒ¶[½8oÇÊöadº;»øÔÑlۃέ¤ã1£ÏœøŽór´5l ;ÀПƒzwÓŠÔžFÙ¥úÊw›&ÙâYð¿8Oú}!©"tºŸ~Åøÿ'åüÇÈe!´¸y 4øãëš í8U]¼§j*?DÜ‹(míâTòàŽÖŸr¶„NºãJµn†*ÂñN ím�ìR¶á«bªMêgÎø8O~÷OnöŒíÏbhgêö¦Øk­b¾‡¶sk®Ä’® )î` rÉkFï4ÉNF)°zÁ *6/0zjÊ¢éÔ—LÆã…⣌x†ÊÞnÖkdĆpú¬´øgžJÉ´[%<†É:èЈ¶F&½°Ï&’Ù¤lž"Ê�ú/" ¾ h Lüðò>K” dÖŠÐ’#¼…ükC,&$táˆX¤&É*rnÇèïi\Ƈ´¢fjnôòªÌxê2Á¬@š)ªŽ òÞ8©¦½l)ƲZ‡ó„¶é©Ål¡ MäÍ0H°%Þ‰ê¬âÃV|ízñ+¤Qoäíð“)RáŽ< %è0`š‚r‘cþxÔlÜgm¾šË‹¬ƒñr³PnžL+­kf>Ì̘çðzÊ™‹ªw©nê2ÈëèódŽ~cŠñŽ\rÑvŸ,£#rÙk!ÑJÿ±qæÐˆ‰ˆd'r«ÂS‰Þk4áQjÙeM„œ„ÍHbâ½Ê<^H~%®c�o„� ��,ûí RW%’[%Ò^¥Áœ¸á4€�à³ìL§&z¨Èdj}léxï©’´KNÍ ’yfþâÄDž/ðDƯ Ý©ÒôÐf.螌0ÑBˆ´­üúDÏÆÛd$?攣ÂÞ#m¼î)¶íMØb+ào-Xó±&–(àpH›OŒ«OTòn/.O¬÷ïž®îŒé}$ìùh´À ‰2QÜ©؉NȉQJ`gñ"-‡;îŒc2€DЫ.Ë2Eêø¥Ó'Åko¡«òèÊÆMkœ1¢†+¼MC‰ŸŒ4ŸbìÀ| ¨Ž²a9ÃÈ nÈÙSP:P!'²JÏgª…°p›g>†] -è·2¾Ø_<³Ó-ª¦¿ÿn(…‘×)ˆ xñ©ö×e>‘hBQRÛïõéR§gþP‰‘-qÖêrÈm G$&–w³¼Ô¬ä|‰ì” 7:ðT“ÀˆÐ¹±6´£„ù1ËMè0t7Hª|cžzEÈx«C¼ù¯Yp5�ΊÉ@•jÂÂopÎÇ8PlºÓˆ<»±Û Žõ|ª­`Þ@®ŒB^%ßI£OB)3⊀—ìòArLÀ8 ÒóŸLÔÏMÓMCÆáË&4`�À Ç3!RµF³óE|H¶¼€“S†÷Sþ–Ž�Ö5Pïú)EMFì&Š~/,‹j4C*w “0eŒ1®ßKÎjPuIÐSÒ~ÿjë7r¹3à;ËóNë7p †ãSÉŠëc}U‘Y´m‘8à­rï"tePÿBl~_ÐtA-9N› 2¿©L7q’ÉæùCÄðÑzòµVÜF”ì7I‚qª÷#Å¡$o5¦®+ÐO‡þ„b …r Î@J€7Muò# C:EÔ ²Ôï! ŒüÚ3&¡QÌ›,Ê3Cñ÷ +ÊÙÅ¥*öHʈ8lìƒbØp± [oÜKÕúãVÌ ]qí*2�Έ‰6! IË ¢øvgBtp]‹ØG¬ªÊ+¢þD‰æŒÌžQ ‚ò6mb¢¡•/aÓ´ÀÎo  ?êè<RÁj–ƒh,¨[ˆS0qS:’ó²v˜F1k©P XBNìͰC2ëØÈ ΀Ö~óÔ±§ÄãpÜ2Qî±2Žp®Tÿ’Ý)*ñ!ïTuúÐ2QLtË_Wr#rOÄÔÜ à´çÒž~’veip®JÈJí¢¨PÆŠËojp.U ÝúyU¯”cŽE„š}ÍÝ® H>œkBôiìÛq˜äOe�UaoñÇ t@EVH¹X$ÏVÔUæb»lv‹°rfï!8cY1OsèŽgLÉH%žÁ2zõy,%ð§6Öpä&ÛJ6)®¬r7Z s E´ÎöpâF(öVùï^ßÂWkC{öz­4φ€ÓÍ2¤NBb^Œ ø’  †ß‘\Õ×~l‹#´rà˜MÁêAñ9�~€¢ —'r¢ Mž™³l—至l¹¯—E ³‡'DtfÈMŒÞÑýv‘pÍÖ¶¸uiO¦ÚI]pP ~ÄŒ5`kögW¡`SãSçå!QUˆÉ6¥Ö± ~±‡—|UÔr.Ú¨kz›…¯Dð`ÏœLEPµqRÊÏ„ CX}i3Ýtiÿ�4g5h jtP´ª«)øfqÞ¸Û‹uã³ß‰ôê4)Ý|Ä8f7Q?IS5‹@îxÄâÙ@¯²¹t0eW tj¿q#¯q€ÐY–c–YfvA²aÈ(Rp/@ópÈó§hmJ’‹µpèÁQ†YÔõE‘ÙIv;30ŸR¡jÛA91Y™.§Œ €± |†6ú‹M¬Áe‹5NÔ0:èï°›ÙÈÖhƒ·æÚï‚j™&¡oI÷ZÎ&÷‘Öñ‡Ùj‘¼àJ¹h¥;l)sVrŠ·>nQé�¥>ÆR•òœn븛„íÔáMŽN ÁQVúιJ‹Yƒ–˜ß¹ÛÎ0SID.Œ)Ži‚ºn˜J@Ê f€K–”Ò 5Ko— 2‹ãU7G‘/cm‰TÕG“Žço««œê¥møxí¯ ŒVb­i©ËGj§DÒŠÅ©E2#·íH«?P7FêªÖ|0 O03‘(‘Iø8ï4«F™+wFV«oõux³ÛPY3B¤‘4] Ÿ‡éö¯¹Gò» nµçc™³iJ›WúñVPÌàã™›é%w2ãXÎRµgÕŠ¯PgñEOKŸ©˜ù0•Ê@2Là<¹]¨;ƒ¸[‡¸ƒÌ†ÁÁT-4’)cd–Né}OC"væ±~³Û!§ Õù÷Æ%즅Âmd@¤õY¯²›ú¥C“Q´½Öõ¾Òlë2P.5„Yá²LJzó ×•fžª¸f™7U™´ZEv55fº¡J“‰ó×¶¬<_F›*¦ˆUÎ;4ªšË²ÖÊ()Vü¶:\›X­¸z˜óoŠçù ¡@z�ÖʂڨiÁ°¼dK’›¦îÅn–° ¿ì»Áø·Á àÒ €Zû‹LÀB`À<-Ç„]"m}<ê¶·TlS.Wõ/ÅÚån¸v÷™Ç{7p÷}÷’õ‰²$?[¥ËõKâ•ó/<0„í]C¦õ|9´U\ïšÃp†4S«ÍYQXðµ£ZxÕ+ ƒ›µßËï=`ìj@±µê»c'âøõÍË ©õªåÕ5«FâoTŠ.‡Â 'ÎA0hв ‘¤­¦ÏÆ7ΣÅÎݘ\#ðtRO·ÀÐ<¥Ú£Ú[ˆ! !Ø¡â� �wÏêÊôK=`wcˆºÑ’0b³‹m /S¡t]¥S~Ψ‘º_vsÑ™G:o©LÌDTÓjIԼ݇÷ø½"öÝqà4/ë'5šÔ•–g¸´Ý¥· O¶€­r‰Ž¥ë#hËŽaôFPèQ¶J'omÐ4úÂ>>à3ÏŸGIÜÏËjöR)°<Ûyeg½«¹å(‰—h>Z+Oü»WzˆzTÞ& njÀ*a† !#Úsœ! øÕoÞnô{ßÚÑ�oyÕgÌÝàŸ¥3Äý7|–tyΉõ—Îã[ukØ\ô05*öSWî•(~Ó Ì|Û0CÄ1\RëÎÚ¡Í_¾ž¶¬’ÙÆe0¿ñ›¼Q®œžþA ïO‰ñ´þUÅ�À²)XŒó¥ná]\qcÙ§PæM<iû4³·î™O‡“Yí»ç±×ö*ø—žõ+yÃ>YÁn²¬.šë Q>ñ˜fàœt‡}‰Wc9®"Bt`,ÁyÙÞ§û³ûTÒ*!ÀáÐ�à�º ir£ÒAÍ9•×LØJݵ‡d„|€gÈê0[+\Ô\jÕ‚���à� ƒÁ p(<þˆÀâpÈ\ÿ‹Âá1($/„C¡0ÈÄ9�Ç Òid^•L&2I´6-#’G"’ lfw’¦R¹¤â‘&œÅ%PI2' ˆE£q ~[8ŽÏ)2êì:u:•Èä³ë†ÁI¡Ç+•ûUJSi‘W®0Ú=j¥(„\îÖ‹åŽe1³W¦°«DR»w·Vhu«•¦qR-¸KnÏJ‘ei3ËF÷?ÇÖk¹¶}@”d±ššT;Y€ÄXñÜÜ‹Uy²éáù oC´ÆÂ'χãä0 ©ËGÁ0P9‹étú^·_±ÙívûØh‰_áô¦™übÍ%op÷{o‹«²g%™™þN%!£î=sêÖö2Kâôô*Ê"¨ªkû2Š¼í²¶‰3êDÒ¿¬²<«6,’òû®ú×¶¯K¶0ð#jØ)Íñ«‘*¯¾ORÁ EŒJž<¬«èØÇ3:â$ðZ€À-qûH¿/I|T¾¨Ê6²%©LF¼$ò*Æ:Žl©­‘s56òœŠ›Ê ´(Ë¥Ò‚öÐ7ª×ÁÍ’#:0M$$¢)Jºì”¦mS-(Ó|õ È1Ü™!'Ѭ@Š¡k GG)„ÿ>Ïå öÍ4|­-Ë2BÔÙ³Òü— Âí ¥Rlj|Ÿ‡àP ¥àÎE;Õµo\W5Õw^Wµõ`X6‡bX¶5ˆÃÂw�0Á0P°*rCÎݪŠ,K7´Ô¯HíÆ›§/]É#°pdË«ðÃÊÈÑ,u?<1P§{Ú”üovß/³8ÊQ³1"[ôÄ y¨ñíüê3E‡8kæ}4Íe=L’ËhàÀ6¶7>¨Ñ4[It¢ðÙ/­Ê„¦Ë‘J™OKxŠ™Ž4×ÙHÎö­±繋ªú,ø,•Þ4s}@T¼E„¾Ì[ÿ‰ßšc ÅJú-é¤c t)Ý«®«¦¥ùü5F�ÎG„�ˆ1cí»v߸+¡ /¥Ôw§«Üs­J|Ï)®Ö¶k¡ÓRÝ>hÃó:éŒ,©^VÂ78±x;œËuÌï¼­ºÑË÷mãt^Ü ÷p\pä{,^ Ú_dX,ÿ&ðï$…ªQšÖôØR”+KÇCµƒ“ã}Å©²{Øœµ0¶åb¶îDÍ? C{ɽNóe•D =JJu”ï<ô‰�Ô郻Ì:fLÿêz7K»x-ûàãŒSêMúmhì¥p9öTOT)õk+„¨×È•T$i F³ö„Qã÷fà)•È‚\ã^HÁõ–R¬«GÐ)ÀyY«Vã at/†ÆC8i a´0â\8áÜ9À0�Š– ·ÌuXc]­YÁFµàK¹~q-ÏADÞâ^ »o¬!'Ÿ'ª¥Y2¥}Ïèɾ‡F†Ü›©A.(fFo•!¿Fˆ ³XÀÞU#í2.±•<øÛÖó9éF8Åä°»3ˆÊI#¹„’¾Î» DQÊ7/7u%"»`_ %DHàˆ[x]#<ÂÔŠÙ{iuÜ<b—(ÒãA&¯mïG˜lÞéŒk‹qžÙjqØîÃÌ+‚ð‚%ˆq†ó&eC0D!BòÔUnð'ɸÄZEQ Æ4ønS£ð“QÒ $¨žÓÙ—ÇÁËã<GÖãGR²µ*æøU´nN©LJ¢ÅÔ fÌ&9·Ð]aGÎ?P8¡”ãø¡.Q­‡Öô¬€AJ(Üé!è$tV>wí¨yZêB*ÉåRb¼3ÚTKØ?T’B1)?!UWBã™gˆ¯e8Q(áƒÌ›Ž,߸’ã?âl±¨F•¹´?A#"(NK¥‡Ð'Õ.Ú.2©¢…)7æê–¹¯)í5tOJÔìöttºYHÆòÀ­`X‹ÐÌ#&]°ÁX; al2ÁC8]‡Áp'@�@ È4èb“«žëÙ—·zÞ¨`ÌÒ§°V[Í9¬Ö"bîš«ÅËéÛ#ŽìFÔ¶ÔWïšTóŠ2!§ºW\û„+íA—²Ä×X«³0“Í8ºH³>n™óü5" ÔD`kk!bbô©5!6kT í»/}ÉPYÒñnó­]r±l¥™¢‹›É:t€Ðtðeþ‘Í~–ÇkvšMÇ­®FAÞ¹$™›ŒlT˜ò¿KЖŸ©Y˜È*‚à‚$Âxn‡àÃá¼8v˜^¨Rêy§Ù5ž&4W^V±˜èÎo$#tw ñ[ùîd.¼"«ÈÊ(É»åNŸbÕ\®VE`½J_– ªG¡ƒ:‰jØôjˆPН•D•£d‚fSÕ‚QK(ï&æ!7ŽÅîÁ¨<Þé;ÞKÇú)¸,)Œ[QsˆÇºù×,gMhÆÕnÜÏ[“Zå!u¸rYzÚÖ5%Ù¼ÍÄÕ–©ÉP‰ÓsŒŸuJöÐã]²‚ú‹ëxÀÝi5Q§§ŒqôчH\–šl.þÒÅ:sÖ“ºwMæYÌ©«Ž8=ð% ¡ø>Õ„* Â/ì=‰±v6ÇÙ$¯‡‘n'ÀÈ H�æ&œÔ‹;3E|Ðç¾®ïjõ“nç\Úè¡´y¼Íž<šõ½ÙŸörþä—…ÅKñA¹á¡iV—f®°ïœw“žÌ¶ 4¾Wo|kð2Æ»¨ûw;t_¬Q­mÞå+]g쥻˜ÎાøB(³MŸW¹`$ÒÜvÞQkg{1ÛÆÎÂK´y¾ô 'Æ¢ªwçf¸®¤yhî= -âd)M•Õv"ÁvIduŽyýž\êG2ëΜªjAM{W.æÄäÄBj¢"PÑ«ÈÒ¹q±?Éø½.tž-ÌY÷Á.r²vïmêþZ— D’ëúqÈZlP—ÇS w0(/Ÿ.dÌÛݤþ—\5™/ŸE5k“³º5êlI±åÈõUv"ÄÙÝ$“VAÝ¡ïÍQ€mZÁkî 4ÝÇHŸì¢‰ñbNwDÀp—÷G»aÅ=ÏWi ‚pËS—ü,éðêó›ênŠÒÜOA,®0|‹¾æ¹БGÈý×ÀW`Wî­ý·÷ÿçý�.Å�I†(W�€�cÙªâ|¾ÛÓ:òÞ‚.7aлZ/"Û¯‰Ž¸‰Ÿ2Ø>c$, “䬲ä§:«rå ;Ë ,¶ªí"ÀAQÜÖÉ r͹¼®¥S–¼*rš»/S¾4‘$±ž»øÒA«Ñ8®ñÀ¸K™»Òî­ë9œäÂ)ó”:ç¨i³â°ÂªêÂAýÁã2ÚT¢³ðŠ‘ô9 @šò‡Ásħ¤1² ô§Qw©ó䌼0;ô%£«Ê®*³1xÑh{‡+k ‚x7°ËýÄbºÀ./cÒ±;¢3#Z«²òÿ“Û*©‘>bN£¹Á¢’?[8½:Ï È¼‘œŠ ‰z«­“ðC±ÑËMžA$ä„L<¨Õ·cêÛN¹S°œ4ÅÃÒ?Ç1l =!Ä+¬$Eêº0÷3Ž6ì$Æ»‡8j$¤É$BÉAÀLb©<n:Bª¶ÀλkÆ¡¤©¹Àëæ«bœªRûk*Åz¬³Â!¼IUsGŒs9S?©œN) R”ÓãGý‹ékp+D*«‚h±¼7·ÁRõ¼<‡~7ÃÅ”bˆx|?ƒ_…à2¿¤FÉD”ÉT•Éb„@_…(ET�ˆ�j Cö©D! ÇÈ»-HB>B—iô“r€Â%¸Û‚˜{è@¢Œ1ú 4i¾´Y*âÚ»!Qš¹Ý+ ™”#¼1¶ü ­¢Z<cšÁ<'%–£Â+¾[ôÊZú½ü)³t„. §'"Åt­3n™»ð¥ VÇáC&úY¾1<Ž 0î’q?£»âƒLc˜)Ä´±”TV§t­»1ñŸsEÒ2T>Ã<Œ|Ÿ ,”­´LÊ.T±™U”ºà>³€�0w¸yº{¨‚ˆ:Élᛀ€€€å° ÿ��@0`" ƒÁ@0è„Aþÿ…DâPȼb †Ä!qÉ#Ǥ2¤–C‹BarÙŒ>a–Iç3 4ÊI<“Ï%ÓJ+A¡Ñ£óØ<.Q¤C#Qé¡”Bjñµ7K—É©Ñx•RO-•M)ÔÈ­f{DµËêu›v·­Yhó EVål°Y!ö8n£ŸË"2 MÿjšÔ¯5Ëì6‰]±dé—êþ.:Àe3yÊû/˜ži1¸ê,*;ˆÔR0WÔ«EmÇÆò­å+›Øgó±l%sanÝÑø¼ -BÁ_ŠZµÝ¤›eФã:Øj”Î)×åm\è—Nq™Âó/Y(»åøûƒËÃ*7{÷ü~_¿ç÷üÿÀ À, ÁLÁj*m‡ºT§Aæv€€·8ÎÂ>Æ5铼´¶+ªÐ6m ’ì<IkžÅê{)9é¬ZÉ3ªÛç;L ɨo:ºÎ’&ÈHò6º¦iLD«ªŒ²p×IÒz.ð*(Ä´§ÃŒÔR¶ÌÓ<ôɪm*L,²–ÕG±ÒRê¹îr0ª¯›1/§Î²³+¤ ÝIqÔ$’ŒÕ6»« )µ‰²ˆÝÅËc‘FSÛR¯6)röÔ=Ju?IJõ/C»Ò{Ò¯PÔ\ó=l­Í´ züœÑ‘œØ•ªl,Ê’4•š´¬;o4?$°l©/Ä‹U麃»¶K -¨'qìy h„J È A× ÅqÜ—(DD <kSÒ+üøÿÄo+ƒ ¤­SðÓ3±”ºÙSÒ³g­úª)܈ðΔ´Q€#•«CiSõ¬SJÔ·ü§2â”;ˆÉâ³ê"³5•-ÖÖáªí'’0W–SG8i*ÎÞ×rUí‡ÆÔÄ»F¦ùko]JUùÀ¸:ÞdÛ#Yã¹ÎYLéyq—Ólæo#’Ä;žP5>0kLêò.2š;Õóõs_k­]󺊒ҸU˜<çR2ÔžÈÑDøMšÜ%xÞq£I‘†âæfVm|‡ÐP ¾c)rò%Éòœ¯-ËóÏ5çª%ã¨&àü¹böÙ‹ÍØäÕ¯K”ÉN&y+[b}°W5Or‘6[ }lìÄ›(Ð]Û#ÑÊÃ!+ЖBϵÉÝ‹bS•ýö»¶rÕç¦á’ <f•äêè¦_EÿV칪ŠÓäí-ëéš–þÛªÛž{|{3&¢PYº]¥Y«œ8Â×ÛîUO5 (µRwʹ¦;K%ñ5¥zàÊiŠ:JȦ›gh\à‹eF‡•î¬úQØ»¯fg|¼¥ròà–cÆ>(6Áž3Uiè)ÖÄeÎB·6O…M'!à> U¡L�êæâ„QŠGýs®””¦ÃSO®ðÜ£‡þjÍã3,0­Åó)”ó:XÌŠ-3çZýÙ³8hOÙE4(ÀÐâüs20m*§æ» ÙiÉ}Ì-¹6HX B{ñ]E36N½ž´adK )4Õå[Cð/¨„¾I5[s}Y0¼Ò±‡l‘%¼|°ªJÕŠpUf®¹;iÍ $9}²V¼GZ‡)e噤Kù`mRã ‘ž@5G"¤ ;IÄé©5 ¤ŽÙbXí$å8%Ù¦ÁŽRñ¸ÉØA\@û'È]†Gç„ñžSÎzOYí=ܰÊc\&Šð@8 €±eʸaœ!Ã]ïÔÖGhÊÍ!³J1Œï¬x�²ÓЂ“Fo4´›Gá{1Xoäö<†XÒÌ›Îøð«ò›4 Ó΄ÏQjX» IŠv±ŽS<WR]‹ù´etv &š^²¨‰¢¡pJ¢/9<[UsÓLð)’°•¥4 lâPùÙ)ÉrúØãÓIlåä6'Ø”&cÇl.¡’Ê÷ï›Ú~b³©¢÷Q™$»–*Å=0vñJÎ;åq¶ºÉf73!Q"� {±ò�ˆPHààJ„ÐäWø³Vmq®pµÐá›F'ÅTm„iÍñµºµCLÙÙª‘‰¦ Rä“#äôæƒ1“õC Â1–ÕÑ»Xìw‘3ÞIvC¾”¿! ]·NеݸT«C…«s„ßÚÕë_S]àk2-VÍX{Iª<Ȥ·R¶Ç(_éìJ瓊`ØšË/³rþ_eò[ï ­aô%ˆm(ê“…”þRFÛ»žä²„ôU×ÉÕd®Ï]ìiªÞ9)G燭ë{~-´'™9|Z‹`’­È+{‹11‚#öuP?;g}œÇXïcÜ}òüƒ¤o„!6¨� ’mܥлñsÞlk‡‰Í´ƒI3“½ÎEÈ‚¡‘šûZN3«ªÍ·bÇ£!¯”¯µµñb©*sM¿{,¯/X›K]œ²N¸“fÜL›ÓwYø¸ë´[ 1âöd¬Ó‚·À(3&‘ýPu~ªàê—+]/¬b¬a<8˜tµeÓ’oêC“¥&«{`xO>&m,x4Æ¥Xk~ý-Aú˜3K· µ-“Ê?*ÆàU«îÀË»^ ÃØ}€4@ ¢ Áø`AvÆÙ>àŒD…¬ñ–Ë 9XGg@È5G8ð30ÒÝ¥iš‘QcüM²ÇF^L¸md¾¬ªš‰N/ŠoiÈ©—ºùçµ hÍÎÆ(çP:=ˆÑ&ÀØ*%òU§¾Íè¢V]°ÁGê¼aš“œ*nüT‹š«!Åã™ìzÛØ ÿº5UÅHfáâ*%‹9Âw ÷‚îZ5c÷b¯EÝ*¥ª¾¼ò²^õئ릹S£ÑeÜY]WT­°ZBwÓN ž”Ï“‚Ÿ£íB»¶'^ɼP³·\ßYâC²9ØC1þâV6Gí®ýßüð^ ÿ†±b#…ˆÖ` €fˆÿ™¬\Žû÷ÖÍÚp±uëàÍAóö{@ª®ÓråuÒ—}¥w‡UZÁ;[‡ …æ.bjšñ¬L ÜØõc”ŸþÓ®£QÜ›³s @ÕøÅ&ƒËN7Í[ß§ÎhWuÙ>2÷®X¶‘æ?Gʵ¡ÈYUv·x?M?ÏžpZ°ÏO=˜˜.Ýw+0=oÖê¦}Bu’ù$cìÑøÿÀ8�,à®@B 2ðÈ D ²µ,Â#|_*Äz.ÌϯΔ.„¯Iþ ÜMî® zælP).Dò¢…ÌìþÝ$†ÞÊšn ²åm~…®èölDägìçöû†¾âÄ8·'¸îÆ'_Fœ­LبhHZdÀ¥ ‹iÑp<90nm�ù’-¤ÝïXNJÆšèPü-l¹C¸ì0@nŠ4–­œinO†¿Ï†¯ &ô©Ê*ÏjĪ8¨(Þ× "Lïš: Ä(ÒÔÏŽœ®Æ8­b÷kúÞäŽjuÏ/‹pýDx4iЮò>`Æ1EqI¨¢$ !àáäC üQ GjP½º]LV_Îs¦ÒÀ­ó Îwèé°ÆÏä÷¨àÃnP†'ä“(ÝOâÔ†¶Ù-”û. ãVæoO pQ�ÃɆ€ç„âÚ¨íÀ®dvÂGØÌ,úúÒyŠ=L*&Mo$¹KVŒèbŽ‘ÌýPîopE£î´ãûR I\ûÑ–Ã$†Øòæ€^Ž@Œ"òôçNÁ$ €æ àR �ÒHž F@± Œ¢|ÌÚ¡Çø÷+Øýò•P@­DÄí0|Fæ:öËöVPÌä¥üE®´fºOæóËÜ*øÓŒΜdÊ’euд󃈬¨2xñè»Âìc1ØHDY¦¬c ”ï¯Q€÷G®¹èÓò€L˜ÝÌ¡Š$£ì£Ð‹?ªR¦zÖÑæ½°¹ªÚ¨JLþü…‘*о‹ˆ{‚øOç|ó² ‡ðòNNŒÃªë¨6¶¥ßO@hè:Z2‘§p°ÓJ¤¿ e0OM2­.±ˆ±0ûN¯ Oóâ˜=Áô,lq?$³…8s‰8³Œ"¡üáüa0 ÌaØ� å6+€gíÊôz4øJÜßl»:Ï ºÒþÄrüýpZ¿å gQ¨ís}SÀ: 12ìš)ˆw*»5Z<ѰÂáÃôÖ/q@ LŒ†ž¶g”oC=$X‹¤á41¸ëòÒ‡NJÜP”Ï.þ�Épvk*a±c&&̈I ŽäÎôDˆ,>¿g“E°ì´äÐ|Æbº Q#Êʪ-3èÈ'r^פ¸„&�T$ºiÅ?‚¸²ð±Ò,À°ÀŒ àZ€€ e8ô°Š ¹%$âFª6ÀŒ¨ÉÐáÓ2+æ”Oòð —MCdîØSòjMè ¶šwF8)æS*Ü€“ôNÏG ¥Õ<Ò½4g¼†CRà -Ðhùà®Ò£;Oº°1Ž¢°þ4M”“½.öHˆzOÑ E�ýˆ¶îÅOÛND¶¼ œîʵÂsB4^§GÌÛîvQç„ÝÍñ6tÖeXíjj÷’™.w=o´ó…ùAÃÍ)Pê‹>uÎtÚa•%’äõ MæÜˆ•›jî¡QˆÓi¦ËÆMß­p®æN=Áù7À=8AK5é^µí^ë4Á‚A$¡T€M+ñØïÒŽ*#Õ×MEcï ÓUaïðEr,J SæU/ä“48 üÁÅ/ Ö ®•Õ%*‘,5NnétE( ê஦èÌN€Ì¿j]%¶\gðOTÐô‚««-qy„ÇcÖfS+’¨4,º2ÌÃòñ]6:×åã.)~-E­Æí”@þrÁZÑüŬÅ=ÄºØ €ÑJ I ÿUa£Ö,ÜáâÀ( „@hàŒ Uño')$à®S«M0²˜-Ôö6°îσbr¾«Ð"Ԭꆮ¾ö2†½ê®Mj•½&I>’´C°y7¬êÍ$™Ì ¥µP ò!Âé5¡SŠJV‹‹…A‰³dõµŒÞÊ vÎl[>³�nACèCBfÁ NÔv­®¶šU#N•½®,…œé@úËázRÞh¸_±lçÚÞIwq3ÌùÖ“)ÏÈÖUpTBy«†1¯iGÛ1ö W%=#vFõ(ÓzÖ+G'f° œx�(ÆàÆ6õ8xAa�Á:Œ` @q•›i¬ÂzÉ"9mÖpVYb)©ï~¡8?*tˆ„ËÇ\6f,NŽ2*xügiýOp‡ H+['ü©øPâ¦d^0õ¾ëµåU{&•…“t‘îOíí aoå,1)a2Zï³;ìøU×ÊÁ³Þ‘˜E.ÌG3°–¹~ކèÒáFxw+¨? ràUSbÓ[ÍJµŒJÉ£®œØ×%¬a.JÀäÇo…6;·RÚ)Áî¡ó9Aþ�ï àt �œ�z�!8“äa Ǫ°Ž?ÐÌÌðÙPâsX¾ ‘Q r³>Æl÷Á{ìkŽOPÇX.ÛZFR”w‘Ÿ.îiiqzÅ"Ë;˜ô¬sMµÅŠñÓ(7¦ÍN{{ ¶Œ·<iÕÎl¹ ùT#fÐ8i‘þü‹|LžÃ3Hù,™v0ÁVhã‹+ .çµrdT€ö}s"6›m”9¹«{Ò÷4ÕM’Ïž¦Œ}Y T5 ¾ÖÃjw½3Ι²õ™ÑÈ3Ü>~ X”I¤ºM”â‰�âÁ"á´à� Œç™Gf±ˆ$CGË™¸=?ÅfðÖ¼ËGÊ š˜¦ÖMÄ}w²'!q19°Àhï2qsf™v©¡ME‘iqZRòÎYUBP' X‡Z—Ðéú4±LYw7CDî©jŒ³rš}húp⦨Án2þw0ÄÕ—,rh2íÀè´g£ Fê+ňsËiŽe–rb©’iˆî�1íOTÃ=7ˆñ|\†s4×5RN¥¡¬kK¨ �Ùˆ‘"àR€@€HÀâ@²`tºO¶ä ”YHû¹®9’7±ÙE)€xuL»UVÓíáZ3»…¹ ˜Ø£¹w¸âÙñ¬l´õjd˜Á[ ® ógËFŒYsgû{SkÉFïf©kH޹šä™Ù´1|zF7;,ý¸ÙüßC:•PŽ«)-÷7 kÔk‰Á|óÝ·±ŒEçÑóuÇ‹¤kS¤ @rY®Ü(@\/ë·Ña©|ÃX«¼¹í³*Íéx$nðq`@zE·]Åüa$†!¢ ÁF`*@"*à–ÛòáV–ZÐÓņïBëZ³|˜ÏguÌ0ÐO7:ÝG&S»Õ‹H;1G»>ƒÌõ°øOÊ×€aúàô,Ó|Ú6‡ãˆm+ó~ø[¡ªß—¥…q l%Q*q‘ wsX``ˆ³ì²ùg‚b55¿f­¿OÅqŽŽžh´¶®ÁHÚ˜À.ÜÜî8O½-ÚÅ ¯Ã¹Ñ¢T~÷¤áLó!ÓXÛ˜=7øáø/஀Š�2À‚ hÀ cפa ¥§U4ÕÓåƒ*Ö¶‡!»¨–Õfûظ‰7ºMÐüGŠYìÝ‹‡vÚ3lYª-·=œlÜ)£˜³7ûs“ù|ìje¯áÒۭϱ ´4°9ÂÞ´5Z{¦øj/½­Àø5a ØoeàËã|ï1~ÂR�Rc¡Ú;º™bÓ +IYnCáÙÎ2Âöô,’÷(!ÂÌç®íaC=°¸ø §N%‡cŠ–0{éJ#¾bÔ|”Dôø°P"ëç" ÆnóÅ`Â]}è~‰è¬x!Ð`ŒàÚÉ6…ÇÙ¢Éü7}gŒPEo;>ðëzμœü l „“û¯©eF˜?6»{>W en{¹ýU¼"Ã+—ÁÖªU©Æ`ºrÌôy2.ÚLÜ©©•z’ƒS=䇀¦’ùÛßWŠó6û‘}½ÓÒ;P1Í%ªÆ|›–S¼8ožùù£#Ÿ{ß ü¬Ä®[=S0æõK6à±ßòÚ4«,ñ¾œ9²§ç2xè Ë �!ë"ÿ~hÀ4À("@þ Êø èßœ?ÙEØZ'|:·v2¥<|ä’ — ÂÛïA-û‹¶ÿL;!]©@œ3Ý0i Öq¾âPßád³qb_©³³£˜@­É™ô �ø‚¿ßðX$ �A!p˜tNƒÂb1hl.„Çã‘80D¤xä~G…B#™„v1•Æ QXŒ¢“J£’Y4B/ŒÁ'óØtV7<Ì¡³Éê“QAâÒZÔJ5\‘CäJfÁ ¯Èj0©-ªA,–Úæ•êüyd£Ö.4úÆi5‡R.”kÄNÉ-³\%¶;œŠDœà°÷‹FF)•Öñ×é<÷ |‘R'ܳ_”[mVi¬ê»¢ÈܲzGËñô( ‡×¦$¦/y½ßoø‰ÅãqùžW/™Íçsú—O©É˜W)%KMvìnQ)º]|rìoª;CÄålU”ƧíÒ[êR \ºC°ýµ®C`ο-sè¹5LƒÖÍ0Œû$˜�*»ÜÆ?kBº.ì³$²Âéëôµª‰ª}4Š @®¨ì°±))"Ч4*∯5Š“(±©ÐÊ6Œ¼°z] 'q<@·4­Rôó¼¯|7 ,“,ªE‘ÛðÌ@«ïů:ÄA bU0 b‰´ ÂV¿¥Q¤2Ä.¬{ÍISk Ó¼L¤/4j¸ú(³ròª63«xØF­óN×2²DHÓ7‰|‡ÉúÐܘ� 2{ŸgÀ¸‰A8(‰(r À³«UUue[WUîFF Œë:¥D-sFËì|å );[.h†ãXÕ½ƒWÙK¨W;Ë2DVL®}Ÿ§à8‚Åh´CVÃq8veÇs\÷EÓu]weÛw]÷ƒ‚€€ `…ã}_wåû_øWŸÈ@`J‹g™òz€`»C­Tú¯Yð\Bb1T½Ìñµ‰JÍIdA-+÷‹âñ$¯e.ÒŠŒý#qÒ/`LPôã,±ÈFigM–G#Ï9Ë1£É~r ?©}&iöqŒ0ÒËKBeïF‚›¯IÑê}ô‰÷ {á¡ËÕí°Ï‰] Öï¼+⪅#c¹-zúˬ®ÒÔi1Œ|ÿìló“¬úVþã?ÔHÌí³ƒ¹ñÌE@f´ÍLÛõfÊ3= <ÐÖïµEtJ }ŸÇàh  ˜Ë 8‚ÓØ€Ô‘ûSÕ8{ßwî¨FFŠ™ŒãHº¡5+îB¿è[’ÎøÆ:¤)b,ÂÉznÁJùl±¦l›âƒÅzqGsG²Ì¨§ÁÐÃÊáö~€ø C11à?ø�`€@x`T 6@ó˜DÈaãÔv�@^[8Oïy ˆŸBDFkQ2<ÇË‹Jyp¨q˜¥ÅcÚz+<»$òNùœ»çLÇ¡d˜ßMYüsJE²$sT3™fíª&C³$BÔ¤Oqä)±ð`D�`˜¶¦ÒZ"xˆÍ•* W,ª™C•Їý¨8f+bTiq‘%~ƵZâ ‚á6cè*°†ëWÌ{’x‚AÏóÜf¯Ež¾´†­‹o/΂!¶Ä¤¬srQ汆ĈÑsד Ù‘¬¦*èsY­â:¦t$ÊH+] da†Wý!¥Ô»—’ö_Kù0fØ“c/ñ0Å✀cÁ :Ô{Pö"˜Bäã€t(Ž!8ŸáŒ~nÆãìß§¢ˆ°µ¶`Ð$$šg†OŸ•vÆçTsóŒö=G˜Ôg38Dpwä(‚ @˜Lz!Dh•¢”V< ¦’\J0-å7Ê å= J)Œ¸Æ¢cçHÓ*a~iœ­Ob€aé)a'3Q˜D].ciº—¶#PÜVšp›¨½¸ÒþBG˨�@ Œ É.hµSª•V«Uz±VjÕ[«•tåt$ÄèÍ�@€ä~äIÚbW4Õ¥†”ätú“,N87‡«8ãÁ­HN,´”ôÛ9=GE'JÔæOòl'åÕ¡VæH‰Ùìó’Mþ0­WIe”¦RUò·HdëÛš�À{A.CÔuz×Zûalm•ÁHË>†Î{àóG5àÑ'£?''å°¦½ÛØT° „ØbñçË?Pkƒ7²'ͱZJ~í o(2D® CúN¸ý/ì2 ›gzoUë½—¶÷^ûá|eÐÌ£X,аôÁð¿‘A¼ÎC{,â ƒó‚2¤Y®ç!ŒC’×þ5Ÿ•r®û>Žù¸ÚIaqåsîtU•¶L ñÌ;áœñÄ¥%¹ærÖ.$š´Ô‡Ðqæ%Âe«Ëc|qŽm„ˆ )iÝÜFzê;Å&Å-=˜Û”déCä­¸R3O¦Y%ëóô*Æ è\ÞB¥1½4YîiKÙhÅ’É(`†Ü÷ŠPúƒîZÕ5޳–sΙ×;g|ñžfÇcH&ŠPàk> cŒO%ÐLNú‘%Wñ9ëR8ê±i$bÏj¤Â‹$±U”î"|hL£¥b‡¬E#’òI¦PšŽ¨’SËðE2š$ z~|›FGYAÖͯñ3p6”|ÚŒfPDÏ[7glý ¾ Ž 0§IWEÜšu…Ñ�Æh¹Òû!B…Üfw%iþÄ^ÂÒ'4¬Ë­ À‘#uˆšÉàÄâÂüFS<àkæçõTÞÑàœƒp~ÂxUò#â¬j ÀÞ-ÄP �à*J,%;8ÖXº÷Q§ál•¯ðMÛZ×BÅ[§»yIIM˜£%GÅ4Ñäbin»$ënÏ7vjIDîÀ{²”ÞÒuIò“wÓzø_ùJqÛ£'3Xç÷º é¥üxP.ÃÜÙœ/¯uþÁÂA 75J¤œ®ùSim Ñ0êlh–t¡Í³a>÷ÅÜÒ,3·¢d*æñ§Þ^"ó�ý[#ô# ¾màb°>@õ<2gÃæ|×›óžwÏyõÎ ÀWCàz/@Iò²>jFXÉÈn®-Õ/nô|s6W¯£Õ0IªTñQÎøz0¶N•çÙß2퉟õÒŸâ¿&x¯ËÆm&\'d¨³I¤}ÕzfÃß½_„η²ýëýŸ¶¬NÉîÎUÞ›^ ö;G¢#¤UŠ’zí(Ò¸²9-ú¤±‚0;B”1¾•ø�Ñl3x1¸÷@œ @¬ @¼ /s˜u‚XRƒcÒ‡¡†€ë¹:— \ùÊ>¹ì;úÀ;»r©áŒ¸Ûð¶ò$+¢¸ rÔ@cG™q30‰ô©§7$<È:Rä Êx3Iµ©‰5SžI«+ü#:xù!$'›q8š°Å@xÈy„³­6P"ÀÌ4CL5 ø]'B‘7”,€œ ÞAãl½Z((ãJ£’VA+ì «Œ¢BaåŒ2)­&¶á P«²‚n¼s¼0˜’@qü*pa C\NDìODüPE ƒ ]pQ€Y�{AÀ¿‰íÙϱ6"‰õB;2‚2\Á›¡\ÒG ò-Ûk¨ó 2�шÑJ0µ¼IïÃ*$F­Ëݵó~“s! ›¥:Ízð¹æG&Cãê5ë‡ûóC >C4QGŒyG˜é HzSaÀR€›ù(°ÜK¿¯úÄ¡{¼|ƒ1*Ä»£Oš„X%{N¦ËO6(à–BÊÄ�‡Às€*x1äzHüI ‘IO¢À8…ÈFlûŠ�Q¨›4p±1µšŃ$§êã&’, +‘­º'&ã+ÔÄ#¢:?ŸÂa´ZëDd—¢ÄGäµ3ÂF™ Së!(ÑÊríšœ Úÿ é±­41‚\wT3É$¶Klǰ'6,A¨L3;àJI¿³4©ì=J3ºÊ;N>ÂÄ;žH‚ÄIFi±«²%ª1Jø¶é3IÆ7,*h †1ì·M ÑMÒM+†(qx'…@7€€|͉³ p&êÌÃéé!«í22嬻¡Œ‹\ÂûÕC«Ÿ¾Üd™kH'ùó>óp¾„¦ˆ‰2Ø“­ô£·è‡Ì‰å'óB<(Ê[å©tãC‹\Ï ë6ê¼$™Ê aŠ$vË@*LµÍ4ùO›Ïǰ&’’¤:+¼»;4 Ì!¶ÁÁ½4;‚Ã6º™¹Ë,OÀ©Ã³05©iÛ&J— òë©ÔjHy1°°ÐK9ÅÂiӇ؀x DÌÐO¥Q]Qm yÓ‡à*…P9†€t†À�È‘.Oؾ£(ô»ƒ�Ië½z¹Iê:Aá¦ÆI§«z»”lM«1ËÊ嬋a½{ú“ÿ;rœÃ¹ìµ¼Y°úpC¼‚4²w,ºIÄ[[Ïh>Ï|øÑ}:S«;O²ÌR䃑”A,ÊSQ«»Ê˜€ÌP²7&£º,0 ½Ar¬ÒÏPqA!cC¥yí©jR¾rÁ)Qí‘43x0„õ;URU-SU9VpL™­±†A%>°ªâ'³Ñéµâ¥§U?ÔÔ8Ty¥ÅœD¹-'mMÊ»ÛBSâ?ÝLPÝf̨ü·=YH‹°ù8á͘èùà 1‚U8H#UErW*×(H‚cšJÙãÏô'?¤ÊE²™Jœ…Æ#´ù¦ ê=¤/4áåâÇSµ½¨¸ÁËœÅØ3¢˜³ãØ &™³ Ô0�*X}ªh 0UsXÝŽXíQhH@Q„pd…€9L±ÓELÈßÂúÉ.æCÛ¥¥€Ó.,…Õœà{ò72È¢PÄP$}_¬œ.>efŸœêY!7’Ý4«Œ¼SqB­(|K=p×Úí¯&tlÿÒÄ@Î*Æ“˜HµÚk©c©HsSðÔµg@Yê ¹Æ(Å”XÓ#NÙ«|´Å*ÉÉ¡¼*Ÿ$^‡ùk‡à�…ØÍ¯ÜÉ\Ê@¸8ÈD…0i…š³}ÖÝ?¨e˜‚¸Õèø+{+7µ¡·Ä¤,ݽ·E©ZBÅ"²ê¹2ÇÎd­<ucڣڼݓ•2‹Ê4´4Œ3,²Ssü¤]«VÜGmpO}®\­é^š(IWU£®§^9 Îä¯ÚRQ4sp²¤À!R¾Sk'Ö…B5\Ù¡à@+ ×Ń«ó]\D.»‘°£8}�øX¸0„ýê``.1Ðj‡Xn‚¸Vƒ‰M‡ÍW¿›½(-åÖirØŒ#c¾­ H /I„BŒ%}×–Ô½žº Á=3«e|¶Óÿ¡}±š«´‚á7Ó™_]vÚ±9)8×£ëÇh$ƒõè`>"b)wÞ°%¹´XáLˆÆK&ØSu[ Ö‹¹îC{+¬ L ‹e[1íÀ5ÑNLº‘¿£#¯\9ˆ‰ÕOÑ5Œ`#cŽ9cž:&Ü„a„¸LhT€€�l+bš È^*+m»´B²îLC‰³$:mBYaM½ Çá)JZäœ%Ko:fâÄ8̬WOé¸5¼º]$ÆÓ]²¾¼µt�1•6Ì®Z5â.�xÃKb)×:åî_–$D¡¹ZÇ\*²ö'“WS Âû"%ŸJ”J#²µ)¢m¼ÇÚ‚ÂÝÀCªRñÞ ÓK<¤Îƒ�Peþug^vgiC¬‡à~‡é†‚ðGENƒßÇý4ÆBeŽ R¥3%EíC’8̈©F/¶ëí_h"hPÕµidÓ62F|˜}Ïl ȹ¶ÁnQdËN•¬VmCÙçÚÀy„¨$b‚>wiŽ™ ˜„˜%;Ôï$ÛýKš¤7Ê"A§Ž éE¥Ó=Ñû ÎÝgŽ]ié5õ0¡êœÎ6ؾtiž«j¾¬jÈå q†h1… >’ý‚(¬êìßzè å²Ä áNZØ)Æ¿•jGÝ‚áª7¬‹`®&ëràÒÁfkSF¹©Ç—*#T¬=.:ºã61húMÚ#ÙF˜Á™òµIGn–Ï~˜jÖÍeð„¦›ã!‰] äRivµ;c`ÅöîH¤Z¼½\\G+]è͘”~è,lR<~l´3—âvÓ Ær¼¨`‚øPìÞänNåi‹êø>Ðo cû¤G0©©é(éýwië")^ùÒ²F¸SvÆÿº„Ì2úïäí�;I!šH¤jèP#,‰|èÄõ!]8¨"æ-ÄÙ®å.Oþf¤¾ŒDn†'ÙbÚŠ¼5ýD“!c�­»«‡–\ƒø*FÌî_`&Îé»Jo33ª.S4H»½{'È|7&¶#cúʆŠk3®‚rÛkÈbºv£–¹è‚ÈÐcvãpï!r"^af°Wx�0OÙ§'…zeކíw\±ý€J´†O.õ‚0lßÁÑIÿ 2]·„¦ ÜJaçî ¦ü„%e-Ç]HI¾UªÊk—Ì˶%úH˜b�?‚Ÿ r/EZþ΂Oe4ñ¦¿!ìí6Yæûûb§=&èÔiôÛIå„Ëí<̵ž>vFtù9¼>á2jžâ…EõŸZu­:‚ÀWƒˆd(h�8”ÊtEî'\#V>$VCCñU×óÃå ûŸ,‘îF*™C­¶¸ÆBÎLÏaW70ê›´b»æ¦êòÔ»lžŽ¿»«^¸ÇÑ#µN¿!:9Kªmì2Š®[Ã$Dpß[wíRlè$îIA3M²ç7µ±šWöú·*pÌ›ØuLcø6Æÿoª3Î]Üßk¤k)hÛï;fŠÊ¹waˆ“6HØ`‚ðQ÷÷•y_–G˜bêè-…ˆ9€0 ÐY³MëmÔ6ý"û{BŠb\IÉ–3¶ì‹s,Ë)ËQu¡ßtŒq/qH=ûøÙ\+]�^Õ}Cöê ™èw¨º#]*w—ˆ{3­ð¥VðK?}tO–û}6–zs•fòtîûñ¥˜®sþíœáyϹ̩µÄÊH¥ü#¿ä?TvÝñ^¨ä5k>Æñý‹ùG¸|ÏÍ|ÛÏàè0˜;…èp0òrHU$æ®íܨlE¸f1¿ß®!¢j‡<{ F¡%jV'SØxâVÇÃz$'x…%z½å*uF*û£]2âxÇ…ºœFp¯µ„DGÎ~ì¶û—î;­dðT©s%aã¥%5qÆ,ÎTL6ž£âg¨{·Œ°`²=�þÿ�A`ÀÓùö ˜å%ŠEbÑxÄf5ŽGcÑù†E#’IdÒyD¦U+–KeÒù„Æe3šMfÓyÄæu;žOgÓú…"\7XF%©äA€1J| %Q‚Aê•8%TQ‚Àà´ú½v¾�°Äë‘*­:ÑZ¨X«u+’ãj¸Y«¶Ë¤µY³Ý-0K}¦7eŠá/·¨>Ÿx¿×ð8BÔÁ`±*Ç ˜ËblvÞn)x±Ü4Ën{9™ºámGƒáä–$ Jb‚Eu»ÞowÛþ…ÃâqxÑQ2Td¯Wkx½-Þ¾ÿÓÀ­ý>¯1s¹b²9z¥ƒ©Ìø²•>…§)g³Ö{:Û&.Ùé®u/žßš­ê½yñNƒ¤¾¿/Š¤Ê²nc¬¶<®cÕµêÛÜê)çÑø~À€4`‹¨‹ÃÐüAÄQIÄÑ<QÅQ\Y¸åq°\%Èþ�àj¬Œ2ÍÞË®ËA±Ó2Ò;NÜ¿;ÍR콬nlÿ:*â¨Æ4ªó‰Ép Û+²P$ ë)Ì£ ÒAN°ëHnìÊùÀÌûñL2C³'?<é-0nãºÄ:ìëYIìƒbÙˆänÜÅÔ]FÑÔ}!HÒIÈLK9r¦ï®M4«Â+äɾÔÁ>, Õ4ÓA®ô ŠËœñÌ’¼ý�@RÚ¤ðËU9^UÍsG@¿UõƒG-md}§Ø>¡ÂéIIÚV©jÚÖ½±lÛVݹnÛÉüŸÁ±@)Éä� ùÇRúÕ,H–;V­BMyP×K+%#T•:ë{12]d½^S Ö5Ì{*ôI]Ï…ϘlÖ“ßÍd­$Ïr–8ŒGN:Œäqüß* §}ÐKÔCqoæYžišæÙ¼>’Â.ÖWk9*VÖ-ª×»ù†T öË.ÛíS¹¯E0ða³…TȼϼðÂ?5~Œí´:ÕVÌÖz¼ÁŸÖšúÛw vU™géKœnÛ¾ñ¼ï[Þù¾ïÛý¿pŸÄ¹žR‘fA4�`>2¨i²/&`œÿ‘9Ët»ÌU0$¬Ô?Ò%³á{c®»Sþ§´ÇñöÈÞF¾/”‚õÔlOÚ1ùTÛ$d»¥³vó“ú¨kù.a°ºŽÈjU¥~ç°ï>ø+Íâé䵉<Áðü_É € Rä` ýþ��€�øL ƒAÀ18ŒN‹Æ!Ðx”& ƒÇâиlV …A£ðˆô®=!•ÇåPø¤^QŒFeðùLòe?P%³ÙŒúS‘Lfê\Ê9ŽI%Ò„v‹W›SéTiÕR®ú~¾ÃàðÓ�¸¥¬ZmV»e¶Ýo¸\nW;¥Öíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f7ÈdrY<¦W ¾p² ŠóPLh`°i}¥Ôç“;L–7%•Ò&” 2“8Íê1=ÄrqDžIjÓiÕVi£˜P÷úŠŒºO¶§s麘ԣk9¶W·žä³‘EÞQèÜÚLêS;‹Rúžo6§Ýâ ×tü c§ÒåR¾þY—j¼˜+ÇðyÂ9)„âK-ÁlÂŒ% ¬- «Š÷¥Iªœë8m󰨦(ƒV®;«Z¼ð8Ò²›¨ZNáÅ1“Øè$MÒšþF1ìRòÇnt:«ÆË›Jž½.šÀ},`ÚÌ´CŒ¥)Ê’¬­+Ë̵-Ë’ì½/Ì çð¼ZfÆe�©/ú¥:³œJû>±ä?rNç?³ƒñ-(ë|ë$Š£Ló*(b[Cг¦¥·JãY"O âf—¶NŒèü½ìLé6n" ÓSµ#a'´¬@è+Sêß=jE9$É1ÅWG¶4Bx'‘*#pD1YM•eÙ–mg±1."ÒŠÓi;Ïiªä«sƒe ÐäöÖÇÕ|"È[-®5ºÝB÷N+—|n�, ²‹…5¡àà˜. ƒáN…®9ÊgŠå€Ö€ DYz=)ýìŒO×3”æ×‘]®ã[°íÀ:"ç5ËÉ]+uÍÒµ½Õ~§´sÍ®¦d6úXë¨Ðö€ô<é;„–exÊ”ôVµ‹Õ£99‹Ί†M»¯UÝ5C`ìë±äaX–6³íNյ풘NLuJ©RO®¸à¤õIz¾ žç’¶©¥{¶Ùß¿ÄyMQRЛí½RÖXâ;’.¯Y¸®îz䢇ÊÃ&˜Ýý¶ô/MÓõOUÕõn Ž EÞ`œFHn¦˜µR÷µ_#¢éëÞÅ”e pÍÎgªi®Mo[ê|E[n[ŸAnt3Ià)‘s¹íjñÜi¥È1 [êÜ‘ðhºÿÏDïÚÓ¾ðÑ´ÔíÕ™¶®îmǨä +Þk’1â°D¨E™×@Øà„K ˜LG¹ ÑI-­u6¸—'+puñ»k’[ùqµg\”‚ªIоCBLGØþ`x$çE¢AˆQ"DXâB£„b†j !©é¡÷Ψ¾?/Õ<#þößzÛG/Y÷”uÊÑUQÌäÕ4‡0õZ²ŠEªpÂ( ×S…h–š¥Ìß¡B¢Žj ëµ3ÔÍ#F†Šñf”kO"ï5ëu÷5´z¼‹©!€ë @È“'å¡”P6 2ªk™|.x ¤§¤a›ÃÁ>u¹sÖÎ;-rŽXê¨dJ€ôg‹ò<(©Z¢%;KwQÉ#—\rš‘&®cñö?Gà,ƒ�- yG7çáœSŽrNȲǨûÁœ\¡†9P �ŒYïªuÜŠ•‚x$DQ?3³ÞUßÃŒh aʧõc¤ˆ’Šª*ŸÜ!ÝU… Ã(Ó¼|ûÁ7ê$÷”7²óc{*?¯ …Ì®ø\Å''ôNK¢òH£ä‹¿fж@H¸T¶ÊÀ0&‚`•9êA¨U A@„v(cä.Ø¿gK§â¶ŒS‰8ù=arw{uaž³&îÒ¥k?DåŸBˆo#àÑlŸéõçK' MHüׇpõÐÍê‰]ëÅy¯Uî¾WÖ…ð‚CPV@¨ Ñk^91©RÑã‹Ôñ¹“YYi!§‘¨Ž°´¶²ôô`‚ò¸HÖßê™áTÏB‹‘UÝSÒC^•Š3S49,[ËÂV±n)ɂЬ´¾WÐÒÉJ"m(Íšv¦hÒRØéâ§õúê][­_8™¨ë®¤$5;kç­kbì¦EQ¨ð &Œ/±O¥¤Èª7aTû[¤ûRʰÐmu0+-MB«™tÇ_¤!¬¬°¨G<>�‚þnÝ|ƒð†ÂXO ¦:ÆÀ_ÁÊ0 �@q FÑñ½ÚÌ¡iEœ»‡ð÷Zæ©på¤sW‘í^¥ZµÙâ³*}Þ)k+!!~1Ç·¢ùÏ™õd‹Fò¼BiI–¶E«4¨ûÇ—Y‰‚ÀwFŸa\½—ó¨»! éÌÙ Z&Fpq½žÐ)$îR ¹7ö¨·ÊjšLˆƒ×*ÐEÄóN»¬RGÕ Šmá=½ÄWÄ…Cšæ“‚Ð¨Ì:OJi]-¥ôÃÃI‰š'Lð•4 çÖ6[ò:©%º*£Z³ 1:r¾ú«>’噞9t£ªR3‰šc‹w´{5J«Á�éJ1r™OZÇJÂ良÷ÕÍT�, 8!Bž]Ó;onmÔ° „ÈA{—¹úêýƒ¹-äe]f¹ÝÚCïÞHÕ9Þ×ÝíÜǜӤêÓÅÛé!Z:¶rUjÓˆn¯ý>fç`cp�?&À,‚ü,нŸÇã\oŽ‘:4…8}‚0�`qkål6™>?à\-U®ƒ®ZÑËOŠ›yYX.q@ }:˜Â‚t ñ¥sñ«ÄpC<á –²†ÌºBUaŽUîv©±ŠTÃì­°+ø�#À}S°ˆ!¶ÍÓ㽯¶vÒþ „Ð@£ªœÐw3ѦLÕ³öX—Pnò.wÜêD(êÝ©T™ÜÎC'x½˜ñrt7­W3MXx– :K·yß=çý¡¨´{Žð¬,ƒ@Üã~y�œ‰6žó¸ï##wL£äŸõÄeÙÄì–gä,þ¶¾¿ßƒ©¤Åë¬n3©õšï÷¤°(&ÿ¾.•eDíH±âod¨ âp?c]ÍsØà@DÛkÑ~ßÝÛ»€@ft㣿6kSâ¾íŸ”¢3ÛT¼ËV¤èÃ�g®àF°Ž†©Î†reÖ´èX?Lðß'ì þzE>ú‹p¢„\PìÜïO.,N& !TýðI°MðPaFÁX!| * & áüÊí ÐÏ`ï̤ÙC€’BŽrŠ謁È)¨��™'4¿Š0ØE0üΟj,á¥î8Dv×'нk:ç/Ãiþ ÅLwEÊ8)RpJ¶Ù%,ñ¯­üTK|¬ úQhÝLj#ÁÞ�†íÙ0õl&Á6îL„¡Ç£ò™ÉŒÚ‡Ð¥ãšI˜ðÌÞD´HŒ\¡·�‹f¾MôŠƒ¼Ï+= -Õ(«ðÌÊi^¼,ŠpÀ�aøi´IÐE‘a1eqh2žAª átÄ � ±(êFÉo°ÂÊlf½*hNïðèúòL®ÐOšåÊZ °æ®D‡tͪ¢·P¾5è¾Ýtß VU%Ô€-ï,ë&ö>-Þ©ÏœHçæ³èᦢ–K@rO΋ɦðÄæÚÁ)í² qk ² œÀN`~FëÀ{ìJf*fÆNþèkh².¼y1â2Ê €èÌfd ò¹À¤f7’HU<lJÌÄ`q hÑŽº#ÏÉ�¥>™ªäâ@6à°r'²}'ò À¦ ÈaÁ˜àÉž Ñ&¶§¨÷æˆï‘À&Ê·ŠÝ†VžÇ”iíÔÊÑÑn”Pq¨iÅ$ÎCÎΣŽEò¼×i¨xép«GÖTåæO¶GìÿgÕÉ›íãæð˜ê¡kÞ—¬h—RNÿðr#.šÚ’ìûhÂò‹¾&0êXRÒ (313(!!2Ê­ðoOqí>QÄë&pºÊNþ\Œ’Їy ÐØqØVžñSNfƒ$Bö+’!ô‡@>_ru'“58³8óÒÁ4!Fa˜"nšæ*šÿëPæ¯ÄòO-ñª¡/*¤‘;OkeÈèÐl^)ðþ§ÊàÐ-§"kÓÈ­±>ë ^Åì^Úö‘êS6¨ÿ³½+„å?“§’ÆZ¾“Wâ§Rò94!B&á8Ò˜p¬¢žï»>’:üËšú³—²ÊæìüÇâRé 0ó¶<è:72#Ò-LÊö"1my<ï.+€ÅQW82r 3‰BT‰H´HéB¡¦Àöä òe@QÏ4G«2Efà1À—M]%Ë++Tœ¥sM ¯‚ªjàÿ”ºë�s#å,TW>EH𮢫p6OƒY&³07 ¥@㉠Êf¾ÊË ØÖcúÎF3*4˜é+ttÏBD!ð*a S-I=SäÁB”-Lrê¥êZ¦²å­FûI Ø?‡•.o#ª5ôw*óz¼Æž¢vò(V«ñÆÔól+£˜‡!øÀ'2wTYõ¡Z&ÀàŒ€®!ä€�`5ÌLüµ$щ…:ñ* "¶Ð1‹WR(ÓAf„y­ôÆNÕu×.§ðü%—/^QŠC^³ Ñ"ös Ly"n ²‡5üÏOžàŠ0÷¶,ÊëS Å~!ã ! `K2õ¥dvHAÔ(£Š[Q´}®Tè²k1«ý<èQ+Æh4µ\†3@ôöN1„•kZ~K�ÖiDµxް:bB—†B‡AýY3„ á[d¶©j¶­jä$ÁöàÒ€ìáÈ �€ÝDV!²N¡M“%néh0€¶.ó�õ½ ‹Fn¸‹¯ìpòP¬l‘�uÏgZ¡çÐŒŒtOKÕ¯°­ðÅWÏÀ¢ö„î±%J°ÙÆQЀÅf?ä?>¶6OmD“ÎF,Ì?“ �‡AÀJ –±u·\0–Nj½ae{`¶< VÒ+X¦GXm¤j,­Q.“"G§èNu÷Lgõ tXφ¡>ìvÏ-ž7µoS>²ÑR‡Hy' ®—_{÷Á|7Ä.Áœ!¤ A\ @"-E^­lÎõÔïuÚñ6¾î[FDì™UÒñЩrFy<wÇõe³ “`eåpÔ¤÷QÒ:á•Siqæ­%ô²ŽÌúé LÉlN3öŸV|s—©U-p¥Âªƒš§U3c÷W|xY…¢Ùd÷q~hÒg&C6×§„‚2Ñ_õË/wý:ŽQr0q„ˆFcp‡ 5}TÈl¸lè– OªPàÂršõ“Ya| ½…ص‹x¹da¬¡´ ¡l AâL<�@ ^%†³òþôµ<¬Ê$1ƒ62©^£Ð¶)òɑЖ0ÇwñŠÎ&œÙØES«�údMdÚ’>öÍÈ{ÖÚ¥J—×_°-&‡†“8+QÜÑ"���_ïðB`ðgü„€`hDBÂá‘hd& ‚Å!°(#ÁòóJå1)2?1™Læ“Y´Þq9Nç“ÙôþA¡Pè”Z5‘I¥Ré”Úu>¡Q©TêÁ:ty1…Å«s:ìÊ¿"Ö£ðèU~'3®L °ˆTFAn°Cnø„Já$ºÇ$°ûÅÖÓ“Ak•»åÒ=vºI17Ku®»½Zí¸ËŽMp¿`±r\;éúúƒ‹òº¶«©ÕjõšÝv¿a±Ùlö›]¶ßq¹Ýn÷›Ýöÿ±w¾EaQÜøw‚�€ˆì+ŽÈÅ$X+ög5êMq7ü–AØ®e-·,œ«³FæØÜ¾÷h½Äò±–ck²Øüx9Æô0/Óô¸±éú¶¯Ž‹â†À‰£®¿§“_ §K»ÀŸA,žŒ£éAä•‘ r`àı4OE1TWE±sx«‡nàʮQ³´ÂïT6ó£l“$´¤hä/> Â2ÐëÁ¬2(ú¼¨$*‡º«øŒ@O¬·Æ²Ì»*£H˾ö¾r:2Ҳoáò~Ÿ`ûHÓ5|ï<O3Ô÷>O³ôÿ@P4BPªY>jãéŒC 0ˆÀ5&µAܯM²|°±Ð| Ô u; Ó5*ÉS¨h”¾¢ÁÕD¤²ÔÒ´õ®nzõOLÕST³¬äÙ^?ïcËÈ ¢ÃcS Df®Cñ¦D”5§jZ¶µ¯l[1PNOFPkØìÓl*+*¾ol§Z× Õu‹TW]'RPÃçX#—œ13ÚØè:Ñ›ÁÖ$|íHï£!‚<ÒJ.‹gñô é|+NÖÖ7Žc¸ö?d9G’d¸ñ<jÃñŒD`(� wÁUíHÝX ‘]Llãç›^šJûa¬4¼¤±Þy¡À¹µ–÷âüÏ¢bs!ê¹Ìµ1­ LÕ\æ¸3Ñc2ùôÃHÀKúëoBÄóW06¨¼C[ntÞútƒ»,oô°8V4Ìvp‚DÄy7Æq¼wÈ)áE»àZ[Ò¾¿Úf”±Uws»�×î”dWó<“\pÕqaI{4»GÐÕ…Þ+)žÕ¶ØËí{•õ_z#(|ŸÓÒŠÅw#æy¾wŸèz>—§êz©¡<j”ÃáˆBÑÀ`�zÇ8õ¬4î³ÌZÏ>šžÿ·É–ì¯pöëbÞZ«ÊÂ:J:Ji9©&•’þš9‚JÙ½®d:ú "À<í}¥ÅD™•sª-IWVàt×ú¶|­" ´7fbƒ®VdÙ ’âJÜH$ ¯ZC8i a±®r`êc0ÙT£²\«µ]&§1ãHƒpýÞ.ã¥W ¨?%u{¸VŠÖœ ùXj™Ü$Vxê]štÉcñöœMÁTWÃxÙctoŽÆ9G6L?Gðý¬&ê:€0�ËŠ,¤²<ÝÛÚB°ª1ôÃ!—zïHqmý4Ç  ü „nñp-öاRùør±a�Á zé”°EøžçÙ äÔ"ŠIYñªˆu"i1‹¬üDò6˜“d=RÇÕ©£ú¤lµ‰Ä& 0„"–„1Ž“FiM9¨ÈA@Ÿ‡S&T#ÒÊx¢3<:é þ3¨šxû^;rp²:ˆ' d+q`‹Ò%+ÙÛœ-“%$I+§„>Ÿ³:ÂM¤1®jкChu¢F8§ò…èuƒŒa�  [qk+†D·Bt›‚¤.¦¯YGJ¢š€0š'&y;aꩊMž{d‹M%j¾aÇò DtÌ|¥Ì¹‹UEÊRÎü—ámÍþN³E_NZJ@B&ýGɺË1õf£S:š[Gˆù…³4)C %[kuo®®k͘ *—ý;“TÁ>Wm,DLg²Â0ªv ¤–=K¤p¦¦J$¶åÕê¡’Íèž1!öžE ®6fÍY»9glõŸ*#ôÐÎ/¶ì�`_#—ôÍXtVkôˆ´‘L5ÅoK î]ÏÂÜ 0¢AœU=Ÿ¸Cé�b]Ä¥-N4·~}¥Ñ™Fµ O™; ]½Ëƒ4³Lx€Àê¹Þ61ñËÃXÌ®T‹}š)z…1KˆðP´ ˆª×4-ÿÀ†‚@b—‰%$Õfé‚®ñK¯ b½§é$R<‚q] L™Èc4LZÌ`,I‰q6'Å¥æVqäF{Ä] knóÁpÁ£êÓí”T¼r˜» ‡2 CA»jÄû°HׂYg ¥!´ÞëC^¸-¹´a#ÿ\ùšliÑ0{¸b³$MnçEff6 H©Iý¨NÁÓça sj¾U]„9·_꣹Õ‰ÒxX%‹™ø«Eh½Éf¸8~x>°Ê½l䜰qµ»‹¾€ô¶žwìúždÊèÛU¯‰EÈîÕl5x—1î>ð¨Ã+Y¸BMr¡PXhÝy¯uö¿ØÖ Î3h² XB ?šý¾¸ºc:¾»¤’˜Zj.ºBV%bÖ`u'—Ç?ϸCt®V­’ÏVHý&6×høû./Ô¡ ª­ÔÝÆm¿K¹Õ£‚*_kÕý7˜æƒVŽÇzãÅèîžA!Užý»û°¸·ã›GéI¥DûSööI:ý{÷d\VÍ`gmÏ©jF²8m­Ù$xæ Ûj‡Ê¾,aþ>‡ðüb±£]qž‰Ñz7Géxm¼ÀfÃäx�Pø¹ÓøçX!еL=¶O¶P¶Ä]xQú§q3þƒl®©rjâ3=¥ÏÏ+&7X¤g±Ë9ö»ɳ“@¾w£}äyXlñ©·Î£l‡(3xñ216äåÐ^R¾³¬¶Û/?ýiI»¼ì¨Jà�èPÅ+gIõ§ÕpR(Ä ÂÐ_­Ê‹—t» ß4¯#ðH›ÒõbDnßÛTöH|š¾§Ì¸ë`>°±÷%WÙHÎ/‚˜±õgí}¿¹÷Y�×Ãh.‹Ì;GÀî ¯»Çè¸3EMÍ’óü*ž½’œIbrÉÇWÊæóܲK¾¢¸Â²»öé£4ÚZ¼¹¤¤+•;Ë*Âé·ò*Â\cô€œ q©%zD$ƒ9œ"©@ ­Û€:Òï‘»K¤{(”Ò‚+‰£Ò«X'>ôÁÃÔ½k×·* ‹»¢ l AHª3M—Bš©Âr¥B²™¹¼[„ pɼª\.{)ºy2sÎ":®³"“·÷.a&Â05ºË:ìAÌ5Ãd6Ãt7€n:`,¸1X{‡i—�Sœ{ ûkä(9™Ï#ÙÁ9…Aq°·y¹¾ù< æ“$@ñÜDõ7Bö¶Ò™.#”û±°Ó’‰ë®D“”@‹U3ZA"a|¥Ï{J7ËÅEE·Ê­6›pDóU¬rwÁ€®¸I‚�F8¬8Fa±(ÀƒzB[ Ùö©Òqò Ë›5n¬ܧbåŽü02Ë÷¸1 ³c19÷¶-ÛȾKN.rF2kS8Ú‘ù6ŒãCCë”bGÄ|ÇÔ}Æl?.?#ó?@æ‰ÌX©(¶?ÔR«Û³› ’Úí@˪£¸¢/‚\©¤¼J€1Ó/<ly' ëº+« 7¹"<‹Ð:Ú2úm°âX˜z½0¬†»ÄR<òs $³Â¢Ië⫱J‹ x¯ÈJü`$Gä¥Êc…G”Á…¹\25#¾J‹ƒ¸@½£ ƒÁûoFˆõ:ù|J»³’4j8J¡›©Ï6ŒlÇû7ŽÉ›:ˆ~0¬¸)Ǽ¦Ëä¾Ëô¿±@n‡ˆoà0øvpˆ(53ÀI3*ެµ²h&â`ÊÃ<aOG ¢ãÞE$#š2¥±ÜQŸó°»D- iÙ$¹ÁÌÔf<;µÃ[øl„É1óÄL™¿{›šó7„½³@Å|T³ÞµQФÌK9¸…€|Œ_ahJTÀN¤êž¤cJ€°CSD¼NÀ£Kš‹¶1ÔI«¾RJCñ©LÂMµ‹–»ñ)3T³pì˱-Äx²\‘œø‚¹ñ㘼½Nµ�ÐÐ"6¿�l‚è]?({ÈçEv:J¥3ŽC-ÅT‚ÈDÕÊûU2\Ë<›Ä©½MärôÚ „ʼn²Ú É @•„ÑÑtÎ9$E—‹ÃȃåFr“‹6—ûÙ9ŒÙ¤Ý,LRI\ãÎ![D´s–t_‚ÎÒ…(˜ììB”Éôä=ÜWÈÄS»¬Ñ)"æ4ó+“º »K .-”ã¸äk;ôF;¤õ!2YI†Kû ñ[Êâz“ƒG£P)T@ÔA– nˆoC 0H�$=€Æf³¼�ôCµ Ñe¢¼ÈÒ,ÌÙÌÏD¯"…<¤$îT¼ƒE OS57K{@=Ò+Ž¢ÓR) Ø:Í\ŵ]¬ Õ+mJ­^UЄÅè m&Ò}BVUe“À›zBÈóþDœÆóT'$…¹jGEz¥eA|pQøüÈr»™<µ §„– 7ÄÄôv¨™ž)ã£@)fWÕ}×å~¥‚è]ƒ(vÐcô¨óèÕü'/“ZŠ*U„ ‡9€œ¾{ ¬=LA5XÕ<NÅ_Ud ‰½KD¼sÑõ޼ê¼ÅÄ´³[¬> sÆúò â—$Œ@ÇC'|)Qݰi¿/ÄçÊ=&‚}Z¡Ð… hŒŒR ;»ÝWA-³ªÉCäLÄý,Zuq·aü.xXü Ú]sMñ' J{ɱ“Dþ¬±‹×Å¢[u·Û…¸‰´ÁT@\L0{ÌA—¸…<U•$Rñc¹²•YuÀ‰é¯½/Ä̵“¸ÅɾÀ’š}F«ÛÆóW܃—¹Q2Bü®B­ ÑyÞ×QóÊ­Íd" U4¿v×Ê ÝR·ã¿®DI²K}L›™È),ü^ýc Û•àÞ§HQ¥³EIrÂÙ±ŠÜÓ¸ÿÑBÆ ô*¹ÈÂ,ÝŽÔÍ«ÞÝÕí¿õ;]«Ê ž$Å–Ÿ‰ÖŸ}¤ÏkËÍV/ZêOë …è(…¥áßµûßÅP8/Ø2`|kô€S‚§šZDBèÈ¢K ™V´Ô¦ë—ÝCÁ¼m3„DRC*a•êßGAÓ›™´-CùzÙ*LÜÕÃ0¸èÈ“'ÂlÑÕŬE^aA¦¥„Öïºîápœ=Š4(]õà_Î!â œ^(Be5}G×*œMÉÄŒ»Ôs·jVÄ«4N.&Hûµe¿ÔæU5r.T %/‹ˆ}#$zߦ"ãf6ãtºXn‚Ð\ƒÿÃÍF¶tW4›„˜EÛV³<UäùÜÎÛRϵÇbÕa=´ÞbýÆ VFØkL¶ÛI —±Ì%³sãÌÒž_V¤¤\"­Â\j׫±-ÜÔ–É­ó–IÞ8 9‘Q‚³‡€IøGZ7åÆ"HQÞ;¼Hzóc-j\¼îÝ¥ÄÖ=Ò2É9¢$Ù¹&²½Öe—fbZÍ‹½†i6ê¾—“êµùß®\çpçFÇõ_íÿ‡f/V³ô‹àͽƙÐUA'±úðÔFMТ\/7âväºÚÖɺFœE^SùSýÀFR+ œ¯Šô.JúM1ù©½ñªŽu’͇5î¡ $Ý{z¿µ²ÍÂA‚`6íq"<`Òº±Ù|”Ãè%Ô­¡ãÌ�¢ežZ‚bqéÕ¢F^'í äuEªÐìådòÄOÁ]Á­b¢Å æ´þk>3Ÿ½Ãá›éž44_˜ZéÞ®êö¯«uCè,ã¦;�[õcÌí#Ú=ºq×*Dj0À»ÌçÞT(IÖŽWNX)BuÝLÓ›&‹Ý´¸ÉÛU~h¹œ!A#*UY}dì÷©Œ)ÅÊ HìÍ.@¤Ù7MlOQÝäÝ—`+IÙjø7œ¹cwZ|I¬3t'1.]%ñ„˜eµßëÛÖX€€€ Tc0���Áà°xL*„AâØ|%ÿ‰C!±ˆ\:7ŽC¤RTRE'”C¢q9LžY+J¦2èd¶3•Éa™Ü7"ŸÄc±éܪ5CŸB@3éÔ.YF�Å¡·ûð< /J+Yµv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nW;¥Öíw¼^oW»åöýÀ`pX<& )k;›õá•Ø÷v@ ªLÞƒ‹Ñ£Óú|VGBÐAi•ÜäÖ‡`åôù¼´f1©×h)YY­/;ªì';š,2£ÎÊ#|^¾‚ɳ:ýo7ËËï$Ôe/…J qâ|m´#§¨èt]™/‚›Ç¢SzÜ.¥6’z'QN›ÃÓ‡ücñ/¿ßøÙ<lÃ~‹³ â|ž$|GŠAžÃÂŒ% ¬- ÃÌ5 ËB‚>*"`Ð=Í ºï%IcT)(Ãhÿµ-²(ï¤[R‹©íÜnŽÀ­‹0ž´ÎK¶ð:3´÷Æâ„õÇÛÆ£ˆš$ò4xú¾HAôj¸:­+ìÅ1Ì“,Í3ÍLÕ5Í“lÝ7ÎŒ*|‡Á’t™c¹Ž>G±Ô�€Iý<ŽÛ,ì9¯ª£ÅÒsÌü%-q*'ñ»º÷Ä0+¸ÕÑÓ—N7¯:oQÓ ¤±H94"H™¤rD’¡ÉÃÔù¥ñ|S3Uœ–Ú©t³jä%õÃ\™Ç¯µRòÖë|ÊÔî-!`·­œPëF5ûÙjZQœäÊÏ…~ÞYŽ<&W½7ATNWmÝwÞåyÞÈRR Š#¡#¼I’3i<îã‚“[ZζïPôU ƒRr]LÍak VÖâŠü¦¯7‰C‰¢Gܸ²ø¡0Þ¹NU•å™n]—æŽe™æ‹éúŸÃ9~5–gj�à€�€”ÅSM88-ÈÙ·W-e¦¸+QW4ÌLŽ[±r’ ¶oó9©¦Mú544þ¶÷D°"ŠÜ¹Úmw·¾’‚ÓÆiæã‡JŠ:µ;5É·£TýÅNÜsGI7ZÄ}(WŽb¥²VM�Ö:;ݦÛ5{ˆj5•-j)™¥)‘®±Dn‰ÛéD·AâI‡·\šö¯mÛ÷Íç{†Xî9¹ÛÛ†1†_ýBÉÑv.7ôQý³}ãÖ›²žaVÕ@Õ¢\zÀÖþÏ­‚û~M‡SڻŔ‘dGÒ®L×Ý÷þåùþŸ¯íû®'Áú| ¦æ-øµ` (6ŒÄVs™iç‰ß:×°ÈòÍhëñ»©öwÖc‡>o WŸè qU"{g©W=wˆÀi¢q$}F*¶¾Á ó\9tÕ%fÿ ürÎEm’†ŽÒb†oj¨ï«5´Â!JØz ’—¾³‘à mÏdú•&º÷2ÛqŠEI%XTæøñN¼‰�¤›øQ®6FØÜÊAP¥,×¶çžHÝÄ5¨µ§ÁèFâZqý\+õÊ<ÕÆ¯Nĉ[1Pü 4µÖKcor(ؾ#þ´bùÐrñ^ "ÔlÖd›}F®„“²$ºÉEèPѾVJÙ]+儱–RÍú%±ô†nãˆ]�ð ÜœZ‘}…I†— T,SpÏ8ó93òw¤[›_Ë">uôÚó¬pM鱿ø•æ|ÐDç*n½•t¤ObÜ<°Þ8YÈØßU{Æ| >w”i:'š Ý®NfÍ7 ÜZœÐ"Î)Ì^…J„ò%™ñ?ÞÆ¢-Y\ÐÙè<#°A€ˆ(KJ=Gé!¤Dœ HçèÉSÓeO)%”–GÎbxå.Ib+W6MÙ"AÅŠ®âm*É ¸G¢z[ÄÆEJÖQ(CQ cöS²iWHêÅY«Un®UÚ½+Äð×"lk ÑÒŸ”� =é8þ+ãµN)M-IUÍBº%|y’…Q©æ87± kÁ—T²àN–ž­u§"‰Ð—c©ÊºEl^‹Wú÷:Xë¾s•Ô²1zr“è yx†¢’FALáƒ\4¶ˆ“i�IP8ò]QžŽÕûmmíŹM ¦9 m+dQ3ñÆZ /?¦ì‰Š=ºº:“A*°E“í·ÛnéÄQ|³h×Ã4™`ãµoŸm.t\ö&K•dL4Ï¥/J‘on¯…ñ¾WÎú_[ì[…Ù¡å=™ @sÌb 1&¢ÓPpìPY“ÏÅ‘aó(:fÖ"°ñMJ4Æ¥r jš(дå<Zg 0¼Ÿz·i©TÈ­ª BmP%q9ÌK&³«?Ê)ÏÓilNãqXM“aL}0jF»ÉãYt¥’-+M#ñVe)ˆµ¦+¦ŸgP¥F'^(ݵ¾ù2f\ÌWíà0ÃUµª,…ˆŒ¼QÚ¡Ù\ dؤy§ù¾žx²¯6y6;Ä<E3ï‘Â. ew]d!²™’%ðŸ{ó>™ÓZoNiÝ<ʇ8õâÐp‹a2Ä8 2` �àÜÚuÑ´òÂV¾æ#ÓrÚIìuu:eŸ·)¯›µÂÐð:Bi*_ œù’7R~Í–×äÄá„¶e ¾L¹‡ì‹‡+[6m ³¯Qă©Ðí×zŽ¥_+T´ÇÚ×îÓÓC’Sк¯aFºª‘oÞŽVS¢ô-YèI²ð’Œ¶ÓOð^ Áå”qŽxî>VÚó ^+Üyñ8w´ŽsaG| fäÒýEX2ŽÃ3y pö¼7^Rµy2}NÖÚÀŽÎáŠÜ¡ó(QTÇØŒ›LpŽ}ÏúAè] °‘®Eè`CÜu€À ��Á¸mÈH12U‹»6jÊMœR?ÆJ…ŸgO¹Ö 4ÐnŽÑÀý¿ÛM½FÜKWݘ;Õá²ÆÖ“;HYùŽÄ±ñ9ÉP¦Äß¶Cp×Fë*¼çïJ™kô¦A£Ùû’åê¬ÅØŒ'ŽOrA< ‰éýG©^¹§|PyÎó'·kI|·ë‡(™‘7¸ÙA2Þâ£Â‘ûï¯lØ*.œ°_†Sd•<n怭Ô.‰-²–꨽ âãÕ}ß½÷ÿá–Xwp¼/Cð#À�0Jõ”Üv[øí¿d—ž¯F²¿ÝâܰNB`þ‹I�ª+ë<ÃÐÂMÞÍpzo,²P³Ž²Ú¯ôŸ@¡NÚ‡lœµ‰VÍxóÐ7ªèÀDà x.üPY°\0ÀTÀ^µ"ªæíi ŽŠšÝHDòIŠ> ˆsÌß+J:¦yfkOæy®ì¥fø�H¤ LðâŠk"*Žr§Ø Î{ðÁ 0Å pÈCô¡ôA®RaTê �€æk¥Mà{ ðÿ« Ù©¬4ðþتûÍòÂ.�KÎþ¬m±JŽIo§�†ü:C⧦*U­¶©¬bDFHo¤Yç6Æìê¡ËšÈpn®‹T±,xzÏ:ëæËȸöä¢`ÉÊϬ㠊VUêÙå¦ ´"DàHÌ/M ±ñ+ÐbÍMе9ªÚ*õ†œ=¬°°°&¸ð0õ±¸ðq»�êöa/鋲#‚û * œû‘“ñá1åbE áô !„ bd€`�FŠ\ð÷‰ùñzç¨zk\Üñ¢á¦cIêniŽñmpãc,ZÌÈEŸR)…; î8&/¸¨L¡ ±"ÂίˆÙ02ñ+§ò;Èý ÑNðoó&N4?F Ù¬æ®c ¼`x�£‘é)r˜ûÐbæ2ÞOvcqÍ )õ®DqÌÖ‰ßÏ#¬ºF»ŒA‰°qL ÃÉøR(Sç>…Ìö)n3è„Hþ@:gØûr›/ó03Ó¡^Á`À!xz� Û‘¨ì–âEºßæ2G)†r«0³’<@!ü‘Ò`>ñXGˆ¹Êžî¦ô ×ÏžÅûHža,,›Prmdš…ìŦòÍ̆ÚuK4nÈ@‰S_î,¸k–ïŠ^Å’é7oŒ4NøSÌŒYF@N´´ÍÜWŽY:^”P 6RŠ¡#)1‹0sÕ=lÊAO*{$Å6®G¥iI:‡¤‡EÊ틶⨺I®ª¦I†ÇîÎÖ2ßìHšó¯E8Z ¦Ê  Ðå¯-ß#.ÄÁÿ RöÒÁs=”=CôAD(Þn™1b–L�éà †p:i‰‡´p˜Ä-îP¥ÃF3{X‹mvY¨*$dЮþ¸²4‰¯ êéÄjÀ©mäó0oî2ES1.ƒ;ÍÒø‰FxC¢Eíä©o£Ïêήú-Á&3ôògÑ&7TLòp*Œj”i$2'(HÂŒa% ¥)TEOõ�«ÜÌ °T‰Ò\‚ÔoiÎÉ-rÊóMô¸n`bBb!­\!l+N[9QÝe°¢Øïäÿ"6”Ô6ûT;P5]UõaV%ÜÜ ¾À¾¡ðÀ�€Õˆfä¬g,+,S¨³âÀVφT²Þ¨®m'çQ(rr­Ϙ²­îÁð<›f‘ËA#hRùô©"¨÷5Å´†Âñu3å¼Ñ³ÿ.²HjQÌ}­¼a$Ri':šsŽ‚ÊoJriõ°º'„:у3ÑVVaçî!NÏ÷_òШ”wN“žä'k[(Utã-p0´BËPò-!­¹!2WJà�}.u µ[bmföqg"ò–Àä äAÔaÜ!Þý¯ß6*œÀ´î,²Ã8‚αiìÐÌó2B»#”ªÑ&hÛÔë Зk§8lôe4Ë]Ï…>æ$˜V,ónU¶ºëJQ%§ñ¡9$Ræt“f÷ma+Ð>ª¾¥ ™ö½m2¦¸”jð5Èæ©ÆJPTû=6urw(e`T�[¯ �¬])( Y´Ûj´§L#•õJËZ¢–ß%‘4LJi«ÔëÉýO�(UT•�šW+w·}w÷|áúàÌ Î³  ¬�ÂŽ´ÃGRY%UÅ%ñ›v¯…L3\Ò|Ä{{é†H•õÏ7KÞ´·XÓ±NèŠp¤ª»i¸æ§;p“JxÚé¢Ùvyòã RÉiÆ>†§PqS®ÁÎHÛuoUÉ?(?GŒý<h[l¦Sð@RMöB=TÐr�(Ä$w!Oׄ¸LMU2u”jçÅuóúɬY_ׯl6ÉU‘36ä³VZ°ö£�Ö5fÇ H"AfP¸·w„ø™‰¸)¶†ÁZÁ\Aºa¸!¶€ EÀ€ÔŠÕéú“õ¢ è\vTtPpE“î§Ž“ìyíbnæ€j`ßÓÄÝš§ Én z<·æìÌ{5ËÚÇìÈ‹Í:§ÉJ ñ¸ÅRóu^´l|%Y€Ré;\q*ñ/2µ¹Åmµ8´!?WQsFÁe’z€�Tõ„V‰ùi–¤%=×3u³).v¤,Q½"sezRr÷+M „J§/’U®íµ‡…ó|“,a5e¶´ð/XP¹ÃÄç�;wWy–Ù½›ùÀôõh€»WP�ŒÝ×B’ƳŒÅÙ-3)œøè蓪ZQǃ&ðð¤w)B6¯O ¢t®ÈkdSàÆðn\-{cfȧŸ§&3-].2*¹7A~ôш6Y•”ª¯¹‰ÖÇ_ùuc©é'°Ecxx&’³–-cT•‚ £A„Tú Yçº|.×/—4°Üòþh†:VâcjÏèJi­5÷Tñ=<q¿¥ŒM€FÙ.Ë]VRˆ”+eoæÒ€Áy‰z¬úÑ­+p”ÀäÖ~A”¡òÀ�`6 R×’ù?sx>F¦ók%ŽÍPx±û °µì­—Ê·ÎG3ºù-­ÝèQq§Œ‡(øºjS5¡KPóµ(‰ñp‚1uSlŲ¢þÅY@– JLÚÞnhF—Âj»=Žb���ïøƒ€`Ð`*‚À¡HŒUÿ�Ã"pˆTv- ÆcñˆÜB �<Oí$R”¡Y´Þq9Nç“ÙôþA¡Pè”Z5‘I¥Ré”Úu>¡Q©Tê•Zµ^±Y*™&›ÆâPyUzC`‰YãÓ[d~#!¸Xëöˆ4Rm²ÛbØÕ†Ùr¯Þ"×9ּͰӼl{>’Èì‘l^V3ƒ>ŸÏ°ð0:¼&®ë:]6ŸQ©ÕjõšÝv¿a±Ùlö›]¶ßq¹ÝnÖ®%ª¥º©]¸×`à08 ì3X­ÆëÏæÇ­øË­»‘ÆF:ÓŒLG¿ëÁ!ž^þjñ¾Ä¼]އG ×âc_ ½®çd•]ñò‹ ý?ëÃÌî$ïÛ2ù¥"lÌ¥)Ö³,ä¸=¯»2B₾ïšì“²ËÚÔ±BÎcÐŒÅ/#ê¿,Ðú.‘¹‰DD‡³ûçÅTK@,‚o:kCÀ‰²©L.•HÊü/ÀЋ¡>ç‰ò—& ’hÝË2Ô·.K²ô¿0L3Æ¢EHVòÂ1:íF1« !Dñ{³¤Ò"{$KK³Æk;/9Ò„i¬Óì–¿­r{· #’dÃŒÄ&¯Cëü[=²Žlã=Gùøm G2Tµ5OTU5UWVUµu_XV5’rx¥®P?d�@P gò2É57DÊSBÉoŠÒñ;O#Þø¾ñäWj¤ÒÓ¤Žš9OW š¼Ú0<ß"Ó6›ÅÊô2éY2SÉÇ3Mžó¯p­Á_®»øñÛWL7ÍÒkvÏÑÚ²Ázá‡S7e¬œÑòå5aŽŒNæP®?C¿qü;LD5àÖüÕ¿ÒÓ2(Úòþf0ÅÞ¹ RœªI )g h:‡¢hº6Ž­…”ä|’°uëLGðìE±[±;–ò×&3P}H·¼½kÖ. EB[F;wëstPölËT1oR1 ÅI¬ÏFûuŒ†Ÿlè<´"ay£ñ<WÆq¼wÈr<—zg¡hp–„¨Hg¹Ô€@8�PƒÜ÷Áoœ“F­úÕ$ê'’DX·Ë½v,¾ÉFZó^9®ÎuÑbM–¥óˆÑx+½Q£ùk¼ ´åL:·#åtTý;cR=£Œ³[ä¿j4‡AÚ—ý+:À[í×Ýü{føy§¥ýœ[Ke݋Ҁ =w(7\ÃÙIã.‹éú°‘äKD:g¬ýÉÁ8)`´ƒè¦uÚ_ ‚RŒ¡B@5üÞW«ºZl…°xPºZåCp…ŒSôò”«ü|KRþ”Z‚bDí$תÁ]C�3ƒìšzáàÌOŠF)E8©b´W)Â\k qf8EÎc4€€&�À�}é­½T’ÌÒjp|¤-üÀF¾Ñz‡Ö!Fóö¡_)Ò~}yÈ&l¿cü\ ¨¾¦2ŸÛ»�(‰¬¾FÚúŸì%'GUC÷ òØzúdOr<3ˆæìÛŠzdP­¼cºÂ]l••MŠTɇdÇ"0_ÌzLÀ'xÂŒ,PPuµ7ä+"“Ufd¨–&„›>KbiM9©5f²dƒ`¬·Ç—nNd ä=2z8}à< ~’.!0Ç+'8–Å$Ç»F).±Ñ?É!¹Îyt"LK±5ÄMz Ah5¡&…P²j4‡pÒsÌKE° r€XIþV/Fa'å[’2åb=› ¥jëcjô þ¦�^M™I¸ÜÙ&FÔ=7Ñ%ߋđ†˜¢ù‹`K`‘Ú·˜XÔrÏo“öS<áTu›kAÝMùÎ[^‰î3 Áu_Wž¢ Ž‚~©h,a|@o Z š%&… ¯æ½Wº ™“E"lì±§Ê…% à]„;’¿ÂüIkŠN“í²FKF>Ã[¼Áƒ°Õ-Ú¡bZ[r\ÑÚ @¨UeÙR#‰&}à Úùkmu¯¶ÆÙ[2š;Àì£<B QÒ10õÀ@c1f-_›Í¾¬OÆPa©m9´’ޏ7XûZk i(-òœÆ ñùÕFðÔ·X¦Ãy•€‡Æ“Ý*¸›*­"”o¾Üùéï:ê®nMCùŒÎ]ÅGŽ4ÂCë Q劻¬äNÇ/‰5ØyHðR«¢Ê[óÙ°ãÄ}3Á�S¶˜‡b<H—«õ;@ÏRð­·ò˦JÝ­Ö ³Öù„®û_{ ZS=<¹l, N² ×K%(N×á“KEx¡¡ƒ>X²·8(•e¬Ä¹g-e¼¹—rò°ƒHF Á°&‡Àü� �s’‡ó17<ÆCÚÂŒø²l=eÙ+¹[nн—þ_RuÇ;e½×½: ÀBûy”¡¬R#MÇ‹YŸf¨Ç­ˆËª‘‹ÉëO2© …±[çÉ…¹Œ=yÊ·Ô=EIÐÂtsHØCÅJ-ÎøÞœ(ð!·¬Qê¡ah X+˜’5Ú eý™³vvÏ'�¬U©;­Ú‚ØM³'Q‚4]ã}L{Ck] J4YÏMa© å'°DÃb•K©ã¦‘Þ­a»b�ö?ÇÔKâð%Ð=¡Áx7á'hÑþ?F@êtk‰±„:F¢¥ÅóãFMUw«ÊaË’™¬é߀§Œr¨Û–0'Ùžó¾]šeíÂÆ÷Èë{÷Ø:î ļ5ëåÒ1x>ÝFï´$û’¼sHÑü  È„Wòñäë£}YdFYȺÕÞsž0wY~œÖ›OM@¸¬®5ªúWEuÂ~ö¡9Øó8(áþÝ{·w ðoj"IÅiyÜ«ÖéAù_ó½Qâ}Ö®Ùœ\R5ÉÙ}“j{³¬>×Yßúœ—N=>Bƒ |rD˜Qø?·ø Ü ,wYë}w¯öH^Qv'†Èžc¬d‘ú>€iÇlvuxövU|áŸ>n–@îéûM}w‘Ú¹ï¾Õm`ðןy¤<„õbî&6vÆ»ïs,õ4§Ô»õ,þc BËn™æ«BŽY,E”þöRþ/¼ÀtI迊ÉÛ5©»k? �»‹1ØÀtÀ¢Si»sE©ó›–Û´7²©«åºX¢«Zš£ò¾:ž%S`²ó%)·¹²ª.ñ½­œ4iüŒYÁ�Ð=TÁÔÁäÁðÒ³x-àb�mð]‡ ]€@€@€žóü·ç4ºM$s}´‹´�þÀD¿šÄ?šç$ô0¿|.ŠíAü43¸«³ºCT7Ä8[iJ·¬ À!Ú§©¸ø'K”¡›ö—ü"1á”JY¿q­/1©ÈÉqÛ'¹J{ÁŠÂ/Ùq*{¥²¢%½H%½\9DôOÅP¸(_‡0_ØlÈf‡`f‡¸~¸ã�q,ÂüQE¤Ãc¹ÀlZÅÔ]ÅàƒÀ˜ºû¢ž Ã2þ™a¿·Ë“:K³´@>Z"¯êY5n4»U*S?  ø0+@—“,ð‡à~²¬MÄì^ÇDtÇTuœˆ††s†Q†ØP…ÈrÀ€ ŽL(3ÌvGôŠ[Ãt€H$‚»¼:* HÆÊP72“!dˆ+J¨Ò˜;c‹s”™ôÀËÈ?ÙðÀ¬2¤3C#<[Ĥ $¾àòÓÄØ_H4˜É”™É Ø†s†‰„¨hhgÅh{0ɬ¡Ê ƒÈ\Ê,¤ÊR¾H@Ê#›A?„mHén ÀÜ/“D“ÛÅ%ûsÉYq¿aÖ<Kþ»zȪ|’SÏ«.:òÿÄ „7ìr…à%I„¥Ë´»ËÄš=(~ tR†èR¸q…°(Ä(B‚AËÌÅÅÜ£ÌdÇÌ‚*HAëÆÿ§Ñš¶#X» CBè;cóFbé4Ti¦è ±ÜYŠt‹®Jü*èÄËÔKœºÌŒÙͤڽ€i‡pi…ho…XYY=(}‡x|‡x€4¡M´äÅÇNTæÎq¡XUD犌׽LºN¤ìÎÔí«Às‡°s„˜j„ˆÞ…¢¹ÇÀ¡Ó�îOdNdöÏ„øÜèΜù 4ëMŒûOÔýÏá¡QφØyÔ$ÐW‡�Wh|‡hä�p€«ŒþГƒÏ} е ŠŒúPÀžÏÄìPÝÑhI H…°r¨h`g�`€l}Ðr3Q²ý Ñ¥ÑÀÐՈ͕R ÑȆ½Èe„@h-‡pq pш€Ð!R¢ØQµ*ÒÄýQÝQõ,Òõ/Ïe& Ûí‡lÝ…e€`Š� �$(Ó8¨e+Ó•:ÎU-ÑÍ.Óµ=ÓäšDï‡({4Ý…\Á…°t‡¸tÓU)ÓíG¨=:T…IÊ]<QÅ=T¥LÔÔO”ñ"èX†¨w†¬ÃL0�€%6€%MÕR„T•UÕtˆ€ Õb€ „BaP¸d6ˆDbQ8¤V-ŒFcP÷Ûùö—„¥ônM'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? Pbwƒ]îü{ Y§ç»õîÙx¶@à08€+4*åv½_°XlV;%–Ídx¾ž !ÒP¢ )ÙîW;¥Öíw¼^oW»ä2¾àpT(ì~C#’àñX¼f7ÈdrY<¦1üÿ%É:;Ý:ÙMG_€@�€Ù]f·]¯ØlvPÛM®Ûo¸ì÷[½æ÷}¿àIïü%ß ‘I8¼¾g7ÏètzW¶ËÁ°ó~=)Gì+UÞÕƒ€ÀàËÓôz}^¿e kl·\=¿?§×í÷Éðÿ¸ßå? À, 0¤Á®K§áìMšäÊ €@ƒ*`< Ãì<Ží»åÄ‘,MºoÔQ¿ÎKÆŒeÆ‘ª mž&Ùà}äœ@§ùúiÆ��OI’l' ñ âÜʬ­+Ë LU,º1k.L Å1̉Қ{“ÆÁ8yŸg™4l¬.‚¼  32Ïz²Ÿ'éòÔµ <¸“qBQMKt[w/@u%IÒ”¬sÇ1ð¤f™r‡$‚~'i �@ Étµ]2çôØy¡þ\e¹¦wšJ´5W²”4G`X–-ŒÆQ¶;#HEöUgÚŠÄf†aŽt˜À@“fÁ2uŸ\+AŸï*®ªZWKÕ:ž'Ùâ;…ãÈÖ ‚yv'§q§mSaJ—öà‰]“‚¯Vf…á˜m p‡� \\œ…ÉÔ{'èqU� V\xvLàN§qôw a8ÊAd 'Ba¬ïß™:ç€gYî}`ùúÉ…hZ.£ÃåIºSžÐqÄzœDù²OC5‹.~€­V²ÏzF¼Êéð�€QB aˆ&fy®njç:ú»žn[®í0h;º¢o[îý¿±Çèq€`R›…!Št˜ HQ}§Ö·Uºïͯ³©ðl`O‡åd hNi›g8neÙÀ{Ïh™ï¿uÝ÷‰aNn”Çáü~·Q ár üƒy LëÞú‹>Â|{)=Ò†` h†u{~ã꥽Éóý ßmô¤ýÏÙ÷þ,Øy‡Ùëq™gY’PDþÈžüƒ b<ñüÖÀ`ŽiøÀÒ‚GÈþ%L JéÞù|.µ~Àâ4ù ô!„EÝõÂ2$û¡4)…J)ˆ‚9Æ��PUþ¡ä6ÌCø}tèÿá\A'o]쀡8…�5 Ô‰A¶à뢄F*ERk b±…f.EÓìZKL\ÄG1 MH,|ï H™ ^ŽDÍÏ:E�?n¶Hœøã˜�ŠrBHRü@ä1 ‹r&FHÓŸGÈ®µ­a*5D˜çÞ8TÎÕÓ£[WÐ2GJR0aRP—‚h=â1â„„ršZEX±d\µ—RìšÆ‚?^™ÃÌo ÌQ#äx 1Ò0Í"s��0€Ö&�àdÁ—“l‹§QÖ>GXYAhGƒ‘"Få„–E¨ø(y¹;á4·‹’æxOYìA†xíãq€`jÈ(ýÃôE !=àóBóH~ñø=GØôN„k¿ùI=èÁN£Éw€,„Ø=©*t6è9!¥¥NÞyE™éJé„ zï^maœ;hŸBz …¨3ãk „�0iáñ ¦´Æ¦Q£Ì;ÇÈï d‰x')!'4¢v"&Sk¥±Z—ÖÌ×ÜXÄ‹…‰ÔB'ÀšCÆ.‚åÕqŒ„/Æ·Eë=%l}*<E�@Qܕչ Jl��@ pH,„¡pÈl:ˆÄ¢qH¬Z/ŒÆ£qÈìz? ‚ Õb‰ šO(”Ê¥r‡Ûùö—„¥ô²o8œÎ§sÉìú@ Ð¨tJ,õüÿ~½_`r=\hÖš0Ã×îeûµòí�@PÌ?íp` ºP£\®wK­Úïx¼Þ¯W{éÞ; cÔè8 “—DƳ½«X^òyL¬1âúx$‡IBˆ€§–Ðè´zM.›O¨Ôê£Ò9.¯_°›Ë¦)¤Ûc¸Üî·{Íîø�Ùx6Žö¡�2@ ‚”EÑo¸G•måSÒÆ2Qãùù~wô¡À° ,¿À½ÿ»ßðøü¾rƒÉöò‡ Œ �À”¡‹cXöEô‚ašgæ‚ „!J…!XYkaxi•lÓÍ5†âŠ#‰!#Üü=Þ³ýP>Óä…43ìý>Öô0Ì:̳Uü!B'=ËcŒ´AWm‘€0k{QAn�¢YZW–%™i _WððI– €ô®c™� Ü–æÔž fÙÖ~n'YÚwžfyŸ¨uµˆ'Ú ƒ¡'rðå.ÏCðô!Ìòþ�)=k?ŽÃàëŠ))d@udöS5p�P2…ª*šª«}gà9ƒ§ô¢Óy¢šêʲpƒg:ê¿°, ƒžì:ª‡Û{˳,Õù‹‰£`˜6ÏmH?‹„°[ÞP-ãA� U³®[šçº! u€`˜Bq‡™“ªÞj›.™n¼œ ûÚû¿/ÛùC±oùnÈm°,³Âú !îX-åè�ªP7Æ1œkNWÄû<k È@(  =¼ë\r¾ ì¯/Ì3§Ì¡\Ísœéò¶0¢Ü(˳¹�Ö•˜ ¸®%?;Ó4Ý:ö\£øúÇÏü.ëÁAÊk=ñËkícÙ6XG4ÙžìÞÊÚvݹD0Ns�’5 ìÓ¨v‰Û÷Ýû•± D«�ä‰ È¼«\c&ž/€j¶ëå9^Y@Ú9v§kæ¹Þy .ÎRè§7Jbäã-ñe‰b[¹þ»¯ì…À÷?Ox� (Ä0×]½{O’ð¼_Ç�9Ÿ!zç<¿;O:s¤c0†pò7Sìô™ gÏø>‰Ä€•œ‰àÔ —ã]<OÃóý3Ÿ+õPüßãû¾ÉLGáp5Ç€Ö[Í%þ@ˆì ‚-vÀ ÜL À˜//o¾çå ÜXÏÞ“‡õ!}8ƒPTÑN&ÆÀ™bÌ™ïÂHc ™Ûhï Oƒ@* L¬†d¦ C胒´ˆd~Dh’……ÓC 3ž±ü·¢TTŠ«¡Ù»VL) ŒŠÅb5# dŒ¦æ"Æb)#Ll5c¬|¡|WCèËE¼€ cÜ|N¥Áˆà(�˜œÂõóI#éŒr2GÉ‹$‰ rRK—!Ê=‡(^ánp €„“šSŸ°=Øc”'ð  �œ^4ò.TI.%ܼ#N]Éi{0‰<oAd_¸µ€h°ÂaÍ ¢^ÑPòCÈ<�òÁPm62Þ^K©¥8§¿—q΂"9G¨å ã-Ì¡¸Å§Lôž¥‡h=ÃÈ/a°ÍÓs7åÜážÔJNYQ9è=ã¬,‹Ð¬7^Ùô2‹Ñ‚.\ XõÄÈ*‚ ­6è » râ‚ÑšS(L§¡tªhι80åžS4%_N©Ù d€|úñfgº“JŠQO*\2¥’š—TÉLT‡a!ë°�eª5z† |;ÁùÈ0‚yó2sßR%=J«õºTé1T+|ƒ$9 A´(À¨ µvºX „\ ˜óƒÌ€!DôS>u®SVÛdŸq’õÎÉÆQj8… zaÜ—ÉKf-§ƒô|LÀ#ÁÈ‘}`Ù£¡ &,¤¶®¼€€€ Õb€ „BaP¸d6ˆDbQ8¤V-ŒFcP÷Ûùö—„¥ônM'”JeR¹d¶]/˜LfS9¤Ö`ºr.M,S8€€¯ðmG¤RiTºe6O¨TjU:¥V­W…¿ßïç«õìõÀ&1¬S‰Ë¢cYÞÕ�Á›¥Öí1x¾ž !ÒP¢ )ÝðX<& ‡ÄbqX¼dbÆärUXì~C#’äóY¼æw=Ÿƒ–×å–#¡„ ƒ´½f·]¯Ølv[õmü�AaäXÝf´lâV»m¾ãsáru—›Ýöÿåtz]>§W­×£ãû¼fVA"’w<^?'–5DŸg¥3qJ ‚üß?§×í÷ükò¯WÛÔü0P3¾Î"ܸ.OÌ›9‹âüÀApŒ% «¸íBÐÊVï2ï 5Ä –tžçH|Y‡` � EÆŒe²Qp{‡°*‚ÂðJ/ APØüÀÎ4IkIl'Êœ1(ÆãÀÌʒ̵ g¡Ä2Cºy›®<·3ÍLÕŸ§ùúzg € $ÐxM ȰC‘5ÂrTèP- CÑ ´§DÂR³1FR‹$­å¸PŽÆHê �«ÑIT EQª±±ð~ŸÈ‚©&’ PùBsìÍR<”Ÿ\W•í}IQuûÅGCÖc¥çáü~¥€d|Ÿ§È�€VE­kÛ({«À€“ÁñB³m#Û.Mu&]7mÝw¼– àÙØ’Åç{ݤ‰¨HF¡<ÏwÆàËj`àÀ Ù,!l_sÏø+=uИ¶5㋭厳—®A‘Ñ'êqŒ&�¼p†úâ䙎e™°öQøzŸ‡¡ƒN1ɦhÆc£é¦?¤°Ù™§Ä4¡EKÐ)NÓú†µ­ëˆ”l{[« 4 áHÑ'èZêë¢í[nÝ|i{z­§n[«Ç8aìP}§Ô[n܎ͧéÜ|ÂP:%’¡Ù/Y`2†ÓÁªg)ËóFãÌ©{§9ϵ§1ìr‰¸Œ~ŸÇîÿÐum$ôÉà`áÁà0rß'×&¼·áøÏ7â¦÷‘å°£qŒ6' `Ô¾g­ëÅçáÿe+b@8$Œ¡@Ì‚Außû W…ôýŸk•ãýÈß•øþŠIŒt˜£aŠ4ì¼T¬€GE-ÁîÕ˜ma¼2€Ê£D"¯® AX,a„"Î AÒ4+øª £55p,Ö`ô)…EÝÂŽÑð;Bx è9€)(# ÈT‡î3H,ˆ�ô ‘º)ÔÈtÀÄ8É‹°#¼€À@A�d CUC â:ŠŽ2è"eƒÃ¾)„1l€øEËV5GXìCœ*”@l!†ÀTAPjú0DÅäDNŒðö4Șް8 Õ£i%â6#ø|™P�ÀPuáØ0`ĵ¤,=òbVAÙ$l­}à Óq†[ü––Rî qø=ÀÐ Ql ‡€` B´Zò¦J¹y3ߌ¯‡rÆh=`¶/‚ÀÅC�@5gíp¦T €0(‚�£`8/9™ætážOiC‰©<Þ` Bôs É“>(®’ (}ˆ“|_Â’·^ó¾OCÜÄõ…sÞˆ9†FcÜ^Ïú+GÚìšUôÜ€6¨# óÐÈWC©1m´JQJdÝ…ˆàÄdæ.©½Ahc´|ŽÐDA™¢tÈ*KKb¡QŽ˜T*¬Ñé¤)¦Õ]µ ¡º*CÉ å€ÕÊÌÆ–€ù�€T‚X ³¬³J] ª­g¯Lr¬Áê·^Úx«¨9 €ÞË €±K]íÈ\;Bà% ¡ð‡à&À›L®ð¦¼Ø»<¼+ì¯ö}¡Ø+ a¬@´–­II ]' ¡PWþ֬ܳ¶²Þ,kC­½dvšÂØ{p®BPFÆTy±æ € 2  ”/½à“ÍSm·0vÝÜ›¼¨-ü¸7}‹\KQqï%éBÈÙÂ!ö<PA|�¶ ë—»pjîÞ«üšï ¼wý{Þkj°& >¨Ú÷'¨ùp‰Â(�À>ç/Ü¿¸+$üp]8Ôâ,Lr‘µoƒæÆ„Ð<ËøQ`l"¼ 3°Þ'ÇH‡Á,CŽÖ>$½"Ì>lj¨À¹òÙ@ü @ˆ*©î»Á\s‘r ǰå•y°F^ÌEß½±ô?‡Ðû£ì'‚�¡ BˆDaöåX%•óy^$GeÜô¨3ÐEU›�``±`?‚ `v~¨ØuÒ$KèWAgAéÔ%–à•a@d`„Á‡§—nÕ¬˜É©8ê)!q¢\$Г´“ôoƒë á*¸'æCVlS˨ üµ(N`8¶2Ö£lR1’ä'(»GnTl=Èø—à|‚ ¬™þÂð{\¿š<ñpOa¢WnïS·²ªp‚Ô$ Š› ÷²¾@á­ýº!ÌP@/à9”~]Ä>È$ @d4€Ü‡»µ÷o ŽEJ|+’@)ÉÞ…}f0 Œ�ˆL* †Ã¡ñŒJ'ŠÅ¢ñˆÌj7ŽÇ£ò ŠG$’ɤ&–!nä[�€É<Êg4šÍ¦ó‰Ìêw<žÏ§ô ��^§€@ „…§Á‰üTPêõŠÍj.N]Îö¨ ­Ù¬öŠ Ñöô#‡ ‘ênÓtºÝ®÷‹Íê÷|¾ß¯ç9½fáYÀ`{þ+u�¼i+2Ðdc2ùŒÎk7œ‡™F%ë™x óºN«W¬Öë®Ï×ûõøþ~=߯r€¦R”È’¿‡ÄŠ×kö—‹ÌáÚí¶ûÏ›ÔêõºýŽÏjøÆt1J«Ò,!ÛòßßÏ÷ðTÕb€§Íôúý¾ñ¢Òø°Æu1RôÅø€ 8—…G>Žõ,S‚Ñè1BÀD,áuÐD-„#€ó7ܨb!N3èóü£JXŠ-‹¢øÂ1‹Ë“Œ¸ xÁ(Ê=HóÀo Ð.£é"I’“‚Û(È3<zÀY.U•¥yau?Àüû?³þamÏqE»P?D fmGÈóPŽ%MRN ›¦éxû "Y ¹Þ ¨:…BLC ÃÚ� F�€6†’$°+‡p¼y¤©ºr>Óà7,Cðÿ? šv©ªª¸^ =ÃÙF�0!À`v €¼ êʨæ=Ž`ø³çk!˜OðŒ¡<ÌzÀk&Õµ­{a{²Çc(t* Òœ@ëf;Ï“¸h F‘ô2 .[Âñ_Óäí‹ÞS¼¯»òýVeº™µ<ϳÈ6C4F0œe¿¨clò6„bØDiZ|=æ²À*<ÄLp=LÆr<“%¿P€?àF¶)¡báX„�Á�6ˆDbQ8¤V-ŒFcQ¸äv=Hcï·óì. )ÈJ°Ø,7"˜LfS9¤Öm7œNgS¹äö}?›¿Ïij](Ži#€PmO¨TjU:¥V­W¬VkU¸p�~?ß'ÓÈËCgaqÜv¡•Ë¥Öíwœ8òŠèžù~¾@@ã ‡ÄL߯çèXZÖÀÐ(;—ÌfsY¼æw=ŸÐhf'ú±¾«>³x<E¯ØOßOçÕ©~Kalw[½æ÷}¡X8UƆ˜* ?À­ÿ7Ïètz[Çëÿ«{¿^üp©4>M ‚ƒ¦AA—§çôV dº ‚¹z~[Ç‹éâ—¦IÒoÏüÿÀ À‹«H‡pZ}§ÓY ¹ì~Ä€rI ÀøŸÃì=£Çiðv  Îg†jÎÄl]ÆŠ(xG€,ä�  *" žŠ!0FR+þHdyiÀ¨ ¹Nd)¦ ðuQ."@)Ê“ Å1Ì“,\Ò(Gàæd%±ÆZ�à3Nˆ¬¬vŸ'i|%˜@ δ A©Ã‚0‡)v�̵ GÒ$‡J,[ë   "àJ.†À¨oIÔŒÁ„s˜#7çáî€ K2$‡Ø,”¡Ù0Aug_Ø …RÀèiˆt¢™v'V༣aÆ/©âï ÄXlF`(h[–ìŒffX®_  H[×MÕu³2±è~€(‚ 8$Oã@R5à°qv` €˜\‰F¹àk\×F,‡ˆ’ dÈxMáx®-‹ã MŠ�°3cÐ{�0c/óª~€€I‡D € ˆYNm›´'ñþ ¹ †s˜@4uœhš.1gN[�|Âg¨v ‡Žðž/¢ü£kéhÄѰL@ ¬ºrŒ|Aˆú0„ÃÉ·îŽo¡ÄA¢C’æ©*€ÊnäÞéa�bQ}¿ñJ~[œ…°À` Ñ»’åñ\¯-Ê6—$†€#N1…€Z‚¢—mòüQÙˆE¨•ÊÝKE•‚€@*a † Ýö]ï}ßÌè#¥‡ˆkLŸ…eà30™ì.‚éžg­ë™çiž4˜ƒ1Þ|÷ ëüŸ+1•´‡©øzüBX:%Œa@Ì!^[ñüÛü¢Lšä¹3Ä�ÀEü˜”h<À<A0Ø à„3MІ¿·úÿÄ�ÀIgÁ"¬”Z@¼pÄ´AèLÖCÈËâœn R–ß¡<1†Dy(1ô<ÍbÍmˆ=ƒüYÀCOÍÄ !¶( H|tîÆ"$¢«G¸š¢p"°‹bÄY‹D‚ ñÂ<Ç�[huqÒ¼™D['€u¥Þ ˆyê&F¨ì°žøï/Á€6¯äÀJ&‘¥˜0ÔŒ  �¼=2Ðø¤ oea4\„±²Ç‘\‘'cÈ} Š‚0›Âv?É©M)à,]""%»‰aª%⎕ˆ’ >�˜¢l�ÐE,æebTj‰1&5D“B�ÑÖ`ÌÖ•‡Èþ1AÓ€@ðáh¸…3œ@µBÑîp€|œq(´)‚ª€TN¹í=Û|ª" ,‹ j=‡Ø÷‘ÓàŠ%aÞ>‡hº "ø?Z CÒ2†Q™E™Z!EÔ Ï9SD|1ö<Á[õà<4‚l ,펌6ñè>ǨZá]ŽvMiii`ô á<Å9¨U aÏ¢$'ÀšCDD#™–k¨ÄœP0&ˆ°n#aØ ¨•m ¡Ô2BØ¿ 3*fUÊÌ|æS#Ýl€Ã �B0  „JB Á ¾¬íüUñT† hVàZ²Ñvžh°ÂÈ`u^ì…‘L5ŠŽÅHÞ�I{QV¦GȧÁ ;%iΘ[ÁdbŽ‘‰"gU¨¶Fq¤;°`ÅŠðàÂX  „ilÜBµÃ@BŠ!´($ͦÐ9Ðêy,Ö�—"î]Óÿe˜ÕãQÇ…áÜž[ ¶2¡+@q$ÌBˆ Wzú¤+â—¦úßÒ¤•‹ B’8€P=‡èö Àx'ƒ .Ávø_ç,}G€5àÌÖ>+×0¶Ç €ž2°¶)ÅFîðQ©xÑ(fŒ£ªH^¾ú‡®!ZNpŠò˜ãhOÁ–@€6 äÒ2”SId@Tª%D�p" À¬7´Œ}“œ»H#\”˜úyS­4ä $AÈ“_«ÿ0g\ì]1i¥%»bNå2VcðyËp@(Â�¥Â™ßFA4Än{j0Ê]бÃH|Oˆ€ðJ(b�( `àw¥ß*† âã20ðüJæ3T„3z£^kÒžH²­Á°b†¡t9EÑrÖ1ZËp?h„ø˜W_mR¨%&@’‚E€\™µ®‘ËÄ(S4Öð…]M% a•ù0›£¸°ä£0Œ¾7‡Ýl +eÅ„­TÕŽ øN�ê-¼8G ™!1ï`:‰yº;21Ð$ÁÈ• -p®<P#Ø6£­„ïÞ?’²µ£†‘’AøTø-W¦)°£Éá8æØ, Ъ9ǰçN @¼ëx(‚¥àÒËœtÞO°Û+ Ã2lqs²œ¤ Ïƒ…·¦ ØONìDÐcŽ‘ŒÆey+±Å–‘G¨ñ%€,‚ð& ÞpfЂӹÛbÆ}ÛBCWNM’ˆð| ®`ü‘Þ@ŽÅ�Ò1xŽÈ!PPqÞAVààHÛo%éÉ (¡x_…Ê8—‡õ ½+“²u’·C‡`0:àè>Ë)à¦yƒ_g$s0vcpQ-¿ÚC ÷¡Ø8ÐåñþÆò„}4²�Æ.ÔWXJNÿ­Žð°ÂÀ‹;çýŸÜD†@êìô1‘ø>{gïh¿FNäÒÀ,î–Q€Àd ¼� &�&ÿI€a–ABȅꃎ²ç2, îàî ¬¹Ð@ȶ$!ðUÀÐóÙ(vI šD@¤ ¤Àp90p"¡œ¡œõ€¶yKðrR$¬Í%j‚¦„�æv )ÀÜ!Ã�@¦ ª2‡Qiî!”ï–)ÎÚu&Z@ë€àޱ +½b`V¤J ¡tTdfÌB¬r—,a.OÀS 0Õ!’A † AÞݰë$Z£Áä:¢†$ HÀJp@A ð�ò@Jo`)ʶ˜A>!<³,ügRJ,¤Ð9Àß‘l´ðØ&G‘ á|Á|a*o¥¼ÀÄî*BFÐÑo¢õA^_a? Çv0±œ?Ç4„¢yG”À Ø`ܳ€"´�x�x_�W+–ÁHADà  qBÄh0ÊðÎ1Ù *‰"hÍ! ž aŒ /`„Xl|EðA®æ„² A" ¤P 61.R$¥Þ‚" *Êni ²`´› €9Aü Ú’J¾¤¢ÈÀôf¾É%ê�@"%ÙáìyÀò‘€Ü€á'r ¢'!¬᪠Á‚ §V`�`Òży½á(ª’£*2;#òC!î‡,â��@àX4 „>¯wü�Ä€ Óõô' â"Ä 0‰Ì€TžQ)•Jå’Ùt¾a1™Læ“Y´Þq9Nç“Ùôþ~¢m¨UMÕCMÞÓAÐù ¡Q©K/§€ð0>)J…Q V§a±Xì–[5žÑiµZí–Ûu¾áq ?î—[áÖ³p¬OìÓð`©×,4ÒM>]øÃ  Ìišƒ Àö1™Ífó™ÜöA=o¼ÛçÖaétä\…P…Ðìö›]´œò}<iàþ¼3 "@'³ñìeÈ ‚ƒ7óýú@p–ß±ÙívûÞôÔ÷t–×妛¹¢1=ý®%ûÐv^A²x|¡^ïóÿ�@0@°2nº7¬1`pða^^ÅØ�0 ¢p:¢†Éú|…€ˆX*B¨ÆŒ°ÜWE±t_�‘öyFÑ@¡/ Ô€€Z*“F2†œ©Ðùò„½¨ú� XaXØ��üß�à 0„É0L3Ç2%)ìr•&éNN›$áî~àHÉS*}ž§áê  °¼‹âøL0 (;Ñ4UFQ´tɳ¨¹ôg¦q h†ÙâlÎÅ ¶T[|±r8J„Ã@R4ˆ Є €àZVµµo§©ÊWœi h° uqd3¬Lfy>2b@ºXah$ vp"‚$�d@¢ ó�ƒà`?dÜ·5Ït'å©ÄZ’¡M›`(Øv=ÒÄÏG«^„€pHA„ j †×N„a8VZR-±bp–Œ\µOØ�2Ð")ԙÀ^)“3a™VW–e©aPoø™`a0¸ eÙóžgñô„�-”�hGäP25€­¬ŸŽ¨$-„‚î}¬k:ÕÊOMÕé]J™àNrKs¶ºLY솇ÀÀ~'„€° :Þï¼o;ÖöaÎÆ„}™çaœBäöŸF¡Üj nA*©ápwøÖ ‚�4 :µžùÐt=ZãžÆYÖe& nféè}žœx�€—¿Gß3ÞÕ¢ º–ÕJ } Èð…W Ú4wwŸè?ÌiÜaæ(kFáän_›ÛÈŒIè~—˜ ¡îX lý¿¾çú~¿´Ç¿=ωüKÄ›lâpk‰¡øÔ]  gó™×�Ѐ€4Äz0) ïÞ A¸8fBkƒÔr áÀ+ôhQŽ��ùÎ,,K8~áøJÒÁÏ.¤,~€ž€(�¤ƒ;ÀFúŠØS†&%D³8'È›bb¼g87ã—¢.w‰å=ƒð2!ësmÚ&F8Éc1h(l®éD�ÎêLy±æ7s´�ld�`ÙÉúËF‡=g¤Ñþ?ž&g`H ü Cú�À‚XÏ%d´—%°œqö<D°Õ£eN+¡È³ç|1&@)J (ýÀ °ÉC¥s° ZBa˜üˆ�¦ɉ‰1f1:Ãäw 1Ð0ĈÓÐÜm´…Ô9L•'`ÝJÀ�?LA_ä·Þüf<ç¦3F”„8 ß£lR§0Ðhœt°¼ŸÃ1ö(^¦´¤tP“ëOT&…LaX7ÅR›‚Üq‹Q¼<†èKiT�:6B`<ú@íÃTŠ])1Ÿu@šÀ(Jð9àåä:Miµ7'åÜu‰Á°&ܘ¤‚ó¯Ê@ùãñf¤MEkáû Èb$Œà¥ Ú°éÅW«e¬ÎÅÆ»jiU “åœ À˜0«U¦µF1Æ=Gí¶< ÑÚ3iàšœÄŽC;ÍzU@Oíl8Àá7Cãè�ðNXn&5–³Ö»)el±4#´h/Áp9¸°b(ô Ú,œ¹ Í”³€6H3ã|³ðƒ?·Œ³¥ Ix0Tƒ.åí—¸á?ˆspî5ǹ <Yµ*3ª²C Ä ƒ œÂ}É»fíá>6„ô¤˜dó!x9EåÏ%)(�¢�h Ä1¢0¦W.Ý÷¿äìÕËõoõÿÀ`:ì ×Yp¹ùt‘€ a<(XïæÃg a¼9‡pöć.\/ˆñ6'ŧb¼Y‹qv/Ø—c<iq¶7Ççc¼x­±–=È!d<‰‘r6GÉ$€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ—*Ë̵-Ë’ì½/Áò¼Á1Ì“,Í3ÍLÔØÌS\Ý7ÎŒå9Γª³6ÎÓÌõ=Ï“ìý?Ð$ñ@Д- CÑMÐt]GÒ%IÒJÓÍ5MÓ”í<ËÒôýEQÔ•-MSÕ ¤gTÕ•m]WÖdÔ5m[×Íu]Ï•­y_Ø …aØ’}bÙM•eÙ–l cÙÖ¥iÚ–­­Õv½µmÛ–í½oµ–…ÁqÜ—-ÍsÝ ýÅtÝ—mÝwÞŠUuÞW­í{ßÍÝz_Wíýà ~`X. ƒáM!‚aXn‡âŒÇ†bX®-‹ãÌmŠcXî=ä ŽdY.M“åM-låYn]—拯’fY®m›çËšgYî}Ÿè Ì€€€?à@$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¢@Ÿõ ¥V­W¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nTú•Îíw¼^oW»åöýÀ`pX<& ‡ÄbqX¼f6+uÇdrY<¦W-—ÌfsY¼æw=ŸÐhtZ=$g!¥ÔjuZ½f·]¯Ølv[=¦×m·Ü[ôûæ÷}¿àpx\>'ÇäryZÝß/Ïètz]>§W­×ìv{]»Ÿ7¹ßðx|^?'—Íçôz}^»g{Ùïø|~_?§×í÷ü~Y?wïüÿÀ À, Á+ûÁlÂŒ% ¬,¢Áp¼5 Ãì=Ä E¹PÌIÅLUÅ‘l]ÆÂÆ‘¬mÇÌuÇDMÈ …!È’,#É d$É’l'ÊŒ¥)ʉ���������������������ì,�������������������ì2�����ìF�������������������*�������ìª�����í�����í�������(�������1�����í=�������S�����í.‡s��� H�í4�������icon_512x512@2x.png��Xö�[¬�^b�a�cÎ�f„�|Z�Î�;�Rš�‚u�¯W�úG�Ef�s �”æ�³Â�¿ˆ�Ê�Ü'�ÞÝ�á“�äI�æÿ�éµ��¶��¶��¶��¶��¶��Ö��Q¬��N5��6_��/Û��,â��Jð��K��-º��!Æ��Ü�� Æ�� ‘����¶��¶��¶��¶��¶������ ������ ��tiffutil v268.1������ HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB�������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/hdf.ico������������������������������������������������������������������0000664�0000000�0000000�00000056006�15030617045�0016620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000���������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���è��†������(��n��00����¨��–�� ����¨��>������h��æ��00��� �¨%��N!�� ��� �¨��öF����� �h��žW��(��� ���@���������€�����������������yu �ÛQ7�4«3�hŽ2�>´C�XµS�lÅn�¥’Y�Í�±¸‡�ñ´©�¥Ö¡�Ú˳�øøõ�����ÿÿÿ�ÿßßÝýßýßßÝýÿßßßÿýÿÿßÿÿßÿÿßÿßßýýýÿýÿÿßßßßßÿßßÿýÿÿÿÿýýÿÿÿÿÿýÿÿýÿýýÝÝÿÿÝÝÝÝßÝÝÝÿßýÿÝÝÝýÝÝÝÝÝÝÝÝÝÿßÿÜÝßÝݽ½ÝÝÝÜÝýÿÿß»½ÝýÛ¸ˆ»ÝÝ»½ÿýýÿeŒÿݸDDE‹Û…‹ÝÿÿßR[ÿýËeDDFˆRkÝßßÿRkßýÛ»¸eDEBkÝÿÿßTlÝÝÝÝÍ»e""[ÝÝÿßRkÝÝÝÝýÝÈB"kÝÝýÿS[ÝÝÝÝÝýÛc#YÝÝÝÝS9™™™œÍý݃#W™™œÝp30s0yÍÝý—�333{Ýp�p�ÿü§��yÍp™™p­ÝÜ�™™œÝp|Íܧ­ÝÚq�zÍÝÝÝÿݧ­Ý§ÝýÝÝÝý¡ªªªÚÜÝÿý¡ªªªªÝß¡Ýý¡ª­ßÝÚ¡¡¡¡¡¡¡¡¡¡ªÚÝßÝݪªªªªªªªªª­ÝÝÿÿýÝÝÝÝÝÝÝÝÝÝÝÿßýÿßýÿßýÿßýýÿßÝßýÿßýÿßýÿßýÿÿßÿÿÿßýÿßýÿßýÿßýÿßýýßýÿßýÿßýÿßýÿßýÿßÿßýÿßýÿßýÿßýÿßýÿ��������������������������������������������������������������������������������������������������������������������������������(������ ���������À������������������×G+�6¥-�eŒ.�S¯I�tÉv�’:�™¢c�Ù–|�»»�öž–�£Ö �÷Á¸�øøõ�����ÿÿ��ÿÿÿ�üüüüüÿÏÏÿÿüüÏÏÏÿÌÌÌÌÏÌÿϬÌʬ̬ÌÏ:Ï£J:Ïÿ:üʪ3ÌÏ4ÌÌÌ£ÌÌ"fhÌÆ"fŒUfU¼Æ%fŒÌp¼¼ÏÌpw�»» ü�����»ÌÉ™™™™›ÏÿÌÌÌÌÌÌüÿÏüÿÏüÿüÿÏüÿÏüÿ����������������������������������������������������������������(���0���`���������€ ���������������������g|�ut�h~#�zz%�é �ð �í�Ø*�Ç6 �Þ.�À?�Ö:�è �ê'�ò"�å3�ß;!�î+&�ñ-)�ì6+�ó4,�î?4�ò51�›Q �\�\�¨I �µC �ºL�®U�¼R�ƒk�”f�…p�¡a�¤]"�¶U$�šk*�†v)�r/�Ž|3�˜x5�£a#�­i4�¸e5�®s8�ÆF�ÖA�ÊI#�ØG(�ÍR/�Ã[3�×Z9�âC+�ëH8�óN>�åR:�Åc9�¯tA�·wG�óJE�ëZJ�ôRG�ñ[S�ÉmL�×fI�ÉtL�É{W�ØvX�ã`H�èjV�÷e]�÷ea�çwd�ôtk�ö{t�?“�4š!�+¥)�2£)�/®5�7¬6�6°:�J�L"�Z‡#�F—'�U‘+�Wš4�h…)�rƒ,�eŽ1�y‡4�j—=�p’<�@ -�F¥7�=µB�gB�z–D�TªA�C´D�D¶H�K·M�I¹L�Q´K�M¹R�]µW�S»V�V¼Y�Z½\�e¦K�k«R�©]�c´Y�u¸f�\Á_�^Áb�`Âb�fÄh�jÃi�nÈo�qÁl�oÈr�qÆs�sÈv�vÉx�yÉ|�‚„4�ˆ‰@�•ŠF�†—L�™‘O�‡žT�˜”T�©‹S�´‹[�‹¡Y�¨šb�³˜g�‡®e�”§d�„±d�Ÿ®q�½{�—³t�¤¤j�¨ªs�·¢s�¤±x�‚Z�ÄŠd�Ñ„b�–k�Ús�Ö˜z�å€h�ê‹y�ô…z�â’|�’Á}�~Ì€�¦»…�»²‡�Ùž†�ùˆ‚�陈�ô•Š�ú˜’�È­Š�Ô¡…�ź–�Ö´™�ç§”�÷¡š�Öº¢�ø¨¤�쳦�÷±«�ì½°�ú·³�…͆�ÏŽ�“ËŒ�ƒÐ…�‡Ð‰�ŠÐ‹�ŽÓ‘�’Ô’�˜Ô—�—Õ˜�™Õš�œØœ�¨Á�«È”�¸Ç›�ŸÚ¡�»Ê¡�¯Ð¢�¢Ú£�¦Û¨�«Ü¬�»Ö®�»Þ·�¬à­�³á³�¼ä¼�ÅÁœ�È˨�ÚÁ¨�ÆÑ­�ßÏ»�ËÖ·�ÖÔ¹�æÅ¶�öÄ»�àѾ�Àâ½�¿æÀ�ÍßÂ�ØÝÄ�êÎÀ�ûÈÅ�èØÊ�÷ÑÌ�éÞÓ�ùÙÖ�ÃæÃ�ËäÇ�ÅèÅ�ÍêÍ�ÛäÎ�ÏëÐ�ÒìÒ�ÝéÔ�×îØ�ÛîÙ�ÝñÝ�âàÎ�æèØ�öáÜ�àñß�êíâ�úéè�âòâ�ìñç�ìõë�îøî�õòì�ôöñ�ûôó�ôùô�úùö�ûûû�ÿÿÿ��þþþÿþÿþþÿþÿþÿþÿþþþÿþÿþÿþÿþþþÿþþþþþþþþþþþþÿþþþÿ�þþþÿþþþþþÿþþþþþþþþÿþþþþþþþþþÿþþþÿþÿþÿþÿþÿþÿþþÿþþÿþþþÿþÿþþÿþÿþÿþÿþþþÿþÿþÿþÿþþþÿþþþþþþþþþþþþÿþþÿþþþþþþÿþþþþÿþþþþþþþþÿþþþþþþþþþÿþþþÿþÿþÿþÿþÿþÿþþÿþþÿþþþÿþÿþþÿþÿþÿþÿþþþÿþÿþÿþÿþþþÿþþþþþþþþþþþþÿþþÿþþþþþÿþþþþþÿþþþþþþþþÿþþþþþþþþþÿþþþÿþÿþÿþÿþÿþÿþþÿþþÿþþþÿþÿþþþÿþþÿþÿþþþÿþÿþÿþÿþþÿþÿþþþþþþþþþþþÿþþÿþþþþþþÿþþþþÿþþþÿþþþþþþþþþþþþþþÿþþÿþþÿþþÿþÿþÿþþþÿþþüüüüüþÿþþþÿþþýüøøøøøüüüþþÿþþþþüüøüþþþþþþþþÿþþÿþþõîîõ÷üþþþÿþþüøõìéêêììõ÷üýþþþþü÷îìõøýþþÿþÿþÿþþÿþþçÛÏæìøþþþþþýøîæÎÉÉÊÊÏäêî÷üüýø÷ìÛÎæòøýþþþþþÿþþÿþþͽ½ÅÛõýþÿþþøõæÅ¹~~€¹¼ÈÎÛêõöõêϽ»Èæõüþþþÿþÿþþÿþþºwu~Èìýþÿþý÷êÍ€mbbbgimwzºÅÚêçÏ¿xnÊé÷ýÿþþþÿþþÿþþzbbn¼éüþÿþý÷éÉiSSSSSSbgnz¾ÊÍÁgSu¿äõþþÿþþÿþþÿþþxSQkºçüþþþþøîÛ¿~vuonkgbSSiw¢wSQn½ÛõüþÿþþÿþþÿþþxSSk»çúþþÿþüøîÛÉÀ½·¶€yngSSbinohQSn½Ûõüÿþÿþþþþÿþþ{RSm»çüþþÿþþýøîçæÛÏÎÊÀ¶}ogbSSfSOSo¼ÛõüþþÿþÿþþÿþþyRbm·çüþþþþþþýø÷÷õõòíêäÊ·zjSRPQORu½Ûòýþÿþþþþþÿþþ{aal¸éøþþþþÿþþþýþýþýüø÷êϾ{jaPPPRs½Úòüþþÿþÿþþÿþþtaas¸å÷üýþþþýýýþþþþÿþþü÷îÚ¸te`NNas¸ÌîøýýþþþþþÿþþtYYp‘Ëèëðóðóóððóö÷úýþþþýúîË¡qaMMWq¡ÇÜëòððòóöùüþþ\Xcr£ÃÄÆÆÆÆÆÆÆÆÓÝð÷ýþþþþöÜÃcUTXcr¡ÂÄÄÆÄÆÓÕèóýþŽ[V\_„ŠŠŠŠŠŠŠŠŠŽ’ÄÕðýþþÿþùèÆ’^VVV\^d†ŠŠŠŠŠÂÓèùþŽ[[]]]]]]][[]„–ÑðúþÿþþùëÑ–dZ[[_]]_]_„ÆÝùþ‹'"‚“ÐïúþþþýùðÑ”‚]]„”ÐÝöþ‹'!')ƒ……‡‡‡…ƒ)"")ŒÐïúÿþÿþùàÐŒ*" "')ƒ……‡‡‡‡“¤Ñâùþ‰&!(ˆ•¬¬¬¬¬¤•ˆ(!(Œ­àùþÿþýöÙª‰(!*ˆ•¤¬Ð¬Ð¬ÑÖïóúþ‰++.šÒàðâðâÙ°›;+,˜­àûÿþýûâ°š;##<•°Ùâððñðóùùýýÿ—%%<œÞôûûûûñ׫C%-™­àùþýùñ´«C-%<«×ñûûýýýþýþþþþD: àûýþþûñ×¥C%4™­àôûôã´¥™:C¥×ñùýýûûýýýýþþE1/5 áûÿþÿûô×§B13E§´ááØ²§E5// /A ²áññôôôñôôôôûG0 5žáûþÿþûñاB22F§¯®žJF20 9¨³ØØØØØØßßßáñG9žßûþþÿþñب> 7FHGG96  6>JŸ¨©¨©¨¨¨§¯³Ø@7Ÿßûþþþûñب@   8?@@@@@@@@HK¯H8Ÿßûþþÿûôß©@8LL??H©áûþþÿýôá±L=?Ÿ±¦¦©µñûþÿþþûñ߯LIIIHIHHHKHHHIHIHIIIIIIIIIHIIIKŸ±ßµµµãôþþþþþýûñß±¯©©©©©©©©©©©©©©©©©©©©©©©©©©©©±³ßôãããôûþÿþÿþÿûûããáßßßßßßßáßáßßßßßßßßßáßßßßßßßßáãôûûûûûþþÿþþþþþýûûôôôôôôôôôôôôôôôôôôôôôôôôôôôôôûûûþþþÿþÿþÿþÿþÿþÿþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþþþþþÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿþþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿþ�þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ�€����þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ������þþ€����þþ(��� ���@���������€�����������������h}�wr�|r�~u#�}x$�å�é�è�Ò,�Ø- �Ã; �Í?�Ü1�Ý:�ç#�í(�ê%�é)�à2�ß<!�ì.#�ó,$�ñ,)�ï5,�ì:/�ó0#�ð:/�ñ:4�ŸM �Œ_�²D �¶N�µL�¹N�£[�e�’f�’h�©\%�¼Q&�‚~.�™v2�Ÿw:�š|9�¿`4�ÈA�ÍF#�ÓZ8�âL4�ïF>�õD6�âS:�¶zD�µ{K�¹S�ñKD�ïTC�å[B�ðQ@�ðXK�ÔdD�ÙgH�×jJ�ÄpH�ÉrI�ØnP�Ë{V�Ë{\�Ùv\�èjV�èmZ�ôi^�çp[�òob�ìwh�ì{l�ùsl�úxl�ørp�ö~y�<–�-Ÿ#�/©/�7£,�-¬2�4¬4�6²:�9²<�MŒ �RŽ&�XŒ'�Eš)�M›1�a€!�j‚'�i…*�s‰3�xŠ4�uŽ9�z;�h—>�|’>�@¦5�R¡8�>´C�jD�Q¯F�B´C�D¶H�C¸H�I¸N�MºQ�R¹R�Y¾Z�o­W�m­X�}£T�dµX�a¾b�h¹a�o¾i�r±`�\À`�dÂg�fÃh�jÃk�qÆr�rÉt�zË|�„ƒ5�ƒ†9�“ŽK�šM�Œ™Q�›P�”™V�¨†N�­W�»„U�¿†^�ª•]� œ^�Š V�­˜b�‡¬e�­j�‚ºm�ž¸~�µ©y�¡°t�Ë‚[�Ôq�à€h�ò…y�ø}�Í�¸­€�©º…�«½ˆ�¶´†�¸°…�½½“�枈�ò–Š�ú‘Œ�Ä©„�Õ·œ�駘�íªœ�õ£—�õ¤™�Û»£�Þ¿«�ù¦¢�õ®¤�ú¨ �â¹£�佬�켯�ô¹­�鿱�úµ°�õ»³�ø¸²�ü½¸�ƒÍƒ�ŠÏ‹�‡ÐŠ�ŠÑŒ�”ו�—Ö˜�˜Ô˜�šÙ›�§ÄŽ�¯Â�¶Â“�¶Çš�¾ÈŸ�«Ð �¢Ù£�­Þ­�¶Ôª�³Ý°�¾Ü´�®à®�³à´�ºãº�ÄÀš�ÌȨ�ÒÀ¤�ÆÓ°�ÍÔ´�ÙÖ¾�ÐÛ¾�ëõ�óļ�úÀ¹�Àâ¾�ûÆÄ�õÏÇ�æÛË�éÜÎ�üÑÏ�ûÙÖ�ùÝÙ�ÄæÄ�ÉçÉ�ÇèÈ�ÊêÊ�ÝäÐ�ÒëÑ�ÚîÚ�ÝðÞ�áäÒ�鿨�äêÛ�ðãÛ�úàÜ�ìíâ�öåá�úãà�óêã�úéæ�óíè�ûìë�ãòã�ìñä�ìôë�íøí�ñòë�ôöñ�ûòò�ôùô�ùùö�ûûû�����þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþüüýþþþþþþýüüüüþþþþþþýüýþþþþþþþþþèçèüþþþþüèäãäæèøýþþüõæõüþþþþþþþþÌÀÌèþþþýõͼ›¹¼ÇÎæõøèνÍèüþþþþþþþoäþþþøã¹mVWhnz€ÈäΛo€áøþþþþþþþqTzÎþþþüæ¾zoolWWk|»»qT|Í÷þþþþþþþqUzÙýþþþøæÌÇ¿ºpWWlplT|Í÷þþþþþþþqUvÙýþþþþúõèçæáÇ€pUURR}Í÷þþþþþþþufwÙýþþþþþþþþþüõÙ¹jSQSxÊöþþþþþþþr\rÉëööùöóùúýþþþ÷Ë’gP[yÆæöööøúþþtZd‘žžÂžžÂÒéýþþþåÁiXYi“žžžÄÕîý…�^aeeeccae•ÓùþþþëÅ„]]_`bcebŽÃéý†(‚‚(Ðùþþýêσ(‚‚‚‚‡¡éýˆ$)œ  ”Œ)%‰ÑóþþþÜ¥*#+Œ”  ŸÏÔîþ5"4«ìññݦ6&Š«ôþýò¬‹&"ЦÝñññùûýþ?!@Öûþþò±C'B°òýï´—, –±ïþþýþþþþ< =×þþþò²D.>¢×ר˜/- -A§Ûíííííïò99Øýþþò³H0EKF3  0J£©ªªªª®Ú:8·ýþþô·G777777;™G2GØýþþûÚOI­¤¯ßþþþýðµšNLLLMMMMLMMMNNNLLLNš­ßÞßûþþþþýíÚ¸¸¸¸ØØØØ¸¸¸¸¸¸¸¸¸¸ØÚßýýþþþþþþþþýûûûûûûûûûûûûûûûûûûûýûþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ��������������������������������������������������������������������������������������������������������������������������������(������ ���������@�����������������Í5 �î%�î$�î(�í+�í,"�ò.(�î1&�ñ;6�ò<7�ð=8�ªN�i�”|7�¶e4�»i=�ÙL-�ÛQ3�ñJ:�ñdX�äxc�9%�3­6�X‡!�s’<�s–A�u”@�W«E�Y©F�@²A�BµG�HµG�F¸K�I¹N�N¹O�S½U�S½X�tÉv�€9�–‚=�˜Z�Ÿš\�ޤ_�œœ`�¯œi�¦b�”¤a�”¦d�”²p�¤µ}�Ïœ�Лx�ë‹z�è}�Ï ~�»»�õƒ�ë’‚�è—„�ú–‘�ú–”�ö™“�û™‘�úš�ä¾®�ú±®�ú·´�õº°�‰Ï‰�‘LJ�“Lj�ŽÑŽ�“Õ–�–Õ˜�²Á’�¥Û¦�¦Ü§�«Ü¬�¬Þ­�³ß³�»ß¶�¾æ¿�÷Á¸�êÔÇ�áÛÉ�ùÑÍ�ûÛ×�ÃåÃ�ÉêÊ�Öî×�ÙïÙ�æéÛ�òéã�ðìä�öïë�èòä�ìðæ�ïñè�éõé�î÷î�ñðè�öóî�ðõì�õ÷ð�úòð�üóò�úôó�ü÷ö�òøò�õøô�øøó�øùö�úúú�üúù�ûüú�üüü�t��ް��©Ï��Âð��Ñÿ�Øÿ1�ÞÿQ�ãÿq�éÿ‘�ïÿ±�öÿÑ�ÿÿÿ�����/&��PA��p[��t��°Ž��Ï©��ðÃ��ÿÒ�ÿØ1�ÿÝQ�ÿäq�ÿê‘�ÿð±�ÿöÑ�ÿÿÿ�����/��P"��p0��>��°M��Ï[��ði��ÿy�ÿŠ1�ÿQ�ÿ¯q�ÿÁ‘�ÿÒ±�ÿåÑ�ÿÿÿ�����/��P��p�� ��° ��Ï ��ð��ÿ �ÿ>1�ÿ\Q�ÿzq�ÿ—‘�ÿ¶±�ÿÔÑ�ÿÿÿ�����/��P��p�!��+�°�6�Ï�@�ð�I�ÿZ�ÿ1p�ÿQ†�ÿqœ�ÿ‘²�ÿ±È�ÿÑß�ÿÿÿ�����/� �P�6�p�L��b�°�x�Ï�Ž�ð�¤�ÿ³�ÿ1¾�ÿQÇ�ÿqÑ�ÿ‘Ü�ÿ±å�ÿÑð�ÿÿÿ�����,�/�K�P�i�p�‡��¥�°�Ä�Ï�á�ð�ðÿ�ò1ÿ�ôQÿ�öqÿ�÷‘ÿ�ù±ÿ�ûÑÿ�ÿÿÿ������/�-�P�?�p�R��c�°�v�Ï�ˆ�ð�™ÿ�¦1ÿ�´Qÿ�Âqÿ�Ï‘ÿ�ܱÿ�ëÑÿ�ÿÿÿ������/��P��p���!�°�&�Ï�,�ð�>ÿ�X1ÿ�qQÿ�Œqÿ�¦‘ÿ�¿±ÿ�ÚÑÿ�ÿÿÿ�srsssssssssssrrsrsssssssssssssssorsspoprsspsssssQYsrZLMXbcQZrsss#HrmN! %L$ImsssGrsbWOD"GlsssFfggnrlPE_gor./.1[s`0*-Ja &)(&'Ts], &(+7d3^\2Sj@ 6\enr5sh:94��CRRU8qi= BUsqV?;;>;><<;<Akqssskkkkkkkkkkqssssssssssssssssrrrrrrrrrrrrrrrs����������������������������������������������������������������(���0���`���� �����€%������������������üüüxûûû¢üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®üüü®ýýý¡úúúwûûû£ûûûÝüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüìüüüÛûûû¡üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüûÿûüûÿûüûÿûüûÿûüûÿûüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®ñùñ°ñøñîòøòÿôùôÿöúöÿúûúÿüüüÿüüüÿüüüÿüüüÿüüüÿûüûÿúûúÿ÷ú÷ÿóùóÿðøðÿî÷îÿîöîÿïöïÿï÷ïÿñøñÿôùôÿöúöÿùûùÿûüûÿüüüÿüüüÿüüüÿûüûÿùûùÿöúöÿòùòÿñøñÿóùóÿøúøÿúûúÿûüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®ÚðÚ°ÛñÛîÝñÝÿâòâÿêõêÿõùõÿûüûÿüüüÿüüüÿüüüÿüüüÿúûúÿöùöÿî÷îÿáòáÿÖïÖÿÑìÑÿÑëÑÿÒëÒÿÕìÕÿÚïÚÿâòâÿê÷êÿòùòÿ÷û÷ÿûüûÿüüüÿûüûÿøûøÿòùòÿéöéÿÝòÝÿÙðÙÿáòáÿî÷îÿöùöÿúûúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®¸ä¸°¹åºî½å½ÿÆèÆÿØîØÿíöíÿùûùÿüüüÿüüüÿüüüÿûûûÿ÷ù÷ÿîöïÿÞðÞÿÅèÅÿ°á°ÿ¦Ü§ÿ¦Ú§ÿ©Ú©ÿ­Ü®ÿ¶á·ÿÂçÃÿÑîÑÿÞóÞÿéöéÿòøòÿöúöÿöúöÿñøñÿçõçÿÕîÕÿ½æ¾ÿ¶ä¶ÿÅèÆÿßðßÿïöïÿ÷ú÷ÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®ˆÓ‰°‹Ô‹îÔ‘ÿŸÙ¡ÿ¾ä¿ÿãòãÿ÷ú÷ÿüüüÿüüüÿüüüÿùûùÿñ÷ñÿáñáÿÆçÇÿ Ú¡ÿ€ÐƒÿrÉuÿrÇtÿuÇwÿzÉ|ÿƒÎ†ÿÔ’ÿŸÛ¢ÿ°á±ÿÁçÁÿÒìÒÿáñáÿéôéÿäóäÿÓîÓÿ¸ä¸ÿ”וÿˆÒŠÿ Ù¡ÿÇçÇÿáñáÿñøñÿúûúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®Q½R°U¾Vî\Á_ÿrÈvÿ Ù¢ÿ×îØÿöúõÿüüüÿüüüÿüüüÿøúøÿêôêÿÑëÑÿ«Ý¬ÿyË|ÿP½Uÿ>¶Cÿ=µBÿ?µDÿC¶HÿJ¸OÿR½Wÿ^ÂcÿoÈrÿ…ІÿŸÙŸÿ¾ä¾ÿÒêÒÿÏêÏÿ¸ä¸ÿ”Ö•ÿeÄiÿV½ZÿuÈxÿªÜ«ÿÐêÐÿéõéÿøúøÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®.°/°3±4î;´@ÿV½[ÿÒÿÏëÐÿôùóÿüüûÿüüüÿüüüÿ÷ú÷ÿéôéÿÎêÏÿ§Ü¨ÿtÉwÿIºNÿ5²;ÿ3±9ÿ3°9ÿ3°9ÿ5°;ÿ6±;ÿ:³?ÿD·HÿV¾WÿpÇqÿ“Ô”ÿ¬Ü®ÿ­Þ®ÿ™ØšÿvÊwÿE·Jÿ7±=ÿ[¾_ÿ—Õ˜ÿÄæÄÿäóäÿ÷ú÷ÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®$¬%°(­*î1°6ÿMºRÿ‡Ð‰ÿÍêÌÿôùñÿüüúÿüüûÿüüüÿùûùÿï÷ïÿÝñÝÿ¿æÀÿ–Ö—ÿrÈuÿ_Ácÿ[¿_ÿX½\ÿS»WÿN¸QÿCµGÿ;²>ÿ7±9ÿ:²;ÿH¸HÿaÂcÿvÊzÿ~Ì€ÿwÊxÿ^À`ÿ7±<ÿ/®5ÿU¼YÿÓ’ÿ¿å¿ÿâòâÿöúöÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®%ª%°)¬*î2°6ÿNºSÿˆÐ‰ÿÍêËÿôùðÿüüúÿüüûÿüüüÿúüúÿöûöÿîøîÿÜñÜÿÀæÀÿ¦Û¨ÿ˜Õ™ÿ“Ò”ÿÏŽÿ…͆ÿzÉ|ÿiÃkÿW¼XÿF¶Gÿ9±9ÿ6±7ÿ>µAÿJºNÿS¼WÿX¼YÿK·Mÿ1®6ÿ1®6ÿW½[ÿÔ‘ÿ¾å¾ÿáòáÿöúöÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®'©%°+«+î6¯8ÿRºUÿŠÐ‹ÿÎêÌÿôùñÿüüúÿüüûÿüüüÿûüûÿúüúÿ÷û÷ÿîøîÿÞñÞÿÎêÎÿÅæÅÿÁäÁÿ¼á¼ÿµàµÿ«Û«ÿ›Õ›ÿ‡Í‡ÿpÅpÿX½XÿF¶Fÿ;²<ÿ8°9ÿ;°<ÿ@±Aÿ;¯<ÿ,ª/ÿ3®7ÿZ¾\ÿÔ‘ÿ½å½ÿáòáÿöúöÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®+¥%°1¨+î<­9ÿW¹WÿŽÏŽÿÏêÎÿôùóÿüüûÿüüûÿüüüÿüüüÿûüûÿúüúÿöúöÿðøðÿêõêÿæóæÿäòäÿâñâÿàñàÿÚîÚÿÑêÑÿÂäÂÿ«Ü«ÿŽÑŽÿoÅnÿR¸Oÿ<®9ÿ3©0ÿ2©0ÿ.¨-ÿ)¦)ÿ6¬7ÿ^½^ÿ‘Ó‘ÿ½å½ÿáòáÿöúöÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®2 %°7£+îB©9ÿ]µWÿ‘ÍÿÎèÌÿòøñÿùûùÿúüúÿûüûÿûüûÿüüûÿüüúÿûüúÿúûùÿùûùÿøúøÿøúøÿøúøÿ÷ú÷ÿõùõÿð÷ðÿçóçÿÔìÔÿºâºÿ˜Ô—ÿqÁlÿP±Gÿ<§2ÿ2£)ÿ,¡%ÿ+ $ÿ<¨5ÿbº]ÿ“Ðÿ½â»ÿàñßÿõúôÿûüúÿüüúÿüüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®;™%°@+îJ£7ÿb°Tÿ’ȉÿËäÇÿìõëÿôùôÿöûöÿùûøÿúûùÿûûùÿûûøÿûû÷ÿûûøÿûûúÿûûûÿûüûÿüüûÿüüüÿûüûÿùúùÿõøõÿëõëÿÜïÛÿÀâ½ÿ˜Íÿq¹aÿTªAÿ@ -ÿ5›"ÿ4š ÿD¢2ÿg´Zÿ”ÊŒÿ»Þ·ÿÝîÛÿñùðÿùûöÿúûöÿûûøÿûûùÿûûûÿûûûÿüüûÿüüüÿüüüìüüü®E’$°I”(îQ›3ÿe¦Kÿ¼yÿ½Õ¯ÿØåÎÿàé×ÿâëÙÿåìÜÿæìÝÿèìÝÿèìÛÿèìÚÿçìÛÿèíßÿêïäÿïòêÿôöðÿøùöÿûûúÿûüûÿúûúÿ÷ú÷ÿòøñÿÝìÙÿ¹Ø­ÿ’Á}ÿn­TÿPž3ÿ@•!ÿ?“ÿLš.ÿiªQÿ޾}ÿ¯Ð¢ÿËßÂÿÝéÔÿäìÙÿæìÚÿçìÛÿçìÝÿéîâÿíñçÿòôîÿöøôÿúúùìüüü®R‹!°TŒ%îX‘,ÿd™=ÿ¨\ÿ ¹€ÿ³Ä•ÿ¸Ç›ÿ¹ÉÿºÉŸÿºÉ ÿ¼É ÿ½Éžÿ¼ÉÿºÉÿ¼Ì¢ÿÅÓ°ÿÔÞÃÿâè×ÿðòêÿùù÷ÿüüüÿüüüÿüüüÿúûùÿëñçÿÏßÂÿ«È”ÿ„±dÿ_›9ÿL"ÿJÿS’*ÿgBÿª_ÿ”·xÿ¨Áÿ´Ç™ÿ¸ÉÿºÉÿ¹ÉÿºÊ ÿÀϪÿÎÙ¼ÿÝäÏÿêîãÿö÷óìüüú®_‚°_‚ î_†$ÿdŠ-ÿp’<ÿ‚šMÿŒŸVÿŽ¡YÿŽ¡Zÿ¡[ÿŒ¡[ÿ¡[ÿŽ¡Zÿ¡Xÿ‰ VÿŒ¥]ÿœ²tÿµÅ–ÿÎØ¹ÿæëÜÿö÷óÿüüüÿüüüÿüüüÿûûúÿðóëÿÛãÎÿ½Í¤ÿ–²qÿm˜?ÿXˆ#ÿV† ÿ[ˆ&ÿeŽ1ÿo”=ÿyšHÿ‚žSÿ‡¡XÿŠ¡Zÿ‰¡Zÿˆ¡Yÿ‰£[ÿ•­kÿ¬¾ŠÿÆÑ­ÿÝäÏÿðóëìúúù®ly°lzîk|ÿk~$ÿp‚*ÿw†1ÿ{‰5ÿ|‰6ÿ{‰6ÿy‰6ÿx‰6ÿy‰5ÿzˆ4ÿx†0ÿs„+ÿv‰1ÿ‰™Nÿ¦²yÿÅ˦ÿâåÓÿõõñÿüüüÿüüüÿüüüÿûûúÿòóíÿâäÓÿÈΫÿ£°wÿ{’Aÿf€#ÿc}ÿf~"ÿj'ÿn„+ÿq‡/ÿu‰3ÿv‰5ÿw‰7ÿv‰7ÿt‰5ÿtŒ7ÿƒ˜KÿŸ®qÿ½Æ›ÿÙÝÅÿîðçìúúù®yq°zqîysÿzu!ÿ|z&ÿ.ÿƒ1ÿƒ3ÿ„3ÿ€„3ÿƒ2ÿ€0ÿ€-ÿ}{&ÿwvÿyy ÿ‹Š>ÿ¦¦mÿÄÃÿááÏÿõõðÿüüüÿüüüÿüüüÿûûúÿóòìÿäãÑÿÍÊ©ÿ¬ªuÿˆ‰@ÿuw"ÿrsÿstÿwx#ÿz{'ÿ|+ÿ~‚0ÿ~ƒ3ÿ„5ÿ~„6ÿ|„5ÿ|†7ÿŠ“Kÿ¥ªqÿÂÛÿÜÜÅÿïïçìúúù®†h°†jîˆlÿŠq$ÿ|3ÿ•‰Eÿ™‘Oÿš“Rÿš”Rÿ™”Sÿ™’Qÿ—ŽKÿ”‡BÿŽ|3ÿ…pÿ„nÿ“~6ÿ¬œfÿǼ˜ÿãÞÍÿõôïÿüüüÿüüüÿüüüÿûûúÿóðéÿãÜÉÿÍÀžÿ°žjÿ“}9ÿƒkÿ€hÿ‚lÿˆu)ÿŽ~5ÿ“‡Aÿ—Kÿ˜“Rÿ™”Vÿ˜”Wÿ—•Vÿ—˜Xÿ¢¢hÿ·¶ˆÿÎˬÿãáÏÿóòëìúúù®^°’aî–fÿr/ÿªŠPÿº¦xÿöÿÅ»–ÿż—ÿŽ˜ÿù”ÿ¾°‡ÿµ¡rÿ©‹Tÿšq0ÿ•eÿŸs4ÿ¶“dÿη—ÿæÛÌÿöóïÿüüüÿüüüÿüüüÿûúùÿñëäÿßÏ»ÿÈ­Šÿ±ŠXÿœl-ÿ\ÿ\ÿ’gÿy7ÿªŽVÿ¶¡pÿ¾±‡ÿú•ÿŽšÿĽšÿþšÿÃÁ›ÿÊÈ¥ÿÖÔ¹ÿãàÎÿîìâÿ÷öóìüüú®œU°žXî£` ÿ®s8ÿ–kÿÚÁ¨ÿèÚËÿêáÕÿêâÖÿêã×ÿèÞÒÿàÑ¿ÿÓ¹ ÿšuÿ¯tAÿ¥_$ÿ­i4ÿÀŒdÿÕ³—ÿéÙÌÿ÷òïÿüüüÿüûúÿûø÷ÿùóðÿíÞÕÿÚ»¤ÿÄ–pÿ²uCÿ¤\ ÿœPÿ›R ÿ¡aÿ°|EÿÞtÿÓºÿàѽÿèßÒÿêãØÿêäØÿêåØÿêèØÿìëÜÿðïåÿôóìÿø÷ôÿúúùìüüü®¨K°«Pî±X ÿ¼n=ÿÒšyÿêÎÀÿøíéÿûôóÿûõõÿûöõÿøñïÿðáÙÿãŶÿÑ …ÿ¾rJÿ³W'ÿ¸b4ÿɈdÿÛ±—ÿìØÌÿøòïÿüúúÿû÷öÿøîëÿóÞ×ÿæÄ´ÿÔŸƒÿÂ|Tÿµa0ÿ­Pÿ¨H ÿ¨J ÿ¯Zÿ¿{LÿÒ¤„ÿãÆ´ÿñáÙÿøòïÿûöõÿû÷õÿûøõÿûúõÿûû÷ÿûûùÿüûúÿüüûÿüüüìüüü®¶A°¹Fî¾NÿÉf=ÿÛ—{ÿîÑÆÿúòðÿüùùÿüúúÿüúúÿúõôÿóäÞÿèÆºÿÚŸˆÿÉmLÿ¿P'ÿÃ[3ÿÑ„bÿà­”ÿîÔÇÿøìèÿûóòÿùëéÿôÙÒÿê½°ÿÞ‡ÿÏ{ZÿÂ`5ÿºOÿ·HÿµCÿµC ÿ¼RÿÉtLÿÚ ‡ÿèĶÿôáÚÿùòðÿüööÿü÷öÿü÷öÿüøöÿüøöÿüø÷ÿüøøÿüùøÿüùùìüùù®Å8 °Ç=îËEÿÔ^;ÿâ’{ÿñÑÈÿúôòÿüüüÿüüüÿüüüÿúöõÿõäßÿíÆºÿ✈ÿÓiLÿÊI&ÿÍR/ÿØxYÿã„ÿî¾°ÿõÑÊÿöÓÍÿóÇ¿ÿí±¤ÿä“ÿÚvZÿÐ\8ÿÇJÿÂAÿÀ?ÿÀ< ÿÁ; ÿÇHÿÒhFÿà’|ÿ뵨ÿôÑÉÿøáÜÿúæâÿúæâÿúæâÿúæâÿúæâÿúæâÿúçãÿúéæÿúëéìúëê®Ô.°Ö2 îØ;ÿÞW9ÿèŽzÿôÏÈÿûôóÿüüüÿüüüÿüüüÿûöõÿ÷äßÿòĹÿ陆ÿÝeKÿÖC$ÿ×F&ÿÝdHÿå€hÿì—‡ÿÿÿê‹yÿåwaÿà`FÿÛN/ÿÖAÿÐ9ÿÌ6 ÿÉ5 ÿÉ3 ÿÍ1ÿÓ<ÿÛW:ÿåzfÿ홋ÿó²§ÿöÁ·ÿ÷żÿ÷żÿ÷żÿ÷żÿ÷żÿ÷żÿ÷È¿ÿ÷ÌÅÿ÷ÑËì÷Óήâ$°ã) îã3ÿæP7ÿí‰xÿöÍÆÿûóòÿüüüÿüüüÿüüüÿûöõÿùãßÿö¹ÿï–†ÿæaJÿß;!ÿß7ÿãK4ÿè]Iÿëk[ÿìn_ÿéeSÿäT=ÿáE+ÿà7ÿß.ÿÞ+ ÿÛ+ÿØ*ÿÔ+ÿÔ)ÿØ(ÿÝ/ÿãB+ÿé\Kÿíteÿñ‡{ÿó“†ÿô–Šÿõ–Šÿô–Šÿô–Šÿô–Šÿô–ŠÿôšŽÿô •ÿô§ìô«¡®ê°ë# îë-ÿíK6ÿò„wÿøÊÄÿûñðÿüûûÿüüüÿüüüÿûöõÿúãàÿù¼ÿô”‰ÿì\Lÿç1ÿæ%ÿé.ÿì7+ÿî?4ÿî@5ÿê9+ÿæ.ÿå&ÿæ ÿæÿçÿæÿäÿá ÿá ÿäÿç# ÿé-ÿì;-ÿíH=ÿïSIÿñZQÿò[Sÿó[Sÿó[Sÿñ[Sÿð[Sÿð[Sÿð_Uÿðf[ÿðnaìðsc®ð!°ñ'îñ2 ÿóN>ÿõ†{ÿùÉÅÿüðïÿüúúÿüûûÿüüüÿüööÿûäãÿûÅÂÿ÷—“ÿñ_Vÿí0&ÿíÿïÿò ÿò#ÿò$ÿï#ÿì ÿìÿîÿï ÿð ÿï ÿï ÿî ÿî ÿï ÿï!ÿî#ÿî'ÿí*"ÿî+&ÿð-)ÿò-*ÿó-*ÿò-)ÿð-)ÿï-)ÿï-)ÿï1+ÿï8.ÿî@0ìîD3®öD8°öH=îöQEÿ÷i]ÿø˜ÿûÑÍÿüòñÿüúúÿüûûÿüüüÿüøøÿüêéÿüÑÏÿúª§ÿöwqÿóJEÿó50ÿõ2.ÿö0.ÿö1.ÿö1.ÿó3-ÿò4-ÿó6,ÿõ6,ÿõ6,ÿö6,ÿö6,ÿö7,ÿö9,ÿö:,ÿö:,ÿõ9,ÿó8-ÿò6.ÿñ5/ÿñ30ÿò21ÿô20ÿõ2/ÿô2/ÿò2/ÿñ2/ÿñ2/ÿñ61ÿñ>5ÿòF:ìñL<®ù~x°ù€zîù†~ÿú–ÿú·±ÿûßÜÿüöõÿüûûÿüüüÿüüüÿüùùÿüòñÿüäáÿûÈÄÿùŸ›ÿø{wÿøieÿùe`ÿùc^ÿùc^ÿùc^ÿød^ÿøf^ÿøh^ÿùi^ÿùj^ÿùh^ÿùg^ÿùg^ÿùh^ÿùh^ÿùh^ÿùh^ÿøg^ÿøf^ÿ÷e`ÿ÷daÿøcbÿøc`ÿùc^ÿùc^ÿøc^ÿ÷c^ÿ÷c^ÿ÷hbÿ÷qjÿ÷zsì÷x®ü°­°ú±®îû´°ÿû¾¸ÿüÒÎÿüëéÿüùùÿüüüÿüüüÿüüüÿüûûÿüøöÿüòîÿüàÜÿûÄÀÿû©§ÿûœ™ÿû™”ÿû—’ÿû—‘ÿû—‘ÿû˜‘ÿû™‘ÿûš‘ÿûœ‘ÿûœ‘ÿû›‘ÿû™‘ÿû˜‘ÿû˜‘ÿû™‘ÿû™‘ÿû˜‘ÿû˜‘ÿû˜’ÿû˜”ÿû˜•ÿû—–ÿû—”ÿû—’ÿû—‘ÿû—‘ÿû—‘ÿû—‘ÿû›–ÿû£Ÿÿû«©ìú¯®®ü×Ö°û×ÖîüÙ×ÿüÞÛÿüèåÿüôóÿüûûÿüüüÿüüüÿüüüÿüüüÿüûúÿüøöÿüðíÿüàÞÿüÒÑÿüËÉÿüÉÆÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÉÅÿüÊÅÿüËÅÿüËÅÿüÊÅÿüÉÅÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÈÆÿüÈÇÿüÈÇÿüÈÆÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüÈÅÿüËÇÿüÏÍÿüÔÓìü××®üðð°ûïïîüñðÿüòñÿüõõÿüùùÿüüüÿüüüÿüüüÿüüüÿüüüÿüüûÿüûúÿüø÷ÿüóòÿüîîÿüììÿüìëÿüëêÿüëêÿüëêÿüëêÿüëêÿüìêÿüìêÿüìêÿüìêÿüëêÿüëêÿüëêÿüëêÿüëêÿüëêÿüëêÿüëêÿüëëÿüëëÿüëëÿüëëÿüëêÿüëêÿüëêÿüëêÿüëêÿüìëÿüííÿüïïìüðð®üüú°ûúúîüûûÿüûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûÿüûûìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®üüü°ûûûîüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüìüüü®ûûû¤ûûûÝûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíûûûíýýýÛûûû¢üüüyûûû¤üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°üüü°ûûû£úúúx������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í������Í(��� ���@���� �����€������������������ûûû•ûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûû•ûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃôøôÃõúõÿ÷ú÷ÿúûúÿüüüÿüüüÿüüüÿüüüÿúûúÿ÷ú÷ÿôùôÿóøóÿóøóÿõùõÿ÷ú÷ÿùûùÿûüûÿüüüÿüüüÿúûúÿøúøÿõúõÿ÷ú÷ÿúûúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃÓíÓÃÕîÕÿÝñÝÿð÷ðÿûüûÿüüüÿüüüÿúûúÿóøóÿßñßÿÊëÊÿÆçÆÿÉçÉÿÐëÐÿÞñÞÿíøíÿ÷û÷ÿüüüÿúûúÿòùòÿáóáÿÑíÑÿßñßÿóøóÿúûúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÖזÚٛÿ®ß¯ÿÞñßÿûüûÿüüüÿüüüÿõùõÿàñàÿ´áµÿˆÒŠÿÍÿƒÍ…ÿÑÿ¡Û£ÿ¹åºÿÐìÑÿåóåÿìöìÿÝñÞÿ¸ä¹ÿ”וÿ³à´ÿàðàÿõùõÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃG¹GÃN¼QÿrÉvÿÇèÈÿùûùÿüüüÿüüüÿíöíÿÆçÆÿƒÎ…ÿC¸Hÿ5³;ÿ8²>ÿ>´CÿH¹Nÿ\Á`ÿ|Í~ÿ«Ý«ÿËéËÿ¸ã¹ÿ€Ï‚ÿK¹PÿzÊ}ÿÃåÃÿìõìÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃ%¬%Ã.¯2ÿX¿^ÿ½ä½ÿùû÷ÿüüüÿüüüÿñøñÿÑìÑÿ—Ö˜ÿ]ÀaÿN»RÿJ¸NÿE¶Iÿ;³?ÿ7±:ÿB¶CÿeÃgÿ‡ÐŠÿ„Ï…ÿZ¿]ÿ-­3ÿdÁgÿµàµÿèôèÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃ'«%Ã0®3ÿZ¿^ÿ¾ä¼ÿùûõÿüüûÿüüüÿùûùÿîøîÿÐìÐÿ®Þ¯ÿ¡Ø¢ÿ˜Ô˜ÿŠÏ‹ÿqÆrÿTºTÿ;³;ÿ8²;ÿD·HÿQ¹RÿC³Dÿ-¬2ÿfÃhÿ³á³ÿçôçÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃ+§%Ã6¬5ÿa¾bÿÀä¿ÿùû÷ÿüüüÿüüüÿûüûÿùûùÿï÷ïÿãòãÿÞðÞÿÚîÚÿÒëÒÿÃåÃÿ¥Ù¥ÿzÊzÿQ¹Qÿ7­5ÿ5«3ÿ/©/ÿ/ª1ÿjÃkÿ³á³ÿçôçÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃ5Ÿ%Ã@¦5ÿh¹aÿÀá¾ÿõùõÿùüùÿûüûÿüüûÿüüúÿûüúÿûûúÿúûúÿúûúÿùúùÿóøóÿáñáÿ½ã¼ÿ†ÊÿQ¯Fÿ7£,ÿ-Ÿ#ÿ7¤-ÿo¾iÿ³Ý°ÿåóäÿúüùÿüüúÿüüûÿüüüÿüüüÿüüüÿûûûÃC•$ÃM›1ÿm­Xÿ¶ÔªÿãìÜÿéñãÿìñæÿîñçÿïñäÿîñåÿïòéÿóõïÿ÷øõÿûûúÿûûûÿöúöÿêôèÿ¾Ü´ÿ‚ºmÿR¡8ÿ<–ÿEš)ÿr±`ÿ«Ð ÿ×èÐÿêñãÿíñäÿîñæÿðóëÿõöñÿùúøÿûûûÃV‡ ÃXŒ'ÿh—>ÿ­jÿ©º…ÿ¬½ˆÿ¬½Šÿ¬½‹ÿ®½‰ÿ¬½ˆÿ¯ÂÿÆÓ°ÿàçÔÿö÷óÿüüüÿüüüÿùú÷ÿÛæÐÿ§ÄŽÿkŸEÿMŒ ÿRŽ&ÿj›Cÿ‡¬eÿž¸~ÿ©½ˆÿª½ˆÿ©¾ˆÿ¶ÇšÿÐÛ¾ÿêîâÿøù÷ÃizÃh}ÿj‚'ÿv‰4ÿ~;ÿ}Ž;ÿ{Ž<ÿz;ÿ|Œ:ÿxŠ4ÿ|’>ÿ¡°tÿÍÔ´ÿòòìÿüüüÿüüüÿúúøÿæéÚÿ¾ÈŸÿšMÿ`€ ÿc€#ÿi…*ÿqŠ2ÿv9ÿxŽ<ÿxŽ<ÿu:ÿŠ Vÿ¶Â“ÿßãÐÿ÷øôÃ}oÃ}pÿ~u#ÿƒ/ÿ†…7ÿ††8ÿ…†8ÿ„ƒ5ÿƒ~.ÿ|uÿy#ÿ œ^ÿÌȨÿñðéÿüüüÿüüüÿúúøÿ鿨ÿÇÁœÿ“ŽKÿwrÿwrÿ|x&ÿ.ÿƒƒ5ÿ„†;ÿƒ†<ÿ€‡:ÿ”™Vÿ½½“ÿãáÐÿø÷ôÃŽbÃ’fÿšv1ÿ­˜bÿ¸­€ÿ¹°ƒÿ¹±„ÿµ©zÿª•^ÿ˜w3ÿ’hÿ­WÿÒÀ¤ÿòîèÿüüüÿüüüÿúù÷ÿæÛËÿÄ©„ÿŸw:ÿŒ_ÿeÿš|9ÿª–]ÿµ©yÿ¹±†ÿ¸±‡ÿ¶´†ÿÂÀ˜ÿÙÖ¾ÿîìâÿùø÷ßSÃ¥\ÿ¶zDÿÛ»¢ÿðãÛÿñéáÿñêâÿéÜÏÿÕ·žÿ¹Sÿª\%ÿ¾‚WÿÛ»¤ÿôíèÿüûûÿû÷öÿõëæÿÞ¿«ÿ¿†^ÿ©]%ÿŸM ÿ¢Zÿ¹†TÿÕ·šÿéÜÎÿñêãÿðëãÿðîãÿòòèÿöõñÿúùøÿûûûóEùNÿÉrIÿéÄ´ÿûõôÿüùùÿüùùÿõéäÿä¾®ÿË{\ÿ¼Q&ÿË{Vÿâ¹£ÿöêåÿüööÿöåáÿ鿱ÿÔqÿ¿`4ÿµLÿ²D ÿ¶NÿË‚[ÿ佫ÿõèâÿüøøÿüøøÿüùøÿüúùÿüúúÿüûúÿûùùÃÈ5 ÃÍ?ÿÙgHÿîöÿûùøÿüüüÿüüüÿ÷êæÿ켯ÿÙv\ÿÍF#ÿ×jJÿ枈ÿòĺÿôļÿíªœÿà€hÿÓZ8ÿÈBÿÃ=ÿÃ9 ÿÈ@ÿØnPÿ駘ÿõÏÇÿùßÚÿùßÚÿùßÚÿùßÚÿùàÛÿùãàÿøäãÃÞ(Ãà2ÿæ]Dÿó¾µÿüøøÿüüüÿüüüÿúéæÿô¹­ÿçp[ÿÝ:ÿáK2ÿèjVÿì{lÿèmZÿâS:ÿß<!ÿÜ1ÿØ-ÿÒ-ÿÒ+ÿÙ. ÿãN7ÿìwhÿò–Šÿõ£—ÿõ£—ÿõ£—ÿõ£—ÿõ¤™ÿõ®¤ÿó´¬ÃìÃí(ÿïTCÿ÷¹²ÿüöõÿüûûÿüüüÿûéçÿø¸²ÿðk^ÿè(ÿê%ÿî/&ÿï5,ÿê. ÿç#ÿèÿéÿéÿåÿåÿèÿë+ÿì:/ÿïF>ÿòKDÿóKDÿñKDÿðKDÿðMEÿðXKÿï`QÃô:-ÃõD6ÿöj^ÿùÁ»ÿüõõÿüûûÿüüüÿüíìÿûÅÃÿö~yÿñ:4ÿó*&ÿõ)&ÿõ*'ÿò+%ÿð-$ÿó-#ÿõ-"ÿõ-"ÿô/"ÿô1"ÿô1#ÿò0%ÿð/'ÿð-*ÿó,*ÿô,*ÿò,)ÿð,)ÿð.*ÿð:/ÿïC2Ãù‡Ãú‘Œÿú¨ ÿûÚ×ÿüùùÿüüüÿüüüÿüöõÿüäàÿúµ°ÿù‚ÿùtoÿúqlÿúrlÿùrlÿùulÿúxlÿúvlÿútlÿútlÿúulÿúulÿùtlÿøsmÿørpÿùqnÿúqlÿùqlÿøqlÿøtnÿø{ÿ÷‹…ÃûÎÎÃüÑÏÿüÚÖÿüîíÿüûûÿüüüÿüüüÿüûúÿüöòÿüàÝÿüÆÅÿü¿»ÿü½¸ÿü½¸ÿü½¸ÿü¾¸ÿüÀ¸ÿü¿¸ÿü¾¸ÿü½¸ÿü½¸ÿü½¸ÿü½¸ÿü½ºÿü½¼ÿü½»ÿü½¹ÿü½¸ÿü½¸ÿü¿»ÿüÇÅÿûÍËÃûóóÃüõôÿüööÿüúúÿüüüÿüüüÿüüüÿüüüÿüûúÿü÷÷ÿüóóÿüòñÿüññÿüññÿüññÿüññÿüòñÿüòñÿüññÿüññÿüññÿüññÿüññÿüññÿüññÿüññÿüññÿüññÿüññÿüòñÿüóóÿûóóÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûûÃüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÃûûû•ûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûûÃûûû•��������������������������������������������������������������������������������������������������������������������������������(������ ���� �����@������������������ûûûÄûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßûûûßüüüÃûûûàüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüßøúøàúûúÿüüüÿüüüÿúûúÿøúøÿøúøÿúûúÿüüüÿüüüÿùûùÿûûûÿüüüÿüüüÿüüüÿüüüß¶â·àÖî×ÿüüüÿúûúÿÙïÙÿ¦Ü§ÿ«Ü¬ÿÉêÊÿêõêÿî÷îÿ¿ç¿ÿÚïÚÿúûúÿüüüÿüüüÿüüüß<µ>à“Õ–ÿûüúÿõùõÿ¬Þ­ÿI¹NÿBµGÿF¸KÿtÉvÿ¥Û¦ÿS½Xÿ–Õ˜ÿóøóÿüüüÿüüüÿüüüß/«.àŽÑŽÿûüùÿûüûÿéöéÿÃåÃÿ³ß³ÿ‰Ï‰ÿN¹Oÿ@²Aÿ3­6ÿŽÒÿñøñÿüüüÿüüüÿüüüßCž-à“Ljÿðõìÿõ÷òÿö÷ðÿöøôÿúûùÿòøòÿ»ß¶ÿW«Eÿ9%ÿ‘LJÿèòäÿö÷ðÿøùöÿûûûß`„"àu”@ÿ•¥bÿ”¦dÿ”¤`ÿ¤µ}ÿæéÛÿüüüÿìðæÿ”²pÿX‡!ÿs–Aÿޤ_ÿ¦bÿ²Á’ÿíðå߆kà’€9ÿŸš\ÿ˜Zÿ€8ÿ–‚=ÿáÛÉÿüüüÿðìäÿ¯œiÿiÿ‚:ÿ˜[ÿœœ`ÿ»»ÿðîåß«QàЛxÿöïëÿòêãÿÏœÿ»i=ÿêÔÇÿúôóÿä¾®ÿ·d4ÿªNÿÏ ~ÿòéãÿöóîÿøøóÿûûúßÖ5àè}ÿüûûÿúòðÿè—„ÿØL.ÿë’‚ÿë‹zÿÛQ3ÿÍ6 ÿÎ5 ÿäxcÿõº°ÿ÷Á¸ÿ÷¹ÿøËÅßð2àõƒÿüùùÿüóòÿö™“ÿí,"ÿò.(ÿí+ÿî$ÿî%ÿî(ÿî1&ÿñ;6ÿò<7ÿð=8ÿðNAßú®ªàûÑÎÿüûûÿüúùÿûÛ×ÿúšÿû–‘ÿú—‘ÿûš‘ÿû—‘ÿû˜‘ÿú—’ÿú–”ÿú–‘ÿú—’ÿú¦£ßûøøàüúúÿüüüÿüüüÿüûúÿü÷÷ÿü÷öÿü÷öÿü÷öÿü÷öÿü÷öÿü÷öÿü÷÷ÿü÷öÿü÷÷ÿüøøßûûûàüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüßûûûÅûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàûûûàüüüÄ��&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/hdf4-config-version.cmake.in���������������������������������������������0000664�0000000�0000000�00000003500�15030617045�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # HDF4 Version file for install directory #----------------------------------------------------------------------------- # # The created file sets PACKAGE_VERSION_EXACT if the current version string and # the requested version string are exactly the same and it sets # PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, # but only if the requested major.minor version is the same as the current one. # The variable HDF4_VERSION_STRING must be set before calling configure_file(). set (PACKAGE_VERSION "@HDF4_VERSION_STRING@") if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() if("@H4_VERS_MAJOR@.@H4_VERS_MINOR@" MATCHES "^([0-9]+)\\.([0-9]+)") set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") set(CVF_VERSION_MINOR "${CMAKE_MATCH_2}") else() set(CVF_VERSION_MAJOR "@HDF4_VERSION_STRING@") set(CVF_VERSION_MINOR "") endif() if((PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) AND (PACKAGE_FIND_VERSION_MINOR STREQUAL CVF_VERSION_MINOR)) set(PACKAGE_VERSION_COMPATIBLE TRUE) else() set(PACKAGE_VERSION_COMPATIBLE FALSE) endif() if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) set(PACKAGE_VERSION_EXACT TRUE) endif() endif() # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") return() endif() # check that the installed version has the same 32/64bit-ness as the one which is currently searching: if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@") math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/hdf4-config.cmake.in�����������������������������������������������������0000664�0000000�0000000�00000020516�15030617045�0021057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------------------------------- # HDF4 Config file for compiling against hdf4 build/install directory #----------------------------------------------------------------------------- @PACKAGE_INIT@ string(TOUPPER @HDF4_PACKAGE@ HDF4_PACKAGE_NAME) set (${HDF4_PACKAGE_NAME}_VALID_COMPONENTS static shared C Fortran Java ) set (${HDF4_PACKAGE_NAME}_BUILD_MODE @HDF_CFG_NAME@) #----------------------------------------------------------------------------- # User Options #----------------------------------------------------------------------------- # Languages: #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_BUILD_FORTRAN @HDF4_BUILD_FORTRAN@) set (${HDF4_PACKAGE_NAME}_BUILD_JAVA @HDF4_BUILD_JAVA@) #----------------------------------------------------------------------------- # Features: #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_BUILD_SHARED_LIBS @H4_ENABLE_SHARED_LIB@) set (${HDF4_PACKAGE_NAME}_BUILD_STATIC_LIBS @H4_ENABLE_STATIC_LIB@) #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_BUILD_TOOLS @HDF4_BUILD_TOOLS@) set (${HDF4_PACKAGE_NAME}_BUILD_UTILS @HDF4_BUILD_UTILS@) set (${HDF4_PACKAGE_NAME}_BUILD_STATIC_TOOLS @HDF4_BUILD_STATIC_TOOLS@) #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_ENABLE_JPEG_LIB_SUPPORT @HDF4_ENABLE_JPEG_LIB_SUPPORT@) set (${HDF4_PACKAGE_NAME}_ENABLE_Z_LIB_SUPPORT @HDF4_ENABLE_Z_LIB_SUPPORT@) set (${HDF4_PACKAGE_NAME}_ENABLE_SZIP_SUPPORT @HDF4_ENABLE_SZIP_SUPPORT@) set (${HDF4_PACKAGE_NAME}_ENABLE_SZIP_ENCODING @HDF4_ENABLE_SZIP_ENCODING@) #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_PACKAGE_EXTLIBS @HDF4_PACKAGE_EXTLIBS@) set (${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES @HDF4_LIBRARIES_TO_EXPORT@) set (${HDF4_PACKAGE_NAME}_ARCHITECTURE "@CMAKE_GENERATOR_ARCHITECTURE@") set (${HDF4_PACKAGE_NAME}_TOOLSET "@CMAKE_GENERATOR_TOOLSET@") #----------------------------------------------------------------------------- # Dependencies #----------------------------------------------------------------------------- if (${HDF4_PACKAGE_NAME}_BUILD_JAVA) set (${HDF4_PACKAGE_NAME}_JAVA_INCLUDE_DIRS @PACKAGE_CURRENT_BUILD_DIR@/lib/jarhdf-@HDF4_VERSION_STRING@.jar @PACKAGE_CURRENT_BUILD_DIR@/lib/slf4j-api-2.0.16.jar @PACKAGE_CURRENT_BUILD_DIR@/lib/slf4j-nop-2.0.16.jar ) endif () #----------------------------------------------------------------------------- # Directories #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@" "${${HDF4_PACKAGE_NAME}_MPI_C_INCLUDE_PATH}" ) set (${HDF4_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@") set_and_check (${HDF4_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@") if (${HDF4_PACKAGE_NAME}_BUILD_FORTRAN) set (${HDF4_PACKAGE_NAME}_INCLUDE_DIR_FORTRAN "@PACKAGE_INCLUDE_INSTALL_DIR@" ) endif () if (${HDF4_PACKAGE_NAME}_BUILD_TOOLS) set (${HDF4_PACKAGE_NAME}_INCLUDE_DIR_TOOLS "@PACKAGE_INCLUDE_INSTALL_DIR@" ) set_and_check (${HDF4_PACKAGE_NAME}_TOOLS_DIR "@PACKAGE_CURRENT_BUILD_DIR@/bin" ) endif () if (${HDF4_PACKAGE_NAME}_BUILD_UTILS) set (${HDF4_PACKAGE_NAME}_INCLUDE_DIR_UTILS "@PACKAGE_INCLUDE_INSTALL_DIR@" ) set_and_check (${HDF4_PACKAGE_NAME}_UTILS_DIR "@PACKAGE_CURRENT_BUILD_DIR@/bin" ) endif () #----------------------------------------------------------------------------- # Version Strings #----------------------------------------------------------------------------- set (${HDF4_PACKAGE_NAME}_VERSION_STRING @HDF4_VERSION_STRING@) set (${HDF4_PACKAGE_NAME}_VERSION_MAJOR @HDF4_VERSION_MAJOR@) set (${HDF4_PACKAGE_NAME}_VERSION_MINOR @HDF4_VERSION_MINOR@) #----------------------------------------------------------------------------- # Don't include targets if this file is being picked up by another # project which has already built hdf4 as a subproject #----------------------------------------------------------------------------- if (NOT TARGET "@HDF4_PACKAGE@") if (${HDF4_PACKAGE_NAME}_ENABLE_JPEG_LIB_SUPPORT AND ${HDF4_PACKAGE_NAME}_PACKAGE_EXTLIBS) include (@PACKAGE_SHARE_INSTALL_DIR@/@JPEG_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake) endif () if (${HDF4_PACKAGE_NAME}_ENABLE_Z_LIB_SUPPORT AND ${HDF4_PACKAGE_NAME}_PACKAGE_EXTLIBS) include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake) endif () if (${HDF4_PACKAGE_NAME}_ENABLE_SZIP_SUPPORT AND ${HDF4_PACKAGE_NAME}_PACKAGE_EXTLIBS) include (@PACKAGE_SHARE_INSTALL_DIR@/@LIBAEC_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake) endif () include (@PACKAGE_SHARE_INSTALL_DIR@/@HDF4_PACKAGE@@HDF_PACKAGE_EXT@-targets.cmake) endif () # Handle default component(static) : if (NOT ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS) if (${HDF4_PACKAGE_NAME}_BUILD_STATIC_LIBS) set (${HDF4_PACKAGE_NAME}_LIB_TYPE) set (${HDF4_PACKAGE_NAME}_FIND_COMPONENTS C static) set (${HDF4_PACKAGE_NAME}_FIND_REQUIRED_static_C true) else () set (${HDF4_PACKAGE_NAME}_LIB_TYPE) set (${HDF4_PACKAGE_NAME}_FIND_COMPONENTS C shared) set (${HDF4_PACKAGE_NAME}_FIND_REQUIRED_shared_C true) endif () endif () # Handle requested components: list (REMOVE_DUPLICATES ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS) foreach (comp IN LISTS ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS) if (comp STREQUAL "shared") list (REMOVE_ITEM ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS ${comp}) set (${HDF4_PACKAGE_NAME}_LIB_TYPE ${${HDF4_PACKAGE_NAME}_LIB_TYPE} ${comp}) elseif (comp STREQUAL "static") list (REMOVE_ITEM ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS ${comp}) set (${HDF4_PACKAGE_NAME}_LIB_TYPE ${${HDF4_PACKAGE_NAME}_LIB_TYPE} ${comp}) endif () endforeach () foreach (libtype IN LISTS ${HDF4_PACKAGE_NAME}_LIB_TYPE) foreach (comp IN LISTS ${HDF4_PACKAGE_NAME}_FIND_COMPONENTS) set (hdf4_comp2) if (comp STREQUAL "C") set (hdf4_comp "hdf") elseif (comp STREQUAL "Java") set (hdf4_comp "hdf_java") elseif (comp STREQUAL "Fortran") set (hdf4_comp2 "hdf_fcstub") set (hdf4_comp "hdf_fortran") endif () if (comp STREQUAL "Java") list (FIND ${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES "${hdf4_comp}" HAVE_COMP) if (${HAVE_COMP} LESS 0) set (${HDF4_PACKAGE_NAME}_${comp}_FOUND 0) else () set (${HDF4_PACKAGE_NAME}_${comp}_FOUND 1) string(TOUPPER ${HDF4_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @HDF4_PACKAGE@::${hdf4_comp}) endif () else () list (FIND ${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES "${hdf4_comp}-${libtype}" HAVE_COMP) list (FIND ${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES "mf${hdf4_comp}-${libtype}" HAVE_MFCOMP) if (${HAVE_COMP} LESS 0 OR ${HAVE_MFCOMP} LESS 0) set (${HDF4_PACKAGE_NAME}_${libtype}_${comp}_FOUND 0) else () if (hdf4_comp2) list (FIND ${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES "${hdf4_comp2}-${libtype}" HAVE_COMP2) list (FIND ${HDF4_PACKAGE_NAME}_EXPORT_LIBRARIES "mf${hdf4_comp2}-${libtype}" HAVE_MFCOMP2) if (${HAVE_COMP2} LESS 0 OR ${HAVE_MFCOMP2} LESS 0) set (${HDF4_PACKAGE_NAME}_${libtype}_${comp}_FOUND 0) else () set (${HDF4_PACKAGE_NAME}_${libtype}_${comp}_FOUND 1) string(TOUPPER ${HDF4_PACKAGE_NAME}_${comp}_${libtype}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @HDF_PACKAGE_NAMESPACE@${hdf4_comp2}-${libtype} @HDF_PACKAGE_NAMESPACE@${hdf4_comp}-${libtype} @HDF4_PACKAGE@::mf${hdf4_comp2}-${libtype} @HDF4_PACKAGE@::mf${hdf4_comp}-${libtype}) endif () else () set (${HDF4_PACKAGE_NAME}_${libtype}_${comp}_FOUND 1) string(TOUPPER ${HDF4_PACKAGE_NAME}_${comp}_${libtype}_LIBRARY COMP_LIBRARY) set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @HDF_PACKAGE_NAMESPACE@${hdf4_comp}-${libtype} @HDF_PACKAGE_NAMESPACE@mf${hdf4_comp}-${libtype}) endif () endif () endif () endforeach () endforeach () foreach (libtype IN LISTS ${HDF4_PACKAGE_NAME}_LIB_TYPE) check_required_components(${HDF4_PACKAGE_NAME}_${libtype}) endforeach () ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/javaTargets.cmake.in�����������������������������������������������������0000664�0000000�0000000�00000002256�15030617045�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_policy(PUSH) cmake_policy(VERSION 2.8.12...3.27) #---------------------------------------------------------------- # Generated CMake Java target import file. #---------------------------------------------------------------- # Protect against multiple inclusion, which would fail when already imported targets are added once more. set(_targetsDefined) set(_targetsNotDefined) set(_expectedTargets) foreach(_expectedTarget @__targets__@) list(APPEND _expectedTargets ${_expectedTarget}) if(TARGET ${_expectedTarget}) list(APPEND _targetsDefined ${_expectedTarget}) else() list(APPEND _targetsNotDefined ${_expectedTarget}) endif() endforeach() if("%${_targetsDefined}" STREQUAL "%${_expectedTargets}") unset(_targetsDefined) unset(_targetsNotDefined) unset(_expectedTargets) cmake_policy(POP) return() endif() if(NOT "${_targetsDefined}" STREQUAL "") message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\n" "Targets Defined: ${_targetsDefined}\n" "Targets not yet defined: ${_targetsNotDefined}\n") endif() unset(_targetsDefined) unset(_targetsNotDefined) unset(_expectedTargets) @__targetdefs__@ cmake_policy(POP) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/jrunTest.cmake�����������������������������������������������������������0000664�0000000�0000000�00000031773�15030617045�0020207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# jrunTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0053 NEW) # arguments checking if (NOT TEST_TESTER) message (FATAL_ERROR "Require TEST_TESTER to be defined") endif () if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_LIBRARY_DIRECTORY) # Directory to add to PATH message (VERBOSE "Optional TEST_LIBRARY_DIRECTORY is not defined") endif () if (NOT TEST_CLASSPATH) message (VERBOSE "Optional TEST_CLASSPATH is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (NOT TEST_LOG_LEVEL) # java logger verbosity level set (LOG_LEVEL "info") else () set (LOG_LEVEL "${TEST_LOG_LEVEL}") endif () message (STATUS "COMMAND: ${TEST_TESTER} -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=${LOG_LEVEL} -Djava.library.path=\"${TEST_LIBRARY_DIRECTORY}\" -cp \"${TEST_CLASSPATH}\" ${TEST_ARGS} ${TEST_PROGRAM} ${ARGN}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_TESTER} -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLogLevel=${LOG_LEVEL} -Djava.library.path=${TEST_LIBRARY_DIRECTORY} -cp "${TEST_CLASSPATH}" ${TEST_ARGS} ${TEST_PROGRAM} ${ARGN} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) message (STATUS "COMMAND Result: ${TEST_RESULT}") message (STATUS "COMMAND Error: ${TEST_ERROR}") # if the .err file exists and ERRROR_APPEND is enabled if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (TEST_MASK_FILE) # replace directory name with generic name STRING(REGEX REPLACE "CurrentDir is [^\n]+\n" "CurrentDir is (dir name)\n" TEST_STREAM "${TEST_STREAM}") endif () if (NOT ERROR_APPEND) # write back to original .err file file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) else () # append error output to the stdout output file file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () endif () # if the output file or the .err file needs to mask out error stack info if (TEST_MASK_ERROR) if (NOT TEST_ERRREF) # the error stack has been appended to the output file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) endif () else () # the error stack remains in the .err file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) endif () endif () string (REGEX REPLACE "Time:[^\n]+\n" "Time: XXXX\n" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") #string (REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "HDF4 .[1-9]*[.][0-9]*[.][0-9]*[^)]*" "HDF4 (version (number)" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files if (NOT TEST_ERRREF) file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) else () file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) endif () endif () # if the return value is !=expected bail out if (NOT TEST_RESULT EQUAL TEST_EXPECT) message (STATUS "ERROR OUTPUT: ${TEST_STREAM}") message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n${TEST_ERROR}") endif () # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) # verify there is text output in the reference file if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_REFERENCE} ${TEST_FOLDER}/${TEST_REFERENCE}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_REFERENCE}.tmp ${TEST_FOLDER}/${TEST_REFERENCE}) endif () endif () if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () # sort the output files first before comparing file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) if (line GREATER_EQUAL len_act) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_FOLDER}/${TEST_OUTPUT}") set (TEST_COMPARE_RESULT 1) break () elseif (line GREATER_EQUAL len_ref) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_FOLDER}/${TEST_REFERENCE}") set (TEST_COMPARE_RESULT 1) break () else () list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () endif () # TEST_COMPARE_RESULT endif () # test_len GREATER 0 endif () # EXISTS "${TEST_FOLDER}/${TEST_REFERENCE} message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () # now compare the .err file with the error reference, if supplied if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") set (TEST_ERRREF_RESULT 0) if (TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF}") file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (WIN32) configure_file(${TEST_FOLDER}/${TEST_ERRREF} ${TEST_FOLDER}/${TEST_ERRREF}.tmp NEWLINE_STYLE CRLF) if (EXISTS "${TEST_FOLDER}/${TEST_ERRREF}.tmp") file(RENAME ${TEST_FOLDER}/${TEST_ERRREF}.tmp ${TEST_FOLDER}/${TEST_ERRREF}) endif () endif () # now compare the error output with the error reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF} RESULT_VARIABLE TEST_ERRREF_RESULT ) if (TEST_ERRREF_RESULT) set (TEST_ERRREF_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref) list (LENGTH test_ref len_ref) math (EXPR _FP_LEN "${len_ref} - 1") if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_ERRREF_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT}.err is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_ERRREF} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_ERRREF_RESULT 1) endif () endif () # TEST_ERRREF_RESULT endif () # test_len GREATER 0 message (STATUS "COMPARE Result: ${TEST_ERRREF_RESULT}") # again, if return value is !=0 scream and shout if (TEST_ERRREF_RESULT) message (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}") endif () endif () # TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF} else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT}.err does not exist") endif () endif () set (TEST_GREP_RESULT 0) if (TEST_GREP_COMPARE AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") # now grep the output with the reference file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # TEST_REFERENCE should always be matched string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () # dump the output unless nodisplay option is set if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_STREAM} RESULT_VARIABLE TEST_RESULT ) endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") �����hdf4-hdf4.3.1/config/cmake/libh4cc.in���������������������������������������������������������������0000775�0000000�0000000�00000005061�15030617045�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh ## # Copyright by The HDF Group. # All rights reserved. # # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. ## prg=$0 if [ ! -e "$prg" ]; then case $prg in (*/*) exit 1;; (*) prg=$(command -v -- "$prg") || exit;; esac fi dir=$( cd -P -- "$(dirname -- "$prg")/.." && pwd -P ) || exit prg=$dir/bin/$(basename -- "$prg") || exit #printf '%s\n' "$prg" #printf 'dir is %s\n' "$dir" pc_args="" # Show the configuration summary of the library recorded in the # libhdf4.settings file residing in the lib directory. showconfigure() { cat $dir/@HDF4_INSTALL_LIB_DIR@/libhdf4.settings status=$? } usage() { # "How-to use" message. echo "usage: $prg [OPTIONS] <pkg-config line>" echo " OPTIONS:" echo " -help This help message." echo " -show Show the commands without executing them" echo " -showconfig Show the HDF4 library configuration summary" echo " " echo " <pkg-config line> - the pkg-config compile line options for the compiler" echo " that was used to compile HDF4." echo " Use pkg-config --help for more information" echo " on which options are available. $prg passes pkg-config options" echo " through as those options use double-underscores." echo " " echo " NOTE: pkg-config is required to be installed on your system and" echo " using --static requires a static version of the C runtime library" echo " to be have been installed on your system." echo " " exit $EXIT_FAILURE } export PKG_CONFIG_PATH=$dir/@HDF4_INSTALL_LIB_DIR@/pkgconfig for arg in $@ ; do case "$arg" in -showconfig) showconfigure exit $status ;; -show) shift echo @_PKG_CONFIG_COMPILER@ "$@" `pkg-config $pc_args --define-variable=prefix=$dir --cflags --libs @_PKG_CONFIG_LIBNAME@` exit $status ;; -help) usage exit $status ;; --*) # gather pkg-config specific options pc_args="$pc_args $arg" ;; *) @_PKG_CONFIG_COMPILER@ "$@" `pkg-config $pc_args --define-variable=prefix=$dir --cflags --libs @_PKG_CONFIG_LIBNAME@` status=$? exit $status ;; esac done �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/libhdf4.pc.in������������������������������������������������������������0000775�0000000�0000000�00000000714�15030617045�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������prefix=@_PKG_CONFIG_PREFIX@ exec_prefix=@_PKG_CONFIG_EXEC_PREFIX@ libdir=@_PKG_CONFIG_LIBDIR@ includedir=@_PKG_CONFIG_INCLUDEDIR@ Name: @_PKG_CONFIG_LIBNAME@ Description: HDF (Hierarchical Data Format 4) Software Library Version: @_PKG_CONFIG_VERSION@ Cflags: -I${includedir} Libs: -L${libdir} @_PKG_CONFIG_SH_LIBS@ Requires: @_PKG_CONFIG_REQUIRES@ Libs.private: @_PKG_CONFIG_LIBS@ @_PKG_CONFIG_LIBS_PRIVATE@ Requires.private: @_PKG_CONFIG_REQUIRES_PRIVATE@ ����������������������������������������������������hdf4-hdf4.3.1/config/cmake/libhdf4.settings.cmake.in������������������������������������������������0000664�0000000�0000000�00000003476�15030617045�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ SUMMARY OF THE HDF4 CONFIGURATION ================================= General Information: ------------------- HDF4 Version: @HDF4_PACKAGE_VERSION_STRING@ Configured on: @CONFIG_DATE@ Configured by: @CMAKE_GENERATOR@ Configure mode: CMAKE @CMAKE_VERSION@ Host system: @CMAKE_HOST_SYSTEM@ Uname information: @CMAKE_SYSTEM_NAME@ Libraries: @BUILD_NAME_EXT@ Installation point: @CMAKE_INSTALL_PREFIX@ Compiling Options: ------------------ Compilation Mode: @CMAKE_BUILD_TYPE@ C Compiler: @CMAKE_C_COMPILER@ CFLAGS: @CMAKE_C_FLAGS@ CPPFLAGS: @CMAKE_CPP_FLAGS@ Shared Libraries: @H4_ENABLE_SHARED_LIB@ Static Libraries: YES Statically Linked Executables: @BUILD_STATIC_EXECS@ LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@ Extra libraries: @LINK_LIBS@ Archiver: @CMAKE_AR@ Ranlib: @CMAKE_RANLIB@ Languages: ---------- Fortran: @HDF4_BUILD_FORTRAN@ @BUILD_FORTRAN_CONDITIONAL_TRUE@ Fortran Compiler: @CMAKE_Fortran_COMPILER@ @BUILD_FORTRAN_CONDITIONAL_TRUE@ Fortran Flags: @CMAKE_Fortran_FLAGS@ JAVA: @HDF4_BUILD_JAVA@ @BUILD_JAVA_CONDITIONAL_TRUE@ JAVA Compiler: @CMAKE_Java_COMPILER@ @Java_VERSION@ Features: --------- SZIP compression: @SZIP_INFO@ Export HDF4-built netCDF-2 API: @HDF4_ENABLE_NETCDF@ (ON: export undecorated netCDF names, OFF: prefix with 'sd_') HDF4-built ncdump and ncgen: @HDF4_BUILD_NETCDF_TOOLS@ With deprecated public symbols: @HDF4_ENABLE_DEPRECATED_SYMBOLS@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/mccacheinit.cmake��������������������������������������������������������0000664�0000000�0000000�00000007204�15030617045�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is the CMakeCache file. ######################### # EXTERNAL cache entries ######################### set (BUILD_TESTING ON CACHE BOOL "Build HDF4 Unit Testing" FORCE) set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE) set (HDF_PACKAGE_NAMESPACE "hdf4::" CACHE STRING "Name for HDF package namespace" FORCE) set (HDF4_BUILD_EXAMPLES ON CACHE BOOL "Build HDF4 Library Examples" FORCE) set (HDF4_BUILD_UTILS ON CACHE BOOL "Build HDF4 Library Utilities" FORCE) set (HDF4_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE) set (HDF4_ENABLE_JPEG_LIB_SUPPORT ON CACHE BOOL "Use JPEG Filter" FORCE) set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "Use SZip Filter" FORCE) set (HDF4_ENABLE_SZIP_ENCODING OFF CACHE BOOL "Use SZip Encoding" FORCE) set (HDF4_USING_ANALYSIS_TOOL ON CACHE BOOL "Indicate that an analysis checker is used" FORCE) set (HDF4_DISABLE_COMPILER_WARNINGS OFF CACHE BOOL "Disable compiler warnings" FORCE) set (HDF4_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE) set (HDF4_PACKAGE_EXTLIBS OFF CACHE BOOL "CPACK - include external libraries" FORCE) set (HDF4_NO_PACKAGES ON CACHE BOOL "CPACK - Disable packaging" FORCE) set (HDF4_MINGW_STATIC_GCC_LIBS ON CACHE BOOL "Statically link libgcc/libstdc++" FORCE) set (HDF4_ALLOW_EXTERNAL_SUPPORT "TGZ" CACHE STRING "Allow External Library Building (NO GIT TGZ)" FORCE) set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) ######################## # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use HDF4_ZLib from compressed file" FORCE) set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) set (ZLIBNG_TGZ_NAME "2.2.2.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE) set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE) set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE) set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE) set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from GitHub repository" FORCE) set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE) set (JPEG_PACKAGE_NAME "jpeg" CACHE STRING "Name of JPEG package" FORCE) set (JPEG_TGZ_ORIGPATH "https://www.ijg.org/filesz" CACHE STRING "Use JPEG from original location" FORCE) set (JPEG_TGZ_NAME "jpegsrc.v9e.tar.gz" CACHE STRING "Use JPEG from original compressed file" FORCE) set (JPEG_USE_LOCALCONTENT ON CACHE BOOL "Use local file for JPEG FetchContent" FORCE) set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE) set (CTEST_CONFIGURATION_TYPE "Debug" CACHE STRING "Build Debug" FORCE) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/patch.xml.in�������������������������������������������������������������0000664�0000000�0000000�00000000520�15030617045�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<CPackWiXPatch> <CPackWiXFragment Id="CM_CP_libraries.bin.@WIX_CMP_NAME@.dll"> <Environment Id="PATH" Name="PATH" Value="[CM_DP_libraries.bin]" Permanent="no" Part="last" Action="set" System="yes"/> </CPackWiXFragment> </CPackWiXPatch> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/runTest.cmake������������������������������������������������������������0000664�0000000�0000000�00000040721�15030617045�0020026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# runTest.cmake executes a command and captures the output in a file. File is then compared # against a reference file. Exit status of command can also be compared. cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0053 NEW) # arguments checking if (NOT TEST_PROGRAM) message (FATAL_ERROR "Require TEST_PROGRAM to be defined") endif () if (NOT TEST_FOLDER) message (FATAL_ERROR "Require TEST_FOLDER to be defined") endif () if (NOT TEST_OUTPUT) message (FATAL_ERROR "Require TEST_OUTPUT to be defined") endif () if (NOT TEST_EXPECT) message (VERBOSE "Optional TEST_EXPECT is not defined") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () message (STATUS "COMMAND: ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS}") if (TEST_LIBRARY_DIRECTORY) # Directory to add to PATH if (WIN32) set (ENV{PATH} "$ENV{PATH};${TEST_LIBRARY_DIRECTORY}") elseif (APPLE) set (ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") else () set (ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${TEST_LIBRARY_DIRECTORY}") endif () endif () if (TEST_ENV_VAR) set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") message (TRACE "ENV:${TEST_ENV_VAR}=$ENV{${TEST_ENV_VAR}}") endif () if (NOT TEST_INPUT) # run the test program, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) else () # run the test program with stdin, capture the stdout/stderr and the result var execute_process ( COMMAND ${TEST_EMULATOR} ${TEST_PROGRAM} ${TEST_ARGS} WORKING_DIRECTORY ${TEST_FOLDER} RESULT_VARIABLE TEST_RESULT INPUT_FILE ${TEST_INPUT} OUTPUT_FILE ${TEST_OUTPUT} ERROR_FILE ${TEST_OUTPUT}.err OUTPUT_VARIABLE TEST_OUT ERROR_VARIABLE TEST_ERROR ) endif () message (STATUS "COMMAND Result: ${TEST_RESULT}") # append the test result status with a predefined text if (TEST_APPEND) file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_RESULT}\n") endif () message (STATUS "COMMAND Error: ${TEST_ERROR}") ############################################# # Begin of file filtering ############################################# if (TEST_REGEX) # TEST_REGEX and TEST_MATCH should always be checked if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_REGEX}" REGEX_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${REGEX_MATCH}" "${TEST_MATCH}" REGEX_RESULT) if (NOT REGEX_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_MATCH}") endif () else () message (STATUS "Failed: No output of ${TEST_PROGRAM}") endif () endif () # if the .err file exists if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) if (TEST_MASK_FILE) # replace directory name with generic name STRING(REGEX REPLACE "CurrentDir is [^\n]+\n" "CurrentDir is (dir name)\n" TEST_STREAM "${TEST_STREAM}") endif () # remove special output string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*no version information available[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}") endif () if (NOT ERROR_APPEND) # write back to original .err file file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) else () # append error output to the stdout output file file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () endif () endif () # if the return value is !=${TEST_EXPECT} bail out if (NOT TEST_RESULT EQUAL TEST_EXPECT) if (NOT TEST_NOERRDISPLAY) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) message (STATUS "Output :\n${TEST_STREAM}") endif () if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) message (STATUS "Error Output :\n${TEST_STREAM}") endif () endif () message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != ${TEST_EXPECT}.\n${TEST_ERROR}") endif () # remove special regex text from the output if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "ulimit -s" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*ulimit -s[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT) if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*no version information available[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () # if the output file needs Storage text masked out if (TEST_MASK_STORE) string (REGEX REPLACE "Storage:[^\n]+\n" "Storage: <details removed for portability>\n" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () # if the output file needs Modified text removed if (TEST_MASK_MOD) string (REGEX REPLACE "Modified:[^\n]+\n" "Modified: XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () endif () # if the output file or the .err file needs to mask out error stack info if (TEST_MASK_ERROR) if (NOT TEST_ERRREF) # the error stack has been appended to the output file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) endif () else () # the error stack remains in the .err file if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) endif () endif () string (REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") string (REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") # write back the changes to the original files if (NOT TEST_ERRREF) file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) else () file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_STREAM}) endif () endif () if (TEST_REF_FILTER) if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) string (REGEX REPLACE "${TEST_REF_APPEND}" "${TEST_REF_FILTER}" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_REFERENCE} "${TEST_STREAM}") endif () endif () # replace text from the output file if (TEST_FILTER) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) message (STATUS "TEST_FILTER: ${TEST_FILTER} TEST_FILTER_REPLACE: ${TEST_FILTER_REPLACE}") string (REGEX REPLACE "${TEST_FILTER}" "${TEST_FILTER_REPLACE}" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") endif () endif () # mask text in the output file set(TEST_PROCESSED_OUTPUT "${TEST_FOLDER}/${TEST_OUTPUT}") set(TEST_PROCESSED_REFERENCE "${TEST_FOLDER}/${TEST_REFERENCE}") if (TEST_MASK AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") H4_MASK_FILE("${TEST_FOLDER}/${TEST_OUTPUT}") # Later comparisons should use the masked value set(TEST_PROCESSED_OUTPUT "${TEST_FOLDER}/${TEST_OUTPUT}_masked") set(TEST_PROCESSED_REFERENCE "${TEST_FOLDER}/${TEST_REFERENCE}_masked") endif () ############################################# # End of file filtering ############################################# # compare output files to references unless this must be skipped set (TEST_COMPARE_RESULT 0) # grep result variable; 0 is success if (NOT TEST_SKIP_COMPARE) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") if (EXISTS "${TEST_FOLDER}/${TEST_REFERENCE}") file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) list (LENGTH TEST_STREAM test_len) # verify there is text output in the reference file if (test_len GREATER 0) if (NOT TEST_SORT_COMPARE) # now compare the output with the reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_PROCESSED_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} RESULT_VARIABLE TEST_COMPARE_RESULT ) else () # sort the output files first before comparing file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} v1) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} v2) list (SORT v1) list (SORT v2) if (NOT v1 STREQUAL v2) set (TEST_COMPARE_RESULT 1) endif () endif () # only compare files if previous operations were successful if (TEST_COMPARE_RESULT) set (TEST_COMPARE_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) list (LENGTH test_ref len_ref) if (NOT len_act EQUAL len_ref) set (TEST_COMPARE_RESULT 1) endif () if (len_act GREATER 0 AND len_ref GREATER 0) if (TEST_SORT_COMPARE) list (SORT test_act) list (SORT test_ref) endif () math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) if (line GREATER_EQUAL len_act) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_PROCESSED_OUTPUT}") set (TEST_COMPARE_RESULT 1) break () elseif (line GREATER_EQUAL len_ref) message (STATUS "COMPARE FAILED: ran out of lines in ${TEST_PROCESSED_REFERENCE}") set (TEST_COMPARE_RESULT 1) break () else () list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_COMPARE_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT} is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_REFERENCE} is empty") endif () endif () endif () # TEST_COMPARE_RESULT endif () # test_len GREATER 0 endif () # EXISTS "${TEST_FOLDER}/${TEST_REFERENCE} message (STATUS "COMPARE Result: ${TEST_COMPARE_RESULT}") # again, if return value is !=0 scream and shout if (TEST_COMPARE_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") endif () else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT} does not exist") endif () # now compare the .err file with the error reference, if supplied if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") set (TEST_ERRREF_RESULT 0) if (TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF}") file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # now compare the error output with the error reference execute_process ( COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF} RESULT_VARIABLE TEST_ERRREF_RESULT ) if (TEST_ERRREF_RESULT) set (TEST_ERRREF_RESULT 0) file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act) list (LENGTH test_act len_act) file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref) list (LENGTH test_ref len_ref) math (EXPR _FP_LEN "${len_ref} - 1") if (len_act GREATER 0 AND len_ref GREATER 0) math (EXPR _FP_LEN "${len_ref} - 1") foreach (line RANGE 0 ${_FP_LEN}) list (GET test_act ${line} str_act) list (GET test_ref ${line} str_ref) if (NOT str_act STREQUAL str_ref) if (str_act) set (TEST_ERRREF_RESULT 1) message (STATUS "line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") endif () endif () endforeach () else () # len_act GREATER 0 AND len_ref GREATER 0 if (len_act EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_OUTPUT}.err is empty") endif () if (len_ref EQUAL 0) message (STATUS "COMPARE Failed: ${TEST_FOLDER}/${TEST_ERRREF} is empty") endif () endif () if (NOT len_act EQUAL len_ref) set (TEST_ERRREF_RESULT 1) endif () endif () # TEST_ERRREF_RESULT endif () # test_len GREATER 0 message (STATUS "COMPARE Result: ${TEST_ERRREF_RESULT}") # again, if return value is !=0 scream and shout if (TEST_ERRREF_RESULT) message (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}") endif () endif () # TEST_ERRREF AND EXISTS "${TEST_FOLDER}/${TEST_ERRREF} else () message (TRACE "Test output file ${TEST_FOLDER}/${TEST_OUTPUT}.err does not exist") endif () endif () # TEST_SKIP_COMPARE set (TEST_GREP_RESULT 0) if (TEST_GREP_COMPARE AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") # now grep the output with the reference file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) list (LENGTH TEST_STREAM test_len) if (test_len GREATER 0) # TEST_REFERENCE should always be matched string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) if (NOT TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") endif () endif () endif () # Check that TEST_FILTER text is not in the output when TEST_EXPECT is set to 1 if (TEST_FILTER AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_PROCESSED_OUTPUT} TEST_STREAM) string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) # TEST_EXPECT (1) interprets TEST_FILTER as; NOT to match if (TEST_EXPECT) string (LENGTH "${TEST_MATCH}" TEST_GREP_RESULT) if (TEST_GREP_RESULT) message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") endif () endif () endif () # dump the output unless nodisplay option is set if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY AND EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) execute_process ( COMMAND ${CMAKE_COMMAND} -E echo ${TEST_STREAM} RESULT_VARIABLE TEST_RESULT ) endif () # Check if the output files should not be removed if (NOT DEFINED ENV{HDF4_NOCLEANUP}) if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) endif () if (TEST_DELETE_LIST) foreach (dfile in ${TEST_DELETE_LIST}) file (REMOVE ${dfile}) endforeach () endif () endif () # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") �����������������������������������������������hdf4-hdf4.3.1/config/cmake/scripts/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017043�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/scripts/CTestScript.cmake������������������������������������������������0000775�0000000�0000000�00000027274�15030617045�0022273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) ######################################################## # For any comments please contact help@hdfgroup.org # ######################################################## # ----------------------------------------------------------- # -- Get environment # ----------------------------------------------------------- if (NOT SITE_OS_NAME) ## machine name not provided - attempt to discover with uname ## -- set hostname ## -------------------------- find_program (HOSTNAME_CMD NAMES hostname) execute_process (COMMAND ${HOSTNAME_CMD} OUTPUT_VARIABLE HOSTNAME OUTPUT_STRIP_TRAILING_WHITESPACE) set (CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}") find_program (UNAME NAMES uname) macro (getuname name flag) execute_process (COMMAND "${UNAME}" "${flag}" OUTPUT_VARIABLE "${name}" OUTPUT_STRIP_TRAILING_WHITESPACE) endmacro () getuname (osname -s) string(STRIP ${osname} osname) getuname (osrel -r) string(STRIP ${osrel} osrel) getuname (cpu -m) string(STRIP ${cpu} cpu) message (STATUS "Dashboard script uname output: ${osname}-${osrel}-${cpu}\n") set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}") else () ## machine name provided ## -------------------------- if (CMAKE_HOST_UNIX) set (CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_OS_BITS}-${SITE_COMPILER_NAME}-${SITE_COMPILER_VERSION}") else () set (CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_COMPILER_NAME}") endif () endif () if (SITE_BUILDNAME_SUFFIX) set (CTEST_BUILD_NAME "${SITE_BUILDNAME_SUFFIX}-${CTEST_BUILD_NAME}") endif () set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}") # Launchers work only with Makefile and Ninja generators. if (NOT "${CTEST_CMAKE_GENERATOR}" MATCHES "Make|Ninja" OR LOCAL_SKIP_TEST) set (CTEST_USE_LAUNCHERS 0) set (ENV{CTEST_USE_LAUNCHERS_DEFAULT} 0) set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=OFF") else () set (CTEST_USE_LAUNCHERS 1) set (ENV{CTEST_USE_LAUNCHERS_DEFAULT} 1) set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON") endif () #----------------------------------------------------------------------------- # MacOS machines need special options #----------------------------------------------------------------------------- if (APPLE) # Compiler choice execute_process (COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE) set (ENV{CC} "${XCODE_CC}") if (NOT NO_MAC_FORTRAN) # Shared fortran is not supported, build static set (BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_JPEG_WITH_PIC:BOOL=ON") else () set (BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") endif () set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF") endif () #----------------------------------------------------------------------------- set (NEED_REPOSITORY_CHECKOUT 0) set (CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"") if (CTEST_USE_TAR_SOURCE) ## -------------------------- if (WIN32 AND NOT MINGW) message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip]") execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip RESULT_VARIABLE rv) else () message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar]") execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar RESULT_VARIABLE rv) endif () if (NOT rv EQUAL 0) message (STATUS "extracting... [error-(${rv}) clean up]") file (REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}") message (FATAL_ERROR "error: extract of ${CTEST_USE_TAR_SOURCE} failed") endif () file (RENAME ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE} ${CTEST_SOURCE_DIRECTORY}) set (LOCAL_SKIP_UPDATE "TRUE") else () if (LOCAL_UPDATE) if (CTEST_USE_GIT_SOURCE) find_program (CTEST_GIT_COMMAND NAMES git git.cmd) set (CTEST_GIT_UPDATE_OPTIONS) if (NOT EXISTS "${CTEST_SOURCE_DIRECTORY}") set (NEED_REPOSITORY_CHECKOUT 1) endif () if (${NEED_REPOSITORY_CHECKOUT}) if (REPOSITORY_BRANCH) set (CTEST_GIT_options "clone \"${REPOSITORY_URL}\" --branch \"${REPOSITORY_BRANCH}\" --single-branch \"${CTEST_SOURCE_DIRECTORY}\" --recurse-submodules") else () set (CTEST_GIT_options "clone \"${REPOSITORY_URL}\" \"${CTEST_SOURCE_DIRECTORY}\" --recurse-submodules") endif () set (CTEST_CHECKOUT_COMMAND "${CTEST_GIT_COMMAND} ${CTEST_GIT_options}") else () set (CTEST_GIT_options "pull") endif () set (CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}") endif () endif () endif () #----------------------------------------------------------------------------- ## Clear the build directory ## -------------------------- set (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE) if (NOT EXISTS "${CTEST_BINARY_DIRECTORY}") file (MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}") else () ctest_empty_binary_directory (${CTEST_BINARY_DIRECTORY}) endif () # Use multiple CPU cores to build include (ProcessorCount) ProcessorCount (N) if (NOT N EQUAL 0) if (MAX_PROC_COUNT) if (N GREATER MAX_PROC_COUNT) set (N ${MAX_PROC_COUNT}) endif () endif () if (NOT WIN32) set (CTEST_BUILD_FLAGS -j${N}) endif () set (ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) endif () #----------------------------------------------------------------------------- # Send the main script as a note. list (APPEND CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}" "${CMAKE_CURRENT_LIST_FILE}" "${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake" ) if (EXISTS "${CTEST_SCRIPT_DIRECTORY}/SkipTests.log") list(APPEND CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/SkipTests.log" ) endif () #----------------------------------------------------------------------------- # Check for required variables. # -------------------------- foreach (req CTEST_CMAKE_GENERATOR CTEST_SITE CTEST_BUILD_NAME ) if (NOT DEFINED ${req}) message (FATAL_ERROR "The containing script must set ${req}") endif () endforeach () #----------------------------------------------------------------------------- # Initialize the CTEST commands #------------------------------ if (CMAKE_GENERATOR_TOOLSET) set (CTEST_CONFIGURE_TOOLSET "\"-T${CMAKE_GENERATOR_TOOLSET}\"") else () set (CTEST_CONFIGURE_TOOLSET) endif() if (CMAKE_GENERATOR_ARCHITECTURE) set (CTEST_CONFIGURE_ARCHITECTURE "\"-A${CMAKE_GENERATOR_ARCHITECTURE}\"") else () set (CTEST_CONFIGURE_ARCHITECTURE) endif() if (LOCAL_MEMCHECK_TEST) if(LOCAL_USE_VALGRIND) set (CTEST_MEMORYCHECK_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe") find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) endif() set (CTEST_CONFIGURE_COMMAND "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/mccacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" ${CTEST_CONFIGURE_ARCHITECTURE} ${CTEST_CONFIGURE_TOOLSET} \"${CTEST_SOURCE_DIRECTORY}\"" ) else () if (LOCAL_COVERAGE_TEST) if(LOCAL_USE_GCOV) find_program (CTEST_COVERAGE_COMMAND NAMES gcov) endif () endif () set (CTEST_CONFIGURE_COMMAND "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" ${CTEST_CONFIGURE_ARCHITECTURE} ${CTEST_CONFIGURE_TOOLSET} \"${CTEST_SOURCE_DIRECTORY}\"" ) endif () #----------------------------------------------------------------------------- ## -- set output to english set (ENV{LC_MESSAGES} "en_EN") # Print summary information. foreach (v CTEST_SITE CTEST_BUILD_NAME CTEST_SOURCE_DIRECTORY CTEST_BINARY_DIRECTORY CTEST_CMAKE_GENERATOR CTEST_CONFIGURATION_TYPE CTEST_GIT_COMMAND CTEST_CHECKOUT_COMMAND CTEST_CONFIGURE_COMMAND CTEST_SCRIPT_DIRECTORY CTEST_USE_LAUNCHERS ) set (vars "${vars} ${v}=[${${v}}]\n") endforeach () message (STATUS "Dashboard script configuration:\n${vars}\n") #----------------------------------------------------------------------------- ################################################################### ######### Following is for submission to CDash ############ ################################################################### if (NOT DEFINED MODEL) set (MODEL "Experimental") endif () set (ENV{CI_SITE_NAME} ${CTEST_SITE}) set (ENV{CI_BUILD_NAME} ${CTEST_BUILD_NAME}) set (ENV{CI_MODEL} ${MODEL}) #----------------------------------------------------------------------------- ## NORMAL process ## -- LOCAL_UPDATE updates the source folder from svn ## -- LOCAL_SUBMIT reports to CDash server ## -- LOCAL_SKIP_TEST skips the test process (only builds) ## -- LOCAL_MEMCHECK_TEST executes the Valgrind testing ## -- LOCAL_COVERAGE_TEST executes code coverage process ## -------------------------- ctest_start (${MODEL} GROUP ${MODEL}) if (LOCAL_UPDATE) ctest_update (SOURCE "${CTEST_SOURCE_DIRECTORY}") endif () configure_file (${CTEST_SOURCE_DIRECTORY}/config/cmake/CTestCustom.cmake ${CTEST_BINARY_DIRECTORY}/CTestCustom.cmake) ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}") ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) if (LOCAL_SUBMIT) ctest_submit (PARTS Update Configure Notes) endif () if (${res} LESS 0 OR ${res} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Configure: ${res}\n") endif () ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND RETURN_VALUE res NUMBER_ERRORS errval) if (LOCAL_SUBMIT) ctest_submit (PARTS Build) endif () if (${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed ${errval} Build: ${res}\n") endif () if (NOT LOCAL_SKIP_TEST) if (NOT LOCAL_MEMCHECK_TEST) ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res) if (LOCAL_SUBMIT) ctest_submit (PARTS Test) endif () if (${res} LESS 0 OR ${res} GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Tests: ${res}\n") endif () else () ctest_memcheck (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args}) if (LOCAL_SUBMIT) ctest_submit (PARTS MemCheck) endif () endif () if (LOCAL_COVERAGE_TEST) ctest_coverage (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND) if (LOCAL_SUBMIT) ctest_submit (PARTS Coverage) endif () endif () if (LOCAL_SUBMIT) ctest_submit (PARTS Done) endif () endif () if (NOT LOCAL_MEMCHECK_TEST AND NOT LOCAL_NO_PACKAGE AND NOT LOCAL_SKIP_BUILD) ##----------------------------------------------- ## Package the product ##----------------------------------------------- execute_process (COMMAND cpack -C ${CTEST_CONFIGURATION_TYPE} -V WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY} RESULT_VARIABLE cpackResult OUTPUT_VARIABLE cpackLog ERROR_VARIABLE cpackLog.err ) file (WRITE ${CTEST_BINARY_DIRECTORY}/cpack.log "${cpackLog.err}" "${cpackLog}") if (cpackResult GREATER 0) file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed packaging: ${cpackResult}:${cpackLog.err} \n") endif () endif () #----------------------------------------------------------------------------- ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/scripts/HDF4config.cmake�������������������������������������������������0000775�0000000�0000000�00000025531�15030617045�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################################# ### ${CTEST_SCRIPT_ARG} is of the form OPTION=VALUE ### ### BUILD_GENERATOR required [Unix, VS2022, VS202264, VS2019, VS201964] ### ### ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201764 -C Release -VV -O hdf4.log ### ############################################################################################# cmake_minimum_required (VERSION 3.18) ############################################################################ # Usage: # ctest -S HDF4config.cmake,OPTION=VALUE -C Release -VV -O test.log # where valid options for OPTION are: # NINJA - Use Ninja build system # BUILD_GENERATOR - The cmake build generator: # MinGW * MinGW Makefiles # Unix * Unix Makefiles # VS2022 * Visual Studio 17 2022 # VS202264 * Visual Studio 17 2022 # VS2019 * Visual Studio 16 2019 # VS201964 * Visual Studio 16 2019 # VS2017 * Visual Studio 15 2017 # VS201764 * Visual Studio 15 2017 Win64 # VS2015 * Visual Studio 14 2015 # VS201564 * Visual Studio 14 2015 Win64 # # INSTALLDIR - root folder where hdf is installed # - windowsdefault: C:/Program Files/HDF_Group/HDF/4.2.15 # - linux default: ./HDF_Group/HDF/4.2.15 # CTEST_CONFIGURATION_TYPE - Release, Debug, etc - default: Release # CTEST_SOURCE_NAME - source folder - default: hdf4 # STATIC_ONLY - Build/use static libraries # FORTRAN_LIBRARIES - Build/use fortran libraries # NO_MAC_FORTRAN - Yes to be SHARED on a Mac ############################################################################## set (CTEST_SOURCE_VERSION "4.3.1") set (CTEST_SOURCE_VERSEXT "") ############################################################################## # handle input parameters to script. #BUILD_GENERATOR - which CMake generator to use, required #INSTALLDIR - HDF-4.3.x root folder #CTEST_CONFIGURATION_TYPE - Release, Debug, RelWithDebInfo #CTEST_SOURCE_NAME - name of source folder; HDF-4.3.x #STATIC_ONLY - Default is YES #FORTRAN_LIBRARIES - Default is NO #NO_MAC_FORTRAN - set to TRUE to allow shared libs on a Mac if (DEFINED CTEST_SCRIPT_ARG) # transform ctest script arguments of the form # script.ctest,var1=value1,var2=value2 # to variables with the respective names set to the respective values string (REPLACE "," ";" script_args "${CTEST_SCRIPT_ARG}") foreach (current_var ${script_args}) if ("${current_var}" MATCHES "^([^=]+)=(.+)$") set ("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}") endif () endforeach () endif () #HPC - run alternate configurations for HPC machines if (DEFINED HPC) set (BUILD_GENERATOR "Unix") endif () # build generator must be defined if (NOT DEFINED BUILD_GENERATOR) message (FATAL_ERROR "BUILD_GENERATOR must be defined - Unix, VS2022, VS202264, VS2019, VS201964") endif () ################################################################### ### Following Line is one of [Release, RelWithDebInfo, Debug] ##### ### (default use command line -C value) set (CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}") ################################################################### if (NOT DEFINED INSTALLDIR) if (WIN32) set (INSTALLDIR "%ProgramFiles%/HDF_Group/HDF/${CTEST_SOURCE_VERSION}") else () set (INSTALLDIR "${CTEST_SCRIPT_DIRECTORY}/HDF_Group/HDF/${CTEST_SOURCE_VERSION}") endif () endif () if (NOT DEFINED CTEST_CONFIGURATION_TYPE) set (CTEST_CONFIGURATION_TYPE "Release") endif () if (NOT DEFINED CTEST_SOURCE_NAME) set (CTEST_SOURCE_NAME "hdf-${CTEST_SOURCE_VERSION}${CTEST_SOURCE_VERSEXT}") endif () if (NOT DEFINED STATIC_ONLY) set (STATICONLYLIBRARIES "YES") else () set (STATICONLYLIBRARIES "NO") endif () if (NOT DEFINED FORTRAN_LIBRARIES) set (FORTRANLIBRARIES "NO") else () set(FORTRANLIBRARIES "YES") endif () set (CTEST_BINARY_NAME "build") set (CTEST_DASHBOARD_ROOT "${CTEST_SCRIPT_DIRECTORY}") if (WIN32 AND NOT MINGW) set (CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}") set (CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}") else () set (CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}") set (CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}") endif () ################################################################### ######### Following describes compiler ############ if (WIN32 AND NOT MINGW) set (SITE_OS_NAME "Windows") set (SITE_OS_VERSION "WIN10") if (BUILD_GENERATOR STREQUAL "VS202264") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 17 2022") set (CMAKE_GENERATOR_ARCHITECTURE "x64") endif () set (SITE_OS_BITS "64") set (SITE_COMPILER_NAME "vs2022") set (SITE_COMPILER_VERSION "17") elseif (BUILD_GENERATOR STREQUAL "VS2022") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 17 2022") set (CMAKE_GENERATOR_ARCHITECTURE "Win32") endif () set (SITE_OS_BITS "32") set (SITE_COMPILER_NAME "vs2022") set (SITE_COMPILER_VERSION "17") elseif (BUILD_GENERATOR STREQUAL "VS201964") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 16 2019") set (CMAKE_GENERATOR_ARCHITECTURE "x64") endif () set (SITE_OS_BITS "64") set (SITE_COMPILER_NAME "vs2019") set (SITE_COMPILER_VERSION "16") elseif (BUILD_GENERATOR STREQUAL "VS2019") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 16 2019") set (CMAKE_GENERATOR_ARCHITECTURE "Win32") endif () set (SITE_OS_BITS "32") set (SITE_COMPILER_NAME "vs2019") set (SITE_COMPILER_VERSION "16") elseif (BUILD_GENERATOR STREQUAL "VS201764") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 15 2017 Win64") endif () set (SITE_OS_BITS "64") set (SITE_COMPILER_NAME "vs2017") set (SITE_COMPILER_VERSION "15") elseif (BUILD_GENERATOR STREQUAL "VS2017") if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () set (CTEST_CMAKE_GENERATOR "Visual Studio 15 2017") endif () set (SITE_OS_BITS "32") set (SITE_COMPILER_NAME "vs2017") set (SITE_COMPILER_VERSION "15") else () message (FATAL_ERROR "Invalid BUILD_GENERATOR must be - Unix, VS2022, VS202264, VS2019, VS201964") endif () ## Set the following to unique id your computer ## if(NOT DEFINED CTEST_SITE) set (CTEST_SITE "WIN10${BUILD_GENERATOR}-${CTEST_SITE_EXT}") endif() else () if (DEFINED NINJA) set (CTEST_CMAKE_GENERATOR "Ninja") else () if (MINGW) set (CTEST_CMAKE_GENERATOR "MinGW Makefiles") else () set (CTEST_CMAKE_GENERATOR "Unix Makefiles") endif () endif () ## Set the following to unique id your computer ## if (APPLE) if(NOT DEFINED CTEST_SITE) set (CTEST_SITE "MAC-${CTEST_SITE_EXT}") endif() else () if(NOT DEFINED CTEST_SITE) set (CTEST_SITE "LINUX-${CTEST_SITE_EXT}") endif() endif () if (APPLE) execute_process (COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE) set (ENV{CC} "${XCODE_CC}") set (CTEST_USE_LAUNCHERS 1) endif () endif () ################################################################### ################################################################### ##### Following controls CDash submission ##### #set (LOCAL_SUBMIT "TRUE") ##### Following controls test process ##### #set (LOCAL_SKIP_TEST "TRUE") #set (LOCAL_MEMCHECK_TEST "TRUE") #set (LOCAL_COVERAGE_TEST "TRUE") ##### Following controls cpack command ##### #set (LOCAL_NO_PACKAGE "TRUE") ##### Following controls source update ##### #set (LOCAL_UPDATE "TRUE") set (REPOSITORY_URL "https://github.com/HDFGroup/hdf4.git") set (REPOSITORY_BRANCH "hdf4_3_0") #uncomment to use a compressed source file: *.tar on linux or mac *.zip on windows #set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}") ################################################################### ################################################################### if (WIN32 AND NOT MINGW) set (BINFILEBASE "HDF-${CTEST_SOURCE_VERSION}${CTEST_SOURCE_VERSEXT}-win${SITE_OS_BITS}") include (${CTEST_SCRIPT_DIRECTORY}\\HDF4options.cmake) include (${CTEST_SCRIPT_DIRECTORY}\\CTestScript.cmake) if (EXISTS "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.exe") file (COPY "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.exe" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.msi") file (COPY "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.msi" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.zip") file (COPY "${CTEST_BINARY_DIRECTORY}\\${BINFILEBASE}.zip" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () else () set (BINFILEBASE "HDF-${CTEST_SOURCE_VERSION}${CTEST_SOURCE_VERSEXT}") include (${CTEST_SCRIPT_DIRECTORY}/HDF4options.cmake) include (${CTEST_SCRIPT_DIRECTORY}/CTestScript.cmake) if (APPLE) if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.dmg") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.dmg" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.tar.gz") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.sh") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Darwin.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () else () if (CYGWIN) if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-CYGWIN.sh") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-CYGWIN.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-CYGWIN.tar.gz") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-CYGWIN.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () else () if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Linux.sh") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Linux.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () if (EXISTS "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Linux.tar.gz") file (COPY "${CTEST_BINARY_DIRECTORY}/${BINFILEBASE}-Linux.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY}) endif () endif () endif () endif () �����������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/scripts/HDF4options.cmake������������������������������������������������0000775�0000000�0000000�00000010563�15030617045�0022156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################################# #### Change default configuration of options in config/cmake/cacheinit.cmake file ### #### format: set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DXXX:YY=ZZZZ") ### ############################################################################################# ### uncomment/comment and change the following lines for other configuration options ############################################################################################# #### maximum parallel processor count for build and test #### #set (MAX_PROC_COUNT 8) ############################################################################################# #### alternate toolsets #### #set (CMAKE_GENERATOR_TOOLSET "Intel C++ Compiler 17.0") ############################################################################################# #### Only build static libraries #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF") #### Only build shared libraries #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ONLY_SHARED_LIBS:BOOL=OFF") #### Add PIC option on linux/mac #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_JPEG_WITH_PIC:BOOL=ON ############################################################################################# #### fortran enabled #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=ON") #### fortran disabled #### set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") ############################################################################################# #### java enabled #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=ON") #### java disabled #### set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_BUILD_JAVA:BOOL=OFF") ############################################################################################# ### change install prefix (default use INSTALLDIR value) set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX:PATH=${INSTALLDIR}") ############################################################################################# #### ext libraries #### ### ext libs from tgz set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING=TGZ -DTGZPATH:PATH=${CTEST_SCRIPT_DIRECTORY}") ### ext libs from git #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING=GIT") ### ext libs on system #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING=NO") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DJPEG_LIBRARY:FILEPATH=some_location/lib/jpeg.lib -DJPEG_INCLUDE_DIR:PATH=some_location/include") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_LIBRARY:FILEPATH=some_location/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=some_location/include") #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSZIP_LIBRARY:FILEPATH=some_location/lib/szlib.lib -DSZIP_INCLUDE_DIR:PATH=some_location/include") #### package examples #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_PACK_EXAMPLES:BOOL=ON -DHDF4_EXAMPLES_COMPRESSED:STRING=HDF4Examples-0.3.10-Source.tar.gz -DHDF4_EXAMPLES_COMPRESSED_DIR:PATH=${CTEST_SCRIPT_DIRECTORY}") ############################################################################################## ### disable test program builds #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF") ############################################################################################# ### disable packaging #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_NO_PACKAGES:BOOL=ON") ### Create install package with external libraries (szip, zlib, jpeg) set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_PACKAGE_EXTLIBS:BOOL=ON") ############################################################################################# ### use a toolchain file #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/intel.cmake") ############################################################################################# ### Set the OSX architectures #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_OSX_ARCHITECTURES:STRING=arm64;x86_64") ############################################################################################# ���������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cmake/version.plist.in���������������������������������������������������������0000664�0000000�0000000�00000001164�15030617045�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>BuildVersion</key> <string>@CPACK_PACKAGE_VERSION_MAJOR@</string> <key>CFBundleShortVersionString</key> <string>@CPACK_APPLE_GUI_SHORT_VERSION_STRING@</string> <key>CFBundleVersion</key> <string>@CPACK_APPLE_GUI_SHORT_VERSION_STRING@</string> <key>ProjectName</key> <string>@CPACK_APPLE_GUI_BUNDLE_NAME@</string> <key>SourceVersion</key> <string>@CPACK_PACKAGE_VERSION_MINOR@</string> </dict> </plist> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/commence.am��������������������������������������������������������������������0000664�0000000�0000000�00000002474�15030617045�0016410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## config/commence.am ## (Use double hashes for copyright notice so that automake treats it as ## comments and does not pass it to Makefile.in) ## Copyright by The HDF Group. ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code ## distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. ## Textually included in the beginning of every HDF4 Makefile.am. ## Contains definitions, etc. used across multiple Makefiles. # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc if HDF_BUILD_SHARED AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs endif ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/conclude.am��������������������������������������������������������������������0000664�0000000�0000000�00000016041�15030617045�0016411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## config/conclude.am ## (Use double hashes for copyright notice so that automake treats it as ## comments and does not pass it to Makefile.in) ## Copyright by The HDF Group. ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. ## Textually included at the end of most HDF4 Makefiles.am. ## Contains build rules. # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TESTS = $(TEST_PROG) $(TEST_SCRIPT) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi TEST_PROG_CHKEXE=$(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH=$(TEST_SCRIPT:=.chkexe_) _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/cygwin�������������������������������������������������������������������������0000664�0000000�0000000�00000000453�15030617045�0015521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Use the linux-gnu file . $srcdir/config/linux-gnu ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/examples.am��������������������������������������������������������������������0000664�0000000�0000000�00000010363�15030617045�0016434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## config/examples.am ## (Use double hashes for copyright notice so that automake treats it as ## comments and does not pass it to Makefile.in) ## Copyright by The HDF Group. ## All rights reserved. ## ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. # We can't tell automake about example programs, because they need to be # built using h4cc (or h4fc, etc.) instead of the standard compilers. # This creates some extra work for us. ## The Makefile.am that includes this boilerplate needs to define the ## following: ## ## TEST_PROG ## We assume that all test programs in this directory are examples. ## ## INSTALL_FILES ## The source files that the examples use which should be installed. ## ## EXAMPLEDIR ## The directory into which examples should be installed. ## ## Build rules for $(EXTRA_PROG). ## Dependencies for example programs. ## Automake will supply neither of these. ## # Assume that all tests in this directory are examples, and tell # conclude.am when to build them. EXTRA_PROG = $(EXAMPLE_PROG) # We need to tell automake what to clean MOSTLYCLEANFILES=*.o $(EXAMPLE_PROG) CHECK_CLEANFILES+= *.hdf CLEANFILES=$(EXAMPLE_PROG) # How to create EXAMPLEDIR if it doesn't already exist $(EXAMPLEDIR): mkdir -p $@ # Install and uninstall rules. We install the source files, not the # example programs themselves. install-data-local: @$(MAKE) $(AM_MAKEFLAGS) install-examples uninstall-local: @$(MAKE) $(AM_MAKEFLAGS) uninstall-examples install-examples: $(EXAMPLEDIR) @for f in X $(INSTALL_FILES); do \ if test $$f != X; then \ (set -x; $(INSTALL) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1); \ chmod a-x $(EXAMPLEDIR)/$$f; \ fi; \ done @for f in X $(INSTALL_SCRIPT_FILES); do \ if test $$f != X; then \ (set -x; $(INSTALL) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1); \ fi; \ done @for f in X $(INSTALL_TOP_FILES); do \ if test $$f != X; then \ (set -x; $(INSTALL) $(srcdir)/$$f $(EXAMPLETOPDIR)/. || exit 1); \ chmod a-x $(EXAMPLETOPDIR)/$$f; \ fi; \ done @for f in X $(INSTALL_TOP_SCRIPT_FILES); do \ if test $$f != X; then \ (set -x; $(INSTALL) $(srcdir)/$$f $(EXAMPLETOPDIR)/. || exit 1); \ fi; \ done uninstall-examples: @if test -n "$(INSTALL_FILES)" -a -d $(EXAMPLEDIR); then \ set -x; cd $(EXAMPLEDIR) && $(RM) $(INSTALL_FILES); \ fi @if test -n "$(INSTALL_SCRIPT_FILES)" -a -d $(EXAMPLEDIR); then \ set -x; cd $(EXAMPLEDIR) && $(RM) $(INSTALL_SCRIPT_FILES); \ fi @if test -n "$(INSTALL_TOP_FILES)" -a -d $(EXAMPLETOPDIR); then \ set -x; cd $(EXAMPLETOPDIR) && $(RM) $(INSTALL_TOP_FILES); \ fi @if test -n "$(INSTALL_TOP_SCRIPT_FILES)" -a -d $(EXAMPLETOPDIR); then \ set -x; cd $(EXAMPLETOPDIR) && $(RM) $(INSTALL_TOP_SCRIPT_FILES); \ fi installcheck-local: @if test "$(STATIC_SHARED)" = "static, shared"; then \ H4CCFLAGS="-shlib" $(MAKE) $(AM_MAKEFLAGS) check; \ $(MAKE) $(AM_MAKEFLAGS) clean; \ H4CCFLAGS="" $(MAKE) $(AM_MAKEFLAGS) check; \ elif test "$(STATIC_SHARED)" = "shared"; then \ H4CCFLAGS="-shlib" $(MAKE) $(AM_MAKEFLAGS) check; \ else \ $(MAKE) $(AM_MAKEFLAGS) check; \ fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/freebsd������������������������������������������������������������������������0000664�0000000�0000000�00000010752�15030617045�0015636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. # The default compiler is `cc', which should map to clang if test -z "$CC"; then CC=cc CC_BASENAME=cc fi # Figure out clang C compiler flags . $srcdir/config/clang-flags # Figure out GNU C compiler flags . $srcdir/config/gnu-flags # Figure out Intel oneAPI C compiler flags . $srcdir/config/oneapi-flags # Figure out Intel classic C compiler flags . $srcdir/config/intel-flags # The default compiler is 'f77', which should map to gfortran if test "X-$F77" = "X-"; then F77=f77 F77_BASENAME=f77 fi # Figure out GNU FC compiler flags . $srcdir/config/gnu-fflags # compiler version strings # check if the compiler_version_info is already set if test -z "$cc_version_info"; then case $CC in # whatever matches *pgcc* will also match *gcc*, so this one must come first *pgcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS -V 2>&1 | grep 'pgcc'` ;; *gcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS --version 2>&1 | grep -v 'PathScale' |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` ;; *icc*) cc_version_info=`$CC $CCFLAGS $H4_CCFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` ;; *clang*) cc_version_info="`$CC $CFLAGS $H4_CFLAGS --version 2>&1 |\ grep 'clang version' | sed 's/.*clang version \([-a-z0-9\.]*\).*/\1/'`" ;; *) echo "No match to get cc_version_info for $CC" ;; esac fi # get fortran version info case $F77 in *gfortran*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` fc_version="`$F77 $FFLAGS -v 2>&1 |grep 'gcc version' |\ sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/[-a-z]//g'` fi ;; *ifc*|*ifort*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^Intel'`" if test X != "X$fc_version"; then fc_version="`echo $fc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`" fi ;; *f95*) # Figure out which compiler we are using: pgf90 or Absoft f95 RM='rm -f' tmpfile=/tmp/cmpver.$$ $F77 -V >$tmpfile if test -s "$tmpfile"; then if( grep -s 'Absoft' $tmpfile > /dev/null) then FC_BASENAME=f95 fi fi $RM $tmpfile fc_version_info=`$F77 -V | grep Absoft` ;; *g95*|*g77*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC'` ;; *pgf90*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'pgf90'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^pgf90 '`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/pgf90 \([-a-z0-9\.\-]*\).*/\1/'` fi ;; *) echo "No match to get fc_version_info for $F77" ;; esac if test X != "X$fc_version"; then # Get the compiler version numbers fc_vers_major=`echo $fc_version | cut -f1 -d.` fi # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} ����������������������hdf4-hdf4.3.1/config/gnu-fflags���������������������������������������������������������������������0000664�0000000�0000000�00000006666�15030617045�0016266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # C and Fortran Compiler and Preprocessor Flags # --------------------------------------------------- # # - Flags that end with `_CFLAGS' are always passed to the C compiler. # - Flags that end with `_FFLAGS' are always passed to the Fortran # compiler. # - Flags that end with `_CPPFLAGS' are passed to the C compiler # when compiling but not when linking. # # DEBUG_CFLAGS # DEBUG_FFLAGS # DEBUG_CPPFLAGS - Flags to pass to the compiler to create a # library suitable for use with debugging # tools. Usually this list will exclude # optimization switches (like `-O') and include # switches that turn on symbolic debugging support # (like `-g'). # # PROD_CFLAGS # PROD_FFLAGS # PROD_CPPFLAGS - Flags to pass to the compiler to create a # production version of the library. These # usually exclude symbolic debugging switches (like # `-g') and include optimization switches (like # `-O'). # # PROFILE_CFLAGS # PROFILE_FFLAGS # PROFILE_CPPFLAGS- Flags to pass to the compiler to create a # library suitable for performance testing (like # `-pg'). This may or may not include debugging or # production flags. # # FFLAGS # CFLAGS - Flags can be added to these variable which # might already be partially initialized. These # flags will always be passed to the compiler and # should include switches to turn on full warnings. # # WARNING: flags do not have to be added to the CFLAGS # or FFLAGS variable if the compiler is the GNU gcc # and gfortran compiler. # # FFLAGS and CFLAGS should contain *something* or else # configure will probably add `-g'. For most systems # this isn't a problem but some systems will disable # optimizations in favor of the `-g'. The configure # script will remove the `-g' flag in production mode # only. # # These flags should be set according to the compiler being used. # There are two ways to check the compiler. You can try using `-v' or # `--version' to see if the compiler will print a version string. You # can use the value of $FOO_BASENAME which is the base name of the # first word in $FOO, where FOO is either CC or F77 (note that the # value of CC may have changed above). case $F77_BASENAME in gfortran) if test $cc_vers_major -ge 10; then FFLAGS="$FFLAGS -fallow-argument-mismatch" else FFLAGS="$FFLAGS" fi DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; g77) FFLAGS="$FFLAGS " DEBUG_FFLAGS="-g" PROD_FFLAGS="-O3 -fomit-frame-pointer" PROFILE_FFLAGS="-pg" ;; f95) CFLAGS="$CFLAGS" FFLAGS="$FFLAGS" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; g95) CFLAGS="$CFLAGS" FFLAGS="$FFLAGS -i4" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; esac ��������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-flags����������������������������������������������������������������������0000664�0000000�0000000�00000010464�15030617045�0016107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # # Prepend `$srcdir/config/gnu-warnings/` to the filename suffix(es) given as # subroutine argument(s), remove comments starting with # and ending # at EOL, replace spans of whitespace (including newlines) with spaces, # and re-emit the file(s) thus filtered on the standard output stream. # load_gnu_arguments() { set -- $(for arg; do sed 's,#.*$,,' $srcdir/config/gnu-warnings/${arg} done) IFS=' ' echo "$*" } # Get the compiler version in a way that works for gcc # unless a compiler version is already known # # cc_vendor: The compiler name: gcc # cc_version: Version number: 2.91.60, 2.7.2.1 # if test "X-" = "X-$cc_flags_set"; then # PathScale compiler spits out gcc version string too. Need to # filter it out. # icc beginning with version 12 includes a "gcc version compatibility" # string, causing the gcc CFLAGS to be erroneously added. The line # "grep -v 'icc version'" causes the discarding of any output # containing 'icc version'. The cc_version for icc is correctly determined # and flags added in the intel-flags script. cc_version="`$CC $CFLAGS -v 2>&1 | grep -v 'PathScale' |\ grep -v '^icc.*version' |\ grep 'gcc version' | sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'` cc_version=`echo $cc_version |sed 's/[-a-z]//g'` if test X = "X$cc_vendor" -a X != "X$cc_version"; then cc_vendor=gcc fi if test "-" != "$cc_vendor-$cc_version"; then echo "compiler '$CC' is GNU $cc_vendor-$cc_version" fi # Get the compiler version numbers cc_vers_major=`echo $cc_version | cut -f1 -d.` cc_vers_minor=`echo $cc_version | cut -f2 -d.` cc_vers_patch=`echo $cc_version | cut -f3 -d.` test -n "$cc_vers_major" || cc_vers_major=0 test -n "$cc_vers_minor" || cc_vers_minor=0 test -n "$cc_vers_patch" || cc_vers_patch=0 fi if test "X-gcc" = "X-$cc_vendor"; then CFLAGS="$CFLAGS -std=c99" if test $cc_vers_major -ge 10; then CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" else CFLAGS="$CFLAGS" fi DEBUG_CFLAGS="-g -fverbose-asm" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3 -fomit-frame-pointer" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= #################### # General warnings # #################### # Add various general warning flags in gnu-warnings for gcc versions 4.8 and later. if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 8 -o $cc_vers_major -gt 4; then CFLAGS="$CFLAGS $(load_gnu_arguments general)" CFLAGS="$CFLAGS $(load_gnu_arguments no-developer-general)" fi ############################# # Version-specific warnings # ############################# # gcc >= 4.8 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 8; then CFLAGS="$CFLAGS $(load_gnu_arguments 4.8)" CFLAGS="$CFLAGS $(load_gnu_arguments no-developer-4.8)" fi # gcc >= 4.9 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 9; then CFLAGS="$CFLAGS $(load_gnu_arguments 4.9)" fi # gcc >= 5 if test $cc_vers_major -ge 5; then CFLAGS="$CFLAGS $(load_gnu_arguments 5)" fi # gcc >= 6 if test $cc_vers_major -ge 6; then CFLAGS="$CFLAGS $(load_gnu_arguments 6)" fi # gcc >= 7 if test $cc_vers_major -ge 7; then CFLAGS="$CFLAGS $(load_gnu_arguments 7)" fi # gcc 8 if test $cc_vers_major -ge 8; then CFLAGS="$CFLAGS $(load_gnu_arguments 8)" CFLAGS="$CFLAGS $(load_gnu_arguments no-developer-8)" fi # gcc 9 if test $cc_vers_major -ge 9; then CFLAGS="$CFLAGS $(load_gnu_arguments 9)" fi # gcc >= 9.3 if test $cc_vers_major -ge 10 -o $cc_vers_major -eq 9 -a $cc_vers_minor -ge 3; then CFLAGS="$CFLAGS $(load_gnu_arguments 9.3)" fi ################# # Flags are set # ################# cc_flags_set=yes fi # Clear cc info if no flags set if test "X$cc_flags_set" = "X"; then cc_vendor= cc_version= fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016713�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/4.8���������������������������������������������������������������0000664�0000000�0000000�00000000770�15030617045�0017153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warning flags added for GCC >= 4.3 -Wlarger-than=2560 -Wlogical-op # warning flags added for GCC >= 4.4 -Wframe-larger-than=16384 -Wpacked-bitfield-compat -Wsync-nand # This warning can only be truly addressed using the gcc extension of # using D to indicate doubles (e.g., 1.23D). -Wno-unsuffixed-float-constants # warning flags added for GCC >= 4.6 -Wdouble-promotion -Wtrampolines # warning flag added for GCC >= 4.7 -Wstack-usage=8192 # warning flag added for GCC >= 4.8 -Wmaybe-uninitialized ��������hdf4-hdf4.3.1/config/gnu-warnings/4.8-4.last��������������������������������������������������������0000664�0000000�0000000�00000000153�15030617045�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -Wvla was later incorporated into -Wpedantic and # only needs to be specified explicitly for gcc 4 -Wvla ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/4.9���������������������������������������������������������������0000664�0000000�0000000�00000000014�15030617045�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wdate-time ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/5�����������������������������������������������������������������0000664�0000000�0000000�00000001062�15030617045�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Warray-bounds=2 -Wc99-c11-compat -Wincompatible-pointer-types -Wint-conversion # # In GCC 4.4.7, the compiler gripes about shadowed global # declarations when a local variable uses the name of a # function that's in a system header file. For some reason, # later versions of GCC (e.g., 5.2.0) don't complain about # the shadowed globals. Maybe later versions are less fussy? # Anyway, the shadowing seems to be harmless, and GCC 4.4.7 # is not a supported compiler, so let us promote shadowed globals # warnings to errors only for GCC 5 and later. # -Wshadow ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/6�����������������������������������������������������������������0000664�0000000�0000000�00000000267�15030617045�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Careful! -Wduplicated-cond, combined with HDF's heavy use of # macros, can make a lot of noise. # -Wduplicated-cond -Whsa -Wnormalized -Wnull-dereference -Wunused-const-variable �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/7�����������������������������������������������������������������0000664�0000000�0000000�00000000141�15030617045�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Walloca -Walloc-zero -Wduplicated-branches -Wformat-overflow=2 -Wformat-truncation=1 -Wrestrict �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/8�����������������������������������������������������������������0000664�0000000�0000000�00000000144�15030617045�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wattribute-alias -Wcast-align=strict -Wcast-function-type -Wmaybe-uninitialized -Wshift-overflow=2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/9�����������������������������������������������������������������0000664�0000000�0000000�00000000046�15030617045�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wattribute-alias=2 -Wmissing-profile ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/9.3���������������������������������������������������������������0000664�0000000�0000000�00000000021�15030617045�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wc11-c2x-compat ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-10������������������������������������������������������0000664�0000000�0000000�00000000041�15030617045�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# New warning -Warith-conversion �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-12������������������������������������������������������0000664�0000000�0000000�00000000266�15030617045�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable GCC's static analyzer for GCC 12+ # (Temporarily disabled as the analyzer currently adds significant # compile time overhead for a few test files like cache.c) # -fanalyzer ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-4.8�����������������������������������������������������0000664�0000000�0000000�00000001526�15030617045�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# developer warning flags added for GCC >= 4.5 # # -Wjump-misses-init makes lots of noise for a questionable benefit. # Can jumping over an initialization in C cause any harm, if # the variable is never *used* before it has been initialized? # -Wjump-misses-init # developer warning flag added for GCC >= 4.5 # # strict-overflow level 5 catches a LOT of false positives, but is useful # for detecting overflow conditions. # -Wstrict-overflow=5 # developer warning flag added for GCC >= 4.6 -Wsuggest-attribute=const # developer warning flags added for GCC >= 4.7 -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure # # It's not clear that -Wvector-operation-performance warnings are # actionable, so they are demoted to "developer" warnings. # -Wvector-operation-performance # developer warning flag added for GCC >= 4.8 -Wsuggest-attribute=format ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-7�������������������������������������������������������0000664�0000000�0000000�00000000026�15030617045�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wstringop-overflow=2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-8�������������������������������������������������������0000664�0000000�0000000�00000000112�15030617045�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wstringop-overflow=4 -Wsuggest-attribute=cold -Wsuggest-attribute=malloc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/developer-general�������������������������������������������������0000664�0000000�0000000�00000000331�15030617045�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# (suggestions from gcc, not code problems) -Waggregate-return -Wdisabled-optimization -Winline -Wmissing-format-attribute -Wmissing-noreturn -Wswitch-default -Wswitch-enum -Wunsafe-loop-optimizations -Wunused-macros �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/general�����������������������������������������������������������0000664�0000000�0000000�00000001372�15030617045�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Note that some of the flags listed here really should be developer # flags (listed in separate files, gnu-warnings-developer*) but we put # them here because they are not raised by the current code and we'd like to # know if they do start showing up. # # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) # warnings that are emitted. If you need it, add it from the # environment variable at configure time. -Wall -Wcast-qual -Wconversion -Wextra -Wfloat-equal -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-include-dirs -Wshadow -Wundef -Wwrite-strings -pedantic # NOTE: Due to the divergence in the C and C++, we're dropping support for # compiling the C library with a C++ compiler and dropping the -Wc++-compat # warning. # -Wno-c++-compat ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-4.8���������������������������������������������������������0000664�0000000�0000000�00000000672�15030617045�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warning flags added for gfortran >= 4.4 -Wintrinsics-std # warning flag added for gfortran >= 4.5 -Wimplicit-procedure # warning flags added for gfortran >= 4.7 -Wreal-q-constant -Wfunction-elimination # warning flags added for gfortran >= 4.8 -Wrealloc-lhs -Wrealloc-lhs-all # Turn off warnings for passing non-ANSI types to BIND(). # We pass a lot of hid_t, etc. types so this generates a LOT of spurious warnings. -Wno-c-binding-type ����������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-6�����������������������������������������������������������0000664�0000000�0000000�00000000023�15030617045�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Winteger-division �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-8�����������������������������������������������������������0000664�0000000�0000000�00000000034�15030617045�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wfrontend-loop-interchange ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-developer-4.8�����������������������������������������������0000664�0000000�0000000�00000000077�15030617045�0022255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warning flags added for gfortran >= 4.4 -Warray-temporaries �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-developer-5�������������������������������������������������0000664�0000000�0000000�00000000023�15030617045�0022077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wuse-without-only �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-developer-general�������������������������������������������0000664�0000000�0000000�00000000253�15030617045�0023355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# There is no easy way in Fortran to indicate parameters are intentionally # unused and many callbacks will have these, generating a lot of noise. -Wunused-dummy-argument �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-general�����������������������������������������������������0000664�0000000�0000000�00000000545�15030617045�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Note that some of the flags listed here really should be developer # flags (listed in separate files, gnu-warnings-developer*) but we put # them here because they are not raised by the current code and we'd like to # know if they do start showing up. -Waliasing -Wall -Wcharacter-truncation -Wextra -Wimplicit-interface -Wsurprising -Wunderflow -pedantic �����������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-no-developer-4.8��������������������������������������������0000664�0000000�0000000�00000000102�15030617045�0022654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warning flags added for gfortran >= 4.4 -Wno-array-temporaries ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/gfort-no-developer-general����������������������������������������0000664�0000000�0000000�00000000256�15030617045�0023772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# There is no easy way in Fortran to indicate parameters are intentionally # unused and many callbacks will have these, generating a lot of noise. -Wno-unused-dummy-argument ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/no-developer-4.8��������������������������������������������������0000664�0000000�0000000�00000000552�15030617045�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# no-developer warning flags added for GCC >= 4.5 -Wno-jump-misses-init -Wstrict-overflow=2 # no-developer warning flag added for GCC >= 4.6 -Wno-suggest-attribute=const # no-developer warning flags added for GCC >= 4.7 -Wno-suggest-attribute=noreturn -Wno-suggest-attribute=pure # no-developer warning flag added for GCC >= 4.8 -Wno-suggest-attribute=format ������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/no-developer-8����������������������������������������������������0000664�0000000�0000000�00000000072�15030617045�0021401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wno-suggest-attribute=cold -Wno-suggest-attribute=malloc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/gnu-warnings/no-developer-general����������������������������������������������0000664�0000000�0000000�00000000515�15030617045�0022651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wno-aggregate-return -Wno-inline -Wno-missing-format-attribute -Wno-missing-noreturn # NOTE: -pedantic includes -Woverlength-strings which triggers a warning # regarding the library settings string (H4libhdf4_settings). We'll turn # it off here but leave it on in the developer flags. -Wno-overlength-strings -Wno-format-nonliteral �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-fflags�������������������������������������������������������������������0000664�0000000�0000000�00000007011�15030617045�0016571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # Copyright by The HDF Group. # All rights reserved. # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # This file should be sourced into configure if the compiler is the # Intel ifort compiler or a derivative. It is careful not to do anything # if the compiler is not Intel; otherwise `f9x_flags_set' is set to `yes' # # # Prepend `$srcdir/config/intel-warnings/` to the filename suffix(es) given as # subroutine argument(s), remove comments starting with # and ending # at EOL, replace spans of whitespace (including newlines) with spaces, # and re-emit the file(s) thus filtered on the standard output stream. # load_intel_arguments() { set -- $(for arg; do sed 's,#.*$,,' $srcdir/config/intel-warnings/${arg} done) IFS=' ' echo "$*" } # Get the compiler version in a way that works for ifort # ifort unless a compiler version is already known # # f9x_vendor: The compiler name: ifort # f9x_version: Version number: 8.0 # if test X = "X$f9x_flags_set"; then f9x_version="`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 |grep '^Intel'`" if test X != "X$f9x_version"; then f9x_vendor=ifort f9x_version="`echo $f9x_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`" echo "compiler '$FC' is Intel $f9x_vendor-$f9x_version" # Some version numbers # Intel version numbers are of the form: "major.minor" f9x_vers_major=`echo $f9x_version | cut -f1 -d.` f9x_vers_minor=`echo $f9x_version | cut -f2 -d.` #f9x_vers_patch=`echo $f9x_version | cut -f2 -d.` test -n "$f9x_vers_major" || f9x_vers_major=0 test -n "$f9x_vers_minor" || f9x_vers_minor=0 test -n "$f9x_vers_patch" || f9x_vers_patch=0 f9x_vers_all=`expr $f9x_vers_major '*' 1000000 + $f9x_vers_minor '*' 1000 + $f9x_vers_patch` fi fi if test "X-ifort" = "X-$f9x_vendor"; then FC_BASENAME=ifort F9XSUFFIXFLAG="" FSEARCH_DIRS="" ############################### # Architecture-specific flags # ############################### arch= # Nothing currently. (Uncomment code below and modify to add any) #case "$host_os-$host_cpu" in # *-i686) # arch="-march=i686" # ;; #esac # Host-specific flags # Nothing currently. (Uncomment code below and modify to add any) #case "`hostname`" in # sleipnir.ncsa.uiuc.edu) # arch="$arch -pipe" # ;; #esac ############## # Production # ############## PROD_FCFLAGS= ######### # Debug # ######### DEBUG_FCFLAGS="-check all" ########### # Symbols # ########### NO_SYMBOLS_FCFLAGS= SYMBOLS_FCFLAGS="-g" ############# # Profiling # ############# PROFILE_FCFLAGS="-p" ################ # Optimization # ################ HIGH_OPT_FCFLAGS="-O3" DEBUG_OPT_FCFLAGS= NO_OPT_FCFLAGS= ############ # Warnings # ############ ########### # General # ########### H5_FCFLAGS="$H5_FCFLAGS -free" H5_FCFLAGS="$H5_FCFLAGS $(load_intel_arguments classic/ifort-general)" ############################# # Version-specific warnings # ############################# ################# # Flags are set # ################# f9x_flags_set=yes fi # Clear f9x info if no flags set if test "X-$f9x_flags_set" = "X-"; then f9x_vendor= f9x_version= fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-flags��������������������������������������������������������������������0000664�0000000�0000000�00000005312�15030617045�0016425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # # Prepend `$srcdir/config/intel-warnings/` to the filename suffix(es) given as # subroutine argument(s), remove comments starting with # and ending # at EOL, replace spans of whitespace (including newlines) with spaces, # and re-emit the file(s) thus filtered on the standard output stream. # load_intel_arguments() { set -- $(for arg; do sed 's,#.*$,,' $srcdir/config/intel-warnings/${arg} done) IFS=' ' echo "$*" } # Get the compiler version in a way that works for icc # icc unless a compiler version is already known # # cc_vendor: The compiler name: icc # cc_version: Version number: 8.0 # if test X = "X$cc_flags_set"; then cc_version="`$CC $CFLAGS -V 2>&1 |grep 'Version'`" if test X != "X$cc_version"; then cc_vendor=icc cc_version=`echo $cc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'` echo "compiler '$CC' is Intel $cc_vendor-$cc_version" # Some version numbers # Intel version numbers are of the form: "major.minor" cc_vers_major=`echo $cc_version | cut -f1 -d.` cc_vers_minor=`echo $cc_version | cut -f2 -d.` #cc_vers_patch=`echo $cc_version | cut -f2 -d.` test -n "$cc_vers_major" || cc_vers_major=0 test -n "$cc_vers_minor" || cc_vers_minor=0 test -n "$cc_vers_patch" || cc_vers_patch=0 cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch` fi fi # Common Intel flags for various situations if test "X-icc" = "X-$cc_vendor"; then # -diag-disable=10441 disables the icc deprecation message CFLAGS="$CFLAGS -std=c99 -Wall -diag-disable=10441" CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" DEBUG_CFLAGS="-g" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= # Add various general warning flags in intel-warnings. CFLAGS="$CFLAGS $(load_intel_arguments classic/general)" ############################# # Version-specific warnings # ############################# # intel >= 15 if test $cc_vers_major -ge 15; then CFLAGS="$CFLAGS $(load_intel_arguments classic/15)" fi # intel >= 18 if test $cc_vers_major -ge 18; then CFLAGS="$CFLAGS $(load_intel_arguments classic/18)" fi ################# # Flags are set # ################# cc_flags_set=yes fi # Clear cc info if no flags set if test "X-$cc_flags_set" = "X-"; then cc_vendor= cc_version= fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017235�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/��������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0020656�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/15������������������������������������������������������0000664�0000000�0000000�00000000427�15030617045�0021031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wcomment -Wdeprecated -Wextra-tokens -Wformat -Wformat-security -Wmain -Wmissing-declarations -Wmissing-prototypes -Wp64 -Wpointer-arith -Wreturn-type -Wshadow -Wstrict-prototypes -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-variable -Wwrite-strings �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/18������������������������������������������������������0000664�0000000�0000000�00000000034�15030617045�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wic-pointer -Wsign-compare ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/developer-general���������������������������������������0000664�0000000�0000000�00000000054�15030617045�0024200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Winline -Wreorder -Wport -Wstrict-aliasing ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/general�������������������������������������������������0000664�0000000�0000000�00000000006�15030617045�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wall ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/ifort-general�������������������������������������������0000664�0000000�0000000�00000000012�15030617045�0023330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-warn all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/win-developer-general�����������������������������������0000664�0000000�0000000�00000000007�15030617045�0024771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Wport �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/win-general���������������������������������������������0000664�0000000�0000000�00000000006�15030617045�0023005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Wall ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/classic/win-ifort-general���������������������������������������0000664�0000000�0000000�00000000012�15030617045�0024123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/warn:all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/���������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0020510�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/developer-general����������������������������������������0000664�0000000�0000000�00000000034�15030617045�0024030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wreorder -Wstrict-aliasing ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/general��������������������������������������������������0000664�0000000�0000000�00000000006�15030617045�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Wall ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/ifort-general��������������������������������������������0000664�0000000�0000000�00000000012�15030617045�0023162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-warn all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/win-developer-general������������������������������������0000664�0000000�0000000�00000000034�15030617045�0024623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Wreorder /Wstrict-aliasing ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/win-general����������������������������������������������0000664�0000000�0000000�00000000006�15030617045�0022637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Wall ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/intel-warnings/oneapi/win-ifort-general����������������������������������������0000664�0000000�0000000�00000000012�15030617045�0023755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/warn:all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/linux-gnu����������������������������������������������������������������������0000664�0000000�0000000�00000013106�15030617045�0016146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. # The default compiler is `gcc'. if test -z "$CC"; then CC=gcc CC_BASENAME=gcc fi # Figure out GNU C compiler flags . $srcdir/config/gnu-flags # Figure out Intel oneAPI C compiler flags . $srcdir/config/oneapi-flags # Figure out Intel classic C compiler flags . $srcdir/config/intel-flags # Figure out Clang C compiler flags . $srcdir/config/clang-flags # Figure out NVHPC C compiler flags . $srcdir/config/nvidia-flags # Use default Fortran compiler according to what C compiler is used. if test "X-$F77" = "X-"; then F77=gfortran F77_BASENAME=gfortran else case $F77 in # The PGI and Intel compilers are automatically detected below f95*|pgf90*) ;; *) # Figure out which compiler we are using: pgf90 or Absoft f95 RM='rm -f' tmpfile=/tmp/cmpver.$$ $F77 -V >$tmpfile if test -s "$tmpfile"; then if( grep -s 'Absoft' $tmpfile > /dev/null) then F77_BASENAME=f95 fi if( grep -s 'g95' $tmpfile > /dev/null) then F77_BASENAME=g95 fi if( grep -s 'pgf90' $tmpfile > /dev/null) then F77_BASENAME=pgf90 fi fi $RM $tmpfile ;; esac fi # Figure out GNU FC compiler flags . $srcdir/config/gnu-fflags # compiler version strings # check if the compiler_version_info is already set if test -z "$cc_version_info"; then case $CC in # whatever matches *pgcc* will also match *gcc*, so this one must come first *pgcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS -V 2>&1 | grep 'pgcc'` ;; *gcc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS --version 2>&1 | grep -v 'PathScale' |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` ;; *nvc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS -V 2>&1 | grep 'nvc'` ;; *icx*) cc_version_info=`$CC $CCFLAGS $H4_CCFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` ;; *icc*) cc_version_info=`$CC $CCFLAGS $H4_CCFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` ;; *clang*) cc_version_info="`$CC $CFLAGS $H4_CFLAGS --version 2>&1 |\ grep 'clang version' | sed 's/.*clang version \([-a-z0-9\.]*\).*/\1/'`" ;; *) echo "No match to get cc_version_info for $CC" ;; esac fi # get fortran version info case $F77 in *gfortran*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC' | sed 's/\(.*(GCC) [-a-z0-9\. ]*\).*/\1/'` fc_version="`$F77 $FFLAGS -v 2>&1 |grep 'gcc version' |\ sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/[-a-z]//g'` fi ;; *ifc*|*ifort*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'Version' |\ sed 's/\(Intel.* Compiler\).*\( Version [a-z0-9\.]*\).*\( Build [0-9]*\)/\1\2\3/'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^Intel'`" if test X != "X$fc_version"; then fc_version="`echo $fc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`" fi ;; *f95*) # Figure out which compiler we are using: pgf90 or Absoft f95 RM='rm -f' tmpfile=/tmp/cmpver.$$ $F77 -V >$tmpfile if test -s "$tmpfile"; then if( grep -s 'Absoft' $tmpfile > /dev/null) then FC_BASENAME=f95 fi fi $RM $tmpfile fc_version_info=`$F77 -V | grep Absoft` ;; *g95*|*g77*) fc_version_info=`$F77 $FFLAGS --version 2>&1 |\ grep 'GCC'` ;; *pgf90*) fc_version_info=`$F77 $FFLAGS -V 2>&1 | grep 'pgf90'` fc_version="`$F77 $FFLAGS -V 2>&1 |grep '^pgf90 '`" if test X != "X$fc_version"; then fc_version=`echo $fc_version |sed 's/pgf90 \([-a-z0-9\.\-]*\).*/\1/'` fi ;; *) echo "No match to get fc_version_info for $F77" ;; esac if test X != "X$fc_version"; then # Get the compiler version numbers fc_vers_major=`echo $fc_version | cut -f1 -d.` fi # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/lt_vers.am���������������������������������������������������������������������0000664�0000000�0000000�00000003522�15030617045�0016273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## config/lt_vers.am ## (Use double hashes for copyright notice so that automake treats it as ## comments and does not pass it to Makefile.in) ## Copyright by The HDF Group. ## All rights reserved. ## # This file is part of HDF. The full HDF copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. ## # Add libtool shared library version numbers to the HDF4 library # See libtool versioning documentation online. # After making changes, run bin/reconfigure to update other configure related # files like Makefile.in. LT_VERS_INTERFACE = 10 LT_VERS_AGE = 0 LT_VERS_REVISION = 1 ## If the API changes *at all*, increment LT_VERS_INTERFACE and ## reset LT_VERS_REVISION to 0. ## ## If the API changes but no function signatures are removed or ## changed, also increment LT_VERS_AGE. ## If any functions are removed from the API, or their signatures ## are changed reset LT_VERS_AGE to 0 to indicate that previous ## versions of the API are not necessarily compatible with this ## version. ## ## If the source changes but there are no API changes, increment ## LT_VERS_REVISION. This will happen automatically when ## bin/h5vers is run, but doing it manually shouldn't hurt ## anything. ## ## Version numbers for wrapper shared library files. LT_MF_VERS_INTERFACE = 10 LT_MF_VERS_REVISION = 1 LT_MF_VERS_AGE = 0 LT_F_VERS_INTERFACE = 10 LT_F_VERS_REVISION = 1 LT_F_VERS_AGE = 0 LT_XDR_VERS_INTERFACE = 10 LT_XDR_VERS_REVISION = 1 LT_XDR_VERS_AGE = 0 LT_MF_F_VERS_INTERFACE = 10 LT_MF_F_VERS_REVISION = 1 LT_MF_F_VERS_AGE = 0 LT_JAVA_VERS_INTERFACE = 10 LT_JAVA_VERS_REVISION = 1 LT_JAVA_VERS_AGE = 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/nvidia-flags�������������������������������������������������������������������0000664�0000000�0000000�00000003647�15030617045�0016575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # # Get the compiler version in a way that works for nvc # unless a compiler version is already known # # cc_vendor: The compiler name: nvc # cc_version: Version number: 5.0-2, 5.2-2 # if test X = "X$cc_flags_set"; then cc_version="`$CC $CFLAGS -V 2>&1 |grep '^nvc '`" if test X != "X$cc_version"; then cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'` cc_version=`echo $cc_version |sed 's/nvc \([-a-z0-9\.\-]*\).*/\1/'` echo "compiler '$CC' is NVIDIA $cc_vendor-$cc_version" # Some version numbers # NVIDIA version numbers are of the form: "major.minor-patch" cc_vers_major=`echo $cc_version | cut -f1 -d.` cc_vers_minor=`echo $cc_version | cut -f2 -d. | cut -f1 -d-` cc_vers_patch=`echo $cc_version | cut -f2 -d. | cut -f2 -d-` test -n "$cc_vers_major" || cc_vers_major=0 test -n "$cc_vers_minor" || cc_vers_minor=0 test -n "$cc_vers_patch" || cc_vers_patch=0 cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch` fi fi # Common NVIDIA flags for various situations if test "X-nvc" = "X-$cc_vendor" -o "X-nvcc" = "X-$cc_vendor"; then # Default to C99 standard. CFLAGS="$CFLAGS $arch -c99 -Minform=warn" DEBUG_CFLAGS="-g -Mbounds" DEBUG_CPPFLAGS= #PROD_CFLAGS="-fast" PROD_CFLAGS="" # -fast implies -O2 and -O2+ currently has test failures. PROD_CPPFLAGS= PROFILE_CFLAGS="-Mprof=func,line" PROFILE_CPPFLAGS= ################# # Flags are set # ################# cc_flags_set=yes fi # Clear cc info if no flags set if test "X-$cc_flags_set" = "X-"; then cc_vendor= cc_version= fi �����������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/oneapi-flags�������������������������������������������������������������������0000664�0000000�0000000�00000004454�15030617045�0016573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # # Prepend `$srcdir/config/intel-warnings/` to the filename suffix(es) given as # subroutine argument(s), remove comments starting with # and ending # at EOL, replace spans of whitespace (including newlines) with spaces, # and re-emit the file(s) thus filtered on the standard output stream. # load_intel_arguments() { set -- $(for arg; do sed 's,#.*$,,' $srcdir/config/intel-warnings/${arg} done) IFS=' ' echo "$*" } # Get the compiler version in a way that works for icx # icx unless a compiler version is already known # cc_vendor: The compiler name: icx # cc_version: Version number: 2023.2.0 # if test X = "X$cc_flags_set"; then cc_version="`$CC $CFLAGS -V 2>&1 |grep 'oneAPI'`" if test X != "X$cc_version"; then cc_vendor=icx cc_version=`echo $cc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'` echo "compiler '$CC' is Intel oneAPI $cc_vendor-$cc_version" # Some version numbers # Intel oneAPI version numbers are of the form: "major.minor.patch" cc_vers_major=`echo $cc_version | cut -f1 -d.` cc_vers_minor=`echo $cc_version | cut -f2 -d.` cc_vers_patch=`echo $cc_version | cut -f2 -d.` test -n "$cc_vers_major" || cc_vers_major=0 test -n "$cc_vers_minor" || cc_vers_minor=0 test -n "$cc_vers_patch" || cc_vers_patch=0 cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch` fi fi # Common Intel flags for various situations if test "X-icx" = "X-$cc_vendor"; then CFLAGS="$CFLAGS -std=c99 -Wall" CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" DEBUG_CFLAGS="-g -O0" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= # Add various general warning flags in intel-warnings. CFLAGS="$CFLAGS $(load_intel_arguments oneapi/general)" ################# # Flags are set # ################# cc_flags_set=yes fi # Clear cc info if no flags set if test "X-$cc_flags_set" = "X-"; then cc_vendor= cc_version= fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/powerpc-ibm-aix5.x�������������������������������������������������������������0000664�0000000�0000000�00000011111�15030617045�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. if test "X-$CC" = "X-"; then CC=xlc CC_BASENAME=xlc fi if test "X-$F77" = "X-"; then F77=xlf F77_BASENAME=xlf fi # C and Fortran Compiler and Preprocessor Flags # --------------------------------------------------- # # - Flags that end with `_CFLAGS' are always passed to the C compiler. # - Flags that end with `_FFLAGS' are always passed to the Fortran # compiler. # - Flags that end with `_CPPFLAGS' are passed to the C compiler # when compiling but not when linking. # # DEBUG_CFLAGS # DEBUG_FFLAGS # DEBUG_CPPFLAGS - Flags to pass to the compiler to create a # library suitable for use with debugging # tools. Usually this list will exclude # optimization switches (like `-O') and include # switches that turn on symbolic debugging support # (like `-g'). # # PROD_CFLAGS # PROD_FFLAGS # PROD_CPPFLAGS - Flags to pass to the compiler to create a # production version of the library. These # usually exclude symbolic debugging switches (like # `-g') and include optimization switches (like # `-O'). # # PROFILE_CFLAGS # PROFILE_FFLAGS # PROFILE_CPPFLAGS- Flags to pass to the compiler to create a # library suitable for performance testing (like # `-pg'). This may or may not include debugging or # production flags. # # FFLAGS # CFLAGS - Flags can be added to these variable which # might already be partially initialized. These # flags will always be passed to the compiler and # should include switches to turn on full warnings. # # WARNING: flags do not have to be added to the CFLAGS # or FFLAGS variable if the compiler is the GNU gcc # and g77 compiler. # # FFLAGS and CFLAGS should contain *something* or else # configure will probably add `-g'. For most systems # this isn't a problem but some systems will disable # optimizations in favor of the `-g'. The configure # script will remove the `-g' flag in production mode # only. # # These flags should be set according to the compiler being used. # There are two ways to check the compiler. You can try using `-v' or # `--version' to see if the compiler will print a version string. You # can use the value of $FOO_BASENAME which is the base name of the # first word in $FOO, where FOO is either CC or F77 (note that the # value of CC may have changed above). case $CC_BASENAME in gcc) CFLAGS="$CFLAGS" DEBUG_CFLAGS="-g -fverbose-asm" DEBUG_CPPFLAGS= PROD_CFLAGS="-O3 -fomit-frame-pointer" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; *) CFLAGS="$CFLAGS -D_ALL_SOURCE" DEBUG_CFLAGS="-g" DEBUG_CPPFLAGS= PROD_CFLAGS="-O" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; esac case $F77_BASENAME in g77) FFLAGS="$FFLAGS -Wsign-compare" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O3 -fomit-frame-pointer" PROFILE_FFLAGS="-pg" ;; *) FFLAGS="$FFLAGS" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; esac # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/powerpc64-linux-gnu������������������������������������������������������������0000664�0000000�0000000�00000000463�15030617045�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # This is the same as linux-gnu . $srcdir/config/linux-gnu �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016304�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/LICENSE��������������������������������������������������������������0000664�0000000�0000000�00000023634�15030617045�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) 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. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.����������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/README.md������������������������������������������������������������0000664�0000000�0000000�00000033020�15030617045�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# CMake Scripts <!-- omit in toc --> [![pipeline status](https://git.stabletec.com/other/cmake-scripts/badges/main/pipeline.svg)](https://git.stabletec.com/other/cmake-scripts/commits/main) [![license](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://git.stabletec.com/other/cmake-scripts/blob/main/LICENSE) This is a collection of quite useful scripts that expand the possibilities for building software with CMake, by making some things easier and otherwise adding new build types - [Sanitizer Builds `sanitizers.cmake`](#sanitizer-builds-sanitizerscmake) - [Code Coverage `code-coverage.cmake`](#code-coverage-code-coveragecmake) - [Added Targets](#added-targets) - [Usage](#usage) - [Example 1 - All targets instrumented](#example-1---all-targets-instrumented) - [1a - Via global command](#1a---via-global-command) - [1b - Via target commands](#1b---via-target-commands) - [Example 2: Target instrumented, but with regex pattern of files to be excluded from report](#example-2-target-instrumented-but-with-regex-pattern-of-files-to-be-excluded-from-report) - [Example 3: Target added to the 'ccov' and 'ccov-all' targets](#example-3-target-added-to-the-ccov-and-ccov-all-targets) - [Tools `tools.cmake`](#tools-toolscmake) - [clang-tidy](#clang-tidy) - [include-what-you-use](#include-what-you-use) - [cppcheck](#cppcheck) - [Formatting `formatting.cmake`](#formatting-formattingcmake) - [clang-format](#clang-format) - [cmake-format](#cmake-format) ## Sanitizer Builds [`sanitizers.cmake`](sanitizers.cmake) Sanitizers are tools that perform checks during a program’s runtime and returns issues, and as such, along with unit testing, code coverage and static analysis, is another tool to add to the programmers toolbox. And of course, like the previous tools, are tragically simple to add into any project using CMake, allowing any project and developer to quickly and easily use. A quick rundown of the tools available, and what they do: - [LeakSanitizer](https://clang.llvm.org/docs/LeakSanitizer.html) detects memory leaks, or issues where memory is allocated and never deallocated, causing programs to slowly consume more and more memory, eventually leading to a crash. - [AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html) is a fast memory error detector. It is useful for detecting most issues dealing with memory, such as: - Out of bounds accesses to heap, stack, global - Use after free - Use after return - Use after scope - Double-free, invalid free - Memory leaks (using LeakSanitizer) - [ThreadSanitizer](https://clang.llvm.org/docs/ThreadSanitizer.html) detects data races for multi-threaded code. - [UndefinedBehaviourSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) detects the use of various features of C/C++ that are explicitly listed as resulting in undefined behaviour. Most notably: - Using misaligned or null pointer. - Signed integer overflow - Conversion to, from, or between floating-point types which would overflow the destination - Division by zero - Unreachable code - [MemorySanitizer](https://clang.llvm.org/docs/MemorySanitizer.html) detects uninitialized reads. - [Control Flow Integrity](https://clang.llvm.org/docs/ControlFlowIntegrity.html) is designed to detect certain forms of undefined behaviour that can potentially allow attackers to subvert the program's control flow. These are used by declaring the `HDF4_USE_SANITIZER` CMake variable as string containing any of: - Address - Memory - MemoryWithOrigins - Undefined - Thread - Leak - CFI Multiple values are allowed, e.g. `-DHDF4_USE_SANITIZER=Address,Leak` but some sanitizers cannot be combined together, e.g.`-DHDF4_USE_SANITIZER=Address,Memory` will result in configuration error. The delimiter character is not required and `-DHDF4_USE_SANITIZER=AddressLeak` would work as well. ## Code Coverage [`code-coverage.cmake`](code-coverage.cmake) > In computer science, test coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite runs. A program with high test coverage, measured as a percentage, has had more of its source code executed during testing, which suggests it has a lower chance of containing undetected software bugs compared to a program with low test coverage. Many different metrics can be used to calculate test coverage; some of the most basic are the percentage of program subroutines and the percentage of program statements called during execution of the test suite. > > [Wikipedia, Code Coverage](https://en.wikipedia.org/wiki/Code_coverage) Code coverage is the detailing of, during the execution of a binary, which regions, functions, or lines of code are *actually* executed. This can be used in a number of ways, from figuring out areas that automated testing is lacking or not touching, to giving a user an instrumented binary to determine which areas of code are used most/least to determine which areas to focus on. Although this does come with the caveat that coverage is no guarantee of good testing, just of what code has been. Coverage here is supported on both GCC and Clang. GCC requires the `lcov` program, and Clang requires `llvm-cov` and `llvm-profdata`, often provided with the llvm toolchain. To enable, turn on the `CODE_COVERAGE` variable. ### Added Targets - GCOV/LCOV: - ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. - ccov-${TARGET_NAME} : Generates HTML code coverage report for the associated named target. - ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. - ccov-all-capture : Generates an all-merged.info file, for use with coverage dashboards (e.g. codecov.io, coveralls). - LLVM-COV: - ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. - ccov-report : Generates HTML code coverage report for every target added with 'AUTO' parameter. - ccov-${TARGET_NAME} : Generates HTML code coverage report. - ccov-rpt-${TARGET_NAME} : Prints to command line summary per-file coverage information. - ccov-show-${TARGET_NAME} : Prints to command line detailed per-line coverage information. - ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. - ccov-all-report : Prints summary per-file coverage information for every target added with ALL' parameter to the command line. ### Usage To enable any code coverage instrumentation/targets, the single CMake option of `CODE_COVERAGE` needs to be set to 'ON', either by GUI, ccmake, or on the command line ie `-DCODE_COVERAGE=ON`. From this point, there are two primary methods for adding instrumentation to targets: 1. A blanket instrumentation by calling `add_code_coverage()`, where all targets in that directory and all subdirectories are automatically instrumented. 2. Per-target instrumentation by calling `target_code_coverage(<TARGET_NAME>)`, where the target is given and thus only that target is instrumented. This applies to both libraries and executables. To add coverage targets, such as calling `make ccov` to generate the actual coverage information for perusal or consumption, call `target_code_coverage(<TARGET_NAME>)` on an *executable* target. **NOTE:** For more options, please check the actual [`code-coverage.cmake`](code-coverage.cmake) file. #### Example 1 - All targets instrumented In this case, the coverage information reported will will be that of the `theLib` library target and `theExe` executable. ##### 1a - Via global command ``` add_code_coverage() # Adds instrumentation to all targets add_library(theLib lib.cpp) add_executable(theExe main.cpp) target_link_libraries(theExe PRIVATE theLib) target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target (instrumentation already added via global anyways) for generating code coverage reports. ``` ##### 1b - Via target commands ``` add_library(theLib lib.cpp) target_code_coverage(theLib) # As a library target, adds coverage instrumentation but no targets. add_executable(theExe main.cpp) target_link_libraries(theExe PRIVATE theLib) target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target and instrumentation for generating code coverage reports. ``` #### Example 2: Target instrumented, but with regex pattern of files to be excluded from report ``` add_executable(theExe main.cpp non_covered.cpp) target_code_coverage(theExe EXCLUDE non_covered.cpp) # As an executable target, the reports will exclude the non_covered.cpp file. ``` #### Example 3: Target added to the 'ccov' and 'ccov-all' targets ``` add_code_coverage_all_targets(EXCLUDE test/*) # Adds the 'ccov-all' target set and sets it to exclude all files in test/ folders. add_executable(theExe main.cpp non_covered.cpp) target_code_coverage(theExe AUTO ALL EXCLUDE non_covered.cpp test/*) # As an executable target, adds to the 'ccov' and ccov-all' targets, and the reports will exclude the non-covered.cpp file, and any files in a test/ folder. ``` ## Tools [`tools.cmake`](tools.cmake) The three tools in this are used via two provided functions each, for example for clang-tidy: ``` add_executable(big_test) clang_tidy() # Sources provided here are run with clang-tidy with no options add_executable(test2 main2.cpp) target_sources(big_test test2.c test2.cpp) clang_tidy(-header-filter='${CMAKE_SOURCE_DIR}/*') # Sources provided here are run with clang-tidy with the header-filter options provided to it from above add_execuable(test1 main1.cpp) target_sources(big_test test1.c test1.cpp) reset_clang_tidy() # Sources provided here are not run with clang-tidy at all add_executable(test3 main3.cpp) target_sources(big_test test3.c test3.cpp) clang_tidy() # Sources provided here are run with clang-tidy with no options add_executable(test4 main4.cpp) target_sources(big_test test4.c test4.cpp) ``` ### clang-tidy > clang-tidy is a clang-based C++ “linter†tool. Its purpose is to provide an extensible framework for diagnosing and fixing typical programming errors, like style violations, interface misuse, or bugs that can be deduced via static analysis. clang-tidy is modular and provides a convenient interface for writing new checks. > > [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) To use, add the `clang_tidy()` macro, with the arguments being the options passed to the clang-tidy call in the form of `clang-tidy ${ARGS}`. The settings used with clang-tidy can be changed by calling `clang_tidy()` macro again. It can be turned off by calling the `reset_clang_tidy()` macro. ### include-what-you-use > "Include what you use" means this: for every symbol (type, function variable, or macro) that you use in foo.cc, either foo.cc or foo.h should #include a .h file that exports the declaration of that symbol. The include-what-you-use tool is a program that can be built with the clang libraries in order to analyze #includes of source files to find include-what-you-use violations, and suggest fixes for them. > > The main goal of include-what-you-use is to remove superfluous #includes. It does this both by figuring out what #includes are not actually needed for this file (for both .cc and .h files), and replacing #includes with forward-declares when possible. > > [include-what-you-use](https://include-what-you-use.org/) To use, add the `include_what_you_use()` macro, with the arguments being the options passed to the include_what_you_use call in the form of `include-what-you-use ${ARGS}`. The settings used with include-what-you-use can be changed by calling `include_what_you_use()` macro again. It can be turned off by calling the `reset_include_what_you_use()` macro. ### cppcheck > Cppcheck is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs. The goal is to have very few false positives. Cppcheck is designed to be able to analyze your C/C++ code even if it has non-standard syntax (common in embedded projects). > > [cppcheck](http://cppcheck.net/) To use, add the `cppcheck()` macro, with the arguments being the options passed to the cppcheck call in the form of `cppcheck ${ARGS}`. The settings used with iwyu can be changed by calling `cppcheck()` macro again. It can be turned off by calling the `reset_cppcheck()` macro. ## Formatting [`formatting.cmake`](formatting.cmake) ### clang-format Allows to automatically perform code formatting using the clang-format program, by calling an easy-to-use target ala `make format`. It requires a target name, and the list of files to format. As well, if the target name is the name of another target, then all files associated with that target will be added, and the target name changed to be `format_<TARGET>`. As well, any targets otherwise listed with the files will also have their files imported for formatting. ``` file(GLOB_RECURSE ALL_CODE_FILES ${PROJECT_SOURCE_DIR}/src/*.[ch]pp ${PROJECT_SOURCE_DIR}/src/*.[ch] ${PROJECT_SOURCE_DIR}/include/*.[h]pp ${PROJECT_SOURCE_DIR}/include/*.[h] ${PROJECT_SOURCE_DIR}/example/*.[ch]pp ${PROJECT_SOURCE_DIR}/example/*.[ch] ) clang_format(TARGET_NAME ${ALL_CODE_FILES}) ``` ### cmake-format Similar to the clang-format above, creates a target `cmake-format` when the `cmake_format(<FILES>)` function is defined in CMake scripts, and any <FILES> passed in will be formatted by the cmake-format program, if it is found. ``` file(GLOB_RECURSE CMAKE_FILES CMakeLists.txt ) cmake_format(TARGET_NAME ${CMAKE_FILES}) ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/code-coverage.cmake��������������������������������������������������0000664�0000000�0000000�00000074017�15030617045�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Copyright (C) 2018-2020 by George Cave - gcave@stablecoder.ca # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # USAGE: To enable any code coverage instrumentation/targets, the single CMake # option of `CODE_COVERAGE` needs to be set to 'ON', either by GUI, ccmake, or # on the command line. # # From this point, there are two primary methods for adding instrumentation to # targets: 1 - A blanket instrumentation by calling `add_code_coverage()`, where # all targets in that directory and all subdirectories are automatically # instrumented. 2 - Per-target instrumentation by calling # `target_code_coverage(<TARGET_NAME>)`, where the target is given and thus only # that target is instrumented. This applies to both libraries and executables. # # To add coverage targets, such as calling `make ccov` to generate the actual # coverage information for perusal or consumption, call # `target_code_coverage(<TARGET_NAME>)` on an *executable* target. # # Example 1: All targets instrumented # # In this case, the coverage information reported will will be that of the # `theLib` library target and `theExe` executable. # # 1a: Via global command # # ~~~ # add_code_coverage() # Adds instrumentation to all targets # # add_library(theLib lib.cpp) # # add_executable(theExe main.cpp) # target_link_libraries(theExe PRIVATE theLib) # target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target (instrumentation already added via global anyways) for generating code coverage reports. # ~~~ # # 1b: Via target commands # # ~~~ # add_library(theLib lib.cpp) # target_code_coverage(theLib) # As a library target, adds coverage instrumentation but no targets. # # add_executable(theExe main.cpp) # target_link_libraries(theExe PRIVATE theLib) # target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target and instrumentation for generating code coverage reports. # ~~~ # # Example 2: Target instrumented, but with regex pattern of files to be excluded # from report # # ~~~ # add_executable(theExe main.cpp non_covered.cpp) # target_code_coverage(theExe EXCLUDE non_covered.cpp test/*) # As an executable target, the reports will exclude the non-covered.cpp file, and any files in a test/ folder. # ~~~ # # Example 3: Target added to the 'ccov' and 'ccov-all' targets # # ~~~ # add_code_coverage_all_targets(EXCLUDE test/*) # Adds the 'ccov-all' target set and sets it to exclude all files in test/ folders. # # add_executable(theExe main.cpp non_covered.cpp) # target_code_coverage(theExe AUTO ALL EXCLUDE non_covered.cpp test/*) # As an executable target, adds to the 'ccov' and ccov-all' targets, and the reports will exclude the non-covered.cpp file, and any files in a test/ folder. # ~~~ # Options option( CODE_COVERAGE "Builds targets with code coverage instrumentation. (Requires GCC or Clang)" OFF) # Programs find_program(LLVM_COV_PATH llvm-cov) message(VERBOSE "program llvm-cov=${LLVM_COV_PATH}") find_program(LLVM_PROFDATA_PATH llvm-profdata) message(VERBOSE "program llvm-profdata=${LLVM_PROFDATA_PATH}") find_program(LCOV_PATH lcov) message(VERBOSE "program lcov=${LCOV_PATH}") find_program(GENHTML_PATH genhtml) message(VERBOSE "program genhtml=${GENHTML_PATH}") # Hide behind the 'advanced' mode flag for GUI/ccmake mark_as_advanced(FORCE LLVM_COV_PATH LLVM_PROFDATA_PATH LCOV_PATH GENHTML_PATH) # Variables set(CMAKE_COVERAGE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/ccov) set_property(GLOBAL PROPERTY JOB_POOLS ccov_serial_pool=1) # Common initialization/checks if(CODE_COVERAGE AND NOT CODE_COVERAGE_ADDED) set(CODE_COVERAGE_ADDED ON) # Common Targets file(MAKE_DIRECTORY ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") message(STATUS "Building with llvm Code Coverage Tools") if(CMAKE_C_COMPILER_ID MATCHES "AppleClang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") # When on macOS and using the Apple-provided toolchain, use the # XCode-provided llvm toolchain via `xcrun` message( STATUS "Building with XCode-provided llvm code coverage tools (via `xcrun`)") set(LLVM_COV_PATH xcrun llvm-cov) set(LLVM_PROFDATA_PATH xcrun llvm-profdata) else() # Use the regular llvm toolchain message(STATUS "Building with llvm code coverage tools") endif() if(NOT LLVM_COV_PATH) message(FATAL_ERROR "llvm-cov not found! Aborting.") else() # Version number checking for 'EXCLUDE' compatibility execute_process(COMMAND ${LLVM_COV_PATH} --version OUTPUT_VARIABLE LLVM_COV_VERSION_CALL_OUTPUT) string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" LLVM_COV_VERSION ${LLVM_COV_VERSION_CALL_OUTPUT}) if(LLVM_COV_VERSION VERSION_LESS "7.0.0") message( WARNING "target_code_coverage()/add_code_coverage_all_targets() 'EXCLUDE' option only available on llvm-cov >= 7.0.0" ) endif() endif() # Targets if(${CMAKE_VERSION} VERSION_LESS "3.17.0") add_custom_target( ccov-clean COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list) else() add_custom_target( ccov-clean COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list) endif() # Used to get the shared object file list before doing the main all- # processing add_custom_target( ccov-libs COMMAND ; COMMENT "libs ready for coverage report.") elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") # Messages message(STATUS "Building with lcov Code Coverage Tools") if(CMAKE_BUILD_TYPE) string(TOUPPER ${CMAKE_BUILD_TYPE} upper_build_type) if(NOT ${upper_build_type} STREQUAL "DEBUG") message( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) endif() else() message( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) endif() if(NOT LCOV_PATH) message(FATAL_ERROR "lcov not found! Aborting...") endif() if(NOT GENHTML_PATH) message(FATAL_ERROR "genhtml not found! Aborting...") endif() # Targets add_custom_target(ccov-clean COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters) else() set(CODE_COVERAGE_ADDED OFF) message(STATUS "Code coverage requires Clang or GCC.(${CMAKE_C_COMPILER_ID})") endif() endif() # Adds code coverage instrumentation to a library, or instrumentation/targets # for an executable target. # ~~~ # EXECUTABLE ADDED TARGETS: # GCOV/LCOV: # ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. # ccov-${TARGET_NAME} : Generates HTML code coverage report for the associated named target. # ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. # # LLVM-COV: # ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. # ccov-report : Generates HTML code coverage report for every target added with 'AUTO' parameter. # ccov-${TARGET_NAME} : Generates HTML code coverage report. # ccov-report-${TARGET_NAME} : Prints to command line summary per-file coverage information. # ccov-export-${TARGET_NAME} : Exports the coverage report to a JSON file. # ccov-show-${TARGET_NAME} : Prints to command line detailed per-line coverage information. # ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. # ccov-all-report : Prints summary per-file coverage information for every target added with ALL' parameter to the command line. # ccov-all-export : Exports the coverage report to a JSON file. # # Required: # TARGET_NAME - Name of the target to generate code coverage for. # Optional: # PUBLIC - Sets the visibility for added compile options to targets to PUBLIC instead of the default of PRIVATE. # INTERFACE - Sets the visibility for added compile options to targets to INTERFACE instead of the default of PRIVATE. # PLAIN - Do not set any target visibility (backward compatibility with old cmake projects) # AUTO - Adds the target to the 'ccov' target so that it can be run in a batch with others easily. Effective on executable targets. # ALL - Adds the target to the 'ccov-all' and 'ccov-all-report' targets, which merge several executable targets coverage data to a single report. Effective on executable targets. # EXTERNAL - For GCC's lcov, allows the profiling of 'external' files from the processing directory # COVERAGE_TARGET_NAME - For executables ONLY, changes the outgoing target name so instead of `ccov-${TARGET_NAME}` it becomes `ccov-${COVERAGE_TARGET_NAME}`. # EXCLUDE <PATTERNS> - Excludes files of the patterns provided from coverage. Note that GCC/lcov excludes by glob pattern, and clang/LLVM excludes via regex! **These do not copy to the 'all' targets.** # OBJECTS <TARGETS> - For executables ONLY, if the provided targets are shared libraries, adds coverage information to the output # PRE_ARGS <ARGUMENTS> - For executables ONLY, prefixes given arguments to the associated ccov-* executable call ($<PRE_ARGS> ccov-*) # ARGS <ARGUMENTS> - For executables ONLY, appends the given arguments to the associated ccov-* executable call (ccov-* $<ARGS>) # ~~~ function(target_code_coverage TARGET_NAME) # Argument parsing set(options AUTO ALL EXTERNAL PUBLIC INTERFACE PLAIN) set(single_value_keywords COVERAGE_TARGET_NAME) set(multi_value_keywords EXCLUDE OBJECTS PRE_ARGS ARGS) cmake_parse_arguments( target_code_coverage "${options}" "${single_value_keywords}" "${multi_value_keywords}" ${ARGN}) # Set the visibility of target functions to PUBLIC, INTERFACE or default to # PRIVATE. if(target_code_coverage_PUBLIC) set(TARGET_VISIBILITY PUBLIC) set(TARGET_LINK_VISIBILITY PUBLIC) elseif(target_code_coverage_INTERFACE) set(TARGET_VISIBILITY INTERFACE) set(TARGET_LINK_VISIBILITY INTERFACE) elseif(target_code_coverage_PLAIN) set(TARGET_VISIBILITY PUBLIC) set(TARGET_LINK_VISIBILITY) else() set(TARGET_VISIBILITY PRIVATE) set(TARGET_LINK_VISIBILITY PRIVATE) endif() if(NOT target_code_coverage_COVERAGE_TARGET_NAME) # If a specific name was given, use that instead. set(target_code_coverage_COVERAGE_TARGET_NAME ${TARGET_NAME}) endif() if(CODE_COVERAGE) # Add code coverage instrumentation to the target's linker command if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") target_compile_options(${TARGET_NAME} ${TARGET_VISIBILITY} -fprofile-instr-generate -fcoverage-mapping) target_link_options(${TARGET_NAME} ${TARGET_VISIBILITY} -fprofile-instr-generate -fcoverage-mapping) elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") target_compile_options( ${TARGET_NAME} ${TARGET_VISIBILITY} -fprofile-arcs -ftest-coverage $<$<COMPILE_LANGUAGE:CXX>:-fno-elide-constructors> -fno-default-inline) target_link_libraries(${TARGET_NAME} ${TARGET_LINK_VISIBILITY} gcov) endif() # Targets get_target_property(target_type ${TARGET_NAME} TYPE) # Add shared library to processing for 'all' targets if(target_type STREQUAL "SHARED_LIBRARY" AND target_code_coverage_ALL) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") add_custom_target( ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME}>" >> ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list DEPENDS ${TARGET_NAME}) if(NOT TARGET ccov-libs) message( FATAL_ERROR "Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'." ) endif() add_dependencies(ccov-libs ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) endif() endif() # For executables add targets to run and produce output if(target_type STREQUAL "EXECUTABLE") if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") # If there are shared objects to also work with, generate the string to # add them here foreach(SO_TARGET ${target_code_coverage_OBJECTS}) # Check to see if the target is a shared object if(TARGET ${SO_TARGET}) get_target_property(SO_TARGET_TYPE ${SO_TARGET} TYPE) if(${SO_TARGET_TYPE} STREQUAL "SHARED_LIBRARY") set(SO_OBJECTS ${SO_OBJECTS} -object=$<TARGET_FILE:${SO_TARGET}>) endif() endif() endforeach() # Run the executable, generating raw profile data Make the run data # available for further processing. Separated to allow Windows to run # this target serially. add_custom_target( ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E env ${CMAKE_CROSSCOMPILING_EMULATOR} ${target_code_coverage_PRE_ARGS} LLVM_PROFILE_FILE=${target_code_coverage_COVERAGE_TARGET_NAME}.profraw $<TARGET_FILE:${TARGET_NAME}> ${target_code_coverage_ARGS} COMMAND ${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME}>" ${SO_OBJECTS} >> ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list COMMAND ${CMAKE_COMMAND} -E echo "${CMAKE_CURRENT_BINARY_DIR}/${target_code_coverage_COVERAGE_TARGET_NAME}.profraw" >> ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list JOB_POOL ccov_serial_pool DEPENDS ccov-libs ${TARGET_NAME}) # Merge the generated profile data so llvm-cov can process it add_custom_target( ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_PROFDATA_PATH} merge -sparse ${target_code_coverage_COVERAGE_TARGET_NAME}.profraw -o ${target_code_coverage_COVERAGE_TARGET_NAME}.profdata DEPENDS ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) # Ignore regex only works on LLVM >= 7 if(LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0") foreach(EXCLUDE_ITEM ${target_code_coverage_EXCLUDE}) set(EXCLUDE_REGEX ${EXCLUDE_REGEX} -ignore-filename-regex='${EXCLUDE_ITEM}') endforeach() endif() # Print out details of the coverage information to the command line add_custom_target( ccov-show-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_COV_PATH} show $<TARGET_FILE:${TARGET_NAME}> ${SO_OBJECTS} -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata -show-line-counts-or-regions ${EXCLUDE_REGEX} DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) # Print out a summary of the coverage information to the command line add_custom_target( ccov-report-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_COV_PATH} report $<TARGET_FILE:${TARGET_NAME}> ${SO_OBJECTS} -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata ${EXCLUDE_REGEX} DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) # Export coverage information so continuous integration tools (e.g. # Jenkins) can consume it add_custom_target( ccov-export-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_COV_PATH} export $<TARGET_FILE:${TARGET_NAME}> ${SO_OBJECTS} -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata -format="text" ${EXCLUDE_REGEX} > ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}.json DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) # Generates HTML output of the coverage information for perusal add_custom_target( ccov-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_COV_PATH} show $<TARGET_FILE:${TARGET_NAME}> ${SO_OBJECTS} -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata -show-line-counts-or-regions -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME} -format="html" ${EXCLUDE_REGEX} DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(COVERAGE_INFO "${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}.info" ) # Run the executable, generating coverage information add_custom_target( ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} ${target_code_coverage_PRE_ARGS} $<TARGET_FILE:${TARGET_NAME}> ${target_code_coverage_ARGS} DEPENDS ${TARGET_NAME}) # Generate exclusion string for use foreach(EXCLUDE_ITEM ${target_code_coverage_EXCLUDE}) set(EXCLUDE_REGEX ${EXCLUDE_REGEX} --remove ${COVERAGE_INFO} '${EXCLUDE_ITEM}') endforeach() if(EXCLUDE_REGEX) set(EXCLUDE_COMMAND ${LCOV_PATH} ${EXCLUDE_REGEX} --output-file ${COVERAGE_INFO}) else() set(EXCLUDE_COMMAND ;) endif() if(NOT ${target_code_coverage_EXTERNAL}) set(EXTERNAL_OPTION --no-external) endif() # Capture coverage data if(${CMAKE_VERSION} VERSION_LESS "3.17.0") add_custom_target( ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} ${target_code_coverage_PRE_ARGS} $<TARGET_FILE:${TARGET_NAME}> ${target_code_coverage_ARGS} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --base-directory ${CMAKE_SOURCE_DIR} --capture ${EXTERNAL_OPTION} --output-file ${COVERAGE_INFO} COMMAND ${EXCLUDE_COMMAND} DEPENDS ${TARGET_NAME}) else() add_custom_target( ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} ${target_code_coverage_PRE_ARGS} $<TARGET_FILE:${TARGET_NAME}> ${target_code_coverage_ARGS} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --base-directory ${CMAKE_SOURCE_DIR} --capture ${EXTERNAL_OPTION} --output-file ${COVERAGE_INFO} COMMAND ${EXCLUDE_COMMAND} DEPENDS ${TARGET_NAME}) endif() # Generates HTML output of the coverage information for perusal add_custom_target( ccov-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${GENHTML_PATH} -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME} ${COVERAGE_INFO} DEPENDS ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME}) endif() add_custom_command( TARGET ccov-${target_code_coverage_COVERAGE_TARGET_NAME} POST_BUILD COMMAND ; COMMENT "Open ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}/index.html in your browser to view the coverage report." ) # AUTO if(target_code_coverage_AUTO) if(NOT TARGET ccov) add_custom_target(ccov) endif() add_dependencies(ccov ccov-${target_code_coverage_COVERAGE_TARGET_NAME}) if(NOT CMAKE_C_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU") if(NOT TARGET ccov-report) add_custom_target(ccov-report) endif() add_dependencies( ccov-report ccov-report-${target_code_coverage_COVERAGE_TARGET_NAME}) endif() endif() # ALL if(target_code_coverage_ALL) if(NOT TARGET ccov-all-processing) message( FATAL_ERROR "Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'." ) endif() add_dependencies(ccov-all-processing ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) endif() endif() endif() endfunction() # Adds code coverage instrumentation to all targets in the current directory and # any subdirectories. To add coverage instrumentation to only specific targets, # use `target_code_coverage`. function(add_code_coverage) if(CODE_COVERAGE) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") add_compile_options(-fprofile-instr-generate -fcoverage-mapping) add_link_options(-fprofile-instr-generate -fcoverage-mapping) elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") add_compile_options( -fprofile-arcs -ftest-coverage $<$<COMPILE_LANGUAGE:CXX>:-fno-elide-constructors> -fno-default-inline) link_libraries(gcov) endif() endif() endfunction() # Adds the 'ccov-all' type targets that calls all targets added via # `target_code_coverage` with the `ALL` parameter, but merges all the coverage # data from them into a single large report instead of the numerous smaller # reports. Also adds the ccov-all-capture Generates an all-merged.info file, for # use with coverage dashboards (e.g. codecov.io, coveralls). # ~~~ # Optional: # EXCLUDE <PATTERNS> - Excludes files of the patterns provided from coverage. Note that GCC/lcov excludes by glob pattern, and clang/LLVM excludes via regex! # ~~~ function(add_code_coverage_all_targets) # Argument parsing set(multi_value_keywords EXCLUDE) cmake_parse_arguments(add_code_coverage_all_targets "" "" "${multi_value_keywords}" ${ARGN}) if(CODE_COVERAGE) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") # Merge the profile data for all of the run executables if(WIN32) add_custom_target( ccov-all-processing COMMAND powershell -Command $$FILELIST = Get-Content ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list\; llvm-profdata.exe merge -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -sparse $$FILELIST) else() add_custom_target( ccov-all-processing COMMAND ${LLVM_PROFDATA_PATH} merge -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -sparse `cat ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list`) endif() # Regex exclude only available for LLVM >= 7 if(LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0") foreach(EXCLUDE_ITEM ${add_code_coverage_all_targets_EXCLUDE}) set(EXCLUDE_REGEX ${EXCLUDE_REGEX} -ignore-filename-regex='${EXCLUDE_ITEM}') endforeach() endif() # Print summary of the code coverage information to the command line if(WIN32) add_custom_target( ccov-all-report COMMAND powershell -Command $$FILELIST = Get-Content ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list\; llvm-cov.exe report $$FILELIST -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata ${EXCLUDE_REGEX} DEPENDS ccov-all-processing) else() add_custom_target( ccov-all-report COMMAND ${LLVM_COV_PATH} report `cat ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata ${EXCLUDE_REGEX} DEPENDS ccov-all-processing) endif() # Export coverage information so continuous integration tools (e.g. # Jenkins) can consume it if(WIN32) add_custom_target( ccov-all-export COMMAND powershell -Command $$FILELIST = Get-Content ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list\; llvm-cov.exe export $$FILELIST -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -format="text" ${EXCLUDE_REGEX} > ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/coverage.json DEPENDS ccov-all-processing) else() add_custom_target( ccov-all-export COMMAND ${LLVM_COV_PATH} export `cat ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -format="text" ${EXCLUDE_REGEX} > ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/coverage.json DEPENDS ccov-all-processing) endif() # Generate HTML output of all added targets for perusal if(WIN32) add_custom_target( ccov-all COMMAND powershell -Command $$FILELIST = Get-Content ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list\; llvm-cov.exe show $$FILELIST -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -show-line-counts-or-regions -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged -format="html" ${EXCLUDE_REGEX} DEPENDS ccov-all-processing) else() add_custom_target( ccov-all COMMAND ${LLVM_COV_PATH} show `cat ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -show-line-counts-or-regions -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged -format="html" ${EXCLUDE_REGEX} DEPENDS ccov-all-processing) endif() elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(COVERAGE_INFO "${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.info") # Nothing required for gcov add_custom_target(ccov-all-processing COMMAND ;) # Exclusion regex string creation set(EXCLUDE_REGEX) foreach(EXCLUDE_ITEM ${add_code_coverage_all_targets_EXCLUDE}) set(EXCLUDE_REGEX ${EXCLUDE_REGEX} --remove ${COVERAGE_INFO} '${EXCLUDE_ITEM}') endforeach() if(EXCLUDE_REGEX) set(EXCLUDE_COMMAND ${LCOV_PATH} ${EXCLUDE_REGEX} --output-file ${COVERAGE_INFO}) else() set(EXCLUDE_COMMAND ;) endif() # Capture coverage data if(${CMAKE_VERSION} VERSION_LESS "3.17.0") add_custom_target( ccov-all-capture COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture --output-file ${COVERAGE_INFO} COMMAND ${EXCLUDE_COMMAND} DEPENDS ccov-all-processing) else() add_custom_target( ccov-all-capture COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture --output-file ${COVERAGE_INFO} COMMAND ${EXCLUDE_COMMAND} DEPENDS ccov-all-processing) endif() # Generates HTML output of all targets for perusal add_custom_target( ccov-all COMMAND ${GENHTML_PATH} -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged ${COVERAGE_INFO} -p ${CMAKE_SOURCE_DIR} DEPENDS ccov-all-capture) endif() add_custom_command( TARGET ccov-all POST_BUILD COMMAND ; COMMENT "Open ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged/index.html in your browser to view the coverage report." ) endif() endfunction() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/formatting.cmake�����������������������������������������������������0000664�0000000�0000000�00000010334�15030617045�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Copyright (C) 2019 by George Cave - gcave@stablecoder.ca # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # # clang-format # find_program(CLANG_FORMAT_EXE "clang-format") mark_as_advanced(FORCE CLANG_FORMAT_EXE) if(CLANG_FORMAT_EXE) message(STATUS "clang-format found: ${CLANG_FORMAT_EXE}") else() message(STATUS "clang-format not found!") endif() # Generates a 'format' target using a custom name, files, and include # directories all being parameters. # # Do note that in order for sources to be inherited properly, the source paths # must be reachable from where the macro is called, or otherwise require a full # path for proper inheritance. # # ~~~ # Required: # TARGET_NAME - The name of the target to create. # # Optional: ARGN - The list of targets OR files to format. Relative and absolute # paths are accepted. # ~~~ function(clang_format TARGET_NAME) if(CLANG_FORMAT_EXE) set(FORMAT_FILES) # Check through the ARGN's, determine existent files foreach(item IN LISTS ARGN) if(TARGET ${item}) # If the item is a target, then we'll attempt to grab the associated # source files from it. get_target_property(_TARGET_TYPE ${item} TYPE) if(NOT _TARGET_TYPE STREQUAL "INTERFACE_LIBRARY") get_property( _TEMP TARGET ${item} PROPERTY SOURCES) foreach(iter IN LISTS _TEMP) if(EXISTS ${iter}) set(FORMAT_FILES ${FORMAT_FILES} ${iter}) endif() endforeach() endif() elseif(EXISTS ${item}) # Check if it's a full file path set(FORMAT_FILES ${FORMAT_FILES} ${item}) elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${item}) # Check if it's based on the current source dir set(FORMAT_FILES ${FORMAT_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/${item}) endif() endforeach() # Make the target if(FORMAT_FILES) add_custom_target(${TARGET_NAME} COMMAND ${CLANG_FORMAT_EXE} -i -style=file ${FORMAT_FILES}) if(NOT TARGET format) add_custom_target(format) endif() add_dependencies(format ${TARGET_NAME}) endif() endif() endfunction() # # cmake-format # find_program(CMAKE_FORMAT_EXE "cmake-format") mark_as_advanced(FORCE CMAKE_FORMAT_EXE) if(CMAKE_FORMAT_EXE) message(STATUS "cmake-format found: ${CMAKE_FORMAT_EXE}") else() message(STATUS "cmake-format not found!") endif() # When called, this function will call 'cmake-format' program on all listed # files (if both the program and the files exist and are found) # ~~~ # Required: # TARGET_NAME - The name of the target to create. # # Optional: # ARGN - Any arguments passed in will be considered as 'files' to perform the # formatting on. Any items that are not files will be ignored. Both relative and # absolute paths are accepted. # ~~~ function(cmake_format TARGET_NAME) if(CMAKE_FORMAT_EXE) set(FORMAT_FILES) # Determine files that exist foreach(iter IN LISTS ARGN) if(EXISTS ${iter}) set(FORMAT_FILES ${FORMAT_FILES} ${iter}) elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${iter}) set(FORMAT_FILES ${FORMAT_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/${iter}) endif() endforeach() # Generate target if(FORMAT_FILES) if(TARGET ${TARGET_NAME}) message( ERROR "Cannot create cmake-format target '${TARGET_NAME}', already exists.") else() add_custom_target(${TARGET_NAME} COMMAND ${CMAKE_FORMAT_EXE} -i ${FORMAT_FILES}) if(NOT TARGET cmake-format) add_custom_target(cmake-format) endif() add_dependencies(cmake-format ${TARGET_NAME}) endif() endif() endif() endfunction() ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/sanitizers.cmake�����������������������������������������������������0000664�0000000�0000000�00000017674�15030617045�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Copyright (C) 2018-2022 by George Cave - gcave@stablecoder.ca # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. set(HDF4_USE_SANITIZER "" CACHE STRING "Compile with a sanitizer. Options are: Address, Memory, MemoryWithOrigins, Undefined, Thread, Leak, 'Address;Undefined', CFI" ) function(append value) foreach(variable ${ARGN}) set(${variable} "${${variable}} ${value}" PARENT_SCOPE) endforeach(variable) endfunction() function(append_quoteless value) foreach(variable ${ARGN}) set(${variable} ${${variable}} ${value} PARENT_SCOPE) endforeach(variable) endfunction() function(test_san_flags return_var flags) set(QUIET_BACKUP ${CMAKE_REQUIRED_QUIET}) set(CMAKE_REQUIRED_QUIET TRUE) unset(${return_var} CACHE) set(FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS "${flags}") check_c_source_compiles("int main() { return 0; }" ${return_var}) set(CMAKE_REQUIRED_FLAGS "${FLAGS_BACKUP}") set(CMAKE_REQUIRED_QUIET "${QUIET_BACKUP}") endfunction() message(STATUS "HDF4_USE_SANITIZER=${HDF4_USE_SANITIZER}, CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}") if(HDF4_USE_SANITIZER) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) unset(SANITIZER_SELECTED_FLAGS) if(UNIX) append("-fno-omit-frame-pointer" CMAKE_C_FLAGS) message(STATUS "Building with sanitize, base flags=${CMAKE_C_SANITIZER_FLAGS}") if(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") append("-O1" CMAKE_C_FLAGS) endif() if(HDF4_USE_SANITIZER MATCHES "([Aa]ddress)") # Optional: -fno-optimize-sibling-calls -fsanitize-address-use-after-scope message(STATUS "Testing with Address sanitizer") set(SANITIZER_ADDR_FLAG "-fsanitize=address") test_san_flags(SANITIZER_ADDR_AVAILABLE ${SANITIZER_ADDR_FLAG}) if(SANITIZER_ADDR_AVAILABLE) message(STATUS " Building with Address sanitizer") append("${SANITIZER_ADDR_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_ASAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Address sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() if(HDF4_USE_SANITIZER MATCHES "([Mm]emory([Ww]ith[Oo]rigins)?)") set(SANITIZER_MEM_FLAG "-fsanitize=memory") if(HDF4_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") message(STATUS "Testing with MemoryWithOrigins sanitizer") append("-fno-optimize-sibling-calls -fsanitize-memory-track-origins=2" SANITIZER_MEM_FLAG) else() message(STATUS "Testing with Memory sanitizer") endif() test_san_flags(SANITIZER_MEM_AVAILABLE ${SANITIZER_MEM_FLAG}) if(SANITIZER_MEM_AVAILABLE) if(HDF4_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") message(STATUS " Building with MemoryWithOrigins sanitizer") else() message(STATUS " Building with Memory sanitizer") endif() append("${SANITIZER_MEM_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_MSAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Memory [With Origins] sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() if(HDF4_USE_SANITIZER MATCHES "([Uu]ndefined)") message(STATUS "Testing with Undefined Behaviour sanitizer") set(SANITIZER_UB_FLAG "-fsanitize=undefined") if(EXISTS "${BLACKLIST_FILE}") append("-fsanitize-blacklist=${BLACKLIST_FILE}" SANITIZER_UB_FLAG) endif() test_san_flags(SANITIZER_UB_AVAILABLE ${SANITIZER_UB_FLAG}) if(SANITIZER_UB_AVAILABLE) message(STATUS " Building with Undefined Behaviour sanitizer") append("${SANITIZER_UB_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_UBSAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Undefined Behaviour sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() if(HDF4_USE_SANITIZER MATCHES "([Tt]hread)") message(STATUS "Testing with Thread sanitizer") set(SANITIZER_THREAD_FLAG "-fsanitize=thread") test_san_flags(SANITIZER_THREAD_AVAILABLE ${SANITIZER_THREAD_FLAG}) if(SANITIZER_THREAD_AVAILABLE) message(STATUS " Building with Thread sanitizer") append("${SANITIZER_THREAD_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_TSAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() if(HDF4_USE_SANITIZER MATCHES "([Ll]eak)") message(STATUS "Testing with Leak sanitizer") set(SANITIZER_LEAK_FLAG "-fsanitize=leak") test_san_flags(SANITIZER_LEAK_AVAILABLE ${SANITIZER_LEAK_FLAG}) if(SANITIZER_LEAK_AVAILABLE) message(STATUS " Building with Leak sanitizer") append("${SANITIZER_LEAK_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_LSAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() if(HDF4_USE_SANITIZER MATCHES "([Cc][Ff][Ii])") message(STATUS "Testing with Control Flow Integrity(CFI) sanitizer") set(SANITIZER_CFI_FLAG "-fsanitize=cfi") test_san_flags(SANITIZER_CFI_AVAILABLE ${SANITIZER_CFI_FLAG}) if(SANITIZER_CFI_AVAILABLE) message(STATUS " Building with Control Flow Integrity(CFI) sanitizer") append("${SANITIZER_LEAK_FLAG}" SANITIZER_SELECTED_FLAGS) if(AFL) append_quoteless(AFL_USE_CFISAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "Control Flow Integrity(CFI) sanitizer not available for ${CMAKE_C_COMPILER}") endif() endif() message(STATUS "Sanitizer flags: ${SANITIZER_SELECTED_FLAGS}") test_san_flags(SANITIZER_SELECTED_COMPATIBLE ${SANITIZER_SELECTED_FLAGS}) if(SANITIZER_SELECTED_COMPATIBLE) message(STATUS " Building with ${SANITIZER_SELECTED_FLAGS}") append("${SANITIZER_SELECTED_FLAGS}" CMAKE_C_FLAGS) else() message( FATAL_ERROR "Unsupported value of HDF4_USE_SANITIZER: ${HDF4_USE_SANITIZER}") endif() elseif(MSVC) if(HDF4_USE_SANITIZER MATCHES "([Aa]ddress)") message(STATUS "Building with Address sanitizer") append("-fsanitize=address" CMAKE_C_FLAGS) if(AFL) append_quoteless(AFL_USE_ASAN=1 CMAKE_C_COMPILER_LAUNCHER) endif() else() message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${HDF4_USE_SANITIZER}") endif() else() message(FATAL_ERROR "HDF4_USE_SANITIZER is not supported on this platform.") endif() elseif(MSVC) if(HDF4_USE_SANITIZER MATCHES "([Aa]ddress)") message(STATUS "Building with Address sanitizer") append("/fsanitize=address" CMAKE_C_FLAGS) else() message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${HDF4_USE_SANITIZER}") endif() else() message(FATAL_ERROR "HDF4_USE_SANITIZER is not supported on this platform.") endif() endif() ��������������������������������������������������������������������hdf4-hdf4.3.1/config/sanitizer/tools.cmake����������������������������������������������������������0000664�0000000�0000000�00000011102�15030617045�0020441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Copyright (C) 2018-2023 by George Cave - gcave@stablecoder.ca # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # CLANG-TIDY find_program(CLANG_TIDY_EXE NAMES "clang-tidy") set(CLANG_TIDY_MESSAGE_OUTPUT # Control output messages to occur only once FALSE CACHE INTERNAL FALSE) mark_as_advanced(FORCE CLANG_TIDY_EXE CMAKE_C_CLANG_TIDY) # Adds clang-tidy to code compiled after this macro. All arguments are added to # the clang-tidy application call in the form of `clang-tidy ${ARGN}`. # # If the clang-tidy application is not found, the macro will cause CMake to # produce an error and not generate. # # Options provided can be changed by calling the macro again with the new # arguments. macro(clang_tidy) # Only want to output whether clang-tidy was found once if(NOT CLANG_TIDY_MESSAGE_OUTPUT) set(CLANG_TIDY_MESSAGE_OUTPUT TRUE) if(CLANG_TIDY_EXE) message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") else() message(SEND_ERROR "clang-tidy not found!") endif() endif() # Only pass the options if the tool was found if(CLANG_TIDY_EXE) set(CMAKE_C_CLANG_TIDY ${CLANG_TIDY_EXE} ${ARGN} CACHE STRING "" FORCE) endif() endmacro() # Clears clang-tidy so it is not called on any following defined code # compilation. clang-tidy can be re-enabled by another call to `clang_tidy()`. macro(reset_clang_tidy) set(CMAKE_C_CLANG_TIDY "" CACHE STRING "" FORCE) endmacro() # INCLUDE-WHAT-YOU-USE find_program(IWYU_EXE NAMES "include-what-you-use") set(IWYU_MESSAGE_OUTPUT # Control output messages to occur only once FALSE CACHE INTERNAL FALSE) mark_as_advanced(FORCE IWYU_EXE CMAKE_C_INCLUDE_WHAT_YOU_USE) # Adds include-what-you-use to code compiled after this macro. All arguments are # added to the include-what-you-use application call in the form of # `include-what-you-use ${ARGN}`. # # If the include-what-you-use application is not found, the macro will cause # CMake to produce an error and not generate. # # Options provided can be changed by calling the macro again with the new # arguments. macro(include_what_you_use) # Only want to output whether clang-tidy was found once if(NOT IWYU_MESSAGE_OUTPUT) set(IWYU_MESSAGE_OUTPUT TRUE) if(IWYU_EXE) message(STATUS "include-what-you-use found: ${IWYU_EXE}") else() message(SEND_ERROR "include-what-you-use not found!") endif() endif() # Only pass the options if the tool was found if(IWYU_EXE) set(CMAKE_C_INCLUDE_WHAT_YOU_USE ${IWYU_EXE} ${ARGN} CACHE STRING "" FORCE) endif() endmacro() # Clears include-what-you-use so it is not called on any following defined code # compilation. It can be re-enabled by another call to `include_what_you_use()`. macro(reset_include_what_you_use) set(CMAKE_C_INCLUDE_WHAT_YOU_USE "" CACHE STRING "" FORCE) endmacro() # CPPCHECK find_program(CPPCHECK_EXE NAMES "cppcheck") set(CPPCHECK_MESSAGE_OUTPUT # Control output messages to occur only once FALSE CACHE INTERNAL FALSE) mark_as_advanced(FORCE CPPCHECK_EXE CMAKE_C_CPPCHECK) # Adds cppcheck to code compiled after this macro. All arguments are added to # the cppcheck application call in the form of `cppcheck ${ARGN}`. # # If the include-what-you-use application is not found, the macro will cause # CMake to produce an error and not generate. # # Options provided can be changed by calling the macro again with the new # arguments. macro(cppcheck) # Only want to output whether clang-tidy was found once if(NOT CPPCHECK_MESSAGE_OUTPUT) set(CPPCHECK_MESSAGE_OUTPUT TRUE) if(CPPCHECK_EXE) message(STATUS "cppcheck found: ${CPPCHECK_EXE}") else() message(SEND_ERROR "cppcheck not found!") endif() endif() # Only pass the options if the tool was found if(CPPCHECK_EXE) set(CMAKE_C_CPPCHECK ${CPPCHECK_EXE} ${ARGN} CACHE STRING "" FORCE) endif() endmacro() # Clears include-what-you-use so it is not called on any following defined code # compilation. It can be re-enabled by another call to `cppcheck()`. macro(reset_cppcheck) set(CMAKE_C_CPPCHECK "" CACHE STRING "" FORCE) endmacro() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/solaris2.x���������������������������������������������������������������������0000664�0000000�0000000�00000012266�15030617045�0016232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- shell-script -*- # # This file is part of the HDF4 build script. It is processed shortly # after configure starts and defines, among other things, flags for # the various compilation modes. # Choosing C and Fortran Compilers # -------------------------------------- # # The user should be able to specify the compiler by setting the CC # and F77 environment variables to the name of the compiler and any # switches it requires for proper operation. If CC is unset then this # script may set it. If CC is unset by time this script completes then # configure will try `gcc' and `cc' in that order (perhaps some others # too). # # Note: Code later in this file may depend on the value of $CC_BASENAME # in order to distinguish between different compilers when # deciding which compiler command-line switches to use. This # variable is set based on the incoming value of $CC and is only # used within this file. if test "X-$CC" = "X-"; then CC=cc CC_BASENAME=cc fi if test "X-$F77" = "X-"; then F77=f77 F77_BASENAME=f77 fi # C and Fortran Compiler and Preprocessor Flags # --------------------------------------------------- # # - Flags that end with `_CFLAGS' are always passed to the C compiler. # - Flags that end with `_FFLAGS' are always passed to the Fortran # compiler. # - Flags that end with `_CPPFLAGS' are passed to the C compiler # when compiling but not when linking. # # DEBUG_CFLAGS # DEBUG_FFLAGS # DEBUG_CPPFLAGS - Flags to pass to the compiler to create a # library suitable for use with debugging # tools. Usually this list will exclude # optimization switches (like `-O') and include # switches that turn on symbolic debugging support # (like `-g'). # # PROD_CFLAGS # PROD_FFLAGS # PROD_CPPFLAGS - Flags to pass to the compiler to create a # production version of the library. These # usually exclude symbolic debugging switches (like # `-g') and include optimization switches (like # `-O'). # # PROFILE_CFLAGS # PROFILE_FFLAGS # PROFILE_CPPFLAGS- Flags to pass to the compiler to create a # library suitable for performance testing (like # `-pg'). This may or may not include debugging or # production flags. # # FFLAGS # CFLAGS - Flags can be added to these variable which # might already be partially initialized. These # flags will always be passed to the compiler and # should include switches to turn on full warnings. # # WARNING: flags do not have to be added to the CFLAGS # or FFLAGS variable if the compiler is the GNU gcc # and g77 compiler. # # FFLAGS and CFLAGS should contain *something* or else # configure will probably add `-g'. For most systems # this isn't a problem but some systems will disable # optimizations in favor of the `-g'. The configure # script will remove the `-g' flag in production mode # only. # # These flags should be set according to the compiler being used. # There are two ways to check the compiler. You can try using `-v' or # `--version' to see if the compiler will print a version string. You # can use the value of $FOO_BASENAME which is the base name of the # first word in $FOO, where FOO is either CC or F77 (note that the # value of CC may have changed above). case $CC_BASENAME in gcc) CFLAGS="$CFLAGS -ansi" DEBUG_CFLAGS="-g " DEBUG_CPPFLAGS= PROD_CFLAGS="-O3 " PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; *) CFLAGS="$CFLAGS" DEBUG_CFLAGS="-g -v" DEBUG_CPPFLAGS= PROD_CFLAGS="-xO2" PROD_CPPFLAGS= PROFILE_CFLAGS="-pg" PROFILE_CPPFLAGS= ;; esac case $F77_BASENAME in g77) FFLAGS="$FFLAGS -Wsign-compare" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O3 -fomit-frame-pointer" PROFILE_FFLAGS="-pg" ;; *) FFLAGS="$FFLAGS -O" DEBUG_FFLAGS="-g" PROD_FFLAGS="-O" PROFILE_FFLAGS="-pg" ;; esac # compiler version strings case $CC in *cc*) cc_version_info=`$CC $CFLAGS $H4_CFLAGS -V 2>&1 | grep 'Sun' |\ sed 's/.*\(Sun.*Sun.*\)/\1 /'` ;; *) echo "No match to get cc_version_info for $CC" ;; esac echo "C compiler '$CC' is $cc_version_info" case $F77 in # The PGI and Intel compilers are automatically detected below *f90*|*f77*) fc_version_info=`$F77 $FFLAGS $H4_FFLAGS -V 2>&1 | grep 'Sun' |\ sed 's/.*\(Sun.*Sun.*\)/\1 /'` ;; *) echo "No match to get fc_version_info for $F77" ;; esac echo "Fortran compiler '$F77' is $fc_version_info" # Overriding Configure Tests # -------------------------- # # Values for overriding configuration tests when cross compiling. # Set this to `yes' or `no' depending on whether the target is big # endian or little endian. #ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016254�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/aarch64.cmake��������������������������������������������������������0000664�0000000�0000000�00000001554�15030617045�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������set(TOOLCHAIN_PREFIX aarch64-linux-gnu) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) #set (CMAKE_ANDROID_ARCH_ABI x86_64) #set (CMAKE_ANDROID_STANDALONE_TOOLCHAIN ${ANDROID_NDK}/build/cmake/android.toolchain.cmake) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) #set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_CROSSCOMPILING_EMULATOR "qemu-aarch64-static;-L;/usr/aarch64-linux-gnu/" CACHE FILEPATH "Path to the emulator for the target system.") include_directories(/usr/${TOOLCHAIN_PREFIX}/include) ����������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/build32.cmake��������������������������������������������������������0000664�0000000�0000000�00000006731�15030617045�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������if (WIN32) set (CMAKE_SYSTEM_NAME Windows) set (CMAKE_GENERATOR_PLATFORM "x86") elseif(APPLE) set (CMAKE_OSX_ARCHITECTURES "i386") elseif(MINGW) set (CMAKE_SYSTEM_NAME Windows) set (TOOLCHAIN_PREFIX i686-w64-mingw32) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags") set (LIB32 /usr/lib) # Fedora if (EXISTS "/usr/lib32") set (LIB32 /usr/lib32) # Arch, Solus endif () set (CMAKE_SYSTEM_LIBRARY_PATH ${LIB32} CACHE STRING "system library search path" FORCE) set (CMAKE_LIBRARY_PATH ${LIB32} CACHE STRING "library search path" FORCE) # this is probably unlikely to be needed, but just in case set (CMAKE_EXE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "executable linker flags" FORCE) set (CMAKE_SHARED_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "shared library linker flags" FORCE) set (CMAKE_MODULE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "module linker flags" FORCE) # on Fedora and Arch and similar, point pkgconfig at 32 bit .pc files. We have # to include the regular system .pc files as well (at the end), because some # are not always present in the 32 bit directory if (EXISTS "${LIB32}/pkgconfig") set (ENV{PKG_CONFIG_LIBDIR} ${LIB32}/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig) endif () set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR wine) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") else () set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags") set (LIB32 /usr/lib) # Fedora if (EXISTS "/usr/lib32") set (LIB32 /usr/lib32) # Arch, Solus endif () set (CMAKE_SYSTEM_LIBRARY_PATH ${LIB32} CACHE STRING "system library search path" FORCE) set (CMAKE_LIBRARY_PATH ${LIB32} CACHE STRING "library search path" FORCE) # this is probably unlikely to be needed, but just in case set (CMAKE_EXE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "executable linker flags" FORCE) set (CMAKE_SHARED_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "shared library linker flags" FORCE) set (CMAKE_MODULE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "module linker flags" FORCE) # on Fedora and Arch and similar, point pkgconfig at 32 bit .pc files. We have # to include the regular system .pc files as well (at the end), because some # are not always present in the 32 bit directory if (EXISTS "${LIB32}/pkgconfig") set (ENV{PKG_CONFIG_LIBDIR} ${LIB32}/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig) endif () # where is the target environment set (CMAKE_FIND_ROOT_PATH ${LIB32}) # search for programs in the build host directories set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif () ���������������������������������������hdf4-hdf4.3.1/config/toolchain/clang.cmake����������������������������������������������������������0000664�0000000�0000000�00000000667�15030617045�0020353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "clang") if(WIN32) set (CMAKE_C_COMPILER clang-cl) set (CMAKE_CXX_COMPILER clang-cl) else() set (CMAKE_C_COMPILER clang) set (CMAKE_CXX_COMPILER clang++) #set (CMAKE_Fortran_COMPILER flang) endif() set (CMAKE_EXPORT_COMPILE_COMMANDS ON) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") �������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/crayle.cmake���������������������������������������������������������0000664�0000000�0000000�00000000417�15030617045�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The following line will use cross-compiling set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment") set (CMAKE_C_COMPILER cc) set (CMAKE_Fortran_COMPILER ftn) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/gcc.cmake������������������������������������������������������������0000664�0000000�0000000�00000000505�15030617045�0020012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following line and the correct system name to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "GCC") set (CMAKE_C_COMPILER cc) set (CMAKE_CXX_COMPILER c++) set (CMAKE_Fortran_COMPILER gfortran) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/icc.cmake������������������������������������������������������������0000664�0000000�0000000�00000000437�15030617045�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_COMPILER_VENDOR "intel") set(CMAKE_C_COMPILER icc) set(CMAKE_CXX_COMPILER icpc) set(CMAKE_Fortran_COMPILER ifort) # the following is used if cross-compiling set(CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/intel.cmake����������������������������������������������������������0000664�0000000�0000000�00000000525�15030617045�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_COMPILER_VENDOR "intel") set(CMAKE_C_COMPILER icx) if(WIN32) set(CMAKE_CXX_COMPILER icx) else() set(CMAKE_CXX_COMPILER icpx) endif() set(CMAKE_Fortran_COMPILER ifx) # the following is used if cross-compiling set(CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/mingw64.cmake��������������������������������������������������������0000664�0000000�0000000�00000001204�15030617045�0020546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������set (TOOLCHAIN_PREFIX x86_64-w64-mingw32) set (CMAKE_SYSTEM_NAME Windows) set (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set (CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set (CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) set (CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR wine64) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/config/toolchain/pgi.cmake������������������������������������������������������������0000664�0000000�0000000�00000000445�15030617045�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Uncomment the following to use cross-compiling #set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_COMPILER_VENDOR "PGI") set (CMAKE_C_COMPILER pgcc) set (CMAKE_CXX_COMPILER pgc++) set (CMAKE_Fortran_COMPILER pgf90) # the following is used if cross-compiling set (CMAKE_CROSSCOMPILING_EMULATOR "") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/configure�����������������������������������������������������������������������������0000775�0000000�0000000�00003004360�15030617045�0014744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for HDF 4.3.1. # # Report bugs to <help@hdfgroup.org>. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 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="as_nop=: if test \${ZSH_VERSION+y} && (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 \$as_nop 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 \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and help@hdfgroup.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: 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_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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=`printf "%s\n" "$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 || printf "%s\n" 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_nop 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_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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 </dev/null exec 6>&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='HDF' PACKAGE_TARNAME='hdf' PACKAGE_VERSION='4.3.1' PACKAGE_STRING='HDF 4.3.1' PACKAGE_BUGREPORT='help@hdfgroup.org' PACKAGE_URL='' ac_unique_file="hdf/src/atom.c" ac_default_prefix=`pwd`/hdf4 # Factoring default headers for most tests. ac_includes_default="\ #include <stddef.h> #ifdef HAVE_STDIO_H # include <stdio.h> #endif #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #ifdef HAVE_STRING_H # include <string.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS DEPRECATED_SYMBOLS BUILD_JAVA_CONDITIONAL_FALSE BUILD_JAVA_CONDITIONAL_TRUE JAVA_VERSION F77_VERSION CC_VERSION HDF_BUILD_SHARED_FALSE HDF_BUILD_SHARED_TRUE SETX CONFIG_MODE CONFIG_USER CONFIG_DATE H4_VERSION BUILD_SHARED_SZIP_CONDITIONAL_FALSE BUILD_SHARED_SZIP_CONDITIONAL_TRUE SZIP_INFO LL_PATH SZIP_HAS_ENCODER USE_COMP_SZIP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL BUILD_DOXYGEN_CONDITIONAL_FALSE BUILD_DOXYGEN_CONDITIONAL_TRUE DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE GENERATE_LATEX DX_PDFLATEX DX_FLAG_pdf DX_EGREP DX_DVIPS DX_MAKEINDEX DX_LATEX DX_FLAG_ps DX_FLAG_html GENERATE_CHI DX_FLAG_chi GENERATE_HTMLHELP GENERATE_HTML HHC_PATH DX_HHC DX_FLAG_chm GENERATE_XML DX_FLAG_xml GENERATE_RTF DX_FLAG_rtf GENERATE_MAN DX_FLAG_man DOT_PATH HAVE_DOT DX_DOT DX_FLAG_dot PERL_PATH DX_PERL DX_DOXYGEN DX_FLAG_doc PROJECT SRCDIR DX_ENV DX_DOCDIR DX_CONFIG DX_PROJECT DOXYGEN_PREDEFINED DOXYGEN_STRIP_FROM_INC_PATH DOXYGEN_STRIP_FROM_PATH DOXYGEN_SEARCHENGINE_URL DOXYGEN_EXTERNAL_SEARCH DOXYGEN_SERVER_BASED_SEARCH DOXYGEN_TAG_FILE DOXYGEN_HTML_EXTRA_FILES DOXYGEN_HTML_EXTRA_STYLESHEET DOXYGEN_HTML_FOOTER DOXYGEN_HTML_HEADER DOXYGEN_LAYOUT_FILE DOXYGEN_EXAMPLES_DIRECTORY DOXYGEN_OUTPUT_DIRECTORY DOXYGEN_MACRO_EXPANSION DOXYGEN_OPTIMIZE_OUTPUT_FOR_C DOXYGEN_INPUT_DIRECTORY DOXYGEN_PROJECT_BRIEF DOXYGEN_PROJECT_LOGO DOXYGEN_INCLUDE_ALIASES DOXYGEN_DIR DOXYGEN_VERSION_STRING DOXYGEN_PACKAGE HDF4_DOXY_WARNINGS HDF4_DOXYGEN LT_STATIC_EXEC STATIC_EXEC enable_static enable_shared SHARED_EXTENSION STATIC_SHARED TBL NEQN DIFF AR LN_S JAVA_PATH_NAME TESTS_JUNIT JAVA_JUNIT JUNIT _ACJNI_JAVAC JAVADOC JAR JAVAC JAVA JAVAFLAGS JAVACFLAGS JAVAPREFIX H4_CLASSPATH HDF_JAVA H4_JAVAFLAGS H4_JAVACFLAGS BUILD_FORTRAN HDF_BUILD_FORTRAN_FALSE HDF_BUILD_FORTRAN_TRUE FLIBS ac_ct_F77 FFLAGS F77 CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC BUILD_NETCDF_TOOLS HDF_BUILD_NETCDF_TOOLS_FALSE HDF_BUILD_NETCDF_TOOLS_TRUE BUILD_NETCDF HDF_BUILD_NETCDF_FALSE HDF_BUILD_NETCDF_TRUE TEST_FORTRAN_NETCDF UNAME_INFO AR_FLAGS JNIFLAGS host_os host_vendor host_cpu host build_os build_vendor build_cpu build MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE 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 runstatedir 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 am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_netcdf enable_netcdf_tools enable_dependency_tracking enable_fortran enable_java with_java_prefix with_javac_flags with_java_flags enable_doxygen enable_doxygen_errors enable_doxygen_doc enable_doxygen_dot enable_doxygen_man enable_doxygen_rtf enable_doxygen_xml enable_doxygen_chm enable_doxygen_chi enable_doxygen_html enable_doxygen_ps enable_doxygen_pdf enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_static_exec with_fnord with_zlib with_jpeg with_szlib enable_production enable_deprecated_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP F77 FFLAGS DOXYGEN_PAPER_SIZE' # 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' runstatedir='${localstatedir}/run' 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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=`printf "%s\n" "$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=`printf "%s\n" "$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. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$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" ;; *) printf "%s\n" "$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 runstatedir 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 || printf "%s\n" 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 HDF 4.3.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] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --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/hdf] --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 HDF 4.3.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-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-netcdf HDF4 builds replacement netCDF 2.3.2 API calls that are exported (e.g., ncopen()). Enabling this option uses the original netCDF names when building these functions. Disable prefixes them with 'sd_' to avoid name clashes. This does NOT affect building the HDF4-built netCDF tools ncdump and ncgen, nor does it disable any HDF4 functionality - this option only affects API call names. Disabling this option disables building the netCDF Fortran wrappers (they will not be built with either the original or sd_ prefixed names). [default=yes (HDF4-built netCDF API calls will be exported undecorated)] --enable-netcdf-tools Build HDF4 versions of NetCDF tools (ncgen, ncdump) [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-fortran Build Fortran into library. This interface is unsafe on 64-bit systems. [default=no] --enable-java Compile the Java JNI interface [default=no] --enable-doxygen Compile the HDF4 doxygen files [default=no] --enable-doxygen-errors Error on HDF4 doxygen warnings [default=yes] --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation --disable-doxygen-man don't generate doxygen manual pages --enable-doxygen-rtf generate doxygen RTF documentation --enable-doxygen-xml generate doxygen XML documentation --enable-doxygen-chm generate doxygen compressed HTML help documentation --enable-doxygen-chi generate doxygen separate compressed HTML help index file --disable-doxygen-html don't generate doxygen plain HTML documentation --enable-doxygen-ps generate doxygen PostScript documentation --enable-doxygen-pdf generate doxygen PDF documentation --enable-shared[=PKGS] build shared libraries [default=no] --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) --enable-static-exec Install only statically linked executables [default=no] --enable-production Determines how to run the compiler. --enable-deprecated-symbols Enable deprecated public API symbols [default=yes] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-java-prefix=PFX prefix where Java runtime is installed (optional) --with-javac-flags=FLAGS flags to pass to the Java compiler (optional) --with-java-flags=FLAGS flags to pass to the Java VM (optional) --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). For the following --with-xxx options, you can specify where the header files and libraries are in two different ways: --with-xxx=INC,LIB - Specify individually the include directory and library directory separated by a comma --with-xxx=DIR - Specify only the directory which contains the include/ and lib/ subdirectories --with-zlib=DIR Use zlib library [default=yes] --with-jpeg=DIR Use jpeg library [default=yes] --with-szlib=DIR Use szlib library [default=no] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive 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 <help@hdfgroup.org>. _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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 printf "%s\n" "$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 HDF configure 4.3.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 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_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 conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_f77_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$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_f77_try_compile # 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.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include <limits.h> #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_f77_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_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_nop printf "%s\n" "$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_f77_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to run 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$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_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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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_nop 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.beam conftest.$ac_ext done else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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_nop 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.beam conftest.$ac_ext done else $as_nop ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam 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 (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include <stdio.h> #include <stdlib.h> #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { 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 <conftest.val; ac_retval=0 else $as_nop ac_retval=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext rm -f conftest.val fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 HDF $as_me 4.3.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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=`printf "%s\n" "$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=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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 printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$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 printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include <stddef.h> #include <stdarg.h> struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*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 do not provoke an error unfortunately, instead are silently treated as an "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 is necessary to write \x00 == 0 to get something that is 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 **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/bin" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$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. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" 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,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-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 ac_config_headers="$ac_config_headers hdf/src/h4config.h" ## AM_INIT_AUTOMAKE takes a list of options that should be applied to ## every Makefile.am when automake is run. ## ## NOTE: Don't add subdir-objects here just yet. Modern Automake will ## complain that it's missing, but adding it causes failures on ## older systems. am__api_version='1.16' # 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. 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+y}; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$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' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "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=`printf "%s\n" "$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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 ('*'coreutils) '* | \ 'BusyBox '* | \ '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+y}; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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 "`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='hdf' VERSION='4.3.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} 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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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='\' # use silent rules where available - automake 1.11 ## AM_MAINTAINER_MODE determines the behavior of "rebuild rules" that contain ## dependencies for Makefile.in files, configure, config.h, etc. If ## AM_MAINTAINER_MODE is enabled, these files will be rebuilt if out of date. ## When disabled, the autotools build files can get out of sync and the build ## system will not complain or try to regenerate downstream files. ## ## The AM_MAINTAINER_MODE macro also determines whether the ## --(enable|disable)-maintainer-mode configure option is available. When the ## macro is present, with or without a parameter, the option will be added ## to the generated configure script. ## ## In summary: ## ## AM_MAINTAINER_MODE([enable]) ## - Build dependencies ON by default ## - Configure option exists ## ## AM_MAINTAINER_MODE([disable]) ## - Build dependencies OFF by default ## - Configure option exists ## ## AM_MAINTAINER_MODE ## - Build dependencies OFF by default ## - Configure option exists ## ## No AM_MAINTAINER_MODE macro ## - Build dependencies ON by default ## - No configure option to control build dependencies ## ## The biggest concern for us is that version control systems like git ## usually don't preserve dependencies between timestamps, so the build ## system will often think that upstream build files like Makefile.am are ## dirty and that rebuilding needs to occur when it doesn't. This is a problem ## in release branches where we provide the autotools-generated files. Users ## who don't have autoconf, automake, etc. will then have difficulty building ## release branches checked out from git. ## ## By default, maintainer mode is enabled in development branches and disabled ## in release branches. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ## ---------------------------------------------------------------------- ## Set prefix default (install directory) to a directory in the build area. ## This allows multiple src-dir builds within one host. ## Run post processing on files created by configure. ## * src/h4config.h ## * libhdf4.settings ## ## ([[:blank:]])* matches and captures any whitespace and drops it ## where the \1 is located on the right-hand side so the indenting ## doesn't change. ([[:blank:]] is POSIX-compliant \s) ac_config_commands="$ac_config_commands h4config" ## It's possible to configure for a host other than the one on which ## configure is currently running by using the --host=foo flag. ## For machines on which HDF4 is often configured, it can be convenient ## to specify the name of the machine rather than its canonical type. ## ## There are currently no hosts, but if there were they would be ## listed by hostname and the alias would point to a file in ## the config directory: ## ##case $host_alias in ## <some host>) ## host_alias=<config file in config directory> ## ;; ##esac # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$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 ## ## FUTURE H4_XXFLAGS GO HERE ## ## ---------------------------------------------------------------------- ## Dump all shell variables values. ## { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking shell variables initial values" >&5 printf %s "checking shell variables initial values... " >&6; } set >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } ## ---------------------------------------------------------------------- ## Save system information for the library settings file. ## UNAME_INFO=`uname -a` ## ---------------------------------------------------------------------- ## Some platforms have broken basename, and/or xargs programs. Check ## that it actually does what it's supposed to do. Catch this early ## since configure and scripts relies upon them heavily and there's ## no use continuing if it's broken. ## { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if basename works" >&5 printf %s "checking if basename works... " >&6; } BASENAME_TEST="`basename /foo/bar/baz/qux/basename_works`" if test $BASENAME_TEST != "basename_works"; then as_fn_error $? "basename program doesn't work" "$LINENO" 5 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi ## xargs basename used in configure to get the CC_BASENAME value { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if xargs works" >&5 printf %s "checking if xargs works... " >&6; } XARGS_TEST="`echo /foo/bar/baz/qux/xargs_works | xargs basename`" if test $XARGS_TEST != "xargs_works"; then as_fn_error $? "xargs program doesn't work" "$LINENO" 5 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi ## ---------------------------------------------------------------------- ## Check that the cache file was build on the same host as what we're ## running on now. ## { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cached host" >&5 printf %s "checking for cached host... " >&6; } if test ${hdf4_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop hdf4_cv_host="none" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hdf4_cv_host" >&5 printf "%s\n" "$hdf4_cv_host" >&6; }; if test $hdf4_cv_host = "none"; then hdf4_cv_host=$host elif test $hdf4_cv_host != $host; then as_fn_error $? " The config.cache file was generated on $hdf4_cv_host but this is $host. Please remove that file and try again. config.cache file is invalid" "$LINENO" 5 fi ## Source any special files that we need. These files normally aren't ## present but can be used by the maintainers to fine tune things like ## turning on debug or profiling flags for the compiler. The search order ## is: ## ## CPU-VENDOR-OS ## VENDOR-OS ## CPU-OS ## CPU-VENDOR ## OS ## VENDOR ## CPU ## ## If the `OS' ends with a version number then remove it. For instance, ## `freebsd3.1' would become `freebsd' ## case "$host_os" in aix4.*) host_os_novers="aix4.x" ;; aix5.*) host_os_novers="aix5.x" ;; darwin10.*) host_os_novers="darwin10.x" ;; darwin11.*) host_os_novers="darwin11.x" ;; darwin12.*) host_os_novers="darwin12.x" ;; freebsd*) host_os_novers="freebsd" ;; solaris2.*) host_os_novers="solaris2.x" ;; *) host_os_novers="$host_os" ;; esac host_config="none" for f in $host_cpu-$host_vendor-$host_os \ $host_cpu-$host_vendor-$host_os_novers \ $host_vendor-$host_os \ $host_vendor-$host_os_novers \ $host_cpu-$host_os \ $host_cpu-$host_os_novers \ $host_cpu-$host_vendor \ $host_os \ $host_os_novers \ $host_vendor \ $host_cpu ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for config $f" >&5 printf %s "checking for config $f... " >&6; } if test -f "$srcdir/config/$f"; then host_config=$srcdir/config/$f { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 printf "%s\n" "found" >&6; } break fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } done if test "X$host_config" != "Xnone"; then CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`" F77_BASENAME="`echo $F77 | cut -f1 -d' ' | xargs basename 2>/dev/null`" . $host_config fi ## ====================================================================== ## Checks for netCDF-2.3.2 support ## ====================================================================== # NOTE! We disable Fortran netCDF APIs and their testing when # --disable-netcdf is used to avoid conflicts # Define a proper variable to be used in mfhdf/testfortran.sh.in to run # the netCDF Fortran APIs test program "ftest" TEST_FORTRAN_NETCDF="yes" # Check whether --enable-netcdf was given. if test ${enable_netcdf+y} then : enableval=$enable_netcdf; else $as_nop enableval="yes" fi case "$enableval" in yes) BUILD_NETCDF="yes" printf "%s\n" "#define HAVE_NETCDF 1" >>confdefs.h ;; no) BUILD_NETCDF="no" TEST_FORTRAN_NETCDF="no" ;; esac if test "X$BUILD_NETCDF" = "Xyes"; then HDF_BUILD_NETCDF_TRUE= HDF_BUILD_NETCDF_FALSE='#' else HDF_BUILD_NETCDF_TRUE='#' HDF_BUILD_NETCDF_FALSE= fi # It is also possible to disable building the netCDF tools ncdump and ncgen. # Some users may want to do this since our tools will conflict with netCDF's # if they are installed. This will also disable building nctest. # Check whether --enable-netcdf-tools was given. if test ${enable_netcdf_tools+y} then : enableval=$enable_netcdf_tools; else $as_nop enableval="yes" fi case "$enableval" in yes) BUILD_NETCDF_TOOLS="yes" ;; no) BUILD_NETCDF_TOOLS="no" ;; esac if test "X$BUILD_NETCDF_TOOLS" = "Xyes"; then HDF_BUILD_NETCDF_TOOLS_TRUE= HDF_BUILD_NETCDF_TOOLS_FALSE='#' else HDF_BUILD_NETCDF_TOOLS_TRUE='#' HDF_BUILD_NETCDF_TOOLS_FALSE= fi ## ====================================================================== ## Checks for programs ## ====================================================================== 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$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 (void) { ; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$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+y} && 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 $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$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 <stdio.h> int main (void) { 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$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_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} 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="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "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 test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. # 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. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$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. # 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. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # 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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 ## ---------------------------------------------------------------------- ## Check if they would like the Fortran interface compiled ## ## This interface is UNSAFE on 64-bit systems as the interface will ## attempt to store pointers in 32-bit integers. ## # Check whether --enable-fortran was given. if test ${enable_fortran+y} then : enableval=$enable_fortran; else $as_nop enableval="no" fi case "$enableval" in yes) BUILD_FORTRAN="yes" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_F77+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_F77="$ac_tool_prefix$ac_prog" printf "%s\n" "$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 F77=$ac_cv_prog_F77 if test -n "$F77"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 printf "%s\n" "$F77" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_F77+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_F77="$ac_prog" printf "%s\n" "$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_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 printf "%s\n" "$ac_ct_F77" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran 77" >&5 printf %s "checking whether the compiler supports GNU Fortran 77... " >&6; } if test ${ac_cv_f77_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 printf "%s\n" "$ac_cv_f77_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+y} ac_save_FFLAGS=$FFLAGS FFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 printf %s "checking whether $F77 accepts -g... " >&6; } if test ${ac_cv_prog_f77_g+y} then : printf %s "(cached) " >&6 else $as_nop FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : ac_cv_prog_f77_g=yes else $as_nop ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 printf "%s\n" "$ac_cv_prog_f77_g" >&6; } if test $ac_test_FFLAGS; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= 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 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 printf %s "checking how to get verbose linking output from $F77... " >&6; } if test ${ac_cv_prog_f77_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 printf "%s\n" "$ac_cv_prog_f77_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 printf %s "checking for Fortran 77 libraries of $F77... " >&6; } if test ${ac_cv_f77_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 printf "%s\n" "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_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 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 printf %s "checking for dummy main to link with Fortran 77 libraries... " >&6; } if test ${ac_cv_f77_dummy_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN 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 # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else $as_nop ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_f77_dm_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 printf "%s\n" "$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown then : if test $F77_DUMMY_MAIN != none; then printf "%s\n" "#define F77_DUMMY_MAIN $F77_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails 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 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 printf %s "checking for Fortran 77 name-mangling scheme... " >&6; } if test ${ac_cv_f77_mangling+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" 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_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" 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. */ char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac 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_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" 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. */ char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 printf "%s\n" "$ac_cv_f77_mangling" >&6; } 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_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac 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$F77" = "X"; then BUILD_FORTRAN="no" fi ;; no) BUILD_FORTRAN="no" F77="no" ;; esac if test "X$BUILD_FORTRAN" = "Xyes"; then HDF_BUILD_FORTRAN_TRUE= HDF_BUILD_FORTRAN_FALSE='#' else HDF_BUILD_FORTRAN_TRUE='#' HDF_BUILD_FORTRAN_FALSE= fi ## ------------------------------------------------------------------------- ## Build static libraries by default. Furthermore, fortran shared libraries ## are unsupported. Disallow a user from enabling both shared libraries and ## fortran. if test "X${enable_shared}" != "Xyes"; then enable_shared="no" fi if test "X${enable_shared}" = "Xyes"; then if test "X${BUILD_FORTRAN}" = "Xyes"; then as_fn_error $? "Cannot build shared fortran libraries. Please configure with --disable-fortran flag." "$LINENO" 5 fi fi ## ---------------------------------------------------------------------- ## Check if they would like the Java native interface (JNI) compiled ## ## This needs to be exposed for the library info file even if Java is disabled. ## Default is no Java HDF_JAVA=no H4_CLASSPATH="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if Java JNI interface enabled" >&5 printf %s "checking if Java JNI interface enabled... " >&6; } # Check whether --enable-java was given. if test ${enable_java+y} then : enableval=$enable_java; HDF_JAVA=$enableval fi if test "X$HDF_JAVA" = "Xyes"; then if test "X${enable_shared}" != "Xno"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } if test "X$CLASSPATH" = "X"; then H4_CLASSPATH=".:$srcdir/java/lib" else H4_CLASSPATH=".:$CLASSPATH:$srcdir/java/lib" fi ## Checks for programs. # Check whether --with-java-prefix was given. if test ${with_java_prefix+y} then : withval=$with_java_prefix; fi # Check whether --with-javac-flags was given. if test ${with_javac_flags+y} then : withval=$with_javac_flags; fi # Check whether --with-java-flags was given. if test ${with_java_flags+y} then : withval=$with_java_flags; fi JAVAPREFIX=$with_java_prefix JAVACFLAGS=$with_javac_flags JAVAFLAGS=$with_java_flags H4_JAVACFLAGS=$JAVACFLAGS H4_JAVAFLAGS=$JAVAFLAGS if test "x$JAVAPREFIX" = x then : test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVAC="$ac_prog" printf "%s\n" "$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 JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done else $as_nop test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $JAVAPREFIX/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVAC="$ac_prog" printf "%s\n" "$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 JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done fi test "x$JAVAC" = x && as_fn_error $? "no acceptable Java compiler found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5 printf %s "checking if $JAVAC works... " >&6; } if test ${ac_cv_prog_javac_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* #line 6718 "configure" */ public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5 echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5 printf "%s\n" "$ac_cv_prog_javac_works" >&6; } if test "x$JAVAPREFIX" = x then : test x$JAVA = x && for ac_prog in kaffe java do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVA+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVA"; then ac_cv_prog_JAVA="$JAVA" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVA="$ac_prog" printf "%s\n" "$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 JAVA=$ac_cv_prog_JAVA if test -n "$JAVA"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 printf "%s\n" "$JAVA" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVA" && break done else $as_nop test x$JAVA = x && for ac_prog in kaffe java do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVA+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVA"; then ac_cv_prog_JAVA="$JAVA" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $JAVAPREFIX/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVA="$ac_prog" printf "%s\n" "$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 JAVA=$ac_cv_prog_JAVA if test -n "$JAVA"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 printf "%s\n" "$JAVA" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVA" && break done fi test x$JAVA = x && as_fn_error $? "no acceptable Java virtual machine found in \$PATH" "$LINENO" 5 if test x$ac_cv_prog_javac_works = xno; then as_fn_error $? "Cannot compile java source. $JAVAC does not work properly" "$LINENO" 5 fi if test x$ac_cv_prog_javac_works = x; then if test "x$JAVAPREFIX" = x then : test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVAC="$ac_prog" printf "%s\n" "$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 JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done else $as_nop test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $JAVAPREFIX/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVAC="$ac_prog" printf "%s\n" "$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 JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done fi test "x$JAVAC" = x && as_fn_error $? "no acceptable Java compiler found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5 printf %s "checking if $JAVAC works... " >&6; } if test ${ac_cv_prog_javac_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* #line 6957 "configure" */ public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5 echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5 printf "%s\n" "$ac_cv_prog_javac_works" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVA works" >&5 printf %s "checking if $JAVA works... " >&6; } if test ${ac_cv_prog_java_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class TEST=Test cat << \EOF > $JAVA_TEST /* [#]line 6992 "configure" */ public class Test { public static void main (String args[]) { System.exit (0); } } EOF if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } && test -s $CLASS_TEST; then : else echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5 fi if { ac_try='$JAVA -classpath . $JAVAFLAGS $TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_java_works=yes else echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 as_fn_error $? "The Java VM $JAVA failed (see config.log, check the CLASSPATH?)" "$LINENO" 5 fi rm -f $JAVA_TEST $CLASS_TEST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_java_works" >&5 printf "%s\n" "$ac_cv_prog_java_works" >&6; } if test "x$JAVAPREFIX" = x then : test "x$JAR" = x && for ac_prog in jar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAR"; then ac_cv_prog_JAR="$JAR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAR="$ac_prog" printf "%s\n" "$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 JAR=$ac_cv_prog_JAR if test -n "$JAR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 printf "%s\n" "$JAR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAR" && break done else $as_nop test "x$JAR" = x && for ac_prog in jar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAR"; then ac_cv_prog_JAR="$JAR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $JAVAPREFIX/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAR="$ac_prog" printf "%s\n" "$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 JAR=$ac_cv_prog_JAR if test -n "$JAR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 printf "%s\n" "$JAR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAR" && break done fi test "x$JAR" = x && as_fn_error $? "no acceptable jar program found in \$PATH" "$LINENO" 5 if test "x$JAVAPREFIX" = x then : test "x$JAVADOC" = x && for ac_prog in javadoc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVADOC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVADOC"; then ac_cv_prog_JAVADOC="$JAVADOC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVADOC="$ac_prog" printf "%s\n" "$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 JAVADOC=$ac_cv_prog_JAVADOC if test -n "$JAVADOC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVADOC" >&5 printf "%s\n" "$JAVADOC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVADOC" && break done else $as_nop test "x$JAVADOC" = x && for ac_prog in javadoc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVADOC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVADOC"; then ac_cv_prog_JAVADOC="$JAVADOC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $JAVAPREFIX/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_JAVADOC="$ac_prog" printf "%s\n" "$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 JAVADOC=$ac_cv_prog_JAVADOC if test -n "$JAVADOC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVADOC" >&5 printf "%s\n" "$JAVADOC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVADOC" && break done fi test "x$JAVADOC" = x && as_fn_error $? "no acceptable javadoc generator found in \$PATH" "$LINENO" 5 ## Find the include directories needed for building JNI code JNI_INCLUDE_DIRS="" if test "x$JAVA_HOME" != x; then _JTOPDIR="$JAVA_HOME" else if test "x$JAVAC" = x; then JAVAC=javac fi # Extract the first word of "$JAVAC", so it can be a program name with args. set dummy $JAVAC; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path__ACJNI_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop case $_ACJNI_JAVAC in [\\/]* | ?:[\\/]*) ac_cv_path__ACJNI_JAVAC="$_ACJNI_JAVAC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path__ACJNI_JAVAC="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="no" ;; esac fi _ACJNI_JAVAC=$ac_cv_path__ACJNI_JAVAC if test -n "$_ACJNI_JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_ACJNI_JAVAC" >&5 printf "%s\n" "$_ACJNI_JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$_ACJNI_JAVAC" = xno; then as_fn_error $? "cannot find JDK; try setting \$JAVAC or \$JAVA_HOME" "$LINENO" 5 fi # find the include directory relative to the javac executable _cur=""$_ACJNI_JAVAC"" while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking symlink for $_cur" >&5 printf %s "checking symlink for $_cur... " >&6; } _slink=`ls -ld "$_cur" | sed 's/.* -> //'` case "$_slink" in /*) _cur="$_slink";; # 'X' avoids triggering unwanted echo options. *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[^/]*$::'`"$_slink";; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_cur" >&5 printf "%s\n" "$_cur" >&6; } done _ACJNI_FOLLOWED="$_cur" _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[^/]*$::'` fi case "$host_os" in darwin*) # Apple Java headers are inside the Xcode bundle. major_macos_version=$(sw_vers -productVersion | sed -n -e 's/^\([0-9]*\).[0-9]*.[0-9]*/\1/p') if [ "$major_macos_version" -gt "10" ]; then _JTOPDIR="$(/usr/libexec/java_home)" _JINC="$_JTOPDIR/include" else macos_version=$(sw_vers -productVersion | sed -n -e 's/^[0-9]*.\([0-9]*\).[0-9]*/\1/p') if [ "$macos_version" -gt "7" ]; then _JTOPDIR="$(xcrun --show-sdk-path)/System/Library/Frameworks/JavaVM.framework" _JINC="$_JTOPDIR/Headers" else _JTOPDIR="/System/Library/Frameworks/JavaVM.framework" _JINC="$_JTOPDIR/Headers" fi fi ;; *) _JINC="$_JTOPDIR/include";; esac printf "%s\n" "$as_me:${as_lineno-$LINENO}: _JTOPDIR=$_JTOPDIR" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: _JINC=$_JINC" >&5 # On Mac OS X 10.6.4, jni.h is a symlink: # /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h # -> ../../CurrentJDK/Headers/jni.h. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking jni headers" >&5 printf %s "checking jni headers... " >&6; } if test ${ac_cv_jni_header_path+y} then : printf %s "(cached) " >&6 else $as_nop if test -f "$_JINC/jni.h"; then ac_cv_jni_header_path="$_JINC" JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" else _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'` if test -f "$_JTOPDIR/include/jni.h"; then ac_cv_jni_header_path="$_JTOPDIR/include" JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" else ac_cv_jni_header_path=none fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jni_header_path" >&5 printf "%s\n" "$ac_cv_jni_header_path" >&6; } # get the likely subdirectories for system specific java includes case "$host_os" in bsdi*) _JNI_INC_SUBDIRS="bsdos";; freebsd*) _JNI_INC_SUBDIRS="freebsd";; darwin*) _JNI_INC_SUBDIRS="darwin";; linux*) _JNI_INC_SUBDIRS="linux genunix";; osf*) _JNI_INC_SUBDIRS="alpha";; solaris*) _JNI_INC_SUBDIRS="solaris";; mingw*) _JNI_INC_SUBDIRS="win32";; cygwin*) _JNI_INC_SUBDIRS="win32";; *) _JNI_INC_SUBDIRS="genunix";; esac if test "x$ac_cv_jni_header_path" != "xnone"; then # add any subdirectories that are present for JINCSUBDIR in $_JNI_INC_SUBDIRS do if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR" fi done fi for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS do JNIFLAGS="$JNIFLAGS -I$JNI_INCLUDE_DIR" done ## Find junit for testing the JNI code if test "x$CLASSPATH" = x; then echo "You have no CLASSPATH, I hope it is good" else echo "You have CLASSPATH $CLASSPATH, hope it is correct" fi CLASSPATH_ENV=$H4_CLASSPATH if test ${ac_cv_prog_JUNIT+y} then : printf %s "(cached) " >&6 else $as_nop ac_var_name=`echo junit.textui.TestRunner | sed 's/\./_/g'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for junit.textui.TestRunner class" >&5 printf %s "checking for junit.textui.TestRunner class... " >&6; } if eval test \${ax_cv_class_$ac_var_name+y} then : printf %s "(cached) " >&6 else $as_nop cat << \EOF > Test.java /* #line 7417 "configure" */ import junit.textui.TestRunner; public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS Test.java' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } && test -s Test.class then eval "ac_cv_class_$ac_var_name=yes" else echo "configure: failed program was:" >&5 cat Test.java >&5 rm -f Test.java Test.class eval "ac_cv_class_$ac_var_name=no" fi rm -f Test.java Test.class eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`" HAVE_LAST_CLASS=$ac_var_val if test x$ac_var_val = xyes; then : else : fi fi eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_var_val" >&5 printf "%s\n" "$ac_var_val" >&6; } if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for junit" >&5 printf %s "checking for junit... " >&6; } if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then JUNIT="$ac_cv_prog_JUNIT" JAVA_JUNIT='$(JAVA_JUNIT)' TESTS_JUNIT='$(TESTS_JUNIT)' else JUNIT= JAVA_JUNIT= TESTS_JUNIT= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA_JUNIT" >&5 printf "%s\n" "$JAVA_JUNIT" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JAVA_HOME" >&5 printf %s "checking for JAVA_HOME... " >&6; } # We used a fake loop so that we can use "break" to exit when the result # is found. while true do # If the user defined JAVA_HOME, don't touch it. test "${JAVA_HOME+set}" = set && break # On Mac OS X 10.5 and following, run /usr/libexec/java_home to get # the value of JAVA_HOME to use. # (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html). JAVA_HOME=`/usr/libexec/java_home 2>/dev/null` test x"$JAVA_HOME" != x && break # See if we can find the java executable, and compute from there. TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1` if test x$TRY_JAVA_HOME != x; then PATH=$PATH:$TRY_JAVA_HOME/bin fi # Extract the first word of "java", so it can be a program name with args. set dummy java; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_JAVA_PATH_NAME+y} then : printf %s "(cached) " >&6 else $as_nop case $JAVA_PATH_NAME in [\\/]* | ?:[\\/]*) ac_cv_path_JAVA_PATH_NAME="$JAVA_PATH_NAME" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_JAVA_PATH_NAME="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi JAVA_PATH_NAME=$ac_cv_path_JAVA_PATH_NAME if test -n "$JAVA_PATH_NAME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA_PATH_NAME" >&5 printf "%s\n" "$JAVA_PATH_NAME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$JAVA_PATH_NAME" != x; then JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[/]bin[/]java.*/\1/"` break fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Could not compute JAVA_HOME" >&5 printf "%s\n" "$as_me: Could not compute JAVA_HOME" >&6;} break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA_HOME" >&5 printf "%s\n" "$JAVA_HOME" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else as_fn_error $? "Java requires shared libraries to be built" "$LINENO" 5 HDF_JAVA="no" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi ## ---------------------------------------------------------------------- ## Check which archiving tool to use. This needs to be done before ## the LT_INIT macro. ## if test -z "$AR"; then for ac_prog in ar xar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_prog" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done test -n "$AR" || AR=":" fi # Set the default ar flags to cr # The Automake default is to use cru and the 'u' causes ar # to emit warnings on some platforms. AR_FLAGS=cr ## Export the AR macro so that it will be placed in the libtool file ## correctly. export AR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Extract the first word of "diff", so it can be a program name with args. set dummy diff; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DIFF+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DIFF"; then ac_cv_prog_DIFF="$DIFF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_DIFF="diff -w" printf "%s\n" "$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 DIFF=$ac_cv_prog_DIFF if test -n "$DIFF"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 printf "%s\n" "$DIFF" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MAKEINFO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_MAKEINFO="makeinfo" printf "%s\n" "$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 MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 printf "%s\n" "$MAKEINFO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "neqn", so it can be a program name with args. set dummy neqn; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NEQN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NEQN"; then ac_cv_prog_NEQN="$NEQN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_NEQN="neqn" printf "%s\n" "$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 NEQN=$ac_cv_prog_NEQN if test -n "$NEQN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NEQN" >&5 printf "%s\n" "$NEQN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "tbl", so it can be a program name with args. set dummy tbl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_TBL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$TBL"; then ac_cv_prog_TBL="$TBL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_TBL="tbl" printf "%s\n" "$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 TBL=$ac_cv_prog_TBL if test -n "$TBL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TBL" >&5 printf "%s\n" "$TBL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi STATIC_EXEC=no ## ---------------------------------------------------------------------- ## Check if they would like to enable building doxygen files ## ## This needs to be exposed for the library info file. ## Default is to not build DOXYGEN HDF4_DOXYGEN=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if building doxygen is enabled" >&5 printf %s "checking if building doxygen is enabled... " >&6; } # Check whether --enable-doxygen was given. if test ${enable_doxygen+y} then : enableval=$enable_doxygen; HDF4_DOXYGEN=$enableval fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HDF4_DOXYGEN" >&5 printf "%s\n" "$HDF4_DOXYGEN" >&6; } ## Check if they would like to enable doxygen warnings as errors ## ## This needs to be exposed for the library info file. ## Default is to consider doxygen warnings as errors DOXY_ERR=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if doxygen warnings as errors is enabled" >&5 printf %s "checking if doxygen warnings as errors is enabled... " >&6; } # Check whether --enable-doxygen-errors was given. if test ${enable_doxygen_errors+y} then : enableval=$enable_doxygen_errors; DOXY_ERR=$enableval fi if test "X$DOXY_ERR" = "Xyes"; then HDF4_DOXY_WARNINGS="FAIL_ON_WARNINGS" else HDF4_DOXY_WARNINGS="NO" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HDF4_DOXY_WARNINGS" >&5 printf "%s\n" "$HDF4_DOXY_WARNINGS" >&6; } if test "X$HDF4_DOXYGEN" = "Xyes"; then # SRCDIR Environment variables used inside doxygen macro for the source location: DOXYGEN_PACKAGE=${PACKAGE_NAME} DOXYGEN_VERSION_STRING=${PACKAGE_VERSION} DOXYGEN_DIR='$(SRCDIR)/doxygen' DOXYGEN_INCLUDE_ALIASES_PATH='$(SRCDIR)/doxygen' DOXYGEN_INCLUDE_ALIASES='$(SRCDIR)/doxygen/aliases' DOXYGEN_VERBATIM_VARS='DOXYGEN_INCLUDE_ALIASES' DOXYGEN_PROJECT_LOGO='$(SRCDIR)/doxygen/img/HDFG-logo.png' DOXYGEN_PROJECT_BRIEF='API Reference' DOXYGEN_INPUT_DIRECTORY='$(SRCDIR) $(SRCDIR)/doxygen/dox' DOXYGEN_OPTIMIZE_OUTPUT_FOR_C=YES DOXYGEN_MACRO_EXPANSION=YES DOXYGEN_OUTPUT_DIRECTORY=hdf4lib_docs DOXYGEN_EXAMPLES_DIRECTORY='$(SRCDIR)' DOXYGEN_LAYOUT_FILE='$(SRCDIR)/doxygen/hdf4doxy_layout.xml' DOXYGEN_HTML_HEADER='$(SRCDIR)/doxygen/hdf4_header.html' DOXYGEN_HTML_FOOTER='$(SRCDIR)/doxygen/hdf4_footer.html' DOXYGEN_HTML_EXTRA_STYLESHEET='$(SRCDIR)/doxygen/hdf4doxy.css' DOXYGEN_HTML_EXTRA_FILES='$(SRCDIR)/doxygen/hdf4_navtree_hacks.js' DOXYGEN_TAG_FILE=hdf4.tag DOXYGEN_SERVER_BASED_SEARCH=NO DOXYGEN_EXTERNAL_SEARCH=NO DOXYGEN_SEARCHENGINE_URL= DOXYGEN_STRIP_FROM_PATH='$(SRCDIR)' DOXYGEN_STRIP_FROM_INC_PATH='$(SRCDIR)' DOXYGEN_PREDEFINED='H4_DOXYGEN' DOXYGEN_WARN_AS_ERROR=${HDF4_DOXY_WARNINGS} # Files: DX_PROJECT=HDF4 DX_CONFIG='./doxygen/Doxyfile' DX_DOCDIR='hdf4lib_docs' # Environment variables used inside doxygen.cfg: DX_ENV="$DX_ENV SRCDIR='$srcdir'" SRCDIR=$srcdir DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" PROJECT=$DX_PROJECT DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Doxygen itself: # Check whether --enable-doxygen-doc was given. if test ${enable_doxygen_doc+y} then : enableval=$enable_doxygen_doc; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_doc=1 ;; #( n|N|no|No|NO) DX_FLAG_doc=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_doc=1 fi if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DOXYGEN+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 printf "%s\n" "$DX_DOXYGEN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then DX_DOXYGEN="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN fi else DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_PERL+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 printf "%s\n" "$DX_PERL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_PERL+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 printf "%s\n" "$ac_pt_DX_PERL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then DX_PERL="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL fi else DX_PERL="$ac_cv_path_DX_PERL" fi if test "$DX_FLAG_doc$DX_PERL" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi : fi if test "$DX_FLAG_doc" = 1; then DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" PERL_PATH=$DX_PERL : else : fi # Dot for graphics: # Check whether --enable-doxygen-dot was given. if test ${enable_doxygen_dot+y} then : enableval=$enable_doxygen_dot; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_dot=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_dot=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_dot=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 fi if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DOT+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 printf "%s\n" "$DX_DOT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DOT+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 printf "%s\n" "$ac_pt_DX_DOT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then DX_DOT="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT fi else DX_DOT="$ac_cv_path_DX_DOT" fi if test "$DX_FLAG_dot$DX_DOT" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi : fi if test "$DX_FLAG_dot" = 1; then DX_ENV="$DX_ENV HAVE_DOT='YES'" HAVE_DOT=YES DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" DOT_PATH=`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'` : else DX_ENV="$DX_ENV HAVE_DOT='NO'" HAVE_DOT=NO : fi # Man pages generation: # Check whether --enable-doxygen-man was given. if test ${enable_doxygen_man+y} then : enableval=$enable_doxygen_man; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_man=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_man=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_man=1 test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 fi if test "$DX_FLAG_man" = 1; then : fi if test "$DX_FLAG_man" = 1; then DX_ENV="$DX_ENV GENERATE_MAN='YES'" GENERATE_MAN=YES : else DX_ENV="$DX_ENV GENERATE_MAN='NO'" GENERATE_MAN=NO : fi # RTF file generation: # Check whether --enable-doxygen-rtf was given. if test ${enable_doxygen_rtf+y} then : enableval=$enable_doxygen_rtf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_rtf=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_rtf=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_rtf=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 fi if test "$DX_FLAG_rtf" = 1; then : fi if test "$DX_FLAG_rtf" = 1; then DX_ENV="$DX_ENV GENERATE_RTF='YES'" GENERATE_RTF=YES : else DX_ENV="$DX_ENV GENERATE_RTF='NO'" GENERATE_RTF=NO : fi # XML file generation: # Check whether --enable-doxygen-xml was given. if test ${enable_doxygen_xml+y} then : enableval=$enable_doxygen_xml; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_xml=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_xml=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_xml=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 fi if test "$DX_FLAG_xml" = 1; then : fi if test "$DX_FLAG_xml" = 1; then DX_ENV="$DX_ENV GENERATE_XML='YES'" GENERATE_XML=YES : else DX_ENV="$DX_ENV GENERATE_XML='NO'" GENERATE_XML=NO : fi # (Compressed) HTML help generation: # Check whether --enable-doxygen-chm was given. if test ${enable_doxygen_chm+y} then : enableval=$enable_doxygen_chm; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chm=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_chm=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_chm=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 fi if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_HHC+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 printf "%s\n" "$DX_HHC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_HHC+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 printf "%s\n" "$ac_pt_DX_HHC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then DX_HHC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC fi else DX_HHC="$ac_cv_path_DX_HHC" fi if test "$DX_FLAG_chm$DX_HHC" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi : fi if test "$DX_FLAG_chm" = 1; then DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" HHC_PATH=$DX_HHC DX_ENV="$DX_ENV GENERATE_HTML='YES'" GENERATE_HTML=YES DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" GENERATE_HTMLHELP=YES : else DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" GENERATE_HTMLHELP=NO : fi # Separate CHI file generation. # Check whether --enable-doxygen-chi was given. if test ${enable_doxygen_chi+y} then : enableval=$enable_doxygen_chi; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chi=1 test "$DX_FLAG_chm" = "1" \ || as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_chi=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_chi=0 test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 fi if test "$DX_FLAG_chi" = 1; then : fi if test "$DX_FLAG_chi" = 1; then DX_ENV="$DX_ENV GENERATE_CHI='YES'" GENERATE_CHI=YES : else DX_ENV="$DX_ENV GENERATE_CHI='NO'" GENERATE_CHI=NO : fi # Plain HTML pages generation: # Check whether --enable-doxygen-html was given. if test ${enable_doxygen_html+y} then : enableval=$enable_doxygen_html; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_html=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ || as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_html=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_html=1 test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 fi if test "$DX_FLAG_html" = 1; then : fi if test "$DX_FLAG_html" = 1; then DX_ENV="$DX_ENV GENERATE_HTML='YES'" GENERATE_HTML=YES : else test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" GENERATE_HTML=NO : fi # PostScript file generation: # Check whether --enable-doxygen-ps was given. if test ${enable_doxygen_ps+y} then : enableval=$enable_doxygen_ps; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_ps=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_ps=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_ps=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 fi if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_LATEX+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 printf "%s\n" "$DX_LATEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_LATEX+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 printf "%s\n" "$ac_pt_DX_LATEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then DX_LATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX fi else DX_LATEX="$ac_cv_path_DX_LATEX" fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 printf "%s\n" "$DX_MAKEINDEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DVIPS+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 printf "%s\n" "$DX_DVIPS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DVIPS+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then DX_DVIPS="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS fi else DX_DVIPS="$ac_cv_path_DX_DVIPS" fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 printf "%s\n" "$DX_EGREP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi : fi if test "$DX_FLAG_ps" = 1; then : else : fi # PDF file generation: # Check whether --enable-doxygen-pdf was given. if test ${enable_doxygen_pdf+y} then : enableval=$enable_doxygen_pdf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_pdf=1 test "$DX_FLAG_doc" = "1" \ || as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) DX_FLAG_pdf=0 ;; #( *) as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 ;; esac else $as_nop DX_FLAG_pdf=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 fi if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_PDFLATEX+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 printf "%s\n" "$DX_PDFLATEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then DX_PDFLATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX fi else DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 printf "%s\n" "$DX_MAKEINDEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 printf "%s\n" "$DX_EGREP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi : fi if test "$DX_FLAG_pdf" = 1; then : else : fi # LaTeX generation for PS and/or PDF: if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then DX_ENV="$DX_ENV GENERATE_LATEX='YES'" GENERATE_LATEX=YES else DX_ENV="$DX_ENV GENERATE_LATEX='NO'" GENERATE_LATEX=NO fi # Paper size for PS and/or PDF: case "$DOXYGEN_PAPER_SIZE" in #( "") DOXYGEN_PAPER_SIZE="" ;; #( a4wide|a4|letter|legal|executive) DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" PAPER_SIZE=$DOXYGEN_PAPER_SIZE ;; #( *) as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 ;; esac # Rules: if test $DX_FLAG_html -eq 1 then : DX_SNIPPET_html="## ------------------------------- ## ## Rules specific for HTML output. ## ## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " else $as_nop DX_SNIPPET_html="" fi if test $DX_FLAG_chi -eq 1 then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" else $as_nop DX_SNIPPET_chi="" fi if test $DX_FLAG_chm -eq 1 then : DX_SNIPPET_chm="## ------------------------------ ## ## Rules specific for CHM output. ## ## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ \$(DX_DOCDIR)/chm\ ${DX_SNIPPET_chi} " else $as_nop DX_SNIPPET_chm="" fi if test $DX_FLAG_man -eq 1 then : DX_SNIPPET_man="## ------------------------------ ## ## Rules specific for MAN output. ## ## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " else $as_nop DX_SNIPPET_man="" fi if test $DX_FLAG_rtf -eq 1 then : DX_SNIPPET_rtf="## ------------------------------ ## ## Rules specific for RTF output. ## ## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " else $as_nop DX_SNIPPET_rtf="" fi if test $DX_FLAG_xml -eq 1 then : DX_SNIPPET_xml="## ------------------------------ ## ## Rules specific for XML output. ## ## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " else $as_nop DX_SNIPPET_xml="" fi if test $DX_FLAG_ps -eq 1 then : DX_SNIPPET_ps="## ----------------------------- ## ## Rules specific for PS output. ## ## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ \$(DX_DOCDIR)/\$(PACKAGE).ps DX_PS_GOAL = doxygen-ps doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DOCDIR)/\$(PACKAGE).ps: \$(DX_DOCDIR)/\$(PACKAGE).tag \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ \$(DX_LATEX) refman.tex; \\ \$(DX_MAKEINDEX) refman.idx; \\ \$(DX_LATEX) refman.tex; \\ countdown=5; \\ while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ refman.log > /dev/null 2>&1 \\ && test \$\$countdown -gt 0; do \\ \$(DX_LATEX) refman.tex; \\ countdown=\`expr \$\$countdown - 1\`; \\ done; \\ \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " else $as_nop DX_SNIPPET_ps="" fi if test $DX_FLAG_pdf -eq 1 then : DX_SNIPPET_pdf="## ------------------------------ ## ## Rules specific for PDF output. ## ## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ \$(DX_DOCDIR)/\$(PACKAGE).pdf DX_PDF_GOAL = doxygen-pdf doxygen-pdf: \$(DX_CLEAN_PDF) \$(DX_DOCDIR)/\$(PACKAGE).pdf: \$(DX_DOCDIR)/\$(PACKAGE).tag \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ \$(DX_PDFLATEX) refman.tex; \\ \$(DX_MAKEINDEX) refman.idx; \\ \$(DX_PDFLATEX) refman.tex; \\ countdown=5; \\ while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ refman.log > /dev/null 2>&1 \\ && test \$\$countdown -gt 0; do \\ \$(DX_PDFLATEX) refman.tex; \\ countdown=\`expr \$\$countdown - 1\`; \\ done; \\ mv refman.pdf ../\$(PACKAGE).pdf " else $as_nop DX_SNIPPET_pdf="" fi if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 then : DX_SNIPPET_latex="## ------------------------------------------------- ## ## Rules specific for LaTeX (shared for PS and PDF). ## ## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) _DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) _DX_v_LATEX_0 = @echo \" LATEX \" \$@; DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " else $as_nop DX_SNIPPET_latex="" fi if test $DX_FLAG_doc -eq 1 then : DX_SNIPPET_doc="## --------------------------------- ## ## Format-independent Doxygen rules. ## ## --------------------------------- ## ${DX_SNIPPET_html}\ ${DX_SNIPPET_chm}\ ${DX_SNIPPET_man}\ ${DX_SNIPPET_rtf}\ ${DX_SNIPPET_xml}\ ${DX_SNIPPET_ps}\ ${DX_SNIPPET_pdf}\ ${DX_SNIPPET_latex}\ DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) _DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) _DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; .PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) .INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) doxygen-run: \$(DX_DOCDIR)/\$(PACKAGE).tag doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) \$(DX_DOCDIR)/\$(PACKAGE).tag: \$(DX_CONFIG) \$(pkginclude_HEADERS) \$(A""M_V_at)rm -rf \$(DX_DOCDIR) \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR) \$(DX_DOXYGEN) \$(DX_CONFIG) \$(A""M_V_at)echo Timestamp >\$@ DX_CLEANFILES = \\ \$(DX_DOCDIR)/doxygen_sqlite3.db \\ \$(DX_DOCDIR)/\$(PACKAGE).tag \\ -r \\ \$(DX_CLEAN_HTML) \\ \$(DX_CLEAN_CHM) \\ \$(DX_CLEAN_CHI) \\ \$(DX_CLEAN_MAN) \\ \$(DX_CLEAN_RTF) \\ \$(DX_CLEAN_XML) \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" else $as_nop DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV fi if test "X$HDF4_DOXYGEN" = "Xyes"; then BUILD_DOXYGEN_CONDITIONAL_TRUE= BUILD_DOXYGEN_CONDITIONAL_FALSE='#' else BUILD_DOXYGEN_CONDITIONAL_TRUE='#' BUILD_DOXYGEN_CONDITIONAL_FALSE= fi ## ====================================================================== ## Libtool initialization ## ====================================================================== ## disable-shared sets the default libtool behavior to disable shared libs case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "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*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$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+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop 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 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 printf "%s\n" "$xsi_shell" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; 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=$? printf "%s\n" "$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=$? printf "%s\n" "$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.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # 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=$? printf "%s\n" "$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=$? printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop 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|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 printf "%s\n" "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} 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=$? printf "%s\n" "$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=$? printf "%s\n" "$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=$? printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$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 ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi 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 : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi # Set options # Check whether --enable-shared was given. if test ${enable_shared+y} 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 $as_nop enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test ${enable_static+y} 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 $as_nop enable_static=yes fi # Check whether --with-pic was given. if test ${with_pic+y} 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 $as_nop pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} 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 $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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* ## 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... 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$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\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test "$hard_links" = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "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 <jrb3@best.com> 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 test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; 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.beam \ 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 test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; 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.beam \ 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) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $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=$? printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "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<name>.so # instead of lib<name>.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 test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; 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.beam \ 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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="$sys_lib_dlsearch_path_spec $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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$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_nop 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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char shl_load (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else $as_nop ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$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 $as_nop 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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else $as_nop ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char dld_link (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop 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 <dlfcn.h> #endif #include <stdio.h> #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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$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\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop 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 <dlfcn.h> #endif #include <stdio.h> #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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$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= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi # Report which library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$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" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$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. # 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_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$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-%%"` GCC=$G77 if test -n "$compiler"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } GCC_F77="$G77" LD_F77="$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_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-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_F77='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-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_F77='-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_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; 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_F77='-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_F77=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_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-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_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-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_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-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_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-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_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-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_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_F77+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_F77+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # 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_F77=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_F77+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works_F77=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_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_F77+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_F77=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_F77=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_F77" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_F77+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_F77=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_F77=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test "$hard_links" = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # 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_F77='_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_F77=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_F77='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= 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_F77=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_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='${wl}--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$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_F77='[_]+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_F77='$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_F77='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_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_F77=yes ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${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_F77='$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_F77='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_F77='${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_F77='${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_F77= 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_F77='${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_F77=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${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_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$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_F77='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_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='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_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$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_F77=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_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=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_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$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_F77=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_F77=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_F77='$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_F77='$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_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='${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_F77=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_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= 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_F77='${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_F77=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_F77='-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 test ${lt_cv_aix_libpath__F77+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`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__F77"; then lt_cv_aix_libpath__F77=`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.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$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_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$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 test ${lt_cv_aix_libpath__F77+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`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__F77"; then lt_cv_aix_libpath__F77=`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.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${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_F77='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$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_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-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_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # 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_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_F77='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, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$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_F77='chmod 644 $oldlib' postlink_cmds_F77='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_F77=' ' allow_undefined_flag_F77=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_F77='$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_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77="$_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_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="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_F77="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_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$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_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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 hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_F77='$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_F77='$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_F77='$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_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$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_F77=' -expect_unresolved \*' archive_cmds_F77='$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_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$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_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$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_F77='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_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='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_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='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_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='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_F77='-R$libdir' hardcode_shlibpath_var_F77=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_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$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_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='${wl}-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 printf "%s\n" "$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_F77+y} then : printf %s "(cached) " >&6 else $as_nop $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=$? printf "%s\n" "$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_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "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<name>.so # instead of lib<name>.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 test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_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.beam \ 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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="$sys_lib_dlsearch_path_spec $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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_F77" != 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, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 printf "%s\n" "$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink || test "$inherit_rpath_F77" = 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" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != 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: : ${CONFIG_LT=./config.lt} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_LT" >&5 printf "%s\n" "$as_me: creating $CONFIG_LT" >&6;} as_write_fail=0 cat >"$CONFIG_LT" <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>"$CONFIG_LT" <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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_nop 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_nop 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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_LT" script. ## ## --------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x "$CONFIG_LT" cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 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 <bug-libtool@gnu.org>." lt_cl_version="\ HDF config.lt 4.3.1 configured by $0, generated by GNU Autoconf 2.71. 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=: ;; -*) as_fn_error $? "unrecognized option: $1 Try \`$0 --help' for more information." "$LINENO" 5 ;; *) as_fn_error $? "unrecognized argument: $1 Try \`$0 --help' for more information." "$LINENO" 5 ;; esac shift done if $lt_cl_silent; then exec 6>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF # 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' 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"`' OBJDUMP='`$ECHO "$OBJDUMP" | $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"`' DLLTOOL='`$ECHO "$DLLTOOL" | $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"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $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 SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ 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 \ LD_F77 \ reload_flag_F77 \ compiler_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_static_F77 \ lt_cv_prog_compiler_c_o_F77 \ export_dynamic_flag_spec_F77 \ whole_archive_flag_spec_F77 \ compiler_needs_object_F77 \ with_gnu_ld_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_separator_F77 \ exclude_expsyms_F77 \ include_expsyms_F77 \ file_list_spec_F77; 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_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ export_symbols_cmds_F77 \ prelink_cmds_F77 \ postlink_cmds_F77; 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' _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5 printf "%s\n" "$as_me: creating $ofile" >&6;} # 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="F77 " # ### BEGIN LIBTOOL CONFIG # 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 # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # 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 # DLL creation program. DLLTOOL=$lt_DLLTOOL # 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 # ### 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 printf "%s\n" "$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: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # 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_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # 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_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF as_fn_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 5>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec 5>>config.log $lt_cl_success || as_fn_exit 1 ## ---------------------------------------------------------------------- ## Check if we should install only statically linked executables. ## This check needs to occur after libtool is initialized because ## we check a libtool cache value and may issue a warning based ## on its result. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we should install only statically linked executables" >&5 printf %s "checking if we should install only statically linked executables... " >&6; } # Check whether --enable-static_exec was given. if test ${enable_static_exec+y} then : enableval=$enable_static_exec; STATIC_EXEC=$enableval fi if test "X$STATIC_EXEC" = "Xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ## Issue a warning if -static flag is not supported. if test "X$lt_cv_prog_compiler_static_works" = "Xno"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: -static flag not supported on this system; executable won't statically link shared system libraries" >&5 printf "%s\n" "$as_me: WARNING: -static flag not supported on this system; executable won't statically link shared system libraries" >&2;} fi LT_STATIC_EXEC="-all-static" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } LT_STATIC_EXEC="" fi ## ====================================================================== ## Checks for libraries ## ====================================================================== ## ---------------------------------------------------------------------- ## Fake --with-xxx option to allow us to create a help message for the ## following --with-xxx options which can take either a =DIR or =INC,LIB ## specifier. ## # Check whether --with-fnord was given. if test ${with_fnord+y} then : withval=$with_fnord; fi ## ---------------------------------------------------------------------- ## Is the GNU zlib present? It has a header file `zlib.h' and a library ## `-lz' and their locations might be specified with the `--with-zlib' ## command-line switch. The value is an include path and/or a library path. ## If the library path is specified then it must be preceded by a comma. # Check whether --with-zlib was given. if test ${with_zlib+y} then : withval=$with_zlib; else $as_nop withval=yes fi case "X-$withval" in X-yes) HAVE_ZLIB="yes" for ac_header in zlib.h do : ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes then : printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h HAVE_ZLIB_H="yes" else $as_nop unset HAVE_ZLIB fi done if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compress2 in -lz" >&5 printf %s "checking for compress2 in -lz... " >&6; } if test ${ac_cv_lib_z_compress2+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lz $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. */ char compress2 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return compress2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_compress2=yes else $as_nop ac_cv_lib_z_compress2=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress2" >&5 printf "%s\n" "$ac_cv_lib_z_compress2" >&6; } if test "x$ac_cv_lib_z_compress2" = xyes then : printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" else $as_nop unset HAVE_ZLIB fi fi if test -z "$HAVE_ZLIB"; then if test -n "$HDF4_CONFIG_ABORT"; then as_fn_error $? "couldn't find zlib library" "$LINENO" 5 fi else ac_fn_c_check_func "$LINENO" "compress2" "ac_cv_func_compress2" if test "x$ac_cv_func_compress2" = xyes then : HAVE_COMPRESS2="yes" fi fi ;; X-|X-no|X-none) HAVE_ZLIB="no" as_fn_error $? "zlib library required to build HDF4" "$LINENO" 5 ;; *) HAVE_ZLIB="yes" case "$withval" in *,*) zlib_inc="`echo $withval | cut -f1 -d,`" zlib_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then zlib_inc="$withval/include" zlib_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$zlib_inc" = "X/usr/include"; then zlib_inc="" fi if test "X$zlib_lib" = "X/usr/lib"; then zlib_lib="" fi if test -n "$zlib_inc"; then CPPFLAGS="$CPPFLAGS -I$zlib_inc" fi for ac_header in zlib.h do : ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes then : printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h HAVE_ZLIB_H="yes" else $as_nop unset HAVE_ZLIB fi done if test -n "$zlib_lib"; then LDFLAGS="$LDFLAGS -L$zlib_lib" fi if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compress2 in -lz" >&5 printf %s "checking for compress2 in -lz... " >&6; } if test ${ac_cv_lib_z_compress2+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lz $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. */ char compress2 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return compress2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_compress2=yes else $as_nop ac_cv_lib_z_compress2=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress2" >&5 printf "%s\n" "$ac_cv_lib_z_compress2" >&6; } if test "x$ac_cv_lib_z_compress2" = xyes then : printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" else $as_nop unset HAVE_ZLIB fi fi if test -z "$HAVE_ZLIB"; then as_fn_error $? "couldn't find zlib library" "$LINENO" 5 else ac_fn_c_check_func "$LINENO" "compress2" "ac_cv_func_compress2" if test "x$ac_cv_func_compress2" = xyes then : HAVE_COMPRESS2="yes" fi fi ;; esac ## ---------------------------------------------------------------------- ## Is the JPEG library present? # Check whether --with-jpeg was given. if test ${with_jpeg+y} then : withval=$with_jpeg; else $as_nop withval=yes fi case "X-$withval" in X-yes) HAVE_JPEG="yes" for ac_header in jpeglib.h do : ac_fn_c_check_header_compile "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes then : printf "%s\n" "#define HAVE_JPEGLIB_H 1" >>confdefs.h HAVE_JPEG_H="yes" else $as_nop unset HAVE_JPEG fi done if test "x$HAVE_JPEG" = "xyes" -a "x$HAVE_JPEG_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_decompress in -ljpeg" >&5 printf %s "checking for jpeg_start_decompress in -ljpeg... " >&6; } if test ${ac_cv_lib_jpeg_jpeg_start_decompress+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $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. */ char jpeg_start_decompress (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return jpeg_start_decompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_jpeg_jpeg_start_decompress=yes else $as_nop ac_cv_lib_jpeg_jpeg_start_decompress=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_decompress" >&5 printf "%s\n" "$ac_cv_lib_jpeg_jpeg_start_decompress" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_start_decompress" = xyes then : printf "%s\n" "#define HAVE_LIBJPEG 1" >>confdefs.h LIBS="-ljpeg $LIBS" else $as_nop unset HAVE_JPEG fi fi if test -z "$HAVE_JPEG"; then as_fn_error $? "couldn't find jpeg library" "$LINENO" 5 fi ;; X-|X-no|X-none) HAVE_JPEG="no" as_fn_error $? "jpeg library required to build HDF4" "$LINENO" 5 ;; *) HAVE_JPEG="yes" case "$withval" in *,*) jpeg_inc="`echo $withval | cut -f1 -d,`" jpeg_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then jpeg_inc="$withval/include" jpeg_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$jpeg_inc" = "X/usr/include"; then jpeg_inc="" fi if test "X$jpeg_lib" = "X/usr/lib"; then jpeg_lib="" fi if test -n "$jpeg_inc"; then CPPFLAGS="$CPPFLAGS -I$jpeg_inc" fi for ac_header in jpeglib.h do : ac_fn_c_check_header_compile "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes then : printf "%s\n" "#define HAVE_JPEGLIB_H 1" >>confdefs.h HAVE_JPEG_H="yes" else $as_nop unset HAVE_JPEG fi done if test -n "$jpeg_lib"; then LDFLAGS="$LDFLAGS -L$jpeg_lib" fi if test "x$HAVE_JPEG" = "xyes" -a "x$HAVE_JPEG_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_decompress in -ljpeg" >&5 printf %s "checking for jpeg_start_decompress in -ljpeg... " >&6; } if test ${ac_cv_lib_jpeg_jpeg_start_decompress+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $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. */ char jpeg_start_decompress (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return jpeg_start_decompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_jpeg_jpeg_start_decompress=yes else $as_nop ac_cv_lib_jpeg_jpeg_start_decompress=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_decompress" >&5 printf "%s\n" "$ac_cv_lib_jpeg_jpeg_start_decompress" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_start_decompress" = xyes then : printf "%s\n" "#define HAVE_LIBJPEG 1" >>confdefs.h LIBS="-ljpeg $LIBS" else $as_nop unset HAVE_JPEG fi fi if test -z "$HAVE_JPEG"; then as_fn_error $? "couldn't find jpeg library" "$LINENO" 5 fi ;; esac ## ---------------------------------------------------------------------- ## Is the szip library present? USE_COMP_SZIP="no" SZIP_HAS_ENCODER="no" # Check whether --with-szlib was given. if test ${with_szlib+y} then : withval=$with_szlib; else $as_nop withval=no fi case "X-$withval" in X-yes) HAVE_SZIP="yes" for ac_header in szlib.h do : ac_fn_c_check_header_compile "$LINENO" "szlib.h" "ac_cv_header_szlib_h" "$ac_includes_default" if test "x$ac_cv_header_szlib_h" = xyes then : printf "%s\n" "#define HAVE_SZLIB_H 1" >>confdefs.h HAVE_SZLIB_H="yes" else $as_nop unset HAVE_SZIP fi done if test "x$HAVE_SZIP" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SZ_BufftoBuffCompress in -lsz" >&5 printf %s "checking for SZ_BufftoBuffCompress in -lsz... " >&6; } if test ${ac_cv_lib_sz_SZ_BufftoBuffCompress+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsz $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. */ char SZ_BufftoBuffCompress (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return SZ_BufftoBuffCompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_sz_SZ_BufftoBuffCompress=yes else $as_nop ac_cv_lib_sz_SZ_BufftoBuffCompress=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5 printf "%s\n" "$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6; } if test "x$ac_cv_lib_sz_SZ_BufftoBuffCompress" = xyes then : printf "%s\n" "#define HAVE_LIBSZ 1" >>confdefs.h LIBS="-lsz $LIBS" else $as_nop unset HAVE_SZIP fi fi if test -z "$HAVE_SZIP"; then as_fn_error $? "couldn't find szlib library" "$LINENO" 5 else USE_COMP_SZIP="yes" fi ;; X-|X-no|X-none) HAVE_SZIP="no" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for szlib" >&5 printf %s "checking for szlib... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: suppressed" >&5 printf "%s\n" "suppressed" >&6; } SZIP_INFO="${SZIP_INFO}disabled" ;; *) HAVE_SZIP="yes" case "$withval" in *,*) szip_inc="`echo $withval | cut -f1 -d,`" szip_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then szip_inc="$withval/include" szip_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$szip_inc" = "X/usr/include"; then szip_inc="" fi if test "X$szip_lib" = "X/usr/lib"; then szip_lib="" fi if test -n "$szip_inc"; then CPPFLAGS="$CPPFLAGS -I$szip_inc" fi for ac_header in szlib.h do : ac_fn_c_check_header_compile "$LINENO" "szlib.h" "ac_cv_header_szlib_h" "$ac_includes_default" if test "x$ac_cv_header_szlib_h" = xyes then : printf "%s\n" "#define HAVE_SZLIB_H 1" >>confdefs.h HAVE_SZLIB_H="yes" else $as_nop unset HAVE_SZIP fi done if test -n "$szip_lib"; then LDFLAGS="$LDFLAGS -L$szip_lib" fi if test "x$HAVE_SZIP" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SZ_BufftoBuffCompress in -lsz" >&5 printf %s "checking for SZ_BufftoBuffCompress in -lsz... " >&6; } if test ${ac_cv_lib_sz_SZ_BufftoBuffCompress+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsz $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. */ char SZ_BufftoBuffCompress (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return SZ_BufftoBuffCompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_sz_SZ_BufftoBuffCompress=yes else $as_nop ac_cv_lib_sz_SZ_BufftoBuffCompress=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5 printf "%s\n" "$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6; } if test "x$ac_cv_lib_sz_SZ_BufftoBuffCompress" = xyes then : printf "%s\n" "#define HAVE_LIBSZ 1" >>confdefs.h LIBS="-lsz $LIBS" else $as_nop unset HAVE_SZIP fi fi if test -z "$HAVE_SZIP"; then as_fn_error $? "couldn't find szlib library" "$LINENO" 5 else USE_COMP_SZIP="yes" fi ;; esac ## Check to see if SZIP has encoder if test "X$HAVE_SZIP" = "Xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then ## SZLIB library is available. Check if it can encode. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for szlib encoder" >&5 printf %s "checking for szlib encoder... " >&6; } ## Set LD_LIBRARY_PATH so encoder test can find the library and run. if test -z "$LD_LIBRARY_PATH"; then export LD_LIBRARY_PATH="$szip_lib" else export LD_LIBRARY_PATH="${szip_lib}:$LD_LIBRARY_PATH" fi LL_PATH="$LD_LIBRARY_PATH" if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <szlib.h> int main(void) { /* SZ_encoder_enabled returns 1 if encoder is present */ if (SZ_encoder_enabled() == 1) exit(0); else exit(1); } _ACEOF if ac_fn_c_try_run "$LINENO" then : CAN_ENCODE="yes" else $as_nop CAN_ENCODE="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ## Report szip encoder test results if test "X$CAN_ENCODE" = "Xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "X$CAN_ENCODE" = "Xno"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ## Add "szip" to external filter list if test "X$CAN_ENCODE" = "Xyes"; then if test "X$SZIP_INFO" != "X"; then SZIP_INFO="${SZIP_INFO}" fi SZIP_INFO="${SZIP_INFO}enabled with encoder" fi if test "X$CAN_ENCODE" = "Xno"; then if test "X$SZIP_INFO" != "X"; then SZIP_INFO="${SZIP_INFO}" fi SZIP_INFO="${SZIP_INFO}enabled with decoder only" fi ## Create macro to specify if encoder is present if test "X$CAN_ENCODE" = "Xyes"; then printf "%s\n" "#define HAVE_SZIP_ENCODER 1" >>confdefs.h SZIP_HAS_ENCODER="yes" fi fi if test "X$USE_COMP_SZIP" = "Xyes" && test "X$LL_PATH" != "X"; then BUILD_SHARED_SZIP_CONDITIONAL_TRUE= BUILD_SHARED_SZIP_CONDITIONAL_FALSE='#' else BUILD_SHARED_SZIP_CONDITIONAL_TRUE='#' BUILD_SHARED_SZIP_CONDITIONAL_FALSE= fi ## ====================================================================== ## Set POSIX level ## ====================================================================== ## This is needed so strdup, etc. are exposed properly ## ## POSIX feature information can be found in the gcc manual at: ## http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html CPPFLAGS="-D_POSIX_C_SOURCE=200809L $CPPFLAGS" ## ====================================================================== ## Checks for headers ## ====================================================================== ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" if test "x$ac_cv_header_arpa_inet_h" = xyes then : printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_in_h" = xyes then : printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" if test "x$ac_cv_header_sys_file_h" = xyes then : printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" if test "x$ac_cv_header_sys_resource_h" = xyes then : printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes then : printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes then : printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ## Special MinGW checks case "`uname`" in MINGW*) # Check for Winsock library { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for htonl in -lws2_32" >&5 printf %s "checking for htonl in -lws2_32... " >&6; } if test ${ac_cv_lib_ws2_32_htonl+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lws2_32 $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. */ char htonl (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return htonl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ws2_32_htonl=yes else $as_nop ac_cv_lib_ws2_32_htonl=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_htonl" >&5 printf "%s\n" "$ac_cv_lib_ws2_32_htonl" >&6; } if test "x$ac_cv_lib_ws2_32_htonl" = xyes then : printf "%s\n" "#define HAVE_LIBWS2_32 1" >>confdefs.h LIBS="-lws2_32 $LIBS" fi printf "%s\n" "#define HAVE_WIN32_API 1" >>confdefs.h printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h ;; esac ## ---------------------------------------------------------------------- ## XDR grew up in a world where long integers were 32 bits in size. Now ## that many platforms have 64-bit longs, we need some hacks to paper ## over the differences in sizes, particularly on big-endian machines. ## # 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : else $as_nop if test "$ac_cv_type_long" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf "%s\n" "$ac_cv_sizeof_long" >&6; } printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h ## ---------------------------------------------------------------------- if test "x$CC" != xcc; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 printf %s "checking whether $CC and cc understand -c and -o together... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 printf %s "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`printf "%s\n" "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval test \${ac_cv_prog_cc_${ac_cc}_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -rf core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi if test "X$BUILD_FORTRAN" = "Xyes"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $F77 understands -c and -o together" >&5 printf %s "checking whether $F77 understands -c and -o together... " >&6; } if test ${ac_cv_prog_f77_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # We test twice because some compilers refuse to overwrite an existing # `.o' file with `-o', although they will create one. ac_try='$F77 $FFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then ac_cv_prog_f77_c_o=yes else ac_cv_prog_f77_c_o=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_c_o" >&5 printf "%s\n" "$ac_cv_prog_f77_c_o" >&6; } if test $ac_cv_prog_f77_c_o = no; then printf "%s\n" "#define F77_NO_MINUS_C_MINUS_O 1" >>confdefs.h 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 fi ## ---------------------------------------------------------------------- ## Set some variables for general configuration information to be saved ## and installed with the libraries. ## ## HDF4 version from the first line of the README.md file. H4_VERSION="`cut -d' ' -f3 $srcdir/README.md | head -1`" ## Configuration date CONFIG_DATE="`date`" ## User doing the configuration CONFIG_USER="`whoami`@`hostname`" ## Configuration mode (production, development, etc) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else $as_nop ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else $as_nop ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no else $as_nop ac_cv_c_bigendian=yes 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac ## Are we building this in debug or production mode? { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build mode" >&5 printf %s "checking for build mode... " >&6; } # Check whether --enable-production was given. if test ${enable_production+y} then : enableval=$enable_production; fi case "X-$enable_production" in X-|X-yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: production" >&5 printf "%s\n" "production" >&6; } CONFIG_MODE=production CFLAGS="$CFLAGS $PROD_CFLAGS" FFLAGS="$FFLAGS $PROD_FFLAGS" CPPFLAGS="$CPPFLAGS -DNDEBUG $PROD_CPPFLAGS" ;; X-no) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: development" >&5 printf "%s\n" "development" >&6; } CONFIG_MODE=development CFLAGS="$CFLAGS $DEBUG_CFLAGS" FFLAGS="$FFLAGS $DEBUG_FFLAGS" CPPFLAGS="$CPPFLAGS -UNDEBUG $DEBUG_CPPFLAGS" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: user-defined" >&5 printf "%s\n" "user-defined" >&6; } CONFIG_MODE="user-defined (most CFLAGS, etc. set by user)" ;; esac ## ====================================================================== ## Checks for library functions ## ====================================================================== { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ceil in -lm" >&5 printf %s "checking for ceil in -lm... " >&6; } if test ${ac_cv_lib_m_ceil+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $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. */ char ceil (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main (void) { return ceil (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_ceil=yes else $as_nop ac_cv_lib_m_ceil=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_ceil" >&5 printf "%s\n" "$ac_cv_lib_m_ceil" >&6; } if test "x$ac_cv_lib_m_ceil" = xyes then : printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" if test "x$ac_cv_func_fork" = xyes then : printf "%s\n" "#define HAVE_FORK 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" if test "x$ac_cv_func_getrusage" = xyes then : printf "%s\n" "#define HAVE_GETRUSAGE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" if test "x$ac_cv_func_system" = xyes then : printf "%s\n" "#define HAVE_SYSTEM 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wait" "ac_cv_func_wait" if test "x$ac_cv_func_wait" = xyes then : printf "%s\n" "#define HAVE_WAIT 1" >>confdefs.h fi ## ====================================================================== ## Checks for system services ## ====================================================================== ## Copy NetCDF header files. # ## FIXME: This is code borrowed from the old HDF4 configure. ## These header files should probably be generated by autoconf instead ## of being copied depending upon the host. case "$host" in *-linux*|*-k*bsd*-gnu|*-gnu*)BAR="linux" ;; *-openbsd*) BAR="fbsd" ;; *-freebsd*) BAR="fbsd" ;; *-openbsd*) BAR="fbsd" ;; *-ibm-aix*) BAR="aix" ;; sparc64-*-solaris2*) BAR="solaris64" ;; *-*-solaris2*) BAR="solaris" ;; *-apple*) BAR="apple" ;; *-pc-cygwin*) BAR="linux" ;; *-mingw*) BAR="linux" ;; *) echo "*** unknown host $host!"; exit 1 ;; esac src_files="" src_files="`echo $src_files | sed -e s/FOO/${BAR}/g`" for config_file in $src_files; do src_file="${srcdir}/`echo $config_file | sed -e s/:.*$//`" target_file="`echo $config_file | sed -e s/^[^:]*://g`" if test ! -r ${src_file}; then echo '***' "${progname}: cannot copy file \"${target_file}\"," 1>&2 echo '***' "since the file \"${src_file}\" does not exist." 1>&2 exit 1 fi ## this sed command emulates the dirname command dstdir=`echo "$target_file" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` ## Create directory for the target_file if it's not there. if test ! -d $dstdir; then ${srcdir}/bin/mkinstalldirs $dstdir fi echo "Copying \"${src_file}\" to \"${target_file}\" ." cp ${src_file} ${target_file} if test ! -r ${target_file}; then echo '***' "${progname}: cannot copy file \"${target_file}\"," 1>&2 exit 1 fi done ## ------------------------------------------------------------------------ ## Check to see if libtool has enabled shared libraries. Set a conditional ## as some Makefiles will build based on availability of shared libraries. if (./libtool --features | grep '^enable shared libraries' > /dev/null); then enable_shared=yes else enable_shared=no fi ## ------------------------------------------------------------------------ ## Specify shared library extension the host machine should recognize. case "$host_os" in darwin*) SHARED_EXTENSION="dylib" ;; *) SHARED_EXTENSION="so" ;; esac ## We don't need to say when we're entering directories if we're using ## GNU make because make does it for us. if test "X$GMAKE" = "Xyes"; then SETX=":" else SETX="set -x" fi if test "X$enable_shared" = "Xyes"; then HDF_BUILD_SHARED_TRUE= HDF_BUILD_SHARED_FALSE='#' else HDF_BUILD_SHARED_TRUE='#' HDF_BUILD_SHARED_FALSE= fi ## Compiler with version information. This consists of the full path ## name of the compiler and the reported version number. ## Strip anything that looks like a flag off of $CC CC_NOFLAGS=`echo $CC | sed 's/ -.*//'` if `echo $CC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then CC_VERSION="$CC" else CC_VERSION="$CC"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$CC_NOFLAGS; then CC_VERSION="$x/$CC" break fi done fi ## ---------------------------------------------------------------------- ## ## If --enable-static-exec and are specified together, there will be ld failures for ## "attempted static link of dynamic object" when the tools are built. This check ## will prevent that error during configure instead. It could go with the other ## --enable-static-exec checks, but since enable_static is set by default later in ## the configure process this check has to be delayed. if test "X$STATIC_EXEC" = "Xyes"; then if test "X${enable_static}" != "Xyes"; then as_fn_error $? "--enable-static-exec flag to build static executables requires static libraries. Please configure with --enable-static flag." "$LINENO" 5 fi fi ## This part doesn't work yet since HDF4 config files do not contain ## information for cc_vendor and cc_version as HDF4 similar files do. ## Needs to be fixed EIP 2010-01-21 ## if test -n "$cc_vendor" && test -n "$cc_version"; then ## CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)" ## fi if test -n "$cc_version_info"; then CC_VERSION="$CC_VERSION ( $cc_version_info)" fi ## Fortran compiler with version information. This consists of the full path ## name of the compiler and the reported version number. ## Strip anything that looks like a flag off of $F77 F77_NOFLAGS=`echo $F77 | sed 's/ -.*//'` if `echo $F77_NOFLAGS | grep ^/ >/dev/null 2>&1`; then F77_VERSION="$F77" else F77_VERSION="$F77"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$F77_NOFLAGS; then F77_VERSION="$x/$F77" break fi done fi if test -n "$fc_version_info"; then F77_VERSION="$F77_VERSION ( $fc_version_info)" fi ## This part doesn't work yet since HDF4 config files do not contain ## information for fortran_vendor and fortran_version. ## Needs to be fixed EIP 2010-01-21 ## if test -n "$fortran_vendor" && test -n "$fortran_version"; then ## F77_VERSION="$F77_VERSION ($fortran_vendor-$fortran_version)" ## fi ## Strip anything that looks like a flag off of $JAVA JAVA_NOFLAGS=`echo $JAVA | sed 's/ -.*//'` if `echo $JAVA_NOFLAGS | grep ^/ >/dev/null 2>&1`; then JAVA_VERSION="$JAVA" else JAVA_VERSION="$JAVA"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$JAVA_NOFLAGS; then JAVA_VERSION="$x/$JAVA" break fi done fi java_version_info=`$JAVA -version 2>&1 |\ grep 'version' | sed -e 's/version "//' | sed -e 's/"//'` if test -n "$java_version_info"; then JAVA_VERSION="$JAVA_VERSION ($java_version_info)" fi if test "X$HDF_JAVA" = "Xyes"; then BUILD_JAVA_CONDITIONAL_TRUE= BUILD_JAVA_CONDITIONAL_FALSE='#' else BUILD_JAVA_CONDITIONAL_TRUE='#' BUILD_JAVA_CONDITIONAL_FALSE= fi ## ---------------------------------------------------------------------- ## Some platforms require that all symbols are resolved when a library ## is linked. We can use the -no-undefined flag to tell libtool that ## it will be able to build shared libraries on these architectures, ## as it will not do so by default. ## if test "X${enable_shared}" = "Xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool needs -no-undefined flag to build shared libraries" >&5 printf %s "checking if libtool needs -no-undefined flag to build shared libraries... " >&6; } case "`uname`" in CYGWIN*|MINGW*|AIX*) ## Add in the -no-undefined flag to LDFLAGS for libtool. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } LDFLAGS="$LDFLAGS -no-undefined" ;; *) ## Don't add in anything. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi ## ---------------------------------------------------------------------- ## Enable deprecated public API symbols ## { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if deprecated public symbols are available" >&5 printf %s "checking if deprecated public symbols are available... " >&6; }; # Check whether --enable-deprecated-symbols was given. if test ${enable_deprecated_symbols+y} then : enableval=$enable_deprecated_symbols; DEPREC_SYMBOLS=$enableval else $as_nop DEPREC_SYMBOLS=yes fi case "X-$DEPREC_SYMBOLS" in X-yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } DEPRECATED_SYMBOLS=yes ;; X-no|*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } DEPRECATED_SYMBOLS=no printf "%s\n" "#define NO_DEPRECATED_SYMBOLS 1" >>confdefs.h ;; esac ac_config_files="$ac_config_files Makefile doxygen/Doxyfile libhdf4.settings hdf/Makefile hdf/fortran/Makefile hdf/src/Makefile hdf/test/Makefile hdf/test/srcdir_str.h hdf/util/Makefile hdf/util/h4cc hdf/util/h4fc hdf/util/h4redeploy hdf/util/testutil.sh mfhdf/fortran/ftest.f mfhdf/fortran/jackets.c mfhdf/fortran/netcdf.inc mfhdf/libsrc/netcdf.h mfhdf/Makefile mfhdf/dumper/Makefile mfhdf/dumper/testhdp.sh mfhdf/fortran/Makefile mfhdf/fortran/testfortran.sh mfhdf/hdfimport/Makefile mfhdf/hdfimport/testutil.sh mfhdf/hdiff/Makefile mfhdf/hdiff/testhdiff.sh mfhdf/hrepack/Makefile mfhdf/hrepack/hrepack.sh mfhdf/hrepack/hrepack_all.sh mfhdf/libsrc/Makefile mfhdf/ncdump/Makefile mfhdf/ncdump/testncdump.sh mfhdf/ncgen/Makefile mfhdf/ncgen/testncgen.sh mfhdf/nctest/Makefile mfhdf/test/Makefile mfhdf/test/srcdir_str.h mfhdf/test/testmfhdf.sh java/Makefile java/src/Makefile java/src/jni/Makefile java/test/Makefile java/test/junit.sh" ac_config_commands="$ac_config_commands .classes" 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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+y} || &/ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HDF_BUILD_NETCDF_TRUE}" && test -z "${HDF_BUILD_NETCDF_FALSE}"; then as_fn_error $? "conditional \"HDF_BUILD_NETCDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HDF_BUILD_NETCDF_TOOLS_TRUE}" && test -z "${HDF_BUILD_NETCDF_TOOLS_FALSE}"; then as_fn_error $? "conditional \"HDF_BUILD_NETCDF_TOOLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 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__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 "${HDF_BUILD_FORTRAN_TRUE}" && test -z "${HDF_BUILD_FORTRAN_FALSE}"; then as_fn_error $? "conditional \"HDF_BUILD_FORTRAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_DOXYGEN_CONDITIONAL_TRUE}" && test -z "${BUILD_DOXYGEN_CONDITIONAL_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOXYGEN_CONDITIONAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_SHARED_SZIP_CONDITIONAL_TRUE}" && test -z "${BUILD_SHARED_SZIP_CONDITIONAL_FALSE}"; then as_fn_error $? "conditional \"BUILD_SHARED_SZIP_CONDITIONAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HDF_BUILD_SHARED_TRUE}" && test -z "${HDF_BUILD_SHARED_FALSE}"; then as_fn_error $? "conditional \"HDF_BUILD_SHARED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_JAVA_CONDITIONAL_TRUE}" && test -z "${BUILD_JAVA_CONDITIONAL_FALSE}"; then as_fn_error $? "conditional \"BUILD_JAVA_CONDITIONAL\" 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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_nop 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_nop 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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 HDF $as_me 4.3.1, which was generated by GNU Autoconf 2.71. 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 <help@hdfgroup.org>." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ HDF config.status 4.3.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 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 ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) printf "%s\n" "$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 \printf "%s\n" "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 printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # 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' 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"`' OBJDUMP='`$ECHO "$OBJDUMP" | $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"`' DLLTOOL='`$ECHO "$DLLTOOL" | $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"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $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 SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ 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 \ LD_F77 \ reload_flag_F77 \ compiler_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_static_F77 \ lt_cv_prog_compiler_c_o_F77 \ export_dynamic_flag_spec_F77 \ whole_archive_flag_spec_F77 \ compiler_needs_object_F77 \ with_gnu_ld_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_separator_F77 \ exclude_expsyms_F77 \ include_expsyms_F77 \ file_list_spec_F77; 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_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ export_symbols_cmds_F77 \ prelink_cmds_F77 \ postlink_cmds_F77; 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' ac_aux_dir='$ac_aux_dir' $MKDIR_P java/src/.classes; $MKDIR_P java/test/.classes _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 "hdf/src/h4config.h") CONFIG_HEADERS="$CONFIG_HEADERS hdf/src/h4config.h" ;; "h4config") CONFIG_COMMANDS="$CONFIG_COMMANDS h4config" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doxygen/Doxyfile") CONFIG_FILES="$CONFIG_FILES doxygen/Doxyfile" ;; "libhdf4.settings") CONFIG_FILES="$CONFIG_FILES libhdf4.settings" ;; "hdf/Makefile") CONFIG_FILES="$CONFIG_FILES hdf/Makefile" ;; "hdf/fortran/Makefile") CONFIG_FILES="$CONFIG_FILES hdf/fortran/Makefile" ;; "hdf/src/Makefile") CONFIG_FILES="$CONFIG_FILES hdf/src/Makefile" ;; "hdf/test/Makefile") CONFIG_FILES="$CONFIG_FILES hdf/test/Makefile" ;; "hdf/test/srcdir_str.h") CONFIG_FILES="$CONFIG_FILES hdf/test/srcdir_str.h" ;; "hdf/util/Makefile") CONFIG_FILES="$CONFIG_FILES hdf/util/Makefile" ;; "hdf/util/h4cc") CONFIG_FILES="$CONFIG_FILES hdf/util/h4cc" ;; "hdf/util/h4fc") CONFIG_FILES="$CONFIG_FILES hdf/util/h4fc" ;; "hdf/util/h4redeploy") CONFIG_FILES="$CONFIG_FILES hdf/util/h4redeploy" ;; "hdf/util/testutil.sh") CONFIG_FILES="$CONFIG_FILES hdf/util/testutil.sh" ;; "mfhdf/fortran/ftest.f") CONFIG_FILES="$CONFIG_FILES mfhdf/fortran/ftest.f" ;; "mfhdf/fortran/jackets.c") CONFIG_FILES="$CONFIG_FILES mfhdf/fortran/jackets.c" ;; "mfhdf/fortran/netcdf.inc") CONFIG_FILES="$CONFIG_FILES mfhdf/fortran/netcdf.inc" ;; "mfhdf/libsrc/netcdf.h") CONFIG_FILES="$CONFIG_FILES mfhdf/libsrc/netcdf.h" ;; "mfhdf/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/Makefile" ;; "mfhdf/dumper/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/dumper/Makefile" ;; "mfhdf/dumper/testhdp.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/dumper/testhdp.sh" ;; "mfhdf/fortran/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/fortran/Makefile" ;; "mfhdf/fortran/testfortran.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/fortran/testfortran.sh" ;; "mfhdf/hdfimport/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/hdfimport/Makefile" ;; "mfhdf/hdfimport/testutil.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/hdfimport/testutil.sh" ;; "mfhdf/hdiff/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/hdiff/Makefile" ;; "mfhdf/hdiff/testhdiff.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/hdiff/testhdiff.sh" ;; "mfhdf/hrepack/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/hrepack/Makefile" ;; "mfhdf/hrepack/hrepack.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/hrepack/hrepack.sh" ;; "mfhdf/hrepack/hrepack_all.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/hrepack/hrepack_all.sh" ;; "mfhdf/libsrc/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/libsrc/Makefile" ;; "mfhdf/ncdump/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/ncdump/Makefile" ;; "mfhdf/ncdump/testncdump.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/ncdump/testncdump.sh" ;; "mfhdf/ncgen/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/ncgen/Makefile" ;; "mfhdf/ncgen/testncgen.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/ncgen/testncgen.sh" ;; "mfhdf/nctest/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/nctest/Makefile" ;; "mfhdf/test/Makefile") CONFIG_FILES="$CONFIG_FILES mfhdf/test/Makefile" ;; "mfhdf/test/srcdir_str.h") CONFIG_FILES="$CONFIG_FILES mfhdf/test/srcdir_str.h" ;; "mfhdf/test/testmfhdf.sh") CONFIG_FILES="$CONFIG_FILES mfhdf/test/testmfhdf.sh" ;; "java/Makefile") CONFIG_FILES="$CONFIG_FILES java/Makefile" ;; "java/src/Makefile") CONFIG_FILES="$CONFIG_FILES java/src/Makefile" ;; "java/src/jni/Makefile") CONFIG_FILES="$CONFIG_FILES java/src/jni/Makefile" ;; "java/test/Makefile") CONFIG_FILES="$CONFIG_FILES java/test/Makefile" ;; "java/test/junit.sh") CONFIG_FILES="$CONFIG_FILES java/test/junit.sh" ;; ".classes") CONFIG_COMMANDS="$CONFIG_COMMANDS .classes" ;; *) 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+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || 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 2>/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 ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$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 ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$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=`printf "%s\n" "$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 '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$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 || printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$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"; } && { printf "%s\n" "$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 printf "%s\n" "$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 { printf "%s\n" "/* $configure_input */" >&1 \ && 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$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 printf "%s\n" "/* $configure_input */" >&1 \ && 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 || printf "%s\n" 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) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "h4config":C) echo "modifying hdf/src/h4config.h" sed 's/#\([[:blank:]]\)*define /#\1define H4_/' < hdf/src/h4config.h |\ sed 's/#\([[:blank:]]\)*undef /#\1undef H4_/' > h4config cp h4config hdf/src/h4config.h rm -f h4config echo "Post process libhdf4.settings" sed '/^#/d' < libhdf4.settings > libhdf4.settings.TMP cp libhdf4.settings.TMP libhdf4.settings rm -f libhdf4.settings.TMP ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "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="F77 " # ### BEGIN LIBTOOL CONFIG # 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 # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # 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 # DLL creation program. DLLTOOL=$lt_DLLTOOL # 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 # ### 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 printf "%s\n" "$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: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # 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_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # 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_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # ### END LIBTOOL TAG CONFIG: F77 _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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ## A temporary patch. These code were after where it did ## cp config/netcdf-XXX.h netcdf.h before. ## Moved it here after AC_CONFIG_FILES(... mfhdf/libsrc/netcdf.h ). ## Need a better and correct solution. ## if test "X$BUILD_NETCDF" != "Xyes"; then echo "Renaming \"mfhdf/libsrc/netcdf.h\" to \"mfhdf/libsrc/hdf4_netcdf.h\" ." mv mfhdf/libsrc/netcdf.h mfhdf/libsrc/hdf4_netcdf.h fi chmod 755 hdf/util/h4cc hdf/util/h4redeploy if test "X$BUILD_FORTRAN" = "Xyes"; then chmod 755 hdf/util/h4fc fi ## show the configure settings cat libhdf4.settings ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/configure.ac��������������������������������������������������������������������������0000664�0000000�0000000�00000120561�15030617045�0015322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with autoconf to produce configure. ## ## ## Copyright by The HDF Group. ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code ## distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. ## ## ---------------------------------------------------------------------- ## Initialize configure. ## ## AC_INIT takes the name of the package, the version number, and an ## email address to report bugs. AC_CONFIG_SRCDIR takes a unique file ## as its argument. ## ## NOTE: Do not forget to change the version number here when we do a ## release!!! ## AC_INIT([HDF], [4.3.1], [help@hdfgroup.org]) AC_CONFIG_SRCDIR([hdf/src/atom.c]) AC_CONFIG_HEADERS([hdf/src/h4config.h]) AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4]) ## AM_INIT_AUTOMAKE takes a list of options that should be applied to ## every Makefile.am when automake is run. ## ## NOTE: Don't add subdir-objects here just yet. Modern Automake will ## complain that it's missing, but adding it causes failures on ## older systems. AM_INIT_AUTOMAKE([foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # use silent rules where available - automake 1.11 ## AM_MAINTAINER_MODE determines the behavior of "rebuild rules" that contain ## dependencies for Makefile.in files, configure, config.h, etc. If ## AM_MAINTAINER_MODE is enabled, these files will be rebuilt if out of date. ## When disabled, the autotools build files can get out of sync and the build ## system will not complain or try to regenerate downstream files. ## ## The AM_MAINTAINER_MODE macro also determines whether the ## --(enable|disable)-maintainer-mode configure option is available. When the ## macro is present, with or without a parameter, the option will be added ## to the generated configure script. ## ## In summary: ## ## AM_MAINTAINER_MODE([enable]) ## - Build dependencies ON by default ## - Configure option exists ## ## AM_MAINTAINER_MODE([disable]) ## - Build dependencies OFF by default ## - Configure option exists ## ## AM_MAINTAINER_MODE ## - Build dependencies OFF by default ## - Configure option exists ## ## No AM_MAINTAINER_MODE macro ## - Build dependencies ON by default ## - No configure option to control build dependencies ## ## The biggest concern for us is that version control systems like git ## usually don't preserve dependencies between timestamps, so the build ## system will often think that upstream build files like Makefile.am are ## dirty and that rebuilding needs to occur when it doesn't. This is a problem ## in release branches where we provide the autotools-generated files. Users ## who don't have autoconf, automake, etc. will then have difficulty building ## release branches checked out from git. ## ## By default, maintainer mode is enabled in development branches and disabled ## in release branches. AM_MAINTAINER_MODE([disable]) ## ---------------------------------------------------------------------- ## Set prefix default (install directory) to a directory in the build area. ## This allows multiple src-dir builds within one host. AC_PREFIX_DEFAULT([`pwd`/hdf4]) ## Run post processing on files created by configure. ## * src/h4config.h ## * libhdf4.settings ## ## ([[:blank:]])* matches and captures any whitespace and drops it ## where the \1 is located on the right-hand side so the indenting ## doesn't change. ([[:blank:]] is POSIX-compliant \s) AC_CONFIG_COMMANDS([h4config], [ echo "modifying hdf/src/h4config.h" sed 's/#\([[:blank:]]\)*define /#\1define H4_/' < hdf/src/h4config.h |\ sed 's/#\([[:blank:]]\)*undef /#\1undef H4_/' > h4config cp h4config hdf/src/h4config.h rm -f h4config echo "Post process libhdf4.settings" sed '/^#/d' < libhdf4.settings > libhdf4.settings.TMP cp libhdf4.settings.TMP libhdf4.settings rm -f libhdf4.settings.TMP ]) ## It's possible to configure for a host other than the one on which ## configure is currently running by using the --host=foo flag. ## For machines on which HDF4 is often configured, it can be convenient ## to specify the name of the machine rather than its canonical type. ## ## There are currently no hosts, but if there were they would be ## listed by hostname and the alias would point to a file in ## the config directory: ## ##case $host_alias in ## <some host>) ## host_alias=<config file in config directory> ## ;; ##esac AC_CANONICAL_HOST AC_SUBST([JNIFLAGS]) AC_SUBST([AR_FLAGS]) ## ## FUTURE H4_XXFLAGS GO HERE ## ## ---------------------------------------------------------------------- ## Dump all shell variables values. ## AC_MSG_CHECKING([shell variables initial values]) set >&AS_MESSAGE_LOG_FD AC_MSG_RESULT([done]) ## ---------------------------------------------------------------------- ## Save system information for the library settings file. ## AC_SUBST([UNAME_INFO]) UNAME_INFO=`uname -a` ## ---------------------------------------------------------------------- ## Some platforms have broken basename, and/or xargs programs. Check ## that it actually does what it's supposed to do. Catch this early ## since configure and scripts relies upon them heavily and there's ## no use continuing if it's broken. ## AC_MSG_CHECKING([if basename works]) BASENAME_TEST="`basename /foo/bar/baz/qux/basename_works`" if test $BASENAME_TEST != "basename_works"; then AC_MSG_ERROR([basename program doesn't work]) else AC_MSG_RESULT([yes]) fi ## xargs basename used in configure to get the CC_BASENAME value AC_MSG_CHECKING([if xargs works]) XARGS_TEST="`echo /foo/bar/baz/qux/xargs_works | xargs basename`" if test $XARGS_TEST != "xargs_works"; then AC_MSG_ERROR([xargs program doesn't work]) else AC_MSG_RESULT([yes]) fi ## ---------------------------------------------------------------------- ## Check that the cache file was build on the same host as what we're ## running on now. ## AC_CACHE_CHECK([for cached host], [hdf4_cv_host], [hdf4_cv_host="none"]); if test $hdf4_cv_host = "none"; then hdf4_cv_host=$host elif test $hdf4_cv_host != $host; then AC_MSG_ERROR([ The config.cache file was generated on $hdf4_cv_host but this is $host. Please remove that file and try again. config.cache file is invalid]) fi ## Source any special files that we need. These files normally aren't ## present but can be used by the maintainers to fine tune things like ## turning on debug or profiling flags for the compiler. The search order ## is: ## ## CPU-VENDOR-OS ## VENDOR-OS ## CPU-OS ## CPU-VENDOR ## OS ## VENDOR ## CPU ## ## If the `OS' ends with a version number then remove it. For instance, ## `freebsd3.1' would become `freebsd' ## case "$host_os" in aix4.*) host_os_novers="aix4.x" ;; aix5.*) host_os_novers="aix5.x" ;; darwin10.*) host_os_novers="darwin10.x" ;; darwin11.*) host_os_novers="darwin11.x" ;; darwin12.*) host_os_novers="darwin12.x" ;; freebsd*) host_os_novers="freebsd" ;; solaris2.*) host_os_novers="solaris2.x" ;; *) host_os_novers="$host_os" ;; esac host_config="none" for f in $host_cpu-$host_vendor-$host_os \ $host_cpu-$host_vendor-$host_os_novers \ $host_vendor-$host_os \ $host_vendor-$host_os_novers \ $host_cpu-$host_os \ $host_cpu-$host_os_novers \ $host_cpu-$host_vendor \ $host_os \ $host_os_novers \ $host_vendor \ $host_cpu ; do AC_MSG_CHECKING([for config $f]) if test -f "$srcdir/config/$f"; then host_config=$srcdir/config/$f AC_MSG_RESULT([found]) break fi AC_MSG_RESULT([no]) done if test "X$host_config" != "Xnone"; then CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`" F77_BASENAME="`echo $F77 | cut -f1 -d' ' | xargs basename 2>/dev/null`" . $host_config fi ## ====================================================================== ## Checks for netCDF-2.3.2 support ## ====================================================================== # NOTE! We disable Fortran netCDF APIs and their testing when # --disable-netcdf is used to avoid conflicts # Define a proper variable to be used in mfhdf/testfortran.sh.in to run # the netCDF Fortran APIs test program "ftest" AC_SUBST(TEST_FORTRAN_NETCDF) TEST_FORTRAN_NETCDF="yes" AC_ARG_ENABLE([netcdf], [AS_HELP_STRING([--enable-netcdf], [HDF4 builds replacement netCDF 2.3.2 API calls that are exported (e.g., ncopen()). Enabling this option uses the original netCDF names when building these functions. Disable prefixes them with 'sd_' to avoid name clashes. This does NOT affect building the HDF4-built netCDF tools ncdump and ncgen, nor does it disable any HDF4 functionality - this option only affects API call names. Disabling this option disables building the netCDF Fortran wrappers (they will not be built with either the original or sd_ prefixed names). [default=yes (HDF4-built netCDF API calls will be exported undecorated)]])],, [enableval="yes"]) case "$enableval" in yes) BUILD_NETCDF="yes" AC_DEFINE([HAVE_NETCDF], [1], [Define if we export HDF4-built unmangled netCDF 2.3.2 API calls]) ;; no) BUILD_NETCDF="no" TEST_FORTRAN_NETCDF="no" ;; esac AM_CONDITIONAL([HDF_BUILD_NETCDF], [test "X$BUILD_NETCDF" = "Xyes"]) AC_SUBST([BUILD_NETCDF]) # It is also possible to disable building the netCDF tools ncdump and ncgen. # Some users may want to do this since our tools will conflict with netCDF's # if they are installed. This will also disable building nctest. AC_ARG_ENABLE([netcdf-tools], [AS_HELP_STRING([--enable-netcdf-tools], [Build HDF4 versions of NetCDF tools (ncgen, ncdump) [default=yes]])],, [enableval="yes"]) case "$enableval" in yes) BUILD_NETCDF_TOOLS="yes" ;; no) BUILD_NETCDF_TOOLS="no" ;; esac AM_CONDITIONAL([HDF_BUILD_NETCDF_TOOLS], [test "X$BUILD_NETCDF_TOOLS" = "Xyes"]) AC_SUBST([BUILD_NETCDF_TOOLS]) ## ====================================================================== ## Checks for programs ## ====================================================================== AC_PROG_CC AC_PROG_CPP ## ---------------------------------------------------------------------- ## Check if they would like the Fortran interface compiled ## ## This interface is UNSAFE on 64-bit systems as the interface will ## attempt to store pointers in 32-bit integers. ## AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--enable-fortran], [Build Fortran into library. This interface is unsafe on 64-bit systems. [default=no]])],, [enableval="no"]) case "$enableval" in yes) BUILD_FORTRAN="yes" AC_PROG_F77 AC_F77_WRAPPERS if test "X$F77" = "X"; then BUILD_FORTRAN="no" fi ;; no) BUILD_FORTRAN="no" F77="no" ;; esac AM_CONDITIONAL([HDF_BUILD_FORTRAN], [test "X$BUILD_FORTRAN" = "Xyes"]) AC_SUBST([BUILD_FORTRAN]) ## ------------------------------------------------------------------------- ## Build static libraries by default. Furthermore, fortran shared libraries ## are unsupported. Disallow a user from enabling both shared libraries and ## fortran. if test "X${enable_shared}" != "Xyes"; then enable_shared="no" fi if test "X${enable_shared}" = "Xyes"; then if test "X${BUILD_FORTRAN}" = "Xyes"; then AC_MSG_ERROR([Cannot build shared fortran libraries. Please configure with --disable-fortran flag.]) fi fi ## ---------------------------------------------------------------------- ## Check if they would like the Java native interface (JNI) compiled ## AC_SUBST([H4_JAVACFLAGS]) AC_SUBST([H4_JAVAFLAGS]) ## This needs to be exposed for the library info file even if Java is disabled. AC_SUBST([HDF_JAVA]) ## Default is no Java HDF_JAVA=no AC_SUBST([H4_CLASSPATH]) H4_CLASSPATH="" AC_MSG_CHECKING([if Java JNI interface enabled]) AC_ARG_ENABLE([java], [AS_HELP_STRING([--enable-java], [Compile the Java JNI interface [default=no]])], [HDF_JAVA=$enableval]) if test "X$HDF_JAVA" = "Xyes"; then if test "X${enable_shared}" != "Xno"; then AC_MSG_RESULT([yes]) if test "X$CLASSPATH" = "X"; then H4_CLASSPATH=".:$srcdir/java/lib" else H4_CLASSPATH=".:$CLASSPATH:$srcdir/java/lib" fi ## Checks for programs. AX_JAVA_OPTIONS H4_JAVACFLAGS=$JAVACFLAGS H4_JAVAFLAGS=$JAVAFLAGS AX_PROG_JAVAC AX_PROG_JAVA AX_PROG_JAR AX_PROG_JAVADOC ## Find the include directories needed for building JNI code AX_JNI_INCLUDE_DIR() for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS do JNIFLAGS="$JNIFLAGS -I$JNI_INCLUDE_DIR" done ## Find junit for testing the JNI code AX_CHECK_CLASSPATH() CLASSPATH_ENV=$H4_CLASSPATH AX_CHECK_JUNIT() AX_CHECK_JAVA_HOME AC_MSG_RESULT([yes]) else AC_MSG_ERROR([Java requires shared libraries to be built]) HDF_JAVA="no" AC_MSG_RESULT([no]) fi else AC_MSG_RESULT([no]) fi AC_PROG_LN_S ## ---------------------------------------------------------------------- ## Check which archiving tool to use. This needs to be done before ## the LT_INIT macro. ## if test -z "$AR"; then AC_CHECK_PROGS([AR], [ar xar], [:], [$PATH]) fi AC_SUBST([AR]) # Set the default ar flags to cr # The Automake default is to use cru and the 'u' causes ar # to emit warnings on some platforms. AR_FLAGS=cr ## Export the AR macro so that it will be placed in the libtool file ## correctly. export AR AC_PROG_MAKE_SET AC_PROG_INSTALL AC_CHECK_PROG([DIFF], [diff], [diff -w]) AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo]) AC_CHECK_PROG([NEQN], [neqn], [neqn]) AC_CHECK_PROG([TBL], [tbl], [tbl]) AC_SUBST([DIFF]) AC_SUBST([STATIC_SHARED]) AC_SUBST([SHARED_EXTENSION]) AC_SUBST([enable_shared]) AC_SUBST([enable_static]) AC_SUBST([STATIC_EXEC]) STATIC_EXEC=no AC_SUBST([LT_STATIC_EXEC]) ## ---------------------------------------------------------------------- ## Check if they would like to enable building doxygen files ## ## This needs to be exposed for the library info file. AC_SUBST([HDF4_DOXYGEN]) ## Default is to not build DOXYGEN HDF4_DOXYGEN=no AC_MSG_CHECKING([if building doxygen is enabled]) AC_ARG_ENABLE([doxygen], [AS_HELP_STRING([--enable-doxygen], [Compile the HDF4 doxygen files [default=no]])], [HDF4_DOXYGEN=$enableval]) AC_MSG_RESULT([$HDF4_DOXYGEN]) ## Check if they would like to enable doxygen warnings as errors ## ## This needs to be exposed for the library info file. AC_SUBST([HDF4_DOXY_WARNINGS]) ## Default is to consider doxygen warnings as errors DOXY_ERR=yes AC_MSG_CHECKING([if doxygen warnings as errors is enabled]) AC_ARG_ENABLE([doxygen-errors], [AS_HELP_STRING([--enable-doxygen-errors], [Error on HDF4 doxygen warnings [default=yes]])], [DOXY_ERR=$enableval]) if test "X$DOXY_ERR" = "Xyes"; then HDF4_DOXY_WARNINGS="FAIL_ON_WARNINGS" else HDF4_DOXY_WARNINGS="NO" fi AC_MSG_RESULT([$HDF4_DOXY_WARNINGS]) if test "X$HDF4_DOXYGEN" = "Xyes"; then DX_DOXYGEN_FEATURE(ON) DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) DX_CHI_FEATURE(OFF) DX_MAN_FEATURE(ON) DX_RTF_FEATURE(OFF) DX_XML_FEATURE(OFF) DX_PDF_FEATURE(OFF) DX_PS_FEATURE(OFF) AC_SUBST([DOXYGEN_PACKAGE]) AC_SUBST([DOXYGEN_VERSION_STRING]) AC_SUBST([DOXYGEN_DIR]) AC_SUBST([DOXYGEN_INCLUDE_ALIASES]) AC_SUBST([DOXYGEN_PROJECT_LOGO]) AC_SUBST([DOXYGEN_PROJECT_BRIEF]) AC_SUBST([DOXYGEN_INPUT_DIRECTORY]) AC_SUBST([DOXYGEN_OPTIMIZE_OUTPUT_FOR_C]) AC_SUBST([DOXYGEN_MACRO_EXPANSION]) AC_SUBST([DOXYGEN_OUTPUT_DIRECTORY]) AC_SUBST([DOXYGEN_EXAMPLES_DIRECTORY]) AC_SUBST([DOXYGEN_LAYOUT_FILE]) AC_SUBST([DOXYGEN_HTML_HEADER]) AC_SUBST([DOXYGEN_HTML_FOOTER]) AC_SUBST([DOXYGEN_HTML_EXTRA_STYLESHEET]) AC_SUBST([DOXYGEN_HTML_EXTRA_FILES]) AC_SUBST([DOXYGEN_TAG_FILE]) AC_SUBST([DOXYGEN_SERVER_BASED_SEARCH]) AC_SUBST([DOXYGEN_EXTERNAL_SEARCH]) AC_SUBST([DOXYGEN_SEARCHENGINE_URL]) AC_SUBST([DOXYGEN_STRIP_FROM_PATH]) AC_SUBST([DOXYGEN_STRIP_FROM_INC_PATH]) AC_SUBST([DOXYGEN_PREDEFINED]) # SRCDIR Environment variables used inside doxygen macro for the source location: DOXYGEN_PACKAGE=${PACKAGE_NAME} DOXYGEN_VERSION_STRING=${PACKAGE_VERSION} DOXYGEN_DIR='$(SRCDIR)/doxygen' DOXYGEN_INCLUDE_ALIASES_PATH='$(SRCDIR)/doxygen' DOXYGEN_INCLUDE_ALIASES='$(SRCDIR)/doxygen/aliases' DOXYGEN_VERBATIM_VARS='DOXYGEN_INCLUDE_ALIASES' DOXYGEN_PROJECT_LOGO='$(SRCDIR)/doxygen/img/HDFG-logo.png' DOXYGEN_PROJECT_BRIEF='API Reference' DOXYGEN_INPUT_DIRECTORY='$(SRCDIR) $(SRCDIR)/doxygen/dox' DOXYGEN_OPTIMIZE_OUTPUT_FOR_C=YES DOXYGEN_MACRO_EXPANSION=YES DOXYGEN_OUTPUT_DIRECTORY=hdf4lib_docs DOXYGEN_EXAMPLES_DIRECTORY='$(SRCDIR)' DOXYGEN_LAYOUT_FILE='$(SRCDIR)/doxygen/hdf4doxy_layout.xml' DOXYGEN_HTML_HEADER='$(SRCDIR)/doxygen/hdf4_header.html' DOXYGEN_HTML_FOOTER='$(SRCDIR)/doxygen/hdf4_footer.html' DOXYGEN_HTML_EXTRA_STYLESHEET='$(SRCDIR)/doxygen/hdf4doxy.css' DOXYGEN_HTML_EXTRA_FILES='$(SRCDIR)/doxygen/hdf4_navtree_hacks.js' DOXYGEN_TAG_FILE=hdf4.tag DOXYGEN_SERVER_BASED_SEARCH=NO DOXYGEN_EXTERNAL_SEARCH=NO DOXYGEN_SEARCHENGINE_URL= DOXYGEN_STRIP_FROM_PATH='$(SRCDIR)' DOXYGEN_STRIP_FROM_INC_PATH='$(SRCDIR)' DOXYGEN_PREDEFINED='H4_DOXYGEN' DOXYGEN_WARN_AS_ERROR=${HDF4_DOXY_WARNINGS} DX_INIT_DOXYGEN([HDF4], [./doxygen/Doxyfile], [hdf4lib_docs]) fi AM_CONDITIONAL([BUILD_DOXYGEN_CONDITIONAL], [test "X$HDF4_DOXYGEN" = "Xyes"]) ## ====================================================================== ## Libtool initialization ## ====================================================================== ## disable-shared sets the default libtool behavior to disable shared libs LT_INIT([disable-shared]) LT_OUTPUT ## ---------------------------------------------------------------------- ## Check if we should install only statically linked executables. ## This check needs to occur after libtool is initialized because ## we check a libtool cache value and may issue a warning based ## on its result. AC_MSG_CHECKING([if we should install only statically linked executables]) AC_ARG_ENABLE([static_exec], [AS_HELP_STRING([--enable-static-exec], [Install only statically linked executables [default=no]])], [STATIC_EXEC=$enableval]) if test "X$STATIC_EXEC" = "Xyes"; then AC_MSG_RESULT([yes]) ## Issue a warning if -static flag is not supported. if test "X$lt_cv_prog_compiler_static_works" = "Xno"; then AC_MSG_WARN([-static flag not supported on this system; executable won't statically link shared system libraries]) fi LT_STATIC_EXEC="-all-static" else AC_MSG_RESULT([no]) LT_STATIC_EXEC="" fi AC_SUBST([LT_STATIC_EXEC]) ## ====================================================================== ## Checks for libraries ## ====================================================================== ## ---------------------------------------------------------------------- ## Fake --with-xxx option to allow us to create a help message for the ## following --with-xxx options which can take either a =DIR or =INC,LIB ## specifier. ## AC_ARG_WITH([fnord], [ For the following --with-xxx options, you can specify where the header files and libraries are in two different ways: --with-xxx=INC,LIB - Specify individually the include directory and library directory separated by a comma --with-xxx=DIR - Specify only the directory which contains the include/ and lib/ subdirectories ]) ## ---------------------------------------------------------------------- ## Is the GNU zlib present? It has a header file `zlib.h' and a library ## `-lz' and their locations might be specified with the `--with-zlib' ## command-line switch. The value is an include path and/or a library path. ## If the library path is specified then it must be preceded by a comma. AC_ARG_WITH([zlib], [AS_HELP_STRING([--with-zlib=DIR], [Use zlib library [default=yes]])],, [withval=yes]) case "X-$withval" in X-yes) HAVE_ZLIB="yes" AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"], [unset HAVE_ZLIB]) if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB]) fi if test -z "$HAVE_ZLIB"; then if test -n "$HDF4_CONFIG_ABORT"; then AC_MSG_ERROR([couldn't find zlib library]) fi else AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"]) fi ;; X-|X-no|X-none) HAVE_ZLIB="no" AC_MSG_ERROR([zlib library required to build HDF4]) ;; *) HAVE_ZLIB="yes" case "$withval" in *,*) zlib_inc="`echo $withval | cut -f1 -d,`" zlib_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then zlib_inc="$withval/include" zlib_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$zlib_inc" = "X/usr/include"; then zlib_inc="" fi if test "X$zlib_lib" = "X/usr/lib"; then zlib_lib="" fi if test -n "$zlib_inc"; then CPPFLAGS="$CPPFLAGS -I$zlib_inc" fi AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"], [unset HAVE_ZLIB]) if test -n "$zlib_lib"; then LDFLAGS="$LDFLAGS -L$zlib_lib" fi if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB]) fi if test -z "$HAVE_ZLIB"; then AC_MSG_ERROR([couldn't find zlib library]) else AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"]) fi ;; esac ## ---------------------------------------------------------------------- ## Is the JPEG library present? AC_ARG_WITH([jpeg], [AS_HELP_STRING([--with-jpeg=DIR], [Use jpeg library [default=yes]])],, [withval=yes]) case "X-$withval" in X-yes) HAVE_JPEG="yes" AC_CHECK_HEADERS([jpeglib.h], [HAVE_JPEG_H="yes"], [unset HAVE_JPEG]) if test "x$HAVE_JPEG" = "xyes" -a "x$HAVE_JPEG_H" = "xyes"; then AC_CHECK_LIB([jpeg], [jpeg_start_decompress],, [unset HAVE_JPEG]) fi if test -z "$HAVE_JPEG"; then AC_MSG_ERROR([couldn't find jpeg library]) fi ;; X-|X-no|X-none) HAVE_JPEG="no" AC_MSG_ERROR([jpeg library required to build HDF4]) ;; *) HAVE_JPEG="yes" case "$withval" in *,*) jpeg_inc="`echo $withval | cut -f1 -d,`" jpeg_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then jpeg_inc="$withval/include" jpeg_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$jpeg_inc" = "X/usr/include"; then jpeg_inc="" fi if test "X$jpeg_lib" = "X/usr/lib"; then jpeg_lib="" fi if test -n "$jpeg_inc"; then CPPFLAGS="$CPPFLAGS -I$jpeg_inc" fi AC_CHECK_HEADERS([jpeglib.h], [HAVE_JPEG_H="yes"], [unset HAVE_JPEG]) if test -n "$jpeg_lib"; then LDFLAGS="$LDFLAGS -L$jpeg_lib" fi if test "x$HAVE_JPEG" = "xyes" -a "x$HAVE_JPEG_H" = "xyes"; then AC_CHECK_LIB([jpeg], [jpeg_start_decompress],, [unset HAVE_JPEG]) fi if test -z "$HAVE_JPEG"; then AC_MSG_ERROR([couldn't find jpeg library]) fi ;; esac ## ---------------------------------------------------------------------- ## Is the szip library present? AC_SUBST(USE_COMP_SZIP) USE_COMP_SZIP="no" AC_SUBST(SZIP_HAS_ENCODER) SZIP_HAS_ENCODER="no" AC_ARG_WITH([szlib], [AS_HELP_STRING([--with-szlib=DIR], [Use szlib library [default=no]])],, [withval=no]) case "X-$withval" in X-yes) HAVE_SZIP="yes" AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"], [unset HAVE_SZIP]) if test "x$HAVE_SZIP" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZIP]) fi if test -z "$HAVE_SZIP"; then AC_MSG_ERROR([couldn't find szlib library]) else USE_COMP_SZIP="yes" fi ;; X-|X-no|X-none) HAVE_SZIP="no" AC_MSG_CHECKING([for szlib]) AC_MSG_RESULT([suppressed]) SZIP_INFO="${SZIP_INFO}disabled" ;; *) HAVE_SZIP="yes" case "$withval" in *,*) szip_inc="`echo $withval | cut -f1 -d,`" szip_lib="`echo $withval | cut -f2 -d, -s`" ;; *) if test -n "$withval"; then szip_inc="$withval/include" szip_lib="$withval/lib" fi ;; esac ## Trying to include -I/usr/include and -L/usr/lib is redundant and ## can mess some compilers up. if test "X$szip_inc" = "X/usr/include"; then szip_inc="" fi if test "X$szip_lib" = "X/usr/lib"; then szip_lib="" fi if test -n "$szip_inc"; then CPPFLAGS="$CPPFLAGS -I$szip_inc" fi AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"], [unset HAVE_SZIP]) if test -n "$szip_lib"; then LDFLAGS="$LDFLAGS -L$szip_lib" fi if test "x$HAVE_SZIP" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZIP]) fi if test -z "$HAVE_SZIP"; then AC_MSG_ERROR([couldn't find szlib library]) else USE_COMP_SZIP="yes" fi ;; esac ## Check to see if SZIP has encoder if test "X$HAVE_SZIP" = "Xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then ## SZLIB library is available. Check if it can encode. AC_MSG_CHECKING([for szlib encoder]) ## Set LD_LIBRARY_PATH so encoder test can find the library and run. if test -z "$LD_LIBRARY_PATH"; then export LD_LIBRARY_PATH="$szip_lib" else export LD_LIBRARY_PATH="${szip_lib}:$LD_LIBRARY_PATH" fi AC_SUBST([LL_PATH]) LL_PATH="$LD_LIBRARY_PATH" AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdlib.h> #include <szlib.h> int main(void) { /* SZ_encoder_enabled returns 1 if encoder is present */ if (SZ_encoder_enabled() == 1) exit(0); else exit(1); } ]])],[CAN_ENCODE="yes"],[CAN_ENCODE="no"],[]) ## Report szip encoder test results if test "X$CAN_ENCODE" = "Xyes"; then AC_MSG_RESULT([yes]) fi if test "X$CAN_ENCODE" = "Xno"; then AC_MSG_RESULT([no]) fi ## Add "szip" to external filter list if test "X$CAN_ENCODE" = "Xyes"; then if test "X$SZIP_INFO" != "X"; then SZIP_INFO="${SZIP_INFO}" fi SZIP_INFO="${SZIP_INFO}enabled with encoder" fi if test "X$CAN_ENCODE" = "Xno"; then if test "X$SZIP_INFO" != "X"; then SZIP_INFO="${SZIP_INFO}" fi SZIP_INFO="${SZIP_INFO}enabled with decoder only" fi ## Create macro to specify if encoder is present if test "X$CAN_ENCODE" = "Xyes"; then AC_DEFINE([HAVE_SZIP_ENCODER], [1], [Define if szip has encoder]) SZIP_HAS_ENCODER="yes" fi fi AC_SUBST([SZIP_INFO]) AC_SUBST([SZIP_HAS_ENCODER]) AM_CONDITIONAL([BUILD_SHARED_SZIP_CONDITIONAL], [test "X$USE_COMP_SZIP" = "Xyes" && test "X$LL_PATH" != "X"]) ## ====================================================================== ## Set POSIX level ## ====================================================================== ## This is needed so strdup, etc. are exposed properly ## ## POSIX feature information can be found in the gcc manual at: ## http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html CPPFLAGS="-D_POSIX_C_SOURCE=200809L $CPPFLAGS" ## ====================================================================== ## Checks for headers ## ====================================================================== AC_CHECK_HEADERS([fcntl.h unistd.h]) AC_CHECK_HEADERS([arpa/inet.h netinet/in.h]) AC_CHECK_HEADERS([sys/file.h sys/resource.h sys/stat.h sys/time.h sys/types.h sys/wait.h]) ## Special MinGW checks case "`uname`" in MINGW*) # Check for Winsock library AC_CHECK_LIB([ws2_32], [htonl]) AC_DEFINE([HAVE_WIN32_API], [1], [Define if we export HDF4-built unmangled netCDF 2.3.2 API calls]) AC_DEFINE([F77_FUNC(name,NAME)], [name ## _], [Define H4_F77_FUNC as name ##]) ;; esac ## ---------------------------------------------------------------------- ## XDR grew up in a world where long integers were 32 bits in size. Now ## that many platforms have 64-bit longs, we need some hacks to paper ## over the differences in sizes, particularly on big-endian machines. ## AC_CHECK_SIZEOF([long]) ## ---------------------------------------------------------------------- AC_PROG_CC_C_O if test "X$BUILD_FORTRAN" = "Xyes"; then AC_PROG_F77_C_O fi ## ---------------------------------------------------------------------- ## Set some variables for general configuration information to be saved ## and installed with the libraries. ## ## HDF4 version from the first line of the README.md file. H4_VERSION="`cut -d' ' -f3 $srcdir/README.md | head -1`" AC_SUBST([H4_VERSION]) ## Configuration date AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`" ## User doing the configuration AC_SUBST([CONFIG_USER]) CONFIG_USER="`whoami`@`hostname`" ## Configuration mode (production, development, etc) AC_SUBST([CONFIG_MODE]) AC_C_BIGENDIAN ## Are we building this in debug or production mode? AC_MSG_CHECKING([for build mode]) AC_ARG_ENABLE([production], [AS_HELP_STRING([--enable-production], [Determines how to run the compiler.])]) case "X-$enable_production" in X-|X-yes) AC_MSG_RESULT([production]) CONFIG_MODE=production CFLAGS="$CFLAGS $PROD_CFLAGS" FFLAGS="$FFLAGS $PROD_FFLAGS" CPPFLAGS="$CPPFLAGS -DNDEBUG $PROD_CPPFLAGS" ;; X-no) AC_MSG_RESULT([development]) CONFIG_MODE=development CFLAGS="$CFLAGS $DEBUG_CFLAGS" FFLAGS="$FFLAGS $DEBUG_FFLAGS" CPPFLAGS="$CPPFLAGS -UNDEBUG $DEBUG_CPPFLAGS" ;; *) AC_MSG_RESULT([user-defined]) CONFIG_MODE="user-defined (most CFLAGS, etc. set by user)" ;; esac ## ====================================================================== ## Checks for library functions ## ====================================================================== AC_CHECK_LIB([m], [ceil]) AC_CHECK_FUNCS([fork getrusage system wait]) ## ====================================================================== ## Checks for system services ## ====================================================================== ## Copy NetCDF header files. # ## FIXME: This is code borrowed from the old HDF4 configure. ## These header files should probably be generated by autoconf instead ## of being copied depending upon the host. case "$host" in *-linux*|*-k*bsd*-gnu|*-gnu*)BAR="linux" ;; *-openbsd*) BAR="fbsd" ;; *-freebsd*) BAR="fbsd" ;; *-openbsd*) BAR="fbsd" ;; *-ibm-aix*) BAR="aix" ;; sparc64-*-solaris2*) BAR="solaris64" ;; *-*-solaris2*) BAR="solaris" ;; *-apple*) BAR="apple" ;; *-pc-cygwin*) BAR="linux" ;; *-mingw*) BAR="linux" ;; *) echo "*** unknown host $host!"; exit 1 ;; esac src_files="" src_files="`echo $src_files | sed -e s/FOO/${BAR}/g`" for config_file in $src_files; do src_file="${srcdir}/`echo $config_file | sed -e s/:.*$//`" target_file="`echo $config_file | sed -e s/^[[^:]]*://g`" if test ! -r ${src_file}; then echo '***' "${progname}: cannot copy file \"${target_file}\"," 1>&2 echo '***' "since the file \"${src_file}\" does not exist." 1>&2 exit 1 fi ## this sed command emulates the dirname command dstdir=`echo "$target_file" | sed -e 's,[[^/]]*$,,;s,/$,,;s,^$,.,'` ## Create directory for the target_file if it's not there. if test ! -d $dstdir; then ${srcdir}/bin/mkinstalldirs $dstdir fi echo "Copying \"${src_file}\" to \"${target_file}\" ." cp ${src_file} ${target_file} if test ! -r ${target_file}; then echo '***' "${progname}: cannot copy file \"${target_file}\"," 1>&2 exit 1 fi done ## ------------------------------------------------------------------------ ## Check to see if libtool has enabled shared libraries. Set a conditional ## as some Makefiles will build based on availability of shared libraries. if (./libtool --features | grep '^enable shared libraries' > /dev/null); then enable_shared=yes else enable_shared=no fi ## ------------------------------------------------------------------------ ## Specify shared library extension the host machine should recognize. case "$host_os" in darwin*) SHARED_EXTENSION="dylib" ;; *) SHARED_EXTENSION="so" ;; esac ## We don't need to say when we're entering directories if we're using ## GNU make because make does it for us. if test "X$GMAKE" = "Xyes"; then AC_SUBST([SETX]) SETX=":" else AC_SUBST([SETX]) SETX="set -x" fi AM_CONDITIONAL([HDF_BUILD_SHARED], [test "X$enable_shared" = "Xyes"]) ## Compiler with version information. This consists of the full path ## name of the compiler and the reported version number. AC_SUBST([CC_VERSION]) ## Strip anything that looks like a flag off of $CC CC_NOFLAGS=`echo $CC | sed 's/ -.*//'` if `echo $CC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then CC_VERSION="$CC" else CC_VERSION="$CC"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$CC_NOFLAGS; then CC_VERSION="$x/$CC" break fi done fi ## ---------------------------------------------------------------------- ## ## If --enable-static-exec and are specified together, there will be ld failures for ## "attempted static link of dynamic object" when the tools are built. This check ## will prevent that error during configure instead. It could go with the other ## --enable-static-exec checks, but since enable_static is set by default later in ## the configure process this check has to be delayed. if test "X$STATIC_EXEC" = "Xyes"; then if test "X${enable_static}" != "Xyes"; then AC_MSG_ERROR([--enable-static-exec flag to build static executables requires static libraries. Please configure with --enable-static flag.]) fi fi ## This part doesn't work yet since HDF4 config files do not contain ## information for cc_vendor and cc_version as HDF4 similar files do. ## Needs to be fixed EIP 2010-01-21 ## if test -n "$cc_vendor" && test -n "$cc_version"; then ## CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)" ## fi if test -n "$cc_version_info"; then CC_VERSION="$CC_VERSION ( $cc_version_info)" fi ## Fortran compiler with version information. This consists of the full path ## name of the compiler and the reported version number. AC_SUBST([F77_VERSION]) ## Strip anything that looks like a flag off of $F77 F77_NOFLAGS=`echo $F77 | sed 's/ -.*//'` if `echo $F77_NOFLAGS | grep ^/ >/dev/null 2>&1`; then F77_VERSION="$F77" else F77_VERSION="$F77"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$F77_NOFLAGS; then F77_VERSION="$x/$F77" break fi done fi if test -n "$fc_version_info"; then F77_VERSION="$F77_VERSION ( $fc_version_info)" fi ## This part doesn't work yet since HDF4 config files do not contain ## information for fortran_vendor and fortran_version. ## Needs to be fixed EIP 2010-01-21 ## if test -n "$fortran_vendor" && test -n "$fortran_version"; then ## F77_VERSION="$F77_VERSION ($fortran_vendor-$fortran_version)" ## fi AC_SUBST([JAVA_VERSION]) ## Strip anything that looks like a flag off of $JAVA JAVA_NOFLAGS=`echo $JAVA | sed 's/ -.*//'` if `echo $JAVA_NOFLAGS | grep ^/ >/dev/null 2>&1`; then JAVA_VERSION="$JAVA" else JAVA_VERSION="$JAVA"; for x in `echo $PATH | sed -e 's/:/ /g'`; do if test -x $x/$JAVA_NOFLAGS; then JAVA_VERSION="$x/$JAVA" break fi done fi java_version_info=`$JAVA -version 2>&1 |\ grep 'version' | sed -e 's/version "//' | sed -e 's/"//'` if test -n "$java_version_info"; then JAVA_VERSION="$JAVA_VERSION ($java_version_info)" fi AM_CONDITIONAL([BUILD_JAVA_CONDITIONAL], [test "X$HDF_JAVA" = "Xyes"]) ## ---------------------------------------------------------------------- ## Some platforms require that all symbols are resolved when a library ## is linked. We can use the -no-undefined flag to tell libtool that ## it will be able to build shared libraries on these architectures, ## as it will not do so by default. ## if test "X${enable_shared}" = "Xyes"; then AC_MSG_CHECKING([if libtool needs -no-undefined flag to build shared libraries]) case "`uname`" in CYGWIN*|MINGW*|AIX*) ## Add in the -no-undefined flag to LDFLAGS for libtool. AC_MSG_RESULT([yes]) LDFLAGS="$LDFLAGS -no-undefined" ;; *) ## Don't add in anything. AC_MSG_RESULT([no]) ;; esac fi ## ---------------------------------------------------------------------- ## Enable deprecated public API symbols ## AC_SUBST([DEPRECATED_SYMBOLS]) AC_MSG_CHECKING([if deprecated public symbols are available]); AC_ARG_ENABLE([deprecated-symbols], [AS_HELP_STRING([--enable-deprecated-symbols], [Enable deprecated public API symbols [default=yes]])], [DEPREC_SYMBOLS=$enableval], [DEPREC_SYMBOLS=yes]) case "X-$DEPREC_SYMBOLS" in X-yes) AC_MSG_RESULT([yes]) DEPRECATED_SYMBOLS=yes ;; X-no|*) AC_MSG_RESULT([no]) DEPRECATED_SYMBOLS=no AC_DEFINE([NO_DEPRECATED_SYMBOLS], [1], [Define if deprecated public API symbols are disabled]) ;; esac AC_CONFIG_FILES([Makefile doxygen/Doxyfile libhdf4.settings hdf/Makefile hdf/fortran/Makefile hdf/src/Makefile hdf/test/Makefile hdf/test/srcdir_str.h hdf/util/Makefile hdf/util/h4cc hdf/util/h4fc hdf/util/h4redeploy hdf/util/testutil.sh mfhdf/fortran/ftest.f mfhdf/fortran/jackets.c mfhdf/fortran/netcdf.inc mfhdf/libsrc/netcdf.h mfhdf/Makefile mfhdf/dumper/Makefile mfhdf/dumper/testhdp.sh mfhdf/fortran/Makefile mfhdf/fortran/testfortran.sh mfhdf/hdfimport/Makefile mfhdf/hdfimport/testutil.sh mfhdf/hdiff/Makefile mfhdf/hdiff/testhdiff.sh mfhdf/hrepack/Makefile mfhdf/hrepack/hrepack.sh mfhdf/hrepack/hrepack_all.sh mfhdf/libsrc/Makefile mfhdf/ncdump/Makefile mfhdf/ncdump/testncdump.sh mfhdf/ncgen/Makefile mfhdf/ncgen/testncgen.sh mfhdf/nctest/Makefile mfhdf/test/Makefile mfhdf/test/srcdir_str.h mfhdf/test/testmfhdf.sh java/Makefile java/src/Makefile java/src/jni/Makefile java/test/Makefile java/test/junit.sh]) AC_CONFIG_COMMANDS([.classes], [], [$MKDIR_P java/src/.classes; $MKDIR_P java/test/.classes]) AC_OUTPUT ## A temporary patch. These code were after where it did ## cp config/netcdf-XXX.h netcdf.h before. ## Moved it here after AC_CONFIG_FILES(... mfhdf/libsrc/netcdf.h ). ## Need a better and correct solution. ## if test "X$BUILD_NETCDF" != "Xyes"; then echo "Renaming \"mfhdf/libsrc/netcdf.h\" to \"mfhdf/libsrc/hdf4_netcdf.h\" ." mv mfhdf/libsrc/netcdf.h mfhdf/libsrc/hdf4_netcdf.h fi chmod 755 hdf/util/h4cc hdf/util/h4redeploy if test "X$BUILD_FORTRAN" = "Xyes"; then chmod 755 hdf/util/h4fc fi ## show the configure settings cat libhdf4.settings �����������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0013574�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/HDF-4.2-to-4.3-migration.md�������������������������������������������������������0000664�0000000�0000000�00000031534�15030617045�0017737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# HDF 4.2 to 4.3 Migration Guide For the past few decades, HDF4 has deployed almost all of the library's header files, both public and private. This deployment scheme makes even trivial refactoring and bug fixing difficult to accomplish without breaking binary compatibility when "private" headers change. HDF 4.3.0 will finally separate the public and private APIs in both the single- and multi-file libraries, allowing us to begin the process of cleaning up several decades of accumulated technical debt. This document lists the changes to what we deploy and how that may impact code that uses HDF4. There is also a list of removed symbols, organized by header file in the appendices. Note that this is not a complete guide to changes in 4.3.0. It's only intended to help people navigate the public/private API split. Please see the release notes for a comprehensive list of other changes, e.g., build system changes. ## Changes in HDF 4.3.0 * Private header files are no longer distributed. A complete list can be found below. * The error-handling macros have been removed from `herr.h`. * Most of `hbitio.h` has been moved to a private header file. * Most of `hfile.h` has been moved to a private header file. * `hdf.h` no longer pulls in the `hdfi.h` internal header file. See below for the implications of this. ## Migration Steps Most users should not have to make any changes to their applications, as long as they only use the public API as documented in the HDF4 Reference Manual. The single- and multi-file API calls are all unchanged and we have preserved the legacy HDF 3 API (found in `df.h`). If you HAVE used any of the undocumented functionality packeded with the library (e.g., `linklist.h`'s linked lists), you will either have to pull those source files out of an older version of the library for incorporation into your own code, or stick with HDF 4.2.16. Note that we don't plan to have additional HDF 4.2.x maintenance releases. An additional problem you may encounter stems from the removal of the `hdfi.h` internal header file from `hdf.h`. That internal header brought in a lot of OS, POSIX, and C headers which will now be missing from your application. If you relied on the implicit inclusion of `hdfi.h` to bring in things like `sys/types`, you will have to add these to your source code, as `hdf.h` only includes what it needs. ## Appendix: List of Removed Header Files The following headers are no longer installed: * atom.h * bitvect.h * cdeflate.h * cnbit.h * cnone.h * crle.h * cskphuff.h * cszip.h * dfan.h * dfgr.h * dfrig.h * dfsd.h * dfufp2i.h * dynarray.h * hchunks.h * hcompi.h * hconv.h * hdfi.h * hkit.h * linklist.h * local\_nc.h * mfani.h * mfgri.h * mstdio.h * tbbt.h We also no longer deploy the XDR header: * xdr.h ## Appendix: List of Removed Functions and Function-Like Macros ### atom.h ``` HAIswap_cache HAatom_object HAinit_group HAdestroy_group HAregister_atom HAPatom_object HAatom_group HAremove_atom HAsearch_atom HAshutdown ``` ### bitvect.h ``` bv_new bv_delete bv_set ``` ### cdeflate.h ``` HCPcdeflate_stread HCPcdeflate_stwrite HCPcdeflate_seek HCPcdeflate_inquire HCPcdeflate_read HCPcdeflate_write HCPcdeflate_endaccess ``` ### cnbit.h ``` HCPcnbit_stread HCPcnbit_stwrite HCPcnbit_seek HCPcnbit_inquire HCPcnbit_read HCPcnbit_write HCPcnbit_endaccess ``` ### cnone.h ``` HCPcnone_stread HCPcnone_stwrite HCPcnone_seek HCPcnone_inquire HCPcnone_read HCPcnone_write HCPcnone_endaccess ``` ### crle.h ``` HCPcrle_stread HCPcrle_stwrite HCPcrle_seek HCPcrle_inquire HCPcrle_read HCPcrle_write HCPcrle_endaccess ``` ### cskphuff.h ``` HCPcskphuff_stread HCPcskphuff_stwrite HCPcskphuff_seek HCPcskphuff_inquire HCPcskphuff_read HCPcskphuff_write HCPcskphuff_endaccess ``` ### cszip.h ``` HCPcszip_stread HCPcszip_stwrite HCPcszip_seek HCPcszip_inquire HCPcszip_read HCPcszip_write HCPcszip_endaccess ``` ### dfgr.h ``` DFGRIopen ``` ### dfsd.h ``` DFSDIopen DFSDIsdginfo DFSDIclear DFSDIclearNT DFSDIgetdata DFSDIputdata DFSDIgetslice DFSDIputslice DFSDIendslice DFSDIrefresh DFSDIisndg DFSDIgetrrank DFSDIgetwrank DFSDIsetdimstrs DFSDIsetdatastrs ``` ### dfufp2i.h ``` process generate_scale convert_interp pixrep_scaled compute_offsets pixrep_simple DFUfptoimage ``` ### dynarray.h ``` DAcreate_array DAdestroy_array DAsize_array DAget_elem DAset_elem DAdel_elem ``` ### glist.h ``` HDGLinitialize_list HDGLinitialize_sorted_list HDGLdestroy_list HDGLadd_to_beginning HDGLadd_to_end HDGLadd_to_list HDGLremove_from_beginning HDGLremove_from_end HDGLremove_from_list HDGLremove_current HDGLremove_all HDGLpeek_at_beginning HDGLpeek_at_end HDGLfirst_in_list HDGLcurrent_in_list HDGLlast_in_list HDGLnext_in_list HDGLprevious_in_list HDGLreset_to_beginning HDGLreset_to_end HDGLnum_of_objects HDGLis_empty HDGLis_in_list HDGLcopy_list HDGLperform_on_list HDGLfirst_that HDGLnext_that HDGLprevious_that HDGLlast_that HDGLall_such_that HDGLremove_all_such_that HDGSinitialize_stack HDGSdestroy_stack HDGSpush HDGSpop HDGSpop_all HDGSpeek_at_top HDGScopy_stack HDGQinitialize_queue HDGQdestroy_queue HDGQenqueue HDGQdequeue HDGQdequeue_all HDGQpeek_at_head HDGQpeek_at_tail HDGQcopy_queue ``` ### hchunks.h ``` HMCcreate HMCgetcompress HMCgetcomptype HMCgetdatainfo HMCgetdatasize HMCsetMaxcache HMCwriteChunk HMCreadChunk HMCPcloseAID HMCPgetnumrecs ``` ### hdfi.h ``` INT16ENCODE UINT16ENCODE INT32ENCODE UINT32ENCODE NBYTEENCODE INT16DECODE UINT16DECODE INT32DECODE UINT32DECODE NBYTEDECODE MIN MAX ``` ### herr.h ``` HERROR HRETURN_ERROR HGOTO_ERROR HGOTO_FAIL HCLOSE_GOTO_ERROR HGOTO_DONE HE_REPORT HE_REPORT_RETURN HE_CLOSE_REPORT_RETURN HE_REPORT_GOTO HE_CLOSE_REPORT_GOTO ``` ### hfile.h ``` BADFREC BASETAG SPECIALTAG MKSPECIALTAG HIget_access_rec HIrelease_accrec_node HIgetspinfo HPcompare_filerec_path HPcompare_accrec_tagref HPgetdiskblock HPfreediskblock HPisfile_in_use HDcheck_empty HDget_special_info HDset_special_info HP_read HPseek HP_write HPread_drec tagcompare tagdestroynode HLPstread HLPstwrite HLPseek HLPread HLPwrite HLPinquire HLPendaccess HLPcloseAID HLPinfo HXPstread HXPstwrite HXPseek HXPread HXPwrite HXPinquire HXPendaccess HXPcloseAID HXPinfo HXPreset HXPsetaccesstype HXPshutdown HCPstread HCPstwrite HCPseek HCPinquire HCPread HCPwrite HCPendaccess HCPcloseAID HCPinfo get_comp_len HBPstread HBPstwrite HBPseek HBPinquire HBPread HBPwrite HBPendaccess HBPcloseAID HBPinfo HRPstread HRPstwrite HRPseek HRPinquire HRPread HRPwrite HRPendaccess HRPcloseAID HRPinfo HTPstart HTPinit HTPsync HTPend HTPcreate HTPselect HTPendaccess HTPdelete HTPupdate HTPinquire HTPis_special HTPdump_dds ``` ### hqueue.h ``` H4_CIRCLEQ_HEAD H4_CIRCLEQ_ENTRY H4_CIRCLEQ_INIT H4_CIRCLEQ_INSERT_AFTER H4_CIRCLEQ_INSERT_BEFORE H4_CIRCLEQ_INSERT_HEAD H4_CIRCLEQ_INSERT_TAIL H4_CIRCLEQ_REMOVE ``` ### linklist.h ``` HULcreate_list HULdestroy_list HULadd_node HULsearch_node HULfirst_node HULnext_node HULremove_node ``` ### mcache.h ``` HASHKEY mcache_open mcache_filter mcache_new mcache_get mcache_put mcache_sync mcache_close mcache_get_pagesize mcache_get_maxcache mcache_set_maxcache mcache_get_npages mcache_stat ``` ### mfan.h ``` AN_CREATE_KEY AN_KEY2REF AN_KEY2TYPE ``` ### mfgr.h ``` VALIDRIINDEX GRIil_convert GRIgrdestroynode GRIattrdestroynode GRIridestroynode ``` ### mstdio.h ``` HCPmstdio_stread HCPmstdio_stwrite HCPmstdio_seek HCPmstdio_inquire HCPmstdio_read HCPmstdio_write HCPmstdio_endaccess ``` ### tbbt.h ``` tbbtdfind tbbtfind tbbtdless tbbtless tbbtindx tbbtdins tbbtins tbbtrem tbbtfirst tbbtlast tbbtnext tbbtprev tbbtdfree tbbtfree tbbtprint tbbtdump tbbtcount tbbt_shutdown ``` ### vgint.h ``` VSIget_vdata_node VSIrelease_vdata_node VSIgetvdatas VSIget_vsinstance_node VSIrelease_vsinstance_node VIget_vgroup_node VIrelease_vgroup_node VIget_vginstance_node VIrelease_vginstance_node VPparse_shutdown Get_vfile vsinst vginst vswritelist vpackvg vinsertpair vpackvs VPgetinfo VSPgetinfo map_from_old_types trimendblanks ``` ### error.h ``` nc_serror NCadvise ``` ### local\_nc.h (NOTE: May be prefixed with sd_) ``` IS_RECVAR nc_serror NCadvise NC_computeshapes NC_xtypelen NC_xlen_array NC_xlen_attr NC_xlen_cdf NC_xlen_dim NC_xlen_iarray NC_xlen_string NC_xlen_var NCmemset NC_arrayfill NC_copy_arrayvals NC_free_array NC_free_attr NC_free_cdf NC_free_dim NC_free_iarray NC_free_string NC_free_var NC_incr_array NC_dimid NCcktype NC_indefine xdr_cdf xdr_numrecs xdr_shorts xdr_NC_array xdr_NC_attr xdr_NC_dim xdr_NC_fill xdr_NC_iarray xdr_NC_string xdr_NC_var NC_typelen NC_check_id NC_dup_cdf NC_new_cdf NC_new_array NC_re_array NC_new_attr NC_findattr NC_new_dim NC_new_iarray NC_new_string NC_re_string NC_hlookupvar NC_new_var NCvario NCcoordck xdr_NCvshort NC_dcpy NCxdrfile_sync NCxdrfile_create hdf_fill_array hdf_get_data hdf_get_vp_aid hdf_map_type hdf_unmap_type hdf_get_ref hdf_create_dim_vdata hdf_create_compat_dim_vdata hdf_write_attr hdf_write_dim hdf_write_var hdf_write_xdr_cdf hdf_conv_scales hdf_read_dims hdf_read_attrs hdf_read_vars hdf_read_xdr_cdf hdf_xdr_cdf hdf_vg_clobber hdf_cdf_clobber hdf_close hdf_read_sds_dims hdf_read_sds_cdf SDPfreebuf NCgenio NC_var_shape NC_reset_maxopenfiles NC_get_maxopenfiles NC_get_systemlimit NC_get_numopencdfs cdf_unmap_type nssdc_read_cdf nssdc_write_cdf nssdc_xdr_cdf HDiscdf HDisnetcdf HDisnetcdf64 ``` ## Appendix: List of Removed Symbols, Types, etc. ### atom.h ``` group_t atom_t HAsearch_func_t atom_id_cache atom_obj_cache ``` ### bitvect.h ``` bv_bool BV_DEFAULT_BITS BV_CHUNK_SIZE bv_struct_tag ``` ### cdeflate.h ``` comp_coder_deflate_info_t cdeflate_funcs ``` ### cnbit.h ``` NBIT_BUF_SIZE NBIT_MASK_SIZE nbit_mask_info_t comp_coder_nbit_info_t cnbit_funcs ``` ### cnone.h ``` comp_coder_none_info_t cnone_funcs ``` ### crle.h ``` RLE_BUF_SIZE RLE_NIL RLE_MIN_RUN RLE_MAX_RUN RLE_MIN_MIX comp_coder_rle_info_t crle_funcs ``` ### cskphuff.h ``` SKPHUFF_MAX_CHAR SUCCMAX TWICEMAX ROOT comp_coder_skphuff_info_t cskphuff_funcs ``` ### cszip.h ``` H4_SZ_ALLOW_K13_OPTION_MASK H4_SZ_CHIP_OPTION_MASK H4_SZ_EC_OPTION_MASK H4_SZ_LSB_OPTION_MASK H4_SZ_MSB_OPTION_MASK H4_SZ_NN_OPTION_MASK H4_SZ_RAW_OPTION_MASK SZ_H4_REV_2 comp_coder_szip_info_t cszip_funcs ``` ### dfan.h ``` DFAN_LABEL DFAN_DESC DFAN_LAB_BLKSIZE DFAN_DESC_BLKSIZE DFAN_DEFENTRIES DFANdirentry DFANdirhead ``` ### dfgr.h ``` DFGRdr DFGRrig ``` ### dfrig.h ``` DFRdr DFRrig R8dim ``` ### dfsd.h ``` DFSsdg DFnsdgle DFnsdg_t_hdr ``` ### dfufp2i.h ``` Input Output ``` ### dynarray.h ``` dynarr_p ``` ### glist.h ``` Generic_list_element Generic_list_info Generic_list Generic_stack Generic_queue ``` ### hbitio.h ``` bitrec_t maskc maskl ``` ### hchunks.h ``` DIM_DEF DIM_DEF_PTR HCHUNK_DEF HCHUNK_DEF_PTR chunked_funcs ``` ### hcompi.h ``` comp_coder_info_t comp_stateinfo_t comp_state_cache_t compinfo_t ``` ### hconv.h ``` UI8_IN UI8_OUT SI16_IN SI16_OUT UI16_IN UI16_OUT SI32_IN SI32_OUT UI32_IN UI32_OUT F32_IN F32_OUT F64_IN F64_OUT LUI8_IN LUI8_OUT LSI16_IN LSI16_OUT LUI16_IN LUI16_OUT LSI32_IN LSI32_OUT LUI32_IN LUI32_OUT LF32_IN LF32_OUT LF64_IN LF64_OUT NUI8_IN NUI8_OUT NSI16_IN NSI16_OUT NUI16_IN NUI16_OUT NSI32_IN NSI32_OUT NUI32_IN NUI32_OUT NF32_IN NF32_OUT NF64_IN NF64_OUT fpx float_uint_uchar ``` ### hdfi.h ``` DFMT_LE DFMT_BE DF_MT UNIXUNBUFIO UNIXBUFIO FILELIB H4_HAVE_LP64 FNAME_POST_UNDERSCORE hdf_pint_t JMEMSYS FRETVAL FCALLKEYW FNAME ``` ### hfile.h ``` MAGICLEN HDFMAGIC DD_SZ NDDS_SZ OFFSET_SZ INVALID_OFFSET INVALID_LENGTH HI_OPEN HI_CREATE HI_READ HI_WRITE HI_CLOSE HI_FLUSH HI_SEEK HI_SEEK_CUR HI_SEEKEND HI_TELL OPENERR hdf_file_t dd_t version_t ddblock_t tag_info fileop_t filerec_t DDLIST_DIRTY FILE_END_DIRTY accrec_t sp_info_block_t funclist_t functab_t FIDTYPE AIDTYPE GROUPTYPE SDSTYPE DIMTYPE CDFTYPE VGIDTYPE VSIDTYPE BITTYPE GRIDTYPE RIIDTYPE diskblock_header diskblock_tail ``` ### hkit.h ``` tag_descript_t tag_descriptions nt_descript_t nt_descriptions ``` ### linklist.h ``` HUL_UNSORTED_LIST HUL_SORTED_LIST HULsearch_func_t HULfind_func_t node_info_t list_head_t ``` ### mcache.h ``` HASHSIZE RET_SUCCESS RET_ERROR DEF_PAGESIZE DEF_MAXCACHE BKT MCACHE_DIRTY MCACHE_PINNED ELEM_READ ELEM_WRITTEN ELEM_SYNC L_ELEM MCACHE_EXTEND MCACHE ``` ### mfan.h ``` ANnode ANentry ANATOM_HASH_SIZE ``` ### mfgr.h ``` GRATOM_HASH_SIZE RI_TAG ATTR_TAG GR_ATTR_THRESHHOLD gr_info_t at_info_t dim_info_t ri_info_t ``` ### mstdio.h ``` comp_model_stdio_info_t mstdio_funcs ``` ### tbbt.h ``` TBBT_FAST_UINT16_COMPARE TBBT_FAST_INT32_COMPARE tbbt_node_private tbbt_tree_private TBBT_NODE TBBT_TREE ``` ### vgint.h ``` VGROUP VDATA VSUBGROUP SYMDEF VWRITELIST DYN_VWRITELIST vs_attr_t vg_attr_t DYN_VREADLIST vgroup_desc vdata_desc vginstance_t vsinstance_t vfile_t ``` ### local\_nc.h ``` FILENAME_MAX NC_BYTE_SIZE NC_CHAR_SIZE NC_SHORT_SIZE NC_LONG_SIZE NC_FLOAT_SIZE NC_DOUBLE_SIZE NC_UNSPECIFIED_SIZE Void ATTR_TAG DIM_TAG VAR_TAG DATA_TAG BOGUS_TAG DIMVAL_VERSION00 DIMVAL_VERSION01 BLOCK_MULT MAX_BLOCK_SIZE BLOCK_COUNT MAX_VXR_ENTRIES vix_t NC_array NC_string NC_iarray NC_dim NC_attr NC NC_var netCDF_FILE HDF_FILE CDF_FILE cdf_routine_name MAGICOFFSET CDFMAGIC HDFXMAGIC NCMAGIC NCMAGIC64 NCLINKMAGIC ``` ��������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/img/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0014350�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/img/HDF.png�����������������������������������������������������������������������0000664�0000000�0000000�00000124167�15030617045�0015472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��8���æ���ØÞÿ€��� pHYs�� �� �šœ�� OiCCPPhotoshop ICC profile��xÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p�³d!sý#�ø~<<+"À¾�xÓ �ÀM›À0‡ÿêB™\€„Àt‘8K€�@zŽB¦�@F€˜&S� �`Ëcbã�P-�`'æÓ�€ø™{�[”! ‘� eˆD�h;�¬ÏVŠE�X0�fKÄ9�Ø-�0IWfH�°·�ÀÎ ²� �0Qˆ…)�{�`È##x�„™�FòW<ñ+®ç*��x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ�� ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@��át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ� éÚWópø~<<E¡¹ÙÙåääØJÄB[aÊW}þgÂ_ÀWýlù~<ü÷õà¾â$2]GøàÂÌôL¥Ï’ „bÜæGü· ÿüÓ"ÄIb¹X*ãQqŽDšŒó2¥"‰B’)Å%Òÿdâß,û>ß5�°j>{‘-¨]cöK'XtÀâ÷��ò»oÁÔ(€hƒáÏwÿï?ýG %�€fI’q��^D$.Tʳ?Ç��D *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È�2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿÑ�§€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²<qyÛ ã+†V¬<¸Š¶*mÕO«íW—®~½&zMk^ÁÊ‚Áµkë U å…}ëÜ×í]OX/Yßµaú†>‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ4<YyJóTÉiÚé‚Ó“gòÏŒ•}~.ùÜ`Û¢¶{çcÎßjoïºtáÒEÿ‹ç;¼;Î\ò¸tò²ÛåW¸Wš¯:_mêtê<þ“ÓOÇ»œ»š®¹\k¹îz½µ{f÷éž7ÎÝô½yñÿÖÕž9=ݽózo÷Å÷õßÝ~r'ýÎË»Ùw'î­¼O¼_ô@íAÙC݇Õ?[þÜØïÜjÀw óÑÜG÷…ƒÏþ‘õC™Ë† †ëž8>99â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û��� cHRM��z%��€ƒ��ùÿ��€é��u0��ê`��:˜��o’_ÅF��¢IDATxÚì½Ý™]Ç‘,Ù/ðÁƒYp °`8Cz?”€¢Þ ’ ŒÀX0Âõ�‡4 ïCïµ*32²Ö¦¤‘Ð{Wͧ!€îÞ½ª²"#3#ìÞÓ×îî03¸;¶e0À�w‡Áà¸ýžmmß»ý\üZü:/õýé÷šî?ýä—ï¿|‡µ.vÝ{úú-€Çrl{#ý}ìMÞWú1¶ÿÐ>õüoûÏOö;ïe^í¾?= ~Ì휥 ÏÇN_tøíŸNçÛkïE|náßßøÈçüôïÿ÷ôçvûw�øðó÷_~X»s­î¬vñ] u>gçöèN±pÔïéî*>÷ü5unçõLéû’ã‰x]ê=IçŸâÜ“F8“ïwzüð½êwÎb'¿fŽMÝ¿¥×sºÇù3Q¯¹‹[³ÇÙî§Ö“Ïâƒð‡¸×ø“Û¿Ë7Oü›ü€a-ðQ/v­Ë^Ûáí@° ÷_{ØOÁÌ@å´aËc4 À`ÏÙ·FwÝÞîrÐ9 `œ§üÜJÔ¼OãÙô|™áŠÞ»ûG3û³»0Ø�ïþþ‹k÷^é™—óv–¦g æqonÿ&–Ó¾VqÁ°# ¯ßsÖyo’õt¯5‰Shõ}J:|ÿ•ñ,Ï«ô5 7ív¿ŸùÙÆ×<{_·˜ªâr¦]B9i[xlÕé5ú‹ @~6.ü¬| ûµÓÿãÎ ¶Iõä-ÈQÙx— ¯u™“÷úüÕå_‚Œ¡0@KÈ{-f/ÌäHã(™UÇ$óÚâïçd� gKHäã†'4 âgd›Üýñ)ˆ|“™{O_ðÞÌÞø3ïþþ‹÷k7_þ’l€H¡sbŒ Ì ¨>œJJøÜ2`¢'~ÊK¬œxžT|QgxO.`…)î’NZ0aUâïe ’Š+éL7 ³co:°Rîhd¶}öºãýßÅü²Ï¶ŽÀQb瘶ðÞ~¦¨½ñÆž>>¢î·Íg-¥>ДHa <z#Öºð`yÚÄ箸£S2ØñƒK>g@5Âv4oÜï’½<`6÷ Æïŵ+ú_CG§ïã³×œÅÓûúÀÝ»ûãíñN¬Ï»ðù/�ï~~µ˜žKf\#“†=M{Fœ™îüy`Ž.pÅ–¤³kJºñùy—Ü£&éñ.ÛY¦¬pìØÂŠO˜bõÞÆx™ã€·%6ÅŒuqÀ›Ï≊X¶‡;ñQK_²=æ îJ‘Ì`}Ön®DåÌë Þ°ÙlC[Íþ_¤Dðk]tF8Í訧ƚ Ñ Õ3£ÔÏèkÑ Jd~‘Jez~|Íc)6ªëOˆ%6p힂֬ßAò=OÏa=߸;î=}ýázþ À›_¾ÿrž»pR9ÊQx9%ßî Îö¦Üûèû]@eÙ™7‘°¤s¿¿nJh ¹„ý®ô�ìDl‰qé(9êâ'ÇJUþÛ²>|_‡~AÅš·±Ü‰ðh:&J2@ÌÌ›Š±ê9Ör~RClrŒe-Õ¿ã(ÍWG›Xfßk]n¼1e‹bï æ-›“2‹K<mã3ÕÐ?£÷Çhú n3“µõ. èÊrmÂpzyœO›70vÀþ¨~HO~èî_ì+‡ÿpÿÙOïÝýÁþ´JZwÿÜÊrOwû|_w Fºƒà=óÚ08>cé늉Øï7º¬¹D$_Ëv6U.¡RÉU×'«zŸ£‰DM0M]Bglrzù^æ8®&AZhÐýJ=ÛdføL¡Gþ  U¦&AÊÏzx¥ý†WuV\ë²iï’âÌ삱j€”´šÌœ*_™[[ÆŠ™ ò(+€k @(Öfæ¥O 2^ñìÎØÛY3aGÝo±bÒxøÀ#¾9õñ¼1³ÿüùÕoÖI¸# †®Ç«cVg½Ó x‰{³”8"ÃDrª°¡öåí1ƒ��˜Ï{×Êëµ.éªqOÅ¢ZFnÞ�Ì °´É DW*ñÐÃí%åÏ'CpüóüAMO•ÌT €*ÏÅ×÷™º¸à7¯|°ÞL}�‡S.G}­Ë^­k&Äæ™¬ v•mhÖD4™ÓŒ…î¿©?gmV“ÁˆÕFE£€Ë͉qš ¿ Óã³êµ&ãâ`^²kÖ3û ÀW÷ŸýôÀwÿÏ_¾ÿrOô¬Rfrœù$ªjBËÑ0…³ÜU ¶3q4¢^¢í|!ô ¢K?÷®ªñ'œk~|ô}ˆ;‰�=™ÆI‘bÙ2nmbÔV``™•ôûÄ”Ó9¬•d¿EsuÛÛ÷~iû–ÇhøR(ïˆn›ÕX%ݽÀÍUÎxZj´Šð76õ«ìÇŠð–•¹ýžZ¦ê.ñ¨žøç¹7G1&ªiRR¾B#™5(Ò”‚lì¦Þ‚8žÞ•$diqžÅ?�ð•™Ý‚÷aö§Ÿ_­2Ö§Æàtš0e€Ä0ýXs²ã¥?ƒË ÛYN¥#Cmnõ¬º8€¿'æS³G=}&c\þ}é¹»ð»d"%"“;8¾‡3- ÕŠ"Áú^,ŒåÏ¥k_’(ï‹÷ï³í†ˆóòP]Ø)© ƒGWãfí´ 4}§ë‚k]0íÍ—«Cì=Q[ÞØEAw–ÃíuWý?Å*µÍ‘ûˆ7RÆUÁ»¡N³æò‘l ž4KFV§PñÐM‰æµŸÁ. ¼;Ð3ëü€oàþͽ§¯ß›ÙÝ}5(2lkX3YV ½Ö”0ò¾ö‘P[fbã}4-Ýt¢µ!y:WVcÚ…ˆ“Åâ5t«"ñ.µÉ˜úѹ“ŸÍd Eñü{`V5Œâh6Ðx®¸£Â]oãhpÊŸùÍöÁíèS�­þå¢{¼ eÕ<Öt9O•¸¹ZÃÑ'—ô\BÈÐ*¤”´Y¸ücó"31-€Aßk0þšK“4Êk(?où –>˜ü•–O ôŽ–ÕÏòï˜u“”†ceiä9a¢Ç8}í‘»ÿ`f¹÷ôõ÷ž¾~¸NÌ?éœ"Çô¸+ð…Ûfñßèð¨ktŽgUO;!•=âYåÇ”à Í”×é± ùqÛž< —Z,)Ídûº!~AG1jjü~û¼›£I—¨-Y{ºÑÜÃk¸’™ºiJBË&{TIà(ËS¦›Ì˜Ñak]VV¨tfSE‡ŽßľëÏÐôžÚ—\owÞƒfÀ™ü¼]Ë+0 q%°)L J$Ëp<¥È?êp|BûÏFÍÕɼ“‹õnKX¹ÿì§·÷Ÿ¾~¼NÏ?á ,ÚÏUí7U®Uq?6çJÁ;Ÿ\®¨=•ê·<欀_¼ñqø¹DPæ"f àuÔ³GÿM¹ËR?ß ìL‚Ç-î0Ñ~®0‰râ‰VÔF`¢t¾RÜ Cr¸dK1 ´À‰bÉ®&(u† gÔSüR°…µÒZ×Ãäˆ{²Lí—m¤¡Óæ¶bÏ ö”’88ºÜ­›šø£ŸçË£ Ì*CMïe¼%ðlYt£Á£Îð,©l›Ë‘4ùwÇ ³yßÞÅðöÞÓ×¹ÿ짯ÖÉù'%'hT¥LÃA_‡W€bÝÄnÓ<ÛMù©Sz,GŸ¸Äû¬$µÓvJLD@¨Ñ-"·ÿâ"I,앺G…ýèb’ìj€gùü€V [lÂ!agŽããÿ0þ›b¨;n"í•çÙyfA¹B µÛ€ƒ!š«/®u¹ F¡üÒ´gЧ: ÄXéä²?P¨=±>ÀjÏË’¯xܰQgmüŽL£K {ë•[ù<Kv‡>G>D\êèÞcÎòXžJ Ýý‡ûÏ~Z@çC·¶ ³Ëü¶Ýuu`o@fDoK6M¥ +§F¶%–ZT?K¶Ç÷zë•”Žƒ³Òõ£•@�I:_¨ ͆õK—ô“xòë‹ÉMæÊ�Ĥ¤?`äk,7ܤ9ôTÓòù-­ˆ¦>jý…U¤¦'‚ok]rÌô¤·¤ücJp Þi,u£œÌ2Î@|MY«Jq ls£>5!2c9â{£˜¡Y V™vdºŽ$Ú÷2õuY* Éå‰òéŒ9*MŽƒž~à‡{O_ÿåÞÓ× èüÏe#S!ÖYiWZ¸C|1— Íu ‚-e@ㆠ‹ u9s’•ÊÃ3ÅåæyK<X?PÀ h¹g¯¼ÿ†ÒÛ%R-a¡•ÑÓ„ž,‰1“û OÙüwŒüG¥é›Dý†UFËF”ÿQçùìEJ:²ÉxWÎuQݪ¤ã0ÄàÊYžÊ*»ìN Å,ò…o½ŸjzK“̈){™ 6XÙ¡œHkJ éNÞŒ„Α‹ç`ËY;HGˆåå“r,?/xùóF]èÜöÓãu²þþÉ+ƒÏâWþäòËTÝ×Ä~4´gdg YÓ,÷ªÈ²/0í œ*ŽŸ¡Ã1©X)m òÝYl*b’à¿ÎCÝÍŒ  ¼ðÍê‘‘²YÒÕ‰E†Ç¼‰ˆ9¢Å–¶‡^sèþ€ØÉž?Ð9BKÓk]%ÐAQÆöjlÇT2e6 ¤Ha±ð»÷Ƕ>ÃãL騿ç¯ÑåPešÙ$ITr\ÂàÖZP’ƒ¢ï˘¬‚£f˜š€Qpl$,¯?¿'Ýýí½§¯ßÞöÓ£u²þž$Îíi‰ñyj {”tPÙ")ôÌ.f¾sžzkrÐL)5çi¬Ž1V@¿‹ Ì8©¦éNÔ=ZÓÓý<b©î÷S%%•t R³&½ãÖ®Nu|¼’ ‡PÔyPuŸßMfY0ïŒæ€¤.‘)Kd{à»3;k]^À”Y ï:èG‡ÒÑO@Ô¸¹TÔõ¹”3‚žRg ¤�ˆ¬r&‚i SÕÀ< Ub㸽<Ë“ÏÍêZ½Æ­m¸eª|>r¼7NÊç´»ûßöÓ÷Ÿýô`¶¿ý¬:éšë´½§ŸÙ¤yþ�Üð07#§ï·9‹Ê¢¡*±Écã65 Ž`F|"É üäÚž=fÍD¢ÔŒÕ¹›%jñ3gö,MŒ5½„SûÓŸKiaßôûÝýV'^(S/*Uu¯±¤â ês—ãÕ‡s´w Rž›d§{@° |w ab }ž¶”½b›PDZÿÖ=½÷œZ:¾_ñL©þ Íû…c+&’J¾½d§v³C¦I|\Ÿ\^9VÍ3iÑ|øÜÿrÿÙO߬÷÷`púϨ³@ؾ³ÏÂ}Ê”v{T™0tÉOW’ ŠÞ3‰ƒw ‰ÙƒâýãK½Q©´‹^uX& \*öž)þµñZÀ´Hºøî5tqggœDff~s’gf¸™Ñ;…U1ÈF¨†]×Ôº’ŠF_÷\ ÎõÌ}JÙñ[qÇÑlÙÈjÖŽMrcn¢CëñÌäÓ!dÉS™‹7J¡ê¹u"[iÄt Î)ࢊxBLÁLzÞXXÌé°«rT×\?O¥"#ÒðQï SØÝÄŠÜý÷Ÿý´ÊVë™%£Îô°² U�n|fZãJ%-P@nbfLLÚ÷VU˜ã…¹¯šúÔAe€ÄÝ×56ÍO¥wŸ�@Ö‘á~ÙäÄn¤ÅŒ˜PÏ; –r“*GŸ2ŠòXÇü'%ã®fÖM4Íê­v0•q<v·Dþ®“Æ©T©ë–éõç‹"fm–% ÁRÊ^š‰xŠð•§ž Ö�9:9M>â‹·¹bÙ²bùà%¹˜+ Ç µMFtŸg÷ü"P=TEFŸ%ve+�ÿ}ïéëëàýz1‚è.áí?¹+ ´§ZÜ›Q¥ÓXQ%4-ºíQÕ$X_Ô3R$(P- Æ“êI€ÒÛém©˜CåbŽEfa_ÞÆþÌJchY¶ÔpLý‘ÊÒ¢¨Õ£Ñê2ýYvÊË7ØP „4«2¥2®J4R«VÙІ,¼´Ö…—¨šFÓ8­¡XDäaëe†*2Wšã"0?hT’ ”YHIw  D#~™Xl‚” ¡,ëXT¢|x™”…œ'Ó½³1ã#¶«£È»ÒšXÏï=}ýß÷ž¾^lÎßʾv&·Š‰AÄXllÚ_!.Oçu‰ÃþK í]¥XæY¹ A~AmR?Р™6ê:¦=¯³ç/ÏaÚ «ºùÌÎÜ"û¤zõ’’tÙ'Öë‘· &Þ€7Iù]�„,/µ:"1å3¥´pˆIêœ×ºDº»×Jr¸¼¬ý@@« âBžªg{ÐØ$æ£Ó­)‡•Äé-‹"d§©þ> f`ég¦„ÜŽ¨‡S\àâÉã̤øK\€Mý¼¶¿•’£@¬Mà öß«7ç|@Ã#Ƹœôj´ÐôÅÝ®°'‘Môff�áI·½>Jã­ÓŠñ†y˜ O0öf•>uŸÅ9Éä˜öÈD@7>ÇìàÞ%NzˆÂÚ  öõ­Cýˆ.ض-¾Þ½+ÅF?Ï7š™?]HÊl›«Šš5ˆ4å¦Ò†ó•ˆÞ­ ¤ (µgk3`Ó m¤iÍ€*v4‰ aR†iú| èa5>»3N 8â¦j¾pf>DÓà-ääýÞdà)€úÜ‹§ó×nиÿì§·÷ž¾~°ä”nYI>£Ã|I²4­ycã/Åç£cëxßs‰I)›«}m¨Âs†¤±tØJÑy&u ¯0á=.C=àäÞŽ±~³H^®ž”{øT¶NrʘkŽ)ut ŠP›•“»¹áP“,Ë``LQ©ÚiÉ ™î‡Ë2@GIÑšŒ¦×º¢Ó˜ŠÎDn"œ:ÿMêýXs Â*�©†Y®7+Rnjl‘3<$ ÝzaMÅ”ÄqÒØœN|±~N^ì+b]½+Ù%ÖM\NÖÍ¢´ŒIß0“è à/÷–‰gVãå¥Àƒ¡˜QöžHõþ8+Y ­RñiòÈ&—–,T!Ð÷æa›ÜG3•KýFÙ¤F[Nê\I¶·/[õžPýdW,+ÅïSz= t¿76³âú»Êën7J•oJÆ„Ú$‰&Ͳ`uAÌÌÐfTçZ—O{£¤Ä –/ÂVt«ËØH)—/S¨Ãfuo³ÎLw˜å%ÜÞu½B%ë“çH½³Øa)y¥‘K6i¯ôºJ¤ io/Ÿ±S³DªdhÍ‚ðöþÓŸ^¬“‰¶¤pN ¯%Åùy�0X<'IêîvÜ›Ë'^cKÝdÐ,ÁWý?jú©+µ2Hï!õÊmÓ3ÈîÞ)½·Ú:¹´ä$e1]q"kOtàE«‡íyÞŒéŸ2QÇ(t¦‰#›aéà\'ƒÃ% I‘6èjš‰ž–f/Ðh÷L?GþNÓχ¬OÌæ¸Y¸ËˆRæ³ëË=ÌDq\ò”3QJkyÚL¾')á”;OÈ0°γéµÎ"¦^.Öös.‹ç÷ž¾þ%XÏ\{™]72#%YìFׯ©z>g½:ûÎk´“r¢3÷^,v ;ê91òkš™ÉH ªÑhW*›USJÒÑTVJ_}Žíí…ÂŽ“]d?öò¡ö™ã›2½Òô#”@`A+’ëøŠrTšl¼2ÌEÃÖºHÇEIƒ˜¢ ˜ ¨ò•(ËtÞ&yD\‹…MAÎÄnKK”ʶ¾Wª±G&S33¿·ðÖ++_2tž£ÎD/kj!|£òg`òKAµyݳ -RîÝ%¨öŤÏqËæ<Z§4|žÌì“¶*5¥²²è¹äþ­ö1:Æh2uÛiì(7Ÿ°H‘qèúkxòØ& JIÔŠå³ÊB%CRœ/?QYßj« 6’_ç(:7$H ô½‘fœºef(ƒ°¤d¬„ý¬qüLâfÌÎ@ ²m½|ꡳÖEGÍ–îM¢N dS]|?d^ýŒd6ÕèR(C89š)7AÂSS“ƒ”Ƀ?Óˆ92ù«êÎ}69l,I§ÇËæ¨¼\.3ôc¬Ü;‘.¨¬TfjJSÝÈj›­*èögÁðvw¢^txka"€s³ñDÅ–uš"hྪxGðÜç×—³­U>[X£UûgæE& MqŽ=Æ,ÛbS[4‚™Q=U<!ªÎY)Yxꩉëø9¦}ä9™ŠëFf“Yå)´•[¹(¼"3\eƒ¬uEY!‰¸UÐ:ò+ó&ï€ûXŽ`Ö˜(ûbâkµÍÈÌ40s1vý«5bR9N›ŽÎÀJbf½ï§+£ÙÌØ –ÖZðH]—º¯ûÜèQÜ:±¶?¿'ãί®þ¬²fï1¯úU<’,KH3v£hdMJ?Þ—G˜égu *ëI®<Q,¿¡°³<¶]AˆË×x¤ÜõgÆ„R¤7ÇT\P ÀÐkÖˆ¤¶“¯.Ì…Ö™¾$I"y¹©´÷Á�ýHmLB• e¡«S­¦ t­+(S)Ú²c1¤vŠÒž€Imîù="*£hšK‰¦1÷ËM¶}Zaݤ_ìÜŒ-³Ì-“š4!*]*›02€§*U±ou –¥,ة芬¸€üÞÆ Ë€ À÷Ÿýô‡rªAI8xhÀPªårwHû”#/*ãßÛ˜6và ¢<–ö‡,S5}qQÉÖ{j­–r?B[B(ÑÒ=Y@ßÔû^¬l,Nų́©¿“êPwz'Ãg]²h†Zjd±áIRËÏÃÝoNÊ¡úfŽÕ ½a¼¡ú u"&õß7ص®Üð!QAi¢N[ËGé罂Qã1uDy©©Ò—‰ *uaOÅ΄0bÛC�Ýì QÆQ€*5ù5âžüy*†§¼_ÊÕüà±#À,à§ÌŠ-¨^yÊÃ*½'ßÜ{úú‡«=«¨¾P -ÛêÞ´À»‘áOR“D#2Eí”Ý™êÙ…Q¤¤¼³(JeVx›Œìi½qùÍ’Uƒz¹gµcP”Kxí9Ì=U]é¶cuf¦š<é4ý ½5ÌGRm_B{O1C79ÍjoLW«@¾»ˆ6Aü*jæ$ÚªñYë²3–2îXÁnúˆý Š2.gššsžÂÄ\"÷¼u¶ %hû™%1ï³Ñése_Õt,§J0€Ï§M´rj#Ž8ɸ§ŸïdžUÆ<`¡¬ß__]+Ȇ¸“2Q�ŠmïU(o%€¯Ê2AÊ c••‚² ÚDûT¹y&&Øõª¢!I@,9§‘kG§ËéÕ�—Î\­,n%æ”ä’“ODá_´L‹,Ë7‰YÅÕ{ÎÅUß»À‰¨”OŽÃå$È ­- ‰k”HW“ñu08 ‚•ÞÄ8(ó2L–ß%”“»Æ8f8Å3qH ƒn°e%@4°Oôcês·ˆMå„&M§P,Ïð¬&ÄûÒû‡^צ˜7:ÎT°gYýéß¿º÷ôõÛk#ŸYîÌöcaf`IÔ.²‰^É Tî`Á;© Ïå4Xœ““–:l£~µ ”—ÓVvã»ÚN"J@o§‰ùoaU01ºF_bœ ”ñVÁÌ£WÕ7j{‘¡áv4lív_Üð›EÕqðT­“åç˜6WTó7×Ãà0�Qÿ¦Æ4»†E¬OºäRmßZ˜Ø—V‚.Dææ¡‰6Ò±Ðέ¢‘GÉVÈË P¿–@ ×²ï¹õl¦Ç·KJ¦ö9™Mƒ4ýƒYÚi˜&ù-ì3ûFÀÖ±c›¸*{þ,U™ôˆùèJ*êÂåá©Rnh X»rïtßPًٕì,Þ†zxnv°ç¹ï§VGú’Ÿ¢”ä¿~õYðþWnñÊJ‰‡ŽÆÑ»„Œ§Ê\4©°›}wï×MWŠše—å{}BE©rWñ¶˜Óïk]GVÈ”qGm— èàB%]#¡húLyµäŒÆºÑØ„LÓ¹ìš gxd5º8€�GBKD5øª×j º27TOE›‹±¸£7W-1LOÍ$—Ýh=pµLŽêPìØÞP)AcÚ3“¤ÌRŠþ9‡ÔÕR{ÑT¬hô˜f½s±üÓ5w‚{RH— Fû³¦bGX+¬sSW‚Žñ2€=rHï¦ë”Q1ƒÅϤÕ{[:¨ˆU¡êéäÃdSÆÃ±wT¯&ãëdu8«nèñ€ð^lý_¨žTêýùàîbó&³•V M(DŽ¡Ç¨iògÖ·~ï#�PÊ熥FA%ŽÈÇP¥ø*Ëi"CÍPšnWÞBÊ*v$€Û½Íú:‹âÝ#�ÿàÉ5�›Â.”ò°•é´N][ÚÈQe#ynCù4&¿�Fg¸šøÒ9Cf0b‘7‰þQó²êÑ™ý×& fnå Î-Nòß},š²¸2îé·Ô$¾Ÿ3‡tttT¾•·Øú+mÂN‰T^“&¦ö0LÆ8Ûž†µ.²DÕà²Ñ'£Ûe/«ÒŒÒj$åþ¯úåû/_\ÚûL%ì! ÿ ÀÃÓ…ý ½§¢bêJeâhÊK?3<e¤{<ÌèlËpÊ7ÇšR¡ŒcŽÃ8EóøÞÓ×?üòý—__ÃY•,—Cj+é¤ÄÕ9K{KÝ åqÃ^9’îþ>2~ñrUà ²ÿNk˜ìOí�øaLŒÄ 4œE ÌE„öH/ŠcoüÜlf{BçS%TyNoö˜bÁÜýãg q'Ú ¢æèbf¿œ°BŠªv?@þk]fV8Qî4¬ö~‡Èª9#)wNÑö<„øÖ%®_¾ÿò]÷µûÏ~zp:ÌìxäîŠh_3yâ”Ý*/¨ýgBDzŒ¨rq?´“ôì©¿ã8[ÓU÷Ÿý„Ÿ_}ñõ5œ×"�íQ“vþúi·8¦½üùš™¼ÿåû/Ÿ¬¨º�|ÖQÆ»?N¡… í…,ïÞyé°fÇó֥¦…¨îÓ\záQÊ<H ;Ý5#Ä”r¢ãs¸Â2éϯ¾øàÝéãó�ŽÇ0ü nlÍšq]eV¤ìœlÓKÝ„}õŒY[‡K ¸Ú~‰œ< V/˜ÿ°vzn_ÝöÓÇŸ_}ñû ÏJZ6Ì:@Hì)3qÓ´=èÍV/=!Yë¯8Â>ÝÇõAXlȺ:®)ߣñLÕ8µÖ¥KìÓG©‡D]0 °fsÎRÃ7ƒÅø·_Ž=€^R…ñùàÍéËó¹ÁþÕáq*k©÷Ñ(ógƒpùÕÞ ý)>ŸÌ ¥¾îÕ:(ð>+IØf<Ç«<ÿ7÷ŸýôçŸ_}ñãE²7æ‹?Ë RxUtàr*îˆj§�JHÖZk8ªQKfRb®¾lF®ï±xxœ‹äÙ“³>£Ë'pb&½«¶º{veýWÿ’Ò‹ÉÈr,Û®5ey~<ý÷ž¾þÀ¿øŲ̈L¼Õ82+½ŠØ”N÷:j¬='ÌGÕ™9ì{¬4¨ÆFæÓ÷þpÿÙO~~õÅ»K;«ÿåô5‘n LBá|ªÄâ×¶+¬¡”µâº)™±’•–¢_y3ÆQ¸}Ür293ª‚ÈͽÖ%8ѳ(8þ"x¯?'fûTV¸aÚƒr’hG*×:‹áyóË÷_~mf¿q÷¯¼+â}R_dîL.ÿî}òSÊdASCõѨ¾Õ�y46/<ÑþãÞÓ×.ò¬¢72åûÁ¿uÓTÚ)ÒßlöY¯–†µ:€sVPžYþ;¸föð`µØµ.éeÉdÀ(ºå©?'õÖ�­’?el:›ì­õë™_¾ÿòÇŸ_}ñÄÝcÀ§é–"ÖMXJA²8.»AT*m2C¤&pf¶<T1D ûK´Õ º-Ùýp©B€Qáþ¨ï“5ˆMXàZk- p::0nÈ}ó*!À&svdUCþ_bjÈ*"•"¿ ‡š(ˆYf3È ÊÖ5àQì@öHZ{ïïÀê|øùvtú7föÒÌ>[>öó<£@ÎÊV'à¤í æB„lø›YŠ^°+Óœ¾þÀåøVYN2”J¯bߨ¼ÜàãhßQŒ«­ x­c'Ò¾)ÐX/`†PãÄgË„M~Np[ë’1ŽÃW)!þ$‚hÊ�Q¿·h߈±ßY3üZ¿žÕùùÕ/�üÆÝ¿ÞxþSrÓÉòC«¾n@YÆ1@:ų¶‡¡–,cÙªSèå>BÑûüÞÓ×/.⃌,¾! VÎDít2ÒÇxvÞVÓ¸ªL¶ÎëZàÕ¨Ó¨ž:°±–NA©38¬vé½6E¤…yù+z°ÇY ”†š¥cbúÚ_© …Ä)`½<Ñþþ@ç—ï¿üÑÝà%€­6Q3^¤ãÙÊ^Dܬ¹L“r�»Q’>/dŸ½¸/•îN`¾ŸßŠwšÁÉ … ‹Éša;èõ,ƒ)ÞŸË¥™¶ÖàTž…ò;·Ok$ï¥Éß„¥éêík»^{“ŠÃ$FbUí´…ô‹‚¨ùûqcq³KkýÝÖ/ßùñ¤ý8¾í„Bãå–Œü&ÌŽWciœ’ºÚ;ô¥¨ôçÆÅXùf¾ÿ?îºg;n«8ž 2:GÕDPiúN™šO®µ�ŽåÑFácÑûS´c¹äÿ¡T)Üg;0´Ö…²8ðr9äÿ/R|[ƒM nÅ4*^&ivg­¿/Ðùùû/~à·8‰ ߪ8±dùëDÎk9zÅõxà’‘¥)þ>2W%Fçîx?ÎNPÝÙU2ÀNØ©Tˆ¹Zqäïcé‘ÇÏÕó[k­Áq•m@87àdDœQÿ (‰ÿ.ç*ÐÜ[±d�q!)&Çľ-%Täÿ¶½_‹öþ‡­Ÿ_}±IìÿÞÝ?²ÎVÛw/ZbêJöÕ”Â2»`ýdhÃtz9Šðùýg?}sÇjrq6ñõðäó…ò¾å6PßT•^•@×aZk�™…`Ný©ÆâiPˆ›_(]Fƈ3ªµ®`±Å_dָƪ1àæÂ‰%+’”®Ž7#çký2:ßø­Ãß²$5™kû·âžŠ“ŸlÖ© 9cd툸�ìF¥  çùý§?=¼³Çµ“õŒ©M~_XèUÝ!8³eaÕµÀQΠp˜°‘7Ý5ßhNtµR§ ˆ/§å+rENêS€Üw0+Ú$’¢fp2IŸCj åËm­(Èù°±9·}Ú…:1 0a®=[ñgÞ*Y3sìgìÛÙ …Ñ´(€¿ó£ã¢W’)ëdÊ Ÿ lzsvËPÊJŠ×b€GÙ`ñßv…â¦GFŒKr#_ÛißdÔXRù×AàPT}_Qª?ÉÁw{$(j³–+—骤Ãak’ïŸÌæ˜Ùe £öÏþßMæ"^ªÔê‰,Ùð:ahа„ñwvãñ],UÅžÍéؙ8õÈg¼c€v)TA>Ë‹½Y«�5ª­±£ŽKÇDºÄl QÉ|©¸0²[ë:@ŽºDÂ6)Yvõ5BidT=8ü5ÎÄ“ÞÓ¢ÿiëçW_¼ð[÷Û’Uw ¦2§(‰È2ŠÍ÷a×üZ´’粇êtixüç÷ž¾~x—>Ùh¸ž4 ï¥è]êJÅé#Ú$LÔgeX¾…kõ�g½Dî?Pά±ñ³dÝ¢a/“äÛ"þ÷õ]üêü†˜I)l³fS¼è"˜i³}C®,lÒšæû@ÎÇ_¾ÿò‰™}Å.Ù0�‹º‰M‹É›ûÙ~dª'¨ÄA%D8žÏ�¸S‰H(Cˆ2v÷ÀÖÚ tŽ 7?*é‹÷:M>®sºœM%m\^²¢Îœ“À üXÝã1M¼rçëapí¬€÷dÈÌsÇhÑÞ18k}J@ç÷fö5}ÐC¨¯¯Mç D¿G“Òª\µ{VÁKŒ+:J€ã¹}~—�UoÒ¬÷’[x˜dûžøYÅäbghšIÛN§m­µ�à†e쓾„çȲ1˜Ô¤¾Ì ZOb4®{-à†'Y¸æÞ}¿ÈÛŧ¦]d–­¬š3ɵ>ó#€Û<­"Ή@"«@™m�˜Å‹"“¼/F3<Zë" ©�´Ùwö¬R#1—ã\€@f÷Œƒë±{4ýP¦ýÀÖZ �n:½‰5X–§MË–¤.¡]žD׺*ÃÍÃ%h’Ãx\"@Qŧñ0Z!óÓZ¿|ÿå�OÜý#³ ;@oÃ? Üäco‡Üg¡$¢(dñˆ‘§Øøðþ³Ÿ^Ü ‡ÄG²ÊIÊäç»ÆƒL¬^¶DõI­µ–dp¼Ù(Ño%mæFíøœ‹Fù‡Dãº|ÖºØU†]–-ürÀ-À„..;·ã²÷×úÔ˜œ÷föÀÇâÈÏoO怖2€eïNc@œYQ†Òôøÿç®Ø8(Óe>³•i!ðHÍ×…•A/ðh–Úšv\«�œýJ;îã·QT5ŒùD‡¤ü~›gåk]&ƒÓÑØµeˆ²p¶»0Óéç4•®õéwàc¬‘‹Mèp©~ËÓ8)fE<Ù«Ê­¼_ćçwáœnï«bóÛ×íæ˜Üg¹—­Ÿ¼Š†Ï©„lëÜ®E�G5Ñ%S»x°é€ïjÛ†ÄDËÀ¬½„Ôá°Õ<v•LζÏfMÂ&‰ ()H˜F—©d«k}rë—ï¿|à N®ä%AäLE ˆÙ™R:߯âX”¸ç“|óÉÓ´"—äºøžÆ¹XIï5ƒŸ4]<¬^¹µ& Ž äl~¸ð´)O—Ciòl2ꢠ}fÒx/V‰àZØžœã&M†°ÈRg›„µû±ÊÎCJ¬õiƒwÿ:#O�¯d˜[°m¥t¾k³tS[AÎ ^þlP©€·™}Ò,Î�bä[”~M㯋±óÈÔlì[ú½À_kpºL·³³ß¿Ö±1Ä¥Ó²æN sˆ_sÓMAp/„o+ú5<:>ëJZ ÔÜ9óf!çØÑIøŸ#M€±…F¯¡º„X'ëíô˜<­öãWŸ2‹E6‹±iaÏzm¢ÖÂ'<¦aôCŃ“šN%­µnÔ¦P ÆºT€(Ô,ªÖ¢(dÀ׺|F‡ÓF%'ÀðÁ>ŠÀºÈhË»·~~õÅ0|Ëà j¸¦/òýg”Jo| Á2ŽýçÄ'gû<¢þüS?ŸG¾OQ„AH¡„ ü¤NÈÎq@$&k­58œ°œ#æW<€ ‡ôÝ88 Å×s],NÊ€›Ë§k~ï¦-¢Bw×'Qç†ÈµîÈù=€7› yÜ@-ÓrPFéJ¤¹—¦÷¯R¥}îu´[¿ºÿìuwñ~À–gÞpÍ*$°iºô¸ú5×: àlubŰÈCíÚ¿jÖüy.ê_¢MWÄØÀJ¹Àq^£¯RÆÎ}ý”ŒiØàXÚw,_;üÃ>nlº²ƒèƒÏw6 ‘š_¯,Ë6—ç‘M]Ã~þi¾·½ŒHg‡¡‡Xú©Ý¤j\ÕÜÙ>_Ù„¼Ö8,¬§Œ Õfv8ÉlC2>G‰º˜œX¤µ®áä½Q¾½œÍm5{|º½×í×µîîúåû/?ø·íBNŒ¬½™åSeN©˜Œ¬Ü^4ub,û.–²ÂåýÕ§¨‹S€ 5`wªãÞ”ãûšc¾§czŸHE:’¯+c­¸¯î=}í›D¶5².ÿ=6Ï©&²mú€/k&N_ÿÀÿ—žK“˜Žœ“"nr37´%¸Ž’:íéuN þ”ùì½;�{Ýc¨÷W¾n ¦3°8’)Y:ú|O3žíÏ„rÔ¿Ãìa0øu)ï(ùùozð^«ÃQ�¿N3{ùó«/^¬pq·Öý§?}ÃÔ¹*e$ŠòûÄ^™=öQìPg†~æ»ÿyVÒ?'~µú3î} ÒtÒÿÀÿ%1`à'ãáö¾P¬OÏÏäký�àOiÒ2ü·ûŒ:í¶'i,½ù\#ð»n¿œûõîýUwÔ9ñS|o‡f•œéG¬êÑcJœrûs?ÚÿóõŸ|v‰toµ+@Nw8ãïñ-AéJ�æ)µÊ=íFyÜéf èð>ç5‡÷°{-]ЬW¼G"Pó뙄Ùï? -þxí£@"¿7ÓÞ0ò*A�\|ïxχŸyùó÷ àÜÅuïéë·�wûU­ î{Œâ$k–PœË„N¤>M|ºSÉÀ¹q`ö<Û˜Á兩GúDÈ Øi]LlD|<ºxã÷H=·)h¤äìY&§½c:1mÞß~xÃ+ àø�#>烽u.1Ïi:ÏOnz³ÂFú<'çá/'´ÏŸ>C7ÇXe®tù<Yâ@íê|°"-­<±ì@ë¢{ï}‹¤ëàâÐuŽêêëé÷ofÙZ{ׯ¥ÐѰBÑËúºxëf=Û–KOýçÜúß”÷¬îá]YlØû,œåFu§×¿ádçÀ¿òŸ7Å M—‰Ë$ÝT_ïj^ER»‹¶”ÇD.™ØŽ&F̘•—é‚Ì:>:ÎÍ’B>“Nï¥zÿ§c÷ÂJEõyòd0ûhuñ}´MXùŒz©:ï2ù~Y#$ ¤˜Þ5·'@2ù<bOm¹—\4ÞŸ¾G=¯(è$×Ûû£M²ÕÐGÓŸêå¼QÍ”‰’õê6Îp/êC¤‹-”=Ž()W™g†yéLMe uᥠD!H ͇…ú˜môºÜ·÷«3¢^Ù˜eòˆèöµ¢Ú$Šf;Ž d½¼<.Ë —ß«rH­ws§XšúàÇ,àyikÜùuêÇy™ƒ¸·ú+%¸6ÉÒm‰gO‚üfºt–�ÎhúxœÉu*Ëlkõ£ø|&Q"PÍÈ­ÕEó¾E�p”Œ9yc‰'ZÏ>\_ÄŽ6É4Ô‰_ëK™#aBZÿ’<XÚŸ]#ý€JŸ#'“}™.ƒNÜ22ö]S7¹¦ôœÞáUUÆ·¯ÝD:™9B*&ˆð’I¤f°ýÒFjK/†„ýdsŸ(Ĩ²ì¼˜cŽ*ø©÷§ |ΣAiÙä¶ V«Ï·d6)W¿‹NgJXñ8£„K‘²näÿÈNAÎsþÜé2Uß´ˆî5ggP·kÝió­™½;K_«™àŒ¾Q¼"Øff%2!³©cp#‘ô¾UÖÈ&žX³ÀÛK&‚2ŨG&¼KæŽJJdÖ}¡Ã¸Ñ$’Žy‰{W®¦‹¹<)‰õB´%¾(Bê:îwGôVƒ6">Lˆéu潤ٔ¨æ-K^ÈMÞ<0ÄûƒÍf½ðqªÞOCZ'Óé¸Ù.àTÁ›Ø<RØOüȸ ½:YüÕ©‹óõ Ì{p:Ëk6ÛLþ=ÿ¼•DÍ¿ëoaÛ€D+vuk?ÇßgtÈT`Ùƒ( M{ˆÍgK³l5¾^v£/š6¦ȦêÄT³í²½µ.b}Íåhâ}lóYOÁ²•`¶qõ˜åÆs’™&7Y­ YÃêï8¡ÄŒRWr+,©e¶t–”ª³¨ÊQç^Ô`TŒ;_¾Ó>ŽÙû,@—ݬñµSb¤Êôœø©¸ÏaþJâm}‰_³÷hâëÝ—1Aaè' ·$îøÖJLxÿÂù»qѬ”8+Ù‘Ÿ¬Ú×DÕÅš{uŠÊö“†Eã"÷ÁÖ Ñ¬¼³¦!Ž7§7©/´æ—Í(h嚨CVºp$Íñ(KuaÂ×\*ÅáXgU’.šîJyl2‚ªääkc6í±Åæ\ÌúùÕb© ‚]‰çd>Òœ««’1z§ëš“ÄÉS£Ö)&#÷lÄDBý,{9•KºŒ¬ž“*oÅRÆ,Ì€PËÂS?‰¯u}Qœ|žåOGŠÌF¨‡ï>ÕXË£î@¯³ÅìIˆ’PéûMÜMüXê3í⨋÷¶‹ãålt=ª®«GºJ\cͤá÷–ŸÛM‡Ò#Bvê—ñ¾P3M®]ù‰)WÉL in….)¦ˆé6•Å©žUÃíš™!QÀƒ^õùêEæ¼AËI7b Ôûφu3_²œÚ¼¬„Ìuè¼õ&´þìµe÷qo™Cµ—÷ž.,=¦KYÿ§†cnÞ-ÍšÓ^)G f*kBn¸7ÊD…;·‰¯©$ÇÁAŽõ@Ñ9ಂ*sÜvJŒåó€µÿÎ}*6ò ³JÙŠ¢,R/Û6æÅ¤ºaHdÏ!MåEð£†fJÌFøý{™]”åØÌ˜4”f]ä¯SlzÏ$ƒf5–§Fn›;@‘±D —-)äÀÍ,CýµJ²é4L‚B„³ò“‰&ªxÐ6Ö¡eBĦaFglÚQÞÁ”•˜ÙOp)­£äîþŽáM³˜–Ñ•› ®Ž.nKq´YÆ=5»úü*òžev`ÔZ.­_èÕ{`‹Á¹”õË÷_~t÷—ª„Í^S 2V—”•R3€fR�Ù$ɉŒ‰¡‹®™¿-G‰Dñ(yâìß[€Ñ÷m*¿8¶whšdE ‘t@3™â†T²š&>g–Ý:‹¢R-°ZúI{ª4U=ÏøÎM¯W«ý@JšK¦ùõMFí1±w2}¿`'¦XîˆQFÖ¢®\»ÉHðØ%2 ]“×a¹ æ9¢ÉŒoLnxõIfb ƒV²Æ(Wµ±� ¿Ö±©ùÉ™8_Ø}CØL‡F–÷ ÇS‹R(—†À:5àsïV lLõþ5�xöó”OÕ^21R>ô–UÈ…‚œo|PÀ3É.&(+žhêzgÓ‘Ò‚¦k Ç“IÊk-=ßMÍùŒäaæe ƒš.ÍF ZCÕT¬Ê]†3¨½»L­<ny½>_Õ½Çæ½±é¸üÜD¤ÜQ,s”AÑ�ùüøÅìÌþ:ƒïZYþƒöJ2用Ëá"dÐZȘðYß(S¸Žˆ/Â"ž\6ªB¡¾Ôe]ëdÀÔÕ6g5äY“[ºœ-7 ªË[p.ùÔRœvÀ>‹E³Qǯtª åàt,“ꑊõh±/YK­×ª÷¯– ]²mçL†´l"9?,y“­­uËÌ^ª= z\60ÐéÖäǨ¥*?t£Î T)ݘrF—6–l~kMbÚ&‹Tvö&Þ§²›b5D}6Ù4;Ÿüf„3 ­Ê!>”s¼Q\î´ifeL ¶~¨Ïˆ'ŒgZ?jø¥k¢gÖ¼ÄLëe `½Yñ lÎ4m"ëÙµ–è’¡¾ƒë}Åf›ÍTÑQ}Ž7N×#/)kêÜtéqmm|ïyçtº*Ϩì„k‚ê½’£Ü>¡æ¶ú©ÏÅ¡ŠF‚cZ2œm>5upTî™1sÝèkl¢ìô‚Tc'ä`q¾8_šÃ=1¸ÖÝ]?¿úâG�T‹Ÿù^bÝ-LôþÜ÷g¶[IVš.U“<ÎðßkÇYJ½³dàˆ½wAÃOm}T¢°©XTT, !ƒÎ¢gˆ„Œ~ggÖkú}Ÿ6[ÓÌ4ˆšû³ÕgbF &õ`jÍSßkê~å;Hªá¬ë–jg¡XÈ¿ww{ªnøÅL7§:$ŸßѲòCtoiW'™ýˆV5o)Þ.#9Ëøó FžÁP-ïD-….ËÁVEis#•êOÚiצ´3uwG-ÇeJ|¢nܨ#³š²áwq©¨RÙvAtìŒj‚ì £SQËT>´¶¦»ÖŬ—êóç>õwÑ4ÀÃÛ~ÄÙå)ãî$áòÀQ\Wç›K(2ÖLX‡ŽËÖžC9 =X’¦a]Ç¢4¤YG?)és­$ù¼8®ò=Jµ¡Ÿ¦êØt©Þ«˜Ê1,Ô¤NX¹gTSÈOõ:•ñqêQË•”žøP¤Àö÷›±Py¥àT-#t€AmR¦_!†¼Ñ;ጻ«‹÷RßýZLêÈÐ7LKKíA9¨Wr˜Y¯BÙEŒo�B½‘x|UýÛ8°µ§Œ½‹ì¡ÔwE³U<R Qû•b‘ J�¥ÓÈ‘ûTj®uië €˜0ôÖ(] ‡/Ásö,Ç£k–=“ñÍ¥ tRËA8·Q ­c¹[¹ÆB %¨b*u6èQ’ÞRž«àRN©ÄÖz6VYð¦œÔ•ïUózò·Â\“‚Í(¦`°å}5&LÌÀW7ÂÇ^[¢²ñL¤·k<ªRBT6fØÇÄ÷š,Õs• 7D‡üùàš˜VÀÄ-´ÍÜQµgލ¿n‚À“Ä#}ñU¾,l¡~Ç,àiɡhÕ-œ�ÚñÂÙfŠHÛáòà'ÉsQr*Suüù¤~}T®*j¡ê`ÖËzc¦‡±Ö¥•©>ºûÄÆ òÈ‹N–ŽèRèœÆc‹~‘#˜”ÖU2'„` ŠBÐë*6d¹:ç£Eï8[Œó(¶1ëã¼*[¨ØÞ%;mïTwérùs_0'¨¸rw�ªÀ¢q¢ô(¾ÇU‹êóÄ– ,’psc!"RËôYl°ÃGÝ7 p(T‡‰+-ë´ýMQ½˜ôPðAá±CyIƒ˜ sÔXhèÕz÷IÊú÷` kKN³ua­Ðôå�‡a6ÉÅ(Ÿ)ÇÒä:u4³ôšjÆY»æfÖú8ÒöP›Éº@)Ç4›*®uyË€#Ј®7«eQ-b @¼e²nZTþ.Ǽ¿hc²Š“&ì]T"×õ·ÍtUö ÿ ‰Ub§‰9€µÉ¤*'–Ò^“Hu±I – 1èìJӛ©÷¸€“ÒãUï+å–ÀªµT¢ž ï}g‡Ä�'©…ѵvAê}d Úù¸) yÓ‚RÛµž!1œ¯ š[ ÚC(Öß”/‹<Ýç'Ç~­˜¦ï©Ù‡¤7IþK*h@@¡ìLÊБ�šª¼“z[¨Î<› ŠÂRøeëžÀÖäõÏ”®ðMYgÓ«””E©µŸz0I /psÁ,Î÷_~pø›U.™0½TÀb Ô´cÞÜíyNq$šêÚ܆zRéy Ÿd7½›öÎÖ É TÅ Ù4$÷DY¶¾˜•³’ˆkôFš p´Nî\²s´Ö¥dY4¨É4ÍL[ãÏÈUŒ=nS).½®†Ý*aͱ£Hª´*~PÌ’©æàØw*Mš ­MÒŒ)+,Øæ&®tÔŸ{0díØt—]«M°3[®ëÍ]S.ÿ¬OrêÝð<9!Æ«EŸ_é>o˜Šø»‹2)µ¨9ꥭ²œÔŒ /ªÊG¥²Þ,Œ¨6Ùj˨tÎÁ¦ËNGº!Žš=ªª–S€³Æ–¡N¾™4;\ëbןä†ëÆW•A7UÕ‘@„ Ʀ1¬ÒÜ•³”?æF™M‚*{{&Ãé℞VÝ/Ø3N×Ù•¨³Ê†„IE+ 7íE•( QÇF4±EÉ4̆¼w›ŠŠ a¼œìÀS°/ ô›�Ñü|T’:³Ó‘ÖÝ4c“‰þ“ÃIèß,ôOÜ{qäÛe¹n€’Y°ÇD…œÞÖCS)•n'•|‚’µ Ìi=™É•}ós&6£z‹¬¡B%$M-IÎ\ÕÏy? e)jß*hr–šþ|õ­´-˜±,‡{‘8»~ùþË7îþ‘/¿@0a¸%=ÏL4šIŽ àN ™VŠŸMûq?É,ÙdÖCN5Å‹³›â9©ÞvC]‰¤{þ…e÷¾\èê4´ª÷嵋’Hчq—z1GÃ*íÐ u(Íëz£x!`·–H&Ù¤YüŒ@OŠ34ñø)ú5Yê«u—ã©Ø]èOÒ¡§‡·= Ñ5Yõ¤¥:g÷F£ÚÈ£fÌ›p0S—%È«¤|¸¦Q¾’Y—Tµ0ãïí&\˜Øm¯7‘õ5s>äŽéS™B¤ƒ§öÏ9:J‡Sý¢Vï¡R}ÙÙ§ æ‘h×Z—± ø‘KQròeV$èW}ƒ0 o`5:¾|m’¬@‰ª1ø#fW$·³Ë:]¢ç$<f^eî,*ßw…£ý®àehÛö·‰ëãAsbÁJt÷o[14q¿öJŸ*@&²š¼)€?3ÖÆ\‡)´@ ô­^LU»„Õ˜”º¬#R·3$²Q»Ô•wJ;Ηš}Q/n1~¬Æ¨Uã´Ï#|Úˆ5u>m/uT Î&rÕ*kLå§�Þ:ƒº#o°.ãèÊ5жîšÓïQ&¨aŒu¦dÙ–Â&ì•ú:ÿl8U)l­Ë[ü©»€4jZ^o€;Ўúú36Í–eÃ%Ÿ‰¢­£ÁQÕë²ö,Ìô\d£³Hìì É UÊfGHFú€å^Èx£JfÜs¤À<SŽ…®ZØý=ºÒ£Ø•+­°ªÉ›Ýʃ%„ÙX“âou©2/–÷§s´¦ª¼1o cÐ|àåmDˆTs^ñuj¨,UîÐzœŒJh¯¡ÍfáÔ‡ ½e5f%bFòJjZXÞ«1»¬¬Tñ†Q½ê³Müª¬?j6Wv Ê#˜9ó¤ÔÛÞ¯‰>C›É®œK/S½ÇIÙØ:›f´Ùº½Ø ˜©òv‰ÍݶOÃî‚N–1tÙì±È!Ï»J ÕT§:·ElPLæ8Ú”º;“ÞG¡vc¬’‡ŸšJé¼0̆(ö€0„êõ4žÆÇ£Èj Æ»G­'¥Z{(eÂÙ½R/ _[š“ÏÈàŒÉ“-êûqƒ¦üaM]ÒDGzëQì;2«ŸSú*}"†š…£ê ”CÇå,!¯ÝZ&Ð…›ê„ñý`[øÙÖk1°“¨oÇ^)eºÉ´öáh)olï3²Î„³5ø‡oæ$>‚¹«/5̲ôµ.~½± ðm“4ö ì¯ìÃñz$M‘¨XÃNzc  ’YÿŽJ³òшX0K2cé?YDCÅÄVX¯ö~ê¿)àÉ4ûÂS«vÀÒÌ4‹bEƒïŸØw²7e¤—aK£sê5tXª†ÌË‚jåHQÝK<-Û•ãÔç°ƒ2›í©:ò¯zn” gMz³·PgŒUçï}0L<)Ô”ºŽú7:uä<6§¨;Hð áZÕÈ(t‹uµÖsqGc*WVV±l5 v0™E·º2˜‰ –M[Òòê^’ÑËÐó¦KîÌà3uPFã ß\2Ý×*O]Ç2³ÿ‚üüu¹uôqо…·ëÎÛ.Á`î©‘8K3o= ïPâ}²×­Þ*m0‹*«÷FÂ_]h|Qï `ŠYdºÅQz$sÔ•Ö8§ÕõÊ0€0B¹S•ßÓIšeP’Jøíš‡_ƒv;‡¬,ñ=ŒÓG€ÕŠRå§ìåÚŽ5Û{p€‰ÞÌ®}R§iÒ lM‹ÑäBÒôa“•xÓKéÚX3²<ËÔ=–5ø¤ €jì€Ü¬Ž.©Ñ ,8Î ^›@S1”_ÎQ]¶ }Ë5Q5‘—¤ÖÕ”Mç͜ۻ Ÿzz0×Âé<×¼¹Žõó«/Þt³< ‘=6†<(W0CЊü¡°@Ô‰CÇ”…ìµJò¸wÇT q‰õªÔéÍš –rˆŒ²ôG–3jl>Jv0Xª¦LSu`£c²0aQ:Floy@ õ¦§ªÄ_5,bùÓÏ».ÉËQZé¤' ¤¡tHš!î«ÔÖÁÖ 8(["X5Lë"cHšôz”^A—ÕgÆaîTžçCñRêü¢ºfgY>júv:ËIåNšã4V·ÙË¥nhY' ±HØ.}ô=V-Òh¨ç"io«@–ÂXÌX>–ø–ÀÙPV â|n ·Ö•”©”’:æS/*‹Wwø3ð3+¨^þ¹]4m>)åè,MA3å¤gÙ‚Îë¯}ÿHøPÞ–mÉE|–­ÿ®fRIÍj Ô[50e·ëϘލ¢1.§>Mï§ø *6³½ÈÕÉ£*³E&ãu!X=Úzf±Tˆ¸9òâžLµåòSoIh©éµ`!¢#еÓèšÜÂÆN»ª©¹ùÆÞsIù@ÃϧcLT¯œ†€4’<òÐbÚ¾ËÀ:A§¢NÚ4RYÿ‹R]N]ü¬ˆMöj„¶eÎÖºøåîÿ¥˜H¾ÈUÙs–$t 5«†+Ƽ¯ÕÞ”-—ffSŠeÄx"áb êó;²x¦¾"‘‚G s?¡úkúIøÄÄÚh¦ò\�²˜˜“1Œ@¦zMÖÜe'¨‹ùj"Õ>Šï·8UA”ÀáL€ï5îâ¤xˆ=Ÿ9ê †ð_Ùë”Í…ïMöÁ½=3Ý€„nâVÖ#Si´R™dôA à0›ò3Ôs»­ƒìUö¾Ak _7Ëç®wÔi7j¾5GÛ˜ìÝë3�Î�Ât4=NAʼn½ “R2šØL˜±+p/q²¢o®j½KÉF\š!‹ÂâИml2ål´U‚W% G¯ &bš·bo˜'+°y º9{{Ì&m3~m’E>½>U¢á G%[EÅ·QJ?bÊrœ@ºœ§FÁ®‡i8dq;12nuêXM Ïl"1‘Ôu3ÿîx×Î&h|w" ûÿ5,ùѤ7ãŽ5ÆÛÕøŠº%lÊ6€>Ä£¬ƒ3C6ùâz0 Õ¹4¥2ÌlÚyä[5ã…¦µ™z£´@î‘Q{NR¾¿3kyÓ� �Ë®|°ñíÜMœÌ²Ù’;#>¢y•£; _©þ°TêŒT}ÀÆ«<u=ë—ï¿|¯Xc–xâJÍL* ÈņâøŸ+˜¦LŽ»Ò¯42öùòí®Ûçxлdp#ÝÐU¹Ø*�QžJçýØ¿)VmtÀj™¬éÀ+¨¼T�-Ðûw‰~(~<f¨§ò/èmfC²Ú�­‡ôkC±<<6K oÔÆ–¿V\Yº† %³<QŒOîª=ðé›Ð½Ð£Æ¶âñ¡.o3¹Ic«îçAñ¤Š`Qƒc„³œYó¡Í‹c½Óuöª6ü4«iJmœ%±«¢Œ™*WÓg³àÉÏÝC{6ŶÖ±8MTNñÔ‡HðR© ~`N›ã!'Ÿq߫˹eOE¢TÎÂŒÑpL‡1¦:ZÞ(íN.´ôd5%a™–R’!¢¥äÑ”±fb¤Ç÷ªN y0³Çè•jâ-òXc9˜Ž½)ÙhT¸âåÀk)Ñ8®I…¬n¦&²°ë o¤ƒÁvõZû+4LÆ›¥õd¤ËwCÇú9%,ø4“P¢Mܰ5SIÕ`‘j¸óÀq(êˆ*-Î5Ï®Iù¨¿IRâ 4ãQæ8ûLgeQãæµ™ŒùZW±Üý¿º=V/îl‚YÌÿÐLŽˆŒÛƒ=NTWçþ†.ÖÏY¯g+YéÐH°ÇáûÒM‰±ßiŸž kRî1„–äè@E—4ÊSˆ^)ï¦àÄïlÔ;-"ýYd¹Ž©¢� Ö ;JŸè¬ © X§IôN† ï ½¹&+µLWl$TãthŠ¿éÊ4¬_0ô벃‘æÃºœÓ­ÆŠPIÔÓ;úƒíƹgeš‚š]OMu4ଟçð=<£|5âA—®Ûˆßß#ç| ©,æç[ ÄÀ¬l*:»í¸'-pàÖºªõþìÏ\\V¬ÉÅÙ¶²šé3¶ t±ÑE韛<K›|;¥¦ÎSd~F©¡KÐ:/>†‰ýÅÑoùàØ–ãTRL5\Qh˜±í’waðÙ]ø±¤tT²l+-ê3p¤×Ñé&9GeËÝ@ÿfA¯û¬”…d´2÷~.„ºqÜëŸ)ðš3eL|2^<k@SZ³Q@#`¼¡ÑQ£ Z%Ä«Q%–¢x|8JvâÍãÍ ;ð×Y7´¢}g*Š–Ccùµ”ÍÏF ÀZ•ô&Pbm˜Ýy%@žîg¯[€íÔ}ôøk]Ëú/7´ ›³[}ì5”²°”8tLÄ9çBù²Å³9U!oúËïÙÿ9%ˆ.ÿØVÔëQ@¯Khz–ÙKO$Q”1{×ÉöÚÂ<!GÐá™TSΕ­P"ƒh˜[é»Úçæ¤qR.ÜI;/X X1±×!ûrå ¯ïF)/Êz—º ]÷Œz£´1˜ zn°Ú/°fT\n€Pì¼™Ró•iJöS‘Ú.R=R€¨sãž ÖÅ÷šÅ›X ¼|ÿÙóØ<ƒ¾­ÙzêôÛèØp YC ŹW§Y‰T•7ciuÆuŸÉZ×±N¾TûÞî„G9Ûn3énꄼ~º~>ZµtɆbˆDbW‡´r{I&ÑÛ´èûaÎ4(SF›0Ù*ÖÌ>—.ž¦ŸG퉔Œz_;¡½°Z�IL´›bNÊüÒ’C73ƒG“` #&Êb9ŠÕúc‹ƒ¡Õ”{^[«æÓIÞ—7ŠúWuMY ·ê¿ÓRêål‚ŸÐ1´*Ę÷pÌÚºæ³wž1ŠTh_]ÌJ‘Smdn`Ü› ‰/Q–û<–¹&—êµÙËTÈÀ¨óó) ›§ԼòJ“}O\Ç¥÷dêè¾ÊTWµ xÇÙjË~vºåŒ³Ä­V°-›;´jëØ¼ì¸ Eá3^5u({-„†ÕT»“>¸lŽÞÄ•ó½áºø:SÇï'ÙKS €µº3߉³:[)¨bg…ÎOu‘Ÿ—ëΆSæ)z 9�uOÚ„ EÓ¶©«­iúWŸõM3aæ}ˆ’'›+OLYÓøë¥‘*ký±Ôx7SËù5WµÎs¼³â”‚êç9’ê†Ø([´` »šv®‰²PVóX3]ÎDãÁJ£™‡¥”µ<ŽkëÏI<±ä ª4³“ÈÕ‘‚êZ q>ÂXS¦Ïw’«€ÈÐ;€"A‚é³rŽqQ§ªÂèr!{†*kQË 3`ö¼gMÆ `5eºÎ“P]žÕBÇÚêÇ$ÇÌb¡6W« žÅöØ~`Vº+%!T@ «Œ´wûÄE~欞šçÉ–˜€«ÇùkUâ»v f! ¸m2ž®5cöFnŒDÜ´‚<Ý\¾ÒFî󨛣¡2 f%®¶>¨ÌòúYN#Lž¹šJ˜9sw:÷Èæƒ÷™*αk^²4J3äˆ6†P©lì,bÖ\xœ+eÎíøM}k]ÞrøŸãAR ´Ô•T²Ç1õHDA~7ÞÌ6.J€O]ú‘Q’å{@¶0pHqX5Zc>Þ%C%É- ³>#É (Åù¤®ï­Ênç(Ÿ”ÕÑLZ¡>«~޳þÔs@MëD޾—ê1;`z’œŠ(“§uÚ'lmÑP6nâñâ–RÚ± Œ¸­z75§u–)–fXEK¢–M:ñÂVC§«Ÿ›„•ìM‚[»9á‡Ètzé2ÐàÍ+J\ì ¥2Kå¶?7›0sÐ%¿ôçFç‡PcV5F«×ØŽfkØ%¦o18W¶>¦@IÑ<Ÿ/—eª£1ne(Ùeµ¬8{”+@QÙfí*®Êî3ÐÏ,—]âû"CÓã™LrAå®Tq8hˆ‰ÍHjtŸ§OØv.5µ`GÙ5“á)aÃ\_§óëþ½mN¤xl?¢¯ALü,¸OUYOtñ_í nKH%Ýî95 ¢­ìt­µÖZk­µÖº´u³Þ‚µÖZk­µÖZkœµÖZk­µÖZk­pÖZk­µÖZk­µÀYk­µÖZk­µÖZ�g­µÖZk­µÖZkœµÖZk­µÖZkœµÖZk­µÖZk­pÖZk­µÖZk­µÀYk­µÖZk­µÖZ�g­µÖZk­µÖZkœµÖZk­µÖZkœµÖZk­µÖZk­pÖZk­µÖZk­µÀYk­µÖZk­µÖZ�g­µÖZk­µÖZkœµÖZk­µÖZkœµÖZk­µÖZk­pÖZk­µÖZk­µÀYk­µÖZk­µÖúG,{úÿþ‹ÀoÿÁ îÛ—}|# Çí÷æ¯Å¯o?o¸oßïáç·ß¾¶ÿ½<½ñ§ýñâ×ñ¹ß> ¤ß¨ŸƒøYÈçš_;ÒãÞ>öxnã½óòÛÀ pìïíícž¥ÅLJxß-¼õ>Þ>ÞíãC¾×ùsõò÷î½æ÷„_§z.˜<Çíß¶¯Ç÷’¿‡÷Æþ=à÷±{®í§¡?³—ß½xûb…‹ëXÏž?y øÛý„5±,žqŽwÝžçQü;Ūíto¿kÄœzÎjܶC|3hãhý{>ƒçELT1œcvãcŒ¸ùžñëïÿ»W/ß>Y»x­ÁgÇ0þ¾*£kÕ÷¯Y¸dÊëÂe¹88ÝÙF Â÷ç2~Æè%lÁäPâW|»Ù-ßíixú*#wßÿ·?·ôÞ`gâÇ÷ÎÝ÷€Ÿ—ŸN·ÑûÎàÆÃó&€¸ý¥äÍö¼Íbðqú-ãQ�´ü\|Nù÷oïyüÞ¸ö}f¼?¶‹¦~vù×ÝîO{ÄÊgh{æ¯e­Ë^þ8 >Ë^örÜ#㿳*à »Ù·$fìñí¯VbŽxÆ>âvŒ!Û÷oqæ6y:ýŸs„sl{|K‘r(wÀ) ˆ8í#J˜HðÒÝcûëï3 (àÆOïŸËÄ{­pêeìãÐÄld»0öï´pÁD½íïq謽èvpÄìÀ 4pfŸ™„̤l_ßÉ8<9{ˆwèvÉíÏ=£Pñe;Ýö¼3—$@—åƒæþgùãBwù|jô™%°Çúà>?ÿ¶ÿhà$Ù¸øè=Þ?˜Çg{ú¯an1³4Û�7BØ{$~æ[Àû¨ ¾k] ­-ÁíÈ6xÏV–ÆdÌ“äã~’=Å©˜(9fGnã%/AKfÂqJãÓÞÏP€É3p\!6;øÞ¼¹°“YŸÛ¸˜î’lóYõ8ûسÖu38‰ÎÌ„ÜÌã(Œl" „L#"m„ŒA]}@_ |†¯X3<‡=Sg‡˜eú§f|ÀFöf[¶u€°L+À3(çáÊ Ex ÎVä%ìåùD&â FHJeBx…œ‘Åσ”ú(ãž`¦$)¬Wb =ÃøË½c#åâr°ø{K … bÀ·²Â+[ÿ€<&[{:,+1S‚{3ìu²dšFŒ´Tšáò '+žØgŽmW<Ä*ßãYdÛXñÁÖ{Š?ã1-%A v Šs1fŠ/…ù_k­ÀÙY ºÔà™Cþ;Ó“ƒØ¢ÇÍèÈXdd(bÆ_Øxãš *¼‡'`²³1²|5�„%–3 Ë_ߘ¤È*lAÍ (¸n­Ø/Œ-�R*q Þ>€»Õe’±×e{OdVì¹,ä!`æÒ&Òå™±l{epC—Û%à^Ákê%p¯u•ËÝšå‹×;㉹ÌÉ“M˳۹‹åd3¾æ½°.#–Äž<'o00ðP dÄ★RWéeËÏ]ŦüT¦´KtcòÅåãÄîP[ÃV.²VbpÊe:.õÔ|¾æ/?FÆ(+©^’z8£‘AEf7b ³)™Ê¨ò÷Ä̆/âDÒ €á†Z?ŽŒ@©Y[ý:¬öÉX ÆU†Âá%öfö(ÖÞ+ bÆ ˆÝ²Ìš0+·|bÜ6pÁÌ ð Áq#Ã,pŒéÙbêu@ê‹ÚßT­‘šÏŸ¥Ák]ÍzÈŬö*:³ ÐÌfj8¢2²º·.×¼`U'@nôÞíl7•¶ -MnPId_[â %!3*Ó„ÏÊPǸ7RÓ"õ®µðYÜL‰qðºAó!¢?‡C«Î”'J”'ˆþ¿’öݲ˜” 4©:0¨YMÅ×?Jg#àÄK»ôY @ ®hš `GÍê@‡ÿ¬ÞÝD[ƒ'<±&¢¢_ƒ¡çúz¬ù@keÿìõÏ,“C4‹©“Œ"çÔ`8ý~´“£ÙE¦gÍÏXž>YëjÖ³çÏŸÀÀ^ŠÖ¥ËmÏ×Éž/ó¾¤Z»§S!¦OóΆY‰y9¾ù�•›â4ìžì9Ä„SèÏ Z)΢™ú%s¢%¡ÞE 4Æ$l›µˆÁÉ5a‘q• L—«¸Ï"âóÈò J-ÖRvÀhŸ/ÈÈrÔ Ô)Ûò&»q:ă%Èô3ò%n¤9Õ£3 S³Î8rV”(b:ĵ!²¾Ÿ:»ò¶ìÇS=w"¦, ±dÄA’úŸëÖ•SWû{™Ï33@ ë¢ú“8®½BåZ£€½ÖU°7ißà8–x:S<Eå©çîˆí‰˜XFÎ\¶PA õ Ä;3Ä"v$ÆÛx\;3Ò±å ¾NfÍ÷Û(éÑŒJObf®ã&».åµÀÙ“\†±|Ñ _K4¢fIâFörÑæW7pm*µ2¾2+ÙTùnK‡2± ¥”´åɨXIšµ!5ö¯D:[5÷2=tbÏDP(X€Èe©¦Ï$–ë—mïmÑ?GÓJmßTÈ‚-êÔt @ ´çêþÛA›iWš9™ÅsLE׺Žeÿ›¼÷ü·æ¹3ئG“hYº°SrIÑÌð‡ÈQÄù4šðDŠí9q%/NñÃeñÖ%Þ¸Š��m­©<–*�Ôüì¢Ç($±.“嵃cY&5˜Y( PÍšˆM²98ÔŽü¸A ¹l$KbYý¥ãbtÛ‹¸`սɽFC ¸ËlÆþ¸åÐYb‚bg‚Ö“�V¦ÐÚ) #¦©aºRV RòÈòøhz†ev,±i<]'­ËL)� éêè~VÉÎ(Þö‘¸£Q–º±q}ý~Í«7†ÇœÄ„G‹?hQÑv?Ù(ó(f5Æ›˜¨¨Þ0ž(Œ‰ ÷%Ö$%3Øã\ä‰ÃÄBÎd^œJÙ\’žO“²–[ËypbŒ kH`­Â਑½Ñ@Ì—ŽÍ/#¶Â#`BÒ±*Q2ñªìiib+•t`ÅÅËBRIÄkïÜG»cVE0Q¦å{ÃkˆÌ]ôÖŽn4;bŽ1•Æ6V&Ö2Š–F¹K§²V2[§÷J™Æ×äëç\@\biŸÉ�*²^ççh“W¸Ö…¯GÜ�ó+–YP2ã‚¶ ””À'Œ’8^š ×"îéhÃ^Ò…ŠõY¼´&4¾M½–ÌÞ§^ ‚¬°Ç]‚”Ú »³WV2²38˜po„ê#ÉL¦d«~LÐÜIÙƒ°G—ŽaÔ¯÷1kA·Pzx4ÆKª7]bU lR¶:€N�Ðåë- I”¡LL.¥Œoo]¬Ą•Ø1õõ¸)�õœÍkù甀™Ú y²*?Çüú+õΑ £~$Wм†õ»OGÝ®ôù‡IÛŒ“¦Ä¦Œ=ãD8;†&y´¢ùKúñìrÿ£Åã„ 3žy*Ò„€ª3ž•Âúð�E-»›«%,Ö¿ ÚÌ9fvÓµ*ƒ“.Š:ÉTD8ÓÈ_õÊÁÁÊŞǸ |ÄÚðÂhe#{‰ ¸ –fÄã"³&Ü£²vkÔ“c¦£2.n’NGàñTx)±üºb‹jª£{&ƲñÖ)A»�­9;MOºò% äªÌÎ)[Îï•,3©c»†Vµdàåñ”]H”´5*~eë_÷q£¸š"äƒ[zõ0Ó_êxÂÌEyšª=)ù9z(iʼn,n|f¦˜¥x¢€–Âe˶šàÒ›P4Ë%æøÞVÆ8KN¬&ãµÀÉôbø)–}“êø!÷|pÌâmñòÏý:¤Øk¢¤â|?eï©™×ДaHubÈl¾*#‰ÑqÆ5øh£�ÝäÝ•LL#fò}L“IÚaBø˜ÕUw@ã•ÊT³·¬Syß 0«†qÄl yJª‚9eŠÚ­F—Ãë$‰ºÔVмŽåî!Eó¨¹7.6Š•{¯–<]%“ÒÂ!Ö:ÐáiRI rz}4‘‹ÈiB¯±É”îNœ`l¥9´õ ëcÅ»Á鞈IžN&×9]K�œra¹®ñšñ!o¬¬W>Î ˡו⠄8–™Ê1¬Ì#è®ï¾è ìîßÊ{gfè‚.¬H?4º`= ÚåÆ?§ŒN…ÒÐ;´p¬4ɘd9¢’rÎ�Y¼°+OºþŠo}¦ÖC¦†Þ*"ê:ûhAd– åÔ* É_ì%`Buv­K]¿{þä™=Ê¥A˜ÏÕ%­¬I¨7%|k�ïõÜ·hB¤³L@Q”=íjBçèØ%Kg"Ǧ8u:u`´³PœÒ’ÚÞt3?oKÁ¤$¾¦¨Ö*�§±A(þDN~Pã૬½LMrêĨIJ”Í�ÿž*=Î"R¦Øç‹ßÉm7ÿÞ™7ȼ^–BuXLIE0W{jÙ*ÿÝJöY';\öèÄçTM•ïUß|<¦ÇB)©Èß{ª¥¬HŒi‡$ùzÑ?¦ˆ=½§YŽ^:=ÛœZëB–áóÁ f Í+¹ôÌjÝÜ Ÿã)DâE¶#Ì<{æ`¤ „Çä­jøð©ëØ)$/*' c¥ïM±·.Îy|u:Á@ ¦ë(¸}ËMckŠj-8‘¨²ØN%§Ü ›r~¶Ì4Äë~à)«È™h„Ùjc³è툗—µª´§Nb¨&‚Ù$Žûûi&)c‚f9˱ÇÄdÕ\œ§!fßÇ� Hð>@£F#Ü!ðÉúÕ’b¦úk@Œã«Fnæîå=gé�[ìÍÕ,wÿ×Èà¦dÁs“; çEë€"ö¬oûi™c ¦Ð€¡skMJÉŠÊqúÈ%pÆabzbügh«“WÐ1J÷÷=jéxö,씚׺r€3f!Ô‹ÇI‚ßZ1™Eze5öK‰.B•\ìêŸT*‹ª¶1KOÏÓÅ^Êö &tŠM �LÐÒ™01ä-«¥˜ˆQ¶Êy4¼6 £ÑÝIÇU }?JËÖ'íÅA¼öñÈÞK”9qeéý‘ž^.ö·­6ãK_Ïž?y�Øçq{/ìjÔ´‚kÅlÅ6W{Ús¥™?©Jä}m…½ÐîÜÜg˜š¤ Uk‡Lz;ñÏ G“ WÉ bo›˜"¬øIËŒ…mÖR�'fÁQh¯4sz=,[S]2Q„ѤÏÈÄs3ž§Á+ÞIúÀ³Ñ£fYº±êZÂR#•|qrfÐË\ûfµˆÔÓÈ=˜ÅXκØy±¯ÅÓsȯO8ÃÓt‚‹Œ‘'ÐÆ[£Ç±3ÐͽH™$Ók^ÊXÑ.c°)yŸ¹ë"Gßl˜>#×£ë° ä–ßÅó7ŸC4®–¦zÒ³Àؤ1h©p,þžúh<±CL4VñMKB ²¿…Xï<ÎnÉ8†v:3‹zΡS’á>£ªG¦ú&Ó0/OOr_ck`ºÖ•¯ô"39±q,4Ì ð¢6Ú¬&*¦xóßóåE±„D\:TñÒÍ{Yr<4íZר–F E‡(žðŒBqä%¹v°–Cä–ò‰ùÛ|l0Ê—»gÅ28M uFžã£2éþ½=wǬ)W— €H—Øæ»P¿Žÿžì •4�aÌ*ˋùðeÿ÷†»–fp`Ò߀yÏÔJqÄ9Æ^âC[�0¬Sü™4£©”çÃWƒ·œQC?3Y{©Ž’´|îBLv=1Ý˕̚žÇ-÷Í#ì5±]k­À©êší« ¼L¯8ª-ÂA63lïU05+;ŠÙ€²K¾Uf|°HB;kШ+Ê7[[@ˆïyÊŒº÷# š|ðù8u»s/ôtˆ½*@%2<uôŸ?vK“Gúm"(Í N»š�,R�Y§§šÀæçÆúÌÜ)QˈنCñbp.y={þø>ý6¦“:uÚT+€ç‰¼<€É2çD&m‹+I¡Ô‡õÎìRöqƒ4vÈB›¥=ËëN1z$\,ÈY'R£¡0‹¨v6/k]9À©YFŽ÷&; 1s:"ÔÇ0Æ›-e*±·ÆÙj5uŒÑ=¦@ÉT[(+lŠŒ¬ŽmVP+Ù]âž’gUlt­¯(1Zj<UtóZÚ³<¡j… Cõµ™¥’gWºù3Aúîïb!?f€jO«K&‰A•K‚‘]‘WBxáÜÙWYkËs6ÚòÔ'쎌¾Ve·ò~’«²«µ÷±o¬ôpÇöÎ\¹˜Oõõ:i*L™s¤”‰µÖ˜:ó±¢°œµÀ‰ý0 $nÅj£nªýZ»ÿDF’%ú“À UÒ”Kõu‰+I¥õÝÚ Ç E¼Ø\h5 tÃÙO6‡C¡…³©(ÿ®ñ˜<Á¥K=JkFO!…àų8@9´z©gC¼Ü—c{¶’)³D—Ï?·ì` Åó…he ‚"ïE: Ëø¤˜ÙZ¹Üýÿ0Sâ­±¯U•vÑ<ëh$7@ÀB0.™¦I4Œµê=7Ó¼«–;ÌìèècÅ 0I6ËI𿫦=ÁÈb°ñwÖ„u­µn²¸±?‡7oD=™q.±jL"�8³·åâdÓÈJÙæ,ŸkçŒfX«‡ÕªéîdÍ ‰€2u a¤œ©ßV`Od¡™ÉïË­§÷Ìó¨j ÔÆD¶e,3™MšU  ”!({“Þ@yÄ]�ÁÔ¸h%È'ç•^äúÝó'<ŒgÐ 3à ãÙQkšÖ-y¸`HóY󤋓{`< ôæ×Yê {8uº7°¨�OMÅì~›zÇùå„H¨½xÜß;JÕŽí9qÄ>O_®µÖ-ƒ‘t9ÔñN¾Dqz(±?ÎH|й܈\%ò½¡\ëU F™~PF¬Ét²`�˜@¾)E&€Áꉔº£k¶|ßY¤ÌK½ß•!"`™ŒC«¯«^zÿ ÈNdžLM÷çÕ6ü™d—b —ýMŸ�³?é²êFÁco“S¿Up¸²Â ]†çj¼Z7Z½ð¡’ îaãR0—•«tCgRû ­eÆþ5éPNÏ1)0‹Æ~w4FÉ’CÇ!ªÆáS"ìšyâ{©sP_ëÚpÏ„•ž5y’B£FYèC¢ÓQÁEe!º²_dÉ»2 k.rr½6â¶Ž¥jóÔ«Íj ©|ãð<n‰\ú’æ Sùh Šnª?‚ö, 8fP¥~¯‰À\6[€2MeÛ•ù¸¯+O¡©)À•^ÚzöüñC�¼ä"®Þ7^‰E_Œ‘Q¤¡°™±D­.goÎÐ(3{ìÄDåä*ObV‹†ðNȉO}duSï «IeÅ`åýM“º†6Qb¹Å²®%N âqì;Lä +—aܬ©#_ôAr­GR' ¥Ð@ÙN“cxljËZ+ìFn|«�È[ЀČŒ÷”›³s‰®Ó\Ù‹AžiéœÅÄwÔt“±¹´¢xœ'Šêxv,Q™0ÿ£ö3ØDÌmsç ÐÆÉ e’j}zÈrÉŽeVfxëùèÙ$°©.gÕ«¸ß²d/JTA׌ºf@eâ`5aóæe) ÍGÅåâ@aeeÐÕä+2R•WllVc¶ ±€ÎZàÄ‹Áãæ±Ì"ìÙ¸ïÃÏ`T&ä‚nE3þ]̲v̤ë>&— Õ̵_zÑ@.+ï¸Á6jMìM†¢&­¼œf¨lE) ÓÑêÌž(pWÓÚÀŽAfîwt¨ž)­kQ\fäókQÎóù{‡3G52T‡dP(Û-›òãZÀÞØW)ñ’ÿ[b1<³¬ÙoÉÊ^މŸ #WP¿ ¢Õ©y~4ù÷z]�¤×䌙öË2ÉdVù@ë,&W$à9sI%h™Á5b¦�–ÖXåäµÀÉ|@ë®7¯‡CS/+“,Êm7QŒ0‡àâõrtèþ›ä•u¶.‚…æ¼ðºŒ&¸E©™/åZfÓŽÝù½³23” º |ó⥒= „yÖ‹Ü!ã[û˜øó,ê«ÔÓbÄBµaÞ3(áÌÚÀû$îc5Òj$_P¥ÑµEà\ {3Î"—Ô•)n-ÓTà;Jàñì¹(³nŒCž@µä­$'«HÊ c&y°ÎEAÄm€Så´<M‡K[+IÓSUuÞZðVì*ÌV²VpØñYeÐAÊßðZ¼MhiC+Á©p±YÖŠ±pᦠ!õsŒl£›\âƒûƒÊë’IQŽUû¶;¦šÝÅ›‡÷I£TÏ …£N†euêH)W+Šý½4¡³C¥Êbâg¢v‰C¹¡[ÉP«ZÜ^Þ¿bèXµ Øõ¹RŽÍ¿ïÇXëî²7föU QF î¹lÍ’‰ŽwæØ£§šË…lþëÄøx*7ÇòŽC›guo/ýyÜ Ì=C]o‹mÓpw–⟭(¼:œÖ­˜ûæfæŽ êûúᔵÀi²]5Z‹<e ^z:*3áB,#x®cûŽ-ÔÔS5X܃çl&Nà"OK•º9F/MVòfôô~׌ò5l/¡R·TÛNÌŠ%°¦§3,ioÀ3àÈ !ÓÕ œ¤f_{P*­0Õ‹–¥çcYÕÚP™Àˆó¥¡kû&ÙÄ• ^Î2³?0ø¨ìY3ÉYPÏê>KB}¢ÔËLÎPöETpš�ä)©ª2A]rY7ˆjng½ià-:QŽc™MKAdšýŒö…ÔciÊÒe".hG“›k]1À©]ôª«Ÿ{n¸Þ™}I ³zÎD"HÊšA„勘Ǣ›z8à \{=9Ô¶UéËŠJ¦&e‚Èb\‘‚îhözÑ€c*¨îÒä3]Þ†ŒÔeo!#ë„ôêô›ò‘‘¥´hZ˜X>+yf•¼çMËkózã4Ï–=P]ë²7Ýñy-kLzXš_-÷Ìéþ¢™±´ÓZ2Ú·¬8Yæ(ÉÚ0^““¡%'–½ëxJ±*gëˆ ù}á^ÏÂ$瘥ô„ø|ó½´ÖZ;ÀI™†‘ZÞ\&@ˆFÐZ¨¯ðC$U]¥CàÆ}Z³VåLÿrêƒ9ñdÝÈ{A$ú—ëæe<cuÞ|hÙ[)ýͲ8_-¿ 5UW~-F Ê3åNÁ§²‰�•ÕGÏEŸ,ko4Úuz2¸J¥(Ñ'à œNQµEF*ÝÑ '®u‡×´^ŠKöÉ —d„##i’ ÌZVer2õËä>¹Æ¥²zÓ˜Y×Ðû$ÙŒÁ€‚˜ ‹ç˜‡7„Z|µá©€°²÷Fñ3›„ZzÝó»ÖZ§&ãHA¦~ra肽ʂóá¯Ò¬²$uZ¦2@1lY»sæíhY„Âë$ö£ºKfå�»èY›ª£¦Õ%}kÝ©eœ¾yokP®¦sµA»Ó(–^?§”YZ-Ûš�V°) k  ${L]D^ ìØð]AŒø“^VŸ¯-¡¿‹X¿{ñä�lâq–¯ñXnõ,hI` 2¶è‹Ø)‹ƒZãWK1dP¿7Ÿ½¬(<<é†ü/³¥žØr *›«³Ì@(‚Àø3J‹¬T’²¹pX™¡ÅÚ¬58œçÉåÉÔÑ®(ˉÞܾ/7ï©‹Ù¦~l—¶2†` —œ=XqûΗ*Ò˜hü·,“"±£ˆ#¦ËÔ2ØY4Öˆ‰A‘ض€¸Ì33™éE qÎãpæet3N;©É¨4µ²T¥JÙ*• KCx£dj)8šÌr¹´°~+xÞ}póüÉCwc÷&) á¹66TþQóŠ]ê Js*N†>–Ò”Ø  ¬…ѨwfÈ“O9ðÔ–Ç×ÛóùdK•lÒ51Ó¹´*¸jE?Ü«an­ pò¾VS²DA£}<–<@Ó½.2c¡’ŒP€QI´L-шãÞC³Äªé6'vyœ:ü`ÄJêÌÚ&’\cŠ O+¹&Ú^iòÓ&‘|ú¦BFqì»–üªŽ‡%æ¤Úp# ;³kzd7$Û$_�Þ¥šAnd“VYê²–Ã�ìA•«È:-œðl`ÏmêksáÎ]õ"¶Ö»ªÓR*òo¥>T“Ëâqg(‰h¶¯ #ëN=>qÚÉ”ÐAQ¯¯±ö&5w¬�•Þ¶ßaëì®U�Ž×Ãäœqç‹% ¾yѲÉL9Q³CxvÄÍÝNÇ6½Ì›šäòH%Çàêî]™*“Ê¢.Y¥Ø·£˜KïH4ÁÜŸk FeŒÞ�Te9f$ªÄüÜ¢ øj©0@Y• GÀSOÙ‰X}Ö€_áLÁt(+¶ÌCƪFh—ÎÆgo¾ð8–vùìçᇡ´íVä^“IF¤ˆŒÜ7–Já¥ïÅrâ™úo”²Ÿ¸ÚüOf˜QØ"Û¢¦9+FbQ™Ô1Q¦%ù3JìUJ•x1Í­¶k]ûúŒ5øaåßÝYÙ7]"ûaÓYöØâð8ë¦à½Á>zætFØðŽ€!Ó�â&ˆß@8s² —W\€­Àÿº°cÊà¹Q6 f±}@>ô¬+“ŸƒIóÌú­0gybô\t >¾]e¢Î5ÄÂG{P¡ 5®{µ£o¯èaˆãý¡|˜l#FF˜tŒè<‚Öºëä7õ<Ç4kô‘2)ú+Q#ž³¢ÿT{h¸7§êSÅó•é=€œË]|ï½ÚI×¹ÄT“úN‰ z„ý¬zþÝ–-iòóØÎ ݵ|÷ÔóïB½ã½¶¬Xkx^R]÷qã$Ð.2š@q´T¬'†Àè‡ê÷ß½|ûn}T}½uøã$$Ø€U¤\Ø$ðîܘ7ZÎ\ 9V&’{5Öºsë?ÌìA¶sQŒ \íûÌç}I*èÒt’XÏ Kè[ùðêå»ß~ŠgÕ`cïKl|Î.{•½ÙY_5B Õ³³Í�­c{Öºîu£;ããÆ¡íIWý>âh¢ßƳ¾ý¤ê´Îr‰½¶5êøÂ,“Õ«ÃX»2N­å²,©\”·ï·4½¶ÖÍ�ìQq( Yf†ŽMfx² mÇØžX?¸,—ä=™Ù Òecøã'{Nƒ[y$ÞXBhó[¶£ñØÃ¨¤.Q ³…XëêN­£æ¾5ydâà˜:J¿`X!^…1iUœ»×ºÈ¥Ô†Ç¿÷Â’iÏ’¶’´©R¥qÓ";éªs­»n¾ð҃ʓ¢:óP¹Þz(L0é¦`îmìŠ)3ûàÇOô´†ÿäz9ek‘µ§÷„XöÄŠgÖP'RkÃøZkÀÉ‚SFË kq‹¦ž+ø¼h ð3Ú­yϲº¹æ&. øzÅÕi´Àãö5—"oÙÔ5 _F#Òµî ¸ydfÈ�Äi„ù´#(¦E—¬¶k¢™¸²;óCI#ë{xH4cßÿñ»o?~ªüRuJlÇè<Špi<Q+LYÁŒA·<½[ì#€uN×R�§¿p< ¦%•^!'ê¡:SW¾QÚ S}ßZÌà8Âjm”Ž£ ûeT|½ æ]û)9'ÆFF­Owýîù“€½u÷å2åoÕ‡ƒ°›Æg¼›`5YSIät�í€}ûig$ –»CIO1ZI 14g[hýß™°1§7ÄÒšx\‹�ŽÁ MœÓ˜l`[P½•êèôØŒQ�¯šs[N hM¯\È YpH$«`d9À;¦HO`(ÿ¬µî¸yñäo<Ÿ©•¾@5Fm¨Ówy/ÐdUŠ‘U5Ø]'mÅ 8˜QüñÕËO•½©ñ}°5!ð v\z¸;‚10¸ï ÀÌɵ-g-8IûyôÖ”Å�e5Ñ4®×]¾B,Ÿ³¦þâYërW¢è™µ!ý7Q” ‰¨¶¢e³÷U”zjv›¯>Æ+j~êÌ»¿5àQ R<ÆŸZ®Tz_:Ii(@òR@uËT)Þ,ïV‡4à“foö¶…]Ñ’ÖMÖâñí¨«Eƒ(V¿ßHPV™*Ç‘s‡¯+c­Êàl@„7-„á£Yu®èZŒ†#K…Í<sÝ]ÐÕ08†ÖŸ9þYyíD³Ðì)”ƒæ~©™R{Ö ÎÚ‚waóà�9÷‡ˆx¤T‡³Þµ—¯Ä! ³üÉŽÆ´H]õ ŠÉ™úýwŸ8{ãÅ¿BøTùà÷?•¤Ì¤Ÿ^MB Çñ—¤§ÚÖºz§4à)­qDÏYJ[n²ìyä²)omÖë7–$Ùø0ËÇ“VUÖC6G%˜N}eÂÝ|­O”½yñäwÿʂǙ \„‡yO©$ wœeQÓ ÈMëåBÿðêåÛïÂYe†,úK%V*4GÀ˜„½ yŽþ:¶Ð©%¿h-´î‹µ Àá»14V”3Ùu:6aŠ€P’¬ •àLØí(¥ÎW³FfÌe4Æ|µD:ü­ìg+†‰£?#‚tö6«ö k}JëÙó[p££Oö1ã¥Ë$Vb…IÓÏÛð‹c¾16ÞõwQÔ4|}7Îjzñ5U†Õ»O§œ­Ø‹d¤8y¡ü·øY®µV\ŸIºHÚqT2ú´ˆ¸QÞÕXdoå»s#ZVÿ\,×r[SY“¨òÊÙ¶²¡>ÊsÝ>�väà=ÐÖú„€Í3¼5ãaŽ“&kJQ±ƒ0û¬1�É’Þ^ò1V¦Ÿ!îýçlX—l?mfï¾{qWÔÚ;•ðȶÖ9þþ˜@GÅpžÌÚT9Ä“;ðÅá¬E N‡å©§X3̋ʒ÷­[X^?W'clbb¹Öe/n>,ûˆÒi ¶Éÿ,þ;”ˆeçaV¹âb»?Íõ»çOðÖÝE°‘â†ç.G9›N² dÒZ!Ç{³:,HŸ7•œE^É_ß¹óJçÔP'™=ëL•ágü,A÷ KGä~•Œ¬�NT…5ÍmÛE!¦ˆXœ2™±é-›àuë…©ÙÀÑ„ÒÂXk]:ƒK¡¹ÔÄSS€dŽ™UÜöÜ¢bÀ5¾’<†Ýµ?póÈÿð(Ž#sYr 46¯1ÐM=<–±\®b~ ŒC‘÷€?í—ß½|ûáÎjê¯}5(ìY*ó¥‰(ÏÞ]MË7\)NÛèìÝZWÏàÄ:²hü¢CiBF?èxÒcyqeÞåÌÅ(ù¶‰‡c÷Bã×ÁÞPÃ0@c¼&„÷|8°—Ëeä…ÿ„ZnNôÔ˜j++ütÀÍ‹'Ÿ;ü-à÷8±ËO‡^,0艬œ—1𜠋›ŽïGj¢U2_ê;ðqˆ©¾dûá»o_Ü5î&‰z)—‘{¯lÖnjÚýŽø~•\È—ì]묮�N¤ +eŠVF&^Πz#»Áz£{ÃlÑR¦¼öF™mV)Gy|â_Tp49djdu­:¸yáŽÿ�ìÁ”U�šø2´¾r|¡R˜±É�×΄ÜûLäˆô˜föõ<­”�[ñ+dÖ§Ùo•ðcÒ074þ³Pùô­jf­µÖg²®éãr”~n:vÌ¥ÏÕ%²w<x£ÿ"?¦ëݼ֥18�Ä»¯A°Ú¸è´e'ò¢VF?GÙË[`^á?o={þø¡Á~pøã\<ŸojîõúxÓͧ’.Ži ´F’H`‡±´ûÝ‹wïîÜY-÷EñÑ ïé˜xäïïzvÆýbÚÆt•#¿ç…9[k-fpršá¥~—Ñ.T¬K)=˜…¡² › \àæ*D�³Âº5ö�J}Ü 8@¸‡Ï%/µïŒ•„ÿZÿpóäs�ÿ ÃãX¶ŸßH XAÝšâÇn µ¶¦Ÿm6v×þ{Ù7O•E-É 8ü€—wò¬ºSÏ¥µç5ö`ª3¯š¹ÓçH÷ëd¥^•¯¥œšé f.à&¹ €ôdß‘^7æžu¯ åz!ŽÛÎT0’sÀ˜ï}È2Æ]ï»þŸ3Í@MH¬õ�6 øÁ€Ï³x¨ÏÖ+ƒX‡Ëã[À˜xq!ßÇÏ•ù+³3â¶ú¿~õòÝÇ»ù QéÉGjûᢦYH>,Šqò÷»¨$ )ëÇĤîƒU¡Z‹œ½L”¤5€d˜ÔñÅÂ?§v¢"éßFÖ™ U"¸ŽÅ½2#ã{2\6r"^HNv Ô{“ÛÉLðJký#Öïž?ùÆ qøçÄzk” °õPÀdÿ:íq>5)”«r©¯*Ê�€—¯^Þ½ÒT¾Ô(¼jSˆ¥àa×S,€ò–Ç4"t¾¯v™‘u]¬œ,´4&¶þ…4 ,¢Â¾‰ a„.²©Hw²Ûîbs®ŒÇ Œ yfaf…î܃ƒt!Õ Þ(‹§�îË¢á l;ü�qr?²Xò‰:næÝN» °Ñ£÷/‚•®¯&¨lK6ÈËtrëkföþîMMÕ3Ê Q‹bÆI4+̨±±i!@fnj¯Uø¼W™j-8ÉDÓU£è`ŸµÐ–ðÒIg‚3‹ ƒêçZ—ÍÞH%í½QØ3k(Küä,ÓÒÔwÔÎpï5<‹ø?³ž=òðçfö¢€pû®@¦~J©ï/‰ÏÝ–>w¥ìtÁf8¬JLP5¬‘±‰'—>>ºãß.é¼Þ¾Ÿ&”¿#ƒ3ú¥¢rˆ Mµ¬H¸Ó)4ñýëžXKœÑð;½E[ÿH”Õ>4ÄÜz*2¡¨LcÊÓ.kã^Øç=Y¾·P™ ×z§i@Ç-;´7@n¤¥šûdÌbsþÎÀæñC�ÏûŠfáöDKôrdàA¼êÛ*, ÷j%^Ÿ=¶E¶É’]A*³_¿ºc‚~]òàt>ãù² ‹AHgÚYy0úœ< Dæ?Š+®µp*QPÒy‡�ÙëåİÄKFe[ÊU·ÿhBµ²ú ͳôµ.e©Ë(‡&÷Ú”îÅž™òÈ D€ž…ý-Æ‚×ú[=ðUVLˆíq¥ »å˜Â®Õ^|¨ätO(«ç²¥Ë=Í`s’ç4¢¾]Àq?îþòÕËwo."AÏfûRU¸óþ:bH+‘%+²V pLŒJv®·v ø¾MºxÕyÈbk9 !•\yJ…JBHp­ËfnÒÔDލ¥Ý¸ÓÞØ¡›)Ul̾=•UÛÿ›Íç�þ€Çfd¬§ßHõ<¾ÿ<º_'o \nˆOñ=Û€®�Á|™ÆÇäMäÄ>¸û›W/ß½¸˜dÌ ELátAŸ™bo¬rËŒÑðCìì7´¶ÕZW pÔ,7ÑÕMÉ&–pô–Y—šjBØYsM@YÙóµ±8™© Ä~ê¯@ñ¶±’ÅW1Éø÷ÑÀ¸Cø ºI¬m­_jž<ü+ƒý;€‡±|À\Òˆ)Œ õÅ83+–ÆŽëGã‹‹'C’ 4cà&ÿšÃÞ;üë‹;«{™—ÇéQØÔ2U+²!ü™"%2¼òàÛ¹¬µV8îy3i]/‡3çÔçàyRA‹¥±.ÂÜ_h­ gpÂ^P›îµ7"©Ð–Œ.òœùe] ã¬<a›µSó�Àç�þÝ`bÃ.Ш”h©ŒÍÒüµØÃtêR±Bù9xRiÏLž ·T·ýëaøúÕ‹»ªw3?­å£pA#'2¬ Ý©2 Âc'µog<v׳³ÖZƒSƶûr•NšÙ«ª¯ÕZ¢¥Ã÷ÊáXë ø>1rµeè2x´¢“*“6Sé™ûb§ æá Ôü+`ÇûëÄʈ„e/y£04¬6mÉêòešé”í÷Í`ië³J‰BÿW?ãrÏ¿CÈ<ùîÅÛ÷—™Œ@~–{ß”øÜb¿”ê{ê’3Ò"‚ž\~\k­�p8ûH<#ùí¬87ëÞw£2¯b~¨ç²î–ëapªÇ"£wš´ª^6HÉhzx:†Ù_L¢4öð9š‡%¹I%kì[Ô’éJ &5QÆg8>Ï rÙp‘•ƒµ,tú™ðŸ]PÎãÅ«úr‚òöí?}ýêå»÷—zR‹4@ûKe�›ûêdK‚C2· É95 ³ÖZ;ÀÉ,_4ñäZóï)X9j°3« ©Ô^½<—u·\¼Ù¯WÑÇ´ßœÅùtM>Éô—áUšŽñz1Î.á+3 öÀcþ·Ýš™…ÅH€T„™ ¦ŽR°1 ı¼Š¸Iå­=æDGü^¾°½&mÑà³^æ€Ã¿~õòÝ—½3ˆ e6+”~ Ü´_ 5Ss°zÏQ-P9 KÐa­pr&ckb|±Œ‰vyuÖ³ hμ9B!4®éZV 3ÅØ7c¶8ZJi 6ã©€5%Ø8sÙMÆÏž?~à€{äÀÿü!€G�øTM:œaŠ ½¦Éˆæ™­Q}TJ�Å©»&Y»FK‘`ö†YfO‚’UtÐPÞ×ï¿{ùö¢ÁMu‹ÉoeI»ÿ îÝNQÌ^h|0”~ÍÅø¯•�N è1+âU[ÐH]ïñ`F¹Ž#¨gä?2€µ.ž¿±ìËK‚”H“PñÒãñc}qB3®}Ö öïÏž?þ—ãàŸµ\íÞ‰– U䣆c …MÓj*;aH¹õò|òûFMã±)—ûqNB <â›mòßMI÷+S_·v 'ŧýq¬ŽyÛ÷¾¨eÿøÝË·ß^ÇyµÝO01({S¾É}_ZÒÞ!%j H‘ÿjrƒÕ†³V895¦ƒïYFÛ j¢^ÅÕ2Ï1­y¸P@Aëh"b­ cnâØv ®þl`§âm »–tn ÊU©á4}má ö³úœµzºÐà[‘óïTw²àæ¹¶,XePös'²Mô0$IýƆ…/¶wÙÕ‡£*º‡‹Uo(NH±B•¶xõª““cK&EMWY �i²*õ¸EpóõUV˾Üz>W£þ7ïËf†®—.'65ëÎX+®›(UàÏbœdg=7Å43<fº´NÔ¯‹L:¸µ.âˆàdû”SÎê7q²h° eÆ�»nd‹r6Ê Òp”,‰ç·»Ÿ#±Žì£d¤µÃ,…I®R4ü#2¡&3åí÷m€æ(³eUZnº54ÏÑÐNŸ¥ÆÞíŒ{pr÷ovOø=†xŠ9¡}wÿ|ÓÓàߌ€3øâ×8>ÿÐû•š‰+Ïžõ�×nP}“„{ zøÇïëãYÊNr lbɾ ÍZs€ÓI¾tª¾HÎ|FlÞôHØÒ^�§išµ}¯#-Œ~2¸"¸Ýg–Bgq@ƒ'%3•£@Á~ç‹¶„ó²\êb¡²ÌXî})fáüÕ¦ûÜ0­4Dèã÷D½_V4¢!'’œ®’­DQ'`²¸ÍâEb„t¾O×Ád¤ÊZüþ^ÖË“À¤ï4Ö�¢å³ÿñÕËw__Ýi5éìo`†}¡"X‘0;žCä³—t±únÖ:�8*£­“#õâá ¾gV­s Q`†3©=£^¸æª 4\\†d"²¿ñ}LTa‰§`à`ˆZ:ã¡#{ÁÄ4þEéwÆi°àxÍ£ëœD­ÊÆD6'‚uÖ|ÿšÅ3ÀLd^ÒEFÔì,ÆìQdiz É$ÀM`kç˜ÉÒ’ýÞ$v YÆ¢0 ÓŠàþ—ß÷âíU‚ÕߦØ2úB{qÉ*{™Û XjgZfP»ûd­µ€0&>Sú„åL ΛôvWÖ€ôB‚V2TŸŽŸ®u¹üM4lÍa dI¥Ìrwuæ&c £x èð¬}Ò=Ç4MCM¯FýeFÓ@6Ugv4M®‚­@ë4 €2Ô›û–ذžsL*£Ë.óWÊè¾{fd°5wŒ Ê¡ß*>·™?‘Uß½hæïÔq£àë…҃Ɵ—ò€¹Â×#>Š‘J]Ãät0‚QçJMg­µÖÎà”L‘þÎÊÂÉ•™F7òö Ùà.«Œ2J/=k]2ƒH;1¹<d‰ùàþŠÈ^“Lb¾ÔqL8öb€O¥¢-3ÓOÑ�Rƒ*„l5–’£z¼œ"š›?ΜzN©'(½fžBòЗ—?¿ÌΰåÆöÚ2sÞG*}‘=^èÊ;É €1f „'ïa?íÁfvµà¦‚ìe©R.DmOÈýK(ŸËØ ^@þ>hà,WFp­µvÇ䯭íãŸUn4Š’ygñ6"CÖœý_¿>§ _Ø­!›K*´V™Ÿ®±‘éõÑlª5t:V ZŽ0Ëä”(ðïrGÃ2Ų”ш¶ƇHa®ïRj® Ë�üýõb ¿_tèʉ8aÇâ¨z|%ºè=2Š!iJsû3„r1sbžÓgŠîþärŠå‰5%y@~^>Uô0¤’-³e±<Mp‘c9'k­œzpJó°lhŒwr­udsÕH¦L¨ÙlGéç(âïñƒ¦´µ./#Ô}*;;€ »á(—ì¶×Æ>¤Ò7ÑÓÞ*®Ô9sOÇjSo|Ô,S8~nL…°�ž.1e87€Jîa0°÷rêë êÓ!ÆÔ`‰Ú_KD"Æ@%_vV,/xB-ÏWÉÖ'ö7AfüúbÓX´OJÓ«å2[a³v@õÞ ¿]à‰å´&Ð 3þy%ÓU÷ÂàgÀÉÇÏåϬµÖR€äš}̨ó¸íÈ.ÓÅØ™L]òcY¾j¬^k»^A>hÊH¥ßÆ;ϳ`ªYƒ±.OÅ‘äÒëÁ²O“õö¢µòüA”uê¨>×,|™ui(kV ‡(…íÿn(׉¹ß‡ï#¤ŽR†‡’^n’ޝÉÄ(|g¼ ËìÜxO"Þsã˜b¬÷ýñÆÌž|÷âí‡uRIBÁ tpx_Ða‘õ”—3âQg ´¯‘öµAõv­µ5÷]é&ÕC-d´¥Ì(t‚Oê­ÚLm­«É ¥^ʶ UˆRKîÇÌÑC¦?=òBi6>8åßD¯|.åºPég£™ŸYªêÅÅkïU Ó_{ò‘h=5k»R¦¥^ ¨e·ÜœÍ#èµÄÕÒ=ôÅi·¾ƒ=ìÂïs „U†!ƒÝ—ß½|ûbPÚ‹nR°OÅ~ïµkf'˜}e–5Ê0°¯áZk€ƒ`ªÂ4ey| çé (9BnR¾>ŒÛ®ué Žbû2sSK ì âatžFf:2û¡ÍüFši”áG;‘x [h”¶vúÇ‹z¯•þ˜Ôä¢ôâ"ÐÇK„¬ ¢ÝŠ»ŸÎ«…çoE¿‚ö²bÅ�jöå×Î纈z¨‰�%n‘<½¥¦îBÃ7÷zÉ}‡¸”z³Nge[÷fqŒ„Òãey_¹ü\²˜æ˜Ž ŸÕFþ¹Õ^¸Ô· :Ûk­”ŒãÆaŠ;IÞ'%Ѭ 5-l˜Ì}9u‚jÕ¦®‰Áá>.O#¡ñÚF  ¤¥áµYÕÑõÔäß•ö 3CnœyÖŒqÑc@ÆãÑU¤MÖ`eÒÑѸ.{|ÿ²çQ>sškÉÐ<K \ÐS^C|áäx¤©/‹6ÔÀõKÌ›Üν¦÷=qûÙ½ì· Üôlë¾'È_,½÷Ζ±§)§&Fù¹~Ü@VÎsìá[ÎZ‚Á ’ö¨ž.‘Xd?–d0(²åÈö$M¡‘3¾–G…׺ø¼°eþÆ4J0²ùèT¯@ÅPvB“Y†ûÒ¼d¥YîÀóÅêyD»ô°0³Âf“‰Ùˆ––Uv¿Ž7GÈI‰~]hÏ\lHfvÅá2{VÞWH—š'Ð6;ïe'—ž`i"ó EôÐßóíw/Þþ~Ç)Äi�Ìí~NýqK¤ 3“ËøµÊùD–7—‘c zõ߬Õ08¬Ã”ÉvM™¦¦ *ë­ñLTO«ˆÀÙçf­ËšÜTÊ}ûeؽ]MX9Z—i%ËÈ!îb¦¹£ŽTîLRú‘5Šœ Ÿ§)”|ª3ŠE‚‰I« ™ï<Mæ­IÕÊŽ ‡�wf¯ªÏ–IE"|žú¼[ðÁãÉ2KÌgö•]0Â>�x²ÀÍ9©HmúŽîâ•YñÔàn¦€¶ð@´jæZÍp=Ûj,Ú-8FŠ ì._ à¬þn‹¢÷ ;É.D~A3©å’aã¤yPõ®@êoTÔäÃ$no6Û4áÐímIÔçˆÅ¦|ªsv V/ñì+åd)‡t•’ æ#Y¬ˆ$O-íQ²cqPvôæl>wäRSS©¥Ø£ ¢•2Ô°pP¯>_„ÙÊoÌì·ß½xûnÄsR‘\2®%+Tb¯Z£Lv„p{犂޿ë¾X+¯ÏR/ATbV¦3Þ Ô#5€FÕЬFË•×é‹%øwAÓ½0!\zÊÆˆìÄ —˜ËeÏêcYûp¢˜.—Ënp/Bƒ™}ÈÓ'&4}ŽÌCA=8GXÕâÔØ_;“-‹—r0 Òdpjæ˜1'³ÈPqÿŽpë€(Íõ¬ðŽÂäÝO†áG�_¿zùöÍ:¿ŽÃI£øî²±W±&?«}[NåÞ\†õbc’\à—ÍÏZ’Á±œ!*Kûìîl”Á)­’ø½–FUc�gZ¾ºÔj7âµ.8xFqIá:µRrpÕìª&³¨½—štcÀe§¡¹Ó0&V{ Œ¨õlö‰t)³²p'T˜ÇäÕ;i…JlŒhʾ@ �½°)[– Tv9ˆ0¨_cÎòÃgÉÓsÍï8z^ì§åîßì7«‘ø¯g\•DBd;ãÑ4¥–Ÿ¤LœÏÚØÏñ ‹rÉv­µ€Ïv¹h^(Yì*ÁÍMÇ5{DÑ—ˆš8á½½œë�6Q8/ƒZUþO=¾ Æ! ör©4Šò ±‹QXÐEOYüše°ä¸œÀëÞ•Då‹Fÿ¢w’vÀ¤ 3èà°ib7µM™îiAö§¢x`¹Ï(OþŒ]NGéeU0xŠ_ïÍì÷«õ7ñ­ET“ ™¹ôTå réÖ¡W£ý¼×ò9=6z]ëJ—,y昼tœu(R`XOƒ78‹ªrXÞÄk]zÐäÒ(SÚ4hgú4YÅÐÉkÖÇã稧9q;c)+^ÀéÄi’¶<³BåWÊIQæçf]¹™®üV]Ðs¤¼×ÏQžWåË)—3,Íì ÆÓ4žÝÅo¿õ£»¿|õòÝ·ë¬ýý“Ìã´[™ÞR.†M:o2}gX݇k­œ‡—qV°²göÚ±‘ÍA©¨:"‡lÖÌMkÞ½µ.æ”1mKš,Á¾R¬Ù2èð~°U$&j¡®C •XPКz]x½e¦'âÆ«E½HÝ;gÙ2€0¶5/ÌÀåößL01ÝY5:óÙ“*õ\˜Ý*'C”­}<–K‘?*S%SRüØï_½|÷q°¿¤1}V²®§ýSdéäZîS3*{FñËx¯H€»ÿµ"À á/mb£.Ä×A’óLíçLÙ‹®ûTq�\ëš8œ¸/ šû’¥jÂõÔ$ b‚¶Ç7 µá}c h{Êq:Ë¡§E"óƒq{è|h™AÙ‡ñöØo¢ú ®-‹å¤÷gW0÷]«Ç„ƒsñÃ"h‰e .]‚M/Ž;v0øPuüÁ¾þîåòúûó6Am›l1J“‚÷ÌO ÛêÜ(_wúbú×’�'×;»=˜¸zYîŠÎQš–•éj{Ðò%ôwU#‹g¯#¤‹’'ðø©Í§ªÿÂC‰Ë:<®ªâ³êõQì —Ûö^†8eE|ÉšS#ðèÛÙ…åyñÒoÄâv*e§½DT¬"rH¬¬ð#…ôâå™B‰.d$NÿþÎá/_½|÷n¬ÿI–µ%Èû4Û˜ eñrbMSRYJ.^g+9^‹NÊ {_FF)b¥ÛåäœÅÖš|G/Vá³µ.?x²öòŸÉ£àª¯Cy!åòÍðD‥XF>>†ÁÒy� ¼¦Ô÷Ü@ë9[V,ª»—Fç™ÌCñ㊮,#¢PdŬL^u ¹Œ¥�‰î¿ðõä2¶gë˜èá°ù&$*N3°·tT‘v§P´/ ‹ût­ëb-Áà¥06P¤&ÁLfÝE°³$½-)ùµa/ØÄ‡×ÀU÷Z&q‹¹€gIÿÂì N…Ä2Ù�–ŒMÊcPÉjv>¢îÌV†aÇåê¸NeÊ‘íHÀЫW‰ zÍ¡©»LœQÖ^Ù5ý^pQŽ9, ¹€Í?õ¼†.±Ì¸dc\ŸœQmö¥h Vv!Â4u­ÅàLJOˆ¢euÃ2]˜dÓ ´oJjĬÍÇ-ºÖf„IÊÁ4Tv&±ŠBì-÷xõ‹¥ŸTi³ÉlÈàŠ{t¢a  âBÖËÖ¡æF–Ìè0òjòr¦º)µNþ5“Ø™,žºÊ¢ŒªÙ3àt}äkÌ�ûð?¾zùîý:Aÿ'î‘a@R˜Ã°iü 0 W˜x¡­Ëb-ÉàhëÍ[°˜¸$(ÃDiR›1÷&@µÎUd„àËÙ«va�’/væ"zT™ Gòt0ÁC½8GÖkº¸W½y)qºìçvb»6U½+:³O™:=É` 1š›O(Mª4¥èÒçP]ÝH¸—é³ÒqôÑrøGwüÑ`?®æá¼á3Ù©p³ÐbdêjX·¼3£ü¬NnI·ÙJ‚ך38ÜÃú)ãŒØÙúÀ•{uêˆgÖß ¥ªfw­Ëš©œB#âyd\hâ”™ ¤™º®Bq'–ÈYG%�}'ƨŒ¿vþ9\þÊÖ—©¡yvÐk@¶ Ðý=Q`35r‡Y±5@¨‚BgXî–lÜ‘ÕÒÉ%º6Wß6›ÙŸ^½x÷ã:+ÿüt¤©µ9?–Lù³…[fN‘÷V,yn &ß.ÒZk�N·…­‘¸ç¬Û¢Ú¤`eØ[(oL/¢l)CXã×o‚¾K¼8“Ê)O#5zIÕKÊeÃ­Ñørbm¼ž†Ô\,[oÛZ²˜Y)Ûîå6Œó$”šÊR©¯îCŠ›‰µ¡"eâÐâz­Ï•G $ñBžãß‹”ÐX¿>¸ûƒýñ»—ï[ó)Bù™V5ú< W›ýÍòyˆg§€©fmú×ZëpX6]eo%ÊżÑ÷Lm¯Í÷M û¡ˆ¿oï¾_ë:’B—Ú/æšécÿ¢,µ×M`aÒ<Œ½×ÎJǹ”ä`·íZÇ4b@0b›²ˆÒ}aéûÈŒ3 †4#’p¨òC6+eïŸq¾QâÂömü\PôwN¿ã£¹½ð§Õ4ü©r­Á:Á¬UÂNl e¹QÓwñÜÈĸ½—¬$Ìk­õ™jÜtéïS¿ÎÈÐþ™UïØm–Ÿ‡õæ~k] ¾i¦¡P›Ž û¢€Ê¤4Rô•<“è±T‹{‘ƒû>™P‰-÷ð””sƒmø…\ «‰EÖrò3g…ß,Àg% vhù†ÎÕ¼+SÜþÙò¨=ù‡9ü£ÁÞ¸ã?—ùå]9«ÝT]ã[â½O µÍ É‚•‹»YK18�…ÊÖ9c,¦„¢†_}n˜Nô Õ¨׺øìpRŽÑ 9_ª–Œ ˜$s?çï‘mBĕpMd@2(ô jòY‹½H†$…Ÿz|”çS}åh-ÛðƒR¦âÏòŒjþá[E@è½™½s÷?­)¨»ÇádÖÎ[R¶*xç‡Påå¡u”Q1÷ÅEƒý_æÌk€³÷¸˜t’ãwÊq¹–´·ÏryA•½Ö†½šìš9˜ƒm#VRÑ…€ÒJQ*ƒå>'óž•ø›œÆ¾ØRìÚ@ή æy Œ›‚ãå`B@¯œ5R‘U "½‡;°ü�Ç;�ÿàÍò…ºû §NKYs.9)°bY¢@¹“b6'1éöàZkíSTšT™µ’^GiãŸ=8.LõâL¬Ø/€s] …Ê@˜‚0Ô’…Â4 J¯®ARîÁq¡$\ ¹¿-›²fÔ`zöß' [6%´Üù½Ênä–!žgæË…^IÅ3ó¦Ò0YùÞïÌðgw¼{µš„/-AÕN«žic€–û¹h/ Wœ’îÙd_'c²ÖZ;ÀQÈ96UÖ̺¸’ášUZ²Él÷ JøŽ,µkdpƵž\¨Ùín¤€yÊþDéFÛ!PŸ)ÀoY‹Gذºk/¦‡”íæÑtKà nÕKÊód"O ìý;jÚ%œ¿ "ÆyégnŸ×;wÿ�àϼõâí»µ“/9 ©rZcÌ”@hVyÌe�“¿/ƒ#LÌ>׺z€£.#1§‘ÝF35£¬dÄGY€&©ëج¦ø«›Ä/T%]Ç(G¹xe É„°Ö’Ø®ÓDûô7 {ã"¾33r±‘ÇVI„ºwH0ÌM¼¶Ø¡œß3Õ6QÎ95ûìà ļ‡ãÿì ¾{±Äö®ù¼MúS’,ˆ‰3‚€&ƒ!ÓŒQaC‘§n3;ºÖZ'€“¥ìUÍR'£ŽZÒÝHÁ<–®„ñ’¬–¼>¤+ànB!ˆuSŒ"Ÿêí‚;-“±ä´Ä4†šOñQJåW«ŒÎþ­Qp~¿“ñAÊcSêI ªfÉ.ø'#SPÿ€[™íküùô³¼?ýûûÕ/³–J‚AVµm/¥2lî´,W2oËwÕ_+®ÿ�“¹Rþs€oz����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/img/HDF4.png����������������������������������������������������������������������0000664�0000000�0000000�00000314653�15030617045�0015557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��W�� Œ���~3Ü��� pHYs��\F��\F”CA�� �IDATxœìÝëQçÖ†áç£øý²3g€3À W' Î@Š 5õ&°q"ØCš‰@C'°¿j¹Ça°Næp]UËmDÕ�kÍ?Qºÿïÿû_�����������������������ø:¥­ÿNòʺ��8�Ó¾k¦ <§ãÒÖŸ“üËÖØb«¾kæ����‡¡´õ§��`Ë,ú®Y8 �����pŸÒÖáßløÙr������à  GøÆÉ�83‡žÛq’·IÎl€-vÄ?¦ ����‡ã·��`Û”¶~Íwtý…Ï?ô ã«$óû>Ñw_2����€í÷³ß}���������€Çsl—����������âì /ò¥ÏÿÍQ·Ûbl÷…ØîþÙªïš{Cn����������������° ÄÕ����������vËÉ¡¶ûþìòîÜl»¢k/Æyðã¾k���������������€' ®���������pØNïüô÷EÚ>s'жgžóÏm†ÙV}×Ìÿþj����������������ð‰¸����������?ânœíü¡×ú‡(Ûf„M ���������������à€‰«���������ð6£lg}ý Ûm’uhí¡Û¼ïšÕß_���������������€]!®���������À.8Ùˆ°}MŒíz|®î‹²õ]3su���������������€í#®���������À>Ú °ßýù6"l·ñµùcû+È&Â���������������ð¼ÄÕ����������8d'!¶³»{؈°-“,Æÿ_×Ö1¶Eß5‹C^"���������������ÀcW���������€/›Œ“/DØ®Çç:¼&À���������������ð ÄÕ����������àñ¬ÃkØnï„׳á?}×ÌÜ���������������8tâj����������ð|N6Âkçãó2Ÿâkƒ›øÚgϾkVn���������������ì3q5����������Ø.§ãwsv÷»l÷Æ×ú®™¹#���������������°ëÄÕ����������`·Ü_Ãkƒëñ9Ûˆ¯-ú®Y¸3���������������°íÄÕ����������`¿¬£k÷Å×–Chm ®­Æ�[ú®™y����������������Û@\ ����������Çdœuxí2ŸÂk·ctm±`^���������������ž“¸����������08£kg›Û¸^û\K2Ãks›���������������“¸����������ð%wÃk—ù^[&Y¬ƒkë[ß5+[���������������¾•¸����������ð#&ãœm¾Æ^»Ãk‹1º¶è»fnÛ���������������ÀCÄÕ����������€§rö@tí&É*Él_ë»fæ ���������������€¸����������ðÜNǯ÷WxmŒ®-ÇØšè���������������(q5����������`[LÆ]��������������€%®����������l»¯®Íû®™»&���������������ì.q5����������`W=]»YÇÖÖáµ¾k® ���������������ÛO\ ����������Ø7§ãœ'¹Ì§èÚõ\û^ë»fæò���������������°]ÄÕ����������€Cq6ÎGcpm9×þš¾kÞ���������������ð2ÄÕ����������€C6ç|½ƒÒÖÛ{‚ksï���������������xzâj�����������Ÿ;Ir6ÎG¥­ÃãæNpmfo���������������ð¸ÄÕ�����������¾Îé8ù<¸¶ƒk³1º¶²O���������������ø>âj�����������ßo\;Or™?£kË1¶&¸���������������ßH\ ����������àqMÆ\��������������€o$®����������ðôþ)¸¶Ž­ÍÜ��������������€C'®����������ð26ƒkClmxÜŒÁµÑµ¾kæn��������������À!W����������اã\äSpíúNpmá^���������������ì+q5����������€ív6ÎG¥­·ëÐÚ8ó¾kVn��������������À>W����������Ø-'ÁµËü\»ƒk£k}×ÌÝ��������������€]$®����������°ûNǹȟ±µáq=„Ö6‚k+w��������������`Û‰«����������ì§³q>*m]ޱµÁµ¾kæî��������������À¶W����������8 “$ã ±µÛ!²¶®õ]3ó>���������������ॉ«����������¦“$gã\–¶K¸YÇÖ†ðZß5 ï ���������������ž“¸�����������k§ã¼>.m]Þ‰­Ím ��������������€§$®����������ÀC&I.Æbk·±µ™Ø���������������M\ ����������€¯u’ä|œ!¶6<®7bk3›��������������àGˆ«����������ð#ÎÆ¹[��������������àG‰«����������𘌭%™÷]³²m���������������"®����������ÀSú+¶6|ÒÖ›ul­ïš+›��������������`“¸�����������Ïétœ×¥­Ã—½Þˆ­Í\��������������à°‰«����������ð’ÎÆ¹[��������������@\ ����������€mr_líjŒ­Í] ��������������`¿‰«����������°ÍÖ±µ”¶Þ‘µõˆ­��������������ìq5�����������vÅI’óq†ØÚòNlmá’���������������»M\ ����������€]5Ir1Î[»¹[[¹,��������������ÀnW����������`_œŽó:ÆÖ®ÇÐÚUß5sW��������������Ø~âj�����������쫳q.K[oסµáÙwÍÂÕ��������������¶¸�����������‡à$Éù8)m]n„Ö®¼���������������¶ƒ¸�����������‡h’äõ0¥­Ã½[›{G���������������¼ q5�����������HÎÆIiërˆ¬mÄÖVö��������������ð<ÄÕ�����������às“$ã ±µëÐÚÜ®���������������žŽ¸�����������ü³³q†ÐÚrˆ¬mÄÖVv��������������ðxÄÕ�����������àëM’\Œ3ÄÖ®7Bks{��������������ø1âj�����������ðýÎÆBkËÐÚ•��������������|;q5�����������x“$¯‡)m^ð÷ØÚÂŽ��������������¾L\ �����������žÆù8)m½CkW}×Ìí��������������à~âj�����������ðôNǹ,m]&™¡µ+»��������������øD\ �����������ž×$ÉÅ0¥­Ãþ}­ Áµ¾kn��������������2q5�����������xYç㤴õ&Ét ­ÍÝ��������������84âj�����������°=N“¼ÉŸ¡µe’«aú®™¹��������������pÄÕ�����������`;M’¼¦´õv#´vå^��������������À¾W����������€íw’äb˜ÒÖá›ý}#¶¶r?��������������`_ˆ«����������Àî9ç]iëZ›¡µ…[��������������»L\ �����������vÛ:´ö¦´õ&ÉTh ��������������ØUâj�����������°?N‡ÈÚÐڬ��������������»@\ �����������öÓ:´–ÒÖe’«!¶&´��������������l3q5�����������Ø“$¯‡Z��������������¶™¸�����������¡5��������������`k‰«����������ÀáZ��������������¶Š¸�����������¡5��������������`ˆ«�����������w ­��������������/B\ �����������ø'Bk��������������À³W�����������¾ÖÝÐÚt ­-l��������������x âj�����������À÷Bk—Ô¶ÞŒ¡µ+¡5��������������àGˆ«�����������?ê4É›a6BkÓ¾kV6 ��������������| q5�����������à1m†Ö~Or5ŒÐ��������������ð5Žl �����������x"çIÞ%ùPÚzUÚúÊ¢�������������€rl;�����������À3Bk祭·I®’Lû®™Y<��������������°I\ �����������xN'I.†)m]n„Öæ®���������������ˆ«�����������/e’äõ0¥­7Cdmˆ­õ]³p��������������8Lâj�����������À68Mòf˜ÒÖ߇ÈÚZ[¹��������������Ž#·�����������¶Ìy’wI¥­ÓÒÖW��������������‡áØ����������€-u’äb˜ÒÖe’«$Ó¾kæ��������������ûI\ �����������Ø“$¯‡)m½"kchmåz��������������°?ŽÜ�����������Ø1§IÞ$ùPÚzUÚúÊ�������������`?»#�����������°Ã·)m½M2¦ïš¹ƒ�������������ÀnW�����������öÁI’×Ô¶Þl„ÖV® ��������������»ãÈ­�����������€=sšäM’¥­W¥­¯��������������vñ;�����������{ì|˜ÒÖe’«$oû®Y88��������������l'q5�����������àL’¼¦´õfˆ¬ ±µ¾kV®��������������ÛãÈ-�����������€sšä]’Eië´´õgo���������������ØÇî������������¨“$Ô¶.“¼M2í»få ��������������/ãÈÞ�����������2Iò&ɇÒÖiië/V��������������ÏïØÎ�����������>s1Lië2Ét˜¾kV��������������OïÈŽ�����������î5Ir™ä}iëUië+k�������������€§ul¿������������_t>Lië2Ét˜¾kÖ��������������ëÈ>�����������¾Ú$Ée’÷¥­W¥­¯¬��������������ϱ]�����������|—óaJ[—I¦Ãô]³°J��������������ø~Gv�����������ðC&I.“¼/m½*mýÅ:�������������àûÛ�����������À£9¦´u™äm’iß5+ë�������������€¯sdO������������n’äM’¥­ÓÒÖ_¬��������������¾ìØŽ������������žÔÅ0¥­7IÞ&¹ê»feå��������������ðwGv�����������ð,N“¼K²(m}[Úú“µ�������������ÀçÄÕ������������ž×I’×IÞ—¶ÎJ[_Ù?��������������üéØ������������^ÌÙ0¥­Ë$Ó$oû®Y9��������������‡êÈå�����������^Ü$Ée’¥­ÓÒÖŸ�������������€C$®�����������°].’ü·´uVÚú«Û��������������pHŽ]�����������`+ SÚú6É0Ó¾kN�������������À>;r]�����������€­v’ä2ÉûÒÖiië/Î�������������À¾W�����������ØIþ(m•¶þên��������������ì›c�����������Ø9gÔ¶þ–dšämß5+g�������������`×¹ �����������ÀΚ$¹Lò¡´uZÚú“S�������������°ËÄÕ������������öÃE’÷¥­³ÒÖWn �������������À.:v5�����������€½r6Lië2ÉoI®ú®Y91��������������»àÈ•������������öÒ$É»$‹ÒÖßJ[rf��������������¶¸�����������À~;Ir™ä}ië´´õg÷�������������`[‰«�����������Ž‹$ÿ-m•¶¾rw��������������¶¸�����������Àá9KòŸÒÖEië¯î�������������À¶8v �����������€ƒ5Iò®´õm’ÓwÍÊÛ�������������€—rdó������������ï$Ée’Eië´´õ§C_��������������/C\ �����������€µ!²v‘äýYûÅf��������������xNâj������������Ügˆ¬ýQÚ:+m}eC��������������<q5������������þÉY’ÿ”¶.J[µ)��������������žÒ±í�����������ð&IÞ•¶þ–äm’iß5+‹�������������à1Ù&������������ß`ˆ¬½I²Bk¥­ÿ²<��������������‹¸���ü?{÷z‡µdatc0¿«;*2vRC¡ 3 3 #•€”A3uîÁ€×2lß±e=øèÇZÀI`×ùÿ��������?b‘äúKdí¾zÞX�������������€Ÿ%®�����������ÀÏxŒ¬]$ùEd �������������€Ÿ%®�����������ÀSù-²öP=+«�������������ð½ÄÕ������������xjçIÖ"k��������������|/q5������������žË#kï­ �������������À?W�����������à¹=FÖ>TÏVd �������������€¯W�����������ड़ˆ¬�������������ð5âj������������¼4‘5��������������þÒš�����������€Wò[dí.É¿Þÿþ÷ýc��������������¯ÿp{������������^Ù"Éu’mõÜTÏÒA��������������Ž“¸������������»Bd �������������àȉ«�����������°kDÖ��������������Ž”¸������������»Jd �������������àȈ«�����������°ëDÖ��������������Ž„¸������������ûBd �������������àÀ‰«�����������°oDÖ��������������”¸������������ûJd �������������àÀˆ«�����������°ïDÖ��������������„¸������������‡Bd �������������`ω«�����������phDÖ��������������ö”¸������������‡ê‘µ+W�������������Ø}âj������������ºÇÈÚmõ<FÖÞ»6�������������ÀîW�����������àXœ$ù ²�������������°»ÄÕ������������86"k��������������;J\ �����������€cõ[dí¡zV~�������������ÀëW�����������àØ'Y‹¬�������������¼>q5������������øÕ#kg6�������������xyâj������������ðg‘µÏÕs_=ol�������������ðrÄÕ������������à¯]$ùåKdmi#�������������€ç'®������������_÷YÛVÏÈ�������������ÀóW�����������€¶Hrý[dÍ^��������������ÏC\ ������������¾Ý¿"kÕóY{o7�������������€§%®������������ßï$ɇ/‘µ•ý��������������ž†¸������������ü¸ÇÈÚºzDÖ��������������~ž¸������������ü¼ó/‘µûêycO�������������€#®������������Oç"É/ÕsW=K»�������������|q5������������xz—I¶Õs#²�������������ðíÄÕ������������ày,’\'ÙTÏ{�������������ü3q5������������x^'I>TÏcdmek�������������€¿'®������������/ã4ɺzªçÍ�������������þ?q5������������xYçI~©žûêYÚ�������������àwâj������������ð:.’l«çÆþ��������������¿W�����������€×³Hr]=‘µ÷î��������������;q5������������x}'I>TÏCõ¬Ü�������������8Vâj������������°;Γ¬«ç¾zÞ¸ �������������plÄÕ������������`÷\$ÙTÏMõ,Ý�������������8âj������������°›I®¿DÖÞ»�������������p ÄÕ������������`·$ùP=Õ³r+�������������à‰«�����������À~8O²X-²�� �IDAT®žûêyãf�������������À!W�����������€ýr‘dS=7Õ³t;�������������àˆ«�����������ÀþY$¹þY{ç~�������������À¡W�����������€ýu’äcõ<TÏ™;�������������ûN\ ������������ößy’ÏÕsW=K÷�������������ö•¸������������ŽË$Ûê¹rS�������������`‰«�����������ÀaY$¹­žMõ¬Ü�������������Ø'âj������������p˜N“¬«ç¾z–n �������������ìq5������������8lI¶ÕsåÎ�������������À®W�����������€Ã·Hr[=‘µ•{�������������»J\ ������������ŽÇI’uõ|ªž7î�������������ìq5������������8>o“lªçÆí������������€]"®������������Çi‘äºz¶Õ³ò�������������€] ®������������Çí$ɺzî«gyìc��������������¯K\ ������������xt‘d[=WÖ��������������^‹¸������������ð›E’ÛêÙTÏÊ*�������������ÀKW������������þÝi’uõÜUÏÒ:�������������ÀKW������������þÎe’mõ¼·�������������ðÄÕ������������€¯Y$ùP=ÕóÆR�������������ÀsW������������¾Åy’_ªç¦z–�������������žƒ¸������������ð=®“lªge5�������������੉«������������ßë$ɺz>UÏÒz�������������ÀSW������������~ÔÛ$Ûê¹² �������������ðÄÕ������������€Ÿ±Hr[=ÕsfI�������������àgˆ«������������Oá<Éçê¹±&�������������ð£ÄÕ������������€§t]=ÛêYY�������������ø^âj������������ÀS;I²®žûêYZ�������������øVâj������������Às¹H²­žw�������������¾…¸������������ðœI>VÏCõ¼±4�������������ð5âj������������ÀK8O²©ž+k�������������G\ ������������x)‹$·ÕóP=gV�������������þ¸������������ðÒΓ|®žË�������������$®������������¼–ëêÙTÏ™ ��������������W������������^Ùi’ÏÕsW=KÇ�������������€ã&®������������ì‚Ë$›êY¹�������������/q5������������`Wœ$YWÏ]õ,]�������������ޏ������������°k.“lªgå2�������������p\ÄÕ������������€]t’d]=wÕ³t!�������������8âj������������À.»L²­žw®�������������‡O\ ������������Øu‹$«çSõ,] �������������—¸������������°/Þ&ÙVÏ;������������€Ã$®������������ì“E’Õó©z–.�������������‡E\ ������������ØGo“l«çë������������ÀáW������������öÕ"ÉÇ깯ž¥+������������ÀþW������������öÝE’Mõ¬\�������������ö›¸������������pN’¬«ç®z–. �������������ûI\ ������������8$—I6Õ³rU�������������Ø?âj������������À¡9I²®ž»êYº.�������������ìq5������������àP]&y¨ž3������������€ý ®������������²Ó$Ÿ«çÆ•������������`÷‰«������������Çàºz6ÕsæÚ�������������°»ÄÕ������������€cqšä¡z®\�������������v“¸������������pLIn«ç1²öÆå������������`·ˆ«������������Çè<ɦzÞ¹>�������������ìq5������������àX-’|¬žOÕ³ô �������������àõ‰«������������Çîm’Mõ¬Ž}�������������xmâj�������������ÉI’uõÜÙ�������������^¸������������Àï.«gS=g6������������€—'®������������ðg§I>WÏ•]�������������àe‰«������������üµÛêy¨ž¥}�������������àeˆ«������������ü½ó$Ûêyg#�������������x~âj�������������_·Hò±zîªgi+�������������x>âj�������������ßæ2ÉCõœÙ �������������ž‡¸������������À·;Mò¹z®l�������������OO\ ������������àûÝVÏCõ,m�������������OG\ ������������àÇœ'ÙVÏ;û������������ÀÓW������������øq‹$«çΆ�������������ðóÄÕ�������������~ÞeõlªçÌ–�������������ðãÄÕ�������������žÆi’‡êyoO�������������ø1âj�������������Og‘äCõÜWÏÒ®�������������ð}ÄÕ�������������žÞE’MõœÙ�������������¾¸������������Àó8Iò¹z®ì �������������ßF\ ������������àyÝVϧêYÚ�������������¾N\ ������������àù½M²©ž•­������������à������������¼Œ“$ëê¹±7�������������ü5q5������������€—u]=Õ³´;�������������ü™¸������������ÀË;O²­ž•í������������àwâj�������������¯c‘d]=7ö������������€_‰«������������¼®ëêy¨ž¥;�������������pìÄÕ�������������^ßy’mõ¬Ü������������€c&®������������°IÖÕså�������������+q5������������€Ýr[=Ÿªgé.�������������q5������������€Ýó6ɦzÎÜ������������€c"®������������°›N’|®ž+÷������������àXˆ«������������ì¶Û깯ž¥;������������pèÄÕ�������������vßE’‡ê9s+�������������™¸������������À~8ýX{ï^�������������*q5������������€ý±Hò¡zîÜ ������������€C$®������������°.«gS=K·������������àˆ«������������ì§Ó$ÛêY¹�������������‡B\ ������������`-’¬«çÊ �àÿØ»ÛÛ4Ú,�ÃçÇþ~ »è Þ œ �= ÄìvT�ÖÓ@ÜÁ;„·¶/¬Fk !þäc>®KÆÃ9HÑ(27����������Ðâj�������������Ý÷5åòrÛ%�������������]&®������������зQ¥\¦ö ������������@W‰«������������ôǤ ¬}¶S�������������ºH\ ������������ _Fñ=åòÍ^������������èq5������������€~ú’r©R.cû������������ +ÄÕ�������������úëSDlR.S;������������  ÄÕ�������������úm?R.wö ������������@Û‰«������������ Ã×”ËCÊelß�������������´•¸������������ÀpÜFD•r™Ú9�������������m$®������������0,“&°öÙÞ������������hq5������������€áEÄ÷”Ë7»������������ MÄÕ�������������†ëKÊ¥J¹Œ}�������������hq5������������€aûë”Ëtèƒ�������������àòÄÕ�������������¸Šˆ)—Åà'������������ÀE‰«������������ðd•r¹7 �������������.E\ ������������€]ó”Ë:å26�������������ÎM\ ������������€}“ˆØ¤\¦&������������À9‰«������������pÈ("~¤\¦������������À¹ˆ«������������ðœUÊåÞ„�������������8q5�������������^2O¹¬S.c“������������à”ÄÕ�������������xIDlR.SÓ������������àTÄÕ�������������x­QDüH¹,L ������������€SW������������à­V)—o¦������������À±‰«������������ð_R.UÊelz�������������‹¸�������������ïõ)"êÀÚÔ������������8q5�������������>bÒÖ>›"�������������%®������������ÀG"â{ÊåÎ$������������øq5�������������ŽåkÊåÞ4������������x/q5�������������ŽižrY§\Ʀ ������������À[‰«������������pl“ˆØ¤\¦& ������������À[ˆ«������������p £ˆ¨R. Ó������������àµÄÕ�������������8•:°¶J¹üÛ„������������x q5�������������Ní_)—{S������������à%âj�������������œÃ<å²N¹ŒM������������€?W������������à\&QÖ¦&������������À!âj�������������œÓUDT)—Ϧ������������À>q5�������������ÎmßS. “������������`—¸�������������—²J¹Ü›>�������������OÄÕ�������������¸¤yÊå!å2¶�������������ÄÕ�������������¸´Ûˆ¨Ö�������������W������������  &±I¹Lm������������`¸ÄÕ�������������h‹QDT)—Ï6������������0Lâj�������������´IXûžrYØ ������������Àðˆ«������������ÐF«”˽Í������������� ‹¸�������������m5O¹<¤\Æ6������������0 âj�������������´ÙmDTk�������������à ®������������@ÛM"br™Ú������������@¿‰«������������ÐWQ ¬������������ô›¸�������������]1Šˆ)—…������������ô“¸�������������]³J¹ÜÙ������������@ÿˆ«������������ÐE_S.÷6������������Ð/âj�������������tÕ¼¬¥\Æ6������������Ðâj�������������tÙ<"*5������������€~W������������ ë&M`íÚ&������������ºM\ ������������€>¨kë”ËÔ6������������ºK\ ������������€¾ED•r¹±Q������������€nW������������ OêÀÚ_)—…­������������t¸�������������}´X������������èq5�������������úª¬ÝÛ.������������@wˆ«������������Ðgs5������������€îW������������ ïêÀÚCÊelÓ�������������í&®������������ÀÜFD%°������������Ðnâj������������� ÅD` ������������ ÝÄÕ�������������’:°¶I¹Lm������������ }ÄÕ�������������šQDTk�������������í#®������������À=Önl������������ =ÄÕ�������������ª:°öWÊeá�������������Ðâj������������� ÝJ` ������������ ÄÕ�������������@` ������������ ÄÕ�������������à§:°vo�������������—#®�������������ÿ7X������������¸q5�������������ø•À������������À…ˆ«������������ÀïêÀÚCÊel6�������������ç#®�������������‡ÝFD%°������������p>âj�������������ðg5������������€óW������������€ç ¬������������œ‰¸�������������¼ì)°65+������������€ÓW������������€×X������������81q5�������������x½‘À������������À鈫������������ÀÛ¬������������œˆ¸�������������¼À������������À ˆ«������������Àû<ÖnÌ������������à8ÄÕ�������������àýêÀÚ_)—…������������|œ¸�������������|ÜJ` ������������àãÄÕ�������������à8Ö�������������>H\ �������������ŽG` ������������àÄÕ�������������à¸Ö�������������ÞI\ �������������ŽO` ������������àÄÕ�������������à4Ö�������������ÞH\ �������������NG` ������������à ÄÕ�������������à´êÀÚ73������������x™¸�������������œÞ—”˽9������������<O\ �������������Îc.°������������ð<q5�������������85������������€gˆ«������������Ày ¬������������ü¸�������������œŸÀ������������Àâj�������������pk�������������{ÄÕ�������������àrÖ�������������vˆ«������������Àe ¬������������4ÄÕ�������������àòÖ������������€Á q5�������������h 5������������`ðÄÕ������������� =Ö������������€AW������������€vX������������K\ �������������ÚG` ������������$q5�������������h§:°vg7������������Àˆ«������������@{}M¹,ì������������ q5�������������h·•À������������0âj�������������Ð~k������������À ˆ«������������@7¬������������½'®�������������Ý!°������������ôš¸�������������t‹À������������Ð[âj�������������Ð=k������������@/‰«������������@7 ¬������������½#®�������������ÝUÖ¦ö������������ô…¸�������������t[%°������������ô…¸������mó·�������¼ÉH` ������������è q5������ÚæÑF�������ÞL` ������������èq5�������������è5������������ óÄÕ������������� ?žk×v ������������tÑ?l �������àMþŽˆ;#€^˜FÄø…7r݇Ô?;ñQ��� …êÀÚCÊåf»œ=Z������������Ð%âj��������oó¸]Î*3€^8É¿é)—qnÛw³÷øÐó¦Íà��ÀGÕAðJ` ������������èq5���������€#j¾°þP¸íÍ1·”Ë´‰°=Ù}¼gf��`ŸÀ������������Ð9âj�������Í%:Ñ�� �IDAT���-µ]ÎÖ{göª@[Êå:"®›‡»¶ýû»��è=5������������ SÄÕ����������zf»œm"b³ó®ž{‡{1¶Ýû7Í­��@·Õ×tß"ba������������@Û‰«��������� ÜÛ¥\¦Ml­>¦Íóž"lu”íjèó��h©yÊ¥¾X������������ZM\ ���������€WÛ.gëç>ú¹”Ë¡ðÚS”M€ ��àrÖ������������€ÖW���������ਸ਼ËÙcDTÍkV‡^;årÝ„ÖÆ;áµ§Û‰���œLX{Ü.gwF ���������pÐ"âÊh��àrÄÕ����������8»ír¶‰ˆMó{öÊe?ºv½sø£4��€ù’rYo—³{s���������øEV»‹ˆïÆ��—#®���������@ël—³Çˆ¨šó:_Û ¯Õ·7ÍíÄ6��^e•r 5���������€_,Œ��.O\ ���������€ÎÙ.gëæœ«ýsO¹\Gĵð��À‹Ö����è»ÿFÄÚ–���h‘»¿‹Z*årc7��pYâj����������ôÊv9ÛDÄæ…ðÚSpmÚ#Ÿ��` êÀÚÚ—õ���À üs»œýöÿ©���������m!®���������À`¼^»iÂk»ñµ‰O��0�U}M$°������������´¸����������ü ¯ý\‹ŸÑµi\›6ǵè��Ð3#5���”Gë��������ÚL\ ����������žÑ„êãa÷Y¢kõqe–��@GÕµ‡úZg»œù‚u���è1qu�������� íÄÕ����������àž‰®Ýˆ®Ì��è€:]Õ×5k������������À¥ˆ«���������Àm—³jÿÕR.×Mpí¦‰­Õ÷'æ��´ÐD` ������������¸$q5����������8±ír¶‰ˆúø%¼VÇ vbkõí'»���Z ¬}‹ˆ…e�������������ç&®����������²]ΪÁµiZ› ®��4O¹Ô×-k������������ÀY‰«���������@‹l—³uD¬wÏHp ��¸:°ö¸]Îî,�������������8q5����������h9Á5��à‚¾¤\ÖÛåìÞ������������€sW���������€úCpíf/¸6±[��àV)—X������������ÎA\ ���àìÝïQTÙÚÆá»¬ù¼ÁÄh#°@L` ;™„XÓî˜ Ì�2€Á[ûLûãÌ4Ю«j—U–_¸Ÿ]E·_~������°&Z-gIξþ4]?lÏ#kÓoþÜro��àÆÀÚÅ<ô ������������ð`ÄÕ����������`MµZ®ç±µoƒk;ßÅÖvÝ��øIg]?LÖ������������€‡$®����������¤Õr™döíO<Æ桵¯Ñµ-ï��ð[óÀÚdþÝ������������`áÄÕ����������`õZÎÆ@ÂׯPÂ7¡µñÏ›¾��ðÿÆÀÚéinµ\›������������X4q5����������à´Z.’\|ý»®v¾‹­íZ ��6ÚøàL` ������������xâj����������À?jµ\&™}ý7]?lÏ#kS±5��ØXã÷€“$û^������������`‘ÄÕ����������€[iµ\'9?_ck“obk¯- ��á}×ãw5������������`aÄÕ����������€{™ÇÖÎæÏtýð5´¶—d×Â��°¶ÆÀÚE«åĉ�����������€ExfE����������`ÑZ-g­–£VË$Éó$ï’|JòÅØ��°v~ëúaßY�����������€EøÅŠ����������ÀCjµ\'9?éúa;Étþì%yá���°ò~ïúá¢Õrá”������������À}ˆ«����������ê»ØÚa×;ßÅÖ¶\��VÒY×S5������������à>ÄÕ����������€'Õj¹L2›?éúaòMlí­ë��ÀÊCɧãgúyT������������àÖÄÕ����������€¥Òj¹H2>'ù3¶6FÖöæ±µ]×�€¥ö"ÉÙø9^` ������������¸ q5����������`©µZÎÆ8Cþ ­íÌ#k_ƒk[®��KgŒ"ÏæŸÙ������������nE\ ����������X­–Ëy¤a|ÆØÚdlØ›��€åð¶ë‡Y«eß=������������€Ûxf-����������`UµZ.Z-G­–1²ö<ÉA’ÏIn��žÜû®������������¸_¬����������¬ƒVËu’ÙüI×cpmoþì:2��<‰ßº~¸nµÌÌ������������üŒgV����������ÖQ«å¢ÕrÔj#k/“$ùñ�àÑÌãÇ�������������ÿê����������ë®Õr™d6ÒõÃ^’ñ™&yá��€µ•äl ¬Í?›������������ü­g¦����������6M«å´Õ²ßjÙIò*Éq’/^��x0c`í´ë‡m������������ÿäë�����������›¬Õr‘d|Žº~ck{I¦IÞz1��`¡vÇÀÚüó6������������À=3 ����������ÀŸZ-—­–“VËX{žä ÉInL�� ñºë‡™)�����������€¿ó‹e�����������þªÕrd6ÒõÃ\ûúl™ ��îì}×cØØ„������������À÷žY����������àßµZN[-û­–í$ï’|Jre:��¸“ߺ~Ø7������������ð=q5����������€[š‡Ö[-;I^ ­�Àœtý01�°®����������G\ ����������àZ-Bk��p'[Iκ~Ø6�°âÄÕ����������`ÄÕ�����������Dh ��nM` �Xy­–KW���������€ÅW����������x�Bk��ðÓv“ÌÌ������������D\ ����������àá ­�À¿zÛõÉ™�������������q5����������€GôƒÐÚç$7n���ùÐõþ������������`³‰«����������<‘yhm¿Õ²äÐ��ä÷®&f������������€Í%®����������°Z-§ß„Ö’üá.��l¨35������������Ø\âj�����������K¦Õ2kµì%y>­}q#��6ÈV’Y×ÛŽ������������›ç7����������XN­–ë1*1Kì$ƒk‡I^8��kn7Éi’©C�����������ÀfyæÞ�����������˯ÕrÙj9iµŒ‘µWI>%¹q:��ÖØë®N������������6‹¸����������ÀŠiµ\´Z[-ÛIÞ%ùà �XSº~Øw\������������Øâj�����������+¬ÕrÚjÙKò<ÉA’/î �Àšù½ë‡‰£�����������ÀfW����������X­–ëVˬÕ2F'^&ù”äÊm�Xg]?ì8&������������¬?q5����������€5Ój¹lµ¶ZÆøÄ»$¸1��+n+Éi×Û ������������ëM\ ����������`µZN[-{Iž'ù5É•{�°¢v“œ8������������¬7q5����������€ Ðj¹nµœ´Zv’¼Jò9ÉÛ�°bÞwýpäh������������°¾ÄÕ�����������6L«å¢Õ²Ÿd ­$ùâ��`…|ìúaÏÁ������������`=‰«����������l¨VËu«eÖj™$y™äS’ï��+`ÖõÃÄ¡������������`ýˆ«����������0†Ö.[-‡­–í$Iέ�ÀÛJrÚõö#�����������ÀzW����������à´Zf­–i’—I>%¹±��KèÅXs������������X/âj�����������üP«å²ÕrØjÙNräÜR��,™×]?œ8 ������������¬q5�����������þU«eÖj™&y•äs’«�°$>tý°ï������������°ÄÕ�����������øi­–‹VË®ØIräÊz��,ß»~˜8������������¬>q5�����������n­ÕrÝj™µZÆÈÚ›$Ÿ­�À;ëúaÛ������������`µ‰«����������p/­–³VË~’—IŽ“ÜX�€'°5Ö ������������«M\ ����������€…hµ\¶ZŽZ-ÛI’œ[�€G¶ÛõÃÌè������������°ºÄÕ�����������X¸VˬÕ2Mò*Ég �ðˆÞwý°op������������XMâj�����������<˜VËE«e [<OrœäÊÚ��<‚ß»~˜������������V¸�����������®ÕrÝj9jµì$9HòÅê��<°³®¶ ������������«E\ ����������€GÕj™µZ&IÞ$ùl}��ÈV’Sã�����������ÀjW����������àI´ZÎZ-ûI^&ù”äÆ%��X°×]?œ������������V‡¸�����������OªÕrÙj9L²“ä×$W.�À}èúaß ������������°ÄÕ�����������X ­–ëVËI«eŒ¬$9w��ä¤ë‡‰1�����������`ù‰«����������°tZ-³VË4É›$¸��÷´•ä´ë‡mC�����������ÀrW����������`iµZÎZ-{I^&ùìR��ÜË$3�����������ÀrW����������`éµZ.[-ûóÈÚq’W�àÞvýpd8������������X^âj�����������¬ŒydmŒaìÌ#kW®�À-}ìúaÏh������������°œÄÕ�����������X9­–ë1²Öj#k"k��ÜҬ뇣�����������ÀòW����������`¥µZfßDÖÎ]�€Ÿ°•ä´ë‡mc�����������ÀrW����������`-Ì#kÓ$oDÖ��ø »IN ������������ËE\ ����������€µÒj9Y�à'½ïúaßX������������°<ÄÕ�����������XKßDÖ^&ùìÊ��ü“®&Æ�����������€å ®����������ÀZkµ\¶ZöEÖ��øN»~Ø6������������<=q5�����������6‚È��ÿàE’™������������à鉫����������°QDÖ��øo»~84������������<-q5�����������6’È��?ð[×SÃ������������ÀÓW����������`£‰¬�ðÓ®¶������������OC\ �����������DÖ��ø¯­1°f������������xâj�����������ð ‘5��’¼îúáÈ������������ðøÄÕ�����������àDÖ��6ÞÇ®¦›>������������<6q5�����������ø"k��í´ë‡M������������“¸�����������ü‘5�€´5Öœ������������¸�����������ÜÂ7‘µ7IÎm�°öv»~8qf������������xâj�����������p­–³VËTd �`#|èúaÏ©�����������àቫ����������À=|YûbK�€µ5ëúaÇy�����������àa‰«����������ÀÌ#k“$I®l �°v¶’œ:+������������<,q5�����������X Vˬղ3¬ÝØ�`­ìvýpâ¤������������ðpÄÕ�����������àŒ‘µ$cdíXd �`­|èúaÏI�����������àaˆ«����������Àiµ\·ZŽæ‘µOv�X³®vœ������������O\ �����������Ø<²v˜äe’Ïö�Xy[c`Í�����������`ñÄÕ�����������à‘´Z.[-ûIÞ$9·;�ÀJ{ÝõÑ�����������Àb‰«����������À#kµœµZ¦óÈÚ•ý�VÖÇ®¦Î������������‹#®�����������OdYÛIräÆ��VÒi×ÛN������������‹!®�����������O¬Õ2K2FÖŽEÖ��VÎÖXs6������������X q5�����������X­–ëVËQ’I’Ïn�°R^wýpèd������������pâj�����������°DZ-—­–ý$o’œ» �ÀÊø­ë‡‰s�����������Àýˆ«����������ÀjµœµZ¦I’\¹�ÀJ8íúaÛ©������������àîÄÕ�����������`‰µZf­–$ÇInÜ �`©½H2s"������������¸;q5�����������X­–£$“$ŸÝ �`©½íúa߉������������ànÄÕ�����������`E´Z.[-c¨ãM’sw�XZ']?Lœ������������nO\ �����������VL«å¬Õ2MräÆý��–ÎV’™³������������À퉫����������ÀŠjµŒÁŽ$Çn�°tv»~8q������������¸q5�����������Xa­–ëVËQ’—IÎÝ�`©|èúaê$�°Þº~˜81����������,ޏ�����������¬VËe«e w¼Krå¦��Kã´ë‡mç�€µæw=����������,¸�����������¬‘VËi’I’cw�X [c`Í)�`­]8/����������,ޏ�����������¬™VËu«å(ÉË$çî �ðä^wýpè �°žÆÿ‹qZ����������Xq5�����������XS­–ËVË4É»$Wî �ð¤~ëúaâ������������ðÏÄÕ�����������`͵ZN“Œ!c·�xR³®¶��Ö‹ßï����������°Xâj�����������°Z-×­–£$/“œ»9�À“ØMrdz�X;'���������€ÅW����������€ Òj¹lµL“$¹q{�€G÷¡ë‡=³�����������À‰«����������ÀjµÌ’ì$ùäþ��nÖõöÙ�����������à¯ÄÕ�����������`CµZ®[-‡IÞ$ùâ=��x4[c`ÍÜ������������ðWâj�����������°áZ-g­–I’ã$7›¾�À#yÛõá±�����������à‰«�����������ÿÑj9J2FÖÎ-�ð(Žº~˜˜������������þK\ �����������ø­–ËVË4É»$7–�xP[If&�����������€ÿW�����������þ¢Õršd'É'ë��<¨Ý®ŽL ������������W�����������~¨ÕrÝj9Lò&É••��ÌÇ®¦æ������������q5�����������à_´ZÎ’L’Û �àÁ̺~Ø6/������������›N\ �����������øW­–ëVËQ’WI¾X �`á^$91+������������›N\ �����������øi­–‹VË$ɱÕ��î}×{f�����������`“‰«�����������·Öj9Jò2ɹõ��jÖõöI�����������ØTâj�����������À´Z.[-Ó$¿&¹±"�ÀBl5S�����������°©ÄÕ�����������€{iµœ$™$9·$�ÀB¼íúáД������������l"q5�����������àÞZ-—­–i’_“ÜX�àÞŽº~Ø1#������������›F\ �����������X˜VËI’I’s«�ÜËV’™ �����������Ø4âj�����������ÀBµZ.[-Ó$¿&¹±.�À½îúáÐ|������������lq5�����������àA´ZN’L’œ[�àÎ~ëúab>������������6…¸�����������ð`Z-—­–i’_“ÜX�àNff�����������`Sˆ«�����������®Õr’d’䋵�nm·ë‡#³�����������° ÄÕ�����������€GÑj¹lµŒµc‹�ÜÚÇ®&f�����������`݉«�����������ªÕr”äU’/–�¸•™¹������������Xwâj�����������À£kµ\´Z&I>Y�à§ívýpd.������������Ö™¸�����������ðdZ-‡IÞ$¹r�€Ÿò±ë‡©©��������þ½;¼ŠãJ×0úFPd íŒ8‚J@íÜ“A+³šŠ@Ê@Ê�22€Á]x˜Yö[ÑMWUïÂ÷~ÿ����æJ\ �����������Ø«VËç$gI®-�ð$›®Ž �����������€9W�����������ö®Õr×j¹LòK’{‹��|×I’•�����������0Gâj�����������Àh´Z>&9KòÅ*��ßõ¾ë‡…�����������07âj�����������À¨´Z¾¶ZB!¿Z�à»6]?;������������s"®�����������ŒR«eäm’[ �ü¥“$+§�����������`NÄÕ�����������€ÑjµÜ$Y$ù`%�€¿ô¾ë‡…Ó������������0âj�����������À¨µZîZ-Ë$¿$¹·�ÀÿØtýpì,������������̸�����������0 ­–IÎ’|±�ÀŸœ$Y9 ������������s ®�����������LF«åk«e‘ä_V�ø“÷]?,œ�����������€©W�����������&§Õ²JòS’oÖ�ø¯M×ÇÎ�����������À”‰«�����������“ÔjùÏî]Ô�� �IDATœä,É' �üî$ÉÊ)������������˜2q5�����������`²Z-w­–‹$¿Z�àwï»~X8������������S%®�����������L^«eäm’oÖ�ÈÆ ������������˜*q5�����������`Z-7IÎ’\[�8p']?¬ý������������L“¸�����������0­–»VËe’«$÷–�Øo]?œy�������������¦F\ �����€±9µ�����/ÕjÙ$Y$¹uL�à€mŒ�����������ÀÔˆ«�����06_-����À6´Znk× �¨7]?¬Œ�����������À”ˆ«�����������³Õj¹kµ\&ùÕÊ�Àú­ë‡3ã�����������0âj�����������ÀìµZÖIÞ&ùfm�à�­�����������ÀTˆ«�����06Ç����`Z-7IÎ’|r`�àÀœwý°4:������������S ®�����Àؼ±�����»Òj¹kµ\$ù—#�fÕõéÑ�����������;q5�����������àà´ZVI~Jro}�à@%Ù�����������€±W�����������R«ås’³$·>��8ç]?\�����������€1W�����������V«åk«å!°ví �€±îúáØØ������������Œ•¸�����������pðZ-—I®’Üú-�€Ù;J²13������������c%®�����������ðïÀÚCdd‘ä›{��3÷s× #�����������0Fâj������������Z-7IÎ’|q�`æ6]?�����������€±W�����������øƒVË]«e‘䃻��3v’de`������������ÆF\ �����������à/´Z–I®’Ü»�0Sï»~83.������������c"®�����������ð7Z-›$‹$ßÜ�˜©a�����������q5�����������€ïhµÜ$9KòÅ�€zÓõÃʰ������������Œ…¸�����������À?hµÜµZI>¸�0CË®N �����������Àˆ«�����������<Q«e™äʽ�€™9J²1*������������c ®�����������ð ­–‡ðÈÛ$÷î�ÌÈy×�����������`ßÄÕ������������ž©Õr“ä4É­Û�3²éúáØ ������������쓸�������Àó|v/��� ÿ¬Ý%Y$¹v�`&Ž’¬Œ �����������À>‰«�����������ü ‡ÀZ«å2ɯn�ÌÄû®Æ�����������`_ÄÕ������������^¨Õ²NòS’{·�f`mD������������öE\ �����������` Z-Ÿ“,’ܺ'�0qoº~X�����������€}W�����������Ø’VËÍc`í“›�·ìúáÔˆ������������¼6q5�����������€-jµÜµZ.’|pW�`ÂŽ’l �����������ÀkW�����������ØVË2É•Û�vÞõÃ…�����������xMâj������������;ÒjÙ$y›äÞ€‰Zwýpl<������������^‹¸�����������ÀµZn’œ%¹ug�`‚N’¬ �����������ÀkW�����������رVË×$‹$ŸÜ�˜ ÷]?œ�����������€× ®�����������ð Z-w­–‹$×î �LÐÚh������������¼q5�����������€WÔj¹Lråæ�ÀÄœwýpi4������������vM\ �����������à•µZ6I~Irïö�À„¬»~86������������»$®�����������°­–Ik�À„=Ö �����������À.‰«�����������ìI«å&Éi’[��ñ®ë‡…±������������Øq5�����������€=jµÜ%y”|²�0kC�����������°+âj������������{öXkµ\$¹¶�0oº~X �����������€]W�����������‰VËe’+{��°êúáØP������������l›¸�����������Àˆ´Z6µ{»��#v”dm ������������¶M\ �����������`dk 5�`äÞuý°0������������Û$®�����������0B­–›ÇÀÚ7û��#¶6������������Û$®�����������0Rµ³$·6�FêM×Kã������������°-âj������������#Öj¹K²HòÅN�ÀH­º~86������������Û ®�����������0rµVËC`íÚV�À%Y�����������€mW�����������˜ˆVË¥À�0Rïº~X�����������€—W�����������˜ÇÀÚ•Í�€Z�����������€—W�����������˜˜VËF` �¡7]?\�����������€—W�����������˜ ÇÀÚ/Iîí�ŒÈºë‡cƒ������������ð£ÄÕ������������&ªÕò1ÉB` �‘£$+ƒ������������ð£ÄÕ������������&¬Õr#°�ŒÌû®ÎŒ�����������ÀW�����������˜¸ÇÀÚCÀäÖ–�ÀH¬ �����������ÀW�����������˜VË×$ 5�`$λ~¸0������������Ï%®�����������0­–;5�`DÖ]?�����������€çW�����������˜‘?Ö>Ù�س“$K#������������ðâj������������3óXkµ\$¹¶-�°gË®N������������ÀS‰«�����������ÌT«åR` �س£$k#������������ðTâj������������3&°�ŒÀÏ]?, �����������ÀSˆ«�����������ÌÜc`타=Z;>������������O!®�����������p�Z-Ë$W¶�öäM×—Ž�����������À?W�����������8­–À�°G뮎 ������������À÷ˆ«�����������5�`Ž’, ������������À÷ˆ«�����������5�`~ëúáÔ�������������üq5�����������€$°�ìÑÚñ�����������ø;âj������������J` �Ø“Ÿ»~X8>������������E\ �����������à€ ¬�{²vx������������þЏ�����������À{ ¬½Mrè·��^Í›®.�����������€ÿO\ �����������€‡ÀÚM’…À�ðŠÖ]?;8������������$®�����������ÀïÖ�€Wv”déè������������ü‘¸������������ÿ%°�¼²ßº~8ut������������þC\ �����������€?X�^ÙÊÁ�����������øq5������������þ‡À�ðŠÞuý°pp������������"®�����������ÀßX�^Ñʱ�����������ˆ¸������������ß#°�¼’ó®.������������q5������������¾K` �x%k‡�����������@\ �����������€ôX»p)�`‡Nº~X:0�����������ÀaW�����������àIZ-Ÿ“\¹�°C«®Ž�����������àp‰«�����������ðd­–À�°CGI– �����������p¸ÄÕ������������x5�`Ç~ëúáÔ‘�����������“¸������������Ï&°�ìØÊ�����������“¸������������?D` �Ø¡w]?,�����������àðˆ«�����������ðÃÖ�€Z9.�����������ÀáW�����������àEÖ�€9ïúaá¸������������‡E\ �����������€{ ¬]»$�°e�����������8,âj������������lE«åR` �ز“®.�����������àpˆ«�����������°5k�À¬º~8vX�����������€Ã ®�����������ÀV ¬�[v’dé¨������������‡A\ �����������€­{ ¬}rY�`K–]?;&�����������Àü‰«�����������°+µ[×�¶à(ÉÊ!�����������æO\ �����������€hµÜ%Y¬�[ò¾ë‡SÇ�����������˜7q5������������vF` �ز•ƒ�����������Ì›¸������������;õX»HrïÒ�À ½ëúáÌ�����������æK\ �����������€kµ|M²X�¶`íˆ������������ó%®�����������À«hµÜ¬�[pÞõÃÂ!�����������æI\ �����������€WóX»tq�à…V�����������0Oâj������������¼ªVËÇ$W®�¼Ày×�����������0?âj������������¼ºVËF` �x¡µ�����������̸������������{ñX»v}�àtýpéx������������ó"®�����������ÀÞ´Z.Ö�€X9�����������À¼ˆ«�����������°Wµ/V��~ÀI×K‡�����������˜q5������������Æà"É­%�€°êúáØá������������æA\ �����������€½kµÜ%Y$ùf �à™Ž’, �����������`ÄÕ������������…ÇÀÚE’{‹��Ï´ìúáØÑ������������¦O\ �����������€ÑhµÜ$Y¬�ÏtôXs4�����������€éW�����������`Tkâ(�Às-»~8v5�����������€iW�����������`tZ-›$W–�žá(ÉÚÁ������������¦M\ �����������€Qz ¬][�x†w]?œ:�����������Àt‰«�����������0Z­–K5�à™V�����������0]âj������������ŒÝ2É­•�€'z×õéc�����������L“¸������������£Öj¹K²HòÍR�À­ �����������`šÄÕ������������½ÇÀÚE’{k�Oð®ë‡S‡�����������˜q5������������&¡ÕróX�xŠ•+�����������L¸������������“ÑjùœäÊb�À¼ëúáÌ¡������������¦E\ �����������€Iiµl’|°�ðkG�����������˜q5������������&§Õ²Lrm9�àœwý°p$�����������€éW�����������`ªk·Ö�þÁÊ������������¦C\ �����������€IjµÜ%Y$¹· �ðç]?,�����������`ÄÕ������������˜,5�à‰V�����������0 âj������������LZ«å&É¥€ï8ïúaá@������������ã'®�����������ÀäµZ>&ùÕ’�Àw¬�����������`üÄÕ������������˜…VË:ɵ5€¿qÞõÃÂq������������ÆM\ �����������ø?öîอ+MÃðç©YÐ^€.÷­:)ƒFÇF�G0`d§%F F0dd䞥ÎÂæª{ tÚ-É”ÄC\à>O•—^èýY¶ªtt?Ø'ó$7. �|ÂB�����������€a3®�����������ÀÞhµ,“¼N²rU�à#^MŽÏ_ �����������0\ÆÕ������������Ø+Ö�€?°�����������`¸Œ«�����������°wZ-×Iæ. �|Ä«Éñùka������������†É¸������������{©Õò&É™ë�±�����������`˜Œ«�����������°·Z-ó$. �üΫÉñùkQ������������†Ç¸������������ûn–䯕€ßY�����������0<ÆÕ������������Øk­–åf`måÒ�À^MŽÏ_ �����������0,ÆÕ������������Ø{­–ëÍÀ�À‡j������������ ‹q5������������F¡Õò.ɉk�x59>-�����������ÀpW�����������`4Z-‹$.�|`!�����������ÀpW�����������`lfIn\�Øx59>-�����������À0W�����������`TZ-ËÍÀÚÊ倹������������Ã`\ �����������€Ñiµ\oÖ��Öþ29>©�����������ÀöW�����������`”Z-ï’œ¸>�°±�����������`ûŒ«�����������0Z­–õˆÊ•Ÿ�� ÉO“ãó—B������������l—q5������������Ænšänì�€ß,d������������Ø.ãj������������ŒZ«e¹X�øir|þrô������������¶È¸������������£×j¹Nò_cï��üf!�����������ÀöW�����������€ÿX{“ä­�0z?MŽÏ_Ž=�����������À¶W�����������€ÿ7Or£�ŒÞ|ì������������¶Å¸������������l´Z–I¦IVš�À¨Í&Çç?Ž=�����������À6W�����������€´Zn׃*š�À¨&™=�����������À6W�����������€ßiµ¼Kr¦ �ŒÚ|r|þãØ#������������<7ãj������������ð­–y’m�`´×kÎ�����������𼌫�����������À§M“¬ô€Ñ2®�����������ðÌŒ«�����������À'´Zn7k�À8NŽÏgn�����������ð|Œ«�����������Àg´Z.“œh�£µpz�����������€çc\ ������������þ@«e=ªr¥�ŒÒŸ&Çç3§�����������xÆÕ������������àq¦IVZÀ(-œ�����������àyW�����������€Ghµ,7k�Àøüir|þÚÝ�����������ú3®������������Ôj¹Lr¦�ŒÒÂÙ�����������ú3®������������_ Õ2Or£�ŒÎ«Éñùkg�����������è˸������������|¹i’•n�0: '�����������è˸������������|¡VËm’™n�0:¯&Çç/����������� ãj������������ðZ-ï’œi�£³pr�����������€~Œ«�����������À×[«Üè�£òÓäøü¥“�����������ôa\ ������������¾R«e™d–d¥!�ŒÊܹ�����������ú0®������������ß Õrd¡!�ŒÊlr|þ£“�����������<=ãj������������ðZ-§I.t€Ñ8L2wn�����������€§g\ ������������žÆ,É–�0ÆÕ������������:øOQØžŸ_:wdéH��Àøs’������à˵Z–“ãóõÀÚÿÈ�£p¸þ«åÍ×üb'Çç?nÞl=——›v‘·m<†¿ãÅ·zý ÿ¾ÿF°S|ÃáÉ-7¿��öÏÁæÏWÜv§ÝŽ=��ƒuº~{ê<���ðqÆÕ�؇I^¹çg���������€õÀÚåäøü$É«�£ð×Éñù_Áßñ�x<¿wzzÙ·_��ð›û$GR��¼5¬���Ÿ÷ú������������ÀÓiµ,’ÜH �������°³V†Õ�€NÖoLçâ��ÀçW�����������€§7Ý|d �������€Ýsèf�@'³VËR\���ø<ãj������������ðÄZ-·Iæº�������윕“�üÜj¹���þ˜q5������������è Õò&É…¶��������;ã>É¡s�\´ZN…��€Ç1®������������ýÌ’¬ô�������¼‡$GÎ�tp·yS ���<’q5������������è¤Õ²L2Õ�������`ðþæD�@'³Í›R���à‘Œ«�����������@G­–Ë$g������� Ö}’œ�èàdó–���øÆÕ������������ ¿E’�������g=¬vä,�@W­–…°���ð匫�����������@g­–e’™Î��������ƒò‹a5� “U’©¸���ðuŒ«�����������À3hµ\'9Ñ�������`0¾s � “Y«e).���|ãj������������ðLZ-‹$7z�������lÝ}’ï�èà¬ÕòNX���øzÆÕ������������àyÍ’¬4�������ØšõÛ#ù€nZ-sa��àÛW�����������€gÔj¹N²Ð�������`k¥�:X¸Î„��€og\ ������������žY«å4É•î��������ÏîAr� “y«åZ\���øvÆÕ�����������Ò(1�� �IDAT�`;fIVÚ�������<›û$r�¼mµ¼���ž†q5������������Ø‚VËm’…ö��������Ïâ!É‘Ô�@wIæÂ��ÀÓ1®������������[Òj9Mr¥?�������@w�L[-Kq��àéW�����������€íš%Y¹�������@7÷Ò�üÜj¹���ž–q5������������Ø¢VËíf` �������€§÷>É‘®�@W­–Sa��àéW�����������€-kµ¼Krá��������Oê—$/$�:X%™ ���}W�����������€a˜m>´�������ÀÓøNG� “i«e).���ôa\ ������������`ó™[��������<‰÷I¾—�èà¤Õr),���ôc\ ������������¢Õò.É•{��������|“U’�Ü´ZÂ��@_ÆÕ������������`Xf›|�������ðuu�:X¿ïœ ���ýW�����������€iµÜ&Y¸ �������ÀWy �èd¶yç ���tf\ ������������¦ÕršäÊ]��������¾È}’É�€ÎZ-ï„��€ça\ ������������†i–då6��������òäH*� ƒ›$ a��àùW�����������€jµÜú�������À£H�t°J2kµ,Å��€çc\ ������������ªÕršäÊ}��������>k%�ÐÉ¢Õr-.���</ãj������������0ls÷�������ø¤÷Iå�:¸hµœ ���Ïϸ������������ X«å:ɉ�������ü›_“¼�èà.ÉLX���Øãj������������0p­–E’w�������ø—�èdÚjYŠ ���Ûa\ ������������vÃÜ��������þé}’ä��:8iµ\ ���Ûc\ ������������v@«å2É™[�������ä>É �€®Z- a��`»Œ«�����������ÀîX¬ãν�������€‘;{�� ‹U’©´���°}ÆÕ������������`G´Z–Ifî�������ŒØƒã�L7o5��€-3®������������;¤Õr™äÂÍ�������€ºOràð�@g›7š���À�W�����������€Ý3K²r7�������`DÖo%Ž�èà¦Õ2���†Ã¸������������ì˜VË2ÉÂÝ�������€9tl� ƒõ€ëTX���ãj������������°ƒZ-§I®Ü�������•#�Ì[-·â��À°W�����������€Ý5w;�������`ÏÝ'9td� ƒ·­–7Â��ÀðW�����������€Õj¹Nrâ~�������Àžú5É‘ã�Ü$™ ���Ãd\ ������������vÛi’;7�������öÐß�èdÖjYŠ ���Ãd\ ������������vØæÃ37�������öÌ}’�èàçV˵°���0\ÆÕ������������`ǵZ.“\¸#�������°'ÖÃjGŽ �tpÑj9���†Í¸������������ì‡y’•[�������;îÃj�@'ëw–3q��`øŒ«�����������ÀhµÜ&9uK�������`Çù^*�ÐË´Õ²T���†Ï������������Àžhµ,’ܸ'�������°£î“8�ÐÁI«åRX���Ø ÆÕ������������`¿ÌÝ�������ØA«$G�tpÕjY ���»Ã¸������������ì‘VËe’·n �������ì˜C�:X¸Î„��€Ýb\ ������������öÏ|ó1�������€]à�ÐˬÕr«.���ìãj������������°gZ-Ë$ w�������vÀ}’C‡�:8kµ¼���vq5������������ØC­–Ó$7n ������� ØC’#�:¸iµÌ…��€Ýd\ ������������ö—‚��������Cö7×�:X%™ ���»Ë¸������������ì©VËe’·î ������� Ð}’�è`Þj¹���v—q5������������Øoó$+7�������d=¬vä �@­–7Â��Àn3®������������{¬Õ²LrêÆ�������À@übX �èä.ÉL\���Ø}ÆÕ������������`ϵZ›†��������lÛw.��t2mµ,Å��€Ýg\ ������������ÆaæÎ�������À–Ý'ùÞ�€~nµ\ ���ûÁ¸������������Œ@«å2É…[�������[²Jr$>�ÐÁU«åTX���ØÆÕ������������`<æn �������lÉ¡ð�@ëש°���°_Œ«�����������ÀH´Zn“œ¸7�������ðÌ�:™¶Z–â��À~1®������������ãršäÎÍ������€grŸä@l� ƒ“VË¥°���°Œ«�����������Àˆ´Z–In�������<ƒ‡$GB�Ü´Z¼‡��€=e\ ������������F¦Õò&É•»������� �t°J2���ö—q5������������§…»�������Ý‹ �t2kµÜŠ ���û˸������������ŒP«å2É[·�������:xŸäHX� ƒ·­–wÂ��À~3®������������ãµH²r�������à ý’ä… �@7IæÂ��Àþ3®������������#Õj¹Mrêþ�������ÀúNL� ƒU’Y«e).���ì?ãj������������0nëqµ»±G��������žÄû$ßK �t°hµ\ ���ã`\ ������������F¬Õ²\pÄÏ��������ðVI^ˆ�tpÑj9���ÆÃ¸������������Œ\«åM’›±w��������¾É¡|�@wIfÂ��À¸W������������Öæ*��������_éA8� “Y«e).���Œ‹q5������������ ­–Ë$J��������_è>Éh�@'›÷���ÀÈW������������þa®�������ð’ �tpÕjY ���ãd\ ������������øM«å6É™�������À#�t°J2���ÆË¸������������ð¡Åæ£$��������Ÿã}�ÐˬղT���ÆË¸������������ðO›‘œ*�������|Æû$‡�œµZÞ ���ãf\ ������������ø½õ¸Ú*�������ÀGüšä…0�@7­–¹°���€q5������������à_´Z–Iª��������ñwQ�€VI¦Â���1®������������|L«åM’;q�������€¼Oòƒ �@óVË­°���@Œ«������������Ÿ1�������ظOòB � ƒ·­–7Â���ÿ`\ ������������ø¨VËe’+u�������€$G"��Ü%™ ���|ȸ������������ð9 u�������`ôÆ��èfÚjYÊ ���|ȸ������������ðI­–Ë$o������€ÑºOràü�@?·Z®…���~ϸ������������ðG ������À(­’9=�ÐÁE«åTX���àcŒ«������������ŸÕj¹MòV%�������C'�:X¸Î„���>Ÿ������������ð‹ÍÇL�������€qðN��èeÚjYª ���|Šq5������������àµZn“œ*�������£pŸäЩ€NZ-—Â���Ÿc\ ������������x¬õ¸ÚJ-�������Øk¿&9rb� ƒ«VËBX���àW������������¥Õ²Ü ¬�������ÿËÞÝܶ™¥i~j§òF€Á€&FpÀTÐÐ ÐHHHˆ{ ÏÂ¥U×@(azzº«F¶yÈïçºB¸_-èÃy¦ëÇ�:8&Y ���¼‡q5������������à{lÞ8�������¦gŸäƒ»�¬Z-ÏÂ���ïa\ ������������x·VË!Éb�������09¯Ãj g�:øÜj¹���x/ãj������������Àwiµl“ìT������€ÉøfX �èä)ÉZ\���à{W������������~„‡N�������`:¼Q �ôpL²jµÔ���¾‡\�������������ß­Õ²M²S�������FoŸäÊ€nZ-Â���ß˸������������ð£ÖÊ������À¨“,œ�èà®Õ²���øÆÕ������������€òöèÉN=�������­k§�:xý¶p%,���𣌫������������?ãF=�������¥£³�,[-q��€e\ ������������øa­–Û$ ������À¨ì“\;�ÐÁ§VË£°���ÀÏ0®������������ü¬µ‚�������0/IÎ�tðÐjñM!���ðÓŒ«������������?¥Õrÿú ŠŠ�������0 ÿp&� ƒc’¥°���À)W������������Na­"������� Þ>Ég�:X¶ZÂ���§`\ ������������øi­–û$J������À`½«-œ�èàóÛw„����'a\ ������������8•µ’�������0Hß «�<µZnÄ���Nɸ������������p­–û$j������Ààüâ$�@Ç$Ka��€S3®������������œÒZM�������”}’_�è`Õjy���85ãj������������ÀÉ´Zî“<( �������ƒpL²p � ƒ/­–[a��€Œ«������������§¶V�������áÚ�€ž’Ü ���ôb\ ������������8©VË}’U������à¢^ä�:YµZâ���½W������������zX« �������³Or%?�ÐÁo­–Ga��€žŒ«������������'×j¹Oò ,�������œÝK’…ì�@w­–°���@oÆÕ������������€^ÖÊ������ÀÙ]I�t°K²���8ãj��������ßç¿ô���€÷iµÜ¿=¦�������œÇ^g� “U«å .���pÆÕ������������€žÖê������ÀY|M²�èàS«å^X���à\Œ«������������Ý´Z¶Iv ������@Wß’|”�èà¡Õ²���8'ãj������������@oU������€¾~Ñ�èà˜d),���pnÆÕ������������€®Z-Û$;•������ ‹¯I~•�è`Õj9 ���œ›q5������������àÖ*������ÀÉ“|”�èàs«åVX���àŒ«������������ݵZ¶IvJ������ÀI]Ë �tðÔj¹���¸ãj������������À¹l”������€“y‘�èà˜d%,���pIÆÕ������������€sÙ¾=º�������üœ}’+ €nZ-Â���—d\ ������������8‹VË!ÉFm�������ø)/I�|iµl…���.͸������������pN¯ãjGÅ������à‡]I�t°Kr#,���0ÆÕ������������€³iµ’l������€r” �èdùö���ÀÅW������������Îm£8�������|·¯I®e�:ø­Õò(,���0ÆÕ������������€³jµ<'ù¢:�������¼ÛïI>Ê�tðÐjÙ ��� ‰q5������������àÖª������À»ý!�ÐÁ1ÉRX���`hŒ«������������g×jyNr§<�������ü¿¾&ù �ÐÁ²Õr���ãj������������À¥l”������€¿µOòQ"� ƒO­–{a��€!2®������������\ÄÛ£,ê������À_ZH�tðÔjY ��� •q5������������à’6ê������Àô" �ÐÁ1ÉRX���`ÈŒ«������������Ój¹M²s�������øû$W’��¬Z-ÏÂ���Cf\ ������������¸´µ �������Àÿ8&YÈ�tð¹Õr+,���0tÆÕ������������€‹jµl߆�������’k �€ž’¬…���ÆÀ¸������������0W�������€%��:xý±jµÄ���ÆÀ¸������������0Ä������0sû$×s��t±nµ<J ���Œ…q5������������àâZ-‡$·.������ÀLýždáø�@w­–°���À˜W������������†bí�������ÌÔ�t°K²���ãj������������À ´Zž“ܹ�������3³OòÁÑ€–­–ƒ°���ÀØW������������†dã�������ÌÈë°ÚÂÁ€>µZ…���ÆÈ¸������������0­–û$O.������À |3¬�tòÐjY‹ ���Œ•q5������������`h6.������À x�èá˜d©,���0fþ‰������������ J«e›dç*�������LØ>É•�,[-a��€13®������������ ÑÖU�������˜¨c’…ã�|nµÜ ���Œq5������������`ˆ6®������ÀD];,�ÐÁS«åFX���` Œ«������������ƒÓj9$ùâ2�������LÌÑA€^c,…���¦Â¸������������0T—������`BöI®�èà¦Õò,,���0ÆÕ������������€Ajµ<&yp�������&à%ÉÂ!€¾´Z¶Â���Sb\ ������������²ë�������0ÿpD� ƒ§$7Â���Sc\ ������������¬VËm’ ������0bû$�è`Õj9 ���Lq5������������`è6.������ÀH½«-�èà·VË£°���ÀW������������†nëB�������ŒÐ7Ãj�@'w­–¸���ÀTW������������­ÕrHòÅ•�������™_ �èà˜d%,���0eÆÕ������������€1ظ�������#²Oò«ƒ�,[-a��€)3®������������ ^«å1ɃK������0Ç$ ‡�:øÔj¹���˜:ãj������������ÀXl] ������€¸v$� ƒ‡VËZX���`Œ«������������£ÐjyW;º�������öâ8�@¯ßέ„���æÂ¸������������0&×������` öI®�è`Õjy���˜ ãj������������À˜l] ������€zI²p� ƒÏ­–[a��€91®������������ŒF«å9É‹������00W�tðÔj¹���˜ãj������������ÀØl\ ������€Ù;�ÐÁ1ÉJX���`ŽŒ«������������£Òj¹O²s5�������àk’…C��Ü´Z…���æÈ¸������������0FW������à¾%ùè�@w­–­°���À\W������������ÆÈ£1�������\Ú/.��t°K²���˜3ãj������������Àè´ZI¾¸�������ò5ɯâ�,ß¾‘���˜-ãj������������ÀXm]������€ 8&ù(<�ÐÁo­–Ga��€¹3®������������ŒR«å>ÉÎõ�������8³kÁ€Z-a���Œ«������������ãæ!�������ÎéEm� ƒc’¥°����2®������������ŒÙÖõ�������8“}’+±€–­–ƒ°����2®������������ŒÖÛc2_\������€Î^’,D�:øÔj¹���àŸŒ«������������c·uA�������:»�èà©Õ²���à_W������������F­ÕrŸdçŠ�������tr�èàõ7ÆRX���€g\ ������������˜‚+������ÐÁ×$×Â�¬Z-ÏÂ���ü;ãj������������Àl]������€û=ÉGQ€¾´Zn…���øÏŒ«������������£×j9¼>6ã’�������œÐb�<%¹���à¯W������������¦bë’�������œÈ×$Ä�Nì˜dÕj9 ���ð׌«������������“Ðj¹O²sM�������~Ò>ÉG€Ö­–Ga���þžq5������������`J¶® ������ÀOZ�tp×jÙ ���ðÿ3®������������L‰q5�������~Æ‹z�@»$+a���ÞǸ������������0­–ç$w. ������ÀØ'¹�è`Õj9 ���ð>ÆÕ������������€©¹uQ�������¾Ó1ÉB4� ƒO­–{a���Þϸ������������0)­–íÛ£w�������ð^×J�<´ZÖÂ���|ãj������������Àm]������€w: �tðúc),���À÷3®������������L‘q5�������ÞcŸäZ)� ƒU«å ,���À÷3®������������LN«å1É“Ë������ð7~O²�èàs«åVX���€c\ ������������˜ª­Ë������ð7þ�èà©Õr#,���À3®������������L•q5�������þÊ>Éu�€;&Y¾ÆAÏ�� �IDATŠ ���ðsŒ«������������“Ôj9$¹s]�������þ×aµ…(�@7­–ga���~Žq5������������`ʶ® ������ÀÿòͰ�ÐÉ—V‹oÖ����NÀ¸������������0Y­–Û$G������à·8€vIn”���8 ÿÐ������������¦îÖ…������H²Or%�ÐÁ²Õr���à4Œ«������������S·qa������€Ù;&YÌ=�ÐÅo­–Gi���NǸ������������0ioÖì\������`Ö®ç��èâ®Õ²‘���à´Œ«������������s°ue������€Ù::=�ÐÁëoŒ•°����§g\ ������������˜ãj�������ó´Oríö�@ËVËAX���€Ó3®������������L^«å9É“K������ÌÊK’…“�|jµÜ ���Їq5������������`.6. ������0+ÿpn� ƒ‡VËZX���€~Œ«������������sqëÒ�������³±OòÁ¹€;&Y‰ ���Зq5������������`Z-‡$w® ������0y¯Ãj g�:XµZž…���è˸������������0'·® ������0iß «�|nµø ���à Œ«������������³ÑjÙ&9º8������Àdýâ´�@OIÖÂ���œ‡q5������������`nn]������`’öI~uZ�àÄŽIV­–ƒ°����ça\ ������������˜ãj�������Óó:z²pW� ƒ›VË£°����çc\ ������������˜•VËíÛ£z�������Lǵ[�ܵZ¶Â���œ—q5������������`Ž<v������0/n �t°K²���àüŒ«������������sd\ ������`öI®Ü�è`Ùj9 ���p~ÆÕ������������€Ùiµ<&Ù¹<������À¨½$Y8!�ÐÁ§·ïÌ����¸�ãj������������À\ݺ<������À¨]9�ÐÁC«e-,���ÀåW������������æjëò�������£µw:� ƒc’¥°����—e\ ������������˜¥VËc’ë������ŒÎ×$ g�:X¶ZÂ���\–q5������������`În]������`T¾%ùèd�@Ÿ[-÷Â���\žq5������������`ζ®������0*¿8�ÐÁS«åFX���€a0®������������ÌV«å1ÉÎ_�������À(|Mò«S�'vL²���`8Œ«������������s·{�������€x=ùèP�@«V˳°����Ãa\ ������������˜;ãj�������ÃwíF�@_Z-·Â��� ‹q5������������`ÖZ-ÏIžæÞ������`À^�èàõ»±a���†Ç¸������������@²Õ�������`öI®œ�è`Õj9 ���0<ÆÕ�������������’[ �������ç%ÉÂY�€~kµ< ���0LÆÕ������������€Ùkµ<'Ùͽ������ÀÀ\9�ÐÁ]«e#,���ÀpW������������øÓ­�������ƒqt � ƒ]’•°����Ãf\ ������������àO[�������ák’k§��:XµZÂ��� ›q5������������€$­–Ç$;-�������.ê÷$��èàS«å^X���€á3®������������ðO·Z�������\Ôò�<´ZÖÂ���Œƒq5������������€Új������p1_“|�8±c’¥¨����ãa\ �øoöîå¶­d]Ãðç™ì‰�1‚C33°(ØÐPHs k`kÔ½Ás¼/Ýí‹.«ÈEòyBxÿ .Ô����������Àw­–e’{=�������önäJv� ƒY«e#,���Àñ0®������������ðWs=�������ön"9�ÐÁ‡V‹oÂ����ŽŒq5������������€¿ò������À~=è �t°jµ\ ���p|Œ«������������üVË"ÉV������€½X'¹�Øî°™¨����Çɸ������������À?Í5������èn7z2‘�èàºÕ²���à8W������������ø'ãj�������ý]j �tð©ÕòQX���€ãe\ ������������àoZ-»qµ­.�������ÝøO�èá>ɵ²����Ç͸������������À-t������èbäRZ� ƒi«e#,���Àq3®������������ðcs]�������÷-ÉDV� ƒ·­–¥°����Çϸ������������ÀW������ÞŸš�ܶZÞ ���pŒ«������������ü@«e³{pG������€Á¬“¼‘�Ø6ÉTT���€Óa\ ������������àçæÚ������� b7¬6‘�è`ÚjÙ ���p:Œ«������������üœq5������€—ûjX �èä]«e!.���Ài1®������������ð­–»$+}�������^Äû—�@«V˲����§ÇŸK�������������¿¶Ð������àÙÖI.ä�¶M2���à4W������������øµú�������<Ënôd"�ÐÁ¬Õr',���Ài2®������������ð ­–å÷ÿ�������xšK½�€>´ZæÂ���œ.ãj�������������¿ç!������€§Ùê�t°Jr#,���Ài3®������������ð{ÆÕ�������oäR/�``»ñÖY«e#,���Ài3®������������ð{ �������å!ÉD*� ƒ›VËRX���€Óg\ ������������à7Z-›$Ÿu������ø­?$�:øÜjy/,���Ày0®������������ð8 �������~iäD�ÀÀî“ÌD���8ÆÕ�������������g®������ÀOí†Õ&ò��L[-a���·q5������������€GhµÜ%¹× ������à¾V�:y×jYŠ ���p^Œ«������������<Þ\+������€x% �ÐÁm«åFX���€óc\ ������������àñZ������üÅ:ÉkI�€m“LE���8OÆÕ�������������©Õ2× ������à?v£'9�€¦­–°����çɸ������������ÀÓ|Ö ������àÿ\Ê��tð¡Õ²���à|W������������xö�������$��¬Z-×Â���œ7ãj�������������O3× ������8së$ç�Ü6ÉTV����Œ«������������<A«å.ɽf������À™zH2q|� ƒëïßg���p挫������������<Ý\3������àL]8<�ÐÁ§VËGa���ˆq5������������€gYÈ������œ¡µ£�¬’\ ���À¿W������������x¢VË\3������àÌ|I2qt� ƒY«e#,����ÿf\ ������������àynu������ÎÄ×$WŽ �tð¶Õ²���€ÿe\ ������������àyæº������gâ•C�|nµ¼���€¿3®������������ð< Ý������€3ð%Ék‡�¶M2���€1®������������ð ­–å÷~�������NÕî?Ñ+×�:˜¶Z6Â���ð#ÆÕ�������������žo®������pÂ.�èà]«e!,����?c\ ������������àù<ð������œª—�:¸mµÜ ���À¯W������������x>ãj������À)Z'¹pY�``Û$3Q���øãj�������������ÏÔj¹K²Ò������8!I& �t0ûþÍ����ü’q5������������€—Yè������œ Ç�:øÐj™ ���ÀcW������������xãj������À©Øº$�ÐÁªÕr-,����e\ ������������àeŒ«������§àK’K—�¶o‰ ���ÀSW������������xVË&ÉJC������àˆ}Krå€�@×­–¥°����<…q5������������€—›k������±?�èàs«å£°����<•q5������������€—[h������©/IÞ8�0°û$3Q���xãj�������������/Ôj1®������£u’+—�:˜¶Z6Â���ðÆÕ�������������†q«#������pd&�tð¶Õ²���€ç2®������������0Œ…Ž������Àyp,� ƒÛVË{a���x ãj�������������Ã0®������‹u’ ×�¶M2���€—2®������������0€V‹q5������àìFO&.�t0mµl„���ौ«������������ çVK������`ä.�èà]«e!,����C0®������������0������c¶u� ƒU«åFX����†b\ ������������`8ÆÕ������€±Z'¹t�``»ñÖ©¨���� ɸ������������À@Z-ÆÕ������€1ú–dâ2�@³V˰���� ɸ������������À°nõ������FæO�:øÔj™ ���ÀÐŒ«������������ k¡'������0"ë$o�Ø*ɵ¨����ô`\ ������������`XÆÕ������€±Ø «M\�Ø6ɬղ���€Œ«������������ ¨Õb\ ������ƒ¯†Õ�€NnZ-Kq���èŸ������������Àðn5������Ì›“�@Ÿ[-ï•��� 't������������ o¡)������p@ë$�� ì>ÉLT����z3®������������0<ãj������À¡l“LÔ�:˜µZ6Â���Лq5������������€µZŒ«������‡r©<�ÐÁ;ßE���°/ÆÕ�������������úXé ������ìÙVp� ƒÛV˰����ì‹q5������������€>º������{´Nr)8�0°ÝxëTT����öɸ������������@ÆÕ������€}yH2Q�è`ÖjÙ ���À>W������������èø������°/( �tð¡Õ2���€}3®������������ÐA«e“ä^[������ ³u’7"�[µZ®E���àŒ«������������ô³Ð������èh7¬6�Ø6ÉTT����Ÿ������������@?ÆÕ������€^¾V�:¹nµÜ‰ ���À¡W������������èg©-������ÐÉ+a€>µZ> ���À!W������������è¤Õ²WÛê ������ l䵨�ÀÀî“\‹ ���À¡W������������èk¡/������0 m’‰ �@ÓVËFX����͸������������@_K}�����€]Š �tð¶Õâ['����FÁ¸������������@_ }�����€< �tð¹Õò^X����ÆÂ¸������������@G­ãj������ÀÖI.”�¶M2���€11®������������ÐßJc������à’L�:˜¶Z6Â���0&ÆÕ�������������ú[h ������¼À…x�@ïZ-¾m���`tŒ«������������ô·Ô������x¦µp�@·­–a���#ãj�������������ý-4������žáK’‰p�ÀÀ¶If¢���0VÆÕ�������������:kµÜ}������à±¾&¹R �è`öý›&����%ãj�������������û±Ô������x‚Wb�|hµÌ…���`ÌŒ«������������ìÇBg������à‘¾$y-�0°U’Q���;ãj�������������ûa\ ������xŒm’+¥�€í~cÌZ-a���;ãj�������������û±Ô������x„K‘�€®[-¾a���à(W������������؃VË&ɽÖ������À/<ˆ�tð¹ÕòQX����Ž…q5������������€ýYj ������üÄ:É…8�ÀÀî“ÌD���à˜W������������ØŸ…Ö������À<$™�t0mµl„���à˜W������������ØŸ¥Ö������À\ˆ�tð®Õâ›%����ŽŽq5������������€=iµ,´������þf+�ÐÁm«åFX����Ž‘q5������������€ýZé ������|÷%É¥�ÀÀvã­SQ���8VÆÕ�������������ök©7������ä[’+!�€¦­–°����+ãj�������������ûe\ ������ØùS� ƒ­–…°����3ãj�������������ûe\ ������ø’äÍÙW��†¶jµ\« ���À±3®������������°G­–…Þ������pÖÖI®Î=�0¸m’©¬����œãj�������������û·Ò������ÎÖÄé€f­–;a���8ÆÕ�������������öo©9������œ¥g�:øÔj™ ���À©0®������������°ÆÕ������àü¬“\¸;�0°U’kQ���8%ÆÕ�������������öϸ������œ—m’‰›�ÌZ-a���8%ÆÕ�������������ö¬Õ²Ð������ÎÊ¥s�¼mµ,…���àÔW������������8Œ{Ý�����à,l�èàs«å½°����œ"ãj�������������‡±Ô������NÞ:É¥3�»O2���€Se\ ������������à0Œ«�����Àiû–dâÆ�@³VËFX����N•q5������������€ÃXè������'íOç�:x×jñí����'͸������������Àa,u�����€“µNòÆy€Ý¶ZnD���àÔW������������8€VË&ÉV{������89»aµ‰³�Û}k4���€s`\ ������������àp–Ú�����ÀIùjX �èdÖjÙˆ ���À90®������������p8 í�����à¤xç�èáC«e®,����çŸn�������������‡s§=������œŒu’ ç�¶jµ\‹ ���À91®������������p8Kí�����à$l“Lœ�Øî7ÆLT����Îq5������������€iµW�����€ÓpéŽ�@×¾1���àW������������8¬•þ������pÔ¶Î�tð©ÕòQX����Αq5������������€ÃZê������GkäÒù�€Ý'¹���€se\ ������������à°îô�����€£ôdât�@ÓVËFX����Εq5������������€ÃZè������Gég�:xÛjY ���À93®������������pXwú�����ÀÑY'yãl�ÀÀn[-ïE���àÜW������������8 V‹q5������8.»aµ‰›�Û&™Š ����ÆÕ�������������ÆàÖ������à(|5¬�t2mµlÄ����ãj�������������c°t������8 ¯œ �èà]«e!,����ü?ãj�������������‡wç������0zë$¯ �تÕr#*����ü—q5������������€Ã[º������ŒÚ6Éĉ�€í~cLE���€¿2®������������pxÆÕ������`Ü.Ý�è`Öj¹����þʸ������������ÀµZ6I¶î�������£ôà,�@Z-sa���àŸŒ«������������ŒÃÒ������`tÖI.œ�Ø*ɨ����ðcÆÕ�������������ÆÁ¸������ŒËC’‰›��Û&™µZ6Â���ÀW������������%�����À¸\¸�ÐÁM«e),����üœq5������������€qX¸������ŒÆÚ)�€>·ZÞ ����¿f\ ������������`îÜ������FáK’‰S��»O2����~ϸ������������À´ZŒ«�����Àá}Mrå�@ÓVËFX����ø=ãj�������������ãqë������pP¯ä�:x×jY ����c\ ������������`<6n������ó%Ékù€Ý¶ZnD���€Ç3®������������0K·������€ƒØ&¹’�Øî7ÆTT����xãj�������������ãa\ ������ãRw� ƒi«e#,����<q5������������€ñð������ì߃æ�@Z- a���à錫���������ð/öîè¶é+ ãðG•‹”‹¦BÞ£«d‚#«˜ `Xà(tØ ÙÀÙÀ¹·}.€«¦JU!¡5àÿßyQžGÊïwc)öù��!<¦������G·­ªS³�»½­Œ ����ßG\ ������������ Ë{������ÀQ|ªª…©€‰í«êܨ����ðýÄÕ�������������²lÜ������ŽâÔÌ�À V£7ß���€ˆ«������������dY»������Ìnob�`oFo†���€Ãˆ«������������dÙ¹������Ìê}U™�˜ØuU­Œ �ÍD;�� �IDAT���‡W������������Èré������0›Uõ̼�À –£·a���àpâj�������������Y<°������ó¹µ-�0ƒç£·µa���`âj�������������A<²������³y_UOÍ �LìÝèí•Q���`:âj�������������ynÜ������&µ­ªg&�&¶¯ª¥Q���`Zâj�������������y6n������“Z˜�˜ÁùèmgX����˜–¸������������@žµ›������Àd>™�˜ÁËÑÛ¥a���`zâj�������������yvn������“ØVÕ©)€‰]Þ^����æ!®������������çÒM������à`ûªZ˜�˜ØÝgŒ¥Q���`>âj�������������yvn������;3!�0ƒåèmcX����˜¸������������@˜ÑÛÚM������à {ó�3x=z{kX����˜—¸������������@&=�����À÷ÙVÕ™í�€‰]ÞVF���€ù‰«������������dZ» ������|³Uµ0�0±}U- ����Ç!®������������iã.������ðÍnM�Ì`5z[����ŽC\ ������������ “¸������|›mU=µ�0±w£· £���Àñˆ«������������dW�����€û» «-ì�L즪–F���€ãW������������È$®������÷óAX �˜Éùèmg\����8.q5������������€Lâj������p?ÞV�æð|ô¶¶,����Ÿ�������������½‰«�����ÀÿÛVÕ©�€‰]Þ^����†¸������������@®·�����€¯ÚWÕÂ<�ÀÄî>cœ����ޏ������������@®Û������ÀW™�˜ÁùèmgX����x8âj�������������¹ÄÕ������à¿íí�ÌàõèíÒ°����ð°ÄÕ�������������r‰«�����À¿m«êÌ.�ÀÄ®Go+£���ÀÃW������������È%®������_úTU ›��ÛWÕ¹Q��� ƒ¸������������@.q5������øÒŸö��f°½ù®����„W������������ȵs������øl[UOÍ�LìÍèí­Q��� ‡¸������������@¨ÑÛÚm������àowaµ…)�€‰]WÕʨ����E\ �������������������HöAX �˜Á¾ª–£·q��� ‹¸������������@¶+÷�����à‘{òØ��fñbô¶6-����äW�������������������Rm«êg×�&önôöʨ����I\ ������������ ÛÚ}������x¤öUµp|�`b7Uµ4*����ä:ñÃ:�������8šÍ?üØÜ����8¶»ß€]Y�����€Gæ×ªúÍÑ€,Go;Ã���@®“ÑÛÊ}�������������2Þ.ªêÂy������x,~ùý»°ÚÆÁ€¼½]����²¸�������������������dYUk�&¶½½0*�p»ªº2�|¶1plOnoo��������������������������<¸Ÿœ���������������������������H ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«��������������������������ÄÕ��������������������������€âj��������������������������@q5�������������������������� ‚¸��������������������������A\ ��������������������������ˆ ®��������������������������DW��������������������������"ˆ«�����������������±wG7qdi†¿]ùžÎ`Ȁ΀“;ƒm©0Á¡"X@IL8‚)G°8œA“Á ig4Zyv�šÍóHÜ7ßÓ¢š~��������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������JW��������������������������Jxç �������������������<ÅÔÛ6ÉÆh�À`·Ë¼Œ �Àkšz{ø»×Ö�àww˼ޙ8&q5�������������������mêí4ÉšäÄj�À@_’4ƒ�PÀCXíW‡�€ßÍI.ÍÓ»©·‡7æ«Óí2¯‡‚¯ �øÁy���ðm˼®¦�����à­ò9c���à :,ózëð�PÒ°�0Ø}’½ï‚����àÁ»$WIÎ ¼–’¦ÞÞú������exvÃÿ¹‡êñåoËÝ~¨aè=?���€Wò/Ã���oÏ·Ìëß~´ß €ãšz{øþº3³�ƒ]Ь����ð›w–�������8Š“$ç¦~SÜûÇæ‹e����������€7gêm—äƒË�ƒ}Zæõʨ�����üæï–�������������¨mêmëD�����ÀkšzÛ$¹v�`°¯IöF����àÄÕ�������������êÛ¸���¹¯¢§�� �IDAT��ðÊn’œ8�0Ø~™×ƒQ����ø#q5������������€úNÝ�����x-So—IÎ��l^æu5*�����ÿM\ ������������ >q5�����àUL½m“të�ƒ}^æõÒ¨�����|‹¸������������@}âj�����ÀÑM½m’ÜX�ì>ÉΨ�����üq5������������€úÄÕ�����€×pä'Ë�ƒí—y=����€?#®������������P߯�����€cšzÛ'yot�`°Ë¼Þ����€ÿE\ ������������ ¾37�����Žeêm›äÊà�À`_–y½0*�����E\ ������������ °©·û������GväÄè�À@÷Iv����à1ÄÕ�������������jÛº�����p,SoWIÎ � v±ÌëQ����x q5������������€Ú6î�����ÃÔÛ.Éc�ƒý²ÌëµQ����x,q5������������€Ú¶î�����¼´©·Ó$¢'�Àh_“\X����€§W������������¨mã>�����À<„ÕN � ¶[æõ`T�����žB\ ������������ ¶­û������/iêí2ɹ‘€Á~^æõÖ¨�����<•¸������������@m÷�����^ÊÔ[KÒ � öi™×+£����ðâj�������������µ¹�����ð¦Þ6I® � vŸdoT�����žK\ ������������ ¨©·S·�����^ÐCXí'�ƒí–y=����€çW������������¨K\ �����xSoIÞ[�l^æu5*�����ßC\ ������������ .q5�����`¸©·m’KË�ƒ}^æÕ{ �����¾›¸������������@]âj�����ÀPSo›$×IN, � tŸdoP�����FW������������¨kë6�����À`—IÎŒ � ¶_æõΨ�����Œ ®������������Pׯm�����€Q¦ÞvI>�ìã2¯7F����`q5������������€º¶n�����Œ0õvšäÚ˜�À`_’\����€‘ÄÕ�������������ê:q�����`Ï�€Áî“ì—y=����€‘ÄÕ������������� šzkî�����Œ0õv™ä̘�À`˼Þ����€ÑÄÕ�������������jÚ¸ �����ð½¦ÞZ’nH�`°O˼^����€— ®������������PÓÖ]�����€ï1õ¶IrcD�`°¯IöF����ै«������������Ôtê.�����ÀwºNrbD�`°Ý2¯£����ðRÄÕ�������������jW�����žmêí"É{ �ƒÍ˼Þ����€—$®������������PÓÖ]�����€ç˜z{xÎðOã�ƒ}^æõÒ¨�����¼4q5������������€šNÜ�����xª©·M’kÃ�ƒÝ'Ù����€cW������������(fê­¹ �����ðLWIÎŒ� ¶[æõ`T�����ŽA\ ������������ žS7�����žjêm—ä†�û¸ÌëjT�����ŽE\ ������������ q5�����àI¦Þž/\[ �ìË2¯F����à˜ÄÕ�������������êÙº �����ðD7INŒ� tŸdgP�����ŽM\ ������������ ž›������5õv•äÌ`�À`ûe^ïŒ ����À±‰«������������Ôsî&�����ÀcL½µ$Œ� öË2¯7F����à5ˆ«������������2õvê�����ÀcL½m’ˆž��£}IraU�����^‹¸������������@-âj�����Àc=„ÕN¬� ¶_æõ`T�����^‹¸������������@-Í=�����€¿2õv‘äÜP�À`?/ózkT�����^“¸����ðoöîö¶lÍÂè΀Ì@Ê@ÌÀ'3ƒ&p°ÁaEÐr�°33(g e`g e0àÜž™;·Ûn}~¯ÂóòG¡Ô�������à¸ÌÝ�����ø•ÚÊ"Éï"�}‡éNT�����͸������������ÀqY¸�����ð3µ•y’{�€Î~$Y‰ ����À10®������������p\Œ«�����¿r—äJ!� ³Õ8LO¢����p Œ«������������‰ÚÊ<ÉÌ=�����€¿S[Y%ùM� ³a¦IT�����Ž…q5������������€ã±p �����àïÔV®“܉�töm¦µ¨�����ãj�������������Çø�����ð3÷Ifê��='Y ����À±1®������������p<®Ý�����øOµ•»$7Â��­Æaz����€cc\ ������������àx,Ü�����øwµ•e’O¢��}‡é^T�����Ž‘q5�������€×ù¦����°CÆÕ�����€ÿU[™'Ù(�tö8Ó­¨�����+ãj�������������GàÏ£ÎÜ�����ø7÷þ?��:{N²����€cf\ ������������à8,Ü�����øµ•u’‚��ÝŽÃô *�����Ç̸������������Àq0®�����ü·ÚÊöƒ¦�ÐÙã0mD����àØW������������8×î������ÔVæIî/>�ÐÛ$·ª����p Œ«������������‡…;������I6I®„��:[ŽÃô$*�����§À¸������������Àq0®�����®¶²JòñÒ;��Ý}‡éAV�����N…q5������������€«­\'™¹�����\®ÚÊ"ÉŸ��ÐÙ·q˜<c�����pRŒ«������������Þµ�����ÀÅÛ$™]z� «ç$KI����85ÆÕ�������������¯¸�����\®ÚÊ]’?� ³å8LO¢����pjŒ«������������Þµ�����Àeª­,“|r~� ³a¦IT�����N‘q5������������€Ã[¸�����\žÚÊu’Ó�=ŽÃ´����€Se\ ������������àðnÜ������.ÒvXmæô�@GÏI–‚����pÊŒ«������������Pme¡?�����\žÚÊ:ɧ�:[Ãô]T�����N™q5������������€Ã2®�����¦¶R’4w�:û2Ó½¨�����œ:ãj�������������‡e\ �����.Hmeždãæ�@gIÖ¢����pŒ«������������–q5�����¸,Ûaµ+7�:zN²‡éIT�����Îq5������������€Ã2®�����¢¶r›ä£{�­Çaz����€sa\ ������������à@j+×Ifú����Àù«­,¶Ã'N �töu¦;Q����8'ÆÕ�������������g¡=�����œ¿ÚÊ<É&É̹€Ž~$Y ����À¹1®������������p8ÆÕ�����à2¬“ܸ5�ÐÙr¦'Q����87ÆÕ�������������Ǹ�����œ¹ÚÊ2É'w�:Æaz����€sd\ ������������àpŒ«����À«­\'Ù¸1�ÐÙ·q˜Ö¢����p®Œ«������������@mežäJ{�����8kÛaµ™�='Y ����À93®������������p Ý����à|ÕVÖI>81�ÐÙr¦'Q����8gÆÕ�������������£è�����ç©¶²ý 9/�ÐÙ—q˜&Q����8wÆÕ�������������c¡;�����œŸÚÊ<ɽÓ�=ŽÃt+*�����—À¸������������ÀaW����€ó´I2s[� £ç$KA����¸ÆÕ�������������ö¬¶2Or¥;�����œ—ÚÊm’Î �tv;ÓwQ����¸ÆÕ�������������öo¡9�����œ—ÚÊöýÿïÎ �töÇ8LQ����¸$ÆÕ�������������ö¯h�����磶2Obô�èí1É­ª�����\ãj�������������û·Ð�����ÎÊ]’'�:[Ãô$*�����—Ƹ������������ÀþW����€3Q[Y&ùÍ=€Î>Ãô *�����—ȸ������������ÀÕVæI®4����€ÓW[¹N²qJ� ³¯ã0݉ ����À¥2®������������°_ ½����àlÜ'™9'�ÐÑs’• �����\2ãj�������������ûUô����€ÓW[Y'¹qJ� ³å8LO¢����pÉŒ«������������ì—q5�����8qµ•íûþæŽ�@gÃ8L“¨�����\:ãj�������������ûµÐ�����NWmežäÞ €Î¾Ã´�����Œ«������������ìMmå:ÉLq�����8i÷Þ÷�='Y‰ �����ÿb\ ������������`Z����À骭Ü&ùà„�@g«q˜¾‹ �����ÿb\ ������������`ŠÖ�����pšj+‹$¿;�ÐÙ—q˜îE����€ÿc\ ������������`Z����Àé©­Ì“=�z{‡éVU�����øÿŒ«������������ìÏ­����à$Ý%¹r:� £ç$+A����ௌ«������������ìAm¥è �����§§¶²=ùÍé�€ÎnÇaz�����þʸ������������À~,t����€ÓR[¹Nrçl�@g_ÇaÚˆ �����ϸ������������À~W����€ÓsŸdæn�@G?’¬����€Ÿ3®������������°Eg�����8µ•»$7N�t¶‡éIT�����ø9ãj�������������;V[™'¹Ò�����NCm¥$ùä\�@gŸÇaz�����~͸������������Àî����à4ÔVæIî �èìÛ8Lw¢����À?3®������������°{ÆÕ�����àtl‡Õfî�tôœd)(�����¼Œq5������������€Ý[h �����ǯ¶²NòÁ©�€Î–ã0=‰ �����/c\ ������������`÷|„�����Ž\me‘¤¹�ÐÙ0Ó$*�����¼œq5������������€ª­}����à¸ÕVæIî �èìq¦µ¨�����ð:ÆÕ�������������vk¡/�����½M’+g�:zN²�����^ϸ������������Àn}����àxÕVVI>:�ÐÙj¦ï¢����ÀëW������������Ø-ãj�����p¤j+‹$wî�töÇ8L÷¢����ÀÛW������������Ø‘??È:Ó�����ŽÖÆ»|� ³Ç$·¢����ÀÛW������������Ø…¶�����pœj+wInœ�èè9Éj¦'Q����à팫������������ìNÑ�����ŽOme™ä“Ó��­Çaz�����ÞǸ������������ÀîW����€#S[™'Ù¸ �ÐÙ×q˜îD����€÷3®������������°µ•ë$WÚ����ÀѹO2s� £IV‚����@ÆÕ�������������vc¡+�����—ÚÊ:Ég�:[Ãô$*�����ôa\ ������������`7Š®�����p<j+Ûw÷ÍI�€Î†q˜&Q���� ãj�������������»a\ �����ŽDmeždã�@g߯aZ‹ �����}W������������èìÏ´Þè �����Gc;¬vå�@GÏI–‚����@ÆÕ�������������ú+š����Àq¨­Ü&ùè�@g«q˜žD����€þŒ«������������ôg\ �����Ž@me‘dí�@g_Æaº�����vø������������@ÆÕ�����àÀj+ó$›$3·��:z‡éVP�����Øãj�������������ýù¡ÖM����ààÖÞÙ�='YŠ �����»e\ ������������ ¯¢'�����Vme;zòÉ�€ÎnÇaú.*�����ì–q5������������€¾Œ«����ÀÕV®“lÜ��èìq˜<c�����ÀW������������è˸�����Övôdæ�@G?’Ü �����ûa\ ������������ “ÚÊ<Éž�����pµ•u’ò�-Çaz�����öø������������@?EK�����8ŒÚÊö=}“�èìó8L¢����ÀþW������������èǸ�����@mežä^{� ³¯ã0݉ �����ûe\ ������������ ãj�����p›$3퀎ž“¬����€ý3®������������ÐAmežäFK�����دÚÊm’²�-Çaz�����öϸ������������@K����`¿j+‹$¿Ë�t6ŒÃ4‰ �����‡a\ ������������ ¢#�����ìOmežd#9�ÐÙ·q˜Ö¢����ÀáW������������èø�����ì×]’Í€Žž“¬����€Ã2®������������ðNµ•ë$W:����À~ÔV–I~“�èl5ÓwQ����à°Œ«������������¼_Ñ�����ö£¶rd#7�ÐÙ—q˜îE����€Ã3®������������ð~K ����`o¶£'3¹€Ž“¬����€ã`\ ������������àýІ�����°{µ•íèÉÔ�@GÏIVã0=‰ �����ÇÁ¸������������À;ÔVIf����ÀnÕVJ’&3�ÐÙí8L¢����Àñ0®������������ð>E?�����Ø­ÚÊ<ɽÌ�@g_ÇaÚˆ �����ÇŸ������������Àû,õ����€Û«Íd�:ú‘d%(�����ãj�������������ïóA?�����ØÚÊ­÷ñ�À,Çaz�����Žq5������������€7ª­,µ����€Ý©­,’ü.1�ÐÙ0Óƒ¨�����pœŒ«������������¼]Ñ�����v£¶2Or//�ÐÙ·q˜Ö¢����Àñ2®������������ðvÆÕ�����`wî’\é �tôœd)(�����7ãj�������������oP[¹Nr£�����ôW[Y%ùMZ� ³å8LO¢����Àq3®������������ð6E7�����诶räNZ� ³/ã0M¢����Àñ3®������������ð6KÝ�����`'î“̤�:z‡éVP�����8 ÆÕ�������������Þ¦è�����}ÕVî’ÜÈ �tôœd)(�����œãj�������������¯T[Y$™é�����ýÔVJ’O’�­Æaú.*�����œãj�������������¯·Ô �����ú©­Ì“ÜK �töÇ8Lž1�����àÄW������������x=ãj�����Ð×vôd¦)�ÐÑc’[A����àôW������������x…ÚÊ<Éf�����ÐGme䃜�@g«q˜žD����€Óc\ ������������àu–z����@µ•E’&'�ÐÙçq˜D����€Ód\ ������������àuŠ^�����ð~µ•y’{)€Î¾ŽÃt'*�����œ.ãj�������������¯³Ô �����ºØ$¹’�èèG’• �����pÚŒ«������������¼Pm¥$™é�����ïS[ÙŽž|”�èl5Ó“¨�����pÚŒ«������������¼ÜR+�����xŸÚÊ"ÉŒ�@gÃ8L“¨�����púŒ«������������¼\Ñ �����Þm“d&#�ÐÑ·q˜Ö‚����Ày0®������������ðµ•ë$7Z����ÀÛÕVî¼o�:{N²�����·q5������������€—):����ÀÛÕV¶£'Ÿ$�:[Ãô$*�����œãj�������������/³Ô �����Þ¦¶2O²‘�èìË8L÷¢����Ày1®������������ð2u����€7ÛŽžÌä�:z‡éVP�����8?ÆÕ�������������þAme©�����¼Mmeäƒ|�@GÏIV‚����Ày2®������������ðÏŒ«����ÀÔVJ’¦�ÐÙí8L¢����Ày2®������������ðÏŠF�����ð:µ•y’l�@gŒÃä�����Θq5������������€_¨­,’\i�����¯¶ñŽ�èìG’[Q����à¼W������������øµ•>�����ð:µ•íèÉGÙ�€Î–ã0=‰ �����ç͸������������À¯}�����àåj+‹$kÉ�€Î>Ãô *�����œ?ãj�������������?Q[¹Nr£�����¼Lmežd“d&�ÐÑ·q˜î����€Ë`\ ������������àç–Ú�����À«¬“ÜH�tôìÿ{�����¸,ÆÕ�������������~ÎÇÙ�����à…j+Û÷êŸô�:[ŽÃô$*�����\ãj��������¯ó ����\†ÚÊ<Éç����€V[¹N²‘ �èl‡i�����.‹q5�������€×yÒ ����.ÆÒ©����àŶÃj3¹�€ŽÇaZ �����—Ǹ������������Àß3®�����/P[ÙŽž|Ð �èèÙÿö�����p¹Œ«������������ü‡ÚÊ<ÉG]�����à×j+%I“ �èl5ÓwQ����à2W������������ø«¢ �����üZmežä^&� ³/ã0yÆ�����€ f\ ������������௖š�����À?Ú$™É�tô˜d-(���ÈÝÛ#�� �IDAT�ð_ìÝÝmI†Ñ‹½—2 3°2Pe`fÀ*nÅŽ`ghÀ›ÁLí è è ¨ ÂÌ`<¶lSd5Õ?ç�LàýúŠõ�Ë&®������������ð-q5�����ø\Ò."ÞÛ�¨è)"š®íOF����€eW������������øB.é9¬vg�����xY.é!"þk� ²}×ö£�����âj�������������ÿ´±�����¼,—tÌ�Tö{×ö¿�����q5������������€oˆ«����À÷=GOÞÙ�¨èsD4�����þ"®������������ð§\RŠˆ;{�����À·rI›ˆØš�¨lÓµýɨ�����À_ÄÕ�������������þ¶±�����|+—´Žˆ¦�*k»¶?�����ø’¸������������ÀßÄÕ�����àe¿EÄm�€Š>vm¿7(�����ð5q5������������€ˆÈ%=DÄÊ�����ðO¹¤ïÌ�Tôƒ�����/W������������øCc�������¸‰M×ö'S�����/W������������øÃÆ�����ð¢ƒY�€Š~íÚ¾7(�����ð=âj������������Àâå’"bµô�����à%]ÛŸ �Tò©kû1����€W������������ˆhl��������ƒzŠˆ‰����€ŸW������������ðx�����üÌG �WÚum4"�����ð3âj������������À¢å’"bµô�������`@ÿëÚþƒ����€sˆ«������������K×,}������8ÃÉH�À…>EÄÎx�����À¹ÄÕ������������€¥Û,}������8ÃÁH�À…š®í…Z����€³‰«������������‹•Kz«­|�������0ˆÿtm/Ò �����¼Š¸������������°d×����€³Í�¼Òï]Ûÿb4�����àµÄÕ������������€%W����€óˆ«�¯ñÅ�����€Kˆ«������������‹”Kz«Ý¹>�������T·éÚþdV�����àâj������������ÀRm\�����Îv0�p¦¶kûÞX�����À¥ÄÕ������������€¥W����€3um²�p†]Ûï �����\C\ ������������Xœ\ÒsXíÎå������ š§ˆhÌ �����\K\ ������������X"¹����Àë}´�ðM×öG�����×W������������%—tï]�������ªùµkûßÌ �����Ô ®������������,ÍÆÅ������ šO]ÛïÌ �����Ô"®������������,¸�����\¦·�𕧈hŒ�����Ô$®������������,F.iï]�������ªØum0%�����PÓ¿­ ������������,ÈÆ±����àb'Ó�_irIQ��€™¹wP�ø‡çÿ“I€[W������������–ăn�����p¹ƒí�€¯<����foõçàfþej������������` rIñα������������`¼ÄÕ������������€¥h\�����®r4�������04q5������������`)6. �����—ëÚ^\ �������œ¸������������0{¹¤+—������������€qW������������– qe�����¨â“������€!‰«������������³–Kºˆ+����@'3�������CW������������æî9¬vçÊ�������������0~âj������������ÀÜm\�����ªéM ������� I\ ������������˜­\Ò:"Þ»0�������������Lƒ¸������������0g×����€ªNæ�������†$®������������ÌÙÎu���� ªƒ9������€!‰«������������³”Kzˆˆ•ë������������Àtˆ«������������sµsY�����¨îdR�������`Hâj������������À\m\�����êêÚþ`R�������`Hâj������������Àìä’šˆ¸sY�������������˜q5������������`ŽW����€Á|6-�������0q5������������`VrIëˆxtU�����ÌÑ´�������ÀPÄÕ������������€¹i\�������������¦I\ ������������˜q5�����ÖÁ¾�������ÀPÄÕ������������€ÙÈ%m"bå¢�����0¨“y������€¡ˆ«������������s²qM�������������˜.q5������������`rI÷±uM�����\ob�������`(âj������������À\4. �������������Ó&®������������ÌÅÎ%����à&Nf�������†"®������������L^.)EÄÊ%����`x]ÛÌ ������� E\ ������������˜ƒÆ������������`úÄÕ������������€IË%ÝGÄÖ����à¦>›�������‚¸������������0u ����ÀÍM������� A\ ������������˜º ������������À<ˆ«������������“•KJ±rA�����¸¹£É������€!ˆ«������������SÖ¸�����¼ q5�������`âj������������À$å’î#bëz�������������0âj������������ÀT5.�����oæ`z�������`âj������������ÀTí\�����ÞÌÉô�������ÀÄÕ������������€ÉÉ%¥ˆX¹�������������Ì‹¸������������0E«����ÀÛéÚ¾7?�������0q5������������`RrIëˆØº�������������̸������������05‹����À(<9�������P›¸������������05âj�����0w��������jW������������&#—ôV[¹�������������Ì“¸������������0%k����Àh�������¨M\ ������������˜„\Ò:"] �����FC\ �������¨N\ ������������˜Š½K������������À¼‰«������������£—KºˆK����À¨œ�������¨M\ ������������˜‚&"î\ �����Fåä�������@mâj������������Àì\ �������������æO\ ������������µ\Ò&"V®�����£sp������� 6q5������������`ìv.�����ãÓµýÉY�������€ÚÄÕ������������€ÑÊ%­#âÑ…�������������`ÄÕ������������€1Û»�����ŒÚGç�������jW������������F)—t×������������€åW������������ƪ‰ˆ;×����€Q;9�������P“¸������������0V;—����€Ñ;8�������P“¸������������0:¹¤MD¬\�������������–E\ ������������£«�����À$ �������¨I\ ������������•\ÒCD<º �����L‚¸�������P•¸������������06;������������€eW������������F#—´Žˆ­‹�����Àdœ �������¨I\ ������������“Æ5�����`:º¶?9�������P“¸������������0 ¹¤ûˆØ¹�������������,—¸������������0›ˆ¸s �����˜œN�������Ô"®������������ŒÅÞ%�������������`ÙÄÕ������������€7—Kj"bå�������������°lâj������������À4®������“Õ;�������P‹¸������������ð¦rI)"]�������������W������������ÞÚÎ�����`ÒNÎ�������Ô"®������������¼™\Ò:"Þ»������LÚÁù�������€ZÄÕ������������€·´·>�������������ðq5������������àMä’Ö±µ>�����LÞÑ ������€ZÄÕ������������€·ÒX�����¦¯k{q5������� q5������������àærI÷±³<�������������ð%q5������������à-<‡Õî,�����³ñÉ)������€ÄÕ������������€·°³:�����ÌÊÉ9������€ÄÕ������������€›Ê%5qgu�������������àkâj������������À­í-�����³Ó;)�������Pƒ¸������������p3¹¤&"V�������������^"®������������ÜÒÞÚ�����0K'g�������jW������������n"—”"bem�����˜¥ƒ³�������5ˆ«������������·²·4�������������ð#âj������������ÀàrI)"- �����³urZ������� q5������������àöV����€ùêÚþà¼�������@ âj������������À rI)"­ �������������üŒ¸������������0´½…����`>;3�������p-q5������������`0¹¤����€E8:3�������p-q5������������`Hu������������€s‰«������������ƒÈ%­#bk]�����XŒƒS�������×W������������†²·,�����,Êɹ������€k‰«������������Õå’Ö±µ,�������������ðâj������������ÀöV����€Åé�������¸–¸������������PU.i[«�������������¯%®������������Ô¶·(�����,ÒÉÙ������€k‰«������������Õä’Ö±µ(�����,O×ög�������®%®������������Ô´·&�������������p)q5������������ Š\Ò:"¶Ö����€Eû¼ô�������€ëˆ«������������µì- �����‹w\ú��������ÀuÄÕ������������€«å’Ö±µ$�������������p q5������������ †½����€ˆ8�������¸†¸������������p•\Ò:"¶V�����ÄÕ�������€k‰«������������×ú`A������������� q5������������àb¹¤�����þt0�������p q5������������à{ë�����_8�������¸†¸������������p‘\RŠˆGë�������������µˆ«������������—Ú[�����øR×ö½A�������€kˆ«������������¯–KJñh9������������� &q5������������à{«�����ßñd�������àRâj������������À«ä’šˆx´�����ðÃ��������—W������������^ko1�������������`âj������������ÀÙrIMD¬,�����üÀÑ8�������À¥ÄÕ������������€×Ø[ �����ø q5�������àbâj������������ÀYrI»ˆXY �������������Џ������������ðS¹¤ûˆØ[ �����8ÃÁH���ÿgïnoÛÈÒ-Œn î2+) ì là`epŠ  š3¸¥ 8HÐÜ MÛµF–HYëc­ øîúA>����ÀK‰«������������‡¸J²p)�����à�{G�������^J\ ������������xRmeù#®�������������ð¦ÄÕ������������€ç¬“,\ �����8ÐΡ�������€—W������������~©¶r–ä³ �����‡Ú¬ú½c�������/%®������������<¥s�������������཈«������������ª­”$Ÿ]�����xkG�������^B\ ������������ø•Îe�������������€÷$®������������ü—ÚJIré2�����À í�������x q5������������à1[W�����~ÃÎñ�������€—W������������þ¦¶ò%ÉW�������������Þ›¸������������ðµ•e’µ‹������¿éÆ������€—W������������î»J²p�����à7‰«�������/"®������������ü[måìG\ �������������à$ÄÕ������������€Ÿº$ ×������^ÁÎ������€—W������������R[¹HòÙ%�����€×°Yõ{‡�������^B\ ������������¸³v�������������àÔÄÕ������������`æj+Ÿ’\Îý�����À«»vR�������àXâj������������Àzö��������������A\ ������������f¬¶Ò%ùà��������������†@\ ������������fª¶²Lre�����àô �������K\ ������������æ«K²°?�������������0âj������������0Cµ•‹$_m�����¼¡½ã�������ÇW�����������€yZÛ�����xc;�������Ž%®������������3S[ù”äÒî�������������ÀЈ«�����������Àü¬m�����¼ƒG�������Ž%®������������3R[é’|°9�����ðÖ6«^\ �������8š¸������������ÌDmå,É•½������������€¡W�����������€ùè’,ì �����¼£96�������p q5������������˜ÚJIòÙÖ�����À;Û;8�������p q5������������˜‡µ������������€¡W�����������€‰«­\%9·3�����p½£�������ÇW�����������€ «­,“t6�������������Æ@\ ������������¦mdac�����àDö�������C\ ������������&ª¶R’|¶/�����pB;Ç�������Ž!®������������Óµ¶-�������������0&âj������������0Aµ•«$ç¶�����Nlo��������àâj������������01µ•e’ή�����À©mVýÎ�������À1ÄÕ������������`zÖIv�������������ÆF\ ������������&¤¶R’|¶)�����0 ·Æ��������%®������������Ó²¶'�����007�������%®������������Q[¹JrnO�������������`¬ÄÕ������������`j+gI:[�����´3 �������p(q5������������˜†u’…-����€Ú�������8”¸������������Œ\m¥$ùhG�������������`ìÄÕ������������`Äj+Ë$[�����Ö�������8”¸������������ŒÛU’6�������������¦@\ ������������Fª¶r‘¤Ù�����¸½�������€C‰«�����������Àx­m����� ÝfÕïŒ�������J\ ������������F¨¶r•äÒv�������������À”ˆ«�����������ÀÈÔV–I:»�����#rk,�������àâj������������0>Û$ »�����#rc,�������àâj������������0"µ•OI>Ú �������������˜"q5������������‰ÚÊ2ÉÚ^�����ÀÝ �������8„¸������������ŒG—䃽�����€W�������"®������������#P[)I¾Ú �������������˜2q5������������‡­�����€Û�������8„¸������������ \m¥KòÁN�����Àˆí�������B\ ������������¬¶r‘¤Ù�������������˜q5������������¶­}�����€±Û¬úÞˆ�������À!ÄÕ������������` j+]’sû��������������s!®������������T[9Kre�����`B¾�������xޏ������������ Ó6ÉÂ6�����À„ìŒ �������<G\ ������������¦¶r•äÒ.�������������À܈«�����������À€ÔVÎ’t6�����&èÆ¨›y=�� �IDAT�������ÀsÄÕ������������`X¶I6�����&H\ �������x–¸������������ Dmå*É¥=�������������€¹W�����������€¨­œ%él�����LØÎ¸�������ÀsÄÕ������������`¶I¶������&lo\�������à9âj������������pbµ•«$—v��������������æN\ ������������N¨¶r–¤³�����0;#�������ÏW�����������€ÓÚ&YØ������˜ºÍªß�������xޏ������������œHm¥Kréþ��������������W�����������€¨­\$in�����Ì̵Á������€§ˆ«�����������ÀilÝ�������������àïÄÕ������������àÕVº$çî�����ÌÐÞè�������ÀSÄÕ������������àÕV.’47�����fjgx�������à)âj������������ðNj+Ë$ßÜ�������������àqâj������������ð~º$Ü�����˜±ã�������OW�����������€wP[ù”ä«[�����3'®�������<I\ ������������ÞXme™dëÎ��������������OW�����������€·wV[¸3�����@vN��������<E\ ������������ÞPmå*ÉG7�����H6«~ï �������ÀSÄÕ������������àÔVÎ’tî �������������pq5������������x;ß’,Ü�����ào®�������øq5������������xµ•.ɹÛ�������������îÜ �8Àµ#��0gI>������x µ•’¤9&�0!ß“ì ¼€ßh����������GW` ®7«¾X ����æ¡¶ò¦�����Ƭ¶²L²5"�LÎm’/>ÔÍfÕߘ`Þ~¶ÿwîw��€#õI. �������xŒ¸������������¼®»°Ú7€ÉÙnV}oV�����������€·õ÷�����������€×Q[ù’ä£sÀ$­Í ���ðjöN �������üЏ������������¼‚ÚÊ™è �LÖŸ›Uï¿���^ÏÎ-������€_W�����������€×ñ-ÉÂ-`’:³�����������¼q5������������øMµ•u’sw€IºÞ¬úÓ���¼*ï[�������€_W�����������€ßP[ù”ä«Àdu¦���x]bö�������ÀSÄÕ������������à…j+Ë$[÷€ÉºÝ¬úÞ¼������������ïG\ ������������^î[’…ûÀdu¦���x3ÿrZ�������à1âj������������𵕻ØÊ¥ÛÀdÝnVýÖ¼����ofï´�������ÀcÄÕ������������àHµ•’¤¹�Lš°�����������À ˆ«�����������Àj+Ë$ßÜ �&í{’µ‰���ÞTï¼�������ÀcÄÕ������������à8waµ…›À¤m7«~ob�����������€÷'®������������ª­\%¹t/�˜¼µ‰���Þœ¸=�������ð(q5������������8@må"É?Ý �&ïÏͪ¿13���À›Û91�������ðq5������������xFme™¤w'�˜…µ™�����������NG\ ������������ž÷-ÉÂ�`ò®7«~gf���€w±wf�������à1âj������������ð„ÚJ—äÒ�`:3���¼‘{�������àWÄÕ������������àj+%Is�˜…ÛͪïM �����������pZâj������������ðˆÚÊ2É7·€ÙèL ���ðîn�������xH\ ������������wV[¸ �ÌÂífÕoM ���ðînœ�������xH\ ������������¨­¬“\º �ÌFgj�����������€aW�����������€{j+Ÿ’|u�˜ïI¾™���à$vÎ�������<$®������������?ÔV.’lÝ�fe½Yõ{“���œ„÷2�������ÀW�����������€¿ÂjËaµ…{�Àl|¿‹«™�����������`8ÄÕ������������à/wa•s·�€YÙnVýÞä����'Ó;=�������ð¸������������³W[¹Jòyîw�€Z�����������`XÄÕ������������˜µÚÊE’Îý�0CnVýá���Njïü�������ÀCâj������������ÌVme™¤÷�À,uf���8­Íªß™��������xH\ �����������€9» «-<�0;nVýÙ�����������†G\ �����������€Yª­l“œ[�fimv���€Á¸5�������pŸ¸������������³S[ù’ä³å`–®7«~gz���€Á¸1�������pŸ¸������������³R[¹Hò‡Õ`¶:Ó����������� —¸������������³Q[Y&é-�³u½Yõ¾ ���� Ë=�������€ûÄÕ������������˜“»˜ÊÂâ�0[é���G\ �������øq5������������f¡¶²Mrnm�˜­ëͪïÍ�����������0lâj������������L^måK’Ï–€Y[Ïý�����µ3 �������pŸ¸������������“V[)Iþ°2�ÌÚífÕ›û����jo�������à>q5������������&«¶r–DH�èf�����������€‘W�����������`’j+Ëaµ……`Ön7«~;÷#���� ÕfÕ÷Æ�������îW�����������`ªî"*çÖ€Ùëæ~������������€1W�����������`rj+ë$- �³w»YõÛ¹���`¾ �������øI\ �����������€I©­|IòÕª�@’Î����Fag&�������à'q5������������&£¶r‘dmQ� ÉífÕo�����������`\ÄÕ������������˜„ÚÊ2IŸdaQ� Iç����£qc*�������à'q5������������FOX �xàv³ê·Ž���0âj�������Àˆ«�����������0wñ”sK�?t�����������0Nâj������������ŒZme䣀n7«~ë����£²3�������ð“¸������������£U[ù’ä«€{:Ç����½É�������€ŸÄÕ������������¥ÚJIò‡õ�€{n7«~ë ������������ã%®�������pœ¥{���œ^må"É7S��t���0J;³�������?‰«�������ç½����N«¶²üV[˜�¸çv³ê·���0>›U¿7������ü?{w{ÛÖñæaøÁïRvRž’L` ·‚áT°L–+øËdT©¨¨ÎrƒMâÉÉÃ3×UÂóãᘀÿ#®�����������ÀÙØ‡ÕZD¼±�ð+�����������8âj������������œ“uD\Y �ø‡‡¡¶G���8kwæ�������B\ �����������€s‘KúV{o0�à+VŽ�����������0 âj������������Œ^.i¿Y �øŠ‡¡¶‡���8{;�������!®�����������ÀØå’~ˆ†�¾aå0����“°1#�������âj������������ŒY.é:"nŒ�|ÃÃP›¿������������&D\ �����������€QÊ%½ˆ�¾aå0����“±5%�������âj������������ŒQ.é2"n…Õ�€ïxj»q ���€ÉW�������þ$®�����������À¨ìÃj-"®,�|ÇÒq������������¦G\ �����������€±Y «�?p7ÔvëH����“²1'�������âj������������ŒI.é&"Þ�ø•���LËPÛΤ�������@ˆ«�����������0¹¤¥°�ðwCmÍ¡������������¦I\ �����������€“Ë%-"â¿-�<ÁÊ‘����&ëδ�������€¸������������'µ«}°�ðwCmÍ¡������������¦K\ �����������€“É%]GÄÚ�À­ �����������`ÚÄÕ������������8‰}X­EÄ…�€'ø8ÔÖ ���`Ò|ÿ�������ÄÕ������������8¾\Ò[a5�à™V�����������0}âj������������U.é2"n…Õ�€gø8Ô¶u0���€ÉÛ™�������W�����������àhöaµW®�<Ãʱ����º°13������� ®�����������À1 «�ÏõûPÛÖÕ������������ú ®�����������ÀQä’n„Õ�€gzŒˆ•£���tCd�������W�����������àðöaµ÷N �<Óz¨mçh����}jW�������ÄÕ������������8,a5�à'=~‰«9�����������@_ÄÕ������������8˜\ÒJX �øI«¡¶ã���tçÞä�������Ð7q5������������"—´ˆˆâº�ÀOxj[;���@—÷������ sâj������������¼º}XíƒË�?iåp������������}W�����������àU «�/t?Ôvãˆ����Ýj¦������€¾‰«�����������ðj„Õ�€W°tD�����������€~‰«�����������ð*rIIX �x¡»¡¶æˆ����]Ûõ~��������è¸������������/–KºŽˆ[—�^hå€����ÝÛô~��������è¸������������/²«µˆ¸pI�à>µ5�����������蛸������������?MX �xE+Ç��� "vŽ��������}W�����������à§«�¯è÷¡¶­ƒ���0Ô¶éþ�������Ð9q5������������žMX �xE±rP������������B\ �����������€çV�^Ùz¨mç¨����ü?Ž�������ýW�����������àÉ„Õ�€Wö0Ô¶rT����þaë �������Ð/q5������������žDX �8�a5������������þF\ �����������€V�à~¨íÆa���øŠ£�������@¿ÄÕ������������ø.a5�à@– ���À7ì�������ú%®�����������À7 «�òi¨­9.������������ÿ$®�����������ÀW «�´t\����¾C˜�������:&®�����������À¿«�ôûPÛÖ�����������øq5������������þFX �8 ÇˆX90����?°s �������è—¸������������V�l=Ôæal����¾k¨mãB�������Ð/q5������������þ$¬�ØÃPÛÊ‘�����������øq5������������„Õ�€cXº2����ÏðàX�������Ð'q5�����������€Î «�Gp7ÔvëÐ����<ÃÖ±������� Oâj������������V�ŽdéÐ������������<…¸�����������@§„Õ�€#ù8Ô¶ql����žië`�������Ð'q5�����������€å’’°�p±th����~‚¸�������tJ\ ����������� 3¹¤EDü!¬�Áz¨mçÐ������������<•¸�����������@Göaµ6�Žàa¨måÐ����ü¤Ã������@ŸÄÕ������������:!¬�ÙÒÁ���xã������@ŸÄÕ������������: ¬�ÙÝPÛ­£�����������ð\âj������������—KZ «�G¶tp����^b¨­9 �������ôinw�����������€éÊ%ÝDÄ{�Gôq¨mãà������������üŒ™«�����������L“°�p±tx����^É£C������@æ6�����������˜–\ÒeD¬…Õ�€X µí���€W²‰ˆwŽ �������}W�����������˜}X­EÄ•]€#{j[;:������������/1s=�����������€iV�Nla�����^ÙÖA������ ?âj������������Kz+¬�œÐ§¡¶f�����^™¸�������thnt�����������€ó–KºÞ‡Õ.L �œÈÒá�����������x 3W�����������8_Âj�ÀÔ¡¶­!����8€£������@ÄÕ������������ÎT.i!¬�œØCD¬����Àì�������ú3·9�����������ÀùÙ‡Õ>˜�8±åP›®�����������x53§�����������8/¹¤•°�0wCm·†����à€6Ž �������ýW�����������8#¹¤›ˆ(6�F`a����i¨mçÀ�������Ðq5�����������€3±«½·�0u¨mk������������^ÛÜE�����������Æ-—t-"®L�ŒÀCD¬ ���À‘ÜEÄ;Ç������€~Ìl �����������0^Âj�À-‡Úv†�����������àÄÕ������������F*—ta5�`Dî†Ún ���À ý������@gÄÕ������������FhVkñÆ>�Àˆ,Œ���À‘m�������ú"®�����������02¹¤Å>¬va�`DêPÛÖ ������������ÒÜu�����������ÆcVû`�`d"bm����N@ð�������:338�����������À8ä’ÖÂj�ÀH-‡ÚvÆ���àÄÕ������� 3sƒ�����������œ^.é&"Þ›�¡»¡¶[Ã������������p âj������������'”KºŒˆWv��Fja����Nhãø�������З™½�����������N#—ôVX �¹:Ô¶5����§2Ô¶s|�������èËÜÞ������������Ç—KºÞ‡Õ.œ�©‡¡¶•q������������8¦™k�����������W.i!¬�œ…‘����‰;C�������@?ÄÕ������������Ž(—´ŒˆÂj�ÀÈ}jkF�����������àØæ.�����������p¹¤›ˆxïÜ�ÀÈ=FÄÒH������������œ‚¸�����������Àå’.#â6"Þ¹5�pVCm[C���0"ÍÿÚ������� 3[�����������N.é­Ç€3r?Ô¶6������������§2wy�����������€ÃÈ%]ïÃjN �œ‰…¡����¡Q������� 3[�����������¼¾\Ò—0Éga5�àŒü>Ô¶1����#ä»�������tD\ �����������à•å’ÖñÁ]€3ò+ƒ�����������pjs ������������¼Ž\ÒeDÜDÄ/N �œ™åPÛÎh����ŒÔÖ0�������Й­�����������^.—ô6"š°�p†> µÝ���€±jW������€Žˆ«�����������¼P.)EÄ&"®Ü�83±4������������c!®�����������ð¹¤EDüî�œ¡ÕPÛÖp����œ{#������@æv�����������ø9¹¤›ˆxï|�À™ºj[���€3±3�������ôA\ �����������à™rI—Ñ"âÊí�€3¶0������������c3³�����������ÀÓå’®#b#¬�œ¹:Ô¶1"����g¤ �������ú ®�����������ðD¹¤ÅþÑÆ7n�œ±‡ˆX�����������€1š[�����������àÇrI_$¿9�0‹¡¶!���83¾i������@'ÄÕ������������¾#—t·ñÎ�€ ø8ÔÖ ���ÀÚ �������ú0³3�����������À×å’®÷4 «�SðKK�����������0fâj������������_‘KZDÄçˆxã>�ÀD,†ÚvÆ���àLù¶�������W�����������ø‡\ÒMD|p�`B> µÝ���€s5Ô¶1�������ôang�����������€ÿ•Kz_¢#WN�LÈcD, �����������À9˜Y �����������àϰZŠˆ°�0A«¡¶­a���˜€#������Àô‰«�����������ÝË%­"∸èý�ÀäÜ µ­Í ���ÀDl �������Ó7·1�����������Ы\ÒeDÜDÄ/~�ÀD- �����������À9™Y �����������èQ.é:"6Âj�À„Õ¡¶­���˜1������`úÄÕ�����������€îä’–ñ9"ÞX�˜¨û¡¶•q���˜˜A������`úæ6�����������z‘KºŒˆuD¼7:�0q �����������pŽfV�����������zKºŽˆ&¬�t µm ���À5£������Àô‰«��š_n�� �IDAT���������“—KZìZ¼²6�0q÷Cm+#�����������p®æ–�����������¦*—tëˆxod�  C���0a;ã������ÀôÍl �����������LQ.é:"š°�Б:Ô¶18����Såû�������ôA\ �����������˜œ\ÒrV»².�Љû¡¶•±�����������8ws �����������S‘KºŒˆ›ˆøÅ¨�@g–��� ñÆØ�������0]3Û�����������SKºŽˆ°�С߇ښá���èÄÖÐ�������0mâj�����������ÀÙË%­"âsD¼±&�Й‡ˆX�����������€©˜[�����������8W¹¤Ëˆ¸ˆwF�:µjÛ���€Žlý�������¦mf_�����������àå’~õp"�й:ÔÖz?����ÝÙš�������¦M\ �����������8;¹¤uDü'".¬�tê>"ÖÆ�����������`jæ�����������ÎE.é:"n"âÊh�@çCm»Þ����@—6f������€i›Ù�����������8¹¤eD|V�ˆ:Ôæi����zµ³<�������LÛܾ�����������À˜å’.#â6"Þ � î‡ÚVÎ������������ÀTÍ, �����������ŒU.é×ˆØ «�üeá����ôl¨­ù�������À´Íí �����������ŒM.é2"Vñ›q��þR‡Ú6Î�����������À”‰«�����������£’KºŽˆÛˆxc�€¿Üµ­œ����þôN�������Ó4³+�����������0¹¤/ÁÏÂj��ÿ²p����øËÆ)�������`ºæ¶�����������N-—t7qe �€ù¯¡6E�����������Ð…™™����������€SÊ%-#¢ «�|ÕÝPÛÚi����ào¶Î�������Ó5·-�����������p ¹¤·qï ��ðU±p����øq5�������˜°™q����������€cË%-#b#¬�ð]«¡6D�����������Е¹¹����������€cÉ%½ˆQ5�€ú4Ô¶v&����øª³�������ÀtÍl �����������C.i±äPX �àû#báF����ðM;§������€éšÛ�����������8¤\ÒeDÜDÄ/ �ð$‹¡6C�����������Ð¥™Ù����������€CÉ%ý[a5�€'û8Ôvë\����ð]ç������€éW�����������^].ém.éKä?qáÂ��OòK§���€ïjÛ9�������L—¸�����������ðªrI_‚ ›ˆøÅe�žeáQh������������z7ïý�����Àÿ°wG·m$k†¾332Pe f`Àj"(Ur� Èx"ØrKE°š ¨ =håñÏÈIu7ŸhðÜý/ £������`?rIˈ¸ˆ+'�øeµ«­9����¼Øw¿›������€yú`W�����������à­rI7±ñÇ �^å¡«íÖé������������ â£������������¯•KºŒˆ;Q5�€W{Šˆµó���À/Û:�������ÌÓ»�����������¯‘KºˆÿV�x“Û®¶���À/ós5�������˜©†�����������~E.)EÄ]D\8�À›|ïj»sB������������øâj�����������À‹ä’qÿåb��oö+g���€W{t:�������˜'q5�����������àå’úðÇ]Dœ»�À^¬»Ú¶N ����¯&®�������3%®�����������üT.i÷qíJ��{ó¥«í›s�����������Àúà&�����������À_É%ÝDÄ£°�À^=DÄ­“���À›mœ�������æé£]����������€]¹¤Ëˆ¸‹ˆ+‡�Ø»uWÛÖY���àmúŸ³å’\�������fH\ �����������øS.i7Q\�à ~ëjÛ8-������������üÜ·�����������rI«ˆØ«�Ì÷®¶;ç���€½úîœ�������0?m �����������§+—´Œˆ>òqíc��p0O±r^������������øgÜ�����������NS.é6"6Âj��·îjÛ:3������������ü³n�����������§%—”"â>"ÎM�pp_ºÚ¾93����D‹ˆ+§������€yW����������€‘KZFÄ]D\Û�à(ºÚnœ������������^îƒ[����������Àüå’n#b#¬�p4O±vn����8¨­ó������Àü|´)�����������ÌW.)EÄ}Dœ›�à¨nºÚ6N����ågp�������0Câj�����������0C¹¤eDÜEĵ}�Žî÷®¶{g�����������€_'®�����������3’KZDÄÍðœÙ�àèþˆˆµ³���ÀQ<:3�������ÌÏ›����������À<ä’V±‰ˆ"¬�ðnV]m[ç���€ÃëjW������€úhT�����������˜¶\ÒeDÜEÄ•)�ÞUíjÛ˜�������������^O\ �����������&*—´¢jŸl�ðî¾wµÝš����Žî!".œ�������æãƒ-����������`zrI7ñ(¬�0 O±2����¼‹­³������À¼|´'�����������LG.)EÄ}Dœ› �`4V]mþ€3������������ì¸�����������L@.é2"î"âÊ^��£R»ÚšI����àÝ4¿G������€yW����������€Ë%-†¨Ú';�ŒÎ÷®¶[³������������Àþˆ«����������À Qµ›á9³�Àè<EÄÚ,����ðî¶&�������€yW����������€‘É%õ‘ŽÛˆ8· �Àh­»ÚÍ����ïnc�������˜q5�����������‰\RŠˆ»ˆ¸° �À¨}éjûf"������������Ø?q5�����������xg¹¤eDÜGÄ•-��Fï¡«íÆL����0[S�������À¼|°'�����������¼>ª–Kê£jÿ+¬�0 O±2����ŒGWÛÆ�������0/í �����������Ç•KZDÄÍðœ9?�Àd¬»ÚÍ������������‡#®�����������G”KºU�˜¤/]mßL����£ôGDœ›�������æA\ �����������Ž —´Žˆ[Ð�`’ºÚnL����£õèw±�������0âj�����������p@¹¤UDÜùC~��“õÉ|������������pâj�����������p�¹¤>ÀqWî �0i«®¶­ ���`Ô6~7 �������ó!®�����������{$ª�0+µ«­™����Fok"�������˜q5�����������؃\Ò2"î"âÚ=�fá{WÛ­)�����������à¸ÄÕ�����������à †¨ZÝøäŽ��³ñ+s���Àd´ˆ(æ������€yW����������€WU�˜µÔÕ¶51������������Ÿ¸�����������üQ5�€Ùû­«mcf����˜”­¹�������`>ÄÕ�����������àDÕ��NÂï]mw¦���€iéjÛä’¬�������3!®�����������#—´ˆˆ›ˆ(î�0k±61������������¼/q5�����������ø ;Qµþ9s#�€Y{êÃj]m[3���Àdýçæ������€éW����������€¹¤eDÜFÄJT �àdÜtµmÌ ����“ö(®�������ó ®�����������ÿUûä��'åKWÛ½É�����������`ÄÕ�����������8i¢j��'í¡«íæÔ�����3ñWÆ������€éW����������à$‰ª�œ¼§ˆH§~����˜‘Gc������À<ˆ«����������pRDÕ��¬ºÚ¶Ž������������ã"®����������ÀIÈ%¥ˆ¸‰ˆk‹�œ¼ßºÚÚ©����ffcP�������˜q5�����������fmˆªÝFÄ•¥�ˆˆ¯]mw����³³5)�������̃¸�����������³”KZGÄZT �€qã ������������0^âj�����������ÌÊU»ˆsË�°ã©ïvµm����æ§«­å’, �������3 ®����������Àäå’qÓÇ2DÕ��ø‰>¬¶q������������7q5�����������&k'ªÖ?g–�à'jWÛ7Ç���€Ù{ò»c�������˜>q5�����������&'—´ŒˆÛˆød=��þÁï]m·Ž����'aW¦������€iW����������`2rI)"n"âÚj��¼ÀCD¬ ������������¦C\ ����������€ÑË%­‡¨Ú…µ��x¡§>¬ÖÕ¶u0����8qen�������˜6q5�����������F)—´ècCTíÜJ��ü¢>¬¶q4����8)æ������€éW����������`TrIË!¨Ö‡Õά�À+Ô®¶o������������Ó#®����������À(ä’ÒU»¶��oð{WÛ­���ÀIj‘L����¼Ñ"".�þåˆxtà˜ÄÕ�����������xW¹¤õUó?�ðV±vE����8M]mâj����À›å’úŸ3þ·KÀ¿ÜwµÝ:pLâj�����������].i9D/ú¨Ú™��؃§þ;fWÛÖ1�����������`ºÄÕ�����������8š\R¢jŸ\�€=ëÃjG�����������€iW����������ààrI}Pí&".\�€¨]mß������������¦O\ ����������€ƒÈ%-#â9ªvæÊ��È×®¶[Ç�����������€yW����������`¯rIiª]»,��ö0|÷������������fB\ ����������€7Ë%-"b=„-Î]�€#xŠˆUWÛÖ±�����������`>ÄÕ�����������xµ\ÒåTûäŠ��Yêj{tt������������˜q5�����������~I.i«!ªváz��¼ƒÏ]m‡�����������€ùW����������àErI—CP­«¹��ïäkWÛ½ã�����������À<‰«����������ðS¹¤ÅSë£j.�À;ûÞÕ¶6������������Ì—¸�����������ÿ!—t9Õú°Ú™ �0Ã÷S������������`ÆÄÕ�����������øS.iëá¹p��Fä©ÿžÚÕ¶5 ������������Ì›¸����������À‰Ë%¥!¨öéÔo�Àh­ºÚ6æ�����������€ùW����������8A¹¤åTëŸsŸ��FìsW[3������������œq5����������€’Kêcj«ˆ¸¶;��ðµ«íÞP������������p:ÄÕ�����������f.—t7CTíÌÞ��LÄ÷®¶µ±������������à´ˆ«����������ÌP.i9ÄÔú¨Ú¹�˜˜‡áû,������������pbÄÕ�����������f"—´눸²+��õÔ§íjÛ������������N¸����������ÀÄå’VCT­Îì �ÀÄ­ºÚ6F�����������€Ó$®����������0A¹¤ËˆXAµs�0Ÿ»Úš1�����������àt‰«����������LD.i9ÄÔnÕ��˜¡/]m÷†�����������€Ó&®����������0b¹¤ÅNPíÂV��ÌÔï]m7Æ������������ÄÕ�����������Ff'¨Ö?×ö�`æ"bmd������������ ÄÕ�����������Æ#—´T�àÄ<EDêjÛ������������q5����������€÷•KZ Aµþ93��'DX ������������øâj�����������G&¨��Zwµmœ������������Ø%®����������p‚j��ðo>wµ}s������������àGâj�����������"¨��ékWÛ½Ó�������������E\ ����������`OrI‹ˆH‚j��ðS¿wµ­������������øq5����������€7‚jÏ1µk·�€Ÿzˆa5������������ào‰«����������ü¢\Òrˆ©%A5��x‘§þûsWÛÖ¹������������€¿#®����������ð¹¤Ë!¦¶Žˆ 7�€V������������^L\ ����������à'rI}Lm5<çî��¯²êjÛ8������������ðâj�����������ƒ\Ò""vƒjgn��oò¹«­9!������������ðRâj����������ÀIË%-‡ZU»>õ{��À}éj»wP������������àWˆ«����������''—”v‚j>��°w_»Únœ������������øUâj����������Àìå’CLí9¨vfu��8˜‡®¶µó������������¯!®����������ÌR.ér'¨vae��8Ї!h ������������ð*âj����������À,ä’–CÄa5¼žY��Žê©ÿ.ÞÕ¶uv������������àµÄÕ����������€ÉÊ%íÆÔ., ��ïFX ������������Ø q5����������`2rI—CH­®-��£Ñ‡Õ6æ�������������ÞJ\ ����������­\Òr'¦Ö?çÖ�€Ñù,¬������������싸����������0¹¤Å1µ ë��À¨ýÖÕvo"������������`_ÄÕ����������€w•Kz©­ÄÔ��`R¾vµÝ™ ������������Ø'q5����������à¨vbjýsåú��0I}Xmm:������������`ßÄÕ����������€ƒS�€ÙyV������������E\ ����������Ø+15��˜µ‡á»>������������ÀAˆ«����������¯–KZì„Ô.ÅÔ��`Öžúïþ]m[3������������‡"®����������¼X.i¹Rë_/\��N‚°������������pâj����������ÀOå’ž#jÏAµs×�€“óVÛ˜������������84q5����������àO¹¤ÅND­½r�� "ÖÂj������������À±ˆ«���������À‰Ê%=‡Ôžcjç> ��À>wµ}s������������àXÄÕ����������àä’–;µþõÊî��À?èÃj÷Ž������������“¸����������ÌL.i±R{Ž©Ù��ø_…Õ������������€÷ ®����������öCHírxÎm ��¼AV[; ������������ðÄÕ����������`"„Ô��€#V������������Þ•¸����������ŒP.i¹PëcjK!5��àÀ"âÆ‘�����������€÷$®����������ï,—ôO»ÜyÎì��QVK]m[G������������Þ“¸����������I.i9DÔÒQëß_¸?��ð΄Õ������������€ÑW���������€=Ë%-†xÚs@­½rg��`„ž"b-¬������������Œ…¸����������¼ÒO"jýsæ¦��ÀôaµÔÕ¶1������������0âj����������ðrIË!ž–"b!¢��Ì€°������������0Jâj����������0È%ýOëß_¹��0C+a5������������`ŒÄÕ����������8)¹¤çhÚ!µ3Ÿ��àD|îjkÆ������������ÆH\ ���������€ÙÉ%í†Óž_—qnm��àÄõaµûS?������������0^âj����������LN.éò/âiϯg��øKÂj������������À艫���������0:âi���{W…Õ������������€)W���������à¨rIˈXîÄÒzix½²��ÀÞ}íj»uV������������` ÄÕ����������Ø‹\Òn,írˆ§íþ›p��Àñõaµµ»������������S!®���������ÀßÊ%¥ÿþü~9<1ÄÓÎ\��`t„Õ������������€ÉW���������8!¹¤ÅC{Ö¿_üä½`��Àt «����������Àÿ±ww·iF?4ú~C03Xeà!Pp£¬ÊÀ@b£ JŒ2Pg°àZ†eYšÅ¿®®s�AÄ÷ò†W�UW���������¨Ðo¿/£hñ*’¶3¼x¾ˆˆ_ì ��ÐŒ­°������������P+q5���������€3x#†ö—á×^¿w÷ü¿v��à¶ïü×������������¨‚¸�������À~®~û}({|âûó�.å½ §±ˆˆ_Ü��€ ùX-§òd������������� Vâj��������ûùODüºÇ'öy/�����|–°������������0 ������������ jÂj������������Àlˆ«������������@½„Õ������������€YW������������€:±V������������æD\ �������������ê³ « 9•ï¶������������æD\ ��¦S¶ü�� �IDAT�����������êòWXmc7������������`nÄÕ������������� Âj������������À¬‰«������������@„Õ������������€ÙW������������€éV������������š ®�������������Ó&¬������������4C\ �������������¦KX ������������hЏ�������������L“°������������Ðq5�������������˜a5������������ Iâj�������������0-Âj������������@³ÄÕ�������������`ZVÂj������������@«ÄÕ�������������`:®s*ßì������������´J\ �������������¦aV»³������������Ð2q5�������������¸<a5������������ y!®�������������'¬������������ðL\ �������������.GX ������������àq5�������������¸ a5������������€WÄÕ�������������à¼Fa5������������€·õî�������������g³ « 9•“������������ü[ç&�������������pÂj�������������?!®�������������§'¬������������ðâj�������������pZÂj�������������$®�������������§#¬������������°q5�������������8 a5������������€=‰«������������Àñ «������������|‚¸�������������—°������������À'‰«������������Àñ«������������@\ �������������ŽCX ������������à@âj�������������p8a5������������€#W������������€Ãl#b!¬������������p8q5�������������ø¼]XmÈ©<¹!������������ÀáÄÕ�������������às„Õ�������������ŽL\ �������������ö'¬������������pâj�������������°a5������������€W������������€{V������������8Þm������������àCÖ9••S������������œNç¶�������������ðSÂj�������������g ®�������������?&¬������������p&âj�������������ð>a5������������€3W������������€·Ý«������������œWïÞ�������������ð/×9•;g������������8¯Î½������������à„Õ�������������.D\ �������������þ&¬������������pA½ã������������@Œ1äT6N������������p9Û������������Ð8a5������������€‰W������������ eÂj�������������"®������������@«¶q%¬������������0½-�������������hÐ.¬6äTžŒ������������0-�������������hŒ°������������ÀD‰«������������Ð’µ°������������Àtõ¶������������ ëœÊÊØ�������������ÓÕÙ������������€«������������T@\ ������������€¹»V������������¨ƒ¸�������������s¶ «ÝY������������ ½�������������˜¡1"V9•oÆ������������¨‡¸�������������s³ « 9•e������������êÒÙ ������������€yV������������¨Wo;�������������fbûV{2(������������@:»������������0Âj�������������3Ð������������€Ê­s*+#������������Ô¯³!�������������V������������˜q5�������������ju-¬������������0/âj�������������ÔhV»³������������À¼ôö������������ "cD 9•Ñ�������������æ§³)�������������•V������������˜9q5�������������j°ˆ…°������������À¼‰«������������0u1äTž,������������0o½}������������˜°uNee ������������€6tv������������`¢¾ «������������´¥·7�������������tS¹3 ������������@[ÄÕ�������������˜’1"–9•b������������€öˆ«������������0»°ÚSÙX������������ MÝ������������˜€mD,„Õ�������������Ú&®������������À¥ÝGÄSy²������������@ÛúÖ�������������ÀE­s*+�������������°ÓMà;�������������Цa5�������������^ê]������������€3#âKNåÎá������������xI\ ������������€sÚ…Õ†œÊÆÕ������������x­s�������������ÎdWÂj�������������¼G\ ������������€s¸ˆ!§òݵ������������xOï2�������������œØ:§²rd�������������~¦s!�������������NèZX ������������€ê] ������������€#b™S)Ž ������������ÀGu.������������À‘=FÄ ¬������������À¾z������������àˆ¶Ïaµ'G������������`_âj�������������Ë:§²rM�������������>«s9�������������ŽàFX ������������€Cõ.������������ÀƈXåT¾9"�������������‡W������������à³#b™SÙ¸ �������������Ç ®������������Àgl#bÈ©<¹�������������Ç"®������������À¾Ö9••«������������pl‹������������°‡a5�������������N¥wY�������������>`ŒˆeN¥8�������������§Ò¹,�������������?±ˆAX ������������€Së]������������€xˆˆeNåÉ‘�������������85q5�������������Þó5§òÅu�������������8q5�������������^#âKNåÎe�������������8'q5�������������^Ú…Õ†œÊÆU�������������8·ÎÅ������������x¶ˆ…°�������������—Ò»<�������������±Î©¬������������€Kê\������������ y×Âj�������������LAo������������€f1äT6~�������������LAg������������€&m#b!¬������������À”ôÖ�������������hÎ:§²2;�������������SÓY������������ )×Âj�������������LUo������������€&Œ1äT6æ������������`ª:Ë�������������ÌÞ6"Âj�������������L]o!������������€YûšSùbb�������������j ®������������0OcD|É©ÜÙ������������€Zˆ«������������ÌÏcD,s*Û������������P“ÎZ�������������³rWÂj�������������Ô¨·������������Àl¤œÊ­9������������¨•¸������������@ýƈXåT¾Ù������������€š‰«������������ÔmËœÊw;������������P;q5������������€z­s*+û������������0%������������ª3Fĵ°�������������sÓ[������������ *±Ì©lÌ������������ÀÜt������������¨Æ}D\ «������������0W½e������������ªp“SùÃT�������������Ì™¸������������À´1äT6v������������`î: ������������LÖCD,„Õ�������������hEoi������������€IJ9•[Ó�������������Ðq5������������€i#b™S)v������������ 5Å������������&ã!"Âj�������������´ª·<������������À$¤œÊ­)�������������h™¸������������Àe±Ì©;�������������к®õ�������������\ÐCD,„Õ�������������àO½;�������������\DÊ©Ü:=�������������üM\ ������������à¼ÆˆXæTŠ»������������À?uî������������p6±V������������€·õî������������p)§rëÔ�������������ð>q5������������€Ó#b™S)î �������������?Ö¹������������ÀÉÜGÄBX �������������>¦w'������������€“¸É©üá´�������������ðqâj�������������ÇõËœÊÆ]������������`?{������������Í:"®„Õ�������������àszw������������8Øÿcï^k[;Â( /Yr ‚!ìaà�Éa03ˆØ ²TVÝVmOOsñe_žGßšÿo²®¥m�������������¾N\ ������������à{öI~ÔÒî�������������ß#®������������ðu¥–Ö¹�������������\†¸������������ÀçõI~ÔÒšÛ������������Àå,Ü������������àS^“<«������������Àå-Ý������������àCú$]-mã\�������������pâj�������������ÿoŸdUK{s+�������������¸q5������������€_{ª¥­Ý�������������®O\ ������������àçú$?jiÍ}�������������à6î ������������ð/¯I„Õ�������������à¶–î ������������ð§>ɺ–¶u�������������¸=q5������������€ßí“ü¨¥Ü�������������îC\ ������������ )µ´Î�������������à¾ÄÕ������������€9;&ùQK{ó �������������àþ6�������������fê)É£°������������� ÇÒ������������ÀÌôI~ÔÒšá������������`Xö�������������fä5Ƀ°������������� ÓÒ.������������À ôIVµ´c������������Àp-l������������LÜ.É£°������������� ßÒF������������ÀDõIºZÚÆÀ�������������0âj������������Àí“ü¨¥¬ �������������ã!®������������LM©¥uV������������€ñW������������¦bŸdUK{³(�������������Œ“¸������������0¥–ÖY�������������ÆM\ ������������³}’U-íÍŠ�������������0~âj������������ÀX=ÕÒÖÖ������������€éW������������Ææ˜dUKk–������������€iYØ������������‘§$Âj�������������0MK»������������#pL²U������������€i[Ø������������¸§$Âj�������������0}K������������uL²U������������€ùXØ������������ ’äQX �������������æeio������������`@öIVµ´7£�������������Àüˆ«������������CQji5�������������`¾ÄÕ������������€{Û'YÕÒÞ,�������������ó&®������������ÜS©¥u��������������"®������������ÜÉ.ɪ–v0��������������ðq5������������à–ú$]-mãê�������������À?‰«������������·²K²ª¥\�������������øq5������������àÚúsTíÅ¥������������€_Y¸������������pE¯I„Õ�������������€Xº������������pÇ$«ZZs\�������������à£.������������\ØS’Ga5�������������à³–.������������\È>ɪ–öæ �������������ÀWˆ«������������ßÕ'ÙÔÒ:—�������������¾C\ ������������øŽ]’U-íàŠ�������������Àw‰«������������_ÑŸ£j/®�������������\ÊÂ%�����������€OzJò ¬�������������\ÚÒE�����������€Ú'Y×Òšƒ�������������× ®������������üŸ>ɦ–Ö¹�������������pMâj������������À¯ì’¬jiW�������������®M\ ������������ø™c’u-íÅu�������������€[Y¸4������������ðOI…Õ�������������€[[º8������������p¶K²®¥½9�������������pâj������������@Ÿ¤«¥mf �������������à®ÄÕ������������`Þž“¬kiïs?�������������pâj������������0OûsT­Ù������������� q5������������˜—>IWKÛØ�������������q5������������˜ç$ëZÚ»Í������������€!W�����������€éÛŸ£jÍÖ�������������À‰«�����������ÀtõIºZÚÆÆ�������������Àˆ«�����������À4='Y×ÒÞí �������������Œ…¸������������LËþUkv�������������ÆF\ ������������¦¡OÒÕÒ6ö�������������Æja9������������½§$Âj�������������ÀØ--������������£µK²®¥½™�������������˜q5������������Ÿã9ªöb;�������������`JÄÕ������������`<ú$›Ó«¥½Û �������������˜q5������������‡×$ëZÚÁ^�������������ÀT‰«�����������À°íÏQµf'�������������`êÄÕ������������`˜úsTmk�������������`.–�����������€Á)I„Õ�������������€¹YZ������������ã5ɺ–v0 �������������0Gâj������������pûsT­Ù�������������˜3q5������������¸ŸþUÛÚ�������������� Y¸������������ÜEIò ¬�������������ð—¥[������������ÀM='éjig�������������ø;q5������������¸Ý9ªÖÜ�������������àçÄÕ������������ຎIÖµ´w�������������ø5q5������������¸Ž>ɦ–Ö¹/�������������ÀLj«�����������Àå•sXíÝm�������������>N\ ������������.ç9IWK;¸)�������������À牫�����������À÷íÎQµæ–��������������_'®������������_wL²U�������������¸ q5������������ø¼ST­«¥mÝ�������������àrÄÕ������������àãú$›Ó«¥½»�������������Àe‰«�����������ÀÇ<%éDÕ�����.ÜQ¥��ÍIDAT���������®G\ ������������~íùU;¸�������������Àu‰«�����������ÀÏí’¬DÕ��������������nG\ ������������þîUëjiÍ]��������������nK\ ������������~wL²U�������������¸q5������������æîUëjiÛ¹�������������àÞÄÕ������������˜«>ÉZT �������������`8ÄÕ������������˜›STmszµ´wë������������� ‡¸������������s!ª�������������0pâj������������L¨�������������ÀHˆ«�����������0eÏIºZÚÁÊ��������������Ã'®�����������À‰ª�������������Œ¸������������S"ª�������������0bâj������������L¨�������������Àˆ«�����������0f¢j��������������"®�����������Àí’¬DÕ��������������¦E\ �����������€19EÕºZZ³�������������Àôˆ«�����������0¢j��������������3 ®�����������À‰ª�������������̈¸������������Côœd+ª�������������0/âj������������ É)ªÖÕÒV�������������˜q5������������†@T ��������������q5������������îJT �������������€?‰«�����������p¢j��������������ü‹¸������������·$ª�������������ÀW�����������àÚú$›Ó«¥½»6��������������ÿE\ �����������€kU�������������àSÄÕ������������¸4Q5��������������¾D\ �����������€KU�������������à[ÄÕ������������ø.Q5��������������.B\ �����������€¯:&éji[�������������àÄÕ������������ø,Q5��������������®B\ �����������€U�������������àªÄÕ������������ø?»sT­¹��������������×$®�����������ÀU�������������à¦ÄÕ������������ø§ç$›ZÚ›Ë��������������pKâj������������üáUëji�������������àÄÕ������������æ­O²9½ZÚûÜ�������������À}‰«�����������ÌÓ1ÉVT �������������€!W�����������˜—ST­«¥mí�������������ÀЈ«�����������ÌÃ.ɦ–öbo��������������†J\ �����������`Úž“lkiÍÎ�������������� ¸�����������ÀôôI^’tµ´ƒ}������������� q5�����������€é8EÕ6§WK{·+��������������c#®�����������0~Ç$]-mkK��������������ÆL\ �����������`¼vç¨Z³!��������������S ®�����������0>Ïç¨ÚÁv��������������L‰¸�����������À8ôI6§WK{·��������������S$®�����������0lûsPmk'��������������¦N\ �����������`˜^ÏQµf��������������æB\ �����������`8ú$ÛsTí`��������������æF\ �����������àþŽIº$/µ´w{��������������0Wâj������������÷óšdSKk6���������������q5�����������€[ë“lÏQµƒë�������������À_ÄÕ������������n㘤KòRK{ws��������������ø7q5�����������€ëzM²©¥5w�������������€_W��à·öîõ¶u Àè.}ØA àÓÒÝÜÔÜÁ€çR3º™äŽOâ‡k mÿ‚½äO‚��������¸¿k ªEÄ)§2˜/��������������ÜF\ �����������à~Î-¨v2S��������������øsâj������������?sˆ."Þr*½Y�������������À÷‰«�����������|ÏÿªaµœÊd†��������������ðsâj������������æWDœr*ÅÜ��������������à¾ÄÕ������������þ¿1"ÞZTm2/��������������x q5�����������€¯½· ZgF��������������ðxâj������������7Ö Z‹ª f��������������Ï#®�����������ð—÷TëÌ��������������^C\ �����������8²±ÕZTmð$��������������Àk‰«�����������Gô+"ºœJgû��������������°âj�����������ÀQŒñ§œÊdë��������������°>âj�����������Àž]#¢kAµbÓ��������������°nâj�����������À]"â­†Õr*“ �������������À6ˆ«�����������{qˆSªåT[�������������€íW�����������¶î½FÕr*M�������������À¶‰«�����������[4FÄ[Dt9•Á�������������`ÄÕ�����������€­¸Ö˜ZªåTz[�������������€ýW�����������Öî½FÕr*'›�������������€}W�����������ÖhŒˆ·Ul��������������ŽA\ �����������X‹kDœêÉ©ô¶��������������Ç#®�����������¼Ú¯ˆèr*M��������������À±‰«�����������¯p‰ˆ·U›l���������������q5�����������à‰ÆEPm0x��������������à#q5�����������à‘®qª'§Ò›4��������������ðOÄÕ�����������€{«Aµ®žœJgº��������������À­ÄÕ�����������€{yoAµ“‰��������������ß!®�����������üÄ9"N-ª6™$��������������ðâj�����������ÀŸº,‚jƒé��������������÷"®�����������ÜBP ��������������x8q5�����������à+c©Õ¨ZN¥7%��������������àÑÄÕ�����������€%A5��������������àeÄÕ������������A5��������������`ÄÕ�����������à˜Õ��������������€ÕW����������€ãT��������������VM\ �����������öMP ��������������Ø q5�����������ØA5��������������`“ÄÕ�����������`.QÕ��������������€-W����������€íªAµSDt9•Á�������������€­W����������€m9טš ��������������°Gâj�����������°~ï‹ Úd_��������������À^‰«����������Àú\ç˜ZDA5��������������à(ÄÕ�����������`ÆEL­³��������������àˆÄÕ�����������àu.-¨ÖåTz{���������������ŽN\ �����������žë="J ª f��������������ð_âj�����������ðX×Rk§äT&ó��������������øœ¸�����������Üߥ†Ô"â”SéÍ��������������à6âj�����������pï-¨ÖåT3��������������øsâj�����������ð=ã"¦Ö™!��������������Àω«����������ÀíÎ5¦V£j9•ÞÜ���������������îK\ �����������¾vcjõΩLf��������������ð8âj�����������ðw—T«1µÞl���������������žG\ ����������€£#¢´ ZÉ©LG��������������À«ˆ«����������pDçEL­÷���������������¬ƒ¸�����������G0.bj��������������¬“¸�����������{t­!µEPm°e��������������€õW����������`/ÎsP-§ÒÛ*��������������Àöˆ«����������°U—S+9•Î��������������¶O\ ����������€­ç˜ZDt9•Éæ���������������öE\ ����������€µºÎ!µzçT›��������������Ø7q5�����������ÖbŽ©•Sëm��������������àXÄÕ�����������x¥s‹©ubj���������������ˆ«����������ðLsL­äTŠÉ��������������°$®����������À#‰©��������������p3q5�����������îIL ��������������€oW����������à»®sH­ÅÔz“��������������à'ÄÕ�����������¸Õ½˜���������������"®����������ÀWÆ9¤ÖbjƒI��������������ðHâj�����������ÌÎÑ/bj“É���������������ðLâj�����������Çtmµ¾…ÔŠç���������������€WW����������8†ËR«wN¥·w���������������ÖF\ ����������`ŸÎsH­Þ9•Éž��������������X;q5����������€í»´ˆÚRëí��������������€-W����������Ø–ëQk§Ï©Lv��������������Àˆ«����������¬Û¹ÅÔ~Õr*ƒ}��������������°Wâj�����������ëqY„ÔúœJ±���������������ŽD\ ����������à5ÆEH­´˜Úd���������������™¸����������Àã ©��������������À ÄÕ�����������îKH ���������������¾I\ ����������àû„Ô���������������àŽÄÕ�����������ns‰ˆAH ���������������G\ ����������à!µQ+f���������������'®����������ÙµÔJ»‡œJï‰���������������€×W����������Žâ2Ôæ˜ZNe²}���������������Xq5����������`oÆe@­¾Î©ô¶ ���������������ë'®����������lÕµÅÓúSës*Å6��������������`»ÄÕ����������€-8·€Z=¥…Ô&›��������������€}W����������ÖäcDmÈ© 6���������������Ç ®����������<Û5"úv†ùQ���������������ÄÕ����������€G[<­´ûwH-§2™8���������������ðq5����������à§ÎËxZ½s*½©���������������J\ ����������¸Å%"¦ˆ(ËZNe2=���������������à^ÄÕ����������€Ù2 Vï¾FÔr*ƒ ���������������Ï ®����������Ç" ���������������¬–¸����������ìÏyNP���������������6C\ ����������¶çòI<mÊ©»���������������¶L\ ����������ÖgŒˆá“ÓçT&û���������������öJ\ ����������žï5’Ö¼ÅÓ���������������€#W���������€û#bXDÓªR¿äTŠY���������������|M\ ����������n÷Y8­ŸßçT&³���������������ø>q5����������øË¹ÝÃg5á4���������������€ÇW���������`ï>FÓª2–S<����������������ë ®���������À]"bj?÷J«ïûöºÏ©L6 ���������������°-âj����������¬ÁuF[FÒ†v~¿Î© ¶���������������°_âj����������<Âyñ=ûL‹±´)§Ò›>����������������3q5����������þÉeF›Z(m¶Œ¦ ¥���������������ðcâj����������û¶Œ£UC;_¾Ï© ž ����������������^¡ÆÕz“`åü®���€c9Û7���|êc->û,§RŒ�����žjò·o�������°+õÿö’•Àøvà¹"âßµJǶ½·“����IEND®B`‚�������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/img/release-schedule.plantuml�����������������������������������������������������0000664�0000000�0000000�00000000565�15030617045�0021346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@startgantt title HDF4 Release Schedule projectscale monthly Project starts 2023-01-01 [4.2] starts 2022-01-01 and lasts 61 weeks [4.2.16] happens 2023-02-28 [4.2.16-2] happens 2023-06-30 [4.2.16-2] displays on same row as [4.2.16] [4.2] is colored in #2EDB54 [4.3] starts 2024-02-28 and lasts 44 weeks [4.3.0] happens 2024-02-28 [4.3] is colored in #3385FF @endgantt �������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doc/img/release-schedule.png����������������������������������������������������������0000775�0000000�0000000�00000027537�15030617045�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�� ���¥���~æí—���*tEXtcopyleft�Generated by https://plantuml.comvÎÊ��ªiTXtplantuml����xœµ”QoÚ0Çßý)NÚ <$"NŠPŸªXU„šÒ—‰7¹×äÙß~”UUµ&ÌŠdå|þùþŸ|ãXY^+b†‹ qÌ9‘5wãiX ri¶Á¼öÑvÄË lˆ•5?1c—)/ª4Ä›b߸8á`9q0ˆüךØIÏ»ÄïI(Wg å«BE9Êùà0‚â‹û0Œ†+بªB:•-9ê Ñù–9 âAWb®]U¨½CàT‰`Í”ƒßeü;qÚAf c1MðENÆ·WI…ÿËêøÜêäÕ•?V'Ég¬>ÃÁ_¶$]¬>i|sq<ºšN[[*ù€xƒ”ž[!…Ÿ—ólÑ:í[( ›Ö £èYÉÞ’^ÈìÈWSVÚ?+¬Kì‹Þ·Å œ©m†Mÿ±ÕÏ5ûÝ}q¯¶ jjò®¡ùë=ÎûNNA˜ÐV[C%‹û§ù1 î §•áCò0 n5CŠÖ‹‚§¹ãUì·f&×´¾†åã4‰™¢u­Öþ $ñÕøìÞ¯¥â|74¤Âñ¢c��-:IDATx^í pTÅöÆ'†„„H ,!@ (AóL ¬BD„ðPQylÁžZøGP@Dp)Ñ*ñY*P®( ¢lO%ÈòdPT4ˆ"K€¶ôÿ0Ú;Ý}ïL’¹„À÷«ÖºÓËùúÞî{滓 ñ����� áQ+������L����€˜$�����0I�����`’����� À$����€I����0�“����`�& ����À�L����€˜$�����0I�€Ráñ2jÔ(µ¡\¬³ Jm0,Q�€Kt'�Ü@TÞbù˜¨P¡Blll“&MF½gÏÙ_v°"[‰³gÏÞ|óÍ\ïðflV¯^½!C†ìß¿_ígÂoðKIaaáØ±c4h@g‘””ôÏþsË–-j?`L�WÝÉ��7Ðß#&)>>¾E‹õë×ç—ä–Ö®]«theAF#&L˜À}<ŽoÆÖ8ä0øåm·Ý¦ö3á7ø¥„¼χ.Wzzz\\øá‡j?`L�WÝÉ��7Ðß#&IvøßÿþW·n]ª¡ÿŸ<yRï °fÍšÐÐÐ{ï½×¹›ÐâÜu×]ô²bÅŠ²CAAANNBS»víaÆåççÇ:ôܼyó­·ÞJ•*T à7ž4iÒ™3g¸uÛ¶m]ºt©Zµ*͹F:tøê«¯üÆTˆŽŽ¦ÉôìÙSÖè/¿ü"_~÷Ýw}úô¡ ¤R­Zµ®]»r=ŸÅÃ?üÈ#ÄÄÄ}ê©§ä(ç L›6&L3á…Cq“rqœ_:«��.=0I�”Ê{¤ðg’ˆE‹q%:¢w=z4))©^½z‡vèÆ(Ø$Ýxã²C§N¨&<<<55522’Ž322ŠŠŠô±=.\xÍ5×4lذyóæ <0;;›’g¢—ä]ÒÒÒ5jD=_|ñE¿1È©P+I¼ÿþû»wïVZׯ_ÏÃÉ¥Q(êæñ½ÔuêÔ!ÇÃ/¿þúknu˜Àܹs¹3ŠŠâ—Ö°v®Hyé �(`’�(3ø=ÒˆµƒÕÜ?~œ+'L˜`{0€|ÆÊ•+q¸ƒõÇmt¼jÕ*nýꫯ¨&$$dÓ¦MôrëÖ­ÜñâÅr,wî¹ÿþƒJÑîÝ»SÙ8~Iæ€^öë×_RÏ;w 1ÆŒíLݺu{ì±cÇŽqkÇŽ=ÞŸWþðÃ\óí·ßò÷OLL,((ÈËËã—“&Mþ&@†ŽÉÕôBÜj k犬/U��eL�e¿ Z¿QDÇ\ií`57ô~Ï•O>ù¤1B+ïw’,X@õãÇ·‹£À¬dff=z”[§OŸ®6{™8q¢ËÁ{þñÇ÷Ýw¹¢ *ȦÐÐPVᯈ:uêtêÔ‰ Ê¡C‡üÆÔyÿý÷iòüs7¦W¯^ÜÄó :ÔwÄy¸ç¿ÿýo:>wî¿=z´ð7ˆˆ:6lÇ¡nµ†5º"女 � L€I ÌàwA«wåïÇmŸ|ò WΛ7ÏØ! Eõ•*UŠòÂÝÂÂÂèXéÉÈ8………3gÎä—C† áV~ÿ&7cµbõ´ŽõÛ3##ƒ;7jÔ¨•æIú7ÞÈÊÊ¢¦k®¹†êÛ·oï7¦dt6lØ’’âñþ+ýš$ûb7@LÒÈ‘#é8??ß¶X*�€2& €2CyËþL’üâvBBBAAÞAÂ&Ɉғá&§k×®ïv^^ž¸ø“ bÅŠÜáÌ™3Ë–-ûóÏ?•±Î=É¥QÓ¿þõ/:>}úô­·ÞʹçÊ•+ÉÙðqÿþý=^Wç7¦Ùù£4qñ'zÕ«Wç—üã¶jÕªíØ±ƒk¶mÛÆ,a´/Îà·%''z¡îÌ=«T©BÇ}úô¡ã>úȶX*�€2Áœ1�—�å-Sؘ¤øøø–-[&&&òËØØØ5kÖØE0â·›Òaݺu\óÀp §8$$ä†nHKKãdø =ÊX‡žì'®¹æšÔÔÔš5k’wá±<ªV­Ú¤I“””N/ÓÓÓýÆTà€µjÕ¢±ò»áÇçVë·)Îu×]gU÷ØØá8Ù³gsgò¯¤X±bE~Éï¼óNHþŒ “5¬òÒA�P&À$Pf(ï‘ÂÆ$y¼ê¸é¦›}ôQë/méŒøí¦wèÖ­›Çûƒ*þ$£  `ܸq 6äŸÙ5kÖ,''çÈ‘#úX‡ž?ýôS»víÂÃÃk×®ýä“OŽ9’Çò@2dì ÈE‘…êÓ§Ï®]»üÆTxöÙg;wîL¶’l ‘Ûxúé§OŸ>-;ð?@.Šÿ €ÌÌL®WÎ"ð“"¦N}ÿý÷ÿßÿýŸõ¤èÚ¶mK£h&òG¥%S�\z`’����� À$����€I����0�“����`�& ����À�L����€˜$�����0I�����`’����� À$����€I����0�“����`�& ����À�L����€O.�����ÐðЪq�€²�é�pù�“ÌôéÓ§iÓ¦‘‘‘)))Ï=÷ܹsçdëòåËÓÓÓÛ´iÓ¸qãgžy&Q½{÷¾é¦›Ú¶mCc,X G A:Fr‹(QFbÖ¬Yãñ²páBk=� L0‘——Go¾ù&'‘œœnúöÛoÃÃÃLÇóçϧ¦iÓ¦ùEÇ›7o¼ç<žÐÐPî €¤#`Ä!·”,#1™™™\“ŒÀ$3S§NåƒcÇŽq©W¯× 0€^Κ5‹Ž÷íÛGÇÕ«W?sæŒó(ùÑQAA7-Y²„k� #¹¥d‰Ø°aC§N¸& I~(,,ä$Ò°aC®ILL¤—|ðŸ<y’[·nÝê<J2gήÏÏÏWš�@:Îè¹¥Äé®»îZ±b×Ã$#0IÀ«V­â$2cÆ ® —9åܹsܪ|,¤bÒÒÒ¨²Y³füñ‡µ�é8£ç–’e¤-[¶dddï7äp�`’€gÏžmß¾=eììlY&sJQQ§˜Å‹;’L›6šRSSùóp�¬ Œ¹¥d©W¯^l¤¸?L0“l!Ó¯_¿:uê|þùçÖúúõë{.~¸-?ĦÇ2çQ’#GŽð¯¿þZmW=HGÀ»ÜR‚Œ´}ûö-Zð1÷‡IF`’€™ƒvèÐ!++ëðáÃ\sçwòAÿþý=¾_“¬V­ÚéÓ§G?žòóó9+-[¶Œk� #¹¥iæÌ™iii·zát”’’2dÈî€& ˜¡‡³øøøžjÔ¨ÁM›6m ã_¸]°`åù+$£¢¢¢ø{H³gϦ!±±±GŽá&�$HGÀˆCn)YF’°IÂ'IÀL0ÉÃJÕªUeëÒ¥K›6mÚ¦M›äääÉ“'ù5pàÀ&MšÜ|óÍ111;vܰaƒŒ€éQ3K©3’ðº«V­Zq}£F¬ÿ %� L�à2é�pù�“�¸Œ@:�\>À$�.#Ž��—0I�€Ë¤#�ÀåÓ�����<¹î?º¹$áRX·UÜŽ/Ü—p;¾¸"$ÜŽ/Ü—p;¾(ÿ®gÜ–p;¾p_ÂíøâŠp;¾p_ÂíøÂ+á¹42jU0p)¬‚Û*nÇîK¸_\nÇîK¸_” Wƒ3nK¸_¸/áv|qEH¸_¸/áv|á•ð8ÈìÚµëÑG­X±âK/½¤¶]âÔ©SùÉ‹ÜrË-Jb̘1ÖÖBÂ;vŒâx<ž¬¬,Y?wîÜÈÈÈçŸÞÒ7PrrrE}ò‡¦ø7nTêí(**jÔ¨²ñtôøA?)E"XË*ÑOAøS1^ ŒLq—Ã;‰3fÐBŒ?¾{÷îï¼óŽÚ0vñ…÷¯rNŸ>ý±Ç›8qâÃ?<gε‡—£GÊ%ψ.!÷ÒØ±c¹†v8].åˆßz#7nðàÁŸ~ú©Ò§Xèç8ºDPÒ³dÉ’àÞ¼ÈH%@?ÆYÈx5ì°“Å_;ì$‘$z|줔ël’ˆ={ö¾oì0J(‘çÍ›gi¼€³:‡¥>ÑÑÑÉÉÉûöíãúûzõê>]FWÔ'ÿòË/÷ë×ïþûïWê8{ö¬0¦ø"Ø'¥KgRbôøŒƒŠC“; Q¢å0b” |G7¥ :ÎËË+Ù[cŒÏP¾›9s¦|IçòÞ{ïYÚ/à÷¢%hTTTTJJ ÿžô2ˆIøÎŠÒS—.]æÏŸïÛ¥%$~¯@ %JŸŽ Ü›WÕç_‚[àêÌHÂQÈ¡IÇA¢ËaÄ(ŒdÅ_5)åË$‘)#÷Gîõí·ß¦—´¨‰Œd›6m¦L™â3Ì£„5òC=Ä«W¯îÛ·ïäÉ“ ðóÏ?óùì³Ï’ÙìÖ­ÛŽ;þ1,ÇyñÅÙ™®X±böìÙò¢ç<iÒ¤:¼þúëT³råJºÛI¢GkÖ¬áhô2##ƒOJŸüˆ#8@dŠéå¨Q£hÉI(;;›'©¨ç35n)=¾(ÎI9s¦wïÞ©©©[·nݾ}{óæÍõ__—3¡P|@Z߸¬ÊºX"GÏ8¨pS “gì$„¶º–ðþƒ¼wÜqÝù#Gޤ§^z£Ý`±±±ô”#ÿö£\}X;3ÆøÂû8«T©Â“gÖ­[ײeK¡mÎ'žx‚Šu•øR¯_¿>--­°°Ðš’düÒYø] ‡øò%ÅlÕªëÛF9#9Jb”\ÎéˆÉõš¤�o^Œt‡\a\Y}kYÑãK„Š•”$‘$F ·3’Ð6vi’Rn±LÒ¢E‹èÿßÿ}ƒ ¸)$$äСCTS·n]ë(£ á¥]»vÂû_||ü®]»„wÞ]»v¥>‡6Õ,^¼¸S§NÖ–g˜ŸŸŸ””tâÄ ÚvÖ‹nœ3<~üøÎ;YqÿþýÔôÃ?¬]»–;Ðþ£—|RÊä©Ï‚ „÷¯*¾öÚkS™¤¢"¯¡²rŒÝÅ ü¤Ž=zíµ×ÝÖ8Œ.¡OIÆ×—U_k(aŠÏ8«pßÉ3vÆåP´è¡¹fÍš»wï¦ã/¿üR^F;‰M›6ÑÍ“™™¹mÛ6aº úðq»ø´ý*W®l­¡È߸9õýcÅ(!GM˜02¦¼,ÖøË–-»ýöÛ9’˜˜xòäIÚr”»•8Â_|æ×_¥°Ât•ô3’£$F ‰UËxk—a:br/š¤�o^ž62’>%__Y}i¬¡„)¾ÄY(ð¤d'a\d$+r”KIh»4I)·X&é7Þ GzŠ’[Šü&Ø-3c”°Fþé§Ÿ„wm¦z!sÚ§OŸ=ÞG7î“——Çç)á°2]ÄGydΜ9ÖùØÍ™!E²Ûò¥0mheò$A ‚¦7xðàôôtî©LRQ±ÆÔ·”óŠ䤄÷Ù—žE^yå¾gt }J2¾œ¼¬Ñ×Å'–)>ã¬"/…óä; ãr(Z4zVãþ¿ÿþ»Ý^µ“`èF8qb“&M„é‚ìÑö€Ï`/vñ鹯*Ïm­[·vØœv%ä(¢Ç)Êàò²Èø2‰<øàƒo½õÖ¬Y³6oÞl‰qçø ¥š¼0]%ýŒtŒ«–Ý­-×Ý£„5rÉÒ“{Ñ$‰Àn^9mF¿Dú~FFÒ—Æ'–)¾ÄY(ð¤d'a\d$+r”KIh+MRÊ Ü$Ñ£ =iÑY‘ S¶”\{;Œúõ%O—pðàA>ž7oÞ‹þì³Ï:vìhíÏaeœß~û­~ýú§N’óq˜3Ã.’ÿ:ýwß}·jÕ*ý¤¬“'cûÔSOÉ—ôØ´qãF}’ŠŠ5¦¾¥œ/N '%¼i=--ö“5ˆD—ñÿú믈ˆˆ¢¢¢õë×Û-«¾.>±Lñ™@T„¿É3F ãrèZôÜV£F JF¢øÏm4ÏÐÐPz Þ’œœ,LDß¾aÎcŒÏŒ7NùÀG}¤oÎ}ûöñ»Å–-[dg+F 륦G¥¤¤$¹¬ïÞ½tüÅ_tîÜYx? hÞ¼¹ÝZøúôiz8ãÿëWI?#K˜ %$RK¿ ô}k‡QB¿7õù¸Êźy]ýéç…Œ¤/O,S|I BÂßü…„q9t!d$W3’ð•(eRÊ Ä$ÅÄÄðqÏž=éb=þøã•*Uz÷ÝwɈÑÚ/^¼˜ì6×øý]‚æMO4|Ò¤It,ëW¯^=pàÀÉ“'ÓóÊÚµkÇŒC.oìØ±£GÎÌÌüñÇ-1·•qæÎ+ëib4ŸW_}UØÌÙú« ä1 D¾’h‹ë'%'_XXØ·o_êÌ/i2´x:t ä»)Í„'©¨Ð½$;L§CôÔÅõŒÃÅ ð¤¸IüñDz¿]º¬ä¦‡ ö /P4z@Ô¯€ÐÖÅ'–)>ã ¢\ ‡É3º„ÝrìØ±CÑÞœI‚6]\\œ5ŽD—Þ¬G÷j·nÝ(kÜ{ï½Ë—/çzå‚ìñ>·Y÷€o˜óã3t£N›6ÆÒô( üޤ²9©[Û¶m©=Aú¸€.AÉ”÷’üýë#(>Å”)Sú÷ï¿sçN®¤køÁð±‚ßz#ÓĆúÉ'ŸÈV}Û(gôw ‹èV.çtÄPr/ÖÍ‹ŒÄ8ä ý mi|b™âK„Š•”t »å@F²âvFÁNJ¹&‰ëÉè5lØPm+&v¥Ä¥° ~U¬¦µøïº9…÷óásÞ_yбJqY%ú)®âwòŒ.Q,Ö­[Çß|ó ®S‰@ö@iâˆÛnÇöï(¿ØIWƒ3~%Ùøï¿7õ¥ÏH²2!¿ó6ƒŒÜŽ/¼;raÇ'¯j}z(v¥Ä¥° ~Uøùƒ¿£WüÆ÷ -Svv¶ñW4«D—U¢ŸBà*~'ÏèÅbúôé#FŒ z䥬¤6{)D { 4ñÄm ·ã {‰Àw”_ì$‚‚«Á¿ìFüÆ÷‹ß›úÒg$Q!¿ó6ƒŒÜŽ/¼žK#£V—Â*¸­âv|ᾄÛñÅ!áv|ᾄÛñEù—p58ã¶„Ûñ…ûnÇW„„Ûñ…ûnÇ^ O.�����Ðð¨Æ �����qÁ$¥þÒ ¥”Å7Á�Ê70I((((A+¾ �P¾IBAAA ZñM°�€ò“Iоµvht˜RyÓ÷÷Ti_1):âº*Q-â’—uÑ¢   \Å7Á�Ê7¶&©Þ´±÷$MRƒ9íR>œðtz¥´júX”«³ø&X�@ùÆl’n\{G¥&Õ‘©›$ki´¸sX½åê,¾ �P¾1›¤ª¾së «º9›¤Ø‰qY×éõ((((WgñM°�€òÁ$%Îl]íÞ$:p6IµGý£R“jÿØvÞ„‚‚‚ruß �(ßLR\Öuaµ"Ã*…ÕŽô„xè eã]J"ˆ“™“²©»ž#PPPP®Úâ›`�åƒI’Å:cÓ"WMÙ :'”«¼ø&X�@ù&P“tã7wF5;°öÇ^7Š|•J©øí6” Å7Á�Ê7N& ¥XÅ7Á�Ê70I((((A+¾ �P¾IBAAA ZñM°�€òÍ“�����¬À$����(Ç&éĉj¸ä`���\©”W“ôþûïGDD,]ºTm�—E‹Ñ*,\¸Pm����Ê?åÒ$‘C õx<aaaðIe9¤ *Ð*Ðÿá“���\y”?“$ãà“ºvíZµjU¥òäɓݺuKNN¾ñÆÛµk÷ã?Z[ »té§ <uêÔ<pà 7¤¤¤|øá‡Ö¦«égŸtÉÂ9&���P,Ê™IRcôI³gÏÎÊÊ2¾7ñÅEEEtüꫯ¶jÕÊÚzæÌ™ÿþ÷¿Û¶mSfgg6Œ:dmº Qcç“.åB8Ç���ŠEy2IF‡Ä(>éÏ?ÿlݺõ/¿ü¢¿7[ùþûïãããÕZ!öìÙ£ Œ‹‹Û»w¯µæªÅèÝ'•áBØÅ���¤Ü˜¤'NÄÆÆ†‡‡«ïÌ^¨©zõêò7­zôè‘››«¿Å* 4høðáj­öÞ|ðàÁÈÈȱcǦ¤¤Ü~ûí»víú»ëU]aºÎÑÑÑêx¡«T­Z5ëﻕáBØÅ���¤Ü˜$‚ÞnÉ EDD(ï͵kצwnjånóæÍ:t¨ÐÞbžyæ™Ö­[ƒ]xàÀRùì³ÏèxÊ”)]ºtù»ëÕ]gºÚd†”U çD•rD™.„CL��� @Ê“I&Ÿ¤8$bøðá ‰‰‰uëÖ ¡ýË+3fÌHOO?|ø°RÏ(ïÍç΋‰‰áãŸþ?ÄÑ}’îÄ¥Zˆ7ß|3ÍËÛo¿ÍMÎ1��€�)g&Iøú$Ý!Y±û�ã…^ ÷Ô¿þúKm¸ˆ>ðž{îY³fð~ø¶Ûn³6]X}’Ñ!Yѯ'ãÆBø ���Hù3Iâ¢OªU«–ƒC¾o±ÈÈÈÞ¯ÓûzRRüвeKk+Ѽysò^!!! ƒ âÊÝ»w·oßþ†n þ;vìàÊ«öI5kÖtvHâ.„1&���P2Ê¥IÞwhz{v~onƒU���pS^M’À_ »<À*���¸R)Ç& ����À=`’����� À$����€I����0�“��Á¡Ù”+¤00I��ô<‹‚‚RN “��ÁAϳ(((å´00I��ô<K¥j£®¡U•ʦOªÛ"²vjdÍ”¨º-“ï_­DAA)ÃÂÀ$�@pÐóìµ=gWo𥛤f“Ï‘Oâã†>®X­¡Ú¥L “��ÁAI²©ÙFÕký‘¿L’¥\ÛkNtƒÛôz”2, L��%ÉÆ¤ôh44÷¦Ç÷Ø™¤è¤öa•kEÔhœš³_oEAA)ÃÂÀ$�@p°fØ}çÅ5J&‰Jú¤³µo͉ýG/½ ¥ “��ÁÁšakÞ<<¬JBxLbxÕºž:h2þžˆ©ücÔΰʵôz”2, L��=Ï6³ù$)mì&ŽòqBç©U®ï¢DAA)ÃÂÀ$�@pÐól3_“DÞ¨rbÜ0lcd|ZdíÔŠÕ¯¹ñîÔ1{õ(((eX˜$��zžEAA)§…I�€à çY”rZ˜$��zžEAA)§…I����0�“����`�& ��Jˉ'Ô*�@ù& ��JEnnn\\ý_m��”s`’�� ä7ª^½z•*U¢¢¢à“�¸Â€I�€Â‰ðxOà & ��J‚âüú¤®]»V­ZU©<~üx‹-RSSSRRZ¶l¹zõj¥Ãï¿ÿÞ¦Mj½çž{ ”V�€«À$�@±1:$Ÿ4{ö쬬,Ý$;wŽ|üñÇ 6ômwß}÷þó:x衇&Mš¤´�\& ��ŠÇ‰'âââªT©¢ú£‹T®\ÙúûnþùgëÖ­ùåÝ$Y™3gÎm·Ýf­! qôèQ:^µjU«V­¬­��·I�€b“››KNH5G^BCCçÏŸoíÜ£Gê¿gÏ;“Ô¾}ûZµj5nÜxÿþýÖúDEEññ®]»êÔ©cm�¸ L��”£OÒÒ¼yó†J&‰8{ölNNN¯^½¬•d’H‚a’�¸ôÀ$�@ Q|’îˆáÇ'$$$&&Ö­[7$$„:¤ôavîÜY«V-kõÇm«W¯ÆÛ�¸ÄÀ$�@É‘>Éè¬?I:pà�{ bêÔ©]ºtñmÝ»w—_Ü~úé§•V�€«À$�@© Ÿí섯I"o”‘‘A7nLKKKMM½þúëï¾ûî½{÷Z[‰ß~û­uëÖ)))ÔŠ?~À%& ��J ì �W$0I�����`’����� À$����€I����0�“����`�& ����À€'�����hxè?Õ8—$\ «à¶ŠÛñ…ûnÇW„„Ûñ…ûnÇå_ÂÕàŒÛnÇîK¸_\nÇîK¸_x%<—FF­ .…Up[ÅíøÂ} ·ã‹+BÂíøÂ} ·ã‹ò/ájpÆm ·ã ÷%ÜŽ/® ·ã ÷%ÜŽ/¼™]»v=úè£+V|饗Զâ Kœ:uŠ#?y‘[n¹EéCŒ3FÿSG {ìØ1Šãñx²²²dýܹs###ŸþyKß@ÉÉÉQõÉ>|˜âoܸQ©·£¨¨¨Q£FtÊÆÓÑãý¤‰`-«D?áOÅx)0J0Å];ì$f̘A 1~üøîÝ»¿óÎ;jsÀØÅÞ?b:}úôÇ{lâĉ?üðœ9sÔ^Ž=:uêTµÖ‚.!÷ÒØ±c¹†v8].:)ߎ¡Ç·ÞÈãÆ<xð§Ÿ~ªô)º„ÄyGŽ.”tÄ,Y²$¸7/2R ÐOq2^ ;ì$Dñ—Ã; d$‰_;)å:›$aó‹‹QB‰<oÞ<KãœÕ9,õ‰ŽŽNNNÞ·o×ßwß}Õ«W÷é0º¢>ù—_~¹_¿~÷ß¿RïÀÙ³g…)¸0ÅÁ>)]Â8“£ÇgTšŒØIˆ-‡£å;ºÙ(eÐq^^^ÉÞc|†òÝÌ™3åK:—÷Þ{ÏÒ~¿Í(A£¢¢¢RRR6lØÀ/ƒ¸‘„ï¬(=uéÒÅïŸ0sÀ(!ñ{Á(QútÄPðàÞ¼º¨>ÿÜWgFŽBM:%X#F d$+Æø"¨I)·X&‰L¹?r¯o¿ý6½¤}@Md$Û´i3eÊŸa¾%¬‘zè!>X½zuß¾}'Ož<`À€Ÿþ™ïÌgŸ}–Ìf·nÝvìØñ÷ø‹a9΋/¾ÈÎtÅŠ³gÏ–Ý8çI“&uèÐáõ×_§š•+WÒÝN=zôX³f G£—|RúäGŒqàÀ’ SL/GEKNBÙÙÙ<IE…ü8Ÿ©qKéñEqNêÌ™3½{÷NMMݺuëöíÛ›7o¾páBŸX& 9 ŤÅñ˪¬‹%ÒyôøŒƒ 72yÆNBhË¡kK—.½ãŽ;èÎ9r$=µðÒ+%è‹¥§ÊMÖzå‚è{ÀÚ™1Æ'è"T©R…'Ϭ[·®eË–BÛœO<ñ?ë*ñ¥^¿~}ZZZaa¡5%Éø¤³ð»ñåKŠÙªU+>Ö·rFr”Ä(!¹œÓ“ë5IÞ¼é"¹Â¸²úÖ²¢Ç—8+)9H #IŒng$¡mìÒ$¥Üb™¤E‹Ñÿ¿ÿþû pSHHÈ¡C‡¨¦nݺÖQ F >ÂK»ví„÷#¾øøø]»v ï¼»víJ}<m8ªY¼xq§N¬8,Ï0???))éĉ´í¬Ý8g xüøñ;w²âþýû©é‡~X»v-w ýG/ù¤”ÉSŸ ÐAÿþý_{í5Ž©LRQ‘×PY9Æîâ~RG½öÚk HŽî kF—Ч$ãë˪¯‹5”0ÅgœU¸Æïä; ãr(ZôÐ\³fÍÝ»wÓñ—_~)/£‚ĦM›è扉‰ÉÌÌܶm›0]}øÆ8]|Ú~•+W¶ÖPdŠoÜœúþ±b”£&L˜@S^küeË–Ý~ûíGŽILL<yò$m9ÊÝJá/>ó믿RXaºJúÉQ£„Īe¼µË01¹MR€7/OIŸ’Œ¯¯¬¾4ÖPÂ_â,xR²“0.2’9Ê¥Œ$´]š¤”[,“ôÆoÐ#=EÉ-E~“ì–™1JX#ÿôÓO»6aaaS½9íÓ§Ïï£÷ÉËËãó”pX‡.â#<2gÎë|ìæÌ"ÙmùR˜6´2y’ AÓ<xpzz:÷T&©¨Xcê[ÊùârRÂûìKÏ"¯¼ò ß3 º„>%_N^ÖèëâËŸqV‘—ÂyòŒ„q9-š?=«qÿßÿÝn¯ÚI0t£Nœ8±I“&ÂtAöh{Àg°»øôÜFc•ç¶Ö­[;lN;Œr ÑãepyYd|™D|ðÁ·ÞzkÖ¬Y›7o¶Ä¸€s|†RM^˜®’~F:F ‰UËîÖ–ën‡Q¹déˆÉ½h’D`7¯œ6£_"}?##éKãË_â,xR²“0.2’9Ê¥Œ$´‰•&)ån’èQ†ž´è¬È…)[J®½F ýú’§KHH8xð Ï›7oÅöÙg;v´öç°2Îo¿ýV¿~ýS§NÉù8Ì™aùÇÐñwß}·jÕ*ý¤¬“'cûÔSOÉ—ôØ´qãF}’ŠŠ5¦¾¥œ/N '%¼i=--ö“5ˆD—ñÿú믈ˆˆ¢¢¢õë×Û-«¾.>±Lñ™@T„¿É3F ãrèZôÜV£F JF¢øÏm4ÏÐÐPz Þ’œœ,LDß¾aÎcŒÏŒ7NùÀG}¤oÎ}ûöñ»Å–-[dg+F 륦G¥¤¤$¹¬ïÞ½tüÅ_tîÜYx? hÞ¼¹ÝZøúôiz8ãÿëWI?#K˜ %$RK¿ ô}k‡QB¿7õù¸Êźy]ýéç…Œ¤/O,S|I BÂßü…„q9t!d$W3’ð•(eRÊ Ä$ÅÄÄðqÏž=éb=þøã•*Uz÷ÝwɈÑÚ/^¼˜ì6×øý]‚æMO4|Ò¤It,ëW¯^=pàÀÉ“'ÓóÊÚµkÇŒC.oìØ±£GÎÌÌüñÇ-1·•qæÎ+ëib4ŸW_}UØÌÙú« ä1 D¾’h‹ë'%'_XXØ·o_êÌ/i2´x:t ä»)Í„'©¨Ð½$;L§CôÔÅõŒÃÅ ð¤¸IüñDz¿]º¬ä¦‡ ö /P4z@Ô¯€ÐÖÅ'–)>ã ¢\ ‡É3º„ÝrìØ±CÑÞœI‚6]\\œ5ŽD—Þ¬G÷j·nÝ(kÜ{ï½Ë—/çzå‚ìñ>·Y÷€o˜óã3t£N›6ÆÒô( üޤ²9©[Û¶m©=Aú¸€.AÉ”÷’üýë#(>Å”)Sú÷ï¿sçN®¤køÁð±‚ßz#ÓĆúÉ'ŸÈV}Û(gôw ‹èV.çtÄPr/ÖÍ‹ŒÄ8ä ý mi|b™âK„Š•”t »å@F²âvFÁNJ¹&‰ëÉè5lØPm+&v¥Ä¥° ~U¬¦µøïº9…÷óásÞ_yбJqY%ú)®âwòŒ.Q,Ö­[Çß|ó ®S‰@ö@iâˆÛnÇöï(¿ØIWƒ3~%Ùøï¿7õ¥ÏH²2!¿ó6ƒŒÜŽ/¼;raÇ'¯j}z(v¥Ä¥° ~Uøùƒ¿£WüÆ÷ -Svv¶ñW4«D—U¢ŸBà*~'ÏèÅbúôé#FŒ z䥬¤6{)D { 4ñÄm ·ã {‰Àw”_ì$‚‚«Á¿ìFüÆ÷‹ß›úÒg$Q!¿ó6ƒŒÜŽ/¼žK#£V—Â*¸­âv|ᾄÛñÅ!áv|ᾄÛñEù—p58ã¶„Ûñ…ûnÇW„„Ûñ…ûnÇ^ O.�����ÐðäºïÅ�� Ž��—0IÀLŸ>}š6mš‘‘™’’òÜsÏY¿Ã¸|ùòôôô6mÚ4nÜø™gž dTïÞ½oºé¦¶mÛÆÄÄÐXþ÷Ö�P@:Fr‹(QFbÖ¬Yãñ¢ÿkÎ�˜$`GDDD^^¼ù曜Drrr¸éÛo¿ <x0ÏŸ?Ÿš¦M›æwó¿v~Ïy<¡¡¡Ü�+HGÀˆCn)YFb233¹& If¦^üÛÎÇŽã$R¯^=®0`�½œ5kïÛ·Ž«W¯~æÌçQò££‚‚nZ²d ×� A:FrKÉ2±aÆN:q=L0“üPXXÈIDþã"‰‰‰ô’ÿu¯“'OrëÖ­[GIæÌ™ÃõùùùJ�HGÀ=·”8#Ýu×]+V¬àz˜$`& øaÕªUœDf̘Á5ááá2§œ;wŽ[•…ôQLZZU6kÖŒÿx�Ž€3zn)YFÚ²eKFF†ð~@@& 8qöìÙöíÛSÉÎΖ•aaa2§qŠY¼x±ó(É´iÓ¨)55•?À ÒpÀ˜[J–‘zõêÅFŠûÃ$#0IÀ21ýúõ«S§ÎçŸn­¯_¿¾çâ‡ÛòClùíFIŽ9ÂC¾þúkµ \õ ;ìrK 2ÒöíÛ[´hÁÇÜ& If<Ø¡C‡¬¬¬Ã‡sÍwÞÉýû÷÷ø~M²ZµjügAF?žòóó9+-[¶Œk� #¹¥iæÌ™iii·zát”’’2dÈî€& ˜¡‡³øøøžjÔ¨ÁM›6m ã_¸]°`åù+$£¢¢¢ø{H³gϦ!±±±úß[�éqÈ-%ËH6Iø$ If8qX±þMé¥K—6mÚ´M›6ÉÉÉ“'O.**ò;jàÀMš4¹ùæ›cbb:vì¸aà � Ò0¢f–Rg$áuW­ZµâúFYÿJ�˜$�ÀeÒ�àò& �pt�¸|€I�\F �..˜$����� ðÿð)Öòë.†]����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0014504�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/CMakeLists.txt����������������������������������������������������������������0000664�0000000�0000000�00000004552�15030617045�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cmake_minimum_required (VERSION 3.18) project (HDF4_DOXYGEN C) #----------------------------------------------------------------------------- # Option to build documentation #----------------------------------------------------------------------------- if (DOXYGEN_FOUND) set (DOXYGEN_PACKAGE ${HDF4_PACKAGE_NAME}) set (DOXYGEN_VERSION_STRING ${HDF4_PACKAGE_VERSION_STRING}) set (DOXYGEN_DIR ${HDF4_DOXYGEN_DIR}) set (DOXYGEN_INCLUDE_ALIASES_PATH ${HDF4_DOXYGEN_DIR}) set (DOXYGEN_INCLUDE_ALIASES aliases) set (DOXYGEN_VERBATIM_VARS DOXYGEN_INCLUDE_ALIASES) set (DOXYGEN_PROJECT_LOGO ${HDF4_DOXYGEN_DIR}/img/HDFG-logo.png) set (DOXYGEN_PROJECT_BRIEF "API Reference") set (DOXYGEN_INPUT_DIRECTORY "${HDF4_SOURCE_DIR} ${HDF4_DOXYGEN_DIR} ${HDF4_DOXYGEN_DIR}/dox ${HDF4_GENERATED_SOURCE_DIR}") set (DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES) set (DOXYGEN_MACRO_EXPANSION YES) set (DOXYGEN_OUTPUT_DIRECTORY ${HDF4_BINARY_DIR}/hdf4lib_docs) set (DOXYGEN_EXAMPLES_DIRECTORY "${HDF4_DOXYGEN_DIR}/dox") set (DOXYGEN_LAYOUT_FILE ${HDF4_DOXYGEN_DIR}/hdf4doxy_layout.xml) set (DOXYGEN_HTML_HEADER ${HDF4_DOXYGEN_DIR}/hdf4_header.html) set (DOXYGEN_HTML_FOOTER ${HDF4_DOXYGEN_DIR}/hdf4_footer.html) set (DOXYGEN_HTML_EXTRA_STYLESHEET ${HDF4_DOXYGEN_DIR}/hdf4doxy.css) set (DOXYGEN_HTML_EXTRA_FILES "${HDF4_DOXYGEN_DIR}/hdf4_navtree_hacks.js") set (DOXYGEN_TAG_FILE ${HDF4_BINARY_DIR}/hdf4.tag) set (DOXYGEN_SERVER_BASED_SEARCH NO) set (DOXYGEN_EXTERNAL_SEARCH NO) set (DOXYGEN_SEARCHENGINE_URL) set (DOXYGEN_STRIP_FROM_PATH ${HDF4_SOURCE_DIR}) set (DOXYGEN_STRIP_FROM_INC_PATH ${HDF4_SOURCE_DIR}) set (DOXYGEN_PREDEFINED "H4_DOXYGEN") set (DOXYGEN_WARN_AS_ERROR ${HDF4_DOXY_WARNINGS}) # This configure and individual custom targets work together # Replace variables inside @@ with the current values configure_file (${HDF4_DOXYGEN_DIR}/Doxyfile.in ${HDF4_BINARY_DIR}/Doxyfile @ONLY) install ( DIRECTORY ${HDF4_BINARY_DIR}/hdf4lib_docs/html DESTINATION ${HDF4_INSTALL_DOC_DIR} COMPONENT hdfdocuments ) add_custom_target (hdf4_doc ALL COMMAND ${DOXYGEN_EXECUTABLE} ${HDF4_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${HDF4_DOXYGEN_DIR} COMMENT "Generating HDF4 documentation with Doxygen" VERBATIM ) if (NOT TARGET doxygen) add_custom_target (doxygen) endif () add_dependencies (doxygen hdf4_doc) endif () ������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/Doxyfile.in�������������������������������������������������������������������0000664�0000000�0000000�00000213461�15030617045�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Doxyfile # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = @DOXYGEN_PACKAGE@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @DOXYGEN_VERSION_STRING@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. # When you need a literal { or } or , in the value part of an alias you have to # escape them by means of a backslash (\), this can lead to conflicts with the # commands \{ and \} for these it is advised to use the version @{ and @} or use # a double escape (\\{ and \\}) ALIASES = @INCLUDE_PATH = @DOXYGEN_INCLUDE_ALIASES_PATH@ @INCLUDE = @DOXYGEN_INCLUDE_ALIASES@ # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = YES # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = YES # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = YES # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = YES # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if <section_label> ... \endif and \cond <section_label> # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. If # EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. # The default value is: NO. WARN_AS_ERROR = @DOXYGEN_WARN_AS_ERROR@ # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @DOXYGEN_INPUT_DIRECTORY@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), # *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen # C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.h \ H4*.java \ HDF*.java \ *.dox # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = examples # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = @DOXYGEN_EXAMPLES_DIRECTORY@ # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = *.c # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = @DOXYGEN_DIR@/img # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # <filter> <input-file> # # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = NO # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = H4 #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = @DOXYGEN_HTML_HEADER@ # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = YES # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: https://developer.apple.com/xcode/), introduced with OSX # 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = YES # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png The default and svg Looks nicer but requires the # pdf2svg tool. # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use <access key> + S # (what the <access key> is depends on the OS and browser, but it is typically # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down # key> to jump into the search results window, the results can be navigated # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel # the search. The filter options can be selected when the cursor is inside the # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> # to select a filter and <Enter> or <escape> to activate or cancel the filter # option. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing # and searching needs to be provided by external tools. See the section # "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: https://xapian.org/). See the section "External Indexing and # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the # SEARCHDATA_FILE tag the name of this file can be specified. # The default file is: searchdata.xml. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of # to a relative location where the documentation can be found. The format is: # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. GENERATE_RTF = NO #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. GENERATE_MAN = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. GENERATE_XML = NO #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- # If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. GENERATE_DOCBOOK = NO #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an # AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_PERLMOD = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and # EXPAND_AS_DEFINED tags. # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will be # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. # gcc). The argument of the tag is a list of macros of the form: name or # name=definition (no spaces). If the definition and the "=" are omitted, "=1" # is assumed. To prevent a macro definition from being undefined via #undef or # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. PREDEFINED = @DOXYGEN_PREDEFINED@ # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The # macro definition that is found in the sources will be used. Use the PREDEFINED # tag if you want to use a different macro definition that overrules the # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have # an all uppercase name, and do not end with a semicolon. Such function macros # are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tag files. For each tag # file the location of the external documentation should be added. The format of # a tag file without this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. # Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. GENERATE_TAGFILE = @DOXYGEN_TAG_FILE@ # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be # listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed # in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. EXTERNAL_PAGES = YES ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/aliases�����������������������������������������������������������������������0000664�0000000�0000000�00000032562�15030617045�0016060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ALIASES += THG="The HDF Group" ################################################################################ # Styling ################################################################################ ALIASES += Bold{1}="<b>\1</b>" ALIASES += Emph{1}="<em>\1</em>" ALIASES += Code{1}="<tt>\1</tt>" ################################################################################ # Return values ################################################################################ ALIASES += success{1}="\Bold{Success:} \1" ALIASES += failure{1}="\Bold{Failure:} \1" ALIASES += herr_t="Returns a non-negative value if successful; otherwise, returns a negative value." ALIASES += herr_t_iter="\li Zero causes the iterator to continue, returning zero when the iteration is complete. \li A positive value causes the iterator to immediately return that positive value, indicating short-circuit success. \li A negative value causes the iterator to immediately return that value, indicating failure." ALIASES += hid_t{1}="Returns a \1 identifier if successful; otherwise returns #H5I_INVALID_HID. " ALIASES += hid_ti{1}="Returns an \1 identifier if successful; otherwise returns #H5I_INVALID_HID. " ALIASES += hid_tv{1}="Returns an \1 identifier if successful; otherwise returns a negative value. " ALIASES += htri_t="Returns zero (false), a positive (true) or a negative (failure) value." ALIASES += deprecation_note{1}="\deprecated Superseded by \1." ################################################################################ # General ################################################################################ ALIASES += idx_type="\param[in] idx_type Index type" ALIASES += idx_type{1}="\param[in] \1 Index type" ALIASES += order="\param[in] order Iteration order" ALIASES += order{1}="\param[in] \1 Iteration order" ################################################################################ # Attributes ################################################################################ ALIASES += attr_id="\param[in] attr_id Attribute identifier" ALIASES += attr_id{1}="\param[in] \1 Attribute identifier" ################################################################################ # Dataset ################################################################################ ALIASES += dset_id="\param[in] dset_id Dataset identifier" ALIASES += dset_id{1}="\param[in] \1 Dataset identifier" ################################################################################ # Datatypes ################################################################################ ALIASES += type_id="\param[in] type_id Datatype identifier" ALIASES += type_id{1}="\param[in] \1 Datatype identifier" ################################################################################ # Errors ################################################################################ ALIASES += estack_id="\param[in] estack_id Error stack identifier" ALIASES += estack_id{1}="\param[in] \1 Error stack identifier" ################################################################################ # Files ################################################################################ ALIASES += file_id="\param[in] file_id File identifier" ALIASES += file_id{1}="\param[in] \1 File identifier" ################################################################################ # Groups ################################################################################ ALIASES += group_id="\param[in] group_id Group identifier" ALIASES += group_id{1}="\param[in] \1 Group identifier" ################################################################################ # Locations ################################################################################ ALIASES += loc_id="\param[in] loc_id Location identifier" ALIASES += loc_id{1}="\param[in] \1 Location identifier" ################################################################################ # Objects ################################################################################ ALIASES += obj_id="\param[in] obj_id Object identifier" ALIASES += obj_id{1}="\param[in] \1 Object identifier" ALIASES += loc_obj_id{1}="\param[in] \1 Location identifier of object" ALIASES += fgdta_obj_id="\obj_id. The identifier may be that of a file, group, dataset, named datatype, or attribute." ALIASES += fgdta_obj_id{1}="\obj_id{\1}. The identifier may be that of a file, group, dataset, named datatype, or attribute." ALIASES += fgdta_loc_obj_id{1}="\loc_obj_id{\1}. The identifier may be that of a file, group, dataset, named datatype, or attribute." ################################################################################ # Others ################################################################################ ALIASES += cpp_c_api_note="\attention \Bold{C++ Developers using HDF5 C-API functions beware:}\n Several functions in this C-API take function pointers or callbacks as arguments. Examples include H5Pset_elink_cb(), H5Pset_type_conv_cb(), H5Tconvert(), and H5Ewalk2(). Application code must ensure that those callback functions return normally such to allow the HDF5 to manage its resources and maintain a consistent state. For instance, those functions must not use the C \c setjmp / \c longjmp mechanism to leave those callback functions. Within the context of C++, any exceptions thrown within the callback function must be caught, such as with a \Code{catch(…)} statement. Any exception state can be placed within the provided user data function call arguments, and may be thrown again once the calling function has returned. Exceptions raised and not handled inside the callback are not supported as it might leave the HDF5 library in an inconsistent state. Similarly, using C++20 coroutines cannot be used as callbacks, since they do not support plain return statements. If a callback function yields execution to another C++20 coroutine calling HDF5 functions as well, this may lead to undefined behavior." ALIASES += par_compr_note="\attention If you are planning to use compression with parallel HDF5, ensure that calls to H5Dwrite() occur in collective mode. In other words, all MPI ranks (in the relevant communicator) call H5Dwrite() and pass a dataset transfer property list with the MPI-IO collective option property set to #H5FD_MPIO_COLLECTIVE_IO.\n Note that data transformations are currently \Bold{not} supported when writing to datasets in parallel and with compression enabled." ALIASES += sa_metadata_ops="\sa \li H5Pget_all_coll_metadata_ops() \li H5Pget_coll_metadata_write() \li H5Pset_all_coll_metadata_ops() \li H5Pset_coll_metadata_write() \li \ref maybe_metadata_reads" ################################################################################ # The Usual Suspects ################################################################################ ALIASES += click4more="(Click on a enumerator, field, or type for more information.)" ALIASES += csets="<table><tr><td>#H5T_CSET_ASCII</td><td>US ASCII</td></tr><tr><td>#H5T_CSET_UTF8</td><td>UTF-8 Unicode encoding</td></tr></table>" ALIASES += datatype_class=" \li #H5T_INTEGER \li #H5T_FLOAT \li #H5T_STRING \li #H5T_BITFIELD \li #H5T_OPAQUE \li #H5T_COMPOUND \li #H5T_REFERENCE \li #H5T_ENUM \li #H5T_VLEN \li #H5T_ARRAY" ALIASES += file_access="<table><tr><td>#H5F_ACC_RDWR</td><td>File was opened with read/write access.</td></tr><tr><td>#H5F_ACC_RDONLY</td><td>File was opened with read-only access.</td></tr><tr><td>#H5F_ACC_SWMR_WRITE</td><td>File was opened with read/write access for a single-writer/multiple-reader (SWMR) scenario. Note that the writer process must also open the file with the #H5F_ACC_RDWR flag.</td></tr><tr><td>#H5F_ACC_SWMR_READ</td><td>File was opened with read-only access for a single-writer/multiple-reader (SWMR) scenario. Note that the reader process must also open the file with the #H5F_ACC_RDONLY flag.</td></tr></table>" ALIASES += id_types="<table><tr><td>#H5I_FILE</td><td>File</td></tr><tr><td>#H5I_GROUP</td><td>Group</td></tr><tr><td>#H5I_DATATYPE</td><td>Datatype</td></tr><tr><td>#H5I_DATASPACE</td><td>Dataspace</td></tr><tr><td>#H5I_DATASET</td><td>Dataset</td></tr><tr><td>#H5I_ATTR</td><td>Attribute</td></tr></table>" ALIASES += indexes="<table><tr><td>#H5_INDEX_NAME</td><td>Lexicographic order on name</td></tr><tr><td>#H5_INDEX_CRT_ORDER</td><td>Index on creation order</td></tr></table>" ALIASES += link_types="<table><tr><td>#H5L_TYPE_HARD</td><td>Hard link</td></tr><tr><td>#H5L_TYPE_SOFT</td><td>Soft link</td></tr><tr><td>#H5L_TYPE_EXTERNAL</td><td>External link</td></tr><tr><td>#H5L_TYPE_ERROR</td><td>Error</td></tr></table>" ALIASES += mem_types="<table><tr><td>#H5FD_MEM_DEFAULT</td><td>The default file memory allocation type</td></tr><tr><td>#H5FD_MEM_SUPER</td><td>File memory allocated for Superblock</td></tr><tr><td>#H5FD_MEM_BTREE</td><td>File memory allocated for B-tree</td></tr><tr><td>#H5FD_MEM_DRAW</td><td>File memory allocated for raw data</td></tr><tr><td>#H5FD_MEM_GHEAP</td><td>File memory allocated for Global Heap</td></tr><tr><td>#H5FD_MEM_LHEAP</td><td>File memory allocated for Local Heap</td></tr><tr><td>#H5FD_MEM_OHDR</td><td>File memory allocated for Object Header</td></tr></table>" ALIASES += norm_type="<table><tr><td>#H5T_NORM_IMPLIED</td><td>0</td><td>MSB of mantissa is not stored, always 1</td></tr><tr><td>#H5T_NORM_MSBSET</td><td>1</td><td>MSB of mantissa is always 1</td></tr><tr><td>#H5T_NORM_NONE</td><td>2</td><td>Mantissa is not normalized</td></tr></table>" ALIASES += obj_types="<table><tr><td>#H5F_OBJ_FILE</td><td>Files only</td></tr><tr><td>#H5F_OBJ_DATASET</td><td>Datasets only</td></tr><tr><td>#H5F_OBJ_GROUP</td><td>Groups only</td></tr><tr><td>#H5F_OBJ_DATATYPE</td><td>Named datatypes only</td></tr><tr><td>#H5F_OBJ_ATTR</td><td>Attributes only</td></tr><tr><td>#H5F_OBJ_ALL</td><td>All of the above</td></tr></tr><tr><td>#H5F_OBJ_LOCAL</td><td>Restrict search to objects opened through current file identifier.</td></tr></table> \attention #H5F_OBJ_LOCAL does not stand alone; it is effective only when used in combination with one or more of the preceding types. For example, #H5F_OBJ_DATASET | #H5F_OBJ_GROUP | #H5F_OBJ_LOCAL would count all datasets and groups opened through the current file identifier." ALIASES += orders="<table><tr><td>#H5_ITER_INC</td><td>Increasing order</td></tr><tr><td>#H5_ITER_DEC</td><td>Decreasing order</td></tr><tr><td>#H5_ITER_NATIVE</td><td>Fastest available order</td></tr></table>" ALIASES += padding_type="<table><tr><td>#H5T_PAD_ZERO</td><td>0</td><td>Set background to zeros</td></tr><tr><td>#H5T_PAD_ONE</td><td>1</td><td>Set background to ones</td></tr><tr><td>#H5T_PAD_BACKGROUND</td><td>2</td><td>Leave background alone</td></tr></table>" ALIASES += scopes="<table><tr><td>#H5F_SCOPE_GLOBAL</td><td>Flushes the entire virtual file</td></tr><tr><td>#H5F_SCOPE_LOCAL</td><td>Flushes only the specified file</td></tr></table>" ALIASES += sign_prop="<table><tr><td>#H5T_SGN_NONE</td><td>0</td><td>Unsigned integer type</td></tr><tr><td>#H5T_SGN_2</td><td>1</td><td>Two's complement signed integer type</td></tr></table>" ALIASES += storage_type="<table><tr><td>#H5G_STORAGE_TYPE_COMPACT</td><td>Compact storage</td></tr><tr><td>#H5G_STORAGE_TYPE_DENSE</td><td>Indexed storage</td></tr><tr><td>#H5G_STORAGE_TYPE_SYMBOL_TABLE</td><td>Symbol tables, the original HDF5 structure</td></tr></table>" ALIASES += str_pad_type="<table><tr><td>#H5T_STR_NULLTERM</td><td>0</td><td>Null terminate (as C does)</td></tr><tr><td>#H5T_STR_NULLPAD</td><td>1</td><td>Pad with zeros</td></tr><tr><td>#H5T_STR_SPACEPAD</td><td>2</td><td>Pad with spaces (as FORTRAN does)</td></tr></table>" ALIASES += see_virtual=" \see Supporting Functions: H5Pget_layout(), H5Pset_layout(), H5Sget_regular_hyperslab(), H5Sis_regular_hyperslab(), H5Sselect_hyperslab() \see VDS Functions: H5Pget_virtual_count(), H5Pget_virtual_dsetname(), H5Pget_virtual_filename(), H5Pget_virtual_prefix(), H5Pget_virtual_printf_gap(), H5Pget_virtual_srcspace(), H5Pget_virtual_view(), H5Pget_virtual_vspace(), H5Pset_virtual(), H5Pset_virtual_prefix(), H5Pset_virtual_printf_gap(), H5Pset_virtual_view()" ALIASES += obj_info_fields="<table><tr><th>Flag</th><th>Purpose</th></tr><tr><td>#H5O_INFO_BASIC</td><td>Fill in the fileno, addr, type, and rc fields</td></tr><tr> <td>#H5O_INFO_TIME</td><td>Fill in the atime, mtime, ctime, and btime fields</td></tr><tr> <td>#H5O_INFO_NUM_ATTRS</td> <td>Fill in the num_attrs field</td></tr><tr><td>#H5O_INFO_HDR</td><td>Fill in the num_attrs field</td></tr><tr><td>#H5O_INFO_META_SIZE</td><td>Fill in the meta_size field</td></tr><tr><td>#H5O_INFO_ALL</td><td>#H5O_INFO_BASIC | #H5O_INFO_TIME | #H5O_INFO_NUM_ATTRS | #H5O_INFO_HDR | #H5O_INFO_META_SIZE</td></tr></table>" ################################################################################ # FORTRAN ################################################################################ ALIASES += fortran_error="Returns 0 if successful and -1 if it fails." ALIASES += fortran_approved="The preferred API, Fortran 2003 version." ALIASES += fortran_obsolete="Obsolete API, use the Fortran 2003 version instead." ALIASES += fortran_file="Pointer to filename the async subroutine is being called from, filename must be null character terminated" ALIASES += fortran_func="Pointer to function name the async subroutine is being called in, func must be null character terminated" ALIASES += fortran_line="Line number the async subroutine is being called at" ALIASES += fortran_plist_id="Property list identifier" ALIASES += fortran_es_id="Event set identifier" ALIASES += fortran_vol_name="Connector name" ����������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0015276�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/About.dox�����������������������������������������������������������������0000664�0000000�0000000�00000004536�15030617045�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** \page About About \section about_history History The implementation of this documentation set is based on the fantastic work of the <a href="https://eigen.tuxfamily.org/index.php?title=Main_Page">Eigen project</a>. Please refer to their <a href="https://gitlab.com/libeigen/eigen">GitLab repository</a> and the online version of their <a href="http://eigen.tuxfamily.org/dox/">Doxygen-based documentation</a>. Not only does Eigen set a standard as a piece of software, but also as an example of <em>documentation done right</em>. \section about_documentation Documentation about Documentation In this section, we describe common documentation maintenance tasks. \subsection plain_html Including Plain HTML Pages The most common use case for this is the inclusion of older documentation. New documentation should, whenever possible, be created using Doxygen markdown! Use Doxygen's <a href="https://www.doxygen.nl/manual/commands.html#cmdhtmlinclude"><code>htmlinclude</code></a> special command to include existing plain HTML pages. An example from this documentation set can be seen <a href="https://github.com/HDFGroup/hdf4/blob/develop/doxygen/dox/FileFormatSpec.dox">here</a>. \subsection new_rm_entry Creating a New Reference Manual Entry Please refer to the \ref RMT for guidance on how to create a new reference manual entry. \subsection custom_commands Creating Custom Commands See Doxygen's <a href="https://www.doxygen.nl/manual/custcmd.html">Custom Commands documentation</a> as a general reference. All custom commands for this project are located in the <a href="https://github.com/HDFGroup/hdf4/blob/develop/doxygen/aliases"><tt>aliases</tt></a> file in the <a href="https://github.com/HDFGroup/hdf4/tree/develop/doxygen"><tt>doxygen</tt></a> subdirectory of the <a href="https://github.com/HDFGroup/hdf4">main HDF4 repo</a>. The custom commands are grouped in sections. Find a suitable section for your command or ask for help if unsure! \subsection hosting How Do Updates and Changes Get Published? Currently, the files underlying this documentation website are stored in an bucket on AWS S3. The top-level bucket is <pre>s3://docs.hdfgroup.org/hdf4/</pre> There are folders for the <tt>development</tt> branch and all supported release version. Talk to your friendly IT-team if you need write access, or you need someone to push an updated version for you! */������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/GettingStarted.dox��������������������������������������������������������0000664�0000000�0000000�00000003220�15030617045�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page GettingStarted Getting Started with HDF4 Navigate back: \ref index "Main" <hr> \section sec_learn Learning HDF4 There are several resources for learning about HDF4. The HDF Group provides an on-line HDF4 tutorial, documentation, examples, and videos. There are also tutorials provided by other organizations that are very useful for learning about HDF4. \subsection subsec_learn_intro The HDF Group Resources For a quick introduction to HDF4 see the following: <table> <tr> <td style="background-color:#F5F5F5"> @ref IntroHDF4 </td> <td> A very brief introduction to HDF4 and the HDF4 programming model and APIs </td> </tr> <tr> <td style="background-color:#F5F5F5"> @ref LearnHDFView </td> <td> A tutorial for learning how to use HDFView. NO programming involved! </td> </tr> <tr> <td style="background-color:#F5F5F5"> @ref LearnBasics </td> <td> Step by step instructions for learning HDF4 that include programming examples </td> </tr> </table> \subsection subsec_learn_tutor The HDF Group Tutorials and Examples These tutorials and examples are available for learning about the HDF4 features: <table> <tr> <td style="background-color:#F5F5F5"> \ref IntroParHDF4 </td> <td> A brief introduction to Parallel HDF4. If you are new to HDF4 please see the @ref LearnBasics topic first. </td> </tr> <tr> <td style="background-color:#F5F5F5"> \ref ViewTools </td> <td> \li @ref LearnHDFView \li @ref ViewToolsCommand </td> </tr> <tr> <td style="background-color:#F5F5F5"> HDF4.2.16 New Features </td> <td> </td> </tr> <tr> <td style="background-color:#F5F5F5"> Example Programs </td> <td> \ref HDF4Examples </td> </tr> </table> <hr> Navigate back: \ref index "Main" */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/Glossary.dox��������������������������������������������������������������0000664�0000000�0000000�00000040123�15030617045�0017615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** \page GLS Glossary \section GLS_A A <DL> <DT>Array datatype</DT> <DD>A family of HDF4 datatypes whose elements are arrays of a fixed rank (≤ 32) and fixed finite extent. All array elements must be of the same HDF4 datatype.</DD> </DL> <DL> <DT>Array variable</DT> <DD><P>A variable that can store (logically) dense, rectilinear, multidimensional arrays of elements of a given HDF4 datatype.</P> <P>The combination of array rank (dimensionality) and extent is called an array variable's shape. This includes the degenerate array shapes of a singleton (scalar) and the empty array (null).</P> <P>The array element datatype is sometimes referred to as the array variable's type, which is not entirely accurate because the array variable's type is 'array of element type' rather than 'element type'.</P> <P>In HDF4, there are two kinds of array variables, attributes and datasets, and the distinction is functional (i.e., how they can be used) rather than conceptual. Attributes are commonly used for descriptive "light-weight" HDF4 object metadata while datasets are HDF4 objects used to store "heavy-weight" problem-sized data.</P> </DD> </DL> <DL> <DT>Attribute</DT> <DD><P>A named array variable that is associated with an HDF4 object, its owner or attributee, and used to represent application domain-specific metadata of the object. Intuitively, the set of an object's attributes can be thought of as its key-value pair collection. Attribute names (keys) can be arbitrary Unicode strings, but must be unique per object, i.e., an object can have at most one attribute with a given name.</P> <P>A scalar attribute is an attribute backed by a singleton array variable. A null attribute is attribute backed by an empty array variable.</P> </DD> </DL> \section GLS_B B <DL> <DT>Bitfield datatype</DT> <DD>A family of HDF4 datatypes whose elements are fixed-width bit fields.</DD> </DL> \section GLS_C C <DL> <DT>Chunked layout</DT> <DD> <P>A dataset storage layout where the dataset elements are partitioned into fixed-size multidimensional chunks or tiles. Chunked layout is mandatory for datasets with one or more dimensions of indefinite (infinite) extent or where compression or other filters are applied to the dataset elements.</P> <P>Chunked layout may improve I/O performance for certain access patterns.</P> </DD> </DL> <DL> <DT>Committed datatype</DT> <DD>An immutable kind of HDF4 object that is used to store an HDF4 datatype definition, which can be referenced by multiple array variables. When linked to an HDF4 group, a committed datatype can be located by an HDF4 path name, and is sometimes called a named datatype.</DD> </DL> <DL> <DT>Compact layout</DT> <DD></DD> </DL> <DL> <DT>Compound datatype</DT> <DD> <P>A family of HDF4 datatypes whose elements are records with named fields of other HDF4 datatypes. Currently, on ASCII field names are supported.</P> <P>Similar to a <CODE>struct</CODE> in C or a <CODE>COMMON</CODE> block in Fortran.</P> </DD> </DL> <DL> <DT>Contiguous layout</DT> <DD>A dataset storage layout where the dataset elements are physically stored in an HDF4 file as a contiguous block of bytes.</DD> </DL> \section GLS_D D <DL> <DT>Dataset</DT> <DD> <P>A kind of HDF4 object, a linked array variable. which can be located in an HDF4 file through a path name. Datasets are commonly used to store "heavy-weight" problem-sized data.</P> <P>The HDF4 library offers a lot of features aimed at optimized dataset access and storage, including compression and partial I/O.</P> </DD> </DL> <DL> <DT>Dataspace</DT> <DD>The shape of an array variable. With the exception of degenerate cases (empty set, singleton), this is a rectilinear lattice or grid of a certain rank (dimensionality) and extent.</DD> </DL> <DL> <DT>Datatype</DT> <DD> <P>An HDF4 datatype consists of an abstract data type (a set of elements) and a bit-level representation of these elements in storage such as an HDF4 file or memory.</P> <P>The HDF4 library comes with a large set of predefined datatypes and offers mechanisms for creating user-defined datatypes.</P> <P>The ten major families or classes of HDF4 datatypes are:</P> <UL> <LI>Integer datatypes</LI> <LI>Floating-point number datatypes</LI> <LI>String datatypes</LI> <LI>Bitfield datatypes</LI> <LI>Opaque datatypes</LI> <LI>Compound datatypes</LI> <LI>Reference datatypes</LI> <LI>Enumerated datatypes</LI> <LI>Variable-length sequence datatypes</LI> <LI>Array datatypes</LI> </UL> </DD> </DL> \section GLS_E E <DL> <DT>Enumeration datatype</DT> <DD>A family of HDF4 datatypes whose elements represent named integer values called members or enumerators. Currently, only ASCII names are supported.</DD> </DL> <DL> <DT>External layout</DT> <DD>A form of contiguous layout where a dataset's elements are physically stored in unformatted binary files outside the HDF4 file.</DD> </DL> <DL> <DT>External link</DT> <DD>An HDF4 link whose destination is specified as a pair of an HDF4 file name and an HDF4 path name in that file.</DD> </DL> \section GLS_F F <DL> <DT>Field</DT> <DD>See compound datatype.</DD> </DL> <DL> <DT>File</DT> <DD> <OL> <LI>A byte stream (in a storage context such as a file system or in memory) formatted according to the HDF4 File Format Specification.</LI> <LI>A (logical) container for HDF4 objects.</LI> </OL> </DD> </DL> <DL> <DT>File format</DT> <DD></DD> </DL> <DL> <DT>Fill value</DT> <DD></DD> </DL> <DL> <DT>Filter</DT> <DD></DD> </DL> \section GLS_G G <DL> <DT>Group</DT> <DD> <P>A kind of HDF4 object that stores a collection of HDF4 links. Each HDF4 file contains at least one group, it's root group.</P> <P>Among the destinations of an HDF4 group's links may be other HDF4 groups (including the group itself!). This ability is sometimes referred to as the closure property of groups. It is the basis for creating hierarchical or more general graph-like structures.</P> </DD> </DL> \section GLS_H H <DL> <DT>Hard link</DT> <DD>An HDF4 link whose destination is specified (internally) as the address of an HDF4 object in the same HDF4 file.</DD> </DL> <DL> <DT>Hierarchy</DT> <DD>See group.</DD> </DL> <DL> <DT>Hyperslab</DT> <DD> <P>A regular multidimensional pattern described by four vectors whose length equals the rank of the pattern.</P> <OL> <LI><CODE>start</CODE> - the offset where the first block of the hyperslab begins</LI> <LI><CODE>stride</CODE> - the offset between pattern blocks</LI> <LI><CODE>count</CODE> - the number of blocks</LI> <LI><CODE>block</CODE> - the extent of an individual pattern block</LI> </OL> <P>For example, the black squares on a (two-dimensional) chessboard with origin at <CODE>(0,0)</CODE> can be represented as the union of two hyperslabs representing the even <CODE>(0,2,4,6)</CODE> and odd <CODE>(1,3,5,7)</CODE> rows, respectively.</P> <IMG SRC="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Chessboard480.svg/176px-Chessboard480.svg.png"/> <P>The hyperslab parameters for the even rows are: <CODE>start (0,0)</CODE>, <CODE>stride (2,2)</CODE>, <CODE>count (4,4)</CODE>, <CODE>block (1,1)</CODE>. Likewise the parameters for the odd rows are: <CODE>start (1,1)</CODE>, <CODE>stride (2,2)</CODE>, <CODE>count (4,4)</CODE>, <CODE>block (1,1)</CODE>.</P> </DD> </DL> \section GLS_I I <DL> <DT>Identifier</DT> <DD>An opaque, transient handle used by the HDF4 library to manipulate in-memory representations of HDF4 items.</DD> </DL> \section GLS_L L <DL> <DT>Library</DT> <DD></DD> </DL> <DL> <DT>Link</DT> <DD> <P>A named, uni-directional association between a source and a destination. In HDF4, the source is always the HDF4 group that hosts the link in its link collection.</P> <P>There are several ways to specify a link's destination:</P> <UL> <LI>The address of an HDF4 object in the same HDF4 file; so-called hard link.</LI> <LI>A path name in the same or a different file; so-called soft or external link.</LI> <LI>User-defined</LI> </UL> <P>A link name can be any Unicode string that does not contain slashes (<CODE>"/"</CODE>) or consists of a single dot character (<CODE>"."</CODE>). A link name must be unique in a group's link collection.</P> </DD> </DL> \section GLS_M M <DL> <DT>Metadata</DT> <DD>Data that in a given context has a descriptive or documentation function for other data. Typically, the metadata is small compared to the data it describes.</DD> </DL> <DL> <DT>Member</DT> <DD> <P>A link destination is sometimes referred to as a member of the link's source (group). This way of speaking invites confusion: A destination (e.g., object) can be the destination of multiple links in the same (!) or different groups. It would then be a "member" of a given group with multiplicity greater than one and be a member of multiple groups.</P> <P> It is the link that is a member of the group's link collection and not the link destination.</P> </DD> </DL> \section GLS_N N <DL> <DT>Name</DT> <DD> <P>A Unicode string that depending on the item it names might be subject to certain character restrictions, such as ASCII-encoded only. In HDF4, the user might encounter the following names:</P> <UL> <LI>A link name</LI> <LI>A path name</LI> <LI>An attribute name</LI> <LI>A field name (compound datatypes)</LI> <LI>A constant name (enumeration datatypes)</LI> <LI>A tag name (opaque datatypes)</LI> <LI>A file name</LI> </UL> </DD> </DL> <DL> <DT>Named datatype</DT> <DD>See committed datatype.</DD> </DL> <DL> <DT>Null dataspace</DT> <DD>A shape which represents the empty set. Array variables with this shape cannot store any values.</DD> </DL> \section GLS_O O <DL> <DT>Object</DT> <DD>An HDF4 group, dataset or named datatype; an HDF4 item that can be linked to zero or more groups and decorated with zero or more HDF4 attributes.</DD> </DL> <DL> <DT>Object reference</DT> <DD> <OL> <LI>A datatype for representing references to objects in a file.</LI> <LI>A value of the object reference datatype.</LI> </OL> </DD> </DL> <DL> <DT>Opaque datatype</DT> <DD>A family of HDF4 datatypes whose elements are byte sequences of a given fixed length. An opaque datatype can be tagged with a sequence of up to 256 ASCII characters, e.g., MIME code.</DD> </DL> \section GLS_P P <DL> <DT>Path name</DT> <DD>A Unicode string that is the concatenation of link names separated by slashes (<CODE>'/'</CODE>). In HDF4, path names are used to locate and refer to HDF4 objects.</DD> </DL> <DL> <DT>Plugin</DT> <DD>An HDF4 library feature or capability that can be added dynamically at application run time rather than library compilation time. Plugins are usually implemented as shared libraries, and their discovery and loading behavior can be controlled programmatically or through environment variables. </DD> </DL> <DL> <DT>Point selection</DT> <DD>A dataspace selection that consists of a set of points (coordinates) in the same dataspace.</DD> </DL> <DL> <DT>Property list</DT> <DD> <P>An HDF4 API construct, a means of customizing the behavior of the HDF4 library when creating, accessing or modifying HDF4 items.</P> <P>While the default property settings are sufficient in many cases, certain HDF4 features, such as compression, can be reasonably controlled only by the user who has to provide the desired settings via property lists.</P> </DD> </DL> \section GLS_R R <DL> <DT>Rank</DT> <DD>The number of dimensions of a non-null dataspace.</DD> </DL> <DL> <DT>Reference</DT> <DD> <OL> <LI>An HDF4 object reference</LI> <LI>An HDF4 dataset region reference</LI> </OL> </DD> </DL> <DL> <DT>Reference datatype</DT> <DD> <OL> <LI>An HDF4 datatype whose elements represent references to HDF4 objects.</LI> <LI>An HDF4 datatype whose elements represent references to regions of an HDF4 dataset.</LI> </OL> </DD> </DL> <DL> <DT>Region reference</DT> <DD>See dataset region reference.</DD> </DL> <DL> <DT>Root group</DT> <DD> <P>An HDF4 group that is present in all HDF4 files and that acts as the entry or base point for all other data stored in an HDF4 file.</P> <P>The root group is "the mother of all objects" in an HDF4 file in the sense that all objects (and their attributes) can be discovered, beginning at the root group, by combinations of the following operations:</P> <UL> <LI>Link traversal</LI> <LI>De-referencing of object references</LI> </UL> <P>This discovery is portable and robust with respect to file-internal storage reorganization.</P> </DD> </DL> \section GLS_S S <DL> <DT>Scalar dataspace</DT> <DD>A kind of HDF4 dataspace that has the shape of a singleton, i.e., a set containing a single element. Array variables with this shape store exactly one element.</DD> </DL> <DL> <DT>Selection</DT> <DD> <OL> <LI>A subset of points of an HDF4 dataspace. The subset might be a point selection or a combination (union, intersection, etc.) of hyperslabs.</LI> <LI>A subset of dataset elements associated with a dataspace selection as described under 1.</LI> </OL> </DD> </DL> <DL> <DT>Serialization</DT> <DD> <OL> <LI>The flattening of an N-dimensional array into a 1-dimensional array.</LI> <LI>The encoding of a complex data item as a linear byte stream.</LI> </OL> </DD> </DL> <DL> <DT>Soft link</DT> <DD>A kind of HDF4 link in which the link destination is specified as an HDF4 path name. The path name may or may not refer to an actual object.</DD> </DL> <DL> <DT>Storage layout</DT> <DD>The storage arrangement for dataset elements, links in a group's link collection, or attributes in an object's attribute collection.</DD> </DL> <DL> <DT>String datatype</DT> <DD></DD> </DL> <DL> <DT>Super block</DT> <DD>An HDF4 file format primitive; a block of data which contains information required to access HDF4 files in a portable manner on multiple platforms. The super block contains information such as version numbers, the size of offsets and lengths, and the location of the root group.</DD> </DL> <DL> <DT>SWMR</DT> <DD>Single Writer Multiple Reader, a file access mode in which a single process is permitted to write data to an HDF4 file while other processes are permitted to read data from the same file without the need of inter-process communication or synchronization.</DD> </DL> <DL> <DT>Symbolic link</DT> <DD>An external link or a soft link.</DD> </DL> \section GLS_U U <DL> <DT>User block</DT> <DD>An HDF4 file format primitive that allows one to set aside a fixed-size (at least 512 bytes or any power of 2 thereafter) contiguous range of bytes at the beginning of an HDF4 file for application purposes which will be skipped/ignored by the HDF4 library.</DD> </DL> <DL> <DT>UTF-8</DT> <DD> <P>A variable-length (1-4 bytes per code point) encoding of the Unicode set of code points. This is the encoding supported by HDF4 to represent Unicode strings.</P> <P>The ASCII encoding is a proper subset of UTF-8.</P> </DD> </DL> \section GLS_V V <DL> <DT>Variable-length (sequence) datatype</DT> <DD>A family of HDF4 datatypes whose elements are variable-length sequences of a given datatype.</DD> </DL> <DL> <DT>Virtual Dataset (VDS)</DT> <DD>An HDF4 dataset with virtual storage layout. A dataset whose elements are partially or entirely stored physically in other datasets.</DD> </DL> <DL> <DT>Virtual File Driver (VFD)</DT> <DD></DD> </DL> <DL> <DT>Virtual layout</DT> <DD></DD> </DL> <DL> <DT>Virtual Object Layer (VOL)</DT> <DD></DD> </DL> */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/Overview.dox��������������������������������������������������������������0000664�0000000�0000000�00000003244�15030617045�0017623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /** \mainpage notitle This is the documentation set for HDF4. It includes specifications and documentation of software and tools developed and maintained by <a href="https://www.hdfgroup.org/">The HDF Group</a>. It is impractical to document the entire HDF4 ecosystem in one place, and you should also consult the documentation sets of the many outstanding community projects. For a first contact with HDF4, the best place is to have a look at the \link GettingStarted getting started \endlink page that shows you how to write and compile your first program with HDF4. The \b main \b documentation is organized by documentation flavor. Most technical documentation consists to varying degrees of information related to <em>tasks</em>, <em>concepts</em>, or <em>reference</em> material. As its title suggests, the \link RM Reference Manual \endlink is 100% reference material, while the \link Cookbook \endlink is focused on tasks. The different guide-type documents cover a mix of tasks, concepts, and reference, to help a specific <em>audience</em> succeed. \par Versions Version-specific documentation (see the version in the title area) can be found here: - <a href="https://hdfgroup.github.io/hdf4/develop/index.html">HDF4 <code>develop</code> branch (this site)</a> \par Search If you are looking for a specific function, constant, type, etc., use the search box in the top right-hand corner!\n Otherwise, check out the \link FTS full-text search\endlink. \par Offline reading You can <a href="hdf4-doc.tgz">download</a> it as a tgz archive for offline reading. \par ToDo List There is plenty of <a href="./todo.html">unfinished business</a>. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/UsersGuide.dox������������������������������������������������������������0000664�0000000�0000000�00000052605�15030617045�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** \page UG HDF User Guide <center> HDF Release 4.2.16 \image html HDFG-logo.png "The HDF Group" </center> \ref sec_intro \li \ref subsec_intro_overview \li \ref subsec_intro_what \li \ref subsec_intro_why \li \ref subsec_intro_apis \li \ref subsec_intro_tools \li \ref subsec_intro_platforms \li \ref subsec_intro_hdf5 \ref sec_fund \li \ref subsec_fund_overview \li \ref subsec_fund_format <ul> <li> \ref subsubsec_fund_format_head <li> \ref subsubsec_fund_format_object <li> \ref subsubsec_fund_format_descrip <li> \ref subsubsec_fund_format_group </ul> \li \ref subsec_fund_basic <ul> <li> \ref subsubsec_fund_basic_file <li> \ref subsubsec_fund_basic_open <li> \ref subsubsec_fund_basic_close <li> \ref subsubsec_fund_basic_get </ul> \li \ref subsec_fund_file \li \ref subsec_fund_prog <ul> <li> \ref subsubsec_fund_prog_head <li> \ref subsubsec_fund_prog_defs <li> \ref subsubsec_fund_prog_lang </ul> \ref sec_sdapi \li \ref subsec_sdapi_overview \li \ref subsec_sdapi_data_model <ul> <li> \ref subsubsec_sdapi_data_model_req <li> \ref subsubsec_sdapi_data_model_opt <li> \ref subsubsec_sdapi_data_model_annot </ul> \li \ref subsec_sdapi_interface <ul> <li> \ref subsubsec_sdapi_interface_head <li> \ref subsubsec_sdapi_interface_lib <li> \ref subsubsec_sdapi_interface_tags </ul> \li \ref subsec_sdapi_model <ul> <li> \ref subsubsec_sdapi_model_start <li> \ref subsubsec_sdapi_model_term </ul> \li \ref subsec_sdapi_write <ul> <li> \ref subsubsec_sdapi_write_data <li> \ref subsubsec_sdapi_write_comp <li> \ref subsubsec_sdapi_write_ext </ul> \li \ref subsec_sdapi_read \li \ref subsec_sdapi_info <ul> <li> \ref subsubsec_sdapi_info_file <li> \ref subsubsec_sdapi_info_get <li> \ref subsubsec_sdapi_info_comp <li> \ref subsubsec_sdapi_info_locate <li> \ref subsubsec_sdapi_info_multi <li> \ref subsubsec_sdapi_info_num <li> \ref subsubsec_sdapi_info_index <li> \ref subsubsec_sdapi_info_ref <li> \ref subsubsec_sdapi_info_type <li> \ref subsubsec_sdapi_info_empty <li> \ref subsubsec_sdapi_info_array </ul> \li \ref subsec_sdapi_dims <ul> <li> \ref subsubsec_sdapi_dims_set <li> \ref subsubsec_sdapi_dims_name <li> \ref subsubsec_sdapi_dims_dims <li> \ref subsubsec_sdapi_dims_dimscale <li> \ref subsubsec_sdapi_dims_data </ul> \li \ref subsec_sdapi_ud <ul> <li> \ref subsubsec_sdapi_ud_set <li> \ref subsubsec_sdapi_ud_info <li> \ref subsubsec_sdapi_ud_read </ul> \li \ref subsec_sdapi_predef <ul> <li> \ref subsubsec_sdapi_predef_get <li> \ref subsubsec_sdapi_predef_string <li> \ref subsubsec_sdapi_predef_dims <li> \ref subsubsec_sdapi_predef_range <li> \ref subsubsec_sdapi_predef_fill <li> \ref subsubsec_sdapi_predef_cal </ul> \li \ref subsec_sdapi_ops <ul> <li> \ref subsubsec_sdapi_ops_file <li> \ref subsubsec_sdapi_ops_object <li> \ref subsubsec_sdapi_ops_max <li> \ref subsubsec_sdapi_ops_limits <li> \ref subsubsec_sdapi_ops_open <li> \ref subsubsec_sdapi_ops_array </ul> \li \ref subsec_sdapi_chunk <ul> <li> \ref subsubsec_sdapi_chunk_set <li> \ref subsubsec_sdapi_chunk_cache <li> \ref subsubsec_sdapi_chunk_write <li> \ref subsubsec_sdapi_chunk_read <li> \ref subsubsec_sdapi_chunk_info </ul> \li \ref subsec_sdapi_ghost \li \ref subsec_sdapi_cdf <ul> <li> \ref subsubsec_sdapi_cdf_interface <li> \ref subsubsec_sdapi_cdf_nc </ul> \ref sec_vsapi \li \ref subsec_vsapi_overview \li \ref subsec_vsapi_data_model <ul> <li> \ref subsubsec_vsapi_data_model_fields </ul> \li \ref subsec_vsapi_interface <ul> <li> \ref subsubsec_vsapi_interface_head <li> \ref subsubsec_vsapi_interface_lib <li> \ref subsubsec_vsapi_interface_ids <li> \ref subsubsec_vsapi_interface_model <li> \ref subsubsec_vsapi_interface_start <li> \ref subsubsec_vsapi_interface_term </ul> \li \ref subsec_vsapi_create \li \ref subsec_vsapi_write <ul> <li> \ref subsubsec_vsapi_write_create <li> \ref subsubsec_vsapi_write_data </ul> \li \ref subsec_vsapi_read <ul> <li> \ref subsubsec_vsapi_read_init <li> \ref subsubsec_vsapi_read_data </ul> \li \ref subsec_vsapi_search <ul> <li> \ref subsubsec_vsapi_search_find <li> \ref subsubsec_vsapi_search_getid <li> \ref subsubsec_vsapi_search_num <li> \ref subsubsec_vsapi_search_exist <li> \ref subsubsec_vsapi_search_get <li> \ref subsubsec_vsapi_search_internal <li> \ref subsubsec_vsapi_search_file </ul> \li \ref subsec_vsapi_attr <ul> <li> \ref subsubsec_vsapi_attr_query <li> \ref subsubsec_vsapi_attr_set <li> \ref subsubsec_vsapi_attr_get <li> \ref subsubsec_vsapi_attr_total_num <li> \ref subsubsec_vsapi_attr_num <li> \ref subsubsec_vsapi_attr_find <li> \ref subsubsec_vsapi_attr_info <li> \ref subsubsec_vsapi_attr_isattr </ul> \li \ref subsec_vsapi_info <ul> <li> \ref subsubsec_vsapi_info_inquire <li> \ref subsubsec_vsapi_info_getblock <li> \ref subsubsec_vsapi_info_query <li> \ref subsubsec_vsapi_info_other <li> \ref subsubsec_vsapi_info_field </ul> \ref sec_vapi \li \ref subsec_vapi_overview \li \ref subsec_vapi_data_model <ul> <li> \ref subsubsec_data_model_class <li> \ref subsubsec_data_model_org <li> \ref subsubsec_data_model_ex </ul> \li \ref subsec_vapi_interface <ul> <li> \ref subsubsec_vapi_interface_lib <li> \ref subsubsec_vapi_interface_id </ul> \li \ref subsec_vapi_model <ul> <li> \ref subsubsec_vapi_model_start <li> \ref subsubsec_vapi_model_term </ul> \li \ref subsec_vapi_write <ul> <li> \ref subsubsec_vapi_write_set <li> \ref subsubsec_vapi_write_add <li> \ref subsubsec_vapi_write_insert <li> \ref subsubsec_vapi_write_group </ul> \li \ref subsec_vapi_read <ul> <li> \ref subsubsec_vapi_read_locate <li> \ref subsubsec_vapi_read_data </ul> \li \ref subsec_vapi_delete <ul> <li> \ref subsubsec_vapi_delete_file <li> \ref subsubsec_vapi_delete_obj </ul> \li \ref subsec_vapi_attr <ul> <li> \ref subsubsec_vapi_attr_getvers <li> \ref subsubsec_vapi_attr_set <li> \ref subsubsec_vapi_attr_find <li> \ref subsubsec_vapi_attr_num <li> \ref subsubsec_vapi_attr_info1 <li> \ref subsubsec_vapi_attr_info2 <li> \ref subsubsec_vapi_attr_get1 <li> \ref subsubsec_vapi_attr_get2 </ul> \li \ref subsec_vapi_obsolete <ul> <li> \ref subsubsec_vapi_obsolete_next <li> \ref subsubsec_vapi_obsolete_inquire </ul> \ref sec_dfr8api \li \ref subsec_dfr8api_overview <ul> <li> \ref subsubsec_dfr8api_overview_req <li> \ref subsubsec_dfr8api_overview_opt <li> \ref subsubsec_dfr8api_overview_comp </ul> \li \ref subsec_dfr8api_interface <ul> <li> \ref subsubsec_dfr8api_interface_lib </ul> \li \ref subsec_dfr8api_write <ul> <li> \ref subsubsec_dfr8api_write_store <li> \ref subsubsec_dfr8api_write_add <li> \ref subsubsec_dfr8api_write_comp <li> \ref subsubsec_dfr8api_write_ref </ul> \li \ref subsec_dfr8api_read <ul> <li> \ref subsubsec_dfr8api_read_data <li> \ref subsubsec_dfr8api_read_query <li> \ref subsubsec_dfr8api_read_ref <li> \ref subsubsec_dfr8api_read_next </ul> \li \ref subsec_dfr8api_info <ul> <li> \ref subsubsec_dfr8api_info_query <li> \ref subsubsec_dfr8api_info_ref <li> \ref subsubsec_dfr8api_info_refpal </ul> \li \ref subsec_dfr8api_back <ul> <li> \ref subsubsec_dfr8api_back_long_name <li> \ref subsubsec_dfr8api_back_new_tag </ul> \ref sec_df24api \li \ref subsec_df24api_overview \li \ref subsec_df24api_data_model <ul> <li> \ref subsubsec_df24api_data_model_req <li> \ref subsubsec_df24api_data_model_opt </ul> \li \ref subsec_df24api_interface <ul> <li> \ref subsubsec_df24api_interface_lib </ul> \li \ref subsec_df24api_write <ul> <li> \ref subsubsec_df24api_write_put <li> \ref subsubsec_df24api_write_set <li> \ref subsubsec_df24api_write_comp </ul> \li \ref subsec_df24api_read <ul> <li> \ref subsubsec_df24api_read_data <li> \ref subsubsec_df24api_read_dims <li> \ref subsubsec_df24api_read_mod <li> \ref subsubsec_df24api_read_24 <li> \ref subsubsec_df24api_read_info </ul> \li \ref subsec_df24api_info <ul> <li> \ref subsubsec_df24api_info_num <li> \ref subsubsec_df24api_info_ref </ul> \ref sec_grapi \li \ref subsec_grapi_overview \li \ref subsec_grapi_data_model <ul> <li> \ref subsubsec_grapi_data_model_req <li> \ref subsubsec_grapi_data_model_opt </ul> \li \ref subsec_grapi_interface <ul> <li> \ref subsubsec_lib </ul> \li \ref subsec_grapi_head \li \ref subsec_grapi_model <ul> <li> \ref subsubsec_grapi_model_start <li> \ref subsubsec_grapi_model_term </ul> \li \ref subsec_grapi_write <ul> <li> \ref subsubsec_grapi_write_data <li> \ref subsubsec_grapi_write_comp <li> \ref subsubsec_grapi_write_set <li> \ref subsubsec_grapi_write_ext </ul> \li \ref subsec_grapi_read <ul> <li> \ref subsubsec_grapi_read_data <li> \ref subsubsec_grapi_read_set </ul> \li \ref subsec_grapi_diff \li \ref subsec_grapi_info <ul> <li> \ref subsubsec_grapi_info_file <li> \ref subsubsec_grapi_info_getim <li> \ref subsubsec_grapi_info_idtoref <li> \ref subsubsec_grapi_info_reftoindex <li> \ref subsubsec_grapi_info_nametoindex <li> \ref subsubsec_grapi_info_getcomp <li> \ref subsubsec_grapi_info_bemap </ul> \li \ref subsec_grapi_attr <ul> <li> \ref subsubsec_grapi_attr_predefine <li> \ref subsubsec_grapi_attr_set <li> \ref subsubsec_grapi_attr_query <li> \ref subsubsec_grapi_attr_read </ul> \li \ref subsec_grapi_data <ul> <li> \ref subsubsec_grapi_data_getlutid <li> \ref subsubsec_grapi_data_getnluts <li> \ref subsubsec_grapi_data_luttoref <li> \ref subsubsec_grapi_data_getlutinfo <li> \ref subsubsec_grapi_data_writelut <li> \ref subsubsec_grapi_data_reqlut <li> \ref subsubsec_grapi_data_readlut </ul> \li \ref subsec_grapi_image <ul> <li> \ref subsubsec_grapi_image_diff <li> \ref subsubsec_grapi_image_setchunk <li> \ref subsubsec_grapi_image_writechunk <li> \ref subsubsec_grapi_image_readchunk <li> \ref subsubsec_grapi_image_getchunk <li> \ref subsubsec_grapi_image_chunkcache </ul> \ref sec_dfpapi \li \ref subsec_dfpapi_overview \li \ref subsec_dfpapi_model \li \ref subsec_dfpapi_api <ul> <li> \ref subsubsec_dfpapi_api_lib </ul> \li \ref subsec_dfpapi_write <ul> <li> \ref subsubsec_dfpapi_write_pal <li> \ref subsubsec_dfpapi_write_ref </ul> \li \ref subsec_dfpapi_read <ul> <li> \ref subsubsec_dfpapi_read_get <li> \ref subsubsec_dfpapi_read_ref <li> \ref subsubsec_dfpapi_read_next </ul> \li \ref subsec_dfpapi_other <ul> <li> \ref subsubsec_dfpapi_other_query <li> \ref subsubsec_dfpapi_other_num </ul> \li \ref subsec_dfpapi_back \ref sec_anapi \li \ref subsec_anapi_overview \li \ref subsec_anapi_model <ul> <li> \ref subsubsec_anapi_model_desc <li> \ref subsubsec_anapi_model_file <li> \ref subsubsec_anapi_model_object <li> \ref subsubsec_anapi_model_term </ul> \li \ref subsec_anapi_interface <ul> <li> \ref subsubsec_anapi_interface_lib <li> \ref subsubsec_anapi_interface_type <li> \ref subsubsec_anapi_interface_model <li> \ref subsubsec_anapi_interface_access <li> \ref subsubsec_anapi_interface_term </ul> \li \ref subsec_anapi_write \li \ref subsec_anapi_read <ul> <li> \ref subsubsec_anapi_read_select <li> \ref subsubsec_anapi_read_read </ul> \li \ref subsec_anapi_info <ul> <li> \ref subsubsec_anapi_info_num <li> \ref subsubsec_anapi_info_len <li> \ref subsubsec_anapi_info_type_num <li> \ref subsubsec_anapi_info_list <li> \ref subsubsec_anapi_info_tag <li> \ref subsubsec_anapi_info_tag_ref <li> \ref subsubsec_anapi_info_id <li> \ref subsubsec_anapi_info_tag_type <li> \ref subsubsec_anapi_info_obj </ul> \ref sec_dfanapi \li \ref subsec_dfanapi_overview \li \ref subsec_dfanapi_interface <ul> <li> \ref subsubsec_dfanapi_interface_lib <li> \ref subsubsec_dfanapi_interface_tags </ul> \li \ref subsec_dfanapi_model \li \ref subsec_dfanapi_write <ul> <li> \ref subsubsec_dfanapi_write_label <li> \ref subsubsec_dfanapi_write_descr <li> \ref subsubsec_dfanapi_write_obj_label <li> \ref subsubsec_dfanapi_write_obj_descr </ul> \li \ref subsec_dfanapi_read <ul> <li> \ref subsubsec_dfanapi_read_label <li> \ref subsubsec_dfanapi_read_descr <li> \ref subsubsec_dfanapi_read_obj_label <li> \ref subsubsec_dfanapi_read_obj_descr </ul> \li \ref subsec_dfanapi_maint <ul> <li> \ref subsubsec_dfanapi_maint_clear </ul> \li \ref subsec_dfanapi_ref_num <ul> <li> \ref subsubsec_dfanapi_ref_num_last <li> \ref subsubsec_dfanapi_ref_num_query <li> \ref subsubsec_dfanapi_ref_num_locate </ul> \ref sec_dfsdapi \li \ref subsec_dfsdapi_overview \li \ref subsec_dfsdapi_model <ul> <li> \ref subsubsec_dfsdapi_model_req <li> \ref subsubsec_dfsdapi_model_opt </ul> \li \ref subsec_dfsdapi_single <ul> <li> \ref subsubsec_dfsdapi_single_lib <li> \ref subsubsec_dfsdapi_single_ids </ul> \li \ref subsec_dfsdapi_write <ul> <li> \ref subsubsec_dfsdapi_write_create <li> \ref subsubsec_dfsdapi_write_type <li> \ref subsubsec_dfsdapi_write_overwrite <li> \ref subsubsec_dfsdapi_write_multi <li> \ref subsubsec_dfsdapi_write_prevent <li> \ref subsubsec_dfsdapi_write_reset </ul> \li \ref subsec_dfsdapi_read <ul> <li> \ref subsubsec_dfsdapi_read_get <li> \ref subsubsec_dfsdapi_read_type <li> \ref subsubsec_dfsdapi_read_num <li> \ref subsubsec_dfsdapi_read_ref </ul> \li \ref subsec_dfsdapi_slabs <ul> <li> \ref subsubsec_dfsdapi_slabs_access <li> \ref subsubsec_dfsdapi_slabs_write <li> \ref subsubsec_dfsdapi_slabs_read </ul> \li \ref subsec_dfsdapi_predine <ul> <li> \ref subsubsec_dfsdapi_predine_write <li> \ref subsubsec_dfsdapi_predine_read <li> \ref subsubsec_dfsdapi_predine_write_dims <li> \ref subsubsec_dfsdapi_predine_read_dims </ul> \ref sec_error \li \ref subsec_error_overview \li \ref subsec_error_api \li \ref subsec_error_report <ul> <li> \ref subsubsec_error_report_print <li> \ref subsubsec_error_report_recent <li> \ref subsubsec_error_report_descr <li> \ref subsubsec_error_report_clear </ul> \ref sec_perf \li \ref subsec_perf_overview \li \ref subsec_perf_enhance <ul> <li> \ref subsubsec_perf_enhance_large <li> \ref subsubsec_perf_enhance_share <li> \ref subsubsec_perf_enhance_fill <li> \ref subsubsec_perf_enhance_fake </ul> \li \ref subsec_perf_chunk <ul> <li> \ref subsubsec_perf_chunk_what <li> \ref subsubsec_perf_chunk_rw <li> \ref subsubsec_perf_chunk_nocomp <li> \ref subsubsec_perf_chunk_compress <li> \ref subsubsec_perf_chunk_size <li> \ref subsubsec_perf_chunk_space </ul> \li \ref subsec_perf_tune <ul> <li> \ref subsubsec_perf_tune_data <li> \ref subsubsec_perf_tune_linked <li> \ref subsubsec_perf_tune_unlim </ul> \ref sec_utils \li \ref subsec_utils_overview \li \ref subsec_utils_dump <ul> <li> \ref subsubsec_utils_dump_desc <li> \ref subsubsec_utils_dump_cl </ul> \li \ref subsec_utils_hdiff <ul> <li> \ref subsubsec_utils_hdiff_desc <li> \ref subsubsec_utils_hdiff_cl <li> \ref subsubsec_utils_hdiff_ex </ul> \li \ref subsec_utils_vshow <ul> <li> \ref subsubsec_utils_vshow_desc <li> \ref subsubsec_utils_vshow_cl <li> \ref subsubsec_utils_vshow_ex </ul> \li \ref subsec_utils_import <ul> <li> \ref subsubsec_utils_import_desc <li> \ref subsubsec_utils_import_cl <li> \ref subsubsec_utils_import_struct </ul> \li \ref subsec_utils_r8tohdf <ul> <li> \ref subsubsec_utils_r8tohdf_desc <li> \ref subsubsec_utils_r8tohdf_cl <li> \ref subsubsec_utils_r8tohdf_ex </ul> \li \ref subsec_utils_r24df8 <ul> <li> \ref subsubsec_utils_r24df8_desc <li> \ref subsubsec_utils_r24df8_cl <li> \ref subsubsec_utils_r24df8_ex </ul> \li \ref subsec_utils_paltohdf <ul> <li> \ref subsubsec_utils_paltohdf_desc <li> \ref subsubsec_utils_paltohdf_cl </ul> \li \ref subsec_utils_hdftor8 <ul> <li> \ref subsubsec_utils_hdftor8_desc <li> \ref subsubsec_utils_hdftor8_cl <li> \ref subsubsec_utils_hdftor8_ex </ul> \li \ref subsec_utils_hdftopal <ul> <li> \ref subsubsec_utils_hdftopal_desc <li> \ref subsubsec_utils_hdftopal_cl </ul> \li \ref subsec_utils_ristosds <ul> <li> \ref subsubsec_utils_ristosds_desc <li> \ref subsubsec_utils_ristosds_cl <li> \ref subsubsec_utils_ristosds_ex </ul> \li \ref subsec_utils_hdf24hdf8 <ul> <li> \ref subsubsec_utils_hdf24hdf8_desc <li> \ref subsubsec_utils_hdf24hdf8_cl </ul> \li \ref subsec_utils_hdfcomp <ul> <li> \ref subsubsec_utils_hdfcomp_desc <li> \ref subsubsec_utils_hdfcomp_cl <li> \ref subsubsec_utils_hdfcomp_ex </ul> \li \ref subsec_utils_hdfpack <ul> <li> \ref subsubsec_utils_hdfpack_desc <li> \ref subsubsec_utils_hdfpack_cl <li> \ref subsubsec_utils_hdfpack_ex </ul> \li \ref subsec_utils_hrepack <ul> <li> \ref subsubsec_utils_hrepack_desc <li> \ref subsubsec_utils_hrepack_cl </ul> \li \ref subsec_utils_vmake <ul> <li> \ref subsubsec_utils_vmake_desc <li> \ref subsubsec_utils_vmake_cl <li> \ref subsubsec_utils_vmake_ex </ul> \li \ref subsec_utils_hdfls <ul> <li> \ref subsubsec_utils_hdfls_desc <li> \ref subsubsec_utils_hdfls_cl <li> \ref subsubsec_utils_hdfls_ex </ul> \li \ref subsec_utils_hdfed <ul> <li> \ref subsubsec_utils_hdfed_desc <li> \ref subsubsec_utils_hdfed_cl </ul> \li \ref subsec_utils_formats \li \ref subsec_utils_hdf2gif <ul> <li> \ref subsubsec_utils_hdf2gif_desc <li> \ref subsubsec_utils_hdf2gif_cl <li> \ref subsubsec_utils_hdf2gif_struct <li> \ref subsubsec_utils_hdf2gif_build </ul> \li \ref subsec_utils_h4cc <ul> <li> \ref subsubsec_utils_h4cc_desc <li> \ref subsubsec_utils_h4cc_cl <li> \ref subsubsec_utils_h4cc_ex </ul> \li \ref subsec_utils_h4fc <ul> <li> \ref subsubsec_utils_h4fc_desc <li> \ref subsubsec_utils_h4fc_cl <li> \ref subsubsec_utils_h4fc_ex </ul> \li \ref subsec_utils_h4redploy <ul> <li> \ref subsubsec_utils_h4redploy_desc <li> \ref subsubsec_utils_h4redploy_cl </ul> \ref sec_raw \li \ref subsec_raw_overview \li \ref subsec_raw_retrieve \li \ref subsec_raw_add_an <ul> <li> \ref subsubsec_add_an_data </ul> \li \ref subsec_raw_add_sd <ul> <li> \ref subsubsec_add_sd_data <li> \ref subsubsec_add_sd_attr <li> \ref subsubsec_add_sd_dfsd <li> \ref subsubsec_add_sd_sds </ul> \li \ref subsec_raw_add_gr <ul> <li> \ref subsubsec_add_gr_img <li> \ref subsubsec_add_gr_attr </ul> \li \ref subsec_raw_add_v <ul> <li> \ref subsubsec_raw_add_v_data </ul> \li \ref subsec_raw_add_vs <ul> <li> \ref subsubsec_add_vs_data <li> \ref subsubsec_add_vs_attr </ul> \ref sec_appenda \li \ref subsec_appenda_overview \li \ref subsec_appenda_type \ref sec_appendb \li \ref subsec_appendb_install <ul> <li> \ref subsubsec_appendb_install_source <li> \ref subsubsec_appendb_install_build </ul> \ref sec_appendc \li \ref subsec_appendc_attr \li \ref subsec_appendc_store <ul> <li> \ref subsubsec_appendc_store_attr <li> \ref subsubsec_appendc_store_vg </ul> \par Don't like what you see? - You can help to improve this User Guide Complete the survey linked near the top of this page!\n We treat documentation like code: Fork the <a href="https://github.com/HDFGroup/hdf4">HDF4 repo</a>, make changes, and create a <a href="https://github.com/HDFGroup/hdf4/pulls">pull request</a> !\n */���������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/������������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0016727�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/���������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0020527�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDIgetcoordvar.png�������������������������������0000664�0000000�0000000�00000342620�15030617045�0025247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ã��Õ���«Ð0Ô���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýÿOÓ×ÿÿóôô“%„Ä–<²~pYÈ'˜-$h¶ð6:Óš0nÁ/tYT4ëÇ>·›Í”κÑO}ˆ(*Õ {ƒ“î±ò’>}Ô!¬ ;)ò¥¯Ê³Há~ýÜOi¡--–ÞïmÏýÎí’œÌ{i»Ósn·sÎíœs»Ý²@AAADZ!cœ ‚ ‚ ‚ Ò ãAAA‘fÈ'‚ ‚ ‚ ˆ4CÆ8AAAA¤2Æ ‚ ‚ ‚ "Í1NAAAi†Œq‚ ‚ ‚ ‚H3dŒË@VV–¤BJ"– ¯´AAÄj‡VÅ2 Ÿ ÄPRe–dž ‚ ‚à¶N•RV ­Še ™†!峑 ¤Ê,É<¡&˜<K-AAð”y9™ÏÒ*@ÒÝi‘I¤Ê,É<¡&H‚ B=H™—“ù,­d ÝF™DªÌ’Ìj‚ô ‚ Ôƒ”y9™ÏÒ*@ÒÝi‘I¤Ê,É<¡&H‚ B=H™—“ù,­d ÝF™DªÌ’Ìj‚ô ‚ Ôƒ”y9™ÏÒ*@ÒÝi‘I¤Ê,É<¡&H‚ B=H™—“ù,­d ÝF™DªÌ’Ìj‚ô ‚ Ôƒ”y9™ÏÒ*@ÒÝi‘I¤Ê,É<¡&H‚ B=H™—“ù,­d ÝF™DªÌ’Ìj‚ô ‚ Ôƒ”y9™ÏÒ*@ÒÝi‘I¤Ê,É<¡&H‚ B=H™—“ù,­d ÝF™DªÌ’Ìj‚ô ‚ ÔÃâ¼,Àçz «Õ:_~À„0ÿºb6k/žŒúħE’™Ói RS´#”†T™%™'ÔéAA¨‡ˆyùÕï¨{O ÝÍǘð3³ÛwW¶ähïËÊþ';þ^0È“™Ói RS´#”†T™%™'ÔéAA¨‡ÅyYÀŒã N™D<øÊÈMì[Ï ñu(8Ú ‡ÓŠÆýztOÍ›ãÉÌé´ )‹)ZˆJCªÌ’Ìj‚ô ‚ ÔÃâ¼ü οÅõ‘)î­n34âß³ÖelV|mË·¸àðÞ‘ÌœN«�²˜¢…¡4¤Ê,É<¡&H‚ B=,ÎˑƸຆÝëéo`“ÁŽ™À«3xfþ­Á÷$3§Ó*@¤,¦h!F( ©2K2O¨ Ò‚ ‚P‹ó²€W}øì\'ž:{q­úýÀ©¸¦à4ºÆÙ©¸øϯПº wÐi<™9V2 e1E 1BiH•Y’yBM>A„zˆ˜—…Iô5~Š<MVàõ¬œ]0ôMBÆ`o=‡ê²(×Ý‚ÓG>ã%¢á}.ØC!ð­6 Lý üã°ýÛ7‚ý€b„Ò*³$ó„š } ‚ õ°t^öÃ;dí:;†¼!ÿñØ$3§Ó*@"Þ [ÝGØ¢»Çļ7àîÄ™-ÿ¼/+k=ŠOþ,é:Ad©2K2O¨ Ò‚ ‚P‹ó²€©?þÀpØ!j,„á?ðESÏ, ?óM§®ÁÈE'"<CÛ¾ ÷h Žá¦ã)lŸC×=ø3-Ä¥!UfIæ 5Aú@Aêaq^žƒç®‡Ïÿ“ɧüˆó‡õ¸ë™ |"™9V2Þð‚ó*Î^&0eÓ£0àgð6ª,#ó¯{îáì…ÇbÓBŒPRe–džP¤A¡çe–¶ì0ÖŠÏ쵸eíaXÈÏ,á aŒ ChÙø»f“Ž™ ‰þ¬_µÎ¿'™N#ˆL"UfIæ 5Aú@Aêaq^fÆx5Þ.Ú­V§lGÉÆcdŒgšˆ†õ†Ï èz:ˆ¾k5(`§âš"Ôv ô1ôèõ¸åN>Ad©2K2O¨ Ò‚ ‚P‹ó23ƿŇ/ø ¾%c<ÓD6ü,¼}M(Ï[x=+ë-”záü·ß@CõnhËÏ¢Í9x7-Ä¥!UfIæ 5Aú@Aêaq^0Õý Ž…ÜŒc!8aúô tS�·Ì²´áø½Áný7ìC,Ÿb„Ò*³$ó„š } ‚ õ>/ #-ؽñ0Œ=NxCÁ¹ÌÁ7jG{ݼYÞ‚‘àŸ’™Ói  ?õ'ï‚qžÃñ‡'ðOZˆJCªÌ’Ìj‚ô ‚ ÔCļ,Œ¢«¶ñµ,M.жýÄósï‹Ð-’ÌœN«�ˆhxÏÏÐ>‡æ˜áïçKóùÐÝ ¼b„Ò*³$ó„š } ‚ õ=/ Þ^4–¿3o‡Í;(od®ÈÁ7Š$3§Ó*@"ÞcAåÚ¨ÎZRrQi!cœP&Re–džP¤A¡bÎËÂ\Ö64ÕŸ…NwõMm°º¦–ø’'3§Ó*@"^4Æ«Þ.Âö˜á¤ÕdŒ EªÌ’Ìj‚ô ‚ ÔÃâ¼,`jpÏ£-î(„烤�n™%¢á=÷pöÂc̸͜ȳdŒ EªÌ’Ìj‚ô ‚ ÔÃâ¼<Og¾m�«Õ§<@û·Mè¤Ôf™%¢á§ºqæ˜cqwQfðÌTƒ“Ý'ZˆJCªÌ’Ìj‚ô ‚ ÔÃâ¼ÌòŒÆZñ™½·¬=LyÆ3MDà ÃhÙ½UÆ_áôF&5|#°·ë¡}s/ZFæÿ–L§D&‘*³$ó„š } ‚ õ°8/“1®"~ã]§Q a´¹EÛ‚~âùÈtšë«ÚNΓé4‚È$Re–džP¤A¡çeÑp¿zfƒÏ±˜…ç×»x@ÆxfYÒðÂ$ú?E^À /k‘WÞ„>ïb§&Ói‘I¤Ê,É<¡&H‚ B=°yÙe½‹Î xì]è|:?ø'èh1£¥Ã ÿ¢?²ðr“ÁçdætZÈ@솟ƒÏõo´5ÕC§ÓAW mÖaø¢|Éi!F( ©2K2O¨ Ò‚ ‚Pl^>Tº•ŸnÃû9diŠp¢Õ ]áºÀß²²Ö¡ ¶ã1âƒ%3§Ó*@"~jÏg‚qF10è ü“b„Ò*³$ó„š } ‚ µ æå¯¬ãAñ7QÞò¶ú±½úŒ&LÆs¨Þ²Fç«àgIfN§U€ D4¼§ †oo¡'føûùÒÓ~†Î·ÓBŒPRe–džP¤A¡æóòÇTÐÏE¥eŽïë‚o~Œ´Ôá{‡/ø¼H2s:­d ¢á=T®ö.¬c)Ï8¡L¤Ê,É<¡&H‚ B-ÌŸŒ_°yÂŒñLuŸÄ›Ùù( å‹ N2s:­d ¢áÉ'TŽT™%™'ÔéAA¨6/Ÿ9Ù„ËÕ…â¿‹Pgóþ¿`©ý0K“ÿ>|ûã<ÑðžãÖ¯cˆáÓ¿€àù·Ð5uB™H•Y’yBM>A„z`ó²×þŽ–íAõ÷1º`ÔùáÁÄÔ�ZŽœ‡uj©µ—ÌœN«�ˆhx¿/—ËG'"LabrÞéŸb„Ò*³$ó„š } ‚ õ e^Næ³´ ˆ†Ÿy׋ƒ„ ¸žÏ;ýÓBŒPRe–džP¤A¡–ÌËþq Xï¢Åd‚¹í£¾¸7 “™Ói  ﹋êBËüã•’T“Ï8¡P¤Ê,É<¡&H‚ B=DÌ˾Ǹ\þ4âkìõ@ÉùgºžÇ4È“™Ói  OÜ•)³SpÙ[HÛ÷ÛÀDppšÁÄ@/¬¶~Œú"\ÌjBª<“>A?,ÎË,…YÖdi]´ußGù¾¯ÑÜxå›uè&Ÿq~ˆhø©Çèø¥.—k±8 ±F6ÇpðµL ZˆJ#Rf¼²éñÞn:ÆÄa‹½ô]g>BŽø¾,6€ëÐá^tÝ ™'ÔD´>ø\6§¬¿ `"0W ðO ÂfíÅ“¨ëm¤AÁ‹ó²C 4…_ Ç3 xîáì…ǘà ž™ÎPžqžˆhxÏ/ý¼¸ ”ŸÑX±{Û\‹0-Ä¥)³Sp4}³34 ù1ÒV…õâ{²4ïãèM;œ¶&ì×u‹ïœ‡džPKäùÕï¨{O ÝÍǘð³ßwW¶ähïÍÊþ';þ^˜ H‚ ‚çe¯úPTe‡=†\‘Kò‘S¨‡NÆù!¢áã^SÏ#cœP2+ àdzm öÔo¨+\'¾GƒõUí ¼> ËY#ÁÛê$󄚈”g3Ž+8e˜¿%Â^¹‰}ë™!¾G[ápZѸ_¿p½ô ‚ ø!r^ž†«û*̶˜÷f´ÕÑíšþ=’dætZÈ@DÃ{~†nO t:]XÑÃpËïÒ ZˆŠ#Bf#Œñ¸ZöÍ_O×lƒÁ< œ0u{Á`'™'ÔD¤<¿‚óÇoq}$dŠ{`«Û<øeýXÆXÚË9x,ßâBðzéAAðÃëçeì½—É®£U€ D4¼ß GçM˜oõ¸¢8QÇc ycç§…¡4"eö%ú §p®ë œ}WQ]ÀNÅס ¶38HÍÂÓs§n-Þ !™'ÔD¤<Gã‚ëv®§¿M;f¯Îà™ù{´ßCú@Aü>/ ÞG¸rtwTf¬m(ÊÝ€MvDßTOfN§U€ DtšÓˆ­v-]4HjîaäÏùççÿ(h!F(h™¼½h\Hû ANéôyg!Œ÷¡µá(Ê´ŸB×6ˆW9É<¡&"å™ù—5â³sxêìŵê÷z¡)8®ñùñ_ðü ý©Ûp'pÒ‚ ‚à‡ÅyùœÆ‘iÍ"Ê[ÐêÆPXÖ öúJ¡U€ „7¼0ÖŽª7ßGåùF|³÷SèÚÑ}Å„û]&4u¾¾k‘d: 2IL™õ{0dÿ7¬ö¿à ܉É<¡&–ȳ0‰¾ÆO‘Ø”KÎ.ú&!c°·žCuÙ”ënÁé›×Ò‚ ‚à‡Åyyã]:l«½gx–,—¦ýGaê‘!‹‘ÌœN«�ˆlx/ìß…–g3ÃK_ÝKàw6ã³ïY8üHh!F(H™õàÇó% #y…aÇŸMP%‘ò,`ê?0,øá²ÃjµcÈ»˜Ö/„0üþ �nAÁ‘óò &žüCÁ ôy<°›oÀNÑÔù!¼á…ñ.èŠ×^‹,o¢¼ex‰ÑþY‚P‘2;Š»º8ßl‚ɧ4ŸÃaÝÏói!DHæ 5)ÏsðÜÕãðùcëB üˆó‡õ¸ë™ßš%} ‚ ~X2/ SpõÞC‹ÉŒ‹ó`b‘ÌœN«�oøEŸñð²yå—áˆØU™'™N#ˆL)³£°Tæ†Ézì²¶2˜£Q„=„Zˆ”g)ý0Ö†É~̲ö0,dŒAwDÌËþ¿Ð~t>þËÂr? ¾%œdætZÈ@dÃOÃõ› C3±ºh)ÉtAd’H™ñª"m2]>ÄÆê»dŒª$Rž™1^·‹¶ÅЃPÙŽ’ÇÈ'‚ Yœ—g1f9‚õâsVv1*tça4™ÐÜxå›uè¦kêü e1E 1BiDʬhŒŸ5 !œ¹Ç¸pöã„*‰”çÈâ±ñÁqá[2Æ ‚ ‚Cçeq¾6” kýA´<›¾Æ˜Á3Ó|c®OfN§U€ D4üÌ ¸^, Øa®çòtAd’H™@÷™/a‹GŸ!<3ãÓ“]ÀP%‘ò,`ªû³ŒÄj(8aúô‹…uÒ‚ ‚à‡Åy™¥+m@QUÈÕRÀÌÓfìÎ[+èGb®}“™Ói  ﹋ê.½šXR‚jËhðM‹ÐBŒP‘2ëÇHËl¬ºŒ§G| CðaÔ~uÚˆà…$󄚈–ga¤»7†±Ç•æo¾Q;ÚëvàÍòŒÿDú@Aü1/ “°››Ñáb'ã¢1>ЂšòƒÐߎ\óIfN§U€ D4¼Ç‚ʵaNþ %•dŒ* Zf…ñNÔ¬ ¼®É-ÂöÀÔ‡ÈÏÖÌË~Ôî!É<¡&–ȳ0Š®Ú¢ù`/šÜ`<…í(Éϙׇ¬·QvrNú ù6¥B… *Tä+°Ã%Ç´™M0·=ÀSЦÎ ?õ¿ô‡%†ËÓNœ;T‡ûî¥{(ÉtAd’¥2; o_ÊÙµñoáE“÷)£"N.ý<A(—Xò,x{ÑXþNdôUV4ï ¼±Þ0… }ÏíG}+ ^Û§z‘Œ™@írñûüÁRû!²Åרë’ótt2Î ïy�㥟aµZÃÊÏh¬xŸòŒª žÌ ¾aXÛ.¡^§ƒNW¦¶Ãå[ÙdžPqå™å%µ¶¡©þ¬¨gQßÔ«kŠæ�™á¹ý¨o¥ÁkûñT/’1"¨]î‹£Ãæ²S0›a2™Äò료¢©óEDÃǽ¦ž‡½m.ZˆŠ'Rf½]"בÌàùÀ0p#T‰Ty&}ÏíG}+ ^Û§z‘Œ™@ír·øû"³Ÿ,?sJ2mCZ, ïùº=5ÐNCEÃuÜÁ|æ¡”P‘2û†‹hï ¿ Uzná[C¥6#TI¤< ˜Äóåw§ <Ä ES—žÛúV¼¶Oõ"#2Úånñ÷±<ãÿÄnݰt÷,¬k{:ÌÐíþ'ES版†÷{0ñÒ‡‰+,-f˜Ìmè´»à‹³8£”P‘2; KenàµåÊÚÊPZ’yB]DÊó<Mø¶ýAä†TDy€öo›ÐIyÆeçö£¾•¯íÇS½HƈL v¹‹ø}>;Kß ¼¶XÞÂãÄ ã–LÛË@Dà “è3ìBND§­CþÞf8bXäÉtAd’H™%cœXÝDÊ3»ºvkÃd?fY{xáÚ{&’‡çö£¾•¯íÇS½HƈL v¹[òûü#°…b"Õ_Å‘LÛË@xà N#¶®ÉCIå—hlfŽþb1~‹ãÚ"ì¦�n„ ˆ”Ùxpëwx–»–+Œá×[ÿ&cœP%‘òLÆxºá¹ý¨o¥ÁkûñT/’1"¨]î–ü>JmÆ?á /¸oâÀÑ» †Ga¤ g˜7Æ…)LL¾ ¼N)¡4"eö&'–FˆŽd/'< »ˆ$󄚈”gÑp¿z–ú‘-2 ϯwñ€ŒqYà¹ý¨o¥ÁkûñT/’1"¨]î"~¥6Sá ÏòË6ª!Üg°ûÎWVAß|­«ÆÎ÷'Ói‘I2ëwÁz« ^/\ö> v g0áèD‹©Ž1Y¯ð¯ÌËó4\ֻ蘀ÇޅΧã¢ü ðO8ÐÑbFK‡a<…—“˜ >“>Hƒçö£¾•¯íÇS½HƈL v¹[ü}”ÚL1D4|ÜÔfá%•–ÑÀÛÙ3A( &³î¶c(=xŸnÙˆ )¨EëÓ(Ôe\S„Ú®Ø)ÏHæ 5ÁäYp·áPé>T~º ïçhò¢Õ ]áºy}ÈZ‡‚ÚNŒÇPÒiðÜ~Ô·ÒàµýxªÉ‘ Ô.w‹¿R›)†ˆ†pe_ŽG¤6‹.z˜ìóÙi %”“Ùný÷°NÌo[S–¿¬¨ÿ Õç/Ãdj†ñ|5¶ì¼'„Êaò<ÕmÀWÖñ ¿ø›(oy [ýÇØ^}Æ@Üs¨Þ²Fç¼{R8¤Òà¹ý¨o¥ÁkûñT/’1"¨]î¥6S ‘ Ÿˆí"4JƒÉ¬å¬޹`$uŒjÂŽïµb$$øÂ0ZŽ]ß|ƒdžPLžçwȧ‚Æ8»ù4Ç÷uh 9kø1ÒR‡ïeÚE'á¹ý¨o¥ÁkûñT/’1"¨]î"~¥6S ?ó®ñ¼eƒp=Ÿ_”%Ói‘I˜ÌÚ.\í•{Ñ÷Œ¡ûD²ó?„V»%ù9éÌÂ!™'Ô“çW¶+¸`ó„ã#˜ê>‰7³óQ¢ÕB[’ì°êá>Hƒçö£¾•¯íÇS½HƈL v¹[òû(µÿD4¼ç.ª72ƒD\€Å+%%¨&ŸqB¡0™»û5NþtÕÖ ëm½h˜ ð»ÚQ[¼^üû:ä—lÂÛdŒ«�&ÏÂØ=œ9Ù„ËÕ…âsêlÞˆ¬šüðáÛGÈO<·õ­4xm?žêE2FdµËÝâï×¶““xãºsx Öp’iÒbˆhx àF¨œ€Ì “°_9޲²|oYtËð{1ú÷¦œ-8RoÅTðåpHæ 51/ϳðÚÂѲ=¨þþ!FÞÑLL  åÈyXeмJ,ÂsûQßJƒ×öã©^$cD&P»Ü-þ¾9xî~=ÇOGÅþ:ã{¾À]™6ØI‹e ¢á§£ã—~¸\®eЏ8óÍw ¤„ÒX*³,…Ó�¬–ë0™®¢­ÛÑ |Ç‚džP1åÙ?Žë]´˜L0·=€cÔ7Žéƒ4xn?ê[iðÚ~<Õ‹dŒÈj—»ÅßÇ¢¦3÷³«2ºž‘ËÀÒ†ŸÁÄ€–3Læ[èv¸á‹³K¦Ó"“Dʬ�Ÿã2ÊóÖÎN¢AΖ:t¹c{ÔÌjb‰<ûãrù;Ð,èƒXr>™®ç1 rÒiðÜ~Ô·ÒàµýxªÉ‘ Ô.w‹¿O4Æ;›q©+I½Ý–fÔWÀѦ¸éš:?D6¼ŽËÈ å[”`Ë™N¸c¬Ä’é4‚È$2Ë¢¦—¿)¾¶E{Ïâ»ãØWÿ¿ü›k»èš:¡z"å™EM¯Àš, ²‹ö¡î»ã(ß÷5šÏ |³ÝtM]vxn?ê[iðÚ~<Õ‹dŒÈj—»åß4F,Çðváèñ¨<µû1J*!„‘”¯_Ë.ÆÞº¯q¼¼ õÍñey)j»'‚ïZ$ü³¡"dvî1 sP¨{�À®ó°O>Qœ0¡Ôf„ú‰”g†hB“´çÎ^xŒ9Ìà™é ¥6K<·õ­4xm?žêE2FdµËݲ¿OBËî\dåìC‹kir³dÚ†ÛÖTRG‡×uÎaÀFÍ&èzÆ `4˜Yì»gWqä{¶(‹Dí)X»RI]Yä%úêw¡*ãǰ±ä#”俅ºßèdœP=‘ò,àU_Šª‚™BÙ5Jò‘S¨‡NÆe‡çö£¾U'<õ+É‘ Ô.w¯û}‚oÏ'bÇ‚I¦m¸mM%utD]_õ¢¾èhЩ_4Æ«KP¢ýù9 Î¶4Ñ“Ú:S(V~À’úúŸ¡ûÇVØÆ_‰Æøgx3¿Õ†.¸bøÒ0HæÓks*©+‘LÃÕ}fÛ ,»Æ›ÐV_D·k:ø÷H–~žX <·õ­:á©_IƈL v¹[òû"‚²þ»k*¦!ÎH¦m¸mM%utd]Y¾åøÑlø ã•È×…¡ûYÌñjèL¡\ùá©õ%™O?«MÆÒ éCfá¹ý¨oåGð ÃzýêXz¡ú+°ØÝ1×V©„§~%#2Úå.ü÷ Þ^Jß ¼¶P4…ØÛü,u<K®m¸mÍd~L¦`ux>7búr(éw* ¥É’H¨¾StþöB¶+<„4T)cœX]=°wöb<†B>Hƒçö£¾•—ðE±&·ÛÙ­Ãì\ì0>ÁRÏÍÔÁS¿’Œ™@ír·øû^Ái܉5¹[PYwÍ&L¦fσöíýhYº˜LÛpÛšJêhV×ÊìØùæ^‡Ú:S(M~”Dd}gáµÿ„£e¥Ðjµ‹e{r×—£Éá]b“̧eËßD×Uð>•£»#õA» E¹°£ÉŽh·qÒiðÜ~Ô·r2§Û¡ÑlFm{?¼A7(Á×óþš˜‹âTÁS¿’Œ™@ír·øûüp·ÀÑ@\¤pü¹þ-~t¾ < /'1“’in[SIÍêJÆ8_(M~”DD}…·f^‹Yrv@ßጸ5Â^'Ò‹ÒÚ\Iõ¬ëü.zDŽñˆò´úŸ1ä[œ+ØëDòðÜ~Ô·rò¶º÷µÅˆ¡ˆ ­ AgõŸSOýJ2FdµËÝâï›…·ï:d@{Ë3Ì5Þö*÷~…¶Àk=èºÔŒÎ  ˜LÛpÛšJêhVW2ÆùBiò£$X}}£˜`…0Š®Ú=¨µôÃår-–~öï7¡ŸýûïH’ùô£DS ¬®‹‘Ug1ޥöÚ;p†ëƒËÓþ£0õ?ÿ=2¯;AH¤ÁsûQßʉ€™þ&l}ç ¬¡ë%¾Ç0V~€Üµt2NiDír·øûX– ÃX+>³×â–µ‹6 {^)ܶf2?&S°º’1ÎJ“%Áêk©,BeèÚŽ OìÑ,¦ì0›í”ÚŒ”(cJÕ•MÖÙ•Átf˜ÁÄ“ÿ`("ˆˆvó Ø)µ™ìðÜ~Ô·¯CÀ´µ wܳÁç×1ƒñ¾èk¿FÛ€8»0cüÐ!èï§5ˆOýJ2FdµË]øïœÍØW^ ¯œ1/ÌïÉ´ ·­©¤Žfu%cœ/”&?J‚Õ7Â_!$óéG‰2¦X]#ñ•Aú žÛúvaôÎU¼‡l±MX»,–2˜\鎇. žú•dŒÈj—»ˆßç÷`âe¢†Éµ ·­©¤Žfu%cœ/”&?J‚Õ—Œqe¡DS ¬®dŒgžÛú6Äìõ›°¦¸›Y4â°bîÄ@B©hfá¾}ž¨Eñܘ/ÙbÞÂJ<õ+É‘ Ô.w¯û},Åb÷wM ~âá$Ó6ܶ¦’:šÕ•Œq¾Pšü( V_2Æ•…eL)°º’1ž9xn?êÛ,°ánl5.Mw9ëG0ñkðÃe* ´é’²þ,c‰Ÿ\I…ý?y§º«µË]ìß7Ÿ«· U(ÊÖDø‰‡“LÛpÛšJêhVWÇoO0Êf”™qŒNFO f†~á¥éáÕ.ЙBiò£$X}ÉWJ”1¥ÀêJÆxæà¹ý¨oCðýÝžoÐå lø ý¦ïq5¡kê¢1n®AÅ7?„¬ÿ€o*ŠPXy ¶Q àFéBírñûFí\<^Š<Mh0¹oNÆ8ODÔÕÓÃÙ¦°É‚•füpb¶ž¸SK'3Á7+ëw* ÅÊ`õ%c\Y(QÆ”«+㙃çö£¾ Ì.¶k“È’¨Ï¸�ßð0^Dœ¢ÏÂûè;lyó˜œÓÁ×ROýÊS]ˆÕƒÚånñ÷ùán¯^0Â5¹[qÄÐû¨s/þÆó™¥×z’in[SIQW•k£'›È¢)8®ñùÓsöLÈ’ÚUi2ÀêKƸ²P¢Œ)VW2Æ3ÏíG}»ˆ0ÒŠÃ5ÍxÈÓ^‚· „ùjZ¯_@‹`\ÿ=Îý[*@Ÿ—®©DºP»ÜEþ>þ î_þ5ú›‹ªq\l’in[SIQ×׌³ç‹§P{}8à;¥vΊ•Àê;êè…c4ÞIó«éÂw†®˜Æ É|úQ¢Œ)VWÿèüæM*½éƒ4xn?êÛ³˜°·¢A4žÍÝC˜a'Ú]h1ßÍø‰¶àí…¡ô-±]sPPvŸ DûÊ ½ð&nÏK†§~%#2Úå.îïóÁqÿGÔëÏãâÙ‹À'"êº¬ÏøKxíÿ‚þøì4<MeýN%¡XùQ�që+LÁÕ{ †ÊMô5k㜒̧ÕȇĬ«Ö»h1™`nûv×T`ó5¤Òà¹ý¨oCÌÁc9Š÷ŽÞ„Ó7‹™§FìÈyE•(/գǛHð[n'4šÔõ°//¬ºj˜\“°7ÔÂè||_êá©_IƈL v¹{íï^ÂyÇ‚Þ`nñp’in[SIQ×xùèDCebr î¶Jääì†ñé|"µ t¦P¬ü(€èú ¾Ø-q\ûö¢O`ö[x»ú.㜠tã™%ú°pz枤)ÄÞæÿ`iOÒ©ðÜ~Ô·!^ÂVwÓ¢‚ŒÀRõ6Ö”^Óÿ CÆCÐY½Á÷-ûŽ÷µÅˆ¡Àú7dŒ»Åÿ–'øòÀS¿’Œ„üDè•¶[-¸e™¿ýæ…£w(îmœdt’[-VÒ�QWÏÏÐí©Žù3…—ã•ÐÝ]êcKijP¬ü(€ˆú .´WåðµÈ-9ƒÅŽQß4^¸^`1Tá"$óéGÑ2Æ9‘u?½[“»•uÑtS2ž?íÛûÑ2²ô";éƒ4xn?êÛ,€Û!ÔZèo?…BÍÛ¨²Œ@ðõü¿&¦^,EÀ”M °‚&1c¼ïæ¿ ¥6#BFõ*x#G|ÎÒ¼šûNüx^‡BÝxbäÉè$·Z¬¤&¢®q¸åÆ xñYB6”Ô®J“¥õÁ„ã>.ëj¡¿ùˆfý³1¯æ’̧åË¿DÖÕwÛ ]2Öû1rý[ü¼J+¼œÄd0ò éƒ4xn?êÛEoŒ¬CAÍ=¸§ÿ„åÜYèt—a ´}=Ópu_—ºÅÏx`«+FnI ®Ø'㺤žú•dŒÈ<“xlw\oã"<GoïHZõT ‹z5‹1˼YP‰ó—õØ»ã<ìï•+wÑuåGò版ºzÀxéçÅH¡Ýí0Õ× âè%Xc*¡45(V~@üú#NÏAo0à,pãõÈDÖuÞ¾pèí=¡hÑ=ènû•{¿B[àµt]j^˜ÄI¤ÁsûQ߆˜ƒ÷ñcüõÊ‹ÑQïb C…-ÐCðÔ¯$cDæ‚yoŽœŽº^NDÉæsÁ[-ü¡W¾GøþT+ž l~ÿ _ÝúK³|puøÞ±Ôù,äV‹•4À,_WÑ@iÇÑ·?€®glɤCijPüðG"õ|ƒ¸s«ó‘"!™O?j”1^ˆ¬+ TukÅרëqËÚð1. <·õm?\æÃÐ9w.¸Z±oC!öÝd Ý8øŸ¡»I]à 8X*3¿ ÖÖöEd—žú•dŒÈ<C0•æ£h»ZíråL,n„XÔ«YŒwâlMൈ²¦B6×3nµ8™“)–¯ë \-û“•‹Ý-CdŒ§ õÈDÖW€ßÝ‹[ )jÄçÑ?Ð;ä» "™O?Ê–1¾‰®«àlƾòqCÂË3ìÁ(¬¤Òà¹ý¨oCˆÆ¸ir‹¶Å] ¿Þg~çÛ¡Ñä¢èÃä•›0ØßŒ9hŠÏ¡Ïׄ—žú•dŒÈ<£xØ= š­êaQ¯Â|ÆÃ‹æ”_~,[PVÒbXÚðsð:ÐÝv&ó-t÷»0ú|±æŠd:PJ“ˆú 0nͼ¦)¨ÅýÇü³fSÌ› ’yâu(IF"ë*`æ/þ`§vQ/þÆóWôH¤ÁsûQ߆˜ÅøÃ‡x"iµ>{} 65þ!jÙú«qÆ:xÝaø õöX÷°ROýJ2FðAÈM±:†–x:+„¯2ˆÐ+¿ ¿YÿŠ8Éè$i± D6ü4\–F]iø¶èîÁ ØN2F¨ ¥É@D}ij PPÙ€ËßÄý/èï6ãÊý{¸Òô€|Ɖ¤P’ŒDÖ•]S?†%Û£Nÿ¶£dã1X<8Lµ¨8j†#¸;Kú žÛú6Ä,ÜwZñàeT°£¹'0_²ÅtgŠ…ànDZ“w1ÆTÇcÁáÃxüntSj3‚È |ŽË(Ï[ÇPÑG»K×Ò£YÔ+þÉI¼Œq²ˆ5œdt2mZ,ø†a½~uìŠ^ýXìîÅ ÉâwâºáÜÁÇLÑðS]¨Ý¼§ —a ¤µ1¡¹ñœ(+Em÷DðM‹$Ói«‘¤äG˜D_S öé†kƃ¡ÇÍçôcÀölãÒeP”&‘õaû%œjqB`í}É€[®±ûaüì1Âk’ÌKGÍúÀP’ŒDÖuŸqæ'>9Œ¶½yÈÊ©D›{¾µ#?O¬žÛú6»¦^¶¨ á%á´dÓp^;€<M¬ïø1¢§ öÿäžêB(ÑØtu£©î 4\,® س­·záŽahÆDFKy!´u7`ò̯#FûŒØ·ÿ:FüžXÔ+qN¿ûö?ånvÇ÷|»JЦ¾˜Ò" šÜ"l×~ˆüì\ì0>IøØ‘9ø\½¸uñ8´lFk‚+ø—LÞðs#ÎÆHaÏ=œ½ðX¬}$4¾ždågîi#6¯Ý‚pºâä°¼€ÿ¼€ïvÌWVÖ[(5ôÆMÜŸ.”&õFÑ­+Av =#Ëšò–˜ƒpÄ牣v}`(IF"ë*`ª÷üâtÁåŠ*]•ü/1á]Üö }ÏíG}‚pÓáÄÍ ‡,ÿþeÝ.lª¼Ûh"Û€3xfú…•߆}‡XÌmètŒ¦u#‘§~%#$1÷›ß×ïãÃü”›£ßô‰¸>xÅõ½1}¢—à·B·µÑkaÆÒ/aM§rÊÄ¢^½fƒ]9Æx(èÆfÔ¶÷ÃÜi|ý0﯉‰.&þq<í2A¿·x~áŸ]Œ½uçpZ×Ê•1.ŒYP³[‡fK×bz³žû¸¦;€ËÒÉtÚê"Yù™…»åS¬­hØø!KkÄï-UØ*ÊŒm`®!;Úu'q%˜û7S(M"êæ3^4y¸ìˆ}m0âóÄ Q¿>0”$#RëJú žÛú6„€©ÁA<^�Í<BÃÎ:ôx<Õö£³õwŒG|Ö3Õ0:2d§~%#$1ûõïhÑÈ¢œÏ8ÐøÉW°²à¢þÇ0ìúöD.­°uà'gÐ1vàƒãZ ·áŒÖ{°¨W¢1ÞÙŒK]=‹©J-ͨ¯>€£M=1o$£“iÐâ—°Õ½‡¬-F EÔyCÆC‰ùùÌõøíMñ®EnÉgh¸þ\>6xÏâåDðJD‰lx/eÈ_c¯Ï rvñ”‚÷$A²ò3-.[gÿ%NÖºü€ña5éa ^vèñE}Íb¡4ˆ¬/»ÒÔ ëPâ !’y)¨_J’‘h}˜yþ7^,ê)€[Šà¹ý¨oCˆãÏ¿.ÀôÇpÄm‘!Ç œ(ؘ ¿wl¿ÔPцÑ:3P®Ü°ÿ/ðTB‰øá¶|“ÃBv | ‡-nøÇ» +>›à©6ÓÍ&”®Ï ¦7c·õ4X./ï,¯WÓ±ÃÛ…_ Ç³t·"Lƒ‹‹“þ&l}çÌün Ã÷ÆÊ»6v޶¥ˆ ~ïl·.âxÙÇØ§7¡Ëá]qÆ4ܶ[hª? ®F‹£q|/h }ÉËϬ½…Õ¢ù2o|¼q¢ ^ÇEìÞ}ÍÍ0ž?íÆiõ5‹…Òd@j}I楠~}`(IF"ëÊ3Ëp“çJ±ÏíG}b~3µGdÑ {Sl¡±lYØFdò*¾Fsø5uÓ%è´%¨4ü$þ»ö I!Û‚§~å©.„™ĵ=ï,MÝ%êæúêû1ƒðÆf¾¡n\©;Œ2íNTm@Kß‹ŒÛgɲ¬^ ChÙ‹¬œ}ha1’¢HF'Ó¤Å3ïk¾ök´ LÍ/‚þþp5ƒ‰§]0éÅ/«@Yu W×Ô1ó®1~•0×󥧇ÉtÚê#IùñÀtè,,îaX*7àúG˜&á0×bKî:d¿û.rKùŠ9 "ëû “S1v>ão”‘ÌKEÝúÀP’ŒDÖ5=þeÄ"<·õmÑ¿úêïýºè¾ÇŠ­£[މÀnaµãÌÙ{pGL8¢‘®?…wêð<õ+É! Á ÓŽƒ›Y‹›\涇pÆHÑQ?ÕšÚ,‚oÏ'|1Ö¾É餢µ8à'É[4uÏ]Toü0êTD,%%¨ŽØÒÔ"xû`ªÝ‡ò£?Á=°Ì:påëNŒ3…Òd ²¾£¸««Äñˆ(“¬Ô`îgJm– üÏÐݤ‡®áL¦ý.X[Ûas¿>…ˆô¡$‰¬kì�nΞK¨9{?ʈ˜‡ôA<·õmq¡'=ÐJ¼âÁB&‰KhKÓÕôpxêW’1Bl“«­Ö1 ËÄPsj³•“ÌgÓ¤Åá;&gQßÔ«+ÖiZ<æ…ERèýÑð *׆†,”\T’1žŒp"ÓAef…Òd ²¾£°Tæe<²¬­´1.;¡�n¹(ú°�yå& ö7cgŽšâsè[@óª %ÉHd]ãDSwÞÁ‰‡Ò™…Cú žÛoÕ÷­Ìé3Iä  ì >-*@‰ö#”§9 OýJã‘qTÚlå$óÙ´h±à¾‡š‚u4ŸùÒm/Bîš÷q´ý¯Äb9B杻†ŸzŒŽ_ú£bÐXó :h!–ò¼Lâ±Pš DÖ÷:ÍèZ¸zØ‹©ÕÇÑd}S¿Iæ¥0{} 65þÁÌ>ô7VãŒu2ðºÃðêíSóo{ <ëCI2Y×e®©kvÂ#R}ä牕Âsû­ö¾•7â+8;ŵ@ êzX*3û¢&×$ì µ1u+UðÔ¯4~GÕ©ÍVN2ŸMƒûÄEb‰h8EÇÂi8;)ïEãîêĸÉz?…D4|,cÜÕˉ°·Íüý‹Ð@ú:ä0>ø™Äc¡4xm}ýÏ`9Z„BÝxb,²Hæ¥!¸Ûqìä]Œ±¶õXpø°¿ݺò£ó­ %ÉHd]cpÛŽ’‚’¸›Ï¤Òà¹ýVwßÊN1:“DhÜr‹ÿMt쓞ú•Æ"ã¨:µÙÊIæ³iÐbfLmÁã`”!žŠçuQÑ彟:">î5õll51žÒ~&ñX(M^W_Áu »sÖ g÷5¸b Â$óR˜†óÚäibŒ1ë?O0:ßúÀP’ŒDÖUÀÔ`8Jî…±{8óÏèÀSó(é·òÏí·ºûv>‚º|éEݲéQ¸±ö@Š@öÅx7ÿ-hÖe,}§2<õ+D2°ÛqMÁÀ¯3Þ¿ðxÈ+j;(„ÍÚ‹_[m©Í–'™Ï¦A‹gáµ}Í[ëp§'t•µÝíP¹± õ?? \m5ÕœŒJ.[èýÔÑ𱸕¼‡â£·á’)9üêBミI<J“××w¾‰QLĉ’«´ßË3xfú…•ßFD>5™oá“M¦‰À·>0”$#‘uƒ§ó"Î^nŽìŸË§¡]ÿ1]SO<·ßjï[ùÓ)NÃÕ} _ê~„uÜ[]1rKjpÅ>™Ö?OýJã±ræÝ?×–ÇņS¨øðÃùŸ?|…9¢-ÊTVÎ.úV¢W«(µÙkHæ³iÐb¶xÜ5¬s—-o`sã±;c [èýÔÀê¿ÀÔŸp G-¸„Ü=ó5î“ÏxÈa|0ø˜Äc¡4Z_’y‰ø‡ÑÙú;Æ% n,}8×Ï?Ý(IF"뺌ÏxœŽÈÏ+…çö[õ}+k:ÅYLØÛç×~ÝCâÊ`Þ.´˜ï¬8˜«TxêW?ˆ•ó -eù¨h{.Ú' qÓ? mþ-{vAwów ¸\r܆îps‚WÌ]¸}%¶[âsO`¾dCbQm2½Jæ³éÑbO'Îêïc8Â:ºüQo¼eà|4ui¡÷SGDÃ{º`8Ûi8šš Ó¾K×Ô“bÞÿsß_[Îø˜Áß½c^]Q®|Ó7>”&RëK2/Q?Æ_Ë$%«^XÏTÃèÌtHLeÉHd]㜌·ÜCoœ "¤Òà¹ý¨oÅYV¶tŠl£ë(Þ;zNß,fž±#çMUT¢¼To¢§ëÒá©_Iƈ•3“¶hÞ%_ËΆÖÔ!ê©)èºÆCljs º³ïËÈâ²…“›w‰Àê›,É|6 Z,À7<„¿g¢;ÀÑÞc ¡hØ“xlw‰Cñ2ÏÑÛË|ÊÓODÃÇõUŸ÷H">KÄÀ—ù0´GNEå±/'QY²õö—ÁÏ$ ƇÒd@j}Iæ¥ ‡>ÄÎ *š‚Ã0f8Í«‡Rˆ®«à÷c%Ë %ýVá¹ý¨oå„ź84ÈW¥êm¬)½§ÿUXü¡ôÀS¿’Œ+‡ÅòúÕcAcüœèvÁa8€Ý_^D³é2ÎßGu‚ùè \l6ÁÔ|•ëQPyNüž° é@¹Û(wï^½Jæ³iÐb¶x<Ý® ¿x¨t ±âcèÚz`奋‹ØÑ{Ëpät¬…g°œ>ˆ’Íç‚>é%¢ácžŒ_ÇÝ^WÌÅ- ¤¯C”Óäm‹ôÃ_Rv`¿©?Ά ߯«ƒ’Z_¥ý^¾CØ¢¶y_GM–— Ó–ÝÚaŸÈܶ’d„ô!³ðÜ~Ô·rÂü\¡Öâ@û)j‚¾~˜÷×$–™G&xêW’1båð;Í8Tk{¬•k72 ÞÇ0Ÿø¹š¼›ÿ.JMCÁ÷¿Ž—ÜøySÕ{Ðda×Þ/qË•^÷9‘¢WÉ|6 ZÌeÊÅ/ëQ\Û3ÀÙ<C0•æ£ô-WŽÀÄvMÓ û Ï'æ9aþÙÄ­:öYb9f1þð!žH² ø6>”&RëK2/…y}p¼†õúÔ±Èú+°ØÝ¯ÙÐ ‡¹ý´ãÌÙèèÞ¢žèO¡Å9#<„’d„ô!³ðÜ~Ô·òÂ"@JYŽòu(¨ǯé?a9w:ÝeXÇÓ7nñÔ¯$cDrÌÂk7£¶âS½òhI®ÿY‡_w¸ƒO¯Ã…[ºýØ•¿š‚Ï`rLBð‰¯B…îýž`z%¥¬”4h±hŒ_=‡ÆGÎ(ñ~´UïƒÁö—øo'mzœŒ‘‡{ž'h¨»è@ûÂßvôÆŠ–nXÃWf†%ሠ‹$Ói«Á§^ãCi2 µ¾$óÒX\fA“[„í4"¹Øa|²dŒŒÍ| ¤f£?e8R<”$#¤™…çö£¾$r¿„¶dn¤ù½õ®`þ—žú•dŒFl7à•ÙWÌgü(¨2ÁBðt¡vŸ9Á�Ê!:—-ŽpÈÇ•‹èìfÎ`¬ã$ ù(cûšúéÊmØ\ÿHüô \7aÆC¸éZIn<y`CÆxêP»ñ¡4Z_’y)̧$Ñh6£¶½Þàm¢•]Õä'R<”$#¤™…çö£¾]dqÏAAÙA|ZT€íG(7ô.9•ãžú•dŒ†ö•hŒm‚cÉíf¬-Š<_ŽTèZ<÷´›5yØ÷d|™kêûM˜#c\½¨ßøPš H­/ɼ˜ËÅ{ÈÚb ‹zʘYA#ö|BЇ’d„ô!³ðÜ~Ô·!^ÁiÜ)Îã%¨ë…?w¼&×$ì µ1óïó OýJ2FHCûJ…Õ|ͦëèò‰Ï t¶Â|«î¸îÇÊ%:LJû]°v>Yfwt»yOÆØ°Ž!c<U¨ßøPš H­/ɼÌô7aë;g` *„ï1Œ• wmE‚›SüBЇ’d„ô!³ðÜ~Ô·!¢çñ1îÿ[ÎÅàJà©_IÆiÈa_Šëêí8Ú6Ÿ0…§ÆÝÈÉ.FÅ‘=(Õ=µ]]¤Bç¤Å3˜p܇±žë¨GSÛ¿áòeþ:%ƒu ã©BýƇÒd@j}Iæ¥2ƒñ¾èk¿FÛÀÔ¼>:ýýá„ý(y „%ÉéCfá¹ý¨oC˜²éQ¸±!˜ñ†ãÅx7ÿ-hÎ=< ÷V<xµÎš{ó%Ä‘0mðÔ¯$cDJð;qÝ ® ‚Ë2kC]iDÕÆÚQµþM”ûáa,ý2Á\åÊ!:—-ÐÛWÑéYn°õá‰Ù [ÈØZ‚îûµ(Ðd!+;%Z-¶åbMÁq´s:Ÿu ã©DÝÆ‡Òd@j}Iæ9ƒ@HñP’Œ>džÛú6œi¸º/áKÝâœë­®¹%5¸bŸŒãžÍ2™y6èåý?y§ºJg>W/n]<-K¬5%|mî wé`ùó?h¯-n°ÍÀç4cÿþëILÁC*t. ZœHj3V‚§•ÁOE0÷†ëQ¬û9ì4|}Mؽ/óÍêOÆxº0mmÕDBçÔøPš H­/É|*HB8FI2BúYxn?êÛqù ÏÑÛgÝ·q-iÖáÄÍaéI›qY· ›*/Á6š¾™§~%#$ãÇÓ.ô{‹‘-ÊSVv1öÖÃi]k‚‘Ðgáí»€Ò ²4ï£æ¾ Óλ8Ç‚Á5Y1NÆøkIƒ/7€ž ËûlF«Í{Pž}„úw>†q(*x@øa “™ Â:ÆñÛŒ²@3/àzcR&àzî >,BéëFà\Å{óƒDD)ƒÉÅã¹ÞÊPš H­¯Ò~/o¨]”éCfá¹ý¨oC°uàahœZˆÖ(§¢dó¹ÀÕuÁÕŠ} ±ïæ_qŒsSƒƒxýÇ™GhØY—Ö@¬<õ+É!‰¹~·½)ÊÑZä–|††ë¿=gñr³‚Ã+~ï ŒzÕ¿I…Î¥A‹e@ECÖ¦/ÅÖº›è±Za ”.´_¬ÂÆÒzüÌž6£æpkFNÉ#:ÆsÕ?\•°¤Õ–øf­¨…É1Ò€Ò×1{ý&¬)®ÆÅæÐÆM°˜;1°â$¥„T¤Ê,ɼHxƒô!³ðÜ~Ô·!Ø É=È-Ú¶tm¤=ÓÀtƸøÿº�ÓÃp¹\ eÈq' 6¦5OýJ2FHƒÑC°ÝºˆãecŸÞ„.‡>a¥Æøê!:—-fhZÏ@é¿£âÀ›Ð�*8aÚ±>Ð�ËÍv4>M¿9û/à± rmŒºeå¢Òâ‚»­9Y‹iÜ">KÄ€¥DÙ­ÆÁ¥ô¬*ÌšÀ=Re–d^ réƒ8O8pߨ�î,ê›Ú`uM-ýÎT!L¢¯©Fœø†kƃ¡ÇÍgÓðcÀölãŠY>džÛú6Ä,Æ>Ä“%^4â8ä›NP×™AËåQƒìM ËÄ’žú•§ºJgO»`ÒFYYʪ[¼¦¾ºH…Î¥A‹å@çàé8}Ç`¤A¿¤¼XÈCN":fê1:~éQ·L®~øáx¹0ùD|–ˆ8YýÝžoÐå oÏgè7}«’®åNãÙõp;~¶d|,@2/yôApßCMÁ:±/r_²ÚíEÈ]ó>޶ÿ•9œ{ÚˆÍk·àÄÅœ®ø�9YëPøÏ øn ²È懷Pjè]&Ý%?>džÛúöuxa=S £s© ßRĵäÕ¯Pï×àíÈ`±õc4Í™uxêW’1"² %M}•‘ KƒÇ@íb|%¨0 ÿ,Ÿ+³¥3ƒ‰+,-f˜Ìmè´»ïö( ¤¯ƒ¥%ÛØN¬­"Kr>²‚Ï…^v%Gû¶ø½éñ³%ãc©Ÿ_ÝÈ¡>8 %ПEÇÂi8;)ïEãîê4¤ú›…»åS¬­hØø{?B–Öˆß[ª°U× ÛÀ0\Cv´ëNâŠ33q@V‚Ty–úùÕÏíG}B€Ïqå,Bs`¬Š,š‚Ã0Z‡ã®“æǨÉIxÿgÖëPÇ|Îë/¡íµŸ“Vg^à©.„RaQÔÃuƒ>É›r/1<4¶ôý‚½Å‡ºH…Î¥A‹Åt´·þ·ØÉ 7àðΊö¹ ÖÖvØÜ‰^)¿ÃÕ¦º/Ðpý±h°°g+ZoõÂÍÁ=刎a' †]¢±>Ù¬CþÞf8bÌ4¾a¤‡kšñ0|3'P‚Aó"týfв5b»¯GÑÞ/pátÄÓõD ã#’yiH׿w¾[–\uŸÁñPÐu(•þbó·¥²uVñ_,ßp~@¬&}XN/;ôø"~ ÉBúYxn?êÛ/a«+B^Å×aA{Y¹¶•†ŸÄ·Ã>±ü-µÅ¥9((;ˆO‹ P¢ýåiÞÈæ©_IÆi„EBÏÞˆ²Ïö hÃÐnÙ C_¢i‡`>¡ÇîžÈ5ɃFT| C›ÕŽ!vK…Î¥A‹ƒ'9š\}X€¼rû›±SìxMñ9ô%²¥ÉrØm~šÜ÷ña~ÊMÑoúD4xß@q}oÆw]Â;Fp±uMJ*¿Dc(À’ñ[×awËðÁ¦4^arBŠ?«h�w¢Okr·âHÃõ…]?áå$&S¾¡CÆG8$óR`)‚lø?cËéà þî} wÜ7ˆ“¯íklÞZ‡;=¡‰³ÝíP¹± õ??Ÿ»`ª9™²SòY{= «;Ä%ú¼>¼q¢ ^ÇEìÞ}F7›a< Ú'БDºÈtCúYxn?êÛì�¥gÎÞ‹—D#] - ¹Š±x;ŵd êzFƒsi5L®IØjaLãF6OýJ2FHB€qk¶héÑ3.®GýVèÊLp± Û~‚3¡åñLÚì€,Æ-Ù¢Ö’7¸TÃ~ܤA‹Ù)L 65þ!ÇSèo¬Æëdàu‡á3ÔÛ§æß¶ÔfZ4L‹ëL?ù Vækî îï`OƒËïr„wŒà¾‰GïÂ|!Œ´áìó è°4l©èTu'?i¯3>Dü Ùnãâñ=(ݧ‡©Ëð3K1NÆG8$óRðÇNQN¢²d‡8¶¾ ~&š<3íÆ±X_Ä/o`sãQS€�¦CgaqÃR¹ïÔ?¬0 ‡¹[r×!ûÝw‘[*.‚oçÖVRúùÕÏíG}bîÛWÑ16-þ+><1›—‰#ÄN×ßCÖ#†o ãnñ¿åM ’aÖ†º·²oÊ…Œqï¯ÐŸOýZ†pµî  …DZË_m¨Þn€ý{ÈŽ6]ÚÜÊ7ÇS¡siÑbÁÝŽc'ïbŒõ´Ç‚Ç-ðøÝèNx�õÃmù'-#¢°Ì‰_q ‡-nøÇ»V ,©#¼cØ5ª¦C50´?X¼ªÑ}ç+« o ¾Ö%_/ï§ôuÈa|„#À?Ñ.“Ue»q ì8Ìið'ãc’y)°[ñR…—ØoêoH{:qVÃáç’òwJs† Þ>˜j÷¡üèO°3÷¥pf¸òu'ƃ<CúYxn?êÛó·ÃX{,_ÞFU` S6= 76ò’ÏãÅx7ÿ-hÖe,}§2¬®¼ÀS]%â­®Å5iàž&3ÆsßF¾¸.]_Õ>o·½–I<¶»–®7Âçqÿ:NìLë¦YªH…Î¥A‹§á¼v�yšïúÏ; œĵ=ïÄZ¤ÁúêûKN¡Ó «ËqS›…–æl4ðvöL,‡LÆG,„—pš/¥'šºóÌK!^Š •Àn›ü7_E}‰ð½½ñ©Eðe>(S²>džÛú6ÛT×áÄÍaþâ͸¬Û…M•çÂüÈÍhµ¹—ƒ¦á꾄/u?Â:ÎŒˆbä–ÔàŠ=QßVyà©_IÆÉøŸ¡ûû:茿aÜoC]î”TÇX§. ;è ¥KÕÃÐò�O'Bn˜AwåœJ:C´˜]‰ü…•߆ Âb1ß§7±4güÃ`Åï0·uÁ1šþ¼âÑDtŒ0€+û*p|ÉémxÑÃdŸßB ôuˆÆÇÿû#.H �(›&‰ß!#d|I#Y–ãÜ69}%›ÏNW+öm(ľ›¥|‘ËKP¦d!}È,<·õmSƒƒx­ÏÌ/ugz¼)q†I<õ+É! x¥›sOZqÉ–èQgìl š‚ãhw±u ‹aC§#½›f©":—-ö£³õwŒ'Ý ¬#»Ñj}Ù‘~+Δ_3 >¿ËÙ1+ 6–ŠNU2�”å;䃌’ùä‘C–—»mr¦é4ãüeJÒ‡ÌÂsûQ߆Çœ5¡e0ʦÿŽŠãŒ¤««i¾áÆà©_IÆiÄ ¾¦Iüšº0Œ–òBhënÀ6ÌÂ"ø0Úgľý×1¢€uíJH…Î¥A‹gá¾ÓŠ/£v>çžÀ|Ɇ·‰xá¸\ûª{Ö:T]^aN<y‘Ò1R>»:!� ,ß!d|ÌKAY–㪻\ð”)YH2 ÏíG}‚m�Æò× {SÃ2AÛâ!ÀïuÂzýŽ”äA“U&Žé»þÊS¿òTB‰°´d:üvëØdj‚®t*›~Ãh"ªÉüÌ·6b ú½Â Œ¥_f<®—ܤBçÒ Åña±$t#í/õW„E,?é ÝX û÷-;&2d³ß’,R>»Z�Pžï2>Hæ¥!]–åØ • ~‚2% éCfá¹ý¨oCˆëÀ«_¡þÞ¯‹mY±ÿ‰qß ®¨³Ó6ûϸ¬Û‚l ²4oC{ü[ü ?O'ã‘^ ŒŠ3q8fìç±S÷@ük°ôhŸœAÇXÈG\Ä?ǵn3&˜M9¤BçÒ Åâ 7pÇ%ØFÙ2™†«ýœ½ëŠÑH×¼wð1SHéH_‡ �eù¹ ãCêçW7rȲ ¤²ÂGP¦daí&©Ÿ_íðÜ~Ô·!ø''—ø¥®ŒYŒÝ?Ž lìËÝ ©k1@Ô¬éôVä©_IÆi á_ -ø#Ü}Äå„£­ÙºOµ™ÏxJ×ç¡h;swûùͲMÐõŒ)b_ ©Ð¹4h±h|ȸc^çC\7è¡ÓE}S[F¯¦‡#¥ch }2�”å;ä$–ñqMÖ碙Ä?Re–d^ ñd¹ æölƒôª/†Äd¤(×™Ü M5ââÝ7Mú@¼žÛú6éKÅqa‹ásTTp«×ŸýÆïp•®©DÄó_Mõ¿¯à¦Ü|CݸRweÚ¨8Ú€–¾Š˜ÃWJ*t. Z,.üþu¦?†Ãv]\rÜÀ‰‚ _«ôö]@iŽYÙQöÙmø�Ú-{aèËü鉔ŽIE§ªŽ˜�W²XŸ…»õ4ö]´F~GF®åÆÃ ë™j¾à3¿H•Y’y‰ÄÔ‡•ÈÏ2¤“„ÿf* } ƒçö£¾]DÞÀ¥âšÐ~ å¹ë½NüNò'ˆäÂU÷zÂÜGÄb{â^ÁF™ ·¯<€'êý+‹È®R¡siÐâxW"W¸ƒù#l͆¦Xžññ+­Ð•™àb‹Ç?eÜAJÇHùìêf%‹už®åÆN*š‚Ã0ržæŒÕS R?¿º‘C~âlþ窥F6^1¤R?¿Úá¹ý¨oCȸTðÀ~ÿ êö#›y¥8~ñ&º®ßÀƒqò'ˆ•³² P±‘!"»‚H…Î¥A‹Å…_¬À¶~Œ&¸#À-[Œƒó2ƽ¿BW|6ã‘ú¤tL*:U]Èd|˜kPñÍa×rÀ7E(L8n\°�nEÈ«øÍ uaåtÚ’`.ývØ'øõgí.©Ÿ_ÝÈ!?ñ7§4gÓœó—ôAêçW;<·õm9—ÎÀe9’\q- )ÄÞË6Œg(­-OýJ2Fdž!˜+«ð1,6˜QŠ‚M‰GdW©Ð¹4h1 Ü1Éqî’ô÷f~µ%ØXÿHŽE˜1žû6òs×q±ë"¥ch }r,ÖEƒ~x/"ädÞGßaË›ŸÀ䜾–D}pµãÌÙ{pGÔGüúShIcDØd‘*³$óRC~Øi ¿ô„mö Ëx 5-Nñ¯é„ôôA<·õm—ú=²ÝÆÅ{±£â$.ÞúýÝ?ãW:'ˆ ñÃCQÚ„I<jÐâÍÍp¦s? ¤BçҢłûj ˜_OòK¶C»½¹kÞÇÑö¿_øùŸ¡ûû:茿aÜoC]î”Tÿ»7ó‹5)CéëHÕbÝw‡»«~@_Zehöv4ø©{3lS`  -æ;°¹Ó¹)<Re–d^:‚÷O<H:RŸqá4~p�-#é4ÇIH¤ÁsûQ߆#Ö„ùkë?àÄ–ä3N<!üŽ3ûQÕ”LL¾I…Î¥A‹}pJ )>‹Ž…ÓpÑÀšèEãîêÄ~Âì·Ì0™®£{È'>{0ÐÙ ó­^¸3tM))CibH3>xbËQ¼wô&œ¾YÌ<5bGΛ(ª¨Dy©>ÍW„“CªÌ’ÌKCz ¤X'ãVôü|åëßGíeð}é€ôôA<·õmˆY¸o_E§'jã[¦ ªÂ‹a §qAÀS¿’ŒÒpáŽÙº$í Zƒ¯ÉA*t. Z<{ý–Eïf0d<ôšÅË Ï2§ä£°TmÇѶAÑ�›ÂSãnäd£âÈ”&š”>…HéH_¼QX3 »vÓâåúm¬)½§ÿU˜>ðT™%™—‚âùŒ¯Cþ¾«\#M¤R?¿Úá¹ý¨oCÄS‘þ ªÒaõæžêB(‘Õ|MR¡siÐâYxm_cóÖ:ÜY߃îö ¨ÜX†úŸŠÏ]0ÕœŒJθ•6a@ a¬UëßD©±~aÆÒ/)€›ª‘' +?Lãiã!ÔZèo?…BÍÛ¨²Œ@ðõü¿&ÍW„“CªÌ’ÌK¯R!±“ñï`|MÝ5êÿ’nHH¤ÁsûQ߆Çœ´Qàñ/R|c’§~%#¤1ó ~ˆˆÉÔ]é6U_“ƒTè\´xÏL»±F¬<ûñËØÜø1/%Î=Aã.,þíµÅÁ€3ð9ÍØ¿ÿ:F2,,¬þÉ"峫9ŒÔ^‘[)‹'ýëPPsîé?a9w:ÝeXÓ„&Y¤Ê,ɼä „$øý¢Vðé部ý”€ATg1þð!ž,;$¼„½þŸ)÷çIæHþ ix180usYÀŒý<vJ½yìwâºAœÓƒJÆáp,¦sáÏcccÁw%Oz´ØÓ‰³úû?…YRþƨ7Þ�*Ú}Pš£A–æ}ÔÜwaÚyç˜ÿp“ãdŒ«9Œ¯Èù½ÍÈI¤tX»IAêç ù!eÒ"I¨ý”ÊJƒ¨²Óõc¨<ÿcØ ^T¹|Úœr2Æ "a†ð¯†üa9áh«EA¶.‰›Çsð¹zqëâqhYJb­ ®à_”Ìý×t-Va¹TÒ Åsð>þo ¾Zn°Áß½£¢eG#ˆëµË왃uF²HùìêAªñ‘®+r«©2K2/�SJªHBNH2 ?íÇ× ,õ±Œ1Þ|•Œ=k‘W~ŽsãIgiü ¤Ïg|=6Õÿžø¸åÇÓ.ô{‹‘Í>Ÿ]Œ½uçpZת cœ~/m£,<x0øi¤A‹Ù�zÚ#§Ä…£.N9‰Ê’¨·§3Н|°I)Ÿ]=H5>xÊ3®|¤Ê,ɼ4dIIÈéCfá§ý8¼¥*b_S|ƒh;ú>4YoA«ï„+ vXŸòOu!”È®ê ¸·Ók¾Øž¸ÏX4×ã¶7EY\‹Ü’ÏÐpý7¸|ÌéøuÁ¹•E¬Óq9NÅiÐb6AíAnÑ6hµÚeÊì7õÇöç)ƒ¡”Ï®Rc|d*ϸò‘*³$óR!U$àÉ éCfá§ýèVzÇ=÷4°xš÷QÝò$mÙUxÒY?iLcÔ~ÿ»î ш~,ê¨W.+ZW”:ZüŒw¶[q¼ìcìÓ›Ðå`ƼºŒñèÓq¹NÅiÐâD‚n()ƒ! ¤¯CãcÁ7 +·¹Ê§ñìú¸íæ_Q¤Ê,ɼäHÉÛ Ógå^»gí&©Ÿ_íðÓ~t+>ro�Šíê0¡ª`4ùaLs¼ žt–ÆB,@öæ7 É}æ Üôý¦O“õŠë{ÅøJ™ÁÄÓ.˜ô‡QVV²êU\S~:.ש8#mZ,Íb;5Ýh’´s“:¤ †4¾9ŒQ‚8ÍU.ø\èe»‰Ú·¡É*Kyà9*³$óR¡RSErv‚§ôk÷¤™…·ö‹\ë|óG?Æ–ÊÕ~KÎ Ài¸,ÿDqöäh¿F—+r“Cx1Œaò'ˆÄ˜}„úw´hõhÆÆO¾‚uJÔÿcv}»„a+¢T%ÑÔC„NÇå<g¤E‹%B²ïÜÈˤ’d!–Cヷ\å¡Ã}(ÊÖˆ2°E{¿À…Óu¸ªc\j!’E†T‘\àÉwó%S°ö–‚Ôϯvxj?^7}3L€þ°v‰k? rJÏ¡ëépXhV†ñØø]ÊçQždŽÆB~¸-_à¤eDœyç౜Âa‹þñ.èÄy9±hê|˜*4h± †P wnÒ –RÃø#W¹\LcÀ¸+mR“»G®/\É^NbRë"…HN‹LÅPçæK&‘*ï¤/Òà§ýxÛôå 96�gàj;‰Ò˜1‡BeŠr÷¤ü†O:Kã!‰¹A\Ûó4¢1YZ,¬¯¾OðmËÂù©HƒËaɱs“9h°”ˆdãCŽ\å2â÷`ÈvïAé>=L]ŒúæÈ'D€ß/]fùˆ¡ Ç̹͗€I®ÉÃOûñ´é«R±(`ºÛŒkdŒDbN˜v|ˆJÃOa·VL0·=„3Q½Tø)¤A‹e0„äØ¹É 4XJEãCj®òTÀ®ãö£Ë¤GUÙn(;³®©¿’wþáç:­7_ø†ÕŸHü´/g›¾<âƒãþ¨×éPghA÷ÓñÜx™…»½½¯iÆÙßnâæHjÛš'¦ñ…ÆüóVë kae˜ò@š´X¢!$ÇÎM¡Á’"O¯Àb‹àß2ŽðNó%EDS$ï¼ÃÙuÚ”\»çÒ‡ÔÂWûò¸éË ¾Ç¸\u¨¢YI Fî�J*OBÇæð˜å$*KÐ5u‚Hx5@Í=iÅ%[‚G ?0å…h±;7™ƒË̳xÈ|µ‹°]û!ò³s±Ãø3Á÷¤ ÿ3t7é¡k¸ÛLò»`mm‡ÍÎÀY©ƒäwxºN;ïãÿÆà«¨M(á9z{Ù.»ò!}H-ü·¯¸~ñMó³ñ›üiÙ‹7µuh³ ÁpÇšƒo´Æ}5 º ,‘=¢¤>+ ûÿðOu!”ÈLÚì0ý Ñ®jÇX"“°ÂLy@!Z,ÃÎM¡Á2ÓLãiãvh4›QÛÞ\ˆãK»°?Ñ…€\„ê’‹¢ WnÂ`3væh )>‡>~Ÿ' É{ªaî Ròrót–EY> í‘S‘'\§¢dó¹@ýW+öm(ľ›)Ò8'}H-ü·¯¨_gªat®æ0FlŒ90ïSAx Æ×ÁŒñC¨î >Çb Õ‡È'ˆ„‚ùè \l^4¢M¦&èÊ+ 3Û0šÐ¤«ìSPˆ˰s“Ah°LÓxvý‡¯uGŸ†XÉB@.Xôèljüƒ™Dèo¬Æëdàu‡á3ÔÛ§æß¦`HÞS‹<y¹y¹NËØ{[´-Fdä#0‰‹w2Ɖåà§}ø—Qž·6P§è¢)8 cF‚$ò�s©FmÇHØ5ƒ Ç¿P]Xž k +ª_3_‡nù1N‰áÅàÀhÔÜ*`Æ~×ý&®LÁ…ÛWÀ5¶)åÀ”¢ÅC0ŸÐᇰë›Òm¨lú-Á›ÌAƒ¥|>zo]ÄqíÛÐ$|MXú›°õ3ó¾Ç0V~€ÜµiÒ,¸ÛqìäÝùM$‡[àñ»Ñ­’ˆ»$ï©D¾¼Ü|ÄP˜ÅøÃ‡x¢â›l¤©…Ÿöe›¾EÈ«øÍk•KÐiK‚W8ÛaŸX¥×6}v4–nn¼mGI~ŽØwëP¨[ºˆÍ,ÆÚ>ÃGÆ(Ã! a�Æ>C[Šo÷ð¤Ó4¾Ò¿ZðGDŒ'þÓr²u _Söéò0WºÇø+:z¬Ì®t Ñâø;7;Åœwó…K©Ì`âiLú}(ÊÖˆí¹E{¿À…Óu¸šðø ÆûZ ¯ýmSóÆø¡CÐßN³2 çµÈÓDZbYÿ9:<JŒ É{*‘'/7?1fá¾ÓŠ/£ä~î Ì—l îÊó éCjá§}ÙUÍvœ9{îåtý)´¨ 8§TŸÝWêPUVŠÒŠÏQßòã+Hç) 4bSÞ´¹bÅW™†«íò6àHñ4Ê“NÓøBH#ž!½ ÛWC0WVácóâ&¤QŠ‚MŠ80]žô¸Ò)D‹cïÜ8ÚjQðÎMæ ÁR Ó0îB¶Ø†šÜ­8Òp}Á?vÅy¹%¥U‘ –ÊéSV~»8h±b¾…NoÒŠÌ$ï©D޼Ü<ÅP`WOãeRI:(ö[ˆÔÁ[û ~¿¨¥á˜¶¶áã1XaÛChÙ Mþ^ÑïDßÀ°¸Æ@_'Zê÷"_“ƒmƧ)OÈ“ÌÑøBHcWëñK`-*0ÖœF˳Dƒ ¿ÄðÐXäúU˜Ä£-ÞÜÙ §¢Ï˜ÒãJ§-Ž·s³›êçþô„K‰ø=²ÝÆÅã{PºOS—£¾¹•ã’ӪȈ­¿c\ –w HÞS‰y¹yŠ¡ÀvO¡úbxÖf\ÖU \g†m”óÖ`ýA¤žÚW}€sï6#õ1õ¾yG®¶Ü8³åQßÁÊ:½ ×J6è“„ýÿx§ºJ$ÖÍcQÏñAy F’U'áotœÙª¦^x½ÖM+B´xWuÜ[8 š/¶'nEC¡ÁR.˜ol?ºLzT•íÆ²ã0'4‰Ë‘VE.fá¾}ž(ͦk¹D¢HÎËÍS Sƒƒx=ŽÏ<BÃÇßÀªŸ‚!}H-ü´/s!Ù„5ÅÕQ‘‰ÅbîÄÀêŒÜDÞ¶ Ä»0×ãhÅNhµ;Qqôk;ž¦mÑÏ“NÓøBH#ÖÉø¯øÙ°ëߪƒmÕ_èI+B´ø&'&1î¸cýYètõhjû7\>eÜ} Á2/á4_J0šºiUä‚®åR+/7/1D}ø×˜þ`×M7†þs Õ ) !ñZøi_1|7¶.‰ç 2ëGl9Fæ¶ñãi÷ 4ÖƒzZàéDú¢]ð¤Ó4¾ÒˆsóXSˆ}×úÅ•Âj'=kv…h±îûµ(`A¯²óQ¢Õb{Q.ÖG{Ì@|Á:€ÿº›ôÐ5Ü€Ã+ ¾ßkk;lîDû^Ž´*rÁ®åÖ â›ÂN~À7E(¬¼D×r‰×ÀäG¦`"\ÄPˆ?Ñi ΢ǫhg³�ì·©ƒŸöD•úº=ß Ë~KåúM߯ ب‘¯mXðÉÆh—3Vr>‚.M›‰<é4Ou!”È®êMx¼ “¬,w³nµÁÖ\:œø!,8]À•n6ɸfW†Ï=†aãzë~; ©¾&ìÞw=yŸ†4Aƒ¥BÁ¦rQôaòÊMìoÆÎ 4ÅçЗèõ6ÉiUäB€ox/"þŸ³ð>ú[Þü&'ÿ›K¯ƒä=•0ãU†`"ÜÄPÏÕ~é »"׃.ã)Ô´8Ó\—Ô@úZøißà\®S eµûŒËÔ6Â3´íÛ ŽUoC{ü;˜,]ñ¢ÛbÂùã¥È[S„Ú®¥þ¯rÃêÍ <Õ…P"üþø\¿áºAî,ê›Ú%'s#uྱ!#·URÇ2®t;ëd;0P†Ï>Bý;Ã8ձ Œ¥_ÎGS¦01™ÎÎÄ¡ÁR Ì׬›ÿ`*þÆjœ±N^w>C½=q ©iUR‡î=vWý€>vò¯pHÞS‰ÁDxŠ¡g¢þ@ãÒ\—Ô@úZxj_a¤‡kšñ0Âÿ’•']Ý÷Ôã´hHwöâï„ÚFÀ+›ïC›ó¥øÍ Æ?‡-ïêa{•Ú¶æIæh|!¤1 oß”æh•½eŸíAц Ý²†¾Éz >Çe”ç­ Èc¨hr{yyü±]é7p¢`£l®tÊÐba6})¶ÖÝDÏ ޅö‹UØXZŸÙóÃfÔnåò”œKiîv;yc¬o=>lÇïF·®<AEPÐ4ž yO%rá,†Â’“q+z~>òõï£Îö2ø>åBúZøi_6ÏaþóÿF.`iž ÂbÿDŸ¶‰cÑ™j¾àórøà0ìÂÞ¶¿—1&Ð}¢G"ß—<<é4/„$„·fCS¬GÏøŒ8%[¡+3ÁÅN~üg"6•0Œ–òBhënÀ6䙿Ñ&ø0Úgľýüß^^qÓ•NƒìM ²™U† N˜v¬ÑQE³OùÛ…au#’eÎkÇâD÷÷úÏÑáIäŠH<ebߡޠi<ÁÚ•HrÈ2g1bþžuÈßw3ŠžÅ°ßC¤~Ú—æ™øÄ>9 MÁa­Ã¯ÉŽÃ6«_s¥õAuÊ7Yy§º dÖ†º·²±%\1dŒ{…®øìüÍã×Á>³µÑú~{Y±ˆcÊÕ¯Pï׈«íü=1¶†’†B´xžŽsÐw F\XZ^¯\ò –R`y•?Eaå·aÁÄb¾…Nï2;äáˆÊ¤ò i<AòžJ˜,Ë—›› l¢ûÆÇ‘WÀ\£^Ù&¹LCúZøi_šgâó¶º"äU|æ…¶aåtÚTØxÖûÄrì;DzG»íxÅ÷TÒÉ8A$ŒGÔ™l¬$®¶E˜aû6òs×a}UûüÔ×ÁN×?9ƒŽ±0Wb öZ ·;]çþÉI¼\òVr«çõ(G‹…Yøg•Ù£4XJaîÖÓØwÑŠñðî_ÑÕ?ž‚¦±ÔTñײú3ø»÷1Ü ÀHÞS‰|y¹y‰¡ øý¢6ªÒ‡ÔÂOûª?8gòˆ ZW;Μ½5¯‰¶þZJQ:‹±¶ÃØTm3æ› +û&xò&þ?žµ`oþX§S;Žñ¤Ó4¾’a‹¾¯ƒÎø›¸°¡.wJª‚=áFìæKJ×ç¡h; &û!ò³5ÈÒl‚®gLü«’‘ãVÏë!-N¬Ãˆdñ§èê_¦‚¦±Ó“©©"ÊIT–ì@½]™þ²¬oˆT!Êä¼ÜC!>¤¾ÛW]Á9“g~zèUÔÆ›ð½½# /Ö…±vT­ù¡5�+Ù:Ñ«á�Šó‹±½â<¬Ëž°K‡'™ã[þ‰ÕÃ|CݸRweÚ¨8Ú€–¾â¨tä¸ÕózH‹Ó� –Rëê_xÚ…dS7ÈÛ\ˆ—š*¼ìÀ~S¿8¼)’÷Ts*ñ¼Üñ¿ƒ|[凵+‘:øi_9‚+ª6ÇØ„>}%›ÏÁ>#$–’‘-ø'FÂ6"Ÿ¢£®)í>©<é4/Dæy‰á¡'à‚½‘Z§‘T#Ç­ž×CZœh°”‚<Wÿ÷=Ô¬û"ù%Û¡Ý^„Ü5™È«,Gj*¾!yO%â¢Vr^n¶0&ßÖtAúZøi_ÚäŠk›x›ÐG`˜NÐ_J&Ü\XŸòOu!V+C0ŸÐãFwdVëƒFT| C›ÕŽ!¯R×ÌïD“¹1ïúŸÃÞûlµ\Swáö•¥…æž´â’Í|â,åf¥WÿXJ”hŠÏ¢cá4œ”÷¢qwušsÇñ_áu=ž!yO%räå¦ é„ô!µðÓ¾l“K‡?4‡mr±àŠ»°iÕor©kš'¦ñ…È<C0i³²·dˆZKº¿ä€]Sk+-X´6EûÁÌ„—pš?ÇC/¼Ö( Ñâx­I<Ú_au%2Éìõ[S7,žWy/'‚ùS [°Éq]_HÞS‰(?)ÉËM1RéÃja™àŠ;ët!Q+êºÂÏ“NÓøBdž!\­»‚GC‹qlå¯6To7ÀÆþ=dG›®mn¥™ã,¥b *-£Ág†ø{ ‹Æùt7NdKK­­-‚¹² ßÃvœzTlBeÓo%cœX–Yxm_cóÖ:Üé 0=èn¿€Êe¨ÿù¡øÜSÍÉ4œ’§îº/¼§&?±®Â®4/7ÅPH¤«Q–cWtÜÀ‰‚)Ï}Í7ñÆ-±(ð ?«7A!&ñØîZ:?Ï:påëNŒ³ûGÐqb§ÇA?FZjPÓ1|WOcmØûFÙBZ3a¤åkò%ý6…Œ(1‚“xÔ Å›;›áä|…Fw¦a¹ÊwcMø fy›Ÿ¤xÁO>ã„ÄE­ y¹ù‰¡0gCn‡¥' @nDL¦á꾌:Ýw¸î˜åC|¶ÞÆ-ÛHšå6ñ N ²75¬(í úÛFò~~²@NÄJ˜ÆÓÆíÐäT*ðd\\ŽxàÌÎ#¸ØÞ…žû?¢vË?µ~êΟʼnÓÇPQ´~tc£ e>×o¸nÐÏŸä46àèÿÒ¢²IÚ=ýt@·dò±ötâ¬þ>†Ã ˜%åoŒ¦<ÈÄ,&ìíň¹{H4EfáèB‹ùlnuä¡%yO-ÒñC-ÒÉmƒHŒ¹§Ø¬Y‹Ü¢MÈÏÛ Ó ¦o!K³õ}™>qae_¡þÞ¯ î#bëǨóƒ”#Çþx›bIóé:ûf†Y¸ÛÛÑûšŸ:ÛÛŽv™¢<„tX4:¨J„Õ¿ †#[‘«Ñ »è3\±‹¿Eð`àî%ÔÕ]F·KÚú]!«Ñ`黀Ò ²²7¢ì³=(Úð´[öÂÐÇçfnàVr-ÖÃ.d”9x,GñÞÑ›púf1óÔˆ9o¢¨¢å¥zUø’¼óg1ÈmƒHY{=ÞÙÔˆAÀLÿ%|ræ¡(ÍâØî¸€]õ$nRIÅwçšÕ»Ñš<¢žK¾ÂÏÖ|dÈœN³ñò�J*OF®‡" ‹±q�&—òN å@óš¼(£5…·fCS,+ã3âxd…®ÌÛU=𜜯ÐHh¥ ¶Å:‹Ìxb½!ŒÀRõ6Ö”^Óÿ*ÌR6$ï¼ÃS rÛ V€à‚娗ÁSÐQXŸ‚Å3ñî3(ÖYÅÙ"“¨£5yØ<.õ ??Y 2§ÓñÚ1º”‘1N¤&g«ƒY¸¯ÿŸßÿ;†}!`Ê~úÆ{øV­9kCÝ[Ù‹'9!cÜû+tÅgaå|ÌY=B› Ô¶Xg¾3‡Pkq ¿ý 5o£Ê2Á×óþš4_N $ï¼ÃW rÛ eÎy{òÖFÉ)+ï ºãEð]™Bý­É#‘)¹ÂŸ™,™ÓifŒe}1˜ÔRÆÐQ}ˆŒq"¥dNÒMp,gWœ›Ø¯à¶Ca¹IëÙTŒBZÓ#Nr%ØXÿH\¬‰0c<÷mä箣ÔfªG])Q‚·†Ò·D¹X‡‚š{pOÿ ˹ÿ/N5 {\ù»$ï©Dm1ÈmƒHá™ ; +aX¸¦ÌÊU´=ø“ƒØ1êßhMþÉIxÿgÖëPÇ®S×_B›u¾ö›à“þRɬ1^ýš–Š©šŒq"¥¬:c|{n^ú—bä,µÙ›PoOÞ"QNkúŸ¡ûû:茿aÜoC]î”T_‚U§'´“BPÄ6\R$m0mmÃL:ñ{1[œ@ÏT/¤JP2¬oˆT!ꃪb(Û±¦áºÛCó%ÔgЋGìÖ³¢Ž^†U­RXl›”ħE(Ñ~„rCâAxåø9ÈœNÏb¬í3|dˆ?¶3·Î>C›ÂÒÅÊbõÌkADk‚K˜D_Ó?qæÖ`ÄœHu¶vU¤6‹ƒßŠ3åláÆÉLZŒIRS¢ˆÊ2ú�ç*ÞC¶Ø¬?Kº}«ø—Qóªe4‡aähq™ ìw©‚M jŠ¡@nÄ þÆýš÷¡a¾ÆùŠ2¿ E¹¢avô6\¼¬–l´ì*§Ó¸M êzFŶ ÞNÂÞP £óUð}Ë!ÇwÈC&uZhĦ¼#h‹½y®¶#ÈÛh€Cù—ŠŽY=óZ˜1ΙAÞ¸[vŸ…±½ Öîë¨Ó¾…¬õŸ£Ã“¼Ò)¤5½p\®@žf©ñØ®º ëBŠþX=B› äH‰Â¢Gošâj\l¿Þ(s'Òjù²“À"äU|æðz˜.A§-A¥á'ñßí°O(wW›ä=•¨/à™ÚOIäcÎaÀF͇Ðuüµ¸aéG•Ø×2¬€Í§Õ ›÷ÞCÖ#†2¤ÝâË<Q’ã;ä!£:- ¡ew.4ù{QßÒ‰¾¡~}h©ß‹|M¶Ÿ¦8Ö±ÚY=óÚ,Ü-ŸB³áŸèö„Ö#Óp[/¡ªh} âû“'Ž2Z3À-õWÂŒ±ü¤ƒvcÐì–œÎÄ´“‚_†”(lG}7¶.Iå$2ëGzTX¾Âvœ9+ÿ_q¡¡?…ä%yO%©Œ¡À“Û†¨'¾é°gåBú Ôf ÆØ"Â¥ÁhêÂËILr~[nõ!`ʦGáÆ†€+ͼ!]Œwóß‚&aw39¾C2­Ó‚»g¶ücÞˆ(ëøº%B¨–Lë@Zñ{0d»s·K…Â|˜ø{’‚PΣ֜†«ýœ½Õ¢‘®?xîà#¯¬*¡•à‘ˆ ‡••¥DñýÝžoÐå Põ ý¦ïq5N¿_4«Ô É{*‰§bYÁ‚”·xˆ mŠ¡@D!x­ÐoÞ‰º;#rw߯ÅÊ”Öß <?4Âa:%çq×} _ê~„uœå-FnI ®ØWr¢$ÇwH‡²3×ãhÅNhµ;Qqôk;žrÈX м&/ jÍX‡<°¶t’1®jDãCrJæ—ºš€±Á«ñ¡HÞS‰¨’c(ðä¶A1ˆÄ DS_³TN¢‹fs#žrsOwÏ®ÿ€Û*¸õ”Ybågø1Úûï´Ž[LÆ2Ã,Üííè}(Íö¶£äH!™Óu¢ÖÛ* r"&Ü@ 9Õs ­ø''09îÀ}ctº³¨oj[qŒ�a¤‡kšñ0Ü ”'Íð•.µÉÉ{*‘#†OnCX /Ðqö;t ‡ßpŠQ8 &ø\è½uǵoCC›¾2À6"Ï@w£+jï@cÅÇеõÀ>äIK¿gN§Ùͨ(©<¹˜IcI9‰Ê’$oDJ¡yM^”Ñš³PÿÎzW¢l&˜;ÀûEFZiî{¨)X'¶còK¶C»½¹kÞÇÑö¿œxg1aoECý÷0waF|öt¡Å|6Rã©M>HÞS‰¸“C'· ±.CX|»øÌ`âiLú}(ÊÖˆ}¿E{¿À…Óuq‡RÌ㢳PÄubm»Š}¦iVhó‡H-LÎùPFk²¼‰[wÃ84|!„€YÿìÒÓÎ ¡•‚C 4Ågѱp..à'zѸ»:ÁÔGsðXŽâ½£7áôÍbæ©;rÞDQE%ÊKõ ž&¦µÉÉ{*‰·[I þÜ6(†‘0þ18îÿÈažñi wâ0hr·âHÃõ…\TNıïê94>r†m ²Ò¶ê}0Øþÿí„£M“mQñ…TÛŒý–ÉðÑr¦²:X†íP”y2ƉÔAóš¼îG iÍŒué±Gß gÄ l‡©þ&]SW5Ì¿u ¶,¹R;ƒ!ã¡àIà,^N,w=]…=„ÆiqU4KÕÛXSÊòÓ¿ ûŽÌ¡6ù yO%lA*5†S~Ý6Ô郌ðžg<u÷6.߃Ò}z˜º½$c\æà}ü-æ|p\¹ˆŽ@Dq­Øq…ÁÈú²!LÁem…¡Ž]o€ÑbÏÐ8ÉÜö&ñ2âMÆ8‘~Vë¼–*÷#e´æÜ4n~#ÐùK ùŒ«œYxm_cóÖ:Üé  =èn¿€Êe¨ÿù¡øÜSÍÉeNÉÙIà!ÔZèo?…BÍÛ¨²ŒˆJÕóþšO×S‡Úäƒä=•ÈCùON¬ô3éCM2Dú ÊÉ3Înoõ£Ë¤GUÙn(;3G)gîi#6kò°WΓqa}†]Èõ8K“‹¢íÛQ’¿9;ŒxH±–Aü£p´×aËšw±·± N/Û˜D÷‰ÏÈ'RÊêš×Rï~¤Öôc¤å$jLÑ;Äâ•w4ÐbL 3xfÚ5l"\¶¼ÍOïlPðöÂPú–ø¾u(¨¹÷ôŸ°œ;+3—a ì¨gV5¡¶ßÃòÄPhŸ¹Áa †šdˆôA>™g\x §ùESO~¬OdMï5oà¿¢ÚÛðGØ@ŸÅþLo�ò‡nо€×ÿ.köæí&cœH)«g^Kû‘rZÓïÁÄKeNf´“ˆ§gõ÷1á¢]þÆhh¢Œ‡ß‹Q¢ìF£6ù yO%ê¡ÀP“ ‘>È÷yÆýÏÐݤ‡®áì”’‡­íÜlr) tgÖV‡·²v,‰Y¾Ä ¾t˜o¢ýú=ü÷ÿdt›€P9«j^Kƒû‘BZÓ…ÛWÀõ›çž´â’Í|âZŒIE46–ä˜_ q|Í„çèíÉÌ¢- µÉÉ{*Q †šdˆôA>øÎ3 ŒÈ®2X€¼rû›±3GMñ9ô)9Y~†`}™qfhÜú¡8.N_ðÂa<ŒâÜ\”§}Ógãâɲˡ—âñO:'R º™vRç~¤Ö‚I›1ÙÎ ÖWµcŒó9nu ­¼¾aX¯_@]Rtýp™C{äT0g°œ>ˆ’Íç`Ÿ ¸Z±oC!öÝü+íÆ¹Úäƒä=•¨?†CM2Dú '<çge%ØÔø‡8‡L¡¿±g܆ÏPoŸš‘0|莸�„kúâlÛSÌŒñϱOÿs‚²µÌ1Tžÿ1"ÅoD¹|Úœr2Ɖ”²êç5™ÝÒšC0WVácóâ€cÔ£¢`*›~Ã(gƸÃሙІþýË/¿ßE$Ê¢¿w ÊâÓ¢”h?B¹¡7Aß0q3íAnÑ6hµÚ¨r¦i2Æe„ŒT¢þ öÔ‚š~K¦&ìh3qÅü�ClÕû-ÿÂ-ÛHŒï¥îv;ywþ€ÀcÁáÃxüntëʹ¸q¢4Hw¢YÆo>‡Ê@,‘µÈ+¿ ÝÄ RȪÒÍ4¸)¤5_bxh,ÒH&ñ¨A‹7w6ÙyÇÆÆÆ‚«1¾R^ÁiÜ ¦u=,X_(mÇ$ì µ0:_ß·‰\íÊL.”ÎÁƒ—Èz¨ÌËŒä A·WQ18qÛ`0¹Q jú-G4p«Þ;†6çK3O`Ü‘‹ì¢Op¤|7t=ãÁ7eŠi8¯@ž&Æ8¸þstx8[¨(�.tÇ}W:_D‹><1›a›J÷h{-#øÑv”¥ü{ Z}'iþUÃ…n¦…ô¸)¤5]¸c¶""·¢ð7Üÿs_ÖÈ™rñ_ÿõ_‘“±X6mÚü+‘8Ì¿õ=d-DÐ ãnñ¿‰ž6ÌÂ}§^F-†æžÀ|ɆL_TàÆnƒDË;+$ó©@€ßëT­ÛƒÉŽ’aP¡+ö[ÂO°~ÿý÷່•2kû¥kà³³Áú5e0:}œÓb·V>Eaå·ým2ß§—‹M.¥ÁÅ8à2AœÏ"Kн'ø¶Ì Îîh`·œ4EÞHò.t3-¤ÇýH!­©<ŸñX§ãtB˜ ¢øÛô(ÜØ0æñb¼›ÿ4ëÀ2–Èq7»¦^¶¤?%áïH¬j Öé8ɼü¨Ýmƒ¡t`r­ ¡Â6®ˆä˜{z »jïàÏþÛ¨-|#8ÿs’fŠmú¶žÆ¾‹VŒ‡W„“M_%Âô%ã¸þ…Ê =Œ ,Í0~³…Uh²¹3(s³ð:L¨*XMþAí“–b5Á…n¦‰t¸)Æ7ŸÐá‡ðÝfSt¥Û¸ô~:N'„R˜†«û¾Ôý븶ºbä–ÔàJï $v‹êp⇰˜â„zY· ›*/Á6šÙóµ jѧã$ó©@ýn 5è“ÿp}`…mX&ÑgØ…±-5µ¸ïöÀi1@§ûMÖè«Äé†ïM_%ÂÚ.ãøþÆÐ‹È5‚ൡaK>všãÆåH-âšÈòOg¯AŽökt¹"}W…Ã&Ÿq"…p¡›i!=îG iM/F£&Z3öóØ©{ þ•OÂOÇé„0Yfá¾ý®?‹”0‹±¶‹¸šPÄPSƒƒx=7Í<BÃκŒçUfò¡ÂOÇIæSúÝ6jЉX§ãt*.~xG_ÀË_,Ûô­AÅ7?„múþ€o*ŠPÈÁ¦¯áf¦à²¶ÂPÇ\zêÑxþsü¯-‡ÑÔ—Óhÿ ØR䔞C×Óá¨x!Ãxlü.ÁµA$7º™rÒã~¤Ö¿ZðGĀㄣ­Ù:X9sØé8J6T ¯ø .Ú^ˆOì%q2º|ùš²Ówˆßñ¯ 0ý9i 9nàDÁÆŒG¹UÓ :'™OêwÛ`°º¨ðÓq:W;|ÃÃx±:›…÷ÑwØòæ'09勼»ZàbX¸¡AvÁ.|öé&l(ù[Ê/¢EVN+3pµDé÷¢ð² E¹{\Dr¨eŽNÿ0:[t?’Åã±}Æ×cSýïä‹¥j‚ œÑ�7ž…îr3¾+šœm8vâ\‚9þââ亩!Q#auQÌè SñT¢n· †Zt"ütœNÅW#~¸;ôØ]õC 7åÃÃ8 8تyÅu0.°~kÊLNÌØ 8`HÿÉøk0ÝmÆ52Ɖ¢¶uk|ØíÜ«èôDß2ß$TŒ1~UgÀ½+¬ÖÅb{â^AaB©~¿¨¢Òõ5´9d­Ù Ã<+˜EããêW¨¿÷k„üXmýõeöŠ:cõ j„tÔï¶ÁP“N°Óq:O1þiø¸º¶>›Q¯,Î ù«ÆY[ÞÊÚãÐLàyÞ„×úŠ3Á?ÁÕsìý•{pü-Ž‰Ô±zÖ­é¹I¨ŒÖþFgÓE4›®£{È'>{0ÐÙ ó­^¸¹ó#ä…âGÙ'ÅÈäм ÇnâÌÑsh5·âÁø2ŠÀ®—5Õ`Ÿþœn'ìÿý×|´iÿ8l¿Á60ÎÅDÊ”š ƒM êvÛ`N+ÁoգܨÏÅx>Ïüm¾lÎŒ5¥ÁÅ80õê ·¢Þþ2ðè·êûî»ÈÕðÚl)‚ï?h*ÝG×Ô‰”²zæhfƒ¤>ˆBZs–ªí8Ú6Ÿ0…§ÆÝÈÉ.FÅ‘=(å8€!ó»Rš¼O`èy¾°°™OïtpÙ gîi#6¯Ý‚pºâäd­Cá?/à»,-ÛÙz ¥ §ƒJdx‰£~· éßc\fò¾DvÅ¢yUƸ8¸íDƸ<ð1ð»ºðý—z­/à·Õ!7w+ª¯<ÊÀÚ!‘L¡ ž$yDêàC7ÓAzb(£5gm¨+m€ØÂX;ªÖ¿‰R¶ . ÂXú%×Ü©ˆ†ÃÕó0 G ¼€™ÁGx÷Jí,Ü-ŸbmEÆ0Æ¥5â÷–*lÕµÂ60 ×íº“¸’P:¨Ô±z5BÔî¶Á b¸2œWúæÐ Å|ùI·Ñn͸e[.¤ 2Æå€ÆhıÛ| •çŒÿÈr :í~2Ɖ”²ºuSþX Êh͹'hÜ¥ƒåÏÿ ½¶85x>§û÷_ÇHæg^"…Ì+eþôo~1ÄvŠóƸդ_ðýbýKQ¡¾ hê„b`‹1u»m0H'ˆ˜øÿBû™zÜuGJê¬í¶< >e˜W64ù ¶ÿØÐ;–úfê7è?¿Aë•ÀÇ8Àf^Fî;\w°Tfâ³õ6nÙF20^ίkX»,_uY"ˆä`rFȇBZsÞ¾ (e§@š÷Qsß…iç]œÓé k²¦4Ü<¡\fíõ(¬îÀË 1þƉ.x±{÷467Ãxþ´OÈ–´?YhP#g~1¦f· é÷}\éå~6¾Î=iÅ%›'ø” ¦à0†Þ¾ÉëÇHËç8Ì¡1Ïð0ÆMÍZämB~Þ^˜í0íÇLÍÔ÷¥{#_ÿ¯~ããèÜâá¥mÕ‡É'R ÍÑò¢ Öà÷¾À¨WŒ ®”s4åø`:t÷0,•ðNý#Ì “p˜k±%w²Y–R\Á·g õjÓxá[0 )°Å˜ºÝ64Ñ1q™ eƒÉGü¢ÁúªvŒeÐêF®cÿá°:ÌØaØUÛ+2ÅWëÏLÃ6õßÙÔˆAcû/á“31ÅÖ£Ž ØÅÖÁ÷¥‡Xþ«ÑÏ8‘zxÐM5A­)7ã½è~â >ÄBÐí2 Ÿ‰T"xû`ªÝ‡ò£?ÁíÛ1ëÀ•¯;1|ÌÊÔFñ°{`ùÉÌ#ÔºšñMµ v· MôDL\×qâÄÅHÙ˧Qº© çÃýÈ[mͨÝ; ë™0=cº%`Êú5˜œâ¿ˆ•ÀÅ8 ¸`9öe0…Ñ(,‡OÁâ™Æx÷™4¥6 ÿQ'þJÄ7Õï…Ûñ/Tåí&cœH)«gŽžƒ÷ñcü}Î!<Go¯|7hÅ#7.q ¬<‡æðÅBDi‚Nû.´dŒA”=¨ Á\U¹Ž(͸¬+EŽ6ó7V;JqÛ`¨{¢×/žã¥å\9SÃxÚ< ñö†ƒÐõdz[53ìäTÿ;^ ÃhÙR¶|´rÀôKi%SÌ9¯bOÞÚuzÕ/‚ïJ%l#µ:¡”“¨ ­æ6tXŸ`TáãËÒö¦Â{Q'¢þ™C{ätÌ5:TNDÉæs°Ï\­Ø·¡ûnþ•´qÎmë)¶cãã?â|å{”,š¼ \vdþô‰àebññæó•(Јƒ´æ”_~Œåî‹i@!n åêD"©‡Dã±þŸtr• ®[0´8¢|dÿƒ¶£…üE.ᵸñËwóFyðePš~e²¾Â3vVÂ1¿]E[çÒdð&nŒ« Þd”ê³<JS‡éßämƒV«*G`˜&cœKb]S^ÂÙvL4L4ÈÑ~.ù‹§%ɲ±X×ÔçàsÞÄÑ‚uÈÊÙ}×3¾É«%¸m0”«lý5©‡.Ÿ†6§œŒñdˆç3ž½ õ Ú v=½›6^Wç¥éWfë; WçX£2Uø­z”³»ÁçÔAÆ8P}–GicJâ$²Á.n[O5뎞†‘‹ ª[ðT¦œtÄò(I~Ô5ˆMÃÝóm ó¦ -OW’ÿš æQ®N,cŒ7ŸC%Û ÊZ‹¼òËpøH3VŒ«ºúÛè ÏoµcpÜÇç83Óë—~å.ã‹Òô+£õõ=Æåòw·Y="Šæ=T{àò¥Òµ‡Œq ú,oõ‘Y¸ï´âÁË(Ÿ{ó%¦‚Rá¶õÔб‚÷1LUïA£)Ä^ã#.R­”$?ªÄØ•gÓg(ЬCþ^ãÒ“W‚HåêDì]tÁ7ˆ¶£ï‹ z–¾.òO¿Þÿ —µ†:æ»W¦¶§ØZþgènÒC×p6þù]°¶¶Ãææë6œÒô+“õµÕá­¼ ÔG¹bý¤Û‰•ߊÿ6ã–},…›AdŒó�Õgy”6¦$Ó¿8¹ýב-·­Ç~¨rÄ9¸µÅëc_ÓÆ04ü2ø@¤%ɲe=ˆÿ/Xj?DvLcÃC“Ï8‘0ªÐ‰�â\à~€†R–—ø}T·<¡MY)“è3ìBN–Ù»ðÙ§›°¡ä#l)¿ˆ¾ŒoþMãiãvh4¹(ú°�yå& ö7c'»%T|}Ý„Pš~e´¾âÜÖ~¦wÝ‘Ògmçp°åYð)•1ÎTŸåQÚ˜’8¢þ™u8ñCsØf L¼ ›*/Á6*£ ·­§ÜŽÁ¸Í¸¦›•ó1ºþˆ 6#–Ç&è¯R4õT¢$ùQö &ã¿ÁÀŒ Ñ/mèÄÓhywõ¨¿AÑÔ3ˆÒdLû,¼ª ÖA“Fû$ŸW©„à4b«æ ×=À¸_{¬u(39éB2ܾS°×—`Sãb=¦ÐßX3ÖÉÀëÃg¨·Ëu¡Q:4¬ÁçƒëºAÆ8P}–GicJ∣ùà žGO.3а³=^yÆn[O©+¸ÚPSq/²l/ÊG)¥6K)J’EbÂ_h«ÙSÎÊö"n¢t¯V”&cʟاá²üÅÙkbí^ c˜|ÆWLàÊpÖŽ…ÜøóÆø ¼Ö/Ò”óyyw;޼‹1Öµ ¶Àãw£[WΕ1EãÁ Èøm ¾£W¦8¥À›ŒR}–GicJâøáúטþŽ8drÜÀ‰‚²ëܶžz;VdÚ ã52ÆS‰’äGÕ²`ÝÆ;dŒg¥É˜¢uÂÿ¶àâ=§ôºžFNâ.×0¿ÃUЦ¾r¦~C]áVÔÛçݼüVrYJ>ÍÛ¨²Œdød|ÎkÇÒ9ŠòQÖÎEþþJÓ¯LÖ—·Û´Ó«`7¥ú,ÒÆ”Äa7SbùŒk½©¶)y”‘ÛÖS~ÇÎ`ÂÑ “AH_g0án¯ ó‡!³ðS�Ÿ”¢$ùQ¾¬3ÄEÊ„&êDy×Õ`ºÛ¼Ê'`Ö?›á…òêFi2¦\˜«í$JcÝY(ÛP”»‡R›%…8θºðý—z­/à·Õ!7w+ª¯ð uÏLŸ¢0Ô+,Ø—ù8½\4$_·1˜a Ê~°.‘˜²_…>b­©\x“QªÏò(mLIQç®~…ú{¿†eð‹­£2ºªpÛzŠîXÿ0îë>BŽøØïX,ëPPeš²J¤%É¢e=À4\÷¿À'!BÞ³ )ø &ùÊf¥É˜Òê»2Lw›qŒqõ!Îý­¿s—Ê,V�W·1˜1þ òËÏÂh±aÈ=†ÌÁç4cïúrÅoöñ&£TŸåQÚ˜’8ü“˜wྱ:ÝYÔ7µÁêš’U÷¹m=åv¬}õ[ jíñï`²tÍï¢t·Ãtþ´yë°~ßMŒu’R”$?ÊÄøúΡX³yÚc8ojGw`ç° Ów8®}šõUh!Ã#“(MÆT1±ûÇàè0ƒ>éa0ÝCohŸõƒ.G©YLØÅyÞd‚¹{3,€ß@ZÌw(µ™D2[_žnc0c¼od¿Ì{žƒ‚²|c¼ëwð4| ՇȗªÏòðV9Ü÷PS°. où%Ûçã ­yGÛÿ’íf ·­§ØŽõXP¹¶�ÕWÌN|ý0ïÕBˆ²J¤ %ɲ±QX*7 ¯ºîXÖ…ðNs%ÞÓ=?±„WJ“1eë[¼ßƒnË?¿#¢hÞC•é1¥7S%sâôï½ §o3OØ‘ó&Š**Q^ª—-ê®(M¿2Y_aÂŽ[wƒš xŸ¢³å_¸e‘m!ž8¡kêÓðþkû|st ²ço¥ir·à NÚýdŒË Õgyx«|øà0”@S| §áÌ-³»«Ñ"ÓA·­§ÔŽeþE¹[pÆ]l xeû [ê.«§%É¢±Yêr?†Ñù*øB ^ýŽº-ç`'ÏJ“1E넯õÅo@“WŠãçM°t÷ÀjíA·Å„óÇK‘§Ù€}mÏ‚“:¡^ÂVwÓâ4?KÕÛXSzNÿ+ Q4u d´¾ ªÞ;†6çK3O`Ü‘‹ì¢Op¤|7t=ãÁ7¥˜Üü õu¢Å ÃÁ’<h²ÊÈ—ªÏò(mLI–²r ¶£æì™°q}/'<’6ç¸m=¥vlÀŸèuA=\&”q†EÍ(I~=ˆù­Ðåê`]V˜‡`*«{Í{ˆT¢4S®N°ÓÑÃX›÷9,îXTAŸÎ÷ÎÂ*SÖU…»æãQ‹"ž˜Í²EµMži<m<„Z‹ýí§Pò)f·áö×Èv‚"4$άík”rÇÏbÌrë×”ÁèôA2¢”ËuœV]5ã2CõY¥)‰3 ¯8lÞZ‡;=¡�n=èn¿€Êe¨ÿùaÀ-ÓTsRÒÏmë)¶cÇÚ°ÿžàãRLuë°=0¸©BIò£ìAì9Úöײ\Úž©.œØÞ„øŒ¡4S®N°ÓѰuÙ”G^ñ=ûPo'Çã2A+Ê“ÈÂCj3qv÷öÂPú–XŸu(¨¹÷ôŸ°œ; î2¬ãü\ Rš~e²¾sO/aWíüÙµ…o`}U;ÆîWG±¿e˜ÃuÜ$ºO|FƸÌP}–GicJâ°,»±Fü}ì7Æ/o`sã$ëŒÄmë±§L<°éOáŠÓ|g¾¡;¨-Úƒ#Öß ¹P’ü(WÖ¦lßáð•þ˜'‚O\ŒÖ–à=Ãã¤)B:J“1åê;•b1A–»’Ìü>«¹º¶¬\×qâÄÅÈÔa—O£tÓ!4ÙÜ6Œ‚ÜŒü×ÿÏŽÿa'*ÀM2Z_a}†]ì8š‚ZÜw{à´ Ó}‰&ë ŽŒq–ÚÌŒ“· WC×Ôå†ê³<JSV„§gõ÷1ìrÁ·üÑ%Ù ‡ÛÖStÇúÿÂÝs´Gä>8ÛõØ»£Õ§yÄ•Ï/¿ü™XeÓ¦MÁwñÃý×Ŭ++ìoÊb®»ßã«ö?±˜ýTÀŒóÎì-CEõ)蚬ܧûQ3L®”„Òê»È,ÆÚŽáe4ø‹ tŸ80ï[L¬Œ©a <αüö†ƒñß„¸¥ŠÌ××ïè x3žaî[?áîr·,„ÿÁ³;7ñëÿUöö7o2JõY¥)+C€ßë„õúÔétÐÕ_B›uXÖ\þܶžâ;V˜…6ÔSbG¾|è8ÁçÁ¤Œ‰â‰E>þøã€ÜDf¨óÆØØX̺æååþÆ7Ó|Z”q?Ehã…ßÿ\(L¶ÂŸy“1vÂ^¿ðú^¼x1ø.…0õô‡›áŒ“]`ÈòO½g€ƒ¦•ãjCƒÉy"1dGÛ‰"dgÜ—¸¥ ¥Õ7u°[5{Q¢kƒÝå]*ï‚£ŽÊ«èd\f¨>Ë£f]t?b©âÓ¢”h?B¹¡W¶Ì(ܶžª:vî 7¿‹Ý׺pcïÛx‡"©§‡Ã›ðÂã©xˆX§ãÌ(á ÈÆ;ÿó?ÿØØ‰–/V˜Ë±t7TxÜL[žùÔfç¾j‡s&l¦žùígöcGE5NsæC¬âùŒgoC½-~¤–ô@ÜR…Òê›:˜1^”ûµÈ-þ'Îÿ„–k—ðÍÑ=(Î]ü]S—ªÏòðVùx§q'4šÔõŒ²;2Á�‰“°7Ô.ŸIhpÛzªéXÁ‡‰¿èk©Å;KñÑ{5¸Öç”ä[@Ä'tª*</ä£OÇ™ñÄŒ(þ!c\ °pù føòH´î²ÂófÚ"¢ñ=êÄ_ÞHãZðûiÓUn\­ÐÕßFO ¢m¨ôâɨOì…ÌCÜRƒÒê›:˜1®C}}×`Ð@IÀ� ó’Ю¡³Ïžzã2CõYõê(»ñô²¶1˜dBƸ[üo¹l7ž¸m=µtìœÃ€âoÉZóäþcþ‘û@T>ÍæF<¥kв~¦„…|øé¸2NÅdŒ+¶±Ãt $_¬ðx*"Öé¸2NÅ) [Úð{0áý¿pY[a¨Ó‰Fn=šÚþ O®_~/FGc\!æ¦[J"£õå*ž�ÿ‹çxî#xð´õœl|wàõïQ ¼É(Õgy”6¦$ R¬GáÆØ7ݘ1^Œwóß‚fýXÆäÙdå¶õTÓ±KNÆ?C³mO𱓯FB'lJXȇNÇ•s*Î c\)0`ò*¼žŠ‡?WÆ©8ƒŒñ´±ÙZƒì‚]øìÓMØPò¶”_D_ÔÍ„Œáƒãþ¨×éPghA÷Óqî s¦_J"£õå*žhhONâå’ÿé,¼ŽAwòGØÆ§áµÛðDÎèR £}ªÏòðVy™†«û¾Ôý븶ºbä–ÔàJï ȵ畱֛̤Å0ûõïl Ÿñ4Á å,äçOÇ•s*Î c\I„NÇy>~:®_q2ÆÓ…à4b«æ ×=À¸¸ ò[ëPfrbÆnÀes»§ ßc\.š  Šæ}mÿ‹+ƒœÕKId´¾\¥ÓccÍq31ÞG¸RS‰Ší‡èšºÌP}–GicJâÌÂ}û\­s,sÊE\•IÏ2ÖzR;NY?ߤ‡¢©*Œq%:çýT<Û4PÒfãécÖV‡·²vÀ84ŸÞlÞ„×úŠ3MÝ‘–½xS[‡6ÛP0 –8÷ö¸¸I!£õå*kÊ É+Åñó&ܵ b<z=é„©ü�ã2CõY¥)‰Ãt®yÅqÑöb~Žñ¿€íòAä˘Ï?c­'µãÔÛñÁ;dŒÄ"dŒ§©ßPW¸õö—G¿U‡ÜwßEn(ryàÕLÁ| c埡ÔfÉh}¹J§ÇÆš(©Ø m~N ]²²  ­ªƒ±Ý d8çÉ8éŒÞ@P¼É(Õgyx«|ð ãÅŒh€ÏBw¹ß±ÛO9ÛpìÄ9Üv+Üg\jÇ©·ã ‚w^bàAF—[ùú¸n¸wð‘ Ô ãéC€ßÕ…ï¿ÔÃh}¿­¹¹[Q}å‘lù^“‡¥À©FmÇH˜6ƒ Ç¿P]X.[ 9PÚú)£õå*Þ¼½Ýèõαk–´áns-¶äåâ- «×Zä• (wŒË Õgyx«œÌgF™†«ëkhs4ÈZ³†ÿxdÝüÍXëIí85w<A(“9ø\½¸uñ8´yk‘¥5Áü A¨2Æ3‹8î8oÀp›ƒÑÆgGcéÑ Ú­v;J§—ëP¨{�OÆ7 QÚú)£õå<üVÔÕõÀçuÁÑ}MuûP”]NƸÌP}–GicJâˆó»ù8Ê>)FvÖ[ÐêïÂñŸ›8sôZÍ­x SÊÊŒµžÔŽSoÇ„Âðãi— ú½l°b'ÅØ[w§u­dŒ«�¾£w4´øàŸpྱ:ÝYÔ7µÁêšâcá®&ü8­×Ñpd+r5ÙК†‚È,‚ωî+u¨*+EiÅç¨oy6ÇJ[?e´¾¼§Ó›µá«ê[[±PdeãÁl³Åiø†žç ·žo/ ¥ÉgœÛÉÄ}W:_,»ðš{ÒŠKi¿ÞD)`®ÆmoŠú¸¹%Ÿ¡áúoÁEÊ,^Nx®kÄê@pßCMÁ:Q'r_²ÚíEÈ]Ã_Dme¢=ÆýË:”°SçµÈÓÃùêQÏÃɸˆà†õúÔéDíþ ,v7wýNÆø à>Þ t݉êk0*ν‚ï?hÚY6™òÄêF4Ưž‡i8:ˆ€™ÁGxÌ\Fd@9Ƹ ®‹Áíd7'exÑ`}U{ØN&A(~ïl·.âxÙÇØ§7¡Ëá†O cœXøà0”@S| §á줼»«¹Š¨­D„±{8ºa­8‡n@©®] 9¼gáçàôyþ´ä­À<¯É-Âví‡ÈÏÎÅãðN‹ÕOId²¾Ü§ÓcFÁS#v0_Öàú2g÷5¸h}I²0ï3žZø0ÆÇ{ÑýÄ|ˆ…8؈ß¡°khÜN&qsRVá|sØk­¶å`+ hÞýëÏB§Ó¡Îð#Ú:íÜ\%|ý0'ÐLü=®n4Õ}†ëáس­·záæìºc$3˜xÚ“þ0ÊÊ*PVÝB×Ô‰UÆìõ[°Å8µH¨MU’ðÁa1 ºâsÄ1Ñ囆·ß ýÕL_SŸÆÓÆíÐh6£¶½?˜Ú,8öï§ÔfRÈd}yK§'Lû0½d0ßP7®ÔºÆ{àâÄž ˆDáÃwý U•çÐnÀF”&è´ïFø„q;™p•“rà†nCвC»Â‘E“·ºfÐߟVüð:­¸ÞðJrWÐlî 7¿Mîûø0¿�å¦Çè7}‚œ¬7P\ߋ嶭xae›¡fáµ}Í[ëp§'ì©ÝíP¹± õ??Ÿ»`ª9I§ä¼ÐTþ64ÙÙx#‹Ÿñ—°Õ½‡¬-F EÌ7”ÚL*­/Wéô˜ÿê1Òç¡d87ÆÄùÊ÷  U¸ìXœÌ¸L\·`hqDæ¤týmG 3“Råøãòî-Øqú´[ú{¾ÐÌ(ø0ñ·k.ß…­5·áJÓ©²àýþeèÊ7šiòJqüüEèëï&fœÎ>Bý;Úù wÆÆO¾‚uJ¬»ÿ1 »¾ƒ«Mo¥žâ«º)’9fðÌ´kD½gsTüò67>'! ”ƒ8®Ú†11Zƒ,Ñ Ò¿ˆ¶®›hy0|S¦0Óß„­ïœ™¯âe¬ü�¹k+èd\™­/oxI§ &ÅÖ&ܵ bœ—@rA$ Æx¬kêÂK8ÛŽ¡@£AŽökt¹"w¹L¸ÊI©b„1ôèkñ}ߤ8U¾ŽŒÿÞ„S?¦ÁoOÁý£…Ðd­An©¦®~L ³þÙêÊðÃmù'»îsðXNá°Å ÿxtÅgaåiGG§øª‚nŠdO'Îêïc8bC6ºüQ/mÍ®ÁÕŽÚ’<q|]‡ü½?À6Γ'6CœkúZ ¯ýmSóÆø¡CÐßæj#žJBiõM̯@QÙ§ÐÒæ±µe´U_¢éæ8éÖf1ÞÙŠN™R.‘zø0Æ£ñ?GOÃÇâbk ª[ð4†ÿ ·ƒsÌœ”v Žs’“R-Ì<ƒýD ñ ~zîÙ1‘–N˜Á„ÃCõTn¡×õ~¯¸(ÓßHÐøĵ=ïn„&Û…¢ÁúêûàjKGQ§ø*‡nŠpÀ¼ÿƒ¯¢*%<Gooº¯´ª?¼C6ܺx;öâÄÅÛ°õÿ ˯™>g6£_Yœ\Þ~àvýþꛩÜö̯žwyÇôñAîš¾DYîšàa-r‹¶¢$/‡©Íغè>Œì¶VÝ´t‡*$f¦"ž˜Í°…n¢¤„°zg*­» m½ónq™µ£­=ò8 ÷V<xõ›çžÀ|Ɇ©àãëuÆõ®ôó)?wa%w‹Üã‚h´˜ªÞƒFSˆ½Æø×€¸LünØoýoÔé¾Ãu3§á²ÞÆ-ÛW;ãª"‰�€iA˜„½éSäjÞ@öšÄO'L;>D¥á§· sÛC8¹ Ì¢ S|5³Ò›"OcëÙÿ#þ+Ŭ¶›"l±l> í‘S÷€…rú J6Ÿƒ}F€àjž …Øwó¯?—àµõË'v¢œ“<ãó Á¤ÍæÖ5Œñ$Éxnû0c|QÖʾD÷„ Žîhª«DIîÎŒq/—+§ ?\X‡‚£+ØŽ›©(•¾ûâÜs¿¬ÞÙù(Ñj±½(k Ž£=ê¶nJq™Q^r§Ã用rºR›¢1pÞ5bi»‹eýXJ¡7 oß”"þ³ £mЖä#;g7ŒO7çÕ GÆ8óËiGmñzdå쀾ëYä$&.6‡†w†–~žæž6b³† Û&äçí…iÐÓη¥Ù‚ú>~¸¨Š$�¦Ž`\ã—Ø[$Êr îq\l»‡ë-V$ÂoÞG¶Õº|¾z.PÒ)¾š ¿)’Ðæ”ÿŸŠvº)";lá²g~±!.Ü"˘¦ÉOQëƒÌCƸœd¶¾<å¶gãK%*-ìÈ \Ýf\¾x[ÞÜ“À «®š+c\iAù›;P×fÃPÐ=‡Ý˜ê3Áþ–áÄÆAqWY¡‡qa]× ã7{QPX…&›;5céÜc6®G±îç°Ópq>ëkÂî}×1’®<¡”É©ÚeάÉšÃÖÔ͸¬Û…M•—`M@ÎB®fEÿDûÀdpLd·KÌØ¿?íÈ1œã3·æwMr>FC×K}ì›"R—D~žfíõxgS#Ìå>9ó,Û¬ßq»êní¦€$�¦ a–ÚmÈÕˆÿÏüƒ¸l{‘àbÌ…;-½Xn¯uîI+.ñw@Q§ø«®6§ÂX7Ef1þð!žè¯rÈ—“LÖ—¯ÜöÌ/ÇúªvŒ±ÿµßƒ¡¾_p³éKÚ{í.v׉?cÜoý[ÿXb0 CF±MÔßßzùNÁkCÖ|ì4 Ц] ¸H}¼ÖnaÆÒ/çoe S˜˜|5ÿzªñ«;»QÀËŽ“ø8%sº€©ÁA<î¼™GhØY‡o-?kCÝ[ÙKS~†·ã*‡ c\pµ¡¦4ú!²l/ÊGi˜ q;™.XŽ}¼º1 ËáS°x¦1Þ} )WI�L-Â|4ë[q¢¢ '.â–ÍŽnËïËœŒÏ/Þ˜\Ç/šÅI˜tŠ¿Zàis*é›"á›S±eŒËÍ)Ùüëe3Q‡ ½C^.ÇE6Ÿ(‰Œ×—›Üö|Žk¨-ÛŠ2ýÏŠå», £¥|?_'ãÎñIí}Œ-l^ˆcúÄc\«þÛŒIëˆà¾3»«Ñ”{V°éK±µîfX¨.´_¬ÂÆÒzüÌž6£æpkjOwEc¼ì5öÃ|þûTÈ£_\R\€éáˆÒ!Ç œ(ؘ`ÊÆ)ô7~Œwtìp’ÁäøGTçbmy Œ‹paŒ'Ä´ÆküãsΫؓÇvQ£ ©wPÝñ"ø."¥$�0}„®¸À–ró2'C0ŸÐᇀÑ$ñ%ùÐêš ©æs¨,܄ʦß0ÊÕÀåÂí+à‰ªŸ†Ò*§Í©¤oŠ(usŠ\Iõ¯#Í+Ž\‡+Z.§~ƒþó\,<™<* ^êËOn{ݽCág¥¦ìWpH[€ì¬2þ|Æ˰>·ÛÙóûTSøz<+…)¸¬­0Ô1?é4S ÜÊb›È1Æóð¢ÙŽÆ§)œSÇÚ°÷##œqÇŽWp÷boÛó೜ěÓ4ÈÞÔxð<ÿ ô]ûµgÛ00#®‹Ecüоop?­eü™1Î| ;a DÛc¹qM¸Ûë F޼ûó™GxfÂŽÂJN£X¹Š¶f(Ðê"Ñ�€©#¶qÊ´CϧaŠyJöÃCcó»»ìJOi"¾ƒ]Cú¹ÜñŒ& ¥UJÆ7§’»)¢ÌÍ)qáb>…ê‹áWê™]ÊuæÄüëˆ"Ê׳Ûˆl)8 ‡¡·…Ÿù1Òò9§,ÐÔÊàuýŒÖ—ëÜö± IÏb& ^^b¨û'ÔU•C[Z£õ­è[IjBa}†]â<&»ðÙ§›°¡ä#l)¿ˆ¾”Íisðtœƒ¾c0âTxiyo*]„?иé=Tµ ‰#I4âøçº‰ª¼­08–‹“,âœvõ+Ôßû5,C”Xlý¥÷²Á1îÆ}ÝG¢¢E/êÅd• Ž(eËèà¼,ÓpuÞ•r<¦6 %�0u$r¢'–åNÉXÐí:t‡ï‹Ñ£†íX“­ãÌ¿F4š*«ð1,¸‡QŠ ¥ÕGæ7§¢Iô¦ˆR7§–ñ¯ûø›§àYe°S²ÞÛ¸x¼y‰laä:ö“Í; »êa{ÅGÿ³9HId²¾üç¶W�2¤%œFlռ⺠ßùkÙÎ@¦œ®º¿aþÙLëí \-û#ÎãõÿBgßÀü&ÀÀ#t¶|ƒŠüuX³ÍgJlc±­Gûpëë¡k¸1o‹ù]°¶¶Ãæ^É©¶ø=Ü76@§ÓÃÐò�O'H—BpbŒ{ÑW¿E\0²Çï`²tÍï¼t·Ãtþ´yë°~ß͈ë]ÜN&îN˜ŒKtˆ•²ò�€©#üD/Tš +݆Êó?†½vk™S²YŒwFaÞ<qºÓÕø´8W\ ¼…ÒFûüé:7„M!Z¼¹³9E“ñzxÙœJö¦HŠÚœòÇö¯ûÏ5To(LÐ¿Žˆ[Ðõ£Ë¤Æ Ð »hê.œ….íþ»Ë1 ë™0=c‹MSÖ¯q@4xY1¾R”ÛžcdHK6k«Ã[Y;‚©ÍãƒðZ¿Hq<¦¹ÈüØMm°ºXXæ4#<G×™X–YФ4ÕÚ4ž6ní³\}X€¼rû›±S\okŠÏ¡/¡+ÌGü2Ê£\xS[oeÁ‡1î± rmª-®˜ %øúaÞ«2“ÁW8žL2’ qu“L�ÀÔáÅàÀhT?³TRç±S÷@ük¢ÌÂ;pº*”‰õ/­8‰‹wû•áê üŽ“b~ëëÃä¤ä>­ðµ9%ù¦ˆ¢6§âù×±…ÇÙÄ"Ïq™¸Œm«Ây(9r×­Ãó×qÓÑxEˆc>Ë ¢ÿ¯X@­ý')^€Zà&·ýlF=¾²8Es‘s\2¤%›ú u…[QoŸßDö[uÈ}÷]äjR¹¶˽eŸíAц Ý²†T[Ž€ÏüUÔ­@i`]ø9¾1vb ¥®gS°×—`S > ÄV3[Œ¹ã|&öGaIA ¡­»ÛgÞÎczÔgÄ>Jm€ cœíxån].8€W¶¯°%,5Xøç¹Âu'N\ ;ËåÓ(Ýt(u¹‰×�0u á_†6 F?Ãèoû¸;ÅKl'U‹õ»›ñûJä¼S;­CÓ_›SrÜa(esŠù×5ÀðKO˜]ºŒ§PÓâLáéÍj!tBye¥¡7uÁ1êƒÀ1.0Âkqã—ïæòàË„JÈxnûùN^ÓçE KZ2vÛ« ß)õÖð3»!w+ª¯¤ÐýJ€qk64Åzô0÷¿º2\ÌíèÀOËØ,2ãîB[ïkdmÖŽ¶öÔÄÍÜí8vòî¼ÛǂÇ-ðøÝèÖ•'vÛ‹µÛV–ò9ø‚R›-À…1ØázÝ€ÚŸ[c|jÏ£ý ^ÂÞpºžøáŠ9H<�`êˆw¸›êW5ÌÁ7ñC}×pâƒíÐ~$N–×z14ê%C„'Ò¶9%×M¥Çgœàùà�ZFH dÃ?ާ]&è«v£ìÀ§¨6gò”2ìzz6m8¼®Nr¢ c<²¥%óOתµ]t~ì1îýºâ³é3"]f”—Äiq]ËÖ¶±ÊéJmŠnjLÃyí�ò4ÑkZ±¬ÿž¶RئÆ'gÐ16²t×jPÈ|ÝSÔ}J‚ cœ…íßÈ‚ø‰ÄI­[‡íkóD|ž'\mh0ÙÃNEÅ2dGÛ‰"ÅšŠ`…�SÇ®ê ¸×:cåß°ŽñÝ40ÿÞÌ/hrs×#ë¹È]#öCªS1àcsju݉u2nEÏÏçQ¾þ}ÔÙ2y’¦VæàsÞà(šz3ý¸~éWŒÓb“eãrá·êQnìOQx`«+ÁÆúGâl*ÂŒñÜ·‘Ÿ».½Ùb⺿†—T±œÁ3Ó§(¬ü6ì&›XÌ·ðÀéMp#…ùŒ7¡t}ж³Ûy"?àn´ ºž¨˜C«>Œq&ðúS¸âŒåý'N´CwðÿgïošÊÞ¿Ø? O|8LL L&¦ñ3\Á8!3†Ñ1ýFç›2—Àd4·?µ=g,~´ç(_Ô2Ò«jAQ©8'0R?S.éÉÔáfZ±ŽEîηHa¿¯½Ú‚mi±Ð½ÛUX¯de,ºÙ{­µãXÇñ>ª³öÉöÿ<EDZ4){ f}—%bù€Òñãc.ü·˜‚£OñS½³³VÔÿôt‰vP4z2ž‡Ò†ç°½[ÁZ (8µ¶2Eg<lÍø¤¹¶bcŽŽ›Pr—Ñh%'jÂgÓC<0¿¥Æ!áÝC05^®‘§®‡Ñâ\ÓÎÒê„§ Þ4†­ftÛ£uˆ’w/nmƒlÑÞ* Ù”j»¤é9îyŽŸ•à´Ï1ê1C)ߊÜòë0-KI<F 1–¹’÷LyPЏOÐN¢ì ÁžxÚôGŒAEâËu ^Y†BÅ>WÔÀÐóŽí~ꌾ ØD<¯ðø’-A¹¶£üÌÔ™>´F ?O%Ž&áü]§"&S7^’º6ÿ·0Df€Ò!àÇ|‰Æ|Š”ÿËôB?v"•ÕŒ'š‚Sk-S„œŒ_†¶7XMÝÁÊ4Da®¿;eŸ@ž•ƒô-‡¡´@·o³`ŒçAÝ“ø¢ÞÕ M¾p=‚}"“ga¯÷HŽíKßÉ#¹¡¥Þ{3jN6º‡N=‡ê»{«RË«¦¾¥ꆀÓYaÜâöa»÷ÔV–8² ¶ØÙ¢zØâ’]&à™ÀØd Og|ÎGMèœ t|¬ J<Ò›0r»æ^6á:;¤ô’Pg<°ÜË2úùQ댓E3õ¨½‘ñëhžW|eHÂJ�%C Á¤sÆ…ÛàžÀ8‰R35õøCUpjíeŠðO˜}ƃI×´ð;ÏÁ=>ÁÞ+d֢ƶ"Äc¦ï:}&ƒ<<D¹<ûû’Ì·�Ú‰ê–>¸ü†ºw½­dzI íôˆ’uTæÀ�”o ß¡lµvíñ¼BËY5;ƒ×ѬùŽ^û?‰ Ö›Åá륽Yf7ÐæŒdD<„2o¶¾†oª8éû%qƉã¾CÈÒ]P‰”!'‹oº?ÅÐåŒ/òóT¿Akå‘ ;}Š=È’§"£â!ñŠ¢­1V"�(R~$¡3ÎHT§„eŠøOtÓŽàî·q8ugtí`‹á0~Áo�ÃXvƉiŒvœ•¸×p4L¬ÜuyZ؃&ö ìÚÑ©/W,¯BSegð¦»Îh–³õO?dúpã¥^óÔŠVgæàêíÅ«Ð,bþtwGë<ÎÂùð6žN„ìZË:¡[>´¶Óãß6âhY€#3cf¿æ÷b>7±æù¸°¯$£<ÜÝt7 $z xí¹t«ëƒNãu·8(¶—@CþüÀ‚±¸ÞrR øÖŸuõîi¸ÏPwø ‰25g\å×n܃ÜäŠQÄ ûÄ’]Pæ±C_Q…kAY uàŠŠÁéͦyÊÆ 挋̜Uƒí²]àÚ^}8ýðŒ §¶G C+3>K³@é@ðƒ9ãŒe@UpŠeŠ€wá]0« °O‘‡å·Ñc^89eDÏœí6n!‘¡',ÛPÞöÎÿ]‰‚œÖ×a÷¶³0Í;²î^hK¾„ü“bñOÆ·qXQ¢°| %¹¾^Ìü+Ü?’‰­Gš§3Ï#¬¥ðÂPb÷n&}'O\«0ÎGîÎK°ÌðàM8²5GðïŠqB·hm§7ÓÙ*¿R?Qîÿ Çt¶8Ø8±à†+ïäߢëÒadÀHÐó—²\`Ž–‹8÷Ø|_']u¼NÿÇÄ2‰¶&4·ÜGËÿ–"å;B‡òÿúb”A»È]U¾V>—,–L0g\d¼it‹"ã´³k‘ïÿ}ùÉqŒ3CLD–/�()a?nÁ²RÑ,æŒ3–MÁ©5Ÿ)â†U“ë}_­—Ëñéº4Èå„ϱ³ö¥°;1–ÿZ‡‚Lÿ‰Ô¸æÎ¿)é9?ƒÑTÕ?¡y@01‰3~âT­C+¶u""¬ƒ|o]:Q'8ªëÃ\TÎø”« ]¸— Ð^žÌRÔ™£b…8a!ÏÚr­dœ„n`::g\_‰â‹7žý \,ÎBfÉõ(Oèb„ªvz‚3CÊ3H{oOûS$Äbåθ׶^¿3ä„–Œ»h²KÅ,\¶gâ•Y­„Ñnt¼\Ê~%Ž­'¤:¿sº¿‚uPìÞE¹°^£Ëø±ãNü¼Ãa߆ŠUÚUeù0g\dx— ªû |ÔùA°¨ã!®•ä"_ýÈûù™î4ÊØ)¹¸,S�0©`Î8cYМb™"‹NÆKoÁlûcR(ÿ®vœÍ¨:r ¦Ñ@§CŠ´ê ýsýš1Jý£+¶s–ä£z¸ßÀþ.øêx—5y騧1X4‹ÑgÏð2&_‘‡{hà(½¸Œ¼M‡ ³Å³u¦°ÒÐNÏë„WãÞo—}N¹ÿËô²rgœ·i±{÷âƒ.2¤kÓ)A™ÕJpÜAiÉ%4!G8ÅçÒ¥©GÈH‘eœC—+š]"RÍødpH¼ôfâaθÈx#÷¤¯rЄ[<d;kÑÏl±•ãy¬ÆOX†� t8ð°¾!—“jdRµ6cPMÁ)–)â;ÕIe5ã1#<ûø¤U¯pí—d_ ¢å•ø¹ó)ô£!¿sì ÞÙŠ³ÊQ'ª³!†"s8<p¶©p ôz$k×Hs;=’ž®DÎÖcþtuÚáá~ S·}ù™,ž·hçN@Õ>pº*Œ>ÔR éIQfµ":ã¿àJÉï~#ÛRŒ›V)ÜZÁ¿]Ío]M]hמF¥Áå°ã¶²¿-ü<mÐVžáu<ƒh±2³V…6ѳژ3.:ïÐvî2Ú†6‹pƒµº‰yƒÜÿ‘˜j$#¬¥àT2fŠ,t`jê1·´ê•@Ô¬c“B‰f³àlxOë„ç=Ü í ÔÔÅ Lv]¦&h”¤Ž[ºæÿHЯ9òéÚr뽃û¸Kß­†övz˜éCãõßcì-1‹Zs…À`ppbÉ9ë{aæ”5ãR”Y­„pY0ü$lÍß#C&Cªâ'´;¤rj#ÔŒó¡öËcQîkájÆ…¿b _’¨ŸÏ¾O‘À÷H¨3ÞÙðò z!Ô@k´`x‰ÔòóTâêCÏà$–zµðo,èiÏÀX&;ãú’R\Ô6|ˆ^jU(ÎÈAIÝs¦Ɇµœb™"k—¸¥U¯LÜ1Ô,V8—DMÝшªªkÞ3dÜ<ƒüœÑ&øqôhö#•tÉØo¿ÉÁÖܯWtMä“fÁ×s¨ºð^ô*2ïGÎ2ê½?ôqOEFáq|“•\ÅW(ÒtK¦@w;½$Áqj%üÁ”wt¢æè5Xg–xˆ$%¿ì4tÏOWÉøÖa©Q ʬÄÀóºj¾Öíd”Ð/YV!Üɸ ]¿^AQÚPš£©×w2þ;~ÕDÚf%ÌI³ˆV©3¾À A0ÒdrdíÝ‹Üô4¤hÑaqý<M„U8 gJö`çüâf¬ jI ÙG‚ !a~¿¨Q`Ó¾ØXiC XpбF‘&­z%¼‡M[Žê¶ÀôåŒYï <³Z›È½SCø'ÔŠ˜„¥æ8¸®èBTÞ:\ÙFd+;1êL“…:›W ê˜v@Äû¹„"ó>e”u§äþîƒL– e×°pIð£:Ǹð;W‹硺^’1‹#p|$£CXçÿ¥ÿ+$轱ˬb„wõBWºCX™8¬}áÊHY-~ä6–  ,!(/üGîö%‘/´Êq_úÉFdU?Ä€Ëÿ+’ }ŽF: üyª6ð §!ã¨Ì1[9Ô:„9¸Ï?¨oÖÖ âÿV·tÑ{Ƈ§ŒÄã¶ 6«_5œ*¤ ¶Êdr‹K5bÆÑŒšÐÓF»ÍUYQ‹³f%6¯+€Öî3‡}Îø \¦ó";š‚AN‘ÙzUÛ£Ìíã>ïŒ;…ÿ‰Ÿyà‡îvzI‚£ œ_Àx©Ñm)µ $¢C/¥^„eV+†‡ÇÑ‚êì4¬K-€ªýuðúäG`’BUžœŒ_†¶7xí.¯ÔÖŽÛ*zÞÛ#>‹ei¦1l5/=OWÎxè ažÀv`¡þ<Uˆ¡pÊø8Ô:"©oz&`7?ÁÝZµ/£B©A}óo°Ä»¥#9 :8ÿmg¢”§«ÞmCG½¥…ùÈ/þjà 侀èDrNRö@­£0õÊÌݾ¾äùçŸC.“ ÏxØÓ5Rrj¢<Ùä1eV!s{·/¹ÏÏÆçé›!“°Ï8ýíôBœ¶wÿàd ã+ LyɲIˆ^„eV+b£fÏ®Lý5í8µþÑ«ƒJ"!;ÞãgÙZ <2t î+A˜“žÅë31A :¡ÂÇŒµ»w3û¿à‚U[†l¹EÉv2Nˆ‹ ʇVç#fõM¢Üz%YiÀŒ¤|®Ö¥H1(…jg<$S$}Z«Ï4Ü49Að˜65ã‘Sä=Û{Úø]A§‹Ýx9L„£…œ¶µãç ‚“czY ¹|7Êëºàõ~’Óµ¡~ò{Àµ Ã܇áeÙFäýx¸_`%õ¼ÙçV Îô„{Ÿðo>}ÒN/QDÓ"nõ¿ s$Eh6z¢AG™ïhFe~˜ Û€±7+ù Ù­L«!R #p0aãyèpÆÉ aôîªþ…sÍý˜ñ:ãßáˆêW8"¼‚ž"â&ˆ²Æ¡ÕùˆI}S˜÷7"§à_¸Ùb‚ÕØ‹XphÆþÝÚ…æk? ÷)´H¦žÉH:¨uÆY¦Cz<&Š´} Ÿÿüp'.ï@JÁIF¡øÎÑǪc@üû)Øxã㘔d±º`:[mPGq¶¢þihÈDõ¶÷À¡ÿ%W~ùà†Ž›g H-Z}Îx¤×‹H¢2«i´w¥pÆWªÕ`‡¾ŠÃ ï¼¼†ªÜt(¸ºó´áJ2™vÌ<”8ãˇVg<~‚(k÷ ‚Ôø!ÜûסyïÆG+UßœÅD׿Qös4©»$xe‚æ´>¢À!cÁ2EüßÏXÕ„ëã½0v TÛ•À,´)XÔ9XŸ]Žk ~ƒs~èŸb€Æ~vTßÏPx¸­7Q¶~{deÐJÑæLØ[éém¿„3Nœ›Œ Âu}‚-E7a]mý%ê«¿4<Ò›‚ƒHü<ÉžÿÿÕJG™ÿm—.@]Û�£$}ÆWªÕÈ ‡Tùuº_<&Û¾ƒœÖ“qr°ZWé;ž™€½÷•ïy{F1`~óÀ¨¨öÎxØÈc0¡µA?OñDa„…”t?ĵò±E&aÿÉ¥X‘ú¦¯,Â<‰zS𯛮ÿËsB¡Á)Ϭ­¿@u}—D°L†ˆx߯[Š¡qvoqû°½äߟõx` 9ÉŠäé�vÏÏõ@f=5ë[$辟¡§ [ŠBCÀµêt×Á)rQ¢¹%ü¹Eüw"U½íç©óÂþß\ñdë6C¡z1£4©IHP„–šñÀO¢¯îHbÕ0× Í^ßëÍ0Ø‹õ)\üúµ/¯°ø'y¨ºVƒ3Å_zÛÈeþë*.t}26#_Ä–Št8ãYàžüäkT7AÆxxÆúЮSá°÷M†”¬#P^=N"A iƳŽáµ»3/ >qñ>÷g$ü´VÃLXé» PìA–<`¤Å+Sä7T?Y¦ÈêÆó -gÕxì ¶ÞfÍ—pÜðÚÿ)Qópä7p/¢Ý(®ô}ºŸq;^iÃË©ŸOøýî™{:ÊC á{-8{î œA¿žà¤«Nà vMþ<T÷¶5¤žWöÊ /é8­•1úê/;ôU!™.uàŠŠÁéÍñK¯ŽBÚwð'•½N«¡õ–hËf1Ú~™[òp¼ê ¸3åø&[î å×Z@Ÿäõ,œ†oðIq3F„ß} ö+¬Shñ‡¡»¹&˜†¼+Z¸S¨©¥"%Îx¤EVŠ+‹ éÃä§Ö÷¾0¢ÔÇ£àÚdnà&ö¤È„—Ñäž¼„ÆùS@~ cãõ•áPZ<÷ƒFnrùHUè˜3ÎXÄœUƒí²]àÚ^}8 ÷Œ §¶G"bJJÌ™"ѧþ¸ðÿ*ƒ‘eЬ~x7†-­ÐªÏS^…¡£cTœN£¿voø”o)jÆ#°ìzo~žÙû7Ý Ã£x¼]–_ïM”ƒW¹DyK@GoûY¸¬:”fl€,ý8´Q;F ÀÕË«ÐÌ¥¼éî ¬,}õ— ƒÃ!÷•ÇŒå ¾V>Ç”ÿ+’㸃ҒK!!ÁãWˆ}’8ã³³´xÿ }‡]xj¼h‡Aÿfçr²ÑÈÏ=A-WŠB…ùŧpíq¥~‘¤ûƒ¯E$ÉH÷:ã&à×-tý"iö*œ©¥"Îø YÐÏ3Ö8Âr±›ñàZ óC¥k‡•(Ê®Bg¼áJ 2d‚q'Û†¢›½F‰f֢ƶ…ú®¶Šä'Ç1ž4©Œ,8؇”.c ÙÝ ÊúX ÿ¶ e• x¨î/1,öõ‰QïÍ¿E×¥ÃÈ Áì ¿Cì/qê½ã*G5Ópÿ…ì”õ¾÷ÚCJtøwC¢©fÜq‡e8CʦÆ)”äø²HùW¸$[4Áé²Eè«¿|ì¸ScÀ_ÿ¦Ã†? ØÏôꨲ‡¥*˜Ä±;*îÃæžÅL¿©›U\‚¢|º\Ñä†CÊÔ)Ï£¦±WpÀÉgšt‹ÜµA<ˆ•YÞ&x¢>g|cU;\Ök8pà,j ½ò=Û«Ð6!Nn θã4kÀd'ãO4WdF\dA?Ï`ÌãE»ªÒ(<ö Êõ«%M}nÛ}T–Ô¨Ú_Kôòa$;¼ËÕÎ}P>êüà t<ĵ’\ä«y??ÓFY"NÉW N1|ðo (ÚT�e³v—oäÝoÑ£=‰£TÌç÷‹Â¿õÞÞÀÝú(¿Fê­ÿž»hð•Ú‰ƒõÞI('žw0û;ö¤æ_B{ÿPˆí<„^íåø•EDƒàLæË³°7¤—BQ€£º>ÌE匋ÐWÙDª߀ ®SpÓâ„ãTÚîç<^5Wa¿$Î8Y»'P;0M6`K?ÃúüzØ<ïaמXBÀ-€¹—¨Ý¹2ùØ•ž"]/út‡„9¼Ùên:ßÛžèNœƒÑ9cÉVlS¿À,?«¾yò H!åÇùâ�PâŒ/‘ý<ƒ±â¼ÞK€šºë;1±”] lLúëæe¤8MÃÙõoo{(YF% ýIâD1ÿZ‡‚õaöÓ!ÛY‹þÄ<F N1|xLç±»ö¯Eû_`ÖG★óQ:'CÕ²÷û(¡ÞÛÛýe÷â,ò»xD=±£Þ;ùòÄgŽæSÈ_äÔ¢r®L(jž?Š(}õ—‹·•µø-èßlƒ¶ò ¯ã(F· éjÆIùÍ T­èk9Ìyý+wôG{ômólöÔÛ>‡~ÆŠÚC?ÂDð=½Ðì¿ Kü*L–ïê®úŠ*”ÕÍZQÿÓSˆU A‰3n‘Y08y‘ý<cCÄ%nBÉ]F£•ÔM ŸMñÀü6ÆY¤HjȈV…’Dâtß"C¶釵©³e0ïÐvî2Ú†ÂGÐư+냧âÁÛ~Á¡êVŒ,x^‚“7Ö‹»å»°'á­C}u†1í÷Ët¡iûgq½w�¡]háy‹vîTíÁ{CŸjQÅOgá|xm#Ó!Aµ@>Ö¦Jx։ȣªÏx4P‡wirÆ#8“üp:£ÌÀàÿ ušzèô°Ïð‚£Ô§†;ÛyájÆ…k¨Å—E¼¥âñ{àrZ`(Í’¬{ïꆆˆ’Œ€Ê'pNÿ ã¥sป0F³¯yà4žÇ)¯ˆ5I{?2£žÑö(ºªÐï‚©ñªàgHÓ¡†gÜ31×ÿ¨&h”¤–Dºæÿ,YïôóŒ5·ìȳr¾å0tƒèöuÑ<¨{â–HäÇ}‡)tD}3OHoÐ0dò¼‚±zR¶+ñàý KËe,ÆÕ‡žÁÉ£w™b9¢Á‚S 1qÁZ[ˆ´ù”×Ütoý°,ó<ºÛæ$Á×s¨ºÑ°Ï=ƒýÈ)¹þñý~¹¬  M(¾wg¸Ÿ»þt‰@EÐXªëL‚ò"ÞçwÈ!í+Ûô~›Yî ºþ Ú2ˆH3wAn&tÖ×\L–Wp}ì‚'Œ(Ýñ=šm“àg^B[ GJÖ!œ,: ¡€[¸“ñßñ«æ Ò6+a–rËñ¼Ãà+×ÇçéšÛL°KxZïqax¥ü¹AÜ=NßBØŸÊ[!U‘X|F¤"£ð8¾ÉÊ@®â+­ºÖf¤¹º¿&%c?¾ý&[s¿B^Ñ5ôD0¶‚~ž±¦ñÖ½åÔb€ç1Ów‡Î>y%y¬W±ŸÔyø¿/>DVßÜu‘pí£Ïý‹3òkž¢?ðÔÂ;º¡UÝc‚UŒÅˆ!–#,8Å~öŽ[P–A‘_Œ uzFC`©ÁAüº¦f^ fŸ2J¡£e°‚.4‹à‡`(; ݳ@gƒŒ?D6ì— TªDëÑ´D›ª¸ äÍCUŸqIù.ïS¯4ˆpŸŽdù¿•>8lÿìÁ"DȬù'ä{KTf1b<‰´õ…^~iKT"“e™8r·Ï×®S*„{V˜ðÒ‘àmÐìòkC̯#ôÍÏ`£> NÊcöA&Ë…²kXxDЭ:Ç8,5ÕÂ\E­Í¼uK²ÈVvbTØP}µ6ÁÑàX„Ô³ÀŸg¬qxŒß_🬠Ã(ƉiŒvœEvÜ73;îhš1ä8¡¯ù»èÕ7g©¹r˜Z°€±7KTñÆ*Bx‰Ç,–#,8ÅX+ç«Ðý,¨e·ÞCUÆö脎–ƒ­žœ­ø/ý_!Λ)Øb*Hª»ú¿ÿOð~"UMþ<´õwwC½²-ùøáŠÆŽ.˜L]è0êpå‡|l‘mÅ‘æ×!{n‚q܃²ö9ì낌WÍ?`¯Æä_'÷Áz1{k®ÿ:öW?Âß}Q¹ÑŸñ1 ›¾BBñF;n«tè ºî7ö‹GJÊjrÆñMU¸f .÷øh »X·Ð¡fÞw ÿ-m_§Â÷ª‚®+XèßæsÆá2èL1gœ1Ïœí6†m™² åmïüß/"¥å¦!Gý‡ˆÃ8:´˜óÁXŒb9¢Á‚SŒµB¤TlRrjį/^AšEÄ-›*ê` ¼VaôÝCÅÖÌ( ÚH÷WRÔä/AâúŒ“zÛ2|²å;áN䈰¥‡wœó dÑBØ>ã‚íoÕã§6§ð'ž‘VTežüNXÈ %­ðªÑ꜀ͨÇ]@]ˆ“'£xa¶/ ¸ðo,èNUåŒG²‹—.£¡Sf2·×À2C.”8ãÙø<}3d"î;T8ã˜zeæn_ ¥€ÇÄANdãçUû¼_ &èçk¯ztf 4é/:Ým4wþ€t-;ns<é L¡û,ƒ#+{^PcV´é4>Ñ¥ºÇÝ~-³žY‰^@Œ¤ÆùúÎѹ‘(Á!œb¬gñöP?ù=`ï†ù/¼›ߨŽäH/§ÕSÜR°ÅT‡¾Åo¼çoàbq2¥¨É„ŸZ–¦‘tSº/±{I±B—ð=G{Z²\ññ¶¾JAêáûÑ5ñÀ5üîãõå¢a‡þp!Nž ,ùâp¦dvª_`†¨Ûß?­[Oà¾Cä¤ujœqî¡!¼[tË=îþO”-…ûXRŠ‹Ú€2­ Å9(©{¹Œ†ˆHôu\à~itBX_ÙçV¢Þ"^0Žg\øu<Žvü|Ax)˜ÞÁcVB.ßòú©àŸg¬iœÍ¨:r-DÕ1QÎÇ4†-ñ_Êó¨i$µ[dn›Ðô Îe½@„Åßzy©²�ÃÅ7dßBçUg0·Ӯh`Á)ÆZA˜Ÿãã˜\4 ]0-÷Ö·ŠÊ ºÐ,"n)Ø–¿1µSÎ)˜…ëÅeäm:M"ñªhI9•S|$“€>ÊÅ/‹ÒçwX©«¶C—ŸŽ¬½a²±Žê00·œq; î^{ðÚ5µ¡¶økpÍ]°Ø'>r“²ïKºzQ£À¦} °%"®3Â~ïžíùP⌠Ek 5Z–äXôóŒµ M·7»2ùØ•ž"]/út‡„ùFd«»£˜ŒŽžKÈ–}‚-ŠïqE×âW!m‡Qw?(>ƒ,­ÍÑôwd¬=T”kD‘„q“CQ}܇Þc|̯ð,8ň„`½~ÍÃDçEû¶õ&ŠÂ–L‘yZ­˜ípVÐ…&¤IÁö*\ÿ-v{ œm*(½!™c¼M#é˜ÅHó÷8aöÇ:ªŽùz:3bdÏ:â,ì‡&gü£Ò]Ý"ªúø7h;{¥uâ)’Çqƒ¬t8ãµ ëdrdíÝ‹Üô4¤hÑïÍÑ_LÐÏ3Ö64©Î¾€z›Â÷"œ±¢öоÚ-O/4û/ÃÕ®> cÉVl)o šî-)ÁލÆ3!Dv*…2îb)‚ñêè@]L™",8Å àw?Ä5¯h•Ø­¸VI!Ζ⟂aºëà¹~%áXÆD2íÅ8±cIKìífá|Ô„ÎÉ`ƒÄn+Ñ4’”©çP•5ÀÁ6°ÿ…¬Xi;m¤&Õ?I É¿} µ/lÁzŽ>4—ÆüJø³ ÖfN5;–°·çàv<G£F%<ÿsP×5Ã4ߊjâd¥Â÷õºÜˆ¬ê‡˜W)üˆJbàÏ3Ö8T©zà4žÇ)ï‰<[92£žÑvpÙ碬š5C)ÿzé– ïÿ€2ïR”Î=cMáhFÎüâ´¿€¡|ÂNb!J¦ N1æááëC»N…ÃYi‚ 8¢YG ¼zÜíD;ã$ÐÔ‚³çž„Ô½ Nºê4 Nq7kQNlã–U&F{ %Nè¤p[¦‘¸Ïv؆W 2ÏžàÒ-°VÍü–³GQP\Ž3ÜͲ½CUªÿrpà‘Þ„ÐÒ“¸¨€»ÑÙí?LâßÃ=¨ÀÅ\½½xµèŸwÃZ mÞy6ƒ‘¶SÈŒh_ÌÂÕsù$³-e; ¿=ˆ¬­_B‘wš¸‹ .—øY©pÆC#ó,Õ?0ðçŒP¦v:7ˆ»·Ah(x‡ iå­ˆjûö˜ÀÉ?¦4m‡®PsÏX[D2°eÙÑ·< 12EXpŠágnà&ö¤l rO^Bãü‰?…±qqú½Æ ïñÄ%­U”Ûˆ½ÊOˆœU&F{ ÁØ«\J7âü.OÓH\Hbq x¼æ™Еê¿(QwÜEµv0ü}š²@§ ÔOÒRð6žN„̶€ŒßêŽt2Î@»;²lºF…ýŠØ¸…:8HkÃc·`£wõ/}• gÜk¤íÞ%l6ãþ/¸`Õ–![.G;g$¼ º‚]þhÙGßü ¶¨#Àÿ ùh5ŒKl¬Sí¨Ú[‡ª71FB =]5O„V„Ñ~••MxîdYRDÈaÁ)Ƹìf<¸V…ÂüãPéÚavƒ§ÈbœØŠÑ«<*Äh$F¯ò²LM#q ïŒ'Ô¥úGú*7l9®\þžøª€;tÈO?ˆ Z#ÌaÄÒxwô‡3%*Õ!óï#)LO_FN‘€úæäÍæq×ïÑÛ cc–4hµ¸ÕaÇ 9åh‡Aÿf§xº t8ãÂãñŒ¾À]Õ¿p®¹_øe‰3þލ~(üó -¼FW!}/——ÖD —Ë(«ï û’âÝÃX‹šÞ8§à3’‚°ö4j‹"7%CŒLœb„Ã3ŠþvT¥Pxì”ë¦oD8± [ÒbAsU–%-±¶œ‚;W¡ûk(èzíÖ{¨ÊØ.³ºM#qI~g<ñ©þ+Å…Ááëã1c¹‚}\§ðãÉvÛ˜‚™ïÝIRý+.Ö£Åô†ýÝD&ÛNák©œñ˜[ ’õž‹íÞvpÞ�ûgH—oH‚>ãä¡;*îÃæžÅL¿©›U\‚¢|•hA@JœñåÜq¬4­iïŒ(Ápyü3~lùÛ·yy^¶G8{¸Åå§ÁÕ™0Jõ&ÆHáNÆ»Z )ÚŠÍJs|SEÉaÁ)ÆRÌÁm»GšºÏ¬­¿@ÍqÂ:4 £Td§VD"•´,§Wy܈tB'8'Q÷*_>+Ñ4—UàŒ wIšTáï•´“‚wj ø+ øã+«FFÊDzµDd>MÝíÄKÓ#h/V¢0#Õ7ÿIÉÎqÿ®Ú}’8ã"µô¼FÇÏJpÚçõÒ³­È-¿ ÕšRbsÂWjÇ¿…±ô3¬Ï¯‡Íóví ÑÖ%θ³õOƒOC =Y úycÂ&=9é­'äÝ›jçJӚ¥٠¿ƒ‡öŠA lYú ܈·Ä™™"œbÈéêM(¹Ëhô¶³>›âù-¯»7‹B2Ad_ ¢åyØ^åÝxIRÿýßB‚S®W¹¹Ï:( +Ñ4—UàŒ‡µñcPí['…H‡+iÈQÿ?Áаn¤dçž~w<r©;Juh¸xѶäG`y láFtØÝÂç <m‚~Y]UÅ4úkO ÚhE_ËidÎgsÒ€£•0ˆÔÅ…g<Rt6hŸ,’¯1ñª8ŽwÛqïðgئ~§Á•¦5±šW†H8îA¥íˆä“ñ®„¼ôÄÊ!°àÔZÇwJù äY9HßrºA tû6 oÔ=‰vV<xk8ŒM %šÍvÿz›ƒ{¸Ú#âmbÂ;ÿê4õÐé;aŸáÁ»úãþ=Á <p>­‡¦A½„µ›‹X¦‘¸¬g<¢¿œ4uaÿ{';ns<é þÃüÒs++±ñÕáKtb2ÃXº̓Â}›B¿ö�RS²Q|ò òã™î¿B>´eÜ€ŒÊ'pNÿ ã%aމص€gÜ€ŠrW6¾áJ 2Öï@É•_Ný£É¼p²ôó F ¼colè1TãË}ùøjG%îöØ0<Ÿb&)+MkbÎ8C$øYxfi±ÄÌa¬uf-jlË©Å�Ïc¦ï:%íì#Ýzûãp%;æKg bFÔtFQ™0¢tÇ÷h¶M‚Ÿy m\ppádÑøw^ø(ñ©Ý\Œ0¿–©i$.«Á¿ƒ’b´ ï€h/FFfiÔªý‰é¤ðãc.ü7õý±yLwpØ/QÍxÌAF"à–ïÓtáGZPš¶ ùÚ>xøAhó/$Ç{ÞãÂð°+ÊàÃò¡Ã÷ö‰ž†ËªCiÆFáe°‡¹‡KntÌgDbΪÁv¹[ÿ)äŸnÀ§òO±^ø,ÛY‹~ɳÕWšÖÄœÆj„eŠ0D„wÀøý¿úö0Œe§aœ˜ÆhÇY T™I/írT·ž*Ï`Ìzå™EQöÒ^^»iñoÌ÷ sÀ'”õ1fÍ?!¿ö/aEÎbÄxië …ëtK‚®î”àÁp÷0Õ1c|j7ÃCžc+´êsà”WaèèÃXÜ2„{7ðtû…²øi7¦ãõO‹E˜¹Ê»Ì¨ÉKÇ>Ý àÚEC":)$AlÒÚìÔQäÊ7I”¦.B‘dªîç`üûO´Tgû;(ÌÀmÓãèÑF¼M¶ù,t8ãÎGàŠ .Û€ŒR¬®YxÁ•÷ ¼0CÐÏ3,:ÿ æA¼‹GÜJÓš˜óÁX°L†xÌÙnãà–O‚œócÊÛÞù¿+¸-¨Íß yÖ(Du›ˆ,m@&׉ ±_>¤G8wï2:káK® &Ë«–¦Ìõ_ÇþêGø»ï!ª37úKG¤'óÀ¡? î^{еšLm¨-þ\s,aZ6ŸÚÍŸ`½YŒ-^%ëù!تKI9%W-ª_÷Á ~Ùm¨4:<îvP—F ïlÅÙå¨[‰S¯N ´ôÇv>Aíã·þᘃûuîþ>âÿ,&b‚²/PÙêÀ´í1.qÓzñC‡3NêId;Pªë ¨œÅDÇy‰é úy#”ÙPoÛš€šq’Ö´’&æ|0V#¼f™" ‘à_ëPYMPÙÃm4wþ£*³xðn:ê•(-ÌG~ñwP^`T §í£Z;2¤dÿ FÇõÔm»dÕhuNÀfÔ€ã. .Dt16ˆ¡WñÂHCvuË’n<j7CáßP´©�Êf3ìþR7Þý=Ú“qRS„ÜÇCH/:­ñÃõ|€tÐãpZtŠ6O±Ü¸“-ý±…µ^{,Ž06’2nE»æ(HV3.F‘‡Çõ.Nå¢ñ@ø}ÜÓ FOBñÁW.ßwÜA…¦wñ/5Ý Ã#v2ÎX Â5>áÇWMÒÆ©Q×ü8>úï3çƒ!%‹#AÝX¦C4œÍ¨:r-ÄñèƒY8ÞÆÓ‰§pî%ô×Íâ+/“†µÏaÊ:qàUóØ«1yÿl·Þwê!œKÞ\ÃR < NäíK¨}a ºV‡£ÍåG 1¿þL2fT8ÕìðÙ…‘¸v3é<v{Sùƒ‰Ÿšz Ä/ÂÆ”~1­TdVâ¢öL {êÚÊOÐ匋"à–ˆN ”ôǸ2ùN|Su =ê.~‡o²åþ¹ ­šzÜ‚ŒIƒ ¦³åÞ²1H¨3^8¿‘…•í_òóŒ5Ìû^4Þḭ̂(ñ¼Âã_Ú?b”ˆÎÖjd”¶”tä*Ø›%ÇúŒÐ²Ô &1ÐÙã´'Gê”çQÓH²EÈgš’¢ ƒJÖ]€dŠŒc”§b ŠQ/Kœþzk$E^q®>X^-~§ÌZõø©Í)üIxoŒ´¢*ó,ëh®Þ^¼Z´ìݰÖ_C›7¸2ƒ‘¶SÈLxí0¼íªnÅÈ»W¸¯c½¸[¾ {´qžsdŽ‘4õi¸‡ÿ‚©¥+ö#ƒ› óL&ÏÃqN…*ÅQÊœqÜÕI†þØäÀRÝŽþž§0h8ÏÝâuÀ}Ïûgž¾@—’8ã³p>jBçdÈâ•*ÈH<ÜÖ›( [E2ŠÊ Œ:œñ@~ž±–™ÆëÆsø®ácÑ9ÿ‹³¢5RnØóÌõB³= ÙܯÇ ÆzêpàH”B^Çi£°Ñ~]é(Òõ¢Ow©ë6"[Ý}�‚Á $´»ÀJƒSÌg„A£^:GI_‰â‹7ü×FÆ \,ÎBfÉu˜ý\¢ÖŸÁ›î^_ÐÙûIAêáûqBŒÎ8ÿº»}AŸ³µ‡?v2w\°Ö"Mž…½Âþ¥ÈMG 1Â3Ï£+4 "„póLÀä¨Ò匋 à–N ´ôÇöŒÀñ.p­ÏÂÕªS×Ñ5ßÖoÑ÷ˆEœƒŒÔA„#³°¥ø'oǯ{ûupŠ\”hn ne,¶ûÀœqFòÂâ-AVæ~T\¬EƒÁøA̦ÃCC­/j¼e/¸Ö¡ϵeá­Uÿz±ÀJ` ‡©zÿ…O½’ô8=ô#L$Ó#8úû/òÚ÷>†¨$´»ÀŠƒS,S„QT™¥"œb¸`4¿¸Œ¼M‡ ³‰l(;nã°¢ gˆÒÂ8…’ܨ-“Âåü…ŸÈºÏ» G— T”AqòtÀµ ãÌqäî¼ éqnSyíº¼{¯(sÆøIØ;nAYZE~1*ÔMè!‚^TBÔ¯ËérÆÃ°l·„tR ¤?¶gc“‹ ?ÞÕ =wZó;x\V˜^JqEdížFù5âtÎ;¢ ¸É£ˆÓ/d$u'N@%Øß3®W赓Òdr@6³©c´®¡@ˆ½Ñ‚³çž„5']u§89sÆI©Ï6BS’ãV“y±0R¶ ›….¾=!ù1aæc·ò>ºjdÛÑr­ÛóÕø•|~րʲ¦%œÆó8åM»$½UO£Ìè„g´=¾¢!ŒÕA"» ˆœb™"Œ%ˆI•Yr„½¼M…¥7Ð#vZ«C‡üùÓÚ Q€£º>Ìñ¯pÿH&¶iZÂW.9];è€ ½Þ“Ð L ¾VŽlÍÄ‘ûK8ã$e¸N®æž·ëŽ`%ÃÔÔóüé H&>&ãè¨ú–Bg<@KgíáÒI–þØŽ;¨ £[à…JÕŸBIñ>K’¦Îcjpÿ„þãDQþë‹K¬Òý`/>Éý×jN£x×§X'ËÁ¿nüˆ¢ªNž]ê~zZÄEħÒ62½DöEìûsÆ«×[ Xþ㈲a,n"Uð6è Òü/‰%†l/jû#sƒ¸{p›_”#pÈVÞŠ ÿ·1Q“¨îb§X¦Ã?fÁr2£ï„œ¦ºúñÔpGb'JíFÇËØBQñ«ÃÅè³gxÓZõ÷2™Y»2°¥H‡Á¾ì {Yö%ôÄZ´ ªu !­Íô8u<reiê"´‡KH'¦¡?6™ƒ²Ï øá2tÍ ¤OcHwû$qÆ=pܹ Ý_CAâ‹ö?ï¢|kæ}Æ_ÃP˜Žâ愇÷js>…¢á7îwÿ ¿Ãú\YCüZÄ­HüX'2bÛ˜3Î`ˆÊ&Ú.AÕ6´q-K¨×zú]þZ”/}ó3Øâ)ÂXE$¨»€Á)á-Á2E^&Œ(Ýñ=šm“àg^B[ GJÖ!œ,:�®kÔÿMk„nðo,èvF^ ñ«Ã$àH@½{X¦`Qç"Ç{B8…¾Úrœ5{¿nÕ| µE"))ªt fá|p —jãÆÿ7^?ºßÿOb‹6¥=\B:)PÒÛ¡GQî!Wdø3@S‘®8e Š¾M…¬SVß÷‹JdgT–q]®HóÌ"Ëç¬ú¢öÞ]µö…û6‚¶ªK”¿Ã…ß_Ï¡êFC€=NÒô÷#§äR@¹M1ìÌg0De½=v¼Ÿ]bIˆÖ„‡Ô¨t IÔ>¯ŒU µÝDN±L†ŸYóOÈ÷:c³1žDÚúBok™Ä´™J0akƃǙ’=Ø9ß–)q«Ã%m˜šñ PïÞÙ‚ïO=öµ”š0¢¬Ìˆ \Ñ't1B•NqŒ#—k†Å¦½ïưµ š¢RªNÆEi—° ’u™àþØ. ںDŽ?ÌÁ=:óc-ªò¶A¾Ù—¶/“g᫬täKu2~»šßºü™mdt¡]{•ÛÏŽϾFyÛ™�‚3¾ UX5ÇpàÂ5Á‰½‰+?`{íïð%Òô÷)—F,„:ãÝþ(ÂÇTAÃ@~žÁ ;ô‡ qòL8cÃ?DkÂãÀÃúNL„üï¹—M¸nf®#”v#8Å2E~æú¯cõ#üÝ÷Õ™ý½~'aÓWD¶ZˆX32Žê0Á^Œ_.q"#ÕŒ½»ÿ§‚™†íî±TgÿHûmñs‹§S@îãü)å'gBÕ•[0ܽދ‘-Ÿ–t¥©‹ÒŽêN ñÆ“R“Û‡µ÷ëÎãpÖV‰úŒGpFIêù—Ç`xiž ÏØ¦Ç‰j#œ#-(ù$Ç›½â«ú rY*>Oÿ\¢�‚˜kîN ƒ!}÷P±dšþòH¨3¾ÀGUA ‘ý<ƒA vèòÓ‘µ7œ¡8|¢5á!é=)þ—jàùOÿ·1ÐØ]@”àÔk4UUàZH¦ N­A„9Þ£ÙTa?”eT£Õ9›Q#Ì£ ¨£*“h f­ ?mÒœ’šqë;8LMÐ(ÉZж‡ÿâW‡+FÍø ^ë¾AfÉ¿®Uúè´•f ñŒÀÚú Ôd¿R_G³}…WqÆ9¨»¬èyzîr½¸à˜ç§¹‹§=Vt©9újÆcmGu'…x3 óçÐÐVÌcR¢0n'ã&týzEi_@iŽœÉâMó·èQ]ü *ê_,ÚSf­züÔæô¢•À�X°=ž’S#Z‰%ÎøòUAƒ~žÁXÏädükd1Œg ‚SRŠ‹Ú€Á°+ÎÈAIÝs»'#”u`Á)†èxà^¢¬ |s6EÊÔù…À„`fìÇ·ßä`kîWÈ+º¶ åöi8ž> ©Ã•Þ=SãU(WêÔz†ð´éøÕêø7h­ü2rŸÓw {ÕdÉS—%>&‚]óî¼ üwù ô7]Ä©ÚgþVa¾‡$hGw')!å_ÕØY~–a7xáÞöÕÅ"–&:‘œÑ H?rƒèŒ£×âX0ù˜¦`ÄP?ù=(a²üQý :œñ¨‚ý<ƒŠ·ÒçñWö2·ã95*pÜ9¨ëš—é�MbÈ>üý‚áõ¢FMû`[[!`ÆŠ 2º °àcM"½3ÎÛ´Ø-Ûˆle§·4Åw2fÃŒEƒcѦþÆÒsX“¿Y°ÝG¶ð8¾ÉÊ@®â+iº¥SÃ9«Ûe»Àµ½ú8ðŒ §¶G¨)˜…ËzÜ©_`†ËbÆËÄ݇GÔöpsp™oûѻԯ4~–záÓˆ»à£ðxÚýƒnà#x,Ézò;Ç©G`pHÑ·›8£—¡í VSw ‡Ñ,ˆHø ¹š3pÜ?­[Oà¾$¿C,{ëø8\ÿc ñ#Ð጖™ÄœqFDõU®ÄÝ[œ8Ô7S¶£ðÛƒÈÚú%y‡—ÑO1LÍ8ÿO2… ÷ÿj¥Úpa0ÂSŒµ†ôÎø¬Y‰Íë zøûœñA¸LçE_ƒ÷°i÷A&Ë…²kX¸6L\9tŽqXjª¡µ½÷}xçó´ Ð>ÅÇøÉqŒÇÅ9ó9“þ)Þõõ•%(Þ{‚®4uQÅ×ü'µ)\T¸‡a,Ý‹ŠæAÁ™B¿ö�RS²Q|ò ðì;…Y'ø÷pO/~Ññn:êkÀ)¯ãñÀÄ2ïcôðOÌõˆr^M šq²®¤$Òጯ (èçŒ�¼‘l²Ñ¯ÿòO7àSù§X/|–í¬E¿ä‘Ôhw§@–­BIÁ"*’…:8ˆòâ±[QöSdi¹ŒÕ‚Á©0³GQZG÷©c­2a«Ýv k™§žC™¹{A}Ücâ ÿüsÈe´õ¿&L¬Üu Ní¼3îþ+¡ºð.T;÷Aù¨óCŠjÇC\+ÉE¾ú‘÷ó3Ýi”Å唜8¢çQ±¤GÀ3]Ñ1Êœq1Å×âèŒÏš¡Ì¯Ã€püH JÓ6!_Û?mþ…øµäî_e5úäAŒ ¹DŸ@"ÎøJÒ€žÁbÑÉø·h0â͘[úÍŒlÞ›S§ôý[óθë÷eôDfi¹ŒU‚(Á)Ö]€áG„ÞÚÒ±ô©%gàh�„ÏÑŽŸ/NŽé<f%äòÝ(#”QÓ‡—‚Ç”Y…Ìí5~¡FbÐfãóôÍ¥ô·Vû³p>¼§¡‚_s/¡¿n†D]Æ}"wëCã‹G\‚ý~GT¶%?\Ñá±`×,®[ƒ«»Ý"µ\QÅ×â茓rÇýŒÿ‰–êlÿ\Û¦ÇÑ£x+æY ’Y û Š.C÷ØŒÁÑ8زñÀcC£æ è–p‹O ‘ g|%i@?Ï`,böÔÛ¶& f|BX¸¹Ø>ßÛ•8òÏ.ß°ŒSm––ËÁpO„ ¡HÁ)–)Âð"FomÉœ„Û?C×÷:¸¶2p˜®à¨Æ’€k‹@\{7OÃÑq¸_`%ïÉlÈs+Qo‰6CÆï„…»Þ¨ú•ðmç.£m(Ìó ˪¡])äCnña(ÒS}¿{J¥Jh[LxIļKgôižÆI”o¥¬\|Mx— ¿„©Û‡¬¨€Ì.Ù¨lu`Úö—È^SgŠŸ °N ²öã˜"Ã/ÌšŠtÅ (ëî¡ÃêôbŽvB÷”ver)[ëÆƒk?@AÚ**{ÀÿèDŒ@âÇ¡Â_IPàÏ3‹üøDü‚ç5:~V‚Ó>ǨGpFä[‘[~ –XNDXZ.#&h(FpŠeŠ0üDì¼2–è­-K8‹CRÇq™$Uïfáþê+Q|ñƇ}@w‹³Yræaé\áØkfÅ"àÔ›wctÐŒÇ ÕÈÛ"ÇfoÿõO ÏÊE–ü ]iê¢á‚¹æl¡2á=£:‡Æˆ=¯W Q÷®wAšCqϾö½BïÁ¤`׎Âü¸ÊÂÏöÙs³$jm!#%ˆ(²i<£èo×Au8ÛPHÉÆaå%œáš(wÆ ±?Îø Ò€ÈgÃY(7¡ä.£ÑJ‡ðÙôÌoã©–’~Ø:åyÔ4ö Î7ùlB žŒä#¡‚†1§X¦ÃÏ :¯Äâ,ª þõÙ‡C…°ã좥ªÇHRõnæá» `®—‘·ét¶¥ËV-”Ê.¸]X;î vÃd¥­RgœÇŒõ*ö«þ@`¥.ÿ¶GˤȒ¢D|ÁŸ‡þÊÁu8à°vâ~Ý”äf _ª>ãÑ—ʦ™ëƒvÏ&á{H?üo»ö9Þ²YLŽM$©..T8ã+I þyÆZf®¿;e$"œƒô-‡¡´@·o3ÖÉò î¡W&"ÞSÌÉ¿À®ô ézѧ;„Ôu‘­î­¦(ƒN*h(,Sdm¶f|oº{áLø<ç,&ÉÕ»Ùg› Jo,£·zìPeΚñcùƒ�Gt¾¦u•º8ü GOd—LÁª)ƒÊ,…­G‰ ¸àŒï+1‚(¤ðŽNürSƒª<Á6 ÈöuSÈ×s¨º™¦kÀMn?rJ.¡aákz4E̦ááqÙa~p ?~#*Ú½éõÌŸ‡g\xTËLbÎ8c¯æ@N-x3}×qèì3a{?‰ Æ-WD¼õî Ÿbꌵ‡~„‰¤ÿxz¡Ù–¤û… %‘‚†¢À2E~ÂÖŒŸBInOUœ…ûG2±õHljD?‡© %¹—jÔ5ÿÇj%&‘ wÿKõ± wKÛï7è²?ß¡­bÊï¾À°ðÜx÷Ÿ¨ÛWŽfZJ!D‡Ç”é'ÓÙ|ﯩg8{L×’ÌJTÀg\±PÞâËþOï_‡òÄqœjñ9äÒ9ãÂýÄ?¡÷—ˆ°îS¢kÙB3ëo‡NU†ÂÂb–’ M]z¨qÆ— ýÎø\æ[à~4ž¬§OÉï€ñû þjƲÓ0NLc´ãlú­’#Ç¢ô¾åÕyà4žÇ)oÊÏ&Œ§QftÂ3Ú¾ Ñ+#€„ Š�Ëa̱f¼�Gu}˜cÎøòàÇÑ£Ù/¬%R2öãÛor°5÷+ä]ù¤™œ®w¯=$e¿ µÅ_ƒkî‚Åþñ²xôûºìO3ýZ‘1Ẉ°e껫{þÏX Ù¯†ù½o ß ö‘T­üœxZsFÛäÂßÏ»ìè&s×JÚ\Å ·w«‹SøÚì®åä>” @ª“ñ;u0 †d*÷ÝCÅÖ̘ÔÄywôÔ«©ÇæŒK†¿Î"íÖ8s¶Û8HT½/¢À± åmïüß/D¨1šÄÝƒÛ [ôûÈVÞêMU¢—Zî2Œö5Z»G5 4Œ–)˜‡êšñ䃷i±[¶ÙÊNŒzxÿéšMðu48¦ÑÁñÛC‹Þi# ÙÕ-pDÌv‰O¿ßh ×›(øi7¦Ý"a·w ^}ÊÚ' E“@2üNø½G¸âuÊÅ›©Áø;y¤~®uHøW<°µÿˆ¼‚x«€ûR½»»_ §z =¡@zJ*q­—!%§f-‰Šús4jT‚M|êºf˜$‡•væàêíÅ«E'lÿÏB¼ sÆ%ƒ9ãñÂ+�˜YÍBí ·ÑÜùwêIE¨1âmÐìB‰æVÀ¾ùl4¿dI*ÕºtÑú.2V M‚†k9Sd f­ ?m‹~ÆÊàÇ,x@öC}'ì3<xW?žî$±Xgb™5+±y]´vß»ÈçŒÂe:/rV™`ݾ„Ú¶àÓ5GšË@c~%üÙk³ §š Üøôû†ÄÙŸÄ®<ï L®uHzzÎϧ«K‚`Ï}}gÎ uÝf(TO}Á¢ùþï¢é‚ìdíþõ“߃³Z,‡éq‰€q)ÛQøíAdmýмÃÐP¯M!üþú2(Nž:`ãÎGîÎKÞvg¼£ G¶fâÈýW+þ]˜3.Ì—çSLógÄ‚³ñôLA}5£hµ bÔùjd›LïB6YÏ,½sÆ©€.AÃ5œ)â?UI‰{©Ì*fˆÒߣ™¤Î¼„¶@Ž”¬C8Yt�\רÿ›Q3õÊÌݾz{‰ƒüóÏ!—‰Ýg<Âé’ðž¶Ö_C›÷Ý=ƒ‘¶SÈŒ¸^âÓï7gúìJÙ–|üpE‡ÇæÁe8D«)ô7êÑ)i?ua/T 6¼`c¶ÿEêz¤*~B»ý)uθtöèpü— \Í=XÉÇSS ÌÎ(ƒBü�´»S ËV¡kTxÏÏ3HÝù±[°QkÔÈš;(ØS{°)NB70Íœqº!ø%LÝv¦ö+^Ç/Ô8bQÀÀò@®v·ðyO› ÿ¨Ø”°Ù/à@é/°†U£æÓ¨ êêFz_�̧º ¥Í{ßõ½,˜3.6³æŸ_û—ðÌg1b<‰´õ…ÐÚÜàíZä'ü>Ç'Q\Hà·?_PAkzY ¹|7Êë_Hc·xF`mýjŽƒRc@GÿèÂ3ó·àpÄ“qÉú‘¶ßo4û"1Ç Y…ß@‘žê³sR2 (½€ºû°QÎYŒ 6ÇSIÔD@ž}¼3¾æqòg²VžB¥ØŒu…}=­8ãÓè¯Ý ™Lެ]ØR¤Ã`_ö¥Êçúz¢QOœ5C¹9yÚAß:wÆ]¿'’°žž=ÃK‰—sÆɉ£UU×|†ù*änÊwóCë…†+%ÈÌ,E]ÄV R1 cé^T4ÂÍO¡_{�©)Ù(>yP0;ÙMýÍÅŸbÝúc!*¨Â `Ì £¦Y)2¬SPüð ÃJSݵ U‚†+Í NÍ…ÉI‚àsÆEg®ÿ:öW?Âß}Q¹i¥¤·ð$lú  hó“G)錢¦Ï8îAç€ï´\4ܽ¸Y’á"û-¯|냜¶=}¹D@<EöXIœýIœñr_À›wctЌǺ (”¯÷ßS’µ¹é‡W]k³Äd| {xÁ×Pþjõ*Õ{ñ ¡•û © ±Å! =‹:9Þ èújËqÖ4îýºUó-Ô–)ß·- œåb»7N€8ãòÏ.ßàßýßD)³p>jBçdÈ Ÿ{ ýu³pÄ9ãŒä$ÀˆøpZÈÚÊwÅÿdœD�óë0 ü£üH JÓ6!_Û?mþ…%"€‚¡a­Cþ¦¯¡y1"¼rCœð””¨5‚q×´F¢±Œ•B• áŠ3EVAp Ó¶šÑmwÅwZÍ,¨¯ƒ,£­Î ،¾XU…šŽáßgâ(IŸÎ(*$¨ÍÝEG`-¨0:káKá]c²¼‚kÉu-Dpë06)”h6ÛýçÜÃÝЩ„ám4Ž# vÄ®È.‰³?œñÈéítŒ9`í¸‡:e råW3ž˜Œ/²‡ÿ!̱?`HÉæ§ðæ±Óâ yþñ/å-øþÔcŸÓ<aDY™':–£ÕàyŽŸ•à´Ï1êìdùVä–ß‚…úÃÿ=²¥üCÄòæŒ3’ž9ëÏØ[ÝŽ‰�›w™Q“—ÿS)Ò†i?ãߢ¥:Û_Ë6·M£GñvI»Fx±8Íh¬©@Qá^|1ï„kŒ°Ž‘x"å5ã * KÐp¥™",8ň„®áwAN¢Ç¤B zú?'†ø¤3ŠÊG˽dHÉþŒŽXÃH}÷±0Âc3°kODiÐ/a/Œ)²‹ù·¹%(1 ž£C›×~@Þ¦Ãya»Ä®ÑIXÆM*à‰pƧa»{ [daÖ[Úwh›ˆæˆÞGz&CnÚÜË&\7Ó«úâC¸çzU7>dÞêt ¸ÉíGNÉu˜‡ÅyÌ¢x'Ž\D«°H]ö¿ü©º3è†É<ˆ1‰_k~íÕ;±%÷(ªˆ8TùAdË?ÁºÔBÔZ¥J_ŠD€j¤ì T¶:0m{ŒK$]±Î„Ñ(§ï‚©ñÊ‹Ž»ÙÊœqÆ2˜#h˜ Vœ)B`Á)FáRç‡lJµ]p$LЊž4ê¨q܃²ö9ìA ç¼jþ{5&ïŸíÖûàN=„3¦Ë'mÉÊQÝXß+ØGÖ;(Ï,в-™`ǬÈ.‰³?‰3Vô!µ×3{Ïo¸_w'ŸC‹Wwcu:ã‰Éø¢Mœ<ÿx;ã3x­û™%ÿpF…¡€N[´Y_¾’­ÅÏN–iê<¦ñOè5ñ¹}Jt¹Äyß0g\ ÈièN9r«þš3‡±‹dVáÆåBo:™p©ùWÑÃji¥ƒ¤¿>®WR…bŠ«®áñÀD6K‚àD¸ÞaØ%ÂnÉOÁÑý�šòo„ßI‰*JNyW7êNœ€ªu3®Wèõ¦â’ÓËA˜MÝð:KŒ¸Ô]  ê.S¦ÈXpŠAð¶âÚR uC€Q(Œ[Ü>l÷‹z<°Œ$hN†2%iÔQãêƒåÕâSïY«?µ9…? {úH+ª2ÏÆnü»-¨ÍßêOãß‹\¯�ÙdrAYm‘C‘]g’Œ¡»¨.ÜBÕ¯°‡ <ñC0]uÎxB2¾¨SÖc"„¡=CxÚôGÔ‡I‹±C_ÅáFгìõü=(©{Žá¸ßÇå ìëw®B÷×PPÐn½‡ªŒí¢ 3g\ œ~â«mäj‘³® èpp7‡ûæ~_´¶E…²úf82VI•êD θO]ó“Üp­æ4Šw}Šu²üëÆ( d€JÝŸý#W´v)SdJƒSÞZæºJ dÇÌ콯|Æ’gæç0|PfÄ€çZΪñ8¤Gý¬ùŽ^û?% ÿ©Uص7?â“F-Þƒ†¤¾ãɸÞmCG½¥…ùÈ/þjà ŒŠx/¢Sdò,‹.{ºí"{<¦,õ8¡È@Š`ƒ®º4õDd|Q¥æ, ‹ºŽLÀ¬:‡Æ¨tV‚f. „jzð˜±\Á¾%ËÕh Ò¾.CJNhÌbûÓFHŸNïFhj@õü&L¶¡ê<SÕeÄ-'¯a(LGqó?Â%ý…ÚœO¡hø †ƒûÁÝÿÞ¨áCpe ”÷\EPÛ]€ b¦È4§üNÀ'y¨ºVƒ3Å_"•œøýë*.lö¿¸7#_Ó€šýU? Ï,7R0Ú(I£Ò>êw_oᘠú‡·ñt"äïY–AUdªìÏE{ãøh¬Šˆ~Ì‚ä}¦ï„t&põã©áŽÄ­ÍhRœW"V§úEüÛF-“òZ–2F-`fÇþ ÚÉ^XŒ8‹Ñ-²¯ÿõ“߃3žÌ}öE€9ãb0ûêÌïÑ6)ÄßX—šGp¡ötÚãE*â­dÌ`H©ÿÉò¥ç—SJ º6èªu°/¼FÐVu‰òMvAkwI¡%8%8†oðIq³p—§1PûÖ)´øÃPŠÝ\ÌCpØ-háN¡>ªÚXFrBOuÌx¦áõô^ ƒ>‚Ý垎ëý$×͈3F”îøͶIð3/¡-#%ëN�×5êÿ&  Iœ” =°^H{±2¨ÌRž- k7f³H5ãiÈQÿ!^0N„ýe| ã£V´jk$ñcθ(¸aÓU£Ú8„c>Ù¦†ev.ëmTåm,…DÒV_« ÆJ™Æ;G"Úbˆé;ù5ÊÛFüÎø6Tu8„—Â1¸p º›¸òC¶W´‚vÌÕUÝÖ>GÃwo‰xRº×7éTÐÚçS yL¶©p^¤ú2Fr¯4êX_žô•(¾x#À ¿‹ÅYÈŒY‘XXsgË¡µ¹ýŸ¥‡&û“.[X:>™g;û$ÒÖzŸ9o×"ͼ×xL™~Â1Í·L=ÃÙcz¼–t3CÀÌŽÛœOºN–…a~éLŠ Þù•„µ–ŠôܽPìÍ‚|ý¨hy%Ú¼cθXðã°èΠ¸èÔ[Bke#ãŒÕÍ0žu ¯‹%61õ‰ÛËO¯õLÁEÒbx7ÆÇ…—ÿËñ‡‡Ç¦Ç‰j#œ#-(ù$jË”àðõB_õä²T|žþ9òuvÿ÷3â UÝ¢!ÙƒS‚¡hQ#³¼ “~g|cU;\Ök8pà,j ½ò=Û«¢lÃXIåŒÄ):jâ¦NNi~®—‘·ét¶hZ§ñ²›( «¨MúΗAkŠ‹qOþ=Z éZ¤d®ÿ:öW?Âß}Q¹ÑŸ&> ›¾G C ´‡âÌŒšýj˜ß“Þýß¡Lòl7fï1>–¨vp±"øoš\Ȳϡmá4\°ÇºQ{ < ¥`l$lǺP½‘!S4J§F]óØn…_ìЗ–ãJˆÚï‡AÒ{ò‘ªÐ-Ó'¢i ¤hÀ÷Jê;ðÿ¯„ R=ª‹¿AEý‹EÆå5^FB ¦»ÀZN x ;qFçŒ%[±Mý³ü8¬újäÉ7 åóÏ!Ï_îšgDÃZqF¤ ±êô8ÛT8Pz#ÊN3“0+³°¥ø'4\«Nwœ"%š[Ÿ[`“þÅÈœñ@D25û½ŠdÕhuNÀfÔ6öÔ™Þ%vÿ+~'üÞ#\ñ:åRÿæ¾Ì/2Ï‚‡¸fôB2Aó>ˆø-0»ö„?1‹É±Ø:e$lǺÄúó’±°a5c?¾ý&[s¿B^Ñ5ÖÚlMÙ'"Z2a“mCÑÍ^DŸT7÷Ø?°÷ÜEÕ—{¡øj7ÊïvÃ>ìŠiñ‹ÓzŽFJ²zF²²V‚SÂÖïê®úŠ*ÂÔÎZQÿÓSHXÙ¸f¡Íðµá» %頾޿8Ö®ªÕéCááq´àì¹'!Êî‚“®: ƒ3~�MsŽZ[X<p ¿ƒ+®ÝÈ)è|½° C'úݺ•¤§çì@ñ|ºº¤ÎxÌèe.óOع[‰G iö]èh¹Š’í…PÿúLøÜ]婘NɶŠW«3ÎÛ´Ø-Ûˆle§·e‡Ç¤D¡°`f,Ó²Öf«Ÿp'‚³j» Rs’Z�Uûëå9Ñs½Ðl'©y —§aݧrÈ×§~/jû£Iï“’€ÖU)ÛQøíAdmýŠ¼Ã¬µC`-§’Ì!Krh²xW74ùDA?…ÇñMVr_¡ˆV%}g+êÛþYR~îe®›iPÿð)²·L‡¼_qã¥^/ùisÆãObÔÔ×FÈ2~@‹#‘¶×úõèŒKé«àÇÄAÀŒ^fðZw�ëžø±;k_ ÖÉÊHØ*& ±þ¼TxÓ¾Ö,÷øœñA¸Lç‘ÍÄ“Ö ÓpvýÛë¬Ê2*aè_Iªp¨ó‘‡Ò†ç°½K¼Ï@»;²lºF…9?߇“ˆ{»ÅZ›­yÖZp* ²$‡[à=lÚ}Ér¡ìæ4Ñ(‡Î1KM5´4*é“¶¬ Æd¤!K@§px"+²Ï$ïAþZ éZ$%jêD½¼( å=˜íþ4dÞá-ŽmÄÛ5²ŸÇ.`æÀ#½ “!÷‹ž@ßG˜xŠsªV ÔÌ/objßš°UëBí4õÊÌÝP[&½I«39©”Iÿ‚`P©Õ}‹ Ù¤ÖÆØ ƒÔ­ìD*Ei¹^fÍPnNùPO3~—}޵6c„°ÊƒSÉè%9ôؤ¦yÖåiý-矽SøoQ”BGqÆÑˆªªkÁY+7Ï ?§48›¥ÉŒáX×iU§WsÏ×·œˆÙ5µÀìŒ6€&8ã[,] ¨#×£ÉìdÎø*#!jêÄžÙ]‹ÐÉÄB›aØ7b˜EjmFK ïc¿¯Ë&i¶[ÂVq¬H¬?/ÂCs´ãç *hMïà1+!—ïFy]œq­sa$Ï+«w!eÝf(TOázö¼³¿YFZ®Þ=qZ«˜ Ð\lW¿€7„¼¼ä¤•߆$Ùdqc-§’Ñ!Krè±xL™UÈÜ^Ë yøäÙgãóôÍÅÜK["¦†0ðOhýë$,5ÇE>m${!“É‘µ+[ŠtìkÀ>”˾„ž¨¬Z1Z,‰Mö'½¶°¸$DMdþ:‹¶‘€5âõn%2÷h×HæŸfvè«8ÜX˜‘Q.JêžÇ蓘xd»%l¯^g<<â÷ídÐ ÏèsÿÂÝŒüš§è_”ÎÒ ­ê^r«GBN<~V‚Ó>Ç¨Ç ¥|+r˯Ãõ‰cÕ³f‚SIè%9tÙÓpt\Çî˜FI 2òÜÊ0íN)Áñ�ƒ5äýô'š+2ý}óÅ‚ô¹ÈñžlN¡¯¶gMãÞ¯[5ßz[c~wê` ¼VaôÝCÅÖ̸º˜3ž�¢¦NjÆëŸ¶Y{P(v!=E†u²p]RuX!ž8ÞIas‰!`æÂàÀpÈýâ1c¹‚}\§ði&>Ùn [Å«Ö[ßN•ð¯Ð\¹_Ø´ÉÆaz›e·9¢O=zI<&œ-ª‡eƒ¬qÖ`p*¬CV!Œÿ°`¬q¾BS��ÅtIDATPk $‘jÆSö@-r-'ïlÁ÷§û²¥&Œ(+3bÂãDGÔ#‘jÆãßb‰ü»´@ÓµHÏìmõP+ÿpÊ«0tôaLrcn{ê•e($mB+j`èyß½|´/— WÇVƒ:»ÿ³˜ˆ!`fÇþ zïÛ`m®FF Gyº|²Ý¶ŠÉË…X^*Û·“‘Œ£CûhÎÍêÑ.Xoc QÅÚ˜ÉØ€ŒÒ›¬ÍÙZ†§ü/ð³åÞG†¸Ðc øÔ¾ŸN„LĹ—Ð_7 n…8šÀ©¢k¾]‘wX08*vpk¶»Ç¿'Ò¾CÛD4‚3®Å’åoŒÆù€ƒž9G¯-,>ál Áƨx’i%&“²‡±×y'º;—͵bwP¤‹:êÀ)>‡Bg\ f³H5ãiÈQÿAçÞ¸@|²Ý¶ŠÉƒˆ…X^2’ªo'C:ˆÀ…m:OðA©îq·?+‚Ǭg6zc‡fõh¯€[:ŠÕõÁ/‡[ÛK !~`Á˜TïJÆ*`5§Â·Â™²Œ2hY›3Q!÷•"Ü ƒÖ–ÿ%¼£.£ÑJRé§á0=” ]9]û™Þ‰€÷„þ:m®(ß…Â;u¸þ+8q Ï”hº)áßP´©�Êf3ì~§w¿Eö¤t5ãÞZgîut€:kQü%‡f“eáZ$%¢3þ ®”ìðfâʶã¦UŠ„ï9¸zÿ7ß/µÍàMw/œ‚·9 ž,¤¹û†ù¥3IÞ…ʺßA¬8PÂVq¬­·bC=´·:âØ ‘AÂÂm=<Ò{[˜§C–ñ-t^£g9Ь-ü®-qî±#øwœtÕñF8ýk5œò¦´eaKñO!†ÓupŠ\”hn neŒBÇ,I¡Çœq}%Š/Þxî7p±8KpB¯Ã<LŸ0×_‹²O ÏÊAú–ÃÐ Z Û·YXKyP÷ˆlØ{†ð´éŒ®ø%†œ8Ð3çèµ…ÅÆc:Ý^Í`$USx¢0Rv¡Úm‹¯.Mˆ×5 ™ ©ŠŸÐ.Yßs²¯•Aqò48òî;N¡$·`¡‹Ôb¦1lyˆÿRžGMc/\¼`8LhzÐÂÖ$ãé_‡ÞßYŒ4_Ãm‡8O>a«˜LâXˆõç%#½ÁÃÝs Ù‚³Eñ=®†w‡7 Ø£î2~P|YZ)š£j¥êÑü,þ¿Ðjo£Ã.¼,ø <m‚>)6YF|XKÁ)bd´àì¹'!§‚“®: ƒ“9ábC- ìýCCxôÜgázqy›AgKt h1³5¶åÖM<fú®ãÐÙg›F˜Ã֫د~!\=Mˆ!'ôÌ9Šma‘ám¿àPu+Fì àíÅÝò]Ø£>I·•õxaIÉ~ÕŒò½˜ÉŸí4sJ4‡dÃJŠçtÕ|T’¦_n@LI>Éø9yÖžðef £�Gu}ÂÛ9 s/Q»s#dò/°+=Eº^ôé ׿Ùêîø¥û¯òûcKöq\3ûµ<ï`¾yé²Bè˜3Nç”^ˆ І±d+¶”·„wF½­8J°ƒ#FÏò S=Zø}K÷¢¢yPp„¦Ð¯=€Ô”lŸ<(ÌwÚU2ҳƂS~x‡2GfõB-®fÜç“lá÷àwI æÂ;`üþ‚?…^ØËËNÃ81ÑŽ³È¦Ð^‰]N˜3ž\°Ö"Mž…½ÄùËMGŠð»Ë2Ï£+T§A4ÆÑkq,v0g­¨ÿé)¼Çkž·h«Ú·ùÇ»z¡+Ý™,‡µ/Dk­™YŒ>{†—±ÜâÙPoS v`˜±¢öÐ0ÁEO/4û/S®÷â²Î¸ö¸› ¸LDºS÷àûªKx(R€=a«xµ:ã é…È RC-ÿzévïÿ€2ïRÈ4 KãX£>Ú›†ãñ]<g46ä÷ͯÀpÙüH JÓ6!Ÿ´ðã¡Í¿@¹J&CzÖZpjc–oв¾ÃŽá³k ý£¸×µ®è±È JrÕŒÏÙnã`X}ƒm(o{çÿ.ZCNÈ¿I 4]‹äï {Ç-(K‹ È/F…º =£¡}ò㉿t"µ$'㾬«êì4¬K-€ªýup°Œ}(Ršxìðî!˜¯úÊÌÔ×Ѽ,íœÆó8e|+üs˜0žF™Ñ Ïh;¸ìsÔÛ‰¾àº`s·ÿÉð[¿š?'Dµ9¶ŠcÝ@¨Ý€Ò ‘A 8ùÇZ5Ø¡+T†|°Ñ¾¾‡Sß5|üåâõn5ÔPÞCÒös0þý'Zª³ýê’3pÛô8z´oÙ„_Û¬µà”×ШÀŽŠû°¹g1Ó¯EAê&d— (_….Wü†µ=¶�©­L®šqþµ™~¡Í…qÍ‹sâF졺JQý ÇÌ콯|¯gæç0Œ.ãô] 8q`Îx‚à§à05A£$uÊ5Ð-Nh9qÍxºìR«å2ƒQ³ùÄLý5í§Í“Ñ«ƒê¶4j꼫Ûßž4…ÇñMVr_¡HÓÝ>17ˆ»õ|–!­¼â6Q²¯ÿ€ÂCÙHY· ÕcXÿ¼³—ФoBç(;÷ÿ‰F<p ¿ƒ‹ÕÌ®AþAóÑj—ŠÒOµ£j¯ï49˜Y¸,ZÎÊFaŨmh„qAųFCj/V¢0ãsäqO$l籄kî¹ê{IȾ@e«ӶǸD¢§u¦Äz«‚µœò ¸ð¥ãñoa,ý ëóI¿ý÷°kOÄ5•v­@-|5ãÞ ÖÓG0…”ži¸Ex¿xâ>ÉCÕµœ)þÒ[ãšù¯«¸\@ {bŒoF~´=!¬œ°W¸§—áÔÇMö'ݶ°ˆt­#"~{÷"7= ©Zô{[N­^xG3*óCk´ƒÇÞ¬täKÒÚì=lÚ}Ér¡ì&Þ¿Ïö8,5ÕKÚçámÐìò ˜~¤é›ŸÁFcùN¾Œ'Ù–CÐtý³°ÏøÇYÍøšÙ€IéIxeõ}aÞý7ŒÕ¹Ø¡é /tA ‹1+ŒšRd¥„ ^¥"£è,tÔµF®Ùõn‰“ŒµËZ N‘´Å¨6ZÑ×r™²ÏPJRóÜ}Э„aÙµñŒA·-à³M…¥7ÐC½ÑùI…"Rnäÿ¼2fá4|ƒOŠ›1"¬‹Ú¯°N¡Å†Rìæš`òŠ_µp§PA‘ø÷ð§iÎÑ=ÿÅçü¿YÕ10ok°ÐL› ½+…3NÌ;°.O »÷&Ï;ãNá¿Ñj5 ‚4%ev°àŒß¾ÝPh0•ÇÌà ôŠ”í–°Uë²V6 F2BRfÆ-ãÙž°pmpöp!ŠËOGwjìqÁ9`ñ9f+^ÑRË`DËÚ N}HéÛ€ŒÊ'pN ¿ã¥sป‹O 1C-@25Zšã ÔÐÑ¿œTì8ãîÅM"F´®üC¶¥Ú.ûÁ•à;QJñ Á>Ý댛t*híóoF“m*œÒ §¥‡?ù÷h¦k‘’Y³›×ÌÒŠ#ûœÈ:jZrÍ`Ìú:ÊÛRL©Ñáq·Ã?çgá‘äšÈ;\…Ìí5°x3ÈZÎÆçé›ýe‰Ñ¼Óx¤7a2äòæ^6ẙî$uB<Y¶ŠcÝ@’n)í‹‘,›¶‡Þ Æš N ×:<ì¢× [EPe „sne_ ¢Eâ>Ä+Äëàl)†º! [·¸}Øî­ÍÖãedÅ댴NË,oäßßXÕ—õ8‹Ú†h¯|Åöª(Å×èéáOÓœK:[x¥îÝ»ÀyÛÙ\°jË-—£Hª“qšZry†ÐÊ}åKÓQªƒUÒÌáÞq¸_`Öa6乕¨·D[+©_»Ì/ríÿ¶5LÂV1y±ëÏÇqÒ¾ŒdÁ·›ÍvÆ<,8ÅzlÞc“B‰f³Ý¯3÷p7´G(-Qð¼BËY5‡Κ/á¸áµÿS x ;qFç·«Â6Ò»œ‡U_<ù¤|þ9äù:8üß¾4äT’Žþ4ÙŸÉf ¯áù¾À]Õ¿p®¹3^gü;Ÿ8 T]Ô´är¡G™ì3(~¸ ±Ý”îhŽ´¶l@Ú‘ûq̃Y«ÂF[„L¶HØ¡¯¨Âµ  _¸¢bpz3†%¿núIØ*^µÎ¸¤i_ F’à1ál®b»,ƒÁzlrú{Ìg¸1C·x? Ϭtû4ïê®úŠ*nÁzzد9JhèáOÏœ£Ø^PÒ’kˆ’O2Pnt„=Ðój’Vd H…ï„ÛWz²\9Eç1c¹‚¯•Ï—ÝÖt5’°UëBë$uÚc-àÀÃúNL,5Iæ^BÝLÁ&æ‚õfqøÞ¯Þô©›09¦Ø|g¬qø¸+>¯è±ˆêp9ªÛÞ<gRãyå™EÑ©¯ZæàêíÅ«ÐsþtwG'¹ gÎÑk K‡0—Ì·Àýh„]ês-JZr¿B¾[ [Ä…Âã½ùGä‘ÌÿW¤a¥Î¸wj ø+¨› *°5åcÝV(Ab-„­âX7j7 ©Ó¾ɉg .’Á»1>þ±Z×Hõ5!#jñ !}¤7§£X]|ÒÝâ Øîï_ûÀ‚1æ3Ö4®¸+>¯È^H n jó·Bžµ i½”*\ßdr ®®z<pèË 8yÚ+<µ0ÎGîÎK^a(ÞÑ„#[3qäþ+êsšæUó?.ø„×ÅÉ£¤%—ÇÄAþ1Ø¡C¡dBvó¬ÜoÓn@†°7Rßð3Z [Åä—‰…X^R$Nûb$¤Ý‘iðǽ¤nS¤ÖÈ}‡›¿·¾&J®üðµ0Ký6úÓp´\Ĺǎ`JpÒUÇáôd0‚XVp*™2EèQ|^+ûJ¼Û†Žz%J ó‘_üÔ†¥µ\ÇÕË«Åiõoº{Cê²c…8PýAŠÐÉ'¡˜ŽÂ§çt¦9GÛü—ž8:㬢¢%×H3Žž0.qÏcªƒÃÞÚ¿$¾Îi [Íè¶»–ùïØq[Y‹ß¼mIçG´•g`xºÿÐF|´@¶ŠcÝ@¨Ý€œ­¨ºôÂM9†‹vìØ{î¢ê˽P|µåw»a_Ri9r}Í>ꢈÄQjÇÈRâ\Ô8J :X~p*i2E(R|^+gO³p>¼§!Ï–æýÏq‡e8xZÍBInÔ–Iáµó ÷dbë‘&8b²òg1úì^Æ4íé9]§gÎQl KF<qZ˜ðŠևͬlLû#Tgí…Æ*aæÕ{3jN6.Þ¦žCõݽˆÇ…³i…íe _â < ñÑIØ*^0 bTâÐAæZƒ“ó_3ÌõB³œ’m€\ž†uŸÊ!_/ÌÙ^ÔöGŠÚqGÓŒÁ úš!ô5Ga}M29JŒÄ³’àT2eŠÐ£ø¼V û ø„н Z÷?Á^É—gaï¢ÓêÕõaN4g<ÓxÝx£ZäþÆzº.ä™ÒMׄ=vø%LÝv¸V³ íy‡ÁW'ОWx|Iƒ– ‡Ü [‹ ‡ ŠQ~æê$=ÁŸ‚US•9Ðù$§Æß¡Ì+p·áNÆǯšƒHÛ¬„™ê×b|´@¨]ÅI»Á8QUu-À@ÆÍ3ÈÏ)Å•@Q·&&ç¿6u>òPÚð¶7cK¤ªFrpÓ£þƒ²–dr” gEÁ©dÊñ޶L/!¤ãÆK½fÒ"‡3ôØ ‚³¨¯DñÅûÞ \,ÎBfÉu:÷¿Ñnt¼Œ¿Žïv ûÁ5ü ø ²u…Ð9¢¹7bœ®‹=sn­9ã.˜kÎÂà˜ñž‡œŸC#íWJ¸ð—Àòoq´,à qÆÍ~5Ìï?vMlZY&ŽÜí\[ʉƒsÆÅfjÿ„N­IXjŽƒëZNÆêa õN¤.#-÷6§Á“®À(â`¡°Ö4™%FâYYp*y2E–8 Ÿ¡ô£§ Œh ÷“x¸‡†ð.è¡ÎÂõâ2ò6‚ÎF_m$?fÁ4ÐwÂNÒ¼]ýxj¸ƒæÀS ±˜ÁX;tª#ÈJ‘ Ï- Y‡Ïãê%nGéŒYZ¼A}‡]øÛ„{;ЃþÌÎøÞ[zæÜZsÆÛÂzûU ð<r‘“(*ä´Zõ9pœuÍÿ‰O{⸲-—q˜ÎVA÷šø8<¦L?á˜ÎÅ{L°iU:ô½Ãß`ØE×o·Rk0g\l 1X&¢¹"s „ŒÕïžÀxÔ‚UÓ¶<Ä)Ï£¦±.ž¤¾šÐô Nê„€’ÉQbÐÁòƒSÉ“)BNG9TÝh8mÀMn?rJ.Ô‘ëÑdvFaÄ0>ݶ‚Î6”Þ@OÕ—£fˆÒߣÙ6 ~æ%´r¤dÂÉ¢"Lc@»)³’ÉwãdMãBËK~rãQ½×HŸç 쨸›{3ýZ¤nBVq ŠòUèrÅÁAòCÓœ£{þK�?ÃÑSeáÒ§ÅBX¿­ÕÈ ­[SÒ‘«P`o–ë3~@‹Câ�•Îx@0dÑsX Á†õÌÀíxŽF wêºæ$i{.ÈJð`¸û?鄌9ãb©f<eÔL´ s/Q»s£`´|]é(Òõ¢Ow©ë6"[Ý ºš#%“£Ä …å§’)S„ÇÔà þ ½®™¨Ù§Œ«Ã°V û ceÌšB¾Wy#Æ“H[_èm¿ÇÛµÈÛðLÀn~ˆk?DþtíV {@ôÎ8G<áRâßÂXúÖç×Ãæy/ªR4Ð4çÖÞü9‘z†³Çôx-Å»À[V•†lî×€ÓðŒõÔáÀ‘Fi…ǨtƼNx5îývyQ†Bdfá깊üT™à mGá·‘µõK(òCÓ3þ‘÷¢!ö³àîµØd´¡¶økpÍ]°Ø'b~NÌG8õCt=4 G?fp2~f_@½Má3:f¬¨=ô#L¤¾Ô#¼ö_þÈ)b¼I&G‰‘œ$S¦ˆðâ¾SÃ``¦ˆ0úî¡bkf\†µsÆWÎ\ÿuì¯~„¿û¢:s£_Xv6}ކ$²Y„õ;Ö‡v ¥…p¬ðè£JS']N ÚhE_ËidÊü¥î>èŠ×b(˜3ž`j•£[!^[ìkhí!¥§ü ´ù|™üÆÆÅñ ‚Vg\¸ÓS&%r¶ó§«G?�íîȲUè~ÆcW¨ƒƒ©Ý‚j[1šÒ³4dW·Àƒ=œq±ñL`Ìõà05A£$­7âXcÂX%xà4žÇ)ï †¤æ^6NxFÛÁeŸ£,õû=ÆÇ\øï¤L?b$I•)éÅ-CJN m“�šmš¯Í ?ŽÍ~a-‘øÕhuNÀfÔû¸ÔÊÌ~¼Žÿõ(ÕÔ…owuC“¿Y¸¯QùÎé¿a¼DjyoÂ4¿(5MÏ•ú9& ~'üÞ#\‰J@l…ðc0«ò±[y?à€­-×J±=__Éçg ¨,kÿ”œZg\`¦×Çh´¿ó¬ÊÍ)ÈÓúö”ygÜõ;…6m(Â;ýö%Ô¾°Ø}h.?ù•ðg¬Í*œjv¬xϤv'í³ðrŒ¯Œýøö›lÍý yE×è¬cÐÇÜ îÜ™°È:ø0dH+o]ÅÉœ~ÄH ’*S„¼¸„úÉï™"°üQ•šm…ä°c<p ¿ƒ+Y&¼{¦Æ«P’þàêëh6 -?ƒÊãÂð’­¥‡¦çšsLHzzÎG% ¶BxtiÞ{¼äX²È ¡Ù÷²œ¶„0+s±]ý§œNœqùgH—oH‚6ÏspõöâÕ¢×·Öúkhóg0Òv ™1</jW1™àÉoÓb·l#²•^¥=I‰Ba³˜±hpL;ÀœÆÇñ¾�v¡Ds+@J}ó3Øh è$uú#9H¦Laχë¿Ep:QA³­¬vŒ|8ÕNEFáq|“•\ÅW(Òt']¿hšžëÚcSèoÔ£SÒŒá}Óv ª¶ÁSÑÐ!A0Ë=ˆÎnúD>WÖ–PÀó?+ÁiŸ ¾‘JùVä–ß‚eRÎõ×b§l ³“qz˜5+±y]ÁB‰Ï„ËtÙTG¹ô@jb;Ð4ÁXIêô#FRT™"«ËéHh¶’ÕŽŸ÷°i÷A&Ë…²kX°ƒ\0qå‚!?KM5´6 jn%„¦çº¦æ?PZ­Ñ‚aI3:ˆ-öÿ“;—X½þ=ÜÓ‰Ì¬Šµ-á*Çã€éé˘ÞïÔ®â¤Ý`¦žC™¹jˤ÷£ÇÄAþùçÏ‹x¿Ê`,…ô&L†L–¹—M¸N"2§1’‚dÊYeNG2Àœñd€(¡ïÀº<-ìÞwÂüºp ÿ-J:aCæŒ'€�}ƒu29²öîEnzR ´èŸ‘ÈРE¯ÄqÕó¡LY'YÝãn‰´©ÄhKÈøÔ®âäÝ`Hä¬?_PAkzY ¹0Ëë_°SF”Dj&£ÓÁ]ÅéG x&®7B2Eè N­.§# ÙV ùÚâ )³ ™Ûk`ñ:Nd]dãóôÍ¥Œ²W1=Ðô\×Êó¥oDVõC ¸ü§±R+ÿÓ¢WâÐ!?ý .h0‡i£åí(p8 Ýÿ‘‰¹-a’ClÜ:¸š{°»–œ„7µÀìO'€ÚUÌ^bŒµ‹ú*7Nuº:pù{PR÷Ãk`ïc0>LÁ©Õåt$4Û 4_Û’LwÃðÈáÿ Ópt\Çî˜FIFU6乕¨·Ä*ôÉcÚÔŒGQ*²‹MÏ5içØ2 -G’žø P¢W"8ãŠ)H‘ùÞ{Dºâb=ZLyb²&ÛNák©œñø¶% 7ˆ y§ÿ3–Š{!#Ù»2°¥H‡Á¾ìK•A–} ="‰ÁP»Š×ÊÃ`,Æ…Áá…ÇŒå öqÂÿe0ÖÉœ’Êé`„ƒ9ã1À¿E×¥ÃÈðÖºRD>e›…óQ:'CÒhç^BÝŒ)ÿÇÁwâRñoÊlðõ.CHJÈ¿I 4]‹¤“éÝ»À™Æý_pÁª-C¶\Ž"©NÆiÑ+™OSw;ñÒôÚ‹•(ÌHõ]‹l rsøwÕ~ì“Ü`™m ?àËfBcÍ·È•‚u Äû‰Ë,ê\äÔþ%̱)ôÕ–ã¬wNÁªùjK´»×ÒP»Š×ÌÃ`,ÂŽ;5ü¤ÖIúV FÇDÑk œbD†f[v;f֢ƶõ;Q~-XA§»‹¶Ÿî8x"ôßFÔ#Ä(ÎÁúìr\k¼VaèŸb Ží ÈuÓM×"-<<£/pWõ/œkîÇŒ×ÿGT¿Â!UªtD½’vX‡Ene¶aܧÖþO ?ƒ;ž¹Lì�Z�"¤ióî·°´ÞW´ÝW¾%?\¹•ú1å'ãµ;[ðý©Ç¾,¼ #ÊÊŒ˜ð8Ñ!b鵫8i7÷Øß-ö–øátŠúrc¬^"¥å¦!GýGÔ§ Æê€§‘¡ÙV ùÚÞV¬»çõ ™…GTGpÆõªn485 ¸ÉíGNÉu˜‡£YÄDñ�v‡²šõ ž¥«4=WÚçXrC4 Ât¶ñ˜p¶¨6Šê¥}›¤pÆEHӿߢµ"²uë!Ïç kïØ÷ÞñÂÒ]¼ž©b¶»Ç°Å["2Ò¾CÛ„8¢yÔ®â¤Ý`¨âî¢Ãd‚)`tÖ×\L–Wâ÷#d¬2ì¸Íið¤+x™_:“§W±Ç†FêkÉ N1"C³­@óµyñ¼E;wªö€@—0ú PßÓ°ç158ˆBß_3/P³O‰.W4­àüîàE´Û®Õñ}ºŸãÚb‰¦çJý•ŒY[¡UŸ§¼ CǼS'.Xo‡wÄÖm@FéÍeñÄÂcºƒÃ~Iœq±Ò´É³3BS~ åšèvLÂãê…Vuò4õ¼Ö}ƒÌ’…¡€N›K´gOí*NÚ †-,Z´C†”ìÁèˆcŠ #Éxñ±qŒÎ¿t85êšÿ#QÛ 1™ƒÛÑ×~€bK2Ô1’ƒUœbHy¯Ò Í×Fð)T‡³SÄNyõÀqç*t 8ÑØ­÷P•±=ÊTOÿ Ý¢k%ƒÕŒ¯~Â9Æ‚C\ñPº4õY3”›ÓQ¬®vÄnqPl/†üùcR¿‡œOPûø­ÿC¤µÙ©£È%÷£Ââÿ¢¸ˆš¦ÍÃR÷ ä²HÙ(K;Ñ3„§M`TÂçLí*NÚ ÆqÊÚç°¼pÈxÕüöjLþÐ}p§ÂÉ IFX<p¶V#ƒ¼tRÒ‘«P`o–ë3~@ AÏ(úÛuPÎö ë¤dã°òÎpMÌgˆ@²§ˆâ¬­ÚáZÏA]×LÉéÉê„f[z;†‚¡ì4tÏ‚]&Ó"×ÄFª—!%§fÒ.* ø·M(«lÀ³ k%ã%†ã˜qHÓs¥éZ¤„k@Ѧ(›Í°û[›‘:äíIéZ›1Ζ‹8÷Øü÷ Nºêxcü2ÿ:äžÅ#‹#LfíÜýhùþS¬W½ôMLÄHÓö]c«ög¥ ?û ¶(~Àµæ'h4˜0êÿ®µ «ø·ß~ Ž: ƒ<èЯŒŒø‚b\}°¼Zü›µêñSYº$ÕªU™gY­##<s½ÐlOC6÷k€Ã1ƒ±ž:8Òˆ·ñ³9>Î\´{6y7Wyî·¨i|î¿æYLŽ-î‡É`,Ÿä NñÎ'¨ÌØ ¬‰T¤çî…boäë¿@EË+¶$€Ø ´Bóµyq¶¡¾i�® wŠ/õú¨äèœñÛ?Býä÷`'ÚÜçoÍ D‘½MC!©¡ËTdšž+õsL$<¦óØíM•FÚÖf¤f¼ÿ“ãÛ¦WX'ä³ MºáŒg¹i@Æ­L¾ßT]FƒAº‹ßá›l¹?[D*7Ò´ù!«÷@.¼ÃeéÇqÓü޽ C b¿zõ [¶lñN´HãüÿáÿnÊ ëŒÏàMw¯ï$\xqÔîLAêáûìdœžÙPoûzQ?MðƒÐæ_ðqø)Œ¿÷}=¡/'—æ×ðCá×8¢Ò¡ÝJÒ‡™3Ήd N ŽŒU“ Yö9´-œ†““ònÔ(‡á-[bCìZ¡ùÚ¼D,«û ¥ÞÞÊb!¬ñqLÆôŠ¡È.äߤš®EJxÛ/8TÝŠ‘'˜ì«½¸[¾ {´"ÎÕ�¼öúFÁþ»Ò3P¤ëEŸîR×mD¶º[Øíã„ã*Ôíèïy ƒ†ÃñÜ-^\&ÏÃqîgž¾@—’8ã³p6Á‘k¦à4íeÁ>ØŠUÅ…(®º†f :Œ°“qjVñRyÒ8âÇmV”á Ç[§P’[�µeR˜á'ò{åÝ…C’݃‘ôðc0«ò±[y] §íh¹VŠíùjüJ>?k@eYeŽˆà õ·C§*Caa1 Ë ,M;Iœ"b7yÈ[¤ø<»ö„¿¾ŽªÄ„Ø´Bóµy!‚³‚Qtâuó òsN Îì”ÆÁY1b(²‹MÏ•ú9&.Xk ‘&ÏÂ^…ŠÜt_‹¬Ìóèš(ã}÷(P;0-láVÔú&’1âé…fÿeXâÿñŒÀñ.ðo®þûPºŽ®ùöb‹¾G,¤‚ùÓÖoV!¯HŸv"ï‚©ñ*”ħS×ÃhqŠú§j‡sÈ“Ê'8tÈŸß,‚FŽêú0Ç¿Âý#™Øz¤‰9ãŒðx{[’ºš€M/ÜíEm¿›oìðî>虚:C ’*8%I柰s·çºÐÑr%Û ¡þõ™÷Úu•§Ø)¹H½Vh¾6/SCø'$È…IXjŽƒë¢í¼J Evq é¹R?ÇÄ„Ÿ„½ã”¥EPä£BÝ„žÑÐù+&8çqÊ›%2‡ ãi”'l´\ö¹„—šò®^è¹sÐ’´o—¦—âô¼†Á*Q|ñF@ì.g!3ê Ø8z-áÿ1ãá3{ü2 Vïê†&³w­É¼þÝ.¤§ÈQ } ±fu«8Ð!O:Gœ0ÚŽ—´O-Ý›~Û%¨ÚƒD�w´Éã½}8ë”ç[SÅX½$UpŠÔ×Àúp×46bgíËEÆ cùûI+4_›G3jt–à÷ŠÝ‚æª,¤HV‡ˆð¾pOGùïNAÌŠìâ@Ós¥~ŽIÍt7 $:[Ä݃ÛÂ(øËVÞŠ ÿ·IŽgc“N ‰:yý)”ïC±$iê<ÜCCxdÎÍÂõâ2ò6‚ÎÍ;×ýáBœ<˜1ÌáLÉìT¿Þš3pÜ?­[Oà¾CÊàÊJ˜ï³¾Õ-} 6·÷Àéh¥hAõ5¾Š% ‚€[ ü º ©1(f½=v¼Ÿ]™åÿAw·˜5}+„–š*Æ*&™‚SOqNÕŠ¡°×8?Þ`د̈ šê¥H5ã){ 6ÇÃÕpÁt¶Z[4oŠHé²ËSdòïÒM×")ü[t]:ŒŒYÀ³'C*á2o xJ4·N…uÐ7?ƒÍ?R3^F¼îÓÒÇ>©îÃ"<p¶©p ôz¢ºvèòÓ‘µ74cXGu˜£ÙŸ„Y¹ëò´°=€ÀÒ³Øaθ؄­¢A F8ÂGƒÆ™ãÈÝy –™;´ÔT1V7ü,<K§¨a®ÞÿÁ÷!Ÿ–àÙ*„fg„zGÉÑNý0 üƒŒn¼v‹<Wy¸­7Q´å“�'êÃe”Ak‚{ÉTpÆcVdrÍ´@ÓµHɬEmëw¢üZ°c¬ÓÝEÛÀ¤ÿ»ÄÆ—ù×dz—ؽ›ÍdŸAñÃeè›18f}º,hëó“YŒYZ|Aˆ»à·ÌÂ5ЃþÌóõêeÏ:„Ÿ Å·›ö 4™¾:ìÞvÖgÛܽЖ| ù'ÅìdœZ"ÖŒ‡ o4Èÿ3 FKDƒÆI舜P让b¬Â×›A³KêëÊ 8y:bðŒ #[3qäþ+ ®7ù¡Ù¡ÞQ}޶ÞP=ä€î/¢AN—²°¥ø'49R×Á)rý'-°Œ-½Åh{;zC¿%kŸ9ãñ‡·i±{wèé$ažÕ^çУ(÷Ž+2¼¢uÞ¶™ŠPjÁô’t¯¾g´º§R¨ô»®;*îÃæžÅL¿©›U\‚¢|UlZ ÎÕÃFýó›ÁhªêŸÐ< ì—Ä?qªÖ!á/ÌV3Έ™HQD ¡¥¦Š±ŠI¢LâŒëBžµ'bðŒ9ãâB³3B½£ôÑî/b Î’Æœ=÷$ÄÉœtÕiœÑ¼íè tÑô\©Ÿcbáy‹vNp€Ú‚K~ú PߎWzv‚X8õžƒ{tæÇZTåmƒ|³/Ó„ˆŠ}••Ž|IÒÔI í„/û‘ cégXŸOè÷ËHÓvÁz³[d¡v"Qz¦…V ”âµõ¨…=G©1 £T4GœÀœq)à§à05A£$/ 5êšÿЗÁˆaÓu<G£F%Ì¡sP×5Ó¹YÑRSÅXÅ$S¦È,FŸ=ÃK6õã1èh…ækóÏî/ž×hÿŸgqªæ¬äÝàqÀÔÔ²ŒTWz]4=Wêç˜HÌõ×bgXgNšñˆ$:½Ú“R“Û‡µ÷ëÎãpÖV‰î0;j£}-§‘)û ¥$r9f³f(7§£X]d'ênqPl/†üùc´zãî^Ü, 9t’}Š–W¢9äÌ~=šýH%¢"ûñí79ØšûòŠ®E)tÀ`ÌÂÕsù©2¬KÙŽÂo"kë—P䆦gœ2‡œ’š*Æ*†dŠü…ÉdN k×ù¨ “!Á×¹—Ð_7#4!˜;Ä0¢š¯ÍKÜ2ùæ‰åÈÚ•-E: ö5`ŸðŽ“e_BÏÒÅâ~è tÑô\©ŸcbÁÁPvºgzÞñ¬ÃqÂ&<½zæÏ¡9 Ç·Ç¤D¡DA‰­½6 £ò œÓÃxéœð.¾ Óh4 rŽ–‹8÷ØüΜtÕñFÊ[àzðÖp›J4›í~‘XÒ'½Ú#LMZ¼u-²ÈVvbTxh¾bÃŒEƒcÚæ°0>?�íîÁHQ¡‹ôÐ6~®Pé§zìlTM"Öwb"äšæ^6áz\Ôx«Ÿd N‘Ó»pŠÏÂH; c€ñÄroi…æk[Àã„ÅXïM¿ä”Waèü.ÑÕ,ê\äx¡§ÐW[޳¦qï×­šo¡¶D¦lªa ŒÚoŠ:Ií´¹â¾Ðô\“bމ³ õM!sÓ—z½„Jú´¦W“#ÕØY~"¶ÈO¢¯î(Ž4ÿãÿÿàqaxص“`b'¶cijÄûÚ€µ &î˜/M?ˆµª¦îã]¢S?άY‰Íë  µû´Ò}Îø \¦óÈŽKßNFÒãMéIAžvзÉÏ;ã®ß)E³C§H ó¢’!­´#ñK1VIœ"u­§Cp“+F'Ãì 6d¿¡š¯Í‹çZ*¾€Œdò¥ï‚B±YòTdT<„CäS?ÞÙ‚ïO=ö½&Œ(+3bÂãDW¥AK²°¢"cƒp_S‘ž»нY¯7]4hz®ÔÏ1±ˆÔ†o?mÚÿm¢BszõÌKh Èiµÿ>¤º¶`óD²C•ë÷°iËQÝö6`™Á˜õÊ3‹ µ½÷-6èXÅM•â½'Ë'â^²¦žC™¹Û'~"à1qþ9äóuÞ¯2K1³2ÛçÛßçCþÒå(tpíЗ”⢶áËJ«BqFJêžc˜MxF¬$UpŠÇÔà þ ÷$pðõŸöB^+#ŽVh¾6‚·]Ôºt”6|h+æy‡?ÔGQÙöÎÿ1˜†íî±ð'Œiß¡m"Mrºžƒu[¾E£mÒoK ú¨ ê}ÿŠòïšž+M×")ŽFTU] vŠožA~Î Ô™ÙÖ‘Ò«ÿÀÙÿ·oý%‡÷ôâùÍ»m訯§¼ŽÇÝ1ìÄ*7Ÿ®\þ”\ù%àkè X»-¨Íßê׫؋ÜôTaÝm@&·8+t¥Ð±ŠwPZr)¤åEàšâóˆ4¬½mÇÏTКÞÁcVB.ßòú¤~1V-ž×èøY Nû£Á‘oEnù-X¨Ó˜Ä}$ø%ÀãE›ö5ÀÆt 1“LÁ)ð:» Ý_CAŠ¿ö?ï¢|k¦h)mŒÐìŒPymž ŒMúÞ#ük Ò¸Å-‡…¢fòÍàµîd–ü;ضÓ?øHš¹`OcÒû äï8€´E×EJCÊ㺶˜3ž�¦†0ðOèÉï$,5ÇÁuú?‹à€/à@é/°z#T J¯ö€ªáðEr©Ò[⑬¸080rýäõ ö m2¼}%J ó‘_üÔ†ÞRd± ÜÿWJvxìd[ŠqÓÊ ÆÃe†–» £Ö0= ù7hÝ·ëªL,�Ҥ NE®—eœ‹­'+#,äÞÒ •׿h§~ˆ.¯øÕS4”ïG©¶-@«÷¸¯ñµÎ»ñOmë*qDõ+Shþ?:_Y‰gæç0|¬=°žnÿõ“ß}×Öþ ÊwŸ„¶½ëÃõvÜ·û(t¯ã—¢KÓs¥yþ‹Š£5:KPÓa· ¹* )¢ŽþAsñ§X·þX@š× ³Â¨)EVŠ ëº8:ã:(dŸAñÃeè›18êN2ÇÜŽ;šf >;Çúš¿ÃÖ”0Á@Y­ÍÂ¥©ó“°5 ™ ©ŠŸÐî ¿^œÁoT:Å'já{@Ÿ)ÙƒÞ“Ì8îŸÀÖ­'pŸÚz&C,ˆóPÍo΂© íÚÓ¨4ØD}y3|0g|™D¬½ i(Á÷¶£ú$U×jp¦øK¤’ÔÎ]Åå…Z×ÍÈ×t/´Ü ë0g|µiÞ¦ìZT±Xnkò7} Í‹a†8á)9(Qk;§)®ÎxAÖ~Sd Åû{§"]qʺ{è°:}%&£Ð=¥U—<RÍxrÔP(Úšmmæù]5_{7îŒrúYK0ÆZ% œñˆ= ê00Çœq†ˆPŸ)¡fœÿ µ_­ ãÄ0¢*¯-Ü ã¢ñîXçê,œ†oðIq3F0Ú¯°N¡Å†RìóÀ÷d³…;…úˆ"H‚3¦ìcñxço9hz®4ÏQ Êè˜ÝxIÔÄýß"‚î4£±¦E…{ñż®1Â:F쳞Y þÝv ¯ldîÑA˜7@Yø™Ï)†Lž…½¹Y’µ6‹;ns<é |vÿepäƒVµ¬ÑÖf¼«ºÒÉ2qXËê¬kêqÒz@0»Œ8@ýzw2nBׯWP”ö”fŸ°'C<hvF¨¼6~žÙVÓÝ0<ŠõÜÏwªíK!&íҽθI§Zè6CœšÉ6Î/±žyç#ïÓ¦f<rÆï-DÓs¥yþ‹J€ÖAži¸% Äðî!˜/¡¼è¸›­ vÆç!k«\‡k'î×]@Inò©uÆßc|,-àÄ`͵6ãáq´ :; ëR  j0ñø؇’Àq¶¢þé»%'ëÁ̈Ï0¬¦°S›BÖmê”çQÓØ O>›Ðô Î8žT0ÖÉàŒ‡M«Ý€ô#·10ÃÖ„ØÐìŒÐ|m^ø·èºtää/h¾¦ˆ"˜KÔÚ3ËÛ0éwÆ7VµÃe½†΢¶¡Ú+ßC±½*j%t~¸—ŠwøSuG!tŽøe“hº–Dà1©P¤í ö¤€Ÿ‚£û4åß ¸J‰ª8§©ï+1‚x ¼£¿ÜÔ */E†¡_Ã×F9D®“µÔÚLøÅFÍä§ /„Ô¯QÓþ×â4¤^T·“`¢yÅÐEè`=˜ƒÇ{aMœ4ØC;<¦ÌWð]ã‡M8¡Ì½DíÎÉ¿À®táå ëEŸîR×mD¶ºK5,d0–MRœŒ_†¶7$­vØ%½±¸F!ïTZ¡ùÚÞÖfëw†ôÅ'ã.ÚD8üð @wâŒÎ!K¶b›úfùqXõÕÈ“o@ iûš­–¯µÙúìr\k¼VaèŸb Žù®4=WÚç˜h„«Û²(ÕvÁᎇ@æÜ‚C\gg\±ÐƒÛ—ýžÞ¿å‰ã8Õâ³™3.!k¥µïhFe~˜šÓ€±7+âŒ�"öB,Å•ÀH“™õ`f,ÍŒšýj˜ßL~†£§ü›2̾€z›Â—Â3cEí¡a"½”=½Âµ_†…Ö}F’áNéLø3(S„²à”�I«õxS¯BI Õ×ÑlJ‚Ú¸ä„fg„æk#ð6-vïÖ¾hnÎÂ#Rfïê®úŠ*Ât?˜µ¢þ§§ˆ®19¡:€ÝÚÁÅk}VXsq\_4=WÚç˜XÌš•ؼ¥ê@Ì-n¶{[æéñÀÒfuE8ðÈÐ¥TIHvëµ.1þ­(q[q·º9…?¡Í>ßc?R×\‚æŒKÆÚhm Ó&hï&ÁD‹[/DÆê‡l°ß¡ÌøÖ¿ùò‚¿{ûUf -xà4žÇ)ï5ÎaÂxZ¸^'<£íà²Ï%GË Fr Á)ÞÕ M>Q‹NEFáq|“•\ÅW(ZR5š±R˜3ž·hçN@Õ>œÉÑg€šºLDž‘ßÀ¼ˆv[Àµ:^£O÷3n³4õÕçZΪñØüœgÍ—pÜðÚÿI ")ŽDd· óßeGw÷«àŒÃ©hO(ž’*Ji #”Y8ÞÆÓ‰cî%ô×Í¢)ÁS¶ŠIþSè4*o{$¥F‡ÇÝÿ‰‚x‘ZIq<€Æ` xQñ'š+2Eî…ÈXL=ÃÙcz¼öNýq˜ÎVŵ…ËG™Ä݃áRÇ„—Uy«·Æ‰Á‡dN‘Ó»}Ér¡ì®˜ÔÊ–C燥¦Z´ú2ÆÈ~C+4_ÁÛzLºw“!N͸¸L£¿voø4eV3¾6ˆF|0fìÐWq¸á=y¿†ªÜt(¸º§ñ —P’™ƒ’ºçTe·òî ŒÇ%M­IF ¥±CÏ*ö ¡•û ©‹~á È(ÕÁš,íÍ"ÕŒ‹Þ ‘±6˜‚US•Ùþm#Ž–Q¦5ÀÛ +Ø…MpÍ¡¾ùl¬%!ClhNafå¬Ë›OýwÆÂ‹(®uO^Èû•Vh¾6/$³¤ì4tÏ[‘ñ¬Ãôµäß6¡¬²Ï‚®•Œ—Žãa MÏ•ú9–tLbÈîOAŸ5C™_‡ ©E:�|9Ó}Z#θ¾Åoظ7p±8 ™%×a'HÉ*v¡G™ì3(~¸ ±Ý·Áv´@GÔ6·l@Ú‘ûx› ?l/D G¥è…ÈX øœp=~»âsÊ駦ÞdZºƒ�ƒ!”§„U0eV!s{ ,^åtâŒgãóô͉Eg|€9ã± ìßc¯a55A£äÀqjÔ5ÿ'NBX+á=ÆÖ„ë10g|0× Í^)Êü8^ÔìÅúŽ•á­ x¸‡†ð.h™…ëÅeäm:Mœ %«xˆ’O2Pnt„MãæÝ}ÐV€3û¿B1',þKxQ\F£u\xŒÓp˜â9PŸÁXäp7¶ÏŸ&"×Ö0Ö6t§žßq¸_`€Y™ yn%ê-ä}ÀæŒÇ€àXôhö#u )ûñí79ØšûòŠ®¡‡ÂÌ&Zô˜3¾V˜ÅhûdnÉÃñª3àΔã›l9dë6#¿ÖºŬY<p¶©p ô†hû$«˜¨$Êwka‹¸™%Ý‘GÚbø¿B+¾¬O ÏÊAú–ÃÐ Z Û'¼<dyP÷°EÆJà1Óÿ�×;‡)4æg1b<‰4Á FAÄÁN¢AspjÎGMèœ 9Yd)É û ­Ð|m¯šºl#²•^e`_{$f,ÓPö¾¡G¦çJûK~fáx‚Z®… ò‹OáÚã>&ƹ¦ DV´jkÀqç ®k†É1%êþHÅ*ö˜8È?&næÐ¡0 м};sj1À Tßu:ûL0À„I„†’ ˜À  š'pú?R?�íž/Qrå—€zš:pù{B¾ö@´ÚÆZ‡æàT|Ä^ ÷–Vh¾6‚·]Ôºhí>ÝŸ3>—é<²©³·èÑc é¹Ò>Ç’ÒWü¹`{aii1ÝðÎ'¨ÌØ ¬µT¤çî…boäë¿@EË+ÑöH:VñH3Žž0.¡¼ÌcªƒÃÞÚ¿è_�¼Æï/ø®aËNÃ81ÑŽ³¾ÜôC^Ýxpí(¶|‚u þÿC¸Ý$øäÿìÅ'p²ùð}8Ù‹! ¤ÓF+´ês”×µ±U7Q ¸ÉíGŽˆb/Œ0g<¦žC™¹jˤ÷£÷`äóÏ!—}†Ò…®´@sÆ× ³põ\E~ª ëR¶£ðÛƒÈÚú%y‡¡éaeGk7¬š\Ȳϡm!CNÊ»Q{ †·â¼Ó)YÅ0«N£Þ®CpFìPµ+ýs¶Û8Hœ&aƒ ÛPÞöÎÿ] ÆGðŒ¢¿]Õál¤ù“’ÃÊK8Ã5ÑåŒ{û<WÂð:@Ăֳ°ymVÂÌ1ã³µ¤SJ:r ìÍ’c}ÆhqЦø,8 ƒƒø'ÔJ›yš}Jt¹X뱡١ùÚ|F¥£?_PAkz)”ïFyý JÓpéÐc é¹Ò?Ç’’ù·;EpÄTèñ>êà ûù±[K”Ö2VS°¨ó§ Ùcf`מðgäÌbrl"¦ÃVzV±ç_Ò %È!wÃÖ¢Âá‚b”Ÿ¹€º$Plæ_ëPYÍ©·ÑÜù7«1aDÇ\´{6 /ÙOCã[Ô4>÷ŸƾàÅG0æl:mÙÂòÓà¸p<w 8aˆQ´Ýž†lî×€ÓðŒõÔáÀ‘Fʺlxà¸sº¿†àp8†ÝzUÛYk3 `Î8#Þ0g\z¨ø½Hk³Í)±ygÜõ;¸ìs US§í¹¯Þ½n.óOع[‰G]ó²ºÐÑr%Û ¡þõ™ð¹ºÊS1’Óu÷âÒÐ_bœÁ¸Óhà‘ /õz˜§˜7ΈÁÁuÙa~p ?~#*Ú­N¸…õAŸ3N®×ùôª2¿ÀI54¬,øÄ‡ÙPoûz¡®u~Úü >ƒˆŸÂØxüœ"©f\†”œö�š@š¯±rhz®«uŽÑñ{‘ì‹\lW¿€÷íCœqùgH—o@Z‚ûŒÓöÜWï^7ƒ×ºX/ü~äwŒ<6bgíK¬4÷mµÞ½ÄáÐAöAÑXƒÅ ŸŒõ·CGÝÂb–èJSÇ8z-Ž¥7 þtw³¹ÏX!Þ²‡|ìVÞG—7*MF;Z®•b{¾¿’ÏÏPYÖDÁ)¹àŒßþê'¿û¯Ó?Ì}¦¶wsrCÞ¯´Bóµ1VMÏuµÎ1j~/Ïktü¬§}ŽQJùVä–ß‚%Á­ÿh{î«z¯›xŠsªV d»-o0ìZ-'ã«G#ªª®¤¨ ãæäçœ@ÙÉÆŠñöÛ§MMvèâäaœ9ŽÜ—ü¢; Æ2ámФy_öKÙ^Ôö'º†ÜçÓzhtÐwØ1CRÜÚaÐ?‚ÙI[}ûê€<{Z¡ùÚ+‡¦çºZç[;KCÛýY½Ïk®ÞÿÁ÷!Á‘™Øl›©! ü’N‰IXjŽƒëõf0–‚ˆêt Ny5½pñä³ MºáôÐæÐÚ¡ËOGÖ^Š¥ÆIè˜3ÂX s˜h»UÛ`˜htàxWÂׇp­Æ 쨸›{3ýZ¤nBVq ŠòULÀMh6™C±:¡é¹®Ö9ÆÖÎÒÐvVïó"RÊ 8I4‘Â2ñŽ&Ùš‰#÷_­Ø9§øî Èä$ÜÂoÆ»'0ž,)~ŽfÔè,ÁF¢Ý‚æª,¤°ÖfŒh˜{‰Ú!“]é(Òõ¢Ow©ë6"[ÝM™(Ú0žu €‰¦3$%iôDH/ä¨%'þ-Œ¥Ÿa}~=lž÷Ê« 1¡ÙdÅꄦçºZç[;KCÛýY½Ï‹èÀ„<kOÄC¦ÕíŒ{’Ïqàn;îþ ÛÔ/’ÃàT3ž²jsäNê Æ^Á*…Ï Ÿ±¢öÐ0á'O/4û/ÃBÝB ½ÐŸ£Q£ǃº®¦…~Œ F¬„×%àßXÐí¤-¼9þÚ¨6ZÑ×r™óýšI‰ i(RORÆh6i¾6ÆÊ¡é¹®Ö9ÆÖÎÒÐvVïóšÅè³gx)±ÝMçÝãÝ{cC¡_îËÇW;*q·ÇSq|Üp4S? "£/‡ÝÌ9aD‰Nãyœò þ‘´×Ó(3:ámOx;ÅÌÂÕsù©2¬KÙŽÂo"kë—P䆦'¾½_«•ðºgJö`§WåvŽû'°uë Üw„–ÅÞÕ MþfÁ8Ù€ŒÊ'pNÿ ã¥sÂ5ß é²Áš@æP¬Nhz®«uޱµ³4´ÝŸÕû¼fá|Ô„ÎÉ〹—Ð_7cÊÿ1V¨¼{sV ¶ vÝúO!ÿt>•ê••—í¬E?íÙêž ŒM2ƒ‹sƒ¸{pdd  ÒÊ[AU~?�íîȲUè¡ù>œ3/PsìlÌgÄ̺Gu˜£Ë÷âqaxØÅÊ’â�ÍFàê5P×64=×Õ:ÇØÚYÚîÏê}^‘Ú• #í$Œ#âø{tÞ½E'ãߢÁ<ˆ7cIrºìµõ¨É Žú:šMCÞÚw#*¼êÑ»P¢¹¤Ê¯o~[‚Ûi,bÖ åæäi}ksÞwýNá)>#9I&]¢¼Ú‹W‹rêY{?© F­Ð|mŒ•CÓs]­sŒ­¥¡íþ¬ÞçEÜ8TÝh°Çp“Ûœ’ë0‹cäÒ{÷¼u³[“¯fœƒÖÊ/ ['CJú.({%OEFÅC8¨SÂfÐÉk4UUàšé]ñ>÷² שÓ˜€Y™‹íÞtaâŒË?Cº|ÒJ[0¦<#fx¤7a2d.ѹâ£¼Êø�ÍF s(V'4=×Õ:ÇØÚYÚîÏê}^<¦ñOèËšdîSŠÖ!…â»7÷øDÒ©©{Sìe»Àµ½úpîAOm ކ˜ñň;tŠïæ<dt:¸ž×èøY Nû£3”ò­È-¿ m§øŒ$%™ÖC|”W sVh¾6ÆÊ¡é¹®Ö9ÆÖÎÒÐvVïóÞéw®B÷×PP—,»õª2¶‹Ö!…Ív‘™µ¨±-O {ˆ•ÅÛµÈ÷·6ã'Ç1ÎNɱC_RŠ‹Ú€´­ Å9(©{Ža6uk a=TTáZÃ|ŠuàŠŠÁéÍ”­‡ø(¯2>@³ÈŠÕ MÏuµÎ1¶v–†¶û³zŸW¤šqRrj`&ŽD€Ív‘á]&¨vîƒòQç5õއ¸V’‹|õ#ïçgºÓ(c§äŒˆLbÈ><?øq¼¨Q`Ӿؒ#I„Á †CöK3–+øZù\45SQ Ð Qj èèõbâC³Hóµ1VMÏuµÎ1¶v–†¶û³zŸ—àŒßþê'¿ðéÈ0÷aXÄŒm6ÛE†­CÁúÐÊâ‘Êð zàß íìQ”ÖuÃÅ¢8Œ5…wj ø+ EÌá°áOC¶¦pô‰º{q³(¤‚ì T´¼b¹ûK+4_cåÐô\Wëckgih»?«÷yñð ÷àÁ©ÀÕ܃•”_z05µÀìœöOì°Ù.:ïÐvî2Ú† Ç0ƒµ½aD‚å:]#:ìnáóž6Aÿ NêÊxX߉‰Ë¢S\‹‘œDª߀ ®âTl‰…o ‡±I¡D³Ù—w½ÎÁ=Ü í‘JÞ²]_lh6i¾6ÆÊ¡é¹®Ö9ÆÖÎÒÐvVïóšFí^ÈdrdíÊÀ–"û°/UYö%ôˆÔ*‹Ív±qõ¡gprIåwþÝNf”1"1 cé^T4ÂÍO¡_{�©)Ù(>yùÔ9I&6ÇHB츭¬Åo)b¦6h+ÏÀðZ¼È´8¸`⎡v ôºf`מMì…ñš@Z¯æ{Ú®—¦ëI¶g-ì™/ »žx1‹:9µþÜW[޳¦qï×­šo¡¶ˆS(·Zï^âpÜÆaEζµ gJö`ç|+(#Ò»;¿‚#Ë´ 4mòµ}ððƒÐæ_ ,-—‰Í1¤&\͸°6jñe‘o©šcïaÓ–£ºím@æÓ ƬwPžY­í½ÿk ± Ù¤õÚ’ÍpfŽGd’íYF {æKî'~ðÎ|ê±ïpiˆ²2#&<NtpELMZ:ä˳°wQ[›qT‡V3ÎÇÜKÔîç`üûO´TgC–vÆ‘¸mz=ÚH™óÁÄæRîdüwüª9ˆ´ÍJ˜iS.w[P›¿ÕßÞl/rÓSCe2¹ÅåŒØ¡Ù¤õÚ’ÍpfŽGd’íYF {æKî'^LÃv÷¶ÈB³?…‘öÚ&Ä1rWëÝK£Ýèxéö`0VÂ,\=W‘Ÿ*ó ?U¶:0m{ŒK$³¢Î„QÚ z&6Ç•¥²L¹ÛGe†ï¶¡£^‰ÒÂ|äµáFY;KI sVh½6šïY8h»^š®'Ùže´°g¾4ìzâÅ ^ë¾AfÉ¿?d’¡€N›kQÆÞJY­w/±ðSp˜š Q’´t5êšÿ‡ˆøŒµ�ë†]Ðr—a´ÓVÈÜŽçhÔ¨„ù~êºf˜S¢mRŒµŽ·U:ô‰`¾Á°‹FÝY85¡s2d¿Ÿ{ ýu3mØ’š@Z¯-Ù gæxD&Ùže´°g¾4ìzâˆgO›þ9lt÷´hBÜ«øî%~=šýH% á3öãÛor°5÷+ä]C‘Äg0–ƒCźtŠ…ŸNñS¶£ðÛƒÈÚú%y‡¡ég9#vøw07M‚dè.à–l¡×0Y4¼å&ì 6äÞÒ ­×Fó= m×KÓõ$Û³ŒöÌ—†]O¢qÁt¶Z›8™ÐkíîIoÓb·l#²•Þ´DI‰B 3 Ži˜sÂX´;ãü�´»S ËV¡ktFðELà up̼@ͱ[°± ψ™dê. 8ãzU7 u ¸ÉíGNÉu˜‡Y ±¡Ù¤õÚ’ÍpfŽGd’íYF {æKî'^ðp[o¢hË'Þß1tÈ2Ê 5 ¶‰ÿÛWÈj½{ c֬ĿuÐÚ}•Œ>g|.Óyds&ÑRkÚq¢ü¾9yÚA_ iÞwý.ûeÊ$©º ð˜Ä?¡/fœÚ§D—‹•+‰ 1ˆh…Ök£ùž…ƒ¶ë¥éz’íYF {æKî'^L¬Ì–âŸÐX3®»N‘‹Í-áÏ-°ŒÅ–õ¶Zï^â˜zeæn¨-“ÞùçŸC.û ¥Æ·ìdœ±<<ðš^ÀNm‰Ã„°Qåbû|«>âŒË?Cº|ë3·¤ê.àãÎUèþ ¨owÀn½‡ªŒí¬Ï¸ÐlÒzmÉf83Ç#2Éö,£…=ó¥a×/xx-8{î œA¶†à¤«NÃàÇ6_­w/׎Ÿ/¨ 5½ƒÇ¬„\¾åõ/˜²4cðxoÖà¤ÁÀá1e¾‚ï‡B¾ž@<¯Ññ³œö9F=f(å[‘[~ ¦‘À…dê.©f\†”œ˜§ØK@lh6i½6šïY8h»^š®'Ùže´°g¾4ìzâ ïúW¡$v‡ú:šEHMduß=#™™±@³_ óû€ÏÁpôeBP!jêÚǰ Ó¬þÎH>’¥»€àŒßþê'¿ôD†¹죆$ÐlÒzmÉf83Ç#2Éö,£…=ó¥a×?xW74ù›…ß1…ÇñMVr_¡H#^ûÞÕ{÷Œ¤Çƒ·†ïP¶PÞÀcÆzûUà½÷3 œZ®ûò¬=Pä¦#%õ�´ý¬‘Cd¨ï.ÀÃ3>ŽIv�7h6i½¶d3œ™ã™d{–ÑžùÒ°ë‰ïaÓîƒL– e×°`•»`âÊ¡sŒÃRS ­Mk|µÞ=cu0õ géñÚkÜÃt¶ º×>q@* õ¼;7B–õ/´ Œ •÷‹”Öó2’êqF¼¡Ù¤õÚ’ÍpfŽGd’íYF {æKî'^·X—§…ÝkÏÎ;ãNá¿E¢Ù"«õî%˜ŒY[¡UŸ§¼ CGƨë‡ËH¦`Õ”AevÛˆ£e”‰¢…ª©ÏC¥Ò5#éaÎ8#š@Z¯-Ù gæxD&Ùže´°g¾4ìzâÑiR!s{ ,3ÄÊ%Îx6>Oßì“en”â‚õf1¶ÈÅ{6 £â!Ì!g¬�Ÿ®ÇoW|N9]L¡¯öklãž "žŒ¿ $[ŽOŠ ìdœ!.Ôw`Äš@Z¯-Ù gÚ®—¦ëI¶g-ì™/ »žx2 GÇu\à~i”tʆ<·õ–ñàC¨XÍw/!ðo (ÚT�e³Y0}Ç‚¼û-z´'qÔ@‘6#‰ éé»±µx>]2<ïÐs÷"ªÏ5c`fÎ댟8r­&âÆ‹dé.0 çÃÛx:,˜{ ýu³?`Åš@Z¯-Ù gæxD&Ùže´°g¾4ìzVìÇt»kÿZdòv-ò9“¿¦–ÁX<fúàzç0%ƒ‘�’¢»@¤ÖfÂ1¥ñroi…Ök£ùž…ƒ¶ë¥éz’íYF {æKîguÁîžÈð¶_p¨º# )é<<c½¸[¾ {´Ì™b¬ š'pú?Ò™ãV´jkÀqªÿ{ÿûÓÆ™÷ßü~Ò'·Ô•*!¤<¨´ŠREUx@”‰¶âŽÒF¾HÔª¶'$Q é’½hµ™(­ùnk²­¯6\$8->IKÒ’Ò 9iq·æ›X9²â6~} §)†y_3¶cÏŒÇÎûµ56ø˜Ï3cŽÏÌñŽö›¸7i¢Iæ(KdÂêR2Þv•Ÿœ‡ËåŠnçñIe1ŠªÏÁ3ÆÛ±Z3s#Ь±eZÙ‰Gb™v,׋Ç|mŒ'»°ö4€¯©ò‹±Ûj,ó$¤–¢ÑÛu‘è‰ä5¼ûqåì X žGŽÕô'æ oA…›tž/m–Âèd7uÒšÙW¯‡‘<VÝu]@àÖ§ØùÒÛp ñšÐš™fÍÌuÙâ5S<™v,׋Ç|mŒ'»°öô Î`¸÷+Øj*`-«Ä1ûeÜžà“BJBh÷z\h¨* ßÌÉÉ-A•í N —Í•ŒËÝ„+Š`µ} Ïðtd†ÄØm'ösi3ÒœÉWˆƒ#p_ú6A€`ÿŸ{;«Ïã6'žÓœ™f-ÓÎL<Ë´c¹^<ækc<é6‡‡—Îãê¨6ÓŸµÚÓ_ð7 ?^ÝQ»›ƒ3ÑWDkX€óµ—¤/·ç‘_ú./ý pQúÁf&£ ¯Y„Üv5a06!âÒf¤s¯. Å臣l£týæ¡°üÞ).D©õuT8úàÍ)Í™¹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“bÐþ+gqÂú2,9åpùµiä>µg$ÿ%Ô ß ×í†[±Ýl:ˆ¿—áö>@€KœÑšD„ÃðÈ|ùØßàBoAфɸ8çÛ§Ð=®èù‡ï›ã(z͉!žê¤93¯.ð†œ{a±”ÂÖ7&]«òš¤µÒì)xëá2ÏèölaæF YcË´†3Ä2íX®ùÚ‘æ1y¯®†ý(εHÿ_7 ¸êC|qÒ†‹LÆMÊï‚U:)å3þfAnÉßÐÅñ´´.K_GP^^‰òÚvŽoFÙ†ï¶Âj}[ä/+Ëv}ãÒO‰´fæÕfà±mCÎN'†ÃÁ-%ã£Ò+ ¸Í÷$?ÓÉWÍʬ±™¹Îâ1[¼fŠ'ÓŽåzñ˜¯ñeƒÎ}‘¹¿òwáhã%¸ý³á¶‡83…)®fkí¥ÿ[Øš~ưß¿b{Ðq»îð¿‡}ßAxÿ*F™©PÄà�ÚL9›ú"‚ý¸`;‚rë^TkDûíÇæz‚OÙÇ”« Èëž7 hk#¼óò¼œŒ—à•-aáÒfº0s#Ь±eZÙ‰Gb™v,׋Ç|mŒÇ@¡i {®â쉷P¶¿®Æ‚‹LÆM-0�ïƒÕO½|mø¸[n6Š_G]Ñ)ާ¥¤sÄß‹fÛ‡h¼tQ~íÆå+ý5Ý?®^¸‰é˜°ï^Æ9Ïtô‘V̾º€lþÞsøHøî‰ixl%È/=Ž Þ)>ÉÏ|fnš5¶Lk83ñH,ÓŽåzñ˜¯ñ¤ƒ¼Œï�z\ ¨)ËO ÝÔ3Ôâ]4íÈE^Õw|2Nñ…Ï‘aÉÿ3^ÝRˆ × ¸ÞF^΋(±÷#ý5s†Ëšþ"Vol¨1çL×”2eu(õlêÐåeO˜¹hÖØÌ\gñ˜-^3Å“iÇr½xÌׯxÒLœÁPÛ9Φž¹æàwÿ—¸¡DnÁ¾ÙЦÁ9`Þ‡¦·ÿ÷¬”Õ†îÀ±ïSxMuê £­ºŸ8[ár¹"›³•…ÛQÝü3ƘŒSª2iuÉÊlêò³bìÏ£=λà—Ú3s#Ь±eZÃÙlñš)žL;–ëÅc¾6Æc ÐCô67@hü6’»…üp_î„gT»¹¿²¸öˆ2U£]âý®G±ˆé®p¤k¡‰%§M6¼a#Ã1µ‰S¸ÕhÅK{[1$çLD)É Õ0‡{M»a±ì@}çÀòÊáùGû#>ך™f-ÓÎL<Ë´c¹^<ækc<FYú›žâW QPáÂýVìͳÀRr·ƒÚ<qÊÖÚ#Ê\‹÷ñÍ[›a‘¾Üä/¸•Í‚ µ×a¾‘Øó˜ô]‡Ó~‚`Gówßàì±ÿ@M3×U&­™}uØÙÔ—ÌcØy˜³©ëÀÌ@³Æfæ:‹Çlñš)žL;–ëÅc¾6Æc”Yxí¥ØÞô+DéßMµ8åž ¿ïs¼ »w6òk)ÊÖÚK#yòžØ„OqÉ'OØ#wK¿Š+žG3Hë#ÁµçUT;¾Zéú-mm?aÈtÃB½^B‹<Žw J­Vì.ÎÇs…'ÐÉåûHGæ\]@Äü@3vm>Z" Þ³ú/Ⱦ’OÆu`æF YcË´†3Ä2íX®ùÚqÄÑN¼÷þµÈHÓ]8r¤ Ó¡Qôj¸\iöÖ^š,ÞkÂËóÈ/ÞŽ-UpÝ÷µw#r,;a¿Í§"´“øßßµà÷cu÷o%ñwô÷ËÝØÓlñ[7 Døgt¯l“·›ñæþKx”ö�)óeÒê²yLÜnGCýÇèœ$㇣áúoÈ>¹‘—ʦ·xûLfÓC¼ý$»)Þþ“Ý´¯üd7-Å+?ÙÍlâŘ즥xå'»i)^ùÉnZŠW~²[fšÃÐ7Q ?pŠýÿ´á¯èžÖf,f¦ÖŽi-xíØ¼½ ƒRƒq~àÞ>õäåáC¾/°Ï~ œ¶žlmUå8zR€ ÏÆo;y¥;ÎD×2N£ðdsoÀ935•xβ"ãÛÅYLNýyŸ(Yµº�i-•F\*Ÿ]/3Æ—j¹FÔ›’Ùâe<úc¯ñ˜Å<ºÞAQõ?T=U]mWps( Ù±L­óýèzï#tËi÷ºŽ|€®é9LôžB‰àæ“Z‡a¸Ê¶ x·VëZÛQ¸ä×ÓIœ„§¡ »lß¡Ïí†;¼õ ól ¶–ÙñOùõO­8~ä2Ÿ’ÓÓɨÕ¢Bãð]ÿvA€ÍÑŽÞ{üîJ©4âŒh�š1¾TË5¢Þ”Ì/ãÑëxmŒÇ,0zù$öŸucBÙ†]¼‹¶sh3b\ªŸèI#‹CñVÁóáO½mFm÷ãèo­e ?õfF/Šðøö qÎ÷˜Í²M÷8†œžF&­. ÞAKEÌŒ–?ãXç&äOA®¿§•Êg×ËŒñ¥Z®õ¦d¶xþXÇkc<f‚ßUŽÕ¶áhôÁkê2µvLK|螢j8”Ý\ÑqóßœYšR4 wû “MX%%GÝgÐÐ}~¿íñò2ODIɨÕBxÔ^…—¬6tx†£çü"‚cýpîçÒfOC>ÖO+•Ï®—ãKµ\#êMÉlñ2ý±Ž×ÆxÌBJÆÛŽ£ò“óŠœî<>©,FQõ9xÆ´ù›ž©µc^£W!>÷„ònIwÛÚàYš]—hM!Œõ9PY˜þSmV—É–r’ˆ -ðÜ&dÔ긅ƒ‘.õ*\Úìi¥ÒˆKå³ëeÆøR-׈zS2[¼ŒG¬ãµ1³ÁcUw[ŸbçKoÃ5¤MÏL­óò»`•N:ùÄSo/£&ÜÍ’è Âcd7 ¤ÖVEòN@º9a=c2huü!g-껕KYÊëðÚ¢ 8‡8‘a²RiÄ¥òÙõ2c|©–kD½)™-^Æ£?ÖñÚ™…0ÚÝ€7kÎã¶F²©vÌÁ uugU ”«å$ʶF³g”É8=™8ç®7WÏP.= ¡žCôŒÉ ÕdA/šÊ6!¿ø5X­»QºEîáòŠ„›˜æÅ›´¤q¡qøGžVÑ�Ln"BÇãè½âKµ\#êMÉlñ&]žâœ“¥=žZÇ£…äcÒ÷ÚI¾¼9<ö/ßtM<jÙq¸sbW0Óø@¦ÖŽyÍŽ`ð÷Ø$jÞÆCú&¢¯‰Ö2ñž¼ÕpCªq×^¸ìß™¯›:‘®2hu(18„Þ 6Ô”—¡¬ò¯°·ßÂçLx*ªFÜD?zï®Õ7Hļ×îáð+#€+ûXÀÄO?áîšJ¤¶€ýopù#Mx½âS—»€ÑÎNô?áÎB':G#¿dD½)©÷çGg‡÷ ˜Î ¿£gyþ­ãU•—ä9'Ó/éX^½ˆÓkÕÎêa‘ZÇ£uLé¿vÔå­cÝù[°¾¸ÜÓ5žÑë¸pcža’Å»—qγ2ƒŠ¾ñô £&ú"/::WZ«ZÇcyÌøX~ð€è¿Œý›Š°ÿ»Oœgj혗¿.¯"’¶a餬+F.—6£õˆ®«,y­ÚÌ8fœHW´º@¢Æ²ÆË <Käï½eþ¯QS}fÕð•­‚õXÓ’ŒË¶÷PýÙ—qâŠn-'aÍ«08—g>ˆÒê÷ÕIÕö>ªKêW"êý ÃUaEõ“zÂT´“%yÎÉô‹g™U›zX¤üžÙ¨cJÿµ£.om5µø¬5Ná­-Bòí1]ãI8üU¹Y°¡¦ãу.¿§%Uyþ6T”ÂÉx×ft;YmE…Ž×„qäkî­hO·ø�˜Œ›Q¢‹&÷5Øw­ˆ“gd~Ç]=Ñu»›oLú)™su5Ë.ƒò,‘ënYÂÄèK|V½-<ã¾¥ -¾ÈDyªÏêdek$­gP]ø‚ô»Ï£ ¢¾`¤É¦W|êr×›À•›'·æ*âJ°–%wÎÉô‹G>ÇÔoUÄ!'†û°]c.+†EjÔ1¥ÿÚQ——8oý¬…éü³lFEËå9|t'áð×uŒ—=3$_ÏÍ\]oPg=½6R—©µc^þËìWѧJ¢úqw,øÔwLèš„ß÷.9 §aoî€Û?ËsˆžA™´º€Ü¨Ô”g‰ª¯Ë°8ƒ¡Ž÷¤²yÖÑã×oìn<+ûˆßhƒ÷ÑqìÏRÒ¶Ö†ð+†+蟺\éœüú<º¦…ÜÊ•×ΦºÎãk“$ã_;º1¥øcrÛP®hØCE—ãŠ1Éx’çœL¿xDÌÞ¿ßcó·Ð¸×†¾@ìÀÖ­ãÑ‚:¦ô_;êòâõÆZDpè;“o äíACÏCéÊZ¡k<O1üU×xüWàèRÎ%¯"R»|3O&NuÃñu6$ã’ÐCô6KmñÆoá“'l ùá¾Ü ϨvÃâ2¸vL*4É™˜o¢¤, pû ”åY“»åï¾…âMug·§˜Ó³%£V0f”gÉš¸Ðïèk|y9/ °¶÷bf¶5¢˜x"B£7ÑX¶9–?£¶ý.1_Þzŧ.WŠcj 3Ê}¯Jƥߚ™Â”N“c=‰z`jR}ãyU2.]S3“ÓËÉÖñ®YÞÎ9™~ñÈ7VšÑ~_1 R޾űME —NÔ:-¬“ñ×ÎÚåÍa´ïá6™¥ð8ÚïM«ÎO™®ñÈÉo»O}ÌýÿŽcE ‡¿êϪ<gu2q“S+«‡hqæp¯i7,–|¿Zˆ‚ î´b¯|.”œÁíhOTejíe¯ðlê¹Ò…Þ€¾‰ù•†“|÷ûàWÒæÚ'Ê ·º€Ôœôẳ1Ú«å|söÿ —Ay–$jĉ;pÕl“IE¨rÞZÕX—Ñ�Œ¿|.Ô¾�Ë–CpzãßDÕ+¾ØrÅPHý”/N2.]LXzðhD½)©÷']?Òu­´:W_ûZÇ›¨¼õœs2ýâ‘’ñ¸C,ÈÝÞ¨š´Miåóæ‘8¦ô\; ˧às½‹BË ØRå„7Áw¸®ñ<ÅðWÕç5 *O\@hAyTâ$ãÒq Ð H³ðÚK±½éWé<œÅ@S-N¹§ÂïûïÂîÕf&˜L­¢ìµàmc.v:ïGþ-5œ?B(9 w¼Û DY+³VGÀñðÇ<l)Ý ëîbä?÷gë|÷ ­mu#NJÖü¨/Ù·»(Äq Dfú5¢¸zsðwý %¹ÏÅíÂ,>ÁˆÑcÆ¿iCñ¼*1×Û†oLÒMý§[ªÅ«“ñ)ô:¿7¦›zØúÏ9™~ñHÇòâßaÿáGÅ0HióþÁø]ÔeZÇ£…ø1¥ïÚ‰[^èºê_Enœnòò±x<ü›AcÆã õâþDâá¯úÆó=œ½rBº$N2>ç†ó›ìè¦.Žvâ½÷¯E&Ç›î‘#]˜¢W¨HØ%Y™[;DYk[)¶ÚoIiˆDn8忌-ù/¨fË$z&dÔêAø¥°”œF÷òò“ò~4½Y‹öGLÇ“%çó˜ð8"CxòÞ@cÏ¯Š›3ÑíŽ #@õgõ¡ÚGè1<Ž}È˱ ¯ì zîÄÄ7‚;ÎOqQç¤W]®ü45f6`ùQÞ”.Ï üŠóß2Ïn1Kî..@Þ–W—_‡ã/[¹öµŽW]^rçœL¿x¤ï’©ILM({Þ<y>­ãѪ˜Ò|í¨Ë“êyâg8änòR"^Öx÷T±È[?œ ßsÊݧFá»þ%ìòlåösèp`­ÒºÆãw¡,¿»—®Çð÷ÇŸ"7Ÿ£ïí.Þ‚²¬˜ÀmCßD<iŸôÿAµmø+º§ßKF¦ÖŽÉÍcÒwNûi¶/ÐÞ;€IÕ5¢''ŒøÜÁù3&BØò7¡´ö«„]¤ˆ²W&­. wiÛ¹Ò«eÙ<†‡£wÑÕã]imÊFœèïÀñ²¥`üMÙT~V/+û˜‡¿ã}”ʼnie3&éU—'_µ™;_µ˜Œ'{ÎÉtç)zÞhÔ1¥ÿÚQ•'>@Çñ}qbPlFÞÃõãòDvä†oJÉu‘‡ÂcWcžÖ¯Ð5žUÉøê-{’ñy<t½ƒ¢ê¨æ«qµ]ÁÍ¡Àš7Á’‘©µcbøZ*c°æEC¤"ŽÃ{¥Mºà/¡w8(½žÆàËh»ÒQžCô,ʘÕð|Œ»lø¾oé¦Az;¿@õÖrØÿù“ôº®ãïó)ù:%݈St4¢˜Ü>Œé®.7N7õUÌÝM="„`péš1º›úèÜ%w¥¼§ëy£u<ZH>&}ÏÑäË3î\ô9°Õò*„î+OÃCã¸ÝTýí#Ñó@M×úYÕM=Ž,ꦎÐn\þ ¿Bƒ¸ÛÖ–pΆõÈàÚ1'ñQ;*^Ú[‡ÃÈ—†|„ÛΣ8à¢!RCWÍnë¸/}ñÎâžóMäå– òè[(nB›*D™"“V‰ç¤†‡ÜøH¼½ˆMw¡M·ì&××jrï³p…oΰ9\¸Öï6TW&ŠÿYmÅ݇ÔPöu·Áa¤øàpý€þ¥äÉ€‰ÒÔå.àÑ·m¸1s¶-ÞEÛ9–§2ñna!7NU\ÀP8ÈtLà¶¾sN¦_<O×óFëx´0¦4];ñË“otøÐírÀ&w·9àºÖx|¾qçà‚׎Í;VtˆÃN©M™M]¹‚L×úytí?¯Ì‘×ÂÿFûw#ÑÚÇc$q¼5¤ö‡ôÿ!ñö2jºÅ\—ë—¹µcR!÷‡ØžuOMyÑ­IžÀ­¬ƒÒIùx eÎéÐ}8Ë>ânôlÉ´Õ¦oàtÃuŒ¬c¨Ü~ÃXôf-­Mn訄Fp]xy«C/ °ÆY6jÕgu Þ‡Ôx÷ÿ�açŸqE7Ë6Ô¸î¨fàVV;êrånêñfà–¶ GÑ5¾:ñ•f$õþâõ.\ÚäcܲªWŒúó©[U^çœL¿xž®çÖñhauLé½vV—7ÿõ±S¾ ¬ŒEÚ,…ïÂåSß^ýùÔ(Ën4ìØ Û÷7£Ç\Úz¯âlu)Êì߇_ÿäú�GüôŒþ6T”ÂIùE‚ídµYÑMý 9+PT}F±´j+Z„}Ø®z¯ —=ʵד“©µcZâЗx»þ:Æ—ïPÉwÖîà›ÚWñšsð©=Cä «ö èú÷£³¾–pƒiÁ¡68p xѳ$ãVHðdžŠºÀmûNX,/ÃzâS¸º¢óôvÂõÙ{°¼€ û¿[þŽ4¢¨ÚG°ö’a)(ÉÏ\èêí“â“’¥.>;Q&%˜›°¿ãár;@¯øÔåJÉx›€ºó­ÑF£²1yž±Õõ¦¤Ú_øzß‚JûE¼Òö•�ëÖj8ä_ñbRñwPëxÕå%wÎÉô‹çézÞÈï™Íª˜Ò|í¨Ë¼}%–çQ`}Ÿ¹:ÑN‚{Ðåú'¬/Kí²tèxÃCYžøÐ…=ÏÅ;ÎêͲ£ ÷¢]~­%Uy‰–ZSm¹°fE2.ÏMƒ1gfºQ»±£Ú4@2µvL,�_S96,MnPº¹ÒIh)ú}Ól Ñz(ºåZþŒã×ý˜º†3òÇf÷ãVˆ²Wx–©qÓ]¨~¾µ]þ¸½ÌÄà�Úª¬ÂëÀÓ�\ÙÇ¢Þ<_ðWtþ}Oi1|CµjÛi¸£c õŠO]®ˆÙû÷ñ{ìu"÷,ÙkC_`õ` #êMI½¿9ø;?ÁékþåÄ+LJÒ]Âhô¥’ÖñªÊKòœ“éOò=o´ŽG ê˜Òí¨ËCWõ&ÔvÆŸ§GœÁP[5¶ ?-óÐ7žÇè>ý)ºGâkÅ6X>GuGJÆß¨íFâŽê¢”«¾7²"—'=ŽíCŠë?ÒC¥Ä² 6Ϻë¯S¦Ö޹IêpïW°ÕTÀZV‰cö˸-w¯$Z7¡Àcve%’qug–²·à±!—s¡ "þðü;í·¤æ’1 À•}ÌÀcû v­Ù. ýÎ~ؽ‘&¼^ñ©Ë Áÿõpýª^*jØ÷-ê ·Æ]'׈zSRïOî®Üƒÿ[ÐxIîš,¿vãò˜j¯²¼dÏ9™~ñˆŽ ã·ùØï½Æúÿ…Ák]iÔ1¥ÿÚQ•'÷ÎÈΡx7¢þø¶gà ]ã þ†¡ß‚Ëç×qì6nÆOuGJÆËŸ0ì6ä¶¡<+’qIh®ŠB–ÅIá$êíD¾E^‚¯¾µÖ—KB×NæZ¼{ç<ÓÑWDQó~øîË_¬sð»¯âZ̘$¢gWx¦)q!·€ü'ͽ¢h(Ñ�\Ù‡ÜQ~BºÖ›òøíÚåßÑ+>u¹ò>ã· w{c܀՟ןjò0­/Â’ÿg¼º¥®;p½¼œQbï‡ô °ŠÖñ*ËKöœ“é<äà„oc—yìFSå:úà^½l¢ÖñhASú¯UyáÞW†@ ÃUn[þ]ãñ_BðM´«üÊv³é þ"\†Ûû�˜¿…ºÆ3Þª×׺A%³®BUÇïÑ×ÚÇc¸Ð#xÚPS^kYêWWÍ‘Š ¯¡«æåð‰—x³°{%­&ãòß/b ð3l-ÈÙhƒG»k(Cqug™ü7s™Ô<p¸ ‰oe‹˜í°;:‰ªê³:YÙÇ‚Þ{8Ü5}Ï$zëVÆêŸº\)‰¹øwØøQÕw{0žz5#êMIµ¿…[°o¶FêhÞ‡¦·ÿ隺ǾO—ŸD*i¯ª¼$Ï9™~ñ$º±¢Ü6 ¤¾Sµ”®ü¾Ù¨cJÿµ£.ïwt¨G×tüë#l¶u»#íÊtç‰c´-È-ùºü+ãšå÷µ¤*OüMÛ·¡¦cxÕùzù¿CMÁ.8|+·Î´ŽÇ8‹ܹƒkœ ò\¿õßÁèÊ%—´L­Ó‡œx­¨Ÿµ*&i9‰²í5ê÷.{0–£ì$úqîØ^ü9ïT´Ü‰û€è™ÂÕžiêFÜ4< àÂP¼oÆE‡¿G}ñîåF  @Õ>fFÑÖèò[1äák]Cñ6|:M²´D]®Ô8žšBàFà¾ôEd‰&û9t¸GVÖ,ŽaD½)©÷Âhׇx?¼L<–øéEh¢'á„ZÇ«./¹sN¦_<ò•3hº5¤rà÷ £v?žÒ¿‡àëhÀû+cG «bJóµ£.OĬçS¹ ý‰¾£$ÿ®úRlsܑ΀]ãñ [ÓÏVs?tœÀn‡;üïaßwÞ¿ºœê[?óð·ïGž¥•ö¯qãö`$¦Á[¸Ñþ *·¼€ç^sbH‘ÀjqäÞ(G`=úAÜYã#Ûû¨.Ý»÷éÇgjí˜Vü¥ÍÆÑ]»UŠ/G""Z®.ðL[Õˆ =Àµ3tª’£ †:Pµ§µ'?B³ûqøo­ @õ>ä§B?àÌß;14¯81çÿÎS°§²'…¸'"wõŠ/¶\ù&¯£l£ô~ ËáâB”Z_G…£_µ\Ô#êMIµ¿Åûøæ­Í°HïÉï¯ll¨½÷ µÖñ®*/‰sN¦m<b¸¼á.±‰žÒá»pÝáójãÝï£HÇnóZXSz¯ÕåÍÁísü½óß‘‰CÃDÌ}SU娬•’3Å„ºzÄsÿA rNà}3›·dÁ׆»å) ¥º¿Žº¢SÆt›—‰¿£çT¼åþä¥ßN Sñ”^¶êóCîòò‹_ƒUž”;á¶\Ë7g’•©µcZâ£KR±w÷Âk–äb£Í³j""Z Wx–ɸåFéq¡…'xý€ÊDi… ­ëo½^ñ©Ë•Çoî…ÅR [ߘԴ”ÇçÖÂ埂·±>î$Uú×›šjâ\{^Eµã«•ž„ÒÖÖñ†ŒÑÔ:^¹¼§=çdÚÆ —·öxê‹÷š°ÃR zø£uýhAŽ)46dškG.oìþØ›SR’»Îe*õˆçI“¤- ϳ‹¼ªï z2%ÎÂï¾û±J”I iYå_ñ‰óã\§ZÇcœLüôî®ï4xj™Z; a,œ€1äªBAá>Ôž”‹uPšÿ<ròÊÑäãèF"¢äI"®.ðLJªQCÿ`r‰R,½âS—+ÏT½ 9;7Ô—’ñQé¿qc׿ÞÔäýÉOï›FÃõ˜õ5ãÿwAžY[ºî'ïÃãîÇàdâi´ŽW.ïiÏ9™¶ñ$yŽ…üp߸«J*µ®-È1)'dK–ÖÿŸäò”²%KxÖÊ“þþ¨šPLx–ˆ“^\‘o’µÝÄð¼t•îáFû׸ây”0^­ã1š\ÿ0Ÿ§‘ÙµcÓ×Q»a#*—gœÃ¨ç"ä¥Í¬{QYçÀÎŒMD´~\]€$É5JÕôo�fB2.m@ÑÖFxÃÝåd¼¯lÙò‘þ§Xòþî5íÆó¥'p¶ñT¾ú'äX¶ãoçÿŽ=réç9yûà¸ÿ;@ëxåò26CëúÑ‚“ñÄäòÌsÆ”7Ý…šmï¡châü]8÷ä#·øm­xBßDô—Ô´ŽÇHÉóy™[;f2ÚŽ·ÞlÃH¼‰'ÂÔ3í‰ÁiL%˜Å”ˆˆ$\]€$©4Jõo�fB2.›ƒ¿÷>¾„{b[ òKã‚טäöIäýµ—o‰<ÐÏÔü'X[ÿ íoíƒðÝ/ OPu‚<ÁWœ€µŽW.ɸ¾ä˜˜Œ'&—gÖd|Áó1ÊÂsc-`¼ë(6<WçPPú“íDY‚˜µŽÇ8Éóy™Z;æ">DÇ‘7Q-wKWͰ·´)fÚ[ZCsGî1'"Jˆ« P*Rý€™’ŒÇ!Î`¨í®ŽšãɸËZ©GyçÜ\X]ÝpÕ»¢]ëeãè®;cØlêLÆõ%ÇÄd<1¹<³&ã‹÷Îa_ý÷ø÷ÀUÔ½]ªYþ>9†í#¦¸Á§ä‡ù<L­ÓƒC¸Ñ, Z^~Õ,{Š™öÄÇèk<Œý?râ!""¢5¤Ò(Õ¿˜iɸ<÷ÂÜ—Îàhi,9åR£ruÍê_ojòþ¼ö7PÛ=MÆ7£®×Ÿã Þüè,Z]-øìÄl=fÜlêLÆõ%ÇÄd<1¹<³&ã§pÛ±/<“º¥°×G§1Ôå€ ¨WPÒ:ã$?ÌçidjíQ–K¥Qª0C’q1ˆ1ï?Ñ"¼‰Â\yU‚—a=ñœoøÌ4OÆCCm8\ß…ÑñNT?¿vï,ÄÀ´Õ½Ž|KžÔø}e®áè'Ô´ŽW.ɸ¾ä˜˜Œ'&—gÚd<,„ÀØc”ÃsCs&®«u<ÆJn˜ÏÓÈäÚ1¯ðtÿ—á°É]Ôíhîøü#NDD””T¥ú7�3!_ÀøõØdÉANþ^®Ü[š™|!„xmgýëM-²¿¼m¨¯|Ç.ÜZ51Òʚʫi¯\žy¡ÈòyýckE#bÎÝïãÜX‘i]?Zcʼd<„`0þ/èÏÍþѵ“½¹~´ï¾PÓ#ž' ¹Páˆ{ÝhO¶aíhm¹û†¹…ûðî;Û±©ôuì¬8‹Û ÖÈ$""¢ÕTÒÀ�¼æÂï¯POª¤p=‰Ò^:oèèÕåÊK„ùÐåø+*k¸ÒïG04…秸h’nê+üø¾Í™˜ã¹x÷2ÎyâuR×>^¹¼åsnôÚnNÄ$EAÜmkƒg6ÎI'Ñ#ž%âØMœ©Ü†\é=ùý•-þ™ÖñhAŽ)8ø/Ó\;ryƒ7oc,þ!¹qªâ†âÜÁÒ#žeâ#ô©Šôj‘Þ_Ù乌ë-²,x-›aQÅÝ,ÛPãì[õ�RõyZ…µ£1qȉ]–Qb»‰ é‚ ¹m(w aÞëÀA§¼n&­‡ª翈*ëœL4Aªø�ßí/¦ý—á—þØÑ�L´1èGÿ•³8a}Ùð±Ù‰Ë•Ÿ>ŸCEþ ÈÍ}Aú=óŒ_1 —57üžz³D'ŠŠþš‚úó©S•çwÁªŠci{5]â¶éTŸ×ÀJy³ðÚ·ã¹’ZœmuÁ%¯õ¼´µÝÀ`‚…µŽG kÅ”ŽkG]^�¾–JȽI¤÷ÕÛ (¬iÛ?«:öêϧNYނ׎ÍÏí@íÙ¯ÔÇÜõ ºåå?WÓ5  *a9¿öbkõ?¤·áŠw\×úÉ6¬…OÒœ=pGºE’ñû¸?DI Ýžˆˆˆž5ªFœ”•åcw RÓŒÏcò^\ ûQ~еÅUâ‹“6CŸ@Ç–+Á{ýlU%á'ª–‚2œ8ûz.}‹›æ3¾bmuÎ+ù.W3„²×PÝüsÜ'—ZÇ«*Ï uug±H[ËI”m?ŒfOünÄúÅ#/³ô&v9ï¯Þo‚!2­ãÑÂê˜Ò{í¨Ê[ðÀ¶q *íÔÇý+Ö­ÕpÈÿ¾âŤ¢¾õŒ'üo×ÒlÞJ %8èºÖOè:OÙqmT}\<gp¨ýaô•šÖñdÖŽÖf†­hWä.½$äÿÊ+È·$¾‹JDDD«©qýè½»þîŒh�®ìcƒÎ}‘d7Ž6^Z~z&ÎLaÊ€®­KÔåÎÃßu¥ùÏ#ÇR„ªO¸×ÞZŒ¨7%õþ¸?8ÓV1ïý {…›ÒOWÓ:^Uy³#ü=:Æ~Ù ¼‡ ôMD_«éˆÐøAxëô ùá÷/m1àú<nÒ*Ó:-¨cJÿµ¿óœ¾æWŸ‡ ¿àÔ´áQô¥’®ñ„¡G8Œ†žAÅ1—¶vØ/¦¡›úèu\èþ¡eí;t#Û°v4'}Yú{ðùG pº#ä±!_úr©3! %¦n&7~׈ j¡i {®â쉷P¶¿®Æ‚‹iNÆ£–b««ÂžÊ÷qöÊ/èý'~4á“ñ¯Ûñ«2éðÁ×QÂ\Á°uÆ—ù;Ðèò*b‘¶a/:ꊑ› ·£~ñÌá^Óîøcu3p̸Jš¯¹<×Gx³æKøÂÝý¥¶|HymH¯'ܰ×_B¼)ÓôˆgÉâ½&ìˆÛe>McÆM0t#Û°vô šM½Î./Æžp'šˆˆˆÔT¸$ªÏê$þ>¤†ûä�z\ ¨)ËO -ÝÔcEº­ŸGÝ΃4f|¶ÛÁlô·”ÔŸOª¼Dç\îk°8¡ÜñÑe9ÞŠŸÜn¸UÛÝ„íL­ãÑBâ˜ÒsíÈåuTþ 9ÏD‡jíh9yòÚH÷y«ËðdâÚ|�×O±ÇüøÆb'´ŒÐ5ÿר®l€s¹ +œŸT¡°¨Æ°¡Ù†µ£5Åbø9–|ïÞÒ-·Ç‰{á㉈ˆh=ÔÀäÆïÑ�|â>Ä µKãlê ½z7¦cö¿xÿù·¶èS@5#êMI½¿a\ø¡OxxîŽ"ÁüdšÇ«*Ï‚ý*ú±¸Ýý¸;Œ›tÈô‹G:–ß·âòH@½oéX¶óĽQ!Ó:-¬+&¯¹¼ ¯e/½Ç­q„b“ðÜí¨¶; —OÆG»qáò`LïÚôÍèào~¬¾A"<hܹ{]÷o!g­ãÉ6¬Eº“¼ˆâú« DOÖðÊ1hIøåMDDDjªF\’ãwh�ªözˆÞæßÂ'/eòÃ}¹žQcž^-Q—‚ßU~oÕ¶á(ºTO#äŸI½¿?05©ž©úI´ŽWU^h“ÿ£èíhGsÇ¿V-ݤ¤_<ÉK™üs³YSš¯HyR>êÁ¥Æc¨(ß?/%áŽ.øÂkó‹X-Ä=7õ‰'ÊT3úÇ'Ž^Ç©7kÑ|{Êx² kGc±³©/‡(ãlêDDDë¦jÄ%9~׈àÊ>¢ãyåq¯¢ Â…û­Ø›g¥ä nøZ]®”ÀµGå'ç= Îã“ÊbUŸƒ'Î:ÏFÔ›Òêý-"èÿ—Rr&œ†½¹cÕRRJZÇ«*o¹·£¹…ûðî;Û±©ôuì¬8‹ÛrÒ‡~ñÈÇR@ÝùVűlE‹°ÛK™ÖñhASú¯ØòÄàܗΠ¶â „–ëiNÆÍ4£¿ÄkïgÖŽÖæ}hÚõ*÷Tô�|Î#(ÉÏGŸŒ­›ºQšÜø]Õgu²²y èRloúUú;?‹¦Zœ ·fás¼ »wu'b½âS—+"82‚ǪÆÇ·>ÅΗކkhõ“G#êMI½?)¶Û_ LJÄrr·¢üÝ·P¼é/°î¬‚à§nÊòÂËJY^D‰ífxúÈrµC˜÷:pÐ9hp<Ò™uÿ>~Ýéü-4/ÿi½ÖñhASú¯„åÉs@õ_£öTÖÙP—ŽnꦚÑ_ Ü4ÇÚÑœôe=q ß4ü §;îa>œŒÿû…ïp/Ñ€'"""ZEÕˆKrü® @å>ÄÑN¼÷þ5ŒËÁLwáÈ‘.L‡FÑ+T@p¯^”K¯øž\n£Ý x³æ|ܧ»FÔ›’jâ œ»ra)i@ß„”€„ÜÊ]ðË çÁ¯0ç@k¯²¼ØÞŽ‘dü>îQbølê!ø¿þ®_GT½C†}ߢ®pkÜsL¦u<Zˆ)Ý×Γ˓{kÜDc:’qSÍè/1Á“úlÃÚ1HÈÝ€ ç@Ü‹†ˆˆˆVS5âVß]{µ#€+û˜ÃÐ7Qo ¢ E÷ôê§–+ŸÕV¼r#Ýn¿€MêÍ~îÃ&D{Õþ<°mÌÅNçýH£~)ü¡ä´ñK›Íþ [Ñ.ؽ3á—!·€üW^A¾%ãu· w{cFuVÇ”þkG.ïûö~)’Äï^ÆÙ¾qƒ¹Äd3ú›áI}¶aíh-x-›ã¯iÙ†gßšQ„ª—äj%ªÏêdeóxèzEÕÿP?1j»‚›C1³_Gé_l¹b ޲Òûy(,?„wŠ Qj}Žþ˜š#Œ¨7%õþ¦á±•b«ý–T£9Ï[ò_À†šÎÈ“ÓZÇ«.ODÈ߃Ï?j€Óý! ùù»P{áVܺ“锌_ü;ì?ü¨è"mžðšÜ‰hÔ1¥ÿÚ‘Ë‹¿¤žr³¤ç4ÕŒþ<©Ï6¬…»4TÂÞªøB‘¶¯„½Øþ¢iÃoü;kDDD´BÙˆKvµ#€+ûXÀè哨Ö e k,;¥W|êrÿÀs/,–RØúƤ†r�n¡.ÿ¼õpýý½FÔ›ÒªýÉ3knƒàü!lù›PZû¼†O˜–È"‚CßÂq5^‡e=ãššÂL’ H­ãÑ‚:¦ô_;rymu·ÛìgQWºV¡y¥ßzÕEÛQÝü3ÆâÔ¿ñ,“{ÍÄ?÷Ñ5<©Ï6¬­… ó”×FÕ÷†<gp¨ýaô=‰²—ìj%F4�Wö‘¨ ±´¼„˜ºÜxlÛ³Ó‰áp±”ŒJÿ5v,{"ëÙŸ@›ãŒF_+ioÂò¤¤hÈ} Gw!ß’ «k8ú5ýâ‘׿Œ›31OÁ3~ñô_;ry#ÃÑeòP‰²f ª’n3ÝE~:žŒ›`örUy&xRŸmX;zZHtJÑz¨qI®VbDpeRBa’%ÄÔ劘õ4 hk#¼á®ür2^‚W¶l„Å”ëŒ+…rãRã»(Í9V—ñ“gÉOÁÇîàz‹€ŠÂ<égÏ£Àú>;o‡Ýð'ãÉ'­2ùçf£Ž)ý׎ª¼Å;pìÐ;­¨Oq ·wã¹\Áøy ̶Îx’swÈ´Ž'Û°vˆˆˆÈ”Ô¸«•4üþ8 A#€+û0Ïb«Ëƒ¿÷>¾„{B“]‚üÒã¸à5f©°'‰ÝŸ|ïõ[‘+ýÌRP†ŸEƒýšáOÆÅñplÓóÒ{›P&´¢çÞ„”:Ê2hâÀ•òä¤õÔžýJ‘´ÊëŒW¢BhËàuÆÓí¨Ë[ÀDÏIìÄ¡º“NÖâ’|Xr6¢¬É‹`ô·”tÇߎcµ´.si“oUhKÇ:ãIÎÝ!Ó:žlÃÚ!"""SR5âF¯ãÂÇ1ÏÄÝ5õo�Šá}<H0–YNžÒ±„˜ºÜx‰Ž,„±þa0Δêú×›šjâ#\?V$%>Ï!¿L€«g�“á¤WÄBhÁøÄC‡¯ËÚÊ¿Âq¥þàmh¸ht7õ5Ö㓌›M=46dškguy  þ€&¡åV+Ê*ßÇÙki˜´O’pöòØÒ0›z²swÈ´Ž'Û°vˆˆˆÈ”T¸$»kª>«‹Px‰Öw~½âS—+?M=áÛÅøNyëFSå:úàž–~k…þõ¦¶zó˜ôuÁQ{µŽ+è÷Ï ¸g÷i覾B ÜBsÅ˰äæâÅœtŒ—Že¼uÆÿûÔn*ʸuÆý®ZÓ\;«Ë“×ÿ— „Ó°7wÀퟛhÊt'îìå·Ð^[”–uÆ“»C¦u<Ù†µ£‰nŸÇáýŸàºt±†ÅpøNžôe°nÏýè]"""Z/u£ôkTW6À©è¢ëü¤ …E5hŽÓ]Sÿ`†$ã‰Æ/oPRß¹ÜÕ_~ÏH ÷'NÁÛüò-/"÷EKzÆŒ‹AŒyÿ §m?Šs¥,/Ãzâ,:z¾Cûͱè/©éOâci)<¾@üåÍ䟛“y“q¹MÿÊò¤ã»åï¾…âMug·Ú¡*/ÑMHK‰aëz«ÊKrî™ÖñdÖŽï¢iG>JëþÆ“UxUº€-Eu8ÿiydLEŽye_ÄíjCDDDñ©qÁß0üXýÜE xиs öºî#6Ñ¿˜!ÉøÅ3hº5¤~²æ@Gí~8<¤Á×Ñ€÷;üᆴþõ¦¦Þ_tÂ4çG¨*Þ ýLž0íÎvü€KínÄK=´ŽWYžèïD}i,9/`KÕyx&b» ¯¦_<ò±l„ã¿ú=úÐãü�ÇÛ‡¤ŸÆ§u<Zc2m2.¹+–’ôÉÇ[^ë¾Ü¿<ààWŠ“mêÿ[Ø?(޹´õ´àøñËxhø¼²äæîiO¶aíha´åÏDÇø‚t 7a{N9Zqá­]¾óÜ‹ü¡ëlÀ‘ ƒqïÑjr#îþƒ@¿âèuœz³ÍqžXéß�Ì„d|;wð`ÕCÓ |΢{"Ò‹o¼û}E»˜ê_ojªý‰#èª ù–X¶B‹çqÂ$s‰Öñ®./„À°WξÊ=U¨;{žÑõ£ÑOÆŒEÓ_¢ýQüšÒ:-È1™6——6Û˜‹Îû‘d<ð#„’ÓÆÏ¦wÌø›* {­*ÏK­eÖŽä.$ÑåBn¹R2îr·¢~éB–Ít£îÃøc)ˆˆˆh5¹Wž`â“èß�Ì„düÉ"2 ÊOÆe"Bax®œE]e9*ëÎâŠÇ‹Þ®_ {2žðP´ÛzKÝ^T¤cÌøª'ãnôýó3Tlø3lž™èï©iä˜ÌÛM]^q [í·Nåd<ÿelÉÒ±Îx¼'ã}pTlÂF›ñúÜêOú—ZË6¬-,Ü‚½è=tÏH@ädüÅzô¼p¼¹5}—ó8a݉cÝ£ ""¢'‘qLÆ““t¹!?Ü7î.Ï­½©­½¿¥u¾ë°³¢Í°1ãO<çÄq “ü®”—hÌø زÿ"3hY)9&SOàzˆÞÏmœ?c"ä-Jk¿‚7ÁpS]ãIüZ¶Æ7ƒ³Ñ_RS}^ªòL°ÔZ¶aíh"ˆ!W=ê»F0ÞuÏo¶Ã»°€€ï"êvÀ’+ßQ{ .?Ÿ‹­—܈c2žœTËÕ¿ÞÔÔûóãê…›˜ŽiÑ/ÞmÃßZÿÛ°5žŸöœ“éO„üdüS8ï¨gS÷ÖŒUëx´ ÇdÞd| w¼þUsP¨ˆ¿£¿å)°®ñø¿Eƒ³_}ÌýXcbh]ã1ÁRkÙ†µ£yÖO×ITVœÀoìØ5åØ,"""Z¹gÞd<²Îxÿ˜Ý&½á§Dm½Ã˜¯S܃ö¶ïá‹üz ½âKµ\ýëMM½¿a¸¬¹á÷Ô›ÅÐ.ÂæLÆå^òC¸ÑÜ�¡ñ[øä§´r¯†Ë Ï1™ÖñhAŽ)8ø/Ó\;êò†ÑVUŽ£'B‚íä!”î8o´7‚®ñˆ3¾q6áS\òÉùÅüây”ðÕ5,µ–mX;Z Àû öËc¿õßÁhâ›XDDDCnÄ™7WîcÓ]ǰíØw .`þž{ò^Bqe5*Êâ.;¥W|©–kD½)©÷'%BÕ5øÄÙºÒÖÙ€ÊÂí¨nþcÏt2>‡{M»a±ä£øÕBT¸p {å|JÎàv0~#Sëx´ Ž)ý׎º¼a¸Ê¶ x·VëZÛQ¸#í}=ã‰Ìéð<ò‹·cKA\÷½pí݈ËNØoÇïY ký˜`©µlÃÚÑšÿ"ª¬GpRuí}T—îÝ;ˆðÝþ"lÚ~&çDDD ɸÌHÆgà±F“Ü8¡«æe<WvC¡?0ì<·;®^ñ¥Z®õ¦¤Þß F†ÇÕ½ Å)Üj´â¥½­ŠÓwXëxåòÌ™ŒÏÂk/Åö¦_¥ú™Å@S-N…×zž…Ïñ®ÔÆ4fü°Ô1¥ÿÚQ—7†ŸzãNŒ–ˆžñ,xíØ¼½ ƒ¢ˆùsxûÔOÒò}}ö[qãÔµ~L°ÔZ¶aíhÍïBY~1v¯ºƒ¶\Xd2NDD´.r#.3’qù©åaÔwù0ÐùŠ,Ñ™…ƒh;p<î²SzÅ—j¹FÔ›Òêý-"èÿ— „Ó°75âØÿeEusÿò$sJZÇ+—gÎd\ÊUG;ñÞû×"Ýõ§»päH¦C£è*Ž¿Ö:-¨cJÿµ³º¼˜s°¹n¿œǧk<¢]ï}„®q9íCבÐ5=‡‰ÞS(Ipžê –ZË6¬­Mô£÷n¼)Fˆˆˆ(r#îfÿÒ ½sð÷¶¬{ì¤ @å>Ä@?e¥÷^@áñ0:÷ot9-5æ[àŽ3gŒ^ñ¥Z®õ¦¤Þß·¿@Yž9¹[Qþî[(ÞôXwVÁg-y™ÖñÊ噵›úÐ7Q`‰ÓExÃ_Ñ=ʱ•Ï›GlLé¾vÔå™ã\²8to<~O½mFm‚Uš”Ÿ×‚ª<,µ–mX;†zxŽ«ñå ""¢x”¸dÇNÑ�\µP�cO˜Ýz‰^ñ¥Z®õ¦¤ÚŸ8ç®\XJÐ71/Õ§B¹ þù[h<ø†âdBZÇ+—·r(žµÛtzÄ1‡®wPTý•ñôòÖv7‡¬‹.Ñ:-Ä)׎ª<“œƒKć.ì)ª†CyÌ]Ñqóßq{ŠÈt­,µ–mX;zgáᅧ³'ÊP`É…Õ5ý=‰²—ìØI#€+ûXÀèÕ‹¸1ï¹Ð’ î¶µÁ3iAë_ªåQoJªý-x`Û˜‹Îû‘är) ü¡ä4Üq25­ãMXÞ:ÛtÚÆ³.Ï=ͺB#¸qùL(“°Å»h;ç‘®…ø´®-¨cJÿµ£*Ï$ç`»{i™°9øo|ÓC@]±t­,µ–mX;š““èq5 ªxƒtZ[¼¶/NC¸Èdœˆˆh½T¸$ÇNÑ�\ÙG~WyøõÚ[t<¬ô ùµR-W¯¸Qïo[)¶Úo!<*UN„ò_Æ–ü ]ÚlEòm:m㉬eÿÄmÃÑèu±šüs³QÇ”þkG]ž9ÎÁ¸3–«¶•úˆ%ÿ\KryË7Ä„b÷jìÍlÃÚÑØâ` ^˵ ÇR€Ò£gpÉ=‚ðjâ,&§þˆü=‘²—ìØIågõ²²)¡hPw^±$—«-Â>l¯>ƒÖå÷ÚpÙé­W|©–kD½)­Ú_è!z?·ApþŒ‰¶üM(­ý ^y]í8´ŽWYÞÓ´é´'’ŒGΫVœ¯Û…—¬'Ѳ|>}‰Ïª·£¨ú<á5»WÓº~´ Ž)ý×ΪòLpÖÕüÿ>_‡Ò—Ê ´¬ÔOëgÕ(*ªAs´>bé™ndÖŽæB {pålÊË¡ÁÕßX"“q""¢¤(qÉŽ4¢¸²³÷ïã÷Ø8äq¦{m\g| f‹W]^òm:mãÃå=ŸWŠ%À”fºQ›ŸÉOÆÓí¨Ëóãû67fbâY¼{ç<K]ÇÕôˆgøqäæÊ‚çc”…—³SGwí«†>7ÓÍlÃÚÑSh÷z\h¨yåßAm»©­—ºoìdbF4�Wö‚ÿëf´ßWŽ£”¶oqlS×_ƒzqÖ—‰£è¿yñÖªÑ:Þ„å­³M§_<AøPß«¬Ÿn}ŠÏmÉà¥ÍÒí¨Ë†Ëš~O½YÒ2TbÑ÷9v×÷`Z±_1àAãÎ<临™™ndÖŽ!ú–³©%AÕˆ½Ž 7Ç4öU4¢¸²)¡ˆ;îÕ‚Üí†Æ—j¹zÅ•ˆzÃh«kÀ·½}꥓n6¡ò/:Ü^ Ôé‡Öñ>¹¼µÛtzÆ#NÜ@}Ñ+(=t‚ðjßÙ|‹yeÍð…ûϯ¦u<ZPÇ”þkG]ž| 8¿ÜûFÞš!”½†êæŸ1§šuGCOý”@ àdí[(É9yåhòsFYžndÖŽä7Ý—á° Ò—¥Íÿ‚?ýG"""ŠOÕˆK°¤N¢±ŠªÏêdeRBqñï°ÿð£:‰ôþ þþë_ªåQoJêý%z*©Ør_E}׃åF¿üž–Ôå%·¶½LÛx"ÝÔ(Æ*‹\kP]^kYêÎþ€Ác™eZ×Ô1¥ÿÚQ—ÀýÁ±˜ïóÞϰW¸)ýt5=â¹ÿ@±\8Ákͪ+`µîEeÝY\œŽ‰q…®õc‚›Ù†µ£5q ·û'ßÑ+܇wßÙŽM¥¯cgÅYÜ^ãË’ˆˆˆÔT8ÿר®l€sùiU+œŸT¡0ÁXE#€+û»+ÿO„Æoá“ÿÞ‡üp_î„g4fŒo”^ñ¥Z®õ¦¤Þß0.Ú.àÖpL—å¨Ýí€Gþ÷°‚ £‘tXëx•å%»¶½LÛx"¸%ꂾZ×Ô1¥ÿÚQ—7Œ¯Ûñ«òüóÁ×QÂ\Á°¥ÍÊ<e^}ëG’æ›Ù†µ£1qȉ]–Qb»‰‰ôã¶¡Ü5„y¯ƒ OT"""RS5â‚¿-[\é¹{]÷û ͈àÊ>æp¯i7,–|¿Zˆ‚ î´bož–’3¸§ ±^ñ¥Z®õ¦¤Þßîxý«Ž%|¸ðñ LÈÿ=BwÝÞåUëx•å%»¶½LÛxž…d<ý׎º¼D½36`»ý—¸ë¹«?Ÿ:¹<S'ãIÒ:žlÃÚÑØ‚dž9{à¯NMÆï#àþ0î:¨DDDŸªg̸8úФßùÿþ8±êf· À•}ÌÂk/ÅöðÄF³hªÅ)÷Tø}Ÿã]ؽ«›ðzÅ—j¹FÔ›Rrû‹&nyÕ†<Ovm{™¶ñ< Éxú¯uyø(8ðCŸ¢Ë¼´yîŽF–µ‹Cx˜Œ?;X;Z›ý¶¢]Ò—ÇLøeÈ- ÿ•WoI¼þ­¦jÄ™z̸|c ï½-2ÛòtŽéÂth½B…!3B/Iµ\#êM)¹ý‰ù=¸¿¡u¼Êò’]Û^¦ü|êž…d<ý׎º¼?05)÷X?=âa2þì`íhNþCуÏ?j€Óý! ùù»P{áVÜuP‰ˆˆ(>U#ÎÔcÆç0ôÍAXb“6iÛðWtO¯žˆjå³ÚJµ\½âJÄlñ*ËKvm{™¶ñ<ÝÔÓ}í¤Zžñ0v°v´6zm7c»Ë%^z…ˆˆˆâS5âL=f|]ï ¨úФMÚÚ®àæbVd½âKµ\#êMÉlñªËKnm{™¶ñ< Éxú¯TËÓ#&ãÏÖŽÖ’ìFGDDDñ=©'Ž^Ç©7kÑ|{¥Ûò’'}6u á}¸ç¢{àÆå_0¡ dñ.ÚÎy`ĤOKR-WÿzS3[¼ªò’\Û^¦m<ëIÆE„‚s 7­ëG rL£ßw˜æÚIµ<=âyb2šC0dÄ9h¾úÉ6¬­ù/¡®î¬úî^ËI”m?·ŧnÄ%·æ³þ ÀH¢ôÄmÃÑè`jòÏôj¹zÅ•ˆÙâU•÷XTŸOYdñþ±µÒ²�ܧjá F_«i6ä˜ü®òð×Ü ºvR-Oxnö¯3„Ü ¨pòÝg¶úÉ6¬­ÍŽ`ð÷ÈLê+fàm<¡/¼(­ƒ²—ìšÏú7�#ÉxÝùVÈã×Ï×íÂKÖ“hY¾ÿ%>«ÞŽ¢êsðÄI¦ôŠ/Õrõ¯75³Å«*/Éy dúÅ#"èkAEÜ år`)<§{dÕŒßòÏÌFŽÉß&˜æÚIµ<]ã ÞAKÅfX¤÷ä÷U›ejœ}ðÕƒtTŸ×@ªåiO¶aíhÍßF—~¿eö¢£®¹)Œÿ ""zÖ(qÉ®ù¬0òÔòq8ù™ÇvMƒsáŸ,›éFm>ŸŒ¯ÅlñªÊKrž™~ñÈçX1 *?FërÒ*oç XKQíøJúw'¼“êsMëx´ Ç1͵“jyzÆ^2¹ öVå1wá+a/¶†ÇÙ·áŠw\uc(Ûë'Û°v´–¨KSîk°{¦£¿DDDDO¢jÄ%¹æ³ê³:YÙG>ÇÔ÷*Å Üú;ŸÛbÈòLKR-׈zS2[¼O*o­y dúÅ#¯ÖÓ‰S§À¨jÇR2{ê¯øÏG«“V™ÖñhASú¯TËÓ5žÐtž²ãZt]ý% žñÿ9}¥–íõ“mX;Zó_†`¿Š>·îå­wÇ‚q¿´‰ˆˆ(>e#.Ù5Ÿ•ŸÕ‹râÄ Ô½‚ÒC'  öÈ·XWÖ _lßa‰^ñ¥Z®õ¦d¶xÍO¤÷…ðæ18}‘¤T …Ô½@Bñ‹ý#´ùã÷½Ôº~´Sº¯TËÓ#ž.á�jœwž @\@hAYó˜øåsÔ· G_«e{ýdÖŽÖBÓ˜œ‰w’ˆˆˆÖOÙˆK¼æó=LÆ™U؈`ì>ÄÀ�®5 ¨./ƒµ¬ ugÀ`ÀØ'–©–kD½)™-^sÅ™±ÿ¹œ?¡²ã÷è{Q¡qøº¨.Þ ýN9\œŒËÒyí¤ZžñT>'÷ÊŒGß‹˜Ç¤¯ ŽêíÈÍÉ…ÕÅd<°vˆˆˆÈ”äFÜÊ¢xk>'~BdD0vbpîK_À&ìçÐgB­%zÅ—j¹FÔ›’Ùâ5c<Me…°:<‘›Nª$|Š«?Æ9Á†‹™žŒ§ñÚIµ<=âñ5•ã%ëç¸5)O ­LÂ-È-®†ýÜG.2Ϭ"""2%¹÷´OˆŒh�*÷!úá(Û(½—‡ÂòCx§¸¥Ö×QáèG NR¡W|©–kD½)™-^SÆzÏ¥3¨­Ø럗’pº|㑹BH°ä´æñh!6¦t_;©–§O<sõ\FcíÛ(·n‹&á5ptù¢=â:ãYµCDDD¦$7âžö ‘ À•}ü!ç^X,¥°õI R�n¡.ÿ¼õpýý½zÅ—j¹FÔ›’Ùâ5u<â,üîKR‚öª„\ÏŠd<ý×NªåéÏ"‚þŸq©ñ*ª´\g2žmX;Z Àû fy©ñð[ÿ˜Ù/‰ˆˆh-‘FÜÓ=!2¢¸²yy¦mÈÙéÄp8”¥„bTúogS_ƒÙâÍŒxä­WÇQQY3uep7õô_;©–gT<bÐþ+ÔVìGÝ™“즞%X;Zó_D•õNÊc^–·÷Q]ºvïŒt%=Àwû‹°iÿeø™œ%¤nÄ%÷„ȈàÊ>DÌzP´µÞy99¡(Á+[6²댯ÅlñfZ<bð!ú2x6õô_;©–gx<r‰¾/ p6õ¬ÀÚÑšß…²übì¶ZaUm{pÀ5€E&ãDDDë’¨·ž'DF4�Õû˜ƒ¿÷>¾„{b[ òKã‚טõ¨—¤Z®õ¦d¶xÍOd6u÷Ü ÆÅ»h;ۇ鿢uýhauLé½vR-OxÚÝÓÑWñq·­}Ó‹Ñ×jÙ^?Ù†µ£µ‰~ôÞ ¯ ¨šC0ÁØ"""Z퉸5žÑ�LezÅ—j¹FÔ›’Ùâ5W<¡pyOÜ<A–É?7›TcÒúÿ“ã±J›üßÄÛ˨ézôLÞ¬È6¬ƒ„Ü ¨pD&Ú ""¢'Z_#Î ÝÔ“§W|©–kD½)™-^sÅIÆëηÂåjÅùº]xÉz-Ëëì‰Ïª·£¨ú<c™ÚM=yZÿ2c<uug#Çø|J_*ƒÐ"Ÿ‘ãÞúY5ŠŠjÐìe2žX;Z ÞAKÅfX¤O>ùT›ejœ}ðãw+!""¢©4âRùìz™1¾TË5¢Þ”̯¹âÃå=g\òDg‡Ñ43IðL7jóùd<fŒgøqäæÊ‚çc”5ý“t£»öU>Ϭ-xlØXP {ëÒ]ËÈö•°[«ÿ!ý» W¼ãq/"""Z‘J#Έ ãKµ\#êMÉlñš7ž |ލïU¶!¸õ)v>·%î¬ã2­ãÑ‚yëøéèÏ¢ïsì®ïQÍ <hÜ™‡\Á·Çm¶×O¶aíh-ô�§ì¸6ª¾<<gp¨ýaô=I*8#€fŒ/Õr¨7%³Åkæxĉ¨/z¥‡N@>@í;;o± ¯¬¾`üÇ<ZÇ£3×ñÓÐ5q =õ;PPz�u‚€“µo¡$ÿyää•£ÉgÌ ³ÕO¶aíhLœôâJë8¿êÅð¼1p7Ú¿ÆÏ#Ž'""JB*8#€fŒ/Õr¨7%³ÅköxÄÀ�®5 ¨./ƒµ¬ ugÀ` ~u™ÖñhÁìuœ,Ýã§1x­Bu¬Ö½¨¬;‹kƒÓ {Ùf{ýdÖŽÖ¦»P³í=t Í@œ¿ çž|ä¿£oB蛈þ=I*8#€fŒ/Õr¨7%³ÅköxÄàÜ—¾€M ØÏ¡Ã=‚ÅôŽG f¯ãdé¼j„û26é˜ v4wükÍù§²½~² kGc+-,`¼ë(6<WçPâ°e ÆvÑj©4âŒh�š1¾TË5¢Þ”̯™ãýp”m”ÞËCaù!¼S\ˆRëë¨pô# !×:-˜¹ŽŸ†®ñˆS¸í؇¼ r ÷áÝw¶cSéëØYq·ôˆÈöúÉ6¬-Þ;‡}õßãßWQ_ô"6Ôtb\œÁPÛ1háÄmDDDë”J#Έ ãKµ\#êMÉlñš7ž?0äÜ ‹¥¶¾1„€[¨…Ë?oc=œCDOMëx´`Þ:~:zÆ#9±Ëò"Jl71rÛPî¼׃ÎÁ¸yE¶×O¶aíhmùV,…õ¸>:¡.á#4»3'""Z§TqF4�Í_ªåQoJf‹×¼ñÈK›mCÎN'†ÃÉ¥d|TúogSO™ã ¯Ò”³ÎáùðëH2~÷‡(álêYµ£‹c1õ&""zZ©4âŒh�š1¾TË5¢Þ”̯yã1ëi@ÑÖFxçåö¥œŒ—à•-aÙÀuÆSaêxf†­hìÞ™ðË[@þ+¯ ßò2×Ϭ"""2¥TqF4�Í_ªåQoJf‹×ÜñÌÁß{ _Â=1 ­ù¥ÇqÁ;•°ç¥ÖñhÁÜuœ<}ãò÷àóàt?FÈcC~þ.Ô^¸eØ<f«ŸlÃÚ!"""SJ¥gDÐŒñ¥Z®õ¦d¶xþXÇkc<ÏÖ™R*8#€fŒ/Õr¨7%³ÅËxôÇ:^ãy¶°v´€÷Á\ôÅ’yüÖ£BNDD´n©4âŒh�š1¾TË5¢Þ”Ì/ãÑëxmŒçÙÂÚÑšÿ"ª¬GpRæ_ÚÞGuéžÈä â|·¿›ö_†ŸÉ9QB©4âŒh�š1¾TË5¢Þ”Ì/ãÑëxmŒçÙÂÚÑšß…²übì¶ZaUm{pÀ5€E&ãDDDë"7âRÙôoŸÉlzˆ·Ÿd7#ÅÛ²›–R-/ÛãÑ‚Sª›–╟즥TËËöx² kGký轌¾ """½˜¹‘gÖØ2­alt¼©îOëxÍ̳Ññ˜í˜›-žlÃÚÑCh¾ë_Â.wQ·ŸC‡{A>'""Ò”™yf-ÓÆFÇ›êþ´Ž×lñÁl1ÙŽ¹ÙâÉ6¬­‰¿áúñ?Ã’cAî–Waµ¾†âü<» ˆ9‘VÌÜÈ3kl™Ö06:ÞT÷§u¼f‹Çf‹ÙèxÌvÌÍO¶aíhlÑçÀVË«º¬< ãvS5ö·€é8‘6ÌÜÈ3kl™Ö06:^y©nZŠW~²[¦1[ÌFÇ£<vO»i)^ùÉn”kGc ^;6ïtb8&ë‡(ÜÉÿž™ÂŸ’¥ÄÌ<³Æ–i c³Åk¦x2íX®ùÚOvaíiL ¸Ñ°c/lßß„ÛíŽl½Wq¶ºeöïïr}€#|JNDD”37Í[¦5œ™x$–iÇr½xÌׯx² kOcâCö<¿‹†r³ìh½Å臈ˆˆ(iòßS³2klf®³x̯™âÉ´c¹^<ækc<Ù…µ§¹Çè>ý)ºGüðûרÆá.ëDDDôtÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬=ˆ¡¢ÿ&"""}˜¹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“]X{DDD”‘ÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬="""ÊHfnš5¶Lk83ñH,ÓŽåzñ˜¯ñdÖe$37Í[¦5œ™x$–iÇr½xÌׯx² kOssð÷¶À&|ŠK¾)ˆòk÷U\ñ<â„mDDD2s#Ь±eZÙ‰Gb™v,׋Ç|mŒ'»°ö4¶x¯ ;,Ï#¿x;¶TÁuß ×Þȱì„ýv ú[DDD”*37Í[¦5œ™x$–iÇr½xÌׯx² kOc ^;6oo (b~àÞ>õf!"äûûì·8Ë:‘FÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬=­‰~t½÷ºÆå´{ ]G>@×ô&zO¡Dp³«:‘FÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬=-]Ä[χOLõ¶µÝ£¿EDDD©2s#Ь±™¹Îâ1[¼fŠ'ÓŽåzñ˜¯ñdÖžÆÄ‡.ì)ª†Ãå‚ky»ˆŽ›ÿF@Œþ¥ÌÌ@³Æ–i g&‰eÚ±\/óµ1žìÂÚÓÚèU‡ÏÁ=¡Äݶ6xf™iÅÌ@³Æ–i g&‰eÚ±\/óµ1žìÂÚÓšß«tRÊ'¦z{5]ÀtœˆˆHfnš563×Y<f‹×LñdÚ±\/óµ1žìÂÚÓšÿêêÎ*º¨K[ËI”m?ŒfÏ(“q"""˜¹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“]X{Z›ÁàïóÑKfàm<¡o"úšˆˆˆReæF YcË´†3Ä2íX®ùÚOvaíiÍßF—~¿eö¢£®¹\ÚŒˆˆH3fnš5¶Lk83ñH,ÓŽåzñ˜¯ñdÖžÖÏ} vÏtô—ˆˆˆ(Ufnš563×Y<f‹×LñdÚ±\/óµ1žìÂÚÓšÿ2ûUô¹Ýp/oý¸;äxq""" ™¹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“]X{Z McrF¹¬éÁÌ@³Æ–i g&‰eÚ±\/óµ1žìÂÚÓCh¾ë_Â.ìçÐáAʼnˆˆ4eæF YcË´†3Ä2íX®ùÚOvaíiMü ×ÿ– r·¼ «õ5çç¡ðØUøCÌȉˆˆ´bæF YcË´†3Ä2íX®ùÚOvaíilÑçÀVË«º¬< ãvS5ö·pÜ8‘FÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬=-xíØ¼Ó‰á˜¬[v¢,º´™83…)>%'""J‰™f-ÓÎL<Ë´c¹^<ækc<Ù…µ§11àFÃŽ½°}se6õÞ«8[]Š2û÷á×?¹>À>%'""J‰™f-ÓÎL<Ë´c¹^<ækc<Ù…µ§1ñ¡ {ž‹³ÎxÌfÙÑ„{‹ÑQÒä¿§feÖØÌ\gñ˜-^3Å“iÇr½xÌׯx² kOsÑ}úStøá÷¯±Â]Ö‰ˆˆè阹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“]X{:C!p¥q"""}™¹hÖØ2­áÌÄ#±L;–ëÅc¾6Æ“]X{DDD”‘ÌÜ4kl™Öpfâ‘X¦Ëõâ1_ãÉ.¬=£„æä êDDDOÍçóÁår-or#péßW®\‰þVúü×ýWÜØäMŽ=]”q˜)®xÆÇÇUñÅÆ+ÿÜHOŠÇhkcòÏ2•™®³ƒ<Pí?ÝçàZßÃòFÉa2n»ÎŽ'""zJr#PnøÅÛÌÐ\j˜ÆÛÒ™ôþ¯ÿõ¿âÆ$oF'ë±}ûö¸±ÊïíþçPPP7žC‡EË8rÒ/yËädÜl×ÏÁÄäïŒx±È›ü]CÉa2®µà´Tl†%Î šcÙ†güAN£NDDô4äÆgìßW¹¡*7XÓ-Q£9 f¥Dg³6œ%œéJ6%ŠéºÁ/QLG’¨%³];<×–èŸoq-xlØXP {ëJw yûJØ‹­Õÿþ݆+Þq®1NDDôâ=—ÿΚE¼Fs:ŸŠ/‰×x6sÃ96áLg²/QLç –x‰bº’D-™íÚá9˜X¼||*þt˜Œk-ô�§ì¸6ªî¾àùÿñŸ#ÑWDDDô´”OÇÍòT|Il£9ÝOÅ—Ä6žÍÞpŽM8ÓlÆ&Šé¾Á¢LÓ™$jÉl×ÏÁµÅÞàãSñ§Ãd\ RÞ%@ó‚òkq¡å³ïyLüò9êÛ†£¯‰ˆˆèi)ŸŽ›é©øe£Ù OÅ—(Ï™Ðp^J8Íl*E3Ü`Q&ŠéNµd¶k‡ç`bÊ||*þô˜Œka¼•Ïåà¹Ê¨ÿ´ÍcÒ×GõväæäÂêb2NDD¤¹1j¶§âK–Ífy*¾d©ñœ) 祄Ó,ÉæR¢h–,r‚h†$QKf»vx®m韊?=&ãšÀ×TŽ—¬ŸãÖä¼ôZ™„[[\ û¹ \d2NDDDDDDLÆ54‡QÏe4Ö¾rë¶h^G—“áõÅâ:ãDDDDDD$a2®¹Eý?ãRã1TT h¹ÎdœˆˆˆˆˆˆÔ˜ŒëH úÑÅÚŠý¨;s’ÝÔ‰ˆˆˆˆˆ(ŒÉ¸ÄYøû¾€ÀÙÔ‰ˆˆˆˆˆHÂd\ £7Ð¾ˆ'ˆ»m­è›^Œ¾&"""""¢g“q-ø]°æDÖÙK¼½Œš®Gà¨q""""""b2®ÿ%ÔÕ ¯ýç:_‡Ò—Ê ´´F^K[ëgÕ(*ªA³g”É8Q¶Ãÿx.ú‚ˆ(9LƵü ÃCá.x>FYÓ¯1I÷8ºk_å“q"""=ͺáºê¾0Ò"wîàAìh4ñwô÷›ño¿ˆ9w¾]ˆ¾6»i¸Ûo`4úÊ0ý轌¾ˆGļ×Ã.#æZÀè÷—qs&æ$[¼‹¶sÌF_f“];â8¼WÚàr]Bï°tìÅi Þ¸Œ¶+ýMǪH£7Ðvs"¦äá¯mð̦!žÀ�¼bo>Íã·þ;5ß]F`2®±EßçØ]߃iÅ )<hÜ™‡\ÁHÊNDDDš‘'Ju_‚½r;Ê IŒb…ào;ëÑ ÂÊvòJwœw^„迌ý›Š°ÿ»†&âØMœ©Ü†ÜUÃçÊáò›­UÂXŸ•…y1±J›ÕÃo³ø¿FMõ´F{:®Þš!X_ÕsN:Ç\å«ëEÞ6E×x¦ÜX‰e¶kg ]5»q¬ã>‚Ò÷Ê=ç›ÈË-AåÑ·P&ÜD ú[†I86MÃ_ýQe=‚“Êc%¼êÒ=°{g¤/œøn6í¿ ?“óua2®5q =õ;PPz�uÒ z²ö-”ä?œ¼r4ù ¿„‰ˆˆ²–|o—GK ` 7Ps JŒbɉÒ[È/~ V«5f; ×à\š’ñYxíÛñ\I-ζÆ$’m704Ykyáì›7 ¤Ö±*nëÄZϨu‘0ÿŸUo Ÿs–‚J´Ò¾““VuçW†Aº\­höa{õ9xÆ2õqÉ®leÍ”v$Žw¢fÃK(s $Þ‡³ì#¸®fåPØ¥­å$ʶNÏðW¿ eùÅØ½êXíÁ×�™Œ'ɸä.-ך!TWH'ç^TJѵÁiã/""¢¬#"4éC×Ù°</%àäïGƒ«¾;ßÀ~1Éø&~ú wM÷pò 9ßÄ.çýÕm…”`Dÿmâ œ»Þ„sx>úÆQ wÁøvT¼nêâ †:ÞC¡Å‚<ëÇèñ5^\Äìýûø=¶æo¡q¯ }L]±Çd×Îâ]4íÐõïÿFg} ,á^óµáÀKxdôI8;‚Áßc¯‡xA蛈¾6ЇnP²˜Œë!Ü]î26¹ë†Íÿ‚?Èe͈ˆˆžÞ<&ïõ UØ‹‹ü<…§ÐÚ3€Éå¬r¡´d˜fÏ+"4þ_Þú=C~øýKÛC ¸>ÇEÓuSŸÇxOÞj¸¡åXåÍ —ý;ã»©Ç ý޾Æ7—ó kÛq/`d‚ÿë/àúuDQ/~ û¾E]áVîLí}i¶kgÛ_ ,ς˟qüºsC×pFîŽÝìÆ„Ñ_/þ4º¼ªcîö¢£®8=Ã_Í6†= 0ך8…ÛŽ}Òµ¹…ûðî;Û±©ôuì¬8‹Û†~ieÅÁ¼–+5sžGAù'èôßMHîjkÆñ¼s¸×´;Ú…?v3á˜qù©äŽãÄ*mé3® îÀU³ Kªœ·0<ïHtŽIíÍ휙íÚ™ÂïCüxŒ±ÀÊõ!þæEÿh®—DcÆs_ƒÝ3ý%™m {`2®1qȉ]–Qb»‰‰ˆÛ†r×Px¶ÍƒÎAž¤DDDOEú›‚û’'¬[°Ézg¯x0¬h0§”P˜t<¯øè2ŽoÅOn7ܪí.ÆL×O=„Gíï㸫'&VióI?Mé¼ów¢¾dròö ¡ç¡:qÃ#3Ñz’዇ý‡ÕõâÀXF÷¾4Ûµ3Œ¶ªr=©œ LÀÉê×°Ã~ óÒÿüßƦM‡ñ?¶û¸ü—!د¢OyÌÝý¸;LONa¶1ìY€É¸Æ<6lÌÙ³<Þ)’ŒßGÀý!J8›:‘ä.ë7ÑÞø.J·£B8.Ï0¦u£9-K›™u<¯¼l”ÿ{|VÝH6í’kS¸ã¹ƒñõÓд=•”γ #Òe9ï 4öüªî.,ow\h0dž¡©)þgîK_À&'‰ö èòŽfxÛÒl×Î0\e[P¼;v‚2i;àÂà¢ÁÉxh“ÿ£þÚg—7}7ÒÌ6†= 0×ÚìϰíŠLï/ ¹ä¿ò ò-ì¾ADD¤518 _”U• 7³©›r<¯üÔÑœK®Åg®§’¢¿ÇËâ$eŠmwñÖÓýp”m w ¶„g´~[ró±ÇyWª™Le¶kg ?õÂ4K—‡¿æ Ç’âÝ»Qºeòö8qOº~ g¶1ìY€É¸æäîL=øü£8ÝòØŸ¿ µÒ1¾ˆˆˆèY±€€çSkK×ÒffÏ+ÇeÆ%×1ÙSÉõ˜sÃùç\tü¿eê;ˆ>ƒh;pí25 2Ûµ3ŠŸ¡khfùzÃè—»‡§a¨Äâ½&ì°¼ˆâú«\’#Ïèßv ÚGŒ¿fÍ6†= 0'""¢ 1Ißu8í§!ؾ@{¯r&u‰8‹É©?¢/Œ$%qÇóþŠß&g oÀ¯0ë’k‰˜ì©ä2ù¼»—£!ü¤ÞæpáZ¿‘eÚšÁÛ6äìtbXµ»y ;gðlêf»v†á²æ"'ïu×G"ûMc¨çïØ¹ÇøIc‡¿.‡(KÇ“èDcØ›DÐtsPd&ãDDD”ðµTF—5[Ú^@ᱫð§½Ï;³*Œ�ܧjáJ׺¼f]r-?¾os¯ªÇÅ»—q.]OÝB#¸.¼é&¬Ú¤s¯ÆŸa+刘hƮͧà^zZ¼gõ_ÿ|e?7Ûµ#%ão¼“§öHÇ|#¬ 7"ß/!7„ò4Ìè?ïCÓ®W!¸§¢oH߃Î#(ÉÏGE:žŒËcØcæt…Ü ¨p¤ñÆcæb2NDDD¦'>jGÅK{`ëX™A] >ÂmçÑôt×Tôµ ¢àù˜„-²Y Àé‰>I5R¢.ÀÒ–Ö%׉>•\¯j:1nxýpÛ¾Ë˰žø®®è,ï½p}ö¬/`ÃþïðH·¸¤Dul–þyLÜnGCýÇèœ$㇣aé nF2Ûµ#ƒå6¸Csð÷| kÞsȳ~ŒžáÆ%ã¡Ç¸ÿ ýN“Ή[ø¦áo8ÝqO:ädü¯ØßðÏôÜ„”ι–ŠÍñ—K´lC³þŒžÝßxLƉˆˆÈôBé×huEÚºkªÈ]ˆ‹QPù1Z•Kþ¸ÎA°–¢Úñ•ôïNx'N~¥dܤK®Å7Œ¶:çUuØ ¡ì5T7ÿŒ1£sé.T?_ˆÚ.Üó+<^»Êªxj©5ùfJmwA_³];Kɸüoy¨h°nD΋¹È-3(÷»PnÒÉÐÂÝæ *aoU+¾öbkõ?¤·áŠw|Õ÷4%ÆdœˆˆˆLOúo×_ÇøòÓ ©¡<yßÔ¾Š×œƒinüÉöNœ:ýFUH‰FÃhM×h³.¹–H�÷ÇbŽ¥ˆyïgØ+Ü”~j,9ñÈßåÄP“KÄž¿c§ý–NãÜŸ…dÜl׎”Œïy¶úVÖo_ª`e2ŽÐtž²ãZÌRƒ ž38Ôþ0úŠ’Ádœˆˆˆ2@�¾¦rl/éd…µt rsr`)ú}ÓéJvÕÄPÈd“IÉœ)—\Kd_7¶ãWE¬~ÿ|õ(Ì¢O+^žöII‘®‰Ó³ŒG˜çڙØï¸Ý¿À76}O"Îâ·ãÆ$ÈfNÆGo ­w¡å“ î¶µ¥qÕˆÌÆdœˆˆˆ2ƒ8ƒáÞ¯`«©€µ¬Çì—q{"sWXÖŸœÌ™qɵD߀íö_ŒŸpn¼w!ñÔq"f{ìŽ3|BÏN2n.‹úÆ¥ðìù§aoî€Û?«Ó1ŽÃÌɸ[Ü¥Ír^FM×#ãê(‹0'"""ó Àû@ñ¤*l¿õ߉éÞJ+¤dΔK®%2Œ‹‚?ô)b•6Ï]?&ƒéˆv:ÜUúBܽ¥„mø{Ôï†Ã§×ŒßLÆ·€Àí/P–gANîV”¿ûŠ7ýÖUpÜž2&Ù4u2~ uugUãÅ]-'Q¶ý0š=£LÆŸ“q"""2?ÿETYठ„×zŽltìÞ@|€ïöaÓþËð³E%štɵDþÀÔdœ'!7NU\ÀP:f=Àµ3tªê*ˆ¡ÎTí©DíÉÐì~¬SÂdÜpâ œ»ra)i@ŸÜëfiI3yž…ƒ_­1€†ÌœŒÏŽ`ð÷ØÞH3ð6‚Ð7}MÉ`2NDDDæ'5PË–Æ‹«¶=8àÀ"“ñ8̺äZ"ñÖ’_Úäu½[ôï.¬ZV*J\ˆ#k&ã†[ðÀ¶1;÷#çÀR2øBÉicæ-0õ“ñ4º¼Š9¤mØ‹Žºbäš5f“c2NDDDæ7ÑÞ»f{’kvf]r-p"´•ö ŠX¥í+Ö­ÕpÈÿ¾âŤžy±©!ÁÁ¡Í%èD„‚sL‚43-]3¥Øj¿…ðó_9Ï[ò_0n­ûà}ÜìB—ïЂéè)"]qnj羻'ñì ”“q"""Ê ¡qø® »ÜEÝ~¦zªkFf]r-‘9ø;?Áék~u""%é ‡.a4úRWf~*—Y‡d’9ŒÝˆÀÒIzˆÞÏmœ?c"ä-Jk¿‚7`žë%än@…sÀøóÔYú>Åœnw?îŽ×¾y@ 1'"""óÃõã†Ež |Ë«°Z_Cq~ ]…?Oˆ2ˆù–\[‹ˆP(Ñš6Ï´!™d®r›áKç­KðZ*6Kß{«yŽejœ}ð/­‡n„Ð4&gâ]Ÿò?7.µ]5væù,ÀdœˆˆˆLoÑçÀVË«º¬$¡qÜnªÆþö6þâJ4Û ññî›æ‰_‚ Ü–…ðøþƒ•'˜z0m2žaC2Šy“ñ  *aoUs¾öbkõ?¤·áŠwÜßÑ]û r _ƒµô]´û¹ääz1'"""Ó[ðÚ±y§Ã1­Nq؉²hò$ÎLaŠOÉä¥Í>‡kà¡zÂ%åæþ ÞÈøØ´ÆE{;âÅÞ†àn|ŸŽ+Ž›øÉxÂ!§þŠÿ|Ä$ü陸Éxè:OÙqmTÜ‚çcüÇŽD_Gœøû£±ï‚“ã(¾oÅà f¤×âà9¼ã¸Ÿ×g4&ãDDDdzbÀ†{aûþæÊXÅÞ«8[]Š2û÷á×?¹>À>%Wgã._ݽ5vÛp]ãfH椤Ț?ÆåÍ¢ïDZ¦JÆå¼ ›ÇàôEfT_5ä ô¿Ø?B›ßŒ™d¦0Y2.%à]ÂÔ8ï <ÀªÙüç1ñËç¨o޾6Îâ½&ì°¼ˆM?càúyØjàXsF•Iù`v™ò†–91'"""Óº°ç¹xÉ™z³ìhÂ=>’‰’’ñ¶ØÿùÓÊ Œ¸Û- ›¢«ú0Úþ7FÅÖ?¬_WuS%ã ï8ˆçrþ„ʎߣïEÉ“v9P]¼A:ïËáb2ž“%ã㨔¾ëž«ìÀxô­ˆyLúºà¨ÞŽÜœ\X]Æ'ãR:ŽàÔôÊP!q ^çaìÜó7´tö ¯» ‚µ¼)ºnLƉˆˆ(<F÷éOÑ=¯û²b ð‰Ì2Á‘<ΘVñ F†Ó<þõ‰ËJ‰=¼ ÇUôµÎ‚^4•Âêð`R~ú¨JÂ7 ¸úcœl¸Èd<f릀¯©/Y?Ç­Iy�‰2 · ·¸ösA¸˜Žd<ž9ø»þ†’\‹tN¾ÀI5“Ädœˆˆˆ2BfÍ NYEœ…¿ÿ*Ξ(CÅà§’¡Gð\:ƒÚŠ}°þy) w Ë7¹ñ´sŸT¬'!42[ŸÃ¨ç2kßF¹u[4 ¯£Ë¹)#}†LvÐÅà$~ãÍФ1'""""ZEDhr�=®T…ŸDË Ñ~ؾ8ž§’ò ÷%)A{UB ®3×È oÞÆØZurãTÅ ^Ñ‹úÆ¥Æc¨¨ÐrݼÉ8=&ãDDDDÙ,üT· N»”D §aoþ½÷&LûK úÑßuvAâµ£ù»›¸î®k¬ÅÁ¼&w½µ ôè\ZZÇ[ªÏÉ©?"¿”r‚Ö+Žã¨¨¬Ç™ºØM]3øZ*Q`‰7'Å (¬iIÛ:Úáë⊵ûQw椉º©S*˜Œe+yfæúW‘»*±Ø€’ºË¸gš5Æe‘å»êKä§Ð1ñ澊ºKwõ]c|•Ã\9[‡ò²ChpõÀ7„hX2¾€Ñï;àžKüZœéDYNš˜ŒkcÁÛÆ-¨´_P­ëíúJ€uk5ò¿¯x1©çy8zíîéè‹8Äqt•åàŦ¡è”ɘŒQ†’’·™™ðÓJ18© §QW a´ã]”T}nŸ?²&°8ƒ_8€Õ'P]üòÊšá[ž9ÍD?:ö¿†ª³×áóGÆžŠÁ_qáÍݨ>yŹù(kòF–{2Zh÷z\h¨yåßA­!ËJ­siºÿÏ!t˜biºl0ç'8}ͯ~ú-%é ‡.a4úRW~¬ñ޳jÛˆªŽßÒò„ž´Ådœˆˆˆ2Óâ]4íxo~Óƒo«^Æfû-Nð¦€[8 ç°º‹·8ìÄëÕ]˜=D`Å6ÛϘþ,­BneN «2Œy ;÷£ºk!7„¯ÃæYã©¡îúÖ ÙÔå¥éÔo…ËÕŠóu»ð’õ$Z–ŸØ~‰Ïª·£¨ú<c|2®¡P¿Iü—PWw6rŒÏסô¥2-ò99î­ŸU£¨¨Ížµfý§LÁdœˆˆˆ2ÄäoC¸Ý^¿ì-ÃëÛŽã›ÛC 0)Y£ö¼f¿‰Q¹×€Tgƒ7á¬Ù†ç—Ö0 ÀùÆ tM› W8‚ö·Þ„½ï·ho‡q öµ ¦pStm)Iº€7wÁ˜t|þÞØ„OqÉ7%í]zí¾Š+žGá§öúS.M7í0šçÂ?Y6ÓÚü£èâ“ñìü Ã#gØ‚çc”5ý“t£»öUÔt=b2ž˜ŒQÆYô9°Uî®ùÜŸÿ§ð§ü?á9éµeGî±·úŠÐtû3,Ê.®–íú–Öó^ÀxÇ)4xf¯ÒK3~Ç _PtÇ•Žiчè›^J6GÇÑOá1 ÷\¼×„–ç‘_¼[ ªàºï…kïF©þvÂ~;ý-£ás@}¯rön}ŠÏmà6:2¢ïsì®ïÁ´"ë4îÌC®à6è¦é‰É8ežUOÆßE«ç>~› òiQ¬Ð8|׿ŒÌNnÿ݃Ӫ:ÇîâŽiº9K ù¤ב™ß70¨šd.„±;w×^†J# ^;6oo (b~àÞ>õäy´C¾/°/ C"ĉ¨/z¥‡NHuójßÙ|‹Å\ãþI[âzêw  ô�ê¤ë÷dí[(É9yåhòñL6`2NDDD™iáì›7qÌ8éCô£ë½¢]ÀÇÐuätMÏa¢÷JÒôTR àZ“€êò2X˪Pwö‡˜›”uÄi ^k†P]«u/*ëÎâZÌ 5Ê\LƉˆˆ(C-"85ÍÙÔI‹CñVÁóª.ó‘m3j»G‹ˆèé1'""""Š!>taOQtméåí":nþÛàõÎWˆÁ¸/}[xÈÁ9t¸GÂ7£(‹‰³ð»/Ãa“޹`GsÇ¿àçǬÁdœˆˆˆˆ(ÖhêöŸ…{BÙ <ˆ»mmðÌŸ‹~8Ê6"''…å‡ðNq!J­¯£ÂÑŸ¶›¤3q ·û—cAná>¼ûÎvl*};+Îâ6‡'d&ãDDDDD±ü.XWuQ—·—Ó°¬Ôrî…ÅR [ßBá5äkáòOÁÛXçÐÑߣl"9±Ëò"Jl71rÛPî¼׃ÎAŽÏLƉˆˆˆˆbù¿FueœË]Ô[áü¤ …E5höŒœÉëŒoCÎN'†Ã;^JÆG¥ÿVpi³,µà±acÎ8‡çï#Éø}ܦmAÒ“q""""¢XÁß0üXîDÖxÞ‚½RBdì¨]³žmm„w^ÎÆåd¼¯lÙˆ£Ñß)ëÌþ [Ñ.ؽ3á—!·€üW^A¾%½3HLƉˆˆˆˆÖA½ŽSoÖ¢ùöT¡9ø{Ïá#áK¸'¦á±• ¿ô8.xÓ CDÈ߃Ï?j€Óý! ùù»P{áç ÈLƉˆˆˆˆˆˆ ÆdœˆˆˆˆˆˆÈ`LƉˆˆˆˆˆˆ Ædœˆˆˆˆh]D„ff¥§14v7"Ê.LƉˆˆˆˆÖcñ.šv¼‚7¿éÁ·U/c³ý89=-&ãDDDDDO"1ùÛn·×ã/{Ëðú¶ãøæöÆ\홈ž“q""""¢'Xô9°5'9Ïý ùzÊÿž“^[v4á{«ÑS`2NDDDDô$«žŒ¿‹VÏ}ü6ä:ßDôT˜Œ­ÇÂ-Ø7oâ˜q"Ò“q""""¢uYDpj𳩑&˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘Á˜ŒŒÉ8‘¡€ÿdƒ.û^����IEND®B`‚����������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDcreate.png�������������������������������������0000664�0000000�0000000�00000312350�15030617045�0024057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��·��¯���±–8A���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOT×úÿûÌoz£IBb>irÒnؘn`Ú 9 !Z3o45`l?€FÐF´© 9_ëÌ· žvÞU>XÇ–ycE**h…°:=>2/ÏX„âXA~½F^ƒ ìçg¯™f†˜™½÷ìµáz$«eÆXûÚk¯u]k]?Ö ‚ ‚ ‚ 4·AAA„æ!ã– ‚ ‚ ‚Ð<dÜAAAš‡Œ[‚ ‚ ‚ BóqKAAAh2n ‚ ‚ ‚ ÍCÆ-AAA¡yȸ%‚ ‚ ‚ 4·AAA„æ!ã– ‚ ‚ ‚Ð<dÜAAAš‡Œ[‚ ˆ5Ⱥuë$7‚ ‚ ž í„ b "Õ8%ã– ‚ ˆ•ÝO¦% i'k„hƒ%ÑFÄêAê3MsAA+!E_H滤¬H‘%"š‚ ‚P)úB2ß%íd@Š,A¡Ðœ@A„ÒHÑ’ù.i'kRd ‚…æ‚ ‚ ”FоÌwI;Y#"KD(4'A¡4Rô…d¾KÚÉY‚ B¡9 ‚ ¥‘¢/$ó]ÒNÖ¤È Í AA(}!™ï’v²F E– ˆPhN ‚ Bi¤è É|—´“5)²A„BsAAJ#E_H滤¬H‘%"š‚ ‚P)úB2ß%íd@Š,A¡Ðœ@A„ÒHÑ’ù.i'kRd ‚…æ‚ ‚ ”FоÌwI;Y#"KD(4'A¡4Rô…d¾KÚÉY‚ B¡9 ‚ ¥‘¢/$ó]ÒNÖ¤È Í AA(}!™ï’v²F E– ˆPhN ‚ Bi¤è É|—´“5)²A„BsAAJ#E_H滤¬H‘%"š‚ ‚P)úB2ß%íd@Š,A¡Ðœ@A„ÒHÑ’ù.i'kRd ‚…æ‚ ‚ ”FоÌwI;Y#"KD(4'A¡4Rô…d¾KÚÉY‚ B¡9 ‚ ¥YÔxÝa³Ùí·~Œ ÷}ã°ÛzðdÄ+¾Z$]ƒ´“5)²A„BsAAJ¦/¼ùÆô0ÜxŒq3c}î2¢ ]çÿܺ´p¢ãÅ‚›Œ®AÚÉ!|p¤fç„ ~‘úLÓœ@AÄJ,ê fœWp²©_4iƒï¼¼²Ì°} ÙG[àtÙP¿ß„î©€’Œ®AÚÉaÉàHÁÎ Aü"õ™¦9 ‚ ˆ•XÔÞÀõÃ?qýå¼i; »qtÌîØxí£³â{s˜lÿ'.8½þO$£kv²F©Ù9!‚_¤>Ó4'A±‹úB¸q+¸¯a¯ÿPíml5;0ãwÏ›¾CKð3É褬ÂGjvN‚à—%Ï´× Ç|¨‚ÍŽþñàüàC¿ý7ØŸ ë@sAA+±¨/xÓ[ÏÏwâ©«×*?ôÛºìSèc¶‡ø‰É_a:y ÃA}#]ƒ´“5BøàHÍÎ Aü²ô™öÀnü†ŸáÌÂp'j þæÿìºu‘wâI AAk‹0}A˜@oýgÈÔ1½Blé{`î€ ŒÂÑr•E»Pl¸ Wp7=]ƒ´“5BøàHÍÎ Aü²ä™žyŒ†“×àòÇà‹ÏÑZ¶Éÿ9]ö—¸á| {ý0tûÿ™æ‚ ‚ VbQ_0õÇ|ð :`³90è™÷"]DúPB)b%– ŽìœÁ/‘ϴຊÓׇ‚IäÄÈnBŽ~xí/ïOÞÅé 1'þHsAA+±¨/ÌaòŽ ‡¿ýV«5Fûß6áÎ$Ó4’Ó5H;Y#DËBŠ,A¬."Ÿé0ãVDóÞ ÿgt[ÍpÎMÞç-øº%ðš‚ ‚X‰E}åó9Œ âkö^̶á0Úɸ%V"|pÌ»_Æ@ª[�Aü²ä™~óæÏÍèz:€ÞkÇÍNmu¹¨î ¼£xh2áæ0ÅáA‹ú3n+ñ^îèõúm'ò·|IÆ-±2áƒ#5nAðËÒgzžÞgnðÿÛºuï¢ÐÜàØãgÔUî…¾ø4Z]SþOÓœ@AÄJ,ê á•X¢ã…óÂ?ɸ%V&|p¤Æ-€ ~‰þL ðyžÁaû7ƒ“ u°£AsAA+±¨/˜ê>‡/çóxDCpÁúÙW覄RÄJ„ŽÔ¸Á/Kžé©?áz|á/8ÿ˜ôÿHsAA+ª//›±wËaXºà™¯ÎàgÞÚŒ»ðNq3^ÿ)]ƒ´“5BøàH[�Aü²ä™žü†ÃçÑ5L!п­‚áΈÿã4'A±aú‚0‚®ê\ Òuº äî ¨e¥û?V¡A$]ƒ´“5BøàH[�Aü²ä™žlGù†°„¨-åídÜA‘ú‚àéA}ñæ€Út›Q\Ïr}?(’Œ®AÚÉaÉÀJ[�Aü²ä™ÛŠ÷r±3j˜B°å磒Œ[‚ ‚ â$ª¾ LÁmkECíi §QÛÐ ›{jÉ¡[2ºi'k„%ƒ#nAðË’gzò.N_xŒ@ Bt朜&ã– ‚ ˆ8‘¢/$ó]ÒNÖчÒnAðË’gzª5_¶c4rÛt<·Éîqÿ+š‚ ‚X‰%ú;µí¹‹fkšÛmèŸ þÃR’Ñ5H;Y#Ä ºÁ/K›!4ï-@…åW¸<áE€ïK8ÚLпSŠæ—£9 ‚ ˆ•Ó|ÏÐvôÃðƒµô=0÷NDÍ”Œ®AÚÉ!|p˜yõ KF‘ƒ÷ÃàÌÒá•Ìà"‚_–>Ó³ë:…l[l6 c¾TX~ÒØâ³N‡m '»4'A±‹úÂ,FÛ`#Ó)ÒòPbøV‰¡¾ÅÛ IlCIF× íd>8æ0Ùy§/7F”ú¸ˆªí»Põ½ÍNŒ‡$š"E– VQŸia½õŸ!Óoà†¶ È,n@¯g6øAš‚ ‚X™E}Á §9ë6Dóóéà{ öTƒï¢”(MF× íd>8XÛÃØàWZcµ·]݉1:¥!ˆUIìgz^÷¿ÑÚP ƒÁ�Cí%´Ú†àØP¥9 ‚ ˆ•XÔ¼é­CnE;&ƒ¯gž6boæÑà=‚öÑÅ ôy’Ñ5H;Y#„Ž•NnÙû¸x¬×)¾Ž V%ÑŸéŒ÷ÛÐÞÜkÓMt;‡—µóМ@AÄJ„é ÂMèp³“[ѸíoƱâƒ0ÝBx¶�É褬ÂÇ 1·oÆÅwÇ‹Jaº"K«‹¥Ï´ÎË%.ÉCAM'†£¸4'A±‹ú‚�ßÄ^GÑ)„ט ‡œ']ƒ´“5BøàÛ¿^àU´Áõêþzó­¥›¾Ë‚§ÁäR¤È*“+5jjµP„—Í(^/¾Ÿ–‡RãY/®@mãEœ).Du°üO(‘ß'‚ ‚ˆdQ_˜Ãä¯°ïø©@ØÓB;…ãû¾ÂÉ¥•ö“Ñ5H;Y#„sû%¶äï dC]h;‘¿åK´ONÂi­FÉÑ&8ƒ>‰¤È*ïr¥þIƒçþEömÎiÆÝVŽBÀÚO[à×áùUùî±8k„Ã»ì ‚ ‚PŸE}a™œ?‹ö·D„Ž×ÄZK3±.½­Ãs«$¼Ë•ú' žû·¤oozP›{4¸¸ˆÆme>òõ!+ýï0Ú©Bá]öZƒÉ“5jÔ¨Q[-�ËùÓˆK]a³ÙÄöÝí¨­<€£ 1LnÉD"„S=ÿ¿\n¸ÝíÅx Œï5Æ=‹¡ÝÉ .bex—+õO<÷oißøÜ÷ñC“c‚hÜ–g#Kæîç²%y bCòL«]Ö¼_õO<÷d' Þû—,Ë_×4^¶‰÷r¾ÂÃIÊ–L$@øàˆsŠ?þ–bn…w¹Rÿ¤Ásÿ¤öwÙk ’gêXí²æýú¨Òà¹$;iðÞ¿dYöº„A4ïÍÀºô24»g‚o.’ŒLV§‰%„ŽX1·¡m>þ6àÿ¾Z8µá]®Ô?iðÜ¿%}›y÷«(g´Â8ÜÉSXˆ É3u¬vYó~}Ô?iðÜ?’4xï_²,¹.ßúmwÐlµ¢©õ>œƒn¼÷"Ú™[22YR$–>8–‰¹ m!ÁÝì5!?¼Ë•ú' žû·¤o“wP¹å£¥]ùù¨l ~hÞe¯5Hž©cµËš÷ë£þIƒçþ‘ì¤Á{ÿ’%캼q¹x3tâ{ì}Kÿ5]­MãvAÔ’j‹,sÚæãoE¿OÈïr¥þIƒçþ-éÛd;Ê7D›;2PNÆ­â<SÇj—5ï×Gý“Ïý#ÙIƒ÷þ%Ëâuùð²¹ë×é–[ã7ÇQ\võ5(Þf@÷ÔRó6™hJŠ4(“'jß"ÝF¢»0x—½V¡1- ê_ò,éÛÔctü«/|ƒëi'Î2â^0kz(¼Ë^k<SÇj—5ï×Gý“Ïý#ÙIƒ÷þ%Ëâuyá4çC7Ÿ<jò.N_`¥gðÜZƒïœò„@iJŠ4(“gIßRà@¬ ïr¥þIƒçþ-éÛä}X.ýLÏ?ß~A}ɇ(nZ2/ð.{­AòL«]Ö¼_õO<÷d' Þû—,‹×%àMor+Úá/08•Ÿ…ôìtrË<÷/¼o©q V†Æ´4¨ɳ¤o1Ý’3QÚê&ãVaHž©cµËš÷ë£þIƒçþ‘ì¤Á{ÿ’%üº¦á&û+Lïx'úÊ‹èvOÿ=œdd¢))Ò Lžð¾¥Æ-€XÓÒ þ%Ï’¾Mþþc0 !Íóu»l…Õ‰Ø<SÇj—5ï×Gý“Ïý#ÙIƒ÷þ%‹”ëJ滚’" Êä ï[j܈•¡1- ê_ò,é›o㯽ï·¡½¹ Ö¦Vt:Ü Iå"á]öZƒä™:V»¬y¿>êŸ4xîÉN¼÷/Y®Ë÷ö›Í¸i 6ßœ=ƒðȨkhJŠ4(“giß”w V†Æ´4¨ɳ¤oÂzÍ{.¾Ïþ-ÐÞBVi#œQ,\Þe¯5Hž©cµËš÷ë£þIƒçþ‘ì¤Á{ÿ’eñºÞÀeÙÈ÷£ûÇî¹ð§ÿõ[È1ÜÇd7™hJŠ4(“'¼ofþzWQ‘ðêþš!E6UИ–õ/y"û&¸,ؾ>ùågPßh…Õ*6Ë?q\Ÿ‹½”PJqHž©cµËš÷ë£þIƒçþ‘ì¤Á{ÿ’eñºf1Ú~ïd—ãÛË&”î:‡}]¸r庮ü€ÎɹàçIF&š’" Êä ïÛ&Û¿Ä–üÐëõ!m'ò·|‰öÉI8­Õ(9Ú´pbÃ»ìµ iiPÿ’'²oÂð 8z'ª‚ð²§è·ÂÆ'Þøßç]öZƒä™:V»¬y¿>êŸ4xîÉN¼÷/Y®ËûßlÁsažÞñõÍg¢~á…Ëb R@<ÂsÿÂûÆŒÛÃØ ¾ÇÞk£}b­¥™X—^ŽÖ`}ËðïrÁ»\©Ò๑}<=h8t æ¶û‹¥€ºÆ·å0µßëj„¥ó•ÿó¼Ë^k<SÇj—5ï×Gý“Ïý#ÙIƒ÷þ%ËâuÍb¬û+ä¥éüï…µõ%h~)OM}MI1™ L%<÷/¼o¦zþ…¹Üp»#Ú‹ñ@ßkŒ{ï²×*4¦¥AýKž%}‹Y (´e ¼}Äÿqöš’gêXí²æýú¨Òà¹$;iðÞ¿dY¼®˜ÛЦیâ˱ôÜ69™hJŠÉ\`*á¹á}£˜[^ 1- ê_ò,é›Ð+e%8V (²™`u—y—½Ö y¦ŽÕ.kÞ¯ú' žûG²“ïýK–°ëò¹ñ›íf‚/W"™hJŠ4(“'¼o+ÅÜÊÐM¬ iiPÿ’gißÞ`b|jIâ¨Xð.{­AòL«]Ö¼_õO<÷d' Þû—,+_×$=‹¢€$#MI‘eò„÷m…˜[2nSïr¥þIƒçþIíï²×$ÏÔ±ÚeÍûõQÿ¤ÁsÿHvÒà½Éz]‚ç®Ýq¸¶¹›°«Á©7™hJŠ4(“'¼oÑbn‡ð´ËŒC'ïbX¦behLKƒú—<RûÆ»ìµÉ“ š¥AÏbòн•Æj{‹×#æv¡½ ½é zÙØû‰¢))&s©„çþ…÷m“¸Ôõp1+ª?êE”ü­T¶leÄÊ\W7Ú™‡Æ®¼< ¹à},ÑX_½ÐØ“Æj}6¯kc]쨾 Wh2[·ÖýGaí{.þüãdÜòÏý ïÛ2nÉ!åB ÿ>!$×Õ Ï÷WjßhìÊ ÉSe„)¸m-0Yâ´:XÚñÅμ%ë‰0 w÷e ßàºs{m»…›ö—Xª©©=i¬Ög#üºf0þä?ô—f™gަŸáˆôIIF&š’" Êä ï›hÜÞù ûŽŸ Ï„j¼€ë1&LÞe¯U¸ëtšo»ƒ/â L ¬ECë¿áÙe#ÑΜ84'È ÉSE„ ôš÷ ]¼ëtÈݹùY‘¾Ë‚§Qªðïc‰«þ w¡µçuðE fhmK`”‘¹§õئۀŒÜ­ÈÊ,…uÀëîwÅqZ€Ú^OðSü@cO«uXr]¾1ôÛî ÙjESë}8G¼1“Y&#MI‘eò„÷M€ob¯X³y—½VI©\…—xx¾ÙKŠg§Ao ~h”@Ò²÷àó϶bSþÇ((¾ˆ^ÏlðCr"`ÚÖŠÛÃñüî9x?ƳH;[ø ==/cNœJÂós#µo<_›!yªGÀ€x¹Õ·Ð?_ß]x WÓQìoReîïc‰«þ¹›Pœ§B7ú#Ú©r=Šã]#efÖQ‹Í[ëÑ/˜é»„Ok€å´÷9/`Oí#(±êJÆž4Vë:v]ÞǸ\¼9<î6ýcÔtýu®MF&š’"ï7çþ…÷Mœ$_½ÂÄ’QäÅàýß0HunSF*åê_$×oCåÅaµZCÚ5tô¯°sDpY°]TóŒ÷1æX›EVff°ôKR…‘û8_òÒD™0¹,¶"XÝñ8`ùD=å0ôGN†+'§"Ûy8Äq-¸[P¶)e7ž¥Daåù¹‘Ú7ž¯M‹<ÕcÖnÄ»ëvÁ2^yQ´ Ð`ãÒýs9xK\õÏm…^ìëSì–À°Ün´yí£ÌŒAûá“hŸœÆXw ò8›L^<CýS‡Åëòáes Ö³’Ü2¿9Žâ²³h¬¯Añ6ºÉ-™?xî_xßXB©‹8}¹1Âȹˆªí»Põ½ÍNŒ‡Äñ.{­’J¹ú Óí .™;fá‹3¶,R ·ðؾ’¸ÐNÁQ»ëó*q±1tLŠ­©ýa±±[ë>däîˆH1ÏÚXû§É¸ AjßhN’§Ì$n1ãDýö`°MßðÀi9Œ¼Œ ÓÉ­ìpÕ?Ѹý¤²±·w¼î8OT2nç\W±/sƒ_fám3*;^?Å\ÝÛ(PÿÔañº¼pšó¡Ëù 'gÉ»8}á±h•Ì๵ß9½ÁÏ-’ŒL4%E”ÉÞ·eJ-´·]ݹPP™½GÈOJåê{‰.Ã!˜ºúC2Ô‰­¯µWã\¸§~ƒ1g;jUÀg3 ãý÷‘¡{íR\Yzø½ØnXú;f}ˆÏöžÅ؃x‘ŸÏÏԾќ /$Ï$‘#ÜBœu|cpÍôœn}*ªY̸ýe¦_àŽsã'xK\õO4n‹Vؘ lâªcÜ Ï­Ø•Ss膯õ*Zïÿ ‡C“Æž4xï_²,^—€7½uÈ­hÇ${9y•[>‚>? é9&Øéä–?xî_xßV:¹eï7ââ±\–â]öZ%•r Ä•…*I*î.|wÆ‹í|v#22¶£òÊ#‰ ­ø{Gÿþsè «¿ü}Öïp5.·dÞ¡!¼ZÒFzþç鯼¤òþ&ŠÔ¾ñ|mZ„ä™r„[¬6xK\õo´¥[àŠ¹<°×R”¶þ|j¦á¾Ó�sã%Ô²0›ÚKhµ A…å,.hìIcµ®á×Å2€_E“ý„Év”¿“ }åEt»§ƒÿN22Ñ”iP&OxßVˆ¹}3GÓY/*…9è"À»ìµJJå* ¡ùðIX„Ô6ö·ßá‰>©,ÁÓdzå?+¼p 'J9©å™ÆÓú1 {'s[ÃÏ]××ú’O`h}Çà¤×éÄIéýM©}ãùÚ´É39ä·Àð=\é­àË�^<ijŠz’À;¼%®ú'üú­ ¢u0ÊÚÀ6so "sû‚.”r„¸wìCqmÔ!-ë#èõ;›‘Žì£·¸ô* ±'ÕºH¹®d¾«))Ò Lž¨}¼qÞGkS ÷Óñ`2 ÁÖÒMaex—½VQ\®Ãh¶ù?DÄ…zI–ì8÷U”ê¯Yr¶Õ>Bxj–•^¶àð±F<3LY{g½Is[ä—iì¶yÕm)S Øßä©}ãùÚ´É3Iä·ˆ™THj¸…:ð>–øêß ÜÍeH×å ¤ö'töÇQÿ#t6ŸCIÖ[X¿Ã—JÕîæœflÑ}CdzÅÓZß(zëËQÆa<8=iðÞ¿d‘r]É|WSR¤A™<Kúæ{†öêÂ3Ó¦ ý¡¨'[¼Ë^«(.׸2A& À‰¿¯0#;—$lŠhû­è_Q˜ÅðíVئçÿòLŒ³"!Ì=AÓ%;¦‚/—G4n¯žGý#W¸’ëîCkeÌögâÏ.8[M8ÑêN‰RÀäË+RûÆóµi’grÈnáþ å%&X\ša9WŠìœ 4؇ɸ•îú'ü…®šuŽ#š.û8Úb¸K¦¿Û}ÁRÏ„ÐLÞÂë LprŠËݽ€ú§R®+™ïjJŠ4(“'¼o¦º ØVtfË|Üí¨¯=Ž"Sq+£¸\Ý×QUu1p¿¯Bþ;…0„ÄZ7~[ŽœD¸±t?‘Ë=+ž“V±m<,ƒ°1êܲì|W.¢cŒýŽŒvœ@NŠJ(°þóŠÔ¾ñ|mÄBŽp ï ¾ ŸuYØmgmÁû³Éeÿ„)¸mWQ{´…z= K¾À9K'ú©ß?‚ÇÓ¶Ý0Þ¾¿8¶»oáby> koû_?°žÄaNNqiìIcµ®«R®+™ïjJŠ4(“'¼o¢²áŸhŸŒ\²Yåâ‚L©¸‰•Q\®!JÛ¬ý, ëÿˆX�GÑQùQÜ'·Â¸7™aÜtß_Yð<EgóO¸i™„±Èbd ̾¯ÚŽwô§p9hx[­?àÛò­È)¿ûˆ<¦hà”'¥tr+¹o4'|-Ü" üÆM ÌF^Q‹úo¿Àÿ*8Œ†Þ .Œ†DàýÙäªÃ]híY!ñج­mq–•’¶äõQ6}#šn[=žr° ÃúB$Ïj•Ÿ”ëJ滚’"ï7çþ…÷m£íÿÀ^Ãhï~¸°ø°£ †½ÿˆzJÆ»ìµJ*å:çü;«»0¢©N'Ò‘ïIæd;*>ø­®×fžÀ²+i¹ŸâHñ^Ž?/¡Ù_Ãn<„úþˆ“–ר̈÷ä6|nØ:Ÿ¤¬„‚væ„Ä¡9àY6Ü„ ôš÷ %íÉÞƒÏ?ÛŠMù£ ø"zU>¹KÞŸM®úçnBqþÁòHèQ¬R) à:NƒŽ¡ÐP›(mÄ“o¤• uA«U~R®+™ïjJмßtžû·¤o^ê ßõ¿¿ØÞÅ.Ë“¨‰€x¾6-“R¹ #èªÞ†Ìüý¨b vå>äelÀºô"Ô;=Á-Ïâé/Û 9‚ë‹`qyÃâ’ƒöÞêîÑS’Yx}ƒ‚õY0ØâëoðüÜHíÍ +à…óÞþòFs3ºŸŽ%ð|ÌbøÖUt²"÷¡$ƒ¾FaÃÍŸqY÷6òŒ÷1æ‚uM]˜q˜qÀÒO'·2ÃUÿâÊK‘H¹<ù¼/áÎ%T (Qæàuÿ†ëf †Ó¨µÜ#ÞpàO~ò 庒ù®¦¤ÈûMç¹Qûæ{ {ë|í´+hw ÇT¾x—½VI¹\…Iôßi€¡¼zýn”T]Äþɸ•·¹§—°§ú6þ컅ꜷ±±¢ £Âk¸šŽb¿Ä˜a¬Süï#ÿàqq:‰Ê϶!C§Czaœq­ä,AU ðÍRÑ ÐÜœ�4',ƒ÷1.o/m¥ûGÛžÅià.w úÚ@Ž ·Y»ï®ÛË``k7`ÜÀcû y)ŠÏ—6Nx†«þ¹oÂÜšs‚={•aªñ ’qK¥€$0 Oï¦ëÄ~m@Fîèó³–¾–§|nòþì&‹”ëJ滚’"ï7çþIíï²×*)—kÈiRR;À î{,‹d5î OÂÕnÑ3h°EÖ‰LÁÓ‡;õ”B_XŠª‹wHèÁŸAÀþ6¯HíÏצ.>¼l.Å;z#ZíƒðøÐ9xGz`);†æ—ñ˜J,ýJÎ}¿üÍjýçJreA_ Ȳá6õŒ9ÛQëÄ^úld¼ÿ>2tT hÕã›Äøëе/ã–JI`î ê·½ ]î?ÐÖ?!ÞYÿ›ðºš°ÿu¼äðÁ^­Ï®”ëJ滚’"ï7çþIíï²×*)•«\;À¢ë¼þM0© ­ÿ†Û+G& ¾q'îYêîC ­°¹#J- 3N¢òâ!A#.JPlhRÅ  9a-âÍp`iü8f0h9§‹}h<ú<A7ýw>…Õů[]Ê‘eÃMœ{Ü]øîŒ ñ;>»ÛQyåQÊâó儞Íd™ÆˆóŒï ³ô"º]qd˜î6`JÆ-•’À¬ÆwÓP`Ÿ„X ÏÀÆááj}v¥\W2ßÕ”y¿é<÷Ojßx—½VI¥\eÙV0ñŠ0|Dzße’ެüÐïÌEÆúD\9L à¯È ™y„ºOÎÁ¥Ä•ÒМ°y—¥Õ¡ f0îü •9۸Þß[Á;Ûõ 0ú=-¾Ã·G?AAù÷šLr¤ž>8ž½†gäUð”œ1ƒ=1÷#? w÷eQÎßຓeG_Ûn%™^}ø{6µ÷(ösüe0IÓ Œx¦Å~?@C釪ÅÜR) )L¡¯þl6<†% ð:@y^67ÓÉm ‘r]É|WSRäý¦óÜ?©}ã]öZ%•r•cX¹Ä+,¡T>ty§Ñ±pZËNr{P¿·2~WΟ.ÀúÇPXÉÁÿ\Cå¦U’RÑœ°Fñ'ìÛˆñÒïD~Vº(¯·c¸–­|9OÌþ¤éÈ.:ˆÏr³‘¯ÿÅæMž&*†û*Jõ‡#²Ýž@yþ®€›±ð 7Êr°©¬îr ”c1y[‘•Y ë€ÖÝ¢ìu¨íÕf2;~Ð^Üã"¯Ñßтֶhû¯Éà{©…JIÄ÷ ½×Ρút+úgæüÆí¡²s¸çæÓû…;ùÉ„”ëJ滚’"ï7çþIíï²×*©”«;ÀÊ%^™‚£¶`©ûP˜+ç,^O.ó7X¬Tô˜[]öi<ô¤~åg›W¤öçkãÁëB÷#*Š QXòj›ù7„âƒþî†N—ãÃqd3WçJXÝpÔU'tú»êq[Q˜‘‹z=ôamö[û0‡qëßøÛZ~AÀLß%|ZÃNzøœ°§ö‘8óIÃ{ÜãXºŸ,­í¿ˆ8&fR-[2•ZK¬VùI¹®d¾«))ò~ÓyîŸÔ¾ñ.{­’J¹Ê²¬Xâ•Yxìg±m»· oÛCt·]@ù–"Ôþò@|Ýë±ËœâŠÆíÕ:˜ÿµX»™ýŽ.ËIkv©²ð3yòŠÔ¾ñ|mê"GV÷ù¬[ð´˜7n‡Åÿ«â…À-+'q ¸Ñþå™`Ò¹´>‰öÉiŒuר”-™v~<aš‚gð ú]Ñg0Þß›}�ã‰ÆXJM&˜,¼Ç=ºBEùy4.äiˆl 0èßWÏ-yÜV‹W¤ÔqN!|­ nܺ²Ô[fîI .ÙÕ9‰_‰Õº®J¹®d¾«))ò~ÓyîŸÔ¾ñ.{­’Z¹Ê±¬Tâ•<·îÅzQL&±ÛÛØVÿÑmï1·Â¨ÿû8]›å…õ™W¤öçkS—ØñgíDz݄œ-upˆ mÀ¸ÍÃûYïBG¥€ÂîDÓý±ˆ5/ž45Åg?纊}™¢Ü³Í¨ìxüT ñŸvf ¿êŸ¨;UŠÒuÐåTáûoŠü‰³Ö­c%Ò.Ä{­j9Îãc·?àÛòüå¼t™%¸g-xÙ‘¡Žs*aÏ ? ªO yžç›.˜U=ø1ŽàK~ò!庒ù®¦¤ÈûMç¹RûÆ»ìµJjå: wÇENš"`æYØ6¿Ï [Ë=8•Hh3Ù‰Ó¦{Šfp/4–ä#Vo£ÜÚðð—oQ¼ñCíÓæTBsÂZD‡²”ñaIŽ.áŒáØÆ&a7æ!#ÿ(l­ð¼®1ÜVèÅ±ÈÆcx‹ß›ÄïÕ’Ss˜qs­÷ÿT'¾y¸E utB=¶®+BãïVìÛnÀ ûSqtÁÙfÂá+ñå9P½œ ÏqÑNþY)©Ö/‘Íê¬ëÏ¢KÅ~ÊQÇ9•ðµ. ¢©¼ç,‹ÏµÅ„’ì­(oø #j<Û+À—üäCÊu%ó]MI‘÷›Îsÿ¤öwÙk•TÊUJÒÁ}_ÿà„Çs«Ã»F»üqh¾!tüïÓ0Ôý0žý†tìÃñ*±NÌÞBVÙUQ©JýJ–Êû›(RûÆóµ©‹’e|<°ÕTú•["ˆû:ªª.†¥b»| …[¡Á>§á6 wçmØÆ"f5ß4¼ŠŸlFìi¿Ë. ýH[«­Õ¡®½¯;PõU|ÆÖÊɨŠï/<¬ûé⺑]ÙŒ§*g&—¥Žs ák]x¡ÁÑp xT§Ç;»áâ W$«u]•r]É|WSRäý¦óÜ?©}ã]öZ%•r•–4…Å€Yp´ð¤+â¢5§õ;¡Óe ÷£ld[1Ð׈ÝÌ/ï<zã c'·ßÀò8<[²š‰6xŸ¤6"^|î0aoE¼e|˜ëæeGu•e ÒÃ’ª˜IÞ™Bÿ_w‹¼†£î d·MŸÍ„bK_êçÙG¨Íù¯YFzѸ}»ÝÌ{Ëp¦þGX-ÿÄq}ŽÆé2­n9íÄ= žÇ°V| ®C9(µpRãX–:ΩƒÍO|Q†ª¾Gÿ—å |fçO~ò 庒ù®¦¤ÈûMç¹RûÆ»ìµJJåÊ]Ò”PX¶ä|lõ»_±­JÔØ&üï;ÍŸ£Ö_Áçƒ/¬6h §DAëÏ =÷jÁJå"³älD,à%ôù(7‹޵ ŽquO•¸ÀÝŠ:«#|CkÐÖª\¤Å;¯yãrñf|%óaM÷*,áö¦ò˜Ç —µÕíCm?Œ ›kᘅÇyU™Ð¥½‡¬Œ}°ºã›µÕ-'£…¸G–K¢ Õy±.}L]ÏÃÇ0ŠÁ¡Ô‡µ,⋨ãÌ/ìÞòÛ”–¡JÛ‚¢Ï÷!wÓß¡/(…¹—…fñ_ò“)וÌw5%EÞo:Ïý“Ú7Þe¯UR)Wî’¦D ·áËwÊÎd;nǤoÝ d‡å­6h*ï¯h½ÿÚ% lל¾‹á°q+½¦“h&£vX1·i;PçÉ ¿ÄYf jC7¬øÑ°[Êÿ)þÜ„›Ž÷F¥&à°žBIñq\qD*â^8¯\DG¤uLÔ,'Ã{Üã Æìæ€”þ êºþX*—ÇV˜®ªU H[pµfý°lOƒ.Ï„‡c3̆"+Ü3PwàG¸T{KáJ~2"庒ù®¦¤ÈûMç¹RûÆ»ìµJ*åÊ]Ò”0¦áºv�™º(JêÆ/Ð1ÏqµASy•@ëý×:Ì!Ü|0mkÅm2nq·ÀP{ çÝmý­OF¼ñ£¾gh«©ÅápÓnÖ~›Ÿ_©„§Žg‘qÚ3xÑó8bãcyß$m-0 0jÑÐúïFó÷(¸[q¬0²FrxÛ™›…BÕêÜj ®ÖŒÈ2TóÆ­çWòN«_†* «uÍ•r]É|WSRäý¦óÜ?©}ã]öZ%µrå,iJ¬ÐgÈñŸ’„ßM7qßå‰SIå¯6¨ÖŸzî¥2»Å„¯Û]1ÊWÅF¹ó% M¼ì>,¶¢¸ÝQW/ÌÝ0XÖõƒŽÿH¯+LÂuÿº Æß ¸¯¢T§X˜ÅB;òü]zãÂ3Ü(ËÁ¦²¸c]òBܦiÙ{ðùg[±)ÿc_Œ¿œ$´÷¸„i,×ȸ¾Ö –e>[j‰3ƒ3n3˜Kÿ[T (Å„¯a‰·DÑ”“¹ÀTÂsÿ¤öwÙkäªZÒ”H|Cèlùca Ž�Ÿw:ξñWTëÏ =÷R ÄÆû¹�‹Aߊõy•¸á*kmêDÿZÏ$%{Xµ¿ep[Q˜‘‹KNwa¿µsq·‚Ë‚íº·‘g¼1Ñè÷ÙŒ(²º0ã0ã€%¾rBÉ£½¸Ç„çè8F4ÆÑ®VÛXp±)½îÖ ßstg„Áò›8öí0flB~åp¨ý\Ç`­®¹r_·¦¤ÈûMç¹Rû¶V8¥I©\åHš"“‹\ü$Zú„¯Ú )½¿  õþ«O²Æ-s±ß‹í¡¥_æ™õAye”Eæ:°ê+­k‚øcŠ×í‚e0U:p}ðؾR>™ ãÃ^£¯á3ìâÌ-™›MéhÍÆZ•ŸÜ×­))ò~ÓyîŸÔ¾­ÕNiR)WY’¦Èá"%KŸPmÐda²'¤¬q+X£ÿ‚aß9t¹B“Û<GŸõ;\]ënÉr×UÓøK q|<¿ó-wðõ LýcÎöÀ-Âd–ñþûÈн‡Šö—ËÏùRá=î1ŽÍƒÀxPɸå.“÷òðµfˆÏ‰» ƯPwý1<{mCËÍ sºCÈ—üR‡Ü×­))ò~ÓyîŸÔ¾­ÕNiR*W9’¦Èà"9JŸPmP¹ar#¤0§=ƒñÆÏ¬û1†bn宫ªñ—ÂÜ=·pñx!2uiÐÇmp1¥¾ ß1‰sà+øDc>#c;*¦@Éç<îÑý*ÊÏG¬;áíGCv«dÜr™É{¸Z3üá oC—ñ!>ÊÊF±õ1ú¬Ÿ"}ÝÛÈ«íÛÝ\É/…È}Ýš’"ï7çþIíÛZ}à”&år•š4E¹è0åKjé5jƒÆ‘½–Åó5C™é¸g&1øøY ‰Šo ýöß`ïãðd(�=÷É Žå‰ ˆvWL„W. ¬ó%¼lÁácx–˜µ'Yó~ÉòÖõß³hÆß•G$<û6Þ‡.« ¥¹ÅgR‡´Ü2/œ†Aby𔹶ò÷«”TXKd#AfxÎä&/n`›`›õ¨ïŸfœ¨ÿôkئÄÚ÷æ=߈sFðsÁ•üRˆÜ×­))ò~ÓyîŸÔ¾­ÕNiR*W9’¦x_`ðÕRUHéÅý~éEîÏŸ¸ýŒÌݹöZ:i•Ã@ŽM²ÙkçžÖcÛ†T]¬Ã©’¿‹ò 9ÿ¸€ov±z¼ìûï¢P¥:¼+‘Òñ¹jðÁ}õ;Xûž‡¸G4Û·ØovN²bòãSâ¨&¢"ÎgrÕÆ¸É6šîcpFç¡§èlþ 7í/Ußxšë¿Œi:¬Óe"ÿÈy\ŸŸ…)ŒOÄYÞLc®­)Åý3L–žèÏi°=k­ÂµŒÛá{¸Òñ|³±g‚¹'-¸gMg¥ákÍða¸ý+œð{_Ìa²ý$·Ã7ÖÅm) µŠÜãFSš _ÍRxîŸÔ¾ñ.{bedIšâ¾Ž*Ã5tGœ&ݯ?€¿Z`s<ƒ'ÉS%ÁÓs!3øÒ‘]tŸåf#_ÿ1Š1ü|ÏÑõ¿kp¢îg8™ÁîsÃÖÒûpd¬DI6{í,†›?Æ’VŒbýõcÞ‚ß›+°]”—½îAÚ 'pE…:¼+AÏ}2ˆÆ­µÈ/»eÛ²¼Åqsë*:'#þ}î š.ÙÅÑHÈÊd;*>ø­®×fžÀ²+i¹ŸâHñ^Ž?¤>xí¸y± E…a²vÁÉjø&`ܪëÚÊ69Ž{Œ±aŠª1·q,ë¸)mÃúà s¸¶/Ú¦Ž(¯Ê{àc;€`È=n4¥¹põÐh ©²#ÙkY’¦¬¸Ðê–÷´»5&YvØÝÐéòa|8ÂÔ¹`Ú 8êªa‰Ëð Æ)ê2ûQ62‹­èkÄnV&$ï<z%Û&›½6`è ±kÊò·6«iá>0åïu‡ _©P‡w%Ø=%E¼çM&Ôþò lhi{¬Íe d•ÊZ­ffígQXÿ‡ø$Îb´ý6®/ò' -(ä)¡”o O»¬0UìEÑÏPÙ§Á¥¦k«ãgíaš+rÕsKfÊUÃ6%¬—O¡pk¾ ݬh±c„ã–+¬»> †$-ʪ©•mIÝðN–ÕÊ”,lm“Mi.r_üZ"L9J²Gޤ)îŸa¬ÿ ƒKܶŽc§ÙæÿyÐy†·, Äâe?Àº ýß›7n‡Åÿ×áÇNWó±Õ¯¤N¡¯¾5¶ ÿûNóçâuK9ï’Î^;ë¨ENe‡x…ãöíª.xœ±wo êaùöKè·T¡c’?·@zî“A€wh¯$)šÌ@>†’s߇(eßã\I.rÊ/Á>²ÚTu™{z {ªoãϾ[¨Îy;x ö®¦£Øß<ßܘRæàuý¶d†Ô| ÉÂcÜ£ïžÅ‘äM†½å'´vØÔ3†¦†ÐÿWd�Ãk8êràUÀ;¯Û«ð{í³¡¦ø \ {¬ÅP¦d‘[× ã6!&akîÄpðU4˜keáC0ÝÂŒçû³dŠØø�ì¶ô/e¥êËví x‡`[ˆ+½‚vÇpŠváØD/1iJÔ:·¢þâlÂÙöd0#ðªrjŒgÍQ» 9[êà˜aa†`ÞÏzºNª„á6|yâNÀ=k²‡·cÒ7Œî¸ äXHÈ^ëë‡õÐi´¡½|6×>¬0gS5 2ÞBÛ`(´"55eм Ñ äYx}ƒ‚w>…Õ¥Ö©Ã*e!˪^{â!ØnÀ3hˆTŒÕ€eI¶µ$o˜Ê‘o!i8Œ{t[QÄe‰§(¸oÂÜì ÙPeí?h=š“D‰1%˜ƒ×ý®›MâØ<ZË8T;ÄçådꢭÛo!»â2ln¥ò¬ÍP¦d‘[× ã6*>Œ<4£$;=äA6ýrJh@ÞëN¢ä£¿an+þñýר•® |?}̽‘É/Ô‡õPžÅ¸RQ‰ò—ÔùYiØey²Br™d0ó¬l"õÇŸÞ Ä¢*…ß- é¥7<¹eLÃÝ} g ?À6ÆÊGä!#ÿX”d1±˜†ëÚè ÙÆ/$ŸŒJÉ^+xza­.CñÑ(Bg¸r¶<îÁ3Ùj *8·[pÿu蘄»yâ=Ù_7H4†TãÏž‘WIç P  SYò-$ qš2nc„¥í@­êI¤fáé½€B¿~»¹; ÏÏBZú^XžrÀ_c9 %µWÂË Ðo)‡™ý|ÓqE€µÊ”,lLË ·Ñð»ÑlD^¥yIí³¦ŽþebDž£¹H|ZÿÇÞ¨ßú7èÿ…æ}{`¸ñ;úÝÌeó ‡áâlýL™l×4ó1¡ÛPÝÖ· D Þ>4í?†æ—Ê,µ‚û&¾þÁ ?æV‡wvqIR Ñ@µýš„=‹qG[àë }qÑìïBsÓí’AÍà¹õ3äø¤„<·M7qß•hÑhÈ“½6üä>ьЩ…æµ ˜Û¸QõTRyä0LeÉ·,<Æ=jʸm׉[x¶¡êÀÀ˜W†5M"óñÔ¹ÿ@[ÿDPžÌe¾ û÷_ÇKÕ;(ê#mçpúŽ;\V¢Ñk:x}Y/Lé0/¶µÊ”,lm“2n£!ôò}oÈ.É<f}³ËL(ƒ°êsî¬Py«Ökµ5GÈEGÕyîR§L¶kšÈ¸Òyf0h9$Ñmv9ØîªG ?@zf .;yÜícîjGñÁÑpyg1óÔ‚]éï ·¤Å…&<ôÄ9‰û†ÐÙò;Æd_Tå0¾ÅDŽŒÐ)„æµ`1·T}ßb4â²a¶RÌmªžJ¦�Y S9ò-$xOTŒ{ŒŠ–Œ[ß$Æ=ÿ-ƒg‚øOFÓPy:) ÀRx†=W\«]ݦZtEem†2%‹Üº·Q™Áh— ûLp-춰怵öÆ2Šù؂ʎQÿÄmHÛŒªn7œæØ{æ"­—ñíñ]Ør”¿ä©“íZFÀL_¶o® $Ô`xÃRþwdl(QìäVV†;Ñt,baðâISìó×”Ìð?H:"¼D{Å{X_ÈŸ7Iþã°[LøºÝ%šÍr ‡ñ-GFèÔBó‚Z˜À_‘ÔÌ#Ôí6ƿٳPõT2Èb˜2Sb¾…¤Q3î1Z2n¹öL`‰?ÁfÃñ'†�¯ó”çe`Cq3'·!nÓi[Pôù>änú;ô¥) \‹¡LÉ"·®AÆm4‚®á“p°-s+. ®&ªnÇðhÊ7lõgh<ÑTõ±¸¥ãý¬÷Q¨VJùe`×F¤‚Œõ6ÃT}­ýârÀŒÛ`2M,´±âÖI=`»œ‡PÝîD_ÛIäÌ+nI»l3/Š4nÈa|Ë‘:µÐ¼ sð<~Œg‘ö§ðzzâ}F|pÿtÖ?†B6WYXËϨÊÞÂåXQ 9Œ?Å6íä@Ãtø®tF&ÆJÑõ©÷ ·Ü{&ø^¡÷Ú9TŸnEÿ̜߸=Tv÷.¨�~/Ì4èòLx86Ã&ŠDžmøQáð@æíÕ‚ºÚï$y{1´Ê”,rëdÜFŇ—Í'pÌÚ±Û"6';qYq�;šP]òŽFY|³Êò)±© †ÒÆ ^ô<N"SŠˆYsïìÃ’ÚE—Ý·}ì.†§ÿDûùÓ0.Ã6–èµÜÆ­Æ·<¡S Í ÉÀ\ŠCä¤8v™a°:ˆümçý÷^p· lSÊn<‹ñÌÄŠ¹Õ!mkOÈ`ü)¶i'rÞª^Ÿšq1ÐqË·g‚·®ÜÇdÄ�š{Ò‚Kª'»‰t›ž7n=¿¦ S·<¡VZ eJ6É ·±`q¯¥*›)ÒSæëŸ8)•íš%†ÒÖN <×Â)w(]sÏçÁȈG†[nãV.ã[jFèÔBóB20Ãt_ s¨^ÑŽÀÚ?Ÿq{õkÔÞý5|sÕÞ‡bíx"jy²7 Ü´“Œ†©û'”—ˆÆÿÂõ5Âr®Ù9)º>µâcàÀýžàu oàæø™R5^z%ëìÒ±© ÖŠ~L5Ø›-µÄA„·ï!+ã­ôOo/í…2% 7rBÆm4„Q8n6‰ ÀutzÅדèïlAÓÍ Çü@]_ÿDI™l×4Ë)½¡mö[û²åvºÍ·ãLMànEÕæ*Éj®µVårRsO€o܉{–ÿгþ/dWXdR¢‚§îo"Œï„\Mc!öÙ;Íì–BóB2ÌbìÁ<‘´7êÃp瘥%0[¸¯¢T§bm Ïp£,›ÊZàŽõ *½i'9 oï ¾ ŸauYØmPx­á\r_Cu´r-Œ)¬&3¬wzTLà$ƒg‚b ¢©¼ç,!‰ï,&”doEyÃoQ½"¾çèþ΃å7Œùì0flB~e”8VÙ‘ÃÛK{¡LÉBÆmJA{ÅNm€W˜ÂSË^¤§å¡äÈ>î‹Ã+TõõORbSJ¯„—xx¾Ùi¬&]è.+Ëêgx¬S.j8|Dzßû”ެüÐïÌEÆúq´í™Dã1Æ©{B®¦±¬šJX\±‹Œ©»·D¢ð áÕ’AàÃHÏ¿—)ÞŠLÙÃ×âœTè¯c“0ã–çM;… oaøjöV¢Ai“w]ˆŸ¬}8ci‡}prɽö#¥9ñ¯‘kŠ× ?ÂÕéñÎîF¸Ôž¦d9¨JéÞ^Ú eJ¹u 2n£Áüô Ð/Ž%a´ ßA¡¥¾DÒ›«êëŸ8¤Ä¦ß(œ÷~@­hÍÍè~:–å‰ÕNÛ¼~*/†×´Z¯¡£?N7è¨5÷zðd„ƒš{ðÂiΕ¨ÓèX8­e'¹=¨•8iÙ¨åp5e™$/£8sƒÿy‹lºìðp–(‚õ‹H¶RÃÏ‘9:P_ò ­ሢD‡#wöðUÌXºŸDÙòMïË󦆷š ³xׅؽ; iþlÎŒÄGÏ]A›í`€€×'ð ·ñ!¼@GÍ~T4ð*ÃA•T$‡ZE e:ŠÛ_~'È­kq –-yíþmÕyÁ’™ S«éëŸ8)“íZÇû—‹7‡×>ÓÉq²¸2þ¬‹Û#kì2fá‹W Œ‹žˆksLæ]Šë\\+ÅU°´æžø.³x=¾’a 9NÝ™Á’‹Ì’³h Û\¸ƒ>åf¶éÐÇ8?»±4/$Û‰– *´mD^uÜ1Ÿ;¹³‡¯=|6ŠÙ¦tðõ²ð¼i'‡áëw¤$¡çºÐ¼[²wOl·a9w EÙéùè2‘ЀVíÁn2ncÀqn9ª’Fެù±à×Û+YØó&'dÜF%$FD4<ŽÝscÚuç™bƒ cñŽJÕ|ý'u²]˰,Ü¥xGoD«}¿b+. #=°”¥@aõ½D—áL]ýá§�}ͨ½çÂ-‡ks ¤»‹Ï­ý,¶m7âöÃyõ!ºÛ. |Kjy ¾î‚õ؉$d=‹áÛ-¸ÿ:b¥š{‚¦Kö`¿•`±Sm¨9}7"ÑhôšN¢y˜æ…ÕhÜ^=úG®ðçÌ݇ÖÊ2˜íÏÄŸ]p¶šp¢5"ƒlòf_ÅDÛ0œoºPay¸r¼$Û´óü7ܶ˜,ä  ­ÿV1Î29 ow3ŽVšÃ7Õ.P\l@S*Jñ¬ EM(åƒgð:›¿ƒá`2tÒ×·Õ çñÔ²T%‹¸HeÒž·W²°ë‘2n£2ÇŽçxãy…Ï¢,¼p gXªâƒ×«°“©“íZ†ÅK¸†z²¨sOë±-j!ýønY\›£"‡Kñ ž[÷bý’ë‹loc[ý$¦¶Š U¬Ó¸¸c_XÝ»64Z,øQ#I‚Øõ‰«ä—8Ư\D‡ß0ÁhÇ ä¬äV*[öðÕ‹¿TJf jCç#+~4ìÆ–òŠ?7á¦#".0a½æ=Hº¥~þÙVlÊÿÅÑ«¶&G冘q»0*ív­rÜ£Êï¨dÜò\ƒ™ûÜ22T%Ó¤†2iÏÛ+YäÖ5È¸Ê šJ‹päTÈn‹ØN•ïÀ6¿kÍ Ü7aÓ¦C¸áŽ\0V@|økŠYì”êO}¤Ä¦–Ö½Õ/C”ÕŒ;BeN±òiÝ…!4> ëƒÐ�Ö~‡s$>ãJ׿¨ÈäR<Ù‰Ó¦{ ;1‹l/Â6­âƒíÂPõ}HVHk#.ö`kù%ØGâù}ÚKDó‚26š2QºÌÉ-'¾gh«©ÅˆçYûyl~|µ<þyM÷6òŒ÷1&ÎccÆ…‡,ýÚ¿GQãv¡¹2' ³8ˆ{”„€énö¨eܪêR¾šÈ-#>ÏU©AŽP&íy{%‹Üº·Q„µ0 ¹;#w[Ķߊþ¹xŒ[œ—Kõ¤ì-dW\æªæmêd»Æñ:P_¸)¸›·ùY,¶ç-䈋|d!tYîD³m~g^œ('&ð:ìï$¸ì“Áµ9*r¹‹×èSbÂ050€¿"ÅÄv¨wã4Lµ—$ˆæ…ð¹aë|²ªŠð«Æð=\éø ¾ÙØÂœ{Ò‚KËœPúO×í‚e0°žŒÛxl_!‹g‰e éò”/u¤jÜ£DX) û‘ŸñŽznÉ<×`ÖXn™Ô"G(“ö¼½’En]ƒŒÛ¨ŒàAw¿8Œ$àßÑÊBIí•ðIéGô[Êaf?ßt`œ“‡?u²%¯ ÝWŒ¨(*Daɨm~ä?-P„˜»¾¡-þ`9\›£#“K1‹íj0ÁP÷3œÌ-m2,>¸º�ëCaFý ógTeo‰Ó0Õ^’ &s‚àš¸æ8ÝòÊöÔo0ælÔÅñÙ Èxÿ}dÌ?£þw5ŒûgÍwƒ›†ÁÖuÇŽµà¹Ò^dªÆ=ÆÁð]Ôßy|9xŸwàÚ¯£Á×)†çÌ å–I-Ì-Yj(ÓÚ) Çä"'dÜFÅÛM¶ˆ.6G/¿ûÎ4ÜmçpúN„Û™hôš^Çpð%/¤N¶k™À.ÛähJÕ.\è®ï÷Uȧ†Ë‹®µß–#'§"þ`\›c"Ù¥˜;¡Óe ÷£ld[1Ð׈Ýé:èòΣWRÖ…X •i[ëâ>ùÖZ’ šxcϯ[«ÈM21O¶*ðmhn‹#1Sæþ×…ïΘ`±½‚ÏnDFÆvT^y¤þéº1—Q ¤iô×£¸yHaã]͸Ç8p[±+¿·î`’ÇPXÂG'ºÌû±Wµ“[Žk0ûŸ›n4¿BÝõÇâ³Â^ÛТ¡xjåuÉ¡LÚóöJ¹u 2n£2«>Íÿ÷ÂÛ »¿¡ø“(üX,W5‘D!u²]˨° ç}ÁWItÖ~…õD(2£è¨ü(þÓ‰á\iéPødJnáBÇÿ ½¤O]YÜn>¶ú¯q }õ•¨±Møßwš?G­#>G èˆ ÕÕ¯Q{÷×p£ÞÞ¬…˜�JDóBòÞ!Ø®_€‘)ñµ—Ð*!«¥àu£çæE׿ݺ"XÝZ=)B±“-Ѱqý ó-©%Î$"GÌe´“Û‡m0o»F»4/µ¸Uâã D¾ºŒmø¬ê467¡áÜø,/#˜…[Ålɱî?5˜Ù©ü¶·E¹}ˆ²²Ql}Œ>ë§H_÷6òj{DÍ@mä8¨J9B™ÖNI86¦å„ŒÛ¨ ¢©Ê€ïv[Xk€¡pÊ~[f÷7m%QHl×2êîÂÍ9¿ÃÎê®°Ø^ÁcG]Azü;Àr(ZQ‘çÔUn×'î6 &Ûqøp;&}Ãè6''_–EµáÊLwávÁñ_φ½o ýöß`ïÓ„‘š,4/$Çâ }:²‹â³Üläë?F±¹'“ÀŒ?í‚ÕT†\é­È-ý Nq•ŒÛEÜ7anv†Ÿl¹ÿƒÖ£I&KòMÂe»Žº#Ûù(#GÌeŒy[—u×ú¥lú­Ü?áhmžöv¢ÙlÀÁüL¿A«Ë(ÀAÃwhî|„§Í8ªšqËq æÙG¨Ý¬è43NÔú5ll“Û÷æ=ßÀ¡ºƒ‰ UIã“!”)t-YÝ%áØ}‘2n£âÁ@ÿHÄÄ!`Æñ-vÇk˜j,‰Bêd»–QyNAWõ6dæïGËþ]¹y°.½õÎ8 ?Åê%Êqê: ׵ѓ¸mü“‰ŸŒûcŒ7 êbN•üé,ù×?.à›]l±a¿û]&d°h vD¢°¬è»¡ÓåÃøpDTqX °JXÝpÔUÇ™}ý–=Hå¯ËØŽ#u× ¯'0±æ]þBåd‹¹Ÿ>Æ=6—e³$©ÿß~_‹ZµOnå8™vÿ “¥'LÉv»_EqÃ]ƒøFá~ê4 ÏÓ0¸„‡ó^CK>“Bx®Á,ÎnÃí_á„c›y¦ÄáöaøÆº8É–,ÇAU²ÈÊäg ”„c²‘2n£2ˆŸêšñGØBÀŠîW#;ÍßË{…R'Ûµê»pÌ=þŽ8¹—C¯ß’ª‹¸Ó?¿Qª`½Dé§®,)ÕgÈñ×¶ YÌšZÑédFF¢Ìb¸ù3l(iÅ(36ê?Æ:½¿7W`»¡öþ!ìS›á®(]ÆI%h^Hæ¡ñÖÌ—Ìš7n‡Åÿ'àA *µƒö[¸x| ËL°v9ý.ðdÜFõd˱øO¶„Ñ»8ºiƒ8Þ7¡ÐЈ®§óRKœÉ€1—ÿí„} Ò8›Á‹žÇ%FÖ 1ê žÇh2œ†ÅþJ´-œ°=‰ó¹•žk0Ï àÚ¾ÍA×ípncå=¨ì4-"ÃAUÒÈÊ´[× ã6*±\6bkíïˆ7…7×I"Hl MïÂ)V/Q¦SWß:[~x¾D㢦W¢@×Àu1%ËoÜÚ¬¦…’!l¡|ÝaÂWq,¼CCxµäÙ÷a¤çßè—”ðJh^HSvr¶ÔÁ1Ãî);yx?ëÝà&g¢ ©�ßxºÄqWQ´ŠŽ£‰Ü’‘ëdË7 g»•%_À|³Güþ4<}M0I*q&rœL»¯¢T§˜þ±ÐN <W C´ð 7Êr°©¬nÙ§!5ããÀýŽ-ÉED4,WD9•ìF‰JnÉ\×`\°îúåæÃ6”›ZÀÅE¶dªe‡2%‹Üº·QÄUƒwêmšýÉp‚ A8N¢AêdKÈ™h&a˜wïÔ&û·c)Z’ë%Æ:u½‰û.Oœ ¸h<:/£8“À,í£.û0, ^ﬣ9•x4nß®ê‚Çy{÷Ö ¾±–o¿„~KUœÆ·h,7ÕÀðsWؼb³u ¾äZÂ18ÉÕÂÇäF$Ã4ÜÝ—pÆðlc¬d2òáŠcBš2*¼†«éeKEæ“-Áó ÅïA—–†·ÕL$41—â¼]˜‘‹‘uûõ»°ßÚ‡9E[5ã〭iº÷ ?þ ¬wìQNü§1d=ˆÝ*¾k0³ìÈÝh±½Š™^/+™U‰±ÖC™’…ÉFNȸ ¹Œ6:Ó½§üþk)Õl×|�vq1étÇ\=(-["€<‰f’Dx{Ç>„Ž)Y‰ŠÍäfˆý8z îx]—õÔU|þ¼Óq.àÌ4™%gÃc‚­—`Ðçw—ÛàO@áõõÃzè4Ú‡‡Ð^¾ ›kaVT¦MÕ(Èx i¬f¡ñEåN‚ \¬¶yÕmñß…a}"e÷®¢s2bœ%T¼ŸˆYN¶/F¿Àb &ïò;ÑÚuÍ÷G‚R‰n³˜îAóí8ãÇzÐýD­ÜµjÆ=Æ» ÅùŸâ >ÛãÎÖæ,ý!-·a›?Ðp™{Âø|ªÑb fŸ 5Å,Y¦Ú½“ë *^äeÒž·W²È­kq»@ [ë†üã¸Xw%ýM\à¶âß]̵˜Mzé{`óÎ)¤Ä¦9Í$Ϝӌ-º`èx¶8±ûFÑ[_޲xk¦¼^b".Ål¹ 5§ïFÄ‘‰F¯é$š“<í<½°V—¡øh”Âô³N\9Û‰øÎ¬EãöêyÔ?r…¸H±Ö‡ÖÊ2˜íÏ‚.S&œh¨­4/$Ã2›‰¸%ûž£»Á$¡4ÖÚ@Ž“-Aœ7ªýYrßBVé÷°q´‘-¼ÄÃó¥ÈögÌO œ*ËQ+7iÔŒ{Œ=ãâsðŽ À~Ç‚ª‚ÍÈx7à¤ËÈÅǹY(TퟭkœÖ`ïžórIôp"–W¤âòB"<uxƒ‰qþÇý®›Å¹Ôpµ ­ ö)0÷ËÊ$þ>y{% 3rBÆíÏÑ\”…’ֿı÷ê·þ úÆ¡yßnüŽ~Q tÞ‚áp#\ªO(ò£¬l‰�2%šIæb»yáo/" ZPTWLV£X½D™\ŠEƒ ë×à—¸P]¹‚E®DÂ�v{þ„b3í8ÕÝÍ0ى’c(9÷}ÈIÕ÷8W’‹œ¸‹÷ËSkM ÛÉ–¨ŽÚqóâ ”ì*EÕÅ[°÷ýŠö_Õ=¹õÏÛë·¡òbx\£Õz ýk^‘Xá$’K¸Åƒ q’×e£6¯nç}Ühø ¥¹›ÔwOƒ“̬*È»¢Þ\{%|lþh€~K9Ìì盌«6]…ä¾IÛ‚¢Ï÷!wÓß¡/(Uì JöP&y{% »9!ãv曟00|6ÒØ®h¬ÕÖc`Uç㜌_chptéÃ# £çþ�Å­ÃQV¶D�¹Í$†à±Á´m7Œ·ï/¦Ý·p±<…µ·ý¯XOâðr'°1”$éõåp)æÝ `FÏaèœ Iê"¶S‘¿í¼LÌþ”é‡Ý¢ú¢>¬/D¢Ds%•¬Gß àOauųÑ"Gi¬µ‚'[A7åËU»Q¬²Qãw»Þ¾tS’©¸39ËQ+7iR÷( q-úú4ZCÖã€7�Æ­³Ìâšën;‡Ów"<D£×tð:†ƒ/UCè‡e{š¸þ›ðyc0Ý¾È ÷Ì#ÔøQ™ƒ*¹C™4æí•,rëdÜ.À”‰OPÙ1x�Ò6£ªÛ-*°÷ÌEQᾌoï–£ñ¦7gq&&üÜýpÑ`í~=Jþn@«ÍAŽM)+[b…ÍÄðÜŠ]ë#Œ¥M·­OcYVŠÕK”Ã¥˜wƒ€íÂîCF¤.¬µZTdMþ{Pðó3.*Ö"Q¢ÅÜú0|7O”çüg’#饱É£ŠótT)|/Ñe8SWø¼Û׌Úx39ËQ+7iR÷(•9LvTc[åU8XÒ.á5úö£Œyõ©Ç5˜ýÌÂãz"·ßñŸ,§¡À2èϼqëùUÑ:¼ò…2ÍÁóø1ž-ÑǼp^¹ˆ½½’En]ƒŒÛDåÚÕ„CÕímCù†­~eØ_ë¬êcdèÒñ~Öû Ä]ÄÚ­ ii¡ºý’õ‡PšYŒ;Úü»æM݃â”$. ý]hnº"·ÙWè8ý :†B¤hm¹2E/ÛÑp72~J¦Ø-\Šù6f1öàžÄgÛpÍ É°Œ+YÜ2•ÆZ ßÕÎÈl­©Š'UöÕ¨1 œÜÉQ+7iR÷(3O`YÈn+¶ô24»Õ‰Ãæº3ÓaRìö›ì�![j‰ú–3n3ÞCVÆ[|dê^‘Æ­ðzzáù!¥tr·aˆª£ Õ%Ÿáh—¦YgÎvÄëh1ˆ«Æ+x4²˜°ö¬•;ͰÏ/.#Z‡Õ7o•—-Á&ªÉö£øàè ¸¼³˜yjÁ®ôw[RŽâBz”VX§áî¸(*ßຓ-<âkÛ-Ü´¿Œ_¹Q,vK—b¥ ¾q'îYê’TÐbí†2ƒ=#N¯ÕƒÉŽHæ~.5æVŽÒXkUãIS€0„æÃ'a}~òi³ýçHœ±d”H­Ü¤áÜ�ÞÀ;½tR¼.t_çzã%ÜéŸT·Ÿ¼Ö`VÃí7QXb¾ïŒ0X~ØÏcÆ&äWF9Qå’•C™xóöŠ—ýë_ak»†ùŸÙ¿I…Œ[ÅÀ•úKŒaÈ‚ÝûÛ. ¾—è¨ÚÍ…‹™¶d«UX\é!Ô÷‹ ‰ðíïa}!K—ÿƒ–CŠƒÀßdänEVf)¬Xw¿‹uºÔöÆù·Ý?¡¼ÄˤÔ˹RdçTHŒÝ’Ã¥XYƒ@¾‹cÙo‰ÏJ:²òwB¿3ë?ÄѶx½/b,TaíÊów-$ÇQš’AŽ˜ÛY ·œBÙE[xi,*'´Åæ¤DÃý*6 wàJKÄf{‚'ÓrÔÊMÞ qüó¯;üÃ] f•Ü~×Ì h…P&ñÙ.Û”ƒ²Ú3n™~­‘qË5ƒh*-‘SáÊë©òØæw‘ðà—àüðßÿüŽzhK¶Z…NBu»}m'‘3ŸÍÓÛ‡¦ýÇÐüRÙ•ÀŸusk=ú3}—ðiÍQIàs^À–ô ø¹eñ¾Àà«ð~ ;ê ²°Û:�)g£²¸G­•+^ÑÈδÓèX8­e'¹=¨ß[ç½[n¡ m»°ßÚ'I–rAó‚\øDÅ„½ߣ7®6Vd('´cNZ±,+]cÆ!5Œ 9N¦Y­\ÏÃmkÙÈt‘Z4´þno fÞ &_]ão`½cÇÀX þD๳FÝ~ý:—ùn ^IõöÒ^(S"lݺuɼÆÞ“2ncÖÂ,ä¼î·¢î \gÙÍü?«Ëжd«]OÌ…,–ç-d'×é?Ñ~þ´8ñ]†ÍŸ@A7Ú¿<TŒGÐ~ø$Ú'§1Ö]w=ÈhÃ÷P#x ’\Ìx1d'Ë‹ Ú3!§î³x=¾\Í9й]S0WÂ{? Ö`€ÑÜŒî…X¹x`§üR]›×. ÏIîŸPQ~>"S{hk€Aÿ¾:'eîf­4‡÷%*6 )Þ“ia½æ=H_§CZö|þÙVlÊÿÅãÜl‘çhÜîÊ݃úl¤ùלtdéÁØð3ºÁ¤Wc÷aíT'÷/×5˜šqûõÁã²ázÝçÈÏØ€uzkœ‹“Gº·—öB™!Úé­§¶ 2ncºûã; ã�mÉVãø<Y.i“B̹®b_Ô:²›QÙñ*ø©8¦8à=ÆpûYlÛnÄí…¬ŸÑÝvå[ŠPûËñu¬ÇN¬xŠ+x‡`»~FæÍQ{ ­ñÔïU š’Äû—‹7‹ iÈs¦KD©‘õ™ˆ›˜Æíø¶üÿ}Ôe–à²S…¢˜™Ž+`Œ3^Ö_NH÷6òŒ÷EDíKVÚÆå?>`éW~~åÙ�Û"ÿæî¼c°ßi„±è½…çV—‘‹ù¹*—â³3Ë&î¸Ù$>'×Ñ=è_O¢¿³M7{0ÌIÝUÁûŽ{—a(Þâß¼Ðeâø·aª½£ðÉ­LÞ^ eJ”ÐÓ[¹NmdÜFE޵xìp/ï’ñLmR'[B-ü¥€r‚…ÕÚU´vþ#ñ.DJž�(æR,ÌøÞ‹õÁI8v{ÛêŸÄ|îOîÓ‘]tŸåf#_ÿ1ŠÍ=É×ä”§Ó26äOò°6ðáes)ÞÑÑj –Ébå<z`)“~¨k37ÑÜ’…×pµ~‰léú³èr«´¡5Óñ#4WæÄéxÖnÄ»ëvÁ20’Æí�<¶¯$yíH!u®¡+°`ÜÎÃB*aèåì¼ gDã!;J ÃQ f¿XÅNmõba O-{‘ž–‡’#ûPh¸¶‚Â^âÞÑèÖ­GF¡Ö®>Œûçc³¾Y…uo9¼½ØXÔV(S¢„žÞÊ©cq9jÔF¹ k!ÏÔ&u²%ÔcîÎÛKÜŸ}6Š-}q)8ªŸ�,Ë,†o·àþëˆ)^®$<“8mº‡¡P%sI{‘˜sø,»¡ÓåÃøpD”·6C%¬î 8êªaq½ ~N=˜q;¿ÐD62nã…Ý×Äqa„*5‰0»Å„¯Û]šT^4‰ï/<¬ûé,|¤²OÕÜLˆs«Ë‹¿FíÔo0æl_8ÝñÙ Èxÿ}dÌç}ð¿› Rïº"¢|w—·ƒ îûøá²UÙ(nZK`ãĸ‡‡Ì,žº°ý¢ „Ñ6Tl|…L—`)<ÃIB©Œ;Ûa®<€JóMô¸_Ãçy ‹ég…ÇžÞ^«;ævvb+ç©-ƒŒÛ¨ÈQ£v™˜Û°Èx¦6ìšµDït\Æ¥$¢¹JÎ7ݨ°<\ѽ˜Ç€EØ.§RIxXìËaàMÄïHÈû‚eËþ�ë ,ôaÞ¸ÿÏCÞ�\"?¹žÕ ÛĨDuGh‰-¦`ý„Êœâ$61ë‘òõH5ŠÌunYm{kÅÐérPjYZ0帆Ñ|wq“µ®Ë8v¬Ïãvý×w¾;c‚Åö >qÏÈØŽÊ(%•@=×Ð8`› ësÿ}„Η`<t'Ú.—Æ-Ì=AýÚÿüÚªó óËq^Wöᅫ—j?;¡p4|† ÝÛH{[—‚y¼½Z eâ2n£"GZй%âE4rj*E¥7>‡÷dñ¦™%¨m\t;eíGÃnlñǺ6á¦#Š;~(Üœ�DC4n› ¨ú¾1äúqÙ°[%'áa¿{…zs+¦ä0e7!gK]Ð[ƒ·yx?ëÝ RÀÇlíô–NmÄë@}ᦠ;ÙNäg¥‹r| 9†û˜Lø!!ãvYbl&\ç–€m¨ÎÛˆué»`êz.oµNÊ¢ÆÜN£¿¾8ìt‘[Tu ¯ת‹±µè,:_Gé 3(Ç.2n£RÃX÷!ŽÝscÚuçÙÚØ`ã Ĉ…ƒ<Æ=Ë”æŠÏõº ÈÔÇÅÖ»¸Þ,ö/ø)Åìí%>%œ‡2ñ ·Q‰/;ëÄ•³ Ô¨,÷o¸n6‰Šp2iÀSGêd»–Äuô2Š£&uZ]öaX”Ü‘ó=C[M-îDlÈÌÚÏã`óóà«•P÷`yDãq`�EöƒÕSÜmÄC§Nv*,G½¹i¸»/áŒáØÆXÑ<däÇ”LÓòzzK§¶É!x]è¾bDEQ! K¾@mó#¿+âq»,²Ô¹Á˜ÝPÒÓ?A]×K•ÐÇV˜®ª`àD;¹}Øsñ&¼k´Çµ.Œ;p“ɦé>ÙFœç):›ÂM{¨w’¨å/âºæDOϳðœ*S½°Ò#+-]ýš²aˆý}~ æ[<HÉîÕ²šjCh¯Þ ¨_eÄe»¨³ÿ)5ˆ²ñIÙ´æ?”‰WȸJtãVxá@ß0`õJwB—^¾ÌÉmÈŽVÚ}¾¹›þ}A)Ì’J¦(Cêd»–an©¹È,9‘•ó ú|”›nƒc\Á<a®û×¥e:Ë–\K»#þ„TŠ" ?]€õ¡0¥tÐù3ª²·Htû]±/ó„žÞÒ©m¢ÌbøÖUtNF –db¿ßØQwäGØÿcGÏ`HÖð©ß`úâg¾ÜþÔB†:·‚»Ç #7­ÂÛÎÜ,u’ Å8™Öeµþ8GÓd;*>ø­®×fžÀ²+i¹ŸâHñÞøãvå 审ò x'1‘ŠšÀ+ÁÖÞž[¸x¼™º4Î n^ l\Øo^DUIJª.â¦Ýîöß>¹QÆg†2ñ·Q‰ž êTùló×j‹£F­ÐËö4èòLxÈê’Í.g§H~„‹3¥$u²]ˈ“¬» 5§ïFÔ$'0ÓI4+l9É‘éxáwˆã_—ÜÌår#ÒwYðTõÄhìt5ZÌ­x½[ë’Š¿[DádUÂNoéÔ6bC±%ì~>§ù0LöP%†¹I~ê‡ð;¼KíiŒp­ñk”í:"±övÓ6X®©srk²ô„mعݯ‚Y¸ãcÖ~…õˆ²˜Åhûl\_äƒ-(TÜ#@e×PÍ#ê ã}貚‚ò׳Ü2/ˆc] OM‹—«D½§IáqX#¡L<BÆmT–IµßŠþ¹¸o¦M‡p#–q˲Ƚ›¶˜|Þ¸õü CÞiN²È-’:Ù®e':£ÓâO±H>ÊJÈ‘éxîi=¶‰¿#·úúçÝXÉŒ¦£Ø¯zü—¸˜\ýµw wá³÷aDò®»œ ±ºaJÍ1”œû>Ä;ã{œ+ÉEN±ßÂËëØ¸ £ó׌æ=µ°¿Q÷i㜗K© }.ßBöÑ[pÇk�w¡µg…xÚÙÿÍ7†‚/Rˆ0 ßìò×1÷¤—–©y;÷ôöT߯Ÿ}·Pó66V°ñ”¢y[u×Pm3×;ÒXLk&òœÇõùÐ%a ãä–š>¼|gYÏda:ÃÚ eâ 2n£"G2(6ó±ÅÒ+Œی÷•ñVpañˆR'ÛµÌ2RXS&9“™Ž#Ç<©9X Ñ`Ÿ˜€ç”È,È –“¨¼È\Çç –¬ªņ&‰ÉªˆÕ…�ïÐ^…¹Yx}ƒ‚w>…Õ•hvü Øjª`}Ξ9S¶³8`u‘bDxÙŒâwvÁØj_(ÑDzóöZŽÄo¸¹›Pœ§BOX"Ú©r½:uE…—h¯x/Ê:ÚtËë!7ºìjÜž„«Ý,^×4Ø"3M+Z®¡‰0ýG¾nÇ È‹° ÎvܼX…¢Âƒ0Y»àñBàÙ¸õ¹p‡ƪ²¶B™xƒŒÛ¨ÄH(J<~ó¾çèþ΃å7Œùì0flB~åppX€?u²]Ë0)V6ßó!q¸Mh‰;JÈ‘éxƉúíÁ`›¾áÓry\dîT.³à2ɪ>9çI{ŒXÌ0”;¹'ÔćáöV|À‚øØ]ÀÓïx# ¡yÿ òÁgû Ûý.·á$´á3ãrhS'Æ‘yÜìÈ)Ç·¡Yî/ŸBáÖŠð÷ZìYvÚ¤‘ÄÜ™•!•®¡‰Ü|N3pçY·€o O»¬0UìEÑÏPÙÄ“[2K Ú#áÇ¡gI35O­k/”‰'ȸJô˜Û°â7¯UX¢˜ù…‘Éva‘Ûï¿ÿü!Jfóó+5Ó±ø;Æášé8Ýú3~ãö ”™~‰ßP1”Ì,(*>Ñ’Uýç*7åÄ™ØAÝ“{BÃøÚjüü¯oFnðm‚?àÓê{]˜Ä9jü1®U~„q†[0ãö“ÊÄvLðºã>QÁ¸n¼¢£rJ[Ýž'Ráš0n I×Ï|dKž7¸Kóü5Œ×¥å¡Ôx§ -œ·!ñøÉ&ÑLŠeÖû5Ê$G¢­•!ã6*ËÄ܆µ€ß¼V™7j£5–-•f 5 y 41ˆØú~ÆÑ¸ ¤äQ¿„Ò(™Y0öB¥Ë>çÆ„ø;Ô<¹'4 sG6bë¦A÷dbœõEؘ‘‹l]ÎÏò+Ùºœ¯ðpY/‰Dã¶h…SÞ@‡ '·,æz3ž‡l Lyiq—"âWã–Å\^†Ñð ®;Yœ¥øÚv‹u{®–ïˆëàdäŽºë¿ ÇY¼ŸT¿b†ïU#›Åã§e!_œvæf`}öq´¹•ÖÝÙz/5”i5z{1¹HM´µ2dÜF…ÅÜþשQ›,ÿó?ÿƒÌÌÌ0E5–%•P‚X’Ù|ã@†r|ÈJfïÝÕ:˜ÿõ0$YÕCtYNâX³+ÎkWûäžÐ43}¸~éWŒ­¦EH.„×ìþÆŠbè Kp´¶½¬JA¼Œ¶¢ôcË2U ˜WH)J[ÿ ¾N%^¸¬¥ÈÌÞƒJæMVµù°.½õN*"|#O`ëä fû"$Ž¢ñ˜»Y™¥°8`Ýý.Öé PÛ«öý_Œ¥>^ô ÊLVt9‡á81nçüe#ò ¿„œÖÎ`¼·{Ë®+\JMŽP¦X:cdÓ’·»&9m-·QÑVZ)°Ý¤È…Nm•‚HQ²ù:þÄX Üdd)ÁK½Ä˜(•Y0ÆB%üú¿@óËx¤'ÞOî Ár64˜`¨ûN§ësÃÖÒû°v½…RÊtšoÇéÉžã­ ¢u0Ê<ÈÂ9n "s;ÌNµœh§1l¿ 3Þõ»QReÆMÿ)^|¬~¯©x`¯«Aó’êâb:ëqÍïÊ0ë¨Åæ­õèÌô]§5ÀŽY|,¿öG'÷¢Ñø´ VÓa• ¨²Y}·äÙG¨ÝüÉ’˜`)<8¡W,1[ïeeZuÞ^©I´EÆm4d©QëÆ­+÷1¹Üg9,<½¥S[%$Ųù®Œå Ô­—‚W¡lÉKNnmxøË·(Þø!Œöʈø‡š'÷„†˜ÆÓúбZÒe#³ØŠ¾FìN׉ëÒyô¦bÂÐ ÂK<<_ŠlV.%ì¹J$Ô ÜÍeH×å ¤ö'töö”ÑþG¢x%Yoaý \Zu®àqS’«Œº!IÛ‚ï0–”áRÁö/Ï=FÐ~ø$Ú'§1Ö]w•ƒT#xûÐÄýÆa7b»ñ.¬Û]h»X-…µø…½~Јc‡[8ŵÞ'Ê´½½R“h‹ŒÛhÈR£vV}Ú’A½¤qXzzK§¶Ê¢\6ß8¡„ªõã@9ùÆZ¨ÞBVÙUôûÝ W‚Èêܯˆ§Žg‘§‚3xÑóÃjߨ5ǵùØêßHšB_}%jüʧà4ŽZåڜDzµ~[Dlk×ÐÑϦSá/tÕ|ìŸ#Ÿs]Jbô–A˜‚ÛÖ³‘ŧ%ž‡ŸMIŽ3ê.ÉDΞµÃ0ÙÕõ¨™s]Å>&«%ãr3*;^?¥Ì«¡ ƯPwý±¸Æ²×6´ÜìÁ°ê &E¬»6F‘]DÓíDýS¹Ÿo¶ÞK eǪóöŠ¥K‰MF{ˆŒÛ¨ÈQ£vMU|¶Ø6ÀP¸åßþòÞMÕkdΟÞÒ©­Ò(™Í7^$–ƒP½^âr(œ-ùê7°<w1rxĉqáéÅÍÿ‡SWS÷U”êGÔú<òü]òQÂ3Ü(ËÁ¦²¸ÉØUa¸ _ž¸Xo&Ûqøp;&}Ãè–œmuÁJålß>ŸD.”YøçüFäUÔ-A¡^Â’/pÎÒ‰~5Ë÷-̹:¤eïÁçŸmŦüQP|1î²RªoJrŸQ—!„מz€šMx®¸p–GxnÅ®œr˜ÃtÉ«h½ÿ§ú±ÁsOP¿ímè2>ÄGYÙ(¶>FŸõSq¬¾¼Ú2aÏa²ã<Láëö’¦D‰,™B™V·—xM1]­/Éf‘q É5j=è‰X4Ì8¾ÅnÃ}ñ_‰µ‡’Ù|S /õ#QV¾‚Ï'ªËRàÜÕÔmEá|ÆÙ°¶ û­}˜#ã6…LÃuí�2Y–ÏHÅfãè˜Ô¢;šBø^¢Ëp¦® +ñ|ëkFíÕD³³¸Áû¸ÑPëßÜ1š›Ñýt, ,ùñï:ÑX0Þu!˜µÙ%êfˆ·Ô‘š›’ÜgÔ aÆóžZØßøð²ù æ"IÏ4Ü·aSqƒ%þ˜V=êYÕVÿÓ¯ac—ï±(ÇoàP½ËxÜ;ˆ7³áwQxá@ϰÒ#mˆËÊij·WR¤ÆÕšŒ[ÅÄOæV „.¶î!ôµ~Mš¨£FÈøP+–Í—à_¾œ»šŽõ û ?U'×63xný 9åÿ ÙÝ[ÓMÜwy8P¸ù!M6Ê&@B1·"Ì�¬ÿ,ʆÂßP`¸«ZïY»ï®Ûµ'`ÜÀcû*þ˜KÈÁëˆMÉT…ˆ9Ïuõ?߯·~#—ƒ'mø®tFn@ðRþŇáö¯p¿ 0‡Éö“8Ü> ßXW!|J2ˆ¦Ò"aYÆC<’N•ïÀ6¿gæ Ü7aÓ¦C¸±$™˜Tbº&Ê$>;xÍÁ0”Q.Ñm9FUöÙyȸUŒX1·±µöwQ%Ö&Jeó%ð-_®]M‡;ÑtŒS%j âBgËïTúg%X¬äá“°>9Ùð·ßá‰×Ý_4jZ+°qÝdê¿Ä·Ö6t³ßÑÝë·_BŸ™ŽìêNuîÅÔo0æl„ˆøld¼ÿ>2t ”ÿà&ä€ÃŒº‘0wä­ dÞ=YmÜVè—葬qPþen�×öm†nIßtØXy“Á©‡¨‡f!wg¤7’Øö[Ñ?§°q+9”IdÕeÍeôËëjMÆ­b âªÁŒ»CÛÃ10š’̸ß(œ÷~@-SnR˜©9uð;qÏR'*o¼Õ§æÜÕ”g%jÍ1‹q‡hXY­hêM‚Yxú»ÐÜt›J-!Æé†oÞxO[ßüãæ<mˆ2Š¿̆ڂUI.$þ}w¾;c‚Åö >»ÛQyåQü1—†p“Qw Sxz½ ÷yqvÿ„òñÞ/xp4Âr®Ù9hP»ü‹?aÓG(7‡'skj}�—šqê ŒàAw¿Äp¢äYõ¡LIÃÕÚþ^ŒO%fø/·Š1Ç-ü?¼f‘#Ö Ü;ö!tl‡,ë#Q±ÙÜŒtd½¿Ëçu…á»8–ý–8W¤#+'ô;s‘±þCm{&qÒœƒçñc<‹´?…¿ÐÓ¯áǹ«©û:ªª.†÷íò)n=¤¾µæ`.~GñÁÑpyg1óÔ‚]éï ·¤Å…&–€H->› Å–¾¸žû9§¹¥­Ë$‹0Õ} ùæÇâI1r¸¥ªrÀtŽ3êòŽ÷_…bÁcG]Av[R?ÃxŽ–ª£¸·=÷¤—ìêŸÛŠ‹n7Ù–l|ñÓ¿•XYóÅç?ª«µ¶šJw9 ã6*xìp/™4 Bç>‹±Ö` ÜÝG0t<[<𢷾eñfÌä:£®Wœðó¡Ë;Ž…ÓZq"ïAýÞÊ8³ÆÂwÓaèœ ¹n±:ˆümçý1¾‚»e›rPvãYlYòìj:5„þ¿"]³^ÃQwP½Z˜k–íP Q‹ðíïa}á¸|o0h9DÙ’Cñ>Æåâh®‘bÓ}€ ËÃËæâXWˆÏu[Q¤F]Q9<*Æþ…:S;\ r˜…gðsÝNÒ…dG¾‡qMkèU;Ü&Vø.Ê"JÂ{ÿVfõeÍàu^FqÔòV,áÝaXdð($ã6*2¡sŸEŽXkøëA.d^$´Ö¡ðzËí¦sèÞ¶Ûå,X¬O½ÀLˆAl'²¹;"®›µ#°ŠÏùÊÆmjŠ—'»uVGx|Р­U¹HSC©_Ó0w´C¨nw¢¯í$ræã+™+çþc7jVþ„K™%¨m ñ8Û†ÝØâ÷’hÂMÇè²FÀ¬ýkl<• ;íðÆ~z5NnåpKõÈ:¤|…{þz½|ž?Ñeú»Iº• «AòÂýJáM�M"êÊå8g )ëb1¡${+Ê~ÃH\ƒSIÄþ­ÂŰ¹¡†âšì ÷Oo¯Õ˜5ŸmÜæ"³ä,î k—`Ðç]ÜÛà—61q9‚ÐyÏ"G¤Þ¡!¼Z2«ù0Òóoô+?!xl0mÛ ãíû‹qÝ·p±<…µ·ý¯XÅqºÜ).×ugáÐmÛ¸½ëþÝmP¾¥µ¿<_wÁzìDÆÁ,Æ<ÀIóm¬D l¡â ›s¬¢´¨Õ„ ×êBðôÀ\ø®xÞBö±»žþíçOÃ`¸ÌgYµð=C[M-îDxUÍÚÏã`óóà«mEéÖJ\\P´XÝÅ ˜æOF|.4—~ ƒM…ç@·TñÙþ¤¨5zq<¥ï‚©ë¹³*®kÉp® ­¸¦±ŽfR\NZä5†#6Ž„ <ªÓãÝp©n{Å.Éù‰ñ7…7”åðöZYóYXBjN‹kZ؈F¯é$š‡åYÛÈ¸Š Aè\g‘“cG‰H6ÙÕÀðsWÐðšo¨/ù†Ö‡p *WÁ_ ~}äx\ÚtÛêñ4Ö¢ÄuF]¶ìÅú(×ÞÞÆ¶ú'ñ)…a0g)ɪØýW¾xyÒˆ ­¡ö†Í<y1bB&‚ ¥,füÿÿÿÃ6n(¡TtX€Á)øÂjY&˜ èú>Od‰ÆìÆlPš—ƒÜP§tMØ8IØ-U4ný.Õ¾çè2íBúºw¡7ub°ëŒòÆ-ïuÝ?¡¢ü|Ä)Rhk€Aÿ~be¥RA" ÓR‰ð5ûQÑÐÂ3ÅÄOuÍø#ÔÉ횦 $§LÞ^-_áÐ÷¶ðP&^¼½’‚·hhêET§jß_pô<'·då˜Á¸ó,µl§¼ ­ÿ^1n' ®³Èɱ£D$›ìbœÜ-´È«nS¨¦â+tœþC¡}”¶\ªúX§{¼dÔìÄiÓ= E»®…ö#žÄW5éɪ„”/Oß$Æ_/›IÌCÈ%”Š™ò�Þq¼™'\f˜WKló¼që1 w×YèÓ×ãí´wQ¨´ÑÆ{FݘÆíø¶ü¿Q®Ë,Áe'_cæåxˆsû² ÷£W²±¼½’‚¹%€ åí![¢Áë ^‹ð®¦/°Ï,ms„ŒÛ¨ø0|¯ÙÌÏ=- ùz=væf`}öq´ùãUâá9Z ÕøžË,rrì(‰#ÊýêyÔ?r…Z¬õ¡µ² fû3ñgœ­&œhu+"wÉ©é¹Ï¨2IÊŠɪÄûŸ‚âåI#CbB.(¡T܈†›"y�„ÙˆÓ` #ÊhW ¿8‡ƒ'"ìôä. ›Sp"ÉyFÝhnÉLÁnýRÔuHןEWÜzŸм,A\5Öã_aÞH°;…æç©¸§LGXÅÞ^IáÍòö‘àk†xŸÌ‹Æît7ªÒv¢þiò÷ˆŒÛhÌ=†yËFä~ ™4f0ÞÛ€½e×ñ2®‘És–69v”ˆÄ‰áÎ §+ÑᣛÁhÇ ä(’ÀgîîË0¾Áu'sg_Ûná¦ýeü‹ëŒºJÖ•#Y•¸P¥ xy²È‘˜‡ J(7\çPDÜR}#pÚæ õ'Ê x£={gŠ'JÒXÆZß_xX÷ ÒÙé^e3žª|ºLó²¢ÅÜŠ&g=þ^ܧ.Ÿ<«ÞÛ+)|xÙ| Ç:Fƒ¯Å«d9Þ.Z($¼lFñz’ü&.·Ñðg÷û–Á%^€¥ðLÀO_˜ÂøÄ›ÀûQDS•߇LFþØÂd‘ã<këªeåXç¹§õئËD©'·ß½¹[‘•Y ë€ÖÝïb®�µ½qN"\gÔUÒ•SŽdU¢qµxyFxØy—#1!”P*N¸Î  ¹¥ è5ï 6Ò²÷àó϶bSþÇ((¾ˆ^Å7Þ3ê."xÃZñtº”Zq3*Bó²¢ÜþŠ_Ìû°ñ]#ìŠý5àí•$Âä}Ôì>‚‹m]xxïTü ë6îƒñÛÓ¨:õ%Jr7B—}Z’ÎFÆm4„qØM…Øn¼’\¥ m+°¥°¿°×qìpË2;?±³´íVÜ×%b ‰M³~üZ@”ûJ±Î.“ÿ>ü,¿;¸¿ÐÖzô â8컄Ok€M¹>çì©}$šoq+æ–‹ŒºJºrÊ‘¬J”õÄ8&Ƥ¸))3º‡#\1W¿‘À5>F–‹'bÏI¼äŠ n©‚Ë‚íº·‘g¼1Ÿ8ù³$»üY€Xú–ïu¢LÜm¨ÎÛ–MzaƒC¯ƒ/T@ðbÄÌc¼€æî>Œs‘Ljîë]U•ÆðÐå ìZŸ¸ª+Éê÷öJö¼uÁ|d;2tâµä~Ž+Ž Â$úï\‚ÑxÝCȸ†?‚8É-PM·œOxô,mÎÖjd+ž¥m%˜‘µÚüøµ�›¨TŒuÜhÿòLpóbí‡O¢}rcÝ5È‹÷Ô5VFݯJ‹W( »rʬJº›’‚¬v#A‹øFá¼÷j ÍÍè~:¦þ8á 9ò� ßÕÎÈLÈ|lìÈSÇWüëv-x£ŒÛxl_Å?÷Ë Wug0f7£0]'¶Ÿ ®ë¥óúc+LWÕÊ–ìórID­Ó·}ô–B‰'aM¥E8âwuÑB6ïSÏ ®š¬xv?“K(™8kÀÛ‹cȸÊ&;ÎÃÔ1ò@Dk¯à‰9¹ÄŠ3Ùˆ­µ¿«ìú»ýøµ€º±Îs®«Ø—¹!ʘ܌ʎWÁO­À;aXº¡#Œôâ~¿Š;ÛA”uå$&«’ÃMIA¸O¶Æˆvb§ãd#„'äÈÀóÆNL·Ô³ø¿ÿÏPðÕ LýcÎö@öhŸÍ€Œ÷ßGÆü ÿݵ‰ànűÂÈÍæð¶37Kù¬Ò1ðǾ³ ÆV;ƒF™à}‰^Ëì_®&}JõÜÂ,äîŒ.·ÅؼO=R×l)¬o¯¤˜Åðõà‹{/¢\ƒh›8®ÂTýÃ%ȸ…äL‰ƒ¸j0ãîÂŽM ÙŸÌg+TߪôãçŸX ¥BI°>cøëÜæ”Ãj¼X¯¢µó?‰w˜@†kèӬݯ?€¿Z`s<[fÃ'EpëÊ)‡›’‚p,l­Á’n”â½­öÁà35ïH,e”P* 9ò�¸By‰ –…y±–s¥ÈΩPgcG4hÛ ûQay Š•%úÈ Æ~ÿÕMñ\7ÀïΈ×h{ŸÝˆŒŒí¨¼ÂI\)ïLÛ`¹¦Žqë³}…íõ,ƒÂ …ªç¹x‚:ã=q4†#¼p 'b3fM²Ú½½’‚y0a]ú˜£Öé~ƒáö/‘Sl…K‚.IÆ­b¼ÁÄ8¯»+ÁÁ¶{ÄšÖýøyG”{´˜Û°RŸQv¦áî¼½ä3¡Ä$1O8æ›8†òþv5K'p‹nJ Âu²°µ+—p ?FèFáGŽ<�Þ|>ÂuYØmX>¦P F[Q²~Ö—´b1§(ƒÕßo‡¹|+ÒÖ¥¥ Œ`>•6m×ø´úFþ>óöyŒk•a‡âñÒ+Ý-ùTùl«}$ŽÖ¸o¦M‡píl„+ŸH=9æÜÛ+)‚öÇÎ:ܸt—¢¸¬ÐÛ[E=8yW2n…-DÁ$�ÁÔû|Ô#WT?þ?ðB4ÈI‰U öPÇŠ¹ mÁúŒÁoɆõòÜ?ÃXÿC ±=k=Žf›ÿçAç NÜRäôYÛÈᦤ r „L¼ËR‰êŽÐ2]l=ù •9۸–ËÔ¿Æ+€0·­f#SÐkQÿíø_‡ÑõtAi<pÖáýwx4ÎŒ‚P£–%`)Gí¥30¨ºa2î„ÕlòhF³wzÜxÚÆÂÆùZÎùYâX]ÎWx8©–Ëí<˸%ï·¢n­·RáÜÛ+)‚Æ­Þ 7ËâÞðÔÜ{Îü¥6P) Nñaø^5²Y€´,ä‹ûÎÜ ¬Ï>Ž6ÕOµ˜ÿ^/™´=°ÕT.Ôš"ä&së|=Ûõ 0²]ÎÚKhµ ¥d•¥^ž§ŽgKÇדּ g;†ÅŸÄ±5zU95*'MãÜ”ƒëdak¯õ…›‚›a;‘Ÿ•.®o!Çp“tCñMbÜóßa†iÂɪ–ʉÅ4†í-¨«üEú‚FmÌíÎ`¦\õNÃ[W–ŽÙ¹'-¸Ä˦™o÷ ‹÷?bcån¨°Â©r­[¯1Øý#ŒÅЖàhm zÇx0Gð »_‰¼¢±·,œ{{%EˆqË^²¹·~? öž†¥­ ¶îë0êßź_ c2ù-~2n•bî1Ì[6"ÏðKÈ";ƒñÞì-»®xñèåàu^FqÔäBë Ë> KŠ ®µÆb£tdÄg¹ÙÈ׌bs ²FÊV//Ä#!²,ÁÜÔoKCzé ŽNnLÛZq{Xí%˜Å\ÿÞ,×åb®W„ ¯ùUSÖ"‚×…î+FT¢°ä Ô6?ò—r!BÁ0U·TÎJÌÁëþ ×뎢¸Ô€Ë÷´fÜÆJ®©ÃÆŠ6Œª~ ôÖ@§{úãßÀÚ.*ØÌˆènƒõÛ/¡Ï| Ën¨¬³qŠ0 ÇÍ&X­×Ñ=è_O¢¿³M7{0ÌÅØä}ì­çÞ^I1‹áæÏ Ûôt/xLcØv ¹Á*51ãq㇌[¥˜}„ÚÍŸ,¤Þ_@€¥ðLàTK˜Âø„îe¬h.2K΢1äÏj½ƒ>åæÅŸÛà'EW^˜«ánq͇ñá|þ¸ºJXÝpÔU§ÀÕpî®zNü×lâ_Ûná¦=Ôõq%V*KÀ~篪ít #÷q¾„r„öµ"QÎjïlúT޹&´†à õò¸‚vÇpÏêÚ@Ô»R91¼nôÜ4£²¸ UçOÅï–%¦˜‘š,÷ƒh*¯À9KHéA‹ %Ù[QÞðFÔ60&ÛQ¾!•íî¨÷Ù_J®Tƒm"ø±ÈÚ+vâh+s+ÂSË^¤§å¡äÈ>î‹Ú‚Úp>öâgo¯dñMbÐ~MÝîðùYðbüÅKŒË¾IÆ­Rã°› ±Ýx#Äͯ m+°¥°¿°×qìp‹ ;‚¢ànCÍé»'D¢Ñk:‰fÕO¸V+lSá¬+°`Ð/÷yãvXü±âIbæžÖc›n2r·"+³Ö¬»ßÅ:]j{ãûÛ|—%`ñ)[±>¯#\¯­MèWݹã¨sMhŠE/uÐùãí>BVZvYž€¢×‘Å0ÕZ©üð ñfKV5Ëýk F„»xT§Ç;»áRy¢cã'c»®˜—/àýkÔ>âØýV%fí06 _”0Ú†Šï %§ =ÄQ¾ÇÞÊpîíÅ1dÜ*…à‚uWðˆ}¹¦Û‰ú§©ŽÁÅðítO¼ Ÿ¬çž é’]弫Svr¶Ô š3ã6ïg½ ÝÆ#hUvéœuÔbóÖzq!0Ów ŸÖ<ïµ�ŸóöĹpó]–€ŒïÅö%ÉDf}â‚üY5Ô­sLh‰i<­ß nªÛú ÿ)Ò~*†,†)Ûðå¨TÎp'šmËÅzñ¤©ãIS=Ë}еڟ¬é4jëëpôéQÞ‚pœð—•Ö.Q~E”1~), iíþmÕyA=f^WöïW;ü. tÔìGcoeÈÛ+YȸUŒ9Lvœ‡©c Š Ah{¥B]Pv‚­ØR`d­m¦á3†`›„ݘ‡Œüc¸âHAFNÁö/ÏïïÚŸDûä4ƺkâ>áà»,Ø—ÑÁ°ïº\¡ÏØsôY¿ÃUÕÝ’„»š¦.¡ØŠ°úÀó2{1¾Ø'vJäø7l2‡®"½<æ¡R@KáÌ0•ƒQÖ0ÞUÍr? Oï¦ë°.m Š>߇ÜM‡¾ Tr\,Œ¶bÿ¡vÄÞJ0ÕmÀÎ(›ºê!Žùç·`¾åOÉ£"!÷V÷!ŽÝscÚuçÙÚÖ`ËØXih…m¡¬ï·W²q«xÜ;ˆ7a…×#þBO.Ol7È€ªïC⬸l؃­å—`¡ýÉÕÈœë*öEM"¶•¯‚ŸZ žËO»–\k<ÄÜŠ¼š ÅV@ðüSn:2 O¢¾5˜d¦×Êr‚2 ­&”…yW4`ûæØæëŽ{ÃRþwdl(¡“[¹Q5&5 ̸êb`mþ¾ ùïÂpyq½nü¶99h°ǧ?¨™å^è‡e{ty&<d~}6ЬpÏ<BÝ—qN“þp¬+Q«Dˆ†ÑàmTçî„ÙÉA ¶ÑØs "SÇKcqìx^EÄ|úàõò0Gq¾±²"äí•,dÜ*FôâÖaíÔAäo;tQM%¦ðWäŸe‹Ín#zhÿg5"<·bWN9Ì ¬]Eëý?3¬¸-K víe kăˆØ2›í FT7ÊÔN(¶¯;pL߀¾…ù(˜EtÝzd–7¢×õ]¦bìS=¶z­0ƒ±Þf˜ªÏ¢µ*`Ü:Ó½¡¸¼,ˆP5&5 !Æö¬ý, —œŽ¢£ò£øOn‡ïáJ竈Ï2׿&ØÙ扒YîY\æ»i‹µ:ç[ϯ0äV'.Ó÷ Ï<‹òð=Ãóf´…¸^¸ÚL(ÝU‚ÊSgÐ`‹”_ªÇñ>tYžø³É²’Pe0^8Íocñ×_Kí5—û•øàÖÛ+)›!óÞ#/ÆK ²„yÛ¿áádŒ[ÅX¦¸uX;kªcn}pÿtÖ?†XÀ-égTeo!—·UË4Ü·aÛ€,~¼¶éù©ð &Æ#&FnbÉÕM(¶³ös(ZˆW ×®_‡u™ÇÑ1?f(öLÆa·˜ðu»‹ÜΔBõ˜ÔØÌ9¿ÃÎê®°Z‚ÇŽº‚t¤Åû,Ƽ¾y×f%³Ü³ð›|l©}H„Æ ŒŒ÷•ñ–zåX¢ÍcÂ,|ËyÚ©Ä\ÿeìHcn¿™È?r×ç Õªm„­zÂ|c5‚/«ëÌãÆJ‚ðìí•Ú½¹º÷Pxª­þjfú¯¢,ë­ÀØÑ}ˆ£mÏ$édÜ*ÏÅ­™´˜[qßZØÉ%R‚¶Æ4ÄË‹XruŠ­DØ ‘ðíËÀÞæÁ r"ößf§ªÇV¯5µã6dˆÄQ5&u„tUoCfþ~T 8U¹y°.½õÎ87ÄÜ?¡¼ÄË‚ÇN#,çJ‘ˆk³|ÏÑýËoó‰GÆ&äWþ‡J%㢷ÜâƒgÐŽ›«PTx&kœ#^<·~ã1 %µWB¼ÁÄö£ú-A/±›Œ«¶`p¸±’œ{{%…€×'¡¯wî ÃÛƒÚ¼·E}# åV;\OïÁ´£BRø ·ŠÂk »h\ýµw sÁ²Ùû0"C})"~´7¦yCË ñãø¾j;ÞÑŸÂå……ö|[¾9ÜÄ’«˜Pl%¦À°í êïu¢µv/2ı¹~{ÐMÙ_—®•Ù»PŸrO“µ·Š£fLj<“è¿Ó�Cy1ôúÝ(©ºˆ;ý“ñÏQbЧ¿YØmHG@„.d¹LjŠóˆV=P|cxÚe…©b/Š|†ÊxKA)†¸žµÃé;õJE£×tð:Ø“£:¼m¬$ßÞ^ÉÁ®©r¡t›ßýßR„õ,üéè/Á$dìТRÒõ‘q«<²‹ õÄ^«Û BDsÆíp'šîEŒßØ­”#À;4„Wþ?Í&ÍCK¯×¨Ì ,à+Ãæ¬û“Ž…ºaz1Ø}=¸YЄ›Žˆº„Âq«:JƤÆK$dkÙÈòuÔ¢¡õßp'¼=ƒqç=XjOÃ`¼€k_£l×4(®„èBëXõD„é{ayªR°ˆVÛæàuýÌA¶d†¨Oúx^[9ÛXI¾½½’#\O ÔGç†ô24»ç Þ ñ:J:™&ãV)VI ;¡,š3nWŒÝR/œæý¨î5¾DÅêÑ7(XŸE±äñÂJ…–"Tf#N;zCà)FɘÔ&ÐkÞƒt¶á”½Ÿ¶›ò?FAñEôÆÝŸh±‘)Ê~îßxºÜ ­"hP2ãLÅZ¨š2n™·Ïe ßຓmD°±x 7ý±ŠÄòp¸±’0{{% oú ÛJ/â^W j‹XøS:¶ûÝ”Y²©AØ­G‘½­ý.Œ[¥Xì„òhjL3BKT̷˧P¸õPjb·V@ëDuÎûÈ?xÃIT~¶ :Ò àTÁZÓÜý]‰YZÛx8-X#¼±£îÈu¸#‡îÔo0}ñ³:†Á*@KÏ¥à²`»îmäïcL4D}6#Ь.Ì8Ì8gü»ð²Åï삱ՎÁ`ÉÁû½–#دtöóH]ha�–Â3êèB2nçžÖc›Žf[‘•Y ë€ÖÝïb®�µ½ümØrõlñ¸±BˆÏþzë? n¶mD^u[`“mfÝMóºeãÉo&jJóÒ–¢¨õ@v"hÎø™Bÿ_ i�‚¼†£î Ç‚¯ÕEðôáN½åE…Ж¢êâ]ô«_£¹ûëwlEs] -[æo§PUR *Öœ–ŸX•LÁi> “=T‰õáeó8¬º§„vÑÒs9k7âÝu»bÔÆí�<¶¯§æ?»}I9!ñq´ Pq#o }õŸ`³áA0c½�¯ó”çe`Cq3Ü®À¬£›·²S,Vûú>­aràs^ÀQ¿äÍ1•«g‹Ç";¥}V HN4¥yiNQä6=0¨æ3B*UgŠXÍiw+ꬎ…±ãoƒ´Vår(Žíq'îYêDcLý$nÚº¿8ë‹.ö™õ;zKƒžŒÛ”"¼¼Žý‡C6Dg0ï©…ý ÍÐÉÂÆ²f˜ú Æœí¨u¼ö¿ôÙ Èxÿ}dèâ\?àÓê{]pAfóäc\«ü;R‘ýÜ÷ ½×Ρút+úgæüÆí¡²s¸§Bi%?ÞÜï z oàæ8‘¦àFû—g‚ñ•#h?|í“Ó뮉{s#•ðõlq¸±²æ™Åp[zV0ƒf{ÚÐ6œ¼­¤)ÍZS ×̦¤Î±2šÓ±bnÓv Ö>üzÃwq,›átdåï„~g.2Ö«7–5uG[Qò·}0?èÃpÐu1Q!~uæŸÈ¸M-°ÕTÁúœÜ±x¥³8`us")4õ\²çÎÝ…ïΘ`±½‚ÏnDFÆvT^y”@ËÀÆÕÆŒ\ìdõõYÜ¡(]ÎWx8ÉÛÙ_Šq_CuäÉÞ<SXMfXïô$‘ÀKæ\W±ÏŸä/rÝ݌ʎWÁOñwÏo++Àüd‡eB>€üòža¡íÊóÀêN^kÓ”WÿMO©©3E¬ŒæÆ´»†Ú[xZBÊÖƒ'¬î^ð#êÁJåC—w §µì„¢õ{+UËZº¿>Ûil3?Ʋ*µ×f˜ ¢éw¼†Ð¼ÿeþ–ÈšÔ%„×ìþÆŠbè Kp´¶½,ÙeJõ¨1ÁÜ|OÇSõ·WÀmEaÖ>œ±´Ã>8¹dTðö¡©4G5á¹»r‚5cÚU´Þÿ3ÍÔÁß³ÅñØ‹Âꟛ˜q[ä¿Îå[·¼À{ÿIM)be´3f‚ø&1îùoÊR(ÁµKãk0ƒAË¡àXžÅëñ¥ ŒRhéþbùèT–KüFm5~þ×7#7ø6‘š›w¥¢j 7æ z9XblQyÕeG§gÌéí4¤ù“Û2R=wm¶?‚uÿÙaÀ |¢ÖÜ8ÜŠª²‹°…nh©Y~oyøz¶8{QàK~JÀl‹C¨ì ¾ŽÆ(:*‘qË Ú”©©3E¬Œæ&2YÊR(EÀÝ~Ûv#n?œ?U~ˆî¶ (ßR„Ú_ˆ¯»`=v"e§¸Zº¿,£ê§û[—Ov'Œbp(ûG¤æŽlÄÖM‚îÉ„V¿A¬p’T”pc3Å9Ð^<¼éµ Œ‡ŒµónÉÞa<±Ý†åÜ1e§ä£ËDþAþYµ»Õ2nÕ¼wIÀúÆ ¼½(p%?EˆçàŒÕó­$ã–´3(SSgŠX­Mdr”¥PŽ<·îÅzQ¦L®±ÛÛØVÿdy÷[™`O3ã°›ö¡¸ögØœ®ð¤aóí±¦«tº« 3}¸~é× g !M=—rànÆÑJ3C][/P\l@“Ò%ÜX¥ˆíQt ^2ÖFM(åƒgð:›¿ƒá`2t*&Òsÿ„ò, ÷®Q4ÀK‘SÁEù½H¸z¶x{QXýsÓ,F[?ÇÇËé‹B?,ŽV á7š’"ï7][Ьòu¦ˆ•ÑÚD&GY E™ìÄiÓ= E3ÌÚ ŒDM˜$?š[¨|¯àh½�Cy1ô,ñLXÛ‰ü¬LÊ–œBïl×/ÀÈ’lÔ^A»cXýgl°úÈb–p«€QéD€LQý´£!ß7 çµcÈÙa‹7ë, ª†lx_`ðUøS/xì¨+ÈÂnqíå! (®ž- ޽µ07 ýõØšy­Q]çán=‚Ì-f8% nMI‘÷›®½AÉNi•«3E¬ŒæÆŒ e)Å7„Žÿ}†ºŸádnÒ>7l-m°«_³êªi,×ȸM‚§æÂwýcHçÏrû²Ò2°Ëòd1 ‘«î¹\‰¨%Ü¡¹2'%ÜXÜc 7f"w'Û$cãX‡uº­0<Õ€î!`ºÛ€=mê Ã÷P³· ½ÜɯgK{coMÌM š÷f@—UŠÚæNôö‰sÒú{;Ñ\[Š,]:vXžJڸєy¿é«mPJ­3E¬ŒöÆŒ CY ¥˜ÆÓúÐé2ûQ62‹­èkÄîttyçÑëM}µ9'Ì`ÜÙ «ÙäOËo4[q§Ç€øfá[¨•I(ÇüXÞ†ê¶>x‚2÷gnÝŒ²ØKdM(¡ÄŠÛÔå‰JþXðCJ2ï`7®£H¿%GëÐÜ+®ÁåV èÄ~äg¼£^¶äqn2Oº¦ûœ xž¢³ù'Üô—päþž-m=þä§ Âp'j þ>ùÛ[È>z+àI*MI‘÷›Î{ÿ"ñ»¼µ^BmX}©ùö%JrË$t+£µ1ãG˜â8[r>¶Öÿ!šà¬x{%jlþ÷æÏQë”qO%š»¿¾!Ü3|Œtÿ"±àTX§áD `Iÿ>Àº ÃÖøÐÌßD²hrÞ•‚ûgÍwƒIö‚­ë2ŽkÁsÅ7«Ü¸uå>&#þÌÜ“\â 6:†ï¢þÎËà‹hˆÆÑó\ûu¹ì® 2ÙŽŠ¾D«ë5„™'°ìÊ@Zî§8R¼7E‰Á׳ÅùØ‹ÂZš›ü6HS-Ž–ì†Þ¿ñp–ާ²”hJмßtM J¯õA—·ØMZ)be˜œ5×Ù’Ùn`¾<q'ñWT nǤo݆bU mÝ_zk  Ó½ýño`mï (ÁÝm°~û%ô™oacÙ .3L®>Ìô5`ûæØæË}xÃRþwdl(¡“[‰hnÞ•JÔ˜Ûiô×£¸yHa÷ÌAXõiA"´é°±¢mùìì©ÀmÅ®üÜv¸<$ Û'ºÌû±W¥“ÛYûYú7lg1Ú~×ÁâòB´ ‡<ðõlq>ö¢À—ü” 9)xÝpØþ ‡{Jòœ¤))ò~Óµ3(Y¶²ƒø[ñwxðôe” 1ƒW­—ð·Š¢µ‰ŒïlÉÓp];L’Ñ6~ŽÉÔŸ.kêþN¶£|C6*ÛÝQ&¿Kl©ÿi8¡<3ëm†©ú,Zû§Æí¡C0Ýâß“s4õ\ÊA´“Û‡m0o»F»¨(É šÊ+pÎÒLT)6‹ %Ù[QÞðFÔ60B\¶uÛðYÕ7hlnBù/ðY^tþS/[òÜÓKØS}öÝBuÎÛA£ì5\MG±_ñ‰ÄáëÙâ|ìEaõÏM’¹º÷Pxª­~÷z3ýWQ–õ–ÿú×é>ÄѶg’Ö9MI‘÷›®AÉjH•Àìô_GGx= Å]–Ö6Z›ÈøÎ–ÌJ}†œò..d¬5ÝÄ}—G%@K÷—ÝÛŒíËeðÆþ5 j)¬  °Ìž÷~ð‡ŽÍÍè~:F†­ hmÞ•LŒ˜[]Ö!\c'ŠòCƒÉ{„ <ªÓãÝp©Ñâþ Gk»ð”%³1p0?ÓoÐê2 pÐðš;áéC3Žª•PjÁ[JìSv5î OÂÕn†Áp ¶WdÜ. çc/ |ÉO ¼î8 ½¿ôhojóÞ¯= åV;\OïÁ´£B’‡’¦¤ÈûM×Π”^ ™ÍMdÈ–ÜÙò{D-P>ï´*F–î¯ÿ^®´A!*ÉEºÂ­J¼q¹xsðä(ØdØÑ&48ïJÅý3L–žÅLÉþö*†×–°$u÷`©=ÈÓpã.ý¿QÑУ~"Bß(ܯB³éÏÂóôL'.áá|–ý%ŸI5>xFRy¿’‡ûgKxŽšý|Œ½(¬þ¹‰å“¨\8 :¸,EX¿n=2þÔÝ|¢ªQ))”LSRäý¦kgPúð²ùö·¾XÖ^ aH… ³k íMd<gKŽ…¶q2u-ï© šº¿£­Ø¨±Ól˜ê6`§?þ‹P6G—â½­öÁ RËâÿz`)£lÉRYý dÂ,|³j=µ> ß«F6 IËB¾^¹XŸ}mQë\òàyŒ&ÃiXìâ:çqÂö„’¸ÅÏVÄÆ 7 0£³úç&fÜB}àÙFÛP±Q‡uéehvϼ°ŽŠ:Û›àëÄÑ”y¿éZ”‚ÇSa)j[Â9º›;߆ðØò ®Ò鮢¬9%KQXM»Ë(ÎÜà—kdÓe ò¡`I›ÔÀþ®v˜„ÝtW¢n°r ·Q»sÅpB˜wÍ`~³%G>o¼7"EÌ=†yËFä~ 1*Dƒ£·{Ë®«Ÿ Î7‰ñ×1-„ 8®œ@yÉn”pTç–gøz¶´·±²úç&S¶¯°­ô"îuµ ¶è=ñšÓ±Ýï¦Ì’M Ân=Šìmõè—07hJмßtm Jq9Ðj6 ¼¨zñ¡o¬Øu1¹.+Œ&'²8@Cí%´¦Ø`Œ ÛÌEfÉY4†ÆÜZ/Á ÏG¹ùGñç68ÆS1ª¹ûë{†;çÍh 3p½pµ™Pº«•§øŒóZ}¼ËR‰êŽÐZ–ìâ'TæKÚÑV -uMλZeöj7â†D€¥ð ll€ SŸPiL»±e½Q¦1d=ˆÝdÜÆWÏï+QXs‹#¯ÿ,˜üS¼?Õmº¶3ƒènš×Û¤éjš’"ï7}u JÓÝM¸FÆ­¢hnÌ/pïØ‡Ð±R@YA¯ßÜŒtYŠnK‡¹L·¡æô] ‡uE4zM'Ñ<œú4Hšœ/F°šM`5¯f+îô¸9ÙÀXCøËµmBFîñ9Û‰ü¬tq<½…ÃÒº< ¥±¾ºÖê¥pu}¸8ÿb»ñ.dkîBÛÅ l)¬Å/ìõƒF;ܢޱÁ’mÍ—?»cÇÀØbi’<tôŒ_¤OÏ–?e^8Ð3̇®ÆÕØã}c% «}nZ„Ò¾ +$'š’"ï7]“ƒ’Âu4Ál4ˆŠ¬ fë]ôÌטšõAù 4ÖÆÌœÓŒ-º`èx¶hìˆc¨·¾eœ”%<âþõ 0rp²¬¹9Á7„{†ý™9YßÛ[È®°ÂÉA-㵄àu¡ûŠE…(,ùµÍü%¸xDKc]sÏe‚pu}‚ Ö]ƒóÈ2M·õOUpu7¡8ÿSÔg#Íß—tdéÁh¹ Û“áÀÚ1vÖÎáÀçSû*Jõ‡qŠ­g1Ú©òØVû&œ*°{É ¼o¬D+ùiMI‘÷›®­AÉN¹îÂPð7¿ÃšîTXsœ hõ ­1Ì:j±¹À‚Áˆ±ZP^ÍR‚§æÂwE¹¦#»è >ËÍF¾þc›ÕÉŒ¨­ûëAomtó§í]e » Öo¿„>ó-l,»Á¥+×ÚAÀ´­·UðBX -u­Í»‰Â×õÍa²ã<LQr{„6•²/œÊÎÁ;6�û ª 6#ãÝ@î]F.>ÎÍB¡ZnÉn+ Å>ì\:Ñö[ÑÏAž$®Æï+Q`ý!¤£))ò~Ó55(ƒu¥t™…8þ­íÝEEö!ºÛ­øöx!2u›PÖúœ‹“¸ÕŒÖ&2"²m»a¼}?¸ ÊŒŸ[¸XžÂÚÛþ׬'qX•S\§¸[4Îòa|8"Úó%¯&ਫV%NQS÷w²å²QÙî‰ó\Dðö¡©Tƒm"ø¡$ÂÈ}œ/ù xšÚŠ¸Ì… ¥±®©ç2 ¸»>U³5'ЏnͰy=p;ïãFÃW(ÍݽZÆíXºŸh'‰_có•(¬ö¹)UhJмßtí Jño?Œ ™_ }8šÂ?¯« ¥œ†mŠÌ[%ÑÚD&<·b×úHe{iÓm«ÇÓ”ï"³„R`ÝÂÉò¼q;,þ¿X• ³LZa–•uÚn+æ#/àýkÔ>9'+͵[±>¯C“£‰­©ý@ki¬k©¯É°Ú¯OYÄuäëÓh]œå|6#ŠÔ2n£ÆÜÎàEÏãˆÜ|ÀÝØÓÔÆÊZxvçàyüÏ"õCá/ôô¼”íPDSRäý¦kgP2#àïØné_f yÄÏ”¡Ö1|M(ö&²Wè8ý :†¢í~†´OÔÓ?e0e7!gK3ld3ã6ïg½ ÝÆ#hQVR…–î¯Ïf@Fе<&n+ŠVú !Ì a¯8G,£9Í… ¥±®½y71Vûõ) ;í«Æ¶Ê«pŒx!¯Ñ×°e­ÿ=ÅD¹=òü]¢~öZ\öžáFY6•µÀÍÁ¼@cO«_~>¸›CädÈxÛ©ƒÈßvÞ¯» î”mÊAÙgI»š’"ï7];ƒ’)ý̽p¹“,q�Z+¹¬§¸šÐÚD&Œ;Ðj±àJÓ} ²IÈóÍ?á¦=´d‰šLÃÝ} g ?À66 »1ùÇpÅ1!ÛŽ`"hêþ޶bÿ¡vL_.EÀT·;—-›Aȃ�ßè¿`Øw]®Ð£çè³~Çeýq-u­Í»‰ÂûõqÕ?á ¼ÓÇH3O`ÙÅr7½‘ÒËÐìV)]S̘Û]Øoí÷ AýSf[ì VˆÓG`íŸ&ã–7´3(gE=öKj ¾ŽÆ8º« ^h„rhn"›lGÅ_¢Õõ‚_È@Zî§8R¼†‡cÁ¥/ž9Ÿ‰ÿeIÒlh¹ãä&š¶î錄dÒ•°·óÌÁ;xÕ¹;avj'þK»LãiýNèÄñÃÆPx£˜[©h©¯ÉÀûõqÕ¿un™Êë`0^ÂþIõ6ô(æVV¨j3‹±ðDaG:MI‘¥ŒLýÓáF¸¢ù· ¯1Øþä~`†“ƒì{«­Md³ö³(ô+³m?‚ë‹`¡ÐlÉ©gî3~è{ˆ¹]÷Œö×ÁSÍ-T¾g¸sÞŒ¶0× W› ¥»JPyê l¯ÔSôÖÂË>Öˆó‰ÛÚŒpè—¬¥±®¹ç2Ax¿>®úO[aÞR7ý±ö¼zK…CcO«}nJš’" J9 ”:ÿu\þøÄ 3¢­f?v•Tâ”á2lc”:FI´6‘Í=½„=Õ·ñgß-Tç¼m^ÃÕtûÕ¬s+L ÷Ò(üð]d_†““„;š\¨4–€cu2‹áÛhò„?SsOÐtÉ3!hi¬kò¹L�Þ¯«þ‰Æí®Ü=8Yç¶ágt;9¨sË¥·TlhìIcµÏMDûc܉{–: §QÛÐ ›{JVýQSR¤A)?‚÷%M0YP· fë]ôÈ<ȈØhnÌ0#Ò¼éb¿uÙÕ¸7< W»Y;t¢ MÝßá.´ö¬pâ=ë@k›;ø‚P—Tä?KšJÉÑV‚õM+h©¯ÉÀûõqÕ¿…$yóuna,z/ð¬‰Õ¹Ý™Ÿ«Z¶d>½¥bCcO¼÷O„á»8–ý–x­éÈÊß ýÎ\d¬ÿGÛžÉ6ž5%E”r8¹5üÍßï°¦û�ÖÇÜÄ-®f´5fæñÁ3ÂO]8žÑÔýu7¡8ÿ`DVÎðvª\bµJb¬)XFIª¾o )Ԉˆ=ØZ~ öй•‚6çÝøáýú¸êß’ ðÁdšÝî`Û3(ÏÏF¡Jó·ÞR1 ±'Õ>7±0'§9º¼ÓèX8Hc'¹=¨ß[‰æ—ò¬mš’" Jñö 6ïmè2 qü[+Ú»Âf{ˆîv+¾=^ˆLÝ&”µ>çnâ\m¬þ‰lm£©ûËbÏÄþ²>ÇniГq›L à¯È xæêvñÐÃ_26>´‚–úš ¼_Wýç½Ýå,ñ‚û>~¸lFUA6ŠC GUëÜÆò–ªªB]÷w:=i¬ö¹)Pý�KÊÜÍ`Ðr(X¡e¯Ç'%âjJŠ4(åb“퇱!ó ´¿ ¾Ê¼®&”~p¶)2o•dõOdÊBs‚ŒÄ:Á)¦ª’·¦eÿÓXÿ )䯠ógTeoá²D›–ÆújŸwi^L�¶©·àêïƒgð:o\‚ñÐAœh ¸êÏ{K½¥|6Š-}!ó5ÐØ“ÆjŸ›˜á걟ŶíFÜ~8Ÿ$ñ!ºÛ. |Kjy ¾î‚õØ I§¸š’" J¹x »ñïØné_f×Ï#~¦ µS—¬hLKƒú'#dÜr“}´˜[Ò¶ÖÁÎᦣ–ƺ–úš ¼_Wýó:q­º[‹Î¢cðuȇ—Í娥ּç}ŒËÅ›£—c!d–‡p{ùñäàêÞFú§63xnÝ‹õóc8f{ÛêŸ Ù‘­))² æÞû·ˆ6ƒ~…Ýÿ¥Š-!?4¦¥Aý“‘%Æ-s*GU÷Dð5·©Cœ¯~Ú»¿w¶ƒÍþ^ŒO…Ü#~ÐÒX×Ôs™4/&Š�Ÿg==¬^zS½°Ò#+-]µpŒY»ïf– ¶q>ö>Ð~4ìÆ–òŠ?7á¦ct™ƒŠÔBcO«}nò3Ù‰Ó¦{ ñJZÚ^`ÄC'·\ A9‹ÑÖ/q¨}$ø:ãè®:€úþéàkB hLKƒú'#¢q»k—ÏýZ’ƒQUò Š*LhêeÊ“.K‰z'k QÙž˜Àë%«¶šJ¶TÞÐÒX×Ôs™4/Ê‹àÄ„Z§£¾gh«©ÅápEÖ~›Ÿ_ñ=i¬ö¹)€¸¾ù”Íø¯))Ò ”‘©ß`:ÜW´Œ·Âk ¶ÿ¹˜áä/oɪ‚Æ´4¨2âyˆsb»¡O=‘ Ï$zë ´ò4,öñà{„rð:/£8sƒ E6]öaXlCœœÀú¥´Ô×dàýúV»üeGCµÇiìIƒž yДiPÊI Ðù¯Ûàš ™4gþD[Í~ì*©Ä)ÃeØÆø«§¸š 1- ꟌøëÜNÀ3Ø‹žÁõn©ÎmŠ`yr‘Yr!®ˆVë%ôù(7ÿ(þÜÇ8?ó³–Æº¦žË$ yQ«}|( Ý[iÐØ“MI‘¥ü>È|UÓÒ þÉÕ¹å¶ù؆šÓw1v`#½¦“hæoÖÖÒX×Ôs™4/Jcµ%¡{+53ö|£pÞûµ¢^a47£û阬¹$4%E”r1‹á¶6ô¬ Íö´¡C%j5AcZÔ?a%1Äþ²>ÇnTç6•hió‘­ ¥¾&ï×Gý“Ïý#ÙIƒ÷þÉB´ àºq´í™l®¦¤HƒR.X&äÈ/?õt&ÐN <ÿ�¬nór®hLKƒú'#T ˆ€–ƺ¦žË$ yQÔ¿ä!ÙIƒ÷þI‡•Ö*Å;z#ZíƒÁÚÍsðŽôÀRvLRmÛP4%E”rÁ”Öh5#[· ÃäÌ3Ô?iðÞ¿0ȸ%$ ¥±®©ç2 h^”õ/yHvÒà½Òa¥H£Uba¥ÉV~TSR¤A)K•V`Ö"#l š-€•dÜ* iiPÿd„êÜªŠ¦ÆJ´Ô­Ëz%h^”õ/yHvÒà½Òy—¥Õ/ÃtqçO¨Ì)†Åõ&øž44%E”rAÆ-/И–õOF¨Î­ªhj¬DAKý׺¬W‚æEiPÿ’‡d' Þû' ^ê 7!#wôúÈÏJ¯û-äîcR¦ŠWš’" J¹ˆbÜ °è èžžYdܦÓÒ þÉÕ¹UM•(h©ÿZ—õJм( ê_òì¤Á{ÿäBðºÐ}ÅˆŠ¢B–|ÚæGóÇßʃ¦¤HƒR.˜q[†]VüCiÆ…s5J ‹Qaü ½¬v¢¯–Â22n†Æ´4¨rã[¾Î-¡Ú+áh©ÿZ—õJм( ê_òì¤Á{ÿ¤3‹á[WÑ9±>÷M—ì˜ ¾”Ц¤HƒR.æà±Õ¢ »†Ö?à‰Ü,™z„úýûQiøvÏ\ðMB hLKƒú'#Ã]híYÁ¨u µÍ|Aȉ¦ÆJ´Ô­Ëz%h^”õ/yHvÒà½Òa‡k1Ún<‚öQyŠßiJŠìây†÷þ-Á7‰Áž^ zås ƒÆ´4¨2ânBqþAœŠZ,ÐN•ëQL1·Š ¹õ#-õ_ë²^ š¥AýK’4xïŸtDã¶éJÎ}«Õlßã\I.rÊ/Á>"·¨¦¤HƒR.f1ÜÖ†ž6Hf{ÚÐ6,Ï. ÓÒ þÉˆÛ ½Ø_ÖçØ- z2nÉWËh©ÿZ—õJð~}Ô?iðÜ?’4xïŸtx‡†ð*ìLmžGß àOauE–JMI‘¥\0·€È/?õt&ÐN <ÿ�ÅÜ* iiPÿdD4n?©ì@lÇd¯;Nà2nASc% Zê¿Öe½4/Jƒú—<$;iðÞ?eða¸Ã„½ߣwI2ËäДiPÊÅ2>ïa­ˆŒ[…aræêŸ4xï_KêÜ.…êÜ*‡¦ÆJ´Ô­Ëz%h^”õ/yHvÒà½ZASR¤A)̸¥:·<@cZÔ?mEéǸb†à³âë¥(mý+øšM•(h©ÿZ—õJм( ê_òì¤Á{ÿ´‚¦¤HƒR.ȸåÓÒ þɈðê·~€ŠÖÁ(§·|î¨ÈܳÓ|M•(h©ÿZ—õJм( ê_òì¤Á{ÿ´‚¦¤HƒR.¢·Â�,zº§çmȸM4¦¥Aý““¸›Ë®ËAIíOèìí‡Û톻ÿ:›Ï¡$ë-¬ßa‹ªƒ)‚¶ÆÊR´Ô­Ëz%h^”õ/yHvÒà½ZASR¤A)̸-Ã.« ~SvÆ…s5J ‹Qaü ½ã³âGú`),#ãV"lLHmJíï%Ú”$ÚßK´)I´¿—hã á/tÕ|Œô(ýÔeG›[žL†ÄR¸ ¢¥þk]Ö+ÁûõQÿ¤ÁsÿHvÒà½ÒIMµMI‘¥\ÌÁc«EAv! ­Àc7õõû÷£Òð#ì:¦‘‚Ô1¡ô˜¢þIƒ÷þ%Ĭ>6SpÛ®¢öh õz–|s–Nô˔ňWc! ´Ô­Ëz%x¿>êŸ4xîÉN¼÷O:ìpMùj-š’¢Ú7ý})‚;'Ó“ìéÅ 7zªs+©÷]éqCý“ïýK„9W3ï*E•¹ÝÎaĘ…ài,$ƒ–ú¿d-µ© _jS’h/‘¦$Ñþ^¢MI¢ý½D›’Dû{‰6mÃŒ[嫵hJJì‚ÕDÊßW»ïá¤fç„~ß•7Ô?iðÞ¿„¼qü‹ñ0ŠŠÃhi‡}pRœ1¥án,$ˆ–ú¿Öe­öõkýï+Ý)¿Ÿç¾1¨|÷OyDûã§ïÑ>zp&BÛ”J‰Ýµ›¤|_êß–—ÔìœÒï»Ôï¯õO¼÷O¾I ÚoábÕ>l/:ss7œ#Þ@œ>!;\…8ÐRÿ׺¬Õ¾~­ÿ}¥û/å÷óÜ7õïþ)�ßÄ^‡)«À¸U5_’·‡PÙ1|QtT"ãV"j޹x þIƒ÷þÉ…à†³ûêŽìFÁk”1Y´2b¡¥þ¯uY«}ýZÿûJ÷_Êïç¹o êßýK9¾üìýïOSÙúÿûôŽ7½a2 !ñÆ$'†pÉ™À Œ¾A3†¯Ñ1ý‚Æ9Љ óŒ 9Ö8Ó¾f¦x´ïyãPgè§ŽÀX•:<_ðH=S>ÒpêðcZ±Ž ¿Þ…S¤°Ÿß½ÚB÷nwKw÷îâ~œ¬œ)²×¾XëêZëZk]×åîÒcÿæ÷QÝÜ O(¶Ç,ú>SÛTɤR)K!‰q›ç65dRçR!åúWƒ Å  ù(Z¼eÎEÅ´_¤–½° ÌG>$`Ù…öÛ£ê5e P”.¤A6Éÿ¶·u¦ÿþl¿Ôò ©_ɲTù”-ŸPÁ Ö.%S̼ô…Óú^܇ÏÑ‚êü£ªq›*™T*e)ä2¦lŸá#óhâ+†Ô(Ì}Û”PJì~_ÆÄýN<š9öZyë '"™H­7qòÝû/bÓ½}¹Ž[¼òùpÏt/b­lê%lMwèGVù‚~L†hº¼œ‰d"ч]ÿ†Ãå‹ Ò$µ|¼ðYQYz9}ðÃåb•oä1Q”.¨(¡º"Ǹ(´H‰Ðú•,ŸÚvª|Ê&H/5Œ0{‘Ï1FÑcµ¡Çñ “\'*)"k+eºS2©TJSHj´{òOÃÆ™·r>Ûiäï2Á­^?»ß“ø:o; ;ÇFù7)a×Oä«B~ÉI\w¾ŸÎ_ÃÙznÿkyå#~E(©n†sz‰þL!8íDku4ZKÆ[Êÿ†â\ä—]@³m�d`^Æíã´|ôïmÚ´…gîÁǰ¥–> ´!9“•hUãVHûª¨¤‚P]‘Z×Tù„!¤~µíTù”MdœS‚jƒßBâC6ÈÚJ™îQ•Šç)â’ò¢ýh4Õ0¶?Äàè8ý·Œctð!ÚÕ´1“‹ƒæ¨¶­0ØýNv¬thø¡ ‹%RÚЪ;‚=57àœÌ´ñH!0>Ž×K´Ak¾ ]k®Vî„&÷ ¾h¸‚{i¡ä•oãÞ),Ñ­ùüWhýÙˆÊü­ÈÝÿ¾}€‰Èo1‘U¾ùœÕ¶`xiõ‹ïÇ q?mØnF~M=ÏÐk¨Ä±öñµÁ\jùxá» “}‚1ÑIˆí¾tèQ¡·’ (]PQ4BuEÖq1 TùxÖœ‚ïuø Bm;U>eC¯+n}Ëð\öë8§ý�%5×pw þf›dm¥LwŠ˜JÅ÷”F‰ IM<Ä¥ý ÉÆ.ñ'L*éÁîw ccø3¶Y—ž¢é°ýþø­öóâ[Øb¾Þo ÍÕ`ÓæÃ0ýg.áΚ¼òQi;ø‚6Ë‘KÿÛfíuü'€€9å[v~‹ óX¤­hY=7Q¶™þ>åŸCÏtDFŸ:GøTœFjùxœÃÌ<³-UãVN¥ *ŠF¨®È9.¦ƒ¬òMtãæÃ× ç8ÂʳNÜpÎE>É,ßô�úž%¸Â‚Â’Ë„S‘qYVÙÒ@yò-âµoJ¶9™U¶»2¥ Óç6èøûêhªÙ‡Bí9\·»1#‚í!k+‰Û)>Ü»ùs1m;1ú~Öó<Oi”ªT`«gªC«=Œª3ßÀÜ3¿pÝR¡a÷;m,üü=,¿“SòÈ€F¯û4îâ ð%µÞÄÉg=‡ŠOJ³i;´†pÿç.¹‚Nk'­h ä•Ï ký'ø¤x6å–ÃÐíÂlœ1Zamw`:ò[Lä”oÙù Êš/’¨W°×¾Gÿ{޶{# ' >aøºK-_ú,bÒ}úýï"¿ú:ú<~Zf ‹}:Q[IP®.¨( ¡º"縘²Ê—’;†Ûj»0¸ÉϤ„U¿ïgÔÖ\AÛÚm¯ØÒöý5wYeK‰ ˜Äã¾Ñ5CŠ“¥§0žºµæÖ$§|YïÊ$Ñ ó üžGh®.ÀæüÃÐY~ ·GšÈÚJâvŠmN¨NvaBL„¾Ÿù<ßS¡ï—ÄÑeUÄ…Ýïä$ŒËçVƒœ=Mp.Ä÷ûyña×–O“ÿ Lý®MF”�¦²“Êð¹ÕÒÆV¥ ý«¾âËð~²JkæJ-<†nïI4w?„Íxyô¿m>Ù� åŒmC}a9šG£~îRË—>+̼ŠlÀ¼Ä¤ßc´T úÜJ„ruAEiÕYÇÅ4U>_®³ ÆÖ‹(ÛS‹kmŒŸu:1™¢å•/‘qû#®ÕìAšü*´ºÃ›ã²Ê¦pã1´!^[ÏîGV!naeÈeÄìU¾lweqk~ O¿†jr°BÖÄÛP\} }ñkÎT‘µ•ÄíZikjñ­™á¿h6 ªpjZž¬ BL„¾Ÿù<ßSe)ä"<í_ ¼ª¦ö>¸'k_qa÷;m<ÞúÆ_ÿ‡Ã-ÎaL¸½›¥Ö›xù®Á2dŒÂÒØS eüÚ´· ÛÍ[À˜ówzZˆG^ùˆ¡Ý‚Êü-ôÏ5È)ùì¡€mxû:"ã”w]Skß7©å㵌àr¢‘`£=°õ8èñ"V?TÄ@Qº ¢hغâC—Í•ÜÀ ¿¿¶Þµ¸òŽ‹©ÁÓ½…qŒþI2™‡«é$tý\÷d–ëZ25í j4´aö zAe•MéÆcùÚ®ÕÐíGRš¨l¢gé0rÊ—õ®Li±ŒéõÂõfÉ!üª/Ãúo"—&ï�N7uÀá™[û{ÓEÖV·SÂÁeXK1jO›´x÷p<¶‚Ð÷³žçyJ£D…¤¯àê¾ }íQTÔêa¶;áõ U)&ì~§¯ÙYøÿ;GÇ÷Гô*Æ›°»&~‘¥Ö›Øú‰/ÄâŒÝæ&èt—al±%f'¯|Äç6€w7ÌÆË´|F´Øþ _‚‚Üí‚øÑ0ýg’ µ|¼ðuBg<©¨¤Gæuaþ¡!<ý:Qb`àUÂ1€ w¡ô™ÅËôzéÂ@Ê;þrÊ+l]ñÂR©EÍÅøÔ]kåâI”2n·È;.*ütÒkw³\…|¾ÿÀv¦9 £‚‰¼íCðOô7}Œ\reµ¾#11'ä•MÙÆ#·î­ ใ3…[ÃîM½/X},§|Ë•)UÈ Áj¿9¥Ý‚|âk{w éZŽ/²¶’äB½DÏ¥¨màôú~öóüNi”­´Ñà÷Ây÷:èI²âœ í}î„§‰*©Ûïá+¾ÛC?×äãv ròPn~†Ø½c‚Ôz'ßį8KýM¹((=í¡bämþ�gºž+`’b¢»1<aæ T«Å¡â<l.<‡.ΔV2Ë7Ñ ÛÀ|äC–]°u­.ᤗ!ß3rÈ�«c\ÔÈ…*ë“y] Ö:hO_ˆ7Œö^k‰åëÄñE8~çùÚb‹ w¡ô¡ÖÕ8cÔ]¬9ˆ½Æ§ôxºßSرãîø¸FW‚œòŠ‘1J¢¿!¦(ðô,\2|º—Èç6ç ŒÅoYDõSþ!XjwC£)Bµù©$ëÜõ`ׯlã1žELôÿe¹h Ï¢}$>X¦¬òm(W¦T!Æ-I´ •º6ôŽLs®-…"k+‰ß)ô—È÷&=©IÊÄù|Ч4Ù£t›NºÑ×~§µ‡ðiûXÜθJê°û}#͇è‰i/»†á\¯¥ðž ÚWñ_q©õ†]�nS)4%—ѳö=¢œ@óÑúÌË·2Ó®m(Ñýƒ±Ã·„™Á=ÞWßAYåóYQYz íØr±F‹J†ÏªÔòñÂwF‹ ^—×Ï•£°¤&‘wSU“y] ‹ŽcÈ+>­VSNÃB/°R1nùº ¥mÔ• øP¬¬t9aÁèJjÆ­|òŠ[Wèvøø<zæ“;߃úÕ«¡«°ê'7VŒ÷ÐÏtr¸06Ø]KÞö#Ðó°¯ %‘`Š1#¨)xÇëòËÆDaÆ#jnËg´¾mEAµ®Yä•/Ë]™Ò‚l¢aö$‹�.Y[IÜN‰’!éJrv¡â³c(Þñ!´û«aœå”„¾Ÿõ<ÏSe)ä2&ºº0ôžý[wpÛÃ}"¦’ì~Ÿ‡S¿›ö›áe)è¼æS ˆ–¼�—q?ö¯ù€¬Â”oó3QYå[~ ãÎaöÆ,T©1˜Ë¾‚ƒE-`föMøç4²Ê—RÔÍV@&ò3ÅÀô¹ : Ûw¦¦”–ãÜõpÏ$2TÄ óº°ŒéÇñly!9üÝ…Ò'…ë®ë"§¼âÁÖÚ¸­Ð‡Ç¿DïsE¦Œ[…Ÿî‘h³pwÿ#Ù„4Þ€m›+ò¶ß¦¦ðZ7÷c4õþs…š.Cne8Z²"ÇÁç°7î‹dx“æ2ˆ×Þ—º6![]™Òb¯îÜÁ“õìgñ˜#CGªÈÚJ¢v 5 óhJ 蟦]«ƒ7ÉúéOðp(‰Ð÷³žçyJ£,…$;ôŸ¢´æ<§Üár5¥ŸrFÈUIv¿SXnÁ—àXŒ‚¹æCäm©RÀÉí2üÎo°÷€÷ûWw°ûÑ×õ=jvUÀøÇôç^XΞ_“UVù¨8 e8 ¿ÃØeïE×õZì*3âäóã6œ­ë\;Å•U>Ú¸ý¸¾‡^.'‚Â|Ïy|¬Tã–ÉÚb˜¸,xð¸ùvl~e:+œk‘ªUø@úZh‘–eLÜïÄ£ù‹nå¬7œXˆ|äÍ:îBéãÃ}«±–‚ýe%“W<غð'lÕÕ0{¢›z±P3>ª¶a*òYj]J^¿ÂN÷èþî>û4ää¬`´Úƒ(ÎËMšë_Nù(Ÿ gËbn&Ä”CÅ(“i­ÉY¿bGzþš~qÛŽ²¦‡‰Ýð Àlø%3?ÙîÊ”ääö Ô\û‘u‹ƒ]H$ð/``ÈÚJ¢vʲúí9ÑS¦ÕŘÿ_Е\æÜÅú~Öó<OiÈgå@Œ[®”4±¥B5nBڑͦÛahü¶Qz¹HŒÛS§`è§{%žøçÅ…]ÿ^XŽbóZÿ'*ï`oó³ÐuuòYJXõSXÊ·1äHP4‡Ð<6ÀÈg)aÕO ̨†\Dsº…‘Z¾´ §­p{Ãj8Žâ -+½ø+>+}Æ-FUÖGh_K¯+Iæ…m§aŸJuŸ»Púˆå/+—¼âAþÎ(‹mÖ"¿ö·1ôÂV» »LCk.FìçÅ'aý <Ý[q›°K³ºžçÑ“³à›kpœ‘‚…IÆÚ/‹˜og¸U¸ñH=‡íìÎ µB⊔eèVC¶»2¥…<ö‡¬­D98õ¥Ø ACcyï¡ o«,ynÉB–Ï)¸»PhåúùØg™KìÕ&?ºzÕ¸ˆ¨:'qõÏ=ÄeC7Æã&(f!yOÃz!¯|+˜ë¹CχLÌòzÍŸYVù¦l¨þÈÌyk$ÌxÌÕ¨¶ýù,½|¼˜v¢Ç5Ž¢þ«Ú-‘IF“ÒÓWÐá𬵫 „öµôºBÏ V~`øŸ†‚ýÁžšpN¦2ðwJ/¬ :üÀÚño®ì Y9åX] |·q4÷T}‹ö‡O1G1øðg«Š Ùü1Ì #©u‰³~…žî-»ŒØç*D·©×Œ²Èf%5?‹Y†¼i?z¥;ã~KhF½É‚¾ˆA¾Œ`&æ<¥)1‹>óý ·YîÊ”ô<së*ÌCã1ë6fÇù*n½Æ-Mðú¾ÓCg~‚é ú¼(­¿G‚ksBßÏzžç)²’ ¥¤a_çR[)àêw* ÔT@˘¸gŃ©˜ëmI®%Ê+IÛñS1V²kˆ²ÊGýŽæ=»Qkórô' rµù`rG)H-/|VTìFAè”v4ùe8wý~Š•-íkéu…ÂÂØþŒílâêsX~Ž<×q¤á.”>~ŒNÆè&…%×5Ö=âÌ{‡¬òŠG¼.1Ñ«Ç~b¤ÓÿÆ*šøh÷ñÏ‹ »~eŸîQ~ {CÿQÄÕ….}÷p½¦eÆû¡Ï-PÇ8Å•·ýh‚ãèÖ}„\úçäߢe+ k-p3NÀe—m]2h<®AëàŒ=SxÝ¥7Áò`5X"…åàrfú–ç!Ajù¤'OSî­cZï5¡É“¾ý!k+ÉÒ)ôät©ò&<1 `‚Ð÷³žçyJ£h… NÂÝEOŒ›ßGus/<¡’>S[Äö»²S_Ip-‘ü›”°ëç ‘ý¼ø°ë_‚¯ý8r5E¨2þŒ‡ƒ£á…ÛèS<lÿU[±ù =f0l©åãEh9…•—ÐÖ;ŒŽ1T%}„öµôºBÿþ–ßÙ;ê^÷/h(ÜÅð.Ž4Ü…ÒÇ‹Ÿ›Úñ;CVŸÏ·­…9ºÔÞ%«¼âÁ­ äzµVãç¨">šeU8óíèÍ´O«²O÷¨”oŽSâ‹fo3F"c7ù,%ìúý4î‡Fó´ç®Âbïà]°\ûÚü­ØvüNfâL¬¡Pã1Ä"|Ý_rnüh é5®›}C#þyqaÕÏóŒ µ|ÒCÖ™ÒÇü‘µ•Äí?Ü­UÈ'aäézÙ…ìfµÆùÍ}?ëyž§4Bß-6T0ˆ5S… `æåêâ€\震ÏÑ‚êü£ªq+v¿+==èXÏ¢êÛ×ü~À·UÅ(Jp-Q^ùø§íW>êOô^âÚa'i|>Þ¸ç3 I‰aN:Ѫ¤Ð¾–^Wmni³§ ÎÕ xIáï.”>‰6»¶añ·`É)¯x¿3Š]6Wt>çd¶^LD>±Ÿþõgòtï5z._EÏ8s“„£LúׯFY図£fK!êí>α9´~¨ÖBç˜ }–·í 6é7¯ D³ùÚ/pÍÒ…¾Ðé|/ì–«8§}šmµ°1Ö^²Ê—í®Li‘ä…UÞVŸÛÐŽkªŒ7 qºü¤ƒvW Lä¿ïº0ÃP¡ïg?Ïï”FÔ¿]0ĈI’g*0Š« =Žg˜TOoÁîw¥§¢'‚ñq¼fɶ ÿÓ«Øÿî'°p¤…’W>þi;ä•/µ�ŸãŒgªP¦Õ¢¬êsÚ ˆQŽà)RËÇ‹WÝh²^äÆQô=žŒ|PáƒÐ¾–^WèyáÖ×0þú¯èõLRœÃ˜ä“똧»PúxqKg¯k‘ÝÃÅùl"¥”kÈ&¯x°u6ò+µ¨¹Èu)O¢´Òª^ Àª?ðž—¸ÍjrF¹ÇC9å[vê‘w ™Dáókì7> ý ²¶ýnE˜„½fòë»0Áµ–¥æá±Ö`·îñÚf˜¬òe»+SZãö34ô…7c¸YƬýüüvžÜ.Â×õ-.? É*ÐF¯ádÇÚ%¡ï{žÇ)Mܳ%²s’S‚jƒUñ‘!³v¿+3PpÒƒç ¢V]™è1àhíÌ€qFêŸ{‘8%Ç:i;äoéô=K°a´JŒq(µ|¼ðýŒÚš+hcnÆ”¶kõ¨µF¯H©¤ï¾NÁ÷ZÎ9„^LÅÅb‰$îBéó³3Í]’È+l]Ht‚S´™¹öFÉWC;Р»1Ê¢åQó§øP× ‡ëy\ =9å :tÈ[çê*½ [»Þ*kÛ)Ýx$‡`y$˜Zâ4Yxóôû¯ÀYÞÈÛ~YîÊ”Äþ¨_×Í%6ˆ_dm%q;…—éÅT½à–2¸ çó)žÒ(K!Éýw° Áe¿ŽsÚPRs w×"煮E|¿+/P*M"äèŒrÈ·FÆ¡Ôòñ"äsË^xÆväF•Ô!í·Æº!$0’ §²Î׊¿»PfÉ6yÃù¢xñ³©³L!c}ùV}‰#ÙÏ‹»~…Ÿî­;îiSò7Øe<¬`Õ?eÉSv$ÎÜLa¡O‡CÍ¿‡ôTVÙ”n<†Ü Öó¿gS•U>B6»2¥EjÆ­Pdm%q;Eþà2¬çyžÒ}·Ø0}nƒŽ/±¯Þˆ¦š}(ÔžÃu»[ &#ì~_hÏ“Þð[ÂË!LDš_j½!õ«Æmú°êOÃ8$?S ¾_`0„wŽ•! ·Tã6X}½îFH tÚ÷³/DîB%ÛäÀÖŽlE· ?Ý£Ç=}óxcƺç¶s8dr„þÛë¾Ýù{²ÎËQæà4\ÀMN7²¼÷ÑX|H¶ø.¬úo<þ Û‰FØç’,ºzÑp¨£éÛÙêÊ”ĸ=†¢Õ8!k+‰Û)ò—a=Ïó”FÉ Æ„ßóÍÕØœ:ËoÜ“‘JʰûþR[ë =}Û/*TH”¸r]a_©õ†Ô¯·éê? ãPjùxá1C/™ M°ú¦g‘*|`ëJ¢ùãG\«Ù ý»šü*´º£ßËÌé …``1j(%…¿»ø¤:`(A^þ$Öº¯&‡Ð¥ÿˆžÃO ¹ï°»ÆbŽdȸUèéÞØs¸ÏýÃp=÷¯^v[ñMÑ�ºM§ºÑPt)s§{ÁçxpÅ„.–€§Ë€êò*Ô_ü -Ž×¡¿G^Ù”n<RXp^EÝMî@‰TàØK±Û4„Õ¿@Vù²Ý•)-Vàw~ª’Ý8Ðpý1'Ób!k+‰Û)ò—a=Ïó”†|V*!ãÖüž~+ Õ%È É¾ ÅÕ×Ð7‘¦U¡‚Ýï᫼âƒÜéÖJ9NX†Cƒ­ÔzCêWÛôaÕïùß8óãKö˜Êۄ:ëêSzùxá³¢²ô$.rnº„ËÅ-*§‰*©Ãêk®E 9Á²}B¹ÚoЫ˜ëh~8.Õ'@m ĸ ‘Ó'GûCyŒEÞþ²–7 ’é˜ÁËÕÍ4á—äUo9üLùÜ*ôto½,k¬<CóÞäVß‘õävÍø^…ZFpy}–C¶( 7C,Â÷à;|Ýõã¤Â’ç>.UW ªþt-LËØ·kd»+“ V˜~/#®„˜ÈÚJ’wŠÄÁeØJÉï”FY ¹ŒéõÂõfÉ!üª/ÃZ>"£&ï�N7uÀá™KmàWI »ßévüÏâoš$Dj½!õ«Æmú°êOiËí6A~¦Ò¸V­’:¤ýüýM#—øyÖ·c$#×Ñ(Ü­¨ÌßÂèïhÑÖÁì_'.C“ý&TæÆ×Á0®ÄA Y9å"_”d©€è>}«­††6¼ˆü”ý¼ø°ëWæé^ÊÆ-1Žÿ‚›ñT–|lääQyÆc|J® ,näolweR0²¶’¸2‹!—om7hê¥  N…¾Ÿõ|à%¼¯×z¨)xÇå¹^Êr‚X‚â÷#§´$ÐÃ9\¿»–_E,8û=8w÷0êtЛÚÑ72p“ZoHýªq›>¬úIÔ͆ëì×Ö‹(ÛS‹kmŒŸu:×Ü&¤–ôD{¤¡^ª$†šíégÕ¸M‡D}Mù‡`©Ý ¦Õæ§œ³éu…¤*+F~Õ71' 7 Ó–¢Æôýß]pÍ$Y$.?…qç6”Ô›âN#¬=£Hõì7%Äð—•S^aë‚Wá©€”yº—®ñHP²|rÈ?'+ËxÌž5C–»2)Y[IÜNñÂZ]Ó1úÅšƒØrT^‚ïÎ)ìØq w|áý$¡ïg=?Ñ›Ã>‰`FnV–Bã–¤Ú…J]z“W*ˆë÷ÀZ+w†|êÈ¿…ŠæœézÎÙRë ©_5nÓ‡UÿÂ8FÿŒ ‘0WÓIèú§#ŸÙH-/hãvݵ€™Ù$¾s* ‰ïkzAèëBcÉ6lÊ-‡¡÷»í›£éu%,ϥ˿®]¿ C½† hŸHañJÂ|à(ÌÞØï;©8ˆà/+«¼âÁÖ…DÁ5cJ¦S)ìtO5nÓƒÔ¯ô99kÖ Ùîʤ`dm%q;…ÐË P|ˆÃgñ„£+·<¯ ’ÏÊ62òð¡RIv¿ñª½ïjõ°9½‘Üy+LÀ|ülÆòÜFÿIòîeLÜïÄ£ù˜Óû•g°Þp®E²d"‡|£âèöò=A‡É�î2ŒæpM&>k”C¾5|wajwÇì¼þ¶3EÈI°P‘Z>^¤bܪ¤ »¯—0í4¡ŒäýÌýM½¿Çè ]dß±§¿ÿ÷n¡gj1ÁWB�ϬV8WótDZ„©^ŽÂÃú{\°ïˆ|Í—; ‹$cW9å¶.Ĥ >G×™bl+û>š›œš€ÝtWVãVéWCUã6=Hýªq›>¬úyÚò3•õ‘µ•Äí”I<îM2 Ç#ôý¬çy^AT–B.ãÕ;x²Nã-?{ŒÇÓ|ZX%v¿ûáÐ}ŠæÑXcl ^ó)ÎÓS©õ†]äDŸþY\Ùvö©x] ÿ&%ìú—áü>llÚÌUZ€œÜ£0p/_e•/ÑD•sF‰ro‹ ‘¿¨ ®¥D†‹Š˜}Mùl8[Ʊ1Ë(‡Š P&«¯U’ï?«¼‡Zû+îÓ†Pðw8ž¡‹è>¬)žX&»BÈ*¯xù¢0R… Û Ñ|€ÓW/áøY|¡MÔeÌÏDãh°ŸR¿Ò Õ¸MR¿jܦ«þlweR0²¶’øsŠÓbK@BèûYÏ󼂨,…$'·_ æÚì/«”_ÀêKwøW!°ûý <æz4ö¼bLZK˜qÿŒú¢JÎT Rë »~¢:4üÀH¯eiC«îöÔÜ€3tºËFVù" QMñßÐ5:iCz ðXqâD^q|ñe•Ï× ñú8ÖŠ cÓÉÆ$Qñÿ¦ªQx æ~_Z +•ÄðîëEÌ·e6n~ÿ™=­ètN$Ðir;å<ÎZzßHqOЬS^XtøaM.RZ +;3·Ýå»ÂÈ)¯x°u!bÜR/Ñ}6l؆Ý\‚˜è¾ˆò³÷hw ¯½/×|ˆ¥Ö%R¿jܦùäM5nÓ‡U¶»2)Y[IÜNaœâäìBÅgÇP¼ãCh÷WÃ48Ë9ñ }?ëyžW•¥©îÐWÀ¢·‚ íÈ"àBsÙŽH: C(- Q:·¢H÷s™6ÎèoÍÂØþŒ•cé)šëÑï6&«|¡�29Øoc¿©1˜Ë¾âœÌd•/8×Ýÿ ½î*:Üd "Q6ïᮓ¹™ÁFjùÒ LaÌ;•öÂO…î¾&›[a mÐ’�s<ðE"/#ÈHg#½®ðÿþÇãýÿ}ÄD{fÆŸ?ÆF'cæz K®k8L§©ES^ñ`ë1ò/àï ‘¿ø%ŸÇ²øk}»¬×’•n`<H´Aaq�í÷¹ÏîåO5nÓ#ä[#Û]™Œ¬­$j§„Aä@Sb@ÿô½°t@WaLÄŸþǨ%ôýl¥äw‘õlÆ¡Û[WaùR1Ë8†ÌWqK5nÁÕïTÀƒ¾›zÔV”¡¬êsÛŸb:ANF©õ†]?­?Ëïl½ðºACá.\›^ÀpóÇØ©{ñ¡#©K~DMI¶T¶güäve¤{5äºôäWÃ2æ‚åðvlÒì‡q{©-µ|*Ê!®¯ƒãèÖ}„\úçäߢ…¤±±°R¤×òýoAûs Ëð/8³£(Å s‰® ³ýÆÄøšÚ0Æ”•ž·†mŸcGÎzyUW‘S^ñ 2FYý¶£ÌÄ•‘6pm§eÏs›5õ ýWªQ˜CÜ]˜:8í™ò­ßþa¸žÇ»2½Š üFÙTã6}Xõg»+“‚‘µ•Dí”ØSœUãÖÿ/èJ.s*¶Ð÷³žçyQY „§© ÷Öùòï5¡É“æ¡‚Ýï˘qu…®ÊYû¼ôô´ ÿh/Ú­÷áœàŠ$µÞ°ëOt¢¯AΞ&Î 2ìçÅ'®þàk Þþ—m]Z ·§Ž‹n_æÛoÙeÄÎ=Í¥(, ßÀ'—ˆN!èþGŒOéÞŽGjùT”»¯ý4î‡Fó´ç®Âb\‹í£Ç‡k_@›¿ÛŽßamØH¯+ü¿ÿñxa­©Å·fÆÕf³U…{PÓò„N ¦Û°Çø[’ RLä”W<Èß…´Ãû ÛÔ8Ú ªqYhÜÞ¼õ×Iª«ˆ„ÊmôŒF£•3‘S>øn¡Z[‡‹Œ¬ :ÝyÔ”–Ãè¢å£žãÎñ"ì8N÷/ÝÿrÈ òèÃ}«ó1z—ìæƒ*³o³Ü•IÁÈÚJâvÊœúRì ¥ý¡!ÆmÞ{(È£ v\…¾Ÿõ<Ï+ˆÊRH²ˆù¥5çƒel!ƒç§êµd°û}sö3Ø}æ<e,˜Qžû.Š«jPYfÈüµ_¢·¾†ñ×1Zº8‡1™ ÿ±¼òÈ5În˜—i5¢Åö魯™e•òÁþÅW‘à5“°×]€}nÓ}—P¢^1zëaõõœ5[ Qoçöm¦ðVk¡sÌF~"‡®$øþ»þÀtÊùÏç1îb/̨Y<mÒâÝÃmð¤ZMJxqKg¯ý Yÿ†kl*r­;ä”W<غ@è71’àöO˜Œ¹ÆðßÈ'©u‰ÔŸ-Æ-å1ãÀ3¼qÍÇv `"§|ät¯,¯‡â‚Εã„e+0n£ð¿ùÀ~^|Øõ+\¾àfæ¹¶½#µ|Y[IôN ¾@ßwzèÌO0tBŸ·¥õ?Ásk¡ïg>Ï÷ ¢²2Ñ}lQ}n…BÚ1Ê<œúSáhÉÔ+ØkßÃæ²›ðß($Z2…àìlÜ.'ùù¢Ã†ûy.å•HiD¡†ÖÍœ”†"Êæasá9t)àävÅs Çò·„~Æ.;Qßó:ò[l˜Ï«ll˜}½ìÔ#^Ps¹Ï„¡ðÆù5ö3Nü¥×•ð÷ßÿßq8:¾‡žlroÀæça,r@½DÏ¥¨mIr²˜$’ÿåT2%$“W<غ0Ž;íÿçÍ5–žÂxê–zrUðzu§`èe\o§Ëp;ŒŒT\Ld•oz�}ÏROÛ(«ldc%QP·7Tù˜õ/Â×ךõq:”ˆ¬­$K§=ôD÷+gw¡ïg>Ï÷ ¢²’·Ÿ¡¡/z*Ï2fí?àgÕ¸»ß1Ò| v7†». HI©ANiNd.Ï-jò®TíFýsòoѽÑ!«|+C0íÚ†Ý?§µK˜lÁÑã™–L½° ¼¨&ÖDz ¶G$\$K-ŸŠr`öuСCÞzc|ì¼Ãrè 倩l;ý®\VœÄ_‹ Qªý•É®¼²à 0}ø•ŒGNyŃ­ ô¾¶ž:„UHÄë2äÊìs›-WCñó)™õ¹]câ!¬¦cô9q¾iYeK#¨›*_´~5N‡tÈÚJÒu I 4€»×ÏAKNNä§ú~Öó<¯ *K!‰q[¿n€j~³ ®å¨¤Fl¿G[QxöWL,þûrŶŽœÂRë »þ¸Œ{°¹¤×cJÖ‡å8¾‘U¾å§0îüfoLè|f´dj3³Ñ”Jò¶ß"|ïsöc"¤–OE9°úzʆ§ìHl>QXèÓáPóïk 3éu…¤*; ¦ú~’‡ä宇Å7 WS#gª²xø_L›4‚JÆ#£¼"BdŒ’ظm»V¾é¢Ù‰ÊÖ!YSEQøÕPâL¯ß,™×ÛIù îIÄÂHt(A¾iÖ³À®ß‹Ÿ›Úñ;óÄÛçÛÖˆÂAÝTù¢õ«q:¤CÖV½S‚ÓéµÀP]>iÊ)Aµþ .ꢘ}?óy¾W™ÏfžÔŒ[ápõ;åBG1h׿ö'µÞ°ë'‹Û£8›j‡°×>‡¬òQ3pÊp@‡€¡]×k±«ÌˆÏÛp¶®síWVùxî°¤–OE9°ûzŽÖå ¸éáºn¸‚€÷>‹ÁäŽþ»ôºBÜ&vcÓþUÿÃUãv‚þÿÊ”£%ó½˜6i•ŒGFyE„­ “xÜ7³&ù¿ïàLáVlÊ-‡¡÷kÃ]j]bׯô«¡‰Üq#«|¾44\g´]Z/¢lÏ)´pä›–·ím\$êÆ~^|Øõ+\>5N‡dÈÚJ¢vÊÊ0ÌߥëÜ‚¼ÒÏÐÔñ$rUqó3s’(óy¾W•¥Ä¸=†¢Õ`\*’Ûï|¯ýI­7ìúéI~êŸÐû½æNç [¾ãL %«|”–òm¡Ÿ%-šCh ︓ÏRªŸç;õ¼Ê†&®¯ƒÏñàŠ ],7�O—ÕåU¨¿øZ¯×ôFz]¡°à4 hW\Kä­Ä¸-ÁûÛ¡Ùv:²�[1rϦ ÿ ’ñÈ)¯x$×…ELôÿ=t][Sxí#s1ŸôºÄ®_áWW¸)ɪa£Æ®Ôæáj: ]ÿtäsYe£Çø n8ŸM(dÃ^Ùò©q:¤CÖV·Sè…¸ß çÝë8Wñ1Ž,èu…•ǸÅÄ=èN݈¹‚˜9?~¬ÀïüU%»q á&úãQ»ßù_û“ZoØõŸàCÐÐ?#?gøÜ’hÓ=W`ècÞ\å5ü‘cfYåã¹ÃNZ>å@úz칟­ô|\N°ÊŠA]!Nnà+ÝôÜFŒÇ䕞ÅMWª>¬ü¯ ‚gPÉxd–W$ê5 ·å3j¶¢ Ú,YpÍõ`ׯ𫫠ܔdÕﳡÉâb´]¼.ØŠ‘“8vý$¨¿�nòËÇ/蜜ò©q:¤CÖV’®S–03Ò ‹¡U¨¨o—ÞçVa~鱂Àôsx_«Æ­T°ûÿµ?©õ&¶~êU'êζá1c—3\ža’ã^²Üòñ1²ÊÇs‡ µ|*Êô53@_²CWø_Ì,Ù&o"cÁç°7îCΦíÐÂǯƒxí}©0Ÿ[…\ Uà¦$[¾kÍœƒ0räb=+ñõ“˜7Ê4ÉMN¾Açd•ç!Ajù6 ²¶»S‚ð{xp»ÆP^UL7ïà¡Ë'(í@(ò¬ Ñ’•æ¡¢LØýÎÿÚŸÔzî÷ÛÐ9sº´ò ÖNøÏpä¤$Px4¶¶pc"«|<wØ R˧¢H_¿ Æ-ßk€™%Ûä ÃÖ Áé'w—í(kzˆæ*0~‘5Zr…_]Uà¦$«~_'tÆ{Œ8¤ àÙd ~.¤‘U6¥i“U>Õ•I2dm¥p§Ð±¯¦š=éFHÙ‚ü2ÚC9ŸÖCÞ#Öó óƒPQ&ñýÎïÚŸÔzîŸøb'Ȭã›&1à—¾~Æ$O—GͨúP›Ã¯Ÿm:È*Ïvëy• éë oÜR/ñ°å:Ú,èóèÏs}Ø ëÝLpE¤Ë4Ù&o–.PÏa;{Z­6q9TŒ¼2ySEQöÕP%nJ²êÎaÆÿàst¤'AM0Û]œ7©²Ê¦tã1 s²Ê§º2I†¬­D:%ànÅÑ=¸Øz·/g¢»OT`/½n8l×q®¬g»ž'YÈ¿cÄVJeùA¨(QuNØõÓÆ­õê¯ÿÄlIŽÄ*Tê¬pNÆå•/Ñõ6FÉÙ‡F{tÜ ?“Vý<wØ R˧¢H_oü“ÛIØkáŒm j#æ£ÈÍ)AÕéc(Sd€¦l“7 ]˜EŸù~†Œ[…Ÿî)pS’U?5‹AÓä™4y(>t¥Û[nÆHèYeSºñ˜FÐ9YåS]™$CÖV"b¨kÁ`*Á‚¯ñ›É€Gx½d`Ljõ¼Âü T”‰Ð~—ZoØõSXß±ßòúø[$Œ÷â–þ&žzJ¤<·¡þ ÎÕ &¶‰ð¬*«|d‡}vîîîë¤y"H-ŸŠr }­lã–B`|¯ãô5ˆÉs湎ƒ,vËZ0Jÿ*5Õ…Úmï¢Ì<Œ 3µhðwSˆCVyŃ¿.PX.¯µ•ԺĪ_ñWC•·)ɬe¤{5ï ¸ñFWo&QóðXÏàDûxœŒ²¶ÒGÏ s²Ê÷Ö»2ÍÀi6àk»$×˜ÈØJT¨S~O9Š!…àËãWÇäEÈÀŽ[)•å¡¢LDÕ9 `ׄïçïaù}œ5Øzÿsõ;ŠðjC._ü ¸ìÆÍo"´Ï|…ž†Ãk²Ê*õÝg?€f“9û ÕDq^. ÏÜ‹ îEjùT”éke·äæÆ%è~éeÌi¤ô ¹êcèlýpy¹3¬±ò ÍGt°ÿñt5–Db ,!à±âĉ޵üÓâÀßM!YåÔua ¾žïèµJ3,=£™ (¥ôÓ½·Ñto2fݦœT@ËN=¶o*‡ÙË>᣼f”eà–`\ýJ6 elžõ`ÕÿÖ»2…oã%2ä… k+E;eÓãYR;w.ãß8Ó„‘Ljõ<ÏSš¥*©"ªÎI�»þÄ>·šÂËè÷Çï­‘“~õGRåÖdäävÅmÂ.Í>èzžGÇà›kpœc‡ µ|*ÊôµâÛD>÷keJ»nÖ¹}í ªæœíöaÑó�WÈÙâÀt¢ÇÒ‚¿›B<rÊ+äoK†o ¬œ6(#?á÷<Øõ+ütOA}Xõ/¹Ñ|€žW³‘øá6ס$/•?¹åF1Æ#‹ ü:š>CiÞlÒF¿Ld•ï­weÚpÆ-Ù!þ5×~døöÅ”Ö‹ÐæV&1nidÞ1b=Ïó”fc)¤JªˆªsÀ®Ÿþ^Þj‚éŸÌ“~ôš/àl»‡sð‘W¾õ ÁêœxÈF'§|Ë.#v®¥yŠÂÜa§æg1ˤ–OE9¾~4À$$ ­¿/îÁtkÉ%‡®ïÿ4?õ°nnø|ðÕ‡Éùœþo’ŸÔ€ó6_ò¿Ãÿ“ëš †¿›7rÉ+l]˜Äã¾QÚLOÂêiiä£ÔºW¿¢¯†¶ãL½ m¬õ§••:X• ˆèçôSÜ6ü —m#X ·Ÿã¸áYk&®_Æ# xWw+t•»BAl5ùe8wí: Æ™7¾ßzW¦·É¸m»‚šÂ­ôïnA~e+܉z™š‚뮕~&õ(‡B•‚ù<ßSš¥*©"¦ÎI»þ>·ÔïhþðS´¿Š~ä•?rÊGù0ì= ýýGÑ;{¸^SŠ2ãýÐçÇ– ¨cŒR˧¢ö5µ�ß�­'çʯÉÖâüéueþ¡!<» €ûæuô„r1.aªç<Š$XŒð‡¿›ÂF­ ^Xkëq­-f-Å,?é =œAã–Åœî% êS ½JñDnÙm<R¯Ð}¦šM›‘W¦ƒ¥w3!û€íƒÎD^ùÞvW¦ELºðƤŸY[)Ú)Ü×’©ÀlgHGs%!…”C¡JÁ|žï)ÍÆRH•TS礀]?×É­ýÿ¸†ÊmÐý|ä÷¢È+ä”zaAùf®ëmì¢ÙÛŒ‘ÈŠœ|Vy;`÷5…àÌ0z-To£ÿ^܇þûËÐÝR˜qKý‰ðõÌpp›|T'=¹• nã–zéÂ@è¤6ÞMa£ÀÖ…®g“Â8I#Ÿ¥$qýJ¼ÊÔç)Úë‹2Ô‡UÿD7n>|ó}Kì,«lJ7C,aÆm‡©þSÔ›îbÀ7 ˆ•÷™‰œò©®LÒ!k+%îz¢Ÿx„&’„\óêÛŸÁÏÕ«LÒˆr(T)˜Ïó=¥QòíDL“vý´qËés·Çoa4ÓiÒ@^ù^£çòUôŒ3I\eÒ¿¶`’Z>åÀìë•ÑVÌ!~žù(=}«WѨÌ̾ ÿR Òë ¹QUíé Б+r«åâI”î½ýý§<†ûyιð’/¬Õ8}‘!+].ÖÄÞçx¾!ã×GøÅ{2—ݰuÁ‹[ †¸ÆšÕB®jÉœq«èÓ½D>·š’Œ¥caÕÏÓ'˜õ¬Äׯ\ã‘5 WË_‘§y9ïÐc¯6VTW&鵕¸;e~·µ…[¡)8 ³‹;ïYiD9ªÌçùžÒÿVyûÚïRë »~zq{ë*ÌCìhÉLc,yåã¬òù‡186ŸÔ÷-zªFjùT”»¯ƒð{¸{½e'a°ôÂM‚ˆdÚ¸µC^ñAhµÚ˜r–ÑEP¾NßQ„ãw·‚¾>´è¿DSÇüùì@gw¡ôñÂRV€âC±²Òå„£+KðÝ9…;NáNBãVNyŃ­ R"1ɤϭÒO÷|¿@oú5zHAJo+ΞíÄ‹: ¯|?£¦Ê�óÚ5ó6˜¿­FaQ-Z8|‚e•‰Gr%09„nóW‘2[¯=‡ë¶_ÑÑî».Ä §|ª+“tÈÚJñ²Ÿýo(ÉÙŒ\í7èõ-F~†z=Žñ„žÕü£ U öóüNiT…|;Wçć]ÿ2^uþ„_çb̳•g°Þp‚+ã´¼òñGVù|·P­­ÃEÆ)Rl‰ž*…‘Z>å°¯ƒÓéµÀP{ŸþõÖL]KN%‹Á:Mç½ï@“÷ö¢Ò2„aË'ÈÝôJŒ©åžM™)­‡¬òŠGêº@ëþWp·F/ê3wr«èÓ=NŸÛEŒ6WrF#&È!ߨóˆbà%¼¯ÙÛ˔߉¦ý8l‹»–/kÛ)Üx5{ãAÚàÞ:<ku¾N¸Q¿Šœò½Í®LT`ŽŽï¡'k#ãMØ]ëö dm%V§_Ãi:BO"ä–]AïHÌi‘oC櫸•,ZrhàN=Ê¡P¥ˆ}ž SžX7ŠBªðClvýää&A*Ð͈xm'ÿ&%Bë—U>ŸeyÅ8{Š[B§JáG¤–OE9¬ß×ôBÑóK£%' (Åd /†0‘pÏù)Œ;µh]¤ÕæO¾†ƒø‡`:r.A–h, J1aø s"«¼âÁÒ…¤Á5—0é¼ «­÷äÚâQj]JX¿O÷¸Nnû»`ªÜíz'çOù’¥ £&ºqéh=Zão:ÊÚv 7Ã;Á çÝëh¨ª@UÃuÜuºÐgÿ-óÆ÷[êÊDù`"n¨ôߢ ­™ö¡ 'åægkÿB‘µ•¢²Ÿí<ʸ~k…D ;–<O„*ëyÿ0\ÏÙ'ͱ0¯ n…Tá¨:'ìúiãÖzUßþ²iùßV£¨æœ“ñßEyåã¬òM ï¿³©åSQì¾^„¯¯zÝUt„RWÑŸ÷èE׫„‹Céu…|ÿ9|nYå<jJËatÅ— Ä„ýKœù®`Î~uö §{¡+¹Ì #}¸}nY…á/ÌœòŠ[䮹ìú~º—À§USp ·G¹î+É#_º9±åòŒÇɱ âöDt±µû+­™ßXy+]™"þ4{ÑØ5 äê(zú‰³œY9ÒAÖVâ×)ôtßgÅm¥·<¯ f¿Bª¤ƒ¨:'ìú)ÆÇñš5),Ãÿô*ö¿û ,žøÍyåãìò‘´.ŽN˜ôd 0¢Åöoø‰Ï–¤–OE90û:ux òŠ÷  ¿–1,‡I@Åý0r§­‘^WÈÍD>·ÌRŽ–az™ÈÁÊnÛ -+‘7Z4ØVß îÄ*é’Äç–UÂþœÈ*¯x×È@pÍõ`Õ¯ôÓ=ß/0˜bNË^¯-º¹C>%·J7-úu6¦‚xí}Éév ‡|k¼•®LópêwcS\ ­%xͧDKÛ&k+qvJp îkd1h€Éò+| ô2›f9HСß¡JÁVJ~W³_!UÒAT“€õëb¢Ç€£µ?`#á~æåKެòQ³Œ¸ZäÁg݃¥Ñ“üuζ#H-_z¬Àïü º¯íð&½ó©Âf_‡¢dîi¦  KÃ7ðÉ¥Ç ³^Ðý=ŽÐ ™L\…$YÄçÖ=Ïô…ºÛj$çT <°”ïCé'Æí ¬¶Çð$ø¤ñ¹ýó¾'è0èõÃe[lp¬®RAVyŃ¥ ®¹ñõ+øj(5ïÃu‹‚Ô¯dãVéÆãúò%FùÖx+]™Èœ×‚;/…]@!˜k>DÞ–ªprKv¾_¡Ûÿ—ÐÏYE³µ¹0ò«‰ÎÁëü·›á]½ 7mÿ„+ÁäÆ~?XÏ“+ˆî×)ŸÒ}·Jv"ªÎI�WýlGÿä‹ÛLÈÇ9å£<fмƒý#LéñÍ¡G…Ń%— ŸšG%“¤œàU`SŽN±×2³V_S>Ø¿ø*âÇ> {ÝØç1Ýw % µrèJÔ*…'ñ×âB”j?B¥i`ýù8™×ûÐéˆÍË)Œ ’9»PñÙ1ïøÚýÕ0qø"r#§¼âÁÖùƒk®©?[®†*ñ©?»ÛĨò1êk]™–0=ØCã7°‘«ÿĸ=u †îñ´tž Y[‰Õ)KÞ‰ä;³ÀÞׇ£}v ®+C¾fŽÛ^$˜pˆ¿Ò÷¨ ùoÄƤhÞC™®î˜WòoB`=Ïó”Fè»U²QuNbë绸•[>¾È)ß²Sí›Êaö†/…Û1ø_fÔ`ájÜJ³¯W<·p,Kègì²õ=¯#¿Å†ù¼4¼Ç|M)ôý$ø]=,¾Y¸šaöp§(ÊÔ(Ìr )1 šþέ¦»YzЦO‚'›¬Už°uÖz71Á5c}õ˜H­K¤þl¹ªÄ[¤~Õ¸Ml…êÊ$ ²¶R´SHà†:lÉÿö ® “D´¢z÷åè±õ~¸[O`OùßÐÚå€Ûû'fÖ~næOxÝý°]?‡²çÑÅH/$T)˜Ïó=¥QòíDL“výü·òÊÇYå[x}ѵ`;A‡yï¿< w²}‚Ôò¥‡jÜJ³¯C) Šj`b\…µXnÁöè„'¤ÒëJ¬/Ôê÷‚þÿJÑ|¡DƒøšnÏÁ~óXø»µjÜúÿ¥è`PbÀÖîÀZQ_½ø|¿Rë©?k Þ¢ õ«Æmzdƒ|klW&>,câÞ-<ä‘r2dm¥h§IôCHpU/ŒŸþãôB‘ù§.c®ÿï¨û.•+R´Á9í€é‚#‘H‰B•‚ù<ßSšìWH•tS礀]?ÿÅ­¼òñGùÖò’1Ç׋ï¾2Àìx =Fäå@ýͧ4XÒþ;&ŸÁ1àMaœUIV_OØÐpü:ÓÌ >€gV+œqºa¤× NŠv5E¢ “ï Þ/Øñãä^leŽ9z¼*Å®Õ`+ĸÍ{y[±­¶ SXwÙº$°VÈWO5ncaÖ¯Ä[¤þG‘y…_du9dSÛôaÖ¿q\™øÙ<§ÿޏ"â<#k+áÃIS»ÎN0i€ú˜ß ๋6 Sž´ñ²ÿÿ×L¸±¢ïOÖó<Oi„¾[%;Uç$€]?ÿÅ­¼òñGùÒÝa'H-ŸŠr`õu‚ô#›6eú”Ÿ,¤oà+Ý´áMŒÇ䕞ÅMWª>¬>Ü»ùs1¿¼ò¬7œÄ¾@ßwzèÌOèÅ¡ú¼(­ÿ ®”ƒAÉ,¯H°uÖå¼>›©u‰ÔŸ5†oQ0ëçë,‡lªq›>Ìú7Ž+hÛŽgÊÉtµ•¢²Œ)Û8eŸŒ|æb} Ÿ†“«s’€¾ôÆS·ÖU öóüNi²_!UÒA\Ÿøúù-nå—rȧ·*©ÀêkßϨ©¢ç޵ɽ æo«QXT‹çê‰ ›ìÐ/,Úœ¬ì¢Qèij¶É†È(¡Ï¯©_éF»cuó‚žóÞWÔ- fý|}‚åMé};úh“k]·„w7ÌÆËŠðieÕ¿a\™øÀ?åd:ÈÚJ±j¨kƒ‡+× ÍnÿŠw›àN¨ƒ^Xkëq­muq[ÚЪ+C®Ö"ªq½‚ÈìWH•tC礄«~v´ä›°»&o™rȧ·*©ÀêëÀKx_³µ†ò;Ñ´¿�‡-càšö²CWèy¹¦ßšÛ¢s±Ù€ªÂ=¨iyÂXp*…l“7 [&ð°éìžùµµ å÷bÀá€ÃMb'Ä#µ.‘ú•n�qßœ`–̬úyúË![Ôx$‡<}hщ¦’á„|v óî�&äñ”µíèÖ™ènD¡†îÏœ”jµ8Tœ‡Í…çXñx˜È!߯seâ{ù®ùûk¸SN¦ƒ¬­ÄîÒ©¿âÊ×]ðD|bC,ý®K'P^U‹ºÖ˜Ý4&‰Û¶k5aeÖìDeëÐZ4>¡JAžWª“¿Š2Cç¤$¶þh´äMЄò¯íCANÊÍÏÂ~m1È-_äO5nURôu²ÍQj¢—ŽÖ£%A›ìЕyŒ{§ØòS³xڤ݇ÛàI|`’!²MÞ0l]ˆœ>ç~Ýj*à<½_cytsŸ‰ÔºDêWºqÛÐp=¼fü¡¥ï–A×Ýà kÈ¢ Þ¢`ÖÏ×'˜ù¬°ê'9–÷¾C¯>À¾‚BTZ†0lù¹›ÞA‰q ã‘°±2Ó®m(ÑýƒqZ»„™Á=ž¹ÐoûšAxʹõ‘µ•¸:… yùŠDẖL¢,ßÁ™Â­ô@_Cï – U !J¹R…?b蜔°ë_ÄHó!h4{ÑØ5 dç• Ãzâ,grmyåãòm¨‰Š•–  f» “ vàUø±át%U¨—è¹tµ-â-\$% äeëmÜ~ü .^*§ŠíÐÂG¾³«Ñ£#¿ÅDj]"õ³¯†rô Ãô+&"™È!ßê͉eç7(kþ=ƈBOý>EœÜòõ –S6,?…q§6ì>¸äFó'_‡3œi£òÈU¸8÷òË÷ñšOëÔÌe_…7_è9of6š BùÞnãVž”s²¶’´²ˆ‰þ¿‡™k é…øÈ\Ü $ôýB”2ûR%ÄÐ9)a×-y•%xͧÔhÉú7ÌDµ––€ÜzÉCñ¡C(-؆ÜróZÄy•ôÙPº’”|OhÃÅ�î2Œ-68|ÄKPl8N] Ôqžq#—¼âÁÖÚ¸ ’.Â×û ´¹›‘«ý½Þ‡5n¹!m=€»×ÏAKN#ncLä”oÅý5ö²‚Š…]r‘“àû*oûqù'F^Ù‚˜°‰ó¡M�’âóêìN÷&LÇ%«|Ô œ†2ÐßA?¹¦*½èº^‹]eFüƒ|~܆³uk§¸rÈ÷v·ò¤œ“µ•$ëzQæ¶|†BÍVT›FJú~!J™ý ©’b蜔°ë'+Zp`ç¥h~éÀÌ5"oK•zrË©£LT᨜ñFý‘¿ˆš‡Çz'ÚǽØÏ6’®$fþÁïC›Ì›rv¡â³c(Þñ!´û«aJpÝ:}¼°6ðK_dÑ)šQõ¡6‡ ÞU=NˆœòŠ[V[òßÄÝë! ÚíØôNrÊbܧ1Òk¡º9ô¿mÊ)Aµþ .ê:3/5‰ÞƽÈ/=’¸þJòhÃ;·Ínî…¶¬òMtãæÃ×1º˜8à•¬²­Œáö±ÐÐ?#? ¶Õwƒ+Þ¸¬òQXÊ·1äJP4‡Ð<öÁ%Ÿ¥„Ôÿv·ò¤œ“µ•$é”àsØ÷Ñ&ã:ÎA¼ö¾T}nU2†:'%ñõ/az°†Æo`]·§NÁ°ê˃üòñCùÖòr "P“ƒx4ކ‹Ôòñ!6-Á*”׌2“±JÒ×~QCÂ| šú§i=Z½»ôMŸþOüZ\�‰"3JÎ>4ÚŸ'nsYåò·E¡Û¡ücèÿáÆäª_apݺX5™°ŸVý+Ã0|—þÙä•~†¦Ž'ÿÇeÌÏÌel^aù¿Ss}Ð]M%´Úèj¸Ž£ñ·ÿV‘µýx¦ c=+¬úCÆã>Ô˜~b\™¶Àj{ D‡LëÁ®s=W`èƒÏçKR^¯¹aÉ!ßÛmÜ„¦œ[Y[iýN bÞ¿Hÿq+ÌÎ!ô¯¤œ~qJÞŽ²¦‡‰Sؘ ¿¬ îB•BˆRʯŒðçúïÑÞ7Œ™u}çÈ.ö8uü[tûà÷þoh€¢ë€Ã9–B*LÄÐ9)Qå«~_t·ÑÇ<E¢Ë£æOñ¡®×óµ t©åãñ™:°:Çlä~¸Íu(ÉËC¥zr+Ò×~Q³ì„~{ö›ÇÂú²j,úÿ•ðšbúxqKO½1óþsê™à$ÿíuÁ¦ÓÃ6‘àŲÊ+l]XĤÛî6=Μ¹½Zýb/ŸOeÌxŒB¯Õü^8ï^ǹŠqÜ`A¯{‚^ßeÖ¸Uòw‘U?Ï´a²Ê†èl8ƒëöÉr²<ÑòÊ7‹¡A/Þ,³[‰zéÂ@‚1AùÞzã–ä'o1@×ô ÜÄÆúàèì‚sBœ4@Y[i½N ]‹Ûv·»…êܽ0º"ÿÂõ¶³G Õj—CÅÈc\˪B”R^…¤¥­UÈ'£é÷†ËVž¹s²C(ò]Jþަ‹ÕØGü—‹ðÃÕŠ°Þ& r˾-T÷Û€:'%ìú—1ãê ï¼öy±D6;F{Ñn½ŸpБW>þÈ*_ÂöÕ¢ANÉß`g¤ ?WdÃð)nþ†Ë¶ºÿ‰qû9½ýGòqC%%H_oüE Ù…/Å.ãSZhˆ±˜÷ ò¶J7–^¸º|ˆ h¼ìÆÍobšüwðz'ñã’S^ñ`ëÿ«ÕRëRâú—03Ò ‹¡U¨¨oÏØÉrÖ·<Ó†É*[ÂÛ‰óD³Ÿvý^X«+pú" -kboè;¿ßSرãîøÂ7–äïí6nW—æ¡x_!ò+-nÃabo”\Á`òSÍ”‘µ•’u ˜ÁKï�ÚÊqX»»ëoaÐ;wÒÁYô™ï‹jܦ{QN…¤^µ£òÝrèmÎ5Ÿ#*ð ƒæÓÉ}ç&ÚQ±åSئ–A6cϦ ´ýfÁ±:ÜqŽÀçóÀÝe@ÝÍÑÄu¨°C礄]? q»ÏÜ'°Œ¥3ÊsßEqU *Ë è÷Ç-#e–?²Êçûúæ'ð2O‘èòÜv‡LŽÐ{Ýw ;‘/ÔòñÂ? ×óä;§Év¼U’Cúú­XÔ]ùïôЙŸ`:è„>oJëJ C‚3nt››èE«¦öG™ /R×Q¹5‰On ²Ê+,]HãjµÔº”Jý¡(üŒ–œ5Æ-‡Ï-5qEôïü¿ÿ5·“U6b<òÌ-·|–²â8ü:aÁèJfŒÛâÊ” pK±'¡|ÃÍõ¸º-¶�·é³ä‡š<µ•wJ€þ£JCÿ¾9/Ù´ yy[éÏï`oó³øYáÉ­Çb 'Ö›`y0ñé °¤ µð/ V Öó<¯ Ê©AÇ—8Úžnõ|çÈÉSŽ.t+èÐ!‡6n-Ž64®^Ù"Ì÷ áËô'…· QuNØõ“(v§Âaý©W°×¾‡Íe7á ¾Q£%'€UãpÙmÅ7=d GUSÝh(º´vÝQjùxá»…jm.2v¸cKtÇ[…/¤¯W5ÔŒ wÉBÐúÞ% ”ÛÆ]ç«„c«¢t%!bE0N w+*cr€j Ï¡+t;‚þ¾ùœxèNæÇ%§¼âÁÒ…4®VK­KìúI?ô¡Eÿ%š:†à§Èg:ï`"Áá…òeq«dŸ[®ïÏ:y¢å•+ehrd•/Û]™Ò„šèÂç„Oöç쨫³c.8¾-9îä¶ö'8=bf-ñ2‹ðu‰ýä:]7³h ?ƒ%fRKöþT`=Ïó "ù™\PžñIc7¦Ö¾d`·ë÷á 9É©+É Vôzæéß'Æí;èó»`:z_5ÿ‹ùï8G÷ÍŽÄá*Üíw©õ†]?9é8…F»Ã]P¤‰LžjžÛ„°ê_/ªeèÚr«ï(óä–ÓÊòŠq(v‡;¶„v¼#Ϩ¤ «¯é ½v÷°yæA-=ƒ¹<9ÅŸàtåQèúCjãP”®$DŒÆ)B£½²Zý/pz#¾›T�“ƒf?ѱ–Ú#92Ê+"l]àµZj]bÕ÷Þ&ïì+(D¥eÖO»é”87ä/{Œ[%ûÜr°NžèŒË·²Ê—õ®Lé°ÏíOcÜ&#eÛçè™gq!k+­×)Ë.#væ¦èsK¥ƒWP¢Ù‚|í¸féŠì~ôÂn¹JaïA³­6Æ‚|½÷¯ëyžW…¾›~¸›+°mu¡ZZ ¿¯)úýsÉö°ðXiãfSö:lÙi„ky~÷-4ìχ&‡L˜Ç`ñ)o²W*¢êœÄÖOù"AÚ¶¢ð쯘Xüö+—¡ÓµræÙ“[>¾È*ߺ;ì‹ð9þ õ|¦™@ß3¥žUe?̾^v~ƒ²Ðíšez¬=m›+`ö’Þ®Q”®$D„Æ©BŒ¸Í]@Sc0—}•b0(å" žW«ãžVýdÓ|§6|#ˆ­ûäëpª¹àLG®ÒkŒÈï1C¾¬1nísëý›X9‚ Ê (åÃ}«óJ•/Û]™Òb /,EQÍߣWÙC·˜î⑇Á\ ²¶ÒºB0;KOðô×uýhÉ“°×ì@~}÷Õ–P~ÆìÖ=ƪ‰,T)XÏÊïbýW:µïýòŠþoŠuQv…¤ÿ~oßOÐ×VB[V…3ÆN œõ fá²\DUå9ްܸo^GOŠÉÄUDÖ9 à¬?èÇä¤?¥‰?#òñ@Vùxî°¤–?éDYWIf_¯ŒÜÀ‘Æûøcø‹Þ‰œ°%Ï)¬<]áB„Æ©B|M?¹„ž)Ƽœ‚ûöY4§˜ÆGFyED¨.H­Kìúƒ˜°‰ó¡ >×áêìN÷fôÚtÖ·Pݸt´-Ãä•Mù¥-_¶»2¥Kp;Ã4«ýé¿5°(Ú&¢Œ­D…:åV‚¤ØñШ¯?>|÷å AüLò>†Ùó&òÞüýþ+k;ƒB•‚õüz§41WYÏJMNêœP ð9:aÒ;#ZlÿŽø2«¤ŠÐ~—ZoTù„ÁªŸç;Ajùø‘f”u•”`õ55‹AÓ‘PzMa#º'æà±›èqö+´Ä¤ÕXEYº’1"§ ñ¹mAÙ¶üHÀ˜}(ÈÑ`“ftý~´œÈ)¯xÕ©u‰UÿÊnÛ ý3òóh¡ ŒúnpŸÉ!ßZPŸDH0îÉ!_’´zÝUt„\íÈ  { ýóå•Mù¥¬gp½muÙ”è*« ³:3/_¶»2‰ŠŽKõ¡Lb k+‘Né8¯CÛàëu¬srzð3Î5% ò+ ?JŒ– ½h;¬ç×=¥a_A”U!ÓpRcmñ¥ANá|ö×=ØQúöW^WSñ@T“�U>a¬W²v‚Ôòñ!í(ë*)ß×Aø'_§œ@Iº’>)F0N™¼}¸©¯C…ö0ªÎ4¡}ÝõÄ–W„ê‚ԺĪŸòÀ33# ��”ÌIDATR¾5¦Ÿ†VÛcx”pm:A‡•æáŒ¡™š-È+Þƒ‚üjXÆ\°ÞŽMšý0f:È£ÒJù16:3wQXr]ÃÇú'k·:™È*_¶»2¥w ÀÕ¢)¬ƒÙ1¾ÎÍÝõ‘µ•ˆà”ÿ)ÌÕ{QTqß6·¡ÝÞ1¾úÑgï@[ó×8S±ùû¿D7É:ž?a;Ñ{2çã…^4jYóÉ!ïëy…ùA°HÃI=ÊcÆÍ;(Ñ?Â4½ø :ô¨°xèAÁ„O“¥RaAÚ[BŸ_U>aÄ×ÏïZ¯Ôòñ!í(ë*)ÁêkÎ{6±~aJÒ•ô!7²Ö‹`œ*üýýø#¦¼â!T¤Ö%vý¤ ûЙàF²ÊBk%×É2]4»Qkî»±Æz^˜õ‡bÑì!¾å´Q6|Ÿ\"®vt›º¿ÇãÓ¸HÀrÊÆ‰¢JyñsS;~gºø<øOûìˆd‰EVù6„+_HVŽbäW}ƒ6Æf—År:mid¬ ®a‡h²¶ÒZ§¿» 5ÅÛB?‹rJx:‹#…믜WQw“{g ü{c)v›†Ö M¡J±Þó™ôƒ`‘†“z,ËN=¶o*‡Ùög ·cðÓ àu¡›2RëœPTù„Á®Ÿÿµ^©åãCÚQÖUR‚Õ×ën@’Âö #?Ë^‚Äž5øûÓ¥ŽòЇP]úüz°ëWvСÐZ'¿ FÖÕU ~ÒÆ®PÐ+îºØ§“²¶åƒý‹¯`Ÿ"‹ýIØë.À>·ˆé¾Kœk1Ye#s„Ó<EI4FÐó²î=cÇÃ~^|Xõg½+S:éÂ¥Ë¿ÆØ´Ñk¸€ö aFí*²¶R|§áŸƒ+tr;�÷óižGÑ‹ð=ø_wý‚Â’ç>.UW ªþt-Ž5§e¡Jÿ|ê§4²*dNêq,<¾è�Œ®°.I ”÷þûÈ[Mú©Êzˆ¯sâ¢Ê' fýé\ë•Z>~¤e]%X}M\G®³Ó–Ö‹(ÛS‹kÌEvgÔ/LYºÂ“ —*IÎl1gþþ~)#‰¼â!T¤Ö%vý ê|Ž®KF<ˆ¹vN"šÿ_ÿ÷xä9å[ñÜÂ1Î+œ;QÏ‘–‘ù¬°êWhš§($`\3þÉpÏs8z`>{í/¸o.Ê+_<ÙäÊ$Êÿu|=É¡o¼›W‘™ÈÚJÜ2'=!}m÷pîR¬m¨S[x U öóüNi„¾[T8œÔã!»+½øî+ÌŽ×:õÈË;€ú–þ„;r*ñˆ«sâ£Ê' fýé\ë•Z>Þ¤e]e]X}½0ŽÑ?cÛu®¦“Yžç–k^d̵­pøÈ¥J1àïïœòŠ‘OBŸ_výÊ :d×@­y(l€QË.3YÂôoß¡Ñê|f#gûQ/,(/ªiµíBålF8Sä”M©iž¢pùÜÒm:ÚŒ+Û9saË+!{]™Ò%šr2…'ñ×âB”j?B¥‰û*{:ÈÚJÜÞÕˑ᪫P¥`>Ï÷”FY 爛*É‚,¨Ä#¦ÎI*Ÿ0˜õ§s­Wjùø@͸p—,œ¬à]¢è hÛN•S…¬¾öÝ…©ÝÍrñùþÛ™¢„s¡’t%!$‹ÁöTo2âtùIí®Èý® 3"-`âXÇß/ŽLË›&BuAj]bׯ̠CU›7as• S‘Ÿ…!††¦š=ÈÙ”­%sÆmÔø¦×kïÇä™Ol|Ë![e¦yŠÂurû/üÃt Û¶ëáT€ñÍ®Léñóah4¥Ð÷OÒä‡CW‹o®¦Æäpx k+qwJv·|Oi²N!Ó² Ð~úüz¨ò ƒ]?ÿk½RËÇ‹9;jw›gÔÒ3˜ËóSü NWMxš¨’:¬¾Näs›sÆ ù!нïú—øØs#mDNv€8Å(‹l“7ŒP]Z—Ö­_A‡ÈXý®ö;<!7(˜F­†÷j`¼ñt·2gܦk|Ë!Û Mó%Á•xMŽß¦[3öóâì?û]™Ò”ÚMûÍð†þÀUãv‚þÿJÑR®ÉÚJÜ’¥'·<OidWH´«ûGӼϞN•xÄÔ9)PåF\ý<¯õJ-ˆYYhÃnSöÓØ¶¹"”sN–,¬¾öuÒãò=ô³N\›¦Û;ò+±(IWC‚õÒób’[A+Ï`½áäLÃ!?Ù&o¢ B‹”­_ù1áìDSý'¨Ðµ0ÙÝ‘k¡ËfèôŒÔŸ®ñ-OÛEH’æitæ çX&«|ääÖ`Áë†ÌKLF I.ä”oC¸2ñ†6 hW\Kä/'Æm Þ/ØͶӑÀi‘µ•¸;e“n'¼þ„“:/‚ ð“E*€ÙYöBA¨R°ŸçwJ#«BR/Ñ}öhÈ X°ZíAçå&½êG Wp²ýEä“Êzˆ«sâ£Ê' Výa}43Ž1²s µ||X¹#÷ñÇð=4½ ö2õŒšçVX}œ€ëîÿ†^w¡43ÄUä^Ò+àJÒ•Ä$ SD\Ä#ÛäM "s&ú~©åg׿‚€ï :šÎ ²Z‡Öne·éßrÈæ³…£µ?ÂM¯µãÓ<QN;`lì€/ò&ò´Ý*©ÇäYENù²Ý•)}èù®ï¾ÒýÇôœú䕞ÅM—x)×dm¥¸NyãDÓiú û×,<áó_8½“C®k±íh~û¥¹;,‡v¡J÷<S9rÅmÂ.Í>èzžGOkƒSl®Áñ©!ÿ»¶›0ÿÔ§úß @tU>a°ê_7!{<¬ç3 5‹AÓäÒ2i Ñ=1Ýî+´°/*éÀìë•‘fìÕlA^ñäWÃ2æ‚åðvlÒì‡qûZ–¢t%!^XtøqŠc±´@Wv5×~düì.œ“Bgz!È3 I<rÊ+™Ö¡ï—ZþDõSîšP_y W.fôZr~Æ·²Ùªþ‚M›?…µáC 37ì¦Zçh°IkQ€qËyåËrW¦´XÆŒ«+4®Zû¼X¢?ûG{Ñn½çwëtµ•â;enS NædÄ«öÏQÇ;Ý =�Ìü ïàm4|xÚ þö�¼“þ5cLT¥çyJ#§B†’~¯Ýg¼ê@ÍÏb6Ù@õ¿QuNTù„Áªß׎3õ&vbòV*+u°fKBvÚÀuw\¥ Z]Œh±ý[õ­ f_‡Æè=Í¥ ²¥áøäÒcz6¤‡îïqÄø”žîãQœ®p”þ]×p8A^É´I# I<2Ê+#™Ö¡ï—Z~R»ƒÛ·=5{Ù&¼Óì‰ü€òq‘Šñ-‡lw ÊÞý¦§Sôz2ƨÍÙƒ#ÙíT[âêÏbW¦ô ÇÎ`÷™;ð–±4bFyî»(®ªAe™ý~qÖ²¶W§P¯:p¢Ž‘ëlÉÓ#œo’^\¬ Á´‹äÛŠ¼¼mØô—<ämÞ„MšCh ô<OiXÏJ åwÀ°÷0ô÷Eý¹úîázM)ÊŒ÷CŸ[. .É)®ê'Bû]j½Qå«þ„é]j¡Ï† Ak'·äÁg݃¥aåu ¦Y]… «¯)ì_|¹ê: {ÝØç1Ýw %YíkåÅÏ&ÆX>nã¶}Ž9ºÄyÕÓ!4$ñÈ(¯ŒdZW„¾_jùIýÜë7fÙŽjÛKÎ5ùw)Y·~j¾þï¡ËX´dÚ p†O“+áƒU£Öd‡;ä#L¯ƒËÊl»uU¾,weJPêTxܦ^Á^û6—‘œâoà5ŸÚH¥fá¸Ô�Ë‹ðbÁñ >µx8¿ɉ=¹ÝÚ¶'ð¼œY»š+ªÒó<¥‘S!CyшaO¿3YÑìmÆH‚MÕÿNH; Aèóë¡Ê' Vý>š,.Æ"™.Þ§h¯ÏŽô.”ÇŒšwP¢„é ½xqèQAÅK.>Màÿ£’:̾^ñܱ|²;.ïD}ÏëÈo±a>¯\ù°nÃão"e⟆$9å•ò7d¡ï—Z~RCÃõðºí‡”¾[]k4oÛµÕ¢%C7nR«?s×’™Pq8:® ¾òSº »UãvXõg»+SZ÷ÑSh´»1ÜuEšÈ߆õÄY´¿gGQÖVâî Kä*–á7¼¡ÆÑ~â¼€À p÷"WŸ[ž§4ò*äkô\¾ŠžqÆ"›«0®lÇ¡ú߉‚¨:'ª|Â`ÕŸh¢Ò”$¼ÊÏz>Ä"¤o*‡Ù×ÂÆíüŽ/ž&ª¤³¯CE‘<ªkålþH˜ŸUIº’/néLøµŸúßpMñŠÖŸi¤!‰GFye$Óº"ôýRËOê÷¾hÑ[jL¦ÐS¿/c†ú3&9M¸ Sý_QÕ Gƒz-™VýÁ•) (ÿ�LeÛé¿e+ ÏþЉÅ?`¿r™¶/Zcò9§¬­”°SBFm#~ùçÕ°‘ùq:P9ÌÊ-™ç)¼ ¹_ÏuZQRÄÉMþÉ×ð'óÍUIЍ:'ª|Â`ÕïûzÓ¯ŒE2]z[qöl'^$øI-/ž@_t�F×|ècСCÞûï#oug5ôS•t!}õó£Çä‡÷c&òpm“®{øß‚‚<¥H’4$ž”¯ÑË(¯ŒdZW„¾_jù™õ¯¸¿Ã¡Æ^Ì1º›ò;Ñ´?7c7n„ÔŸyÙH�¬GhR[NXõg»+“‚~L&;`ˆ¬­”¸SÈud=öìø4r=9t§wÜ…;å-Uzñà6FÒÙˆªô<OiXÏJL:‘8U¤Ah¿K­7ª|Â`ÕÏ9Q-b´¹•Y‘,ì{ñÝW˜¯tê‘—w�õ7Ÿ&<MTIÒ×ëûùeùu4Q‚<¥ Ñר4$<‘U^ùÈ´®}¿Ôò³ê§&ÑÛ¸ù¥'РÓábý1”ämÁ¦Ü 4»¹×K²ÊÇeÈ–ÙkÉB‹”°êÏrW&%#k+%픥atÜø¦“ÎRôdöâœÿ¼-i4±Á)¸o7âhSt‚ªl¥äwJ#§B¦‰SEDÕ9 På«~®1¡¿ ¦ÊØ®wfq\1 }­d??Q%È“Œd›¼)’i]ú~©å«ŸšÃèƒèj*¡ÕFý=}0:Çù=$È.”,AjùÖCQïÏrW&%#k+±:%ø}-èš~›\! úàèìJ!ÏÑ2ü.3ª‹KPqæk4·uÀÞ×YLöÂÞÞ†æoÏ¢¢ð}ì×ý ÃЪ¬çyžÒȪiDâT‘QuNTù„Áª?ÁD¥)8…ۣܡiXÏg˜PnkbhY©¹­%€ôµ’ýüÄAŒ Or’mò¦F¦uEèû¥–#Ë÷¶·Ýz(êýÙîʤ`dm¥h§hY‡ Ñä¡x_!ò+-nÃá\ 4%W0¸îµcŠW‹®7ZrQXy Çx\@¡JÁzžç)Ðwó!Hœqø‡áz»Ñ°„—C˜X¯{TÖÚïBŸ_U>aúÇžûÃÆ=&Ìì+F¾ä>ëRËÇ 5·µ¤0ûZ‰~~¢ J'É6yS„ü ™Dèû¥–?®~ ÉÑ “>µüÞ²ËÇ%ËFZ¾õPÔû³Þ•)MÒ>ÜLY[)Ú)$ªq)ö„v®0Ü\KŽÙÐÏݦÏ`tñÀôcbÔ6.n<Ÿa‘b"T)XÏó<¥a=+1éDâŒÃw ÕÚ:\Ô‘Á~µœGMiy8à õwŽaÇñNøR­ó-Dh¿K­7ª| õW¬#Ô2‚Ëü¾ RËÇ5·µ´°úZ~~¢ J§äH›-§NÁÐ=Ž%ÿs yÉæÙðƒÓ1€ÑP*’‘AÞLi]ú~©ågùç÷–U>ž(Y6‚Ôò­‡¢ÞÿVº2 =ÜL Y[‰Ù)ÔD¾8ÿ�Sä£®Î޹àút•ü“øú0ë®ÂîMnõ U ò|º§4ò*$W$Nšà"IN‘XÐÆ{Y^1iµÐ²J9NX†±¢·)!†ÎI‰*Ÿ0HýkÆmH-ÔÜÖÒ×× óó‡DAž‚ÄØ /Œ¶”žÃõ¦ ¨Ú÷lÒìÁß~øåô∴ѦÜ#0 ’,© µ¼™!Óº"ôýRËϬ?üÞrÊÇ%ËFZ¾õPÔû³Ü•)=D<ÜL‚¬­í”ExnŠ|M|§nÚö9zæ_á$¤ ëÅÑ÷§y>ÝS¡ïƒ Ã€Jópj ñéô=ËÖX‘ÊA “U>aú7Šq«æ¶––¸¾VØUHI :p©ò&<©n®&äÚ+ Peû“n¿ßѼç/жýíÇŽ@wç7Œú|ðºïAW×W‰&ofÈ´®}¿Ôò3ëO'¿·œòñEɲ¤–o=”ðþ ãÊ”&¢n&@ÖVŠvÊ^XþŠ¢š¿³®Y¬6<tOò_(f¸剬 Bk%—]4»QkîOºˆ 1ñÖGÓ1 ÚäyUâÚïBŸ_U>aú7ŒqBÍm-¬¾VàUHqðÃÝZŽqMö×¶Âá#±ûÓÅ ‹¶8<×Ó¨.'ZK,x×*BOÕƒAI-of òg¡ï—Z~Výiä÷–U>ž(Y6‚Ôò­‡ÞŸî!!Óò GäÃÍÈÚJ¬N Žãaço1©üp\ªùyñB5nY„v"ó«`lclÐå'Ýaì m(Xq×5•|ÂNp]"YF•x„ö»Ðç×C•O¤þeܪH³¯•xR–Ðo/@•ñ&kî±ü¤ƒvW$Ä]fÒž@È•¶Qß31nw¢¡Ï·éSýê:Ú,­¸v®»Î¤ Jry3C¦uEèû¥–Ÿ]?¹šÎ/¿·¼òñCÙ„–L¢„÷¿Ýk†D‡›wñÈ9ÑY[)Ú)îVTrFô%WâêèA&>ÚqB‚“p;žÂ»N�R·ÈóÙ`Ü"ø]—Œx0Á–tÙy'Û_D>­ƒ¯#š“qµ´^DÙžS ó0ªÄ#†ÎI‰*Ÿ0Hýªq«’ ̾VâUHqX„¯ë[\~àcÏ´i8Ù‰ÈÇô¡ §혘êBÍ–=!-Ê?kÃGÈÓäâý‚÷QfñF~=¤–73dZW„¾_jù7²|R˶™~ÿz(¡}Þú5çᦸÈÚJÑN™‡S_ŒüªoÐÆ4ž,7 Ó–F"vÁ5“ÜX%ݧ §Û½1Æ…ç5|ÞÁ‚"T)„(¥¼ IOؽÍÐÿ;:Ü$°ýÙq_¾JÎåóp5TÓ‚ð@ “U>aúUãV%X}­À«âA Áõæn!\÷V4Výg8N×–ÝV|ÓÃÇ,•Z^ùÉ´®}¿Ôòodù¤–m=2ýþõPBû¨k鑵•¢B®táÒå_cr¦ÎÃÑøþï Í’ ¦#F8ß0*¢ÆÑ~â<ìSìz„*…¥”S!WFš±W³yÅ{P_ ˘ –ÃÛ±I³ÆÁµ}64Y\lGw¯ ¶†â„yUâCç¤D•O¤þG‘› i䆖Z>~,Â×× ½îjú›b* a÷µò®Bf³rùë¡E½ta æÖÒÛF¦uEèû¥–#Ë'µlë‘é÷¯‡ÚG5n¥GÖVŠí*ŒÉ㔎Ïm¯Ú?GÝÚn7…%÷÷8bø oBŸ£U !J)§B.»ŒØ¹§£ÝÃ7ðÉ¥Ç !1‚¤]ŒO9sgÅ‘Èç6ç ŒÎlMm/?Bû]èóë¡Ê' Výi䆖Z>>ˆ²)¦’¥ëröá…µº§/2¿o:\¬9ˆ½ô<·DÿÏwçvì8…;>¹o7�™Ö¥ëz6È'¤d’L¿=”Ð>ªq+=²¶R´SDö¹]xŒKŸZñ"ôû³´Ü�Ë‹øÉŒÔ-ò|º§4BßÍ Êû_EN®'a¯»�ûÜ"¦û.%ôçŠÃ× ñú™É¥x6ˆl"¨¤ÂªN )RÂõ>¾EJ¸ÞÇ·H «~ÿÜÐRËÇQ6ÅT"´¯•¤+‰‘ó4Õ KYŠÅ~ßèr‚ѕTŒÛyú›i]Qº®gûw1ÓïO†’e#(¡ïÞnãv÷;ñh>fÔ]yë '½æY[)Ú)bùÜ®B’ÿÖÁàôƒzÕu]áüI1U Öó<OiäTÈÏ-ãÜ8؉úž×‘ßZ‡ÿã†s,Öx§ÿ¬ÉA< û‰©GN½HU¾ä°ÞŸFnhEµ¯›b* Ú×Jÿ.†‘ó4uûFnºlÌÓ_E‹i µüÙþ]Ìôû“¡dÙJè»ãÊ”Aø,¡¿#®l;çNš.²¶>LbŸ[§áÚùøÜFµVüóZØÈå"úþô`=Ïó”Fè»ù@½° ¼(’Æ`­Ü‚íÑ ý¹â Ñ’u·ÑÇ:¹uàQó§øP× ‡ë¹š SäÔ‹tPåKNÜûƒSpwÿ#Y$oÀ¶Î %µ¯(›b* Ú×BŸ—1NSô ÃD¯-"“£�y% Óº¢t]Ïöïb¦ßŸ %ËFPTße¹+SzÐÆ­U‡†ÚöIZuG°§æœ“âl£ËÚJÑNYÆÄ½[è™Zdïº :–&ב`GÕêõäx„*ëyž§4r*$5ã€ñÿõþ?Má]¢@ùGð°ýg~aæ¹]-ä”ü v_üé®Jê¶T2ª|Éa½Ÿz‰î³@C¾ûèòAçå¢ðÌ=øl)©}EÙSIˆÐ¾Vúw1Œ§©é°‚€o�w¯Ÿƒ–lÐh-ðEþ%9™’WZ5.¦Ôò“ú…–L’é÷'CɲÕwYîÊ”ÆÆðgìšbé)šëÑïuIY[)Ú)RKSX¹‹&ÃÇýú…÷<S¡ïæÅœµ»¿€Í3jéÌåyÈ)þ§+¦žÆÇ÷ ôÍOàeFK¦ËsÛ929Bÿíußîü½„×'TÖGV½HU¾ä0ß¿â6a—ft=Ï£ã�=F 6×àx;;-Ù*Šj߉{кÇ4sü à™Õ ç‚ú%ŠÐ¾Vúw15×]+,–ôyôç9Œ>ì„õî�&¤¸éœÆH¯†êäÐí³)§Õú+¸¨£ƒ‘_IŠÜòÊ„’ÆÅtÈvù¥FÉò©m—Öû³Ý•)-hûïçïaù}œe[xÝ¿ ¡ptq‚WÊÚJÑN!ÇÒgQõ팂ðmU1Š„K'¹’$T)XÏó<¥‘S!—ß ¬ùwz1½Œ)ûilÛ\Š@MyÍ(KÕwŽÓ€®{-‡ E¯Û»ÑPt Õ/m”>P©ò%‡ùþP@¦ýfxc¾þÌï5?‹YÆø ¨öMx[#qîU•ÔÚ×BŸ—‡IØkáŒm j#æ£È¥ ΪÓÇèïÀ#ˆs{eæƒïÒí²y¥Ÿ¡©ã |²ë¿Œù™¹Ôæ99å•‘LëJ¶ëºÒ¿kJ–Om»äĽ?‹]™Ò#Ñá&mKíim#]ÖVŠv …Àø8^³þ†eøŸ^Åþw?ÅÃ÷ªkjW’¢ïOæó|Oi„¾›+#7p¤ñ>þ¾‡Æ¢w°­–Øš‡Çz'œ q³„w7ÌÆËÐé¿G{ß0fVæ+Ïм7¹ÕwÔ“[È©é Ê—æû)¿†½‡¡¿ÿ(ê§Þw×kJQf¼úüØruŒï ¢Ú—øÙ7\gl8Ò¥õ"ÊöœB‹3�C%m„öµÒ¿‹!–Зµ`”Vjª µÛÞE™yAj 沯DÞ¥ô{á¼{ç*>Æqƒ½î z>æaÜÊ*¯|(i\L‡l—_j”,ŸÚvÉa½?Ë]™Òƒ6no} ã¯ÿŠ®“Hqc2´9)²¶RòN b¢Ç€£µ?`ПâµdžW’„*óy¾§4²*$5‹AÓäÒïÔ6¢{b» :ÝWhq¼Nq‘ꇻµ ùæÎÊVÆ—n>Ç¿àNµ¯T8‘U/Ò@•/9Ì÷‡|V73¿/ÜE³·#‘1œ|V ãý36hÎ<\M'SwgPIˆÐ¾V”®$‚lzÑÁþÇÐÕXMÈÍh 'NtàUj“O,af¤C**ªPQßžÚµäŒÉ+-™Öò~¡%“dúýë¡dùÔ¶KóýYïÊ”‚³³ðÿwŽŽï¡OñÄš/²¶R´S–1ãê Xû¼ô´´ ÿh/Ú­÷áœHñÔ6+IB•‚ù<ßSù2ÿäë´#S¯ÚQùn9ô6'¼þpkRW4Ÿæyú«’ ¥Tª|Éa¿ÿ5z._EÏ8ÛO=®Lúׯ'Eµ¯Ï†&‹‹-«×[C1rÔT@‚Ú×Jÿ.†¡çòÁïQ–«Á&Í8Ûíâç®L‹Ó2LT`Ö”£%g^^)Pº®¨ò CÉò©m—æû³Þ•)M(ÿ�LeÛé¿%…'ñ×âB”j?B¥i@´à•²¶R´SV0g?ƒÝgîÀXÆÒˆå¹ï¢¸ª•e†£eñ¿’$T)˜Ïó=¥!ÿ-+Ô|ŽN˜ôô$­3¢ÅöïˆñŸAÇ—8òÛeÃËoWe]d× ž¨ò%'öýT0H/—SGQí›Èç6ç ŒÎ¹È/©¤‹Ð¾ú¼|¹ù5&#›¢ÒB\’ž Ãd ç¹Ë0¶Øàð-ðÜ|•S^yPº®¨ò CÉò©m—æû³Þ•)-ÞÀc> ¦úþIÚ–ð᫇Å7 WS#Ìž7‘߆¬­í”y8õ§Ð<ºH÷î+ØkßÃæ²›ðßÀk>•F´¬Ô®$ U öóüNidUȵkÉäÁg݃¥aåõ”¯|SžñIc7¦ÖvŒèÀÌn×ïÃAó(ÏŃJ"”>P©ò%GèûÕ¾¾NèŒ÷п:ɆÊ�žMÔï»l(]QŒSל]¨øìŠw|íþj˜gßjUº®¨ò CÉò©m—æû³Þ•)-ˆý·›ÖN¬WÛ úÿ+³=Zò"FšO¡ÑîÆp×i"Ñ8Éu¢gÑþ*ýÔdW’„*Eìó|NiäTHÊcÆÍ;(Ñ?Â4mœzTX<Xr™ðiʆ©îæ l[ÍÁUZòkÖ}‰þ9ÕÏV,”>P©ò%GèûÕ¾Á9ÌÌ«ßm©ØPº¢¨Q˜ä@Sb@ÿô¹n]…>’/ñÓŸàyˬ[·Û½Vˆ®0?OMME~K(]—UùÒGm»ä°ßŸå®LiAaÁi@Ñ®&¸–È MŒÛ¼_°=ó@œ5ˆ¬­Äì”èë­(<K£‹À~å2tºÖ˜<‹‰ 6_Zô_¢©c~Š|v 3I~:¡J!äy9rÙ©ÇöMå0{ÃÁaÂÆíüŽ/QÂçJ15oßOÐ×VB[V…3ÆN ’E„Šh(} RåKŽÐ÷+½}UÄCÕ‘!‘Ž·ç`¿y,¼a»jÜúÿ]Éå·.EÝž={B:ÂUTã–ª|飶]rbߟծLi³_ß |¥û‘¶÷æàÔ— ¯ô,nºÄ»q#k+ÅuJÐÉI/f¾¶{ºG(M(Í;Ðä}€}…¨´ aØò r7½ƒã�¸Ò" U !Ï˪ O /:�£k>ô1èÐ!ïý÷‘·zBú©ŠPú@¥Ê—¡ïWzûªˆÇÛ­+sp´?L1ÈSªEQ)vŸ"´åJŒÛ¼÷P·5’þ.ôKi"…¼ÒòÏþ3¤#±åþç"¿¡ˆ\JF•/}Ô¶KŽÐ÷+½}Ó&”®ôîMdùÉm/,ÚþÑ8—ŸÂ¸SöÛ]r£ù“¯á ɃC0¹ GûdR©äUHrŠÝ‹ï¾2Àìx S¼¼¨oéOxª­’”>P©ò%Gèû•Þ¾*âñvèJ“ý&Tæ†äe•ùç|¾ïôЙŸ`:è„>oJë‚+åu2Ë+1\§·J;µ%¹”Œ*_ú¨m—¡ïWzûòƒ¶Uü8:®àti>4›*`ñ‰såFÖVâî”4[ú·'ì_â|è$’D_¾€:û‚Ó½ ¯$eR©” A‡•$A}ä³JæQú@¥Ê—¡ïWTûNôÂ6¾í‘el]Ù¶äW¤¯…ÅÚtÞ†’zÚ,–Pº¿Õbíå¼Q•>>Ü·:0³_»ò¬7Rî-«¼Ò{z«ÄS[‚ÒuY•/}Ô¶KŽÐ÷+½}S‚ `Òõ´êŽ¢0‡¤a{ÚsdžkêÉ-VÆpûØNÚÒgOþ›6i°­¾\S›P¥ò¼Ðwó"0„ÖJ®¶¡‹f7jÍý¼Ò©H‡¬z‘ª|ÉYû^ (ŠÁgEeéI\$9>”‹5ZTZ¼‘TÄDQº.¡ OG×â=D¡°\Ù%&¼vˆý>…Ö�©^K–U^y`žÞ*ñÔ–@dS2ª|飶]r„¾_éí»>˘ê>‡zŒÊ; ¥#3‘ñw9±.—ÊÚJܲˆI·^?¿‰„òÀR¾5¦ŸØ»­¶Çð$¸’”I¥’S!C¥ò«`lcïDÿ¤;Œ]5§ÿÛŠ»®©uÚ›8|·B¯»Š7qò¦?;îá®ó•zò+"J¨Tù„¡tùX$ÊsË*9Ъƭ$öÍ~–0ÕkÀ1ÃCxX?]°ïˆ|Í× kƒ?0æ8‹¥º²ƒ¨iy‚É”rÊ+«§·J=µ%(]×UùÒG‰²1#‡ù˜ŸÿûßÿF~K„¶Òu35(gܰ›>GU½ w|g1l¾Š[âZò'šNwÀ; -<áó_ð*éäô gpÝñše¤%»’$†R )²|Ž®KF<˜`+ɲó N¶¿ˆ|JÎÊH3öj¶ ¯x ò«a£'ûÃÛ±I³ÆAqòP©( Rå†Òåcá» “}‚1ž®æŸ‹Ž#ÔlL?«Æ­d•®$"è‘ü-qEtV?ÆF'c6i),¹®á°îý¯) «¼òANo•zjK í«dTùÒG‰²))’8y§„>¯,–áwÝ@eÞVääl¥ÿ¶ ãs»�·©'s âUûç¨[7ª/ÿ+Iñï©ëOjÆ…»m7aþ©Þ% ”Ûæuêºì2bçžfŒRôbaø>¹ô˜î- A÷÷8b|Ê+t¹Jb”¢3‰På†Òåc—ç6Þ¸µ€™Ù7‘*b’Uº’2ŸÇYK/»¸'E¾õãÅÏMíøuâêÛÖˆÂ]Š©€ä”Weu܆’åS¢lJŠ$Î%ß’íPWpuß„¾º9ôߣÉ/ùëwÐÛñ ¥” v}dm%®N¡^uàDÃ]rÁtÄç›ä¦mèJRM-¾5·E¯$™ ¨*Ü“ðJ’ÔJ¡¥›³£v÷°yæA-=ƒ¹<9ÅŸàtåQèú§#¿´”ö/¾Š$Tž„½îìs‹˜î»Ä/W®JR”>P©ò Céò± –\fœÆ-èßQ#®KBVéJ2â6I¤"Ñ÷6ì1þ†…Èo­‹lòª¬¢t]WåK¥Ê¦FW KðÙ/¢4o 6iŠPÝêÄ´k Y[‘»Ófá¸Ô�Ë âPLaÁñ >µxÖ9µ%ÌcÜã7JÍâi“ïnƒ‡#^’ÔJ£¥\v~ƒ²æßé¶YÆ”ý4¶m®€Ù�å5£,EÃtÅs Çòiå£ÿ&vÙ‰úž×‘ßRŠRt&ª|ÂPº|,|÷aî›| p·‹˜o«×’¥ «t%!"D0N/néLøµŸ}âê|6@Êk%9åUYE·…¡dù”*›I\açàuÞÃõ†j”WÇõ»¿a¸ïø×F9¹%í¹êjø o¨q´Ÿ89-Lê%z.@mË�ü“›ÔJ£¥\¹#÷ñÇð=4½¹¦M$ŸÁ‰öñ6è¦|aAyQ L¬`·`{ôgÛª¤‡Ò2U>a(]>> ÊòŠqH«…6T¢8ï/((=ù¬Å¡â”©¥$!«t%!"D0N™7˜!Î2BS^•UH+U¾ôQ²lj$qe¾¦üöºQ|n#„ŒÚFüòÏ«a#7òã¤PSpݵÒWú¼úóFvÂzw� ޏ¥VÅ(%5‹AÓäÒòh Ñ=1Ýî+´ÄàJÌ"|ïÑdEÝÝŽÒ2U>a(]>qÆm|Q[éÈ*]IˆŒå$Ûäݨã¶0”,Ÿ’eS#‰+êõ8ÆS¿v“Y[1q§‘ëÈzìÙA[í¡ëÉ©0 {í!œ±!@-`Ä|¹9%¨:} e "%J­4ÊRÊ ü“¯áO÷.;õŠnß÷BSâ¢în …´£’Qå†Òåcw-™õZ²dd•®$D„Ʋ’mòn Ôq[J–Oém§F;µ“vÚÒ0:nü Ó©JËNèËZ0Jÿ>5Õ…Úmï¢Ì<Œ 5sÙWœ‘¥Vš¤””ÇŒƒE5¸ÆÌ•Ûze{jÙ?ëtª»ÛPºÎ¨ò #«Æ„WÝh2ù€åÿíwÆ#TÄdcÌbD0J@ª/R‚¼oê¸- %Ë·1Ʊ̡¶Ÿ8ÈÚŠ±FÆáèøz:ãMØ]©Gá%ùéŽè`ÿã?èj,fÛiا–ðXqâDgŽ\©•f#)eÐñ%„‚R1™BOý^TÛ|1?WI¥ëŒ*Ÿ0²jLðYQYzÉxœ \¬Ñ¢R½–, cþ)‚±‚\ª¼ OJ·– ïzLôÂ6°Þ¦“ ¶®$YyýÃp=_Œ|Xe /†0‘Éœ´±’Qåã‡Ûí^+D6æg%Ÿ’*¥ë^¶ k+2;òÀT¶=ô3MÈÏk ròPn~F¹©° ÿà÷(ËÕ`“æœíöaÑó�WÈ"¬ÅÁy,µÒl$¥ ¥h:ÑŽŒåwÀP’ƒíz§šçV$”®3ª|ÂȪ1Ág––—Èœ¸ä@«·’@Ú7û#‚qªøán­B¾†KO·¢°¶ßz§ä”7MÄØtòÝBµ¶.¦Žó¨)-‡ÑEÎÔsÜ9^„Ç;á“áïVº®«òñƒ+ÍÎj!®Jê6ÛøPθÑmn¢Ç¡Ë0¶ØR«ù!k+F;m#͇ ÑìEc×ðš_(†õÄY´¿Jõü–n ÿkLúúaÖ]…Ý»3ÉFj¥QŽR.Â×× =Ý&îYº•èÏŽ{¸ë|Å#?m�K5ò  þ"=6œç¥Ê­@³[õD ¥dª|ÂPº|,hãöãú$>#¢0ßs«Æ­$d•®$äz{žÅm~R/]˜ùŽ/qMÚ^€*ãͨ› )?é Ý‰ô×…™¤+&åM16‹+Ç Ë0VTã–…*?bÓ쬖“'OF~C%UH»mt¨‰_q¶p+ý·æ†³1*FÞæp¦ë9%9²¶b´ÓæáÔïÆ¦ýfxY鼿SÐ9xO¡Á¿`Ýç¤V¥(åÊH3öj¶ ¯x ò«asÁrx;6iöÃ8ȧm1á¼Cm%= FUƒ wCƲŠX(} Så†ÒåcA£ëäÁ:ô¨P[IÈ*]IˆÖê œ&¢ŒS‹5±×ø”žá—à»s ;vœÂ_ªÁ#±_×·¸ü ÆM†6z ';0ù˜9åMß]˜ìŒ¿1HUëYëu¿—Óè{ˆ|È<ê¸- %ÊÇuz«žÚòG‰}+.¸M¥Ð”\FÏÚi-9É@óÑz‡›É‘µ£Fai¸v^‚c!2d†`®ùy[ªøÿqªqËbÙeÄÎ=Í¥H;ßÀ'—ƒ¨Pä¦'ìÔ¯/aÆÝ ³ñ2túïÑÞ7Œ™t£/«p¢ôL•OJ—Å” Õ™áIø¹Õ¶?#ŸUÄ$«t%!^XÊ P|(ö„.',]ÓX¤ç4_/þmŒ6u ÁOÏwAŸIÒÆ#§¼iœÃÌ<sÖNøxë£éÈBr•�žY­p®®ÁdD·…¡DùbOoÕSÛôPºî g.ã~ì7ÅŒGÌÃÍeÌÏÌ :Å•µÙ¶„éÁv¿mt!lÜž:C÷8ÿ?H5nÙP>Ø¿ø ö)2!NÂ^wö¹EL÷]BÉ:'3Q¸ü™¶¢ðÌ=øTW4£3 På†ÒåcAýŽæ=»QkórŒÄp¸ƒÚü0¹•s´‘È*]IÈ$÷Ê“•Üû4y`_A!*-C¶|‚ÜMï Ä8@›n© £¼¢°ˆI÷=è÷¿‹üêëèóøéo&…Å>ެs-™ûjó{¨µ¿ŠYdJÒu]•/=˜§·Ùsj»ˆ×¾)A†”˜(]÷„³ ¿óì= ÇýµXýèëú5»*`üÇcús/,gÏ :Å•µã:-8w÷0êtЛÚÑ72ž‚'áv<…ן|Š’Zi”¢”+ž[8–¿%$»ìD}ÏëÈo%‡zÕŽÊwË¡·9év ÷ x…Aóiœh—}2ÜH¬F$…ô ó³" 2åQš|ÿýïYòÄÊGþ=“¬'Ÿ²Y‚¯ý8r5E¨2þŒ‡ƒ£áÔ(£Oñ°ý[TlÅæƒfxV"¿®"*DW6´æz¾ñ£3ÀÔþ/xÖ™›Óbù)Œ;µh]¤U׿O¾ß Átä*\)¿R&yEa™W‘”E/1é_DÀ÷-Õ¬ãsÛ††ëlßäPj¿Shq2¯<˃Òu]•/=VOo•sj›ÂæÕ=Žœº…$±Æeeã̉X ËQl¦ÿNò·&.ï`oó3zÄKY[‘¼F`­•;¡aþ1¾ÅÞ8M8Ýîœ),8¯áó¶Æz¿H]ªP/,(/ŠÔX+·`{ôü)ÎbÜ©€èº½f”¥|ú«ÂÅÿüÏÿDu>¦É!Ó‰‰K6R2m ã1??ŸS6²kœiˆñÏ%)Jo]¨?Ñ{é#ärȯ)<‡._ò }*éCÚ8û!~°çPHnüä T«Å¡â<l–Dw‚˜°‰ó¡“ÇÌÙ/ Î>àt/t%—SÌQ+§¼iB-#¸œhâžÇhO'l=¸'“È»0ŽÑ?c¯UÏÃÕtºþéÈgùPº®«ò¥™ç”³‘ë…µ¶×Ú˜kafiC«® ¹Z‹jÜÊÉÜC\6tcœ•_<¶Í»ô- Y[1ÚiA¼j¯Æ»Z=lNo$Zò “0ç-™fÉÓ#œoƒ?5Žöç#×r£H­4ŠQʉ{кÇ4óïçç_Cy~Ä'ݘZ»‚L¾‡p»~šGãŒ^•ÔId�)Åø!—|JÙ%“—|JØ $Ú¼PŠ|ëB-Àç¸ã™*”Ñ‹ý²ªÏñ­ù!F{šµ1 :’õ„NS·"¿¶žÀêžû¦û;ŸíÆ\ä'¢°2†ÛÇb6ÈCEƒmõ)¾KNyÓÅ× yX؆²Ï†&‹‹½xôº`k(FN6«•®ëª|…ÄÆmÛµšð¦–f'*[‡Rtcž·¢oƒãèù_—¡kún²®úàèì‚sB¼ EY[1Úi~8tŸ†¯±H'Z21”?GÝšß…%8ÉðÞ„>G[iîÞ½ª“«dÔÅ¿Æws¶­¦(-@]‡¦èKôÏ©‹\¡p@J2~¸No•²Ëuz«¤SQ®Í‹¬8µè…m q" Ëô‚¸K){Ü ¢'ÙÉÌÎD¢^RXÊ÷pÌá^X*ô)ž¦¦Hè]ûPcú‰µhµÚ¯s­8Cò¦Kh>߆âj¬Žñôòï&Zä„Ñ)¿ ¯4]'c6™ßV ‘ù9Ó<þœ%S>òo*‰àº–¼‚€çÎT4¹å0ô¾}s‡‰ÒuO|VSÁæ¡x_!ò+-nÃá\ 4%W0(R‚ñ ·$êf={˜yWIdÞŸQ_T ³'Ö,]‡…Ǹô©/Bm2 Ç¥X^ÄG6{@MvE2£J)– 5oßOГT@eU8cìÄàt†"Fn0b ¥?«ƒìjQŽM¢ÓLù”v*»y‘§¶>+*KOâ"#%Jl¹X£E¥š Hˆžd'^ÜÒ™ðk(8H?zÛ>ÇÚÐ  ò‹>¶DæhaPþ´„‚O>Ç‚»ÿß›ä&¹Y4§c�£3ëÍQòÊ+ß-.x]v\?WŽÂ’Z˜îÀ·vÒœäô×xýk#)xör ˆTš®ÇÎwÌBÆòLCæ.ÙHQ‚|ÙÃ"&úÿŽ2bHžEûÈ\êëa‰Ht“¥­»ÄDK.ÅžÛ㆛ëqÉ1ú¹ÛôŒ®…ð¯ $CÆ-MÀ…æ²È+>­öJ réߊ"Ý#ÌñÖ6Ò(u08ý ^uàD]¦8ê`½_$bÙ¤d\!¥ô¯Y@û}õäF ˜æé­Òv™KJ<eNXYqjKHxãƒYr’®QIÒ¾Ù‰mNŒžÄ—Íåb‹á]ÿ-¥çp½éªöý›4{ð·¾F9½` ½+÷LƒÉò±Ë)¯0}nƒèö†©©%…å8wýÜëó4qé„ÂT ½òœ¤}•×m%RÈX®È<¢dù5 ·å3j¶¢ Ú —‚Ül¸nò‘²1On鮘èÂç„í´9;êêì˜ N OWÉóænb2gÜÒPúnêQ[Qòë2¶?Åtš»ˆa£ÖŠ^ ¹\ľ_ ¸No3®bø×P¯Ð¥…9‘ÃZQ·b±j�)ÕøYÝÍVêîáêÆ’ROEW'¬¬8µ%øîÂdgÞìH#Ÿ¦JÚ]ÉN¼ø¹©¿3ç®2éÁˆzöŠT‘\Ë¡ÔU¶íŸh?vº;¿a”~×}ºº¶$ùšå”Wdˆq[A‚ßPú=xÜ|;6¿‡25¹¿W�ÏÕ¢ÙZs?¿“`(Q×¹No•t*Êuz«žÚ¦Hð9ìû³i;´†‡1é,ƒxí}™QŸ[®ÓÛyjKX„çö§1iF#eÛçè™gʨq…E‡ ÷'ÒÙQ!ב`GÕêõäxÖz0Oo¡"ø×,»ŒØ¹y/꯳ý™,–Ûè]Ç/O%eÈä¤dã‡è³RwÉÆÒÇù¤<È„•5§¶„¸ÓÕ¸•2Fg'´¡\oΞƒ£ý!&"ŸÒ‡œº‡u’z9d³µ–F ¼kóþz®$ñ—•S^‘ ·­p{Ãj8ŽâÐæ³9Å'p¥ïOÆÆ›e§Ûó«`Œ ¬ó“î0vÕüþo+>/2V“ydµ]g~&ÿ®bOo•v*{z«žÚ®ý]Ÿ~SÙvº½¶£¬é!Fâ6²`6ü’ñhɱ§·ä{±1!©€þŠ¢Ð¸Ã¬6<tOж¡˜1ã–š|„+U»CAŠ˜ºiS,¾tþ< K#wqãÑdšù~1ažÞ*B!ù×LRž¼(˜ †U–é…TS ŠŠŠ2XĤûôûßE~õuôyüôØAa±O‡#ªq+ RÍOòÄd¿ U…ÄÍ(fn%Ýñ×úõ=ô¢>dÜîDCŸnÓ§8úÕu´YZqí\9vI5Ò±ÔòŠÀ´=®ùPžyׯh·DäÓä£ôôt8<‘ŒI>G×%#L°×VËÎ+8Ùþ"òI:¸n¸­òs¥·dý¶*—OE™§·Ùsj»ˆ×¾)ÑŒ^PÏa;{Z5Q9TŒ¼²Ì×™§·÷Ô6Bp;Ã4kØòÃq©f8gè2nɵ›Kêq=6D·õ!FSŽ–µ‚€ï :Lèt—a4?€+I®·èûŇȮ…$'0³pwÿ# c¼ß(‹ÁWèÕ‚¡w”½Ë5Üã-uq«¢²±¡ÇÖ™W‘ï=É7·HµÑRýê– RÎO²J­³ %õ&ÚÐdÏíÖžQ®þQz¬8ÕhÇÄTj¶ì  ¡üC°6|„<M.Þ/xe©ê¨äòŠ€ÏŠŠ‚Ý(ˆ¸iòËpîú= ø"ŸS%i¾\é!mJä-äçJbõôV©§¢«§·Ê+q KôwìÔ-elq2‹>ó}EÈ·zz»qOm îVTæoY˜ESXsºQádȸ%Ñ’â€y,~p^"µƒÁeø¿E=Û´iK80IW“{æîh[Ñ÷op¨—è>û4äºRÁ>hµQœ—‹Â3÷b| ³2ÒŒ½\wâUŸ[•·yŒötÂÖã€;É¢Júlˆù‰…ù�={cƒQôÔ¾ÌÏK=÷»¬h¬ú+ÎÜ| L¥Ën+¾éIñB±,ò $äfDÏß•—ÐÖ;Œ™,½9Åuz«¤SÛUˆa¡äSQrz«ùç‘ —6´êÊ›ñ[‚3nôXLГ½ –«Ç•ó]'þÔ–^K8õÅȯú&fCñtÚÒHj·.¸fÒqO’!ã–V´©Bwì[ôz§‚¾¶|‡[©\K^y†æ½ï@Sü7tÎF®<üUVœ8ÑWšº!)°â6a—ft=Ï£»Á) 6×àxûxj_bjíu`y̼ÚL—¾^8_ª‹[1ÙóÓ¦z 8fxÏÚ¼NŠ ãžÞd¼ÄÍ(¥€,bW [RÈg•l&±qÛv­…ä€D³•­C¼±_÷—Ø¿MQ4…ŸÁâNY]E|hûÏ×…K—Å«ái£×píiÅ\Š'CÆm$‰oŒ¢…KŠ>·ËNè·ç`ìé/5sÙWœÁ$¢ïߨ„‚Aí÷—¥¼f”E¢%Só³˜MºL+àì,æc~%S©TTTT62b~Šl:³çôHQŠ+“l÷U7ÚŸ¬Äqy}'#” óôV‰§¶*|ẖL™îàLáVlÊ-‡¡÷E׋ƒWP¢Ù‚|í¸féB_è ¦vËUœÓ¾ͶZØ^©+ZY ¾@ïÿº„óM¿ÀMR2}ptv%øÎ“ ·´Ê½êDÝÙ6<fž †Ê3L¦tí†$ÿý;uéÿ"{Ü?¢¦$[*Ûßê“[Êï€aïaèï?жkß=\¯)E™ñ~èócËÔ%;ÅUXê�•ÌÆ˜Ÿ‚xÕ~g-½Ñ¹gµˆ S<²@^ßϨ­¹çÌ,m×êQkMì.D͸p—ü®õ¼K½FÁÃöŸq×ùJö¿‘ÈKtü¿ÊFcý¹ j Ï¢}d.ñS&a¯Ùüú.LpÙÔ<<Öì^³#T¤'r¸©ÉCñ¾BäWZ06܆ÃDgJ®`P¨³m„Œ·Äïvv†g@„X‚¯1xû[4^¶ati%dÜž:þ-º}ÜÖÿÆX<¬õ‚òÍFiLÑìmÆHû4Ó©TT6$Á)ø^+ôZà%¼¯ã—ºÔä ©é¿$‡ŒÉ‚à |îÇÑ@-68ø?’¥Ë›(µ«¬ cÎŽÚÝ_À晵ô æò<ä‚Ó•G¡ëŸŽü’<ÓZI=µÝ`P³p[>C¡f+ ªÍp‘¹LCnxæ} ³çMä¼ù úýWàR€¸o$ p)ö4ÿN±ä²—³¡Ÿ»MŸ…ŠA†ŒÛeLÜïÄ£ùËjå¬7œ<vPÂNâÝæ&zR2ÀÔþ#3±!¢Dß¿ÑyžËWÑ3Îô!â(É’Ôg8uÀÆdþ¡!<ÝP þÄÀÀ«,Ù(à™Õ ç‚B¥å=†ˆÈô�úž%ó,¢°ä2á”R²ù:Р»¹¶-š?ŇºN8\Ï×O9¢’6c~bzÌÙ…ŠÏŽ¡xLJÐiP‰¾mY ¯ïÌÜsøj²À$‹Á²ó”…“˘²ŸÆ¶Í¡”LW%•´¡×‹öÆ}ÈÙ´ZÃØÀ¥A¼ö¾ÌŒÏ-I–§K’óšà…¥B¿Î行 5Ñ…/Î?ÀQ“9;êêì˜ N OWÉÊ«/„ ·Aø,¡ÏqeÛiاRÙBá'­)<‡.¥œÜf𔆠cü Ò Ã©6´Þ[ë =}:±oµ\<‰Ò½Wà"×Å|8¾£Çï<ÏÈŠšêBí¶øÀ ìòjí™0Æ# 3N™%å1DdÖ½>Øö}åF_÷„Hƒœ’¿Áž`|Uiã¬'}8šú§—Â‹Ë |KOÑôéOð(m:Éy=fèï‘“$»¡ozùÏÊÈ i¼?†ï¡±èl«í¢–äJæœH5ȤŠJ‚ÓO`*ÛN_ÛQÖô#q›/0~ÉÿúŸ°h„}.‰ ÝB/µ`TýÈÄ"<·?E>W6–mŸ£'Y_ñ sÆ­U‡†Ú ?2üöÔÜ€s2…-Í·²Zý/pzçÂ;T�“ƒf—#Zr¶ŸÒ¨d�²©s,œ¶*.™øiXF3lÜ’]•(bh«ßKæÏ¬ètNÈ/Yˆü5×~ŒÈA m0–ŒùÙÝÔÆ±IhÜþˆk5»Cþëšü*´ºÅÙ™ß/Ð7?7fqòÜv‡LŽÐ{Ýw ;/&Ê¡Šˆ:?eŠØ@«Æ¢ÿ_Е\VÞéH6Èë³¢²ô$.27DcÊÅ-*“­5¨Y šŽ —ŒA…螘ƒÇn¢Ÿý -Ž×˜kT6ÔsØÎáXÏ0Ê¡bä•e*8…çUÔÝä‚Jþ€½±»MCǤ’�%»2¥Å^XþJ¯3‰{#cd½‹G¿hcQ†Œ[ZáÆÆðgì_AvKëÑïOAÍÈ$t 9~·E®hÉÙ~J£’–1ýø1ž)ַÇîS4ÓF6‹ùÔo¯-抺ìp~ç)Z¼Ï±½úNæ .® /r:bû… rµß Wɧžþa¸žÇËÍJR¸u£¡è’z…K6„q‹98õ¥Øe|J/ahÈw6ï=ämœ†~IAd¼bøÜ†¾ÛóðO¾f¸,áåÀºQ5ñÖGÓ1‹j…»ßIJà€åžâb‘G˜EŸù~#/Â÷à;|ÝõGø;‚Â’ç>.UW ªþt-Lg¢«ßÖC²à8vþ&i›gȸ Ò¶á÷°ü>Î:!ðºACá®Ôî\“SœO.¡g*ª®d‡Ã}û,Šš9¯Eß/Ù~J£’Äò5— 9ô,N´{»œËð;¿A‰f7ôÎ "·5NœEû †FÍÀi(…f»N¥mÿDÓÇÈÝ´…õíQB€dp·Œp(mJr•°‘° uÜn÷Z!óósÖ|¾ïôЙŸ`:Hºì@iýOÊ0Ã…Òå¥Û# }ô=1ÔlL?'Y�ûn¡Z[sú{5¥å0ºèqzŽ;Ç‹°ãx'|oÛw;áæA¦Üox@-Àç耱jÊ2j�…ãßôXLÐÝÒ›`y0ɨAa9¸,c;.brìü¬ÒòÑ2(Ž·òl3®®ÐßgíóÒ+ z9Ú‹vëý (‘Ï­9{šRÜ-#>·-(Û–âCäúÃ>äh°I³º~î(¾Ñ÷‹€’OiDÙ‰\„¯¯•¨®¢#”äšþ츗‘Ô‡DzO—Lù‰Æ…¥²…§é…ÐE4œÜ<¢Ïe-p‹¢=}è ÊcAeþnTÝVÝ9œ,͇†øú4»2˜$>Ê?Kính4E¨6?™hʺ àßñ ÑÕý·ß¾°0s~Æ–“'OF~Kå­‡6¾*Ö úD93³I"ÂÒu”åãPܵÑrœ° cå­6n;ÐÐpmT´^DÙžShÉ„ûM PWpÙM8šÿȘ±Îɽ¤ÐkÃî/±Ÿe‹Ç4…ŸÁZ?ÊIˆz+ÉV0g?ƒÝgîÀXÆÒˆå¹ï¢¸ª•e†Ônî¦@æŒÛ[_Ãøë¿XQ9Îßñrf‡ñ´‚€·7õu¨ÐFÕ™&´¾Nø|ôý ¤Sv"WFš±W³yÅ{P_ ˘ –ÃÛ±I³ÆAõ4:=h½êk.ÁWpZ ¨­(ƒ¶¬ ¦{áDÛŠ€6p'~ƒÕ@¾óZ”U5Ât×­ ã‘–Ï×…Æ’mÜ ì©)xÇšVG]�ËâÇé𠮊JˆTŒÛõX÷úc¦YÄkß”°¿1]Æ1ú'ã`ˆy¸šNÊž&)9áÓQûõsІ©jS|K/ÜC·aL-[:(¯ „^+æk¿À5KW$Ú~/ì–«8§}šmµ°½’³g³È¸ÍvW¦´˜‡S*ìþF½‚½ö=l.» Oð ¼æSÙ-™þ’ÎÎb>nä‡ãR}(D}úÌÁÑþÄC,–èûÅEq§4"ìD.»ŒØ¹‡ø7RX¾O.‘$×t¿¹¿ÇãS(ð‚G ‚¯¹ëýÝ?¨ÓAojGßÈtfœ„'øTÓÉ˦¦pZ‘ÜÑÔû;Ëí"TÖIÙ‘Q¿�ÞxpÞª§¶*,ÈfuQS(š~ÚLÿM;<¡k¢„eø½Oi#ä7¸'¥^<Oâqßhò5=OÝÊŒ_¦Ï†&‹‹=N{]°5#Gi’–03Ò‹6ÝáH„Ù\V^B[ï0fÖü§—ÌHš¶IØkv ¿¾ \ïEä®ÁnY?ÊE§öÉ6W¦´XÄHó)4ÚÝ"MäÐ-0 +q;i#$cÆ-WŸÕ¢)¬ƒÙ1Žä· ƒ˜ì7¡ª07¾-wd6òoâ¢ÐS1v")ì_|¹*K`u`Ÿ[Ätß%”¨yñÒ$(Ü×\jCh­Ü¹ê)šp¦ë¹úœú/9¡èEÒÙ²ØSOv9T\aߨ$$(Å„zéÂ@¦‹m0bOoÕS[þÃTõ! 4ÀÜïKoÝæÒ wÿ—è•ôÚÅÿz £\òñÈ km=®µ16ÛY…Ü^*Cn‚u›ä$ºé–sFç\ä—2ÇÊh+—»M[_ñ-ºÜ:áæ‚DÏûfO’+ño~ƒ~ÿ¸d³Ó²Ó¸ÍJW¦4¡ü‘ôQ´öWL,þû•ËÐéZá˜GQ2dÜ’cébäW}s×ütÚRÔ˜~¢ÿ» ®™$äòSwnCI½)µg”Óÿ.ú~1Pð);‘+ž[8ƹù°õ=¯#¿¥ÂÚ¸ìk.%$ T5ÞÕêasz#Q5W˜€ù¸x;ji“Fú/űè€ù¶B[NŸ[v¹Xs{W#˪ˆóôV=µUI˜Â˜7MÆ6à>®hÄ%-½ dlÄzTdиm»VƒBr©Ù‰ÊÖ¡ÌÄMðuBg¼‡~¦‹œc�Ï&PÆ”B6"<pt˜pN[€Ús¸~× ¯?Ãó1!]\·Ž!)·±™mÆ­BÉ$†óMÄ ¥×ư­{ É ·áμt™¶ØY mô. }"Ë=”|ý(ÌÞØeVâÈlÑ÷ Gѧ4"ìDR/,(/ª‰5Ý‚íÑzGIZhãV_s©H ˆ6eÄô…H›4Òe†%̸Âb2„n½É‚¾ÈÀ©ëc)@Ü>·1å„£ ¹A¿Q ã+£ÕS[I ¿Û!¿Ýà ôÊ‘»i;´†‡ðö~%ƒqËu-yÏœ)Üʽ —“àfüÿ>G'Lz²‰×³Ý…IEŽÓäŠò#´7}†Ò‚bTê~€ÝéÅÜ«´d$П°h„}.É„°Ð‹†C-ñó¶dd“q›å®Li=¹ÍEaÅIüµ¸¥ÚPi;Èq† “ûa$e S½£hK\°ïÈt-y2uJ#ÆNäÄ=èN݈¹"e¹ß%¡¯¹¼Ç\ÆfDlb¨ýŒú¢ÊäWä ô_²G·î#zñ»¹´…µæâ@õ¹UQÙ˜¬·¡‹ðõ~mîf¼“³=ð‹˜èÿ{hA¯)<‹ö‘¹Ô×%R@ÍbÐt$<fkòP|èm8nCn¹#Büœ%† LÀÝK>Õ%ÈÉX´d Ϋ¨»9̹9Aþ€½±»MCo?4{ŒÛ¬weJ ²Î< ¦úþIZoÈ¡J=,¾Y¸šE[gfÔ¸D(çâ;1 ÈH‘Íç– ÀS²9ϱˆ^@ûýw÷þfCî7Å"†¯¹Ä\h.Û¼âƒôÀJ&yâÓ¾EºG˜Ëx§óOÿ%/~ ÷Óƒö{О» ‹½7¼±Ô×˵/ ÍߊmÇï(ûút(oâê †-¶Grª¨¨d-ô|^¾ß€¸'"ó ¹=÷+tûwÊkц¤Ûò 5[QPmVD.ápfˆwPÜx£«W}CÎàDûx¬uH.ú«8cÍ”´߃ïðu×ôjx Kžû¸T]*’¶¯ÅiÙr£1¹ö>²Fï†ÙH®ÀfᜦdW¦´ n©»±i¿ÞP­·ôÿWf{´d1 þçqÖY@2‹›ìÄ#îûi”zJC½Bÿ•j†‚0åâ±»—…¹ß”¾æ2@<軩¥*«úÆö§˜VÌ-~é¿deÎŽš-…¨·s} E¬ÖÒƒ÷lä' cíCƒœÂ#øì¯{°£ô#쯼ŽÁ µQEå-!8 wh}ôŒuÝ–äK}þZ¦`|Áç°7îCNäJ´5§ñÚû2#>·ËN=¶o*sq£¼f”)&x&Ã@Óö>f¤dšõò‹Ê"&Ç^Ä\¥ *qŽb¢»1ì×S€ÒÐIh6+$e’I9í7 h×jxbÜ–àý‚íÐl; b+œ,6n}¸³ ã1‹®•g¸‘À¯TÜ÷+÷”&”Ægó^Ô_'ÆÓˆºžÑÓ³&÷[6!‚¯¹¨©€Ò‚,’ò$»MáókìWh*-ÊcÆÍ;(Ñ? mf„ƒÍx°ä2áSó(-½ŠŠJÖ’±[ôX2ý$âc·eM1Âr%#e�fÃ/™‰–¼äFó}ŒMG?Üæ:”äå¡R'·´<­U‘4@«e+ Ï܋٠‹,òi]‚i×6”èþÁÐuÚlÁÑã B™Í®Li³_ß |¥ûŽé98õ%È+=ƒÇŸ¢­5³Ø¸¥¿`Úœe Eƒmµ]˜âPZQ߯àSšÐ"•^d‡ü™ðØR|î·ìE˜¯¹Ä¨©€Ò&èÐ!o½ïË÷MYÄž`„Û1ø_ªé¿TT²™LÞÊ žÃvöË0®*F^Y†R…Œï§¸mø.ÛFhÓ‡·Ÿã¸6ˆpbF½jGå»åÐÛ¢’ɉû ùt†®Mg‘qʪòq|àYfJYO½cÙ�®L¢!n왬6n­ :üÀ:™l®ì jZž0îÛGóýŠ>¥ ¾B¯î ½£lãt¸ÆT£®%ò¹UHî7)PS bʆ§ìHüí °Ð§Ã¡æß3° I…'ЀѾÝ2Ößy«IÖC?UQQÉ6”+c}æûò·Á×{îÏŠ1-èø8æŒÌ]›Î"ã–šÓP†ú;Œ�«½èº^‹]eFüƒ|~܆³u™Y?d»+SZÈ{&‹[?ÆF'c¾ð=X_ÃaÝ#ú_ãóýJ>¥ HˆW~>·JÏý¦">Ä÷AM”>s¡ëå79w‰¯ð}4‚É­ÔˆÄô¢×׋ï¾2ГËkÉ^ÞÔßÜØ åUT6:ʸ•A/3nôXLГܖz,"×E§p”ß ‰…òüˆO»1µvŠLÚq·ë÷á`F6&²É¸õÀR¾c-S4‡Ð<"ÿí¯lweJybÏd±qëÅÏMíøy2éóÀmkDawRiQ߯äSrÂUw–ÇLÔ”ßàžLñ œ(â²ÊFM$˜às<¸bBËÀ ÀÓe@uyê/~…ÚpT‚¨***o ¿•±_÷—ØOòy2 ºh ?ƒÅ=+EÆmÈç¶¹ÛVs— ‡´[Ñ—èŸËÄ-‹Œ[¬`®ç =c ;«¼ŽÜT“—lweJ²‰Þ%y왬6n¹}n·añ7,D~‹‰¸ïWò) ­<œùTUTÖAM$jÁeõ˧’ÿ0\ÏãoH¼Š™ðUTÄ “·2èq{ð J4[¯ý×,]è m¶÷Ân¹ŠsÚ÷ ÙV ›œn/Ùf0Póðöý}m%´eU8cìÄàt¦)f“q;‹¡A/ÞÄÌÇÔK&ðd»+“�¤Ž=“ÕÆí- ¿ö³O'ÏVó¸Å#îûi”zJ3ñÖGÓ1ï à™Õ çÂFûЍˆš HEEb|·P­­ÃEr=s­œGMiyøtzŽ;Ç‹°ãx'|Y2d‹>¿JH6ÉšýLÂ^³ùõ]˜àšGB9ek°[÷˜óPB²É¸UÜFX6·^X«+pú"sœÕábÍAì5>¥[q ¾;§°cÇ)Üñeb³ Û]™”K·o0;³Àa8pë$™Ð”xJCÜœÁ 6©aT’±ÿО'Í‘ÉIuC.-e¨?10 ê¸ŠÂ¡Çè²Õk†¬RŽ–a¬¨Æ­¤d“¬Yϲú¼“»µ¼ù úýWà’ë–m6·ŠÛ›Çè£ÁHÐVr# -ú/ÑÔ1?E>;Ðyw€{#CvhC¼¬ rÓ+¦œ°`t%ÓÆ-êÊ$ YlÜ& èÀ¥Ê›ðp|±Þš Í׎3õ&¶³v«••:X<¾$ë$WÙ`á³ÖA{úc-ŒIUv¸waYåâI”î¥I¡äà** ez�}Ï6Ön¼jܪpBæqÇA‰"ói`V· Þ[y†æ½ï@“÷ö¢Ò2„aË'ÈÝôJŒ´‰–i&ñ¸oTùÁ˜TW&ÑÉbã–+±õj!É[áð±OvÅ}¿‚YÇ蟱»Póp5ÕBŸr¥%W‘Ú¸µ‹øÛÆN¤Ì™T#OÉG’]XV9 K\ÄçLA!8?r• s˜]K$¯òV³]G²i~}kÖ,2µYý'l'aŸK2ö-ô¢áPK|$|©HŸ ." „µŽ’7ÂBydµá Kn4ò5dü Átäª|'ñ ñá¾ÕØø3+Ï:qCMi¹¡É^ã–\uÙ^€*ãÍèé$)?é ÝUùï».Ì0”ú­™Ð|64Y\ìhpÞ§h¯/BNŠ»•ÊK®" ´ñ5éÁóP"ÿeL?~ŒgŠÚæ\Ä䨋HГ,Ù…eÚÙ~Go÷â—ê÷°sC…ôWIzq½Ñ\G²i~Í&YÅ!“›ÕœWQws˜síAþ€½±»MCòm˜Æðh ù-¶ Ã€J3·Ì²C²tÿ#¹d¼›y@Å!ˆ û—8³V0g¿€:û‚ӽЕ\V€_®7AàY ¶Õva*Z•”È^ã–„–ïú—øØmôNv`"ò‘‰¸ïW0‰Nšèú§#¿”å%W‘rZ[Ÿù¶ ɦà1P̼ô`°½.ÃG»Ïâö “‘Í"•·_®³7f[/¢lÏ)´ðrQÙ4¿f“¬bùÍjz½öà;|Ýõ¢wÊ(,yîãRuªê/@×âÀt&?0„ÖÊÐ0×J«E³µæþH.Þ A½D÷Ùhù4È)Ø­ö Šór•q‹ne ·qµm<Öw'‰,^XÏ4àzcœµ´@WYÕñVÙˆd±qK  ¦~"þûcQÈDß/Л~eE‘vô¶âìÙN¼Hq0T^âpiP[©Xq›°‹Lô›ÿ‚¼¿lÅ_òþ‚ÍôgÍÞfŒ¨·“ßnºŽœLyRiH?¿ŠG6É*òoV3oܬÂo½&ËN=¶çWÁÈ2€,øIw»jþNÿ·w]™K5šG4û ëy=­ Na°¹Ç3}‹ŽòÀR¾5¦ŸXmgµ=†'t,Óø16:ÓF–\×ð±þ‰|ѹy¡;"ËÉrã–’¿_)W9N‹m®Deʃ¡Ò‡«HƒjÜJFÜÉíghsŽáåL ³ •ÌÃé:â‚­¡8e×¥¡·ÊEþÍê,·ƒÏÑuɈ1yO—ßàÿú¿Ç#Ÿ2DzˈûÍðÆtsc‚šŸÅlFNqi=òõ¡S±Ñ|½ø¹©¿3ÇYŸÿi?ƒ9ë9˪+“(¨Æ­X(é "×ÉmL•;°]ïLý‹¢¨Äá*Ò ·’ ¸±C¨TØ$rÉ9c–:‘t~™l’UäÞ¬Vø¸M´vÝ Ôš‡Â}ã¢Õ.aú·ïÐhõF>gÊï€aïaèï?Š®çúîázM)ÊŒ÷CŸ[. .#§¸>Ü»ùs1/VNÀ&Z9}n·¢P÷ˆþV( Õ•I4²Ø¸ ïñɯ%îûÙ(ê b‚…“¦àn&¹ˆ1ñíŽdRvGóTáB5n¥eÙ9õŠ‘ _'tÆ{è_]¬†Ê�ž½œQF„Ö4r~›l’U4dݬVø¸=eCÕæMØ\eÃTäGaHDi;L5{hã?Z‹ŒÛ”Ó²2×r\%3î.‰ŒG¥lòâ–¾ÿd³=0Ÿ½ˆöJɨEueì5nÓȯ%êûcQÒDß/0˜×0Hy ÿz‹¦„<™%{£yªp¡·**²œÃÌ|ü‰™¢"´ò„ÌÙB6É* ݸù0öꨔ›ÕJ·Ã'Ùïj¿ÃÓbà3Z rŠk`¼ñt·2oܯÑsù*zÆ™ë9Ž2éÏÀ¸á…µ¦ßšÛ¢>·fª ÷ ¦å‰6qùÜÒËõÑf|XÙŽWJ[Ȫ®L¢‘½Æmùµ$ŸÐ”r1…„М×F˜<h@é»eеF­¶k5(*ªÍÚhž*\¤bÜR3´àNe‘D æ€Ê[‹Ò#´¦äó«ˆd“¬¢ {ê©lØ”\Ä„³MõŸ B»;bÔÖÂdw#œÿ—^G)äõÿoïþ¢ºóþÿóÌ/ýå“ô‡&Mˆ‰?l²iˆ?Ø4äš^1A³ £54ë[šÝÆ/M¡öSÚ+[´YÇ´…ëj‡î.Ÿ]‰Öqë\X‘­lW»Q¶Nw‡·Nü`¤Ç ‚p \C8ÏÌ0À ÌØAèÌœ3÷[òJ98ã9R}=Ïc^çõz…Ãy:e\ý‹Û2Gu­Ñ©Ÿí<¥¾œwa©Fnÿ®¿6ýJkŸª—?¨LeZÖ ·‘ÚåºçO%OA4ï©£æé„–ª¥xl$tWý÷gpÑÅ*—¬®8¬Kµ/0rk+¦B½ÿP×ÐÃîB‚ò©•§/É«·óúÃ?ût¤ê¤ú,ú8' O¾¯Ðú(¢uÅ*¬t­«ÂøTÕ{ä™ÿ»vJž÷ªô'û°ÚJOÜDîÛŒot¶ñMUíuéÄÅü ·ù+Åœ[ó®¾,‹Ücþß­– ‘¿‡©›v”iß™ž„m©ò S™VƒuÃí#쯵ªçÏcfŸGÛʪõ‡Ä§ØŠ5ÉßkK¿Ï×L÷µýàå¤NË úÕ¸eeWóĉÝîªZ÷ø¢S³ÍQz@žœnT÷‰=ZçXzm±"jNÈgLðÁ ò_ÚZ?Ò«­ßŬ%úïÐ*¬t­«"áƒë9³õ|ƒvzoGn§W›•Âí3d¨ë\“j«ö©î£ÃyòXr>KóiÎmƒW7’á¾ËMÀºáöö×ZÕóç±Ô{ÚEG]7ko»‘ÙÍ¿9¤Ë7k]Å~Õ¹\:\û+•—DBÏšÝjîÎ×ù™X™qùë7jÝžt*áß”×{\.gEüßÚäè!™i¿êŸÚ =î“ ×iŸ¸ä|®ZMѯÏô€t +È`úˆ•X©¾ʽÀ؃uä¥Z»>ú| ˜É7}:Ûô¥ã‡yÅœqõOråÁjÉù-ßçÜšy¹·2~zÖ ·Ñ¿´ËÜ_«P šyï¬öïoÕw ÔÄ–“//^æV@cêýË1¹ª«ätîÔžº£úKïØOP‘¢ÿ¦.èÈ»‘ޤÿÉ‘ÐÛðŽZs]$&e\øPïþeÑ4‘ÐÛðêÙü¼I á?.úp—Î}[ÎèBN¯Œø¯dUF;CœÒÕ±|}$4R«ÇÇóàÑÕ|Ÿs‹Beápk苟Æ%­‡í¯U8-¤>ï^­+Ý¥ÚÃ.¹êö«âQF]£Ÿ^úÚÔTù=\nkÿ‡å9ÁòåïâQ| ä#Â-Ò èÖe¯ö–Çö×-*.×ÞútØÕ–›pkõ!b»…<›Ÿ‹™wuéÈ~Õëʃ9·(T·ËÖuÏŸï¢+žVCtO»Ø¨k“Îu/ãñ#sT×›viMtÁHH~ýåMZ_ñ¢¶TÕõ4}� “•êkaÝ äØL<Û~ù™?®’Š×Õxö›ø‡äÓ0–›õ;¬¼3Ä’íbÞÒ™ë}9šG:ûå±ú÷"ÿ_oDÂlôا¶s]d1.ä¥ÃmKKÏ=çkÇäªÜ–öYÿ‚*h+u.JµÕñ¤Êë;5é¤Â¾zíööi*ФW<½ùùi&� '·H-rÿì—ÿÜQ½½û—Ú×àÕåîA…̆[ ï 1Óݤç"‹û¹J~þ„~^òs=9vlnÖ­l?XA~RŽ’Ó JU彡ﯵ¦(rïèîR.öWÈHxBÁèý°Òè({ÈÚ‘…ÃmªÍ™ÍHøúƒvº:#¿ºTÁ´UumUQ´CžþÙÅÒgÃím}臭Ւ� ·øqSzpë²¼ ´{÷í®mÍÍcÉ ,·3Ä’‘Û×uÊ[wä ¤Åöduª¹w2ò¿¶[Í¿þOù&"W¾¡¦]¿W /ò›Ô­f§Ö¾tJÿü¬Zkžqçéub%,nûõic«¾MZâ»OÝíUZìÊÑ>·ùaUF]'¾Q}ÙV¹ã±Ã°Ï¥’gŸU‰#ç¡��r‚p‹å0C=jɇՒ­¸3D,T®Ïƒ9·a v¼§C±{Âu¼£ƒ \–«üÝ<Ü jF¡ß«ÿúÕýb»œ/nUí™.õ°±K‡ÛÔsn×j“ûŸšˆ¿*Ñêž?­Î¨ktîÄeýñýy|÷Žüž%%‘Žàä5 ��$±R}-”{ü½—Èóy™–Û"ÒFÇr¿ZòÌmùÕ3rÌßÏ5‡ÖÖ^ÔÃ֣Ή™jz.ºÿ‘ûÙµ*úy‰J‹\¯c»šoMÆ_;°t¸=íjÒ—W}òùšÿft.Gü%‹LAcÔ�EVª¯s/¬0/“!Ù'ïŽâ{à/¬ÓÒþµzü‡÷š‹Gn·¨æÔ7ê»û mn€5Y8Üþ Ñ£é¾(ûÝŒ:¤Â)h«0ê:ø•Z:GuNѽßZäΩ�� Žp‹”ò}^&;C,Ó¤ŒŽ÷õR͟չߎŽÊ·Eî3î #÷Ÿ#>¹žÍù|êÔ&poÖæÜÚš…ÃmXƒªÔQ¤¢â ªp:µ}c‰+}[ŒÔLA¼¨“_%v6QË ¦i÷cô�ÌJõÕJ×j}ù=/“!–ë{µïù¹Š{EíÉ©0ò³{Ð­Ž¦m,v¨ÈéÍÓp¹Ò¹G¹Y-Ù¶¬ncÏίU¹ë¯ £µSzpý˜^ÚwV÷Rüm-˜‚¶Á4q¸¹vâ°*7½–Ÿ{¿�rÆJõÕJ×jyy>/“!–ËT¨û˜*öK5]Žü|…ÚâMªv7ÉåjËÛp û³n¸=êòËùižy[žÊ÷g? 4'ô`ô‡ÙïGLA3>Uõžyæƒé)y>Ü«ÒålJ>1 Þïýl5®@ã«r]‰�@¸E™—Ù—ý²FÉ#ˆÚA¿Î6¾©ªÝÛõos¡¶©CÝ¢÷¦¦ÃÓüì3Ö ·æù*µµþs]_Pê².­Ñs•ný5züõ)½u m~·` ZÂåsf÷mÛ ÞÛÊh™£]Þ@Â6K‘ÖP{ÝÆüÜû �3„[¤öÚêÞÔѤy™Ñu¦ÚtÜŸëéF‚;C<234 ßÙT[õŠ\'.n‘,n£Ÿ®ýžm K|G •9xQG^ªÕ±ë£™u8ém.Þ&w^$�@¾°R}µÒµZ_ºmZ[sAÃ$ {ˆ®8ÝuNMµ/kO]½êx,9dÝp]˜àÒGj¸t;ytqI»¯`|/µÕ=¿Ímr¹Ï'ŒŠG[—n1ù�ÌJõ•{lêWKu>ôœZx,ÙÓ =¥›T}ì qCa33 j$Ü"‡,n#Ìi…§3ï)hËÓƒà³÷�àGn‘Ú¸ú‡“?7Gu­Ñ©Ÿí<¥>n)lˆÇ’‘[Ö·ËDA[ö~�ÄEëçJ[6¥:ÿr~Bæ]]:²_5Ǻ˜× `ÕnmiRÆ•ªwý^g»£sl#Ǿó:ç¿—ñBPìý�˜³Òú™íú»’óν�ØOV{ð\ŒB)X3·šµÙñ¸J6nÒ†u{å½wçS*rl‘ûz0þª‡cï7�Àœ•ÖÏl×ß•œ¯Pî�ÀŽ²Úƒçº`JÁš¸õ̦fõš¦¦zŽë×G¾Ö„L…»ÿ¤]îkÊè¡bö~�Ä­´~f»þ®ä|…r¯�ü$ F×g1CeRd_V{ð\Œ‚)X¦¡Žß¼¯ŽáhŒRÇwÔ16©‘+G–1êÊÞo�€Y+­ŸÙ®¿+9_ÁÜ+�«nR·šZûÒ)ýó³j­yÆ­�Ë´ ˲ڃçº`JÁšé;­_­{<öçMnϨöÒýø«2V÷Å?ËírÉå>®v߀B[�(8+­Ÿ+}ÿr­ä|Ù¾Ö‚Äèž Í(ôà{õ_?£º_l—óÅ­ª=Ó¥þ¡ SÙUYíÁs]0 ¥`™ßyµ£¬ZMs{ÊÅÚiµwþ+óQWó®.¾õorDWKÞð‚œÎmÚX²F¥ož—ß7�PVZ?³]Wr¾B¹WÈF÷li憚ž‹¬<¡’’µ*úy‰J+R‘c»šoMÆ_üô²Úƒçº`NÁš”ñÕò,ªáI…2 ¦3ÝMzÎñ‚\—î,ŒÖ†‡u½¹ZûZø”� ÈJëg¶ëïJÎW8÷ ¹Àèž}-þ»E5§¾QßÝ<õ‡¬Êjžë‚Qè+ìkP•§'£[”j‹Gý‹:$³ß£Êø¼]s|T£Œâ€í%ÕÏÁËjïš]l0­é€Ú/ñƒì×ß…óMkðÂuýÈÈàt×]œ}Q¡ß+ü¤ݳ¹ Ü›µ†QyäPV{ð\Œ‚)X¡:QõŒ‘?oôÏœÔÏ«ÆsUFt®ËC˜AŸ6ïTýòù|³íÊy­®P¥û‹Øñ×Þwt€Q\�°½¤úi´¨ªâUŽ®Ç¦®vªÊÛCöëïÂùÂ2¼¯¨¢úPÊëœm‡T]ñмÆìG¿Ù¾ÖÂÂèžÝ™¡12Ÿ9”Õ<×£P VlÚu{ä>•8çÖ«O\;õ\õï"_·è\`ø¡NlÞnôÓÔÈÏìaͱ¹Y·ž“�íïç^9Õ‚¥­Xμ ·»®+]ÛM¸ÍF÷�üt²Úƒçº`LÁ ßÑ…#nýe0ùäiß»úßÿ5?ú1÷uéÝßëÒ€!ÃxHcž �Ø^Rý4Ω©c0áÒ |®ÚùpeŽ^RÓ§yn?ýX£ é)ì“k·W MOk´ãc}J¸ÍF÷�üT²Úƒçº`TÁ2§žN.Ë™se†Ã‘’�(tIõ3<¦ã‰Õai¸•9¡£?IJ_Îg*<:ªñÄr¸$ÜF^•°†DAÝ+�€ÍdµÏuÁ(˜‚µ sn�˜“T?—|xš"Ü*òš„“ÞŸ‰ç[òAmŠp«é°æ.7Û× �X=YíÁs]0 ¥`­Æœ[��æ$ÕOã y®ŒÆ¢R„ÛIŸ<gòä±ä3-º2™Pñ–„[S“WZt†Ç’Àò²Úƒçº`LÁJ7çÖÿ‘^mý.~�@f’ê§áUeÉFmw:匵mÚXòsm¨Ø?vjûÆ ªÌ›¥~¥’Ûæ¯Í¹}£JÖlPÅÜqìúÅ‚R�`YíÁs]0 ¦` ^ÔÉKß/zl,¤›--òOd8^º«þûÉá8ʺ®ÎÞÙß�`+IõsI¸]Úò:Ü.i„[�°‹¬öà¹.S°ÒnÓð´j:îeö8²qVu®3º2·Çm¼u6¿¢_¸Úä ÜQ0a>�À¾’êç’Ç’SÈçÇ’cL…C“ñy,�ì"«=x® FÁ,ãSUïig~¾í)y>ܫҲó'nßð?º¡CÅå¿U‡1�À®¢ýþ¼{_êäW‹×mXütP/(”ïH­<}¡ÙC”�[Èjžë‚Q0+Å#ÅfЯÆ-´Ó{[­“l|¦úæoÔ¿h_Û;íok{“/öu÷çr:¯ÁŒÒ2�Àª’êç#<”ôþ,X8Ÿ©P÷ U­{<á:š£ô€<¾….:ú}�€5eµÏuÁ(˜‚ìQàNòˆª9ø…vý_ª»6šáÈm›šÿ6?˜3¥c¯hÿÅÁÈצÂÃUWvD¾¥Ss�6’T?£ÓVêŽÎ¯Äk'«rÓkiŸÊvý]8߸üõµnÏ:•x½Þãr9+TÝôIäë <XÛ-˜{�°¡¬öà¹.S°ŒÓÚë< Ã.—\óíª+vÈäÒ;ú|_™Öïk“‘.éþØï1}>öó,*ú_ú[怭%Õωõ~??˜3®@ã«r]‰'Ëvý]8Ÿ©°qAGÞýrÑSF‘ÐÛðŽZ—>°\0÷ �`CYíÁs]0 ¦`¥]Ér‡ö{{4“Q¸ý±ßã[}ùym9“þ÷��ØBRý4ÚÕè $MY1új¯Û¨b—/¾HS²l×ߤó…¿Óåÿ÷ˆ5~¦î`$̆ ùÚ.È?˜z͈‚¹W��Êjžë‚Q0k¤KWnÆÉxT«ñ{��l!©~¦›s[¼Mnÿâé,³’ÞŸ ç›Ô­æír8J´ñ…R­«òêvÏ)í\ã£ü#]Oœl—ík�¬ž¬öà¹.¬37Ût<ÍMHLŠy»‹™wêdÂ-�Ø]Rý4ÚärŸ×Õ¤­âºts(”vM‡l×ß…óM(à®Ð¦æo#×6¡žæZñE·1šPwÓër&f_–€{�°®¬öà¹.S°Ì{ê¨y:öçMßZ[sAÃiKN5ç6¹®Þ¦ÍîkZ<ó �`/Ѻ1/<¦Áÿ–ákSS}´¸u¬ý2Bé`Hz$žÏ¼ ßúËl½ëÐ ꊫJ._pöE ²}­�€Õ“Õ<×£P –ÙçѶ²jýáTÂʱ•,k’¿×æ×PÚp›nÎí¢¶ß«^”�[KªŸæ¨®7íÒšè~祻ôúË›´¾âEm©:ªëÑ9­)d»þ.œoR}g^Ñ:GŠy×þ».--` ï�XMV{ð\ŒB)Xaß{Ú{+Ѱ.ÕnÖÞv#íccI˜s �ˆK¬ŸÑP·:žTy}§FÂf¤æÔk··OS&½âéMYc²]Î7¥ï¼/«¬úw ìF[Ë9uöóâZ�«'«=x® F¡,óÞYíßߪï"7sÌ O åÅzªÞ¯ÔŸ«§`N,ë±3�€=%ÖÏi½ž*Ú!Oÿ줔Ùp{[Aß{*Ï£Õ’¯{Kûþ*c" ¦ÿÇ«¾hI ¨×ÿü½#)¯3ªPî�ÀŽ²Úƒçº`NÁ ©Ï»WëJw©öp$˜ÖíWEÉã*Z³[ÍÝKç¥ô�ì)©~N|£ú²­³{žG„}.•<û¬JO«¦ã^ÞŒÜn~|‹êŽ6êðž_DjÙ*ûíŸôûOÅ~­¨è)U6u)˜âb ç^�ì'«=x® Fa¬I úO«¡¦JNçNí©kÒ¹îÑÌIŽx”ÇÎ��ö”\?#5Á¸¬?¾ß ï¾Âþz•”lUíÉk)ÃbTvëïtì|ïi×p¤ö6¿¨"§Gÿl­ÑVW›ü½±}y/¸édßñ÷,(¬{�°—¬öà¹.¬Ì=Êcg��{úñú9£Pßgj:oÄ“e·þ†cç+ŽÕª |® ±pëóFÂx¼¦Eúø¥½ÇjÉ�`+YíÁs]0 ¾`Mv©õ‹Ô7K<Âcg��{J[?ÃcêóUã[#õ¡XNoü’e»þFÏWV{IãñpûdÝe»ê¥—ލùÔ)yþð9Ÿ«cµd�°™¬öà¹.S°Ì{ºúÑ^•;bæ…–þÆc©å?v�°§äú9£ÐÐ ]<áRUéšÈ¯=®uÎßè»å΋‘ÛÙóy_{Wƒê¨^¯gÜ×4mŽª»å ¶”<¡â臵•^¥ºÚl_+�`õdµÏuÁ(”‚5pë™Ç6«öè'É[xÏèRïìHlj¦¦îôèv(’^Æ|mÕÍâQ�Pðë§9ü¥Þ\ÿxä{ëUé:¥Ë·æVžV8a•þDÙ®¿Ñó™Áëòܧª7?Q`q-›îÖɾÒHü0Q¡Ü+�€eµÏuÁ(”‚[ j«GýKî1ÒßxÌ1súÏ?w+›sëXÞÖA��[ZR?ÃÃêîhRížWÓ¹.¡I{ZÔp:Kž5­Á/ÚÔ9¾èñã™›j9î×Dü0Q¡Ü+�€eµÏuÁ(˜‚¾§Ë®×Ôp¹W†a,´žV¹ÓÜx,˜VðºGoV>¯5ëöèD¦[�l+]ý4ƒ×t¬êi9Š‹õäC¦¾d»þ.œ/,û;v¼¤­}CÃK?¾þ�Àš²Úƒçº`JÁš¹Õ¬ÍŽ…|Ysn�˜•T?͆•§~Ÿ6F×vp<-çÛGÕ~ùsµvÅ_”,éýY°p¾H¸mq©îãS StNé„k—6U—héÚÿÙ¾V�ÀêÉjžë‚Q0ËPëwäýÚ'Ÿ/¡]¹,ÿÝÉø‹��ÈLbý4 :X±NŽ¢'´aïÇòÌm¯“^¶ëïÂùLMܾ­ïÏÈ™º¦Æõºdµd�°“¬öà¹.…S°L…GG5¾¨˜‡} ªòôÄþ�� 3KëgXÁ~¿Î=¤=;öªîèyù{þ®Ž¿çáÈí§’÷Û¤i:ýÝŸ©®ô9¹Øç�l%«=x® FÁ¬Ð ¨zFŽÈŸ7úgNjŽçUã¹*#´ôÓj��RyhýŒ?¦|¢n§ª,3çÖ¡âMòO,]dqá½��«Éjžë‚Q(k:ºÒñº=rŸJÜÈ«O\;õ\õï"_·è\`X_7�€YIõsð¢N~uQ éæ¹u*Í"„Ù®¿ ç‹„ÛÓÿ)÷—Ož¦ãïÑPšy å^�ì(«=x® FÁ¬ð]8âÖ_“@žö¤W[¿‹ýˆ`wÏÏÒÝ®$@AIªŸ†WÎÈqô{ÉíiÕtÜKùÁiÒû³`á|³Ót‚ÿ3 ßÙ?©Þå’Ë}\í¾E·tO%Û× �X=YíÁs]0 ª`™cêë<«¦úH!w¹u¬ýË{Ù8­½Î:½˜o‡T]±CîÀxä÷¿£Ï÷•iý¾6„]�°µ¤úi|ªê= ò$¬>ìùp¯JËjtÌ?˜gá6R®‚]jª|*ò½5*Ýýª^ÞXª 狪jêR0ÅÅÔ½�ØLV{ð\Œ‚)X樮7íҚ蜢Ò]zýåMZ_ñ¢¶TÕõàÒ=ýR2¼ª,Ù¨íN§œIm‡ö{{4C¸€‚‘T?CwÕ?ùÉ 3èWã– Úé½­T£f»þ.œïõyvÊá¨PýÕ¡è2Xò¹jå5Fh<(Oßñ×-(˜{�°¡¬öà¹.…R°Ì>¶:žTy}§F¦¾zíööi*ФW<½™ÍµéÒ•›¡ø� ýXý4/êÈKµ:v}4ÏFnÇå¯^E[<ê]Ø\¸Œü·ŠÕ’Àf²Úƒçº`JÁŠ-(U´CžþÙ½gÃím}ï©ÜåSF[ ~¥–ΑE7)!ÝliI¹º$�À¾–ÔOsB†¯-ã©/Ù®¿ ç35áoPÙs LEkW4Ü–ëÙ Oɱö u /}š©Pî�ÀŽ²Úƒçº`LÁšøFõe[gçÆF„}.•<û¬JéûXâ �ØSRý|„©/IïÏ‚äóMʸr\ï»þ,ßȘüõå*©xK'ù1Ê �X=YíÁs]0 §`™ —õÇ÷äñÝWØ_¯’’­ª=y-åâ)gUWwt~¡X;qX•›^K»`�Àžëç£L}ÉvýýÑó™ãêk9®óƒŒÜ€dµÏuÁ(”‚e>è\4Œ¶tªÊ”¼¥¯Z?Õ9ÿ½ÌIŽšPï÷³5/W ñU¹®ŽÄ�… ±~>ÊÔ—l×ßÔç‹ñ`Ÿ|g?Òëä(Ú-¯±ôj å^�ì(«=x® FÁ¬±Õ<ÿµ÷Ëœº)ÏŽoüµÞ¨z)ó`j´«Ña ­? öº*ÎtÞ.�À’êç#L}ÉvýM:ŸÒPà¯:ázI¥ÅE®Óùöïôqù�›Éjžë‚Q(kÚÿ*›¿Ü`Lk¸ã ­}l·<}!™ýUfLÓ͹-Þ&·,þ"�@!H®ŸËŸú’üþŸÞÂù"uðâÛZïˆÔ¯’ry/ëÖƒøSIÓa…S\o¶¯�°z²Úƒçº`JÁš¹u\»~¡õœ×Á²'µ¶æ‚†có‹ÞÔþÖ”Ÿª/a´Éå>¯«>Ÿ|ó­K7‡"!9þ�@aHªŸ)ö¹2‡®«³wv4w±l×ßäóEÂøƒnu4ý»öÔ6é\—¡PxT=žßë4%€­dµÏuÁ(˜‚5¿’e‘¥uqpL}Mr¹Þ×1ßýÌÂéwË{2~°àa7/��{JªŸÑ]gt%éÃOŸ:›_Ñ/\mòî(¸hH4Ûõ7õù¦ WUÉ*.~"òæÜ€ÝdµÏuÁ(¬‚Vpèþ’ŒŒ=ÂÍ �Àž’êgÚ­âæšCÅå¿U‡±ðiôûÙ”x>3tO‹'U¿·\Å‘ï;ÖUêí£ŸëòÙÏÔ9œ[�°“¬öà¹.¬ex„›�€=EûýyÆgªoþFý‰ FÚö·µ½Éûº¿ûs¹×`ü3Ф÷gÁÂù¦dtVEÉã*r”iï lû¢‡Éöµ�VOV{ð\ Ö2<ÂÍ �Àž’êg°G;K?ØœînÑ—#_™ _T]ÙùâOýf»þ.9_xLýþó:Z·W;öÒÑsÿTÏ•¿êïŒÜ€­dµÏuÁ `-Cìæ%¨Ýåq¿+WýŸÔz¥G÷ÿ•öæ�`O˪Ÿ37Õ¼¹Xkö~ž#·KÍ>¦ü±ê¶¼Âœ[�°™¬öà¹.S°R~ª>¥»]7–1ÊT÷‰=ZÝ>!òs›mO¨ôÍó2¢t¥¸y�ØÓòêç¤ ßßÕ\Ívý]8ß´ÏŸÖWc‹Fh#5ì¿~Û¢îÐÒ–ík�¬ž¬öà¹.S°ŒÓÚë< Ã.—\óíª+vÌnºoÞÑçûÊ´~_›Œ4ÁԼתªŸíP}»_ýÁÙO¶£Ÿv_÷¼ßNhéÍ �ÀžVZ?³]ΖáÝ;^ÒÖ¾¡ŽaK�;Éjžë‚Q0Ëðª²d£¶;r&µÚïíÑLá6ì{O[›¿]²mÙïQ¥Ë¹]��Š•ÖÏl×ß…óEÂmË[ÚóáÇòz½ñö±>ܳQeÕÇåâ±d�°“¬öàÑ‚‘ëVFºtåf(~ðh̾?ë×/jx~UÉè&ø7t¦ömóô. ½��ûZiýÌvý]8Ÿ©ÐÀ€î'­i¯ý^[~ökyû–.ŒU0÷ �`Côàv4ø•Z:GÐn¶´È?‘i, ª»y·ÖÎ�Wl˜Ý°ì=]]<w �`kÖ ·©„5x©A/Õ|¬ë)¦ÖnÀºèÁí(íµO«¦ã^森æ¸ú¯|¢úš*9+÷èMw›®LÅ�P(VøVúþåZ|>34 ßÙ?©>º…û¸Ú}J±–TL¶¯�°zèÁíÈ8«ºº£ ó‹"íÄaUnzMÇüƒ<R �X+‡[3Ø¥¦Ê§"ß[£Òݯê奪p¾¨ª¦.SDÂ-�X=¸M ¨÷ûÅ#¬ã 4¾*×Õ‘ø1��™±n¸ýA}žr8*TuHaåsÕÊkŒFjâAyú~ˆ¿ná�¬‹ÜŽŒv5z2 c¡õÔ^·QŬt �X&ë†ÛqùëŸWÑúc£´sáv0òß*¹|ÁØ«nÀºèÁí(ÝœÛâmrûÇâ/� 3+ |+}ÿr-œÏÔ„¿AeÏ5*0M·Ñp[®g7<%ûÜ€íЃۑÑ&—û¼®ú|òÍ·.Ý e>ß6Ø£ÀÅ[$Lén× 2i� ŠuÃmÔ¤Œ+Çõ¾ëÏòŒÉ__®’Š·t20š²&nÀºèÁí(<¦ã+Ü®Ç8­½Î:]Yr¾RuŹã’yGŸï+Óú}m2»�`kÖ ·©ö¹ k¨ëêM±d2á�¬‹©^UÎíq›Ôvh¿·G3„[�(Ö ·a-Gäúìr“LÑvIÍ{~)WûUúÇ’Ö¢ Ü€uу#µ‘.]¹Š�� ™¥Ã­wwì8}[«òƒd„g?©~�`Môà…$<©P¼xÿ¨Á¯ÔÒ9²h>RH7[ZäŸ`¨� ÉJ_¶ãÂù"áöôGj¾Ö—¼ƒ€Ñ£öÚ}jò߉|ݧîöj7b5p �ÖE^@¾Uyz’¿J+ÝŠËEO«¦ã^æ S�,o¥o¥ï_®…óÍ(xã†îÌÄç…Ô}ò¨.D×§˜Òð¥C*‹o•—ík�¬zp; ÝЉªg䈅ÑEÍñ¼j<We„–TúdÆYÕÕ•×ë]h'«rÓk:æ$Ü@Yià[éû—k9盹լ͎uÚËÈ-�X=¸ MûëõÔº=rŸJ¦‘ö‰k§ž«þ]äë ?< N ¨÷û©øÁœq_•ëêHü�Pìn6äûꦂñ¢H¸�뢷£ð]8âÖ_“@žö¤W[¿‹ý£]Þ@ò¥þ€Úë6ª8þè� 0Ø:Ü.B¸�뢷£Á‹:yé{…§ÓÍÎÜlÓqÿXü(…tsn‹·Éý°÷�lg¥o¥ï_®•œ/Û× �X=ôàv”v1¨ÄæÐÚš N—6¹Üçu5i_À.Ý 1ß� L´n¬ÄJß¿\+9_¶¯�°zèÁí(íbP5úCâ<Ü6¿†Ò%Õð˜ÿ[†¯MMõ.¹\òt4”éVB��Û Ü�¬€ÜŽVc1(sT×›viM¤È9J´qûvUlX«5;<º5EÀ€BB¸�X=¸çÔÔÚ¼”ñÿ©ýͲŒƒšÝáIm<x^½Áø;Ìqõµ¼©ý­<š �„p �°zp;Z…Å bÛ í§?yØì÷¨’Õ’  ¬4ð­ôý˵’óeûZ�«‡ÜŽR.Ðí‘e,5Õ­æ­/Èå#¨nÏ•—”¨Š‘[�((„[�€ЃÛÑ’Å Ü:Öþ¡™ø 2a*<rMg~«wÛoi*nÿ]ûþ*ƒE¥�  n�V@nGó‹A9T\ºK¯¿¼Ië+^Ô–ª£ºœŽ¿�€Ìn�V@nCfŸG[Oª¼¾S#aSa_½v{û4hÒ+žÞÌ)ö(pg2~šy7 ®Af߀Ýn�V@nC‹ƒš ··ô½§òLƒ2Nk¯ó€»¢5§n‡«·i³ûšo:�°Â-�À èÁíhâÕ—m•;0; û\*yöY•8žVMǽÌFn ¯*K6j»Ó)çÃÚ~¯z—3•�`9„[�€Ѓے©°qY|¿Aß}…ýõ*)ÙªÚ“×Ìt-¨‘.]¹Š�� á�`ôàXžÉ.µ~aÄ��…€p �°zp¤fÞÓÕöª´Ø+ô ­XNoüE�€B°ÒÀ—íÀ¸’óeûZ�«‡)MÜzæ±Íª=ú‰¼^oB;£K½³sy�…p �°zp¤ÛNh«GýKæèN+Îtâ.�À·��+ ·£Ð]õß_ºá9t]™Žº†ïé²ë55\î•a ­§UîÓ<– �…„p �°zp;2ΪÎuFW|>ùZgó+ú…«M¾ÀdôuæV³6;çÚ2ç� ÕJßJß¿\+9_¶¯�°zèÁíÈðÊ ¢éšCÅå¿U‡1C æ€Z¼#ï×ÉÙçû§º‡ò>�€íDkÇJ¬ôý˵’óeûZ�«‡ÜŽŒÏTßüú'Ž´;íok{“/öu÷çr:¯Á´¸¦Â÷oÉwñÏr»\r¹«Ý7 Óm àn�V@nGÁî,]înÑ—#_E‚ëðEÕ•‘oéÔÜYæ]]|ëß䈎ònxANç6m,Y£Ò7ÏË`A)�((„[�€ЃÛQÊp;¥»]7fGjgnªys±Öìý<íÈíLw“žs¼ ×¥; £µáa]o®Ö¾ÖH<� Â-�À èÁíÈ8­½Î:}œx¾RuŹã’ù­>ˆï¢-gd¤I©±}n·,Ý Èì÷¨ÒåStÀ×Õ(£¸�`{„[�€ЃۑáUeÉFmw:åLj;´ßÛ£óŽ>ßW¦õûÚÒ†[3èSÃæªÿ¢sa1©+çu´ºB•î/bÇ_{ßÑFqÀö·��+ ·£‘.]¹Š<ó;¯v<¶x•å¥Í±¹Y·fâo�ØR´¿_‰•¾¹Vr¾l_+�`õЃÛQš¥™wêL·šTÔ}]z÷÷º4¼âò’6Œ=¢ �°/Â-�À èÁí(åœÛäv¸z›6»¯i*þ–TÌð˜ú}mjª¾Ç­cíÿb˜� á�`ôàv”vÎí¢¶ß«ÞtYÕÕõ¦]ZÝ ¨t—^y“ÖW¼¨-UGu=8� n�V@nGÑ9·Ý÷e¬`ÔÕìóh«ãI•×wj$l*ì«×noŸ¦MzÅÓË"R�P@·��+ ·£Uuö×ë©¢òôÏ>¸<no+è{Oåñ­€��…p �°zpZ•Q׉oT_¶uv_܈°Ï¥’gŸU‰ãiÕtÜcä� H4ð­´eSªó/§�¬‰܆VgÔ5ŠËúãû òøî+ù=KJ¶ªöä5I¶�€V „„W�°/zx;Z…QWóA@ç¼^y[:Õ?eÊ ÞÒW­Ÿêœÿ$�’n�ù€Þ–VaÔu¬C5ÏÿFí}ã2§nʳ£DÅ­7ª^’ëêHüE��n�ù)Mû?Pe󷑘<­áŽ7´ö±Ýòô…dö{TÉ‚R�€„[�@> ‡GJ3·Žk×Á/ô¯žó:Xö¤ÖÖ\а9®¾–7µ¿u€¥��ó·�€|@Ôæ·*’£ô .Ž©¯£I.×û:æ»O¸�Ì#Ü�ò=<"¬àÐ}ÃDY�@z„[�@> ‡��+B¸�äzx��°"„[�@> ‡��+B¸�äzx¤6ø•Z:G-ÒÍ–ù'˜ƒ �X@¸�äzx¤fxåŒÜ�Do’ÛÓªé¸ÇjÉ�€yV ŒVºV�ÀòÐÃ#5ã¬êêŽÊëõ.´‡U¹é5ón�ó·�€|@Ô&ÔûýTü`θ¯Êuu$~ ��á�èᑚѮFo@†a,´þ€Úë6ªØåS8þ2��·�€|@ÔÒ͹-Þ&·,þ"��·�€ü@ÔŒ6¹ÜçuÕç“o¾uéæPˆù¶�€$„[�@> ‡Gjá1=ŸŽ$˜ìRëFü���Â-� ?ÐÃ#5óž®~´W¥ÅŽØÀB+–ÓÛ��„[�@~ ‡GJÓ·žyl³j~’¼÷Œ.õŽÇ_��á�èá‘’ÙçÑÖ­õ/™`;­p˜Y·�€„[�@> ‡Gjá{ºìzM —{“·êi•û4%�n�ù€)ÍÜjÖfGâ\[æÜ�R³R`´Òµ�–‡©™j=ð޼_'nmÿT÷ÐdüE��n�ùi˜ Žjœéµ�€A¸�äzx¤6ø•Z:G"7QH7[ZäŸ ñ�n�ù€©^9#7�Ñ›€äö´j:î- ½�€Bf¥Àh¥k�,=<R3Zõfm“N%îq{Â¥ª*—Züƒ„[�À<Â-� ÐÃ#µ‰õ~??˜3®@cêýcñc��·�€ü@ÔŒv5zÉ{Üö_Skm™Š]>…ã/�€p �ÈôðH-Ýœ[G¹\WGâ/�€p �ÈôðHÍøLõM_&ïq{ù„Þz«Mß…™q �X@¸�äzx¤–rÎí¤z›«TÕ:À‚R�€y„[�@> ‡Gj©Fn¯^PSÕz=Uï×tüe��n�ù€©¥™sëØðšÎôNÄ_��á�èᑚñ™<]É«%÷d¾-�¼îîî…=Ð#-ç¾þÛßþUþˆ^Sªk¶èŸ�`„[¤fN+<ýð ;s³MÇÙó� Îððp,$¦jÑÀ˜oæBmªý³��ìp‹ÔÌ{ê¨y:åÀBshmÍ 3˜ �ç?þã?–Ô…uëÖéþçâ¯ÈÑkŠ^Ûâëþ��öA¸EJfŸGÛʪõ‡S nyOV妚äïµù5D¸€‚“jô6ZòUôÚ_/£¶�`/„[¤ö½§­Íß.ÚògX—j7ko»ÁV@�€¤ÑÛ|µ³xô–Q[�°Â-R2ïÕþý­ú.a)3èSCy1[�bGoóyÔvNâè-£¶�`?„[¤RŸw¯Ö•îRía—\uûUQò¸ŠÖìVsw0þ�@¡‹Ž€æû¨íœ¹Ñ[FmÀž·xˆI úO«¡¦JNçNí©kÒ¹îQI���w·HÏœákSS½K.—[ÇÚÿ!#4ÿE����È„[¤fŽêzÓ.­)r¨¸t—^y“ÖW¼¨-UGu=ÈŒ[����ù…p‹”¢[mu<©òúN„M…}õÚííÓT I¯xzy4���@^!Ü"¥i½ž*Ú!OÿTìx6ÜÞVÐ÷žÊ]>…cß���€ü@¸Ejߨ¾l«ÜñØaØçRɳϪÄñ´j:î1r ��� ¯n‘†©°qY|¿Aß}…ýõ*)ÙªÚ“×$Ù���È3„[¤6xQ'¿º¿h„6¤›--òOn���äÂ-R3¼r©hIã±d�@ “]jýˆä;S“¾v}1Èêÿ�`'„[¤f|ªê= òx½òÆÚ)y>ܫҲón P™÷tõ£H=(v,úð³XNoüEùÃêÔG{žWqÒµFÛny –G�;!Ü"µÐ]õßO.úfЯÆ-´Ó{[3ñï� ËtÀ­gÛ¬Ú£ŸÄ?üœkgt©wvÂü1¡€{“+¯ÕÑS‰×i-_©7ÄGµ�`'„[d̼¨#/ÕêØõQFn @ÅöAßêQÿ’B0­p8ߪÃê󼤭žÛKëÖtXyw¹�€!Ü�€Ì…ïé²ë55\î•a ­§UîÓùöX²©ððßäúÕ‡ºÜ—p­ÆwêñþQ§y,�l…p ��26s«Y›‹ç¯F[>ιԭæír,¹ÖhcÎ-�Ø á��dÎPëwäýÚ'Ÿ/±ýSÝC“ñåó^›¼uJ_']k´ÝÔÏ%€­n�@æ‚=òÿŸ{OÊ…SºÛuCƒy—g¼á×ÿžHžsk~¯®.¶µ�»!Ü�€Ì§µ×y@‡].¹æÛ!UWì;0 Žwôù¾2­ß×&#çé1,£å€œo¼“p­‘vøUUlþH)S¦Ñ¦}ëË´ïó;„]�°8Â-��ÈœáUeÉFmw:åLj;´ßÛ£™| ·Þ_©dã¶E×moÈÛ;I¸�!Ü�€ÌtéÊÍPü ßMkäë¯us:~�°5Â-��ÈÜàWjéY4ÊÒÍ–ù'òmìsZƒ_´©s|&~7sS-Çýšˆ�ìp ��2gxåL¹µÎÓªéÈ·Eš¢%ïNq­‘¶ö u 3¤ �vB¸��™3Ϊ®î¨¼^ïB;qX•›^Ó1ÿ`þ…Û—ê>>•p½§tµK›ªË?Ä>·�`'„[��¹‰õ~??˜3®@ã«r]‰ç S·oëûʼn{êšwÖëjpÑãÊ��K#Ü�€ÌíjôdÆB먽n£Š]>å×XhXƧ’÷Û¤ëíïþLu¥ÏÉå Æ_�°Â-��È\º9·ÅÛäöÅ_”/Ò͹u¨xSc.€�X Â-��ÈœÑ&—û¼®ú|òÍ·.ݼû@¡p¾…ÅH¸=ýŸrù÷„k4ÿ·ºû`"ÏF™�+E¸��™ éÁøÒU†Ã¾Uyzò,0š Žj|IæÊw¤Vž>«ì× �Èá��d.tC'ªž‘cÉ£¾‘æx^5ž«2Bù²P“©P÷ U­{|éµFš£ô€<¾…x:�lp ��26í¯×SëöÈ}*a+ HûĵSÏUÿ.òu‹Î†ódK qùë7jÝžt*áZ½Þãr9+TÝôIäë <`¿[�°Â-��È\øŽ.që/ƒÉ Oû?Ò«­ßÅò…©°qAGÞýRƒIi;zÞQë ¡�ì„p ��–ÇœVxÚ:Ïòšá°ˆ±�`„[��¹4 JÍ3‡uûöXž<–œnA©æý>Ý}À·�� sÆçr{2 #MëTãþ£êžÊ‡xÝ èòö|—â:ãÍ÷ío h*þ�€un�@æ ¯œ)VNnO«¦ã^ŒÞF­wwŠë[ÔÖ¾¡ŽaFoÀê·�� sF›\î/äóùÚºúƒùn[äþë×)¯q¡]S?&€ån�@æBwÕ?y¥äüe*40 ûù1�ð#Ü����,p ��–iF!£KžF¹\.¹ÜÇõù•=çé©9!£«C÷»‘ë}WîcŸéÊ­Yeü�Â-��X†I¿Uy±cÑÂL—ÔÙ[ù² P\øŽ:¾ â¤k¶µ*¯kÓ-æÚ€mn�@ÆÌÁϵ¯üU½tCF0:ö9£Ð¿>ÑK›_ÑáêM*^³[ÍÝÁÙç\Xƒí¯«|ïŸt©ÛP0:²lŽë_'÷ksõÛªÞø3­©<¦î“rÀ·�� caßûªôÜN5oËóâ[ê›qù}my¾Aþ‰|ŒAù\¯ÉÓŸ¼‹­ÙïÑ‹Õ §Ë.§ž¯ÿFñ_�Xá��d̼ת_mkÔÕÁP$àÎ(4Ò««ž*}üµÇöŠ ©ÏS­×:†fßSaÝk­Ñ6w§C3‘‹i¤·Sžšçõøžv Ç^Ò#Ï/ߎóȯ�,p ��–aRÆ…·UêHœ¿ú„Ê\›¬>§7üʋ٬á;ºðæ¿É‘8ßÖ±I®«ÃñÑçi ·Qƒ<v�°.Â-��X¦)=è¾_}¸QžK·L| ÙÒCù³°TxXÝÿ,wleç?ëRoò¢WæÐMÝbíd�°:Â-����Àò·�����Ë#Ü����,p ����°<Â-����Àò·�����Ë#Ü����,p ����°<Â-����Àò·�����Ë#Ü����,p ����°<Â-����Àò·�����Ë#Ü����,p ����°<Â-����Àò·�����Ë#Ü����,p ����°<Â-����Àò·�����Ë#Ü����,p ����°8éÿE̳¬t^à ����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDgetinfo.png������������������������������������0000664�0000000�0000000�00000306640�15030617045�0024254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��M��+���•®yk���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOSYÿÿ‹ûôŽw¾‰7L&!$Þ0¹bˆ7œL&p3¾A3†Ó/˜ñ€qæà:œŒ ktÚ3Z|=£¼QëHßu¬(*Œ^¼¤^SŽôxÕA˜V¬cSù”¡°Ÿß½Úmi¡¥»ÝkÃëqe]C±Ý¬®½×k­×k½~¬�AAARš‚ ‚ ‚ æ”&‚ ‚ ‚ ˆy ¥‰ ‚ ‚ bHi"‚ ‚ ‚˜Rš‚ ‚ ‚ æ”&‚ ‚ ‚ ˆy ¥‰ ‚ ‚ bHi"‚ ‚ ‚˜Rš‚ ‚ ‚ æ”&‚ ‚ ‚ ÅŠ+RnÉ@JAAAŠ"Y¥'Rš‚ "AÂ-Ž‹mADæIUþ&ûy’öAIJ%Ó‹.A! ¤4AD† ¥‰ B™ÒDA‚”&‚ eBJAAdRš‚ ” )MA‘!Hi"‚P&¤4AD† ¥‰ B™ÒDA‚”&‚ eBJAAdRš‚ ” )MA‘!Hi"‚P&¤4AD† ¥‰ B™ÒDA‚”&‚ eBJAAdRš‚ ” )MA‘!Hi"‚P&¤4AD† ¥‰ B™ÒDA‚”&‚ eBJAAdRš‚ ” )MA‘!Hi"‚P&¤4AD†ˆX4}nØ­VX͆¾ð÷þaôÙžÀöÜŸüÕ4¤4AÈ)MA‘!"M/lÚϱUsŽ‘‰ÀoÏCœÚúÀûV¬XƒÂã¿Á¦8‘ÒD!¤4AD†ˆX4'ž¡áÄM8ý!­Hx…æ}ïQå}‹;ްÕMçHðßEHi"‚Rš‚ "C„/š‚óNß@Pe0fÓ!_ÅN˜>Deë›àïGàôÅg˜ ¼‡”&‚ ¹ˆ¿p¯&iOA,[â*M‚ –Ý9Wm2À1R¥^5ᇦiÅŠ”&‚ ¹ˆ”¿éw¯&iOA,["Í¿ŸÂðµ/úÑsó(òØ)“ª�µƒ!Ej]:îzBLRš‚ ä!BþfÀ½š¤=A±l‰\4'áíi@ÙúU߯X±ņnx?†í·QWµê²ÓhvŽ…ÞOJA„\„ËßL¸W“´'‚ –-sM~ïKØ­ÿ†Ý5ŠÙ3¥ØÒD!q•¦4¹W“´'‚ –-‹æØŸp üzá/8þ ½ ¥‰ B."äoÜ«IÚAË–ˆEsô7hŸG£ÉSœÖx¡š_C ¥‰ B."åoúÝ«IÚAË–H¥©«Øb;_ËAE+)MAr3Wþ¦×½š¤=A±l‰X4E¥©òÃìP«¡Ž×ŠŠPEJA„ìDÈß ¸W“´'‚ –-‘JSdf¥XL9Œ8MJA„ìDÊïô»W“´'‚ –-‹æX'N}ÛŠ¡éÔJs˜À+ÓQO¡ÎA! ‘JSúÝ«IÚAË–ˆES€e÷VTÿ§7Ò^ð½½EõÚ½°¼¡â¶Ar!3à^MÒž ‚X¶D.š“î8LU»br ¶‡Ú\d‰ï[±B…5•-'Q¤4AÈC¤Ò”~÷j’öAIJe΢)¼COýWXPœÂÛ*¬/k@w2ôÆ É.ºA„4DÈß ¸W“´'‚ –-±Í)øÜÿFsƒýe4[à‹±“ÒD!ò7îÕ$í ‚ ˆe [4ýî'¸ûð¼cnØ»û1âµ#ÿíM0YÂ12z÷\Hi"‚‡Hù›~÷j’öAIJ…-šÍ‡Êp°b¶~ºV|½y5&ÜÖl‚*°Ð®€*ï$:†#Ýò¦!¥‰ BæÈß4»W“´'‚ –-lÑÔýÐ…±PºÚ•e7ñÒV‡ÏvTケ&ÓU\¨*ÆNcb¹Ê'»èAÒ[þ¦Ï½š¤=A±la‹f ãRHiZUÑŠÇe|k˜Q’„7Møö§ØY™Hi"‚&3é^MÒž ‚X¶°EóâEþSšFÇ:P³v r‹v@­Þ‚ܬõÃ!¥‰ B˜üͤ{5I{‚ bÙÂÍ_OÁõ«G°aÅJ|¨ýcîÖïP˜¥Â ÕÇ(ÚRHJAg0ù›I÷j’öAIJ…-š‚÷)®UïAiU=¬ƒÓéhø½oñzdNË)è­ïB¿„”&‚ y`ò7“îÕ$í ‚ ˆeËÜEs#}V´ZÌ0™ï¢Óá‰@< )MAòÀäo&Ý«IÚAË–ÈEÓ ÇÕò¨tµÿÀÖSባ8%»èAÒÀäo&Ý«IÚAË–ðESxcAÙJQQÊ*Ä^íY+«„¾ñ¾/+FmçHè]‘ÒD!LþfÒ½š¤=A±l _4§lTm‚¦kH\rÑzÚÇ”¸ü¾º#”rœ ‚+R•¿¤4AD‚D,šwC_PÖQ¦‰JSUŠ˜O|ögÐÚFƒï‰‚”&‚ y˜+Ó“JÒž ‚X¶D.šüîGøÙlð *MyÈUWÃÐù ÓNÑÒD!‘ò7ý1©$í ‚ ˆeKªJOªŸ'‚ G¸üÍDL*I{‚ bÙ²ð¢)`ÌþO$ª(OAHC¸üÍDL*I{‚ bÙ±h ï`¿v ¥j5ÔamGÁz¬)¹ ÇØÜe—”¦ÅÃÆŽ5jÔRi3d &•¤=A±l _4§Û"üáÛ ÙêÐîzp÷xöoÄâàmìx½—¼?c<÷Æ.5”Õ¿ôǤò=‘aØ¢FÚòjÓÃQ»ý$Zn¸ÝÓízMÕØo²^¿ñ‘Ò$¼¯÷’÷gŒçþÑØ¥†òû'­{5ߣA†w±ÔPÂx+ÑEõÏ?ŠÁ—Ïaw½ý‚!.º=×pþ¡4å‰Yx;^異ægÐØ¥†¢ú—÷j¾Gƒ 2 ïb©¡„ñVÔ¢Á!ŠêßèoÐì9 FÙŽU@ó+)MRÃÛØñz/5‡8ƒÆ.5”Ô¿L¸Wó=‘a’@Dj(a¼yï#õ/5"ú7ÚŠŠU±ÜT´’Ò$5¼¯÷’÷gŒçþÑØ¥†’ú— ÷j¾Gƒ 2 ïb©¡„ñVÒ¢Á#Šêßè#/ÿ«Õl-0颼ú2¬žñЛ"QÂ3Ì+¼¯÷RQsˆ3hìRCYýày1×½Ú~f;eÏ#Éá]@,5”0ÞÊZ4øCÙýá7-¨þð³Pí¹(áæÞÆŽ×{©ì9$/4v©¡¨þM¼…ûmŒ<yÂÜùB/"Iöûñ=‘axK %Œ·¢ Qvÿ&à¶ìCöŠ춸Hi’ÞÆŽ×{©ì9$/4v©¡¨þþŠª["’@ZQªZßÀç0£º¼&‡7ôä¿ߣA†w±ÔPÂx+jÑàÅ÷Oða䝸biL"Jx†y…·±ãõ^*~É]j(ªóƤºái®@öŠõØÛìž1€E|>ø ‚È0ÉN "5”0Þ¼÷‘ú—‘ý‡Çvæ»ÝðøÙ²:ŽAÇ3¸¼±k|0”ð ó ocÇë½TÖâ »ÔPTÿÆž¡ýŸ½aI ¦ÛŒøXºq?¼#ï# Ý&ûýø ‚È0¼ ˆ¥†Æ[Q‹‡(©³)kW#ïè¼ù3øZ•]£ÒG$fámìx½—JšC¼Ac—ŠêÅ4Dfá]@,5”0ÞŠZ48DIý†ZP¹öST\¨Ç¹½_A÷ØŽÎk&´u˜Ðððmè]‘(áæÞÆŽ×{©¤9Ä4v©¡¨þÍÓ$MɾGƒ 2 ïb©¡„ñVÔ¢Á!ÊêŸöŸ~€åÕo7.ÿpnA€ßÙˆ¯z†¹õä•ñ ó ocÇë½TÖâ »ÔPTÿ2PgïÑ ˆ “ì"RC ãÍ{©©Þ?a¸šÂ5ßE¶µ(³ Pö<‰ámìx½—¼?c<÷Æ.5Õ¿X1M/âü!-Ú<1ÜöD’ý~|AdÞÄRC ã­¨EƒC”Ô¿Ù˜¦ð¶ ëË®Â'}ïßgx;^ï%ïÏÏý£±K Eõ/º8y ý†úòO%3zñ=‘axK %Œ·¢ QVÿÆá~bƒk"¶‚ %<üÂÛØñz/•5‡ø‚Æni1~qÝó"ÓŒ‡ñù »Ea$;ˆÔPÂxóÞGê_jDô/Ù—ˆYx;^異ægÐØ-m"Æoô7hö…F£ k:nÙB%$æ’ìøÓÝ"ˆ0H€e%Œ7ï}¤g65"Æ/Ù—ˆYx;^ï%ïÏÏý£±[–ô¦áÐ!èÚ0á}‰g./ñþ‘~جÝ虽“?"Æo¬Ïþ½˜FÀ„ë ¹(å8AHïv©¡„ñæ½ô̦FÄøe û1 ocÇë½äýã¹4v 1Žõ;°ªè.Õ@ù–`…j¾»òJ²Uþ­ÈÞCÏ»˜îmr1~£0œn€Éd k¸RS‚m5—`²<„#JLvüù~š"Ãð.`—JoÞûHÏljDŒ_²/³ð6v¼ÞKÞŸ1žûGc·¯`)ÍEyó_€ðê7ýêÆ²g4w~GŸ(]Ž{Ðn„“C­)büâ½f›*ï$:†g •³ß%ßOAd˜d'‘JoÞûÈCÿ–Œ{G²/³ð6v¼ÞKÞŸ1žûGc·.˜ÔÐX½€ß MVÔ¦v˜jMpͼ!´×œ‡5¶ÝHV"Æo¡“&öúÒ ÔÞš•åÉŽ?ßOAdÞìRC ãÍ{åïßRrïHö%bÞÆŽ×{Éû3Æsÿhìb vý¨j )M¡¦Ó ‡á�v ¦«¸p¬«Û0úODŒßÄ0ßÍž"™Žiz¯ýèŽíÁNÃl¡òdǟ柳 2 ïv©¡„ñæ½ò÷o)¹w¤?û1 ocÇë½äýã¹4v !Àï4ãPm+<C-¨Xµ zûï3˜k>GŽ*ç~Œb“+ô~¾˜;~Sð :ÐÙ|&ó]t¾Fð€ÌOs²³wÃøb,ðF²ãÏ÷ÓD†w»ÔPÂxóÞGùû·„Ü;ü£ym©œ’‹‡·±ãõ^òþŒñÜ?»D˜„×nFmùW¨¾öÞ(ûФ̳ížÐ+¾ˆ¿q¸[¿CaVÈÃ!Ðþ­špSÊq‚>ØòA ãÍ{åïŸòÝ;üî'¸ûð¼cnØ»û1ÂXÿíM13.…C2cñð6v¼ÞKÞŸ1žûGc·´‰¿±ÔnÞ“†«31MõçPSZŒÚΑЛ"IvüénD$À2‹Æ›÷>Êß?å»w4*ÃÁŠ=ØúéZñõjäÕ˜p[³ *ñߨ¿Gg\ G Ï0¯ð6v¼ÞKÞŸ1žûGc—,Sð¹Ÿà–Aæ4ô ͰºEyúWÞ¿)‡§c•†}€Ógã˜ÂIvüù~š"Ãð.`—JoÞûÈGÿÂÝ;ºáy¹èþ«å~àØ½C÷CÆBI V–ÝÄK[>ÛQ ÆF˜ØIYU1vû(„Äð6v¼ÞKÞŸ1žûGc— ¢﹈b–À'k#J¿Þƒ‚ ŸA½u¯"ùC­8º[ƒÆÖŽÙì§]m¸©9€£­o$‘ß|?M‘ax°K %Œ7ï}ä«Ê\tVÈÒ´ª¢#ŽËø6,Ÿð¦ ßþ$¥’˜…·±ãõ^òþŒñÜ?»$ú`Ü–U¡]ÃAwëRÜOQwà:ÿ‰|à…£¾ÙâïØïƒM…ì#^LÄî|²ãÏ÷ÓD†+¶ PÂxóÞG®ú§ÐE÷âEþSšFÇ:P³v r‹v@­Þ‚ܬõ¨ˆåö!B2cñð6v¼ÞKÞŸ1žûGc—“6h×ea«±?h0š–ßÞASxšÿD>Æá±ÝEƒþ44š:[팓‚‘ìøóý4D†á]À.5”0Þ¼÷‘«þ)tÑýõÔ\¿zV¬Ä‡Úßñwx&ÕÇ(ÚRHJSàmìx½—¼?c<÷Æ.FaÓa£þ)©o˜üÎù¹9«±¦²Cœ½R!ÙÏóý4D†á]À.5”0Þ¼÷‘¯þ)sѼOq­zJ«êaœÖìø½oñzdNË)è­ïB¿„dÆâámìx½—¼?c<÷Æ.Iü¯Ðù“ã ûmÐæl@QÕeX=ã¡7ðEªã—ìçù~š"Ãð.`—JoÞûÈ]ÿb.º×a÷&Wÿ(SÌ¿ ŒôYÑj1‹#:<ðÍ£ì‘ÌX<¼¯÷’÷gŒçþÑØI€ßŠSe×àœÇÍM.R¿d?¯€»E™Cl ¡„ñæ½Êxfýðù8ô͉?/W˱^Hül=õž8ûeŒ?Ÿð6v¼ÞKÞŸ1žûGc— ±äßt[¼Ê«Ü¥Ouü’ý<ßOAd˜T' ‘JoÞû¨ˆgV!–Jáe+Å BV!öjÏâXY%ô—ð}™tʼnYx;^ï%ïÏÍÅÃÕØbRsQ®¿6S6Юk ÞXûù®#‰ñTÇ/ÙÏÓ“NaðÏ,JoÞûÈWÿ”m©œr°Qµ š®!±ƒh=m„cJT¦^ÝÀJ9.9¼¯÷’÷gŒæÀâákìÆán9‡Ó¿º#e´¨LéÞ•öR¿d?OO:A„AÂ?³(a¼yï#WýSº¥òïnè ªÑ:ÊÔ#Qiª*BK9žý´¶Ñà{¢ ™±xx;^ï%ïÏoý|°Þº­F(‹ZíðéÌÙØ C°ßý7Ðéò‰¯GÑ÷° æ»Ýðpè%ÀHuü’ý<ß3‘ 2 ï‹ÓRC ãÍ{ùêŸÒ-•üîGøÙlð *MyÈUWÃÐù*dÆâámìx½—¼?c<õOðvÃP¼.Ð'UNvê¬å Äø<˜Ñ“3øº·¢Ì«Üêæ~ø„1¼0îFvV!ÊìA±æ¼¡wñDªã—ìçùž‰‘aø`K%Œ7ï}äªd©$’€·±ãõ^òþŒñÓ¿q¼¨ß•j3j[zá ÉÁ× óþ£°¼á)«{Ë<ŠÐ'›0Ô‚Ê5kQlì…_臱ø{…·MŽd?Ï÷L$ˆ Ãûâ´ÔPÂxóÞG¾úG–J"qx;^ï%ïÏ?ý{›ö¬Øj„+ÂF3—ñ4Vþ$W÷vê9êwiÐúçÐR[Õš#hš€ÏiÆþý·ð†C»Wªã—ìçùž‰‘ax_œ–JoÞûÈUÿÈRI$ocÇë½äýã§&z°í£S°Ž…vø¾g0V|†œUåtÒ´ “ðö\Dq¶ +TŸâh›ãÎ_qžÅ†5X1LJ)Mï‹ÓRC ãÍ{¹êY*‰$àmìx½—¼?c|õoÃ=èjÏ¢¹o,¨4:]Û�—É ø»·üÞ·ôò8ZsIuü’ý<ß3‘ 2 ï‹ÓRƒÆ;uøC²T‰ÃÛØñz/yÆh,»ÔHuü’ý<Ý-‚ƒXf¡ñNþÆ,•±œànø‡àhûzZƒ/†)åø%Óò›îA„A,³ð7Þ|x;çDÄÁî£ÏÇßQ =³©‘éE— –\Íß3\-û*±O¬_¦úÕ-/É=o ’êø%ûyº[A3øá6Ÿ‚æv¬VkXkG}ùÐ4wÁîåjñ¥E752½èÄRƒŸ9àÇË^¬UkÑls…RŽOÁ7Ø ã>J9¾0ï1àÂÓ àA÷£~øB/y"Óò›¤=AÄ ¢Òd* Òøm k[àæ¤îë±xR?‚à/¬š¨ï½ž†RŽ'† ænwvE Õ£ü3 š­v¸8s»Î´ü&iO1ƒ¨4Ý8ú§N¸Ýî°Ö‹æª}0Ø^Š?;áhÖáx³{®ENøZtÉRI„\ü §± µío¼&0âøUùe0:ÿýŽø’.˜ÔY>ÅmY[PÛÊ«#ëS*$ûy’öA3LÁûì^N…^ÎàƒãÚ%´OŠ?O`¨ý8ò5V.ŽT i!K%A2â³£¾xr ¶C­Þ¢ÜlqŽ®åõ#Œòáoòû†öžºÂ †b{ÙŒªØØÏ.;š5Z4{øã™–ß$í ‚ fˆ£4 ¡»ûMàeêE=6«Öc/4Å€,•±ô`¥®àоshsÁëú.oЀ4Ò× «­#œ¸+3Ÿ×´¨,-Fqù7Ð[žb˜£þ…×üx‡gv·¸ F1éÀµ³1Ì~ö¿A{ÍNn\3-¿IÚAÌÀA†úÈ hXm¡évò Š6Ÿ‡}B€àÔíÖÛ/IišY*—7^ØêNÁâž½žf6ÝiÜZ(ßÛ û˹ñ(¯»ŸÁ³¨É¶˜þd@AøÛ†º#·àŽ¾ÌØè¾¹½@è… ;’ÊVoÎAQÍ¡îä^lÉVA•_ƒ+?–"[|þW¬P!»ø"zã”i&á¹ß ëø<ß\ì¿ù² c¡—<Á—üˆ­4 ¯íèÈëq¼¨ßUv4A,Äžk‡:ª©o‚» û6äcßRšæB–Êå€ ÇEìÒýŽðèáÍ-ì?Ü‚¡…&Œûöªãd¸ÁBsE%ÐÛß‹z‰;ûò±a_Ó\…#&‹èOF„18 ‡¡³…Ï–ùín]HñIÀ°#µŒòXPºê�š‡&!ôÕcÓŠR4þnžmܱ½@ γE‡Ã×úd‰‰$ïÛš#hûϬoüà‚yo)Žœ {®Äv²b;6ëŸb‚ÅŒeãù9nÏ1DÈCªã—ìçIÚ„‚ á)É­Èé`Ãã9kk\øZtÉR¹ì`Ù<lƒKAˆƒÛ„âœì˜c°(Á~S/¦’VšD’íO†„9ŠÛ„†]zØþ^èª2vÄû¢ÎÒÀ*NY¿Uƒ,qLLÖFÔûg¯ÿ¾5gäˆódJ¤5Wa25âJÍ6¬UŸÄU“I|ÍÚϸP± ù—aäoeçK~¸`*ÎEÁŽèçJlûM蛚€ûÎ!lØpwHi"ˆeˆÂ á)É­È逹z4áÑû¨m?¹w$Y* cÖ³8`r7Ôcqꀯ™ÓÃÝè|.uŽÅ$û“1ᬧj`zÅæATçEÃÎäSèó¿Eû{!8&Ô¢Ó+*y»÷áûúë0ÿ ÇÔ[QÝþ6ôL^ü=lÚCsSŽ‹÷«*‡Ï“&¾ÄãÎ>ñ S3û¶Z2´'–1Ê+„§hÒaE–œy\=Ƚ#ÈRIˆÌœš$êrÂ÷®·så®0؃G}ïC¯A2ýɘ‚æ:8ç4l>•„püìþ7ú|éž>8Mµ¨mÀPëa¬úHûä$¼Ž¨Ùºª¬‘›³&·Ük¦Ã~Ôv†—=ûùôGl]™Ëe&¾ˆã^N:cçÒ€Ôò™¤=±ŒQ^!<E“+²Ô„»zL»w4âªf6qêÞÁd©$!åäö}\HÈå,„ûj47Ñž®^lêà3M¬ö—!ãV²$ÓŸ *e©·ÿù㜸«ø0u šÛcdµ¶£¾ü hš»`wŠï’á즓(/;†köwQ›æð’ ò" ?DmþÇ(:x Í T}µ9*‡Ö�GZÊ…¼Ýh8tº¶Lx_â™Ë+ŽŸ¨”ôÃfíFߤxž-,vN H-ŸIÚËåÂS4é²"KŠ€±þ~ü½L<EÝN-º¼óÚà²TÓ07¸MŸ <!—³Ì5.LÛTÈ*ü­îhCW$ÓŸŒ)Ì-O‹M„ÜôažÓð™¶…µ-p§+Ͷ0·µ -ÛHëÑÐüo¸}üÈFÁÛ‹_ë5¨(-†ºx/j.=@Ÿ,™ýÁ8ÎUEÇp©îÊ·ü+T›ðÝ•P’­ Þ¯ì]0ôD?gr0§@D ÆÎ)6¾RB«±¼QX!<E“6+²”ˆ’_.ÂôÇ@DÊl—ã6jò6Êwú(nâzŽbŸî7¸'Fáz&Ž*ÿ0úlO`ëã%y Y*‰iÆðâ–’Q.Ü·¡­WØÜcíeó1ì0XCsñ4Çï-"yÌ"úÃH·‚0Ñ‹[—ÿ…á„¿(£nœGýSgĹݽh®Úƒí¥ø³Žfާ£–“E†]Èf lÞ.|ýÕ&l(ú[Ë.É”r<Ò±/È+XJsQÞü—Ø?P¿éP7þ–=» ¹ó;úÏô=h7Â)»Hdžà½û ntâó~ú†fXÝc(t‹ƒ”&‚˜X…ð<^'›Ð%D:­È’ÏŠ+ömSlcò,‚º«¶¢æRN–&nXDÅþ»‹ø±d]¨ëPlè*R²B–Êe‹ç!̆£6W><7›Ÿ713l“3ζ{ÄŸø‡ÚP“*¨a>„;î2÷Zó#¸Xnï <´ü‚»¶pÏ‚H“‚ ø`½uZfDÐ_C«Ý“ÄzG1ˆ8›ÀPûqäk¤Ïf'8ئú�…ÚG‚±~«¥&'&ì0Ê‘r<Q~g:û‚°‚ßAƒ›ß MVÔ¦v˜jMpÍt`í5ç|¦ÓÏ$¼=QÌNÀ²6¢ôë=(ØðÔ[÷rr–<RËoZ b^XOUÁèä=þFa¤ÕŠ,ÌŠûôþqfµõbP6÷“Ix,_aUy³¸´Ž£¯þs¬Pñ»¥Û4M°õ  ƶhŽãšì.¥d©\¶Ä5Š|ˆÊDA,D †R²÷ÞYXFŒ¶¢ò“oÑì|aâ9Œ%9È*øGÊvCÓ¨¶ éPX|‹¡8hìPãlAnVJŒÏEUGFÕzìMÃIÓ¤M‹u+J`t{“~x­gP˜%-9˜Ñ‹·:{c°ë¿@UûPHiú5n8 °ûûKh4]Å…c%ØX݆ÑÐ'dCèƒq[T…:t ‹÷—õ·Ô7sO?pƒ“°äaóLJh5 –1|Ž«([¿*lŸmª¼Ã0Z SìèÒCB+rúûðnï†h3Öq²éž~e6$,yIn@i²št3Öï÷í:œ‘=y Y*—-Ìý¶æRX±]=‰âM‡Ð`óHtïÇá¶þ ŽNy&mgQ\ÿ‡øw'1ÔzkV– a‚ˈâ7÷Ò+¡:eªÍ¨méqG|½0ï—0c«ß ëÃçé9y{mþ¶`™–a0çã‘£’P9^4<ÖÙ×§‡j[ájAŪMâØ‰ë‰÷Ì5Ÿ‹ã–s?F±Éz¿ŒLÚ ]—…­Óéõ§•&ï¿ )<ÍÁIXòH-¿i5 –1¬¦CÖ—ŸEcøBoº º†ëâÏ-°p%—.ÉX‘Óˆày€£y«Ea›Ü¢Pï(@ÎJykwMÚõȯjŸØ ÒôAM¼ŽKؽûêa¼ð-ÔkÐ>*s06Y*—/cèûkZ‰Ÿæ=ìu>Ù‰‹¾$ã§^\Æ®Úûø³÷jó?ÀšJVHö=œæjì· $¶¹—\A`kÎ'X±ÕæšÅ"c«¸9÷g@F‰ÇÝŸ¾×Áh} ¿¨XæälCUC<²Ç¤‰t¼ŒfÙŸ“ðÚͨ-ÿ ÕמÎQfg ‡r3*>ŸEب©'Âäw˹:4oR¤4„d0áß‚S§DmÒÅ…Mw)K™%q+rú`u>ŠÄMÿi´Ïœ.‰ÏÉH7êwWÉW»ËßÓ¡Óhõ  µb>µIáæZl´,¶‘+•“ÐÛeƒ,•Ëw3êLö×[æ6Ú\S:%]<~«eÆÞä®1ļjÑæ…³Õ�æ{4ˆ›ýÄöR+&z°í£S°NÇyùžÁXñrV•§(_äu+_Ô=J³îÙÈ+=ˆ¯ òP¤þe\Ä|2¦àãÙ}Ùÿ ?i¡1>Á°_”ç9PTuvÙ“|,RšB2&á¹wíCãâOñH2™P8Ìÿ|ë즆pKð$Þ¤¡ÊÞ˜j÷¡¬:Æ6éÀµ³‘¢=_ÈR¹l‰Ó”µz[‚Ñ¢qµì#¨b]Gõ *]If®óÃ;øVò¬œ©)î±@W{Í}cA¥)TÃ'±ëÉìV.ù=’VFd'Tª"h»Ù݇US“ûìuµ”Yzî˼ÞK)¡Õ€XÆcEæþ9_í%€"ê4‰‹ší,6oÓâ~×t"ˆ.t¶\DÅÆRè{,¾î€éèqùNDøs? ƒ,•Ëw“ø,ÞCWxk7žú–¢õåÐ7†»K›p]³+þKüÙŒ»ö¡Ä®çiõ‡óŸ(M=oÂåù:.yÝÊ%½G’íþ8­4yÄÿ–É_°~ º/óŽÔò›Vb#*Mf j®4† ÿF\Õ즊óa ’M’2/cQ§i¯L»±2zƒ4§}€ÍõÏç/âš&øw?YZ°ûM$€#ïclÔÇ»a¹Ÿ ã¨ÿ%ZNéñ«'Ò 1i;ƒ–W¡W ²`‰ÖT󞀦MAðÁÑö3ô ´ :_$SgMf·r)ï‘ä³é¿±.TŽ)M…ø8wTkŽ uHfÃÍt_æ6Ï¥„Vb# Øþ~ü½â1«ÏN-º¼2Õ/5Q§Idô!NëÚ0›1§½Æ WŽŽw÷“¥{6‰Þ ëü^äe©¢æ5«K“`f0v:Ôþü“ñÕO‡¦‰›Í¯• &ãý¹t(±N¯TÉ$š‘×­<PÿªñŒ×;_ÿ*­ŒÃÝyßk~†u˜¹ "§è(®Ùyp[zîË¼Ãæ—”Ðj@,cüpÿÒ�KÔ†¸÷6ª7äË”¿ÔPD¦IŒØïÃh¼s§K\Ø&áíë€Å|6ÅX9w?Y‚H½è.UX†ÇVnFÕ%榔˜n¢=Q÷[ N‡f ›Ÿô ‚o,{±V­E³Í:YŸ‚o°Æ}‰¦—Ù­\‚úWéƒÉï–ÀsǧüáÚ}Ù{×at¾‡fê9Ì—m ½ä6¤„VboñQ!kS%EÔiš÷Õø¤úœ¾IL¼0¢${- Ê+PV¬ãàô‘s÷“%ˆÔ‹îR%Pv[t*mÆ$ü‰ºÝJq:4û. G„Æíþš«óÏæ'¹‚ÀæëÔ÷EËÁdRŽËëV.Eý«ôÁ»üއ>Ÿ¼#Ä“:+j?£)h­aý•Z ˆeŒ¸øÜøúÿŠˆ±±ÚÿİlÙ–:q´Á¨? ö",½™ÞPqQ§‰ä nj„7h­ü+‹¯Áéÿ[‚:*RÁ³û Y*—-þ7èЂ®£/RQéµ@#A÷<)k=IÍOz¹×V¡¶=ü¤ŠÉÄ_P•_– {­¼nå’Ô¿JJß1ð[qªŒõSn Fƒ+3Š7k ÐoGÅ…ŸÃ~w¶A”¼…‘Z~Ój@,cøß½ƒ÷qœ‰lIá…ãj9Ö«Â71«‘W}îÀbÁC&V±ÿj[èm9üé"–RWì—ñYÎHaË… KåreêE=6GÌíé–DL“§CÓÄÌægGÿpâÙüÒ¢ øì¨/Þ€œ‚íP«w (7[£ÕÈ×,`l˜Af·rIê_¥ Þåw¬5pº‰kaåU™k6yÑß7õ÷LØ/`§ø|*Ñù›­”Ðj@,k(YæÞXP¶¶Úf\¡$ ‚ï zŒG8°PÎ2ûLˆ‹ØÑðŒÿ‰Öó§ÅM¸  óºÑ÷ÊZØr²T.[„XŸ€éq¸’ÂÚïp &O"E­§iüØïþ7´šqËÁNa™Qæ^rñHiRŸ×´¨,-Fqù7Ð[žb8áSÜÊÓSÿJ ¸–ßìy¹(×_ “…b»®zc ìç»vŒÈ6¬.übhF¸2î@oó7Ø¥¡âä"´ËÊD–IüÖ3Øpu‰„_ø(ü^ zùêS�™ [.Y*—/Á“û÷©<{œM<ùZ…œ‚MÈ]¿¦~;L;ÅÍ´j+ô=É<‰™PD•ÎÚŒû ¥ '·òáV~‹Š{Ë9œþÕù<‹Ê”îà-°È^y‰ç)°›ô¿+Æ¥:©å7­Ä2†2‘eÁù3¾¬mÃÐÌæCÜd<Ãͪ-ØnìKzS´<aϬ|…-†,•ËÏC˜ GÍã$S_Ç«õ´Ùü6Õ£O•öÞËøòÔcqÓ'ÊÇEìÒ?…\3D|„óåŸ +bSÊZ©¸ö$2A$PN y†`¿û?0o Óå_¢ïaÌw»ááâÔÎ…Ìvgíß°÷)6d”&‚ ÊD–Y¼pÔ—bMNv¨ÕPå6ªü3襱N qÃ$gaË!Kå²%nºð$S_ cp[›`Ðj ÑèÑÐüo¸s‚"¸Ñúí÷!9>ˆÖÃ'Ð::ŽáÎS(”íd{ vý&¬,¬Â¥¨‚¹&óCô%±3|‹«<Äç°rª›ûÅ{5†ÆÝÈÎ*Dù‘=(æâ$~ƒö{øoíÔÝz¯ÀÖ+š¸Qê’GjùM«±Ìá9ÙDxWçuh+Ë ..Gµ¾ =ÃÑÙ²ˆøë4¸Îe²T.[ÜTW"O@¯jPV¦9ÑÔ×31D*dåíÂ×_m†¢Ï±µìz’L3å¼=1ÝX?BUûÛл2 s ßmÆþ¹ã1éG¢ûRYcq¥8Q\®°˜¦âô‰Ã$ µ rÍZ{ÅûÞcñ÷òŸÄ2Ø~�UΧؒ›‡2Ó3ôš¾çã(Ôw‹wYyH-¿i5 ˆ%ÄÜ BæÚ¢ï†å¾;ô‚XñÁ4u·ƒ™üünX›Z8QJx¯CB–ÊeKÜtá•Ð&˜Ä!PëI%nд‰üV-JMNLØ 8¤ ¯ðÊ„’üPpýL»æG&¬XŠÛ²Ï™ITÜVüNCÿ„fÏ9t8Ã]X_‰›ÓŸp#!÷<™cq¥:QLâ8Ðf¬ƒFsú†f™3Ò…Á”’]´þù´Ô†<Z&àsš±ÿ-¼‘»““O¡ÿHLÙ>á@ý—?ÀÊaÿ3vý»B¤–ß´˘IxîÝÀÃh×0…Õ‘ Gj!)Âtß‹¼,UØBËZ)‰ÓKY»CÜä `KÖ—™ÐßÛˆÙ*¨ Ï£GöãÎë¥rùânFɦˆÍõ–ªÄÓ…OÚ´X·¢FWPù *MýðZÏ$æRçy‹uZA‡ûáý¨ŒiIžˆH^Ü6$_"äßtK4¦IæXܸˆ¡! Åt“Eð<ÀѼÕâxf#·hÔ; ³òST·¼”É%3œIx{.¢X\OV¨>ÅÑ67Æ¿â<s±l°bXîÁGÈÓzÇÊ/3ÐÀáVüÃО¦˜TZ ˆeL¼Ô­bShLë;¯³WnFÕ%–¬ lÁ5ÝD{ßûлä†ÅaS Ëßzë«pÊú.ð{‡ákèír«Òœ×!!Kåò%Þ „ª0qcì ´ùÛÄy”~«9Œœéç<ðÛyˆ{ Þ?‘¾¸-³u4áðÑF<žq_nÏ1˜Ði¬Ì±¸R –Ÿ(§‹ 7øí3§Kìä©õ»«8©³'öÇûƒ¡²\1Õ›{>Š¡Ô«°¦ª I&ýçÖ)¡Õ€XƈJ“ù(ÊÏ] ÛÀ_Á¹òäW\VL™p¤Rp½Ù6m g~Ž\·O ¾=þ+†X—F[qøp+Fýtr’Q‘ï:Rd©\¶¸oCkx©t\ÅÑ£Mx•ðü7”îüô½Fë[ømZäälCÕµ§‰¹Ô…Ÿ‚\©AÑÚbh®6ÎÈ÷Æ ÈϯLøDDúâ¶“ðÜoDÓ€7ò³I{7È‹óDÑŽæš‚ä K3zmÅÖ91ca'ñ“x?2*s?9EpÂT²%”…uzOd‚¹ù1œ²_<¤4„dð àm„t„÷éØºöK˜œ<İ$×<ÿthA×ѹàöZ ¿Á{žóæØÛ×|ƒöQNê ðZ‡„,•Ë—˜'ãè«/CY¦ŠWû^Ãõ68+fO‰ÂB{Õ–Äco$/n+…wƒÌnåR –qýïûæmZÜŸIFӅΖ‹¨ØX ýoÅ×0=ÎÉ©o0£E'šR(ÜÌìÙ”Z "?<mß&Zu¯òŠÛJ- ¤$Xl2ÆbËULÓ^™¾B~ÅEXÚLæ»x䌲s!Kåò%ÖISW e°Nk·³™eÊñvÔv`4lÒ ^ê¶f'y""eq[æÝ AÍ•ÙÓ/“©W5»°)aï™ÝÊc îÆóÁä K“ß»±2ÖØD´°¹þ9¨p4nÜ7[]lêy.Ë®/v¿¥„V‚ÀüŒ°Þ:#Eë¡J8(—/¤’" ÀrøLÃ[Ö~‡c£S=ÿ�6ýÎAP®!Kå²%Î „*÷nöÉ ( ¢£v3ÖíGFƒ“U{P˜³ +²KQïHÐÍÖÛ ûËhÙ4×ÝÏ¢ê¤%Š€±þ~üýÙ‰§¨Û©M0û¥Ìnåñ ó’uô!NëÚ0îÍ0§½æ+¦ÈïÄ-ÃxB/å#^=UÈ55ô6Áú/%´ËÁ‡Aûo¸ªÙÌê¦úêcÿ…+º ¸'{¡Ðä‘Z@HЧךú¢bx«ïÁbšðè}ÔæEÁ3 Y*—-îÛл£6§IžÐ„¹×…# öàÑb’Å£èûµšŠ2¨Õ;Q^s ¿ö&®Ð»o`¯ú0N²ìf3í8*ŠJ‚É*„—¸³/ö5ÁÐEE…ç—‹0ý11N.ÇmÔämL0fRf·rÞ³ úÐþžæ´dD8Sð¹»q÷Ò1¨Y=1µI”žrスFƒ+3Ê8kâü)ÞŽŠ†'Lb*ó‚Ôò›Vƒ )`¨e¢ÍÏ$†ÚŽasËÙ ©/FB>ùI䉅¿³Œp_߃!³ëˢǫ[W8PôÉR¹lyÓŠ†ƒQó8I£Kä ¹‰Îˆ“h+ÕÀgš&Xí/“S„1¸­M0h™²£GCó¿áö%á”%ʬâœìP«E¥+¼•`¿©S‹Qšbʲ6Õ%e<|°Þº-Säô?áBõØZq%é"ÀÉÂwTÞKFˆø‡ñ¢ÃÝÞBd±{ŸUˆ½Úó¢b.>C¡·È‡ý}ÑsXÀ„ývj‰ÿª<¤–ß´d©o^¦Qzÿc# áµ¾Ay•w»Ýðùߡ׸c‚…ù‚ë{Äy} Ìõ%Õ˜ƒÌ!øÜè¾{ ÇÔrâRJ–Êe‹F‘¸×˜n¢rQøZÝ œÌ$q?“· _µ Š>ÇÖ²K‰+ÃÝè|.eu1Q¾ÜøúÿŠP ­¶?ðzdLü×Ę͠™¼Òƒøª EêÏQfèN¸pïbá; *ç%#¦zaܾV¼o«Sô5ên= )ñ¼dôsá—: þ;u»p4×"/KCÙOEh5È Rß¼L£ôþÏÏ$¼öË(ËY¬,Vbš$‡ëúÓHsn&0ò¢&Ý>\dÖ `ï\<©å@Ñ'Kå²Åý *Êu0†Œçö"/‰ßdõOàŠØ´¹ñ²ùv¬Ÿ]Ž;п·`LQ`s¯ú�…ÚG7óÁB¹NñY4à€±/±þ ÿuºV8gN§ÄuÂõTTt‡)öãÝ;D»¯j-ª Ô€Z˜¿á4î„JUm× ¸Ñž.nûN”¥µâ5ÒœÀÈÏwT¾KF°ØilÌÐUúöéLèpxàøQšb{ ¬Á&ýïŠtO—Z~ÓjA¤¾y™Féý…à{{Û5hCGåªõÅ8vé:nÝÆ#ÙkÞ$×÷ˆëúÓHsNÆÑgÜ|Vs¶áHÝ-XCE…÷ïðNvK/Y*—-1â‘‚Ùêr±ÓÔŸX¦²˜‰DUÅaÆÙv&/n:‡ÚP“jÁgiҦź%0º‚†š ÒÔ¯õ •7“/²·žA[àt‹mzÿD‡î ”,*~G€Ïqe,†E|®¢›*ï0ŒÖqz{LÞæý+¶NŸöL+Mñ¿éW øÎ‚ª’¦_‡QZZŽÒ* 1M74<˜I×l¶çL± ½Ea°{/%´d©o^¦Qzÿç2wëI±ŒJª|ì½j X$• ×÷(žë õ=¦‘.æ møGá²ÝÃ¥c{P¼OS‡ƒ¾)n”&²T.c¢bˆê/|ƒÿßÖÃhèI°èêBÙꦞ£~s²÷ÞY8{ÝØhó·6ˆø­ä|ü1rTɹ ~QZ‹SêuX‘]]Ç«€²TÀ£ 0…§�ëËÏ¢1Â…õ24ê¢PªþØGæ3Ø ³é¿±ö ö-˜ÒTˆs×A•‰¸K®³ *³d„àë…™‹ìyãÝÈ; ;Ú`Ô³‚鋈ä ©å7­Dé‹ï’Ý<LoBkö¢¤ü8.Ýý½¿á_tÒ$-\×÷˜&^ÌAo@1á þ‘^t˜t¨,Ý¥Ç`æ ¦‰,•Ë)bˆÌV÷Ί÷cÅÖ› $^燻?}¯ƒÑú~›99ÛPuíiâq?¢ÒTÊN¥ü¯Ð¡+¿Û:¨uáêø~‘JëS N7È}•)Ý XNä2wçe|¯ùÖáQQ+DNÑQ\³'¨œ¦‚‡ó,¨1KFˆãîOìt1­°û߉íÔÝz&Ž!{mEÓÝnx¸0ز:•µÈc'uY¹(R«±£ +óŽ¡%‘8B!¥IÁÒÄ?Aw½+¨Ùz€bš¤†Õ÷xç£ígèŸ.£yAW”L#.b1c8Gx§ù2ÙóÈR¹\‘$†HTR¤ÍV—"ÓJSà…¨¨tœ…:{%>ÈZ‡â\Ñ¿Ê3É…ˆç1ÀUÔh’‰K#“Ò Êù[róPfz†^Ó—¢2.Î}·¨zÊÌÔ36®A¡æ·0™=‘žìÞw o”¶.ŠH-¿i5È Rß¼L£ôþÏe ÞgÏð2z?'üÛ=+\ 4s}„×h;ú)TÌ»EÜmGAN6òªïÁ­p·ÈŒâ…ΧuHÈR¹\‘$†Hòlu)"*%[uø-¬Ï~ÁN@³õ#>jÉÛ‚ê*C¤{áU ÊÊ40ËžUŠ˜±42ùúÔ¨ïeá„õ_þ�+;ó‹ÊÊ®a—[“ôï‹™9<ƒÐcñ÷Á8Ba #ïÒœlDBØ}—Z 2ˆÔ7/Ó(½ÿsñÃm> õ‘a® b;yE›ÏüÅwömÈǾ;/9µ EÂó=šr°Qµšö—³‹–=õØgPÄøÊçuHÈR¹|‘"†ÈÓ†kßF½7 ׯI´ë¢‹®ÎßT¥–ø±$þA8¬ÐxêTŸdëCðäôÕðk¼|«L#@ÊÄÍ‚Z ­ì±©RÄŒ¥?<­gp<0¦0Úz‡[=ðw@SxZþD9ÂlºblÓÞ s£ï@Ë¥Jl,Öã7öúq#ŽnRŒ,gs\Jh5È Rß¼L£ôþÏ…ýïANÁö(WÖŽÀÔ7NJ“„Š"Îd|šEpQ²Dó‘Ì€g8¯CB–Êe ;…I=†(%×/¿š‚ "6Ìó´ë¨wšâg-“"Nk©3 êSXªò9ȂʞA)bÆÒÄT?nîùª9Ï· kªÚ {:$Á SÉš¨¾Åhª¨¡ £믔ÐjA¤¾y™FéýŸË$†?Æó%´öñ|¯ºÍ;¡½ÿh6I@ç=\ª(B±þ~àõcÓ –ûÔ‰k÷7qy®CB–ÊåMDö¼:[íLÆ’j­'¦4•ΣE³Àû%‰ÓJrʨxŠ­ªz{,iÇÿy Çy”ߥdKèÄkVy77?†“ %| £íç¡kïTŠç´·ð*ĸ)µü¦Õ ƒH}ó2Òû?—IŒØ[‚B«Ó… V¸°¯ó}n6ÈÉÂó=^™P²2ÆbÕT›ëñB¶¼œ»¿ñ^‡„,•Ë—™SvÅù³cŠr× »ÄˆÔØ j­'ÁƒîGýÁ€ú€kÝÙ9ÃßIâ´$GfŠ̾X븊£G›ðJö4ïòûšjªqÉé‚:õ¼ —¹(»ñÏz\ø{ržqþBw7¯ ?æ"µü¦Õ ƒ(}ñ]z›æS\OªïÀé›ÄÄ #J²×¢ ¼eÅ:tyeÞ€.¾ïÑ[´Ÿþí±,WamÐ+£‹çîoÜ×!!Kår%XôôÔÞCŸ74ƒY«±?…ÓcÁÓ†S»«¯õ"à,Þ»+²‘Wz猭°õ¿Órל º‡J§%92˨˜1Mãè«/C™ì±©¼ËïxuìTXSÙôÌ{Kq$¿§…Å|+6¾RB«A‘úæe¥÷.,hôP0“ð­•beñ58ýÃe<$¿«Ó"àý)!Õ.×îoâèyšNbß%kd’©ç0_¶‰[¹!Kår%úTfšð˜Å…Fì¸0<‚‹%âñ¾ÀCË/¸k{“¼!Ex‹®óè~¹› ­Å’|„šNQó:ðàcx+ â´Ò€¬2*ÖISW e°Nk“]¾ó-¿E¥¤¢RTàg ^FÊó6¡¢á eŠ¢RWœ‹‚Ñ1ÞÑ-ó­HiR0¤4ñ;Ê?„ÚVz[N ÚzȪsï? ËùÎ; mðR…s÷7qëè6•Îí[ GÐ:$÷–…,•Ë–ByÛqcÊ,û /ÆÃ(ÌÉIüBÜäV~ò-šï!L<‡±$Y_âHÙîÅÅË^¼~=};ßà°¶˜aé~‹áÖ¯‘ý5ZWÄ\f'¦I•{7ûä6Ûð.¿ßcÀ59„wxZ§ÆÚpÊîÜ2ˆÇ}Ü6“Ý{)¡Õ ƒH}ó2Òû ÁÛ Cñ:ñ»­FÞÑðŒÿ‰Öó¬(çUX·˜Ò/u⹿5ã¡cPF·ÁiD¥É|å箄õï Εˆ}¾ Û Ü=$KåòE€ø)nê¾ÃéæâLbJÓ7اû-á:l“¶³(¸VMb¨õÖ¬, $Mø´jʉ_ot‹9Þ ?Gk¢ïç™]tÝ·¡3vsênË»ûr „×h?µ• âsÈE§às?Á-ƒN܆¾¡V÷ŸcƒþóŸ8xðàLcò{úçÚÚÚл­„”&Nñ{1(ktÐOüxØô{¤û/åÅ¥Ë70€·}›„÷éØºöK˜œr+"d©$ÏÔ‹ËØU{öÞCmþ¡8$â¢$ΞÇ-1eT†&áŸÏýVD¾Ä“±Õáÿ»æ Ôu,äN™E¯ž‹(ÎVaEÖF”~½>ƒzë^’Œ)”‹¡¡¡€ÌŽÕ˜*´dvÓ”ŒÒûÁ7�ë­‹Ð2×!ýe4ËY1<E–ê=ÊœW”‰žvvW^á¤vŒ²-•lÑ ·R³ûþšˆ$ñHaøTyµhóŒÂÙj€¦¦uƒ‰)M¹jTE»„Ækß•£ DiJÓ$<÷nàáhÔ\ÏT\c(þ7Z6F6¹,½äNEèƒq[T…âX OÌ&ž¢îÀu8"Äÿÿãÿ˜óL®_¿ÿëý¯Ð;í°2»qJFéýŬ{˰t_ä¡Hý9Ê ¼•™…÷Šò¼£|K%cÓ¦M3‹mxc‹1Éâ‘üðFº{ù­:”{V¾&0~YÃ4~+Ö´cþÞM`ÄÑ£þ44Ú‹°töbDVW4yãYíªíù¸Ð&¯žDñ¦ÊÈß5ÙdHl°ô’;e”I´ë²°ÕØ”ÕÓJ“÷_О'W�±N›Ø3)¤4ev㔌Òû?—¿á4î„JUm‹Wñª©‚ÉýöºZMKK,!âW”·Ö~ÿ‘»¢<ï,K%ó‹_p§[Œ‰Ø¤Äð=ÃÕ²BYêT»àöeò´À ÇÕò¨Ä«‘W}/á8-é‘7®Ño=ƒmûÎÚ«6co³[fÃïÉܸwíF£‰Ÿ:M£¢ÒY„ú§äÀdò;çC俬æ$%z℟6IuÊÄ ¥)ƒ°›§d”Þÿ¹0«Ô'X±ÕW@L+Mñ¿r§'„ç~½Ú ,Â#ÒýðZížÄ60˘¹©Ñy‰iâœ%b©dDŸ6Ñ)Óü¤$H[¾¾úð ±]×ìÄÆ@p¿wíQÙÇÒˆðÆ‚²µ%Ð6Ûà Õž|oÐc<’Rí©Ô7®Qxs û÷[" Ù ^+t…Y|¤ç:¹ïušDü¯Ðù“ã ûEyž³EU×açÂõ;qÂO›˜ ‘ Rš2»yJFéýŸ‹€1›ùëBé™ÒTˆs×A%{úfi\0fPå`‡z r³rPb|´$QðÓ$s<Â,Keôi2-@¼x$Í÷h°¾MLÁð¿DË)=~õDjד¶ó8hyz•9bŸªˆ_5™Ó³4i û ª¿ÀÖŠLÄ5úà4íÅú¼]¨b¥jö£(G”—Ù¥¨wpâþÆmr'Þë4--˜¡KÊS&)M„-¼JFéýÍ8Ü—ñ½ægX‡Ù†¯9EGqÍ.wüsÁ8ªK,†fÚâÚˆ«šr”iÌ º`0W…P©6£¶¥w&F@Éu¨Òï1MòÆ3$ıT2¦O›è”)QæÆ#%MÙÙ2…àü_Ö¶ahæûð<Ãͪ-Ønì“m?wÛ è*Ë VïDywüÄ,ò›Ü‰÷:MÄBÒ”AØâ«d”ÞÿY|xéx)þ?‹_±¢é×…ªÂË€±þ~üÝ/òÅ9ØÆép´ûá4—ø1M6Ý Xdi’7ža¹1}ÚD§LË/õ¥X8¥WC]”‹,ñyPåŸAWôioÆ XÜùP\r'îê4óAJS!¥‰&àn2àçÞ7A¥bÅ'ÐÚÞ‡þÄÍñ/aúc ¢ˆ ë?7Qµ!?A…GÀDo¶}t Öi%Ë÷ ƊϳªœNšbtkôÍçÆý÷:M±ÄÞÃÕyZvªR\Žj}zX’Ùà WƒÛÚƒVF†æg8AG<” P*»$Ãr‡”¦ ²t”Ž%�ó¿¿ü Š?]‡õeWáà®0S|7,UÞé$êML`¸Ç]íY4÷‰[~¦4:]Û€øˆ¹(Àým¼Õi"ˆ%‚ï5\oçJJa°úä2´É‹;»¦BVÞ.|ýÕ&l(ú[Ë.q xNîÄPjI†QX-á ½ZÎÐ.>ƒ°A$†¸y¿QÃ?»`µZC­ Æ8jq&§ðø‡àhûzZƒ/†IaŠ‹2Üß–RAf‚ˆ L^Éþl»o¡Fs328ØÕÀgš&Xí/S‹ßZ4òÅâ²:MÛT PûÃâw÷[µ(591a7à€Œq^AxNî$Â}I?» (ÏËžk4T‹ý ½k9C»ø "·ÒÄ|}B§ Þ—xæòŠ"†¶öÃfíFßH2.1‚ÝúA‰™S%NL“ðê?;¸k]¬º'ªOQÝò’§˜ðïþ¦8Ÿý�d©$@x¶£ŸŠòJ…¬Ü-P«·£ G|Î媋ä6A.;ç4±Ÿ…ߡս|ÜbiáW”Àè î‚JS?¼Ö3(”9£`X e5¬Éß7ÞK2L>…þ£5(¬2D%B2ÁÜÞGû:Rš– ÁLj«ŠŽáRÝ ”où‡¸yÞ„ï®ü€vTÌ€ì]I»`®ÑávgøIˆØÕ£ü3 š­ö™ºÄbˆuÒdE×oP¶æÓc°üxcÙ‹µj-šm®Et ¾Án÷Qö¼ÄáÉýwŸ}²T‹gÊaÀFÕhÚ_Ξ.ù‡ÐS_}rÔEr߆¶þ \aq¥¬½l>†k0ÎÔqšã÷¢Ç,aÆž@›¿ z{p ò[5ÈùøcäL’ ü–7D9ÉE=ÎK2NÂvÏ(ij˜ôOrzo3 )MˆW°”梼ù/ñùÿõ›þuã?aÙ³ š;¿£/ üïAs¸1Á#âxEÚÂZÖÔ¶Ò‰Æâ•¦˜±5«‘»ïú® Á6ÔPßm¥ìyÊ…sŸ}²T)0i×ã£9Ù>Å%+¬.’ðþÞeêÔÉÛ û˹§H“3ζ³sSAÔéÚP“JQ…›SƒeíÀOßë`´¾…ߦENÎ6T]{ÊÁI7ïuöD¸.É0¡öèÂf$p»í0éïÑK„”¦eSr ‚›*fÝÈÊ‚ÚÔS­)lB{Íù…¿ 7´×ðÔ>±Äö²U; °±Ÿ]v4k´hŽ*TH$;iúÆg‘ÙóÜIìc§U¨mö™ Œ8~AU~Ù²OM«L”à³O–Jbq^+t›wB{ÿÑì {ç=\ª(B±þ~àõcÓ –ãÔ)SÏQ¿9 Ù{ï,Ÿ“&O®=Œ.VìÃs³9ÁRé„•x®³ÇˆÊžgüöANÜ;Ïó1NEx Ä4rLàu÷3Éæ')Mˆ1Øõ_ ª}(¤4}„šN7†Øýý%QÀ\Å…c%ØX݆ÑÐ'æçžÙÝâôbÒkgb˜ýì#*a;éDcQLáÿ}úýÑ,ü…îî$\ |vÔo@NÁv¨Õ;P”ËܦV#_ó£Ëe‘_rðZ™A–Jbñ¯L(YcÃÕT›ëñ‚‹B â\´þ ŽLŸ°ÓŠqÓ]w;ø·ýnX›Z`ód`ó7΋÷<Þëì…eÏ[±*¸.³Ú_Ù»a|!A f¬}c9Ž£¦ŽY£Åts0wpÎqßÀ^õaœdIdfÚqT•ÝI…—¸³/ö5Á½È•”¦eƒ(Lœfªm…g¨«6‰Ñï3˜k>GŽ*ç~Œb“+ôþ…ˆ­4 ¯íèœ,c¨TÙtÒ´(üp›C}äDØäÛɃ(Ú|>pÊ ¸›°oC>öÝy9ïB%øœè¼¦Eei1ŠË¿Þò4õˆˆÅ$<÷›ðè}Ô“ÍM¦ ‘Ùó®¡ÕîácA#K%‘oÑ~úG´„+Ü1ZR'îKÐÚªÊAÁ–<¬/3¡¿·;Ÿªð<zÒí{æþå:gNqa<·yù•h°y80܈òÑï%y8~x]vXÛïà;áÑý";\H>ª ¾CKß»Ð3<Ÿ¸7Û¿ÿÞÈ=xÂìô†ètùÄ×£è{ØóÝnx”°gúâéBÔ­ûM½˜"¥‰HŽIxífÔ–…êþdz~Ú‰à‚yo)Žœ ÛЋídÅvl9þ çY¶Yú·ÝÉdå#‚°˜¦=¡¢hp¦¾ñ”&e(�|/–LlœÔišÍž·ªÀ±¹Y9(1>çÜ¥’HQiíéµá•QiõÂaíÆóAÊ@æ5R„Mõˆ}Co}NYß~ï0|0†¦•µ«¯ u[s±ÓÔ?×û„l?×ASUuATÙ2eBΞ7Ðcñ÷ÄÅ ¢µrª›ûáÆð¸ÙY…(?²ÅšGàÞgh¸ÏÓ9KJÓ²d¡S¢DpÁTœ‹‚Ñz±í7¡ojî;‡°aÃ!Ü!¥iLbøñc<OiοÀì„Oƒš+!+jÐ’zU³ ›¸¨Ó4meތږޙ1‚¯æýdD$K%‘ œ)­Ä™™¼Ò£8gl…­ÿ œ–ó¸&cL¨àiÁ·Ç f[mÅáíõ{Ð)S2ÁÓ†S»«Ð {ÖIŒØ[rÛÜéÕíIxû:`1ßÏŒëâ‚0%÷ |¤y2Z²Ä?£¢0«Ê,òŸ41¥®¸}b?„¡T®Y‹bc/üÜ(u àyó£á¨gPÚx;Rš–% %¢ð âqg_”E)N‰˜pU—Xðk¸PŽ2(D8)ÔÊqêc±âƒ;µèòÊmGΞ7 /ÉRI¤�oJ«ð]ç5Ðýr7 ,ZªyÇb‚EÁëÀƒŽ g‡óæ¬W…Á¦ÛšoÐ>ÊåYO†˜uÈj|R}Nß$&^Q’½å(+Öq ¿EüoÑsójO7£ob* 4Úwm<Ôúb4hýó?h©- %šàÇ}p!2oGJS,¤ÒV¥¨l.n<ÜÖ&´L±©ƒ±ÕŽÁ”-¶Rœ¹qßlÅû¨®L=oÂe[b©$ˆùâ”hà‹sd:âqܹӑY ]ŽÛ¨ÉÛÈR"`¢·Û>:ëôýó=ƒ±â3ä¬*—ÿ¤‰,•D*𨴠^¼~Í Á3X»?`½û3LÿÄpë×ÈÎþ­Ã™4Nà•é+äWüW˜1Llæ»xäœîçr…•ËloÐZù!V_ƒÓÿ7Ge6øGh3Ö‰{: –Gx1‹7NX¢ Õ§8ÚæÆ¸óWœg{Ø+†y¸Ü·PSs)r^\=‰âM‡$‹·#¥)Rh«RT6ޡǰ Ùìo³ Ï,ûÙd—ñ"¡:=ñâ”(^&EÚ;%JÕM,Ž🛨ÚOY c"ŽYLeUœÇ›ê8Ù8O`¸Ç]íY4÷•¦C‡ k{/3d©$RA!J«ßªCYÀàûw™Žwš„§é ]‰ÚÄÊ«ê‡Ov\æ¾|µ­ô¶œ@þtÁ]^Ü—Å'%V)UÞ1´ðpÒÝx…¿½o1è«äB7ddl�}E+ ïa¯;MW §sÊÒ ´U)*›O½¨ÇfÕ(¨½‡¾éXx§¹ûÓQ§ÂïÄ-Ã$– ÂsWÂÇÈÔ�MñvT4<Á Ü²SñHá&O`Bú4® Ü!ŽÙ ð¯È$¶^ ú8¯°Sl­Á‚ÎÃò+LÈRI¤�oJ«ï®–}rÉ‹jªOPiì‚;ãr!¾\—3VuF‘ ½–‹ÙD9«‘wTÜÏŒÿ‰Öó§¡Ñ\…5£'‚1`)ˇZ{6×hp¬DÅ{°Çˆ}\•¤Ýw3êLö#q ^hM²BűS…”¦XH ­JQÙ|Ҧź%s E†_#uX¡µnܽt jfýH8-°ý}ƒQ‹˜€ ûìTBì÷ˆ cÊnbL¨ƒáŸ]a @:Œ'pÔâ”èùYjðöàîËT%bmäD¥ºå%÷”,•D ¸-¨®2D&½ªAY™f”ÖÀ¼¾úưþˆíºf'6Üã̸kÊp¿D¹.g².É(ü^ ò˜–žÕÈÜVp_Ž€÷e…'øŠgtÉÚ½Da#¤4ÅBmU’ÊæÔoÛ"nY:Q†ãaæä ,Õ“&ÿ0^t˜ Û[ˆ¬ÀCUˆ½Úó8©iJPirá—: þ#·ŽæZäeiø]àqaLÙM,Îi•ðê?;À«È\eAXJï½X«Ö¢Ùæ eÏcqÝ0îãÁý„,•D ÄUZ+¡•#VÖÿ-§ôø5J៴ÇA˫ЫL#o²>I… ôÁøå)´…=ãÌkàæQäo7Â)û )<Á—» ý=tMï¹­Ï_Hæ:JJS,$ÐV¥©l.ˆºÍSÜÔ}‡ÓÍ/ÄíSš¾Á>Ýo‰ÇEÅbªÆíkÅ¿¿ 9E_£îÖ“ehïGBGÆ /¦i 6é—ϯzÉà‡ëúœKÉM,ÖI“]¿]@ÙšOÅMÈûÐûˆYd®² ^X5‚Îð’=,•D ÄTZŸÂR•/Òêiõö¿àŸŒ¿Þf>ù‘(×åLVW‘<‹ÿýB¯ˆØ°˜¦¯Y’‘¬ÆseÞMЦÂ|ùG1ò~®Ê'¥ë()M±ˆ§­&UàN‚ÊæL`?|;ïß\ÜÃ,*c^lw/áXé¢fB‡ÃŸœÒtCcÀƒ®ð1²Âöœ]'ô"ÆÑûþoØø¿×Â`é„cQÅãV­Fî¾èK)™ÈÒ…·(‘ü §± µíoÂæéF¿ *¿ FkÇ!K%‘ñ”VU¡<î‘qc¬Â[¦“Å“ëiLV#*J­šý¨4>C ·¡¸WˆT$'0üûO¨5»B¯‰øLÁçêÄ5ía”ªw¢¼º–ž· î»ÒÂ|eÀu””¦X´UŸ¸iƒQíEX:{1’Ì¢)EeóŒlqÃõ¢&8KËQZeIÐ=ïo¼y‡áé1ÒèÑÐüoù}™—‚ï ìm× ­ÜÒJ-Œ­6¸ÂbEæG\\oüã³H‹ä¼Šú²G5P|vÔo@NÁv¨Õ,£f¶Ø¿ÕÈ×<¨ì‹Y*‰p߆Öð La[ÇU=Ú„Wr(­qƒTâB¸{Z“-ƒÉ˜\Ïp²š¡f”¯\•åÍ ý*3Ø´ÂP± Y+² 6É­4IQß0¸qïÚ\9Í|Tv‚¯L¸Ž’Ò/WË£6N«“K.Eeó ì@Z΄³çùái«E£¬\©ÕØQƒ•ܤÎ\jÌžÖ”©QzÌ *òŽ‹$[4ša>‚ß?×êÏÍÂ#ʨ"øœè¼¦Eei1ŠË¿ÞòÃ\œ„¥’H˜1Mãè«/K=Žw1p™D\ Þ½›c˜0éGzÄ€¸'ª/ÅZõOx¨)®,©UPýå!·ÒïNl2fœ…wù¨ð_ˆA$¥) ÊÖ–@Û<kÕgÿã‘ÄS}»%¨lžVͲæ=Á-ƒNTæNCß n´Ýc‰/JSÏ`ظ…šßÂ6¢ íiÀî} ¨Ç¢hXà¿–ó8¢Þ–~ñ7Ó̳h„7.NñàaÓÇ•â{7ðp4êÞq£“¥’HX'M]-0”mÀ:­m®(ݸïÂ`qDžÔ»ÿƒæêLÇX‰Š’»šÝÕ0:âl]ýoñ»þ{˜ÝéêÕ8<¶&ÔU}‰Rõ'!e©†VGÈ g~Ù 7âú'gfÁåcE%ÎÃúgÔ¡<o'òQá ¾X·NO”먴uÞHiŠßzÛà‘$•ê[ŠÊæiØaµT²6¢ôë=(ØðÔ[÷ÂÐó.± ÁäSè?úbN:ôˆÔ™ÂFÞÉc¡Tu3ðÃç ÂF\©Ù†µê“¸:³€üŒ ›ÏÅÂ#¼»wðnI%K%‘q\ÒU¹‡p³O†ÙÏE>ã‰A&1Ô|�+WüåÍ…~‚e_k5 ¢`Ø·R˜Ò¦4M2¸ÖU£l¯WÛxRšäÍ,¸0ï1àŠ2ºïð´Nµ;á”»{qOÂ’à+nH‹tuÞHiŠàü_Ö¶ahF�ð<Ãͪ-ØnìKlà}¯áz;Wx ƒ=xÔ—`Ö²t l–ör[T…:t ‹J«Pj‚› –×K{)ŒÀ¦+Æ6í° é´\ªÄÆb=~c¯7âèá&:uZ‹Ý ð àm`Ìßæ=47ÓÚûvTåÐISlxWJ˜R|åç®ÌZ*MWp®¼€E˜,•D ¸oCgì{vX{J­/1ƒØÑ?¼˜Ä<)ˆẽÚ` *)ÊÒTœÅe7Ò®4Í"øÜè¾k@UÙ>Ôœ?ɇ{žœ™ƒðí§ö£²¡^ÙEŒÂ|e 89)M1 úï®™v¯+Ê Ô2RåŸAW´[L<ØÍÓÜDg؃ÇÚ£úøLÓ«ýå Aºö¤ ÚuYØjì^gZiòþ šÂÓ‰ml'L%LXÇØ\†7ÕÔ¿ §äa›ã¨ºt=L�07ƒr”iÄ \B›c†ý¨í ·lMÂûôGl]™Ëç";RŒ{: WЧ ÝÓµ_Âä”{®‘¥’H–•Íÿnk Z,s‚¡8‰AdÃÿ¶[çE%eÔŸN+K´:†DÉ%’¶˜¦ÆàîºìÙóDùÓè•ÆÌ‚IÃâÁøJ %x»Ñpètm/àqýÿ‹Åï²Ã‚~جÝè ı)€ Ä ’Òá=\ס­,ƒº¸Õú&ôx¼‰§»øN7q~‡Öù’&0íýÓ°€ŒÂ¦-ÂÆ@±I¦4å|ˆÜœÕI#Na´ý<tíý¹MF+¡¢™ÇÍà‹s aø!jó?FÑÁcâó#*_mFŽJ…ìâ8(7| ¤÷Ì⇧]‡Ý•WÐã•{ƒG–J"„wè1ìB6[óváë¯6aCÑçØZv‰ƒg›#˜’b½…ºª¯°WsméVš<a±ÎçÝÂNcÑ%{vQQiÊtfÁ¤à1V° ûª¢c¸Twå[þV7ê»+? „…p°ýjö®ÄC7ä$ÅÉIiJ‚¤Òβ€Öú'p…ß<±½l>†kàg—ã4ÇïÅOAžÎÄÿ ?i¡1>Á°ßmÎU]‡=Ñë C°7_‡ñš.Ÿøz}›`¾Û )I ÿXnÿ¹‰ª ùI Þ^üZ¯AEi1ÔÅ{QséúhéÆ=}0  mƺÅ%qI+¬/}Y\fK[>N#¶©>@¡öQ ¤ßªE©É‰ »u_V°ø¢nÜ5EYy-Î×|Ÿ÷¼À¬ñp+>3ñ2 ò�— ´^ÁRšŒ•þ@ý¦@ÝøOXöì‚æÎïècëŸã4‡ Ý“t…´„AJS,¤H;+nTí/çZ&fœmgI½ÅÉ=Ô†šüSqÝáÒ·€HQKe­•;PÝÜŸ0†ÆÝÈÎ*Dù‘=(VBÀ7÷ˆ›÷8±5ª¼Ó)´ ·6㾇§¹¤sÜ¥Að<ÀѼÕbŸ²‘[´êÈYù)ª[^&fÐI³î˜ð¾Ä3¥ºwdÀRIÄ'½pEÉL‚¡àš×¯õŒ¸Ñ¤ñŸÁ÷ ]uºôdÏ ?½Rƒ¢µÅÐ\Í�×x¡ùù•|œÆ2ƒpƒšºÛp0ã ß kS l¸L Å\ª ‚Aæu”ÅêmµÃTk‚kæf¡½æ<ÿ1©ñŠ“JƒHJS $I;»P"ˆ©ç¨ßœ…ì½wâž4¥o‘ V�‹‹*n@Ÿø^a¨•kÖ¢˜Â…O~"ÄÍû:þÙ6ù»Ða<£gÂ÷^|„óå,=lô½ÎD–%%"͸§§VUái´Ïœ.1å¤õ»«`y#G—’{Gú-•Ä<Œ=6[°–¡ˆßªAÎÇ#G%ã)K¸Ðö3ô¬Ö¢þ2š­üºš¦Ë=/l?3i;‹â9Ù…ÅMuÕNš‚²H¥ÊAÁ–<¬/3¡¿·;E9¤*<¹o— ´Æ`תö!6áD¥é#ÔtºÅuæ�v ¦«¸p¬«ÛÀ½Ì@ ")M±"í삉 þ€ãÑ£ %$i[@$¨¥Â”¾]´þù´ÔBÈ,6ŸÓŒýû©NSêĉ­aÇçŸHpsÌ„á&¬,¬Â¥(€Éü}Ó)Æ=°{ºu6‰Ë p…Ü'ñ~d4ƒ ÞRrïH¿¥’˜~w~ú^£õ-ü6-rr¶¡êÚSy2‹ ¯ÑvôS¨˜‹|î¨ÕÛQ“\¡û%Æ”ã'ì¨íÀhØ×¼6ÔmÍæà4–ÉÇ"l (ucè­¯Â)ë»ÀŽ”Ì©h¸L %Î9qßv¨¶ž¡T¬Ú'ÁûLÜ'~.î7³ñqîÇ(6ÉäƒHiŠËâ‘v6I¤H‘¶DŠZ*aµžTŸâh›ãÎ_qžY㬜U±N<¬èúíÊÖ| ­-‘´õÃiÜms6Ø"reYâ)Æ=ˆóÎv›·iq&ÙB:[.¢bc)ô¿=_wÀtôx¼%äÞÁ[¶´åKùþh8J^É—ò}ÊaÀFÕhÚ_Ξ.ù‡ÐS_}‰º_jƒè¨ÝŒõEûQ#®÷'«ö 0gVd—¢>^áÝ "xZðíñ_ƒ3£­8|¸£~:5eĤòš@K\WìfÔ–…êûËÙ°‚”¦t!E"F KÎtö¼:[íLy2IUKETê¼o1èå}'¤DÄÍ{ÌØšÕÈÝw}‰<âýú'4{ΡÃ~¯_¡×ôSFëy()Æ=Là•i7VÎé_tû�›ëŸ‹Kt&XBÄ56Êãž7i×㣭Æ0å?Hx¡{áý;¼Ë´Jøé×h*Ê VïDyÍ%üÚ7Ê9çÍXϲÓE?Ck¾A»ìÙýDR5ȲBJSº`‰ \ÃsÒ…»l '‚˜Íž'Nx棻cŠr× »Äˆ)mÞ^KeYÀN<~„ñYd7÷ 7°P'FÈ¿{Î}fbšb#Ÿ§™Ñ‡8­kÃ@xÿæ´×4f{!œ¥|¼Vè6ï„öþ£™Sgkç=\ª(B±þ~àõcÓ Îè©q;Æ\>j aF¥¯ˆ={†ÌwñÈÉ’ÓK¿ƒÓkàë‘ÙÓaö¼Úÿ «Ýr<")Méb¡tá $‚˜zQͪPP{}Ó á=œæjìOIH+¼–Ê2Að9ñ0Ek¢ð¦ ‡6âqØ}¶çœX.M¿~ß�¬·.BËe𷨤øys!#÷B8Kù.¼2¡de,£SdSm®Ç‹Œé 2Çíp]Kkž¦38t%*D@Üo™/Û¸4³ç‡Áûº‚l¬/>úæPù›‰^ÜÜ—2¯N9‘îVšX8]ø8ÜÖÍ›":{Þ4ᮋCáµT–RYcÝkñyôósrÂ,}¶¡x(`³‘Wz_ä¡Hý9Ê Ýò£™#–Jb¸Kùþí§Dû@Xbµ ŸDË·Ãw-­xîÕb $«âÍØDJ“¤¼oÇQuzg<±¼èÑo¦•X_шçstèʰ'…Cº[iB’táÔoÛ" AfEbxá0FaNÊdB…¥» Ú3¨»õLÜL²×V4Qq[‰H§5Ñ ë©*¾Ðkb–<c§¨¬AÛ5(ÎSq¬4U0¹ßÁ^W+ŽY&ëg™&–JbxKùîíEOÿ{Dnµ'ðºûÙü±ÈiEÞ¸¾ki‰J“ùª.]sÏkÄUM9Ê4fØù3²ûÆ ÂìwÍâ˜ÝB§Kܰص‡M0+d_7i;‡Ò™ÄWâžÔy Åì¤xý1´‡f±(cJSxNIiJ’¤ oúðSÜÔ}‡ÓÍ/DQÍ”¦o°O÷›ü‹vÀ½ð¨r>Å–Ü<”™ž¡×ô%²W|€B}7h;ž:©[øWQ¶~ÕÜÅUlª¼Ã0ò\sDÞæý+f‚¿§•&ø_²/Í…ÝKB"2`©$æ·”ïîØ«>Œ“ÌMw¦GEQIpm^⎨PoØ×wÆ:/n§ÌГfx¬¥5Cœ’OQ÷Å9Y20._ò{­•;PÝÜ/î Æð¸ÙY…(?²Å gV–ˆbÂñ»|(Žov[\¡çR|>¬:|™Â‰(­¶iƒ¼pToBj•­Õ¨ïžˆ}ù¬L ùŸÁ°ëGØù;WRX™P€õågѾ¸š.C£.B…YãZ`¡›5‹(Tm:äo¬ƒ=°qfJS!>Î]ªEFîóB–J"Ïÿ…Ã5Qx—8ÿï <´ü‚»¶7òŒ·x¯‹s °C­†:¢•`¿©S²(M"þ<lú=ª´G¦<xÞÛøáþå"LD&òqýç&ª6ä“Ñk!&mÐ7 O¼ÂP *׬E±±~¡Æâïù/1öšÍQßöÍúÝÈÇvå¶Ì?HÄV•WÜ·.RšÒ…§ ×¾ -¾Ó$Yo"æ5"™zÞ„ËI»-¼Ã3»{N:báµÝQ}ã㇧õ Ž,KSm=íø‡; )<Íÿäâžy²�õ 'Xc‰-n-8uúA”+‰¨LéNÀâ!e)6ãpw^Æ÷šŸaÏBäÅ5û»yç¢\pµè’¥’H…ÑVT~ò-šï!L<‡±$Y_âHÙnYA`¸Ïyó› ‚øÄiRåF——‡ ‘°¾qó Ú¥AëŸÿAKmaÈP8ŸÓŒýûoá ÷ϫښáµP}puÞ í£Ì¸kZ´ü&¥)]HQo"î5› k*[‚.\ ã‚yo)Žœ w9ÐàdÅvlÖ?·ëpß9„ áŽ;:“Qˆ©~ÜÜóQŒtÖbª¨KêLÂs« Û´QÖÄI 5_JªÆ’àý¸ÍÇ#¢²9â@›±Nœ§¡oh†ÕÍoâ6ï¸,•D Ì*­¢œk=‚5+K''©'?Z$œÛ Bña%#¢‹“w¡ÃxG-ÎÌ?? À•ü(Qœ­Â Õ§8ÚæÆ¸óWœg{‡†¨Œ„<Ãú„'ò‘RšÒ…ûT”ë`œh0žÛ‹¼üÊÄëM¸-¨®2cã… ä­ü~]/¬5Ù0˜ÔÃá‚©8;¢]Ķ߄¾©”&Á SÉ–€ží‹¹ù1œ²§] 0‹Y9ÖÄ%ÛÛ °÷¿…íêA䪯±D™à’Gð<ÀѼÕ1Ë-ÚõŽä¬üÕ-/iÑ]²T)0õâ2vÕÞÇŸ½÷P›ÿAÈ (E™E"…ñSrâ{Xk¿ÆÿÈàAÀ ŠÓ$üúÏÀò†? ÎÏØM#>_Þ·¬ó—a&íhnq‡^$)MéÂ÷®·‘ൡnk.všú«Ô¸Æ8¼*ó>@VÁNìÕH‘¹i;ûÄíA4~ø|‰N&¸;Ñdß}X,|x;!*JÆÓÐ\mÄeA•½ß֜ǽ„FÊ—<>8 EPžFûÌé;yêFýî*Zt„,•D „tWåÕ¢Í3 g«Í÷hc­ 3\ίjPV¦Y†b»á°zr‘«@¦bšæÂ ŠuÒdE×oP¶æShmÁä<ÁŸÒ4GŒzqßÁUáâ ^nFC ÿ³žTÁv5å[QšB¡uRš2ˆàiÃ)qãÕГ`l„ç>4å%ÈU­F^¥)PÓÉï¾MÅAhî.^SŽ‹ßŠSe×àLH)sã¾ÙŠ÷Qo]\Œ‹à¢8wÇY¨Ù&tåNþ3šÄB­¼LpòÃR½oÅÖ™d�ÓLÀe<³I¼åæÔ‰,•&EK%±~xßÂËCâ¸Åv+Å ¸\ë1MìïòóЈÓ´¹ûn o&+&?ð3v ?<mµÈc ¨²rQ¤VcGAVæCKàÄw¼pÔ—Œ.sŸé–5)MœÐx›`Ð2 w;s P}‚J«ƒú¸aí<ƒ})ÜôÀƒuµ<vf6V‡¤òj1.˜ÔY1>¿˜+b.¢ð7Cé—…ÈZ±jݯpüçNUŸG“¹ ¦3yÍ‹ò2ÁÉÏ$¼¶³Ø¼M‹û]³>ñ-Q±±úß‹¯;`:zœ›S'6ïø‚,•Ä"ñöÂþ2zs&c]¤˜ÅvŸÂR•/S±]1MüÈ vÒô#ŒÏ"³çeºøp2p%¿§žÁ°q 5¿…ÉlQž÷4`÷>¸W5£ü{`xÜ OL£�ÿÛ_aø…”&þ˜q3P!+o¾þj6}Ž­e—ГhÌûTžÍìãݰÜOÁÒÉ‚µ×å¢\-LàŠíºê0°ŸïÚ12ïqÁ\£Á•ðÏ› )ÞŽŠ†'IÆXs ZÌTë¿„¡ë¯™g £t0á˜&¥e‚“–µp7VÎâµ°¹þybn¶i†õ‡ÈRI¤�ou‘âÅ4© åÉæ€¹Æó•• /0 ¿o�V…$?âiì‚¥d¾˜)\<Cx"a #ïøtí÷[Oc³¸gžw]N±ÿ¤4¥ ÁiÄ6Õ(Ô>°_rªÙNLØ 8`ºZaøß0ÿ÷Ïi¨Y!n¤[Îáô¯îÈ~ˆÊ”îà-xB/çÇ‹þ¾Á¨ï!ˆßïv* µ0ÿ0‹Ù˜¢7šâ÷?ų„R§NbÄÞPhÍ.Q˜„·¯ó}Ø<JØÀÊÄèCœÖµa ÜR9§½æÆýŒ«E—,•D*ˆJ Wu‘Ü·¡5<˜‰ ´Ž«8z´ ¯dsœ„çÞ ´‹?…1õæË6Œ…^f®”&…%?âJ~ #¢â]ŒmÚ;a¦;Ðr©‹õø½~܈£‡›¸”åÁ}vze3)MibҦź%3{ðföÃk=#n(<ÖOWÍŠ@ÊÿÑx#…”.üRgÁI'͵ÈËÒP& ˜è›,¬~V5>©¾§o/Œ(É^‹‚ò ”븬YÁâÆØŸykíb!K¥tdÂRIÌou‘bÆ4£¯¾ erdó ôB`ó~N“Éíšým>P^ò#~ÆN$yMä3«©v þ†Wá_îož?<DÜÿºŸ„”¦t1öÚümA—¿Uƒœ?FŽ*ñT¥é«Y!EÊx1Mk°Iÿ»,Ö."æû~(XS&T¨se1KôñwXRBé°yÇ d©$R&,&N{–Î^ŒÈuª뤩«†² X§µ¥hÔZ,¢Òd>ŠòsWÂ\ã¯à\yò+.Ã6˜y‹%?2Hyɸ’ßÌÐÚ~ºöþ0cx¬ÆI¢–hëÏ”éoÃêpÆè·Øž™ »A1MÂüŽ;ðÓ÷:­oá·i‘“³ Uמ&|Dœ¶š’ tá†Æ€3ÁòÁf{î¡4½Ü0Žõ‡PÛê@oË äO+ì¾^˜÷å2}6‘<|)Md©$R!V’¢ÕÈ«–¢ÔÆ"ˆÓ¤Ê=„›}r™Cå("†cÞ§?bëÚ/arf~^±1áå%?âgìD˜Róu¯YRðB’ÿ[ñ;\„¦¢,ÊÅ—µ(Ê]OÙó¸DŠJâéªY!IÊ¿ñnd¡ {„ÜÌúw‹£àÿ­çYV°«°&”àjQ‹_ý#K%±x˜ÒZ¶¶Úf\¡˜2Á÷=Æ#2·½ ±;êàñÙõÃÓ®ÃîÊ+‰'š’¾d²’ñ5vRx!qθÆ›¤4ñ‡d•ÄÓQ³b‰ \–ŒãÕ­+ · Á urœr•wøZÔæÂUÿÈRI¤€ßzÛ.鑤H„IøýïS+"9Sð>{†—Ñ]þBww2{ éà]Fò Wc'‰0߇0t œZƒ ¿v»C^PlN/~–Гž.Ü·PSs)ÌçXlWO¢xÓ!4È\I<ˆ°´ P.1ŸÝw/á˜úC¨V”&‘rœHRš’,•Äâœ?ãËÚ6 ÍljÄujänVmÁö³ÎJŠ¥C$‡Å4†úȉÀ†p¦<ˆ¢Íçni‚» û6äcß—3RšWc'‰’ÌøЦù<FÙVƒÔGŠó–žôt·’øAë;H ‹ÙêDƒö ên±â»ìµMJ²(sÏF^tÀ¤Û‡‚,•8é× `ï\<©Å Rš2ï®úG–J"%‚u²ÖL§/ÊE–ø|«òÏ k4óJŠ¥C¤GTšL{S°=ÆIè˜úÆIiR|Ò½¼èÑo…Jõ!ÔÇ~„©µ#oßÙÓ…o¡^¿köÝIIù£'=]Ĭ$nGsMŒ•Ä%„Y$6�UΧؒ›‡2Ó3ôš¾µ{qÑwƒ£¤± e}Æ]Á CÎ6©»«;C&¼‡w´iˤ4%Y*‰TÞÃÕyÚÊ2¨‹ËQ­oBÏp´23HR:Dr&1üø1žsôò,#yþ)Ø i´«òPÕêŽ97I°öª¡±¾ ý&yø~š”L¼˜¦¬íÐÛFCoZ�o/ì/£3áLàu÷³¨Jà2¨Ç¢¦³žp þË`e .üÏ`Øõ#ì´¯Hÿ(\¶{¸tlŠ÷é`êp`Ð7•œÒä…Î4u·ƒ›=¿Ö¦*n›ü-j‘ðÕ?²T) E%)‘ tˆ<dvÌx–‘$¿—ÌÈ‘³ÍgÜÇ^Àß¶°UÿT\©Ý­tán‚F/¬V kÝxþz¾D7¼îØ«>Œ“Ó>ËvE%A!¾èêènÜ7[ñ>ê3SÏ›p9Q…NÔã=­gp<°p°"ª'p¸Õÿp4…§©¸­¤0¿þ^t˜t¨,Ý¥Ç`NÈ=¥ß!n�sP°%ëËLèïmÄNqC«*<Ê Ÿ´è& Y*‰E"Y%©`nç©•IA×Wæ²k¬¦[æÆŒý=^á¹o Þû§$F…N€ESšÂ)1Ý­táÅÈû¹º¬ßªCóñ½žñæOûvG´ì7õbjÑJS¼Â´ªP-¨ÐÛæcª7÷|U¬kTµ!QÕ‹H’@®Ë fσ]_„MlTc譯©Àfo Ã×¢âM%ˆ=×<Ã{ÿ”D&,•Ä<ð–@‰·“¯�Ãi,C~Åy4ÎŒS#®jvaSÄïÌhÊИñ,ƒH~/#†š±ÿPë<ûOq'Ô©ÁŽ:…îVºð=ÃÕ²XJ…ØTŸ ÒصpÚÒánt>OGt æ ®ÌWÖ )ÞŽŠ†'Läi ±Ü‚ Ãõ°k˜`n~ 'ùüKƒ®u‚§ßÿ5¨¶âðaQ ø=èä´::ð¾¨ñÞ?%‘ K%1¼%Pâîä‹Á ¶ºÆ‡ó¾Uë*ÐìÉü“ɳ â¹o ¾ú÷ÏìnÌÉfÿÚŽnž«ä…Mwל±öÍSð¹î£¶` ŽÅï«iµM�ÒõåÐ7†+&&\×ìÄÆŠÿ6ã®}h~¡ë{ ×Û¹ª0؃G}©T¤÷¢¿o0êo ˜°_À΄Ó3·…N4Í)²ë‡ÏGۉԑµnΛ¢ªë‡ÚšoÐ>*g­åÀ×¢6Þû§(2`©$æ·J\–ñãå(ö[œaã1 ¯í, UŸ@kKeo°8x–A$¿“ÁóÞR9¢ÁÉŠíØ¬Š ñî;‡°aÃ!ÜqË“œeAü/ñëyZ"'œ-:ì-)GÕÉïÑ0gßš8´Ú¦ ñƵœÒã×(í|Òv-¯B¯€ lÍMtFÄEYñ¨þ�>Ó4Áj¹È¢·.üRgÁá “Û Gs-ò²4©Å#ù­8Uv NÊî–"R¸ÖMà•é+ä”ô°Eß|œ^Úô%-ºÉ@–J"âì$“@IJx-â,y¥GpRs5·"G¥Bvq2Īò%ƒ"á¹o ¾úç‚©8;¢CBĶ߄¾)(M Á‡A{{œ’©Á÷Ó¤tX5ñÉîR\×€é¦BVáwhu'› -^LÓlÒÿ.nËÁ ÇÕòاÔ¼WgRd‹#u׺IxšÎàÐkdÖ²©ç0_¶%xŸ öLó _ý#K%‘ñ( úäožK‡øßÀffÉŠ¡.Þ‹Ã=ÙÒáó,#I~'à wö);^“ŠÛ.cÜ·¡­W¸ÀÛËæcØa°~v9î@sü^’)È]¸¡1àAWøÂd…í¹'qMœ±\—‹rýµÈSŒë¨7VÀÀ~¾kÇí,‰®u¬béÜÏ®ÁêçPìY"°ñâ¾úG–J"â$P’ ÞN¾æEÀ¸µ÷J$-|É Hxþ±ÂÞm0êO‹²O†æ/Ï TÜvy³N“¨¯8Ì8ÛîàjCMþ©$]êÆÅ Á=ü·ö ên=ƒW`ñIV4Ýí†'a·ºq¸[Îáô¯îH àdjÿ73XïˆTµNTšÌÔ\i »Æt–¥Ë° *Á]J~hÑM²TKÞN¾Bƒp¾ü“@ñóÈg´¦„ÊQH ûÛ¼Âsß|õÏO[-ò˜±6+Ej5vä`eÞ1´$íÑ$TÜ–˜V}s²÷ÞIî¤)ð¹ Êù[róPfz†^Ó—â&á껑¸·¾¨lù£6Ó$SðþßwðÓÍßç)ºP¡ccýýø+úß'ž¢n§]^J‘´è& Y*‰¥àù¿Ð`¸“ù\ï <´ü‚»¶72ºæ±x×MXYX…KQ‰¦Læ‡è£˜¦H~'ÁÔ36®A¡æ·0™-ÊóžìÞw‹{¹GÅm•LÚ2ß…3·õ_É[>'ŸBÿ‘:˜²tÂú/€•Õœð‹f×°'t9ŠiJ/ì”è0ÔGNÌÄ…Ìma…Žc"^ã—‹0ý1áÞérÜFMÞFJ9ž \-j1à«d©$–âóPùÉ·hv¾‡0ñÆ’d|‰#e»eLÁê4íÆ6cÿÜõuÒ9ì•<ËH’ßIØ~£+ÊuZ臱øû G“0†‘wÏTÜVɤ-óˆ›Ö38¨31%® 'p¸Õÿp4…§sõ£˜¦4Ãâ‘ö §`ûÜØˆ*túT$ñbšTÈÚT'cqFeÁÕ¢®úG–J"bº¤/t¢ž>&mgQÈ`:‰¡Ö#X³²F§‚ˈbÙA0·üB³ç:œáñίÐkú 7È=/’ßI ŒÀ¦+Æ6í0—Ô´\ªÄÆb=~c¯7âèá&>e9·U0’d¾‡»ó*´šqËñN¼Éìdé^ê®Sý¸¹'Vá]ÖTµÍóÀ…/¦ÉÝÁ[Ó”2“~üÏSÚ™‰JÓ ð¯ÅÝjëÅ bÜ¥ä‡Í žáªd©$RÁ}{Õ‡q2Þ‰ºðwöåcþ&¸3°i›zq»jïãÏÞ{¨Íÿ�k*[0$¼‡Ó\ý–Eo¼R#TÃ/bížnÓ Ï}cpÕ?Á Sɚг4OSí@ý =¨¸­r‘ óÝÔ‹zlV­BNÁ&ä®ß S¿¦ëÄv+ô=)¸V&ÆT®Gœ™›Ù°«Ÿ÷®u`(*¦iêy.s—Uh)‘L†$þw#x7ì@›±NÜ|œ†¾¡™Ü&“„-<ÃUÿÈRI¤‚¨ç`G¼õ +Mޡǰ+D•W‹6Ï(œ­Q–Ê›v^xÓ„ÃGñxfŽ±Ö…Î‡Ýx-ƒ Ï2’äw2La´ý<tíýûÖ¹í­ŒžR @ÅmŠ™ï&íz|´©}‚€‰ÞËøòÔc°í®ßq»Rr¯áîDSJB?^­'UÈz±h¤È$xàhÞjñ3ÙÈ-ÚõŽä¬üÕ-/ÉRž lÌy†«þ‘¥’H…ánt>çmlýðò¶IüïF¢_^XOUÜ3 ›Ó¼ÂsßÜõ/Õú¢<ÆïÀ÷Ó¤d<m¸ö0Z)ñá¹ÙŒ%I$óàFë·ß‡êé ¢õð ´ŽŽc¸ó Srqã¾ÙŠ÷Q7¹S"Ì•8g KgmÔ¡<o*ž`0=Ïë2BŠ I>8 EPžFûÌé’¨0t£~w,oHmJZt“,•ÄâFì¸qœd«ã,Æ*ˆ�Ÿã*ÊÖ¯ Ìýè¦Ê; £u £5ÅØßåžûÆà½ŠÂÓæî­MÚÑÜâ½Hº[é"nLÓ‡¨ $`X8óÝ”óöÄŒ¡ªýmè]‹AŠS¢÷p En„wxZ§ÆÚpRÈLŠH‘!‰)^[±uÎ5&à2 eÏ›Äû‘Q:uš67x†»þ‘¥’X,¼e«ã,Æ*È{Ø´X_~áÆ4ÓehÔE!·ûØGï‹’,<ËH’ß©Á{ÿ"p›QVt0j¾F¶“j”™\¡$‚FCa¸AE¹ÆÖã¹½È˯DƒÍ3w#á• %ù¡Lt3íšý oJÚsuMÔ F4eåИm‹?%^£ýÔ~T6t§Ø?BL 2$MÂk;‹ÍÛ´¸ßæ÷ÞrK¡ÿí±øº¦£ÇéÔihQ[FdÀRIć»lu¼ÅX`îõ-8uúAÔi—¨LéNÀ’P¼«´ð,ƒH~§†¢Ö—°±–5)M£N“ൡnk.všú㤈Žfî‡÷aŽ‚þqøRrmñ¢¿o0Jq0a¿€/´O0ú !'RdHšÀ+Ón¬Œyðö6×?Oð™\~°1âꟄdÀRIć»lu\ÆX¼âÑ­‹Ð²çRÍvÉ ‡ç9Nò15”%¿£3›²²+U5)ýV-JIiâ•°ÊøÚ‹¸Ùøö•ACK¾xüVÊŒ½)XÝ\ø¥Î‚?"b œø¥²4‰Õi"ÒNì I¬=Ç`¢JóèCœÖµa â^G·×ôÒM-j©¡´E7Ý–Jb¸ÌV¹Ž[:{1"s<žà톡xø,f#¯ô ¾*ÈC‘ús”äñò`ó‚Wxîƒú'!¤4)/W˱žUƺ`[¼ê{p'*p}Ïpµ,V=%±©>A¥±+¬€d2Ä‹iû§y$öœàƒ¿1âvÀš’5Q€?*-<‘lnð õOB2°è ÁS¶: ÖqÉañ®;¡RAÛ5ÈF VMLîw°×ÕÂèÌ| 4žç8ÉÇÔà½Ì‘ß,~»5ïB¯IiâáekK m¶Á²â ¾7è1IØÍ€U§_·¾ú¨ìi×5;±±â¿ÄŸÍ¸kJÆ.ÜÐÖ㟧í0= Ë+Ó�/Ox³&.WhQK e/º¤4-g¤XÇ¥‡%‚ø+¶á t`Ziòˆÿ-‹xV3Ïsœäcj(M~—”˜ð*0/|pµ_BMù(­ÔÁÜÃöÊ>8å(!¥‰?üÖ3Ø£�bR­þ—h9¥Ç¯žÈwOZOãûŸÐ«Å+¦Iì[_=>+³ðYtrÙÁŸ5q¹B‹Zj(mÑM·¥’P’¬ã’#`̦CþÆ:Ø'XÏØÚPˆs×AµæH¨DIfáyŽ“|L EÉooÎmýÛ4Íx1'3õ(zê`oÕim#¡ß%‚FCYΟñem†fŽðY}œg¸YµÛ}s„p\b¤¾•"¦iîIÓ¿ð›aÖ¬ÓÂFÞ\ÀŸ5q¹B‹Zj(jÑÍ€¥’P’­ã’3wçe|¯ùÖáQq­(DNÑQ\³§/½Xxžã$SCQò;ýô¼®t»âdA¥:M¼â…£¾k¦Ó•å"K|øTùgÐ5š V’é˜&U>öÝìÅDè]„œ¤`MdÁÔ G±O÷Ü£p={tçó£Ïö¶¾a™,¤Ê„Í ž¡þIH,•Ä"ï†å¾iÞ%XÇ—<Ïq’©¡(ùMušŽð®ÎëÐV–A]\Žj}z†WIÒÓ¤3áePãœÅY§^Ôcóª­¨¹T‡“åŸ!{Åjäw?–°ø(¦ ¯C1ÅE% -j©¡¨E7–Jb„7è:¿yYª¬šn2f,Lq—žIŒØ[{s§ ¬__,æû°yä‰IæyŽó.¨â¦:MÊÅóæGÃQ›[ž›Í°%¸[Ód;ƒ–W¡W‹eT›€Ïý· :Qû> }C3¬î±E(`_LÂcù «Ê›1$*]}õŸc…Úˆß-•ئi‚­o�n—-šã¸FqQ Á-ÏPÿ$„ê4Éʤ]VnFÕ¥ë†B“é&Úû(:œ¤XÇ%g £­Õø¤úœ¾IL¼0¢${- Ê+PV¬C—7ó÷xžã$SCYò›RŽ+—¸l}“˜râiõö¿¢b𤨓ðö\Dq¶ +²6¢ôë=(ØðÔ[÷Âb )B*kMdB¢YÁÁ\úrJ“Õ¤ƒÑ5mð¾]‡3•¼/Ô? É€¥’ˆà4bÛ¶é8Îp&á—#Å·ë¸ä°x×C¨ï×á Z+?ÄÊâkpúÿ†Ëxˆ²çEÁsßÔ? !¥IÁ¸-¨®2 1ÜZvUƒ²2 Ì6ObÂ6][èƒq[T…:t17¿šRÜOQwà:œò¬D‹·&2km~U»¸´•¦j:àu\ÂîݧPߨã…o¡ÞXƒöÑÌ[$•ï‹õOB2°èóàƒÍ!è:úÂ\ÇÅÖkþ† cî¾…ššK³kx`?‰âM‡Ðè:.9ãxQµ­ô¶œ@¾*´ðõ¼ÿ(,o2ïfÏó'ù˜Ê–ßT§I9Œ  ï¯h¿ç÷°×UBk ½^�÷/¨(×Á8#°Å ï¹½È˯LM`OÚ ]—…­Æþà5¦•&ï¿ )< kæe.1‡¬‰þ>˜F«g�­ð‘þ)&…wp˜k±5g5²>þ9Åâý½˜ZÔRCÙ‹.)M™$QHvºÉtºw?M×pèuæ™­á·yGÀ3þ'ZÏŸ†FsÖáÌ'¨àyŽóÜ7õOBDùMuš”Š»u&{¤µÌõ–ªüëTø^Ãõ6ò‚׆º­¹ØiêÇâÏ XR"l7Óå€)M9"WÜP¯©lÁ4q@jÖDÁÛSí>”U_‡=: ؤ×Î>„|K¾² E-5”¶è¦ÛRĨ0�Ëá0=/‡ÁÚïp Êä æ:nGsMAâë¸døðÒñRü~·Mw­èóx3܇Øð<ÇI>¦†¢ä7ÕiR0ââÓµNU˜¸…ÊÛ ûËÈ…BðÜÇÎÿÔ<M1öÈÿ ?i¡1>Á°ßmÎUÅØ`²!•5Qð Àzë"´,]ÍÖøH1NÞ ꟄdÀRĨ§ךú¢2{ʘx!Þ:žµúD=F$cî&~î}ƒ@ ¿Ÿ@k“!9F xžã<÷Aý“ÿüÙOSDi£¡Ü·¡5<ˆ´–u\ÅÑ£Mx•h@«ûöªGer:ŽŠ¢èíâ!¼Ä}ùذ¯ nÚ/Mü^ .Þš8«xe#¯ô ¾*ÈC‘ús”QÊñ„¡E-5µèR&y‰§¤È•xÁÝþºÂ×qk7ž²ó`5ø.ƒâO×a}ÙU82dýš{?’oé"ÖßJ¶¥“X/Ù–Nbý½d7JF, ,Qq[N‰é ÍR@—¡Ì2˜Àâé¢z­ûM½˜"¥‰˜—¿á4î„JUm× ³¿Àª©‚ÉýöºZ)åxBpµ(Ä€ú'5éµTóÀ[âÿ(FÞ“÷Eªs82€ç¾1¨„ŠÛ*˜X'M]-0”mÀ:­ ‰áánt>÷…^ÈW“ƒH�–Lâ¬Ø:ÂwZiòˆÿ-“%5-¯°g;Õ–.bý­d[:‰õ÷’mÜK%1œ&^Xî¤:GÓ9Çyîƒú—AâžT‡7*nË'qnž*÷nö…Þ”:SÏ›p9C¾Õ¬ÿ„’0fÓ!cìLkbJS!>Î]Õš#h" ê4©>Ûéœ<÷Á{ÿ’‚ŠÛÊ W‰ˆixžã¼Ëê_÷Ý_ʭăը<Ž/Hiâ÷mèŒÝ‘ÂßýÞd ô…RM³‡2~Se,ãû{„Ò‡»ó2¾×ü ë0ËšXˆœ¢j4Xÿ¢ H©>Ûéœ<÷Á{ÿ’"–Jbâ¿,‰ˆiØ=H…T??<÷AýË ¢üˆÌ~:ªÓÄ+Â$ü“©i2¬:úöü \hŒöﮌü]“ ƒ¤4 ã…õTŒN~\?å†ç…ƒ÷E÷þ%E,•Ä<ð–x!FÙ†0؃G}ŽycI ŽbŸî7¸'Fázö2˜ÌÇ?Œ>ÛØú†ÓfãyŽó.¨d¨{?7ÂWX°8ï½ØÛüWèuòpôm‰hüÖ3ØVÿGÔb1„öªÍâMwg|ájr À縊²õ«÷.º©òÃHéǰñH…T??<÷Á{ÿ’"–Jb†Ÿ ýÙüîëÂk;º=:'g‰)47Ñ¡ÄYñ¨þ�>Ó4Áj—d¼GR PøwÕVÔ\ªÃÉòϽb5ò¿»ˆKXvT&Óס8MYQyžã¼Ëê_þ@ý¦OPÙìŠ!ÃY}³;¨\¿ Çâ Æ}["áÍ-ìßo‰HQ.x­Ðf%žLBB¸šD°DX_~Ó§’vu* ×ÅŸ[`¡Ø&žÞ5Þû—°Tó³ÌFd;Y±›§ ³§›Ý5UÈ*ü­îtÞ„ÇòV•7c(…÷s¬Pñ»¥ÛDåÍÖ7ˆýjÑǵ4dEeßuO®=|;¯Ñ6:Ö:âóymqœZZнÀ’6ÙÝ‚OðMéì#òú~x_‡Â5Þ`Ä7úý|îg¢Bþ î™ßYîýKŽ ¸-û­ÊG¹þ<ìé ~—¾§xh9‡òÜÕX¹]”ï‘_!)xú¶Ëÿ8| [¦|pšöb}Þ.TŒšý(ÊY…Ù¥¨wd>ó_“ƒXfYiÁ©Óà‰xäDeJw–ТA$ûl‹ãúö/¼ ›Ç霩^;Ýó–÷þ%E,•Ä<ˆJJì2Qm¿ })l|†eÁ­×L\r°½l>†kàg—ã4ÇïEÉX©ñ‹CSJ†Áúä”&«I£kZ}d®£:œICVÔˆ9º "ÉZd¬5û]ºˆ¼6§(ª8Sá6Vëò�Lîà Ogß×Þ‰kï¨ÖïÄÉú»°y˜²=†¾›‡« Ž*ïZ”ðåÞ¿¤þBǩϑ-ö‹õ-¼E÷}1pöm—>~«eÆÞ r<Æá±Ý€®²L\,v¢¼Æ€»ŽwóZyÒw“ƒX€IŒØ[Ðh4âz§ âko_,æû!aHL3ûlObøñc<ŸWŸ|»þ»™E—‘ιymqãî};³y{=2ë!øÜ°[ÿ »{,B>¤{ÞF^Ÿ,•D pVf½? ì§èºŠ><;´ Þ~#þ,ÎÇ¡6Ô䟂5ñE}QLÚõÈÄÛ•¦j:àu\ÂîݧPߨã…o¡ÞXƒöQéΈ9·–VüXëtÎñhùÔKö»ù[©<J ¯8z�õ½Ó.¨|=çQÈ’õ‡`êéÇ‹Ž°}o20v Þû—“~l™ÂÜÖÐW—£X­Fqù78g|ˆ¾9Ë“‡£o»Äð=ÃÕ² (öPE4Õ'¨4vÍÙ<ðW“ƒH€)Œ¶Vã“ê;pú&1ñˆ’ìµ((¯@Y±]^ÚùM3ûl‹‹®ù[T\ø9rSÞÄ ‚:»L&¥IT|mgQ úÅ'ëÑl{#öXÀDß ì7ôAùò)ª[^ÎfÒ=o#®O–J"¼½°¿Œß ¼î~–擜8Ä=Uù•­o L=Gýæ,dsþþùû`:t­ž´VlÀGú§˜ç›Ã\‹­9«‘õñÇÈ)6!ÄØwžaµ´">/1‘×å÷/WÐú.lsì·BS>.“x×z¿È¡4MÚ -½ª›(âï…±xøž<T·OovÁTªQ—{ÿ’aÊiÁá’½¨1XÐéð¤%^›Ÿo»Ä˜´i±n}9ôá–±]×ìÄÆŠÿ6ã®}(ô&Éx7,÷3_\‘§ÉA$‹i:„ú>qJ_¿²øœþ¿á2¢â¶aÌ>Ûó(MçQ‘Ç“UX_vŽ0‰œÎ¹ymæ‚sêzÇlL‡¯úÂÄ÷å¢ÂdƒóEtÛ+ay#æ€,•D*ÄŒibîT%ÐÛß‹÷å%îìËdž}Mp§aC4÷/¨(×Á8#a<·yù•h°±M䏸œü Ž =‚·¦Ú}(«¾{ôßœtàÚÙ‡HG àˆ9ê¾ ƒÅ:MžnÿAsu~ÜZZéœã‘×à÷ïß9J“ø®÷ïð.ä^nùq}¦”7 /ð§'1ÔzkV¨½ûæìó<öš/ž‰«\îýKÁ‡Aûo0j£´ô0´ÆVØ\£1ŸËÅÀÅ·eƒ®´¶ þ—h9¥Ç¯QY~&mçqÐò*ôjÄn×yQ@g©¢þ¾<uBúÞGŒãEý!Ô¶:ÐÛrùªuÔ× óþ£3›j"üÙŽíž'øúÅMÁ§P­Xµî!ÜañLŒtÎÈk3E¸*,ŽÁ§±+W¬Äúêß0è–¨ø™ªf”âtÏۈ듥’H…¸1M%ØoêÅT¦•¦)ǯ u[s±ÓÔ9Ïêß�¬·.BËKýe4§1jÄwú6O-­ˆÏKLôµ¿_”âaÄPšfŒ#"éì#òúï`ÕìÄÞúVt4ŸCiÎJ¬XY22ùáu=©j36‡eM^îýK ÿ(\¶{¸T³ÛJ‰Ê~')–/àâÛr=è‹…e˜iÿkÞZMÑf¢a>Ì­ÜŒªK,ËY˜ÅÛtí™®!²$ïÓGðvÃPÌRÒ®FÞÑðŒÿ‰Öó§¡Ñ\…u˜¬æÓĶø=PÇÆPõ)ª,Ïc¦ôMç܈¼vØé¡ˆ0Ô‚Ê5*¬ÈÞ‹{Z‘b _5Œ¡,Zéž·×'K%‘ ¼Å4Å@×öS»«ÐÐ#Ol1cV®g#¯ô ¾*ÈC‘ús”e"åxÌZZvôÇߌ¦sŽG^Û÷M3:ÇÃz2Gi0ÞiÆMYbš‚÷®~:t#k j[™+µ€ ×#˜§÷xwíÉ|ä½R!ø<ptÞDÝ‘Øzàæ¢ãR¹ø¶Jô¤XD†™hXqÛmÛŒ³VÛ&á²tgÖgBø½ôÒ¦ob?Û“ð:L¨Ì[ UîAíñ7I霑×0f=ƒÍ{/¡­£ úÒÅÏÆ¶€»Ká‚ÍT¼Íõ!Å%ýó6òúd©$RÀóæGÃQãëÃs³¶1¹F}#Ž6õ§¡Ñ^„¥³#2¬¿³°´÷;¡RAÛ5Èf•8çª`r¿ƒ½®vÆX"%sTœ#ïÄ hÛÏÐ'xÊ•Î9ymvʾ9ÛgO)w ';WT*§O-·£ gL‰ ¦a sÂåÄg¹÷/)<hî^à@aÒËÍ>ñ..¾-Wƒ.‹È03ÿthA×Êà4Ýz-Ðß ÷<‚йÏö8Ü­ß¡0k%²ÕgÑü/¼À€,1M"Â;ôÔ…õÄ kPXÛtœp¡Ó<-[fëo¥{ÞF_Ÿ,•Ä¢Y(ñBèm™Ã ÇÕòÐ\›n«‘W}oŽ‹næ`§ÍŸ`ÅÖiƒê´Òäÿ[––XUö½g^£í(sUV!+wKH ÉžwL">/1‘׎¡4Íir*Mn´4Û#ÝçðÝÍð„^-÷þ%…ÛŒ²¢ƒ ÔyS£,…ð.¾-Wƒ.‹È0M x„°žnÓDRñlûßÂfØ…læVV|/"î<3þˆ²dÏ›&˜z<<åx<Ò=oc_Ÿ,•Ä"p[P]eˆ,Æ}Uƒ²2 ÌÄ ™ExcAÙÚh›mpyƒw\ð½Añö[¢S‘g c6ò7ÖÁ>ÁzÀ”¦B|œ»ª5GÐ:$½Ûuør°Qµšö—³§Kþ!ôÔW`_œ1Iç¼v ÷¼9Èéžç‚©L Vw3j3?ÓNDQ™yÆp¹÷/)òðJmÿÌÅ·e_dɱˆ 3s`9|¦Çá¾Ãbëì€íuæÓÞ.Éû´Ä {´8fÇmîæãŒi±­”¬EZ*é÷Èkó^ñž,•D Ä56VB;Oüoºð[Ï`[˜+é4‚ˈâD×ñ´0wçe|¯ùÖáQØ´…È)ªFƒõ¯´ô)|Žb­gN¹f “ðìtŒtÎñÈkOâÍ;x²||rwÞÈ!E¥DøÝ¼M=ƒÅ^§“Èëó׿¤`ûîÖpã ;yœMŠÄð[µ(%¥‰C‘af.1ÒgŠ$_ W–ä}ZbÐ=ZÉ[¤¥’‘Îq¼6[8®xO–J"Üͨ3Ù#®§°T%al”Áù3¾¬mÃÐŒ ®É#Ïp³j ¶ûæ(Sòâ…õTŒNéi°ç~Ák…nóNhï? 3äÞÃ¥Š"ëï^?6Àá°S§ðÏKMäµ ¿8ŽöèM]8ïÛQõ…ŒJgýK o÷>\c&¥I9,"ÃÌ8+»$ïÓƒîÑâˆ9nþ!8ÚÍ0hÙB«ƒÁô�Ýî±àü KYËHç¸G^›-<W¼'K%‘ñ”VUaÂníÒâ…£¾k¦Ó å"Kì*ÿ ºF8ÎH|Ž«([¿jî8±¾å†QâôãìºÓ¯L(Y9÷ïF7Õæz¼mOØëtymÈǰr 1‰Êö·Üû·xÆ1è¸íÖµX¿÷:^qæ0ƒ§»Hiâ¿ö»ÿ ­æGÜr°¬[¬Þ=Ü TðOŒ´È]Kò>-1è-ŽÈqàw?€fë?¿hÌXaz6'­oäç¥%òÚlSpUíC¡×±B{Õ!²¤.† X*‰yp߆Öð ÌÐ(¶Ž«8z´ ¯â$H;Â{¸:¯C[Yuq9ªõMèŽv!Ì$,DÖ—ŸŒý2]†F]„ +Q2›F "çè[´Ÿþía§±ZXÆÖtÎñÈkó.ÿBóÞ½óf8dY“?ßÛ,ö2Èrïß♂oäMèy|Aï8|îÇhØû)Å4ñH0‰Ã*älBîú½0õÛaÚÉj½l…¾'Áì6RÈ•¥xŸ–tGĸùº¡/ü�ªõÅ8vÁ„ÖÎ.qóÖ…ÎV.+ÆzÕìk~a¬Hç¸G^{î&~.ÓÙ´dRšÈRI,–˜1Mãè«/C™‰¸LÎŒ:-8uú<]•)Ý XB±ŒR=Gç]€tÎñÈkó.Ù³¬ÆúÊ;±3 ú]h®Üˆ†g3…“—{ÿ’B˜œ§6ê{ôµ7¡¹Ý Çàâspñm¹t‰KnbµRLô^Æ—§ƒ9öø±Kÿ4q#ŒÂùèVÈEH†ægÔ%/œ¥xŸ–tÇì¸Ma´õ0V­ÿ­žXÖ¶)øœfìýä4¬a›¦tŽ{äµ'1Ôü5>Ÿ/žBèƒñó¯ÑÊ¢•îg"òúd©$R ÖISW e°NkKj£. Ü¥@Ÿ%YÅ%"æ¨ï5\oçZE„Á<ŠSt?âóymÞ壸çÝ7±;ûä–ŸƒåáSôäKzþ}y>T+¿åçì¦~¹÷/)XXLšãý¹ø¶\ ºTn´~û}(ýç ZŸ@ëè8†;O¡0áìyïÐJ}œ•· _µ Š>ÇÖ²Kèñf|ùXš÷i‰A÷hqÌŽs}ù Ûæ òöŠïÙ½l ’Îq¾¶ÐWMë 9ªvTq¸›`ýFˆ'`D^Ÿ,•D ÄQRT¹‡p³ov¾e ÎR ™Äˆ½%Ðs§ âko_,æû°yÒó\FÌQVƒRsክØÕÀgš&Xí/ášûŸ—˜èkó-~x:´Øš­ ü[DS}ŠêV×n–¹Ÿ—–¹×ç«IkP°W³Äq}Ópñm¹t‰˜rÞÀž˜š¡ªýmè]óÃ,²ÛT Pûâ úÒ;1a7à€ ™{–â}ZjÐ=Z³ãÆ\7Ô ¸wÌuIç¸Ï¹¶à‚ewޏ‘Ü ½å!zúX©ôõ<„E¿¹ªll7¾È˜R}}²T‹Æ}:c·ø¼°gfº½³ Ïœ¥@ÂNëñIõ8}“˜xaDIöZ”W ¬X‡.¯ôž(stÁ “*d~‡Ö0¥…ý>]̹6çò1È|n+ÌúoP^¬ÆÊûí}£söu˽I᾽ɗ½—Ž• ¯°†»¢<‘Ð;‹‹oËÕ KD ÃL~ á*Ó 4?úsNy<‰ V”Àè í ÒÔ¯õLâ§UIÀîCªº‹cvܘ{Ç·8Ô:z‹tÖ@}ŸL›Áó§b%ªX±zNeþXŸ—’¹×'K%±Hþ_lýÑ'xÝý,*~'Cp–=; ?”?´V~ˆ•Å×àôÿ —ñПÅÁæhÿKÓ'Â\(ëŸÀ>&b{Ù| ; ÖÀÏ.ÇhŽß›¹géœã±®Í¯|ÄãξÜ*}xÞÙé\‘˽Iî)Àbg·¡®…y%8véW8FROàÂÅ·åjÐ%cî‡÷aŽzüüãð%j5{mþ6èíA?a¿Uƒœ?FŽ*=þÔ©Þ‡¥y•݃Å1nâ¼Ón7!1fˤÕú >™uï`¤sÜã][ð ÀjÖ£º|'Ôê(¯> cû‹Œföcľ>Y*‰E྽êÃQÅ…Y]’à:(¼Ä}ùذ¯ n©ÀXÄ;U‘-:c/ê¡¶ÕÞ–ÈŸÞøzaÞ–7Ò«rì;—N+‰Þ^Ø_F+¶À¤ÃŒ³í¬dµ�ÿPjòOÍ$„aŸOñ®Í§|tÁ\Y… Q‘#ZãyTTþ"[ÊqÞú·hf‰Ï£×‰Çõû±aå‡(Ö˜SrcåâÛr;èi ¹Â´,KN~ú^£õ-ü6-rr¶¡êÚÓ„O«’!Õû°œî#¯Ð=X‘ãÆæÝœÿ¡Ή°‰6ñ'ZNíGIy•¸©»aIç¸G^{Ããù!“Ïãq¨é~&"¯O–J"D%¥xº&RD+Á~S/¦2®4q˜]DðvÃP¼Nœ;«‘wô<ã¢õüiQÁŒ”KRÁæèŒÒ´SÏQ¿9 Ù{ïÈvÒ” é–?‘×篎]äõùëߢ (MWáp>†Y·YÌóA…¬‚ý8ßù×ã]¢pñm¹ôT 0­0bÇ]¦Ù›Á%nÞï <´ü’T­§dHõ>¤úy"uè,!0n/£’«$“*ãym?ÜæoQqáçØVÀ@û*¾…Y¦”ãd©$Íp7:ŸûB/ÂHÆCCJxKŽß‹Á°ZHé„ÍÑ„•&æecýaò4s<òÚ“ðÜo£÷Q{+Q‘3_¶!V*‘tËŸÈë»pCg³(ׯÈÖ £î¶lJoýKŠaÚíï!øÞÀþ@õªé=÷z9[VgÊñ‘\|[®]"$)L;ÚŠÊO¾E³S|&žÃX’#jÉ_âHÙî´¸¤z–â}Ttƒ?0n©Ä¤sÜ#¯-*M¼W¼'K%!1ÉyhHo)Ðe‚ÍÑÄ•¦¹¤sŽG^{ù¸æH(›q$ìßÒ »>;l8tº¶ÿ ÏnƒÝ¬ùæé‡ÍÚ¾ˆl?Þº^cÚt‰þÍò®ö¥î_R¸Í(Íý¹Y½"XkñÒ=t»YÁiàâÛr5èR!AaÚIÛY×ÿ!ÞìI µÁš•¥0:}\F§!5Õû°$ï£Â {°¦4ÝøÆg,#T,+ kxfü7dRšÈRI, <4$%NL“l)Ðe‚}gÅ(M樺t=ÌX݈«šr”±âÁ¹ß }c°ë¿¨ßUEÇp©îÊ·üC|–7á»+? d:YNö.zÞÅÜØg¢³¸qïÚ#ŒÎ'â¢NíÒÝ¿¤Ì×lä•BcG/FÒ «¹ø¶\ º”Ì[óca¦^\Æ®Úûø³÷jó?ÀšÊ ïá4Wc\R½Kö>*º‹AJ«ÙÖpûtÐÛgÖBaÀ?Œ>ÛØú†#64ÂÛ „R¿¥û™ˆ¼þsœ«¾‰wó §);~8l᳸m,•D|$ñÐÞR Ë› ÊPšŒõ÷ã¯èÛ3ñu_œƒ-¬ ù4é–?ìú–Ò\”7ÿ%vïÔoúÔÿ„eÏ.hîü(Éàr܃†%ŠñXe¢³$è)vjÇ^s·]æÌ·ï¼Z´yFál5@£ù Ö·ò+Mþ!¸ßÎúöÓ}”º‹¥iêE=6¯ÚŠšKu8Yþ™(V#ÿ»‹ø±„ƒ³…lŠ Ý1Ĥû™ˆ¼¾ÒÝô[*‰yÀCCRR4|¦‡äãvR…ÍQÅœ4ýr¦?"Oâ]ÿ¹‰ª ù1e|ºå»¾I]üÛÌå7+ jS;Lµ&¸f­!´×œŸÉ6N&ú7‹ æ ®„,L¦hŠ·GÅÑÞ9µKwÿ’âM,O‚Ù¦ã2Ù‡ÎÇó•™.¾-WƒÎ~x3cÙŠ¸ñrgEv™\¡×ty€îÁbà_iòX¾ÂªòfqieAèŸc…Úˆß-•ئi‚otÙÑ¢9ŽkοCŸš%ÝÏDäõ¾èRq[ùFá|t -K7®GCó¿)å{¢bdÜNª°k?êö,ÚPË>Ÿ."¯lTy§cþeÿ–NØõíú/PÕ>Rš>BM§ÃìþþMWqáX 6V·!V¹äLôo/úû£î3Ûë]ÀNÍ#ñ_ç’îþ%…ûTVœÇ4|ý‰lªPižÝ·& ß–«A—” Œ8Ú`ÔŸ†F{–N),—,“ÓKØ­íh¾f€Vsf{l_Ød‰¸ >|âFHý1Ô¤4q݃ÅÀ¿ÒÄ6Ábš^X5¹¥ÉjÒ;frá}»gd²¤Î¢ðE7–Jbf¼+TÈÊÛ…¯¿Ú„ EŸckÙ%ôDe·\¾°¸ j®4†­Ç,ng6U\Ž·“*sÔóæGÃQs܇çfsL÷7F:çxäµÅ±¹QÃ?»Â’wt¡ÃxG-Nñ_ç’nùîïwšq¨¶ž¡T¬Ú½} ‚÷Ì5Ÿ#G•s?FqØ^*œLôo~14£?씎ÅÈö6ƒ YYNÂ’"^]µˆÆNúHiâ/W˱^~³æV£N?mfè5U(Wˆnvšú!….â>ÄUšX:ãOºªõå¸ê˜Ý-Íû¨,è,þ•¦I»ùUíxRš>¨é€×q »wŸB}c#Œ¾…zc ÚG層΢ôE7ý–J">‚ÓˆmªP¨}„aqô[µ(59^ Œ}’•Ï<q;;µ1OSR%bŽÆÝ˜Æ/ºñy‰‰¼vœ±a±DŸˆYø7}c¯? ¯ÝŒÚò¯P£Îælaà¹d¦ÓÄs¯^ƒMúßeIÙž1c£Ú3t7HiâáekK m¶Áå NT–‘©Çx$-I¤ â>ÄrÏcI(š¿EžJ…lõYt¸#k•,Åû¨4è,†`¦î€…V€o`�oçLP?»ÿ¾Pr…hÒ9îkûû`:t­ž´VlÀGú§˜ÞÁa®ÅÖœÕÈúøcäϦñ'ÝÏDäõ•¾è¦ßRIÄ'bEÉÌ jPiê‡×z…iÈ»0̳ÃÛ¯¿ žyŒh4Ð~FóC»Œ.ƒqâv·Q“·1%ãO<Øs?ƒÛ‚ê*C¤aáªee˜m±]ø">/1‘׎uÒdE×oP¶æShmsO‘ÓÙ7ÆÜëOÁç~‚[ø<†¾¡ÖyÍd¶.ÜÐð kvì¬ÖÃÞ?„8K_Úû—N#´÷Þ…^ÄÁßmÝóЋäáâÛr5èá…ü¶@ºðHÒ•.\ æ½þ¿ÐU÷E �=¯Ê‚1\%–â}TtÇì¸1×—SÐÜî[4XkG}ùÐ4wÁî3Ó9îÓ×¼=0ÕîCYõuØ£çߤ×Î>D¬êmé~&"¯¯ðE7–JbÆž@›¿ z{psë·jà ªø§iÃÿ †ÊP}®¹Ê³jýNh,Ïb&_I/¢ŒŠ·£BÖ¦º¸.r©À®?CÌ‚¿ïa¯«•’XQ9éã‘׎76«‘»ïú&æŽMäç¥'òú“ðö\D1K5žµ¥_ïAÁ†Ï Þº—“”ãã´ßÃkÏ î{¶øÝV4Ýí†'އTºû—n3ÊŠ⤆ÅCÆn'+Ô(#÷<þœ?ãËÚ6 Í<h¬Ù3ܬڂ휺Ä»Ì÷ÖTù Tª|ì5Î=Zžf)ÞG¥A÷`qÌŽ[¼E7¼­AamK„›-û}ºˆumÁ7�뭋в…@ÍÖÙ”’Èëÿw#É¥çNwÿ’"–Jb>Ø&­?}¯ƒÑú~›99ÛPÃ¥)­°zQ»·¢ää´Xp½™_‚#¯pX›qéØ.l;šªË}²°Ó” ð¯0ÄØl½LÓéWÄu7£Îd4$¸žÂR•Š»œK:çxäµÙØÄ¨c7èÙ/FºåOÄõ…>·eAU¨C×°¨x h›àf®•®ËŸr|ê9ê7�UΧؒ›'*ÏÐkúÙ+>@¡¾{¦ m8éî_RPL“’ñÂQ_Š59Ø¡VC]”‹,ñ{ªòÏ k4Å€Vÿ8|iÒsï[ÀZP[¸+²K ëx)x„!¸f»—æ}TtÇ츱E÷<êŸ:#]w/š«öÁ`{)þ,n˜šu8ÞìžQÒ9îÑ×fÕå Å,Õx6òJâ«‚<©?G)Ç™ÌèDY*‰Åâ‚£ígèÙx/`H âºÖ¥«ÅOq,ÿ‘L`øñIl;ý‹?ýÿÙûߟ¦²õæèŸÜÉ<˜dBƒI&†ðÀ‰™@î0qÂ4c¸ÓÍø£ó5:Œ 9Ö¨å3cñ8½g$(uÆ~ê8¨Ô9à¹Á#õLùJç´b‹üú>e(ì÷½W)Ð]vh÷î*½^'ë Åv³z]{­½®µ®j!Ž©±1L,需)Ñ»ïU&{ÞѦšèºäκ•ã‘×xÝTš±C¿1;Ls÷Ö¼Ñäû7tçŸr|æ) ›µ¨ëŸom'ê~;¹ ô¸ï 2·–Òý[â½¹¯ªÒÀ)ÂX;Œ?“ÑÄ'ÂÜ?A_QmQ)NšÑÃvb$`«A‰iq¥zvãÜ1rÆg¨íø=b)¶7•u«Ç$‚t°6å6 _o/^,Ù°õÃyã*ÚGØScÃí§‘¶«ª¤Ü¥×þ .Ó^h4…Ðw ‰Ÿ%†¨„Ù3Gm5L‰N9N;•D,¯Ðvòh˜«YÎvhµ»Ÿ•‡J«`ú%¿‡ ¦•Þ¨Áÿ³´£*u! =ÂåÒ-ÁXé½Y,Îñ^DŒQÏè¿JO¹:pòd3^&`c$òÚ|o*î/Ädž§sF63š²>DNֻȬhÅpÂû€×z§ƒ®°³·žÁ1«‘Ž„u«Bœ¿ßZOL˜ÄèØÒçäJáâÛr%ôxá÷›¥ª†zð¨ÿ-)mça.%›ƒ™ê˜Œ$M³¦®¸£†ëAð´àd‘V|hEo»ós$i2Ã?O(ƒäXc#–²(—(F“ð'º»çb*‚…f5Ù(KÈIÓ„øÐÝ‚´¦PaÄy£É+þ·D6\iK®O;•D Ì:øX³ºö‹'aôÔ•ãP"(­¡ô†òLÂaØŠ •¸z3¢?–‡Q“ÕÄ‚dŒÊÆ4±úq%(‰¢#%ǸôÚœo*1X¬Ü÷zèLO0°CŸµ …•2qª!Tíßì�n[sjY™˜:R«b%FSŒpñm¹z¼ð4¡Jwá»1b{TwŸêšas¼xkÁÚ`&¡ìR"&ÆŸt{ñqù?ÄŸ-¸ëŽÛƒdÕz˜²Át›Œ&5‰UƤ#yå€Çr Úãg¤nYg¿@á¶ËpL \5Á÷ï¸ó"F“€I{ ò>® öeÎh*ÀG9¡‰RØRiK¯O;•ÄÚa©õ7/l,ž@I˜ØZ§Nk(½¡<Ì0Øó.^áÌ „h$cT«Æ’Mب·Cné¯ä—^›óM¥¨à÷ËÏ:ªöOpÁ¼g;Ê?IîwKËc¸dÔ­ æ)7ÿlT.¾-WBLyâ÷bßM¾i^ðwX#ÒvK¼@ë9x¥ƒiÆþ-þÏÿ ½Š¬_KazÂLÉÒ­šñ ÛÚœA l†–ÿ<Ob•1éHžE¹ˆF“ù�²òwÉœ®‡¹ ‚§‡6åáÐ/‰0šSðt^ÃEݰ0wdžÄ(E®•Ö¹äú´SIĀೡfÛ^èï?Z\wÞÃÕòBî_?6‹†¸Z§Nk(½¡<Ãÿ‚îÀ%t¸Â]æ_¢Ïü=n)îž'¿¶ÑäÅí~¹¢ÊŽqéµyßTŠBÀ†s%7à’±xÕíßK4ëªqÝöF2¾fŸ5ãZ2#®ß`,ý¹;«`êò(2sñm¹z¼`»1uOàÛ‹–SØm´v;îô=xÃïNÑP²ê£ÂÔ;çÿ/ˆ†ÉLø¦1òÛ÷¨V ¸â=Ѧû2Äß³[lï"·Â gÄÎúÔ#gÄ*cÒ‘<‹r™ÁÈãÇx&¿©%庲k‹ )ÿ”ìCBiK®O;•D /ÍØ³!òy³´i¶Õáy"Ê$­ ô†òLáyÝny·}•bš–¦å³¬çŒäóqféµ9ÞT8gC)²5rºc몆%5›¤Ÿ?ÒëG«³§IXÌÕZüÃp“Ñ”Tøúàx±tj±ò3Û-jCUÞ9©ËÊp JŇƆÒ ‡~5;ñ±ÂX¾é "KõàCa4š¡=ufk¨nMg+Ìß} mö»È<ô ^‡ ¢u©GΈUƤ#yå2ïýf<šˆX‘Í>ƒåš]¶8+CI¹®ìÚ>ØÎUÂäZ´®´Î¥×§J"Þ ýü´†/ÈeÚ2)¤•b¥¥7Ô@xÝŒc'oâñüiÜB{†!üó$c”%¸zxzÝ49™!")¶{¸kU'JŽqéµW?+=ÿH®Ìž—ƒRà ɦ’ù'´—ÃÈ~¾ë$Qµ¢Ñd©ÒázxßXÜ^Ñ.”×?ÁÌ­¥tÿxƒ‹o›jBÌ2•ŽŒ²_¤'Ml'¢®ïk¿ÇÓQln,iž_õ‹Ð)P\Q¢‡q+ÊßÉE¥U~á øû`)ÓBg[¬i’’zT™XeL:’gQ.Ì=/J¦(î öïJ!½¶�¿³%ÙïHûjšÜc0E¤×e¿Wéõi§’X-¦_ôa€Ý´º,­QƒâK›¿òÒÊà ƒ›hôI6&Þ¶± áct.Î;ÈÊߊœì2˜0ï݈4Ízäc»”ãÒk¯~þfÿ¦$ìúC/CF¶h`¶^Âù‹I„‚ˆÆTÍM`Û鑨ѿE|è’öOÇwØ«{$þëR”îopñmSMès°Ý™/qq›c ^{3j+¢XËÒŠ2c©F«£Á]$i,Q¼×KB‘µÓ$[lmÙ¿ÁÃS±7s¤¦Õ%V“ŽäY” K¡CÕõ›a;m7Ñ Û‡­å×`’_F+)WéµY s>²K¿N¿¶0ä'.:Gç¥u.½>íT«GðÜÅ7?:ácÉÄç]´„ê³úÒʳ¶X`מ'˜¬ckúq1Ýw Ï= 5Ѱtþ€}aëpÂ?o¤×fó÷T^ wfów)JtÙù[ɾ1ØõÍÅú0"QV•ëHþ-âÆÏµø]r³º„ÕÈM×ñŸÈG¸ø¶©&ô•3 ¿ç šjO ¤L‡†6õŒ¦€M‡¬·DGM“•'V“ŽäY”‹€Éü9¼XÅö½ztùä)””+»v`È…Á –¹]ïsç8¡©š3h”)l©´Î¥×§Jb-ÌÀ×c‰¢-ÈP=]tÖRzCyVoÄŠdŒ X¿¾2Ά`=vÖñ)ŒtžCA”5ƒ’c\zíeæïÏ.ÁÎÊD ôüî/5šV‡ý[$š§@&¶~Kˆ{#opñmSGèâ‚çå=ïyB¯WŽà÷ û®•%‡Puù¬òîyÃ-8|Ô*›íjqrêÔawÝï ¤T<‰@*cZ[oÙ‘@wKDZ?éHžE¹ˆ ’Ÿ€ù÷Á°6–´åªr?–MYËPR®ìÚs¥äo³ª÷+Ý«TZçÒëÓN%‘bD”ÞPžÕ±>Fg]·p@Ö=x3*Ûß„Þ%%üóñFzí(ó÷ÿÜF妼„¥O&£é–Έ_»¤±rög^‰Ëw8J÷7¸ø¶ë^èÂ$<Ý÷põT²51&q`×êú:ųçw®oÈ–OÀÜ÷Q¿Fçâ¿§ÚàI‘œ¹D‹ò³aõ„"«/TbÍ«9HGò,Ê%šë‹é[k£.H?ص#¦Õ dßÒëÓN%‘j(ãùÕ±>FƒóBI Ú-´<ú#jr %ǸôÚÑæoïy^ÖS€ý›’°ë'ÑôÆFÇ0âlƒÉp^\CPßòxüÑSU*Ý?ÞàâÛ®O¡ Œö¡Ã\ƒ²üLñ;²¸¤CÐÿ ÞˆËy¢Ñý|ðã™å&ºÆ£ßÄke‰/ðಭÃÉW«øö”¢òìEÔ‡eÉJµÁ“¤2޶@hZ3MoaQ.âC÷Ö70üúoÉN›ÍÞ‡¡=8ص“Éh¢Jbý±\½BµY½a+ìÚ‹ë’)xÞ‡m$ü¬›­K, ÛTZ„Íßµ0þ«+lþéB‡é N6ºÄ]Š’}c°ë'Ñ€·­¹,%zz ƒî§YØ{ ­Qê‘)Ý?ÞàâÛ®G¡Ïö7`Wºišl¿Œ¦ùŒVo«&ÿÖ¢¸¬}ˆŠ`ÅýøÂ®=ð""#Ï’:QÑaŸ'”E*c7~6¶c,L=›Åá'™‚Vã]2šÞ¢\ÆF16âD›©V\ ‡¡¾eIíŒH””+»vòM´SI¬3VY¯PyVoÄ û¾±¬KØ¿+…ôÚQ\…ßQ÷é4¾^*%ûÆ`×O£i¶Æ3Q ûgØœ=Ñžzì?Ô$)13Òýã .¾íúz�>·w¯V¡¸è Ô˜;àòCx«ÑÔ„ªª«sGÞ׫Pø~t ‹™¼n~W޼¼ ÔÛ½Ë.âÖÓC,ÕðSmð$©ŒÙUº˜_b4a£ã :%É.Áû+Næ¾+þ.9…»¡Ý¬ ŸàD단cCI¹²k'ÑD;•Äzbõõ •gõ†A¬°1˺DÉ19ÿ,5(mèúçw(ÉüzûÒÔðJÏ?ìúIc4Í<…aóg0¹Y¹›0„˜Š.Î}‡ˆ5¬Òýã .¾íºz`Ï;̨©Øâ#Ÿ£r¹x$ÿ+¸ßÌ®û·( K´0Ç0Ú+·+vÒDFßHe¼4uéR£IÀŒøžù{…t$Ï¢\üp ¡)8ö…Ó%æjÛºý•Q$JÊ•];iŒ&Ú©$V ËœwG]B›8æ|îßážÞˆ÷M7löPÖØ°†z…ʳzà VØe]¢ä—^[”¬ëâ»È9t ýÓK{'ý|üa×ïÔ#[na€ MÆ__§I…½¦;õ¿ káÞê@ëÕ |\dÀ?ÙëÇ7qòXóÂ\®tÿxƒ‹o›:BŸ…ßugÅÙófßcwuÆÃ›à³£vGÒc0n¢Áô@FßHeìÆm“ áû÷K¦1tšî“{Þ[X”Ë$†ØaˆxøOÃm:2\¤§w %åÊ®4FíT«%Xè= …Uÿ@íÙ2lÏÐ@“W…ëWŠC.qdý€ž¼]K½BåY½a+áct-ë’ðÏÇéµ™Ay¦^i’ Ï/êºFɾ1¢_Ÿ•”éÆÝ«§ eÙÃbÃQµ‚ æ=,?òÞŠhšÝ¨{>·ò`¯S .¾íúú< Ðë® É9&N­¬˜í=ܵ¿Ž:x— ¡£z² £J§ÃÙÊ(ÈWF1ê¨cÁô@FßHe솹(ù»Ãk†d##gûbæZVD‰ ÞÆ¢\fೋm;õ¸¿Ì  ­? üãbþù8¸óf>yZrꤤ\ÙµýýÿA÷²õW¦ð²é:î%ºNíT«ÅÛˆâwŽ exB¶¦ãæofØ©Ã/öçâ¢×gk ŽÝè—=ÅP’µÔ+TžÕ±"ã«_—(9Æ#¯ÍÊ1üƒ°5ý ®¿tÐnÀêðF•ÒóÏ’ëÏ{• ]ü·´ô”é/㬮9ñF“hÈ·_FMû€ôÞZÒÞÀ:ýUº¼ÁÅ·]BŸ}^‡mšw•¿9Ùe08`Þ»Q´ÐwÀг ƒGGÿƒzèÊKÄEð^”V]ŃþqELd4ñTÆK¦%Œ¦±(—i¼4ïÇñ5û]ôö¶Õ=1s°ß)Årמ«ßv§´B#.6Íž¥£Wɾ1$×§Jbµ°äG¡^ÌHIg÷±í&ªÃO{'ÚQuAMÃ$ÄêªÁÛë´-ŸÍnµ°1*IµÊu‰’c<òÚ‚¯Æ"q­%þ^“•ÝÚíÈIÏÂÓ3qv_ŠÒóäú³}0íz_ü¸6,üµMOBnÌK½æQµCo-—üKøÝÝ‹n˜J÷7¸ø¶ëQè36o­C¿ `ºïž{ !pþ€}«9Êgu™lÍ0êYÝ·g¢Š¦2šøF*ã¥îyK!÷¼• ‘ËøCœ¯iàìÛ|{…!ßâHQR®K¯=Ñç0×B>ËЙ–‰ü² øá¬·m4ÑN%±Z˜KgÞ×hŸŸÌhz¯>ŒûábÝO0›þSÚ8¥pª²¬¾^¡í¨Èdc_fCb¡Å/Ë.»¯kéµ§ð¼n74šm¨ní[˜c‚±g‡O&,{Þ"â=îsÃÎ6ºŠ?á3:œ¬/F“–²b[íÇm—á¹*Ý?ÞàâÛ®K¡ X¿¾ë03†`=vÖñ)ŒtžCÁJ'a =Æ}È`5žr÷áËÏ·bSáß°£äª"þÝLd4ñTƃø¥ñÿz‹>'mxzE:’G"—À Úÿ¿ç¡«½3—N8à­¹votóTI¹J¯=…~Ó¾ [‡&k'Ž×6-¤C&Æ0&0¯´Î¥×§Jbµøá2W£Ú:ˆaë1¼³Ù�ÇÌ |Î[¨Ú‘ Mú‡ÈÉ: {Šª7ÒS•UÖ+Tž¿à2• ¯ü2n†²×™Í7Ñ Û‡­’ßYЧ,»lŒ&‡Ñ4»~ Òv˜à–|ñð˜T)JÏ?ѯ?¿ùu ÅÅ¥(®läÀ=oÞ+Ávæ~ŠiJëQè³®[8À‚ûÄï&m›Q¹Â3ÁeÂNÍ{(Ð?ˆ¸š òwaÚaÄSüý»Yÿu‡&Ù°,~áC=xÔ/Ÿ‡}žP©ŒÅ ®D‹ò·í •Xè¤é-,Êe~§2 ùÛs‘]bÆ@ßMìeÁé—Ñ¥š¥’r]ríÀ8Üö{¸zê�ŠÕÀÜá ÞåÃh¢Jb cp˜Ï¢´än8X p8~8o\E»¤˜ª‚ÈÅ(­¢^¡òø`ÓA]hѺÀD;*7–£Åã’Ñä0š˜gO=vn>Û¼k¢¿¦òO‘õN)'MòOÂxÈž‡!<îì_¹'”ˆÒýã .¾ízºðÒŒ=yå0.ìú°v -þ€o…s/Ëܳ1mÏB&ª9£i�>Û…•ŸV­‰X½(Ýmt.sϵGuGð©®6Ç‹…£ïyRmð$©ŒE£I›üݲ-,+{M,eQ.,{^!¶c&ÑWW‰sÁt“p¿„Á19÷¶””kôk³Tè}è0× ¢x?ŽŸ‚%áîy´SIĈŠ.鲨žØaµðºñ$K ÙÎ%°)ÐlQ,åxrMŒiŒô4¢¦ú[´ô‹ó53šŽEMÛ lÿ•ž¤×çlO'êõPÛÔ+®ÙkšïvÃ+³áÅP· –Õï šŒ5âø{{qw¥ûÇ\|Ûõ)ô)xÞ‡-–ݱÉ'Ðçíjs“`0“ÏG!K?_åp$z`Á¹âkö;ù¦AzÁßa +XÉ~O(‹TÆâõ³ÓÁX€¨°ÝÇÏÈhzár¼­øúô 3±Ž[qì˜ã/:u%QÓ~+)×][˜€Ër-ñÙóh§’ˆ•]ÒeáÞh ôÃ\’‹Üâã8«;‹ª/vˆë–š½Î(§á±ÀÆ(ÏF“÷¾¸°ŸZæ{Ï>ƒåšr[^JÏ?’ëÓë¿MÖ'Øž“‹s/úÌÅûý=º!§jÿ˜ñÝóŠ24HKÿÅ_@þ¦O¡ÝQcOä ðJ÷7¸ø¶ëRèÞ6Üxéç¼ÚŒ6l¢ß_¬ÉöV3"k'*o<]ñiÕjèÁsúº'pGp¿h9…ÝF[ðg·óèN߃7Ô—T<‰@*cÑhz[¥ñ€ ºb2šÞÆ¢\¦àº}Ù™‚̯Ð>.¿ã½øùø³äڗ謯YqÌ•’}c,½>íTkCm—tY’Áhb^Ãna§ÌEЕ¡Êxon>P�6Fy6šäëVE´Ìã¡s)ìß”Drý`;íœkå´u¿™s# ô¸ï 2êSµB?L;Ó¡)¨A×Èôâúaú)jü$[¯Léþñßv] =êI2§Dñ@¢_/–.Âfœ|ÛÎ<oÅÚpªòÎ-,Ú%Ÿ'A*ã?ÑRV“k±Ph$lò·² ‡^“ŽäY” K9þ9òÊÿæV+6Ë]<r…‡G ¤\¥×^}Ì•Ò:—^Ÿv*‰µ£¶Kº,Ib4 ’ZD×Ðb„‡LAØ}«LSð'ÀÅŒ]ÛcÑ¡êúMq®¾‰ëU;ñ¾ö,æïñ]ùVqN¿»L­;¥çéõðZ/àtp 8‹që³z逮à¼ì¨ªý›±C¿1}±¸û¼ÑäûwÂúÇ\|Ûu)tÏÏ(/­iaàÞ„éRró*P§Œ6ñF¢Y£i¯º{çN–‚ÇÌéÈ(û…NšTD*ã)ô×i‘]ñ <r«€-ãcc¯8=ÏA:’G"—À 6ÿ†‰HüSQ JÊUzíÕÇ\)­sÉõi§’ˆ•]ÒeI£i±Qr‹¿Àçù¹(Ôþ %ÆnżP’DE!`«A‰©OVnJŽqvmÿà Þ;Dzç•O’‘ÅÁIÓì�nØ ø;öûŦAfe›l=0UûÇRìë ñ±á©¸ÚaówË^ù.2+Zç\Ö#Pº¼ÁÅ·]—B—É>'øì¨Ý‘ƒ½æ…E,OHôๅ2í1œ•d¾:òÂ=s4áw|+¾?mÇmxB)ÕO"ˆ”±à¹ýï!§ô>Eв=†¡4š ŸÁäZ|€Žäy»\|°«e)_EI¹.Ñù*c®”Ö¹äú´SIÄD—ôú®¨òq‡{£‰¥ß ¦ú®!±Ÿ,›^%Ìž18j«—õ<X+’1êïEC‰ÜÂ_lš-¨0u-IÜ!ù|œ‘^Û§ñ0ª;‡Ã ¼øž^ÁŽ 9‰ŸƒÅ¿·£ÜøSh3}®YZÃŵRþ ¼\4¶™û÷÷zèLO0çó¬M(¬ü Žõ7¸ø¶ëGè¦_ôa€‘ã Ú$>Æ‚· çöW¢>Š›ÊÞvÚg$zEÁjÚ‘Y¯öà°¹³Â ür(›5“Ѥ"Ke€·CÌJü7IÓ|‚­/$ÿ¥Ÿ'‹ràw6 D¶\@4¹ÇÄÅÜR7öoJ!½öêc®¤Ÿ?ÒëÓN%–;ň;þ·œªˆ†ÝË{0Þ“«ª£‘µˆæ&¯øßèÉjb!|Œ](³Ka¸¹¸ègí'Ý^|tk¶à®#ÜhQvŒG^[yˆê¼PøÅ)ètgPùù¶e“d(=ÿH¯ÿÍU'p5¢®×ì³f\³Ë3©Ó¿·ÆF/ƒÒýã .¾ízºà¹‹o~tÂôÍÖ`£Þ¾ªLRÞzÚ³Ôp‰‰FºÑùluUÎSmð$y³À{,†¯PZ$¶E¥8qéG´÷/yð“ŽäY” [ä#»ôÛ°"‘¬]ƒN[Ú!l…cT:ª•”«ôÚ«¹RZçìú´SIÄ…5œb¨K…ÞÍê£![“­Ùúµ0i¯AÞǵ¡ZgÌh*ÀG9¡‰’ì V$c4ð­ç xQjÆþ-þÏÿ ½’"ù|œ‘»¶àëÃ:Êç“d\ýýcS;¬T²o éõ£• Ñ$lS‰]ŸŒ¦•ÃÅ·]_BgÐ&œ(Ú‚ŒìR48cØõYÃiO,Hôà}Ë£‘ˆEØòÙÿRmð$©Œ=¸o±!2ãx"w­’•E¹0÷ Vœ;ÿkÄiîlÕ_â¿eRz3””«ôÚ3ð6ŸÅ¡«6iÌU‚SêÒC—ˆk9ÅPq>ÕB+ËÏïU ÒóAÿÃyèn%ÊhbLÁÓy u?Â6ÂNw UxR¦0p|`cÔª;,­½si±—ûÆÈoߣÚ"/%Ç8»vÀc…nÿ ˜¢­·oð›á"uì,å¸dbI+B÷·©¥¹[Q^ÿC2ÊS£4¯.¾mª }Ŭá´'$z ¶Õfÿ“|žP©ŒùÛµJV"å"'ļÄ4Ä¡%½nSêÒC—ˆ QO1.ã‹Æ—¡Wê1Û߀]é¤i²Qxü2šæ]s…IŒŽÅ?vheÌÀ{ïŽGŒõe6Nb…ÑÒ iØPº˜‰uŽiŒ:­0–oEzZôÓ7%Ç8»öpËlHû�¥-†~"0 §Õˆò Á[ s¦ º#Œ~a OkµxïM¸dQÕèÍß+‡‹o›jBç‰<M¨ªºº¸ÂZÃYm=5ûéQy¤2vÃr¢ W%»²õЕ”Bg±'d×*YY” ï1M¢Ñd9‰ÒK×Ãt~—JóšR—ºD<F¸{óL?uÂ=-@ð=ÇÃÆŸq×þZx¦%àsÛq÷jŠ‹¾@¹Î!?„„M«ß8‰vmg]1Þ×~§£,Z1ÜXb§oå0\»õô}^)‚×ö;PW” ­ÑŽQæƒ'1–2‘_þ-®éô¸•p£IáÚÏFE½|æC5úGó÷ÊáâÛ¦šÐWJðÂE–Gª<@$z˜DÿŸsµ2™€£ö èºFB¯¥•G*cú‡" XÓŽïð™þIB\µ’•E¹ðÓ$u éuç e‡zÿ Ìa™çQZçìúôÐ%â¸[¾F‹kÂô3˜öd‰ òƒ8^²?êsG5#xÞaFMÅ~ù•Q\Ñ”gõ'±27F§àµ7£¶ò е[BÆRŒV眡"ÎC(•ã ×¼†½é2*KöAûɼ±d„Õ9<·^š pÓ´zÔèÍß+‡‹o›jB_1*?@$zð´ Öì€'˜Â:ÔÜ´Tå#=J:VÒ£òHeìÆÏµø=\Gþ§ñ6¥ëd'AÒ‘<‹r‰Ód¯9ƒÆ„Ç4É€·½û+®£G&Ù‚Ò:g×§‡.X2¢` ² [#sCqÐ%Vp›PÄMðYø]w˜=oõ'±"£,ñÐ4Õž@I™ mœMó°„¶&Ѹûeº´‘Ñ´,ìúÉ=³<×qôÐ%´y&ásÿwð98ÑþnØì¡û3>$úÛI¼ÐùDíˆDÑbšÒwÁ@I†TÆÑbšÞE®îäBb¥Ÿ'æY”Ë\¼@ûð”øSo‰PR®±^[i³ë“ÑDăÙç×°¯ú>þ軇ê¼÷B±™pYNàpã ø,T–p¡zÝ49Y’ñµí^Ý£±üÆI¬D£‚߃î»FT–BÕ峉sÏ“…wݸk<‰’Òj\®ºÈ§{Þ[P£ýzdÝùW‚Òý{+â³¹n[ «þÚ³eØž¡&¯ ׯ#Cì‹ñÎ(ú!nã"ÁßvŽ„ ] âPcIíˆDžfè ÷Ðe³Á¶ÐºñŒùs‡ÞɺÔ#gHeìÆ-}þ%ÑQ;L'Ï¢ñ¥ün#éHžE¹¬-^€ý»RÄzm%ûÆ`×O£IÝIb cè1î .v4¹ÕhóŽÃe5B§»ˆúˆÚ6j0û¼Û4ï ++r²Ë`pÀ¼w#Ò4;`è‰=$^yëe§;]?@— ìyoCð¿DWm ÙóVºý“ITÁ¼è~40—91¥û÷V¼(~çZÄg³Ð_‡­iŸù›vêð‹ýyÐûÆÙZƒc7úã2$øÛΑp¡+A<j,©ü�‘è!0ŽÑ1/œm?ÂÀún¸†™�øpÖ¥9C*c¹˜&ñ¶'ŽOKñZFW¤#yå²¶x%å뵕Ö9»~RìTª¼#I¬•�|CoàãÀ€q°ykúÓ}×pðÜcLŠ3nÀùöžJO£×1lŒ6Úä=Læ`åHn¢K¦¸6CÉ1¾âk“{ž,Òë»a©ªÁή°X±=ªCé§:q è€Û'}*Ý¿·Â¼¢Bá›é,K¢í&ªM‹k£‰vT]ˆwV‚¿í ºÄ­Æ’z‰„Wh;ù 4,Ø3g»Øï]ÈÏÊ@î‰{ðDé˺Ô#gDNpKOšþ s£v™':éHžE¹¬-^@I¹Æzm¥u.½>Ç;•*ïHë�Áë×C'ÌC°;ëøF:Ï¡€›+åacT¾IxKL9’X¯­dßÉÕ¿h.ÿa-};ª­/î}ö»„2󆼯Ñ>!ÌMïU£Óç€qÿ!\¬û fÓ?pJ»'Úß„> þ¶s$\èJ r¥x®‡Y§k¶C×þbñt)0ŒžºrŠâ¸.õÈRG™à4y8t»‘¹ÒÏó,/—·Ç ()×X¯­´Î¥×çx§RåI"ù™uÝÂÙò›Q§EX2À¾óB ’ëU(|¿º†Å­7¿+G^^EBÊ‘Äzm%ûÆH®þ±ØxêO.%¶-¨Üm„ýÌ‚éôh ÕRSºoÇ—¹Z4ä1l=†w6à˜™Ïy U;²¡Iÿ9Ydkt­…DÛ ‰ºø_Áýf©’„¡<ꟽâ‹p=Ýv˜àŽ˜ÓPc ;uZ—zäŒ%\½á“›ç†"¥áŽä‰U.JÊ•ç¾1¤×çx§RåI"ù^š±'¯ÆW]Ön¡åѲ5uT…Õ" ¹Ïëè|>¢˜±ÏÆèüzf1AU8Ãh¯ÜN'M2$Wÿ¨*1a$B‰³½'‘öáÏæl¼F{Õ^èls1}J÷oEcp˜Ï¢´än8X–püpÞ¸Šö‘ø8Órðm9z¼aÅau·Ñ¾Û*¶GuGð©®6Ç .|¶Ã ׃ೡfÛ^èï?Zìç=\-/D‘á~ðõcó ;uZ—zä ©ŒÅÅ_`z.ý«±:Ýyê[`ó0¯{yHGòÄ*%åÊsßÒëó¼S©îŽ$±â@)¾LÁóP|ÞÅiÁ7ü½h(Ù 8vØø 6Í'8Ѻ¸OÂÇè¬ó{ì®îÀx˜>Ÿµ;2RŽ$Ök+Ù7Frõ/Ú¦—&”ˆl ÏëvC“QÎÑISÁ”óÍ0êYê[þ_>Ön-pñm¹z<ˆ–²{¡i^ðwX=ñ¯©°VX¿æ î°më·´i¶Õáyè~d¯ e‘ÊX\ðõü€¢ ÒÒ?Fñ—¿éShw”ÁعÛ2éHžX墤\yîCz}Îw*UÜ‘$Ö@<(Åon<ŒLºÄ’X`ŸT£r𺱠ïkõh±»C›¯³ðuÃtè$_Çßl’ŒQaÕÛ]xU¢~ÎV@AÖ;HË(FS>£ ’c<Ök+=ÿ$Wÿܰ”Wà’iÑõÒlªAiîV”×?ÁÀêÚñ0˜~¥û·*’§‰ëëÜ}øòó­ØTø7ì(¹J)ǹÇsúº'p‡ï¶ŠíEË)ì6Ú‚?»¿@wú^‚vЖ"ÕôŸ¿‚öAiÿ—´!Ÿún6)ŒDÆB?L;Ó¡)¨A×È´ø,µAWl†gú)jü—Ì}E:’'V¹()WžûÆ^?‰v*Þ‘$Ö@Ü(ʼn¨›ŸÑ“(6ÝÔõ/=‘s›Ž.lFÄ“%cTGÿƒzèÊKDÝìEiÕU<è*%Ÿ#±^[ɾ1’«2‰|DCäi­ïï½ —Ìô¨tÿVƒà2a§æ=èa$Àܰõ(6»0í0∉RŽó¬›0ã´àÛv¯ø“¨Ðá6Tå[s}“x#ÕÃ<íWÅÅÄÊ‹ú­K=r†DÆ3vè7¦cÇ| û¼Ñäû7tçeï+Ò‘<±ÊEI¹òÜ7†ôúI²S©ÂŽ$±¢%P LÁŸwvÏÏ(/­iþ^6ß„éRr—Iz <ÁeªDu{ø³x£ÎŸQ™W“ë¯ÐïâÇ’1ºÊ %Çx¬×VzþIúþ ¯Ð~î0*ê»eãø”îßj˜±ë±1mLî¹4XsFÓ�|¶ qËvÉÅ·åI説’ŽŒ²_¸<iZKQ¿”Ô£ÊHe<»¾žÎeÊcFS‹Ëx7´«|“Ò‘<±ÊEI¹òÜ7†ôúɱS©ÆŽ$?¶”˜úâ²èY2 æâwr°W\Œ%ì\Òï@]Ñ&ñù¼ Zínædˆãè]äéIbâ…dŒ®aÃAÉ1뵕ž’¯â|8êD›©V4ˆk`l|„ç£r¹xçPº«bò ôy;ç\yEXŸ¬>B–&~'Ã\|[®„®ìäæßpr´«®‡µõKM=ªË^¢ó{=t¦'ââÏ}Ö&VþG^ÉL¬rQR®<÷ñÖës¸S©ÆŽ$±äÌ7ÍT˜ºîB)xÛpz[ jŸŽAðc,Aýü.tÞУ¢¸E¥_ÁÐø4¸ áct-áŸ7±^[ɾ1’«üΔD¤Ù×äžBk”ø{¥û·:˜'C¾¿X“í â<Ÿ•µ•õ]ðÆilpñmùzê"ÑÊú‘•G*cî[l˜ˆ˜ fŸ5ãš]¾z;éHžX墤\yîcéõ“`§R…IbõÙìRnλÃ͵Ÿt{ñqù?ÄŸ-¸ë)ž¬&A/‘°ÿvî”}ˆÍQ6•C®�7#€¡îÿ ¡°bü£kÙpPrŒÇzm¥çŸ¤êŸ0ˆÆ’<hõw`wÏéRðc¨Ç„C‡›ðZæÖRºñ ž'Õ\|Ûdz*®‡µõ ÿ<¡ R¿-è>ô¶0¤Ÿ'æ‰U.JÊ•ç¾1¤×O–Jåw$‰5xÖs<% ™gÆ~_4¾ ½J ârô• =Õøtoþ¶å$n÷¸–­ðXÎAw§c±H°µ£®ô3èZºà˜_ðÆ É]ƃ’c<Ök+=ÿ$Uÿ˜‹ÿNæaz=0�SÑEþã¤U8©æâÛr%ô&\Q‹ú=ü EYT•G*c7,'ªpU²+[]I)t;†ÈhZ1±ÊEI¹òÜ7†äúI¾S™°Ø"ˆ0êÀÝ›7`ú©îi‚ï96þ¼l"5™uñ±x¿¦mø�Y¼‹²>Àñuxé å&sqpÜDo™(¨n…'^.Iâ5‰²ápãiÔ‚¿ÒÏÇ—X¯­dßIÕ?–‘÷à9´‡y°"Ê·O"o—‰ûŒ¼jœTsñmyz*#Õƒ|Q¿å¤Gå‘ÊØ‡þ¡ˆ @À´ã;|¦‚ÉÐoÂ!É«\””+Ï}cH®Ÿ,;•I;“’Œ[Q±åk´¸& L?ƒiOÒóâxÉ~躂U¾Ë’“¦/qÓ>€W£þ˜b«C4šn]FÝSWD >´T‚ÑþBüÙgK N·xâÒ¯XÇh¬Ÿ_žûÆH®þ1Ozef#7Kõ¿9éqNÜ*Ž?ycCéþ­ Nª¹ø¶\ =…‘èa ‹ Éç EÊØŸkñ»äÁéÂÿ4žÀ¦t¥_±ÊEI¹òÜ7†äúI²S™±3)ÈŒý[Õý.Ê}ÃÖãÈÜP “K4HÜ&ñ’ cæ) ›7%0¦i¾Þ^¼XbÓ‡gžÆpûiäÅ+Í2ÇsÏ}c$_ÿfáwwâ†þŠY ®µhìyõ>Rº«A“j.¾-OBOeÂõ°–EéQy¤2ŽÓô.ru —^úybžX墤\yîCzý$Ù©ä=v&E™}~ ûªïã¾{¨Î{/›9—å7rbÄŠ‹Ê±q°| ‰Ìž·s%C²QF'MoEéù'¹ú—äÉ¥T8©æâÛr%ôF¢‡h‹ Ûyüÿ=z%…ô¨<R»qK_‡E›NžEãËdHʱÊEI¹òÜ7ÆÒëó¿SÉ{ìLʲPˆ%©F›w.«:ÝEÔÛÞ¨c4ýÕ‹¦[½)±+ø¬|ðc7õƒ<°=|5Æhµð<ñÜ7Frõ/¹“K©qRÍÅ·åIè©Ì=3ÌHG Å4%©ŒåbšDµõ×áӒƤMšb•‹’rå¹o éõ“d§’÷Ø™”&�ßÐø–Åp /›Îã«›o«{ÄRë÷âö‰rÔF)ø¾^àyâ¹oŒäê_r'—R㤚‹oË“ÐS‰(¦‰K¤2–;iú7þi<€ÌzØeíIGòÄ*%åÊsßÒë'ÇNeRÄΉCƒÃTŽü¼}8q©7­èœŸc;­h¼Y‡K'ö!7{7tmƒêß/¬¨y} tµwæ 䳓¥æVؽò±ëUrŒóÜ7Frõ/É“K©pRÍÅ·åJè)L¸(¦‰O¤2޲@ÕäáÐí>È••~ž˜'V¹()WžûÆ^?9v*“#v†H,ÓuZa,ߊtñe÷éBKÿ%:3lžÉÜ+Sx^·Mò·ç"»ÄŒ¾›Ø›¡¦à2z.n»”ã<÷‘\ý[É¥”=©æâÛò'ôÔD¢‡5J“•'r‚»UcF¯d‚{µl¡EÒ‘<±ÊEI¹òÜ7†ôúI²SÉCì ‘$ø^£ßñŸàI“Ý9ˆÑ„&˜„ÃPˆ­Á“ÒIôÕUâœm,ø{§ñKr£,6xžƒxî#¹úGÉ¥Þß6Õ„Î+=xÛp£ýψ˜&?žY,°OÊ/)HÊ#•±ø0LÃïy‚&c¸à;ƒéCÑ]4HGòÄ*%åÊsßÒë'ÓNe¢cgˆH‚ :Øé¤åg :fá³ÿÝ7V¸9H–'x[ñõésî®ãV;fÅxÀ‹N] t¶øÇWñ<ñÜ7Frõ’K½ .¾mª W$zð˜¡_³ßIÛ‡¨°¾–݉•|žP©ŒgàëùEñ÷ï +´…9HÏØÓsùÝFÒ‘<±ÊEI¹òÜ7†ôú´SIÄ�· :â#±iQ u™‚ëödk"ǘØ2¿Bûxü­ºXÇh¬Ÿ_žûÆH®þQr©·ÁÅ·M5¡óŠDžŸQ^ZÓB\ÂM˜.•!7¯õv/M B"ãÙg¨Ûö4ùGkÿXh'v~—‡7Ñ· b•‹’rå¹o éõi§’X;ü&èàÉhšÆKóçÈ ÆÏ?ŸÙé\ :‡‘ÏsÏ}c$Wÿ’<¹”¯Ž‘Ï™i¼êî[I�.¾-WBOa$zð¿‚ûtú|vÔîÈÁ^ó€¸4_ éQy$2ž±C¿1;LR#V€©èb’mòA¬rQR®<÷!½>íTk‡ß<M"A<lþ #ø`;W42ã ÏsÏ}c$Wÿ’<¹”çÊ´ÇpV§ƒn¡Fyáâƒè~9”‡M‡šáYãdÂÅ·åJè)ÌÛô xÛpn%ê{Æè¤)AHeÌ‚€?ÃfÝãP€½�¿óG”dáZ ®ŠX墤\yîCzý$Ù©ô>„åÑHÄ<¶|Ì&¡Ü&èz[·;nc×›çP’ýNpìD6Mî1˜lƒˆg=vÝXˆõóËÁsßÉп¡—¡û:É“KyÌ(ÊÊÇn­ZIÛƒÃæ>Ì’ÑDÄÞ7!#ãÀôܾ„êó-蟞 MG]B›‡\¡VÏ÷>Ï}cH¯Ÿ$;•kˆÙ$Ô‚t,Ïìú|d—~‹›áîyækÐi QnüIü¹ŽQ™Š5ëõóËÁsßÉÐ?s±>t‚Ê’K­î¾Qº«b¤ÏâÒß–+¡§0¼n‚t¤<Ë•w³ë'ÝN¥§'*ÒEgƒ%%:X¢Äl* BLBò#.l=­8wþ×™LÀVý%þÛ?cižç žûÆH†þ-M«Géþ­ <¸ø¶\ =…á}ps2¾ßØ ùs¤9fŸ5ãš}<ôJ éHžï}žûÆ`×OºÊÉAôÿyî5GmôQÆ¡*Ä$¬„@�Ò‘F1MkAéù'ú·nŒ&<¸ø¶\ =…‰U¤Gåa2–OéÞ4¡�êЇÂ`ÿN,%V¹()WžûÆ`×Oº‡®§µfGØi˜ØÜOÑX™‡ô„fiKqTˆIH~(¦)žûÆH†þ­£© UUW½‚gQ´õhԬϫ…‹oË•ÐSÞ71'cK•׃ÂUTæ@««_œ n^FyÞV”×?ÁM+†ç{Ÿç¾1Øõ“Ïhв#©)Hp= G…˜„ä‡bšÂá¹oŒdèߺ1š¢z|·y‹oË•ÐSÞ71'ãA÷ðÜŽ K9^T~‰q$`¢ý+dÑIÓªàùÞç¹o výä3šî@oü5,ߨ:pòd3^R‚Ä1ò/ÔÖXáòϵ˜ÏýTÔÏop-甜JDi²×œA#Å4­ ¥çŸdèßú9i’ó p ¥*?n\|[®„žÂð>¸‰Ïö¸[‡Îñ°‡¤0†§µ»±!J=Ò‘<<ßû<÷Á®Ÿt]ÙÉ)ôו $¡õ€Rœà  ;.„2€Š‚ïtÔ|†=f÷Ü{RžxïÝBûð”4¦iö,×ì¡òñ…ç9ˆç¾1’¡ëÇhŠâA¾ †8Ūrñm¹z «HÊ#•ñ F:Î"/{¾¨: ÝÙJ|^MÚFÕ9 çäB:’‡ç{Ÿç¾1Øõ×ÅISW+Œ%›°Qo°'TC\ô|V\sÚHËØƒšŽ—ÁÝá€Mb2šB„ íŠãfIË<ë04­%ûÆH†þõ?ê ¹ó¡×áÁü9ï<Â+º½ò¼Òý[žfè ÷Ð>¯ÛºñlÈ·0.¾-WBOaxÜ„œŒgàëÿuº kµ(*=«ú0˜‘$HGòð|ïóÜ7»~òMò;’šœ£¸Ý¯Ä^=±"D½37šÀKtÔìAFÚFhkÂÝq‘Œ¦D£Ér¥—®‡Å3]Ç¥Ò|ä•_ƒ}hqb£±~~9xî#¹ú熥¬Çφg¯Ôálù.l3<Å´ø?Ï/G±iÓQüâ™;©Wº«âÿvÂ>°ÔWêÁ£þ‰Ð«ØàâÛr%ô†÷ÁMÌÉØc½ˆý?Â)›I@`ÄCu<¡ß„C:’‡ç{Ÿç¾1Øõ“n§Òs5¦n©ï»‡ ª&œy£)øb žŽo¡ÍØ€÷Ò7¢ˆŒ¦üƒƒx#¹Ugà{z;Þ?³+þ±_lŒÆÚ”Bîo­¶)‰Üß[mSéõÝ0å wdöJ±6£–s£‰eÏÓÝF§ä¤É†GuGð©®6Ç‹˜çx.¾-WBOabÕéQy˜Œ[J?@Ú†#h‘¸aˆÆÒ¨VcòÓ5HÓšÉhZ<ßû<÷!½~’ìT p?¼½î šœcâèè¶{¸k—`abˆFÓž5ø§ÓJ™Í’ü ÝŽÍÐ’Ñ´ xÛk°¿â:z|ê;—&d ¯žûÆHtÿ¤;ûWåžÌ•|£x,6 Ò þk0^rmpñmÙ—!O¬z =*“±ßY¢÷?ƒñé°ø¨Œ0–Ò·¢Ü`ªÍd4­&—X›RÈý­Õ6%‘^?9v*gŸ×a›ædåoENv̘÷nDšf =¾Ð»Õ Áiû7Ï}…AÃÛ€ú–ÿàåÈ+¼xCÙóæ˜…¯·/–çþ‰îîøð\-‰Ã+…ç¾1Ý¿¥£Î6˜ çÆŸg!›åR¸’/‹U­{·ÄƒÀƒ-§°Ûh þìvþÝé{™'Wß–÷›:UˆU¤G噓±h(yíhª=’âÝødÞX2Záe Q3Ó7x—Y¢û'ýûɱS9ã0`óÖ:ô ¦û®áà¹Ç˜dãÊùöžR"ˆD!Œ¡Ç¸lG8w¾ü|+6þ ;J®&ä…OXLÓ1hŸY8É ¶³_ pÛe8¦žfÚ”‡C¿¼Pňâyޤù{y¤?�o[5r5iâš"…Z-vçgaCî)´F9áJ¾¾>8^,íçŒÓ‚oÛ½âOâ?܆ª¼skÁ ý7¡ð~S§ ±êô¨<‘2üƒ°5]FeÉèÚÈhR�Þe–èþ-ýûI°S)x`ýúb(ÓØ¬ÇÎÀ:>…‘Îs(ˆS=bõ.vjÞCþFâ'˜5Ï…i‡GLýª�üòç@Vþ®¥§¹Úã0÷O‘ÑÍßË#ùû¬ŒÉÇ™âøÏ°9[œÏ{ê±ÿP^ËÜLüÉ7ìù£ÿ}cš}†ºméÈ(û…NšˆØ‰U¤Gå‰*cažî»0V~ŽÒ*=ªÈ=/nð.³D÷Oú÷“c§rÖu ²ß þmiÛŒÊö7¡wj3c×ccÚ˜Üs®›sFÓ�|¶ dÌ.0ƒ‘ÇñŒ£ƒ·DŒá•Âs߉îŸäïÏ<…aóg ãoa�¦¢‹s§3âZct쯹ߋð%_œ ¥Èfϱ_sí]䞸OÐpb±«ÿ†3†Sk.¾-_BO]bÕéQyÞ.ãYø=PKFSÜà]f‰îŸäï'ÉN¥ðÒŒ=yå0.¤lfíZ=_Ü•$Ôgò ôy;apÌ¥ØtÈúè#di>D…51ñ:ɉÏ,Ø'Õ‘Ïs$ÍßË#ùûÂ(ì5EØ©ÿ%¬ÖQZ¯Vàã"þÉ^?¾‰“Çšæržä+¼nDÉû{ o±Ãí›Ûbü¯Ñc:ŽÃq*ZÎÅ·åý¦NbÕéQyV&crÏ‹'¼Ë,Ñý“üýdÙ©ô6ã‹5è‘î8 ÃVÔÞ¢,m‰C@ÀÓï/ÖÀd{ƒ€]¬¬¨¼ñ>²˜†[Q‘© ŽèM=C“ý=^á¹oŒD÷Oò÷Ì{2ƒ¿[¶iv£îùœç�{Í Ûì¬û}É=/¸M(ŠÓI5ß–'¡§2±êô¨<¤#õá]f‰îŸäï'ËN¥Ç‚âìm(»úŸ`ì ; ±_GYÎ”Úšàœ¿à2• ¯ü2n.œ’ÞDƒn¶J~gA³ÝKFÍßË"ýû³o¿ŒšöIö¹¥m±¦Oò\?â`u†¼F{q»r;vÅ)&’‹oËûM*ĪÒ£òŽÔ‡w™%º’¿Ÿ,;•þWp¿™ ¥qZw ?_9ˆlÍØñõ\º'çØJ¼àƒMwuý1‚í¨ÜXŽ–(E¤•$!cx…ðÜ7F¢û·äï 3̬ܼàK¾>8늑™•Ý,1JaÒÅþiò. k<>A€\|[ÞoêT!V=•‡t¤>¼Ë,Ñý“þý$Ù© - ž‡¨Ñnû ­‘\Àˆd €×'q¸Ñæn4Ÿý[h¶@oŸ‹SžçHš¿—'Ö¿Ï|YáòΟ ¯(¶¨' Íè‰p.¾-ï7uª°îÏ:„t¤>¼Ë,Ñý[ò÷“a§ÒÓˆÊâ}ÈO߀ í7hs>E˹jšF㣡Л‚Sý0—ä"·ø8Îê΢ê‹ÈÒhQT§_}ËŸç9’æïå‰õïs%_on<|á†ߤ(\|[ÞoêTa] žu éH}x—Y¢û—”÷¤Ç ­f3JŒÿ†wÞÿ=XXõs”PLSâºM.u/†zð¨_ý® ¼†ÝRƒŠâ"h‹ÊPe¼S*åXàyޤù{y’rþŽ›×Åþ°>I[ü’¢pñm¹z «HÊC:RÞe–èþ%å=鹃óÀÒlJÓ.Ø{ÇB/Õñ4¡Jw IDæÚ£º#øT× ›ãÅ‚['‰€)[ î{Õ7œxž#iþ^ž¤œ¿£áùå¥50…%H1]*Cn^êã”…‹oËûM*¬«Á³N!©ï2Ktÿ’òž\¥ !¡QwŠç›é‡5J¡äTAz„Ë¥[‚AîRùÃì¡DáðÜ7F¢ûëßçJ¾2'Õ‚ÏŽÚ9ØkÀ|åÀXàâÛò~S§ ëjð¬SHGêûÌÝ?º'‰¸á¹}ݸ#‡¼h9…ÝF[ðg·óèN߃7emÞI8 [±¡ WoÎ輻šå!ú)¦IÍß˳®æoïCXHN”ï/Èûøÿþ·ô÷k…‹oËûM*¬«Á³N!©ï2Ktÿèž$âFß7(ù>²r¿½GßÁ‡w^‹?  ·¡*ïÜ\¡ä”„ÕiÚ¦¥‹À™�á½Èó¦ù{yØßµqÅ4j«HÊC:RÞe–èþÑ=IÄ·-zfŸ¡n[:2Ê~Iá“&f8þ º—Ðá ?‘{‰>ó÷¸EîyxîƒúG<8Qi +ð,¶JJt°PLobÕéQyHGêûÌÝ?ö÷cmê3Ogôº+hrމSñµíîÚ_/MA¨Ç[¹™žþ°,q|0…çu»¡‘GÓ´žûÆ þÅ‘ÉAôÿY“iŽÚ èíã¡×±Á…4’J)ë˜Xõ@zTÒ‘úð.3êßê™}^‡mšw•¿9Ùe08`Þ»iš0ôøBï"TG…@îõ€ðºÇNÞÄcI–Á.t>ìÆ«øçñ<Ñü¼÷O‚§µfGØé«ØÜOÑX™‡t-.b\H#©”²Ž‰U¤Gå!©ï2£þ­ž‡›·Ö¡_0Ýw Ï=Æ$s{rþ€}†§Hås Þ¼m8·¿õ=ìD˜ã/Œ²;6lç*arùC¯Õƒç9ˆæÇØà½¢¹÷j  ë ½)6¸FR)e«HÊC:RÞeFý[‚Ö¯/Â:ÌÌ£!Xu| #çP§Ib­LcÔÙ“á<túÐØÙ‡QªÍ†�¿³%ÙïÇVdÓäƒÉ65“豿Ë+<÷Aý‹#,û¦ñ×°ÓW±u4àäÉf¼ŒÓÂ…4’J)ë˜Xõ@zTÒ‘úð.3êßê™uÝÂÙEçfT¶¿ ½‹Pœ ¥ÈÖ„ëä]䞸N!&`×ç#»ô[iÀ»ùtÚB”n…cT½óR¦'^á¹o ê_‘išB] J#³r® .¤‘TJYÇĪÒ£òŽÔ‡w™QÿVðÒŒ=yå0J·Ðòèøhmž0„×(yô-v¸}sç}‚ÿ5zLÇq8N‹žäG@ÀÓŠsçÈ (S5gÐèUß¹”ç9ˆæÇØà½äNšºZa,Ù„z{\Ü®¹FR)e«HÊC:RÞeFý[Þ{нÛHøcÔg ì“´4OÛì¬û}‰q$¸M("·I ‚ï<júz:Ã5´¨ì’ÏsͱÁ{ÿ$D‰iÒäÅíþÉЛbƒ i$•RÖ1±êô¨<¤#õá]fÔ¿5 BDbõ®q°º à ®x£½¸]¹»Lý¤—‚¯Æ¢âýšÜâ/ðy~. µC‰±;!'¥\Žñ<÷Aý‹#ž;¨1uK³çyÞÀG×^U¤1÷0Š­Ê#'÷Õ6BYb•1éhõð.3êßð4¡ªêj˜kžØ΢hëÑP= "1øà¬+FfV>vkµÐæ ]¼4yÐ5®¾ÛŸü—i/4šB軆`Yót•0{Æà¨­†ÉõWè}êÁóDóclðÞ? Âܯ+ZOiÄ*ô¤RÚ:†ôxh,©ï2£þ­¨E¿ˆ[jZb°…OçOÐW”@[TІfôŒDê*•a‰ ¶ m‡ î u?o4yÅÿ–@gS¿ÎÏsͱÁ{ÿÂQ£þž*ÒˆUèɤ´õ é!ñÐXRÞeFý[²Eh©Ê[Db xÂòh$â¤bͤ˜´× ïãZ8¦™L˜ÑT€r6B“y<”F_]xžƒh~Œ ÞûŽõ÷T‘F¬BO&¥­gH‰‡Æ’úð.3ê߈Ӕ¾ ûxèM„êP¬Ù ™‚§ó.ê~„mdv}² Oâ†#1€™Žx…ç¾1¨qD…ú{ªH#V¡'•ÒÖ1¤‡ÄCcI}x—õo xš¡3ÜCWxjZ[7ž ùiažH<8Qi”ÖjС¤D Åš…˜Á¨£5(K§Óâk_-÷a÷N…Þ£.<ÏA4?Æïý Gú{ªH#V¡Çúy">%õá]fÔ¿5Çè˜ζaà e3"j¬YôtbãÖØrâ¸ü3˜~nžŒ÷‘_ZŽ’¢tùfCïSžç šcƒ÷þ…£Fý=U¤±z¡Oágxá(-™”¶ž!=$žXu@:\=¼ËŒú·„Wh;ù 4i¤çl‡V» ùYÈ=qž8¦§%V‰l¬ÙS4VæQ¬Ù,ÄQÔõO‰÷ñkX+>Ć¢pþ‚Ût”AD@óclðÞ?)Sð<¼QO$0œæuU¤!úwö/5ý†£·à ½L.¥­_H‰'VWï2£þ­žY§k¶C×þbñt)0Œžºrj$7°D-¦IS@Y ˜Â󺣨¶:Ñ×zyšP¼—¿–Ã'ÑøZyÓòîÝ»Kujÿõ_ÿzWâ`}ëkìô!ÑlݺU¶o¬ ‡ÞŬOÉNÀVƒS_²Æ4¹a©¨Äw7ÃÏÂÛM4芡5“ÑĤ‡Ä«H‡+ãÅ‹p:ÁÆd6ÿ3kìß ïý ‡Ç{.˜ei!eó"‚Û„¢Ð‰†01†1:uRÏ迆ř‰­£'O6ã%ébÅâ¶ï"÷ä¯ðNýëåóÐé–î²+Àÿþïÿ";;;8¶#‹~Ö¹¾±>³¾'šýë_²ýãÁàŒ„õ+ið÷¢¡d34r 6ÍT˜ºàñÇæ¾ªŠ4¤Bn4Ýü®¹öå6£¤¡þÐ'¤Ÿ'é!ñĪÒáÊ`ó“•\cÿ–h–ë{ óëo>j¶í…þþ£ÅÅyç=\-/D‘á~ðõcó£S'u‘išB] JHR> ùæ²(7ñ´è—;mâaîžGî´‰·S&ëW²0c×ccv) öÅOº½ø¸üâÏÜu Ç4¨" ©ÐåÜófáwý‚¹ï"-cj:^J&‚dRÚz†ôxbÕépeDÛIåe§2Zÿ؃˜7X¿x#0¼A*;¹¦ÙV‡çêÇÕ§.r'M]­0–lÂF½=.uVˆø 7ñ´è<mâeîž'ò´‰ÇS&ë[ÒxÖs<ðJ·fì—ñEãËЫØPEË } Þ® (CMîI4>_b&•ÒÖ1¤‡Ä«H‡+Gn'•§J¹þñvÊÄ`ýâ7h?íƒa äZwòS’(1Mšœ£¸Ý?zÁ ás‹þðÓ&žæîyÂO›x<eb°¾% ¾>8ܓ̄[ÓxÕÝ oœŽ©U‘FT¡ cpš¿D®æ]ä”™àðÉï#%•ÒÖ1¤‡Ä«H‡+'r'•·ÊÈþñxÊÄàõž:¹à ÏÔ˜º#Œ×7ðQ<—„ÏA<.úçO›x›»ç™?mâõ”‰Áëü-‹çÊ´Çp–•‘Xh§Q^¸Ç„8é¿À/‡ò°éP3<kœRT‘†¬Ð/`­ÞŽô´ÐÖ<ŒHóÀ÷+Šiâ ÒCâ‰U¤ÃÕ¾“ÊãNexÿx<ebÐ=G¬a&b—˜à6ñ¼èg}ãqmvñzÊÄHªùÛcFQV>vkµÐJÚ6÷a69&‘'¡Ì/QTûÏ%»J¬uÃTs‡²çqé!ñĪÒáê˜ßIåu§r¾¼ž21èž#ˆx"À?8ˆ7K} uÿýT¡™ˆ#I5t£óÙüq‹2¨" ‰ÐEK¯åä¾+0¢íÎGV¥ç ÒCâ‰U¤ÃÕÃv)yÞ©d}ãõ”‰A÷AÄ“�<–sÐÝé&̰µ£®ô3èZºàpS,’oþžÆ¨³ &Ãyèô? ±³£qtïUE«ú:M÷Éhâ ÒCâa:ˆµ„špyÏyÂòh$"éÏ,Ø'i§>qøÜ°?øulÑ£ÓAoü-1×WY?ˆF“¹xɼ.m™(¨n{ ˆÕÃî§äÁgC)²Y颅±ð.rOÜ‹ÛXPEòB'ÇQ'ÚÍFèY°–ÞóƒîÐÄ(`&0³ð@K.¥­_HüC:"xƒË{2J–¶´´Qa}aLªx‰NcòÓ52zIƒ&{/t½ð¥¼rD£éÖeÔ=uE„5ô¡¥òŒöâÏ.8[jpºÅC÷2lì% ÂëF”¼¿ú;ܾ¹³VÁÿ=¦ã8§:oªHc©Ð§ài»€K'GMî—0;Ç$_néç‰D@zàÒÁ\Þ“žFœ¨4âfÈõ2Øt()ÑÁb÷ÒBSmX%ÿý;°çìu´Úœp¿ÅBhŽàÇè+Ѱµàê©}Øy2~»ÆÉÉ_è«*Ç÷#¹gí8šö)î?áöÓÈÓÙÈMˆ‰dZSl°³î÷%ó·à6¡(NcAiH….Àßsšw­ýß™[ÑôÇí€Õ|§´B“Y–׋_‚|@zàÒÁ\Þ““ƒèÿs:ôbž 8j+ ·‡^ª £«¦ß÷H7K噯Èoõ8óã3ñ§Te÷¼Ìã°Ï`öy¶i²QF'MDŒ°û*Y\?â`u†6U˜G[/nWnÇ.S\Æ‚*Ò }ÖòMÈ®l…Wn·H˜€ËRŽ-ºÇ˜/e—LJ[Ïø‡tDð—÷¤§µfG˜k“ØÜOÑX™‡tÚW—é—pü¾ƒ)DÀƒ®_MYk€%‚8‰ÒK×OIÍ×q©4yå×`ï^QF¶‡ÏÈ•1)™ÂÏ07sPr­)|pÖ#s>íxaÒÅþkò. k<>UùT‘†Dè3vè³>ƒÉõWè2üõô;.ÃúŽ´äÒÿŽÞàòžŒÓ¤)€®k$ô&BuÞš2XÀ´Ãˆ£fwèu*"—r|¾§W°ãýƒ0»¦B¿#øc;û—/ª=ý†£·¡%.çïå&àîü úŠh‹JqÂÐŒž‘øK«" ‰Ð6è²t°-kF»a.Ö/¼'é”¶N!=ðéH Þü‰7ÜÆUðÕ?.ïIÏè¿JS6w4àäÉf¼Léx™ãùå—¥±f’Vö#hSÚh’#�o{ öW\G/>;ꄸa©¨Äw7åîmÖn¢AW„ íbɵaµÿœNçBcówøkë. BVTUžfÒ‡æŸh9\ ëø2éC';Pµ»ý¡ïH A> =ðé(Vf0òø1ž-»î˜€Ãðw˜=‰p à½Káòž”išB] Jâ”e‰XQ¦ñ]ùhÄ{I“]Ч/ô&0 gÛ0Ó²7¢óù¹•rOt£éæwåÈe©²5›QÒÐ+.õÃ|Át6oG6^‹¼/ BVTUžf¬Ó‹˜´_Á±}²\ðÿku!¶{1oVI?O$ ÒÿŽb…Å |òï~\òP[h g¡Í(IQÂ{ÿæß™d÷døk.ºr'M]­0–lÂF½}y÷B9äÜóXœsË×â‚Rƒ í·èðûY0Û`Éæ ÉÆW°i>Á‰Öd8qœ{Þ,ü®_p"÷]¤eìAMÇË„ë=Gî«°Æ~Ï5ž&TU]]ò<,ÚzõqÊŠš�£‰1σïñMëapL»îã\Y1J+Ï@WoÃ4qéHG±²ŒQró2ÊÙƒ-íd—4À¹YMxïß[·n Þ‹rmxx8ô®eGR“s·ûçS 'ð'ºj?C+PYÙˆçäz&ÀëÆ2¼¯Õ£Åî†/èN*.¼‡ºa:ta™‡ Þ™‚·ë(ÊÐ@“+êîù8§Ür§MÜŸ21¢fEý"n±ªªMC/#2¹V6²Ï‰‡ôÀ?¤£X‘wüh9ñ 4i¡­y˜À:1¼÷oŽýë_Á{1²ý×ýWè Æs5¦niö<ϛДàÁ× sÅh4y(3=¥Lp ø`ÓA]ä‰Û4ܦ£ÐÙÈu1)Æà4‰\Í»È)3ÁÁÙ†�Ûˆ Ÿ»Ùkî‘ÍŠê@KU~ܲ¢ªf4…'vX-ìóDâ!=ðé(Þx¡¶hcÐý¥²‘·4¾üöOî´‰‹S&Æÿí„}`é¢óUw/¼´8O0â=íiEuA¦¼»’0 ÷àDèE*ò\¦JT·¿“Ë4F?£2¯dùÌÄ^ÀZ½é²›\¼q¿JXLÓ<á§MIqÊĈÓ”¾ †8Õß#£‰X1¤þ!Å“øœfTä¾ MÎ09VQKFøî_äi7§L Ï-”iá¬NÝB;òÂ=08Ĺð¿ÊæCÍð¥"Ó±ƒîJiŸ¡¶ãwé®1k½fÔÜJñìy~êŠ6!+´ÚÝ(ÌÉÇØ»ÈÓ=Â8ݯ# 0òF¶É%LEµñ<òþötÃTs‡‹”ãó§MIqÊÄð4Cg¸‡®ðXU[7ž ùãöl$£‰X1¤þ!Å‹)x¬GAúÙàsáÍ 3Äÿæ?mâæ”‰á1£h¾�¢¤íÁasfÉhJ‚§'‹"u"m»ósPD)Ç!ø]輡GEqŠJ¿‚¡ñ)FȽ”oÄy¥åä>Ùûz¡íÎGVQâRއÃN—Øž§LŒÀ8F'”us$£‰X1¤þ!ÅÀØû‘¦AFÑet<ŒØ D¯é n%*;ïý cþ´‰«S&Æ[‹¨Ü2eƒév*M3ðÞoÆ£‰ˆ²-³Ï`¹f¥1IvÆÐiºÏMq[B MÄŠ!=ðé(V¦ái9"¹À…¶ ùY”Ò›÷þ-…íTruÊÄP¡" ,Fç!ÌÆš ë¤ÞhƃnæOgHé•�<æâà\¿¤e‡u˜¯„„£N´›Ð3×`½æÝðø™!,`&07w2"¾ÑDDåÅ‹’ú*Ló?³#øƒÆŠ˜ê´à6'FÉRxï¨P‘X#A´éþ†Œ%ºy¹f8S>í8+;p•Wš+5l7Ñ +E‰N4ú‡hÜóÍ<m°ƒÅíEÜãšÜ/avò;K„CF•hiƒYKšÀÀƒé†ˆ¬â~»F=KP£ùWt{&çh3$|³›÷þñŒ E‰µàCa4š¡=ufkÇ\0wg+Ìß} mö»È<ô ^§´‚L àÏHL?Eíg—褔kø{.£@ó²µ_ã;s+:ƒÉ :`5_Á)í‡ÐdV …jm­Ñ íl€^wMAãS|m»‡»öðL“±¡šÑÔÿ¨C cy~Ï4ÞÏÃ`z�ÇPô*ß´Lriƒ“&ýd Bc%°”Ç¿B·ãƒ%÷~šf *̽ NëÍ{ÿ’�Š k`ÜŠòwrQiõÈ.r,eZèlc¡ß¤"x~þæß¥±Œîÿ¹ÊMyT§‰k†`-ß„ìÊVxåvµ„ ¸,娢{L±ik`öy¶‰iVþVäd—Á<à€y/+DZ†žøŒ ÕŒ¦Efàëùa.¥hûr» -ÌAzÆ~˜žËß&ÒÏj8'ù��„IDAT"wÚD§LüBc%ø»a(xšì"œúÎ kgl¶.tZÍøîT²5›p¨å¥hº$Þû— ¨P‘X=3v=²všàŠzó øËþ vžŠ+‰TE4š¢Ä4irϣˑ ‚à‡;ôYŸ-_Kë¯ß ßq M[536o­C¿ `ºïžcƧ€€óì‹Óœ¡¾Ñ4û uÛÄ~þßÑÚ?z8ÍÂï²àðá&ÙcwÉç Õ ?m¢S&¾¡±+³·Ã;Ù_Áê•{°ÍÍUe[ÎÖ7Þû—$¨P‘X=›Yo3ZEݧ´a+M·jaüÛ,™¯EÓ…Óœlt¥°\’€€ º,Ý[BUÜ1…³(ÏÞx†ù¼Ï¬__ %C‚õØXǧ0Òyqš3Ô7š˜¥½1;LÒPa�¦¢‹²7Šäó„ꄟ6Ñ)ßÐX‰• ØõŸb§©™“ŸøžC08á@Á{ÿ’Š k`¸‡ZÝl0Ù©ÃîºßSXOQbš„ßQ÷é4R< Çü‰–ÃÕâB~™ÓÀÉTí®GBnð!<îì_þDfú) Goq™}Öu ²ßYX¯.¶Í¨lzWl¨o4a}uŸaó‚Ϧ�¿óG”dá’F:iâvÚD§LüCc%V|°éXÌÄrþÏÌ=¦2A±¼÷o%p°S©BDb-ŒÃ^s7\r5´fáwßGuþn©\cKî¤É†®~‡’ÌO ·O„ÞGð‡hðÚ¯àØ>ÙùOðÿku!¶{Å»=¸a©¨Äw7ÃäHËÒX„ -Åw#^š±'¯FIŸo¡åÑq‹óM€Ñ$xƒžÛ—P}¾ýÓâD(MG]B[DUûyh!H+ƒÆJ¬Ì`¸åkµ…^Ë1ŠÎª#¨ëž¼F9xï_rïTx—h•N~¸ZkP¶§•g/¢Þö&…Oš¢Å4½‹œC·Ä5UêJ&9˜‚çÁ÷ø¦õ,¦¢0íºseÅ(­<]½ # Qct£éæwåÈÕˆ÷™f3JzÅÉ#¢lÞ‡m$úhöY3®Åà‚£I¼AXa¯6Sí\ªÜÆGx>™Éh‘¥Ÿ'B+q`ò jŽÝ„+Jv#·õïÈßb„3QñÖ\÷/¹w*‰xƒ>©$Ì 0C‹yØIÓ˜z¥Ùó<C¾ÄžÞQ˜ÂÐÀˈ“q àñ¤[nÓ‹ÅÉþ‚¹ï"-cj:^ò{Ÿ ¯a­ø0´‰­iYÑŠá5N/ 0š˜;^J"ü5¹§ÐJ'M4VâÁ\JïËߴ¾k;ýZÏÆžÒJœÕ5,»›¥,<÷/Ùw* ÕIùÄ«G–?Í%8‚÷ÄË1o×?‚Ù®5¹'Ñø|\º¹Á‚Ë„]yåÒçO°þ^…ôwÍö°H«C}£IDcI´ú;°»Çç&JÁ¡Qö<‚ˆ +kA4B†\xá“.CøY˜ðÞ¿p’y§R”óË{0Þ£30U!£‰X×$©Ñ$ŒÁiþ¹šw‘Sf‚#âùÃ#Ûì\’$fí•ÛPÖ≋Á§¾ÑÄR.îdyÔC¯ç¡ìy34VÖ‹à9qïý[Ž$Ø©&á龇«ÁWéКݡ TŒ&b]“„FSà¬ÕÛ‘ž¶Úš‡ðH\Áxã~Å¥§€ðº ‡7âeXŸ 5騍·Çe“Q}£Iè‡éà9´‡Å0†á¼}y»ä‹ÚÑB V•µ@F“"p½S) 0Ú‡s Êò3Åq£Azþ!è8Ý-2šT…Œ¦5€ÏmǃÛõ0èts±á7~ÁC‡~îv%Rd2šÄyqä ŒEÅ9q#ŠjâyxÜ\°uÃTs‡Ó˜T?\æ2dçîCåYq\TFaÖ;HË(F3>ÏOõ&Q)~g=Š2³‘¿[ ­v;rÒ5HÓl…®kXv’‚±2h¬¬2šâç;•³ý Ø|îd£ðøe4Ùç›Â$FÇ–©ÖOÄ2šV¸¨õtÀX¾U[‹1á‹ídéÐè“]K‰ ‰Œ&áZNî×ålm¥íÎGVω|¦àµßBME‰Øß½(­2ânÇCŒ&«·Ð‰úc(f_êD-{ÞD4—~žà‚À0<o‘Ö˜ˆ•µ@FSüH–ʹú»W«P\ôjÌp²Â¶d4©M+d.‰Öþ­Å8Ûp6§ ¯F‹1 þQ¼r;ak¹ŠSE{p²õÉ” ’9„cè4ÝçØh𯍳 &Ãyèô? ±³£r™f׈jFÓýÆnÑþ‹Îr¹Ói!˜�FºÑùl¹½`Ó#Ž’ÿ?WÐXY d4ÅdÜ© Œày‡5ûQ|äsTZhNS2šV„0þoÔ«GÏJÜ\oð›±?>Ÿ ý‚HÉh41÷e'ÚÍFè™û§Þóƒnxü¬Ž…€™ÀÌ‚±Î>8J‘Ͳ´Šk¡¹ö.rOÜ‹ðvX;ªMfmzØ—kÑs§³'TÆó3*Ê/ãæ|ŠÆ%­:íG4`†‡‡%zac%ü5ûwâmѤ.¼îT²,w({žÚøð¨Û»Ì"L\À¥|VCÓ/œø}Åq¢Ì^ý¿:äC5™@ÿ£žåS\\h2þ oèeb™‚§ívdhÂÖçsM“û%Ì»~ ¯Qòþè[ìpûæ¬TÁÿ=¦ã8Ü8—~«f4Yªt¸\È]EUa´ºúÅÅÝÍË(ÏÛŠòú'²7û<¡2Q¦ñ]ùhØ�Ê.ECœ‚눵³uëVÉÄ6ßØï‰•@FSüá}§R\t6ˆ}»‚¦à"@|m»‡»ö×tâÁ ”Õ0 3yüÏ–µŸ&à0üfÝÍü2 ¿§w¯ž‚–Õ-å¢à·�ÏehÞA¶ök|gnE§Í›­VóœÒ~MfZ^óy_ɧ¿•Û„¢8f«f4 ºC;3vè‹ê#RŽ ˜hÿ YtÒÄrîyÂ\-_#W£A†ö[tD)FL¨Ë¿þõ/‰±4ßØï‰• >(úÿƒî¡Ð”x‰ÎúèjïÀÉvvØš[a÷&ê~èŸ,SxÙt÷¼<d¨ã§röy¶‰ ƒ¬ü­ÈÉ.ƒyÀóÞHÓ쀡‡6‚3¶)«áòà±|òï~ŒØÐ k g¡Í(!£‰GæÝË æ’y¤ LguÍMC°–oBve+¼rîll h)ÇÝcðèø)¸~ÄÁê6 /ôÍ'½¸]¹»Lýqyî¨f4-0Û ãn:ÇÃîžÖîÆ†t¬ß§äóDbü‰®ÚÏÁüC+ñ< ¥‘§MtÊ´V¦ð¼n74š,äoÏEv‰}7±—Õ*¸ŒÎòù ~ºï^ÛL+æ`‘”;•36oeõL÷]ÃÁsl >`?`Ÿá)‡EƒSÊj¸–1š˜×+"Ͳè•4ÀIùÇùb¶¦]ïõ“Uø%j›ž„Nßg01:žøSnv¨‘õL®eÆÚ_¿A¿ã2\N’>8늑™•Ý,~¶0'h˜jò. +Üæˆõ&v´ÜqyÙ;ðEÕYèÎVâó‚,ñ¿EuÙ4´d4%Á× sÅq!™‡2ÓSøhæŽÈÓ&:eZ+“p ±5xÄ?‰¾ºJœ³ï4~ ƒƒ‡ýµiŒ>æòÙ3-ùeðÃY=n%ÜhJ’JÁë×afR±ÏÇÎÀ:>…‘Îs( ¤ „²¾y÷<Á?€–Ÿ×RKÓü| àsÃÎ6ºŠ?á3:œ^øNŒ¦€ º,ùËE8Ol!>cÜ?AÏRŽ•â„¡=#auac$Fc¾þ_Q§«@±h •žÆÕ}Qãd4% q€{ZQ]‰´Œ=¨éx)ÔÂ0܃¡D¢™?m¢S¦Ø¼­øúôƒ9Wáq+޳b<àE§®„ƒ¸¢)ô›öÍížeíÄñÚ&Ø<쌄=+Æ0–è…R’ìTκná�‹#å(m›QÙþ&ô."¡PVÃ">§½PËÒük>Aeã3ÚØL æ7¿Ž¡¸¸Å•¸çý‰–Ãհ޳ӝ(Lv jwdˆ çLu£ñ~|¤› £IŽèÁÁ+û<_¦1b7¢ˆÅ%d|†ÚŽß#j­ˆ­W| ‘Ÿ97ÌŸ6Ñ)S,LÁuûHDÊÒPËü íË=LÔ"0·È@Ñ¡˜;œòÏòa4%ÉN¥ðÒŒ=yå0JÜ›n¡åÑ´àäÊjøœfTä¾ MÎ09¨¨m2"øû`á"{ž€Iû»Ñ'{ê%øÿ€µº[Œ½â¨äá5º.—!7èþüŽ_"ÕŒ&õ"öWüÅÇV@`ÄCu“¬¥Í>O¨‹àiÁÉ¢ˆú*mw~Š(£±®˜ÆKóçÈ+ÿGØbZl–<tqæ¶%Λ¡ ùŠâý8R| –„»ç%ÉN¥¯¿|¶‘èÇ]Â+º½|i|ýCY WŽ(ëßQ¾A61“ðfƒÓÄÌ{§õú ¨mê…O`¯mh¾Û-ïΜÄûêÁ÷ø¦õñi8€i×}œ++FiåèêmáðÖ Æªn؆ʫ?IŸßæÛhïW”jFSKéHÛp-AòyØCß «±bÎ7?JÊE2š8eÊÓm2šˆuF`›‹x(ø`;W “k¹‚Ï $+tƒìyI²Sé¹…2í1œeéУ´³å»°Íð4lá@( e5\!7°÷!#MƒŒ¢Ëèx>á 2ˆ^Ób ³ÏP·í=h²>Áöœ\”˜{Ñg>(êñ=ºecúƒ¸6$úY²z— ;wšà^bÐ͈ß'>VžjF“ßY¢÷?ƒñé°ø00–Ò·¢Ü`Tò)ÉhJ$Óu>„ÙX\Hèf<èöÌe4ŠãH| ˆsUJdã]XÊìc0ÍgôJÜ¥D$ v*=fÍgXZ®6£ŸK?”õ e5\ Óð´œF‘ÜýºÐv!?ë�¥ç™§0lÖ¢®_œ«§¨;ø l“âDè…qßN3Ò%×èÐEMG¿t¡¯†8…’¨f4-W¯Mµ'PR¼ŸÌKF+œ£ìÑJ1MÜD›îoÈ[4εw‘[až[°ĺbv}>²K¿(ì| :m¡8_±cÿV8Fuï'KJtÎw*åêЉ‡²Æ SÜ&£‰3ðZ/à´õµ¨¡YŒ[Ïà˜Õ‹ÀHtçùÍH—$ÌTG®WYK˜¦pÿ lM—QYrº†62š¸Ä‡Ãqqö!´§®Àlí€Õ[él…ù»¯¡Í~™‡~Ák^ÖhÄž§çÎÿ ¯äÞž€­úKüwÂÝß’!%zÇ,KÄꡬ†«$0 g»F=s)­Ñü+ºCÙ4ÅÈ„3fpûÀfh–ÜßdV¶a<ô6bƒh<væÇ¬6`Xëì€ýU|<1T3š†^.ÍJ$LÂÓ}ÆÊÏQZ¥G¹çñøåïä¢ÒꉛÐK™ºà‚ ÖB á ÄOLß)Ñ“²,«‡²®¶¹ó+t;>ˆ¸Ŧق 3K2z+Á‚ æ=ÛC ‹÷¸¥å1\ä¹Äq16†‰ˆ{?`«A‰I>Îvµ¨f4-Ÿbv~Ï#Ô’ÑÄ 3v=²všàŠ:ñ øËþ vŸ9±®à=¦) R¢'jdY"Ö€·U‡®Fd5ôã™Å;‹ý æðwÃPð4ÙE8õÖÎ.Øl]è´šñÝ©"q~Ø„C-/çNœŽ`Æn'šmo’K7Iøüâ³EðclÌÏoßý½h(‘;ÉÛL0uÁþG pb41È='6²ÞæCî1£˜ü̉uï1MÑR¢ßÅ#—߇g]5²,k@|¦hÃ: íCTã@¶É<n=†w²¿‚Õ+WDšÕµ² lËù¹$GxpïÆ#ŒG¨eöY3®ÙyuÎcq´Zdßî”#c³Û„l³cv) 7ÞbûI·Ÿ™Üu Ç4pd4E‡}žP™á>j]ÆÇVÀd§»ƒ±±^ˆÓd¯9ƒÆ„Ç4ÍÀÛ|‡®FdŸ›}Ë5;øŒhâð¡«B–%b x~Fyi L ž›0]*Cn^êí^zÖa;Ÿb§©yøÄ÷¢GîpìMÛ ˜odV´Î¹\s…h€þ wÏmT}ºÚ¿íDåín¸‡||n–^ õœ"êëÍØ/ã‹Æ—¡W±AF…ñà"ñ†l ‡8Ü÷Q¿F'e "Ö¢QrïÚ‡§¤n§Ü%xÌÅaÛ°–y<”uŒ'ø|誑e‰XþWp¿‘Þ‚ÏŽÚ9Økï&"_©cñÄËÅ/²y¢’b¹Ã Ky.™n.œ‚˜M5(ÍÝŠòú'âÍhší…ñcæªþ.²²2‘öA²6ˆó¤f7êžóRâ"aåIFÑjpÙˆV‰á䇫µe{JQyö"ê“Í7— –…w£DìŸå$J/]_|蚯ãRi>òʯÁ>”HSD^ºÑ²,Ù~ƒsˆÓÅ@Š"xÛpn%ê{ÆèYdÃ-_ã¨u(ôZŽQtV™«DpÄÝîažÖjñþÞ›pq·+¹éµ7ŸÀõj4±µ MÄ"7x¡°ÕN|Á»Q"À?8ˆ7’!9ßÓ+ØñþA˜]¼-’x}è Œ¾„ÓÖJ×l@}Ëb&”@ÔÕÄDð~üã#“OPsL\dËÅß p[ÿŽü-F8ITü#¼Bû¹Ã¨¨ïæ4ã!+s± IÓ¤d4‹Pb"åI6£„€·½û+®£‡Ë´µ>t…1ô÷!#MƒôÜ}øòó­ØTø7ì(¹Ê© S˜Ùg¨ÛöößîÀ²±™2¶Š°ØË_qù›V¸¦Ã&«é?Ð*.À÷”V⬮!" !A¬…Í Þ³ç©€jFSÿ£ž5ûk’Ѥd4„ ¼%üÃÛC7˜=Oó ô0 6=ŠÍ.L;Œ8²l€=¡*âý2úÊ…žÆj|º·Ûr·{\ò¥ÚSJ¼G‡\x1ÿ,­'G©Ì< Ðë® ÉÉÜyÅ×¶{¸k·u­jFÓ"l‡¤õú ¨mbØØkšïvÃ%Õ+M*AFA)@05mÚ˜ÜÓÁ×sFÓ�|¶ ( 9fF|,>ÿÓ6|€¬ÞÅY`ƒøZ³­ÏSÊõŒÅZRb‚X޹?ï ++r²Ë`pÀ¼w#Ò4;`è‰ÏØQßh µ¿MÖ'Øž“‹s/úÌ‘‘ö ÝËÅFF“JÑDD*0ùú¼08æ ÙëÒ}ô²4Tˆ+–œ4}‰›ö¼M5!2šÖ5ÉR<–s‚EË·Ö¡_0Ýw Ï=Æ$;¨qþ€}qrëUßhšy Ãfí\V—i'ê~3W€-Ð ã¾+²¾îd4©MA¤Ìáß_¬Éö»YY;Qyã)§ÁØ)LpͰ)ÅcšÈhZ¿$OñXî<°~}1”åvÖcg`ŸÂH繸y¨o4‰ÝöZ/àtp7U¶>ƒcV/#М—MAF“JÑDIJ�¾©àœêOÙt°ÄzdñžNÝìyd4­Oø¬c—¬Ìºná@6+qV*$Ø6£²ýMè]±¡¾Ñ4;€Û6C³äKiYÙ†ñÐÛ‘|žP2š" |%A_îÌC¸ýÛ-”elƒÁ‘ø2¼<#Œ:p—¥“·<‚{Z€à{އ?Ç5`˜X!õ¢éV¯¬k¾,¬~àð¦ÔÆ�Më’d,Ë1ÂK3ö䕸P.„µ[hyôGÜ<Ô7šÌ{¶£ÜøSØ—2ÃÒò®(™©ÈhR ÿ�u{Å…!Cù,$‘,ðl”þQ¼rw£±jöjw`Kå-ô¸‡à‹’X‡·¢bË×hqM@˜~Óž,¤çÄñ’ýÐu„ÞD¨Ã^6ÇW7Ÿ3FG@`´·O”£6NAÝÉMë^ëØ%+â:õá}ESí«o4á%š«NàªíMhq>Çì³f\³Ë3‘Ñ”ÔÈBBÉ�ßF‰NcapŽÜ•…Ò2‘•õ®øú=l«{&>’ 9fìߢ¨îwñ4ƒaëqdn(†Éå‡à6¡ˆNÛÕGƒÃTŽü¼}8q©7­è´Ù`c­ÓŠÆ›u¸tbr³wC×6˜‚ú!£iýBÅc“‰Mn˜µéÁßI›™­–Y‡H?O¨YH‚ø7J–u?Áîú£)û±2fŸ_þêûø£ïªóÞ ={&ಜÀáÆAɆ¡ÓuZa,ߊtÉÚ@lé£Dg†ÍÞB©ˆ�ÿÐ=´œ¹ÈNì®ãž—žÎÉMb4YÊ+pÉtsÑ=ÏTƒÒÜ­(¯"[�WúyBTÈBBÉ@2%ÁMŽ ŠiZ1ÂzŒû!>[4¹ÕhóŽÃe5B§»ˆú/Bm|¯ÑïøOð¤Éî¤ €eütß½ŠSÚ¡I+†ÙCOg‚PŠMtKJâìi­ïï½ —ÌÜHF“ú¨‘…„ ’î’…JÊž·r𠽡Ø/.™…ÏþtßXá&{I†iŒ>æòÓ5âs9ùeðÃY=n‘ÑD¤2a8Û~„A§ƒÎp -¶Á¸>`4É ¼Bû¹Ã¨¨ï–ÍpñÖÏq'j’‡ÿƒ!Zd©%¡",†§ié:Ù2$©ÍúMû‚.Œš¬8^Û´à¶(LŒaŒžÏDª"Úm'?&MƒôœíÐjw!?+¹'îÁ§q‘�£Éƒ{7a<¢ÿ”‚7ä³l5(1õ‘{‘bP$‚P2š–%0·ý®ž:€¢C50w81äŸ%£‰HifF|¬Ù]û‹Ågt`=uå8§XÕM”")ð÷¢¡D®ž–Ø4[Paꂇü̉ê „šÑ´2Xö>t˜kPQ¼GŠOÁBîyDŠt£ßa‚;ÂŽÏŠëÆBBŒ&JÁ?3v=6f—Âp3Ü=ÏŒŸt{ñqù?ÄŸ-¸ëˆˆM#ˆuÕAZ¯°lmm0ÎC§ÿ}%r€öZÌöغÝa.ûã°×œGÓk2 d f¼FÙóˆ”EðÙP³m/ô÷Í•+–,¸‡«å…(2ܾ~l>ƒc1œ:%Àh¢DIAàZÏðÀ+}@ÍØÎãÿøïÁÐ+‚XïP¤õ‰ΆRdkÂOÑß«ï;±VL³Ò5¿á¯ÐoÂë&>&ï’r^¢³¾ºÚ;púD#)à­¹vïTè ‘zcñ7„ÏéòM³­Ï×øðN€Ñ$ˆã»õú ¨mê…O_¿´`§øž|#%‚à a©B(¦‰H5¨ÒúCx݈’÷÷@ßb‡Û77› þ×è1§:M< ¢ñðéPÉ Æ$œÆc¨±SqWoü¼n74š,äoÏEv‰}7±7CMÁeôPÀ%‘²¼Aûù+hôÀãY¦ ùÖ¼†Ußhš}†ºmïA“õ ¶çä¢ÄÜ‹>óAd¤½‡C7ü¡·…CFS ˜&‚X€ê ­/¶ ØY÷ûã(Ü÷H$&mßâˆÙ5§£ÉÇ8wÄ‚—dˆLÂa(ÄÖàý;‰¾ºJœ³ï4~Is‘ÂLÁÓ~:Ý49ÇÄñ!¾¶ÝÃ]ûë¸ÍéêM3OaجE]ÿ0íDÝÁo`›gÂ@/Œû®À!ãŽ+ù<¡ ÓDaPÊñu…àú«Û0¼àŠÇê{q»r;v™úi^ãi‡¸&0ÀþW�¯¿Â1ëkÒKÁÛŠ¯O?˜sU·âØ1+Æ^têJ ³Ñi‘š6iÞAVþVäd—Á<à€yïF¤ivÀПq¡¾Ñ$Ú{^ëœN€³âx?#N†^F: +8/›)‡Œ¦-¦É~_4¾ ½"‚HF|pÖ#3+»µZh sæêÞä]@×8ÒóAÈXºsß'2™æ˜‚ëö‘ˆx¼PËü íãäB¤&A­uèL÷]ÃÁsÁ*˜XŒ¤á)â1³«o4Íàö9·/ 2+Û W©IòyB¼m¸ÑþgDL“Ï,ØÙÉ AD2#LÀÝùô%Е℡=#Ó¡$¸€¹åmÝ‚Òy7=Bd/ÍŸ#/èñæ b¹‹G.ɉH]¬__ ÅBÁzì ¬ãSé<‡‚8¹]«o4 .˜÷lG¹ñ'É€·´<†‹e‘Œ¦à1C»`І·QAnA$3þWp¿Yú†zð¨"ôŠH<“xÞdÁ£ˆ"ë©Í ¼Ígqèª #áâÙg°\³‹#ˆÔdÖu ²ß‘Y·nFeû›Ð»bC}£‰•y:Ñl{±ð0˜‘]ŒK?O¨‚çg”—ÖÀ´`ØÞ„éRró*Po÷’ÑDDòâiB•î6:çky„Ú£º#øT× ›ãÕá"8%TøW²( µÌãa "µ¦Ï+‡1ì@Æl¾…–GÈfæ^ ªMëEì¯øNÙjѱÁPÝOè7á°Ï*#³+øì¨Ý‘ƒ½æªOCDòõ$}¾i^ðwX=T÷FU¼ay4±)GnáRD£Ér¥—®‡- ¯ãRi>òʯÁ>'$‚HF¦àyx¶È“éÀüqÚSÍhj)ý�iŽ E² Â29a5V ?]ƒ4­™Œ&޼m8·¿õ=,•#AD’â¹}ݸ#êw¼h9…ÝF[ðg·óèN߃—&;õ ·ð À?8ˆ7aÌÀ÷ô v¼fúN<닪f4ùõ(zÿ3Ÿ‹0–Ò·¢Ü`„N×LFA¡,¾>8^,]\Î8-ø¶Ý+þ$>£†ÛP•wN6£+¡Ìm²êjØ ŠØ΢hëQr _–�¼í5Ø_q=Qbà bÝ£B}QÕŒ¦àCÈkGSí ”ïÆ'óÆ’Ñ ç(ËXD1MA‹°§#£ì:iR“ÉAôÿ™ÁpŽÚ/ ë ½&ä `Â7%®¡¨–‘š¨Q_TE£iÁ?[ÓeT–®¡Œ&‚ ¸…æŸT„U’ÿ7œ´k¯.žÔš—IÛ–ª|¤Ç)eðz%XØ3ónÿv eÛ`pP="ÅP¡¾hBŒ¦„IxºïÂXù9J«ô¨"÷<‚ 8ƒæ‚P‰h1Mé»`°ËUq$‚¯ÜÝh¬Úƒ½ÚØRy =î!Ê�I¤SðtÔAwúhr²Ø{¶ùuwí¯ã¶á’X£iYø]WÅ÷}ŠßB¿ çíŸ'ÔA@`b"xì/øÇ1£o(A$4ÿ¬SÃp¶ýƒNáZlƒäÒ”h<Í¢.î¡K’ ¾φü1¹Ô¬oüp ƒóÔ†¬,|–‰¬¬wÅ×ïa[Ý3ÊtK¤ ÁÓVÍ;ÈÊߊœì2˜0ï݈4Íz|¡wÅF‚&ÑXòtãîÕSÐfÿ?VxƒNšx&èçÿößîÀ²±Ùðä¼B¬whþY‡¯ÐvòhXjñœíÐjw!?+¹'îÁC»ó‰#0ŽÑ ™§ÊT7ïË­Æ’“¦ŠŸ`wý‰QÚØ$Rˆ‡›·Ö¡_0Ýw Ï=Æ$Ûìwþ€}qZ¯&Æh Œày‡5eHÿ--½�eúË8Kîyü"ø1úÊ…žÆj|º·Ûr·{\ò‘—9±¾¡ùgý1ë4âcÍvèÚ_,ž.†ÑSWŽCƒtª‘(„×èº\†\–(Š­ Z:´fwèM„ÁcÅ4)Œàõë‹¡ÏC°;ëøF:Ï¡ N1‘êM³}0íz_üÝ;È*üµMOB)�g01:.û¥hÑ’x‚‹ öðÚð²>xd}€ âkͶ:<§Í,bCóÏú#¸ÀÜa‚;Â:Ü&…®ÂÄÆèÔIU‚zÙ° •W’d¿2›o£½"ô.BÁ±1æÆHÙóˆÔdÖu ²ß >³¥m3*Ûß„ÞêMì¨Ìç†ýîUœ*þ ‡jÌèpzÅNF×,9iú7íx5J¾æÄú†æŸõ‡à³¡fÛ^èï?ZŒé¼‡«å…(2ܾ~l>ƒctê¤*‚Ë„;—³lS5Ò¬€¿wq˹Ҹ qåiÇ_ÑýK¤ ÂK3öä•Ã(Ùp¹…–GÀ§�£)œiŒ>抋KQ\ÙHîy<3ó†Í›(¦‰H)hþY®"w#—6:IW™Àkt莢¦£_šv¼¯†[)îžp¡é´7{Þ¼ÅÍH\W9ƉýFôÐq‘B£6þ_âÿSûîi‚ï96þ¼³ç‰_Öß‹ñW°Z쑬äó„ÌÀ7ø£â<,Œº10¯Û ø…æŸõÈ´Ÿ¿‚öÁ°…¹\òÅíaK¼¹ìWr,Å41ßS˜Ê¶!¯ø$.ÕÝD£µ#tRÚ…NknÖ}ƒÅ[½ãÚ<S¡ODŠ0nEÅ–¯Ñ⚀0ý ¦=YHÏ?ˆã%ûãV;F;6îD½þj›záØkšïvÃåø]úy"aPö<"¡ùg=2OûUètW«çA¬aÇÎÀüx>Ýø|û Î!2‚°TùV#Êó3Cå|Ó =W\šm¡8q‚H-fìߢ¨îwq>ŸÁ°õ827ÃäòKbUcE}£)¸ð~š¬O°='%æ^ô™"#í=ºá½-Z´p�eÏ#RšÖjÔó Ö€·7šû#âüxf±À>I®fRðyà•Ýp¾¡äDJ3ûüöUßÇ}÷P÷2+Z1,LÀe9ÃqŠOUßh ÆÅhQ×?L;QwðØØdè…qß8dŽ.hÑ’x({‘ªÐü³þP£ž±<fhÙsfIûÖ×qYô¬/Fa7Õà«‹ŠØ„0†ã>dˆs†&·mÞq¸¬FètQo{“¤FðZ/àtpœÅ¸õ ŽY½Œt@Wp6™ƒ é牄@Ùóˆ…æŸuˆ õ<ˆ5àiĉJ#n†g¿jС¤D‹ÝKÏš%¸aÖ¦#îY‚€oè | eÛTßhšÀ훡7·ƒ4ß4ȬlÃxèmáТ…({‘‚Ðü³þP£ž±&ÑÿçtèÅ<pÔV@o—[¤:d4„a[3Œzt:ê[þ×?õ&Áóží(7J‹×YZÃå“_‚K>O$Å¢y‚clJ¤�4ÿ¬?¢Öóxø?¢‚¶‰ÃÓ‚Z³CšÁÐý•ydÈBFA,°àžÇ’¢ìןoŦ¿aGÉUôD±/V‹úFæ²ç5¯Â¿-A$ šÖ#Sð<¼ÛˆôA°Õ ÄÔG ÐD-¦IS·”Á놿ì¨=þìÿcG·Û·¸žš|‚š¯îà5ÙþDŠ,Ž­yúG ˆ¶†Mb³ Ó#Ž˜úãâÞ›�£i ½ÏòA‹ÂŸèî^ ú”~ž B=hþY‡ø{ÑP"ç&Îè[Paꢴ͉Àszã¯Òtã 8y²/é0‚I8ÇPcÏöÀëÆ¯pŒ’f)ÈŒ]i{`rϹøÎMðÙ.Ä-V5F“–²b?Ëü £´³_ pÛe8¦ç†½ôóAêAóÏú#øpÍ.…áf¸{ž?éöâãòˆ?[p×1L Oµ‘išB] Jâ”2x=!¼nÂác,­rèÓ÷`ÿ‹$E¤ “O ÏÛ ƒc"ø2`Ó!룥‰_öÍ„Mæ¢äïÖB«]®‡™¥%¡E A‰‚æŸuHàZÏðÀ+Ý{œ±_Æ/C¯Õ‘;iêj…±d6êí”xh c°«‚ù%34Lھų‹ŒK"Eaá?øþb L¶7ØõÈÊÚ‰Êú.xãtR�£i;ûW5ùÑ¢… ˆDAóÏ:E˜A`†–—\%¦I“s·û'Co"0Íj‹Õü†¿„A4>J£OÄ<ñŒUUßh†á¸kÙÜ„N·_|=Žþ‡Í°ÜíŽj J>O¡"4ÿ¬G¦àél€^wMÎ1qé)¾¶ÝÃ]ûkJ‘H<wPcê–fÏó(Wse]4–ªqç_W挧Я "åP!VU}£‰¬Ø-ð “xnÚŒô”?€"Ý#„‡4Î#ý<A„zÐü³þ˜}^‡mšw•¿9Ùe08`Þ»Q|°î€¡Gî)D¨Âk+êŠp/óã™Åû$Nò0·<=¶n:rÓ#ˆÔDXUõ¦;ôEõè{- ·¢"ó}±c3a�¦¢‹°ÉlóÑ¢… ˆDAóÏúcÆaÀæ­uâsHÀtß5<÷“â£4À\¨hw∖r<-~Üë’é>4]û7FH@D*£B¬ªúFÓì3ÔíÓÁúÇÿ µº�šÌã°OÃï²àðá&ÙÚ’ÏA¨Í?ëÁë×CñC°;ëøF:ÏÅ-5-±<?£¼´¦…]â›0]*Cn^êí^2šæ ¼Dg} tµwàdE;Øš[a÷Î%Ï"ˆ”EáXUõ&ÌÀ×óŠ24HÓ|‚“mL¹à2K5^o“Ý)¡E ˆT„îûõǬëd¿Ô­´mFeû›Ð»Õñ¿‚ûÔd|vÔîÈÁ^óÀòõS†)<¯Û & ùÛs‘]bÆ@ßMì×Tš‚Ëèñ“iIJ‘�£‰! à{ƒ!ßÊöó–~žH¤"U`»Ü_|ñE°±û~þgÖØ¿ÉðÒŒ=yå0.œh°v -þ€Öœ\!xÛpn%ê{X‚µu ±µîwQ“è««Ä9ÛXð÷Nã—08(Ë A(E‚Œ¦ÕA‹u> =©‚Óé Þïrý‘ìLÁóð>l#½ÄÂ$<¶fõ¬Ø½õ-ÿ‰9ãÕzCð¶âëÓæŠÚŽ[qì˜ã/:u%ÐÙ(‘ A(MÄŠ!=©Äü)Sxc¿#B!„1ô÷!#MƒôÜ}øòó­ØTø7ì(¹Š»CˆLÁuû²5Ò¹)Ø2¿Bû8˜¡d4+†ô@¤r§MtÊDÊ!¸LØ©yúG Øô(6»0í0∩ŸÜó‚Lã¥ùsäS(‡¹—Zîâ‘ËG2"!£‰X1¤"Õ?m¢S&‚P–`•´=0¹çê ÍMðÙ.PVÃpƒxØü[Dâ,ÑÈôO‘ŒBAÈh"V éH5ÂO›è”‰ fò ôy;apL_l:d}ô²4T§éíø`;W “ËzMD¼!£‰X1¤"a'LtÊDj àéÀ÷k`²½AÀ®GVÖNTÞxJY àw6 D6e~4¹ÇDÙ ‚2DüQÍh則ô@¤"섉N™B%$Ùója²:0 `‘ ØõùÈ.ý7ÃcšÌנӢܸ“øs+£”8ƒ â «`ZŒ'¤'‚ B1²ç¥!oݽ…9™ÈØcÂói2œæ`§q­8wþWx%"™€­úKü·—Œ%‚P 2šˆCz"‚ ”böy¶iÞC~õ=ôÏ¿&ಜÀáÆAŠi C 5(¦‰ ”†Œ&bÅž‚ ¥ˆÌž7à6¡ˆ²ç… ˜&‚Hd4+†ôDA(Æ´u;·Cg ýÂ§é ²²PB'M!(¦‰ MÄŠ!=AÊ! 0ò·kþŽó-Ï14š¾Â¡šÂCÉ BDi²×œA#Å4„bÑD¬ÒA¡¨wÙ©‰åÜÓßs<lüwí¯É5oxïÝBûð”4¦iö,×ì˜ ½$"þÑD¬ÒA¡ãVTlù-® ÓÏ`Ú“…ôüƒ8^²º®‘ЛR�<æâàóxIË<ë04„RÑD¬ÒÿŽbE€po–x0ÔýôSt5A(ÆŒý[Õý.ŽÂ [#sCq0%‚G4š,'QzézX<Óu\*ÍG^ù5؇HJ¡d4+†ôÄ?¤£Xa ’sÐÝé€Íf kí¨+ý º–.8Üã´x#˜}~ ûªïã¾{¨Î{™­¦”ãÈmìÌÀ÷ô v¼f×TèwAÄ2šˆCzâÒQ¬,ãú²Ð2QPÝJéoŠÛjr«Ñæ‡Ëj„Nwõ¶7d4E%�o{ öW\GÜóB)Èh"V é‰HG±"M·.£î© '¬õ¡¥òŒöâÏ.8[jpºÅC‹8‚ˆ;ø†ÞÀG›Q˜Á¨£5è–gétcš2õw Ñrv/2„’ÑD¬ÒÿŽbe¾Þ^¼økζaÐé 76¢óùK8n\EûÛÅÆpûiäQŒAª3‹që l9ñ \þL?7aOÆûÈ/-GIQ º|³¡÷oÈh"V é‰HGqÀß‹†’ÍЈ²dò 6Í'8Ñú"h$Í>¯Ã6M6Ê褉 ÕaÅm¢® ^ÃZñ!6Ý€+ðܦ£ÐÙ|¡÷oÈh"V é‰HG±ÀëÆ2¼¯Õ£Åî¹ÍÂ?Ô Ó¡“h|-šMlŸÁGAª3…çuGQmu¢¯õ ò4¢Âú‚¿–á9Š E £‰X1¤'þ!ÅŠ6Ý‘¹]\ Ó´‹Kª0QgL†óÐé@cgF)¾I‚à놱h£8ß¿‹Ü“¿Â;õ¬—Eyé` º¡d4+†ôÄ?¤£Xù .S%ªÛ_‡Å+±EÜϨÌ+ÉõWèwAÄœ ¥ÈÖ„¹Æ2ÃàÄ=ÊVIÀ‡¡!7l¦|cu"™ByÈh"V é‰HGqÀï@]Ñ&dåï‚V»…9Á…[žîÆiÝFŠ!¼nDÉû{ o±Ãí›Û¶ü¯Ñc:NušdqìMGz\’ÒøËnÄñFw„œLÚ¿ÃWM+‘¿€À¨m¦Zèt506>ÂóÑéпŋûé÷›¥Ò†zð¨"ôŠ ä!£‰X1¤'þ!ÅÁïBç =*Š‹PTú O1B;Ý¡(Ûì¬û}É¢Wp›PDÙ*eˆ§Ñ$2í€qŸö¿Â4 ¢ñðiX‡ßæö'Àïl@Iö;ÁçÐ|ÓäžB«'ΩÐcé§§ UºÛè”/·áQÝ|ªk†Íñ‚ÒÝQ!£‰X1¤'þ!ÅÊ ¼÷nááxăwö,×ì˜ ½$"þ®q°º à ‹Vvrыە۱ËÔ¿ü BJg£I¼ÊëÆ¯pŒ%–¾0íüûj~Ã[“™ÑR’­þìîñ¹þ~ õ˜pèp^ÇUy1ôÓc†6dÐÉ7 Ò þk¼ =b]@F±bHOüC:Š•€øL-=<#Zæñì¶±v|pÖ#3+»µZh s.Ž=MÞtEnd"SrÚÑíöÅÏ œ|ŒsG,x¼àlçª`~¹»€ ºuèìˆ0�SÑEØâ}L¸Ö~zî@_÷nIñr^´œÂn£-ø³Ûù t§ïÁ7¡ë2šˆCzâÒQ¬ˆF“å$J/]VÜŸk×q©4yå×`"!‚PaîΟ ¯(¶¨' Íè‰w\ I8ÇPc ±×M8|¬Ã+1„~˜žCûp˜®ÃpÞ>‰¼]&¸ân€¬±Ÿ¾>8^,=EšqZðm»WüI»Ý†ª¼sñ7ôˆ¤‡Œ&bÅžø‡t+üƒƒx#yøÎÀ÷ô v¼f¹l„bxÛpãᛈS?žY,°OÆ}ÕMDaαà_ßÍ%+ƒÅ4Õ£(3ù»µÐj·#']ƒ4ÍV躆ãwÆšúù¶{löê¶¥#£ì:i"–@F±bHOüC:R‚�¼í5Ø_q=>r"ňo*àz¡4ÌÝm'6•λ¿­”YøÝ¸¡?†bí^”ž¨EcÏ›¹ø&EXC?ßzMÁcû7œ4×2ÑD¬ÒÿŽ‚HZ<?£¼´¦ר›0]*Cn^êí^2šTCÀôó»¸öhh2÷àÞ¥efŸ5ãš}<ô*Þ¬¡Ÿt1@F±bHOüC:""i‘©¡#øì¨Ý‘ƒ½æ*઴¶8°üÙʺ[:À¢~ä™ËäÇžAÒ¦AfÅ ãÖJÀ…&ã¯Ëô- ºÇˆ £‰X1¤'þ!±ž¼m8·¿õ=ct  ¢ÁS¢EùYtº(íì(,±ˆæU4ܰ”Wà’éfèGl¦”ænEyý Å]y³ð{ºq÷ê)hYm(­y™¾-ÝcÄJ!£‰ˆÊÝ»wñÅ_,4¦§ùŸ¯^½zÁ4–â@à%:ëk «½3ç×ðÀÖÜ »—’@±‰vJÑ–5L&0èŽHø Œái­ïï½ W¼Žp#xÞaFMYA0}ZzÊô—qV×¼ £i£Î6˜ ç¡Óÿ€ÆÎ>ŒRA[bÑDDexxxé¤jÿú׿Bï"x‚醈…)<¯Û & ùÛs‘]bÆ@ßMìÍÐ@Sp=~z°±Þpãgc;ÆÂ¦·€Mb³;ôJDðÂj¼»ºÓáÚÏFE}7|ñ˜:gû`Úõ¾øœ{Y…_¢¶é <~fÍ`b4TP÷­øàl(E¶&|Mó.rO܃‡ 'â-ÑD,Ëý×…M,smëÖ­¡%xƒÆR¬LÂa(ÄÖºß!ˆ?÷ÕUâœm,ø{§ñK“so#‚X7ü…±ÑIÉ)Ñ£iU†‰RøÜ°ß½ŠSÅŸáPN/üÂÊû&¼nDÉû{ o±Ãí›û„àÓqn$÷<bYÈh"–Eî´‰N™ø…ÆRìÞV|}úÁ\àò¸ÇŽY1ð¢SWm¥5K‚X=¡EñƒŸQÇ\§t:è?¢å¡#t¢@(ƒ(÷€4 ÄR£IÀŒø~ŒŠiŒ>抋KQ\Ù¸¢S°€ív7ŤnŠt¶…ïÑD¼•ðÓ&:eâK±2×í#®¡–ùÚÇiáFŠÀb ÈgQ#ÇžØ4Ù{¡kì›·M6qö[d©Ñ4†NÓý%†‰à{‰¡ÄÆ{ þ>XV˜=OpýˆƒÕm^pÅ ÆÑ^ܮ܎]¦~ŽŒB‚G¶Âr: Mˆá¯ÿ÷ÿ7ô.‚ÂO›è”‰o˜ŽˆX˜ÆKóçÈ+ÿÇb(Ö,wñÈå£*A(¿ ûw`ÏÙëhµ9á~5Š…ðAÁÑW.8m-¸zjvž¤Ø“øã†¹(ù»µÐjçÚîüldäl_x­Ý¬¢ÈDoÐ^¹J[0ú²ˆާõú ¨mb4{mCóÝnxW|Oøà¬+FfV>v³ïU˜L(¡É»€®q*hK,OÂVXìÄb~!ÙØ"à vÚD§LüÃÆ#A<lþ #’g°øpöO‘ëAÄa]5Õø~Eéž§1ò[=ÎüøLü‰ˆK¦%MÖhz‰Æ0F?i^9Ðí Íœ¢<6æ_ûæÓì3Ôm{š¬O°='%æ^ô™"#í=ºá½í­pwþ}E ´E¥8ahFÏÝQÄÛIØ ‹XDK¬±Å9ÁÌýí·ßB¯^acˆPlç*ar­ø±LÄJ˜~ Ç﫨ð ëWF×¼ò&–²Ô=o)rîy¼n9…=å§—Öu µ³å»°ÍðT4rç3“îFÝó5ºóÍ<…a³uýâ秨;ø l“âè…qß8VrPä}Ë£‘ˆûÍg ììZ± ]aÉ6Ñ)A¬2šbE€ßÙ€V,1bnbM“{ &Ûà¢ëAñc¤Ï–Û˜0í0â¨$Ö†ˆ¥‰ –%;µyx ºòù*Ö›Ñ?;ƒ‘®ïpèÐwèY«\�^뜶¾û1‹që³z逮à<l+q𘡕™ÛÓÒ>DE𺄮°"O›è”‰ bƒ#"&`×ç#»ô[Ü i2‹‹m!Ê?‰?·Â1J¾ïw<?£¢ürÄØ oõâ8üZ2šâŒ­-,?«M »¥cEÉcv�·l†&lÝ8×4ȬlÃxèmËâiĉJ£ôkС¤D‹ÝKF±, _a…Ÿ6Ñ)AÄGD,°ÀâVœ;ÿ+¼’§çlÕ_⿽d,„bD5š~Äwå[‚‹eMv)œ”ú?¾¸a.Ñ¢ü¬¼‹]°ý…%–%ÙóÞÎ8lãcl .˜÷lm^-Þ––ÇpùV87O¢ÿÏÈø¥ 8j+ ·¯Èì"R˜„¯°æO›è”‰ b‡Œ¦ø »®ÓDŠ#çž'LÀÕò5r5dh¿E‡'±é­×'¢Ñ¤M_ØÀŽÚ´‘‰  `¨ËˆÒÜŒU~n5ÌeÏk¶½Yû‰§µf<Ïbs?EceÒ©Nñ¸Xa±Ó&:e"ˆØa("(¦‰ ¸!ð'ºj?CFڻȭlÄó•ž&«D4š>;ö‰e&¶‰vT~¶ŒñLÒ‰‚H×7vÔÞ¿òÌvË2†^‡ËVËþDw÷2±IÑbš4Ðu„ÞDòÐ ‹ Ölò'bbš‚_/Ì[ Ñä¡Ìô”ŠÚ*Šh4ë—O¤°AW¼ŒÑ$ôôs?LîH×·( $Ö„–²b›á¶ËpLGù‹ž;Ð…Íf[l 8y²/©þñh…EÄ™�ü~:àNd4ÅJô˜&{Í4RLA(Ìܬ.ÈDZÆÔt¼”ºL ÃpN„^ñáO´”•Áäú+ôz)‚Ë„¿•-WÄvÃ58Pó®p×7fÃ/qrÏ[A=©`;3KK.‡lLÓúëJPÒ8'ãŽX¯Ð ‹X$àB“Q\,†^®‰€ çJnÀE;6 Œ¦X™÷Þ-´OIcšfŸÁrÍŽÉÐK‚ ”`#v#Š24¢Áôj;~[|‡Z¯5·({^|aFƒÙ¢q#÷ì¸ÑRñ1>6öFw ž]pw oq‹iÂãÎþ·dù{ r'M]­0–lÂF½=¶këZa¥<³ð{ºq÷ê)hYÇŠ'7œ ¥ÈÖÈLÌÿ¼¢6Ï$íÚ¨ “? xÌÅ÷s¨e‡u˜©¡‚§'‹äNÛîüQÊñ¸#xncÆ{È)½„ƇOÑ4RûÑóðgJó ÙðL®å’pðºñ4Nš;¤ kÎ!…,¬"C_”˜&MÎQÜî§m1byh…•ªFð¼ÃŒš²¤³I#½�eúË8«k^™Ñ4c‡~cJ 7Ââ>Äö“ÚËad?ߥªíJó¿ÿû¿p: Mþá¯Ù¿«A4š,'QzézØ}}—Jó‘W~ ö!r=%ˆ„2eƒé6Mñ'�o‡;Ø)_˜1lšOp¢õÅò†0 G£ã-tºýâëqô?l†ån7¼qó<‰C†>ÏÔ˜º#N0ßÀGÞ1Ä £)™íƒi×ûâDó² ¿DmÓxüìÐ}£ã+Üš‚§õÎ?ðHO“Dcªæ‹¦ÄÀK1Âk…·ììl2šV�ÿà ÞHojøž^ÁŽ÷¼ìN+Aña£Î‡0k‚Áýz£º=¡¬•3ÐW!˜ç‰ ÃW(e'~E¥8qéG´÷¯ÀkdÖŠÝ8Ñ2 êiÏMû‘‘^€ÒãP¤{„¸TÖŠG†>A¼fèþ!ÖM)‰€€Ï ûÝ«8UüÕ˜ÑáôŠÝjŒ&†x€Ô]Ið÷Ák\±*ækE6ö !âA�Þö쯸ŽJyLÊD›îoÈX2§1·o3œ4ÀƒÖÇ[ây&ÐÝÒýÙμOŠêÑ/Ú#Âp+*2ßG‘©a�¦¢‹Ëgæ[)ªdè#ˆèÑ”òLcôyÌ5ÇP\\ŠâÊÆ5làsÙÐTû% ³VEÄ‹ÈÓ&:eZ+³ðõöâEd´óÛj|è1ì€Fó!´§®Àl ÅÇt¶ÂüÝ×Ðf¿‹ÌC¿à5 Ä8ㆹD‹ò·¥ò.±D¶³Dût°þñ?h­.€&: ¿Ë‚Ç›â¤352ôDtÈh"Xí)‘à G[t%ã¢4ÙE8õÝUÔÐI“ÊDž6Ñ)ÓZa1MÇ =~fé‚!TûCð4ãЦ<úåQOÆ­('•V¬ÇCðU¦…Î6ú D£I›.y†È¶e7Dgàëùa.ó¡æœló`Êõ�—uU8QÛ‰‘xL–qÉÐò´yð3ê çƒó»Þø#Z:Ba 2šRV£õú ¨mê…O`¯mh^MÀ¦ðm'ò IÛ€¬"Ì} ~–ŽÉÅüi2ÅËžw�Yù»d2wÍÕþ £‰ ”aÆ®GÖN\Q–€¿ìß`‡áé[\ɈÕáÆÏÆvŒ…ËÝcF±Î¶h¼¾­¸mf¼Á/Ìäk’3ô^¢ÓXüt™dbÓdï…®‘­‰Bï'ˆÈhJEB»5š¬O°='%æ^ô™"#í=ºWL„ëZa¬<‚Jã]t{&Ä ³¦š;tLž�æO›è”)f0òø1žÑŠŒ T'`Ó!+|¡.Gäbžˆal4¢DȪ&•ÊFáq>FS0IÈyê[Vv]/öïÀž³×ÑjsÂýj4”XDDðcô• N[ ®žÚ‡'ïÉ׫"R2šR‘`-êXÅìi'ê~Û¤8AzaÜwŽÕ.…18ê?G–æ=¤¿§¡˜¦òÙgŸÑ)“âøñÌb‚ âÇp µb<ôr)&;uØ]÷{ì‹o" C½hÕÿ ²£®ó¹“—©NTí[æÙ®J’0ÀôQüåäoúÚe0öŒE¿'„atÕTãûåÞ³À4F~«Ç™Ÿ‰?„2šR’�¼Ö 8meí³·žÁ1«‘è ί0ËÍ,üâÄÚfºˆ²üL°ôåÙÚS¸Úò+šm ½‹ ’¹ÌOòî‹íCTÇAñcöš3¸á’ówŸ9îû¨Îß £såþÄêü£xL°àF¿{ÿ lõ‡Ågür¢*”! fÏK‡¦ ]#¢I3ú5ýµG~ŠîÖ9ýŽßWb0…xÐõ+Õ™$–BFS*2;€Û6C³d!¨AfeÛ2»|aƒ°VïB–†UÒþ ö7ä.A¬þ‚ËT‚¼òËau@n¢A·[%¿³ Ùî%£‰ âMà\6¢Ub8ùáj­AÙžRTž½ˆzÛ{jŒG2¡×ù––öÄ KÊÄ•àiV:v˜æô?o4ùþ½ò ß‘nt>[Îè0í0⨙ (K!£)\0ïÙŽrãO¡à\³´<†kU50XÐç\½§ªÒb”V]Å]»Öß褉HR|°éŽÌ¹®†3ÑŽÊåhñÒÖ�A( U•â‘bfv}!>6<scFSÖ‡ÈÉz™­^I=?£B²Ùê¡Ó~-M„ d4¥$£ø¿~iÀíåvëV]—&ä®×P…ËÕr ®aÙ™Nâp£+lGu>û·(ÐlÞ>úAê 01 Úü㣴ÐñG•x¤8Á2à}¯‡Îô#±ßY›PXù+Ýðj4ýˆïÊ·=p4Ù¥hpúB ˆEÈhJIܰ”ãøÛ Ù…êÒÈ3†^‡G4•¤¯ì¸÷Ø½Š |Á~˜Kr‘[|gugQõÅdi4È(ª‡s!ÝAªÌöúößîÀ²±™Ò+@´x¤ßpîÿ´àuèe†á¸k œ&tºÅU†0Žþ‡Í°¬¦\Šœ{ž0WË×Èeó¼ö[tx"< "M)‰æ¢äCÙæêÒÈ#ox-ß…mÁ£óix~9ŠM›Žâå !’ŒÀkØ-5¨(.‚¶¨ UÆ{p®Êu• ˆ˜ ¥‚îi¬Æ§{‹ð·-'q»Ç%­D¬ÑP²^ÄþŠC›A‘ñHâë ÕM+÷ ŒÃmÿ·ë sk½7ZþGÜ\û†`­Ø-ð “xnÚŒô”?€"Ý#¬él(ð'ºj?CsC¬lÄsšç‰e £)%ÂãÎþwë–1¼›Ñ?KF¿ˆCÿ%îX¦l-¸ï¥*A¨Å¬ÓˆY\͆õÁ»ø ël`îSÛêðœ¼ôbäO´”~ ÊöZ†#Œ¥Q'¬óE`WTBD4À:@y0“ndL”Ø4ŠFMSìO̰¨ý¢6—åô}™ú`*º¸ÂÌ¿‹¾^˜+¶@£ÉC™é)µ%Þ M)I4×:ºWèˈΠ¼÷›ñh"BK³Ï`¹fÇdèåÚðÁv®&Ù´¾„0ô—K· }Éÿf™š¡KNš¾ÄMû�^úãtr‘Êð;ëQôþg0>F ÒXJߊrƒ:]ó[Œ&–Dâ0¶îù;ZmpºÿÄèBÜÙ,ü£ÂíìBËÕS(Úy­±¸¾1WÍ}:Xÿø´V@“yÖáiø]>Ü„×+¾)ÄïêiEuhäeìAMÇKé&¢0 ÷ ůK!£)%‰—k8!zž,Væ6=€cˆ|ãC�sqÄ¢=Ô‚Š•˜«ì¡Ø€’ìwd¯£É=“mp±*:!2 ‡a+6Tâê͈@aËCô“°B]‚ÅØ7QL“"ˆÆƒ×ަÚ()ÞOæ%£ÎQöì0˜ÿ?3ïúŽ}ß½‚SñoØ`<cÁó¨±Òo#¬¸­æœló`Êõ�—Ù¦Þ†‘]v#vãÜ52>CmÇïðkR…µ^3jnQö<b)d4¥$ñp­ ›¼ÒÞAVþ.h sž±¦ç±ƒ Ñh²œAåÕð´ð¬^P)Jt؇Vrâ1»>Ù¥ßFd º¶0”r¾ŽQZ‚,Âê4íÇÎù: á̰ÒXc‚ âÅ,ücã”=OaVÀ¶é2*KŽ@×жB£ÉŽU¸µMáU×ÿ/ÆgŽh|ùÞ¬9®Mð´àd‘ÌÚ'¬íÎÏA¥'d £)%‰ƒk]0£Ñ{Ðäÿ­ýc¡£mñá¶êcrB“ø3Rެòùg—`Ÿ\‰€ç\Îÿ^ÉÛEcªæ )>GQfÃÿ‚îÀ%t¸Âw_¢Ïü=n‘{AÄ—¿zÑt«wåWYñÛ;"æ4"n“ðtß…±òs”VéQõV÷¼yV°®Ÿ_†£·ø/I2eƒéÿßÞýÿ4yïÿãçè/ûÑL–~Xrb?¸˜~Àœ…Í o£#ý ™0sg5¢ËDÍË˸µïÍâqÍÑ~PëÆ•ª€¢ÒMñ˜t[ù@? D8­Xg‘oïBŠ´\÷Ïu•Š¥´P´H»ë~;yf;Ï9¯ëy¿žçãyƒ¡‰æchR­)Œt߇Ùp‚`@uÃïp/å ^äÉܯ¼á†LŠä‡ûúˆÂ&în¸þ¼Šu¹lñ÷ ’üþ¹72¥½ªåî04E1‰Ç¦ÂàYóK¹§‰(ñ&ñ´î ¾ªéÀð‚K¹ü#]¸q¤ U<Cgù)å÷­¨Š;4¹`)¯À‘eͳC©”(š¸K¼ ÊèÄàö:£ˆŸÛÝ¡rõ�ü,+ (šTÉÏýãÈQNÿNÏFAp9:ïå[Â&Í ôš>Ãzáa¨)²æG”ågbUI-WšÞZì=Mšœ3hó.µDE)ipË/dÉ¡€ éy=­ÁC› ¶Ùц–íxÆ)QâI£p˜Ë—»GΚPSkEË«¿{-VÔÖ˜pöÈNädB¸?ªl ·ãÆÝÚv9²Æ6ÝS‹mCsŒÆ;4ÕüP63ßЬGÉ•%¬*.ÿ�î Ÿbͼûëj䔋<^‚bbhR£é.7d _¸¶º4…‘ÎjìÚ»„Ò:ÿ tÞ8‹ãgÐ75 MöžÅ} —�rhºVãÚæLÜ›Í'q´Öÿ¤AòaÐqW„]ÈQ6ùj>„öØ¿pYÿWšbz‰Ñ‘ÈsEØqhy)Oþ­0–mœß¹2}J¶„÷CÁ½ÍÚô¹Ÿó¼¡AFy#†âúУ•ç)%û·p$guô.u+‹NÃh‚÷Âó­Í¡pÞñ‡¯¡ÍZŒ½·øà—¢bhR£`7¢Ï`vE4y/­“&02úræë1)Ë÷aÝóªxSK˜{š¤G0}²µÏã¹õ0tÿÖ)Oø2w@›ñ8¸¹Wù-65ˆŽ‰V–²*þ vãÿÍå»ÂZXSâ¸`©p9¸t•ÙÐ Õ¯WˆjΡ,w#ʪÃà]ï&áiûW°Y”&ç(j%ÇÜ`ÌŠ²U9¨°º£8É× K©‚m4ô¢×šÔH]_„­º[h›]ÅhFãÅrl(2àžòúa ެ_àiKX÷¼ô (>ô9òÖ}í–R;GœÞZ´•&Úîý€’Œ¡³Ç{†„²@9{ã+ì©0â¶R³íE¯ù<›DÅŽƒD+/Tžœ.pì²Ç€+TzvhìkÆ›¾BfÜ+Ma¤Qt‹‡£YìR3ITî°ë¹Õ gÌÿO^ڿö¶§(šÔHrBÜãäîð¡)„éqŒR;©æ­éÐäëÑ6<%ßãlŠE¸•înû~Zà‚Dñ Mæ}_ä›ÐÞkè[ò9rÈu\BIæj¤§¯–ÿîiŠN™ì8H´ÂšÞ)¥d¿P@ËXØõM>U…xo©ßÿXoFzÚZhõàžSÒàÇ ×³ÝÓä· Èlòÿ’¸E/öR%†&Õ˜Ä`ÿÓÐy Ók:}SÿœÎlóÇ xcÕpEvÏ{š¼¿BÈ?ÃÝ[SVšÎÃÜ5·{ž{л¤ ¹ä{Çý«Ð•æ÷ h²Špìâ-4×ÝDë0@,’÷¿h­»�rh¢áX’Gô14½[ 7ŸBnÖì¯<áT¾ÈÏ„F>E&Gœ!G‚ø7‹Ö"Mù÷ªàqø½+8ÚaÖß\ÙîyC øò€c¡—óI˜hPhz43·! ÃФ.ˆÅº×7 )�àm. c°ë °ÁÐà.%4e~ˆìÌÕKØ8J ‘|N<¨ÖC¨º9ÓÍÇ¾vO¼6¦à¶žBAæ*¤irQzžHK_RHÞöÐ rŠ÷㋼h?E‰1žSï‰èíÉðÁØÚ]ü;÷Îàíû&¡ÅZ-ŠöœÀÅŸ{ãÿü¥'h8º3êa±³£0™E+Ýr\ž»èOâjÔ¦>Óð¹îâx^!ŒÝlúCó14©FDhJÿS´ü[Áü›<·C—¹?%Uýrê ¤ÉDÞæd•ˆèï­ÁeSmþ9t.eÙÃ?—ý.V–b»r#¼ýz[îáW®4EñNóùs/€®m~¥kžPÑ= GÕq˜‹5G!"JEÓ(ZÌwWþœ&å€äsF4Î N>8õ(ݾ§¾EµíWšh†&ÕX†ÐDËhC6K”3±*p:ØÍgÝÆC08fNÇZª™r½Ë¨Ü²{š¢RAüi[ÌpB“GþgÉ’&"J ‰lì4Ó|¨I4Δ7ëŒno"!à¼û0âþ'Þ¹ÿ½o]mCjÄФ M©Fò4âë?Ï”:ŽYqð c~Zâž¼OÃÛÕ…'‘Ýz¥¿`¿cƒ‹›t¢#ª]Ü Up›m(¡)e¯…&ã0¬C\#¢¿™„5vš„ûþ7Ø¢„¯ˆ&FšœC»W¨³.;P‚04©CSj™„óÆ>d)g,EÜ|Ò2¾BÓX<ç–øá¶„öðIÊ¿WãÔ~l: ’»{×åbï­'+s3KJò¿å¾~„mXÙ»—Ì‚£¸ê`+}"úJHc' ¾ÎsÈ׬B–ökü 6¢%tœ‰U<cÚ¡É(GC\g &C%C“j04¥–)<¿@nÙ¿ÂÎ ’‡å6Zû†ã<˜Vé@õ92ó¶EÙ”{bß$C‘ê%¢±Ó ¬eëUÑO´”4§¥ ÿâÍŠËßC%C“j$:4…ŒNò ½µEÏaø{ÀSW­ºf Ïùj¸çÁ´ ?|ˆV”ÑBÞ¶±“²Z•ùÙÂÍr^þÝ–sp¼ë{C%C“jŒ£¯µƒÁ ¸w-6ŒG$žéžz\²Ç>½`.,•zÜliƒ-¸­&ìùD@ƒÍ———¨7§¬íAVþ~\´¿˜¹Øû_À~e?²5K;˜Vò À6{æÐUXÞ<ˆˆ(q‚«S‹«µB/ M” Mª$_¸´éó÷ʤi–°ëÏé›qÜú„ª7"Á70€SrP2Ÿp¥çKÖC³f¾®<‡;žøÕ½>s( šÌ<j7#;=ÛÍ=3eDDDoí/4|yÖ…öÛN4£²°}qÍ1ˆ¡‰„¡I•\°©ÄÅš°½2b5„’=,öÐjÔb\¸¦»ŠWĉßOPQh„]ùµËA‡/UoBòûPš4­Òè½0þ9¶„½G¯ÎzÚ„ã½ð†êÌ%_/,_EíJlÈMzxîÖ£u<âÆ?ÝË%û»¯Å'"J JçÑó8xµ7j8‘|ÿ…õxþiìB<mŒŠ¡‰„¡I•¼è|K˜rü€Ït¿Å91E—ã)^Žtã¾¹ ‚ ‡±¶_tàê÷0¬¼ÅÿM•;x¶ÍQ:ßCñî|¤§­…Vÿ3ºÿ¼…ÓGΡÞ"Oêã:˜6òÌ¡W¦à2à÷%*¥,²xþª©2Ørœˆ(Ì$ûŸÂ;{™„ûçã»Æÿ†U2Ès ç]œ.-ÆžŠ“ªmûtß_?ZÛ= <p”àzÆ;+~ì.%9†&UrázU-…¯¹ø³öÖ¥/V“üŠ_÷”d­š3±ÔäC£{RþýÐ*Çš2®4½‘™É»&k7ŒmÍ>!›)·Ûçž&ùfÕ[­ëOÃ6º]øº`.û™«öp¥)*%¬ ¨¼\¶ [ƒ+ÂNl,»û ?3"¢Ñö(ÉÄŸ"—¤ ¸Ûïàâ±"diÒ¡]¡ß ŠŽ¡I•bíGZ¡q­?H¨-É…Vwv×ØÌ¤^òa°ÓŒ½_Öá¹$_8Ýv<X©ÃìRž<y¿öÄ%€†“ƒPº¼ñ8La¸³úãߣ¡ob&48�ýýÙ Fá$Lô÷ã¯ÈZåÇ:´Åý¹ýÝ­Pc‡·"ÏMFzÑ,êQš—!Ï{4HÏÛ Ý…3®14ÑšTIÙd»ÞÙš`>z µO#'é1(r¶šæoè”úa.ú6Å.¢ÉifOÓÛ›Û=ïlð1ÉÆ ‡Õë >[…uÃÕ}•9XÒHD4+õBÓtßlK× M“…‚ÃçP÷ê~(M`dtvéD2†&Uж§I¾fô™ðII-žÇ3¡–ú`Þ}MCa=ØüCè¾q¹ÛÌprRž^wÏ[ƒœâýø"/ÚOQbl«C§×fÊ"ç¯Âj¾± öWeŽDDª—Š+M~x]vܾX‰â¢ýЋÍèôAbh¢804©R´•¦_qÏø92Öê`kyCÙÓT¢Œ,äj¡ ¶²VžÞl„ÐåÐ[Z/á4ï€FS�]Û r«€M¨€è…£êøÂ‡ª–Rù ¿üöwCö^ úXšGDôZ*†¦0þa<n¡/ß…â}_ ÂÂò<ZC“*ÅØÓ¤ÉÅÞ½K8¿g>W ®ê¢X»{ŽT¡¶3t+%Èîy¯B“Gþg KÍ¢’àìÄíÿG¡ê&º•ÓðýnØêa÷ÄYºJD¤ )šfÉsçMvÏ£E14©’ ×ô"ºÂöl¸ÝÏ0è]Ê•Ï;W[1±¤4ÝSKö±Ð+ZYʹzän¨‚cJùF)¡)e¯…†í³cxu¶U&ò6ç «DDo v¬Ñ@“Ü FD’Š¡iî–+Ð çQlT%¿¶ÝÁmûs>ð¥E14©Ò0:ì®yÌIÏh»=xŒÕª4 2Ê1Ĺe’Pn—ð­ð#lÃc°ëò‘YpWìj݆l4=R"'zM8m ~½Ûx·%"š1޾ÖÎ8ÄOÓMؤY…̼ÈÎ*…Øï€¸c-Ò4[`èdõ-Œ¡I•\°”ãð)‚ÒQ-4N•mÃ&C¦äÿ¸oÀºupË«XOþ3ÊÊqÖvžY=9QVý[J]D‰ÂIžF|}âç™à?fÅÁƒVŒù=haI#ÑÒø¨3þOèåJ 8 X¿Qéü«œcx »O?Ä„R–Ý};åùë/h! Mªä‚X”jà1¾Ñ7OhÇ€+¢áƒ4ŠŽ*->ØQ'÷ÌSJš„óÆ>di"WPå‘ñšÆøƒMD´°iøÜí¸}ñ´ÊøZI³[HrÃúõ·¡òôAXž„ulÃ-§‘/ØX¢G bhR¥A<léKüéšN‰òj¶³¦T5…§âÈ-û×ëTeXn£ÕéeI#Q,¯ºÑ•æ#]yДžRÝ9œê“&4M;¯ás%ÈE>K[Ц¡wEÇФJnܵØ01d¢�<õßàÀe†Ãÿ~L÷ÀrÉîh""ŠbºæmÈác2 ¡ªî7¸ƒÇ40>2–4+8ÒSÛsË` (&^CCëù°—ÅФJlâ |x1ïûéÇ`ûïèc'¸(bn+v$"ŠA‚ßë‚ýöE+þ {õ"š»=ðIÉšài@åÞ‹° ‡_Ë}è±Xxx9-Š¡I•\°T ¸<çIK5„¢mlâð·"�Ëi7›çÔjk‚iÏgÚàp%ÑÍ,)(ŸÙIT\ü)ìïF ®{P"È7ÕA~ZDD ›ÂÈãfˆúƒ(.ÞƒâŠÚäÙÓä¡öP,íC”[Ÿ³›ÄФJ^ô÷ F\$L9~À¡Uþ]ú{X`Õdvd ÿx#Ü~Þ*fH˜èïÇ_‘ÇTª>;Ë'‘DDK ùzaI¢îyp_GÙ=ÌaÅÌgK‘“[Žj»‡¡‰ÄФJ.\¯ªÅ£9‡Û:ÑÝp9éBœÕIð»[P­ûUu]ðJÊkêo·Ãà x’CÓµs0u8þÏÊèECÅ^íOBßw=N4¸y³’?³ë >˜ó™¹þ¼Šu¹l9NDUŠÌ |Ïàz1w’#yí¨Ú’bÿ¼ó+‰Â14©R¬=MØhø#¾ÍîÓ=0mzšÌ±9;%bzÅÝX“ö>ò íð…ÞF+iÞ®.<™wð¡ûêE4kº§0Ôt¹lµ{uN“sm^ÞR‰ˆæIá9ä¹Ó»*PÝÉCßia MªäÂ5Áˆ_ÚÂ÷¹Ø`ïQ6m†Þ²˜@ ëµ0õMÊóîn˜v›Rºäï‚qçy8¸_>yø‡Ð}ÿG:c-ZϤ™ÓѳPÊ•¦eu® Æÿ´…ýÝhC³ù$ŽÖ:,‰ˆ¢Ié9ÿøxpþ#ùÆ0ìúG4C“*½ÄèˆröÛðÃcý'‚'§1f=‰ƒVüÃÍòÏÄYâGËÎ×…+%ë¡ _5Ñ|Œ#Of€ß Ûƒ¶ZcO“ô¦Oö¡ö9°‰ˆæKá9Ap•ì#ìºÑŒ›¥b½¡#ñçXÒßC½™é~Üø<b2dTÜO{J~<¯-ÅZì.xƒuåÓð ¶Ã¼÷(@TÑVšlh»÷J2>†Î>zÍJÕ9äÃÈ3':kã“EøôŸGq£Ó‰A/ï4C½É qûf”Ã[3‹°44£{p2ô&ZY^Ø„}3åsLÁe>À¦QÅÚÓ´Ù{¯¡oŠKrDDóÄœ<„Ó›¼ë6ÓÝFlP®ñïý™ÿXdþïɯ5›LxÌ*=ŠÀÐDoh¦SN½íÅÜ2?¿ §K®ÂÉzIà%œæ oz>SŠ4…‘îë¨È-Ùù2ô5zMYi:s×ÜîyîAoØgHDDs=E}å\Œ˜L÷Ôã’=‰kOæ­4B½ÏF|sç6D2†&UJDkP/º¯ìA–&ò‰¼2V#§ü lî·Ý7EoÍ瀩h2ó¶A«-DAöšà÷'WhÅ¿9QI~?ü¾Øê.@' —Ð`ˆ¿I ‘êÄêÊ«AFy#†’ùúlb±Ž{šhQ Mj”ˆÖ ;tk³±ÇpuÎR¼ø“�í†2•_ßv`„Í'ùœh¹ªCyqŠö|Cm†¹“äm‡±h­|³_ƒœâýø"/ÚOQblgà "¢¨\°”•㬹æõ|À¬Çžœ(«þ ƒI}휆otŒÝóhQ Mj”Ö “p7žÅ™Ÿ#ZUÚpüÿ¶$Ïéߪ€çÎ5<‹ø†Ê¡ÙrÉßy\ª£”4î€FS�]Û üÁ}aÝ£pTgI#QTãp ÍH£è¨Òâƒ5p®dyÙ…ºk]ñŸå‚Ÿl†'©ƒ­†&UJTkP ~Ä„œ{š’H¬¦òÈ8 ë æ‡]÷O¤m1Ãü~š<ò?KØ<ƒˆ(^Ò34þåÕ+½J?‰§ugðUÍbUòœf¤ 7Ž”¡ª“×zš¡IÒ”{š’Ÿš,G±çìå°ÊË8»'¹e—`dkƒù$LØõÈÝPG°SžšòñQöZh4‰ˆ–Æ?¯Rî&ù0:º‚ͤQ8ÌeÈË݉#gM¨©µ¢åÕ±-VÔÖ˜pöÈNädB¸?ÀÆ?C“%¢5(÷4¥� ¾¼˜ó=ÀÛq[>Ø ÑÉÖðÑMÂÝr ß ?Â6<».™GqÕ1ʇ�DDq›Äc“»jðÇÍ2¬Yoˆ³ü¹(Ýc­0–mDzäÃÞô (D>ì¥14©ÒSÔ Çqù­ZƒÆÚÓd‡~÷4%-?<Mzì*¿ŒÎ$>;ce)%ݸo®‚ œ¡º7R"¢%™†oä/¸:o ò“Bh?ÝŠŠíp%Åñ ò5Þû}Žßƒ+MöùÅ¡I•ÑÔ;W›1±§)éÏd Z„äùGsVËÖ »@¾Ùæ!ó½q¤ñ K6ˆˆâ1Ýã†Uòut5233öLù:*Ï34…0=N†*‡ixí?AøÎ óʼn¡I•\°T ¸^V'VC(Ú¶„Ö )|&QL>t  É?ƒ¦ÙÕ%e婦]¨}ÎØDD´¸È•¦-(¯ù Îg#Iræ]¨QRº°„æW¤v MªäEß`D¹‘„)ÇØ!´Ê¿T>“(– 8 [°ÅÜñ÷c .óP÷¼�ÆGƸêDD´ åzº k’fOS8†&Z:†&UrázU-¹ÝpÏ'ºŽ#'î HŸÉ@!xîÖ£u<â›Ásš€×þ=6mÕán[¨³’­ -P¶¡†{å×ÍžàªÑ"f‹]éîyó04ÑÒ14©R¬Òº l4üñæ“é¤9“f„n ó¾Ïò`ûì¦ðTÜ…÷¢}fsÆûØdêŸ ‘zÃQwÝq×ÛMÂýó <ð¬tJñÂ^%@´wÂÖî ›¯ŒÁ®?ƒ:>£šTÉ…k‚¿Ì>IŸöÏjGÑåpÏ›4JÏh_ñ "ÍC“å$*.†·–¯ÁaJ ÏiŠeìÎèïc`ÎJläx†A/??"R3 þ§7qâ«tO…¾ƒÝ7ŽcWU;|¡/­ SݰSÿ^†¾¢ž×á˃ܓM±14©ÒKŒŽ¼m e,¥Å8|J€ ¼§Ê¶a“¡SòÜ·`ݺ¸å^äbJËDÂD?þŠüFOu ê³³°OðÎ<ˆè IDDÑàu˜Qš—â#ßÁTSkK[èal3¬µ50=Šâœ°Eøn’Üw¤Ô~y"¬âbÝÆƒÐÛãÛÕMêÄФZÊ!o÷a6œ‘ÃŽÕ ¿Ã½¤s \‹²‘W¨…V1¾Ñ7Íдòüp_¿�ñÑÀœUן7P±.7ÔÔ€ˆˆèmÌœmg5–#/]Qʼ9%§!Ú’¤kÞ+&lßcŸèœy€<ñ§÷Yð”Ïi Mªä‡çþqähä Zz6 ä S˜—‰÷rŽ¡Ñïù ƒxØÒ>Of±÷4irΠÍË9DD”@~/<v#þ—f=ÊÄv<I¦æ¦0î4ÀþÒçµ_á õyòþo¥¤¡I™ÄÑ;<t.ù½°Õ¥)ŒtVc×Þ:<OÔUƒ]ÚV˜š®UÁøŸW¥ÊhC³ù$ŽÖ:åߥüƒN<ñò�Ñ[s‹Ð¦e§@5C(,ݼ‹‚ቑ‰ÆÐ¤FÖ³+¢lNꇹèÛ™ö›ÒFF÷HF `Èza«Q»´­ {š¤G0}²-³g)+r,W$"J„” M2¥,oã?±çU™ÑšÔH]_„­º[h›]hFãÅrl(2àžòúa ެ½ê$õÁ¼í”ýðcXg¶jEÛ"¾v›]ÚVL´•&Úîý€’Œ¡³‡Þ§v MDD “J¡ x\gAë0îÒâšÔHrBÜž1wE(ÚÐÂô8Æ'¿ ÂVúæ„* ãM_amé-xøÈ& (a Úž¦ÕÈÞ{ }Sü&Í`h""Jÿ ºmp%cɳç,­Ã«J>ôX,ì(K‹bhR¥iŒ5ƒ¾©NWµùã¼±ÚƒÛuEíÓ°P\Á*€f­v>´IÊJÓy˜»ævÏszåߡךˆˆT!¸ ù Q¢œ h Mj%à¼ÍåA‚ß)¢$ëŸ(®8 A8†ýYФ­E‘É‘‡×‘ŽÿOGúç@üÚÛysx¡‰ˆHÜu¨¬¼¶…@WN¡hãTÛ=¼/Ò‚šè-ÈÁÉó,úƒ(ÖjQ´ç8Œ·»áåU'IÈaÀrÚÃJ¨ ;„øÔ~l:Ç”É]½ër±÷Öß,šˆˆTab�}Ež9GÕ~má×DÑ14Q‚ÁVû�žÐ+ZIJø™yÛæ@¬= ±o’¡)ˆ¡‰ˆHÜ ¨sKÖ]4Tæ!]°Éw¢Øšè5¿uÆ_â <~ ¶±'gMðû7ghE¸CÀðÇèáþ²EHðõýŽö`—Ç�<h_ä3 ´7¢ÑÖˆ(¥ÄÚÓ”¾ ûXèMDÑ14©Þ4|îvܾx Ú¬UñžàYOȯ0¢&¼6X–¦>îiJ r�¸[ÖñˆMM<txʪÓ>”˜[Ò8gœ@YÁ>ˆn>“$"J)îz†;aÇ­(£=ƒ>îg¢E14©•›EèKó‘|Ê’RÝ9œêã MÊ9M[wÍ? W¾ìü^|’‚�¢µ—ŽaÏlÎ(fh""J5þ1ŒŒóÞGo†¡I¦{aÞöü¹¯BfÁ!TÕý·OY`|d,ΚÞ) 5ëñ¹þœáµÁnDÃ-–ç%9�XT^® [ ¬Áa'6–]â¡ÃQÉŸÙõË°Ž†ÝT•3ÉŠÃW`µ^Æu†&"¢3 wËè„ó¨ë…¤¼¶ÝÁmûó8ç>¤f Mª$ÁïuÁ~û"ކ½zÍÝø¤%„¦é˜6½zê1¸§)IH˜èïÇ_‘Ë~S¨Ú¡C›7²9ÿnŒŽb<ü3›šäwb4ÖfDD””¦›°I³ ™y‘U ±ßqÇZ¤i¶ÀÐÉf@´0†&Õ›ÂÈãfˆJÛðâ=(®¨3ðøñ¼öŽŠÍauÁÊhÁû3>±I ʪɈænë꾉ʜ ìƒä÷cNñF”Є€ÌLDD©%à0`ýFú$ S½—°ûôCL(˺/`§¡c(CÍ’|½°ÄÝ=O­6Xž`ž.¹ 'g”I Öþ Ò7VÁ>ÁïÑ|ògv–ɰÏf^h’0ÙbÁ –ç¥É ë×߆öôÂzð$¬c“n9|¶§E04©’¿»ÕºoPUׯ¤¼¶¡þv;<q‡/º¯ìA–&rB®ŒÕÈ)¿›[y~C+G�×¾ƒá—_ç®Ú{1ÜÃFó)A3âl«Â<d®ÉFÁìWÛ—ù9A¥˜iç5|®t ž7oYЦ¡wEÇФF¡ýHšÌ±9;%bzÅÝX“ö>ò íñµ Ø¡[›=†«aMäñ“�í†2•_ßv`„©iEÙŸC‹ˆšæ †&"¢T$=±=74G™×ÐÐú_xy¯¤E04©QðŒ%-L}“ÀT7L»¿ƒM)ÕòwÁ¸ó<qõNÂÝxg~vÏ]M’Ô~]ü%~DI%JyÞ<,Ï#"JIž;\‚m8|¢ãCÅÂ’uZC“*ùá±~ƒÖçòôocÖ“8hõÀ?Ü !ÿ lqÏð:¢Î¨‡ œ¡º%y”òæ5‚ˆ† ˆˆR[„v¶$/||ˆòàœˆ(6†&5šîÇÏ×C3AFÅ}Œ…Þ¶090u^@Ñ ÒÒ7 øÐçÈ[÷ ´[JaìTÎ> JExѾHj ´7¢Ñ×’,% w-ŽTQ^žwE@I‰�‹Ýù -ˆ¡I$'Äí›Qfü)¬¦W„¥á!œÞ8'‚RÌ[Ó¡É×£mx ³Æ”3€öý'¯<ÉÁÿ-ÕzU7Ñ­|oýnØêa÷L†Þ@s){šö¡ ìAˆ1N ¬`÷4¥š‰ôý%ÏY懣ª:{|ŒI½šTi¦{^½íÅ›?U 6‚HÇsÿÌŸñ*4y]b‰-ŸI<6B£ÉDÞæd•ˆèï­ÁŽ59ìžC§Év>%4EkÓ9ŠšˆˆR»U¢cÎÙ…nWj+r‘Ζã´†&UE—ÛNK¡½}¡úÞ1ØuØ`è@ð™š2?Dvæjd”7bˆóñ$0‡¡�MäïãzM8m ~½ÛxÇÄÌÛ(Œš ¢i(ô:š!4U`h""J5±ö4iò!´ ‡ÞDC“*¹`)-ÆáSÑJBãÔ~l:ÇÔéG)ýú·‚ù7 ûíÐe®CAÅOpÄ[âGËNò4âë?Ï„Ø1+´bÌïA‹PÁæy…QBSÅ"Ÿ6¡‚¡‰ˆ(Õ¸oBgüeîÙ…ÍWpôh=ž²»-‚¡I•\‹²‘WyþLä8 QiK4Çm D±-.Ÿüz }êaYÒ¹´¼&á¼±/úÄ_¡iŒÜÎÀPÃ!|jʪìçûô‚'ÊQʈº§i}¦”Ô¼ù–R†&UÄÖ¾ÅÛ*/hÖòBiè‡OšÀcó.¬IÏǞߣHh×0’ÁžŠ_ ·ì_s~ˆ–ÛhuzysˆAê3acÖa4¸£=0˜„»á0²6ÑÍÌID”Z¢­4µ5ÂX²kuö·œÑßC“*EßÓ$=s ÝgɑҢ¨}òÌ[jDyÆ(2÷Â/õÃ\ô-A$…�<õßàÀe†ÃÒt,—ìàŽ¦$jweB“] Cítö Àí@_çÔJ‘­YƒmæÇ ï $"¢äcO“&û�nôñ®H chR¥è{šN•mæ`c‡)¸oÀºup˹Œ"O¼M;Xÿû'çC“qÖ¡)øœ|ùežs# ,Ð .øýâ3µX$ÏœÞò(ŸÝjä¹7KP‰ˆRû&ôæö¹ÝóÜ/àå5âÀФJ ìiúRDßt¡ a‡Ûj>ÆÑûnL:Æ9%€UG¬lÐ ‘C“E@ååš°ò¼\vbcÙ%ع¸É7�›Å€#{vÈ7v`Ï‘ïanz /¶‰ˆR“€ß?·­FòÀØ€ê†ßáö±v€ÇФJ‰ØÓ¤à÷¾À —“ïä$a¢¿ENò•ˆwèÐæåMb¾�<h_ä/G ½®Ô¥iÆX“¦AzÎNúb#Ö|Š-%ÑÉο´†&ÕšÂH÷}˜ gø¤åoË÷õ ){r^—"¸ºo¢2g[ŽG¥”4îCAÙ‰9¥«sÇ ”ìcËq"¢#9ÍØªyùºV û%øm:‹NL9ŒØ·P×T"C“*ùá¹9J+êôlhµ(ÌËÄ{9Çеc¥¦X{š4HßXûoóÅúÌ"G1CQŠ ØuX›¶f×ÌÖƒ™ÐÔ¯íä 6ù@C“MwÁ¸!C¾@Ü []šÂHg5víe‡¿9�\û†_~Û^ÕÞ‹A®*Æ ¬Î]†u4¼LñXÖ’‡Û¥¤‰ß ËÝ ƒc<øÒoùÑGÈÔ|ˆrës®4Ñ‚šÔ(ÐÃúÏfŸ´Ì o.M`dôåÌ×£rã®Å†ñˆ+ÌtO=.ÙÇB¯heIðŽ`t¸÷ÍU„30T7Àæžà!&å3ø¹fh""ú{¯ñîfüû[=̶ðÛuÈÌÜŠŠ«lòC‹bhR#iv}¶ên¡mv¢˱¡È€{Êë‡58z°~U'y"©M•*… 2Ê1Ä‹OR<¿àhÎjùû²Ù…Ðæ!ó½q¤ñ ËâáDw£[Þû¥¦f8ƒ…GÑRyˆ¡‰ˆ(eMÃkÿ ÂwV¸XxAqZ±´²ÿþÙ¡L¶Ã_?yò$ô.Z’âöŒ° ch azk“ –J—g[Y+£BÑ6”Uÿ†A†¦$àC·±�šü3hš]]’ài‡iWjŸsÒ?CþLx­s’äÃȳð³<”VµÕ(ÍÚÅÐDD”²BûWÓÆOq[±Ðô¿ÿ÷ÿŽ:Q߸qcè”X“ìZ~žÆXÓ9è›úçtU›?:ðÍ‹þ¾ÁÐDü SްCh•—VÞ†-Øbîø>MÁe>êžÀøÈ˜ÊW”›gE|Ý}}h²4 ÉÖƒA†HD”¢šhéV,4 E MÿùÏBï ÄŠØ—¡ðx›IŸ ׫jñhNÈr¢»á8rxJxíßcÓVî¶½*ÃlCKã”m(†áÞÃ`Y¦xô„ÊW–šˆˆèo€¡‰–nE7E®6q•i9Enf[±ö4e`£áL„ÞE+i OÅ]xoÞ÷(r¼M¦¨·¬›¡‰ˆH]”²ìØÚ]l�Aq[ÑйÚÄU¦å”øÐtM0â—ÙŒ™aïñÀÇ Pò{€3úû˜³"9žaÐË•&†&"""ŠeEC“âÕjW™–[¢CÓKŒŽ°uuò“à÷Gip@ašˆˆˆha+š^­6q•i¹%:4)g´ Z÷ ªêºà•”×6Ôßn‡‡ä)¥04ÑÂV<4)nß¾ú-Ÿ‡¦é˜6½MæÇØœƒ± ½ân¬I{ù†vøBo#J~ MDDD´°¤Mô.$84:`X¯…©o˜ê†i÷w°MHòü³ Æçá`E¥ ¾¾ßÑ>ï_ ­u¸ãá9‘Z04©Æ8úZ;C‡Îºq×bÃxDÝtO=.ÙÇB¯ã‡Çú NXŸËSÈiŒYOâ Õÿp3„ü3 ,$J’o�¶º³Ø“½›‡Û©C“*¹b´ × £¼CñlIšîÇÏ×CíϨ¸x£Qò›†oЫñ0 2W…~΋šˆˆˆT„¡I•\°©ÄÅ¢øjTC(ÙÁb­F-BrBܾeÆŸÂþ –†‡pzY¶DSéþ!K£¥ ä•ê!6;Ð%þךˆˆˆTƒ¡I•¼èïÄÜl$aÊñ>ÓýçÁ´OQ/ÇeÛ‹9ÎÒJüˆ’›k }8³’š¾%B šc6&ü`“H"""õ`hR%®WÕâÑœNø³öÖ¥ qîGJ@‰QÒ™DŸy'Ò•ŸeÍzŸ½‹î‘©Ðï‘Z¥VhòOÂÇÇ» +ð¬FŽÐŠø/' Ä()ùáuÚPgüÚuÙлˆÛv¼¼ö©VâC“ç,­Ã¥_>ôX,°+-©ß‚ߦG‰¹÷u‰ ½!®éLøÍÛìh‚ùè)Ô> ½g1‰(ñ#JrJ©^Ë TÞ†ìÜ]®Xaw áùÏ5l9NDD¤"‰MnÚy+ÊøåÁöÔqðuáJI´ÎlòÐüåæ6¸}Ó¡7ÓÒE <räé3á“’Z<ë›”ˆ?¢T¡tÐëF³¨Gi^†|-b÷<"""5Y†ÐT‹#FÔ„uT¯()`±{â M»k³öÀ0§ôKÄOÂl(û—ük n;†â `E´•¦_qÏø92Öê`ëz"JüˆR4»^¾ž14©FâCÓÄ�úþŠÜ8=GU9tñvUó?Aãi~öÌ”ìç°¿öiè½¹G“‹½7zß¶÷D”ø¥&i|£ÜãDDD¤˰ÒÔ€*ÑV²%Wj+r‘.Øâß$à„OJ¦ásÞ„ñŽ;ôšÞœxô"ºÂ¿Gîgô.åÉy"Jüˆ’ÿ)Zªõªn¢[9sÌ¾v©Õ»ÛӤɇÐ6zÓøÇà´Õ¡êðVdjÒ¡]¡ß 7'P×Të¾AU]¼’$Ï m¨¿ÝOÜOÏQâG”l&ñØT&y›sU"¢¿·;Öh É?‡NŸ©Ñ2„¦›Ð ›HË£ù Ž­ÇÓ¸'äʦë.ÜWöB嬑C×*di¿Æ— 0p¥éíM÷À´é}h2?Ææì”ˆ]èwcMÚûÈ7´ÃzÛÂQâG”l&à0`£é$ù×½¦ œ¶¿Þm<ƒƒ}!‰ˆˆÔèíišDŸ©%µq5o†~Á‘u«äIø:Í9‰?�?÷¼½@ ëµ0õMSÝ0íþ6¥¼¿ ÆçሳÄÛ—ø%ÉÓˆ¯Oü<s@ó˜Z1æ÷ E(`c‹"""5z7+Mm0–¬ÃZ]Ž=qò¡ÛjDÅž¯`¼Ý·oÞ^ ô×Xž÷öüðX¿Á‰` øiy^x­ø‡›!䟉³]¸$Ø)øÜ¿¡Î¨‡ œ¡º6÷D\Á˜(9MÂyc²4+¨ÊÈø Mc<ꀈˆHÞÙž&MöÜè[zi‹äí@uɇФ§ãý4îiJˆé~Üø<Ú9XdTÜG|=ðv^@Ñ ÒÒ7 øÐçÈ[÷ ´[Jaìep¢5…§âÈ mväå6Z^þ\©Ô²¬4éÍía%[ÊxïRÊê$÷`ÖíE^º<)×|í±‹hh¾…ÚÖÁЛèINˆÛ7£ÌøÓœ‰¡¥á!úF^Æ71”ú`ÞšM¾mÃS€ß¡X„{ªUû~‚“³KJIÓðþ¿·ðï`8æÏðžµwÁßq"""ÕH|h’Æázp:á<꺕‡I¸mwpÛþ<îvã’»Ç ² I[ìÒ˰+“rJ §¨Û¿ º–ˆ–áÒ34TÝB\­6vèÖ¦c‹¹æÏxš¼¿.¡Ä(Ùøá¶„öðI‚cœ@YÁv㡇ˆˆˆþ›°I³ ™y‘U ±ßqÇZ¤i¶Àй”MÔ~x]vܾx{¶—¢òâØ{…õW®4½=Äâ\ä—šBT‚ØŽ+¥¹Ðhåà3ó¦EŒÁ®+ÀCÇL§<%4e~ˆìÌÕÈ(oœÙDO”räÐ$~._¿¶A«Õ.0¶ãK±ÜáDDD¤ M‡ë7šÐ'I˜ê½„ݧBi àï¾€òûŽï •ë]©ÜîiJ€q ¸†0%%ó‰oqåº%Y«±fË!TžýžÐ»¥úoóoöÛ¡Ë\‡‚ŠŸàP%JI ?|ˆþQ˜e(ÏsÃúõ·°)³ŽAXž„ulÃ-§‘/Øâ+ÑóöÂñ$òôý)<³7á¡‹%1oOé|'äÐӬߎ5iixO{.9ìLa¤û>̆3ª~‡ÛÇgï”ʦáíê“Ècé/´·+Ý&‰ˆˆH_žç¼†Ï³”3–";³­GEӋлᾆRíAœŠµ@z‚[{s±no=ܜż,»±;/ik¶Cß?ô8b°ÀRkÃpè] óÃsÿ8r”ÖÌéÙ(ÐjQ˜—‰÷rŽ¡Ñx‰REŒ=M§ö£`Ó98¦$Hîzì]—‹½·ž0D©DÂC“ôTÄöÜ2ú²‰â54´>ÆH¼ôÜ"Š2óPkCÓ[rAÔ~€¬#Ú<¯N¨…x‰%¾=MÓ]0nÈ@¾p/lui #ÕØµ·Ïù}¡”´Ðž¦Ãû&šˆˆˆT(ñåyžzìߪGËðÜR/iÈŠªx¦nGK/ô‚Ï…kú: Ì ±è·?B\í:0¬ÿ fWDgC©æ¢ogºçI}9óu¢”À=MDDD4_âC“Û‚â¬M(½ø;†ƒ“ò) Û/£4ûK;˜Vžp»mõ0ê”ò˜*˜­ .å¬'Z@hOÓÛF`×a«îÚl6Ø‚£˱¡È€{Êë‡58z°ž«N”bä¿#ݸo®’¯=g`¨n€Í­´³!"""µJ|hò=ƒëÅ„”~Ä á®Ÿß,Í?°åë“8{'¾fÖFÑiÜlP¦ÉD^a! ²3°f»§8uI Ár3¢ì]‹šB˜s¥Éó Žæ¬–~× » ÚÂ<d¾÷1Ž4>‰¯‘ ýí$>4IøüîÐk×Ê hð.!ëÌœõô>òŽßAŸ74M‘Æá´Á—µ|⛦1Ötú¦~¸ÝîÆ x¹BH)Çnc4ùgÐ4»º¤¬<µÃ´«µÏ›ˆˆˆÔhÊójQQ¼yéïaö;Üïî@Ãéã0Ô_Gmk|Óì:¬MÛ>o¿Œä2£(Þ¶å´üB™èïcÃl1÷G<œ™‚Ë|�‚MÙñÀøÈ¯CDDD*² ¡I„V³%Æ_áyµÂ,·û"þƒi§ºaÚºYž Œ†¾àE·ù ò33Q•&"Z6xíßcÓVګ׆–Æ (ÛP ý‡Á½{âÑ\u"""R‘eM7¡ûç?…rÂÞõ*-F‚¸7ôÿƒ3 1 M_a¯þÜ,õ"¢e3…§â.¼mÞœñ>6™zÀ£œ‰ˆˆÔaÙö4½µ9Ýó ¨nø=ì< "¢e2ö�gô÷1uÞ«ñ ƒ¯ö[Ñß^âCS"ÌvÏÓ =g'}±ë >Å–’‹èôò�"Z.xïÂ6¹ðu&ÐÞˆF¯EDDDj‘”¡Irš±Uó>òu­Á³žü6ŠE'¦Fì3÷qO-?Üâ>”€ («ÜÑÆ ”ìƒèæJ‘Z$ehŠìž7šúáµ}ƒ|vÏ#¢e£„¦â({˜"G1C‘Š$gyÞÄoÐån…Á1|é· Èüè#dj>D¹õ9Wšˆh™È¡éúeXG_—ÞÍ?ê`-•‡šˆˆˆT$9C“Ò=ÏÝŒ«‡Ùö~»™™[Qqui‡ä-|íÅxð:3 Ÿ³–@S$Â={íBSņ&"""IÒÐDD´‚¤q8­g°ešì­(ÌÙ„ ц>·Ž»§Q~M3ÉŠˆˆˆT€¡‰ˆ(Œä}„áS¬I[ìÒ˰û0d=ŒŒÙýL«‘#´Âz?ýý14Í 5‚Ðüåb×ër`iݵߠ´¨åUM<d›ˆˆHešˆˆf)¡éŽ4yØp†ˆˆˆf%ghò=ƒëÅüMÖÒ`'Zûf:ê%^�ÿ6Ãñ’‘‰ˆˆˆ^KÎÐä®C¥p-6la£Õ´Ÿõ°9žÀËò"Zþ§h©ÖC¨º‰no@~톭¾vÏdè DDD¤6IšDhç$94HÏÿXÝœÄQ"MⱩM&ò6ç «DDo v(]ôòÏ¡ÓLJ5DDDj”¤¡é&t¦ßàr»áOŽ¡Ðh þÚÕ} ‰;ðpCD 3‡¡�M É¿î5Uà´m4øõnã!3o#"""UIÎÐäí…ãÉüU¤@·ß7yä_IðÝGeîiØx¾$%äiÄ×'~Æò@fÌŠƒ­ó{Ð"”@°±Ñ8‘%gh šÂH÷}˜ g è. ¶¥#¯ö1M÷À´)kJoq¥‰ˆhÎû¥‰RœñšÆ¦Cï#"""5IÒÐäE÷•=—ÕÈ9r't>Ê$ܶ_g6i%ÌžŠ_ ·ì_Eñõ°ÜF«ÓË6äDDD*•”¡Iz^‹’¶C×`‡Ë;S'ùž£Ó|_ÖpâBDË$�Oý78pÙ†áð Ít,—ìàŽ&"""uJÊÐä·}ƒ­ÁØsI.3Џ‰ˆ–‡r¸mqØ wØÈ8 ëW·‰ˆˆÔ(9Wšœ?b÷ñûš=‹I‚¤ 7*6c›¹+MD´LäÐdPy¹&¬<¯W„ØXv öA>²!""R£äÝÓd*FFf µZh ²‘ž–Mî7hã“^"Z.&úûñWä“™©TíСÍËFDDDj”¤¡I&ÃÕòtå%ÐíÁC=:‡§B¿ID´üp_¿�ñÑÀœ3â\Ý7Q™³-ljˆˆT*9C“ç>®>xQ†çCÅû‹óˆh¹ÄÚÓ¤AúÆ*^ˆˆˆT*9C“[„vÞ¤E¢Üúœ{šˆh™È¡éÚw0üò+l6ÛëaïÅ ¥yDDDj•¤¡é:ÊöèaÛˆm>[ŠœÜrTÛ= MD”XÒ(:«b¯þ8=N8þ¿'ð*ÿ0úì¿ÁÞ7,Ç)"""R«ä M¾gp½˜;E‘¼vTmÉÆ±|ÞKD‰4ýØ„M«¶ òbNíùkÒV#÷.àüöµ¡Uîµ(2¶Ï)"""RämAòÜÇé]¨îåJ%P�žÚ/°jO†0‰>Ó§HÓšñGm9¶ õ°÷ Àír Q8«Î—¡‡ˆˆˆÔ$eBÑò˜iþ<8Û › M6Q³ëUÇN ãMz|ÃîyDDDªÄÐDDªp[Ñ„ñPhz¿²Þî‹Øµë4L550ÿð5´*Ñ4Æâ`"""5bh""ò÷A<pVÏ�¬eë°ÞЀ4ŠnËqlÉ\ô>Bf‘wèíDDD¤.Éš<`iæ9MDôÎHÞNˆÇ÷¢äÈOpx¡¯†ºqõû½$"""uIÎÐÄsšˆhI¾Øê.@' —Ð`€"""ÕJÒÐT‹#FÔÌžÓ$+JJXxN-#ÉÛc‘Òj| rŠ÷㋼h?E [Ž©Vr†¦‰ôýõªkÕ+ãpT•Cg ½&"J´—pšw@£)€®m0ÔM¯¢{T¾þ‡™-ljˆˆT)IWšP%:àv»_Wj+rCm‰ˆ–Ã8ìº"m‹®àªÒ«Ðä‘ÿY-ljˆˆT)µö4iò!´q+6- v=r7TÁ1¥¤&%4åã£ìµÐd†u(¢A©B’†¦›ÐÍf{=š¯àèÑz<õsS-§I¸[.á[áG؆Ç`×å#³à(®:F¹Ÿ’ˆˆH¥RhOÓ$úL%(©àÄ…ˆˆˆˆˆÞ™ÔYijk„±dÖêì` ½+)µ§I“}�7ú&Bo""""""Z~I»Ò¤7·Ïížç~/÷3Ñ;–œ¡éÿtÃÞ?zñÊžµwÁÃÜDDDDDDïP’®4]C©ö N „ÙqeÛapŒÒÜÚ›‹u{ëáfˆ"""""¢e”´{šŠ2óP¨ÕB;glÇ—b/¦šˆˆˆˆˆèIÎÐ4ÜŽ–_èÑÊIÎÐäy�KëpÄyL>ôX,°Opi‰ˆˆˆˆˆÞ¤-Ï‹Ör<-íC”[Ÿóp["""""zg’44Õ¡²ò"DQ|=®œBÑÆ¨¶{šˆˆˆˆˆèIÎÐ41€¾¿¦B/^‡£j?„¶áÐk"""""¢å—¤+M ¨s·u9ÐP™‡tÁèmDDDDDDË-µö4¥oƒÁ>zÑòKÒÐTÁpm6l³£=ƒ>îg"""""¢w*9C“ #ãÐ """""¢•“œ¡‰ˆˆˆˆˆ(I04-€¡‰ˆˆˆˆˆhIš&án¹puÝ£”×¶;¸mÎvãDDDDDôN%ehš~lÂ&Í*dæmDvV)Ä~Äk‘¦ÙC§7ô."""""¢å—”¡)à0`ýFú$ S½—°ûôCL@‚¿ûv:À¾zDDDDDô®$gyžä†õëoaRâÑ ¬OÂ:6‰á–ÓÈl,Ñ#""""¢w&9Ëóœ×ðyÖ*¤¥¥EŒõ¨hzzÑòKÊÐ$=±=· FQ„8;®¡¡õ¿ðJ¡7½ÉYžç¹áÀ%؆Ãw/ùÐc±À>ÁÔDDDDDDïNr†&·í¼Ò<e|ˆrës06Ñ»’¤¡©••ÃJóäqåŠ6@µÝÃÐDDDDDDïLr†¦‰ôý5zñÊ8Uû!´ ‡^-¿$]ij@•è€Ûí~=\4Tæ!-ljˆˆˆˆèJ­=MéÛ`°…ÞDDDDDD´ü’44ÕC0ÜA›ÍÛìhGÏ û™ˆˆˆˆˆèJÎÐäÃȨÝ÷„Aä�u ¶ø˜˜ˆˆˆˆˆèKÎÐ$=Ãý£C“¦AzöfhµÛ—¹9GîÀígr"""""¢w')CÓt·4›!4=y½ºäB§© {kX¢GDDDDDïLR†¦€Ã€õ[ÌpE¤#ÉeFQ¨{ž4>ŠQ®:Ñ2KÊÐ$ymÐoÚÝÝÖ× ZîàbYŠ wƒ¯Š'q«NDDDDD´Ì’34=±ý½(-Ç#†f“ §CÿÑ2HÎFx¦3çÑ4v¸m´1èåA·DDDDD´¬’44’ß@è×DDDDDD+%iCQ2`h""""""Z�CÑšˆˆˆˆˆˆÀÐDDDDDD´�†&"""""¢04-€¡‰ˆˆˆˆˆh MDDDDDD `h""""""Z�CÑšˆˆˆˆˆˆÀÐDDDDDD´�†&"""""¢04-€¡‰ˆˆˆˆˆh MDDDDDD `h""""""Z�CÑšˆˆˆˆˆˆbþå^·Îõå����IEND®B`‚������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDnametoindex.png��������������������������������0000664�0000000�0000000�00000331325�15030617045�0025132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��y��Œ���ð¯z���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýÿO“gÿÿûôù$ûÁd !ñ“+†ðƒË²À˜-¼‚f†7ÑÞh.ß`ܺºî3AsYâlŸ›Åkë{ÊfôU'2Q©¸^à¤n%Ò§WÂZ±J‘oŸÂU¤pÞ?çÑiK gÛ³íy–Ç-96ÎÚÂÑãËã8Çñø²AAADÚ@JAAADAJAAADAJAAADAJAAADAJAAADAJAAADAJAAADAJAAADAJAAADAJAAADAJÞ:eÆ q‚ ‚X„[£-A¬_ÂÉ„hK´ÔY§Ä2X‰÷óA!hÍ$"R!CHê¬ShÁ"‚ aКID<¤B†ÔY§Ð‚EA 5“ ˆxH… !©³N¡‹ ‚ „Ak&Añ BRgB AAƒÖL‚ â!2„¤Î:…,‚ ‚­™AÄC*dIu -XA! Z3 ‚ˆ‡TÈ’:ëZ°‚ B´fA2Àí€Åd‚É[Ìšôø^÷L`Èüæ§N¸9ßKKÄ"CHê¬ShÁ"‚ aКID<Ë�̪OP¤üÖÉyï+œ³õEó¾oÆÍ(8ý+œŠ^,2„¤Î:…,‚ ‚­™AÄC ˜‚¦37`óøµ8îÚoó¾G‘ûnYŸÁÜø%”½“¾ç‰E†ÔY§Ð‚EA 5“ ˆx”œí:ÎÝOÅã0kV#OÁnðÞC•qÔ÷úô}œ»ô‹Þ÷Ä&CHê¬ShÁ"‚ aКID<Ê€ %³£õ`–÷ß;´°ÎûU¿mø¦mIŒM†ÔY§Ð‚EA 5“ ˆx’oCû…=φ1pã$rÙ-ž"u=c~Åo}j5n;ýYxb‘!$uÖ)´`A„0hÍ$"‚eÀ\M(Ë~Çûú† [Q¢í‡‹ó`Âò ª¢¸ìÚm³þ÷Ç&CHê¬ShÁ"‚ aКID<¬”<®ç°˜~‡Å>å;»ðÄ"CHê¬ShÁ"‚ a­yIÊqEDú$fÿ‚uäÿ!Ü+Xÿœö?Ä&CHê¬Sâ]phÁ"‚ Ö Ák^rr\‘>É€é_¡<~-z=ôJË÷µPÞó 6BRgï‚C A±^Zó’”㊠ˆô!HLQù;Z­d¡ÒHJÁƒeË#¿é‰ †&ý![ç19Ô“ycî¥L>blA!G×¼då¸""}’¼’Wõ^>ö£8R),D5)yD,oøEêÃ"%nYÇ}ΟÜ+ôÔ‚Lþ}6(Q DWœ¡\ ‚ BŽ®yÉÊqEDú$B±hÕá)yD,–YX›¾Áæö?{0Ú^…Íü{6(>BÍ- læ&QöòïôA A±^Zó’”㊠ˆô!HÌö¢þ+#Æ—NV0ú“8§É7IuJÐ`á†ðÓ¹vŒ. ¶ÙGPåmâߣÀæªÿ ƒñœVÿ±-XAÄz!xÍKNŽ+‚ Ò‡à}÷Z¡J÷l®àä œ{–5Š·T u4¾ƒ"’:ë”àÁ¨äÍÃÑzØg¦©Ø­Õ¿Hq6¾¹óV¤‹ ‚X/­yÞðçs«ç¸!ü9AéC° XÀDÏYŸÀ†w•¿Çƒ ¶ÿºdñ‹ !©³N ,3ОÁÅž§° \Gu.»ÅۄܺnLxئû¾Ç™Ûò/ ‚ ÖAk^’Ÿ‘>¬Ü?C¶WÑ ,ï »¬ ®ÿ}Ä"CHê¬SB çêGcÙûPx˜™%—¼Œ›@[C J‹?ƒ²}K^{± 6‚ ‚#Ak^’Ÿ‘>„—‹p;~G{“J¥JM3ÚM#pÜà-‹ !©³N ;X<Ó°[~‡Éò®¥ü? ‹ ‚X/­yI NDú$æ_Ãñz…‘7ÀMÂñjé:%˜XdIuJð`™ÆŸÖWoM1Ãó#Ö¿(º&A±îZó’þœ ˆô!X†ÜCõö]k‹ !©³N ,c¸§¬Å÷-á} ¼¥å"Ž+åÕA´`Aë… 5/IáÏ ‚H‚d@D“ï`3ï@‚>/’:ë”àÁ2c¥/™ëjåJ#)yAĺ#hÍKRøs‚ Ò‡ 0û]ÿ„ÃáX.Ϻqñ˜ ù5‰E†ÔY§^É«ÊGþÞkã ² Û«ï‘’GA¬;‚×¼ä„?'"}’Ó kþ&“) üŠÆòPÖ:Ö}*BRg<X‚‡eñ .»OJA±îX±æ%!ü9AéC ˆh®™Šöåte}^ $uÖ)Áƒe½õça^”á^ðÙé ¼BA¬;¯y‰ NDú$X®ÍC'}rãmQC{Ó g„èö±È’:ë”àÁâÁhëçØ^u}¶iþ)�Î1˨Šó‚®iÁ"‚ Ö ñ®y´fÄú&Hx¦19ùb%±È’:ë”ÐÁÂMt£.w“÷uEÖRþŸ]ÈÉPx_Û°ùDÐM_,ƒ ‚ äHКiƒÆÍbrêÿ!Z3 b},æà4ß…áv¿ÿæncÖ'°‡˜y‹ !©³NY9XàhBYö;Þ ,ŠìÏÐ80d#¼òóA‘ž­yaM­ørªÊ{â…?'"}”œM‡Ý^ÞMÈ=y£ùžy_£o:¼¢‹ !©³N‰4X8÷LíÍÐx- šÚ‡Ã½2" -XAÄz!hÍKRŽ+‚ Ò‡@Àw jËG¨ü¾*>ƒú¡½WõèìÑ£©ûµÿ]ÁÄ"CHê¬S‚Ë †ºn@¯¿®¡À3 óíŸÑÚeŤˆ A!G‚Ö¼Ððç½ÐkN¢¼¦&çœÿMÁКIë›`à‚å‡oÐúbœ«ÍßÜ…ƒãà±µà‹ž \°ûXdIuJè`3«+¡6O‚ã^¢óäGPlP ãƒíØÓÐp´`Aë…Õ×<~s6Úš÷>†²o\´ðçA¤2€›è²`³÷µà²…òäñ4XŸà‡¯Ú0ÊÍÃÑz™ü¿ùì‚_EÌŸË`#‚ 9²úš·´vfá`«”<‚ V(–}ò ˱yÖp9Xxb‘!$uÖ)Aƒ…Žsßàç;P’©ÀÅïi¤gô6N~iÄx˜ñË`#‚ 9²rÍ›Çä ÆVô†ÛèµÚðòådØy Z3 b},æàxd†}>‚ÀC,2„¤Î:%x°pð8~…ªä=(2v¡ÎhÃô³;hP*¡nµÂíW ´`Aë…à5Ïë•rdÄÿ EõÝp’’GD‚dÀük8^e¥öÁMÂñ*Ü®;6BRgï‚C A±^\ó¸ÑV”m仌T¨¾Å©²*hZ.ã|Y êz'ýï †ÖL‚XßÉ€é{¨Þ¾ Åޜԥ°Õ"Fè%©³NY9X8x&‡`2Þ„^í½VŒ…I°-XAÄz!pÍ[´j±ÝïÖÀaì­ï:÷â:Nˆ ˆô!H$) IuJð`áà¶^ I„®@f‘ =Î0×É<± 6‚ ‚#AkÞ›~hòk`œfê¯äU¢°xr2?†Ê<í{O´fÄú&HÌ>A׿áp8–‹íO^@—ˆûn’:ë” Á µl ÿÚfäWœÃw§ÊqXó#ÏŠu=˜õ¿-Z°‚ ˆõBðšÇüØà'ƒ¯äUæ"§¸ÚÞ¿=£5“ Ö;A2 œ’焱öT´;x ³’XdIuJÐ`Y|íöLä)`š[Ä´ñŸ¸duóë˜ úÍ”B ‚XׯyspšïÂp»NÛŽÍaÌúvׂïŸÃ@k&A¬o‚d@DsÍ ìÖ ‘’GÄGð`™Á€æ�ª¼vÀLÉû Û ?AaÎVä©ÑMA±® \ó–s\mBîÉûýË÷ìË/^Ñ£5“ Ö7A2 \à•ÂQPsïÁÑJb‘!’–:ì QI\ Âó½?µÁ<ñ†Wò¾À–œTk{DlA!G×<n¼U[>Bå÷¸PñÔ-轪GgMݯýï †ÖL‚XßÉ€Ù¿`yãðÃrV׋Îõâ“'g¡(õº ªß¬Ý^‹vmLAr$xÍsÁòÃ7h}1ÎÕæoîÂÁqðØZðE×$" A2`ºÚsMÐëõ¥ ÊâÖ¹¦œ…¢Ôë\¿¸,×PSZ|u¼7Y›ËÐdu­prî‚ ‚ˆ†À5›è²`³÷µà²e­#t0JÄ ‚d@DŸ¼÷Pe%%OêH½îAõㆠÛá}-lÉÜu— î€QÇ^'‚ ˆõ@àš·ì“XÞAvÙXÊ�hÍ$ˆõM {“w÷úA{í@b‘!’–:rŠR¯{Pý¸1ôÔB1$œë GŽè1È~~9IJ^šÂú’ *T¨¬^–™ƒã‘öù»±0ž ˆõF ààY.?±ÈIK9 E©×}Eý<ãxjÛÿèeÖƒÁBÑ5ÓêËøI—6¤±¾È¥o¥ZÏxëEs‹ Ö7+eÀ<&‡L0¶ 7ÜF¯Õñ‹ ‘´Ô‘³P”z݃ëÇÁãìÇmÃ]˜s¾ç±?Ño_é‹·„œû††ú2~Ò¥ i,¤/ré[©Öse½7híè¶D6³bÐÜ"ˆõM° pÁz¥ÙAfßCQ}7œäH,2DÒRGÎBQêuª_€Ož"·£Vß³b”}ãäDžæP_ÆOº´!…ôE.}+ÕzÕ‹›Â€ö�2ù×Øë¾² 9-ä“G¤ ÿùÏü?b(¸ÑV”mäåFF*TßâTY4-—q¾¬u½“þw‹ ‘´Ô‘³P”z݃êÇÂX•‹ÜÊ\¹pûÔÿÂ`¯W;ïãjÓLû߈œû††ú2~Ò¥ i,¤/ré[©Ö3°^ÞÀ+³QXy-þ  ºâTq>RtÍ„ÂÚ‘ ¹–%­Zl{‘2ã9¬‹¼lyq'DLÃ"i©Ë’ R¯{pý8¸-Í8ÓjÇN(›µ¸í˜<ƒÐ}Ñìx¡È¹oˆ`¨/ã']ÚÆBú"—¾•j=ëÅ9oáóš{+@¹Ñvœûɟ㊛ÅäÔr²cš[â@í˜<Ž= «Õê’r Aõ}ÓM~ ŒÓlƒÍ+yÕ…(,Þ…œÌ¡2‡»Z‰íûJº…ä<™¥^÷ úqcèU"ƒ½X6–µb4̱dÐç YC}?éÒ†4Ò¹ô­TëX/–�½éØIh;Àd2ùJï/ø¾² êvÿk=-Ðu¿ö‚æ–XP;&RòÄ%¸¾<ŽøÉ`Æ¿7Væ"§¸ÚÞðøßJ,ßWÒ-$çÉ,õºÕ/Bž<Ev9®X]þ7ôyBÖP_ÆOº´!…ôE.}+ÕzÕ+b"ãÀ’…Jã˜ÿ4·Ä‚Ú1y’'.kחìåM,øŸƒ‰åûJº…ä<™¥^÷àú±…~˜ìA VEÎ}CC}?éÒ†4Ò¹ô­TëT/nW—ã”R eÄ¢†Þ²lvEsK¨“)yâ,C¦`¹z ¥ÅÅ(({ó³±y_3¬³+ý¤bù¾’n!9Of©×]Pýf­è~ôÚç_‚œû††ú2~Ò¥ i,¤/ré[©Ö3¸^o059… J¡t¨“)yâX_oð¦ ô EÌâoÐeŸ Ú³‹I·P,_H*H½îÁõ[€Ër 5¥%A' Å{ó‘µ¹ MÖ•ùòäÜ7D0Ô—ñ“.mHc!}‘KßJµžAõ¢ )ƒÚ1y’'.õå&ºQ·ç,Œ6Ž¥òƒúÑ[¼Ï/'ݤäI©×=¨~|òÞ–Ì}PwÙ‚N)ÙëDz@}?éÒ†4Ò¹ô­TëX/J¡:¨“)yâ\_žÉg°ØgüÏ æ“÷ fÞÄò}%ÝBržÌR¯{Pý¸1ôÔBq0àD/ƒz9¢Ç ûùå$)yi õeü¤KÒXH_äÒ·R­g`½(…Bê vL¤ä‰ËÊú.Â=fEoûuè ·Ñûl"bdMF,ßWÒ-$çÉ,õº¯¨ŸgO-# ½2kÁ`Á¬ÿ19÷  õeü¤KÒXH_äÒ·R­g`½(…Bê vL¤ä‰Kp}çà0þ ïë¾ò7)ïÃá g Û÷•t É­‘zÝÕ¯¬ ¨/ã']ÚÆBú"—¾•j=ƒêE)Rµcò %O\‚ê;ÛƒºqV{ÅgîÍ—–Æ ¨--A]ï¤ÿMÁÄò}%ÝBržÌR¯{pý(ðÊz†ú2~Ò¥ i,¤/ré[©Ö3¨^”B!eP;&RòÄ%°¾‹Vνeú>Î]z‚• bû¾’n!9Of©×=¨~xe]C}?éÒ†4Ò¹ô­Të\/–Ba6¬•K$hn‰µcò %O\ëËqò -Æže“ï¾NÜP~Ž“ÆQÑ,è$ÝBržÌR¯{Pý(ðʺ†ú2~Ò¥ i,¤/ré[©Ö3¸^spšïÂp»N¯ÿÌƬO`w-øþ9 4·ÄÚ1y’'.ÁõuÁÚX’†EÌ}:<›|Ë÷•t É­åDpÛ¾ÁÔ˜ÖWúqéâÿYAŒA}“>P_ÆOº´!…ôE.}+ÕzÖk9‘ñ&䞼ѿ|ÏŠ¼¯Ñ7^Ñ£¹%ԎɃ”<qYY_vXtMšsP* 3Z0!è #–ï+é¢Éœ8‚Ûv ÷”•aü NâòWRòÒêËøI—6¤±¾È¥o¥ZÏÀzqã¨Úò*¿oÄ…ŠÏ ~hAïU=:{ôh ˆ¨Í-q vL¤ä‰KP}ç_Ãñ:LÂnŽWA×-o‰åûJº…¤Õó˜´vBÇ4nÕ%´öbrÛÇ\?âØá ètÌÂeÿÓoÎÁÿ®¡~˜ÌÃ~GbnÛ1+³¼¯…–w*¤ä¥9Ô—ñ“.mHc!}‘KßJµžÁõrÁòÃ7h}1ïM§ÐüÍ]88[ ¾øA¼  ÄJ¨“)yâTßé{¨Þ¾+8Ø!+……¨6ŽÂm5 ¦¼z«Ëÿؾ¯¤[H:è‚õJ9²½æKerkîDÌgáeñ)wf¡°öŸh8[]™ (òjñãwKv¸ d–\ÂÀ*vü‰"¸m_£[ׂž%çOSŒz ªËO¡Éô*lrFéô /Ô—ñ“.mHc!}‘KßJµžõâ&z ,Øì}-¸lAYë¥J ԎɃ”<q ªoÄ4,,õŠÎöJ^OÈFE»ã­< ú¼@$ÝB±|¡DÀ¶¢lË>¨ÚͰ»|*çÅ€îŽDè^œ­(}çs´/€jÄŽ ¥hùCC»•¸e~‡Ãk‡ǯE¥K Öl[Ï kò‘§|€é0•“JßñC}?éÒ†4Ò¹ô­TëX¯eŸ¼Àò²Ë®À¡,�©~/¹Aí˜<HÉ— úÎ>A׿B‚zË(&ÝÌÀ×äLÐ%K,ßWÒ-$•ô˜¾ÆîÆ?W(bœ]‡¥)ìM—‡ÅJ˜ø7xLJdðJžÞÔ‚:ÝðòïšéBí׫üޱVÛrŽ8˜¹™oÀAJ^ZC}?éÒ†4Ò¹ô­Të\¯98™a/4·ÄÚ1y’'.Aõ%Ÿ<ét gû ŸÖubü­i&Ïäܨޅ=ºUnáC“÷ºfø÷3%ïÝ:ôº,Ð<Œó× ×ý§Š‹PÓÞQ;‘¬Ý¶‹pOŽùOV"·ÉED†ú2~Ò¥ i,¤/ré[©Ösízq˜µ<À£ Š®™H¨“)yâTßU}òÂ$Iç‰åûJº…¤Ó¾|›³ò±×Û 9Èàë¶Z¸dnØôu¨3Ž`ÜxOea.ëuÔeC‘ñr²AïHö=^üm+·ÉED†ú2~¨ ©#—1*ÕzÕ‹›‚åê)”†lÐöægcó¾fXgWŽ’ŒjÇäAJž¸ÕwUŸ<Rò’7{ï5¨ªÊP\RŽM&æýÿ¸ l1ПEyÙ)\µL…Üú¹a½z]NþI¼m+©¾!â‚ú2~¨ ©#—1*ÕzÖ+¼OÞRQ ³øtÙg‚Ö{öoDüP;&RòÄ%¨¾á|òžuãâ1:á/~bù¾’n!Ét ³W»_¯PО 0ÏF4Ö\ 7 ‡© ZËA§ASûïpD0‡L4ñ¶­Ü&êËø¡6$¤Ž\ƨTëX/n¢u{ÎÂh Ø 9^`P_ƒ#z‹÷ù夛”¼@í˜<HÉ— úN?€®ùWDû¥ò+Ë?5B¯¤[H2Ȩðuaõ .ï¡Ê8¶3VÀMa@{�™ÈÈ=€/>Ûm…Ÿ ¨ì²R(DO¼Ÿ'¤õeüH¯ ázòÏCϸWèï(³Dù„TË<—j=ƒëÅüòŸÁbŸñ?3˜OÞ/0XÂe–%9+ԎɃ”<q ªoDsÍà´ }^ ’n¡X¾PBpüŒÊr5tz=ôÞÒÝ… äæU¡Éì´Ùñ™w¼‹ÕLxX Jõ6Ì[´ø|µà- "Þ¶•LßqC}?ÒkC†ã(>qJ%³ð—³GQ¸ó",ó8GoËÃá[Ï#È1~!ä2Ï¥ZÏàzÍÁi¾ Ãí~8½Ùæ0f}û*¶$gÅÚ1y’'.AõþÊC'ƒ×V¥Ú›f¿LYI,ßWÒ-$™t¿„=$Ô)ç2£¡(ûõÃbp¹`Vaë†}ÐÙ}~|>%o.Ó×(X- C‚ˆ·må6¹"‘Ho>ð šþ²ò÷†ð•ÐÍ Sòâþ„T‹Ì–j=ëµì“· ¹'ïcô/ßójÁØhÍjÇäAJž¸Õ×3É™è¬øbù¾’n!)w çìDýÁj4 „S‰Àì#¨òvCcñ™w°” Y|€,E&Ÿ"oÛÊmrD"‘Þ|XÀÄÇx—%¸¿ƒ r‘ÙR­g`½¸ñTmù•ß7âBÅgP?´ ÷ª=z4u‡O‰Dk¦8P;&çÏŸã?ÿùÿIzÈm,¬¬ï<&‡L0¶ 7´£Ûâ€{e –ï+éJ¯ÉÌÁãèÁçÕЙ^ÃcV!+k7ª¯>†+Gàñ¶mzõMº3 Sk7œþ'B|¤7à¼Û†3!v‹Oah6cÖÿ¸:Ü##x½B>y0Öÿ;†V[É!™-Õz×ËËß õÅ<8W?š¿¹ ǯñ¶|ñÓ°Ö=´fе#±„ÜÆBP}߯éôÇÛ„œŠX#¬­±|_I·Ü:0&<spG°¿M$ñ¶íºèÙÁo¾û´(ÏÍôöOP)ÖÃá×ê8pçêL‡ Éŧmh6‡(@Hq>0SËҕ〕Í'`r=Ç|òê¡ü¥'$XËÿe{,öiþ]„`}/¤ZÏÀzq=Pl^žSoËQ#ã+¡vL3±¯»œý†áö?J ¹…ÀúzM¾7f£°ò<[üñ>tÿÄ©â|¤èšéƒÇ¤F™n0é¥xÛv=ôìXx Íû›QP­EËÛ A¾bè(¤íÐgxû7¸(°¹ªãÉ?Ò›LAS¢öÇ–€qЂ+ÊØQÙ ó˜‰³Š¢ø¶ðã­®ŽTÑÁúKHµžõ Ÿ'ïd—]õž ’¿öW~ ]×oÁ‡zQþ±í& ì.iéÉmNÖ—sÞÂç5÷ztζãÜOþ`ŒÜ,&§Þx_gÄò}%ÝBi%ÝOp¥ì}(øïľWPQ|ˆ*]_RsæÅÛ¶ñ~žH�Üt»¾ î³ ‡ÏBØ“¡•Øa¨¬Â]€r S£<w*›aŒöòa‘Þ|à0;<ŒW¡ý5ÿ ûUès ‘5¼’wý"Ûr±2ˆöêÃКŸó?Û`mWãt„Ï„t‹Ì–j=ƒë5Ç#3ìóÂG=­™„´‰tÀP2v¡Îø\2Ö¬Nr"°¾ÌÌ»éØIh;,+Ô½¿à{~ÿ¥n÷¿ÖÓ]€o,ßWÒ-$©ôŒÃÚù4,Ì©¦í¦‘U$CñF×Ì.‡féZÖ_®)÷c{å?ùŸ ¸m sUž âm[¹M®õÁ<Æ{Ô8¤î†-hSn^sK ¹f“ n бe lÉ;‡Ò›¼‚öó%èÿ Ø­¿ 6w;”&—ÿ}«!Oܰ^½Œ® fòɹ®ÓÈKA„`":ä"³¥ZOZ3‰ôÆŽëšV ¬Þò¼Õ{µ0³ŸíÑzúº¦¥±Ûœ ªoÄ<y% •Æ1ÿbû¾’n¡X¾PBà^¢óäGP°Dæ9»P\¼ùY™È­¹#ÜLÉóõÜso…Ìq´õ…ÿ)yÄÛ¶’éb™Å§hÜù®·oVÁ>yaàÇWýT5õ§$H`m,-"™Zò2lG̳âtäâ³FìTDNÞJHéQyoûQûÒ&‚OÞ‚W¿íÆÿ#ç„¡¢*³/J<A2€ÂÕÃå8”'/´¨¡·,tÆ"C$-u¤"­ZlW삲ëùòíg•8ÁA2nÒ‚Û-W¡»Öë5ñà\ÏÐÝú3n›GSrN V:âÁhëiœÔ‡Êà‹u,Šq¶·ãnjÕ¼9MS;LŽYÚį‚ôæ3µüšû!þæAŒ‰iîqÀÔý”” 1ÊÁãžKɺ´fé?7ýhoÒx mëo°½Mð?‰ÞÚ(òÔ¢ "EÁ A° xƒ©ÉèöU±ÈIK©Å‹ïé`é ήC‰ßL‰›™ÂÔjqÚˆª¿B»mÜüSèöe!#ÿSœ(;e;#I.´`¥)1$Ø f®K(ÉT`CÆv”~qùÛ>FqQ´BsB®C¤7øÅzjSVtêHY'$4F]0ÕWCg[% /Þt‡Õ¿Â1? û“羃φÌ`šHº’Hk&‘Þ¬ýüX]*ŠÜSèpÌùþÝþÖ1ösòX38¡eE$VÊ€À<y·ÑkuRž¼TÀ¹LPïÜÕÝ@É;¸\YˆÍ]ïóCý_åVoÁü-Jÿäÿ}ãÆؼ±Ô»È*ŠÉ$Þ¶•Jßpã°Üæ……þ&zíüŠ›ÆPw ·ûázæ Þ’E}óLÂBYªç…çc4|~ 6¿f½!ÅùÀ9ïãdî&¾n™È)Ü‹â½ùÈÚøj:¢qœç•ÅIRÓäQnë”e¿ãýÛ¡E‘{º¾í^3àwŠP{¹gË?Fæ†MÈûÇ%|·o«ÿó[Q¢M®ù8û»ñïç "¡0w Pþ},cüÞ”½Æ¹16 Ãá#71šè¹cpB)ÊŠH°ú,ã‚õJ9²ƒ¢ôþ EõÝpF¨kðç…ARG�Ü =öm ìˆðE±³Ï"XB->kƺ»økðêòÞõ‡£ŸÍPƒ#M>Å„Õ7âý<‘Æ`¬Ú‹šöa~ã4‹gºƒÈÌà…ö‰C(Q>àEŠ�ÌPmÍ@‘nØ7&—”<×oPœƒI*GbCzóÁ «¶WÖÏ¡ë­Rƶ~4¬F먰ŽGQ$¤@òÇè ̪|d—’Ò¥ÊâBTj¯ñ?óÊÉP˃8[?Ã;åídž?Á†bþh­ÂneÌC#pØ-èPžÆUÛrxñDCk¦œ§IpJak}ÉJ‹5oÔÍRUÂ×þØ‚JSVD"Pp£­(cz¿G«P}‹SeUüw¿Œóe%¨ëô¿+˜XdIA¼F×¹ïÐ5u(´Œ¹" •€ìöŠÜ:t:§a3j¡TžG“éuÈÀM<´`¥!LA+iÂ?˜¸ñTmÞ‚fæÀ CWr^ žæ7f…Ø®y o"&ø³ÞCNÖ&Ê“· Ò›³°hŠ–•õ·Ìî;殹€™ÉÕ’™‹£(Ò ùc”+ŽÔŸ»r2Í+ê3huF2+÷ ÊðZ¸¸`Ræx7n&½: = ‡™.5¾%VhÍ›Ñ{¹Wèï ‘[Ñ"À$˜†Ýä}ªF/³àY‚E•¿[¢Ot‰·â‰)8¡4eE$e€/ÖÇ(û˜â:ã9¬ü\à^\ljžð³c%±È’:Bp b`x†ß2—ýO"^«†‡†c¯á’€),ñBb0!}@ ã_ÿFG]›OÀ8>·Í€#ј[x^ ÷”ºG˜ððŠcÖ6V_ƒå­6ŠôæÃ\æo±s· wû–¯ô¡·ã*·—BóëCþ¹ú“§WQÖÄP ©ü1º�çëèŸ Y;qã©Á°"óƒÏ«îâÕA߯íÝÚ¸¬—qð`=[Z ûþ+o¯Mj(÷xÛÖÌPø ºá8ŠOœAPDÁ³GQ¸ó",,@£ ‡·åáð­ç”¾ØM‚‰Pü>y›³‘¿·ÅÅ»“¡À†ÌÉñÇwvâj×+x"ÿ¥Å§mh6§—¢¬ˆ“oyÓM~ ŒÞzñJ^u! Y›g~ UÈw\"èóI’ÔqàÎÕ˜é»pv*Ø‹&Õ×h¸ù.Ž=›Ð¿Q¬8®£¢ø8Î "åiTîƒÆ2ÃWí9nÎöÃmp0!RF€ã´â#œìt`ÎvÙxm2aBÐØLá<“1±ßÄ2úƒØèßìD.ïbgãÓ°§†Þñ·¢HHÖßÉÅwʾrÌ…–÷Pe ¹¹ñ AìŒÎ+·á}Íc,pS°êP”µ |€¬’8ÒÂÄ�«k<ÄûùôƒCÈÊßÃ+L©,' š äÅjL„‡EÖ6ÁÐÀïoK¢RÙ„{CÓ‰Wð=ŠƒäB¸¢XiQ$AY ö–a{«øÉ`æ÷f¼’W™‹œâh{_D<4 þ¼0’$u"eÒÓa‘ðç�Sd}„]9¹(Ó?Á þSdò›”M?z)Ͼ’¬|ì]!ˆöáˆ~‹¤ä’` O,/ðÆõc®e1Á½´ ?Ä""©œg2&á›p¦»qN݉‘p¦åoËË ±ŒŠ"!X_%vS£Dí-›ï\QÀŽÊ‹›rÚÌÎIÎ5�}Ýa”Õ„±"ÈÝ•,âm¿ä·¿ÔYÀÄÇx—þÅ6ʱ˜+qà¶öÞ ë´Ek ¾ézíJ Ž›¨­½ +ørå,JvTáû@?½63ÆBê(5Y‰ 0;‚¡W¦±KÌ?‡åÏ𦥱È$I; •U¸  ö:5Êsw ²éÑŠ ËÂchÞ/FãÐßV4~ú LÌÄÃóÚßÁ’ȹ<ÑÞ§´½%¤?Ï*Jqâlà³g+÷`§×ÇnŽ[ǰmÛ1Ür„.ŒTÎ3#Í ¿rÙ`ºy *64ÍhÖt)nE‘ É£f‡‡ñ*t¼±H½ûUès ?àÜ#ñcˆ·ý¤)#RÉœwÛð`&d,>…¡ÙŒYÿãêÄnL„é2f6–µ&>ºfX¥g–†£Q¥“‚¬ˆkË·LÿŠúÜÇè[ )v‹Ú‡«5GµqÌÿZ0AŸH’¤N˜LúÜ7cËþØÉzœÆ¯qÚkÖ±ˆiã7:á™èI|Ô?g7 &‚ëµà˜ƒ£÷ ?ð¾ÃM+³oæŸMwR– HGx!]’ã·§)GôZ ä¥ržÉ˜X„o¢á\ýЖ°0Ò™È-=ŠÏòsQXü ʇ“fþÃoB¶O¢F Ò?7¡u8äP`ðÔlËóût®MüãXâãR”©es^¯?¹Å8L‚‰øýCEeptË–P»{·ð˘xp܆¶Õ,+ÿF{Mž?°ÊÚHEVD‚Å·LÿŽ[m¸Ùx =ÖÜûþ0r¼é²P)?%Á´ÔG¸©UÛo©±5ÿw1?x6þâ0n —CCÍÕêÙm…… o.Å;ÈÊßœì è‡-Ðï磢šÔGý!Ò1<ìZåDS�©œg„ˆ¼M· E!T}cüɜҫ¡wLÁÒP pÒÌÜ.ÞÀÄú%Ò\Œ HÅÇâÀêñ~>ý`ò%’9o3ÌcB¶õ«ý޵M‚‰@Â\Æð»‰ñöJüíàÄ»"EÚggìFPìéÈŠHÉ€Ù¿`´ÁÜòr—råeì@å…ÐÚ?åS0AŸH’¤N@@ˆŒí(ýâò·}Œâ¢ áQ{8ôûvùi—&®†ö‡°%:꟣5ÕÚ`ÇÞ+J”•)a(8X ÷w4bˆã0?ØŒOë‚%÷X/á�sõ¿ bÇ»fBdTŽR9Ïa >Ć¢¥¼GK ž“ÿ™À[¶I70±~áÇÏõo ¹ÿ›?h¿XþÂD˜¤Æác‹C,¬@âý|ú!†9¯x&ÁD8f0 )Äæ¤(ymPjî /PV˜,žð'f_éÈŠHÉ€i#*ßñ+wŠ÷Prö"¾o¸óèS˜Ÿ„߯IWÉㆠÛE},ÇR‚e6?¿&0ÿs°íÄÚ«¸¢9¥Rƒ¦ößÃfÀˆ¶ÂUC®€sÀøÕy¿ ÂŒÇÏÀ8=‡‰Þz¼Š&ˆÕ!ÀQ*ç!"üæÇ¬FÞöï›oÁ+À9[ý©5„(ìbF Ö/¼,™š‚ë?ñøÈˆ1ŽÅ!– V ñ~>ýðÀñó%èÿ 2ѳ[AmîváQ"˜À3É™xæ³tdE$‚d€WÉÛŒüJ-ŒÖqŸàyÇ_à¤ìÌ5Y’æ­Ëù––”<×oQøùxàì¬ó]kfä °¸{ó³°1÷:sþ÷$G;ô–`!bŒÖjá¶Â‹¶ë86—Ëû¨NFä"b`‡¡V‰nàôú&(KöDaSŸÂyFˆ ónÆyåO0M°$÷È*<‰«ý¯!,†ˆõŒ8>2áÆq šL¯­½b±r펾0KxÍyÅø„dàfá0µA«b®±0KCVD‚Í·L?ÀÕŸWxÉ3º&kìBl÷FøãaJ^Ö{ÈÉÚE …'Ðnߌå¯>É&<E¢çXˆd+¬(õ‡{¡Ç¾¼Jhƒ6à×ÑÞýoŒQþ1B\󤼅üå{ìW>àÿU�©œg„ˆ°¨s?âæ‹PÅœùX\Æu‡%/ÒŠ/9%¤L"}døßU_ÍÿéD½fó‚ˆ^¾„3ç5bLðÆ>ÂïˆÊ$˜Ü´ÉôÜøâ³ØVø ŠÊ.c .WéÈŠxeD,ŸOžTò¼@ï*(u0á1C•µ …ÕÍ09ÞxC»ÿ:{ˆÙ$7 ]Éyßm 7‹É©8W:~J{?Xˆô\ÁÉ“mx!XA›ƒ£û.LÁƒÕcR£L7(‰SBîØñsC+þ ¼qvØ`m¯Cn†RØy*ç!"LA+GvÁQ\6¿öÉÏk˜¯EŽ¢”ßh  üï0œAõå@ÿLÔ eJƒÀÀÄúE në”…µ‚Ù�Eîqè$"Õ‡ˆfÎ;‰© +:u ðäkj‡ÉÁ¢Ågê‡NÄ ø;n_ÕB¥Ô ñF7¬“¡®J‰³é°[ñ. TxïW“ ¥zæ-Z|®0&¤/+X=â!–ϧV*yL¨/» ›E‰›„Y]‚ݪ[Ž™=è¸\…í%üÊž¶àäñ6ñoÂúäÍa¨± e­#Â’û ®”…‹ZÈҨÒõ‘ß'‘|ò6c‡æaæu©œg„ˆð ÞÈ^ÏóŠî”WZð“?™{ðUíEÜ”$x• ¿@¦PĈá#ÃÅ|d—øLß eq¡?@T,“©¿Uf²–ˆÎy's7ñm—‰œÂ½(Þ›¬¡¦ãyTßRÎ&$梸òŠ?*@Ꭰ4ZïÛ¸`Vaë†}o˜}JÞ0\¦¯Æ­¾¬ˆWFÄòù$I%¬WÊ‘½&4¨lBnÕ•µOo¼Qÿ6‡ù|HQìEã3‘}‡ÂÝäõu@[¶ [Uf~j¬w�g—ç áË5å~l¯ü'ÿ³·-¡ák "츮Ôâ~_À8å‹ù©Sø‚—Êy&8x&ã9]fùåžàyè™M’óËq/›æàèùÅláÞ¸ÚOGñ÷=á#üûª)¨AêñŒÃÚù4±nl]ƒ°<ÃóxÙÿNÑi¿P‹À¨Úl.::Pî~Hø ú ZV$&‰hpê-„¢àºÞÊW&{ûÑx°­£ÂÔ<©çF“ ‹OѸó]l,ºˆ?X€Dvh¬l…cºg’q¨;ûª¼ÝÐXf¼“Y|€,…ÐTeÒ—ñʈX>Ÿ©ä ¼’ƒrÍÕ GM‰âí~?µÛL®Ú‹‹˜îºu×pІcey —Ø>n|ò9ÇpcH`øÏstÔkpÏ,¸LçðÿüïÿAD[䚎ƒºóœöãì.^ܱÅrfS?†¢2·Há<“ñŸ.33ÇTç—cu8…ÒO ±a+ŠÕ÷`ý÷-Ô×\D›¡ BÌÆÃÃÿŽ>yŠÜsž<•p/Ñyò#(˜ÿJÎ.ïA~¿É­¹‡Ðy鸎Šâã88F•§QY¸Ï·ÑâžãÖá<l;Ü–øðéYÀ¤¥-:®õÚyt®¡´îÂ,ÔÕ#I°yADÃ,,š¢å€|o™‡]ẅ´€™ÉéUä®ôs£É+#ão(oå{f.u7¼Qð5;„HŒ¦¤õà‡ójèL¯á1«•µÕW TÖ¥/+╱|>IRiŽŽ 8wÏ<™yåO}ô&œþÇ5áܳtB—ìÐîŽ_ ÖõÇ¿ÉåàYþ ùäñ1‡g{ñNá)\n8ƒò]ÃÅüãÇo°ÝÞ°Myæ(òQŽÃÒ~ º«­èµ»ùçi u·Áp»Î4Uê‚ãt™)G©Î/çSÐÙŸBÛ·YÌwê}T¸OÞõhÿÕp3܇Ýœlµ‘ÌJ!‹V-¶+vAÙõ|ùöÎ3ŽÆJêBàУ$+{WŒÑ}8¢Ä¢$”¼ELkðaÍ-ØÜ ˜¦ãåÚä—W¢¬D-©ƒRò¢…ß„›¿ÅÎÝ*Ü}k}Ò‡ÞŽK¨Ü^ ͯùçèOž^EîŠá÷Ixáœèª)Àî%ÿ7¦ôåìÂÂmØ\qKÄÛýD!}Y‘ÆJƒß(yBO§ají¨ä¥0´;SÎ<3ñ…v%Ÿ<"!¼@kiŽïôû;þ†â–¡õÐ(oý!Ë;tÊã-óQŽÁXµ5íÃüæqÏt‘™Q€ò‡P"4B§¬ãtY ù嘂ö=ô#¡²‘Ãüðc<‰'Ñ0g.ØœŠŸ‹ï¿ÝØ.ÃÙuü<õù¯p3S˜Zí`f¢½O¥2<l Cü8æFyÙô6–0?þ7óQIJ[ßÌã…þ 6†î‡V”w±³ñ)¿…‡ôs£É Îõ'Ú/ÔâÌÍAÌ{oöÞA6¯ uÊ"}’ôeÏñËç“$•<ëÓ¢<73`âúK±ÿ»V%•¡ÝEíJ>yDb`ÁVò}Ì+”3P¬ï‚¾N°GWíEÑ5ÍP•4aˆÿ,7ÞªÍ[PÂnš£k¦5bœ.ûƒž¬˜Ì¼ìÿCIŠàóÉ‹‡p7y&ôýú=Ê6•Ùç;A$Îe‚zç~¨î>Xî›Þ;¸\YˆÍ]ïóCý_íVÏýö×+Ç076€CRé[f©p uF+;Î oÉ?Ç=Ñ“’:hˆe¶î™îÆ9u'F‚¬¤BËKŒ¹Vëçxý>‰ð°Ë 9µ ôeE¼2"–Ï'G*yòó Zµ6$ꆮ!:KLah÷øC»òDòÉ3_ÄÑÖþ'‚ˆvóôwTwû•¼÷QÛë€Uû9ž¿ÌÏ·+øþÔ>l¯éÄ´ÿ«Âœ¯(aüëßè¨+ðŸ†ÎÃm3àÈ‘õ'OŒÓe^92ÔCùKÏòÜ[ºÐXþw(Ûû`±¯v(øïÖ'or_Ç÷äœHÞ¼«CûeeQìlijH—¶Ž›¨UÞ@oÐ5áAãçøXÙ“åyœ~·â Z¬± ¹'ïÃ9÷Œ™ËÆ•)‰R ko"Zøý”ËF‘1%ó‰{ˆ«n>ñúÁq.;?WíÉ `#¡“ÔeE¨|Ž¥DKr¤7Ýîƒ+4~P-x„ û†v?´+³W»^…øä¹ñÔ` PäDð‚™WÀŽÕáï@å;; ±ÌòÂî µŸ K‘‰r>@‰ÞîÿZ„QV|„“ÌÙîá"[€›L˜XC5îÓåHÊQ`ÙŒ‚ºáA2R»Éûº'ÁÑ5c.(¨éÎktû]#ý®¬ÖWŠ-2 þc̦Zì°C¤�DÆ$>îX›ÑA‘1%„?º¦"ë#ìÊÉÁ>éˠذ•ÿù)¢ ßb:É@VD"2$IRiã=jRwôY ×Üf®™ÊÐîq‡v剸 Fñ;",¼bf1 ®ü3Ô„‰Dµ`5àÛ.ÁáxØéêë5LdÒvûð?~rêÕíSŽ.¢ñ±-@Ö±2ˆöêÃКŸó?³$õjœn F%1˜É§‡rPI× †gBÌq£LÀR5>‚=hŒ:ð¼ýöjMÞŸíÖ[Pž¾cÐvØ‘ê�DɃ­çD4PdLIáu‰*ñù´ylh=~]Ó³˜t<€æÀw°$ú",á‡NÒ‡}O±IŽTòŸ¬ì4¾õÉã7_© íή±ã íÊãø•åüçßšª¶@w¡¹yUh2;e¿ÀDz ÆíC35¹óêetyÍFæ1ÞuyB-b% —šJÛŠÞgQý=:i—(b¤?›'/ðPˆ_÷Æ;Q›W£/®%¶Ÿ!¢"cJ ~¾v©qRÿ˜ßG¿À`ë)Öñ?ÛîCYø Ì Wò}è$}!C’$•<m=ÍžP¾XÙ Ž�RÚÝ٠É ]”¦–aì9— E9دæ·…A¤žäÜ>,>kÄNE6*y“.¢¯"š|tÒ.Y’‘þÀ{8›Ì¸Â§óŠâ¤º^ =MS;LoS“¤¤äE EÆ”/c6!Oõ3BÇN¤O"dHò¤’g“3ñLÚ†vO©%çìDýÁj4 ÍaF)÷;M%kIº}ð8`ê~šÀÛ0v°V-Å*´›í~ë†E¸Çú¡;,4Ò´K–¤¤?˜ƒÃô¬#H‡ƒsÞÇÉÜMüZ™‰œÂ½(Þ›¬Ñ4H#R­±AK"DÆì I»+§#Üzê¢&ô2Æ<ŒÉdtFX%/À]”C'i“’$©äÀ«0Ò1‹OÛÐlóß{¥0´;s­½Tå,Jv#SKb}à1¡¾ŒåœI÷ÑžÈM%{Nàæ6^˜Bö¹Ï¿"ˆÀ|kA'í’E ë’Hxæàež»aÕBQp]ooïØÍ^?V <h`æÓòˆTKJ^´,ÀyçGÜ|*£0Þ~×Bz5’i| Qúª®g</ðû¿~Å­& ”J5´únX'rÅÇš&èâ[v¹Rt#‚u‚|„"!c%åòÊð~à¢À檌 i{¦Å§*´ûì†^…ôXŽBÙ7á&)°·ãnjÕ1šG¹`½RŽlEè\eer«®¤­¹•Dn*y%©¾:[2P3SËjÔuÔu“ÖŸQW…©%å ’$ äå1©QÆPýϱÃÒ»¡H7RŸÀƒ†ÌL®6Ÿ˜ù´<"Õ²ºÑÀú–_k Žâ²ùµo x^Ã|å(r¥Ð Rò˜¼ãCTb0Ñû5 2Xdí,äï-öÞ¼gçBG2‚Äm‚žÈµ;9$B†$MÉ3TVá‚®eù&L§FyîT6=˜ ÙœÂÐîŽv4è-AΠ»íµùÈHtà‚LÀÉØŽÒ/!ÛÇ(.ª€V¨I0»1ßšƒrÍÕà›ëkJo¯„–ý|Û‚ÉÔî§ÛxÄ»©äà¶^AYö;a>»ŠÜãÐ%#B¥Û‚Æ’m~ÿ½(ÌÉäÿþ&ä)WZU„gλmx0rL¾ø†fsâ}4ˆÈ8ZQšwöŠeeJ„Z—„óÙ\*ŠQ¥ëƒÃ·8/Ìßbçnîö-m¸úÐÛq •ÛK¡ùõ!ÿÜýÉÓ«ÜêñóQ&‘jY»Ñà¿y™ç;Ý9(¯´à;63÷à«Ú‹¸ãb)Àäu$êÀâWüŸ"ÂàÍEý2K´0O,]j,Âm»‰ãÇÄOM¶‚¸MÐÅX»S «£Ø$I*Í`Ä>,€¹)<n(Æ–ý-° žy\jB»G:5ÍØPsÓN¥p/-èI–N‚ñæ£Ì€¢@>&¤YrôR=óÑðù5Øɵ98:.àܽ ¯ü©ÞD4‰ä‰›JæË–ìòoƒ7áúf(‹ Q©½ÆÿÜËdâÍ9· ½WU¨*-AIù—д>Æ„àn•E“Ì5SKDë’*¨®IÞü¯ÙåдŽQ=®)÷c{å?ùŸ ¸m Y·£b/ô±1Üø *ïbgãÓp Eª]ö]ˆè`)ZØšÓó-ŠÙáäÆýÐþ{:Š1·¾"¸&¶_Èxµ½Sþü$Ã%Š÷Y>B‘H„ I’Trà®Á„™ÀVå^â~/àÿ¯Né‡âv´A©¹„•~<s (aíƒËÙÊ=Ø©yÌ/YÞ[¸Œeó¨%%Ïõ”ç iæ?ÛƒqÏ*«fZß䈱©äàqt þÜý?^ù«ÿÿ{4;1üøEÓ Díú\QÀŽÊf˜ÇR¹¥^焵.yŒÖê<áÖ%žçè¨×à^ȦiÁ|G[_øŸâdºçÔ ¬çŠòr•ƒÛó1 oeR"Õ €”¼haòåJ?-@Ɔ­(V߃õß·P_sm†6<ðÊZÄ™*†`0süÝØ©µø÷ Ì"å'Tdá²ÖÄßäŽGæÇÓÕ«øWhÇóJjÓþ/Ñ)¡¡HÈXÉÁ'/…pÎÿƒ&íUè `gy²\ÏÐÝú3n›ý]Ö ¢½qH9¢Çà›M‚„ éBl_‚LÉËz9Y›¢˜g‘æjHIÛ›œµ•£ð›J¦Ø¡<XÕÔÄwJ€ç5þМ‡A¯I¼° T¼þ f‡‡ñ*´-ØÍð~ú\$¨RF$ëEp?qg'®v½‚g!²`ˆ*8ZXøy±ÚÑš°q¼FÞJ›ÚûÝ‹~ImBuV"ø¾Õ—B‘ý)´}ü8ô¿êËÍyT OOÜ©bˆ·x^ ÷‡zÔ5š0Áù”¼c‡/ 3¥>y!%âymY±ð«||ÔÁr µ$B†$MÉ3Ô*ñc€Iˆ^ßeÉž(|òRÈ´U~…vÛ ¸ù§ÐíËBFþ§8QvPø‚š”×ĺÇ+¤UPêaÂc†*k «¯Á"8 ú*sõûŸ^»¦79l¡XC9zö?x°"ý‹÷96nøÊÛ_ù_óÃN™ZTæo慸ЀñâÛ@½Ýô„-kù'ð¿ãçKÐÿ9tób·þ‚ÚÜí”B!•°ÄÁÚûÁc´ç Nžlà ¡æ¸‘Å ’êƒX6ŽŸ·R X{ÑÀ÷íõï¡ U 8Ì?ÆA‡Hb¤Š!¼8ïA{{õÛð‹ßöNúŸDFŸ¼5d…D„"‘’$©äÂðÐXH£òÙò=ö ÎqÇNÊ{Ѥú 7Ÿð,ölB[’¡/˜¿EIãŸ| øœñ6o,õFÈãì:”½ö]+AÄÍžX+N¨¢óõc®Ê™8”#o “\k;¼BAÊÝfäW~‹f¥J`hðxa¨xý"µ…;âÕOÄNXŸ¼9 5–¡¬u$B†15P¾ôÓk3§ð V>>WlnѱÂÚ!jÄHCxtè³ïT´'îЇ›…ÃÔ­ŠÝÂiÐÔþ{ÁŸäïŸÉÚWl’$•ìø¹¡m6Ø£¹Ja¾BþlüЬ°+'eú'ÔŠÌ ï¢@ÓDÞ‘->kƺ»økðêòÞõŸlÎÀf¨ÁÁ êZ9@Ö Kka‡¡¢'Îޱ@;öy8nömÇpËÉó“Ÿ«Úv ÍÕ ¶‰mB窬‰S9òŒÂ|ó"ªË ø£%åN £uÜw´àIR’_1| Y[|Íýß‚oŒÌƒ‹+ê"7ánòú: -Û†­*³°³,RÉ'Z"6hÄZˆ•*†`{ÔJoÀ¥€ždúpSÐà÷ô däÀŸíÀ¶ÂOPTv‚,‘ä#+"!k%/¼ŸÏfìÐü!,€ƒ7¼k±ïÄfÞŠÆO¿‰${ž@{à;X©½¿|,üy:Ó°µüú<šL¯*yñæ�!ˆµàçYIŽ/¿Mè8óÚ± Sòâž«²Æ·PØgF`ºy *¦(kšÑnúæh¢ùyO$o¢¡ú3T(¯ 3éJÞÚ¬°Âg÷UhùÞÐkç¿õ\C=h5Ü…Ù™ "2NÝ9ÇpcHà,u܆¶Õr˜ño´×D¼e-˜ùx“ʆ_`e5¦¶Ž(Æ'¼ŸMP‘F4ÖþD ˆ;U áeÚ ópè¼LÞ¡gÓa·â]¨x#@{L*”êm˜·hñ¹nHÀ>[>²"‰!ISò®+µ¸ÿ6Wޝ˜Ÿ:£ÈÅo8Œ_ã´7Ñë"¦gpÜè„g¢'ŠÈñàkìµßæ;È'H8cxØ;æß·[è 7W‡ex<ñyÝ$‚Ïñ+/p3‘[zŸå碰ø”iû½~xÑEócÉéûq[{eåu¸X{>Iæš`î¾…09[ƒknÁæ^Àü3öenA~y%ÊJÔx%•8~Z×¢ E¹>E2ÏŠ&5ЪÌáYã^(Xbå]¹È.Ócx°û3P\ĀЯ2Ƀ–ˆ !ŒøRÅ^¼Ö° -û`Û­ «ÌIJ>hoJ— û ³û }JÞ0\¦¯Q èïËGVD"2$IRé ¦&g…ÝxEbq7…KܪÀæêNˆ±$ED:nÒ‚Ûìª;ž êË®Â&hÑa®Êfþ³Ÿß˜BÕ7ÆÏMæóQ ½c –†:ŸùÏšÊQx8÷ ô5¨“]3<î92‡åû;泞àFa¬zKØ8zCþ.©†[€Ç3‡ÿ OØÔ@ OD‘hUfaÑb‡×Ÿ}ƒÕ¨7±\³°j¿€Æ"䯑|ò")D:ôÉ,E£?btB™}UÞî··l“Y|€,Å{¨ò^î¬ùä…#9R‰‡å¶zýMôÚÝüó4†ºÛ`ˆ&h gƒ~ß."áeû`CûCØGŒ1üéĈÐI«â‚õJ9²aõ†MÈ­º“CˆÇnŸá¦VÍósÐ4µ ü\:À›±¡H»÷ /)yNþÿe«(6 pÞåÛin•Vbù/÷¥Ø„ˆÿ>õÕÞÀQkÃnbŽ¡ÎhÅ`Çä--¶îAŽP五·ÿ g“®ÿ_|ŠâpÎ|uúž/P¿?nĴljÞUçÒJ8w¨ùôˆä, ±A#Byòâ‡Ýä5>‚}É2ÀnÇsÇ(&“æÍ‚)öà‡ójèL¯á1«•µÕWGu *Y‰DÈ$I¥1«ö¢¦}˜oìY<ÓDfFÊOBI”Ñ5ÛVøÀEcŠ#"øÓ‰¡“ VÛ =åš«A!úkJo¯„–ý|Û‚ÉUÞ\—P’©À†Œí(ýâò·}Œâ¢ h¦Ö¢ÇaÖ¬FÞöo^Ÿ’W€r¶B±jn@f*²VTN¾$-¿ ËqteÙï„­‡"÷8¿®½ø-›®nBîÉûpÎýãÅs¼Bp¦h’¢¿ÿ ŠâªÌÁvãóð‡N›¿D×´°ÍãZæÓR}/"Pž<q`Ö«äÌ”r‘‘H„ IŽTb›Ï’& ñÌw jó”èáᆡ+9Ÿ?]T¦h1"‚?(: bUæà踀s÷B|Åøù§>zNÿãªpCÐí΀¢@¾‰yïüR–êá` °?¿Ûº¨|;ö6ã¼ò'^‘a æ UxW-«)¹Ìé[‰Ú[xź?ÖîÆ–â³¸òVÙþ ßWî@^es’ò ²É|d—‹–·u`¥ÊâB¿ED,“6óÆÆ\´a’ñû¯ðS] EqUæñBÿ?æC"önãÍ%ð÷ 0Ÿ–¤ä¥Ê“G,!Y ù*y,ýÁ%Œýuþñy¸m9r£‚¤½X¦h±ÂÂòvB§9¥êZ{}¹°„"F„N‚Xî\íÁ¸g•;3l6GŽ’é½ Ì@‘nØ7&—”<×oI p”jà¼sÝÓ!m¸V»ñ­åÁko£ø²2Ó…ê¬äÝäy¨?w?Äo˜¯›ú ZBê!$5÷ ýýB|$ˆ„·ÿŠ8Šâê,`ÒÜ€ÿµùïhè‰5:k¬æÓÉ'4b-Øx <yC>²"‰!I’J&`Šp²Ó9Û=\d6³M&L[‘D0E‹•p &¯XÖÜY™yUÂDèôÌÁÕï ˆHDJRV5d7W…ØîÍ«ÇÔ¼¬÷“µÉûì}S³ŠÙ¥`SK7¬Ú#¨ëØló2ðñw(Ú˜“¤ÅƧ¬vÏñ?E§Ã*IÍÙíd˜Ôg¢pçE¯9+çhÃámy8|ë9)}IEÿÅÕ#:k¬æÓɇÉ"ÙPž<b ùÈŠH$B†$Q*ñ‹’ë5Æ\±žF2EëCÝÿcfŠ#Üh+Ê¶ìƒªÝ »¿þœ{ºq›ZzLj”1ÓUÿ3AÄŽ†Z%~ <Ñ7AY²•ßÿðÚíÕMYn«TPêaÂc†*k «¯Á’è�G’€)6'Q~áÇ€öúÊó£2µä&ºQ—÷ žâ£3¨þl'¿yV ³¤ Ö¤x¯¢¬•Õ6ôìwD I}ú¡9RòR…³†!m¾–ÒŠŠâªÜhÇ5óéäÃæ‘(O^áeijkPÞ|áN "D±—‹¬ˆD"dˆÌ¤?àBMÑ’à“ç1}ÝÞ )ÁD4%œsðRQ|ˆ*]Ÿ¨Q͈õˆ ÃCc!ã”üå{ìàh½hv¹„ÿn˧ÐÛ„š™ñ¿‰_´î5*QYZ‚â’ Ô^¾¡¤)ÊLY]ò\RV[pEy�;*/øéÐfv®m>ä’:m‰î|U¥=Ù¬¯è¬¬ý‰Ô@yòÄf“Ïz WF~F&Šõvÿë DŒ(ö2c||<`}Ö{eHà³ÈH*¥Î'³ý„Oë:1þVhðÊæäܨޅ=Ô½þÙåд,w +×”û±Ýë˜nÀmK yAD‹?kÛ1¼Ù[F0Øþ%¶e(×?]¢ðÀÙ¥ÆÁª£Š:˜ÚPÎf‡‡ñ*ôï±�:ûUÑ%2§ðäÒÃqµµ—ƒÖý•³(Ùq M•ö䳞¢³²½AÈf¡fé¼eÙvd°¨»ù‡q^yIQòâb/7þóŸÿ ;;;@—Y.Gõ¿+>ä#•Rí“×XŠÍK°0‡Ÿ� Èû}¡"áyŽŽz î9ƒ·G æ‹8Úš„«pbÉ'o3vhþX%hJ¼ ZêC9{àø¹ ­Ã ?_AͶ<á¦rž\šÌŽ`è•/`Ê23°4•^ÞÕu•Í "ÌIºj ,"¯é=K¹£ÈFቋ¸i²ùâGxÆáx-Ü‚%fDˆb/G˜³¼W[.V«ÕÿŽøH’TbG^ú7ÉYÒå'0™ž0U!<|<p3°÷^ƒªª Å%å¨Ñ´a€…˜†4ÈCBH;®+µ¸ßgâçÔRù–áñ(¡s _†4_@ãWФÊ™WòÂúä)±£A ß…'—,Žv4è-Á ¼Ý‚öÚ|d¤UÞÕÑnƒˆÖ11°ùE$ƒH²-¤È$؆tðE¿¢üeUjúüJ÷î¹$¹XÈ-‘y¬„»Íë‘©ÄMÁ¬ÞEö~œm¼íŸ<‹¡Çã7¿TäžB‡cµÓ‚ðá៶¡Ù<íJ¢8¹D¢yƒ©Iþãx„›Z5”ÊsÐ4µGiÆ,F„N9#†‚&…PÎüFèú7ÐÜÿ-@áç‹å/Löýeõ¦ðä’$’O^Æh„®‡¢:H47ô)ðEü׿þ¦¾²cÇÿ»ñáÇ„¤r’¦Ìi=-çP±ï”ç£2æšÜKtžü v™³ ÅÅ{Ÿ•E{ù…z›'Ö-#IGOãè:Éo—Îþ9¸.¢€)xÙÇ Ƴžo°çPë*9ó"m>‰í. 'w‚HU’±¥_Bþ¶Q\Tí€ÐèR"Eè”-b(hRåÌ/ÔSSpý'³S O.Ym|ÞA_ oêÇÓ1·ðõH7ôK²'Ú�B‰ƒ)s+÷¼ ‘(¤–“4a7k­¼LH‚’·hÕb»b”]Ï—×(þï4Vâ° (öÒ=Z‹ÀÛ<1oñÉQò˜?]éUÿ¦‰Ç3]Éfþ 墦kI0óJ\©j•àüæ³² tÂ^§FyîT6=ÂX"{L4'÷8ªÄjpCÐí΀¢@>fJ¼”ÈœÛøül‚†ÚzÐ)–‚–úP΢øRxrIÂ9ÿš´W¡7<€å+t=CwëϸmTÈ× X:–&5” ¿ÀÊ‚y0µuD‘ ]Ä�B ÜmÝâ%)ä$Mø5«¯šúïpÓÊÖ)¾íè·ã?I0×\°hðþÛÃÕe£Øs3S˜Š¸g–öÐZ°º1ù!æ-#yJ^I†¼­º€qã lÞ @æÁË‹ÇìC(?ýi•è Fì!Ñ'¹)<n(Æ–ý-°%r Šâä.VBu‚ˆ€78QŠtþy²¤ä¹~ƒ²àœÀèš¡Sî¹v|ˆçHáÉ%È´U~…vÛ ¸ù§ÐíËBFþ§8QvPøš”ð@,…Â^~ f!W.²ËôlÁþL1 èJ™ß¸‰@(„ÞæÑ-^rI}NÒô`ñY#v*ÞAVþäd‚nð ô%™Øyºg‰÷Àç\&¨wî‡êîƒeë„Þ;¸\YˆÍ]ïóCýx«'í¡T‘$sÍ)~ƒ±Fô´_@iÖFlظÏo¾Éo?ì ¯Þ‰arÑ­ ÷]õGPÕ”àˆu"8¹'2¡:Aø` I!¶kÃ{$Á”¼¬÷“µ) “æõ¡“EnkÙAvÁfÄ0;M—¶H?ÌߢĻ^úM7–òŠ»;ºÜ­Œ„:˜…ESˆÞzÎb°±õ¦)ïëVíÐX„Œ H&XÑJ,·yt‹—R›“4=ðšKîhÄÇÁóâ&ŽŸî´{ÓEà÷‰nMî…û6†Îó•E±³ÏÂêkÒ?JIRòà™0£q)wÆ.ÔYnóö0,]£&,Bœˆàä.JBu‚X fõƒ JÝ#LxÌPemCaõ5X/xbDè”3«ØõË*ØŒf§éÒéÇâ³f¨»‹¿ï .ï]ÿ!Î l†ᇆq:XÎÙ¯Nßó0Mqü¸Ó'z4ðc0î�B‰gé6nñÙÂ9Ñuæ,ôÿá•£'h=V ÿ³­«…*s•<à5ºÎ}‡®‘%-´DLÇ"ý¡T%oq­ÇËP^{ÿý¿ÅÓI™©4"8¹‹‘P V'|úƒè"вá¢qrXð,¬ƒqÊ/íúå­-^³Ótj‹4ƒ›Â€ö�2ùMŒ"·ÎiØŒZ(•çÑdz-¨ãt°s°Ýø<ÄEÁ_6‰®i!Jš/€ÐŒÄSîè3>sÍ0sU±ªDG°÷Ãy<q(“ò8J6IºÉc°üJOЩc¾Q¥ÒÁø6÷R<xàv'b³Áaþù †Ùê÷Ÿ'ho¾çsªĪÄ–WŒçq°ê§> üFkÂMÝM^Lwİë_À¤¥Ã«zí˜çŸ]C=h5Ü"à„ iÃòϾŽy ?ÐÁZÌã…þ3äUþ3à€/†Ûx`sñ£K qo!b-¼¾{¾‚þa€‚ÄóЄWH~Ÿ26€ÛÿM²"$*y0?<3n_®CÙîƒ8¥mE¯Õ›9˜Ç„ú²«°Å­,®„sÜÆ7?Yá2«°•ß(o÷ÊZŒ„ê‘X#оB{ùß°aãçh2Ác·ÍVµUÈÏP`C±~(y8~¾ýŸÌdeÙDÄnýµ¹Ûš˜-bÚXƒknÁæ^Àü3öenA~y%ÊJÔ2RŽÄh "!ˆã.þ@ðŒ »íLÄü ÄÞBÄš8øîJ7žNîܰ6_xëžjHV„#EJ^�œcÖ^´6œ@qQ5Zm‘4îpÑ)—Ê&äV]‰2é³XÞ1jJ>Dfv9®XãØÔ¸_Âþzåy76€C3þ'‚ˆ‡X#Ðrp[›P²åïÐ>ç·ö!Ê]¯$j˜)XÛúPòâ¶ëÈÝÄÂXõ6–°ƒ¨72K".F[ A„wñ:Hbo!bM"æƒÞ‚2Y$YŽ$)yt´[Ö¸›AkGä9oxø”k®›~\S¢x{%´ìg©na°\{Êè]:1õ—Ÿãc~ól²<Át• B–WìœfÜl¨AYé^|´¤Üi°N²Ûæuä“ήß<ˆ1ÁvýìDñêŒV vœAžÂŸ|Õ=Ñ“h•‹/›mA$QrÜÅè 9ļ…Hw8÷L7/Aå{F‹3¥cV–8 ¨(ÿ6 Ÿœ-—OawÔù SÉŠ•$IɳC_VŒÊ³§Ž!åìQ–V¹)˜ƒ£ãÎÝs6^ùS½ §ÿQ²D<%Y* düFù©Å·`^DuÙçP^é\gJ¯ìNMÁõŸø6 ˉÈ7!÷ä}8çþ‚ñâ9^Ö]i".£ï¨ˆoóãk ©½X—ˆ”ã.¾@É@Œà-D:³,k7@á=øØ…œŒ,ìÓ=õ¥"„ÎÚŒ{‰öŠp°Õ.ƒµ_f²B“{!$OÉ "¤¬éó·ü:u üfI më<ón@e€ã¨ÁrJú¼ýöjMÞŸíÖ[Pž¾#jDÌp³pô߆¶ú3”תP».Ì5ÅØ4,Âõä ž¿qa,ð„{…þþѤ-–´ùIwæ1ií„NsJÕ%´öbRrÖ >Óoßš}š¦ö(Ý*D ÞB¤)K~X;Q×1øÖJ~VåM?4Ûß—‰’'3Y!‚ɽ’¦äý¬íÂT`Ez”æ‡c‰›KWSò˜ßДe¿¤*rO¡C·_aµv`ÁjÀ·]ì’_ Ç;Q›WÉ%"©8p·µŸ_.#±ˆãß±áÝËë@ÉcÓàÃpÅ'Îo¾0k…½yë8GoËÃá[Ï´øÐæ'½ 磾IÔwbÀ9ïãdî&¾n™È)Ü‹â½ùÈÚøj:Xž\!,ÀÙö5Žýh ÞB ù /ÌÿùClX%v^fþÏÀe…éih{ÍÃñà7 ys­J™É QLî×&IJ^˜Ü[Ñ*yÜZËòP¬úfû´ïs,hË€‡ÜÄh"Ç ³W»Cs¹ñÔ`/ø�?wf ³âÝäIFØMûÿ§¢}•4 é‚›°ä²ò÷„oVN@?4—%6?é 7ÚŠ²-û j7Ãîò­¢œ{º“¡'7¬ÚB( Ρëíí»ÙëGãÁjá&RLÈŸ$S+b-8Ì6a÷ûõ0-íÅÜO «üYï”ÓaV48 (+<æfi7¿^°�&8{›¡6 ¬áߟ*$*+"!’ÉýZ$IÉ „òcOСú³ ±÷/߀™ëEíU”<¦înÄPèà↡+9ŸØÛ¯ˆþtþ€ þ·ÅǦßâÌÅG¬obM†n‡¡V‰½æ —Q[˜ƒbeÓ²¹CËETæ­•†!]cÓ°€‰‡ñ4¥SYŒïá7; ueH²Ù)±ékìöF‘ &0ÇÝš$\QaÑîŠP¤©gàAÃf&ý‡¶aa·âLÈŸ$S+Bó˜h…ºî[´ÍúäܱcPwŽ›„^É+ÍÙæ`Ò³„X´ÅÈ^5Rw*‘¨¬ˆ„³†!²QäË#ž(y¼üsOâå’_óYaÁšŽ {5Ÿ<nºOëÑ5àMâ‡õÆIäíÑÁ–HAêø•åjèŽîBróªduˆXÄš = õ‹b[Òr˜Âa¦ëKd­ú;Ò‰x7 ¼’×ýÔÆáåÜŸœ ö~ò)Æ’fNï÷`‹fªÍN‰pp¶Ÿði]'ÆßŽ%vCö7ªwanHX_$\QY€Ëü-vîVánßRtÖ>ôv\BåöRh~}È?÷@òô*‡MÈŸ$S+‚Hft±y/[$*+"‘”Ë£)yÁppñm{LÖ±U6þ\^›³‘¿— SD@ ŠPö…ä›0Q‡8— E9د†$5ˆuH¬ÉÐX|í^%z§®¡¼¹ööbc†’üE±d6ò7)ïû}¤<pÙº .ª€Þ‘ÄFda?AÃoàUÚVô>›¨à1Ø÷HµÙ)¬¥Ø¼¤hæ ƒß (ò¾F_àÜ]„+*,ÂAl\±‰ -ïbgãÓë(?¥˜?I¦V„@â’s„98úZ ©ÿ7­S¼<_€Ë>€~»\ITVD‚¥U«½¼¼WcåÊY”ˆœ²BJ^4,ÂmïÅUÕq”ïGyMZ^§d2sÎNÔ¬FÓ�› Bà'P﨔Kˆ™gÞÁmó( #B$bM†È&zÎ"/»GkÏBy¶ŸdA±a+J-X/ÛšàÔÍh7,ßÊ­ SŽŽ¢ôl-Š37"³ø[ôxƒC¹`RV'OÉs?Á•²÷ù¾ ØP+¢ z‘z³S""Ü ì½× ª*CqI9j4m˜ˆ"nj2•énœSwb$`Óµ²¼Ä˜ß¯p%l.I0!’L­Ä-çÆâ³FìT¼ƒ¬üÈÉ>ÝàèK2±!ó tÏäâH¢²"³#z*¯g`i8 eß„ÿ9~d¦ä¥NÞÔ­Š™´hÐÔþ;Q$ž@Ð[ ß¿•FEÐ PB,˜ÙÖRÈr5´7~Â…Ãe’¡²�×Ð}4*«PZ\Œ’òÓ¸|oP¢ÎÖⳜz ¹¥GñY~. ‹?A™Vh²Å¦Ú{rèqtC]Ìÿ®Ì}P÷ü=ISò<m­À–bÚÍvtM–‚¦ºÃB£k.`ÒÒá=a4ôÚ1ï=h5Ü…Ù9+‘DP2¸I n³ÓcÃØ™é­ëº[÷àÑ3‚®ÿ÷” ¿øüÍ=˜Ú:¢?ü\’bBþ$™Zk!†œ#‹V-¶ï`q/ø=Ä‹›8~º ÓîI~ß{4yé/u$*+"áhGƒÞ|àe· ½6Býª@Jž¸) h “äÀŸíÀ¶ÂOPTv¥,X4xß?æ›ñiýC°xcë%™L BúÈ<͈$x›n?ŠB¨ú˜ùøÒíÛ, uÐÙÞøß·ËJžïñzÔûxù± “¤ä±zŽÆ¡•5„G×\Ä´±Ö܂ͽ€ùg:ìËÜ‚üòJ”•¨¥çã°žCɘ6¢êïÐn›7ÿº}YÈÈÿ'ÊŠt’¼”Æ# ù»r‘]¦Çð` ög* (¸ˆAWãü95‰©‰xrí%€$™Zk!†œ#¼pNt9 ý¿™¹ã´«†ŽÿÙÖUB•Y{T&+¦0#—ÉI†gìfÕ@yÑAJž�8›»ï¢@õ�~ ™T(ÕÛ0oÑâs¡NîœƯÎûøŽÁxü ŒÓs˜è­GˆZ;±Ž-ÍÈ"ÜŽG¸©UKgS•4BS,)yNþÿe7 LÉ«@‘Êë˜Ûßnspt~¢Ì²$)yLY­F]Wà­ Kžý3ªóÊ*«¬-Žù6PÜ(ŒUïacÉUØ<oh•jDP2ÌߢÄ¡sãÆؼ±”üx&B窰蚅Øáý³l¬F½7û,¬Ú/ ±3‹?×^H’©±bÈ9‚á³6 £t(vB%¢Ò‘Xøýù[K&‰ï]mPjî /ðÖÑÔ§/'áöÞH‹)yX0«°uÃ>èì>¡îSò†á2}-XA[´]Ç¡_yÕ]¯ýï"ˆ8%ÍÈ\—P’©À†Œí(ýâò·}Œâ¢ hûŸÊ~;jV#o{ƒ7z¤OÉ+À9[¡œk‡_hÆžÂÔy õ5ÿ__ôB¯_Ÿ/_ൈ|UÜ4–lóNًœL^ÞlBžrešð°›˜c¨3Z1Øqy ÿ-%TO="(‹Ïšq î.þ¼ƒº¼wýxg`3Ôˆ–ksvà«Ó÷|Qy§8~܈i½‚LÄȵ—�’djE n9G0¸‰nÔíù ú‡J‡ æ¡¥ 6< ¢È…D!É¡Hx¦19³r?á1©Q¦­¾2Sòµt5´­ðl2 GóX™}UÞn_XiI‰¬>@ÖÒ¦Çûêêp/ôØ—W màÉ«þ:ÚøóD¼ˆ‘f„ýŽÝü¦J>Ä)Ž¥z8Xâϯ%6U‰d`A’šq^ùLÓ0« UxW-Â•ÜøýúÄsÛÐ{U…ªÒ”” Mëc¯5‚P–¿Ç&äž¼çÜ_0^<ÇËß+|Û‘yÊCÉxë†ÀLºëÐ霆ͨåûö<šL¯EØÌÍÁvãsd‡»Øü%º¦…˜ûŠ‘k/$ÉÔŠF¼rŽ`Ìcràÿàÿüûù²La·JKÍÈM ÷Ü·çm*èP$ Z*ŠQ¥ë‹*îG$d¤ä¥Ò߈(Žüp^ ¿øyÌ*deíFuSœ‚ ¿qì¾K#"ˆf„åÉÛš±¼©ZRò\¿AÉ ÏôO¡ F°1üúDBŒÐâÆX>Sÿ#!DS2øÑ9öÚ°BlX …ÏWùÏ€ƒM¾nãMhXv~þÅk/D2µzkžMòÂ{±1ŒL *[P&Ò-¿øHô@(^ ÁìrhZd#_®)÷c»WfpÛz8ù(y¢ù‰‡Ø×ª?ñ¦a7W…Ø®yÌ‹F¦äe½‡œ¬Mk$TOÄ6"†_ŸPhñôE.J†gÝm`"¨R<î9cPŒ\{ ‚©<s¢úÓ±ÂaÎÔŽ»N:T»+A‘êV€LéCOãQì¬þ =üs_W; ¼âÑ&ÙÀB=Š„ç9:ê5¸ç ®Ë‚ù"޶¾ð?Å|”<Qüb$Iת‘¦ají†Óÿ´&žèýA¥î&<f¨²¶¡°ú,#ÉÊ1‚ˆá×/Z<­‰¤dÈ~>ÔW{ƒ¼"î\{Ƀ~“7ö�Ë?DÆŠýYi’‚\¥K‘!í5׋Ú̃пH‚[TÜHô@(,½LÓM~_®&sxiy²ÎÌ5Åð7ŠQ®UÝ/a½Ràpcx0äóõ#ˆøð`¬O‹ò\æx"ØŠõpøßµ:ܹºÒa}ñiš×…¯‰XÁFâ÷ë‹¶hShq"•„w±X*ŠÜãЙF–}~²דÿÁð›ÕÚy¼ìgr&–:ø•ÌDo6TãrÈþLoèÆ 4Û;Œ¶žÄÃ`À|œÇDŸüxV™e²G•ÑW¯xç8Œ>ŽœÇŸ¤[„ÛvÇ OÓ ™ùäÅéo+b\«²×Êè}{î+?ÇÇÊ6˜,ÏäA¬CóþfTkѸØñÅÐ5açævè‹3Vn\6(Ö‰¹&/iÒ"؈¡Åy™;2‚×+ú܃±þßi%wDH¨¾:ìV<Ùå߆ȣf(‹ Q©½ÆÿÜËäjsʇá8ŠOœáçŸ2B9ÊÂ}o£%ƒdùÓkÁäÜAì^á‡Å³àm©¢À3ŒyÈÎÿ¥åŸ¡´0üºŸ¹O‡g^‹©#Ñ¡°�Ž[*X>:çeÝõæ�¥o ½µÛã¾u”‘’Lj×ß(¸xBFÆ\?Zï »‰œ¼v©(Qð)i5+ÞȘߦúX&šÐÇv*«pAײ¼yÑ©Qž»•M0–¶‹¦Ï­Ïùÿ² K&´Ý6aÈ)ó`#q‡gìz(é :˜2™ºÐXþw(Ûû`Yò&ä‡ ÕW…Í¥ÔŸ»²©â•?õ´ ò—âÇ þ ³ÃÝHeŽèãÚ EE’üiˆµàÇØø¿ <t=¶ÀÛšÔÿ€ëd®žQ˜ QWY†’òœo¼!Ù¸iHó@(Üh+>;ÙÅKC?ÜK´Wä¢dÉÜÛ‡dKÜ)Yd¦ä­ÁâSšÍ–b5 ¸Qô]¬@.»9 Z 3P¬·ûß´Ž_ j|{е±ÏÛOa¯ÖäýÙn½åé;’8e äÈ<Æ{Ô8¤î†-hœY ×Üh®9ƒ{È 47…Ç ÅØ²¿¶´µ@š‡£M‹ŸùEŽMÙ #•Uˆ/´8Û`—†È¼Ð²upБ¹ü!¡úšx^ çÿ­Çé†_`e›E¦¶Ž("Õ.`âáC<•Ú>“Ý‚ö:C~ż%„ÁÌë÷†7›%Ÿ¼(`·`1¼êÝìÿz»d÷�=Š7޾úrT]¾ƒÞ¾ûh©ÛƒÌ Ûð™JeíÔ– CQ 8ïi$d¤ä-`Üx›ÃN怒€À  Þ߸Õ—™yIÀ‚¨¿.¡þt®AXž¯\ج|ÛÅBb°©NÔæÕ¯ƒ0õDBX|ŠÆï†ŸB}òxÁc¹màÇöMôÚÝüó4†:¿Aÿ;ò“œã-é°¼aÍ_¢ä£­È.»«¬Íà¼sÝÓ!²0ªƒ0~Ѽ~m¬ ¢½ú0´f–OÉk»§Ûâ(Dò!¡úêø7àŠ,äïÊåç”Ã-ØŸ©€¢à"¢˜_œ{¦›— b§ñšf´¯éË—`~ J…mÃñ“-xdmÀÊSŒÑá“@˜‚ô9 +O‡¹ýZ*ìì¨ÌRõç–èÐj° wÚ(Ìz2v êêc~ÅÒ6ÝG£ê4õ¾ˆë!¯À+{>Få÷?(YMP–ì yí6ÌcâjIœM‡Ý»—¡²�P!VÉ °önÐ3Yq‹nòˆaÎÓ§qRj^׋nóKÂb ƪ½¨iæ7Q³x¦;ˆÌŒ”Ÿ8„åP¸áoL¯ÂhqÆ-°…³Ê-œàƒ0vºûÏWyºa½z]^ÿÄyŒwF^œ&%D #¡úª° …ØÑø'¯ôÌb°±õ¦)ïëVíÐX„5,ûÈf"·ô(>ËÏEañ'(Kå¡S2nA ¼ÁÔäRòk"6ØzQœÂ½an¾‹DnÁVArB)F>J^Ø fº¾ÄÖD+FžQô(AÝ3¼ ¶Bs]¨¹æuTÇÙ'#~û`îO|Ë6`E7à iEÄJ¸ÐêüÜ©/ci� ,– ½¤É;ϸñTmÞâ³OFª’4bycºЬ|ìõŠÊÂ>ÝS^-Jü¢m8‰ò ?lDÄ…ò|äU6Gw¶JBõÅgØ©ÈFÝäÉѪG†svà«Ó÷|›¦8~܈i½‚óE²Àû¡PBÕ7Æ»¥PïS°4Ô ”�~ Jcλmx0¢v$Êu'mYÀÄo=°¼‘·—äP$œ¿ æËPe?³èÕ͸74÷º*£›¼´²æ/nøI˜Õ…PlUÁœÀ+ZßF&Ìb•Ož%ÞÍ^„“î9nÎöÃm¤ä1â‚õJ9²ÃŽÕMÈ­º“cOv£|@ ã_ÿFG]?¯Û<Ü6޹‰Q›X2SÛ‰ºŽÁ·Qs£OÃá"c.Àõø;mùz›@Ÿ¨µª3«î§émÆ›®$<¡úl7>/6‰®€Ðá‘a:?Ć¢%Kš%%ÏÉÿ_¨¢˜�~ JC ‹b ï-ØíŸ U} Mã tYÇe4–%z  ï!ÛV”„U@9xœ¨Î;̯Õó‰F@òJçzá1¶!á¿´M²ìQZÍ¢çœÂÑÂl~óÁ7R£ñ5Ã0óøè.†¬ü«·n˜èGïÓ„Ö’Xï°[¸­9(×\ ¸½áË5%Š·WBË~¾mÁäª;8^¸„’L–žä#œìt`ÎvÙÍs“ ´™@èÆt‰Tç¨óÀÙ¥ÆÁªæÞ¡„êi÷ÖßIk'tšsPª.¡µw“¢ù1±äÄŸ!Ï›R @nãÍ%P‘ä0kV#o{,Þ lãV€r¶ú R´‰OÂ-(!f± DíÑ õ-¸¢<€ÑZ,¬soÁrŠ ²¸�ù……(KôþZ4$z  ¯ Ù‡ïo5£¾9œ¢ÇR(äà}Íc~W;Wò^£«ú}l,oǸ÷™i·À f)ŠQR^ímkâO‘øoß!'ÊHZ¯½´ ?$$3AgŽŽ 8w/ÄtŽWþÔGo‚…÷?Ï\¯%‘0Tžp˜lÂî÷ëaZ’î'ÐU~Œ¬wÊ“¨ñý8iE§®Jå9hšÚ×¾É ‚-’”P=} wó¿ ¹5wDŠ–º€Isþ׿¿£¡ÇÎP ­†»QD×dðr­·ç•?Á41Íoä UxW-SQŒe‘Iø-(! ³ÃÃxÚèóѰ_…>—”½Ç¤„ßúdã^hþ`iÉØ ©†WFÑ{æŒLô$z  ¯’Ç"ÀÎÁ5p'ëïÀæ¯Þ” [Ó=… ´ª‚~$ò‚¤qnLM%@ÈF:µ‹&’VXŸ¼àr¶rvòZ{r|vˆôc O,#xã fѰßáXݱš{…þ~Š ·:ó˜h…ºî[´Íú”¼cÇ î‰K`G缓¹›x9•és¨ß›¬¦–k"FBuBª°<Me[öAÕn†Ý Ã¹G1 ;#­#"ÌïELkðaÍ-~ó²€ùg:ìËÜ‚üòJ”•¨å½çûL¤�^ùùôŽ™ÎÚ­¿ 6w;D †)D9*ì Oí3uÔ|*£v”àP$Þ*yLö2 ª&,*ÇyÝôšzpKµ™ÞGu×kßûcDâJž£í§°o•°®ËŠÑ’Ì^4>‹æ”P�ŽŸQY®†.À@w¡¹yUÂ#iñÞ'/¤ÑcˆŸˆ˜°ÃPQŠg#Í‘y8nömÇpËé(!üï*g¢pçEÿi!Mܰj ¡(8‡®··wìf¯«…ŸÌÆP*Óרí| gסD¿2f>uÌwÌÂXõ6–°�Poè&˜‰H>y dìh œ…‚YÀD×)lÛ­ƒÍÛdLé+Bá]ÈÚ\‰v²0g+JÛQ×»”—˜Y*ö¡©j2¼c8’¿^tH?ð 7{w3”•e+¢¥âUŒøAÚ÷=þ}ÞÐÞ"â~ ûëàAιÌh(ÊÁ~ý°°p²ä“G$;ô%9ÈßiŽSò"þŽ rúf|D«D¥L<,|}ŠtÃ!›ø@SËÌLN¯Y§øªR…³ý„Oë:1þ¶/Ù!Àܨޅ=º¡Ê_ô°ƒ×c¨3Z1Øqy ¿åKRé ¯ä]ÿšû¿˜ÍòÅü'^NÎ&QÞ¦Ü4žµ7 æL†æ}7{Šì¿C•Dë“õ….»· B‚-.Â=9Ê_q¬¥¯äIÎÙ‰úƒÕhˆâ˜›…ÃÔ­ŠÝˆhÐÔþ;6¸cxØ;ÄoÝãAŒßA¬•2á,Àeþ;w«p·oióÓ‡ÞŽK¨Ü^ ͯùçèOžŽa³ÍaÎÔŽ»N%òÆkc)6/Y˜æxOy_£/4‰~Œ,s؄ܓ÷áœû Æ‹çøõï LbÆ& cKæ/'—óp±5Þò;LǺÎÍ•<8x¦¦0³¢­y%¥¾º8#®_8,xDQ2ˆÔ"3%×ppS«æ‰X Ĉ³†!'ÊÀ+Ü´ÉÌrà‹Ïv`[á'(*»,0ÒA$~Ñtô¢Iõ5n>‹cÏ&´Ýno"…¨”,²áAl T2Öw±³ñiDknì.–è7 ,K¾„¬a–2½× ª*CqI9j4mpºàq®s®'¸ÙÀ;¥ˆÉ‰S{ÐÀ¹AŸ‰ì’3hl÷ËÆùAÜ8œç?Ø3€ në”e¿"Ÿ|E‘{ºuž ›X߇’2RòB»glG釿ícU@ÍmZ,ˆx…³é°[ñ. T¼¦N“ ¥zæ-Z|.Ši A8p×`Bè©æâÓ64 ëÍòäí|Ь°+'eú'ÔŠL^(ÐôË$”rªa¦.ˆJ9ÝsêNŒ$XY^®E•™|îÀÆ‚j\nYòGöC7†hç”–xLj”éE¹q#9±$fºp²¸ ƒoý’]Ðñ ÞFdW¶`Àö=ê2%€ æ÷™ìòoÑ(ŸôÍP¢R{ÿ¹–I:H–ýë_Þ"'èPr%òQò¸!èvg@Q FßÄ<[‰ ,ÕÃÁBå~~Íï,š 7Q[{9@€ðåÊY”ì8&8ðÊ‚Y…­öAg÷ùBù”¼a¸L_£€’§¢`‡¾8#D¸±¢À檌 ¨¡y¿Ø§ Ì[Ñøé7¾4�ž'ÐøZ+ •¨”<!‘V£ƒ}ƒØ½Â¯gÁº¤9áLŠ—ŠâCTéúât'#9±4ÌPúv^ðóÌv%ùvË>…®%3T‡¥´¶'fiÒús÷á  ¼ò§>ƒV2)™¥y&èP2òQò¼‰ž3– ,)y®ß ,8S"%éì†^…ª˜áª£PöMøŸ×`öTy»¡±Ìx=&%²>ø�YKÎèÞW "ì0Ô*ñc pÓ7AY²•M0&hyà4~ÓÞ1ÉB ŸÁq£ž‰žÄϳt"-¢Rò¨ñAyèzl·/0¨ÿ×É\SÖx³Ë¡ Ù]SîÇvosn[–"¿Å‚ɉ¥yа`þ%K‘Iý‘C7lÈÂÁV»¿žfMj|JV:IóxÈ\d–ä|á¡d@p6ñLÙƒ‘‘¹&ËyQˆíKy䘒—õr²6 ¿¥ˆG;ô–€M_ì´×æG‘¨8õà‡ójèL¯ááج¬Ý¨¾ú8ñÉ܉u‚ ÃCc!ŽÃ¼å{ìç• AF‚‹Ã¸q(Üé¾›«;ùYHEþQ)ýiiVŒVÈ'Oöxž££^ƒ{!áÑÌq´õ…ÿ)ÄHN,у†Ù‡Pî<ŠÆÎn´k"‹ŸwûÍ7=Ó°›[P»/ŒÉ6‘8÷L7/A•ÀÍòzC~JžÌ%¹—è<ù¿¾*‘³ ÅÅ{Ÿ•)º/¯¼¯x^ ÷”ºGüfÉ UÖ6V_ƒ%ÑK"ùäeìfU_'~ƒý|ÃLÚx0µuÂJAVˆ„aÇÏ ­øó­pcÅk{r3”Âná8ôûvù}–O÷ ía£±+8ï¶áÁLˆ©ÛâSšÍ˜õ?Ên´ ÇO¶àa`xroyŠ1²×”?Ü< ‰ìÇx“Kõ Á—¼Øðƒß¤üFSèܰ÷ÞôËÍxoB !ˆá÷I¬dií—ò:”\´j±]± Ê®çËžq 4Vâ°ˆ¾¼òRòB£kêîÁ2–„“2G”š;è ÚäôãéØÚy,8Çm|ó“.¯Ož[Uf2+ D$Ÿ¼ÍØ¡ùC rÁnœ{ÑfzylËPYI.‘ôòEð F¢˜Ã‹›?⎠_¦¬¶ mÄ<¨ÿ‰¸àeŒ{N°¯š¤X*…À D’Ãü”<‰ËŠ,¼ÿÖ”}ήC‰ßB›™ÂTœõ–‘’]sÃ;>_–×'ó tϼÝðLcr&Ö«·5%"3»W¬IЬG¬C츮ÔâþÛ¼h¾b~êŒb²€qã l§ –”++R†Wò JÔþØòv¡Ôë[pEy�;*›aKþ‰"çv ÿöeœ*~ Á§šRVV ùÂoÄç0[À¤¥ š`èµcž­§C=h5Ü…Ù)qSÈ Ú;þ"1ˆá÷I„C~Jž¼dç2A½s?Tw,ï×zïàre!J4w½Ïõgp<Î[=ù(yK¡ÝóÿŽ¡)ÿ)à"Ü6޹‰Ñø”]‚HÞ`jÒ…ÿÄ“K’E±Ýó1*¿ÿ)@Año zívJ”yÀavx¯BEÞ¯BŸ+žˆ…Ñ0Ég=Ы#?ƒŽmF~Å׸tV%Ð?AzÊ*‘<s"åÉ#‡ þTƒknÁæ^Àü3öenA~y%ÊJÔIœKa`‰ÏMíhÒøs�•³¨-/B©Þî3‘Äðû$±$ó僄eE¸zìcyÃÈÆÀ¢ØÙˆgqT]>J^htÍ%¸aèJÎSÔ?‚`'Wñæ’dv7b(x’a¦ëKl­¸¦š¯ý| ú?G|#°[Amîö$.ÏaHwÀ›/H‘µ'n¾Uö…›€HEY%’‰xyòÄÈaÆ~Ç1_�Ë%Waó¼InÎɸ`m,EfȆ,¸d ˜”¼$¯ß'ù)yR•‘x®sß¡k$0†B˜2æŠKËÈ\sƒÇûʇ~_vJø* ²ðNY+Ý䄹$¹´9‰Öæ Ü$ÌêB(¶ª`¦ƒQD2sT cGÌ,ï`2ðFù»ƒË§¡ä°ú+ÆÜ‹Q(yRPV‰„‘ð<yÌ¿7Þf,˜Â1Ô­ì8ƒ¼¥”CîA˜œMÑéîx;ÊÿvÚ‡ƒpºÂÕÿî¯ïAû3)y„<‘Ÿ’'QY‘98º.C©ü7­ì@‚6ÝÁms`~Ýø‘WàÏk ܸ€ºsíš_ô*yÇŸÇ­g¾Üs ƒ9W/mr¬™¹†åw˜,r¼&R(¹$ù͉M²ìQZ}†@§p´0›ßnEI£B¼h^9ºþ 4÷[¶µgÅ<èU²’ß§“ƒèÑ«QUzŸ—ž‚!.Ÿ¼$+«DBH|ž<ñæ0[Žž¸ ¹'y…qî//2É+0-%O2Ó9ìÔ>Áª³™ßLNQàIJ�çëèž*nä§äISVDbñY#v*X|‘ÈÉ®€~Øý~¾îŠ"hÄ;@•—’~#[_Æ®d·áà\ ÎÏDvÉ4¶÷ÃÉþÖü nÎóŸ‚òj­Ü¤( G¬\’¼Ràüõq”£¤¼ÚÛV G-¾ý¦¦0³¢½¢‰l™ ¸Ø Íë 5e••„çɶ~Æi¶$&“Šüí$A¤ƒ(¾O^\ÈQÉó"1Y otÍÌ5†ãÕ‰f|ZϬù½ƒõð{8±F®Œ”<¬WÊ‘­3™™’UÅkêјˆ†™.œ,ö':õ…ˆWð6"»²¶§èQ—áÐ*QpDQ b-R•K’ˆHl‘-E€…&5” ¿øòszsuvDiŒ)«“˜š°¢S×€˜ùÒÅÙ‰«]¯VÍ“·ø´ Í«æ‚M4‹p=y‚ç¡g Ü+ô÷¦lr£­øôHûêgÜ8ì# ¶2Z÷ðJžá$Ê/üøV)ÑëÄ…ò|äQp¨¸Ÿ’'MYÎãWçýc0?ãô&zëQàO¡ 2 ¼’ƒrÍÕ€ÉÌ—kJo¯„–ý|Û‚Éôä‚ùJß|á7>¶«(aQq²O¡ké Ø¡Géj#‚¢H„\ˆ7²e¼øÃ*²¿+Ùez ¶`¦Š‚‹h6À9ïãdî&¾þ™È)Ü‹â½ùÈÚøj:žKþ¤”X~Í*^q`ZQZ"Ʀ‹mâ£ø3ˆ^yö( w^ôFTäm8¼-‡o=OÞÚéõS>„2Í/0YmA>«oË=Ô×é¶/±ppŒàuPÇ/Àõø;mùz›ôBçËù)y•X´]Ç¡°‘‡ßGu×kÿ»âGF7yspt\À¹{ŽàÎá•?õÑ›púÁ‚ù[”4þéû»þ¨=6dá`«Ý_³&5>Õ E8¢(ŠAÈ�1"[ÆË,,šBìðÊ-´ªõ¦)ïëVíÐX„x«¸ù÷òJá9t½½½ãe×d?VKБˆ ÇMÔÖ^>4½r%;ªð} Ÿ^›c1 Y16]Ìï//nqqH9ýÐ\ê6nž×°´_‚²²,LÝö¢0'›¢k¦œ]j¬údÁ3Kó_>HXV„Á›B!ÏAõ¶\Gûƒ¿Du‘™O¿Áð¤`ÒÎ>„rçQ4vv£]sYüæmãnÿ­œ7‚] ªs÷ùB·F@ E‘ ;="D&îÈ–ñÃ9;ðÕé{¾[˜i#Ž7bÚãD¯à$ÁLQ,Z™¶ó!©039MSrdvC¯¼Þ»ÌÀÒpʾ ÿs<ˆ±éZÀÄÇx*ǽúœ º¤äòD~JžÜdÅÝwW„-O©éïîæ°3»v_xÑ{ÞP£Ifa›üI]È(øŒ¦Ð¹aï½éŸ kD"AQ$ˆD@J^"a7_±D¶Œ—9Øn|Þ‡yó—èš8e.󷨹[…»}KWúÐÛq •ÛK¡ùõ!ÿÜýÉÓt«'G·¡mµ†˜þí5yÈÅ¢DŒMלwÛð`&d¼J&zâ<&­ÝÐkÕÞ[J•V{ýKAÔà!{B¦ÈQÉ“¶¬†xyJ}HwÇÙÑöÍu ºAµU )ÈÕµhkÅñ}¨Õü7þ÷=kŒ~,QuœŠ"A$�Rò’DT‘-ãe/ôŸ!Ï ß·X{‹á6Ø\e û±1TI\QÞÅÎÆ§«‡“'¤G$Ÿ¼Œ=Јl…rĸ‡ÝJ4z¢gÊOÂ$Dgàô¾`G!S–Ö ù aYŽ„ç)õ!‹ÝË}Ñ\³e~€²+OR“«‹scÌò+tªã(-=•γ=3%Þ50…A¤&TñáÜ#0ݼóCÒ4£Ý4’Äy¿�gÛY¾lÂDàߌöTsºçÔ ºí -/16!4!imü¸¼ƒ¾Àô& †'Ü¢4Ƹ‡ß¸”¨ý±%à°¢W”°#¥ÑýÓï¡øÔwÐ{|í×Ûý÷_¡8{6¾…QZç ™"K%O’²"<ÉÊSJ»»XXò·©=„Ý¥§ mí…ul…ÑÙƒöþ5Â)/XÐÞáð?Dr %O|–“²f"·ô(>ËÏEañ'(Óö')ß`<§šn<·>çÿËÁãèƒáöÿPŽÄtÄã„åöC¥ü7½n>—ˆÛæÑè/Ã"Fà³ÃÃx:þæ£a¿ }®ÝOQùN.ªŽ°mŹa¨(†Òìˆ äÇÑ£GñÇøŸä€DeE$’”§”vwq¹°öÞ@Éý(úül‘ƑÀ²Â£8e,¤œ­,FEã"’ Ûøbò6Ý~(…Põñ›@LÊjèS°4ÔAg{ã_"a§š±æš‡£M‹ŸGaV}È¡2S¾¯tcñY#v*ÞAVþädW@?l~ÿVlPA3 $0ÏZˆ¸‡Ç?_‚þÏ‘ Ûc»õÔæn@H|Ø)|Önl?8¼1ƒ"“QTÓøô„)yV«Õÿ$¤)+"3GO#”§ÿ™ C6´»‚À[¸ÖC‘;GPN¢ ¹L$6ö1™ñ)GE:ؽ›À%%ÏÉÿ_hdËx‰37…æ/QòÑVd—]•ìËÓŽ‹ïïhÄÇa~°ŸÖ?äÕ2ë%E9#pO¤i2v4À<›šqé1)‘µVpJ‰”dø±ë²Átó"NfC±¡”—¹Ôú±"K%O‚²"‰?dó!éÝë I Æ-/ðÿ^ÝÅoÿ"Áa¦ë4þNJ‘d$3ÏÒ³f5ò¶7xsù”¼|³Š”:€Sþ("�ÎãWçýãq Æãg`œžÃDo= DQNÄÜÃoÜ®ÍýßüJ¢¿˜½)IRÆx;Ž3"rx^ô*±w)m‘8üñ®("7CÁo’™Ÿä?ñ£ú{ºÉ‹Y*yR”Hü!›Rò„ Æ-œ€S=I…RRòˆ$ÃÆ/!6spô6ã¼ò'˜&¦aV «ð$®ZR† °h»ŽCÞhÏ¡kÙû¨îzíWœÄ¸‡Ý$7Äaõ}Øœ6Xþç¹Ï/Ô3!ó#˜‡&DPBãŸÓê3¸j nnû]Ôåï…Öš’0q눌wžÂ6–*&k?”ú<›ôç~\ð€2XÄŽl”<ÉËŠ$üÍ)yB`ù„ŒÎ€Í»®2»ZSAoGÅ'«Ùð3?ž T´¿ò?DrÌ<Kà¼sÝÓ!gq2Ë×C¤7Ü =öåUBÙM¯¿ŽöîcL´Ý1'ú3i¯)Ó;E¨½Ü€³å#sÃ&äýã¾ÛÇ‚1Et+J’Ä(žç¸wQ‹Ž EÏ [‡ûÊQ}ö<šL¯éP'á°`>Vµ_¢¼Z‹Û,O¡g ƒºïpÌ5cF.Jž,dE’rÈÆCJž<Ó˜œ \¨bPò¸?ѸãCTµÛÃhè¼rÜBUön:ù#’ŽdæYÚÀ䃌òõë”98ºïÂ4<ÅNÆ= p¶~†wÊÛ1Î×q¨ñl(ÖáÖ*ìV¶Á<4‡Ý‚åi\MJ£UààY 5N,ÀeiFYÖ&dd°´ä“òPòd$+BˆxÈöà/QRRò¢fcÖ;PmAvÅeôz s˜ëUâÀª¦–óp´F¦"嚟Ñ=0ä3UzŒîÖ (ÏÙ„{t‘£sD‚æ<“3¼’sdK ðÖüåW8æ§a"ó":’”Œ7z|‡$^“%æÏšãݸ™ôjèì~S<~ÍéRãë”G̛Ǥµz­Ú뛯ÒêqÝ$‘Þ—48÷(,W¡ª(@?vÙ%8uùznþ‚!É‚¥X–ýñ¦h¥¢üýï÷þ_ÚÈIVÃMš ù_ïáÿnè†}ž×"\Ïx]àçõ]Sš›ÏE¸'G| æàv<DSÅGkGÆä^¡§þd.¦þ¢È=…Çï"HsžÉ™8#[¦¹š¿Ñ‘¬d¼±À‚äy•ù6nïÖöÀe½ŒƒëÑØÒK8¾½]Ó)<õŒ Sn=ß„Ü*~sNÁ’À<Ƴ(Ìzy¨¸bÆ„ñØ-Øý×Í«XÊåË—½¿+R wâ—ññqÿ7’.²á˜6¢êïÐn›7ÿº}YÈÈÿ'ÊBÙ7áSü’73êjC{— Ö1›7nÓuhjÊQR\Œ’ò/qA×!Zˆ!y&wäÙR¾æ/D”$)oLx† ?vF猕Ûð>‹6ÇMÁj¨C3Çûàd•èáð¿=ù¸0 )‚ÂÉñ;è=¾H~½гMeö&l>| £t’<Ó°›ïàrmö•ŸÆåÛ`°÷Wü–¢›<¦€Iÿ,M¼¬Ï‚ù[”x£ï.`Üx›7–Bgsƒ³ëPBWdˆÇ…±¥hb/'—Í9˜Ògù& ™x©”<±YÀ¤…ßìéõ0ôÚ1Ïnñ†zÐj¸ ³Sê·õò5!b@Â>eœk�úºÃ(«¹KèÁÈ‚W¿í†xçÝQ2mDå;¹¨6:ÂnÆ8÷ ÅPš¦ü¯ÉÂg¾ù#j‹>O™O)yÉEÒ²"‹Ïšq î.þ¼ƒº¼w±¹ªãÞ$þ58Ò:"š)yI‚s=‚:?Ù%gÐØÞ'3)˜ÄÃy~ŸˆMÈ­¹Åü%’ )yb³ÈïkðaÍ-ØÜ ˜¦Ã¾Ì-È/¯DY‰}.i;ÞÊÖü… ’3uÍÚ½Z´loÌß HÄ|WDtp¯G0’¢“sRòˆ5a¾ïÚ^soEn:Ó°µP*ÅÊKJ^²˜éÂÉâ& z“#3üæ6"»²¶§èQ—áˆ<A”<±™Yu Cs¼ …±ê=l,¹ ›ç ìºcAQy%‰LÍ_"YxLJd­eR% 7./‹p=y‚ç¡çMÜ+ô÷¦l/EJ! \c¯áJàå)yIbÁ|¥ºa¿Ðáà±]EÉÆ Ø} ]Kvã´()€”<±™Ã³Æc¨3Z1ØqyŠ÷Peä7Ì„ëÈI´ŽJ†ËÑü…Hd!ÆÛqä˜ÓþÇ•p˜íUb¯×ç†H8 ÇQ|âŒ7ºéÛrö( w^„…E-t´áð¶<¾õ<i}AJ^rýÞÅ££ Z·4µÿ.zDcRò’IJ“%ÿtÆ,lµû¿(˜ÔøT7D‹‘THÉÎÕm ‹F¹ ¹'ïÃ9÷ŒÏñ‚üÊŠ¼dR‡sÀtóTló¤iF»i„ü‡Ó– : ?6U—ÐÚ;ˆÉ» ÈCMì>ƒ«A‰Ð—X„Û~uù{)ïmÂa>ć•¿ÅÅÅ!åôCs¤ä¥1²Þ»¼5×T #÷�¾øl¶~‚¢²Ë¢g#%/YÌ>„rçQ4vv£]sYüwÛ¸Ûo¾é Õ‚êÜ}>/‚H"¤ä‰ß„è cc®å›ù›Ų²š‰ÜÒ£ø,?…ÅŸ ŒR(¤.X¯”#[6=õ¾á²‘Gžç¸wQ‹Ž EÏ [‡ûÊQ}V\ß" ˜xøO%vnFJ^róÞ…³é°[ñ. T¼i?<&Jõ6Ì[´ø\ÄËRò’Æ\M(Ë~‡ÿ^¼æ^ð½yñܰ÷ÞôçEI]^"bý’^óL HÓ„(zÞÀ¦Û…¢ª¾1þ[±@,ÕÐ;¦`i¨ƒŽR(Èn´e[öAÕn†Ýå;Š`‘ t'Dî-²’GŽNº>ˆà“Ä<^ö?3‰ÝDJ^róÞÅ›§tþ·Q«}JÞ0\¦¯Q@)d K¥˜B R )yb#M¢èad>Ć"ìÞJ.)yNþÿeÒ C¬Š‡ßLìã3&vž¦h‘…<rö ½Æÿ Ú;(<Qb‰p TN£²p4–5úKDä«äM¬Sã£WŸ¥¬÷.³ ÊÛýv\zƒ9± fK>üÞW㇔¼„Âaþù †™FçqÀÔÖ «¤!ëRòÄFš&DÑÃaÖ¬FÞöïí£OÉ+À9[¡Ø|Æq’er†³ý„Oë:1þÖ4“ƒgò nTïžú†ËB9 (+<гa• _9[YŒ2½Ýÿ"1¬v Xöáˆ~0iŠ ÃÿùÏüOrÂ}q†?Oªô‘÷Þ…—·Žüp^ é5<,-KÖnT7õùR¬‰)y †sÜÆ7?Yáò^Í*°Ue¦¼9„¤ %/AxÆaíü ~çҶ¢÷Ù„,Î`æàèmÆyåO0MLì*@Va šL¯dø]ˆ`\°6–bsV>ö²pa2xY Èû}Ó©[¥ä¡äéQÌדÕ5rÉ@1)y Fšj¬ÿå )y©ÆcR£L7(ZûKº…Ò£™/ž5%"3»W¬dâDH‹t”)ÇýWÊއ»ÙóÅG¨éxžÊ‘ ¦újèÂF$d7{ï5¨ªÊP\RŽM&|>"©BòhEº#v£TdÂìó±!%o="ß5•”¼¤n°T¢J×'J:I·¬; dÍ3±ñ`´µ[ŠUh7Ûý‰Náë‡î°<òäùàà¶^ñ‹Z¹)rCGéä‹û%ì¯WŽEnl�†’ç¿ [’‡”<‰ ÍÀ+²Ãa™Ã˜ÕŒ~»+eæÚÑ ßvö^É.‡¦…]\.×”û±½òŸ¢b”t ɹ B.Ð<æ»öy˜t(ó°ëŽÉ(` ¼’ìòoѰéõÍP¢R{ÿ¹–I2@—%Ž›¨UÞ@¯ÉS@yÐø9>V¶Ádyî? H.òTòØÜ®Dmï”ÿ™”¼äÀ+× ¼B$Yï]<ÏÑQ¯Á=gðAÛ‚ù"޶¾ð?Å)y±Î¡y&6,õ@5êºFƒ6“ÖŸQW&£ÔÌ1¼õç‚óÊŸú Z¤ÜÉš5ýÊSý$ö·%ßvûöéñÂ;/ܰw]FmùßQZ¥†a€¾»yPŽ}¤ä%vƒ*½À+Dr…¬X$¤`!%/AÈ~ðë« ÀmAcÉ6ÿæc/ s2ùvÞ„<åL'ÿr$.8‡‚E¥#Ž_ j|»ÃG@yÞ~ {µ&ïÏvë-(Oß!S·P\}¸Pôv+ÛñlEÄìi 4ž@Eõ9èÌ“þ׈Ä.‘Œ‰X ½ËÚHº…HÉ#ä r+„xpnz¯ªPUZ‚’ò/¡i}Œ‰˜¿ÅÎ&-^MC¯ó,ˆÔPZ wav&÷v‡H�®AXž¯ìÇ«ßv9ùŸ8xÆ;Q›WÓJ×½„! 9äÍ“7—}�ýöf€”'  íYÖFÒ-$ç¤ÁGÈm И‹8ï¶áÁLˆqÐâSšÍ˜õ?JŸELkðaÍ-ØÜ ˜¦Ã¾Ì-È/¯DY‰}.2~JkøñÚ¸3™·è&/Ê“G¤ ‚×p¯Ðß/^RîD ë=KØC6ñƒIº…äÜ´a&ä6hÌŠó)õ¶çŠ"«$â,ðÊ1_�nƪ÷°±ä*lž72 CÄÆ¦ß`]aŽ˜XØ<‘<kú3²Byò9!xÍÙ£(Üy–yœ£ ‡·åáð­ç’RúØ<“-Žë¨(>rP$ˆ{Ž[‡ó°ípq4º¤[HÎ(ëÁGˆ‚ÜÆ�Y±`‹¦µ?¶D¤lÁåì¨l†y,‰¶oq1‡gÇPg´b°ã òï¡Ê8 Î=Ã9¥‚ ä„,ä¥P ҆Ղל€~hŽ”¼DÀË’¬|ì]Ñæþ A¤äIÚ0r4fÅ‚Ãìð0^… æùÇhد’•™#çꇶd+?66!÷ä}8çþ‚ñâ9(•W`š hòfŽÞ+P)¿ÃMë?jÙÍÝÜ6F…M>²C¤äiƒ|ƒ×ÈzÏ2ÑÞ§nÿCât ɹiÃLÈm И ~Ã÷ó%èÿ ŠZh·þ‚ÚÜíò3sô¸06æJéÆŸŸÅgØ©xYù;“]ý°úý¼B¯(‚f ucTrh…’Gyò¤‹O ˜g£½qà®Á„™->mC³yÚÿ´Ü8,· Ðëo¢×Îoè¹i u·Áp»NÉáâàÁëÕñ`¬ÿw ¹¥RÏ•ÈzÏâì†áÁDÈÍh¬c52’n!9w m˜ ¹³bÁNõÃùä)±£ATN±²`Ñàýâ8Ì6ãÓú‡˜å·ë%Ð<Fªöe!‡x%òäIn¼U›!²6´øMÍýŸ†úâŒ0¿KÍUôËÆ`¬Ú‹šöa¸¹Y<ÓDfFÊOB‰ò¤qÜǯW†z(éÉd (]häÇ´²½û´$ùXÈ^†„÷ëe¬FFÒ-$ç”sÝ qÛ 1+ü¢yýhîÿ¼hš1æ–¶©&uç€ñ«óþ@@üfôø§ç0Ñ[‚ [ªä"‹1Hyò$Â^™.C^åE´¬ð|Í€6³3j%ÏP«Äo+MP–ìAeÓ#Œ ùe f¨Jš0ĿקŒnA‰nnº’óIMM™H‡’e3 ê:àX V7Ù⸉ÚÚËc‹/W΢dÇ14E=V##é’sÊz𢠷1@cV,8x¦¦V˜ùÈ©V¿õ^ÄbÑv‡²ß ó7ÞGu×kÿ»’˜ß1±xVÏ“G$LÊÏ}€™éBõÖJ´;ãÑ¢\ Ùls˜·|ýBoáX’Jÿú7:ê  ðFWž‡ÛfÀ‘#71*‰5‚J^Dãc[{Ã1ˆöêÃКŸó?Û`mWãt»C4åC ä#+Â0;‚¡Wóþ‡%f`i8 eß„ÿ9~$ÝBrî@Y>Bä6hÌRT?ñà^è±/¯ÚÀ“dýu´?ø ®îädцÞdèk(w” = x0ÚzGZm7Ï p™¿EâC¨Ìñ(àvüÜЊ?ƒ¦ìÔ!7C)ðޝËÀ%”d*°AñNv:0g»‡‹,\~“ ’И"äɃÖ«—Ñå °5ñ®ÓÈKá 8d½gq´£Ao [|±ó2£6"¶³¤[HÎ(ëÁGˆ‚ÜÆ�YBêc€ê'&sptß•\”TY´!%C—ž!èËr‘[z‚ﳨ=Z„,…™%M°Æ4$’OÞfìÐüYÿ»Ö†ƒÇõc.)©GÑá Ò” ºÉH>y{ ØG�’n!9w œëNˆƒÜÆ�YBêc€ê—þÈ¢ #M,” =ixFa6¨QUZ‚â’ ÔjïˆÄߎëJ-î÷øUóÅüÔ‰ètÇE¸pS«æ•ÿsÐ4µÃä`!Žd„ÇS÷Ó”Þð‡ƒÍ3ÙâhƒRs}cËdêÇÓ1·¨cCÒ-$ç”õà#DAnc€Æ¬XD0á^¡¿_¼¨Y‰@êc€ê—þÈ¢ y%ïïÕ]ˆl Èa¦ë4þNJžŒ™Ã˜åþ[õ5n>áŽ×uLh‹*ýA€¹fÆv”~qùÛ>FqQ´,7¥”`{NR晡ÈZÞz¦19“x+ I·Ü:Ðjµ¾-¬îÏãããþwë¹_Y LIÁBRGñ‰3Á&\g¢pçEXæ9pŽ6Þ–‡Ã·žKj¡—ú ú¥?²hC^É Î“·Ê“—<8÷L7/AÅ䬦í¦‘(oÛÂÀ‚¦ì|Ь°+'eú'ÔŠÌ ï¢@ÓAi¬¹!èvg@Q FßÄ<P–êᘌ†Ï¯Á&i-ÏS}5t¶Ä'ìŽÙË[Ï8¬?A#æ¸ AÒ-$·ü¯ÿú/oæèë ÖïrBnõ•.,$õ!dåïAqqqH9ýÐ)y1Bõ™$l2¢Em8ÞŽŠOt«lÒYhÿ T´¿ò?‰‚sõC[²•7™È-=ŠÏòsQXü Ê´ýñ™.<†æýb_äÎy+?ý&–ãÔóÚßÁ"䆥PØš"ݰOÎ/)y®ß ,8'‘ ÜÖ+( iw¹Ç¡“€\«Ÿlá^¢óäGP°ü¹9»ø½Áägñc¸æŽ¨©*$ÕBüñG@”/½·—~þ׿þå—ta·u“c©=zÔÿb=Áú^NÈ­¾Òeâ©´âYBêc€ê'"IÚdD‹,Úû;>DU»=Ìm3ë»…ªìÝÐZ¥{ ’0ez?ŠB¨úÆø¾`)ª¡wLÁÒPíÿ}±àÓø5N{S/bÚxÇNx&z¢PЦaVb»æ1¼Áò™’—õr²6E‘P=ÑÌðuÌGvù·yYi†²¸•ÚküϰLJoA“óžeѪÅvÅ.(»ž/+Оq 4Vâpëˆh‡¿’j¡%3Çp… :9î6nñÖ'¬ïå„Üê+]0iéðÊ,C¯_ÜàêA«á.ÌÎ|NCêc€ê'ÉÚdD‹<ÚpŽÖÃÈTä¡\ó3º†|!Ї£»õÊs6aãl+ÂÒâ”±¡H»wÀ.)yNþÿePše³ Ïâ0nz ~<²1¹\Ø\ÝÉ«oñ¼@ï*(u0á1C•µ …Õ×`‰;0ŒX°C‰ÔŸ»gФçÛV}­NéžVÊIÞ†²`Ñàý·ãvήC‰ßœ›™ÂTœn’k!vë<¡6 ;;ÿùÏüï6¡·yt‹·~aý/'äV_éÂN}kðaÍ-ØÜ ˜¦Ã¾Ì-È/¯DY‰}.éîü¤>¨~⑬MF´È¦ ¹Wè©ÿ™|}Y‹"÷:Ò>ÐI8ÌšÕÈÛÞàõuö)yø g«?ñx gƒ~ß.ÿMÖò —¡ý!l‚4¦@õ¢)®à-‰fÎ;×Ñ5>Çÿ 7ž 03sU !YÎe‚zç~¨î>XŽ®Ù{—+ Q¢¹ë}~¨?ƒãq¸I®…ÂÝæÉåo‰ÀÛ<ºÅ[¿°þ—r«¯ta§ËÇ|¾Ü(ŒUïacÉUØ<o`׋ït9ÁH} PýÄ#Y›Œh‘E.xàÝ£s³p˜®CSSŽ’âb””‰ ºn Iæ–f=0Go3Î+‚i‚™G «ð$®Zâ^ùmÊ:ühzô{Ÿ¶¡Yh31‚·$æC^êw«—÷På5]•¬^r…{¡Ç¾áÚ9¸(v6âYçÂ’l¡ÀÛ<9Ýâ-±t›G·xë6ä„Üê+]æð¬ñêŒV vœAžÂ¿8ºa8r­£’ð¶‹ÔÇ�ÕO<’µÉˆö7¥Î¢­Ç÷±|l­èµF›7‘’¡+„ûÓ‰¼%á°hÐJÔþØpcÙ‚+ÊØQy1ÀOÏ€6³“”<Ñx®sß¡kÄá3õŽTÆ\^«ŠX‘d ÞæIõoyÂÇ^ˆôFn}LcR<–#¾mBîÉûpÎýãÅsP*¯À4!ÝS~©ªŸ˜$g“-²iCÎ1Ë¯Ð©Ž£´ô8T:#Ìö餶‘Hì0ÔÔârË’’ÃJ”eåP̤툼%Ñp˜Æ«ÐïÃÒ<ìW¥Ô½€É‚x‹”á<Ó°›Ú U±4K4µÿ‡[Üö–l °[0)ßâÅ;x¤>øˆø‘[Ó˜ cIÞ Ç‹ÔÇ�ÕOLæàèºÌo.¾ÃM+3mãŸMwpÛ<šÒ1+K9Ä6kæ;¸\{»KOAÛÚ ë˜[R·D´¸0<4Ò‡æ-ßãïªG˜õ¿²*boI(8~nBëpÈáÎà/¨Ù–—R÷‚xe¤e 7…íd²èƹðÅg;°­ð•]Æ€ˆæÞ)màA}I%ñþýTןH<rëc“„ÔÇ�ÕO<Ÿ5b§âdåï@NvôÃè÷oÅE4òÝØ¥Î턵÷NìGÑç7(¦l±ãç†Vü¨ø8løwk ¶e(…݉¼%ÑDòÉã• ) ¶¯,ˆ÷󉄳é°[ñ. T0ááà1©Pª·aÞ¢Åçº!шRÚñt@ª;/!rëc“„ÔÇ�ÕO<¼Ñ5w4bˆã0?ØŒOëb–ßZx¬—p@óx•H{‰EmèìA{ÿŒÿ! ´Þ’ÕM~úÀc÷\œmÉ'or• ìÄ]³-$x‹´à•¼ëß@sÿ·å�L¬Xþ„ȦƒÑ¯,ˆ÷ó‰dÁ¬ÂÖ û ³{3(ú•¼a¸L_£ÀÝX RÚñt@ª;/!rëc“„ÔÇ�ÕOD8Œ_÷‡™ƒñø§ç0Ñ[/ê&#ÖFñ–”ã0 ¬ð(Î*™/Mør¶²ez»ÿDrqÁT_ -žø•v\W5â_Š© º“gÑúBhz î\}€é /ª ‡WD§¦àúÏL7/AÅÆ¯¦í¦‘”Šw®KBVDböTy»¡±ø‹<&%²>ø�YKÚ¼¯ÆOJ[ žHuç¥õà#DAn}LcR,à¼Û†3!§ ‹Oah6 óåHRT?ñX´]Ç¡ìw¼u.ëµÿ]âoÅûyQpèQÔfáJŠIÉK0ÜÖ+( ;ŽY¾ÂãÐŬ¬„óÉãÿâP#>.kŨ ß)B„Î$°(,¹¥GñY~. ‹?A™¶®Ö‘µU<ÄûùÄÂny{ðÃy5?F_ÃcV!+k7ª¯š½æ›b‘Òˆ§RÝyé=ø1[Ó˜‹H>|‰7Ao‚au”2T?ñð¦PÈ«„6ÀWH¯¿Žö%tcoI¢·¡5†“gs¾:(H…ÏüŠ”¼ÄÂr’æ#»üÛ€Pÿ¬4CY\è÷…ë€e2™î&ï7üª=„Í[U0 ú•v*«pAž@§FyîT6=¡3ѼM· E!T}cüHf å«¡wLÁÒPíÿ}É'-dE$œ÷¡½i[a1ÁÑp]<¹‘Òˆ§RÝyi=øQ[Ó˜ ~Ã1ïP3ÌcÒõÒ‘ú ú‰ÉÝwW¦ôðÌÁ-âIr(ñ¶‘$ÚØ3É™Àv#%/5°ÛÔŸ»gÐå•?õ´:ã9P‹p §ÈÃáƒðyR­Å FìãÁ·Ü7cËþ‰åaŠò‡ØP¤ƒÝ[Ñ%%ÏÉÿ¿Œ¢k& ‡¥Ù;QqùwÿÍÝ<&Ì?¢"ço¢Z�¤´âé€Tw^ðßçëõÛL/'—C'sn,¦ßaq0—öe$=øQ[Ó˜ éæZ ©ª_âñ˜Ô(Ó ®8a‹xÛHzm<‡1먊¶ »â2zm.^p˜ëUâ�)yIóx(ÈŽëj=žE×|‰1Wœ3ƒ{‰®ú#¨jJ­)ä2üzeV#o{,ó¬BLÉ+À9[¡H±åIð\÷À5öÒߣ˜|fnǘLOV䘓´<v¿„ýõ,¯Øý„ÓÊfüüݧÈVü E_Á…;ÿ›â'¥-O¤ºó‚ÿþ\æo‘¯x%gÑîÍ3Äa~è:çlò¾wƒâ#Ôt<»pJz𢠷>¦1)8~¾ýŸ#›ìÖ_P›»=¥'£k!õ1@õ÷\) —Ë­W¢J×'zb^F¼mïçŇßdNŽúç9SæøMçC4U|D>y gÎ;×Ñ=½š"âÆSƒ!†T�<žy¾/á¦V ¥ò4Mí0…د SB~‡î,cB·$‹98z›q^ùLÓ0« UxW-,fêšëÜÌê]PdïÇÙÆÛ0;YÎbèÆ1ä(|rK‘{ Žå¶•ž¬€[€gÝDwC]Ìü!7£XûXtÅ?¥-Ô,qðÒ†èåä²£,7 ‡åw˜,Ž çÙTw^ðßç0ÓuÅÖå+|w?4ïòïËA¥Þ Û³N¨÷T¡uÔ§æIz𢠷>¦1)ÌtKšy‡ÖBêc€ê'ÞÞÙåд,™ûÊ5å~l¯ü'ÿ³áÿÏÞÿþ4•íÿ߸@ïxç›xÃÄ„xc’wLà '“ ÜÀ8á ˜1„à˜¾«/0:5‚N'#hŽ5jû™±xÆ^#|PëH¯ê cUp8Ô™rI/N~L+vF_ßâ» …ý¼ö*ºK‹”îî½vY“uÆ›½X?^k½ÖzýÀCg„©™$ÚFT´qhƒ) ´5ÁÖf‡‹ºÍ|ªKÖF–µD,œ…¯ç:´é*lHÛ¢/!gû§Ð”ÂÔ³Zå'ìwl 9)÷@“Ÿ‰´ôƒ0÷Ó‚+†¢LA 0ÒwKŒ¢íô1Ôõ-Ôˆƒ¿ç*r‰‚—q–žAôw|ƒ=‡–‚⟧ o#*Š 'm#Ò5ß Õõ¶ Õ06ÝCãÓ‘Ð%ެ-Þœï9 9éÈОC­ÃÄFu¦?É4nFVå#xC¾rwžðýĦ¹b1ß99r›‹°qÃFdTþ‚±`•‰0Z²Ù§zð1DAi}ÌÆ¤Xðs=ZÞ!GFdÎ;ô>h¬~"x…æ F<šŸÍ:®âxãëÐ'ñI´¨hcotI4ie¬^ÖÆô¾ŒÅŠ&Gx œUÀ À\˜U®]cüÞ.`‡®È/1»?vîÕü2^QªÛµªœ y`"4^æàw[qôèýUFèL6+(Ê4™kÎ: /ºòä ôÁ¬ÝÊÿL*ÛúÖK‘~1Q½àyÚ zU¡Øôïy}‡ÀM Çô…¨©WdmALµá´¦}A›`‚=Æ^Á㥲ô¸_¢ÃPŒCCÁΔ»ó„ï'JÞ Ô ÌŸÚq£Í(ߪ†ô#hô.(~°ë*#Q=ø¢ ´>fcR,8ªó%ZäDî÷¿Úë'dÞŽ:èÎþ÷]äf‚ÿl„‡Awƒä!l#…úÙS(lEN©V æõú%‰þÏD©Ø–†ó༱ äùþ ]îÅEEbE"ÇÜ ¯ \^ÝïH:DQ>’+7Ã囸R’ƒl™… æ:iKm=‚ 9‹Ñ–SغA…ôƒ?»иïžAwø‡Eœjyìý ËàrY;ㆣw"ô!qdmð˜u\AÑâDà7IîÛÐnä7gжý‹¬E¡$­rwžðý¼ ±_®ÒZ´v4ÁXô!ÿýtÍ7IP–Jdíª PÊC”ÖÇlLŠË;”h£JšCsýuØ¥"&dyÈÌ(…eÐ Ë~~̪ `ìIžß¨ ”êgã}�£Å ³µgö!+·¦‡ÝIñad¬¯ Ü«Gã`ÈÕg¡ôý„ÊíÙ ú?ß´|ì0¾˜wÃ!JžúCdª7Ç‘ãîúê>ÇGºg!³G’×ï”媱iÕ¹ö’ _§¡!¼Ôe¾ß¡àƒÃ°¸å39ÎurQ²¥u-è°ñú‚z#6lÜ2ß ÀçyKÅ.ìªûÿ‹æ¡Z¯hò-²¶@xÌ:¾…v¡s¸7h)'Š’=¡#Š”‡ÍÁÏrwÞ²÷“kÖº/\˜¶"·ºyÞ´tƃNëÂéÈR¾ªC”ÖÇlLŠË;”,h£JšC³N#>Ê#fúnàð²åp]Ç~c›,#-a)ÔÏ&|ƒF6ÿ»OÁTS†Ü¬}8Sû®ñEï|FR‰ej(’ÿsà5:¿×Cg~ޱ€zõväWÜÓÇì¼EÏWP}ц™¹ ’wâÈ´†\ÐG�Ãm,¿‰žxþV‘‰œëäð´n!XTÚnT·`†¼üò<…uáò¡ã4É ™‘µ@®YwG]k;lƃPóßÛX2ß LÂãh@/@L"åî¼èï'·vo)bÁ_ꣴ>fcR,XÞ¡dAûUÔâ¼hùúrÈçf-'Ï¡erc²˜I‚6J?›3¾àúïÆ³º£Ø¾ñChuÖÐÍ$#yðJ^4ÿgçc·ªqÁùét/X1ñ7펢äq’µ„@¢Õ£8cÿuÒrÿ–àI‡žÎû¡›°¥h_rw^d݇››ÑýžÙîf4‡’s²Á—ú(­Ù˜ ¥äйÇícTIshÎ}‡‚ëmä-ÈG¨h{ú)ñ´Q*øÙ•¼[p¹ŸÁj8‚œ4I‘ßÃäÅÕοÞ{àËH^±ž˜ÀµìÅ£ÛO1¹Rý(ˆb© ÷/šmÎ÷XL¡ÛÖáÐ'êdÅ2f0îj…Ùx:ýu4vöa|!‹HÈÚQ;€¤RO¡¹;Oø~b2p ùeg¡#§ QËY”åƒÅ;Iÿàc$ŠÒú˜I1Q@Þ¡5 ÷¡}Œ*iq¯-Ø—]Ó‚™S°Ü…íéIÝØ ÛH¡~6c´9§ÀùßÀù³šM!Y•üSWqßî†OäÍ#64ÞBÍãE“6?6V*²þ)Ž€oËb ÊÎGî­ÃÊùãÈ/¶òêà<ÂçiÃ×­’‹×BfY[@ÐðuO…>Ä`Ö [ó|÷ÉÝyÂ÷Dz ,ELÉ[G(­Ù˜嘿¬¹ÇícTIsˆ·Ãø|ˆÿ®i‡g†çëG{ã=‰£kÎß"(ÎÏÆkEQæNdoí6@•¡Å™ÚGèŽ;Q6#Qh½…šÇk•7)õÐi÷ ìÚa_{(cK¥¸¬RaÖÓéyÈgZáÞ4¢øƒ}ÐÛðøæûžõ˜Oáh(‹€ÈÚ‚à…fqþqœÔÌÃÊù2Íbþ¹;Oø~¢ä@EÛhès4FÑVq‚)yë¥õ1“âÁ¢k&ÚǨ¢æÐd Êw~ ›{ ÜÌK˜÷©‘–s§ŠB×5ú!ñ‰ÞF ó³ ¦Pàçvñ4tˆobÅX-ɼ…âðv¢^ 5÷{y¹M>ÛÑô0”ÇyUø080±aç0㼆ýº§üwi@)î¼’÷ùY´­d›;Õ†ŠÏ•¡äì—Pf¡°�ç1C+¢O´¬- 耠Ќ¢• J4Ô*yK‰Î£³ |˜’·^PZ³1) 1!¦ñ !ÇÃMä¹wð:…Ýé]vó(÷¡}Œ*i-E´ùÂm,âǦ_ôMF$Â6R¨Ÿ K†N I¼…ZHd®þ»3³PléEŸå0Ò7lA®±þЭŒ÷L6 †§wð¡Ïö¶§é(É“GP‚{0�STƒ ÍC³<æÜ?àpu+F 8Æ{ñcÅnì eY[@м’÷yE?ecÁñJúY|N¥’Ç/’¶/ñÙJà ÀüÙ—°…NEh| qPZ³1)Ê0á|ÏaÈIG†öêl¡Óé™>üx${Þt.Š€Üc„Qñ˜ë¿ÕñGß#Tgo åþš‚ÛZ)ª¹P$Â>T¨ŸÍ›V4>Ÿ{É�:Ÿ„>0’Co¡f_Àø‘f>¢ûŒ u‡¿¤dôÂtà;8Wõ«c™nEžñ7Yƒ­(á\ÿ ¶ÒÒI9·Ÿ•Ú°`S'|ž6|pÕa«:{5hò3‘Æ×W•} ]“âÝžÊÚ‚Kt‹€]"*•<¢ÃÕ!/ãlQsŸLÃk;…Œ&¸BÖ(t>†(­Ù˜ …˜¿Lµá´&”¦&ˆ=Æ^ÁÛˆŒ²ô¸_¢ÃPŒCa~¹Ç£"Br»š oSUV5Z‡'án1ñŠÕeÔÛßJ§ä)ÑÏÆ{åeWÑ ðµ–†k(·ÎïWÉ$Y·P ·\ÂÙ–7üï™ÃdË9œlF`¬ºÜ‹«¼…óà®Î„Ÿ»ÂÒ;Ø…sp”’À0t#œëÓ¨Ó £üAôÀ$lå;°ÃÔË÷Ö<TÈŠ•à¦àé¼}y14ÚT›Ð3&nŽMY[@У6”~f^ “¼bUŠRÛ_ÁOrwÞ²÷s4TC•Y cc;z†‚×ò=íh4–"S•Ž=æ~å >FÂ(­Ù˜úÍ_fWPd Õ‡CÀ}Úü†:ã ÚÆBŠhÄá›ÜcDþ1€ßO•_¸·’F‚ö¡Býlât/a(¹Aüx(HPTØZÑŠÉЭÌߘgÁxÖ iïp8ï8˜¾™%WÐØþAó×ô´ßƒ±$ªŸÃì^ºh‰|ž*†[q»=ò0Í—VkâIüõÀýŽº¼(·y¢Üæ‡×(Ï(„É5o -wçE{?7ÜŽ ÿüž°ÐgöÄ`0ÖárgÉ'‹‡{ƒ–òùï«q°ÑZx8¼³p8Ì ]n¹%»Ü Øq¡ø6Ü+(E$èNý‰0´aÆ÷ ½ß~Äßb{7ÆÅ=©Mâio‚IOL#¨·ý o’“H ûP¡~6ÞŸ`0w‡ùYE)½î2%O±pnXöíF™éŽà†Öj{·/kŒ9ø½ÏqßdàçØEëm°³(¬«bù\`¸C‚ôù¨¶‚¢ú•Í$2ïËŸ§ˆ˜E¢<x{,²¶€°fàm<‚tU6JŒ÷ÐÞ30/(^ ½ñ J27cã3Ü”˜;Æz0lºÕˆÊ’ýÐhö£¤ò[˜Ûú—EÔ“»þ #™M½ ­æªvÜ!I¦wG]k;lƃPóßÛX2ß LÂãh@EÖ¾yŸ”´Ê]ñ‰–Ãh¡lFVù­ý9þº½Ø”µ5çP²û¿øÍGþqóì[ؘ¤€©GÞÝ ‹æš*¤eÀ—_äa{þg((®EO\›Øø m°„Býlø:éM„>Ä Ð }ÍËІò — hJÈty¾žëÐ’¹Ÿ¶E_BÎöO¡)(¥C,xÎz^ ­ù .2÷^Ø›šáŽæ~$Ñç:Qší°¿B‰V3oæxå´ L.kO*dE,¼÷PVb€yñ�¡æ+¥ÈÊ.G½cX´±!k ,ë�î/t\ø,è#@¾^TYgÐæï¶ìY‰¾cÏžáå{ÖÅÙ—Ïð,d%wý Fòà†Æé¬Íü<OGfþ^höæ@½qùI£ÔDÊ-_O=Š36ñ_ç7ú¹ÿ@KPÆúáé¼Zx¬xè]\pè’»IdÖý¶L”o‡Ú!Tîè ÙJ –»m‰×h,âŸ#nAë”ÿ‚¦á_h<t�º¿Í‹<®GÐlXÁ5AˆòT¨Ú‚\ýSŒø mÐçݧ ÇDŒî‰°êggÊ'†áFá|håçý}tzüüçI ´7ÁO p¯0 ª\ºˆ¯Õ­ôÌ Ô»#» ˜gþ`J¥R#gw2Š-ìkÀ~^1Uå^EŒÎƒÂ¹>‚gï‰ÄëÇËÎn,$€¡BVÄÂÿ'<o…»Îç@MA&ö[å]¢ÈÚQ; h>rÆÊh5hK¾Âs;"Nåî<áû¼Ìÿ:"¹edù×ʾ†•¥P`0R?\¦|~¼ˆ¶ÅÛr³×ºƒh|#Ÿš';ðuOñ⡑ð áÌ:ak^0”£Mî&“ix›¯àâ¯PÙá•?Ãñû‹áü—C‰äÌGP%º4â—ÕKµ%i•0жª«²‡OŸuè±mÃ>˜=óæ£óJÞ |öKÈ•,…?3”ègÃ|òÖ#h)ß‹JÛ /ß¡ß|éi¹(9uÚÕæ¸ ¥¡`Á÷yAÉóý;Žà-ÉæœÆ|äM÷ß¡¯®ìä–ú¿Ž} £S¾ d-áµ¼×¢í¯C¥á*ÊÊï)"…B4¸áV\à÷õ"ÞòÊÚ‚ëFçË÷d I,wç ßOòä¿¶r)byòŒX>§Ä-â@Í‚¥…}‘xÌ'B)f15>)ù­žào\Ãm„xm´6¤{¿nw`4°Â¹ñÜKXo8" “¾ÿm£!%ï#TuzùÍÒ1¼\‹Ë-\;³;*W¸!‰¼{}v!¿‰›O°ë þøc¨Uâú„D²¼ègÃ+yª:±’17ÑÓ=¦ä%þ¡!¼]6Xéþ‰ÜBM[þWp£Í(ßú´$7"7³öò*4t+;Œ/xéÏCd‚úCdª7‡R–Hv¸áf|}öÉ|}&[pòd &Ãè¤(åÏüš#ñÊŒ¬- è€8CËÝyÂ÷óJÞÝï`î%5CN×ËÊzÍßá.SòŒ5£Œy3 Ÿã[ì*Ôãñbèì.t6_GÙŽ"yÆî€åôYÉoõ„27þÛò59‘îý«ÜP,K‰Á!à¶âDu †ùaÙ¦¼àI8çë…µê3^JÇÇ™CKÅ ñ9êÀ÷— 0Ûß"àÐC­.DE}×êÍÑÖ�i·å(ÌφŸ;ïKùD¬’Æ'bû2Ä€XQ]€î§Žœ](m¨+ù:[œž5¦‘dèthùã?h®Î ¥¿™ŸŸßGÞÇ›ÕNâïö½:ósŒxÅQ½ùwàL¢ßk|LÃýã±èþÇ[¿BÛdr1­„p®{p×`AoÔýõBé†ÙðSòµ熃|–áû9ø;a­[Ùq•{;„¡ÐÉ’Üõg0”ˆ2æÍ ^[bcPf­T¶`WÝKÑlïWyï"¼Ìý¼¢ ±S:s˜j;‹Ïש’g­Òá¦à ±:íž³ü‡pŒDn!y%ßiEuɨ¼Ýá×ÂÈzÿn®Å7m± >å&`7 ˜ÜX„>‹°êg³%!«±¢ÚŠÜêæè>Ÿ+4Eõ N·z1í~‚«Äʡގ±Õü:1üú’Y¯¾@vÙ?Ãä_¬ñÔM"Ëé¿%^âJå˜X©BsN|s²ÊH†. ²¶€ â I,wç ß¿ã*| Fü(fÞL¶ã¢¡CÑäØbù#>i·‰B™ûþ꼟ÖzTò|‰Øàp˜q^ÃþÕúã„oiŒ¬çïÅ­âhyÀø¢Ú‰rsWRÒ)ûP¡~6äP:»N‰–!#ÄŠê*ê^¸#dklG`r¼âÿí†ËfÀY[„íªàð½M@N‹à×—tf1ÜtGj#רæèÒ)+âµ® Ÿ×;²¶�é€F{È3!J¤™à ^xb@nž¡ùsg¹;OøþøWÙàK$Jh¹*D95$¾HO1ñãs/›pÃ!»‘‚æ Ù¸a¿zròk¼›}(zp ´ß¨ ¥Ÿ™Wˆðö7ÜæR”’H‘!è’»Éă{&Ç!ôÙ¾Âö4Ýêüq(¬ ¼’Qc„‚uG·;‚§úÂȪb!ìC…úÙø~…©äSdVÁÜåe7z²1_o/^-;‹ðÃu»mÁhæ3m;‹l9n^EñëK6+܆.3G—R‡%â·®>O ÏV""ðÙZµH¼ßD3º8ùžœD¾?^ÇU¹ëω˜fÆÉ ^1N cmºTT8Š“º(’Û¤ÝÆ×7YEÇñENò5Ÿ¡ØÔ½,g¦”Ú/â'Êmž(›â¯õ�å…0¹–bÉÝþÒ½?Ö<ØŠ<ão«;ݦ=²^àš/ñdXX‘YÇUo|ú$>Â>T¶Ÿ çÅ g”)y3×_‡]ª ”®é&/AÄòëK*¼’g=’+7Ã¥›¸R’ƒì²QÌÑ¥C8×ã·® IV,C¢4,²¶�逪ªÚùAu³ ùh¡»Õ°8Ю•!;Fb@¹;OøþøW…Ï3‹D -W…(§†XËÊqż4-fJ²òPVÿ#2/Jʘ7äl?Tª|è»Fø%Ô»®ïœ5Õ+&~N6Âö›·ñÒUÙ(1ÞC{ÏÀü¦zàÚ¯ $s36î1Ã&¾änéÞÏ+:~^ œCʯpŽÆqKcd=~Sôªƒä ~ã÷[à—ö¤^؇Ìφ!Q¸Z€‘ßëMèì[R¼É8o)âáZ�~ÿjüú’N´¥|½_|‡‚Ö¾Dj„s=~ë ªeEÌ ‚ð’xY[€ü &š³Žo¡ š;†3жŠÝ ¸É‹ßqUîú3DB¢„–«B”SÃ) y"L´¸ ¼¨Ñàƒý ‚ ¿(cÞLñ›ûØP`åF[Pò†ùÿÒ’š‡û >C:ÿuò½ð¢Ê:ƒæ`rô%–=/1Ò½ÿoLŒûð?^aÐûbÞÃUBad=Îûßüà‚/˜'O…mz¿¥“a2?F‚Dó-’zC4v\(¾ ÷ª] õ듃�†Û 8X~=2Ê*á\ߺBø<eðrØÔ~@Ìf+ûƒHŸøµ k „wÀœë{ì­îøÍo–Ó‘Å–ZîÎ[öþÀÚ›~[õÉ ÕƒÁþM0éÉ»u׾œ5¡åêˆujX…ÊšÎ8N I8ó°Ím] *ÿ[ƒ²zyM ʘ7Þ9 ÈÞ±˜(y¹ø8s[Hñ¦eÑ ¿wa¬,V£¶ä+\1·c ÊâNÜMÉ šÏM@2 ›•ÚHÏ(Á-—´‡Â>L1?†Äð¦±hô°9<ð/~ýé†ùÈéSÔøàºUÝBkÃfd•ߊÿЇb8ÿÝ>äk°®>OIŒO…¯±)®äAGõ.däE±E­8„\õ&lH/B]”EHîÎ#ï~lƒ}z…Y°Bt"ªcõpè1@úÒ²àË/ò°=ÿ3×ÊtåÔ0®“ÇdnnG9ófÞθ¬ûö1b¶— uþiÜvÊÛ†‰¶ rW’4%ÔB؇)ægÃr€v u‘&…3ð˜O$f5ô©ÍD‰ñvØa_îè ÙQù÷C'ÆS`+‡œ_SGœð¿õ—Ps¿—¯ñ·£i…ÀrÊ‘üßæz}ÁÈ(­EgÐÃt§RFÉ#h€Oê¡++†F³%Uµx%*AîÎ#ï~¾Ä8¹'ßc(ÎmF¡j rõO1Æ šù“7¿I1á˜y êØM"œ<RP9ó† ã.´škÖnê—í7ÖΗKAU¢2;€Îg#¡tÈ]I%hÊúº X-Â>L1?†Äÿç T·½ ³öšÁ¸ë*²‹ôž†·ù .>‰ØÂËÃñû 7Óe¼(ćœ¸£ìÚ•úìÎÌB±¥}–ÃHßÀᅩ݈¶’Q-+¸YfFÖüãoBò¤Vš†ßû õ¥Ÿ(ß'ï½Lw£ññò¢rwy¿×ªCÕM ¢7« ñæ<n-žøü€key1£Q=ø«&†|Ã>˜=ÁÐ !%o>û%äJ²YŒ“GQ6·ÉC)ó†þ§³6óõMGfþ^höæ@½1‰~"«DÐ~Þ{(/»Š†ð±Q®U Üº´ÈÐ w¥A„ )ëè& „}˜b~6 éñ;Q§ÝuÎh4{‘Ÿ™Î‘ÍÈÖ-O$PF+XäPK.qâC>ûÆ4ó·¶3.Ôþv’¦*Ð ÓïàŒÒMTË ot$0^è£) ´5ÁÖf‡k$±À7²¶€ ¸7èºZЬ4UðëK%zt¹;¼)"™$'–› Lµ¡BÍnòRšwÏ¡Ï.„Ñ9Ÿï$`×AýñÇP«äH¡ ÆÉ#—PƼñÃeʇŠWŠÛojÈÍ^7êV$è'’‚ö[Ct/ò59‘ôý MQèM@`þ$š’ û0Åül²ÀùÝè¼­Gy‘6èSll|´¬IŒøƒ)¥ø0Ür gƒûª9L¶œÃÉ–aÆ:b@ Ÿ§Œàú»9¥X“èÿ(k „wÀ¬Óˆ6îBEíá©§åG´ ,O(wç ßO6uGQÝ•0‚vcfÔ“ª#ˆ]x¾¿l€Ùþ‡ju!*n¿Á–=úÉc܉Ì)Œ¸€2æÍ;8K·¡‹„û‰Ìbj|Rò[=Aûy‚ÁÜf&¥ôZ`¸»N•¼DáFá|øÃl¾‹NŸÿ<‰ö&XWð!¡€Ý€â˜'̉#ìÃTö³aȇi» ‡Y³â ´œ(Ѫ Ü0ºŸF51”øÏ âÇCQTƒE…­­ˆ¶Ã¡ZVxÀhqÂãlAí™}ÈÊ-‡‰—{^¿¸!Ìemðú6.\‡3‹@a/wçE¾ŸkGuöÇÈ?~:Ý9T|± j• éÚz¸¢¨èT>†B‰uòHG"s1PƼ™…Ïñ-vêñxñ†¢ Í×Q¶£Æ_žñŸ;`9}Vò[=Ò~¾ž›8qä Zûúà´ÿ¿ð•÷ŒtÃîÄx¸¼åÏÐÒ!›Üí¯Œþ_`-å{Qiã7sÜ;ô›"=-%§A#¨ˆ¤D =¿PT;Qnî}ÃAôaªùÙ0$‡yŠ«%;‘>~ƒ¥o"ò5þ @Ë!Š¢?uv…ÖPyZ‡’Ou°ÙùM¾¢R+H‹`®snXöíF™Ixdµ=ƒ;Æ4Õ²"Ü'XLí>SMr³öáLí¸Æç]€EÖt@à :t'`è%ä](}0†$/ wçE{?çëÓ:ÊŠ´ÐhKQUûsÔ0äª#È Ø-èußᾋœzñŸíðÐî.b$2''é¨ãd]J”1oHÞ̃ØÈוÔ7vÙ‚]u/%Í¥HÞ[·Küª¢æ|)v§« Ê®ÂÍïŠB¹òÈÁÔõ˜‘aÉór"÷ûã‚øäië1ÀOn´å[?€–Üqƒ0k/Ëîßô'Î(±aiÃDÊÝ~ìæ|µâ¡3Ê-D‚ú0ÕülC¬&ò°1·µãØbmÇ@B6pñZÎ*L>Óv£ºE^_mZ!í³ÄüÞ¤ÉþvÕ2Iø<Å,Ä> £ÏguG±}ã‡Ðê¬p §ˆOÞ\vEBF¯OÞ\˜^8ŒtÿUÐÈ]†8ÌÛMPçä!3£–A',û·aƒª�Æ©ÏêEHd¾†“u)Q̼™lÇEC+†„ÈB¢hI»´“ö+Út ¶ÑYpuÈÛP„†ß,8T¨ÃG?_'7\Íœ¼=2ìú‘[èuz—)àÜŸNt¯²ÏÈ\: CËÿAsunÈ¿e~·GÞÇ›ÕîT’Eàš/ñ$âï™u\ÅñÆ×¡Oâ#C)ægÃò —™ÆóÌعdüA–ãÁ]ým¼ðDÈþW6Tì5ÁAþíq¦ÓöZ¹²ŽÎu/[혊èÓ•ÜQ„ÏSLPÉ»—û¬†#È Æ&Q!-ç(®vþu-^-²¶€ ¸!4ž<˳°+mR:;àøs¹&+wç ߀×zºŸ:„u··¡®äsèl]pz„þ7Š|Œ ú’æÕa€ã0Ów‡/<ã…?‡€ë:_ ú}ˆ„p¢íÂQ”¯6‘ùNÖ¥D9ó†+Ee“ Ò~šÐ)4 ”FLšì ¨ß$Mµ¡êRôȰëGny`--©ó:èHràP9_¶»‚A‰fà}pÛ·ŸÀo,³š°œ“ªOpºÕ‹i÷\%¿«ÞޱDVn1nÅí¶¿ÂÂxüxiµÂAæ|’Œ¡Tó³aH /gGÿÝ¡+èp‡+R¯Ñgùw2׌?(Ðr¢aÖ…Ûß¶cŒü;ðmUûebôï7@Wó\ÄŠ#à…½©9á[¤DÎõøÝQ„ÏSƘmÎ)pþ7pþl€fSèïQe ÿÔUÜ·»CÉýCÖv�?Y'&–i鱜Àåî<áûy%ï½9ó¶"·ºÞP§‘¯1R�΋–¯/‡"P åä9´LNc¬ó‚ô)ĸ}àkïɺ”°y“¤ýŒÙ_£´A%oK5:}N˜Áåº;°˜ÿ‰3šT¶½ =!dý´?¿¡Ðf"g¯MD9jÁÀÜj”<ßξ·’ߨ®Š˜ÑU“X0†RÍφ!1Óè¯Ûݯ4aŸ¼¿11îÃÿxŸã¾‰W€Öœï”—‹9S 05>Eÿ¢¿U¨þée2Þä…ê R#gw2Š-ìkÀ~bÊŸ{=É û¸ „s}…@81ÜQ„ÏS†×Š¢ÌÈ ePehq¦öºEÎ*k : N'pÁ³2 |?¯äÝ½Šºî°“$Rú`«8“ãÿo7\6ÎÚæÃiË]†8̹ïâPƦ¥±ºX>BEŒròáöa 'ëRBêÂX;¤ýÜ–jT· a´å$6}d„sv>×]Td@•FÒeй9J~û“Û¯P`~±óy~_90LÒÁ³ÎùoⓉ÷ÊJ 0/n˜`¾RЬìrÔ;†¥QòÈ8Uýl’À½iÂÉÓ x&°¢"å%F’a7ñi;Pôå!älÿš‚R˜zVu’ƒßu Å{UÖ4{É-ÿ´ýù傸5æ#¯îw¾ïÐWW ö‰à×]¦/atÊ—P8×ã„Cµ¬²¥#«ø:ú’¶®ÉÚ᯸Ü'|ÿßè«*Ã÷c[‚9Nlø?¿>ƒÑ¶³ÈÝîP=ø«†{mÁ¾ìPbãÅr¶§ÈBA„Û‡5œ¬K ›7‰l?nNËy”Ÿ‰"Û×íZ´EʲIoÿ OèÚÈ ¯XºZa6^„NgD½íפD›” ÿŸð¼*óœÏš‚Lì· .71 áJa?†D7qo?‚p0¦A•k@׿^.ǘyšcwà^Í ‰Rq64úŸàXpÙáüé1ã ~¹!¸áf|}öɼÉãd NžlÁd`4%Cç÷7÷jñ»à"…\žT#+F ªeÅŠÉÐÅCÖt@œNàrwžðý+˜k†’IÎèÈ@)»ÉK1¦á}RSà ÉÍ™ñlILl¹2bÜ>“ÅV|oº[nn•3oÂMtÖjæ#>ËÚ{¯½ &=¹õ}_'½ý‡ # ·ò› ,-ù ö樱qñ>5á†[qáà ü_ޱ¤µ¯p ¥˜Ÿ Cbf1ü¸ O§"dÖÜKXo8V%$:î¶´¥|§ Jžïß«w] ÏŸýÐç(‰°;Ï4Ü?CF´À‡[¿BÛ¤|k¿p®ÇGø<e¼iEãóå9ÀÌ óÙHèÃÚµ„Ào–;ê ;ûÏU…¢—»ó„ïç•<ëi”\¹vûqWJr]vc>Q&qdm¹x»Cõàc¬îO´žþ*~S’–¹Íä¨Ó‘UùhÑÿRZ½} {s«”yà ÿŒÓY›ùú¦#3/4{s Þø *›å •-h?n=¦H'c7ë�¾ü"Ûó?CAq­|)ˆ KaDc®¦[‘«û%lþðs«§¬öžÂDÈWhÑE¹¹7Æûg0öÛ÷¨¶.h-Â1”b~6 ‰yÿûÚ!IÁó±#èêÀC651gß¼ú¼³ä6ðð´†YÎFáúñ4²÷˜Ww˜tHÊŸ/ø½*±˜ ›‡Ö‡xêö%í°g5~\"Z ;/‡cª Ÿ§ ï=”—]ECx›G”†k(OPËÚáo(z¹;Oøþh)fá{ñ >8 ‹{ùæ˜êÁÇX5s.v¨vC×öjIÐðB¼§® G‡$"(h¢ln“‡2æ.S>T¹Ѷx{GnöºQw°Bòèá„·ç6£Pµ¹ú§ ðõ³ëQdqcÆiÂ1³L)Ht×ÈF0Êìç0{"ÌšÃOà¹wŸø{þëQ! e‰Gm(Ù¸Kl }ir8ÔSY¯XGO[$Â1¤t?›9øw û¦ù.<Ö1ä€]‡ª›a¹a- ¸¥;€¼…öD Q'¿×Cg~ÎËHôêíȯ¸çªÍʼnO^=´[3Bn»çm¨ò ë?åš ¡½é7ù#þF œëÄ,wcqbÓ%+"ˆø*¼$.‹emòG,o(úðgåàýïç7Üm,¿õT\îú3Ä!8n ÌðDGÎc†6äÉMM`BŠ[=14Q6·ÉCó†8²,™ù,2ùDÈÇaSã´*R ¹ÄzþžžWòá³_Š6ùíïO(0Œhpãp´(Ô?@×¢‚ÖæÚrìÐñ ùü¬§O6­0¯b™…É!ûàª+šïñ"á/\¹#y™Ê`¼qº»ÒÝä)ÛÏ&t“´êäØ qáðnpEÎAâ7·_. š÷üžNÜÖŸD‘f?J*kÐØóVrÙ›$š¼&ˆp®ÇˆM—¬ˆÀû æî0¹¥ôZ`HPËÚ‚ˆ3½Üõýä¾õ‡ o–ÞÔˆÎþ±˜™êÁÇX5œÏîýÐ?~ºtRßùµeùÐ??³œÃI)nõÄPÐDÙÜ&eÌ^)q|‹]…z<^4-éBgóu”í(‚ñ—gÁ6µœ>+ù­ž ýÞ=‡>»Fç¼_�¹9Sü1ÔªØ!ô%iÿÈF0�ÑÖàß»bQíE]¬[rZ!OcØÑ„šŠÃü¦sgH¹+‡©ÅŠð6‹@¥H»-¡t?¦äÉ ßþ÷®Ãòû`Žy\?¡*k‡¼¹ç‚xñèöSLFL§• IOh /›ƒ|IØä51HYÃ!¶àyÚp›¡D¢˜®@ úš—¡kCÖï€xCч?+ËÞ-„*¶ŽÜõgˆC0ºæÆ°>QT»êПìCE14Q6·Éƒ¼›~ˆÃAlŒl³ee vÕ½LZÃh÷.Á!àíÀ÷— 0Ûß"àÐC­.DE}†clò…ÏK@œaÄc“mWahl——·+$¬ÄíºgËä?7dÆþ£-$BžƒŸä�«©Dq©·ZåQò”ígÔ<y‰¥ ¨–W“Ô¤þ«#þÀBÒ÷a2M^€´Õ"k8Ä<O^+Šóã|Xº«Èr¾LƒâT1׌7½Ü'|�oKñF›ÃZôùt¤æ#§£žÖS=øqðm¿CÛP´ `Xñ-Û쉎( š›ÛäAê¯&ÛqÑЊ¡¨m·Pþ”<IöjÚ/`7 8FhgIÛ aD…ã•ÙDÆøûòVúðKhN~òëÿ„ž‘ÎïE÷C*Š êêy Í5•îgÃ!0òön~ݧbþÞà”»ßÀøó¿‡vGF$9 z¼ (+Çs˜e6 $+/f`!é¡×äU0××pˆM—¬ˆ`½ùä£k¶?†=Ò '0 ”ͤðYé¾ß»îê"7Îá>8Bä®?C¸q'lf3n[ŸÂ3Ãóõ£½ñ^̨°ÉE…ÓvæÛèôøùÏ“ho‚õawÌÛ)Qμá7HE„ô݆ÇÔ˜¿D³>X(ª(7w-Ûl žO2k Cž÷ä­üîoI{†Ÿbå­”rsÚu:É¢k¦˜Ÿ Cbx¹01È<‹kÇ‹ÇÝün46ñ™ZF‰°ËMàEìo€›=”(Ê”š¼ æú±ÉgjᕼU+Ž5n¢ ¦{)£äE'Ö©²Ü'|?¿X›+Pݾ±'í÷P‘] ³{¹Õƒ±z&[P¾ókØÜSàf^¼O´œÃ8U|º® A–´pÃç±ã¾É€µågAKù^TÚáç7|ýæƒHOËEÉ©CÐÆˆv'%J™7ÜÈS\-!þN‘‹PQòƒ†¬@xû¯d”ÀØn=aÁÝ~ì†Ó¶â¡S¸A‘²ý׆.ÄÈ[)šk¦šŸ CxEO´œ¤«–”¨©%÷'Ú.Ey}7%·¿¼’G©É+©Çñb Ÿ§ ^É+zß:ö¾ «@Öt@œ§Ê‚ge`ÙûýNÔi·C³Í^äg¦ó?³ÙüÆ8Òé– wýâ0ëøÚºßùe£-§°uc¯ÔûÑ5¥c¾žëЦ«°!mо<„œíŸBSP SOd�‹°Úú`òVn´å[?€–²P’¼Uó†D×ÌÃÆÜ ÔF(Pk;äÉ”DÐ~Wh¾`Ä“ˆ ³Ž«8Þø:ôIˆ¤í¿†À0t1^§—ßš¬�÷º»•𷈇` ¥šŸ CrÄÍIž·±Uù™Ðèê—äwÃU”eÓdj)¼’Ëäuêo~íý˜ ç:/O{<ø{%úyJµ¬X’'²¶@xÄ{ª,wçE{?çw£ó¶åEZhK¾‚±ñEÐÌ(T>ƪ™ë¿ÕñGß#Tgo ðMÁm­ÄQ©óä‘Ä«…iPåÐ5ÆošHòÖ" ¼Ä¶þØÕ%^{‰º:´üñ4WçBŒ®5¿ÛŠ£GYž¼ÕAnö¢pY žÙ�E‹&7 ÷Óû¡À&50·81²B¥m.îÀ0âAÞ݉zý%ÔÜï…#ŸíhŠËl9ºOž œ?Žü]WᜑqPHŒ` ¥šŸ CbÄÎIf^v็©¶¯ ¦&hÊZ!ò¬ºƒ•0»|ÑM^oñ›ñ2¬”Xž¬EžR-+ˆO^vMÒe¿¬- è€X§Êö‹ø?ÿï¡Ð§%äî<áûãÏ3Bõàc¬žÅà ÊªFë0¿in1ñç2êù©¤ë�Y”¶¥-åg[Pò|ÿ†Ž_Ww v¨ú§[½˜v?ÁU"@ëí²'KUƼáÐÑAwè :Üáf$¯ÑgùwiY4ÃÆî•9{‰ÂV¤ï3£?ÆÂCCû¯F4ÈaÇ®-P©?ÁîÌ,[zù¾;Ì·Õä»ù­åjXÁ'OPNÁ²ÌŸ;uŽA…úÙ ·âv{¤|÷ã¥ÕJADÇõDs’Sâ½:tN†\ýéöb£â£©ÎbÔv 7üJl…¾‚¤ã÷0e9d^Òã^°yJ…¬ˆ…ïW˜J>EVaÌ]Þ¤­g²¶À²ˆÍL>y6Í|‰‘g„|‘*à‘'Ú¤I8ôùØŒÜÇC”<5I½9N^Iñ½•<òãjPƼ™FÝÞè¦ç-šsýuØ¥Ú‚œêGXèë÷ÜB‡?ŸtÖF4‚f„šù`Z3.Ôþv²yð¿ßÁ¹*G;¥úä%áR¨ŸMÌÈxJ1%N’™“tcç‘Q€ãUç¡;_/rÕ¼<Úms•=t1Ê‚Æä˜O"Pî¶"§ì[ÜÐéé9”\ƒ<>O'œƒžÑu ä)Ú'Wò¬çPQ{'ÌÔ”ä)A±Î5ψÜõg¤(×èü^ù9ÆèÕÛ‘_qN)BÎK€Ræ ÷¦ 'O7àÙ¢ ÚBy¹¢9d² o¿ÈÀ& ¬äO*eû¯%0Œx0Ür gƒv^i9‡“-ÃŒuÄq+Nå¢[s ¤ÔC8†êg㽇²Ìaë½ùJ)²²ËQïfJžd$;')¯DüŒ:]9Š4hK΢öI_ê¤Ë¼ãþUT€æ“å΄WHé Í½ Nyºüùõ‡¬-ÞÊöÉ[!ÏÈçW¢šo°ÁÇ’þà¡•Ÿ+÷©L Ê™7cÜë‚ýþu艩«ñlö¡˜ ž¥BÐ~䆪p7tö‰Ð|p™O"W­F1 7yk #sƒøñP´CG¶V´buÔE„”‚ÇBýlüÂóV8.9Ÿ5™Øo\ƒ2ÁX3IËIJüÖõËãwH�Ib¿šŠ/Pª»…V*•¼øå)²BfdmAĹ ËÝyÂ÷¢çùϨ؞Íòä1$‚îôb ”yÃùºaÒnã뛎¬¢ãø"' ùšÏPl’7l¶°ýø ÇØ ühø.ÚúA’s»Ì_áˆáxc¬ìR¶?ÉAù°á6Ìw:¥ÏAôÛ2S¸u†VÛ3¸W{+.F ¤D8†ìgÜ7…‚Qwí+üwÁIÔ¯c^x9¶,'©ˆá—+Šo¯”›²n<4FqI5®V]¦È‡<~yJ¬Y[@ÐÄ‘¹í¯Ÿ¼ØŽÌrwžðý±}òTYÑå[~®G¾ÇHUxAéþ ¦GÞÐg‰HbúÎß«ég ‡>Ë…2æ ‰®¹*U>ô]#¼tðÁ®«€Å;gMuÔ¼™R±¼ýH>ÏV˜¡Ó_Gcgß¼F $mYsPΟÀ7%<I”@H©‡p )ÔÏf1h‘ iYðåyØžÿ ŠkÑ“"¦ñë1ürEñí•Îÿ]5z¢k®AžR!+dFÖt@œŽÌ‚ge@ø~^É»[Ó¿ºÂ|oºÐa>‡ÓÎrן‘“p“‡S…P«Ò ±xBßÑÓðê‰ÛŽû5_"_½ 4¼@ }G.”1o¦àÐïĆ3<Á6_Pò†ùÿG½Ù— aûùàºU‚ U¸¼ÝŒ¬ÊGTÜäÉšƒRÓg±!¥ËÇòül8·…ª-ÈÕ? ¦IšOÔïÆŒÓ„cæ˜ug( 1ürÅòí• ªÌ5ã—§4È ¹‘µ§#³Ü'| Ÿ<îwÔ}z,jT'6øR~ƒ2Ò‹Ö[:g‘ø›¡ù×na”ú&/Üf=ôœÿ œ­· +Þ4~œª2´8s­ãv“·*xyà0 {ÇB¢äåâãÌm!Å[¾ãÛðöãÞ4¢øƒ}ÐÛð„üUHß÷˜OQ]SÞ”"™>§x ¤µ CÊô³‰ Z4¯ä Âg¿„\ 3$@ ¿\Q|{×/¤­F_/¹8Ä)OÉóëY[@Ðq:2ËÝyÂ÷G»É³£ë—k(Þú ôŽ©ÐÏ-Á_jÀþŒÊí›øþÜÎoþÐÑ?ZàgåŒK,ý÷­•Ùü¢´j­–Žó=³Ù$o¬S‰ix;oà²îØÇÈ d.Ôù§qÛ)¯¿N¸Ü ðÒÂàM™Z¢kÊšƒ2‰¦ÏëÁRªŸÍ»çÐgÂèœ_ÛvÔ µŠ¥PHDñËáw¬cÈ\·é×,o©2#k ¼¯¸áV\8XÕ‘Yîξ?–OÞfd¹‹(‰……Ï3M(¿LEÉW0=ì†×? _Ÿ†»›kŠñÓj©â*LÑíâÇ^˜ ?Én®ÉHŒp¹Ã¹ÀáêVŒ.FpŒ÷âÇŠÝØÃäLz¹%SJÑMŸ ÆbýlˆÏf¾¿l€Ùþ‡ju!*n¿Hðúënc!¶þ÷Ut¬Ùd[ß^Ù˜Æëû7ñhX^˦ä%†¬-HÈÝyÂ÷“›¼ï`îF×ôŽø¢ž†ØàK=8ß ÔUZ¶lÁ'Ol¸ 8ë¿€Zµi[TÒù䑜úÓóQg&áé}5¿q ŒaÀñŽ…ÛRF¼åŽ®º"lUç`/‰`˜Ÿ9ož›} ]“ëÝüEÓgÆr„cˆùÙ0…N¹Ðj®Y•OçêIýhÕÑàü^t?¬Å ¿—ÙP‹ÌW˜’—²¶@" wç ß?‡ÿÿ‹Œ´)Hâ|)çLjó˜õG“F6„Bs¦¶Žh|:ú!%ò14_FiIŽJ| Ï Öö3î7ò›ÛÐO%“¹þ:ìÚT€ªÚœ/ùé6#û×ñÝ>’’€ÜoƒVæTJe™Üá¦àé¼}y14ÚT›ÐCÌæb°¾äV‚¦ÏŒ¨1¤|?bŽ} zÝw¸ï"–Fügû#iÒ{0pÃ?ãtÖf~\¤#3/4{s Þø *›_%ÖëÊd{ãý°Bû’½ô®Ÿ×ËžB)y‰!k $Òrwžðýx­'¡9un>yk”$®œ· G¶gãȃWA¥ ¾Ô€ó6£:?*bš[zŽ6ÈŠ€BKõ¨U Ê<Ž[Ž·oZf1Üø6•Ø0Êoœê>ÿ5–£P×ÇÀ¼'šugq[ÆTkƒWüÓ²n—ËŠS((/Ý~ŠÉ•#æ^ÂzÃw¡ë2†”¾q D©6A“‡ÌŒRX°ì߆ ª{RõއFüp™ò¡Ê½ˆ¶ÅÛ;r³×ºƒQƒÞ­šuc²Í¯³æóVêBœª¹¿xÊMM`BjSù0RAVȬ-HÈÝyÂ÷óJžå/ð÷ÄLâÊ”¼T&�ŸÇ‡µgQ²¯Uµàèû7Zþ­Ä›<¹ÁðÀñ°U%E(©ªÅC‡-¿Ip“GæRÒ‚?HTÊÌ ’g·#Ù‘úMµpIÆTkƒÿ{.TÓ�È…PîÐB!ñwmýFrhf¼›}~Ål®<°hÒÂÚ6F‘9âªÔ¿Yé·Y§åÕa€ã0Ów‡/<ãu^nº®ã€ñXH ©x§±`ɧs‘xÌ'Béjf15>¹†Ãµud²˜„ÇñµgA{Ä�K‡ #þ9¦ä¥�²¶@" wç ß?‹±gÏð2ÉÎ_Š2ß¼UµÅJ÷É ²"¢ ÅVI|òÈ*»¢ S!%oKU|®Z<xu 0_ûšUh›Œ´¦~×-g¨«Ë7õª¬“0ˤ¬÷/@{ p¢õô'P‘„Ó™»¡ÑìAŽ:}E%”.<°Vép3,ªžÅRvÊ®ýöµ‡pŒ¬q£@ÈRüÆó¢åëË!å|-'Ï¡ercX Iá1Ç·ØU¨Ç㮥ÅÍ×Q¶£Æ_žñŸ;`9}v·zëÍd›Ü‚ö¡Ãb@yÑA+:#{2t¦ä%†¬-HÈÝyËßO&ÇêÙàK|}p¾š}X`:Úð̳<uýL ×éåU;!ÜŸ<zæ$wPXN\DËðZʶã#r2ÎMÀe­Fz3ÒH¨r­ü‰ÙcC’¡ç £ä[46ø7 Óä‡Âi7Ã9.ýy¸Ü¡=…œ˄ªÝе½ZRˆ£è©+ѤçÉãå¹·õúK¨¹ß G>ÛÑWd=F"êÉaÆy ûS8pÃû cHé·9÷]Šzˆó*ÚÞ†~Š‘|fðÚr—õCdÙ‚]u/—­k+ÂÂùÐÊËêûè\stÍܸoúYö¼³+ÌIzCöèšO{0lî) yF—Ë}nÝO£îMÈóëY[ ‘»ó"߯ó/|)‚÷.J5'q>ÜSweùûæs(q¯ðàH6¶i‚7ÁuA<°–áÔùð¿G‡óe{°+oÞ'°}û <ð&ÏÿóõÀR}Å•Q0̺pûÛvI‚À¬ ¢4ãÂE~ô9¯üΡQæEsÚS(Mâ ÌðDT$\ Mš9ñÇÙµ*õ'Ø™…bK/ú,‡‘ÎosÝ«<ìðàžÉ†ÁðˆËÞ!ôÙ¾Âö4Ýš•¥CÆÒ•<îµû²Ë`âÜ…íé, ”ÔL¶ã¢¡C‚yYþ\ÃmœØÑ5çà÷vãaíhÈTѪW ~To€®æ'¸ÈzðÂÞÔ Çpä¶´ç:±Œ0à§Na>jûÓ:”|ªƒÍî\´HY€Y!7²¶@" wç ß¿ó/|)‚×íBzAÙ‡£–>Ì)Pɳh3‘³7òïáËQ æ¤QòÂáüC°ß¿=Q8ä—EL!2½©‹‰òåC(wèN¡Àùì0ìÚýã§K zç#Ô–åCk|üüÌr'“q«7ûÆ4¨à793.Ôþöwü[½0øÎUéé±|ò¶"ÏøÛº ¶iå›`MÃû¤¦† õM!Chû¿.Н ˆ]30†þ ¥¹AùºWKõWq^Çï B?"/Óè¯Û •JœÝYÈ(¶`°¯ûÓUüžö*zdÔ¹¾ ç´Ý¨nYºX!_[ïÈÚ‰t€Ü'|üοlð¥cÝè|å\?0 ¿"ü†"Á³Î~´F€ß/½ŠÂùºaÒ’Ô éÈ*:Ž/r²¯ù Å´§Pð÷âVñGPñóœÌõ`Q‰Ö;A–ÉŠS(oK6†µ_Œ¢ÚU‡~ÑÝ3n¹„³-$Î&[xe²e˜ß¯uÄLÒ½îêLøyÑWˆ”_á]×Ê�é3åûä)Ý_4UH¢‚"Ft͹>˜÷|ÀÙMP牚ûÏáõaµÖ`0É€ì_ó‘4݇¾º \°O¿î2} £S¾ã(á\çå©þ6^x"ni_ÙP±×ù·Ç ›NÛð|ËR!+dFÖH¤äî<áûãwþeƒ/µ Ø (&§~¡ÏŠ'`Ç…âÛpKºùnó~~χ¾k„oKˆ¥ïœ5Õ0S›B!€7¥ø@Ã/6|Á6#lºa>r:±°Þ ";í¸Ýþ6â`Ê—V+äÖ* ÒÊ­·h»øÚ†"õÈ2âžÍ âÇCJz°¨°µ¢“¡[™iŒ8á'ä×—zvTºŸ¼þ¢Œ%’© ˆ]“Ÿó¡HÕgŠ>ǃ®a~ÌФä‘éÖŒ¯Ï>Á(ù›&[pòd &ÃèÔ‡.)äA8×£Ç ¸oÞ ­jÿbir#k $Òrwžðýñ;ÿ’ÏŒ ÚÍBQíD¹¹+tr§¢…Õ_(›‘U~kÅ€BâB˜ìĆE¿¬%o˜ÿ¯¼‹ÏÊz›7õ~³/¤ñZ YÖǤ|ˆòà ÖrÏ'_z§"n•gðgwo„¯càܰìÛ ’³äweµ=ƒ;F’îeˆâ×—zÇ2ýldõeH®‚Â+z®ŸPC»UÔ[™…„ã'QTT‚¢ŠFjÌ5Ý?‹¾æoýJÖ(Ö¹=ïèÜË&Üpc·Ð­nz™ÂnòæàsÜî›x’ÐÔ²¶@" wç-{œÎ¿Ê|Œ÷1ëÐc[F Œ áøÜÑíÇŽ²òÿ¶â¡3ÊI5­?„m™(1Þü=–;:hv„ <tb\’?ˆÃ;‡Ù;jàœ!/$ÊS.>ÎÜ2Yåf[rÈ dªÛÞ„Ô’¤ã÷P‘],ë ¤@îxÄ�ób?7À|¥YÙå¨w ˯äÉԈܺu¢ÉyÓ¢øõ¥Â1¤L?YýEa$SA »ÉKÛ¢/!gû§Ð”ÂÔ3‘P¿rþ>X©‰®I.)¾@vp¿²°ðÅúOÝ>Yǯp®Ç’*l-oæ•|"³hw-õðyZ™Ï ¼!IÁ¸dmD:@îÎ[þ~~€V¿j+cð1ÞKàš/ñ$tr´À¬ã*Ž7¾}RÓð6_ÁÅ'^¡pç•?Ãñû2,J|}:oà²îØÇ&áÐçB_‰zû_Ô˜ºDÅïDv;Ô9{ ÑìE~f:?ç7#[·ü$RJrÇÿ'<o…­Èù¨)ÈÄ~Ëàr³Iå–⃉á×—zÇ2ýläõe,‘D…€¹0 ª\ºˆŸrÀ]‘Þ™¨9vîUýòùâÄR±H@`íM¿Q—àÌ¡%<°–•㊹a©ŸÍ”d塬þyÈü[ˆðyZaJ^Täî¼D߯ŒÁÇx/į©W8fcKÇ%s%@L":0ºÒÅÜKXo8 Ÿ;¶ö 0»é6xãüntÞÖ£¼H mÉW06¾À˜Ì ûûäÇç +Pã¤ZR¹+¨‘Rů/õŽ!¥úÙÈè/ÊUAá•)ÿtbm´jI[ ¨· äùþ½úCE˜lÏbøÑ]´GFT–}œëQüw¹ ¼¨Ñàƒý pG9L¡CV¼¦äEEîÎKôýÊ|Œ÷Ó¯)¼,˜„ž¡šU˜O‘"‰¹$¿ëŠ£&Þ�UÖI˜YØò¸ í& 0 W(ÍÃjÂÀ/{>™ ·Ãút,BÙ\90 Uˆá×—‚Ç2ýl¸q'lf3n[ŸÂ3Ãóõ£½ñ:ÂM´ò!ÆA ±ÉÇŽ`~X¢ä©?D¦zóê×sE˜l‡” ~^-+2»E:¬÷'Ú.Ey}ôhÛï}ž 8F^ÂÞíIJÄpY[ ‘»ó}¿2ã½xªV°‰³Ü:m^9®…ûé59¢šÐ „ ÃÍð¿ÇRvÊ®ýöµ‡pŒ${;C¯ä £ä[4ês:M~hóÜ çøúÝ0Ç‹@î¬! ¼¤rk aÄ…øQ¶Âl¼ΈzÛ¯qQš7ÕJȯ/Ž!…úÙL¶ |ç×°¹§Àͼ„yŸi9‡qªø t]ÁûG†$$ù $ ÿ^ù9ÆèÕÛ‘_qÎUÒ(Ád›Wò¬§QråfØ{WJr]vC‚u>6¤…ðò`Ü…Vs /“ 05>Eÿ8)hEÖH¤äî¼DßÏ_ŠðnE ™)8kŽ+t±÷ap`$bSÊaÆy ûuOùïJ Ùà5ãÂÅŸ#¢)òʟᇙr/árg-aà%•[ÞFTV˜„ þ-Š‹u°Æ #ü欵Y$ CZ&ò5ìÍQccÖ4{W›dÙ‹ÇV;¦"*ª,ómñŽ!eúÙÌ:¾…6¶£-§°ucQðÖ(<º&C ’}˜àA"L¶yEyhosm¾ß¡àƒÃ°¸L*Ÿ�¹]¡W­ “…ϯOdmD:@îÎKôýlð¥Þ‡05º"|1þ[e6Ò¹Ø{pÏdààïBŸí+lO’Íxlf1îlFƒÙŒ;~¹åž4ZÃ1,ßÂY ?¶Á>½‚êA™ÃZÂÀK*·b ”CŸl%i®¦[‘«û%lSÇoøzêqðÈ*!¿÷–*ôcë áR¦ŸÍ\ÿ ¨~Œ?ú¡:{K¨?§à¶Vâ(‹¨)!É<á G&Ûsðõöâ•`®‘¿ý?×Îâ…ŒõÌunÅÙÐè‚ÃÊ1Èù1ÒcÆ‘Ééir#k $Òrw^¢ïgƒ/EˆeR–¶FEžÖÇÚ˜nEžñ7‰bÞR‰•àöÏb¦ßŒ}é §¤ ÅZº|ñ˜Î%›ü E>k þ|ÒñÚPcq†6ðÅó }i>‡Ù¡drƒ0k/Ïvpï0>±R:ŒLŸcÜR­Þ;†”àgÃ+¢=¦Hçë¢ÊªFëð$Ü-&èt—QÏÌs%‡  ºTå G &ÛÄ\ó$4§Îñã7,]ÍùãÈßu5˜¾ˆó6áÈölyðJÒ¿C0׉Oda"+.“# BVÄB"ŸsY[ ‘»ó}?Õƒ±zxá§3>B×Â&9Xœó+t¡÷à®Î„Ÿ»Âÿž_á•!À 1Å91ï´Î½AKù‡Ø¨½ wàoÙ“Š/‡,”:TÝ$fg ¸YUˆ4çqkqsÿ®•åQåã°–0ðä³dÄ:@Qå&ßš‡Ã E¡þAØÜî@sm9vhø…|~Ö€Ó'›VØìÑdúLËÇRýlð¼…¦Pøëâ7Wo€®æ'¸È­SÀ {SsâÖ¢ô¼/° ÊC¡t?‘éjNÁ¯¿T(y$¥Åá h ë8ìÇÓÈÞcŽšÒ‚Y‰|ÎemD: ‘gÅ Ñ÷Ë]†H&1>E‹Ù…ü‰ñ©¸6]ɃDÖ;êúšÏ![~$‘ìÑÓh|#Ÿ²´œp¿†0å4œ©6T¨iŠVxIå–÷'èM?‡6ð¥ãNŸnÂëdo¬ƒfV[ƒïŠEµuý±6“Ü«iÄï‚ötÃe«F–ä¦Ïô@Úm ægÃH„PôU•9»³QlÁ`_ö§« Ê½ŠžDN&E9èQ‚Éö,Æž=ÃK ·1¹NdE=´[3³—( »‘™¦âept]&ß!„ÏS†D>ç²¶@" wç%ú~ªcÿ¦+™p¾n˜´Ûø:lFÖéŸ1<ýZ®'ø[°Ñª\ûá2EugøÂrdߘ)ë d¤ÜYnæÄ!ðúL¼¡ÏB$•[Q}ò¦1PWŒâ¤û=Ía²í* mƒa Z´²ÒMM¦Ïô CÌφ‘ïà4æ#/çúê*pÁ>üºËô%ŒÎf™H=ñ’…d݆&i_!sð{:q[Ešý(©¬AcÏÛÅCÈH–?OùœËÚ‰t€Ü—èû©|ŒõË6]I'àȒ scí¨ÎþùÇÏð é9T|± j• éÚz¸¤·{]$¦ÜáÞÁÛýµg´ÈP¥Acñ„¾!DR¹í&¯«¦âíØ¦wˆïƒ#`½=ü=+ì+îO'ºCùÚÞO4Óg;/‡×unGÁJ5?†äpÃÍøúì“ù[±Éœ<Ù‚ÉÀ0:uÅ ¨‰qÐ`!éIâmh‚çzüÑŠ©–ùœËÚ‰t€Ü—èû©|ŒõË6]Œèp¾><©Ó¡¬H ¶Uµ?c@æˆjB¹C|¡úÐa1 4‡œX«–súë¡»Kƒ’ÝgA•y?$ûÌkiN DÀ—óe{°+˜yÞ'°}û <ðÆ2e&¦ÏK(×^ê!CŠõ³™†·óôºïp?˜ÃÿlÄ’¡KÎ4Ü?C‰€&#‚eëWh›Lp®q³Dô$Ì{ IOoCD8×ã7}>OùœËÚ‰t@"ÏŠA¢ï—»þ qàÆxHL0¬Oá!Q¨|ýho¼§ÜÅ~ ›.†r—;s·°'èÓüSWq!ið Á$•[ÞŸ`0w O:W<5~C¡Í ù~D”£ Ì­FÉ#×^ê!CÊô³™ë¯Ã.Õ&¨sò™Q Ë –ýÛøzÀس^CêÈÁ ^[¾@vÙ?—Ì!ƒëñC<uû¢ŽÆr’wš¹ µ aýL¢—@guP›S3&ùœËÚ‰t€Ü—èû©|ŒÕà Äò_Ãæž7óæ}j¤åÆ©âƒÉ�˜âßt1"‰–w(’üÙÝ‘Û)ùåN�>k«P¤=ƒ¥®?8Z”¼dœ¢¯š<ëHÌ$T”ì©Çò1¤<?›`ŽÉ<bñÀa¦ï_x†w¼t ¸®ã€ñE’M‰Choú clqZ#I¾ M�á\­øsýs~þ-Gø<eHäs.k $Òrw^¢ï§zð1Vͬã[hƒf³m9…­‹`vóå°„ÒÊ#¾M—ôLãõý›x”P¢ÛdˆžwHP΢,ŒÎ©Ð3ÒSîÆÐßa¡ü ŠŽ} +æš²¿ÿÇ2D ÁžzÇBýl8/Z¾¾Š”;‚–“çÐ29±Î ¼R¯T¹¯Df1îlÞêX;=˜á?û:Ðh},{Ðå@ïm¨p®GVüŸÆJl­˜êõJ"ŸsY[ ‘»ó}?Õƒ±jæúoà@õcüÑ÷ÕÙ[B¶áSp[+q4é�¥döÆv ‡>Éç÷¢ûa-Îh>„jC,^Z·R¼’3ïPxÙ‡£–>^¥–Ž÷Ë^ÁwÿDGtMY!ô¹(!ØSáR¦ŸÍœû.ED ž/¡¢ímè§Ég“-•ØYù�nÿ,fúÍØ—þrJÊP¬5 Ë—ˆt@¯Ó»L>Ç|I!Pz*œë±dÅfdÅÈ;*|ž2$ò9—µé€DžƒDß/wý"ÁM Çt�édrfU£uxîtUU¨éŒ4-PŒt™P’•£‚¢± úÖ?™Ì`¼¿Ãä³Ñ [‘Sz ×Ïëq—Z%O)y‡â!|>•‰ßÿc¢„`O=Èß¼„2ýl¸×ìË.ƒi±Î¤Ü…íé”ÓX/„å$åÞ ¥üClÔÞ†;ð7<æ ú“‰|)øýJRýxiµÂñNÚÁ)+îêëð¯Å3RÚ`>}¯£ËOdEL$ò9—µé�¹;/Ñ÷S=øq€oD89vŠÍ}17ËÔ41ÛŠÜÈ$|±¶ ð¢^J¦1`>€4~®¨Ô…8Usv/ñ|á×ó© Lˆ, EEy‡Ö<BR¹5ÜŠÛío#J¤ÚlÄïÿ±1B°§Â1¤T?›ixÛSœ«s½@ÂÿŸ@u‹ }Íç­úå-oÀùû`=zoYžƒ€Љ2JǼçF›Q¾•¢F9„Z,¡¶ =#ä½KD“|Ýêðiq£òrjrSð´ßLz„^Y[ ‘»ó}?Õƒ±zü½¸UüT|’>ÕN”›»”2D×,<¸ÜˆA³YI|À$<’¿í´G °t¸0·'ÝJž2ò­%xDøóI'VˆiI6ñû,'z®=Ü_èî–vã$7Â1”b~6 Éá|Ý0i·ñãb3²NÿŒáé?Ðr•¤,¹• .Bð%^1qÝ*‰Ô„Ô·œ¯cèàR>þ†Û\Œì²«a» ¸¥;€<Á׬hr KZWá\v“÷oüb:„­ÛôpDé(áót!U„^Y[ ‘»ó}?̓±zfzlË(Q`ndÁÝ~ì:2[ñЩ¤¨”3í0à¡nÁÆ‹@Æ2˜k.°”Ó­¼è Ž•ZsM…äZCðIå–÷ÊJ 0/Ϋ˜¯”"+»õIßlÄïÿ±œèæ^‚rþ8òw]…sfý¨yÂ1”b~6 yø02âÙrFŒàKè·e¢Äx{qo,wtÐì™û>tb\Öéïƒ]wlÞä5œ©6Tl+ƒMFÿCá\!+TÙ8òc¿sYŽðyº*B¯¬-HÈÝy‰¾ŸæÁLjƒÀ+4_0âI„ œu\ÅñÆ×¡O bî%êvm ŽÏeEŸ¼(ÛÜ 8º&_EäZKðˆð瓎ÿOxÞ ççs ¦ û-ƒIX¿ÿÇrV0÷”S°Dn°RáJ1?†,pþ!Øï_‡žœoÀ¶ó3!b@Ä|‰˜à5_ÁÅ'^ᡯüŽß—5Ù¼i<£î0%y>Ç·ÈUí„Þ!mèpH{ ¾ù¹ò²Â`A¯àðùOŒøb+¡äyj‘(B¯¬-HÈÝy‰¾ŸêÁLjYóy‰ øgqÚÒ¶é ׈È'¥«€Rß¶•QFÞ¡µ^¸wðÚ›`Ò“›/#ê®}…ÿ.8‰úâÃLâ÷ÿXŽæ^©‡p )ÔÏ&ª¿¨¸n|kfÉ\3YEÇñENò5Ÿ¡ØÔ`¬U:ÜÈÇzè´{PVÿ|uÁ—‚p(—Xгøö;…óºó¨:^�µJ…tm=\2»XŠô!³íøÛ‘ Y©"ôÊÚ‰t@"ÏŠA¢ï—»þ ‘58D’Lb|*R˜Ê Œ^ß¶•‰•wȆv9å0„r'þà’Ê­Åȵ*¤eÀ—_äa{þg((®EQø“JüþÑ™ƒßû÷M^I½c½yŽ!…úÙÄô /ñÜø0Öñ'ÛϯùÐwÙJL+`ñNÀYS ³;‘”±ƒí_µÉ¶n?ÅäJc`î%¬7ψ?Dà Vâ¡…F[Š*Ó£ùƒU!óhIÉ‹ò<­H¡WÖH¤äî¼DßOóàcĬÁ!$D–h`ôú¶½—¨y‡ø È…Š`²|¹È5PžO2œÛŒBÕäêŸbŒw»E7¿É2á˜y És+~ÿåÌÂ×sÚt6¤í@Ñ—‡³ýSh JaJúM$½ÇBýl¼÷QUU¶9ãË­óÐæ•ãZ¸vÓ*Óm0ÖI¡° ÌðÛyAÉæÿ›¨i|ô @.[5²V|)–ÉgDÙz*d¶'sðõöâÕŠ&3ø³»ÃeÒ6)¥ä ·£Ñ¾p»íUü Y[ ‘»ó}?uƒ±6d ‘ èŠF«oÛÊpð»n¡8ª)ɧxfQ|F⇼‘5PžO2Á Fö-FzWòá³_Õg!:ñû,#©6 ª\ºÆø¿!`‡®ÈïÌ Ô»·ò„ƒ(1¤x?›wCø+R‚³æ8t]c¡ÏŒäÃáÀì5¡àEDÉËÅǙ۠JXqŠ¥ mEžñ·UÞ¼­`òy퇰¯=„c$¹-6x­'¡9uNJP΢,ŒNiýóH{§”’·* �q°=‚!��²¹IDAT/dmò­•DžƒDß/wý"!kpˆ$@U40z}ÛV†œ.ç £äÛˆ\ƒ7 Óä£Ìt‡ÿw3œãÒŸÜ äÎ(Ï'›wÏ¡Ï.\ÜXì:¨?þê…\XÁ¯& âÿ1“˜©ep.¥¡À<8ÿÌ‚’çû7t¹×¼qQ:d )ÞÏÆû¦FW˜bJÊ`«ÌFZÒ B¦áí¼Ëº`›äeo.Ôù§qÛ™èm¹wu&üÜnJl‡ãåptb˜|&^ɳ‚:gO” PáeŽZú$ÝÓeEüP!+ ·�¸Y…ü´ÐÝj­¿4\+C¶È²¶@" wç%ú~êcmøúà|%  ?Æþ ÿ?T½P¢IMÑÀbù¶=ÄS·â¶å7®Þf\¸øs„y ¯üΡQƨ ¹³† iåiÇ|™WDíopè¡V¢âö Q}¢#†©%Ùpæc‡ñżÙ!QòÔ"S½y]ûj‘1¤ø[¬ù´=0²`+ÀËÿt‚ÊöߘOÔjŃ{&‡Cè³}G¾Íd3‹±gÏðR¾e)&dN¥”’¶æÎ:¾…6èŠÎ(Ú*v³›<‚Ü—èû©|Œµá½‹RÍIœeÚÀ½Âƒ#ÙØ~¤ ^Ålêâ?]OQ}Ûh‡ƒh#3ˆÈŠŒtÿŠ™£•­7ÜŠ +bF¯”\n ¢kÖÀÜâĈ~¡b™Z’è°ßë¡3?ÇXÀ½z;ò+îÀ)s@9!cHùJ^tÆGè »á±Û›âe§¢„UŠ"¿ÿó<b˜|JCrÒP$i«”Rò˜s}½Õ‚ <ó‡¬é¢ZÈÚÂA‘“Dß/wý"áµ@«ÎÁÞX¦ ŠTòhaÃî¢}2bCLK4²˜‡ Ðý™†¢ u%ŸCgë‚Ó3)šEÉ­Åèš¼¼'V÷îE~æV¤ï3£?ÙÉÙ©eÒ cH‘·À+´èŽ¢ÜÜ ÔÄ3ûí{T[=¡ÏŒäC¯ÿó<ÑL>…spTv*œä¥¡H Ò‡O{BÁ‹&Ðëô.³0áþt¢;FÂvò<µp#è¨Þ…Œü£¨âë󇫿Çqzê\âòR­iÐÜA‰ÖêÁÇX=cÝè|)÷iaªB|Š‚seY‘5ÙûX¡Þ‹e+r«›á•øÔŸ¼;}>æúë°Kµ9Õ0°ˆ#˜¿G‡¢Þ4Š3µLd )Rɵ¡dãl,±a4ô¥yf0îj©,iÒ ±0%O:èõžg#ÎGøßúK¨¹ßË+LÄÝŽ¦‡Ý¦æÆ7™i(C8×=°–áÔùp«)^9*Ûƒ]A9=ïƒؾýxçƒ"É&+V 7‰'õЕC£Ù’ªZ<˜um£ºhî DëFýàc¬žÀ(\­?ÀH‘™Cj@nÄN£äÊͰÅû&®”ä »ì†ŒÑÈÞ_ï»WQ÷Âæ‡AJlG`r¼âÿMBqpÖáû˜d”$·"£k.ÀyÌÐJÜ‚™Z&2†”i‚僫®h¾Ç‹q2&Õ;ÒrÊ`¼qº»LÉ“Ždú?{ñØjÇT„€Ž+ÉýÜKÔíÚ•úìÎÌB±¥}–ÃHß°¹ÆnÐq<œÌ4‰!œëX´™ÈÙi5Å—£ Ì)KÉãÆxHö4Ö§ðÌpà|ýho¼‡‡Ž7¢®mô¶�Í”hÝhþÛqÀý‰ÖÓŸ@EùÌݼÀÙƒu:²*I~K“zÌû¶½4ã,|/¾CÁ‡aq ÞÐC¬¼C~¸n×¢-˜g£mg‘-q$>EÉ­ê wó› ’‘Ào²Í'‘«V£8é7y"lðQ!cH¹~6Óv4¡¦â0Š4;CÊ]9L-.Œåý,óÉ“.éÿ,±üéâHr?ûÆ4¨à×*"Ï;Éè…éÀwpRq^”Ì4‰!œë#xÖ9W? Ÿ§ŒÉ”ïü6÷¸™—0ïSó²ä0N5 Å-@w%Z7ªcÕ̹LØ¡â7¢m¯–nï£è©+ѤoD×# ·p°ü&zh¿Q »áÕ›ÑÙ?¶¨ÐÍ›"f ”Ýä­�‡ÀØ ühø.Úúyµ˜(y_áˆá PDØàÅdöÆv‰#ÕÒiGåûÙÌͧר©Dq©·Z™’—z¬ã®þù*“ÜóëUË%œ FKœã÷õçp²e˜—k”ùö&+ Eb,Ÿëäö¼fãEètFÔÛ~…×;©²":KÑ5g1Úr [7‰m©Bo ðÐÜA‰Ö濱zfF|´hæ°DøDå¦&0Áþõ…¿·Š?‚ŠŸçd®‹êT6¿šÞ/ìí/%wjgrkµˆ³Áé2¡$+}i ,ÞÐO­7„cHù~6œß‹î‡&TAÕÕóÌ\3e!ÇÝÜ ~<±‹ [+Z!¯M€¯\¯øÿù >qÉd%¹Î+Ì­ÕÈ"ysÓ2‘¯Ñ`oŽ³Î Ùݪ‡6YÎ\ÿ ¨~Œ?ú¡:{KèðP|ŸsªWlš;(ѺÑü·1Vç³Ã°k?ôŸ.EÏê|„Ú²|hƒŸŸYÎá$»Õ[Gð¦±hô°9<ðü9øGºa>roä;¾UžÜ ;¹Õ_Gcg_èÆ$Ùˆ°Á šjmEn…)"(„Ö¶Jüq¤G8†RÈφ¤û躋®™"xp¯¦¿ üª‰/5¯h¬6Çç†eßîP�˜°ùo{·ì–(üÜj2ᇾ7ó>yvBï˜ }s}®¦¼<Õýv{ǯ=õ8xä>ÞDY¨•„°èѪ¬j´OÂÝb‚Nwõö·LÉ“›DëFõàc¬îµû6FžÒ-/ª]uèmUÀH)ˆOñy? 3ð˜OPäÈ?‰>>¸n• ƒœÜ.Î¥Íù»Š±Á#¹ö. óÙu{è#C ò³nG£}¥»?^ZÐ5É}j FŽ;rKÖ‰¦e›ö�ü~ùû!ŠÆ¯ ýd2ŠoÁEYÄ8Á\š}¾\žrƒ0k/ÏËdîÆ'–¢ ž§’�|#oCÁÉê ¹ƒ­ýƒ±:Þ¢íâwh ß F)#>~:3âC©yòHHê T·…GÉ"7R÷P‘]LQHêø‘RnqoQüÁ>èmxB)8ÿô˜OIBAŒ Þ F; 8dh‡[ œ°0sÍEâgãµ@# Ñʇ(ú_1”O´wv8^'=;`Ç…âÛp37Ž!sjnƒ…úèZì4×–c‡Öˆ_Èçg 8}²iñVOðü:…ê ¹ƒ­|©˜„ÇÞ“žø“¼“ÂX-JÍ“Çãw¢N»êœ=ÐhHoâ—µÙº§˜”q]'m—‰>û%Ó…H“BA„ ^(|º`Ü.æ“BA~6Þû¨ªª7¹»Y…ü´ÐÝjX4Ák¸V†ììrÔ;†™’—ˆ‘ã.š5ÂBÙŒ¬ò[°{ß±ñÁ\š¾nhÃ(Eµuýó²ƒ|^ïPÝ4wP¢ucƒ/EX´«V!-ë�¾ü"Ûó?CAq-ýÑ©G©yòæáüntÞÖ£¼H mÉW06¾À˜Ì'·J’[œû®nÅèb›ñ›¬ñ^üX±{ÌÉÝq¢½¾ –ûèôøùÏ“ho‚5® ñÍ<‹Ó–¢,.’tx}"CJò³ñÿ ÏÛù^[ŠŒÎ(Úø±ÉnòR1rÜÍ: ß–‰ãí°5Œ/wtÐì(ƒ‰üû¡ãlÀDE8×ç0Ùv†¶Á0«ˆheÉüQ6YAT·�Í”hÝØàK 8·…*^èëŸ7ð»E7fœ&KöF4åQjž<zÍL•%·æ“OoUç`/ Ä‘Ÿ‰4þýªìKèŠl[ÑAKù^TÚáçÞ¡ß|éi¹(9uÚÕ^áFál4Áhº›€¢˜zÆBýlæ\ßcou‡àVžó9PSŽ4‰s_2’„(9î¦ám¾‚‹O"RåðÊŸáøýu›Feµ,›ëÜ,³«—4È ¹¡ºhî DëÆ_j0ëÐcÛ†}‹›”y%o>û%ä²Å> (!O½f¦¤‰èóqÃMÁÓyúòbh´%¨46¡g,2I 'ðÚz ðû n´å[?€Ö܇@¸òñ^DPSÁRªŸ 7‚Žê]ÈÈ?Š*’ò¡ârÕ›°!½u®õÚ³©†X9î8´®U„9øz{ñjE“üÙÝ‹áÕëW¢ ¸õ*.HnÂ[Ðë¾Ã}ÉGȶ?ÂCG¸/âÐÜTwPj>ƪy÷úìBó¡‡vÔ µŠ9à‹ç‚ýþu^ê 3Þ€Í>”¸ã{R¡×Ì”ÈD‹d ·âv{dT:ÁÐ 9QO&ÄTë€-üÍÕ¹P•óøÝV=ÝŒp¢(Š©‡` )ÙφÜÌ>©‡®¬Í~”TÕâÉÀ$“ù©Õ9îÄ„¬W'¡9un1Oåòreùû÷9R‘è\§FVDa®¿»T› ÎÉCfF),ƒNXöoãe]Œ=âÑÛ<4wP*>F<gì|Ù�³ý-=ÔêBTÜ~A]bQ%ÂùºaÒò‚oC:²ŠŽã‹œ,äk>C±©›âöUª™)er)f4C)Pøþê¹mºŠ_t?ÁéV/¦ÝOp•lxêí[ÍËÅPSáS°Ÿ É‹Çn¥.Tç¸^ɳ  ‹ÈU)(ûpÔÒÇÏXéHt®S#+¢0ë4⣼: pfúnàð…g !x®ë8`|Á¯@â@o ðÐÜA©<ø : ©öC¥Ê‡¾‹ª ùç*`ñNÀYS-k*‚•™Åðã&< _þ9—Ÿ÷{ðoŠ7TÉ%ï=”•`^Ü`5À|¥Y’E0ä\ß[Œ„Ò7ÄŠb ²lŒ)ÑφÜZÜh9îRYŒ={†—Û”Þgs^´|}9ä¾1‚–“çÐ29±Î ¢ºúPÜtwPJ>ƪáÆxH6 Ö§ðÌpà|ýho¼'º]õúd ýNl(0Ã\e”¼aþ¿Å²&_r2ªÌÔ¤ŽÔÍpùà™ØoLò‰òzÞeïàþt¢{xµ3›üŽ×ø;BQŒïw¤‰Ž1Æ( ¸µðâ±ÕŽ©ˆÎœ{Ù„ŽÔ1Ö\$0 Wë0êtЛÑÙ?&û&dE,æÜwq(cS°ŽÂò*ÚÞ†~*qèmš;(ѺÑü·1â`²å;¿†Í=næ%ÌûÔHË9ŒSÅ¡ë ýcmpxç0 {G œ¼=¯äåâãÌm!Ó7Z•%^ɳžCEm¸™OnéJP¬³Rú:¹¶ñ þ˜~ü•Ũï!ŽêÉÄkiN'¦xKå|Ùì2¾À ÿ?ïƒؾýxc‚ãw¤©°v²€[ë,š´àx¶–7ctUÈ‹G·ß“•‚¨Ëð÷âVq„ÿ¡êT6¿’u,“z$B¢Ï'îµû²Ci4Ë]Øžþ!ª+ ½-ÀCs-N„ Cù,åKšÅhË)lÝX³Û/QÂæõ�‰@u—u?À>6 ‡>êüÓ¸íLö&?xåtpEVpæj>¿’ü ! @•\âþDëéOø‡ i™»¡ÑìAŽ:Y•àMz ~ƒ§ÍDÎÞ(¾)G-˜[’—øïH=cTŒQpk൲ µ á›ðzèŠK ³:0²ªNŽ¥(FY-I>ÏR| ÑÃæð„|_çàé†ùÈi4¾‘oµ­â,ôÂïmÚóûšäö;՚ݴ2J®;cõÌõßÀêÇø£ïª³·„Nø¦à¶Vâhã[ìE@]ó6ZœÃ”+Ïxï]‡å÷!AðÏ~DÅölŠÍLé’[s.v¨vC×öj)šj`=ue8’ô¹5‚g :¿‹ñ;RDÇc”ÜJ}|‰3fœ×ð¹þù*oÞxE±J‡›‚Û^QÔîAÙµ¾öPF b!sl> €xÌ'Øz¥p¨n!%w |ë„Eü PeU£uxîtºË¨Oy‡íä³]“oß`RìÝÈLScŸù%¿ÑJlŸ<UÖEtùèÀGêH Áèc‹þ˜K„ß’sS˜HÚ­¿‘w¡Õ\ÃÏgLOÑ?Ϩ[g>=«$Ñ1FÅ•3½C"<¸WÓˆßÃê¼^7þÓX‰íiºU¦@‰­(î§&W& pVê¶ð83wÝCEv1ÅÎØ>{5PÝBJî@6øÖøF–B|3Äbýu{¡RíBusßbûrþ>XÊkF²2¼’w·¦u…’;“Ò…ó9œnt‡-¤ôA“Üâ|vví‡þñÓ¥vì|„Ú²|hƒŸŸYÎádRnõ8ø]·Pá¯Ê:ƒfïjS`ˆáÓ“z,oø‹ìÈšÞƒ! ±æïfd­ZAãE“ ƒEq}¶¯âP%ÀïDv{(Â^äg¦ÿÎlþï\ÑŸPfH0V†êRr²ÁÇ`$JdtÍh7#‰á“ÇýŽºOQ¬œÒ%·‚Žé#7XË‹jWúžå†ÐXœ þ'8<“óŠ9çÇHGVãnS­úç«ôéY>¥ÙÓ{0’wõuø×âA)m0Ÿ>Æ×‰ôlEžñ7yƒ­DÀùÝè¼­Gy‘Ú’¯`l|ŒK3Š+XÌfZrM ª[HɨøÁÇ`ÈIZÂ.À¾`åï…¹ìS¨7•(ì&ÏŽ®_®¡xë'Ð;æƒ5Ð]rë-Ú.~‡¶¡ðSð(eÄ'þíhÀ]!ITú¼�7³ör ™jч"ÖNYÓ{0¤!Úüåûy Ÿ7®ú ç®Î„Ÿ»ÂÅ_á}3Ÿ0¦PxŠÞgKXŒêbJƒ±Þ™ÁXO# ÕßÂ6ðn^É;q†Ö!Š X>y›‘yä.‚é è„6¹Åò.á`>|m£a>xdôãidï1Ã½Ê ^4Ÿ—­Y4™jQmcpµpí¸pPŠô iˆv“÷oüb:„­Ûôp¬J0ý‰ñwôJS(¼¥Ê ‚TŨn!%w ’ëÎ`P…âNÉMÞw0÷ £k&åÆId˜ÜZ€øäÕC»5#”üQñŸ<èºFW¹�+ÇT‹&”0¹q'3MëSxf8p¾~´7ÞÃCGx𠆲‰1UÙ8òcß*‘(¬¨×_BÍý^ø8òÙŽ¦‡Ý¦Æ’Þ ïC ²"R£º…”ÜJ®;ƒA =a”í*A˜Ü ‡ßèx:q[Ešý(©¬AcÏÛ8Æ]4S-;/‡é3Õ¢EŒÁÉ”ïü6÷¸™—0ïS#-ç0N„®k,ôC eÃÏ_ƒ½áuÞ?1â‹cå™{‰º][ R‚Ý™Y(¶ô¢Ïré¶ ר èÇä…¥P©‹QÝBJî@¶Yb0E¹'ŒJ…v¹%]ýÄH S-ÊPÂÚ9ëøÚºßù¾ÅhË)lÝX³Û/8…g(À üÞç¸o2@§»c½ voszöŒiæ¨ê3ï_è…éÀwpRqÈR(ÈTŨn!ò*%×Á åž0*Úå–tõ[{ú’Û±>ä7:ã{…^ß’œ{ƒpØ»1W®½õ‡t}¼væúoà@õcüÑ÷ÕÙ[Bcb nk%Ž&=Q?Cfáë¹mº Òv èËCÈÙþ)4¥0­Úï2€á–K8L«1‡É–s8Ù2ŒÀXt¹Y …Q‚¬ˆ4Ũn!%w ²ƒAÊ=aT*´Ë-éê·Öôó¹7åŸAmÍ9”ìþ¯ ß?n~ƒ}d³È×Cú86‰ëE¬ÜzLÎ×U•UÖáI¸[LÐé.£Þ™$¡HHð¥Â4¨r è›áõ5;tExg^ æØÕ_šć"Ü ‚E…­­X­M€° R3 o[-/3¾Ã}YøÏöG¢ûõRÝBJî@e>ƒz¨Th—[ÒÕo­é^£±(%¶¿øÿuyÿMÿÐxè�t~Ã€× ët'V¡sý¡œµ3�ßÈÛ9#å˜u@¿- æÁy9° äùþ½ú[8Π˾Ý(3Ý ;,²Àj{·ON[ÍY ?¶Á>½ÂØ{ ë Õ¢”¼Ïžë¯Ã.Õ&~o“‡ÌŒRX°ì߆ ª{ijR¢º…”ÜJ®;ƒAJ<aT*´Ë-éê·ÖôÄÌ3gÞ”˜l ÓÒ ±´ÁRm ‹¢6жª«,…B ±vúúà|µrBlîO'º‡Y'+—I8ôùØa|1I“Ìgõ‡ÈTo~¯ÉöóÑ5›¨»Ý ÄHóQ¶žBË(½!ÄH•J0ºfÉÅJòßÀá Ïx…š/®ë8À9±ZêRr*¹î ÌbøÑ]´OFˆ;œ0*Úå–tõ[kúƒwp?GEÛhHÉûU^¸LÇpðr-,·píÌ>쨤ËT‹&¤ëãðÞE©æ$ÎëtÐÅ(çËö`ׂ‚ÀP&×èü^ù9ÆèÕÛ‘_qÎÕÞÂq£p>´Âb¹NŸÿ<‰ö&XeO¡À+yVªn6ðukÀͪB| 9[‹·?àZY²ËnÀ1BïA…"dE,8/Z¾¾R¢GÐròZ&§1Öy¹"o¢º…”ÜŠ| ¬pÚHù £R!mK3ÒÕo­é8ÜVœ¨nÁðh3Ê6åÁè|Î× kÕgP«ÒñqæÇÐZ<¡ŸgDBû âµ@«ÎÁ^ É¡¸B9jÁ@‘ñJ‡ß¼—ïE¥m—ïÐo>ˆô´\”œ:íŠfßɆƒhoƒ²l ý‰åΦÚP¡f7yÉbÎ}‡26Íïgå#T´½ ýTâPÝBJëÀ‡†NA,Áº/ü›—Ëú)ƒ±:Èiãi”\¹6—nâJIõ'ŒJ…v™+]ýI0 ŸÓŠê’/Pyû|¿dÖeÅ·máOŒH±îu£ó%YÎCüú´õàe�7ÚŒò­@kîC€„Y{™“m?\¦£¨î “w¼ {ñ 6fRÅúþç‚{é…BdEøgò}¥L¡]S˜ž`±Ü…­ý?ñ–—)y"ò¿þ×ÿ Ö9Z!Á`ÄCøiã¡ÅçƒÃ°¸Wö‰aÄ‘U4C{ý‰£Œ>ž†·óôIŽŒÇP8$úZþøš«s¡ Z ÌÀï¶âèÑûx#Þ^>!¸±vTgŒüãg ÓCÅ» V©Î+¨®•M$'//oq_^222¥äeHûcØÇ„7¥»Åä ô9Q¨’¦¿ýö[˜F+¼ û׿þú)z]6ðH9~üxè' Fb0ÜfÀÁò›è‘5:YjBäÍÐ^?Fâ(¡¥ŠŒÇP:a¹öTŸàt«Óî'¸Jü6ëí£Hâ|}xR§CY‘m)ªjÆ�…k,ÑöÖá…è ŠÂß‹[ÅÑÒkðEµåæ.xý‰ÛzS%M®_£¥t`´Û<v‹Ç`¬’DÚ…Vs tº‹0ÖÛ`÷®ÕŒŽñ>ˆ¼¢ÚëÇH%ô±T‘ñ©�?.|o1âcw¼by›§¼[<bɫǶŒ–.¶H¹£ÛeÿäÿmÅCg¸ íÚ Nš’[¯ðÎSZFÞæ±[<cípÃ?ãtÖf~.¥#3/4{s Þø *›_1³¨$@dÍHW¿ ô:½ˆ<GeañҬ™á›ÒÇ៩\û%ŠŒÇ`0–y›Gä„â¼Bó#žD¬'³Ž«8Þø:ô)q¨[Ñ£Ýæ)­ÃoóØ-ƒ±VˆCx>T¹Ѷx{GnöºQw°oØVJlˆÌ¢éêçµ´§ÎÇ ‹?ïƒؾýxYüD‰ågCë!©T‘ñ Ftd†oñ晆·£º³ÿLª_/•+zømž;pá6Ýâ1‰@rŽ À<a²0ùD(ê×,¦Æ'ÙɹH¹E3ÒÕÏ‹69{c…ÅgJž˜Äò³¡õ4fd¼§,‹¦Ê`(ÿ4µkë‚ÌPä-T~½T®èá·yJí@r›ÇnñŒD˜…Ïñ-vêñx1_Y:›¯£lGŒ¿<ã?wÀrú,»Õ "siFºúàYç�ó­’ÈÛ<ºI£GÆ gîen8XÊ{F4ðûi_³|°_¨€ÙMoªÏ?ÿ\¡·xÒùõR»¢¯ÜkXƒ‘83xm9ˆa¿èe vÕ½\æ?ňÒž4#mýf0îj…Ùx:õ¶_E‰vƈNämÕ‡¤Ü´”(¨ïò¢ÂÖòfŒ²›=F$;.߆[Ä|hk‡ƒßu ÅQÍ7@•ufû(ˤ |$òë¥{Eg0ë›Év\4´bÈë…7fù“E. ²¨ÓŒtõ `¸µY*~£“–‰|{sÔØ˜uÍ^–Ÿ1Y,ÜæÑîêÀ¹ÍØ“]†ká‘ñn‡6¯\øµ&FØæxãƒëV 2ˆ )MKe3²ÊoQ-z }2J¾Eø –ÐiòQfºÃÿ»Îqf× &Rùõ2%Á`P ‡@€-.RAš‘¬~s½0íØŠ\Ý/a·w3ï©ÇÁ#ô$1N5nóhwuØ/¡°î÷ˆÍù(Ú*v¡Ôæ•yÓΠ†YôÛ2Qb¼¦<ñ厚!ŸÎ‡NŒË:`ø5ÖÛŒ ư ¼òg8‡Æa¶þ&©üz™’Ç`0Œ LÉ 1ûÆ>‡ÙT…„Y{vrqÌ½ÃøÄßó_g¬+¸7÷qôh#^‡™Ûq>; ¹iئw0_NFˆix›¯àâ“ÅŸWþ Çïc8ôQ^f1üè.ÚF§W·~¼´Záx'«6šRpãvÿñß5íðÌp¼üèG{ã½õ]“ÁHhß0G¢„ú*­M•SòBpãp´(Ô?@W0à)h®-Ç­¿ÏÏpúd»Õ[—øá¶”"#ë�*Hšª£ÈWo†ô"ԹċŒÇHh·F Àk) Ê֕ˇ(oyÃn©Åb²å;¿†Í=næ%ÌûÔHË9ŒSÅ¡ë ýPâ°ƒ‘$ˆ`TJ¨¯ÒÚTiÐÞ¾’Õsòokð}+Õ^Ôõ3½õÉ4†wa(/†F³%U&< æ»b0ðâÑí§˜\iP̽„õ†ïB¥‡Wò¬:TÝl3lÀ-Ýä•] óÓ³¢É1ÌÆ·HÌ:¾…6hò=‹Ñ–Sغ±(É”ó˜¡eW ú!›@%¡„ú*­M•íí+]ýæ0Ùv†¶Á(~ÂË[ø¨ˆÇ`0èË&-(·V,[O…¢,ʇwƒƒø+RŒÍ¼@Í~=º|JŠ(<·ÞQQÍ“Å\ÿ ¨~Œ?ú¡:{K(ïÜÖJmM™f;&Q˜ƒ¯·¯"ç÷º»Ùõöz…o%¡„ú*­M•íí+iý¸Yf™ôf0kÅk•7oÃH©‡N»e×~ûÚC8FäRMðÞ«Gã`ÄVßO¨Üž óãUä.åS㉻ð†>R 7Ó¤ókš*«­Ã“p·˜ Ó]F½ý-Sòè‚\wŸ„æÔ9¾ƒtKåüqäïº 'qªô6á?aŽ<xÅ”¾uSòć)yÉ…)y ƒ!> ŒDìù8Ì8¯a¿î)ÿ]ˆå“§BZ^ EÁVx…¹¼B˜¢DPˆ‰©é‹2”¼ øF’k BÏŠéëƒóU¤oà þìîëJ#d’‚:g4MD9ËÀ4SòÖ!JÛ*¡¾JkS¥A{û²ú1 åàÁ=“ ƒá7dÞ!ôÙ¾Âö4Ý|”^Ùá÷¯w¿ñç‡L…ŠóŒ-¦¡ØJ^õ²ùœ¦ªP|«þÐÔýƒ×Þ“ž\ Qoû5,e8г"yï¢TsçÃoÂtgQ–¿Fç߯ðàH6¶i‚—:-icÏžá%‹›ÌCi>%Ô—m¢ÅettT°X’ö ÿL´÷?ŸÉ€V?›Œ»Za6^„N}gþ™ ±|ò¶"Ïø›ŒÁV àõÍïÐ4±•= L$ÑÌ5çàw?@eÖflHßCÇk åD Í5UHË:€/¿ÈÃöüÏPP\‹ŸxÊ=+’×­:{—Ý„íÃQKæ(Wò†7áéT„NÝ$aH‰Ò6|J¨¯ÒÚT äåå…6ÂrüøñÐOЩÍÐ^?úPªŸ®[%È ·‹sf3²*ÁË=Æ"ÜÕ™ðsWØ ™ýW8Gá§f˜Ä2×䋬aÞÇ4†»þ mº ª¬ÓhìŸT”•ç6£Pµ¹ú§ãeFÀ®G‘ŧ ÇÌ¢ý-ô¬HcÝè|©˜KÖ”:IÉ„ô¿’PB}•Ö¦Jà_ÿú×’¼ +.—+ôô@êE3´×>”égýiDñû ·9àñÍßpþ7è1Ÿ52Céü‰qþÇû÷Mèta¬·Áî}GÑá÷¯ÖÓ(¹r3lÞÝÄ•’d—Ý1 Ì ppY¾D–j32KÍpŠxó%³=¶mسg&øy^É„Ï~ ¹)™Ba¸Ö§c_)YöÉ$‰•g„ÒIÂH:JÛð)¡¾l"oóh¼Å#ÐÞÿl|Æ‹2ýlüF¬0˜ãJˆØ9®Jg¾žëÁÛ¦ i;Pôå!älÿš‚R˜zhÉ©ÈÁ?4„·‚Êðõ~ñ >8 ‹›²< Wh©Þ´ Û 1´GÜœðÖó§2|òÞ=‡>»pÞ'`×AýñÇP«ÄM:OÏŠäµ@¶ÉX*JȲŸJyFb¡´ Ÿê«´6U ‘·y4Þâhï6>ãE™~6œû®nÅèâ“C`¼?VìÆM­ ‡€¹0 ª\ºÆfÈNº" ¼doxìÜÔ”�†Û 8X~STÿ°ÄàçØØs˜´Ûx9» Úšvô ÚÒ ³á'…D×äÿo¾¿l€Ùþ‡ju!*ê»0,¢É7=+’÷>ªªj…§y·ÎC›wõÔgÙÀ{ï:,¿ œÇõª²vP”g„!%JÛð)¡¾l<nóh½Å#ÐÞÿl|&ŠRül|pÕaëBüL¤ñ}¯Ê¾„®IæžÁ1ë€~[ ̃óãxAÉóýºÜ‹”D× …«õu:èMèì£ëp…{Ûé1;"ÊÞ¨µJJ¡°œ€Ý€bsŸhmOÏŠônÍÛ¦.1gÍqèºÆBŸi%–OmyFR¢´ Ÿê«´6U ·y´Þâhï6>@i~6Ü<w //†F[‚JczÈm ƒ±È$ú|ì0¾@pd%Oý!2Õ›±µ¼£´l ý½¸UüT¼ü"2,XTŸ ²ù]ŠÞ{™@§ù±2”¼hm¾Øö;Qnî%=+’׆‹Spæõ8a«ÊAõ6î¼’-ψãwü9þNa“„!d²* %ÔWimÊÚûŸÏ5¢4?ÿŸð¼]¾²s#=x:0ïcÃ` ¼Fç÷zèÌÏ1p@¯ÞŽüŠ;bð¦±hô°9<¡ÄÜsðtÃ|ä4ßжƒ%¦Ñ.´YLГTkz,OºC ‡ÙÀ,å–ó¯d”Àá|G·;ÊþÉÿÛŠ‡ÎÑ„ÿzV¤X>yi{`tL†~ˆVøA71©e½áƒýBÌn¥F e$‚Ò6|J¨¯ÒÚ”!.´÷?Ÿñ¢P?â^¢ûᇺ|yZw Ÿêš`w¾ m– Úá÷©ºc¨ˆ °2ùeîFÓð¶^B dÃËÚð¢Êú-ÁlVAàš/ñdX¨DÏ:®âxãëЧġgEò6Ag|„.ÐìÆË?Çá§^Xrð»n¡8cÓ²7?øNÂl¢(/ C Hß+ %ÔWimÊÚûŸÏ8QªŸMÌ@q E…´Ü ÅKYdBcÃm®@uÛ›0«3’èÿ*²‹avÿúšÜðûìž«ÈUmB†æk\³4‡Y:Ðbùg4Bµµ6ênW€›E`6¹Š=+R`ãS˯¯ÅvBLSpèsQò-®]-–ÐiòQfºÃÿ»Îq潞 ‹½’PB}•Ö¦ q¡½ÿÙøLúÙx‚¾î9<·Ž¯lg°×dþÛãz�ÝÙGf‡» Úñ;Q§ÝuÎh4{‘Ÿ™Î˲ÍÈÖ=Å$5ãw-eÛ‘QÑ=ú$7·µ ;uÏð.ô%¿&…þ+?9!& µ.þ!ÐyåÏpÃL¹[(mç„ú*­MâB{ÿ³ñ¹VægãëƒóÕò[ºY—ß¶ óÿâÿžÑVTe_ +‚"ƒÎïFçm=Ê‹´Ð–|cã ŒÑdEG"•ª?_ùfñïß /¸ 'Ûr/BÍŠ$•br˜Åðã&tNü-Ì÷3÷Övª°NaJžø°Môú†)y©H ùÙ,À¯ýu»Ò^ú€Ýä1 ‡i» i¹¤F&Õ½çÐÄK‘ž¬„AÏŠ$‘brˆ•B/[O¡e”+¬GHÿ+ %ÔWimÊÚûŸÏxIA?› ¼âjÿ7\´§`0x¸‘§¸Z²3˜ë‘Ȱ¥R‹—–¹÷lG«Ñ2¹‚Eß»Tí­Ç€V†Ûa}:q€åÇK«UÔ´kô¬HäîŽpBÿN¼’gÕ¡êfCØ-dné ¯ì#ìXa=¢´ Ÿê«´6eˆ íýÏÆg¼0?C^ÞÁiÌÃÆÜ ÔFXÒY¬í &b ‡wŽïpòvôœÿ´Tçc§©´:v ˆ¼éC”·¼ÍzžI¢?89ðƒopEVræjöëÑåSÄcˆ ¿JB õUZ›RMT¿¢üÙÝK­‰íýÏÆgœ(ÙÏ&0 Wë0Bã ØXm†"!Ñ5¢Ð<¸|Ÿ=�]Áí§á}ò=¾iþc>¹|3îǸPZ„’ŠsÐÕÛ1¦„yHÒ°TÕ •ê[ç¡Í;zÇp**yÒüÁÉ!�ï½ë°ü>$ˆ´åqý„ª¬”åaHSòćm¢EÄ{¥š“8O6©‹å,Êò÷Áèœâ×ÎWxp$Û4ÁK‰�fJ^Š¡T?îO´žþ*’*!s74š=ÈQ§#«òQD"wÆzÂåráøñã¡OJ út‡® Ã-ö5ú,ßã.5æš ðõ ¤€ô»! üµ¤ªÎ3gÍqèºÆBŸ‡žI¢?89ÄòÉ〼˜›2ÖÂòþŽ¿HI´÷Ç[䆆:¤ ^ ´êì]–›lŽZú0Ç”¼¸aã3^”ég3ç2a‡j7tm¯–nï£è©+ÑÆ!Ê¥ÉB™JÞ4úëöFlO•O^Šáµ¡Æâ SªùâqÂV•ƒ4=ªIêZ gE’èN¼’w÷þwX"w¾8ú0BmÚF¢$º¡KôùxQZ}£ACR†±nt¾ô‡>(ÚûŸÏxQ¦ŸÍ¬Óˆ ÌðDhsœÇ mh¿ÂMM`‚Ýê­+”©äñcõMNžnÀ³ðýk°¼ÄÃÉ!–‹ZÚ“¡JzV$‰þàäÀ!01)6Öd|&B¢ÏÇ‹Òê ê2HÝKLhï6>ׂòül8Ÿ†]û¡ütiCÜùµeùÐ??³œÃIv«·®P”’ÇM §þ4Ž~wfÝÿú|d°Æ0àxÇÀå—+ ÇÛñºjRºñrÄ/ªÌ gE’èf0ÄBiJ“Òê ¶‰»¢½ÿi¯½(Ëφ{mÁ¾Ñ掰¨vÕ¡Ÿó¬”¤äÍõ×aצTÕÖà|ɧHß°Ùÿ¸Žïöm ßmКºç?š ¼ƒXÌq~LL(H_ ÃùðC¯û÷ƒ¹@IÚ•Gxèx#ªrMÏŠ˜ÄøË)ÃPD&B¢ÏÇ‹Òê ê2(0ØíýÏÆçzá-Ú.~‡¶¡0÷’heÄÇnCÖÊQòf1Üø6•Ø0Ê+uŸaƒÆŒßËQ¨k‚c`(è.Õ¬;‹Û+E¾•âO¨ÁÖƒ øí§2¤d¤/ o ‚J¶jÔ9yÈÌ(…eÐ Ë~^ÁVÀØ#^°F¶"1kDiJ“Òê ¶‰»¢½ÿÙø\/LÃÛV ]’OáÊB9JÞ|°Àùx>Øu™A%Ïn1ÀìYX8Lµp‰ÚèðsðÿOϨút/4Ÿ¢âÇnxr°ôëÍ«Ã�Ça¦ï_ ¹@9\×qÀø‚WÃÅ­H ÆQšÒ¤´úFƒm¢EDÁ®hï6>×RÂ3”…’Ì5‰’‘]ц©’·¥ª>W-¼€º†˜¯} ÍŽ*´­ùVNæzaÚ±‰—¹›¡VoņÿRCML¨U{Q×™ÿ•B8/Z¾¾Œ–Q¢Î åä9´LNc¬órS2º&ƒ¡0âÞÐFá}»$|¤ÞÆ÷>·ámXd-6°l-" vE{ÿÓ^?Å@¹ŸT§ð e¡¨À+XN\DËðZʶã#2n¹ ¸¬Õ(PoFÚÇC­µÀúqúˆ¼É+@yÃs¸ÿ_JkB1sî»8”A”ÔÈ5ø#T´½ ýTâ°‰ÁX#‚ Ý{ÃÑó›§ ',žÐgé7„Kï›Åسgx¹âNd Nã?9r¤®o4h¨CÊ+ØY$) ›M{ÿ³ñ) ð³‘èž¡,¥äñp¾Xª ¸òœ¾ˆI6ëÂíoÛAw–êwü>eÒè“ Þ”]S¸O¼å.lOÿ5Ø [‘Œ5"ØÐyì*6¼ÔC§ù*”¼�¼Ö¯Qví‡(õ •[ç¡I/fJ^*#ØUÀn@±9zÞ2¹¡½ÿÙøLeøÙHu ÏPJSòæ™Åð£»hŸ\I;¢7µçŸÄ„£k?‚îÄ ØÇÂÛ]üvf+ƒ±Fº˜JÞ¸V¶*þgU%¸åZò×</Kï[AÉk¸Š²¬ÍüÏnBFñ-¸Â줮o4h¨CÊàïÅ­â‚c“´« ¨v¢ÜÜ/Y<)‚öþ§½~Ô£?›˜§ðíÿaÉ£×1ÊTòøý€¥hIöÇ,ô¦ÖQ$¥0b+ƒ±FÈ„\$š¹&7·íkd©TH×|‹¯p“"x^–ÞÝ\“óÂVù ¿éß¡ވ͊Ôõ uHfzlË(±!|£jÁÝ~ì(û'ÿo+:G©ZÔiï6>E)~6Óð¶?Ž8…§ûœ‘|«äYu¨ºÙ¶4à–î�ò×V4QšZG‘xQYa^ ÜÒ¡¸X«ˆíÌV$c¬¸¡ ü…®šÏƒ F³*ÑiïÎ#õ†0öû8†Ÿ¢FK¢Ã}‚ŠÆ—QmÂiØÀ²M´ˆ^¡ù‚O†…[ÒYÇUo|úD´÷?Ÿb �?Þ‚3’2•<ïñWäš?ó5ûõèò±qœb¦0*‡^ÄÀglEb0ÖH¬ çë…¥|'Tªl”š_Ät¢õ|²ˆþ¾Yø\”gm†*ó8ÌN’ó):R×74Ô!en‡µsÙð—×÷‚ôo¢ENä~ª@»ŸoÁÉG±7y÷êÑ8–J‡”¾ŸP¹=:jóä)œ¨)Œ^ ±"[ÔFlEb0ÖÈò ‡€·Õ¹[±!} ¯…•…gh*ôAú áò÷MÃÛòä¦mŒjNʽÂóÉK]$ò ˆ‡Dû7ÑçWBØFk+ŒA·àŒä“Z>y*¤åÕPl%%ˆµþªr¡ë/¦)[uŒ5B&ä3s˜ MWñ Þç¨éø]xBCJ¯†»4D×ä ¼…Ãt�é¼ O×^EGÿPD}‡ÐkþwYtÍÔÅ{UUµ‚›UU›wõ2ù^$Ú¿É4×!ÜlÄ-8c½£X%ïî70þüï°T:|qþ1frœ<¼?AoúYØæ·pút^‹¼‰­: Æ ß´q^Nk5Ðhb—½9™ÐR‘Ba^ÛYh£Ôq©ìAŽúä)È;-ŒUÓ'ศ'‰ñhÿ%³ÿi®Cj¦áí¼½î;Üwwþ³ý:ÞˆffÅPJõÉ LL`ŠWHKÔõwuÅ(ní•­: Ɖ{Ó6m‡ùGJnòÞ ¿mé´âG”¼DºMMTŸ�'lU9¢úÄÍýÏÆ&c¹þ:ìRm‚:'™¥° :aÙOWÀØÃ|˜Ö+ÊTò²í&¯«¦âíØ¦w@¬XSlÕa0ÖHôMÛ Æ]í°˜ Ðétü$¶àI·7þ{°kx©7}Qß…«Í “^Ç××�“ågt{ßÍŸ"Ín5 E}}‡Ômªhbù¤íQÄè^ñhÿ%úüJÐ\7†´Ì:ø(¯‡™¾8|áˆÔ ¸®ã€ñ…h4†²`JcÕÄXU™'ðãÀ»Ð%[uŒ5²lÓB«î3¤GLZ’Ø7«ÜWD…eÏ'áûH˜Ÿ¡+ø¯°z† né]Tø|rHôRÔ1eð6Ag|„®ð“D{7^ŽÈÍæþgc“±çEË×—Ñ2JdúZNžCËä4Æ:/ W¦[p†4yœhQüÁ?ÍÆr²ðþƒ¹[hIã} Ÿˆþx¶ê0kD(¬}è1@¥úš3ßÁÒÒ1¿iîl†åÚ×ÐdlÆÖ#ðFâ›±pïówØ»ª -Î\³ ¥³‹¯o:[,¸vF‹ Õv±½lö¥¨o¢ïºMM`ãStÝ9ÐÜÿll2˜sßÅ¡ŒMÁ>–PÑö6ôSŒT$ÑyœèóÒáƒýBÌnè3CTHà¦À¼ö¦%•õ¶_EϯÉVc„õd Ê6e¡¢Åõä‹ó÷ÁZªÎ>úŠôÂ~é}s|uObSÆWhþ;ôµpæàw[Qºó"ìaá“¥¨o¢ïºMâ"è¿€# 'œއLžy¸wð:…ݹ`½D2û_ø»9¾zoO`ÿ_ºýäü^8í¿Â¹`ö‚ÍÔ{mÁ¾ì2˜Â#ÓZîÂöô˜yQ©A¢ó˜>9ÀÁﺅ⨇ Ê: ³}h™¬e$7žP„ó´¬øò‹<lÏÿ ŵ艰úJ¶ê0k„ÀHr\u¡ÃߎoPæ¯þ¼,½o ý§(46¡B|üÏѹd.E}}‡ÔmÊ—ðþã|ÏaÈIG†öêlÝ&f,3}øñH6TüÏÍ +Á+‘Ÿ«ðwÏÂçø9ª¡=_[0ª"‡™»8’¹9ø³TŸ ²ùÕâ¡›©Ä4¼ía£ë&œ‘|ÇôɲÈAFÉ·hZÜ€N“2ÓþßÍp޳±.&œÛŒBÕäêŸbŒ_Ãv=Š,nÌ8M8¶âÞ,>تÃ`¬‘pa°ë ~Ÿ/†×‚¢°Ÿ‘ZØ/½Ï»ŽÜ*®.ÀW·Bð3RÔ7ÑwHݦ qôßTNkêÑ7³°Ü…L¢7lDFYzÜ/Ña(Æ¡°pÓÉìáïæøêƒ¦Î…Å Ø!è 2QfqÀÝß Ãžr4¾™Ÿñll2Ê'ÑyLŸ þù͸pñg 4 ^ù3œCã0Sî’¹ضaÌžùd^É„Ï~IT¿^¶ê0kD ¬Gm8z¢±crxשÃÞºß%ÙFcé}³|u¿Æ‰–‘ÐçhŒ£³êê¦CŸ¥©¯ðÌ$n½Þ³Ž+(2†ú— îÛÐnÜ€ gжpƒ"áÁ‰ðw“ÓïŠÅš×ðà6a#Q@+ÁX°Òƒ66 å“è<¦OÌbøÑ]´N¯Ö—V+aîŒy÷úìBSÁÁ‹‚?†Zõ!Ê[Þö5‰ÀVc…õdðÔëvT'å9ø=Q³&×Ò÷¥ö‚÷ñÆp²îh‘œ¸)xZþœ&¸Â|€¥¨¯ðÌ$n½Þ³|ßkE¸7h)ÿÿ¾=‹Šß;»‡ÃL[’ÙÿÂßM”¼‹‡ Üh3Ê·ª°!ý½ ŠßìºJ˜Ýó~¯ll2Ê'ÑyLŸ ‡QEÁz­\ÄU>äµß_6Àl‹�qùQ¢âö QýzÙªÃ`¬"ø^áÉUšŠžîfJ÷• âüeÔó“YŠ i4„ï#æg\ý¦îEs8ž™?Ð|á(ö•Tà¼î–ÀçDŠúFÖ‘™Ä­/ý÷ît»Ž£®µ6ãA¨ùïm, ™o&áq4 "kŸd·Í‘cóýv•Ö¢µ£ Æ"¢€¦£08VÉ ´K%²v‘\jóO°±É`(ŸDç1}r€Wò¬:TÝlóÇkÀ-Ýä•] óÓ³¢É1¼¸a(¶ê0k„k_ÏMœ8r­Þwðy~‡Ç÷7³c| vÇ ÆWÈy"µ°ö>.3јÆëû7ñ(† ¾õ¾ƒ™Ä­7„ý7ËϯúPÔ7Òrÿ/QèüðtÞ_Üx<tŽ.n<’ÙÿË~7‰ŽV÷2Tä”{+r«›çƒÀÌxÐi]Ø-,`c“ÁP>‚y<Ü[÷¼¹]Lf°5{Ch”Þ â¯È­ÊÌ Ôì×£Ë'nH†´°U‡ÁX#DX×íR#¿êŸ¨9_ŠÝé*¨²«pó»¢PBtÒµ×c†Ã•ZØÇzñoë~X‹3š¡ÚP‹7ºË¯õ¾ƒ™Ä­7ý·°"©ÂS(„#á*úïž÷ ÷› †òÌc¯ÅùÇq^GòœE/çË4(¶xBÐ(ðÞ«Gã`(]ÍBéû •۳ߠA;lÕa0ÖÖE›ŽÁ6: n y¼‚Ô𛇠uxàè祮fNÞŽWja/|ß Æû;`1AN¯8mØŠœÒK¸~^»Ô(yÌ$n½!è?Ê6PÂß=‹áæftG?¿Yd¶»Í¡›q66 å#”QhøÏäk±K4´+yQ}òTHË«aÁV¤&0 ÿ `ñÂVcA¨IÓÁÎëD$2R¹³7 z1" ÏTª.E‡Kž—’¥÷McÀ|€¯ï¨Ô…8UsöP”Jnj1Œõ]öf·®ôe(áï&£cÈ/;Uùœ/gQ–lñf<™uc0Ò ˜ÇÞ‡0µ„û©‘ôDkn¢ ¦{”+yw¿ñçÃn·/çó3SM© Ø (6÷EÝ3®¶ê0k„kcö×h›â敼-Õèô9a:x—ëîÀbþ'Îh PÙö6ô„©…½à}ÁÀP{æ´G °t¸0 tº”¼…Û’•MâØmIê è?^Éû¼¢ ±=^H`ž³ø\6%o5é–ÌŸÉgƒ¡ló˜_Gǧ¯ó—+yàÞa|bÞ€@Ÿà×׉ øþgöûס'Tưه¢›È3ÄÁß‹[ÅAµ¸V„ÕN”›»àAÉf«ƒ±FÈdt[ªQÝ2„Ñ–“Øô‘ÎÙYø\wQUUÚ‡ÈT’ÕÇ-œèïãüx:,”ı¢3°ÊX_á;ØmÉzCÐ9ð¢1Ÿ@V.%ï*ÚFCŸ£1жŠll2)„`s³̆kBQ”<ð?vpJ£à|Ý0i·ñuKGVÑq|‘“…|Íg(6u‹Ο±D0zF Œ IóåŽn?v”ý“ÿ·0¨ØZa«ƒ±F‚š›€Ór%ÅgpÛ91!ýpÝ®]JÜÔÂþ½ïã¦à¶Þ (º&»-YoúoÔ†ÒÏÌpÇ\åþ†Û\ŠRÛ_¡ÏÉíáï&cs)ªkt„>66 å#˜ÇÞÇ0wN„>¢(yÓv˜¤Ù\“ÈÑýP©ò¡ïá%ÛÂßÀïmjªƒš1D&ð ÍŒx2~ @”¿«8Þø:ô)qتÃ`¬‘eš{¯½ &=¹a2¢ÞöëŠ×íR {Áû¯ÑYo€®æ'¸HôÏ€ö¦f8†—rŽE"E}…ï`·%ë Aÿq¿£.o'Êm~$DÂñCöÊ3 ar-å¥Lfÿ ÷,¯ƒ~‰Ï±/ƒ€ù³/ƒ™ll2ÊG0½hÕ9Ø«Ñ@,{£þ/dæï }Ö`oN&´T^!Q¬wbCž 0[Pò†ùÿ³èšÉ„ócÄÙ ³ñ"túëhìì[1íÖZ`«ƒ±Fš1@:‰H•u�_~‘‡íùŸ¡ ¸– Óè¯Û •JœÝYÈ(¶`°¯ûI ˆÜ«è‰aˆ/E}…ï`·%ë aÿÍÀÛxéªl”g`>´÷À ´7^AIæflÜc†;ì%™ýù»ƒu3NÁÌÝÉ4¼¶SÈØa‚+T?66 å#˜ÇË”¼å…~%Ã;‡Ù;jàœ!k?YSsñqæ6¨¶žBKèŠ!6>¸n•„‚Ê-”ÍȪ|4\N$تÃ`¬‘pa͹Í(TmA®þ)Æø :ï+äÆŒÓ„c1Nû¥öKï{§1yu¿ñ޾º \°““wp™¾„ÑùnþÇ"¢¾Âw°Û’õƲþãþBÇ…ÏBy'…E•uÍ Ö²çEdÙïæ<h<¨†*³ÆÆvô ñJèzÚÑh,E¦*{ÌýXÐA“Y7ƒ! ‚y¼Ì\3 Ô›k¦áí¼Ëº`›„CŸ uþé(.( ±àÞ4¢øƒ}ÐÛðøæ©9ÿô˜OáhãhíÎVc„ ë í†}0{æ“tÏ+yƒðÙ/!7Fð©…}øû¸áf|}ö F‰$™lÁÉ“-˜ £só )êùv[²¾ˆÚA3è»0V–@«Ñ@[ò®˜Û1å†<™ýíwsÃí¸Pð_Áï ËòÙhÏ3 e!˜ÇoZÑø<vüß ³ÿ …>09À˜'Àï ƒíB8Ú÷‹6ÚŒ5"ÖïžCŸ]£s^à“” ê?†Zõ!Ê[ÞD=•‘ZØ/½oîE˜ „ÊÖ¯Ð6Ýpéùä±ìì¶d]‘hÿ%³ÿcýnÎ?»ÕˆÊ’ýÐhö£¤ò[˜Ûú—E¥cc“ÁP>‚yìµ¢8ÿ8ÎGü<_ΗiPLµ¹&C8÷8\ÝŠÑŃ@é¼?Vìæ÷4+X/Å m Æ k¢ß_6Àl‹€Cµº·_Ä A,µ°_zß ^[¾@v0LoXø^ëC<uûb )êíì¶dý 迱nt¾\ ª•Ùt> }Hnÿ ÷,Æž=ÃË÷¸«Ì¾|†g¡èºll2ÊG0½høÏäk±K4LÉc,ÃW]¶.øtæg"ªìKèšÏ’6c$*¬¥ö‚÷†ÐÞôÆâ8.’¢¾±ÞÁnKÖ‚þóÞCyÙU4„DD”†k(·J³þî�¼Ö¯Qv퇨õš/?àZÙ׋y'ÙØd0”PFYðyEblr˜j;‹Ï™’Lj7OçèË‹¡Ñ– ÒØ„ž±y—±`£ÁX#a=ÜëÓ±ˆ[0?^Z­p¼‹®II-ì—Þ7‹áGwÑyZ4÷ÖD»"M}}‡ÔmÊAÿQvJ.üÝ,‡#ƒ±Ìc^F½ÇjÞ?_‰JÞ4^ß¿3o.C°U‡ÁX#‘Â>ú†”FŸ¼6¨+„L&ßO6Âw0“¸õ† ÿ¼?Á`îžO›«ôZ`¸+“’w÷;˜{‰h”zËzÍßá.SòŒ”A0Gm(ýÌ wL‹’h¼¥¶¿BŸé—œß‹î‡µ8£ùª°C*†2a«ƒ±FÂÚ{UUµBs­[ç¡Í;zÇ0}Jžõ4J®Ü «ïM\)ÉAvÙ 8F¢ u)ê+|3‰[oþóõÜĉ#WÐÚ×§ýÿ…'Esãݰ;…Éb¹Qx†–Œ¥’ÙÿÂßÍÁ?4„·17wópo‡0Ê;ÉÆ&ƒ¡|ó˜ûuy;QnóD¹Í#~úPžQ“kÉ·˜N9ÀË×þX G“¦âë¸9¥—pý¼~ñŠ¡LتÃ`¬°~7„¿"m©§à¬9]×X賩…ýÒû¢mPgá{ñ >8 ‹;Zºiê+|3‰[oþ«Û¥F~Õ?Qs¾»I‚þì*Üü®(”+O…tíuôDIŸ@Hfÿ w “gBsm66 å#œÇ3ð6Aº*%Æ{hÅxöÆ+(ÉÜŒ{Ìp‡¬¦OLcÀ|`>臺§jîÃî}<˜æ¦&0~¨ÆPlÕa0Öˆ@X{m¨±8ÃLµøâqÂV•ƒ4êòäÍÁ×Û‹W‚L  ·âæ,^Ȱ^@øf·Þ ýW´éX0¹}0G"¯À7üfÁ¡B8úùþvÃÕlÀÉÛÑCL'³ÿ—ÍU@,™k“Ï CÙ,›ÇÜ_è¸ðYèJXTYgБãuÙó4˜„ÇñµgA{Ä�K‡ #þ9¦ä%_œ¯"Ôgðgw/†Elr¶ê0kD ¬cùä¥íÑ1ú!!‚ç%`é}Ä ò$4§Î súœ?Žü]WáœáÀy›pd{6Ž<xµ¸™–¢¾Áwpè©?#†ŸÑ7à„Ýùj>Šf` Žçp Œ ”ff—:þÓ¤é`ç;˜äšL#·´öT›—”º©6T]’þàDø»ÉÒ¡êfC˜épné OÔŠ¦¹6› †ò‰:¹wðÚïÂXY­FmÉW¸bnÇ@”Sºå�ÉÕÖ‡‹åEq¬èÌ¢+Cd¼wQª9‘cñ,Êò÷Íç[æ^áÁ‘ll?Òïââ?lÕa0Öˆ@XóJ‘Îø]v;ì‹¥/GüK›Ó¤öKï#·‡ ÎÙ ÉÏ"(§`˜–UÉ›ë¯Ã®M¨ª­Áù’O‘¾a3²ÿqßíÛüþ† Û 5uGÍ?(u›2Ä…ôŸ1ûk´Mñ› ¢äm©F§Ï ÓÁ#¸\wó?qFS€Ê¶·¡'„$³ÿ…¿›Ã»ÁAü9g^ f¿]>Á5y66 å>¹q'’ÃëSxÈᨯí÷ðÐñ&ê!A1r€›‚ÛzƒE×L^ ´ 9òeŽZú0Ç”<C^Âzì9Úz#“¬|õ.µ°_zßê¢VF"E}É;†¿À¦F‰¯@ÝgØ 1ã·Ærêšà šÁ6ëÎâ¶ûïÐSKHݦ q!ýç¶T£ºe£-'±é##œ³³ð¹î¢ª ª´‘©>3â[2û_ø»ðÞ«Gã`„ùpßO¨Üž Ýú¹%ØØd0”`O¶ |ç×°¹§Àͼ„yŸi9‡qªø 5¾ø«"ðõèj~‚‹Ü>¼°75Ã1Ý?Ÿ!cÝè|¹g‘À4ü"šÈ²U‡ÁX#a½†«w©…ý²÷FájýF¾®zS#:û…f‘HQ_òâë4ïÇèƒ]—TòìÌž…À6$Á¬—ØF:åö7§å<JŠÏà¶s"â&Ü×íZ´…RfD’ÌþþîX>y*¤åÕDÍ)|žÁ`(‘ðy<ëøÚºßy5‹Ñ–Sغ±f·œÇ -%¾øïgýu{¡R©‘³; Å ö5`? z•{=!W†4ì›ûVÜ‹Å[uŒ5"Ök¸z—ZØ ÞçïÅ­â â¿F¾,ªOPÙü*¦p‘¢¾ä³N#²+Ú0Rò¶TuÀçªÅÁƒP×Ð�󵯡ÙQ…¶If—j,ë¿ ¯KLzrhbD½íWxýËû}dö¿ðwóJÞÝo`üùßaæÙ|qþ±õcc“ÁP>áóx®ÿT?Æ}P½[Ë›14s¬ÄÑÆ¡ˆªyè“ïà4æ#/¨¬¾C_].Ø'‚_w™¾„Ñi¡Ä…h{°…¢Ú‰rs׊kÝja«ƒ±FÂ:ÖÕû ž—€¥÷ð¦±hô°9<ðMæàé†ùÈi4¾‘Þnà;°œ¸ˆ–á!´”mÇGƘå&à²V£@½i µÖoè™p¤nS†¸úà1@:¹Ë:€/¿ÈÃöüÏPP\KA ‘<üß«7qbc“ÁP>Ñe‰¤YÖáI¸[LÐé.£ÞþV!Jÿg 7ãë³Ox•ÿ0Ù‚“'[0F§®8ªé9#qfzlË(±a!H×|¹£Ûeÿ ízè:†â­: ÆY.¬g0îj…Ùx:ýu4vö 7G µ°_z¹!;†ºåá{=æ1…ºõ]xçë¥úŠ+ïÀ¹¡Ÿuáö·íˆæñ u›2Ä%¼ÿ8·…ª-ÈÕ?Å?v=Š,nÌ8M8f–;…Bü&Nll2Êgù<À7ò6tXb¿*úäÀ4Ü?C†*ÊÒÖ¯¢ZÌ0D ð ÍŒx2,<TŸu\ÅñÆ×¡O‰ÃVc…µ®[%‚r3²*ÁK‰°_zßßp›+PÝŒ(¨÷P‘] s”€&)êíœöûס'~ŽÆ°Ù‡ËM@ê6eˆKxÿO:7ì[ôÅœWòá³_B® þ.Âß¿‰› †òYÍ<^ɯŠ>90ƒ×–/¼= »U²>ÄS·/á›$Ft‚‘YnÃ|§sÕ‘Y×[uŒ5.¬¹7(þ`ô6<¾ù)Êùß Ç|ŠÛ|ÁûüNÔi·‡Ò(ìE~f:ÿýÍÈÖ=ŤŒ Tä;8_7LZ’:!YEÇñENò5Ÿ¡˜¥PHIý÷î9ôÙ…ó‹xHJ51ÕU-%$™ý¿llÆiâÄÆ&ƒ¡|óx ~U‚ç©`ÃMçq¤öÿkÿÿŸ?`®x±Lš/4Ùâ…6M£ù„Æ ß¨Ù†±kø y1ímSÔhÓj›uüØÂ«-¸-Y%þ['XÑ–ZhW݈«³Ûá£Ä÷XÄq¬ ¿2°ƒ œÇwÊÀ€0 3çÌÜoÉs×aæôœ3ÏsóüåQÏÄJuô¶jŽ{ň¼Ç̬ñàªÄibeò|¢õcßêG³Ò,[“ß϶©ñT™vl)[¼µ¢öÆX·¸é$c{£ßÃlqÜ$‡#_e×»ÂûÐìfZ*·¿OÍ•ûc¶8&{Ÿ"±¢Ÿ¡ÿŠþöi¹\žG yË”“³^¥Ç®«3­ãѯ=÷.NÑÀŽ&~ŽãWe½z`º™‚ͺl·ºcÆüÄ33k<¸ê�q2+ÁqFÛ×z{ÿEu?½ù ß öÞÒÙÒ7ôf ÆÅ2ß÷KÆöF¿Ç€¼e«”µÎ¥ö±8ò:ÃÿOkI:šÍñKUW¨èמ{'ÎMÀþ¢>ÇqŒ«²^=y5{Uüʼn uÙ }Qœ®ßŽËÛ•¨¸‰â™™5\u€8EWÖùª·héø2 ù+´$ü{Gî'ºÞŸü™�c™ïû%c{£ßÃР·\¹¯WªyجòÌ·Z¯­X&Ç4ß0&{Ÿ"±¢ŽŸÅºBE¿¶ÙÅéí<1û.N ¹m�’#êsÜyQ§.ý¦ÐÈÄJ ¨Û551×Ê4Y¯0ìèУ¨ÍQàÆ—Z÷ÒÛr·± ú‚ˆcfÖxpÕâ4¥²6ÔÞøÊv© °X{*ÎëfÏøÞS%»²Ÿïû%c{§¾ÇüÇõ©ókyzúå-[­œü=áJ0|a<c¢dïS$ÖÄãgµ®Pѯ=÷.Næï�Ø[ÔçØïVÁÄÏþÓ’šqÉRç¥rmÝqbÚåj1ffM0®:@œæ[Y'»²·ÃöÎî=ò,ë¿>Y²÷)Ë<~wïEº;Z¬+Tôk›]œœÚwâô„�zZ'›µfš.Nœ›€ýE}Žýߪ¤¸\® u€ë‹mZ™»CǼ6yHœm@œæ[Y'»²·ÃöF¿‡¡ ï¤Š–¿0öóÉűr—\“–S0û2ß–‰ƒÎ‘I]¡f¶Ç?úµ Þ½«ß&oÚð Un*Óõ�¯�é(ês| öGÑ_è¯*×­Ð&÷]ÅZaŽz�ÉÄÙÄi¾•u²+{;loô{˜¯äiyñç:ýô›R³—³ _%Uß„ÿ]¯æÞgÝI’½O‘Xæñ‹ ys´Ç?úµCò{Dî_;ä÷ûŸ–vßwÚ·òu&ÒTÔç¸ó²j®öDµØß+7üœÿûŸÑ?G=€dâlâ4ßÊ:Ù•½¶×|PW›î0§Ð¯×ÁC?«3êjå«¶“qOéÆ<~¶ y1Çä9´dMeÌI¢ÿ€E}ŽÓbLÞ¨·né^¬fǧ†õ éÖ¤ë0æ%Тæ{“'µIü~æªÄi¾•u²+{;l¯ù~wiTKˆ i¶C¿“½O‘Xæñ³MÈ;ó™*~þ§<ϳâmQפ?Çqnöõ9öŸÓ¾}G'ô2 —“T¸f§Æä™ã‹w©`÷Çr:Ó”T’¿QÍ‘¿Á¼ùÏh[Á.˜n?÷ôýö\½¼ý¼üó}\u€8Í·²Nveo‡í5ßcrÈ›‹dïS$–yüìò …úzÕ×ãÓEWeøâ|HÇêäñƼ±3qnöõ9ìPëo“gÐPså{r^ï‰<Žf½zÀì•ð–ròÞT¹üÓ´e£Þq·Ägˆ8øÝ*_r+Ö~&ä©5ßÊ:Ù•½¶×|B^æ2Ÿ=Bž9öægí]¹8üól­Èß ‚ yÊYô{í©¿sû97û‹úûëTénŽ—ëooVݾ<-™¦³^=0¢žk×t›•’«§I·§Îžh\u€8Í·²Nveo‡í5߃—¹Ìãg”¯*_ŽÕ‡téië¡Po“ª·–ªöáÔÿÎMÀþ¢>ÇÓÉ[ò¦*¼ý‘'E‹ú{K˜fLžñ›ššb+DĘ´çy éǃ«§ùVÖÉ®ìí°½æ{ò2—yü®6MËê–ïâת0Ç+TWݤ%3&[ÈãýÚƒj®X§u®»“.ÒÃjw팜¿#èíX97û‹úûÏ‡ë¥ º>q\®§I·»‚Ó†#ëÕÓŒÉ;ðžò×Vó°!#üß¹ýå\mÿþ¡/Q☴'\u€8Í·²žïßÏ•¶×|B^æŠ:~Æ]Üû{9Ì+W¼¡‚‚7•—“­•{.ÈŠ} \ÈãýÚ# x?×ÚõeúñúøÍÝu5ÖQÉë[Tñ÷káÇWäÞûÑÓV=ÎMÀþ¢>Ç¡~õÌ­Ÿ£õê™Æäí–»uˆ·☴'\u€8Í·²Nveo‡í5߃—¹&¿Q_•^w¼!ç¥{ÏZïBݺY]¢íµ1/‚ yü£_{X÷Ý[µ(ü3óçÓ—µ¶úöØdæc�ö6åsl Êï9¯ª2³¬R®†fuMó%”Ézõ�còR"ŽI{âÁUˆÓ|+ëdWövØ^ó=‚­ÿVS×L£²†tÿÜ ]`¼´3ñø4WèÕu.µOº_2Ú]*ŒŒÛ3úÔ7á†j!ÿ”×CåÕ1qÒ…)庴äé"êslôéfÕfe‡–åÈQÞ† Ê_±TÙ]º3;èY¯QosýXKRMc»†Í^ ­WT[󣼓×qCÂÄ1iO<¸ê�qšoeìÊÞÛ;Ó{A¿š~8ª ^‘#k‹Üþ©Õ`²÷)kâñ3•¯Ý¤²¯FºC†Kã-ÉWaÅc¯¹?Ö® ­z yü§¾¶¡Phö_snö7ñs<z§Zk/*oÿµF¾Ì‘1 ¶š=z'½ â3ªþ†=Zµç{µG4|Ç¥Ù/)¯¸DE…åº`Ñ„Ǥ=ñàªÄi¾•õ|ÿ~®ì°½SßcX½w®È]¾]yKáß/UÞ¶Otä@™Îòê¿ÿý¯öïßy”Ÿqß­‹b\'ÇÚj݉܇˜JôkO3#]”a=hº¥ÎÈÞBn€ä˜ø9ñ–iYÖF¹Ú£»ÝMìm0™õêyËvªºu(¼áÕ°ã-*<¥¶Ðã “H!á☴'\u€8Í·²Nveo‡í~!µº6kIøgŽœõÚ]yîébÓ“»éKö>M'fwsÿù|¾ÈO’/úø=Ò¥C_êRÇ„î,±JWàéÍÔBÿèמfFº¨ò‘Jò7ª¢y`ì/87û‹úûT½þpê‹ü Ÿk—Vçä¨È6-yCºS½Sû|j©ÿX¹ŽÈìŽÁÕ¼³7ær0H�sÒž¾Î9Í®:@œæ[Y'»²·ÃöNypEØî½ £¾¥Âíår_ñ©+8JÈK0³oùòåcûï½÷Þ‹ü4ù¢Ž_ E7ï(ºCdtëØd yü£_{¦é&–zÇÝÂÄ+@šˆþ õÜÐÙò¿èPÝpíd†¼÷µ½üï)™8^F IU…ËÂÛ¶X+÷þ¬Î¡ÿ¨áð!9'åéaF–ÇìÑñàªÄi¾•u²+{;lïôïa.4Ý¢+îríØ²UïnùP5t×L˜ñV¼ñ’ªÖ¼¨ãç?£m»t`ºÖ1㞾ߞ«—·Ÿ—?rM\ÈãýÚOf¤ó tÈsîˆÊfñMìBn€äˆúDZ µeëP@]zEŒ]sƒC1»œbþâ™=:\u€8Í·²Nveo‡íÕ{Œ l?Îìš 2±o¼¤ª5/êøùÝ*ÌÉÓ†éZÇRò§áÓo¿³µrË{úSÞJåüQEUM ĸB/ä¶HŽÉuÔ\´Žú{K Ès°T®¶`ä1)žÙ£ãÁUˆÓ|+ëdWövØÞ)ﺯÆcårV~'_ êB~yÎ×O;µs²÷i:˜ÜŠ7^RÑšg¾ïS=Mj¼=·Œ¨¿O°è×~¬6×&9ù*»Þ¾ ‡oˆœ¥rûûÔ\¹?|cô8ò¼grÛ�$GÔçØ_«=¥U:m.d=^N:UTäTÍ4 Z[¯0ôTÑòƶmrq¬Ü%׌ËtñÌ®:@œÌ p>æû÷se‡í~s@ø†ðtŽòÞX©åEnÝm9­MÙ9VÖÍWdïS»‹ÕŠ7^RÑšg¾ïSë ýÚæŒt«”õô›Øñ×þÿ¢˜3Ò-ä¶HލÏñ´ ZïPÙ4Óà[¯0ë²<-/þ<:¬ºËY¯’ªoÂÿ®Ws/có)žÙ£ãÁUˆ“ùœùþý\Ùa{£ßcPÍùZSýkøFP-Õ¥:86‹Ù |UVEóà“§Mì}jwfÈ3[ìÆ‹¹ÿ&>N¶¨ãg±®Pѯ>#½åÊ}½RÍc‹›!oµ^[±LŽ¥»ÕÐMWb E}Žc.h}Cµ¥¹Ó.hm½zÀPÈ_¯ƒ‡~ž4¡U8ü•¬ÚÃ"sŸ=:\u€8Í·²Nveo‡íüFg½>øè'u›ŸþíÚÕ þP§i-Y©ÞQïo±®PS_{HþÆãúÔùµ<=ýò–­VNþ^jîKú¶HŽè:jš/¢«å¼ÞyR´¨¿·#š4“1šaÎî9¯ª2sR± «û·üÁÄ.>ÏUˆÓ|+ëdWövØÞè÷RÛÙwµÜã"ºô}]êŸZFÿ=æ*Õû/êý-ÖÊ|íPW›î™cCãÀ¹ Ø_ÔçØÿʪ~~6¦Ê,WNjïÞóºo£%FŸnVmV¶¹„ÂÊÍúóŸÖèåü?j]ÑQÝŒó g§ùVÖÉ®ìí°½Ñï1¬ûî?)·ä¯ÏZrÌR󃮶h-Y�©ÞQïo±®PækûÝ¥1[gƒs°¿¨ÏqÌ/¢†ÔZ]d£ÅБ F›Kë/juÙUõ„ …<eÚânÓps•ÞuµÆ<wâÁÙÄi¾•u²+{;loô{Œ¨óüm?êQÏÄoô¶jŽ{5uD^ò÷iºIõþ‹z‹u…2_›d¶¨Ïq¬–¼ëõª*zYËʼ1»?Z³)ÐîÕOg©bl=ÒrUú^—›ý̪¹@F¼eZ–µQ®ö'_< ywð|¢ÕÓ|‰®:@œæ[Y'»²·ÃöF¿G(|S½eìgS “[,ˆT│÷·XW(óµ y@f‹®£båX±Sg[c} iµzÀœt努JÖhɤÿ†'å-/tªÖ{œ1æað_*Ë]¯Šæ±‡!S9¯½¦Çô‹Åƒ«§ùVÖóýû¹²ÃöF¿G8äÕìUñ'&t×<¡/Šó”[r\Þ®©ßu%{Ÿ¦›T│÷·XW(óµ y@f‹úû¿S¹«)ºK¹ÿ‘3,`mzàÉúx[×lÑ“?ÊãkÓƒÞàÓzÕöêA»Ožº£ú°p£öÖßKXëLOöß>-—ËóH!o™rrÖ«ô”w¬ûf¢pÕâ4ßÊ:Ù•½¶7ú=¡Ž=ŠªïF¸ñ¥Ö½ô¶ÜmSDOö>M7©ÞQïo±®Pækò€Ìf~Žk=‘‰ŸŒ…F&ß§n-Ϲ0úÿ©ò]Çf7ÉGè‘~©*××wb·N"?«ê\Û”àlt7¨òL{äÑüqÕâ4ßÊ:Ù•½¶÷ùïRç¥rmÝq"æÅ)Ùû4ݤzÿE½¿ÅºB™¯MÈ2›ù9Ž9V8ª¤f-ÏÙ34|ϧ_g=‹£¡Ðƒëçæî˜ÿMˆƒ¿F[–¯Õ¶£ÿŽ´Ü «Ç{BÛVüNnBr󭬓]ÙÛa{í¶OÓMª÷_Ôû[¬+”ùÚ„< ³™Ÿã}ûŽ>>pbŸò_*”óäé§C NU¢ÜÜ:–‚µ<ã3¢žk×t{Ƽ7 æŠ¿Èí§Ãf¨ýÑ`8Ø}­œÇõí—ok¹ãwZ÷ÁÇúâ‚?ò¤ùãªÄi¾•u²+{;l¯ÝöiºIõþ‹zÿ˜]¡f¶Ûo¾v°õßj «+±)¤®¦«5Æ”tœ›€ý™ŸãöGOÂΈ÷sVÿ:)ÌuëRéoÉ›ÈûþJ¾úúiPRNPAv!/‘"×·ÿ²Ê –…Ï‹¥*¨º¡ÀÜ.yÏÅUˆÓ|+ëdWövØ^»íÓt“êýgåãýÚæÑA9¿»=fÐsIÕÅÿ#gÝu5·÷G·àÜìoâçxÔ÷7mØEýnÌ€W•ë²S²–g|fy§«dåâð6¿ åE'åc=…ÄñתtËfå-Y¤ì‚ÏtÑwCu÷«âü·ª½ÚyÒüqÕâ4ßÊ:Ù•½¶×nû4ݤzÿYùøG¿ö Ë{<-Kµz½ü‘î¥æÏ�Ø[ÔçØèÒ•ýkµ<ÿís:u ô-­ÎyAYÙ[Tí‹Ý­Ûzõ@ìîšFð®êöü^ެe*(¿ü´C‚˜cίª¨êŸêß·FŸnVýIEŒÉRo¾•u²+{;l¯ÝöiºIõþ³òñ~ípÈ;sXÕ7Ú&lQ]évUyï…ÿÝ&_]¹>ªóuÛâÜìoÊçØèWëOÇä,)RAÁ&ï;ªŸZûcvÕ4Y¿0꼪ÊÂeÊrü^¥µ·Þ…aæ˜s÷Ý©­½ÃmòÞê‹<˜?®:@œæ[Y'»²·ÃöÚmŸ¦›Tï?+ÿè×~¬–}%ú[Ϥ¯¿G½Ú™õ}7öóau_úH¹‘n[œ›€ýY¹Žš¿|níX¹XŽïÉÕÌ"è &Ž1çñàªÄÉn•½¶×nû4ݤzÿYùøG¿ö Ý5—îVC÷ˆFïTk­c¹¶Ñ’¤ù~Ž­[ Éßð­#ö¹®ø£×¡5u¨ƒ1y¶ÃUˆ“Ý*{;l¯ÝöiºIõþ³òñ~ms²‚½*þâÄ„‰ Nè‹â<å–—ל3ä—çò³®Nœ›€ýY¹ŽŠ[葼U›•åPváa]¹Ó1©z‡n¹¾Ôf×´®:@œìVÙÛa{í¶OÓMª÷Ÿ•ôkÇZBaD_jÝKoËÝý-¸‰s°?+×Qñ–¿î#¨`Úò¦òrÞb âªÄÉn•½¶×nû4ݤzÿYùø?ÿµCê¼T®­;Nèf`êÊœ›€ýY¹ŽZ8††kt–g;\u€8Ù­²·ÃöÚmŸ¦›Tï?+ÿ˜¯ê–ïâתp:UVU«Æ;=SgK‹àÜìÏÊuÔ¼™õÙ¥U•9åt–«Êý³šüƒO&_ ‰U쇫'»UövØ^»íÓt“êýgåã?嵃·t²èU9Â?77V¿×žú{1ƒÞBn€ä˜ïçØšõ€¡ÿg9×ýîY]6^«´Ã}‹elŠ«§ùVÖóýû¹²ÃöÚmŸ¦›Tï?+ÿè×éaí6½TP¦:o»c_q*ØÕ$×ö½ª}85æqnögå:*nÁ&U¬~QŽå…úð+·¯Ë㹮Ʒ¾ú°PË/k{Ýý'-z°®:@œìVÙÛa{í¶OÓMª÷Ÿ•ôkäq¾«êÖɬ «ÝµSNO òøÎMÀþ¬\GÅgTý »ôÂò÷ÕÐù8ò³‰Fl«Ñ¶U‡ä$æÙ W Nv«ìí°½vÛ§é&ÕûÏÊÇ?úµ«ÍUªý—Nèš9¬^ß·*Í-’«mêÍç&`V®£â3 oÙ´ÞÕ:CK] üœíªhŒ<†]pÕâd·ÊÞÛk·}šnR½ÿ¬|ü§¼v°YÕ…/+'ïMlPþŠìðs+×yUý1î–87û³r³WBAÌÞÏ„äw—>ç9°"®:@œìVÙÛa{í¶OÓMª÷Ÿ•¬×6‚mj<U¦[ UXü¾*jo¨gš)è87û³rŸu×}  ]‘DZôªq_¬îé°:®:@œìVÙÛa{í¶OÓMª÷Ÿ•ôk¨óÇóº:0y1z[5ǽŠÕ©‰s°?+×Qqü—ÊwV[¬/¨Œµ7üEy«ªä›TÝÁú¸ê�q²[eo‡íµÛ>M7©ÞV>þѯmv_Ú2ö³)eén5t³:Žæû9¶f=ðd …ßիmxBÐþ꾣ť:à<)OÏÔz ÖÆUˆÓÓ›ºy”dŠõþs- m¾ï‘ŒmLg©ÞV>þѯy5«ôè7r»Ý‘rZ'Å*rÖÈÛÅ @:²r5_F($b\záª,»ÝÔYa{ÓùŠç³òñ~mCƒwïê·É½›†o¨ò¾7ÆT㜛€ý™Ÿãù{i 0®éFìëW0öPcXW`ا2 Û;ßm°Û>G4+ÿè×Éÿí¹íßïZÚÿÏY•¾œË:y@†J—Ïùèj­]º]g9£mÙkY>Á¦¸ê� Än•½¶w¾ÛÀ´½YùøG¿öôcò+éz`ê æï�¤·tøœÁ^=hoRí¾ÚT°N«JÏèf{—ÓÌ ëâª,»UöVØÞùn7ÒöfåãýÚáw¦RUÿ¸.Ç)×uÅõ±öÖ¶…;ç&þìÿ9ÊW•?öß±('G¿ËZªœœÅáÇ/jmõm1Á¦½pÕˆÝ*{+lï|·ÁþØÌfåãýÚÓŒÉ3~UõÞUíC&^2Q:|Χ´äíøFÞ¶ßÔ$âÙ W`Ø­²·ÂöÎw¸‘¶7+ÿè׎ՒçÑõ¿¥¢¥¿W™w ò¼g87ô—.Ÿó‘æ ½šÍ˜<»ãª,»UöVØÞùn7ÒöfåãýÚÓÉ[¬ÛϨuâZSÑ ¥Íçܪ¯/Èìš6ÇUX v«ì­°½óÝn¤' uËwñkU8*«ªU㞘ãÅf”ˆ×˜%+óµC]mº0W’2[ò¾”ëVôìšþ®À´û†sHöøœzÜüƒÎø¦Î›¹Xú%}}ùAø_°®:À±ÛM¶w¾ÛÀôÁ[:Yôªá}bî—±âø½öÔß›}HKÄkÌÁ|ß|ÿ~&ækûÝ¥O—G˜ëÂÁ ¹m�¬Á6ŸóP›Î}äÔ雞S—«×÷­öl­ÒMšól‡«°@ìvSg…íï6p#=.¤‡µÛôRA™ê¼í‘©¯Gìj’kûÞ˜ƒL•ˆ×˜+óµ'†¼¹âÜÒŸ>çFà†\ÛÖ*wË^}Q}Zµ WžÎÜØpN§«?Óž-«´|Ý'ºèŠüì„«°@ìvSg…íï6ØmŸ/œ€<ÎwUÝ:ùÂ<¬v×ÎY•D¼ÆÜXùø›¯MÈ0Û}ÎÍîø U*É[:¶íÏŠCKVn•Ó푟Y5m‹«°@ìVÙ[a{ç» vÛç ç±Ú\¥Úéá„®8OºÝ”æÉÕö8ò³™$â5æÆÊÇß|mB€™Ø÷sR ó_ªú¿³õR‰[·îõ0ÙJàª,»UöVØÞùn7Ò›U]ø²ròÞTAÁå¯ÈïŸÅÊu^Uÿl/Þ‰x9°òñ7_›`&öþœ·Ë]°DKœž _ìÁθê� Än•½¶w¾ÛÀt4#ئÆSeÚ±¥P…Åï«¢ö†zÆÆÖÍ^¬×è ä&ÀÊÇß|mB€™ØûsNÈK7\u€b·ÊÞ Û;ßmàFzœ¡`G‡MÉs!u5ý[­óê‡ç`©\mÁÈãıòñ7_›`&öþœòÒ W`Ø­²·ÂöÎw¸‘’¿æ œßÏ–6^.©ºø䬻®æöþç\ÈÃAÑwREË_Û¯“‹cå.¹< ·a¾î|Ì÷ïgb¾v°õßjê2÷Ú¨·néÞäùŒßÔÔô0æZR ¹m�¬ÁÞŸó!uù¼jj°^šàª,»UöVØÞùn7ÒãÂ!ϽelL_–jõþzù§í¾9 oYž–®Ón·ÜOËq9 òURõMøßõjîËjq3‹½s+ %úµÍ½K»?–Óé|V¼§üµ‡Õ<lÈðŸ×ö—sµýû{c7L ¹m�¬Á¶ŸóÇ^Uî>'ÿäËÁà¿TþþwzHê³%®:À±[eo…íï6p#=.BÎVõ6ùýþ ¥Eu¥ÛUå½þw›|uåú¨Î?Í·¶†Bþz<ô³:£žå«¶3qán¶Ry|£ßÛ ÑoE&¤)˜TvËÝ:DÈ2}?çƒòUíR¹wbwts­Ô÷µ«!vïXW`Ø­²·ÂöÎw¸‘7MwBå;uT—zÌ€6¬îK)wÚñ#ê¼pF—º‡ÂÿšNP·kjäLÎ-@*oô{¨çÚ5ÝžCÎåÜÒŸ?çÆÃszgW½ºÇ«óáfUm®÷1Ï®¸ê� Än•½¶×܆ùÌÎèj­u,×¶i[òfÓåÓ,¯hG’¾é5ß/U¦¾·¡P¯O]•r:©âX<þÁi÷C*·@rØûsÞ'ÏÁ}rßÿÛРçs½ënKJÝŽ…ÁUX v«ìí°½Ü('PÈ/ÏåÛ L{7Ç9µïÄé ãñNë¤s³Ö”ž0N¯Fç½òŒÎŸµwåâðϳµ"ƒ 6ä)gÑïµ§þ^Ì–QÎ] ýÙûsnhØwD›ËÑc£Cµï|¤†îäwËGâpÕˆÝ*{;l/7Êóe(š¦{æd†ïÞÕo“ÓÛð Un*ÓõÀ”¾  .•Ç?ú½ƒòUå˱ú.=m½3[öšT½µTµ§îaÎ] ýÙþs>îöë»|ù$ìE~ {âª,»UövØ^n”çk.kÜ…äÿö˜jïNœ¸%\Z¾Óž—sã^/n>Ryü£ß{PÍë´Îu7ðÆ «Ýµ3²oF4Ðûl™ Î] ýÙÿsnvÓ,Óš—ßtÛ„qÕˆÝ*{;l/7ʳ•ˆ5çÐ’5•I›le"óýS%ú½Gð~®µëËôãõñ5¯«±þˆJ^ß¢Š¿_ ?¾"÷Þž¶ê¥rÛ$GZ|·[tîø?Õ“ü* ÆUX v«ìí°½Ü(ÏV"Ö¸ ‡¼3Ÿ©âçFBL¤4ÿG=ÁäwÕ4¥òøG¿÷°î»·jQøgæÏ§//jmõm™{Ë| ½¥Ïç|H÷ÏÐ…,•ƒÄáª,»UövØ^n”g+kÜ…_£¯OÿvÈsîˆÊÌž+Ž«î¹-€ '•ÇÊ{÷_Ö¡ò‹ê˜Ø•uJy ®�-y@¦°ûçÜúÕôÃQ}XðŠY[äöÏn7¬‰«°@ìVÙÛa{¹Qž­Ä¬qgšTU¸,¼ß³µrË{úSÞJåüQEUM3ÌʹpRyü§¾w8‡fÿ-7ç.þìù9Vï+r—oWÞGø¿a©ò¶}¢#Êt†gk\u€b·ÊÞÛËòl%b»Çjsm’ѯ²ë]áW Èã,•Ûß§æÊýrµ%Þ5s›Se¾ïÊmöûœ©ÕµYKÂÛíÈY¯Ý•çž®÷i ô©/”¢nH®:À±[eo‡íåFy¶±Æ9®o•²Ö¹Ô>ö„ñ×þÿ¢ Ÿ]sî8wôgËÏy¨_íÞ :úá[*Ü^.÷Ÿº‚£„¼4ÀUX v«ìí°½Ü(ÏV"Ö¸ ¿†·\¹¯WªyØ|!3ä­Ök+–ɱtwJÉMåñŸï{sîéç—_~Ñ{ï½÷´˜ŸóñÿïÿþoäYva®õÙ¢+îríØ²UïnùP5t×´5®:À±ÛM¶—åÙJÔwCò7קίåéé—·lµrò÷êTsß4­ +•Ǿï͹ ¤Ÿÿþ÷¿Z¾|ùØç{rùÇ?þy– j«9Îìš6ÇUX f%o'vØ^»íÓÔIÄwO&o¹Ü?é"?z[5ǽŒ<L¦Tÿù¾w*·ÀÂ1»¾?«cŸ”5kÖD~k¡ûj<V.gåwòÂõ}È/Ïùzy;‡"O€]qÕˆÝnêì°½vÛ§©“ˆ5îf˜¼…îšs–Êm°pbµæÙ§oHwª7ÈáÈQÞ+µ¼È­»-§µ)Û!Çêú™ªõr\u€b·›:;l¯Ýöiê$b;sò–½*þâDd’³œÐÅyÊ-9.oWòÇj¤òø›ï=ß =MlͳU+žÕ\‘¯5Õ¿š£°ÕR]ªƒž¾±Ÿûªþ¬ŠæTôÙ@¢pÕˆÝnêì°½Ü(ÏÞü׸3ìèУ¨çŽ(pãK­{ém¹Û’ß•ÇêÇŸóÈL[óì6Ïè¬×ý¤n³®ïoЮ] êuª1E³(#q¸" Än7|vØ^n¢gk¡Ö¸ ©óR¹¶î8¡›æØ$³úñçü2—Ùšg¯V<ÓÚξ«åŽ©=²–¾¯Ký³íÞ+âŠ$ÈLS)ïß¿?ò,ë0/HÓm¯ù;+2·³±€kÜ¥pÖ5«ÎO�ö2¬ûî?)·ä¯c×ý§¥æ]m ¤de$W$ AfšJÙŠ¡ÉçóÅÜV³˜¿³"sÛ0‰^ãÎP(Ð&ϹÃÚ¿\ެ-áÀ˜Ycòfƒó€½Œ¨óüm?êQÏÄD—ÂY”‘8\‘€2ÃÜxP/fð3 ·àM,æÏ¬ÊÜ>ÌVÖ¸3‚êjþ»N:·j凲¯¨àÿêDùW´äÅÀù À^¬7‹2‡+@±Zó¬ØŠ7.VkžU[ñLæö!YFÔ}ñC½lŽÕÈÙ$§ûŠîôG~R(ýx¬~ü9?Ø‹õfQFâpElbkž•[ñÆMlͳr+ž‰›èd3êõ©¡ê}—Vé‡&¿‚¡>µ¸¾ÔºkNÁù À^¬7‹2‡+`[ó¬ÜŠ7nbkž•[ñLÜD§Jø¢ß|\E9‹µdÉâðq`L^,œŸ�ì/µ³(#q¸" À wvhÅg¶àY½ÏÄMtrÁ‡j¾xJeÛVkIxß;–êãßëʹïtµ‡1y“q~°—õ6×ݳÔ4¶kØüB¯õŠjk~”·“V<»ãŠÀ6¸‰ž¯!Ý?wb–“¦ Ëßp@ù9/(Ë‘«m'½êIÅ@¼ y�,#Тæ{“ƒÐ°4ÝRgj«Ê9UíÚó½Ú‚#¾ãÒÆì—”W\¢¢Âr]°NžqE`ÜDÇÇúÕôÃQ}XðÊÜ—?õ«Ý{AG÷mÓÆâtô‡_ÔÒøwý“–¼)8? â?£m»tÀé”óiùH%ùUÑ<®xïéûí¹zyûyù-úÌ5Uwªº5V‡jØñŠžR[è±Ú];ç·¦*RŽ+�Ûà&z.†Õ{çŠÜåÛ•g.µTyÛ>Ñ‘eqOšò¤ûæ í[÷.còbàü2ˆß­Âœ<m((PATÙ¨wÜ-µEÈÒêÚßàSKýÇÊu¼¢ Ãu}‹jÞ٫ڇɯç‘8\‘�Ø7ѳ5¤V׿'ãèrÖkwå9yüƒcëã}ê›U·ËQnÝҽɽuŒßä½àQ{0ùw-„<�–ÑÓ¤ÆÛÁÈû2Mª*\®¿kåÞŸÕ9ô5>$§ó¤<)è±ÄáŠÀ6¸‰žƒñn–¾¥Âíår_ñ©+8:‡g®Ÿ´K»?žÐ)\¼§üµ‡Õ<lÈðŸ×ö—sµýû{³_`}y�,£ó²j®öLªû‚º]S#ï`ò¿›—P@]]íò¸ÊõYC›‰—¸"° n¢ãa®u×¢+îríØ²UïnùP5³êjyî·”“÷椮HfÙ-wë!oÎO ƒøÝ*æÍÏ}t‰tyŒ<Í>Úå.X¢%NO¸öG:àŠÀ6¸‰ž'c@m5Çg9»æˆz®]Óm õÖ±úñçü2ˆÿœöí;:¶üÀÓrò€ ×ìÔ1o'!)Ç €mp=¡ûj<V.gåwò™ Ú†üòœ¯ŸÃÚGÖ[?ÉjÇßÜ7ãkLšÅܾñ›¿Æ;ÔúÛpäÁ¸5W¾'çõžÈc;!ä¥D°Õz9ÓO¨ÑÔdí.&„¼Ù2gLÛ ‡#Gyo¬Ôò"·î¶œÖ¦l‡«ëæ¬&M±ÞúIV;þ>Ÿol›bów�Ò˜¿N•îfùýþg¥½Yuûòl”†Ôåóª©=`ÃVHĶZ/ÇzjÌdÍš51o¢ÍòÃ?Dž…hƒj®Èךê_ÃÇoP-Õ¥:èéû¹¯êÏásrðÉÓf”úõ“Ìã븛eÿþý‘g¥Öx ÞÄbþ @š›nLÞ’7Uáí<É&{U¹ûÜÔû“Á©üýïôÔgK„< lµ^Žõ&Ô˜É?þñ©ÑpY¾|¹þûßÿFž…ÉŒÎz}ðÑOê6`ƒvíjP¨S΢Y´Ô¯Ÿd_ó8Ç:þVi)‹ÕšG+Â×IgÅ]÷xäyZšt»+hÖ0ó À]*÷N¼6„ô°ö}í²å$20ò€D°Õz9Ö›Pãybµæ1æi&Cj;û®–;¢÷ÙXYú¾.õÏ®«¥ÖO2óäÿ«µ”Mlͣȡ~õĨCC Îj™k1žÓ;»êŸ|1hnVÕæ yñìŠ$‚­ÖËQççuu`ÒþèmÕ÷j6ù’mrk­xÏ3¬ûî?)·ä¯c!éi©ùAWÛæ6ÞÂÜÒ¹J3Ø9å¬8®:O‡’¹z¬Ö<«µ”MlÍ£Èl!O¹Š\-6“×'ÏÁ}rß7'“14èù\ïºÛhų1B¶Z/Ç쮹%ƶ†ËÒÝjè¶fßÄÖ<Zñž'äÏÐö£õL<ùæ䟵äekå–÷ô§¼•Ê/ø£ŠªšHâI=±5Ϫ-eævÑŠdà-,zUŽHÝU«´Ãu]þ –74ì;¢Íå¿è±Ñ¡Úw>²ìý�f‡$‚­ÖË1'^qj߉Ó¶÷´N:7kMÉqy»¬ùýãxk­x³‘ˆ ÿXm®Mr8òUv½+üŠyœ¥rûûÔ\¹_®¶Ç‘ç-¼‰­y´”°‚o™–-/VÅé ×ýpùƹI¯õ¢¨ÑÍÝöj  wûõÝ?¾|ö"?†=ò€D°Õz9†ïÞÕo“¯<Ã7T¹©,%SãÏ–Ùšg^Dñ<fß«â/NL¸ù8¡/Šó”;ë oή¹JYë\j;WÆC^gøÿg;yKâ˜ÿ ´”°ŒÐ=Õ¬ÐOÑõéˆ÷°Þ«½yd7f7Í2­yùÝH·MØ!H[­—�ß‘û׎¨ím÷}§}+_OúÍ;‚¡`G‡Eùn|©u/½-wÛl3_ì½åÊ}½rlY'!oµ^[±L w뀤1F±U[Ýó ·èÜñFwõ‡-ò€D°Õz9ÓuåshÉšJ NƒÄ©óR¹¶î8¡›Ù´!ùëSç×òôôË[¶Z9ù{uª¹Ï^]��s0¤ûçNèB'_æÙ!H„éÖËyÐkÁ©”Ã!ïÌgªøùŸ¶5\¼¿êAï ÅZ�@2A¿š~8ª ^‘#k‹Ü~îìŒ$Â4ëåXs*eC¡¾> LÉžy–ÊÕf—õþ°0‚ºç»þßðyâ÷èüO¾¤Î¤ �H¦aõÞ¹"wùvå-q(+k©ò¶}¢#Êt†gk„< l5•²¡ ï¤Š–¿0u[Ãűr—\I^ V2,ÿù*}ÝòðÉÄ+Y«Tæˆü�>†ÔêÚ¬%æµ?g½vWž“Ç?8ÖßèSŸ uÇ3„< ì5•²9kbž–®Ó¶Õí>.gA¾Jª¾ ÿ»^ͽôÅÏXFŸn_…¿_¦åE'å#ñÇÁPèÑozÄM�+ õ«Ý{AG?|K…ÛËå¾âSWp”—y@"Øj*e³^½úYQõw8ü•¬Z[ ´æFzn yêôcº ¦uËÿh63…&Úˆz®]Óíw〚+þ˜�6¾žö¶èŠ»\;¶lÕ»[>T õ—­ò€¸¾×¢»f+GÈ/Ϲ‹·~Eµ:÷C³z-¸‘ž£ëª¯ë†Ý%×&ƒé{šÔx{¦ñ¡áÏ_s•vºÛ#“É\‡ð•|õõ„–ðIåädqn°c@m5Ç™]ÓæyÀ<þôÙ×>ÌîšY-+󆣉UÙm¬7Òñ ‡ß5Z´ºTG'u!v×\V«º_ú¿ÕŽ’Ã“ºO,Çä,xMV y§«dåâðç뺺°¾Ð}5+—³ò;ùÌåuÌ/­Ï×ËÛ™Š^H$B0/# ÜtiOá*e//ÖIŸÅ·ÕX+n¤ã÷Xm®­Zﺫ){f$$[ôn6ä}­¯JVMräHÙg.v+³¼«º=¿oÛ2”_–ŸnÄ�,mHwª7ÈáÈQÞ+Ã×S·î¶œÖ¦l‡«ë&×V[#ä°(n¤ãg(Ôý9ßúBWÚüòûÇË}µ¸ÿ6§i±`‡<玨Ì锳┚;“³$H¬îšf¢º´ÒáPvÁçºâ·Ê7ÍáýÝyU•…Ë”åø½Jko³ì�0{}äkMõ¯áZlP-Õ¥:èéû¹¯êϪh|ò4Ø!€Mp#={‘og§ŒÇ›Û˜<#Ф*s‡ÿΑ“§ ohÅ’mtÝÖpä9IúM×+ÿGÙY‹µ²´VwÌnE–0¢€Ï­+˱â=¹šû¦¶ž€EõúࣟÔmV\ý Úµ«Aý¡N5:‹äôX¼wfDÈ`ÜHÏ•ñð¼ví=­k<Q嶺fÕú9Þg­ö×·(ù#Ø¢šwöªöaòÆA[rïXÞ–\msݰP¸’¿á/Z½dQÌ–EãQ‡:èîÀ²†Ôvö]-wÄøBpéûºÔo•õ}B�‹ãFzîFÔÛ|^•SMc»†ÍÜzEµ5?Îa0½¹žâ*e­s©=j÷«Ýµ3Ißðš3ÁÖkÿê¥ÊÊÞ¨ò+÷£»ŠÝjïHÑäA¡GòVmVv–CÙ…‡uåNÇ„n±féÐ-×—sê �É5¬ûî?)wl=ß cŸk~ÐÕ¶�_¦Ú!H #Ø)_ãw:VqHNs SY•NÕ]ÕÞ¤wn›…Q»|jüþ¸*Ìm —²ª¯Uר¢^«ŒsãF:N£êoØ£U{¾W[pDÃw\Ú˜ý’òŠKTTX®ëÙ|;kh¸å˜Ö¿zPžÁÈù¼%WÉ”óBqZò†Õã­Ra¶#ðþG•W~tìÃå–[ågR1»æ°üu©° @Ó–7•—ó3¿°¶P‡.ŸÿE=$º´CÈbDf—¶­0g|ŒÑíaÉ´§æ–uº™}jv½§±ºh„Õ’Õï«Æ—ê.‘ÜHÇÏl…Û©êÖ¡ð±~¨†¯hQá)µ…ϱ.´nÖª|ÿçªk|òvîTùÅŽŸ|Åð×ioa¬cþ¬lÈ[¡Â”,¡0††kt–s€e*pë–îÍø½ß°4ÝR'!Ðvy@ÝõÚ¹æ}õÃ/jõ÷êiïA#¨Þmòy¾×WÅÿ£ýÝ‘_¤ÒˆºÞךâ¿êïù{ÍåÑŸ0‚½zÐî“§î¯*^çTã¬Z|R‰éØÌñt;µ¿Á§–ú•ëxE;Î}<Õ×OòÈu6Å!/Ô-ߥU•™­áåªrÿ¬&ÿà“Ï”]–«�¡Ì¥Šv©`÷ÇOzÅ,©$£*š­¼®.b!ä ò|ªÂXk’M`´»Tèô$gúùäq}¦.¤Éw5OÜHÇôlfÌÅZ¹÷guýG ‡ÍnÄ'åé™ÍÌ”vX?iD¡”|s¼àÏr®ûݤ–ðpq¬Ò·…Zî ¦pÈs¿¥œ¼7cö–xV6êw‹˜†Å^y@" ^“óÍ]:ÚàU«ÿÑÓ™ÇnÕzó¢Nî(ÔN³5%ò›Ô14è)Ó›%GÔ`¶äu&ÏwuóÒqíXû¾º-2MýL­%ˆ!Òçq@]¯ñ›ššf{Zeý¤aõú.Ë]U>ö­rY•[?5ùŸµ–§J°I«_”cy¡>üÊ­†Æëòx®«±Á­¯>,ÔrÇËÚ^wŸs€…Å^Ö¼OòÔéÇN«,Uƒxò€„xΘ<«Mý>㘼, -S@kI|¦é‚sà=å¯=¬æaC†ÿ¼¶¿œ«íßß›ö8§|ý¤P‡.:ÿ¨ìÉÇÞlÜá~Ò…4%̉mvé…åï«¡óqäg*ØV£m«=›´�,È躪ÃÅ«´dJ=;û5UaM„< žÌ®Y§S‘V§³BÕg­Úê™]³îëH Y¸TÓÙŸšäZ¤S­%qš© În¹[‡fòR½~R@7+ÖÉáxE~)wÕ'ëü5ÖËýÕ*X¾XK·¯‡)9øæÄ6ÐzWë ç^ üœíIlñ€¹2{l¬Ñ¢Õ¥:zz cË(\V+ËÙ!€EÑZ¿éºàÌEŠ×OêoPÉ +UÚàŸÐø™±Id¶È9Ö…4ÙÌq­æ{ÏÔšiíR{Œk¡«ÍµUëcÍ)ÀxwÛ#ä°(ZKâ7¢ÎÏëêÀ¤Ö¶ÑÛª9îÕ¬÷V ×Oñ–)g½KmÓ¾·¡ÇÞÏ´®âFø¿6ÙFÔ]÷v6tEÇÒ«Æ}ï>YÆ�,ÉP¨ûr¾õ…®´M\‡ô¾ZÜc Z›#ä°(ZKâgî—-S»YŽuµÜ=Ë uR»~RÈãTÎóf£õ»µ%U3ÖþKå»N«-ÖWÝÆ€Úþ¢¼UUò1�ËŠÌ¢ëZÁ˜<Û#ä°(ZKâgN¼âÔ¾§'tµ<­“ÎÍZSr\Þ®Ù\¸Í×HáúIÝuzggƒú#§24ØèÔ†±Ù?Sáɤ@‡?«WÛð„-þ꾣ť:0ëå*� 5Œ‡çµkïi]3Ç<G•Ûꢿ¦­ò€„1§z¿(WÅ!9ËŽ¨¶±E½V® Íe .~­ŠðÍzYU­ïô¤¦Ed&´–Ä)€îÞÕo“wÛð Un*ÓõY-ro¶¦rý¤~yË?Ö©¶`äñD£ ¶ÿ¨ýyTå‹õûä1B¡t€Dy¬¾^–$JG„< !ò,ž4áb­ÜsA~+½à-,z5º‹†ã÷ÚS/ÅAÏP¨«M÷žNOkI|ÂíÛ#rÿÚ1aŒ…_í¾ï´oåë³ìÞúdòß@‡<玨Ìl¹«8¥†æÎ…;GBt÷Þ„I]B÷ôÓá*ÕG½ Úê˵mc±J|ªcžGÜœ�À<Á‰õüqÕy:R¿)æ$€ñ°VE/mTYWí'·ÀFð¡nºvëÚ‹Ý„†ô°v›^*(S·=²p»¹œB“\Û÷ªöa*cžÙz4uŒ­%seîÇXcòZ²¦RÞYÎFjšTU¸lìo9yÚPð†V,ÉÑF×m Gž“P±ÆØ# p·� áY=Ÿ­•[ÞÓŸòV*¿à*ªjbZ›#ä ò|¢õ1Æí.¦jbˆi™šÄÇ6¬v×ÎOb;äa®ÂûñÌgªøùŸÑc,¼-êšõˆ‘ù޵Ú_ßù2 |N›K¼³@_¤r"�È8æ ›Âõ|¾Ê®w…ë^óþ TnŸš+÷ËÕkù"Ø!H�£ík½½ÿ¢ºŸvÍ4ê½¥³¥oèÍ—�H³R/ÕþK'ÜL›ã ¿UinQŠ+uB^b„Ï¿¾> ÌëÄ3—°X¥¬u.µG½Î~`ûÒ@`(¼÷Gìë§»�‹›\χ¼Îðÿq-¶9Bùª·héX—¶ä¯Ð³‹[î'ºÞoÁކÁfU¾™TcƒòWdËC˜ë¼ªþ”Þ˜òæÅèÓÍc{µ½üïò÷«ýÖ½'ÝmB=jõþKÞÖ¹L®ch¸å˜Ö¿zðÙbóÁ[r•üA9/Ó’Ãèj­]º]g9£mÙkY¿€Åô–+÷õJ5{7CÞj½¶b™³^nVEÈÅœí±ñ•í(RAa±öTœ×Íž¹”F°M§Ê´cK¡ ‹ßWEí õ¤|’BÞ|Œ…ŒÖißÑJ(þƒ²Íàþ—#úrã“quYYËT8§qÃê¹Y«òýŸ«®5XÌ·s§Ê/v,L³qÈ3‚½zÐÞ¤Ú}µ©`V•žÑÍö®§Ý\Àš†äo<®O_ËÓÓ/oÙjåäïÕ©æ>‹õBÂ\ò€D輨S—'ÏòÔíššYOr‘<#ê¼pF—'·0ŽÞVÍq¯RÛö@È‹_ø¸ÖþI/ש;|Ñn­þ£² \ú¥v‡Ö;ÏËÛÚ!{³êé”UÇYØ6äå«Ê Ò‹rrô»¬¥ÊÉY~ü¢ÖVß^€å%� FÔÛ\?¶–jMc»†Ã­WT[󣼬?kw„< Â7§c-%“Ë+ÚÑðÐb߆™A*ÖÌ‹á’òø=9®KÆB’ÙåfÅXÈó¸ËåjoQ64p©\ŸÌkÿòÔéÇÎ8OÒ©%oÇ7ò¶ý¦ÞYOt�É6ªþ†=Zµç{µG4|Ç¥Ù/)¯¸DE…å³\SVEÈÁÿ­JŠÃ7Ón÷Ø7bn÷i¹¾Ø¦•¹;tÌÛi½W³WÅ_œˆl«YNè‹â<å–—·+•·Ø†‚­ÿVÓŒÛ0¤ûçNèÂB„ ›i®Pné% DBÞ‹û®(à;ª­[ªútøœüê¼¾O—úgwá6º®êpñª±ñ¥Ñ_l‘Û¿�çIð®®6Mø¼LX°ßk7™ûÿÕlÆä° sâ•OfÛ6ªaÇ+ZTxJm¡Ç˜móEÈ!ø@í¢oz€W•ëVh“û®Åºk…ƒTG‡EÝ,(pãK­{ém¹Û¬ÙEÃúÕôÃQ}XðŠ 2ì.Ô*÷ÎCjèìPCÉËzµâ†FŒ>ùjök]Îb-yí5åºå<}fƒj®X£E«Kuôôø—‘RsY­ ¶Œº¸÷÷ácíÐ’o¨ àMåådkåž ò[uœ›T__0ü cvM�v`.•³Sû|j©ÿX¹ŽH\*ICȈÑyQ·–êØM; ^©óR¹¶î8¡›+µ «÷ι˷+o‰CYYK•·í9P¦3„¼˜ŒÀM¹÷oWÑžoÔ<ùXŽøtêóËê‰<œ™¹ÔÆV­wÝzþŽ„´Ð9kÔW¥×oÈyéÞ³°êÖÍêm¯í°Ág �¬ïÙb苵rïÏêú’ÓyRžzÌØ!€E ©ÕµùÉR9ëµ»òœ<þÁ±›{c O}ÌZ¸ÀŒp¦ú‡œo}¡+m~ùýãå¾ZÜ[ð=ÖõqÊ}á­jw©02nó�� PWWÀ–ã¡1=B�ë õ«Ý{AG?|K…ÛËå¾âSWp”›û¤0»ñlcÊx¼“7ð¨|í&•ýxUçIi Ÿ %ù*¬øqìñ5÷ÇÚE«��Sò�Ø€¡Po‹®¸ËµcËV½»åCÕÐ]sÁÏk×ÞÓº6²ž–ÛêZàmÜwkã¢X3º8ÖVëÀ�…$Ô¨Þoäü¬Aí¶¸ñì•×U®ÏÚì³–—1 ¶šãÌ®9£D¬}>—oyõÿu?é"Û°4ÝRç‚ä½GºtèK]ê˜ØU4F¡‹��Sò€„ЬA·Ä)-î<Ûå.XY[Í‚B÷Õx¬\ÎÊïä3' ùå9_Ï"­Ï•ˆµÌ¥6v©`÷ÇršKÄ,©$£*š"“XF(ާ��`®y@Bò'2&Ì‘£¼7Vjy‘[w[NkS¶CŽÕ‡u“ùégˆµÌsù-å佩‚‚‚ÊF½ãnI|Kp EÍ÷&‡ù…l9� }ò€„"ä%޹N[¾ÖTÿ*#üï–êRôôýÜWõgšžQ"Ö>Qϵkºª¦4ÿm+Ø¥Óµ÷ôýö\½¼ý¼ü„>��¢ò€„2êº-OS»¶¸ñR—Ï«¦ö€%g(4:ëõÁG?©ÛܸþíÚÕ þP§E³lÊ\ Yû(•ÝeýnæäiÃt-‡„<��¦EÈ`QCj;û®–;b̪¸ô}]êgJÅçš×ÚG)î.ÛÓ¤ÆÛÁÈ��0„< Bý꘡uÄèÖÝ»ýi-3êëÓÀ c<jÓ]³å&¥†ußý'å–üul–ȧ¥æ]m³fË£µ˜ËNøtÑU)§ó*ŽÕ=]L~vRÜ]¶ó²j®öLÚÞ n×ÔÈ;ÈÑ�`&„< üß«ÂÝ{Š÷±rU•ï•oØ 7§!ùÏüMî–û1¶3R<_éªæpÌJ±P‡.ŸÿE=ÜÓÏ™Ñù³ö®\¬¬¬l­Èß ‚ yÊYô{í©¿7ë–½”v—õ»U0¹w¬DÆFž��¦"ä‰0í éÄb•›ÓÈä01·qBYº[ Ý©lÍQç…3ºÜ?iFo«æ¸WL»2“ |Uùr¬>¤KO[ïÌ–½&Uo-åÄ+)î.ë¯ÕžÒ*žØŠ{Ò©¢"§j¼„<��f@ÈÁ^Ίåñxf,Ö˜à$òjÊUñ÷k1·ñY¹¡ö”vÙœ!Œ¦<€ZÙÕrÖ¹îN:߆',¡0¢ÞþZõ¦ë.[§Ë¾®Y·Æm°C­¿MnKPså•yû#�@,„< ‚ÔþhÁo{ÄP°£C,ßb†Ñ½*þâÄ„qB_ç…ƒÇqy»ì²¿SaDïçZ»¾L?^í×ÕXD%¯o‰ü+rïýhæV½˜Ýeò,•«m'Eñשrrèöª-͵îâý��X!€EÅ £áðrãK­{ém¹Û’0¿m™­p[µ(V+hTyQk«oO³yxÿûNªhù 1þ.KŽ•»äòthÁ&Ùœ® ´cµœ×{"O��±ò�ØHH—ʵuÇ ÝLùìŸ×Y‡Ê/ªcbKØ”ò@]éÚÄä-ËÓòâÏ£ÇŹËY¯’ªoÂÿ®Wsïÿw*«ú9Ò )WNjïÞóº²|34��)EÈ€´3¢ÞæårRMc»†ÍÐÖ+ª­ùq ™ ùëuðÐÏêŒÊTáðWþ±j;8dÇ“7¤Öê"ÕvLk��&"ä@ÚUíÚó½Ú‚#¾ãÒÆì—”W\¢¢Âr]Ì~fL#ð]=wDeN§œÇU·]4'ŠÕ’w½^UE/kY™7[�Àty�vÌ®–;UÝ:NiÕ°ã-*<¥¶Ðã ³k>ŸhRUá2™kí­Üòžþ”·RùTQU“ ô¦“çX±Sg[Y@�€™ò�ØLH!U°¯?9­J¶3¤;Õ;µ¿Á§–ú•눬ÑlQÍ;{g¹NÞcµ¹6ÉáÈWÙusÉ„€<ÎR¹ý}j®Ü/WÛãÈóˆÿ;•»š&!|¤�ãñ��x.B�[½S­µK·ëì/g´-{­*šiÕ‰åY+Üb­Üû³:‡þ£†Ã‡ätž”§g6ÍÖÀUÊZçRûX®yáÿ/šuk`ÜŒ…Ft��ăÀ6Œ`¯´7©vßFm*X§U¥gt³½‹Ö)F¸uK÷ÔÕx¶¦œñ›ššÎrÒCƒÞrå¾^©æaó/Ì·Z¯­X&‹Ñ�`i„<�6”¯*l\Ö¢œý.k©rr‡Ï´Ö[¦2’ߥ‚ÝËiN˜2^¼§üµ‡ÇB›á?¯í/çjû÷÷f}Cò7קίåéé—·lµrò÷êTs³[�`a„<�¶1¥%oÇ7ò¶ý¦Þ /Z8ä¹ßRNÞ›*((˜TvËÝ:4‹g.ÃP?¶6^üË0$š¡ÐÀÀØ8L#د>Ž;��1ò�ØÊHs…^ÍfLÞÌFÔsíšnÏ«Geâ–aH˜ÑÛª^ûš¶ž½¢ï¶½¢W+n°”��1ò�Ø‹T__PÌ®ù<†B½>]tUÊé<¤ŠcuòøçÐÍ21Ë0$Lø¸÷>hÓÍÚýúæBýqÕ^½Ù¦®Àlf � ³ò� ?kïJsÌb¶VäoPÁ†<å,ú½öÔß{6ËŒ± CâŒúªôº¹VÞ¢ß)çw‹õ»œßi‘¹nÞÚjÝ¡×&��Qy�vžLRãX}H—ž¶Þ™-{MªÞZ:ë€6ÿehJKÞŸuÚ{WzÍV]��0!�ÒΠš+Öiëî¤�4<¡«åˆzûŸßªš´ C*ÜPÅ«/3&�€ç ä@ÚQÀû¹Ö®/Ó×=òxÌr]õGTòúUüýZøñ¹÷~”ôn—óól&³k�0=B�¤aÝwo³f®+8}aA��Ò!�ÒQÿe*¿¨¿_þiËf§� ò� - …æ3bmT[·tor3Ÿñ›šš2Ù ��FÈ�Ä’¿f— v,§Óù¬xOùk«yØá?¯í/çjû÷÷}��X!�C8ä¹ßRNÞ›*((˜TvËÝ:DÈ�À¢y�€FÔsíšn³F��¶CÈ�Ä0¢ÎÏëêÀ¤Ay£·UsÜ«ÁÈC��`=„<�@ fwÍ-1–]—¥»ÕÐM��VEÈ�Ä`N¼âÔ¾§åv»#å´N:7kMÉqy»Xz��«"ä�b04x÷®~›<£Êð Un*Óõ�K¨�`U„<�@ !ù¿="÷¯Q ¨·û¾Ó¾•¯Ëé Dž��¬†�ˆaº1y-YS)ï ‹&��`U„<�¶ñßÿþ7ò/,¼pÈ;ó™*~þ§<ϳâmQW®š��X!€müïÿþ¯þñDaa õõi€;��l‡Àº»»Çº ®Y³&ò,¼pÐëõ颫RNç!U«“Ç?þ)��°2B�[0[ñÆÇ…Ñš—FçÏÚ»rqxŸgkEþlÈS΢ßkOý=±€��ÖEÈ`yã­xã…Ö¼dÊW•/ÇêCºô´õÎlÙkRõÖRÕ>$æ�`U„<�–7±o¼Ðš·ÐÕ\±Në\w'uÏV»kgd … ôöÓª�€Åò�XÚäV¼ñBkÞBQÀû¹Ö®/Ó×Çg×¼®Æú#*y}‹*þ~-üøŠÜ{?¢U��‹!ä°´X­xã…Ö¼…4¬ûî­Zc¿G—µ¶ú¶XT��ë ä°4ŸÏ÷´˜¡bâc³• ¨ÿ²•_T‡ß/ÿ´åº´ä�`%„<�¶a†<$“¡P MžsGTætÊYq\užYC��K㎠€mò’Ë4©ªpYx¿gkå–÷ô§¼•Ê/ø£Šªš è�`YÜ1° B^2=V›k“Ž|•]ïRHyœ¥rûûÔ\¹_®¶Ç‘ç��«áŽ €mò’i@Þ²UÊZçRûX«ÝxÈë ÿQd ��`EÜ1° B^2ô–+÷õJ5›)Ï y«õÚŠer,Ý­†î‘'O��–Ã�Û ä%ÛüÇõ©ókyzúå-[­œü½:ÕôH!Æä�`YÜ1° B^2¨ó »?y<nDÝuGuÆÏ² ��XwL�lƒ—L!ùÝÅZ¾ú=õ> ?2ôHÞ“ïi…c‹Ü„<��,‹;&�¶AÈK&CÁŽ=;×!9OžÖ—E¯Ê‘ý¦>ØwX:“�€UqÇÀ6yÉe„B1Çå]ù\Ùe-Ú¤ªÿÓŽ��Àʸc`„¼d É_ó¡¶¼½ZK²–© ü'ùþÏ÷:¸ç°Îל×ÕZò��°*î˜�Ø!/™Ì1y[äXþ¶ª®ÿödL^˜hRUá{ŒÉ�À¸c`„¼d ‡¼3_ÉÝ1yvMCÃwoèV`4ò��X wL�lƒ—\OÆä��»áŽ €mò���ž;&�¶AÈ��x>î˜�Ø!��àù¸c`„<��€ç㎠€mò���ž;&�¶AÈ��x>î˜�Ø!��àù¸c`„<��€ç㎠€mò���ž;&�¶AÈ��x>î˜���� ò���� ò���� ò���� ò���� ò�ØÌˆ÷ÚÔ2"��0!€½ô_TéÒe*®û-ò���LDÈBy+ªÖ?y<®_ÞòC:÷0y<Ag­ÞÚZ£Ži[ò†õ é–:#¿6‚ýê Ž>y���y�RÈаïˆ6—ÿ¢Ç‘Ÿ˜Œ‡çôήzuÇÊqÆ}ÕíÚª’N9±ÊG*Éߍпiô¶ª×¾(ÇÚjÝ!ç�€ AÈZF‡jßùH Ý#‘ ÊWµKåÞ@äñTF°M—9U²¥P1ÊF½ãnѨñH×+wj{å?ÕÃ>��!y�RÌРçs½ën ÿ+lðš¾[£û„2��€¸ò�¤Þp³ª6WÈû8¤‡µïkWÃÃ'/^CMªýÑy���Yy�, î¾ûQ_…½YF<ã¡®Þ¦•KÊÊÊšP–¨ÀÝy��@f!ä°³›æšU*ï¶9 #ÍzuÑZ•ýFn·{B9«K­‘g��dB�‹Ôs5ºÚ3>Ëóm.­_ïRû”T8¢‹¥�€ EÈ:Æ üžóª*3—>¨”«¡Y]s g¡‡ºâÜ©ò+­òûýÏJK­*ÎÐ]��d&B€Ô0út³j³²Í1tŽåmØ üK•½Ñ¥;ó z£wªµÖ1q,ÞxaL��È\„<�)ñ$ ½¨¼ýÔ=ù¡1 ¶š=z§¶cvãòÌ5öv},÷5<ž‰åùº†"O��È,„<�)1â-Ó²¬rµG~ò„ÑîR¡Ó£H웑Ñ{Sµ••ªª¹ªöaCFàŽ.×~«¼gõ÷���éˆ 5†}ª^ÿ†œž¾Èò¹viuNŽŠfÛ’×ß «>P]Û€ŒáÛrmÌÑ’¼·µ»h«œ×{"O��È,„<�)b(ÔsCgËÿ¢Cuw4<òÞ×öò¿Ë?ËÉWF¼Ÿ«°ú×ð+¨»a·–.Ú"W[pN­���é† …†Õë»(WÅ!9ËŽ¨¶±E½s˜]sôÎqmÞÿ£þÓrAûs_ÔÒõêžë¸>��€4CÈ"ùNkyÔ옋µrÏ…Y·äMœ¡Ó±r¿.vö«­¡JNç§:æyDÈ��‰ %Œ‡µ*zi£Êê¼jÌ®iê¦k÷[áB t=R`b0 )8—õö���Ò!@J„<ŸhýØxºh‰Oò”«ÈÕ˜<��‘y�RÂhûZo│î§-n†B½·t¶ô ½éj]K^ð–N½*ÇÓc•v¸®Ë<�� 3ò�¤H@¾ê-Zš“§ *È_¡%ápæÈýD×ûG"Ï™ÙØZ{Ë‹UqÚ-·ûYùƹI¯—ü5üïýÐÜÍØ<��Qy�RÇP{ã7*ÛQ¤‚Âbí©8¯›=Ñ‹£Ï(tOõ+ôSgtÇÌïa½W{?ò�� ³ò�XËP“jôGÌ‚1¢Ðmu���ãy�RÃx¨ë‡·iåǤñtKTàn< ���sEÈ#ÍzuÑZ•ý&j<Û}V—Z"ÏŠK(��€ FÈF›Kë×»Ô>%‹(4Ï€Æ �� “ò�¤Fè¡®8wªüJ«ü~ÿ³ÒR«Š3³ì®É ���Sò�¤Äèj­uÄgs“Ç ���Sò�¤†Ñ¡Ú]Ë}Í#gbùE¾®¡È“žƒ%���¦ äHC¡¾> Ì·™Íª«ù¢\‡ä,;¢ÚÆõ2é ��È`„<�©ÑyY5W{&u¥ êvM¼ƒ³ iùNkyT·ÏÅZ¹ç‚ü=��¡y�RÃïVAÔX¼ñòŠv4<œÕ8:ãa­Š^Ú¨²:¯ÚOºlÁ‡ºéÚ­wj;‹��2!@jøÏiß¾£Q¦¸OPáš:æíœU@ y>Ñúê_§<×hw©Ðéa ��‘y�Rc°C­¿ GŒPså{r^ï‰<ž™ÑöµÞÞQÝO»f õÞÒÙÒ7ô¦«•–<��‘y�RÃ_§Jwsôyíͪۗ§%³n… ÈW½EKsò´¡ @ù+´$+KŽÜOt½$ò��€ÌBÈÓÉ[ò¦*¼ý‘'Í‚1 öÆoT¶£H…ÅÚSq^7{&·��dB€Ô🗳₮G­‘פÛzdfL��€¸ò�¤F¨_½S»T†<å*rµ0i ��@œy�R#xK'‹^•#V—MÇ*íp]—?8y2���f‹ %F¼eZ¶¼X§',¡.ß87éõ’¿†ÿ]£š»™!��`Žy�R#tOõ+ôSgtÇÌïa½W{?ò(–nžÐÎí_è¢Pö_Õ0»}«·µIï]õ2¦��d0B€Ô1F™c ½­êµ9Êß÷WUئ7²räîÓ‰/·({¬»§CÙ…Gts,ø��dB�{é¬Õ–ÞU]÷ˆŒÖj­ÉÚ¢Ó¿¸õÖz§¾÷Þ‘ßß&_}¹vb1t��™y�ìÅ\_o‰Sž9§SKÂ!Ïí9­ý®»ÏBÝÀ%íûd¶ ª��¤B�{¹¡ŠÜtiÀxò^ܯÆ@³ª¶n×§ÕßÈíú«>,X§=—Eþ��� ³ò�ØLPmîýÚßСî†]záÕ 5Œ(à;£}ë–˱ä­ÈyKn?íx�� 3ò�ØÑ§f÷}¨SÍ}“ÆÞå;uT—z˜x��d&B�{3å÷œWU™SNg…ŽÕý›EÔ�@F#ä°/£O7«6+;Ë¡%+7ëÏZ£—óÿ¨uEGYB��d,B�Û2Ú\ZïxQ«Ë®ª'dNÄR¦-î6 7Wé]K(��€ÌDÈ`[#Þ2-ËÚ(WûðØã'!ﮞO´ÚÉ �� 3ò�Ø×à¿T–»^ÍcÍ%r^{M9ŽW´£á!-y�� #ò�ؘ¡ÿŠþöi¹\žG yË”“³^¥Ç®«3DÄ��™‰ í„<å*rµÐ]��d$B�û ÞÒÉ¢WåÈÊRÖäâX¥®ë,§���2!€mM¼²¼X§Ýr»Ÿ•oœ›ôzÉ_Ãÿ®ÑÍÝŒÍ��…À¾B÷T°B?uFwÌñÖ{µ÷#���2 !€½# ÐV��0Ž����i„����i„����i„ÀÆ …íòþô­ª+Éétª¬êkÕ]nfé��±y�ì)t_U;”·Ä1u¼pq,ß$gí-˜“��dB�û1AߺNœP½Ç§ö½ އ9#¨ÞmòyêtôÃÍZ¿÷‚ü!’��È„<�öbtëzù~ýífß,9VϵZèÿ ÿ �� 3ò�ØËð}5ÿ x=Mj¼ûql††›Ëõ׫—Æ<��!y�ìËÿ­v”Öi·[î˜å˜œ¯©ÀÝù��€ôGÈ`_Ó†¼¯õUÉ*9Æ&`)ÖI_ ò���éÀ¾bu×4ÔV÷V:Ê.ø\WüC‘_���dB€ôúM×+ÿGÙY‹µ²´Vw#‘_���dB€´`nɽc•Ž\msÝ`}<��±y�lÎPÈ_¯ý«—*+{£Ê¯ÜW(ò›1F·Ú;"���Ò!€ «Ç[¥ÂlG8àý*¯ü*¿ß]n¹U~†Ù5�@æ ä°-Ã_§½…*(˜¾lÈ[¡B–P���„ ½ yä:KÈ��™ƒ «×wYîªr9N•U¹õS“_Á±ÉWF 1 ��È„<�öêÐEç••¥¬¨²X+w¸åc��ay�l, ›ëäp¼¢‚¿”»áŠ<<õrõ –/ÖÒíßë! y�� ƒò�ØWƒJ^X©Òô² F°E5Û äôôE~��þy�lkÄ[¦œõ.µMÛRgè±÷3­«¸!:m�€LAÈ`[!S9NOÌV¼§ünmyÞs���Ò!€}u×é ê<œÊÐ`£Sª ÿ �� 3ò�ØX¿¼åëT[0òx¢QÛÔþ¼ ªòÅú=��@z"ä°·Ð=ýt¸JõQA/¨¶úrmÛX¬ÒŸê˜ç-y�� cò�ØKè‘îÞ D‡6cD¡b��€‰À^˜H��`F„<�öBÈ��˜!€½ò���fDÈ`/„<��€ò�Ø !��`F„<�öBÈ��˜!€½ò���fDÈ`/Á»ºÚÔ9Ãâæ†B÷/¨ê‚?ò�� ³ò�¤cPþ¦ :úa¡–;–¨ÀÝù��@f!ä°1C¡Þ]q—k[ÞRee9´$o»ÊŽ’ó !��d&B�Ûm=©7—8”åX®ü݇uÎÓ¡ ÙÓToßã'O��È0„<�6R Ý«ŽîÓ–Â÷Tî¾"_WP!��d0B€ôêÑ+n•ïØª-ïþI¥5t×��™‰ ÍŒ*Øö³k�€ŒEÈ`cCò7žT™óKóõÉ0{.èïCÖÑ��‹À¶FïTk­ãåä­ÑŠåÛä¾Û,÷¦eÊr¬SÅÍ@äY���™…À¶Fš+ôêšjµ††[Žëíƒ×4h.«à;¢Í74y��@&!ä°/ï†>UC·çºÔ°ëc5ô©§ñ V;=tÙ��‰À¶FÛÎè­å/(++kRyU¥—Ež��Yy�l˸ïÖÆÜU¹Ýr?-gTwõ? ˜‹¢��d B�’ÿòòô0ú��`!€}u^Ô©ËÝhÔíšyiÊ��™‰À¾ünLg–W´£áá¤ð��y�ìËÿ­JŠËåz:ï´\_lÓÊÜ:æí$ä�€ŒDÈ`_Áj½P‚ðªrÝ mrßÕhäg���™„ ­õÑÚ"UÞè“ìW_¨��2 !@z½­êµ¯iëÙ+únÛ+zµâ†˜{��dB€ôaÕû M7k÷ë› õÇU{uöf›ºÑ]:��Ò!@ÚõUéusvÍE¿SÎïëw9¿Ó¢ðcÇÚjÝ¡×&��È„<�écJKÞŸuÚ{WzƒÌ´ ��2!@z¹¡ŠW_fL��ÈX„<�ifTÁ¾~ ³aÙ5�@æ!ä°—Ç·tîÌ-#Ÿ+tO?}}Eô×��‚Àf†tÿÜ!½ú†zB3%7C¡Þ[:»§D•7‘Ÿ��¤?B�û1úÔì*Q^îfíù¢Z§kÔèñÈc–ÆÕž®Ö{6kåò r^ì (��€LBÈ`SÃêõ5¨ªd–˜Ë&L,K^W‘Ó-Y5�@Æ!ä°9C¡ÀCµ6ÿ{¬%ÏëëP/“­��€ FÈFð~#çg j'ß�€ GÈBò»·(k‰Sà�€ GÈy���ãy�Ò�!��`!@0êº-OS»L§ ��2!€Íä­<¨Zÿpäñ¸~yËéÜCšö��@f!ä°9Cþ#Ú\þ‹G~b2žÓ;»êÕMË��È0„<�ögt¨öÔÐ=ùÁ |U»Tî D��dB€4`hÐó¹Þu·…ÿ6xMß­Ñ}Zñ��@"äHÃͪÚ\!ïãÖ¾¯] Ÿ>��€ CÈ&"áî»õÕXØ#â�€ÌDÈ>ÌnškV©x¼Û&��@"äH#ƒºs®FW{Æ'`��È<„<�66$ãI•9¿Ô9_Ÿ ó±ç‚~ð>«ã�€LEÈ`[£wªµÖñ‚ròÖhÅòmrßm–{Ó2e9Ö©â&Ë'��€ÌDÈ`[#ÍzuMµZ CÃ-ÇõöÁk”¡¹8zÅ Ñi��d"B�û2üjøàÓÈ"è]jØõ±ú‡ÔÓxP«ºl�€ŒDÈ`[£mgôÖò”••5©¼ªÒK"Ï��È,„<�¶eÜwkcn‰ªÜn¹Ÿ–3ª»úXC��d(B�Û2z=ªøÿ½¢ÿ§ò²Ú‡ ;º\û-³k�€ŒFÈ`_ý Ú±êÕµ Ⱦ-ׯ-É{[»‹¶Êy½'ò$��€ÌBÈ`[#ÞÏUXý« ¨»a·–.Ú"W[PF»K…L¼��2!€mÞ9®ÍûÔZ.hî‹Zº£^ÝÆ€ÚjöèÚŽpø��È<„<�öeôéfÕfegeɱr¿.vö«­¡JNç§:æyDÈ��‰ÀæB t=R D¤��0ò�Ø–ÑÛ¬Ìej®2»&��@!€}1»&��À„<�¶Åìš���Sò�سk��LEÈ`_Ì® ��0!€Í ªýÒ)U”ý¿r–Qmc‹z™i��d0B� Èw²XËYÊÊ/‹µrÏù z�� Cò�Ø–ñ°VE/mTYWí'Ó¬Á‡ºéÚ͘<��±y�l+äùDëÇf׌Æìš�� “ò�Ø–ÑöµÞÞQÝO»f õÞÒÙÒ7ô¦«•–<��‘y�l, _õ-ÍÉÓ†‚ä¯Ðs¦ÍÜOt½$ò��€ÌBÈ`oÆ€Ú¿QÙŽ"kOÅyÝìŽü�� óò�Ø›1(¿ç¼ªÊœr:+åjhV3k�€ FÈ`_CÏrä(oÃå¯Xªì.Ý&è�€ÌDÈ`[£wªµÖñ¢òö_Pkd ³ûf[Í–P���‹À¶F¼eZ–µQ®öè1x,¡���2!€} ûT½þ 9=}‘äsíÒêœÑ’��2!€ õÜÐÙò¿èPÝ …¼÷µ½üïò3ù ��ÈP„<�i`Tï7r~Ö öÑÈ���2!@ÉïÞ¢¬%Nyˆ��2!@ ä��Œ#äH„<��€q„<�iÀP¨ë¶<Mí 0ß ��Èp„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����H#„<����HÒÿïÞ‹Ô§®j•����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDsetdatastrs.png��������������������������������0000664�0000000�0000000�00000256535�15030617045�0025171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��.��.���ÖˆB(���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOT×ú÷ûÌú IBâƒ&Ÿ4ÄmšF`Ú ©!Fk¸ÑÔ€±ýâ´lªØÇØÂÝ<•o+Ô±eT´ŒVlÀ£ÓÓá+s{Æ"vF ȯø  ì÷w¯ùÁì=Ì 3ûÇì5p½’uN‡Íµ¯½ÖÚk]ëú± AAAAœB† ‚ ‚ ‚ ‚ ¸… AAAAp .‚ ‚ ‚ ‚à2\AAAÁ-d¸ ‚ ‚ ‚ ‚[ÈpAAAA·á‚ ‚ ‚ ‚ n!ÃAAAAÜB† ‚ ‚ ‚ ‚ ¸… AAAAp .‚3V­Z¥ºAAA,h‡Cœ¡Öð@† ‚ ô@jUÚ‚ ‚ ”@«‚à µ‹{Ú¡47Ál^QÛ‚Hxc(ݦ­Áj4CíïAăæ&‚ xƒæ%‚È,FŽ9­Áô&‚Ghn"‚7h^"ˆÌb䘣ÑJœA/a‚ x„æ&‚ xƒæ%‚È,FŽ9­Áô&‚Ghn"‚7h^"ˆÌb䘣ÑJœA/a‚ x„æ&‚ xƒæ%‚È,FŽ9­Á²=ã‡Ûé„3Ø\è „>Œ¢ßõ;\‡0#„>Š@/a‚ ôÀÈÅ AD<h^"ˆÌb䘣ÑJœ!ГpÕ½-æŸá› ~" ÝÆÉ-ÿüÞªUkQtüW IŒô&BŒ\¬Aăæ%‚È,FŽ9­Á²=û�-Ÿ_†7¶LOѾïàwLùŸáªç\ÍŸÂÜ=úwz ¡F.V‚ âAóAd#ÇV‚à 逼—pêÊ�Bf Ó®z˜˜§Å›¨r †>Ÿ¸‰Sß?À|ð;ô&BŒ\¬AÄ#:¯˜ñ?‡ÖŠí÷~ŒIcáröàáðLx=…æ%‚H#×4Z ‚3¤Zf¸|°ïÎ þ»ic<³asÆÓ6|Õ1nÐK˜ }Í-”‡ Í+/ÿ@Ý;%0_}€± §j�C]uØ’k ~oUÎfï|&3^мDé!3Óð»_0þÞ?_³ëïÓÕ‡á™ÈÑj5cŽF+Ap†ü%|MŸ4¡ëÑcô^>‚|æma*Dm×pؘ1‚{õõ¸6Þ4ˆÐK˜ =Ï-”‡ ã‰Î+f=ñ¹­‘‘0xûÖ2£Å+ȯiƒÇëDóþztOG'&š—"=äcFÀKW=ÞÙbÆUÏHhì £ëäûÈ ®LÈ)2£S£} V‚à ù€žÃdo Ê×­ ~¾jÕë(mêÁ¤À¨ûg4VïFIù)´{§Ãß§—0Aú ›[(ÿAW^ÂûÃ?qe0²Aš€«nL⿯Z{Ž‘9ñ³yL8þ‰ï=3¡¯ˆÐ¼Dé!3Óð´|›72¦l¯ÂZ6îLï¢æª^W ö›»Åo†P3æh´g,ГOàvþnßÄÂIB"è%L„HçÊ¿CDç¹áBð_Æî`ˆÈ«ØØäFÈ/lOmß¡mÁ¸AóA¤‹lÌýøáT;#NLÓ¿£®àñ;&¬­êÀHðóa8NYà /ÔŒ9­Á²=ý</Ã?$@øž?'Â?ÐK˜ }Î-”‡ ˆÎ+^ö6ã“Ó·ñÈÛƒËÕï½-Lù'Ð5ʼ-ÄoLü õŸ_§6‚PlÌÈ ³ðÛ÷…BDLÛÐä ûX^ؾº¾`ÜP3æh´gÈôį0:V«Ö­õÌ1˜o ‡^ÂAèƒln¡ü;Ap€l^ÆÑÛüÖ½¿Ä–» M½ãÄùÈÝvÕe;Pn¾¯$s0ÍK‘ò13…Þ¦Ïqºë!¼½—Pϼ-^A~ímŒ‡Ù&îÁç×üšbÐh%Î è *ׄ_À [*d¸ B_äs åß!ÂxÏ+LúÜp:ÝðM.\KóA¤Kì˜&{Ð\þV(ŸÌ*rK¿Gïä„Ñ^´5Ö ¬ä#˜Û#’C͘£ÑJœ!ÐT½Yˆí%%(IÔŠ‹QM† ‚ tfñÜBùw‚0–è¼"`úÏ?1u¦ˆ‹0ð'þ¤ª"¡˜¸c&0ŸûßpºŸ`2’´;jÆV‚à Ù€ŽIny§ÈpA„ÎÈæÊ¿CDç•yLܨǡ3?Ä « µpæP=nLDWU4/DzÈÇÌþôü½Ÿ—ðüEUEb9"ÐÓÝ8ù™#œ•7³xj=‚ãTr ‘Í-”‡ ˆÎ+¬Ôé!¬fŸ%lkÁA† ‚PŒ|Ì ã†ùδÆ_[ëi2ÿŠÈ1†š1G£• 8C6 …ØwoA•å_ðÆÄj 3ƒpwԣ䵽°Si/‚ tF6·Pþ‚ 8 :¯0ÃE5Þ,Ü?¬6ض£xÃgd¸ ÈÇÌ0•¡ªbÉÚšJ.b9"Ðsí:ÊØ¿j ò"/äâõÈ NÒ:É!ÔLA‰Í-”‡ ˆÎ+ÌpñO|�ŒÇ <ßÿ“ ¡ù˜†£ª…Ûã¬Úfl¨¾A† ‚XŽ,бå½Ú¬+o fî•¢fB ‚H„ln¡ü;Ap@t^0Ýý >s &Ž·¼°~ôº)9'A(F>f†á8e'ébà¾?u“ ±‰? ç1ãÿ7Ú[`6›an8‡vç�$¥È —0Az ›[(ÿA W„A;vo8Ë=oLeq 5ìFGݼVnÇ äŸh^"ˆô™1tŸüŽù!ªá© ï¢äœ±Qû¥—0Az ›[(ÿA Ÿ—†ÑU[“øÙ*S^Ø}};Š×ç¿·jÕ›¨ŠñÈ y‰ ÒC>f´À†ª ¸ç)‹.Ì`Ø}u%(·,Œ;5cŽF+Ap†l@Ïô£Óf…Õvý3ó õàš­ žùä ^ÂAè|n¡ü;AOì¼"Lö ¹ü­ñBÚLo¡¼¹“R«…ÍK‘‹ÆÜèmÔæ¿üÜ”É}µësL¡±·ö°Ì#C͘£ÑJœ!Ð/ÿ@ý pMÎAº‰#Á‰!oç€ÆÞ©ð—䨙‚ ±hn¡ü;ALÜyE˜†ßÙŽ–†S0›O¡¡¥NÿtÜÜ4/Dz,3s˜ìmAùº5Á“6ÓºÐÜ;®™—V‚à 逞÷œÃg̽JðÁ¾›•zæ;˜OœOÍ„@‘ˆøs åß!Â8¢óŠ€™þÛ°Y­°uöc/0äú6ûmxÆfÃßY ÍK‘‰ÆŒ03�gû94°µ€¹-íÿ†fñNE͘£ÑJœ!ÐÂÈMœ:ÙŠë  WüÜTðîMÌ`°ÝŒOdΦ—0Az ›[(Œ ˆÎ+^ºðA½“B�C·jC¡l9o"Û·è}oÅDóA¤‹|ÌL¡¿ó2¬ÖËè쟃p]û öNÆd r£¨s4Z ‚3äúü·êQºîäýÿs<j?´dÚ=“áïÈ¡—0Az ›[(Œ ˆÎ+3ð|WL,ø/cw® «La¾÷ãŽâ{ÏLø{rh^"ˆô™I¸ê+Qïƒ <í#ï´ʄœ·7`[c^†¿%E͘£ÑJœ±x@Ïb¬ß ‡Ý«íº=Cqݰ#ÐK˜ =Î-ÆFDç•9ŒÜhÀÉŸìh(}=:'Ð~ädÂr4/DzÈÆÌü|÷Y…Yøíû$ÞáÃqÊOœÅ€š1G£• 8C> 'á¹P“üî¿°åäm %0^¨™‚ ![(Œ Í+ܪû@\3­EQmü¢½ñÌõmð$8ñ¡y‰ ÒC6f„AÜ8õ~ºþ J¼œF¼†#Ÿ:d•Å"¨s4Z ‚3¤Z´£|5‹Ñ,ÂÞº¯q´¼ ­gñey)j»ÇÂß’C/a‚ ô@>·PAƳh^ Œ¢ßyv–¤³ý<Ã3q ©h^"ˆôÿ¯¨+}¦œÍ¨ux1ñè:ÍfÔÛ=ˆ ¥fÌÑh%ÎèyO6„­—†Ü®„§—pø;rÇ&"s,ž[(Œ c‘Í+3p¡ü-˜ÄÏØçÁ–û>NvýÐxAóA¤Çâ1# 0Ö§ã ¬ÖKhïö`8N5‘jÆV‚à Ù€~Ùƒ†Â8&Ø0 Gu1ŠK6c}î{¨sM„¾½„ ‚ÐùÜBalAOt^ `Ð^Õ,1`á>Ô}{åû¾FkóI”o2£{:þÄDóA¤‡|̘ñ\@ùº5ÁÏCÍ„Ü-uèŠ_cL͘£ÑJœ;!üwðƒÍ…QaŽÊ|¬/©AS÷S*9HDF‘Î-ÆFDç•xšŠÃùv怉H¢àY<µžÄwTU„ 4A6f„ØË_?[‹Â½§ðíÑ ìk8æ/?ĦÚ.L‡¿&E͘£ÑJœ±ô€0í¾ƒßG)C6A™C:·PA<W¼ìmDa•AÔ‰¨Þ°%Åë‘[Py\„&ÈÆÌü4mÈ Uðæ1)=,xa=|ŽªŠÄrG6 …q¸/EYI J$m{á:¬Ý!NÓ‹gz ¡²¹…ÂØ‚à�ù¼òþîK°¹žC˜p òµ|”TŸE·ÿEøßCóA¤‡|ÌL¡·aªÃâ3ÃÅgØPü>Š×¿Ž‚ºßÉã‚ –;Ò-x-Ø*‹!—6rK¾B§o ÒsöoAZ#Ÿ[(Œ ãQ;¯Ð¼Dé±hÌž¢û‡6¸F_bÂñ ^[_Šê¦.øÚ{9Ñh%Îhaô6j·€Ãë‡ßiOÑg­Á~«;øó³1y©/z ¡jçš›‚К¥ç• ¸o÷`4þŠæ%‚H#×4Z ‚3äš•z·o*ü3ƒå¸ø67¹c‘9–ž[(ÿA™E:¯“÷q±f·,´¶¤d óÞÀŽ7⥹ y‰ Ò#¥13íÁíߟËV#¨s4Z ‚3èYŒõ;á°Û`µµã¶Û™' z ¡²¹…òïÁÑyå%¼–0‰?³Ï·×QRÿ+|3ò¹‰ýA©#3s˜tÿˆš²RÙZ d{!òÖ–£Å3¹Èx¡fÌÑh%Î hqsÐÛ´ ¹Á—n¤½‚õ{[áI`½P3!A$B:·Pþ‚ x :¯Ìa´ËŒmµ¿À»ZËšÖý5°ö=ÿ{cd¸ UÈÆŒÐËÖœàgq[îÔwze®ìs¥Ðh%Îèàæ`õ:W~‰æV+¬V±Yþ‰£%…ØmÐÜ‹ "²¹‰òïÁòyecîßÐq«vq½dkÿ nÿ3ôÚ~†›Ê¡„&ÈÆŒ0Œ®Ú=¨uôIÖbë³bÿ~+úØ?#ÃA,W¤ZºŠ57B5É%ƒí8õChS Lclüeðs½„ ‚ÐùÜÂòï<@gÇMIÛSŒôRþ‚ 2‡lÍ4Ùƒ¦Ò׃Ÿ-4Sö¶þ3áïÄBóA¤Ç¢1ÁC÷€|ŒM»a³¹©*A,w¤š½„[ASÇ8ÎPëþg*«Pßþ¬«–ÛÏÿA/a‚ ôA6·PAWB9.VçmAeÝY´2U«¸>:óJÞÜû`üBÍ4/Dz,3ì £NÇqÌ]Bûm7ü1!YRÔŒ9ÃF+š5jñÛT®‰ÿhËC¥c8ü ô&B¤s …±ÁÑy%€¡öc¨‘¬‡B0xåŸøÁòL¦Æ1ˆÎP4/DzÈÇÌ&{¿Gi®)øy¤™ÖW¢Õ3þŽ5cΰѪFèLÀ³|¤;ud•|B?.î«ÀQ³æ„­V‰k6ï÷GDv"[(Œ ˆÎ+lu6¡ã^ØCÕyÝíߢrïWh~v]çZq{"zLóA¤‡lÌ“s¾†¼âJÔ5ÿ:İ^À™£¥xs·ƒqN1ÔŒ9ÃF+ïÏò‘îÔ‘]ò½ÄøØtÜÓËDð~Ad'Ò¹…ÂØ‚àè¼2 Ç!¬fŸ%lkÁA† ‚PŒlÌ~´ø‡lLpåÔ%xƒ˜9LM ¬¥fÌ6ZyŸ(x–t§Ž¬’oö9üÏãÄe cðÿ?Õï÷GDv"›[(Œ Î+‚·ûÊÄñL•´“6Y…š—"=dc†å»jù›®ã^äÃÙ…ö3‡±·¾-üÙ¯8g¹³à¡©fÌ6ZyŸ(x–t§Ž¬’oâª7lFII‰¼£Ú1ˆ 5µ°JâÈx¿?‚ ²ÙÜBalAp€l^ L`lj.üCjмDé!3ÃpTæ?KÖÖT:Èp¡'<ËGºSGVÉ—ðT“dú1Ô^‰ÜUë°·Ý¿N"û}‚ Ï-ÆF„ñDç³?Ãó8“’ðüþž?[Ѽ¤L¯Ô–o‹òÞ‹Ÿ üè‰8‡ÑvÒ-*ÿýô0l´ª:ð,éNY%ßôtþÖ¿ßÓ1,5ÀäØÔB܃÷û#";‘Í-ÆFDç–ãâ3l(Þ㥺Å>ƒcbk-*jl²’Í4/éïzåY¾ìÒ€ÿñÜĶ_àzü90ü'z|“ 6ÔÜŸaš¡­Ò:²J>Úd¦?jÔ¨Åo PAW’$çd 9ÇоwVåV¢}(º®Šþ>¡%¼ë•gù²JwÁª"9ÁÏLùµ¸5è ýlÚó½‘¸Æ 5÷g˜f²ê¡péNY%_ÒÍAl­ò¼ßïPÿUéNY%…±e”Åz¦FZ¤…0Ýó~óÆz¨ŠíÙ‚N)ŒMʃ¢¿Oh ïzåY¾¬Ò0GU>ò+qá›±£þ7ôuÛpñÖM\l‰&䔢æþ Ó uhåîÔ‘Uò%ÝáBx×Ïò‘îÔ‘UòQ[FáYw4®ÔAò©#*å¸à ê×ÊÉ.Ý ˜qŸÃçv/Vaä\®ùgÅ%@,Ÿœƒ'¦J*CÍý¦êÐÊ!Ý©#«ä‹·9ðÞAó‘oÐ)qu”Âûýñõ_åîÔ‘UòQ[FáYw4®ÔAò©#*ßR9.âì Dx¿¿l…úµr²JwÂ0ºÍÅÈ?cŸKÛêr;ãØ e¿Ÿ&†iFЙ€gùHwêÈ*ùâžjöÁqì}™ ¶Þïw¨ÿ*‡t§Ž¬’ÂØ2 Ϻ£q¥’OQù–ÈqA†‹ŒÂ»^y–/«t'Éq!m¦u¸ Éq%Eöûib˜fÔ x–t§Ž¬’/a¨H¶ZúÉp¡¼ëgùHwêÈ*ù(Œ-£ð¬;ÞŸ+ɧŽì‘/~Ž ï½s8rê†âGŠpÙ õkåd—îü=púâ{ZÆCÍý¦êÐÊ!Ý©#«ä‹wªYüŠj®Ã xM= þ«Ò:²J> cË(<ëŽÆ•:H>uDåKœÓû Žm8(«$"…÷ûËV¨_+g¹ëNÍï¦êÐÊ!Ý©#«ä›þ ž—ჸqòkÜ¢—°.PÿUéNY%…±ežuGãJ$Ÿ:¢ò% 1í„ų– ý}BKx×+Ïò- ÝM{pû÷皯 Ó uhåîÔ‘UòMt¡éT ¬V«¤µÀ\ò6…Šèõ_åîÔ‘UòQ[FáYw¼?W’OÙ#_¼äœÛQœ_ŒšŽ'² GRx¿¿l…úµr²Kws˜tÿˆš²RɸÛöBä­-G‹grÑz@Íý¦êÐÊ!Ý©#«äK¸9xUŽAÚè�ïúãY>Ò:²J> cË(<ëŽÆ•:H>uDå0ý矈™~„‘›8ù›”ã"ÃP¿VNVé.ArÎ…–»õ^ÌHÆû\)†iFЙ€gùHwêÈ*ùâz\\Á¿lÂûýñõ_åîÔ‘UòQ[FáYw4®ÔAò©#*ß<&nŸÅ© ­ò5Ó…(Yû…Šdê×ÊÉ*Ý ÃèªÝƒZGLèhŸû÷[ÑÇþûÙ.ô†:´rH>uÈäûŸ‡pü ¾„m·Ñ?3ÀP®ÙÚÐé!·G þ«Ò:²J> cË(<ëŽÆ•:H>uDåK’ãbía8FæÂß“ý}BKx×+Ïòe—îXU‘ß×€®¡¡Ÿ‡ÿDσ.ØlnL‡¾$CÍý¦êÐÊ!Ý©#«ä{ùê?h€krÂÐMÉEü÷\¼ÿ{§Â_’Ãûýñõ_åîÔ‘UòQ[FáYw¼?W’OÙ#_ ûMôø§ãÎI Þï/[¡~­œ¬Ò$TÄ”_‹[ƒžÐϦ0ßÑ|-`˜f²ê¡péNÙ$ß¼ç>³@|°ïÎÿí˜ï`bü&N}ÿ@|M/†÷ûãê¿Ê!Ý©#«ä£0¶ŒÂ³îh\©ƒäS‡T>!@|¿ŠÄð~Ù õkåd•î„A8ªò‘_Ùˆ ß|Œõ¿¡¯Û†‹·nâb‹¸_ MŠšû3L3Ô¡•CºSG6ÉÇ’J:ÙŠë  WüÜTðîMÌ`°ÝŒOéTS¨ÿ*‡t§Ž¬’O˜C`.Ñf|x¿?žáYw4®ÔAò©#*Ÿ€Ù¿ŸáyœiIxþ ÏÆŸ¯x¿¿l…úµr²KwfÜçð¹Ý AGï¹&\óÏ>X>9OœV5÷g˜f¨C+‡t§Žì’ïü·êQºîäýÿs<j?³¹vÏdø;rx¿?Þ¡þ«Ò:²J¾™~tÚ¬”'Cð¬;Wê ùÔ•/^9TÖ¶£xÃgpLÄóQåÿþ²ê×ÊÉ*Ý Ãè6#GüŒ}.m«ËíŒc/”ý~š¦5Bgžå#Ý©c¹ËÇûýñõ_åîÔ‘UòQþŒÂ³îh\©ƒäSGT¾$É9×"ÃE†á]¯<Ë—UºKPÕ´®t8`5L3j„Î<ËGºSGöË'`Ú}¿R†l= þ«Ò:²I>Ê¿“YxÖ+u|êˆÊ'®z~Ão^IIFÿ�u5áàç71” ²÷ûËV¨_+'»tǪŠôÀé› ÿ¼4jîÏ0ÍP‡VéNY%Ÿ0÷Å£(“¹=–`{á:¬ÝqžéÅÛÞïw¨ÿ*‡t§Žl’òïdžuGãJ$Ÿ:¢ò±ª"­8×uN§3ں΢â¿öÂ>?ˆ÷ûËV¨_+'»t7…þÎ˰Z/£³  Âuí'Ø;= hŸWÆ0ÍP‡VéNÙ$Ÿàµ`«Iî~m&ä–|…Nß”l“ÀþPïúãY>Ò:²K>Ê¿“IxÖ+u|êˆÊ—$T$·íCd¸È$¼ë•gù²Kw“pÕW¢Þ5Ax†[GÞ…IÜŸä¼½Û{ð2ü-)jîÏ0ÍP‡VéNÙ$Ÿ0zµÛNÀ!s}|Š>k ö[ÝÁŸŸÍáBC¨ÿ*‡t§Žì“o3þܰÛ`µß€³4abNï÷Ç3<ëŽÆ•:H>uDå›ÇÄ/°çè ˜Íæh«ûW\ƒ”48ÃP¿VNVénþ¾û¬ ƒÂ,üö}Ì¿á8e¡ª"™‚:´rH>uÈå{·OšìŽå¸ø6w¼êÈüßïPÿUéNÙ%ß ø;Ž"_æö:J›z0I±äšÃ³îx®$Ÿ:²G>q½4>Ž©óO"x¿¿l…úµr²Jw nœú ?]ÿ¥¹&¬2m„ùÞƒ×päSFâŒG5÷g˜f¨C+‡t§Ž¬’/0±©8I8…iŒÇsÀâÿþx‡ú¯rHwêÈ&ù„‘T­)«Ö¢°âš,­°¶žÅ—奨í Kï÷Ç3<ëŽÆ•:H>uÈä Æ×Ûq-âa†§Ç—ИÊàýþ²ê×ÊÉ.ݱ䜿¢®ôM˜r6£ÖáÅÄ£ëh4›Qo÷ ^ÊN5÷g˜f¨C+‡t§Ž¬’oâW˜÷‘»=²v´æÃá/Éáýþx‡ú¯rHwêÈ&ùæ=Mذê ìµ{e.ØÂÓK8üUÑžuGãJ$Ÿ:¢ò½„ײ&ñçU¦wqä–W<"O°ŒBýZ9Ë]wj~ß0ÍP‡VéNY%ß„•k¤®Ø‘–‡J.ô€wýñ,éNY%ßË4ÖÀ16QÌþ‰ÖÝo‰›„7QEUE4‡gÝѸRɧލ|sqÆkù•8s¡{w|ƒ»}]¸xñº.þ€Û‘¹*Þï/[¡~­œe¡»inÿþ\óµ€aš¡­Ò:²J¾‰;°œû5ZÖ«»Ö†#¨¨9çЋð—äð~¼CýW9¤;ud—|s˜t·á\ç@Èãb¶ö#aoý¯ðëPm¥Ã³îh\©ƒäS‡L¾™ûøîó6<Äù©÷G|u퉸qš×bÆwžxNëüß_¶BýZ9Ù¥;¶ø5e¥())‰¶í…È[[ŽÏä"ã…šû3L3Ô¡•CºSGvË' 0Øš7ß &¿¡SMí¡þ«Ò:–»|¼ßÏð¬;Wê ùÔ•o£Ý_ (‡åÞ‰ñR]]û`üº"Ñß'´„w½ò,_VéNè‡ekNð³¸-wê;½˜‘lXØçJ1L3j„Î<ËGºSGvË)7”‡Ýv.t€ú¯rHwêÈ.ù^`Èõ l×z0ô°xaÏø&ã$Ãûýñ Ϻ£q¥’OQù$9.¤ÍôÊ/<ˆ›$Áûýe+¼ë•gù²JwÂ0ºj÷ ÖÑ¿ßm}VìßoEûïgcd¸ÐêÐÊ!ùÔ!“o¦6+¬¶Û蟙G`¨×þÏø?7û¨ä NPÿUéNÙ$Ÿàµ`k°ê+È?rƒ…~Õoo¼àýþx†gÝѸRɧ™|?~w>ÁløÇTàýþ²ê×ÊÉ:ÝFðÐ= 7N»a³¹1þQŠšû3L3Ô¡•CºSGVÉ÷òÔÐ�×ä„¡›8’ÿŠøï¹x;ÿ4öN…¿$‡÷ûãê¿Ê!Ý©#›ä –C}í]TžiÆ7{?Bý]7º/Zq«ËŠ–ÛÏÃß’Ãûýñ Ϻ£q¥’OQùÌþý ÏãêÏŸáïÙø§=¼ß_¶BýZ9Ù¥»—›Žã>‡©± YÕ±jîÏ0ÍP‡VéNÙ$ß¼ç>³@|°ïÎÿ-\Ökü&N}O%õ€ú¯rHwêÈ.ù&áþî+ØŸÎB˜ìÁ¹¯~_ð¶â*‡ª9<ëŽÆ•:H>uDå›Ç„ã3l(Þ.OX²Å>‹V@Š÷ûËV¨_+'»t7ŒæJ5›a–µ#ØcþáoIQs†i†:´rHwêÈ&ù„‘›8u²×>@®øyÈ {ƒíf|J%uú¯rHwêÈ&ù„Ñ.˜‹Ö?“·×PÎŒ­áïI‘þ>‘<ëŽ÷çJò©#{äc†‹CX#þÌ>“µ5‡Èp‘ax×+Ïòe—î†á¨d«‹ÇÝšJ.2Ïò‘îÔ‘]ò½€ÿV=J×½‚œ¢ÀáŽGíg`67Àî™ Gï÷G¨ƒççKc_Ù$_4Ç…´­Áºò ðH³pIàýþx†gÝñþ\I>ud|¦{~Ão^I‚@±yïÑS·0Zâþþ²ê×ÊÉ.Ý=ÇmK+ºœN8ƒ­ kª+Ž¢Åù7…Šd êÐÊ!ùÔ¡V>ÞïPÏϗƾ:²K¾ðÿî‚/AÜx<x¿?žáYw4®ÔAò©#*_|Ã…ßû Žm8ˆö!*‡šI¨_+'ëux GMa(´=ÎAÍý¦êÐÊ!Ý©c¹ËÇûýeŽ9 ]¿„Û±æÂvÎ7ÓñbÌ ÄIöÀpϿџàdYOx~¾4öÕ‘UòÍ>‡ÿyüÀÂüGóŒó~<óîh\©ƒäSGT¾$¡"¦°x_†¿''úû„–ð®WžåËvÝ þËØ»¹»/ÃO†‹Ì@Z9$Ÿ:ÔÊÇûýeŽ�üÖ² >µµ‡á‰_²QŽx ÛI˜î »ÀEZ'š+>€¹ýܾøY“õ‚ÉÏ+<ËÆ ùÔ!“oâª7lŽI‚ÓŠ‹Qíÿÿ÷Ç3<ëŽÆ•:H>uDå‹—œs;Šó‹QÓñ$á{š÷ûËV¨_+'»t7…þÎ˰Z/£³J\6ÂuíÿàâÿéDÿ¤ö¥Ñ Ó uhåîÔ±Üåãýþ23:AÅ7çÅ ÕnçñME! *ÏÁ5œŠ¹!‰ñc¡­EQmüÌx_°¿É+<ËÆ ùÔ!“oÂÊ5ñƃ´å¡’ šÀ³îx®$Ÿ:²G>Óþ‰˜W1Kr~ò7)ÇE†¡~­œìÒÝ$\õ•¨wAžáÖ‘waZeBÎÛ°­±ñüœÔÜŸaš¡­Ò:–»|¼ß_æˆæ1‡ÉûßbËkÂê}þ,ø/Fó}¯<fÖ߇öê}hr=ÿÛ O{=Ž·ûÅ¿¨?<?_ûêÈ*ù¦ ó·¾˜qÛ16ÍäÏûýñ Ϻ£q¥’OQùæ1qû,N]h•Vˆí ”¬ý€BE2 õkåd•îæà»ÏÚ0(ÌÂoß'©€ø7§,ðÄ)æ£æþ Ó uhåîÔ±ÜåãýþŒ%€¡Îzì®:Þ.lræ1ùàž,šxgà¹x£ì³é<޳3¡+ª–ðü|iì«#ûä›ÅX¿» VÛ5t{†,í ï÷Ç3<ëŽÆ•:H>uDåK’ã"Ixhô÷ -á]¯<Ë—UºqãÔWøéú7(Í5a•i#Ì÷F¼†#Ÿ:0gM æþ Ó uhåîÔ±Üåãýþ203�ç•ïQg6ÃÜpíΤ›+9K'øœÔŒM¦uØK4öU’]òMÂs¡ëd%Qÿ [NÞ&—làYw¼?W’OÙ#_ ûMôø§¾Ÿy¿¿l…úµr²Kwþ_QWú&L9›QëðbâÑu4Škîz»ÑôÜQÔÜŸaš¡­Ò:–»|¼ß_&&{ÐTúº¨“\ä—}Œ óQ\ò>Ê›z0™’•!IŽ‹È NÀçí‡)^O=ìoó ϲ1H>uHåí(_-Žƒœ"ì­ûGË«ÐÐz_–—¢¶{,ü-9¼ßÏð¬;Wê ùÔ!•O0E¿óìV+líwàžIz¨Àûýe+Ô¯•³Üu§æ÷ Ó uhåîÔ‘ ò©mã%¼–0™ŠQwoLÂi®†Õ?wcmÂxW9Z$øÔžŸ/ï}äS‡T¾yO6„]B /IJ O/áðw'¬•ûûãžuGÏUÙ4îyD&ßÌ\( &ñ3öy°å¾“]“ÇE†Éª~ÃË]wj~ß0ÍP‡VéN¼ËGhÅ\uï`Õ |ÁKÄp1$þ9ÌÎÉà·’£E‚Om¡¹I9$Ÿ:dò½ìACa ÌD1 Gu1ŠK6c}î{¨sM„¾ï÷Ç3¤»å ÍKêˆÊÀ ½«YEƒÂ}¨ûö(Ê÷}Öæ“(ßdF÷t|Ó-} ~­œå®;5¿o˜f¨C+‡t§Þå#´BÀ´«áže f¸(ÂÛë_‡)I¢®xÈód|‡35`Keª >µ…æ&å|êËÇâZïà› £Â0•ùX_Rƒ¦î§ “Ôò~<Cº[¾Ð¼¤Ž¨|3ð4‡+ˆï扛8õ=óþšÅSëI|ç‰mOcK/¨_+g¹ëNÍï¦êÐÊ!Ý©ƒwù-y÷9|iþÎÑ ¸êŠW\ƒçß 7W±¨Ï“¡-47)‡äS‡Zùx¿?žÉœî¦0àcá?1Cè¹ó8n¢µøÌcÆÿ;®4ÕÃl>…Ë ¸‡3ᡦ•ü™ƒæ%uDåð²·…U}¾&n zÃf”¯GnA=\äq‘Q¨_+g¹ëNÍï¦êÐÊ!Ý©ƒwù½™„ód5,ÞT–°ZäÉК›”Cò©C­|¼ßÏdNw>ØŽÕãçî{p:Ñv§ï™ÑîtÃ7¹”Ùw“½ß‡Jã­Zƒ¼ÂmÁÍcNînX±ZLz¢…ü™…æ%uÈåc‡—`s=‡0á@åkù(©>‹nb£ÍKú@ýZ9Ë]wj~ß0ÍP‡VïºãÒßJAÀŒçÊ×­ >óØfÊ?Ë’¥QµÈ“¡-Lv^áY6ɧµòñ~<“9Ýù`-É þ½„-XòîIb¯µù‡hÞô*L…ÿ@Gÿxø{ó˜ñÚ°ÿ &sÕ¢ü†ÉÄ3Ë]>Þï/[¡~­s‰1L3¼?ž!ÝD*0£C!ÖU|Ö…Š ¬ƒ¹¤•M?ŠÿÝ÷X²<ÚåÉX ,÷—­Þ,wùèÝ¥œÌé·Kuqßç‡ß/iOÚQ½½ .öß>7ÚÍuhJ°õŸs¡îõl±<–‡la)ýN]-ÈŸah^RÍK|BýZ94æc˜fx(<Cº#ˆT`É;pòÔM ÉVÏSpÕûPªF‡xy2Žà¢{\¾('–ýËVo–»|ôîRNæt7Žnÿâr¶s\üú6FÙÑylg³iô5€·ÌwÅÿb0ï·PY”‡5åv=.Ü8VnÁhÌߘp«Þü)Eù3 ÍKê y‰O¨_+‡Æ\b ÓŒñeNûm …ŠKÊ×rð êo `vò ø&Åׯ¸{ —³ýc³áof:4¯º!ˆX„@�r…€Îvü’²áBü YU‘sh_2ÄD /ðôÊy\OI¾9Œ¹;‚ž$¶nfYlyì¶_à¢R­±|êP+ï÷Ç3™Õ{—{pËÒ³¹Mö;x´ðNGÍÛaÊ­Lî±xŽÞËß öT;úg烆‹ƒû¾Á­$¹´!Q¨ˆ k«:0"¤(Éì³MŸå.ï÷—­P¿V¹Ä¦™Ì=”�†ï5¡"?7ø7e­Ä ø[‹ ½ÜÖÅÙÆÏQ±ù¿°Ê´ÿ8ÿvN‰¿Ÿ» M½™?ueÛXøÕMˆ6¦Â8z[Ž`_ý¯ðÏNÀ÷àI¨BD`ý®ßáêå&þ•PŽ0|§+ÞANdÌ/´2Xý©=áLUfüè¹vGKÞ„)eùæ1á¨Á;5Wá™Ãì#‹8_CaE%ÊKëqorѹ©®?7%‡äS‡Zùx¿?žÉœîâç2åEGÐèÀ<Ù\¸íáÕãÌ[e¾±´FÃ-õâp#*[~ǰÀŸü¼‹å.ï÷—­P¿VN6èNmSŠašQ#tZÌÝGÃ[kQTÝçn…­³?Ii¬§°—­GEûßâ{úO4oü/”´þûž]0_ýý~?|žë0j…—Ï··Žð£¥ÓùGÍØ´f ŽmĉŠ÷»êüã{|»ƒmPÙᅫRƒÊ]Z1 wÃF¬.ªÆÙVùØ·Ún£?%— ½«ŠÌbìQ¬õûP˜ÃŒ~kQ¸÷ |¢—R2\°<ÑÜ/n(„A8ªÞÄêÒ‹ð^Âg9˜qWèŒÍë !ùÔ¡V>Þïg2¦;a�öò”Ôý —o"dÀf0ÜkÁ¾”kúqýâLÄ|wþaι‚…*u$N9Ta÷KðÚNqM’Y[nJм¤š—ø„ú5¡Ëÿ© ý°lÝ ‹/6tAÀ\`.‰Å¹†þ'Ì99(±vÂZk W`Œ óØiMñ/ºQº1Ãý#¬©h¥|þæ÷±ªÄ‚?ìUØjnƒ« ˜¼«Ã| (wIh3:ìÆÖØqŒ¹�‰¿=«Šˆ}ϲ+ht3åmÅáÆ+pú§ƒ² SãOI@æýtµú:>GéMT9Å}FlûÀ>˜Ùɉ*êXîòÑBQ9Ó{§omFìô“VbÍ¥Â5Â_ËÂ3tžÜª>#2öl²Üåãýþ²Ò+¡+ WÍb¤«{êoÃÉ.lnX®& a›âPÝ9Þœ¿…cÝ~xš`÷—gÑj½€3Gw`CÍ-èr~Àu(ƒÁºY@éÆ4�¿µ 9fgø}}Ðpá´ÖK \¦:ëñ'É»%ŒüóžoÐ啎ý§è³~—¢GƒÎUEâØv]ÇÙ£{Pº¯Ö.†gæÓ0\ˆ.„²¼‚ü#71ôâ/8NŸ‚Ù|ÎQ•ò¥ -T–7´A0ŽŒéŽö|x#’ÞÀ<— `›%E/Ê¥Â5Â_ÓyÌøÇ•¦zq<…†–ö£0‘>¼[š—ø„ôº/z`ÿ%ñ.”²NöžçšÆ¤ïOø&Ùšncý=pºc,Åuârbù÷ªp=q6€µ¤9.ÄM׆ƒµ t rÍF4¸ÅßäØŽ½<S®¸yy¥V_øûÚÂw(ƒ±º‰¢|c:çn@Au'¦Â†‹WuaÒs»wŸDsk+,g>CɆcèœàЯ”H‘p¶Øql©ç¸`×Ñ¿ªˆØ—ÇúÐe­GUÙn(; [Êò‰&1<<)1fŠ×›y‘qã&Ó-±|Y<ŽÒo„22§;–㢥kסp{ JJ6c= c3m„ù^LFBŒ ×`‹ýïQÊòmål@Ù'{PøÆ{(Ù²×À¼[„žÄÎ1J¡=Æë•“"  îÞ‹ü`8°´ß1oõ$û¤àþ5ÅÇþ‰Æ{±YœÓLÇpþÛ2qOÈ~ß„ÜÒïÑ4f¬4èUsº~ ·'b'*ÜvÎ.…µzfÆ`Ð~G¬]p:òæa1ëÉåpÛP[ñj.Þ_d$˜óØðug²!¡”le0J7RTlLý°<ÇÐ�•oà­†û˜V[-¶ä½‚œ·ßF^i2Ñ ƒm8t¤wcǾó!†yµT SðÚÎ¥XU$“pž¬†Å›8‹°±g8”x—X†dvlÍcÆ×‹u‡PV²5°÷>OsÜÄx=47¢æ• Rïp`xpLEõ¸7*n:˜Wh™ø.Ÿ½Æ?–“Œ*±+ÌÍY|a`¥o­Þ„ê³?F=Ђí2:û§ÂߊÃek }dNœÖš±QÜ×´þaÅž­f\u=‚ßï…§£‡.ö«’/ÛРW…ÜîuÖRv¥Ö13¾0·½ M—ÐíñÂúo·Áv­Cim\2éz˜m¡ ƹeªÙ˜ “½°ÖîCyÍpÇZ,¥5ë‰,…U-°ýõÿä}‘£ªHà)º[ÄqÓø3<¬üp¶u¤qíø�"Í”]K·ÊaÓhx÷V£ŠGßh‘XSœ'òz˜s¡îõl‰„F “ÿ‚¹è”A9ɲ¿^nἃàµ`ëÖHž4)s$Û§ø­(É1笀ӌv ëlE­4<~ªǾ`{Å•ƒ6† ÛT|s^ÒYÎ㛊BTžƒk8uê™X¼ÞvÔ´?ïÓxdÙÜœ"TÞƒRó¤våÌ¿„³'”ÁÀŠø·ÇÜmhløNõ¦R˜€óÊ÷¨3›an8‡ö nö½àܨñ2å¡ps>Ö•[ñ¸¯;űd*:Þ”: ›; ±®âë˜ö9˜KŠQÙÄ,üp¥r¯Ë~¼Õ¨â‘hXÓP¯ÎWŒ ÷Å5ûÛyob}Þ+Æ$ ’í•Øx7¼+Þ‹0Ñe>ˆú®~IH»Øúìh¸”$T„d >Cç”2\¼Z‹îI7švï×ÍâÚÎòO-Ù‚šÎçá_Xh`¸030€ç²ž!n ï‹-¯}«7• $›uʌϬï¥-Á ÙÂHªÖ¾†RKédÈ6â%œ-¡ †.P´ÙTF“æ"¿ìc|T˜â’÷QN›ƒ,‡w£*Kr[ŒÍгè4úš«qÒ9üÜÓôI0oÌÒˆ/4Nžº‰!Y_å®ÿvUá&ÙHÈXe¼·U<"¡…GCœ a=w'9aL kíõÀ<Ù¾«ƒÙò;F¢,yo ¸:ŽgeÆÈöJlü^#à=%�ßE‚‡¦XC!kKä¸gr¯µVÜ`ÄqkÞj€{NÔ›çŽmYS3ÈîI#_Ûò@3¿^ù‰õw8Só¶TžO9iˆn™ñYr“]f8þú:j‹Â•�f1ãµaª5É z gE(ƒ¡ -6•¬2ÉN˜LŨ»Çrž°Í+w9wc-,´9Èb87ªŠCøìøÐ)à„‡90Bwš¥V…™A¸oý€qþ­k²£û‘Žáœ‡2ðá­ÆæªxDÄC‹R¡>ØŽÕãçî{òÉ;ͨxÏŒv§¾I¥£P‹ÄšF{=ðVU$Û+±ñbx!ŒsïÕ`KŽ‹0°úÖ»’¹:Øþ€gx‰u¨8÷º­'PQ~4NBøx.žEg†«Ç&† ­N¬Yg¹ÒÈŒZºë‹•H(ƒé]¹åÇ ï œf£Å‰Ñ”®o¼ë!¿¡ FêF‹M%3~¼ƒU["ñgÃÅøÿém‰l €!qÓ·»Š£ªØ½—`]<KüÚOSßXÏ<À…ò·äIjŹ®¦ã‰.îC¸ðVDTñˆˆ‹¥B?$-g³ønÔhž¡óä~T¥“XÓ0¯Éš›ª"Ú -‰Òy‰à a νWù. ŒõÂÞØˆ&ÛøfqÜ?ÂmûO¸æLo~¦áw¶¡©NÜšÐÒþoøgVÞ:@Ã…6'Öúºë‹“õäs +>‰û>§ ú–€ûP.t£tS)`ÚU‚ p‹JÈpQ$."^{ç¬,KæòbC¿´áÎTÌÄž–{c˜EåFµ`O­‰/þJb³]Ã/K|– ì…½¯•Ô¡ÝåÃdðÈl3Ã=°ìSﲘìe0Þ[-œ¿$Þ†’*­p´ðhðáRÝEÜ÷I7Ÿb{ÒŽêíMp±ÿÇa»Yœ†´žRA\sù»ÑR÷¯<×)ìg'ÚÒNŠ®�N«Šdbƒ´4Jç%^ /„1pî½Ê{† ªÞù íÞ)³aÙ‘‡œÂq¸|7Ì÷R\‰ˆïˆÞ¦]È]eBNþ.|òÑF¼Qü>¶”Ÿ¥r¨é£Å‰µ6ÆøŒãÛ/vG9Â37zÔ¾ÐÅâÉrf1TÝ­“ §nt$#º™Çäƒxò2fS)üžqB ÿ¸4/àï>‡/Í?À9Ê<HŠW\ƒçßoT‰Ì¢…{£žÌa¨íöñüJË°Âæƒ¡S ³œbÄ#¤Ól e0Ê[*)“¶GCüu¬oÑyl§1^ƒa×mS޻ؼ>åÖè³~(.º_EQCÊK`højªdc%6 /?ðä½Êw†9××( æ2›Ãˆã0Ö®. –ª|Q¾Ô*‚+“˜Äù³îFÅqpÖ¡ÌêŬ» ,T5M´8±ÖÓ]ßÛÞ2>Á\k¢íDå6l †7ÌÂõ Þxã ®ú# ïX&á¹Pߥ› À*qÐéöÒá=”ÁHÝ0÷µC(9ü¹ìÙšO|ŒâM§ƒýQð·aߨwõIš2ˆz>Yœ\ˆl…õ3Ž—¸d[[qÁ¼ SvoÔ- +̰YÚN©Ëá,Æ<?¡º \Ãf6…2ç­Fˆd¨Ý¸.•à3|²ž[©¡ÇE�33)^+Xž°$dPõ ùïàœ… <@Ó®oáV³GY«ŠHÑoƒ´4ZÍK¼å!2&ï"=¼W™±’ã" óÎaWí/ø«ï:j ^ ÏCSðÚj°ß>Ò¸™sÕáõU;ˆB†‹Ç˜t~¢Ë’sª=±ÖÓ]ßkézn/AIILÛoEÿ| †‹ =*.J6@bûÑ,.Ð+ÑÄþûšc*:vb8e0T7lã·y…Û?Û’Ã°Š‹¦¥ f<P¾nÍâÍ£ØLù‡`¡B–"ŽÇñwì³c/¢u*K™j3¬¨™q£¹ôð8ØŽâõ¹bß}æÅMÈšP#½Õ¨â‘-6®K%ød¡.Üöh¸NË‹2€!Ç8Î\Áƒcásr !0ÚµB«ŠHÈúJlF^£Ðê]¤‹!ž÷" alOQ‹[Cð:š`6)§6f¦G]ÁV4¸§‚?œfä±µV$ä&øéÊ@#ÃE<Ò=±ÖË]w»ûÅ©V ¢lßàÔ ¿¼sˆ½þã+Ðß9ŽçP#u3‡Ñ»wñPÕÃe-…XWñ5Z6¬ƒ¹¤•M?ŠÿÝ÷ "Mðÿô=¬ÈâÀ}žŸq,CŠÞJ ʀɘÁC› .v¢˜ZĆf¼è¾X‡ª²R”V|Šûý ;¡^dG(ƒ‘Þjìo«MD–¥a‚Dr4Ù¸j‘à3xQÎ?Æå=1 ƒƒÍ„µÕ:'pdñî×l¢N®¨Œw× =7HK¢Á¼ÄmB?´yégˆ—Ó¸- jmøy8™˜1º ß}Y‹ó9®:äåmEuË=>æµ ¢I¨ˆ~'Öé?âáÇ/6'¦bþ~Z5Óƒ/Âÿ‹Emâ-ÑB7`¨n´H¾È&ƒœ<uC2qÅ|ýç°‘Á"{IŠaBÎÆÆ ‰®Û´²z§7šÀ°¢$©Bø e0Ò[* ÐdãªE‚ÏåSéE)xaݱ9lø^ÃÖ~^ݽ´ˆw×#CY4˜— 5¼Æ Å»HoC¼¸–çµÃdÜOb¯1‹g=böépÖ£œ…Å„^ h”œS퉵žÆ-j¦ù"ä=”ÁHÝ$ÙT¦¼1a1ŸhµXð£ÊXt‚7Äþqé+4Üü—< ™«Ã)—¯‘0OÆiÉœgC›kH¾‘HÈ žxžˆÿËŒfN´Ýð¨8mÐb (‡ÿPã¼Õ¢º¡ŠG„­6®1yšQó¿JP™NÉÒ¸háEÉæ¶n´-rƒN#O†RØÆZm¼»ÞÊ¢~^2ÒðBƒï"= ñœað_ÂÞ’C8ÁwÚqTï…~Opu_ÞØ×¢?¯ì}¤™ÞA•åÞŠ)ª‰Ç…úk-Œ‰ðÁvÌŒó²ë¶À\º-u—JC_„zêF ÕM²Meª9´‰E'x$€¡ÛÑÔjU‘ˆL<³ð·5ᇾÁЋ|Õ;¨s…âÓ‡ òd("[CD9u÷V£ŠGDTŸìé™g€%þìÂH ÉšB©G—›€¥Ð"ÞÝ2`Ô‰ 6A¢%ð £Pû.ÒÓÏy¿¥y…ؾ(ßì·öa>ÃE09çº 4ˆëÙèZÏŠÍ;±!XR߆kî/¼eŠf9.„@@|•JðÂÙŽ_R2\èé®?‰ÇýÃ1SÀ¬û v¦ê`è‹POÝh€ÁºQ¿©d†!•1Ÿ§ha” ÀÿS ì£92‚­ïgÔ¼Q ¼°dMç>E黯c]ùx»Li—'#}ØØá9”ÁHo5fP¢ŠGD¤³©×5Ï@"/Õ˜–t³adµ1-âÝ FˆA5öÕ—¶A5‘Ÿà‹tßEzâ9/Â0Úƒî‡*ß×'è8Ù€1$s®ÓøØþ4üÓÊ@Ã…0|§+ÞA΢T™¸ˆM¥;êé®ïÃOvü)Ýtø½ð´×"?Çœ¢G€‘/BÞCŒÔ ÛTªM¾¨E,:Á'Z¥Ä>¦:O†þÈóL|‡35`KeêõÕ•Á{({þFy«±~Cˆxh°©.²õÊ3ÄKõÌ’Ï®%öèÒs‚úxwÝÈöòFÊOƒžï"- ñœaº Ûј1‘^RwaÌk­aù±>6N'á¶ý'\sIKᯠ40\LÃݰ«‹ªq6Æ…Åj»þ”z²žîú‰NÖbcÃi¸:õ"̆P£t£Í¦R}Ì'Á'Z¥Ä>/O†û/ŒrOhlž žCŒôV›£ŠGD|4ÙÔë™g@/U=7ÙŽ¡F ª†¥ˆÌ£Å»HOãçEüV”Ĺ紒ºO8PõÎgh÷NA˜}ËŽ<ä~ˆÃå»a¾g| ·L¢á‚Å9ïÆÖˆå_Ê\�©=o-NFáÃ%snÞ“l:Äæz8”%'Uzê&ÛI°©L+ùbµ1Ÿ—h‘ 10Ü‹kÿ]sãÏð0†€ζN<žxÌ3ÁK(ƒ‘ÞjTñˆH„F›zÝ<úðSS;K¼ýþôµŠ7RöReˆãÍ{7š<´¥NâƒiÔÑ JF©•‡ï"-Œ‰à¼ƒÿ Ž;+¹g±]8ÒÑ’bR÷9××(mþSüîF‡±vuYp%ø,¢|εwÑ&9çÈo0ïù]^é‹î)ú¬ßáRJ¡"Ú»ë³ KËÁƒ¨¿õC¾ÿàÿú&EIEYÇÃåìAÿX¢-¼A¡ ‹`ùZŽ`_ýMx‡¼pÿß'¡“åÀ(ú]¿ÃÕ?J"Š*£Ûa2å¡ps>Ö•[ñ¸¯;sM0F¯áÖO¶0*Ïï¡ Fz«%ò[Êa4Tñhù"®E%¿œ€Ó~;_LUÍ Zx©JBH5Ošåd{ yCå'Œ„ß\†œa˜@ÿß±{Î)¸?NÙ[bþÑ9ìªýõ]GmÁ«aƒÌ¼¶ì·¬¨9UÃExa¿è%ÇZª9.ÄŽ¢©»~H¦5ÅGq¶ñsTlþ/¬2mÄ?Î%.\Å)“-wWÖ¼@)”AÎü£flZ³ÇÎ6âDÅ{ÈõRðïñí¦#Öï^G)7å‰ì†…ÂccÐÒ=¾æjœtŽ?÷4}‚wÚyõ%ˆ‹Èë—p{"f §y*o\ž =OP´€Ég”·Z€* `ø^*òsÃï+I+±ÂþVrô4 ÄóRý7ÜGR7Bêš<4Ø!•·,â:©Mö;xÄÍaU¶—7R~Â(øÎeÈy;­nÉÁ¾Ø|n´+DNªÞìÀ¶i—¸ßa‡Bµ¸54¯£Iœß¾DË¢²ÓËm’s¶áБVÜ•ºëÛC §cÕÌ]ÿ)ìeëQÑþ·(ÜŸhÞø_(iý ö=»`¾úúÅNãó\‡ùP«ºhÀ‹+M73ãÇu(Ã,Æ<·`i`Æ”´´ÿ[ÇzÂâfÏþÖT´c/Ðßü¾¸Ø³à{¶šÛàêNæã¸Èm9F"›†:ðÙñ!wà r`"0„nÕ Z,"ñòLÁE·Þ†Y=OP´ÀHo5ªxD$`î>ÞZ‹¢ê¦ƒŸ¶Î~¤`¥«a`]Å7­á™=1íÂN/uKºñ=ÁLùGÑáçÀSIÏ“Ý%ÑÀ j¨ü„1ðŸËë" ‰r\älCCª98‚09ü“+ܳI˳ã)v‘¹:†vì…™“ƒk'¬µÖ°;5cÇN+˜d™{f®=ŠöbLù„d¹ÀÐ-qr`¦sÖ£¸¤Û ó°Z·EBh³²R²ÓåõAÃ…ÓZ‹/r¢"`ª³_¤´°9‹ÊI2îùwŠ2±|yïåñ3¨¯ýj^¶lyßœ—,Î㛊B¤|*:Å`¿k3 ï¡ Æy«‰Ï–*ñvKÞWÌæR[GéjðÁ¶· ‡OHªNˆíDå6l &M¡´ ®ÉC—@€½¼�%u?Ãå›G"ûlýìÓ½D{ d{ yCå'Œÿ\†\að·ÁÜp÷dû=x8<“Ú|OÈÐÀp¡…»³Ö0ëà¨î ½0sÞ±n?<M°û˳hµ^À™£;°¡æ–øzM‘À(uYQ¿·(ä*•S„½u§qÂܶ² óдa-ŠÌ¿J¼,f1ÖÛ‚Ýûôy‰Í¹PPÝ)Nƒ!ÃūǺ0é9‹Ý»O¢¹µ–3Ÿ¡dñ7•lóx査$ kh®ø�æö{pG?D–z E6ÏÆ¢/ aÆ7s^2&|O­¡ òŸã;e¸†;^–7G ñŒfâæÿþ·ØòÚ‡°zSÙüN%¡ †x«… ¬‹RTñˆ˜ÅHW=öÔ߆WbÔòûݰ6\Mq=¡§a@Ü”®GáöتbÛoEÿ|*† Ý’‡.ÓÅÖæ G€ n<t<Ù]- ªFÊOƒ¸–â0—a‹0°qr÷}ƒ[Þgð¹ÿ_pî÷Gý=pºcŒrÂ(BÃE¢šØÒrwÖqym8XëÀÐH*×l Æ¢ “`;ö>òL¹x{ýÛ(µúÂß_‚ù>X¶½&ÞÓ䂯+¿‡7és˜[á›Ú Ûë‹O¤‹acã†múa=x Ž¡8*ßÀ[ââmN‡ÇV‹-âÂ-çí·‘Wšª'L’þ»ÐÖ¢¨¶~šd² ñÅáú…â ²ôD3Úƒõ®Ìö_¾õ¯„ž­¸ðªéx’d Ïa¨í <³ ÓÍ0ÀPg=vWGoJ |#à (”!1â¼Bˆx°ëM¯Æ¼cÂ-NÝ øÛÝ/Î|*&p´Áj½’ùŽÌ£åÓ葬I#ð\>‚‚m– ä×HNv—$Ñz'=ƒªqòÆÀc.ÃÐõ¸-œçóP|ìŸh<±›sM0ÃùoË‚y*ؘË-ý>Åu!EÃ…jwgönѲ䠸iqÛP[ñj.Þ_”¨qÎcÃשf§`“´®kgq´ìì«·¢ËÃ,yF.^àé•ó¸nt¹0W})¶Ö]•¸Au¡ãl6”6àWöóÝV9Ô¦©÷…0Ù kí>”×ÄY¨ÍypñëÛH-W/Û`œFó}¯ÄŠÌZÚ«÷¡ÉõDüo+Wãí1å¿Îa!CŸ£¤Ù:•dÌô ¡ˆmÖ£Òê‚÷Ñ-Ôo«JbíO´Ð›F†Yaf�Î+ߣŽX5œC{Z•8Œ ' P†EPÅ#bI´Çk¬—ŸØ<¬¤±Áhbt02#ËqтҵëÂ^#›±>‡yl„ùÞÈ ‡³õŽFUbEÁ_.Ã1…Û" Cv”­9€vq(ô7cãª2´þaÅž­f\u= í+:êqèbjòÍ<ƒïùb­ ý¸Ó?þie áB wç°5Û’ƒRf1ö¨ ÖúC(+«@Yµ=£¡"ÌŽ‡PJÞ„) K§n^Xw¬]¼©‹m¦íh~¤Ô¥'â‹üâEü«Fá1Zv~Š[A+ð,F:£`…ÕJÎ~˜G@µÄh^KV¯Zu5¿†=(Äço­Nâ þ»êꉉž@ä"¿ìc|T˜â’÷QžFU#à (”AU<"–Æëÿ}ÅÜç¶á\ª‰ÚtõhÐÀè`xÇyÌøºq±N\§•ìDEM#ì½ÏWîû› ª„*XJ� lý?ù&ÛД�œa` 9ÉAN3rØ~ÍÙŠZiž©Nû"Å}…ÿ Ž™/£;Æpt§ù�Þ3·ÁéÇô ñ ×&ÇÅ¢ºÐ Ý,iÛð¯”Ü`ô,9¨Á“ÅŒT‰Kö¡¬Z‹Â½_àûu)Æ–éÉ<&:O£¾ó±Ä[!^ã5.Û˜BÉáσ ÈÚ‰Q¼ét°ÄäܯaãË»ÝâÝÙƒ$”A$´€ÇOî>Øb³Çá4×À’°Õ!Á^í„ÉTŒº{줕ål©†Õ?wcm™â`d8ס Ìm4RñZÚá\2¯‰R¨â‘ ‰É™ÒÈO¡£GƒFæ&mXÇq<pû“¿«…¿ÑÓ3¨Ó<ÀdP%ÔÁxxK ÀyF_ð:§Ä53\¼Z‹îI7švï×Í?Âjù'Ž–lAMçóð/,A¢Ê$ Í„œ¢ÀÁCå$á&Ç…~%µ@ìxþn´Ô}Æ+ÄÉýìD[&â5Ùز+˜Ô”·‡¯,,¼…©qŒn  ½>¼œ“Ë‘Vé4Caýwò ·-NDVrVqÓ+xëƒýyËÏOVÌBgy `Úù6í=‹[]mh({S|޹Ø  ‡Yk¿)N"·Äþ¡:™Y"˜aå¬Úb ¿h#†‹!ñÿy˜÷²aè&Žä³|&¹X_¼%Û ‘·z©¼&J ½ ©â‘l•UøÆ"ñâ²Ô£"#*[~Çp*UOMŒ,1Q ãWE‘5ÉÁ„1P y"›ßmZ¤ÐÞ‹0ÌÀk­E­c�#ŽCXóVÜsâ¼è¹„c[ÖÁ”Ã’)ïIÝkÞÿ3ꚇO²eíIûQlor†×¥Wa>~=¦<ýòC£j]©õ,9˜€tÜÂÉ´Lyïbóú|”[ Ïú!rW½Š¢†žÔꮫ!0Ÿë:Î݃Ò}õ°vy‚ñˆ|.´(f$s½{WžWûÊ€¹È6ž[$IVg}è¶E櫸Çu€ÐftѼ”v2³x˜vÕ£`CcxÍ6»Ex{ýëáÍuJü‹˜b˜ŠN¡sÁË‚y`ô ywµ.98¨â±4SðÅäZç©û%xmg+¼©t ]=´2:0ã° “TE‘µÐÁDæÉöòqú/CBÏÇú¯‡ Ð"%€ˆ¦¹ Åù…÷" â¼î¶ž@EùQ\tÇæÚ×'Ï¢3ÕÚÉ>¸Ÿ,ÖS4_£¨‘[8Vp2¡xÆ¢IŽ õ®Ôz–”¢Ðý'X9£$är>ëAó‡_ÁÉ6,hÚõ-ÜÛ_°EwºÄNUÙn(; ›á¡"•NS Ó‰WðyL>x€'I»é,žõ<XöVÌ净¹Àœø¿¡´´jꈋ>]“™½€¿û¾4ÿ�ç(+qX$¾4kÐâü[Ù‹’ÀNd¶`Ë¢Úó³’ª''X¦ŠG„„gè<¹U-©ºëëíÑš3³³j„UQô$ëKÈûÄa=~î¾''ÞiFÅ{f´;ÝðQµ‘@ºÐôÈe(΃˺ƒ„¸† ÉÞ$xÀžƒÜ½WÉãbiÄÅ•®ÔÜnû#æ…+v¤™ê;Œj÷q€:¾Àq–1_ÜèN8>Ç!ÇxÙ.˜‹Ncݦàµ3¾ªˆÁ‹õ®àbÿ—ãBÖŽ£²xÜ++soöó^ûgØQQ‹&{7<ÃJ â4>†ñÑLåI`ˆ‹Ë“Õ°xS=»eÌX‡Tà¤â[Ô¸¾Æ¦­uøe¡¾û=tw|Ê ehøõ®øs¬GŽkê}Aˆäøñ‹Í‰©˜–VrÎ Ùl\ЛL†b¤IÖ—O”£EÒr6£Ö¡G8a ñrŠˆ›åÔ“sfS.Cc‹0ÄÅ {K‰ûÖ{áO|ÍÆÞ–Ëð/óÅ€Ž9.´p¥Nw-Üæãòž·âÔ06amuñSJѼT¬–hµS‚®à¬ÿ&Êq!m;°ßÚN–>D3ƒpߺˆºªÝ(«ªƒÅáJëDH¿< ¬lß”3ï¯EsË*˜òÁ’BiÔÌæqH wÄÅÇSën¬Ž£[y{›šr8¶Å¹‰*-C´HÎI$&Ó¡i’õ%ä}¸Tw÷}RcªØž´£z{\ì¿}n´›ëОyΈ¥I´ÏÛ²ÉeŸÌaX¿¥y…Øžho"<ÁÕ}xc_.–† ©u¥Öfv*¡Òý'Xòs3*›~”…²ØÚï›’‹”x/kä"L WpÊq±rˆÎÇÊKPv´ öîP¾˜Äè™'%ç,ÄºŠ¯Ñ*™W¬Ös0—‡ç›dù7™Ïã ‡çŠG"·qªþ¤ ìEí§§Ö⻕*-C˜«½çec¾æÒm©'çäq2*¡¹¡i‘õ%äãbóÝEk*aÀ‚û!ãG`ÇvR‚ée{ea.ôÐoÎÆÜ¸Ætf»ŸøÞ&á¶ý'\s ¦¶eŒö û!eah’ã"0>¾èÄ==´XÀ§‚R÷ŸP‡ns>ÿ+Óðî^%.ÂjŽál«ô¹‰‹°ò ˜m.aÚ¹‚ 3p^ùulcÐpíŠ eDv0™aºí§q¸d;Ø'Øøé™'Í+8yêfLL¢8Ö{J¡äqX€÷ŠG,ÍÿÅã—1zÌšRˆì”‹*-?&ñ¸8æy ˜uŸÁNµ¥L5Ce¨…‘ ÍÅH‹l/!¿TBöIüÞ¾ûïÿ ÿ‘Ýè™Ë°·=¬¼Áè9gM8PõÎgh÷NA˜}ËŽ<ä~ˆÃå»a¾—šŸS¢äœR²§š£:40\ÌaÌÝ쀶nŸØ5ÅÍdì¶_ÒeH¼€wÖ~‚ÿ£C¬tzî?~\¿x1ƒ63᢬\»W%^„}P÷»¸­Òm\Á…É4•²zæ¹È/û棸ä}”S]ó,gCèYbú˜ë¹ŠË ³bëŸ'AÄ¿"EÀ g;~IiÞ3&Ã\W<ZÚcAð·aߨw•Ç?yƒ-O|ø©ÑŽ?e›T–«¤ù9æ4rf‰ë¦…Ü6õh²ßÁ£1-`kjadBsƒB1R'ÛKÈ/•ý%¼_³u×ûø™ËJrDúˆïRÝrj@ûšM܇^A·O¼Ž0þÛm°¥ã-¡ãœ5'®ÑJƒ‡ÏsqÆÚÕeÁû|”¦æ7Ç…¼E‡Ë ,Ye Þ©¹ ïÌfY°#÷5VT¢¼´>EK\ˆÅ x :4{¹«vÿ12‚w÷ªø‹°ÿØkðFZ‹0…¨v_²–0™ŠQwY}YÖíjXýãp7ÖŠ}êšg/ìÄú�Š+ÇäC%7:$ƒ¾y„á;8]ñN(i°¬¥š#‚—<lÅ[Å£<t5\H7–Tñˆˆh=±þHÑØ?¼Ö¤EMB- LhÎ}(F¶—ç¼j ¡ì]ª6—¡ž)†á¨ÚŽšöÇâïOã‘e7rsŠPqxJSöbÓoΚt»jÁ_}×Q[ðjxßÈ ,Ô`¿} µ5AÂ1-h< ÿÎ2Eà ó8²R ƒbçy«K/Âx)qU^ ;´&î?⋦² ßX$ñ]–zTäoÌ@Lj"÷*­KÅ*%Ñ"ìäëîöª…+8ë¿ï`Õ |Á_ˆ.†Äÿç7a‘ ‰^¶±m #nyX˜ÇF¬.ªŽ µbãû6úSðxËãÀMÅ#c=¨â.™›psÁC*Ô\Yî­ðW–B€½¼�%u?Ãå ‡ 3îµ`ß~•y´µ04¡9ï¡Ky,ð^B~Ü~QËIÈšp<"5Äw‘ê\†:¦˜s¡®´ýb‡F:Pµö5”ZúÎYK¡çœ%Œ£·i—¸ïdûÙZÜš€×Ñ$Ž¿/Ñ’j Êq±€† –<ò jôu|ŽÓ›¨b+бÿHŠîÉzvh-ܦ0à‘w.±#Þo,Ák;[áÕۺ׽ŠX†éfü&Ìœ°9ûS½O3,ìÓr0íªGÁ†Æà÷C†‹"¼½þu˜ÒÈ–LðˆØ?~:ǸôŠ‹Æ²:É‹,b¨J6O‰ ½€ý€yûìÆÖEù)DæâK7üßK¢—|)ÀuÅ#-J¸)…* žávËYq­£Â­9à„yksp¡.#…z"´µ04¡¹ˆ0‡@L(?d{ ùø#²&YƒË�†n_DS+§)Øõ.3ýµEáµû,f¼6ìOÕ«ûœÀä°Jc©0 ¿³ MulœqVæ9ƒh`¸u¹#àä;å‹¿à8Í’:]€3X²m)wèÔ“Ô%B'÷qñÑyr?ªZô΃ .¾¯_Âí‰ddñ ñr\ˆêéoÆ{åvcH“-ìÓq÷9|iþAì¯pÕ!¯ø.ºÇ“üÁ?â¼²(qpº† =ÝõEùF~ƒyÏ7èòJOŸ¢Ïú]êU9 3ð^ñˆÍêK¸)ƒ*‰ÐÀ­Yè‡åÓèç Fà¹|Û,ðªzš„Z°5Q Íy'ÛKÈ'ñ‘µÐŒXðž`“½ß£T\{¬2½‹#·üxá½Ó̈ÖâLñÐWç9‹ÍÏ·~@“II€¯ ròwá“6ââ÷±¥ü,z3a æM A“žL²KFhsÞ9òBÞ¡µØœ겨F.¾S!žÇÅ¿ðkÓ¬}½.]Å£…=‘ax:ê°eõÛØÛܶ¢£ûØ'I âøÓÍ]?¼ñ7¶SÎqa¤ñ€÷ŠGìÙ}Žê³ÒV­åf[Š%Ü”¢]ÒTªx´ÌЭYq3ž”®]Þ@nÆzVŽØ´æ{1Þ¡iÃ{¨E¶“(¼6[JÈSŽ‹•ç)‚¼Ä°ó"ÌÇØZM‰7‚ŽE„g¸uä]q­gBÎúÍâ|½ …y¹È¯¹Šs¨àµ`«éUÕÝÁ¨ø;gʬ^̺›pÀÒ¯rÎÏ.´3\¨BÇ͹Ñ.‹ªa‹ï#¨øæ¼Dþ󸦢)×OÖ“/aSö]î_‡zb¤+8‘u3{&]tOÁïlÁÞu»“.tt×ÛpèH+îÊ ¬=ÄpJ/4c|W<JRÂíƒoRL(¦ªxD$@ ·æ ó˜ñuãbÝ!”•ìDEM#ì½Ï“l8Ó€ëP‹lg9”ûžÿw\iª7‰JòdÙç)ÄYOu%$ Šóž&l0m†¹óIÔ0Aos%ö¥˜œsÎU‡×WíXÈ=2\<Ƥó ¥Z™d™ÀáB·Íy¶», ˜Às™ðâËçþ·ØòÚ‡°&,ã˜)|¸ToÅÙIL¦êhð"–?3ýè´µ£3©‘ äÕã™ÒãÔ›yšY`ûëÿÉç¦4 oÆx¯x$ÎñJ¸ýç2ªß(Ðß°Bˆ¸háÖ¬g‚Äø×ΞrŒYŒynÁÒÀB–y‹Ïöò’þ›³eŸìAáï¡dË^4õRxír…ë”�šTBүܻo-�ˆ"-‡ºd ùéßQW°uÁ³7à4#ïí·‘1"?]pb¸Ðss®…ûŽ.DŠ`¨³»«ÎsÛ$NFF%dÃ\Á‰•‚~§ÞZÞŒ4ð^ñ(±~Mù§ÒŠËMªxD$C|oN>Waà×3Abük§W®ÓÈ<Zœ¾êI–—gùU¶æÀTT{£âóg‰bˬð3O¶?ªË¯Bð ¯)´¨„$¾oõ* L:Q¿i'ê~¹ör[÷uœ­,FiÃ/ÁŸïZ?Ç¡¤ÞÌðӅᆲ‡ÅùWòò¶¢úâýç}©á"ôŽLxÏÆf/Ìøávþî%]Èâ%Àc/Ÿ=â"ó8î«ÚœkáþcdL"‘-\Á$?•1ƒ‡6›Î®åŸèyêÍ oj=ÍÚqÛÃäÕ®+‰ú½Ôˆ¦ßîE Î{è²|Ž#v¯ÎºaÏ–*z!®ItK˜äÚ)—ë4pͤÉ髞$ÒM–”g9Z^ωæÉˆ.&ÿ¥.á=±ÌÑâ &ZTBЇFE„§VìXç¾cšiS3éyž²LÐÀpŠ™+4½‰ÒÍhw ŠÝSÀlÿ%ì[ÏJ.‰Ä´T©%-y‰ÐÂýG?"B b¿Qí žd2•µ•çŽE0ô<õÖÈÓ,®ñ@”Su¦î¥H`ôã&ÇLæð'šß;b\®RؼB½` ÿƒçº„Ch‘|Q\33ã|d½l-0—nÓͤÉ髞d{ y6cCÐûF„.òÞÄú¼Wè Hë{:¥Ф’ž<Gç©oÑ9ݧÄmнYVšx\Lu~Ž’fOhcÌô ¡èU±£¬G¥Õï£[¨ßV•d¡¨Õ"/Z¸ÿèçBD¨õµ®àl25ãØy‰Q*n² +OK’ÙÐæJ³ïÙO¦O½Ó Ó;Sw2?>r̈ò-ò¸pâÞ¯gP¾ö]Ô¹Ò­“TñˆÐ=Ã!´óHœÇa§Þ^z¾jÆ2(!ÏJpW³åwŒ\¨Ë{ÅÕ? ï cÐ3%�ß•„17Ú-\´Ý'á¶ý'\ ôé¢á‚HVK¬Û3ðZʰzÕj¬«ù5| È&Ëê$§“^ä)rÿ‰É¢Ü܈šÿU‚J•.DK/ŒFDqâ-­12ÿG¼Iº®àIÂMvÖéOdzzkQGÏLÝK!Ž?®+±÷N<ÃÊ+X¿ïúƒ†(½ÐâÙË“�&‡Ÿ…Òƒ[ð’`kŒâ;ìÁÒžº†Chæ?ƒ§½ùzçqàþô•JÈÙ†)â¡Q¾>aîöa¹hG·oFüyý·Û`»Öƒ! ‹˜p êÏÐî‚0û–yÈ)ü‡ËwÃ|o4ü¥%º…‹·“™0.ïbfÑÈp®ï+ªKnªÜ}°/Ä?ŽÃi®Qndž#³(³Í^a4Z``,«x·ê]ÁEýþÔûcéKl}?£FÔ)%À#ô#ÑÆZl){,°„M:eê^Þ+‰ú½ô-,ä¡d™qÇÔâÙËa\››aZ·'š¯Á5ÄÆÉ4ú/Äúp’]ÓRžº†Cø4(×™h]°þÐÙpÇ÷ékBÝP y‚[´H  ç!ì0UÛQÓþ3â¼÷Ȳ¹9E¨8¼¥){xéw;'ê®4X²~#ŽÃX»º,Æ+­*²$~+JbçŒEmeä]Ô$TdÚù6í=‹[]mh({ST^.¶CG˜•Ηµù›šÑŸD™ ¸#Ò Ê3`he¶�Ö+ŒF ŒÌÿÁ6&j]Ám0LÈÙØH 9 cp‰}û+‡W|kØ÷†)¥á±xŠ®ÿïIoüvjðÃÙÖÞeNP4BÄ¥‚°gKˆxŒ óÈ4÷E¶‰fzO£ˆ-Ö„µ÷1u}…m{’„ è¡E¹N.™›pó^ô½ÌšëáNakRÆñ ×‡—s1wÀM9W*!Od¥Ðë–%Œ-m î1C{É×PjéC@jÈ]ýaçîÚ_ðWßuÔ¼¾Þ¼¶ìOZID‚ÿ Ž;+YOˆí ”n¬Â©‘¹-Uãrö¢‰áb.ð÷›? —ä[‹¢Úø™%{Ö‡n[D¡ÉÜ•YæþrÈr p”gÀÐ,ʼ»ö™ÿ#ÑK8Wpñ—¾BÃÍÉXN÷_Õ$ѱ|½ØrRµ/‰aJ/ð¨y;L¦<nÎǺr+÷µbg® ¦¢ÓèÕ—@Ä%ɳ¥ŠG+¶ž(»­éè×,´!5‘õ8×”Õ%^[è¡E¹Î—›ÄÿHÃk[ÚáTäNž.> ʹê‰@%ä‰,C‹”�ìßu:„ˆæ]f8þú:j‹ÂùÇf1ãµaÿþTCçt<„÷D½M»+ÎɦüZÜš€×Ñ$ÎK_¢Å™<ücéôÿ;_MÁÝøqêá&Ë /െÇÐðß6Üx8ªàÅÄÞX7Y`ªÕ¯W¢]••|ÜþE'¤éYßÌ¢œ ®}Fåÿ`Fµ®àâ"b¸×þ[”‹k‚_´6\ˆý7^UÏÏ8–¿!Å0¥i¸б1è†8¾æjœtŽ?÷4}‚79ÿC‚gKÉé {¿]‡W™»û2ü‘‡8}æHâÍ©g8D¢“ÇtÊu^+ʯºœërE ƒj|—zz²ÌÐ"%€ž‡°’ùÆô.ŽÜòã…÷N3£e‹3Åríz²ÜF*ÂÓü×Ðd÷ÄÌïÿA{M†kÒì@ÃEafî[QWµeUu°8\ð¥ìúÀ ýöË*†bªŠLï¨Ìþ®‘õݰ,ÊI¯\¸ö¹@ûjWp:±&REÃ…aJÂP>;~#d@pàÐ!&CèV]®•PNây›*­tØ'ö6;ÐÕþ ÊòVcÕêáÐqqëûÖêMØ4F&A˜C &B4(×ihx­å\—+✢ڠšÈ°Ó(ôd¡MJ€¥QãAÈäx®mÈ•¢B:‘(ÇEÎ64¬€„œR43\D wâkgq¬¼eG›`ïö`x)·û@?¬åùÈ/;Œæ8öñä™LÈ-mGÕæ1Û­ïɯdî7t¢tbM¤ÀKÿ×\èñMŠ}%Ìôï¨ÿôg…Yüű/LÉÕ·ô|¹À x/‡éÅ´µŸ¢sBõ1Ax¯x” Ô"#§ìÙRÅ#">ÂdšËß‚)¸ðÜŒZKj'`Öw¶È{þšc† " Êu^«E9×åŠ8/©6¨ú`;fÆù…õ(k-0—nCå™$Ÿ]£Ð“å wP•@¼Ϲ ƒÄxg,¼-üm07\—ä4bÍÇ£Ñ /+ RÄN0ìA·ý4—lÇûcñ“$á²Õ£ª¬%¥{q¬ézÈu_ZYßc:´åÜÙ%à|ñjèEèÄšXfÈ:„z—´?0O±OqHñK6€¡ÛÑÔj…­Û‡Yæ½Ôß»í—4”fñÔú *ÿ)Y0ŠÍv w¼‹.0£*Ï/Òõ? L0oSÅ#Bç »0s––Cå-Êu^›È#€—ŒûÙ^B>qòÖ)‡ÙËe8'þoÈ«AZ5u8ÏeÈÖ_z/‰¸'q_ûoÔ™¿Å“çüÎ븬ð²²ÐÀp1‡¡Žô,ñ2›ë¹ŠË†”ÇÓÂú.éЫք’˯GNînXé}"ϯjãàõÄÈŠybMdÂàì?$éÓ³n4íj€ë¥ÒN> G Þ©¹ ïÌfY°#÷5VT¢¼´>u£d`�·ÛþH1ŽSK˜a€çŠG¢|¶#¨øæ|xAÄÚy|SQ(.žôöV‹·A ŠG„ÈücØ•£âXŠÞ¨'ÁÆ?Ýr†…×ú4(çª'FV´0¨úðSS;KÖ£~ÿ�úÚ?M#y+‘]DrÖ¢ÉÞ Ï°Ã…ž¹ 5@OïñÉ>¸ŸÄîgñ¬çALûÄÌ?jÆ&ÛnÄúu{a}ì†uçëâ¼¼ ½+Ë\¨á‚-® ¸ò¸üÔMÖŽ£²ø�¬þt;¦€Îvü2¤æE§ÁK‚e¬Ýô*L…ÿ@Gÿ¸xÇÁÓÌX«”,X¼¶@ÑÂUÝÈk"»‡óä1XŸ²¥»¸�t~V¯Š>"Ix% ÂQõ&V—^„7ð>ËÁ,8QŸã¼â‘€™<—= 9LÞÿ[^ûV] 鉿mªxD0˜7êܲԡªl7ªê,p¸|i$nÓ3B¿rÂLlM71þY´(çª':V/X6§¨5¨&ZS¯ÅƆ?8Ð/¡üæ2Ô ƒžÞãþKØ[r'í‹w Á-Þ·ðW÷à}mÑÍ1̹ðÖF–CDœËúÎáÓwű& àù»\9hd¸HàŽ+keI Âðœ®x9iþÞÒ$‰ÇKõ%Û¡#¤U#X) ¯iÅÁ/WDÝháªn؉5‘]ˆ/ ö’¨ÿ/…Ø÷WnÀÃD­Ãƒ¾ŽÏQ` Çv²Åýþ#)ž~I6T<ŸÚÌ�œW¾G›¾Ã™š°¥ò<zu5¬²y›*©Àrºpíl-Ê·îÆÑ&;º=CHžÚKÏS{±ßf5ŒõïÏëÄ•ÆOPœ·«JÄÍ@ø_ôA‹r®z’í%ä}¸dnÂÍ{’õ¨óßp?Y¢ÏËþrª/ £÷¸ßŠÒ¼Bl_䙺û­}˜OÁp!nfàøìËðšsŽCŸÃ1ñ£Ý'QDUEÒEœ:Ǹt(¾Te5È™‹PuK¸«‹ªcÜûÄf»~UZ‹x<–´ñ¼ef.†€Ï¨,ÊÚT“U)Fœ ÆÇ0>êÁ-K£‹=0*ÿ{ «uUÏŽÍÁ AƒE-~þíÛ#ü±RX’¾¦Ò׃ Çü#71ôâ/8NŸÇÑ8GÕl¬Åycæ…Î/³D‹`±q’Q>ªß\q±ô1>*ÌGqÉû(oÒ?K8U<"ÒF˜Á°§öÆÃ(ÙR {B¯ d¢M¬wètöÌå‚R¦u¥8zæ,ênèìq‘Ȩ“N9W½‰Y3eU ùv_Ç×}Æ+DyÅw߉¶k=JÙcˆX>0ï1£sŠc^‹" zyö ûáLøeÌ{/aϺ5qæµ·PÝù<ü­•† ¶±qYL×pÁ’¶ìÆÖXÆ\�êæÂøÖwO{-òÓ±¾ž£÷ò7¨=ÕŽþYq z~ÀÁ}ßà–_ÿ º0tGò_;h.ÖoGÉöBä­~5,¹Ñ™ÿC Wuþ7_O°‘:l|ã@8dD“Nkᘠâœ{²¯º—erıÃsÅ£à{e§¸ñ/FݽaQÚÈ{hîÆÚ$õæy*-Oüèhw/aÔšB½Þ„‹$jë- âVML«V#¯Ô kWÆ‚÷Iò§'”sÕm CJQmP„N罋ÍëóQn}€>ë‡È]õ*Šz ç‡0 =sj‘ Š0Fà¹õ‚žŸçÐîHËCIxjÅŽ‚J4Ɍ՗Ð~ç/ãKµf 1†áé¨Ã–Õocos¼AKÕ8º}’Äp!ˆÏô7˜÷|ƒ.¯ÔÀðTœ¿Ã%•¡"ÚÄã‰2ŽE¼êÑd¿ƒGcm\’2#.R‹ÅEÄ)t.xY0Yzм»ÚxwrCó0¤ÏE‰7 ï›/‚;fûpåÜ¿8 -bÞ_P×ÏJÜ‚%Ídê$HôÆM¹N–Cä¬Úb/(cÄp1$þvT ¢ŠGËqMR^‚Ê·fYcáŽå¶$!ÈÄC³XïYŒyhª>€ê¦kèñO!0ù�–úŸuÑ œ«žd{ ù¹ûhx«$”›iփ濂“åZ <@Ó®oáV¿{$¸ƒð©Ïe¨_J�›onÁÒÀ<VÐÒþoøÓ §×ñVx†[GÞ…‰å&\¿%%ÛP˜—‹üšë¡’²)ñþÛ¿¨ôÄ]ho¸f0ö,ò"}ŽÉÀüÎì]·;IÇ »Ä.êÌZtèxñxN¸.C*%þæÀ”º{\°S·-‹ókˆƒ4šÀoSca£A†14ÿ‡øgT{£ð¾ù"øäž^9ëªN ´€mÎ ±®âkI91ÖÎÁ\RŒÊ¦ÅÿN^[]9âb†ëŠGâØvÕ£`Cc0ßMÈpQ„·×¿SVxSQÅ£åI¢Ã”˜–4„V2ñÐ8Ö[‡»å#ä™^EΫ⦠9.Ô—sÕ‘¬/!Àã –g•±>Ç!Ç£]YSŸH—$žÉ²–l¿¦gJ�±OÞªE>{Wæ¬GqI ¶æau:{4aç=MØ`Ú sç“è¾30‚ÞæJì³È÷N‰º ÛјïÎà¡Í¶â*Œio¸ˆe¦¶vt:b8‰eIlá#­¸+{ÙÜC÷í<S+òãcãUc‰cqíå(©û._Ø@ÀbQ{-ا»WA(ëuøeÁø"ê¥ã{Tn(CïwÅŸ»`=rÜ ï #óháÂûæ‹à aÆžkgq´äM˜49%P‹Øßý8yêfLY­)¸ê?‡]WÃJ¢Å Oå:_Àß}_š€s”mÈŠW|Ýz»dSÅ#"¬œd'Æ¥ÐoE™4ÁZd3þq1ZÈ$Au¬7‹{gUS¾ÄÞµ✰ëJŽâlûM\±;1þ–>$0ê¤[ÎU7²¼„üüc\ÞóVœƒFÖVßïŽX~°u²Ú\†:¦˜€¦ kQdþU²·›ÅXo vïKq¦ã!l°"È‚çgÁgAixÞ¦Æ1žL â;¢dјc-œÔ=üµ•€þ†‹”a†X-â´5°Ä±ËVV†&üs„Œx°Åën¬ŽÛa¥íUlj~(. À°üZx£dÃæ‹0ñø¨ Öú}(Ìan„kQ¸÷ |¢Ne›€ÀäócÙ³±hmtf q³Lí)†=…á…â'ëXU‚G£Iú¼Vˆc‡*%@Ô U<"âg­“¶áBω”Zà¨Ý†<qÝeZÿ1.¸žg`>ŠàÓ­œ«fds yÁ ëŽÍao¾¨AÕÖ~7N,?ÄùEu.Cñz¥†/}�‹/Æ,)Ý£ ÓO–×J¿CXaÒ‰úM;Q÷Ëè:©û:ÎV£´á—àÏw­ŸãP2ï ÿ;vV6æ¬N tãA´¸†R»ËN :Æika‰c1‰žDçˆdP°D+— `›Eÿ˜Ä‰Û8U ²ql3òÅ,NH†äÿÐÂ…6_D2^ ß²+”?o+7^YÈ¡²¤…|IBý·Ðô&JO4£Ý5(öF³ý—°o= ç?S aO3p¡<æ,•ßS [Ìð^ñH”RVõ"î¡ l¢Äy…*K"Ž¡áè¨{«×íGsw8ÑÚ‹nÛ•Äp¡k‚ÄDa(é–Zï-R2±¢ â¢ûšËnÇ:{\ˆWÓr®z cÀ¤haP}Š6s-Î;ŸËþ=-ÑÝ(Êe¨cJ�a ®úRl­»Š{ ëø.tœ­Â†ÒüÊ~¾ÛŠ#‡Ú’ïùt:„ &Ö\ï¾åÍ´©m;¦Ðÿwì¾j îÆa¾§ïŒÊœ.tŒÓÖÄÇ +-(]».\ng3Ö³“WÓF±ÃÄÔãÖ¶�ðJßég¤Õ#óhá’›/Â@ð¹®ãìÑ=(ÝWkW¨^¹zÃ…€©ÎÏQÒì{r˜™4½*öÙõ¨´ºà}t õÛª’Þí{ñZIÚ]>LåanÚ=°ì;¢{øßDùÊ¡2ë£Îæî<ì°<Œê\¨â‘ÂÌžE Xu!fhkÙuÉrAèš QR«áБ ǰ%iÒQ-0¶jÇÒè˜pI´0¨jeØ"²E¹ Å_Ó+%@Ð ˆ…¤ÅöɘfÚŽæGÉö%â~@—CØçè<õ-:":KÐ’U—ó·£Ñê–ßçFû±BäH½õV�Üx\è§­•%޽x}ݸXwe%;QQÓ{ofÜ£‹ï\ä—}Œ óQ\ò>Ê›ô®ù†æÿÑÀ…÷ÍÁ ì¥Ö‡.+«A¾ÊŽÂ¦æ” h°­–UgൔaõªÕXWók8<€-4«“äZaî™BÒp)½à¼âQä„Ç´ µ}a£›žú`Û¯¿Q'¤ ªxD¤ƒ€™þÛ°µwÂéa%|¡g‚DK­Šr?÷=Sé²¼Wí0´›U= [DV“b.CýRˆs`çiÔw>޳þ—6fdI$Ÿ¾‡°ªË'Êq‘³ +ÌÓ‰£âƒü w´ö*ÐÄçÇõ‹w0#Kf\ãXB›ââ»u÷ØB&G6wc­8Ø“yŠd�Có0ÄÍA@ÍtÀûæ‹àa ^Û9•UE˜áâà‚ÑAé@ÕZVåîƒÝ1fŒ‹ã½&É8góC5j;Y˜IVì'T”ë<?p^ñ(¨_i9Ô™0êˆÏ“*z¡k‚DK­fÞ«v\‰Í+ê ªz¶ˆå‹Ž)ÂsJYÄèCØ¥ð·‰ûâë’xÖzðp8šm¥ÀáB?¯-,qFºÆÅ.¾#†‹!ñÿ9¨åotþÕð¾ù" ‡%Rk©‡¹ñgxX,gÀg[\Cj­ðâÆÔù6í=‹[]mh({SœSr±5:"..Y|¸µù›â¥Ì¸Ñ\úFØýw;Š×çŠ×yâ"2ÖØª-¼W<Ó}-ØúÖÉ=cæ,•ï!oM…Î2QÅ#BGtM˜h½£E©ÕLÀ{Õ#+±‰MµA5Ë [„A°½ŒQ¥ÛSÀðCØ%L`l|žpv¾RdN :{/1ésªHÔ䃭² ßX$.»–zTäoÌ€kœ¸¹qÕ£`Cc0qRÈpQ„·×¿qÎì¥kdþµð¾ù"Œ%n‡ÂÍùXWnÅã¾VìÌ5‰›ÒÓèUûÖÆÑÛüÖ±ªGâÆ ¨¶~f@õ¡Ûy±/ý2f¼è¾X‡ª²R”V|Šû}Œ&uÙÔ‚,¨x$Ê8ÚkG}í×hï· Ìpqð êo èlˆ¤ŠG„žø»Ñ“ Qt.µš «Ú‘"†UbÓ ší†-ÂØœeTéöàýVx†[GÞ…‰½ÿ×o÷ZÛP˜—‹üšë¡5ã ‚£äœzyh‘¨i ¾˜M¸¸á¸ßX‚×v¶Â«ûŠüüÝçð¥ù8GÙiBòŠàbÏsuµ5øüêɆÍalZŒÍŠãŸ”Uã¤s<ø¹§é4¸Õ,ÓÌæÄÿeÞÏeåP³î+‰°ÅGÆKÅja PÅ#"”,M„¸@¾Ýr­Ö+èö͈?O ÿvli•ZÕQ¾%1òoóŽÕe`Ø" C—”�šÀ÷!ì¼§ L›aî|Õ—¸¶ém®Ä¾deT—!Ü$çÔÍ«@¯DMâ˽óä~Tµè sC×ÏãÊÓXKüFÚϪ«}¬ FæÿЈlØ|†! uà³ã7B.Æ:äÀD`ݪª/െµh²wÓ•±ŠÌèÂkÅ#ÃJÅRÅ#BOô _†£j;jÚ‹ãx,»‘›S„ŠÃ{Pšr#Ãkü۩¼ô¨^°ZTã%X$ˆ¥áºÐ@~açÜ xkQ¾.Q§>‹8/‡ªŠ¨¯t—p”œ3W[eù*Í5±„w·`i8%¾hÐÒþoø3rêÅÜ…+°®ècœu…Pà9\>Æz“ÊÚÇš ‹„dÌcòÁÿÅã—ÉŒc³xÖó Æ½X¼€÷òp(GL[û):'ÔÏÂÌ Ü·.¢®j7ʪê`q¸àË#ß cKÅRÅ#B?|°ÕÃÙÖH8k-0—WÀls© _ek¦Ò–`¬w(aðk(µô!V¬·‘•'x¯z¡oõ‚ähåajÔz˜È^8/4Àù!¬0éDý¦¨ûå΂—“³û:ÎV£´á—àÏw­ŸãÐ ð¾0Øp1ƒ'ž'âÿ²Ø''ÚnxtXìj‘¨)€¡[µÈg›—œõâ¼Û ó°:#/ñ%70€ç³Ïᲈ/‰ ­ø– ænÃgÇN«¬j FæÿЂ�ü¶C(9ü¹ø6'hÇQY¼ î©ðï+¶Ðû•ÿ”,‚Åf»†;ÞI_Ì{Á×µ³8V^‚²£M°w{†ˆ×šy¡óæ–÷…“ǨR± ñPÅ#BWvø îwuyX¹Î]f8þú:j‹Â^¯³i–ë4²òçU/²¾„¼‘ëa"{á¼Ð�燰ÂS+v¬Ž•mq3mjÆ£enC4Øp1 [~è uèUï Î¥ÃæPm¢¦ùhÚ°Eæ_%VåYŒõ¶`÷>ý_4¡ú¿/àïú%,WÇêhúÏDÌ‹Ù(ŒÎÿ¡æÑ²'\‘ŵ%j;°ßÚ—ä‚X¶p»íŒftÀ1Ï�ºí§q¸d;اÙ÷ÄEêÚèKÁûBÄÈR±Z@ˆDįìð{ ÞP]ÙA’Ìô.ŽÜòã…÷N3#~‹3ÅyÐÈÊœW½0¼zJƒªÁëa"[á½Ð�ÏÑyê[tHçµ8mxrÙ¯ŒaYõÏ}ŠÒw_Ǻò ðd,8:’/æî£á­`ñÅÄ J_4Â4ÆÆõX3€£(û°9«^GIý xþs'kN£ÍÖ†;£Fö8d,ÿ‡Ìaôî]<äP°3—p{"¦ƒÌ?„íœKÝÉ&»vGz–è{s=WqÙ›è$+¾Ûñ‚õ]mmô¤ð¾1¬T¬PÅ#"‰N_A¾&^Ìû빊¼N‰äËDå #ÿv d{ yC×ÃDv£SJ�Màüv²½§ÄUAb„gnô -ÿµ�G9.ôÂëM×ñ46a‰¸¹no¼*þk cpÕ—bkÝU܋ĉ ÆŽ³UØPÚ€_ÙÏw[qäP›ÖfæPÓºÑtïïKZ(¶ücr\0²?ÞQ˜à7Á a ¡ñ·x,6Õ›sví(®<š$m,Lé@’qntmtž"!Œ)«TñˆH„—êšñÛÂz„µNXŽœ€}Q"ïtÇ·QJoQldå Þ«^dy yC×ÑAx:„õ_ÂÞ’C8wj'*·aS$-Â2f.|°– ho3\¬ªˆøZŒºpaoL%Ö ^Xw¬³`Œi¦íh~¤uŒŸ¸¹¹tÖØë ˜}|&^®f¼#ÿ™Ž ãÇŸí*¾9/1 œÇ7…(¨<×°Ã!3\$0ŠÈZ²$¼â|Æcmô¹�¥šõô–ÉTñˆˆK¼<âlÐߌ÷Êí*7Œ>Øö–áð‰D‹âYø¯ÄoÄU¢%ò »¯ã¿ë¾@ã•â{”ÍSN´¥URU)ÙPõ"‹KȺ&²Lä2Ô ŽaýV”æbû¢0ö˜¶ßŠþe~б !÷ŸÙQ,ǿąŸP¾îänùǾ¹¡ð·’3‰ÎÓ¨ï|gÑ(mÏÙëµ%”ã‚S²>Þ‘÷ƒ„±„“ãÊúñ&ï‹-¯}kÂŽTÀÿÓy8Æ¥£›Zë$qΑþ˜hIÚœw޼H2GÌà¡Í×´Öƒ‘÷RÍI C¼„²$…*‰ˆçqñ/üÚ´k_¯ƒKU×ç Òõao€x‹â ,Áç¦WaÊ{›×ç£Üú�}Ö‘»êU5ôˆ3’Ž#p_³Áj½‚nŸø—„ ôßnƒ-#F“TÈöòÆ®‡‰l#C¹ UÃù!ìhºê:sf †.Øâ13¡DD§èªß!¾8WauÉYü'ÕÄœ„9æh^DÖÇ;òž`à‡1¸,õøÊчgõØ]u½éÎ#2Ĺi|S²i%]ÃEª^o¢Ê1¨ñ)$ûÛ<—jåÓÍ[&0ù©âyLØw¹OÜ*¨aw»û“BS ¸.( Uô™õ ùïàd†ÓÀ4íúnU_Ša8ª¶£¦ý1fĵÇ#Ënäæ¡âð”òPU$ѳ˚òãxÐëÃËdëaáoôôhý¾!²Ãr¦A6Šó™ßÙ†¦:öî_¹eˆW€áÂ[õ‡ø°p-Våî@ý-7þÓ^šlv'FÃß"’õñŽY`à„Ђ3Çì mÒµ&0 OG¶¬~{›»à EÆÑ}ì“ä† ›ÇÎK2a[[qÁ¼ +OKò^ØÐæÒx!É{©f=½e23 QÅ#">\ª·âì„[Ë!1nYÅr=šìwðh,sH�CŽ/p<h,Ç„ãsr !0ÚsÑ)‰aVæ\¨+m VíF:Pµö5”ZúÈXÕŽ¥ÈöòñC‰díÄÇ(Þt:¼¦"ˆ,€÷CXfüiÚ…ÜU&ääïÂ'mÄÅïcKùY•hÙÇŠ0\XK^úò&ÜŠ,TÃå¾Êm©å¸àŒÌé.–E¼#ÿ  ÐÙp!Ì`ì™ÔÍv ~g ö®ÛÄp!`úñcüÛQgï£qgî震ïRÍñ7TšxËdªxD$‚y’ÎbÆÿ;®4Õ‹›ÅShhi‡Ó¯En‡ø•ŠLé¸LÏ?Æå=oÁ$ùýP3amõ-èÁÂTv™áøë?è¨- @ˆºòÚ°?'§Ù^B^|& %’µÃ°2‚È8?„¼l5½Š¢º;Áäâgʬ^̺›pÀÒÏñšK{V„áâRý ,е›Æcן¸ ¦Oæt— ïH¬t6\Ä2ÓN[;:1œpìàÿ©öÇ1ã­ïgÔ¼Q s¨óöà½T³ôäXËÍ]æ ŠGÄb‡/ÌX˜³eŸìAáï¡dË^4õª4¸ °— ¤îg¸|¡¹N˜Áp¯ûRÝø46‡«E¼¾¬°µß {’é‰D7¦wqä–/¼7pšŸ'F¹;1I�¯^ÆÙšÿO–”× ”ˆXðµWYÎaç\ux}ÕŽáâ1&_ (SkRNX† v2±¼¦ØÌé.E(ÿ±"xa =¾IŽ6¾9.LÈÙØ¨CBN)¡¿Ís©faè&Žä¿"ê#ë‹·£d{!òV¿‹šŽ'Yñ¢§ŠGD\„~X¶æÀTT{¬ZZÀ s™~æiuàGxÕô v­­ÍÁP i…Zˆë.7ÚœÏ ˜+Y9×§x9ù\:“^9W=ÉþJlìÀJob9ÁÝ^%)œÂNÿŽº‚­ ù¬N3òÞ~y&=ò—ñÍ 0\,?Hwê ýióÒ…ÆÃWà};ˆ/“úO6Ðý8�ÿ¥¯Ðpó_aׯpsÿ…QÝ“6±¿Ís©æxšŠÅÍÝ)t.,ª™FšwWÃ>È»é‚* `y^ÏÁËãP¿Ž.&ÿ¥>‡3Š|x#’XïÀ<— `›%E£ˆ¿Øœ'fQ™¨œ¡E9WÉúJl:zûËŠ¬[ks}ËŒÁ]øîËzXœÏpÕ!/o+ª/Þ_q‡d¸H�Ïò‘îÔ‘u“)ÁÓâ&øê]ÒЋ�íŸâ¡Öî9ŒvuáA¬SY†²ºs]ªY|fî†-ÑÍݳðY†Ãhæ05v‡çªxD$‚åb*ƆàF\„.òÞÄú¼W4¨LÁr\´ tíºpƒÍXŸÃÂ.6Â|/&7CBBauì]+o™¨œ‘$Cªå\õ$Û+±ééíC,+h­Mèa½Š÷ͳ|¤;uÐdJ(A¼‚ý‡$‹îY7šv5ÀõÒÈ•Z ~ÉLIVwÁ߆}o`ßÕ'XŒ`“®¯±ik~¹ñF¹‡îŽïQ¹¡ ¿Þî‚õÈqN½/¨â‘„ÀStW³åwŒ\¨Ë{ÅÕ?­I‰yÌøºq±îÊJv¢¢¦öÞpÉã”ðÁVs g[£ù-¬Ö˜Ë+`¶¹t®œÁy†l¯Ä¦§·±¬ ½�¡†=5êÐÊ!Ý©ƒ&+Bãpž<ëSvR&n*_ã€Õk°1€å™HT23”Õ=“† ¾ÆÖ,žZwcµ(“+q{›šŠ[5¡ŠGD¦Ñ"Ìcû‡cú¨€Y÷|P÷;¦ÃŸè‡4)¯’r®:’õ•Øôôö!–¬ó ïòñ1ì©Q‡VéN4YÊޞﱫþ¼d™÷÷çàÔ›¯’™Ü­‰Û8U q“lEÚ3Y?‚XÙhæáÃOvü)g^üÇ^ƒ7rÌ:ŸÊkPÎUW–A%6]½}ˆåw<ó|¼ëÎH Ó uhåîÔA¡˜ Á¢?ÿömÈ€þØ8æ0æî•ìöa–…GôwÁnû®¡Ì/Òù[˯ª±2ÉÜØòÁvÌŒó !á0Òm¨lù=Å0DÆWo¾£oz-ʹê Ub#V�™›³”Á³|¼ëÎH Ó uhåîÔA¡"R‡o‡ŒÍ<&5x§æ*¼3s˜}dÁŽÜ×PXQ‰òÒzÜËpe[ê ý‰È\ßHæ±3e£ƒ—êšñÛBÖ:a9rö§:TYè‚êr®A¨…öÊ¡µ@b Ó uhåîÔA¡ŠÙ>\9÷/Œrq`Æ*ODs¿¸á¨z«K/Âx)©œ‘9h쫃æ&"™ëñÃ<<íµÈO9Ì#žñCœ¢ú›ñ^¹]_¯MʹRh^"”@ï[åИKŒaš¡­Ò:hB Ò‚Åó¶ÔÃÜø3<,†7à‡³­ÃPŒÅ¼À£æƒ¨uxÐ×ñ9 Lo¢Š•géƒmÿ‘ŒWË ±¯š›ˆDd®o$ óX‹ ¤˜X3žÇÅ¿ðkÓ¬}½.]£·´(çšY2÷l•Á»|ŸP¿V¹Ä¦êÐÊ!Ý©ƒ&"u˜a`;L¦<nÎǺr+÷µbg® ¦¢Óè1~,Lö ©ôu±_¿‚ü#71ôâ/8NŸ‚Ù|ÎÑÌæw ±¯š›ˆDd®oøpÉÜ„› %„CÍõp©Ow Œ¦ì»ÜªF¡+j˹f–Ì=[eð.Á'Ô¯•Cc.1†i†:´rHwê  Hi¸б±ùOâ÷5Wã¤s<ø¹§é4¸õ/ì—I O¾0§±¯š›ˆDd®o¼ÄøØ´JÏ.Õ[ñ@n’©ê=Z”sÍ,4/Ëê×Ê¡1—Ã4CZ9¤;uЄ@¤ƒ0ÔÏŽß•œpàÐ!&Cè6—g<‡ïÐØWÍMD"²«o°j>³˜ñÿŽ+Mõ0›O¡¡¥N¿ZƒH*hQÎ5³ðþly—àê×Ê¡1—Ã4CZ9¤;uЄ@¤Î x/À:Sì"Xlk?EçDf«vðïc‹ä#²•ìês˜ìý¥¹&¬ÊÙ€²Oö ð÷P²e/šzÇu6^hQÎ5³Ð¼D,G¨_+‡Æ\b Ó uhåîÔA‘:³xjý•ÿ”,‚Åf»†;ÞÉ œ.†æ&å|D¶’U}ƒUöØšSQ=îΆJ”–Y៽Æ?ê\ÙC‹r®™…æ%b9BýZ94æc˜f¨C+‡t§šˆÔ™Çäÿï*¾»ü‡¼ü©ð7zzÉp}uÐÜD$"«úÆœ u¯ç`‹åqhŽŒ.&ÿsÑ©Kª*E‹r®™…æ%b9BýZ94æc˜f¨C+‡t§šˆÔ Ào;„’ßÃl6GÛ‰Q¼é4ܳö½Q€}WŸdÄAs“rH>"[É®¾1W]164ÜUa†‹¼7±>ï• ä™Ð¢œkfáýÙò.Á'Ô¯•Cc.1†i†:´rHwê  H�üÖ=È+܆’’’˜vÖþd¸@c_47‰Èº¾xŠîïê`¶üŽÑ€ uyo ¸úG¸'õ.ѬE9×ÌBó±¡~­s‰1L3Ô¡•CºSMDêÌaôî]<Ô{­47)‡ä#²ê©¢E9×ÌBó±¡~­s‰1L3Ô¡•CºSMDzŒypËÒ˜á²~ñ¡¹I9$‘­PßX¾Ð¼D,G¨_+‡Æ\b Ó uhåîÔA‘ÂÐMÉEì7¹X_¼%Û ‘·ú]Ôt<yÞhnRÉGd+4î—/4/Ëê×Ê¡1—Ã4CZ9¤;uЄ@¤Î <MÅ0Bç‚—óÀèAóîjØ3oº ¹I9$‘­Ð¸Wɧš—%P¿V¹Ä¦êÐÊ!Ý©ƒ&"u¦ánØ-ë·À,|–ƒ0;'ÅÿžÃÔØDƼ/hnRÉGd+4î•Cò©ƒæ%B Ô¯•Cc.1†i†:´rHwê  H9Lº¾Æ¦­uøe!Ký=tw|Ê ehøõ®øs¬GŽgÌû‚æ&å|D¶Bã^9$Ÿ:h^"”@ýZ94æc˜f¨C+‡t§šˆÔ™ÅSën¬û ë7‰Û«ØÔüóáßÒö÷x…gÙ$‘­Ð¸Wɧš—%P¿V¹Ä¦êÐÊ!Ý©ƒ&"-&nãTý- øýð'lÏ0<I4öÕAs‘÷Ê!ùÔAó¡ê×Ê¡1—Ã4CZ9¤;uЄ@¤‡€@`.ü߯Cs“rH>"[¡q¯’O4/J ~­s‰1L3Ô¡•CºSMD6Cs“rH>"[¡q¯’O4/J ~­s‰1L3Ô¡•CºSMD6Cs“rH>"[¡q¯’O4/J ~­s‰1L3Ô¡•CºSMD2¨ÿ*‡t§š›ˆDиWɧš—%P¿V¹Ä¦êÐÊ!Ý©ƒ&"Ô•CºSÍMD"hÜ+‡äSÍK„¨_+‡Æ\b Ó uhåîÔA‘ ê¿Ê!Ý©ƒæ&"4î•Cò©ƒæ%B Ô¯•Cc.1†i†:´rHwê  Hõ_åîÔAs‘÷Ê!ùÔAó¡ê×Ê¡1—Ã4CZ9¤;uЄ@$ƒú¯rHwê ¹‰H{å|ê y‰PõkåИKŒaš¡­Ò:hB ’AýW9¤;uÐÜD$‚ƽrH>uмD(úµrhÌ%Æ0ÍP‡VéN4!É þ«Ò:hn"Aã^9$Ÿ:h^"”@ýZ94æc˜f¨C+‡t§šˆdPÿUéN47‰ q¯’O4/J ~­s‰1L3Ô¡•CºSMD2¨ÿ*‡t§š›ˆDиWɧš—%P¿V¹Ä¦êÐÊ!Ý©ƒ&"Ô•CºSÍMD"hÜ+‡äSÍK„¨_+‡Æ\b Ó uhåîÔA‘ ê¿Ê!Ý©ƒæ&"4î•Cò©ƒæ%B Ô¯•Cc.1†i†:´rHwê  Hõ_åîÔAs‘÷Ê!ùÔAó¡ê×Ê¡1—Ã4CZ9¤;uЄ@$ƒú¯rHwê ¹‰H{å|ê y‰PõkåИKŒaš¡­Ò:hB ’AýW9¤;uÐÜD$‚ƽrH>uмD(úµrhÌ%Æ0ÍP‡VéN4!É þ«Ò:hn"Aã^9$Ÿ:h^"”@ýZ94æc˜f¨C+‡t§šˆdPÿUéN47‰ q¯’O4/J ~­s‰1L3Ô¡•CºSMD2¨ÿ*‡t§š›ˆDиWɧš—%P¿V¹Ä¦êÐÊ!Ý©ƒ&"Ô•CºSÍMD"hÜ+‡äSÍK„¨_+‡Æ\b2¦™‘‘x<ž…ÆŠôg£á]¾'Ož$”Én4Ryx“ïþçdòÄÊÇþ "°þÁ3<ËGºSïòÆAã^9$Ÿ:h^"”@ýZ94æ“1ÍD6ŒñÚÇþ–q$“ïÿïÿþ–q0âÉÆÚo¿ýþ–q°gO6Öx0\¬[·.®l7n ‹ B°~Á3<ËGºSïòÆAã^9$Ÿ:h^"”@ýZ94æ“QÍ$ÚÜ2£$’&C<ÙxÙx'2üð`ôaX­Ö¸òñ`ô!ø‚õ žáY>Ò:x—0÷Ê!ùÔAó‘ l=ÍúJ¼Æ&Ù0{¶Ÿ‹'k×®] ‹Èèlos˃·E„xòñ²ñfÄt<m¼ã~x0ú0ây]·Ö7x†gùHwêà]>Â8hÜ+‡äSÍKDª$Ú|³ÃC£It�Ì{•D†¶w¡ö(Ÿb7·¼x[Dˆ•—7#vÐñ¶ñŽ5üðdôaÄz]·Ö7x†gùHwêà]>Â8hÜ+‡äSÍKDªÄÛ|ó´ñŽw�ÌÓ^%žá‡£Od|6’nnyò¶ˆ •·7C:èxÜxK ?<}R¯ ò¶ "°~ÁÆ}¤±þ!ýÙhØ8’ÊÛ|ɳ3©<±ò=G-Õ÷è”…ˆÀú¯ð,ƒäSïò|»ùæiã{�ÌO{•XÃy[,ÆÙ(²¹e 3‰ÈÇÛÆ›t¼n¼#‹o>Œˆ×y[â½È"‡qSñÆßXO&iãaÁ"5¦Æ6£ßARcjl£ËÊæ?þŽŸHc}"òß<¼¿˜ ñdãE>©<±ò=îÙ;G*O¬|F¯=™~¤òÄÊGÉn¾y|I€yÜ«H ?4Þcˆá‚MŠ<,¸ÁäãuãÍ`²ñ¼ñfÏ–G£ƒM |ðAø'‚!}‘I/ã,ÑæÛè8#Ñæ›— ÓQ¬l¬ñòŠl b-XV6‰ú-k<ô éæ$¶ñ0o&šÓYãa}{*i<Ë“óy^üéß<¾Ç¤ý›Ç½Jdn¥Ã‹øèf¸ˆt 5MOâý½t›žÄû{é4=‰÷÷Òmzïï¥Ûˆ•E¼… Èñ61<ãm¾yZ°Ä3üð`ôaÄ3üЂ…`Äë·<õx›o^æÍD›o^6Þ‰ ?¼Ë~xÜèüÁú1Ïï1Ö¿y6±y”/â£ÛMpjPûûK±œå#Ýñ-Á'± 5^b71¼l¼±›oÞ,±†žŒ>ŒXÃ-XF<ƒ%O}#Þæ›§y3Þæ›§w¬á‡'cy<ÃÏ="óÄö%MOâý½t›^Äû[é¶•Šnw®V©z?”å,éŽoù>‘.ÔxZ@FnbxÛx3¤›o7ÞRÃOF†ÔðÃó)‘y¤ý–Ǿ!Ý|ó6oÆn¾yÛxÇ~x3–Ç~ÈÛ‚Âú„ÔþþRð,ïºãÝîœ÷‡²œå#Ýñ-Á/‘…o È‘M ooFdóÍëÆ;bøáÑèÈ~ÈÛ‚"5XòØ7¤›oçMéæ›ÇwÄðã±\jø!o "Ö/Ô ö÷—‚gùx×Ïèvç¼?”å,éŽoù~a 5Ø&†×7ƒm¬xÞx3Ýñhôa0cë{ämAÄÂú-Ïž8¬ßò:oF6ß¼n¼#†^åÃy[±ð¾ÖæY>ÞuÇ3ºÝ9ïe9ËGºã[>ÂXØóUÛô$ÞßK·éI¼¿—nÓ‹x+ݦ'ñþ^ºXžÄ{Öé6½ˆ÷·Òmzïï¥Ûô$ÞßK·éI¼¿—n#VjŸ»Þý†gùx×Ïèvç¼?”´¯ÿù‹ðÊ'gÙ+]>ÂX¨ÿªƒgùHwD¶Âsßà½ß’|êà]>‚O¨_+‡wÝñŒnw.Sj`Ã~?ü¬=ÃŒþ\˜†ßýo8Ýþègaô~(²ëö ûáLø‡x˜u7á Õþ9“ò ¢úž‡t'¶gc3â'á™ñÃíü7Üþé…ÏÕ˜~–oc3óáÏç1ã�§óü Ÿ…XéòÆ¢öùf¶ÿ¦ÏJ–tGd+<÷ Þû-ɧÞå#ø„úµrx×ÏèvçR¥ “¿£¾0ëJ?Gs{†â6{¶—÷À$~oÕªW_s~öy½ŠìúþŸPUy­áøìÅ­æ’·Qbˆáb“®¯Qhz¥'šÑî·âfû/aßúW‚ß[ez5OÄÏCdTwÂ8\õ›aZ·'š¯Á5ļR¦Ñù Ö›B.„¦ü£èðä­Â¡|„±¨}¾í¿ XÉò‘îˆl…ç¾Á{¿%ùÔÁ»|ŸÈž;×Ôé�3ô”O~mþ¨yF·;—)uªGJZÐ7Qû$z¶À´j5ÖU¶¢×û]õåØcXx0z?Ùõ.~À™Êw‚ÆÓº \ðL†!“ò ¢ú>GI³³áO0Óƒ†¢WÅï¬G¥Õï£[¨ßVû`Èt‘QÝaG ¹o:ü³€™ÞÓ(bFuaí}ŒG]_aÛ;Ãw¥ËG‹Úç›Ùþ›>+Y>Ò‘­ðÜ7xï·$Ÿ:x—àésçû€:ý`†žòɯÍß5ÏèvçR¥Î¹¾A™å±øÞ‹(]Í6ŽGÑ9:ü~+ÊÌNc¼â…ŠSð¶†|“ ¹%_£Kr"ÏÈœ|SpÕUÃ⋘-fൔa53úÔüŠÑ R¢úªav† +ÕÝœ ueá‹ÌE>XJ׊ßÉGMçPø™û`-«ƒ3üpWº|„±¨}¾í¿ XÉò‘îˆl…ç¾Á{¿%ùÔÁ»|ŸÈž;×Ôé�3ô”O~mþ¨yF·;—*uÎõ5J›ÿ uVaŽª7ÅÏÃn»/ÜL;ëñ¡¥?ü³þ%éõã^ãÈeÂj;M†+2'3\DsÈp"Œt j­ «r÷Áîtñq8Í5°x_ʨî˜a ´ýÁ7‡Ça¬]eBîîËðGæô]˜?üÞðÏ+]>ÂXÔ>ߌößTÈ¢ÄÁ =åãY6ïòÆÁsßà½ß’|êà]>‚O¤Ïïêô€zÊ'¿6Ô<£ÛË”Ê6†›>Fó­ÛhoØ<ñßVo [æð¹ZQ¿casÎÐû¡$º¾0ù�Öªw`2`¯å>&ÛÙX2'3ê|M{ÏâVWʘÑ'[ƒ–9åƒËZƒüMÍáÍy¦uÇŒ&;±·Ù®vqâÊ[U«Åg Í`Ò÷;¬Õ›°)b¸YéòÆ"{¾”88m¢×§¸Ñt‘_ŸQÒ~¶4X¦mqì=ÿÏÃnáz÷Ûô¯ÿÏý#â ÁŸ|rVº|ŸHŸ;ßÔé�3ô”O~mþ¨yF·;—+u“½-(_·FüÜ„œ¢À ½˜¯ûJ8Ÿ„ ×Ü#tèâ‹ÖßÚ¢µbgÙú®§ /µ Â|Sá2,Ÿ0ŽÞæ°.˜Lr-Šj;Bqb³>tÛ"ù8:à Y53­;a²Íåo…âØr6£ÖÁâ°Ä •ïl‘|!×Ü ?Ü•.a,ÒçK‰ƒÓ'z}ŠMÙõ)q0!Aöl93Xʯ=‡Ñ»wñp±#ª„)¸þ«?4²ôî·òëãnw¿(efï£áà%øÃ?fV>Î+±qhÌ'øDöܹ> Nÿ�˜¡§|òków@Í3ºÝy\¥² Q:&Aï‡"¿þ,F]M(Íe®ÐØõgø¥"i¬¨¿dÄæ BèôPzj˜ˆÌËÆ`/céK81+]>ÂXdÏ—§Môú7š.òëSâ`"ŠìÙrf°”_;�¿í3Tžù!Ž\áváJrË 2\ø`«ªÆ™Ö8r[+.˜K‘[b5ÆpÁy%6ùŸÈŸ;çÔi�3ô”oѵ9; æÝî\¦Ô¡.´÷D½â2çF{Gä5¢ÿC‘^_ð·ãHi JJ·í…ëQjЩæPGz’ˆßêé@ÇPf:´üú~t´»“Ÿn` =í] ÿ´Òå#ŒEú|)qpúD¯Oq£é"»>%&$Èž-gKùµ“.ZO£2Ÿy3­Áºò ð„O©ôî·òë'6\´ž©çMq~7½…ò Ä!Dfå㼇Æ|‚Oâ>wn¨©�3ô”/þµù9 æÝî\¦T¿ åÅã„Ù s‚v¢²å†Rä…–ËFÈÇÖP\y<®ÞBí8*‹vºa-/Aå‰xr…Û‰Q\n3È-“?ùc‘>_Jœ>ÑëSÜhºÈ®O‰ƒ ²gË™ÁR~íø¡"ÂÌc´×¼+np_GIýmãÂë↊ÌcÆ{5̨'8£òqh°”^ŸGc>Á'²çÎõuúÀ =å“_›¿jžÑíÎeJ'¹ñgöYâ–cPœ¶”YŒynÃÚTÜÐÖ5Yq£'Ï7‡€!/bf¸( þœ¼•g¸(ɑȑ å–É¡|„±Èž/%N›èõ)n4]ä×§ÄÁD”¤ÏÖ`ƒeòk‹cièK_ËSm¸hnÒ»ß&¿þ Ýûg0Ø”öG ã)BFåãÐ`)½>Æ|‚OdÏëêô€zÊ'¿6Ô<£ÛË”ê·âƒêN$¶Å±XäãøÀHÃE`�·Ìï‹ ƒØM­¸P¨²Â³PÈœ|¬CDuçHøçxŒ ³ú q†‹Ž£s*ò ‹ÃT'ª?0ÐpÁ™|„±ÈŸ/%NÙõ)n4-b¯O‰ƒ‰‰ž-ËÄ×çOUù¯À´þcXÜã ó¤½ûmÂë‹ãßcýù¦W°~¯î8FfåãÏ`)»>‡Æ|‚OdÏëêô€ì3½_;}ùØÏ+Ýî\¦Ô·²xœu(3ÌpŽá3½‰’£ßÂêè‚Ó鄳»Ö3Ÿ¡dÝ+X»ïêB¼!#sò±-_̤ø"¬6Îp!qiŒKÀ s™† Îä#Œ%îó¥ÄÁ)³øúÌ{âFS!þõ)q0ïÙòc°Œíð;þ¢œÕqCW„ç0$ÇE˜À8j7#'Nè sÏ}Ï Êq!ê†ëJlüó >‘=w®¨Ó?�fè)ŸüÚüPóŒnw.SêH;ö¾oYp{[ÌKx-{±·ýïðÏú?Ùõ'¨\“j‡_¾0#ÌôÁ¶·fçxø“LÊ7'ªï¼/qË[„ÐËûŸ }ĈSÿѾw¯,†=ÁkÁû{ÛÅab¥ËG‹ìùRâà´‰^ŸâFÓE~}JLD‘?[¾ –‹®xWÓ.䲇ÒÓèz4#ß�X¾Å%CSFG ]Yõ:Joã‘L6Öz`©ÿ٠ÔœWbãȘOð‰ì¹s}@þ0COùä×æï€šgt»s™R…?ѼñTµûâtjvªpUë¶¢ÉMF¥÷C‘^ÎU‡¼­É +^º¾Â–†û ‹ÌLÊ'ô7cãºÃh9ÑñþöÃX·¡ žðû/“²±¿ßß\‚uUWcN4Â|h¯Ú€ My=¯tùc‘=_Jœ6Ñë³—-Ŧƒüú>JL, }¶¼,åמ×ÇQG¦hۆ¼=ÆŒ+á ÚìŠ#“¤m/D^©Q^ œWbãИOð‰ì¹s}@þ0COùä×æï€šgt»s¹RÅ}rM¨hø ·{ûCVïþû¸mÿë_Áêmb‡—žõ~(Òëœfä-a)Œµ&fR>>ØwçÁ´~/ì·ÑÛÏN7Ðß{ö†½XoÊÅ6Ë#ƒ l‘u»s_ÅúŠo`¿}ýÁ~ôÞþ 0­þ�oæâ!y—0Ùóå:.SÊòHÌ`Ÿé…üÚéËÇ~Öùõ}”8˜X íg›Aƒeú×ð¢Û†Ë†Œ«TG·åƒ ü,e×çИOð‰ì¹s~@î0COùb¯ÍÛ5Ïèvç‹”*ü®“ñ’_®‚)ÿ(:bÖ¢ß×ÙõGÚ±ÿ á#`ºÛŒíF%K†nãä–ÿ ~.o¯ ¿æºÌ› öwµfñõêªÃæÖ*“Ml¦wQÓÁâ7£,þ}mY|}¾ä#ŒEö|¹ŽË ³Œ3ô”O~íôåËœîâ†aâ?[> – ¯§Ó†¦:¶¡­G“õ&züÓ¡uÒ\�ñôî·ñ¯/n–Æ<è´6¡Žm¸ëš`½Ñ04CÅ›3h=ÇŸÁRv}ùŸÈŸ;ßÔé�3ô”oѵ9; æÝî<®R…iø—ÐPSt3,­øßXn£?Ã¥½òëOÀUÿ9.zcꦙnjïÔn7ÌRA˜€ÓÖ€šŠ()Ù‰Šš¯aé|ÄIé1QO~'l Ÿ¢‚¹¸–V æ›ÐÙopé±ø‘0Ùóå:.“±¼3ô”O~íôåËœîâ†a=[Ž –‹¯ÍNPoÂï0Åôª¬dë’Å¿¯-‹¯ÿþ[_Ä=¬0å«G^ýdñïk‹üúü,e×çИOðÉ¢çÎóµH:ÀŒØß×’x×æé€šgt»s™RG{Ðý0žQ@Â\?ºï‡Ðÿ¡,º~à nœnB‡Ìx1oG=öî¨@õ‰/Ñâ|¾ð²Ëœ|s½{ÛvdÌ=¼‹»£™‰}’_w»ûE)“1ƒ‡Ý= ÿ´Òå#ŒEö|)qpÚD¯Oq£é"¿>%&¢ÈŸ-_ËEמéACÑ«0­+ÅÑ3V8ºï‰òÝC·ÃŠ3GK±Îôöµ?5`½Ä0Ó{E¦5XWòÎX;ÐÍtçì‚Ãú-Ž–¼ ÓÚ*´fƘÊ_Ÿ?ƒ¥ìúó >‰ûܹ= ‘ê0COù]›—jžÑíÎeJõÿ„ªÊÓh”yŠÓZÏT£Ê–ÙSÍÇO&å Za¹8½7™/D�~Ûg¨<óC\½…Ú8SùlÚªªq¦5ž\áÖz•U?óæP>ÂXdÏ—§ôú7šòëSâ`"ŠìÙrf°”_{^ïÖ¬ûŽ¡xF·yÌxmØûÎ)8§CýZï~+¿þ0•o`]u†â+a ^[%Þ1ßÅtø£ÌÊÇy%6ùŸÈž;×Ôé�3ô”O~mþ¨yF·;—)•Ø9vý¥¬ÊÉÈ„|!˜»3%˜Kùõù“0ùó¥ÄÁé"»>ŦEìõ)q0Aúly3Xʯ=WÝ{ؚ̓ “âwö¡Á2 èÝoeןs¡.›Ä†¼üu[NÃV^FåãÐ`)»>‡Æ|‚OdÏÓêé�3ô”O~mþ¨yF·;—)Õÿ3ê-=¡ A¢–Ášä vý¬1\\ú–lÁGoÁfdÍt.Õ[ñ ®\‘fdÍtþä#ŒeÑó¥ÄÁi{}ŠMÅ×§ÄÁDé³åÍ`)¿6Ë Ã¼=’åŽa.Ñü2z÷[ÙõY˜Ež9y(;ЄkdT>¾+±ñgÌ'øDöÜ9= Áæ#ª€¶\ÐíΙRíÎðr{æ|Ïcß"3xh³Áv%„0ß@4Þ…]ŸwÃEoËì«¿‰¾~7œî'¡§À(ú]¿ÃÕ?*“]x>€PªñŒÈ&Lö åàAÔßúúÝ.¸},ì†eñ~ —³ýc³áo3xî{&>ñ™/ÊC|Ssãò½“œy7¾:d§8òBÜçK‰ƒS&Þõ)n45â_Ÿ1Ï–3ƒ¥üÚ,wÌg8舺|/f ÝÇ ¹?´ùÖ»ßʯÿ7Ú÷×Â1!õóŠaº Ƕ· ?¬¼ÌÊÇà¼gÆ|‚OdÏÓê´€zÊ'¿vúòé­;žÑíΙR—¶¾½‰*Çà¢Åƒý»ž°ëón¸Ø´f ŽmĉŠ÷ÄÈ+(øÇ÷øvÇëÁ[µêu”6õd|cÀ`×Ô¼kŠâlãç¨Øü_âËv#þqþ+숼ˆsw¡©Wž¹;B&ä‹’b¨ÈÚÃpd(Aa,²çK‰ƒÓ&z}ŠMùõ)q0Eþlù2X.ºöôï¨?Ô o‚>Ç?PøŽQ¹cL»¾Å¡‹}q×wÂÌ_pÔã£B1àÇ`÷úó >‘=÷¸Ô1p@BÀÌÀ�žÇÛH�3ô”O~íôåÓ[w<£Û3¥;v6›sþŠ_+…ùBëB¼Në™JT¡Å5´h’fèýPØõù5\̯¿¦‚%gbñïcU‰Ø«°ÕÜ‹Óö¹Ña>..lÇqfBwö²õ¨`É™‚ñÿ…’Öß`ß³ æ«Ý}žë0³…Mœ‡› ù¢ø`;fÆù…81ÖZ`.ÝOv ®a²d®dÏ—§MôúŠMùõ)q0eѳåÈ`¹øÚ¡r¨§¿ê€wV2/Íþ…Ž“û±£¢'Ìà4Ä ÈxÿïðUÇ_ˆú~ ˜õþ‚“{ËPQý9Ì-NŒ†EϬ|œWbãИOð {î žõq‰ñ¬!ý:ä¹þ+ü³ð=Hžòɯ=‡¡ë—p{"Ù¬ ×¥ÞºãÝîœ)5b}›s}R‰KcˆtVo&‹¸‚×Ï ÊÇâI× Nk=,¾Èk˜ÕÒ®ÇqâL3¡;kIa(~•œ永µNXk­ð-<Lñù;7Î4òE™Äãþá˜>&.`Üg°Ó|Gü×Åè-a,²çK‰ƒÓ&zý�Ŧ‰üú”8˜ˆÂž-¯KvíÀ°ObNÛ…@`‰ x½û-»þðã§1¨T¤ËŒ|Q8¯ÄÆ¡1ŸàöÜy÷¬Wê¹ÎÐS>ùµS]«DuÉ~^©èvçR¥Î{¾ÃöÚ.LH:‡0éBã–Üðæ|1z?v}Þ7Õ˜ .^=Ö…IÏYìÞ}Í­­°°Z3Ng&ds7|€êΑ°áâ-ëöÃÓt�»¿<+¾ð.àÌÑØPs+nŒn&ä‹âÃOMíx+Ö×þ)ÞȉŸÀKoùc‘=_Jœ6Ñë‹/[ŠM ùõ)q0…=[^Ç=»¶4ÙfºèÝoÙõ¥É6Ó%òEἇÆ|‚OØsç׳^ç:COùä××*63ŽêÎjmÅó.l”mh ëR_Ýñnw.Sª0Œ®ÚMXW¼ÇÌfœ¨Þƒ¢¼5X•[†fOü¡Þ…]ÿNOx0 ÝÂÅÛQ—ËxÌ?lÃ9Wtž ù¬OÁ14¬Iþ+{&ŒÃc«Å–¼WóöÛÈ+¾Ø¤dB¶€×†ƒµ t rÍÆ`Ù3aòlÇÞGž)o¯¥’›”LÈ%Ñ"a-66ü±PÇ]Šü÷‰å†ìùŽþ·üOø‡(Âp/îô‡c1)q° v}¥‰ƒzʼ¶8OòœØ8 %&¢°gK† e°ëg“á‚ëJló >aÏ_Ïzužë =å“_[ÀôãÇø;VI³÷Ѹ³÷&3@Í3ºÝù"¥ è¿Ñsey(«û±³¸' Q½Šìú)Y˜MX[Õ‘°Àì3=a×&{a­Ý‡òšáŽMˆ4çÁůo/Ä@JÉ„lÌš9é¶¡¶â#Ô\¼¿ÈÕjÎcÃ×CáŸädF¾â"ÁÜ„›÷œp:#íßp?d/%Coùc‘=_ÿ3_F÷Bßµ;Íðž¹-´éÍ`9O»>ï† žÝ/ç5sØ8 %&¢°gK† e°ëón¸ÈšJlÞÿFÍÏ®Íóž&²EÍô–àésçÕ³^©ç:COùä×ÀÿS ìc „}?£æ‚¸ó®ÞºãÝî<%¥¾èý—x>ú?ÙõÙæ%âîiN tc•<±Í…áð Ì¨|"Ár~W¾GÙ sÃ9´; Ûx/¾>ËŽý;®4ÕÃl>…†–v8ýÓ|¥ðÃîëøïº/Ðxå¸YaIÅœh»Öƒ¡xÑEô–0Ùó]ÒhiBNÑ?à”cŸë »>¿† þÝ/‡ìqØ8 %&¢°gK† e°ëón¸ÈšJlä|"{îœzÖ+õ\gè)ŸüÚqØÅËq!®?76ÆMn*ÿý•…nw.Sª0ˆ{§÷"?'¶fµ<NNŠÞEvýéôÿ-µv3¦ànüæ{ñ|2+³Ô7•²ÓÂ\ä—}Œ óQ\ò>ʹ85œÃdï÷(e/ßœ (ûd ßx%[öòñžˆæM¯Â”÷.6¯ÏG¹õú¬"wÕ«(jèY8Ñ¢·|„±Èž¯ÿgÔ5ÿŸÔÊ-¶'íG±½ÉüoŸç*Ìǯc(C‹4v}~ ü»_²�ω£Pâ`" {¶d¸P»>¬©ÄÆáAÁ'‹ž;‡žõJ=×zÊ'¿6ËÇõnþKæùëtÿ…Ñ™Ì{ƒðŽnw.Uꜻo­Þ„ê³?Ê'CëetFâÈcÐû¡È®ï¿†&»G¶qñûÿƒöšC]œB¼„ײ&S1êî ‡ãÕ°úÇán¬…ÅèSC¡–­90ÕãÞ¨¸1`É:Ë¬ð³Ø¬?ÿž»†·JÐÜÿ˜õ ùïàdÖËÀ4íúî8IÇõ–0ÙóìƒûIÔ›"B4ÔI@`䎜\Xg¢ÿòk¸]Ÿg÷Kö¾á9±qJLDaÏ– Ê`×çÝp‘5•Ø8<È#ø$¥ç΋g½H:žë =å“_[\g÷âÚ×ÃÜø3<ÌÀðÃÙÖ×Ðâõ)CoÝñŒnw.Uªàµ`ëV‹d‚Ž0‡€Aîú²ë'rËÙ†IBN)²ß×èõ§àª{«¶Dô1\ ‰ÿ_nHì“ìús.Ô½žƒ-–Ç!«jÄp1ù/˜‹Nÿ—CŽ/p<˜hŽÏqÈ1„Àh—aòÆ"{¾qóJêe=vr»÷jF=.ÇE|É=½Ž¦ëÆ-¸v¿ ôsØ8 %&¢°gK† e°ëón¸ÈšJlä|"{îœ{Ö§ë¹ÎÐS>ùµ_CÉL¦<nÎǺr+÷µbg® ¦¢Óèc]Ñ[w<£ÛË”D—ù ê»úå“aŸ ’ÌÄRô~(²ëûÛ`n¸Ž{R§Ggn2'Ÿ€iW= 64Â=ˤa†‹"¼½þu˜$IÛ¤dTwâkÖUWŒ âæ h£g/å¼7±^Ü Hc ¥dT¾ùǸ¼ç-˜ÄÏØçÑfÂÚjc „±ÈžoÂxÞH½ìð;ÿ²€‡‘ý¾$¼¾0 Ïuœ=ZŠu&c¼»_òØ8%&¢°g»`°œy¶­_ЬÚQ zö ví™þ£'˜keC¿´áÎTŒÇÒüCØÎ¹ 1¸±ë÷ßé ‡.LaÀ7²xí& ¡çÎcCÂCÙõ³¦‡yŸHŸ;ßžõé{®3ô”O~íi¸б1X•e}ÍÕ8é~îiú$8WÄ¢·îxæÿÏÞÿþDuíýã?ÀÜñfo˜41&Þhrbˆ7lšFn`Ú¨iCŒÖLд_0mƒÚz"zÒbý\Ž_Ûá:íàiÉQÞþ[æƒ-ZQ¡­x"™ž3Dæí…E< Žá;p e`?¿{ Ìö`ƽ÷šò|œìS†5kÖ^{Ϭ×^ûµL{ç‰ËòîÐ9Ê’ãbð´ÜÕû¸¥<¢½ö‹„¥õƒ§Ö3øÜõ üƒ"P°¹…qÚÿ›-Ñï9åG¡õïn¸¼¿`0€;w- +t q–ÖOéoûÛ(«ÑžLëo£Ç¦ú‘½4û7ôÊJ«àéuð~¹ y¶­=ž\¾È:ß…›¾*ì*X¥þλá>y.‚¾*y§_N‘7±ñïznœÄXÙõ#ûhö­d«iË6J$§nR\LIo«ðCk›¦íü·jQú–K=þƒè k¿9YS¿,Y‰M y$§Äý.÷ÌúÅÏ\̬_rÙJ>þôÇ©‹½ÃÍØ¿¿ÃÑ~´Ú4³^f¦½sM£*}hؾۉ'B±ýöÜ¿£)?t»œûqT|±5ØŽ–mŦéY*Kë§K=ðŽUÀÛ3÷úýu¢ˆDôÂ*V×O¬"ÒŠKþäÛŒ™]?²—fÿê\ÙœZÂkvø@/Kƒ•ýw²û¶Š©—Ž5(<p§ÝÊ(žY•@H,_îé—‹¯Ÿ•m7}n:ÍH¥Ù·’­v¤-;ŠP½ •gë.Ôáœë=l,;3³N"3ë&hË_À2Ã+ÞÆáæ‡3~ÄÏÌ4·|‰WbSKÁ+ÿn×W¸Ø)¬‹Y‡Wq%ðD÷B™`výHNÚ~#óÌúÅÏ\̬Ÿ¶ì1ô|ÿÖè]à_õ[òqÉÌ´w®mTõ ÙÐF’ÏÊÑ1D$ÉqQ”[€mN'œ©¶=>tÇûuõSé<‡’5/Å~–¼9òöÛtQüÜL *?êDZ’óèÑÙ¿ÖÖ/„kõþ9}oòÞ%œá´Ç%i¾ý«ô_DZ8-ê8êWÅpo�WNU¢¸h/ª|7Ñ9"EàBöé—’'6æŠG”@³o%[íH[¶:xð�¿%ŸEBîn´…íOz{Á}wzµmz؈Šm5ˆ÷Ñèr£1>‹ÖÚúɽÛÔ é—[°ëÖì‚ïA¾«‘ãØ O‡õW¦I^sûÍÜ1Š43ë9s]0³~Ú²ÇñÈ÷!òËþ– V·ú+¸Õ¶åœ 3ÓÞùB5ê¯B‰·K·Ó˜½S4å¶£õžÞ×DcÖÕOLq*ÀšÒ/P—Ø¡}gàrÆohBðùlÄÐÒ¶SçJõ#…9Ë‘W~nΕíß¿xÚò®¾h×!O¤ý{ú£™³Eîÿ%Ô¸Åì*N7þ !ƒ%¨³û‡aùÑAÜ¿éCUùNô!*êíþ2 ûôKÙsÅ#š¥Ù·]EÉßû’¾°FpwßKxõ‡'ê¿KW;Ò–E軓ðýÚ§ ôvþ€Ê¼õöW¢²Ä‹Á¤ÏöÉ»‡óêwS¹m¢OÐR¹c¦®–ÖOò•Øb¹ 6Ö¢[Q0Þu» ñ .Úyï‰DÇñç%2»~$'m¿6˜YßzÇ̬ץ~'0˜¹.˜Y?mÙè¿ôöõkÏ[6æ ’™iï\Ó¨‘»8W¢— QÝo ÜÛ6g  ù{Ì-Ï;¯Ãë9—û$Z»ðÜ`6ˆ`]ýÄôá&;þÓÌ••)ê—òª#hè·ù~ÒØª"ëPê9ŸTQ·o]p®/Cø÷• ž'ÔÝÒúÅîwuálbÝ|§á*ÚŠ²Ó¿Ì¬CžÈìú‘½4ûWBGÍ{X)¦^罇?¸k ßÁæ’Sè!G‹®IDz~°uU‘)²O¿”=±1W<¢Yš};_Ò`‹W;Ò–5Èq¡žC7VO­Æ”Dû÷/ž¶üù.VÄ3ø¯,³gÆ…ì+±)!4üyüü8€fu0Ú<<†ÁÖcØÀUE(v¿ëϬ—ãõâg® âwfÑ–mtNU7›¾«ÈÌ´wžØ¨7V¯)…§.qðè÷®X›S+Amh³wж|½YË‘wð*B2ÜÊ¢RÂÿÁ­™sçÑT¿àÆ—ÌŠº <x¿G| ¡¦/qüÇfÿ‰窽¡—jÊÚ¶ ãA÷€¶nê£ñà×Øáº¥þv.³ëGöJÜ¿±„RŽ—±Á} ƒê±õ»QìëQûG >òv'õ›)Öö_1½ñœT÷Ï­Ÿ¬Ó/…ÅÕÏÒ¶ãŠG”@³oçM,ÎÖ­v¤-[ý’}á¯ðüôOí•Õ@ fª™Ýoµå÷¢¾¬_zrpx«Pš·1~±B\ àFì|:ÅÚúɽÛdϼ¯;À{ -OãÏÒJü{Z:4û]ê Ô‹Ÿ¹.˜Y?mÙê9U²¼A23ík5úMÇ<ø1aUa"p{Åi™½SËWž4 ä•íp7f²M+‘'èðÀž†äéšS,­ßL‚¹8b¹8ÞÆº¹Øî½7“,4‘uÓ®™®~ˆÎ±²íÄ—˜ïªðk”ÖP¨‡‘·ÂÅ«šKPâþUs¶ÃÛ;u$M. ìÿ̶«K‰åËx¿ñüåË2ýÒˆqý,m;®xD 4ûV²¤ÁÚ²§®¬†ÿWÖÕzt–CU†p§Ú‰WvÔ¡G§ñ¬­ŸJw%¶3ð÷Û?¥^yäÃöüølÙ™íoýÇ–„Ë$¯Äý.ßj%VþÃØg©V.næº`fý´eË—7Hf¦½sm£Ž!t³®Oÿ&åUè:HÙ[?WKéõ¢ÈöÁK|Z£c7uÍ,¦DºP¿çžÌ­uÓ.Ǻ¶Œ¦®ÂFÏ¿yïØ¤Ù¿£¿À¿žàÔ:ãQ¿ ¹¯¿Ž\G|Jvì§Zf÷Äòe¼ßx¶|Ù§_ÊžØø.¹ãlÒŠGL¼4Í·oíLœ\¶Ü«õèP£åØ”Ÿ–´~‚4 ÍÕïç7®Á?(ÏÅ(’“f¿Kw:+?1çŽê~g2bfý´eG¥Ë$3ÓÞyb£Ê~ÕPéù¾Žg3êÀàù]|_ñ6¶Ú>]<9ÁÜ´qôz÷Ù–+›\5ø©-aJ«ºîõÛvuˆì¥Ý¿"ÿ¼JÄ>E4àFnîT謳?ÍÒþ+áýƳåË>ýrñõ³®í&¦Ysö­DIƒµeK¾ZOŒÄ˪í%uBóþ¨¿5˜ÔVÜ«¯×Í_"˜]?’“v¿Ëvznàb±Ì¬Ÿ¶ì¨tyƒdfÚ;OlT¹¯ êIm1VM/‰Z¸+Ôß;ò?CÛ°~|κú‰6;-¯›Ê8/DîÂ[ör_*åŒ ÚòÇÐó! N'^•`ղלý+ñª"2Þo<[¾üÓ/¥Nl,îÅgâ`ŠÓì[É’kËN¾˜2¸dµõ¥ÌËŠü_R'4Ÿ/1lüi‰4OKFâ~—ïu–.$Ë$3ÓÞ¹¦Q¥¾j§Œ ·õ[¸ËKà,*ÅAÏ%tˆ¥ª X[¿q v4 êðhì \ìÛ‡ªë}¶µ]ö.¢è¿~yâêÆŠu(t:±­ Ëò>ASÈžûIÉ^šý+ùª"2Þoœ\þb fÖO”è‰ß×:e1ÓC­m;&¦Y‰ûV¶¤ÁÚ²%_­GÒåF³&¡yè"*+O%|Þ¨Û¹£(Ú¸/žv.³ëGrJÜïò] Î¦À…ÚNCÏ14؉ëÞj)f‰ÉÌ´wžØ¨r_5œ&ër¨‹gEݲ&p1y5ëWaƒëç„«èê¾î8»/â‰Î.6»~d¯Äý+ýª"ý¨Ü}*é~c{§íjÚo‘‰ƒ3ë'Êù*Òþ²beÛ1q0%JÜ·²% ž[¶:øž³ZÏ!œÊ2£A¾åFµß™ÔÏYšö¡û·ä³÷‚Õ{ájŒ?Ö2»~$'Í~—îu6.Ôæëÿ ‡ò–«?_‰u…ÛàÜV€Üeoâ`ÓCÚNn¦½óÄF5¼jxã0`0{§hË—9TDŸ¡óú7ð¸\p×4 õþ ng¬¨[Ö.&îÀóÚ»3_�g(à-ú|ê=(£x>4{_®Ùõ#{%î_ÙW‘qÚîlù‹O,˜Y?Qv6.˜8˜¦iö­dIƒT¶2‚žú3¸jû-Xr.7š5ß™B¨ö‚©êÖDceVØô™HrJÜïò] Î¦ÀE5…pl8Ž–™Y ¢ÏÛQ»³Â–”�23íkU?KqÔ_…o—íƒÙ—CÕ]Ùa_$N”ß}«#áì„Ù*’å€òª"lq_FÛ̽c7Ñtªë‹<øY<¾]‡Cû/Í̾0»~d/Íþ•|U„¾CYi¼3ß:x¿Ü…¼ürÛ¦íΖŸ|¯û4ãÄÁ‚™õegSà‚‰ƒišvߪ_Z%Jl\¶ZÏpüOà@áõ;J1|!ë¿dÏ)_w¹Ño´ñö¿ì \ËWl…‡«Q‚Äý.ßm­Ù¸Eгyv–ØŒÄïRy><3æ3·íäfÚ;×4ªÞÀ{zs¼roÛœ®æïMX¾ÜË¡Fñ¤a^qºÑè_ÕœDd ÞÝö-‡:K¾šò•ø¶¯Šý,忨†ÚûSõéK»å šò#ÑûT{Œ+á�ª7¯ÃßõL0—uõ[|â`ÁÌú‰²³'pÁÄÁ4kξ•vU•Á@ðgœsíDÞ ‡úùù*œŸü g«¾–`Æ… ߪ"Ù¸¸—çjÂ…±µãÞ@Ķö#9i÷»þjDDZeæº+¿} ÕA7†GÏêž³3ë§-{áÀØ´Åk32ÚÐÚteë‹áùù¶úø&|‡>ù^enÛÉÍ´wžØ¨±éØkJá©KŒÄùð­kÖ—ýMýw=®ŸiNŠfï”Äòå^U$¾úµÝÉA�{—C!a mù“n9ª–Ú©s¶§3SÝÍ®Ùkþý«ÿ®¢æj(þXËÚþ;—ÒÇvVà´ òÕc}1‰ƒ3ë'ÊΞÀÓ,;•zU‘ <»þ ÖŠ~›».ßMÜ¿s" ½1ŠÙý6¹~2®*’5‹è0žõÏÜšìòœA£¿Ïp˜`výHN Ùï²Ì¬O¤DBh¿r Ÿ8_5œ%&˜Y?mÙãxäÛ‰eêÏÄÏ·—±©ö^ì‚•x¼T™öÎ5}ˆ¦cüدíþãøÿü¿}ñGZfïmù2/‡*ÖL¯Àá–ĵŭß¡"¿Äþ5Ó%Ì!¡-w;zñûDŠO]å7´·ÏÞ`výÈ^†ûW\ál¿ŠSŸacœ¾Þø/´,í¿á.Î Z>n¿›´Äç,Kë—3ë'ÊΚÀS‚Ä}+÷ª"‚¸¸Ó‰æš¿ ´¢WÚCˆD‡Ðåý ì¾UDÒUE²&p¡<ÆõCoª:V¬{NçVä®´5çÉI³ß%ŸYûl½¾ªÝ(³ÄrV¡`×g8yÔ­{Î̬ߜ²‡oàxÕuôé^XÞc žÎÀì¶“™iï|N£*ˆ& ¥ŠÄɼj$ˆÚ¢µÈ-ت~ˆlCẕêï—#ßu Ã6}Ï0‡„¶ü^Ôï*Æ£bº­Ávt/ 7ˆ/íf~ýÈ^Úý+¾€w᦯ » Ä-Eê—µ‚ÝpŸ<× ¡ ØåÜ£š>û)Ê ·OååPâòî|¬Ý} ![Ž/Õ" fÖO”5 &¦‰ûVþUE¦M <ƒ’ÜåX±BdÄ— ÇEV¬*²8V¶ßdg Ö;Þ†«åáì, õßQ[†Ý6å|#9%îw¹gÖ¡ÛûÞÔéÜ-8P}qæÖ1edC6äæ–­~•h¥!™™öÎ5*{$®ÿ:Îßxª{Bž6yïÎ$$&²´~*%ÒƒÖón”¡¨ô/ð4܉]‰ÑciÝ$Ì!¡-¿¾¢u(Øæ„Ș1ÜÀ¿Çìú‘½÷ïd÷9lÝ£½…Nàâô”ؤc"Kûoȇ¢é™`šm;öøº0iwàBïÜž"q°`fýDÙ‘î%Ü×:ueX–µÑ5å3q0%Ðì[ÉWÉ˃×ÏýkÃÔ``M>9u7/þ€[É÷¸«Ìî·Úòå\UD›Ð|q¬l¿‰ ¯ÍI¸¬îó„œoɃ=³ëGrÒìwÙgÖG‡Ñ3jßGÑî*ønvb@wʸ˜Døî]<Ôƒ“hgÚšÝv23í'6ªì9.Äà@ÉÁÄÍ¡ùÐ?3Óœò%[u–|9$´åàvk7Ç4¿~d/íþ"ÜÀ•S•(.Ú‹*ßMtŠ$d².ÛÑz/°0ÖÕoñ‰ƒ3ë—\¶lk£kÊgâ`J ö탇áø÷ EâUEÆj>ŠÂÜ—Ô¾™]ç†Q¦™ÝoEùͶ„«ŠhÉ»›ö£jÓ¸¯ÝŠSÕ­Uð•¢Ès-öø¶ïö'̾0»~$§9û]ö™õ1³³lË‹wâ£âOPoû­"Q„ê÷ÃyàHÂÌÚä-a¦­Êì¶“™iï\Ó¨F‘¸À ìmx¤eöNÑ”jÀÁŠÔù|¨ûº yËÞ@Ù×ßh‚,±íR`&bniýyUÓÒºäPÑž´¿§Y[?A® ãd/ÃýÄý›>T•ïDñG¢¢^‚[Eb¾äºO¢¡µ ÏS ¬«ßâ fÖO[¶|k£kËgâ`š%öm±Ám afßÐ-{ú få.l/ý§®ü]­?ãŸ6͸Țê–y%¶Ø²–˾klŽMµ¸µˆÇ´ôhö»ô9.t(#è©?#Áª"Q„|ïÇÓ$Ï®MÜâ3mÕ¿0»ídfÚ;×4ª¸£å·¤H\÷êë˜^F/‰Ù;ES~lÉÁ1„;}(Ï{+ v`—Ë8‘`]ýd_U?‡ÄѲ­Ø›ª9ŽÐå}X»v.‡¦î×µ¶~òe'{Í¿Õã«çIV £ó\)Öˆ/¹êϧ¶å¶&J›-ñ‰ƒ3ë§-[¾µÑµå3q0ÍûVæÀEt  f,LÝ:r•›?²-ÇEÖ.¤_‰í)ZŽ…–>½ jÂ6¶ì¼IrJÜïÒϬ³°NWÁUý:Åy,‚ÿRýúÁBÁÌúiËžÀàíÛèéƒÿâI¸Å8jžÕ|Ìn;™™öÎ5jx+†=÷k šòû¯ÁUºëꀠÜëÔÑÐU¸ÊöÂuÅîÁ‹äË¡¦Ê!±Ç‡îI›f'{i÷ïB­çÔНp±S²ÔÇþ«¸HŒkYÙ•' (ye;ÜôƳI‹AB‡÷�öØ”(MSþ" fÖO[¶|k£kËgâ`š%ö­Ì‹…$½Užö¡Oç›¶ÙýV”Ÿ5 ÙWb w¡ãÁHÊÛk“gÔš]?’“f¿K=³~ ÷k·ÁáÈEÁÛyXSâî:ìXéPÇ'Ða0³~Ée+ávÔ­V¾yÅ{ñaA ï ¤¦]÷ö@³ÛNf¦½sM£†¾CYi¼3Q¸:x¿Ü…¼ürœôÛÿå[VÄT&ßÝ„2áÖϰÛö%%_Ušò%Ì0NöJÜ¿“÷k±Éñ’:ðÞˆukvÁ÷ ßõÃñžëouËú?ÖÚ_çœ#¥%³²~Âb fÖO[¶|k£kËgâ`š%öm¶.Œ˜ÝoEùٳܨä+±é®d¥ÝfgÔN1»~$'Í~—zf½˜}Yˆ±ïR£èª­À1ÿPìç5†'8:õ´$fÖO[¶çí€ÃQwÛ€ú .XWÀB°ú°-ã<™™öÎ5»Cû‰¢„¨Þ¼;|b_“™½S4凾ÃÁš»s¿0Œµ£ášÓÅe^!\«÷c$©É«°$²¶~òe'{%îßXõµèVŒwÁÇn«e ¢'ñžÚgôrVö_¥ç|pø:žÍDކ»ø¾âmlõvÏ hVÖ/F²åP5$[][>Ó,±o¸H(?{’¯Äf¸’UÒ›Q;õ'f×ä”ÜodžY¯ô7áãOœúÎ?ÜŒýû›1íG««Äð¼ffý´e¨ã”73³šÏtà¢_ý¯~ýÌn;™™öÎçkT¥ÿ:Ží¬Ài›ò hÊW~GdL'|"KàB%ír¨âª¡sEìgÚM» K"íß¿x¢|™3Œ“½4ûW ¡ùãÏÑüLô…4ï?‚æá1 ¶Ã)f4„ÑY[ŒUÓ_$ ×M-?˜ÿÚ†í鿚ò%\u–XbìÿâÁïIí””7"‘™uæ–ÏÄÁ4Eì[.Ò#ÊϞ䜒¯Ä&áJV$'Í~—zfýz¾ÿ()WX|[õ´ ë]>7·~Ú²Œª¿¾:~[¨\lÀëëVñê@üû©–™u“iï<ÓF5{§hÊWž í„z€­pÄ~>»­€Óö[E&Ðõn$R&ï¡þL�zœ¬«›Ð‹úƒ•8¥IÈs®’R¸êgWaIdEýdþCöJÜ¿“=ðþš—b?Ón¯¡¢åiüYZ‰o†9å+#èmýîò8‹JqÐs "_‹ëê'ûr¨Qý%ÆòF(¡Kؽ6»/?Œ}±²®í&¦Ybß2p‘Q~ö.²`%6e!ÿ%Ô¸Å9ÓþåZINšý.õÌzqÛè‡È% M«Ô_Á­žé%¨ç2³~sËùÖÎàs×7ðŠ™âçƒü.Ì´wži£š½SËM_¶ §¾Õvjß÷héžZ37™uõËäÇÏÙlŠÄiËãA÷@Ò¥`<ø5Þuÿb[`… 2’¸cK¿å—¡FsÜ_@ã­ÿè&D¬è¿™°®~²/‡*ÎFKŒMå°5pÁÄÁ”@ìÛ[íúW&Â̾!Ê–=pÑ}«C÷BÉBXQ¿Y’¯Ä¦ ¡£æ=¬Ìq`EÞ{øó‡±¶ðl.9…ÎR¥óíwyfÖO ÿÒQì>åÇ`bER\�̬Ÿ(;ÕJMó1»ídfÚ;Ï´QÍÞ)‰å+=^lÙ2}oQ¢ Dm¿C\5<„Ò/Ï& ¬ÎâËÒä—A``îèÜʶÂßU7àWÍÇüOÃA¬]áÒ XQ?.Ȉfÿö7¢r÷)ø?<$Zª9 ÖÕOöåP§–»·ˆïֵЉƒ)Aâ¾UžqE|Ö×ßB¯˜¾ ßÙ¶Ú‘([öÀ…–8]‡×s\ŠÚòå^‰-ö}Øñ26¸oÅnGŽúÝ(öõ`<XƒlÊ«DrÊt¿[ׯX¿7‹([æsªÌL{ç™6ªÙ;ES~ô nºö¡êfwÂà[ݺà¹`÷­" "}}xªù´˜@øÎWØüÊðõÌ]ƒØÒ¶3Ìq±y®[Ð;$µÿâ‰ò¸ #šý+ûRÍi°´~’/‡Úín$ X¤¹Íމƒi–fß7£üÑØ3eü¼Ûs±¢à(Ù WÛ`üIZfö Qv¤û_h](™Àó`Sì"J}k¯ÚwÕï#Ý7ÑP þ¹ßG³û­¶ü(ú¯Fž¸Ÿ}Å::ØV‹eyŸ )$Cýä^‰m"àÆêœí3˵N. ìÿ̶¼O$§L÷»uýzñ€3ë'Êfà"=¦½óLÕì’XþÔ’ˆÉ±ÉãBúÁÜR…ågu§îY[·^\p×â3Ëz‰­ÞCGÑðȾ/ \Íþ•}©æ4X]?y—C•ó6;&&=‰ûv"ðŠbK÷MàYó¬ZV oOĶeµeOb¸ù Þ8x=‘ Œß÷bûÊWPPZ†’¢*´…çÎl0»ßjÊŸ¼‹šõ«ÔAöÏ ³,Æñ¼ã4vî¾8³Äh"Kë'ûJl£¿À¿žàÔmÒQ¿ ¹¯¿Ž\‡}Á|’S¦ûݺ~½ø À‚™õe3p‘ÓÞy¦jöNÑ”¯ô¡aÿøn'¾ÅöotÈ¡K v⺷2dž×–¯—ãB­qw-Þ*i°íKdD³e_ª9 ÖÕoñ‰ƒ3ë§-[\e9’”»¨ç\¥(qÕÛv›ÏM¤'qßNÞ?ƒ÷_ú®âpþËñ8#è©?ˆ= }–µe‹¥ûöMå¶Qž ¹üU,+:žèmÌî·šò'îÀóÚ»33f(à-ú|êØSFñ|höV6Këg8KÕÞ•Ø<œNR¨~ß ÝÄß?¯‚×ÿÑ€¹¹[PqþŽmyŸHN™îw+úµ±Ô€3ë'Êfà"=¦½óLÕì"ÊoðOG·ÕõÐPR\žûÜ•þŸp(o¹ú³•XW¸ ÎmÈ]f¼ä •uÓŸqñOü\ó>V­v# s>°¢~ÍþU&MÎî.ÓRÍi°®~rÞ7:KÁèƒø-y'Šä—ï~©{n7³n‚(Ÿç&Ò£Ù·3 sàÈ;ŒëýÃèi®«²Õ­s/fö mÙc¸_»‡›;ÑÕtùÓWâ#]¨ß£¿šÙýVÛvϨ*Â÷e´Í|'¹‰¦SåX_äÁÏâñí:ÚiæÂŠ¥õS¿3ɸ›¬+Ú¼2ÝïVôëL˜Y?Q6é1íËÜaQ¾þ½í‰› ÷¹GÐYSdžãh™™e!f`´£V\Ùþ%Áèê#»¿ïšºw;‰öï_<Qþl†ñôõ>›»•~´ßz ¶î\f×ì¥Ù¿¡Kpy»õ…ÍŠþ› ëê'ç}£³Ôú}w¾_û4¹‹zÿç{T¬Í·íÊ0¤gî¾"<ð4¾Ì𔨿 %ç+3ûFrÙJ¸5E«ÕŸ/GÞ¡ŸÐ?ö4Ÿ‰0Ï%%:žbv¿Õ”¯ôÀ·}Uìg)7Ç6ÔÞŸšQ+›I[¾œ+±1pA‹•é~·¢_gÂÌú‰²¸Hiï\æ#ˆò++OM}Ù>[‰ÂWŠà:W7ó¼îë2äKqŸû(‚žÍ³™çg$.98‘çÃ3:ÖÕMèÅ…*î& B¡ÇZ]¿úÊ*üÐÚ–0#DÝnÕ¢ô-ýAô&ÕÕìú‘½4û7–œs vU¡Þ߇ˆÞÁžÄÚþ»xÖÕOÎûFgÏqä·í^|.HfßFîâ\Ékp¨??×lŽ7Pîm›³J†æï_0ݲ£a „» ¢‘1˃*‚¶üI ·œ@U˃„ï$zÛlPÈÚúɹ´X™îw+úu&̬Ÿ(›‹ô˜öÎeî0‚(úÞöÙDX‰ž¡¥âm f\¨µ~›¶¸q­mzà݆֦“([_ ÏÏ·ÕÇ7á;ôéÌì ëê&¨_V¢úSÂX[?£ûI¶oãpóìm7âgôÇ¥Ù¿¡Ëðø‚è 6ãÔ'Û‘·¡5WÚ%Z:oñì­Ÿý÷Ί"t¡5ÿH Z¶á¦÷5ôØ6Àbà‚ô$îÛØÊkJáÑÜNà÷®X_ö7õßõ¸ÔÎ$4³o,¬ì0üÇ*bID“™ÝoµåánG/~O¾ðqíýúžµõ“s%6.h±2ÝïVôëL˜Y?QöìJMz„(Úÿ…n+jf·ÌL{ç2w!±üÉοcÛᛚåû¦ô­Ä 2x ³åã‘o'–©ÅÏŒ·—±©ö^,™ xl¦LË·¶~"ÇyÜéM¼º¡nQ±­ñïÞ ]n4ƿԘ]?²—fÿ&æ¸ËQ¾}�5ÕeØ·ŸœúÏçÞìdmÿ]<kë'n[[xâ`ÁÌú%×M7Ç…ò+jßúȶÛì¸ =š}}ˆ¦cü˜4ОœÀÞ†GñGZfö mÙê—ìÎs(YóRìçÉ›#o?¼I³×ÄÏͤ-¿õ»Šqà¨K='ÍnG˶bSléáq„.ïÃÚµûp94u~·º~2®ÄÆÀ-V¦ûÝŠ~ 3ë§-;ŠPý1¸~¸™pN˜:/Ô–¾ Wc‚½³³ê³ÛNf¦½s™;Œ )_ÀÍÛ°¦p*Å\ÅûØ«~(¯,Fm§þ4Kë7|Ç«®£/qà=g›½=ÃÒº¥ÁÚú án04wuˆ‰Nœÿâb+âGŸ ¥rÇÌ”-³ëGö2Ü¿"pQìCH ÆÃ=¸]»k—½Š"±EÿìJkûïâYY¿Å&̬Ÿ¶l½~´ýü5JV½ w`j¹¿DV´¤G³oû¯ã|ËoI‰ƒíK®-[¬*R€5¥_ .a6ˆÏw.g!ÊjÄ*>M>Ÿqev¿Õ–ß _Ñ:lsÂéLÚöøÐ=iwàBΕØ¸ ÅÊt¿[ѯ3afý´eßÖ:»­Â†ÃMYt{›ÌL{ç™6ªÙ;eNùÊ0º< WY‰ú·¥•§ðc÷°á•Ckë§w;Æ]<‹«ý6'ÂJƒµõ áêù[šÙ4Âìšé"Cú68V–qÆÅa¸c‹sèì¹úªÝ(XáPŸëÀŠ‚=8ÑúÛ̹ÀÚþ»xÖÕoñ‰ƒ3ë§-ÛèËÀr¬Û}ÝãsÏîÚ¿ñDù³‰ƒÏìú‘}4û6–{'¹ßŠÍž„áÚ²Õc<Ô„cÇB¿¦"#TAƒíßIp»µú7ªé³¶~r®ÄÆÀ-V¦ûÝŠ~ 3ë§-[\d9Ú;=I¤»ÐX±5‡ê¿{ÐÙX…OÅ¥5óÛNf¦½s™;Œ­õS"!´_9…Oœ¯Â‘S _hîG Û.±üùÖL_¸Ñ9»ô¥öïéF³h ލÇÕª‚ó¥xÿp¬Aá¸èïÑdõÌî™–o]ýŸ8X0³~ڲŗ¯à½«]U$¤I(¨e]Û \ñˆfiömè;”•VÁ;3›¡Þ/w!Ϧ„áÚ²'ÐõZžiƒ“÷P&`Ûª³B¸VïOZÞ>ñbÅ\ÖÖOΕØnµÇûUäñLþ·DÊ@nuÏ¥&˜]?’S¦ûÝŠ~ 3ë§-ûwtU–áïÉ+2M°/ç-üûù8žµ|Šüx€Ñì¶“™iï\æ#Ì_¾: }t5WCñÇZÖÖoÏïß„oæ*°Xá3œ<êÆ.æÐ–ß‹ú²r|é]1Æç­BiÞF”þÅ–5ÓÉ^šýªGñº7°.v\åÀ±¦ŸœºŠöy¬í¿‹g]ýŸ8X0³~Ée+ѨÔW^¹âMÓì[ÁãTÞ­uØá{0÷ÖG•™}C[¶ÑL&u[u�ÍÏæqâwfÒ–?ßÅŠøÓhÿþÅÓ–/ùJl¡‹¨t}ÖÄs’ºÝªýo¹.Á|hy0Ÿä”é~·´_§ÁÌúiËžÿœ:y¿›k°‹3.¸˜CE¨ý*N}R„5Žpúzã¿Ð²®~cèö¾‡êcG8“üNÂPÒˆ`[Û-µõÓ¹ª© áNµ¯ì¨CÎ7@³ëGöÒìߨ”ì•È+9†º›]x®s<%³¶ÿ.žuõ[|â`AüÌ,™–mfÝmùF¬„+-óí[¥ÿ:Ží¬ÀéŽÙÙ‰ÌìÚ²Õ/Ùõ‡PúåÙÙ‹¾³ø²´�ùegˆeÉ×2»ßjËïEýÁJœÒ¬Èr®’R¸ê¶\¬Ð–¯wëoj–ÖÏð6¥éÍþ Í!ëò>‘œ2Ýïf÷™ë§-{çÔhþ÷ŽŸ¿Ìn;™™öÎeî0‚¶|q_vnúª°«`•ú;q_ûn¸O‡ë‚Ý Ut½LyE»«à»Ù‰È$æ-_yŒ–c{P~º}æ$Èìú‘½4û7t .o×ÌÀp!lï¿ó°´~‹L,˜Y¿¬j;qå•+Qœf߆»|˜¼ÂÄ8·ßMÊ+1Ë̾¡-[oé¾ „ï|…ͯ|�_ÏÜ•1Ìî·Úòõ’_*~wÝ¿Hp+ËâYZ¿Ðp×þ‚ÞÄs’º=lüÛjü±÷v^†ëÓ«3}Ñìú‘œ²ª_§ÁÌúiË–ïœ*3ÓÞ¹ÌFH,²û¶Š©â3÷µÇ—òRFñ|è÷©'%±²~³f,åÅ;ñQñ'¨ç­"sÌ-_´Ûô’U¨i¸…û:Ë\N3»~d/Íþ}r ¿èß·;c¢­·âìè¿‹cmýô®'̬_vµ]•%^ jGX˜¼{9¯~Ç–; ]À.ç~MXÎÓåúe…Ûá ªç+å!.ïÎÇÚÝ—²`ð8ÙQô·TagùYt„í¿Uä»êüªx÷àbí —îŠ>ÖÖoñ,­ŸnÐLýì¬Ç-ýê¿Ôsþ³ë¨Ì?6Ó–f×ä”Uý: fÖoþ²í=§ÊÌ´w.s‡´åGî àÊ©JíE•ï&:"P¤ \$PFÐS†«ŠèЖ¯¿æ¼#ï4%LuLdvýÈ^šýúåe'’–õÓnu_W ¼~væ•Ùý#ÓòíªßB fÖ/»Ún¾{ñ¹âÑR¢Ù·!Šr °-y9OçvìñuaÒÖÀÅ$Âwïâaòm–Êoho·~ÅA[¾Ñqµy®[Ð[à^û÷/^¦å[Z?±ï§Iû1a)ÞÉ{¨Ý´+w]挋%.«úu̬ŸnÙÑgè¼þ <.Ü5 h½?h8Øì¶“™iï\æ#–Äý›>T•ïDñG¢"aÀ’ÈÒúE¡õt\Õ? SDÞĽN—šè·gàiù–ÖOéCCI>œîè¯n D0ÐáÅî=mY3ì¥Ù¿óÞÏ+6m®ñ33eZ¾µõ[\â`ÁÌúeWÛÍ—8XáŠGKˆfß¶£õžÞº2ÆÌìÚ²ÅýØûá<p$a6ˆºÝ‹ÂM'W „.a÷Ú|ì¾ü0ÖwÍî·Úòõ–m÷ÐQ4<âw&=šòç]Šw !ÿ?§¾‹Æiþž–ŒL÷»ÙýFæúÍ);rçJ^ƒCý¹ø]ls¼‰ƒM³9®™Y7Ù™öÎ3mT³wÊüåO"Ò󃫊įº9rQðvÖ”øð «;V:àØp±{Z´ìo»Ô,­_Ô×–Zt'7“ò�Þ¢Ïm™6JöÒìßШò¶'L)ÖÙîúP•ëÆÒþ›ëê·øÄÁ‚™õËž¶˜8˜fiömÿ ÔßÔöÄ«Þ:ÌìÚ²£êØö}älMš "¶ðuÙ¸ÐËq¡Zݵx«¤Á–‹™–oiý$[Š—ä•Uý: fÖO[vOvá§Þøª=êt Þ݇4«²M3»ídfÚ;—¹ÃÚòÇj=·ë+\Œ]Ý嫸x¢é¬«ß(‚žBl¬ýU­×(ºj+pÌ?ûygÍŸá ÎM5emÛ-ž¥õSºáýàZž%ä´Ó±¾?„ü­^ôØð%†ì¥Ù¿=^¸¯Šã)…èu¸«ïÅXÜÓ`iý™8X0³~YÕvz˜8xÉÒìÛy¯zÏ¥ùûL[öo߯½¹w©2³n‚¶|½ÿÄÏ5ïcÕj7:õ¶¶~‹giý$[Š—ä•Uý: fÖO[v~×G¨íNž6Ž^ï¾™W‰Ìn;™™öÎeî0BbùSë㾄܂X·f|‚ðíXÇfx:ô¶~J>þôÇ©õLJ›±3†£ýhu•ØÒ¡3-ßÚú‰§Q´j ¶‰+Boc],ëF¸Ú’®vÆ™]?²—fÿ†êQR¸7) žv;ZæD o™¡_þ fÖ/ûÚŽ‰ƒiŠf߆.¢²òÔì-Db;wE÷ÙrÕ[[öú¯]­‘¤!ìä=ÔŸ H°j‡AŽ G>vߥæÒþý‹—iùv×ÏÎ¥xI^ÙÞ¯çcfý´eÿŽo·$^,ÇóÎïP‘_oÏÜ\‹f·ÌL{ç2w!±ü‰ ¯m·(ï:ƒŽÝV?|Õ/”'ñžçŽú1=—uõCÏ÷a#éCXl«þ‚–á¹ñïÙ¿5G¦å[_¿IDz[qÞ½ÅÎ(=X†Ž§¶Í¦!{iö/s\,Ú¼å§H,˜Y¿ìj;&¦Yš};Ú‡îß’‡Ø#Vï…«-¶ÞÌfö mÙâV‘âØÏæl« ùÙÜã^üÎLÚò{q¡Ê‡»š[þ´K2'³¶~‹g}ýÄ é:¼žãp¹O¢¡µ Ï fÐ f×ä”}ýzq̬ߜ²#AÔ­ß‚· …ëVªÏYŽ|×- ëzf·ÌL{ç2wAS¾BóÇŸÇ?pмÿš‡Ç0Øz \~Ý®uõÇ#߇È/û›öêKýÜê Ûýδ|këµz?F’jòÞ%œ Çi™]?²—fÿ†|x·¢EQ0Òò)Þeàb†¦üE&̬_VµS; 5¢ÚLx«[o•XaÃwmÙQ„ê]¨<›TÖW‡s®÷°±ì skgv¿Õ–¯è,Ñœšµõ[<këFç¹Ò¤‹eË‘wð*B6ÜþGòÊt¿›Ýod®Ÿ^ÙJ¤­çÝ(/.BQé_ài¸ƒAss˜öÎeî0Bbù“=ð~ÒU¯©í5T´<?K+ñïÍ0[þú/ÅîS~ízÿÒLË\<kë7ß’ƒñ§%Ðþ=ýÑhöoȇbƒÀ´¨ßb.fÌ–¿øÄÁ‚™õËž¶S1q0%Ðì[£™`+¶ÂcCÀ][¶‚Ñð[r¿¿ƒên´…9 4Y6ÕOyÒ€’W¶ÃÝ@o|–Šy‚ïìiè³åbÉ)›úu:̬Ÿ¶lùn¿“™iï\æ#$–¯<òa{~jg4ø. ñÖt¤ ÖÕOöi™‹gmýzQ°§ê÷íi¸JJáª`@gÿš]?²—fÿ>kÄ®wô“´N÷î®Æßâ­î¿‹g]ýŸ8X0³~ÙÓv*&¦š}º—ç*Ú4 &Ûqo ¢;pÌìÚ²Õï$ß„ï×>ÍŒÞÎP™·žy·tdSý¢þϰ%vN×Rz½(²i2É)›úu:̬Ÿ¶lùÆy23ígÚ¨fïMùý¨Ü} þÁÄÎaßÒcÂlùbZæ!”~y6aà}_– _Ši™‹gmýô–FS0üïºa$s Òì_åWÔn|å½:_ÈDC—Q¾f j:#ñŸYÝÏÊú-6q°`fý²©íDÿbâ`š&öm¸ã,öíþ×{£7ø?è·_‰|ÝíðØ–g@[¶Ñ—lVl¬ÖýΤýû/ÓòY¿Ùò•žoðÁáëx6Ó×Dá»ø¾âmlõvó¼D3²©_§ÃÌúiËã¼#¨8õmÂ8OÜ~WŠ—:µaœ'3ÓÞ¹ÌFД/ÙÒcÂlùê—Û¾><ÕTbá;_aó+À×3÷^rëê–kë׋ïªðk•¡P¨ÿÓpkW¸8{ Òîßq„vc¥#¥žïp££{ªtßÁ†/Qºn9–‰«ß 3ø¬í¿‹g]ýŸ8X˜ýû/Ӳͬ›0·|&¦)bßÖnÊEaåßP}tÞ·\åWâìWÅX©þNVDG,˜1—™}C[¶ú%ûÂ_áùéŸ ³AÔ-Ð[ YÙý6ÓòY¿ÄòÃè¬-ƪÜls:á,\‡êïùŸ¡mØú¾GòÊ®~½xfÖO[vŠÛïÞýÒ–`°ÌL{ç2wAS~è;”•VÁ›éò~¹ yùå¶,=&¤.?Šþ–*ì,?«û%ÆÞºÍÏÚúå¸XŽ<×-õ#z.íßÓÍœý«ü†›ÇÞ‰´›Þ sþþË´|ëê·øÄÁ‚™õËž¶˜8˜f‰}[üÒGh|6¥»sŠQ÷oÞßâÂåÀýXÀ½³© ûÏ[Õ;V¶2„ŽÓ‡°»ê'ôô÷ øNÝJDwàºm ¸eZ>ë—T¾2‚ÞÖoá./³¨=—Ð1ÈešI+ëúõ"™Y?mÙQýÛïþç{T¬Í·åö;™™öÎeî0‚¦üÈcô>Õ~ä*á�ª7¯Ãßè]C°´~‹$sÝkë׋ îZü#ñÊ¿ÞCGÑðˆK.EºûWEÈžƒ¥(r:c¿ôÞ@7ƒsÌ–¿øÄÁ‚™õËž¶˜8˜f‰}ëŒÏŒú]X‘S Ÿ¿‡½f#-¨üÌžUE&ï×bÓK›QyªGKßÂJ±TßÄWÛWÇ~Ÿ“³E5íºyÁÌî·™–Ïú%”ßõ·“‚cöÞ:Mrʪ~3ë§-Ûèö;qñì¸- efÚ;Ï´QÍÞ)ó•¯ô_DZ8Ý1$ጋÔd®›`mýôr\¨û·»o•4pÉÁ%(»úïâYW?ã[£„R‚ø½Y2-Û̺ Úò™8˜f‰}ëÉÿ-#ÊTàâåÃh Q³s7>¯ý>ïßð‰s3Ú°Ò™(»¿áC¼TÚˆgCwí;Èqzñï†rlq]B »/¶\k“ëSœïù=þW³Ìî·™–Ïú%”/á­Ó$§L÷»ÙýFæúiË·ßU£æm XÛpÓ{‡z,TËδw.s‡þÈõcÛ%–¯7ãâŸø¹æ}¬ZíF@glevýÈ^ÙÕϺú©¶‹L,˜Y¿ìi;‰ƒi–Ø·=¾Ã8Ü܇gÍûñÒk'&î¼€ÊÍkàXñ*Öå¾_ÈžãJ)WÄV•ÃïZ \ø}UðöNßB `¤¥ ŸqU‘9²ª~¡¬¨AÝÌ9]ÝιPRâB½M·N“œ²ª_§ÁÌúiË6Èq!’Ç¿õžÌ=ç›Ýv23íËÜa„?rýØv‰åLÇväc÷÷]лkSû÷ôG“éþ5»dOýŸ8X0³~ÙÓvӬؾU†ôEiÉ'8LžíAçùShѬ~6Ë̾!Êžz_Ñ‚‘xàâåÊ›wžÂÎÇP[Wï×ù¾R7)¯Ùý6ÓòY¿„òGûÐý[ò7£«ËáfîJUý: fÖO[¶ÞŒ ?Ú~þ%«ÞT»‘øóf™Ýv23íËÜa„?rýØv9xð(~¯m/.TùpW38xŒ°þU+Áìú‘½²¡ÿfÂÞú¥N,˜Y¿ìj;&¦Y™î[3ûF¬ìh7|ûŽ£¹¿Íekñšç&”!tÖÆæÜåXñúëÈ-ò!ÿ›Df÷[™ÛNȪú…Qí &|_R·Þ;h¨Èϸ™Ëìú‘œ²ª_§ÁÌúiË6ºív9Öí¾€îñ¹óœ´¿´˜öÎ3mT³wʹ~l»øŠÝñ+– ¢Qý”³ëGöʆþ›‰¥\¿ìj;&¦Y2÷Ý鲕p|‡w£äà·&&':qþ‹Œ?Ldv¿•¹í„¬ªŸQŽ Ç¸Úôö®ùõ#9eºßÍî72×O”èÁÃØyT̸ø Þ»ÚUEBaÝ@¡`vÛÉÌ´w.s‡þÈõcÛ%.Ïìú‘½²¡ÿfb)×/»Úމƒi–Ì}Wæº ¬_f4å‡~€»æ§„`ªºÝ<‡C‡.áQT礤2»~$§¬ê×i0³~¢ì¯bf©S%Åb.±šÝv23íËÜa„?rýØv \±lè¿™XÊõË®¶câ`š%sß•¹në—Mùº9.ÄJ2%(iè›hÌ®É)«úu̬Ÿ(;1p±Xf·ÌL{ç2wá\?¶d,úo&–rý²«í˜8˜feºoÍì2×M`ý2£)_oÆE[jJÖbµ; {UØìú‘œ²ª_§ÁÌú‰²¸Hiï\æ#ü‘ëǶcà‚ŒeCÿÍÄR®_6´“™û®ÌuX¿ÌhÊ7ÈqáX·ßwë-Òl~ýHN™îw³ûÌõe3p‘ÓÞ¹hÔL73eZ¾ÌõcÛ1pAƲ¡ÿfb)×/ÚnöÜÄÄÁ4Kæ¾+sÝÖ/3¢üÃS·„~@•·=!˜*¶§ä·Ì®É)úu&̬Ÿ(›‹ôØöÎínt™;´Iù2×M°¢~ \‘lè¿™XÊõˆ¶ã¹‰ôÈÜwe®›ÀúeF”_<½Ô©2è„qBÙõ#9‰ýžéf¦LË7³~¢l.ÒcÛ;·»ÑeîÐB&åË\7ÁŠúußêÀ@ì³wwƒ!LÆ~3KyD{¿þèÁìú‘½²¡ÿfb)×/ÚŽ Ò#sß•¹në—QþLà" fײ“ÝýBæãN”ÍÀEzl{çìЩeR¾Ìu¬­_/êwãÀQ\®ÙíhÙVlòÜÁ¸ú¿Ðå}X»v.‡¦Òá™]?²WvõßÅ[Êõˆ¶cà‚ôÈÜwe®›ÀúeF”ÏÀ½hv÷ ™;Qv¤û_hGÝ$Âwïâáœ+¬¿¡½ý WòIbÛ;—¡Cgº™Iïõ³™Iïõ»™I[~/|EëP°Í §3iÛãC÷$KM¦û×Úþ»xK¹~ÙÐv \™û®ÌuX¿Ìˆò¸ Íî~!óq§-;ŠPý~8Ñ\`uÝ‹ÂM'W „.a÷Ú|ì¾ü0ÈXÊÇœmï\öF—¹~l»Ô´¯?€Û­ÝºKx‘½})3bÿfº™)Óò—rý²¡í¸ =2÷]™ë&°~™å3pA/šÝýB¼~¦›Y´eGò½Ü‚­s/°:À×=ÆÀEÛÞ¹ì.sýØv©Í}ýq<Oç8\.N7þ ¡Hòœ¬Y²·/™K¾þ»8f×_æúeCÛ1pAzľÍt3K¦e›Y7õËŒ(Ÿ zÑdïvÖOûÚ¼}÷q…u)s¶½svèô±íRÓ¾~ý×#Ï¡~±[±…N'¶äbYÞ'h ÅŸ£%{û’¹äê¿‹gvýe®_6´S:ìÜ÷Ùp\e‚õcà‚^<Ùû…õ›ûÚ ¢Ï;qÝ[ —ë8<§áêæ·–ò1gÛ;g‡NÛ.5ÍëOÞEÍúUØàú9a–Å8žwœÆÎÝñDç¬ {û’¹¤ê¿i0»þ2×/»ÚމƒiáìÜ÷Ùu\-ë—ƒ[íýSƒ¤p‚“/êŒãqû]ôŒ¢Ì®e'Ùû…õK~m¥ÿ'Ê[®þ|%Önƒs[r—½‰ƒMuŠKù˜³í³C§m—šæõ'îÀóÚ»ðöN}ñŸ¡<€·èó©)ÛÊ(žý>õs•ìíKæ’¡ÿfº™Iïõ»™Eïµ»™I[>ÓÂÙ¹ï3}mk«ÅcýÊ]À.ç~M¦º\Ÿ¢¬p;<ÁõûÒC\Þµ»/!d˜]?ÊN²÷ ;ë§}í:k áØp-3³,Ä ŒvÔî¬@Ó¹¡‹¥|ÌÙöÎÙ¡ÓǶKMóúÊsªŠ°Å}m~?ü±í&šN•c}‘?‹Ç·ëphÿ¥™Ù²·/™‹ÇWúØv©i_Ÿ‰ƒiáìÜ÷âµ3Ý̤÷z‹Ý̤÷z‹Ý̤)?äCQn¶%SÛ±Ç×…I.hdïvÖOûÚ£z6c³÷AÒ­!ãèõîƒËVÿ=‘çÃ3³/–ò1gÛ;g‡NÛ.5Íë+=ðm_ûYÊͱ µ÷§¦GŠÇ´tɾÿe®Û.µ¹¯ÏÄÁ´0<îÓÇú¥¦yýÁv´Þ‹Ä,ŒìíKöàqgLûÚ¾À¦-n\k›¾ÀÚ†Ö¦“([_ ÏÏ·c\}‡>™}±”9ÛÞ9;túØv©i_Ã-'PÕò�¡P(ÅöáèT¬Söö%sñøJÛ.5íë3q0-ûô±~©Íyýè3t^ÿq›ˆç ý}ˆh/kÈÞ¾dwÆ´¯=ŽG¾X¦þLüÜx{›jïÅz‹ÇK•mï\öF—¹~l»Ôæ¼¾2èDŠOÝ$²·/™‹ÇWúØv©i^Ÿ‰ƒixܧõKMóúÊc\?ô&9¬X÷6œÎ­(È]‰¼ƒWŠ_ÜI&{û’=xÜ›óÚÃ7p¼ê:út/¬No1æŒ ÛÞ9;túØv©eúú²·/™‹ÇWúØv©i^Ÿ‰ƒixܧõK-ñõ';k°Þñ6\-ggYDŸ¡£¶ »út—g”½}É<îŒÍ}mÑèÂ3^-åcζwÎ>¶]j™¾¾ìíKæâñ•>¶]jš×gâ`Z÷écýRK|ý‰ ¯mö¢7)B¡ôzQäòÇ’*#CJ˜}!{û’=xÜËôµ—ò1gÛ;g‡NÛ.µL__öö%sñøJÛ.5Íë3q0-‚Ìû^ö~Éú¥–øúJتM;à¾v+LU·Ö«8UVˆ"ϵØãÛ¾#ØŸ0ûBöö%{ð¸3–ék/åcζwÎ>¶]j™¾¾ìíKæâñ•>¶]jÚ×gâ`Z8÷écýRK|}å‘Û—éP“6ǦZܧ扒ÉÞ/ì¬_¦¯½”9ÛÞ9;túØv©eúú²·/™‹ÇWúØv©Íy}&¦âqŸ>Ö/5íë?EËñ¯ÐÒ§DMرÛFÙÛ—ìÁãÎX¦¯½”9ÛÞ9;túØv©eúú²·/™‹ÇWúØv©eúú²·/™‡Ç}úX¿Ô’__‰F±ð4ò·/كDZL_{)s¶½svèô±íR¯ŸéFK—ìû_æú±íRËôõeo_2ûô±~©eúú²·/ÙƒÇ1sé³í³C§m—™¥|ÀÓüØÓǶK-Ó×—½}É<<îÓÇú¥–éëËÞ¾dwÆÄkgº-U¶½sÙ]æú±í2³”xšûoúØv©eúú²·/™‡Ç}úX¿Ô2}}ÙÛ—ìÁã.}<¦ŒÙÖ2ìÐécÛe†'J…ý7}l»Ô2}}ÙÛ—ÌÃã>}¬_j™¾¾ìíKöàq—>SÆlkvèô±í2Ã¥Âþ›>¶]j™¾¾ìíKæáqŸ>Ö/µL__öö%{ð¸K)c¶µ ;túØv™á RaÿMÛ.5ñú™n´4ɼïeï—¬_j™¾¾ìíKöàq—>SÆlkvèô±í2Ã¥Âþ›>¶]fxn"#<îÓÇú¥&^?Ó(™ìýBæúñ˜2f[˰C§m—ž(ößô±í2ÃsáqŸ>Ö/3</Q:دÓÇcΘm-Ã>¶]fxB TØÓÇ¶Ë ÏMd„Ç}úX¿Ìð¼Dé`¿N9c¶µ ;túØv™á RaÿMÛ.3<7‘÷écý2Ãó¥ƒý:}<æŒÙÖ2ìÐécÛe†'J…ý7}l»ÌðÜDFxܧõË ÏK”öëôñ˜3f[˰C§m—ž(ößô±í2ÃsáqŸ>Ö/3</Q:دÓÇcΘm-Ã>¶]fxB TØÓÇ¶Ë ÏMd„Ç}úX¿Ìð¼Dé`¿N9c¶µ ;túØv™á RaÿMÛ.3<7‘÷écý2Ãó¥ƒý:}<æŒÙÖ2ìÐécÛe†'J…ý7}l»ÌðÜDFxܧõË ÏK”öëôñ˜3f[˰C§m—ž(ößô±í2ÃsáqŸ>Ö/3</Q:دÓÇcΘe-óìÙ3tvvÎlb§$>¶›ìõ{øð¡aÝDÝí–XÙê÷¿ÿû¿šú$×Oüžhšè2“¹~l»ÌÈ^?²ûô±~™áy‰ÒÁ~>sÆ,k™é£Þ¶wïÞø³ìóüC·nb“¡~ÿýßÿ­[7±‰ºÛM´‘^ÝÄ&ö½DàD¯^bÛ¸qcüYDSD¿™ÌõcÛeFöú‘}xܧõË ÏK”öëôñ˜3fiË níØNƒXYëg4ø–eàm˜’!è#~dú\D¿™ÌõcÛeFöú‘}xܧõË ÏK´b ¾óOo¢ßLÿûðáÃñgÙçÊ•+†õóù|ñgÙGŒSôê&¶ÿûßñg‘¥g#½Á­Ø!²Ð›u!Sýôß2 ¼E[%×O– ”^à‡³-Hè2“¹~l»ÌÈ^?²ûô±~™áy‰Êè° T³¯e«Íü_³f oiO`ùÙ(yp+ËÀvZòA'Sý’:ÙÞÉ)™‚>Brà‡³-Hè2“¹~l»ÌÈ^?²ûô±~™áy‰Joð-ÓÀ[ï°Lc½À A™X~6JÜÊ6°:ë—xÐÉ8ðN LÉ”J üp¶ýCf2×m—ÙëGöáqŸ>Ö/3</Ñb$¾exëͺi¬’øál‹¹l9MneØN›>èd¬ßôA'ëÀ{:0%cÐG˜üp¶MK5}P†ãlú˜ÒÛd¨ŸÞŒéM†/,‰ÁÔäÍîó€øB"¾˜èÕ_X–¶Ä•ĦÏÓÿ¿³[ª•Îd¨_b}’ë'ÎùvÇub}’ëg÷q/Ú'±>Éõ#J%qð-ãçXâwÇ*‰ζ˜Ë–À…8ñÉ:°ÄA'sýÄA'óÀ[´¬nâYÖ ÙÇhð-Ëqf4ø–¡~FY¾°ˆs‘^ýd9ˆ/&zõã–¥-ñËò&CßHU?ÎKFçL±Ù¸'‰› ç%£s¦ØÄg%Ñ|¦û·ŒŸc‰ßYd«LŸ[yñBçÑ’§7ø–)À¥÷ER¦úé~dú¢7ˆ‘ap%ˆ/&ɳ.ø……½Á­L}C¯~²œ—Œß² ¼?²œ—Œ?2}H~¢Ëü9&΢ËJœGyñBDDªäÁ·,_ §%‘”©~ÉÙ¾°$bd úâ Jbýø……½Á­L}C¯~2—ôß2 ¼“?2—ô?œmADvcà‚ˆH•8ø–m`+$~‘”±~‰Þ‰ƒÙ‚R‰³.8Û‚%neì‰õ“í¼”<ø–màø‘í¼”øál "²DDqÓƒoÙ¾@N›þ")cý¦?²¼§12}„éYœmA‰·2öÄúÉx^J|Ë8ðžüÈx^J üp¶É€ "¢8ñÅVÖ­ ¾HÊ\?ñåVæ·ÄÈ”Á±o9Û‚’‰~!óLQ?YÏKÓƒoYÞÓYÏKÓζ "0pADDDDDDDÒbàb¡¢Ïz:@‹3†§¡gˆÆÉGöú-]Ö.Â]>Lôãqû]ô+ñ‡vlGë½HüãÁìóõÆ[iá»wñp2þpšòÚÛŸ¨5³Û�n·vc"þH×øxö]@(þÐZ²×ˆˆˆˆˆˆR±&pº€]Îý8êrÁ5³}вÂíðGÔAøC\Þµ»/!dÇH<ôÊËN Îç‹ÝŸ=w; —óu8m \Dªßç# m§nG÷¢pÓ Ç(¡Kؽ6»/?´!Ñ‹úò |]§×nb«Ã9WV:}6d¯ÙCAôéox•ájºÙëg‹>å`›Ó §fÛŽ=¾.LJ¸ø_—½GNkJq®3ÿ+EÕæ{¹[“ÚNlàë“6pQ÷uò9Èq¼†’sw‘jN‹yd¯Q–’zfýo߯½”S¯Gôü|!;n—½~r±&p1ï­6Ó«Ÿ2‚žÆÕ­+_àfÈ®ü éÐvÒ»c‘žË8˜·9+·£êæ#óGÈ^?""""¢,%õÌz1sýc”}ýÍœ ˜3Û¹£p®,±)0 {ýäbMà¢ÿêo &͈à^}=£¶‡âæŠþ†¶êw±2g9ò*p?lgÔ`ý×.áÖHR’‹É{¨?Àhü¡<ÆÐßö7­tÀ‘w ÷‡m˜’Šìõ#"ëÈ>ý’‰ƒ‰ˆHrRϬO¨;2q3ç%¬)9‡Îˆßd¯Ÿ\,»UÄ™“[ Z»½ŠòfLÎRÂwá+G>vyï l{åÔí+Öi;u[u�ÍÏ$šŠ¡ ¡Ó÷gä9–cÝ./‚¶|tÈ^?²žì‰ƒ¥®Ÿì‰ƒeŸ~ÉÄÁôGÅû±3#yÀ’«ìQ2©gÖëP"ÐxðM8rVÃYu!ÛÎW²×O...¢²ò”6Štî(Š6îÃé@¿$ õƒ6Ô„ÃVéß> <CoßHü•D$Î…Ê Zª��]AIDAT³u í'J¾‡egä£-úÍ‡ßÆ Ý,Ч½íÍ!!{ýÈÒ'–}ú¥Ì‰ƒS\ŘÞl~ÉÄÁ”x?vf$XJ½ÊI+«fÖ«ã½þ[¨.ZÇ›¨h¸'ÁEêD²×Ï^Ö.FûÐýÛxüÁ4õƒ­z/\mƒñÇvÇ` &vû@ÎÊwQ}óW„B!ívׇª vœ¨Œ>x€ß’;­úÁV½Ã¶pòåN«©Øà/¨XÎjUßÀýä¶ µÃ[õƒM_¾e¯ÙJúÄÁ’O¿”:qpŠÀ…Ó/™8˜²QŠãjzãýØ)H°”z•=’VÖ̬Ÿ@¸Ó‡rõóß±n/¼Á!‰ê&È^?ûY4ã¢Õ¾ v°ØDceV¸üêÇ ½µ~‡Š’¿xk·mëPd×r¨ß„ï×>Mûõvþ€Ê¼õpùíXé$:pj<ôžn›ÍlÛ [dÓ‡°ìõ#{ecâ`iÈž8Xöé—LLÙHö€ ì$XJ½ÊI++fÖ!Ôü_ذb™î¢ ÊÓ>ôÙzÎ’½~r°7ÇÅŠ­ð†ãO’ܘÞïm \èæ¸p`ÅÆj9“›Î1„Vï5‰²×L#ûôF©ë—m‰ƒeŸ~ÉÄÁ” x?vf$XJ½ÊIKö™õѧÔ¼‡•êØieÑ Ü¼¯½ õá®÷+\°k–˜ìõ“ˆE‹Kpy®¢Íï‡fkǽÇÏ‘êÃmÏ;oÀWS»WÛ]ãÃí!L¸&µ¥®Q„.üžŸþ™ÐvêøŸJt5N<ïD‹¯nqŸ»»¾ÛŠˆA‚‰è„Í_Âe¯ÙBöéR×Ï(¨ªn²%VÏßRO¿dâ`ÊZ²e'yÀRªUöHZRϬW«÷)Šôf\Ïl[Qû¾M··É^?¹X¸ˆãùÈÜ“]Ô_…o—ƒïh®»ÞQOÎÉ_ÂÕ“u¹¶¬Õ/CC™óI†ÿX¼=2L#CèúgØ,r„$µŸ#ïÏðuÚ=H½~dÙ§7J]¿(²"q°ìÓ/™8˜²ïÇΈäKùVÙ#ieýÌzc­õø^ÚÀ€ìõ³Ž5‹È]œ+y-voÜœNíxåÞ¶ø•o»„ÑáÙ¬žœ_…ó“¯àk¾95«¡µ ¾¯?†sÍr¬Ú}Ol9i+ˆtžCÉš—涺9òöÃëï‹Ï ±ƒZ¿ŽØàx kœãk_Zc³Bn¢Ù÷>q¾ Ǫr4>±ë`“½~d+Ù§7J]?Ù«¤ž~©0q0e1Þ©–ê¹IÊUöHZÙ2³>ú -õ¨q‹UЪPãû í¡QµÇ«&¢°½ª²×O–.&n¬^S OR2¢o];°¾ìoê¿ëq%øljÇØa¸e/å¡¢9¤;ûC‰t¡~—.ÿPü'VAÀ]€5¥_$%K:—³e5ߪÿnBð¹]‘ú4—­ÅšŠ&ôëQâÞÈú2¼áºmÓ=ï²×l%yâ`¹ë•;q°ìÓ/™8˜²ïÇ΀ìK™WÙ#iI?³^ã~‚kóŸ4c›¸€î»kóŒ"Ùë'‹nyˆ¦cüدíºØÛð(þÈ>"°’»Å‹ÃN¡à÷À_±Ùs')¡’¦"ßÇŽÿ„~MýF¨:‚†~›§NàÎ}Þžßã?Ðñû¿áÞ|A;ª*{ýÈ^²Oo”º~QƒÙ”8Xöé—LL²áýØ‘<`)÷*{$-ÙgÖGÚáÙð2kŠðÉ×>4·¶ÁïoCk³_R„5޵ØÝøHýF`Ùë'k"3~k?¢‰M.Oæþ¨ß…Üù®^ªˆb[®pNeîoú]4‘%sÔW® þ” Ó _±{žç˜Döú‘½dŸÞ(uý¢Y’8X%õôK…‰ƒé†÷cgFò€¥m«ì‘¬äžY?‰áæýxiÍ_ÐܯwS¬êS]o‡ß–1©ìõ“‹5 ©3㫞5bϾf_¿T0Úê¶Ú_m¨«ÑUMu“"sÿohÜsÍÃ)"©£7Q¹í4ºmÙѲ×l%ûôF©ë§¸¥O,ûôK&¦,Æû±3 {ÀRÆUöHZRϬ·Ü¿…-ÞîÇTX}Înx‚v\–½~r±(p!yæ~ Çn»8¯ûE{‘Þk8\° 5v|Jž¹_Áhà+ì?¯?ˆR"ÿAóáB¼QsWmI;È^?²•ôÓe®Ÿì‰ƒURO¿dâ`ÊV²e'yÀRÚUöHZRϬÃïy SåÝRÇZ¾ ›rsÉ^?¹X¸=s¿}ˆOÔ I¼ˆ §© »¶—¢âèç8íjÇIdîÂ?þmúf÷²‚ñžk8¶«¥Gà:íÇ mç.ÙëGv‘=q°Üõ“=q°ìÓ/™8˜²ïÇ΀ìK™WÙ#iI=³~Ï?ƾæøc=ÏÑZùj»µ«#YCöúÉÅ¢fÆ>чaíÁ¤L$E e•0sÿ<Jº¢¢ •9 /{ýÈ’'–»~⪫ĉƒeŸ~ÉÄÁ”•x?vf$XJ½ÊIKö™õ£¿ jz Ž¹ÞæÿBÁ5è´ëZ°ìõ“ˆ½9.ìÌŒo[²ÍÅÓƒdËÜÏd–ô"eÀ2äõS¢Qmâ`iH>ý’‰ƒ)+ñ~ìŒH°”{•=’–t3ëDzðp润©ÛÛNüµ =ã {ü?h:¶ÛK+pÔuþA»zµìõ“‡E ƒÌø‘|&˦À…næþ. Øvo;¿LÓD´-gÑ©›ˆa ƒwíÍq!uý¦V<º5’ôú²¬x$ýôK&¦lÄû±3"yÀRîUöHZÒͬ×?É{¡eŠìõ“5 ƒÌø¶Êš¯b¹ßN \ÐC,‡ÄKû5ƒÇÙ1åùö½ 6%#“»~F³ÁÔMŠTRO¿dâ`ÊF¼;3’,¥^e¤%ÝÌzOÿ¨¬ \Ȉã üÑQ„Å•j%‚¡!gþ­ÄÕ¥WÊ¿¤‰Ng¾T©_À×cSí=[r×O­‹Ô+ ²O¿dâ`ÊB¼;²,e^e¤%ÝÌz.þ¨¸ˆ?¤ÅÈöÀÅî×:±jgþýCV¾æaò»%JyÒ€µ`$þÊc4îÊC‘7þ¥RéCCÉ+¶%–»~2®x”|_ë¹§_ªufâ`Ê*¼;3’,¥]e¤%ÝÌz.þ¨¸ˆ?¤ÅÈæÀÅ$"ÏCoÇ÷¨|kœïlAÅ÷íè³/,EÊ3´+Eù©«hmû u‡·beÎZ|èöÀUy•¥°Â±Á¾e›¥®ŸúÅ@ºøe…èÅËÆ€ L²p%6Ù“V¥ôGø.ÅHxL=S¨ã–¡aè¦:[‚¸ˆ?¤ÅÈâÀÅä]Ô¬ 99Ë‘›» 9ÊEî²ä8¶¡ö>ïÇ]’¢ÐZs�…¹j¿X±åçï¨_0'îþ µî¿âtë#{ÏÒÖO|1mÅ#.ˆ^<W™a^0"keÿ9kò~-6­Úïÿ}»Vnâ*MqK7py€[í©ÖVÔñÂUÔ\ ÅÓ¬tßêÀÀLããyçux=Çárypºñ_ö®ÄRòŒ‹Í(¯û=Ÿ3šI´(êéV<â�‹èÅãq•.ˆ¬•Ýç,%ò{ÛÑP¹;œ›ñFÅtô ¬—Wh‰Yº #Ê(BíWqê“"¬q¬€Ó×ÿé‹¢ÿúaä9r³b Nl+ÈŲ¼OÐ’uÃ(‚žMXÉÔÿþå'ôë}Œá«:ƒ»‡S8M&uý W<â�‹èÅãq•.ˆ¬¥ Òý/´§L>†GÏâj¿l€:k c3X—åæâO9«›»\}ü²m‰âeÂÀEŒúüynúª°«`ÕÔTç‚ÝpŸ<×.RŠÝz± \?'̲ÇóŽÓعû"žH5¨™¥D†1ÄUE(¶„×jÕ´'Ý,¨ç…þ&Täï†O7úd¯Ÿtþ�,®xDÒaà"3Ù¸P?kFFb³Rg¾;e)%Bû•SøÄù*9Åð…ä;0ç̸(ÿžßðœÇÂd÷9l]á@Žc œÀEßÔmÊ(žý>õ$Ò7qž×Þ…·w67vŒò�ޢϧ>¨ÙŽ$«X``;¾¾|ÇÎèÄr£ëðšçŽ=Ièd¯Ÿt²}€ÅHF \d&Ë“÷P»éuìüþ&~Øõ*?o( ãùý›ðUíFïå¬BÁ®Ïpò¨$ \A^[Éɸˆ‰"ÜÀ•S•(.Ú‹*ßMtе‡9àžŸòª"lq_NX¿ù&šN•c}‘?‹Ç·ëphÿ%ig_Ð ˆˆûÂçpèØUô$F´cË®¶m9Téë'l`qÅ#’™ÉâÀ…ÁóÇ=èh8Œ·vá7áûŽ „yV¢l1†nï{X‘“Gh46›Q¬y#ff]rU‘D \$‹âþMªÊw¢ø£QQÏ[ERRzàÛ.n¯I^Y iãª$£™À€ø6°¸Åis)>÷^E«ÿ&.»·ceÎk¨hy:õ|«É^?é$ß×*nìÄuo5\®ãðœnœùÂ"®xDÒbà"3Ù¸˜ì¬ÁzñnÙŸû§åøSL}ìØT‹ûœµNÙ":ŒÞ€È_ø>ŠvWÁw³3–D\êÀébàÂÐ$"=?pU‘yMb¸åªZ  ¥Øž2.ɧ¿ÅŽõ8Üú,>˜y#Úpº|c,:Ÿc˜_Â"²×OrJÿO8”'’Z­ÄºÂmpn+@î²7q°é¡„³¸âÉ*1 8çÁ&ø|>Ô·öb\T»o¢¡þý °éËâ•ØæÌ¸ø3êðø9óïP63¦r–ïÄGÅŸ ^Ò[EH1cµžƒÛõ.v©ÝZ}쿊+'œ¢;¯!ÜíèÅïÚ0åqíýl=’]ü6±ú[iº°D>‘àË™ìõ“ÙTfndžãh™™e!¾´´£vgžÈx~âŠG$»I 7Ä/£'2ñû^l_ù JËPRT…¶0/ç–…+±År™­eŽ úcQFÐSFÂUE(.T“÷k±Éñr 6bÝš]ð=·c5r›áéàÔÈÔzQ¿«ŽºàrÍnG˶b“úá6®þ/ty֮݇ˡ¤žDD¦A€ÍØì}ÜG¯w_|ÚûFžK æŠG$·ÜûPÛ­²•'h.ˊΣ'ú{ÂqE†²r%¶Ù{칪e¥è#´ž®‚«út†'ÔÇ!ø/5q–XbàBËܺ±ÝŠ‚ñ®3øàØmõ+¯‚hçI¼ÇÈò<zá+Z‡‚mN8IÛº'¸ ";L ø›¶¸q­m:qpZ›N¢l}1<?ߎ%öúTÒÙD2+ßìÃáæNt5A¾ãU”7?Q´]¨ßsˆÇÒ|¸‘ÅÄ9kŽ\¼‡5%><èªÃŽ•86œ@ïÅÌ* \JÍŽæg"D1€æýGÐ<<†ÁÖcØÀlýóÀíÖnwˆH2ãxäÛK$§›0xf{›jï׉F ·£¦hµzì,GÞ¡ŸÐ?ö4Ÿøÿ¢ò` Zùm %®ÄFd11û²k…¢þ»«¶ÇüC±ŸwÖü™ËŒf.T“=ðþ‘Í=ù -³õÏ/„kõ~Œ$}ÀNÞ»„3áø#"" ßÀñªëèÓM<½=æÒ~D‹ c@³ToþcðöDâIWb#²œÒß„?ýÏÄXe¸û÷7c8ÚVW ooË2 \¨”G>lÏ/CÏË”=µ]@ã­ÿ0[ÿ¼zás®Ðùàu`UyÓÔI‚ˆÈr“ßý¿xð{Ò`å7´·?a(ˆtžC‰îÅž8òöÃëïãJ8†¸‘µÆÐóýGX#â&Ÿ³Vý-Üo™M¸úQ¹ûüš)ŽÜ«¯G`”©õ¢þ`%NÕ%}NÃUR W} aù/""+Eªßç#šÄÁ®£{Q¸é‚ã ”Ð%ì^›Ý—2A´ "9gÖ”~:ÍÅž3p9 QVó­úï&Ÿó–}\‰ÈZâ¶Ñ‘_ö·„ó•ºÕ_Á­ž0?û³ BÈgr.¶Å“NÅŸFzÂxÐ=ÔF ƃ_ã]÷/àcDd¨zj¹[ç&v€¯{Œ ¢ES 5áØñŸÐ¯9hF¨:‚.-8®ÄFd¹hn\ú7ùAŸõ¸Bß¡¬´ Þ™H\¼_îB^~9Núù…6¥^|WÝ€_5S{ð? ±v…k*C6‘å&0xû6îqEôM ÿê´<Ó&åž¼‡ú3^¬˜Wb#²ÖÔ9ëÆpÒ—ž³²Bä1zŸjGØJ8€êÍë°Ã÷€ÙæS2Êq±y®[`Ê"²‡úeåÚ%ÜI:ƒóË QÄL¦bÏ|u[u ¾:ãJlDÖâ9ë„ JÿuÛYÓCœq‘R/.¸kñ™e½ÄÖï¡£hxÄŒØDd~Y!zñDî˜C(ýòlÂýâgñeiòËÎ 0Ài–©q%6"kñœõGÂÀeH/Ç t×â­’®CND6_VŽ â”H8ýe¥ç\¥(qÕóË QZDúúðTóÙ>ð¯°ù•àëá‹Ô¸‘µxÎú#aà‚2¤7ãâŸø¹æ}¬ZíF€5‰È F<ÀoÉñ;¨~÷K®EôÂDÑßR…ågÑæ‡~j\‰È~<ge+.(CWùØý}˜ZŠˆìE軓ðýÚ—88„Þÿùkóáò3ÑâM"|÷.&'ÿR~C{;Wa›Wb#"J”¡^\¨òánÂÀ zŒ0§a‘¢†9.yÇÑfÚe¢Å·`í‡óÀÍrž®£{Q¸é‚ã —N‰+±¥‹ C ¢##ˆ¨ŸºJdC~ÉÕ§¶S”Ó¬ˆH6ê�ëB5jþÑ–p[nzàPCú["Z<|¹[ç.çé<�_÷)q%6"¢t1padòj7½ŽßßÄ»^Åkž;\¾Šˆ(kä¸P~Eí[¡á CD‹7ÁÛ·q_ˆÒĕ؈äÅHxLý¦0‰ÈÐpìB5É =JÏ÷ £á0ÞÚQ„wÞ8„ï;zxûQÖЛqáGÛÏ_£dÕ›pFâÏ#¢…›@ÿµK¸5’4 uòêϘ£a^\‰H“÷k±iÕn|ÿï Øµr<Až½²:&;k°^LÝ[ö'äþi9þ”û',S;6Õâ>ï!"ÊF9.–cÝî èçhñŒŽ+u[u�ÍÏ8#5®ÄFd7%ò{ÛÑP¹;œ›ñFÅtô å÷Ù1p¡gÎŒ‹?£.ð�ŸGx¿æBEGyAÔ¶b»‘ÕÄŒ‹¯à½«]U$4VCDéQ«z*ÏÖ%,çY‡s®÷°±ì <ºRãJlDöŠ ³¦0vÜ-ËÍÅŸrV!7w¹úøelª½^Ÿ–F&îÀóÚZæ¸HËî×:±jgþýCV¾æAGDS¢Qž·‰^(ƒÜ1ãwP½ÃÍÕzæÅ•؈ì6gÆEù·ôü†ç\ˆAz \šMÖÂUECm·ç¿¡·ã{T¾µ Îw¶ âûvôò*'Q–‹"ôÝIø~ÕÎdêíü•yëáòs]ŒÔ¸‘ &‚¼¶’9.² ôbMÞEÍú— î#ÏÍ]…œ?å"w™˜¹ µ÷™1›ˆˆ({E r\8°bc5£¼1”ˆ²ÀÌ­ì\U$›0pA/XòŒ‹Í(¯û=Ÿó¤@DD”Õ¢]ø+<?ý3!¹¤ºº0À™©DDd".È£z6a%s\‘t¸v;Ñ¢)Cè8}»«~BO‚ÿ÷!ÂâØ‰¢;ð ݃¼”ˆˆLÅÀ™b&/W!"‰pív¢Å‹7/mFå©j-} +s–#ÿ¿Nâ«í«ã·Š¬FQMûT0ƒ+±Í‹ ""Z¸v;Q:&Ðßð!^*mÄ3Œ¡»öä8½øwC9¶¸.!Ð݇PoM®Oq¾ç÷øßÐÂq%6"¢…`à‚ˆˆ–�®ÝN”ž©„œ+\~õ_aø]ëb ¿¯ ÞÞñøsŒ´Tá3®*²H\‰ˆh¡¸ "¢%k·¥G,˜_Ñ‚‘xàâåÊ›wžÂÎÇP[Wï×ù¾-Ã<–…+±-DD´dpív¢4D»áÛwÍý}h.[‹×<w0¡ ¡³þ06ç.ÇŠ×_Gn‘¡øÓi¡¸ÑB1pADDK×n'J‹î€ïðn”üÁpR†‰Nœÿâãi1¸ÑB0pADDDDà2ÙàJlDDócà‚ˆˆˆˆÒÆe†‰ˆÈl \QZ¸Ì0Y """"J—&""k0pADDDDiá2ÃDDd.ˆˆˆˆ(m\f˜ˆˆÌÆÀ¥Ë ‘Él \tvvÆÿEDDDDDDD¤Ï–ÀÅ?þñlܸ1þˆˆˆˆˆˆˆþþ÷ÿ7þ/¢Ç–À…Zˆ Ô"€ADDDDDDÙïÙ³gØ»woüÑ‹cyàB+DÐBlœuADDDDDôÇðßÿýß±qÓЋfyàbz¶ÅôÆYDDDDDDÙM̶˜ãqÖ½h–.g[LoœuADDDDD”ݦg[LoœuA/’¥‹äÙÓg]e§ÄÙÓg]ЋdYàBo¶ÅôÆYDDDDDDÙ)y¶ÅôÆYô¢XžãbšèÈDDDDDD”½ôf[LoœuA/ DDDDDD”¸3+¦71ÎK|Lô"0pADDDDDD/Çyd.ˆˆˆˆˆˆè…à8ÌÀÀ½ç‘¸ """""¢‚ã<2DDDDDDôBpœGf`à‚ˆˆˆˆˆˆ^ŽóÈ \Ñ Áq™ """"""z!8Î#30pADDDDDD/Çyd.ˆˆˆˆˆˆè…à8ÌÀÀ½ç‘¸ """""¢‚ã<2DDDDDDôBpœGf`à‚ˆˆˆˆˆˆ^ŽóÈ \Ñ Áq™ """"""z!8Î#30pADDDDDD/Çyd.ˆˆˆˆˆˆè…à8ÌÀÀ½ç‘¸ """""¢‚ã<2DDDDDDôBpœGf`à‚ˆˆˆˆˆˆ^ŽóÈ \Ñ Áq™ """"""z!8Î#30pADDDDDD/Çyd.ˆˆˆˆˆˆè…à8Ì`Z¯6Óˆˆˆˆˆˆ²ÇqdS™`‡'"""""2×ôEc™7".ˆˆˆˆˆˆ–(ÙÇ]’ÀÀÑÅÀe.ˆˆˆˆˆˆ–(.(0pADDDDD´D1pAÙ€ """""¢%Š ÊÖ.ú¯ãü§Pâ§Dp¯¾QíO§±ƒ™‹ ÊÖ.B>8ÕÇâgÚíU”7?I hLÑü=½p²»8.$Á¢ÀÅw(+­‚×çƒ/¶ÕÁûå.äå—ãt Ÿ """"""Ì7îR"}ð_< ·Ë—ç<šƒýˆÆ7¿ ô_½€ÃñÇq“÷P&€ÑøÃT8.$ÁšÀEä1zŸj»· zó:ìð=Àdüg‰ØA‰ˆˆˆˆˆÌ•jÜ¥„ÛQS´:öGn¶9߯º¹Øî½‡ñøsR‹"ä+ŽýýœmÕ4?K hèÏ%²&p¡C鿎c;+pºcˆ3.ˆˆˆˆˆˆl`<îÃýÚmp86ápSÂÑ©Q›éBýžChx²yQ„ê¡ô˳ñ™÷b;‹/K _vùËà¸ëÊ(BþK¨q»àrypºñ_EôæZLa%"""""2—ñ¸k÷ÈÙìE¯æJó8z½ûàò‡ãSQéëÃSÍßO |ç+l~åøzÆâ?3Æq! Ö.”!tÔ¼‡•9¬È{þp#Ö¾ƒÍ%§ÐÖŸÄJDDDDDd.ãq—‚ñ®ÓØòÚ1ø§W‚ŒÜ…·ì-ä¾TºÀS´y2þޝ¾‹Íeg Ç‚‰8.$Á’À…ÒãÅÇËØà¾…Á¨‚¨ßb_ƃ5øÈÛÍ[EˆˆˆˆˆˆlzÜ5ŽÁŽTþÝ£S‹}ûPu½oÁ :gód¬D^ñ^|X‡Bç;(©iGXo ˜„ãB, \LÜX³ÞÞ©.S‹û?×_·Ó³ƒ™kÞqWô:¯ËwMZï.bU‘ßÑã݇£î¶õïÂð»*à !X}ÞžßãÏ3Æq! –.0ú Üù[à ŽÄFý.ä¾þ:r¯¢¼ù g\Ù å¸+rçJ^ƒC}Žx^ls¼‰ƒM¼HΓ1¸èWÿ[² <’`Mà ¢¡›øûçUðúŸ"p#7w *Îß1œÄJDDDDDd.ãqWOvá§Þøª"“ˆ ´Ã»{¡«Š( T!}5‚ãâïEàb^_·.‡J‹`jà¢Á?¤'‚{õõL'zIÂJDDDDDd.ãq—2|„Úîä•?³ªˆ0†Pë|îúþÁaÜçƒCº3ï“q\H‚© §º‰ÿo¼U„ˆˆˆˆˆÈ.Æã.‘Ÿ¢‡[ž$Ü2Žçß¡"¿$E~Š ô_k„,EXbòêÏ0˜ Ç…$˜¸¨¬<ŸÏßÙJ¾R×¹º©ÇêV÷uòóËq:ÐÏÀ‘ RŽ»"AÔ­EnÁV8ÛP¸n¥úüåÈwݰa\"Н8VnÊ·ŠÐ"˜¸è}:››|¢Ú_“ÏÐRñ6g\Ùd¾q—éAëy7Ê‹‹PTúxî`0–ïÂH¡z*ÏŠ‹Öu8[¹¯8â\ü¶Ï÷ ¾.Ûˆü²3 ÌŸ'ƒãBL \L›ìü;¶¾©‰Ê)á�ª7¯Ä .‡JDDDDDd‹yÇ]‹^UA¤¯Occ?±ªÈ¾¹y2FZP‘Ë´p–.  àæáMXS¸•j‡?Zñ>6侄œ•ŨíÔOêÂJDDDDDd®”㮌—C ³f·>K˜e?ð¯°yÙ:.‡J fMàBP†Ñýãi¸ÊJàtî@iå)üØ=¬{›ˆÀJDDDDDd.ãq׋XUÞÀáü×Q¸÷¸\GPñá&ä:XYt£Ñà,Ž I°0p1ŠÿjÜ.µÃzpºñ_E&㿜‹”ˆˆˆˆˆÈ\Æã®µª: wáÇZÊŠ‹à,Ú…ÊS?¡;<ÿm"Ç…$X¸P†ÐQóVæ8°"ï=üùÃX[ø6—œB‡A‡e%"""""2—ñ¸+ÝåP_,Ž I°$p¡ôx±Åñ26¸oÅ2ÐFýnûz0¬ÁGÞn®*BDDDDDdƒ”ã®´–CK‰ôÁñ$Ü.\ž3hô÷aw‰Äp\H‚%‹‰€«s¶ÃÛ;{<¸x€°ÿ3làª"DDDDDD¶˜oܵøåPµ”p;jŠV«¯³yÅ{ñaA ï ¤¦áÃq! –.0ú Üù[à ŽÄFý.ä¾þ:r¯¢¼ù g\ÙÀxÜ5þ«pc8éÖþÉ{¨?Àhüajâv“p8 án@4–7£¾Ð‚Õ‡t» Ç…$X¸€‚hè&þþy¼þ§ˆÜÈÍÝ‚Šów £lì DDDDDDæ2wEòÇ~?g[u�ÍÏ’\s÷ÈÙìEolÜ7¸èWÿ[ÂåPiÁ, \Œ!Ôzn×W¸Ø9E<ö_Å•@b¢-vP""""""s»¢ÕBé—gáóùâÛY|YZ€ü²3 ,d9T£*䯯Fp\D.Dàb^_·Ž?8.$Á’ÀÅäýZlr¼„Ü‚X·f|‚ðíXÇfx:ô£lì DDDDDDæ2w)ˆôõá©f†üÂw¾ÂæW>€¯'y™T#â"ö|îúþÁaÜçƒâ‚öü8.$Á’ÀÅDЃ×6Ö¢[Q0Þu»QqûHçI¼ç¹£vÿ¹ØA‰ˆˆˆˆˆÌµ¸qWý-UØY~á…Ü*¢Š>Bëé*¸ª@§ø›hþKMô/,ðÁq! –. „Ðüñçñ©@hÞÍÃcl=ÆUEˆˆˆˆˆˆl’zÜ¥ ú¼×½Õp¹ŽÃsºþ¸½Pc¸_» G. ÞÎÚtÕaÇJN ck¢r\H‚%‹Éž xÍK±Ÿi·×PÑò4þ,­Ä¿'"""""¢/Õ¸Kéÿ ‡ò–«ÏY‰u…ÛàÜV€Üeoâ`ÓCÃ\…Z£z ±±öW(ê¿»j+pÌ?ûygÍŸá ο6 Ç…$X¸Pù°=¿ 53I]Äv·þÃUEˆˆˆˆˆˆlb<³¦Ž ÇÑ23ËBÌÀhGíÎ 4<YXèBéoÂÇŸþˆg¢€áfìßߌáh?Z¹ª-‚%‹XB–×àLº*:†HT?rÁJDDDDDd.ãq—˜-±›½’n G¯w_<è0‘çÃ)f_Œ¡çû°Æ‘<ó^ÝVý-Óñç3®-%.ôEýU(ñv1Ç‘ ŒÇ]¾À¦-n\kóÃï[Z›N¢l}1<?ßVß„ïЧ)f_Œã‘ïCä—ý-a潺Õ7âFçÀ‚n7á¸k‘»8WòêÏÄÏ5›ã ”{ÛŠh£mš¿'"""""¢ÎxÜ%‚;±,q즻½ŒMµ÷`8w"Ú‡—þAÍ´0üÇ*àí‰Ä¯AdIàb"àÆê5¥ðÔ%DÙÔí[׬Eßêq%øL3‰”ˆˆˆˆˆÈ\)Ç]Ã7p¼ê:úB!„ ·ÇÍPé<‡Ý…ràÈÛ¯¿©Ï#²$pèC4óàÇ~m‡žœÀÞ†GñGZì DDDDDDæ2wM"|÷ÿâÁïIy •ßÐÞþ$)ï…‘ÜXSúê.`û|gàr¢¬æ[õßM>Oz’`MàBP†Ñsë"jÜ.¸\œnüלÛC±ƒ™ËxÜE¨~?œލã71†‹oG÷¢pÓ Ç(¡Kؽ6»/?4d(ˆ†špìøOè×<aª#hè7XLã¸kÊ:jÞÃÊV佇?¸k ßÁæ’SèëwVvP""""""s¥ \øÞGnÁV8Τí�|Ýc \LQÂÿÁ­‹'áÏ4Îs{H"Ž I°$p¡ôx±Åñ26¸oa0ª êw£Ø×ƒñ` >òvëvrvP""""""s»&0xû6îÍ?)"%%ÜŽš¢Õêë¬D^ñ^|X‡Bç;(©iGxÁ Ž I°$pKΙ³ÞÞñØã©ÀÅ„ýŸaƒËÏåP‰ˆˆˆˆˆl*pÑín$ÝÞ?yõg?LíwôxwÀá(„»M,†ßU_hÁêÃðöüž1Ž I°$pÑ_àÎßOp$ö0êw!÷õבëxåÍú‰]ØA‰ˆˆˆˆˆÌe<î·ŠÇ~?g[u�ÍÏ2C$ç|9›½è ú¦ýêKàò‡cÏJE¼‘5‹XR–›øûçUðúŸ"p#7w *Îß1œÄJDDDDDd.ãq—HÎéBåÙº„Õ@êpÎõ6–A`Àh ÔD FUÈ__Kæ9¸Ø€××­†cÁŽ I°(p¡Š>CçõoàY`BvP""""""s»Œ>x€ß’ÇlãwP½Ã¶°ñ ‘ZcµžÁç®oàFÀ½¹…‡p>8¤;ó>Ç…$X¸Pãú¡7᫊¬{NçVä®DÞÁ«Eõ»+;(‘¹ŒÇ]Q„¾; ߯}…B3[oç¨Ì[¿ Û<¦(ˆ>ïÄuo5\®ãðœn„?4º  …Àq! –.&;k°Þñ6\-ggYDŸ¡£¶ »út;-;(‘¹R.ts\8°bc5£ =(ý?áPÞrõïVb]á68· wÙ›8ØôP}…ù×–KA^›IÈ2Kéõ¢(¾ªˆ22„¡„Ùì DDDDDDæ2wEºðWx~ú'ü~ÿìèÂ@d¡·‰DÐYSdžãh™™e!f`´£vgžÌºà¸KJتM;à¾vk¶Ã·^Å©²By®ÅßöÁþ„Ùì DDDDDDæ2w)ˆtàÊÿ©‚«út†'€hþKMôÅŸ3ŸQ=›±Ùû i–ý8z½ûâ·›L`äù°áì Ž I°&pñȇíË’§ÍÝ›jq?¼‰ˆˆˆˆˆÈ<Æã®1ܯ݇#oçaM‰ºê°c¥Ž 'Бj¥…¾À¦-n\k›žµÑ†Ö¦“([_ ÏÏ·ÕÇ7á;ô©áì Ž I°$p<EËñ¯ÐÒ7›ÔEwÏDÚØA‰ˆˆˆˆˆÌe<î³% ±±öW(ê¿»j+pÌ?ûygÍŸá ŽN=-¥q<òíÄ2õ5Äëo/cSí=èÝ€"~OdQàP¢QÌ¿Jï,vP""""""s¥w)ýMøøÓñLL®nÆþýÍŽö£ÕU²ðUE†oàxÕuôé]¸žÙc Ìd̲ÀÅb±ƒ™ËxÜ5†žï?‡Π‰UAËðBt*ˆFs [˸~´”0pADDDDD´D»Äm"¿ìoðù|³[}#nt,h)ÓãB¸ """""Z¢RŽ»¢}¸qéßÔäá ìޞHü±¹8.$ÁšÀ…Úá[Î4¢S7óìï"”´0;(‘¹ŒÇ] "çP²æ¥Øs’7GÞ~xý}XÐâ"¯EdIàb"àÆê—ö£9á>¨Ùd“ˆô\À¾÷O¡C¬ ÇJDDDDDd.ãq×î¬)ýu‰·ŠøÎÀå,DYÍ·ê¿›|¾Àü¸s_G±ç:z“.Z§Âq! –.¢~^)kÆpü±ú„.œId ¡µr½f vP""""""s»DCM8vü'ôkfUŒ Pu ý‹L¸õõb >÷Õ ¼ä0|O”'ƒãB, \(Oðᡵ‹Ç)Ѹ+EÞ®©Îªô¡¡ä¬pùg:/;(‘¹æw)áÿàÖÅ“p»\pyΠ1ÝÛCb‹bøBQ(‘´TŒC§ÛÐM]Ç…$X¸€ò mÇJQ~ê*ZÛ~BÝá­X™³º=pUAeé¬pl€«m0þì DDDDDDfK5îRÂí¨)Z­>g%òŠ÷âÂ<:ßAIM; ^(‘çx !ô°/oCMà!Bâq¨—aûöch¼? £â8.$ÁšÀ…}„Öš(Ì} 9+6¢üüµ³O ÜýjÝÅéÖGš©Bì DDDDDDæ2wýŽï8…p·‰åOÃð»*à !X}ÞžßãÏK%Н8ö)7ÇfÔtê¯R"~Od]àb‘ØA‰ˆˆˆˆˆÌe<îÉ9ß@Îf/zcÓ!¦ýêKàò‡cÏJMAtàü~?ü·jQºü-¸oM=ÖlwЛ°PC"Ž I`à‚ˆˆˆˆˆh‰2w) T!}5‚ã"r!ðúºÕp¬:€æg‹LÎ9Ùƒæ/ê/|EãB¸ """""Z¢R»Æj=ƒÏ]ßÀ?8Œ€{r á|pÈ0'Å‹Æq! ö.¢cˆd‘e%"""""2—ìã.Ž I°5põW¡dzIÔ$ì DDDDDDæbà‚²5‹È]œ+y õgâçšÍñʽmE´÷:iþžˆˆˆˆˆˆ^8{Æ] ¢‘1Ý ØÉ8.$Á’ÀÅDÀÕkJá©óÁç›Ý¾uíÀú²¿©ÿ®Ç•à3Í}Rì DDDDDDæ²g܆ÿX¼=úK &â¸Kˆ>DÓ1~ìׯÔ&'°·áQü‘;(‘¹ŒÇ]xlŠ]p®oíŸú8Ü} õ×è‹?g> "çP²æ¥Øë$o޼ýðúûI‘éS<ÈšÀE¸ ÁÞQD'{ä8·ßE¿A'e%"""""2—ñ¸kÃÍñÆÁËè‰L`ü¾ÛW¾‚‚Ò2”U¡mAËšŽ à.ÀšÒ/P—0óÞç;—³e5ߪÿnBð¹ñÒª’`Mà"t»œûqÔå‚kfûe…Ûá Ž�ÊC\Þµ»/!d°ƒ™ËxÜ%‚ûPÛ=¦Ž×ž ¹üU,+:žèïèõîƒËŽ?/ÑPŽÿ)邵ZvÕ4ô,¦q\H‚E Šr °Íé„S³mÇ_&¸ """""²œñ¸k ÷k÷áps'ºšŽ ßñ*Ê›Ÿ@‰t¡~Ï!4<YHjÍI„ïÞEïïQhBÊohoWËŠ?L…ãB¬ \ ¶£õÞü‰W±ƒ™+Õ¸K ·£¦hµúœåÈ;ôúÇþƒæÇárƒpþÙ@¡úýp8’0ó^ÝŽîEᦎ+PB—°{m>v_~¨Èà¸ki`%"""""2×¼ã®haíÒ¥QD2]B.|ï#·`kÒÌ{±€¯{Œ Zký7Pk0©#Fp¯¾QýÏJDDDDDd.í¸Kä¤h†kçAx; rXDŸâßžÏQZÈ­"¼}÷29Ã�Ç…$X¸ùàT‹Ÿi·ø}Rñ§%Òü=½pÚqמ5~„e9BiãoñŸÅEŸ¡³¹e«Ô¿)†o‹þk—pk$i’É{¨?Àhüa*’`Qà¢+j´Kàœs¡¤Ä…ú@?DDDDDD6˜3îŠQ[”gM�ÏÅý š€Å*”}3.7.,(p!n)Ž½ÆœmÕ4?ãª"´0Ö.FûÐýÛxüÁ´«Ëá Çk±ƒ™KwÜ}‚ÀŨ(yÎ7§5hî|6•ëb19.ê âÔ·³°}u8ç*E‰«ùƒ’`Mà"Ôˆj_¡Phv뽃†Š|¬pùµ‰^âØA‰ˆˆˆˆˆÌ•rÜ¥Œ"俈ꊱËu׸P0úà~K~îøT¿û¥a¾ÃD’`Qà Džc\mƒñ'iiþžˆˆˆˆˆˆ^¸…»& µãJÍ!””ƉÊÏ~«Èw'áûµOs»÷¾GÅÚ|¸ü @p\H‚E‹à®ù ~¿v»y‡]Â#ƒP;(‘¹ŒÇ]xlŠÝÞQßÚ‹qõq¸û&¾ÿ?Õø|ïÿ³ÀUEŒs\8òŽ£-œ”´S‡x.‘5 Ýcè®-AIC“sÙÀxÜ5‰áæƒxãàeôD&0~ß‹í+_AAiJ¶¸póÿ7Ð!¸¸Pš´%\ÄnÃMïjèÑMŒãB¬ \è͸hkBMÉZ¬v —K–”ˆˆˆˆˆÈ\Æã®ÜûPÛ=(OÐ\þ*–GOôwôz÷-è6Ãʯ¨}ë#4<™?tÁq! .ôs\8ÖíÃ÷Ýú«÷jþžˆˆˆˆˆˆ^8ãq×î×îÃáæNt5A¾ãU”7?éBýžC :èϸð£íç¯Q²êM¸#ñç㸋? ÊÛ®IÈ =E8E*ZvP""""""s¥w)ávÔ­VŸ³y‡~BÿØÐ|â8\®sðêÍ›Of”ãb9Öí¾€îq®*B cMàB™@4:‚ÿjÜ.µ£{pºñ_EŒï‹b%"""""2×¼ã®há„| ¢‘±姘šqñ¼wµ«Š„4奯q! .†ÐQóVæ8°"ï=üùÃX[ø6—œBGX?RÇJDDDDDd®Å»Âð«€·'œš"éƒÿâI¸].¸<gÐèïCdþÉ1’`IàBéñb‹ãelpßÂ`TAÔïF±¯ãÁ|äíæª"DDDDDD60w)ˆtžCÉš—bÏIÞyûá]@�böv“•È+Þ‹ òPè|%5í/ x!^‹È’ÀÅDÀÕ9ÛáíZu*pñ�aÿgØàòëNb%"""""2—ñ¸K¬*R€5¥_ Îçƒof;—³e5ߪÿnBðyª\¿£Ç»G!Ümê¸/ ¿«¾Ð‚Õ‡áíù=þ<c’`IࣿÀ¿žàTÖØ¨ß…Ü×_GîtfÚØOµØA‰ˆˆˆˆˆÌe<îR 5áØñŸÐ¯° Pu ý IÎ)‚o g³½±2¦ýêK´¤*Ç…$X¸ˆuú›øûçUðúŸ"p#7w *Îß1œÄJDDDDDd®ùÆ]Jø?¸•f~ 1 T!}5‚±DDàb^_·ŽUÐülþàÇ…$X¸PžqEL+ª¿…^µÃ*áû¸Ñð®žf“e%"""""2WªqW¦ù)¦Œ!ÔzŸ»¾p÷äÂùàîÌûd’`IàÃÍ(ãc4öŒ@¿ïö\¬(ø�JvÂÕ6’;(‘¹ŒÇ]™ç§�&ð<ØËQßÚ‹qõq¸û&ê¯!Ð?Nj’`Iàb"ðŠj…¢vÔgͰjYqlù¥×‹"&ç$"""""²…ñ¸+óüÀ$†›⃗Ñ™Àø}/¶¯|¥e()ªB[x2þ<c’`Iàbòþ¼wøþÓu‡ó_ƪò&<SFÐS{út§±ƒ™ËxÜ•y~Š©àÇ>Ôv©Å=Asù«XVt=ÑßÑëÝÇ䜴`–.  ¡£æ=¬TæÈ;ŒëýÃèi®Ëõ9NûŸ2pADDDDDdƒÔã®ÌòSˆ¿¿_»‡›;ÑÕtùÓ«JFºP¿çže<œÅq! Ö.b¢<E8º°.ÎJDDDDDd.ãq×ú¯]­‘¤Û9&ï¡þL�£ñ‡ó™Mð¹y‡~BÿØÐ|â8\®sðrUZ ‹ÃJDDDDDd.ãqW!_qì÷s¶ß* c` l¸¢d*âõˆ¸ """""Z¢ŒÇ]Q„ê âÔ·±UA¦¶:œs•¢ÄUÀ@:aˆÅã¸.ˆˆˆˆˆˆ–(ãq—‚Ñð[òþãwPýî—Œ.,@¦8.$ÁšÀEä1zŸÎÈ)¸Õ=¤ÅJDDDDDd.ãqW¡ïNÂ÷kB¡ÐÌÖû?ߣbmþ—CÍÇ…$X¸]D¥ë{´úýð'l·j?Â[®KðÎIÚÉJDDDDDd®” ƒ޼ãh '%íÔ¥ Òׇ§s&gD1Ðþ/tG柵!^È¢À…΄Ž>ws`ņÿBsh,þì DDDDDDf3wEºPš´%\|nÃMïjèQ»"OÆ1¸~¸™P†ØZP[ú.\mö§,‹ãB, \ü�wí/èM˜b$¶‡Ÿ`[jÊQçe¸>½ŠþxДˆˆˆˆˆÈ\Æã.ƒʯ¨}ë#4<YHèÂxÖÆì¶ 7!”4šx‘5‹p‚ÃxÞy^Ïq¸Ü'ÑÐÚ…§Áÿ_´ô«OP}v•ùÇà÷vP""""""s»ôf\øÑöó×(Yõ&Üý\…Z¢Œ¨½Ó£¹€ u¡±b7jÕ÷ ³± Ÿ6†ÔQá\’`Màatž+ÅGbdm9ò^ЬMÞCí¦X¹ë2g\YÄxÜe4[b9Öí¾€îqýZ“ß½‹‡sÒaDÐyþZ'ÔãY˧Èwùuo1®-%–.”' (ye;Üô†§º£y‚ïìi胂1„üÿDgXtÜ)ì DDDDDDæ2w‰Ù_Á{W»ªHh ¬`H)ú ׿Çå‚»¦­÷gʘ¼_‹MŽ5ØÅ”‚%‹¨ÿ3l©ýuNGTz½(bdˆˆˆˆˆÈ©Æ]J4ŠÙKËiŠÜŹ’×àP_G¼Vls¼‰ƒM§ÆÑü7î!l0ƒãB, \(=ßàƒÃ×ñl&ኂèó»ø¾âmlõv3²FDDDDDdsÇ]Q<iØ…Wœn4zŽ'h‡w÷¡%øä¸K±µÅX•[€mN'œ…ë°Bý½#ÿ3´ ëÇðØA‰ˆˆˆˆˆÌeî¸+ ¿ë#ÔvÅOG¯w\þpü±1Ž I°(p¡RFÐÛú-Üå%p•â ç:Ç㿜‹”ˆˆˆˆˆÈ\掻~G·‡[ž$¤ÇóÎïP‘_oÏïñŸã¸ký×qþÆÓ¤[B"¸W_À¨þÍLì DDDDDDæ2}Ü ¢¶h-r ¶Âé܆Âu+Õ×\Ž|×- ë58.$ÁšÀEȧúXüL»½Šòæ'ÌqADDDDDd+Æ]J¤­çÝ(/.BQé_ài¸ƒÁ™ü‡©q\H‚E‹ïPVZ¯Ï_l«ƒ÷Ë]ÈË/Çé@?DDDDDD60wÜ5þ«p#9¯áä=ÔŸ `4þ0Ž I°&pyŒÞ§ÚŒ±J8€êÍë°Ã÷�“ñŸ%b%"""""2—¹ã®(B¾âØkÌÙV@ó³ù[Ï%²&p¡C鿎c;+pºcˆ3.ˆˆˆˆˆˆl`î¸+ŠPý!”~y6>ó^lgñeiòËÎ 0ÀåPial \̇”ˆˆˆˆˆÈ\掻DúúðTs¥zá;_aó+Àד¼Lê\’ÀÀÑeý¸+Šþ–*ì,?‹Ž0o¡…aà‚ˆˆˆˆˆh‰’}ÜÅq! \-Q \P6°&pîBðaêû—”ÇA´÷Ï&ga%"""""2” ¬ \„.`—s?Žº\plG˶b“çÆãÂJDDDDDd.sÇ]“ß½‹‡“ñ‡ºÆñ¸ý.úõ–šTq\H‚E Šr °Íé„3նLJîx§f%"""""2—¹ã.±ê~8ѽx=µ}вÂíðGâ£Åq! Ö.ÛÑz/°0ì DDDDDDæ2=pá{¹[õ/\ÏlÛ±Ç×½‰’`MàcµžƒÛõ.vAýWq%ðDíÊúØA‰ˆˆˆˆˆÌeî¸kƒ·oãÞü«žâ¸K“÷k±Éñr 6bÝš]ð=·c5r›áéÇŸ¥ÅJDDDDDd.ÓÇ]ÑGh=]Wõè O¨Cð_jB ?õâ Ó8.$Á’ÀÅDЃ×6Ö¢[Q0Þu»Q(ˆvžÄ{ž;Ð À±ƒ™ËÜq×î×nƒÃ‘‹‚·ó°¦Ä‡]uرÒdžèˆdäLÀq! –. „Ðüñçh~&BhÞÍÃcl=† .¿îí"ì DDDDDDæ2wÜ5Š §k…¢þ»«¶ÇüC±ŸwÖüžàèÔÓRà¸K“=ðþš—b?Ón¯¡¢åiüYZ‰ODDDDDD/žÙã.¥¿ ú#ž‰ÉÃÍØ¿¿ÃÑ~´ºJàòë§ HÄq! –.”G>lÏ/CÏßÌv·þƒ0×ë%"""""²…¹ã®1ô|ÿÖ8’/`«Ûª¿ eXo-sëGÙÂ’ÀElU‘×à4N';yïΆãØA‰ˆˆˆˆˆÌfî¸k|"¿ìo °Õ­þ nõ„1† Ž iŠ5 å šË_ýÌxs`UyÓÔ"•ø™ÇôqW´7.ýƒ†QŠîÕ×#0ªÿŽ I°$p¡ôx±5¿ _×%DÙÎEÑÆríÏ.0ÀÀ‘%Ìw)ÏšP¾Ê{ãíU”7?Ñ!~OdIà"êÿ [b™d=CKÅ&ìj ±ƒÙÀÜq×ïèñ– ¿ìê¦/VûêpÎõ6j~VK~Ž É% åÉEìÙÓ€GÑÙ®¨„ý¨Ú°«Ýèe¾`%"""""2—¹ã®0ü®PÛ=7Ò‚ŠÕehìÆ`ŒãB, \ˆû–z|»°&ï=TuÁU¹…¹/!ge1j;õ—Àa%"""""2—¹ã®(ž4ž†õ_Ó&| Ž7àŒÄfŒãB, \cè\@Uy œÎ(­¬Á•Î!ÃL²ì DDDDDDæ2}Ü톯$yÅpÔu•{7#×áÀÊ¢ÓèŒgq\H‚u e!ÿ%Ô¸]p¹<8Ýø/„"Æëö²ƒ™Ë’qWô õU(/.‚³h*k®¢3¬—0`.Ž I°&p¡ ¡£æ=¬Ìq`EÞ{øó‡±¶ðl.9…ƒËJDDDDDd.+Æ]J¤þ‹'áv¹àòœA£¿ ˜lÃq! –.Är¨[/cƒû£ ¢~7Š}=Öà#o7³ÇÙÀìq—nGMÑjõuV"¯x/>,ÈC¡ó”Ô´#¼€àÇ…$X¸˜¸±:g;¼½ã±ÇS‹û?×?!QË,vP""""""s™;îË¡î€ÃQwÛ€:TÀB°ú0¼=¿ÇŸgŒãB, \`ô¸ó·ÀœÊõ»ûúëÈu¼Šòæ'œqADDDDDdsÇ]#¸ß@Îf/zcƒ¾éÀE¿ú߸üú+L&â¸kP ÝÄß?¯‚×ÿÑ€¹¹[PqþŽáô vP""""""s™;îR0¨BþújÇÅÀO.6àõu«áXu�ÍÏæOÐÉq! Ö.Â]>‹?Ч<¢½ö¦vP""""""s™?îC¨õ >w}ÿà0î È-<„óÁ!Ý™÷É8.$ÁšÀEèv9÷ã¨È"k°-ÛŠMž;˜Ê‚ÁJDDDDDd6ÙÇ]’`Qà‡¢Üls:áLµíñ¡{rêOØA‰ˆˆˆˆˆÌeî¸ká»wñ0>ÆÓ7ŽÇíwÑÏ”‚5‹Áv´Þ‹Ä, ;(‘¹ÌwEªßç#º³î§¶OQV¸}f!‡d’`jàbüaDµ¿†à¿táù“¯Lc%"""""2—é ßûÈ-ت?ã~fÛŽ=¾.èMÌà¸SJè þúM'Â7Vç8°ÚÀBCì DDDDDDæ2gÜÁ÷êÿOàIÝQüåª:&\H&N’`jàjG wxq°è ¬\SŠsó¯Ó;”ˆˆˆˆˆÈ\挻ƺTƒoºž à~C}7àèß 2Ž I09p‘>vP""""""s™6îR†Ðqæ/(zs5Ö”œC§H!Ž I`à‚ˆˆˆˆˆh‰’}ÜÅq! \-Q \P6`à‚ˆˆˆˆˆh‰bà‚²½‹±v4\ Åh±ƒ™‹ ÊÖ.”'h;± y+±ŸÏn+àôõÆŸ¤ÅJDDDDDd.ÙÇ]’`Iàb"èÁkË6¡âÔ·ðù| Û÷héÖ_‡”ˆˆˆˆˆÈ\öŒ»Œùq­"þØÇ…$X¸Pz¼Ø²Å‹Þ9+àL Õ_‡”ˆˆˆˆˆÈ\f»”[8QúV¨¯#^kv+†/?ËÇ…$X¸@ô nºö¡êf7B¡ÐìÖÕ�ÏÞ*BDDDDDdsÇ]£z6bÙ† œªKœy¯nõ7ÐÑ¿ˆˆãB, \LÞ¯Å&Gr„MlÌqADDDDDdsÇ]¿£Ç»[¼0wò}“ï58.$Á’À”>4ì?ßm?üþÄíßè‹?I‹”ˆˆˆˆˆÈ\掻DŸý®÷¿ÄÍž„™÷¡Gèòýx«-5 Ña‡†0²€ˆÚ4vP""""""s™;îÃýÚmp¨¯!^G»1Ç-œ5‹þ¨¿5˜4=(‚{õõŒêG3ØA‰ˆˆˆˆˆÌeö¸Kyr ûÕá¶fæ½Øîa`÷Šp\H‚5‹Nõ±ø™v{åÍOæÞï¤Òü=½p掻&Э—úÂÚ1ßä=ÔŸ `4þ0Ž I°(pq••§´YdÏEÑÆ}8ègà‚ˆˆˆˆˆÈ掻¢ùŠc¯1g[u�ÍÏ&âÏ3&žKdMàb´Ý¿ÇLA°z/\mƒñÇZì DDDDDDæ2wÜE¨Þ…ʳu ±ëpÎõ6–A`€9.ha¬ \„Qí &d‘U·Þ + °ÂåW»ó\ì DDDDDDæ2wÜ¥`ôÁü–<Å~üªw¸ÑžŒÿÀÇ…$X¸0Èq±b+<áø“´4ODDDDDD/œ¹ã®(Bß„ï×>ÍEìÞÎP™·.8þ<c’`Qàâ\ž«hÓd‘mǽˆn~ ”ˆˆˆˆˆÈ\¦.ts\8°bcµá “‰Ì­e kƒ¿ ånrÎØq<n¿‹~ƒ¾ÊJDDDDDd.sÇ]Q„.üžŸþ™p[Ý]ˆÌ›ˆÀq! Ö.B°Ë¹G].¸f¶OQV¸žà <ÄåÝùX»ûBñ@;(‘¹ÌwM`ðæMÜM^<Dù ííO gß'⸋>å`›Ó §fÛŽ=¾.L2pADDDDDd9sÇ]bU‘ýp8’p[ÝŽîEᦎ+PB—°{m>v_~¨Èà¸kƒíh½‰?HC$ªgc%"""""2—é ßûÈ-Øšt[làëcà‚ÄšÀ…¨¿ %Þ.µ;ÏÅJDDDDDd.sÇ]¼}÷’o‚hdLw˜ŒãB¬ \Dîâ\Ékp¨??×lŽ7PîmC()9‹æï‰ˆˆˆˆˆè…³g܆ÿX¼=:³ò“p\H‚%‹‰€«×”ÂSçƒÏ7»}ëÚõeSÿ]+Ágš©Aì DDDDDDæ2wÜ¥ Òy%k^нNòæÈÛ¯¿ýì1âyD–.}ˆ¦cüد 48½ â´ØA‰ˆˆˆˆˆÌeî¸kwÖ”~º„ Ø>߸œ…(«ùVýw‚ÏçÜK2ƒãBL \Œ?ìÂ>‹†à¿Øœ²C&c%"""""2—¹ã.E 6áØñŸÐ¯™U1‚@Õ4ôÏ?>ä¸SJè þúM'ÂâV‘V»Xhè‚”ˆˆˆˆˆÈ\挻"xØùPý¸ðãâ• ž§¸$Ž I05p!²È†;¼8XôV®)ŹÎðÔ/€”ˆˆˆˆˆÈ\挻ƺTƒoºž à~C}7àŒÄ·8’`rà"}ì DDDDDDæ2mÜ¥ ¡ãÌ_Pôæj¬)9‡ÎT8Sà¸.ˆˆˆˆˆˆ–(ÙÇ]’ÀÀÑÅÀe.ˆˆˆˆˆˆ–(.(X¸C¨õÜ®¯p±sŠx쿊+'ˆÆŸ‘Œ”ˆˆˆˆˆÈ\ \P6°$p1y¿›/!·`#Ö­Ù߃ |;V#DZžý•FØA‰ˆˆˆˆˆÌeî¸KA¤¯OçäåŒb ý_è^@ÂNŽ I°$p1ô൵èVŒwÁÇncT¬éÛyïyî`"þ¼Dì DDDDDDæ2wÜE¨þ\?Ü„ßïOØZP[ú.\möÎÂ8.$Á’À”š?þÍÏDˆb�Íû yx ƒ­Ç°Áå×í¨ì DDDDDDæ2=pá+޽†ñ¶ 7!ÕŸ}!žCdIàb²çÞ_óRBçœÞ^CEËÓø³´ÿžˆˆˆˆˆˆ^<sÇ]Q„.œ@í„B¡„­ »Qx¨þ»Uø´1½ÐÇ…$X¸Pù°=¿ 5>|3Û4Þú·5±ƒ™ËÜq×$ÂwïâádüáŒ:ÏŸBË ˜‘?Žg-Ÿ"Ÿ3ñ)Kè¿ ×¾3ðÇ:æ´îÕ×#0Ê)ADDDDDDv°dÜ}†ÎëßÀãrÁ]Ó€Öûƒ3AŠ©…Ö`g\P Ö.B>8ÕÇâgÚíU”7?a%"""""²éã®È]œ+y ŽÄq ãMlz8¼ˆ†à¿q3ñ)%‹QYy*á6u;wE÷át Ÿ """"""˜;îŠâIÃ.¼ât£1Ћp,ç$"íðî>„†'©Ö™Âq! Ö.FûÐýÛxüÁ´«÷ÂÕ6¬ÅJDDDDDd.sÇ]aø]¡¶{,þxÚ8z½ûàò‡ãq\H‚5‹P#ª}Am&ÙÞ + °‚IXˆˆˆˆˆˆlaî¸ëwôx+p¸åI˜oÏ;¿CE~ ¼=¿ÇfŒãB, \ä¸X±žÀpüIZš¿'"""""¢ÎôqW$ˆÚ¢µÈ-Ø §s ×­T_s9ò]·0l×"Ç…$X¸¸—ç*Úü~øg¶vÜˆèæ·ØA‰ˆˆˆˆˆÌeŸK‰ô õ¼åÅE(*ý < w0Ëw1?Ž I°&pÆó‘Ä¥PçÇJDDDDDd.sÇ]è¿z7†“Æ‚“÷P&€ÑøÃT8.$ÁšÀ…°v¯Ësþ>DRÙØA‰ˆˆˆˆˆÌeî¸+Н8ös¶UÐülþ‹Ûâ¹DÖ.”Ǹ~èM8rX±îm8[Q»y¯"d0Eˆ”ˆˆˆˆˆÈ\掻¢ÕBé—gáóùâÛY|YZ€ü²3 p9TZK“5Xïx®–‡³³,¢ÏÐQ[†Ý }ºy.ØA‰ˆˆˆˆˆÌeî¸KA¤¯O5¾ „ï|…ͯ|�_Oò2©sq\H‚%‹‰ ¯mö¢7)B¡ôzQ_UÂPÂì vP""""""sY?¿¥ ;ËÏ¢#Ì[Eha, \(a?ª6í€ûÚ­ÙUEZ¯âTY!Š<×boûŽ`Âì vP""""""s™;îš@ÿµK¸52Ç䜴HÖ.ù°}™NB–¤Í±©÷ã}Z<&""""""ó˜;îbrNz1, \�OÑrü+´ô… ¥Ø±ÛFvP""""""s™;îÉ9 âÔ· É9ëpÎUŠW=“sÒ‚Y¸�”hóÇÓf±ƒ™ËÜq—‚Ñð[òj ãwPýî—Œ&ÿb.Ž I°,p±Xì DDDDDDæ2wÜE軓ðýÚ§™ißû?ߣbm>\þpüyÆ8.$ """""¢%ÊôÀ…AŽ GÞq´…“’vêÏ%²&pyŒÞ§sï_R:p«{$þH‹”ˆˆˆˆˆÈ\掻¢]¨FÍ?ÚfW—ô·á¦÷5ôÌä7L…ãB¬ \„.¢Òõ=Zg:ëÔv«ö#¼åºôÿoïþ^ã:Ï<€÷˜›^械`¾èM0ºØ%ö…C‚ÁLèbLj(Qا֮K„l6eá®Ìfå¤+Â®ÕÆƒÒ¨vDJj ê´ž¥Sb‘U¢Øø×´–ãByžÕ‘ƵF© Í9¡Ï^¡‘Î0ºxo¾_ó¼Q¼c•úç›lP��€t¥›»™qQý4ºþñ¹è½f8'Ë“QqQˆ3¯“Ÿ5^¹X·õ?¢¿<Y{ƒ ��¶tsW£;.Šqö7ÿ­ë‹öRã»ïç“ IdT\œˆö®ÿKó²$ëòÉ‹Ź-C¿Žü+ïÆH­³A��Ò•zqÑpÆÅ7bã÷ߊóSNay²).Ɔcðòý»)î™ê‰WOÌ|WÊSñòæ¶(Öî²A��Ò•nîJî¸øit\ªHùúزæ[$äBÙ³¦âÖЩèî8ùö7¢÷Ìpܺ7×âî'ÑõøºxðÙ_»ã�� #iç®êÄÅ8|0ò‡NÄÐØtD¥Åã}Qùâ?¶‘ IdT\ŒÅÐÑÝÑ’«¿=hÓóïFy¶¼˜Œrñws¹Æ��HWº¹k2>ëڹ܆ØòĦhi-Ä…ác±ëÁ\ä¶¾ç&<*ÂòdR\T¯õFë7¿í'Kqilêĵ8×ý£ø—Þ+Ñh»Ú ���éJ7wÇ`ÇöØÖõir¾H wí¶âíÙŸuþ0:Çç.[‚\H"“â¢RüI|kv³Ö«^ꎧòņÏ7Ù ���éJ;wUGúâ¥WÞIí}ûúc´2gò­‘/ŽÍ]´¹D&ÅEõâ/â»ÿ~*nÜ›i‘ ã¼õq¼½ÿ‰ø§îóî¸���X鿮ɏøös FÔÖúãôèÝÚu‹K÷ïcµÈ¤¸˜qÑõt¬ß°%vìÜ;·oŒu3¿ÏmþIœ½?×b>�� ]éæ®©¸Zø^lÞóz …û«çd ]_ÖÉ"r!‰ŒŠ‹Õ;qé̛Ѿ·5v>µ;žï8çnNÕ~ùE6(��@ºRÏ]•+1püq³î6û±(¶í׋“ IdS\ŒœŠŸ|¾à‘‰ø¤§'Jã±A��Ò–nîªÆÄÐÑhmy`ös®Ü¦}Ñ]¼K.’\ÙåB윷A﯈½ý×̸���Xéæ®;Qjß-»_có)‰üÎí±§óÍ™ïûbðVãñ ¹DFÅÅ/cÏîƒÑý—z,ºÿûÙØ´yo.(.���V@º¹«•r_´ø FêBß(üqôŽ,^XÜ#’Ȧ¸˜øS\ú¼~ôJu¬‡žÜ» ¢Ñ,Y�� ]é䮉¸<tyækR\ãWï Æ­%YŠ\H"›â¢êÈ©h{f>wÛ���+ Ü5åãñ‹ákQjtæ3öÒÚï¾¹D6ÅÅÈ@ô|xsAAa8'��ÀJJ-wUoǹ#/ÆS=-­Gch© œK IdS\Î ��Ðtš=wÉ…$2*.zãùýõ“d棵5=†s��¬Å«A6ÅÅø•8ÿç©Ú‹{îÄࡽÑ^­½®gƒ��¤KqÁjMqQ>‡ ƒQ.—ï¯KEïþͱ._ŒúóFæØ ���éR\°dT\,2ã"·5ògoÖ.ªW÷~���¾r©ç®ÊÕ8sø`䈡±é™×å(ï‹ÒÈd킥Ʌ$2*.ND{çQ,ï¯ß^8W+N��X 鿮ɸ¬kGärbË›¢¥µ†Å®s‘ÛúZœ[ÆI#r!‰lŠ‹†3.&ã|Wk´ö^1œ��`¤›»Æc°c{lëút&óÇp×þh+ÞžýùPç£cp|î²%È…$²).Ýqq¶/:[ÿ>j/Åtí²ùlP��€t¥»ª#}ñÒ+ïÇä¿Õ£ý±o_ŒVFâL¾5òű¹‹– ’Ȩ¸h<ã"·ññöùÆ-[Ýû��øÊ¥›»&ãâÛÏEKî‹Yðkë_ŒÓ£wk×-.Ý¿Õ"£ââDìþcý©"åÏcl‘ù �� ]éæ®©¸Zø^lÞóz …û«çøðâXÑ É…$²).ªwâÒÀÏ¢=ÿÓøÕÐí™ :åâ»ñNéZãP6(��@ºRÏ]•+1püqs9-Er!‰LŠ‹»ŸuÅã¹bÖm±±åÙ(\ŒÂ®‡âk¹'£ã\ãçšlP��€t¥›»¦cä½ãñá„Üý$zŽ”â¯æ” ™“Iq1=ØoëŠóÕjL ‰ï¶ý~f“V£2ôF|§ã#Ã9��V@º¹«åÂÓ³Ÿñ…µþGÑ£Q¬—\ ™Q-GÿKÿYۘףߣt2nži‹­ùbÃÇElP��€t¥›»*QîÉÇË?;6oÆÅ±8šÿNlÛs$J×pŸ\H"“ââîÅ·âŸ[˜ýYýz8öŸþ¼vU½ùï��à«—nîªÆø… ñç…ó-¦>ŠC»Úãì˜SEXžLŠ‹êÕB|{óžèœ?I¶ðVœø¿¸¾ÈÉ"6(��@ºÒÍ]•(ÿò(|z¥î„ÉKC'âåMD¾ØxÞá|r!‰LŠ‹äüÞòÀ{Q¼Yÿ S¥x0Z»‡=*��°R/.θÈźm‡¢4þ×I÷ïcµÈ¦¸˜ø8޶>¹ºÍZ[¹Gco÷Ù(OÔß&T÷~���¾réæ®J”ßú¯èøàwQ,ï¯Òp\_ÿ#’Ȥ¸˜.µÇC-»£ãØüGE ñf~W<²çõ™ï{âÁ1¿o³A��Ò•nîªFåö­¸}s(NuŠ|þ@t>ÅrrÆäòÈ…$2).¢r9úÚ:âý‘ú‡B¦K¯Å¿ö^­½ªgƒ��¤+íÜUù ^Øô™Ïy06nß;wl‰ _,žï»ÜpdÀBr!‰lŠ‹Du:*ÓËíÕlP��€´¥›»&b¨s{䶈ӹˢ•[Œ®göGï5Ç¡²<Ù_’ ��®ts×x v<Ov_XðhÈT\êþAíT‘é¸sktÑ»/äBŠ ��€5*ÝÜ5c¥WãñoµÇ{gï ç<gúÞˆ=<¿ùýÌëßFá…W½ûB.$¡¸���X£ÒÍ]SqµðL|}æ3’ÏY|ý]<ÞõI4:g$ù=(.���Ö¨Ôs×è@8x*®”ËQ^tý)®¹ã‚Å).���Ö¨ôsW5*•éÚ÷_ž\HBq��°F5{î’ I(.���Ö(Å«â��`R\°(.���Ö(Å«â��`R\°(.���Ö(Å«â��`R\°(.���Ö(Å«â��`R\°(.���Ö(Å«AªÅÅߺ���HO³ç.¹„]���°FÍÿÇq³.° ���€¦¥¸����š–â���hZŠ ��� i).���€¦¥¸����š–â���hZŠ ��� i).���€¦¥¸����š–â���hZŠ ��� i).���€¦¥¸����š–â���hZŠ ��� i).���€¦¥¸����š–â���hZŠ ��� i).���€¦¥¸����šTÄÿ¤ûu2Ë ¢����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-SDsetfillvalue.png�������������������������������0000664�0000000�0000000�00000306302�15030617045�0025313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯��9���è§·���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOT×úÿûÌozä !ñF““†pæiä¦ šcÑ‚¦ Û€6íWð|+hê[æÕ ž–´òF[æ3V´¢2¶àù€GÇÓá+óöŒEìŒ8 ȯ÷À{ýüî5 ÌìafÏÞ{fm¸ÉjdÆkÖ¾Ök­ëÇ:AAAçñJAAAp¯AAA÷ñJAAAp¯AAA÷ñJAAAp¯AAA÷ñJAAAp¯AAA÷ñJAA¬ZÖ­[§¸›XãEn“F‚ ‚ bÕ"wsÒ÷Äj&Õã‹F#AA±j!ã• ´ƒŒW‚ ‚ ÒÛH(mÁJu’tš â“êñE£‘ 8‡ j¥ "Q”Î4ç¼A:MÚ‘êñE£‘ 8‡]‚ R Í9Äjƒtš ´#Õã‹F#Ap-ºA¤šsˆÕé4AhGªÇF‚àZt ‚H%4ç« Òi‚ÐŽT/Á9´è‘JhÎ!V¤Ó¡©_4 ‚shÑ%"•МC¬6H§ B;R=¾h4çТKD*¡9‡XmN„v¤z|Ñh$ΡE— ˆTBs±Ú &íŽ)x`·ÛƒíAÿ„àÏg0Öß»£Ãþ¹àO;¾h4çТKD*¡9‡XmN„vHLJ€×Þ+4âºkà^¢ëÔÈoÝ:2òè þM¹ã‹F#Ap-ºA¤šsˆÕé4Ah‡t|LÁÕü ¬nèu�ƒm•Ø$þÎ:Ãû¨¾î„ÛÑŒƒÆnñ7ç‘;¾h4çТKD*¡9‡XmN„vHƇПN·apÞWX´e .w£ø;lªlÇHðçð6Ãò–;¾h4çТKD*¡9‡XmN„vHƇÄx·õÀ¼»°a]¡»VÁ ë77 \¹ã‹F#ApŽdPû½p†‚àívúÇB1Qô;Àñxþ…Ó®´è!¥sÍ9oN„vHÇÇ$zOàl×c¸{/£*‡ÝºnDNíŒ÷§³˜¸ÿ=NÜð†9É_4 ‚s¤ƒÚGÝ(4þ רLð'ÂМ*ü[ð÷Ö­Û„üã¿c(€¥E— 9(3hÎ!xƒtš ´#z|¾4•¾ƒøsæ.œYü#z}³F{q­¡%EŸÀØö Q±rÇF‚àÉ žy„æWà„¬Sá9ÚlþŽ!ç \w=£é0vÍÿ½-ºAÈAéœAsÁ¤Ó¡1ÇG`ç`w>ƒoaϹã‹F#ApNä Ü—qúê@ÈÕBÀ”Ä\;Ùz•¶ÁùŸOü†Ó?>ÂB-Zt ‚ƒÒ9ƒæ‚7H§ B;¤ãcº^.ºÇæ5\Q¶a‚X­Dj‰ñ*xк/+ø÷†mpÍ„LÚç×ð͵—]‚ ä¡tΠ9‡à Òi‚ÐéøÆmc ¾o±Àb‰ÓZÎâ°ñwÑÌGîø¢ÑHœ#Ô¯¢ñóFt=yŠÞ+G‘Ãn] y¨í´#¸o2ᆂâÏA¬m”Î4ç¼A:MÚ!ðUÌ_¬,×6TØÈx%ˆÕŠtPÏÂ×ÛŒÒì ¡ à-7öÀ'0êü UûPTzmîg Zt ‚‡Ò9ƒæ‚7H§ B;¤ãC4^+ó·»EEñÚl­ºMÆ+A¬V–jß38íÿÓ3ðklhÑ%BJç šsÞ &íŽÑx=m†k!ñJ,æáÇÓ¿‘ñJ«É žú ®×¡q^Âõç”@‹.AòP:gМCðé4Ah‡t|Œ¡ûÔװ̆^/ExnÅ'Ç»(aA¬V$ƒzâwŸEK¬�øPkù¾ÆÛá7ТK„<”Î4ç¼A:MÚ! ¶~Š­•qßå(ø1켉º¢\”¶&ŸX”F#ApŽdPOØP±aià»´e¡ÂFÆ+AÉ¡tΠ9‡à Òi‚ÐŽèñ!ŒÞAmÎÆàÏ YyØŠsÝ’aþlݦ#’›Y¹ã‹F#ApŽdP‹ÆkåÛ AœVP€*2^ ‚H¥sÍ9oN„v,ÑÉEÃÍý šzÇo]Kß¿<4 ‚s$ƒzâ7œþñ–ƒw™qšŒW‚ ’DéœAsÁaà÷>‚ÝnŸoú16_g±§pØ{ðxØ/ÙX3H§ ">ñƇà€½í<êFõhnû¼þ¥;X¹ã‹F#ApŽdPOuãÔ6ŒD¯¬‹Ìà¹å(Žw…^Ó¢K„<”Î4ç¼!ÑÉ× î½"¯?ÂX€-¦ uÕ¡03äÒ˜±Ç;_(º"ˆµ„t|L¢¿ó ,–+èìŸ‡× 7~Ak§+4Þ–"w|Ñh$Α ja�­û Qiþ7Ü>i‘Á?g» Eo–£u0üw´è!¥sÍ9o„uRÀŒëNXûɃ×q`3\7"§ú\n;ššÐ=Þh“ND|¤ãÇ©&Çá:޾Ã:2ÞÝŠ] =ˆU/Cîø¢ÑHœ#Ô³í:‰‹Ø€¬¼]¡8×-Èo8Alªl—ÜÌÒ¢K„”Î4ç¼ÖÉ×pÿôO\]<à€£n»¸¹×ÏÅ$2s˜°ý?ºüó¿"B:Mñ‘Œ¹Gøá‹kfàm=€Lñï ¹_áþÄ˸õ_åŽ/Á9Kµ0ŽÞ¦O4`#Ûd—6£×'­­%wR bm#3äÇÒœCðFX'¥Æ«à½‚}Awá7°­Ñ‰™àOgðÜú®‘A$„d|ƒ¸}úüró ŠÙØ2lƒñþƒ7pô±ÃÞäŽ/Á9±õœ¸¡üÚšëadðõçÑf€_…I ˆµÍ’9CfŒ Í9o„uRÀëÞ&|~öž¸{p¥Š¹4®ƒ!ç$ºFç~…‰Ãtâ&†"ÖSÒi‚ˆt|xG]ñÛ0ˆkC­Í‰'7Ñ îUM­.„ýÂÈ_4 ‚s$ƒzj�ý/çφã" £ÿ©/ô‚]‚ 佑#HsÁŒö^Êü¬t‡0çµ³¨*ÙƒRã ¸#NƒI§ ">JLJÜ÷Óh$Α ê‰.4þóî/¸ðÅh÷ÛÏ¡ñΫÐhÑ%BÒ9C~Œ Í9o,ÕÉ�|§¸f:á‰J~ Òi‚ˆÏÒñÁÂJúa·]…ÅrmÝ. Ç(‘³€ÜñE£‘ 8G2¨'l¨Ø:-ŽÛ²PAu^ ‚Héœ!?Fæ‚7Â:)`êÏ?1á aàOüIÙ† "!¤ãC€ßu¥Ù‚?ŸodÖ¡k(öA‘ÜñE£‘ 8G2¨Éx%Bc¤s†üAšsÞëä&n›pøûŸ`±Xâ´ŸðýanO„oŠH§ ">’ñÁJ:–¾)þlòÊOã»ce8PM_Œíµ]˜ ýZ$rÇF‚àÉ žønü{DÜNÆG˜ø7î’Û0AɱdÎ#HsÁad.éñrmÃaØÈx%ˆ„Œ¹GhÜš‰\ã]L!%‚–#ç©TA¬$ƒ:0±Ii)œ%S—¦E— 9Äž3¤9‡à°N²ÍtÞ^¨‘³íFÁÖ/Èx%ˆ‘ŽIôÖ„Ê  o_`kÁ(ØòrëÐÍ+A¬¤ƒzCŽ[°ÞèÁP°dÅ4†]ÄÍd|ƒ–]‚ ä 3äÇÒœCðFX'#n‚ââ‡ëÇ’ñJ ²d|ž£û§kpŒ¾ÇÛçxsK1ª»à î[—"w|Ñh$ΉÔ‚ÛŒA×½È9úÿšmÈý ÷'b°´è!éœ!nöeÆÒœCðFX'LuŸÁ¶Áøá7̽ñ“¯K?1H§ "> )î<xsÜÉ_4 ‚s"µ0ÒŽÊ7ßGÅ÷M8Sþ L÷œè¾dAG—Íåq"¡E— 9Hç vS%/F½&žˆÔIa°û¶†ù¾>ÉMÐüÃN´×íÁ›¥­Œø+Òi‚ˆt|ÌÂçüÕ%ÅRwüÝyÈÚTŠf—o‰+w|Ñh$Αjœ?|ƒÖç3|=8ÿÍ-xw >ÿᑸô.…]‚ ä 3äÇÒœCð†D'…atÕæÍ×*6d!owH‡·doݺ·Qu3K:Mñ‘ޝ~˜wf„ÆRŒ–¹¦N7Bùý‚°ŸËF#ApNä F»`Ìß$‚íM”¶¨âŽAÄÚF:gȤ9‡àhd‡¿M¥ḭ̈‘ÍðJ›zà‹ZLI§ ">’ñ<ÚZ[¼^o¸õYpð }ìÏ/ÆÈx%ˆÕLä ǼF¶ È.½WäLÜI ˆµtÎ#HsÁ1uR˜‚×Þ†æúÓ0O£¾¹ vï„L–ŒÀ; 9òœrÂjuR¶a‚X Hõ4¼ðÌÄÝF.]‚ ä=gȤ9‡à°N ð÷ßÕbµ³_Ü\‡2ø·Þkl&ô;K!&ˆøHÇÇ4^ /kÅŒwïzk”É_4 ‚sØ ö¾Z¾®"„1x_Ævë£E— 9,™3dÆÒœCðFX'¼vÔãC“>!€¡ŽZä0o¦Œ·‘³ë;ô¾Ž}0L:Mñ‘ŽW¸Óx£³Ò_¨ÁÎ5¸`¹†N×"wµrÇF‚à6¨«¶îˆHŽ£ *Xz)´è!‡Xs†œAšsÞ뤮êÐ:€à½‚}™Q‡·ÁxÿÆ—‰í&&ˆøHÇÇ0lYóëC¼fÈCm×pÒž4 ‚sØ ®ØcðKZ*Èx%BâÎ ÆÒœCðFX'g1r»§~iE}ñ[âÏ7"×x´=ÛÕK'¹HÇÇJ7¯ìu#ŽÖ^O:Ô„F#ApÔm¿…²¶¹ÿK?Ü„+2ƒ›§­FÚ¼±ãuhÑ%BÒ9C~Œ Í9oHtR4T;ê>D¶aòkÛáøm §a4]£Ä‡‘Òñ1އÏÒÒ3OðË%;&}½°šþ’½çà ý’ÜñE£‘ 8‡ êÀìü‚*¸/ãôÕè’8 ¶Vàsÿ’-ºAÈA:gȤ9‡à%:E¿ý6ZÙ¡LÛ]¸†ý1×ÏH§ ">Òñ1 [U –„¸íÀÖªÛwÿ#øûëÖµ`"ô¹ã‹F#ApNä †®£|S6ò?©ÂI£Fã T}²Y†l”·yÉx%B1Ò9C~Œ Í9oHtÒÿ£ã·3?À©®—q XÒi‚ˆt|ÄyÝPaÃ8ÛÇf®Gfùu …û;9Ðh$Αêixm_"?CÜ@.N!×'I ‹0r'‚ Ö6Ò9C~Œ Í9êžï©%ÛæažJeX¿Î€Œ¼¨ûîJ|‹–¦S(Ýn\¬UMøýD²D?j««…GOç=¸#ÃÛBíÅópðKÊ®Iß¿24 ‚sb jÁ?„Ç;ìö<&w'‚ TdÉœ!3Fæõá½Oõ#Ÿ®Ær¿Âý‰Y`â7œþñæ0ƒç–Sø² képò¬ö¾“û~¾{ƒ é žÅðxôM‡€ÏÜõТ›JX¿R£¶Z›”¾ŸX ï}ªù¼îm@^¥m>Þnâö|)º‚-ÈÌ5ÁA7¯šA:œ<úê;?^zÇ–½Ta¯¼¯°òOî÷ã¦7˜àÔ¨Q‹Ý™èBãéfiúqK .ÔìÁΚs°ÄÈ�*y?¡Ô¯|Ãóóá]w“oÎ;=±C¡±¡>«CgÒ‡T¾ix»/Ãêxa†Š7sPTuÝÞéÐß/…tZ9¤ÃÉ£¯¾‹—°)²Í'oÒ}Â&Ršä!ù”¡+ùØB»BÍWCÎIt†ogÙÏõ¡~垟ïº-Ÿà{ˆKÕû¢6»—µ{šˆ¾¬¢±¡>zÓÞP*é´rH‡“G_}?aSdcÉ›ÈxÕžec|ÊЕ|+ݼ²×çN 6¢œïßO¯P¿ò ÏÏGWs^ÃmÞ+ÍÌ*io¡Èô;<þpU?ösB]xïSýÈ'`æå ¼ZÞ§«x9þ%Òiå'¾ú.~¦È6Ÿ¼i¹ß›Þ ¥I’Oº’oÙ˜×Iøœ¿Àtl?ö6²óðþýô õ+ßðü|t5ç`£]F쪽µqÂr°–¾çâŸ1FÆ«¦èKgø#,ß&l_`kÁî(O‚ȶ[¿€m‚tZMH‡“G_}·Æb^yE_JÃ$Ÿ2$ò&06¹´4„)ŒOa¨­™™û`~2ú þ¿Ÿ^¡~垟®æFàlÇÿ?0u½·ìõ0\=ÑmýÎ nhl¨ît†3Âò1ãõ06ˆ¯ÙÏâ¶ ‡ÉxUÞûgùôÕwóÊúRþ ù”!‘oâw÷…Ñh”¶c0Þý’Þ¿Ÿ^¡~垟®æœH·aÃû8ÚáÆ_Áסz¯1Ž×il¨¾t†?Âò ˜êùþåŽô"ˆÑ^Œ!² é´rH‡“G_}G1¯\À³l ’Oº’/n¦,TØÈxM%Ô¯|Ãóóá]w¤òÍbÄvoæTàû‹&”ï9ƒ{}]¸té6º.ý„;·S ÐØP}é ,‘/0Š~ûm´Z,°¶Ý…‹ê¥képòè«ï(æ• ô¥4üAò)C"ßÄ]˜Ïÿ»Ý>ߺÛa©?вêó°ÅNóÏû÷Ó+Ô¯|ÃóóÑÕœÃð?Ä'®á¹0 _ïÏøæÆ3qÓá‡ÛlÄ®¥õ¥il¨ît†3$òùábé;Ò$d™àT×˸,ïßOèJG8Cÿ}7¿· ß5v-Þ¶F"÷ûqÓ¤4ÉCò)Cßò  ¶£úí¿Ãx$æÂËû÷Ó+Ô¯|ÃóóÑל3‹Ñaþ\ÒÖ—¡u0+Aú~B xïSýÈÀ`kÖ¯3 #ï�ê¾;†Òߢ¥éJ·Ñ#†›A:­ÒáäÑmß SðöÜ@cÅ6dˆ¿é*‰ÜïÇMoÒ$ɧ }Ë7oëd®Ë¾V¯)„ú•ox~>úšsâ”Ê1¼ƒÒ‹°ôޕƆðÞ§ú‘ÏWc ¹_áþÄ,0ñNÿȲóÏà¹åTLOé´rH‡“Go}'øá´Ã±¢·ÃkGÆ[x;"IS$r¿7½AJ“<$Ÿ2ô'ßüÃ.t·]†ÅzÝ}^ ¿”&—ˆ„÷ï§W¨_ù†ç磻9'àÅû³Å²+AcC}t§3œ–OÀëÞäU†n€&n£jëlAf® ºyÕ ÒáäÑUß ^´Wn ­Up6'†ýÓ’ò8‘Èý~Üô)Mò|ÊЗ|ÓðÚ¾Œráû ¿Á E7•P¿ò ÏχwÝQ* õYí:£5RùÄu´û2¬ŽWXÄ7sPTuÝÞØy#¤ÓÊ!NýõÝ Æ\¸h¬…éú#Œ÷§f³ªxrÓ¤4ÉCò)CWòMu¡vû>œl¼‹Ål-MgPSRŒÚî±Ð/IáýûéêW¾áùùèjηñqLÆØq“ãqhFcC}ô¥3ü±D¾`,ÞohµXÑj³£ly¿Òiå'~ûN\?Æ\è0Ÿ…©±§)aSêЯÒðɧŒHùæ\fœŽUg1ng)¼?½BýÊ7<?=Í9,LaâöWØìdT}é“8¶ÿ+ܦR9)A_:ÃùÏÐ^ý~T¶áÐØ;óVˆÁû÷ÓºÒÎX }'øŸâÖ^L…^G"÷ûqÓ¤4ÉCò)COò #6ÝgD‹­+\.ç~®?ÅQÛ *îDbP¿ò ÏÏGOsNÐxµÆñgìç’¶á0ld¼¦ÞûT?òÍ×-ÞÄô7#eÆïaz0Q¶a­!N}õ€ÀPnXoÁ,á(¾þ=Ÿj‡CÜô)Mò|ÊЗ|>¸šJ)þŒý|¾¹ÇŒ'3´è¦êW¾áùùð®;RùDãõN ÎwݘÝG·­õUŸ¢ºù>†Èm8%èKgø#,ß|¶áu›>CëóÈWÊ6¬5¤ÃÉ£«¾úaÞ™ü™!§ƒ®ù׆mª•tä¦7Hi’‡äS†þ䛯ãšëOÃhl€™eq‹“¬‰Áû÷Ó+Ô¯|ÃóóÑßœÍ4m_àí…r#QÐØPýëLz Ë•mX|=ó¤û²7ˆíØF–ê3ƒtZ9¤ÃÉ£«¾a«ÌANE.žù {LÿB_·—:~Ã¥æ»óš*t¥4Bò)C"ßÌ+x_B/"Æà}I'Æ©„ú•ox~>ºšsb!xк/ ë2 Õ»4Ñ õѽΤ‰|Â8œÖt³ ‹Æk+Ž–~SÇ�b¬®AH§•C:œ<úê;~çyœhuCÇZïùFÜ`ëD æÏÏÃ#9‹ÜïÇMoÒ$ɧ ]É·P“®¨HÚ P+‘“ïßO¯P¿ò ÏÏGWsN¿7­w1ÃéƒÆ†ú¬I'Jå#Vépòèªï„at !þŒý<²­/mÅ  k7½!WðT³l ’Oº’Õ¤Û°tBX·. d¼¦êW¾áùùð®;Ñò ¾‡¸T½/êÐlò²6cO³Ñ9nhl¨Þt†7V–oÎ;=C:­ÒáäÑUßEļF6Cv.º|¡_’"ypÓrO%<ËÆ ù”¡+ù¦¡ó_}ðz½á澋¦£gÐ9Ûá‰÷ï§W¨_ù†ç磫9¯á6ï•–‘´·PdúØŒýœPÞûTOòÉ=ŒaN+‡t8yôÕwÞØ=±CÙb!÷ûqÓ¤4ÉCò)CWòÅ2^½}°Õ|€ò6¯8e,…÷ï§W¨_ù†ç磫9³í2bWí-¸%óŽ–ƒÕ°ô=ÿ<ˆ12^5E_:ÃaùäÆ0ØßÊà½y–O_}çÇKïXÌýh˜�^y_a!c‚ÜïÇMoÒ$ɧ ]É×m8;Íýd¼¦êW¾áùùð®;Kå›ÁØãÿŠúÈfNë¯pƸ¦¢±¡>úÓ¾Ë'ÿ0†A:­ÒáäÑWß ÃVU€‰gCtÛ­U·3Ëý~Üô)Mò|ÊЕ|±6¼‡üê›ðÆ)—Ãû÷Ó+Ô¯|ÃóóÑÕœ“46ÔgµëŒÖHå“wà Vépòè«ïDãµ"+ø³åÚ†Š…rUò¿7½!WðT³l ’Oº’oê/¸^‡^„qûԷ蠘הBýÊ7<?]Í9I@cC}V»Îh étú!N}õÝ8z:ïEy6,m/Æü‹Þ‚r¿7½AJ“<$Ÿ2t%ßDO7Ãb±D´f‹Þ%·áCýÊ7<?]Í9I@cC}V»Îh étú!NžÕÑwÒ8×Hä~?nzƒ”&yH>eèJ¾¸1¯o£Ò6HÆk ¡~垟ﺣT>ê³ÚuFkH§Óépòè«ïX¶áN4T–JCÜ¢â\#‘ûý¸é Ršä!ù”¡+ùbÞ¼^Åí/$á;ðþýô õ+ßðü|t5ç$ õYí:£5¤ÓÄJðüŒu5¾âÔye-2Î5öwrà¦7ä žJx–Aò)CWò ³ÌƱRãÀû÷Ó+Ô¯|ÃóóÑÕœ“46ÔgµëŒÖN+Áó3ÖÕøa«,B-º¬£ÓªxrÓ¤4ÉCò)CWòͼ‚÷UŒÄL¼/c„æýûéêW¾áùùèjÎIê³ÚuFkH§ÕdC7/ãÎÄlèuˆ¹Ç°žw`*ôryf1ælzY»=˜_ûú»Ðj½ÇÐtèwR ÏÏX_ãkÏÛŽcoÍÏè²Ûa_l¿ã¼ù.ݼ¦ }) |ÊÈ«Tk¨² Âï²¢º¬—/ôþ¿Ÿ^¡~åz>É£´ï¨ïÕ‡÷>]íò‘NG€×Rì“%mÓØF¢ŒÚ˜ÌaÂV÷ª¯ÃíŸÅÌ3öd¾‰¼² ”›pß'­³› ˜ü¼Â³l ©|ñKåÛp áY6ɧ ]É7aS*l^ µU s]6ÊÛ¼I§ 'ƒú•oèù$Ò¾£¾WÞûtµËG:‰h¼Z¢ìÌ…ˆÜp¦,¹çáŽ]¶OÊ$u‡ÐÔ?r3}ë‹/Áx ùŒöð|ªàùëk| 㶱njF£Ú)‹3æÍ¼ÜïÇMoÒ$ɧ ]É7õÿZGàõbÌÏN*ðMŠÿ Ãû÷Ó+Ô¯|ÃÏó™ƒïÑ#<‹¾H^¢§'v†ðt£´ïhl¨ï}ºÚå#ŽD€`�¯$“×,|¿Cá›ÃâNÄíwOš¡ÖæB_û äBü}°<ŠÖÁD `uáùëk|½ÆøØ”¬µMî÷ã¦7Hi’‡äS†þä›ÁX¿¶V+,Ö6ÜqÆÏ4ÌàýûéêW¾áçù°[ŠÃ(:rBz }ò3l? çŒ�Á{ 6çâÀõg\³JûŽÆ†úðÞ§«]>Òé¥þدþˆ:6ŸÕÿ€ï«?DaÅôúqßïëAcñ[bßnDÎÑß04ýlgO‹óãEØGû 5áùëo| ŒõÃn» ‹å2Úº]^°ÄFî÷ã¦7Hi’‡äS†®äÆÑÛø2ÅŸ±ŸÏ·ØRÞW –÷ï§W¨_ù†ŸçÃâÃö#+o×ÒXõ¢#°ôO“ñJ¬ï}ºÚå#–6<3‘Sò>ÉËAAÑ(mìOÆ$&øáj3X™|möe㵄çg¬¯ñ%ÀﺈÒì ÁŸÏ72 ëÐ5ûF]î÷ã¦7x~0<ËÆ ù”¡'ù·;×g£ âk4µ„bMÌÿı¢<ìkˆ¹ñåýûéêW¾áçùÌbôÞ=<NýEBÒ(í;êÃ{Ÿ®vùH§#y ·y/ †ÔÝfÁJ°«`ñŽÃÙP ³ûuè÷–G-X-x~ƺ_Â�ZKß¶ yå§ñݱ2¨¿€¦¯?ÆöÚ.ŠyMºR!ù”)Ÿ0tŸVß^’­MlÃéŸúçWa cãáŃ÷ïGZÀÞÏbèÖ5ÜŒr™’UV"µ(í;šsÔ‡÷>]íò‘NGÂ’-½‡u…fx‚›ŽãuHüi‚É–Ô1€Õ„çg¬«ñ5÷[3‘k¼‹ e•þ'~tùŽ©–#çáŠá=,÷ûqÓ¤4ÉCò)COò±“ÊæCGÑØ~7\;«ûW|_Q S[èg]-0ßyzÿß ´€½W£¬Dja²)Aéû‰¥ðÞ§«]>ÒéHL9LÈÝڌٟ7^óñî–·`HxNSÃ�VžŸ±¾Æ×$zë?B¥mXü33^¿ÀÖ‚P êGnݺyMúRþ ù”!‘/n©œÈÆÊæ°Icö3‚Xkð£÷,a“5Z"ÊJ´à¢ñ#lK¸¬DjQÚw4ç¨ï}ºÚå#ŽfÞîóøÚøì£¢!𬂣¸äO0n_ X]x~ƺ_çèþ飯ÅmëçxsK1ª»à ÄÖ¹ß›Þ ¥I’Oº’OèÇ¥e1ëg…› gر˜÷ïÇ Â¼ökh¬c}Ø�³Í‰á8mââ~7½¡×DªàGïÅMÚÓ§x­J3Ѱ·.-ÅøWBißÑœ£>¼÷éj—t:ÄõÎ?ÄãbÀÕh¶¿”ñêÁó3¦ñ%…›Þ ¥I’Oú’OûúYk’È,Ά,äíÞ‚-›¹ÇŒ'ÁSa™0C¸ç&Î+F¶!EOè/ˆTÁÞàýåGXþÔfö¸~EMÎÖ´¸Ç­„Ò¾£9G}xïÓÕ.ét"ø`?U³Ûz j|FrðüŒi|Iá¦7Hi’‡äSÆj—÷ïÇsOš°Ýðòjo¢ß:ó&á¶Vã`œ,ÎKauÍúÐe1¡<o“Øïdä@ݧa¼LÆkªáGïãżŠú±­Ž)¥·ûꣴŸX ï}ºÚå#Ž$V)”p3ä†yÅ’7j|†º°—Wx–¡T>¹ïç¦7Hi’‡äSÆj—÷ïdzŽ:¼µnÌž™ÐOæ<fí ¹0Íõ_Ä® Ö²Qpä,®.,¼QÙŸ‰ÔÀÞ‹ÆëåoPÿÛ¿ÃIÖXsô-[´=Мü÷éj—t:–l)Ùeߢe1ŽŸµó0 ¢ñgñÏípŽ-·ªÆg¨ ÏϘƗnzƒ”&yH>e¬vùxÿ~\0ãBÓÎ0ÚÇC?ðÁe>Œü¬,”&|ó€ÏãÀs5()þ &K\Ã~d¼¦~ô~£]]x½^¢§g0AÝJ-4çðï}ºÚå#ŽD@ÀÛŽS§Ãd RÓ ´%bpªñêÂó3¦ñ%…›Þ ¥I’O«]>Þ¿ˆ éèC\1}‰ÓmO04^ÿ¦ßãfÇ[–À(žtY`ªÜ‡’O?A••܆S ?z€×zEGNH«ü ÛÏ3m Þk8°9®?㘥9‡?xïÓÕ.éôR„@�RSÀ´½ ·2<g1ælG‹ÙŒŸ»=âš; _Z­·àšýNjáùÓø’ÂMoÒ$ɧŒÕ.ïß#puü„zfXÔŸG›*ñ6sð»¥lÃi€½g1¯û‘•· EEEQí,ýÓd¼+Â{Ÿ®vùH§¥Ãwq¶ì=dˆýÂú&ÜJ`ñ&hƒ [5Þ«¾·3OÌØ“ù&òÊ*PZlJKvžŸ1ïú§T>¹ïç¦7Hi’‡äSÆj—÷ïÇ t}–DgËѨ؅¼¬LäTß”qóÊÒþ_Dñ;\u±ZwâkûMÜp &3K¬Vf1zï/¹Œ[V"uМë}ÒÒi5™‚³~ÖçWá\Kd¼ªØ¬wПЩ/‹y=„¦þiq*„­òm¬/¾wà5<æCiÉÂÎó3¦ñ%…›Þ ¥I’O«]>Þ¿̹±Õ°ÆÎgáÛÖÀz›*p Á˜×ùŒÅ•· [²Ëayê„eï[Xg(D}/åPˆt“¾’+As¬öuJkH§Õä5Üæ}Øi~ºtmœ ±óÞi<i:„Z› }í'kx•¶Aþ>XEë`êõx~Æ4¾¤pÓ¤4ÉCò)cµËÇû÷ãYg=Þ)4õèFf&Ç1¾ÌªüŒmMèÌôÇǧîUä ¸~ÄGõ£bƒˆ0*ÝXkâö-2݃Ö[Jܾù+ ±L.%(}?±ÞûtµËG:‰¸®ü ÆýgÐå×®özŸ£Ïò.'ä6,~НÅo‰}»9GÃÐô_°= £ñ"죔°IO¤z|qó¤Hi’‡÷¾#ù”¡T>[+#øì0mß‹º[wÃ¥Lºoâ\EŠëo_ß³œÀáåna/l_| Û[t‡a;|¶‰iŒvŸB~‚åvÖ"ªÜX«áö- âþÙrä°rG☠· Y”$Üâ¯$ÄJМÃÔ§Ê Vvkº[œo#çÉ…–hÌkˆ€ÃÃ>.ÖGzÆÉ³Tä79pó¤ä N„á½ïH>e(•ÆÖÊÏ-س>ö„Ù Û›ð$N‰9÷eìy»öª:_…~‹ˆFk5ܾƒr¬ßŽªs̘Œ42¯ ³2ô[É ~ÎJB¬Ó[%(}?±êSe„çãäF¼†ÃG[poá°w±=Æp2ú BÜŒÆÔN sð{àj£ FãiÔ›oÃ9¼rjnæâÐ|èL˜ñ=Ã#OÜ–ˆ“±§pØ{Ð?6úÍÔÂû¤Jò)C©|¼?>x…ÎÓß¡s Ò*F[æ„8h�çV Qbø\FÛݿࣵ<>*ÜX«áö-¸ÍعségˆŸŽ€¢ÍØ|Áó:ª¬çu^•6B]Òß§ ”AÆÑÛ|t¾ÄØÌ<žÍÏ}Qô;ÀÑ?Ê­ é¬f1tÓ ë_ÿG:Í=†õ¼S¡—„LV Q™…¯÷8ƒï|ž?áñ±ñ8ƒ±þØO1¶FÖàheÿGg2×0檶 E[‘¹æ'Ë ¹y7‰ Çp®áÊvü ë Ûðå…o°'øYâ‚ù{YÌ ï‹‚äSÚˆð¿€û…_j\ˆý¸›è­›¯×¸²l¬Žð‰ž!^·oéAkUܾƒè2‚©«_z`Ñ׊úËJ܆õWçu%hNI=©ìódË C�6¢æ\N–ý™ë6"÷ËñÝ×ÈÞÿŠ{¸<ÌKeÿêVþ«$ôL£Ú¦#¡ƒH™€½õ†B¯b‘’KªdCTæ£i{ jþ‰†“åØ!Ú†Ü\ø®DkìýdÿˆÞ A»ºY{£5øð߀!ïK´÷‡NY-F+¼ŠÁ¸“ês´–lAYÛKQñþDÓ¶¿¡¨å_hÝÿŒ×ÿ@¿¸Éñ¸nÂx¸n²^%°AIhõ¯ x¯¢ÆxÝ‹®OóínÓ§ø»ñìÎgð­t¢é½Œò¢Ã8i Dµ“»°½þ!Òã£Á'jÜX«âöŒ½õ>¥1¯l£§¯:¯+Áú…H-©ëódË Ìb¨õl(kæÑßôÖ™ñGk%vŠs¨£�^íÆã¸ä~z?NËÈEÙ™ úqgÊò[qŽátÐ0|¿e9™¡9<¢Yÿn35—TI‡¨ µ¢dçh™…Ðß„mëJÐò‡ûwqÝñ^¯®v_ê×Å:¢„ŽVNN<f¨{+…Ñ)¾…§0 {Ü1ç¥(o¾öTÀcÛÐtÂRk‰p3AgÍÙe>#yxuY&Ò›P …x-(Š\à–42ò¿„Í»LxøÅYyؽÄ@‰j-èO}ýuŽ™†·óÿåúe4Ö1#¿f›SfÜ”r·oh=|–{Ò »ý¸+‰O¼:¯ú… "µ¤®Ï“-ƒ2—tÓ÷ÁnÜ4^íÌž…ý‰€ÉN¾JC Ï• –ƒ�ÿÀ�^Ita¾‡ß¡ðÍaq'2_Æú †hxöü'ÁZ±q˜}ˆúw6!¿ª1*IžÖÎ~Ä/N–šKª¤CTØ>%ô1v#2˜'„½µ‘cu²5_­þ‘ŒV¾O<Ø©b_Ó‡xÇÈ’‚0XƒŸP‘Ÿ… ¥­Ëܼ²ÓÈQÕ92^ßAM·®ÆO±ïësâ�¹ˆïíÁÖêÑLWrYVÅê+àýuMà‰2vžµÃîF{ðÏ×uߌJºÁhºóW³“{ØØkühÞíÉ…¼Ý»Q°e2÷˜ñd&ñMˆãÖ~-d�×£¹í?ðú?%ÆzÑÚЀFë]x˜+¯ï î´þ"¿dO,ÏÑÝl‚±áW¸˜KWÀ ûµv8†”ÅéƒæœÔ“º>’.ƒÂn”r«:12^ߨé‚ÏuûöBSK Ìߢ­5èœàïôŽtZ) uš°¯òB‚n«x­§`üµ+ê°°MeÂØvNÏDrs¯ÐóÎ}‡& ˜ Ì.³ONÑ%U²!*Ì(Ïý“âeÆëµèö9Ѹï�¾núó?q¬¨Õk A¤ú£•ó Wè½rµ§ÛÐ?34^ç —ÛHˆÊâ¶âP­ C#í¨Ø° õÎ)qƒóÖšeÈÄ»[ÞE±"÷²xðï²ÌËÍ0ÅêIáëƒóÙÒñ?ë²âÛNæ/Â6t¨É=ÑŠù3xÑó(¾ÁK„Üuß@^íMôûB+LÂm­ÆÁ3‡ `2r>ÂçŸlÃæ‚PXz.ñøŸ *ßûmîI3aÞ“…Œ¼q¤tŒ÷GC¿” ¡²Ì0ß‘ƒìR žöµ`/‹WÊ?‹^ž ¼&Í9©'u}Ò×àºÝV(ƒè‡åÐi؆`«ØŒwX¶pqlº¬µ(ÌÚˆŒwßEVñr—é#uý»˜ÅЭk¸;u!+aÓüMýR‹l¢-QÛžx¹³Ef0ÒeÂ~Ó¸#C¯–úëËè_j.©’QñÃm©E­m�#¶ÃØðN=œ³³ð¹.£¦0†Œ·±%k¿¼RE:EýÑÊû‰GfT¹Ðan€ÑhBcë]<Iȸ•ÄiEmÙ'¨¾ôp‰!ÞèªMz]–W†—›aŠÕ!4"+ŸÌòëñ ј1¯ÇQQ°õÎIqÚy†ër±ùÀ5xµºbÖQ‡·ÖíY²fDf ^‰ –h�ç×ÝŨ¸Ñ ØëPbqcÆÙˆO͉ÅÿÌ:¾EqÓŸl¥7G°i} Ìn¿,9bÃæ¥l ~6óü©Â)ûxðç®ÆÏƒ‡ zƒæœÔ“Ê>WREðõŠ{“(­þÎ胣Y.}{JŽ‚´‚tZËž 'l?ãòY4=tG—¬õ¡­ê�ÏÄ?»áj3áx›WÞÞ1”Û&¦|Ëz€¦è’JIˆŠ0§å$ÊJá’3zOí‡ëÒ9t.“4rµ Áhåûă)§ßu¥QÙ- 9ÇоìÍk4QåvšÛ`÷²ê„ZN—åDàåf˜bu­˜†×þïy—ÏxÄy݃ƒ–>Ì‘ñ›švî€1hÐ1|p™#?+ ¥‰Öh2€ç×§ðÙ¿J¸ÜÎÜ“óø¨öþ껉ÚÜ7°©²#ro€ã µã‹ã·ÅÏ_LØpø° !tKç%uÍ9©'u}>‹1ç54Ôÿ�k·GÜÑÍÂ×ß…Vë-Ùnî‚�ö«?¢ŽäÕŸG›} \‡™3H§å FÔ\h‰¸$hÁEãGØ–pÂ&ñ3.]¿¢UxŠæ½ÿ@GÐ�í‰ÎãÈ•}xÀ`ëqµD»$‹Í5¼ÂgiI¥ZˆŠ0%îK’•Ñ3êV=œx”梨îW8üé?†{Í8°l¶áHDå^(·“±%ŸïGÞæ¿£¨°\£ÛÅõMÒðr3,öÅêé‚b^“D·£qÅô%N·=·+ÌxýÇ|üy¢îbSP—»sþ†[„Åe1EÃÛ¨´%XK5"öÖS‹Ž¡ ¸mâ¦àk4Û_)˜×§á¾ò)²c¹‰mú—sÊJМ“zR×çs˜°Uã½êëpûg1óÄŒ=™o"¯¬¥Å&Ü÷%¦¯,”¨±˜…Ýd"§ä3|’—ƒ‚¢PJá7«�SOŸâeôsœyˆ†½u ê3€—/!6û{hž|¿[ÔJ#p¶6¢¾ñ2º=âš,L ÿÎ5Xoô`H– ²F—Tj„¨¨*£c4­|Ÿx«MèÖ¾³ Gt΀!_œÈGgæ?³D4ÌÙÀýôgnÓ岜¼Ü S¬‘$C¸tgyeîñ5œw¬ Á¸:~B½nV¢ìíÂ_›` Í€£YY;Qc®\ž�|ïV.‹$‹<·|‚ÜŠFÜR°P†¸ëf¹ôÍ9©'u}> GÝ!4õO‹Ãj¶Ê·±¾øÜ×ð˜%è)À¼ öÂ`(@Ý}¶ïc‡ÂUâ<gC-Ì~£sDÃó—aùs â’€yØýŠšœ­ êóx[¡„˜Û|.…¿Ê-!6,êínT·=×ß)<1ïCfF>ÊŽìG±ñ®¨‰ Ý%•!*j„ÊèõG+ï'Ìðüø:G"â«Ø†óÊQäî2'fxÎF•ÛY0^}ÿ†1ÿt âNS鲜üÜ S¬‘+–ÊaÍr% ½'á:޾; ݲC\€w!/+9Õ7“H8±Æ¸?%X*gèZíË&øñØj…cJFßkå†Àk`t•¨DjI]Ÿ³CàC¨µ¹Ð×~¹ Þ þ>XEë`"f�¿‡u… å@Œ×!ñÿ|ºÊ“NËž±b^ŵo[C‚sî¬v%ÄØ½¸9xI%ˆ{ÒÊMo¢ØÜ‡�'—Tj„¨¨*£g4­|Ÿxˆ ¿«Å›²‘·›ðìÀ– ñß1lƒñþH‚Ÿ=!NÌØZÿAµaJŲ|m\~s« ©vYNn†)V‡HïUÔÔœ“ÞŒ]<‰âm•ø>2ù×5†ãèÁœ«[ ;`ì|Ö•Àz›*p@aÌäª&Â]WV©œ„’qVÛ k¾GðlYX_Y©Yß©%•}vù݈œ£¿ahú/ØÎž†Ñxö„’Á˜r˜»µ!èþ9o¼æãÝ-oÁpBŸÔB:-Ñx½ü êû·ô’Àчá„û4œYøâGFØþú/ÚkóC:7¿ÛŠƒ‰†jyI¥FˆŠ¡2:FýÑÊù‰Ç<sð{ºq©î0JŠö¢¬º­½¯äT°º}?ÔÁh~€Ñ€ø³6£ ê<ìZ×íK‹Ë²\Òu3L±:D’L  ÿåü f˜I8>K8…ÅM¿³xÓ&ÒH˜Ç8ÝÂJHºTNäÃ…¼Y ãÅp‘–ï+›[‰fÇPBsvnXâF/Vl—¤Ed¥Ö4礞”÷yÀ‡áaŸ‚œix»ÏãkãO¢ÁËüó‘UP-nÎ_*øLí –C�Cw.¡±Å¢à¢@Ëy1â’Çð>Žvx1í¾³ì3›í zÀhxI,«7¢"×P*Ó|_¦—«>Q´ò~âD|èI•ÊYQÎS¥,6DCÅI»ËòJ¤óf˜buˆ$ñÞç—$~Çëý/ÚªsCY¨WFðÙaÚ¾u·î†O¢»oâ\EŠëo_ß³œÀaº…•t©ÿ x^Íÿm8†(’tVíHøZ;7,q“7¶+²…²R‡ÞÅ34礞Ôõyœ1á%zz”Þèˆë驪`|oNËA‹­çEqŸï{…á…ÑdÐê’Jòz» ¥ìÂ0ôzµ¢ÁhåüÄCThå¥r|p],‹=’¹ÙT^Ôð¦1.Ë Ö›aŠÕ!’$ž jÆ.Ô¯”¤)„ðÜ‚=ëc|FT3loÂ=X(©B…R9s®°»¶ ¿,øh(ÌLøðA;7¬Yíb»ÒÓc"µ¤®Ïã܈Ed¼×p`s.\—H'ö>k¡rÃÌY(“‹H5. ´œÇñÈé]bð /œèRhÖ©qI¥FY=ÿ#\,}'v‚RÃ{¨4ß_Ões4­Ÿx¨Q*'xû¹eõ—±p¬ýlDÑÖ 4²?ßpbL«‰9].ˉæ›aŠÕ!’BÜŒëoâþÂi°9ñtÔgs‹Wè<ý:"ooc4E®x«q½PZ*GFWívdD¸Ñ>Yµ_4~Åsf š\‰8ÅqÃ’±8-o²ÒÍ9©'u}¾ÜX( ìŠÆ+3nò]ö-Z"÷H–ó0 ¢ñgñÏípŽñ³ž’NËA‹-sx`-/Á‘“‡/l]¨Ø…íÁ‹Ÿx¯ÂæÍ‡pÝ+õø £á%• eõ‚žBÙe¨ÌÉ!¶Ÿ{±5˜ÙÞŠÎDóøè F+ç'̘RZ*‡År´ŸÁéÛ^©bˆ†›é³«HKÁ5úFÒy3š _GÅêÈÞ$R¬Îš#0±I¥)Qo:ω‹äw¸êb.òâkûMù…Ç×"jdùe™ío7ÃXQ*n²÷¢¬æn÷O$<î…1'n° €ÒÂñKPã&‹/hÎI=©ës5nÄØAP;Nþ-ÊðZÓ ´Ñ!°ÞQ~Qg^”´dc^=°o %ej-èŸKÀxÕò’jè¬wG£æz™ÙñÏÐ~ª·£ìªYÇY|Öú<ôjõ¢ÁhåüÄCR9¬Ðÿf³Òr@ÉN—åIÛͰ–›DŠÕYݰ‹‹¨S`xÎ'Ú€¬¼mØ’]ËS',{ÅÅÝPˆú^þÜ͹A­,¿J `5 ÇÇD›,¾ 9'õ¤®Ïg1tëîNF¹Ç°žw`*ôryXæÿv´˜ÍøYaæÿTA:Š’z-7/F¶db^‡q¯»_Ô:%ˆ{�­.©âfÊO<D%xØÚr 査U>lÕš¯\Ÿxˆj¡¼TŽ倒DÓ¾Ñ”Ü «±I¤Xµˆ†g0Ûð6æÕ!`¦ï<>>uOÜè ¸~ÄGõ.¤«U²üª`�«Q8>6ZÆv¥šsROêúœ­£±jxŠ-áÐu2ÿ§öýˆT¢å¼èÅ-«“Q‹ÇÜãk8Ÿ` M/©"3å/´`i¾C gÇ×î°Uh0Z9?ñ¢°T3 •–J­ûF)é¼Vc2¤Xµˆ*†§à…틯C›»aØŸ€mb£Ý§ÖDÑðdQ#˯°…ãc#ÎKw~€ÉÆ;C?|ðô°¸êÇÖô@OhÎI=©ësÑxµQs!\vÊbiÁEãGØVqŽáDF¤ }R éôjÂKQFð™J›AFøš†—Tj”æÓì°Uh0Z9?ñå»yé®$+%C–|j”J–´º,'@Zo†Õpw¢X5‰ †çœû2öǼ±U¯B¿E,A…,¿ª”¹Q£p|Ln²þ†Bão¡$TøÜ0–ÃâÕß6ƒæœÔ“º>0õô)^F+<«°·.Á[S5ú¤ÒéÕ„Ö#.DîA-Í0ïBEó '¶¨hwIåmCƒÅ)Mäèq¢­&/áìøÚ¶ê F+ç'ªÈ§F9 dI£ËrB¤ófX w'ŠÕY‹¨axKåä†hÛe´Ýù¯.o×R;0R˜åWµ27¢Q))¯l^ú %'kP”¹™Eߢ+X–m¡ ¯Äʤ®ÏE}ýåGXþl®=®_Q“³5á[Så }R é´Ä9Û÷jQ7^Œ…³ò ~/œöÿÀ™ÖÜ+><íŽú÷Ì8¿ÇÞD÷ÉZ^R©PšO»ÃV} ‰ñÊõ‰“¯¢gÌ.1fÊr¶%._ùÁ«¨P2hÚ7*Ö›aqÑUìîD±:k‘¸†çÝ¿d”I™†÷έ%³µR4<YÔÉò«‚¬Ìx­ núÞ;0‰úÌ=0uý]d¼ ’º>wl@ƶ†Ä³¡2%ôI-©ëßÕÀ,|Žo‘gxÅ'›Ðœ«Eã°ÿ2lÙ8¯/†÷QÝþ,MÏÞƒ_ZñgÄá‹×놫­9Æ÷É^Ryc•æëÁãa9¥ùZ¶ê F+ç'˜Ä€'*1“0އ Exso ÜüÙ&RÒ鲜é¼VÃ݉buÖ$C7a<t>Ê𔙺~ OšUŸx"l¼Î¿|Ž.Ód®ÛˆŒŒ}d¼ ‘º>õõò7¨ÿíßk±9ú0¼Šç/Òi9˜ì<¢&×|ID†¿õùoˆý¸ÜO:`ÚU™„‹ø4ž_½€›ŠB´âyXn¶ú? !chtI¥Ji¾µ£•óX/Ðyê *›{88¥_‰tº,'@Zo†ÅEW±»Åê¬ITH]¿Ö‹†'‹*‰'Ô¨›§Ìx-Ga ®Å“õix;¾Baf)¯DBhÞçÌ ±ù(˜~ƒ{È çÿ~6¿ Œ¢ßñ�ŽþÑÄÆ¢N!–;ä¯ZÌ1ÀæZ·¹ë×­Gvõï¡}(›÷"íV€¹÷Ü8‡cEoð®Dá¼èÁec#~»qø"6Çã¡pÒ¼”ÃöîpèÀtx§àóü O0þ Æú{`w<Å…%Œ&Æ+×'ADequÀ\Ïâ/’,ˆŸVÒ䲜i½f“¥rw'ŠÕYƒ¨‘º>°¶‹†'‹*‰'T8|"(¬q¾~ {ÇÏ8UýÿÅIvÐXmvF_<Ç+nXhÎI=Z÷y°\؆BÔœkÀɲ¿=r¿üßíak!Ko¡¸QüÉA:-‡5‘ù‹ Öe@ëb ÌqØÕ0»_‡^ÇBÜ‹?é‚Åt�y¬d¥h'ä•…OÖárÆ+Û»5:SÇ yþ‹ÿíñ‰³¯8ÿŽ=…ÃÞƒþ±è ¿)„í·g¡ æŸh8YŽ™rkpá»’`Ü*Û§fÿ(¯¶ùFã•¿Hê¨E+å’±EEØ—…õ9ÇÐL¢‘ãxäô"zK#¼p¢'jãºöHçͰh¼ªåîD±:k R×&à¾{Ueãg•£Fâ 5åH¾Vl<Âb™È)ù ŸäåˆkÏ(Õ©1@sNêѶÏg1Ôú 6”µaÓèoú�ëŠÌø£µ;×àèfCm7Ç¥e‘øðj‰n0ÜóôóT(=é´LÙ¿Âöòsè躆ú’·ƒsÛΠ1»\ñÀa©FÎvV~.ô–%ˆzfþlÞÏÚ‰# WË( “ã—}¨Ç¼ævcCÁ1œk8²÷ Ûðå…o°‡íGÅg]æGhìOl=P›¡V”løm#³ú›°m] Zþ°`ÿN#®;žÌ{¨¶›pøR‚µÍý/àyµt‡* ÷ânÿ|âÂÕŒj£•ëHæ¡që&äØTÎ`¬·û$z3èµ¼GN² j¸¬Ø…íõÅO›÷ú!lÞ|×O¡ÖéºÿÝñqD—iZíТ«*¤®×ÒøYý(L<¡Âჵbcónó^ ¨»?̾i(Ëð¸(_í 7|BsNêѶÏç½–æç:¦Ÿ[‚Æ«ÝbŠp eqŽ&|•¨øyÖS0þÚ%=H¶w¢©ìCÛîÃ陋H§eÂÖ»¦OB5ýÅ=umû|°º­ ‡ˆ+ÔÄLÀ㸉sÇö£ø€ –.Wð¢!9ãõ9ZK¶ ¬í¥(ÛŸhÚö7µü ­û?‚ñúè†Ý„ñp ÜJöˆ7®6þ&¿ró …N²løÌ5ÚÞ‚ZóÓðÚ2Ù‰š¯Üo°[ãtKÆ—w›>Åß×`w>[Õ‰œT­œŸxD2ûõï|1!‡ˆŒÉ¦06¾Ü†ÂKñäí.BQQT;hAÿÜZ7^SÌb¬ÎïðΈ“á#ŠÕ!d¢Bêz팟Õ*Ù†U8|P¥VlL˜‹Ý{XWh†'¨ ÆëøÿR.“À­Í9©Gë>ŸuÖ#·ªSÔÖyãõš.ø\ç°oß)4µ´Àüý(ÚZƒÎ‰D<IæaÉ\º¤E<Àd"EÀl`VüïüEEd©œä?g¬]*KöáÓ’c°Êvf!‹yóóiÀcFŠ,°ÔZBó.c5g“Ƚ2¿·7ÎC+©Wd7ô7 ÃlÜ/Ð9Éö¢ñúF-º}N4î;€¯›~†ÅüO+*Du¢5áã†Ê,42ò¿„-aR}¡ÒhåüÄ#a S1vÖ]HSÝ…ös•ØZ\ßÙë{-8zøÚ2·°Ã¸×ÝôÝ¥è=fW](V‡]Ũº^;ãg•£F¶aÔ«€)‡ ¹[àóyã5ïny+”@·ò4ç¤Íû<ÐˡӰ ÀV±ïÔ?Ĭ0—µ…Y‘ÁÆBq¢›vÑx½|MÝÒ%oÚª ÑñLü3KäiÂñ¶¨šði‚tZÓp·~=eµhlíŽHD§Á|ç“È6<gý‡¨êa“·h¼¾ƒšn/\Ÿbß×çÐb¹ˆïíÁÖê$¸"ˆŸ3Š']˜ÊóƒîÍë2òQ^w'×ä¯,©•¥µ¶ŒØcÃ;õpÎÎÂ續šÂl2ÞÆ–¬ý‰'ªòþŠº¦ðHÆ—ÏÚŽaw£=øgë:ŒÇobˆ‡¦2*VÎO<"ܰìÙÞÜÄk†ÝhzïÄ‹[V;¢ÝSç_ÃùD7JI£FÌîj‚bu˜¾ a©ëLJàêø õ‹ uäÅékfü¬nTÉ6¬JÝ<AÃZ±ÓðvŸÇׯŸ`€£.YGqÉÉ7RМ“zRÑ炯WÜ·@iõÏpF‡:̺péÛ;Hì8i¾GðlÉ™º®KçÐL|8ƒ‘ÎãÈåä`tZ>‚ÎŽK¨«Ü‡’Ê:˜mxä„‹ž£»Ùcïp1} xa¿ÖÇP2{Yqþv[q¨Ö†¡‘vTlØ&®ÅS¢N?‚µæqÎÄ»[ÞE±Åúý˜ëƒy×›¢^lçêÏÑpõAè’h“cIº¼ ãpZN¢¬ôXŒ¹?rl$€¯ÎgKûiÖeÅ·ìŠOì‘ÔäžÒ¸ÊGzPi´ò~âÉ&:ÏÂÔùTrZ±´-/£²!”)3ôkZ JÌnPãÖ<&óîI«C(BxŽ£ïÃÀ\m¶ì@QÑ.äee"§ú¦ ·6-ŸÕ‹*Ù†Õ8|ˆ¹˜Á‹žG O®g1ælÆ€Y»=â'ÎÂ×ß…Vë­$7i釿œÔ£¯>c¼ /ÑÓ3ô˜2d£œn^WâÚÇ’4Ý8‡šÒ"”kDk÷|üj|æÃ †,äíÈAv©OûZ°—eáÍ?‹Þ¤. ĹÕiEmÙ'¨Ž±î† »D§c%â€É‚.K<«ÀxU“•Ö«`vã d–_§›×øèàÄc‘q<êõàõ¬ôiÊËì¿—²Z[3ŒÅ»PÑü�ÃZ*Š*1»©Bå[ó8P¬-ºJ™s5b«aŒÏÂO`½M8 ¥JìæZd1Ñ•‚lÃj>x/£¼èð|)›Åv{æoÓ…g¸~ ›\ƒWÖПÄ­ïU_‡Û?‹™'fìÉ|ye(-6á¾/‘y‰/hÎI=úêsv|EGNDŒ%±ü ÛÏÝç·)ø }–Ø×Òiµ÷}Ã.t·žÅ‘¢Ýø´õ©ø“X°K¯l zÝL¡¯© §ìãÁŸ»?Úü°PÒç0JJÊPRÕªÉ^V+®Wâ[Q§×^‘¹^éG«^N<ÔÈìÃÓþᨠWÀŒó{ì5ÞÿVCT‰ÙÕÍnÍã°ÆbuFFFàr¹#_òa ï,&Ô 麺bD5b7×,ʲ «qøÀâf‹³ò°;: _Ñ´ôa.iã5¢&¢0[åÛX_| îÀkẋ(a‘º3^-û‘•·+j,±vq,Þk8°9®“ñª?f1ÔÞŽž<\g{®ãŠ;¾w‰0ÔŽ/Žßž÷V×ÏÇm˜ ¡›ãDv‚¿VM¼e¢Ùz¥t0ZÕ>ñP#S°¿4´âO‰qà šZä„Rak†*1»¢é­y|ÖR¬3^c>s±}öÙg¡ß"ä øì0mß‹º[wîâÝ7q®¢�Åõ·‚¯ïYNàð2†*±›DR¨rø0ÚƒîÇþЋÓð+ò²`îq‡Pks¡¯ýrb Ù&èàQ´êO3Ø\C¤}õù,FïÝÃãÃ÷x€tZìpâST—\I»üt™DÓp_ù4Tj'ªmúG‚žrZ€ºÑ\÷•¸}ŸÀ^ÛqíF†­â'«á¥o½Z#èj´ªsâ¡F¦àx1¯›°­þhëì FÌ®–p'°"úˆÕùŸÿùŸú7KÈGxnÁžõKû3º¶7áIœ5U•ØM")Ô8|ˆGÀnB©¹OÑÜÅê 7³ìç‘sT\æÿ‚í,ËöDtp DjI]Ÿ«‘´0Þ!p$jÄ“«é´˜ñºRxk%˯3xnù¹ÿŒ¿cÝ Üuû”­—œ7¬âç]E·G4ð„ ôß¹«Ã33ú YïcÇ–”Z¡Ïò12×½üú(2ÕðÒŠ“°)yáú‚ÓѪ݉ F¦`.ñÛýÐ&)Ô™‘úÍP#f7Up'°"⤬ƒXX·¯t몄Wè<ý:bE´a_|#FØM")Ô8|€ÿ.–¾CŒ÷­3¼‡Jó}e%É> /§?:‚õ ‘ZR×çl Tš´0Î:*iñy@:-ñùþr¶ñȃ7,%už‡ õ¬ãiÊ|ÿ¿ëøáÊ»8&{À1 [ånT·=÷äSxbއ̌|”ÙâDCû‚ùeŠæÃ=f\húøاDAÐøÑwp*8sT'Ã~¬˜Wi ‡C®>ø­ZžxĽ5•“)ø5ÆÇÆ1š–Z«jÄì¦nâVDœ”u«}ûJ·® ðõ¡÷é䲉)‹Ý\“ ÝõîhÔXòã±Õ Û,$„òÇ`Þì2Ô·D܈ígã^l ÞXqÃ9B‡"l¾!RKêúœ­J“.·ŽF¶P|^è]é„}/"QÆÇ£.ä¯pÌ:PWÜŒ~Q>a¤•›ÞD1óž‰Llº" Ù¾Âñ`™;–tïÛ†í‚1ÿ´¢ð@U¼´âƼFµ`8dè=«ˆÔV9¥R4<ñŠ3§³Öª1»Z¢å­ùJ¨Q’B?±:‘·¯tëª5~Š™VÄE¸hqSÙdÔÇyø óÔ>ð í§êq;ê€bÖqŸµ>½"ìù©%u}.Š“RÌëš"0 W{ ׿‹ò¦.¸ƒyGÆÑ]óùòÆ«Vìì##lýíµù0l:ÛÈ ün+L°¤äÜS\ÙËÇ€MU2Ê~ÆB /-óêz¯ýëØ%•—héGãÑšl©íN<ØiâLÁi­µªFÌ®†hzk¾j”¤ÐW¬ÎÂí+ݺ*dŸb¦o+ª«Ñy xшÒR#¬Ž¡Är5ÊÜ uàRçK¢B2"‘^²þiqµÓ´ÑO=©ësѨ¸t ÿŠVLá)š÷þ2’ þدþˆ:6“©½œBH§ ø1öbáƒyMŠFU3ʳ÷-c¼jyÀ1 _ï(Î4`á}íðbÚ}g™6Û—qSŽ ˜u*¯Kb³¶Ý çJQ襵h�‘ó>ÿd6|€ÂÒsèUE>¾Ñf´*-•¢å‰TÈœÖZ«jÄìjˆ¦·æ+¡FI ]Y~Yã™ûÒÊÔ�ú_FßgOÂÙP‰ºDç45ÊĽŽlrÂKVÂû©ª`¬“Þ`}A¤–Ôõyœ50"ïÃìï¡ñð~7âå…“”e"§ä3|’—ƒ‚¢PÚØ³¤”"N«ˆ¿Ö6tÚcX¶q&`ÚÞ†[CJ7‹¾Wö%²©Å¼á5­òUFàêø õll%q°#¸ÍØixùuw1*öqÀ^‡‹3ÎF|jî×FfŽP´ªQ*EÓ2§µÖª1»Z¢å­ùJ¨Q’BCW‚o„©5ë‚“V¼mh°8#ÅæyˆÖª\d$š¼BÃïUÔÔœ“¬9–‹'Q¼­ßGÆÁ^s$^²€�¿ë"J™÷Ñ’y›¹†™ã©X0¹‰Ô’º>_n å}X1iák¸Í{a0 îþ°ø‰ ñãp6ÔÂìÖâ`_¤Ó©G¾‹³eïÍ_rIÚrYŠecŠòÒxqóÒ]LD)¸*E t}vkºe‡8®v!/+9Õ7—‰#—ÌѰnÏâ%Ú¼ñú>ûWÈ_¥ù4­ì´Ci©-O<TÈœÖZ«X«kpN’T¤ÆÒ2­r7U é­ùÊ(/I1ïÊâšÔ»¡ª¸àLÃÛ}QÔ™ïpÕ5.Î]âkûMyµÛÖ"ñn< ù‰— P#éSÜàÏ—#&Ì#$ÙeßJ]£-ça,*Ò¶Ã9¦©[Šª°çC¤–Ôõ¹îœLçßúÅÚË ÆëøÿÒ½ R étª™‚³~ÖçWEígÅf½“`I¦x¨‘—F»‹¢9W#¶vÀØù,¼¯ Œ ·©MØ4õ�u¹;=�v#²Þ}Y —6ÁŸ®^4­É–JÑðÄCÜP;oâ)J(”ÎZ«ñcv?¬{ qÙÐ<N –¤Ð›»¡5\pæëÿn@VÞ6lÉ.‡å©–½¢ QßËßf¼¿¢®ñ7Éa¢½ë"޽†ç‰ÎŸj$}òÞ@c«+jÿ/ÚªeÜ�Ç„­1í8uú·¨8yqƒo:VÅîq©‡õ-‘ZR×çjä}0å0!wkCÐÍxÞxÍÇ»[Þ %ÏáOçI§S »ß‡æ§KççÙ�mUÉKãµ¢gÌ-Ὤل²œm2’»ÆfÖYwvÂD–Ê&Ç1¾l'°u¥ ?|m‚Ùþ G²²v¢êÒÃ5±OMÙh•W*EC×Xµ ³Ë&öÐŽØ1»ÿm­ÆæDcv5EË[óDÿý1:Ì 0O£¾¹ vï” YôçîD(G œà‚´­ ý‚€™¾óøøÔ=0Í ¸~ÄGõ¡?%EļñœFS)J.Ïå÷šNúÇ�ÎØ…zE‡¦³ºy#ÓËè€ÜÒ@é…õ ‘ZR×ç•ò>0O”óøÚøì£pÔå#«à(.9™W N§qmùŒûϠ˹Ÿ}.îÉÀe%nê䥙Ā'ª4š0އ Exso Ü "ŠŸ¦í{QwënøÀ¶û&ÎU ¸þVðõ=Ë Ntý[ƒh0Zçe¥R´;ñP/¡ˤü�WMâDžŒ‘”,ñ ûÈI4[²¦hyk¾2ÂÐo8š³QìLl)Ø¢ÝyÈZÿ>ªÛŸ%xs¢?w'BÔpÁ¼°}ñuèVa¶Ã'`›˜Æh÷©5ƒ’4±n^ï·£±t3Þªs$fô«áòë½cý͈<¬9ñtÔ¯p^g1„+ÕÍdM?î^L^"µ¤®Ï™¾®þ¼l_ÉJÌ-4Ö¿ fGh ËQ²;Fˆk c^µÊK#¼@穃¨lVæ…'<·`ÏúXß[Ú Û›ðD¯LcÔŸ U¹ÙÔîăMÌÊ E¤áÎØŠ’Ï÷#oóßQTXŽÆ^­O=¸\ׄ-HÖ:a>z­ÏÕŽ¯M†t&”òÃÕX�ƒø;ØMlšöU%˜°IîN„°C6e.8sîËØ3)Ï;¨ê|ú-b qn< [áJ‚1“>9ÑV“—¸Ëo`c¾ÿ£AÒ.v“eDÍ…ˆÃXK .?Â¶Š³q°V\Kô–8ͰçC¤–Ôõ¹þj´&+/9ßD6*=—„Ák8|´÷$ûYÖ’ÉRAZóÒ$Â+tžþëU¬¦ ümµ£þl¨U©•N<TI($ôü3C4’L¸?:#~7;Œ%xg¢áÓŸáÖt÷+敉Ԅ¿—¶j\c64¼5_–� …Kb(f"Jå$’8L_îNOSs+иhŒ°vmwÿZ1(Iãý&sOÔÂ-3_€.¿šÕÍ0õô)^F¶^ì­K°þ4_°¾%RKªû\O5Z“eáÆ5²±Ÿ©â5Ƽ. ô,yiVFs¢ÍlÆ%ë]xf¾'¸Óú %w”³a:K¥$€ …f¨{+#l$-¯¾§à;ƺyý7~oÜMoÕÁ‘öÓR-oÍWb>Ƿؾ³·³IßGwû¨ØZ‚úß»`9z<Á[XñõÁù,ú¤p¥äDJº ã¡óQY­õ˘‚ùÄMÌBYƒºÑÚ݇1YÆk,—ß<NÜåW»ºyxiFëÓ¨S߯¨Þœ«ËP„TRDjû|­$-ŒuûJ·®©C3=FàlûæK­èöøÅ×è¿s VYá‹2aCå{_ Í= aæ1Ì{²‘÷1Ž”î“‘a¿—î,Ÿ[&Uázé@ýÙ0Í¥RVf>&wiB¡�üþD vW€­õE³A„¯YocKÖÆ¸ÆÆqË5äâÀ•¾yyxC­[ó™ÁsË>¬î›%í loz¬ÏXïe”ÆÉxÉ3„g¸~ ›\ƒ—ƒ9zM¡FÆÛ5‰®‹eÈfe ûlc5ïXøÆ:pîð8ÿ Oð�rcý=°;žÊ2€µ«›Çbcż±­A—L~"µ¤®ÏÕHZ8Ÿ¤ìÎÄr§é|ìEÞ¾Ò­k*Ñ29æ0l•»QÝö~a OÌû™‘²#ûQœpníò·Ì:¾EqÓŸâž`#¶#Ø´¾Dü¾~I¶á‰»ßˆl©×Kêφ<”JIÑ�=Uz îD7;çèþ¡FóŒ¨ËÚŒ‚ªŸÐ3úZãMª—M<Š<Á÷¾À°O§7‰j3q§MôOtÓq‰VqVvÇKžAÆkúP#ãíDlEé›{P׿Ïùq)øÑk>‚ƒËe[ æWÈBAÍ?Ñp²;2 0äÖàÂw%È -Ü™Å?&îò«YÝ<Ñx½ü êûwÄ­°ØœaTq<mêˆÔk¶1Š|M·UÚÃú<5¨‘´0ÞMtKÿÁ^äí+éq*Ñ09&óŽ,nF¿ø¹ÂH;*7½‰bs‘Ù†WDÃ:¯OÎã£Ú[ø«ï&jsß}Þ$ÜÖêå×¼Hâî7*ñ}dÝÜkÃõÒƒ³ás\«©Æ¹¨›My§Zf¬uÊ¿Ð6"§òbYƒEùo.­A(¼@[ÃuñoµD@ Àñ!@Z™Å˜óÌæK°v{0Ãnfú»Ðj½ÇɬT`´Ý.èD¤52Þ®Aö¯°3x -eÅSè¡V”løm#³Á˜ÿmëJÐò‡ûwqÝñ¬„˜«Ý„×uùUž´+6âçŽÃ÷õCø?ÿó?1ÖÌù622ú-B+X?§5’ŠÆ«Ž’”±WºuM5&Çd›aûë¿h¯Í}Þ ün+L×p~…u0äÔ¢chn[#ŒÆ¯Ñ¼Ä+4k|¿¡Ál¨Æi…†kƒñª[PV)¬¬ýlDÑÖP²•NŒ-ûoˆò•ä"¿¼ –°‰mNF¸Xž C‘Ec㕈‹±®Æ{Õ×áöÏbæ‰{2ßD^YJ‹M &FáÜÝiè¬wG£&7Š«ä52Þ®A÷Oø¸¶#‹‡â|:öWªv`×r±¦Ìm*Tۚݒf°ò öÔF&l›ìDÍW ö}Ì"uÆÖjˆ!dêÒ5y]Ш%´‡õuêPš´põ%)#´@«ä˜A ïãh‡ÓîÛ8Ë›íMèõÎ߀oXAÂ(ï 4¶º¤û ïÑV»&öš¯ÊO+´ÌX+–ö38}Û+UJѨ5}vC¡—Ë3¯Ô3¢Áj>þ5.þRÒìÈ,ü5gn'ø«•tÖyen(‡æ3] ƒ°U¾õÅÌüuD¶á•àÜ݉â*ù%Þ³‘“ñvM⃫©›Üá ¶ˆ†è:r¿Âýå‘XfûÜ/Ð9)»Ìx}£Ý>'÷À×M?‹kÆ?q¬¨Õ‰–)ÒlliÛ•Zbݾҭkj`}­Äut•%)#ô†¸.ø^©"–²ü- °Æ÷̆jœVh}â1 Ÿû®6š`4žF}s[®Â‘ˆƒ‚¹îž£Ë´'xõ¿¾èþËsLoÊÐðÖ|EXÑëC¨µ¹Ð×~¹ ±jþ>XM0Ã0çîNWÉ/*d¼]³“ðtÿŒºÊR—¡ºþzƒ^-Ëá‡ÛR+Ž÷ŒØcÃ;õpΊs»ë2j ³aÈ`Iôö‹Fb‚›ï/¨(3Á¼8¶Z`>SŽœÜJ…cKÃØ®}ûJ·®©ƒõ·~ˆw¬ß$eÄZd~ï¶‚†ÄÜo8ñttmì7R3ªqZ¡Ú‰G„;AÆV”|¾y›ÿŽ¢Âr4ö&êªàµêc|œ· ë2÷ÀÔáÄÛLâ†Ë k«Úz›§óf3ÒYçUT“E÷¼È9ú†¦ÿ‚íìiqâ¹UÂ$œ»;Q\%¿&06>WÇO¨×i\cÚŒ$×oÂ8œ–“(+=ÃÕÌ×¥sèLhÜ‹ø_ÀóJjè > ·`¯å©‚ìäÆv¥ÈÛWºuM¬¿õƒh¼®‚$eÄZF [ACCpÞø_¨3~‡«.&Ï4¼ö›k¦V,dz¡F'B?Ì;3`È7á>;Ù_¨ÑÊŒ“O†;¡€Ý.¾‰ìÒFÜ_LRôR«Æ1¯é¼ÙL„tÖy ðaxØ—ä�æÜ݉â*ùExŽ£ïÃÀn¶ì@QÑ.äee&PòeÃq¿ C8µ¯ ÍŠ7+ZÅv¥ž…ÛWºuM-¬Ïõƒ€Àp/nü/qÿÖð+\Ì+-à…ýZûêIžH¬nT±â B½þ¹'MØnØ€¬¼mØ’]ËS',{ßÂ:C!ê{W¿[>§³¡†'Á„M(\Hê± ¾Ø:áÚ—MW1°dc5…§Ž?¡­Ú¤÷f3)xŠXÎÝ(®’[æ\ØjØcç³ð­a`½M8húû5õA¬ ›çSÃ|áYôA³ð==‰Æ~³žÝ0²·#Ù¥<íkÁ^VÎ*ÿ,zÉ…`°’“ÍZpŒã‘Ó»Ä[FxáDÏP‚GüªØ qP¡^ÿ¬³ïlkB¿ `¦ï<>>uO´@\?â£ú‡¢µºáÓxÕòÄìÔ»�[Ňt¾dŸÅb£6ʸ¹ ż¦n6W„ã8áÜÝ)^\å‹1øév/­“ŸÆ0‘%_„ÉqŒÓs’@ýF+“:ãU\­‡QtäDÄÆZl'?CÁö³A×wA\‡lÎÅëÏâ¬ëSpÖ`[°ÖúšªpÊ>ü¹«ñsqƒ>5ÿkÄFˬå%8r2BÅv²b¶÷þ3ð^?„Í›áº7: k5l…8xU¨×/xaûâëPØÉ0l‡OÀ61ÑîSȧlÃÉÀù‰ƒöüP£ùFâ¿•µU?éׄK\Ýlr'°"œ»;±¸ÊÉ¥z°›PÊŠp‡^©GðÙaÚ¾u·î†ºoâ\EŠëo_ß³œÀaºM”@ýF+“RãÕ²Yy»¢6Ö¬¥:ãU×CíøâøíùMþ„ ‡Û0B·Î’”Z¡å‡–â-ÈÛ­¿b;hAÿ\"Æ«ˆV¶‚ õúçÜ—±?{CØûn±½ƒªD3ìë fCÎO<Vßljzk¾kÀÝÉÿKßaÉ„%6Ã{¨4߇—b¤á¹{ÖÇx.QͰ½ Oè-¢^¿Í`ÌÕsýië~DkwÆè¶–X%°1f1zï+ÚŸOÃ}åSdbŒåMÿ@çD:'@5ö „hwÀ1Œ{Ýý*¸ÎFíµÍ·áVé#Ù$…!‚ëfnƒí2Úîþ¥ƒð<åhb¼r}â¡c.t˜D¥6¡±õ.žŒ-ó}Tƒó›M­oÍ—eõ»;Í:êðVvê["', ~6îÅÖŠŠ¶â†3Ê­œH¯Ðyú;tD$ÓŠÕ’N&¶ZQ£ß|p],‹Ú,o”—ôi¨—;~<¶ZƺÓf™PÓéÔ¹¿Iæ€|Ï-Ÿ 7¸&E¬UÖ¸ëö¥YçÕØ'ÊÑú€#â0ÓXæ¶ÿÈ<ØØk¯c‰‘vÍ× ÏÜó…û@U’NÃ{çV‚U4V̆:8ñPŒ�¿ë"J£®ì 9ÇÐîÕXÆ´Þl&B:oÍ×€»SàÚOÕãv” þ¬ã,>k}zE¤ !Paî[{ xì×ÐXÇ6’ò7Â`+Jß܃º6<¡¢ô‚½æ#8˜¨»q¼dhëBõ¢C¿&Ú,Êaº˜*„¡ßp4g£øofbKÁníÎCÖú÷QÝþ,Áƒ·Y ]û ‡.Ø1©Ðsa=ï@z€ÕÙ'J‰wÀц;®áõ, uÔ"‡Æ[P >ÛÝyYX/g.êjÓö7`Èûíýã!yD»ÄmÅÁƒW1¨@1TIR8tÖ»£Q¿«Æa«>Ð`6ôâ–Վɨ¾“W‡TÃxÜ¢¡ü†B/—E@ki.Šê~…Ã31¯Ô‚ýfP¨Ô+’Ö›ÍIÛ­ùjwwaV÷³‘J¶v&,b"Œ£·ñ#d²Sèœðù'Û°¹à–žCo‚sFÀþv½%¤D&}Zï/¨(3Á¼¸‘jùL9rr+ÑìR°‰¥Í2¡œÔ¯~¸ `÷‹·­ì&¶MûªÐ:˜Èhb:+k?[GÓ]ÛX}¡ ܹö‡ô€ƒÕÁ>U³[ALèÜ#4nÝ„|ã3ëmƾ îÑ£÷Ú Oa.þZÑ^[•$…š¶ê fCêjxâ!…ÝîöàÆ¹c(b·¨E¢ú›eaãN–¢:ôz”zeôœÎ[óÕìî$²Æ',bõ!¸ÍØixùuw1*.Ö{J,nÌ8ñ©¹?!Ü?áãÚŒ,.ölx„+U;°+ÁÏ€ÿ<¯¤“·às ¡p öZžŠ³Z²Ðf™P›çS )\ºi×FùPÈûh“c¡ƒû˜0o#j.D”ô³´à¢ñ#l«8ǰ¦›¤˜ÅЭk¸;5¢¹¸^KÄö`\h†œÃ0ËŒ]dö!êßùfOT(_ä]˜ÂØøëùŸÇ„…}ˆwŒ¬ ƒÉû*ò³°¡´U‘¢J’BïUÔÔœ‹_b»xÅÛ)<lÕš¯Ö#.Dv¨¥Æâ]‰×!ÕðÄ#H`Oº,0•ç#ƒ ”Œ|”×ÅIãµÄŒWæºûñ)tŽD |}å(rw™µwÝå:8 ·æ(ww‰yÈ k|Â"VÁ8îu{7óÆëSøì_ÉHù©›Ê°9‡m€r¿Âý 9ó¢4éÓ•–op`Ï4+Ê' ÷Í2Åìò�ÛЧq w|‹í;ëpë~hcm¿îöQ±µõ¿ß_wÁrôø2·°¦ž>ÅËhå`áM{ëpß—üQrx¾^KLÂQ—‡ì²oѹŸ±œ‡±¨�?‹n‡s,‰ç!ŒÁa*ÆÎºëe»Ð~®[‹ëñ;{}¯G_[Þ ¼Bï•3¨=݆þ™¹ ñzèÀt( T%IáÔ�ú_FçbŸ:>ƒñþhèõêEƒÙЇ§ýÃQ š€ç÷Øk¼+þm"hwâ¹>˜w½)*†hX|ކ«Bn+$FÂäiFñ¦ìPbªØ’!k†m¢Ò¤"YN:o6W e·æ±PÃ݉óæŸ°¸F³„?«œ©¨ËÝ9_œ]$`7"ëÝw‘eéM LÂÓý3ê*KQT\†êúkèeyF…¤O1Ñûf™Ý¢QÌnºaú’˜÷Ñ>¬ÖÕ%í lozÇ#AÔ™_~„åÏIÒ5ëWÔälMsî¦Ï¼Þ ¯%Ľ™·§Nÿ†!ɤ1 {íçø†Ì‹‚–=›bèlT3ìFÓ“åöΑž|j&fU!I¡· §ô÷=N´Õä!ƒê¼&ƒ¿4´âÏÈõºáj«EN†1ñ[SN<‚ÊèóÀq㎕|ˆ& º\Cð rŒW†(“§—꣤h/ʪÐÚû* “Þ›ÍÑúÖ|YTrwây£¹Æ',®!—î$a›˜.üðµ f»8‡:ꕵU—&žò_…äª$}ЉÞ7ËlN¤˜ÝtÃæ’”1q§Mˆ\g–´“¥Ä[G ÈØÖæÃ<žo…×K“ªó*îÏ':ÏÂÔù4†ÞF¶WðÅ=˜Ô61«âäŽñö»PŸp~!ý¢‰ñ;æu¶Õÿ!ãæJ«Hf0ö¤ “h€–”¡¤ª51·aLbÀã†UBÏݧâ–ICÒz³™Þš¯ˆîNœo4×ø„Å5š%ü!VD…ƒU’>ÅDï›eŠÙå¦Ï©CÜ”<pq½ü êûwh5G†Ó^‡\”Û[áµDlãp¡)Šye³Q‰-e’ÎĬ‰à½cýÍ·hÖzðxØŸÐz§w41^/ñÛ¢ñ0ßÙífèWVDÛXþ>XÍ6Œë5á×îû’ïh¿Û„²¿Ñfw.žÜ«NZo6D³[ó•PÃ݉óæŸ°¸F³„?ÄŠ¨ ®JÒ§˜è}³L nx€­]úA;ãcU’<Q+x¾^KhóªiMÌš� ŒÁÕñêYGýyÑöP`ìë fÃ×Ǩ’âÀšžx0µn4×}…†«àØk;®ÝèÁPÂqMñn—#ZÆÔÚd$ J˜tÞl& Ûôi}k5ÜxÞh² k’®@ô‚0ÔSûª&ü!VD•Xpµ’>E£÷Ír<ùÅF nRëo=¡JòDMõ9æ­ðŸx16•fÙÖlï;æÕa:V%1¯jîĬ+!¼@ÇÑ÷a`ëÈ–(*Ú…¼¬Lr4è fCŠkyâ±àv›õ>vlÉA©åú,#sÝȯïIÐå׃Ëu—ðÐi‰íYªv7ÂÁþÌâuhÒ`*LÛÍf"¤þÖ\Š8!*uw¢SY"Y„)xí×ÐXÇ’Ú$qpG$‡Z±àŠ“>ÅBï›eQ~Jp“vØ:¤ÔHž¨¢ãã˜\²”«kI$Î,†n^Ãiiì'7l/›ÎĬË3çjÄVÃ;Ÿ…o[E㺷©åhÐêφjÖòÄ#Xÿ©Mý¢!5ãBÓÇßÀÎ ’€(÷GßÁ™Ý3ŽGNïR7ÀY.}{ÁsþÀ :köjtS—ƛ͕à=N`Eâm4yˆÕ!¸FGoãGÈd9áóO¶asÁ(,=‡^.ÊX­b´ŒŸîAë­Ä²!ÄFï›eJpÃú2^ÕHž¨ÇZ ï¢@lÜxt¤+1ëÊÌ:ëñN¡ž(=ÌÑ LŽc|•Þª?ªRXË�†l_áx0‰Ç&l'pØ6„ÀhŒù§UòcŸÆ“¦Ý0dVhpóšî›Íà=N`EØF“×X‚g·; o ¿î.FÅc¾^©3ÎF|ª(f’X5bÁ…AÜ?[޶ÖDÌ­ëÖe Èâ ýR2è}³,n2)ÁMÚaº¢ÔHž¨œÇZ®ÄyÅzeg.D<ƒ 8S–‡\.<:¼¸yé.&¢æå¹Ç×pžƒä˜‚ÏÓö½¨»u74¾ÄÖ}ç* P\+øúžE´oVé-¬ú³¡Zŵ:ñ˜{Š+ûß!jÁÜB7Uu@•7®^î¸4ˆsãýf“÷8à7VG$àÃðÂòÅXxÃËÜUÿÝé¥ã41ë¨Ã[ëö,ÜͯOá³…|*c¤-*Ä‚O²×oGÕ9¶yÜÔ^Agÿ| ÚäÐûf9Þ …R¤ÖçúAä‰ZÁögÇZ®øðJò fá{ø ßüwº/câå¶m…ÊvŒ¤yÚž[°g}´lK›a{ž¬Bç ŒW5Škxâ”oGhÃÞHXÛîÁ­×>îo6µ¼5O<ÇꈒøÀ”—‰ìâhj %›éÕ¹¡™k&`Ÿ;¦ .w'êó†NÀnDÖ»ï"Ë@u^õ@ðæ|çR7,¶¡ (Ozß,‹Æ+%¸I;lߤ+'OÔ 6ï ÙÚ‹˜>—pö<§Cà´ÀP§ û*/pjãµ¢g̱þfÊr¶¡¢ù†Ó®¯Ðyú;tÄWmØ·*çh fC5ŠkyâÁ&®n\³¿Ò`3€ß¯±šèâf“ß8•á9VGd²G‹šÑ7³ ½¢¼†uë‘]Ñ‚^÷ct™J± ìó›[ºðÃ×&˜Åù%à¨CVÖNT5ß—‘ÉœP•À4ü‰ö}`]ÆC0uõKת¾VÔ_Vâ6<àû w¯þˆ:Ý•5õšܤݯLo%OÔ æ ñ6TØ"<í"d&á¶þû{à£i[Cæà{ôÏ¢o…—èéáá°wž¨ aŠðæÞ¸Ó}›éëCïÓIq7á…=Z$å�mfC¥Å5=ñÐðV7`Ç©ÒKpkºQåýf“ï8•á9VG”Îq%‹†µ¸àº/¡˜¹ŽdCçhhóZPBnªÜ°›Pjî£ç‘äôýÜ“&lgYò—š*yGª¯Åo‰Ÿ•‰œ’ÏðI^ Š>@©.6ÈzÙ]°¾Öq  3xÑó(Ê!ø`7 Â6zÍðàrcgؘîFMÆrÞ„rðZ£èÈ ÙÞB;ù ¶Ÿ…sF€à½†›sqàú3ö¶" tž:ˆÊfæmïe”ÆÉȾ‹j'+va{ýCq¤­>4š çà÷>ÀÕF“ØÉ$¼ÑòÄC[]\Ës£³9•5NðÃóÍ&ßq+Ãs¬3^¿EqÓŸóº% ÂVù¶(KöµzBú&`JܰL ‚Rÿ.–ÆŠ§›á=TšïSÙ­P£ïY>Ã'`¹áËZw/”lb_ÃmÞ ƒ¡�u÷‡Åyšmž«`ñŽÃÙP ³{¹ä…<@ nx€é²~ˆc˜HÚqTìY ³H ¶ÅÑΑÐkqè´¡ü’E/a°¥ë·P22MuIJYy»PÄêjKÚXú§90^g0æê€¹þ´¨¯œ•¾óZP¼P“|¹vЂþU¸íÐ`6œ…¯÷Gg°.c+J>ß¼ÍGQa9•êWíÄC…[ÝYêÞÚ‚²úKáÏ`íg#жV ‘ýù†cšŒ6Þo6yH�ncuD¦îÁ¸ý34uÜA[ý>d‰šõ;CnÄ x-¨ÊÙ3_ ŠH)Á„MÙe¨o é}¨ýlÜ‹­ÿÿlÅ §â¾õ‡:}Û=VùÍù¼›âºÅ² ÆëøÿRlÅ~¡7iGwÆk\Ã$²íÁAK_Ê…‰»8µ÷εwá~ÇO¨-üÖmÚºïO£æä(ËÛCÎi*¥)³½w¹>ê¨E»¤ÊØ‚Q_wçea=/•=F{Ðýxí†l¨?²˜Ì0ä›pŸwg †J,ð²špŸþ,#&S«5nu§ám?ƒÓ·½ÒÏZÓgW1z© ¼ßlr'°"ÌÝéãéëåfÔt¹;1ØáPsÈ…Ï€Œü/a N¤~xº¯†6íd$¥…À3´ŸªÇí¨“YÇY|Öú<ôŠÐ5ú^³›sSr·6]áæ×|¼»å-¸©g¸Ìx¥7é†é¡~˜7L\“°sçÍtº Gv"Ë ®£yŸã’s‚0þÛçQWwÝ<(k?[­éÉh>÷[7!ßø{ļ/Ú%âþkß*{0X• û54Ö1OÎn†5FýÙ0x+™Nx³`¼úþ-£ŽjŠO<dßê²ÛÏ.Œ,—Œ`î1¬ç˜ ½TÞlò'°"<»;EÀJæD–Ê!ø V¼ÿtZoyC/ÍP˜kAÛ›óix»ÏãkãO°NÀQ—¬‚£óæÐoð %¸á}¯¢Zè:ΛHÂH;*7E×ÕŽniÊÖ?ûõï|¸Xún‘ÈÊ¢ñ86ž¦°a½!“]bä|„Ï?ن͠°ô™šµGƒÙ-Ìغ$̌׬·±%kcâ7ƒÜŸxÄ»ýŒjšœªëáf“ã8áÛÝ)!fhk'c)僸¶9,šd.Pžð‡X¡\º³|ùC+4»9ŸÅÐÍ˸3µhvÀ©6”à†Ø\¢xŽóÇãÕ/ñŽ1æ SÎË05ý†þ5`�¤¦#¥È­8Kß‚‹Æ°Mò3+®9†Ro¼ cp˜Š±³î:î/æ@èBû¹Jl-®Çïìõ½=|--6I°´›á ä×ÝÅh@M-VWÞg#>]9O´™ ÏÑýCŒæb§:P—µU?¡gôubÊû‰»ý¬1âÂâàb­Æâ]¨øþ§ˆŸÝ€c8¡«fepu³ÉyœÀŠð‡!tiCsðp úVø$jÊ ÅIŒŒ¥T3ë¬Ç;뷣Ꜵ†´Årýi¼¥_ x-(’Äj+„VøúàôLEÝÞª"ÀÄJbÈ#6]¸ S‚`ú¢xŽóÇÌâäay!ÛÈ-µh\9b­ÃtâÓ¥ù9&;QõVÚÒ]âEpògÓÒ9;ºÒshôZ·gÑNš7^ŸÂgÿ ùk Ú„³¡7oâyô  ¬¶†ëâß&�ç'lÐ=펚ôÌ8¿Ç^ã]ñoµ†ã›M=Ä $€àç5VÇWS 2cM¢‹núÒAð$tçÂf-’Yh¤-Þ«¨©9'=4¸xÅÛ*ñ}¤ð5GüЊ˜¥"B„g¸~ ›\ƒWÖãd¡GQvæB„|p¦,¹çSsÀ©Jp“~ØÜ®xŽó¯»pýü·8Ë€ežolÇ=ÿ~úeþPì`«;ÂК/U˜oxuŽtøÎa¢ó,LOc$ìŒl¯àKÇú>õ�u¹;Ã×v#²Þ}Y†4¹Y§ fC,%¹È/o‚ƒ%l»00êÀÅò\Š, ¯|Ÿx°ïøKcžJx�}mÿÀæ c‚q½ÉÂùÍ&÷·æ+Ãu¬ÎHÊþ¶÷ú03Û±8Þ^ÝFã/d¼¦œÀ ºŒ‡`êê˜ÄÖ׊úËô<4ej�ý/£æLÂÙðŒ÷GC¯W néPˆ@ÒÆ«�ÿÀ�^IÞ#nÒ~‡Â7?†Å­Jp“nØžG_ðç2^Ù~”Å 6‰S7žJ§ƒžÈ“@sý°”æˆû¬#8ɼÆ>+ Î/™ÅÍpñp[ 0‚¶ÌÏÉ?|m‚Ùþ G²²v¢êÒÃ5S®Ál8“9#¬æã_ãâ/õ(ÍÞˆÌÂÏQsæv‚™x9?ñˆóº ÛêÿÐ6†‰÷›MîoÍW‚ûilo|´|¬-燫•¹'Mسö3Ý„kŽ÷[]QëÃÑV‹ŒD]¨RZz €¡NöU^XÉ5å°¹„Pƒ㕽dlÓAî; s{ìÝWQWôÖmú:'È“@sƒpXM¨,)FQq9joÂEs"±̆Â|ÂÀst™öÝ×Ãå*#×'\66â·û Ækÿóéˆö®¥Üg@ãýÖ|%ø®É8×@†—h=|–{‘ókÀ5L·Rš/æ5cê­=tÖ»£Q·Bj”jˆuóÊ`¸ç?èç>e8%¸á¦Ï„ˆúÜú ›¿D÷bµi ÙÏ£2/´w‰Kh€i{n¥¡~41ý Á“òÀZõ1>f“@æ˜:œøo› ÕõVX[íHЋs^c|̇ÿë}€«&§QßÜ»wJûÉŽû›MÞoÍW‚,1ÊÇÛ–ÏÚ-ŒÀ3@ ‚RÎPþ—õÏ(—4Ö©[Kx¯ÁX3bNd͉§£þÄçä¸IŸ”Æ൞‚ñ×®ÙXëDSÙ‡0¶Ý‡Ó3‘ØípZÝTQ‚›´Bk LÀã¸kwT­~Á±ƒÓMu}# ßÅÙ²÷±dÎ-Å›ú‘Ƙ~ÐÄxµ½‰ìÒFÜZ¸m˜…¯÷G—Z‹yåžÐ÷É4`]ÆV”|¾y›ÿŽ¢ÂríOëôp³Éõ­y"p\“1xx±¥õ¿ÂîrÇ8Û# Lc™z43~ˆ7£c¾ÿ£¬`{ܤO‡Ð¬¨TCÈø‹© mòkÛáåÒø ÉO nÒ Óžá]>‚7¦à¬ß†õùU8U[Ûb½“žu˜Æ—MŒ×˦«X²Oá©ãO¬Šðw¡æ0ä›pŸ%¥bµlK,ðÎ<Dç?íé˜ÓûÍ&¡˜À+8Û~„±¢4*± k»Q°%›b,Ó÷T”™`^\„[`>SŽœÜJ…Ʊ"jlW#éSLDãïòY4=Œ>lêC[Õ4:ž‰vÃÕfÂñ¶¨› .¯”à&­ñJ¬.X~‘}Øi~ºtΛ ÛW2^õƒ½Šy]ÍÌ:P÷V Ý‚ñêû7Œù§5Î6,¢³›Mt)fÚó2^SŽÿ<¯¤ƒ_ð9ÐP¸{-O—O²E(B•‚íÞ64XœRÓãD[M^âIŸb2ߣGx¶Düp]:‡ÎQ¶^Î`¤ó8r¹¬Ïa¼²—”à&-ñJ¬.Äyzä_0î?ƒ.wÄœë}Ž>˸LnÃh|I¡ÞH æJZ€­õÅ-‡3^³ÞÆ–¬ËÁ_£Ð¢«¬ÖïX‚1×FÔ5Zp»Çº ¡º¢¼ uàÔ¾*4SòMQ¥`»IŸâxŽîfq¬6ü:ŸI3à…ýZ;¡ÐšùLÕÙ(çòæ•Üð�ëgžá]>‚7¦ñ¤i7 ó¬¤QÌk4<Ë–¸é Ý=¶ù¡FóŒ¨ËÚŒ‚ªŸáLCÆEÞûŽäS™À�:Œ3y3ÙÃm#r*-”f>]h–­–X5 ¶ÇLúÔƒÇÃ2’>Å$´I3d!oG²K-xÚׂ½™òÏ¢—81cöÎc~ëóQ‚›´Cë¨ZÌbÌÙ í°v{0Ãr˜ôw¡Õzkñ0‰H Âà5>Ú‚{’9÷>ºïôàEàyÖaýŒ¯ÔÀMoЃIZÔ”¡/Ýó¡·¾PÜ¿¢cßÁb e0íãï¿@QöFl:pÓº«JØ”FT(ØÎ’>MjqðÓ`[ÓŸ¢”SèkªÂ)ûxðç®ÆÏ)É‘¼¯S¼Ëf¶j¼W}nÿ,fž˜±'óMä•U ´Ø„û>:ˆI¬rGt•짪`v§ªævžuX?ã+5pÓô`’‡5eèJ÷&l¨Øƒ*›7¦+¤à¼Æàæ˜H)še«%R†0¥,cq„¡v|qüö|H‰8†¶a"0„njGú€ÖQµ`µÜ¡©š]ýÁVù6Ö_‚;ðó!)C€ßu¥Ù‚ºÝ 9‡a¶HÃi ûwy…gÙÒ7½AJ“<$Ÿ2ô4)°Ø¾¬æe2Z xíø…õAÎÃ)F³lµDJP#cqL¦á¾ò)² K7h”äˆHÞ×)Þå ÃÜø¡ÖæB_û ä.„°ƒßƒGÑ:È_Ê´Õ ;DÈCvÙ·h‰<𵜇±¨�?‹n‡s,u;žuX?ã+5pÓ¤4ÉCò)CO“B0–o¥4^ J¸ÌZºÊÑ,[-‘ TÉX“<·|‚ÜŠFlÐÄf½»nÝÈ Aë¨z¾4¿%ʼ9GÃÐô_°= £ñ"ìÁìß„ö°Pvœ:-ö¿dZÓ ´¥þ9ð¬Ãz_©€›Þ ¥I’OºšFÚpð ñsŸ ˜ê6bw0¾ŽH)Zf«%4G•ŒÅñ  ó’×[DÑcý%ØœC:9ÐàÀ«%J�Ã=ÿA*ýúÖ0¼¯S¼Ë'E4œ†í0kQk<úæ6ؽѱ—D*|áîÕ…yñ<ÚRì* Ï:¬¯ñ¥=Üô)Mò|ÊÐפ0<•¼3™Áüž[¨ÍÛFWꓬy4ËVK¤52Ç!|Ó³†¬<ì.Ú-YØc~<_nkðZOÁøk(9ÜbëDSÙ‡0¶Ý‡Ó3AžCë¨zC¿áhÎFQæLl)Ø¢ÝyÈZÿ>ªÛŸ‘§ð¼˜‰œ’ÏðI^ Š>@icOZ2¯ó¬ÃúÚ§j7½AJ“<$Ÿ2t7)žáöÙF´K X?Üí&”ï)CÕɯÑlESІþ_47^‚ÅzžA\˜ŸàNë/¸á¤ ‘.P!cqLJålGm{|¡ú‰±WKIpžŒß6!¿¶^ª/­¬Ÿy†wùÂøáj,€!ÿ4:o[ű?Öƒ¦}Uóš2^ÃmÞ+΋¨»?,Î2>ØU°xÇál¨…Ùý:ô{©ƒgÖÏøJ Üô)Mò|ÊÐå¤ ø1ì섥ѣшºF n÷xÓænCˆLØPùÞhsOB˜y óž,dä}Œ#¥û(aÓš†%&yë ÍðHÆçŒN²›ŠÆëå³hzè–Æs{ûÐVu�ŽgâŸÝpµ™p¼-ª,¡´Žª+]UˆBóÓ(]³˜#om‰žŒ×!ñÿéÉÂγërŸª!Üô)Mò|ÊÐݤ@‡ñdŠr3ÙÃm#r*-p)ÊŒJ$ˬã[cg1b;‚MëK‚µêÅ”°i #`¦¯;ß9ûTh»ìsÅß‘µ¡L7=sð=z„gK’"ûáºtÁ73é<Ž\ÒsÍ uT-fáçêí;ëpëþ‚ ü}t·ÿˆŠ­%¨ÿýžøº –£ÇéVSL9LÈÝÚ�ç ›™ñšw·¼æ#°P¦Hô3¾R7½AJ“<$Ÿ2ô5)øÐ[_ƒámû[(­»–ï¿@QöFl:pƒtý‘ræžœÇGµ·ðWßMÔæ¾M•í&á¶Vã`ë�ÝH¥¾Æõ F{[aªýmýSóÆë¡C0u èÀØ‹c¼ /ÑÓ3 <÷¤ Û Ù(§›WÍ uT-Xöï}X/ÊËdŽßÞÀö¦Ç¢öÚ1 o÷y|mü öÑ 8êò‘Up—œãi™GØsçžeKÜô)Mò|ÊÐÕ¤0aCņTÙ¼17½Á8ºò"í㡟)c±N(+°^‹Ž¡ ¸m0)9ð6®ÿ�ìœdÕ”KØtEGNCÛÉÏP°ýlðÖDp›‚ý]øë3Òs uTE&îà´©7øèöÃ>ºyU?ž¹ž‰ÿe9ì¸vÛ•–äL±àY‡u5¾R�7½AJ“<$Ÿ2ô4)°rY;ÍpÇì¼v|ƒÂú‡ çát€oøÕbR"}ð4®y˪)–°i?²òv¡¨¨(ª¥‚÷lÎÅëd¼j­£j"NZ!Óà ¼×ñSßà|Ìëº÷Pç˜ÏðžnxÖa}/íá¦7Hi’‡äS†ž&…`ùŽ•âʼ”Pì±Æág\ó—US³½wi¯ŸVhU‹YŒ9Ûa±X`íöˆ¦Ô,|ý]hµÞ‚ch:ô;„¦0/¥óÿ@ñûo!»ô"\œ¸ ð¬ÃzÚ§¦nzƒ”&yH>eèjRiÃÁC6L„^.EÀT·»ƒ‰ƒ-ѕެAøy>üeÕ”G¼„M‘ÌàEÏ# Ѥ£´ŽªÅ&lÕx¯ú:ÜþYÌ<1cOæ›È+«@i± ÷}åºVáY‡i¿!…›Þ ¥I’Oúš&à0À%I׿à÷ÜBmÞn4ºbý=¡&úÒ›µ?χ¿¬šòˆó*iÇQQ°õN>ÜÿV#´Žª;L:„¦þiqhÂVù6Ö_‚;ðZ'¥«­àY‡i¿!…›Þ ¥I’Oº›Ïpûl#Ú%¬îvÊ÷”¡ê$%JºÓ›5_χ¯¬šòX.æ5²íÁAKegÕZGÕbOš¡ÖæB_û äÞF¥mp>ÙáÁ£Tg óÓ~C 7½AJ“<$Ÿ2t9)³Ì’yšNt©7kz>jA1¯<@ë¨z„¨mDÎÑß04ýlgOÃh¼{°n1¡¤ÃÉCë™nzƒ”&yH>eèjRêB[Ï ®y³N´µ{C/­Ð•Þ¬Aèù¨‹~Ký¬hU™€ÃÃ>Jl˜BH‡“‡Ö3)Üô)Mò|ÊÐդൢ´à3œ\sn'+ŠPjñ„Þ@h…®ôf BÏG=ô]êgu@ë(¡wH‡“‡Æ—nzƒ”&yH>eèjRðZP$ÊËdŽß2PDƫ氾&ø…çç£/ÝÑ{©ŸÕï:Có!±¤ÃÉCãK 7½AJ“<$Ÿ2t5),©áÊ’©TI2$ìu(!ãUst¥7kžŸ¾tGï¥~V´Žz‡t8yh|Iá¦7Hi’‡äS†®&2^¹AWz³áùùèKwô^êgu@ë¨ZÄ©[,¼DOÏ eé×ÒáäÑך¡=Üô)Mò|ÊÐÕ¤°ÄxÇ\šîñÐk2^S…®ôf ÂóóÑŸîè¹ÔÏê€ÖQµˆS·øäg(Ø~6x@#x¯áÀæ\¸þŒô[EH‡“Gk†¶pÓ¤4ÉCò)CW“‚h¼îÙcÁóàŠê‡§ójÊ>DI¥ ÖÞq¡õÃm.Ã2^5GWz³áùùîr¡uT-–«[|–þi2^5‚t8yhÍÂMoÒ$ɧ ]M ¾û8Sø>vÛðÄí®7Þ¦#(¯: ³c,ô3B+t¥7kžŸé!ZGÕ‚ê§ Òáä¡5C 7½AJ“<$Ÿ2ô7)àóô¢Ç³B½WBSô§7k žŸé!ZGÕD@`Ì…sŒÆÓ¨onƒÝ;E·¬C:œ<´fHá¦7Hi’‡äS†®&…¡.´õ¬`´Î:ÑÖî ½ ´BWz³áùùèKw»©š}|÷Fé:K+hUaè7ÍÙ(Êœ‰-»Q´;YëßGuû³ˆ|„Ú'¾Ö íá¦7Hi’‡äS†®&¯¥Ÿádd¢‰¨v²¢¥óª9ºÒ›5ÏÏG_ºÃÜ|Šï‚Åb‰Ó~Â÷_Àꥭ¿VÐ:ª~¸ `È?ÎÅÛVvÛƒ¦}Uh$Ö ÒáäÑך¡=Üô)Mò|ÊÐդൠH”—É¿e ˆŒWÍa}Mð ÏÏG_ºÃÜ”„æ–åZ ,d¼jëcžá]¾0SpÖ¢Ðü4ÊM˜eî?*;7‹É± º…UÒáäÑÏøJ Üô)Mò|ÊÐÕ¤@u^¹AWz³áùùèKwÄ9æòw0?€×ëÓðÈü.“ñª´ŽªÅ,|Žo±}gnÝ·Ãngí>ºÛDÅÖÔÿ~O|ÝËÑãt «2¤ÃÉ£¯5C{¸é Ršä!ù”¡«IŒWnЕެAx~>úÒþ¼Z!›ðj�~Jy£´ŽªÅ ž[öa½(/“9~{Û›c.ô.B9¬_y†gùxï»TÃMoÒ$ɧ ]M KŒWæêTšîñÐk2^S…®ôf ÂóóÑ—îÌb¨½=+%lêiGû%lÒ ZGUdâN›:0Ó‹`¡½À°n^Õ„t8yôµfh7½AJ“<$Ÿ2t5)ˆÆëž=<^pøáé<‡š²QRi‚µw„Ý‘Àm.Ã2^5GWz³áùùèKw˜wǧ(¨83AÜ|;ŽŠ‚O)æUChU�´¤ÒáäÑ×øÒnzƒ”&yH>eèjRðÝÇ™Â÷±Ó؆'¾èÅw½MGP^ufÇXèg„VèJoÖ <?}é%lâÖÇ<û|Dú!N_R¸é Ršä!ù”¡«I!Xçu>O/z<qê½R×” +½Yƒðü|ô¥;Ìx=„ªÎ‘ÐëXŒ ³ê¯Bë(¡wH‡“‡Æ—nzƒ”&yH>eèjR :¯Ü +½Yƒðü|ô¥;K“Â-Å»±ŠŒW ¡u”Ð;¤ÃÉCãK 7½AJ“<$Ÿ2t5)PWn`}Mð ÏÏG_º3‹‘¶Ïñ¹?ª.fB?Ì|޶Š#Ô ÞuFwóa`®ŽŸPo4¢®±ÝOF#!Z@:œ<º_ÃMoÒ$ɧ ]M ¢ñúaU'â8 ‹˜ì<ŽÉxÕ]éÍ„çç£7Ýú›°-ûÚ¼Ó¡ŸD2 oÛdom„‹êŠh­£*â„‹¥ïÀ ÊÌä6Ãû¨nF¬†'®ÆW à¦7Hi’‡äS†®&…%¥r–B¥rRƒ®ôf ÂóóÑî´îË‚aK9ê[ï ·�^ï�ú{ï µ¾[ ™Øe~B515„ÖQµ`°µoÕ¡Íá/Àü æàîùÀQ´’ùª.— ‹e±1‰|nþõ¯I䉔ý]º¹qãFLÙXc}»–áf¶áyâã}R&ù”Á»|FÚPþî¸þ{¯á6—£¼íeè5¡ºÒ›5ÏÏGº# ÝÁ©Â¿e—¶È©¾ oÐ ´‚wá]¾0,>ûS4õG{°šé‡Vˆí&ä0221OHÛgŸ}ú­ôÁ ÔX²±Æƒñº`´Æjd¼r{¼Â³l ’O¼Ë'AøMÛÞCe›'Æí«€€÷:*³w¢ÑåýŒÐ ]éÍ„çç£WÝü°[ëQ]¶EE{QVý-ÌOà#»UshU vÀ[…ÚÎÁˆ5tc®_P•[ ³ûuèg„üÏÿüOP7¢/Æ×¶mÛ–ÈÆ~Æÿ÷ÿþ_dgg/‘Ã?Ýp3Û°Â+<ËÆ ù”Á»|Rfàm=€LC.ÊêÁÞ~x½^xûâNë”mÙˆõ»Ìp“ÿžæèKoÖ<?ÒB.´Žªˆß‰¦âÍÈÊÛ…¢¢Ý(Ø’)Ê¿¹Æ»˜ ƒU‰uûÊ“ñëö•‡[×bݾ®õ[W7³ { ¼Â³l ’O¼Ë·á%ºN}€LQn&{d3äC{̤*„ÚèNoÖ¼=Ÿx7¬± A,Óžá]¾h¿Ý—êPYRŒâ² ¾õ!FÉõ]¢ç>ÞŒ¯ÈÛW^n]ˆ¾}¥[×y¸™mØCážec|Êà]¾˜SðÚ/£¾º ÅEEÁÅ÷Œùú}TªBKb¹-4žNk þÆu¼ø/¶1a‚X¦+<û|af1tó2îLD­•sa=ïÀTè%¡‘sÆWäí+ëxäí+ݺÎÃÍlà ¯ð,ƒäSïòI˜ €‡ÓG,#Öx;­%ø×±n_usëJu1Ó ú ïò… Àk)‘ŒÁŶélT«Xæ>^/¶†óºŽ/ܾҭknf¦Ô¼Â³l ’O¼ËÉœ»‡÷”£†m]Cð“!›rbݾҭ+ð8®£o_usëJu1Óësžá]¾0¢ñj=в3‚GóíΔå!·â<äÑɲ87(hZëߓ۴"Ö¿%·­%¸ù¶<w<ïJAò)Cwƒ^ðcØù;Ìu‡QRrufž ÚD¦ˆèÛWºuå^Çuäí«>n]©.&¤[ŸtVIãþ¼’üÎÂ÷ð;¾ù1,nÊ‘,JŸ±Ö:³|¼÷opómyîxÞ•‚äS†®}`ÇMœ«Ù%ÇÐØÚ ×°_\ž -‰¼}¥[W>áu\/ܾê'Ö•êbò@ºõYé¿Ïëxœ'€¡NöU^@/åHÞu„gùxï;ÞàæÛòÜñ¼+ɧŒÕ2èÿ\ÝWÐpd/ ?½Bår4dáö•n]ùÅR±g«ñöœØí«nb]©.¦*ÄÒËT7%¤ûýÿð®#<ËÇ{ßñ7ß–çŽç])H>eèjÐu¡­g2ô"³N´^é'7baݺòKhÁÆstKÇsŠ%‡ÜÆ TS1é~žJÿýt¿ŸàÞu„gùxï;ÞHÙ·e«´iE¬KnÓ’XÿžÜ¦%±þ=¹MKbý{r7x­(-ø 'Fã´“E(µxBo ’%–ÈmDj‰uûš®[W¥Ï_éûÕ†êb*#ÝÏ3ÝúÈ›>êûŽð,ï}Ç)û¶¤4ÉCò)ƒwùdáµ H”‡É¿e ˆŒWŰ¾T‚Ò÷É}ûš®ÛñÕ£?±Ü0îùú)åyB¤ûy¦[ùÑçY µ·£g…ÐÖÙžv´Qü«xמåã½ïx#eß–”&yH>eð.Ÿ,¼7ÐhŠHÈÄjÖUI’¦ìu(!ãU1«JoÖ‘·¯éŒu]=úÃJ‹œ‚ñ×.ØíöˆÖ‰¦²al»'e;_‘t?Ïtë#WúlùÇcz.Í·ã¨(ø/iµxמåã½ïx#eß–”&yH>eð.Ÿ,›Œ< &ãU+V•Þ¬1n_Ó“¼zô‡Í1%Ayâ·Mȯm‡—܈ãÂú)(ý÷%ïø0ìõÂËÚ‹±p½qa ^ç`wz—Ô O÷÷“ˆ>³VBÆ«LX¿-Â¡Ž„?_Å{5/›Ø^Œ…+4~/œöÿÀéZRµAKù¤Ÿ-_>­ûŽ7Röm•vlê”F>Z+ ɧ ÞåKži »n¢®ðMd—ŸC·Û'Nf¦»øˆŒWŬ^½Yý°Û×tg^=ú#nö/ŸEÓC÷âfj¾õ¡­ê�ÏÄ?»áj3áx›W²¡"¤ûyª©‚ïLy™È.>¦¶ ±C‹™>\9 ƒø{,™WNõMÉaWúüËØÆ#=°”ÔÁ¾h«²òPUd¼Ê„w þ,|Žo‘gxÅ'›Ðæ`™ÔÌô_Æ-ƒ¿·Îð>ªÛŸ‰?£¥|ÒÏ–/Ÿ–²ñHʾ­ÒŽMÒÈGk¥!ù”Á»|²f˜]˜ìçà m$_`Ø7 ¿÷šËß§˜WXUz&ßjoéD鿟nùÃÌÁ÷èž-)½å‡ëÒ9tŽ2#`#Ç‘k´K6{DùÏSœß½pµÑ£ñ4êͷᎮµ›8ªêãd'Ž5£ofa-ò¡·¾P4JÖ#»¢½îÇè2•bëÀâa?ú, 0>ŽÉ°Í$BÆ«ð®#áÏDñN ¨É%Î\!ü=¨ÏCü-¨°8à~ÒÓ®J´†u@Kù¤Ÿ-_>­ûŽ7Römåu¬8¹¼z‰W):‘QúÙZ+ ɧ Þå“…÷Œæ¾8ÄIôw^C[§.›bùÏ}¯¼#º9 %ù´%,?.jj3÷¤ Û Ù(§›×¸È{ž³ðõþˆâLƒø¾ ó%Š ¶ #sÌO¦B¿#¥úùþYÇ”˜Ÿ†žµ¨ßîK(^¿ë²…3D¼”Dfp«Ïa¸ÚëP¸þ]”7uÁícò£»æs2^eÂ»Ž„?Žº*˜= ¦¡ns Ö3úúwŒ…fîåÒ,-å“~¶|ù´î;ÞHÙ· wì,FïÝÃãH%LÂYÿ¥dâHÒÈßhh­4ÒÏÀ7ü"$ß Æü Çáì”öìöGð.þl’oùdÌ6¼ yå&XíKbFõ>÷aÜëîg¯e˜yˆúC—á ½äJob@òiKX~þ\ÔT'à…ýÎcøh>Š‹¬ç9÷MÛ߀!ïK´÷‡ôB\£ÜV<xƒIô³R}Š|ÿ¬¨ÏÅMÎAØ*ßÿ> ûZ=¡½‘€)» ›û÷J<鳄çrÁ±óû=¯÷|IxíÍ(ÏÞGÆ«Lxבðç3ãðšúçù…‘vTn2`]æ´z ÆqØÕ0»_‡^k+Ÿô³å˧ußñFʾm¸cðZ¿@Å÷?Áb±ÄnO¢(³4MÆ+¾æ’ÏÆá0í€!{/N6Ý€cˆ)÷ú¯Âü«œ!çÚ½á›7’oùd὎z‹§ çŽíAN~%oô,1¸ åHŸ»ÖÊ*|ßc¾ ¶\4#³ÈBÆ«Jð.ßJ„åçÏEH=²žç¬uoe pñæ*„ðæâ¯#Ü[G©>IÞ?uÆíŸ¡©ãÚê÷!Kü»õ;C.¢ x-¨ÊÙ³¸ùfð£ÏlZ/núý¡×QøûÑimC§ý1†#¼ÿˆ•á]GÂŸÏ ç¯°½ü:º®¡¾„֙؜£Ù–K5r¶7¡?B´”OúÙòåÓºïx#eß6ܱ˯-gQ‘Ã Ä È.½WĵR*•†7_séç óè§hê[pàï=‹|fxe‚¥÷)žt}ƒ]û[OgI>¾å“EdÌkÀãŽ#hl¨@¾¸;w®±E­%"}îñ×–ï+ÃôÇðJ/>–ˆ+½‰ɧ-aùùsQ#R¼ç9…¾¦ñŽñžø'†¸N¹~BE~6”†×&9(Õ'éû™[s3J³7ˆ?7 #ÿKØ‚¾~xº¯†æF+n8GDÉçáGŸÙX+ÁºŒ|”›¬°ÇpÙ'’ƒw‘|¾0ŽÞ¦O¼´ˆÈ–>ãA·ua}o‡s,ìo¥¥|K>[¦|Z÷o¤ìÛ†;6¶Û°àжê÷aX÷ŠLw–¤ÜOÒðçk.ù|v"[r ž…î ôÁ\¼IüTw.Ôÿ”& ùø–/i˜ñZÂnúØIœ÷šbóú·Ql´†n” %HŸ{,·aæÆwÕìÀ-sL]ÏÅ™! ·z‚äÓ–°üü¹¨ÉcCííè‰Z³£™íiGûÐ ¿´†‘ý<¯Ð{å jO·¡FœkDãõÐ3èˆð ’ƒR}Šù~V%² Ê2ð£Ïâþíò°ô=…ÓvÇŠÞG~Å÷¸Ñ³´t !Þudéçχ F†.‡–òÅþìÄåÓºïx#eß6~ÇŠgè.ŠßsÇ­j7“:¥áÏ×\òùÌø*n¹ ÌbÄv›Ö¹ï ¼ ýÆÜ5>þ îÐk’où’&h¼^„Ë}VÓäe°ädäÄÙî— MÆD|–îÓºÿÏ`BCÎQ´>™XÒßÜêM’O[Âòóç¢&vXû) *ŽÃh4ÆiÇQQð)Å.ƒ¼çéÅÍKw15©Ì=¾†óމÐ+y(Õ'Éû‡ºÐÖ3z‡Y'ÚÚ‚(xÒgqDFļı¹£ª ;St çl.Œ‘»pRð®#áÏOî@NKù¤Ÿ-_>­ûŽ7Römcwì,|. *s6°å3˜ãq7Ü©Sþ|Í¥ŸÏ ç½(o²¡«í J²ÖcÝú=!7Ø�|ž°TmÇö…@y’oùd1ê@§s‚ÎßL(ÚÀ\J˜Ëj6 ŽœÅU»>ZxU!îsÆá²|ŽÃFl)7ÃÌN¹®ô&$Ÿ¶HäçÌEMÌx- ʳ|+!ãuX%Ž–¢Œ¨þeÍ€M•íIbŠ—÷ï/Eò~¯¥Ÿád̃Œùv²¢¥%Û”þûZ°×¡$(§¸þ»ï¢©| Ögï…ÑòÇ|mR"axבðç'w §¥|ÒÏ–/ŸÖ}Ç)û¶K;v^Û—ÈÏXÌ¢oÑå #¼À@Zb^E8ó5þ|Á׃¦Òwæ =gì@­%Dñî”Ml7œ uÉÇ·|²„’-ïaKð–u ÙÅ8vî&z(nGub>÷À3Øjw #fxC�¯</(æU%x—o%–ÊÏ‹š<ÄÔ/`<¤¡º˜r‘÷<=°VT⌹%´ß›Ù„²œm¨h~€á$&{¥ú$y0ë=Û-×2$õÆÙÏx$h¼šÂ}ß Sy¾8·3ÙYFÿïÑ=Dú,É3æPGŸŸÜû™VH?[¾|ìõZ"eßVÒ±Wp4~„Læ®Y|]OBiÊÚ�™¿Ãå´(ÍüøšÇþ|Vò%²ÔK|H>¾å“EpAÈDNé)´tõ‘{“†HŸ»8Œ>@# o ×â†;x"™³XëÙô+eV Þå[‰°üü¹¨ÉCÔýñqLJ¦2^å"ïyNbÀNdDÇÆ"¼¹·î$’Ë+Õ'ÉûÅuèêNQÊx°Ä—Çñ!—Æë,FÿÝçëYø‡á·ºblecò²vâHÃUØÝâ ï:þ|fBUçHèu,FÐYu(Æ«<ù´î;ÞHÙ· wì ¼mÇQ\T„¢¸mò²ö§Iiøó5—~¾ímNQÊå˜DO[†B¯H>¾å“…÷Œæ>ZXS€ä¹ ÏÐvô£sUDÛ‡¬b*•£¼Ë·aùÙF„/5E†áj¯CáúwQÞÔwÐm~Ý5Ÿ“ñº ŠŸ§ð§¢²¹'©zºJÿ}ÉûEäÄh_v »ãÎÃ>³ñXŽ-yï†nY7 ›ÅºRÉ9Åð®#áÏg: Íî¾”¥rZÊ'ýlùòiÝw¼‘²o+¯cLw[q%mJׯ¹ôó=°”¡âd,¹Bíäg((µ¦lMò¥Á´>X) B?ºï ‡^É"ÿ¹‹xó-2^U‚wùV",?[SørQ“Kd‚~Œ½Xð6x_`^{3ʳ÷‘ñº òŸçüÞ¸Úh×¥Ó¨onSTÖE©>IÞ?Ò†òÌ‹I —òns9ÊÛ^†^ó¤Ï¡ñ˜±¥Æt=B¨ï:þüYQ¼Ïñ¹?þxúaþàs´„¯:´”OúÙòåÓºïx#eß6fÇFàê´¢±Ž &4Z~ ÇîÍé™:¥‘¿Ñ`¯µDúù¢ñ3‘CT+JÝ ôóI>Mñþ‚ÊŠ³hYˆƒŠÑZ¾¯B¥5|šI$Gìç. 0æB§¥uì £®–Û 'ö‚8mÍ..6\éM H>m ËÏÖ¾\Ôä!Êo­‡Ù½Í…¿Ö6tÚc˜Ââ"ïy²™?³™3#«äóýÈÛüw–£±7~bËåPªO’÷ ¢iÛ{¨lóÄ0üÄ9Ò{•Ù;Ñè ëŒnô™HÞu$òó…þ&lË>‚¶˜¥§¦ám;‚ì­pE\Æk)_ôgË•Oë¾ã”}[iÇ2Åý ÆÂ¿.iQÙ-–¸ÅH߯.ÒÏ–¿ÑÐR6†ôóEãëÃãè” I™ìDÕ‡i4I>íƼF™%MšHÖ—RÄ£ã+² eTŸr>‡Å%ÝT.}?_|Ú–Ÿ­)|¹¨ÉƒÉÏnªòQn²*ºý[ËÈzžìVeg ù&ÜA¨¦÷ÌC4|úó2·YñQªOÒ÷ÏÀÛz�™†\”Õÿ‚;½ýó7ñýq§õ ʶlÄú]fIl.?ú<‹Áë×ñ`ùØ!Ì>¾‡{£+ü!w‘|¾àAë¾,¶”£¾õzûYîô÷ÞAk}9¶2±Ëüâi*ß’Ï–)ŸÖ}Ç)û¶’Žõ÷ >ÿùL©ß[`ë¾»ý>ºm|¬Ù†Í8Ðö<eAégËßhh­4ÒÏ/I¢Œ,,t¡—$ßòÉÂû+LæžùE ^{dé2¯J‘>wþÞ³È7°ø¨/ð½¥Ýv»8ouÁfùÇŠÞ†aS%Úy4>bCòiKX~þ\Ôä!®‰—€¥ï)œ¶s¢®¿üŠïq£Ç‹ˆ‚�Ä Èzž¬ù[(4?×™…5É÷oóO/¿~ÅA©>-y¿ð]§>@¦øsöw‘Ís íQ7FKÞŸ6D}¶~ŠïŠé¹4ß~Â÷_Àq˜D¬Ì’gÌ™ŽD¾0t§b]¢­Ûˆœê›QÕ´•/ÖgË‘/ÖûW3)û¶áŽÃ„í06dÿ¶¡×¡ŸE2¿ÛŠò÷Ä z*5FúÙüùšK?ÿ%ÚÊËavÇê»y·”·aáî˜äã[>Yˆ²ÕݽˆC u C/ˆd‘>÷aØ*6#»ª=ví?ankÞ3Þ«ÌàJob@òiK¤ü¼¹¨É%2æ5`ÿ ;ªêÑP±9,ÑÍEYÏ@Þ󜀣®�[ëb†½dÆkÖÛØ’µ‘:¯ SðÚ/£¾º,˜„³¸ì8c¾ƒþµ¯ùÑç'(ÏòêË…õÛ8Ò‘XŸ/ø`·Ö£ºl/ŠŠö¢¬ú[˜;ŸÄLЦ¥|ñ>;Qù´î;ÞHÙ· wì¤8)ÿ;—3áç�ê ÛÀÔ* o¾æÒÏŸFS²+¯/9 ð ­r+¶6>J™;É—B’(üM$‡ä¹³›¬—=ôÀë?PWxÎК̕ÞÄ€äÓ‰üœ¹¨)!œ!4�Ÿû.šÊ·`}ö^-Ä>Ø!‚È~žçèþ¡FóŒØü³U?ÃcÓŸJõIòþÑt?^!f4*q ?úÌ< ¾ƒùQt‰ÆÈ¶´\#±2¼ëHøóg1zï¯0”¢]ǵ”OúÙòåÓºïx#eß6ܱÌå¶h·Ü¥®»©SÎ|Í£?_ð^Á¾Ì7°¥ì Zï<Dp²íGï_P_– Ãz¶ÉÞ$ßòÉ‚b^SëËE‚7ÆÜõ¤.é’÷sɧ-Ñòó䢦„ ñj~÷}+Låù¡r#›Wþ=º‡h³yÏ“åéFsÝWh¸Êr€°×v\»Ñ“ôR}’¼?‰Äüè³�ÿÀ�^­Ð« _¼,xבðç'ç:®¥|ÒÏ–/ŸÖ}Ç)û¶áŽen¹_àm¹Rcè®ùMý©1 b}6O¾æK??€¡®º˜‰cÖÞGuû3ñ7Â,}¿º,ý|’O3Dãõ£šnÄò X@ïDã/d¼*EúÜ_¢í`-l‘wcQLu¡fw3úCSWz’O[bÉÏ‹‹š<f1úï.8_ÏÂ?ü¿Õcƒ(“ϵG®ÂîžÌ™ÄRd=ϹÇhÚþ†Ø¿ïcÇ–”Z¡Ïò12×½üú$“'W©>IÞŸÄ!*ûȯåO$†äs¨#áÏCÎÊ—I?[¾|ìõZ"eßVÒ±S`:Üw¬DaÛ—È{/})ªàÅ×<öç³pvXëÿ²â"—¡úÌOèìŸXâŽMòñ-Ÿ,Äa¥Âß,Ædl|÷V"!¤Ï]À”ã;¾Ô³ïÿ_°Õà=^ÝÍc@òiKX~þ\ÔäÁ6R娒÷nè–•%-;†s7JD‰ ëyÎ>Dý;Eóø3.4}üÍ|À#4~ôÝbh‚”ê“äýI$äKŸåÕò'ƒw ¾¨I¸Žk)Ÿô³å˧ußñFʾ­´cçKåœý¦î™Saæ/´Ÿ:ˆ=eU8i¼;ùš‘~þ0îu÷‹R.‡»{0zEòñ-Ÿ,1^ UXúܧá½ý¾iÿk>‰J3î[8U^‚²ª06Û1šÒ¸Ò›|Ú–_܈pæ¢&¶Ùg¥r¶¢ÔØ‚®'£4ÿ$¼çÀí+· Š3 Kry‡mCŒvñ‘mØý¿PýÓ‹%½‘̹qغ³ŸC}åY¾QÂ&¹°~kµOÌ¿ð¿€çUtÿ‰{+«Ž…d¬Â<“óaï×öù½ÍGqÀôúú°;ŸÍ_FFÑïx�G¿tn‹v×R>égà>s?/·SõÃõÍ—°ŽÌ jÝw¼‘¢o+;öYT¢È †+‘J¥áÍ×\úùX+«ð}K,¹B­å,**I[)’OC˜+Nnœ‘‡>„&°ç>üôy”§…€@ ±Y‹+½‰ɧ-aù“Û,³Ÿñ[ëav'ã¬J, ëyÎ=Å•ýïÀ ÑÖ ØTÕy ¥ú$yB.¡¢¬™‘ÙÏø€ÇÏQÓ½\ÖþYŒÛ.à2^eÁžñÊzñ6*ƒ‡2Ka¯%ìó·o(D͹œ,û;2×mDî—?â»=o…d{ Å=1Ã8ZÊ'ýìD׌p_²×k‰}Û@°c—OÒ´<Z>égËßh°×Z"ý|,ErÄiEi¬£Jòi‡ï?h'Ýœ50ß÷ŠÚJh{î+Ö^®ô&$Ÿ¶„å×Î\Ôä1‹Áë×ñ`…3›h·gBЬç)¸aÙ³?KV­m÷àæ!Û°÷*jjÎId³\<‰âm•Òƒák si¼®TË_|“ã§ìÙ²`ÏxQ/.Ô àÍb/¶,êCË÷ÈÍ­D³c( Æëlðó7”±2ˆ¬êÄâ>ÏŒ?Z+±Óx –˜ÕãD»ñ8.Å©* ¥|ÒÏuÔjDÍ…pßY,-¸hüÛ$I°¬¸êKmûŽ?Rômuf¼ræk.ý|.›,xS®…Ö³é×´‡$Ÿöþ<õŒˆÚJh{îd¼¦Þå[‰°üÉe7åçû³”|·gBмç9ŸmøšýUÔ&?�¿?¹>VªO’÷O  ÿe8xbžI8>ƒñþBÀ®ô9ã•{Æ ®Â³ŽoQÜôg”þŽ ³jGšn^çíŒ`Ø«z²%h¼Ú-&˜= º,`²Ó„¯â膖òI?[ÀÔÓ§xÝI3Ѱ·÷}Ks hÛwü‘¢o«ãUOÚ^k¥aŸ/øzÐ|èLÿE¿Ó§Ç'ª·¸À=…ÃÞƒþ±È…$€WžXpò"ù"?ÿ1ÎT_Áx¬™s9'¾9Ü*N³óh-Á'칓ñš>ô>îÂòÏbÌÙ4ò¬Ý̈¯}ý]hµÞ‚c(~Þp~¾?ÛìSŒ RX)&`Ç©ÒK±“]®€Ò_ò~ï 4¶º¢}ÿ‹¶êÜq°U¾¿*0}ÞÜú‡¹ 5ˆ|Æs®°»¶ ª*øh(ÌL›Ž°ÏÏ­êÄdÈx}£¦ >×9ìÛw M--0ÿж֠3NU-å“~¶¨£¿4£õiäø[߯¨ÞœÓ–Òºïx#Eß–ãuîISÒ¾ðZ+ ûü'M»±¡àÎ5œ@ÙŽ¿aa¾¼ð ö,”{Éü½ã¢¹¸’/òótÞt¶‘y÷,öšX{°çNÆkúÐû¸ ËÏîTã½êëpûg1óÄ,΋o"¯¬¥Å¦˜§è ~¾¿¸‘JÂí™"ïyúàºX†lCŒµ‰•뫼»w*æzyÿþR$ïóš± õŽØ¹’÷§•9ø?¢,ÿ=쬹„ûÞå Ïr<ca]µÛ‘]p5F#NVíG~Öq/X‚ÿ?{ÿ÷ÛÔ•ýñÃü¾á²H•¢H¹¨4BQ.¨P•\QåQ@SEŠüT¾ ¢Uø!¨TmÌCë|¦u˜Öß<L‰¿¦„”�I)aDb¦ÎCüeLCR›`ŠC~}|b缟³'ñqìÄÇö±÷qÖk´§Çg{½×Þg¯ýc­&GúW6,ó‘³èô ¡³z6ž ŒÃa©Ç¶üuÈùàä—/‹DIù¤y³ –h†äli\tx†ôþì'MOË¿ñêiý,á½ðJ+ Ë¿µ¢UíŠÂïhÚòh[þ…Ö}{ »ùÄÁƒËq:~(CÆ5ïò-â‚¥N‡K’-oÍÐ•ïˆØw ¶á¹˜Òò|ÂêŒ×Ì¡öv·(ÿ$lú#saO„×è¬ykËÙêÙ[¸LGb¾ùy~?œ¸½B;ðßnD£“Œ×XȪπ úõâ;Õp%ì$¦«:h7UÃÈþ}ËŽ1Ök²ú$¹ßÝá6z¬VX’ƒ£¾˜5?ú<Ï,|£/àzCÆkªXRÇÂ~ÇWÕ•sá&ë.à—(áçQZGXþ‚·æú¨<~öÈóã®|{!ÒD$JÊ'Í›Mþ†»ÿk_b²ÿÑáÉ”.;ÞHÓÓòo¼²YŽD÷Â+­4,³¶d®üüVèrX`ç.±šáZèFÐUw.ê@›ä Ïß‹ÁáˆÎSÀŒýìÖ=ÿº¥å#ø$¨×d¼f µ·»Eù§ñ¼éê;èï8…bMÈC¤¯–ƒ'Ðú:º‚ñóül€âb&‹¼úœ†»ã;œýÅ-}W‰FmÃáð„.å¬>Iî÷O`lRžã(~ô™PЏêxº­w¢¯m*­#‘ù ¾!Xoœ‡žõa†‹h·!ÌíÀ””Oš·�ÿpný küfdûݰ¶uÄ<j¢tÙñFšž–ã5`7$¼^i¥aùÛ Ÿ ¶k$dnD]·ã!ìýæZÌ—ñÃW»°éxtú$_xþ.üdlÇ`Ä–·þö/°!G—ãšàVïd¼fµ·»pù™O�c9;‚²E'îÂ3ý:ÏýPw܈îzùyþX[Ø"y]VFòÀë|„Fq�«; Cs»ì­ÂáÈÿ})ÒûEãºû²8èÿ7ì8xm½[¶×¢¶D'Ùß'øGRÇÂkôœÛ¢œÐѱ…Ä7\¡/IQZGÂó_ì“sQTqŸ•¡Lû1*¹•Ã&<wB£ÉGÉGE(¨4c°¿»s5ДžC_ [é²ã4=í\œ×Þà6Ì�<·¯áþÄr³vŒEWÿ@Â{á•V–¿ßiÁ‘úNxF:PýÎìâKÌû–º‘¯ÉÅ… <ƒïò-ëÌk¶~ÃTè[áHï'V ¬Þö-„zn3s?^Lš~}X w¢Cò)Ëùý^ {Ã÷^XÏÔÆŒŸÊÏó3ã•âb&‹¼ú ×¾ó(g>#r6¡âó}(ÙðWh·íé;b%’Õ§ðûƒ>B4ï ¿d öÃ<h‡y·hh¶ÁÐ}‘‚}&”"¼ŽÙ‚ÐÆµ[Q{AîÉl¾Ž®Éз¤(­#‹ù¿…Ó´[4Ë ï{8¶hU ³{öÆz±OÎt¨œ)Ø eØôÖ<…þ¦Zœ±²þw ãçÁñu$J—o¤íi 6ÞY\i cö™RÌçè^x%ecÌå/¾ÌìÔW}†ãWž,™ 8,ø¶+úf"’/<®éŒ¸ÛvŽÀúØGbnQZ>‚O¤õ6˜\Ãm; -+DNî^˜žG›òà_oH>eY”_€Ïq•ï?‹Lš¢£0EÙ®ÆþÆìMq1“EV} 0mϦ´=£3bX¡«0ÃÍBeºÕwÄJ$«Oá÷ “-MÌô_ħg‰Ãj~Çyìaÿ¡ï…Ã>J^ǂӄíÛMaGÇæ À£ŸPZGóg~6cͶyùæWøßʘ}’òEæ-x:ðåÉ_0Âä›èÄÑ£˜ð{ÐC>¥ËŽ7Òö´‹+¾eße¤SiröÂ+­4KóXZa;Éžÿ[ŒÅ–%JËGð‰¤ÞgŸ¡ië»Ð”ü ãb/ü>§ÞÀë( Ez³ºY¬6P*AAÕ·aï7–.B§-Cµ‘­LtÀ>&òó£?ñ¯ÄòȪϠæl3 ν«æWï¿¡+=›ÐQ†dõIr¿àFç—ß„<ò£óè)tNLc´û J¹•C(…¤Žý¯ñ@w ÂŽh‰©¿†k™Þ…'`ÊÖ€âM°Ï°ÆŒ×R|P¸š°H‘()Ÿ4ïi8¯Šîm<_ä´=íbÁʾËP²b"ó–»^i¥‘æ/;Éžÿ\ð÷fý×h¼ñT¬OvmEÛ­^x24Hð‰¤Þ#“óƒ0•Cg¥‰%,Ö?ëc:pæì]x$Ê#µ §ÐêIÿ@IÌx¥¸˜É"¯>'`Ó—aÓ|™3ã5ÿ}æ¯C^MÇÜjŒL’Õ§ðûg×°/êN‚¨ízú–”ðû‰ì$¼Žç¶–GêK|œy;·}ßè~„u”µ·Rä—G³õϨ“/ %哿=ƒ—æÏP\ý°ÉN1Yná¡Ó›‘q4o¤íi V|Ê ¾ËHŸÒÈß ¯´ÒHòO`;É–ÿü Zþ‡ø¨°•æ§è7ŠÜ5ï¢ÔЋh§Ï”–ài½³s'Ÿ`£Žmc°­ ?¢º4ïT¶ÒÊ+±Iýû_âÁÿy'ãôÉàG(.f*]Ÿ¢ÎtÿSé1Fý6èó7 ¬6Ê‘¦8IVŸÂï^š±«8²g!]CûÃ?2âì†àI Ch=z æGáG´ÄÔý�¶W™ñ˜»rþ™óC°$oÿî·ý†Ñí)¥ËŽ7Òö´‹Ëfqåße,ÞŸz¤yËß ¯¤l Iþ l'"ùÂå{ÃFí\ÌÅš>ý;¬LçüOaÜó=ìQÆJËGðÉ’z÷¿AßõïP¶3³AãõÈïp/Æ`žôfu³Xÿò=G2øÓQç).fÂȪOaö[Ñ ¼n—8fñ2ï·Á²Ì¡•HVŸ$÷{nCwä"¬OÙKm†ÃŸ>©FZÇüã㘌P¿µ•¦þ¨«›JëÈbþüù!æ€çNNFìD}ËE[h]Š’²ñHÚžv±`EãUfð]Fú”Fþ^x¥•Fš¿üíD$_xþ~x:¿ÆÉ 3°YLtžÂÑNü£2f\|’l½“Þ¬në_¾çHéOv!¯>‡ÑY³ÇÛÅôž›ö"7§UÇö¡<F<ò•Hiæ6C+^³Ï¤Iêh3ÉýDV"©cßS\®ÜD?BI³5¦¸#Æü’û`1þüHó޵È'¦ Ù!¼‘¶§],Ø�F<ÀÓ(+\‹ÌàUïSÉù %+fiÞòöÂ+­4Kòºè"¬ ^¬*ùfq}_´Uƒ¼ÚÌÄ¡%øDZïnܾòÑFeóDÌŠ’Þ¬nÂë_®çHéOv!«>Ù¦òf ˆú"Œt &ï=”³ÕªeÎØ¯D²ú$¹ß}uuÂýbº|å[Ž 9ÌÑf8¤ÏÙOxlz¬/¨‚¡%LGÄtU·›‚g9-¸e‘芲:2²óEpÛ=~¤y‹ÆkLǶa †•¢lÙñGÚžv±`Y¥…öØ)è˜'ߨé$ªËvÁ`_Œ•>¥‰Eì½ðJ+M\ùû­8SyÎ([ŠH¾°ü'Ì»> ͬ-v¨–öGpÆ8K¤´|ŸHë=V|àˆ6+Ê®‰ÕËbýË÷ÉX¼ŸÈdÕ'óͰG‡Î?þ‹ŽúÒЮ¯™e½›¯D²ú$¹j÷V…1 {ãaèz¢$}^ HêØÿg øÅ#5´¶s8Üú2t%EYñóŸ,ü~,»Ž’òIó–ïØVÙ²ã´=íbÁ²åð}sqµÚeÒ.4÷c¾ŠÒ©4r÷³ϕDš¿ŽËUÑBkÖ¡¨æò’°4ÒûS4Þå{‰6]=.YßHd˜}Ö†‹¶hë®ÊËGð‰´Þ]°Ôép)lÂÃln†®|ªø1ì³[ ³¢¤7«›Åú—ï9’Aú“]È«Ï0¯ýšqâžÓÎ_pŽMî7[ãvâN²ú$¹ßÝŽF³]êtÓeG{] r(TΪeI øñ+«²:²Ôx•‹’òIóí¤ŸÎÃüû¤¹?£®hSF|ïðFÚžv±`}ôÏäLwˆ¤Oiäï…WZi$ù"¢Êp%L61]ÕA»)äýï–caýÉž¬4MÆÎä|"­w/†# 3ö°;Æ´ôéM�žŽô®Ð§z;Ðc;Ôþ8îýƒ8HÖ[Ñý|4ê@T„)¸­m0êÙî›F˜:íNÐ9 ,Ö¿X?m§qàB„ѱŒó õ;Ù…üúà÷¾Á°75-0Y}’ÜëÌkÎhxÕ"­cvüî2ôºïqÃÁÂ$Š×ÖÛ¸e{󢬎¨Ìx•éØVzö“¶§]R°2IJVŒ4où{á•ViþbÐñÎþâ–¤E£±áð xB—á|áù/³‚ÖüÃKûÅå#ø$Ro~2¶c0lÔíBûأ˰£/ö¢;„²ê“Ç/Â;Šqf÷2½l4šq¼ãŲ}sJÆÑg܃Üàoæ£dçN”æ!w— σŽóÔÇbýLjˆ)Cñ‰ô“éúLö÷%÷»Û 3ÜFO¸ÓMk/ž û¤ïý0HŸ³Ÿð:ž‹óúòK¶ °`?̃v˜w¯û÷m0ôE7 •Õ•¯ÑÛÚú1ñ­²eÇi{ZIÁ&0HR²b¢å-xÿÀÃç¡g?ÃtÚ=‘Áò|?M4°ý+¬ „Aò…çÏó ÁÒzµbŸ‡-†ß¢®žIïW’eŒ#IªXÆxõãuë~¼§Õ£Ýæ‚7¸â9 ßp/LN õµ²æëÜ@ç]”Ô߯ÀüJ“0 §å8¶Åó +ó9Äú±œ@Õw—Â&Ì.ỪÇp¾ÁX¼ŸÈ2]ŸÉþ¾ä~ÿÆÆ= :ÃE´G -ésö^Ç»·4a@ÇWýñé#]:ÎcáIÔ³¦ÊꈚŒW±œÆÇ0>êÀ=S#tº³04·/9r޲eÇi{ÚÅ‚Ml”>¥ÕÆÛ cùúàçšüìÔ~„œ|ì2=› ÿÒJÃò7Wèò0È ùÂówá§ÆVü.YAsÂÑ^¢Œ¯ Éa^ÛUèþÞ Wô‰8"I"õæšÎˆ»=a³ ÖÿÀ>8sÀ–>½£Ÿ.¡s<l80_9tɶ®Žw^ÂO1WìÐ\üc 3p™Ž$õ‡ gÊ5»`rI{XÁeByŒ3t¼³Xÿ|CCx#Ñ“�¼O¾Ç¶÷>…ÙIq‚W™®Ïd_r¿ð ÷N| ÛÆXø´Ú(ÉÏEÑñÛpÇØêOúœýHuÄÎ/¿ í,FçÑS蜘Æh÷”fä\´šŒW±ø<wq¢høy. ËvB»³ùkc/ò)[vü‘¶§],ØÄIéSšù€ò[QßÑ2®EEòõÃr0ºq­´Ò°üÉxMiþ<¯ É!´ÚÃà&’GZïo1>æÅÿºㆱ³™P6K ~‰ñ*~krã1–ìùœ¦ZÔw…ŸGšÁ˜ã'ÔWÂä|úL!fhÚþ‘Øÿ³ø§ /¦£(ÍÏG¥êW^£á‡§K]•?ÀF^ÎW²êSý–fó t»|âõî·Ár«ž˜mxy’Õ§ðûgFlÒˆíµëÅâä}MÕ8£½’>g?q^þ¨ŽO7¢¶ëMè[RÂïO=j2^}pË )=‹®…1†øžëEÓÞÚŒØ!¼‘¶§],ØÄIéSæ°i3Öl3Á%éc×J+ ËŸŒ×Ä‘æmÍ Û3+hr ãUi¤õæý3g*>߇’ …vÛ~û˜3Š¥¤So–¸üb¼"àDzã^ŸMåBžàÙ™Ó\ñÖ¡X·B|Û” ¾˜GŸàzÃßp¶ý¹ØÛ2ãõ hø5æJï¬\ÿ±Ã¯1øìwˆD‘WŸÃè¬Ù‰ãíƒâ{i ÏM{‘›SŠªcûPãxËJ$«Oá÷·„.#‰­8l§Dädésö^ÇÂK3v‡œt.¤kh¿ÿß˜Žø”Õ‘¹8¯½1ŽiÌ1—7.ávÆã¼NÁn؆m¦Áˆ±E¸ÀäØÄ‚¥lÙñGÚžVR° ’Ò§4l~3¶o<ë¼G/ßS˜ªÿŠüwªhå5 jo¶‚6ŽQÇ=˜ g¡ÓÐÜþ¸c‚g(-_bñª4’z`ÚžMizFgCwíÐU8£ô[éÓQ®[Ð=&ÄãUÀt·×—sØ$"øœè¾¢GME9Ê«¾€¡õ FÓa<zîáÊ}iø*6ûüÌb‰êYQ ,Ö¿üðk ö7"{UŸÌky3DF:P“÷ÊMýð ƒ0•“PŸŸ¬>…ß/x­hغú;'»oãBuÊ w‚×̧p4l–ô9û‘Öñ4Ü÷E]•‚~k*™.‡®ÃQZGbå/øÜè½u_i߇fßJÊ'Í;�¯í[lݮDž…–twœGõ¦ ~}$^?€ùÄÉ›Dé²ã´=mdÁÊ$¥Oi3íkECý·h˜š3^Aý¡Œ582^Gš¿_'×£ˆÅ¡Í)D™V‹%ùX[ô:Üj:{&À?ü Ö^W˜£,"•Hê=*gq&tÞ8ôþºÒ³Qu?}zÃ&2"bg³ó1¹sú=÷;“¶oyoÙ$Vè5óu„Q«ë_~ø5ÆâýD6 «>gŸ¡iüõ¥Ð½RÏÀç´ààÁx@ƒHVŸÂﮪ­Ö^¥I³µ ÏCóÂìšÈn$uÍ1ë|ÒlF©gÉ¢ä~æ?ƒ±ç¢Øp�%9ñoy(Ùÿ5ΟÖãZÆW|/Ö²²Z6½‹­MÏÀJ‘]¯&Òö´K –ÛP9òQZiXþd¼&Ž$ÿÙ§0nÊC©î×°ŽSìÄúš±÷@ôAÒò|"­÷ Ñ�)Ã&ÃQ[D˜ñšÿ> ó×q8Šñº$E3^ðÜi‡5|Å6’b‘¦ ÷O¨®j€iÁ°ké»ý(*®A³Í£rãU~AýNv!¯>ÃŽ)h>ĉ{nL;Á9æÙ·9"^pœ$«OÒûß ëì÷è w|% {Æu¤ÏÙOxðTÁÐ>agÆUÝnlªþ‡øo nÙG$}»Ò:²˜ÿ4L{#^kò·ãXãÿËù†PR¾%yOÜÇÙ†{ŠÖ®Ò«…8ÐJ—o¤íi%«‚P9rŒk%ec°üÉxMIþ'0lüd‰WS„oǦ06¾xöZiù>YRïþ—èþ§:ÓcŒúmÐço@YíUØ3îpG4^#· /!Ú¶afôÆbg™X¤)Ã÷ ®7ÒDðÚи­»ÍƒÁ™eµÁÊ.œ%ç’W ò~BÝȯϷ¶^®îT\Ç[V"Y}’ÜïíGßàä²ú,¼²£×³Ø¦IŸ³Iû_ ãŒ¿„é�#`=‹ÿãÿ ]IQZG¤òMÀe» _íCù˜8‚1Tù0^gá}úcðír-l¯zŸ.Lˆ*]v¼‘¶§],XþCåÈ5®•”Áòx؇á…öÄ\ñsfs©|Qð;qÃxžÐe8éoa ¶†rl×ß °þ�j°©Ü€_Ùõ£œ8Ú¶° «´|Ÿ,­w±Ÿ ÷6lúöáè[ÍéÓ›�^ß¼‰Ç+XFÇ7qóuø—DãÕ¢CÝ¥–àJ祺íb¿|—fÉÄÕ[–Eª$‚çÎì­Es ‡X¼“lýS¿“]È«OùÇ[V"¥ú辆ýÚ£8ÍV‚c¤ÓÕ;°u~§Šésö³¤Ž…�üiïÍß™WæÅ·Ì ¨©Ø‹C_Á’ñmÃìÝ|Úclâ*zûÒéN¢ºl öÉàJ—o¤íi –÷P9òk¥•&R>ÞÎlÆÎŸ ö{qëÂWÐ2g%Úï§!Ò*Ÿà„yW^ð³e“f'šžÏ•'»Î,l Ù%9ðî¹§àuýWpµoc½°Ú1¶Ìyq"1¤õ¶oÍ;s[tË ‘“»¦çÑ7Õ¦OoØ ê!”UŸŒò‚›OìEw(bÛpxüQv.óÈÒ~y² µùiXyeSp[Û`Ô3y“_iÊ4ÉÖæû"•ȪÏŽ·¬DJõÑmFy0~äñ„ˆtÐŒø¤ÏÙ¤Ž¹?óaNËE¼ ³wúJGXÚ…ƒæ~q¤­|ÙñFÚžv±`y•#߸VZi$ùsxfsIþþQ<`FÃþÒà™‚59¥Ø¯?‡Óº¶Ì¯b3Ÿè:‡†®Á(çÂÓ›…¿JË·"ÌyÇÖ|”Õý§÷ã#Ñ€Ò×áÒ÷Èeå»FƒÜòó英}•H I½ëà]hJþ†ŽñPß5»¬•ôé {Ñűýw/ŠâHãAÔw‡ŸA ö'ßcÛÚ¤bãÅ…0Ž>ãQŸ5È)ÚƒÏ?Û‚ ec[åÕê5+ódHö~‚/dÕgÇ[V"¥ú8Ú‹îgÑC<Å‚ô9û ¯c¾Ï¼Š°c@Í Ð5þ {ÇøÝ°¶uÀ找ÄPR>iÞŒ>z„g2^}J—o¤íi%Ëu¨ùƵÒJ#ÉŸÃ3›’ügûaÚñžøÙ;È/û7‡ŒliLªpÒ*Æñ´Ï…·[Y$¢·wÑéÒò­ˆ§ïBûH�Â@¶ˆFHËofìÛ®ÃMÛsÑÐvÂÑÑ€£W$/"9$õémxžeBW¤Oo˜ñzµ]#¡ëhŒ «öȲކ…Ñû¨/þ�e‡¿‚Nw µŸmE¾†MŒ4Ã+rŠœ&l×¼‹Rýà×y¿U ³3v#™Ô©×ÉÖÆû"¥ÈªÏŽ·¬DÊõQæN ÒçìGRDZμÚÎápëËЕ¥ud1ÿi<oÚ &%¡ ÒŒÁþìf ¥çÐã}§¤|Ñò|C°Þ8=Û=e¸ˆö(!ÕæQºìx#mOY°\‡Ê‘i\+­4’ü9<³)Í_xz]°±˜YŸà@ƒ±Áñb¼º`Ù_c§ç·SFI§£lë9Øgæ PiùV„… Åsõ[uÈa+hÖÔ‡R“]¨ûz.8<‘¤õ>…þ¦O°Q÷(äy—ÅîüÕ¥ùx§²•ƒ•×ÚVGÙŽ’ÚCåÞ~üÒ¤CµØ/kË÷£îÂ] ¤aå38K¿fפܜñ:¯õk”êÔ©×ÉÖÆû"¥ÈªÏŽ·¬û~2HîO`§D²¿Oð¤ŽYìî®?#μ.»[iYÌ vC¶4ý.¾ÉÙ»½g¬ãÁÏÆÏa°§ÿ(PdÞ‚·Æòõâç¹(ª8ŒÏJŠP¦ý•ÆÞ¨á•.;ÞHÛÓ.l�žÛ×pb¹ÑRO§Ò0ä×J+$ÏlÆÎ&Gë(**ªPQÛÊÁ¶aÌå…(Ùíü@x:shë¸Òò­[m/þ]“lEJ4^ß­G·×ãÞø¦é*̦à+í6ïzºHKêÝÿ}׿CýÙv ÌÌ×¹sÈÑéÓ›�FÚ?ÇÇË­P 0}üypõžK¦C_¼}ÁùÓóü>@¾&â¼&FÆû"¥È«OùÇ[V"•ú˜ÈN ÒçìGRÇ Äî–ܯ�áù ž|yò—¹0w8z´~ºu•øÞa;@wC£)ƒ¾gþ…ÉçqØë3²”7Òö´‹ïù,©‚³Ï”"jÞœ…ÊY„¿3›ñä/øúaáÁÛ0†ñ¨{@îÇÒò­ŒNs=ê;‡0Òyïl4ÀÀ븆ºmÐä°x£‘1<‰d‘Ö»·¯Ä>Ö$"&j:õ&¸¼àÚ£ÒÓp·CÁ&#±wõeq�ì~€~Ó�“õ ü6=òó·£öÊ“¨³Ìj ÙúÏ|¿1ØL ø{§3è$„ˆÙõÅSk2¤RÙ)Á§>©DRÇ ÄîVZGóŸ†óú!0ǧâg’”÷º&¢÷n‹÷§iÞÌâf¬Ùf‚+XPóÆ«GüotãZIÙx$mO»X°¢ñj9…Ú WEef¡6cmQ5~ˆ8ÔÍs·…)xú”F„ÃP9‹D?³S-œôÊÇ¡ÝhÖÆOÅ'»¶¢íV/<<¬\‰yÒܾ :JËÂ8ìæÓ¨ªü Wì‘¡C|p\¹€®QNWÕTŠ´Þ]0ks‚Ÿ-›Âb¢²ë´!¸Ðº7šÂý0´ÞGßÀÜî! ôÝG«a? 5¹Øaz¾¢Á!çŒMj ìîËâï~¦ßâµõ6nÙÂ}¨‹dë?­ú7sí G¥[¹3‰¬úF`¿eÇA7Ðíò‰×¸ßË2ïÑ•H©>&°S‚O}&R‰¤ŽˆÝ­´Ž,æ?ƒ—æÏPtfwXná¡Ó›‘± 4oS¶oj _cÆk)>(\MŒ¸ëJ—o¤íi 6žavóç(Òä¡dÏ!èn¹–}¦Oix•ýÌæbLµ¸oÁ† GpÓ=7+šVùæ½²æˆ ‹Pi~Š~ó§È]ó.J ½¢™µ”ô–_XÈ“œM¨ø|J6üÚmûaŒORiùd“e!ExEZïb»;^‡ l’­åª‹òPT}-á/¾`ºµ5Ýz#xîã̶¿WšÖ¡èøm¸WôÊ=c“JfŸ7a«†… ڂ‚ý0ÚaÞ-Ê¢ÙCŸÂžŽ"ÙúOö~e ã5QäÕç0:kvâxû |bÿÜ´¹9¥¨:¶庇âPV>©ÐÇÁó{ù;%øÔg"•¬TÇ+ÅîVZG$ùû‡p¿í7ŒÊx·))ËÛ?ìÄ‹…3ãlB÷"¾ÑýëèlúRä—ˆ²x1‡ÒeÇi{ÚÅ‚ ÀsëkTí)‚†Åz¯ VÒ-=ª«¾Æ­ŒÇWâ<T<Ä:³Œ©–aã5è Y;W~34}úwXÙÙeÿS÷|{”êM«|ììßöhJÐ3*–ß ]…î™'h<tÎ(½‚ÒòÉ" CŠðŠ´Þ'1äÁ¬÷)Ì5›¡É)ÁžýßàVŒó®ŒLèMpåÔbÀñªÝbŸ°UÇ¿…©ëyƧü36©$`7`ã–& fú/âÓ3Ì1–8@vœÇÃYÛüy!ÙúçªßY€Œ×D‘UŸÌ»yy³ØÄ6=Òš¼÷Pnê‡ïæ+‘ }¬H¢ÞùÔg"•¤BÇ”d1ÿ¾w"ŽþD¢¤|,ï•/ÆFé²ã´=íbÁÎyÕ}sp{XaÝõ_Ä<·§´Ò,Ây¨ÏlJó÷ÃÓù5N·Íb¢óŽvzà}�]éÙŒ„‘äòdÞxõþ;còÉ!CŠðŠ´Þݸ¥;ˆ=…ëû.¿Küìªtw2r–{ñEÜÑÞ:…@o:bL&rÆ&¥nt~ùMh;Ô0:žBçÄ4F»Ï·a®˜Æ°Ã†^Wì­uDtdÕ'ÛÁ´G‡Î?þ‹ŽúÒÐVÁ™eãJ¯D*ô‘ŒWb9R¡cJ²˜ÿ2¾wblËe°¿+Ë›Œ×øIÛÓ.,Sš30:"ç6L[Ûq'ã+¯"<‡ÊÑw,VLFÈ1û¬ m¡+)i•ov×÷Eœ& òjï!š„i•O”À¦/æàkf¼æ3‡GëWÓ1çy.¥å“C6†ái½³§¿ ¨Æ<Ð<„0ñ�õ,ñ¢½ëS¡¬ú¤ä(4DuÙ¡eœzÉ?c“Jf×°¯à`™IÓFÔªÔ‹v²õŸìý_ȫϰã-šqâžÓÎ_p޵åf«¬­Žó¤BÉx%–#:¦$‹ù‹ïLË T}w)ìÈÏ%|WU‚âê‹ G"QR>–7¯ñ“¶§ /XaÚ‡é%/GÆ«·¡rBÛ¶ØgÒ$‡2¾$ùCù|„j#sȵxÐÒþÎ Åcù¾\Ü:é‰îê¡3=ëÔ}þ”Õ^…] ñé²0¤¯HõFlwÇ›áXÒLÀÚz?Ã+¯ËÌ"KRÅ2Æ+CÞ›T"¼4cWq5Œa}†Ù| í÷ÿ‹áÎêò +ódHö~‚/ä×§�¿÷ †½©™’L…>’ñJ,G*tLIóùÞ‘¼Zð>ùÛÞûfgúÃß±¼ÉxŸ´=mxÁ Ãq®j3rÄÏØç‹)öàJÉŠ‘æ-/¼’²1¤ù‡9ŽYä5CWYņá(ã¼ôÊ÷muÇqÁúF2àÍôʰ¹BŸÐ9!†ÒòÉ#†£Œæž„½PÑ‘êÍ,¦}oeqéÓÑxýé:ÇÃû,ÑØ–èüü6àD‡žJ#Î÷ïˆF³´ßõ[PÉÎú…®ÕD²õÏW¿C$K¦ë3úHÆ+±©Ð1%Y>?<] Ø[s)¦ÿ%åcy“ñ?i{ÚÅ‚‚ݰkKk# 01Yîc F\¥•f‘eV12ä¢Zš¿ƒÃƒh3öð‰þ1Æ5+ÃÙc¼FG̓|^QÞðG%P™ñ-<Ù|bŽýL=ªó¨lý'{Ê‘ûœXJ¦ë3úHÆ+±©Ð1%áY>–7¯ñ“¶§],Xæi/¶Ï;Ì 'àG¬Å#¥•fù{á•Viþ.üÔØŠßÝn¸’ÿm=Ž 9º¨ítËg©®Áw¦–Åò35 ªh ª›gle8kŒ×,äó +SUêŽ=¶­ý�û›„¶ë£»îóeŒ×�<wÚðp2BwVð¾˜*‚g¹ ª`ˆ˜Ð¼ªÛMÁX|ܲÈZùÎ4ÉÖÆô'2cŸKÉt}¦BUm¼2OýÍ'p áW¸g&àzúbîHˆ¶Ç° ÐdL²¤BÇ”„gùXÞd¼ÆOÚžv±`øGþݾïðÀn€½D¿ùŸ¸–ñmÃò÷Â+­4Òüc­l®CQŒøoÒûS4ÿ¹"’â_Oµxow œQìªtÈ—-Æk6òyEµz#ø0öj¾_}¯nk3öì]Æx•¿ã$¥ø_ ãŒ¿x¤òlçp¸õeèJ]°²K†dïOòcŸK‘WŸãxjw‹¥,ExeGoD‰—TèãÃ^OÂï–Lës0–ô;ÛPw¡§«þŠ\æ„óoçñý.ÛšõuëQž†˜ÖÙL*tLIx–åíøzƒ dÑì†ýÿ‰ºCUé²ã´=íbÁNãyÓÎè+G\œyÆò{á•”!Íß…kú&üËj…u!uÁtâ4Z_¦ÿ9cÅü…Wè:s5ÍÑ_ é/kV^³pÏ+Y£7¾tYÚÑe}¶Œó#¶ãD‡ºKa;&Ì-¸¬Ûƒ-Ëx_L)œoÀ¨gÞ‘ hnÿªw$[ÿüô;l˹¼ØçÄRäÕ§ –ý8v:Üc¸§«w`kÐSþÒxî+‘R}ô½‚ëÍÒ>AîÃÃ9g‚‘dVŸð´~†wªÚ1"ŽAš>Æ­ ¿µÖ`»® ¶!¸]vtèNâŠÂ1­³™”ê˜ð,Ÿ4oö>>ÝÏÂÆùscý¦ªO kïÝ5!~k¥ËŽ7Òö´á+¼nÃÑ-x$©–b®Ò§4 þ1î™ÅÆYšÛau³ùÑQZi¤ùG;ó*J<Є¿V¶Fÿ–^ùä“ù²ÅxÆì¸Õr¦«ÝpͼÏq¿õ'ܲ…Ç%&RA6éÍʘğ‘ýÇÌ4î֣ǫ°ɶô÷ w9E{ðùg[°¡ìcl«¼Óyï$[ÿüèüØçÄRäÕ§ æòB”ìÔB«H͘Ͱñê¾:ÝutGŒá6Â_EcÐjZ¡_$³ú<·³$'¸í™MÆW«¹a!ìë'»ð5MÆ$LJuLx–Oš÷2;¡RJë;àµ3öÙj"MO¬u!>Î[ŒEƒ+œ­R²b"ó<wq¢høy. ËvB»³ùkcŸïQZi¤ùG[yý7~5îCÞz=lQÆyé•O>é/kŒ‰NÔlþíÎI3Ï`Ú•œ’Oq¬r/t=£¡/© «ôfEÄ—åOçaþ}(ì(‡.ÇϨ+Ú¤øêšà4a»æ]”êC’ÍÅ/vbÆnÄ!Ó@̉CžI¶þ¹Ò™±Ï‰¥È«Ïa<êGN©#¥úè6C+^³Ï¢' rJÿ†N÷âj=û<“ì×va2d¼¾[÷�^ÇìÝ{M--0ýð%´›êÐ5¡ÞÝ™&Ù:VZGx–Oš·ø>¾vMOœ’÷±ÛÝöÚ0Ú^ˆÿvÂÑÞ€“íîàûQé²ã4=­?X°+¦eÎV±¿+…4oÆ2hJÏ¢kaµ•­Äö¢iomÔó=JÊÆæãÌ«¦®÷#Ú¬ôþÔ“lþéoàa_TgQñ ´|rؾEyÓï¢F0Òy yk+`rú ¸L(O™±”lÒ›•‰5Ó+B·4Â6¥¬…<˽f×Â*Èœñ:¯õk”ªT¯“­ÿdïO5rbŸK‘_ŸluûL†³)ÙFŸR}tÿ }Óc¸$k7^´…Fkðß.ÇMèNÞ†'¤"×gÿ�ÌG΢Ó3„Îê Øhx‚€0‡¥Ûò×!‡ÅK/7Ãú:!Ÿ”ê˜ð,Ÿ4ïYxŸ>Å‹%Í]´O®\@W0¤Ü FºN¢8ô~Tºìx#MO;g¼Î§jÁ¥ºíxO{—ÎVýˆª·ÄôæËHŸÒ°P>Û°m‰7äðó=LŽ-î7WZi¤ù»p­ÁŒ§’—Æ«e™§W>ù¤W¾(¥‚½Å®a)JË'‡Ùç±§þþè¿úâwCá‡&á´ÇÁÖ¡¥ÏE$Œ´Þå;PIŸÞÈwî°6Óûwîþ;lG‡˜lýNǹөÇÐo‡Á>w^ÎoÕ!Ÿ &5óµ*õ:ÙúÏl¿Ã¼O·‡í–ŠBš<Qg òêÓϽziÖ`MN!Ê´Zì,ÉÇÚ¢¯Ð¶š)‡”êcÿßQùÏÈ÷O¼ƒ÷~-þ›9漇ºâ3 ;W2«ÏsÞ>˜ë òøUØ##¸òí}Ðþ¥ÄI©Ž)�ÏòIóûßÛ×p"BGÃúÜ 2MöÓÊ«’Á‚\M¦?²ÔùÃdjóyXy Àkû[·ëq§g~׃îŽó¨ÞTïÄë0Ÿ8¹° «´ÒHó_ þèe‹ôÊ'ŸôÊç‚¥®?w÷,ÐYzØ„ª¿êÐnµÃ1 ´|²X8¸š¢zÜóLÀÙi„N÷ š­o"D2,Ñ™TÒ§7¢á)Ó¹ÃRÄ~eI¬Øt"þ¾ûþùML¢ûmzäçoGí•'ªõþ™lýg¶ß‰µ‘Òá‰:K`å7³OaÜ”‡Rݯa«­3ëkÆÞ7¢ú¶X Y¿Éý1· ‡&›ÄAvÓÖäî¿ÉÏÊk‚oÖç¡g}¹á¢øîB\ó|DL’­c¥u„gù¤y/ÓÿÎ÷¹~7¬÷Ÿ-¼ÙßVi{ÚÅ‚eÛr¢¾;|õ+Šfma̳UJVŒ4ï¼4ïÅZ¦$˦w±µéYp%†]+I²ù“|áùÇ 5–r>B}çâùfö_øáf!PèM«$Òz—ï@%}z¡!uî°”�ÆìÁ0–n—Ø Š}òÀ´ZîÀæIl¥gµÃÊ=’½?9؄ȼ÷éÄvKRdÕgà ? s&B„©ü›¹ÕLa cãñ;ËJ©>ºBuUL úÐÓwûQT\ƒf §3 ·õßp„­nfVŸ¥Þ^ËYˆœ\UÆg%E(Ó~ŒJ •“)Õ1àY>iÞ¬ÿ=ªï.…ÚK—ð]UIÌ>Wé²ã´=mxÁ £÷Q_üÊîj?ÛŠ|¹åÍpĘúJŸÒˆLÜÇÙ†{’lÍL‹[u•Všdó'ùÂóg¯®à‰+¢>_´£v§6öo—í:=ÚCÛA•–ài½Ëw ’>½_t2;,eDZùøM8}Ì<7aWî{(©ªFeyƒâÞ†ƒ^´Ù Úò0k¼h'[ÿ™íw·¢'¶[Š"«>…1Øʱ]= ;) ãB 6•ð+»~Ô‚GÛâ^…M©>F •#xmhÜVˆÝæÁ%Ç+™Õçp˜÷ìÝÐhÊ ïûæÀ©f÷8ìõä=; Rªc À³|Ò¼£ -ò½÷)ÌÎ¥ÊJ—o¤íi# Vðöã—&ª+Ê¡-ߺ w1°LH„ô) #ÚÖÜi¼¼q ·=KeTZi’ÍŸä ÏߎºJF#^ø³OO`Íû?Íwñ¿FWÝî…]�JËGðÉÒz—ç@%}z#ß¹ÃR á5:kÞÇÚò+púߦ'–gzÑN¶þùéwÛ-EH‘UŸ‚æ]yÁ{–MšhzßÎöýdXé~ÁsgöÖ¢¹o<êY²¿Ÿ:X_·k¶™à :o¼zÄÿV’>'Ò:–,<Ë·rÞ~xº°·æRÔðqJ—o¤íiÕª4‚ÏÞ[ð•ö}hÖTˆÜÒ¡ŸÒJÃsÙ1Ô%_¬mÚó£i<oÚ Mn5­¼®r¤õ.ßJúô&†ñ*ü‰ÞÞ9gG‘ΖÂôþê;èï8…âyGI¾~Xžˆêe=•d£íd럧~'‘ÝR„yõ9‹‰®shèŒØM™â?>’z} ›ÌÓŸGkw?Æ–‘…}0ek@ñ¦FØg˜¼Ìx-Å…ë¡¡3ÜI‘zK-<Ë5oÿ÷~„A§ƒÞØŠîç£1ß…J—o¤íiW.ØØ+›Œô*Ø)?�sÔähÄ¿ç¡dÿ×8Zkd¼.A]ò¹`©®Áw&v–+t–ÀÔ€ª¢-¨n~Œa9ޱá¾cqöXiùR‚>:›R$õž€•ôé ;sÚc§IÓéÃ(Ûz.8@œ Ay¶ýü"†ñ*éέCщ»ðLÿÎsl•ù2¬ÁÕ[åÈF/ÚÉÖ?oýŽÜÝR„Ùõ)à¤NóS«^8.W¡€M扟Ï%±ß8~;æ¹úd?µLÃÝ}ßè~û¶ Øô¥È/;Žf럪œ(ã…ÔêXêáY¾%yûžâråFhÄÏÙß‚Ió!Žw,úc GIÙx$mO«`ãYÙd(Y1Ò¼§1`Úƒñ3Mþvk¼k(Þ«09Žñ(³ÒJ“lþ$_xþQBåãxÒ¨Å{»[àŒ² TiùRßÚ€JS?½xSˆ¤Þp ’>½Wó>ä—ìXêLJ{ æiî6ØPŒ7c¯Aü^ {Ó¯GYèE;Ùúç­ß!ï¬É‘éúL¥> ¯[QùÞ.èÛm Þùßkô™ŽÅœlâMŸ—â…õLmpÇ‘©Ô1%àY>iÞ~¼nÝ÷´z´Û\¡Ý³ð ÷Ât úN(¥ËŽ7Òö´Ò‚•·²ÉHŸÒˆø'à²ÝÆ…¯ö¡ü@ÌÁX‡d¼FGõò ¯Ðuæ jš£{TZ>YD››OšÍ¨1õ$ÈžXDRï 8P‘ܯ(Œ>z„gª_Ë./ÚÉÖúôgeÈ;kòdº>S©~ëרÜæ/e¹mþüè³�Ÿã2* Þ Ê™4EGa¢‰™„`å— ÉÞ¿<Ë'Í›me?´ÔIžh;ÅòA¡tÙñFÚžv±`å¯l2Ò§4áðõã¹5{q¨â+XhÛðÔ'«WÓ5ÀØúÏÇ"VÔÂPZ>9lz¬/¨‚¡eÞ}ú\ºªÛMÕÿÿmÁ-{ÄÊ2‘’zOÀ »N±6…3ƒW½Ob.Ê“lý§OV‚¼³¦‚L×g*õQpþˆOëïada¼ÆÞ©Oq½ö#ì0 D}ÿð£ÏÌaS ª¾EKØ;Ôl¾¶ ÕÆ«â¿;`£-ñrI¥Ž)ÏòIóf}n-ê»Â½í³3æ?¡¶¸2jŸ«tÙñFÚžVR°2W6éSšÏ_]$oÃQP—|Ñg]5\8Þ‰ÿ tœ1à—3©y¶s8Üú2tE¤i½Ëw ’>½‰qæU’N¢ºl öÉÐ=„Ò$[ÿüô;ä5¤¦>'`m½OèJ©ÕG/MÈË/ÁNv<¡¬pnA¢økôLD7úøÑgæ×¢gÎÞ˜Ìõ¼áZcø]!V&µ:–zx–oIÞ>;šÊ7„ŽíDYa®øu(Ö=ÄD3Ié²ã´=mô‚oe“‘V¥ñ¿Dwst?ÏÙö»am눬_i¥I6’/,a­•ÅÐê†Í517«%ø0Ügƒ™v¼ž{¸Òõ粎<fŸµá¢m"tE$Ê’z—é@%}z³Ü™×ð´ Íý¢N¤ƒd럟~‡¼³¦yõéÇpUElÀ¶³ƒ%­îзä ï÷—²ä~a®î«Ð×TB[^…ã†6ôªaS�cö´˜L¸Úí û4ð�­–;1ÇxD|¤\ÇR ÏòEË[ð9Ñ}E/ÚGå(¯ú†Ö'ÍÀ¤íiW,ØeV6éSšP¨M>J>*BA¥ƒý-Ø«¦ôú¢„PZi’ÍŸä Ëßo…n{"«1ÜñNJË' ·ZQ&Sì4ö't‘¬,“!Ùûã'μ2¡×}AOßâµõ6nÙ·M© õèO<DóÎzWìÑczK‘UŸAqy(­5Flm5ÃÒ5€D\ ¥T=÷ay8Q÷><³X`›Š®üèó,&:cóñ›pú˜yn®Ü÷PRUÊòôxiz/QRªc À³|Ò¼ðÜiÃÃÉ]œ}ËE¦B—á(]v¼‘¶§•¬Ì•MFú”f vC¶L¡¿©g¬ãÁÏÆÏa°/U¥•&ÙüI¾°ü…˜>=ƒ®‘°bKëú ï0Á彫´|²pß@]ÝÉ`Æ|ù4Ê·Ôà‡ðs°m6 Ó¨2)x×ëHÔì v.í;È/ق‚ý0ÚaÞ½k4Û`èSç¶TµéOl䤈¥ÈªOöžÚ¾w©wsqTðš0H©>ÆœD Ň}-Éý…mƒ?2ç GxΚ÷±¶ü œþ·1áñ‘l+­#<Ë'Í›í¦ª~¶$ÅØíÂþ¶šHÛÓ.¬ü•M†’™·àéÀ—'™[¹šèÄÑ£˜ð{Ðã|ÒJ“lþ$_xþìÌk3Êó P²“m¥ü…Ìãµf t=Ñ)-Ÿ,¦†0ðgä€föÆÃ¢ü£¡k"ð®×á¨ÝlÀnÀÆ-lG„€™þ‹øôÌ#Ñ(àwœÇÃÑ|RjÒŸå‘?"–ÂÊ+~f0ò ûîÃ)9So‡Ùp3óۆݭ8¹*|Y‡ÊJ,6çïQ6=‚úNú;N¡X2¸}ý°Œ†„ˆ”ê˜ð,Ÿ4o±ÏµœBíæ<l¾µà²® •: lÃKuTé²ã´=íbÁÊ_Ùd¤Oi¦á¼~("øöü‹ú tM,ÝR"½?õ$›?É™ÿ,|®n\ÑE…v7ªŽ7¢µïMÌí‰JË' ÷-[aƒ–þ‹öãÅȉ¢€H Þõz‘,ð+¸Ñùå7!ChGO¡sb£ÝgPªR½Vþ¬HéPw©%b µ[ª/FHK‘UŸ³ÏдõÝà=Kg^cN¢Ö@ÃßB²¿ŸJ'ûÖ¡èÄ]x¦ÿ@ç¹³Ðé.Ã:J“1‰’RS�žå“æ-ZGƒƒø3rhæ ?ù.êÖ|¥ËŽ7Òö´á+we“‘>¥™ÁKóg(†™Q‹Ér ÞŒÌ(&›?Éž¿w,VLFTärNŽ”–O±¶kå쀜4¥”dë=Ùûã'EÞ`8Α*f×°/jÜŨízú–ºH¶þ“½?u,3Ú­§3‚q"¯>ýxÝz'ÌB1¥Ã’ƒMPÉ'¥úènG£Ù.Du=AkmìIT~ô9„ß‹áa¯*'Æx%¥:¦�<Ë'ÍÛ÷Oçaþ}HÒÆ\ÿ½ŽÚ ÅÙÊi{ÚÅ‚•¿²ÉX¼?õHóÀÓv.X1þ²ÎàAédó'ùÂówÁ¬Í ~&M±IïÏ0î6è ·Ñ#ÐØ18ê‹:±B$N²õž>½I…7ØÄŽs¤ á¥»Š«a Ÿ04_CûÃ?T±í9êÑŸ•ˆ1rüŒº¢MtF0NdÕ§0{«ã5t»|âõî·Ár«žÞFW"¥úkUSóøŠä~"+I¶Ž•Öžå“æ-ö¹1ŽjhŠÎF0d[M¤íi VþÊ&CÉŠ‘æ[i2uP:ÙüI¾ðü]°¯Ã…pçFæfè*« ³Dwr¤´|²ðO`ÌûÿÀmmƒQÏâwÐÜþ¸}´ú‘jx×k)ÉzƒMì8GÊð܆îÈň-{Ë{/åuéÏrÄz'j³¥Qµõ“näÕç0:kvâxû |ž›ö"7§UÇö¡\÷‰LÈûý¥Hîwÿ ½ñnت˜\ƉmxI¡<V-)Õ1àY>iÞbŸ{­Æõ„µ±<0‰V§ø×¥(]v¼‘¶§],Xù+›Œ´*媾»fÜ\ÂwU%¢Áý|ÒJ“lþ$_xþ^  G èÌØÀ'úÇYY—…0Ž>ãä²cÑ|þÙl(ûÛ*/ mõ$Rïzj9Α2ð^Ê;ÉÖ²÷§6ú; wÿ6“­Ã4i7²ê3`ƒ¾¼9ÒMé@MÞ{(7õÿLH·•H©>F=ó:¦JT¶Em¯üè3¡)Õ1àY>iÞ1Žj¿£é¯‡¢:Sºìx#mO»X°òW6ìïJ!Í[€oho$J€÷É÷ØöÞ§0;—žÿRR6F²ù“|áù»ðSc+~Ûþæv;ñßÖãØ£ã>Ϋà4a»æ]”êƒUû­zT˜¢ñmÄ!Ó€*ù¼Â»^§–ÄŽs¤Œ˜! Ž 9†÷RÞI¶þ“½?uˆýÌøø?„<dÕ'sØ´G‡Î?þ‹ŽúÒÐöÿøœ<x¯¨‹”êc´•מ+7`½ÞÕ;8?ú,’ÁóýÙLJuLx–Ošw´•W+z~ý•yBo› }o¥ËŽ7Òö´‹+e“‘>¥‰†ž®ì­¹uuKi¥I6’/<ÿXg^ס(Æv,éý™%`Ócýš] ñÿæŒ×Ax­_«Ö++¯$[ï<éÍÊ$vœ#eda¨ìÑŸ�ÆìA}°t»DM À;ð�­–;4Ø—¼ú˸ï<ÊsY·qâžÓÎ_pŽÅpnŽØµ')ÕÇ;%4…Gp} ý#ä‘ÙóýÙL²u¬´Žð,Ÿ4ïX‹|ëPxà‚¾-¤HïÏ~Òö´‹+e“¡dÅ$›·ÒJCò%‡4®é›ð¯°Ù,«µ ¦§Ñú2ýº'›©ÇÐo‡Á>7óæ·êÿÁÈŸUü”H¼ëuÊñá~Ûo Œ“&ª÷R;ÚëJT*{ôgDZùøM8}Ì<7aWî{(©ªFeyyŽyõ9ާö—xë}ƒaï¢ö ¯ìèõ$ÖR¡ƒ/BYîŸÑ`ê•¶W÷x—q&Å>gø|“ Sžåcyû‡x\ c+¯ßÃôTê$ϽŒwl¥ËŽ7Òö´Ëìò+› ¥•&”V’/9¤ùG;ó* šð×ÊÖ¨Û±”–Oüîøç7 0YßÀoÓ#?;j¯<Q­WV^á]¯³Š, •lý'{ê`¡˜Ž i`Zì~^£³æ}¬-¿§ÿ-\¦#äm8NäÕ§ –ý8vš9å[L§«w`«á fÄÿ¹oÁ† GpÓ¹c!:©ÐÇŠù‰$!�@Þ ‡}ÅÏäùþ,&:¦$<ËÇòv›kôOðû£n¿…ÒeÇi{ZÞ•&”V’/9¤ùG[yý7~5îCÞz=lQz ¥å#ø„w½N-xî´áádÄ*Ú ŽôRFÔP½x6¬ÞPÙ£?l›åÔw:Ðßq Åó»<|ý°<Õy±yõ邹¼%;µÐj#ÒA3f3l¼&�OúœÑóýYL²uœìý+Á³|,ïpãU.J—o¤íiyWšdPZiH¾äæãÌ«¦®÷#Ú0@z?±ZH¶ÞÕ¥7±Î؈)îX±IÀB@M*üi†•]2${*¼½0–¯eZ‡¢wá™þçÎB§»Þˆˆ…¼úÆ£îY+/+‘ }Ìã5Ãçû³˜T蘒ð,Ë›Œ×øIÛÓò®4É ´Ò|ÉÁò|ÚVëµ3ž†Ÿ#p¿’œ+ŠDiù>á]¯S‹h¼Zt¨»Ô6 kÁeÝlYÆ‘›¬Ó¿ÃËœ¹"–G^}ºqÇb]âáyöY.&¸>ú˜Æ«H&Ï÷g1©Ð1%áY>–7¯ñ“¶§å]i’Ai¥!ù’ƒåo®Ð‡ÂàðûåÍg+-Ÿ<¦áî¾ ½î{ÜpŒ‹O#^[oã–í5 *S ïzZbÄ•›y‚ÆÝzrÊ“�«Kˆ•WŸ±¼âkWÓ1wVS&ò~)ìþ¬1^ EH…Ž) Ïò±¼ÉxŸ´=-ïJ“ J+ É—,ÿEãU>JË'‡ÙçMتyù%[PX°æA;Ì»×cf }‰uzDtx×ëÔâ‡û§ó0ÿ.õnèrüŒº¢M ¿PW3«Kˆ•WŸ.Xêt¸¾­ÕÜ ]ùT7?Æ0¯‡°:N6)I²ù+)Ë›Œ×øIÛÓò®4É ´Ò|ÉÁòÏã5`7`ã–& fú/âÓ30ÅV“ç±Çð$¥g¤V;¼ëuj‰uæUƒœ-°M)¼¿Îó�í½K¯KØÑÞá]ðO²õŸìý_È«Ïh^ñÅ>ßþvLjG¾©ÐG2^‰dÈ´¤¢ (Ë›Œ×øIÛÓò®4É ´Ò|ÉÁòÏã‚_~r 3ŒÎ£§Ð91Ñî3(Mb`A,…w½N-¢ñzíï0Üýw˜·_1Ùú1ìKÖa·•e‡q:,,Hd:]­E¥Ùº²Jü/ÑÝÜ�]ãÏp°pv~7¬m°y¢ÇÆ&–"¯>]ø©±¿‡í‚p»p´×£(G—л,úø°×3gP{ûaY÷3xÕûžó\\é3›ðsàž©Qì[ÎÂÐÜ«›MJ’iHEP –·oà?è ú—˜…÷éS¼ˆ|õ ¢·7z<¾Ú—ò¤íiyWšdPZiH¾ä`ùgͶaç5ì+x'(“4mDmכзˆTl½'{zsããKĤXq^%)Z2^3� •³M>J>*BA¥ƒý-Ø«¦ôú|4äyõëÌk¶~K(t•¼ß_Šä~÷5ìטl:‰ê²]0Ø'Åîän(Ɔmp‡Ô#ÙßO%‚ç.N­eÊEaÙNhw– í‡8Þñ‚&€$Ó:Ò6b¤y3ŠG¡=v*¬}‰éôa”m=ûŒ�Á݆Šqàæ‹ 1ËSûJi{Zõ(|”V’/9XþÙb¼ /ÍØU\ £ä,Ô5´?ü#äM™H¼ëuVá¾cghU'ˆV]-ÌîÅF+ŒwÁø¯ég vC¶4ý.ÖÏú›jqÆ:üÜaü\4VœÈ«O®éŒ¸Û¶ BL¶g$:WR}t›Qž_‚‘1hµ»pÐÜY®WŸ¨·eДžE×Âj+[‰íEÓÞZŠ[¬ ™ÖöûÉ&¥æÍŽñìC~ÉŽˆöÅÒ1˜¦Éx ýWq’-Øô)|”V’/9XþY³m˜y¾gilEÿ4|þG5DTx×ë¬bIœ×¥Æ+„)Œ¿ ]ðO6éàéÀ—'™ór;щ£G;1á÷ [WIμâ$žúdñt›Aýçð¸þ‹ÿÛÅâŽ2Ãj6k/Æ¢E"”êãh/ºŸùBñÁ>³É˜mØf ®óÌÀe:Òç�&Ç&h6ÅðÔ§E#“òI;€ÑGðL†ÞË6Õ¤íi“-X%+†gÙ$_r°üö…<4Žã©Ý%G ^ÙÑë‰þªRZ¾Tà·6 ÒÔO/Û»^gB�þ@øP2Šñ*¾Ðý*š Éý™†óú!h¢¬Dä}® £+×çÜöìwʾ…ÆS¨úè/X£Ù‚¿]ú;våjæÊ;wŒ},Dš|VþýåYr¿Ž{?ÂÀ¶3.¢Ý:´ìªp²¿Ÿ:ðÚ¾ÅÖízÜYXÙîAwÇyToª€á×Gâõ˜Oœ¤UØÃD'“ò-ýmyç²y/ÛT“¶§M¶`•¬žec|É!ÍßËþ ;vŽ@L§«w`«á fÄÿ¹oÁ† GpÓ=7Ë­´|²ð=ÅåÊЈ21¹$I³5¦¸Óá`gl½'{ÿªÂ}¦n¶už(Æë´¦ë´m8ýÌà¥ù3Wÿ#쨂˜,·ðÐÉV‰xX¹>_¢µ¢UíŠãÖßÑ´å/жü ­ûö@wó7 CW݆îh œ zJõQx…{'>ßCä~­vJòsQtü6Ü1&˜øÒç½X+ÊÃdŠÞÅÖ¦gK&º‰ÄaåÊ3™”/ò·åžËæ½lSMÚžv®3H.)E´ß’›”$ÚïÉMJí÷ä&%‘æï‚¹¼%;#ψ頳|¯›ë ª`h DŠéªn76—ܲЀ2$[ï<é ÷,9CÇÙ{i‡>ÛYRˆrrØ”ð´}#—¬ ïXfŸÁrÑ–ó ÕÈÊõÉœ4•Ìm[õ[¡Ëaʺ`®7õPî#èª;—1oÃóÌ:ŒØ¤ùº®‹«­þô5Uã@ëPÔ÷?ú,2qgîaHâÍ92½Â°—V^S W:…LÊ'ýmùç²y/ÛTÃÍÓò\ðÔà’#ÓòIºÄáXüpU¾þè8cÀ/[œÖ³ø?þ¯¡Ð‘ ’­wÞÛ%WÄt�³˜ÈxÍÌyH´ÀbÊ; ÛE¬+¯åag1?Am×HÈx݈ºn·8ˆ=„½ß\@‹ù2~øj6¿‡‰ÐrXù÷—'üþ`¼ñm¦0£zÁeBy(d›09Žñ°UØd?¥ø‡Ðõž¥ÐOi†+ˆB&å“þ¶üsÙ¼—mªáæiy.xjpÉ‘iù–þþ Æ÷`2ˆ//ÍíÿYv«-wå»ä| ëЙ×T“l½óÞ.¹bɶá(жá ÁÂ6èPw©%l·G .ëö`KõEØ‚q ‰•X¹>ø©ï„g¤Õïl zr¼Oa©ûùš\|PøAÂ8©ÔGÁkEÃÖÝÐßy¸à ÙÚ}ªËPn¸¼~d>…£a«°üè3…~Êüè@t2)Ÿô·åŸËæ½lS 7OËsÁSƒKŽLË'ý}?<÷êQÄœä¢,¸¢“µE_¡Ã}Ö•«ò¥3¯i#ÙzOöþL ø†`½qú8°¤Œ×÷Ðúx2tƒÀÿ­7Õ³» {ôGÀÔà þŒÔƒ™'hÜ­G—ú›xˆ¯>ÅA«Ý‚úªÏpüÊ“%áÏ ¾íò„®ä‘J} †l[å‘4[›ð<¤ìš(ôS¦àG¢“Iù¤¿-ÿ\6»^Mpó´<<ïJAò-ä÷gŸÂ¸)¥º_ÃŒ¼Œõ5cïxe ÎSùÒ™×ô‘l½óÞ.#aa:ŒåëE¹sQTqŸ•¡Lû1*½ÊÇv[PYv§Ãœ¨E¦ÓÕZTÒ¶á à‡û§ó0ÿ>$9èrüŒº¢M*'N2]Ÿ©ÕÇ7è:û=º†ÂψFIÃ^.·5Rè§ÌÀ“D#“ò-ùm™ç²y/ÛTÃÍÓò\ðÔà’#ÓòI~?ð†ŸÀ䊈—' ÂTþÍœ#Œˆx’\•o¬3¯¶s8Üú2tE¤‚dë÷v)å-œ¦ÝÐhÊ ïœóÞ~Çao¬‡É©p|U·Z±¼X™ÅNÌ ¯é'Ö™W r¶4Â6ESeñéúLö÷#ïü~•úŽ ÐO™‚ˆN&å[úÛüþø[ïe›j¸yZž ž\rdZ>Éï c°5”c»þ&zæÏêX ãB 6•ð+»~Ô‚GÛVa¹*_Ï=\éú3âÌ«Ï,D¦˜dë÷v)e6ýf¬YpÂ2o¼zÄÿ¦a5B4^?©í¥ˆ…€É®“ø„Œ× ¯×þÃ݇úËP²õc˜Ž(ÄM¦ë3ÓúÈ>Ç ýÔŽû6qG(?:LÊ—=í+=pó´<<5¸äÈ´|’ßœ0ïÊ ~¶lÒìDÓó¹3°ìšb®P½šÎ×´]8…$[ïÉÞŸ^LÙP¼©ö¦EÌx-Å…ë¡I‡GYQ¯+B^Jcá·êQAÆkàÇ$u.I‘šúôÃçK̼ʴ>ò£Ï"þ!ÜoûMú‰õygjarúB×DªáJ¢Iù²ª}¥nž–ç‚§—™–Oúû³˜è:‡†®Á(çÂÓxCnþ¹*_÷O¨®j€iaƸ¦ïö£¨¸Í6¯)$Ùzç½].eîî‹øF÷#¬£°éK‘_vWìãÊëÕH;öl‚3æ±mÍû±¿ýÏÐ5ÿ¬>ý!–#%õé·âLå8ÃBÐÄK¦õ‘}às\FeÁ;A™"“¦è(LérT·Ê`åË3™”/Ùßæ½lS 7OËsÁSƒKŽLË·ä÷£„šY®Ê×÷ ®7Ò™wÁkCã¶Bì6½Î©!Ùzç½]r…ð;š¶lFM»+Êê«�¿û&j ¶ÃèPϪé޼úôÂq¹*ú¹Ì5ëPTsV÷”¬I%y¿¿”Lߟ:؉T}‹–ðmÃæ‹ÐiËPm¼*þ»ö1Š_œjøÑèdR¾ìi_é›§å¹à©Á%G¦åKö÷y/_ÁsgöÖ¢¹/ +d«ˆl×›¸ ø‘ÀBLfàn=€\M1ª ?á~ßÀ܈'¸ßúª ×aíœ*š!ý!‘UŸôë Ŷp%̸ÓU´›ªadÿ¾eǘŒv™i}äGŸÙdXΜ½ ¤üD£¶áZ=d´*ï}Z&åËžö•¸yZž ž\rdZ¾dŸ«òõöÃþ"2í ^õ>xÉ’Uz³"xn_—‘ºÀHû\s§Á‰ð'œù¹b¹±² Ošeâ0óJ²õŸìý©CÔŽô®0¦ôv ƒþ1‘WŸÓpw|‡³¿¸¥’¢QÛpø‰ôši}äGŸEü/ñàÿ<ƒ“?ÃáuÖ­6ºúµÁ•D!“òeUûJÜ<-ÏO .92-_²¿ÏUùº¯a¿öhD<Ì“¨.Ûƒ}R4�^àæbl8Ð7³I‘Uz³",J Jã‚íÍÜÖ]ÿØ.F¡¦æt¯ a në5ŽW¡\«EyÕøÎtl€©2²G˜nBYõɰ>'2±>èPúôD…È«O7n_y€‘åBeÌ>ƒå¢ S¡Ë•H…>&›ø`Ï›vB£ÉGÉGE(¨4c°¿»s5ДžCvU ~t :™”/¼$šVÜ<-ÏÏ»R|Ë“ìïsU¾n3ÊóK°SØk%išû1KÆkÊÈ*½Y¾¡!¼™ VÓYè.·àûÊÐäîÀ—uçp[ï»�C��Œ¦IDATé5Ï´÷Æ”$`G{‡;tÁ?Ù£?±â¼F¦4Nr¨VFñã‚Y›Q¾Q’ OàìûJ¢tþ©c vC¶4ý.özSèoªÅëxðs‡ñsìñNrá]Gx–O=í+=pS¤4‰Cò-O²¿ÏUùŽö¢û¹òOY¥7q øý°íо…6Wƒ5kwÃøß‰ôœ£v[PYv8bG4®Ö¢’Båd�Ñxýé:ÇÃŒ$¿º 3§$ŸÈx‰¼útÁR§Ã¥ðó®æfèÊw ú‡Ã>»Ûp|e®´>©©¿<øòä/aÛD'ŽíĄ߃îtÄ´^Åð®#<˧¦ö•¸) RšÄ!ù–'Ùßç½|#™}Ö†‹¶‰Ð‘(«KoDÅò*>-EΚõÐ6üÇoâÌñsh³´áá¨Â+¯1㇧hUf¼&›ø Jœ×%Æ«ø­ÉqŒ+ïÙKµÈ«O/†#&ŽÌØÀnÝCñ¯òQZŸøÑו˜†óú¡èžœó¾@×ùìW Þu„gùx/»tÃMiÒ$É·<ì÷“MÜ ¼FgÍûQe\LäÕtÌÍ* ½lå%õ0·5TSð)Œ=ŠWsÞ^Ë+¿Ô} ÆÎð8ÅLžZÉ*ˆßªG…ŠŒ×åP—nˆz\•#Šñš¯ÔêE^»ð“±ƒ’ØãCèoÿrt°&ЕÖ9õèô ^š?Cqõ?ÂV°Åd¹…‡Nozvš¬RxמåSOûJÜ”)Mâ|É¡¦NAp𰣏?´„½t/ŸFù–égm6 Ó[XQÔ¤7+#‹×~€y(ÒÛ¦€™Á'xêUx5Â?±ÉpóˆŒW~ëâºÝÓaÊãUÀt·×iÛpLäÕy¬3¯yØbø-n'MáÈû}ù(Jñá~Ûo¥wdZá]Gx–OUí+ pS¤4‰Cò%‡š:¿õkl:šg]µ[±¿="¬¡(jÒ›xX²º–1¦1ì¸ ý¶÷P°ÿºƒ«!Ì8Òa¯€M$ìC~ÉŽEq;KŸ[ˆ²‡q;P’¿6-ƒ¼:wášÎˆ»=VX­óé?°Ž Qg¸Jëœzt:€1{Gp’×ÒíÂŒxíx€VË •£0¼ëÏò©§}¥nJƒ”&qH¾äPS§ ¼¾ƒ[ñ2lžàµ¢¡4ëõ6NŒÕšôfefá}ú/"X…?ÑÛû:Í“"³ð½m•|…aï4|îGhÞÿ¡ªÎ¼.‡ºt'Šñº$‘ñºòêü-ÆÇ¼ø_÷cÜ06@§; Cs;¬î©„Û¢Ò:§žÅDçql>~N_�3ÏMØ•ûJªªQYÞ€¥w™¬bxמåSOûJÜ”)Mâ|É¡®NÁ§y? Šö ö´ººƒ(Ëkr+Ðä /‰éD]z³¢b9 í±SR/¿§£lë9Øgî6ØPŒ7_¤Ù˜Ä@WÚ»¬p gÇʈºt'ʶá%жá•WçxûΣœyýÎÙ„ŠÏ÷¡dÃ_¡Ý¶ƾñ„ÚŸÒ:§ž„MMb_ò!±¶ü œþ·p™Ž·aá]Gx–O=í+=pS¤4‰Cò%‡ú:…ixl×ÐPS ­v7ªêŒ¸åHl@C$Žúôf9–[];³8ÐËœñš}¨Kwx}ó&¯°­#ðø&n¾¦½±UçÂ�LÛs )m@ÏèŒØ<CgŒgž ñÐU8h€JëœztzÏ›Ž ¾ÓþŽS(Ö¼šÎ×|ý°<Ö×4£¼ëÏò©§}¥nJƒ”&qH¾äÈŠNaº­w$¾? …É ½Y €ÑGðŒl´ .Ýa‡PV}Rº*/I'Q]vˆ¶ /ƒ¬:Ø _Ÿƒm¦Á¹‰¢yãÕûoèJÏ’·á$™ó¢¾^”yŠNÜ…gútž;+êñeX• ¶Šá]Gx–OMí+pS¤4‰Cò%‡ª:á5zÎíGQŽ&(÷bRW Ìl@UzCp…ºt‡¯a}M¬TAÆë2°2ŠŸ ØôeØdx‚vÉŒ×ü÷Q˜¿.á0hò~_>JçŸjïSÜhd«:ÃE´[‡v†EÄï:³|jk_JÃMiÒ$É—jêv6®ÝŠÚ WÃâÓut L†¾E¤5é ÷ø^Áõf©á# ÷áa굺t‡¯GPÛ5ºŽóx~„Œ×e]çþ—èþ§:ÓcŒúmÐço@YíUؽ‰­ *­sjÒéÅ•×\UÆg%E(Ó~ŒJc/¼dÀ*ï:³|jj_é€›Ò ¥I’/9ÔÔ)°8¯Û·›àZò‚ Àæ˜P5éÍÊd8|„ûêt×ѽd.=l:„¿êÚ`µ¿€7‹ô[]ºÃŒWiÌÝ¥xaÕÕ’ñº ™®s¥_=:ýNÓnh4eÐ÷ ‹Ú=¯»ã°7ÖÃä|ú‘jxמåSOûJÜ”)Mâ|É¡ªNÁÿtGÐð` J$”ú[a¸FÛ†Ó‰ªôfE2>Âm†V,OV¦Ñ“9¥C§›¼ §Ÿ�FÚ?ÇǦ؎º˜ƒ¡?GûŒE¦ë\éßWN3oÛ±fÛü$ð¼ñêÿ[IÞ†„wáY>õ´¯ôÀMiÒ$É—jêfŸ7a«&ÚàžÎ¼¦5éÍÊd8|„ûgè›Ã>!#¦í_a§Ñü·Ëqº“·áÉ‚XµéŽ0Є-ÇÐuò`îöc(Ød„ƒBdÆ$Óu®ôï«G§LÙP¼©1lÎx-Å…ë¡É;†Nš€Q Þu„gùÔÓ¾Ò7¥AJ“8$_r¨ªS†Ðzô̤Û+­Ý`{•«RjAUz³"áí‡ýÅRý 8,ø¶Ë#þK€äêŠÏ$äi•7T§;‚ ­{ó¡)ÜCë}ô ÁíÂ@ß}´ö£P“‹¦ç Û56™®óTÿþÈÈÇBbù‡_óÍ4ÜÝñîGXG™s¬Rä—G³õOÐÆ÷ÔÁ»Ž¼xñB"O¸|ìo™&–l,±²]ÍpóMuÇšJx–Aò%ïòIñã㘌X}ò[Piê§oQ—Þ¬LFÃGD5^gðª÷éÜJëì34mÍAîþ›´òš!Ï}œÙö— ìÒ$êËñÛpÓ™ûe‘Wç“r,ݦ-xÐûp¾Ð¥äýþʰÁ³TÓáÇCßR^XÏÔÂäL¤t‰hð®#ÿú׿¢ÊÆóÿiþçþ'ªl,1v5ÃÍ”U¯ð,ƒäKÞå“à{ŠË•¡efrK’f3jL=pûhý#¨JoâÅïÅð°7ý“ îkد=ŠÓKb‡î‚Á>)ÚÇ·LÇ·]‡›Œ×Œ!ø†`µp¼j7´Úݨ:þ-L]ÏÉCkÈ«s,u ø¹»GºÃæaªþªC»Õ—W^+UBçb ®ùX ð9.£²à¨²kŠŽÂDasRï:²eË–%²àÿ÷CßȱŒuN¥nÞ ¬Bx…gÙ$_rð._8›ë ª`h “cÆUÝnlªþ‡øo nÙ£ÌØ)GMz“8ü¾iåY·åù%ةՊFQxÚ…ƒæ~Ì /pó@16h#ã5íàéè@ï ‹ïÞtxè¼`,äÕ¹ fmNðž˜)ç#Ôw¾ˆ»m²{RM´Á5ÿkv¾¿Uߢ%ìj6_„N[†j# C×ûér*à]G¢­¾2}à…hÆÿj_uepóeÂ+<ËÆ ù’ƒwù$ø_ ãŒ¿x¤C–€í·¾ ]é@Uz“0iÚJ7Ú‹îgÙ½]o¹-`ìoüÂBåBYõɰUñÈÄVÉQ¨œe`õ?.\Ó_Á—Ô™ûE;jwacÿvÙѮӣ=â] y¿?‘zÍÿÀZ€ßÝ3gïFAÚ†Sh¥ ˜”Ã»Ž„¯¾ò²ê:O¤ñO«®sp3úb•Â+<ËÆàQ>ÖÌ7¶ÈÄc&aÏò­ˆ0çÃ0ê٠рæöÿÐVá Àt%{ÈðVº›Â^ÙÑç@G¢­@Ì'¾ûf¼VD•[š*Èx]VFñ3ާv÷RX®|{£ìßþ×èªÛ·'py¿?áz­¦µà÷ƒÌÔôÀ»Ž„¯¾ò´ê:O¸ñO«®sp3úb•Â+<ËÆàQ>ÖÌ7¶ðÄË ïòÅDGŸqrYÜË¢=øü³-ØPö1¶U^@Ÿ—^Åé„éKöá­tQϼJÓéêØjx‚™Ð-j$rB}3^º„ÎñðºwÁ\¡óü<+“Œ×XÈë/¢¯‹8Ì;øNhr«3¾òʘ×kX±à]GØê+o«®óÌÿ´êºHÆF_˹¨f)Ó„Ë)¹Ð^™X«›¼¬0ð._,§ Û5ï¢Tÿ£~~«f'fìF2 ÐYW…`úR__|yÌ'¦/á×,±\u’á­t1ϼF¤ƒf ¨x“Aø „Zúœ n,ñpNÆ«\X]Ç –ý8v:ÖÎ[8¿eúó1~vÇ7#ï÷åÁt˜õAé cÆk¬•/–xè—“ý-ÓDó6Ÿ˜Ë‘eÈÛ ïòE#è°iÍ.˜\s–9ãu^ë×(ÕY•w¬³Ša“VËm7Wƒþ¬Dƶҭ‚3¯ó̯@¨VgüÃptè±míØßô�ÎàŽqt×}NÆë2°úŽÌå…(Ùkgî›G°aÃÜäÀx%‚H'ëÍ–;wÈÃÊf,ùØgìo™&V|*žf?#Ë·Þå‹ÊÔcè‹·Ï…ñ[uÈÿàäkÞGMçkZyU˜Xl6®Œ`(”ç¡g+=†‹hOgÈa nk[ÖŸå_}UEŸ‰àÃØ«y'BoàõOŠõÖŒý{Éx]Vßñ3ŒGÝ)H’÷ûÙÌ,¼OŸâÅ’=Ù¢·—Þ¡¡2Ú›E[ÝäiM>V]牶úÊ˪ë<óeÈëàžwù–¶w>À?¿i€Éú~›ùùÛQ{å ÅZL‘lÖ®Þ^Ë׋ϔ‹¢ŠÃø¬¤eÚQiìU^·VÙYn¦3Ù¢7ð  ËÒŽ.ë3 û©Šë+â'†Ã¦pd[ò~?›ñÃm9 í±S’-ÙºÓ‡Q¶õì3wl(Æ›/Ș%Éhomu“§™èHùØ¿yXu'rõ•Ç3'óeÈë ïò|2oÀfÂÎЙvC£)ƒ¾gXÞÍŸa‡½±&çÛÐ÷”ÎrÙ{GÇOô3¯’flѼßÏf˜÷ì}È/Ù±tK¶öÌÓd¼çd¼7 _Ýäq .O«®ó„¯¾ò¶êJ„Z`Þ†7cÍ6\ÁÑÚ¼ñêÿ[w8ŽD¡³ÜD¶ÃÞÑñ³Ì™WIš3¶âAÞïg3Œ>z„gÙ·¡ƒ V ïÍÂW7y\ýš—%žV]ç™_}%OA$Ž€)[Š75†Vr˜ñZŠ ×C“w # ôè,7‘åÈ3éÌ«²ð9pÏÔî, Íí°º§¨Ÿ!•ÀEoÆV4yÞ~ÇäãqÕu¶úJ«®A$Ç4ÜÝñîGXG'`Ó—"¿ì®ØÇÓ0¨£³ÜDv#ßxœ…Ïý7Œ )1°Òn¼úGà~ߪpº<wq¢hX&¹(,Û íÎä¯ýÇ;^Ð."„øNzó'Þp{ŽŸwù”…¦âBMxûa±ü€`1=AD²ð áÍ’1’ýÿÁ@ÚÜQ«yÆc�Þ¾ó(ÏÕ`MÎ&T|¾%þ í¶ý0ö%6™”RãuÅÐVBð¼ú³+tÍ>8ŒeДžE×Âd�[‰íEÓÞZ´¾¦wgJˆ:V™Á«Þ§±Ä3A<[Ç'a7ü-CÔy—/óñJjÂ} ûµGq:šPZ dO‘,Ì;ëè~~�«Õ–ºÐTõ tí=°»&hÅjdÂ�LÛsD«=£bOî·BWa†{æ ]…3ÁJW÷O¨©>‡–Ю´¥©:íÐri¼N‰ƒþmØfŒ˜˜Ët$t¾?€É1Ò餈:V9‰ê²]sÇC„¸y ´Ávc–õi_¢ú‡£èn(]> mne†ŒCÞåË<d¼„šp›Qž_‚Qw„¥` ûÐ=±"xî´áád„ÒÌ>ƒå¢MîÊÂó0æµ"hüÄNy(­ï€›BåÄ„•SÜlЯÏY4°æWï¿¡+= kãUY¿¿1×ñCõfhÄßÒTá²CYGo‰€×ö-¶n×ãNÏüDLº;ΣzS ¿>¯À|â$­Â&C̱Ê.4÷c–Wãµåªƒ[ÊßAAåe82²³„wù2¯D˜Æ÷ˆØ<y…cùœ—¡¿=º˜‡—­8«Þõz9–1PÒá°)«Qû0Q7®CÓ'ÜnwXêG{ím/Ä;áhoÀÉvwÄj1kKñÃΜ—aÓüf¼æ¿ÂüuÈ«éÀH…,ï÷W Ú¶aaÎö/Q¤Ñ Wû-¸ù<ïÊÞ—/Í{±6¼‹šÞÅÖ¦gËÇÚ%b³âÖòL½O|ƒh?þ!4kÖCÛp?ƒ“q¼Ë—yÈx%RL^gžÀpäÜ¡Ëô»|+ÀõVœlFåz³"l¦W‡ºK-a³¼-¸¬Ûƒ-Õa¦ˆÄYf}>q½L”ÿÊü+R4aÍ»¿À½QÖ*f0ÒuÅÖ(&Ì ’…ÿ%ºÿ©‡Îô£~ôùPV{vï²½PLdÿ¾ü¢§ñä®Y‡¢ÚV<OPÆ´1qgîaH2™^aØKÚœ0žû°<˜Ìòá™ÅÛoƒ~ÏC4–¯Ç͇¨m}Æ™£@ÞåK?d¼)ÆKM-~h‰2@ &6 .G®Öœ¡A>ïò­�×[q²•ëÍŠ˜ÄŸ‘:ÃÎØíÖ£ÇK뉳ŒñªŠ-`Lþ£Ð;6a&¦Ó‡Q¶õ\0´Rà×ÐjՇݴREÇ8Pê÷ïS˜k6C£)Æ~ÏÞÁ}xáx!þ¿h¸{`¹õ“'s%Ç*ZÖ',I¼…? Àë0£Fì‡5…‡aJ‹w}9ð._fàÔxåùüÈäöÅØƒü–ªQ¤;/ÍFT^~*¾D2ïò­�×[q²•ëÍŠˆÊOçaþ}H²úàrüŒº¢M!'&Db¨} ˜¨æ}È/Ù1aÆÒ1˜¦!8‚Óm?¿ U Xùd’Ôÿ>3;P_š‡5¹»Ððà¥tÌ!ŒÀ54·™fàn3âÇþ×°é7‹å±zOòe» }_^>ò-GÐlópÒOLÃÝù7”欺Õ]x3„¡ŒN(ò._æÈ@oÊûùŸYxŸ>Å‹ÈécáOôöò0[¤Æm¹³ð9oâ8[aˆö’K+¼ËGðI¶ë 3P¢yÕ gK#‡Û¼ÔŒÚ¶€ÅóÎ&V"õÆ£<Rûû3µçBùä~‚Æ¿K&½‚é© ×8ó6,Œ£ïâ(ÿpýªvv“¦†0ðgdÌqlßxºžÑÐuñ¿Í¸¹â;.·ü<—NܺÝCxjú×2u”ƒwù2LzSqÄõù&ßò[¤wl(Æ›™˜eVÛöÅixzþ|ÉiŠN õù'3nóð.ŸaÌŽ[¬ž-ábºè}Žû­?á–í5ÜiE]z³2b¿wíï0ÜýwÈûf(Ùú1죠©C[ÀbLèJ §q+!ÏxÇS»[,y)ÉÄðN¥ñ*¸Ûq¢<r^šv–¢œËP9DZu¤Ñl—\.;ÚëJ“ñ³ñ3¢x'QEoÓ”äïË»|™‡/ã•Õ+m‘âÔxånû¢0‡ùsQ¦u(ÜoJØÑ„bð._4&:Q³ùK´;'!Ì<ƒiW>rJ>űʽ|Ìf®Ô¨7+"À?>ŽI2>D­[ÀbLèJR˜Ó8"*òŒGñ=¿¿ÇNKËy1†·8¸½y6ÁMw|½Ó¾ò;m…é:¯«–Xg^svÀ`›}‰gLw[p[ãwù”%Æ+ïçxß"¥’í‹þè¬ÿ9QëÓ7®W™5®y—/Û·(oú]ì¶é<†¼µ09}\&”“§OåQ©Þ$ŽhÔú¦I¯’EÕ[À–›Ð O!§q¡»)òŒGÌå…(Ù¥œƒ1¼y1^g0渳±!h\ëfüÒëÆÜL�þŒãˆŒãnƒÎp=á;y¬½xöj >žôÂ?G—F=› j€Ñ|½î)ñÍ'ð#ã¢ò._†È€ñ oçÔ¬Ÿ·í‹b}Ž>†‘Õ§8À/o¼ç’AK½05üœ¡mͼ˷<³Ï/bOýüÑõÅï†bþMÂi9Žƒ­C®ûlFÝz“8^XÏÔ'HˆDQû0:óš äqø¶IÊWÿîé>F.[M“¤u(ª1Ñ;Rˆ„ñO`lr©ø­ ¨4õs0!*¾ÓÝw¡Ûö—ý“f3jÌO3l‹ð._fɰñÊãù6ˬ’`ý<n_^ ýÄž(ƒ³°´³ùå:“Ë»|+ÁNWpÖ@ST{ž 8;ÐÕÕ¡±{˜ŒW¥P»Þ¬ˆ�Ÿã2* Þ‰Ú÷iŠŽÂd ­¨©‡ÿ-`‚oÖç¡g[X ÑNú ÖŽäÁV5ïÁd8 ΀æöÿÀÄùsù¿¿^ô¶A£yÚ¯¾‡¹óÁÜÊZwÌ?| mÁ:三×\êïN9³ßS\®ÜMØ{d!1ãËÔ“”>'¯†Òw¡)(ÇW?˜ÑÙÝ#êpº;Íøá«rh6à@ûËÌéïòe˜ ¯¼žÿW5ëWõöÅqt›îp<Èç]>?¼Ãoà «s~f3W3¼ëÍrL¦/AAÕ·h ;Go6_„N[†jãUñß°ÑjŠbp¼Lðö†v䢨â0>+)B™öcT{)VfœÈ3ýðÜ«Ÿóa‘S(–5s€”µE_¡#b¬/ò~&:QýNj;ÝQß9‚¯–ýZè¬ã¡Ox‚ñxvÊ™lz¬/¨‚!Â?ËUÝnlªþ‡øo nÙG2T¾³¢ Å;_ Óó6ôY8ì(žû7Ÿ…5#žöy—/ódÆxåúüïÁúÕ²}Q”sÌ.³qn¦^o„ù—ÞÐL› ŽÓê´æá]¾ð>›™õ¨ToV„mQêÀ™³w#<ÆŠFmÃ)´zÈhM Ë_â–·pšvC£)ƒ¾g˜MÁª«…Ù={c=LÎhƒ+"YÆãìS7å¡T÷kX>ƒ±¾fì=p#¡MY¿¿Ì0Éßn‚3¦ÞÚþŽm†')ÝúœØî:žrf þè8cÀ/Þ±¶s8Üú2t•)Ødí_±Ý4°LýzÅï€Áž‰Ã‚¼Ë—y2`¼ò~þGìØxÖ¯Ší‹ÓpßûÛX ¸pãJLš¢Ïavdz{8ïòņïÙÌlG½z/‚ßÏá`3`“j=¿ÄR›±f› ® ŒóÆ«Güoeæß‰*ÕuÜžÀ°ñ˜\Θ„A˜Ê¿• „)ŒÇ?q ë÷WÀoÕ!%n3*¸t"Hg¸Ó‚ç>,Ýøá›Ï,↳>Œí X®ïb“µêßx—/ódÀx‡Lžÿa ¡ö`ý™Ü¾(À×w¥šwP ý?˜;Ðô2÷�æïñ•ö}hòjÐþ:S¯4Þå[®g3³•ë ‘YT}~IÀ”­Å›ƒ[*çV¥ø p½¨óœùàYÆ£0[C9¶ëo†yk}€Ž 5ØTnÀ¯ìúQ Nm‹{VÖï¯ÄH;éDì€'¢Îtë°3èŸX•Ä •³æ}Ôtfúlq@Tá/q¤s8t1t×BÓ@bÛô“ƒwù2OfW.]@‹ÆkÔ`ý¿ãÕØG³ˆ¼n_FgõÔvÀ­ƒžq«±Y÷(Cž›y—/„@Äl&¡<Y 7D†È†óKÓpw_Ä7ºa€M_Šü²¸Â…“Eu Ëxœ0ïÊ‹ôGIšhzßà•}?uˆ:Ðp W¢z!õÙuõ%;atpêyCða|ÜGº«$» Ù!f¾|å[Ž ÙæÉ|ÙO=FÃÑ8c¼Ï]CÉf#™:…Å»|&CÆ+Ï[¨DÙ¢ë÷r2‚ãí‹ôùŸ,êíoÐo;{&&ìy—àÒ"aèü!×xœÅD×94t JŽ/-MRÇ}Ë!ï÷ãÀÿ¿œ3¢C2&òÁÙÑ€ý»ªP{ú4[ßdÞHYÂ4ž7í„F†áO$ÀÔþŒŒA< {ãaèzFC×™dÎ9÷÷8ƒ;JBÌüŽ3±«ª§u—aÍÔ wù2KfŒW®·Pñ2‚óí‹~+tùº¹391qÁ\¡_á; Á»|ŸÞ Cç—ˆŒÇï°‘ýûñ Ê]@Œöü€~@Ï*ø§w;Ívéd‹ËŽöºädä,´h ;ñ""¤$ï~ÈEt2`¼ò¾…ŠÍ’ó2‚÷í‹¢ý`=:'–ÙË0õ�u;›1‘wïò|BzC$ _"2eéßç Š[¬0±Î¼æì€Áû´´rÐa6‘ÞŒ÷-Tl©žãÜo_dÎ=¾ÇÑ+ÑcŽ ¾?ÐY_†ÍƧÈÌV}Þ勇°àõúóhíîÇXœ[LjDɽ!2_ZõdÚxÌôïóÅ-Nî6è ·ÃŽ±Ô‹gÙ:kLÆk6‘ÞŒ÷-Txî´¡{ü­t©~ö,m™wÆ¢Ší‹ÓpÿòOü½ãÑÌšGÀŒóÎì¯@Uí)èš­ÍØK‚wù–à Çå*°àõ ³™ëPtü6ÜdÀ*Œšõf)¼f³k°Mç—V;™ÖçìjOÉ@q‹Ó‚c“<õgd¼fèÍxßBÅ<Z¨1q€Çí‹Ó|1c)Öü<Äx—/:ÂëVT¾· úv\Þ¹Ù Á÷}¦c8Ø:$>¡,êÔ›h°>gx—/èüÒêEž>³ÉŽn4ë¿Fã æÀ’][Ñv«7úq¡8P¾=‰2NN·Þ ¾ Œ#ðÅ-^dƒñêǤwZli³ðO¬êmî™p½…JTp‹u—ZÂλ¶à²n¶T_„m8cË™!xܾHŽjÒ…ßú5¶G‰'¸L(ç2 <Á+d¼Dú¥Ï³Ïдõ]hò?ÄG…E¨4?E¿ùSä®y¥†^$ó@ñö”ùì½þ�?ï O8¨ac(Š[¼úP¿ñ:û¼ [óàúo×°?wëªöNŸ¡Ñ›Eäu •ر âÏHë`æ wëÑãåa6‘·í‹d¼¦ Áù#>­¿‡‘…‰±-=ÅõÚ°cÙsä!…ŒW‚H²ô9ð†Ú¹Ýg34}ú÷9–þ§0îù>!ж'Á‡±WNôµÖ㯻Ëññæ¸ÞçÄphwˆc(Š[¼ÊP·ñ*øÆðÊÕ‹Öº]ح݆͵×ÐçŽ;TV¶‘¦Ñ8ÀV‹jQÁ:óïCß.ÇϨ+Ú”!Åç}[.¯éà GSòòK°S«…¶¬9â DSü5z&økM¿ñJéCž>ûáéü';_‹oz¡áŽvzà}�]éÙ„ÞµJ¶§Y‡›Äü׬ý òÿ²Éÿ ֊ך­MxÎãîaÑØÏ”ã "3¨ÙxõÁa, ¶áµùùøËš<ä篯ßÅÖ¦giÜeÉi¨Ii˜¬Ñμj³¥¶Œ„ïáÝ8ÌãÕ?/;££†—ÛZß}úšJhË«pÜІ¾ÑÈ`àDZP“ÞDÀú5žá]¾ä¡óK« Yú<;ˆëû6B³0þX‡äÕÞC"FmOKV^?G‹m¯Æxì§ñ¼i'4šhzN¡©V|ÿAï²Gÿ¦ñòÆ%ÜÎtT‘(,Yy­¹ ›óOŒq{¶\YÈx]‚(뵿Ãp÷ßaî½ÅdëÇpÆ”„ŒWea/3-òö¶à·Ÿ«‘»Ñ¡0Cqà{×›¥- ÷ááÀdèŠH*Ò›((:˜M¼Ë—,t~iu!KŸ'Ì»> Å•_Œ7oigĶxQ¼=·:oPÁ™×�F{~À? ‡¼{"‚ÏÞ[ð•ö}hÖTÀìæs0°°1—Þ 2^— À?>ŽI®¦ ÉxUŽYøÆþ„«ï:êþºÚ·£öz/\Ã^Qk9Ä}uºëèŸXÓæCø«® Vû‹U{"½¨Lo¢@Ækæ óK«yúÌü‚t£Íú&e+—Ê·§Å|{&Æ Æž?€¹á�Jr4bûÈCÉþ¯qþ´×85^Ù‡¹^´[‡ŒWU@Æ«bÌ>…qÓ;bǵùùyXó—|ä¯]ƒ5¼n)r›¡!l =iSú7tºi;”¢¨Mo¢Àô…gx—/qèüÒjDž>»qÇb]2‰>û¬ m‰lÎæö/>¼p¼ÿŸM XÑö‹#±z˜Æ€iÏœ¿üí8ÖxV÷Tp¢H˜Ç8M"r¯ª€wãpû0¼\{÷;qÃxžÐ%?D® mCMËc8_ñ9«åþú¦Çp…9céEûWØi´†œ‹Ý„îämx¨ÿU•éMÈxÍt~iõ!OŸÅw¾6'x4iWÓ‘úy¿ŸÌÀÝfÄý¯çâ¼®Ù ½ŽÚ¬ZüpÙnãÂWûP~ æŽàÑ@2^Õ¯ª@­+›â�ßÝ‹[¾‚¶à¬Ñšáý…/¦`7lE®Î.zûa±te/à°àÛ.65 À?ruÅgTº[M¨Ho¢Àû`6ÛÛt~iu!OŸ]°Ôép)켫ÙÜ ]ùT7?^~¢8d¼Šãè»øÊ?\‚ÊËp—4‚™ÆúñÀÜ€šŠ½8Tñ,¼n& ãU¨Ìxõâù3ö—·e¬É)Å~ý9œÖµqj¼²•е»ÐŠÏAîþ›´òšÔ¬7d¼f:¿´ª§Ï^  Gô'fì?`·î¡øWùñJ+ LÂi¹È¥·aBJšz3u»¨Î<‘Ûrg0渓á,t:šÛÿ7/ÛÍfûaÚñžø¢|ùeŸ£ñÆãlLŽM¨Æ™z™†Ûúo8ôHI¬Èx%ˆô!OŸ]ø©±¿Kއ8áh¯GQŽ.¡‰ljO†ÿ%º› küyn¼äwÃÚÖ›‡ü…¨Œ÷fjqQÍ~xî‰/0 [Ñ,D™V‹%ùX[ô:¸pÒ#ÀïuÁÆê´âh0ãß@Æ+Að¯‘>ä¯Ñϼæa‹á7$²Á\ÞïD63ë7%¡ ÒŒÁþìÎÕ@Sz}´ †{2Ô›©ÐE5/½œæ¡T÷kØj«Xž}ÍØ{à^sÕææëù(**ªPQÛÊí¶aõ0 w÷eèußã†cBp¥õ6nÙ^ÓÄ�! Þ³4Ø&² yúìÂ5w{¤!ÑlÏØDpè+2¡öDó0eØÒô»8†šBS-ÎXǃŸ;ŒŸ“ÿÞŒ\T'E0ø'0¹fB„a*ÿfn;‘0…±ñ·sŸs‚à뇅KoÃêböy¶jÞA~Éì‡yÐóîõX£ÙC)'⇌W‚Hòôù-ÆÇÆ1šÂãAÔžæ™…÷éS¼ˆ,JáOôö¾ŽE‰ìGðtàË“¿ÌyîžèÄÑ£˜ð{Э«$ÿ<* 3½¹¨Na ¶†rl×ßDÏÂŒìt\¨Á¦r~e×Zpâh[†Vaç‚«7ë¿Fã§ð ¡˜j·z᡺Mš ‡Ò-MËu¦ÿ">=ólêÇï8=†' “®D¼ñJéCž>§þxµ§yüp[ŽB{ìt:Ýb:}e[ÏÁ>#@p·áÀ†b¸ù‚ŒÙ¬dÎë‡PÀÚ—Ø.$)ï tMpâC†ˆI†{3rQ-Á ó®¼¥ .2iv¢éyÎÀ½Ý¾ Mþ‡ø¨°•æ§è7ŠÜ5ï¢ÔÐ _èkD‚nt~ù :G˜™:ŒÎ£§Ð91Ñî3(ÕYië07¬ŸàÞå#9ÈÒgŽQ{š‡E¿Ø‡ü’ÐjµéÌÓd¼f=3xiþ ÅÕÿ E%&Ë-<tz©ÎU�?½¹¨Ž“YLtCC×`˜Âhé ¼™Xé nkÖ¢I|`ƦOÿë”(‡_|ïù^Uq0ydÖy ûXÌ\6A!IQÛõ&ô-‚XÞ³¼ËGr¥Ï ¢ö4O�£áEV1xÚNãÀ+FÇɳÏ`¹hKÈ!‘^2Ó›‘‹ê$ÇÓ>Þ¤†©ðÊŽ^ën~x:¿ÆÉNvvD4´;Oáh§þÑЕžUO¬ZN^𱫏ÆðÙBó5´?ü^š.$d@Æ+A¤Yú¬Àñ jOóˆ†Ë6<œŒØJ†Ë*‚­¾WÛÄ’”w,´³à™ ôfä¢:9\°ì¯À±Óag5Ätºz¶ž`FüŸûælØp7ݳ¶é`v×÷m„fI§ A^í=L„¾F$ˆç6tG.Â:Þ¹úðÌb­pDœ°vÉ3¼ËGr¥Ï bß'd¸¢XN ê»Ka‹�—ð]U Š«/Â6L«,¼“ÞŒ\T'‡ æòB”ìŒ<«!¦ƒf ÌfØx ¾t?BµñjX§`†¥ýœl•H·Úh/Ý5ï£&¸ÚMñÁô†gx— ä OŸS<ˆÚÓ<ÌpÑ¡îRKØ¥—u{°… —U‚�ßÐÞHšN�Þ'ßcÛ{ŸÂì¤] ¼“‘ÞŒ\T'Ã0upìUö%ÚêŽã‚õÄš}Ö†‹6ZwM÷ ÔÕ]{éŠéòi”o9‚f›‡ŒW"nÈx%ˆô![Ÿ…�üǃ’ÚÓ<¦ñgdÑÎ<Aãn=z¼äivu⇧«{k.¡Z¸'½¹¨N7îX¬˜Œèxù1]0ks–Ö-Û6\Ó17aA$ÎÔþŒ\QŸ„½ñ0t=£¡k‚XÖ.y†wùB™ÖgjOóøáþé<Ì¿IV±]ŽŸQW´‰PBd 7#ÕÉÁ»qè‚¥ºߙ¶ä˜PU´ÕÍ1Lœîv4ší’—®ÛeG{] r(T!Þ³¼ËGrÈ´>S{š'Ö™W r¶4’ï‚PèÍÈEurˆÆáñ:\h 3üÍÍÐUVAg±q`NbÈ5"„Æñ¤Q‹÷v·ÀI ëÉëÌkÎh[6ÆI )I´ß“›B-ÈÒWaö[ñÝ~Ý.Ÿx=ûm°Üê…'ÁxÔ^æ×k‡áî¿C^œCÉÖá…˜ºAðLz³X³^b"OoqàÅàÀpÄ µ€ûøDÿ˜Oã_x…®3QÓÜKá\’ÅÝávXø–zñlØG» ¬OM†dï_ Þå#ˆT"O_‡ÑY³ÇÛá¦ðÜ´¹9¥¨:¶庇â(@>Ô^æ `ôÁ<j ¢·—œ®nü˜ôN‹:0 ßø„ØöBܑތyz#Õ‰ãÂO­ø=|Û¨Û‰ÿ¶džÅQÍvü›¤ bex7y— R‰,} Ø /oÆ€8xF:P“÷ÊMýð ƒ0•“Ð{žÚË<l zÚc§$áu§£lë9Øgî6ØPŒ7_1»Š˜}Þ„­ypý·kØŸ»•¢ŸpLz3rQ±Î¼®CQ‚3²AdÉV“½%x— R‰,}}†¦=:tþñ_tÔ—BÜ•6ŸÓ‚ƒoàuµ—yØî¿}È/Ù±4Ü öÌÓd¼®Bß^¹zÑZ· »µÛ°¹öú\Ãq‡¢"Ò '½¹¨Ž®é›ð/ɶÑ.˜NœFëK2ü ‚˜ƒwãwù"•ÈÓ×�¼}çQž«Á͇8qÏiç/8ÇV›#ü…Ä µ—y}ôÏ– 5ø}Óâh”X}øà0–ÛÈÚü|üeMòó׉×ïbkÓ3ÐIhþ ÞLuD;ó*v»MøkekB3²Ad¼‡¼ËG©D¾¾ŠÆ”÷ †½©1§¨½¬„Ö3µ09}¡kb5±d嵿*lÎ?1FN¼¸„z3ÕmåõßøÕ¸yëõ°ñºpퟂ—u‚ããä\(9f0渓á,túóhíîÇmm!"àÝ8ä]>‚H%òõ5¬Ÿ×ÐÜþ¸“HS{™G€Ïq•ïË$2iŠŽÂd"g=«€Ý€¹tæU Po¦:bœyÕãÀõ~ñuÇ#ÓxÞ¤EÞÞüös5r7`§Ýá â…ãr 4áõ¿EÇoÃM,ÓdHöþ•à]>‚H%òôÕϽz±~>§eZ-v–äcmÑWèp'v<ˆÚË<“°éKPPõ-Zœ†²t:mªWÅwÀ>Fƒ”UÇÂâ yæêÍT‡ ×Ìx*ñ6ü*e[‹RØ Œý WßuÔýu'´oGíõ^¸†½t¶$„×­¨|oôí6¸Bu.ø^£Ït [‡hE›X@:XuãŽÅŠÉ™}Ö†‹1â+=Ø•äï¹ËÃÑýõá™ÅÛTt­¦Á8¡&déëìS7å¡T÷kØjë Æúš±÷�9lJ~wΜ½ ¤E£¶áZ=d´ïpÔ›Q|¥ø;^¿Š:×àK˜mÏY‡üü<¬ùK>òײ•âhzN¦äâ·~íM¿/1R— å:+M H«±¼”kWÓ‘(ý­ôþÔ#Éßm†V"×|z5Ñc/Jî'Α¥¯'0lü&WÄ^ªðP9ÂÆÆßÎ}Ô^æ™…÷éS¸Þú!IQœW‚P Üôf_)[‰\y݆š–Çp¾£ Šœ?âÓú{YØ",À?ö×k?ÂÓ�½x‰¤ƒU,u:\’l“k†®|ª›c8Šâ(=Ø•äᄎº a²‰éòi”o9‚f›‡ŒWBõÈÒWa ¶†rl×ßDÏ‚o‹è¸PƒMåüÊ®µàÄѶ¸Wa©½ÌCq^ BípÑ›Q|¥lg vÃVäÒ™×à…£©yù%ØÉâÒ•"G”hŠ¿FÏ*±ˆt°ÍK¹€ûØ#>´Òƒ]IþSCø3òÄþ$쇡ë ]K¡Á8¡&dé«à„yW^ðže“ŒLìûC4^)Î+A¨z3Н´|'oéA˜„«û*ô5•ЖWḡ }£|ºê"2‡t°êÂO­ø]rVÞ G{=ŠrtsÛ#Pz°+ÉßÝŽF³=L61¹ìh¯+ANŒíð4'Ô„<}ÅD×94t JÛÄ’ô&îI~j/óÄŠóJ„Zà¢7£øJ)€BÑ!–sÂC¬¤ƒÕXg^ó°Åð¢ÒÞŸz$ùÇ:󚳆 9”"ˆT"K_…ØÛ¯Ât¥Ý.Ÿx=ûm°Üê…'ÁiÔ^Âð¿Dwst?Ãá­X¿Ö¶Ø<䇃 Ô�7½ÅWJ E³j^£³æýÅÁ}ÔÛ ±z`º°ˆ ×tFÜí™??7—lÏ<1ÏžKïO=’üÝmÐn‡ïc©φcOÄ)-A¤yú:,öó;q¼}PlŸSxnÚ‹ÜœRTÛ‡òÛüW‚ÚË<l¼´M>J>*BA¥ƒý-Ø«¦ôúÈAp?½ÅWJ E³šœ&ì(®Æ-‘Žmj¤ŸµÙ¢:á!VÒÁê[Œyñ¿îǸal€NwÓ/°Ç^iPz°+Éß?1ïÿ·µ F=s ÒS§Ãˬ2Ñ`œP²ô5`ƒ¾¼¢ú #¨É{å¦~øÃ½ Ë„ÚË<ÌG¶½öO¡¿©g¬ãÁÏÆÏiá„ T�õfj‡BѬ*¢‡ÊAWíVìowÓvqbé`5�oßy”çjÄÏß™sVœ}åî…éyôÁšÒƒ]IþÂ8úŒ{+~¶†­ˆì܉²Â<äî2áùLt­¦Á8¡&déëì34íÑ¡óÿ¢£¾š¼cè™ÏiÁÁƒç5YO¾<ùËÜN=Ú‰ ¿ݺJ謉¬k‘N¨7S=Šf5!¼¾!^Zñ2lEJðZÑPšƒõz›4n±ª‘ VÙ`xë»Ð”ü ã¡]bß±Ì`XéÁnxþÁPišwQRÞв’0 §å8¶E”¡Á8¡&äékØd“æCœ¸çÆ´óœc!]š­MàÝNíeži8¯B&ü¨M(å}® òµB¼C½YV@¡h²q óÂÚBéƒÓ¼E{P{ZÈÔDYþ;X“[&Í‹H«lâúl3 J Áe¶!JîW€ðü6=Ö¯Ù“Kê5[p™PNÞ†‰,@¾¾ ð{ß`x~2'I¨½Ì3ƒ—æÏP\ýÅc6,Yná¡ÓK»—BPo–%P(š,fâjóÖ£ªýÏÐÓðØ®¡…ÊÑîFU·ãTç„é`•íúuÄ1ø?¢º4ïT¶f|å34mÿºàÙ3†ÓQ”æç£’V^‰, ÓúJí% ÿî·ý±‚-Àï›&_!¡¨7#Þñ´bß^ †b:¯™Á«Þ§ð„þ¼0‘A¬j– VýoÐwý;ÔŸmÇÀÌlÐx=rà;ÜsG?¯ô`Wš¿8p}‚ë ÃÙöç¢F3ãõ høîzOƒqBMdZ_©½¬„Ö3µ09}¡k‚ x…z3‚àá%ÚîE5Û&ÌÎ<-I'Q]¶ ûäâÙÆ­MxNöëªfé`U4Ǹgju¦ÆÖ‡x>&ݦŽÒƒÝ%ù Säm˜ÈZ2­¯Ô^æa»N.£²€9º\zîUSt&ëù !Ž¡ÞŒ T€àsâ~³ÕåÐjµQÒ.4÷cVxƒžÆ#8Ðøï„œzÙˆ-}À¦)ú <¬¼’·a"Ë‘§¯ãxjw#rþQxeG¯'±­Ô^晄M_‚‚ªoÑ~æÕ|:mªWÅwÀ>FŽC‚W¨7#‚ÈB¤ÆáZ+‹¡Õÿ ›kbî\—àÃpŸ ÈÛ0A(Ž<}uÁ²¿Ç"vÛœ®Þ­†'˜ÿç¾y6ÁMwìÝáP{™G€ßÝ3gï.µ™C4jN¡ÕCF+Aðõf¡6$Û+ hnÿÜtÆ•ˆ@2Xõ[¡ÛÞ„H+¼ DZ§¯.˜Ë Q²3Ê.›ƒf Ì’ñš,‚÷<¼qz61`¸ˆvÚ*Lªz3‚P Û+5È)ÚƒÏ?Û‚ ec[åôyiƘXD2X`úô ºFºþ8®Ÿ@ñœ^y%oÃD¶#O_‡ñ¨{ ¥q»©½,"x{a,_/–I.Š*ã³’"”i?F¥±^2` ‚{¨7#!8MØ®y¥ú‡õ ð[õ¨0;1c7âi ê ŸXH«ìÌk3Êó B«9¡0Gƒ5š-ÐõŒdÄ8Œ”¼ ÙŒ<}uãŽÅŠÉÕŸ}Ö†‹¶‰Ð•<¨½ÌóNÓnh4eÐ÷ Ãϼ ëjavÃÞX“ómè{Að õf¡""·WίƒðZ¿FiŒí•Äêdé`u>W7®è¢‚Å>ÞˆÖ¾71uFéÁn²ùÓ`œPòôÕ³6'x4iWÓ‘f)åý~6Ã6mÆšm&¸‚å8o¼zÄÿVBgõ¿E¿PoFjbê1ôÅÛçÂâˆø­:äðò5ó5­¼ °ÁêÖ^D÷%<Çr+9Jv%ù{îáÊý7úëÃ3‹¶©èZMƒqBMÈÓW,u:\’xÃm†®|ª›c˜Œ×$0ek@ñ¦F؃žÌ™ñZŠ ×C“w #tü† x‡z3‚PÌSâü󛘬oà·é‘Ÿ¿µWžÐYB¬F_½ O±WrØß•D’¿Û ­D®ù{RFr?ApŽ<}õbp`8BïÌØÀnÝCñ¯ò¡öÎ4ÜÝñîGXG'`Ó—"¿ì®ØÇ£ö5Aðõf¡6$Þ†aê´c8ƹ@bõ«‹«7PWV­®yq%§åª‹·Ä\ÉQz°+Éßýª«`ZXejé»ý(*®A³ÍCÆ+¡zäé« ?5¶âw·î…ä„£½E9º¨ÞÁW‚ÚË<ŒÙ;‚ýŒ¥Û…ñÚ;ð�­–;°y–Û§B/PoF¬zþõ¯…þ¥¼ ¯ÁM>JvîDYarw™ð<¸Š æ`ƒÕ!WÈSÀ}ysD¨“]_ Ÿ‡•Wß+¸ÞHGä‚׆Æm…ØmD´@P4'Ô„<}uæ5[ ¿a*ô-9ÈûýlfDZùøM8}Ì<7aWî{(©ªFeyz¼vŽ x‡z3bUó?ÿó?Á—:û¯˜}Þ„­šwQRÞÐ`_˜„Órc„!V'’ÁêìSwêÐ=vžKÇ“ÆXc%GéÁî’ü#â7ýðþßÛŽ¢¹/úV>ŒjBž¾ºpMgÄÝ+¬ÖÅd{æI8)µ—y˜Ã¦#h˜ûœ×è¬yk˯Àé —é9l"@½±j™7\ç“ ØHoÃó.ÊÉÛ0†t°ÀèƒÓ(.؆Ãu§¡;]‹ÏJó¡Y³åMvøBß GéÁ®$ÿâ+-A¤yúúãcãu܃Ép68™ÓÜþ¸}‰¯ R{™gÏ›Ž ¾ÓþŽS(žwvèë‡åà ´¾¦·(AðõfĪ$ÒpOܰ34mÿ:ëxèó(JóóQI+¯DLŸ¥°³]wѤ«A…V‹òª“¸ðKLG_KïO-áù'¿Xiù"•ÈÓW?<÷êQ¤ßK9…(ÛëÎ’|¬-ú îÄÎeR{YDðöÂX¾^,“u(:qžé?ÐyŽM\†u”¼ ïPoF¬:b®ó‰oVØ>Áõ†¿álûsÌ×/p áW¸ÉiÓe)³ð¹ㆱA¤…¡¹V÷TÌ ¥÷§–ðü‰_¬´|‘Jdé+Ûæ¿)OÔ}±__XmÁX_3ö¸× tõÔ^"ð{1<ì¥ÝJ¡B¨7#V/^¼Xô¶Jì¥ùûžªðOÃGÆ+†t°€·ï<Ês5X“³ ŸïCɆ¿B»m?Œ:S*É?øÅ4'Ô„,} <aã'Kއ@„©ü›¹3êÂÆÆßÎ}Ô^‚Ȩ7#V=ÙðR÷[Piê§Ydb‰^ 0mϦ´=£â€Øo…®Â ÷Ì4º gëPév!Í_~übŒjB–¾ c°5”c»þ&z6=@Ç…l*7àWvý¨'޶Ž Kí… ˆlz3bÕ£ª—ºï).Wn„F”™É-IšÍ¨1õ$åÔƒÈ$zÍBå¬ÏÁ6ÓàÜ*æ¼ñêý7t¥g9ð6< w÷eèußㆃ­‹×ÖÛ¸e{sBFiù"•ÈÒWÁ ó®¼à=Ë&ÍN4=ï ,û>AD6@½±êQÓK=x6°  †é6ç«ºÝØTýñßܲ‡b{«©^OÀ¦/Ã&Ã7"2ã5ÿ}æ¯Cq^çB@½ƒü’-(,Øó æÝëÅÁù6ú¢‡® Á8¡&äéë,&ºÎ¡¡kn·{™ôÞ8‹P{ ÃÿÝÍ Ð5þ ófîwÃÚÖ›'1gXA¤ê͈Uª^êþè8cÀ/ézTÀv‡[_†®"Š^³Û?õЙcÔoƒ>Êj¯Âž¡P4áùìlÜÒ„AÀLÿE|zæ˜+)¿ã<öˆw4 i0N¨ Ùú*à¤n’ÚË<,TÎNh4ù(ù¨•f ö·`w®šÒsèK4.Aiƒz3bÕ£º—zŠ5Dv"Õk7îX¬˜ŒP›Ùgm¸h›]IQº]HòÜèüòtŽ03uGO¡sb£ÝgÈÛ0‘È×WyÞÁW‚ÚË<S°ʰ¥éw±,§ÐßT‹3ÁÐsSp?‡Á>5÷5‚ ¸…z3bÕC/u"‘êµ fmNð3iÒð±mØy û Þ “k>mDmכ礄ßO¼#O_å{_ j/‹ž|yò—¹~o¢GvbÂïA·®:kôc Aðõf·^êD6"Õk,u:\ ;'m67CW¾ÕÍ1œaãUxiÆ®âj%ò]CûÃ?ÈÛ0‘ÈÒ×¼ƒ¯µ—y¦á¼~šÈ‰21å}® rxH¼C½±ê¡—:‘HõÚ‹Ááˆ3ö°[÷PüëR”nÒü§á¾ÖшӭËÄ/¦vK¨ Yúš€wð• ö2Ï ^š?CqÐÁaØd™å:½ ­j‘^¨7#V=ü¿ÔÙ²K8rà;ÜsOÁëú® “Œ ôÂjÄXœ'‰ÕƒT¯]ø©±¿K<•:áh¯GQŽŽƒP9ÑY.~1 Æ 5!O_å{_ j/aø‡ÐuÅ‚›­ç¡×é 3\A§ÝCqÒ B%PoF¬z¸©Ï>CÓÖ|”Õý§÷ã#汸—¾¯@®(;;·˜[~}1¼Æ«©^Ç:óš‡-†ßÍE‰ôþÔ#É?øÅ’û ‚sdëkTïà?¢wô-yMÁÛ cùú`™hòK°Sû sò±Ëôln²€ ®¡ÞŒXõpÿR÷´¢âCh @h–5hùÍŒ}Ûu¸i{>·‚ÖÑ€£Wh˱€T¯]¸¦3ânVëb²=ó Vd¥ÛExþ‰Ä/æ¾ÝDòôÕÛÆÛx¹£Fx…öÆ›â_åCíežùP9[QßÑ¿'WðõÃrðZ_Óú+Aðõf·û—ºÛ mhk§ßªCŽh¼š­-¨Ÿ?ŘìBÝ×ÑCŠ«©^¿Åø˜¼0J· Iþ Ä/¦Á8¡&äé« æŠb”îo‚9l[®Ô†Ëû‹¡ÑšÉxMŠIØô›±f› .I‡8—éy&@½±êáþ¥xCñ—èš0Ìx}·Ý^;Œ{à›¦«0›þ¯´Ûp<FHbu’¬^+Ý.–ä/LÀùðŒzt:šÛÿ³d«p84'Ô„<}Äk3¢Áj:ù .ÿd@eÁ:änûußýOè[r ö2€™þflßxÖ©õê{ Sõ_‘ÿN­¼„  ÞŒXõðÿR÷Ái®G}çF:âØx×P·­�šæÈcÌnzé‹$«×J· IþÂ8úŒ{»Fƒœ¢=øü³-ØPö1¶U^ˆy–›ㄚ§¯ü~Qïý/ñ aWзÁZíü7 ¿Ô^™Áh_+ê¿EûÀÔœñzäî Ñî%‚PÔ›«U¼ÔÅÁ½Ý|Uÿ¯÷QyãuÄöÏ ü²»—GÈa±H²z­t»Ï_pš°]ó.Jõ1êg; ô¨0;1c7â)úYnŒjBž¾º`©ýŸ–äaMî.Ѩ²ã¿í 8n°ÀÒjÅhè[r öBD¶@½±êQÕKÝ} ûµGqš¹÷_H'Q]¶ û¤h¼ÀÍÅØp  n9‰¬#Y½Vº]„çtØ´fL®9_ŸsÆë ¼Ö¯Qª‹~–›ㄚ§¯Ì;ø{(¨4¢Ç3úŒ…L;òJ yM‚oÖ*‡ ÔõfĪGU/u·åA×þZh%išû1KÆ+"Y½Vº]HòŸz }ñö¹ v¶;ÿƒ¯y5‘; æ Á8¡&äé« ×n`hIüî) Ú~G".…¨½,B¡rBÝPoF¬zTõRíE÷3_è‚ b“¬^+Ý.¤ù ð»àŸß4Àd}¿Müüí¨½òÞ“0ªj·ÄªGž¾†Î¼¦j/óP¨‚P;Ô›«z©ÙH²z­t»à]>‚H%™ÖWj/óP¨‚P;Ô›«õ¿Ôø_Þ†ñv"'¡ˆl…wãwù"•dZ_©½ÌC¡rBíPoF¬zTûR¦àî½ _•£@“­ÙúA$¯×J· Þå#ˆT’i}¥ö…Ê!5C½±êQ×K]€¬Ì ØÏÂ(°¸˜% ?ºkd¼‹ðnò.A¤’Lë+µ)RoÃÑn‚/Æùz‚ ø‚z3bÕ£¦—úìÀeìÈÑ`¦�eÇÎáÆü W˜ÂØøÛ¹/„ïÆ!ïòD*É´¾R{YdÑÛp.Š*ã³’"”i?F¥±7¦ƒ8‚ øz3bÕ£®—º^— ·.Ô¡¢ü0ÌàöA 㕈€wãwù"•dZ_©½ÌóNÓnh4eÐ÷ ³7*¬ºZ˜Ýã°7ÖÃä¤÷(AðõfĪGµ/uÿ(ž?0£¡f/*}†Z m&áÝ8ä]>‚H%™ÖWj/óDzž7^=â+ÉÛ0A¨�ê͈Uú_ê³ð9&oÄÞCÞå#ˆT’i}¥ö2€)[Š75Â>ìWf¼–âƒÂõÐäCçHjãë‘z¨7#V=ª{©3/ÃÖ6õ:èt4·ÿnßlè1ïÆ!ïòD*aúšéDÌ3 w÷E|£ûÖÑ Øô¥È/;+öqÑ´%‚w¨7#V=ªz© ãè3îA.ó2\´Ÿ¶Ê>Æ¶Ê èóÒŒ1±H²z­t»à]>‚ ²‘�Æì0›Í°t»0#^{ Õr6Ïtè;Að ½ý ÕÁ­¼'¥œ&l×¼‹RýCŒúø­zT˜˜±qÈ4@³ÆÄÉê¡’zÌà]>‚ ²‘YLtÇæã7áô0óÜ„]¹ï¡¤ª•å èñÒ.&‚àzûªƒ÷A«’òlz¬_³ &×LðzÎx„×ú5JuV °N,À»qÈ»|Ad#ÌaÓ4 LÂktÖ¼µåWàô¿…Ët„6„  ·?¡:x´**ßÔcè‹·Ã`Ÿ ^ú­:äðò5ó5­¼ ðnò.AÙÈ4ž7A}§ý§P<ÿîôõÃrðZ_Ó0Að½ý ÕÁû UYùøÝðÏo`²¾ß¦G~þvÔ^yBÁÕ ¼‡¼ËGDv"x{a,_/ö!ëPtâ.<Ó óÜYèt—a%ßÁ;ôö'TïƒVEåó܇åáhÄ «Ï,ئÈz%áÝ8ä]>‚ ²¿ÃÃ^:jC*„Þþ„êà}Ъ¨|n3´bþì7¤‰¶ R’ÕÃdï_ Þå#"!oávèíO¨Þ­ŠÊ羺º ÁïBº|å[Ž Ùæ!ã•X€wãwù‚ÈFÈÛ0A¨zûªƒ÷A«¢òM aàÏ9OËLÂÞxºžÑÐ5Aðoò.AÙy&µCoBu,?hàsàž©:ÝYšÛauOÉX‘ ÀsûîOD8m˜}ËE¦B—Ë¡è ÚÝŽF³n·{1¹ìh¯+A…Ê!ÂàÝ8ä]>‚ ²ò6Lj‡Þþ„êXnÐ*xîâDÑ:ñ;¹(,Û íÎä¯ýÇ;^ÄiØùá6WcIÊ;†Î‘•=²ï*F¬3¯9;`°M„¾Dü‡¼ËGDvBÞ† BÝÐÛŸP±­>8ŒeДžE×Âj+[‰íEÓÞÚ8gTEãÕrUß] ;Wz ßU• ¸ú"lÃ+ç¡è ÚÝá6z¬VXR/ž ûè¼+!wãwù‚ÈbÈÛ0A¨zûª#ö u vÃ6l3 Fr3agY˜›Xæ…%À74„7’ ð>ùÛÞûfçÊÞTû'06I3ÃÄÊðnò.AAüAoBuÄ´ŠF¦í[lݮǞùUÉtwœGõ¦ ~}$^?€ùÄÉWa߬7ÎC¯ÓAgø'~8þ ¶U_BŸ7ÃÛ† "Nx7y— ‚ þ ·?¡:bZgðÒ¼kÅ¿³ïÄNïbkÓ3Ärˆ¿x&E‡ñYIÊ´£ÒØ o{sÙoD¦IV•ÖcÞå#b5!ÀmÄ¡èíO¨Že­÷q¶á†Â½ñ.I¯0ìõŠz §i74š2è{†Å™V]-ÌîqØëar¾ }/6Šª½ý°¿ˆÜº<ƒW½Oá¡C¯D¼‡¼ËGÄjB|ן©ßñ¾Ð5A¼BoBuÄ´ÎÂûôÿÆàÛˆ­½ÂŸèí}§C#n3Öl3Á¼aÞxõˆÿ­Œ+œ¢ƒj÷5ì×Åi¶y!DuÙ.ì“â³¾ÀÍÅØp  n2fW5¼‡¼ËGD6"À縌ʂw‚}HdÒ…É:½? ‚[èíO¨ö‚‰ó|Úc§Â ;1>Œ²­ç`Ÿ ¸Ûp`C1Ü|Ø0ek@ñ¦Æà÷çŒ×R|P¸NBå”ç—`§V ­$íÂAs?fÉx%B$«‡Šê±ïò‘° êT}‹–…ˆ,]„N[†jãUñß°‘cD‚àzûª#ö •Åh݇ü’†KÇ`˜ŽÃxeLÃÝ}ßè~„utB|Ñ•"¿ì®ØÇãZ½UtP=Ú‹îgQ¶5ù§áó“µJ,Âô0Ù¤$Ñ~On"‚‡�¿»gÎÞ8j#µ §Ðê!£• x‡Þþ„êˆ=h `ôÑ#<“ýî Às§ÖéeŒ¿Ùg°\´a*t¹™Tû­ ¨4õ“³ "nx7þÈ8%B)ßkØïýƒN½±ÝÏGéýI*F„êXÎxõÜiÃÃÉ?Â+žlŶ"˜ï²‰‡mþ§¸\¹šHÙXÒlF©n_,?ʱˆ¢zšx— •í=ªùÇ;^K*€F„êˆ=¨]Æ]Öðï³èPw©fs .ÕmÇ{ÚÓ¸¼pæGüP½ÅÕa^ùÕÆ~O)6=ÖTÁÐ~VÇŒ«ºÝØTýñßܲĵ½™XÝ(©§©€wù‚P#~¼nÝ/¾ãõh·¹à ·™…o¸¦'VŒODæ¡Ñ¡:bj™z µ˜Ã…yî—uU¨ÔY–1<ø††ð&hñ1gGÐ4Žf² µù¬¼ú_ ãŒ¿x¤Ï°ÃáÖ—¡+‚X2^ ‚X}0'Œ‡–¾ã1—éH\‚È,4: TGìA­€©ÁAü¹ì8óŸ|ÛT<ë‘>8ŒQß¾z€÷É÷ض¶0ã¡r„1;nµ\éj7\Ì{²÷9î·þ„[¶×´Ý‰¯A¬>X,÷ZÔw…¿3g0æø µÅ•qÅr'"³Ðè€P±µ~¸:óïCp»Ý Éõßë¨ÝP÷Œª0zõÅ ìðWÐéN¡ö³­È×h[Þ GÁßtOt¢fó—hwNB˜yÓ®|ä”|Šc•{¡ë }‰ V†ŒW‚ V%>;šÊ7„"ìDYa®Øß¬C±î!&â™ã&"£Ðè€P˯1μjŠÎ¢Ç¿##ÁÛ_št¨®(‡¶|?ê.ÜÅ€7>7Æì÷”"`ûåM¿C@�#Ç·¶&§‚Ë„r•V_‰¸QROSïò¡^ŸÝWô¨ßñåU_ÀÐú£nŽ TÕ{P+¯×aüW¬Vk(õàéN´:ev‚oÖç¡×é 3\D»uq,ºQrÐ=ûü"öÔßÁý·Q_ü.òj:0"LÂi9Žƒ­C䨉ˆ2^ ‚ ‚P4: TGìAmŒ3¯Âïhú롸½ Þ^Ë׋¿“‹¢ŠÃø¬¤eÚQiì…7ëPÑA·0Ž>ã䊿¡)ªÇ=ÏœFètß Ùú†ŒW"nÈx%‚ BmÐè€P±µÑV^­èùõTæ}½m2ô½å`ÎvC£)ƒ¾gXÌ‘y&¬…Ù={c}\Δt‹R ¿ ¹ø'ˆÄ ã• ‚ µA£Bu,k¼F=óº…®a`&c…ÊÙŒ5ÛLp¿>o¼zÄÿVfÜÛ0A¤ Þõ”ÚAA‘Ðè€P±µlåõ{˜žJ½ »‡½â_âEÀ”­Å›a»Ìx-Å…ë¡Éã Î+A¤2^ ‚X•ø_¢»¹ºÆŸá`ŽýnXÛ:`óDÆ~%‚Ght@¨Žåµ‚ßΖ昆»û"¾ÑýëèlúRä—Àûx\gJiÐM¨2^ ‚X}LãyÓNh4ù(ù¨•f ö·`w®šÒsè“7X "Ðè€P˯I:[J4è&Ô�¯A¬>¦`7”aK0äÜú›jqÆ:üÜaüûÔÜׂàª#ö 6ygKA’ÜR¤è ÛÛû‹H9fðª÷)<4aLÈ€ŒW‚ V#‚§_žü#ì9щ£G;1á÷ ;N¿Adª#ö 6ygK©ØR¤è Û} ûµGqšm‰^H'Q]¶ û¤øV~›бá@ÜdÌË@Æ+A«i8¯B&Ò±£˜ò¾@×Älè{Að Õ{P›¼³¥Tl)Š-_ p›Qž_‚Z-´’´ Íý˜%㕈Eõ4ð.Ajd/ÍŸ¡¸ú0›Í‹Ér Þ¸üZ‘Yht@¨ŽåµÉ9[b$»¥HÑA÷h/ºŸùB‘8d¼±*ñá~Ûo%K• T Õ{P€çNNFlû™}ËEâsÃü–¢Øò¥ÿ÷~„!aoÊÄjdddD²ÒÀô4üúÿ÷CßäÅÛAAªƒF„êˆ=¨õÃm®˜34#SÜÛ†cm)jÇ}sµ2ì÷Cx…{'>„f9…A«Ý’ü\¿ ·Ÿ,Xby¶lÙ²´mˆéðááoð“‹ ‚ "ª#ö V4^-:Ô]j 3<[pY·[ª/Â6é)uK‘Ö3µ09WÞ²«ä {ÖaÄ&ÍGÐu½X\mõ ¯©Z‡è¼±,ÿú׿ Öðäp8Bßà&AAD84: TGìA­€©ÁAüiÁÍ<Aãn=z¼ñxàs\FeÁ;’Áý|Ò…i…mºì{J°°qÁ›ò"‚Ë„r5¸2,LŽcœVa‰D®¾ò²êúÛo¿e™Oó²±ô?ÿó?¡oA$‹�ÿ˜÷LÐýÿۻߟ¨î}ÿûþsÇ›½a²câ&ßãšFn`l¸¢æ{BL[C¨9 4=ÆÚFÔ‘foäê2îBÚ‚go¾ÇÑÑ2ÁjË®PwñD¬Ì9g¸ì\^XÄ‚t*CEÈÀ`p½®µpÐYÃRÂÚ>ɧ03‹™iÒ2ïŸÏçý1Ž«òT£Â±þø øá¾ãSŠ}yR¡Ÿz‹ÅžŽ¯u(g£Ë£rìãvò´n×§ªË\6ª•Q¯’ê/¬ï›½ï¼ÙùýÍŸ™«bë•_¼ªp8üp´~«ÏKòUXyqòöµÐQígfξ.•YW{Ïíºu립·©a¿g�ð‚¿¤²œÖï–UÚ¿]Ûó´vùk:ØtÇÕÖ �‹‹ð ß±‹ÙÙ9íy hå–*EFÜÄ9S©X“Ž¿¤ø´Ë­P[qT ñ¹÷Í:¿¿ù3 é­å3ÿýž­5ºÅqup05ûjÏj.%öŠfþ·l¿W�ðFRÕù l>®–G³­öLl»jÞ)UCñXê¯ð» ^Ï¢ÊK?<ž•´G¤SýɧKrfâg]ýê¤ÊŸ¡£¯óûóÂoj9þµô>žYžuô'ø 2M;.µ½®³Í¾2ë À;öYîÛ´-x{Æê¤qõ÷¥WhMhøþŸ¡ÀEx…ï8‡Ã”â—Ϫº.¤úÖë£hB‰®+j¨¿¨H|4}ÍÜÌD»ª ×X¯³J9E{´3/Gùoª¸º] ÖùýyÃL¥¬3àSæì+³®�¼eÕ‘Oµõõr]l›ú#w›Z›Nªdc‘*ÿ~ͺ}E¡²#ÌÂKá¾ãh¨ù 6üFÝÉ ß ê­U/+oW‰Š +\6lSwp‡|•·ÙGã$6JŠ *ZuXÁî±ôuÎ:¼ÿÈ2g_™uà-û8¼w´<ý2çñ;m­¹iU�–ªløŽýÁ2;»ÙÒ>ÕtJfŸš÷®×ò³êNe,š‹ý›´ìQGߩ𷾻zç÷À {ö•YW� b貎W|¯ÞÙ¶Ü<¿ª?ÁÌ+°QeÃwœÃá¨nÕìÓáæu6Un`½ö6÷ÉLvªþý2—K€LD*”»±JÑq;½Úáu³^ݰFÕÔ|oq6�€yHõªåÿ—Qõµ:Ögz*¦ð…¦§Ú^`ñPeÃw²…ÃÇûUW(§ì’â£?«ù„õ!eœQxÀíNÑQÅZkõ±qÎú™!EÊ7km~™ÎFg4x˜á�€¥Èþ#÷vk•÷O9ZWÒíÎ:íXP`ó ýè¶3#€EC• ß™3¦êŸW·Ýù`Nx�`)²» çkKÍOö:+uÖ”êXxpòþŽê?¨2:òð2�KU6|Ç9>PâÆ Ý™ÙaÁ¼«öö>×ás¾˜^�XšÌx“þxä;ݳ‹‚¡fíß߬¡T\­.ûZ�X\TÙðçp˜R¬~¿ •aŸÏ:5>Ú£ü­'&÷°š± ÚýJ®vsÇ!ÌÎÿ�sÂ+��KѨºÿý­ ÌÒaxõ‡j¢¿0°ÔQeÃwœÃ¡^CïjmÞ*((˜1(Ô5ê"¼Îÿ�sç÷,–A݈ƞ8öÁü5ªöø³/°�±ÊÙ©Ü’ìjþhÔ7êr‡}<€¥Ž*¾ã'4píšnºíË4«ù`NxÅÒÓ£ú÷Št࣌ Öø¨ä m­¼n•sãŠ}³O¯¼²OßÄÆÓ?�ÿ€R½º|á¿50í/Ô …•*ØLß°TQeÃwæ ‡©{êøþœ*­â¼¼ºA­·žâ¯©ó?ÀÜ~XZz*Ü ¼í3W$Xãýº,rxMt*zgæ1ãúµý†â³/‘�€g`*ÙqFÅë^šñ™þprö+îM‡¥‹*¾cÀ8JÞЙâß+ùpßliÒ<0Ïúþ€Eѯk­]š×¢„…;¯÷ ö료YaÃ8¢’ü·T¶êÍ;úfw®^Ù}A1ŠJ�ÏlX‘ò<­Ûõ©ê2— ‡je䫤ú ëû&Eï/Ùß–À *¾ãSêkxO/”«1Ò£DÊ®r(Ùß®àî2WÍ–2•J=ûáKOLëÞüܼ ÚÈPúÖ"Š…T¸6OÛgÎ ¼¥÷Cz@xà ëó=Ö¤cÇ/ÍXÕa…ÚŠ£jˆZ¥Ž*¾ã ¨¦ëÉ凛--<Â+–ž… VNþ·9}´zoÓÃ##Ó@»Zo²× ÀsúEWþÏ1©úZ +¬¦b _hR$>³v�°QeÃwœÃᘺƒ¥:ÜÒ—±Dx\÷;¾Tin±‚Ýcéû–óûKê:=m™Ü)…o¨äÔª±Ãkü²ê¯ÌèðÔÍúzEF˜jà•Qݪٮ@`­òþ)GëŠCºÝY§« l>¡Ùì ,yTÙð¬á0UMá+éãr¶+Ã*ëúÊ5®jè9}&^±ô$t»«F845ý«vXÿo,ú±ü± &g‚gŽõÚÛÜ7ã}À³²ÃË×–šŸ¬ß+#ê¬)Õ±ðàäýÕPetäáe�–,ªløÎ\áÐLv«õl¹öªpׇªl¸®Éý¯nØûa.«ö«ͺˆ1uWÑö_²v"œëýÏ_¾¬jÐOÓšŽu«£ñ°rV »oǽ0b_éСÏ3f…­qæ#nÙ§S‘8á€gÌx“þx仇Û%†šµ³†RqµÅÏm{€gG• ßq‡Š_¼ «Ã3°ypSõµ¹û{ªÝ‰p“^*±>ÌÒ÷LÚ©Næ°ºë?Ô»ÕíJ8TÔ„W,=N{^WkKå»ücôªëîÌ#z†­Ú#£m }�ækTÝÿþÖfþ.´ÆêÕ24Ûx�–ªløŽý!3»”b¡¢'?ì±ú€šï¹é"h7}ÊWIsú¶­Gç«[‡ÙÑVZ¹]5·foî`¿°´Xÿ ÕºÔV8üxDnÆt?¹ØÓ®–X£ªBÑŒYakôDÕx(O+ðSœÓ �ÙØg¹ïTnÉ¿N_éQÿ7]íN°ÊðªløŽs8´Âk½¡C§ë2>”êtÆx[[JjéwSÛÇ픩¬å^ú¶dÞkÔ{¿+R°ûáBb³¯AÅË78./"¼béÓàý‘' ³TXNJϪÛõ²úâ´çuåª\ Gù�ø1¡û‘*ý_«ÿYUWz¬(;¡D×5Ô_¤Û0àTÙðçphjäömÝY‡_WÕŽrµ%Ü-2‡®êØŽú¼éŠÚ¾?§ÃÛþ—–­~Wå=®CýQ»òV+sÜñùœß°Xê8³kö¥rËV(gï…c³„Ûç%vAFå·j˘‡Ûu³?ÉL�=ÐPóAm:øº“¿Ô[«^VÞ®V¸®�,ªløŽs8L)öåI…~ê¶ü°§ãkÊÙøì¦MWT}àu­ ´2ï:”i©ë»Z•—ŸQkÌù/´ÎïX$•¯Ù ]•g3V%Xã CKTmÿ·¨î/VRL éþð,ËúS£J.ö¬0€ v_‹}σ7ûÔ¼w½–Ú«OÆžëyð�žU6|'kxuÏ«@·T=·ó"ß°XFkúLÇ¿‹MŸÉ´BmÅž¯Oß\jRá ;Ùó À#ö9¯ût¸¹CMG•HÇ•ìTýûejèã· °ÔQeÃwœÃ¡^Ï¢ÊK?d,=´F¤SýÉç·ˆðŠ¥'¦‹õmœêšöàæÕ.…=¥É:Sü{ýÁ)c6io°M±çøÿ0€\f¢]Õ…k¬ß/+”SvIñÑŸÕ|⸠ãŒÂn;XLTÙðçph*58¨áE^eèüþ€ÅâtTN@«÷6=<ïpMDʵfÝ.UÖe,i¶ÆÆmœì Z¯¿Eï±ÿ€7R õ÷'XÕøU6|g©‡Ã¥þþð"êQý!C§3‚a(tJFá*9õŸê_ìT˜º£¦c•ú.>½”œˆœÐž†_Ò·�Àf²Wá¯NªÜ0dTÖª1Ü«$|*¾³8áÐT*9ê꯴„W,= ÝîêŸ1sij<úWí0®Z.²øeÕ·Æ•šÈ|‡Iݬ¯n{Õ¼/^¥œ¢=Ú™—£ü‚7U\Ý®¿n€%*¾“=Z!ó~‡¾VÉ0Ž«òT£GG€$>Vúè¬×l¯XzzôeUƒ~Êè‹u«£ñ°rV /öÚ9§s^—¥›©¤/€ùSwp‡|•·õ+e¶¥ Å­:l}Æ¥¯°TQeÃw²…C3~Ie9+¬kViCþvlÏÓÚå¯é`Ó—{[L%;ΨxÝKôãÈÙ¯àË‹ì뀥ÅiÏëjm©üo¤¯Z4±¯tèÐçKš­qæ#nÙ§S‘8á€Gì£r6iÙ¶ z&±L…׸õµ˜£r� Ê†ï8‡Ã¤:ªóØ|\-f[í™ØvÕ¼Sê²¾ýÁ–§u»>U]f!ª•Q¯’ê/¬ï›½ïÜ‘Ðùý‹¥Gçj]jËèÂmÈÍøÒØç5Ò«®»ãéS†­Ú#£m }�æËÔH¤B¹«·ùÙáu³^ݰFÕÔ|nÃÀRG• ßq‡#ŠVnÓ¶àí35ã‡OhøþP–YX+ìÆštìø%ŧ=‰j+Žª!>÷áKϘï{±|~ÄUŠf,i¶FOT‡ò´ÒÓ€‡Fk­ÕÇÆ9…†)߬µùu*|—ß5€PeÃwœÃá„‘Oµõõr]|4ÃÔ¦Ö¦“*ÙX¤Ê¿_³n_Q¨ìH–YØJܸ¡ž±”õlÌ»jow·÷Žð <%§=¯+ßPåR8‡À?8÷}-�,.ªløŽs8×/¡w´|füÄø¶ÖÜ´bêlRŠÕïWÁ£2ìúSã£=Êßzbr™‘» Ý¯äj÷7wf ³ök�x ÖÿSFå·jËXÒ·ëfréÎð¡ù÷µ�°¸¨²á;öŒ£¡Ë:^ñ½z3—>1~UÂiæÕ ¯¡wµ6ï Ìê%¼^K éþ0{Í�,´ù÷µ�°¸¨²á;Ùá©Tj>:¸vM7çñ„W��–¢ù÷µ�°¸¨²á;s…C3Ù«ðW'Un/÷­¬UãS-šPüâ]ž±¨øÁMÕ×F\)Bx�`é2S3úZ�ð ªløN¶ph&ÚU]¸Æºf•rŠöhg^Žò ÞTqu»®¬½l¸hò5ž.ÛèÛ×���ðU6|Ç9Ž©;¸C@¾ÊÛú­:uøø ¢U‡ìK_—ݰé¨J?·÷½Lí…©Óc—ŠzEúçn¤Ox���¼G• ßq‡v#†MZ¶-¨žÉYÖ©ð·¾§Ïy‹©‘Û·uwæ,íøuUýógŠŒÌ=}Kx���¼G• ßq‡VðŒT(wcÕä‘6Ãëf½ºa.—üNμ~yR¡Ÿz§u(îùÿþ]¥¯äº À„W���À{TÙðìápT±ÖZ}lœSx`H‘òÍZ›_¦³ÑÁYµy’óž×@Îqµ%f?6“}-����oQeÃw¦‡C»;p£Â£Y¢éSt ž ¯ç«Tým ‡ÃéѦ+Á£*kè¶á���ðU6|gz8ÌÒ8s¸^6ì°çÕüI5ÿû5ôѰ ���X TÙðéáÐîlèÐéºÉ®À§½®— >Ò™G‚Ïé¯%[”[RëªSðì3¯aµýý¯*^ýšÊ#Ãéëœ^���ïQeÃw¦‡CSÉÞ^ý69SjwÞ§š®ÑÉGnQéÚ§hØ4ëLî mØ}^]“ ²›þþ����x*¾ã“ê¨~_‡[ïe4gšPâú_´mù—GåØ3¯QðÆônñþ„õˆ;„W���À{TÙðláи¬Ã¹¯*ÏŸdGUºs«ÖZUxJɹgMmf*¥T²Wá¯NªÜ0dTÖª1Ü+—?Nx����U6|g®ph&:õ]¡’¢B¾§CŸ_RWÂÍ’á‡ÌD»ª ×X¯³J9E{´3/Gùoª¸º] –ð ���x*¾3gxǬ©4¦îàù*oëWJ …R…bƒŠVV°{,}3Â+���à=ªløN¶p8ßYÓ‡MŸ6iÙ¶ z&¯Ÿ ¯qëk±«}³„W���À{TÙðçp8ÿYS+þj$R¡ÜUŠNv¶Ÿc³^ݰF—gÅ^���ïQeÃwœÃáügMU¬µV粞s³Öæ—élt0£‹±3Â+���à=ªløŽs8œÿ¬©}´Îýh“B¡ê[{4nµÓuE õ‰Ï8?Öá���ðU6|'{8œß¬©ô@C͵éà7êNNhüVPo­zYy»JT\X¡¶Äƒôuί���€÷¨²á;ÎápBñ‹tuxFÀ|pSõµ¤ofg/=Þ§š®QÉìSóÞõZ^xVÝ©1õ÷Ѱ ���X$TÙðçp˜R,T4ùøÃõ²áQݪ٧ÃÍêl:ªÜÀzímî“™ìTýûejèK¥¯sf¿����oQeÃwœÃ¡^ë :]7¹gõá¨Óãmm)©U¤îài{|ÜÎ å”]R|ôg5Ÿ8.Ã8£ð�݆��€Å@• ßq‡¦FnßÖÝ™›[ǯ«jG¹«ýª¤êïOXqøé^���ïQeÃw²Î¼~yR¡Ÿz‹ÅžŽ¯u(gãS•3?„W���À{TÙð¬áuÖ=¯­ÜR¥Èˆ»~Ãóåüþ����<+ªløŽs8´ÂëùOTyé…ÃáÇ#Ò©þäS,ž'Â+���à=ªløŽs84•¼¯Á}¬’aWå©F…c#.Ïxµ™Jööê·'~ ¥þöÿRWrîg"¼���ޣʆïd ‡fü’ÊrVX׬҆üí*Øž§µË_ÓÁ¦;.›/Ù‹ÉøúÊôÙÛp‹jvý³ŒÆ6E{†²>á���ðU6|Ç9&ÕQ¯Àæãjy4Ûj*u¿]5:£ÕyßlæX­Í‡›KÍ> k_���À[TÙðçp8¢hå6m Þž±Lx\=Á}énþŸmæÔÞ7{B5×»§u,ŽÅ:ÕXº[Õ‘;Ö÷Ýêh¬Ð‘ÆØ¬Ë‘ ¯���€÷¨²á;ÎápB‰È§Úúz¹.¶M-÷mSkÓI•l,Rå߯Y·¯(Tv$Ë,ì%nÜÐ'ú;%Õqösµ LXßë^ËåáYC0á���ðU6|Ç9Žë—Ð;Zn=n_ã<~§­57­˜šEêž:¾?§JÃPyuƒZo < ªnÕhk`Þcæ���xn¨²á;YÃáÐe¯ø^½Ó–üοª?‘eÿkò†Îÿ^ÌÀÈhú”Š)|ù¦³oy%¼��� €*¾ãí%¿ÿ¯nÙK{3˜wÕÞÞ7ë,é“RêkxO/”«1Ò£ÄdS¦Jö·+¸»ÌUÓ'Â+���à=ªløŽs8´¹Ù¯‚GeÆãñÑåo=¡è¸)3vA»_ÉÕîoî8„Ù„ÂÆªéMßž’Ùô);Â+���à=ªløNÖðzWkóÞPAAÁŒq@!+Î^ÇÔ,Õá–¾G{\íàz¿ãK•æ+Ø=–¾Ïá���ðU6|Ç9NhàÚ5Ýœ±jø©%£ª)|%‚·+Ã*ë5W(׸ª!k ¯���€÷¨²á;ÙÂküâ]žÑGøÁMÕ×F4’¾é†™ìVëÙrí-*Tá®UÙp]“û_çFx���¼G• ßq‡ö²á¢ÉÇŸ«¨ùž›)Y+�{^—‡f\ûØ~=����ޢʆï8‡C»a“¡C§ë …Ò£NgŒ·µ¥¤V‘þ¹;{€ík���x‹*¾ãMܾ­»3W÷Ž_WÕŽrµ%f,'ž•€Ë´ë³Óø´>Û•§\—˜ð ���x*¾ã­àùåI…~êU,{4z:¾Ö¡œ®Ž¹±p²·W¿M ÀJ\ÿ‹¶½ü/ uÏ<BçI„W���À{TÙð¬áuÖ%¿­ÜR¥Èˆ»†KOJ)ÞR¡wöžÖ – ���‹*¾ã­ðzþU^úAápøñˆtª?éfɰ7¯���€÷¨²á;ÎáÐTjpPÃÏ:ÁêÂ+���à=ªløÎáÐÔ§Ê´»âçÆ%ì�›PWä?é›>ÃÙYÁ89êêy¯���€÷¨²á;3Ãáƒ[5ÚúÒ6ú¼JíúßZµl…rÿï“úË[k&¯]¶l «ÛÚg–PøX©‚ÝÉômg„W���À{TÙðéápBñ†ziW£îiT]5ojYAPÿݰW¯éêU¬'ª&ãˆÎv¥&SÉŽ3*^÷R:øNœý †{•Ì„íë����x‹*¾3=>ì0¼Ò[ß%66L†×p¨BÁžñô5¦†[*ôgWGå +Rž§u»>UÝ£s^íQ+£ _%Õ_Xß7)zß¹ë0á���ðU6|gf8œˆV*·´ÅŠÃëï]Q¢ãs½óÎ1ÕÔÕ)ø×?ª`ã!µ ¹é8l*kұ㗟6»j…ÚŠ£jˆsT���°¨²á;O„ÃT—BûŽ«9Þ«æ’WôûÊëš0ÕQXÛÖ®ÐÊW_ÕÚÂbé˳›PüÛój¹7j}ç$©›õõŽçÆ^���ïQeÃwf ‡fâG…ïVñÁ/M̈:ûée ¤of÷p²ýÙÇzímîÓlñÕ~���€·¨²á; ­ðZoèÐ麌ý®u:c¼­-%'2öÁÖëB$Nx���žªløÎ†CS#·oëîÌT:~]U;ÊÕ–˜{ß,á���ðU6|gÁg^¿<¥†Û1Åb£ók|%W†‹ŽÅ„W���À{TÙð9Ãaêž:¾?§JÃPyuƒZo X‘Ô-§=¯­ÜR娤)Óœï���ÀS£Ê†ïd ‡É:Sü{2ƒgà5lºã2ÀZáõü'ª¼ôƒÂáðãýYI7Gí^��€…@• ßq‡)õ5¼§— ÊÕéQ"eÏ’>P²¿]ÁÝejès_M¥•øŸ^…¿:©rÃQY«Æp¯’sOºN"¼���ޣʆï8‡Ã„ÂÆªéMßž2®žà>WûUmf¢]Õ…k¬×Y¥œ¢=Ú™—£ü‚7U\Ý®„‹�Kx���¼G• ßq‡cê–êpK_ÆáqÝïøR¥¹Å v¥ïËÆ~Ž òUÞÖo=ˆKŠ *ZuØÕs^���ïQeÃw²†ÃdT5…¯hmÞ*(Ø®ü «¬ëW(׸ª!WË~‡)ߤeۂ꙼~*¼Æ­¯Åt��� U6|g®ph&»Õz¶\{‹ U¸ëCU6\×ÀäþW7LD*”»±JÑqûgìðºY¯nX£Àêj¾7ñð²,¯���€÷¨²á;ÎápBñ‹tuxFWà7U_ÑHúæÜFk­ÕÇÆ9…†)߬µùe:´¢íܯ���€÷¨²á;ÎáÐéŒVk¸œ5õ‚ýz����¼E• ßq‡Vx­7tètB¡PzÔéŒñ¶¶”Ô*Òïî¤×ù"¼���ޣʆï8‡CS#·oëî̵½ã×Uµ£\m‰ˉá���ðU6|'ëÌë—'ú©W±XìÑèéøZ‡r6º>çu¾¯���€÷¨²á;YÃë¬{^Z¹¥J‘7í–L¥¿= ¾¿ÞO>jÒd&cІÿKÑØHÖÆMÎï���À³¢Ê†ï8‡C+¼žÿD•—~P8~<"êOº]2<¡DäSåÖ«ð£5Fú¬g55Þu^»7¬x†¯é`ÓëþÙ^���ïQeÃwœÃ¡©Ôà †ÝL°:25ÜrT5Oߣd»*7ÿÎzÝ * EÔ}ë{U¼±W }³ÇWÂ+���à=ªløÎ†ÃaEÊK왊®Iu‹´|Ùr­;øw Lc{yr©ãZÂ+���à=ªløÎ‡×}ªé¼eÞkÒÞÕ-[µ[ ±©@;¨°qPÁî±ôíé¯���€÷¨²á;OM¥’£Ž{T§35þ³¶¾÷¹¾¿rA•Eë­×[¥×'—ÛÍœz TÎÖu9,O&¼���ޣʆï<}8L(|¬TÁîdúöÌAýX³Sëv§âÕÚ|¸I±”•TÇ{ÔZR(d&EïO¤`:Â+���à=ªløŽs84•ì8£âu/M^3srö+îUÒUC§‡Gæd•ã–ýZ����¼E• ßq‡ö~Õ<­Ûõ©ê&gG§F­Œ‚|•T‘uÆô¡ Å›šÔžíËD{“šâ̼���Ï U6|Ç9šJÅštìø%ŧM—Z¡¶â¨Âætv'á”_rD†a8Œ#*Éÿ@¡Gå����Ï U6|Ç9N(þíyµÜµ¾s’ÔÍúzEFœÛáµhò5²"Â+���ðQeÃwœÃ¡Ûà¹^{›ûö²ÚϱO¥-÷Ò·gsO-¥û¯���ÀsD• ßq‡Vð¬7tèt]Æ~×:1ÞÖ–’û`ëu!Ï^Ke„éÛ³I(l”^��€çˆ*¾ãMܾ­»3SéøuUí(W[âAúŽl&t¯ñz3ØåÜeØìRðÍ?¨ñ ›���€ç…*¾“uæõËSj¸S,–1:¿ÖÁWrç˜M}ÌìªÑ–uÔMß“iT±ÆZ·±ZY˜ð ���x*¾“5¼Îºç5 •[ª²4išÁìQÃ;kØðž*.ëÇ®^+÷ªëÇËj¨|O«ôFð–œæqß���€gE• ßq‡Vx=ÿ‰*/ý p8üxDÖ@ÒÍ’áÇÌøeÛö¿2ðÔX¡œƒß*–rÂÎï���À³¢Ê†ï8‡CS©ÁA%þ§Wá¯NªÜ>“µ²Vá^%]Nºf2“ÖóÔWêà®*(Ø¡]?U°å–s<á���ðU6|'[84íª.\c]³J9E{´3/Gùoª¸º}ÎÐù€¿=Ú/ûëý䣯Mf2¦hø¿87s²^���ïQeÃwœÃᘺƒ;䫼­_©GGÚ *ZuXÁî±ôuÙL(ùTyõ*ü¨F‘>ëyLw×î +&_{Yà5lºcÝ?;Â+���à=ªløŽs8V¤|“–m ªgrjt*¼Æ­¯Å.» ›n9ª‚š§ïQ²]•›g½î•„"ê¾õ½*ÞØ«†>Îy���žªløŽs845©PîÆ*EÇíôj‡×ÍzuÃVP³Ã¹¬ÓÙ¸TÁž©èšTw°HË—-׺ƒ×Àd(¶»—:†aÂ+���à=ªløNöp8ªXk­>6Î)<0dÑÍZ›_¦³ÑÁ¬ûT³Ãë>Õt=<ãռפ½«Z¶j·bSvÐ Å—!^���ïQeÃw6š ÿY[ßû\ß_¹ Ê¢õÖë­Òë“ˈífN=Š„*gkºÒ0á���ðU6|gÁá9¨kvj]À>×uµ6nzx®ëxZëC …ìѤèýÙ—!^���ïQeÃwžO8|xdNæQ9n^���ïQeÃw&&u§ãŽõO+´ÆÂºð]‡ËsaŸDx���¼G• ß™'¿Ø¨ðh–¤ùà¦êk#Iߜݸbªu®³ïáq;Ë6©<2œ~ìé^���ïQeÃw¦‡CûØš¢Éû²7GåØ{]k?Tákk´®øŒ:’Ï6õj¿����oQeÃw¦‡C+¼Ö:tºN¡PNz]/|¤3“M•ìqN-٢ܒZEúSéŸYX„W���À{TÙðéáÐT²·W¿MN’N?£õ‘á•®u1óêÂ+���à=ªløŽs8Lª£ú}n½—Ñ!xB‰ëѶåd„éûá���ðU6|'[84.ëpî«Êßó'ÆQ•îܪµ€Vžzæ=¬™J%Gåfá1á���ðU6|g®ph&:õ]¡’¢B¾§CŸ_RWb¾K† +U°;™¾íŒð ���x*¾ã'ÿö¼.ͪ®ŽÊ™b*ÙqFÅë^š|™#³_Áp¯²MâÚ×���ðU6|Ç9f96ÇÍQ9“ì¦OyZ·ëSÕ=êXlZù*©þÂú¾IÑûÎÏe¿����oQeÃwœÃ¡}lN™v}v:#tžÖg»òžâ¨S©X“Ž¿¤ø´ÙU+ÔVUC|î�Lx���¼G• ßq‡™ÇæLIw~ù_êžq„ά.=n¹7j}ç$©›õõŠŒÌ¾v˜ð ���x*¾ótá0¥xK…ÞÙ{Z?ºjÚ”eéñ´±^{›û2ŽäyÌ~���€·¨²á;s…C3Ù«ðW'Un2*kÕ8Gƒ¥éì¥Ç†®ËXz\§3ÆÛÚRr"cl½.Dâ„W���à9¡Ê†ïd ‡f¢]Õ…k¬kV)§hvæå(¿àMW·+á*Àš¹}[wg^;~]U;ÊÕ–x¾Ãá���ðU6|Ç9Ž©;¸C@¾ÊÛú•²Ïf5JŠ *ZuXÁî±ôuÙ¤ûò”nÇ‹eŒÎ¯uð•\áDú:g„W���À{TÙðçphs³I˶Õ39s:^ãÖ×bWÁÓyÏk@+·T96iÊäüþ����<+ªløŽs845©PîÆ*EÇíi‡×ÍzuÃ\Ÿój…×óŸ¨òÒ ‡ÃGôg $ç^2l#¼���ޣʆïd‡£ŠµÖêcãœÂCŠ”oÖÚü2ÎÚ\éI¦RƒƒJüϳ7}"¼���ޣʆï<}8Õ/_Ö·q73¯óoúDx���¼G• ßqÍdLíû\*X¯À²"…b©ô#ÙÌ¿éá���ðU6|'{8×ý[WªØ­¼•ëÚÕÊ{ïÏ:ùQ¹Î» ¯óoúDx���¼G• ßq‡£ê ¾­•Ö㵯ë@ÕW ÇF&÷ºšÃƒL¹Ù´:ÿ¦O„W���À{TÙð¬á05¤žÈ·úüOïªpw…BW:ÔŸ|ðáÕ6¿¦O„W���À{TÙðwáÐTê~§®„*´·è}Pô'Õ»Z6<„W���À{TÙð§‡æ°ºëk]wž/Â+���à=ªløŽs8| Äºó }sŠyWíí}®–üzð ���x*¾ãSŠÕïWÁ£2 ãñøhò·ž˜lÀdÆ.h÷+¹ÚýÍ ³„W���À{TÙð¬á5ô®Ö潡‚‚‚ã€B]£.«©do¯~{âÁ”úÛÿK]ɹ#/á���ðU6|Ç9NhàÚ5Ýœ×ÖV{öö˜Œ¯¯(gŒÕìúgmŠö YW9#¼���ޣʆïÌS÷Ôñý9U†Ê«Ôzk k؜Ξ½-š| ç±Z›7)æpôŽ} ����oQeÃw²†Ãä )þ½™a3ðš6Ýq`­ðzþ„j®w+‹eŒN5–îVuäŽõ}·:+t¤16ëÒcÂ+���à=ªløŽs8L©¯á=½\P®ÆH“3£”ìoWpw™úÜÄW‡ŽÅJªãìçj°×$ë^ËåáY1á���ðU6|Ç9&6>PM×húö”qõ÷É'Ò·³™û¸·j´5°Nï1ó ���<7TÙðçp8¦î`©·ôëŽë~Ç—*Í-V°{,}_6væ9ŽÛ鮘|Û¾ž½c1á���ðU6|'k8LFUSøJú¸œíÊ߰ʺ~…r«š-i>ÁnØ4¿ãv¯���€÷¨²á;s…C3Ù­Ö³åÚ[T¨Â]ª²áº:?iþÇí^���ïQeÃwž>š 7êbÜM"ujØ”i\¿¶ßPÜ!^���ïQeÃw²…C³ÿªNìÚ¤•Ö5öuG‘B17݆ö¼NGT’ÿ–*£Ã韙Žð ���x*¾ãG­Ü¢å›Kõy]H¡Pƨ¿¬®¤›¥ÃÙö¼fŽ·ô~¨S³MÐ^���ïQeÃwœÃ¡Ýmø½¼ýd#¥‰”Üm{eÏ+���°QeÃwœÃ¡©Ô½ÿñîgºÒS,65~QgèßtÞÕ²á‡Ìd¯Â_T¹½L¸²Vá^¹š¸µ^���ïQeÃwœÃá¨nÕlWÀzܾfúp»çÕ ®‰vU®±~f•rŠöhg^Žò ÞTqu».¬óû���𬨲á;Ù¡ÙwAûËêt-VxÚ¸©~Wë†í¥Ç;䫼­_)%6J­à;¨hÕa»ÇÒ×9#¼���ޣʆï8‡Ã Ý^PUå¿©¾µGãÖíD×5Ô_T$>š¾f.Ê”oÒ²mAõLfÝ©ð·¾Ë'&¯Ê†ð ���x*¾ãh¨ù 6üFÝÉ ß ê­U/+oW‰Š +Ô–Èzxkš©‘H…r7V):n§W;¼nÖ«Ö(°ú€šïÍÝɉð ���x*¾ãíYÓ}ªéµ×«yïz-/<«îÔ˜z‚û\Íš>4ªXk­>6Î)<0d=çf­Í/ÓÙèà“]ŒgAx���¼G• ßq‡væ}:ÜܡΦ£Ê ¬×Þæ>™ÉNÕ¿_¦†¾l ›’ºÓqÇú§©T,¬ ßu¸jÎ4Â+���à=ªløN¶pø¸Sð å”]R|ôg5Ÿ8.Ã8£ð@¶%¿ãŠ]¨Ö¹Î¾‡{^—mRyd8ýØÓ!¼���ޣʆïÌS õ÷'äþT×4sP?Ö~¨Â×Öh]ñu¸=ØuÂ+���à=ªløÎR‡„W���À{TÙðÂ+���ðâ¡Ê†ï^��€U6|Ç9N(þíy]šÑ˜éÁMÕ×F4’¾¹Ð¯���€÷¨²á;Îá0¥X¨hòñ'Æêj¾—­Ûp†Ô/j=U!£êku$¬ŸIžФH|4}Avöë���ðU6|Ç9Záµ¾L»>;­P(”§õÙ®<å–Ô*Òï¦ÿ°}Vìvk•÷O9ZWÒíÎ:íXP`ó ýè¢1á���ðU6|Ç9šJööê·iùrB‰ëѶ—ÿE¡n73§#ŠVækKÍOÖ³¨³¦Tǃ“÷wTÿA•ѹ^���ïQeÃwž.¦o©Ð;{OëG{ ° f¼I<òîÙ!x¨Yû÷7k(W«Q,#œxxQ„W���À{TÙð¹Â¡™ìUø«“*7 •µj ÷ÊÅjß´QuÿûZ˜mßì‡jz¾ÎÙ\ï���Àӣʆïd ‡f¢]Õ…k¬kV)§hvæå(¿àMW·+á*ÀŽë—ÐNå–ükƾYkÔÿMW»ró„W���À{TÙðçp8¦îàù*oëWJ …R…bƒŠVV°{,}]6Š_ø³ök 3©>Åq;„W���À{TÙðçp8¬Hù&-ÛTÏd𜠯që«»ýª^·c_ ���À[TÙðçphj$R¡ÜUŠŽÛéÕ¯›õê†5 ¸>çÕ>nÇСÓuˆëtÆx[[\·Cx���¼G• ßÉGk­ÕÇÆ9…†)߬µùe:tµ_u2�ß¾­»3/¿®ªåjKа ���X TÙðçp8¡ûѦÉÙÒúÖÛg¼v]QCýEEânÎxµ¥ûò¤B?õ*‹==_ëPÎFŽÊ��� U6|Ç9>ÐPóAm:øº“¿Ô[«^VÞ®V¸š5uÞóÐÊ-UŠŒÌ=ëüþ����<+ªløŽs8´6íSMרdö©yïz-/<«îÔ˜z‚ûÜ7l:ÿ‰*/ý p8üxD:ÕŸt~ ¯���ÀB Ê†ï8‡ÃQݪ٧ÃÍêl:ªÜÀzímî“™ìTýûejè›»Ù’½ç55x_ƒú>X%Ã8®ÊS ÇF\î™%¼��� *¾“-š‰vU®±®Y¡œ²KŠþ¬æÇ­zFá7݆­çˆ_RYÎ ë9ViCþvlÏÓÚå¯é`Ó¹‰¿„W���À{TÙð9Ãa*¡þþ„« ù¤¤:ªóØ|\-f[M¥î·«æRW³·„W���À{TÙ𧇦Fúw3ó:¢hå6m Þž±Lx<cß섆ï9†cÂ+���à=ªløN¶phö_Õ‰]›´ÒºÆ¾îñ(R(æf.vB‰È§Úúz¹.¶M5ljSkÓI•l,Rå߯Y·¯(TvÄq–ð ���x*¾ãíYÓ-Z¾¹TŸ×…&Ï{}4ê/«+é¦åÒ¸~ ½£åÓ‚ïlãwÚZsS³õ¶���à-ªløŽs8Swð½þÄ’_ËDJ)·í‚‡.ëxÅ÷êÅs¿ª?ÁÌ+���ð¼PeÃwœÃ¡©Ô½ÿñîgºÒ4QgèßtÞÕ²a›õ<)w‰gCx���¼G• ßq‡ö9¯Û°·¯™>Üîy?ç÷���àYQeÃw²…C³ï‚ö—ÕéÚd£¥ÌqSý®× Ïá���ðU6|Ç9>PâFDÿϽ©óYg3®_Ûo(þÔ9ÖT*9êêìXÂ+���à=ªløŽs8L)V¿_ŽÊ0 ‡qD%ùo©2:œþ· +U°;™¾íŒð ���x*¾“5¼†ÞÕÚ¼7TPPe¼¥÷C³scϰ&;ΨxÝK“¯3srö+îU¶Swìë����x‹*¾ã'4píšn>Ñ(Øý’_iX‘ò<­Ûõ©ê2ω ÕÊ(ÈWIõÖ÷MŠÞwîFLx���¼G• ßyúpè~ÉïdÐ5éØñK3öÅZ¡¶â¨âs¡Cx���¼G• ßq‡ó_òkÏÞÆ¿=¯–{£ÖwN’ºY_¯ÈÈìOd¿����oQeÃwœÃáü—ü>Ü7[4-ôÎ>ÖkosŸ—Ÿd?���À[TÙðçp8ÿ%¿;:tº.#üÖéŒñ¶¶”œÈÅõº‰^��€ç„*¾3W84S©,K~çbjäömÝ™Jǯ«jG¹Ú³÷(ÎDx���¼G• ßYØp˜RìËSj¸S,–1:¿ÖÁWre„éëœ^���ïQeÃw<¼Îºç5 •[ª›4eZØ÷���¼˜¨²á; ­ðzþU^úAápøñˆþ¬äÜK†m„W���À{TÙð… ‡¦RƒƒJüO¯Â_T¹aȨ¬UãœGì<Fx���¼G• ßYèph&ÚU]¸ÆzUÊ)Ú£y9Ê/xSÅÕíJ¸°„W���À{TÙð… ‡cêîP ¯ò¶~¥”PØ(U(6¨hÕa»ÇÒ×9#¼���ޣʆï,l8V¤|“–m ªgr–u*¼Æ­¯Åt��� U6|gaá©‘H…r7V):n§W;¼nÖ«Ö(°ú€šïÍ}‚,á���ðU6|gáÃá¨b­µúØ8§ðÀ"囵6¿Lg£ƒV´á���ðU6|g©‡CÂ+���à=ªløá���xñPeÃw¯���À‹‡*¾Cx���^<TÙðÂ+���ðâ¡Ê†ï^��€U6|‡ð ���¼x¨²á;„W���àÅC• ß!¼���/ªløá���xñPeÃw¯���À‹‡*¾Cx���^<TÙðÂ+���ðâ¡Ê†ï^��€U6|‡ð ���¼x¨²á;„W���àÅC• ß±ÃáR����¼E• ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%ð ����Xò¯����€%NúÿQÉl_{öf����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_create_compat_dim_vdata.png������������������0000664�0000000�0000000�00000040333�15030617045�0030023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��€���È���¹×Ë���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��@pIDATx^íÏkIš÷õoÔ¹®¾™¹ô©Nºè°}éKjA|htA >xlAƒYAAáƒ@$C¯ ð²x´oÑ ocD]f¯¨aiº3ƈâyãgfddfýõ£¤ü|LbåŠx2"2óùf<¹!������P €������5�����P€������5�����P€������5�����P€�p¹iòH6š=_¸M7Îg™¿vcC66Òê$29ŸÉl2­ÎHÎô!ÓDÚíD¦æøK0›Êq¿- Ǧt’9w» œOd4èHëKò» >ß[­ ���X �À%˜&²Ý|,Éé¹LGO¥µñ &—3õ÷vòÁs1îË׃™™µUù,§Écin'rzq*£î¦lldRšØ'™ ¾Q"Q Å€ç2îµl¾@��€;�jlûc¹RÕ©Q[zcÝO§éHgô«Ýµ2$i7¥Ù«¶9NNŒÝt Ïw)¨EíSé›ò��€Û��÷ŸóŸeÐ~0WL­F•èQ¢mû©ŒÎt7ݯ2ê<’Áä“ݵ*cé57ªm.œÓº À™œŸ ¥Ýh9 ���·�îñ¸³tüÛk§ãò¶”Ðø˜ %¦h–G’LC¥¢„Éd$ƒÎ¦4Ú;²Ój¤Ç̦Ç2TÛíï6¥3<–éÌöÌeéi‘¶/ûѶl©<g29ê;[ÕÒêÈp<µá¢zìà¼4JÏ飀%e`ø,Óñ+é˜óSûÂü.Æ=iæÒ½¶¹² Ç&¶KGÛÔÅQÏ[Ôû• ž~râÏmÓ‹ª¥Ç~¶†���Àµ€�€;†ëqÒ‚ÁˆŽ`ü›Ÿ(eö‹$ÛJ”øÞ°y½inŸþ}C·óŠÈ¤Ñ’öàg•£OfœßCÒYÞë•›�æl$•^yoœã¾´Û28QGÏÜ¿P°-ê,ì÷å²)Ýѩ̢2°c£ü]×[âlˉNUÆÃ¾$§Zœi¡¹¥Äò 9Vbm6=’®•®,¬XtZçÙhȦi÷eéÎ;���®‡K @ëh±°°¬ërÿ‰˜[Oãý+‹)%ƒ”˜Û,)[{L™�œ)Í÷D¶±ó°*?7¾¯áÅ¢F Ɔ¡~Ûe`\f=ÉáRÑ;iÄãÃLŒÍNdØ› Û†š²²pD6Æ0Ç¢ó��€+áÒ�Ö“z\Ÿ±è¨?_ �­XÑ3{–á‹ó/†…fK‰à)µÇ¥áÏae›+ÊÀ¬»¿+gÑb¶+ ÓC¨äîxOzNðE\\ŠÙTƇ¯¥çÂT½¥°âX���¸€�÷Œz\Ÿ±è¨?_,�ÈvòKIHb‰è1î;;FÎìÿ®z˜Ù‰ 6yAf¶5³^·ë€ ýÙŠ%ÇØ¥=}ïeÔÝMCEmÏhu  Ý’Î ‘Ñû£œ±�œw,���\@€{F=®O=ÃæÃ@€¹õTPEûXjtÞÈûÃÆ"È…_æÄ‡i¶ôõd)zËWÒjæÒÇÐé<¾vùëßn=)_ç±ßøk(™c ´8$4¦pN§åeàÖ}H«»§2“Á® +g)u¿ÿª%›ÝÀ_.­®$“³l  J{c³'ƒ]-4m¹Øq}ª\w_Ë~ÿ|0P‰Ç£c9|þZækE,¬'ÙÄI7#ØÕõ‘NlÔV'‘ÉyÕµuÎd2H§¥®?ó§nä?k3›Ž%Ñ“3¥/“"âI¸./÷Í,*ÀL€U&~+T}ò纸‰üJÊýÚ¸éòƒe¹Yèí(”N>Ž[‰&8?‘$˜ÏLzàv­³É¾ô/ý°»Œž4bo‰:.’{•:³vâ‰V_ÆWúà¿a;® ¬@ý6KuMh»î7®ÇÉ·‘fGzÏ‚õö@9/áºvb\ûIW€RþøÐ¡MßI?m³jЦ´“¦Ýæ&€Ùòm· õNºÒòé8Ae(ÌêfßÌžÓÉ(wÎee:Ñj©˜4ÃOööYÂri´û²×i)§| £ÉïÁlŸº¼e°£D¤ŸÝóüXzZ,šÉo ëKpÍÜ„�´é—#çn2¦ï» Èž9e×YÝp/~ÒûFLà—}¡So#t¹¯“à»ÿdí}]Ë݉Fcc¼è@{r˜>»æ«—âó+Å?Ìq‹®ýâ0ðÞ—µåŠ´Ì Ý²IÎæ§’óGméeô|pékðf "mxK @¿Ù„çoPê!püCE¡®f"åØÔP�Úö²u\$m'¸&Îa*WqDl¯O³ªGçŠø’ëó¦øŸÿùùí·ßÜ�xô½3û¸ÿãDàrPßûžJÿRÎæ5õ èçóãišÖ«‹�\TÑxäù°ï/! ‡¢¶zÜ…r·~ }Áj ?e½Ì-DÌhŸñkùªõ•4R?2ÄGá̉²)à_Š–ýÆîÛlå¤ÐIáÆÔkŸ¶´Ãï_$V›ÒêÉTÿ\~Y/üÝ€®¢Wî}¹QtxÕöü ½¯øo”-]ÇEŠpÍXY�êðAÛÛ±üÍærܘ$‰±óü#BÀSø¸ÿ³´�ô÷¾Ë:›W'62Üó9H³>p™ú@�®Ŷz܉r7‘0¡�t¤=wÿU¸éGßI{ï¥Ò %~¸öá¶ZÒúª±âýÖv@å>eÐ"nWºeþ¾É«+JM°èþc}âø·Ê–'/ï¢�üN?>·á?aè“&øÈp£½+{&ÔÓ ÀÔñÖp¾9ÈòLíÑyuÞȉ ‘ ĦWÙúÿÍ.ƒ¡ö¶<vÿUæ©ø³éÚ´­Ó~XºQú¦ Šrû ¡ÚŽÞéøˆðü66w%9èÚãZOä`ð]f£ïYKÅµÞæ>ð¬þÎÆ iæœ{áÕË à <Mwmï¹ó10Iqõ½òy- —žkki[µB6ë~×eüÜÐþü¸ŸNnì˜uóûtšé8¿=_ΗC§³îxè-u¯ Àú¢î{¹÷»{°¿îßJgG_Ë.$8¸×gáÃ*™ªß—~Üÿ¢:ôÛ‘ iu‡2è–9êÞ3ù1aÕëÞ çˆÂªãlsB »ªtvvLYXç©*Ÿ’{ŸN«ª T…GÅu„3WÔGFü|¶û½v0~›cï8ía¨¬‡í¤t_‰Ýͧ’¼ó¡ÚzxË_ä4 Ýö½ÚHTy%ßö†A8¶~¬^ù1}®Ü¿íÉóŲç™&€±2/¼<xÖ«óÛé|«Ò÷BÄû~lZ¶¾›¼ÉêEËéi†øR9HÛy%cs}¹sl¿–qšðÝÕªë©P6v[Ö~ƒ<L¹ëgú×Ò>øSêÇæz}ªD'—_y[ÍÆ]«öq°'ݪˆ‚ÙØÙ¼�ŒÚ¥iw~X•ª/v­¶ÿê™ë9®ÚQ(¿%§©,+ßcøêU0ù³j«[‘`ӿןlz#ª¯&�}Þ‘öн´ºÍ”øôÚ¿4ÃC ½”‹`ê›/º±<·'�Í…÷›+Ȱ@|Ÿ»0Ó‡b(ÊV¿³ùº4LAúô²xv{óüU]pÜ·¼üÏß­­¾WË¥a©=Ø)ÛæßZ¢fÙÞ Åö»ò*4°ìüìCV]è¹õOQøÆ­ö» )üä ioÜ‚sOëx…@~öÜôryªõ´ÎW=¯EÆ´×Qå‘ ­câÏÓÜÈ•pK¢Þ_n¶Še´³Ô'lMš/Ù9tëN,�ýòý÷ßËd2qG¬ .\ÈOÒãîåÍÞHþäER8 ÿoå'øq÷ÈðAoï­Á³-vb*Óù_{¿q÷*ãn©ûHÁwpŽºp>ä©ê¹éžw¡£«î{Ã'‡Öq2çüнìËœ8këü|òÎfÞÙ)”AXl¨{µÃò/dSÇ]ß{?Øcãú(§émRÏ #”ü98‡lN}æ©j'ºŒæÙý·ìùåEžÉSû>Jl&'*_W?ú™òáÈ=ÕóˆŸì™dŸ«Ô‡;Vç–‡€^˜¢zòåg‡|DçUúü÷eàÄdZÖk—>/»ž>GÓóüäÎÅ‹ý‰špœ²=צ„^(5:?ÈqZ¾®<}ùš2rÏïÂõTV6¶¼èLŘ~ŽŸ½wþ:Þw2˜ö=Gðå(Ë/_ÖÖoøÊ]/¶-n• w~Vø¸r/\ƒnÝÜwœ¾\r¾—k;¦¾¶íoª¶ç(9Ÿ¥~ç˜#–}ÛHý¥JhÇçozY£ý93I›:ו Âùƒ¡¯6› åQé=L·—ï\ÞÎç+¹6Â{b9ª®ÓúzèIò…Bðö )€ {Ñéuߨ¼£wœƒ„?¦òAã{ÊnØH‡Îk{”†~Ã2Ø•m}÷¥6úm™°²Æå[z“Œ™cdc±lâó ÞRë*‰ªò®8÷|/:7·±$ oƒ?ÏKŸ—IvQ9Ï&rx81mÎÛ“^ð•mPÝh'G2è=2ÎQ±i¤è·oCé)£|ÿj˜2¹ÃË?ýÓ?¹3XÌõ|¢#Gì e÷‹¸mØi‰Ö«Ó9–ßôýÍL0Q,GÞñ/bÕìž–Mbæî§á=½àpeÄùÌÍwN:–¸|­8ÉÝ'ÝóÁn+ÖG‘â1±®/]ŸsÛɪvÇcݺ·±àWû‹ë£¼Œ­8²Ø2ðÏèðøàYœ[ÊêÛ>cÃ2Xd[ÁVsÞñº/þ¹Ùbìt6§çžƒoße×ST6&¿Ðó¾†ÛfÚsP/ ÛwL\ñº+Ãv_ŽÒžå"¶¾bÿ$£Ø<Q~¦æ#Ë UÛ ,™^W$�S1lŽÕbø¹Ê_w6Øv¾|Ýxüµæ_2éõ'åe­Ï7.j+¶>æ @K:C¯iÛþ…•Û¹"ë'�Ý ±è8�L/ú<Ǽü¦ïíðj\ÙpòS1ýBžU7É%ÎaŽýùòT¥3/ߥ„R¼®3‰Óœî›R¸iq»¸V˜ýF·…“åÐä•ßnÚHZ&AýùÐe•ßÉI\åí̆T=Tmê'9©h‡«¢ÓXwÊz�µð{÷î;à¦pÎnÚK±S—#vÐüÃ|ν]‡©•}ü>rbæ¦Í„m{‰ÊÑNÃáAϽ=.sú<¡ƒþQÆýîþU<ÇØVMU>¥ÎfUˆò.u¨CÁRbkª:+€ ëÓ3¯¬l÷ª0Ú¯X¾>⼋0Ÿ_x¼û{™çlIĶ,Z·vÄëÎ.“~Uo²³³T�êÕªë)\±ì‚z)­÷yDvÖõKæ$· CŒ3¬%÷2Gñ<”_7~#^\¤ù³UûžW]ºUÛcbû—ý¢ÐÆ=Þ' êºPÎ�LW×ð‰ªçG'Ü.+�UŠaäBNä…øÞw}®ù%öóÕWL’^õ­âÅÔC�¦£ìÆPî˜ ¶dØÊwv_”´‚h*K3ÇþØÆBÙ\¥�´i.:÷»+�iy>–Þàû]–VZw…röº­£xü`i;KC|t«ÛáŠè4ÖP�"ü`íq×{ùµ;8þa^þ`¶!c¿œ˜yéx²7ÂÁó'ņˆµZ$oåýh7rúbܽNß·>(;»þ|Ýý+¼§çlŸOìlÎ-ƒQùú{ox_7Û|Ï[±>ŠTÕY怅ëËÔƒa^;YÙîU «#süjõQ,¢�´Ïdÿ¼ wÏ ¹u””OlË¢u{Þñz(¾Ô3´0A‡ÆÙY%�Åë)œ-‡¼/–+cÃu @lz¨ò!J|-kSÙ=Á’+Wй¥ÄØž$£±ý¤PœŸ~a“Ø— ¹ö]µ=¥Âþ…¿ST @?œ*ls…r Âü¦)­ö·²™æwy˜ú­Žtݰ±ÝÞ ßö¾ ¿–,¶>Ê ÊGOôòáPºq+·­<ë'�}œ»¿Ù^É@Ýå«ãŸu¾YœúÛßT#(qÌS¼0yNr2›þ$o'¿çíþèÅIp±¥6êmùiôçt�h6˜Z_ÀZÜ ¾”ýnì™gÙ 0;?[Æ‹„R°îâÿs‚/>¾äÜsu|úgÍò˜Ÿµ{Å1€‹Îç±>ÝèÆ™»á|*Šô÷òÑçÞ˜Ãvv$§?ý§º ý8Æ÷û97Ã%Ñi¬;Z�"üàîà_ð„“#¨k¾¿¯î-îÚÿOïõêwòJºÃÿ–cí ¹û‚¿·¦¿÷¬ÿ¸ÿ‡?W¤s"ŸÇ/䑟|ËÜKœ½4=}OñçВ݃WÒ?Œœ*I«!_µ¾ÎÍhç_ûÆþ“§ï_êž÷rOvçäceßѱ>-»sÊÀå—áÊ7½—úôÝX9ýÕ¶¤Î`I}pN©Jóèýòüð/ò»¹gûû¹~¸õÊúŒ¾yídI»ãgF¼îm2α*óÜX´‡ÖoZPïùúx£ž¹q™9Ìüм­þ™ŸMB£Ÿá»24eâÏÁÃóc�ýsÐ͵ <_±¯{ÿЧŸùlÆöîëì:Mýü9_T^OQÙø·ÑXδlÜõ“ú«ÎwYÞIë"n«?Ëq¿“¶CS>i ðvú:Ôœ½•¾i³ùrMÛƒ>_ÿ»æS9ØßS÷ ?Iÿ‘¯Wk›iWª•n7…Dç³ôï|݆PûÌ~²¡ðS¸rÎÒÒmA‰½T4Eׯ]×UùÏ'ðËÃ4S¬[öÙ¯ô^š†oúú^lh”HÖQe& s½«ë&|ÊÝ?±+r³0EºÀTE}Û–oì"¾¢Ò®xý°y%IïkwŒ*ä4äÐÿ®¬àËÐã¬ü,GYü±¿qlð„aéÍ_o÷‚@ÇŒÿ,'曯ÐT$¤ Útݯ6ãc¹ý×HŒàˆöÅç§ß~Ø[¾®Å‹}ªõVGö\8@ÎÖ…çî\¸mAX@«+É®³[Ûôr¤o f]-úFxüo+žWT¯s0eV¸¡†u§.ƒ}éùvèg*bulþÉŸ]ï^p“J_fømÙË]g''Vh‡7ìK mZwn÷Óîš¶x©x §Û`áe‚+_–N¶\ö ¬¹û¬ZŒxšoK©Ó¦>Ú›>¸ƒç‚Ùü>¸'‘P•Žö£^Ëó$ø&–w^s/ÓôìqGÙQÎéüû²³¡pTG: Êïå é4•=ƒ‘zÞü>?Ÿô™¡Ëì÷e℈9w½xg0 #Óyú0¸èÚê#Ox¿ÊϦ‡ÌýF]ÿûɳܺ¾TÕCÒvâ]Àeí~&É~p_‰×µMÿw_9„á³.l ê=Wm87ƒdx¾ee¶ µè<«&¨ËGåÿroGšêøÁh"qi(gøY¯“[ï%#zË×]ÛÈ•¿:g3Cçoy›ÛåW†ë‰|(½ž*ÚS.\TçáÂð¶Û•=ûÊOו}Vlu‘£,¿|[=9?“ñp/›ù<ôK#òmÖÿ~ælpyèrýWÚÑÒê åÈ̤îü”‹Ÿdø|_Üù¦¾`Õö%çói™ßÍ{®ªºéíË( {]âìz}õ˦G.ª!_z){î/À ÈBsþ¼sÏ÷â&ËwÑâ„ùôÕÞÎÏÖ:§î—áf Üü›Õ¸Vê9ƒuës9Šo5Úù}” §qoÓÙvc o‹o®�®Œªð8X´px4Ä¿‚[À»×ç’,í@éБGÒ9x‰¼�÷æ7|Ógß0^â­"�À"Ìýkµè¸mt$Ñ[9è÷e˜ö Ü÷B�æÃ‹Ëåâ{o —\n{a,Úu“öt¸å Dàí×Ïš•ñ5£Ïéþ£¤á‡Žƒ%ÿáÙÊA;b¨Ç><~Q ÓokÍ@îÿµa eã-€�pSäÂÈèør¢pÕÂrÿ®³K @–õ]î=f ËC7NʆnH«wdg0Óå°hVºœå?Æ#E¿ðß šÖ‰���€;Bº `µ ppƒ¾s=qn’³í̾É+ˆ¹ˆ¸POÒó(îÔé>Ê&š*Œõs ���àŽ€ç@¸c¸PœÀó3iÁ¥'r¹„�,!ýJØK¨—8 ���w<0-ÀÝ¡ä{>~›³Z&KX(�Ýä/Q¸§ÓM¾°’�üÕ~Ø]���·�ž? �áÎá{æJ?‚ìÃAÀR!—2³ß*k–Løâ¿gšûÀnÕg æ|ØÕm���¸Iðüw= ¨ÿ0¿ËÜ”Nr"çñL^¥"°d¶¯è8Û{W¶/þ0õe¾ ���·ž?§�����î?xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�„{nß,ë»���ÀÍÂÓpÂà^Cû^_¨��€›‡§/Üv&“Ñ@:­MéÏKÖï*%ç1M¤½ÑZ£óºP&=’fOÆnÓM°&åp/DÆùDFƒŽ´|Æëw”ú À’´›ÒìÕU¹.|’ÉàÙh'2u[��à~ƒ�„qÂf“lª|6œ ˆ×ï*ãž4ïÁyÜgæ·o'ŽMºÅ8Â%Û›Ï$Ù¶¥KCZ=9OeæR¾:œƒ®ó1‚/^w‡ÝAô9À*|–éñ i7\»ku%™œ¹}ŠÙTÆÃŽ´Ò6ùJÆÓÏng̯2ê<Ti<‘ƒÁŽlõ^É^ûB� ðô…s¬XÊ„R¼~]ÌNyÜ¿¾7î7up9–ißö…DC6'yw6’N#¿ÝÛ”vòÁmQNùø•tZ •×i~–«o ç2îµÁ¯ßM€‹ø,§ÉSé»{ËìôPºÝD&çª5žÿ,-Ø621s¦šë3Ùî¿“él&ç'C#Û‰œ–¾•PÇLÞJrÐs‚rS:ƒƒkz‰��ëO_¸ßÐ9I×r…�\o–jß&\5uŽ‹±ôšÑöªcÏ¥gDà72˜|r¯ à:ð‡?üA’$‘üãnËuâE\Õ½Åõ§ðWõ÷ÝßßSüH’iY#A��Ô \¡¦Š¥§ßJ«4MR÷H¦Î›X,�ÏdrÔ›:2L‘8må¬$'¶§å|"G½¶4Ìvý»§2ÒaOþ ¹ßî¡ÙôX†M·M¥3<66ΦGÒ5ü¦tö¤[Ùk†amÊNç[•·?걎»Éé{l¹œž¾sëÒhåD¿Õ×T…qùq_í×2NóßRù|t¿;•QWŸ—N(ƒîK+ÊÆ‹åÊ, óö>–ƒñÛÌÞÞ±-ëª,FO­­&”ì™ë­ˆËÁ “_°4º2:›UÖÉU Ó\ÈU@ÕFÏF]U¦®Ç0-÷§’¼ËÚKwô9Më/ì1ŒÚ¿9öÔµÿ%`ej¢´ãÐÁ[b©ºY#l½l\Rê{ØHªÛR~ýkiüIŽû®îZ}Ÿ_¤=x>Ï|h¦«Ïæ¶ NªêÑ…1§1Ƈ€öä(é �P#€p…N˜sJ¡C—+‡&ë ™/�•34îK«ášTÌX£Ã8·d;ùEùQ峕:¿6'îÌqAÈžqà7²ÀÙ/’l·œÓíÅËCéŒÞ+gè+÷;»}«´×ÐÛÙ–þ±§©ö<¬-Úa³ëÙXG/ò>¹rѺåRŽžNÏØð«Jß–[Ó B/JäØûÒI‹_s.ÞasâÃ9{æw[Ê‘¼„W*lùyÑ™ _åxÿÍÙëíóöVô"˜IWǦ,¶KËÁL~Ñy¡[]+¾Ü]}VÖ‰./g©ömD­§â²¬�TEàê;__NäùúòõçÛ±Á¶­ºtý±©ó¾H�V×éØ×aã±$§úE‚í©\‡‰HtùÜ%òíbE!èîEúw¦ìg'2ØÔ/œÔ6'Èíý+k[ñ=Ób'’ WŽx›îž9ð¾ ��u�©3sÙ¥ŠØy™¿nšFg$©;cÄEàLW¾Éˆ_´ ²piö~;•Ý—£¹=#ö­yhçjç©0"^÷Žà†‹qôcG-N�*aÚ;š¨=!‘X0ù…Ë÷\ÙmÖÞLðì1u¤NïG;.) êw^¤û^Åê:ÉJ¼oÕe!U¢.ež¥ n±H‹gcõÍ”‰ëø· ÖçÕéѨ6Õ,Žo\Êêê..Z.Eéý)hKÑþêk/ˆˆðÂ>‡}QµY9þ��ê Œs•̦c9LÇ•dÎKìÌäÖcÇÈàÞt·’hgwÞj6yø: Í;X±CU6FK;T‰›ÈCÙ]õf½ÄιçU²nõxÝ9&ý’ÉH Îé/€zõD’0ŒÒ‡ÈFÇìÑ6ØýK @Š–tmhÚkh-/ýë} C^íq×1nβTû®u¦>¢íUǪË…€Æõ£ZÌbøY¦ã7ràC9Ócã´V¨Óýýâ9¬ W}ï¹nìµU\¾ÿþ{wÄâûGܾ¢ýó¯=ÕâÌ ‡’ýú:k?w=î���y€`˜«Á…ïµ:2HÞÊûÑnÎy‰™Üºïù {ùÌ6Ýsñ“œè@*aÃݶ¤3Hdôþ¨ÄÁŠ*JZ†vÀ÷f½$?gçµõ�:{ËgîsN•�thžá{„òÇY§±lfK+¬½Ë @‡à‰ý¾l ¿óá²Q…=n^|Kµï«€~˜ôüâúY �Mùl)½'Éh,£Üoã´V¨Ó“Ÿ mv]¸º{ÏÍàŸ_´ð›L&nïD÷£Bû*½_͹öÂlûÜéÙqÐ���% �áêœ0/^Œ£éÇ�¶d÷à•ôÿš 3Tîi´î÷“b81éœé4l0TFÿ~O†“_­#ì'1Ç)j÷µì÷ßÈ4µé¼?Èá‡?[¡éÇð©ç'¯¤;üo9îwÒmƶRÁégÖóãðü@íjGìïî¼¼ÓŸ§wÌãuï¼ûôU9˜éÜÕÚ¡ë¾VÂØMÚŠd·îDÀÅø…<ò¿1Ž¡Ï#\:¾,oiE§·×;•~½Â UåÛôB޳†ÇÆ¿óõLZcÆ­=Sõ«Î¯´NÊzAWg™ö]&  ¦Ë„U(�õKÿˆpâWîi;ru¯ç„·«3_Gͧr°¿'‡Ó¿EiEiÏ­S_ö‘m¹#o‡+»÷Üö:¿„ðó¸°öT�Æí+ÚŸ¶‰£c9|þ&ÿRh65Ç4×EºÞû/ñwµ×��Ü€p…NØ™œ ¶•£©œ$=ƒçÑ@vœhûp¬ÿæ¼%Ïzܺ a8¡Zra˜ÊÉ?€œ EíàøÙòô쑇2ØQޱŸ ÔO´‘¯ý¦löMû=ã乌‡{’¸üS1R‚s¼Ìy*‡ûåÞŽ4u¯çh"æÓÕKÉy&É&‰×¨ÓW¢ÄÎæø›ºþX›®'òaüZž'Á÷èŒt=Eþ8/sá¢Yè¦u8ݱd?y–[/ŒU»øI†Ï÷åÀ¥Õh[1˜O§%»ƒžM~=\lšåuâòøBtšÕø^¸À&ÓÃZ²}î‡àUy÷öe”¶×¸Ü£ßÒRå0ùÉÍZ«ëc(Gƒïœh;‘ã\Zé=[¾N ¹6¥/omË]â_þå_.'ü4îe”¯·æ³ž<K×ÕµoBuƒu}/H{•u}ýî^ªøcÔu2eu\˜õØ/Q!��Ô 'à¾Bû^_¨��€›‡§/à„Á½†ö½¾P7���7O_À ƒ{ í{}¡n���nž¾€÷Ú÷úBÝ���Ü<<}' î5º}³¬ï���7 O_À ����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�����¨ xþ€�\+Îd2H§µ)½ñ¹Ûv•|–éñ i76T½7¤ÕIdr>sû®oÿcI¦n[¸iòH6š=«ÓŸMÇ’ôÚÒh'2uG乪úžÉùd$ƒÎ¦4{ce…æƒ$íf°¾Lio´®©m��À2àùp˜M²©êcãšœäÙi"ÛM%ÎNÏe:z*­od0ùäö~9™ýj*�C~•Q硹¾6*à•Õ÷ÅXzMÎÆz >���X;ðüÁ8°>\Œ{Ò¼˜ïº2f¿HòøEš¦µ¿.ð³œ&O¥_YW¶®J�j®¬¾D���À<ðü¸f\Ÿ�<—q¯uÅðLNÛÒÒ¬�œÉùÉPÚyu…���€õÏnE�¦c£¾íÉA_ý¯ÃàméO•[­8ŸÈhБVã[éìl*›ÒN>¨ß˰£×u¸Û¦t†Ç2}–é8‘^û+ù¶7”~ûÙßh¿ãég›JîGµßn7cߺGêw:#?ë¡´;¥¥÷kg}6•ñPåïï¼’±Nkv*£®Î_§1”A÷eQLáxÞîl›^ÿ29ê»qxzÙ”îèÔž·ùy&ìßú+¨âuMy™˜]Nˆ˜cìb…‚:ÿЖVG†ãùuáÄ_š¦ÝïàÁø­« UV½c%?-ËÙ«‰mëJ29«ØWbwó©$ïüxG]Æ‘Ótüãi~V6]¶íxñçò׋n7iÞ^»r¯jçŠX�._>úØwYïì{l½ÆcƒõÝDÞy[ZOetú‹§¶mËàÄ—±.›WêÚhX[Ò2ö×ÌãŠ:V¿3áÅú7Oä`ðÌõúß…ã«êÑÛûµ´þ”Ù×êËøJǬ��Ô Çëf ÆFy‡óüghG²Ñ•ÑÙ™í©2ûõx5íˆ+t¨áv+sÜ“ùP:ÿG:Îl´‡rr~‘:çÎH¹˜®çËôÂè½ÇÊ™´cß2Aõ@¶“_”Û©±Ç4MZÊIW9ÁΑ|u¥±9‰:ÐlßRiYwËù±ôÔoÂÞ˜Ùäµ<Ñy1èÄ”9'uÞ.MM^(w[ç™ ¾h½ªLF¿š´òÄ=€ÊÉ÷•ÀsuŠÛ-•÷‡ò:(PìU´ö{¡äË{U{Ýï|Þ¹òœg÷ßd2øÆÚíEž/c-¦’•ïGeó–mkŽ.Ýv4ùºrÇê¼c¨…–”¹vn+<—Æ*õiÊä¡´ûïL9{ÑeÊ(x aÖg'2ØtBΕ›ªÏÝ kWÆö¼u±êñ¢Q+»ŽÿÍ[Tul&ú”¯ã³‘*SWFæwÛæÜ²k-kÛ•õxü_™½Î>koü���VÖɺâe1ÅÐ8;!†wv‹Â"›0#¿×Ì.:‡Ÿ¬mOÞi/®Kè,‡KsWŽ~Tâ«Ñ–ÞÑDY8'Ra§ìîl);Ïrû²¿p}n™˜£Câ¼lx‡ß`œ÷Hü¶©²ÿ í5uДÍÁ‰’ 1«Ú}tëÞÆ«l;e\ÝÎói,_ŸîE@hcºhÝÙ¯[[]l±v–×±+SJ|÷~,Ì0›/¯õ¾(Ñì��€Ë€�ãØÝ<EÇ8ïˆW ‹ŠY+ N|ää+tØéáAÏ…›eN{Þ)5”£Ù(ç'’„áy¦G©ãÌ:GÿüXú½·™£«{wÆoä@‡Áê´ çÛW.¨æ–I¨LKê°^ŠuP¤ªž¾ÐÞØùYÙîUà´BÞ‹Úy>¥Ë§¬nârY´îl‹×seôL‡„uš­ûr8“IÒ5½‘Y/¡M$wÜ¢z4ûƒz)=���VÊI[h{?¼Y%,ÂPÍ€ª^ó{×êÈ y+ïG»³;¯fƒq4Û‰œ–8¿št ce¸¥Æ†ºÚÐÑ]éúãL¨Û–rŒ÷$eTzž±}±³mEÂÜ2)•©ïé ü\Ï[‰È(PUO±½v}i{m¹Þ!ÏÊv¯*�¿ íò®jç™È ÓXº|Êz)c´h}XþÖi¶–ƒB£M¬höõ˜;nQ={€���W nW�Fã2ÑåÆ Â"uÓI4”«òJºCå,'^9š¹q{­#íGë„úq\-Ù=x%ýÿÚPºœóêÃ߸ñUj“»Õ}-ï_È#¿-ìá+Å×{(­Í§©£n`÷;?>­ùTö÷äpú9ýM>DÐ÷$†=Ê?UvU•‰ùuˆ+ÓT4ø²&DÑb'uúKê € ]9zÿƒ<?ü‹ünì÷Ç—[ŸW‡6A‡·-œ GÙÓßWbaI»ÓóŒÅ’¯_gÓ¥ÛŽŸðFÕÍѱ>£Ún\f®Gc�³vžµÛ–-u¨’Ù8<?P÷ºåÂ)SÁ†Wšl^ñºd>5›GOú³+ÃÉßóušžƒ»†T™õùߨò°yDÇ-jÆÞ '>>���¸@0bâæñŽñ·Òv³ fަÆ™UK @²Yõ¾`†DãÄ+g¸ý­s‚ñfW7[¥žeðh ;ʱԓ”|8Ö¼Ë'³i6ó q²í, ã×ò<ñ3#†yTM¬að˜t‡r4øNåc…Îg#("{Òãm½KžJ3-qN™äpå¦í{VÂp=µ¤3mV×A%PôDê- ~6=dî7J î'ÏrëºÇh9{¹:P‹Y`XÖîg’ìëÞ¾ŠumÓÿÝ¿TÛ1û]ýZÛNËËì|"G>Ô7:_+ Ýñ®¾—.-˜ÂYM_¾NS?É䣲K WoKóYOž…ë½}ÙÚC¼n{ÃôÕâÚ\¾–Ôñ‡ÿ–áó}9p/*üu]v®•õè„·=VµÕýýüzÚ[ ���«‚�ãTÝ<a¸ÙPãXÚ���Ô Ü®�¬˜dbe\`.°,´���¨@¸…#~i/ qà ƒK@Û��€š�ãü����ÀýÏ€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€�����5Ï€_Ì™LFé´6¥7>wÛÖ™™œOF2èlJ³7– ·����î?xþ€�üB.Æ=iª2ÜØhÝ x1–^SÛ»����¨xþp?àìI¿ñ-©+—€·l«Á‰@ ���@½@�Â=€gr2Ø–F³wàíÛj@����Ô \³�ÔãÍ~”^ûÉgccS:ɉœãÐíÙi5Ô¾G’Lÿ.Óñ+é˜uu|«#ÃñT§ÓV÷H¦3'¨Ì6½4¥|PÙNe<ìHËÛy%ãégeÏg™ŽžÚí­'r0x&ý‚h;—q¯åÒSK;‘i¸Í¬«tŽ_H»¡Ù”ηÊ/�W±õ¯ÇZKòœÉä¨ïòÔ˦tG§*7ÅùDFu¾í×2NíÚRö|4¿Ô̦ï¤oòQyìì˜c€����õFL\³ÓD¶d;ùE •JDmɆîýú”Ckl'rê9¾¹-ƒ“3½"£î¦l4º2:;³̉¯Óä±RßÈ`òIýʉ³´WÍîo¶‡rr®¤ãôHºJP6:#9;I§á~gÒß®èµ lõ iv"Ã'‡ÊV%ðÆ}i5ÚÒ?VâÔÛ™ @gÏR¶Î;6ÂôÚyû‹$ÛJÌmd2û$“Á7¦,Sí÷›tçÇÒk=”vÿ—™F����Ô  \£�tÂĈ·)¤† ™p)†VæC.#Q¥„Ú`Óõ †‹Þÿ›€¤ÝûQ&JÎÊ×LŒÍ&ûÒýªþúUF‡VPš=óC@çÚ±|(é<!ïŸÉÙ¨+ #¤Ý9 ���PK€`ÄÑõ‹’ˆ‚qÇW FÅl:–Þ q¬U&݆lNlxdŽ3™$Ý 44™#C¡÷QÆýV@•ˆ§2á¶”­ŽòcËø,Óñ9èµm(éR°$Ï À‹�–µZ���àfáé ×脹½°ç)¤J�6KrªÇë…¸°ÅVGÉ[y?Ú­îUs醡¥ôÁÄ ®°'/OÐsöáHº]wœëa¬î\ÁÖ¹ÇF˜PÓ-%Z÷$e”KÇ¥[*�Kê¡fÖê��àæáé ×ê„Ù0Êpb-ªöd¨Ã*Íx¼¼™M²©ìi´_ȱ™´EOœ²+Ã÷ÿiE]~¬\Kv^Iÿð½Ž]9zÿƒ<?<Q¿Ñ¡¤ܘ7•ÌùÏ2è¾–Éç±ôù´‹¡œŒ ùªõµtMø§Æ‡ªúñv~  îÑøF«ØzðZv+ýàò³X‘ùP:Ú?ƯùTö÷äpú7s.Yï©=7/m¹úÏOÙD8j[yOéý¡Þ"ãL&£tZ›sz•oúÕÍIÚÍ;øâ%›´ë®¾4Ê&ÁR÷½VW’É™¹/nùûÿ4‘vU´ �À=×ì„}fËÔ‹eƒŸåÜõ@Ùm¡ŒŽOg fÐÔÛŽ²“ K7)‹Ú×p¿è¾ã¾ “4ÂÇÍzñ“ ŸïËrdtú™Ð¬ÂM÷b†é7¶ååÞŽ4u/Þh"ç+Ùúûœc]^-bý,ž¡ ¾S¿Ó3žÈ±•: ½´’äÖµS–«ªƒ—/¤ÓTv0Z8ò®£Ë ë§e¥–ÐÁµ¢Ûïûgù×ýçܱ¶l/”ïø(¿=홽]2ûç…ߺ¬`âû£2)•³!Áýújà/á®ó¬e&#»0“‚5esð^~=UÛì‹¶ u_þúž¿ �ððôœ0¸×,nß(/8¢vߦ± ·¸ÞÔBÏ©ë-^ªGU;¤_܈H,ŸZÉ Ú¥¹k÷žÿ÷—üãní&ÐQOÓOÕÌN¥Ûuã–ý ¡´×_GW<“mõ ÚíÉІ¸Ï …_…•ÂÆóvWc_À\»�Ô½{…k@‡É·Ý6ý§c£+��j�ž? �á^³\ûv=gY;Õ»Aø¯Â8“îs!ÆA.Ù^ÀõßP/áòðfíÒܵ{¶W/üãå·ß~s[¯ /âªê.žeYµáþ~0–U×ßW½‚ ]Z�.²;D‹°ÍkC/¿”øÜ~ê";ôõÿ¨üó;��÷<¸sNÀ*,׾݄?ñ7uX÷¥ŒÃ0Ù¥ ›àG‹†Ö9<“þø4 ù5‹?>úÈú¬œi7öªÑÞ‘–þ¼‰vèÿ.Óñ+é˜õðx—o&¸);oU~ÞùÕéý(=?J‡ špã l9µë¯ÇšL®î]–C¶¬&³º´"ʯ-íƒ?e!å­¾joi^š_n|šk/þ›©¥¸ÐäÒY•Ý$Q¹´ƒm.¯lÜœªûcOf{YÛPÛËì>ŸÈ‘Ÿ¹X/-%¼Lhj¾çͳU·ÛîÁžtû%bS¥5t¤ÕøV:;:”ß^C³é± ]h¿Ÿ=<Vö”…g#íoòaßÙ²Œh�¸ûàùƒyðÜW–nß%³»Î&Cy÷NXæ<ê%€&$Ô J3Qжs.ÃZõÊiÖ!¨ ç̧“ mIïOÊÉvc¯ÂÞI3¹’wþýñfœª&­¶ô• LÓòŽ­ËÛ8ø~Ò!/zc»æ{5èóºKäë:[¾ÿþ{wÄâqtá÷Jý¤$fÒ¬¬ Uö\ùq«ñÀºWkÓŒ{+×ìn|sØã«l>9´íìüXz­‡n"­ìe†€óÛFl·]·=‘~b°b¯Ÿ¶÷+·Ýæ·Uèmtùêsg‹vcüÌør÷Û–Ÿ0KQV޹ `ôµª®/&€€º€çöazÅ À—PÖ¦¾dYÿ¹ ïXêõ'EÁ³l €¤Ýû1šh'Z%ã ÌoݘÄBèí‹ÏS;¸)LªQ.",ù}±]yæ¥sYŠçpw—¥ˆë2n3Ñþê2zàJ?›c_*l.ÿgÅX&Üf“}éÑäzÄ—ütLlçܶR™Ž Ãn÷å¨RÔjŠíÔÏ×Iu9êó{"[N„êýKÎ �ྂ§�÷š¥sE®wB‹°­’ð¹¥C@Ïd’tƒÝä±[ê»^ÝÃRØï~_ÚW’V™3>›ŽåðÀ~³Ð; Àòc¯†UêfÅ…_V ë'n3Ñþ¹BJa…OÉ~Ý{×~ž].ʼn.óÂ࣌û/œà+i %m«ªm”Ú­g(=|††éX´¨M‚°æªÞÍ¢m6¿êÞé¼=Aja©.k�€ûÀãÇ–¤Ž…?9Ä·‹u^ŠÎÓm³®v­*2¬C¼ÑèÈÁA7í!ȱê$0ÚñM¬“líÈõ¡€¡ 3ÛôTõ*ÿ‚ãí~_ÖóSÆšw~]xœþdIòVÞvƒ}±c=ïØ«aµº¹}¼PøÃþ I’¬>#h\—q›‰ö/€¶§8>zvÐNϱ[DÐÓ÷áHº]ßn|oxUàü¶ÛmÇömIgÈèýQÔžcTÚãÄõnFŸß1T À•á®ÅrÔ÷«ïÜä8:½ï*Å#�À}`pN…vðÖJð]#ÆyÌÆÉÜWVn<žqôË{–þ „r˜ûüw&Þ/àºrôþy~8‘f •ûF¦w®½Àsá ¡ÃìCÞ²ïXêI\ve8ùèÂC7¥“œÈy:ÐÏûÿ4ηµÃÝjÉîÁ+é¾ÏÛuðZv+Dî%Y­nnŸK ?O\—q›‰ö[᢮ѣc9|þ&Îé¾EÚ Ã<u}÷_âOµç“WÒ–¼Èð8¾j}›íÖ·sÛsýÉ«ÓíHÙûronÛÈÛýZvm»ÒbÎö²«sÜ}-ûý7Á¸;u]ô;vìªúWAMq/iÂû´‰âǾæÎÛOðÜë´˜ýÚ½pÑ¿ÝzR’�Àý·†v—Íòvkß,ßkLO°€ïE+ŒŸ*™QÐL‚Q6Ó jCŸ~’áó}9p3fb-™ôû‚a¸¨Z|ø›ëuñéf"P‰ÄÜÁƒY@003.6¶ååÞŽ4uOÍh¢Zx0Û§þÍÑ@v”óŸÎà˜³ë÷9Ç#¾m{mˆëòYOž¥ëMiïïû]¯ ™ˆE =áÏïNÈøc”ÈŒ²ñ¥þ»€é~¿T‡FZÜd0±¶±Ò~ùB:MŸç‚¶ÙÍ ªgç<”ÁŽpéL uÿîIrஃTÌ…/êôÜ«³K}>³€ªköT‰ÛÜ0e¡Þ��÷ ÜÎY©º j&�CºÈ9¼ûh§Öê��àæáé ×K‚¦ße ¿©ö1~Sí>TœûV”=z%cßc²â·Ð–úž”&ì-i=–Ž¶Ë ÀxL`ºþT’wÙwÖº£¿Èiø¦Ü„ñYÊ¿Måϧìû_ö5t¹ýY9dÂYo ¿ÇåóÐûÎd2¨òy,ã·Ù÷¼zÇξÙ‡ËꩬÀJ+ÚeCÀ´=áâzõ˜¸¡*G³-¬çëAç ë u��póðô…kĽp“[Q³¥DŽU&Ü)26 ɇĥH‹¢ÇihÔrßBû_Yü=)ÏÓ†æ¥yÁ„™õpê}'òÌ·§´¨R¢K·ŠC©ª¾Muôv¼ŠN«ôû_zŒK‰ýAYZnþ[]¹<¬È;sãĬȲãxìX'¸SæÔSŽŠã>Åvé°«gÒ´¿råjëÎŽjFõNZrÕh»`=¡n���nž¾pøümééñG±�,ŒG‹îãßB[ô=)3ùA˜gºh=ž%Ô7q<NX~1ç`Χjö?7aH™ý¹ã\~¹±;~K»ÍöÄe‚¯8žfN=åX¡>=^$ûÞM?YC\.i^=…¼XÖj��€›…§/\/ç'’„!¦§L †RaN·_NŒ•} M •e¾'UÌój M¿bŒ9Ÿ*8ÇþÜq±=š2 @EU=Å,YŸß#êzi5渒4���àF@� ?œ˜ñ}å=zeSëÛmN@†?eßBKù<÷{R6ýëë´b«âÛTæ|ª §ÄþÜq¾4™n›ÆK @G¡ž*XTŸÆvŽ¿;®8Ã&����Ü@¸V.Æ/äQÿ”$ ¹ôB óFÞäðÃĆ úÞ"7¦/ Ñ÷±4>IJø-´_—ûž”Gôãðü@Ý»eTü½©|xeñcÉ‘ ›÷m*÷í­òï)¡YeTþ›Zù±“èòa´^ úõ¢�¬¬§ˆÊãJí²cmNêÜÕo;ÉÄ•ÑiûtôŒ°Ý×%=¹����pÕ �áZ¹¿–牟©3pú}x ŸPEoÊ…ú‰KÔÁN,ÚíQ/Sé·Ð”€Zø=)Køí(=æn¯ÓRùd49µ½}.ÏfGzÏÂõg’ìëÞ¾Šu×ëVúmªÏáù4K¾ÿõ¾ÜþÒrˆÂEƒ°LÛÛç$ûɳܺïÔT×SžÒãrç£ìÚÝ“—eãü|8o8óê Ì ����@�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€š€������¨ @�����€Z òÿM„Ò5SŸÃ����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_read_dims.png��������������������������������0000664�0000000�0000000�00000217301�15030617045�0025135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��2��9���õÉm���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýÍkÙšèÿê¯hȱfÍÌ\r¤‰”'žxDƒTB ¾´6n* ÁlCñ$6˜6q0ÅψNêžÆ} õILsL!’Þì.´E6ÝE•¢Ê‘<w½F®ˆŒÈÌRÊ·ï[ù±båzžXkņ������, �����`iÈ������KƒD�����X$2�����ÀÒ ‘�����–‰ �����°4Hd�����€¥A"�����, �����`i\;‘±±±Á²f �����óv£DÖÇ����°Hd`*o����À"˜o"cp"ííšYW­Ñ‘s÷p¡àµµ¦tÎî‰sé%M©ëÇ7¶¥Ù9ÿÌ)ݶɽ¶l›mîƒÁY"»µ-ÙM~¼ûïRb&Ç{N®º±lnìIÒ¿rÌZX·$Š¿•ã$–V÷?¤×m¹0˦DÉ©}K?‘¨èñ‹žtÚ ·.µÔrØýW9zòµtÓÍWŸ×iK£îÊœ*÷Ãïå䨥>óI¢M÷øè²/§É^ásfÙŒÕ眖®£ÅòºÓ“ ·%)u|]ðút1ëu¯5rÞiJmã¡´{ŸÜcÚ•Ú5¹í‹þN¾ÊlO]âîÈ,),W*Ÿ3)Óª¬Å‘:¦‰ôÝC7“ÿ.¶üÏlý×sûçèRúÇ/$ªérZ“zóHú‹R‰Oe ŠEGÚÃ:IôßI+Ú²ç_ý©tú—î��€ù˜o"CñüÄD†æi²@5ºº-ôÝ“Æë—Ò˜gð?²mÓËï£þú׿ºÿݲ‹c‰o*^. ¯íJûD=ÈtUY¬o»`»,`WL™y4|\v½¦Ë–õÜÙàƒÍ4ðQ‡;ªœEù„‚ Z*xòþ'鵎$t¹Úkº2fÊ\.!0øQ’½}W~óA¨p¶UYØ’¨ý!“Ìôe¯}"ƒ«®Ä›:aÒ•ô£õzw¿È’?I§qÏ{Ûú}îQÏn_øœûN×8¿Ù0‘yGvZ¾ÝñÕŸ=£D×d÷>×Ï¥ßyª~›–l_¤Iù ¹jÛ4çâUÿHšuuþIŽbºžÚŸýw¯\?�€Uµä‰ ÜèDFç'ûšy™a"cÍ;‘ñå—_ÊgŸ}&ïÞ½sÜ—$¨ع€p»-½ô°ëä…îaCýò+ºçÃçîqŸ x,ÉYþj§ .]â®(É¥“z/¤a ׫a¤DÀô׳¡äjºIJè+³abFŸ‡OìßE‰Œ"çi6_ÊkÌÈì;Çl_LMó–ÔÝõÈ—o—LšQ"C»ÛÞ‹Æ%-—½Œšs88÷Ô¹ÚH“¤Óðf]®S?�€Uµ8‰Œ/Úò¶I-ß÷âDøà¥Äi²à?Ý]}P/’é•&õZ8œé+Kö*Ó@7¼zo%6]gƒ«Íƒ¾t“ØuVK½)‰¿R®•nÛ¤D†þ¼Ä ¨íÊÁëgÃD†i4ÚÏ3g¶û™$¯›vØAý©´ãöñpŸ ΤÓÔÛd/ºÚ}z}ó¤ö;mÈßþíßJ¯×sÏLàá– .|‡G±¼6åMíçèPN.~‘“ö®ùÛ~Žj„÷~(ym¸G} Uâ·ÒË<gM•ÈpÇ}|2ËžËXAП¿’9’ÈðÉ’ô ʼnŒôûeK—ѽC›ŒÈ'2ôsÍüÔK9KšÒìü§[WAo•…LdøzâžÔ£Gö<ÔûG•±cW>2õGZ?èÇÃz-8ÿÕëEÔ{}ùSÒ=sžŒ~ßL™öÛt_Ň®û° ©óÑòÝ×Ç\ã9rÏeÊwÙ÷Ê(ÿ.ƒ~Wuþl™²0ÜΨý­Û/jŸÄßK?xX÷Ž~ö„ïÖÇ_¿'ÏÕçæÏÿÌëôºõ°¬c{\Jëýä¤ãôpqËf|$?¸žRQ¤ŸsåyÒç«ãÑñCÕê-éöH_?Zÿhá1°ë,bé{‹Ù×Õ¢r쇈ÛT{É£šÝV[w ¿Óèù—ß/_KçÃáð7Ó|çÿ›ö³ûa¸>SO¸:cØ ¤h;ÿ+W~'¬ÃïËú#‰Ìzt™ü5öS¶/�À²X˜D†i°]øä„lÜs•ú“jk¹RÈùîéÓõÈ~–žwàD~hïÉŽÆ|—þ4‘°£¼.¸´W¿¯ü{Ó«Ç“¶m ÿy»‰œ †† b} èÿ¶Û|–j8š^(¾!î³_í{Í6ªÆíÉKi®^"Ã/ú±I ´!nàA°á†‚Ø}ëËO¼Ozm ºô¤ëVkšD†}̈́ēo¬õ`È(˜gB/aR"3G‡_Âm,Kd(î½Ãò醕èçÒ€"XòëÐÉ'ö<1çXÁ÷^ÄDFúÝt�~lƒgS<pI uÎù¡n>IcêƒOr–<VåÃÕkæü¿gð4ñèö½Þ›®¹ø í½#ß7S¦? ÷·­~3'LÝß…å»ì{åÊ~éwqIµ]&Ð ²60½pûdK¢Ö;õ®>5Ç·ä³ß~3æ»^™ý½éêP]ﵺò)sþ«í5=Šî¹u«€Ù ÿÐuü9w¾Oq\òet˜p¿'Zé矨ß[¯ë:¤uÜ—+3ÄÐï/õcöCQÏû;hÎGßcª Ž°Cݶ¸ß ›p´ûÞîÓOn›‚so$é(Ù/aW¼lyHž¦°ŸY¾¹ò[ºŽÒ²gÛzG¸räç÷ð¿Á®��Ëga¶A‘KL˜†‰jŒøF™o ß4‘‘iäå®0»Ï8úÊâ?£ÿì‰ÛVfôŠvvŒId˜ÏòÃiŠ÷™}­ Jz\—i.è2^>�vûË7†Mpêíù@oÜkóTC9íÕãƒ{µ3lÔgÝr"#ýΊn¸Ï¤G†’IdÃJ4·ip‘ÿ\E—Ñôürû8ÿ1‘¡—‘&7²Kúý½tŸÛó;ø¾™òaÖ\¥/”Û¹m*/o%‰Œ¢ò=Õ÷ruUÙw1å{³ дÛië*_ƒï$gF>»ô»^Úm1Iê~pe÷•ý̰PXþÆœï×9.i]><•>?¨K(¤ÊÎ÷»Qt>›ïlSø½µqŸ[²_²å`t?Œ”ô3{åÛ9R~ËÖ¡·;·/ý{sejt?�€e±Ð‰ ÿ\äÜJ"c˜È,æ5—¶+êvKŽ»ö½î³'o[ÿy·“ÈÈÌšŸ súóæ)ß#ãw¿ûüñ”ŸþÙ½¢L¾a?&x«è•òûxÕ¾<°&2l°0<æÅlÃ}r+ fƒ¢ü¾ð|ù ~X‰föQA Ÿ*9ß2Áb¶/Ü×S|§°Çj¸]#ß#_F¶3ç¢'äÀu“×ûÛÝÉ&دÙò1ìªo†$'¦ eåöEn›ÊË[…ò=é{£e$ûÙãM%Sƒït:æ³Ç}×pÈFZ÷e÷•}}XÖÜw0ÏÙ×9.ú‘ܱ¨ôùùý7öœÕ‰Ôï$ñ ÷`¬Ñcåå·1û½•±Ÿ[¼_Š¿wð¥eÃõ¦(ØÎÑï0®|¿¶x½��`-t"Ã^íQ ¤;IdŒ^ ·]\í¶}ôïõŸ=qÛÊäAýÈLVz»¼Ìw½¾Yïëò‰ ÀH’D~ûí7÷Ì$ùà"×ÀÛø÷ZO¯?Îáþ˜¸÷ÙãWè2äÇîû.á…“}^ÊÙ›¶¼9vÇ/º£Íàì[yþF?>Pœhù}áä¶33¬D3ûhL"#ŸøÐ̹”;ÿFé²ï¤»ŒH<Åù?ù2ྯ?W‡ìð†H_­nw¤×{íö÷Oöü ê‰Ñ OÑs;ê ´èåöEn› ×gT(ߥß+äê¢ÒïrÍD†ë‘QøÙS|×AÿXuBÃìŸì¾²çbXW†û`Šó½ÊqÑ䶯ÒçOÈpÃë iw~^áyâŽUÁïÁÈ6=N%rû%ÿ½GSYÙp=2 ·&ìŸÌvç_ëþžøû ��–Åb'2Ò¿õ¬_ 桘E"C=îéýñU£ìýû¿¤c–k#93ã“‹>»lÛÆÈ$A*Ì‘a^?.‘ñŸrþÝ¡´Ìm9Ýz „ÕÍ;‘ñ‡?ü¡bÃË[nùn&ˆ6~Ïúä}ÿlÌk=¼ o™ª¯Œê‰÷î “ .É7±ÁÖN0ׂz,-‡A÷x <•fº.—H' t“ã5›oäÌüí¾s>˜1à=‘V÷£+Sùàä\zGÏ¥ÑÒÛ”ô÷Þ~Õ~7ý9Á°Íò›¥Ëº›—Æ=b¹câÏ?Ån_¸¯óÇQóûúq&½U¦ „Á­›Û!œ`ñü;iþ‹sÁœ~.½¿ÏÝ\nnˆ«pr^èýŸW²ë'!4ãøïÔm¹}‘Ù&_äz¸UÊwÙ÷ Úÿã¾ËÙ[î}YÈ?Ù2~§ŸË?»ô»^¨óð‹á¤ z»Ìºrs†øóÇ•µ¹¨ßÇcêÌW>.éöü4ŸïëlWoø@Ýß:sιíôó”Œ$2üûÕ±ò“£êÏk¿•¾Ÿ/ÂÍ]b˪>†v?—~®V²_ÒÄÅÙ©ú-=“_òû!ó]Ã^uyÖŽ‹·³¬ü¬#îþ%{,}™PuŠŸÄ­·õj&¿��àîÍ7‘á{1˜ÆÇ=ùBY&`׋k ¦= tÃÆßD=_kü{ëFÿúIÉŒÜge_ ÇðrÕ¸±LõX¿“׿J´ˆÍ´3K·­(ˆ ŸܵÄl×ëÿ¡Ïúÿîï£ÿ_°Ýªæï–`—�÷wíKy¼‘ÎÉ[·Ý«3´äºlƒÚíŸÍ†Äûª!ìþÞÜe_ÝöoÝhÿ·tò½¨õ­$ÏÆ½Ö²WÒó'9:ùÞ^6χI+½JìÖWôÍßéaxL#‰Mb* “áÝtôö¦s¢¸.Ôéçä–í¯åÿa¯ø9³è °W²Uþò&M²d{Wdöµ^2Á” BÌs¹ý§¯ §ï»'Qô߃¿Õý|5ö;Í&Y7‘KÒØÏ ’@™»Pè}ôRºzrÆ4¹©êŒ·mùBýßN¨øKtíÈ~ü¹lúäUÿyÞ‘ÃÕE¡‘ýœ.uµ®Fð\8j>¡2©|»ïVø½ò½…Â�2ü.½áä™#ëWÇ?Þ—ád³{ò*ÙÎSUn>|öé»ÌþÏ~×ßËW_ý½Ä¯õÝ1Ôß®ž¾Ìœÿ¶<ëmý¸–Ï‚íý*žp\²ï×ïy=ùlmšÏ߈ö%N˼úüW¯ŠËž$ãçò¶ý¹ú¿ÚÆ4à…¿sjq“šª-r Aý;£öõþ3ilÚúéô8WÖÒÄ€SR^ýo§N޼Kžìõ™áùñ.‘g[~¢ä²í ˯þœ²ut²eÛ÷ØÈ”Uµ„ c��°tæ›ÈÀÒàx����‰ L…ã ����X+”Èpã“Õv.wÕý\±cŠ ¶Á,EcןÞv�����æíF‰ –õZ�����˜7¢ÓŠè����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆDV….Ë,ëµ����«€–mEX”åõÂñ��Àª e[ÑJ=9Š#©E‰ô‹þ^ çÒë´¥Q,IÿJý}!ݸ.7úµ+ÞJÝ—(9µ]u%ÞÜþ½BÊËò©$ѦyÞ.{v÷‰ÒÇÔý|•yÝp©E±¼îôÔQ™¡•(·ó£Ë<\ucÙôe£Þ’îÅÀ?£ŠÔÞ°ÜlÆÒÕ§²9;Ònl»çjRo¼”îÉ·ò¤ÕUïšV¾ŽðÛâÊóu˜s äýãž��ÀL‘Ȩh^ÁÀ츀_&�Ìÿ} .Ž%n¼™éº½¶l› g†ƒIZèuVM\¨À«ûBK–ì_–?I¯ý0.Á‰´·kRktT˜¨åHaº%QûÃŒ’s(·+füñ¾m>iQ“zóHú>—¡˜sy»-=ó˜>—ZR×e'~+=“ôð Æ-ÙŒ§OdÌ´Ž8ïH£¦¶éà¥Ä{±¼>Ø•Z­)sµ}ãž��À­ ‘QÑ|ƒYùI:{A�˜ÿ{–>ª€sçVÖ}ã««ELPR1‘¡5uȬT"ÞùD†ë­1 (ó‰ gð£$»[ê3J»÷É=xSwYnWÏM뮿þõ¯’$‰üöÛoî‘*tyúBE¤¶±%»É’†ùº'ƒ?†æ\ªIm7‘³|à ÑÙÖAO¥‘27î9���̉ŒŠ–*‘qq"IØ=;½š>‹®ª'ÒP…yo½!‡Ý¾ <.¥ß}™>W‹^ÈqÿR=~.½¤)uóYú=O¥Óÿ/9iïªÀÅ=æŠAÿ´"äªÇj»Ò>Ñ×öƒÏT}}ðLžwó×òÃíÚrA‘_gW’8’-`û+¸÷%jëöúþñ÷ÒÞ_Ø[ 3”D×D­çÄf[ ¶±óÏÒößE/KÄèí-wÃD†ÚWç¦:>5Ùnÿ çS\ÙÛØ–fçL=ªÝF¹]ã÷d½^Ϭãw¿ûÝ5º<=QçÑ©:f;êüy,É™Ûÿi"×™{ÒèüdŸ«¬¼ŽP•„t“X¢-]¦+ÖôÈ���X($2*ºi0pw\P`ÔŸä,y¬ôþêøø€pp–Èn̓3é4U#ßö¹|To³WOMPkó6�±¯Ñì‰+²ŸeÞ³ã‚S×[ÃlãJ§±ã˜s9i7¥•Od˜÷Þ³Á…ß.¤èõ¨ÏPÇÆl‹þ0 X/Ü÷WÁFëôîsG‚t%Ld¤CMê.‘¡{�lã’Σ1¾,û¡�.A“[&'27§Fí‹¿—gSÛË ]ñ½:Òa·PnÍzÖƒÞÿ7á~©–Ðð‰ u¾¸ýŸÎ—‘&2Üñ¼I/žÒ:âÊõÎPÛ®ËÙå5ëˆqó`Œ{���3E"£¢°!¿¨K!ÓÈöù¸€ÐÍŠIRèÄÄ{¼«çÒ÷• ¯Úg?+3ñ_ºèíú‹ `ïÛIý ¯”»ÄL°]Ùn㹞¹!"v¼¼ÿþe½ ”|R"³ßt]°%‰Œìw\Ì¥ÜM{d(fß©@Q'%®u<òßv¹]mEÇ‹OhŒ$2tzóäP"ulêñ±\èrbŽ;ž×NdLª#råéºu���æŽDFEºá¾T.zÒI\WißHºÿ‡¡ë™°wäûÌûòô]’ôn£‰ ^µ »„«�§‘¸‰þ¼ü6烔\€=6!1&Hû¾’m,Id,ºñe¹l]ghɉ *½Ÿ¿“¤Ý°C•ÒÇóŸþíþ­r»nZwå{døå³Ï>“wïÞ¹W•ÑÇØ'2´Ë´ÄnüT™cãë‡ë-™TGäÊÙuë���̉ŒŠtÃ}9ø«žÛÒhwTò:h¤ Ý•ípŒwÚàï^õö.>H;º§‚û¶tz&ôȨ ç2ËÚèvÝ}"ÃËmcþ=Kb|Y.ÛGS&2ü°?ÂÔÇCÙÙ•Z½!íÎÒËlÃ-”Û5rÓº+ŸÈ˜.áéc&2”tBXµ>wLí âÉ>Õëß<ÿvôñÔ¤:"W¦¯[G���`îHdTtÓ`àî¸ Ïo*ðî<•zÚH·Áè0°Ëþí縰“ƒº÷ºàÀv¿ÞN‚§‡[´ßÊ© l—ðAÿHši"blžõ?ÈûÞÿrããõd zx†¾r ‡*HJv»‰?íøôá->µÁð¶Œz û•ÿ®ƒ*¨œ}ÈÞ4V çéPïÎt/z=Ìäßç/j?mcýYúï?¸ Ußø²ìöQ>«xûÕôîÓŸÕ¾t¯ós¤Û0ûr›I¾¬¸›Ö]>‘Q-áéc¼7šÀôóe¤åÇ÷ÔÐ=ž†C¸ýc9lî'-4¡Žè_dÏûëÖ���˜;Ý4¸;¾G†jÄ×"i½mËúJgÔ’ƒÆÿÇ5îƒn÷éß:ù ‚Àãö½úñzS’žO)äžów1=2ôÕUD¼–ö÷Üsÿå’(.¸è@7¸³Äƶ4Õã*(}ö\^·"Äø øòAKxg”Ù?—MsgŠž‡ßa?–}3I§^6%Š÷EÏÕ`ÿÞ“Wɾ¤ót„ºIHø×©€æûNöïîÅÛ˜N,©öó±¿KÆâÓß«˜K˜ï­wEÛ$yücj‰þN¾Ê¼Î/:=7þŽ!™ý:éx|!_Û;ÝÔ¢çò¶ý¹~µÿY:™r:£r»Fô÷¾ }ûÕê -[ž†½y4—|Hš:VænAûézë(=–ã”Õ}¹4ÉVwü3K…:��� DFEºa ¬Êòzáx��`Uв­ˆ`�«‚²¼^8Þ���X´l+"Àª ,¯—•8Þ™aJ£KvØ ���V‘LEº± ¬‚|Ȳú ���° hÙVD0�����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD�����óCT^‰ �����懨¼"�����ÌQyE$2�����˜¢òŠHd�����0?Då‘È�����`~ˆÊ+"‘����Àü•WD"����€ù!*¯ˆD� Oÿ6°d��€ÛBK£"g�€<~²Ø��à6ÑÒ¨ˆÆ� ߆,ö��¸M´4*¢q¬€A_Ž[‘ÔÔù¼±±-ÍÎr–|.Qrªžü$½öçw/ìk§v)ýãÕô:kRoIàžZ=9ŠÕwŽ黇0;¥¿ ýD"SÎü²'Iÿªà¹àñ°º¿•Òëó<>Vx§’D›î¹ ÙŒ»bè¹ô:miÔkî¹mi~/'G-iUªgüz»²â¶åÚçô•*‚{%ï÷��óGT^Ñê6΀E÷Q5Ú÷gìéDÅCÙØnKïêL:ÍmÕXoK.íÞ'õüOê±gÒ9¯–…ôÚ²½ñP­ã\ú§R¿ÕÀt ÝÒ0‰—iÁ×"&Ç7Þ¬T€4ö·A_ÄÖš#åÊ”›š LÏ.Ý#×pÛûóë_†ßÊß~ûÍýï:|ÒB'BÏÔééúå‘l·OÜcºÞÚQÇ>’ø¨ç’çÒ;jIT«WJ˜Ú:fI¯œwšR«íÊÁëXöâ—rmI­ÑQ[6î9��QyEöj Ëj,ËCî­%~’Nã^pµTœH{ç‰ 2¯º?hK¯RÃ5þ7céÞVî"dã-׃dZö{Ï?‘á»»Ò;þ|råÃ$ºt²lhÐ;”½4轎ÛÞŸ×[ÿ2Ô/½^OþöoÿÖü[Ý©$»$z´%™D”îÉà{wùzkKv“sǸj2ÒºêÆ²9«$iÚ#hs´.÷�� €DFEËüåæY–ýwÒŠT�`Ê~±óÌsµ]iŸü"'‡nȆ^ò ëáÕÍ(Ò½ìó£ë9·IŠM¿ž ËHà¦^2ì^oÈa·¯övpK&I’nß#‰_ëÕküöh™a.[µ?ÈEf;Õ~9ýÞý]—¸óÏÒ÷ÝÈv†C\6¤ÊÉ…¡òÝÐK^—A9NÒTA˜z¾Þ’nÿIÛ¹uNXÇ£X^»ïfŸûENÚ»î»êeFÙÐßg¬óŽ4jù¡:IÐ’Ùý™.æ˜íëüþTåê¿‘8º/âCWþ]™rŸ0z^œåWŸ;?¤oÆGòášÇK¿~Ñé†ý^òå—_VLhœJ²÷\ºmo›Ún"g&S&2\ò° 'ÎôÂzgKEÔñðueWužm™úF¿î­9öQû[w®êòö½ôƒ÷Û²@ �Àò#*¯hgÀ4æW–mãÞ6üÏ] æ®T›ž;®«¶ï’mƒ€²+‘öqŒìHÜýh³ß%<L6è.Û\0pÞy*»W g‰ìÖ\7ò’’^‰uãÉ zd ·Ïº÷Ƕ |L` ·í›OC_¡ÕWoïI£ó“úLÂÂî'ýºÇÃ.ì&ÑQt¥Ô­£þT:}µ]f?øÏ e¯ûFŽõ°½½µHZÇ}¹2ß[Î/ä¸ÿÉm£î¯ÖX¸Žÿ)G>0v Û%Þ}¯‘„Êj˜|>åË¡¢“;Aï“ìpWïÝñ7C |Ù˜t\ƒ˜Mtüj‡QùÏ,=/\BÄ”g}ŒŸK”Îñr½ã5¿úeza"Ã/Ó'4\"ãÊŸ·>I$2üñ0Çн­*sÌÃÕ;¦ÔÇÏžg¦.sõŠþÛž«r–<Vu«ªwZïÔ±tÇ;SG›cÜs��ÌQyEº‘�¬ßp¿e¼\"Áta¶cŇA¸„Ï]öÝö‡Ï[Ïh"C7Ø.È.›è3˜W#tÖÜXøòDÆèöžáâ·Í&OT ÒhH3ìš^šÈpëέÏnWŽ{]nŠ F×L¿ŽÌö^?0^ôe›Ðñà t¹x";á°’à\HÉðØå?sä¸*¦\ËFxÞŒ=/?J²»¥‚à/¤Ñ|ãzh«{¼Æ-“ùD†þ¿OÈêdêOê¸Í*‘áêŽàýÙz0W—厽-oEåÉ< �ÀR#*¯hº°øæW–/í•B=\áâÊ^Í4W…/mC»0Y‘oÀgeŸs ö’×fÿ%‰³d7Ì…‰{¯ "Æ Ùí C¸%$<—@ {›h¥‰ ûÝŠƒÎ0 öuZ.XJƒí¦_Ç ‹N—™‰üUsSŽt²g/;g†I&ÜsWöítÛë¢ÂñÊ•aÙû4á¼ðo~øËõŽ×TûcΊzd|öÙgòîÝ;÷ŠqÔ1IŠKé^Hñ³]·ÿÝq {áT2ºïÇ&2òõBibÌ> �À2#*¯hgÀ4æZ–]×x<¸! º™oé~BV¶Ÿ•nÜzFÿSMôé a@’ ®™È0ëØpÁjÞ@.N^JãÉŸ$y¦‡� æ–”[waàEÓ¾NËí¯|ŒiÖ‘ÙÞüúWÃtç“ïóPŽ^Ê^3Üý0TÛ!ú˜W8^¹²–½±ç…ÊÒx&I²¯>?œœòzÇk~+ÃDÆô /—ÈPl*½>¿ÿ]Ò6³?‡gßÊó7£Ö;Ùº„D�`}•W´ 3`ó+ËúJt½ W|‚ÃÏ`¿9ì}6àÏNåý{›ø°òC7”1ëñWÅÓäkƒ´á\£lRsóY\Ú[¬¦FA¢#•ß>7ìÂ\•wãÖÃ[8ž'­Ã¹êI3R’ž<3íöï&ÓL–?Kÿý7—Œ×Oç8PŸ×z¥>Ë=ösǽ.Ü>½ÊìÐ’á|ÿ9y>øÍ ÃÆgýòÞŸå7õùdö…v  æ¹ §Æ¯Üþ<ù6^0Lœ ç )8/Nþ,æc×ëÇßn~“0‘Qåx-Ão¥NdTO`8a4åSLð=5Ô9Þ8<vÇNÕÝ—ÒÌ á)â×çæ¹ð·‹VûÖô¬9û0Z—¥ç™zwfhɸ: �€åCT^‰ ¬Šù•e?žÜ^ µ‹ÐTÃ=¼3HÐøèÀ^=>¼JmÙ‡[Ozµ±d=—:à^k–=y•ü½<0 ÔOôiåî(QoJÒ ½tA£d·¯!ñ~ðZè_œ¤w1û¡ñRº§ïÜvÚu|ÇK?Ùè°7ËйôüÝFôbî®Ò“ã`mRbòë6¢}‰uòÃü­¶åÕ«`ÿé�élògíDzŸ¾GŸ³I tB·ÙKN¿é„“læ¾¼ŸàÓí;»ø$WÑñÒÇÞ%Õôþüû§ý_]öãÆ°Ü˜DÚeÁyq$É3w¼ty4I2ÿ}Œ¾ÖñÒï_t¿ýö›û_E¦§C¸†qìñ}˜©ô‰ºIÜFíËø­ôÌ& ûŽ:¦ŸËæ4çY¼l£®çö êI��–QyEº�¬‚¹•e=óþ“ýá0 C_Áo\‰–Ã,Î'¬{’¿JôZ&üV�€ÛDK£¢ù5ÎôfwøÒ+Æ·é\zG-‰ »=ß‘‹žÅ‘ÔôUC÷Ð8ƒþ;iù«›iWjxó*˦wAÚ›A³½'&w³×ÍÏ'ݳg[ê$¸R¯¯ÆïgïX³$Hd��€ÛDK£¢¹5ÎÒî¾Ùnë·Kw‘Ý7‰‹a×öy%2‚îûÓ$2̸þM3VØÌ5PßšShqÍ­,_ô¤Ón »ÈëîííΔݬÅtóóI'ô:ÒN‡©¥Þv§§j¿å3·úeÉd†,ùa+��À£¥Q‘n\Ì™È뮪Qm&ó‰‹ü„…ó›@p³¯hŽ3ײ ¬˜l�Ê¢��€ÛBK£¢¹6Îò·VËLΈ®…„¹ õÐ ?éØÖÒ~åžOg§÷jÕ‡ÁÄdö3í•#õÚ£û\ú>?ì¤.Q¤{Mè×ÿ».N*ç'¦K'I³I†Ñž¹ ýb’~öü9r“E¦wqŒ\á2›•ìsTÙ¹'õè‘}~Ê¡+ËNï����X6D2Í5ø æ–n*ø6wzÎZoïUïnŸçæ…Hïö°ûòÑîU¡ƒy7¾Ÿ%¿Þ²·y Ø„À°†ý{K¢ö¹naùsš8Ø{û>µyæV•î3ôäŽæ ÍÙ[Âåzz˜žî{ømó·ô‰ —@Þ2w C-sÿü²ý‘ÈÙ¥²S“z|¼”]¸¯‹D���€eD$SÑ¢$2lÿPÚ½OîI7ìBýWÃù!ljÂ' ôë/TŒ¿—¹ýšMPŒÃ(Ndø¿}ïÝ{!?ìÄݯ>M@(áýí3I†Üz3Ï]å¶5üLóÆl•P¸ž`¾ŒÑý¡ößÙY$2����,#"™Š%‘aƒÿ0‘á‚|ôÒ¯sI÷ì0Yñq$‘‘M MŸÈ(y.Ld˜mß͸+Wã¾§‰é¡'Ý1½>ìÀ—k&2ÌëÊö‡žD����,"™Š«GF8¬"òƒa~æ‹a²àÓH"c´w‡•MNäÿ—Èp=2jM霻ÔA˜,—È?ɨî¡çÀx!ÇémS¯™È»?Ôg’È����€¥A$SÑ\ƒ?œ»ž¦ç‚žÛ"œ÷á¾Kl¸9!ü<nŽ È»áùçô|¾»‚“ûg§òþý™ü’> eŒÞÑÄΑQËÎááá0“pÂR\ùY?7\OVî®%ázÌóCÙDϸý¡0´����–‘LEs þL¯ÛKÁßñcÐ'-=¦yl[ɉØ>Ê /Ç­Hïú9}—ŽDzf2O—Ȩ=è‘}o¶×ÃP:)¦zþ]òTÒ;l6$Þ¯»ÏÍ-iOÜÝGêMIz¾?Ĺœ¤w±ëÞŠbIô]MüŸá:MâDŽuo ÷Øæ~,û¹ýáÙŒN-¦—JÉþ(دëBg����X6D2-ð—Ÿ@s±èäÉ“æ›lïÝcb×õÂÀÌÈ����°Œˆd*Zþà¯`þŠ…¡çÀØzhçÒKö¥in+‹Y"‘���`ÉT´ÜÁŸŸà ¥X¸^¹èu¤íçÌÐK½!íNo8d3³Üe���Àº"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Š/øÓd¾•8º/QrZð7*»êJ¼¹¹òûD���€eD$SÑÂ&èÖwøpwþoLa ÝÒX³ýE"���À2"’©h!ƒ¿óŽ4jAâ"ÿ7Æ»8–¸¾µvû‹D���€eD$SÑü‚?=d$‘F½f¶acc[š3õ¨’ Q84âBºqݽ×=—öÞ¨KܽAÿ´¢-÷¿ìIÒÿYzISêêïZÔ’ƒ'Ò½r«5Î¥wÔ’¨V—(ÒŸ¡×ÿoÒ?~¡³ë©E‡rr1PŸÑ•$Žd«q ¯Û™çÔ”#õ\­þH"ó=õgÿZ¸¹8‘ļK¢¯_È“ç]1›4èËqK­Ãl»z®ýA}s¿}$~­ÿUÏÕv¥}r®ÖóAÚáwŽþ$ÿ§›H=0ûdøÝ Þ;òy~YŽ$’ÞV����X6D2Í/øûI:{Rktä|ð£$»*øÞnKOg2¦Jd(ƒ3é4Uð%Òw]u[²«`ß­7‘³Á¹œ´wUpþPÚ½O¶‡ÇfS:ç: ÿ½™DÆU7–MÀï¨àÿ£zDÕhI½þT:ýKõÝ㡦¶ýÈkõ&Ø7Ï}’‹“C‰j5©ÇGÒñ‰–zKº:YQºž#9í4eSï ýµŽ½–Nd|”nü@êÍ#éÜ{7îÉç=·}.±18‘ö¶^~¿ùÃý•Kî ¿[Ñ{j×4¥V{,ÉÙð»l·Ol‚iÁ‘È����°Œˆd*ZŒàïJúÉžllÆ6¡0m"CôÚ²& >I¯ýÄ&+äT’hS6c׳¡ŸHä‚y;Te[‡ÇÒ/ŒÐ]@ozPèw‡½?‚ÅloîsükÍs6™2L´”­ç™½UŸWoÈa·?L¤Iˆì²ËÏEÛç?'¿¿Âï^öÝÌ{sÇ!¿œÞ7����°lˆd*šo𧇗|'I»a†y\'‘!¦GÁ}it~²ÿß;´½:äRÎ’ÇR3IŽ+Û›¡æzaèánh‰ÒÒHNT8Ÿe{.ø`ßôaÏ¡|°&r †qëI‡–¨mª7%é»Dñ÷În_•DÆø÷ÎÙ­¹ž(¦ÇˆÛ·K€D���€eD$SÑü‚?7Ü£Þvçé]³G†í…ñÐ øØ;”½p„ºa’µHZÇAomЗî¡N¢ ƒ|¯0ØO!¡|"Ãn&“OdŒ[5èË¡Nhè}ñIïá‘Àm%2Ä gÙ±ûL?i½+éµ²xHd����XFD2Í-ø3Á¶›ÁÏuá&ðæfÈÿc†—ÔHôh× +Ñô°ŽzqòC­o7d³¨×A~ø…ŸŸ¢ææ«Ð¯Qëo½’ÞÀõ²pó^ úGҬߓÝäGõ®üÐ’²õ¼”ü‡/ÜDžî5&Ùñ³K*¡ž'­Ãä—Ìö¹Ï™cäÏÒÿAÎNÔþÙ¸ç¾cþ»…ïuÏ¥Û»\Hd�³c“™,á��p[hiT4¿Æ™Ÿ€S߹㹼m®þoïØÑHç…¨Kü}ÇôJHÿÎõœ0ò“]ÃõûFè†O œ}#ÏâCwG“Ñ^¶Ç‚{O®¨õ ‡£¨%ÏÂ&2j"ydîDâ×çz:¸×{l­çTÎ’Vp‘ ÷H8äDoã¥|Ÿ< ¶¯!ñþðsLÒÄ'†ôzÞ%ò,ØûqcÌ{ÿAzf‚O÷·_üä¤ No+€Ùà|Êb��€ÛDK£¢•mœé`þɾ$ga�®{4\O„YÉ-Yf—ÒïÄÒ4½I<ÝKã©ìëY,Àìp>e±?��Àm¢¥QѪ6ÎL¯ ?i¦¡'M¤Ù|#gAï‹+ì ²¤Ì”Ü䧺GH3ŸZL‹Q–u9ëH»ñ dN—»—å¶äçZÑ.¥üÂõð ‡SiE¯÷ÂyfÜC¸s¥ç“êöÚ ÊVæ9ý¸žs§ì8/—Ũ_nCØ{P§æöåž:éŽi¦ga§- ?•ž4ûð{99jI«¨×d)¿žÇ® «¦á&Û.|ÿ¸ç��˜?­lãì¢'7ßÐjw¤gnÓ:+e¼e•oœê¡,mé¤É Å¶eÙ%¶6Jî6“¥ƒ¼ý[N0Ì™»fã¡´Uùéwžªsq\2EÏ óBfŸåoŒy{>ù‰” &.¶s©Àt ’ŸU,Dýr«üïY0'“¡‹‚9ªÜ„еH⣞Kz¨ßŽ#=4²døg [Gèßš›&ZÝüNµ]9xË^üR¢-waÜs��,­~ã ëbaÊòØ»ìx~â×Ûî)1/.x˜6aã­tŸ™^$\9«ñç“;¾&Qå'X¶ù»G­ˆeø­üë_ÿ*I’Èo¿ýæ©âT’ÝG=Ú’L"J'?w禯·¶Ü„Ö¡09½™öK{Ô¿ãž�`•WD"«b®e9˜”ÕNü:l,úïÜIJª]Û•öÉ/êåᤪ¾·"7A­ êý]lzo%ŽîI=zd{Õ¿”ÿ'V¯‹¤ã'Ž­·¤Ûÿa¸ þ®<úÃI,Ñ–N(øuÝ—Gád·æs¬ÑmÕ×,‡ÔÖ¢–<9IN ú]IÔ6m™^IÙ‰nõ’ï­”yýÅiûÏÔ‹N`¨ cϼgògLˆ›¢…ÛãöµI6é¿íäÌ÷N—UM2MGÎ;Ò¨å‡"è«õ4¹‘-ºü%¶Ç—*[_<“çÝÿXšc3q,€^¯g¶ów¿ûÝ5§’ì=—îGÛÛ¦¶›¸a˜a"ÃÝåjÌ-Ä' ʪETgçhy±õUÔþÖ㺼}/ýàý¾ž¤G�`Ù•W´ 3`ó+˶«µM|rÃ(\Pfz츮ھK¶ ²W"õs\®ðæªç=i¼ýÆu>`tóGè`ÎÝÝæê,‘Ýšô_Èqÿ“{¯ íg¨×ꞟ|€è¿Úuù ¤l[O¤±é_óAÚ{/rÉ„a¢`˜°7<¤àõe½Xt°<ö³}¢_óIÎ’Ç…½Ìä¿úN>A/+µŸvÌ>µÁ™ ÜüÝŽ Ö±f&ŸOÙòlèãµãç6Ég½ŸwÜm õ~nÚù–äØLÞóç~©–Ðp‰ ð4uˆ¯s‚D†O2ÝdþSÏܳ ìM=¨ËSP^Òaz¾n»pç·¿3˜+™:ÆÕ;…½¹Æ=�Àü•W¤ ÁÏiáSuÏ¿m®!NÃg)øÆûm,c™+ÓAp”Ý4‘YÂ$ƒKd¤W¡³‹iЛõ‡ç‚»*êË¥kð§IÓ…ÚUÏ%rë ·¡t[þ§zžÌï8×Ó!dÇ×§Ûÿܹ×KdLüì@æ»g™ñøºçŠ™'G'„ž¸c–Û–1ë¨"»—s™ÄÎqà‡è¤ÒÙÉ + ÷­.·÷Í-¤»¹Û9ßõ±¹Ž¢ý³,‹NhL¦öµIdèÿû¤ÑŽÚ×?©Ý>«D†K<ïÏÔƒù㫯ly+©Û��Xr$2*Òœù ®2“4À5Í«,gâæ”ÿÅ6´Ãç™÷™�­ ×F‚ü|‚m\°—kìçÖ5܆Oc¶u8¼ÃLšÞÕ&•Û†‰AFîõe‰Œ©>[щÐäÀu7/ tMÂç¾í ÿ¿wè‚©K{¥×ÒWöjtØË`MMu>ù«æ&0Չн\o‰ð8‡C jRo$ÃÉ——àØ,Æoåxù~ùòË/Ý+ÆQÇ*Md(ƒ%ÙÝ= (~¶ëÎM{<¯?´dôâÀØDF¾^W·�°äHdT¤9‹Þ¸™y•e{•ðžë2¯oÛHž dðæ=Åã¶G‚üÛHdøÅÛjèù6õ€Š¹m˜dLXòJ?[Çf¾wW¢Þë1WìmÂTïãù )ý]8tàç†ìÜ}¨¼X¦;ŸÜö‡rpôRöšùò›/Ú¥ô»/MBcøøâ›Åù­,—Odè†~l:êX…‰ eà†­ 'Èt‰¥´NÖàì[yþfôñ!wÑ"H„È��À"‘QÑ|gÁÕÖÚ;[º ÎtC7‘8zà,êuæÖn»Òî¼rWôt—׃÷û‰ uÌS2a¡YÇ#‰_ëÃç‚+…ê1; žd.œx̬9¸¢¨Þ_oÈaW7ªõãc&QL'#T}ýBž<õ˜•¹•ehùqÜvŽ U>tã¿ý'„ÕŸJÇt§×ßö> ðg§òþýr¬Ç{‡·><ÿNZ‡* +Zâ»g»«â¾ñŸM¬ä‡Ìº†A¨¹ŠîÆü¶þãKÙõ“‡š×¸+ç!· ÃDÌhÀ’‘}°üYúï? ‡‘¨Àeüg»¤ŽÙªÞ0û¾,‘áö©kÔ¹ŸöÐû³ì_hSŸO¦Léò^Ëg¤î>vu®ß`X^ÿØÌ÷·r:>‘Q-áècµó$w¾ªß63_FPÿøžº‡T:äË&§šÍ7n‚Ð2~}nž‹+?G†.?º.ü­LÙª¥·~Í-™PÇ��°dHdT4¿Æ™kиd $MDéD† jtÃÆ6XlãEÿí?¾Ë«»:ç0È™ÿNXøöè™ Ý:Ì$ca[7–ó“Ð gÓODsuÊš~’2}›ºß¹í-šDñÊ‹›æsÔw>9”½‰ŒÛ0ײv™ß&MßÈŸÓedØø÷eÞ&@.ULž»û†žKàtX¶ìùÞåA-ѾÄѦû[¯^e^¿7\¹Ï/ùçôÑËâm=ûFž… :3Ñžûê†K&¸umÆù>ÜÆ‘!3ù׫ó!=ŸrWÜû“>ÛžS61©Þû¶-_˜‰O]ò#o$á¢ùù�üöêEíÿ‘»Ÿ¬½¦S0é§‘?ίäÕ³çòÚÝ™'-÷Þ‚›é÷ÇüüüóÏÕšééà÷o>¨ïÃì9ìï†dXzQçfüv8Th¬p¸ØŽª‡>—MsQ 'ÇayÙe?­ËTïÛ¸'¯’ýaýE¯ �À ‘Q‘ṅNÜO¯´¤^ß]>Ó…Ô_9öÝOÝ•˜´ñ2ìŽúÉ\åö¿èõœçÖ~žÝ–ÑIèÂn®î3ÃIΫE¹«æÃî²—ösÓÞ¸-ó+ËXj:‰òd_’³ðÜ×uBÃÕëi!Χ:6Ô/��à6ÑÒ¨hn³‘1ñãab@7^ócc}Âá{9Õ§¯ËÊ®#ü¼Üõtº0‘á^&2\Ïó|îûd>+¼Ò^oJÒ^oÄìhà:̹š9/m}0¹›üj[„ói‘Ž õ ��¸M´4*š[ãl¤ñ,¾GÆ“+æ?ÏÈOBWÐ##ì>&/Æ%2œAÿXuBƒn°·‚@×âoý¬Ê.CfHž8tªnò«k!Χ:6Ô/Ó±¿}þxå—ü°��àÑÒ¨H7.æÃ«¶câ¯üº±%r–™°07)a~hI˜)›°°÷knh‰îžì'L<-ž„.—l±sdøñÙnbAŸØ(DñBúÉnâÏ·v¼Eó+ËÀêŸ,~��¸-´4*škã,7ä"nÔ '8ÌNJIGîÿj‰Ú’èžîïÍøX>LXxz\%ÚlH¼?|ÏFôwòÕÈ$t?Ûî5¶WÆ¥ô_ '8ó]žÝûÚüöþ^¾úêïƒ;¥Ìïö«Nïo����X6D2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAYnNŸG,Å ��Àm¡¥Q3¬ Ê2psœGÅØ/��à6ÑÒ¨ˆÆVÅê—å\ôÞJÝ—(9u-’Eß>L£ô<ê'©çôóvÙ“¤Uð\ðø­;—ÞQK¢ÚíæÊÖ/W]‰77¯uÎúï¤mÙã^oJÒ;wÏ(ƒ¾·"©™2±-äD.ÜS·íªËfa9ÔuTGÚ³«£Ìþóe?¿Ô%îæ¾õyGµšl·OÔÖFίßËW_ý>ø{C6ã®ÜÕ™�¸{DåéG`,fYþ(Ýx?hPçÿ® m0_/èïºÛ¥ƒî ¤¨í¹ÕíÃ]{]K\¯ÉF­)óL&ƒ^[¶k%9»t”Ðëh¼‘¾ûsäï lÀªË‰Œ»Ôƒ9l~-Ç}u¼/>H['4¶ÛÒ3Åâ“ôÚ_¸äŹœ´w¥¶±£‚úf-s£¶¹½­ÊïÌë¨ µ_ê²±K7-†—r–|!»™ÏÈy§i“;é¾ øí ž3çÕÆ=it~²��V-ŠhœaU,^YÖA~Kêi•ÿûÌÕ¼Y7Âo°]&°ÝnÏ­lîÒøóÈb¥Ýûä³½CÙË_e¡áÙˆ—¸Èÿ]•ßžõNd¼{÷Î,·k\=q%ýdOjŽ˜>:ÉÑúÎþ_súBô(¸A”rE‰Œ"?I§¹/¯_7 Ï!‘SI¢Íìù`zjôì��¬¢òŠHd`U̯,ŸK/iª¾íþ»Q*þ'¹89”¨æÛø©ñEð·nHÿ»\ôiè+Üæ±mivÎl 8èK÷°áÖ¹%Qëôõ¾Þ~c¯€êçÚ\—íKé¿H?£ÊÉ…~ÓpûjQKžmœd¶Ó7ðÃïT“zã¥tõ•׿ k^£Ýø¾Ööy.·#íåáò™îê~ñÛŒYÐût,×5¾»ãªé„Dc˜]œHÒØvÇG½¶y¤Ê¯¿2ïÛ¶|ñå£ào ÷>¼Ï®rÐ?–Cÿ\-’Öqßœ+¶WÆ®´lÙª©ÿŸCfDî¢J’ÄlßgŸ}V1¡¡ÎÉn"qôÀÊ~¨Î#‰_ëýþü¥¤žÐô:^Jc{oÌ~·úøDÆäó?3”%]r‰]w&±D[AR!(µG‘<*K¶fÊí¶4mù»èÉQ¬êú#‰L}OæäºGJ<’ðœ%²×ìÈyÙð�°ÖˆÊ+Ò?ØÀ*˜[Y6RÛõW7Twƒj~¬vöӸg¯b~”d×wÍÖ]’«FsKºWî*¨kȺ†½MüªË]7÷:“DÑ]½í�³n½}›n(€N>ì½¹j˜Ý.ÿùv]ƒþ‘4õºv9˶ºÝöAÁu¶Ï¾ÓœI§©‰ !¥Þ·c‚fwõÝ _ð‰¢¢`�71ù<r½(Âá%ºŒíøîðþ8éç?Ù²”^}v_z|ÿǼϜ÷\òÄ}¾ mÙu 3wå¤\ÍÀ"ÿVúD†_¦Nhäv_ê¿‹÷g¾>KŸ~O~ŽŒYN–LZ2öüwõ¥©‡|Rl´WCúÒ¤‚-/¶Nú$ýÎSUŸ$2|3ɳK÷º-ÙM>Èqúu\TÛ„I¿ä“:¹±ç†ˆØï2:¼„D�¬3¢òŠô.° ²ÈÙ.ÓË^yÌ7üGÏvÍ6ïKÝèWDÑÃ\â`¸>ÝXÏ7¤Õ¢×÷³N´W d¶Ë›A‚ |8A~{®µ}¹]aÆ„§ƒnü?qŸì#óži®òŽ7²=,f™ÄŽÛ×AÞªtèòñDvÊJ™@l\"#'xŸý¼¢ó&WvǭöÓ¢/:¡1Qæøøs½x–Õ_iO‰0¹•²åc;Óƒ§\ùùŸ;ßKü\=aÍAÝ•¯³[ÆÂ:.L6¸ÿ—–+·ŸÒºI×w¹9‡t½ºóÄퟲ:•D�¬3¢òŠtcXó-ËçÒë$ÒvÝ’§Od ä¢÷$m7ŒD7„?7´ÒDÁ_FÀ©p˜HñÝ2Ûe>#ÛÓÁ>_Иž:‘1nûrL"å¾½r©ÿ¿w8œøÎôxq“š^îu˜™©Î#sŒü¤„:ÈÛËdÊEO:É:åËΉŒ‚÷ž7CÙçn7‘±¨ò=2üòå—_ºWŒ‘ ”ÇíÏqÇÁ& êuž¶/sÃÈÆ(=ÿ zª&N²‰Œ‘m.IdØ×…‰…091©\…¯uåØý“?Fùe$2�`•W¤LU0·²l抸'õF[:zŒpÕ0߈ÎþíºG×Òîü ½LŒ°GD 4Qàz<6ìtÞÑFqf»\vÏÏÔÔ‰Œ)¶/¥¯Â>4ŸÿqdI½žl çÁÌLw ¯(½´ãþÝ3ú9;ìg[íŽôz¯ƒ@,†—¿oôjùP¶lN 8¯o‘+ó‰ ÀèõzîÙ f”ȰëÉ#]76¾.ŽQfÌù™ïÌ“’•MdزÜõ£$‘1òºÌwŸT®Ü󥉌°g‰W4¼¤B"C'ˆâ`BU�ÀÒ#*¯h‘g@ó*˶qoð~>‰‘DÆÙ©¼ß—ËðïIä™ïùàdž›†°mÈg&-<ÿ'i¿Q oÓMÚ7ÂÃîÉ¿º¹4 UC¹õJzºƒŸX³¤Cv;ÿ]NÍünòQ·m…ó¤AÁŸ¥ÿþƒô¹ÆöF"6¨¨=è‘Úiãß­ï‚T M}™²¨çü­!]Pçæ{±s Œ&2Îúä}ÿçàï–Vôߊßç“k鱺,üIÞô/]óÁuQp8‹ü[é•N6€÷çlñþÌ×gé.v“ðn†óè˜$FlçÄ1Îåäðky3éö¼Jñù¯·¥>’€åëO—4uÉZôBŽû®\ér›KføyŠ2sùºÒí‡I‰Œ’¡5&A—Î!ãù}NòlËyX~G,Š™”T퟉û�°LˆÊ+"‘U1·²œÞ½C÷x-í/Tƒ×%!Ò‰2M#:˜8Óüý_é]jÑsyÛþ\ýßO²—½;‡ à>ª¹™˜O/uÙ*¨p›H8„D-õ†vU°ÑÿFžÅ‡n¶ÿâ^ ùíTŸ_“z#‘^ÑUUŸ€ÑWGßéÄŒûì*ÛçV•QÐ+D=è®Ø»÷§ëqˆb&ô>Žë3¼ÇI—‹·mùBý?;Ù¢/‡ÃI£Öÿ’Þeï¨"ޱž'M`íÊÁfCâ}Lº¿o2wJ‘é÷ËÝÓÉ‹ª Ã$"Ýþ9g³ûÓ&›‚zâä[—ÈÒ‹ëEã눴NôÏÛÅžÏ.èßpCÄŠžÿù»Þè%{gÍ&[Üó¦ÞQå1½;”zýþ3ilÏ”-c~žß^»Î‘r•Ù‡zÉöžÈlO˜1=-†ïÛŒ"yü½±ñ{ùê«ßç—âJ�€åET^‘þAVeyÕé 7–¦™`ÒÓW5ŸÊ.W&g†ó¨ûe¶½WÒÊõ K'MŸìK’éÑ¡{J4Їº��°dhiTDã «‚²¼âÌ•O•ÔÑ]¬›ùà7ÁyTŒý2+zbäC‰[‘㘞 ™[¼ÚžÍæ›ÑÛB�°„hiTDã «‚²¼êt�Ôv]Äu×j=äEO°:2sn€ó¨ûeÎôÝlüÝÌ’Î�À’£¥Q3¬ Ê2ps6Hd)Z���n -ŠhœaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃªX‡²|ÕescO’þ•{dF.zrGR‹黇°¾ô¹Ä2º���ÜZÑ8êX¾²üQºñþÍ’Ç7ÞÜ0ùp¡¶£nƒ5Pø]Å>��·‰–FE4ΰ*–«,ä¢Û’úzWèDÈÎŒ’?I§qDŒòséJúÉžy>]Ò2“{î¶ËÒ÷"Òßi]ÜZϯBª.ì%Ò¨×Ì>®E-9:~-OZ]ùd¶£¨¬JmŽ>®ÊD§ÝPõª{¼ÞÃî¿ÊÑ“¯¥›~•séuÚéçmllKãð{99jI«ûq´|‡Ëf,ÝÓD¢¢çÌR—¸ûCvÛ‚¥ÅòºÓ“ ·%©Á‰´¿-õ¿}]ôzsï:ïH£V“íö‰Úƒ~~û~/_}õûàï ÙŒ»êl�,¢òŠô° æY–ýwÒŠ¶2Å dž«íJûä¹89”¨æ_·)QòïÃÆ¼zÍ×Ïäy¾á:èK7‰%ÚRé«s9iïJ-óY?K/išF¼žwG¯ãÐ7ô·$j½“¾i»^i@p"IcÛ­»&õæ‘}]ú¸zï×/äÉsÝ ‘²mÇRÑǽœO©rÖ訰0ôIzí‡RÛMä,]U1MO¥»ïE4~Ÿ¬+]^H#9u_ƒ ÈU}Òþ`üAÿXU“Ûe»)k†ëÞiª2‰ž+•>Ù¥fe.ù[‹$>ò …séµT}<L zmÙÎ'?J²·/sõi:ñ°]Ë%.åLÕ¿ÍÎOêÿ¹úÔÔ‘iûºÓ}WoÐ;”=ó=ÜûÒíÕôz¿ÝÌ>¨ÝÒ´õÿv[zùsÍm_øœýN÷¤a¶�°ˆhiTDã «b~eÙöf°Á›O0<”vï“k\ï¨Æí™jzúFtÓ4†³W=õ:v\#S¯£)­\2À¾^5\ÓFn®±¬ü›vÝrñAÚ{/r‰ Ý ~,µzKºW.õõp]®‘l¶ó“}ù>¿šÇ7MðªšÜ'ªñÝÒ ùÉÛŽå2ù\r=xF‚(\>±eÿZ|’dšÞ�wÛ‹hÙ~+ß½{çþw‹Lý¦ó$2l½æêKOÕeºG†)W]‰7u²7ÿºÐçîq_·>–äìÒ>ò‰±KW¶¶d7ùQ•´P.!cz5ô‚HÙ!å=ò‰ G'CvuR;ü¾á9S”È(¢Ê~s_^¿n k2\•ðó'~'�À¼•WD"«b~e9ר Œiò!³„Ï…‰ŒûRo¼”®jps]÷Ç%2jº›ô±ëe‘c®Ò•% o-ý>ç6Áaºkët‡7Ͷc™L>—üáU.>ºÇØî¯߸§’*«Sõ"ÒW¼‡Ãôp›<Ô/+êEt>¹÷RŽ^ï2ÑÛûÙgŸUOhdz~éýúVâè¾<ŠÝñr= t²4<¶Ñ?H¯ìµnÕ…L½å†”øž¡i~#=„B.ñåÉcýù^BùDF.RZŸúó&èa¢ëå=Îä:É$õg‰ì5Õw5ß»¨· ‰ �XFDå-[ã (3¿²\ÐÓÁ4–/mâ¡äêr6‘b5©7é]äÛApfÆ}''Ù�¢4 Ð Þz¼yrà¶É5€Ã!'õ¦$&ð˜fÛ±L¦:—|Wþ4xÔAÚÙIƒ*8Þ¬§Ò´½ˆÜgémñW½Mo8Žô"ÒàØÞK£–í·Òœ£n©’ÐH“¯ºžù¤ë »ŽZt('¿š¡Ci2 ¬SÌÿǼ¶”ª'_¸Ö–Dq’MˆN‘ȰÛ\Ðüö ÅÈ3A¿ý.Ã%¬Ç]¢ ó|¸e‰ Å­ÛŸ7Ãa%š{_f½ùßÜØs=à\rfä;‘È�€eDT^‘þ¡VÁ\˲ êLóIëØöX° ìâqÉÙ€ÍSúîK“í¶<)‘á¤W°sVÓ#c³¤±®Ë|‘îÝÑîH¯÷z¤ìDZ·E·íX&ÓK: Òªïίƒª½ ›û z*]«Qxž¸+àù^D“z/˜nŸ,Žì¾µËt \=cöÕ0HÏŸ|’aÜk'ñóYèm êБÏHÝv"#¬ófÕ#CÉ$2òC±ÜûÒz5ÿ¹Š>'vž¸äïá‘^B"�–QyEºq¬‚|£}–Ëx:€«4´Ÿà¨?•Ž¹Ê¨žr¨i#ÿìTÞ¿ÿßò»¥}¢¯ÑÙ+ԣݤ}àè¯pËgýòþÿüIvÍ•PõœùÜû¹Š¿îÆïÖ|þOÒ~£·Û5|M#ß­×üÿRú§.)¢gôÿÂu× wßóäß%™¸í×St,Xîf™†@Ð:ˆÝ ƒÄôT* bµ|°¨{}'‰¿k… {Mè½T ¿–uÑÉŒñr‰ŒÜ1{|ƽvJé#SnTa*-ÃD† Ò' -quÜÄ"ÊÄ ?ŸÈÈ+KdøÄƒ;g2ÃJ´|"c”=çòÇ5ŸÄ!‘�ˈ¨¼"ý#¬‚ù•åüDlÃÒÞéCWÙ±ûþ*ð $Mõx-z!Çý“äÙsyݲW$ícÙù&lPàÖoº>ɰeç 8ûFž…cÓÓ¹ƒ¾»ÏÐë±]ÀÏmãÙ=¶ËG?W¾2ú¶-_˜1ìrÔŽ%~­gøwÏ™«¦ªÑ<aÛ±\t9˜ŽïÚþBŽ^û;6nÚSiê^Dî¬7¤ÝùAz™žKVa/¢²ÞK¦ß'‹ÁŸÏ~ùòË/¥×ë¹gǹãDFÿ43Ç×ûa(êå¥ËÞC{Üüp¢ÂÉ>/åìM[Þœ]¸‰‹‹&ûT«8ûVž¿qßV"#·Ùa%Ú¤DF¾‡V4¼¤B"C£­ø»™$ž�7CT^Ѳ5΀2s+˃3é<ÙÏ5 uã²QéJ$°(¦?—|Щù+ݳè©ô9™¦Ñ¥ ýUnu>6}ÂB彈NþaBï¥QËö[©·W/Ó'0¼\ϯÌp¼ÝP†4qñgé¿ÿ ý_Ƽ¶Œ°kÁíP]šá-|ýöÃM|Ê÷ÚÐ%²«¬á0"óº§Òô‰‹ô®!á°";$®Ù|“Þ2¸ðö«ºÏÑsi´Žå¢0¹¢“Öo%n|­¶É%‡ÓD‚~nxûU›H)JJ¸DFa¯µ`ÎôzÒü~&¸uÛ&7 o¿jöõƒâs�pçˆÊ+Z¶ÆPf^eÙ^i—uÍöÂÆÀ2©t.¹¤Äh·þYôTºÔLÑ‹èH>¸ÏªEÏåmûsõ}ÇŒ÷ÒKZ£½ˆúSô^ÊÑŸ³Lþð‡?TL`X6‘d÷kv©Ë~ÜžÓɦmÒHï×w‰<s“}½öU²¯þVÇ?>¶ ¯ÿVÚGÿÜ™FOœ»RÚsƯ¯à5Ê ß•Äϳ¡—0Aâéu黲èò`^§ŽüÖMPìz£¤Ÿ“_Jû_ša,ÅÏëdÚ·ò:ÁVð\½q oÒ$KnX‰I …¯Ï&R2Çe¤§Åð}›Q$ƒ¿76~/_}õûàïü2!Ñ�¸3Dåé2`Ì­,ë»{øqùfQA™ž$Ó])–ÍLÎ¥ë©Äoå ¨àý°Å0��ŠÐÒ¨ˆÆVe˜YœK«ÖS‰úå&ÜЊøk7”��äÑÒ¨ˆÆVe˜™œK+ÖS‰ú��Ü&ZÑ8ê ,³a,ù��à¶ÐÒ¨ˆÆVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê20ú\b™í��0­…Šh`aUP–Ùà\š-ö'��˜„ÖBE4°°*¯,ŸKï¨%QmO’þ•{ì.zrGR‹黇ª¹n\—Ìû/¥üBm£¾j\“zóHú÷Táë½OÒk?”í¶ôÒ×Ϙú¾vCêþó¯ºonJ”œš§çcÜ>YcÏ¥~"‘z^¿Æ,f_\©‡÷†[j‘į¿“ÞÅmœÅ£¿÷2¹êƲ¹1£z ��L…¨¼¢ek`e­,Û`@o³\�­×7à zÐkËöÆCi÷Î¥ßy*õ±Û:‹î i˜D‚ \7céÞJ¬ã%3þ¾˜ÎÄsip"ííšlÆ]U†lyº'ÎOæï‘€Ø'§ÔúkÑ¡œŒMf„åm¹­îïìê#��樼¢Õm`aÝ,^YÈy§)µ™]Ù<•$Úœa`ï¶oÚdÄűÄõ­´G„ Ro5ɰ½ÑäsÉ–Å|"ÃöÖ¨Kܽ0_Ù¿”³ä±:/j²Ý>Q¥°D®¼-³yÔMïÞ½sÿ»E+tŒ��˜7¢òŠHd`U̳,úÇrØØ6Û »Î·Žû&@³Ü®´ìðšúÿɹ“·"Ðé^*hP¡»v)ýîKiÔkf}µè…÷/Õãa"#è¡aÅŸ¥—4Ý•î–<9IN ú]IâH¶Lð¾ß.#W×Ã×_|v´5|½Þ´î™÷œOül¹8‘Ä!,¡áº6j$z¤>Ó|_½O‰£.HöÃvÔþì¼rûjG=÷cðþá¾ôßIËoú¸_Ç#‰_ëÃçrÑKìzÕc_<“çês³ûЬyø:½îzC»úØëÇߪí½/âC÷Ùá1^lú»Œw“D†rÞ‘†ÞßfhRAùù˜/oÿü£9Vu‰"]ní£âónú²‘ÏÆ¼rë™ÜS¤ºÉûsöôg~öÙgÕª^ê&±D[:Á9¦Õ n�� :¢òŠæÑÀnÃÜÊòàGIvïI=>VAêGéÆ;é ȹ†¿ëŽ_ktT¨¥_÷Àôº{vKX¶Kþà,‘Ýš¼>º+ž¾ ÿ0‘qf¸=ivÎTà¦èÀp³)sõ—0ö^ä’ ÃÄÅ0ø7<¤àõesTLül×ó£¦_óÉ]×ÃY>¹ç=·Ò óHš:Õ’ùl0Ù ÙaЫ}Ûz§ž×Ç@U>˜ ÷›ùÿŽÛWîø¨my{ôL·Ž‘ãó“t;nˆÄ¹œ´›ÒêþÇÈ>±ÇjÛ®{p&¦ †k%ùñÛ^ÿj‡Ê˜}0Û ù6L>—\Y4û/¿L‘Èðï×ûãô¨¸üåÍ®G¯ÛZÉywüôeãyÛ¸g·¹þT:ýOrqr(Q­æÖ9;ú3îZxLþöoÿVz½ž{f¼t_ëzá“?ïJÊñBÌ[�Àj *¯h ,à6Ì«,Û ºxøH6 †J¤yvÙŒÿI~ÐBáÕMüÕI´½—ö60Ìîmi—ôtÐòWÑ'Ís‘{ý¸DÆÄÏä®ÚéäÁý`¸A°¿ôŸ™÷å‡í¸95Òï2ÜöOi.z=ç¹u„Ÿg·¥Þx)]ÓÆ ÷IÁ„§f_¸!æÿÃýUÔ/½ÆË—%gÚîýi"£¨üdÊÛè0­òónú²á“ƒÃïáÊ@é9q=“÷çìeË»]¾üòË)¹za\9&‘�ÀÌ•W¤7À*È7Úg¹Œ3.@-Md˜€¯(�Èï.ø»_—zmKv“]À¯C26TP˜œ¨5å僶%2¦úlEOô˜¸®þ‰Œ‘õKdä÷mþ»ømÿ^NõãUÚ³Ã!#5©7w—pŸ¸×‡‰ ó\Ü÷WNŠ•û\ÆË—%gÚD† ŽÕç䆖dÊÏ„ý7nfŸ++zÛóßcÒ9q=Eûw^‹n2^nŒ;#ç,��¸.¢òŠtÃXó*ËÃ;ä‡Jäýa ì^;Œ!46èÚˆþ$ÇzxF:ŸC@o?Ôw…(HTÚr¯Ÿ´”~öÀuÙWAj»#½ÞëL°›Ê íÐf‘Èð=2†wÒ•û´2œ¯d4ðuÇ*.î£qà‚›|.åË’3U"ÃOö™KÆåËÏ„ý7ýyW%‘1îü»¾yÔMú3Ãeúù2Hd��0DåÍ£܆¹•e€§“ê®í’7ýË\w=\áž ’ܘþ 7¿‚^ÏùwÒ:<‘+ ¹yôãú}í·*¸¶A— ´Íü�[²QoIW¦ wýç›9�îî#‰‚‚@<”}´üYúï? ‡Lüì°çÂ¥»ÍkA"#¿ÂÎepåçÈИúÎgf¿ø„„>àÙÜðpÛÝœv=LD¿÷@{¿Ž9>j_ï>v‰"»]f]¹}bçÈð“—ºïæ÷g¦K~~{ÛÄsÉí‡|"Ã&¦¼ýê®:¦º ••ŸLyûW99 •âEéy7EÙðç”+v^–{¹ÞN77ºÉœ7j©>ág®^WŽËê��PQyEóh`·aže9sW —„øh‚8wEt³!ñ¾ æÝß&�ÌßÉ#AÄÇ/ì]4ôs¦çÅ™M¤ïïÈ÷éßu‰“ÿ!Ï» èI3A…K&¾_/>Pñò¯WÛ›Nf9¼+‹ÑÿfÂgûj]ú½oÛò…úáÝ!Â}RoJܨÛýr:œ<Sßý¸1Ü·‘Äqäþ¯–¨-IfÛåcxg=|áðXNËÏFôwòÕ³çòÚÝUÆÞ9æçÑ}’?Vj›“Þ¹ ðÜc#Ûã Jog)Ó뵘,î*~øxÙRoHûM7H„•”Ÿ ¼ýý³HþÆ¿?íY1Åy7±l¼’WѦÔEòÈâò{sú³îÚµîX¢Øä“Û_™¥ ŸýX\'��€ÊˆÊ+Ò `P–ÙXŸs)?´ävP7�€Ih-TD «‚² ÌÆÚœK¹¡B·…º ��LBk¡"XX”e`6Öã\róc¨ïª—Ûì•AÝ��&¡µP ,¬ Ê20œK³Åþ��“ÐZ¨ˆVe˜ }.±Ìv��‡ÖBE4°°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,³¥Ï)–á��p[hiTDã «‚² ÌçÔû��Ü&ZÑ8ê ,³Å95ľ���·‰–FE4ΰ*Ö¡,_ucÙÜØ“¤åoÐ'­hËì›úSéô/Ý37q)ýãÕtwûšÔ›GÒ¸§2rÑ{+qt_¢äÔ=ºn\—(‘¾{‹¥ôœê'é2•.A™Ì<§ÿxÇùöËRé¾X!Uë��0;Då­Cã ëaùʲðöo/hœH{{S¶Û'rÕ?’f}«$¡PÍ ×–í‡ÒîK¿óTê™Àg ÝÒПsÕ•xS³›3ù\ܽ±çÔűÄõšlÔšÒ9Ïf²L©=–äl‰³Å°,õËo¿ýæþwÛn¹þ�`Í•WD"«b¹Ê²ø[¹$ÀŒw¤Q«KܽpÌÂ@­¶)µÍXºE›m‚Û ab¶DƲN¹²`’ZŸÜcÖ w({íõŠÕ±,õK’$òå—_J¯×s܆;¨¿��X3Då‘ÈÀª˜gYÎ áHÛÈÏ<WÛ•öÉ/rqrè†fèEúÿ.½Dæ ÷®|}ðLžçƒ¾t“X¢-—D¸èÉQIíQ,¯[ê_µ®Zt('×Eܯ_-&ñ ‡z¸ÏÐÕrØí›e¯sÝ÷ƒõnÆ]IØ‹Ò÷îæoze¨ï×~ãžÛRÿÿ Ö¤¿NWµý[~'’4¶ík¾~!OžëÎ|¶KŒ¤=>l²fÜ1Àõè}8–ITÕ¤›cjé+õ4¹‘=κlÙáFâCw¼†e–=ý¼~|Gâã÷’ì~!Éÿy冫Øc=,ßþ+úŒ{R©`[½N—Euþ»ó$û™Ó™¸/„Ndøò_)¡1uýr5ZµÿßÒº��L‡¨¼¢eiœ“̯,ÿ$Æ=©í&r68—“öîð*µé¡°#ÍΙ ¯t€·“vÅÏŽG×ëØ‘Fç'õ½Ž¦´r‰Œ4x3I‰ °7É‘s7äãž[‡bæ*öÈœ%²[Û¶Û28“Ns[½w´ûÿø×]©Õî¹m°¯Ïð‰ ßÃ%lPó«ôÚÝ÷?O·ß&CìÕýÍFG}{ˆª@i¯&2¿-Á<WÝ–ì˜ zÌ1ÀµM>§²eÚÐɶôÌŸÃrjŽsš|**ƒ´ì5’¹0IýZ—¬0åÛ—gßD?§·¡è3‹~Í7Ÿ‹*_¦7Ap®Laò¾X a"Ã/øÃäçŸv¯(Vµ~Ö_Ãý_Z�€‰ˆÊ+Ò`øFûm,ãJm{' „á•ãp Ÿ ÷¥Þx)ÝÒ 9óI¼§}>‰Id|²ã¶0w5]Ï¡1¼n:éu×Id ÿÎ~çp¿¹À´´—ˆe¤zKºæJ¯ÞÖ'.YQ~ n"{ÜÖs™Ä­[²›ü¨Ž›>ŽOd'S¦rÇÆ”§¢2q1Rö2å%wLËË’’û [G¿[úú)äß»ŒËxÕê—ÑúkL]��&"*¯hrãXó+Ë—r–<VA¸°¯ìÕ^s…ùÒic?+èîð~8GMêDz#ݲó†»j:U"ý6LP¸à.ÌMzÝm%2”th‰ ºêMIzçúÑ,3é}{¥WÿïÐmgÙ1ÈïCT1Õ9eމ*·¦Ìè€v/×&wœKË„»²Ÿéq”—*‰Œ|94ï þ¾†eù­,ê‘ñÙgŸÉ»wïÜ+ÊT«_²ûB]��&"*¯hYgÀ$s-Ëþ:p¨EÒ:¶½ lc¿¸‹u6ð.¥ß}iÙƒv“D†ëi÷…ÁƤ×Ýb"ÃôåP'4 ?Ãn_­Ñ‘ù %KŽ®oºsj8éçÁÑKÙkêáA¡Š‰ŒYôÈ(,‡¦Ü¤Ç¦²,¿•a"cº†G"�€y"*¯hYgÀ$ó+Ëú*t½¸ÑîƒëúSé˜!#:è;ÃÞ§a pv*ïßÿoù‡ÝÇf|¹Ÿw`4èÊ'rݹsCEòãÔíü57OÀ¥½ujA¯…ñ¯+Ht„Ò�æÏÒÿAú¿„]ü‡¯¹bï®äÛ暑¨/ÜŒnƒ’Ï0ß«ö@¢G»Á•ÿ1Ç�×6õ9eÊžž ’v™ã¬d†}„eâW÷7g:y¬ –ÃòöÞÑ÷å¸ÏÐì9µ±áæ~Ñ'­ÃpÌxËò[©Õ^µú%[ý«y-��˜Œ¨¼"Xó+Ë~rI{Ô.>ÑoKãðX=®B¸þ‘4Õãµè…÷ÿM’gσÿõcÙ¹2lààÖ¿Ùx¿îÖ¹!›û±ì§s�lÊÃèáðµz1Æ¥ô_ ï6P6|£ôuîªkºÞ‚+®éä ‘´Þ%ò,ݦºìÇòí¿—Ó¤%ñë–ýÜq=*ò±1 2½§ã#ɧl™É–Ó\™0 ‹Ÿ‡ÇQ•»Wí/l°l®ú±>?Þ%Oe+Š%éöäxÌgø™¡KføÖ¸ùhFé÷-ƒI“z–©R¿èó~XýåYô߯¾��LFT^‘nl�«`neYïOöswÿÐW3.�íãÜŠyÿ>d‡/Ì¿•��à6ÑÒ¨ˆÆVżʲ ¶2½l/ŒfóœÑàNp nÇ|rC‘æŒßJ��p›hiTDã «bneù¢'vCêêóõ6˜á#íNÁ]Gpk8·bž¿™¡ Ð+cžû��¬>ZÑ8ê ,³e“,~��¸-´4*¢q†UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe���À2"’©ˆà«‚² ���`ÉTDð‡UAY���°Œˆd*"øÃª ,���XFD2üaUP–���,#"™Šþ°*(Ë����–‘LEX”e����ˈH¦"‚?¬ Ê2���€eD$SÁVe�®Gן,Õ��f‰_–Šø1ƪ ,Sôå¸IÍdÛÒìü(gÉç%§êÉOÒk.q÷¾vj—Ò?~!QM¯³&õæ‘ôî©…p.½£–Ú¾=IúWî1xÔŸÕ°¿��³Æ/KEücUP–±Ú>J7ÞŸA®ec»-½«3é4·e#jK.íÞ'õüOê±gÒ9¯–…ôÚ²½ñP­ã\ú§R߸̈́Á@.º/¤a/Ó¹êÆ²i7 ȸ8–¸ñFúîÏE@ýY û �0kü²TÄ1Ve«Kî­%~’NãžlÆ]I×48‘öΛ¼¸êJü -½JyŒœwšRÛŒ¥{9¨o¹$ÓrÛ8÷D†NHíÈF”,I"ãT’hÓ<o—Í`¿‡Ï…¯¾Eþ½&íÔRoI÷ŸÌWÒOöÜñRKz¾ªú¥×‘vcÛ=W“zã¥tO¾•'­ ž˜È¯çÁ°,èúdó&eC—±{%ï÷�,"™ŠùǨ‚²Œe1è¿“V´å‚¿Ø�;ó\mWÚ'¿ÈÅÉ¡²¡—|Pà‡LÔ%Šêéó£ë9wA…_Ï„e$ÐÖAJ"zÍ>_oÈa·¯U¹þÜá{3I’tûIüZÿ«^ã·Ç‡¤lH-:”“ÇÁvªýrú½û».q知í,XŸ äl€ç%¯»èÉQ©¿¤“4¥®?Cƒý$qÞpÖñ(–×n}î9iïº!=z™wReHoO9—|Ù¸'ÎOî1G'Á¶ïÉnò£* ×5«ÞFef¿þñûkv~ûí7÷¿ª|Òbt˜—é=¥{d™Ç|’tK¢ø­ôL¹Öçú[‰Õy–=—'0eA׳HjÙ„k-z!¯ã†ª;ôyæË߸ç�`yÉTtW?ÆÀm£,c9¸Føn"gƒsØê!Ÿ\OƒivÎT(á‚ÇZÓô”ÈáCë¯;w?ÚǬÇ_EØ<0ë^ OUP:„ ÎÙ­éù4Ô:nHJí±$g—êY4ôÈnŸ ”ÚäÂ;µFGÎ}U*¾ZÙn÷ÜÅ“°°ûI‡Çîû˜•–\å³>õìp^–¼î9ÖÃnôöÖ"i÷åÊ|oˆx!ÇýO.è««}}^²Žÿ)G>±ã6vØ´\âgizd8çiÔj²Ý>±ÇÀÓÇsï°bž¤o+©s;ë¿«ß›ßýîw’$É5úœüBETý²•M4õ‰|ùóåÖœgæÙ!ý\Õ!P7î {ä߸ç�`9ÉTtW?ÆÀm£,c9ä :¨0ñEô‡Kø\Qƒ}tÈĸõŒ&2t@ÐpAvÙDŸÁ¼>ØÉ¶å‰ŒÑí ùÑÞfqë±É“-‰ i†Xi°4~}Ã}¨#e¯³‰¦4Ñà/£Çë?¦_Gf{—4‘ápÙ¡ :Ið\vƒäÆÍ{ýßñ=x2ÕÚäØÇ°¼«ýzêÿÞ|&ãz3]Ÿ^ß]°Û½q„†>'Ÿ¨rzªÊ›Ndú¤£’&2ü¹yÃÞ 'ÃÞJ"yTóûùRúÝDâè­S*õv×ëbÜs�°¼ˆd*º«cà¶Q–±.å,y,5^٫Ŧ·„jô›+ŒEÉŠ0Ÿôœ¿RYüÚL"cÜP“L í‚ï0‘áÞküq‰Œüö…¼Ý–ò Þ%PÂÞ&Zi"cüú†Ûñ—1¯Ë'ÊO*øšv+‘Èð=€Q”{n’Xÿ÷ÍzÙÿë2XÔƒG¿ï*nϺ„ˆëy ?+Ú·=e”lù›Éûk62ç¤Z¦OhøD†N Ø^i*Md¸²èѵØciŸÜD¿®¬§õ‹>_~rç²ú{bo§0‘ªÏ?æÈ�°ˆd*Ò?*À*{,,ó\&ò…~½kÔëü€ ¸Š¯,Ž ÆòÏ[ÏH`®ʼn}º„B:<EÉç×Md¸ÿ‡ëM©@õä¥4žüI’g¹+Ê¥‰Œqë ·ÃõÈ(|]>ÑP–Èp=2¦YÇ ù2vËD>©à‡!è^9;ay)ÛWUzéÁ“ÆÙÅ~žKÖI£±?,+Jvý³‘߆»^tBc¼ ‘aÎ%è©I=>–‹Y&2LϬàýùs3(i¯_öK{;…‰ �XDåéD�X7ó«ûtc¾^|1½rêæ]0Aݪ ! ÆÎNåý{›ø°F‡–Œ[OŒºy#L ¢SX çÊe‡yø‰/í•×4ˆ/Ht¤òÛç‚Ó»Ã_U'$TÏ·^ÉÉÙ‘4£çö òàGIv·†ÝÎÓ`éÏÒÿ!˜È°|}½ï©¢ƒ®_Ǽ.Ü>½Êl°5œïâ?'¯Ãl™a8ÃÀü¬ÿAÞ»^ó6Ýùà{ÈØ}xÞy";™93fÓÛ(ûwÈ0nQËqÇ*;üetý³pWõ‡þœüò‡?üAz½ž{E™0‘¡¹c£çˈŸÊ#S6ý9Q–ôœldߎMdä“xå‰/�XGDåéE�X7ó«û|—û08ñÁ° sÃ;ƒllKãðØɃ¾ ìÕã¶vþj³[OÚ#¢d=—ù+Ú{ò*ù{y`‚Qp(žèÓÊÞ¡c£Þ”¤§S!þª®_g6ÐÌn_Câýàµ& 9—ž/¯}7”ïyf¶Ó®kä;^úÉF‡½Y† Ö×íËåÈ~*z]OŽÃïíK¬‡˜¿Õ¶¼zì?pM\Çæ~,ûé{ô÷ù7×ý~K¢Ö;—�™?½}SñI™ƒoäõÞþhâj½²Á¯ë‘‘&á2ôyõDž$¯ä™>O‚É+ó럅©÷× Ùrc—?þñòóÏ?»g&É'2—4ësÉ› Tû´h²Oõú7Ï¿}<ÈV!‘�×FT^Ñ]ýÀ"™[ݧïøñ$ÛõÝöRhÌ4Ъ˜þ|p½MÔëG ú¹›ö6:“_J{ð¸¹56ÜÝsôzÏ¿“Öá¿ÊYg_"=lB¯ÙO«çØPgןO|]Ï]Õúsª%0<Ý{fo4qäCšLð=5jRo¼”®K’úÇrØÌ×SÜúl‚õÂ%é|Òî4—è¥ú³´·Óõz‡�À²#*¯hny�˜£yÕ}&¨J{3h¶÷D³ùfì•Oà6M>øá;EçÍ{½KžÊØ<Á2̺Uðý}úüpóŸ¸÷è ù²¤7ÓMèuß…ê Íöt÷Á0EêŽ_šÈÐüÝE†w›©E-9Jë¨qÂ㪎Çþ3il–õ� –‰½è•`ý•W¤4�`ÝÌ­î»èI§ÝGÐ]»#½`L?p×fr>¬Qo#ÚN�€Yã—¥"~Œ¬#ê>`hçÃ:õ6¢þ��Ì¿,ñc `Q÷C39Ö¨·ÑÚÔn‚U{<G—ì°�ÀMÐ2­HÿÀº¡î†Âà”eº�€Yâ—¥"~Œ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ±rÑ{+qt_¢äÔ=6çÒ;jITÛ“¤å›‡ëlÇ¥ô_¨÷l¨óº&õæ‘ôî©… qGÚs>Æu���-ÓŠhÌc!\u%ÞÔøæ‚ÜÒ÷MÂàª˦:'66æ›È¸Îv zmÙÞx(íÞ¹ô;O¥>çï0bp"ííÚ”Çx ÝҸŲ@Ý��€EAË´"óXçiÔî:‘¡æVôÔf4¥6÷$@Õíp¯ßŒ¥»@¹‹&a5Å1¾8–¸¾u«eº���‹‚–iE4æ±0F‚\=!‘F]_ÅßzC»}õ¨sq"IcÛ>·±-Ãc;”bЗnK´õ…´_5¥®Ÿ¯íJûäܾ/¥Örè†bèÅ~¶í ¡^t`ŸKß«·G¹'õè‘]o”ˆÞ¢âí<•$Ú4mÆ]¹*èu2è¿“V´å>ß/6yQ¾yÒë™u˜ÏÓÃS÷ýõP“ÆKéö/Õë˾G(÷ÔþmvÎÔ£9éwÒK¸ÝêoŸT ŽSíQ$ÒdUÉg\|v¸O̶…ßE-õ§Ò1ßåúôz���€E@Ë´"óX¹DÆà,‘Ýš ngÒiª`¸öX’3À~”dWâfˆK7”bKv“¿È/¦'CA`\oI÷btÒx{>Ø¿·$j 7¢ÖèÈy´×¤Ë…yõ¤í´ï·‰%Óëä'é4îIm7‘³Á¹œ´wÕvë¡!Ÿô+Ë·Ã<›w%ýdo˜<K9KKÍüƒþ‘4ëêýú³.‹¿G–Û6ýyf_«ý·Ý–^ÁœvÝaï XÙ“¸ûQý_ÛÙ‘Zt('ŸÜqÊ}ÿ¢ÏÈ'µÌ~»'ÎOn×d»}2šX©€º���‹‚–iE4æ±02Áë'éµfƒgÌÚ�ö*Âý>(¶¯Ïõ>)PWÁõhØ^œÈð»Þ¾ÇÂÈð—ñÛé{e¤‰ŒÌwÌ=×O$ ¶qìvŒÈ}g“øØ ‚}?TÅí³‘ï1ÎèþÌÒûàÑ0)¢?{ïÐîó9ÁqÊ'(R¹Ï(}–Ûo×DÝ��€EAË´"óX™àÕîa‚À<o‡M|2A~˜Èp¯7pAàK„*%2FìñÛy56‘á{Mèž"Wv®ŽZS:çvE7Jd˜ÏÉöZ°ësû`ä{ÑC?¾“¤Ý°C:Jê•:±ä¶}Ð;”=÷¹ù};ú¹%ŸQ¸}çÒë$ÒvÃTHd���`UÐ2­ˆÆ<F&xu=‚À>|ÞÞ¡Ã5°Â@4‘1¼£‡O| Ý,‘1~;Gzäßo&µtsDÔ"iç�¹Q"£`(Jf}#ß#Ï u©7¤ÝùAzùÄPžù¼ûêxœªýñ$ÝÏ#Ç)ó¹c>cd?éáA÷¤ÞhK§÷���X)´L+¢1…azM {ø¹2ó`ø„ŸS!3„¤uÀì‚z?G†›·ÂÎEa>)# ðÏNåýû37džO „CVÔŸC2Ængæýá„•ºgÄ_Ôsõ’dBþ®%¹í‘O¨¸Þù}à“†–˜D‚;~Þq‰ ÷ùf2Ï`]¢¦½ãþ…›#CõÙ¯^•FšÈø³ôßÓc}Œl"ÊÏ÷A"���«‚–iE4æ±Làª\äë! —Ò?~1¼«H½)Io8ÕeöŽÛÒHNÄÍ.aµ=²ÏÛ@ºø.éD˜ê5ï’§*`vŸ·Ùx¿îÖ¿!›û±ìl£6n;Ã;£èïy¶Iœt¥ŸNðéש›±»{,¿#¼ë­á_ï'Óô帹õ«õ6ééÉN ÷uÞpÛjÑsyÛþ\ýßM<ê^‘7ÚKF ïL¢¶aÿ™46ýfÆ|F:iªë¥’ÞÉD=ßz-í/î©çÊîâ2ýý��€E@Ë´"óX=£CK’ÖŸìÛ»›¤tÏ‹†ë…ÛDÝ��€EAË´"óX=óV, 3¤%ß{£—H³ù¦p fk1ê>}Ì;Òn<(æsDzs³Ü–¢9_žM~¨–{jÜ1#wè¹c=éèÉjKç¯��˜Œ¨¼"X-~~ 7tb‘{eø�Èo«ÓîØá¸u Q÷¹IYÓá@c}TÁüþÊöÖNÈ{îæR—L ÷ÅlnÇ{=.iªÏ߉‰ŒÕ>~��àfˆÊ+ZˆÆ<�ܱ…©ûòwh)4°·ç½õžóâ&·*ñ˜ßº·ÆÎ{´Lº£¶êÇ��ÜQyE$2�¬£¹Ö}'’4¶Í6˜;½wÉLbk&4ýe8a¬~¬p2W?ë¹ôŽZêµu‰"=¬zmûÿ•£X½.:Ž¿kN½%ÝþÃmˆåD÷Rëì&±D[:¡ ‡½¼•8º/âC·MᄯÙInÓuèmpŸS‹Zrðä`$91èw%QÛ´ezQä'«Ðvøúcù8²/þ"ý䉛´vòg‡û~t‹e‡×¸Ï0 Šá6Úm î@ä'6¯ÓûÌOn«ß¯ït*ç#Ûüï¯;Sïž»,U��f‰_–Šø1°ŽæW÷é!;.ðÿä†Q¸ä„¹]íŽ jíëü\/Ù¹+ôs\î¯öß“Ï{.�ßQýGõº`胻Ì•¹]°ôõ|>¹÷ڻפ¼îñixw»­¿sÏ\Ù÷¹Û§·ÙÕ·÷Õ·öÝtóÓè»Íì½È%òImܽ£¯/Çcâg»žæ;|r·(¶·õÍr·Q?C÷œÙiI÷Â}ww××#›È°·I6ûÁß"ÚÝ29»Í寛—ùˉý�˜5~Y*âÇK%sºÊUÌáÕå;é‚ÞO$2Û˜_¶$Š_I'à37§‡^¢¶$éêZÉ$†. 3¯qAð8#Ûh™çJ‚ÃZÑvŒn{é<áUpPÇGÿ$É“¯ƒ 3¼’^õ÷T`ÙýFÚj¥ŸQ‘Þ–¹0û3žƒ¡%™ž�é&ÜñÉÜBw¸lÆÇò³)áq´As:ôÁÍË‘îGsüýmxs ³­Ãò5ÜHÉö¢0‹~ßÏú=þ»æmòóZŒKdhÙ×MdLüì@æ»ç˜ýôÀ%„ÔŸ½CÙ3ç€ÞŸ÷ƒó¡lhIö;•nóÄï~7ôñÃôØ_�€Yã—¥"~Œ±<ÜÕe}åòêL:M%ÒÀoŠ VFæ>8—^§mƒuw5׳†É‚ Q¡‡ä'�õWq7îI£ó“{pwÕ¼èn.æóks·‚Õ‚í(¹bl·}Üv¸«Ïáð…ÆԃÀm`z ¸Ä”ÙÎ{²›üèö…$[–=‘1ЦåD‘Љ¡¢`7÷>³?ŠËòhÀœ´sI„q‰Œ\®û/fÅç_0ìBO`›œä’RÚ-%2¦úlEO´›¸ÄYI"ÃÕ7¦×„ùÿ›|9¯óûW'従ÄOä[šÈ(~ݼ”Ÿvßëçí~÷ð9ûxù±Y-óª?¦a;^™ßwžùçÒ2§Ë¢¾{R0äªñRº'ßÊ“V•úÖ¯'¸ ÓÈùR•.c÷JÞ?î9�X>Då-ò1eâk²¹«Ë·®¤gƒvÕX ©nŒnÕër¿ I “;æ¹² ¬ˆOJŒv¥^mÎSû¼¹/¯_7 ßgŒ»ª­™ýïѡ֛öÈTæù¿½l0{SóªûF?A9±HqR( š÷l¸ ;k4¼D†ë‘1îÇ>aUX6òÇrV‰ §ô³U eæ«pwê½[vm‚O}Ç?H{ïЖG×£e¸ïÃý{.'í]©ÕÒîü ½à;e·¹üuó2þ|p܊ʦÙ¹ÄãXü¶“OZŒÎcÊuZ¿ªs /Ó½ߺ»fé„„îÁ¸U­¾­t¦I|ü…¼Ž¿Öóñøò7î9�X^Då‘ÈÀ⯦º+Bzü½æ7]^íR|è!/ÓIôì<�á:ÂVøyjñãýsÏe' ,{¼ÀÈçy¶¶&J÷žÈ×:hÚMä,mˆê B@/Ç'Џa"õø8¸RíÖW¤ÐI—½¦ ØÜû ‡¹LJdøïk†”ô ®&(ŠÕÕHd¤óI˜²yáæbÐePÿöŸl¯™´,êäÓªc“Syÿþ96e0¼êü;iþ ¿” -ñKnhI6±â’H>A‘Iþ…‰°_]ðIêsZ¯¤§u¾÷ù®÷K‚ß0ûܼÜë³ûBO±é¨²8þ³]ÒÁì ?Ƙ²ë‚ôGÑCÙI˾ êýœ#~Ž } Fù¤ÝÀõË'2ô6ÿK"ÏJ^7/χ²:@ï#ŸäY#wUüîw¿“$Iä·ß~sLK'2¾Pe÷:g·F{¸ùĦ¯2¿1Ž~®ñ¦ ×Õ¥¿{×ö ÉÿŒ{�–QyEwõc Œwi'ÞsœŸ@/Û¸šÈÚÞn¢C×@K_Ÿo`™†¹ àìû‚Fº~®hÒÀ²Ç‹”6è|,¸‚T–ÈHç<’jš{j¿¨m®œÈHƒ° `Ôßi'ßûAÓÁåžÛÆ\0š˜ÈPÇ%¸G-Š%éÁ§ÙOÙ�É}ù +’ÈPßr8HMêûÏT™òó:„Ïéúp¾‡ôœðɹüÝ7/åûä©Úoúoµ˜ÀØîþ±h_bµíߪ¼½z¥ö½{NÃý¸1|fÉ?§‡Ÿs‰À†êãÚÿFž…w9i½ËÍW‘ݦ͸#߇Û8r57ÿú®\æ÷…7ñ³} µ.ˆxÛ–/Ìħ.ù1¢$ÁîûzS{u—xý/ÛÓB=^‹žËÛöç&ˆÔs¾œg¶¹üuUÎæYÒße<Wd†*è«ùÏeן»™»ÞèF¿ß¯Ïmw¬M0=<¾zŽ—¾ü×våëƒgò¼Rývw&ï¯Ù0ûI-ÕúwFßÍçÔÕùÁÐÁ4‘á““7ìÍPz&}a!QuŽžkFÇ‹ÞôwPråMŸ/ôÈ�°.ˆÊ+º«c`,sås3f‹†AL d]Бv¡Ï{¥(·n“ä‘©²Ç‹Ì$‘¡¶Ç_1KÇê»ä „"ö ¼¿B§÷ó“àjs@“'.€+:ÎÔÛ¡‚skPÝ0‚Ì‚ý´Ú‰ `ñL>tÒB÷ FPî¥ç©=oÕùí{—&~ÇÝæ?ÕúvÜúõ𛦴Hdd–é>‘¡ö7$MB¥‰ ŸD*¨×§f“ã…wa2u»Þnýûð“ý}ÖßcŠ;( ézŸ92�¬Z¦é`îLƒ§èª|ب™ȺFY¥D† ®;I:ÉÙpÝÃ+‰ÙIË/Pøyš»²6Ç%2Ò«Â%9ù'‰£çÃÆè5¾›¾í]‘ DB6áaÏÃ¥ kyÕíHï<ão:z\í±Ïwž}"ã¶à®•êËD®îH{ÊôærIÚ0‘Q”ø5ë)¿#LfXá‚*Úw¹è„ÆxA"C'¡LO$7¬p–‰ sŒƒ÷ç÷2¿î·ÏÿF»ò”Öé×ýM€A ²"ýƒÌo “޳“Yð Ðò ,}…0º§Íméô>¯»lÒÀ±:%‰ ?ÙgfØŒiÀ•%2ÓX¬Éýz}Ø{âÚ¾a£—v ÷ÌÞ—î. )×Íïß²í¸8–VüZ·:nÍ—Ù÷˜ïã¿oþ¸•ÇÙ'2�XÓîÜ4ï¯ê4Î÷æÊ%2J¿v=Ã^f¾® ‡VéáR‰›|rñÜUý¡?'¿|ùå—ÒëõÜ+Ê„‰ Í ßÔ½ñâ§òÈ$ÜñºÁÐ’‘ß鱉Œüņ\N"Àš£eZ‘þQæÏ7²Üä…n¼0±Q”ìÈóÃ&†cÍUðÝ~kM¦‘4ìQ``öJ’Ÿ lPNXöx‘‘D†îýáo¿š½Õ©Ýî°·ƒM6l¦ßÕ%‚±úÙI+2‰Ý(.z¿»z72o†O€LêG‹¶ÃŒ™ö·àÓÕûÁŒø.¸ öA8·‰=wAÈ_½»!ê>`hêóÁ%U·¾‘×{ûÙ¹C|`œŸ¸´ ñkê ]Ÿ…w„I 'mžÕù>kwUèÏñËt /ŸÈPÒÛv«õ¹dBabÝS¯óüÛÑÇ#õ?‰ �¸6Z¦ÝÕ10Q:ä@7ÚrWãLãhØ +Ÿ¥\5€õÄ_îuµ]iŸœçÞïJ¦G†Ÿ𵴿Љ÷ú²I'N&蘙ÿ¼pÙ–Fû› Û´¿"¼&jKbºûú¿]ƒ³w(»æn#ù÷d{rL§`ÒOÇ&x²Ÿmä¾Ófü½œæ·=³øîƧò¦}$'ÁÝdÒ‰!íš•ð¸ ÙÉÿp»®I¯€5ýùà’ªêõ£Ie×cÃ×+ã¿&1™¿#Œ lwÛ:ØÏ½0&q=OwUèÏ©–Àðô±ð“5ü|iê/"Ø ƒýoÓ ,‡ÍýL½[Ÿç"w&õ»”Mtäzõå’Ó7JÎÀ  eZy�눺šþ|(šôÓÊ$Au¯ŒÓq‰ß\ÒÃ8•äÙsyíÚ68žHÏÉ]Õýë_Ýÿª°=ÌqPK¶W‹;~™d°¿»ˆë­aö}KŽzÓ¤rû0]æ/@Ë„;(Ñ+À:¢eZ‘þÑ�€uCÝ q>TÃþ�Ì¿,ñc ¬€‘¡7ÙeQǙϓÞ/�,·jØ_�€Yã—¥"~Œ¬#ê>`ˆó¡šµÙ_$ÉàÎðK\‘þ!€uCÝ …Á)Ët ��³Ä/KEüXGÔ}���X´L+¢1`Q÷��`QÐ2­ˆÆ<VϹô:miÔKÒÏÞÕ·ü{"íÞ'÷÷M]I?Ù3çÑÈR‹$~ýô.Òû Šz±D™×íIrú}0ùaɶ¹ûïû÷Œ|¯¼‚íJo·—{.s>ç¼#ZM¶Û'l½•ÿú6‹…›Þ–ÏÝÎïøµ<i-Ƙj½M���À" eZy¬šA¯-Û&È.ø'ÒÞ;”ÞHt~3WÝX6ÃÏ»èI§Ýº àå$LfèmØVÁýv;ØŸ¨¨I=>–üôg‰ìÖÔwª5¥s>íÆä¢Û²ÛÐèȹ{ÔÒ ‡RÛMäldu9ï4¥¦÷afî;Œ®7`’![µ?˜ï3èËac{òäpÇ7ÞŒ&WfŒº���‹‚–iE4汊F Πw({E½ n¨øó.å,y,µ|φSI¢Í\Oˆ éÆ;R¯ß+HVè¤CdŸ+íýPÆ%HFãz¦¨÷4÷åõë†Úö²"ö;ŒKJØ}’{ÿygBŒf?ö™1ê>���, Z¦јÇbÈCØØØ–fçÌÿú¹·G÷åQ|(­hK=?¼Òo…ïß’GÑ„ç Áûʼn$íô3‡ÇÒ÷ÿEOŽâHjõG™õôðpÊ'¶WB¾gCY"#’gíX¶Õöï&?º‡Âît^ï]#‘á{WìHÜýèSÌ:‹{¦èÞ{ÍŽœ^2E"Ãw3¤¤WÚo#p.'í]ÛÄ,Áþwœ®‰º���‹‚–iE4æ±lÏ3Tað£$»[Ãà?¸½¦ñ«‘é¹ óú=›ÜœI§©ƒÞ\b!?¬Ä|Î=©7TP|)ýÎS©§IX¨›Ïܨ·¤ )PšÈðI‹L/‹òDFÜýK®…NDìË^òg9ÓóZTNd(fß„Ã@ô:ŸÈNa‚B'{ö¤ÑùIý¿¬7‡6E"CÔ>=~!‘NäèÄSœH·éž+ãö{¸oƧë£î��À¢ eZy,7e´›«û›%§æÏlâÀõ:î¢ÄB~X‰K#úÜÝßS s˜]"ãÜÍkqÏ&tòeç‰z¯ ௛ÈpóalÔKr¦ ú{íI?Oo«ïÍQ4¼dšD†ã{¶è¤P-’ÖqLb4‘1ù8]u���-ÓŠhÌcqèá!ßIâ&ÉÌí¦WFY"c4øM,Œ+±¯ d·žôs z”(MdTZw/l2AO¤¹ûZNŽŸKd&ÿ,HîT`“n˜ˆÞ¦â$Àp¢Ôp)^R!‘á úïì° ±=\ÊŽå¸ãt=Ô}���X´L+¢1ÅàæG¨7¤ÝùAzù }l"Ã÷8özI,䇕(6hw=Œ|}ÓD†Ÿì3? bB"#í qOêõÈð7Kd {1¼£×Mi¦ß9T0‡HiDÆGé¶^ØãÐ#ÍLį‚„OjtŸO>N×CÝ��€EAË´"óX&Qá®üû9. =3´$?äaà†clIÔz'ý+?G†îM`ƒæÂ»•ø¹8êO¥Ó¿”AÿHšõûAÀ|ƒ¡%áíWó·8u=.²ÉýY;ÃÏöe¦óZŒ&kªñûLí“Âu¨}xr(ÑHO ÿ¾pòUÅ÷ÉÜ~õ\zISê~õ‰j‘ÄG=1“²º ;‹oùê “gýò^Ï©1ñ8]u���-ÓŠhÌc1 ïXQ‹žËÛöçêÿîÎ$ÁdŸuÙ²iþ?LT¤A´ylG½æsÙ¬7ä°«çc(êi`¥ÃÌû¶¥‘œØ ÛÔîsʇP¸žîu™E÷.yÓÍÞ]C÷™×©í?ý>ø~>Y£·¹áî4âzp„ï)íÑ0ÆÈ¤ŸC6ãÖ&nrÛköÃÈw—`Jÿ­´þUº‡n¨z®Þx9aÂÏádž&)åö]ùqº>½.���`Ð2­ˆÆ<€uDÝ��€EAË´"ó�Öu���-ÓŠhÌË(;ôed¹á=ÖÞO���À" eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy¬‡séuÚÒ¨?–¤¯gÁt“eF‰ôí æâªËæÆžÛ¦[tÕ•xsS¢äÔ=�ê>���, Z¦јÇrÈE÷…4&èƒ^[¶UY߸‹¤–u���-ÓŠhÌc©]K\ßšª§Áõ~ÀR î��À¢ eZy,ŒA_Ž[‘ÔLÏ ¿øá—Ò?~!QÍ>^‹åä?þUÚÑÖðµ#ÃDrÑK¤Q¯©ç·äQô@­Û&2ý®$q$[qWÔ_êuo%ŽîKÔþV’ƶz}Mêñ÷ÒÞµ?È…Ym¸þñá:ŇÒ2Û¼çâÄ­W=öõ yò\}®ZO7‰%ÚŠ¥ës+éëôº·¥qx,ý~¼'Gj{kbyí>Ûìƒ ýdè\zISêæù–<9PëVû®›¨m{ qWoÍ©$ѦûŒáRktÔ» öóÈg¬ýý���€E@Ë´"óX 9ï4¥V{,ÉÙ'Ϫ`º&ÛíõŒ>Ò’zý©tú—®FÍÞãæ~0¯»g“ ƒ3é4u‚@'2>Úù1TÙßÔ‰ŒÁ‰´·u²Bî/ä¸!gÉc©é¤Cëôúõ;²±©úÿ¤Þ<R»íÚ¸'·ß¨íƒÿ_¥×~(µ¦tίÌwÛ4‰õõÝöZ]ùdzˆ¨÷˜õªíü(Éî=·îKéwžªuoÉnòAŽÝönÔv¥}¢Öb†Ê¨Ïíüd¿«wޑƦþÌúþ¤½÷BºŸô>ÒÛV&2êq“ pßÍï÷²ýlV¾Z¨û�{°\o�`–øe©ˆc,†+é'{àÞõ0‰?1g®i^k‚ô¢D†KŒl·¥ç:d‡–„ëWt 6\MøÀ?ض4)]Ìzrë~ޥݖzC»}µe^ö;ÛÏ|(íÞ'÷üOÒiÜ“ óÜÿ}¯“²ŽÙ† '‡×O$J¿ç“%;êñêï1ûÙì¤Õ¢¿°î8®‡ý�˜5~Y*âÇ‹bp–ÈnÍÕ¦7À}×ãÀ …(ºÃHiŒÑ»’ŒMdäד üƒ„é~¼èó”Ü:2Ÿ©7%éé>ÙD†}}˜ÈpßÁ<Ÿû>¥ß{8´Ä MINìЖ‚D†Ýßzͱ}͸ý¼‚V¿î †L•×¹»ãí»èI§Ýúš”ïi•Ÿ®>0u‰^Âú&|Î=ÖqµH⣒äÉ×wœUõßQK¢š¯çoOù~›¿ìo]5ƒþ;74RÇô·Ê÷Üíý=Êß‘ìæìþÓe»`I컋&™ßnÍý¾‡ïþN¾ÊœSù‹ �ÖQyEº2ƒæ`~àý°ý¸kĘaa7¥4 ÿ í°ï™I"ÃõÈ(n1.‘á úÇr¨û¦1TÔ##.6Þ¦Md8zþC´ùïOd˜a,[RÛMä,Ý¥cöó Z̺OŸûA™Éÿ])#ú\SN®M«š|· QÁûnuûò\} ë–‰‰Œë~·å4þ<ðurÁ063$ïžì&?ª=f{Œ¥sêøúg$è+ “Ö7Ãc’ÿ»‚a�ºÞ‰ŒJÂý­Žéaók96C ?Ø9¨|¯F}¼wŸØä…®ÞrCççÖîHæê§´ ™ßÍ/rŸãzKnø¡°YvûÂçFÛ&�à•W´2?ÆXrîªFa¡ =EÍÍ¡S‡Ö+é]ú€þÏÒÿ!Náßã"W~Ž ×à9S ±í`þ3$cØØÈ- ?»†ý¶4;g¶arþ´Õû2CK«4ÒO¾N ª·Ë¬+œGC­É%6܃þ‘4Ó^)¹¡%¹íMõÙõÁDЫ%›$ çÅP VM½öy»+ËösæCVÃâÕ}¾ÌúyþïkÈ wšS¶Ô¹Uu½ù÷ÝÖöwU7pÝﶤ&žeul÷mÝ`‚¾ükTÝ1±G†«‹Òc’ÿ»*_ï."#Iéõzî¯Û2nÛD»ÿô^I+Hfe#çë&=PJ%2Ѝó£Ù|)¯Óa îqÏ\Dë¸ì �•WD"‹Amf‚Oh?ñ¤î>š™Ð»ù&ü$žµHZÇáüZøžÙ?—Mó¾ÞpòLµlîDzo® ëE58â}ÕððïÉ«dØÍT7>>†wQAã¥tOß¹«Ëz©«Ïj ß³ñ{ùê«¿—øµîò¬þvÛzv_õ½2®»éЀ¹×Žlopõ¿‘gá]StÇ${üëëò¬«¨ÿ{¸Ø[É~v«_%úûÍG~ë2î'¸umüÔ¿ø"ø[ç—á]xôcA2-í£wÇ]?aãê½í7î?ê9'Ò;Ô ·oxçóË_5Ÿ¥©ó7ܶ¢rSô¾kmßP¦ ¸ÙŽá¹2Ržk$z¤>£h{ý¾ÙÆPÁdÉ>_ú{ç’¨™«ï:Éö\vÓÄ…{RÒsÇ/¹“O”žËI{×ÜÉïÛ/¾|ü­ÓÞ‡‚÷ÙU¦½ÛôsAýoËÄ®´\}k'Hž5ý¹·éË/¿4Ÿ¡ÿ­”ÐÈß «ôŽW¿äö˜Pç^÷¥4¶÷Ê÷]ÁpÅ.®?=gÍo^öO—\b%{—1óHpþfïH–UV/éÇõ°¶{RÙú!÷™~ÛÓD†NÜ5ó=….åLÕ/ÍκZ~x‰B"@Dåéʘ?=ñd,MÓMÙÓWמÊîš\ÅÝš[Ýg®pÛÞ1~ž%;e1û· ÍRß{Ç\ÔéÇR3æ•ëÅá ×/º“Žy]Ñjôöåï|“opû„;7í÷pA~š\ züx¹÷]kûì;]oè kƒ F¯s'ØþN?¦‡“ hLÀR¶/ÝûÓmóº1ù<ÐI ]¦Âá%z¿¨ 7ÚÂ$l-Š%IY®—„9®ŸÜ¡|À—ï%þ=æ}æX¨ ÔÌïãz¸ÀО3.!f†¿ÜΗn»þð‰ ¿L›ÐÈ& ‚$xá¯òû_ Þ3f ³ž)†–ØóNôw\¯OÕO]]¨ïÌ¥~÷}qäünOšT0õAÑɲUi½ô£¿ðP æˆÊqu“ßÿfÉ';tùÚybëʲžK$2�T@T^‘®œ¹3†`rJM_ÅkîCÀ d¨3^¦—«e|"#4†/u° LP®O.X ½¾Ÿuƒ¼àÎ7¡ÌzÝЫ0�)kÔç¶çZÛ—ß&X}`#ýgïPöÌçê`û~° EA›– ,òÛ˜ºY�2ò]h™È'üœ:úøî%tÎÝd›z½ªL¦ó2WòóǤì)Áûl0^t^„eH?7f}7T´ïbÑ ñòåÔ&ãÒ})ßåû'MLù¡zQzΧë‡GÄ.K~HR¦,Œ;¿ÂzÒ%¸‚ú¦¸žœP/™ÿçŽÙO¹äInî]wÒ$™ÛÏùD ‰ �•W¤ùS `3ó¸ï­‡l´¥sg³¢cÝÌ·îÓå=‘¶ë?}"Cw‰þN}÷ }žèÆpé-ˆ•ÒDÁ_ì]' ¼`8F:¼)§( ðù ÀËmÏõ¶/Ï,öª»þÿ{Õ>ÿY#A[Á¾´!÷¾’×­ˆéΚ¿ªxð‰ìä“T¡A_ŽÍ0kgEß5&9pu|…DFÁûŠW+û\y ~S·]ä{døåü£{E™| œÛ™ò=~ÿσ¡{è|-tØdf=.!2L4ê'F{Ö÷ž £Û\\ÜëÊꥑó<'|­{(ËŸùc”^B"@DåéŠ�ÖÍÜê>Ó…Z5ÞM¢îC…nNzCÚ¤çæGÆæhï-×X®Ïõx(¼Úêäï|ʬ×5èÃu• ùÇo²}4PúøÃðjïȰ‚0�*Ù—ö Û4æu+bêóÀ_Í>øF^ïí王 4›/³W¢Ó+ÞÿîæÙVÁoGz½×SöÈPsÉûl€]0’=gFƒÞY¹íú#ŸÈÐ ŒŸþÙ=;Îì6÷³>&/¥Ñ*ŽQÆœ‹zâéÓa¢Ñ>á†-ÙïX‹^Ø;¦Œ£õM¾Þ´&ÔKùº(Ï<?&‘ö,ñÂî¡éz_HL¨ `ý•WtÛ?Æ�°ˆæU÷ÙF· ü¼ #‰Œ³SyÿÞOëþþ—Džù;CøñÞ¦1ììÁ¤†çÿ$í7ªáœé>íïè`¯ªÛ�"œ@ñ'{‡=®ÜO¬iÆ¢û;çÒ ÀÞ-èìÔÎõa×åæ­(JBäÞ×ÿåÛ—[¥a¥{ò(zô°WxýDW~Ž 4=Œ$*Ü—êmá6þË ‰þ¦äu+búóÀu×çÈUshÞ—(~+½pÂX3Oоӓ –Í•q?§Éh"ã¬ÿAÞ÷ÝkÍßÿ,­è¿¿Ï'©Ò `uÙù“¼QA°-C>¨-éî?·]øDÆô /À»}à“™`;¿ÿƒ$‚ëU³™Þ¢Û%1ž '\ÕIÙÃÖ·Á-¼ËØmª=ŠäQ8$ÉlK>Q “”ôÉ7t)G²`]~¢Âz)S7p‰Œâ":Á¹WÐ+Éíët’rµ &é&7 ,ú;™IIÕù2i_�XiDåÝö1�,¢¹Õ}é1tCüµ´¿P ßÜ„”þÊdöïÿJï2P‹žËÛöçêÿjfÂ;ß•ß_ÙTÞÇcÓ· üÜtL0!Q‹ŸÑ¿èÎ7ÙÖºŽÜÄyþn*Hï>P6I`ø¾w:1ã^_eûܪ²Š‚%¼[†Ú¦¸Q·w»/Ãïv"?”½Î}IJÓûf:>€ 'ýôNåMûHNô.|²(=^:�vwäÑûôm[¾Pÿ·IˆO.AáË™OXè¿ÿ—ô~({ŸZkæOö˜|4‰?ý·Z6ï« Ýý]>Dàzô:oÓ»wï*&0,› -Ù#w¼ú·ìþ7‰Eÿ¼ë ãE…wóeÁýÙ;ÛdÙ€>WvÒº0\gþÎ@.Ùâž·Ç1¬Â;’å뇒zÉo¯yÿh³Ì>ÔK&ynO˜q=-Ò÷Ý“(úïÁßj‰þN¾ÒCæÂÇÂån�– QyEºò€uCÝp\û-ï“ôF{a¡µOšo²=:tO‰ÝÙ€eÀ/KEüXGÔ}�çÁu±ßzBÖvKZ™ž“èž ÛRo$®×‡¦{ZìçnÃ�ëƒ_–Šø1°Ž¨û�΃ëb¿Ý”ž¢“Þ¹É,fRÝÞÊ Û€ªøe©ˆc�눺°çËõ��f‰_–Šø1°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>`HŸ,Õ��f‰_–Šø1°Ž¨û€!·jØ_�€Yã—¥"~Œ¬£u¨û®º±lnìIÒ¿rÌÈEOŽâHjQ"}÷–[éùÐO$RÏéçí”§ÌsúñKU4iÔkæ±ZÔ’£ã×ò¤Õ•—ÀQw\&K÷×"ºêJ¼¹)Qrê¸e'’4¶m¹¨Eý“$O¾–î'½¾¼ø2£KÆ•*J{ÔaíHÛ¯k£&õÆKéž|›-SêØwÚ ©û÷×rØýW9ÒŸyš/¿áR—¸û1÷Ù¹e3³Ž-‰âWÒé» ôå÷õûò7…ïS‹^oæ¤Èy§)µ‡Òî}riù}S°Œ¬ À²"*¯HW‚�°n–¯îû(ÝxÿfI‰‹c‰onè]¨í¨Û4‰Œ•1ö|ÐåF''jMéœ܃֠זíÚcIÎ.EEbÒ¨©à®ýA•õ\ÿXUºß$‘1M¹¿û2¹ºm§›Ö3?I§qOjÑ¡œ\¨²2èK÷°!õ4ضÏol·¥—-J¶,¥ä¢Û’ºI¼•ž^—Il¼•8Ú–)W6MÒÌ'|RËæàDÚÛµ\9¼”³¤)ÍÎOæ/óÙ&±¡K®3øQ’½}[æG’AçÒë´mÒ®¶+í“0™ñIzí'6!aÞ·‘ýl½ÞÝ/rûØí—šl·OÔ7ͲÛ<ç¾S­ÑQ[`U•W´º?Æ�Pn¹ê>ߨ¿Iï  ìÌ(Ðsn+cüùPvµXX‡²ç‚+Û(÷šóÎ zdT)÷w[&ïºþøë_ÿ*ïÞ½sÝ–Ô3&pÏãêØèÞf•.éTtœtÿ¸OPì&r–êÓ„¬«Ó|"-#LÈœJmŽO¨™ÞE¹DF¨¤WËà,‘ÝÚF61£“ {‡öï¢DFuž4›/åuI’Çn_øùS|'�K‡¨¼"�ÖÑ<ë¾Aÿ´¢-³ ÃÅ™çÌ•¾_äâäP"ÝX6¯ÓÙ—´ ¿zÍ×Ïäy¾®¯„&±D[úªä¹œ´wU ~ÖÏÒKš¦;¶¾šyðä`´{²¿šjÞ³%QëôM;Œ„]Éu÷ïæ‘}]ú¸zï×/äÉsÝèÖWU'l;îœ>vc™ÞêØÆÇ¦·…¥ƒÅÆ0qa^㆔t·×åé¸åP/.8Ë<§{uü«üÇH¹·¯›\&ƒ2f^·-ÍΙ ¬ Ëäùäs!gâþš±^¯g>ó³Ï>«˜Ð¸”~7‘8zà‚tõ]Zj¿>’øµþWíŸÒzæÿ–¼v\�—P2CJzAYñ¦IdøÄÙ=i¸…|y›Ø+!ôë„Í i„I‰‘DF®gJI"cØ“b˜À “{#‰ ähæ{ÅùÞ!ÿé¾÷hÂD°ˆÊ+ºëc�Xó«ûlÃ×^iô ×p5W!w\Ðå¯6ÚîüÙù.ô:v\#_¯£)­\2À¾^i—î\�¡ƒ€M7Tà⃴÷^ä‚7ݸ~,µzKºWîJ­oègƒFÓø6ÛùɾÇ|Ÿ_Íã›&ÈPƒ ’öÌ•ùÉÛŽ»7ù|È–GC—¡ðê± š_¸`xK¢8‘nß_)÷åD_=ÿä‚få^¯ûK€ù^6ˆÍ–ûiˤ;ÇtÙ3Ýø·ÜUn» #erâ¹0ê®ëŸÈðËÔ HÛù .†õ‚I}‹Ü…pOzm™0[‹bIºº–ð¦Id¸×ô»}ÅC1²lÐî¿41æ™DAø¼^|¹SJ~ Ÿt †•˜§ýþ–üw×ûuç‰-&9SðHd�k¨¼"]©Àº™_Ý—k€W‡C¸„Ï…‰Œûvâ»4PÌs ìq‰ŒÚ¶4Ýí´¨�f¤á®MFÌ6ŸÛÀÕL¼2Ól;îÚ4烧¿%»Éêxê¤ÀÙ) "ýºüÖ"iëãŸ/ÁyPì©E?÷),÷×*“áçºdJ¾LN: L³¿f)ŸÈð‹NhLÔ1j'Ú}Ö%Ùý–­gÆ¿v<ßóCo§:fe½¹Bz;Íãî53Nd ƒþYöÈÈ%2tõÃJÌÓ¶l§Ÿ‹ÒçÕNš²I¸‘á%fûHd�«Ž¨¼"ýC�ë&Ìr¯àª²¹Ê}éÄ>hÈÊîóz&ÿÄM†šÈІëN¯»Þ7’õŠ@iÃ]+Fô’·M. ‡œÔ›’˜áÓlûõäKµe"wEÞY:àÚh¦WæMY¸ùvTÙøhºú}üiC™r_©Lêrö$þnþ<(,“Î…ù}7¯¥z"#_—d÷[ö¹ñ¯J:dÈ÷qëH¹ä@ó½®3´¤@n(-{.ñà’.™a%Z>‘1B÷àx˜9¦vÉ%qFÎÀ*"*¯HW˜�°næZ÷¹‰ìLƒ5½b탆âÆ{>À°ôø÷—&)0Ú ”ÈpÒ9rx´n–\í ×e»èGúŠv»#½Þë‘€Àß½b¸-Ú¸mÇ]›î|ðWèÊÁÑKÙkæÈþifÊKþоžbµà*½ öŠÒL¹ŸºLº![õ†´;?H/sX…e²ì\(p×õǵ‡–hwšÈPvóe¶7éñâƒp¸çއ/+[®.ð“hNö9øQÞ<ÿVήܰ¡ÂÉ>/åìM[Þ˜Ço/‘‘ÝÎܰmR"#߃C+^2u"Cc­Ãá_�– QyEwýc �‹`~uŸ¾‚W/¸²§øGý©t̰ ݸ?CÕ0NгSyÿþË?ì>v“îÙàp4tC:§Á09ë÷ÿçO²ëo‘^Où÷“ûÿ“´ßèí¶h{eÞ­×üÿRú§.ü¨ÚÞ_¸[qê®Ü¾çÉ¿«àcÒ¶ã®M}>˜ KÓ 7l…“<ºÞ6ÈsI Ø'8‚I9Ï¿“Öá‰\fÊý_ädš2y©ƒGΤÓô Ü+(“'ÿ0á\u×õÇõ'ûTµˆäW>¹”Ê­gÎä—1¯-¦Ãýà–©®·KlðC”†ÃM|RSOHª{mØÇì|;º×ÖpšI@5÷‡ëòw ‡ ™„ÔSiš!PúoÛ“(ôë;o%n|m{ ™mÊ'2ôð˜çÒhËÅH"C=—Þ~Õ}·¢¤Ä˜$^ÇI{¯`x–ÛÏéï€ZµÙ¾ ¹á¾Sv½n_M4XdDå‘È�°ŽæW÷ù >‡WW‡wúÐëìÝü¸ýAÿHšêñZôBŽûÿ&ɳçòÚÝåÁ>f¼ž HÜúMç“ .€8ûFžÅ‡nR¾0¨¤ÝÂízj&Ø;·‰ ÷Øf|,ýÝtï’·mùB_¡Œä¨w;ð=OT 3aÛq÷ô±œŽK:„“~zý·Ò>ú×à®"aê{îØr“.>X ‡|ïË–{õº©Êä‘|pçX-z.oÛŸ«ÿ«2Þ~¯½Öh™ìOq.äèϹK×¾ýª ¤í¾©Ë~Üê…†ÄûÃýf“œÃýý.y:æµmIÌ>÷CF¼SyÓ>’×Ûʼvdžœao¬t}#¯ÑôëôWìÄ¡z)º#ΠßUÛ2,ú¸¦É4Ó“Á=>²èÄÀ93ÃXŠž×ËCiÿãË’uè^hß “,¹a%™:X/™^(.lž $~Xß=‰¢ÿü=i™fÎ�‹Š¨¼"]ñÀº™[ݧ¯?^Q´ô¸FÚ¸k·>èDZ<¼JnèÞOe·¨wÒ‚£íd z¯¤5¡÷ �`:ü²TÄ1€u4¯ºÏ\¥K'Ôl/ŒfóÍèXpàŽÜúù`zä&ÒÔ½0‚aË„¶“Zq(q«3±÷ �`:Dåñc `Í­îÓw÷ðwR0‹›$ÓŒ'æãöχ`NSîõð‘¶trÖm'�À¬ñËR?Æ�Öu0d“ ,U��f‰_–Šø1°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:¢î��À¢ eZy�눺���‹‚–iE4æ¬#ê>���, Z¦ј°Ž¨û���°(h™VDcÀ:šgÝwÕescO’þ•{DdÐ'­hËl×Fý©tú—î™2¹è½•8º/Qr꛵ éÆuÙˆé»G���0{Då‘È�°ŽªîœH{{S¶Û'rÕ?’f}krrâª+ñæ†ú›·˜È���À] *¯ˆD€u´PußyGµºÄÝ ÷À”ÌûHd���,;¢òŠHd�XGs«û}é&±D[±t¯ü0ݳÂ-›öñР,‡mû|-’Öq_ú Ó+Ã'2ôP“Dõš[×¶4;gêÑàñÚ®|}ðLž›„ɹô’¦ÔÕkkQKž|nW’8’­¸+W¥ë��ÀM•W4·Æ<�ÌѼê¾4q&,ú‰D%=2?J²{Oêñ±\ÈGéÆ;Ã÷f?I§qOjŽœ›÷lÉÆv[zýøŽ4:?©×œËI»)-ý9º7ÇfS:ç‘‹ÒÞ{‘Kd¸ù1Ô¶nšDFÉz���pcDå‘È�°ŽæW÷]I?Ù›:‘1èµe;71h*“È…Ÿ¡÷¥Þx)ÝpQ3,e[‡ÇÒ7Ý;ŠœJm‰Œ‚õ���àÆˆÊ+"‘`-K"£è'©‘D†þñ$í†2b?#rR“z#‘Þ…Î\ ‡–èa(äDF?=Ld”­«@Ÿ,Õ��f‰_–Šø1°ŽæW÷]§GÆCi÷>¹G™D†î±+µzCÚ¤—ÿ ¹”~÷¥IDØÄ„£çì8Ô‰¢Ï^Éz°Ôh TÃþ�Ì¿,ñc `ͯîû$½öCÙ¨¹ù)›¬¸çæŸÈ1·f­I-:”Ób ç?ÉÝCÃ$@jæ¶­“ÔpÿœI§¹í§’ì>–öɹz¯cÃÌ£¡Þ»ë×yq,qýþèçûÏÖ¯×I¢õØWbÉ•Ÿ6™¥Ÿ·‹ëdÊ^ÐC!ú;ù*óºáR‹byÝéôøY^ú{-Ò!h�€EBT^ÑRýÀŒÌ«îËÜ¥d3–ï¿Ïݵ$J¤ï^ë úï¤m¹×lIÔþ &8ñïÓ½)Îl õw-z.oÛŸ«ÿë×¾‘ö³çòº¹ç^ȱžã¢ÿ<‹ÝzÕëZïrse 'ûÔËfüJ^­+Aãr.ù–éá£d]š+3iÖÑ:Ò6wÜqåÖ<^D½¶ûBKlß_ËL')÷‹‡²�nQyE«ûc �å¨û€¡ñçCÁp(#?ô(ŸÈpü]tʆHi¦WÐÖÒô¸ëúãçŸ6ËíÒɤ–ÔËæä�Ü*Z¦ј°Ž¨û€¡[Md˜áPM©™aP?ȹŸ4¶¶+_<“ç–vÚãH-úý=9Š#©ÕId&˜UÁõÙ©›ÏE¿Î÷"Ò½>ÞJÝ—¨ý­$¦÷GMêñ÷ÒO'§u½Aô|0I,ÑÖÒ~å&ºUÛ`‡KUs×õG¯×3ŸùÇ?þ±bBCÏi“¨ýóÀÍs.½£–DµG¿Öÿú}ð‹\œÚ¿Íþe( �Ü5Z¦Ýõ1�,ê>`hüùà&À]&'27§F­ñ?äucÇÍÇ¢'¨mJKØ™y‚aMõ–tÍÜ0—r–<–šùûÊõ¨K|ü/fx‹~­îta_—&:ì|.›Ïäè­N¦èmÞ–fçLl%ýŒééÏ»K>‘áÐøí·ßܳc¤CÐìd¾Ã¡m>¹“4ö.I�€[EË´¢»þ1€E@Ý ?nÚ#CÉ$2îK½ñRºá+#Rþ$ƽáºLÀ]2ôä¼#Úð½vò\žpÛG¿‡ Ü‹îØ3Þ]×ùD†^~÷»ßI’$îc˜}ï¿£ïã“ÙcF"�懖iEwýc �‹ ÌrÁú)*˶”»¥¡%zH#‘žî 1’ÈÈ­käù@þ¹Là>>‘‘}íôŠöß¼–‰rß1›¬ ‘�‹‚dESýÀŠ¡î†ÆŸ7LdøÉ>k%9ó½0ôÜ /MBüR"ÃôÈØ´·6ÏnȰ½7ÆLBZâ®ë¢SÏ—A"�–-ÓŠîúÇ�u04þ|˜ÍíWw“Õ#§’ì>vlÚù+ÌûÓdÄŸ¥ÿþƒô¹¡%~ÂÉ9ÏÿIÚoNÝÐÝÛÃ&9²CKüûšÒ9¿´‰ ?GÆàL:Ím©í&rVmŠŒ;¯?ÂDÆ—_~YiÂO»?î¹yIòCKÜ~ÞnKÏtŒq‰Œ³Syÿ¾?š4�ÜZ¦ј°Ž·î³W¹}Ð.µ(–מ ‹^·)£‡*q»Àd„ úÜkòWÎCæ*®{Y‚«´™çòWo³ÑP~{˺óŸK/qw”ÐÆßÊqÛ !qkô1)–?nîxçËGôwòUa¹ÕÃGäM×Åj}ÏžËëVd&Þ´t^ªøÚ&6j‘´Ž{r¬"niA_ŽÝûôãµèPN>‹ÌR/›ª¼ìgÊæ«dxNlîKòjO}Ɖٻ¤¤Ÿ_‘~ï]Ò‰ ÀÐÿVbD~Ôe?nû£!ñþp?ëúà¬$ÍzíÚû�p}DåÝõ1�,‚Å®ûÆ_Ù6w0»«Ía×ø4Q±#q÷£},åîü ¾ûð*ú*HÔs˜«ÙÙ¬ˆ¹Ê›*ट_Ô]?¼:^”eqW‹Ó«î~øÁvIÒ³²m²!2ÕÑv�Ì¿,ñc `-W"Ãñs ¤I˜…½"ôØ­ûR¿vùwôP€ºyn8¯Á8¾úhRbÐ;”½‘ù ôëŸIóõËLWÿ¡I¤ûÞ™Þz-zdܲõh LJ¤M¶�`Öøe©ˆc�ëh~u_8tB-õ§ÒéÂ]’ÈH >IP’ȸ÷DÚ_ë€-ì11‹îsÙm+¯£p‚Æ ÜüõøØõÑôÜÑ:Ѳ·¯‚Äÿ,^2)‘῟RòÖÞÍwbõÛþ\qçÝ {e¬þþ�Ü5~Y*âÇÀ:š[Ýgvâ½ÁY"»…=ÊŠ››Àö¶(Kd¨ íg›€®û'é4›’œý9w§‰I섌™«Øú;ìŒÎÁ¡‡›ì˜í*ëÉ1)‘¡„ó Ô"‰“®ôÉgÜ:ÚÕ°¿��³Æ/KEüXG‹Q÷Ù‰G“ 3Hd\eÃ$CÙg–³w=ðwÐIŠ'²3’|ÑÝö÷Üד#›¤™"‘aè9AÞJÝlBFLOïg–jË:[÷ï�·šµ"~Œ�¬£ùÖ}çÒë$nòÎà® ©›-±‰‚aâ½ÇŸ»É?«'2üm6íP}W’½‚a%î5êûd–Ìð’iÞ¥ô_H42´À<és�0[Ô¬ñc`Í­î»ø íèžÔméô>Të‘á'ûL羟ÈHo…z¿.õt(È5i塽”½fnQetòÏ¢á%e‰ =ÇÄÿPÏǹ$‰ûE½S�ÌmG�˜=jÖŠø1°ŽæU÷]ucÙtÁý $ÍzÑDò‰ŒìíWí­äö«›~> ŸL°sr®çÄT·_ ™¡"º—E°.Ï$gvG{i¸á%õæ‘›ç¢è®ú»%Ò¨?–¤ÿÉ$:jQKŽzzëüs÷‚ï `Þh;ÀìQ³VÄ€u4·ºÏýzî‡-‰Z¯¥ýÅ=ØïJûħl ½}Ù¥&õƼéö]@Ÿݦ<ŒÊfú·ë¥¡»Ï¥«ï�âæ×HßS©—CÁ¤Ÿšî²™ûL#·}›%zXô½Üb† \IÿÍŸäèä{9tÃn66¶¥qxÌ„ŸÀÑç&�`¶¨Y+âÇÀ:¢î€ë¡þ€Ù£f­ˆ#�눺�®‡ú�fšµ"~Œ�¬#ê>?_GnˆGºÔ%îrŸ�£t�˜-jÖŠø1°Ž¨û�àz¨?`ö¨Y+âÇÀ:¢î€ë¡þ€Ù£f­ˆ#�눺�®‡ú�fšµ"~Œ�¬#ê>�¸êO�˜=jÖŠø1°Ž¨û�àz¨?`ö¨Y+âÇÀ:¢î€ë¡þ€Ù£f­ˆ#�눺�®‡ú�fšµ"~Œ�¬#ê>�¸êO�˜=jÖŠø1°Ž¨û�àz¨?`ö¨Y+âÇÀ:¢î€ëYÏúó\zG-‰j{’ô¯Üc7¡Ö×iK£þØ­ïBºq]6¢DúösqÕescVß@´L+¢1`Q÷Àõ,mýyq,qãM…DÁ@.º/¤‘œº�C}÷Ùùƒ^[¶g¸>�Ë–iE4æ¬#ê>�¸žå¬??J7Þ©ÖãA'>ê[%§êœwšR›aâÞ�B´L+¢1`Q÷ÀõÌ¿þ¼”þñ ‰jºGC°¸$Å ÿNZÑ–}¬¶+í“S9iïJ-}­Nü,½¤)uõw-jÉÁ“é†ù„‹ÒöëЋZ÷©I<¨õØÏ6ë>woÈnS-:”“‹{ÎÈE/‘F½¦^³%¢ibdÐïJG²wEý¥^÷Vâè¾Dío%il«×פ/ýàýQûƒ\˜Õö帹ïç®ãQ|èöGðž‹·^õØ×/äÉsõ¹j=Ý$–h+î‹ôuzÝÛÒ8<–¾þZ=9RÛ[{Ëk÷ÙÅßÀ´h™V¤+&�X7Ô}�p=s¯?Ï;Ò¨mÉnò£ |Âa»-=`ë^;Ò윩PÞõ¨5¥s~žƒB¯cS?®Þ¤×±÷"›ÈЮºonº¾…K N¤½]“Z£#ç:iÐmI½þT:ýK· þ¹€yüž{ÿ™tš:A z;Õ¶©ýº©nÝúïZôBŽûr–<–šþìÖ;éÜ÷ÚÔ ýÿRo©ÇÝvlÜ“ÆÛoÔ¶‡I•_¥×~èöÅ•é]²é·ýäPöZ]ùä‡Ï˜õªíü(Éî=·îKéwžªuëýþAŽÝöúdŽ*£>·ó“ý®�*£eZÑÜŒ�`¨û�àzæ^ö‰6êwuß‚+õç^|ç²ýÚÿMdÔ‚E ~(H89§ûþsÿÿíÝÏkYŸø{ÿ´Öîâ]èÅÍJ+o<ÐÙdq½¨¼ñ"‹††hhº@:Ј\„ºò˜¯è˹ÁsE¾¡1º·é Æhx¦éÆtcÄ瞟¥S¥’¬RlKr½_õt,Õï*ÏGçœò ÃuMñ %»¾cI¢ºMdè7Íþ·mÇüQïcn»j2ëÉ­c¼½s»/¦tûCµg^ö\ÚmÞ—Îà£{ÿWé5︤‘û·?Ÿ¹s <j¦%éÂ�ª†²�³ôòÓ·ˆå̵º°­\ ž&Bù§‚œ¦]KL—‰äÈv¹ÍȰIˆñº‹L>•df"#Ÿ˜–¼9Ö¯OI ÌÚÿ°ËH£%É@·)J …‰ w æýÜñ¬X"ÃÓÊM˜3T7€*¢ì€Å,¿üô](lpd»_œ›wlð]ÔÅa2‘`èq!ºMµ.Ÿ$ÌÈpÿ6Ý6¦5ïøtí°ó\I"ÃµÈ˜èÆ¢ÍÜk4<”®Nh˜äDQ‹Œð\ó '2°Z¸&—ã •ÄM Š(û�`1K/?M—‰l@žrãSløñ*L—ާÒüšÞ'Ãwòöÿù^výà”f™»“É48ÿY†oÿCާ–„Ý,|b¥æÆ“Ð «÷ÛÏÓn$ãä‹çâ‘¡“1j'ï‚17sŒ5Ùê™®Ù®%aRä7u\Ûj[n\½ìÒîªå2]KüSWt ‹3&_ŽÕûeÖŽ£¡ÖdZ¾l¦çr4<Vzžr]Krû»l|ǯ®Éå8C%qS¨"Ê>�XÌÒËÏüEÌäy˜§Oö°¯Ûq0ƃUšDÂÉ_åQø43ˆ¦[¿çä¬EòÏ"ù_ü¶êM‰÷nýn<ŠLW5MŒ?¡…ólË~ü…ÔÍ|ƒñà™z}û±ì§ã^Ô%Š÷%rïé¤Çód_Òq@të‰á“EjÒh>“þñkÓRþÖPÛjŽ—Ùø‹|óÍ?Kü¢íž¾Iûp(ç¦Å†›Ç·ÊŸ�“vÁq­1ܼû»­2ô¾sܾ݀g÷7|ϽvÁQç)>øWI~gΥ﷞tÒó¯[Å’L\{ès³’V¨55Ó’Vö¦€kDÙ�‹Yvù©[<l½”“0RÔ-vsÝFp«ýöÛoò矺¿²fߣî©/E]ÌcîØ'â¸V'éce}7$—ä1Ü5ɱ`ÐØ´«RÐBæ6Ò­˜š/K}Þ®³ÜÐ÷Á´{ájé{g¿¸5Ø fZ•y�UDÙ�‹Ynù©[lI£™È@—†né°/-|¢*’$‘Ï?ÿ\^¿~í^»ôÖF'2öº¶Kù¥>?ϯÒó-2Ü:ì ³!—(©=äÄŽÝr»¸ãóÝŠætåÆ`0Ï>ûÌÜ×—ÐðÝætk»ÔLK¢2 Š(û�`1Ë-?'›òënÞ Lâ¶ÓA«¿ò ËïQ7ÆG£-ý4!¦ÕDz›&.Ü<¦KIþþòcŽ «ØUk²õÕ—ò¿›}´óÙ×õß>>—ááÛÅG½ž¶þ8ÈAI­±#QÚMÊOvÙìºþaÿYÚ¥j<�n®«•ïòdÕËNÙ/¿ýX^´ÕÍ:õ¾ý.G]ów¸/óÐó_Ȱû³Q2¡¡Î?‘8ºç®ã© t—« ëÕ®tŽ~—³£nzl×£ÿ9eÞ‰awçFÍ´¤ë¼©�`UQöÀb(?± ÂD†Ÿ|Bãò{Ôÿºv/щ‹½àq³j®`ŒìØ~œ)¼KèñSÎ3µúˆ^îÜîƒ˜Ö T[kþŸràÇ -fl˜†ëö¢èÁX÷š¦ÕÇè$‘ÝÚ¶ÚÆ‡t=fÛæu×Í%óŶÉ î—nqá¶ïóìlrO¬™Óå×dqa"ÃO>¡1“iu£çÏ't6í`¸¦«Ñx^û¾½æ—Í»JÖ’®ó¦€UEÙ�‹ ƒ…›œ°žŠ®åML—òçnbÇ[Ñ]E¶õShìÛcþWz½^?0ìü‰Œ‹Ì£sÃ`8H„“ƒÃµÉ$ \²Á<)Gý5èȶ šÝSl& îu7¿v©™º_úxrÛÏ ˆ¹x"cÓ¥2ç!Lèèó=Öì9š=ï"(åJšëÀ-CÙ�Àú*j‘ñí·ßšA@çûŽw¾y$í*(}(Û³;Ê¡éf¡[>üªâß=µlÁ€¡ŠmÁpYÂàû””ÂÀwJPl’/ú¸Çjß÷.i!á^®ÂìKAP~E‰ŒëRÔ"㫯¾2¯_ªÄyȾwÉ9[�5Ó’®ó¦€UEÙ�Àú >áÍýï[(<ý«¼ØÛ—Þi˜Æ8–¤õ,ÛBÃÌozÛc£ +An°Ï©²k‘Qkå¶«M Šmò¥})_n=tË´¼0ÜëáúÄÄ-MdÌÀðHd¬¯ë¼©�`UQöÀ-“ ¶®B8cM­ûˆÍ›ä]ü„àhnj[½NS7±­+ ÿôOÿ”I`xóÇ».jþɄı$Ñ]‰âWî 9úé8-i¤O#9—“äÔÒî&z7z-Ë"ìÎqv$‰¨¶þHzoô8á½¥ö§ý\£¢®%Ž[_ø´ÛÄÕ`^QËw^ɉI¶øõ»ÇÅúÄÆÔý*èÚÎì'ÃwòÖ *z¹ë¬wéÄE醓ÿ#ß]Ä—$J'Çòöí‰ü>cÞEP3-é:o*�XU”}�€Yl€£»œÚ�0ø%öZéÁ›/U�éF\^{rÁw³˜g[z Ì'Ò¼²„ÑÕ›ÿ;¾hÐOïX^vä(xHúÔ7‡}êEð¾ž&žrrš>éC?Mäuòµl¦‡úć[Ö¬ ‡þº«Étqk²tÀœ”4ÿô“ñÓ3r¯7Z’¨ûÙš¶_¹íïDzoÄÔ“Nþîó&p.§—_9®«=¶†ìÇM±xª©Þ”x|lâæ@Zz@Vw¾fÍ»È畚iIúd@ÕPö�¦s¿Ìš_§ÝK7ÂuKH¡Ü/ã×jΦñæ©*ˆ½‰Œ+bž(¢Ÿn’m)q-ô8{Ý…õ_ê]—ã •ÄM Š(û�`M¥ÍàU0ýÝyøXÿb­O$ŽîÙ¾î¦ß»ûu4ܯîé úµ°9¾´„pS=>ŸÌ“+Eú=ýËôÊÙ )þµ>íòTzþwý(ÍáOiþZÔ•#ÿhMcü ¹Ý®nâÆQPë9H=/>tü+ü˜m ïÖgãc³¿ô-j÷$ÚQë2ó²Ç¶áá™ìÁ:Ãn Ëê‚“£÷寥÷•:ÍgêZÏ×å¢Ýå‹Ùƒ’®¨¥\“5Ã*‰› @QöÀ:²-%êf<lue¯­ò´‰¸´oøRšþ—qÓ‚À?fS'î¹`{V·‚ 1O¥p-2Æ ýÄŠf;Ø£ ðG'Òk©`ÞŒŸp:î¦Q‹¤}8” ?0dôD‡ÝvÇ Žå[E¸¿]’"ÓŸß×¶Ý~:Àd~àH7.BØ-FŸ«í¶ôÏ.ì~øu»fóvÛ¶%ˆ7bô^’ÝÍqßÿÌX$®åŠÙîG7f„îŽv{¸yËûŽ×  %Ñc¨}˜ì²(×2§dwŽUB½ërœ¡’¸©�Te�¬#8OŒU äž>`øƒn ¡[1dúħɀ3›ÈH·›& ž‘1×%Ä<6³6ÞNѾSþï ‰im‘Në4ÛÖ-U\fЕ½tïºýÕòÛörç"“ÈÈ™z\7+{N˜VeÂlœ¡’¸©�Te�¬©°+C8xáDíŸ*1nEa癄gä:~/xÔb˜ÈpI›¬È'ô0êW˜ÈøÅîß\ºGvšV,úßm‹‰‰„D~ÛÙÖ3ú‰'ÉS×eù‰ `Q3-‰Ê<€*¢ì€õ6JW'4|€KØ®Ác05—l˜|ÔfÞe‰ ×"#ìÊ‘ ð¯;‘á[du‹™dº¤è}ýðÓx H×Jd|.Âm¹ñ:Méô~’ÁÔ¶{OTÛ’f§'ƒÁ‹)Çà2ÔLK¢2 Š(û�`é×n€N7Æ…K&LŽáÇÅÐËéy»Òé«`}[}¸±-ô[§?J»›<1Ÿ¨Èw-Q¯˜D‰ÜÒE‘Îﺖø¹®%™}Í'N†ïäíð$ÛE%ì¾âŽq£ñµôÌÀ’zŸJ·h| ³ý;²ÝŠôãj¸q<üºõÅýH¢ºÛŽïž3‘ÈøY†oÿM’GjÍqúñ8Hd�‹ fZ•y�UDÙ�ëH'2Ú¿ÐOQ· ÂG®¥… Â7êÒhèýß~rvþ)O˜pÉ„t¹ºÜîÇ£H[i¨Àýð‰ÝýzÚÍ%·|´/qTw×%zþ<Ø×|Ðï“zPÇl’À­§¾Ë~f¹Ó‰'‹4»‡S‚,hA¢åºéÄ͆;ÿ>A¥=–W/Ô¿Ý^ÒMõ¹?‘SÓ"C-¯ÿ~Õ‘/Í ¦ù'²�¸ 5Ó’tÁ�UCÙ��€UAÍ´$*ó�ªˆ²���«‚šiITæTe���V5Ó’¨Ì¨"Ê>���¬ j¦%Q™PEË,û²ð³FÃ×ÒŽ6Í~G ŸE?ßÿ•ÄÑÝì³ü¯Tî±���¸Då%‘È�PE+Uö™ÇâÕÍcîìãï6/ON¤#ôûgù��`]•—D"@­TÙwÚ“fmçî›åHd���¬;¢ò’Hd�¨¢¥•}£¡ô“X¢ÍXú¾›‰nYᦺ}=4J×?çß<·(æéü¦U†Odè®&‰45·®-iõNÔ«Áëµ]ùîé#y¬&gG’˜unJôÝyø¸/¹Íªíö%‰#ÙŒõ{SÖ“1m���0 QyIº² �U³¬²/M\„ ‹a"ÑÆ”£÷’ìÞ‘F|(gòAúñöxÙL"ãWé5ïH­Ù“S³Ì¦llud0Ò¯oK³÷«šçTŽ:-i÷Oå´×’ºžW'Žº²×Î'2Üøj_ë&‘Q´žüþNÛ÷6��� •—D"@-¯ì»a²7w"c4èÈVn`ÐT&‘ ·¡“ w¥Ñ|&ýt�Ñ‘IdÔMéö]ëŽBÇ’Dõ ‘‘_Ï,Ç ��€BDå%‘È�PEë’È(zÂIj"‘¡»vü(I§) u|vawš4š‰ ÎFA×5_£%ÉàÔ­#&2¦¬gBÑ>¸·���Pˆ¨¼$�ªh½ZdÜ—Îà£{%Idè•E§÷“ &ZCœË°ÿÌ$"lbÂJÇß(L8„‰ ¯x=Öeû���€"Då%‘È�PEË+û>Ê s_6j-éÚ 6YqÇ?‘cÍZ“ZÔ•#ÓBw ù^^ê&R3m™¤†û÷èDz-Ÿœ8–d÷tŽt‹ ;ÆF­ùJŽ’/%꼓3Ý‚¢ß–F°?)¿m3–FÑzôë©ûàÞ��@!¢ò’Hd�¨¢e•}™§”¨ ÿÍ›ÜSK¢D†n^o4|-íhÓͳi&ià—Ó­9Nlkõw-z,¯:_¨ëy_JçÑcyÑŽÜ{Oäpø‡ “¶Ä/ÚÕÔòá“PRãÁ>õTŸËó‰õäÇÊp-2&öA'L���0 QyIº‚ �UCÙ��€UAÍ´$*ó�ªˆ²���«‚šiITæTe���V5Ó’¨Ì¨"Ê>���¬ j¦%Q™PE”}€ý0]>�pÝø¶)‰/h�UDÙð9˜ç�pø¶)‰/h�UDÙð9˜ç�pø¶)‰/h�U´œ²ïB†ÉžÙöÄT‹$~ñ£ ÎFÅóÝ$ªû¿ïKgðÑ®2ãWé5ï¸yö$^¸×óŽ%‰ên>=Õ%JŽ Þ _×FrÚkImbû“û[ûêÕ¼S$-i˜y6%ŠÃ$–vÿlòýÚ®tŽNÝëÖhØ——¦4ê±ô§JÑתXþšú{!ïüE¾ùæ/ÁßÁ”¹§×—>–ÛáLúqC6¢D†î�Àê */éö|AÀü–Yö]ôc©‡‰†³ôt€®ö©uåÈ~£AG¶6j²Õ9ûŠOTÔ¤ª°$kt’ÈnM-é^<~PAͶZ×iö~u¯9£#élÝ‘Ýä½Û®7ÞþxŸÆìþ¬ÏpI4Aq.Ãþ3i6¶$6‰Œs9IH­ñµô†å¬ß–Fí$'çféL�M"ãÊ\ö9°×´á®‘÷Qû™ûlÞ{º˜¾÷g$Þ–«šõ¤‘ú >‘f&‘ �¸NDå%‘È�PE+•È0\ & †‰D™VúÕmi4î$+tpÙ÷æ ôO{Ò¬$%t"c¯+ƒ|ì©æoµžÉ ÌØêL¾oö7ôzî×àÌr:¹Ñ¶-2Lò¤>Þ—ü߆k%@"ãÊ\ú9(¼¦“×aî{z‚˜ÛÒ˜Ù‚h¹V­žôÙgŸI’$ò矺W®ÁÙ¡ÄÍ\‹,�Àu"*/‰D€*Z½D†b ã`¿0‘É£N,[›Ù:ðØ}*½e}×¢і~ú‹¹,ËîD੃Җ´z·-+Šº·ÌLdøn)ºKÉ«ÉîË5ƒ¿,‘v]©I£ùLúCÝ¢CÓà•ÄÑiD;ö}š××›ÈP2÷ôøúÔ¢¶<}øôÞu%Òï›k¦ïõÿ)ƒƒ¶z­!Q¤®¿»ÿGÃCé6·ì|µHÚ‡C ä@}j‘ºïýu×÷òð'Iܼ¾5ˆî–”¨y7›Oåyî½Ë\zŽn˜=W¥é90ݾügâ®ìÄ]iG›jê³Ùy'ggï¤cþv×…Ï �Ü¢ò’Ví �nÂ2˾©AŸï>á[[LIdÄý_l"mÝ “û²—ü,'¥Z,ø_ÃÃî :¹±7™¤Ð-$¶ÚýšÖ’cf"C å°­Oéñ’¾ Ý ì9 “#E-8f%2®)çjSÒjÔ¤¶›ÈÉy_b3¾Hq—œ*»ôs`®© hóÓ<‰Œðž>>fÝÝÛ:XÞ{b–—µÿÖëßV÷Ñ»ŠÑ{Ivï¸kçºDÕJç»ûv?\bãÂu­ªEOäÐwO2÷£û¼èy}×¥#@™ï~ÐË­’ôü»i¾„†û<©ùÍø5þ3á:d» ™÷ò�p݈ÊKÒ_b�P5>¸Žé2ŸžÈ8Í& Ò$ÃùŒ@ Ó…Ãü:a “ÛaòÀÒc%l7{b‡ßt-92Iå²D†á ¶¿øÚ ó¼àœ”LdLtEÉ Lj’/ë˜åﱫœf*¼¦%Zdäµ-ivÓ––]Ö_·ñºì8Eëv÷¡o1àîåt Ù̾ÛýBëî¯9>+Eçl'И-wrŸ‰Ìu ‘�7ލ¼$ýå�U³Ì²ojЗi†¯þžšÈPYš€x!G‡%2¿,_Öõ¢ˆ¸Ñü¨]x(ÛÝJü<ùà)×½d®D†w.ÃÃ'ã_Å'–uæ¼]KLà•m%bϳ['Y¡K?ŸšÈÈÜÓaן-i&Gê*O.{Ùßcù{$¨ÏLdÌÿY¹ôݰìgÐN_}õ• 7Ç4¹sûLdÎ3Ÿ�¸qDå%é/@�¨še–}Å™1ûbV"#ýåúŽ4‘K(,’ÈPL°Y“­§•{û¶5HH'Mòƒúe¤ǴDÆÙ¡´ã9Jâlâ#üE=ߢb¢……6ãø|b'm5B`6K?Ÿ”È(¸§µÑPú]ýD»Þü²ù¿m‹Œ‚1Y>)‘á’sùVEV­ž¤÷ÇOó%0<�°ÊˆÊKZµ/h�¸ Ë,û&‚¾ðQ•¾‹‡b¸0Y ÿíñxî×îqð>ùXÌù¸„‚Þ~°N娳WÐJÃ-ãÆ¤Ðìþæ¿zv$Ióž ˆ~1Á¯äñ` · »˜$ÒløÇ¼ú1.ôÀ£eØû:÷øUÍ_a¢ÆÍ[ÒêÈht"½ÖÖøx̹"0Ë»ìs`¯i>‘1yŸÍuOÙõlš§bÜ5÷Jºìɱ¼}{"¿çº–¤IªtpNÄû^^ÿËÞƒ>áæózö~´A¼¿_í*Ež´jõ$½?åN>Ù—ùLäºb¥‰ŒŸeøö]¦+�àz•—´j_Ð�p–Sö¹_²Õ¶'¦FS:/ýà—óÝ$rƒóù'9Ø€²©‚L=(¢ ÔÒe‚@ðREƒ~jîïÌ6µüþÝ‘(ú‡àïü¤ƒ£3¾ü^ŽÞŒŸ>¡»„ã%„ƒ6Z’˜„‡ Ž/\Þ<µ$±OG1A™_® ÅH…ésR,ýõÏßg‘o¾ùKðw0eîieøWy>!£ýÚ¼—Ì=‘×É×bûTS° _»åô{úéÿ&½ð~ˆö%N÷Kíëóç¹kþ“ÙïÚN$;æ))ãí_F¯c•”N`ÙÏO}?–ýàüìÇÍñy7I¥÷&˜>!Æ­�p}ˆÊKZµ/h�¸ ”}@•>ù®%ó£¬��ܾmJâ @QöúŒ¡2/Ê �ÀMàÛ¦$¾ TÑ­/û2Ý)&§E~™Æí£ï…Û/Û¦ì½_s�X6¾mJâ @QöösÀtù„Iœ�¸Z”ª%ñE Š(û�`q”¡�pµ(UKâ‹@QöÀâ(CàjQª–Ä€*¢ì€ÅQ†ÀÕ¢T-‰/"�U´eßHÎ=é4ïI”›W.ú±Ô7ö$.s(Î3éÇ ÙˆºW>Ýu¬³ˆ>§¯$Žî¦çÔ|Zÿ]§_Ék ÜÔàjQª–Ä€*Z‰²Ï=rcc± Ò§µ\Ó9=;”¸ùrþd ×·õG�¸Z”ª%ñE ŠV¦ìû„Ö˜â´'ÍÚuœÓÒ·Ë·*áãªný± Õ×FÃ×ÒŽ6ÍyÜh<fô¿Þ@‹5ål q$µ›Ø€RˆÊK"‘ Š–ZöIÒÜ2ûPÛ‰dÇÝ£¡ô“X¢ÍXúº'CZá|*½¤% SámKøÓxù¨+Gg#³ÚLŸ¶+£Óñ:vbyÑVÿÍ,s*·ÞZÔ–§Ÿšíކ}IÔ2›q_l‡ ]qO¤ÙÐ- ô>4¥ÛªWÇú¸ë¶½)Q眙åÆ&Ö™ž5ÿwOäác¿-íB†ÉžÝV]Ÿ ×-Eÿm*ßj¿ÚÕv$~¡ÿ¯Y<LœË°Ÿ¨}¼'q_íU™sš¹§rÔÙ5çÏì‡énò‡ ŸØí‡ËiÓ®1pKè{»’®¢Õ—i©U—­Î‘\ ¤ÕPåàBëRepÿ‰4ç^6_–X%Då%Uö‹@¥-¯ì³¿êÛ ÷£ {_«`ÚVˆíx ª‚i‚÷2èÜ·ÎZ$íá\œ$²«‚æZôD‡U¶­–m¸�ýPâÆ¶´z'ªjëZ¨à¾ùåÿæÖaýÑ #[w¤ÙûÕ¶\¨·¤wª‚ï³wÒÙ{’IÔ]Òad¶»e×=:‘^Kèµ’¼í*ô>ˆÿÃîsÍ­3•_çHmº%õfOÔ©˜¿+{í0‘¡¹ã7çBÿý«ôšwLåûØŸ'Ÿ4qÝ7jf}J˜ÈHƒ}ž~-uN³×C¯8çCjÞÆ×Òž»óï÷aú5n ý9ª¬a"ѧ|¦M«1Wv Sî”M‚ŒËRÀj!*/©Ò_D�*kieŸ©ÀÞ—Îà£ý;ÓzÀµD(ÞM…Óì>Á`+Ó¹ ;3é÷~É®#ÜžÙ—-iveæäX’¨î¶ã [øyÌr5ókâÈü{\¡Ÿ>8f¸N›È¨¥-;ŠäÏE6‰`–O·¾§ Ï©œ§2çtö>Œ“3™IÏûÛ¬k Üú~_;SZ‚¶fÓFC9t-Ù2­ÍÂDFš,U“.f¶6Ó³çÊjUf‡-Ö|K·;Òˆvl«±è_dà[Å©ýûîé#yÜû7éø}6ó¸2Í›¶ïùòR·Z›hYv‘¶¶‹:?¸ã©I#~#ôu^¸N�W¨¼$]h@Õ,«ì›ôg&2òÎ0 ¤A÷»\aaV?îZ²±±%ÍäÈUJÃí¸åÃD†«¸›÷sAú|‰ %èz±ÑhI2pCjö¹ÈngÖ1*™äļçTÏ;kìrãõŒÍ¾ÆÀí°~õÇ)-Á [³éVe¿©ß“Fë@†#×Ë·fK?˰ÿLšÑ¾m™5mvÆŠÊ$u>Çeª.“uâàP½«éì¶Ý¶ZóQ§%m½ìÔ²EÇ”}Ï”cî½|˲/ÿY™AŠ}kµ39IHM'/Ú¯Õ:ÝyJËF�W¨¼¤õû"€O·¬²/ÓµCËTDMdøÁzS¹uU|õXݦªèúŠu¸×"#ì.®#·¾¹Îhx(]И¨¯z"Ãý{¢Íe׸Ö5‘‘o fËÛa<©2àMO}nó¯»dƒ)'j¦ÅÄV86ΔmLÈ”3Z®ʵt³‰Œ»Òh>“¾I˜8ÓÊóú”}/*Çró™2Ï´,¯Û–kÓÊF�W¨¼$]`@Õ,­ìó¿x¹_¹ìø ºò¨+Œƒ\ÒÀuƒð­!rÝ 2³[ï†ÿeÍT¨ŸJwpœíJv Q•é]_ 7ËßµëÊ9aÇÈP•vóëÞ¹Ýg¿™ ·«ÄoÝ*¼Ì:u%øK×,Ùý"8‘×õGf°Ñz|(¿™÷|"#wž\aŽQ¯)“X(qN'’8ã�àdøò%ûêÚùó¢ÞÖën?—Áé¬kL2·ÃZÖ'Z‚ýfò¢ä«)G¦|f]sW•™5=^ÐI\¸´µ™rY"c"A¡ÊÉ´ TeN3‘.·§%2fí{&‘a·›~?„òëÎìóú&2Ìuarg«†+S73€*Z^Ù—«î?’fÝŽSq|ü2XoJ¼üRíK¬+œæoU¹|þ<øÅMW.O3Á¾é*Ò=äÑxõýXöÓeÔ:¾‰åQø´Ód8û ­XgûP§•ó̯~ Ù›Á/›a`_ç9NÚÁGìÀ›&Ò¦ûöƒ:–{ʼn¼I¾ž~žîG…çeʯªfºäœfŽÇTØ]'=Wa×5ežæR|³c‘�ëKßóë*l öæÍ”Öl®|KùDÁ‹%ÙÝtãJd?ÜÓ[›)¥ž~ Ó3S¶˜y§Í7kß3‰ ÷ï‚–e·9‘QuœƒÕÅ•)‰›@QöÀâÖ¯ ÒìäÿžÒší¿T¿­ŽÓ=±I¯âôGiwmk6ßâ!m±fƳ˜§µ™ÚB¾ûY®\¶¥›v,Éî7©{*’ž7M6ü,÷ï‚D©âhß}+ Ó*ÍícQ˲߃Ö{êÕl×’‚.‡kbú}ë’3êýtJ[ªäÞ3¯‡‰ìM‰âä0‰íØ%WB'ÄÝ€« ­O£aõ„ ¶ê¢fZÒjÞÌ�p½(û�`qëW†ê`´¨%XØ‚J¥Aë©°›ˆéÒñLúÇãÇNO´úªïKò|vk³‰19¢Ž$a‹µLË9Ÿ88–äÑcyážBb»­«X×?» U[Ѿõ�¦Á¶L ‚–eoy”îC]éûù÷7öäy²Ÿk­æ¶¹ô>Oç;E­Ylò¦¶›ÈÉÈu}LŸpã[Êl­l>‘kUs]gŸƒu ¯Ói^ñyYÔLKZÿ›�Ê£ì€ÅQ†bU½~ýZƒû+ëòû67ŽRJ'2ºñŸ\ëÌ<:¹Ñ¾ÂJÐòç*]çg7IùóÏ?Ý_×ÄŒéµyåçePª–Ä€*¢ì€ÅQ†bUé`Zߟ_}õÕDBãòûÖ4½-úÑæ)<ïv]âÂÏ£»”¼²¯fŒ[¹Ô¢¶<}øÔ¶Z åеª1ÝQL$-;U:æJ˜ÈH[h¨é»_\çgW¯û³Ï>+Ð û’Ä‘lšVBãn5;á8^ú|¥cgùsñ/êO™×­{Pª–t73�¬*Ê>�Xe(V•Odø)LhÌußú§‹¥ÝKtââ¡l»ñBŒ0)Q‹$Núã1Jô'u7~ˆ¼÷žHÿB[rÏEâ»°èqRþnÿíÇh ·&2~¶]W¢}7ŽË§¹ÎÏnxÞçOhŒbk×a“:dÇd ¢½lÞ5C©Z’¾ð�P5”}�°8ÊP¬ª|"ÃO:¡¡ÿ{9?˜©´®în²7ùXñ´å€m!Ž]bkÍ=©*lQLõ¸'o‚qKÒI=r¬5iD;²UðdœEéõ_—‰ãP“NhüíossL“{rOnÀ[;¶Œ{Z˜ÈÐfÍ»f(UKÒ7�T e�,. TV}ÂÍ(:÷«4}þùçæ¿ó°OiqOmÑòv~ÌŒïâŸ^ º%ÍäHΦŽwáž"SÔ]Ä,S“»»RK“*Ÿ.^nbúöÛoÝÖ§É%2rÉŠ™‰ŒYó®J«’ôÍ�UCÙ�‹£ ŪʷÈÐ =�¨6ÿ}ëý|"/ZÒòÊ5ôpâ\ 7˜ ¥ßmJ#xºÍäÓP\·Š¢®>ùñâGIv7Çcg|¢ëüì†ç]·ÄÐ Œß~ûͽ; ‰ Rµ¤ë¼™`UQöÀâ(C±ª|"#L`xóß·~@O”O$t"cOô@ž–Ð]Lô#|ïÈnò^FÃDv}ÒÁŒyqWš½ÿWúñ¶Úþ–´z'v¬Ó¥ÝýINÍx57~†~ãW鵟ËàdÜŠc¤þ½›¶øø4×ùÙÕë^d°OIg+—$Ó]Ä_‹û6y”&.~–áÛw2ü}Ƽk†Rµ$¾ˆ�Te�,n=ËP÷ë÷'>õAE­rG*ýÄõÌåT½Ž ’¬å/ÌË “ù†Wê¾ôÓ»áËïåàèt›[f¦ ‰cøWy>A£ýÚ¾~v$I:MÍgÒ7ƒw†]QÔÔhJ÷M"Ò15Æ-:ÌßzüŒO¸ô:®Ké†1ìSOõýXöƒcß›Rwïmè–'ï¥×Rç±Iûuö<MÌ»fŸj¦%é �UCÙ�‹«\ªƒÚæK†A× $2ìX óeúIO¤é›Û£ßýœƒUÆ•)‰›@QöÀâªU†êGgn‰‹‚ñ®Ñ\}þMëÍtœ�㻟s°Ê¸2%q3¨"Ê>�XÜ:–¡£a_’8’M3  tæ]Ù »tÞåÆ 8•£Î®+ÁL:¡ º‹ÊS9pï…1ކ¯ÝúÔüµ]éå:&˜Ä„[ŸI†Œ[yØÁý˜ 5õÚ¦ìD÷Ô6\"#ß=A«púN:~{~EóÙÝ«4}>ªŽs°º¸2%q3¨"Ê>�XÜú•¡¹d0Ðþ6 ñ‡ :÷‹Ÿá—M[`¸¿]’Âvÿ¸#Mýd Ó2bÛ èèZrL¬ó\†½¯¥¶²Ðû³Ý–~:@ä›TØñ�̼çv C³¾r’<(�1ð°h¾ŠÓ×›‰úϪâÊ”ÄÍ  Š(û�`qëY†æñ˜y2¬.Sþï ‰im‘N ‰û¹gM˜§4ÜS¯°º²×9’‘OBludàrS÷Ë<žÓ­;“ÈÈ ç°²¨™–De@QöÀâÖ³ Í%2rÁÿ§'2~1åœïi M ûD ýÅD~[ûu6^òÔu=™‘È(šÀÊ¢fZ•y�UDÙ�‹#‘1«E†ëfr Ó%Ewÿøð“töº®†Mp„ÝQÆûu.gG]‰j[Òìôd0x1¥EÆhú|�V5Ó’¨Ì¨"Ê>�XÜZ–¡¦;G͵‚P2]K\—ŽÂ±$Ɖ‹“á;y;<É>µÄ¬§&[ºkˆߢ&¯¥7<Woêõ>•nÑøfîÈNt_¶M·ó¢œõÛÒж_Ëð‘¡»¨üƒD‘Ú®évâÇÙÈ'2~–áÛ“ä‘Úߢù�¬,j¦%Q™PE”}�°¸õ+C]2Â$6¤¾˾ìSw»Ø›2Û"ß*Ã'trá›$˜²ž¸<qD¿¶%Íîá”'†L¶¾°Ne´ÔöôòÛjß¾z£)Ýþ‰œš–êõZ$íWùRýÛ VzzlúõÃó¹'«�X=ÔLKÒ…,�T e�,Ž2�®¥jI|¨"Ê>�Xe(�\-JÕ’ø"PE”}�°8ÊP�¸Z”ª%ñE Š(û�`q”¡�pµ(UKâ‹@QöÀâ(CàjQª–Ä€*¢ì€ÅQ†ÀÕ¢T-‰/"�UDÙ�‹£ €«E©Z_D�ªˆ²�G �W‹Rµ$¾ˆ�Te�,Ž2�®¥jI|¨"Ê>�Xe(�\-JÕ’ø"PE”}�°8ÊP�¸Z”ª%ñE Š(û�`q”¡�pµ(UKâ‹@QöÀâ(CC#9ô¤Ó¼'Qrì^»jz¯$Žî^ã6�,¥jI|¨"Ê>�Xeh`t$­š:'õëK2\ô%®o\ï6�,¥jI|¨"Ê>�XehŽI4\s’á´'͉ à¶¢T-‰/"�UDÙ�‹[ë2ôl q$µÆŽD Ý’bO’á2<|"QM·zØZÔ•£³‘š÷H’æ–ymc£&Ö ÕËv=ã÷j;‘ì¤I†S$-i˜õ´åéçҿ°‹¨…¤7ÜúÜüik‹†ÄýSµ{‰4Í~é×¶¤Õ;³É4Yò‹ “=û~=VëÖ%2ÔóކrØVÇhÖ±)QçÚ²’î³zí»'òðq_Ò]°TÔLKÒ…�T e�,n}ËÐ èo´¥¯“zü‰~[¯¥7<W³JܨI­y ǽ–Ôj-é~”“äÔ6îKgðQ-óA­gÛ%<>ʰ÷µ4|bB·œ¨ëet"ätöž‰ et"½ÖÖ8é \¨íoLJjï~•^óŽÚvONGï%ÙÝ”­Ž ônfZ}|”Aç¾Kdè5Øåì:õ¾ÝsIwlw¤Ùû»Úµ–Ôõºõ1ue¯M"XÔLK¢2 Š(û�`që]††A¿¶’¦4Ià ‰L«‰3×ÍÃ'5”0É`ÞÛ’f÷pÜz#g4èÈVšHÑI‰‡ãu¥.lË ¿™DFî= ú˜ÒÙ©Êo:1ÓhJ·?´­<�¬ j¦%é‚ �ª†²�·Þehô›¿%‰ê™gé%O]w›È¸èÇR7]R\¦#“dw-Ñ]CšÉ‘ÚbŽ ô®4{¿Úïum« C?¡äGI:M»Ž²‰ “pñóå„]e-I§îj0ÇÍäÎV W¦$nf�UDÙ�‹[ï24ŸÈp›.$a;Ûý"Ò­+:= ^¤-2L‹ Ó]ãW;k&ÉàŒ†Òïêd„kÅ‘a»†è.$]Ùë¹§rÔÙ5­&:½Ÿdð -2L÷ýVÑðPº:¡‘._ |÷sVW¦$nf�UDÙ�‹[ï24ßµÄ#æ©æi'G 7FŹÃ%%ü8Ñ9ž¹÷ô¯Ýu‰¾ùGÙM Õó¹–9&R»'ÑÎn®‹JM¶tbåᓠ¦¥…{OýOwaÇìø#3@h=~%oâmõï` ÐÓ¥Ý}''É—nàOwÌÉ›Ûmú}ëCæº)½?rï™×ÃV7›Å?ÈaK{"aut žtšê^)jeS’>†Õ“O.V5Ó’Vóf€ëEÙ�‹[ß2ÔL&�ÕA¿ì2 LÕdÆ‘8‘SÓ"Cý]‹¤ýª#_ªÛ>/‚äAMû¤YwãbœüUÅ]iG›ê=ä¶_•aº—èAEÖ®E†Ú‡ZôX^u¾Pÿ¶Oi¦ã^ødÊ;é¤ÛøA’G*Ðé›KsO[i>S¯ÿ¡ò¶Ä/Úãc:¬ÖXú|LçZE­Y\ šÝDNF.‰TەΑžë\†ýgê^Ø*hysÜ}’>åæÍ>ë@_'õy¸‚s±j¨™–´þ73�”GÙ�‹£ Ū f*rù}ëZëø'ŤÂY]2,3Nn´¯©E†RÔuiA×ùÙ}ýúµû×52­œ6¯ä\¬JÕ’ø"PE”}�°8ÊP¬ª$IÌýùÕW_M$4.¿o}—m‰ûÜkŠžwý€¬~Ý¥ä• Ì“gg9ˆ#©5v$2-vö$99–özMmß´ 1Ý{ô¼¹–3iצì{µHvj«ŸÈÐëþüóÏK'4Fþ$êœmšRº+Í+‰£»²¶lÒç,m…¤Ï—š¢Q×xʼnÝë„Rµ¤ë¼™`UQöÀâ(C±ª|"ÃOaBc®ûÖ’v/щ‹‡²ȪŒ†ãÄD-’8é»DÐu)}¼îõÚ=—¤ðÝWô@±w]Tô8%å$y Öçé«—Ùvݘ>º1XÖ#‘á§ùãsfºz¹Ájõßöøÿ0ÝzÒÁxÃÖ)—Í»f(UKÒ�ª†²�GŠU•OdøI'4ô/gÇÃØ¨=ää\ý­»›ìdMù–¶…€øÕÏ &Ûá4ŸÅ1ƒ¹ºñON{Ò¬ù¤†²&]KòǨ§ùöÈé91Ç?>ÞÌãŽóçbÖ¼k†Rµ$}ƒ@ÕPöÀâÂ@e]&\¢s½ŠÓgŸ}fþ;ûx]÷„(oçÇÌËðð‰Dµš4âC9ó- |"Ã$(f$!ÎÒKžºcm"c"¿âDÆMOß~û­üùçŸnŠä¹ã™È˜5ïš¡”*Iß\�P5”}�°8ÊP¬ª|‹ ÀЯé@zþûÖúùD^´¤•y|®~kœk¡¶ÂÈ%2L ]ô$”‘œ™§âlI³Ó“ÁàEÚ"Ã&Rt÷·Ý+Nd\—ð¼ëI'0~ûí7÷î,$24JÕ’®óf€UEÙ�‹£ Ūò‰Œ0áÍßú=U@>1Þ‚NdìI-jËÁ@§&tý(Þ;²›¼W庖¸ñ.66¶¤Õ;Qï+§?J»ûïr˜>ýä܃á­ëÆé0ÝUÎÜ{:9ðéÉŒëüìêuëiþ†“q¦»ˆ¿®«Mš¸øY†oßÉð÷ó®JÕ’®óf€UEÙ�‹» eèhøÚ=å@_¯¥gÆ7¸I§28hKT»‰_Õ¶zl?XË_ªËÐã1üío+ìÊPê¾ôÓ»áËïåàètÓ'ŽlI³{(ÃQ0اšÒù§“4ŸIøÑµÈP¯Õ"i¿êÈ—êßvÐÊ —ÑÝMÔüû¤Y÷Û0;±°Rç ¤Ò #wÎöcÙOÇiÈ~Ü”º{Ï>æ½ôZê\êsö:‘G³æ]³{šiIúB@ÕPöÀâÖ¾ 5¿�×ÍÃi56?ù—îùè_ç÷M€e›ÀßLÀe»*̳-ýT'Ò¼‘sqóøîç¬2®LIÜÌ�ªˆ²�·öe¨iºîšñßÿèMŸLðÍàoæ—ã¹Æ0­n*©sóøîç¬2®LIÜÌ�ªˆ²�·Îeè¸%„›ê¤÷“~ŒæiD;v,=¾A¦;@جßw Ù•Nï¹kþ¿-qÿ½ ’–]^¿wvHð;ºmº±쾨yžº.Ár£¡¶#;NÃÆ¦Dw’I»˜±üúl‚"=¶z,ý ?vƒÞ¿MÙ‰î“&ù®­ž¾“Žïj£'3ƃ:VLzZJœ«£¡ê8«‹+S73€*¢ì€Å­}j‰éZd¤ ÿøLeô^’Ý;6ÀObÜ4ƒ9^¤Ý46%j¿–á…žwÓöÙ?ÊÈ­ŽÈ·Š°»$EfÀCÝåžÛ¾oÉ<ÅÂMt‹Ñã ì©ãúàZWÜqë>±ã ˜mŸÛ– fËr’<(HÑ­Ï´\±Û$²[s$µï®¾û9«Œ+S73€*¢ì€ÅݪD†–yJ‚¸1%Â'øÇqê'L仄|”Aç¾k¡çÍ=J2PœÈðíÌ´¶O“ëÔÛÞ 0GÒÙëŽ÷Ñ쯙qbÛ©‰¤NÈȘ~\ë">«:a5qeJâfPE”}�°¸µ/Có‰Œ\�oƒþ0‘á’ .Y‘M ØÇq^i"Ãìß´„B–Iº¸G„Ž]Ù3-&‚u¹ù&gé%O]דY‰ ýÄ“D:®+Ê:'2€UFÍ´$*ó�ªˆ²�wÛ¶EFØ•#›¸öD†k‘1ùèϦKÊ]µ¯Ç2è<tÉ×JÄ%8´ñ¶ÎÝx[Òìôd0x1½EÆ™7ãŽ4šé Þ­}‹ `•Q3-‰Ê<€*¢ì€Å­{:‘¨Èu-±cdl¦ƒ[Ú±(t²@Ïï»–ø¹®%™±.²ÒdÂɱ¼}{"¿gº¨„ÝWôÛê<oI«wbǤ8ýQÚÝ¢ñ)ìök;‘ìlû®$~\ ?އ#Cw-ø‰"¿?þG>‘ñ³ ß¾“ãC½¿ö8í9(ûÀ§£fZ•y�UDÙ�‹[ç2Ô&‚1îG¥ãQŒ[iŒ†¯¥>ÅcKšÉ‘èw²ËGÇ‘û·š¢Ž$ºU…û;ôûd@-z"¯“¯Çë©7%ÞÏ-—²Hó™ô§<1d²‰>qd[öã/¤ÞhJ·"§þ *z€ÒWùRý»uåèôØ&<ÒKý“LtBä…t¾¼“}² €+CÍ´$]8@ÕPöÀâ(CàjQª–Ä€*¢ì€ÅQ†ÀÕ¢T-‰/"�UDÙ�‹£ €«E©Z_D�ªˆ²�G �W‹Rµ$¾ˆ�Te�,Ž2�®¥jI|¨"Ê>�Xe(�\-JÕ’ø"PE”}�°8ÊP�¸Z”ª%ñE Š(û�`q”¡�pµ(UKâ‹@QöÀâ(CàjQª–Ä€*¢ì€ÅQ†ÀÕ¢T-‰/"�UDÙ�‹£ €«E©Z_D�ªˆ²�G �W‹Rµ$¾ˆ�Te�,nõËБœ ^IÝ•(9v¯}ŠS´%ªíI2¼p¯Ms&ý¸!Q"C÷ŠÈ¹ Ÿ¨å7Ô¹«I£u Ñ{+t6^§) ¿ìE_âzýŠŽaQEÇàªQ3-‰Ê<€*¢ì€Å­|j�:ip5I€‹~,uuÌó$2&ÙÚ¸/Á© {_K£p=eйoÎ-I z¨™–De@QöÀâÖ¢ =íI³vU­.d˜ì-˜È©]iI­KÿÒEiý�T5Ó’¨Ì¨"Ê>�XÜJ•¡£¡ô»Mi¨}ÚØØ”¨ýÚvÛðÝ2:/¥mÚ÷:ïäÌ.¥{-móºZ®¶+£S÷ú¡t›[îõHÚ‡Cå㓉’Ѱ/IÉfÜWK¹Ä„™×NuózèTIËîížD;jŸL"ã\†ýDâèžÄ}½×¾{‹Ú×Þsi6jj}Ûê½÷ÁòáqŸ_ÇŽÄ/ôÃ÷twœÄ®W½öÝÓGòXm7{<fÍãùôºMéöõ9wçÙ‰»nÛÙs`:j¦%é�ª†²�·:e蹜$¤ÖhKÿìBÎúmÐ7làﺗԢ®ýa»mÔZÒ;‰œJÜØ–VïD…ߤoÛ÷~ÿE’Ý;ÒˆUðí^7-)‚DÆÉ±ô»-‰ ǹ'.Æ ·la‹ üë}vÉ„Ñð@Z:A i÷{<¶{ŠþÛ%k.Þ«}ÝTûí’-æ˜jv»SŽïÕÁ#—€q †Ñ‘t¶jRköäT~•^s[š½_Õ~ÊQ§%íþMÏè$‘ÝÚ–]÷èDz­-µî’¼íöwÊ905Ó’¨Ì¨"Ê>�XÜÊ”¡&WAyQ÷‘Ü@™¶E¾EE85äQ'–­Âî#>‘Ñ(ºwI+ƒcI¢úœ‰ <¸+[#±¡~®kÉ0‘È'fÔ¦‹JºnLt½ãí~œr|qÿ4·Žp{v_ÍgÒžë:áñ¸mnudàs¦ OÍC®;OxÎÌFÍ´$]°@ÕPöÀâV¦ Í%+2¦&2>Ž[Wäìé·OdÜ‘F£.µÝDN¦62(‘ȘØÿY‰Œüþå×ë·ûFާŸ–]G¸½°ËHMÍDgú Ããqó‡‰ ×rļ?#y´ ÆI¦i–‡³_7,€*¢ì€Å­LjZdÔƒ Aµý÷×blüt‘îÏ'2öäÅásÙ­Íû¡D"#ÓµC»ŠD†o‘1y|ÚôD†§ÇæxföÂãq-2Âî"áy^ƒD¦ãü,g¿$nX�UDÙ�‹[2ÔÖãA.åô_¥óRÒ™n¾[†KR¸ñ$6_KÏt£Ðï?•îÑ[›X0c<è@]¿þ½¼Ì´âøÃŽËaÚü ·˜5‘œ(þS~ü ;ÎÅ…#C_\81‰ŸÈC¾kI¸ÝiÇ7øÃ­Ã'tw’;®…ű$»Üy´ûeÖ•;;FFMfŒsû8Yl³Îù à»6ÎÏrqöKâ†PE”}�°¸•*CGC9lG*`¶MãM⃠äÝÀ“zlˆý¸)é˜&ðÏ=yccKšÝC3xgæinP̦eÁxù7oÆ[^h®…Cú^OÞ=åDÎŽ$ñOIi´$n6ì8ÇãÁ3'Ža#’8ŽÜ¿Õu$Él÷P>ßñaxM‰÷ƒ}‹þQ¾yôX^¸sY‹žÈáð·Üñèc=—ááûÄýºÚçdpêZc¸×&öw5Zeè}™Ê´~ñû«&ÓJÅ·Äñ¯«ë÷Í?fçK'u¯ÄÏ¥§ÏÅšÒDZE-ƒª‡šiIË»a`y(û�`q”¡XU¿ýö›üùçŸî¯¬Kï[×ú$›œR/gZÆ(¹.4ú)/ƒ^Ç&ŽÂÖA…ô“jžH3ŸÐZŸú¹Öçþú­îùûT”ª%ñE Š(û�`q”¡XUI’ÈgŸ}fþ›Oh\~ßæÇ7qrc•L&2,Ûíf#;jžéö3åI;Kö©Ÿk½ü·ß~{½ >ŸŠRµ$¾ˆ�Te�,Ž2«J'0ôý©'ÐøÛßþæÞ™ç¾ý´DF:æˆäï2HZÒPÛ¬Emyúð©ô?¼“NÚmIMÑ¿È`ðJâèŽ4¢3¯ex(]ßÝÈŸ2Ò­>Úé½ç®Û§å}ºßd4ìKG²Ù|*ÏÝzÆã¾Lwùù™-=.5•Ih¤ûkλîö¥ÏÉ]Ù‰»®›—\÷lÚù+˜×­{Pª–¤o�¨Ê>�Xe(VU˜ÈðÓçŸ.¯_¿žã¾µ‰Œüòvš'‘áÇÔ¸#Íÿ‡4ënT€ï=±ƒ²†ËšëuפÚà{ô^’Ý;îo7l=–ßt÷=¯ ÔÛ¯ex¡çS»Ot¸^ëñ_å•I¦¨yÍ`¯åì¨+‘ Õoc ½Ì§Èž/;]žÐ+cHé9ñÉ—?²ƒåž¿)ó®JÕ’ô…€ª¡ì€Åé2tÙÖSѵ¼Éi¶Om‘‘KdÔÆƒÈ¦òËfžô"n<Ž¢ÁQýS`ü{¹§Ödö=.YÎ[¬è|]ŤI³“¹ýÍ“Ìc|/9«öÈß2(ÕJÒ7�T e��·OQ‹Œ¯¾úJƒÁßýŸšÈ(îZbž“ÙÖùesÏ Ä³ï¹¤É\‰Œü¼Å.??³…ç\O¾%Ìårû;ëœ|Âù[uÔLKúÔ�Öe��·O˜Èð ïòïþOKdøÁ>k»‰œøV£¡ô»Miøå/ Äm‹ ùhþ-žÈp­7f Bª|jÝÈŸ÷ù‰ šiIŸzÃÀ:¢ì€["Ø\?Øâ8HZ<hrMý£D†î•òü#?¬eÐv]t"#ŸÀð.ýǯªëqrn’»~€M3~Å]»|ºìÏ2|ûN†¿g»Fø}Ω»”|//‡ç®k‰Or亖øåš=µ761`ÇÈ8—Ñð@Z;²›¼Wk›îSëFåNfß•LwߥÆ÷Ìó—›wÍP3-‰Ê<€*¢ì�”a“úçëøµw$gý'Ò,‘Œ±ÁõuíÏí4ó»ß´º°- Ìd’L~Ì ÿº ˜¿ùÇì|é´%ÍÎ_¥?<wëû«< Ÿ¤¡è4y‰éµ¶ì ¯yä«  _»åôëö)ÒûOO‘Äqäþ­¦¨#‰0SOõø¹<êRÛ‰dG?6Üþ zÙ›7ìÓìû~,ûÁ9Ù›Áq«{ýäýÔó71ïš}.¨™–¤/4�T e� œü`‹WÈüb¯‚͉ m›Ñ/Cu¾û§t‘¹u£åâì—Ä  Š(û�à68—a?‘8ºç~ÍÉÙ qMüwå»§ä±×ÀpMîÕw€ òL3uýë­kš~6ƒ8’ÚN,/Úê¿j¾qÿ\â@}Ämº¦ý~Ùè©ôü ¶ô‡?IÒÜ2Ûôë û’¨y7õ>èGs¦¿¾«É´PÇuøD"ókz¸ÁñmlÊŽ:îkI¬ÜRú\VB¾«Æœ*s~Vg¿$nX�UDÙ�·@šˆðÍòõS#¶ÝX§rÔiI;“ÈPòã ¤ýñ7q¯íJçètbl„0‘‘v51c¸ñ ̲‘´‡rá~ŒžÈáð£œõÛnÀÇÿJ·S<¸¡îf¢æuãØÖ.(5ÿ¾cºœù. $2æVïþq².sÍ¡çguqöKâ†PE”}�pKdž(¡w¥Ñ|6«`¬'$¸ÇgúA83ïeê¯ÜS#rËæ&™ýœµÙ1Ò©þH^µ¤<y‚®%åLœS¦‰ ËÃÙ/‰@QöÀ-‘I„]/jÒh&2pÝBÆæH",”ÈÈ?‰$·¹ö½ñz¼É'È�nj¦%Q™PE”}�pKdž;ã™Ih¤É‚Ôª'2Üzj-é†I×}%xDp{P3-‰Ê<€*¢ì€Û!;ŽÅ±$»Ìø"¤o x躀˜.§2ðsš$Ã/Ùî!füŒšluŽdä÷¥3ø¨ÞÌ'Âõª?s]K2û™Œ1Mdü,÷ÿ!ƒC=žFM­÷ÈLµîö÷Ò7¯»Gi^ø12ô¾“Ì�Ö5Ó’¨Ì¨"Ê>�¸LÀ÷ï׉ˆŸ$yô8xâˆh3?VÆHÎŽºö‰ z`Î׉<ÚŒ$NzjÙ†[׆Ô÷cÙO×]—ûÑ}1ƒ{ê©Ë›7º5„ÿ»)ñþxÙh_bÝ=Äü]—èùó`?³“Itø;Ý@¡# ,jj4¥ÛÏ¿¾-ûñRO߰Ψ™–¤ G�¨Ê>���¬ j¦%Q™PE”}���XÔLK¢2 Š(û���°*¨™–De@Qö��`UP3-‰Ê<€*¢ì��Àª fZ•y�UDÙ��€UAÍ´$*ó�(|?��¥IDATªˆ²���«‚šiITæTe���V5Ó’¨Ì¨"Ê>���¬ j¦%Q™PE”}���XÔLK¢2 Š(û���°*¨™–De@Qö��`UP3-‰Ê<€*¢ì��Àª fZ•y�UDÙ��€UAÍ´$*ó�ªˆ²���«‚šiITæTe`éÏSù �€«Ä7KI|¨"Ê>Àâ³Pç �pÕøf)‰/c�UDÙX|Êãœ�®ß,%ñe  ŠVªì;H¯Ó”F”Èнt-ÔvâHjײs>‘¨¦›ÝפÑ:áȽuS®õørnêšÝ€éŸ… &{æýtJ7÷ž~ýìH’æ–ý»I|ð¯’<üNúfÀ© zi6H2œxó ©í´Õ=¹wåÛÑÇXi}‰ëu‰’c÷B £¡¶ÕçÔÜ;[ÒLŽä̽5ó½©ÔuNZÒ0ËlJÿ ‡I,íþI?nØûÑLÁþ‰Š^÷Ÿkÿ^£)ÝþÈAæ>ö÷oÍ-¯ö³ûFŽÔ½Öîÿ$ITw¯ONõøç?SáTÕvާ®£Åò¢7˜<'£#ù®`þt2ëuó#9íµÔy¾/ÁG÷šVô™ÿGù&³? ‰û—_�å•—¤ %�¨šÕ)û>Ê sßV/ ŠGrÖ¢*÷ ªê›Vê¯!ø :²e*ŧ2ì}­« JÜ|©Žçz/릮Ù͘ýYÐûß6]­ÙS!\Èž‡Ún"'£_¥×¼£­®ÔbCéwU@8@ù{EDsÜ#éõ-ï¢K}Þí”4ûœ­‡?ÿüÓýëº}PŸÍ}w Ô=ÓÝ—öáP‡ÒrÔÙ ‚i}?}é’þ½m40k)æòÚ®tŽôÝy.Ãþ3i6¶\°=-`WTðßÙÚ¿®ïµFMÝÃm9På˜}Í%GÓûX˶KÔù„‚O˜ù�ß•¹{t’È^Ë~†ìg —½—do_z§:ìʳ´|QŸÃAO:&Q¸)QçÛ¶5te¯s$#“`Ò “¾¤›ÖëÝý2÷°ŸWtÞÒ˹W=»á{î˜j-·�®QyI·áË�ÊZ­²/_iÂT´U%vá ØU^¯<ÐwÁBAÐz½\P‘Ïu_‘›ºf×ïòÏ‚;¯[dbÜ<´   òA‘Z®°E†O2\–`È_ß²|K"£È`0Ï?ÿ\^¿~í^¹>6åè–>8I·ýã8Yf µlP>Á}3÷¦¾îºu„ õ§ßkºåÃîuŸ x Éɹ};å1çîX6e7yÜçZ˜°t­f•‡¦EȬ– SÊ“”ØT÷_˜˜És‰Œ"§=iµžÉ‹Âϵbö/lq3Ç1ødDå%‘È�PEË/û‚æÐµ{í¨Ê©¯´fšW»_ßÎÞI'ÒXýššô¼aSþLwÿ«¤mú\‹žÈ¡ª„+ÇOåÀüÚ©ßs¿ +£ákiûm¤¿pê_».õÚwOÉãLåÛ­Óìƒêñüä~¡Œ"ýž®ÿçx=z>Ód[ÿ*«WỄ<•ž?'¶ô‡?¥Çî§å±õÛÕŠ8Êߨø|5™k1>6L»fÁ92ËoI«w"£R×lyô¾Ìæ¹_Çu’f·ë‚ —ìÈüR ÏѦìD÷ÔúÆÁåäµ9.¸¾¿]ÔÔøZzæ¾6+°-@Ì{ê3Ó~mΫ½¦j}Om·§‚뾈ËÏÙêÓ‰ {n7J&4tù’H¬®¡ Ä}‹„‰_èÿúóü»œuíßf;Ù®(£á¡t›÷'ZŒÙ.³ƒroªk¿’A¦Œ°æJd¨À¾©ös²ÕQÈßã—µJ(úó-‹&>Y’.àÊ2÷òÇ$ uÂgÏ}ó‰ ý^+ߢé\NÔç¨Õû»[WAkÀR•—t¾Œ ¬å–}îWJT†ÒÒž©´ê í=àºù6îH³÷««¤úÊ¥«ÐšJõGU1}VHuæÝš :]si[±u•c¿]Ó|Ø­ÛÌ·mðô×I½î¿«Êû¶Ç$Zé/cÙJî8!0|í>¹�t"½– æÍ¯Ÿ*òÝ4T¬›œ_˜y}æ£;E¿^æ+û‹_¨�-ß-FŸóí¶ôÏÔÙ›zÍl€c‚ ÿ‹©ÿ•sÎk¶Ls}Ü}4ôô±<”í F˜ŒÐ}ùŸ¨ÒÌòwlÐ꯿?ÏS¯Íiöúš`Ó^O{?ù`Nfê\êä—¿Nî~±÷¢Kº_øg«ó¹ u§0‘á§¹.Xöc%Œ?ïÅç¹(‘0^fÆ8f=:Y2«k‰&~u"-ég’ƒE۷Ɖ ;Oq7‹”?î¢ ®<tç4¤„IäÞÏìã´D†â–õç7íV¢ßK¯M0åסÏëöC[ö™ÏTÁq“È�–‚¨¼$]È@Õd*z74éÀ÷nPy *­EQ5™DD&(ÎIáûÕ&Š*ÀùÊq°¾q`Nz}¿˜}m4ŸIßÿú=!_Éõ¿úйë_�™ ´û¥Óï— „Ò_Óc›3‘QêørëÌOã aÆ53{¹s1×5ïCvÿnnºœï#ï›Þëó±W„ñ¿Îëõú–î~®\N¿6n°Æ‰s¬¿Ö›k¦¶UpŽÃíL¿fåe÷õöM—ÊÜ»ùÏ{ö<g¯A M@¸dc†M”mŇjmóÐ-~^Iœ&Ò|+´Û¿îDFôëdÝ•´ÈP̲>‘t+ÑÜ>¦eg~»ŠNðn§É<WöæÉlƒDpÓˆÊKšë �pu&‚Û Ò:Q Åz”ýä©k²Yð—«§ëûÅVR +ûa—€š4šIAóíÉJna�V–3î|¥=פ|¢Òïå—[äøòlÀ>$̺fæo}ž~”Ä?ñ`V"câšÍª]—yë™�u"j{F@—©ºUÎqî\…÷ÇÇ×&޵Sô7èáå ¾Âû0³¾Å܆ºSQ‹ŒÏ>ûL’$qsÌûLÎ:ÏÙ÷ròIKOàíæ³\w²yø§'©²Ê%A¦o?èZ’ILcË¥…º–äM-Ó¼i÷ªO¹Ï¡>¾[‰–)W‹¸„dîºgÇÜP&¾‡Hd�7¨¼$]€�n«¼+ÍA¥ÕUD +Ô™€MΦÿù–4;=”¼pc×"£ðWÃ\å8XŸ­ìý2êÇݘ¬$_–Èð¿æ@æXò•ö«NdÌs|c&`×ûúá§q0ëš©WÌx¦tz?É <s]³õHdŒ½}"/tûð\ªkÖz–½çL«}색ëÞÓ¯Mîzš1GîH£Ù‘ÞàÝø1צ^økzö>Ìß/‹» u§0‘ás?Éäªæ³¾™½vú:7¿“þ\I ]öĹ–AÙ^6Wð9Ó÷ç¦ûœú.a…ƒ}žËÉËŽ¼<9sÝÁŠûT«8ùA¿Ô¯_c"#·Ÿ™n%š)of$2ò‰­¨{É܉ U¦õŸJ<G¹ àrDå%‘È�€›æÇpcBøñtP}'‰~Ï©g?ýQÚ]UÉLƒâŸeøöß$y¤*º&aáÇv°c[qwýÕÍöTžóJUˆ³üLÖŒS ö!@Qÿò÷Tº*ØIv˜q!ü~O&Yò‰Š|SsõŠÓÀŽýáö7?×¼Ù% |eÜÏì@÷døNÞO8¾|×ÅlÿŽìD÷ƒ1 f\³û‘Dþ‰~ü‡‰DÆìk¶Ló×üuUÇ&¥ Þ \t£š€Ës⺚\ø12t­î‘Áë)׿×Ìõý÷äk»q`Üù·÷ˆ¿ÿìø%Æé¿JçåæîÃÜ}ö nCÝI'2J'0œìg2ÿyÏžç4‘qr,oßã¦øÖõ y`’ñxW$ì~'/'’ ž °ÇLõ-È > t7±n§­6ÌknlžÌ@ÄfÙ¯¥•®Ë?5dKšÝC7‡Mò¶Z/åÄüíîÇ|Ðo5~(íþ‡)ÉÝ-ë±4ÛzŸò‰ }\ãǯÚcÓÛ º•h.‘QܲD'\÷2ãÚXîzƒçÚý “Éh³Oú\«ëW˜¤PQyI·áË�ÖNøôŠFKâfc<EþÉþõtLLŸÈ©"€þûUG¾4dê§t|tÍ«õòú}àØŠ±Yç†Ô÷cÙW^û·®PŸºJ© ÎÓŠº P=–n0½0°\…Û­W?™à~t_.îï´2ï‚¿Oê˜xä–ö%ÖÍ·Íßu‰ž?7sûw¾âï“:@þÁ& Üzæ?>·ªŒ¢J»2õšýwú„ZôX^u¾Pÿv‰¤¹¯YáŽÜ}<ss ¡É@éX^vä(xZN& ÔAZúÄ‘mÙ¿zú¾ˆò×&¼¾¯ex꟣ÿ~!/Uðå“á€jÒçô]ïQp6%Þîi¿XÏI¯cÝéäEÙ†á‚e{.êZ6§žg›„²I'[v¸d£y_—mºu»“òOùq“¿×lBdÜeĺáËïåàètÓ2sò³mþýây´Ñ°/‰~‚’ŸO}N'žÂ£“I<.Ëôý˜&ðlk²ñvrÓÖwò?þe¯ø=3éDÝ`Ê:ôùz*/Ó$K¶u…=?Áü™DJXδ´H—»#QôÁßjŠþQ¾™yLŸž`•—¤ !��PMÔÊãœ-‰ Þ»í Z�Àú㛥$¾Œ�¨.êåqÎnšëZt;€Û…o–’ø2� º¨”Ç9�\5¾YJâË�€êÒõ�¦ò��W‰o–’ø2����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$�����,QyI$2�����X¢ò’Hd�����°<Då%‘È�����`yˆÊK"‘����Àò•—D"����€å!*/‰D�����ËCT^‰ �����–‡¨¼$XUúÞdZ¿ ���@9Ô¢K"ðÀªâÞ\?\3��� <jÑ%-'ð8•A¯#ÍÆI†îµë ¶sЖ¨¶w-Û _K;Ú4çp£ñµô†çîr6ƒ8’Z”Èнt›L¿7%‰êö¼›©.Qr\ð^øº6R§¬'æ½ÜëWMoç•ÄÑÝkÞÎê™~ÍÖÉ™ôã†l,ô¹:—ááUæèû¯&f"ƒ³ÑïM£ï¥D••5snkQ[_ÈÃv_>öc©§Ÿ5¥û›û|¤¯ûr×®kccKšÝ7r¤ÊÈvÿÌÌ1þŒl¹yô~>“þÑj›oä8Ùs¯LõXúljDE!qÿƒ §­£IüâÇ‚sòQ=i4ÂÏ|vªÇ}É”ð§=iÖj²Õ9RGæ÷ï/òÍ7 þ.X��À ‘Q’®¸Ý´Ñ #[¦Ò8G‚áìPâæË…õ‹´¢ ‰ŒÑ‘t¶ê¦¢|1<Vcóf‚Öô|¸`K_åÚuüÛjž;Òìýê^s̵¹#»Éûlc^×A\>ÁQD¯±ûæ¢/q]ßwólçvYFy²\*ðï?‘¦»Î£Á÷Òj¿–áH½~Ô•(¦Gƒ®ìšäÅEú^#>TŸäL@®Ê–Î;3ßhx(ÝæÖ8Øž°›à'xÝ}^t²à`à¶é½:Á`֮ޥ- µ½ø•K(èĆNÊm¦Û´å·_ƽ—do_z§j÷9Ë&Îå$iIË}VmÙ”ËgéušjÛ:YÓ•£0™¡×·×•zÉ.—Ýöè$‘Ýݰ ©ÓÒ’š.·:f¹ _ïÙc*(K���n‰Œ’–xLTd ¹Ê÷º¯Ð^C"ùÊüµËŸ_¥×¼SÑD†2-ˆ Ÿ &ÉpY‚ÁtŸpߘ}#‘±LûÛßäÏ?ÿt]XœšÄÔ-#.8þ(ƒîSè:Ñpß¶b˜q‹Ùrò¾tÝ+Šº·t‹ ³ØÔûùB†Éîõq‚b"¹gÞs‰s,5©í&r’ÿì„ eÓªaVÙg[„ÌjÙP\þëdÇU^g?Ó:´çþ.JdLRåbk_^¼hªuåÎáZ¬„忥Ç��p½Hd”ts‡þeÏ7‘Þ”è^`›\û_ä~—£Î®ýUÍLzÞßd´Ì¯væµ ;‡ÿ¥Ò¼^‹¤}8 *¾»Ò9xj×_Sÿ>:5˨…ä°¹mŒõ”³#I̺Ôkß=‘‡³r»N·zª?’ÞOúWË;Òˆvìþ™Jòi°¿®‰¶Ù_ÿK¨Ú—ÞswN¶U%úýxþp?Ó‚ó¡º üS9pïe~Íœv|^ÚrÀ¯ïb|l&ÀÊ^—tº¡Ä‰ÞÖl.‘ÓhK?ýWfe7Ln¤×SŸHv‚C¦{9ç¿»_Ëýñêyÿ3Ó¼_7ÉoõNìúÕ9îwí/Éæ›_ãÕë>Àì¼”ŽYÁù¿….¿f7GïËgŸ}&I’”JhŒ†}IâH6M ®Ë-ÛMh'îº{Å]˳wîÚº{%ü\¸ûb+ߺ ¥ {—&2lBÌu)„å3W"Ã}Nj­ ‘’瓾s´J˜úó­—ò‰Œ Yâ'2w¼ãÖ:áó0MFä£Á3iåŽ]·ÐØkõätZ¢“D��XA$2Jº±ÀÃüÚwÇ�£éµt`©+²çö×BŸ”ð¿ 6UET…}™¾ê¦bj+Ú¦9±¯¤êfÍ»w\3m×jÁ¶âëפخ[ÏwO­Û Üüb©×ýwS¡¯›yÔë*¨Ýó¿~†ÂŠoš›Š»_ÝqL÷ûkçñ‘ïZãß ½ÿ* ò w&ÑÌ÷Ýw»¤G¶yô´ãË)v¿Ô~¤Á€^çž:®î|»_q}ÐVÔTûš\~o—Úö‚_aíý`<eØûZÍï?sž·]RÂÝ7.ØËZ64÷¹×üyð×X'R.ܾdï »Ý?ì¯ï3ÉÛáÆÊ“9¤ 5ÍŸÐwÙ2Ÿ¿ ÙWx-‹ ay0u ÛõãÒ®%™$¯úœÆ‰K†:EÛ7‚D†ßŸ™Ÿ]ÜE-rLÙgÏÉx “.Qy?»S~Y~s­«ìrÓ×kÏëž+\gâ¸Id��€ÕC"£$]¼~î×¾ B9®Èê�Ò™É$"ò{hü«ß¹ à‹*Åù s°¾ @ §º ,~ÓûÚhJ·o[uÊW|MÐTªMÒÄŽ¡a×áñÔÂîß~¿òÍÌÇÇ–=¢üùÈý5S/¿Î\@™cœóä+¤÷÷R>9å›Ãëë°.æºÁYpŽ&ƒ"=Ùãhçá\o;LÂkaþœ¶¾Ûe®kvC²×ÕN>¡1[îó—ûlg®eî:6qš£×¹¶$º„ØWGÐâlúö¯;‘ýº ¿¢>Éàa·Í.ç·=¹^Sl?t Ã°Ì ÉmƒD��X!$2J*ªì_ådM&$ÆÙ_&+•©ÉåT ƒ^’Žª¯+Ëvôþâ 1[aÖg*®E€tEØh´$)jÒ¯øæ ów¶YsX ÏîW>Ip‰ŒYÇ—cZr-]òAYx­¯cºœK¥ ¢‡²=q΃{#=G¿Øs>×}£© ið£$n@Bs­>æ®y(w?L®ïv*º†«6}ûí·no§É}þf]ËÜ{Yù¥§>Kí¯s]Çæ“v…òÝ©¦n?Hdä’Å\´P×’¼iåרÔσI©ëd’.úü»•hv¹éÛ$Nùî%$2��Àê!‘±’\…>¨H+²®EFa%;¨›î *°nv¤7x—V–m‹Œâ_³æ`}&�˜òk©“Ž»QÔ á²D†o)¬?Ü—ì~]C"cŽãK™}½«˜ã\àà»nØ€ =‘ðYû5ÓÛœ‹ ~T°òô¯òÂ?9Á™xApŽì5(ܲ×ÇOÒhJ§÷“ 2-2ÂV7Üý]ßí5÷5»ã@ÖN:ñÛo¿¹wg¹ªD†û\gZBè{ékië®[ó¾”VæþÊ `ìʙɲBw«¸ïÊ'?ˆfÑ`Ÿj'?Èã—ïåÂt×SŸó¢Á>Gïååãìë×–ÈÈí§>¶Ü ½v¹iÛžL|w/)‘È8;”vüãåe(��À'"‘±’|@ìÇ„ðcdè�cW:É?«÷jn<=¿ª|¶Ÿ«Šç8P?¾“O¾V•X›°ðcN˜Ê²O¤ëéÊþ÷òRÝÙ.a¥Ö¶0È Üxú£´»ïTeúK70£Ûï‚$ËD€œk~>®”»õ»qAlb!ßä9÷ËmAÄÊž·CµN}<¾BîzøL;¾‚ Ûmß „9Ñ-cyÁ·¾?æã®«šâœù1WLæÌ‘¡ï;u­:ß›÷ƃÆêëòTºêš¤Öɱ¼ý÷DùÖ5~|s­|‚.˜õô_¥óRÝ™ûaZ÷ÛgþkvýlùR&áä?³®ešÈøY†oß¹ò˲­'Aò@'1ÊCÿyTÿvô\Ú/'“ )`‡Lu­ÅÆÉÝMü�´á ¸~lU4»‡n?ÏeØ&­ÖK·._f…ëÕJ·µ¯> îoSöåƒ~=€ñci¶Ó±ˆ²‰ Ý¢é•ÄÍïÌ>M$2ÂǯºcËw+ÑìrEÉG}.»…å—á¯W8@¯Ý¿0¹1Qžkæ\ß›’¤��¸Z$2VVømÙ¿z:EøžšÒ×UEÛž.r꟠ÿ~!/Uðêº Ÿ>¡ß3¦ÒëÖYoJ¼ßpï»±"Â.$iåý;´%~¡Ÿ*¢^ÇV¦Ýzõt?’("¨àgž2ø/»¼ RâÈý[MQG¬pgƒð|ü É£`¾ýXöóûPx|Å-*Š+ò¹§2˜)®™ÞÞ||¢lJ€“>qDƒýGÒ¬û`.|Ï›òÒÁYMä¿Ó'ÆÔ¢Çòªó…ú·½ÇÎ2×X¿ß•£‡*¸õç«¡îõfp´î¹Eæ¿f×ïŸþéŸd0¸¿æå’…îzå?W™ki]ïmbË”'ò» šÝû¦K@˜$FøÔ!7ù$©Iˆèerãf _Içà?‚'ã|Ž3OΙ2¦çKâà‰<êŽ_å#ÕÉDâàs?~bŠï~â—ÏO÷¥ó?žÉä@ ~ÒÉ@(ž²}¾^ö]’%ߺ"{]ô–™2u¢¥E°LÉýàï¿È7ßü%ø;?Ýþä#��X $2€+¢ƒù‡é¯µŽþuz7®‘$°^¸fŸBïݧ]ì���pÛQ‹®„þt+mEbé–3ûÒ*ègŠ××lA¦kE[Ú7ÔÚ ���«…Z4p%t·‹^út3ešÊ_?‚âõÃ5���Ê£ Üi…i­&����åP‹�����kƒD�����X$2�����ÀÚ ‘�����Ö‰ �����°6Hd�����€µA"�����¬ �����`mÈ������kƒD�����X$2�����ÀÚ ‘�����Ö‰ �����°&Dþ È€Çëh����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_read_vars.png��������������������������������0000664�0000000�0000000�00000443311�15030617045�0025156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��›��è���PÝê���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìÝïOSéú?zÿ€>™‡>01!$>˜dÇ81È f&$hÆ£czÐlgj#¸ÏN¶5:å33Å=öŒÔ:ÒoÑt¨ówÀ-uO9Ò°ë L+vÆ"¿¾…O‘–õ>ë.EZhKÛÕźW½^;+Û2P®u¯{•ûZ÷¯5 „B!„B2Œ’MB!„B!GÉ&!„B!„Œ£d“B!„BHÆQ²I!„B!$ã(Ù$„B!„’q”lB!„BÉ8J6 !„B!„d%›„B!„B2Ž’MB!„By ¬Y³FÒ‘*J6 !„B!ä-N¸€’MB!„B!1Q²I!„B!$ã(Ù$„B!„’q”lB!„BÉ8J6 !„B!„d%›„B!„B2Ž’MB!„B!GÉ&!„B!„Œ£d“B!„BHÆQ²I!„B!$ã(Ù$„B!„’q”lB!„BÉ8J6 !„B!„d%›„B!„B2Ž’MB!„B!GÉ&!„B!„Œ£d“B!„BHÆQ²I!„B!$ã(Ù$„B!„’q‹ £€Ù?ÿÀ+!ü2áÕøsvþ›(Ù$„B!„ÓbÂ8‡IëçØRºZ­6α¥[>‡ur.ô”lB!„B‰):Ù<†µâköµ¸ÇÚc”lB!„BIl1a0ÝûOüÓådzx¸z.ãÄ™Ÿà\øÚãð‡‡ÚR²I!„B!$¦Å„q“Zq¹«6›mñ躄Ê÷jÐî „¿o%›„B!„BbŠJ6㠣ͭ¦d“B!„BHòF1Ù¼wNž†N§[<ô—pÇ9X‹ÔR²I!„B!$¦Å„Q@`bS+l}‰’MB!„B!1-Kc´ÝC›Ù Kû?áðLÇìÕd(Ù$„B!„SdÂ(øza,ÛúÚ›CS„ªÖÿÀþžH”lB!„B‰i1a| —i/ÞÉÛjý%´šÍ0›[aºð9´ïBÛKZ ˆB!„BH’Æ�¼íõ¨³Ž„_/àå­à{×ëÐ+ajùµ”lB!„B‰i1a Â×wGÑѳ°ÏfºÛ¿EuÕWh}­]—[ñ`r.ô”lB!„B‰i1aL°Ïfä±ö¬”lB!„BI$2a\­8Xq"zŸÍ¥Ç Ó4Œ–B!„BH‹ £€Ù?žaÈ ¿^à‡ûác¸g—o€BÉ&!„B!„˜Æ9L>¸„³W[a­D»p\BýÎ=¨¿bF[§ãáÅJ6 !„B!„Ä•l®8gs `,œo²¯¥Š’MB!„By ,&Œ+õl²¯·âÒ‰3¸Þs“’MB!„B!1±„ñÏq?6góÕ+L,›šž³ùzË×8Y^£Óú/”lB!„B‰a.”0æT[1þJ\‚íU›»Ç„gáÅ‚(Ù$„B!„C Éf ”lB!„B‰’MB!„B!GÉ&!„B!„Œ£d“B!„BHÆQ²I!„B!$ã(Ù$„B!„’qB(a|ìA@üw`bSËöÙ¿kjåÿ’MB!„B!1-&Œs˜¼wNž†N§‹8Nãäs¸79þ¾E”lB!„B‰)*Ù´ÃZñ5ûZÔ±ö¬”lB!„BIÖbÂ(&›Zq¹«6›M<zÐmm…¡ö0êZzà¥a´„B!„B’•8aœÁKëçx¯èz&ƒá¯-¢d“B!„BHL FÁ¶ýyX“{mžÙðQ²I!„B!$¦•FÁ?Ž?Çýˆ±H-%›„B!„Bb[–0Æ0h»‡6³–ö‡pŽÄN4J6 !„B!„Ä•0úûqµb34âר×CGîÇ8Óõ'õlB!„BIÞbÂÀ˶J¼³FƒœâƒÐ{¿FkóTlÓ¡{šV£%„B!„’¤Å„ѧ±š…•g'ÁÙ‹ý˜Ã,^˜Ïà;§?ü}‹(Ù$„B!„ÓbÂ(àu_Šk¬˜d/'ï¡vËvhK [Ô;õlB!„BIVtÂ8O÷ Xì¯ LZQýn!´µ—Ðí™ ÿ÷h”lB!„B‰)*a ¼„ýNîØ_"z=g¯¾8ËÑR²I!„B!$¦Å„ñ5\¦½ó+Ñj>ĉû.üz½Eº‡˜Œ‘pR²I!„B!$¦Å„1ˆQëq¼[X WQµç<èµk÷Ðuí{<˜œ ß"Õ$›,P:è ƒ:è ƒ:è ƒ:V÷xÃÿß}q/„ |}×ñÕçà‡Ë¤S÷j´éʵÇO!„BH,¼·s)>iã b¬ûJr4¡¯EïT¢íehg”ÅŸMž"¥‘N <Q{ü„B!„ÄÂ{;—â“f1¾ˆ9›‘‡f3*®öcy¿fzç¦Hi¤(OÔ?!„B‘—ZÛ‹¼ÇMñI_ÀƒÇ¶ç˜ ¿\I:ç¦Hið~V¢öø !„Bˆ¼ÔÚ^ä=nŠOšeñÆ0h»‡6³–öÂá™FœOÒ:7EJƒ÷‹°µÇO!„Bä¥Öö"ïqS|ÒDÆ'øza,ÛúÚ›CS„ªÖÿÐ0Z%©=~B!„"/µ¶y›â“f1¾ù9›ïäí@µþZÍf˜Í­0]øÚ÷ÑAJR{ü„B!D^jm/ò7Å'Íb|xÛëQg ¿^ÀË[ÿÀ÷®×¡WÂÔ&ókÓ97EJƒ÷‹°µÇO!„Bä¥Öö"ïqS|Ò,ÆÇöÖ¼‚£Gèè±ÁfcGºÛ¿EuÕWh}­]—[ñ`r.ô霛"¥ÁûEX‰Úã'„B!òRk{‘÷¸)>iã›Ã¤õÖŠ¯Ù×âkÁJÉæêR{ü„B!D^jm/ò7Å'Md|‚«+N@§ÓÅ?ÎXà˜¦a´«JíñB!„y©µ½È{ÜŸ4,¾?ÇýóÛ›&1> }=霛"¥ÁûEX‰Úã'„B!òRk{‘÷¸)>)æBñåT[1þJ*Ò97EJƒ÷J²µÇO!„Bä¥Öö"ïqS|RP²© jŸB!„ÈK­íEÞã¦ø¤ dSÔ?!„B‘—ZÛ‹¼ÇMñIAɦ*¨=~B!„"/µ¶y›â“‚’MUP{ü„Bá€Àˆ Ï}ɯIø¢Öö"ïqS|RP²© jŸB!¼ Àc®…Îæ ¿–Ë ^ܺ‚»^)Im*ï1_?žÏïÇ,þèí‡w~k?ÕRk{‘÷¸)>)(ÙTµÇO!„ÞÉ›l ~zï\ÂIí{Ь)‡Ùÿ—ä¥÷âyYŽA{ü‹ØȇŽS¨.݃c*ü3ê¤Öö"ïqS|R¡ø;GÄ;16Á?Œîo[ð`rù¡tÎM‘Òདྷ¬DíñB!„wr$›³ÖsãAçhÄöÌWÃÅÓzÜH:Ù”úì¼ ¯x´Zm‚c™°”sjm/ò7Å'Mìøæà÷ô⎱fþ¾^{ VJ6•£öø !„»L'›34íCŽØ†ÑäíÄñ¦[°y¦ÁFª S˜$3f5ïÄØ£GxúLEUk{‘÷¸)>i¢âüqXqédò5kBÿmÍšä½÷7J6•¤öø !„Â;z6“pÛïŠ Ë(;Øs—#þ¹EQ&Þƒ ŒÂyÿ{t:èmè~6wXŸZ©µ½È{ÜŸ4‹ñàí¨}“d† ;àñcîÕøsvùýœÎ¹)R¼_„•¨=~B!„ðNŽa´ ÆÐenDMù~.? KÊs6%¼‡¿W+6C#¶§X›*th>D]Çó¬J8ÕÚ^ä=nŠOšèøØ}ìÄý«çp¢ñ'8Çgç¿ Ö³£tÎM‘Òàý"¬DíñB!„wr&›„)¸,—¥­F›Ò{ð²­ ïjõh·»á µhçàé…éà ´½ÌžtS­íEÞã¦ø¤‰ßÂhƒÆ ¸tö-¤$µÇO!„Þ ðþ½#,ù ÂÛÑÞr¹`o:$ma²|°é£yp&üzÁ,ܦ£ò'׫H­íEÞã¦ø¤Y1>öðèg+z§i­bÔ?!„BÔ„õrFiõ©Û„,l»Ãima²"a}-'p°ñ¿á™„»ÿ9|¬àý1샩̷| —© /#~fãÎP[T“ëuøkê§Öö"ïqS|ÒDÅx û6ܱ‡ïÇÀœ½îùû;†tÎM‘Òàý"¬DíñB!DMX²Yj$>VØë2ðÝ-Ð5ý§/(¾öÀv»vïÒ^ÆhsÏš±míÔ_jÂéÊ»fŠþ~ßîÙþ½QfìÛ@]Æï@sÙ¦ðö'»QZ+¾‡øžº‡˜Lö=T€•ñ7Å'Íb|ìÁÏÞù¹Óšqâ¾ ¿‡^Ç¿Ó97EJƒ÷‹°µÇO!„5“Í®À:1D6`ƒ®Ü Oø%j;a½‚â&›3xÖ¼MŠ·"¿ÂŒ¡VìÍÕ@Sr}þxY^Þ¶O±¶²£lë“æ±Fk¯m5Ø©» ûà0<n:t§p-…^IÁïB÷5=jÊËPVù7Úž`,•ÕlU@­íEÞã¦ø¤YŒ/ˆQëq¼[X WQµç<èµk÷Ðuí{š³©$µÇO!„5˜˜ÀTd.¶,ÙdS­m?2 ‡¡[›ßm͵8c›}Ýiü Çôü·-3߫𣳉ÿbó- BɦÍÜ“;¼r¥øŽS8—Ê|KÚú„[¼ÇMñIŸÿ ¾ûâ6^Aøú®ã«;ÏÙlq¸L:|çô‡¿iQ:ç¦Hið~V¢öø !„¢.B €¨¥b$›ñ¶+X x;ðù©{eß3iűcVL¼èÖU$\˜'è0 ¨¶Sáds}}|ÎKØ¿ÿ š[[aºð9´[êÑ£'$¦·dëµâ½KñI³_cÝçP’£™¿#w*c® ½ø³ÉS¤4Ò ”'jŸB!j€ç¦Ý3™ä²dSÀL·7 £uÝ<üf÷¨cÃß'ŠA˜ž…Õ; kõ&l6<AP˜€ÓÒ€yëóþûÈ+[’øÆõöl}¢V¼·s)>i㋘³yh6£âj?–÷k¦wnŠ”F:òDíñB!DMØPÖáu´óÇîbäå táµvŠó$X h/ÌŸ¢¨ú0›Í‹‡åº|bªš˜à냹á *ê®ÃÁŠtâÚ×0~™X–n}âÿîWËË^éÃÃÁ©ð+uà½KñI_ÀƒÇ¶çâÝ—œtÎM‘Òàý"¬DíñB!DMb$›ËŽ•’MQ`nÿб•2KYeéÖ'ž[¨×ÝD·Í[Äñ°ù0>Ò݆Íñ<Ü‹Ë?U%KÊæøÒùYEJƒ÷‹@!„ÂÃh—Yim&1îèõˆZºÝbŠ„o° m–ŸWÜ>%J6n}â1C+¶oY7ö¡ANÉßaõ¤PN añòŒâ“f1¾ …Å[l,sS¤4x¿„B!<Y¶@P,+,$Ý&­uø î'¸üAÌ>3aOî»(®¬FEY#z|I.$ʺ­O<?BßünžˆãyûIì6ÚBÿv;‚îÔ]x9?MJæ¤QO|âý|ïœ< NqœÆÉçp¶>!„Byáíè@ï Ùf°·Þxß$¾ÇÝx0¹ä¿Ï=…å²ñ6>‰6»þèü|Ká%¬5ïá²kp^«{¾e&øàxîøó>L†³Ðé/¢­{�¯ÿ _wzÅo½ú¢3°ÉÙùœ”ÌI£žøØÃ£cX+¾f_‹:ÖƒUÍɦúÌÁïyŒ[ÆF1Û? ƒé#üƒ „BH6`s6£´úÔ’ˆÈãªK'˜³ÉÞ£|y£’ŽÃ:ºb¿©hÏš¢ÁêÄ@Ç(Ò¼‡ëKþX%ZIVLtn‡-Ñ0à”’^ùà¼Z¹dµßu(¬» ë±ϯy[r«~¢žM‰(>iã“Í­¸ÜÕžc܃nk+ µ‡Q×Ò¯š‡Ñª Ûäô"ÊrÙ4kçç” 'w?LÏÔû‘H!„µH(F剓MË T~s%b5Ú+ø¦²EÕ—aI®»MðõÂX¶Qü]b"uâxg~‡õüY1Ù½ ÛX¼„5Éø“Nzù#¼lCÅ»{ o·Ãí›/KÁÿ}¦ã8Ô6ÌfÔÂcûœKWòå»<£ø¤Iß ^Z?Ç{Eçгt„(s“¯43ð«yìý‚Г¨õÐÿƒâÇeè‹ð»,8tè^fÁ)B!„g,Y;ŠÚÎÑðëXFÑY{4A²)À?<ŒWQí– |O¾ÅŽw?ٕˆ­€##¾p›(,ÑÕ¡þJ«˜à¶âJýN¼«=«o’Þïq¡zkJI/o¶sØÙü›XÊÑ· e:[ e¥<Jæ¤Qu|‚mûó°&÷ Ú<Ë7Dá*Ù ØQaHþæ ŒÂyÿ{ØPÃe´Û†áç!‘ ڡߘƒ¦¡èa¦²/¹wO!„µcÉfí s"Ùþ•µ‰·>Y&�og#ö×\AŸ¬=n‘‰nļÏHS¨ÍSqϦë{|Òp£o:ZÆûq³v;v™—%¡<ã=Yâz’Mñ¾|� []ºs~ÌÀkÿÿëš¿ þï˜uV™dÓß«›¡9 êÐ|€S<þV'þÀýŠï¡ANÁöð^Q¹‹ãÜ5æ¿b³îQxxaœß£º$k+Ú¨g“B!2 b´ý3|œ(iaúø3´sŸ¬ùá4BC÷hĹ„{Xß)Pñ"C>8›Ë±!¯»Ù¾§lÊ•ØÖĎȳt ²ˆ÷ò[ŒOÀk»m´Á'à½ß€B6ç8ç=îú}¯—Ú¤sn’K#h×cc~% ­ C!æëº½ØRýñßÜqD~ ,7ç4b‹f;tÏ{3£èk®ÆÁÐ8w…^¡ïæ7h8ÛŽÁÙ¹P²yôà7¸¯‚½’!„¢~Â`3¶æG{Ì¶Ç <íÇ‘¿Ågò»(F{€†¢÷Qzä$tº/Pûé6äi4È-k“‹ami¦àî¾}M´e•¨3ÜFߨò¡ˆ¼£d3»-^_?œßéC { ž›ØÏÖ§Ñl…®ç&¬ÿÀE§?ü}‹I6xŽŽ3ÜóFÛÚÏãHÛ‹ð«Ä‚6ï0Á½äó%rœ{¼ÍEåçÁÝkË7ž{z—í“áW„B!2 Ï¥ÒTÁÐö�}ƒÃðx†1Ø÷�m†*hr±Ëô ñsÍ9øúûñ|é7¢·÷åª?Ø|¸×¬Cuy™˜˜U¡þÒ/TÁâ9qyïãÚƒWKÊѧ ìÓJ´_ÓÇW²9O÷Uèußâ–sB,_¶ÐÒ]ܱ¿TÕ<Xž,^ß Fïpæ‡6‹~éÄœ'0ŒögbiW&Ùd„I¸Þ‚QÏ–Þ6 ¥ýß+ ølhܶúŸ†—ÞT]Š2ÃÏ¡×Ì_à˜"½œn˜µ9¡Â>4ØPÓQu}~B!D¥ïœÙñ—m’ˆ-6âb‹ôƒöøá­RÂÇé#(ÝvŽY‚ç6n*ÂÁŸž+?ªLm<fh—]v„·‡ ›°¸y1÷¬Û4l7ˆ­(ȯ‚yÈó^11Ò쀡ï-Þ×U‚¨ë+&–÷õE¾fJ:à™ü íMg¡k¼s”A:uCzm&Ðg܇\6ß²p>ût+6•~Œ—’žl.¼0cÏ;±nÐèC³­ÏV}xˆ–ê|cb+¨…‡ ›QY¸Õ-1BŸÆ„BY%‚6‹u•{¡ÕîEeÝ×0u>ƒoÅö[dèÀünlNaÔqæÁ™$’Í ¼woàÁÒ9ˆªß#3<? º²¦7SÊZaú¦ …E5h±{)ÙLShôãÖf f.ã“3l çEì3<k¤ÒÔ×ó*åú¦ó³’k“à2a§f=Jô1/¾Mr³ ³#'½úÖ+tžýÃx< Ž”–ÙΔ) »—Ì9ì'MZ¼»·.Ì „Bˆš‰I^GzWhY{;Ðá÷MAŒ=z„§’Zç,a³_¦Š÷ÈÌÿp¿Šn¥ >;šv`¯y(Áðf’àõó/ÃukÖc_À:9ƒ±î3(á`K5ö¼²û5]éü¬äd3´@К=0¹ç'@Ï'›CðÙÎ¥T „À$ܶÛiÅ]UÂè<s5-½I<I$„B‘‚%y‡QZ}*zlÔq Õ¥‡SÜú$Ub–¨üæÊâh/ó|SY¬ê=2å"xïãÌþZ´ô±/’Ž9× È_ý`#tlFmç«ðw)‡ÿž×åÒI¤ó³’“ML?†¾h' Ž©ÐË€M‡¼÷ßGž&…1êŠ+¯9ø=qËØ(~˜Ÿ…¡¥6«J„B!rKУu”ËœlFî—¹ ¼mÉ»ŸÀì’²J¿Ø@÷Ï(ÞS••„ixRîЯkß•ðî Óð¹ƒ;Ô&ŸÅø`/lö!Œ¯Â¡©vEÕ0¾y¸ÁŽhø;>œ÷¼ÆÂ>+Ò•ÎÏJO6Ù‡ƒ§ ß}Ù“ív=òòv¢öÚ“¤+Af†âÊ…ÝlQÆ–ÎÙ‚òÏ xÓGÐ‘žTB!Dvb²ùÃX'"À»a.×Ãö¦5ëƒMW›8Ù ¼@wK#tM?Âɇ€¶Û°{¥$‰x;±¿æŠÄ1þ3µ0¹–o·@$H·Cgî)š·å¡´þh:]…íb;XST+ß–‹ïÅl°­j.Êß)äëÃOßÝ„m,þïþp wÉ®«…÷ž×XÒI¤ó³Ò“MïXŽ-IºR[ê9SCqeÁ6IÞ™MI#zØ^ItåfxfŸ éðu¸(Û$„Bˆ¬&&0ÕæH5ÙœÁ³æÝÐhòP¼½ùf ´b/K"JΣ/…ý-C‹ݺ=¾k¸ŒvÛðâ>é+àw^EEÌúh Á”Òû‘DÒîÐñ¶¡|ía´ç÷x]SŽÖ_Í8°S‡ŸìÏàñ¸àìhık2w yn J{ §— _<NWïÂ6Ã(±£)÷=¯1°û,]éü¬ôd3K=gb(®\‚vè7æ`‡ih>Ž…dÓ÷/èJÎF|ÈB!„¬‚ÀˆØÐ×cÇ;¹ ®PïÒºë?KlNÃa(ÅÖæßÄöÌ4škqÆ6úºÓø™ØKn-YÁ× chO¾\–Á§Å…(Õ~Œ c²ëXLÁ®/F~å×hj _†N[ŠjãuñßpŒËÜcö–H»C‡µïst¡v.k—ç°!Ú¶V4,´‡™©NÔŸ“¹SHŒ£,¯»—­ ¼ä8dÆ K½pÞóK: ã‚t~6ÉfêjÑWu¨¨ÐÁ’ôRÏÒ‡âÊgRüP,Å–…'&,ÙÌ{yëhŸMB!„ÈDl¸ð<Ö0EÁñ?Vë_` [ ªò÷'F+x;ðù©{óm—I+޳b2àE·®:[2+g¾†Ë´M)ô=#b’±Ð›:GSL®×áïK„µù:pæì/ðFµ¡Ä$´ñ ´Å]MWÒš)³t;t‚O`(úS¬7TL6×7 Ûç€qÿA|Ù|fÓ?pR»urëE÷SއVsÞó‹ú’Íéa þ¹´ø¦Äèí“á×+á|6Çá;=t¦Ç Ø¡ÏÛ„ÒÚëpÈ=NB!o)¶(PmrI –vtÚžb$î¢-3pÝ<Œ|MŒÑhþ†ÎÉd’"Ö+ùÖì0Áú5 ɦWüÿdÖù½:;Gg¬Ô™Út,.p»Øeº:~¸Ì h°cÔz k7àásÞ@ýŽ|hrXÇË„72Â7�ÇóÄsŠí9ä½ç5†tÆéü¬ôdÓÓŽ&³#üt-|¸Ÿ ­¶9Iηä{v“v£EM·úÅ“½¶áö^xWa.B!„¼RH6“2‹æOQTýÅ‘hì°ÜÁC—/~WÓöFmi‚c–ýK6Kð~ÁFh’Þg3Ù•u9˜J•n»”’¬‰ ´Ã|•'qͱtQL?œ×.¡3ÁðÑŒà½ç÷ž×Øý•®t~6Éfœ9›šèzÆÂß”×{Ô„VãZMÞ‡Ø^Pˆ s?ÌŸ wøbèo5B!„LËt²) ãÁí_1&)óa£Ñ.ãKÝ÷°±©F%È+=#‰G</‹õWZ#’ÞV\ÕíÃÖêóÓ²,¸ôt,åq»Øe¦’5¥†s?g“óž×ÒI¤ó³H6„Þø l6ÛâÑu'NÜÆ‹d{þxÞ£†Y߬Eó X‘fhþä+ØØ°Ž@?Œû¾…CÑL˜B!ÙI†d“ ¦‡†ðçÒ&"[å¯=>NƦŠ×Å.3‘¬)9D˜ælfœú’͘s6g0Ø\жá¤n.¾÷¨ Àk=‡S¡Š9LZ¿À1«±.Z–B!2Q"ÙŒ5W2ïÏí°Í$hÑÍ=…å²É­g+ž×-hŠ˜~ÅŽQ·©HÅÉuºs#e–dMù!³wÞ‡Ép:ýE´u`œ—©l4gsEÒ“ÍX=›=0VlÂF½=©!°\ïQ37„›6C•³Cƒ µ÷‘ìH„B!ÉË|²)Œv fƒfI{fé±´'ŽÅ‘ÄKÉs65ÈÙÚ¤®E¢p¼Ø¥Ä!°ÊöÁyµrÉÂVëPXwNš³¹¢ $›±çlj Žâæ`rϸ¸Þ£FpÁ¼g{xß§ÅdØÒÞçHâ1Ú„B!éÉt²É¶-©@QÔ¼ÈdæJŠq¼™cÙŠ+õ;ñ®ö4®¾ùþïq¡z«ø¾—aI¦&¾ß¯`øå_ÑŽß1¦ô6!p»Øe&†À*8DXxÙ†Šw÷@ßn‡Û7_¿ÿKô™ŽãP’#(åÇqÏk é$Œ ÒùÙ $›?¢ÑÔ="´çS …Ìõxg6,¢·m¯¢+tÀ†3×àâ¸2B!D­øÿÞ¤¸d°•cϯAiªµ«Ñ÷¾Çð0^…š;lë“£±ß#/ÙžM±]51©,k>ñºØef†À²¶pŒ!Â-=²ḭ̈ÃÎæß–Å)¸M(Sz]—Î{^cPG²é}€6[x�©D ¸´0S܉ëñα*QDeª¹ ›‡}œB!„(EÀôÃ[¸ë—Öð²íµ¹"èAøì_£Dóôöù^«Äüp¡¡{4¢Ý#¾Ç“o±ã‚${aç÷Ù|0¹$Δæ}rˆÓÅ.å°5¢Â4 ë¹ ®ïñIÃ}Œ¾IÜÄÄw¼7k·c—’[Ê„©£ç5Z: ã‚t~6½ßgèlô‘B×:Ïãƒvè7 Òp-<\$|\×A»%<ÏôŽã<Ö&B!„d=Á? Û­oPYðIâMöƒ0W¢°ü8NëN£þÈäi4È-kÓŸ\CF{€†¢÷Qzä$tº/Pûé¶ß#ÞœMñHzÞ'¸]ì2C`ýý¸ZkýñÐ|€SŒÛ øàl.dž…N©Ò䈿WSt=KX(€ÿž×åØuKW:?›f²y õõ—æ“®+õ(}· º«‹û%µ^¨FQQ Z’݉ë=jfàéøgïy¢ÏELBÜ‚7ü’B!dõÌÁ?â€Õx¥y INyâd“ ¼„ÝÒˆšò2h˪Po¼ gŠÛWb»í^³Õ ïqé &ýlè T~señ¾ù ¾©,NaÞ'ø]ì2ÎØVÉ õŽæWÂÐynf\×íÅ–êˆÿ¶àŽ#²·;Ã/ºÖ‡ë8;Ž¢ãåëðTï=¯±¨#Ùôÿ÷«ùƒ ýk”-ËèGÑ)rÒOL¸ß£&ŸënÅXÎÂÐÒNCg !„¢�¶É=\:Yžâ³ÅU0w9Ðoþ7VJ69tAx(ÀìRëâ‹3ðtþ/˜º^õµ &«#JÏÛó>€åáØ’6kŠÓÝÏÑqÆ€{K:}‚öó8Òö"üJ&o8b½¨y(Þ½¥»Ç„g³<´Äùîye1iOïHUú©mØœó;ìnèÂdÄõ|v4íÈEN²ÝÇ\ÏÙ?�û.¢,Wƒ59[PþÙoúÚU0ö±¥­ !„Bdó®VèÊÞ›Î(¶I*t­èz6¶ØÖ  on“Áù–Q8ïƒN½ÑŒÖoŽ`OÍ•äWHå ¯IQÜ©oɣƸÓz ¦ëÝp‹ç"øžáAÛ«²­Ëü*¿ëQÜpƒá9‘¦à²Ôñ3'RŒÇÝ}úš hË*Qg¸¾1eºÇ¤J'™\‰ôwFÐÕ° ù¥‡PÏz k „ çÈ-G³3É¥žyž³) ´3š’Fô°Š°AWn†gö š_‡‹²MB!„Èjƒ¦}¡“5šÍ(ÿæg8ÇSmÌÎÁ×ßç ÚÏâÞ~xã¶m™™ok æCÔu<—=y‘ ·I‘§ uµÆˆ­mÄãª:X’î6iEÍŸ£Ý5aö)L{òSü ŽW쇮g,üMòXºÀÑ®æDFícÊIvšØ½˜i™yGaƒ÷Z «3zí^TÖ_½ÁÉo,N÷¨ -”ƒ¦¡ùóYH6}ÿ‚®ä,ljýT$„BˆŠàsÙpËø9´›  =y wìî¶šEË1hñfŠÒòãªK÷¼YLf9öRç[²Uq«ð®Vö7ñ³ù§½0<¶—êlXq›McðÏ¥&¦àhªÞÞYb‹S悵džwÊarùWçÜfhÞ¹:ÛDø >8MÇP’—‡ z6¹æ›N“MñbbI.bÏ{ÔL®/Å–…ù¢,ÙÌ{yë°¡¦£ê«G„BQ36¤¶û&šŽïBAÑ~è®Zawâå½Ö„[ŸxÌW¼kù4¥¨c™ÄÖ],™˜og¿O±•å6MrûñšyÚÑdvDï‡ï~‚¶Ú¢¤§»Í=»Œ} ?ã÷»h(Znÿ®V¯­ V÷'¸Ùøwœm&ÖV®ÃÁÆÿæbKU óM—ÉæB!ok~çƒieÜïQxîïôЙc,`‡>oJk¯Ã¡Öy„BɬGЉ.s#ªŠ7ˆ ÅD«Ñ1öèžf¼é€·³û“žoù.S-:#çû±Ñm? ¶¨&«Œ¦ŽÓ¤(ÞœMMIòC`#zï4… ¸ï„Ëj„N÷%Zl¯T—Pe’*†ù¦€ËdSûšESOú•ë=j„Q8îX`6ßB·Û/¾žÄàƒÛ°Üé…—ƒ'*„BÉ~B ¦‹ ã°7ê`á~5Z‘ßæ²Má^V6ì0Wlä®C‘îaÔ‚“ªâ½k·…çžÞÆå$‡®fŒçGè¿Àf³-]WqâÄm¼H©€oäU ö3ežî«Ðë¾Å-'[˜S|m»»*‹%…÷a¾)â2Ù̾÷¨µf7êÚ‡à¦ñÌ´¹9%¨<~@L„ŠUŠB!DNl®¤!4O.aj« þaØn]�t†Ëh· §<Jð»Ð}MÚﳬòo0´=Á˜šâÇ]õ5òЬþ¬˜s6g0Ø\¡Šdh~åZäoEA~ÌC˜÷nÄÍúxh…ó=Ì7U¬žfÉfè)�¯{Ô°‚ÊZ0(Öa´5ÞE™i�a¦²/i B!„Ȍͷ,ÇšœT5Z$íõ-5Q|½0–‰ý5¹(,?‚O‹ QªýÆ^øÔ×¶ÎÏ-Ô×_ŠX8‰­úze[kp¡5âk·íYÍrŠÕ³ÙÓcÅ&lÔÛ÷–s è0`óÖf±.`và2>9ó¬öœ±Ïð„ƒø9ïyMQ'›"^÷¨™{Šæ}:Xÿ:J  -í= ¿Ë‚C‡náåÛüÁJ!„U &›7¾ƒy`ë%œÔ~ˆ’ê ¸ÓëYåD‘Í·Ü ¦úž1*¶ØO-Ìž 8š$η›é¶vüw#ÎÅ]õõˆìÛƒ$§ÇUSp7SÚU‚ÖÏ¿ o«3ë±/`œÁX÷”p0'’ÿž×Ôdy²Éë5Aøú.¢,W#Vœqâ¾3®{8Ïž¶Ø0FÉ&!„Bd9g“­u±½Ö€¦êí(ÔžÄ%«3‰íâ2‘(NÁ®ÿ�kv˜àýº…÷ðŠÿ_‘ôJ²ÂÈCœ¯ü`~ßШ#ÑGœóܱͽê«ç?h¯K~ÕWYx~D£©wI\J̽LÏœëä¯]ROرµ¯Âߥþ{^SÃÊ6Ó$¿£0îÀ6,ÀòîY‚ï´ýZ÷1÷{Ôˆ•Æ÷ # KB!„($`Ó£Üìfÿ‚ÏõÍUx'/tæ_,^˜‰DQÀ´½E[šàµÏØ{”àý‚á‘_É4­§á0lÅ;%µ¸9¼4Ô–|€Ai{é)'ޜ͜]0¬ö¢@‘„ ©ˆZÚÿ ?…=$¼`y8&^ýH~<µX`Ÿ–÷z /ÌØST cd=1ß@ûƒÿðÑ)ÅyÏkª¸L61iEÍŸ£Ý5aö)L{òSü ŽWìOzØ@¶íQC!„"—P²izWU%á (®º€no¼æm&E†ÍQ»Œ/ußÃ6Æö"/A^é \s°ùjÉ`=¬û±Ó4´üûƒ¨¤Ãm9Ïmè wÑ97ÒæÀИ_Ùvì› r ÷á³O·bSéÇØQq)É­jDq?z5Ö—2ŸŸXßü,ÖµèX¶FT°5T¯•Â{ÏkªXì™&ùƒö¯QÚ¶$ˆQëqlx§<´ZZ*Û–dÛ5„B!™ÄØ¿ºàx„¤¿è˰6ܨÕäíÄñ¦[°¹&“h/IM3A@`ôŸÐø]®È¡/0`þ7Ô:Œ60‰ñ©döÕ#¸LØ©YýÃÐj¿ó½â.Ì:Œ8œìŽq?:Š»WÞºãïÇÕŠÍмIâ"ͨ1õ¤ÖK›aÜ÷¼¦ˆ•k¦I~ǹg—±¯ágü>p EëÃK:§Ø+™e{ÔB!„dN�s Šß÷b®E>›«y§w•ÚAŒ;:B jK·³âkß`Ú,?Ãî ÏJfð¬ywìäAÍs69µ´Cg>Ù‚Ïv.ùaž .~Š?¿†%C®¯ëöbKõ?Ä[pÇ1ª`®ÀwÏkª¸L6#ç[j pß; —ÕîK´Øon»HȪ=j!„B2‡%›lë“-¨Ðµ¢ëÙ˜BØ9LZëðAÝOpùƒ˜}fžÜwQ\YвFôø’K|…—·qìD+E 9eÇSUöqmú1ôE;apL…^l:ä½ÿ>ò4) õ´£Éìˆè…·íõÅò/~xŽŽ3Ü[2<<h?#m/¯ÄyÏkªøL6Cð,YÙ*0ÒlX‡Êö¨ ¸pËø ¼á—„B!ò“M‹!4MIYl‘¡£hœa#¬5ïá²kp^Ãm:šx‘!Ö9Ñrb¾#av½ÿüÏüv+1 ÚÃ>¨Tí<]øîËF˜l¯°ë‘—·µ×ž$¿/ªÒ‹ “p=¼•þG2â¿ç55'›Ë¥Ò}¬ž=jæà÷ôâÎ¥“вÉÀZ3<áÿB!„"�^\»†+4ª‚½èuŸJ6ö(¬N t|¢…Þ1ÿ�,‡N íeü�Cm½µ;P© §+?Bîšu(úûE|»‡íûÉ’—(Kz¿ONEmãÇIR”‰•dc.~Ô‹§#«°øQ&8’ï=¯)â3ÙÌ@÷1÷{ÔÆð¬Ë¼¸â[N ªôçqZw›’MB!„ÈŒ £=ŒÒêSbÙXÇ)T—–}Σàë…±Œ%ˆëPxâxg~‡õüYñ÷_]6omQÞ¶O±¶²£bÂ:Øü1ÖhMøµ­;Ŷ”}p84,³C<‡kIí÷É!^“¢L¬$oñ£™^´ý,oK8# Éãž×T±º‘i’ß1#ÝÇ<ïQ37�Ó®wÅÂ_‹¼ÒÏÐtëq¸15žÌÊo„B!R°d³<"Qˆw¬Ò;FF|)´æãŸŸßǶ\)%›6scÄN¦:q.©ý>ùÃmR”‰•d…—è9_…ÂÍ’ú–mh¿Wùdd#9ñÞóš"v]3Mú;f û˜ï=jÄ Ÿö;—p²ü¯8ØhF—Ó ¿@É&!„BVƒ˜¬ýp։ůëòíá&Ð]ÿÙª$›‚¶[¡g=ª†Ëh· ‹í¢ðŒƒb+ªíÄT8Ù\_ߟóöï?ƒæÖV˜.|í–ztNª³GˆÛ¤(+ɆF ¾³ µ—®G'­æ›èœ_xH6™XàHFªèyMŸÉ&#ø1⸓á,tú‹hëÀxÒ‹‰?oš‡¿s6vãϺ`n<†òòJ”×¶Ñ0ZB!„ÈLlÄNL`*Ô&šƒßÕÝŽ¿@Sf†çM;iµGWqm. ËàÓâB”j?FÅJó-ƒ0= «wÖêMØÌ¦I pZ°#orXÁÎ'üíªÃkR”•dC ÕNÜËN"ˆ@ íýôˆu_êG2â¾ç5Eœ&›>8¯V"_Ù#¹…uwSض$ö5©­h»ºB“ái5ZB!„¬¶¹õ,väj )؉݅ÛPk¶aÐã‚ãç3(Í9ÎùŒT&¯á2í…FS }ψØf½”µb‚;GSL+Ì·|}07DEÝu8–1 :qíëw×F9qšeb%ÙÀKt鎢±k0:ihƒá†¼Ãh…qî°N(ËC¸g±=öøÙ±‚óž×T±º‘i’ßQxÙ†Šw÷@ßn‡Û7ÙÿKô™ŽãPÛ°¤BæcCTöáÑý94Ýê?0Øknßé…—ÓD˜B!ÙEðý†vÝÇ¡U\ ª®À>æÇ¨õ86¼I Ö¡P÷PLÿ’1»©_Y]HmÐ*Ûúä¬Ù±Ð˵lzÅÿ¯H¼õÉAxïÞÀƒÉDóÙR\-•Ä—•dçwˆHTßòÏÙĤ5|Žvׄ٧0íÉCNñ'8^±?éaÀòâ»ç5Uìºfšäw ØÎagóoË*ìò¹ ð¼!êÜS4o[MÞ‡Ø^Pˆ s?ÌŸˆöëQbè? !„Bä^ ˆµ‰ÄvÈ›F,†ÚvUe¨iêLaD™fmNò ˜¶7¢hK³ìw±d³ïl„fÃñðB+ ŸK¬6_Ô¡²ž!ß�ÏgÂ/bþp wÉ'²‹·’l*£…a´ûæG‘ +;~…s$ñ9K´²Pžœ¸òNyh¿Ù”ò ’4vïešôžM×÷ø¤á>FßTX1ÃïÇÍÚíØ•äÄX®7D >a³v~ãY'š?ù 6ö¤-Ðã¾oáHæs•B!$m,A«C]g’«‡®(Ýd“™§û2¾Ô}ÛØ$ìú䕞À5ÇD’±‰çbÑ¡þJkD›¯Wuû°µú<Zß|Í‚ÛÉ®–ÊÏ Tiáô²-iÓÕ»°ÍðK—ëQBJ£½¸v{pIOÝêô>Ï=»Œ} ?ã÷»h(Z 5eÃÉ-u’GPf÷Ã|SÄe²š³Ù\Ž yÅØ­ÕB[ZÚ‹RSt= ‡HDàzCÔ�¼Ös8zº6‡Ië8fõ"0Ö]ÉYØè‘ !„Bdõ ÿ®ýOâ¦uðé#<Š»×e$)ɦT¦‡†ðçÒS™}‚¦½zôøÔ¹-›Y¶ÐNt2cp5O1£3±WgºÞl-"æ… ¸ï„Ëj“÷/Ñb{¥üÃî‡ù¦†]×LËÌ; Spw_‡¾¦Ú²JÔn£o,Åç6¼nˆ:7„›bݤl¨½$§VB!„¤‰õ~Žê ßGô.=¾Ç…êÏaIj5ÚŒ8íèuûRl¬áýù6N-iŸÍ=…å²Óá—‰‰çòC Ú†"š -6ó#ê6%9ï“Cc½èv¾‚Çv›«¶lFFzÚPWkŒèu«:TTè`Y•Þç�|#¯àãp­”læËg²é½k–>YH±kç QÌ{¶£Ú½·¥ý\*ܬ•B!jÆÑ&3ϱ\æ­OÄ!yΦØÜÚ¤ÞExmËfbô`ܽ:k OvEÛ,Åû0ßT±{1Ó¤¿cºÖùÞõn××áÒ’®ú¹§·qù-¿Á!„²ÄíÆ·0õG÷FÃè7}‹r'›qç[^†}$™ßÍÎå+~ùWôb3Žß1ÆÃˆ¶4ñÚ– Í)l½ÓõîôçÆÜ«ó Új‹ŠÍÞ‡ù¦ˆÓdóTW6Âñ¡cú¦ …E5hI²kï Qçç5,O¦5á§áo#„B‘…€ÿ‰5Ïq áÕ0†ýr6L21ßRLÄ&& ëv  à¶-›‰9…ñ:–4%ªœ—˜yüóM»®™&ýýÀý*ú|v4í(À^ñ&Kê×¢ºa©®Á7¦ˆ§x¦FTnEuËcŒdÙ‡%!„BxÃz ¡¹`Êãøá"Ì¿E÷°º?¢¾p‹zç[f§mÙŒÌ)ôü½ñ—èžè®«8qâ6^dA‚Eñ™l†–À¾ ½î[Ür²e¯gðâf™ì6û’][àxCÔ) »—Lœ&ð¤I‹w÷¶Â¥Þ„BQ1ÉcósJPÕhÍ3dû*ÓÂqDön…•Ï·Ì>Û²™SsÎæ ›+P±ó£pÞÿ¶…Œá2Úmõÿ-Æe²9÷¬Û4k‘W¼ùU09`Þ»k4;`èËÒ'\Âè<s5-½$ÄBÉnb’wã;˜†à°^ÂIí‡(©¾€;½žUnt³8bÌ·´`DÅó-3Âû�–‡cK¯ÕÙ‹2¡LÌ)ŒÕ³ÙÓcÅ&lÔÛ!ëòGb›ûþ‰¡a4 ¶C«Ý…â¼\ÖÝ…‡zU3â¿þë¿päÈ‘ÐÁ’Í…³ã×_ Wú$'›A‡›·6cP0;pŸœyö¼-༈}†'òV@B!„·€¼iSlç°½Ö€¦êí(ÔžÄ%«ã«ÒðŽ7ßRüº&¹!™ÙJɽ(W$qNaœsÓÅÍÁä6¼Iלӈ-šíÐu>_|°E_s5r»Ú«x?¼¸ ã]Oø5ßþùÏ.»¶ìÈÏÏÇÿüÏÿ„¿+}ÒûJ¬Ÿ^îzÖc_À:9ƒ±î3,îC!„’]æŸq³Áçzˆæª¼“¿:ó¯ð*ÒÛãƒíLm’sJø‡‡ñjY˜Œôþƒj©ø^”2òüˆFSoÔ<]guÄ ují0Á½äWEÎ9¦&0¡H½_B˜†§÷..,C¾&ÚÐ=ª[·n]–l²:œ ҇Ѻnà@þÚe®Y³µ¯ÂßE!„B2!”lšžÀÕcAcU rBí® (®º€î%û).%ø‡a»uúÐü·k°:¼)t ˆ‰¢ó**b¶ûØ0Íc0­8Ÿ.�å t?vEË´u¢¹ò¯Ðµ÷ÀážL!&Ndó^”B`âdN®-Ÿ ÛöBÿóÃźÒ-&tÕ¥(3üzýÈüŽ)ÖË) 0>€.s#ªŠ7ˆ÷9Å¡¿xºêI6—önfªW“‘œl /ÌØST cä“ó ´?ü=Kæ3N ßáI¼ª®ð'z{•"A!„ìÄØ¿ºàx„¤¿è˰v!ÁËÛ‰ãM·`s­œ  ¾^Ë6†®»µÛQ“‡=¦§Xš&Å6»¾ù•_G÷à™/C§-Eµñºøï8ÆM¢Š·ÈPä±% êš“—Í{Q /a­y/ÆuŠ<äÙ0”g¼ë÷EšmÍx¦À´á¹Á«Ø•£ÁM>JŸÇ­…‡-Â4Æ'^Ï“JDönfªW“‘>Œ–­FûàgØÆ²uv¦–ªr?­ƒŽ=Œuœ>‚Òmçᘥt“B!™Æ´*¿îÅ\‹|6WóN/<I/Ì3ƒgÍ»¡ÑlCCÇÀ›!‚�–C'Ðö2™tH@ÀÓ3g7ªÉ#&¡_ Í›L[-2tÍO\щ™g�íµa´?ÿ킳½§Ú=êyŸÅ{Q .vUãBkĆ«§Q¶µ&úk·í2l ø g¿Eçpd]‰qŒøJèð¹í¸s©åeGÐhî‚sÄA…ÉæBïf&{5™4“Í |}Wpôà7¸ï™ ù7¸}ìfヽ°Ù‡Vi¢újpÃ\V€âÝZhµ‰Žã0΄†B!$S½9[P¡kE׳±4Ö¬Wò¬Y6ÿmnÓÑ”öÈŒ\¬(usðõ÷ãù²ÙçµKè u^Ìb´óŠÔÔ#˜Å{Q²©v†öêŒ4ŠÎÚm¨’û€o�}CSKêÛ,þèí_òÀƒ1<ë2£±f?ÊŠZ‹z†Ñ.`½›™ìÕdÒK6瞢y[Jëÿ¦ÓUØž«¦¨W¾--­ÌºÒsË.¢/”€ªÝuJøP%„B‘b¿þkð>K¼�O°·q{Ù®-عù l [qøûaªþyk+“ìÙŒ“(¦3(bïD½± Ý ôü¶zùò'2™¤ô^”2^Þ¡CmQIsh.eIŽü[Ÿxn J{ §£FžBuéSb ÏñÓÁ"l:xn y~תYVné%›Þ6”¯=ŒöÑ „Áfl]SŽÖ_Í8°S‡ŸìÏþÐшc×U}sÍ‹=gSøÃÞ&áB!„H€«i;òœŠhp/=Xü0ÌžDm“YŒõµ¡±ák´³-+X²yô(ï'Ùƒ€Çr Úã_DÿîˆéD‚ç6n*ÂÁŸžÇoŠ¿÷jÅfh¢†›~ˆºŽçóq<°=xª®µ?”Ü‹Rv~¸ÌUÈ/܇Z6­¬þJóÖbMn9š2ï©ï1£,4¿xéˆÂ=8dÀœâÉæ <ÝW¡×}‹[Î ±Î‹¯mwqÇþ2É{*û¥—l²qé9:ØÄR ØtÈ“M³­ ¦¡Å–©Nԟˆ­ObÏÙ<]½ Û OÄíYx~:ŠM›Žâ'OrÓë !„B’F™œÅ<ÄöXÂdS*ÇäïZÒðgÇüt¢•“Í�^¶Uá]­ívwxîèü#½0Lvî(‡Ü‹ruÌÀk¿Æš ñZïEe½wBÉ•ÌÆzÑý4™-u”1ß ¿V¼'¶¢ ¿ æ!Ì{7bf }2'â*‘^²|CÑçèœæ“Íõ èö9`Ü_6_‡ÙôœÔî@]Vl}’`Îæ!3ç(Ù$„BˆœX’wµ£á×¢€ ºr3êM »þ3™“Í Æ=ÂSIÝt>Øt‡Ñ¼l‹ÔçŽrEÁ½(WÛCÒvF=ët1 ¥ýß),N%÷,Ç–$µ~<µX`_® Ð> [›1(°aê—ñÉ™G˜£ 8/bŸá MÃ¥¹@ëNo@ƒu£ÖcX»Ù�G0ŸóêwäC“ó òÈü·ZhÎ&!„B”Ä’ÍÚèD,åd3ÞÂ<‘Vcá•×p™jÑÐ9ÌpãÎP[T“K]+x¾‘Ä^”ª%L Ï¸¹lÉÂ}øìÓ­ØTú1vT\’}–x«ü®y5V¶<°~þ%¬£¬F`=ö¬“3ë>ƒµoy“!i&›"±â9̧QYq×K»Ñ#WS9aŽ;˜Í·Ðíö‹¯'1øà6,wzáÍšw !„Â/–lŠZh&´fÆ_t°ÍÌE˜ìBÃæêÐz±‰ïk¾eÔ±ðJLAx¾‡SK2Ö¹§°\¶#éÁ¢~šË6…‡ãîFiA®˜<¬C‘î!&ÕÜ´Rª÷Ofl듚õ(Ñ?ĘØö Øô(7»0ë0â°IæõY<m¨«5FïëzU‡Š ,v¯âÉæœëä¯]’³c3j³b„§té'›‘²ôæš7kÍnÔµÁ/žç3Ó~äæ” òø”‰Š4›B!ò0cÓacá ÜìsÁóì!ZªÞ´k‘WzõºÏQY¼š&¸â¶¾YÂo¾eä^x%üSÑØ{Ä™;ºáx¸w'9‚ß…îkzÔ”—¡¬òo0´= %2ª¥dïŸÌ‚v=6®Ù“{~ºØ|²9Ÿíœü½w1Wù‚£©zûdøµr„fì)ª†126ß@ûÃßÕµÀ•Œ¤'›Y|s…íЗµ`P¬0Âhj6¼‹2Ó�ÂLe_†I"„B‘•¿†’õ‹ÉÝ;{páö?P–«™½âÊ ™˜oÉzGu¨¿ÒѰnÅUÝ>l­¾ ûH2¢ ¼woàÁä’@Rí匢½r›~ }ÑÎ7=Þl½–¼÷ßGžf†²zÚÑdvDÏ…u?A[mrx¦êmGýÁK°EæägNibÜÊ(ÉÉfVß\ ÛStŸÖßÿƒŽ†hBOîfáwYpèÐ-¼Tý B!„bËÓæú*”•Ÿ€±û…ØÐ¿6>»­ƒã«±H¡€é¡!ü¹´í3ûM{õèñ%3ª-s½£<Q´÷Ov¬îuá»/a²½B@<×¼¼¨½öDþÞ»xs65%ÐõŒ…¿IA¼Ï)Mˆ=<ÊÀVF+œlf÷ÍÅáë»8ÿäPó!NÜ÷`ÆuçÙÅh±aŒ’MB!„¼ÄÆéaþm8ª§Éíüõ…[’\I–5pO ò›+½£WðMe1Š’îå’½róÞǵ¯–œÃ*õÞÅÚ¿´ë*Nœ¸< »öü€êJ1 èé7}S…¢´p0§41ñ^”¼•Ñʤ£Íæ›ë ß+Œø"?�ðûÕŸJB!„wAx;:лB§_°·Þßxî–Fèš~„“Mu x`»Ý»wé6$ñ°Æi¬^I r¶6%™xðãUÔ·á{ò-v¼û Ì®dcႽrS²÷.æœÍ 6WD-˜¥ÿp¿ŠÎŸM; °×<gî3/21´~eX (‹o®D6œ©¸—š'³B!DX’w¥Õ§¢‡»El%Ùà ¶>™Á³æÝÐhòP¼½ùf ´bo®š’óèó'Óžã¸ñ ¿ü+º§É>€I CàílÄþš+ê]ïƒóý %Q²÷.VÏfOŒ›°QoÓ%þÞû8³¿-}KwëàM†V—^A’Ílçƒój%ò5±žè¬CaÍUØ<lûVB!„9ÄëQ\z”'H6§á0”bkóob›e͵8c›}Ýiü G2MK‰ LQ£g9UÏÝ[’½wqÊUSp7Õºœ/|®dpþ4%›+a«Ñn,@¥áZøiNø¸®ƒvKx©ã;ŒÓ/!„BdÁ…Ÿ¡¾›%‡ñ1a½‚â&›¬Ç¥ŸŸº‡QÖf™´âØ1+&^të*Ï·d;´œÀÁÆÿ†gvîþçó£×c´?†}pLŒð-ç¹…úúKÑmÅ«§Q¶õ¨ æî¥nÕzï<?¢ÑÔ5GØãy,Ì�ñsEòêÒ+S$Ùd³zÌÀÓñ ÎÞóDßLbÚxä¼á—„B!ò`ÉfíŠ ðS˜ˆÛŸëæáØ#µ6ü “ñû§æž5cÛÚ¨¿Ô„Ó•!wÍ:ýý"¾Ý³1üQfì}»÷Œ»ä>VMU+!ˆ@Kydbué•Q²™€JçB!Då’K6›Å ó§(ªþGD/†xXîà¡Ë— w*oÛ§X[ÙŽÑÐÂ,cÖ„_Ûj°SwöÁaxÜtèNášëuøgÞB1÷ƒt ½¾˜ý ‰<|p<O¼¨•ð‡½^k€ø¹"yué•Q²I!„Â5–l@‘ቘ2Jƃۿ¦¸mûÝåá„É›® ”lÚÌo¶½cå§:q.CSUŠ7g3g öÉð7‘¬ã¹*í1œŽ¹h×üqºz¶I½we1o/«³)­.½2J6Ó öø !„¢&sðÙ/¢²ä쬿†ÏêntPTÛ‰©p²¹¾¾ >ç%ìßÍ­­0]øÚ-õ ‡âF‘¼ ‡<·¡3ÜEO䪩¶^<ýc~š_˜>Þ{=f”åc÷²}*—‡Ì”u%¥tˆÉ¦,«KG£d3 ”lB!dõ,ì³9ÿØs¸_Ån|'Þg3ˆqGGh謥ÛYñµo° m–ŸWNòƒ0= «wÖêMØlx‚ 0§¥;òÖ!‡í¯^f†'üí‰eb &1>µ¼ì¶FT˜Äf½ÚÍbÜy&ÃYèôÑÖ=€ñÕH¢yï9ëE÷Sø…ÚÄ[]Züº&cu–’Í4P²I!„ÕÆ»IÝgs“Ö:|P÷\þ fŸ™°'÷]WV£¢¬qÅÅ@_Ì QQwŽ¥{a¸öõ$· N&¶`á¿W+6C#¶Y;1êÐ|€S<ì-Z]±¶\‡Âº»ðÈpòÞs³çuôöëÚmlgjare&‰¦d3 jŸB!jonÕÒ#Ñ>›S°ë¢yPl /a­yï”]ƒ+ðnÓÑŒ-’Œ´·`áXÐ®ÇÆüJZ#_뺽ØZ”É‚;ŽÑ 1ñKxÙ†Šw÷@ßn‡Û7_¿ÿKô™ŽãPÛ°¼çÄ{ÏaÌžWöàg Ž)± žã§ƒEØtð6<Ü]|~çUTä¯ñY²šÂc0Ù†!u°%›iP{ü„BQ–l.]Ö s¹¶7¹%›OY› ÙdÃW¢ÁêÄ@Ç(Ò¼‡ëK1i€åÐ ´½Œ÷s™–þ,\ <GÇî-™;´ŸÇ‘¶áWê°ÃÎPOt4ÁmB™Ü+íòÞs·çu™0Çu²É@#¿òk´F< 1›/C§-Eµñºøï8Æ¥íÈAÉfÔ?!„BÔ$ɦ˜øza,c{c®Cá‰_àùÖóg¡Ó]…mLZƒ2yénÁ¢Yº'¤àúŸ4ÜÇè›!³ãý¸Y»»Lƒò^3Þ{Õ>gÓÓ3gÅÏ‚¨²“ÐÆ/Ðwþwj(ÙL%›„BY=1’Ma&­Ý3 ­Ä•“Í€##>y{£V’Ö,D9>8›Ë±a¡¯´�9b[XSt=“2?¤à¼çPwàNèaÉC¸g¾gxÐöîØ_*{%%ïÏ·Ñ=ñZüW„¹§°\¶#S³§)ÙL%›„BY=,Ù<ˆ=f×|/Ò¬ ÆT–U FÿúØ0·À�LeWN67_?ž'-«öVæeU{Q˜‚»û:ô5ЖU¢Îp}c«°þ+ï=‡“VÔ|ð9Ú]SfŸÂ´'9ÅŸàxÅ~èz’[2K9 æ‚o8ë(õl*FíñB!DMÄÍfÀŽÂ2èÚƒoi6ý͇¡VwöV••Lò™b×r Úã_D ‹\zD “T±¬i/úÿ€ûÕò‡ÂHÊ{xï9 Ú¿FYh>k£ÖãØðNyh×U™Ï*»u¨¿Ò1¤½Wuû°µú2ì#™‰ž’Í4P²I!„U˜„»·î´–‡”°Ïæ™Ø#“õ¦@^ñ®%Ã"—áa’áŸR£¬i/zn¡^wÝ‘ÿ‹Ç̾̿Hw6ÇsøäÚ…óžÃ¹g—±¯ágü>p E뱡¦£Â\–:ùWê•LÀôÐþ\äì4íÕ¯¸R²(ÙL%›„BQiûlÎËÄ™AŒ=z„§2OõãAö$›fhÅsaçûÐ §äï°z’}h‘<î{… ô÷!W,Maî{'ᲡÓ}‰Û+ΓÍ�<?\„ù·ax<ž7‡Ûù#ê ·dl"J6Ó öø !„ò¶ÉÌ>›Ò÷Ȥ9›ªãùúæÇpG$$ìxÞ~»¶p‚òt§îfüš©£ç0�ßÈ«èÞÝÀ ürõöfL¼9›älm‚}:3ñS²™µÇO!„·M&öÙÌÄ™4gSubîu |Ýéÿ% 0zõEg"¶âÉ•öl¨0 (ßóšx/Þø †_þ5<ÚfÀˆ?sØ)ÙLCÖ|xB!ä­!}ŸÍLì‘Is6³ÎÜS4oËAnÕO2õFsÜsèïÇÕŠÍЈ×:ôÐ%òÐ|€S<LÜ2K@`bS2#%›iP{ü„ByKIÝgSò™4g“w©Ç=í_ó«¯^zƒv=6æWÂÐñðE<®ëöbK行w£ÜöÀ®J6Ó@É&!„BIäíI6eÄ{Ïaà9:ÎpÏöíçq¤íEøÕÛ’Í4¨=~B!„"/µ¶yŠ[=‡B û.|¯Þ,øôǸÿM9 ~¶Ãá™–\¶”l¦’MB!„’%›@=‡2 ÂgÿÅš÷Pvºíö—ˆ©åìà ,Xªk4¢®ã¹¤áÊ”l¦’MB!„’%›¢²žCõ\wS_@ÛìÄlø+ð÷ÂP²^<‡T›íp=»Æ]5I®V›"¥AÉ&!„BÉf”l¾ÔS~lïÝZ˜Ü ©¦.S9ÞYóòëþ;¼[=º6é}xcQ¤4(Ù$„B!ÙŒ’MyP|™Â’Í£hœßCUí@Í ÖäD›g!€MW“ëuøuê) µ'kjŸB!„ÈK­íEJæ¤QÏu0m;‡mU—p¿ë6 åçbghX-[<È »¹…Ûš1(a³"¥¡ödMíñB!„y©µ½HÉœ4ªºîÂúš?E¾†m'³% ðÄÌrÖnËÂê¿pŒ§¿‡ª"¥¡ödMíñB!„y©µ½HÉœ4ê»îó[ Dn}’IŠ”†Ú“5µÇO!„Bä¥Öö"%sÒd[žìí@‡—z6WU¶U"B!„’Yjm/R2'Ú®»à†­ý2 :tËŽÏQY|fm}²ªÔ?!„B‘—ZÛ‹”ÌI£ªëîw ¹lc(æøG9%›«MíñB!„y©µ½È{Ü_¦1Ú~©øž½„- ´Ì,^µ_Æ”l®.µÇO!„Bä¥Öö"%sÒ¨çºû`ÓUÂèô‡_Ç&LM`"f"šEJCíÉšÚã'„B!òRk{‘’9iÔsÝY²Y+iˆl2) µ'kjŸB!„ÈK­íEJæ¤QÏuàeÛqjÿ#á–'«a û©gsU©=~B!„"/µ¶)™“FM×]ðÙÐXVC{œn<ž¥Ç0úMßâÍÙ\]jŸB!„ÈK­íEJæ¤Q×us Ý¨Cuy´Zí’c; r*ø[–²ÔCI±âIõPR¬xè ƒ:è ƒ:èXýCmx™â[Mfº-¸Éc²)…Òém_n¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð·Ëê¥4ª¼o£pvZ`Ôë Ó5Âhþ½žéù¹œÁ�$,FKÉf,o{ürã=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸ÕX†T/¥Q×5ðüÝŽ¿„âŽ:4 ÆÜŸ„D“‘¥4¤²ÔŸ—êm_n¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð·Ëê¥4ªºæþ^JÖC“_†“̰v÷ÀfëA·ÕŒ '˯لƒí/®V»YJCj!+}‘ÞöøåÆ{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“Oq«± ©^J£žk>‡Ië1¬Íÿ¬Þ×á¯EšƒßeAÕga›ælë©…¬ôEzÛã—ïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®ùìú°Ó4˜ çÒ'~ÏAÓáש“¥4¤²Ò)õß?ƒWžQ,¬Ó¤¾øWïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®¹6:›/ü:–�<æÚ¾'1YJ#ºƒðvt 7~G°·ÞùoRú"Eÿþ<êÏ"Ù'0½Oø%_ñó‡÷øQsìŒã§ú, ŧœl>·HTÇÒGe'žâVcR½”F=×<ˆÑöÏqÔ:~Ë8ºë£yp&ü:u²”Ft!³Œø0J«OA§cËéÆ:N¡ºôð› C•¾HÑ¿ß KM-.´ša6Ç:ZqUW†\­™’Í$ñ_"jŽQcüTŸ¥¡ø”“Íç‰êXú¨ìäÁSÜj,Cª—Ò¨êšO?Fã±V¸bím"LÁmý;Š?0Â9þZd)èBfÉfyèk‰rÕ%›­ªQ¨c×lFÅÕ~øÃ?ÁWüüá=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸ÕX†T/¥Q×5ŸßúäüWpÍF$œ³¿£ãÌ!쩬ÅiÝUØÆV¢š€,¥]Èb²ùÃX'"‚ Ø +_ì dݸÖ+øËd3Ö0Z¶:ÓO¨+\‡5¹{ÐØõâÍ|M†¯øùÃ{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“Oq«± ©^J£Æk.‰§ J KiD²˜1OL`*²wvY²Ézj'0îÂUú"%þý3ðöüe¹h O íÙ䲜øŽ_y¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð·Ëê¥4ª¼o£pvZ`Ô³é0šA¯gZÒþš d)¥…¼,[Ž‘l"ÀÂpa¥/RÜß/LÀiþ …šu(¨2Áá‹ý €Ûø9Á{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“Oq«± ©^J£®k>?ŒV·ã/¡¸£Í¨1÷Ã'1㔥4¢ 9�ÏM ºg""]–l ˜é¶à&—ÃhÃÏamØŽœ5¡m|�OÔDÚ�^¹ÿ 9›Iâ=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸ÕX†T/¥QÕ5÷÷ÂP²šü2œ¼`†µ»6[º­f\8Y†|Í&l!©‡S–Òˆ.d¶@Ðäï‚V«?v#/·�¥ ¯µ»Pœw€Ó‚ÄŒì1ŒeůoDYÓ<óxà‰:zajü‘V£Mïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®ù&­Ç°6ÿo°z_‡¿‰­QcAÕga›N?Ý”¥4¢ 9F²¹ìà8Ùž£ýľ1G,y.£­O’Å{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“Oq«± ©^J£žk>»þ#ì4 &è¹ô‰ßsÇtøuêd)èBŽ1Œv £MhݦŸ)ÙLïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®¹6:›/ü:ÖiX»Â÷$&Ki,-䤖Óå~ q':ÍFèu:èôF˜ïõÂãg»œ bøÁ7OøŒŸ¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð·Ëê¥4ê¹æAŒ¶Ž£Ö‘ðëXÆÑ]̓3áש“¥4¢ 9oGzWÈ6ƒ½èðΓÒiùïŸçþ9ìÈÕ„þ[ä¡)ü fçDT÷óòŸ_]Jÿþ•ð_"jŽQcüTŸ¥¡ø”“Íç‰êXú¨ìäÁSÜj,Cª—Ò¨êšO?Fã±V¸¢> ¦à¶þÅád}ki’¥4¢ ™u¿Fiõ)èX`ÌãªKs»@¿ï<J4k‘¯ýÌè¶Ù`³uÁjþ'µïA³¡í/çcgøŠŸ?¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð·Ëê¥4êºæó[Ÿœÿª®Ùˆ„söwtœ9„=•µ8­» ÛØŠcTã’¥4¢ ™%›å¡¯%>Ê9M6G`­Þ„üÚxãdý.K5>Ð=ÂÂÔY¾âçïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)¯yRSÓ$KiD2K6¢¶s4ü:–QtÖå3Ù Ú¡Ïû+L®XK‡½þúçá_%®âçïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®yêSÓ!KiDr2«±ÕjùL66èòt°-Ž’Á s¹þÍ÷p?‡x/5ÇΨ1~ªÏÒP|ÊÉæs‹Du,}Tvòà)n5–!ÕKiÔsÍSŸê˜YJ#ºÙJGŸáãD{¸ƒ0}üÚGç³f¥/Rôïÿí‡`L03vº õ»[0>A¾âçïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<Å­Æ2¤z)z®yêSÓ!Ki°À" ƒÍØšížXËæÎÀÓ~ù[W:Zúó«-ú÷ ˜¶‹c×ÄK²œàÿÖ†R|`ìÇB:ÊWüüá=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸ÕX†T/¥QÏ55ú4z´æÒѧé¥4–²àFÛþ<h ª`h{€¾Áax<Ãì{€6C 4¹ØezÆq²&&Ä÷¾ÃW¿c6ü–„κ~Æ™ªrTÖ~]‹ cÔ³™ÞãKDͱ3jŒŸê³4Ÿr²ùÜ"QK•<xŠ[eHõRõ\ólJ6E‚÷ÎìøKè¿EëPXwžˆ•^cýüjb¿dè|Qã~ÉMŽå!~žñ_"jŽQcüTŸ¥¡ø”“Íç‰êXú¨ìäÁSÜ<–!‹Iê!§X¿/ÕCN±~_ªb$›ÂLZºg’ %›Œà†Íb@]å^hµ{QY÷5LÏ–$uñ~µ°ßÕ§†‡øyÆ{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“OqóX†Rc’ûœ(¾Õ’̓Øcvͯ«3ëB§±•e¨Ñÿ€¾ñ ø-0•ä=ÙàÆ«% %;Á‘Þcпì?(~Øï§dS>¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð7e(5&¹Ï‰â[-sðÙ ØQX]ûoË:ÿ0ý͇¡Vwv_‚…RW ËÙF¢˜5[Î@÷cl6[ÄщæÊ¿Š'ׇ{Rü®EJ_öû)Ù”ïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍcJIîs¢øVKxŸÍ™I¸{ûàŽÑȨdŸÍ•–ÕÝ€’†Ž7ó6Ù×”Ä~?%›òá=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸y,C©1É}Nßja9ZVì³)žÈóh~â‚Çã‰8Ð^{Fûsñß.8ÛqªÝ3¬ôE`¿Ÿ’Mùð_"jŽQcüTŸ¥¡ø”“Íç‰êXú¨ìäÁSÜ<–¡Ô˜ä>'Šoµ$Ó!Èî÷Ù|új|7¶¤ûuÎŽ£k>¡¯Ïb´óŠt¶ÐpÚèŸ_}ì÷S²)ÞãKDͱ3jŒŸê³4Ÿr²ùÜ"QK•<xŠ›Ç2”“ÜçDñ­–lfÅÖ' ²æ Ça bîY3¶iòQE=›¡ôï_ ïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍcJIîs¢øVK6%›–¨üæ Ìfsø¸‚o*‹QT}ö1ø€¶O߬‚¤ôE`¿ðaFBñxð³Å†©pl æžÞÆeûdøU4âçïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍc¦Ó8š;á ¿’ûœ¢ÞßÛ…öÞ©ð‹8‚´wxÂ/(¾äÅH6Õ¹Ïf¬­O‚ð=ù;Þýf×Løk‹”¾Ñ¿_Ìðµ9¡¯El¨éÀè’$”‰þùÕ§ôï_ ïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍc&ÓüžÇ¸e¨BA™ é’Üçõþ *JàtÌÅkæÓÕZT˜Ýá ø’ǒͬØg3–�¼Ø_s}¾åKé*}¢¿–z®¼é•eG te»PÝò8Üû¯øùÃ{|‰¨9vFñS}–†âSN6Ÿ[$ªc飲“OqóX†+Æ$ø1âè€ñøNäiÂ,Z¥’M3´ì÷'<r U,Ùä/¾äeÍ>›óÿ0l·.Bϲ|Ãe´Û†g;Å/Bôï÷ahpd>ãCÀ¬ãöêŠÿu9¾âçïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍcÆ)0 §õNj߃Füž59%¨j4£Ëi‡Ùð“BÉæ­ÞˆvøòaÂD'Œ?(•lò_ʉ÷Ù”J–³]Zˆ‚¯Ʋâ×sQX~Ÿ¢Tû1*Œ½Ë³h‘Ò!ú÷»ñCS~‹Ú¶…mÕÒ€Â]ÌE„øŠŸ?¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð7e“€Àø�ºZu(Ë_+þ7 r ÷C×Ú…gã³o¾'¾I¨ä>§¨÷¡ñ©ÈQ1æ ÓŸx~Añ%/oGz—2ìí@‡w…oJ@–³.Ä×p™öB£)…¾g7aަ˜\‹…¿@é‹ýûãÍÙÜ€­†_1þ®HÑ?¿ú”þý+á=¾DÔ;£Æø©>KCñ)'›Ï-Õ±ôQÙɃ§¸y,è˜æ`Úõnèkšüýø¦Ã‰ñ@â.¹Ï)êý… ÁÈxb$sbÒˆˆùm/ylÎæa”VŸŠ9×tþ8…êÒÃKÎ'5²œmt!NÁ®ÿ�kv˜à•óÂEðŠÿ_±d¹ÝyJ_„èßïÆ ¿ôØ`³-ö§^• æïñ%¢æØ5ÆOõYŠO9Ù|n‘¨Ž¥ÊN<ÅÍc.‹)0 —í6Œ'˰iSN^º »{RLEb“ûœ¢Þßó3LÝáLŒdnÆÓM¥†Ñò_òX²g{ʨ£œ÷dSÀ´½E[šà˜eÙ»%x¿`#4á}6—ŠþùÕýû_cb܇ÿa«qÅ ÿ, -í°y¦#ÆgGã+~þð_"jŽQcüTŸ¥¡ø”“Íç‰êXú¨ìäÁSÜ<–aü˜æ‡Ôv·ÇñÒ"UèpÕj‡{r÷Z~QfëeyÅØ­ÕB:v¡8ï/((Ý~­Åîâ”)¸@oñ%%›GQÛ9~Ë(:kòžl23ðt_Æ—ºïa›„]_‚¼Ò¸æ˜ˆ™°)}¢¾¾‹(ËÕ`MΔv�Å›>‚vGŒ}jˆŸ?¼Ç—ˆšcgÔ?Õgi(>ådó¹E¢:–>*;yð7e˜TLlEZgÌQœ#¶\6:™[~ð•l.?øN6—ì³¹L¬aÁ©‘ålc¢jW£aÚ™MI#zÆfÅëbƒ®\¼áfŸ éðu¸bœWñsˆ÷øQsìŒã§ú, ŧœl>·HTÇÒGe'žâæ± SIðÙÐXwS¡dsé0Õ¸F·Ãhƒmÿ ›ãŽÖ åA†ö#Q“%ËÙ.-DU¯F´C¿1;LCób!Ùôý º’³´mx/5ÇΨ1~ªÏÒP|ÊÉæs‹Du,}Tvòà)nË0:&~¶Ø0µ¤=>÷ô6.Û'_œÃ)÷9E½ÿËûh{<~GðÿCÛOÃá_*„ÁflÍ?ŽvÏLø+‘fài?Žü-F8Óßfs5’Mµ¯Fˆý–b‹á B @³d3ï=ä­Ã†šŒRÏfÊx/5ÇΨ1~ªÏÒP|ÊÉæs‹Du,}Tvòà)nË0:¦x».hkçF½¿Ç‚ŠÒ#8½l•ÔÅãtµŠ £å/¾”n´íσ¦  †¶è†Ç3ŒÁ¾h3T¡@“‹]¦gk®F²©öÕhEèþNé1Ævèó6¡´ö:¾Ø]ÊÜÅÏÞãKDͱ3jŒŸê³4Ÿr²ùÜ"QK•<xŠ›Ç2ŒŽÉ K½WÌf˜ß-ЕíBuËcŒ(žlš¡_³¯Å?r UpÎ&oñ¥Jð>À™Y3;Ö¡°î.<+l…³YÎ6ºÕ¾mꔎŸwj.µ_[5ÆÏ{ÌŸ4j¿§Éæs‹Du,}TvD Ñ×Õ‡¡Á‘%söÌ:.`¯î¡ø_—“»^D½¿˜Ìýµ¶ñª ˜ê<…¿*˜lò_òÁе­­c1 ®r/´Ú½¨¬û¦Îg1§;¦J–³]^ˆj^66Á?�‹qqèHüT">©¹|Ô~mÕ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ%D_W7~hjÃo<oœí (ÌÑ)²6IÔû‹É\¹Îöf¾h,›å &›¼Å—¼¸Ú>ÇžÊÛºáñÇÌˤ’ål¥¢Ò!þïÀç²áVÓg(Í[µ t$~*ŸÔ\>j¿¶jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ìˆ¢¯k¼9›°Õð+¦Ãß)úç3/êýGÛQõ±)æîóØÚ0U¨jÿ3üšâK•à ÇýkÐ×ìGy&¶·ª/QúœYÎVj!*}–þþù‹pºŠ-Èÿ›&¿ '/\B£áõl¦AÍå£ök«Æøy™â“Fí÷T"Ù|n‘¨Ž¥ÊŽ(!úººqCgÄ/=6Øl‹‡ý©ãþØ ‡Üõ"êý…ßмõÔ´»cô x~BMþNþð×(¾ô‰ñúܰ߹„ú -ÊOÑÖíĈ_Êò@âù†ÿ?£¤¢Ò!º½Äýº"hÖ¼ƒ¼2Ì]M”]缿•ˆj.µ_[5ÆÏ{ÌŸ4j¿§Éæs‹Du,}TvD Ñ×õ5&Ƨ—·g6œ©¸WŒÅaä®Ñï? OÛAäjŠPiøúç‡ú>Áƒ¶oPY°ïì2Á‘½íñeÆü#Nt·ÇqínnJ{EZYÎVj!*}–ÿþYŒ;­0ÖF­ñz=SbæßSã4Œ6 j.µ_[5ÆÏ{ÌŸ4j¿§Éæs‹Du,}TvD Ñ×ÕçÕJäk–£eÇ:Ö\…ÍŒFÿ|æ-{áOtù¹Q±ÍšÂ“èX²G䲟ϰeïÏY|É ÂÛÑÞØ›k¼ìý 7]±öáLŽ,g+µ•¾q¿0G˧ÈÓ¬GÎz ÍÙL“šËGí×Vñó3Å'Úï©D²ùÜ"QK•QBÔu Ú¡ßX€Jõˆ­OÄãºÚ-Õ0²ßq`<"Û”»^Ä|aÛ ê*Q¦Õ¢¬òoøÆô�ƒ1¶!|ÛãK^�óa”VŸŠ¹?èüq Õ¥‡aö¤?‡S–³•ZˆJ_„èßϺ‘ûqßô%ªŠ7ˆÿm-òµ'q©ýÜj³a,ü]‘ø©D|Rsù¨ýÚª1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲#Jˆ¾®3ðt|ƒ³÷<ÑCiÅ$´ñÈ-EÖ&‰zïXŽ-æëÇS‹öéåC|™·=¾ä±d³<O⣜’ÍL‹úýÂ0¬ »§YMÁ\µ¿Š18ڪDžóþ÷0°'†Ëh· û~sAéë+…šcgÔ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ%C@`܉û¦&èt0¶=ijñÙðKÆúžeóÍ„?èõ¦ß€Ž"L ¯å6þ7<³“p÷?ŸßŸ00†AûcØÇVl;®¦èëʱéÂÿ+¶!›nõ‹q³×6Ü¾Ó oœÍüå®Qïï1C+¾f_‹>ÞCõå’$o^ÔÏË êý9Œ/yb²ùÃX'"{_Ý0—ë#¶¼ñÁ¦«¥d3Ó–ÿþˆÕ™*ËQY wìt[U¾gSø÷O|Í r ¶C«Ý…â¼\ÖÝ…'·„Òø¹ÉR§æØ5ÆÏ{ÌŸ4j¿§Éæs‹Du,}Tv+àw^EEþÚP, G¬ypñ¹a©*ÇñÓÑÃOWïÂ6Ã̲^~:ŠM›Žâ'O*I좹gÍØ¶vê/5átåGÈ]³E¿ˆo÷l ǼeÆÞŒlŸ Q×uî)š·­‡&ïCl/(D…¹æOÄsXC/×P]õó2ˆzOêjhâ{U‡Š ,v/É&ñ%OÌo&&0$%›«‚ýþ‘¡q>ÂÃj¯ÖcG…Eñ9›sN#¶h¶C×ù|±730оæjlŽYÉ•ÆÏM–:5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲[0Œ¶Š"hõ?Âîžœïüé3áà¡[x™T#Gl<— x·Zí’ãƒsR“Í ¼mŸbme;F1ƒÁæ±Fk¯m5Ø©» ûà0<n:t§pÍõ:ü3ÊŠº®Á'0lÖ¢yPLÞghþä+ØØðÏ@?Œû¾…#Æâ1r׋¨÷ŸÆàŸK¯ËM5ÐÛ'íñ¥-0g‡;ÞyUÍ]p…æ›N »þ3J63ýþè¬>–�^¹ÿPä‰O¤ Ã€Í;Lp/ùÀÜ&”él¡fajõrr{“%Aͱ3jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ìV°A·³ƒK›0ÂLe_®ÐN[0‚G݃bJ(—ùyo9¡6ë*%›6s#Lî…$DÀTg#ÎÙ|á×ÊŠ¾®x­çp*4äs“Ö/pÌêE`¬ º’³1ËXîzõþžv4™óÛ‰,î'h«- —ùro{|iüÿcá<^Á˜‚ÇÖ‚ªüý”lfûý+'›ñ­fü‚φÆm{¡ÿùáâf¼Ýwq©ºe†ŸC¯™ÅŽz9¹½É’ æØ5ÆÏ{ÌŸ4j¿§Éæs‹Du,}Tv+aúä :G#zŽØ:7O ˆí]˜TÃf ÃîÑåm Á‹Þ‡C1; RÅüÕvŠ¿i>Ù\_ߟóöï?ƒæÖV˜.|í–ztNJÛ?S¢®ëÜnØ ø5öõÅCƒ µ÷«oNîzõþñæDjJ ë‰5™âK…ÄãD§¥¶§‘Ði%ËÙJ-D¥/ûýªI6_˜±ç•|É¡ÙÖŒg||Æ…âQ+5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲[ ›³Ù‚² ùáa°ÛQ£ò[ņ|Œ2&7,õø±»gñ¡<;6£ò#Úm¸}é÷Ú„a>zVï0¬Õ›°ÙðAaNKvä­CÎûï#¯,övyJˆº®‚ æ=ÛQm¼¾8çP<,íÂÃ(—“»^D½¿çGè¿D_»®«8qâ6^p±€ñ%/�Å�“+\â“ål¥¢Òý~µ$›À+tžýÃÝ÷±Ž_Ì®|%ðs“¥Nͱ3jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ì’1¿»×ôÇP®Ý‹Êº&´õý Ÿ?ÙVfmNè\â9ÛÑ`}.©$øú`n8ˆŠºëp,MÒ‚N\ûúAÌE%•ÀÎYðõ¢åèQ4ÞŽi1¡ÿ¿¯ ŠÉ;[ùwv[/¬øË~^NQïsN$›[Š8£öÞöø’7?|MN ª-°y¦“|€“YÎVj!*}ØïWO²ÉºÀ'á¶Ý†QÏVX3 ¥ýßðø9éÆŒŸ›,ujŽQcü¼ÇLñI£ö{*‘l>·HTÇÒGe—¦€ g*®Á•ÔÐ>7nè¯á‰{ÉCøçí¨Ým„ýÛí@»Nö m…"ø‡a»uzN·¤c×õYón¬-=‰KM_ rû_B½Å¿òöäjBÿ}Mî>û&”OæbõötÀX± õö˜C@ßöø’'&›7¾ƒy`ë%œÔ~ˆ’ê ¸ÓëÉh}•ål¥¢Òý~Õ$›lo'ã>ä²­O ÷á³O·bSéÇØQq }q†?(Ÿ›,ujŽQcü¼ÇLñI£ö{*‘l>·HTÇÒGe·œW+‘¯YÒ:Ö¡°æj½1±÷ÙŒêm ¼Dgý^è2°€ë14–±-OrQX~Ÿ¢Tû1*8Ûú¤­¼�•íŠÿ†æ­¶õŸh;°ºŸ~Å ˜€»w¡;Ös^,ûy9E½œ9‘š‚£¸98þ¦hQ?/ƒ¨÷ç0¾TDÎÙ ØÎa{­MÕÛQ¨=‰KV'Æ3°À¨,g+µ•¾ì÷«fΦ˄šõ(Ñ?ĘX!6=ÊÍ.Ì:Œ8lbC"øÃÓM–*5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲[AÐýF1)2\‹šOh¾®ƒvK5Œìßw—ÔØ™ õòir«3гù.Ó^h4¥Ð÷Œ`~uZ¶GáM 0q´õ‰Y[<Ÿ\³sr 5wÂÜ`ŽØÝ`TLÀÏÇl Ë]/¢Þßó#M½Ñ½Ò¡•Rã_ô·=¾tÍçnö/ø\Ñ\U€wò÷Bgþ^ I§,g+µ•¾ì÷>ìÃH¨\ÅÎÓý94Ýê‡O`¯m¸}§7nÁ¯füA»×ìy³¼ö|E‚Ïv%q–\V¯7Y2Ô;£Æøy™â“Fí÷T"Ù|n‘¨Ž¥Ên%3ðt|ƒ³÷<ÑÏÅ$´ñÈ-xÃ/¥aí:;8cMÍìú°æÍ–t ɦWüÿŠŒôœf»®Ã_QÛ9N67£¾Û§ñ0öy ­æ«¸pr¶Ôq°­0÷ƒ+Ðë¾Å­Ð5ë„í.îØ_Æmã¾íñ¥+”C˜žÀÕcAcU rÄ8׬ـ⪠è–ð F–³•ZˆJ_„¨ß?÷ÍÛÖC“÷!¶¢ÂÜó'È]³%†^Å÷ÙÄôcè‹vÂà˜ ½ ØtÈc«žiÞCMhÏ$þðz“%Cͱ3jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ìVâÁÝk] $˜$¶Ó,—íˆ=`1‘�üI/2”,ÓöFmi‚c–µÀX²Y‚÷ 6B³á8¬£|Lob×5à²àhƒÞÑT¯Ý*¶#§!øúa©ÿXlCæŠ1¿²P/×rr׋È÷Ÿ{ÖŒmšµÈ+ÞŠ‚ü*˜‡0ï݈5š0ôÅNÞßöø’ÄØ¿ºàx„¤¿è˰VŒÅ§ÉÛ‰ãM·`sMJålYR%Eýþà6kÑ<8Ì:ÑüÉW°M‹ ~÷} GŒÏÕŸ=‘ëÂw_6Âd{…€]<±‚Ô¶ôHêò–“Ò×W 5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲[I+ɲ#D.¥E†R1O÷e|©û¶±IØõ%È+­C‹íOnF›±2c‰†ÏaAC姨»ödÙ|Ò Ó‚¯;c÷Ïÿ¼|"ߟíaºyk3³—ñÉ™G`³t΋ØÇ¶˜ _¤·=¾ä±Õh«PPü~¸s-òÙ\Í;½]hT‘³å§c‹Ž/�¯õN…z ç0iýǬ^ƺ +9«ÈXödl¨0 póÁ‰÷럈šcgÔ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ­„푩ÕÈùšæèÊv¡úÂ÷_»ûH¼O&’ÊÛ™ZÙ÷3LVôue½Ç1¹¤�æžÞÆe{¬A´ò׋¨÷<°~þeøa¬Ǿ€urcÝgâN{ÛãKK6ÙÖ'[P¡kE׳1YòEΖŸBŽ-*¾¹!Ü<°ñkì닇j•ËÅß«±âͨ1õp· ʪ–O†©9vFñó3Å'Úï©D²ùÜ"QK•ÝJ|Y’ ˜u\À^ÝCñ¿&aUZ À*Šüµ¡²[zh ÁÄÁ6(,–EñzÅvnMFcÄýó™ùþs®8³<7£¶óUø»¢Eþ¼"ßŸÇø’'&›ƒìA9[~ 9¶¨øÌ{¶£Úx=êCÊÒþ®8[‹¬æù…ʯ„¡u16v\×íÅ–êˆÿ¶àŽcTæ'v©áýú'¢æØ5ÆÏ{ÌŸ4j¿§Éæs‹Du,}Tv+qãc;†¢VúÆ@ûß°)G—䮫±Èж@P1ò+¿FkD›Ìl¾ ¶4Ü–ì€c<vûqµD_W7,Õ5øÆÔº¯©•…[QÝò8¼Xf4¹ëEäû /ÌØS~(ðæ¸ö‡¿ÇÝJæm/yA¼üé'<^¡:Ÿ>£±ôë¬"gËO!Çß Ü®¯Ã%Û«¨)%‡D <GÇî-Y%*h?#m/¯øÂûõODͱ3jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ìV¯×m¶~MrQ 9ZŠ­£Ñ3g7*Ñ“ÐÆ/ÐæU6É\}]§0ì^Ò)!LàI“ïîm…+Æà¸èŸÏ¼¨÷÷õá§ïn– Ùþp 7¢ü¶Ç—<Ö³ùù’!éKïq¡úsX<é°Uälù)䨢ããoxA´xºš¡;õ¤—\VÚê–Of©9vFñó3Å'Úï©D²ùÜ"QK•ÝJܸ¡3â—l¶…ãßp ¦0UÆE†– bÜÑV“ ׻ݘe‹ð v¡Íò3ìÞ™ð÷(oBÂè<s5-½1{çVüy‰¢ÞßsUÚc8­ÓAç8]½ Û OÄòž÷¶Ç—¼ðœM1žÄG9Ì”lfVt|ü /ˆ”Î’ËJãýú'¢æØ5ÆÏ{ÌŸ4j¿§Éæs‹Du,}Tv+y‰qþÇó·ŒbÃý, -í).蓉E†’Å’¬Ãu?Áåbö™ {rßEqe5*ÊÑããc å×uþÊXîzõþ3Êòб[«…6ÑqÈŒÁpñ¾íñ%OL6o| SÿpÄ0õ¥Ç0úMßâ%›™à "¥³ä²Òx¿þ‰¨9vFñó3Å'Úï©D²ùÜ"QK•ÝJ‚ðõ]DY®&´bfùgP¼é#hwTÁØÇFs%#‹ %ÍÙ<:¿]žðÖš÷ðNÛ^å5ܦ£ÐÙøèˆ¾®©—±Üõ"êýÇzÑý4µlÞöø’€«© wWÈ#w›Ðä¢d3£VŒOááQÒXrYi¼_ÿDÔ;£Æøy™â“Fí÷T"Ù|n‘¨Ž¥Ên L;s )iDÏØ¬ØêµAWn†gö š_‡+©l3‹ %kÏš¢ÁêÄ@Ç(Ò¼‡¶už�–C'Ðö’VYÔuM£Œå®Qïï€ãyâ!ÈÊÎÙä/¾ä±a´‡QZ}*jØoôq Õ¥‡im¦EÇÇßþC‘ÒYrYi«Y>™¦æØ5ÆÏ{ÌŸ4j¿§Éæs‹Du,}Tv+m[’ƒ¦¡ù¶…DÈ÷¯¸{/—‰E†’'øza,Û(¾ÿ:žøÞ™ßa=Vl´_M¸ˆÌjŠº®i”qÔÏË êýiΦŒhΦb¢ãã{ t–\VÚj–O¦©9vFñó3Å'Úï©D²ùÜ"QK•ÝJ&a×—bËBC%Byï¡ o]Ü6Ør™Xd(EFF|\Ž.c¢¯kêe,w½ˆzš³)#–l~†úî‰ðëX‚˜°^Á”lfVt||/ZöÁÏÜ<-Kï×?5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲KB຿ÓCgzŒ±€ú¼M(­½Gœ½Î—c‹ ¥² Pö[v]S,c¹ëEÔûÓœM±d³vŹÄÂÔ&éßAŠœ-?…[t||/"LÃc» £žu×7Ádu`DB¥ï×?5ÇΨ1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲[IêS™–›@¿Ãƒ¥Íµ¥óèÞ&Ñ×5F;—¼è}8„Xi”ÜõbùûÏbÜy&ÃYèôÑÖ=€ñíÜ·=¾ä%—lJ¥ÈÙòSȱ­W M Ï¸¹âï\£ÉCñîÝ(-Ø€Ü=&<›_Ñ•ÄûõODͱ3jŒŸ÷˜)>iÔ~O%’Íç‰êXú¨ìV’úT¦åܰT•ãøéxóèfáùé(6m:ŠŸ< ³ê²[ôue[Ã4âÇaÆâñ°•éÐnsÀí‹NÊ£>ó¢ßßçÕJäk"¯ÿ:ÖÝ…'NB÷¶Ç—<–l@QÄ|R9(r¶ürlÑñ xºÑ¢?‡¦[ýbrÉ^ÛpûN/¼T¢ù}6×£¸á.> „)¸,u8Ô6Ìå°Þ¯"jŽQcü¼ÇLñI£ö{*‘l>·HTÇÒGe·’Ô§2-'&¬e(Þo]&“Í9øúûñ|Y7êŸèí}ÉM›,úºÆKè#Žœíh°>3•}MN‘ï/¼lCÅ»{ o·¿IzÿKô™ŽÇmç¾íñ%O¬¯ö‹¨,ù�;믡ǓxUÝt)r¶ürlQñÍ=Eó¶õÐä}ˆí…¨0÷cÀü r׬G‰¡W‘á‘‚v=6®Ù“;úRp›PF[ŸdœšcgÔ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ­$õ©LËàQ÷à*í;€Çr Úã_Dõ¢êNAé¶ópÌ <·qpSþô\±ä3úººqC OÜ‘[ÈÇóvÔî6ÂÎþív ]§G{xرÜõ"òý¶sØÙüÛ²²JÔÎ}ÛãKÝücÏá~EÉæª‰Š/ø†ÍÚù zghþä+ئÅ*è‡qß·pÄøôZÕóc1íÜma%)œ¦c(ÉËCõlfœšcgÔ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ¥a…©LË£pܱÀl¾…n·_|=‰Á·aI0B-}óÃóŠw-ïEÕ‡YlKò—lÆžÓŠ ×¾~€1öïÀKtÖï}3·Oîzùþ‚ë{|Òp£o®•€Àx?nÖnÇ.Ó`Ì2|Ûãã"gË{!GÇ€×z§Ø¦¼â­8iýǬ^ƺÛ(šX©Çžàfãßq¶ýfCÉæßp°ñ¿ãŽWššo2µ@¨1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲Kà€Åø ¼á׉ÀZ³uíCð ÓxfÚÜœT?€2ÝC±Õ”IAŒ=z„§Ë:"Ķš&f/—¢®ëŠÉø ž5ï†&·Z‘žÍP'Js96,l/RZ€ñ¿kŠÎ¡g’ƒÕr9Œ7Šœ-ï…ßÜnØ ø5öõÅCƒ µ÷k-´U=?ï}\{ð*æ““©­Ú&¿U-Ÿ SsìŒãç=fŠOµßS‰dó¹E¢:–>*»TàsÙp«é3”æ­Å­žðI(h‡¾¬ƒbCIí@͆wQf@@‚©ì˘™çƒíL-L®Ô¶ÈKôu])gk•ØñÀ9ñ¦­)w½XöþÂÜÝס¯©€¶¬u†Ûè‹?¿öm7Šœ-ï…Ÿà‚yÏvT¯/NNKû# Ž¿Ž™ä­êùyÌЊ¿ýÎøG*«¶ÉŤVjŽQcü¼ÇLñI£ö{*‘l>·HTÇÒGe·2¶ØŠãþUè*¶Ì÷å—áä…Kh4ÜK®g“­½±OëïÿAGC 4ŽÃ:: ¿Ë‚C‡náeFÛFüΫ¨È“a1Ö¥‡¦ðL¶a1© »BX,o¤‘ŒGý¼ –½Š[ü½íññF‘³å½Y|ë—Ø_ó=œþ¹Ðj´·m‘½‡lèª ††[1Ÿª­êùyn¡¾þRT"l¾ze[kp¡5âk·íI®Ú&?5ßdjÿ€Pcü¼ÇLñI£ö{*‘l>·HTÇÒGe·á%î×A³æä•é`îZØ¿P@0ŒùÀ¹ |}Q–«Á͇8q߃×=œg ÷´Ø0–ѶÑìúbäW~ÖÈv™ù2tÚÒpÇE㫳\Q<Q×5d\îzõþilñ÷¶ÇÇEΖ÷BfñµWþkÞ9ŒöÑÈ6é× «±Å9â‡Vœ!«z~ÓÃüsiWýMG ë MëæŽšo2µ@¨1~Þc¦ø¤Qû=•H6Ÿ[$ªc飲KÛ0ß cíaÔï ×3…€¯¦Æ“F"¶ß|¯0²d¿ÈÌcCN;pæì/ðFåbÚøÚ¼Ê&™ ¢¯kêɸÜõ"òýÓÙâïm7Šœ-ï…Ìâó;[Pöî_a|2ŠÀÒ$3g+ª Fèt·9èÙ¼c›3z¹jÏÐ^W„Úú$ãÔþ¡Æøy™â“Fí÷T"Ù|n‘¨Ž¥Ê.Â-Ÿ"OlØç¬ÿÀ_YAŒ;:Ðj2áz·[L“ÅDn° m–Ÿa÷ʳ­D:–_×Ô’q¹ëEäû§³ÅßÛo9[Þ y>>ñÆóÚq«©å»ñáB’i´Â9Î*Tü!«z~ñælæì‚£E"­jùd˜šcgÔ?ï1S|Ò¨ýžJ$›Ï-Õ±ôQÙ­dþ‘~Ü7}‰ªâ b<k‘¯=‰Kí¿àV›m~[®°] êðAÝOpùƒ˜}fžÜwQ\YвFôø’ÚTvR¯«Üõ"êýÓØâïm7Šœ-ï…¼4>Á? Û­ó¨­8 ÝÕûœ%›·¡3ÜEÍۛá1ÌØx æ›LíjŒ_íeN!$MÂ0¬ »§YMÁ\µ¿ârÄÖ"6góèüÞìÂKXkÞÃ;e×à ¼†ÛtôÍ>•J“úwUî¿ËÑï/¤¼ÅßÛo9[Þ 9n|lµ©Þ;0Ö~ŠÊz=êyF˜Ä¸ïG¬‚e@Kû¿áñóñô,5ßdjÿ€P{ü„BÞ6lˆ§ö;—P_Y.¶¿.áŽÝnë¯)ôlÎÁïyŒ[ÆF±t†–vØ<Ó2<”g{REƒÕ‰Ž/P¤y5lŸv¶/è¡h{ÉGª,µ- w[‚âË.Šœ-ï…¼r|ìCë!šxH6߬‚¥ANá>|öéVl*ý;*.¡ÏÇÇDô¥Ô|“©ýBíñBy›…‡Õ^­Û9–$çlF,€“³åŸ@ñ¦ ÝQcßâÞ‘™"øza,Û(þ½]‡Â¿À;ó;¬çÏŠIîUØÆx\ (ur·%(¾ì¢ÈÙò^ÈÉÅÇÇ0ZÁeÂNÍz”èb, `Ó£Üì¬ÈæAžÚI§æ›LíjŸBÈÛdý˜bFþ°ãî#7üá× ƒ0í̦¤=l£ý€ ºr3<³OÐtø:\r4”>ŒŒø¸ò+µ- w[‚âË.Šœ-ï…¬¦J´t¬ùds>Û9”Ðj´§öµÇO!äm↥ªÇO³iB‹Çéê]Øfx‚YñžŸŽbÓ¦£øÉ½èA;ôs°Ã44ÿ�~!Ùôý º’³°ñ= T¼·s)¾ì¢ÈÙò^ȪªDÓ¡/Ú ƒc*ô2`Ó!ïý÷‘·0O ôU¾¨ù&Sû„Úã'„ò6qÃ\V€âÝZhµKŽCf Î%‘lbv})¶„’SK6óÞCAÞ:l¨éÀ( %™ñÞÎ¥ø²‹"gË{!«« xºðÝ—0Ù^!`×#/o'j¯=ÓP5ßdjÿ€P{ü„BÞ&#xÔ=É3/Ðý:ÓcŒìÐçmBiíu8Vmm ±­æŸáf´ïí\Š/»(r¶¼2U"y©¹|Ô~m©nBRÇX¹‚£¿Á}Ï4|îßà5Òg1>Ø ›}ãq–øW[9þÍ íM0Yá!>¶ _ˉù-f'áî>ÿP80†AûcØÇNFØÃën´èÏ¡éV¿{mÃí;½ð*U~Â(w,0›o¡Ûí_ObðÁmXRŠ)ö¼Ï(Ÿèí•s4˜¶3µ0¹’še*;ÞÛ¹_vQäly/d5U"aÜ;f3Ì–‡pÏ |Ïð íܱ¿ÌÚ‰éJRû·ñ\¸eüÞðËÄâ-á@¯WîZ„÷î <˜\ò4|î),—혿\]”ðA€x¯–J�#½ÿÆ _Åç(Öïæmy(­ÿšNWa{®š¢z\ù¶¹âgÊš5ä–]äcô7+´‹qiòP¼{7J 6 w ÏÄ¿‘Jš{ÖŒmkw þRNW~$ƸE¿ˆo÷°•KY9nD™±W¹QI¡ë¼š¼±½ æ~ ˜?ã\Cor‹ñdܬ5»Q×>¿øÙñÌ´¹9%¨<~�eº‡b —ŒØó>£ŽÓGPºí<’ëˆø9༊Šüµák}h ÁdÏ%üí a±H!õçWBñeEΖ÷BVU%𴢿ƒÏÑîš‚0û¦=yÈ)þÇ+öCדüT«IÍ7™Ú? øŠŸm!Ô‹;—NBËþ0kÍI.cŸ#Ò€Ç\*Çedž㰎*ÐØ¦D€bݰœîÇ.Øl¶ˆ£Í•…®½÷$·ò¶¡|ía´‹õ[lÆÖ5åhýÕŒ;uøÉþ  ÎŽF»¦ü è¡„N³Å w1è —¶0—¥‡Ú†Œ/(ã§X[ÙŽQÌ`°ùcñ3Ï„_Ûj°SwöÁaxÜtèNášëuøgVYð ›µhœfhþä+ئÅ ôøï[8”øa‹û”µ`P Cí@͆wQf@@‚©ìË$÷I0ï3ê83;wI¦`×#¿òk´²Ž€7Çeè´¥¨6^ÿÝǸ²ŸÇìo–R~%_vQäly/d5U¢ ýk”5ÿ&þ bÔzÞ) ÓÜ&”Ñj´§ö.âŒáY—U%ÈãY“S‚*ýyœŽ³oír™X0"],¡8Êo®D4"®à›ÊbU_†}D;ŽN$xñæØ€’†xÔÖ“ë1C›£ 5ìÙ"t9b3ÛZѰ°º'3Õ‰úsÊÿÍYºBûåÿ&ÎלP >Øt¡dÓfnŒˆU‹±çlÉõ×e^�^ë9œ -.8‡Ië8fõŠÙ]Ê­ÚʦíÓÁúûÐÑPMè¡Þ,ü. º…—IÝJš÷™6ô¸gÎþoTlbÚøÚ¼<ô±Ï#)¤þüJ(>%ŒÃnjÄWVWâ!çiPälù,äEjªDsÏ.c_ÃÏø}à.ŠÖ‡WVã»ñÆûõODͱ3ŠÇ?7�Ó®wÅ8Ö"¯ô34Ýz Ÿ}¬15žl¯Ïj6–Š5T2ß“o±ãÝO`vI}*žJ8!&7Σù‰KLð=Ç�ÚkÂh>Ÿø·7âT»‡ËÏæ¸XWÑçèœÒ¬Ž­o@·Ïãþƒø²ù:̦à¤vê:_…@A¬Gnçvèlá/øà4CI^*þ›tPTÛ)¦óÉæúú.øœ—°ÿ4·¶Âtásh·Ô£s2ÓM½$Í áæÍЈ'ØßŠÅCƒ µ÷1þ¶ÕŦ \DY®k4âÄ}f\÷pžhi±a,é ÊFÒ<Æ-c#tº³0´´Ãæ™–­>€B£’#µ- w[‚âS‚fmNøXf)r¶|ò"UU¢ˆaišÂÜ÷NÂe5Ц_¢ÅöŠË ï×?5ÇÎ(¿ØXõ¹a¿s 'ËÿŠƒft9½ð ©$›Sv.¯Û‚½‡˜W€·³ûk®(3T•NÌÁ×ßçËò?œ×.¡sŒÕYŒvžB‘êk?\æ4X‡1j=†µ› pÅ$Àyõ;ò¡ÉaÛH€ÙÃÃY‰÷ÁØÜlü;ζ?KœÕ±¿Í/Ê£tr`æ£gaõÃZ½ › Oÿ†;- Ø‘·9lÛ²²d§È@pÁ¼g{x¨çâPKû#¸†Ïþn¼ÂÈÂhˆ”E$¬9[PþÙoúÚU0öMdþs‡­|Û"&µM?ÂÉÊ-àívì^FÆÁ{;—âS%›«J}•(�ßÈ+øT24‹÷럈šcgøŠãϺ`n<†òòJ”×¶%?g³¾?v÷DÏ{ØŒÊth·9àN»Q’Á? Û­‹Ð³§ë†ËâïTrÁJ¸…óþ÷0ˆuColC÷³ÅFç‡ç£Jm=›Œ˜9̧QYq×Kè‘ 5IDðõÁÜpu1¶Ý:qíëPnµñþôtãö²ÕøýJ~~Hì•aÚ™MI#zÆfÅÓ±AW.&õ³OÐtø:\½gð¬y74lNúöBäW˜14Њ½l.}Éyôq²Pïí\ŠO ”l®ªì¬DüPsù¨ýÚò¿à€%éÕhç?Ù¹Ä=r¶‹É×óŒ`2‚¯Æ2¶zd. ËàÓâB”j?F…’«Hª%ðÞǵK²~<µX`g ‘¨¿W+– CÔ|ˆºŽp]d=žr»rÒ¢V6 ¥ýßááðˆYÇ¢Í=½Ëve…Fâë¡Ubrv¦â\Š<Ê@¯$[dhcv,L-XH6}ÿ’a.ê4†Rl ­¥1æZœ ä˜†Óø eÖ,_Š}6I!õçW²Òû;Îð¿bS:¾•È_zf0â´£×íKî¾J"gËg!/ÊÎJÄ5—Ú¯­òñÏ?9—¶›7ô×ðÄ9/N<ž·£v·vöo·í:=Ú3¾Êk¸L{¡Ñ”Bß3"&lîU-Ì1Ùkj€I©U$#ñœ°ù¥bdõ0úx5¡EIÔ,€—mUxW+Ö;»;<Òdþ‘^˜ž@ÛK9}(àÍÔ r ÷á³O·bSéÇØQq‰ãÖ±ÈC^ß ü3 àò¡ipµùšXe¶…5WeçSFz%'a×—bKhµr{<6âc,õ@ðvàóS÷æßwÒŠcǬ˜ xÑ­«€N±ÅŸ¢-¿¾©rŠõûR=äë÷¥z¼M9[Þ Yj|o[%J•šËGí×Vñø3²[œ º#‡ ^¢³~¯ ØÙ²ö`ÍÜ¡ÊB²éÿŸƒ†÷‰À¨®l„éÍ|°V˜¾©BaQ Zì^•'›¬.žß6"Ê,ܦ£Ü42¥\&ìÔˆ÷«þ!ÆÄ„:`Ó£Üì¬ÈÃ&åW<†çêë/EÍ94_=²­5¸ÐñµÛvŒ(,§­B=€¨4\‹.¿ë:h·TÃÈþ}ÇñÕ,·LõJ²y”ßé¡3=ë­øžy›PZc(³d3pÝ<;aßð7åJ‘âm…X¯æ‘#G¯øÄsù)aÕJã¿þë¿B•ƒì",ü›ÿüç?ÃßÅ©•dU+™ÿ¸_-ÿ´Fúðpp*üŠ/j¾ Õþ¢xü«²[xÎLnµ =›¦í(ÚÒÞü›5Kð~ÁÆð’üÊ&tÜ'1>¯ŸM; °×<´ü‚ª°¢ /#†oÏbÜùj‹*øèõ΀¥+ Ï×±!ølçPÂÃÂGÓÃü3zµcöÈÑt„£½§y}h5OÇ78{oÉœâ`þ/K’Ó2-½’ül±ajÉ÷Ê3œz/ÌŸ¢¨úÑ »åº2?<Q.<·u(ÙTŸU+ –P²ÂuŒŽŽ†¿‹,&)¤þ|JØS\ÝMtG.”"›ã#ÝmØϹ[8hUË'ÃÔ;£|ü«±škǧ « †ˆ ²îËøR÷=lc¬!T‚¼Ò1æJ®>îï}œÙ_‹9V…\m~šË6!¯x´ÚÝ(-Èï¹u(Ò=ĤêO.lú1ôE;apÌ?Ìd+ ç±UT5œ …öܱÍ=ÄÞó´×ɲðEzx~h%~~–ü~1ÁSnΦHr¯d¼yþNÍF•´œ˜_ìlÚãÿmžâàý1샋 …©òm…ø(Ṳ̀ ¼woàÁä’{iî),—íÈÔ ãU-­[·FÜäóëñäÔJ"õçS²âü rJþ«'{–ÜV’šcg_Ö}ÜViÅDž—µç=`xžSš‚ß…îkzÔ”—¡¬òo0´= õ2gö0§ ß}Ù“ív=òòv¢¶¥'…y×2Š÷71g , ´(ÖC«:´ØþT0)áhÎæ¬Î!ö9&–“í.îIzx膥®—"‡Q›[ «¨„Î’™áÔ¡•¦×î@ý¥&œ®ü¹ì!Óß/âÛ=l^.+¿(St>njX̼¢d3“âGfy¸Ž.92øàkUK#Vï&o½šÌÒÓ9VçGè›Ãõ׃çí'±Ûh ýÛíü ºSwáåäCnUË'ÃÔ;£xürîã¶*Oßy_ÖžóD€÷9¥’¬Îb^l¨0 (ß{ã¹ á.z¢Fû804æçãaKB>ØÎÔÂäZýÝ‚Cxš³)¸qû«ð=cÒ`ÍF=ìiDø048²äú ˜u\À_õ3poŠ÷~Û§X[ÙŽQñoÄ`óÇX£5á×¶ìÔ݆}p8´h]‡î®©d8=ÏmJ63IL6-'PùÍ•ˆ{þ ¾©,FQõeØG2ó‰¾ê¥Ù»Éc¯f2¸ªD_¡â»¥›¡ûÑt-Þûñ¥øo±ñ9zõEg2¼¼wúÔs.§æØåãÛõu¸´d·ÔæÎ(ùô]ËÚ/ÅK"ÀýœRIVç ±âbmï²ph>@©GÙžêÀ$Æ}ÿ›óÞs~çUTä¯]^†â¡)<“"Û Ä›³iGã‘[«>g“­Ø{¹n/>Ì}Wû“\@.7~hjÃoQå]øO[6åè2Ð6š¿÷ç‡i³!Ñ¡dÓfn|3¥]ó©ÎFœSÉBa¬òŠ’ÍL?‹†‡ñ*ú†‡ïÉ·Øñî'0»23bkÕK#²w“Ç^ÍdpU‰VÚJ ´úgr«~¢žÍ PsìŒòñg`îŒÂOß¹^ÖžóD@sJ“·:Oˆ•º†ù•0D I4ãºn/¶„E±àŽcT¹ªè=g #¿òk´F”¡Ù|:mixäGã«ïüȈÿW§“°5âýÝY‡BÝC1=”.è0 ¨¶S¼²óÉæúú.øœ—°ÿ4·¶ÂtásñïS=­F›”lÊ-�og#ö×\ÉØg¦"¥Áz7ÕÚ«ÉpU‰VÜJ€Íwø×üÜ2N¨ù&T÷ñ»a©®Á7¦Öp}S#* ·¢ºåq’sg”|úÎ÷²öÜ'j˜Sš¶ÕyB¬¸Àstœ1àÞ’•žƒöó8Òö"üJ9êè=gI\ΜýeÉC`1 müm^…þ^gdk*±½™›ñϨ¡Õ08¶º/ƒ0= «wÖêMØlx‚ 0§¥;òÖ!‡}Ε™á ;ï”o+ÄGÉfæ þaØn]„^§ƒÎpíY¡î–³B¸ªD*ÜJ@m7a$5ÇÎ(ÿ†ÝK’ñò“&-ÞÝÛ WRÖƒ»×º0ºtÅÄH²Í“ã|Y{ÎùFvŒ9¥×ž¨fáŒÔdþ ±Ò„qî´^ƒéz7ܳ‚ø÷æ´ý€;öÈ-_”£ŽÞó Æh5™p½Û-~ªáìB›åge[•­©”kΦX—›ñQE^fè³GðõÁÜpu1VÊÜZxnëP²™Yl¸º±Œ-d•‹Âò#ø´¸¥ÚQ‘Á­ÔÝrV÷­Ôœ°©9v†Ëø…?ÐyæjZ’ý`‹7$jÉ!×<91¡»÷Ý%´^m‚Nw†–öÕ[¡q¼'¡^éî«Ðë¾Å­Ðê’ó+MòYѤ5|Žvׄ٧0íÉCNñ'8^±Ÿ},UÑ{ζ}ªÃu?Áåbö™ {rßEqe5*ÊÑãSê1ñjlM¥„X=›ÿÂ`ƒ¤…‡²ûÊ+J63‰í½M)ô=#â'Àž¿p45dlhu·œÂ_%b‡ß‡Ép:ýE´u`œãùê¹ —SsìŒòñO ßáYÖã.üá@ï’Þ¸øÜ°Ôëp%²g‘-c_¶ Õ¾øÚYæÉ Þ_p¢pX–¹((Ý íîbä½ó!ê:ž+Ÿ0qž„¶ЬE^ñVäWÁ<ä€yïF¬Ñ쀡O g¼í‚ö¯QZ +ˆQëqlx§<´zªà6¡Œ‹žC5ôž³9›Gç{…—°Ö¼‡wÊØJÚ¯á6Unî·¬[S¥†õ¶´=ŠÆûØõ=G¿›¯íøì¶^ Ž/,¼“Œ8(5E8xs@lA‘¥XùðŠ’ÍLbŸE`ÍÜ¡ÏÇ…dÓ+þæÖ¡PwËY!|U¢X+s®CaÝ]x8M8Õs.§æØåãŪr?ÍV‰\<NWïÂ6Ãñþ,<?ŦMGñ“'^ þ2ö{3´ØC|~8¥Ð”œEç›ÞLÖ�êEóþZ´½T¶©Í{"ÀÑØ¼µƒ‚x½.ã“3ÀJ1༈}lŽSøû¿æž]ƾ†ŸñûÀ]4­/ì5—¥‡Ú–®Œ®¨½\›`²:0ÂÕßC¶…ÒQ4XèøE ½®þXPîsDέ©R2¿ÅÔÚÒ“¸Ôô*·ÿEL ·âïW¾Âž\Í|;'wŒIÞrãF£ýQ«ÑþŸòFxÅs[‡’ÍL0moDÑ–&8fÙÝĒͼ_°µî³™-xªDÂË6T¼»úv;ÜáNÁÿ}¦ãüüá_B=7árjŽQ>~7Ìe(Þ­…V»ä8dÆà\2ɦ?Û1ÕpÆ@ûß2´Œ}"lë“ØaZroÍFôH15>©HbÇ}" x`ýüËð°X}ëä ÆºÏdÁj´óä^hAqoV{e[t4à¾w.«QLê¾DË’-ß¶îîÝ(-Ø€Ü=&< 5¦ø°8Oj OüïÌï°ž?+–ãUØÆ”zìÂz…ÿ‰kæÛh36бœ…ÁtŽ‘ÕžGúmå¨lÿS é74oý ´­ÿDÛ}Ðýô+ÅÏ|·ó.tÇZáJꒊ瘅ßó·΋£é<â¹­CÉf¦±é-—ñ¥î{ñ³gv} òJOàš#sSñÔÝrVO•(`;‡¡žŒhü iZNÍ ›šcg”º%ö`Å›³¹[ ¿Ê°(P¤ |ö¯±m§?÷,ÌýéAwÇETo)‡á¿‰¯»`>qJ™Þ Î9× ˆ¹·àfÔv¾ —z­ÆB |À7ò >GÏÌÕ^↻\è¹â­çuAÀ‡‘G§ÅÏ·¾‹( õ²áî» --@Nî~˜ž­æÂì3¾xþá]À]N´æN˜Ìá¡~Ì(:ëÏ'ùp1â¼r¶ ü³(Þô´;ªRèMAàº[Ĥ¶éÇù�Ønw(»øSŠØç2¯(Ṵ̀U¨¯ên9+„§J$¸¾Ç' ÷1úæ>Ò×›µÛ±‹ÓMÒUu.¡æØåãgOλѢ?'a77nèŒøåM²ÇŽÃ14º =Hl5ÚýxG,GV–ñõØÖüT¡Õ ùM„fì) ï…úæ¸ö‡¿gA2¶: -Ä–®F»€ç°ÜXØú¤øï蜗Õü. º•±U[WÆFüµ£âÇK67£¾Û§ñ0öy ­æ«¸pr¶Ô%9T„ig4%èë{Ïr3<³OÐtøz’½£Éš¬a½êÛ ‘_aÆÐ@+öЉ®¦ä<úT2Ìýã%›™´:õUÝ-g…ðU‰|p6—cC^1v³¡ˆì)¤Ÿ¦èz&•Š“˜znÂåÔ;£xüÙÇí5&Æþ4ù�gïc8jïÒƒæÅ6σŸ— ÌÀÏarœšÕYh¬€mÙ±s»XÞá/ˆ#MÇP’—‡ N§–p#h‡~cÎòiÂLe_®âj´b‚{´Á ïhª×n…Á!~æûúa©ÿyš\¼_ð>ÊÌîð÷¯`éy-$›¾ɰÊ.K”K±54âl͵8ª‹Ób²üYè<Ô€ç¶%›™´:õuJc¾þ~<_¶üäŸèíUç&ÞÜU"a îîëÐ×T@[V‰:Ãmô±§wœRs¦æØÅãÏÈ>n™XÑ6]l¼Ÿa2]ƒ…§ýñT.`kD…i@å½N«³ÐY‰˜¨Œ=ÁÍÆ¿ãlû3ñeÉæßp°ñ¿¹]4¬±ùWlÖ±…»~ç÷¨.ÉÃÚ îG™ñ³ÕaAC姨‹±’pÐiÁ×Þð«•°yh¥øÿÙûÿŸ&Ïÿÿ÷è/ûÑLL ?˜<crÅÅ,ðf WÀÌð1:ÓT3/0êhY— šY£¶¯Íâsöšp¡”I_u JuàLêså#}³:¾¬ëùö.¾Ê(œ÷ë<úÚÒB)gÏó8ëy[ŽŒ"УÇy|y<ŽÇ·]Þ$t,DÙ”Œ ù\»÷‡8ƒkÇ7çûþîŒ ee&ÌxÆÐ-¢K'šeIÙä>æ+£áÓXÅ™ Î>©ºx y»¯{eÆÙ‚âY(~ðJÊ'U“hì)Œ=“aãæÆK£"ÄSˆ˜61÷ |ÿ¹¨ãÆEFÛx¡µ>žHp ¾ Ri¶É>E©¾N·˜Ç0ñ‰$Ö`¬ OWO^|Ù‚[> yˆÏ;ôß»†ªË­ž_ô*›§‹¯¡Ã)äe ²¡COjk kêÁкJŸ°¸´ÕPéŸcÒcZ¾yåw`å<Ëîì÷N†Uð·´¯Ñ9#Žýô—V$e“Kø™¯<Œ«lŽúÍóO*ÎÀ0<')›Ái€"|‚xM¬C¡jüÖ‰˜ûN¼ÿœÔqã"£m¼PZ/€gŽ‘·¾xÍɧø¾Á"J­Ï 8¼ñté…Ð6ÇlpGu»JþÍ~mD›uB¼ŠY$Y× ¬¯Â?Ï<Þô `Œ†õL nì~“�‹Vì$ŸÇWâ ÖÕz„%“ežC{Ì °Œf̆ lb.H\ÿqdy÷³ }ÎØ†;©*ÈÓŠ¤lr ?ó•‡ÑXÀä³gx™DDTM"g*Êuh ž$õ*¨`´ŒQ¹±‰g®DÌ}'ÞNê¸q‘Ñ6^(­€íGkõy”ä+½ñÛÛ*Ü5õ Ïð5Çß”H<¯Ð~I‹ÇaîÎ –ë8ÕôÚÿJ¬$Gb5qÞE‘¢ ƒ¼ T*vÎå„Ö:Ë®ñWxPœ…Å-p ñ‘ƒÎÄÆ%ÈüèS”Üø)d¿ñ¶ Æ{$´z|9ñ°¡3«½áâKoYün¶<ÀŒ¢© õ}Xþ’RŒãýzÇœ´(ZóD\:,`¬å Nß6c2øïò=nDpYa$e“cØsùñ5h¬'ž‰) ÄÃh° ïQ zfîðD¶ð‚¡j½ÅðßáÖ›YX«K¡¦ÔMHT‹0 1÷ |ÿ}Ùh[V+ñÖÞÀLÀÚfdÆft;Üìë ?mq]mã‡Îúxpðea žš~FMùçHËØE~ ª´u¸÷tH¸ì¯ìó²÷4û îkQ×ú‘»ÎHŽÄ kÂÎ+e !]H;ˆ†A, ­lºßÀñn.›¥™[‘’}Eª‡”ÅkÒêñM) k|Æ “øÊ}µ„u%-rÀX©Âí ‡:¨”ûQR÷œãKòló…· BúK+’²É-ÌØœÍÜÂö9y 8 ùGŸ¡¢ý•ïr‡xäXxÁ¾Sƒ³ÕkPL¶9^ ©< )RMÎsß Â÷¦3H#ëµ¶êÞ0SéT´ŽÀͼÇþRSrPxæ(”ªðâÈJ]}<?î¿`~ú;l¯&áf•‚|ÿà1«‘op€qOâ•íwt>y!ŒUg©¨ )™‡ñÕñ\ìÈû{ jÐÏyìÿ$Cb5™ìC÷ËØòF ÂØ#¨ "C¶™¥¯;³Çùª’SPµ9ý?$4Ñ<¾xÜsî+«(e!Öá6XÆyê%)[rì:'‚.Õ=°Ý;‹¬ýúË–¸02<¦´3˜·ÞÀ!ÎÏ bµV¡òvcÐx5¢^u¹%·ø· BÎaZ‘”M.qæ˃,ç2:—¬™$FºµGÊ9óÖâa4’cáCÕ$ŠŸ"˪wÒÿCtAÕø­1÷ xÿ‰à°ÿó0Áe Ic¯¬óÞt3í(MÛ%ÉdÊ{z~ ñ¼…¥í'è®V poÒ²‹pE÷Z´ÅøBgå¡éê0v=öɶ"G݃I{ y•`;+ôép’ÒºÀ±“‰AÖ„ö¤täL$ɦ ¤Ž¯ÿ{¬r7Ó}Å4¸’¯Š æKåÐÛ…RæùTÊb…ÄlÖA™–îÓ߃Œ+ãä²2N¬ñÝü\Ý„?ƒ/åvØZ«™¢âøÌ`ð~d‡wŒÔô<¤M9Áe…U”M.!9{W–;Â|PŠÌNù]Øã„‡ÑHŽ… U“ÈyjÝ“ âölëªÇÙ³-xM•ÛÐ2âY„+sß ‚÷?¢KƒÙί±½èAl F_¢ö° ¦¿þ@{UŽ¿¬Ä¼�…Ç)‡º—?Àˆíw<ÑÆÇŽáøÞ<ì+¬ÀÕ[½‚X6à îû”͸ÌW#ú‚ûÉ‘dM¢]pÒ’”Îù3*t+çÒ\šÑbÙŒœô&Ðd™eЛG¸b•2]+FB”²Q ¶~œ+eëanG7ÔeÈWBaE5šúß­c¿ˆæœ†\íïÑC6âÂÃNÁ›0ü94†N8l÷Q™¹K*}Â’²É% pY¾Çî}j<ê è½èn¿‰’]ùÐþòŒ}ÝÃÙó²rò0ɱð‚¡jEŒÙœÃpmµ¬Å³W"æ¾ï?Iö@é¼Ê"ÈLÁ¢Éƒl»–˜<)Ùͱÿ&”©ävû3œípbÎþ×I‚º°¤ 2³Ñ2ð¸Þbøå¨01›ïŸCµÏ—H†ÅcVAþÉ'-y¿+b<£èl0âAÓM¨É|Ô6Àd¹†³••5¡ uýE(sO£Ž†¤tÌ?pÏÑ~‰M²Zg#½ðûÐä~†[P)òü ÔÚaâÛµœO¥ŒO¸«ÒáÉ’0ík–—NL¹¹^¬Ì1tL†”ÜjjKÒ…CúL+’²É%ä’ô> ™«‘ÚVì®}‰xwVF#9^0¤ÿÔɲÙÛ]ÁlW[¼‚&mP5~ëDÌ}'ßVÙ±Pþ)òËI&Æs8•—Ù¦íPÖZ»óQšÞaÜÅ·/•,ØìssváÇ«èÍï౨!—ïCy„¢íbd9yÔ&ȼItˆËŸõ/Ù#=Iˆš”î¡Ì”mDq3öÀA²ºº†ð´ég´YÞR¤ô“uÐŽK—Ÿ„ys°J¨æšÆ„:¹#)eÿudBpüñ¦§"d×ô˜q©€”®âòñ2ïÝï }ò[вÍ2ˆq%B£YÖ‘”MŽ™yŠËšŒW¶7’·xh ïO¼a¿o|©šDQ\šd§qo˜Î{HªÆoˆ¹ï:úÏ Zc¿Ã¨!.Q ( « k³‰DÙ`÷3*Kˆq(ñ(}²U탾Z§,Ô”ÅኈIé¬h­Ì¦#)ÝŒ ¥Ÿ~ƒVû,˜ù—Д#%ûΡ(Á¦¬íhÔëq§Ûyâ­1Ü…&ã#k²¥Ì…ÿq>G³NÃîm‰)ƒÀ?.Øê #ÇS“¬â¥õ~Fö|›žÂô¤ úÄ•’H4tÈ ‘‘”M.!{Ñ#èõ 0&p/âa4È›Fx1]áá㇪Iä¼¾/ôàw¾[thD<‹p%bî;Aìýâ©AcÉ‘ E ^ˆkä§Ø´WGȃN´D‹ÙLÙ-å¶,ßCé-?ãÏ|ýQ¾WÎ`z(©‰ ^d—B>­x�»{óCzL݆ìÂ(5æ² QHÙ…ü¯Ž"{ÇçPì-‚®š²ýÌw¬.°$©Üö j‚\–ÙvGÅ®èÈ×mVLqôù(%‘hh–$e“KøÙ‹x Záã‡ô›˜xÄ%ÒR5~ëDÌ}'ßÿi X«ûýSí’­dD,ˆCˆóƒuØ·óÌð÷�ô%ŸC¾¹0‰,›-Pi¢7ØSÉ܇—ãìsôÿˆ,ÝÂáªGøkð!ª²¶ú‹öÏÂn¬À jò‹‰Ó¨žc§Í[˜J?ÆGJâÎù°$[ø¾ÈrX!sržÕçÌPåà$ OÞ‰±ÌO¬ËvÎök¸üØúüY%Tsª$š;ø)%‘hh–u$e“KøÙ‹x ZáãGì ‡ÐˆyüÄþì…ï¿Æ¢|œ¹ä‚Þ‚\R×…ÇŽfÝŽ‡p0ö¨=³aêòâKoY(I 1)[ôÚËP©o¢©{S”x:ˆCØó˜ìo‚¦ê{´’0¢lž> MǨÈé þ· –‘•îUÌx?z†}‰Ÿe©–+¹Ì®BÇØ ì&»·\Eù%sŒ¸\ŸF•ɆÁö È $ÈÚåÚkLY.ƒP6]¿AÅ*OÂd£åÊ–Uø<|È™ü”’H4ÂË Ñùý÷ß%e“3øÙ‹x vS?â™Dt"æñû³¾ÿ”þzi«5ŸKêÚ,ÂíìC[Í9(ˆ÷„‚Œüÿ’¢%<c›·‹ÐûY$ÁŒÈ*ÂIƒÂ) E@bUH6ZÕ=t‡X6Íè©=‰ÏU-0[_QÆákœîp’ådRìú<ËÊGsÁtý2»XåiR¨}duvi_°ª Q6å#C¾Å1äý!~áÙvãðSJ"ѳƒVs€fh¿pøØ‹x Æãa—`r ŠI䙃›ÒƒVL‹01÷ |ÿÇñ¬ûOÌn4…gC]hŠrÂ~¦M)9(R_ÇEVØM¸²iT¡òvcàÓˆzÕaä–Ü‚e\XáyÛ„‚m¡nµÀáÏǸߢ_†"Ë!ýŠ@|,`ìá]<Yí¤sã¥Ñ(Ê,ìKD­³h2¤ä| ““»äI‹Ç…ñq].Ïktÿ¨†Jÿ“VÑ“ï@^ùX]BIp|ºÀr?¥$ é#­HÊfHð^$nÉY Ä0‰<f ôƒtb~D·ƒsß Â÷Ÿƒ‹ƒÐï߯~–Íç}…êæçpzSÊóášÄàýÈþï(‰i:¤0±‡ù öyc"CIŽ˜HÚYÅêÒD^S””Ûª}GHR:'^µžÃÙûµÃö�ªóü™$¨‡™€µÍÈ òÍèv¸Ù×3~Úc[ƽZ„{üù³»j kêÁÐÅÅ„x(%‘hÈ^E+’²)>¤Ñˆª&‘{�õ;![d‚šìS”ê{ý‚8=P5~ëDÌ}'ÞNP0𸰴Õà\þ—(ÖÐeƒ›áCÙdŠŸoÂðçhˆàà°ÝGeæ.Á3Ž2öŸp¬ªK‚!IL1€{å{°_?,^G¬fõ¾”³Àˆ˘xŸ…kÖW®qÁï¬ÿï;‰‰s¨Ìº$PŒŸDüŒÃTz�­#ì~úCú#HMÉAᙣPªz Ìî9ɤ,óÚc¶žGNLǼ±¢o,“”¯øÐÄA³¬#)›âC8 i-XÔØž^mc@ñµ;ªCØUòoök#Ú¬T 6b^„bß@ï?ç (æ15Ô©Ù™_ˆüò&b6eHÉ­¦À=Ò[m>ÒäÙ8@b_ó2¼nƲ¬+è]Õ½SbãÐmõæŽ5â‚_¢vw R‹cÙô*ÃáJÈ<Þô H–Öµ û³²Ãì81í(MÛ%ñbF W^æò€ESAêû°8ü—‰ŒãýzŸhÆÛ˜žiäÄtKöc·7>uΧ±cÇi<pRl1å²®iER6Ň4q@Õ$ò¼Bû%-‡ÝÎ-X®ãTÓkÿ+ºó"û"|ÿ—€Â›=-áÙhYeóîwÐ>ùm)1Š·Y1N‹3 G÷¨K  P¢BÛ‚~bE¦±§0öL†]~%A£bõ®CÓH°«Ûï£bGVÒÔÙ\;.xNóo° ã缋"E.)*Õy”ä„Ö:ËvögaGq œO9Æ= sóM¨Iµ 0YÇ|Ê”P‹‚Ã*˜þúíU9y“žÍÃm7âDÌŠÇ3b_­Wa] ð*‰éN0¼()›áÐ,ëHÊ&—,Â50€W+ÌþÜ– ·ä,TM¢±4tþ½j­ÍÅ—-¸EA±m /N@A2\w£N}ÕÍp1äµ-¼Ä±ï5=Y!„®Xp¿ãÝJ鋚²Q“ˈ<ŽÑ íVon >.˜cÊ€e?¤Ä à )Q6—3@n‚ÌÛß=ÈH‘ã þ¥ï"N‚bêeŸál‡söǸN”á:3&…/zqì:Y¥w Ïl÷Î"k¿>ÆÐ ’˜n8i’Tò™—´")›\ž[Æ2(Î\ºœc[P :ÆÙ‚âY(~ð*î3ZR6〪I´ff@ÒdÂ¥-—௛ÞVV@û {22Q`À áR7mE޶nÿ}Ð^–‚ô¯²fIXð¶ú‹PæžF˜ã½D±z[ÿÂ$eqóú¸àÉ>t¿¤} µí@&ÛªöÁ¥5)xM/ìót½£(y ‰Ù¬ƒ2-Ýo™$J9Q†s¡ê1Dˆ×ÄGQ²RSU‹ymˆìH+’²É%ä’ô(äÙûÃ.çHó• “”M jEÞJq#8޳łqÁ¥� XxíNjIÎyj}3±y ;ü¬òõ5íe)Þbøïp»Í,¬Õ§XÁqÒÿZ¬Pnõæ Êã‚i·î{™…Eý)6íÕÃ2_‚ ÿK,³·£ ê2ä+¡°¢MýïÖaEç3ñÞi®Å¤¿´ki†æñ e“Ïžáe‚§¥¤lÆU“(©…7 ‰Hx0fº‚ó^·ËE̘. Ì4ÏdWœI†’ÚËR8[Qm°†ôÍé°¢µ2)Riñ@s\0íÖ}/ æë°oç%ßEÁ=�}Éço.¤ºØ¿(á5ñqK<‹Âk·—/û ·q­0YÔb^åþ¼rnðëW¯^ùJx}¢1)›cZÐ3æ}ñ%^R6c`bb§NZjd¿þŸÿùÿO €³ º&[¨ðæü­Y’ð&‘œ,ŽàÞÑHå~dH+ï@£“IÌiªêû¾$('Ì-í°ŒQPÄ>b&Nö8±é(KÍòš²Z)®\‚ h·î/1Éþ&hª¾Gë0+Òeóôih:F)<·=p»E,Mðšøˆ{tïBþæ\/~ÀÞmÇ`°SpND! ߆·ôôtaåÜ0$e“Kø±ÄKÊfŒD[„ÿõ_ÿåÿ „7 ±á™Ãò÷jµ¾@tµ ­¿Âê|ÏÓ1ÀØa8¸%º;K‡iÆÖg°'<f ÖJŽì=™H/0`d°‡Reå\G¿›S©…{¼ñ®–¥p¶@¥}ˆÞ«S^Ž»c{ökA»ußK” !PT®ÅcÆ¥‚Ø·³XèÄGŒujp¤ô6ú…ÊÒ6›m¥,É6»¶¶¶%ÏîÝ»½-ðš†þýþûïKý!Œ[àkÁõ„U!–øhõ¡¹³ÄKÊfŒD[„Äê)(…7+F&%áM‚6æà쾉’ì´ˆki“ìc(UÍ1”Lx–Ê Ô˜ß…Ìq~².¿‡U›‡\o6Î÷¬-Ç%ó´÷û6ÝWÐZiOÿ pY Ï ¦\ÿ›íC tj’õN‹ºÖÿÀ™ t0em÷ÖÆn«*°îpšŒè°z(ÐnÝ÷B¼ CZP¹ÞˆTC5ж ³´æX/ͺ`~…–µ¹…Vó(h¿‹$¥@£ÅªIdíà~7"Ÿ #2V‘ú÷믿úŠFø©-)›ë |Rq[A½ðÆnðS6tè«Ù¾]†¶®•žÃ*&áv>G³Nãë¿þ1¬ã Ž$|ÇOвšZׄî¡IVŒ‰>³æ!ær~‹úv3lŽ¿1µ4GÙ1žú[/ZkÎA¹ï<ÚWuqsÀ H Y‹¾ÆOÖef¬ßœì{ŸÊÊL˜ñŒ¡[U %öX fýºÃH%®Œ™‡ñÕñ\ìÈû{ j¨¾ñ ?\O+Àî^ÀüS·!»°J g‡¶Äں®EË�ÜüåZü¿•pHlãö j‚¬l»£‚bW täë6+¦x7)À~–ËÚ¤"3ÿŽgg"Oñ t}pÑÔÑ„VÈó§"s÷4"—Ó«ðþåææúÿ•Vؽèç›0ü9â â°ÝGeæ.ÎdIÙ\á‹Pp«&rá{‚³™[ØñJEFÞ(dCþÑg¨hµ¥H(‚\o6mö $óbêè‡(°`¹P_»([ÏØ‡¬y ˜éý7Ê~Œå eà™4CwÁˆ¡ùh?쀱¤×ôAnz 3sQR÷<ÁY—ç`¿w2²à“ö5:g„V(ˆõ¸jÕh¶M³£I,™ÑfyKÅzcìzì“mEŽº“öY›ÕÈ7Ø1oÕá$ e36É0zÚ—%™y SéÇøHI,/ÿ$a†ÑyLÙ: ×^†J}M݃˜¢ÊÅr5¶î{á'äúaǦý.?v†®EV Õœj± ó• ðjü»þd²<¨{ÇÙ}׳ªç4¬ÕUÐÛÿñÿ½ +´ÅjF²nÒ`Õ ɺI·U“Mä¶>´¤l®“À"¤Å›náÍ ›.²œËè\ºy$–Î>Ô)§?ãž÷|+dÙߢ}xÚ/¬/&(©ÀzñàmS¶)Ôhµ8üÙÙ¾÷A_k6v“á%kž¯¬#ë¸ÑeçˆÓ†—SÑ$±YŒ:Âê«1ÓxQ­À¶C°'Tß›ÇkÃqv|þ4fl3¶¡Çîx½±3`¨»eäb$éE0ŒXa8´›d{¡í^ÙY°¨±}ÓAè¾Ì¥¾ýŠæ+È}B3Ï{U&Û/ Kö1JIÆd*j'rI$KÓdV<„S4 'P›hŒœ#ÿË冷©CSBf¦P^•ð²6esŒý¿8¼_†r¶ÑF°u“&«f�2fþÑoÕ$°r`¤úЖAŒsè!))›ë$°©°j²Ð-¼‘ø¶½Ø« ƒk‰-`vj†N!Ó{£š²²ÿ I—¾^ÈvÒgE a=uÚ„Èš7«s…[óÆŠ¾± (ó—N ´Ž7%Ï(ž¶ü–T‚UÝs‚Ïã«;sk1ÌÒ ·pìÒ3v²}³ÝÄaí öé ÌûçPgí[ŠCó˜Uò äÅÌû]ñ²ì>Ç*_gŸ`lî/˜®_f…öz˜'©3cÅó¶ ÛBÝjÃÿƸߢ_'šF…†c6)J¶ã…ÖDcì™`«GAúæ%™4Yæ¹5B‰º0áYeý¬úA.0»Q§¾‚êæöŒ ¯ÍhiëÃç$ Þ[4ÈÚU «×;‡œÕ9ø$c»? nrìBlݤɪ غI¿U“À®êCKʦءZxcË÷ؽOG½“^t·ßDÉ®|hyƾî‚áìyJoýI˜/±SEv9ˆBIŽ› š¶lWrTu»G×¶ŸQžU°WDgÍsÀX”3ƒa¨p±d?v³ÊÐ<ûŸóÁiìØqœ”Ôí‹ V ¸TÎŽ»ÛÿZ 'Lß\õ 4ã0•]€if“Ý—(±!¯ ?^Õ@o~E ¹|Ê^PË3ÆÇ]AcÍ`ÎÜŠGcÉ!dzÌW°Ï› +Æ¡‡’†9漋"E.í/!Év˜WxPœ…Å-p 6ç(M4ÆŒ¢© õ}XþK`Æñ~=Šó扣ÖVSä^Jòϰ'#† Ž!uÓVähûÀý®MÂnáªê'˜'g`Qç@žw VÚ ±Qˆu“F«f�b݇U“?$eSôÐ,¼—Ã#ø(ÒÁÒ¶bwíKþ’ ¬Ï;ôß»†ªË­ž_ô*›§‹¯¡Cðm,n+j•;üI& /#•Ë-ÈRõ`fϞ߬y¬à Ì@öÉ0N0¼H»²ùæ?Ðd™eì:.ëà¢ý.ŽFìÛN”w¾óÿm×ôûÐ=tú_‹f¼× ?EÊŠñχÁ)¼ªÏŒý'«êÀÄ’Eˆ=ƒ¦p¯|öÓwë4@)ÏÆðý%l‡ e“5yÌPí#žþ×õæqÀX©Âí@È‚·ÕA¥Ü’?}¯-zèÇ hw*|ž@ó6Ôûf‹æ€îð°rzÉcˆàÁxß0,†”´#)›‰eæ).k:0”åje{Ã[:òdƒqÛÑÝ Fi¾ʯ¡mzáÝþ³æãY÷°ðîœqCâq²‘^ø=C„Ÿ[P)òüµ?ÛaošX˜×Ìò'ÍXjwÑÚó}–CÏ ìæfTŸÙ¹, ƒÃÿb…X«rñQN9jƒÇŸmƧI$dº`«ÍGZ@¡#IÓX…Z–u½á™­…`²Ý/#ت<spSSJi¢1fúc—Ð9tÑG2žß;‹¬ýzØ>F†ÇÃ.1Ì[oઇý×Xð`Ìtç½Þ^$kô”™Æà™ì‚*ç2ÇJ4É…p ªû]ËñoÞÖ‰ÚÂ/¡jí…5`5– †ÓÐ IÙ”H0ì„]-Ö‚zÈ­} t ÉpQ¶D˜¬yŒ{Ó <'1<kXo×5ëx´ãÒå'añ_³0W}…ÿÜUrΧVÆR#h“ä#è¨W¡ “Xâ7#]ñ nÜÖB+zË&YOG°oEŒ:Ë‚Ôè9\ÀÌÂÑ}êÒ(”…¨Ð¶ ’n·wYƒý %B>­‰ÆˆçF”ié~ï“=ÈH‘a“,ªÞ°¤l¼áÀϺVŒ„\Pb°õkìHQŦ(.ŽàÞѰÌíÞ&CZy¸­ÎÌ*›Ñ²¼/µ4äTµK µ$(†ÛÐ IÙ”H8b-nì;xiK–`•-æ$dÍ ÄÎì®ÅPÜú&1<„ñx¬³”ÄlFA›™x‚Šd=í€RÕˆ®¥º° ðˆ^ðbà™øª£×ÐeŒ_cÐð#î&‰-Üoàx·ò³0ãýèöå”H%¡Mö)Jõ½Ô¡^À”¥ÿgÚ—¨îr°ªç\Ã]h2>¢#­£ ê2ä+¡°¢MýïÜ;¢í÷iÈÕþÛ…"c‡áà¿çɲrol};ç¹ Ø³ùîuÔ¾°í¤ ¢µ¼:Ë+ök;l­œo ˰+!Á;ü„IʦDBsqc:“%`´ —- kó½Õ§Q\ý[X6×õÀA OÜг) A›¸å™t(/üº¶>¶?sp ¡¹+v7Z†ÑHcŸD1›p6£RuÝ!.‚fôÔžÄ窘­¯ü¥˜„Á›¡=½Ú0Wæ;ªCØåµ$ÑfÊJ€¸rVàÓŠ°»0?¤ÇÁÔmÈ.,ARƒ^—ÐÊ0M8pW¥Ã“¥$ƒ¤ýÖ‘‰uì³Ä#¥-æw<<÷Lv<À“7$Iûug lärv/($Có˜è<,Ñ—{’?ü„IÊ&'Ìás‚¢MƒÝX_?¤ á†È‹S™,!@¤$ñ”-‰”5¯uæ¿)>¹ˆá‰ºc6Å!hû`\/PWð1d))غ)b6ÙÏô¶egñlI(´—O—9§ŠÊtp“!%ç[˜„òþð¼Bû%-‡•RZ°\Ç©¦×þWBCö‘Ó¾„5Ì[˜J?ÆGÊØ=ÿ¬£tÕ‡Â?˜žráœÏѬÓ@¥º m]+ÌKµ»iƒ=›‡¢ºªùÞÄ};¡P5ÂÔÓÙ2肋¯r:Š$˦„àD ²h. ‰£Ð IÙ\“šÌ¿€öô]qï!jÎ)‘NE Ü4¹„Êd «ÁUÙ’D»„.½!Áƒž¸ágcŽ›h‚¶ù2þ¯ÿõ¿â`ýzu1²½±`Cq®­]ÐÔ3îÿ!1CãÕæ²/FXH&L±â¼uís8BÖŸ¯ZÏá€ÎìýÚa{�Õù‡ÂÕµdàY~svݺ^ÁjîDkƒjÕ5-CA¬à§Qe²a°ý²¥Ê܃0ž8Ki)0¡X€«ÿ&”©ì~‘² ù_EöŽÏ¡Ø[]?í¥D<pJPXÛÓ=ÊsÒ‘‘§@þÿýÿCúÿqMC3”ô?Aõ¯%D€/ÿGçÄÜ*zÎÆÏ-IÙ\Œ¥å¸ž]p©5¢^¥DªÂ ²É¢Sƒè2hP”æ»UÎ.†úæe¨wK{qcâ2I[².Â%” Áƒž¸‰²1',!Q¬´Y‘‡–˜MVQ¯ÊK‡lÓd݆…ò¤2ë…™hGi;·WÌÍàFC ä à„õÕJ«å‚͈ï;ÇØ¯Ø3i¢•Y—öþƃq‹ZU9 Ù˶ãad…pÍ'Ë!&[yö Ææþ‚é:{n«êW&øÜn&¹ôÝ—Y޽d¿ Gù¬¼5ÿÕ'ïPxéËž«#ÏñÔbë)«l–û/Ö—íÿÀ=5 ›å)žôQ²ˆ½þ5»ç¼ûïhöñLÀùNèxìH ‘µZ‘¶±sKR6×$º²Ùx£™$u¹l' êPxm‡ë±ß«�¥#ïÌu4”æ=¦¦ipS{qcÚ’%p‰�.¡œ\ÄðÄË*3 (¢HŽâËaA[Íy,BeÍCXƒé7±[6IØ@²J®­'ry¹!ß3¢ÅB‹™�¼IÀRZô@8˦Xð¸0>Nbû(‡Ý§/7_è‚êí)ØÈò83\¿m¼l‰ÇŽf«èû_r«øŒõ¡­A‡«åDZ7#Ù…*è¡=~:Û,…kŸæú× ˜|ö /W=ZgaÕ~+\\|´rKK0NS*ÂÊ4F*o7úϧĜ[’²¹&‘ÜhIò¨ÈÜ‚M©¡éz-àaÜ*‘¯<¡ ¶q7Z”MÏkt×i ª¾qíô8ani§ ã^,8ñÈhÆlØêZ|Ù‚[n“¥ {(òíʉà0‡qëCü¿ê+¨n€‹!ŸÃŒ–¶>Œ%\"óF3%1Ålzñ»ÕÖWBèc6‰åâ¤//˜ÙN”o/AëãŽ6§ù7ß~/�Ì”mdÞ{à˜gÀ¸†ð´ég´YÞR¤Ô-`ÊÚî]›Ænš²Ñº`«/Œ\ÿ“X`K눕$—ÔyØåµ°±3Cþ12ä[VÚŽ‰uw†„q°Ê`Í9(ˆWOB½ÒÈådÊ[`³<‚VùÁÞ¼(,¿Š[fZ<h®MÎÜoÂ’ÿ…µú‹P¤§l:FiˆbÞê R|Bi^ïGFðwøD$€CjÎ’•IÊæº™ÃX�n€²Ì³ùܳx&1Ôe€¦ôòOG¹Qè‰íÏÎ(“#{O&Ò lÄ!2v9×Ñ/XÊÎX‰æ®)‹ó£“•e<Ì™[ñ(!ñ‡ò)òϰ'#“UR0h8†ÔM[‘£íK°‡W‰™„(’£D€™€c”‚²ƒ·Mgq¢É¤Ô°sÃò=rdŸBmûç[Zj¹Î˜Púé7hµÏ‚™ ýA9R²áLÁ¨z'ý?$4”f£õ^f PÛ*,ßQA±«:òu›S|?friý£*ýsLzØ>Êw ¯ü¬ë¹ÐÈGE9H!çxJŠÔ×qQÕ’@e38­¶†tz]¤=pàå+!kªCóÅú*Êfãu”£©×\P›P2eTeó'Ü(ùÔëi$K/D½Æ<%ìøþ\‡¦‘Ð|çà}TìÈâ,·Š¤l®f6ÃWÈ”‘x#ýú6:^!–×ûd£}«6¹µ’» Ö–ã’yÚû}›î+h­TD¸­‚ÆŠJÔ„X‰ê *(„ÊhÁ8§Ë,z ¾3ÙÙ'¿>˜ñ\/üÔwø†´–jبà°ðÚ ŸiÞ†ÚcßÁL×=ÐþVÞ—%W‰™8`¬ ‡Ål&AR±à†¡ ™ùgX!ö"*Oí…\&Cª²N8Aˆ'h‰ ^`•{¥÷ÌYÀ„é Ò>Ê÷&;cz(©)5ABhÌF;gû5\~–%•UB5§š9v7å‘ÅAè÷oó*%ò¼¯PÝüÜN°€Ù)Y³š/Ö#»Ñ2î´V|Æ*rÛ¡Ð<…SÈ‹®Hn´Ì,ì­ß°ú»ÿ+¾G—àµÙ£A¬ï‘BƒdHÉ­æLn”ÍXñ¼‚©j+”GšØ¼s¼á1f“$Y¹ÓÅ×Ðá|—ãO8¼Bî<¦†û`¶Œ`Іff¬ßœìÛ¬fL(+3aÆ3†n1d£Eô_ªŸÓ‘ Æ‹ï HY· E.rñQNy˜BÍ6ãS s)Ï;a!–âb÷m‰Ùe•;Óœ÷« Á”™Æà™ìÚx ؉Z–BäIiÄ„ç-,F Jó•P(‹P©{(˜KiB <.xqèW=Â_ƒQ•µÕ/,³‚Ÿ±'šF)Y´f£uâaC&<«ÌWš’¡Å ËK[ Îå‰b]¶1¸IÙô±Jíêºç]¬HLlªIr-Ùg(ozI_ÍvÏßè­þ©Äõ¼¼ CTïÿ¬²y÷;hŸü”ƒmÖ¿0Éá>.)›kÂNìÉçþ¬qÛ¡¬~Š¡`S³·õA¯¹Ÿ@WŒ0¼n„räUþÕ‹°‡¸¥fUâöùìä&‡>¹I¿)¼•…=Pí÷NFŽÿHû3 $±áÀÏÕMø3äYÛñGS%6ÖC¼Ê&Ihrûñ“Á,xÀé}ã@Ëww1èzõv6mWÃïô\Á½£‘„]ÒÊ; Ñ´qãü%…è—†Fè¯!3«uÉœ”†:â÷6 êã‚™iôë{ÏBYf:Æf`7é R]E/EýcƒÎl´Ñ,\aMÙä£1©¡.4eÈÏ/D>« í&<BÖ®^ pÙ (ÍÜYÆ)è)L4ɸ`(ý2YŠô/èS„WÀê8ÓÓpýÏ(ÌÍ7¡&™ˆµ·ÐÊq%IÙ\ æZÏ^™¡+¸Ȇ\™È ó0Æš¿ù$ZÙÍž®Eî¦|4þnÀÑ}*<° y"[»e Ã/Äy¼6G–W� LŒmè±Ó«°Ñ^V8 jŽWÙd7™‰_¡:z ]ö`…ú5 ?â.Çn´D¸ºUqŸ¥~²±ìÍŒ†ƒ{üÙr—畱õìÉdAŠ÷8Þ…>7ÆeAõÞ ÁK=D‡‡¯RàöÏ%ñ®I Џ`\ãïà¢ÄÃ'*Ôe£]ÅÂ3×&x24.ðZ’9ÏF+F"_¬ÛZ«IÍÅúœ¦o‘“òQD·TæÝ(F U`Ï1RÚ+'-râPŠó,_|¥"3ÿŽgg"Oñ t}œ)Ë’²É ÓèÖ?âOÙ$®rþ ÀcV!…Ä×™Ql¡šíDå¡E¸þÿðã½ß1uÂÎãMß�¥)ò¸«®Å¯Á®æNèÏ^DÓkšüïç0n³ Ï±^ÞŸÀi…2MZc67 ÙÔ»Ñ"ˆ•ÂWgóéL˜RK±k3ÖKGÊQG[tæ=œ}QsN‰tY ¥™úâ%‰•͈qÁ¡$OÆî -\ñ'¯!BtÝéÓÐtŒbÞõ Þ3’=?¦F`1÷axŠÆš‘BíbÚÕ1ày‹×[xí]G×ÐhRLÚ(ô?p~A;ó˜´è|õÃS¿DuןaýcÛ€ÁkßG‚x¸‚L–uï8¹¦ó׃†µº z;7U-$e“,xÂ6èB¤d}ƒNv÷õ*›[«Ðí²Bw¤WkïÀ ÿ7Î)ö¢¢óÿ„§± Š3B ‡¶ó(É;­•ÆŸH/û´‡kñyAÞòöÀ#Á>ûéép0Ì;;FÖ°ô1o[Pv¶ÏBjÒ^bœV«�3k›C3ºnöõ †Ÿ¶ÀÈWéšëlRôÑeР(;7R²‹¡¾y**âxIbe3j\ppK®ŒÝü¬kÅHˆ <ŠÁÖ¯ ‰¦­5Ç|—©›óΡ¦ú ÷ü ›d¹øööw8H”ò7RCGÛ%œ Dª]m†å¥Sn¡w°y8[ÏCÉ«p©íG¶ü¨`䌳g•‘úµÜdg@Iå…*IVö)6íÕÃá]esŒý?w¹U$e3fˆdC§AçóiVë`xÜ'P"7ì†*T™F1a*ÃæZXˆ/û]TîM‡,…”’ná-Có£gï¸ø–ÛAœ0 Rèâɲù~ÑEÚFb9uÿÃàë ¡ ¬™oà„ÎÊnÕ«ñ¦§ø®›¶QÆa*=€ŠÖ¸™÷ÒAjJ Ï…2á·ïä…Þ:›´³8\ý)¬ 'KGÞ™ëhÄ…ÐR˜3âõ6ÎfTVÖͶÕ_„2·7‚ã8[hÊØ-4Z¸âM^óMù(lý›Ý_þDmî¿ hüMGCõàw ³g¤Ãöª²FØ?øyEð˜q©€dI¦}€ÌuqZo,–93ô÷hT6¼·hµ«Öyòœ‰²™ƒO2¶CÆáº¤lÆÄœW°7pÔd™_Á°¡ÌšqÂLÃj¸ˆÂ‚shX$\ÏIH"§¬Q^YŠï ®¡Ä%¢ÈG±°·U7 ñ¹„z!µà”uf'=3ÑŽÒ´mP’’ ÌôÊ« ¾}§¼Î&õxàrXÐVS‰|å)h ]°»Á$‘²É¸›hApÞbøïðÝoÖêS”Ô±dÏëîzvü@³÷löeÀn³¼egŸÄêD²pýÖ‘ çp¼®½äüÎöYfH=çâªß C•ÁoÁ!L ³ò:EÉþ„Â[}aädŽ$GEi=ÌN .¥=°u¡S¯8 t†'è ô‹ë¤†q1)ÛSt¯çžZgÀã>§í,ÀC­ÒNöÌ[¸ªú æIR =ò¼³t‹ø‘”Í5a…ËþëÈ‘mFºâÜ0´£Û»wÁdøç³Ú)ZKUN3‹p àÕª&KÊc65 „X ß`ÜEó&6 ´¿<  "µþ²8‘XEaM˜K(ã·¬S_Auó�\ ymFËz\`I6æÃ*˜þúíU9þÛ·y¸íFœ8Ñ,€{3eu6Ÿ†Ç²RZg3Pd½ôòOG¹Qün´|$ZgtM¶ =‘´?ÐZ‘E…ÛðâP-v³çµ<;éE0ŒXa8Ä>Ù^hû…‰:ÄÂåÂÿ8Ÿ£Ù+0_†¶®U`E#Þä5¤´×—(ïœ`÷¢lîDe·6ÝI¹ZƒFC=nœ;ˆ]xs¹ÀÝžBmCõ˜mwTPì*a•:öë6+¦›DNxÕÞ­”UH¹%‘%ü?*žQt¨¾ðW„nDY7$Wù«8”Í5‡©dÒËÛ# ÃÞú]%øTõŒ^K`…Hl1›N<jêƒÏ>ÅnpêÑ‘ü"’…m½çóK¨·lÏVÈäŸaOF& ØCbÐpŒÝ ·"GÛc†ZRgö¦/_öÎv81gŒëd>Õ™WIFÅÔZ¯DYgsnûý$ÈFËO¢Á‰6ÇRöCKAR «;sk1Ì0˜¼…c—ÈÙÌîå¶›8¬}ÁîÑ Ú[Sv!ÿ«£ÈÞñ9{‹ŒmŒ×µ—}æv#NW™06ÑŽ’͹¬œÁÎ×�Œ•_@.KÅ'ŸPGÇ7sp¶_ÃåÇÎÐgÌ*¡šSÍÂgëu÷A›ÃÊ éJœ»a€©»fs/ºMÜð&˜ÛâÖמo.ôk÷²{ÿÇPœûS—ﲿ»†ß@‘¾iÅÎó!,’²¹äÆGþåê‚Â?¿C½÷:¬Ò)«Ìˆ.f3ÚÁÜ’%ù…�.¡$¹ÕNj‡Ù¿=oCí±ï`&7Ï�t‡XÇb ×;A¬ÌT[¯¨¯³™Ì.Žü$Zg TÚ‡è ñ °bdÒMÁübaœ0}sÕï™1SÙ˜fæ0Ù} 9ɘ°‰K˜aè÷¥@–£Aïä<»/›¡Ê7À9ÿÕ'ïÛ-yÍX |ìyf5¢ªð8*VÖ<\°ñ}§TøÄ»/wÞÑ:í {Ö¾ùcÙ]•w1Cr“¤ ÓX$9œ\VQôéeŸ,!3&”lÎD¹Éqñ–Ø)R°g@¤ñý0”͵ ›­|­,l¬‚’¯–üþW ƘÍàd5¨ÌË€BUçÜÙÖx%Y¹k$& {Ô‚žÙ`5߃±'9¬"µ¿%Äíƒýû¦+8ïµ²‘CäÊLcðLvA•ÃÔ¯!Ê­W”×ÙLnG~-ŽgS³ô~–Eû]Mßt9h;Q.x†vÊñºS¦`o ŒZ@Ùtý&àþÌ…k¯z0ö R‰?Þ瞎Ó¸ÿ,ÌÂRy#¯²tºT ë6¹Äûûô«Õw±?Sìµ\ Á‚E ù>ý*—1 þ±|‡½°g…¤l®Éßh=QÓÌ*bÚû.Tð%,‘ˆ� êîø Z ˜nB÷Ð$ŷ˳uLø65²ûÑ,Ã`¶ókȓ²I,Ï<Çl.ŽàÞÑj{ÊV.†ØñY¯hª³™ü.މO´ 8®AX_…{=Ð{ϼ6à`–?Îl©ÝEkÏ_É7›0ÈœÍÃ.v-zS@y/ÛIvû-zópáÚÍcI*Ñã…<çme¡r®³º%å“d{­BÊîZ ñ~cIÎXb\íl%²L¹`ç/)A(_ËkÂi@¾¨<+æðºù6Žqs* ¢lþþû˜ð¿¢r[ýÊ#NÆýLUyøT7@‰(e¸P_¦\È>CEû+úÝâ�tTèÎÖÊLãEõ|$XÍ1.a7h£ •·ƒ„²FÔ«#7Q1›Œ†ƒ{P¢»ôž[ŸÁ.Š�zX¯˜÷pš[üû´¨ký@%š"Ô.ŽbOˆ#λ(R”áâRÜ=iA±÷Ì+<(ÎÂŽâ8ùœ¬Âÿô«ì‹a?¡Ïktÿ¨†Jÿ“F´yåw`jæÄµ×cI)®éƒÎ:½…™É⥴A˜Q4¿è­Ýîc­§°U({âÁÛ¦BäÒ—op:Øêº‚)tWžô…çÁD+Nœ6­rYÎÊ Ý*¨ý3ÆËá`ÜNôµÕø’ŸnÊ笄¢ Êfnn.þë¿þËÿŠFæ0>ò:è”=¼ÿˆïÚÿòÝöya0o„KEù(,¿À[bqA6¨"lS¨ÑjqÀåÝ´áø,š¨Ïເɮ‹ÈJß‹S•¡ºXŽã9rvn‡²Öc2ša7À‘ü>oÉ!~H^W"Æ›¶Åž1•cZ¾…bë3~Ýa¤n’!%ó0¾:ž‹y_`oAð™rY’ÛÅ‘\Þˆ-!Z8 Pʳq Zì½àʦDRÁ‰koÇR�ïűÛ5ÂþÁ[ 0Ó«Á¡Ò›hïîAGãyìMýiÇ/ã»g]¬<Žì”­ÈLxë(¼ ©‡%I§Ãô-²?ÕÁ&Øsdå�Í4Ø#I…¬Ìëx„ªìÐÙh•ç15Ôƒ¦˜}ΤÄc²‹®àæE5îŠUÙüõ×_— z­›‘b0Y!9BfR‰Õ VŸH·MópèO‹$aÆ\ÃOP«*E>+P) Ï£æñ îXQ¬(Ìßèë‹5ë(+ÿ|†?GƒRÊ“B×÷Q™¹‹âç³€ Ó¤…(+Z-¡Ùh`²ŽQa•cìzì“mEŽº“ìÁì1«‘o°cÞªÃÉUc^ø!¹]‰+—Ø¢ÅÁdº_ŠÿªMB,$ȵ—yƒÎK'PZ—De‰6¹D­Á™¼tȈ²Qú“ך͸ñ¸ö;¨ëºáŒ¤ì%öì·ãÕÒ)¹¤~‚ëßµÃîõ(ò3ÿÚÙgx°°Uõüz3xÞaä•kùLõ¼Âãë:´‡(œnØÛ5(:Xˆò‹WQ—èKö¸˜Ã°þ0RX™I&߇3ÕÍKñÐÌì4¦9zæ¼+›ÄªéµnJ ¸$S)GUgp¦IRôög”gˆ¸À ÌMONÅŠrñòv_÷ºx2ÎïÈBñƒWQ68"GŠÙ”!%·š¾ºŒˆ[ÕþÏQrã§ …¥*åþ°ïµ%Äx9-Ùœ‰…g2Rä8¨äù $QÁöM¡wøzâS6Gà2_¡ÃMu¬•Å5aB¥u@×¢­fÊŠ6²¾Œ=p}Æ5„§M?'IFa *áĵ—UX¦lèÐW³g¥º¦ M ½cKD†È&+c0‡Ýe)!R fPR%Qá™Ãò5çŽBY¬¡Ë†q÷¢x•Í`«f ÑiÝ””MÎp[Q«Üá¿í?€¼ŒTö¹oA–jef8úð`¼W‡ÂLÒçÐy»Ia€°UW³¢œax.6eóîwÐ>ù-$¥¼Ù2èÝh¨…Ülï#Ifü¯½ø7m/zàx¸9 Õ€L¶Uíƒ~×pöÝI¶¾¸†¿uÖ¾%7Moâ‚O>\FIMQÖ]ÔÖ`åŠJ?ý­öY0ó/¡?(GJö1œ)8Uï¤ÿ‡hƒU4^?L‚Z®Ë0Xð,ĸg0pÛêQæÂ/Ë<‡v§@q~TñÍ—Ñ1éüšÕðjyõ芬lR…èþĹD—AƒÒü#8™F1ºÑ[5N릤lr ã¶£»AÍN^%”…_CÛôÂëâG=ÞšiÈ)סqÉZækÆÎac6¹°¢x0ö´ºFöót;0ïuîB“ñ,c‰<€‰u»zíeÄ•À†$3 ŠÝë >2S°hò Û®†%¡WŸáÙhÐâNܺðãU ôæwð”ìò}(PcN¨¯º1¨®ÁÊ –ï¡ô&ºð»³”½Ý Æ¡‡’6á‹$Ëê#7ö¤ð{ RÿøðØÑ¬{"7uñ:\f`Þ µúAl—¾äÌ(È‚B}ÇŒoŽ2nŒ÷ëQ|¢ùƒ.¶ïƒdëMEªòfäØ~¦ò½(0 ó´¾%eSp˜YØ·Ä—6’U3Ðè³nJÊ&—Ðß¶&Þ,xG–\—YÏj¢`àÅ»ð`¼ï?ŽÉ”Bê\VàÓŠ°»0?¤ÇÁÔmÈ.,AR“ A¬‚ÛQ…L»öS2XA\Ùr|´®fV¡²Pþ)òIr.Õ9œòƙ𑸉”ì¨Ã¾—– H» /ùòÍ…t$½ ÉF[ ½ÉŠqZ.w(¯º1(¯ÁÊ‹C·p¸êþ|ˆª¬­þ¸9"˜TàDÓ¨Àû"aùv¾(;•1dHÉ.†úæe¨îJÊfì,ÂíìC[Í9(ˆEP0o"e!§¨’–<ßI ꋲ ‹µO½aX˜è•W%YÏ«lÊqà†·.ýAáô•>ÙºS kB/sHÊ&¯7õ: TÕ÷a#ÏÞㄹ¥S£oÊ&±`ž:uÊÛˆ‚øš4¢ˆÒ…¤lrÍñmk3‰. ŽjžÂ”@Çé´Â ñF5a°›±ñT÷»B]`ͨ-üªÖ^X7¸Q!VºÓ¾NÌ[˜J?ÆGÞTçÿ$ÎJGÊÉìJCŽê— kæ<¦úëp¤x=7̬À1ö;Œš2â¦*èÚl<Yæ1ÙßMÕ÷h~ïS6OŸ†¦cTøƒg)-«ÌËäÈ>@\×ÓzP¡àÄ ASÐ!¾¬q4Çd™Uè›Ý¤ƒJEGŒÅázì'eéÈ;sÍ7fæ=¦¦“CáO(žI u )Êñ& Ù”’ƒ"õu\Tµtæù2Éγ ¦þüUÔÿ¬EAú¤îý •×Çfm%ÇÇ.¡s"Hê õ¿ïEÖþÕŠñ(ø”Mbù'2[ÝY Úˆ›¼ÿ_‰')…²™·Ò'’²ÉÐ V^Ø“‰ôFq(UYÎuôsÂ{‚ Q<èFR6¹òø¶µX|‰ÚÝ[½óuE£"f3RrŸàÆ*uUí«d#Ïç4ªL6 ¶_@V ®/‘ÏÇëšüåJkqð sLB!¹uŽf†r/C[׺”Aˆ Òñ´*Ôº&tMRqè,Õb·l+²«bØåïUV§dF5X9Ã×ø»¥=.ؾ9,h«©D¾ò4†.ØÆÝ`(U6É^M ‹ƒÐï߯öi3äy_¡ºù¹ÿRp³Sk]^& ÆW Àó]šƒÞKŽ5øcÉܶ:(ÓÒ‘}€ä5 —ÞäB"ªÞ°’($ËÊ&(œµGàÈU=Ú»Ÿ¡û R ¥¼c•Z’\")›üñVmr½¡ï1X[ŽKæiï÷mº¯ µrS@NR6#2‹áž~©Ð=¾m-HÐó8Ë +¡ÖÃn<µ¼x“a7ã»×QûÂdq%m­åÅÐY^±_ÛakÕà|«3êaºlyނ̳O06÷L×I,e‚Òˆ{c+•ا~€Þ¥ñìB{M)v)µø…¼~Öˆ³e-«X9àê¿ e*+,¤ìBþWG‘½ãs(öALJuÌ=€ú‚-)õl“}†ŠöW‚<áÙhPO—”P\ƒõC$`¥+=‚ü“ÇQn¤Ï–.yˆUì\XHQ÷ü/Q¬1 Ë67#¤²é€±üŽ—èÔƒÐtXñ{®Uh06™{J*Rï° jâ s…Õhê'í‰^^£)ÿ_ØQÕµœ¸Ñó7Ìueþº‹²èñœ AR6ù„kÇ7çûÊ͘PVfÂŒg ÝzäHÊæš°›¯³uê+¨n€‹!¯ÍhiëÕ·º4!‚ø¶µðÌ`j6lƒõ˜q©€¸› ùü£ÔÙ„¶†tzÅyLtžGÖZ¢Ç…ñq?›&c‡á ‰£ RÔ"5ÙÔE‰ðÆÒ¦@–£A/‰á ùžê“wìE. аM¡F«Åá·ì°BÌxôÅXëçm¨Ý·‡= ÈÍ$Á›¾ 9r9 $Ëf‚YÀØ£ô̆-ÊÅ—0Þ²€›ûa‰ø`רý>•ÙhÉ~G'Bï¬r–_ˆüò&áb6Û^ CïR ™ÿ±À¸Á>ÑPÆŒ— -èv†]Tº§ðæÍϵ¸‡ÿƒ¾”.ã ÷zúÄŸÔŽ\ÚïD:É£.‡¥}În2)HÊæZø])eòϰ'#† Ž!uÓVähûÎH*(Žo[VP¯/Œ¼‰%°´ž_×Íuâs©LGÑ*–MþYÄLçuh:GÂ,²ám½ ÔÛS°W?âû\eÓõT9—ìþN\#Oúâ\C (íä ÜÓ|‹Ë­Cl¯ˆ²ù5Š5¿ðX{Æ:Ðð4<®/Yêl’Ûø(®íIçFK3ĺ\µê4ÛˆE™}m~HmP2?hÇZ!X6Zîjš1ºbÿšÁÿê`w¸X ¹Œ™ÄÚ°çÚRTÂfâ‚í³(Ê-Íãµá8²JþRqÁ`lCÝÅÙKÊæZxcÌ>á’X Ž}ç³Òy ;üO™¹D Y®†W©É@¡¶!tÞQA±«:òu›S´îxd¬Ÿ¾¤¬äÂ4úø'¬ð1óÆŠ¾ˆ5¾"AÜó°Kû‚Ý&Yˆ²)ÿò-þ̘ÞJ$ãh9ª:ƒWRÊåg”gP’q4¨´Œú&šº1Eƒ¢Ip&sMVÙ4^@yÍ ý¢õªB¨Xešæ[ú C`å»dÛ yv.2Ò‹`±Âph;6ÉöBÛOŸ[ ò7)ŒÿxÞõ "ds†§Âbìy…í‰Ù g=FT—1“X fì Îfna×J*2ò@q òè]YË-yFñ´åwL&ð�–”Í5ñ`Ìt罂)qe¦1x&»x°¢Ä=ãËO–«Ä1gû5\~fd•PÍ©fÉõ&.0åãÌER–c¹],ÙÝ^åqΧ±cÇi<sç \bü¨†Jÿ“ ÔòÈ+¿+1%n+j•;Xav? ’í•Ü–oA–ªg9ÞE0"Yã· ³â!–ͤ®³ÉàýÈþÿĽûËkI`¹�…‚Õ‚U‹¹¤Ì 㸅c—žØ@<¶›8Ìî1´Ý ^ûÎéÍyçPS}…{þÅ*æ¹øööw8HââÉ’z˜ŸxøˆpàaDu3‰ÕqæËceÆËè\zÎä"„$1*§$‹ôG¬å–0öð.žÎ„팇HÊæZ,ŽàÞѰd Þ&ã13×ú g|ùÉr•Xà²?.ëiÒá€A™áÏÖN0¼£²Ib°ÌF˸íènP£4_ eá×Ð6½`•^ágó¶ ÛBÝjß–q¿E¿þ Ùh“ºÎ¦‡Õ¥oÂðçhˆK¸ã{(ß‘%‚„h±B¹`Å8aúæªßmy¦² 0ÍÌa²ûr(Lè!üyM’Ãd °õovìþDmî¿ hüMGCõàw “9l{UY£0%B8ñ0¢¹Œ™Äê9rïrØÌÁ¡+B&°b¥Q—[bÏ-Â?$es-¼ Mö Dìe€±õì¼eæZ4/Y®‡ÀYOc€qÂÜ|jb!ÔÞBk`“£–q<ëÞ uAÈçÂÏ-`¼xÌW°Ï{¹ ÍÙh“§ÎfôC[–y½.q«Òh¬íwq4}s„ç°åïü?E¤oÂBðdûÎc’B,Ô0T‚²ÈO ³òº@ž\xQ]ÆLbuØóÞò=vïSãQo ƒ}/ºÛo¢dW>´¿<óf´7œ=/ •S\å–BaÏ-ãY^»¤ãÜÆµÂld•Üâ,üCR6×ä5Z*+PV¬zñe nYh´kÒ4¾üd¹J‚f=]›å²%©ÈÌ?…ãÙ™ÈS|]eqšÁ8ñÈhÆlXÿÖµžÎFKsÆþŽUu`bÉÊJ¬P¸W¾ûõÃt(sÄõÒÜš¸PkQ×ú-?±ÃλÕÐýÚëˆ|BQ—þÎ6ÙÙM謘×Ìò[¼–Ú]´öüEå¾Höa!–£/YE|·—¦ìDe·6ÝI¹ZƒFC=nœ;ˆ]Bzr±ûX¤¸Í˜‰VÆŒm¶ñ$Z›ÉI`s…Ÿ·+ÚVì®})¼wŒÊ-…ÂÀ=:Šw!{#«à¿ø{·ƒÁÎM~IÙ\rë—6©I“ñŒ$>è_~²\% ¯ûŽPYOׂ$ª9™,ê^rX’,©å08§a­®¢$QM$8XO‚>~nãÇ[m>ÒäÙ8@\“ó2ÂŽ¯,ë zí±BÀL£_w©Äõ2ó0¾:ž‹y_`oA 5ÜE”˜MâšøùIq”zZ/4 Vc­¨,® «LoÆcáÏkV‘³qºÊ„±‰v”lÎõ†¸0®+¿€\–ŠO2>R ‰NBpâQS–DåeÌh6H1ó—5 qoo0î¡zË-…©ŒžcGÙ½é<^pt.KÊæš8`,)Å5}ã²p©× 03%uÏ1NßÙE×øFÌrÅnî9Ü& ™õt-fÙ¾}ŠM{õ~W§€²9Æþ£.ÊsxÝ|Ç!ü³ë©¢5E´:¨ ¡2Zb\OB>~n73 G÷¨K  P¢BÛ‚~b¦�Æ®Ç>ÙVä¨{¼1®³ù;æ­:œ¤Åò7‘,›fôþriŸAm™õÿ\2B‘`%²ŒÇtœ×ìf5¢ªð8*^¬°�/ØŒø¾Sl)ñ¢]l7zˆ2ô¿0òO˜<Âü¾>ZÖ³¸Ê-…B.ÐË 8sa)a£·]<…¼Ý×agÀ8[P¼# Å^Å=Þ’²¹&³uL„03Õ l;Ô;…Þ_ô/«]*‡Þ.‚„ãBf=]ï-díªön>e3Ÿdl‡,NwNÆíD_[ Î)>†lS>«¸&b›tadx<lÃbXeã¾T?=摪çâÁX§GJo o£¼Žå‚Eí›.e…ô)›#p™¯P™¼e}Ds±Þ‚Œâ»ö®S±Bâ¤oãtñ5t8ßÃåøï\ŸÇÔpÌ–ŠÊëˆ+ã1ýç5 Ä“Îc¥ ·½s •yP¨êüs‚m×Q’E¯Ñ@"�?ÊÐF[¹¥PȹuÔŸ]?,i£â Ãs’²)Ìt^:Ò::cãè_n[= "&k I3Ê §>¡ ÍÛ´[¸ªú æIbíË<ï,¬ëI´Â ‹C]0hŠ‘M’~lJCvÑܼ¨ÆÝ„(›ü\Ý„?CÜ_ìø£©;RT1ºÀr÷¹!P[`šv«ÎûçPgíƒÖê³òyÌ*È?ùrY’ÔÙ¼ûô¡Ùhã.‘+Ñ,Þ+räUþÕ‹°‡”¯ÊªÄíò‘ê_2¤*oÒá -²ŒÇd}J¬¹èˆ'!\¡€„^(ë0òà f;¿†\²lR?ÊÐF[¹¥P0ùì^&¸“’²¹&N<lXY?OJ ÄÕ3é…߇R¾•"ÏŸá·Ö)º—"p‘uÃúþ˜>ù>œ©n^Rš˜ÙiL'ÄR͵i 2U=ˆíPØ8jª LSoÕa`g~¼ÊöÑü‹rvî•GpÝ#ŒÇè2DÇÀXò7ŸDëĘáZänÊGãïݧÂË÷ÂÈÖ®AY®Ð4g<&{—Ä*p‘nq�º*tŸ—^µø(æKÎø‘žñFàGÚ"+·´â)V§ªú>läÂÐㄹ¥–1î‚$esM¤AñCËv\ºüc!ãÄ*¡š hJHLà‡¹íã +ªg )Ê~Êb ]6Œ»ªlÞU×â× ˜6³¹ú³Ñô:Ö-Ø=*Ðê RîçÁ%ŠòÓb°ê„d£­†ÞdÅ8-.˜Dœ¢c€XÌýB9±F§7{s#ª‚kßÍv¢ò ‚•kÖWá{É<Þô „Ct@öl‰Uà$!«°t]DVú^œª¼ÕÅrÏ‘C¶i;”µVvWO,Ò3Þ {Ô‚žÙ°Ó‹’rc±•[ eCµ “É‘½'éŒ 6âñ^ɹŽ~ŽnJ%esM¤A…qý…žd»éVÙä4+*Q˜|…ÚKóàdþ9y‹Ùdß}¸Ÿ4ámLó"zÜ硘­£ñBép¨²ê,e£ebr¸8€¼Œ4¤ÔcHÔ1±fˆŽ…Ðf}ƒÎYvŸ ÊæÖ*t»¬Ð)ÆÕÚ;ì™øoœSìE ‚•ó.Še¸ߥ:’¼ƒ>÷mægaGq œL9qÉCBÀUB¸¸†Ÿ VUŠ|…ÊÂó¨y<ÈË%ôŒ7Gë Dlå–B!2Mr½õ¹ßc°¶—ÌÓÞïÛt_y3Ss¤l®‰” h#ˆû¦_èØÀÕH`VTfvã­„e£]iÙü ¿èŽ"m»–˜Þ2rܧ­µ ™ w‰bǘöÓž Ø:~‚–ÂË_"…­È®zˆá@šzï|«À‰¦Qá•á ‘È ÑBã†ÝP…*Ó(&LeؼS ë»lwQ¹7²"üMPR±uâ4@(ýÒâ„a‹’²)>âM7ï„m„ćû²ƒ>öf åéor±~å5$ì* È5¢^Uˆ•‘‚rc,"+·3ÖŽoÎ?ö]Ü̘PVfÂŒg Ýž[’²¹&Ä´uê+¨n`$öõk#ö±Ÿ!›R…‰žñûM?Í.Ô‘b6={’Ãöo?~‹5Q¾ú¡DSYŠï ún®×$ÚsIC®ö÷»ÕP^`šyƒŽ³ŸAÆÎÑ”Œ=¬€½ÙòTdV<„“WÕðl´‡JÑg£å>C4U0ì¾m¸ˆÂ‚s’¹ak¨Agˆ°%“}è~)‚Lç~È~!±Ó°:WßK£•Á`hùî.]Ï¡Þ.æ˜/4¹EzÆ!Jýb³ûå5:”9‘•[ eö{'‘.‹Ðÿ´¯Ñ9Ã#)›káÍ·2ùgØ“‘‰Ã� ÇÊ “9Ú¾„ûúÇ=ã+ö›~!cׂ ×~|õCqà®Æ€«äz‹1³C¥Ã“%Ë¢¯Y^ŽñcÁ£¸Àô¢M‡]²=Pu¾Z ÏúkKPLƒåpÞ†Ú}lÿ¼n:lú2äÈå(½e“ÀE†h‰!®šwdÏ–X ö.ÊÇ™‹ÁnÑa-¨ F8Ä»êVÅ!|–ú ê‘Ù¤g¼XYçç›0üšåÛñÇ=”ïÈ¢CŽY¹¥PÈúqd•ü;HÎe›± =vg}—”͵ ±*;¨žó JǾƒ™Ü¤x ;ü¬^VÓ3¾b¿é26p-ˆkÉFc6ùñÕ…Ç3GÍ´`þÁô”P¥F0e}½¾Æn»M“8 .4%Ð;ÞìK—;Ë[—ü)Øç?ù÷4ßârë;~DÙüÅš_¨°¼Jˆ±Õ¼“‘µpÀ Ì@öp·èðæ+ƒA#Ò3ÞÑ/Öe™—Ñë¢ –Mdå–VàÅÓ–ß1™À#XR6×ă1Óœ÷šÂ1cº€2Ó+0u­#¿Ð5¾b¾é26p-¸‰ÙäÃW?¶qÕL£²TàÓŠ°»0?¤ÇÁÔmÈ.,AR#øÁǸÌÐì>õ£že«o÷CÔ”äA©}ä}ýÌÀîaIaE¤ ú³&~ˆ­æ¸ä!!dzîaêžÛzžñF`•Í»ÕÐýÚ»|¦™{Ñ¥¿€³Mvï*Ð\niýl<þTR6×bq÷Žî„Œí3é÷r“!­¼4VÚ”66®260<ëÔàHéí‹«óã«5Ó…¸†Ÿöy:0oa*ý)`÷ü”V8¼Yñ>Šð<Úlw-†Ó‹ç1eë€^{*õM4ub*)¬šÑoàiÉšøA ²šwd~H¬Åâ½a„EzÆ!JÌ&ó'j??)|¹±¨0ðÌÎzÃY÷ ¦ÝôÚ7™‰v”¦ÉBϬmcñ§’²¹Œ†ƒ{P¢ ΄e€±õì±&aáQ/Õ A™GÕº&tM®C˜âÇW?Nj¦ ‰s=*“ ƒí%óoÀîAOœ¥àà{‡ÎË? s4Ø¡»º]°Õ†]pl¡&ÑÆ ®í*TÞ*“åÍšx¹q•#’ˆ±Õ¼#}“X ±{ÃHÏxcD²lšÑûË ¤}µ…d¦o¾—Opä^î}ŒzUø ‰< X9ð:Wœ[Áß3¢eñ§’²¹&Œ7m‹ù]Ø 3Xð,P¹ÑIWD‹ œ¹é)Æü¯Ã=€ú‚0«»ì3T´¿Š]‘àÁW?®j¦­Ä«ðéž$ü¹,—óa•¤³ìûÍýÓõËP©êÃRŸó3eE«^có Û×!<mú™šä(ÌÛ&l;u«%Æýýú3IPúd•¬‰‡ÔtÄ}�ˆ­æt^¯gÞ0A*-êZÿ'OÖ&éo„h#[Q|Ã4ÖgfܘzcGS>?¤ÄŸžÅ½~» I׆äR9éóÖ f¶åÛKÐ:ÆMŸ%e3"spš®âHéO°E4a‘$fh«šáô‡&è_’L¥Ý{ØÓ˜Lem<ïÕ¡035hƒó7{ØùJ<xÛT„m 5Z-¸¼V¡E¸Çû /ŽÕ©| K¢cÌâ­™\v3š«¿Bž|3ÏÅã¸`ÖÁU˜1¡ôÓoÐjŸ3ÿúƒr¤dÙ‚#PõNúH8<æ+ØçMHJr”>a…¢HYm÷Q™¹KÙ·“öü~úhÕ‹:j%û ç¼ŽŒàýãÄƃ±Ž*dŠ” ä)8-ÇG™çÐîL¼,Bû3¦bÙüúÐ}U8ñf…'râGÿ‚ü_[ð/ù¿¼åÒ„ _‰‘%ÏâDHü++«[¾GŽìSÎ,Ç‚¬�úÞßh-ü;QN¢5$ΆU2§l0éJ‘"£@ሠ=ãKw2•5ñf"NCN¹.È•À׌×½‰rŪô±ÇF»1d[ÂbÌœxd4c6LÛX¯ðG¬aÖŽz¨ v!…í¯,]‰s7j Ñ>Þâ, ì¡ô*s ˜0AÚGùÐÛÝÔ(sŒý'«êÀÄ’Ë,ÙSp¯|öë‡W(¡â"Úz’!%·ZŽ“,õÊçÜh¨•ìƒô‡f„ïÞ0‹ÐíbÏrÕ/AÖÌyLõ×áHq3Þ&xÐþŒi‡ñxØ-f]sì™±÷ô =¡M„–ͯÐhÁ›)ö,öÿUx†a(ÈDfþ\T]D婽ËdHUÖE1¸­AV�ý ÛVå¶/¡{1ÁNé0%3%%ZTªIÙ\º“©¬‰×}çÈŠôd~ïBMüìËQÕìIÜ„~FyV«`üãÿÞj°Âñ†Ë§¬—hI—Ö!ü±s©£" ²MA®TÁÐH0C¯k;_,ÝÂáªGøkð!ª²¶úÇtvc%nª.Øjó‘&ÏÆR® /ÃwYu½ávÑAn࿃öÉo!±EfËŸ¬ñ>hJ$Æ®Çþ¬Üh º ¬¿eniè÷Z,×JöAÏy*ú·QoïÅñ—+ÏrfzåUŸu”y©éXÎÍõCû3#ÞGiŸ÷û]¥îNP©¶ às;D³éÇó£¥ùJ(”E¨Ô=„ü4‚¬�q,<VÁ³ ¹ºùðY@ÉÔ™`›"–³¹6´'SY‹yLtipTóö`÷ §íá/ÜVÔ*w@ž½ Åäewß-ÈRõ`&¦‰ÉMù”õေR…ÛÏÛê RîGIÝóuD±6AW~åº6ô9gáq @¯¹Oåo0Óè×F*»È2«Ð16»‰\Œ]EÝŠ¸s`•_G÷¨K ØC­Úô“X,ÑÞÓÓ+¬ö^/„Kå^ ³Dâ‰ìª=ÎòÝ(juRwfKÊæZpà ÃLÁ¢QbŸúz—.‚ºÐ^SŠ]J-~!¯Ÿ5âlYKB¬œ’²É-Œ{ o}hª<ˆCнø´ü.úãþp"ZX¶¸Òv®¼Zµ{óxÓ7€± ¯ +@l qÂÜ|å'¡ªï”Íu@s2•5ñfÛêÏjÆmGwƒÚ{¥,üÚ¦˜ŒkÃec½ß™ñf]åSÖ‹ #Ããaë†Á¼õ±Jòºmݬre­;¹l+R¶ÒëÚÎ/¸ÆßQvðúë@ÃÓp¥wã5¼è€xÄÔ£ b&T¢ü—Ao¥ËÝ+ aÞ6ãĉ&¼šÿÞú³9)Ø®¶Pg] sƒf„ïÞ0¤ª@Z„¿ÖdP;Äý%+ùÛ\á†M—çÓärükSäò-ìë­Ø]û’UhIéâáVÅ™ ¬\®ŠÒΣ$ï ´Öøã7Y¢]xÌ{8ûÚ +?ŽÂJ5*%7ÚØ 5™ÊšÀéó8kè u‹#Í6.ðçá:¹ï@OIx\Ÿ?W7áÏK±¶Ö*d¦¨bLö@!  CEÙD€ØŒtÅ9Ô´>As“§Á‘ˆŠÓ�êV´Õð¢6ôÂïÃb¼oA¥Èó—Ïj‡uŠòK6Ñã†ÝP„ôÌÃ(¿È J•'|ÉÃRóQk£/tƒºó: áû瀱¢5Á.ÐĦ *c¬®Ð‹˜é¼Mç]x"��ÿôIDATHй©%æ’Žög,6VX6KïÀbÿS4)t¢)}Br õ{È)ViqÂ0·2/È ÿÂ#†{P-)›kE! f«†Ú1fá£#“!Ù ¸Lîß²ù–: ¹ÚßcS’™Q˜ªöC.ÛYÆ)Ô[Þ ¬øKÄŒóg”j _¡¿V„̬RÔm †0ð8Ûqéò“0w#V Õ\@Ó˜¤dòÇÆ,w¡!®ÚŠC(¬Ô¡ÍFgMF²ÿÑŒðý‹î ó¥úy쫌îw6tè«¡Ri kêÁ×K-ñÐþŒÅÈ‚U‹©”ÆlŠªôÉ&Ÿ=ÃËO‚¬€äXx’íÚ¬¢…4Z­¸ï$ âúÀerþ”Í»*žô†ZŠ-/ÇÖé^È ö.,m5¨,Ìg…É´Y¬è6ý.Y6iÆýŽw¡3ŒqYP½7‡ #qßšÒDä̉¼á„õÕê®Ì+ú8ª·QÈ™B3Â÷/²7ÌMس7Ldw™TúD¼° Ýô4ÉîJ_6Zq•>ñá ¼ 5q›ÕÞB+Ç!‚¬�iá%zÆ—(D*TÞn RˆQ¯:ŒÜ’ëA®fF´PiÕàÂ}'QpÜgã6 ú®Ä>æ žÖհϾÝ7ûzÃO[`lëÃXÜîK~·ÚúJì-0J1›´ã™€­ã'hý‡Úƒ{?¢¢ uýtZž$Ö†ª3ÝyEŠ2\ ‰9 mKöcw ”†ÀÐ. ß¿h—¾[kœ?3Ц‚,(Ô÷aqÌø.TYee¼_âRéq"•>áŠåÜ*©ÈÌ?…ãÙ™ÈS|]\uXZI=ƒ÷##ø;|²Î¿@õ!5ýu6¹rßá ÆâIîóÕgšá NïŸCóõ}Žâq˜J ¢u„=ÞcH©)9(<sʘ9ñ°aeÆÝÅ—F|Ûø‡ÀõO%V…yƒŽ³ŸAFjOfìB±Ùrö€«x' $b‚*aÚi€2PZgµv€a Ž ÚáûçÀ]u-~ ò„1›;¡?{M¯c¼T%µ9÷Õb8|‹ .}’@$e“{¤Ò'\AÊè‚L–u/ÉEBj¸—Ãàœ†µº*Æ2zk#­€xñ¼‡‹#/™òéžÍçÏuh vaÛà}TìÈ¢¿Î&'î;bà=lº2h,Áσ$Gúe\»7/X VÖy}f¢¥iÛ Ô³®CŸf÷f‰ÕðºÉö@Õùjù&Ú3þÚSQT"è9sX&ûÐýR<WNT]„ï_¤K_öü®ÅçM±]†’šÙÇ.¡s"È–M<,îEÖ~=ì ÞxhÆbC*}Â%$±Ý§Ø´W‡wøÊæûÿÎätiÄ©©@Ú‘Fü~¿©;µ°RteAÏÆ-fS†”Üj”:àÀ}G$xË”)jóVèkaù‡ãgD2´VÁô×h¯ÊÌ›Ìhn»'bvgrÀXRŠkú ÷l½…™¹ë¬Õ)Á7Þ¤K‡Ú2ŒC¥?^˜™Æ´dåd_¤ ’9ÞÜš¸ÍjQ×ú8)ö¨»0„ï_$ËæoøEwiÛÕ°Ä${‘˜Í:(ÓÒ‘}€X¶÷ ƒÔN—åBÕ;‘ðK.ÚŸ±¸Ké±Àà½Eƒ¬]հΓ•@”Í|’±Ý/Ÿq£ÜH+`Ý,Â=õ7ý÷Pùù(¾Ø‡ò{}pPTÚƒžU6ï~í“ß‚ ¶YÿÂ$µ·<Ápà¾#¦a¾T Ãk_ Ù÷æïqÒ`OÀ!¼�WÿM(SÉAÿÎv81gŒë$–ªÎŒÉ˜Þp£Ž0™Æ‹j¶j„]:m¨Å[ïp÷!¨õ,¯©î‡¨)ɃRûÈûú™áÊ$+§¨ J˜f÷‚~Ýa¤’KÍÌÃøêx.vä}½5 ª¼1hWD„ï_”K_YŠï ®#î–•ÝÝhP—!Ÿd(®¨FS??™Ì…ÃäB¥ODŜݷpUõÌ“3°¨s Ï;‹+wy¤°^ ÛE2šm\ž†Mÿ’CþÙøS 8èÙØxÆûÑöÿj ª¾9è=N˜[Úaƒ²ÆûŽh`0o»‰ÃšßñI¦pâ<g7Z+!™dßq›œyƒÎK'PZÇ]@»÷0¯ 8HöË`¡1B£9kŸÄJÈ3£Æ®Ç>ÙVä¨{0éa÷³ù;æ­:œÔs&<qMc áûçÀ]!á,o(-#ÚŸ±¡ºô‰¨XÀ”µÝë!fìv`ž†»Ðd|Ä©œ.à `÷5ÖÀØ ·lîEiãsØßLQ“ ‹ž¸€L&GöžL¤02؈C©2Èr®£Ÿªôa‘àÂ}GDx•Ì*ÜÿõŸÒéÿ6·LcÀê\áê²¾R\ü ax‡ÎË? s4XpŒÐ(ò‘Xš„é‹Û7„Þá³yù”͸ÌW“ðÒNëGR6ׂ•=óp;Ÿ£Y§JuÚºV˜ï©»8ˆ†¤l&�ŠKŸˆ‹E̘*ðiÅØÝ ˜Òã`ê6d– @©á,‘§€+Àó¥rèíbÌùVín¤J1›k@Æ)¹µ²Â{ Ö–ã’yÚû}›î+ÜDqå¾#ˆû¬¹;NúÝiÆ¢|œ¹­Á<œNcÇŽÓxàŒÖ.þ†„PHu(“zΖ÷Ï¡ÎÚÇž/³Þ—³ òO>\Fg=gªÆ.Â÷/(ô"eò¿:ŠìŸC±·:‘”K¢ýK|ÈA§Q;<ÇÎoa*ý)`÷ü‡þ´˜E.¦h²Ì2è9.ÊKÙ¥¤l´«ÂŒµã›ó}‰gfL(+3aÆ3†n³\%ñ»ï¬›ùA4ßú-ÆØÉx`xe†?ICXó–"ˆMÙÜøßà šÎ"sxœ]øñª†•-ÞÁcQC.߇ò†TºØÓ5v+¼$“ì¾Èr4èd÷sRÆ$ß�')¡vòÎ3Ézàv'þ<§ýK|ÈÄÓ¨2Ù0Ø~YK9÷ Œ'΢é-7냇@´æl¤~TÄŸ´[P)òP¢»Ã~Ýë”t×Íôlls°ß;‰tÙÊK†Mi_£s†ö ,⾳Ƽ\| ã- D-àyî:>cjÇñ¬{xƒ–­hƒÁABB"zÎñAûØ Þ?R.k{ öêG|—úeÓõT9—7V‚Œý[— ˆ'±·Òú ÆÕr;;O· óìŒÍýÓõËP©êažäF7ãa[Æv\ºÌ~€õÌ*¡š hãæƒH,CÏÆ6׆ãÈ*ùwÐ%ÛŒmè±»¨²Gf¦3HcÇ“ŒiÔÆazh~*¦–ݦlèÐW³›™º¦ Mq`äIp…ìƒñAûØ ß?’3»¼!,DÙ”Œ ù–uÔUvÁV_ùâ›Ø¥¬PÀPáÇPBb <.Œ'0Wo+`Eœ3 »ñJÊ&çPµ±yFñ´å÷ºe&â¾³ÿs”Üø)HY®ƒJ¹?ì{m°Œ‹Ñ¢&DLmd·zYæ9´;cµ¦ +8HHH„BÖžD|Ð>vTôxàü¨†Jÿ“ ÔòÈ+¿k¬¥l¼ÖÑ j‚Îm¶ÝQA±«:òu›S :4¤õ!ñ¡Ãó `XåÙsóuœÉK‡lS> NÉík„ÝØ0ö¨æ¹Uvm±¸ž’Ô}µù( f;¿Æö¢a–zqÂ{L-Éx[…ú>,Žß-ãÆx¿Å'šc+'#°à !!Š$LǤlòÁœí×pù±3ô’=K4§š1æ™(¤õ!ñ¡ÃÏ Â¤õÔ«Ž 3…sÿŠsÿÆmÍ É²™�„ÝØ<pò½}Xµ‰ÁõÔ[ ä,š^Yܘ)X4y%Eébj#*ð,ÌôÊ«1ÆßDzQõ.8HHH„Bö ‰ø }ì„f̆‹/[pË2ãµN<lèÂÄj9x .­‰VÀ&:Îah几2t-Çg-x …Wq°«lU¨¼Ýƒ¡·+÷a›â"ê—,P?áFI.²Jn‰Àõ”Çn@Aú§È/¿�•êNy-òÛ¡¬µBŒE{B ¦–¸&»„Ή MÏl÷Î"k¿~™#$o’b6%$A¦ãGR6×"J ²M²uÄlFûa-A—àäoKHP ‰"yZ¾„ &Ý×(,ס­Ï ·gƒúpWr£åa76îÑQ¼ó�Aõ{‚™íD¹\,Iuع;ö;Œš2ä+PVA×f£2…þúYÀ”¥ÿgÚ—¨îr°ªç\Ã]h2>J`6Z³YeZº¿tÉdx½r¡ê`ÿ5¤˜M šöÌ7´ðýsÀX©Âíà Ñ@çQÙŒú7xÈ¿ ­ zá'Q$Ï+€f­·P ß‚””-ì”b6=›6Ý Tu+ìxñö~”!‚:›ÉÎ"fLø´âìîÌéq0u² KP Ô ×•¨Ò4‹p;ºÑ & ü!VT£©ÿ]ìYФ˜M ª„éø‘”͵padx<ìòÁ¼õ©zØ.þFüHëC‚^øIÉË `Üoaíh€º()좓¥+q®æºšï£‡£.Ëд±1“OQ•õ òNƒJuåÇwC.“!UY[ÂJkp «9Ÿ£Y§aûÚºÖ$²šYž™·0•~Œ”Ä õ8ô§tÀEü°É‘„ő̂؇"d~(Ÿ3Hës-ø¹º :p.5;l­UÈLQÅçÏþ ]+FBþÆ([¿ÆŽ˜ÿFüHëC‚føHÉà ˜‡ÓtyòÍØ$ËBQ½“RLUB¡mcc\ƒx\«BI¾ e*kž`8֔傲�WÿM(SeØ”² ù_EöŽÏ¡Ø[]ÿt(œÄ}â4ªL6 ¶_@–ìc”šÞ‚qÂH#½MÄ ÌEü }6ögT\жÞ‘ú'ÉüÙ‚ùP>g"ÖçZD;3Ò«ý=Æ„>\üø!ï%!A'ü$Šäoxfà°<DMežGMÛïìþ¿I–MΡmccÜ£07ß„Z¥‚J{ ­æQˆÂ¨I’ÙìK,GƒÞÉyoU¾Îù¨>ygÉlè…qõA§ÜÎΙ-È<ûcsÁtý2«ÀÕܵÉEü ]—�´­·p¤þ G2¶`>”Ï™¤õ¹ÜUéð¤× ³y¹Y^:1åŽõB4Òßø¬#¼È"Òú ~E ²|nµ·Q¹÷¤³™�hÚØ–•™TdæŸÂñìLä)¾@®þ$;ÞØÀìÕø\@ÙtýUÎå„»Þð†Ç…ñqWì1“‚ƒØÊ.$aqc$³ ö¡™ÊçLÒú\‹0=Áke]ÙÇÉßpá ‰‘Ö‡½,`¬å Nß6c2x1p\ ˆ‡°×À�^…[b™¿ayh†C&.qAÏÆöìúCÉò îg•̪rœÓ°VWAoÿÇÿs´2‹:»´/à-ÔA”ùÇÈoY§Ë'­,`ÊÚî½Å2vó•–ƒøÊ.$aqc$³ ö¡™ÊçLÒú\ .² ë #üJHDc•Úø–âaº‹ePœ!u UËíâ)äí¾ë<ÆÙ‚âY(~ðŠ—[¦d‡L: h>Ŧ½z8¼6 lޱÿç.ð8¡úC?ª¡Ò?Ǥ‡Urä;W~VQÄœ®…Ùh¹ˆ¡ë€žõ©‘̟-˜ås&i}®ÙÇö†‘Ö‡½ׯ¬¯FÔ«#—Ãzø<¬�¢5…<{? RW/¸axNR69†žÁ{‹Y»ª½— >e3Ÿdl‡,AÅ“¹Å‰‡ =˜ ›”ëËœJ3Bd£3¶¾ØŠ.$aqc$³ ö¡™ÊçLÒú\ ² ì #­ zaåô‘ü.‘‹˜CjÎŒ<¬€L>{†—É` tmlìAÑ} WU?Á<I,R9çEƒU Ù\¹ÊœJ+|e£…µ¹Í_ê&JüMìœy|OÇ¢½?åS¸ƒ®õ¶©‘̟-˜ås&i}Æg#B¤°Þ0Òú œ?ß„áÏÑ Ð&'¶û¨ÌÜ%¦Ò'>B3’6Àdc?¢D"66®pÀXRŠkú ÷½…™¹ëÈœJ7üd£e…×÷qþëFô¦ÕðLÀv¯ Gªûàök%t]оޤþ G2¶`>”Ï™¤õÉzÃHëC‚^¢ÅlÊ’[ Ë{n*^VÀ²@» 2y6(ö #EŽƒú—¾[& N!ã,Á³uL„Zá˜i¼¨V`Û¡FØÒ(¼d£]€ËªGQvò+¾Cmc3Lݽ~7Ú.˜šQ{í,ò3?Á^Õ8WÍ0ÈEùî }½IýŽe/–Μø‘Ögò#¡½°ÊæÝï }ò[Hh“Ù2ˆq7wB.+€¸ê€L¶Uíƒpù…ÈÄŽÿ°‘6¶¼Aç¥(­Aé–X!ÖÄŽŸ U© Ö5¡{h2AŠ'Ï” &])²SdÞyºÜR‘Yp †˜j°rP>…Ch_oRÿ„#™?[0ÊçLÒúL~¤1” V.›ž^–Ä5<¬€ðŒ¤æ˜„äÃFÚØ$bÆ=€ú‚±s†Ìo“}†ŠöW‰µtz\¶úoÐlx5åSWƒƒò)Bûz“ú'ÉüÙ‚ùP>g"Ögò#¡Ýø úê„Õ åa0˜¬Ã¾—`øþ²®¾äsÈ7J–Í@ÏÆ½Æj_ß[N'²D<xð¶©Ûj´Z~¯ƒE¸Çû /æØë`Þ ÛÈ,ûÅœæ‡xlÛH‚(.ʧp=ë-2Rÿ„#™?[0ÊçLÒúL~¤1” fì Îfnaçi*2ò@q ò¸5:ð´æ1ÙßMÕ÷hfEA¢lž> MÇhb­'(ôll©Æ*ÕR4'}¥OBH€×ã@Ëww1èzõv6mWÃw^ŽÊ§p„$,nŒdÄ>!óCùœ‰@ZŸ|!ÿC_ÏÈ*Éè¸AZôâ†M—YÎet.Y3‰¥³µGÊ93:H+ ¡gc#Y®Ä^c5ؽ@]S†¦’%­Õ?°ëËQÕù6èÒgS¶ŸQžU�½ýÿ÷¸$ »UqŸ¥~‚‚ú ð±”OáIXÜÉ,ˆ%óg æCùœ‰@ZŸ|@’Êip))¿õÔ¢ðsZÍV8\ªÉ8m´IHðÏ{Xµ{—kÐ.ltXÀìÔ̆Œƒ¼ÍîÐÒ'·ØÅK"‰HDÚ¤ÖÛøAì5V¸mõ(Hß2v²Ìshw†[EŠÛŠZåÿ…Àäe¤²Ÿq ²T=˜‘ÖgLð·žâCêŸp$óg Fšcñ#D ½j){PeŠßmü°Ñß—ˆ¸,ßc÷>5-y‹õ¢»ý&JvåCûË3öu gÏoÈÊÉËì^.}’ŠÌüS8ž‰<Å(Ð%QFOϦ¶€±G-è™ Ú\| ã- ï±uë†ESAêû°8ü·:ŒãýzŸhÆÛ$™»ŒÛŽî5Jó•P~ mÓ L®ZzD"Ú…©‘̟-iŽÅ4v|àÀ]u^8‚“ʱíU+Êè`!_;¬hU©Ñ:Ÿ@½ÑqJŽq–óxm8‚ØùGæ`ô¶»k_"Þb(<Ìnâªw2YÔ½ã¬ÀNâÄÊapNÃZ]Ź«Þ‡�yða£¿;ъŲ-í L”›<=f¨öÕb8\ïbF W^å=ëi¢õ:h€É:¶!w‰ 2ŸiFêŸp$óg Fšcñ#LcÀê\)(/ØÐðýSL’¯=oÑYy(î\§äg Q2ó—5 ¾ˆYÑÞ`|®æ<ÌîðÒ'esŒýTú$ij©‘A*TÞn *¾ßˆzÕaä–Ü‚eœr•††þØ%tNÅh’š”÷Î"k¿ö$0þ-{l‚LžŠ=ÈH‘ã þ%Ä™ê­Ý«{‚1ÿk¾ ]Hú'ÉüÙ‚‘æXüHcÇ«å_ð׃O-‘,› ìÚð$ÖøÃÃìfðÞ¢AÖ®joöQŸ²™ƒO2¶C&ë…ˆgScŸýÈþWÊæ_ ú½®x ò|Ab6ë LKGö’Ôˆ(b2l’åBÕ!³èð°²Ý¨jô—>a?5QÚNpYúĉGM}ì»Egñe nYfü¯Öƒ.»ÍÕ_!O¾›öÝø…v!AêŸp$óg Fšcñ#¬•¶<Ý@I®ŽSrŒ³„DdxšÝspvßÂUÕO0OÎÀ¢Î<ï,¬©µ÷á"žMÍçÏ7aøs4Äï°ÝGeæ.‘Xµávt£A]†|Å!VT£©ÿ]’¸™†{àºôI É6ÉVÚŽ‰7ÆýÖŽz¨ v!…ý}YºçnÔ@£},Y6Ãú'ÉüÙ‚‘æXüHcÇ<ä_Øè8%Å8KHDAšÝ"D<›Z´˜MRr«ayOûUƒ°µ¹ƒùÁ:ìÛy æÀ³ 5pK>‡|s!‡–M’v^…Û^7êTæe@¡ª[v­n¼Ž’¬\”Ô=Çx,S‚y‹ŽŠ,È6}¹RC× ¦¼VY žÞ/°ø[Oñ!õO8’ù³#ͱø‘ÆŽxÈ¿°ÑqÇ8/ÂÕ×>ê½Ò$6Î^7߯Ã1n¼O“`ùðX÷¦ôÞ ÃÃeçBþ65VÙ¼û´O~[®kEšeãn1lV‰¯Í%<ó˜ìo‚¦ê{´¿÷)›§OCÓ1Ê¡õ6Hi_°@­¬ ;ôÌv~ ù:,›¤ßS6tå'Q®kCŸsÛwÍ}É6 ©‘̟-iŽÅ4v<ÀCþ…õƒ÷=Í!‚<ã̸úaÔh 3<edb©ü 3;é˜2ÐÂYT´Ù¥Ò…I ãv¢¯­çC¶)'7’`ì"1oJÌ{8ÍÍÐæBipø¿Éç᱈ÿýâFV蕌÷ýÃÔïV‰¯ÍES°è5øÎd;µuL,@w@…î™ Û2f/ªà£Õúo˜ÙßµÖ‡\¶)[eRÌf¤þ G2¶`¤9?ÒØñAâó/Ä:N¾ìï×P˜q,Dçcœ‡j±'s7>'ù ˆ‡Y†¥ê[hÖ~o»§ü?µDÙ,Dv~!òÞß}Ðýœ!—îìXüIó˜ê‚ASŒl².6¥!»è n^Tã®x”MvâŽâÝŠy'…ƒ>ÖÚ”¼ñl&Îä¥CÆþì¦M)P¢l²“ñT÷»B-ƒæNÔ~ Uk/¬ø *I|m.zð)Ö)*s‚ŸÇ&»."+}/NU^„êb9ŽçÈÙyºÊZkŒ®É‹p CEÙiì|ÞŒtÅ9Ô´>As“Ù—ÆžGhƤþ G2¶`¤9?ÒØñEbó/¬>Nä̲¤;ãKdÇþì¦0«/ãL.g?¢Á<§­ꮢT‘éË{ù Zí³k(ÞÁn´¸/ð´éG¨J  ,¬Â ¯Åt¿áÌ"&‘hæ0¬?ì›ò}8SÝ ³ó½wÄnñ^f·Øúˆ¼)ùÒz›jÎAá͸&CJv14†.ØîA{W e3ZÍ¥–†œªv89šÐÜ’øÚ\ôÀ—²IX€kø jU¥ì¡¯`©ó¨y<W¬S€…©j?ä2vsÌ8…z‹° ›È<¦©‘̟-iŽÅ4v|å,†ù}}o×P¶¢yœH¸ÇcÔœS"=¯|# ]V ~ ±ñ7Î ð„È[‹˜í¼„ãêZܸt}qæÒ`¦^à§òÝ^¥%\‘– Ï –‡ì<= e1™Ÿ6o¨›ø”MQ+ôAÆlŸù»QuÈ¿™¥"³à—’¦B7—ÐßO$쳿{µ/ì¡–Aç ZË‹¡³¼b¿¶ÃÖªÁùVgÜ›¼pl¼6=ð¥l:ñ°¡3a{ý¥Ox\XÚjPY˜ÂÊ´Y¬è6ý.Y6Ãú'ÉüÙ‚‘æXüHcÇ‹òqæ¢ *U”vñòv_÷—è[?!ãä™ÄPW#TJ÷ÆÊe)»P jD×ÐäòùºàA°ÈËË8Oþ mÕ0<¶`dÒ½$s1ã/1WÝó€ûe‰ßbëW¦»ÿŠýòX‚"ˆÑj] Jóàdþ9ÅãF›ì ÿoJ‹ÃõØïõ±ÞŒôükh·M¬©,ðwx,Â50€WÿLÀÖñ´ì†®Ö5¡{è5¬ 5èœ$q{ó˜è<,^,j\³ñÚ\ô0‡q›}W‚?K´8Øõ”>Yy3ëu«­¯ÄÞ£³†Ô?áHæÏŒ4ÇâG;>`Ïe†?^sµv†áÕ*BGgyœ–Ý7Év"ÿÚ#ئ‚E—qvÛФ:éW S‘¡8 uÝ}tÛœKu¶Á¸ðæÍêr@h鱚‡èó»_J$Ì,ìÆ[bÊFëW8Vø/¸aK …ƒB7%bá±Ãܬc~vص6˪YRy=<ܨ/Øéõ7Ùg¨h÷%Õ!ë»eé(’.„ã ªÏ4Ãþ�Þ?‡æëûœÔ [ÆcI)®é—KŸè5(Ì\Gé“Å4• °R‡¦nŸ»‡Þ9Þð^’†×õRÿ„#™?[0Ò‹iìø`Ϻ‡ÁØ™ÐqòÀe7£Y÷ ;2 8G<oË ]xg’‰÷ {I¤=þx½Ý8^ù o ød+&ü?Ê<œ¦ªå$2%ÕììE'!J<¯Ñ]§ªú>l.v•xœ0·´Ã2ßÅK$ø›Ýdr‡X·–Ý $…c}Dß”ˆKCšª¿B^F6 T·ab7¸™·¨¨ôÉÛ¦"lS¨Ñº´Ñ+TôÅg}uɤ~ú’R— ®\>iç=lº2h,Áq§äÙ}2Sü1,‘‰P»Ô›Vm‡a_5¨&˜@’ µ×Ý£T­÷ÎõÕóDA»0&õO8’ù³#ͱø‘ÆŽ„ŠÙd!.µÝ÷P}f?2²Ž@Uo‚…=ß>nä½ôI(Ä3ëW\W5Àòú/ô?½]Àê¹K[´Áò¸–“ å‰ÂŠï¡o7ãåxÀ-WÊF+.üá`29²÷d"½À€‘ÁFJ•A–sý=G~f÷Ö-ºúˆeSbÜc°u )ÊAŠ`Ùh]0³›Wí ·”y8ô§ET‡ —OqÀ¼mƉ² Ï4o…î°–xøÌt^:Òº¾8÷�’Ï‚¶š*ì;‚sä2Ë6Æ[0þÖS|HýŽdþlÁHs,~¤±ãžc6#B.HmÞx8_uþ³Ñ.Ú›P¦$%K–/g™™ß )«‡-p`2nŒ¼‰ñ,&ŸéO˜Ûp­âö*NA¥»]É×R‚ ÑðVmrkÿÃ~=X[ŽKæiï÷mº¯ µ¾÷ýØáa‰Áº%±.Ö·)-ÀeùF!”Í`×—£ªó­ïRÁ ÉÎö3ʳ  ·ÿãÿ­pàò)¦a¾T Ãk[Ân9æïqÒ`÷ßTr B·¡C_Íòèšz0CLKLƒÒÖ¦ê3Pì-G“;7hÐ.ŒIýŽdþlÁHs,~¤±ã>c6c€™‚E£ I¾ÂÇ83“OQ•»ù‡wù]g÷â{W*2QØú·ÿ§6€7«i TyE’²)"˜±v|sþ±ÏØ0cBY™ 3ž1t« 83 ñ°‹ˆÝºE+6¥ e•öZÍ£¡Væ=¦¦—;^·µÊgïg7òÈËHeß ²T+ÝSéƒ+—O1À`Þv‡5¿ãfM'ÎÃ4‘ˆR\»Þò<ËÖbYæ9´;×sÈ“K‹èµ—Y…U‹ºÖÿÀ¹»éÇ37nµ¼®§8ú'ÉüÙ‚‘æXüHcÇ$fss‰ºäd!ãÔ_wÅš_àœg•®W>ë gÃ–ç° e¢e /+ÁÏ8×ÙÜíÅ{¯ERuiÊrèm1Ê⬠dkº‚"¥ù¥ÃåM,`òi žzó±HÐÏì÷Nú«Y„µ´¯Ñ9àËÃì»u‹>B6%æ :Î~©«™±‡Uèö#[žŠÌЇQKÉ„ü>0n;ºHlʯ¡mzI”€„°a—OŠñ*™U¸ÿë>¥ÓÿmN!ïQ…ú>,úºÄÙ¯Gñ‰æ“y0ÖQ…L²9¦d O¡Àl9>Z·ÂÊ |¯§õ"õO8’ù³#ͱø‘ÆŽ¸ºäŒù{»7ïEeM5.~ŽTr©þíMüpp»ÿý¶C©‹.7ŸI<s37 ªð+‹UA×j]§,¶€ Ó,¿½^‡«å‡‘™²M*](jæñÚpY%ÿ^öà#ÍØ†;wÕ øÙEDmÝ¢àMiѦÃ.Ù¨:_-ß.y&Ð_[‚â¦Ñˆ…ŸM-YX„ÛùÍ: TªËÐֵœ´é½‰û¬¹;NúÝi€Ç Õ¾Z ‡ 3½ò*̱xÞ,@·+ 9ª_‚¬™ó˜ê¯Ã‘âXVî }=IýŽe¯•æXüHcÇœ\r®Æ‚wœ6’,®s®ý›züÞTŠ}ªX†GátXÑ®:†(>Æ™{€¢ÔíÈ+¿mÉÈSd#]yý$iL¸`¾Zî¹À€1ðL¾€¡âŽè_²§°„(ñŒâiËï˜L ìÄÛ.’TÖ- Þ”¬ZìÜ«‡#l(‡J)aÜ5’¸úoB™*óeÎÿê(²w|ÅÞ"èú“¡¶fæÑ|ë·Äm:Ì0ôÇ.¡s"èX"nà÷Î"k¿öXÞwá´;¿„Þv´+¬a®ã‰„öõ$õO8>”½Všcñ#pqɹ*ï8¥xe.:–áU6ÍMÐ9Å`¶Sƒ+QBÇøgY…¦Yù¨ºÇ1Ù߀ÓeJŸEäØTÐÙÂ’Æ0oaú¶†Ÿ„‚³€±‡wñt&ìÂañ%Œ·,à&=;¿ýÿO ü|‰àM‰q™¡Ù}êG=0›Í¾Öý5%yPjy_?3\@Y•3)> ŠÑ¾Èr4èd r`åàœê“wbSŒD�ã…¹ù&Ôޘߘ¬c¾›ß„@Ü™ê $õ½¼Éö ƒÔì’åBÕ or%ö© 70çÍ]h¯)Å.¥¿×Ïq¶¬…+'íëIêŸp|({­4ÇâG;àâ’s È8e•wbÖ¯ln­ì‚ËVƒ#G.¡¶±úß@±«2j ã̼mBÁç~¥{â!Î^zÆÊàÄ5ö®‡”>‹3ù Îæƒ¶Ó«Ir°h¤¤@¢Ä§!ß;ÿV´´3œåîàaáçƒ|H± À¼6ààGÆ6¬Év×bȿǑ×1°`z{ öêG|JP@ÙtýUÎenC…‡qõA§ôÅ”ÈäÙ8àUþä8˜P—˜E¸ÝhP—!_q…Õhê»‚ËØa8HRÇGžëKMv�µC‰á$ïE3Rÿ„#™?[0Ò‹iìø€ƒKÎ5 ãd8}¦±Q˜Jv`§öH2cöÊ· å“O W²òƒÿçÃágœ]è¯þÆg™$ÖÈÓG¼!XïíT•Ç[€Ç×ÈóN J[‹ÆÚK¬R][œec$„„ÕÑŒgQxívPÌæm\+ÌFVÉ-Xƹty˜Ýü|‰ÐMé:/ÿ€ÎQ'œÎUÚ¸kI˜OŽÃƒf`Qça{hx/¢lÊ?F{p$GÍ@1ßݨjô—%bÏ ÷ Œ'Y–(,VÿÖñõ(…‹˜é¼MçHä¹¾ÔÞ-}¦DBûz’ú'Ê^+ͱø‘ÆŽ/6xɹdœW? UÅ(¨¸kxä‚ ß?Ťÿe8‰ç9ŒÛ18 =¯ð¤­$ó„Çù™[Ø÷þ*omÅXawÌžáU($YiËkÐ-@r> .`àÅ»Qi®?`ï¶c0pT>އ]„Ÿò!¾)1¤¶‘¹:5)N¥ DÉsxð€ç5ºTC¥ŽIjùä•G8HDÉ,«LŠM+b~Y–((vÓf_Ò°¼ ¤¤~(V§zrH>ÅÿÃ*ªÕÍp1äµ-m} œöõ$õO8>”½Všcñ#px/VuO0æ½ÂÇ)4<%BIº06έ(üHŽÓ¸ÿÁ°gçÔú¬ÎUû¶ {~[†F­ƒá±#“nö/ø¾?;åO¼$!2áÀ«•dü?ÊÎÉóxÁ‘¬+Ð.Â~N Ž”Þ^G,‰�!›3~Ýa¤’Ò'™‡ñÕñ\ìÈû{ j¢Žm2ܳQ+Í0˜¬Ã¾—`~ï?iÜЗ|ùæÂÄX6_¢v÷VȲ¿Eûð´ÿpbÇØnĉX³þ†ü3ìÉÈDa�ƒ†cìØŠmÜþã ÚדÔ?áøPöZiŽÅ4v|ãËnFsõWÈ“oÆ&Et×Öõ<NËá)©ÈÌ?…ãÙ™ÈS|!JŸ0ãèºpuƒÑ.sI]ÌŸñx,–óžxC}‰Ì=9{ë2¦"Cqêº;О֠; GHˆâ}ZÅ™ ¬ŒK Vþvñòv_‡užãlAñŽ,?xå¿\X?ɶ‹|„ljv=öÉX![ÝãÍîë1«‘o°cÞªÃIýpĉ‘|‡G¢à G;ó˜ìo‚¦ê{´³Ÿ‰(›§OCÓ1êW9&<6Àz²z³Ñ*P;Ì*ýó6ÔûΧ,{ ;ü¬<ß_Ѿž¤þ LJ²×Js,~¤±ãÆýÖŽz¨ v!…ýL²t%ÎݨFû˜cË&©-2YÔ½ãDµ…YUƒsÖꪨµå:ΞW0i~€É9ÇŽÃÞ8pØú`6ÿ†ÎÖFh ÷£²;67Zâ*l¬n„Ùñ ¶îû¨SŸ†Â_Î0³âì«xÕIЫlŽúKS’xæàvVÎ’”Í”àMiÁ¢ÆöM—Òkû”͸ÌWã/}N² ‡ +œ Yù:~‚V¥‚Zׄî¡ÉÄ(š^Þc°öKìT‘,x’¸á'”äȱ¹ )Æ1õ`ÌtçMoÙß^ÄŒéÊLcðLv ’¸‰öõ$õO8>”½Všcñ#0oÑQ‘Ù¦ Wª`èôÇ02Xð,Ä-@³<Náá)esŒýAÔð”„3Q8«öxmò^ËX'ÏÁ`[GØÌ‚!+Ì:φú§¸¤ï“ªLˆŠL>{†— ¾¤paàqÏ%P¨M^B6¥÷Ï¡ÎÚ­uÖû’ÔQ’“¬g²QêÆW’ðM-Yà G;îÔìdá ÃGö*Ú_%nmzÞ¡ÿÞ5T]nÅð<«¼³Êæéâkèˆ5ÁÀâî ë³·ÉVÞÿñyoš‘ú'ÉüÙ‚‘æXüHcÇ󘲙 +?‰r]úœ³ð¸ ×ÜçØ–Á{‹Y»ª½.ˆ>e3Ÿdl‡l• ¼Œ3 »ª=ýçbÐùã®8NyÏß0ë¿E¡ò +uhµ’$KŒ¼Äx$SB‚EÀ]„]€—Ê¡·óa%~B7%’¥ ?^Õ@of½E ¹|Ê^ðtpa…£Þ6a›BV‹ÃŸ¹•UþÆû /æ1m]+ÌN’/F¼¥Oö Dw'(õÆÖ.؈§¥}=IýŽe¯•æXüHcÇ3¬Âe­;¹l+R¶Ê³IbÝ·pUõÌ“$«}äy¨3ÿõ—¿qžÃXo=.U?Ä7¯{OÏĘ ȃ±Ö¤¦îEù JòöB‘ å*±¨"€$¬cå±êû°‘9áqÂÜÒËwò³›èõ(Hßì]LáM–YÆ*I«gé’…ŒÛšxæàŽ’™3¦ß—ð±Q+Õד¾ØÇxÊF›² ù_EöŽÏ¡Ø[]ÿtŒ '¹`éF‹ù]èÏ{̸TÐ�{”yŸ(h_ORÿ„ãCÙk¥9?ÒØñ¹D@‡þ*вIæÍHWœCMë47™£–#YkÓê~Ç™=CÇzQwöh¿C~ê'(ï|çÿ·Õ 2Ã.ìÒ °#Ê~}µݳ¬Œ¤ÿeMŽÏo º”À“#{O&Ò lÄ!VF“å\G?Gʳ›ø¯g#½ð{4Y! †[P)òüÖ‰vX§xÎê!bbÙ”<f ôƒoÑ’ãðØ8$‘A9ª:ßÍâjô3ʳ ¢&2ØÌ0ôûRØMLƒÞÉy¯‚¨Ê7À9ÿÕ'ïÀӾ悭¾éÞlxám 2Kë×g)Ý ´¯'©‘̟-iŽÅ4v<ÀŒÂTµß›AU–q õîêkX§ø ,äßx‡ygß45ua8¦ÊÄê$>¯ý“ý” ˜h½„K¤>'ó¦ok`ùGR7ÅÇ{XµyÈõ>SâÍWî{¦ì×6ÝWÐZ¹‰Àåav+D;.]~‚±yÈ*¡š h“”Ìõ²)Eй 4Ù§(Õ÷®¨¹òûkÀÎß):ôÕP©4Ð5õ`hÊ—Œ))p[Q«ÜáÏDv�yþ¬rYªÌ$â܃ (›®ßbOîãý(Ô6]^±íŽ Š]%Б¯Û¬˜âéÜ£}=IýŽe¯•æXüHcÇìYîrÀÒVƒÊÂ|VÖ ÍbE·éwŽ-›ñXD3Îî>TŸ¨…”ĘhÇéýWÐ霆]¯Áɵ /ÁÌX;¾9ÿDfš1¡¬Ì„ϺWIhµ^x›ÝŒë/ô¬£À­Dt‚7%o6ÚôBhƒ75î¨aWɿٯh³Nø{?Ésx$šÈ7”²ÌshO 7ZŒÛŽî5Jó•P~ mÓ oÄ@âWò°Kû^•(›ò‘!ß‚´Òvßf·&sp¶_ÃåÇÎyM”PÍ©fNÒØ¯ÚדÔ?áHæÏŒ4ÇâG;!ð»ÕÖWbo‘óAÑ ,檯ðßQ ,âgòùºÐÖG¬_ä,>‡Lâe´#¨^·„ˆ˜ƒýÞÉÈžbi_£s†›R6¼Ìîx ÜJD'dSò¼Bû%튂¼ –ë8ÕôÚÿ*”ß—ˆ3Ц‚,(Ô÷aqÌøÜn7Æûõ(N¦Ò'+`0gnÅ£Dy`ôÕP音J­jùä•ß5&7ž�ìç¡Ã+‚öõ$õO8>”½Všcñ#LcÀêdUÌP˜7<|æ�i*ÃljñxzBѳ?Œë® ‹ÞyL ÷ÃÊc芗Ìãµá8²¼Æ© £•± =öàç¼1x˜Ýñ¸•ˆNè¦4gW-TçÿfI°Â¾6?D›%8/”ä8<x€XÝöÕb8|µ%Qéf¼× ?P{+Ÿb—r³Ú:õT7ÀÅ×f´´õaŒçä@ÚדÔ?áHæÏŒ4ÇâG;>pÀX”3UPï:»X²»½^6óp>8;Nã3¾0™åq¢9f“dÉ­AyÀ‹Éh^fµ:$¾/›vja¥ã®W‚ <£xÚò;&£ŠOn¼4aـ嚇Ù_[‰èoJ‹CµØ-Û yv.2Ò‹`±Âph;6ÉöBÛ/Pñà5úýc†$³9v A‡g¶{g‘µ_c2šñ唣&Ì Û`|ŠáDø¹3°¶Ù÷hF·Ã;žÁðÓ×£(.¾Díî­É?ÞŒL0h8†ÔM[‘£íãä–z=Ð>Ÿ¥þ G2¶`¤9?ÒØñe²( P„µ /r©lҳɼ6ààGÿÂÞÊÑXû*ò?Eºò&ú×áU´Ò²é+ wúôO°I±q¢„ÄÞ–¦É¼s0z‹^»?xØEâ+p+òà,XµØ™K¬o æoáØ%R’Çv‡µ/ÂÜ8|ÿ¾ýþ±C6Ñ:(ÓÒý‡Ôd¤° R– Uoh¬8!^G°/¬'˜c$‡©ô�*ZGàfÞcˆ}ÿÔ”ž9 ¥ª‡Ýb`á´;¾’-ó6ÔûÎ+â€îð¼ß¸Ò>Ÿ¥þ G2¶`¤9?B÷¼ÿFýŒãY÷pDyˆ+–ÇxÚ¬?)&ãè1«â•ýßÀ<&-u(>Ý gÜ罤lŠ" «äzÐåH#êU‡‘ò=#Z,cq˽<íÄt^àö,¬±ÖÕ“&dSbœ0}sÕ¯´³‚|Ù˜fæ0Ù} 9*sDWZ¡qNávt£A]†|Å!VT£©Ÿû´éÂÀŠ¿BuôºìN8öƒ†q7n´$“¬²Î{ØùnÓ¶AIJô¬Ë5Ùƒ1Óœ÷Þ²-bÆte¦1x&»bÏhË!´Ïg©‘̟-iŽÅÐ}Ûèû‹cŽ;ñÈhÆl˜À¹ø²·,3þW#d<¯Ñõÿ\ÂùuÉçeg:P¾G[ˆçì&L×pÝ"y~˜`„zë³(ß^‚Ö°|0ñÂÃì^ÀØ£ô̆ù…/¾„ñ–ÜTpù°Þ”íwq4blÀΨEzƒ_„~ÿØqâaÃÊ \PÂâ/æ2o-A1›Äö° ¦¿þ@{UŽß»an»'bMº´8‚{G#•û‘!­¼|?òÞ4#õO8’ù³#ôç$ï¿‘–H"½ßz["ÙèßOtÿ¸Áƒ"%dL}=3b΂¾:Ëã_‘üåßO$ ˜ìªÆùf»ÿÂœäøøËOPÞïH|hÚ©gq¢)0' pY¾GŽìS¨-³þïm f·NC~Ðâj’m\± àõÁÏò×\jwÑÚóWÔL¿Á¿/B¿ì$þ€æm ÊÎ6â™Ù sH{‰ñ„øÑ²›XÿM(Ùƒw“ì3œípbÎþ×I†:ó*êA0vîñǾ,Ï{cë3Ø×•Ñ–hŸÏRÿ„#Y>›oßÛXK$ùû4÷ð¡÷0Vªp;è¼0ê RîGIÝsŒspÔ-C|EòùGVÁì³ù?ó$zU9¥~H2ý|°x†a(ÈDfþ\T]D婽ËdHUÖqæÍÃìf•Mã”× †Ä¸*#,ã<û¼%¡›»qtþ7 îB§&Öª¡7YWU„>Äq8ت¤×ôËsW¯Aaf.g”°¯ƒF´Œ†¥·N¤×?A^÷oü·õ³¯ãHDÜÝh1¿ í·@Ð>Ÿ¥þ G²|¶~ŽDÃFþ>Í}#|èýãF†ÇÃÎ óÖ8k®€5‡xŠäó2ŽÌ[˜<‹|EJTu0Ù&àñ¸ðnÊMÅY*! ž·°5Þzë e*u}.àÁÇìÆû‘ü>“ç_ úËkJ¥û¡²)1Óè×F*û½MÄmãÀäe¤!õ CÞ„L+úpÇáD˜Å¨#,;Þ/ªØv¨vnjÝ ˆ^$♈ã³Î–H"½ßz›ýþ‰$Y>ÛF?G¢Ça#Ÿæ¾>ôþqƒ?W7áÏ¥¼¤Ùak­BfŠŠ“8ÿåqˆ¯Hþòï'Ž‹ÛS÷£²ætª“È“ï€BóÎÄd”‹p àÕªòì<Þô „%¼Z<ì¬@ûóMþ ZäN8þ¸‡òYRé“8Þ”|¥O¶"»ê!†]þ“™…ÝXM£o«øØÔVCè÷_ó˜²u@¯½ •J‹º÷PSñ£´®/ª›²x ^*TÞ²Ü.e!»•¯NñËFçk¢ç»ú·‘&fÄÞÿ�ý‰‡ü}šûFøÐûÇ ÑBbÒ«ý/žåqˆ¯Hþòï'oØÕþ@Böµ{=µe(И“@ž‘ˆ"–AqæÂRýÙ•í<JòBk?~“‡]"ºõD–y½.Ñ›‡x‡Œ]�ïMÕ¦ƒÐ;BkC1=”R6Ú âÁXG2É eJò È–ã£ÌshwFÏ*'Vñ:8¤NÌÚä"AÛoâF[§¾‚êæö$¯ÍhY—+nìlt¾&z¾'sÿÝ·D#öþæXü$óØÝ?npà®J‡'½¡¹ ,/ÇÀUµŽqX³HþJøÇ÷jøšÒmnØ.ãGW3ìy<=ðÌ¿´Bt´£gï_Yƒ6¤Ä à ╠y˜Ýì¹[ ݯ½A‹¼]ú 8’ýH"VB6%Rgpߨ¼èlú2äÈå(,›cq�º]iÈQý§;°Äæ1Õ_‡#ű*F4îÍH^¶û¨ÌÜ• ¯…u÷VÈäŸaOF& 4CꦭÈÑö±G'·lt¾&z¾'sÿÝ·D#öþæXü$ߨM¡ÇЉ1ÿ«D÷o#0®>Ô> MÇÆà9ˆe‘U†¦F`1÷ax*ô’~#qè¯;‹b +/ÌÏÀ1ðÊg-ôLbØò–áÉUå]>Æ‘ëÀå’|ìIßƒŠ†Þ%¹†qPS6Ú9 7œBÞ%òKÎA¥Ò@§o„±µ½ìxÚ>÷d³V•˜lö `“Ïžáe‚s+ò°KD±ž0¢öó“hz+MÈõº)±çä ÜÓ|‹Ë­C¬*D”ͯ}^+Ї͇S / Ýùå «1‚]>™÷˜šþÇ÷}ÑÍë@†”ÜêÆS³sÖõã·ïõâ}. _](rÙrì;˜I_=ÐþVŽ7ÍÎ×þþZ$sÿøè[x |?ðÿðø~€hÿ­ÿ{ðב¾üu´ïñÁFß'Ñý ùûc]hí[ÃÝkÁŠÖv§÷K^û¬ÌÔÓŒ‡þâÿôôonçs4k‹¡4À7z‰ï_üøJlÎ;‡šê (Üó/l’åâÛÛßá ¹ìdû½)õ0týÜÔ{'o÷潨¬©ÆÅÂÏ‘ºi ²¾½‰n÷½×¦íPꢇßð1ŽÌÛ8±ë ?¶ò%­ÈË­Œ=G Ó2]ÆÞÔ-gç"#Å?–!-A¥Ó$q©67ß„š\üko¡Õ<ʙ՟ÀÃ.ɲiFï/7Pög5\>$B6¥±4<]=+gx]Èß�¡ß?f˜)X4JìS?@ïÒÜíB{M)v)µø…¼~Öˆ³e-"µr’µù´O~ Y›fËŸx3õ~Õ[Xañ`ÌtçMoÙy¿ˆÓ”™Æà™ì‚*ç2çqŸ¯‰žïÉÜ?ÚÇNhøêÿF߇×çè4¢ ï.†Ä…¶‹% ø-9¼öm |ß5f[ÖïãÆ¸µº3û| ûó›bP6_£)?…­³ŸáOÔæþ ŠÆ_Ñtô0T~ǰ׋ç!Te°oøü^ðŽÃæÂVLë_íìéñ{S)ö©Z`…ÓaE»ê<ì‘/§ùÇE¸ÏðÔ6Ë [÷}Ô©OC‘‘ƒÊî)ÿÏÄûwì&hN«`´±Êº{ oHÂ% +ÛwÞƒ&¿TR6Eñ�Ð)É¥H*2óOáxv&ò_ `•Ë‘õÂÃìŽf=Ù‚Œâ»Ž’1U":!›’Ó�ÅŠ± o¡u!É÷„Dè÷o=Ç´ qŒÒdP;$ÆÎh±.˜/•CoçÚ!•#GpïèNÈV< vž—w`ùZ…ÈßÞýýµHæþÑ>vBÃWÿ×ý>ïÍ0< ¨#<?ǘÎÄ(¨Q6YÁ}Ü “î òä›ýý[¶ Ö?Ïl¦œS|ìÛkSrP¤1 ËfAû@Ê&I ”í ñ˜¡J!ϼ†*ÃR‚°ªagåu.(=ÞqHñæÉ`ÏOU†WÙ44AžQ f;5¸"dé“É_¡­ú†ÇŒLʰrÀ¸¯â(sÁ¸íèÔ|…ÓõL.yÒ-Âe~ŒžÉûeJpÄ?°ëA&˃ºwÜ?ËÙýgÖê*VäÆs‡ÙM¬'?@?æw±ÿ"!›’³••5¡YÏê/B™[ŠAßk±,Õ…úp ÷p g3סé »+Ú;¸˜&ñ0pÛêQpB›,³ zŽ])¢ãÛãŽà½؃]pí^Œ­Ï`ç°.T�2a£¿¿ÉÜ?ÚÇNhøêÌïü‡ÓÜ ma.”A1`¼>Ggt¦1¿ MOËû 3Ý ÝÏB+›$ÓùcÔœSúËd¤!»HC—†qWe“Ä3¢«Q¥÷\!%óT]ZŠod°àYXßD÷/~Þêýå~es'*»°éNâÈÕ4êqãÜAìªàæ‚’ŒCVy'fýÊæÖÊ.¸l58räj¡¿ñ »*-}Âøhò–<!Ï6ŠÓP×݃áb ´ÖxÍÁÙu%§ë`K†Ä‰³°¨?Ŧ½,ÅýrŒýôº°ë…—]‚ñx ÝqpGȦô~ǹÏÂZ} ªÞIÿëP„>è=œÂ`&`m½}Cºnöõ †Ÿ¶À˜ ¬§üC6™l¤~ϼA†[P)òüÊ\;¬S<¬^V¸TÐ�{LãÊ DÎn´˜WwçŠÐùº€±‡wñtfµ1qã¥Ñ¸óšèùò÷)t«_÷ß÷LÀùÎ'´$ºob‡¯ñYë}÷[XM:œÉK÷{,[ ¼Î1Ï ¦fƒ×çJe38Öž×¾<“êj„J°îBª]CA d<l…¼öoqúýۼߓ¥Áµv¦ÖؓݿøaÏ »§«L›hGÉæ\¯BŸ`¬ürY*>Éø$äRd#q0œ¾ ÓØ(L%;°Sû Ì4lÆ*ì•oAÊ'Ÿ@ëŸãèu×n8‹œÔtdïÉ@Ê&9JLãþr&?…¦¨ ºîØ;Â,Uš Þ[4ÈÚU «×Ó”ì—9ìÚØî¯Àü— ÙÍ dZaž[e“Z| ã- 'õ>4B6%r‹Ûd ³´ýÖŠ,¿KÇJ„>è=œÂ‡©ô�*ZGàf…“!ý¤¦ä ðÌQ(U=ì’;ä€hÇ¥ËOŠõ²J¨æšü *¸Å[}aä‚×›¶ ³´f'+ø:2N<2šîþ®DqEè|Þ>F©7¦4ñó=äïSèVò÷'ûÐýr5÷lóVNSO÷!yœˆÌSÍ9(V°ìbh ]° ܃ö®@Ê&³�ÏBðæAÙde_‰âwŽÍaX˜îÙu(Û‰ük`[##*¿ýca•u»¹ºsJìØ¡Ä¹š‡°8f¢z¢%ºc.«U…ÇQÑðbEüق͈ï;yu7ÆÕCU1 *îÀîe³`CÃ÷OÙ Ä8’øÍ\W5Àòúþ ¾ áy.ÍA¤J ‚DƜݷpUõÌ“3°¨s Ï;‹+7ɳ šÝ1 djÍdì–ˆ&\¦ì‡6Šàòû ôûÇÌ‚je†ÙÕÆL´£4m”úAx‚³Ñ&¼z1ÝžBmC%•mwTPì*Ž|ÝfÅÔª;\´Ý¡JW„ÎWvo3ªPy»1¨ÿ¨WFnÉõ ±-Ÿ+_èïsOÈߧЭ>´?£4dœÂ[TŠO(ЧãÏ{¸–Ê(m¾úú>ó˜êB£êÿÒ(™—ÐØ5d[Væ¼>Gç#軥À”Í93ô÷„šc¸ìf4ë¾bGçjÐfqD Åà¿Èe º›®ãL^² T¨7Yà˜Åãº'¢(}Â'ËãÅûe  ã¸hoB™²�¥j=Lþ9ÇÌtáÒ‰[°Å/³€É§7PuÀǖL.íesxçœð]H0oa*-“”M‰4»ƒ²Fܮ܇mŠ‹¨_(~Â’\d•Ü‚e\šë%dSr¶@¥}”-•4kPð÷J„>Ds8‘zއU0ýõÚ«rü.ópÛ8q"êl Áœí×pù±3t~²J¨æTó’�³:+U¸®¤(÷£¤îù’Å¡ó5J)§ù¨>¤FoסDÏ÷¿O¡[}Èߪl’3áS¯[¡,½õ6Ÿß@¢û¶.¢%×x÷7ÞEQÂaÞ6áÈæ-È8rÖ„•âžàç°8\ýÞr›‘ž í6¿¹ üÎ1”òlX*F¾Ùò!#ïÀRòÙKö-âRÛ}Õgö##ëTõ&Xxû¸‘®Ò'$#­­ M1²É³E6Z~Y‡UŒ-«XÈ¿'fò)ªr÷"ß_úD&ß‹S* *™¾¬½kBò<4Cuj¯¿tJ&¥WQ÷à'\ü2Pvl}{¢Ä‡A‚f7;!GGñÎ;×H\Øi_M¼`f;Q.—,›ñ²)­ˆOY>6µÕúýcg®þ›P’š\²Ïp¶Ã‰9ûc\'éóë̘”öÒ8pâaC&<«ÌÙ5]ì]÷ ûˆûå J€{sè|e‰ŸëÐ4ì¶Î¶Áû¨Ø‘1˜>Ñó=äïSèVò÷#¹Ñ’ºm­ß S&Cªâ{t9—Ï ^û¶$×X´ÝÆ7†ÿs ®K5(ÏÿE«ÔE^DO€Ð÷a…I—æfÎ)2°Cq5m8V©›Ëës\¡l®lÔ(›KŒ´6t4(Ê&Ð)ÈFÆe†¦âž¤l†±<ÄØr…×n]¦ÝƵÂìU ,üŒ#»v=¸ÛãļËÿ½¿ûi*ëÿÿqÿ€žxèÉ$„ăI®“É0NøÌBtLSÍÌÌh@&ÍX>Žô=Zœ±ßø–úÁ±ÞT¥:À„zIg®ò•~¹Êpsµ`•rÿ-\E ûùÝ«7Ð]Zli»»[Ö#Ù3´¶{¿úÚk¯µ^k½nŒ:êËŠ!–TBå]à ¶½ÚzÑZõÒ3>Å¡¬tìØU]ˆäG ­Û ³ò jõÓ~“CvÿêGîÌŠY¦£íD´R¢‡äœÈÄj “›L¤(‘Ê6àØÔÅÞŠß4ø›cPY`ÖÖ";Mç:›¡V­EHËoXK ä÷û±‡s~ºÕoz~×[ô6|á.€ž]©Áp@œSBe A4É5VŒ·p^3—»d�‰mÚ¬9e¥¨ÚB‚ŽxëÇGèë—ÚÐ4|‚¬\Ën»Ýóæ'ºÐœ°Ò'n´AH¨í{p×w–¡=!Æ&1Fôh®ÿ ÷à`Èkp’â­`av=†3Þò% ëzðßlñáó~xjKðØÈ¤Ô#³�k×OµðÚÊþfº›I /­Û½uŸó Î]„Lv•§È¾é’æ0ýÄ)þDÛ)%ºS£ƒÓvfØ[¿ø½÷xûPëä+þó¤cÜöÊ›w¿‡âù?ýÜÖÙÃô¿ø.ÜïÇÎùèVêü$+¤ºì�D¢”ª6&ï $J¶÷³Åä˃P#ųÙöºö»É®|3ê’ÒØ\‡qÚaîQC^šÇà ÌF;Ñ ÍŸ Þ!Xù¿¡y4îþ“Ù˜9ô7Wã4ÙÁ^ž‡u`ÌÓÞ]31þ ãˆ_&ZfasÞ‰;¯º#¡#?€È½[•bõ�†Ô'‘¾ãä)ú,µW¼åÛ:6<Õôa³'3–Iåõà^”ºÿ3ê‰'”â'ܪú…ÒÛèQžK¸zôg ÍHŠ*P¯".ßdÑaóúïq¦É´}P„ÎÖbŒ#…·ÖÍ8†ð¬Ii‘bI)jŸc$5ñ¶ÑvJ‰îÔ’£S¥Ä‡X¸ÀZqW¦Äó^ƒÊ�ã =.5A¹í•kns3ftª “]…¢Y»iÝx·wÎù‰[ý;éïü ÷$§Ú÷ÔJåU>7d·¤µy{°#ýä=¯9mRrÈ:î1ø—-4Ñ'×ðâ60ú08I�æaºsY¢|ÔoaÒoýøˆì:+pDU{‚ŒM[;Š Îá iÿ!Ž+R1kHñ·³¹:Ü„ƒ» ÙyO®”|æÞÑÎùögüè[xرe_â\V^Añ±Øö´lFÓÉïa Þ®(¿ôÅäq‰·|['/šØ%•#çóÁ8ú ”{›Žì¢s8•›ñç(q þß.+˜é‘!¿àKœÌË€hÇ.dœ…쇋pZ—„„òÖbá—> ‚kzmT¯Ô@ï_SФDC´ß–D_Ÿ’H¬øM©Å(ÇvCÚo°/lØw˜›ÃŒ¹*ÅUvò¨@³ö/Øb˜åÓŸÀöÊØŸ£:{7û~º'éÈÑ\dìüUcAû´x·wÎù™7è¬þ”ˆ–užä(ì„§êIȘ@^åÃ2fŒJOtúhèùÛ¯x5äÞ²ñ–-¢O®± [ÌRË—~8×q Á4¸_´Œ7}ë%”üêXxmca•ÿYßy%¯ã 9¿]s »J´˜ÆFš>DZ ÿÒ”á°ìŒ#ã°YMè]B«e]g>øoìºïpÉ]¶ióºË¨ÐÙášé,ïjÐþ9Þòm/šFÔdA,k^÷ži» iN~Ì’Ê­ëá,ªã‰ Pß;ÉjÔ— y¦†Z¨‚Üc‚põÈl=ñâ ÛgYЩêQV$¤ì꩘”l-Æ8RøiÝÎÜ)þØ[ìÙ{ˆBOÎ(›m§”èN-y:UJ쉅 ,;!ê¬E¶;^ Ü ?2°3û":ü’ËÄ n{%1豯®µÝL®Ù>4¨„fbcÆý~ìñ?ÿªY‰ý¢Cu­ïfº¦Ñß$Åi͸W^.|ÊÇØ´¨–OÚâ;„—¼ÅÙ‘2¹k„Ù0bwxÇ>Ëcýè³Ç¾ÝÆŽžlwQ*®Ø9¼iÁ1(L ìOãÓ9ØwúlÞÇë}dÍ/*»Ú‘–ÁB×%|Ác#;ž]ÄðÈr›µ*«/s4‘IŽï`lu÷¾ ˜«¹öTv"ØÞ{¼åÛ: ·zs…ø•1[‡èüdÄ|g“$Å<€…*XÝçõ›vöÿÅ!ó”ð¢Ç¨ûR·ô7Èë•Y¹¹q¼”dbk1Æ‘ÂCëvaBSŠÅõЮՒ"™×ú :]trFÙœh;¥Dœƒq¡]¹^g,™H¼îƒ¹ÀþÓètø.°«Pî߃<Ùï~»™Ë˜íoƉӱ/IÃÕÙ"LŠBªF½ƒ¬eXUåÞ‰¿ 4üÏ¿bRàãµIÎ:ŒU‰7­<OùÂB°É[–`7´¢¶ä8$%µPjM˜ ±[ ÷ýa¯IʆdH=qOÃF´~s½13aoýøà\'d¶×c8£ª�ŒÍ¢™—}¸ õ(âÑØ$÷=Çm�{ŒÍjzà07âĉ:4µµAuëÄûkÐ$›'¯ºc,P;©òW¿]5Úµ=0OŸtÆ[¾˜@ÆŒ£2èýŸ1f¯ŽbgŒ’Ê­ëÁ¢QŽœý 0-“€Üó<|’µ×[>-øs·£ï–0Üô²åyJŸ¬eåþŠr9ôITΉÂ%ÒãHá¡— ÚÙ¥O8“3J$DÛ)%zpHŠÁiÞBÜ$ë")}àWg,™H¼î‰ ¬ÿµý‰ûJ9‰yÜ€;®è ¿]/Ì(T’kž‰C€_4puFâÑ®ãàáz<]3˜{¡ïøÒýEPüþ’}Ýuõ¥µ…´xëÜÿüî²£þé ¯lì¡‚Fi$Чî×/Õ—Qá·Ëɧ|ë,cÖÜ µ» Ð 5žõÙ¼ +py¸xË ŒýJÓ÷¢ òÒÏQ ÎE¦äçˆcfºeŸ}Ý«nh”5(ÊNwÿF²³_¤yíý”ðà܇`åkÞ¯mlZ‹ÒÏU°„ìPˆ›c)J½®Ï¼Èæºü*töqè¤ûð±âVXcÇÜ^‹ÂŒÝHûädH‚)¼êŽíH6Ú†)nì2 ®¸– ‹+ñ–/6XÃ+ÈÉ,Ĺš+]©Ä)wÌá^Hb”؆«RÖ¨×d¿À03c=kœT£Õ4rœãC±èG?ÚÚ`°ŽÁ¬ˆæúrˆIé’Q¼ê,q g¡Ä­ÄG ½éØ+QÛ5á·ÒH&¿¡2§8¤ÿ:%4ÑvJ‰}ýH`œ0uÞ¬x?ÒX¹E™\¼Õ¹âÝÙܬ±æ«]š¶E_…Ü}ŸA\X e蘃»4€‡ëùe]íAGcöKø¼~Ù†êŠ1Ùåäêl¯Õ'°“}¼úø�›A†]ò:žøŸŸy­Æ±ÁäᢃMöÎ Èëx²áü®qtÊ>GºŸ<žƒ¬”©aö3Þx—m\Òö+afõæ2ü™~3ý­(¯¸¿¶ƒ÷~HûÿuÍyvEI±üAtÚž-%Ì‹·~|p®cïFû‹™€gÕ‰Áöö ¥¼ÞGæo4å@™Ödw“SP–yJ³ÇÄàK62IWמFqÕ¯0Þë3Z¯wcÆûÒ^uÌwJéÞµ ö|ÞÙ°0Èý¾aŸ½‘çh’•¡H,†¤äŸ Ån2½¦‡`n‰&ûþÂH~ô£þgÅκ3®‹å¨ÿåêT}1ÏO‰'[‹1Ž~z § M’}ÈÈ=±ø( ¼« 9²˜Ñƒ¾ˆ¶SJôà4ƒ3ΪˆvìD†DuÏfÝ=,Ãöµ+“­ä áºgF :œQž½3ËîsY‘¶åWh8ûë&»~¸]½Háó`"¿CtMÃÑÇsq˜ïÆUy'ÆÛpŽ7kµY7|?ÆpÏ?…®«?¢k<˜L~Ǥ/f‡oùèW²ÛG_üj]w÷µjâJ˜¹{N?Z[$àW¶Ía&4(þ¬É÷5ýÕu/ÙIÕ ¦u7pÓž‡cïÄÕ²*|{þ –*Ñm]ˆª‰·~|p®2ÏG(s'–Ùçûq€{þeØ4§‘.ÊA‰â7t÷xÚüÈ+tkn $k7vQÁ’¨Å®ËÚæ£y•Ä6îÍbõÖÊq£Uÿ*ƒx¿Jò÷cfýd·|±Á†'­ç›ñ)}B®ÔAöÐÛ·­]h*ù2m/Lî’!\øÐc,úfò%~ª<qQdMÏ`ž%F¬!=0“DK¾ÙZŒq¤ðÖK0N ô­Þ¬U%ß@¡yq¼ ÅC´R¢‡äœ|]x”•gQ©|Œ>Û\ލä©íVpOfÒÖc}ƦãŸ!³ndó]7!ïåPŽ)oŒxtpuFV­­x³¸ zÕ:Þ:çœßù–7NÖâÂLöãÅHð”)¼Ê7¯ƒtW6*u¶ “-‚;ºTÌpž¢ü¼Êö^XC¹á”æEVÐ èÊO¸1-ZÔ¨õÆÿ½Æv_åáü¹BOÌ“(Òz¨:þ‚5Yv6m÷QSÓÈ5Fî\$¿ÍF»�ŒMæ-zê‚ížï€( ‘Ø†ïÆ˜ÀóGê²Æ¯|K°uÜÀÕg6î}\éEíÿjêÍoùbC¨Ätñ(}›¡JI¬{WÛÁÉNÞ7Ñ÷?Ä0ùé…Ñxçdä<{‚”¯¢$[‹1Žz ~ †n'¢í”øèÔ6#Ñ×ßÌLͧØú¤} ¢1›[†Ä¯`¿âkƳc3ã#deìŽlÐgVàZ‰Á ! ¸:‹|Õ:Þ:真²{Ðsd3àEÓY|&{�ƒilƒΧ|+ÆzdÞ,žŽÁ;ã÷($1mì+^u®1<ÜÏŽ[Äó ªÜ%p¬Çïg“÷Mó¬am÷‹yÊÛÒ r¼õãƒsÅqŒ¼ ˆ—f'¡¦†sõsMÐ}$™7 w¡¨*Äí6ù n¨º7¸ ò+[ä.küëŽmÛ®€ùZÒÇlZÑ.-cïÛú‰JŽ’ìx”>aLj»7Ñôʰø9måi(cìߘµr\Ò®õ¼èÑõÿ²Ïă(úFRŠ#k òVá´½@ÓéÓg×~ %Ùˆ<Æ8RøhÝ¡Wybh5o'ˆî¢!ÚïGK¢¯>$kò�:U×PšKÜ6w!S|Ú縯1¯:‚нë5ô?ÕC¦ú3.#ê3ö¡ 2H“@àê,òUkò^<áœÿ½5EHËûºíì¸ÇŒ÷d %¿Á—M4Þ²E‚;1ÆÍ~µäØIùì(úL¾ÄFáÀêÝj´v08é+À²ÅžôùŽM‹µ‰;‘¶š ­Éõ–÷ØŸmŒ™5á11&Ú_ÀºÌ°÷mÝšßðØèŸ7b>eÛŠË¿ò¥j̦_îl´b|x¼mÍ¥:Öõ° ÇÀ�Æ6œÓ sk#ºfÈ8·Œé®KÈñ{^øÐ# 8±k7²N܆É?¾:’þgy­_ÿÀÍ^ëBë7-0»wÆ(”ðÐK€ø ÝNDÛ)%zpHŽÁ‰…‡®öˆ§€{Ö9Ü1N¬$I£{ÁÕYä«ÖñÖ9çü¶‡¨oúVŽl6Œi/â¨ÒàþÛj~Ù¥'køy•oZ‹3庠õú<0XÔËp´éoþu÷V‡›p0G#Dzd'–}zô9œ­Îw¡öðQuç-ð• x½Ù¶¾ãÌ8ðæƒ;1N0Ü6bA#í!âß8ßœóÏëPvà´–0ìÄXu,i¹'q¾øDÐW^e#í;B—5^åKÙ˜Í 0oÐUweͱɸ‰Ü}‰(¥<ïl®šoã‚zÔ;!»Y¨,ú¥òß9.½¡qÁÞuҢϙWÖµXcR]BµÎç“ny+t&{Lç»<ôü ÝNDÛ)%zpH®Á‰‹p܈š’"”Ô4â±Ñ½î_tgs›@tæš´`̽óùªu¼uNÎ?:æ5NC0mìSWÌí¸ÞE"®Øö<Ý‰šœºµøX>ä[gFùe´Z‚X…Óúµ¹GyÏîRrÔ©}ùHß0 m•5úðÜh=YlÙÏ2NÌŒñL}R·×Ĉ2âTšç?ãôY-¦½ßÙŒxëÇç:¶ìdä‰_&hrôqwjàó>®¯Câ^¬ É›ÎcÏÎ"¨Øöæ_kÖ>eóÌe­ ͆·A'wüÊ*fÓù¹ûI³I žftª “ɡԼÀ°;¹MlˆH. ݃#—=®oá¼f .§]òcHß±Y%r4ÊJQ¥›ô~j3\˜Ð~ýG¿ÂIwéÒ²A,.@~•.&±¯þY#'ã©¡|Yi8¦ô„;Å�~z â6×,‡¬á¡'­½Ë‚{‡w`G®2fC·ÑvJ‰}ý­ãu«½SƒÂâv³™0æ0`²±wƒ óÆ„>{,×â<ÙÔ•aÇÔ®ZÇ[çäüï+b¿Æê š¦!½ô¯;›kÆ0Á5†g7•èàœNX:ä(=V‚Ê+ר‰·§Î_¼e‹fCêó8()ÇEo’ Qf î˜ÃkÌ„u-fνbÿDä<nkïB);ë©ãë-±"8÷Á5ÙÙ70éZ¡ «àõ?Cóâ?›îñÑÆ|¬·àËÚ§øÏÐÔæ|à_€¥½ güêËúàS¶Ð8`¨«tÅð+kÙzð±÷µáþ�{OÉk<îƒ=ÄÎW¼å‹ œæ;(ÎdŸ-V^ߘ,*¢Õ/ztïô{ŒŠ¢”ª^¹ïñ²©u››+p˜;q¿{˜ýü¬èa^|‡íßÐ?jA}™Y]†>Dé#ŠYÂpÓQˆDQÛ1´æaãNÖw¦z­^x´ðк}?$¹‡²‘Y¬ÆèPާ‹ Ê»‰þðƒ](^’¢SÛ„D_?|B¥KoÇ·mÿŽI!h¾IÝo†í¥E8…è’É®÷¸"=‚ƒîÄC˰=*Ǿ}åxd‹~]Žè,c3pÕ:Þ:'çÛØ$;†ò^Ërƒ|aÆñ![¸0ößq)Ï»‘w¿;‰D}D¡ ü[ù5*ÚŒ°¯?Ÿƒ¾&%Ú·ž—¤öÝè›M7ñÖÎu\cè¨úÔoWãr3Ò‘]õ$¤+¯÷‘™C¿òKw&ZQv-:íó°è”l±¾ˆá¯²…0z|‡(»ª€2(äýxÂ9¿{1êˆ2>Å¡¬l«0¤>Éêòä)ú‚Žyñ–/&0ãÐç@\ÿF_7òœõ«púÌý8ÔcŽÞôèšÁˆÑç‰0ÓÓÈå£~“0ÌtÊöeãPîA”û—7r90ùfÖÝ^™%'–b G ߯‘û ®Ñå[J\ Z÷"LŠä»ÝZ1ÔT‰:wæ¾E˜ÙAWa¢ùh#%i:µ$Åàä&þéÒù&ñº’¨ÀØÑ÷b4Lž½/’,ä³Ý€ãŒ#« 66ˆ·ÎÉùÃ767"dùø-\˜™nÔ®ÖâË6ÌÀ5¡Ã¥3‘yè¸Þ¢Wy™éÙK/âÊy12E‘d´]'Þúñá“ïÈBÙý‘u£È5…)ΠºkÊûþï£ ŽÉ€ÒG®%8ƒÃüÊF&v¹È,¹Ž6ÿ˜Hu dâH•¿²wÀ4ËïbÐ+¯ øXŒ¦‘%v®iFÓÉïa »U®(¿ü¦ Í<ÞòÅ’õü°·F®?Ì(T’ka–ÜÚœhõP=ºáX[ü dóº:\`ŸmÆeó•–+ðû¿_x]/EH+ÐKó¯$) –‡šqøã:ϳNp@%ý »J’ig“Ì#;páÒ3Ïä|^‡Š æ]vècX0t;‘ÔKR NnâŸ.o¯{V§5r<Ô÷úÅ{±Ç‹&”|&ƒÖ`‚Õñ¾Îm/õ#îÒ|@tFÍ­||È>Ä¥Pi½d—»nè?Öw%Ãf³Ã/ð¨YáŽkz6ÖNf ñÖrÙÏǼVãØÙÆ º_á@„p]9ŠUCäãW6Ò†:Pwõùš»Ö•_†Æ¾±WãW>ìºïpɽ{EŒŒË¨ÐÙášé Y9ÞòÅfª“uèšö[|tMÃ|¯9G6+Å>Ñê=.ÁnhEmÉqHJj¡ÔšÂ¨wO2°+¼ÉÈæQ>vœFEA.JUÿ‚eä_x|ë òN¯‡fP’eÌôk ¯½í;ºc³¼òÎñ-ÛÁà¡u/ÁrïlðTÚ{¾A×¼€S’„h;¥h¿-‰¾~øÄ?]:ß$^÷¡v‹ýŽ´C¨Õ…îä˜i˜·³Æÿ}è­Nöõ<Fº }“¸¢h 2QcsëD#²…‹»ô‰\¥ú9Œ£Óž]=ÆË/1øßÄ̲â­ä:ëIºÑVù%ÊT]~ F=x(û_¨-ÜþÒ ¯÷‘(Ý)þ"ö=ò>ç`åî…Ío‡óÝ8ìüŒã?xfæG^å[ޝ‚éN„=•A³HÇ[¾Ø@Ü—›!Ù“éõˆ! PDl{ȇ¬7ˆ§ÍˆV|葱?Biú^TÞ€Bú9 ĹȔüüÏŒLko¢…ìv3£)/$ê!XTßAeõï 0Ý”CKK&/dñ¥ów~½RýðLÌ M½){ 9ÒÖw‡ÈÑþ/,ÂJïž,$C§¶É18‚$¢aÞ ó8;øÖ¶´‘h¯{+îÖ·â••[šÃ6¦EåQ%ŒäoR³OVmÈd?“ЕE•v”ð/bXuéiy(9ÿ$²ˆµ¯Ñ56·N4òÅ[¶H ‰ŸeÄg$;^QŒ²úÜW|ƒoõ³ÞOñ _ú!×Ù¼~+9öà˜�ŒÍc=öf–@Ñæ7ß`_eDZß=iÇcÓºÁ§l„H3?ò*cúØ!¯;ïºîÚµ/a aÄ[¾ØA²]ëÑZ_"ñq”T5@Ó»rfÑê=’:ÇiÞäcžÌØ“˜éoEyÅ}Ø6™Ï0–v\n¢¥’îlá+¦q´ò7˜Ý}YcSñ--}’¬[ }ŠªŽMý#„Ÿ^Â5Žîÿ µ,cB2tj›‘è뇿‰hø ñºžI+f´^ïö”“qM «æxhãŽÔ‚“4»ão܉ ö| q‹aü?DgÔØÜ:ÑÈLJlaÃÌÁÔþZ £°™‰ ì5”‰³‘ÆžC”í­ëèýhªAôÔ 6qˆ6o0ž×ûHÕ)ð,`±jÅxç4¯½¯Öá·Ežù‘_ù<®â‚$R E¼å‹¬±iû÷•rv¿ …êL“±+½­øÐ#3¡AñgÞØÕé'¨®{‰Ew‰ ¸iÜl|sÀÜTä.•’]íug&ÑS›Ë(éÈÊýiÉa|—ª=`*ㄦŠë¡5Z½}©¼ÐÕé¤ÊF»û“»èžX[D{‹q=ö…6ÉЩmFò Nü&¢áaèžÐ„¬w挥KCïl’Œ‰_Ê ûÏ¿ÑQ›ç-†¾ §¥gb”YТ3çÈ_ès'@ˆ¼?‹·ÎÉù_ôÙ=“C{7Ú_ÌLlo‡1DZz>äK cÓÍ \WíU,tÕáT}nÕýŠ>žSÿÇ[?>ÈuÞ›=x©š§Á Bñzíhíz oèg€WÙÜ ‚"Ëüȯ|„ÈŒ²xËVàèÿ’t+ï.dä¸ ié' ŽÍ,4Z=ð£Gú.@if33]ù ȺưhQ£Vmõ~&A’n‘0‚Ñ®”"K¬NÊrp ²³ž¤`’.- ..r?H÷$‘úxG Ñ]4DûýhIôõÃ'T"œÎجöðMâuÿ¾zgde݈nó\€ÁäßÄAô)ª;mX²<ÃM²óÜlˆ¹Wg‘÷gäßâ çü6uwÇP柲ÞÎ÷ã�9ÿš1!ñ–-0“ƒ7£k :ÙQdˆØ orÍ«0t$Î}`'©½7K‘MbÞÜmËw¤AbÂïûÈ9„Ï�ç»q€{þÈ3?ò+_äFY¼å‹ ¾’.¹ß¢cdλðÅÕ1\ ŒV¼é‘탞?îÇ"Û]¶'¨ÊÞÍ^;ÜlØ+°ß¯Dá9”šnôûÊÈ8ÿ…ÿ]Ö»û3”äâ,ªJÔvMxŸ Â2fÍ¿¡2§*Ë;ï{ÑÁCëf'gíÕ(¹qÛ/à6n”ä"GÚ#M—1IÓ©… )§ÍpPWÜ KLI¸îcVïŒ(S!Ýöb Wg‘÷gñÖ9çü¶û¨©iô“=î\$¿ÍÆà¯òE¸óÊ«l<à‰'<ƒ¦N=º5áŠ$ ûŠ›#+â_òû_Ç]údçAT6rãúÔê{èYð~Š ¯÷Ñö¤%r¨Öäjƒêkç”}x•ÍMd™y•o FY¼å‹ $ôbo U£Üû¿íKŸ/£Qô™lœÚ®¡!ªí·jP”ÎÊ,BZö—¨ºqç}#Ý;JNœ&4Iöy—ÄGQEîínäÈ6Ö™ß*<´nÎñqLq^ãÕ(Üýk5ÇÎg~»œÚ:I18¹qÀ|§$x&e»PvYL®{êÅ®Î6éÏ>< uþ,Þ:çœq#o]º`j8Y¯;"v¼Ê'è]§ 8Lèê‹aòGjŽü�Ó²÷—2 °vÝ@é7[*oýøð¿cQáðá@7PB ‹ñ:¼ÞGçX§¸ ã0¢¡0 ÇÕ£¬éÄ…WÙ¶�¯òmÁ(‹·|±ÔxÿËHŒ"xØüi^vk¶×Îf¬ ÙK;n°Fç§AÖžs4mÃ8-з֣¬HIÉ7PÄØë&N­›¬~è ;Q•9˜¿/©åtÚýp•š©±)ÉÞ©%M§êx³P¢hõ[½g_eï—BIþ~lÂlìžÇ¸“pÝóPï,Ö¼_glÖ%lj²ÛAw¨â­sÎùmÚ‰\Hvßš\¤…ˆ›äW¾Èv^y•-¶vœ(V¢ÇlãÆ*mâ¦ØŒòKOa[;_8 :‚oýøà\Ç5Y9ä=#Üv6¤â®�ÜhƒÀØ;Qw¢ÍýÝóù•mŽŒmÈæÏ2Þô ¬->ð+_äFY¼å‹®)ô߻ګZŒ,¯ºWùéèt‡oDO´zH=r`çú3¡ùÒø}dK±è")<ÃO^8µnR—ç,vîRìšL,uJHs÷°WM•¼’½SKžNu ¶Ž¸úÌÆ ¬ô¢ö%g|BâuO&/ñ­wk‚éŒqŽÃ°V'¯ZÃxH7¤xëœsþP;‡iG 0«’dz|î¼ò*[0üô)Ê8ˆS5?Bý̈ѧ·­²“­©·˜ Ó]µÜÅɼ<|–õ!ö^‚ÚÝnØs˜[P$Sêûˆ·~|ø_‡”€9ÔÛC 1›f6Ã(ëIñ¨t&L a×Ä ¿âó—ݙ̓— -8…Éã’Ì»î"4Êâ-_ìH|Ô¬©gÑC´GR²jÁ£39Ø™wýáùâREäy(¶BüZ·Û8b¥³¤“ç™{+½ŽY=îRc3bH#ˆ†h¿-‰¾~d°AWÀÃFc6£„ô£ªwF<'ôh®ÿ ÷à “u›÷Á‡{¨³õ:yéÈ.:‡S¹Ù(Žbe_ÐÚ«ñÖ9çü¶~Å÷}G'}ÆÑFø•/²×xËö^ìO ¸?—c ý÷k‘Ÿ{‡Üu6Ó‘%.G}ó=¨¯|í®;ÌL7.>‰+7®à\Aæz]3Ñ!È:‡0ã\e+þøÃºÁÝ3|é‡sw]qê—þmŒÿ‚9DÖÒxËÉ•oýÊ/‘îÖkr’¤=H?¦Â°Ï}Ù^esOì¾òÆFd8çÇpF=änüÊgÓÖ÷ÄiìxÄ[¾Øà—ø(m?оþ ¹û>ƒ¸°Ê »Ý±F0:rMÂüžñ r–`ÓßA½üÌÔØLBÈXüóêÄ÷ pMÀxÿ&*‹¿„øSŸ‘©„Î<í™T¬¸„óõ„mÇ•èŽ/9'ÙŒ=!êlúüE__ðÌ©n|I,2>Å¡¬l«0¤>ÉN.?@ž¢áMûÇ«3’¹í8D¢Ô÷N²ýI^ µm¦†Ú ™Ûâ­sÎù]ó˜]²)”²î¼r¾"9¿§úÛ>˜4ë¡i"בu*»¦½ŸzdaäOt»ÃKVáœ4Cÿ¨õebÏZ6Äg¿Dî1a•àèÉ1ãÿ=ÎÊuý „ÏûèÙyý�¹µO0âK Æ,ÀÒ^…3šñ ý ¿ml3/_b0‚Í~å³B-Ns¿·éá·ãA^ ¾q8 ¢<9zg–Éà YûŒ-¿BÃÙ_ã¾!¹“{¹ï!Y(­Æ •ÆÑ X47ÑnÖQ×[TߢDr%5JhM‘,S„Gäy(¶?O€Û¥å>*O¡TvÔØŒŠh;®Dw|I18hÌf°¢½´ç¯sóWΡààÍõ$*¬¼‚âc±§.Ô²M'¿÷”p @ùå0ÅÆëc ®ÎëäùŒM;ûÿâÄ×É|YŠÈv^y•í=0–v\nò›X±òPÊN7ÂnqøMv§ƒ†§PݨFÑQeXí8ÞúñÁ½‡wQ*®ÀÎsëçúÉŒáÑéì;ý�6ïäó>º3þî8••ë®ÍXU$`÷|Ãù]¯¡o–CÖðfãí²Áð F»�v…Iÿ\#ÃmÿñNÝ ™ä¤·~ñ{ïñÚŽG¼å‹ ‰|ƦãŸå]{b:Á舙bÇä¿=Ä=¥ÌÏ»âcÔèçÀ8ÌxþÜÔCǃ v­éé…¨¼%gŸùBˆs³! áÕCIV6ÏC±x~ˆÏ|+«Q\R‹›5ר툶ãJtÇ—ƒ“›P1›FÈÏݧ1›[ µ$˯¹Ùqê E†}cßá’;{é*æu—Q¡³Ã5Ó—‰Wg räìoðÃÄØÌÃ'Y{!@MÁ—¥ ;¯Žÿ×/žNfí_°÷Ñ Ä[¶ˆ`ìèºt2ݨ_|îFšHáëpjÔyïû›¢ÚYH�œû`SC’‘‹£žY¯ëg‚M÷ÔáC~÷ijªy(NøÎ憛ŽBDÜ{e#³XÑ¡6OA"æ_ù™ ЃeÓ-—½`ÿu#ñ–/6ÌÃX_€ýŠWp/Ac3ã#deìÆž²LoT{L”ŽÞ¼qxï1ñ®ø†Žvhú¦0£ûš5$¿†n&”AÆ»ýد`¿Éþ}­ú…)ô«. BcÝðlQ’®Y3:U ì˜ûxfBž�Æù½ r´Sc3b¢í¸Ýñ%ÇàäcË˸%à›Äë~/õ#¬V£`u÷¾úx=ÞmíaOe';­ˆ-uFbTZpMö 3d“‡Œ‚j´š‚ÇþÄ[çþç|Yеx:O}¶¯Oåc_Áç(,nL|&ß0`¯ *ýûÄp«õºzAQ´Eá&÷‰zgK¼õãƒs™>è#sVç÷>²§™W¸'ÿWµÃ¬qAŒÍopZþ»_àuø•m&Eò›þf¥$™_+Qç6ŠaV~ …icîG~å³â7¥£þ1Õ¶q i¿Á¾4Y—>a!;Ê?ÕC¦ú3.#ê3ö¡ òW˜b´s³BÑãèG»\¥ú9Œ£Ók‹fÌÂæÈ³Á817Äëb­_raBsŸ¹Û/IZçi¿Ìtß6Âø.ÌŽ‹"(ûsTgïfÛi:² ŽB|4;?EUÇØO­’Ø'€ºÑn‰h;®Dw|I38C3IâAâuƒ˜MÆõ±C*¹»wíÚ—°Äaâ°AgBvƒs »,…Û}€¼úî^.C=ŠÔ,›”8«ÙpÏyÕ]¸x“ÝUг‘Fò”ýÙ„5ª.ñÖÎuìhíž ¸WN ¶·ÃHÜÙƒÀë}´w£ýÅLØòñ* cïÀ…KÏ<»ió:TTè0ï²C/7ü1›{¯øWÐ2Üï f¦Çíì8qz«“}=‘îhSR¹@„¢#Ï|(û >s'9!-KŒ²úÜW|ƒoõ¡ê ¯À®ùyÅ?Âà`GngÎ4Á¼Ì°jí@ù‘ïÐe›ƒE%§Õ%’'Ìʈò®²÷Ñ·‘Bv:ûÐt¢š‰ØÜÓ$è%(DÛq%ºãKŠÁ‰à¤ñ ñºAÌ&émz<0NxãWgÂvƒzYŠÀx:±9 ‡á;ä !žn3˜ ~ªF‘¸RYóz¢»Hxß9Bì,„"ÞúñÁ¹N¨$O;>B™Ûµ}#œïÇÎù#”óÝ8À=ÿ,÷ÎO:·çtÍo\†ã~?öpÏoÅ]™Ï{ýcªÿ‚Éo,xË&¡+;Š*-q_İêÒÓòPrþ+HB¸ÇÁ舙ƒ©ý'´Fa3¿À£æk(s/ší€(û´–… Ïïªå!¾kî…Ýî@Æß<î#;ò$Ôè"²I{ÞWçÉ@I2ˆ·Eáz<ó˰ªHˆy:V°0;Õ.g2ô”�¢í¸Ýñ%ÇàÄ’à¤ñ ñºEÌ&¿pu&p78¡—¥Xüõ9‡×jº 2d|ò 2DB06Çm(§AMc ”²³(ÈØ±¼;¨kf(bqâ­œëØ~ƒ´DÕšWAT7J‘S†f£}Ã=$ðzmTU*Ñæçõ ¾#Cq± íAäãU6v÷Z} 9ÒÖe#Gûc¼°øv»¹ð+ß;ÌÍF&oùbË%ÍaÙ+Ûó!$ª!¸˜Q¨$×¶O‚ ×"Î倊U,tÕáT}nÕýо ãì½Jg碨ê:T¿$g˘z†Ö»&š$()YÃx×ãéÚ"S/ô?Cº¿Šß_²¯{ ®¾Õ.gô”@¢í¸Ýñ%Åàä&±IâAâuOb6‡±´Œ.‡RóóÜÌ‘B"Pg‚vƒ³w¡õÁHÀ / GvzBVźÆ+†)¸Xã+#ã0*[_¨Ä[¶H`^«qìÈz<,ãÇ‹¦ Ë aO²bqøÒç:Î7°Nq'ŒÃˆ†Â,Wu‘çµ-Žcäm`²�SCê^^g³Æüÿö|†+;®°½‘hÚŸ $mäÄ[¾˜@Êe})ƒî?ÿFGmž7™Û2œ–vœ9s[xö"A(:b&48±k7²N܆Éo<`&1F=EÆñèÕr”ºëåûj ?„Þt•V£‹[‰’°ØÉ¶QÒNCà`Óàæ!P›À'` ¯ï߯{üƒ³S rã£!ÚïGK¢¯ L*¯{Nóg’˜‘õŽL”}6aìdÂÕ™ÀÝà„îâ”UvÒ÷Ê'+K&^61Üú-ä½Ó~ztÂÒz?™ƒE³#çàŸ÷鉱w¢îD%šCIJózmZ4¨Mܘeë+h*s–pWm’=» ªÁâ\Áò° ÇÒ?Dn‰Å9zIL\�üÊ9ñ–/6øå_}ŠêN–,Ïp“„m40gI(:Z5߯õ¨÷ ‰îQYôJC$Ï «:ÕuTíw»á’ÚãY%Jt[ƒ»âRÌ|7®Ê;1îßgn8Þ`ÒW·x ðþ0Nú7â¢ø#ˆvÑ€â-ìƒCr N©IÂuOÜ<‹s ®£Õ@Šä÷«p:ìfž´¾À|ÀgW %ÈÎE´pu&p7¸] ¼ÊçkRùüadˆ‚Ç”&L¶ ƒêª´‡2¡ªµw­\ cU£6D<l ±8‡?ñÖ ×q×ί| ×ûjÁE”YïŒ÷Cëp¾¸ç'uzË=5‚Iϲ°SÒ ‹ë_|~勜xË;¸SQM˜·ŠPt´b¼…óš1¸œtÉ!Ým ÊÑ(+E•nÒû©Í`u¸°¿Ë¾7÷ •{Ž òª™ù1ÍbJ‰7+˜5=…JÕŠv}xÞ[§'`³Ã=PËO#×]l|rK¿ÃÏWêiÍ-ìƒCò N6<m7 Ð3$^F $\÷Äùp“;v†CD±3¡2&ŠââÞ¼Ag®1<û©mw«Iµáû1†sþ] ¼ÊGv1'ÐI àìtößv!“”¹­€";›‘ÀL<™ýŸãÔɃ¬q̶·´,ˆ¢ ¿&h}Õ`Ä≀s",_CàµÙ¢^ùÜ{ä=zî ºú^Ù½áU6cå¨Õ™1Ôq9¾XeçÚÏT‰âW¾È‰·|1f£õ°<Õ±½nyvˆrPª"á ¤Žj3êÂ26Ié“RìeãÄ~¬ùb0XþÄ«J ¿Y‹†$#m?"÷¶Ø <<KQ}éÉv•qçî¯MÌÖjûP""Ù‡¤œÜðkÔðAÂuO2üž¬C×´ŸADJIÜ«FÎU˜~­h—–ᆪm}÷N%GIv>¤Íb2Æ÷%Pg‘֤зÎ9çÐ…À§|ÌôsTí#.Ôû ‘µ¡gxÆ+Sð: ¼ê.¤ÆÜ³û=q,Ãi}‰nó<\Ìú‡h®/‡8+5!ËÂÛQŸƒ8÷0Âò5^ïcÐvÒTŒbÍøùøncŒ£J ™ðïFvõsØ—þÝÍ«ÉîÀ¤ä ßòEJ¼å‹ 4í®Œû¼ ~æaºsY¢ü‹‘\œ0ÿ| êqïŽ 3RV£HròÎqo_¾„É;8ÝÈöêá¹·ÅVàç pÍÃj|‚Æ‹ìƒ}Zu“ÎUjln!äÜÑÂ5jjd¸íï’¨n†Lr$.FM,¦ÏHøBb6›!Ù“éÍH{YÄÛìdœ8¶ÍXÀ¸5à³Ì^5ˆñáñ6Xb³·W'‘פзN9çÐ…Àù~Øp~_Ê’o |Ü›s Ž¡vȃÔå]¶@܃ïdÊEN¹ÿ“ ŽÉ Ì×QæœK›7ºuƒ5Äô+Œs#ÞúñáHË×x½Áv6{; ,Þ‡½õ'À¼ÊævYë€Z¥Äÿüþ†Ë¿òEN¼å‹ 4íæ¸³Ô†Óÿ°†É÷2vœsÂiýrñ^÷iÉ[¿ÉY°2�å§Ÿ¡¶g2Ìñœ’X"÷¶Ø <?dR6„µeE'p¶è"Ú©mÄypH­ËÑ‘À“¸œÜÂqVC·BrèŸìîèÑZ_"ñq”T5@Ó?t’6ÌtÕAYsß–²znW'‘פзN9çÐ…À«|~0ŽWh.þ¢´4|¢h¢d[cþ¾¹Ð‰yÖ´?k@™´òß_á_n7RÖˆO?yoðÄKk„c°n‘xëÇç:–¯!ðzC,¸ˆ²Êqo$Á¥‰¶à²Æ¯|‘oùbÍF#Øù»Í’p8òLƒÊD’‚-ÀôCƒÇؤ$‘z[l…Ä=Ì,í-4íòà dÙ"ÇŠß4øÛß%ÑfY[‹ì4™ ël&«þÝ«h¬‘d÷¾~?¬Ájû÷•ò°â&£«“ÈkRÅ[§œóGèBHàU>’ Êô;TõÞø}Ö@_l„¶ç4/6Æ ñ*[0lȼFðŠIw¹ŠÃø¨T…W–!ÿ€’¼¯¡µoÒÄÂ` A¼õãƒ{&¢ò5^ï£í!äª>¿>›Spb±…&J 4mì ›F£0‡ÜŠXìÇÙeËaäf¢$.&'Ñ-úo?O�ñënf'… a&nD. :bšéh;!äÁ!µ®P1›{¯ø×zp¼€ˆVÑ~?2\pX ¸ßð5 2va‡X)b‚á7qHÛ¢¯¿Bî¾Ï .,…2Dé…hàê$òšTäu<áœ?BBŸò1¶ÔdBD² –Þ†q&Ð0æoÙÞËôSÔµüͶ)b°‘D×–6T¯ílO‡F\Ò¾u¿ J, Öð¥Ÿh¯ÃGÓ¼1gÌ \+½@èZ³|ȶMÄ+Ë6˜GÉül†'xl‚}g£¬º!K-…²O�é\B$Ê@î¡ld«1:Ô†ãìDQ”wý´uFŒ‡Ô¸¬¸+SâùÚ–ç0ÚÛ©&ƒþçLw +öÔçeJpñV#äŠgáíl’$C‡ÓØþCŽ^b¬ ·E¬¡ºü g 3ÉPø¸&-óÅÛEX“*Þ:åœ?BBçûq`ãù=5Ú7^BɱRÔ4>qèŸÐýS€;›l[ûår;,‹CPIöb¿r�«+l;;z÷ÌÓì/!Ʀ囕-‰…Áš`¢½|ÜÇ ±Êœ#¸›/ù·xx~š ˆG+|CŽ?Q¿W„{ëaL€3`td�iáYÈ”÷ÐÝ?æÝígàý7Fé\œGxxHŒSò›È`»ˆ¡¦JÔæÜ_Can!k¡"äÁ!µ®w˜›kf¼¼þ™ tVå@´c'2$2¨{†0ëðV\+áéš${Ø›¶7é36ÿ„,ïjÌÝ›‰NlêJ?7.VÖp‰·NÉùGǼ5>#t!$ð*_ ^·Ú;5ÇQ,ĘMVjwB+²8š]‹N÷îã fz® [$BZÖd¥å¡Þ¸Iw, ÖÄ[?>¢½÷±¦¦Ñ“Äív >”@vg=[uÛ-)rrÊФÖ,²m —µ„Èñ–/ZˆqßRuŸ¦‚â;pzßçÁèˆx¶ÿˆš"ÏB¯Û3¨ªõçŠÙ>̃M¡Ä^ž�ÆÞ —žy#ÌëPQ¡Ã¼Ë½¬8fiu·B„,Ûv bý¹¦a›ZwgçGÿ˘5ë ¬<‹JåcôÙع×�Tò‡aºÑÎÃX_€ýŠWì™Xˆ±™ñ²2vÇ­Î&רŒŒx딜¿È—4¨ áæð*_(˜iXÇ7Nvâ-[x0lû ,¿‡å%´í?@šõÔ›&º‹Áš`¢½|´1ë”笯Câ^Üög]•‡±³)Û]¾T@x:"cðSÜ(ú9â/p4ë”س‚OØñi|Ü]#•‹ “}a$F;Þ<<K°Ü;‹LRÀš}à8ÇžoÐE³WEL´W´ßß î¹W`ïè@ß{6Vú:ÐáMOÙ¶ýÍôA?¸Ù:îÆ^õÏÌÁÔ| ¢ö(‚˜MþS=dª?1ã2¢>c *…)Ti‰( :Ics Y>>d Ÿ%Ø ­¨-9II-”ZÛö~ü}ï-|­ÁšX¢½|ÞÇUóO8ZÛƒy¿9ã0¢¡0=h­Yaµ±lwùRÁêÈ5cóUȆ#¬ÒK463õpÁÖ^ÙÃN¸˜ÁÐ…¦’/ ÓöÂd]Ï®¿UxxHBSÈ‘þ°æÒâ>Úã…%„keS„<8pÏÍ6bõYH/AF²¾=.AZpvm¢E®èàèÏöʤ7ÑæÿÜqŽfÈÄŸpJNÄ_ÿ«pN Su ¥¹{ØëíB¦ø"µÏq_c@ðJÁÈF«zÓd|ŽPcsëD#²… c„Òô½(¨¼…ôsˆs‘)ùý‘,p™ràÕÿ®Á/[ÈÌoýøˆö:¼ÞGf=µ‘Yp5ìs¥ò+ä‘déEh2o|†y•m lwùRáêh ÖG_#kg!ýáŒo.LhJ±K”wú™$‘)dž^än£¡=È«í€m“pœ÷ÁðÂޝWpº1 ½ôê Ú[Œ´±nró£!Úïo÷Üá4brQc3FpôÒØü·¤ b?+Ê,Á¿ XÜõÏŒCW{"O®;Æ­Ô×ôËFË«¹G .ÈBZú ¨†cߣPcsëD#²… ©'™¶_ ó*ùûGÈô“˜éoEyÅ}ØÂƒc3oýøˆö:¼ßGf#Ïš!“CLjùÖ4âÙÈ|ÐÅmÞe‹í._* zgôcÂÚƒæúh‚,ÄlÄ óÏ× ÷.ì#e5Š$g!ïßòDI$ì<ýîM4½²äz‚¶ò4”Æ1öoRòOŽKZÛ–7yx618Ü…ucïö–êÝEC´ßß î¹Ù{ÿÛmèæüî±/™‹÷%1æt·ñ56cGÁÜhI}[íw¬Xºø:zlÜÝ@~ôO\ ­0>nDMI‘{"øØh‚^÷¯ðv6Iîƒ@”û-:Fæ¼ÜjÜ tPcsëD#²… 3¡AñgM!íkú ªë^b‘í¿¦u7p3âxËØÄLÅ[?>¢½Žîc B–°ÝåK„¢£è½3`ü^Í„Nëï‹÷b‡(%7nAvüt4,. Y…c`�cnæÖFt¹3d/cºër¢™gxÿGXƒ£½šmŒ·ývVnãFI.r¤-0NnUôí‹î¹Y£bn þ“ÿ Æ&±æ0çÝž§Wtlª?×[ô6|t’r¿Rƒá  ÿú÷ºÕÞ©Aaq{x1›Ùh}0£PI®ñ62â­Sr~jlòý  4/˺òuaÑ¢Fí2ɺ‰8fŠ _ú‰ö:|´±­"dÙÛ]¾T@(:ŠÞ;ƒÁò° ÇÜ^Eï$•‰Ô¶^€é‡jl&%+°?¹‹îù€ù Ÿ÷éêpŠ2Q*ìÍ`™ŽVàxõ# ?< µ%>qV©Œ‡Às3.{·ýblbÅŸ+¸P:åd%”þÇ�Ôe å Tõ Ž=Füõ?‡“51¹0oŒxòÒfZzRBé |,#;K’íóHó2°«X—MçÈ_èÛâÂX¼uJÎOÍ­ñù]cxþ˜Ä*1pÙž *{7{޹Ëym…Hc¦C´÷Ap÷Ñ!ËFØîò¥BÑQl¼3ؾovFã&ìH¾Ø;'²!Ê–ÃH3%!axŸ’ðîÁóÆpHÐà‚½KŽe·#K®@qCA4DûýÍàž›mÄ÷Ú¡_òk¡ŒMKúvÜ£n´1a£þȤ¸µy{°#ýä=¯¹“þ€’ñ׿í¥E8…›(êŠôºK™,Ãö¨ûö•ã‘Í]Ø$8®)ô߻ګZŒ,¯ºÍòÓ7Ðà 6è„Ä©4Ë!kx3é¿HGü F{ðkÇ[§äü/ú6Ö —ÄËǶÑ×O |²q_›Ù¶ŽgÒÕg²…Ÿ‘™€á§j‰‹!•5Cgž†Ó¦ fŠK¼õã#Úëù> Y6Âv—/ŽŽâàá†í i–Ú$…ïSž€þÀÌ[ôõm¬yEy?B¸ç&+&_y¸ˆÅžãh.2Ò³Pà{->‚ÜŒõ´ÿtàŠ®þ–1cTz餆ž¿ÀÙc@ ù]>³ÑZ¡–d!÷¨ïþûgÔY ÓØtOôÍèT5°ÆªJÍ Ïnöù­ÃÕɆ›ŽB$Ê@î¡ld«1:Ԇ㤆bÞMômã­Ó@ùlú;¨—ýˆûfâÞľ6<Ácãw‘Á~åóƒY„­ï /J)JãdEöoÙøfÅX½éGPÓØ¥ì, 2öA,ïÞr–?¾ôíuÖÆÂ@Ȳ¶»|©€ t•wÆ fºo¡ö–ÏŒ£˜!;›”$‡ïSž�b5W@|þ2g'Cvå Þ„i™c{€ÓûrpúÑ5>Ã@ȃ÷ÜAŒÍ 56c‰¿þ›Õ’`:_?ŽæfAÂké“I¼Ôp]«#†¸ÍÞAqæ.·¼¾C”}qßÙ\„IQ€|wÑxâÎ[‰:÷ ½³òk(L³áÆ[§þç÷ÄV ½ùÈÊ,…zÔõq’Ä!´›&Ÿòy †Ð£–{K߈–{õ?_…ÌoÑÿ²ÅæµÇލ`õtŒs/š*P,7Då¢o¢Õ“ï£ÐÛØv—/ŒŽ\‹pp ÄH½3ÈØ{²s…îŒò;Ò²!.»†æG/`¶9Ö4ÇÞP¯ÅäÂ5 sç/P°öY½R¶çp,†Þ§<<›ç¡Y¢Æf„Ž+Ú#^pÏÍÞû@7Ú P7ÚX±þ– PÝãÓØŒÌ84Å9×?„ÑWl˜qb²_…ÓqÊFëcïÀ…KÏ0M®3¯CE…ó.;ô²â I„â­Sÿó¯˜ø8ŸÄä0XjÁIwL;¡0ÿŒ/¯‚ù|Ê·:rGÒD¬ñ›‰‚ó7qß0î™ä0‹˜{çù|ÊÆ‹nýòÞi¿±Î KëUüD\Û"„/ù£½Žï£e#lwùR¡èˆÄlžØµY'nôÍ@IŒÔ<’}Ž=ŸâPV:ûw!#ï$jn©ñDY³[È®MIÎÜ)þØ]´U÷!úUck ÑÂð‚™—/1H9x#‘[àµ7$ M3"×ß \~.|ñ׿ OÛ àd(fY|€ã¼÷Õ{ q¿‡½Iü‰c6Úu–`¹w™dU—}Ÿsìù]A²ñq¿{8çglÐ]¸æ-)5 ]Åeèæ—0£¯C^ˆ$=¼ÊÇJà°ñ¸±E’s«{`žt‚Ù&Æ&cïÄUieBUk/lÞ]ƺµ˜)¾äö:B¾B–°ÝåK„¢£Uóm\PzÇrшʢ/P*ÿ}‹®üì9z~†¬Å€×–WèÖüäÝõÜ…ýÊ ‰�)BÄ… M)>×Ck´Âán¤J@T§«¡™ˆÍ„ŠŸ' „”èHdÇÆ½ö ìè{µ¹Ò×»çCtàŠŽàú#5ýº¡V²Ï ×EâY_p·™øëß µ8Í}î!ž²Ïnáû`F :Y‡®i¿Mâr¯9GT°leÌÜ®N–ñZ} 9Òü‚éÙ£]‹nód¹UË]|à^ì9>Fe×”÷S\ü¿Bžß5ƒá5äe'Ptö*Û·íÄ#œÙÿ9N<èuC#ñëGQ_³¥šÓ|Éíu„|…,a»Ë— EG+Æ[8¯ƒËiA—ü˜» ZV‰²RTé&½ŸÚŒ%X4 )ª@½Jçõ,ZÁ|ï¨h6­e“gœ“µ9¨§bRà€AvM#öØ2¬ªò-—| „‡' ò„”èHdÇÆ½6q¡>‹é%n¼.ç¸iÁY³#6èÏ5ŽNÙçì h|ìFv™Ú³øãGüõoE{ ·ý 5u3d’#6ÿ‰É°º7Ò ÉžLo¢¡CÈr»fæCÆqOŒ ÁtÚýà_˜á\ˆí°ë*¡²l,ÞoúŸß˜#…’£ß»Ðvÿ“!V®ù”/8«pZ&$-ÿ°¿ÕúÝfv’æ°Á¬ˆæúrˆ³òP£Ÿõ~&|øÒO´×I| e#lwùRÁèhyªc{ÝòìX+ƒÆ`ÙÔŒº°ŒÍÌôÈ_ð¾ÌöºÎ²ó7Ù!þà,´[X0£$šw°¨*QÛåŸDlPü†ÊœbvN³Ñãh+ððDžPƒ‰ìظ×&Æfˆú=œ£ˆ›1‚«?ú…‰>‚øâPëz`0`Ðw@}ëÄ™»±çô#NŒcüõïÀèÈd€AH»[8.{Áþk¸I»­õ(GIU4ýSAw£…«“àɉ|‡(»*_¢ò~<áž ¶î§0Ìp}—AŽbÕPPýð._Ùrã-›``ÞÁ¹$\§³hï¿m,2„,a»Ë— JG®Œû0HÂ0ÓÓÈå£>Ü0Òg÷<Æ Û<& èPÕ£¬HIÙ/0ÓÍ£äÄiB“dŸ7·ÎQ¸cpw#‡“ÍÇè–òòDšPƒ‰ìظ×&Æf9*»¦½¯ƒ1®ÊrjlÆŽþØgMº+•:[Љ<ãB{©˜“ò<þú·â· þæ”`±À¬­Evš,ÌxKž´nì#ŠûŒ�®N`¬ÏEfÉu´qv[ @ªü•ý»¦Ùuc/Þ:åœ?X ¿ï@™j=NÐçûqÀÿü‘fËåS6^˜ùŠÚ¡~fÄè ™ì¸¦Þbj 1S|Éíu„|…,a»Ë— FG¤ÜÔÀ�Fì¾Ì± –ÇúÑg› ÈR» ÌÌšïP*‘ ¨LŽö€ÅUJrÂ8-зzJ¾Bó 3[Šã O@ä 5(ёȎ{mblV¾gAø‹WRc3FøëÔôË8¼Y #ƒwÆïQè—¥4þú³¹ùŠ!<?‡Ä}F�9÷:¬a`ë@ÝÕç°s®³�Cí×ø?ÞØc¸ß=þçw×qÌ,¢ÍßVãWÙqìwÇ™¶ã±‰ëjÌ«|fË·l¼ã4ã^m²‰Û÷Žtd‰ËQß|ê+Ò-yùð¥Ÿh¯Ãg‹!ËFØîò¥BÑ‘»ÿeeñ¸¿J=q—ÃF´~s½óÇ®¬`ZwÇ*oB¥RâZå—l_ö!òj;¶\+˜’hV`ú�/l±ÕA´·Ü“½ž€P 5ã……ǃDvlÜk³“ök|® }ŸI²—Ï¿^óõ§WtøëÏe!#DÒ5ljù}&þú·â®L‰ç½K¯÷0Ú#Xµ¢]Z†ª¶õþD%GIv~qŸáL'³, #f“ìî¨Sà™{×W Wñ¿þϸ÷^å‹0[.¯²ñ㜀I§„4÷C¤eìEÚŽ HÊ™J ÑêIÈ÷Qèml»Ë— EGÌtÊ>ûºWÝÐ(kP䎻$Æçi^{?µì8w­Á¯œ×Ì+¨«Žã„jíS’MÂÝöœßRâº`ðóM¨áƒíí0FU÷‡âƒ4’Dxmf¤ ù™ç¡ Zl 6íydîWÂì]TI¤ì©�GÓZœ)×!´c)ƒE½ GÝñÔâ¥ÆÑ‡æòrÈ;‡a·þÿ•,4‘Z]£0ú02É0µ€qk@" f¯Äøðx,1v–àêDè1›,Ì \+ܾT(1›‘fËõÿn<ˆ÷ù7àü /̘ô•<qŽB'¯ÃO=&X¦"ÏÎΗüÑ^GÈ÷QȲ¶»|©€pt´Gÿ/¨kþËã"IêS Óö`$¬âýï`i•AX˜™€îÛFßqÇJ2À›í—QÙHB€|‚m¸#+A±ŒµË&7Ý®^ž�÷jÊâ68Áð?>B™n‚;¤l ¢ÏD±áÚŒše•B¡éFÿÈ8l¶qŒôwC£(E–(GTÃkõ˜){*ÀÕß<ŒòËh ²ÛæI°óµ¹GÙcýßã£OFê]ÑØp%‡þ’9öÛÛßãXº·_HÿÊ~’0f‹0oÐUweÍ}pĸáê„ÆlFŠÿùCfË}ñŸ ÷OÙxa¦RÒæE™(8ÇNÚ4z˜mfhÊ« ±E¾/À—üÑ^GÈ÷QȲ¶»|©€Ptä®ó[V…oÏÂR%º­ ¹ÌÌï¨Î? E—ÅoQ•”ɯ…CQ’ ‹££xØ–_¡á‹1Ûäá iu‹‘#½é79#Vó—Èç¼×ŽF;56c@";¶`×fìݨ+d ö߸ÇndW=áøúû>%|ˆþFÇüÜÓ]cxvS‰ŽÁé„¥CŽÒc%¨¼r ͆©µÏÇGÿ¯¡)ÊB‰ö-ÛþFSþ? nû𝾄ìÑ¿0b³Áj~YE[52IjîN¨W!“)Ьýkƒ+¸: ³I { ÙÜ�÷üÁ³å†‚_ÙøÁíBÛyW$ù- „ëÆÆ…/ù=2FwÄ“`׋äˆ'Á®éO‚]/Òƒ²9BÑc»‡¯òŠpþ\¡§Î/Yô’ÖCÕñ¬aílÈîèϤïFFÁÔ*šÐÖT‡'a^{�§l¿ý õßd#h=q£õß÷P¹/'™êl†(ºÐ…ʽRhb‹(ѓȎ-Ôµç8 í T•‡Ø]ªâ:T]Ãv3èÀDþ1˜n‚¸U†">ú' }r=–Ë�YZÄê.¨kÕ°®‰5®š›af£uÁÞY‹ìµ¢øbÍÍÀÎì‹èê®\¬Àþä.º¦—¸1››ÓÇ»MsÎ*fÓxçB3¼ÊgïDk÷úↇÐa¼ÊÆ7Ì<†µß±“´«hëYu3*¿B‘#B–ê.õŽYCѤÅ}Ó<;'³sêüFfT0pÙ¸¯¬E ÉJ[Ù}Æ^ °Æfˆ˜MQöUô:b³ˆÏÃà„¦g4¿ 0Ûàב':€zã‚÷=J¬ $Qp¯ÍÀ9>Ž© s(&ûþÂHŒ0‰”= úÛ`lF@|ôOjí~á)ã66?FÞ³ò,N\kD›ún]<†ýU›Ä—ú±:�åþ=È“ýî·›¹ŒÙþfœ8}ŸS74puºcLOþ-žpÎOŒ¹®·‹ ›ÇÄó*ŸM 1ÑÕ†#xç»)ÀªEƒ I1ÊêUЭp¸Và´<B]]rgsú}²|Tw©àuÁ‚4ã´aÀ4 »Ã7Ëpb¬o�vš6Iaç4w ü£×/ic/zT—QͱۢƒŸ'À5uq6²‹ÎãŠì jÜ[ø"¤KšiØ8ÈŽ{m¶·×Aö°Ç¯“£ M%_@¦í…É:ÏiÌt`‹¢?á› \–v”×ê`Ÿî€tW¾»Ìã@{Íçl_ŽO²>Dmõ~þ=¬¼‚âã/ ²ĸ1£PI®yvG™EÌνó¼%Ût5JnÜösS½%¹È‘¶ ¦w›æœ?BcŽÀù~àœßö¤%r¨Öt×ÕRd甡9H¯²ñ�3ÓÚüB}¹i侤íGQM=jÄyA$½¾å…Pä…壺K}„¢CÆÑvyš½€Ù櫵 dá8ßý{Ö\puF ´á›ï6Ö¾¦$!b6IÈÓgg¡™Øêl’ O€kÆv¹»`¨XRŠå˜Ãö§DB";6îµ7ÙZ;öpj4‘÷([‡èOxÆ&¸ï´£¶äªZ_mpŸ^1·ãz—Ýûê=0³0Ê%8\ÿ½k =èh,Ã~‰¿“×/ÛP]ñ &»œ\Û­gÛ«QøáI¨-]‰âݦ9çИ#ð*Ÿó ¬SÜÖÉ8Œh(ÌÂqõèZ¢0ñ–HÌïøµ{ ‹3£0êT¨/+fÇÄJ¨Ì‘ÇÆE?B¿OB–ê.õŠW‡›p0ýäf‘’'¤ÖæYÈ”èÍ68|;“ŒoÞ„*KHêlVã³kOðªû”5¾šÁì\Nt*hΊÐaçév6 èýýŠ÷|3ïSÚ‹¤ ‰ìظ×&ø&š^Y8Ç6Û´•§¡4ޱ[`ÖÊqIkswnt`‹¢?a›1„±@}l[ÖMÑQ4 GGBε9.Ø»ä8QvýAÐÞÿýèàœ?BcŽÀ«|A ëNT¢9H6âDËF ¡ëQÈòQÝ¥>‚Ñ!3‡þ9~xiÁô¨:ÕuTy¼,DqªF ÍóŸqú¬ÓÞ¯lÀ}Žëh6N¹ç$ösÐðÚî98(É@¨M¡ÝÈ:}#1JúÄð ÇÀ�Æ61]ÆâóMjLHdÇÆ½v¨{µ]˘¯”HÙS¢¿”76Ùv5ßuò®Ñ€EŒÀcj}µ6 ¸:YÁ¬©Ã½kØ®·²­wŽ‘hÚŸÂhnØÆ[§ï;ÿfÆ!Ñòm†eB‘_èz²|Tw© tÈ,bjÊ¿ä —c ýîÊ“ÈËØ…ùM :t’…Õë(«¬ÁyÉQ”*»aSx _M¡¡àf£µMnÅÍ:4<<ìi¯€øüeÈd²Ç%H ŽAa¢É‚bA";6îµ=™;»çv{ü2wºÝ:D™(¥;›1è/õM–D W'¬¡««ÂªG°8W°<¬Â±ô‘["E±D4s[¼uê~fÖ„ÇÄ}¶ý¬Ë Ç0º5¿á±q"d›àS¾H²lB@(ò ]B–ê.õŠ=1›r(ÕÏa^«“É,Ìaη0ërÀ6ú&Ä.å2l)òŠÊp® Ó]ºI”Qi½  ÝÙLR—‹­Çž�²Eû2r@,orÃõPP7/Jd$²cã^;Ôö<{ø2wºl0t®uRäß([‡èïEßfõj¸^?ò‰Íûš ÕÿF¸:Y€±¾ÜSʉ™€®ì#ì”´Ââz«ª<húøxë”sþyÊ\€Ö²�fyªcHË=‰óÅ' ëñ~ˆ ¯òEˆeB‘_èz²|Tw©PtH÷eÄgd÷r‡iYb”Õ·à¾â|«Ÿõ~ê=0s0Ý} Óâ œ“fèµ ¾LŒ¬ Y˜¥Ë(Ûž€̼| óÂ8 ÷F=ÙÉT´@k_[U¡Ä–DvlÜk“]maeîLuBêY„­ï /J)"u.ƒg~¥úßW'Kn*G­ÎŒ¡ŽËÈy³¼:‡Ð~¦:hæ¶xëÔÿü+Æë4ý †íw§uç±ggT'« ’;Þ|Ê)B–mK¸&a6ôap’½'Þ·¢wùC 9B!dù¨îRÁèŠí?¡Õ0 ›ù5_C™8Û³™í]¤ô~48$Ñßo³søGúöVþ„=5»c”ä…—'€qôA)ÙË>péÈ.:‡S¹Ù(ŽbeÝv‰ìظ×^æÎT'Pÿ®Ù!ô¨å(Í% uDHË=úŸ¯Bv—›á¨“õþl7²«ŸÃ¾ôèn²:•ÝÁ‡Ì%Þ:õ?ÿêp ¾¬}Šÿ =AmÎØSÖif–ö*œÑŒHð)_¤Ä[6¾Y1)ð1û›<ca5n¨t0ŽNÀ¢¹‰VKlJõ$¡ß'!ËGu—úK‡+pqr¬b¡«§ê›p«îWô…¨Çì,¶Š‘žu�Y$ -)rN¥FÏ)¥Â8&ð†V› øÁÃðÕqˆD¨ïd£Y%Ô¶9˜j¡JâV¨$²c vmÆé¿«ýnU}Bib2w¦:þú[¹ƒ#¾áüMÜ÷ylRƒ’ê#Auâr`2Ì�úxë”s~’)Pù%ÒÙ÷DÙµè´ÏâS²†ð54¦¨±@¼Ï¿f ½7eÿö÷”²µ¸§;>F~ޤ™ñü¹9ìEXÞåPä…壺K}„®CfrA<Í‚A[[dxi}‹Q£ªÕ(Êö–RÉ;‰å=<oügµo½ß ×kè›å5<ô”¤$ám:B&=Ü <<$Æé�vª`u >cÓÎþ¿8hŒ%:Ù±^;Ò]m:°EW.8¬F<n¬A‘ääꘉû56#"ZÄ[§ÏÏÞ÷Éð3ñò/_øÄ[6Þq-Âáœ÷«c· çäß0t´CÓ7…Ý×HOÿº ;äÁŠ~„~Ÿ„,Õ]ê“j:dœÓ˜Zðï£È\ãº5JÔœ:ˆ Ñnä»Ã9(‡ìV…H”ÜCÙÈ,Vct¨ ÇÓEåÝDŒâyx,åÈÙß�“»^ 16óðIÖ^ˆ|Ib(1%‘÷Ú‘ïjÓ-:BêÏ5ƒá5äe'Ptö*Û©m¸D«“xë4•åºî"…™ÐàÄ®ÝÈ:q¦`îjŒss±‰çä¾õ)B–ê.õI2pÙtf²óºLH¿‡¦ßSosRJå Fm¾5аY„IQà]XÄPS%ê sî÷Íʯ¡0‘ºÑÃÓ°›¾×d¿À03c}2 ªÑj ^÷‰ìظ׎|W›lÑñ~ý­ÂiyH³ÑF@´:‰·NSY>¡ë.RVÍ·qA=꜑q±•E_ Tþ;l[¨ Ë·ü¡Š¡²|Tw©PtVé“M!sº\d–6¢óe5]†d_6Š›hþ•d†±wàÂ¥g˜&÷p^‡Š æ]vècè}J{‘$‘÷Ú‘ïjÓ-:¸ú#“Ù;¨—ýˆûf²°Ã¾6<IhÍÅd$ZÄ[§©,ŸÐu)+Æ[8¯ƒËiA—üÒwìFV‰²RTé&½Ÿ ¾å…Pä…壺K}„¢ÃèKŸ¬Â¡—áˆâ–½ï0ßè<µÒ)ÉÆ,÷Î"SäWšÐwìù]ó±)HI{‘$‘ÛÆkG¶«HÙSý‘å h2ró‘•Y õ¨ êã{±CTEðÕ*ªÿD«“xë4•åºî"Æ]û”ݳ¹(¥ªWp0 –Mͨ£Æfܲ|Tw©`tué’„î§ ¸Ô1¶¾hMjNÛã;jn&Ëx­>…é~% Ù£ý1^Xbç M{‘$‘[°ks³Ñn^c•lÑá¯?w™…ü&ŒÉìP NÖ½Ä"Ûu¸Ì?ãKÅ« 5±¨þ7­Nâ­ÓT–OèºÛ®Œ}µ6çaºsY¢|Ô罟„È¡È !ËGu—úK‡Ñ•>±Ü+C^n²Ò3PXÛƒÌ*H|Ÿ;ÍÁ’”¸ÆÑýà_˜‰ãZíERDvlצÙhù…£?ÆÝ…k^wåIè*.C7¿„}òTà?‰V'ñÖi*ËoÙƒ;KmlÜ•Ðï“壺K}„£Ã8Ì÷!+=qQäíØØ~'üÒ'+˜é©ÃáâK¸!;‹·;®ÇåR”w#ž8ÐUëKüa]Ù JòÃð ÇÀ�Æ6G—ñ¦o�ö8ZÕÛ‰DvlÜkÓl´|㯿UË]|•¹>¬£²kÊû).þß§xˆV'ñÖi*Ë'tÝ%¡È/t= Y>ª»ÔG(:d¦u¨>V…[ªÛP^«DQö¤å} -Ãp ¶/`&; Œ“w\OèÙ¢C8¦žñž²=áá pÁÖ^ñùË7Ê Ç%H ŽAaZð~‡ ‰ìظצÙhùÆ_Ìk5ŽåH¡ô÷ÃWß…öÅBfŽ£úßH´:‰·NSY¾xË–ìE?B¿OB–ê.õŠ]†!Ó“²^\SèW_Àá­v'qŒ_ÍàVܨ*ÆQeÐPÊö„‡'€56Õ_!#÷Äbñ&Ç1œQ±Í•-‰ìظצÙhù†«¿%غŸÂfxÕÿF¢ÕI¼ušÊò ]wBף壺K}„¢CÆÒ†¯•¦µL²V0­»›ÆØ”¸ $'ÜÜ*­Ð™ìAC­¶ OÀ f^¾Ä ]âàDvl¯M³Ñò GöN´vOèÙ‰ÁövC$ úßH´:‰·NSY>¡ë.ÑE~¡ëQÈòQÝ¥&üñÇšGÑáºw‘Úýo ±£«ú(аúň3V5j©Ûë¶e=·Êˆ2rqT|Yi8¦ X˜Ø:<ô"!b6™·èë›jpP¢#‘ƒC´×¦[tpôgSC̾&ïqP¦ þìq¾Oq­Nâ­ÓT–O躋œà :¶ ÿòG(r„BÈòQÝ¥&Ä $º v$ÌØdñ¢ŒBœ«½¦¶F\;qJó¢÷”íņ›ŽB$:ˆÚŽ!8¼™ŠçÚÏTC3›ýMz‘1›WΡààM·{%c{€ÓûrpúÑ5>c�éÌE´×N¤ì©�G¶ß -‘Cµ¶¢ÚÕRd甡Ùh§Æf˜½M§²|B×]¤Ä&AÇ:|Ë ¡È !ËGu—ºäçç»õç÷ŽkÆûJÔ”E¯j(õ¯cê2II&s«øX†UU4·ÊVà¡Ù,fó<Ô#KÔØŒ’ééi˜Í浃thþ¯ù„\;¢ýþv‡èotÌ[ˆ×ùÖ)îÂ8Œh(ÌÂqõhÐøhªÿ½M§²|B×]¤Ä:Aßò‡B(r„BÈòQÝ¥.Áv7¹«Ï R“±µ †¿1™Äåš(>Höfþ¸_x•s�*égÈØU’L;›4f3Þø Ì`ÇÿüÏÿx?ÅäšÑí÷·;DE!jh{'êNT¢¹ŸÆÌ†‹ÐÛt*ËoÙø&Utý> Y>ª»ÔÆw3Ñ»šÑ{V¬b¾K†ÃâÃÈJaGZ6Äe×ÐüèÌ6ÇÚ¼ƒqLàƒNú“‡eÌôk ¯½íÈ¢ÇØ,/‡¼s<f;Þ<ô"+˜5u¸ÝøÚõVö'­À1ÒMûSí´èk¬8wîÜZ‡æ]O>!׌†h¿¿Ý!úÛÌØ|Tÿz›Neù„®»ˆ‰q‚ÞåPä…壺Kmüw7»« Ï  × _bÀ8§1j|µBŠ\bxîØ…Œ¼“¨QÞÃóƯqVûÖûŠðaàš5£SÕ�™ì*ÍZl‹1õ4å¡Yż® ªÁâ\Áò° ÇÒ?Dn‰Å9zt>ÛÝä{W“@® Ñ~»CôGÍØ"ô6ÊòÅ[¶DËBÑÐï“壺K}ÈŽ¦b5£÷¬paâ~Z†Þׄ8 rH¤Ðj~‚ì\!2D»°_9@K& Œý9ª³w³Ïz:² ŽB|4;?EUÇX2íl’àÓr4,±¿hº²°SÒ ‹ë]LƒO)w7ùÞÕ$D;0Ñ-:ˆþ¨±[„Þ¦SY>¡ënˤX‚Ž„é1L„,Õ…7báYáì‡òôE´ßÂéÛúZÒ£&ý,´ÞÚéŒs£6oîŠÀq¬,€(ï*ºÖv3ÉNgšNT&SÌ&I«[ŽZC—‘#ò–]ˆqZ] ww3»š„h&:°EÑ56c‹ÐÛt*Ë'tÝEÌÌPÔþõ3#FgœëûÔ[LySÎGïò‡@(r„BÈòQÝQø$zÏ ¶¿²ÿÊâOž%†´æ΋?‚hŸ_‚J±“¢…ªQïxäÃ?í fç£Zå¥Y/ºÙÕÏa_út7ÿ7jª”ÐÏÐ âXâÛÝLÄ®&!Ú‰lÑAôGÍØ"ô6Êò ]wã4C#;‹‚Œ]ìµÓ‘%.G}ó=¨¯H¡0Q7Úx!dù¨î(¼ Ï × †õѬ¸ Y} žÌ+”ä`ãu<\§½ äè…¾ãgH÷AñûKöuÔÕ—¢Úä¯q909¹ž­Êh\W •Åß÷›-dw3Q»š„h&:°EÑ56c‹ÐÛt*Ë'tÝmÆ9Ck5òÒ3‘{( i;2 ÕMzÿ5|% B‘#B–ꎒT¸Þ ú%’ã(©QBkšŠjÇ‹’h–ñZ};Ùçœ<ë¡p°ipËq¸<ô" œæ;(Î$+¹€(»*Ãøºï7%©!÷4¢ýþv‡èïEŸ}Ë+ŒTÿ!:‰öˆ'Ñž_Èò ]wѱ §µ7e­0¾ƒu*òì쉕¡È !ËGuG‰;Ìt?0bžY„m`“[pÙ÷à‚]+Ezz!*oÉ!-(„87etŸ¼Ìw㪼ã6l!7˜tzg“$ÊEfÉu´©Õî(ž£2q¤Ê_Ù¿;`š¥î´©@´Ø¢Ã_̬ ɳÖþÖeŒcÝšßðØ8r%’ê?r­3¡?säüѩĪEƒ I1ÊêUЭp°“>f¾ugZ`NâW¡ß'!ËGuG‰?+pôßFY!ñ¢øJ¶\–ăl¿7Ó¬· ÊÂúUP¡±R7Ú¤„sÜŠ7Ë6˜ “}a$Fã½—­uWŸÃΑ™5Bå—¡±S#3•ˆv`¢[tpô7¯CÙ ÐZÀ,Bu,i¹'q¾ød½3Þq¡úœDë,ÙŸ¹D^Ÿïk33ݨÍ/DÑɃÈíð$éÉQ#ÎÞÒ0Ñ÷·Pä…壺£ðÉ0: £q³þ;›îþ 2‡YúDsŸ5ýÍžmÓÚ:ÔæØSO@÷m#Œï¨¹™|¸`k¯ƒìa7^Ówt¡©ä È´½0Y£KDà­a\.¶iRRh&:°E‡¿þVŒ×!ñ ºóس³È#ÍXU„ˆë¤úœDë,ÙŸ¹íÕæÈâë Ü}aòà £N…ú²bˆ%•aNö¸EwB¿‡B–ꎒP"26Yœ}h8Ó3ñ–šî@ù‘ïÐe›ƒE%‡ÚF£7“ÖØT¹ŸóÐÇäÕvÀ¶e÷k¶ñþŸB‰ ¤aFC´ßßîøëou¸_Ö>ņž 6çì)ëÀ4³�K{ÎhÆÙiïF¨þ#'Ñ:Kög.‘×§í=6]B–ê.ÕX…c`�c™T˜·èë›:î&dÁ¬ûæØ¿—`븈lkÐÒ'I klÞ½‰¦W–€Í!h+OCicÿ¶À¬•ã’Ö¶åöK{JL‰v`¢[tpôÇÌ¡_ù%ÒÙ÷DÙµè´ÏâSB&»†fÃ56cD¢u–ìÏ\"¯Ÿìí](ò ]B–ê.Õ n‰Ÿ¿Ì޵²õãÊ9¼ Ù´=Àé}98ýh,ŒÏeÌŽôÃd[Lß² ±8'Ì­èr—§\Æt×%äDSéÀû %&D;0Ñ-:8ú³w¢µû “SîD$ÁX|€ã¼÷ÕÿVH´Î’ý™Käõ“½½ E~¡ëQÈòQÝ¥Ä-ñ+däX,8ÎC=²”bÆ&%ÕYnÂAQ&J¿³éz }³²†‡0;X+ÙeƒáAŒöÈS½Sp Á4¨Çe¼éHÈÄÑLt`‹ŽþljˆÙ×ä½Ð‡Èë^ëù y‰ÖY´×Ovù£!ÙÛ»P亅,Õ]ª±‚™—/1H“”PRb³uFUÞ†‡^d ÃMG!e ÷P62‹ÕjÃñtDy7ÑO lF‡í.JŸâï®!»iÁ1(L �3†G§s°ïôØxPu´Ø¢ƒ£?Û}ÔÔ4ú•b;W É/í6¿÷1IÍ-“h%û3—Èë'{{ŠüBף壺K5V`ú�/üWÑÞbÄ¢÷¥p`ãîßðÌN“ûPâ½È"LŠ仳b.b¨©Ò“*™ýÛ¬üš5ˆ„÷è%65$¹8ºÁ]ãΨ‡°š�c3Úƒ²u8ú[ÇÈÛeï  05œ£¥ObH¢uíõ“]~Jâú=²|Tw©Æ&Ù=÷œ‡n:Ñ[ž \Ž)OÒãKt=jDMa>jôd^N¡Ä^zÆÞ —žy\õæu¨¨ÐaÞe‡^V ™!òtï?fú tz_$¤Ó¥ÄŽnm¡Ô˜ý²‹‘ãßÐVå –>‰‰ÖY´×Ovù£¶÷Ø t= Y>ª»Tƒ$’¡æv›ŸWQîȾD¾´ÆÉÄí 2¶{8‘.rßÓõ#Yâóh2Îz?õHXœ²Eâã(©R Ý0ꠘ̬`ÖÔán§íz+–Ù׎‘hÚŸÆ4Ô‘‡^d –{g‘IR#s8{ìù]óR Q"ÁÞö3A»N ¶·Ã(Ð4ÔäÞSâG·¡b6ÓŽ@á—ÈÎ÷)a‘hE{ýd—?ßû¾ÿ¾÷}ÿ<|ïOOOoø7røþÝ÷ÿÀÃ÷¾ïÿ‡ï}! 9B!dù¨îR ‹££x8ýZ~…†ãõèu$rÎËý(>| š~Rêb³ÎHäYÆkõ ìL?‚šFšn°Fgv$ʾ¨âù(‰dóº*¨z‹sËÃ*Kÿ¹%RKä1k¯<ô"¤qžBŽô¿UöhŒÇ–3Q¼„LóÊt¬éD¯øÁÑ­ídŠ'è5`X;Lq†lôÞDN¢uíõ“]~¡â32ÿçþÇûNê"ô{(dù¨îR l¿ý õßã¯"«ù!j²÷ À›ÔÉüòêè, ì«%Ø ÿô$ï|/d¼aq^\S06G¹Æ*Èù&å},ÀX_ަ‘%¶iL@WövJZaq½ƒUU³öÊC/²ûƒïP~Û€ÿ–(Ø`é$#d˜r4í‚|øéà?8ºuÙazüÿG½ìGÜ7Ïy•'xlœêBK ÷&r­³h¯Ÿìò bd’ßFbx¦2B¿‡B–ê.Õ³)BZ~ƒ`<ΧÝÊ‹8wê2Eÿ@‰ö­÷_6có]58¤`ÿòƒ)ß6ÂøŽš›ÉIâZŽZC—‘#ònT9‡Ð~¦š‰Ø¸}óЋ=X:ÉÙB˜DCî=%>øëÖSi2ró‘•Y õ¨ êã{±CTEðÕ*zo"'Ñ:‹öúÉ.¿ tMõÝM¡ßC!ËGu—j°sÞ»ßCñüŸ~EìaüofC.ôòk~"ñ–ÅÊš¡3OÃ9; £q³!jqo€™DÏÕk¸ÿÚÏGÊb<ÿÆ;7 ¶%ô×Q¶ãèƒRÂÎ wìFvõsØ—þÝÍÿš*%ô3±±ÑxèEØO ÁÒ)M‹µ‰ã®a³š ­É ™&ÑÐÁ+~øëvŤÀÇùMa,µàdÝK,‚Ëü3¾T¼B°.„Þ›ÈI´ÎÈõ£=I¢¯üw5}G*ïn ý Y>ª»Tƒcçæ°°ÁvsÀPW •%q WŒõØëŽ·lRvû –wî¡éƒ50ûL“Ï9Ç È²?@ú1†—éÎfÒâr`rÒág3ͽòЋ9X:ØB˜DC¯øÁÑ-cƒîÂ5¯÷À$t—¡›_ÂŒ¾y4m̺Ψ|ü*!P*ïn’ß'd„,Õ]ªÁÀi¾ƒâÌ]nÝ¢ì ¨”Á•y­Æ±#*X½×fœãxÑTb¹!ì?ÌäKüTyâ¢2ÈšžÁ<û޵S¦#L4Dü´Wz—Àƒ¥“œ I`ú0øfÎHW«x‚4`J|ð×íªå.¾ Ú|ŒÊ®)笠øŸBו_‚íjúŽTÝÝ$¿MÈY>ª»Tƒ$\ÉEfÉu´ùçÒP·@&.€Tù+ûwL³‰![Äpë·÷N{v%Ý8ai½ŠŸÌádP!¿íS¤^Dã[+DÆžc÷¼¤%øi¯<ô"¡b6…,´¸æ1»°±¸ r«†ÙÐÁ+~øëֽЙ#…’ÓÜ…öÅB®bÒ{9Bו_ÖŸ5µû·ù¿6›ÍÞO¥´mª»Tƒd{í@ÝÕç°sÆYvR/¿ =F¦ÆÞ‰«Ò"Ê<„ªÖ^ؼ»‘ŒUZµÕý÷æê¥8¢õ««pÚ^ éôiȳ~,%yà§½òЋ„ –Â$Ývç�î ; Asˆ LµÞ¡:xÅ®n—`ë~ CÞôÞDŽÐuFåKÛåy¢mlëPÝ¥+°?}�ýÜ;n^T``&áÌþÏqêäAdÚ÷iY(EA~MøÉ:—Ñúõè÷û¼k­ß´ÀLc6“¶½>¹‹®é¥¸¶Wz‘PÁÒ”XàøÎ,¢m}õœ¿ÊŽc¿»¶i;›ü]&¼âѭưY¬®ƒíí!= 轉:YŒŽTnsÛåy¢mlëPÝ¥¡¼ùØ#áVá´¾D·y.‡ fýC4×—Cœ•‡ý¬÷3›á‚½ë:¤EŸ!3¯­k±|˰ªä4mRÂO{å©a ÎY3:U É®BѬ…ÁFòbR¢Æ5†Ž:žÙ¹ùŠñ&Îi^{_ Òˆ)ñè6hÂ(Îá­£äýŽ?äß)‘!tQùÇvyžhÛ:Tw©;yO¶ Ì;8—Âñ€saBû5öý 'ó2 "ápY‡  ¿J‡i:©OBH{­FÉÛ~íõ6n”ä"'†í•—^„±?Guön¶ÓJGVÁQˆæ"c秨êc&%*\ãèj¾SЬ¾Kxc n´Û¢ÛššFO‡q»J »³>èµÝ’"'§ ÍF;56c,FG*·¹íò<Ñ6¶u¨îR W`°?€´ð,dÊ{èîƒÃD’sôß 7Ý(³�ëz˜ßÁaû7ôZP_&FÖG—¡§9X’öþcŠsëVàxõ# ?< µÅ[O5JxèEœ0+ Ê»Š®µÝL²ÓÙ‡¦•ÐLPs3Ün´»* ›_ïÀ—Ëë{½ §å.Ê¿jD¿#‘®\èà?ˆn­SžgjÅx’¦¿½ÏœitU¢;›1„N£#•ÛÜvyžhÛ:Tw©†K¸\6ÚDMÑ~¤±÷uGÚ~UÕ£þ\1ê Þmk„˜~ƒ\Ñ‚GúÃæXŸ¿3KN,Q[3E îÒrœ(»3Û‡^d&E! ײWù >ÞåÞo ³ót—s ¸ 2|(Õa=Jíèî¶øŸsÐ×ìÇÁ¦AÖôtðŠþº]5ÿ„£µ=˜÷{ð‡ …éH£u6c,FG*·¹íò<Ñ6¶u¨îRP1pBªÀ°ŒYóSÜ(ú9â/p4ë”hßzÿm3–0Ü$FzÖd¥‰°C”‰‚s2(5z˜m޵9ã˜ÀmpP¶ƒ%ƒO“'í Æë8x¸O{}Ùh{¡ïøÒýEPüþ’}Ýuõ%ºË¹˜ NUwamMŠymi6$¾²'Ì84ņ4.¼âG·Ì$zj"³à jd2\©ü y»°#½Mæà««ôÞDŽÐuFåKÛåy¢mlëPÝ¥dÁ?I*0¸¦`l¾ ùïÃp„³ÉN+}h‘5â¥õ-F:¨nT£(;m'»‘w5Ê{xÞø5Άe¼R„�3ù7Kxv»9GQÌ’>ñЋº<'°sÃ<>Ôî[ÒÀL£·®eO ï}޶Ú#Hß±§êÕ\FMIÒDyõÎx¿xÈý¦Ä‡ ºeæ1ò¬2i1Äâã(©iij‘ù .´zo"Gè:£ò%Žíò<Ñ6¶u¨îR'ÆÌcìü×ô-:sÈzÖÂa ÖG_#kg!ýá»÷2ÎiLq껻ాB·F‰šS¤¬Ênäoá¡â}šy•h ¨j¡nïÆH¸±¼ïŸ^d¾Wå÷ó_ßx¼Á¤Ÿÿ7%\¯¡WžGÙµJËGYë+¶“[cä9šê¿G³þµ`v5 tðŠtË,Âfx�e½ 2™ÍÚ¿6MEïMäÐÉbt¤r›Û.Ïmc[‡ê.UX†í¿ MÀX€ÕÛ0ã yÄ5 ³¡ƒ“Ä$&‚þz4×7@ÂÛ‰Kè˜ÍuØs:Þ`Ôæ ÆfRðÕ ÞêȲâ‚;‡T à©aŸ‹úoS<ÐÁ+~ptËÌ¡_ù%ÒI¬Hö—øúT>ö|ŽÂâÐ £è½‰:YŒŽTnsÛåy¢mlëPÝ¥dÌmù’O÷"³øÌ1ÚŠ+&>fï'© ‘]T*Œ£°hn¢ÕòÎû©Í 1›©kŸMÿÙW7Ðcñß�|!õO¸›<n´”¸bˆªožÃ¬O[4A-oÙÔm2ÐÁ+~øë–±¨pXôòê_`ÆÅv(†z©-X6)qV5´MÐ{9Bו/q¤êoã¸[‘ßéÿ:јÍfŽ<þò=~üØû©ÄAd&9ˆì‰ä¿ÿý/Gž@ùȽ§$)ÌzoÊ ÿí!î)e8W {wìø5ú9ÖH4ãùóÍÝiÌfªAŽzÛAà‘T1›”¸bSC¼c/$ʾ k`Ø;P™sj‹Óû^â!˜üuë.‹³ãTÖe÷k±9 ‡á;äÑl´1Cè:£ò%ŽTýmÄ ÉÌÌtÿ¾Àãþ缟JÓÓÓAe#1˜ψ vÙ͹sç‚ÊFî9¹÷”$†qàÍŸ‹ë*œ“ÃÐÑMßft_#=ýkèf6ß•¤1›©3ñ�ÕmxéŸÐÊ} b2F~´tf™ì¸Íc¸õ¨u-Á NRú$ +^yko&2hQâG·‹¢>ç0&OÜ)““ñÉ'ì@ð­³C„®3*_âHåßÊ`‚±D Fo lB1–BëB0Ô dw5P6rÁP§D3ÃOÕ(C*k†Î<Í]tfœ˜›óÅs†ÀõÕ·(‘„ƒJhMS ×4f3ùx‡Y›†û?£^&ƒLÑ ÉtCb«ð4²oÖŒNUd²«P4ka°-Ò† ÜÆ&Ùê^‚£ÿªëžÀâŸ�Æ] e/-}²Màê–}îl=øéš*; ë‘‘q•îRÞ@ïMxI—ïðMÂ|G¢Ýà„îâH*·¹TþmÁ &¡K„`»›Bjÿ¾gÓÿŠ¡NÜݤ»šÉÛÛ)ýj[ ”EAÆ>ˆåݰ…½{å‚]+Ezz!*oÉ!-(„87;„g%Y ®ÑJÉ^÷s.ÊÈÅQñ!d¥eà˜j¿¸èáe$dìÏQ½›ý!éÈ*8 ñÑ\dìüUc‚1€’–5c“hr…58›q¢°×TO 7ôàQý1¤ïø•]SžÏ �Ò )ñ!ZÝÒ{ÁvM|G¢'Œ¡vMÈA&‰†è‡侃Èåÿ:• ¿-• 4˜„d,üŸS¡KÏ© u‚ïÙôBˆu¥DóZcGT°z CÆ9ŽM(–Â40Èöc¿r�«äïk Ð/L¡_u+Ý@JJ¼1›¢ƒ¨í‚ûðÀ8‡Ð~¦š‰ØXi<Œ„N˜•å]E×Ún&ÙéìCӉʘým‹]ƒ"Ñ~Ôê§×ukïEsY¾·@k¨xÎÄA.J|ˆV·ôÞ„G°]reÂlׄB0æ'±þ‡Ð&ÜÑB~S*ão0 ñÞù?§BÜÕ÷N…f¨|»›ùùùÞw(‘N­eõ|3»î–Ê8m0þ‚)až}‹nýò^ß|‘à„¥õ*~2/z_o† š³øÌ¹‚imê s움îÛFß h¢I “O©žÂõE˰ªÊ!3„_u3x IÁÐBn¨áâÿCV°0;Ow9· Ì6âqû Ø8 ^…sv‚ÓÑ 2xQâC´º¥÷&|üwM|‡P&ŒÁv7…°«é#T!N¸£ü¦TÇg0 õÞ‘çTh»š>|Ï©PY| Cüñ‡÷ÊûYÃx¹¢ ¹Ò­q‚¥1X¹‹ÓYÄÃíëD‰ñìcì¸*-¡ÌC¨jí]«¹ÍXÕ¨U[Ý¿gÎ4Á¼Ì€™î@ù‘ïÐe›ƒE%YæR Ÿ°ms¨‡?®ƒaÑk-8 ’~†Œ]%É´³éyð®ÇÓ^_†£^è;~†t¿¿d_÷@]}‰îrn¶Ã,QD«[zoÂÇׄB›0în ÉE5Øî¦P'ÜÑ@~…BÙN0Xèº q“y=Þ5Ðy°ýA¤j#,Ã)ã}ÎËL<™ýŸãÔI’1–íwÓ²P >Š‚üè¦ÃM!éÉñ¸oŽý{ ¶Ž‹È&çÚçg¬P’ŒeÌôk ¯½íÈ¢ÇØ,/ƒìÑbUÇ‚‡‘p¯Õ'°3`b±ñø�›á—Ú†ËcC%ƒ]6tœDtÉý¦Ä‡huKïMdøïn mgÇwSH»š>w7SmW“@~…BÙN·Äʵ’cn7UU;މ̪ß1ã¶Ç\°©+cæ¢>«pZ_¢Û<—óþ!šëË!ÎÊC~Öû™HYÆìH]ƒ)ñÁCÛŽcT6‘Ÿ‘p¾Wå÷ú°?Þ`ÒAw6Ã…±=Æ÷¿˜áp×Rao½ÉbnÒ XüˆV·ôÞD†owS¨»r¾ÝM!íjúðßÝLÅ]M}ž(”í16ËÑ4²ä~E\MËöˆ°#ý446Ÿ:ƒ¬ŠÈ¿ó¾æ‹%غÕhí0`pÒ/ÄŠyçR8[=dWSYa&D¢LH¿‡¦?°ô %¹`à4ßAq段ñØÿeW@eÙÛŠFÂU8þŒ¾ 0…˜·èë ^ë$ó¬ U’HÏ,Á3ß+d[‡4`J|ˆV·ôÞPøÄ·»™Š»šú<Q(Û ‹†ïp°´= (úˆíÒqØíVK’YaTW!û`Føž�Ïw¡öðQÍJwË”%.G}óCèͶµ,¤`xó&TLbHç"“ü¶—]xÔt’}Ù(n¢¥O’ï=-¹Ž6õz‰4µº2q¤Ê_Ù¿;`šn;‹‡‘Ð[{Äç/CFŠ…úŽ+çPpð&L$ÈØö�§÷åàô£1j|nè,~Pc“Bôy¢P¶!Ìú›N!“Ä2îØƒ¼ÚO-Ëe+ôí¾É|ôøHq~„LO²Ç:13jÄ3õ Hs÷¸û)QÆAœªQBóügœ>«Eðå¿U8ô2Q¼Z‹GeœtÉËñÎFçïI Ù­î@ÝÕç°sn k„Ê/CcMåÇØT…ŒÜ#‹ÅÇy¨G–¨±¹Í °øAM E8Ðç‰BÙ®xJ „ª°Ò׎MäÃ…™Ð¢®ÅÌq{eÿDä<nkïB);‹‚Œ]ر_ s(¯ZbHÿt—ü³éÒÒ'Iãr„â1X2hñ4yŒÍ̼|‰A~Ÿ)Š€¡°øAM E8Ðç‰BÙž0Îq´-Pø{ô­P’{:¥Bø·òkT´a÷–=!ñ£úš|”hßz^2NL޾ á»˽2äåæ!+=…µm0¸-¬”ÇlŒÂ/Ìä Ü,9à­ÍïŬòblÚŸ>À‹…€e’ÕA´·Ù&JÙnÐ XüˆV·ôÞP(±ƒ>OÊ6ÄiB“d¯ûù}Än"®·èUžDfz6ÄÒ‹¸r^ŒLÑÈ ¤”ÉûXÁLO_ ß.¨÷÷ˆò®¢sdÚHfÕúX= ’(Bg&E>væU¢±Í?f“=Ú»1mf /<Œ„ĶÈïó;öœ ¶%(.&}}ßÌ®gŒba3ýƒÉu©XCî=%>D«[zo(”Ø‘’Ï“c¦±À‰ä2Þô Äü$AËG&`,ÐEQ0 ç0ÀÎ6ˆ÷Æ„>{ £¤dÓÚsøGñOx9<±žx‡Ã2¦´-ø-Ʀ›eÌ¿À£fd29šž Eàg ¶/`&55É.¨™œçÊÄÙHÛ!BZ–g‹á˜Úêý<EؼƒEu‡U£ûŸ‚6ß-À±Ù~•$£‘ÏbnÃY Šeí0NÒ,ÇŸç¦#SrMÚ>ØÝAèC¸w:"bÐïØìª'žàt@ šøAM E8¤äód»‹Rq®pÜ/AZp Ó;(á;þì;ý�¶D ;‚–Oè ­h/-Âù+~²±Çét'…Y†íQ9öí+Ç£µ2.Øù­Ò¼y}Bfas<ÏËG?Úå h~Ä‹6'v3zVáœü†ŽVܨ*ÆQe@ E˜0pMÿÙW7Ðcñ/GùCêŸp7yÜh,ŽŽâmà3µü _Ü€‘¬ŽP¶ÎBªÅÍb)ô+ YCs'2¥mè· ¢G^Œ¯4ãX5õ@ šøAM!ÀvÞSo1% JbHMcS IF.ŽnHøw gÔCXM¸±)dù„ž0Ñ µ$ ¹Gec3jŒ¬Rcóýc³21.²ïau¸ Ó?A®»ôÉ.dœ…L©‰ ô %õXÂpÓQïæTà‘T1›lçúÛÏPÿ=îg1Û`ý÷=T²ªÌ<õ!…ÈŠñŠÖ¶¿ÙI®¥’l#ɼˆ®ïº;øÉ 1^ÅÚ:)9Ñê–Þ›÷N³˜ß&f²!tÇppMÃ6•ñ>)ù<ÍôA?¸ù®MB´|BO˜8‰—úº#.LhÎãŒöͦ35Žq¾cœH&Ù9~xiÁô¨:ÕuTíw'† ¯ô %a& ¢º / 8Ç &c´hα"fS”}½ŽPù•)á°b¼IÓßžN¤Ÿ.#„3pBc]3@ rœTlÚññ ¹÷”øøŒmå lqƒ»�é­_üÂŽ;W N/NŒ±)tÇ÷ –MJ”§H¼OJ>Oön´¿˜ Oœlo†§’ åzÂDž¶° ¦ÕÁh1Î{_QÞã0@.)…BÛ ³Õß5ÑwŒc@õcÌ\#‚YÄÔÔ‚ßóAJ´Œ¡¿û”5'‘G’þä7aD�2…/Þan–dŽü›w ü£×ÏZîEê2ª5Áì¶%-‹/!;xMÝÐ*N ƒÜì<ìu«uÍÃjlCeö14$n§à?þàLÆÉÌ÷7ù7 Pc2Z616ÛnBš½›Õñ.dß9™¹ïâøʤ7Ѩ»µ£2ñ'ScS¸°mLÌþ.òÛ¸ÇG(Ó É å ½ø.Œ„‰V¨ÅiAäaOY¦~s“Ö€›1A«”AZ$ è‹ÉqYi‰X\‚ÝЊڒã”ÔB©5a&pçÊå€-dé×8º[ÛÐaø“kåS(ÉË ìOî¢{> ï‰ñ#aˆ˜Mæo4}vš jnFÇ ýÍ(Î$)¨EHËû:1,°êï{'píxlšNØ K ʃ—ç Æ&¿S¢!¸ã…¶êSˆvì…XÞ¸„\Bwq ilþ‚[Òî¸Qf î˜S#¼"%Ÿ7Û}ÔÔ4rïß+ä—£Ùh€±)dùÈb• 5·Ûüä# ¿D¾´E� ­h¯‘á¶¿îÈä¤Íb2á77U`°¤oÇ=žMÆþ¥é{QPy éç(ç"Sò3úá.r¬b¾K†Ãâì±,ÂŽ´lˆË®mH8Ä8&ð&ìsR ? `<Œ„Áv6 èýýŠ÷|Šzã‚÷s”¨ %PüKŸŒüüü ™¼Gá¢wJ,aಿ@©©&ú•šÁRÈÇ¡»83†™X´-!]|=îÅ²Ô %Ÿ·ÅqŒ¼ L³�SÃ9Èzg¼¯ˆ åÛ$aâñz„90:2Ð×ö[8.{Áþ+%fݬD¸¸ 2¤íWÂÌ63—áGÈô“˜éoEyÅý0=]0\k€~‰ãœÆ¨ñ9Ô )r‰áIåDòž7~³Ú·ÞïP„ Y�«FÉÛ~ L·q£$91\�ãÇØ j5ïFÖé»YË¢J‰+&h;lÞ‰!Øî&ÝÕä¢wJ¬XìFYönˆ²ÎAeš ˜¤%�¡»8B Œ7|tR¢©Rƒá[ OÉçͦEƒÚÄA³²cLM.Ò„ˆNÐò±ó¡` ÍQ“½_� ­ø­Aƒ¿ýd³Ù,0kk‘&ƒ!á77ÉpMÃÜÕe=‰—C©~Ž>[|cã6ƒ™Ð ø3o<æôT×½Ä";ŽMënà¦1œ¶çÂÄý´ û/²ã A‰´ZÍO+D†hö+6Ôk¥ÎñqLq%{O_ýˆÂOBm‰Íâ/?ÆæÝ¡àv®¶ÉX×øÙÆ0‹°´hV\õK â;® ¦¤Eˆòßݤ»š‰!%'¿ a 6Ý·ÈKÛt7.!™ Bwqôƒq @]v�"QJU¯»#'RÓØ ± ‘v !$‘´|¡ßEHËo€÷A¨˜Í=ÈWüK� Œ’.ÛsÈ ÿ±Q—¢(S$¨¿s ¿á”föN’„’å' ëâEÚpçˆÎ~(O_D›ñíº'Ý’5ég¡õº\2ÎIŒÚhù”d‚qŽÃpÿgÔ»AñnU}Béí\¬7‡—‘q¹àâüh ã‚uùL.07!=°Cãi‚H¸á¿»Iw5Ñ=%J\S0*¿dŸ9Ò%7Ñ3°–ÈLƒBwqtC&b¨ÍÛƒéÇ ïyÍ]xd¦aOðŠ”|ÞlØ1ü zýÂb †> ’0ŽDÅ*û#hùÈâû÷P<ÿ§Ÿlìaüof°�oÅ]™Ï{ýdcã  ³Nº=6Î>(ò>€(S‚‹·ÔÐéIY/ô:5n]” S´§µ¯cŒ¹Æðüq?ÈþªËöUî¤v 3Ìy?ð>HèÈ?¡,þéYbHk.á¼ø#ˆöÕÁ@ëæ'%Œ£J ´#ÙEçp*7âÏQ¬ì‹Ù¢?Æ&?dÛ2­EÉ?¾‚òåìŽ`ƒÛ1L=ƒò7adw$;štW3qPc3Z–aÓ^‚dCvAÿãr3¾JPé»8²ú›1*!I±†æhèù›++9ÔߥÙh‹k³ W»]9ŠUC‰oc‚–çæXZÄ WW •%ÑɽB”@pPWÜ ‹Ï*æuØ•ù töwÞ÷üY…ÓÒŽÒW`œ±íqv}&[ä›?® ëz<êê[ðld~c»¡$ï`Q‡HT€úÞI¶dû"Y%;™ƒ©¡–í“‚µáÈáa$äç‡lW\†«8ø>ßxf³sTÏjlòCb2 º¸‹#ÃÃÕ’`úúq47 ZúD¸8p§øcwæà 팸ªzaKdIAËÇÀi¾ãÍ¿Q>QvT õúrÀ|§™¢²‘<Ùew`H`Ìar°�cýg8¼imsû™ÓP˜’Ð1ÙõÕ·(‘GIZÓ”�1)[‡´×ØQ¨‚ÕÝ`}6šýqÌâÈy ùù!Û—¡^ñ˜”ä€L(1b³ä È4èFè.Žá°d€ê56…ÊŠ±{3K hó‹ f_eDZ_úûwbKm [>2ÊEfÉõ€ò?-‰ UþÊþÝÓl‚e­Q¿7 %ŠV?ÙØãWÄû¥lÇþýØ„Ù$éJ™ãŠß3·%±»•I8ÿuÁ®•"=½•·äBœ› õRLb,åÈÙß�“;a+i¿yø$k/DÉUú„Ÿ²]!ÙÅNžÑn^l9…b (ÑAÍX@b]„˜üEè.Žk,cÖÜ µRîNdV¯TãYŸÏ•k®q×KÉçÍ5†Ž:žÙ¹­iÅxç4¯½¯ˆ å#}Gê®>‡ÓÄY#T~{¢çCK°uÜÀÕg6®1Ρòs÷a÷¾¤lÆ ¦µP®›ô¾Æ,ô5gÑ4’ležÈü}¿7Ó,û7)ƒ²0…~ÕTh¬Ü6CI"Øç^ß‚k²_`˜™‡±>Õha†}žFÂøÿm 3ËR_¡Xñ³ecüSŠÅ@Q¢#%'¿|#ääBwq$¸ÆÑ)û<HR3⦧†9…ÊŸß•rZ®z;\+þ-\@µ\ ÌJ€|Baö§ Ÿ{ÇþåÇê Ú[ŒÈöÊÎÕº~E;;7Ûk(¿ùwBKw$ ‹B^Ñ<Æ•Y€U÷-rxê]ò ©\00€»¯ƒå±~ôÙÃ5z]˜ÐœÅgM³ß$FuêHb!’ÙöÛFßÑ–A #¡§s}±ðT ¦sM\S0i†LZ$ê( ²2‘–’xRròË+ÂNþ tG²2Þ¯(„HôÄ„Z×ãqõÕw@}ëÄ™»±çô#L¤Èœ%%Ÿ·d«å*(ˆûd°Ò'ì!O/·m&¤þ»r~†;ãB{y”ýt£`s<Þ/7¿ï€Å¿–üòÐQwÇJ*qEv†~ï÷ŠIÝím2 ¤¨Wé`6¢õ››è- ã0ãùs³ÇcÇÙ‡†3M0³¿‹™î@ù‘ïÐe›ƒE%OLR<JRÀÃH(ðÎu;B1P”è Ï%žüAè.Žó:Hwe£Rg êÒëžÌ–’x§pÓð ›”|Þ’¨–«ð`çCí2ÔÜnóÓ_îȾD¾´ÆÉOÖ]È>¬€nÞosÀ¦…rÍø$ÉÏj‘v° à vHçL¡âú�1Ë>ûºWÝÐ(kP”îïAQÈñavÍ×È+þ¹éÄîÁã>ÒG·ë‹È& ¥héÊ&ðcl ¹sM¶G %:¨±-Oþ pG²óšqXKHQ¼3~BÅ+®›a’’’Ï[RÔr* GGñ6°ý/¿BÃñzôº'ó „‡æÔt­Õf!®’çðÄWö„¸Q–`gš :uÛ¡Æõ¯ÀÑÿ êšÿ ¹ŸŒ“ƒè´=Ù$|aÕòß5÷Â4ƒ{ŽôÃDÝ«)›ÀÃH(ðÎ5ØF1P”è í‚ Oþ pG—A†Œ÷ÕûdC‘ j‚FOJ>o‚¯å*d\°ýö3Ôsôg5?DMö~d']Á|¯ÇË~F‡þ:Û.¡0}'öœºŠ[²K¸Rs ¹i [öÉ–G•W×ÏØ;qµ¬ ßžÿ…¥Jt[”a ö^%гsQTuª'ëße¦`þËB3ÒRBÂÃH(ôÎ5Ùr Ô* \O`Þ¢¯Æö$‚”œüòP“?„îâ8­Å™rBWüd°¨—á¨;Eò“𦾱k¹ âõ,¬H„´ü$X" q¾ ¢{[ö LŽ0Ž!<kúõÍzب§Ô&7®Ÿ±ÝÃWyE8®ÄõU”‰i=k<þk›Œã?Ыå(ÍÝöÙtd‰ËÙöðzÓ=T~Xí·#N¡páÇØ|çšÄ:н÷퟿ìví];®œCÁÁ›îR8ŒíNïËÁéGcÔøäòìQ¢E˜ÉÜÞÅqÞ]â¡Õâô¾ö‡„YŸ¢6÷(”æ`ÿž|¤äóª–«ÿN%ì˜x÷{(žÿÓOwìaÂd¢³DSb„ãúWà0iqß4ÏÎ í0뢹¾⬼7~\pXЩ®£ªh?ÒÜsúÝÈ*‰d·”²àÇØ¤kÜv Yhø ¹G‚dÉ=õÈ56y†›[5.'- Xùe\®<Sï!\]cxvS‰ŽÁé„¥CŽÒc%¨¼r ͆©”èRòy QË•²NŒ™ÇØÿ2ø¯é ZtÞÌž‚ã5îW]Eg@‚1ó0©DÓ³!ê.¹)Žëw-ÂlÞU© v|œ{†Ê=GPyUŠ‚Ì|TuŒ c¬¡^ŒM{w+”mj´ë­X&++#=д?…1ìÚ>”P;j3/_bÎK56·B‚&[Aˆ.Ž®)ŒŽ9¸Æ£`ë Æú¼Q<,Ãö@‰_†&`¬?À¶‹¨7.xÿMHX¡§#]ò3úƒ¹UºlÐU¢X=B‰7®Ÿ™ÐàÄ®ÝÈ:q¦­z2s0k¾C©D‚¢29Ú ãp2XþÄ{JÆ9ýÍZ4P—zŠ<Œ„Ľ ªÁâ\Áò° ÇÒ?Dn‰Å9M-‚Ž¢5V…ün…d26èâ˜B "…>o”5ØIzË7|º™Åw`ö¤ŠÄØÌÀÑ[íh©û%ˆÁé)}òÁÇ ˜è"rh׿j¾ êQo_ì‰Í­,ú¥òßÃŒÃe iÝe«¼ •J‰k•_";íCäÕvø} “wpþº‘ý4…⇑ø¯—{Vp˜ èÊ>ÂNwíw°ªÊ“c'h„E&é´Æª º§DJ›Btq¤Æ&…’$xŒM±Ú ÆÑ‡æj9[ücð<¥PvÑÒ'ïA˜qý+Æ[8¯ƒËiA—üÒÝq–r4ÊJQµéN¬ × _òý&öwμ‚ºê8N¨áΰ2�å§Ÿ¡¶g2q œÁÁÃH¸„á¦rÔêÌ긌‘7?I\s¦š ÚcE`c ØI:­±*(èäw+$‘±)D¨±I¡$ ëÆ&œM'ŽâÄ5:ô/¡T1)…RÙ¹‰7Ňàâú—¡:¶×³à/ÊA©ê ƒeS3êÂ26ßÁÒ*ƒÒà—F6’¾m„ñ5/)Ááe$$–RBøndW?‡}é?Ðݼ Y¢26¦"¤8¯© j¥Üñµ^©Æ³>ë©Ck¬ :ùÝ ÔØŒ jlR(IÂkhŠþ}µ=˜÷Û®·04W 7MĶgQèxNŠ—Ø;:Ð÷­ôu Ãž�=ºf0bô…VÌÃtç4²Dù¨3Æ’™ùÕù'¡è²øÍ/—aUÉ¡¶Ñ Jpø ]LN:¶å„#î¸ÆÑ)ûédµŠs°Æ}™æ„ ì$ÖXtò»¨±ÔؤP’†ªYa|ü�z·„ãœÅ›7³ ^ÀNÈxqÒKÜ’oœã¤g`œ-ÁnhEmÉqHJj¡Ôš0Cb-Ce© Ê ý?C’¾gP«hB[SNœh„Ùße˜Bñƒ‡‘ö/ô+ !}ñÅ¡Öõx’‚è; ¾uâÌÝØsú&¢hÒéÒ«B‚N~·56£‚›ŠbÌM­-¼¾™]OÜÅ8m0þ‚ɶÈÿ¼hÙó(ÉŽ»›á ž™çèÜlË„š÷E¼›ŒýJÓ÷¢ òÒÏQ ÎEæ–vªÙvl7â¾²%$+me#ô6Z]‚FBöÁ£…ýãǼÒ]Ù¨ÔÙ‚NæÜ±±¥¤æÓœ÷>aï}Ы³ƒìâ¶œ|&2ÈQ"…sä/ôùbŒ]¯¡o–CÖðÐã5à²Áð ƒ–r 56)/+p¯#Wô$Wš 5N°Ïƒå‘»8µÛc„ˆ>å¿N!cŃïïbÈñ'ê÷аco=Œ‰rˆJz‚-NZ¡.ª÷KªDjqVònl’Ryiû=Yp]†!ÓOb¦¿å÷a kò½ûýJž“A©éF¿uÞÛN0j² i()É?Æ&-ì7VŒõÈ8¬‚%¤â¼3~BÅ«ª3pÍÍaaƒllG[W UÐ º”xB'¿ÑBž…H”ÜCÙÈ,Vct¨ ÇÓEåÝD?õ1Ûˆs/úì›ôíl?ñú ”OlÞש}Þ(\,t]†¸ÉìÉÜIpöA‘÷ÛV² Uaî„üHïÉIn–ªãø4ýß †Ã–®±IêlÖ„ÒO?AuÝK,²3ÃiÝ Ü4†ã¹ÃöÕ6ÚoÕ (;m³"¤e‰ªWqîÐ÷t‚FBZØ?ž•ªŒ÷í$lgÓ|Å™»<+¶‡(»*wA`ïÇ)q‡è ‹0) ï®[»ˆ¡¦JÔ¹½aV~ …‰V f¶¾'h¼(A¦(m-f*AŸ7 R ®*«ÏÔt¢*ÂÎ;‘Yõ;fÜca0c…’<¹Ì(Tb™_Éě† žl²$ƒlù ȺưhQ£6Òþ×5 sÇ Öèüâ¢#ÈÚsZZÎŽþFBÒ0;BF2¥j žI€ñ“‚Lkq¦\·IrvJ¬—á¨{rÌ7d`ÍEfÉu´­•>!G dâH•¿²wÀ4K;(¾ “ßèaì¸pé¦É5¯CEûü¹ìÐËŠéñ½0pÍ¡G-Giî¶=Š–{õ?_…ìnê› ¿ºã,ÌtÊöˆ°#ý44k yæXC¤ *Ë;ïkJrAŒÍÓ8¦¶xæ\Ët¹c‹QVÿúÉ|Ç5•ätŒMמ?î‰ vÙž *›¸o`Ç®­„Z±ç˜ù Í—~Àï#sX³¥)”�ø™y:p§øcˆ¼;Zî#q )É<ŒòËh ê’º §õ)jsBiN„S éÌ:Pwõ9ìœNˆpY™5‰Hû½Í¡Æf´,Árï,2E~}™ïØó ºæi9ŸÍX¹ƒ#¤„‚(çoâ¾Ï³YÄì\SR‹†ïp°´= (úˆí;ÒqØíVËŽ—$¬º Ù½®Ž”$dƒ…ÙÈ´Ãx_¡éÌTÊ~…‘ïòo¬¡©“E†h2 ¤k^Á>9‚>SeòV-xt&;i ex˜yº0¡)ŇâzhV8HšebMöAuºš÷¸„”„í@žÝT¢ƒcp:aé£ôX *¯\C³aŠÊƒà oc¨±-Ëx­>…é~;õìÑþ/,Ž„=cɃ «kP$9¹ºfRï›”í3‡þ¦SÞ«=È«í€Ì‹–­Ð·ûúêñ“¼xël.ÍÃÚ×k,u6I޽™gÐÔ©G×£&\‘da_qsdÙhIÝUÕ·(‘GIZÓ8¬ú;¨—?€™›”ð0ó$¾ég×ÜFÖ!E`Ë©ÛY¬`VàZ¡:es¨±-ìDâÁœn4x㫼¬¢½Å±® ÷¨!/;¢³§PÙNÝh)Û²‹9Å)}BIˆ­@ël:zPsäw7̬]7PúMG€÷Y(\°k¥HO/Då-9û !Î͆DÙ·q—Bñƒ‡™ç;XT•¨í")¾},cÖü*sŠi\B´Ø{ í#õ±6aÅmGêez¤D56£…L$BÔPÛs:š a ¬Âiy˜’Ùh)”­ˆ]¯MqYp_ùvïKÊfl2Fpþël’ÅRG3Ê/=õì¦{ß ?-Ù<ÚýÊâ, õè¦Ð¯º€ •.œPBÂÏÌÓiB“dŸ·üÉQd‘”É»‘#{yÚ:£ÃÖŽâ‚s¸tõÌs\‘ŠQœ‚™)‘C9J4°‰öj”ܸíçF{7Jr‘#mÑW‹“‚%؈˕ìGÜwŽ÷‘ì®7H¡lç8 ÚwÂÄcö”ä&(y ‡U8m}xÜxb’Q^¬] bl ³ôɪå.Næåᳬ±§ðÔî˜y.s j5¯½ŸÚ wŸ¹N²Fª¶Î“d¶ý¶ÆwtBO o3OÆi¾µeEHJ¾Bó 3k++”-cSC¼aÅ,ðHͲ”È!í œãã˜ât]+p¼ú…ž„Ú.@ñgu¸ IrŠÜ|de–B=j‚úø^ìBÑOC*(Û�÷â;Ûæ7ŒÓþG"v½¼øÜÛKóFdIËCiýM\‘= ÆfXרdfºqéðI\¹qç 2דvŠAÖ9„ç*ÛI[ñÇV„L]äìCÙ&˜—w6åò#ß¡Ë6‹J.€ŠPáaæ¹ûÓx±ÐtiŒSlØPCscGç2Ô£ˆ›2°Pb ö.9N”ÝŽ,ÑÂ6dŤÀÇù$Ó&ƒå¡œt'+ë?ãKÅ+v´0ön´¿˜ psb°½ÆÅ0NC0m¾ Á¼1¡ÏN'm© Ù :‡ÿ„—ÃÞ„‰,cJÛ‚ß1q_‚êȇì8A²•~†ûÂF Vî…Ùy¿y%4AŒMÁÔÙ$þD·™ÈFuš¡Ô‚ú21²H–ð´lˆÏ~‰Üc›íb“sôàq)•²[ÇEd“dWûê`·¤l;x˜y’Æ8Å jlR6Ál6ãܹskyî|×ÖÖz?E ŸØŸÜE÷|@¿Eσ±Awᚷߟ„®â2tóK˜Ñ×!Ó ^$¡L7`„†Àv¥âŠ÷„=ÁAÖðöU]¤¤ÄÈ(yo)2fas ñü"‰‹¬0>nÄÅ¢/pZ®FÙ'CÍð!s0×Ù ã´cÐðªÕ(:ª„)ì©ù2fGúa²‘eC %8ü›í2ÔÜnó‹qjÃٗȧ1NѳÁØ$Y~¥¨Ñ¯è¥Ææö&???Èy‡ûY¤D ]<‹3ô‰ÿÚ ¿QÙ5åý”@±ÝGMM£ß8Æw®@’_Žf£=LcS IF.ŽŠÅovœQc„ç|>HÔŽÖV`ˆá¨å(**AQ¥†ºÑ†…€ëlR( ‚c“Áâè(Þ>p˯Ðp¼½ôa‹vòr옯ÝúuÂÚÕˆš’/PT&G{ÿ4«}',ª£Ææ¶å?þØ0¹ÏÌÌÄÿû_ï'(áCÏh‚ ­Â¼fû«)”þ›ú.´/þ#üÔù‹ãy¸ß¸�SÃ9Èzg¼¯ßÃLôƒ›ïjQR’`å<Îhßlº8ÁLc\@5 çÚi6ÚÈpm^g“BÙNð³³ùÛÏPÿ=›Í¶vXÍQ“½? ˆš1Ž^Ü(ü‡eZ oˆ›GÓy”V^…Ê8ë}² ÜÝ$“|ÊV  ‚¢Â®EÍéFfüûªã…M‹µ‰3ŽÙ¬&hkr‘&t`Š``È%¥Ph{a¶úµ¥µcªq—ÇÝOÆÑ‡æòrÈ;DZìÀÕÁöt \³£0ú02KºÃgöŽô½ÇÉEpåm(”8’À˜MÒò„?ÁH \pXûÑg}O½MʶÅw“îjÆš (lb÷˜(BÉžv ã¼÷Cá@êLwB¥¸ YýÏÐè‡0K3³o#X#nÆ­Ri‘$ˆõ!d¥óèj»„ᦣØUp —QrèØ!ÊÇ··¿Ç±t‘§§ e?)UDy?dÎ{ÒKAc²=Ç%H Î Äš5ŽïßD+­yO‰#ü›w¿‡âù?a0Öã&ÝYÎ(Qaï¶ï=Fæ ;°uÐh‹íŽow“îjF‰ë5ôÍrÈÂLŒK— †0Ú鮿{±ýi‰ª5Ú6¨n”";§,ü¸ÇDa{�™â zýÇ1C'Èí€ùN 2IöÆ5ƒu7²«žøY§lo,éÛq7Cä54EY(Ѿe/ý7šòÿqÛÐ|õ%dþ…ñD{YE,´‰†A¨ –Àƒÿò6ŒÃŠ>w¿õOtiï²ýï(ë/¢$÷�*»¦½ŸÚŒ8L¿A^¯„ú™£3¾¾&¢l/1›®¹9,ÐN*>ØÚQ\pî=Ù Å(¦1›Û²»Iw5£Å³ e ÷P62‹ÕjÃñtDy7ÑOãs6ÇùÖ)qÑP˜…ãêÑе݄€k³ Av®—ú yÞb3¡Añ‡ÇP¯5ÂêðèqN _ug4ãÂ6¶)±Å5 sW;;Ù'ã´Jõsôù2z®¸ÀßÚƒjq®'¤Ée€,ÔåV ëš Ó誹éW'’bl–¿ÇxcõYYž�cs�šÚ#H'Æ.ÃŽŠ!)©„Lц^[8‹¥düûÙ‡òá^0KG–¸õÍ¿BQ.‡žz*RBÀƒ±I‰+!ÝÒü2xPc“B‰žE˜Èoú›.b¨©u’ùyfå×P˜hñ“Haì¨;Q‰f¡»é1è½YŠlRn‹ý«Ëð»Ûƪ‚„Æ}nHÂçþ# ±‡è�ÊÔ<'Ë"}ÚãÈml~Œ½íÏÎâĵF´©ïàÖÅcØ_Õ‰HœÅ·/ÄØ ¨³¹Df%^ÆLÿ}È/ý€GæéˆûÆÑö†6¬c0뢹¾â¬t¶ýG°PEJ¨±™ì°Æ&­³I¡ðcïÀ…KÏ0M&„ó:TTè0ï²ãÿkï~šJ÷þÑóô‰ONâƒI&!$>˜dÇhÌr‚qB‚f !:¦)f0ãP#¨Gp¢ g»ÈŒíwÏglfèѱ8öT­ŽˆtpØÒÙ»|¥ñ.ÃiÅåP~§"-ë}ºJÑò»(…¶¼_w®=,¨ÞÎP×{]×õù4 ,x–Àüv-vlÚƒÒêŸC[€gÆ]4vGv^^rÞđР¾Y¶’‹°<ÇÝÒ½ØoèŽí°M«ÃÛmö‡P¤©pþª–æVX­­h¶¡N…4Å6­}¹†ï…À{ÐiÂÉ Üƒõ(Þ¼;øÐL^3•†TE >Nÿ*Î!"äÇ`íi|¶Ôßg©†ÏN£vÝZeùàŸáºGÕàXi¨¹+ïÒ ÏŸ„úæUTÚØošæYƒ°9Ïóçx±äÃŽI¼j{7Ò®Ã&Ñš€óîñ9gîBcË—håSÝD%9 ط϶µp†¾ˆ÷<zàÐçcËL¯Íœt$Þ;ŠÌ¯Ñ:ÊâR‰o £–SØœö%,î… ²LÁ~E»¾‚uM·$ÊgñL¨(üe5Ïæ­¬ú&|ÓÈÆ'‘’ºõØvµ nM€X{i;up¬ñ I¼‹Ã3EŸÂ†"-W#êXàÇГ«¨¸jį¶ ½YÅô¡ÿyú9‡§E¬M Ó)(Ï\œw–ðí+såAkg5Õ›6'á2£¼YÞÚ7a“hµLâ¥ñ d7{uËô-ÝCkxΊ֜¯MÂIhšºg·ªè4C{{÷Wi ®æŸ¡.)€RUˆ2í}´±µÄÆ0›úSì[rÛxÍQnÉg’ æÃ©P¤Ak~‚ön¹õ_/ºÛŸÀ¬-Bº"û ]ëpFÝÈ“ª“¨¶´ÀjŸ¹—õa8¢í¯¼Ž{NäNŸÙL΀²ä2®=hCô¼™‡Jž>¼bev ³6aÓø9R³ö/Pâ;|äᘱ3¶ DÄ¢@ØÌË3âeð'—®Æj”þù%˜Úå[œ†Bä1l½#ùŒ•Âá2r^<¹ÿ_ …Ï}ø¯ö2L1QÊž¢aªK= ­hóL<EL>«§\f»}$gþ(ÖIî'¨\è\îºWŸü<z“FCK/¼R €ºþ€kEápzûÿá3lIý{ƒg67#5ûʯQ§;…ãruc¢5›~ =}Š>äˆO+¾Íýû„ZtÍ»YŒ¢]E¥_ÁÑ "šO>ƒs›’þ6Ý œ\QÒ¢CqÖ–ÀÛµ/eŸ—±±À¤'ð‘w#±Z`Bê…ùÔEŸ†·>‘Çáè_IÛöÙܸä{É9œ´ô‡®2ŒæòãÐw³•R|’à÷ùÿ+ßÏza5iQVxJåA–}Cc×€Z„¼Ã≼8ñÒ“·£ØÒúÂJL@lúÂu+^:Ÿá‰ù‡ÐªçfìÔ=çâ½±~g6¥¿ÐÖãM¼ãA°Ïæ<®v´¹Ù†Ì>›DïÇk‡^•¥Î6 f…Ì-È*þ×5n3l®ÜTô{>Æá»Mø¥h;vhŸ¦ä1È݈šûÝs&Š^t˜L°E|¾Ž}67¼ñß¡‘{V.ôý–€åÈÚµöçù¦à¹]œ¤Wv´¹yo‹ÌœæsÈ+¬€ÎÜ ÇŠúð®ɋῆƒû–7ýï¦Ê?µÁ›Kî­éÇhëw8u͸N“¼ýè=œßÓëwfóÒ äì¹û¤I¼£Û2qôÁ ¾9WŠ}6‰Ö†¯¶{WPZpÊOfB¦–™òñkÚ/AÈWN´›+ðéA>ÛuwÛèõ Œ)‹¶™ÚŽKdNÙg“ßñ`ë“+ÿ¬‡30ÿycòOÔW „”ÒÀÏó°­Ç#LEù8siîb?öhŸa2ð⃓ضí$ˆ<g¼ùïµ½¡ê’ÃÈ/QÃ`yûw~ݸï£8÷8Ý]<iOð–oÏÿ '¢´éÇP“€Ý9Ç¡ŒÐÖÙœÀï÷Ýy(?<¾ŽÕu)Ö­ó™Í30vO0l¾E'@áƒgŠ6$O'ì/ænÅbåç÷&C´ÞCUé( L 6ßÙ”C‡ò=jÓßú·ð·Ô¿aSàZ±G®XÛƒ%šQVªÃ­ðÂP70ÙÜýìbŸMš!ùä5¡Xã‚Q•lö?o¾v̈î)†Í•“àó¸`{Xò%òÏë`nv =Ž øDXMߣ<g° vRòNä—©¡>Q�µ-ÒòÖÙ‡hGÑßaE½A’|T%7áˆly”6 žÙŒw°ù÷ÒF,~›0ÖxgØÜxÄÛ(Ržš³êVùYzG3±íè}ˆüñ¦àÛðPw…¸R~™ÛhWjÞÊæiܲõàÕp n=ïE÷_s'Øc°W•&j‘µ»gŸMzCÞŠßh‚N-ß—5УM_ç÷@?ž6wÇæ6ö„ø™Ñï@³ù Î(ูgÎ5ÊçÆáÛüO©ü;¤<¿Áb|Ájø UQX®C­}€ÉhYk6‡íõÁ§À¦fWà-» fÓ#ØÜ<�ÿÞæµ>™­O6¨À{C5ÓÏoÖU~fØ\5’÷%Z«4¬Fû.üϠݱ-öÏlе¨2ÚC­BÃõ æÒL$G¼*É>›4½VX¨R©bJŒÏ×¹€LX+A‹kµÿ«E»b’îúz´-ó×Ùßö�wë<ö Àví+h~ë‚g"’ï±îÚb¤¤ä¢ôªÅ9¹Pfe@¥k‹¢G³Ö¤@Ш¥ »ÊÀéõc²Ë€¼”UXŒ•­ÞÄÞË`-Š>3À¹è_ô×pŠPÄ2ÔÏPš;fŽìSÔqí;š‚wd4ö«Ñ.vdA‘ ¡u(ô¢°ÏæÆæmƒ6ûC(ÒT8ÕKs+¬ÖV4[Œ¸z^…4Å6­}¹N+œ0ÑPŒ`Åtä(•8•ŠMçQ/rq 2òѱãÈ)¾¶£hîwêåp=8ôM¹Ð¶GÒjGnݳ3Ti6ðñå*4  Ýp§Ì.îÌ E­AØ”›Ÿœ.ã-õÁR²›T5pú^Ãe8É^RïKúúÝ»PRëZàɺüõJÒöAç`èØpÜO`jšó`¥Õ3‰(HüjÝãÙmOšnàìÙûxɧ ùáû)lNû÷ëÐçÂMÁë4¡h×W°®Ç=zê9t;· [ø-l5sÃí×pøè=ôñm9læÏ(5o¬G«,?<Ž{ŠB™ S+œ]ÿÂ5uÌréeùÐg>ŽOƒçÎå6>•¨´ŽLÏíÿQ Ûk¾Ahak6'Ð¥?‰ ‹õ‘©UîóvÂtì,Ì}Üvö~&!š"E‘‰Bí<iïžÞÞÕ-÷<ú…é`Ó~œ\@Þx-yõL" YðÌæºõ(ˆ´’¬»5O–|íTÇ}\ð (Åùáû§Ø·äù\Oà5G¡µ‡®×PpKûßapÍyŸK=0¨.Ã*Oפq ,”iZ lÞù –‘ð}´.óÕÓÿý‚äÂÒ5›Ò góÊpÕðt—K‘Ÿ±ÉÙÿ€e%«ÖÞ6TÓÃ!w’¬ÇÉý_£QÓ aŸiZÔ„ÍÀÜÓjk`’û2Î>†{âOX®ÈçÖ«¼w‚‘þBSågHY X(¸ýeã¼úmåÌ`õÌKPí>‰kVϤHù0æ™ü7}»%”ÌB+›­õÐlÃVµ-²s¦‹>�  l)©Ç ßC HÊevtÉ+c¥ë³ëK†M£Â>õ´¾yŸ7¡¾º;UZü&_?½…³§îs•sQ|##›õß'6¦Ïú=„æ‘ÐU€o�íÆsØw¸]ámx–$ï˜kÂÃ6ù÷™€X~zÛõ¶ÊõY§¸°&a3ÈçA¿'pxÃz'®é½Û1܆¶¬*¥ªÂ/ñ­á º= óÖ¢Õ3O¬ìŒ-kªK=[Žâîo£(eÏú¬JPt-é'q·;ÂïwXû”[W‹‘±iŠ¯Þœý@H÷mèç¼-É[Ïᤥ?t½a4—Ÿ>z´Ö$'ŒyráùïóYCq�ú.>ÄŽˆ¯Žz5r7}Œ"}œÁ9ÙHà{|zíW6·pZgÇìYAà=iùWlïúpcÃÝí°¯{%eŠek6çñÀZY ƒ“g ß ‹’Ðb¬žiGmyÖ ªgÒr$ï0^¹Ú`.ÏÃAe.v•ÞF»«?Ô0›†ø 4†¶ÙŸÄ•}Ÿ½¯à˜€ÇaDIƇHÎ:ˆ"¡"ß+ÇøïМºçBßs¹x”åÈÚ¥ƒc]޾La´ñ 4=sÞçsÇ ß÷Y°½Sø·1ˆÖk(J;¼öÛN%7Ï@¾¶®°Bl’ˈ v, (Zƒ°)Á븂´Í >!Sdœ‚ÁÚËmgïhÊiÆ©¼"”ëÌhv¸ùß‘ÞZlË^ò~hy&l•xáÐåÿ»nJMÅß’¶ 5õƒÀõ‡Ø£ïLÝ(aH~øüKß`—=oé~¡0éŠQb„Ãø=Å:Å' <C/¢Ä6ÝúäÊ?ëá ߺ8ù'ê+!¯°—ÖóˆQïsZšäó-¾­ÞÛFS-­è_‡À>s¬M‘š‹ßB«—‡ÎÁÝ8=k6åñYH+ü&¸uèíV¡ë”9(Öýø¸öan÷|g’ýöß`PŸB~þ)¨ Ø\£\¹ÚèÄû´uagoäцŽWÃðò©ôª™·²Yò3lο0ÌÞt‰%TM}ÞÛYc™ó–ò y½ýmþG¹²°¼íÁ¸T ñ·Õ£ÞÍ9Q|òA4ic{מ¯¶{:”ÊUiÏB×ü’óEŠª5YÙô‰õ¨üê1ܳ~�B¨æ"̼¡®.ß(\¶:T—Ž}ùç¡37ÃÑïå^ú(ð^›ÿ÷ËgÕ ÀÐÉ.«Èo×bG Ïl&2ÉiÀþÌb\½öÐ4Xp«döç–:o)ÞA™îùü¿{m0?âÊfâ“‹ÿÄKFz7ò÷8IÉÙ(Ò˜`åYF¢µ;³¹ä¶Š É놣ù.ªÎDîñ»l²ÑxŸãFÁ(Z‘WW ­a½Ôè½H^ŒŒÈuX6Qù¬_c_°¿\¸A4–îAQ­Ù„Rz ïÿÎm\¡ ²Ð=yÖXŒ´:ßãÛ?ÀØÙ»¥畟 »ø*¶‰ëÿsaè_ÐV|ã¯6ô Í,BHð ü…w;IýOñCéa(óK è…cxnB¢ùÖ±@­ wjÛÆB‹ðÛa¾Û=ÿi:%4¿M­i…І¯ºÆÏÂAì,þ.ð± 탑M’‰68©ïŽ3ãeؤLòX¡ÉNޏõ‰4lÇCùï¡©.¹O§ OÌwðÐÖÇûó† ‡Í¹mMb£-Æ[ð1ì@ƒ¡ ‚ ÎÜ‚.Š _\‘Rí-Õ¢ªx/2”çQmq`x½Ž±x0 Ç‘“*×PIAºò$Ô×îÂx©8ÂÝ8ò±¸O’ø÷¸q‰\¤nɃ¦‰Ûpii ›ñN4¡ ç.-¸gz\*V¢€ç6ß ÔWjñ«{ö¿í N˜_†®ˆ(2^8EHË8„ÒK{kù±éI[J>ôŽÛŒZP²ëjc&;`ÈKErÖœ)8ÌvDB¬‡Í… :²_÷»óYÕÈο|ð8[ /JǦ´ƒŒÿ…{B§äí…µæ,²SÒµ7ÉI©(^²ÏŒI¼ Ü÷zB©§àÿNGBcæƒkZÃf¼‹¨Ix2” ›+ ­¢ ¸m·¡))€Ry…å:<tŒD<ÉòÛ¾*¸Wîmw[6å ‰H.TlG´,6¥”š'fÞEë6¥^˜ 5œãä��F­IDAT2¡Tÿò¶È \€°Ý€£Çî¡?JV,6 Ïàl5AS”vòœl ²Š®¢y΃ൊ®\j`{ù"Ø’)"“¨9ýZGÃörø:Qóåu8«+…aØŒwâCè,î°ÉÎüfoŸ¬Ñ;“Æ!ZïC§–whq­ö?+:÷<Õu‡*áÏÎ:Td~ª\;§© Ç̽\HxòÏç£È3:§¿×“N4ê*P¨*@‰úÚåªü‰»Aut}Â¦Ï aŸÝs߈r V][}¥Åù1ôï&Ø_ûáíŽÇj6‡ü+R÷áLÕ=XëÓ- Ø*/ø^3Àbs{¥J£M¨<Š(õÁÝø Šó?EZöYÔ¼i[8 —AÃsÆ´(†Íx7¯â(Ã&Ѫ“FЮ;„”$’3áô»±-ç3äT£Ýɉ̀7¿‡¼5± îQ8-º@p½Œkֆ̈́7U‹Ü „Ú?ÂÚß„Œ?ƒþØ1” ?ÃæY‡BRR7 G*Ñ8vFÓ7ÇݳÈÜo€“oÐÈs°"¤g}ZÅÜŒ4ù¬æÃ¶u/È' =AÅî\äÙƒT…~sqBР\™ÂÚ¿B¯ZŠ}µ§±óÀç8’ …|/Lß ¥2»Ë,‹·|¢ a3¡L ßQuîGH+ªF³Ó˜¼H˜hpˆa“ˆèÉ­Oö)>D¶ºC>)ôωI»Ç Ý+Š>xú‚« ´AÉ-ÊÚÚኹ²Õò™ÍkPmICÖe DìEz²IŠÝZYL.2rØ”[ŸìDp M]CϬ/ÉãÀ¯÷šÐíñÃ'¶àv‹ˆI 6‹jùH€ª†HÏKcpý«Žñ×ðˆÿƒæ×¿‡éÛ/¢yœïZÃf¼›u&o Þá>ˆ¢¯ÐW|ŠkEŸðÌ&Ñ{VwNʃÁ5½ê36{à±~lž·¤ˆøá®¯GÛ2 áþ¶zÔ¯[rù,_3jÔ§/ŸK.«‚¹}€ïI<‹¤>XJv!}o2OÊÛöCŸü9=ý}^Ñj«ûh´×ñ ù zÞ¾+¤ /Þ;&šƒa3Þ‰÷!,Ú  Ý÷QÛh…£?6*É âÅ‹¡+"¢81þ;Ô™û µO·šòY¤~ü1RÛQbéãªE@^õ:Žœâ ³*ÆÏPœs|«iÁèœ7óTÇ}\·†®hi~ô=x€ß—{ ÐñO‡ÖàÂè¯øò\Cà{úî_«PR\ ÍoÏðßÐvþ¤”<hZ#½M K¯DJz ¼W¼ÓsB€ÎÜ ‡èy3•<}xéÑÚ6ã]°­\ÙLÓ›ÃÚ±ëý¯ÿ…'N„®ˆˆâ…ŸØ„.k`°ÀgS#5uJkžÍ?{G´ ÐËPÁ˜ÅGþ:…MŒÊäþ<ŠP1«ÐËh òÊæ9_½9«¿õìqW‹ÏÁ´ßcÑ !´³Ío×bǦ½8qj¶ðÌÙ ÛÃïP˜}µVÆ•<m¸.Tã©ë/ôØ,0|{ù)÷Èf¤fA¹î.WŸÆñˆÎ€ÒFÁ°ïÄÐípÙ-¨>Ÿ‡Œìèbà úBäUÍ™^‡#ôY"¢8àn@Í“¹E|¼è0™`ãY%Šˆ6c¹Ï¦ ¦â|k¸õ64(ÌØâk¿£ŸoóÄØ…ÁG¨¼.·[š@·þ3(TF¼tÞÂÙ7½2%LÚ«qaáPòb`NaJ래u(ÿB.>ôv[<McØŒwág6å²å{Ï@WUŒìŒ<œ¯þŽá°ªrëL^Õœ¹Ñru“ˆâÊ¢=¹–"ëas ½®9…€¤<«R⣃·àŒ½gØ1(ð=¾ý= Ï{Cõ3½xnø·×â{,uãæEœãrK­Ø©{Ž)ÿ3T8‡»ŽÁÀŸV›:œŒ¨®Çâg6ß’àó¼B(¨$𯰙Hä°™o„üËîÄSý1lÛ´*Á›{}Ïl†¯jÎ ®nQÜï ¸PÛ­p·`ø¶™%¸f ïuL´˜¦ÜÃR) ùMu•õ › ^¡±òJ®µq»xD|pVU¡n™oŸ¯® Uεø‡* §(Bí–äÿŸ~ 5]B†Bn]"Ÿ¿Ì†ÚI5ZžÙ¤wð™H‚aóΧ0iŽ"K¾È}²ŽáJó_ë: _Õœ\Ý$¢¸á}×Àìɡ䱡*7=ˆhÑgßC&õ·£¥{ºð%29lEžÑ9ýóxÒ‰F] ƒöï }80A÷É+PGc'lÒ ÉßãX+%/@  ÖJ¤žÀ\±ÖôŠÓ?øÏÂ3›ô.6ãÝ ö1HÞ>Øk Ü sò§3WpÏê\÷~n ­jÎ ®nQ¼’Ü ¨<\Škí#‘=Ìï¡\¸‹f«Ö°Ñ¢?ŽO…û°Ú_°ÿfB›‚ǪEn† BíóW ÇŸAìJ…ŸaópÏj|’Ãf,šk ]ëж‚÷ÏlÒJ1lÆ;Ñ„ü™- ˜"M…óÕ‡83Ñ>|\ÅœòŸsæcy;ц°è¹Ï™¡@rö?`c£UE‰o®¶v¸b½|<½9lžFyóHèz!~ŒX~Âx\½–Fà0"• ù% uAà™Mša3Þ'/)È(¨Ä­¦N ÇÁSqyRED´áˆ¿@­ÿ®9C^ÔžÇ5ø±Ëñ�Â…:¸9SK@~¸ëëѶÌq6[=êÝëqæMD}­=ð§\ÊÚj›à]Ñ\rØœ[j>il#q·‹ÁAËEä•^Á ÃåÒCÈHþÙõ¹#ƒ–ÀY¼ïC0tnoñƒa“ˆ6$O'ì/æ¯Zú&|Ó(Oß%øPžYV”G,žç 炱@‰âK ý¹BãÒ ä˜±”YØŒOX/W…³ ܯ†žÁXv‡ ˆÞk8ëw} 0ÿ¾La 7šŸö‡.ÖÃ&% ß¼«õTªú=ÉH)zÀ•Í„ëçùaS™¼ÀŸgÎPÊUïiaò÷øsdjŸÅ\ø’<í0i4ÐÃÖ3øfûk䫬¯á¬ sŒ‡®C¤>XþQ ÛkÞ´haœõÇ;ñJНàÖ›rüóÇ­«¥(1EÒCimÈ?¬ˆˆϪAÁŠv—LbØÑ�ƒö+êan?þ0Ñúo8Ø6 AÉAä$JC× DcéÉu ›wt Ï ¢ù‚õíûûM‹5ZØ<¶Q˜½ ûÊkÐC篧ºôØ›±Ÿ¦nÌÃä¶'J”¨¯ãžöKü£y8ôª¥IC¿áìî#Ð6:ÃÎjNÂeÐÄHÁ#ŠEœõÇ»e NÈ#ʈö® ùÏDDW¼Ïq£`ó؅C+Dïr=pÜ(Dš"ü×€Œ²:žyÚ"Ùb¹ž}6_cdxNqA†Íw4ïÐ ¸Ö;lN ¿Û9ý@KÝôj¬=-xpí2J”H܇çPë‹ ¨žö¡Jù�©9ÇP¡Õã–¾‡WÃ1É{-Œ³þx'þ¡mV±‰yã¹šÛ ›DDïÊoSckZ!´·fïùY8ˆÅß>6á¡}pÉÉšÔgFÁGyP×Úà õ¼“ÛVµÎà˜¹7‚‰Å7?kOã3C÷âßk©†ÏN£vp½W·%øúŸ£^ý6¥ƒ¾ùÏéV-Í(?İ7kQ¸)Å–™£T~øf=ØšÂXc%¾Pëqµòg´Gr ¼7Ü6Ü öˆU!¿´ͬ MKà¬?Þ9 P×-Ub;À×�uUGèbý1lQÜñ½@}¥¿ºg¯8ùmßàÿúÿzCWKóY¿Æ¾úÏI.Tá«G”°¤n=v§Aí‚“ó ˆµg¶SG ´Ù”¼Ãx5óкߟ·ÖkÇÆ3›ñCêGÓų¸Ö9çœå~ ÖüßøÚ½¡ëeø^¢Ywùʃ(,Ó.Ðú„h>ÎúãhBAÎ \Z¨j\h\*V¢€Ûh‰ˆV&0-Â1”ž#8“üðùÃgV“ú行ðL¼ä¼‰# |³² Á7üwK÷bÿR«]”8$̇S¡H/‚Öüíݽ0׋îö'0k‹®H ¼º°>Y3ð~ô-¶¢*ÁÛý¦ÚFXý|0Oäû˜æû`ÿÞ™.G¬Ö£±ö´…û—é :c/‡±)%ðújôßBgF:Tº¶éUo¢EpÖïxf“ˆ(:‚[Ð’°©°³KºÈE~,ÐïFòŠî¯8ôùØ’š…J%”9éÓç¥2¿Fë(‹m’û *sÿ6çç´<Öûü® &Á'Ï'9pVì Þof¿çR®<£#’V-òyâ]ؾ;Ã7�›þ Nš]|XF‹â¬?ÞÂæ¡òf,µ[^i„îÃ&ÑÊL‡Ã”?àÙ°ÜÈ <d*œU íõËVr&^ƒ«ùg¨K  T¢L{íCìP·1HðûüÁI¹$oI5iQVxÊà–Äo`hìZç"¹õIJà}}“5‚‚WW¤´ëaÿ…:tНÐ:7¹)Œ6–c¯îùì•w¶>¡epÖïæVŠ[ˆ4Žá‘ס‹õǰIDñcnÛ}T•A¾rW(d–@gq„Z–Ì-¸A´˜ 8ÍçWX¹Ž~oŒ­¹p[kF§ë,Õç¡ÌØ‹bÝC´‰s*ÔRüðØÑØÞÖ$p?k½Êª:t[,MÁ;2ù¹Kù èW—qïeh‰Ã'ÂúøwØn|ËÖ'´(Îúã]$a3Æ0lQü LÊÄßq¯ª En4¼CØt7 æÉÀœ‰»&lU¤D W ¶7Ô@]rù%j,o«¯¯ð3›ò–É”êþ‰âìO <_ ‹cg5ãhÂáš"<oîSr5ÙV\;{Ú[ÿD~ÊÇ(m}-€ÙfyZ d|ˆ”<ºØú„ÁY¼“ÏlfVÁGÉ6‰(žIÞÀdë¡¥GQ~åRäÛh=c¿%–>®m8I¿ÇÛÃj”(‘^s³ý1±}5¬ß§oΧzmKFšJ€ÑÖÇÐ/Âî9ŠÔ=ø¢ü{µ¡gÈ I‡Øöƪ´ ½ë™qù=<ˆan¹¦%pÖï<ÿ®ðSdì+‡¡UŒ‹�òMˆ(湟Àl ],@„E•„õÎÐ'–!ÞAq¡†7}:oÁðm22KpÍæfØÜЦàíw Ù|g”pÜÜ3û\Üš“Ãæh5iP”µeúÁHr6Š®4ÁÍ7k|p×A{¯7_ ý^vgíÃÞÔÍï¥\è$Ô×îÂxé4tŽÈZŸHýOñCéa(óK è…#x–hiœõ'É;ˆW|lqaØ$¢¸°èJdøØŠ¢ÚW‘Eï+¸fߥ% U¹é8h\ïpAÑ燻¾mË,"ùÛà®s=šä÷ãß¼–¼è·?‚ZùQè=¾©9§QuÏ gLl÷¥wá³~Anq"Í0W#+YøþnCiãìzÛ ƒMý RrÏ£úÆU'r‘º%š¦—\é¦%qÖOkNþáEDóÄ{(/¯ž^…ü©9© ܸZ•4âÖÕbd¾çª¤än@åáR\káÊfÂóA4GNñ…{bO (Î9¾NÅV\0悬ô”驨<«ù°Mdãþ 9M¸XÓ ýðtÞBÉÑjØú#y¸!÷Ù,Â~COè^%ŸcoþèQhlüÑ¢8ë§5ǰIDq!l%ÒoûªðþrAƒh,ÝËó–!9læO¹%Gþú…M¹õIÆa·šÐÅ-’‰Er£ñ –ž°‡èÖŸ„` ]/c²5§¿›ÝØ×‰š/¯ÃÁA´ÎúiÍÉ?L‰ˆâÉ”ã¨hÂhØ|jz l`rgÁi½ÂæŸ` ßG+¯&ªa}ó +̳æ\0 &8ÙÊ'aIžg0}‚mÊs¸Zó�M Í߉|óËÐ+–⃻ñ犴쳨±ö†Bë$\ [ŸÐ¢8ë§5ǰIDqGî/W±i9ÇP.¸Tú9²åB)ùÐ;<¡-E‚odc³²\,…Í^<0ÿo,}¤Ô‹Žæ6 …®(ùá°èPªÌ@rÒd•Ü„=Øss9>ôÕžÆÎŸãHv*rÏáô½P*s°»Ì‚A>£ EpÖOkŽa“ˆâ’4Šî_¯A(.L°¢°¼¿vr -½_?õjänúEú&8ƒþ4—Ÿ^¿•Í’R\½5S-yqë ŠKî@ ý Š'p[kPQxªÂ èjíZé*¶4׿šá ø?h~pê%Ò·_D3{Ó"8ë§5ǰIDDžäÅð+¢(x|c­×P”vxÏl&F/9”F†Í8$¹ (e+rJ¿…¶ø3ä(³¦úí­jÊüðØï@£Ö½íÕ9óùW}ð0kÒ"8ë§5'ÿ°""Š;rtë}èÔrÕP-®Õþ"›™Ó H>ßâÛT½Ýh4Õ¢ÑÚþu97éÂmσáw±Ñƒæ†Í8ä³ HÞ©ƒ#pËšnƒÒ¡öœ<ubDo· téÿŽŒ½ÙHUÈfzuþ íI W6iQœõÓšcØ$¢¸# ]w)ò9¥ŒC8ýÅnlËù ¹Õ+X ÍѤ…ÁYýµ×*uÃ2Å®FP§6Àº¢ø!õ™Qð©Ýr&¬ÃÙʧ‡ƒ–oqÅÙ¹sÉÓSÕ-X]/àhþ×Ô'¡ ¶Êù�eàäÃ7Z�gý´æ6‰(ÞHNö)>D¶º%xÎÉgU#ßèĤ]‡ã†îÈÏmÊÅ9nB+÷TÔ^Gí›ŠŽ”øB­O’³Q¤1Á*ŽÇØy_ŒJ_ ïû9g\:œW6ã’íUç sŒËÉ–“‡!4¾À¸Óˆ £+ôšø}˜µð. ¢ñüI¨o^E¥¡-`‰f㬟ÖÃ&Å¿M­Iy0¸¦{N‡Íx¬_#;ÒÖ'Ò+4œý$¬Šã~d¥¦ £¬âºl›¤µ›·€±³vK5Î+?AvñU<lcäÏl&<ß <~Ø„|bÊ2>|OwEØg3ðkú;`µu¢Ö ¦ýÏ;ÐÏ[-‚³~Zsò+"¢¸2þ;Ô™û µ/åóO©ŒTÅv”Xú"Z¡šrè°S±7¸šð&\øÑ®/ÆQsoŒ­rQ4„ŸÙôY¿ÆÞR-ªŠ÷"CyÕ†×õ¡C lÐ<±ÄŸArâ{Ȱ™áq¸möHvŒÃ®Ý=ýÀ!y'ò˾Á" ꄹÒ'o`´ÎúiÍ1lQü‘WšðÃe Öølj¤¦îCiͳˆ«0úíZìÈ5À5çõ’Ë�UhuTÁW97„éÕqyû¢g ôE騔v‚ñ¿p¯Ë{`nÏÏ…ø16<ÙJ>ÅÉ×óïU5Vú7®Thq§Öp9r¯a9|~Xæ ?<Ž'xìáƒ3š…³~Zs ›D´I+4{Bý¨V«uz4סº8*í£àõSãEœâ*ç† ›†gp¶š )ÊF²<i—›ì]E³{=â\$a“âUðaWÒnhíïwªRòôáÕLQ4É‹þ+êk~A›ç,ÅÛ‘R\¡é¯qÖOkŽa“ˆ6"é¥y›BçÞ–Š=zt±¨còcèßM°¿öÃÛÿÕ*lžùž§îÙª{°:×sÕP>³ùÙ›­â”`ZÙô>‡áä9‘U£•«r;Ì_£H¥B~‰¦9Î$ï(FX‘–æà¬ŸÖœüƒ•ˆhã@ãWߣ±w¡þ…a£ßÃmŠ I®F[„ô¬C«˜›‘&ŸÕ|Ø#ýZ‡aÓCv†冧,Zµ¬(lÊmR."¯ô .—BFòGÈ®¨ç{…–ÄY?­9†M"ŠK«Ð¶dɦþ”àfZŸìDp M]C±ùPAòb¨ç h¬—«Â HIð =ƒ±ì :0]§›h>ÎúiÍ1lQÜY¶%žNØ_L„.fLâUÛs¸9¯ß�aÓ¤…Áé ]Å“×pÖÓ}:ÃÉ=;ÿQ ÛkÞÄhaœõÓšcØ$¢x³*mKÄÛ(RžÂ¥Yò/ 8'oúœœôŽfbÛÑû9oK@~ô=x€ß—YÚöw<ÅÓ!®S쑆~ÃÙÝG mt†íꘄˠQäæZgýDDDËX•¶%¢ªÔ,P*¡œ5òpÌØ‰)†Í'¯lžCñÕ›0‹Œ›¸Z|&NÜ)&ùáiÿª”šs Z=né+qøp5“¼iÑÂ6‰ˆˆ–±*mK†ÚÐÜÁ-”WèÌf°8ÐR#Ÿ«D´ú|ýpXÛÐÑï}ÏÖJ|nîé*P(W¥-­F³8÷x�Ñ[ ›DDDË`Ûz°yû{ž÷.\…88zñÜð=n3lÒ*›î³)ß§R‘ß,°õôÁi¾‚çëЫ–âÇГ«¨¸jį¶ ½© <q0¸»ƒh! ›DDDËZ…¶%î'0µ ÍYUð¢Ãd‚mœ[ПΪ*Ô-3+÷ÕU¡ÊÉ©;­2i�­Whîü‚»:'rÒ †Ï(oäqàñcÇì>œ³Hð:îA8‘‹TEà×%g@Yr×ÜÄ¥¿;Ó"6‰ˆˆ"ðÞmKD#”a« oÇv”XúÞskÅ>yíqä_+5wÈ£Žs-E‡äÁ«WžÐ½f Þþ?`­7ÁÜ6€!Ëi¤¤œ†eÙâT_'¶¢¦ìS¤¤~‚½é)HÚ| –Qné …1lÒ:àóNpËÅi¢õ>tj9hq­ö?+kÆ/šQVªÃ­ð‚070ÙÜ › g6i ý ÚŠïaüÕ†ž¡™s›ùØÀ_Ó=U%/FFVpžSƒ«ñ×­xéêe_VZÃ&­¬•¥ì5FDñCA»îRä>›‡pú‹ÝØ–ór ªÑî‰p½s¼ÝÍm}>{U Ô¶ÑÐ5%.9lžnY\œ#–Ÿp‡a“V›×³p9©›!ŸÛLWž„úÚ]/CkŸÓ;sApšÏA• jù¼§k4ðŽöc´ùŸ8¦·ƒ3:Z Ã&E‘¼¿ÿ ÒäÛü§·ŠŒS0X{Ãz5Å&ÉiÀ>ŇÈV·`È'ÁgU#ßèĤ]‡ã†îÈVÄZTí³ÏxºžÁ\š‰äPûJdrØ,…`õ„®¶l ¢÷ y{a­9‹ì”4díMGrR*Š-ý¡¯.Å¡&»sáHv*I›‘šsÂwç¡üð8jyh“ưIQ4›: i…ßÌÞ6f¼A™ƒbÝÏëaæ Šˆb›ß¦ÆÖ¤<\Ó+“Óa³ë×ÈŽ4(.vfS‘ ¡u(ô"J\‘…M¢è›‚×Õ€+B l/_À5Ië ¾±t5=DË«qx\6X j”ä« *¹ Wh ›E“XʯÃ=롚‹0»2‰(NŒÿuæ>hícÁKŸU@êÇ#U±‚â>â/Pë¿íÓ)¦8{ö>^r%kÃæçÈÔ>ÃÜÍÔDÑ6å4㔪�%j,6<{Ž4Ú„Êc×# Š>ô™‹°Y‘Ã7ÚÉÆ["Ã&Eݼ ŽÒœ¦ë¨cØ$¢¸!?<k—50X೩‘šº¥5Ï–h0Ç‚g6'Э/@¹7²ÀJql Û(ÌÞ…}å5he#|ZCÒÐTìÎEþ‘=ÁÖ%ŠÔ\œ4(Wf °ö¯Ð«–â…ãÇË0ö†Þ·¾—hÖE¾ê84 ½‘íî  ‰a“ÖH`¢æqÂzï Î{;±ÚÅï+¸æß³¤þv´tO¯v.k¡•ÍÖzè ¶a«Úö~mU(ŽLÁ;éÖE¢Õ"?0kÁí“lÔ%PªJapD²µ{ ¶ 0÷yáuýr+’™(üö*„ƒØú„ŰIÑ%yÑoÿ 7„ÃÈHVnLÛ¡<ÿ~Ò\åÊ&ÅñÊ…»hŠÑ¢?ŽO…û°Ú_·¥-i‘3›Šô“¸ÛÍMiD=’§&:ãcØzßgŒ¼ •„É.òRs¹à}ë ö‘ÀgÇ`ÿ®Ša“ŰIQäÇ`ÃylS&T©!›Ð5ÚBæ÷G”ˆ(n,VÜçÍP 9û°,µ5RüCÛìj´âÀò!•ˆè=Mué±7c> ¶> ܯҕ(Q_Ç=í—øGópèUË‘àîÍÖ‰~¹Çðx;n΀"C Ñ"6)Êä“Ý—(,Õáa›¯o†ïq›Ûh‰(^È[`õ¿Ã5+(ŠxQ{tÖàÇ.ÇêæD #ùáósBFDë@Ýôj¬=-xpí2J”HN’[ÑC­s,0c{yÞØÛØÑ¢6iøá±_GAêHNþ�I<³IDñD¼ý¿FC3&Ñ{í8Ž5¸&\ƒ (Ϭ„u©[›4Ñz:µ�AÐâZí Ê+DDQç‡oÖNŠ)Œ5Vâ µW+FÛ8#­>†MŠ*ÉÛ{C ÔEÙÓOÏÒT8_ý�M÷~AËÏlQœo£Hy —9$ÎŒ (ÎÉ›n‡â¯ m§ý?ñŸÅ²£4‚vÝ!¤È[Ø2áô»±-ç3äT£ÝÃû!­=©¿Ïûù🢇a“¢h¢åräóŠLݰaˆg“ˆ(‰F¨R³p@©„rÖÈÃ1c'¦¤?ð6sïB\ä6'9 اøÙê–à½ÐgU#ßèĤ]‡ã†îwÜÂFDD»6)ú|£pÙêP]^„¼Â ¨~ø_t6ÿ†se“ˆâÅPš;¼¡‹wã·©±5)×t¡´é°Ùõkd Vö©#¢Ƴ™ôn6iMMo«ý å¹Çyf“ˆ6–ñß¡ÎÜ7½í6ÀgúñÇHUlG‰¥+›DÃ|è3a³"‡o´ƒÍš(R ›ESð<ŽsÏ/IÁVg…‹Çˆ(^¸ŸÀÔ24'zÑa2ÁqQ >± ?\ÖÀ`€Ï¦Fjê>”Ö<ƒ‡·C"Ši^8~¼ co¨½“ï%šug‘¯:MC/wfТ6)Š|M§ <s1¬ F`\:œ=W`Ÿ” ‰÷qt[&Ž>xÁ§úD»í³ÉUI"ÚÆ`û§�sŸ^×oÐ(·ëq~{ÂÁ °Œ²ª6-Œa“¢(6Ÿ#5kÿœ‚ò8c÷Ã&ÅñÊË«a4ߎ— Ú}×lîÈî_«²:JD´$Lv—¢>hS¤Ÿ€Á>øììßU1lÒ¢6)Šüzú¬DDñn¼ÝMöy+0ɪ:¡u(t½ ®ŽQ\“àîÍÖ‰~¹?ðx;n΀"CFÑ"6)ê$o/¬÷~„ZÞB«­ÅîæÞ~"Š/b-ªŒvˆ¢øv¸ì¨-ÏBr¤•dWcu”ˆ(¦°J--a“¢Jò´A§Ú|z¯ö¨Û‹ôäTä:0w€ˆ(f-¶*™¼ZÛhèEËXÕQ"¢õ"ÀaþE*òK40Y{2iY ›EèÒ€B±õðø¦ïH’·¦cgaîãú&Å ñ>mZ­VXߌ6tô{#_‘\ÕQ"¢uáÇ å"òJ¯À`Ðáré!d$„ìŠzˆ¡ùÑB6)ŠÆ`SïBR®®Y÷¡I¸ '!X=¡k"¢7ô;ŸÏí,7‰WmÏáŽtžµ«£DDëÂëå*4OÌÜð$ø†žÁXv‡¹[–À°IQ$a²óöí¨„u¦Ò¢÷9 ÅŸ"us!W6‰(~ˆ·Q¤<…Kámœ„ (ÎɃÖ>¸Ý½Àƒ£™Øvô>ÄÅÂçj¬Ž­‹×pÖÐ9æ<t“ú`ùG5l¯y£…1lR”Mb¨Ý MÅ7¨íÜ ä°yò$�Q|PÏÏm㔇cÆNLE6}£cyn"ŠOÒÐo8»û´Î°³šòn5 Œ"gu´0†M""¢å µ¡¹Ãº㛀7ÂóJÒ°å ´¦¸&%Hž.<1ßÁC[¾QðÃÓþ#T) 5ç*´zÜÒWâðáj8÷4¢…0lRÔÍn}rµ¬^FD ÂgÕ ÀÐYXµ d×9Ô:Ç MvÀ—Šä¬#8Sp˜Õh‰(NHð¹m¸§«@¡\•¶´ÍâDèkDó1lRT½m}’‚Œüø"+9ÊÏP kƒ‡“ˆâ…÷9nì€b¡?Š](1´B”›œ/Áoû*ý©š\Õñ ¶lʇÁé…ä2@Åj´DD”€6)Š^Ãi8…"êÖþÀDÊ«P £8{UE`’õ:ô:"¢Øæ·©±5­Ú[Få­°¡ñ³p;‹¿ |lÂCûà’…~¦º®ãPÅ#üÙY‡ŠÌ±¥¤ƒÒœ¦23÷²H%†MŠ¢¹­Of¦;ð϶>!¢øá{úJ-~uÏ^ôÛ®à„ùeèjÒÚu‡’”EFÜ£pZt„˸f`Ø$"¢„ðIQ$aܦAæÎ*؃Çå°™Ó·B±å ,ƒ¬ÊHDqÂÓ »k>x$\aŸÍ <ýð° :m� ›e›¯ã²pÖ¡QØÔÙHÍ9‹ûŸâQüX>›DDD Ã&ÑrV£Ï¦¼:úbnÕÆwY%""Š ›DDDËY¬ÏæJpu”ˆˆ6†M""¢ˆLbØÑ�ƒö+êanîÄðJÎ^®Æê(Qaؤ(’àííÅÀ¼I“ýmÿA·—³)"Š8n"MÞcód”ÕAŒ4p®Æê(Qaؤ(òA4UBø¥ V«5l4B_øwµ­°»FÙÈœˆbžÔgFÁGyP×ÚàòLßµ$oÚ gØ#“ˆˆh ›E°iÌ[XhlAvE}ä+DDëÀgýûôÌ •’Ë�•`]ÁC³÷ÜŠKDDG6)ŠaóöèŸ9!ŠbØèDméQèl/;á¨ÕàB­È•"ŠY’ó&ŽT4`ðM0”à~Ž»¥{±ßÐáýk¶âņMŠ¢)xž?Ç‹©Ðå^8jªÑ8ä|<‰ÁÆ È\ÑÊ�ÑZ E}>¶ÌøÉIGr ,*2¿Fë¨|/[·âÑFðIÑç„£á&´‚�µÎŒæ®¡7ÁrªK=Š4qe“ˆb4WóÏP—@©*D™ö>Ú‡&C_\ÞêmÅ%""Š ›]Þç¸Q°Š7[ÆCñ Êê_LO¬|"¬O:àaÒ$¢Xæ~SËМ èE‡ÉÛxd7°ÕÙŠKDD?6)Š|è3á#¥µ6<Á Ö¼ým0= sŸãQœP†?4{3¶£ÄÒaP|ÿ­¸DDDñ„a“¢È«púî‰ÐõŒI¸ '!X=¡k"¢'ÞCyy5ŒFãÛqãT»OâšÍùªä{nÅ%""Š' ›E¯á4”¢¢±/ì,’\öÿJ3 `p¾}Žˆ(Æ÷¢û¯¹¡p öªZ‡B×DDDŽa“¢Ëk‡^µ ©Yû¡T@Nz äRÿ™B Fy@‰ˆâ…X‹*£}v'—µåYHŽ´¸Ï*œû$""Š' ›u’׉æ5JòUP~ ­ù†ØSŽˆâÉbg6“÷Ck ½h«rˆ(~0lRùá®»'s _LuÀt݆ñÐ%QÌïCÐÖ¡Õj…õÍhCG¿7ò¸Zç>‰ˆˆâÃ&E‘¢1§ø±å ,ƒ¬¾HDqÂ7Šá±÷¼gñÜ'm0 ›E°i:‹Âo {’ÿ¾-ÌBfñuØúÙú„ˆ6Õ8÷IDDG6)Š$x{{10ko˜žgß#÷£#0:ç¶D!"J`«qˆ(Ž0lÒóÁݨÁá’ŸÐîá6Z"Ú@VãÜ'QaØ$""ŠˆÜ'¸íWÔ?ÂÜ܉á•TÖ^sŸDDDq„a“ˆˆhY8n"M¾öd”ÕAŒ0pJÃv<”Ï®›Zàš” yºðÄ|m}<¯IDD ‰a“ˆˆhRŸåA]kƒË3 %oÚ gpÌÜÙ6ØQ JvC­s Òd y©HÎ:‚3‡Y–ˆˆÃ&E‘Ãöú`ZS³ “rq î&˜M`s³8ÅŸõkìÓÿ1/TJ.TV’õÛ¾*ø{ø1h9ƒ-›òapzWô{ņMŠ¢)ŒZʰ«ìœ^?&» ÈKùY…Å(PiÐê™ ½Žˆ(¶IΛ8RÑ€Á7[f%ø†Ÿãné^ì7tG´²9Õu‡*áÏÎ:Td~ˆ-%õ”Æà4•E¾:JDDG6)ŠÆ`SŸ„¾{BÞƒKÉvlRÕÀé{ —á$«'ô:"¢XçCŸ-©Y8 TB™“Žä¤$(2¿Fëh„E¤´ë!EþuhpÂiÑA.ãšu€a“ˆˆÃ&EѺô'Qaq ³þ"2ÛQbéƒäí„éØY˜û¸iŒˆâˆ4WóÏP—@©*D™ö>Ú‡&C_Œ”žþxVRÅ–ˆˆ(N1lRTIž6èT[§«6ž} ÷ÄŸ°\ù ‚pÖ!¶� ¢8á}×ÀüdR;ZºÇBWDDDŽa“¢ÏçA¿‡Å/ˆ(~‰÷P.ÜE³Õ kØhÑǧÂ}Xí/Y­”0ù¢=ÞÀ×|"¬÷àððAm ›E~¸ënãɒ發è0™`ç–2"Ša¢Ê7ý5 $gÿq~¥mI|ˆÞtÀcSckàu[Õ¶ÀÝ‘ˆˆ(ñ1lRùó³ü&esGè,gèWÅñ¨õ¿Ã%ŠÃÆ‹Úó8 ³?v9@¸P÷¼›™žvÊT»’VˆG#"¢a“¢(6Mʺìµ9=ná†p»‹¯à֛ϙpßæfØ$¢Øåé„ýÅüUK¿Ã„oÝ$øPžY +Ï 1lRIïéÁ_sSää3TT³Ï&%Ž©è÷$#¥èÁ+›DDDÃ&E‘âk0÷ÌÞv&vþ‚²m™ì³ID d¢õß,þCDD†a“¢h±3› $ï®bQ "о xÙ3“ˆˆhA ›E°yûŸÐ>þ÷¬VVûŸòr -Å?ŸUƒCgànGDDDs1lRIðõ·ãáÿ«PõËôö²`Ÿ¹zØÜó mÅ,ïsÜ(Øż¡Ø…C+D>D#""š…a“¢h]úP(R‘µ7iFôtÞÂÁÙWÐ.79'"Š~¹GfZ!´·fªhOŸ…ƒØYü]°ªöCû «j…aؤ(‡]›ƒÝú?亴èÔ—¢Ò:ü¼CwZûøôˈˆbïê+µøÕ={ìßv'Ì/CWð ÂÑpZA€ ½ŽZk/øÜˆˆÃ&E•ä®Ç¹ ¿bPžLZpꔣ>7š…V£%¢øán@Mã_ðùO†S÷qÝ6ºZ€ô g?B.’–¾Jå~d¥¦ £¬"‹ Qbؤ(š€óîq¤)8ã´åK4Žò|Å ÑåÜûؼ¡À–’úé‡k ˜rè°S±Bã‹·«™¾A´ë‹qÔÜË-¸DD”p6)Š&ñÒø2ƒç™ÂÎ9™¢ÅéáÄŠˆâ‡xååÕ³ïe7.Aµ»WÃÏqÞ·¡‘››ß®ÅŽ\\s¾.¹ P Ö`E[il#\å$"¢Á°I«Ì÷£ZX'B“%_/žÜÿ/†ÂçNS0]·'6‰(nŒ÷¢û¯ÉÐÅŒ1Ø«N@h ]/MòX¡ÙsêG-o[A5סº8*í£àõSãEœâ*'%†MZe>ˆÆü¶—Í[ÎÀ2èý"¢'>„Îì€(ŠaãP[–‰äЪär¤—FämZà~8g(öèÑÅSDD”�6i•¦I@ùO·`4ÞÂOåûð‘òn¼ÙzvW‹w#³ø:lýlƒNDqb±3›Éû¡]ª(Ð,hüê{4ö†ÖF¿'¢ðJDDë6i•Iðööb ¸l 6õIè»'‚_yc¬¥©\Ù$¢8"Þ‡ ­CëÌö×à°£gÈ»¢-¯’ÏÞùˆˆh£`ؤ(ò¡;†ŠæðFç~xž}ÜMél}BDñcèw4>Ÿ{Ò|¯ÚžÃÍ–DDD bؤ¨’†ž "ócäœ8A¸ˆÒ/ö U¡@ŠêìdNDñB¼"å)\„À½lf\@qN´ö±ÀÍîÍĶ£÷!.zk›€Ø|já{ÜsŒ@’¯­uxhëã¶Y""JH ›u’§¿êç« T¡¼ú1º=ÜHFDqD4B•š…J%”³FŽ;1AØœêÒcb3R³v#=­Æ;Œ·"I‘ m;wzQâaØ$""ZÎPš;¼¡‹wì³¹[nIÂdçu©|ŠqHð9~Ä!í3žå$"¢„ðIQ'y{a½÷#Ôò¶3íuÔZ{Á´DO¤a;ʵM-pMJ<]xb¾³²-°’˹ˡâhý°œºË膚+‘aû""¢x°IQ%yÚ SmERR 2òOà‹¬ ä(?C® N"Š£”ì:‡Zç¤ÉòR‘œug Ch ½hiSÎÛø<móüö)I;PÚ8zQâ`ؤ(z §á Ѝ[ûáƒV¡Fqöª œ¯C¯#"Šm~Û7Péÿ€?-g°eS~àæ…ä2@᪤ôÒˆ¼ÌbèÞô–ÇmÔ¶üɇoDD”6)Šä>›»”k€+8‘š ›îÀ? Øú„ˆâÆT×uªx„?;ëP‘ù!¶”ÔcPƒÓT†cæÞ{mN@|òÖ¡9§3}ðú˜6‰ˆ(ñ0lRI·i¹³ öIy"%‡Íl|œ¾Š-gBç–ˆˆâ€4‚vÝ!¤$%A‘Q÷(œá2®Y" › óY5(0tòÌ&%†MŠ2¹¯Üu\nÂ:4 ›:©9gQc—{ÌÅ<ýð¼ë*¤÷9nì€bÞ™ÍÀPìB‰¡¢w*ôb""¢øÇ°IDD´ü65¶¦B{+ü̦? ±³ø»ÀÇ&<´òA% †M""¢µà{úJ-~uÏÞ0ë·]Á óËÐQâ`Ø$""Z+’>?×.‰ˆhc`ؤèò½Dó5 „ª_àðø×"¬÷ëasO„^@D¯¤À-®º:1t½ù û ¨…ïqÏ!Ÿ[\[ëðÐÖÇâ@DD”6)Š&Ð¥?�…"Y{3V`DOç-LQ@‘}í^>Ý'¢8$Cl«CõyÒÉP]¡/,mªK=ŠÍHÍÚô´"{ì0ÜŠ$E.´ílEDD‰‡a“¢hvmv¡£S_ŠJëHðóÝihíãÓ/#"Šy|Ãh2jP”µII $g…úǯ ÜŽ,lúíZìØ­G·$a²ó:ŽT> Ü ¿¯ãGÒ>›AQ¢aؤ¨’Üõ8wáW Ê‹˜£œ:eÁ¨Ïf¡�‚•Oò‰(>LußÀþd’iÈ9s÷¬½nÎÆ1<òzúEË‘DXÎ]õî‡åÔEXF'0Ô\‰lÁÊ­´DD”p6)Š&à¼{iŠzÊmù£ì'GDñˆ‡ÕåÈW€ÆØG¿Ò Âæ”ó6>OÛ<ÿ~˜´¥¡W%†MŠ¢I¼4~Ì`ÿ¸°¾r¦‡hqzÀ›D—|Cèj2BSrùÇ¿@©)²m´ÒK#ò2‹¡ ¿o£¶åOxxC$"¢İIÑåëÅ“ûÿÅ'RD”p¦àuþ²²j´OÁ:ÄÓ™DD´10lRùá~t-cs¶ËNuÀtÝ–"¢øÁ¶%DDD+ŰIQäƒhÌ_à|R`l9*’ADûض„ˆˆhå6)ŠaÓ$ ü§[aç“ná†p»‹¯ÃÖÏõ�"Šl[BDD´r ›EÆ{zð×Üóš“ÏPuPV«ÑQœ`Û""¢cؤ(òA¼ó#ŒôBÅ7Ãåøå;Ùg“ˆâÛ–­Ã&EÑbg6HÞ]Û8KÔQ|`Û""¢•cؤ( „ÍÛÿ„öñ¿aµZß['ú½ÜBKDñäýÛ–HÃv<”Cª©®I ’§ OÌwXÑ–ˆˆÃ&E‘ßÈ0F†h0TA¾‚öZ-¬¢\Vƒˆ(ޏPód`νˋ“)ò]£”ì:‡Zç¤ÉòR‘œug Ch ½ˆˆˆ(q0lRTIîÇ8›ñ’’Ržs�ÊYHÝô Êê_ðI>ÅÑå¼#òØŽK_DÐü¶o Òÿx­ƒ–3ز)§’Ë�‹ Qbؤ(ò¡Ë"û+4¾YÍ”ànƒþp)Ì}œZQœï ¸PÛóš·`ø¶™%¸fsG6§º®ãPÅ#üÙY‡ŠÌ±¥¤ƒÒœ¦23÷Fô{ņMŠ¢qص¹È5ôÌ™DMÂe8ªFëÇØð(ŸèQló¾‚k`öJòØP•›ŽƒÆDt ]A»îR’’ È¨@ƒ{N‹‚p׬s·èÅ?†MŠ"?<¶o°gŸZg µ¢¹þGï̇ö·§ë&Ï^à*'Å6O'ì/&BÓ$÷#Lú?PþldAÑOÿ�<>FK""J| ›E“xi<ŒMóÎ8Íb¾#²•"¢õ ÞF‘ò. „7ãŠsò µ’ç <8š‰mGïC\iŽôMÀËðIDD ˆa“¢kô ¾Ò4 W!.:^¡ßÕM"Ša¢ªÔ,P*¡œ5òpÌØ‰©÷›>«†N' "¢„ðIQ&Áç{÷¾tDD1a¨ ÍÞÐÅ;ò>Ç‚P,´ÃC± %†VˆìALDD „a“ˆˆhY›o@-|{ùŒfàÚZ‡‡¶¾ˆW$ý65¶¦B{k¦¢íôøY8ˆÅß>6á¡}…‚ˆˆ(a0l-cªK=ŠÍHÍÚô´"{ì0ÜŠ$E.´íreíø^ ¾R‹_ݳã©ßv'Ì/CWDDD‰ƒa“ˆˆh~»;vëÑ-I˜ì¼Ž#•O!wö9~Ä!í3D|X@òÃççÚ%m ›eÉØ° †*ÂWÐ^«…U”§hDDqDa9w–A9VöÃrê",£j®D¶`]AqŸI ;`Ð~Aý#ÌÍf%Z""JP ›U’û1Îf|€¤¤¤ç€ò@R7}‚²ú¬¼HDqcÊyŸ§mž_Ø'iJB¯ZŽŽ…HS„ÿúQV‘“ˆˆÃ&E‘]Ù_¡ñÍj¦¼ÒÙýáR˜û7‰(>H/ÈË,†.¬°Ñxµ-ÂaN”úÌ(ø(êZ\¡vO’·í†38fîåŽ""J8 ›Eã°ks‘kè™3‰š„Ëp‚U.ªáÇØð(W9‰(ÆM@|òÖ¡woåä³~}ú?æ…JÉe€jE[q‰ˆˆâÃ&E‘Û7سOG­VX­òhEsý(Þ™íoO×M0ž½ÀUN"Š{S÷qÝ6ºšOrÞđР¾Ù2+ïôxŽ»¥{±ßÐÍ•M""J8 ›E“xi<ŒM³Î7-4>Ä}ØÊœˆb–ÔKÉöî_áC-%õ\45zàÐçcKj(•Pæ¤#9ðë™_£uôÝWL‰ˆˆbÃ&E×è|¥i@¯(B\t¼BèüQ,’œìÏ,ÆÕ[ag6o\‚jwÉìÏÝ·¡©%Ji ®æŸ¡.)€RUˆ2í}´M†¾HDD”X6)Šü¶?‚ÁPS³ “ò¶Úî&˜M`sO„^CDû>o9ˆÆÒ=(ª¹–ˆˆh ›ESµ”aWÙ8½~Lv—ò² ‹Q Ò ÕóD¤¾{8vÌŒ—a-J$šìdlUÛÑ&Xwjž Ì ¦^t˜L°3®Qâaؤ(ƒM}úî‰7ç6©jàô½«FKD¼p‹–q¥—åÇ“ºI)ùÐ;"¼—‰F(çó”Çv”Xú¸:JDD ‡a“¢h]ú“¨°8ÐY™ŠÐ„ÊÛ Ó±³¬@KDqfnÛmhäó–ʃ(,×á¡c$ò(ÞAq¡†™óÆ[0|[„ŒÌ\³¹6‰ˆ(á0lRTIž6èT[‘”ô2Î>†{âOX®|A¸ñ^ýꈈ֔§öKŸ5—^ÙÑæ^â!š÷\³¿.yl¨ÊMÇAc+rQÂaؤ(š‚çùs¼xíA¿çmÃré/´µqËÅñ6Š”§pI ,2.ïÇí3¬¤¶¬än@åáR\k_Á )Qœ`ؤ(òA4‚òÌÅÙ“²K'³ç ì“$ñ>ŽnËÄÑ/8Ñ"¢Ø%¡šé¹Ô8fD7—(‰ˆˆ‚6)ŠaÓø9R³ö/0);c÷Ã&Ň¡64wxCïjbó ¨…ïq/xÖ3pm­ÃC[ßÛDDD „a“¢È¡§OÑÁ£™D”¤ñ@8¼ZÞ¥¡ÅµÚÿ@ôF¾Œ9Õ¥ÇÅf¤fíFzZŒ=vnE’"ÚvVç&"¢ÄðIQ›O~€ÆÒï̲¥ä«Í «µýaýꈈbš4‚vÝ!¤$)œq§¿Øm9Ÿ!· ížÈž¨ùíZìØ­G·$a²ó:ŽT>Å8$ø?âöYd½:‰ˆˆâÃ&E‘¼6IIC®ðb0\úàq6B“[£ÈcD$§û"[Ý‚¡À½ÌgU#ßèĤ]‡ã†îÈŽH",ç.Ã2(ÇÊ~XN]„etC͕ȬÜJKDD ‡a“¢H›'©Ê”MHQ~ƒ&QnàU(eØ$¢¸á·©±5)×t­Ùé°Ùõ눃â”ó6>OÛŒ¤¤¤9cJB¯"""J ›ErØ,…`õÀ'>F¹I)yÐ4ýš6‰(žŒÿuæ>hícÁKŸU@êÇ#U±%–ÈZ9I/ÈË,†Îh„ñ͸ږ?áá©""J@ ›EoÃæôåK4iò’ô’“3lQ‘à›ðÃe Öølj¤¦îCiͳÅ ˆOÁ:ÄÓ™DD´10lRÉa³¹j ýÞГÿÀd«ákä¦0lÑà‡§ý'œ<ú-Äqx\À,(4‰áî6Xm=f±4""JP ›E|ý°Z­°:úÃÎ4MÁûê%8Á"¢D7ÕýžT䔇ªKEØ›¢€"³?}Ÿ”àyMRT?F\Ñ–ˆˆ(ž0lRÔIÞ^Xïýµ @Ð^G­µ÷m+"¢Dæ6#óqÔú!uë±;)·þkÄçû<°uApÔkpª&жDDDq„a“¢Jò´A§ÚФ¤däŸÀYÈQ~†] bQâP& °ú¦‹ %¦Ñz †ž·ár¬å_³õ %†MŠ¢×pB¡ÈºUÞF;Óòdöª œ¯C¯#"JPþgÐfžCã˜Ü›36?¬@³ÇÝ᣸¬ÿFÃw8¯ÌE[ŸQbؤ(ƒM½ I¹¸‚ðg¦;ðÏ‚·Uj‰ˆ–Nc*,½´œÂæZØý~x·Qž›Eòv¤§~΂iDD”6)Š$ŒÛ4ÈÜYû¤œ6å°™Ó·B±å ,ƒ,ˆAD€4»ñ ΣÆ>2çl¦Žšj4² % †Mв ˆÍ×qY¸ ëÐ(lêl¤æœ]`ÂEDDDDD‰„a“¢Èa{=ŒF#LÍ.LÊý溛`6=‚Í=z Ñ"C´Þ‡N-@´¸VûˆÞ©Ð‰ˆˆ Ã&EÑF-eØUö�N¯“]ä¥|„¬Âb¨4hõp‚EDˆ4‚vÝ!¤$)œq§¿Øm9Ÿ!· š}6‰ˆ(!1lRÉ‚NBß=˜dõÁR²›T5pú^Ãe8ÉAD´¡HNö)>D¶ºC>¹:­ùF'&í:7°Ï&%†MŠ¢ téO¢Ââ@gýEd*¶£ÄÒÉÛ Ó±³0÷±ú"m~›[“ò`pM¯§Ãf<Ö¯‘-°Ï&%†MŠ*ÉÓj+’’>@ÆÙÇpOü Ë•¯ 7`eõE"ÚHƇ:s´ö±à¥Üw3õã‘:ó .øY""¢ÄÁ°IÑçó ¿ßçöD´ÁIð‰Møá²ë�|65RS÷¡´æ<LšDD”€6‰ˆˆˆˆˆhÕ1lE„ÉèñJ€O„õ~¬<KDDÃ&QIâCüó¦ž` ¶ªm`Ü$"¢€a“ˆˆ(ªüð´P¦Ú…”´BÜp°ím ›DDDDDD´ê6‰ˆˆˆˆˆhÕ1lѪcØ$"""""¢UǰIDDDDDD«Ža“ˆˆˆˆˆˆVÃ&­:†M""""""Zu ›DDDkbbó ¨…ïqÏ1I¾¶Öá¡­¾Ð+ˆˆˆ Ã&јêÒcb3R³v#=­Æ;Œ·"I‘ m»'ô*""¢ÄÁ°IDD´üv-vìÖ£[’0ÙyG*Ÿb|ŽqHû þÐ눈ˆÃ&ÑZDXÎ]†ePŽ•ý°œºË膚+‘-X¹•–ˆˆÃ&јrÞÆçi›‘””4gì@iã@èUDDD‰ƒa“ˆˆh H/ÈË,†Îh„ñ͸ږ?á‘B/"""J ›DDDkbâ“G°ñt&m ›DDDkÁý¦–!Ì^Äô¢Ãd‚mœK›DD”x6‰ˆˆÖ‚h„rÞyMylG‰¥oN%""Š ›DDDkA¼‡òòê°óšqãT»OâšÍͰIDD ‡a“ˆˆh-Œ÷¢û¯ÉÐÅŒ1Ø«N@h ]%†M""¢µ Ö¢Êh‡(Šo‡ËŽÚò,$³Ï&% †M""¢µ°Ø™ÍäýÐÚFC/"""J ›DDDkA¼A[‡V«Ö7£ ý^ž×$"¢„İIDD´|£cM""Ú86‰ˆˆˆˆˆhÕ1l­ß  7¡Ú먵öÂË=´DD” 6‰ˆˆÖ‚ô g?"Iäô½P*÷#+5eu}LœDD”x6‰ˆˆÖÀ”C‡Š½_¼]Íô ¢]_Œ£æ^ ""¢„ðIDD´üv-väàš“*%—ªPŸMil#\å$"¢Á°IDD´$š=¡~Ôò¶õIsª‹s Ò> ^?5^Ä)®rQ‚`Ø$""ZÒK#ò6%!)i顨£G×TèÅ1†M""¢51€Æ¯¾Gc¯Q\bô{‚[j‰ˆˆâÃ&Ñ‘|>øC%:†M""""""Zu ›DDDDDD´ê6‰ˆˆˆˆˆhÕ1lѪcØ$"""""¢UǰIDDDDDD«Ža“ˆˆˆˆˆˆVÃ&­:†M""""""Zu ›DDDDDD´ê6‰ˆˆˆˆˆhÕ1lѪcØ$"""""¢UǰIDDDDDD«Ža“ˆˆˆˆˆˆVÃ&­2àÿ¦E®qƒs����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_read_vars_for_each_element.png���������������0000664�0000000�0000000�00000330346�15030617045�0030520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��0��ß���,L���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýÿOÓ÷þ?þóôy'þ`²„ðÃ’CøÁÅ,ðf ï ™!ÆiúªfÌf@Í@÷X¦¸kÜà}´xfŸG κÑW謓Î#œ€G»³ò–†Se­ØÍ"ßÞ…W‘Âãúy<J‘R ´Ð/^/'3‹´Þûè½÷Çýö¸ßï·{ˆˆˆˆˆˆ‚ )"""""R 0DDDDD¤ `ˆˆˆˆˆH1À‘b0€!"""""Å`�CDDDDDŠÁ�†ˆˆˆˆˆƒ )"""""R 0DDDDD”R«CÀQJ1€!"""""Å`�CDDDDDŠÁ�†ˆˆˆˆˆƒ )"""""R 0DDDDD¤ `ˆˆˆˆM@`Ćhµç k2ÃꙫixïÝÆÃñ™Ðã™§0]µa"ôpek-‡$ü5ê¡oyˆ¾‘©ÐßÅb=v"ÞÉBŸèêzg¹HNÀ)˜à½šüMb§. yÅ{¡Þ[ˆœ õ¡ßY^�cI°S¸èÈ>ËÐtè÷–·örð;®¡4wã‚2¨òO¢Õ3ú•¸a*/Á‰3Z1�Zâ8ó)Šw\„}Š!ŒRIõbµÀ¥•}1TEçÐöz´CÅèBãÁ*´¼ˆ%t“§¾m†Ñh ͸¦=€íWaŒå5Pa�-¥P×ý›{l6èüì6àð‘[xS¼á†Q“‡Â½j¨ÕË'`tÆ‘Ü0€!"""R¬ Øu»°ËÐ æLÁm8­Õ'þyã#¡€ *ýýø32@˜z‚†ýuxì[vBVHʰB»»ÎÈrý0h¾†5–8 ƒxÔéÿ%ZÏÀ)Ö4|¶óر»÷[aµJÇct¶^FŶèþùH|ÜcÍéeFAðüpÆßàñx^nÇ8•¿-|¬$åœ0|rmCak^CpܬAÁ‡¸b¡7""""ÅšÂsãAl;tR§néã-ìh|ºÄâö¥ÖÀ¨¹½¶‰X"‡D”CZÓMvnh ØNäeª¡Úí㡈‘z“IuiµÀ¥ÛX;ÎÕ?À@ØèÉâã ú–¹ñ7èîÿ;4r:l½ôÇ2},dÍåÌÀïîÄõºã(QïGYuZº_.3ý-šµf2#¹c�CDDD¤hb‡Ýç‚õÖeÔIY¶tWa¶Àó…øüÑQŒ¯yˆC|@’WŸ¬˜Ú9™ÌHîÀ)˜àë‚^³YìÔe!¿äS*ÌG±zJõ]ð¥rÞUà9:›ê¡møŸÈ<°Þn…Íkà0!Ë d‡QåR;'$“ÉTV‹ QZ½‚˰*U1êŠv¬Ú*=£°7ÔÂàzú½d›D_ã^±9(Ü™ÜR#ú{›±?KUÑEtÇ2$-âÿðT\ú.,s´š#~vwéÔÎ ÉdFrÇ�†ˆˆˆH±Æa«{» p;ísŒWüoiŒÄAJ£\Œí¿AÿÜÛX…³ÖÑàÏúÏ ³Ç°ŸÔàCÀxÛçØ\~ÞXFO˜ÉìÀ�†ˆˆˆH±ÄpÁV‚m ¡å¥�¦ïæm†*Ž]ôAð¶â‹Ó?cH*ƘÇ[0ð¢3Ö@Jšþu¤-Ïæœ #°ÕCµ¹¶˜Þ 3™ÑòÀ¥Ý$<Wñµö;X‡Ç`«+BNq ®ÛGרa0i5ãž7–Èa®›G‘«Š¶fås´Å’ÍL@ÀeDiî{(©úZíI|Zœ UÆfhíð‡~ke‰ÈdFë"""¢´àÀËE‘J�ƒ]ÿ3ÆTdÂàC\,{™‘ÁGF ŒžXºþÒ>0‡PPñ÷°µ*âaº‹‡._”Äx…©^ >ÔДÕBבÚd$3‰©ãsÀ¥U�ÓYhìX¸‡‹µ eAk~ û\6®%IëW¶cCQ®4‡Á�¤=öb`�í·Åpƒ�ü~ŽŸ¼¹QÇç1€!"""J+±suýð#Eµ­ð–Š,¤Lf±Ûпx¤d:€%ŸÿdÌ˨Vœ-½WÌÿMnd¹Ž$¢ŽÏc�CDDD”VbçîÆE4>qEìxß sÕaèmÏÄ?»à0×ã´Ù³8@ ;üCÿ‚öã èp…¿Æsôÿ1M![ŠÖ³U0¸bYÁâƒãZYôu4›_y VÏÄïa7²\QÇç1€!"""J«øzzðlÑy?ׯ mXZ€?…¡¶Ó(ÐZ— íáÖáŸ?b]=p˜;TùÇa°`ÙÙhÓ6ÔmÎC™îúÂilßk¡ÞV½ôç»vŒ,÷ÜÈr ÕñWCp<ø:­uútö=‡=æ:> QZ-À¢«ëEðnôL_#v¨rQ¾ÌÝiáÅm¯iÆ£k ¤ã)cšº%íGSˆÜ²óh>ŒW¡U£Bÿ½øçVØG–Ëh6 Oëœû9¢œb`Sÿé-xC—Å,×'®•n]d«ÞGuë³`ÀKŸÃ�†ˆˆˆ(­ð˜ŽC}BJ;¬?Î|Šâƒ{îú`‡o×Ï–éܽÂèÈJÓ³–# àiÅÙs÷#6œ›ú/ÑS*f‰ø:X7 nd¹ð¢¥o«ë`¶¹á Ô3ðvÁp¸-/Ä&àµýiLÙêÀ¥•´Àùcä~µZÚ¸1ü8£s‚ç6o)Àá;Ë0‰!X}ø!Ahªû ·zÄΨôØŠÛw»àc?7²\o¤ÍY¢Q¬Ë MÁm8Û&©aÀ¥Õ4†=ÂÓ5 ZÈÆÌS4îx ªœ÷±3/¥Æô?AVÆ[(Òuq#Ë7–”%¯ µm/Â>Ã)Œ8~@UA) ®W¡ŸÅ† QZMÃ{ï6ŽG,‚ƒÓU&BS"ðMõÐ6ü‡OŒ¨¤i=·[aóƘýkú t[Õ³wÚ§hüäo°Nâëô@àØ×CF«ã·£Q³%4Ò¸ÅyY2Óhb,Îa50DDDDi%M![bŒì° ¥ª×Êd¦ÊAáÎ|ä–ÑßÛŒýY*¨Š.¢;¦Í0ðZ¾Âi‹”|`c–/qÜâE`¸Ú¢s\€ÿ†ü.t^¯Ce‰š²Ï¡ky‚ᘧÎc�CDDD”VÒ"~-N}Û–ù«×´°½â*lƒ±ôú1Š#íæ_Œí¿‰ÁÇz«pÖ:ü¹Cÿtö^e¦7?ŽÈ4<TÈ®z€±Ð¯-æÁ½–.1„ZÚÌÓÛ¸j[úHÎÄúùÓ ´Eã«ed�CDDD”Vb¸Ðß?#oDO=AÃþ:<ö-Ú &ŠÄŒâÞV|qúg Ie³àøq Æ^tjKc[h-¸`Ü·3”ry>³Éü.iJÚ’Ü0ª3£—ÿõ!A•­³e#…Iì(#"""¢´;w?\†ñ·»”»?âTþ¶34I£8_¢êJxà ┡TkŠqg®›G£ï¢Ÿý9ÚÆb ¤f³Ý¶¾Œ3[˜¦SZ|,÷œ*΃ZÛ4ÿ^š/¢¢`;*š~Á ’êg Ê.|;ÿ™¿Å…²BÄ<Ê8 QZ-uwZ…Ìí °I‹àW´Ì(ÎGb|)<7;”ëdЇé.º|1$£è±{°hOÎ?ìèò.×IÇ€;”"YÚÍ_Ó±‘¥€ñ¶Ï‘Ã…àÀËŸÝ4|O¾Á®·?Ñc’ˆ0DDDDi%07þÝý/ÜAßÖ‹A,£’%Fqþ{U[ bßg#0€öÛ¿bxÕA‚¦òœ8¶!§xœ©ø;tOÄi ž;ǰeË1Üñ„mTn¦ú½Zt†¯—Fñ¤a/6dj™`ÝÀÛVƒ•ߢ{Ùé…‹1€!"""J«i wt '²'ü‰®.)›W,–ÅÉ€*ÿ\ŒëhÁ £&/´eÄqÄçL Lð|œAAî.|zê ´gªp¨(ªŒÍÐ4ÚãØK†Ö+0DDDDi%­8õ‰/ŒZhÏ|ŠâaŸb؉_Åi€þ_ÃFq£Ãð%jZ\âß¦Ê u:Åd­¦ásÞG£¶%bð£);+?÷ÂÇéc$b�CDDD”VÒèÉÇ¡ þ"G.NÀ蜌!€Yb Œð?8Š–© a<¸g²b<¢LL‰Ä�†ˆˆˆ(­¦1üèž.¶ðOÆ8zmÆŠÇÿ¼„Òì÷Qgý^²-•™))qÀÉ’Ö³U0¸bYõ±Ô˜MÈ;|ΩTEáéçŽ&h522AðÀzë2ê¤)’º«0[à_E`�CDDD”VüŽk(ÍÝ%�‘á‡aÅŽž4ó = ³y}1Žà$ŠýÎÁˆin¦ì—°_ûPü[zS ¾.è5›Å:…ü’Oq¨0Åê=(Õw޶‰ QZÃVWˆÜ²óh^0rqZuqhWûVØG–_/k\<?{kðß6uº1\HßÓ=ؼ±îÓáÆ -ø-<ˆò¸à0×"Ÿ)ß`¯à2ì‡JUŒºÇƒbPíƒU[£gö†Z\¯B¿0DDDDi%í^ߊ³çîûàN´ØÔ‰ïÚszÅfc–j¼W}.ÿ4¦ú Ø—õ6 Ë*Pª©1óRk`²±]÷+&B¿Eo)H» pëø\�ãÿ[û>E! `ˆˆˆˆÒj¾ž¸_EŒ ÄµL"HÌchtNŠÿö X*ßÁÍu¸¯à6‹±“éÆ ­÷Ï'ÛSïªÖ:Ðz!`ÂV‚m Á´à³LÞÍÛ Uö X†â ÒÀ¥U ûÀ$Â$ú¡Öâ@oë—(P½ƒJ‹@ù{a:Rc*æW™HaÐEÊ1 OçU|­ýÖá11X.BNq ®ÛGã®/ `ˆˆˆˆÒ*ûÀ$ÆüBëMȯ¹ïäï°\<'T×ÄNgª¦²-%�¿Ÿ‹h+ðMõÐ6ü‡O¬K¬·[ãX_5 QZ-µL¢ùñÔd‚mb…(àÃ`ʳ—Å `ÅÙRiJÇw”GÝÛ •*…;ó‘[jDo3ög© *ºˆî8ç2€!"""’ƒÀ¾ƒN«E¾}ÃqÂP+*³U‹ç#д°Ðsbφš‰àƒãZrUÑÊ¿ ù•×`õpšš²LÀ®+ÆöÆßÄÏm½U8k þÜ¡ÿ :{|éÀ¥›¿×J·BÞYW½êÖg1RšÚRT\ KÅÜŒkÚؾàg&ܶyãìüdz¡fLÛP·9eºë¡2‡ŽïµPo«€^úó];FÁ(ŠàmŧÆô¹Ypü¸c/:™…ŒˆˆˆHixÑRŽ·Õu0ÛÜð§HÍÀ?ØÃáXÏKYŽÎf 7Þ†ªÍ0{cyDl¨™“ð´^À¹Ÿ= -1°©ÿô¼¡‡¤$“pÝ<}T-ûs´Å’¢{"""¢´Z"øÀTé‹¥ ¨GZ\a#6ÓðÙΣHõêl㡟-'1j&†€@ ÝI(q¦ðÜx«Wâaº‹‡._œ#‚ `ˆˆˆˆÒLšþU…Ú¶aÁÇF? ª 4ö]ÊNKó‘_rg´gpêÓ]ÈQ©¥i‚#¦a¹l¨IëR`�m×M¸ÓruRšpÝuXìÞ§H.Ä�†ˆˆˆ(Ýüv4j¶„R)ïEq^¤ëÚ‡‹çötàl¦zT–h Ö”ã”þ§Ù”µqjÆM ¾À “Ò/ëÐdþ<þø¦Ñú3Ÿ¢;ªœBìUïD^föžŠ5&> `ˆˆˆˆd@ð»Ðy½.|hÊ>‡®å †—28�ïƒZäKk2óP¬Vcoa6äŸD«'Öý><øéú ÛÌS˜®Ú_î*JŸ¹4Ê;PÛÚZç%Õùx6IÇ�†ˆˆˆ(­¦á½wÇ#F)ÒÕI_K:ç™è·e£HûϰQ—)Œt7áàá[xS<æ†Q¹p¡w´#û,CœÖ¦ Òúª÷±Ë�÷‚:Ï:¯y `ˆˆˆˆÒJÚ‰¿Dôµ¦sž~ÝÖ`pGL úaÐ| «ô"ÂFF—[×ã†é”߆/ö66A«ù—¾ ûÙ]ØW³‚‚ROÀTovo= ëÜFªb]3T|€œe!"""R1€1iqêÛæ°ÎùÜ.WSØIO@:ga¶z v×ÝÁc«ÖàÑÖ+•ئÑáŸÒãGͨ9~{™Ñúƒ™©Ä°ýökŠKÊ4…áîÔמ‡Ù91À;†ú±ð…0€!"""J+ýýø3²C?õ ûëðØ—ªð Hç,¸`Ü—½p)ڡڋƾ¥ÖĸñƒÞŒ~ž×Ç�zÍŸcK¦vv‡Þh `ˆˆˆˆÒ*�Ï—aüm ¬ÃîÛñ#Nåo‹k}€à€õÖ\šÚ«0ǵñd"Ò9Ï`¬í"êÛú¼—ÅÇË× ¹[j L6¶ë~åÂ}Eš†÷§h[n:¤OM&Øæ¦˜-ƒ QZ-µF…Ìí 1uè$óij³_ò)æ£X½¥ú.øb b‘ÎY˜F`:Ö_ŽÆZ=î?ž›‚&ÿ½(Ž`Œäe©:y¼ƒJË‹ˆéƒ‹1€!"""J+±swãoÐÝÿwX‡]<l½Œyÿiôd?TªbÔ=_QšV£gö†ÚØ7í-ó(zìD–ZøÃŽ.o¬s¿^atdbÅN,)‰XÇ—\çuͯfÂm›— ‘¼ ŒŽb|M=öÈ4µsŒWüoiÜijWÏ Sy NœÑB+Mc g*>ÄÝL‰ÿóÜ9†-[ŽáŽ'Þí I¹»Î‹ ‘â‰D[= ¶5À>%õ¥�¦ïæm†*æTÌK¬Sˆk?7Œš<îUC­Ž8Žᜉ%€‰¾‘åÌÓÛ¸j ="e‘Öy5¡¥?b-Tï¨ÞRÀ}`ˆˆˆˆÞL“ðt^Å×Úï`ƒ­®9Å5¸nq:Ö2ëb‚ñ¨Ó)†Bk±Ô"~²+[1Û›!YYªnÅ·Îk""""IëjPváÛ°u ßâBY! bÞÆƒ{&ë¢épñž¸aª¨ÄCØz C=Êò·£¢é 2€Q ±nE[çeÿÃ1¯óšÇ�†ˆˆˆˆDüx¹ @˜†ïÉ7Øõö'0º–Ú·%\"FOÆ1àZ8j$ŒâIƒoïo†+UÛâP%b×<0DDDD´„�¼mõ8Xù-º}±L sÃT} WšçFp¤£ ÚÒ2hM¶Õž íìT6Å‘šÖ-0DDDD” >ô;#Öܘ²_ÂGu¿pJJ0DDDD4+ðMõÐ6ü‡4âðÀz»6o,ÓÇ$nüÐЂßÂ3My\øoK5¶djau+Zg¦1bo ŽÈ™:ݘ’¦&:;ÐbºGÝšÇ�†ˆˆˆHñ‘y}{¡Rå pg>rKèïmÆþ,TEÑÓ6øK­Ù„|íCÄž,W@`Ćhµõз<Dß÷Q®ŒYªñ^õ¸üÓ˜ê3`_ÖÛ(,«@©¦žûÀ½y‘yv]1¶7þ&†èm¬ÂYëhðçýgÐÙc ƒÜ¸Q׈…gš²¶ÁPs-Ïc½Ó.À︆ÒÜ Þ‡*ÿ$Z=ñß­'96Z=†F§øù /`©|4×á ¼‚ÛpŒûÀ½y‘Yì[z[ñÅéŸg³…Ypü¸c/:cÞÍ?Úñuø ´/bÄÐRZ�uݰ¹ÇÄw&ýÌÁn¹ÛkÌH£{ÇPkq ·õK¨ÞA¥å…ø±öÂt¤-/â›[È�†ˆˆˆHñ‘y®›G‘« ½™;²?GÛX,Ó|¢ÀüÿÔŒìÍu°Å2°B»»ÎEQP? š¯¹ŽF¡_ôšÍb}Ú„üšûðNþËÅsÐj¯Á:KŘÇ�†ˆˆˆh]Š7òž¡ âïa£8âaº‹‡.ߢQ•è–X£*À᛽â¿Á Ã'gÑ6öÛ!8nÖ àC\Q®€ƒƒ¾ÙQµ5`�CDDDD³h¿ý+†W$¸q£ÞˆžYÈþÀ /ž.«´¦ šì\îUC­Þ‰¼L•m‡öqÄ—¤p&­fÜór†ˆˆˆˆÒB@ _g4ºøÝ¸^w%êý(«n@K÷Ë5ß¹§ôâbÙ{ÈŒË(ÑÃ50DDDD+aÝM58\ÿOx¦Æàîy6»Û}`NÛ/°9‡ã ÄàÃó néë¡Õžƒ®É «g‚#'o4)ÃÝvl(ªÂ•æ°é‰Á)ŠípÆ”¢{"""¢7ØL_#vlÜ…SWp¦ìdelBÁ_/ã›}Ò‚kéùfhô]³AÍŠ¦áë¾ M– ™ÛPòÙÇ(ÜòԻʡïeóÆz—á vú×é�qV 0DDDDo¬ix[ac™C˜„³q2ÔüÚR‰ÝÚÛ°9àqÛѪ=ë®W¡ç,CZ€¿;ª¢z<žB0£X‰ž©'h8ú=࿱†þíÇÐá _õ½Æà§Qlf7ÀÌÔZÅ?ù`Õæ«±÷\0ãmõø*–}`¦m¨Ûœ‰]swÚçß¿¡-:·ÆÈc°¶´ÃzDJ"í³ªEë_¤ƒk`ˆˆˆˆ(Óv ªÚ0 `Þ:ÕŸã <‹Ææf.}õ¶S1î3[]1¶éžÌ¦L–˜œw—³ Ù•­³d®(€ÁÇz”åg-îìªÅ`(ô[¤,‹Û8^ÓŒG ö’ާŒs"""¢7YÀ ã±s°x`©Ø‚­bð1-ŒÂaªÅ.1ðÈ|÷]ähâÏÑù:h ¿`8`C]ÎW}{L{ш¦Ÿ@·5EUz4‡/öS›þЯ‘Ò¼ÂèÈrÉüxj2Á6±r0Ã�†ˆˆˆè 'øºa¬=ŒÒê(Æ´×Ï·c8ô0é‚ëh†Ma›#`:0½L˜äLjEe¶jñ¨Ú‚ãTZ^¬ø3€!"""¢ñàžÉŠñˆèÌÓÛ¸j =ZɆ:êñq};\ 6Ĵè»Ã)dŠ$e!+EAÅŰQµf\ÓÀö?3á¶ÍË�†ˆˆˆˆRÅ £:3ÊuUìk`fž¢qÇ[Q^C<¸F¡¤õUGÑèœ =oCÕæ ˜½\ÄODDDD«$ø`½uuZ-´º«0[û>ƒn˜Niñíë;êÒÑ­æCT4ý‚Á˜^'€-§QcìˆXì-ŽÁ87Õ$y>Óiq…}~ÓðÙΣHõêl㡟ņ  ¾.è5Ò–YÈ/ù‡ óQ¬ÞƒÒ˜7²ô¡ß91HÀ”ýökŠ£ÀFÆc\ôOÊ %‹(ÍëÕ œÑžÁ©Ow!G¥B–¦ îÄODDDD³ü“1ŽZHëöC¥*FÝci¤CšöS£gö†ZbÙÈnüÐЂß¬]qÁa®E~¦vûÀâ^ÀfªGe‰jM9Né‚#ÖìtaÀ­[br¶J >bI><[Ý{ÈØe€;xC|.€ñŠÿ-…6–,—\“íº_1ú­h¤ÑŸ¦cÇPÿ`�S¾gèqûÄðK ÀFúa³vÁ9™•Œ”i6C=þfq!–…¢a�CDDD¤xüŽk(ÍÝ%xÈ€*ÿ8 +®e0a«GÁ¶ا¤_”˜"¼›·ªì° År§ÜZ=î?^¸vÅöԻ¿=»SûÆâ“¸Òð%Êvþªíøë·þ¬PêݬÐwŠ¥$e› r3µÖU¯gb�CDDD¤xÒèI!rËÎGlþxZu1*ôß‹n…}d¥ džÎ«øZû¬ÃÒ®úEÈ)®Áu{¬ÃJ›.å9ZJòPfþSŒ£~Cãö¿@Ýü/´||�Ú;¿ÂéñÀíø ÚãÍp1‚Q80DDDD$† O+Ξ»ï‚¾ØÔ‰oŠÄ C°ß5‰ÁÒ-tºýâã18ÛoÃt· ÞÀr‘‡Ô©-œ¦°B›™ µ± ÆZch:›dm§.râ1€!"""¢!@ü¡ŠÏÏÄÿ—‚ +nÿìˆ1ãX4ƒ°TîEµ¹~a}†ƒÈÊ,BÙ‰¡Y6 ÙìºPÕ6 `¶âT§ýQüú š×péä>l«~€X·Ã$¹šÄ Ã†®à§Õa�CDDDôF›‚ç¶ßõ¾˜]ÄŸÿ¾¯MÛP§i‚Sì™ C­¨Ì~C/B? š¯—=ƒ'— Çj-ðŠÏ«Ø¸:û_L§ö G•…wóÞ…Æèý>)ÑÚöšÇ�†ˆˆˆèM'Œ¢ûêçм¿¹¥×âÞ—ã5iýZX~ÿ/Zk‹B‹ÿ§àƒ“#GnáŲ/; ŸÝ„Ú²C¨¾þdÑ(дÄómÞÐ#Ršµï14 %ˆ„t_†Fʦz5<˜týŒ‹Ò÷&+†W‘Ò%b¡y `ˆˆˆˆÖ³é�–]?Ÿp¾—ôqµ=ÍIÄCóÀ)’´èÞíÁjKt�/ñ«îk˜<© &FÑc÷,Ú PøÃŽ.o¬eðà§ë1¶\Ð5󦫶e7Æ$9IÄCóÀ)Ò4†ÌG±!ã/³û§„ ÁaÑ£¢0%0¦,€qÃT^‚g´ÐJÓÆBÇ™Š±C÷SR€;ǰeË1Üñ,µ³þR»ùG«èøR:­u¡y `ˆˆˆˆ”ÊoG£&j½ #Ò<±K6 +Î㪶7RÀ5y(Ü«†Zq1Â9[�c:¥Å· 6äl‚Vó!*.}ö³»° ršš2ÌÀ×Óƒg‘Cs Lᮞˆ}Œ¢c�CDDD¤d°ÝºˆªÒP¿?¸èaq Ín˜Ò50ƒxÔé\Å^4á|èwFÜ•0e¿„ýËî%Cò€Çtê_.™[xœFEñ>èì+§ðf�CDDD´ðXo¡¡êʵ×ð -L"¸ñƒÞŒ~ž×Ç�zÍŸcK¦–;ñ+’À?FNᇋGæûpÄØ»h U$0DDDDëÊ üž.ÜÕ× ´¬O}Â)d ÕÖCßò}#KM‹f©50ÙØ®û• ÷iÃái‚–,1€!"""Z§ÿs<n¨= Yà9:›ê¡møŸØÛ x`½Ý ›w2ô +àw\CiîÆÁ‡*ÿ$Z=±¾†7´zÜl…Õ:wüöþ¡UíÚNòÁø‰ˆˆˆhe1O!›D_ã^¨T9(Ü™ÜR#ú{›±?KUÑEtÇÒÓÐRZ�uݰ¹Çf§° ~ vpxÅøç¼ÂèÈDÜ™©HÞ¸?%ØìºbloüM &ÐÛX…³ÖÑàÏúÏ ³Ç0y+`…vw#œ‘R¡Í×\¿òÆâNüDDDD”‚·_œþCR�2fÁñ㌼èŒu·tÁ Ã'gÑ6¶æEJí|³àâ°ÊŠ;ñQÂMÂuó(rUá çCGöçh[)7”DZÓMvnh/˜ÈËT!CµÚÇCœöÆâNüDDDD”pSxn<„‚Š¿‡m)¦»xèòÅ|ÌÀïîÄõºã(QïGYuZº_ή‡¡7wâ'"""zÃMÃ{Ï ëä2Ý¿™§0]µÅžz80€öÛ¿bxÕC%Ü3Y1ñü™§·qÕ6zDo©®ÞÆÃñˆQ¼xëg""""E’6,Y<Ý+òXÅÕ[j²+[g×ÖÐh™ºÊ)dDDDDo ±ShÒâÔ·Í0›ñí©Ýx[}×^Oÿú—*¶£ â*lƒ±LàJÄ]r7L§´ø6| š± Z͇¨húƒ `ÞPR]ýUW¾«͸¦-C©ÖcýœÇ�†ˆˆˆH‘øð2HYžŽ¡Ñ±Yäxªrb½Ãˆ»ä>ô;#Ö4˜²_Â~íCño×"�¿Ÿ+i”IÀD?þŒ `§ž á£ °MÄÙ2€!"""R<?ú#¨í Ïô5 ß“o°kC^ŒijÃGtÂï’Àö˜GqÜø¡¡¿y<ð¼>\p˜k‘Ÿ©]Û>0+Ζ^‡+¶]9IVĺõÃe«¸ÿ{U[ ˜F™ˆˆˆèM$ ·£¶à]zZí—¨:´9*²4MpIJ‹þrwÉ÷×á±/–4ÊK­ÉÆvݯ1NCóÁq­,z:çŒMȯ¼«‡;õ+ËÒ£{ªüs1Ö­y `ˆˆˆˆÖ Á׋Ÿµ¨(Ñ@­)Ç©+÷áôź@z‰»äŽq*[ŒwÉݸ¡Õãþc+¬ÖùÃöÔ‹˜b(É´ u›óP¦»6$ßk¡ÞV½ôç»vŒ0‚Q±nÝh€þ_ÃêÅct¾DM‹KüÛø0€!""""ÑRwÉUÈÜÞã:…WYëèÈ$<­pîgÏÂ×›úOoÁzHJ²Äèžð?8Š–\ÄODDDDq“î’ÿ ºûÿ»K.¶^ úcœâ# Á~×£ñ:Ý~ññœí·aºÛo\kW©JýLÉmÆŠÇÿ¼„Òì÷Qgý^lÀ‘H FGmBŸAX*÷¢ÚÜ¿0>ÃAde¡ìÄÇЬ9 )×R£{›wøœSñU:0DDDD”ÒúMœbTjEeöÛÐzúaÐ|½¶,d¤`ÒÌ70ô,\_åô‰?0DDDD" 0âÀC´ÚsÐ5™ãËø5ó´°üþ_´ÖAÜ?f ~— GŽÜ‹˜_(¼õз<DßÈTèïH‰„@�ÿ�¬·.£N«…Vwfë@ìÉÂ0€!"""Z'„5vï}ÔäoBFFòŠ÷B½·9ÞGuë³ï”OÃ×}š,2Tï£æ“®ŸqQ*O“Ã1•E€ßq ¥¹L7RåŸD«'b£NR Á×½fs°nå—|ŠC…ù(VïA©¾ ¾8ƒ0DDDDëÀÚ;ˆÒf˜ÅPCÛëQi$¤ «âÈ%>Ç÷ƒ¾UÎÐRZ�uݰ¹Çf'ÁÁnÇ5ŠCòñ .Ã~¨TŨ{<(~¦>XµU0zFao¨…Áõ*ô{±a�CDDD¤x‰è NÀ®Û…]†þPð2g nñÐ>0Ó á¦<pôK™¤&á±þ„Ÿ£¯‡€ÚÝÁu4 p‚ÃV÷2và~®sõÓ+þ·”;ñ½yÑAœ†Ïv;v×áÞë(£³õ2*¶•@÷ÏGâãkN/ܸý·èõý‚ºÍ*dl®ƒmµY' ŸœEÛPØš—À7kPð¡®UGF”>&lõ(ØÖ�{0ã˜T?‹ðnÞæÐ:©ø* """"ÅKDq ϱ!lÝIôã-ìh|ŠÈa¤)lW«÷ãý¬wQz­þÐÏã'­i‚&;…{ÕP«w"/SZS³ÚÇC«Ù¡4›„§ó*¾Ö~ëð˜p!§¸×íñÖ1€!"""ZÐAkǹúOu»èøcõë[b6¿»×뎣D½eÕ hé~c"’ŸixïÝÆÃñˆ°wæ)LWm˜=Œ"""" ¸>%ÁRYЧ‘¼ˆŒI‹Sß6Ãh4†Žf\ÓÀöŠ«° Æ7¶Æ�†ˆˆˆˆˆ’HÀD?þŒœË8õ ûëðØ¹¢jy `ˆˆˆˆˆ(‰ðüpÆß¬§r;~Ä©ümL£LDDDDDr²Ô2·7À6_20DDDDD”Db�sãoÐÝÿwh¡Ðaû ŒLˆ0DDDDD”D££_4Ðâƒõl ®øv b�CDDDDDI$mNz ¥¹£L#Ë€*ÿ8 ÖøcœIÆ�†ˆˆˆˆˆ’h¶ºBä–Góë4ÊÒqZu1*ôß‹n…}$¶ý`ÀQ xZqöÜ}xŒ²ˆMý—hñr#K"""""’!@|¡Jt `ˆˆˆˆˆH1À‘b0€!""""¢”’²­"""""J)0DDDDD¤ `ˆˆˆˆˆH1À‘b0€!"""""Å`�CDDDDDŠÁ�†ˆˆˆˆˆƒ )"""""R 0DDDDD¤ `ˆˆˆˆˆH1À‘b0€!"""""Å`�CDDDDDŠÁ�†ˆˆˆˆˆƒ )¢7˜Ô�ðàÁƒ<x(íX-0D ·–@ŽÖÛûQ¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(äØÖ$¢LlA‰n½u„رK¥Ÿ{%•ŸõœˆRAŽmM"ÊÄ”HáÖ[Gˆ»ôQú¹WRùYω(Ök[ÔHáÖ[ãÄŽ]ú(ýÜ+©ü¬çD” ëµ­a JDDDDDŠÁ�†ˆˆˆˆˆƒ )"""""R 0DDDDD¤ `ˆˆˆˆˆH1ÀQâ £ènªÁáúÂ35wÏ3øñça8m¿ÀæF`ö7ãÂ�†ˆˆˆˆˆn¦¯;6î©+ 8Sö²26¡à¯—ñ;ÍÁ=j226C£ïš jâÀ�†Hqfà÷ü‚[úzhµç 3ü ûàdèïH˜€Çzú:­ø~`°Ø1ˆ³%£URx]RXÝü°ÞºŒ:­X^ÝuXìÞUÝy$"ZŠ¼Ú™ix[ac™C˜„³q2ÔüÚR‰ÝÚÛ°9àqÛѪ=ë®W¡çĆ ‘¢LÃ×}š,226"§ðC¨‹ó™u†¾‰Ðï(ˆ4´¬?€,é.Œ*…{÷¢8/Yû è›b“\ ¯K «;‚¯ zÍìGUN!öªw"/3û O1ú"¢µ_;€ÇX‚L­Uü“Vm^0€±ëapÏ•HÀx[=¾²úBcÃ�†HIfž¢qÇ[Pþ­ÎÑÐ]•ø]&9r /Öç-«ÞBaíOpúB÷ˆ„q¸LÕ8Ò2 6k”4 ¯Kʪ;“èkÜ •jj[{á  þ^˜ŽÔ åEúîÑz!ÏvfÚ®CAUÆCÌ[§:às\ÁÁƒgÑØÜ Ã¥/ Þv mc3¡gĆ ‘’LÛP·9» ý ;hB? š¯aUX?hÚV‡ÍûÂîÄÌÜh‚wl(i^—”UwÆa«{» p/8ÙSpŽAçG"¢ÅdÚΜ0;‹w�–Š-ت{‚iaS-vålBæ»ï"Gc„'ôë±b�C¤(èmü[µÄ?Iøß¡¢(K[7ƒ)wïÖÑÐ|pŽ£('¥I2…×%EÕS½Mؽõ,¬¡’ù{`¨ø�9Ë8CD ßvFðuÃX{¥ÕßÃî›ý4dÚëçÛ1z+0DJx‰î›P{Î çÔL°Óyìð<ð(q!¿€Àðܬÿ+Ιû0ì„~>›n‘ ù“OÑuIiug ÃÝ-¨¯=³S ¥ŽÅ±c¨0À‘F"Jù·3 “ \…Ù:�ÿ*šl0DŠ"vÚ<hªû ·zà¤ÇVܾÛ¯";ü“ðt^²opË1*¾;ñ±õ'ܵ½`§.é”^—VwÏÑÙTmÃpHw Xo·ÂæUpA"’™·3óI²_ò)æ£X½¥L£L´ÎÍ-¼Îy;óòQjìA¯ñde¼…"]ü¡_SŠÙ…ØR¬íÈË-‡±ßã~±qSí‚®›ë’JáuIYugnqm wæ#·ÔˆþÞfìÏRAUtÝ«¹ýHD´€ÜÛ™Wpö‹å+FÝãAÌf%«‚Ñ3 {C- L£L´ŽM?n«ÎÉÙ5�Ÿümv®k úßÀ1µTî¤ì$[·7Â)Hsw¯â“³Òz Çeú…~’@áuIYugv]1¶7þ&–PZ{T…³Áµ;pè?ƒÎ®€´ÕD$srog"“ Ì0^ñ¿¥q'`�C¤(x-_á´å…Ø@Í`Ìò%Ž[¼ w@[tNqYÈ x`ùâkX†¤îæ ,Ç¿„elÃgQÄ,dI¦ðº¤°º#x[ñÅéŸ1$]¸Ç,8~Ü‚±€«¸pE#ïvF «lõ(ØÖ�{p¯.)€)»y›¡Ê>jËcÇ�†HIfúqóã­PI›÷-8TÈ®z€±Ð¯)ÅŒë>ÎÝñ^¤c+ªÚ^†~‹’BáuIYug®›G‘«Š,«xd÷þDD‹)¡‘Ö.^Å×Úï`ƒ­®9ÅÕh²þ÷M'0DJ"¸`Ü·úïa4_&ó#¸"S*€ð܈}Ї½£ñÌ{AÅIáuIYug χPPñ÷°²Š‡é.º|`U'¢µSj;ãƒõl ®øV^2€!Ra6Ýndÿ¯‹èp‹_va ÎöÛ0)4 ™0b…îÿ~ÿ«¡î)‚¯í-?0 Y*(¼.)«îLcÄÖ€ÿ;û#4t¸ÅnÆ4|δ˜î1 %ˆÜÛi¯±k(:ržUþqâH©Ì�†HQa©Ü‹js¿ø%Ÿ@Ÿá ²2‹Pvâch´¡¸™ôcT¾÷Ì®qSOaØ—ƒÌÂOp¢ô ´ãÝÖŠâ£ðº¤¨º#­1ªÆ{ÕwàòOcªÏ€}Yo£°¬¥šz<öq ­•ÜÛi!rËΣ9|„ÈxZuqh6@+ì#±Í�`�C¤$Ó6Ôišà¤è­¨Ì~C/B? š¯·ˆÚvš`Æ”i YN {CIpYpÄN4ñ'•Âë’²êŽtá>6›ñMx!Žï`ƒæ:\WpŽq?%€ÜÛi¯±Vœ=wÞ£,b¹ë¿D‹—‹ø‰Ö/iïŽZX~ÿ/Zk‹B™;¦àw™päÈ-¼ÿÌŸfú®â@í=üÞûj ÞBve+†„q¸LÕ8Ò2 ã9»ë€Â뒲ꎴ?Ã1ÔZèmýªwP)eó÷Ât¤-/ªÑZɽ™Æˆ½Í¾ï\û70DŠ"~á»/C“¥B†ê}Ô<ð`Òõ3.jµÐ6Y1¬´¿0Šnýdç¿Öâw .‹Zí×h²¾d�“T ¯K «;ó;PoB~Í}x'‡åâ9±¼×`V^"’y·3‰âÆ�†Hq|/1è[/wm𠾄OI”OéuIau'àÃà S#‰(ydÛÎ$vŠ"Å™ßó néë¡Õžƒ®É «GÚƒ\¡„ x¬·¡¯ÓŠïG‡&óàñsQsj(¼.)¬îþXo]F4Ê¥» swˆˆb!ßv&±SÜÀ)JØ´ŸÌm(ùìcnù�ê]åÐw*/ˆy= H…ÌüøìÐvl)Þƒ]¥WЭÀ}m”EáuIaug~jGòK>Å¡Â|«÷ TßÅ=ˆ(!äÞÎ$rŠ"%œ0ì΄ª¨‡§€€Ú#<SOÐpô{¸Ö\ìV½…¢º‡âÛ©C‰Ñ…)»G NåŽ*)Âë’²êÎ+¸ û¡R£îñ 4ñ VmŒžQØjap½ ýÑj)¤IÐ70DJ"¥¾Ýœ‰]†þÙÚ\§Ó÷oh‹Î)0r6gìƒÁ-v E³Ð~ø¬_¡ˆi”“KáuIYuGšûý2vàžì¹Ž…Wüo)Ó(Q¼Yí "E¨blÓ=A°Û&u:sÞA^ΦPÙà/)ÇÄ/¨+Ø }<ø0`Õ"çÝw‘3776øSJ…×%EÕ¶zlk€}J*™Ô±(»y›Cé«9]’ˆÖêÍjgÀ)Mà9:ÿQ­á l¨ËÙ‚âªïaWäšic«üãëz¬/°Õ!'g7ª®?ẀTPt]RZÝ™„§ó*¾Ö~ë°<!§¸×í \»FD2õæ´3 `ˆˆˆˆˆ(‰fàëéÁ³ÈD‘ŸèêŠÔœ %Q�Óq¨O| ­”âyî8ó)Šw\ N{<·qxKßy¶b@Ã�†ˆˆˆˆˆ’H `Œ#§ðC¨ÕêˆãŒÎI0DDDDD$Ó~ôO-±ðOÆ9’ ‘¢xÐj¶‹ÍÀrÆÑeî€7ôHÖ¼0wÍf‘ZÒ´æVOè%ŽÂë’¢êÎ4¼­­èZ!7ÂtW+Z½JH @Dò£ÔvÆëÙ*\þÐãØ0€!R7Œ¥jTœ ›?yHóIKMb÷T<&”Š3ÑÞGè8S¡F©Ñz%ŽÂë’¢êŽ4uâ(Š+NG-çìqÅGaôp÷#"Z ¹·3üŽk(Í݈ŒŒŒE‡*ÿ8 Öøc\ÍÏ�†HQÄN§:3ê—Á¡6*$€1B­ü ŽL¨À$Âë’¢êŽÔ±(‰R¾È£„ ­’ÜÛi£ÍBä–G³Ñãëã*´êbTè¿ÿÜ ûHl£C `ˆEìt~tmãËÜ¢oCÕGÊ `>ªj›µ¥âÛ9À$Âë’¢êŽÔ±8†ª¶¡Ðãh†ÐVuŒ ­’ÜÛiï®Vœ=wÞ—1°©ÿ-qNkc�C¤(b§³¤ÖåÚiGõå0%Z«Øì.-`­C ˜$Px]RTÝ‘:UÐZ}¡ÇÑH»fW1€!¢U’{;3{+š |ß鯔øØçì@‹élÞÉÐïÄŽ ‘¢ü sy9 ®W¡Ç‹ .ö”›±Ü=Ù2£|®%^Áe(G¹ùÏÐcJ…×%EÕi±¸ŸaÁ‰%‹+8aØóÌC\ÄOD«!÷vfc–j¼W}.ÿ4¦ú Ø—õ6 Ë*Pª©Çc_ä—Ëc�C¤(“p6ª‘[yž@”&*à†¹r¶é{ĦB„ßиý=TšÝQî¤KÃÍwP™»zG|ÙI( ¯K «;‚³ÛsOÀì‰v§qó änÓáˆ/.É‘¼Ûi Ì14:Ų /`©|4×á ¼‚Ûpl…‘£ÅÀ)Œà¹‰ƒYo!¯ìZÚŸÀéñÀãq¢»ýèÊ  Úð ®ø‡cÓc ž–ÃÈR L÷Ú»â{ßó Ú[. ,o6|h€‹º¤Pv]RXÝÜh9˜U^9t-íèvˆå€³»-ºr䩲ð¡¡O7ˆHždÝÎL¢¯ñj-ô¶~‰Õ;¨´¼€àï…éH Z^Ä7­ ‘âàí¨Ã®,Õâì"ª÷QÝú,ÊiþDÇÙ=ÈŠ|/â¡Ê?‰Ö¨w’(1^—Vwo;ÎîúË¢²fdlB~õOÑGˆˆâ çvFðuA¯Ù<[–šûðNþËÅsÐj¯Á:ÌEüDo€ø=V˜tŸ£L£†ZS†ê ß¡Í9¶ôÜW9&à±Þ€®º µš²ÏqÁЧë’OáuIauGðÀjÒ¡ºl?Ôêý(«>C[|Œ]ˆ(AdÝÎ|ô­ùæ"EáNü”(܉?u¸?%Û›ÕÎ0€!R7wâ§Qx]âNüDDaÞ¬v† ‘¢ˆNîÄO ¡ðº¤¨º#u,¸?%“RÛÿdÜSÊÀ)Š?èÛ0>5rC?Emdyz‹7l­…Ô�/܈‹Y&‹Âë’¢êŽX¶¾…e4|ÚFäF¢ÜÈ’ˆÖB©íŒX¦³U0¸âKyÏ�†HQ^atdbáâj%01ŒŒ‡7¶ `RGáuIQuG@`tã N6"J$¹·3üŽk(ÍÝeTHÊyë�ü Ê¿40DŠ%6Vƒ=h­Ûƒ ¹GÐØùûl†‘ÉNœ: �fI :~BÝ®·‘[~.Ÿøñíhq€L’)½.)¬îáh­Ã® ±®`Æ´QtžúŒ %†ìÚi#ËBä–G³Ñãëã*´êbTè¿ÿÜ ûHø©¥1€!R0Á?‚?‚›Ї”–PJØt¹JY³À ü#/fß‹ç ú&á÷<BSùû\“Ê®K «;‚#„εç%|qx¬M(Ï=È�†ˆCv팀€§gÏ݇wÁ(‹ØÔ‰–83£1€!Z7^¡O'm^•u]'þ¿ÐOKp@÷e #g?ê:‡B?¤ÔPx]RXÝútø¿22£þÐùÿq/~"J<Y´3çèøŸ³8Ýð#ÒˆPÀëíVؼño:Ì�†h]™¿÷*4û”8…0ŽÞ¦CØÇ˜4Px]RXÝüÿE“æ0G`ˆ(iÒÛÎL¢¯q/TªîÌGn©ý½ÍØŸ¥‚ªè"ºc]üÂ�†HQñ¨Ó¹üæƒJZÄ?܅ΧËgá"þdQx]RTÝ™Æð£GxºìÉæ"~"Z ¹·3°ëб½ñ7âŸ{«pÖ:ü¹Cÿtö‰Ù_‹"EqÃTY…KÍá à"ŽïµPïWH�ãù•#ô-<¾×–`?˜$Px]RTÝ Àcú—¾‹ZÎÙCZÈz„ ­’üÛÁÛŠ/NÿŒ!i°eÌ‚ãÇ- xÑ©-]A2 `ˆEá›FRÔf„ëÂ뒢ꎔâ™YQ2ɽ™„ëæQ䪢”)ûs´Å·.‡ ‘¢¸q£Þˆž¹lQÑŽgfT)%²çGÔº¢¿ÐñÌ|Ši”“BáuIQuGìXÜø†ž¨åœ=za®:Î�†ˆVIîíÌž¡ âï G…Lwñ0˜ú>> `ˆeî¡å¿èJZãÿî—Ë7¤\“, ¯KŠª;üx¹ìÉæ"Z ´3´ßþÃñF+Q0€!Z7|/àhùL¡ûÀD Àçµ£¥²SÈRNéuIau'àƒ×ñ*Ӹ̢)<xðÍ‘éjg„Qt7Õàpý?ᙃ»çÙìFÉa8m¿Àæ[ìø1€!R±cX*ÅH�ƒ¶»0™Û`u ®ªAH9aé%nÅ^Ønÿ�s›ŽÁøsÄÓJ^—Vw„@`ÉŒo  ·Mf´YŸb0€[“«°N)–œë€Üë§\Ê'Çvf¦¯;6î©+ 8Sö²26¡à¯—ñ;ÍÁó–‘±}×lP¶XDŠâ†Ik‚+Mœ„ó܆ÖЫŒ`kÝQx]RTÝ‘²é`p-Ÿö9À˜Õ“GùäØÎLÃÛrËÌÂ$œ{¡6à×–JìÖÞ†Í9�ÛŽVíi\w½ ='6l±ˆEÊ•…ÌÂè7Yáñ+|×î`&©l–×Ãd@œûXÑš(¼.)ªî„²e¡¼Þ«gr+.b�³z² `d×ÎÌ–)Skÿ$­¿É 0Vc= î©Ðïo«ÇWL£L´ž¹qCׂ^÷X®œ„:'*ôwÑ%ÃQL<w 3Úá¶[påä>äUB·Kù™"(¼.)ªîˆñÿ€±·vËœT¿¢ŠK¸Ûå‘MàÅ�†À¬žl¶3Óv ªÚ0 `Þ:ÕŸã <‹Ææf.}õ¶SL£L´¾…¯[ƒRTéÿ†Š¢÷¡>yÇØ„)Hø:)ãÕÎÐ7T (N^ùŽ‘¹;4”x ¯K «;ásÓÖ¯°³J‡†ŠÈWŸÄ‹#ižÊÇ�†À¬ž\Ê'Ëv&à„ñØ9X¼°TlÁVÝL £p˜j±+g2ß}9šø“ŰÅ"R¬°tˆ1¸5¢|K&r5Zm/”ÈH^§ì•2`¹ð¨ñ¶lx­ 6/ñ'—Âë’ÂêÎ|zç�|®‡h,ÏÆÜýÐ…7M b�³zr,ŸœÚÁ× cía”V»/"ÍÀ´×Ï·c8ô0Vl±ˆKêtž€ÁыǦz”fÑàü׋ð¦÷†nü‚Ðkp¸ÁT…™*ñý¨Yx;ÿTÆ´&ÅRx]RXÝ v, OàzlB}y2¥s\Ïs Þô„‹rï RòɹȽ~ʱ|rlg‰-‘¢ âßm¼ü´ßCúí`Ù‘±9ÅŸ¡á–.Ÿ‚¦aÚìãü/`¿_õF齈‡*Å'.â–ÕŸR³dÉžÂë’¢êÎ4†ÿÝû«iø{p¿NƒÁsUÎnœh¸«k,­#]RYèÍ&ç: ÷ú)òÉ¿I$¶XDŠâ†±ä}æe¥ Õ;Áõ rZ  %yï!/xÇ\lds58yå'å&%P…×%EÕ�<Ær侺 º¹Òœt%Î!½Ùä\ä^?åQ>ù·3‰Ä‹HQB©oóBÛÜ>¥/r¦ÂÍB~éY4wô¦}!ó›EáuIQuGêXHéM·¡TÛŒŽ¾Õí<L `ˆÌêÉ'€‘w;ƒÀst6ÕCÛð#ÒZ˜€ÖÛ­«Z«È‹HQ¸‘%% 7²L±cÁ,IæÀ¬žlY·3“èkÜ •*…;ó‘[jDo3ög© *ºˆî8‡þÙb)Ê+ŒŽHSdFzÑyç*tZ-´u—ÑÒ©ÀŒÀFÆ¥Œ$Sé{ˆ;M:hÅ÷S§oA§ï­+ ¯KŠª;â9ŸtJÃèëüMºsbyë¡oy(‹Ñ/0Ä�fõäQ>¹·3°ëб½ñ7±¤èm¬ÂYëhðçýgÐÙ'f-Fl±ˆg¾î&”æn 6šó‡ Y»¾ÂÂR £èn<„\Uø{‘Ž¿`—ö><J!P…×%…ÕÁ×…ÆÒ­P-(«xdíöÁ@Zƒ.©ôf“s{ý”SùäÜÎÞV|qúg IMó˜Ç[0ð¢S[ -wâ'Zß„wp8[5»hù’–ÎǰZ;`1~ƒ“êw°!ÿ :†#ò¬ËV�/Ì•È.6ü—Œ­è´Zaíl…QÚ77 ùµíf “Ê®K «;Âs˜oÁl²„o`´tˆçú1:-F\:©Aî†BÔv "]Å•{‘’OÎu@îõS6å“u;3 ×Í£Qn8‰Göç܉Ÿh}óÁV÷ò«ïÀ-«Hà%~Õiðnݯxú‘¬½úu[‹Pmî’ùJ@`Ø Ý®]¨³Åwg†b¡ðº¤¨º#à•­[ó¿€Ù5¥ó0…á_/b×»õ°½JO×B60J9×¹×Oy”OîíÌž¡ âï0ó‡é.º|QÊ»<¶XDJ2Ó}á1˜‡–¹+>ÑSÅz85qÆ¡Ga¹yv89*gP¬ïÁúK™f ¯Kʪ;~8ôPnþc™‹ô:O•AïHÏ\0Ä�fõäQ>ù·3  ýö¯ g‹E¤$ÁÇð„F'íïQ«VÀw 6ºC–à1¢Dk•Ù¢ìu@áuIYuÇ«¶ FÏr%‘R VÅ=<QÀ˜Õ“GùäÞÎLÃ{ï6ŽGÜRšy ÓUâ[ÂÏ�†HY¦m¨ÛyG|:bÓ"M­QÿC#0Ó¶¿awäòá.t>»;$ ‰Ÿ‡š#0‰§ðº¤¬º3[Ýш»žÓ~ôO_ŸliJ_G`(mÀ¬ž<Ê'÷vF žJ‚çjÑ‘}–åfDÁ‹HQþ„¹\ª+ÍóóG¯AIýÜ]æI<o©@žö±ø'2£|{®¼žÛŒkÚJÔÏÝ ¸ÐR¾ZëØìcJ …×%EÕi±¸Ç±½J?®MЖ\n <oAyÞYX'0·b¤N½Ùä\ä^?åQ>¹·3b�cÒâÔ·aל`»}�Û+®Â6¸ÜÈÑbl±ˆEl ,'-ݱ;2¥i2á/ÿ�y…{QÖð#ééÅGxKå; ÞKFFžØéŰõ2Ê‹ P¸÷(¬/—™ÓK«£ðº¤°º# µ¢2[µ°¼™Z±cñVýQåaoÙ%XGâ» ™(RyèÍ&ç: ÷ú)—òÉ»0Ñß?#ä©'hØ_‡Ç¾øÆÊÙbÉÞ$ûŸÃ7÷¥üùÃ't¸î£NÿŸÐ]sÒþgóGÿþ˜{/âájÓCŸ¦u�ëŸÂ뒢ꎀÀ  Ï|s…øG^ÌŸkOÚêšd³¾HîDJ>9×¹×Ïô•OIíL�ž.ÃøÛ@Xù<p;~Ä©ümq¯Ëa‹E${+-¤°@zîÚ®ÊJ «…i¦#oÑPb(¼.)ªî¬¼XV —³Í�†À¬^úʧ¤vf©50*dno€m"¾¶›-‘ì)'«XL˜U,^—UwVîXÈIú:`$r®r¯Ÿé+Ÿ’Ú±¬7þÝýÃ*m:<wØz1m/²°Å"’=0”( `RGY ˜Õc� ÑŒ;ðÀÐ�­ötMfX=âßÄ ‘ì1€¡Da�“: `HYÀ¬˜ØÞû¨Éß$ž¯,äï…zo!r6¼êÖgq·ë `ˆd % ˜Ôa�CÊÂ�fõÀć¾ª¢sh{=ê" 0҅ƃUhy_ËÎ�†HöÀP¢0€I0¤, `VL,&`×íÂ.CÄ”±)¸ ÇBïaã#c1µñ `ˆd/ÞNç$^z†äÛÉc�“FoX�‚çeº¶ád�CDɦ¤vf>ÛyìØ]‡{çñ?FgëeTl+îŸÄÇ0ÖœŽi4† ‘ìÃù°ƒÁ[ƒxÔé\>%âÔèŽÝ€'ôPvüýxØå½ðap.ü#ðÏÝ–&à±ÿV»gþg”�áu)�ßà¡\ü/0ò: Ì üžñBÒÏ*2Ã$UxÝîBçSðÇÑ ˜²ëqÌè=N5~çÐóîÒ&ÞÂO^¥D'¢4SR;3…çÆƒØ™F9òx ;ŸŠW¢å1€!R7L•U¸Ôl„ÑíhÆ5­Yj£|˜0‚ïÔf!Wó%Í]ðÄ®éT/n.€*ØmB~õOðH?§ÄFa«ß Uî~œi¼ ›W©˜€óæ1ä©f/$ªü“hõ¤kcžPYqÍQ¿ÒÑ­ú]¨ÓÀÄNðÀzëÊò>Ñ£Ôá1"’3Y´3cí8Wÿ�s7.£`ÐÇ¢ufé�¦ùRò¥Ž§j+J¯õ`¹{Ó²1Þ†uz§æºu»Äàer+šÑízŠŽúR|Ü2�†0‰6„¶š£hì=àネ"©åƒ±»}Ç·à…Oþ’Ìw¸Tñ^0�Vå–ášC®S+fà´Ã¢?✡;%)ìXH‹g“Δˆä*ÝíL¤Äm–Ì�†HQ¢M!(×TK© ³ö¡¾ã¹bÖ—LÛ. äõ‚>±as]‡fƒÔ>‰¶áл䚙䘶¡®ä:Üs=Ö@/ šlñâ–ê¶Ð4-9¯™‰6…L‡Ëü…È«¥>YŽMaÄñ3®œÔ 78Ò•Âòz;ìè1þ7RÔ±Hd:S"’y´3ÉÄ�†HÑ&á}üwh²TPå× ¥oLQwP§mç¡iüm¶Ì X*ßÚlq¿j&¬õøÄàTÔûR)€Ñ4Á<±Ó²œ@v†Øñ?xž¹“=ñÚO¾ƒK '?ð'7|„,iÚaU ú|2[KF_G3´šwf§GfnC©¶}ÃóÃt�©™-™Øt¦D$²jg’‹ ‘R £p?C¾jòÊ °Ë­Ã ©ƒ¼ãS4>h‡Yw9bƒ»awhJY` n[3ªò÷¡Ñ)ÓuŠ6 «v?Ê-è0_@IÎdlÏupJY�>÷/0VíÀ޹�SÆ_Œ•ïA¥*@¹á |²+ð$œ†È”:ª­(¹pŽ‘©ÐߥCbÓ™R2‰å  ÏÖÔ¾'â5HþäÖÎ$"% <ƒ¥v§ØPm†º¾=b‘{�/Ý(c Œ”V±» ¥¹ÒÜ\2‹þ KpÚîÎ[¡5 &ܵɾ­D‚¯ ¥[Cwêv¢Ö"M0å~ÓÜš’»vŒÈöä‹3O+j‹²£OŸ†à=H71(tYqKÿÔ[ò >ywmnøÒr+4±éL)™‘&7Ñ©vgàëéÁ³È4QŸèêz±ª¶Zj‹šŽCýƒLùž¡Çí_Gì‡ÍÚgJ:âÓ±·Û=S§[ çÅ-¦{¡$'1 <GgS=´ ?Â!¬·[ã{U“S;iÞŸn },"žy ÓUæVcÆŠ ‘¢ˆ úð/Ðk6‹þÍÐ4´£oQ.êTD²×¤tÊái”)…¤tÊái”•b Ã6}púdFÖGhèø-â{ =FÔßa2išGçM4œøy¡½fÍ=„?7§(½ibÓ™R2É1€_Ïtê_B«ÕÎg>EñŽ‹°O‰¡‡ç6o)Àá;Ïbh&Ñ׸‹OâJ×(Ûùd¨¶ã¯ßþ û¤ï·T³@ß=ºªà(v3³Tã½ê;pù§1Õgÿý·QXVRM=ûbù&̾•*…;ó‘[jDo3öKÓ¼‹.¢;•¹´·3‘¤zXÑÆ„Žì° ÅW&0DJ"<ƒ¹æ�ÔjõÒ‡´W£Œ4ÊðvÀܵÂòi;Ì­Š ÇƒV³Ë_2ÆÑeî€7ôHN5š(õ?ìØ[˜¬Ó(K‚è0Ö£¼PJ Âì@ LgJÉ$Ó�Æø1r ?Œò½;£s2Î�æ9ZJòPfþSübÿ†Æíºù_hùø�´w~…S¬‹nÇOÐoNòz¼qØêŽÍNY­ÉÜ ¹WàUØÔÊ•HÓ3‹±=8õv½U8k þÜ¡ÿ :{¼ã ‰Ævf±Þ˜jPváÛÐì éøÊ QPq¶˜÷²™Å�†hÝE§áž2 ¥ÅŸâLø]¼ˆãL…¥ ØËCyÜ0–ªQq&úyÒÕR“²FóÂMZa¸©º#ŒÀV¯…)e Ÿ Ö[—Q'}Öº«0[8 *;r `¦1üèž&ì&¾Ø© g˰B›™ µ± ÆZã|–D)íû©‹IΈ(žC­ÅÞÖ/Q z•–ü½0©‰y:¥àmŧÆTö1 Ž·`,àE§¶4ŸÁ*¥¼ 'À?0€— Ú˜iøž|ƒ]o£+¾)v `ˆÖ)xÚþ!vD®àºå)þOè§²æ1Bm8yÁ!]ÌÀ$žÔiÈŒr¾#¹nŠÓèÝÿ‹–;¡é4 ok+ºVèðÚ¯ãúóÔt,¤5³SQ³_ò)æ£X½¥ú.&Ax“É1€I4iÔâ#Tµ …˜­8ÕéC¿¾‚fã5\:¹Ûª`,ôŒd™ÿ^lB~Í}x'‡åâ9hµ×`Kí¿¬I¸n ¥.Ž8²?GÛXŠ&d§ýˆ&Tözè[¢/´ŽHÅh×ÄÌn¨9wãä¸TývU|‹î8“L0€!ZWfàï½ Í>…L!˜ªÚ°t7TÀxÛi|Ä�& Ä�æ£Óh_æB6Þ†ªdZ—5z'u ¢¸âtÔrΧQQ|4ES;^ÁeØ•ªuÅÒù`ÕV‰ÿö(ì µ0¸^…~ÒïM`\&«µÀ;ÔŠŠÛƒS­¤ì‚¦S{£Ê»yï¦n:¨´&sÐ'žµÕÖ—BAÅßæI‰‡é.º¤ÄÉ· 9Kø‘µÚ«|_‰‘È' `ˆ%ÚF–¤;X%Ê `VÚ¤2`­C ˜$ˆa“J9×%EÞIÈ%¯.8R57]šëÿ2vBStæ¯ø_Ls¡0oB�#™†ÏnBmÙ!T__œ }ÚaÂù¶t­Æ0i5ã^¬ ßh¿ý+†¼1HóO&?xžÃ|x 2Tï@}ò-³-F\’6µÜPˆÚŽÁ”R‹%öÆ "EqÃTY…KÍawv"ïµPïWH�3dFùÃ2 3¥¯åÒâNJ°?a./_ö¢!¸ ØSnÆP豬(jôNì@þð-,£a EÁá4F-ß⇔0&lõ(ØÖÌ5ÀáݼÍP­"%“�¿ó?è .pŽm*âtW+Zt¶ñ©4¿çÜÒ×C«=]“Ö×®&—0øËÞ›ÝK%¡7ÄïØÙ*±½Mæ^‰ßë­ù_Àìr¾¦0üëEìz·¶Wéa{ã„ ‘¢(|ÝB¤`Æ™÷PivG¹3% ใÊÜÝÐ;”±«²LÂÙ¨Fnåˆ}„Bn˜+·a›¾GìNÈ¢Fïĺ<:гõ¢Œn¥vnú$<Wñµö;X‡ÇÄŽErŠkpÝžìTµ´zÒHÊZ§"&â5’IÚìòlzôÌm(ùìcnù�ê]å)H£,­ÅÙŽ EU¸y“ÐÔgL.Ä`Ñq-´·Ùâk³*ÿ8 IK–á‡C�åæ?–9O#è<U–¦kjboœ0€!R7nÔѳ(ÝiØñÌŒª `¤Ä-‡‘¥*@™î´w;g߃ó Ú[. ,o6|h€‹Q$…้ƒYo!¯ìZÚŸÓ•z<Nt·ÿ�]YT>‚!ÎÌ0)£°Ñ;!»fa¢MÏ› ½ûÍ¥hš ­’|¬u*b"^#‰' »3¡*ªÇãá©ùïÉÔ4ý>Éi”¥6ã vú�17¥Q†Bä–Gsx�d¼ ­ºúïÅ?·Â>’ŒÑ­¹å>7éóOçtÂÄÝ8a�C¤(ãp¯°+½œ×-D#ü‰Ž³{å"ªÊ?‰ÖàÎü”x;ê°kn³¸ðCõ>ª[¥ùeJQ£wb§á¦ “aßÜEßS“&ÜLË]ï9©˜æB«'Ö£5OELÄk$Ñ´ u›3±k.ˆ˜+›ïßÐKre±Ýú´_@‡+즠ç9zÿÀ˜Î‡Ôö´âì¹ûð.¸PÃZûþwR§åIÁÓш6/2åµOüŠ´À,N£, `°ë?1ŽpÍc�C´nˆ §ï-Ÿ!W)SÈæðXo@W]Z MÙç¸`h‡3Î´Š´Ò|s+LºÏQ&m ©)Cõ…ïÐæ›í@È–’F碌žÿIÎf塸õ€¢0çãÝõNç4Z=±_óTÄļF";¢ Iw勱M÷Dü†‹¤²å¼ƒ¼œMÈ®lÝ[%iB»èGùNÄ;"µhÄ5%7¦1d>ŽíUú°‘Ÿ&ñ³½ üÄÏþy ÊóÎÂ~3%eÄvÐtÚ¥ÄÖ°£ eAk~ »{Lü­Ø0€!Z7Ä‹‡í.Læ6XR†àNü´Š½‹À,:RÀ¤sš ­E"¦"®ý5Û]$ðÿ¨ƒÖð †6ÔålAqÕUX½Éÿ> /nãxM3-x_ÒñƒËÔ×Ò{s@jEevĈz¦V `^ª?Š¢¼"ì-»kZ¾ÛR;¸ÒôÅlÕ¶F_— ¥wâ§µRÄèx᎜B¶H*§-=ÍÅVÿ%ZÒ–}Š–¥- >VªG zvDc"–ñléu¸õzKz…Ñ‘å2žùñÔd‚mb©ßH÷ÍøG^„MëC[]S’§ÞÅJ¬77.¢ñ‰+¬|ÒÑ sÕaèmÏÄ?»à0×ã´Ù³Ìg0‹ ¥¢öò yšÂHßCÜiÒÞ:} :û†ÅK¥¼,žRE*ñž£ãÎâtÃpHÁ^ÀëíVØRp—›VK Ö:1A¯‘ÀŽèB>8®•EßÉ^Ú¿òZRS*GÁXt¼ƒJË‹%Ê ¿›1µ=)1_Ož-šÖë‡ãú´ K¥œÂPÛi¬aRÂ�†ˆÒÇsz‹wþB ôàù:ìn‘t'P‹ `(a݇¢tvþ‚]Úû‰»û»î„æú«rP¸3¹¥Fô÷6c– ª¢‹èæâ™Š|,:VÀ,:VzÄvD.âÏC™îzØè…xHû›m«€^úó];F’RE¥,d¥(¨¸6zÒŒkÚؾàg&ܶ…]·"ñæÀÄàîå3ô{}b˜ÆpÛ\&˜¯73}Ø¡ÊE9G`ˆHÖcŸ½7$øûaÑîA–ª4ìÂ)§ÍI^xa®DvÆF䪿À%c+:¥¹ê­0^úêÜ,ä×¶Gì†M³¤ý.б½ñ7ñ6ÞÆ*œµŽîÐ}bö×HfÄàcÍSñ+‹§#ºÐ$<­pîçˆç‰Mý§·Ü½ø¥4ÄGÑèŒ4ÆÛPµ¹fo,çƒ7–&Àß÷j+P¢Þ‹â¼­Pk›ayøÆÇg¯ûR°×þ¾N"J³ø]­Ðîú 2TyØ»÷=T5Ãæ€Ûn†¶xªÚd¹<¥Ó«_Q·µÕæþ( b†­ÐíÚ…:[ºö;7ÁÛŠ/Nÿ<›ÕiÌ‚ãÇ- xѹб)u11%Óãèˆ. Á~÷Ã`¸N·_|<gûm˜îvÁ›ôÕ�^´ÔàH‹KüÓœiølçQ¤zOlKVH8Ä›±‘F+PÖØ ËM=ªŠr‘W¬FIÅièo¢=†,˜ `ˆ(}Ä‹SŸY܇D•÷)®Ù^"1Y•}ÜÉ’šqèQXn^&­ªØ}è<ƒb}"ÓB“pÝ<}Aöçhã“§ix[[ѵBô1ÝÕŠÖ%×Z$â5’i–ʽ¡è3DVfÊN| ö!’Zœ0–æ#¿äÎhÏàÔ§»£R!KÓGŒ£'¼9°þþ_ÐnsàÙˆO `æ6Ԝۀóü#pØÚq¿k™)z! `ˆ(}‚‹ø¥…™ÆÙ¹ÂAÓð9nA[þJ*¿A7²¤(Ö:”¬4µP¬_%ñÎÁ#Lá¹ñ *þšÓ:LwñÐå[±ã@é"ݵ>ŠâŠÓ‹²5ΧQQ|t…50k}$’ÖÀˆÁ‚S¬„³ ê߆ÆÐ‹À¢õ‘Ix›©•%¨5å8¥ÿ)ìú´ÞXš€€· w¯ëñuÕ!ìÊËEa™úëÍÐ:½c<®¶‡ ¥Ç„òêrÅmÚö7ìŽ]îBçӹ⼲‡š#0ÑÐvÝ„;-—Q'uZu×a±{ìÉš|¬”¾X:–Ût1¯‘D3OÑx@ ËïÿEkmTÙ'`š‚ße‘#·ðBö× ÞˆT£Ê܇ítš÷±·ì vïEYÕ׸j]*ËÛ<0D”>CVXº8ßžVaÈŒòíU¸òº“ e ªDýÜ€ -å{ µŽÍ>¦_ôšÍÁΪ*§{Õ;‘—™ƒ}†§bŒäIêô[aMàÚªŽ­À¬õ5’i¾îËÐd©¡z5<˜týŒ‹RÝdUÆÍ.ÞˆAô,dRýôyûñôÙÊÁ"JÏmh¥é¡‡D1^ÀRùNÄ]ã<1`Űõ2Ê‹ P¸÷(¬/y×s‘¹LI;PÛÚ _hq´àï…éH Z^ð)ORð1·n`)së – `ÖúÉ& à{‰AŸ2ë!o¤"JŸà˜l–×Ãdˆ’MŠhi‚„m¤çjÓCÿF/’•´[ø{ÈØe€{Áwn nñ:·”>Ó2†=çÒA¹à„aÏg0-µf#¯AKãÍTa�CDéã¹Ñ·Ý‚+'÷!¿¨ú»]ðø¹jVA˜F`šQðÊLõ6a÷Ö³°N„Η¿†Š³±Œ,œØž{æ¨ÉM&á1Ÿ@î6=Ë4¡‰x7Ë$žßú?Å”•7RE¶ÌÂi<xðXîP¬ðgÀ íÎÐ7T (N^ùŽe ¸Gûl”vЛb ÃÝ-¨¯=³sb6€9v õ8¥SÎ7Zæ@•W]K;ºðxàìnG‹®yª,|hè[>qE"^ã ø=èº{'Õï@sRÞHY0rÆò­œË§´NœÒÊ»$)€)1BÚ9àsáQãlÙð4Zl^e¤RVúg±nê’¤÷\OÃûÓ ´-wGÙ§&ñ»7× #Ù¼í8+mü+Ö¡…Ç&äWÿO >&â5Ö§)ŒôuÀX…™Ò~dÒç¯pùLnļ&ˆ7RA¶W+é‹$g,ßÚȹ|r?w‘”VÞ%˜kp¸Áôúâ¡Bfá\ìüséùÚ2¢ôÏbÝÔ%Hï¹–rÇ’J÷TZVNgJ©'ø`5éP]¶jõ~”UŸ‡¡­/®ïñ‰7Š»gÑèð‡]Þdwÿ'á4@¦X÷U9»q¢á¬ž‰`ýÆG1SPÇ›©"Û«•ÔxÊË·6r.ŸÜÏ]$¥•waÚìãâ…ôì÷ë¡Þê8©rQ|â"nY]¯A*¢? ‘Ò˯$é=×b�cÒâÔ·Ía{UHi¨`{ÅE4¿þ™ ·m+ïˆM©ò&ìÄ¼'ÎÌmª9{œ©ø;tO0%þÏsç¶l9†;ž$L1ŒÁmû WN~ Íáz;ôÏÄÀðæ@ªÈöj%}ÀrÆò­œË'÷sIiå]ÀcBIÞ{È Ž¶d@•«ÁÉ+?¡+t×KiýYˆ”^~%Iï¹0Ñß?#¿dSOа¿}\½-ORçxïÄ/0FM ÷ª¡VGGŒpÎ$9€yM@`¤FiGþƒ8Zr¦˜Îo¤Šl¯Vr¿²|k#çòÉýÜERZy¦QÎB~éY4wôbDáó®ýYˆ”^~%Iï¹;Y?4¡¥>uðèýÕ[ ˜)I¶b½»¯àø1ˆGN,û ÀïOGyDÂ8\¦«1f!ãÍT‘íÕJúÉË·6r.ŸÜÏ]$¥•wu¶‘¥¢? ‘Ò˯$é=×KubUÈÜÞÀ¹ù²%žßÂ2Þ‘vÃXRëëF4†,×üi°âléu¸’q“KEwS ×ÿž©1¸{žÍ® Ãiû6çp×(éüòæ@*Èöj•ÞÆ}e,ßÚȹ|r?w‘”VÞc—.¤Ræ—‡¸Ó¤ Na¨Ó· ³/ž‹†<(ú³)½üJ’Þs-v²nü ºûÿ†Õj?ì¿c˜{0ɘ€Àè(Æôáã >ñÉäƒãZrU‘ÁµtlB~åµ× ëe¦¯;6î©+ 8Sö²Ä§à¯—ñ;ÙÝô326C£ïŠ1¹o¤Šl¯VÒ.g,ßÚȹ|r?w‘”VÞE¤»_‡¢\°þ‚]ÚûŠJç©ôÏ‚åOô–5Z'–'0Gkvmxåpù¤›A£è<õYìÁG"^#‘¦m¨Ûœ‡2Ýõ°5$âñ½êmÐK¾kÇHÂêî4¼-‡°±ÌŒ!) Yãd¨ øµ¥»µ·a“öÈqÛѪ=ë®W¡ç,‡7RE¶­½Ü/D,ßÚȹ|r?w‘”VÞ…xa®DvÆF䪿À%c+:¥Æ¾³ÆK_@›…üÚv +¤£¥ìÏ‚åO%¥ŸkJ1ØtáY0°ˆ ø1òÇÜ4¥—ðÆá±6¡<÷`Dð‘ˆ×X,˜†ùÖeÔI ÿÅ€Ãb÷&`Ô|žÖ 8÷³´#X1°©ÿô¼¡‡‰3;b’©µŠ’Fžò‚ŒÕXƒ{.I€€ñ¶z|Óô/ÞHÙ¶ roÜY¾µ‘sù”Ö±PZyxõ+ê¶¡ÚÜÿ¢_¼ [¡Ûµ u6eÌVôg!bùSGéçšREê`WŶvÂïD›ÉŒ6ëS .¹NÄk,$øº ×ÌN±Råb¯z'ò2s°ÏðkÊ & Á~÷Ã`¸N·_|<gûm˜îvÁ›¤Ñøi»Um0oê€ÏqžEcs3 ÒÍ´m§Ð6ûÊÂàî*ÌÖ(×8Z Ù¶ roÜY¾µ‘sùä~î")­¼áfz–›1´dÃ.`¢ó Šõ=‹66“#%–?u”~®)Uâ>–”ˆ×7‰¾Æ½P©v ¶µ÷õ^]‚¿¦#5hy±–q˜AX*÷†njM ÏpY™E(;ñ14Ú‡bˆ‘'ŒÇÎÁ‥b ¶êž`Z…ÃT‹]9›ùî»ÈÑá ýúJ惻,ä—|ŠC…ù(VïAiÌëhÖ¿D´²mAåÞ¸³|k#çòÉýÜERZyìu(1ºC–à1¢$8¼/Jþ,$,ꤷ¬üx¹¨3À`×àä­b‘c�3[Ý{ÈØe€{AU™‚ÛplmÿŽ´FÓ§øºÂP+*³ß†FÊT)ôàù:,Ñ@b ¾nk£´ú{Ø#§ÚM;pý|;†C—÷ .Ã~1¸+FÝãAñÌÏ%D…½¡†˜ÖѬ‰hÿdÛÚËýBÄò­œË'÷sIiå 7mûvGŽ® w¡ó©?ô@À+Ûy¨9“,ꤷ¬b‡ÖtÚ;.4¶¶¡±ì#hÍaw‰¿Eé'Ç�FÀTovo= ë\V-  gcÙÚF`fž¢ñ€–ßÿ‹ÖÚ"¨²OÀ24¿Ë„#GnáERcëixºö±ˆ�F,“éª ¡‡Ë‹ îæ¯øßÒ~Ê–ˆöO¶­½Ü/D,ßÚȹ|r?w‘”VÞ†Ì(ß^…+¯³ÍH;W¢~®‘¸ÐR¾GlôÇfËœ¢? ËŸ:é-«Ô¡]i3ÃlÕ¶** àú$Ç�F2…áîÔמ‡Ù)ví¥�æØ1Ô?ÿµµ˜†¯û24Y*d¨ÞGÍ&]?㢴–¤Éšä„.Ë|/‚T”$‹˜°Õ£`[ìSRa¥�¦ïæmc±¼Æú'Óµ’mkŸˆ7—L,ßÚȹ|r?w‘”VÞ„°T¾|óGžx¡Űõ2Ê‹ P¸÷(¬/ÅË‚ü)ú³±ü©“Þ²ŠµÑøÄÊ>5wôÂ\uzÛ3ñÏ.8Ìõ8mŽÈE)&×�&™|/1èKõ xžL5(»ðmX çoq¡¬WaŒµ<“ðt^Å×Úï`ƒ­®9Å5¸nåw)$íŸl[{¹_ˆX¾µ‘sùä~î")­¼‘ÿþëD¹ÚôÐ+æB»Ò? –?uÒ[ÖøzzðlѼL?ׯ mXºK<…¡¶Ó(PÈú³õëM `Ò%ÚÚ°iøž|ƒ]o£k2ô³åLcÄÞ ~Lnñ[$>ßÙÓ=ؼ±<ÿ͈öO¶­½Ü/D,ßÚȹ|r?w‘”VÞ ÓL+ó>•Ò? –?uÒ[Ö•çúw'W墜#0i&vªÿAWÌwÿ£IÄk¼ACp<ø:­uz#š/|Š}•ߢ;Ú>:‹Ì`ÌR÷ªïÀåŸÆTŸû²ÞFaYJ5õxìSÂjÎäKDû'ÛÖ^î"–omä\>¹Ÿ»HJ+ïz¦ôÏ‚åOô–Uº#¿Â\ÿ€Öö§Lûª@Ó]­hõ.ÕÙƒ×ÖVt­Ð_þ5Ö1®•n…*ü;¡zÕ­Ïb‰”ñC£sRŒg§HoÐ\‡+ðjíÚÖé¼®•l[ûD¼¹dbùÖFÎå“û¹‹¤´ò®gJÿ,XþÔIoY5ןÒ!¸I¢ùjp„@»èøe…‡—ÙE_ ^¢¸ât”çΧQQ|tÅø“g~Ï/¸¥¯Ër:Ãϰ¦búU�/ZÊñ¶ºf›;´¿X–Á.Ǻ¿´GÎ1ÔZèmýªwPiy‘ =rÖD´²míå~!bùÖFÎå“û¹‹¤´ò®gJÿ,XþÔIoY1ןÒÂoGchü¥’˜•2ÐIÇr¯‘LaYÈ26"§ðC¨‹ó™u†¾Ø¯ž”1ìèìèÉñío3¿‘å&ä×܇wòwX.žƒ±k°×—‘TÇÖJ¶­}"Þ\2±|k#çòÉýÜERZy×3¥,êÈ¢¬kšëO©7!ó§øKé?ð¨ïÅëðšÂKóUü°l�s UmC¡ÇÑ ¡­êXzi˜oAUøW´:GÅÒ˜¢}`¤M(«PÛö"ôïJ¦0âøU¥ñmBðapÐö:.íŸl[{¹_ˆX¾µ‘sùä~î")­¼ë™Ò? –?uÒ^Ö5Ïõ§Ô“FÊ wÌmô0>ŠÑ%÷•2’Ím¾¸TMX*‹]¸)üÑÕo¼‡´ÿæLì2ô/L‘äø_ Žpm™ùQïEq^–øÝØ„íCŒ%5xz³$¢ý“mk/÷ Ë·6r.ŸÜÏ]$¥•w=SúgÁò§NzËšˆ¹þ”z+±Fq>Ãséìr‚†=ŸÁ¼ä¦‹bd:õ‰/ÃÖÍDÒ:š}ÐÙÇCωÕz?ÂVí£ÐÎ÷üŽïPQ”ƒ¥-I™%ø]è¼^‡Ê 4eŸC×òÃÜÐ5.Rû¶Öc%²míc)|:±|k#çòÉýÜERZyW¢ä÷£ôÏ‚åOô–51sý)Õ¤ÀóŽ˜ÿX:ø /0à_ú7g#¶çž€Ùm­Ó$<æÈݦ‡cÉiçãÐ(…z™cŽ{ÅÐ8N—è¾yµçÌpN‰µÀ;|¢–7LZ͸·¦¬lþIñ̽ÖÚ¾Åò|Ù¶ör¿±|k#çòÉýÜERZyW¢ä÷£ôÏ‚åOô–5sý)¥ŸõšrèÌápÏo�<  Çð n,7J#¸Ñr0ª<ñuZÚÑí>ÏÙÝŽ]9òTYøÐзLà1áGð4)K¥FÑc÷,ô¢«ëŲAÜj ƒq±ì=dŠßOé;:¬5©Ö³UâwkùéëÅZÛ·Xž/ÛÖ~­o>ÙX¾µ‘sùä~î")­¼+QòûQúgÁò§NÚËʹþ % 0l‡Y¯EE‰&bÄC:v"/³tÅζàmÇÙ] ÖÃ…Ç&äWÿOÚ¦L¹a*/Á‰3Ѧ¥…Ž3Ÿ¢xÇEا]Æ ØuÛ±¡¨ WšçÒ‹‡S;œËŒjÍ“¦¼]CiîÆ(ç6ªüã0XÓK)˜ô^×"–ç˶µ_ë›O6–omä\>¹Ÿ»HJ+ïJ”ü~”þY°ü©#‡²r®ÿz$`²Ó„›1Œ÷“1éP]¶_ |ö£¬ú< m}iÞ¼Ô £&…{#³È㌋¦@®•42y»#H¦ˆí«!mdYˆÜ²óh€ŒW¡U£Bÿ½øçVØGÖw¦¿µ¶o±<_¶­½Ü/D,ßÚȹ|r?w‘”VÞ•(ùý(ý³`ùS'½e†÷Þm<˜¨3󦫶Ðâi’ŸwÑÿåî¼Xê—b›þ5ýô¥eÏ’A<êtŠ¥L¡Aûñt¸Â§å=G¯ñËOË{M| O+Ξ»‘M lê¿DËšÖÑ(ÇZÛ·Xž/ÛÖ^î"–omä\>¹Ÿ»HJ+ïJ”ü~”þY°ü©“Þ²J‹°—ØÌ0û,KfŸ¢ô’>·µî¢/eû—¾ ˆ<¾Ã¥Š/`ZÓšÕ’€N4Õ}…†[=ð Òc+nßí‚7飃Ò.ú{¦}Ä·Fð¿€ýõK-èì~cðK¤s¶±<_¶­ýZß|²±|k#çòÉýÜERZyW¢ä÷£ôÏ‚åOô–UêÄ~‰ª+Òt–¹Nk3®iËPª5Á6ø&uµ”d™ÀsÁ¡àøç6²Ìy;óòQjìA¯ñde¼…"]’½^xqÇkšñÈj…uÁñƒ±PÜc)øž×"–ç˶µ_ë›O6–omä\>¹Ÿ»HJ+ïzÆÏ‚”AÀD?þŒìM=AÃG`›HönZ)øXë.úâkÜø†)óXø4©ð#†LfÉ2ýº­êÙßS4~ò7X¥úèþÀ7°'}pðFG&¯‰÷X’Ä-Û¤‡·ðShŠ],Ï—íÕVî–omä\>¹Ÿ»HJ+ïzÆÏ‚”AìÄþpÆßvbÝÿ½‰ª-ÜF¶¤�f­»èàjhÀOËö£øoÿ?йÒÑÙÀkù §-RšäŒY¾Äq‹áh‹Î%a'~i=˜ÖÉeB–¸Ö†q%I<×Â`2‰[P–÷ÉëzËóe{µ•{G€""R&©#}‘*ÿûâÞzR"A»è¯¸Žæ ”^~ Yà9:›ê¡møŸøo<°Þn…Í»ÆÌ`3ý¸ùqÄô«à¡BvÕŒ…~-q–þ.,8b^Æ=–$Ò9[ž4*e‡EÅ9s)§ç§-®ü|0DDDo±Óv£ú=›ãÿ†/QÓâ ëx‘Ü$d}ÓW¨»÷0쳟ýü;ÍWpRýN(xXn Lh±»*…;ó‘[jDo3ög© *ºˆîµlr"¸`Ü·3”nx>±€Éü.)PJ8é|hqêÛæà:°oOíÆÛê3¸öúß–lGAÅը׆q¥eúðR0÷3®œÔ W%Õ³l–×ÃØaGOX¦70DDDa‰50Âohüàè3O_‘Ö¼‹þ |==xöúæî„W¢0S%ö½²_zÆe7[”6|,ÆöÆß¤š„ÞÆ*œµŽîÐ} ‰¸…!Øt»‘ý¿.¢ÃíÁÙ~¦¤e!àÀËàKK{¸[<ýk¼ U9ñeç{Ó÷XZÔ‡ £¯£ZM(@Î܆Rm3:³³…íµÃ�†ˆˆˆ"D±âñ?/¡4û}ÔÙÆC¿Gr”˜]ôÅÀÅc…Q»þNx…ÇPL#p‚·_œþCÒ?5fÁñ㌼èÔ–®qÇ ,•{Qmî¨ ô"+³e'>†FûÉ]Aâ°#¨í ›¢7 ß“o°kC׆Åaa~NÃdJuTµ%îÁ12ú»è>?:0DDDo1€‰:ïò߀sê͹S¬T«ßE_ÚW¥úŠí¡å;b``„ÕOæ­I¸n >Göçh[êiê4MpŠ…†ZQ™ý64†^„~4_'aÿBÂp;j ÞEñ§'¡Õ~‰ªC;£R!K,“c-SãÞ0R]X(�ŸËŠ[ú/ Þ’õÉ+¸û:KÛb‹Ÿ¿""zC‰¹—âå4µc–4%•î /¦»ï”.‰ÙE_ðõâçà”±ÍØ]ÿ�ÏýñSxn<„‚Š¿¿^£<LwñÐå‹#ŠBÚæ€–ßÿ‹ÖÚ"¨‚‹ç§àw™päÈ-¼HÁW5x~µ¨(Ñ@­)Ç©+÷áLÊú›õkÙ>¼4¬ó&N|ˆ¼‚ƒÐ^³À拟›™F™ˆä`#öÖà…ÍÔé/yÓð9;ÐbºG¦šix[[ѵÒ»«­¡†f #vÜ v*Â=%ˆå>´·ü€»¶ðì8ËIç¹OLÝY¹³7»î¯Ëg[JªI<¿õíë‹v* €x†HYÄÀ3a»è‹Áûˆ#˜jWQ ´F+<ñ2´ßþà (Äïz÷eh²T6¬yàÁ¤ëg\”²£5Y“ð壘x¾ý“oÌ ‚ØúðÒú+:Œõ(/ÌŸÃ,dDo¸I¼ôÄ69¹¤þÕx¯ú\þiLõ°/ëm–U TScªViªËJ)?O£¢øh;¡25fAå{_Àì‡0õ†}9È,ü'JBûx8ôKËIç¹OPÝY©³wí ÔY¥)¯;‚߃®»sŸÒ´ã9)ô\ë.ú‘‹ø¥ú8�«Q M¾”ý˲âú„ä;û¾—ô­§ï…Ö³U0¸ü¡Çë›Tã"ŒÀV¯}xÇò|0s„ x¬·¡¯“.Ê 0XìŒsZÁìf<—Q']Øu×a±{SÔ‰ô Õl_ánÚ8ºÌð†%Î8Üá ÞB/ºöc¹¯ªàëBÓ±c¨0€)ß3ô¸¥¡gé®P?lÖ.8“Ùˆ £ènªÁáúÂ35wϳٹÃa8m¿Àæ ËŒ!+ƒxÔé\þ³žzݱb­H·°Œ. X*ßÁÍu¸¯âØÐ+ìµR>>€AwNlth2ÿ'¦»”i­Û!Ó¶óгMcÈrÙJ‚OÁm€Fk¡~§óÜ'¨î,À4_DEþ&±ì‘[z-EsÛźÔ×cýáP¶')}èW¸|¦.=;ž“‰uzÍ»èKß‹hi”­xüàûÙ,Q™ÛÅ@¦#Æd� & Á~×$~Oo¡3%YÈM€ßq ¥¹s{›,<TùÇaX6ÃÛú ½×xûYÂø(FCŸqðù+`�#‘N²þ�²¤ &å5ß+åíÎFÖ>úb\Ì(uXôšÍ³4§{Õ;‘—™ƒ}†§âe+ÙÜ0–ªQq&üÎhÄqæS—š’ЩuÃtª?v.Ìfc}؈²´0[ípG½‹2›G~cñI\iøe;ÿ"žûíøë·Ã>ièXú,²@ß=*6‰7Ó׈wáÔ•œ)û@üì7¡à¯—ñ;ÙÏ0#c34ú®D¦šx¾+«p©9¢CöúhÆ5­Yj£ é3>†Z‹½­_¢@õ*¥Ý•ý½0©‰1U«x±ýá[XFçC¶ÅðQtžú, è�¼j‘/-TÍÌC±Z½…9Ø­Q÷`˜“Þº=g¦ï*ÔÞÃï½?¡¶à-dW¶bH‡ËT#-1üÛâ¹7CUÛPèq4Ch«:–„sŸˆº} ™àú}¨Ä︺¾=E´ù,<ªœÝ8Ñpëõ¢éð‹6Ñò±‹¾ô½NçM¡•¤3 Y"H7_ ‘[vÍ ®ÍW¡U‡ö·i…}d}Oà”êÐZúYÒ߯„Œ(x’Uo¡°ö'8ç:Ûq]èç6uÚÚÖÞ×Yâ»Ø®…À¨3Cb™#)ÚþíÌbGäYX‡Sò-%y(3ÿ)ž¨ßиý/P7ÿ -€öίpz<p;~‚öx3\ ¿¶OÃÛrËÌb÷KìX4îÏ¿¶Tb·ö6lR^}·­ÚÓ¸.»]s—`š/UÌv¶U[Qz­gÙѯT™ì7!¿æ>¼“¿ÃrQ͸ë2‹Lç ŒŽb<XfàwµB»ë/Piĺüº^$©=Óý¶liÿ6ê2…‘î&<¼ÜbÒtÖí0a7fTùµxàƒË¢Ïý×h²¾Œ1€©Za´Ã«¶*)µ×Hb]ò>Dƒôšª÷QÕò4µ7(cpÛ~•“bGì°´q›ƒb½JO�“ˆ5F”zÒwr­»è‹¯±ÄÌüñ÷꾊aM¤9 Ùډ팧gωmÖ‚¯µØÔ‰–7d­¦Ô÷[K?KzþJÀˆ¦muØœ±÷±’اZH÷{ÈØe€{A…ŠcºÃZˆAÄG§Ñ6ÛË‹NÚˆé£ä07ê®ã‰;bû™U{õ°I+©Y[³7üLJOáì¹ X¡ÍÌ„ÚØc­1ìŠÓS“Ð`Id?[©–übYõau@OY=¾Júg¯hSȤŽýTKSb²ö¡¾ãy u6u_n5HOñ⪻ ój†Ï¥ –sØ%íôœ·{ów Êhƒì÷΢8³fùú¿ÓO ÛúÑ¢váRa#£‘o:ëv1ˆqÜú&Ô±‰} ܬi ™?Ãsé`Gp°ç3˜ãØà- ©;AbÝaD¥øQå} ƒ=¹£_Ë“¦ö®V–ÄÑ’“iè(&b¥ÞRÁG<»è/^Í̳ô¤£È ÙÚLÃûÓ ´ MF\§ÃùñÔd‚mBöofÕ¤>üZúY `b5å@ãîb‡CÚIVâƒÃpE99(iFÀTovo= ë\…ô÷ÀPñr6–¥f¦¤nùÎÔ‘*IF�3Š»Gl#L;pý|;‚K…/ÄÎÚþˆ@NÚÉ÷£Ùé)ÁNÞVœêôÀ¡?Šƒ__A³ñ.܇mÕ0zF"MÛu(¨jCÏÙ/Ö[§:ÄÎ<xÍÍ0\úêm§Ö–Ï>%&á}ü÷`ÆU~ ZúÆÒØ1[lþ.zòK>Å¡Â|«÷ 4Žéy‚ï71�Þ~Î+ÿ¶aÿ욎à…Z:6!?S ‚‹ 5Ø]w_w:Ðz¥Û4:üSzü¨5ÇoG\TÓ[·_{=£Bfþ|vh;¶ïÁ®Ò+èŽ1%¨àlÄöÜ0G27 ùr·éáHÂ×$ug–XNË_Q”¹Yêóèˆx/ÂË ¤kBzp¤ÿj²%b¥^"vÑ—{fG¥g!›½A:{mZîM‹ =k½‘ÞãZúYÒóWÂ�&H@`ø nÖÿçÌ}˜ 0ŸÏ.<Šyh ÃÝ-¨¯=³sb6€ -âMþ½µ?a./‡a™éN‚Ë€=åÒP^¢yðÓõ‡‹8M3OoãªMêž…¦×eUDŒÀˆçÜe±Z ¼C­¨Ø¸:ûDðŽ«éÔ䨲ðnÞ»ÐÝ¡ßO°€Æcç`ñÀR±[uO0-Ý­6ÕbWÎ&d¾û.r¤iJ¡_—%©¼ÆÏ¯’:öØe—§þ\†ýP©ŠQ÷x0tFšn4 {Cí²õu^èb z•ÆžùŽ«ôÞ[¾B¹¦• mÉYÇ ¸`Ü'¥vŒvñ ;T{ÑØÞ)NsÝ‘¾ó»Uo¡¨î!†Åó°Ö¡Äè”]£Ëª„Üh9˜U^9t-íè–†ý=pv·£EWŽ<ñ½|hè[|cÍQwD—°…‚¸,ÍEtôE.~^iÁs"I#/<04@«=]“9ÎÍ)kŒ(}Ö²‹¾Ô¦Ê=³£ø]Ql2ñüš´8õmsØoimêl¯¸¶.Æ„Û6oš¾ÿÉ']×ÒÏ > `^ Ë6Tw-½Iù¼äՒ檑[y'zG.à†¹r¶é{’ÐÑXj Œ*´hXlˆ<6´;¢MÙ˜†ÏnBmÙ!T_²è®ê´Ã„óm‰Ï›6GðuÃX{¥Õß/îü‡ ÉQà,µ;‘u!r�/ÝÈ` LäÔʹN¨WüoiŒwy¥‹m5ªÅz¥f'Ù ÆÚ.¢¾­?¢Óy¼Œ²›pzë¶$rjìl�ÓŸõ+Å45v–àmÇÙ]‰òß„ü꟒´>ug óihÔj¨—<>DaÎÇ)é¨ Þû¨ f>ËB^ñ^¨÷"gÃû¨n\˜‰_cDÉ']O׺‹¾Ô¦®u?×P-MÀD?þŒü@¦ž aÝ3=SªC’Õö³æž¿0A>8®•…îdÌɼ8'žà¹‰ƒYo!¯ìZÚŸ {<Nt·ÿ�]YT>‚Á•Œ†Å SE%.Âî6êQ–¿M¿`P§ S`¯e®}²‰°á_BÍÐ4´£oQ‡º †úe0z$6ä¶zlk€=˜ÍOê„áݼ͡yͱt’¦1Ü~õßÔCÛð#RðÀz»5J©³ÐŽÿÑžCÃ-iôGzlÅm¥¤óœøu»¡³¬ZäHw¼æî¶›à÷äCuÙ~±Ó¿eÕçahë‹s*W<Qwb!`²Ó„›I`üpè‹¡*:‡¶×M±>t¡ñ`UúF<> r÷}EYû.úR�™œ#rúÜ ƒ¥j×P-M<¿?4¡¥?âºÜû#ª·¼1Ó3£õáãég1€‰‘ð¢¥oïCÙö:å¯ànɳÍ.Új[ìE[x;ê‚‹œçƒ°Ð¡Jæ]¾(ûÀ£xÒ ÆÛû›áR@;–¸¹ö) <ƒ¹æ@Ä]äˆCº³+›éo“ðt^Å×Úï`ƒ­®9Å5¸ó"ê¹ 9(Ü™ÜR#ú{›±_ZóStÝÉŒ2¥Å¤;Þ‚*ç}ìÌËG©±½ÆO•ñŠt]qŒpIÓ=~Á-½„¥têÐìÝÚ|]ƒõ%¶:ääìFU”¡%ž£³)Á£d­u'ƹþ¿ÜÁ‰ ˆ–"­‹Ú…]†þˆ²‡'z™ÆøÈXšƒ 1 ³šqï É”¤\Rð»Ú]ôÀp ÕÒ–áR!s{ú^¸NzÏáâígE>?0¢€õ+ìnø¶Pâ7|Kö¢­Ùy±&Ýç(ÓˆYMª/|‡6g²vÏ6¦³s»ë¡¿ù..EeS<@º:y šk/+£è4Ü“ñú±¾ø'cø^I¤Ž_1¶¿Ÿèm¬ÂÙ`² 8ôŸ×–$M0 ™zö"-%úøäo³I:=Ðøö˜úxa R3·¡ä³Q¸å¨w•'}˜%&ái)Áã’â©;R»,—¹þb=°ÇŽÝu¸÷8,sTëeTl+ "Œ5§S6# >ÄŲ÷f§"-8Òµÿ­,»èG `¤ÌŠj-:'ç¾Ó+0\Cµ4ñüÞøt÷ÿúž‡ûïŽ{´L¹¤¶d^üý¬…ÏŽŒHp}‡Oj`èõE]ê÷àfÕN|ÓbW±Â¦uÑV:wâ¾ë¬jÅÍþÂ¥³“—ˆ¹ör0kK{èó0˜Nòy[ ñŸ­­ØÆ0o+¾8ý3†¤74fÁñ㌼èLúç€×òNo:HS&¾Äq‹áh‹ÎÅ–YJ3¼;Sìð×ãñ°Ø±˜Ë(͇>ú}r÷YBÀZRi_…Ð㥥1x\R<u'ÖK©è°Oá¹ñ 6Dý÷÷°£ñ©XÛ’Múl·cCQ®Dî)ej‡Sžóg)Ø×Xë.úÒ÷â0ö]³×ˆ)Úôµ(“¢Ôý€niƒÅ@/ šåö’›6®¡Z‚Ø…ïÿ(eZzrHíÙ¼øûY Ÿ˜ %Èî ¯†º8ovÇ䂯ðxÙiasÒ½h˾ø…´”@]÷#lîÐôÁÁnÇš³=­¼T͵O”�ëQ–ŸüŽ,8d±û~¸èÁíÜ¡Ê?Êú$\7F¬O ÙŸ'7ÍõL?n~¼5´¯Bø¡BvUŒ)¥MÙ6gÎOš«Û¾Ç­–¿×J£•_<¤¬n†Ç+N;I_𘈺#uԎͦ³^R’6Af¬çê` |^ü¢ãe^’îˆÄîESÚDÓ(déç(Aù |Vvåk 5ÿ¶x–ÄÄ49‚*í÷°­Ôw᪨5-=I¤z8/þ~ÖÂçGÇ�fŽ0wç÷¨«,z¥»n©3±QI뢭¥2EÉèàJ²ÝÁ]sˆg×Ütvò‚¢Íµ¯F“õOù5ÌÁiMÙ(ªÒ‡ìͦ6§ 2…“îº"·ì|DY¯B«.F…þ{ñÏ­°Kwü–$ݹ>„‚Š¿‡=_<LwñÐå[ÜùJ¤`eiZ†TÎùÛdî€c0ÖÑE©>c›î‰øNDRÝÎyy9›BYú‚¿”Á,d¹eÐEÜaÿ^»Û‚çÓ„»öˆõk ¤1xLHÝ‘:{‘sý#ÍÝ LÁ7=0€¶ÿ9—¦õD‘†þíÇÐá ¿n=G¯ñ)J+Mñët¢vÑŒÁÝÕ wÔ»�býxù'^2’]…õ8-=~Òub¡øúY‹Ÿ¿‰·¦‡ÃòxÝ/uW$U‹¶ÜøA߆ÑðÆcDIøú¹  ô0a¤Ñ“O΢m(,Ø Áq³b=I_'oib£Ç4§” ŽV\¼;¼X{å7mL¼zZqöÜ}xLìœÖ‰–X ‹¿öÛ¿¦a3©ü¸m}¹ð¼Šõól©´`5ÆI áÿQ­á Ä`=g Š«¢¤”L´À3´žÕáçû/IÍE|Úò<ôh9Kf´;¤ s2%¢îLcÈüö,7 Xú>íù 椴Êm=Q¨<‹®YÒÁ50ò•ˆ]ô§1üèž.[åÇa×ý•õ`UâŸ.µImÉÊ–îgÅò|0±³¯~Ýx‡±.º˜´.Úz…Ñ‘ˆï© `ÄÕïh‚&;…{¥,X;‘'í¬ÚíãåîîFHW'/XþµNUI¥) uÔããúv¸ÂGû<vuwd6…l–¬°>+ aÝM5³›ÉNÁÝólvè=0 §íØœÃIî@K¢¥WŸ;6!¿òZ7"Œ‘0ÀôJ5xL]p¿ªºFp6b{î ˜£®Ç›„Ç|¹Ûôp$½™–ßz"áÅm¯iÆ£ðkVðxŠAÞy—©Dì¢/â|ŠKß-¼1~\;uV)˜UQÚ´ô䮓óâïgI?_ ‰§Õ‘Sr®iQZª…)¦E÷BpÑÖ¸,Ú|±,ƒ=h­Ûƒ ¹GÐØùûlÇo²§$#€‘ÌÀïîÄõºã( îÑ€–î—)è`&B"¦ª¤P(µoø—ÿõ!»50«7Ó׈wáÔ•œ)û�YbÀPð×ËøfŸ4¯Xz¿›¡Iö|âàÔÆ<”é®‡Õ ñø^ õ¶ è¥?ßµcdUeÀï—û7DiÁ}‚-s Ê+‡®¥ÝNi'þ8»ÛÑ¢+Gž* úR°h^,JÚÖ-%ʯ’úŸâ'ÍöXkf½e˜æ‹¨n¶º¹¥×àõ—[ÎÖš^ù¤kļøûY ŸÉ„xAû3rJÎ8ì •¨³Å´TWVÿþ˜»3/-°“Ò,6AnR:¸Ü3Yo3OoãêšÏ]*:y šæ”2¼h9cGÄ]SñHú´žT™†·å6–™1$^œ{ÄàÌ€_[*±[{6©ê¶£U¼P_Oê|bñ"Ôzç~ö,¼èˆMý§·Ö–Ñ/Þihi¡°à~ ‚·gwý%xMYx¤r³ât®'ŠNjEev”}ÃÉNýOñ‘˜µ.â>…Lð÷Ã\ý>T›¡®oOÑ÷‚Ö+©Î[ºŸe­ý ÿ;J?káó£c�#ñ˜Ñ`´‡¦â„÷´T 3¦}`fÉs7w~g;LæŸp«õ¿ø?¡Ÿ&ÎR Tk_¿’ÂNÞZ§ª¤Ž0^oÅ@ÄԺȉ¶Ä¯3OaºjÃÒ“ff/Ò³ß=iø=/ÀXõakŒ·Õã«$gÂ’6‚üñû¼úøÓ< MZöà;èVÕ&¥3¸ëνÛx8ѱ_±îDl›M:T—í‡:8J|†¶¾fJçz¢h¤…Æ¥byÂÓü§2õ?­ŽÔ6®uÊHâ÷Üû RÖ,Õû¨jyšÂï­WÒ5.Òâ~×À¬ÝRk`TEÐ>ýÒòÒ›6o:ËwÀ§ž@wìFF`Ü0UŸŠØK  ÚÒ2hM6 ÆôÞ×ÁZƒ”IbÀ˜pËÜ-\a.ð´]‡‚ª6±«<À¼uª>Ç<xÍÍ0\úêm§’œF9;ñ'uÚ „?ð Fº£ªBfÞN±ãþ! sÄö)žQ‡ÀstüÏYœNyæ¬ÕרÃèëüM:iŸŠzè[¢oÅ ÿ,Í뉒¾WGg7i 7Þ†ªÍ0G$~ ¹Ht�3-¶«FTæo‚*ïSbžâ4{k°-3uºÅð\|gZL÷Ò”UäFj«çq Lòx~DþþÂé8×PSsÏcºÐ§;mžDTVáRä†d¯éΚYI™BæC¿s0¢Ñ0e¿„ê~‰íNi:;yŠ“ˆ€1UÄ‹­©e¾ +ë·¸PVˆ‚Š«° .s 8a<vï�,[°U÷ÓÂ(¦ZìÊÙ„ÌwßEŽ&Ék~²§¡­`Æ¡Ç6ÕNhÛžÍ_Cèn¬Àá–:*éÌœ%Õ¥6^¡îDn.5FÛ'k´Ä)ä¶žHšŠZƒ#-®°÷/vBmçQ¤zu¶ñÐÏH^¢0qï¢?Gl›,EQæ±op‰.„—X²BJûVã½ê;pù§1ÕgÀ¾¬·QXVRM} ö¾#¹“Úµy\“<Q×ÀHsïKQÓ…^úpÒ™6oé�¦ùRò¥‘ ÕV”^ëIÂ>!nüÐЂß§ßy\øoK5¶djcÜÃ%}<åI@À˜2b§m`�/~¨ð=ù»ÞþF×òwê_7Œµ‡QZ%Ý´×Ï·#¶ñÑÕJÀNüA8G @ÅÚúºMš'¸ Є¦Æ ã£]ò&M:3g‰ÿb"6žÃ|x‹Øþ½õÉo`´HkÇ£ÓbÄ¥“än(DmGä÷)d¸žHºIPšü’8£=ƒSŸîBŽJ…,MoË–À¬}}^¦?€¬ é󾈎>)¹Eø5|�=†o–ÙHªÏÇfoî/`©|4ÒtïWpŽ¥))ÉÉÂ>|üÓ‘ÀÄ*ÚÌãVèK·`sMìr­$Ýió¢M!›ßuÕRF‘¬}¨ïxv§-‘–šÒ´ ùڇ♈Uz:yR‡ZYCá‰ÓI Úêq°ò[t/—"[i”±¿0û]“X¿n¡ÓíÁÙ~¦¸ÖѬŽà³¢~Çþ…›Þuþ„+ÅÐèî?2ŠAÙ27iÒ—9Kì¨ýpÆßv¬ÜŽq*[Œÿ¶€Wb»¼5ÿ ˜]ãQÞㆽˆ]ïÖÃö*¹Ÿ…TY& ¼€ÍTÊ ÔšrœÒÿ4;Ud*»èOÁc> ZÚö`©Cšnúñ2A4:{ µz[¿D*”ìÁß Ó‘´¼ý…ˆ’LºV.çtäEÏ‚Œd‰50ª¼c¸éŒõ.£œÒæMÂûøïÐHS=òÅÆ¤o,‰epãF]#þ5×A m0ÔœAËs9�‘”6ž¨€1E¤ý}šêãÞ}\i”—܉ÿ\1wòa©Ü‹js?üÂú ‘•Y„²C“äÏKxnľ ‘õdñ¡Úш¾¨Õ<™³¤;ÍkÝØ‡þ�ÊÍ,Óþ óTôŽÔ¬AQN²’µ¤ï¢/`²Ó„›ËŒâ̯û¯=5b`>ù;,¥5f×Ä>kù›Nj¯çÅ?yáó£c�#ñüˆzCׂ;}ÏKø’|‡4)¤uÆÏ¯Ú„¼rC 6‚Œ6¥I,†³”¶à…ìO¡Ò†Â•0®v …\Ò(KwÍ£ìÄi}—¦ NñfÓÖ¾ ¡iÞºæë$˜½DÛ¹oÐ6Þ®E9¤Të¡g,´T欻xèò­þœÄD `¢mlëÅ`Ì›Dz@ ”"E'É*ƒy¢y‰ØE_l×|/_ÿÿñ¿þ. ~ìÖÿÀ.%Í™ˆíTè/–ðapÉö#±RÚ'¤5[øyÅ?™Ìr¼íh±†&DÝ­Z›xžÁR»™Qó¸ðÒýGRÖÀ,îPÿÿÔŒìÍu°ÉþFŒÒ†Â•0®v ÅìÝ÷ô§QN�)“Ù-,¿ÿ­µE¡)¥Sð»L8räV’?¯IxÚ®@«ý·ÒH°øØúîÚ^ÄÞሚ9+ÄNÖèF‡x`hßÃ9èšÌqf#”nN]‰ì�úÄß©HÁL:"Ðú!¶kÞE6YC¡x­Óœi„9ؘrÞÀá<iË H锫[ŸÅÞN¤�e‰ü¼âŽÌ�f9K¥N^pÄ·‰×Â}`®Ãb÷¦¨/öÿ„†s7CÓÐŽ¾ð;¬Á£ †ú“’F9ê”&UßìEŠ•®Š²†Â•0®v …,Ò('„ØY辜Î)u jx0éú¥6¢ÉšÔÀ 8 Oµ9…Û‘—[c¿Æýb=Wí‚®[æŸHðÞGMpWð,äï…zo!r6ÄÓ±šÆù8¶WéÃ:xMЖ\|‰íæó”ç…õu§dIgBZ?– `bÞE_ºùó%ÔŽù볿 º¢·Äçæ¡Âhƒ«ïê?¬”Õ <©_AʱðóŠ:òÂçG÷0·pêÔ•Ù/þ·§Pü¶Úkó);¥ì]•hŠq¯ùNpT9…ثމ¼Ìì3<M~'^xsÍ( ñÂé⟔´³b‡ºÞˆžÁÒôÉéÞM  … ˜´šqOv;ñ+)`\à 9¤QN˜Ù)©þN³mo„S0Õ{Ÿœ}$v—Ų8.ã€t>C¿'OÒú•b¨ŠÎ¡íõ¨‹Xö‘.4¬Š¹cu·ù`²‹—°ê¢(¯{Ë.Áš‚ì_éKˆI<¿õ-~’]»G³±‹¾42Y6ší‡ËP‚ [ýÏÐM1PJÕÔÊIß]RŽ…ŸWüÓ‘cù¼ßÜ�ÆÿÜ/g/‚Ó¶óÐB[ÕÎG`æ¦ì@mkïëµ3òš†4ŠNý$tøÄNEZ²‡%Ž0øËÞC¦Ô¹Yp”¬0>”0®m EúÓ(Kfà÷ü‚[úúUNcJ#ÁË_‡² ÂrüKXÆ&1ÜyE¡4Êò%XìÂ.CĹž [›6ñ‘±Þ‡øù¼û®ô¡­®) ÙúÒ™aeÒÚ‡®»WpRýŽØ –c»Gщ×߸wÑ[÷)zägF‹g.¨…U[‚=ìb'}WH9}^qNGŽåó~s˜03Ž`omÆÂN¬à³¡aWVhþJ¤!|˜9áÛt™‚§íÐê®àºå)þOè§4Gê(mdž¢ªˆÍ!¥Žv;œ²››CÀ8ó¦«6ñ¥Ix ä ;ôÿ?#\Òi\C ä…Ó3¯Âœ’Mÿ¦enCÉg£pËPï*‡¾;Ùã3㺣nœ¸Um/C¿µœt¦Ÿ§¿cwî=ž›*ù­—Q±­º>wÀXs:îDéÉ–΄K™ÂHŸxë£0S¥ÊFaùW¸|¦n™ý?H>ÄïȪvÑ0aý ;ʯàAÇmèJÞ?û,ìN)¯/>7lÆjäïFoCO‘Tö i킟×¶Cˆåóf�#ÑQ»¹ÅGpJì ©úE9â…?«ŽX‚iŠFvo=;»S·ÄßCÅÈÙX&ƒ˜ø{¯B³OÎSnÄ‹©ã :ií‰MæÿÀs¶¡µx—á v/ºÓ+Š% KÊMcÈrÙÁŽè2GJöŠ.Ñ)ç§gf!¿äS*ÌG±zJ“žFÙ ÃîL¨ŠêñxxJlt­Ð–ˆß!i3Å£ßÏe2L£\P}x‡Ùx懿ÇxÞÒ™b\êðĆÈz½èx ;ŸŠ%•+?ž9ž‰ÿ/v ]ßãÃWdRo&á4Ž:«rvãDí×#‹ËonJò°–]ôERDzñPhD0Eµ­³ÓΦÜè4͵)ÞXuÒ÷”Cú¼ÖÒˆåóf�3GÚ`îç&h+J¡VïGÙ©+øÙÏþ)SînA}íy˜¥½c¤�æØ1Ô?HÁThYF˜ë|…ÊK�޵ȗÓÌ<±sªÆÞÂlÈ?‰Öˆ†9ñÄŽÅп ýø:\áÓ²ž£×øù݉”:Õ~±ˆS¬·š#~v¶Át”=Ñ)¥�s?TªbÔ=kÊ\jÜQØj“;ÅAJ¼9s~ÓÜwÈ÷ï8wâO±“Ó~oq"ŠÀ$ü1uPÓœb|¬çê`àõw2Ú!÷õvSðÜÖã»Þ³£ôï¡Î6ú»4“ö±ý„+'?†æp=ŒŽ`Šj02·æ]ôçÖÑH£-/¤Q7ýôÉ(‰ e‘>¯µôÀÄLÚ„òêÖ’n4­Ü0UVáRä¨ðã{-Ôû“ÀŒ¢ÇîYtTøÃŽ.oŒgo¦úmÙ(Òþ3lÔe #ÝM8x8ù©fƒë—Äú&Õ¹…‡ ç‚KèÝ‘CûRV™Ï±¹üNÄ.ßé -þLd äÈé™sŒWüo²?KÒc›î‰XEÒ¹Ïyy9›]Ù:»[Öz”J{Ñ„/-Ý)Æc˜.¹*âëú'S×¶Kw»¯~Íû›WÈ•.âùéE‡ø­,9ˆÿ?{ïÿÓôõÿûô¹0YBHüaÉ+†ðƒË²À4[ˆÑ™¦š0ΠкKÐ(¸Ì·òÞV|Í^.êè§je¢Âœøú€“îµri/^e£`E¾½ ï2Zž÷ëyÚ}öýò|¶§ôÜ’³Y §§ç<ÎyžÇ9/'J.@ÏLÈ(EŒ,ú"™­–[¸Vyž*9Hîž‘(d¼Ù D3ÞLáI÷p£a#S¹ ¯<•—àÌ%%”Ä?ÁW.UîÇÏÆ_pïŸÂާpÕA0�÷ ¨ßÿÔO¨}ø'ûã03+Íi;7ÑŽÓgÛð\š˜”ALÒvÉÃ@6þI+¹˜ê‹!£$Œ²¸!9,˜êQ°³æ%2¤Î"|·Ý—SEâ/L’þ ‚Rû¦]&¨rv ¸:DPq µôýÐʹlª´}ëši&=Äx6ÓÑÃËÐåjhG““}?­àæ1ªoaQÈÒšõ²è{™‚Ö„ B×i#} ã•È^ šñf OâáFݰ?¼§s‘þRÊĘ¡"S”±T–FÑ)òPx ÄIÐq†—£P`<pö©î£oUyèAgcv*Ôø…¼~Þ†³§Û%ºù³3‘"KєԔ—ËQJsw¡¤ú ~#y'‹s=á3Mf¾¥ zdrCÚ‚¯•·øM3¹)BNñYÜŒÚi53q›TØž[uÀÍìÊCØéq&×ãyjý> b\ª qý§88-­ü\ È`dù§¡MJ0ŠHŠ‚È~î%œEŸW`ní@ é™YÏ -ù9ËH<ã•À^ šñf !áp£ÑžhÄ–3zæ1n]g#"™L8ÿœÎ(?nºƒÛBôW@‘@Ó+ñ}bBæŠ*R]<ð1ûïÐןF ¯(*Êê y`‰rS'5|Û&Gaµõ‹™¯s&‘ŒìñÚ<R�÷úû#É…uĉk —Õø9À”ÓmºŠ“†×¾Wñ Õ †ØþSÄü°¹eߢÍOÓéZ ”£Ró#ÿoº•¥Fì�ŒdãΗX}^±ÇÛuÆxÝ@�I†|7Fú°2^ñ¦Cˆf¼™Óx¸Q^ÑêFò@$¶£»°9¿2„OŠíQ&Æ\ŸEL޼ŽâACNl&`1|Ž\ILÈÂÀ+L—K‰Ão4ßvsÝWQß=â$È¿¼]ͱ#ÄI¼•Wý69mhUÆnÁÏÄ»D¡97 QæÅM€–xFöx m)(—N¢xÏUŸy[(Ĩ#^aëi‚òâ?ãôíKö †÷ H<ÿ)~í³uâò•Ǿa¼bSÿ g&%¶‚ÈH>"gÑwMãUïOhöDÿ$Ï’ŸÐûŠÎ[8²æ0Òáx…±RŠò!šñf OâáF}'˳°è>G¾l Ÿ€òUÂ…À ]‰*ŠHH.Lš@ßÑ £…Dq,­e¡´»ùªÖè6ל.·Ø¸h ¥«I½V™ïFõöJtDˆ iО›DlFœŒìñÁ<RPÎ@(?«ˆQG|$îÛ—ü qý§x\¯Ñó_ÆÅ†Ÿ`!§.ŒíIÈcŠTÝ$® ¶‚ÈH>dNŠ“EÍ¿-à¹-{¥MôÝ‘¶1Òáxyל­”0¾¬äwëÁ‹¡ÃF ¯]>ø e‡ó!#αº~òóu>P¡²ì+<ä¤/ZFb<¡fóP¦¾é·Áá ‰z¶Ó§>0c†²Åp & gqÜ0Êÿkï5}?–Ô„<]úÜ$Ñ=<£G¬Œìñ@Ì#ÿÀ|B·]Q„8—ˆÄ}ûRpƒ!ªÿ”/ ,…ç#·T‡‘¡6â•YÑU¼L²yLên×]Ad$¢ÀˆEiÚƒ9È*¬€ªéºzû<¾§}ÝíhV‘Ħ¹(Õ 'M.£!¹{BF¢Ç‹ßèÏ¢ì»~ûÄø®¬•-!S>0&ZìOpóéÛ€MI,ŽÛ^íR–ÿ9tS ÜzëÎIɃ†(ßáÊÏ6aÿñŠMýÉ{°û^FF„P̉@6M¥ùÈ/9ƒKÊK¨=¹92c¿™¾§…‘æÜ$b+0Òed_Úo»Ö!aß>/œsæ'· V*¡Ò$41á&Qý§ˆò[ŒÝMð5/`¨©—³žŸ[4ŸCme¸ ©¼IôCô�Œä"F}b²};«î{“WÁ×3ñu+ÑKEà/LI/„ãÊ¾ø{ßý ºÑàq¦ÀD‹M9ÿyä3…%ZÇm²i» %ðÈaÑØGù†WÒÌþ´ÚÛèµ:ù×s~Úýƒ~Ø£öW!s¢¸&`Ò“< Èå¨Õ<ôšœPí¹IÄV`R˜‘]´Û®Ôø,%îÛÇ*óºNÂñ"¶ìðChïÄù‹?{çÅ\NŸîœˎ^És’Ê›D!ñ:Õ2(D’K(‹¾ð'4ÄGêUdía¤¡Æ‹sŽÃxï:Td§þ×j>ÅÞÊxb¯Íx3†`»ƒÊ²zhW¯¶Ú ý®ùUhŽÒq›[tbQê‰�Zn`&ÑUu�5#pr x¥=‚ì¬"”9 …ò¢Û"Dðˆ6s&Aunñ7¡)ËÈ.ÊmW’oq\o12æðÔ›¸o1¯,Ç»r:LV_� ^›ì‡¶BŠD–bËÎ"Fïžퟷí\’ͤRy“ŠØj4An[ÂgÑL¿OþŠ5$uOÈH˜ÀñZó¹ÊF~ÉI+ÌG±ü”†‰zÍx3†à|ë[áCƒs˜Ð°7‡t#âžêŠE>0ŠfÏuµ×÷](H–oÿ$”ë’:?†ØH À‡µ$Ù×C„Û®dû,Ùt(Y5KÔ·/ÜFGªÍزCnÀ“óÆO‰Ó?À³Q¯’—<Rx“Ò×±9Õ2hÀéçÏ1¸Îð¸ŸãyØy¿Œ¹®³ø¨Þö ƒ[èGÃG§ÑV–áÀXÝ·D!áyˆl2Òáx‘h¯‡ “CÕG‚I‘gK5t¶Y˜êBúkE3ÞL!8†`>¤9û#Úô öE4§¤n̘;=G}¯•T¹áîAÿHÂh7”(0˃h:¬DןÿAg]‘/;úœ£z?~O¢Ä“™Œ o>Ã\@¿.¶£Å4ç{•J88‡ÿ~SÞ8åMô¶+Ù>K&QÈC§uÝþa——0c¹ƒê‚ÒÈNÂq!’㟬qÁ Íÿ¥ó*Š©NÖ˜ª›Äð}£S-ƒȸGåµ[~ãXH*‡óÐGò½õ„^~{k[Ðùì%†}ògµüŽnC* sP ú-ÂMÚqò3$™²Ÿé·_HxÎÖŽŠ¨¸?&ŠBØôB8^Älq6íÕÂê†ÆÎÿ?´9/S`¢ÅvåòÓ¸ä?•QY|jó<ÿ@ÃýŠì¨h‡-äL$'5ØUs£N7–^iq0û]–U¢TQ>‡çióæžIO{–±èü[’Sõñ3‘‘}ˆ³OlXýWI6}aâÁ+®ò,Ïü%>0þ i:ŸòÚðHoÄ|@ŸÆ¦,&ÙgIT†ÇiF“br ÷C.?€â¼l~ü¶¢@¬D'‘—Äz“5rp9í°$% ÂzÄîTË kª ”¬<ˆ—EÛCÔx¢â¾w+òk†qð_´ã¨o]4ýö†„g Lf#/ ¦zìlðå;# L>ÈÛî;ôÞ D3ÞL!ð}EN!Mă8®Âòº ŒŸS7®ª÷°YA’8þ$;R~S[§ói¶ÌÁ¬û'4ºÇè—ÌqØkÿÉ¡E±YÄë{7ðºdwVè+«ð¶míÄM[²üݨlþͧÐÒÿKëS^‘”Ådú,‰­ÀðpÎQôÞTy\(ÊÎAmxÁ)M †âdI ˆ%®)?…J‡¶ïNâ`Uh§Z ðsäö÷Ððr,¸¹ó/ãÐ~ÛQD?õ8UëÕ¨);Äïw¡¬æ[h»_ñÊ=ÿLûÞ†çÑ™²‰ ™/Œô!x¼aëmÁ×Ê[0N“ƒ½"äŸÅMsh+§hÆ›)0„é~ô:}/âä8…º. †:¿@̽Ì9ýq)œ]á7ZŠ"”~­Eת³­Ü<Fõ'°-™™øc‚ž[ÎiCÿƒF\¿Ço4Ö;ÅJó·N '<7‹ r¼{¨ £T9l‰tÊK€æz(“žŒWkjÑØ¶¢|‘Ò ei”zeÊ¢Q˜d›�Š¡À:hLÖ˜ì€Q@£BÅX¿55B}îí8ÆÃ¦�ˆFù˜‡Yý%UÏ?"ŸŒôA8^¡ö&ûÿá²Íx3†‡›1ãÙœèŸÁJl7¯ðÔpLþ¶ß‘Y‹°°ùgþø'º®’…¥5'Úh! À?•µÙÓožhGä$¥ÓˆÁI_”’YþSz˜Ôn—0óªºz’ÀKÆ÷á6–…ë—TQb¥î º/GU3}Ù“ƒqÁÎoD}Ê›Êd„Œ OzçÏ*–Ì×ðiDûð"ªãU<kJ`‘ÄPÿ):“5’¶$3 ÂzP¨P1¢&±,úü¼^ϦõäÙ¥LaÄp¼ˆÌ]†ò§_ƕҦ²O¡ìèƒÙ* !Íx3†0×…ª]çÑ1:n5Cíg8Szʾ"⻘œt!9¬˜919hD§ö[Ô”ìDYÐ6mANñ (ÿyòC´*0©Ü(.bX{ØÓW²œ}8Ópo5G7?‹YILe2 aì÷tǽޑÊd„VÜi0àyÆ(þc¨ÁŽ,e”øI6[I™ `ʕɓa=hS¨Q“pý LÛUTzüb¶ ·´•ªDÎdî3ÒáxEXÏW‹_N#ò³õ` Ûô-ž ’S]g°ms ÿ@q‚³j¡Ùž\B9ñ¿”1¼|zþAUœ³›$1!cƒ&ÆF1\s°š¢ñÂQ(*ê¡ë±`ҹ̈5ö{(R—Œ0œiãVäÇ’ã(™æ‘Î<ë÷宲?ÁͧoÖ'õz˜¢Ê°JGïÄ”'*“5&5 ÂzЦP1¢CŒ,ú¡MÈ8~íè¨ù²MÛ!¯ºŽò!ë&#}Ž¿žß¾Š¦£~{<R†ÐQ]i̳ç³tÔãb‡ÍóÌŠf¼™óüª‡ëáÏ¡‡¨+xÇ·± ~#58nØ�¤)+á[}/ÅCŒ šE1àÿ™!ôèHFþ#8Qr!r(JªpÁ餭­±Ç~&•É­¸­j¿®¼µg/Áð:ÚÍ»úZ%nøŸróHÅ~éƒ.Øtö™§ø|ô|±š�ÆK*•'éH^@„( J¡bD‡YôùçžýÈA“ìCT©4E&k#}ŽW˜¼ApÂr³Ý7‹%Lu_ä×ï¥A4ãÍÉ 9Œlþ3eùuxbŸÃh—Jå×h6ž`¦)‹½¨=,“øMŒ¢ÈxØ £…WP/—’Èw4Ikì±ßƒIe2ÂP¦¼h 7á£RC”9ŽÂ›G’Z9·ÝAeY=´«ýÖíwåÈ/¨B³ÉwK³)  àEh~ø®Õ|н•,J–XP¥P1¢ œéŸ?±˜ºá°èP•¿²¼“І‰ELI/b/Oø{Y.ÊÙ L<¸à˜|Á+í!a”•8Yœ ™$&dblÐÄØ(ƈ²»¥9XƼ§N©Nv·.XZËBßH«ªÖUžÔ{ì÷`ܰ·_BE£Q˜S()É0C)Ö¿âÍQlÛ®‚)ª=thóHKGò¥6t¾õ­ð8‡ {ópH7‚õï®R@´5qóCF¬pX4vàQºÜdbdÑ_a¶®/Q”µÙòoÑc*E‘#™%Ÿäï ‰óx‘ñ§k·ѼŸ)0«ûß'Ð’„ªë0ôa&m”4E¶é&'mîþ†ÿö½16hblcƒÞdwëàÉ잇2õMáÄJÈwVBCþýÀŒjÚ[ì÷`"8ÿIž 3Œi£¬�w‡ø#™GnÃnõï+`Ápö'¸|¤Í/£éÿTPÃü nò®–íò{ñ/4†g¬’p}×[˜<V'2d+®¢çU`^™õrɸ1cîô<{ô½V~-tÃ1܃þ‘d·³D6éC¢ãÍû™ã!Ô©v4Ùhiß$<壗°…H&É‘ìÏ=”Ñ'Ñ&– šÅX 8Ùݺð Açw¸ò³÷šu÷ï¸üê1á{I±Ç~†W`R ‹W¬ëu<Øßʰ•¯C©Áã>åÜÓ =†Hl À-Àfl‡F¥„R©FsÇ¿asFï7”º� b˜Š!¢œîÆæ¢ê€ðõ|Ñ?Íð¾¡.Á,úK°u\„"(q·Ùœ£YrTƒ]5÷1êtc镳ßEaY%Jõèsˆï›H¾#}Ht¼¢y?S`x¸ Jß=U‡ Vßæ„sNà¥öLš8ñû)�²«Ãµ¶»¸Ûü jŽíAΊb&‰ ™416бà=Õ§/Ù]8ÈUÿ×8RuËÖ’€¹üoø×ÓF¨ëîI0¾‰@”Øb¿“JgnÒÏKpÚ~Ã=M½/Y\GŒ&zcv&E&}«¾}2dåÆçÇvcGñ'Ø[ÚužÔPÃüP ù 7ìÚñl> Ï’b  rÃuû´#Á²év¹ÁÐOüYô£Ãb¯wÃ*0~Á¸ tU½‡Í âƒù·da¸ÉºÃH¯hÞÏ—ñ+ìó˜I‰>ŒrªOúx¦Fƒ¾W/ðÔð”'÷z•Y.ŠO*¡1<ÅËW=P×Ü‘`ƒ»ˆIóCü?ª¯ÐpoÀ»xÚŒhÐ{Ô hà†\zèLvŽ¿ÐQölÚ|"À®™ï· º4UÞœ’(¨‰àU=Þ°Eû=:’ ‹W”^^‡"›ï[’öó£(Üñä{Ë¡‰Ê+µp£Z쓽ƒ"Õ3c¶Ë¨B‰nKf Nh‡£h*($4?\-ñÈ_<Dh‹ä¦¡àåaê_Pý=£þG¯1¤û!=øf$IÌ¢Q‘%þq§P×eÁPç(ù":‡ ?.M"T2Wh†öö%›Dû#š÷SÛãÉnô>«{‚©ÕÙJ6†¸[ý1öGõ OõIß"ÞÚ¦õsŽA´×_ASß_¾Ÿÿ(,¢iÏ;å|ˆóòQªà€Ÿ!{¿qR÷Ãéû3ê 2Ù]8xÙÒ Å»ŸBó‚Œa€â’µ•j5¯>&ÆØïÁÄŸ‘=a¸ah÷eAVT¾é%þëøB‘/½@É1aa èͧN¡þÉ8–c°’ ?·˜Œýžß02·I…í›®Þ*z˜8Œ_¡(ÒÁŒ€‹34ÿ—Îû]©pˆò'ä¡Dí6?e° ­ÊÃØ-¹)d(|øç,yÖ ó¡"GtdÑ_ ²±ùgþø'º®^áŸC­0zÂâŠK2÷„ñ@{û’M¢ýÍû©íñä ƒ–¦lË)ÄbÿYœçÍÌ^ðú7N!ájNúüðlÈU¸¨5aÚ5³ñ•ø …ûÔï˽WÉK4}ö Œ$–k�šÃßÃõ:¶œ ©NìP™ì.,üæ×n½†”–À‡+Š‹¦ Ïf˜ƒÛå–x+±Ç~&ÂÜ’úäÚ0! {WÌlVǯP]‰ Â»9ÜR| _ ìã`“l7¾¼ñ ’ÛÒöìÃÒßâ,üUÁ>¨ÍÞ|.£9D1_9-õü4:\ˆq«-†ü‰‡…‘üØl¢ RIâ3°ÜD;NŸmÃsÁ¡)ƒ˜LæsŠ˜TdÑw909éxîx!kÍÐÞ¾d“hDó~j{<éÂÀÍÃÚû#TU¥+ÊP£nÇKrêü¢’Ò“¾Hvön8Ì?âlå1(“‰ß{×W¸èÙǾ/pºË×tÏ:›<Riª“Âþ8ñæÆ¸ŠêÒP¶>¡XYŸÀØïÁvªœø‰ÙR1vª_xI&ç=äål]'IëkJòPÖñ?, i÷? oû GCyÿwOÔ «å!”§Û"Þâ$¯ôÚzðÃ×õÐßÂeR!'gªo¾ˆ |Ðà‚Œ»H·Ú®)XžÜ‚Z©„Jc@﫵¤õåO,øïsç:t£=Y-?¡6§Ä‘Bÿ,Fœ¤g}1` LzÁ˜da ý³é€…܉A½&r›°.©>é³BwV‹á°Må72ãz”’À$jyw¾ÂA†mÕOø-`$`ª“8üÆ‚*Ûô ¦ú@S} eµ*ÔRgB±ßƒI¥?Iäøƒ Jío˜v™ ÊÙâê7vHPB璉ÈrVäºnèêt¾ˆZ„)t×^Mz7ùφÃeéö·Ô¸ˆ0/WK·Úδ–¬O²QÓ9æ]‡×•?±÷}dÈÚÝås&QH #|Å7ŒP›yú³è‹™/4C{û’M¢ýÍû©íñ¤ ƒM9ÿyä3…%²©E,H{ÒG6Lï"W~×ta™ lýÝf~K"2Ü(t?F¥æG¿rôÏ1­ƒuܦ:bÀo,RvÂ/ÄüŽˆ¥£Érâ¢öSTwOye9ë}ÔöÚ`ÑœÀ‘¯Ѧkŵ ±³&J?^l÷P«¼‹^Á †ÏšNà#^VŒæ±‰{épÁÏË„oµ]˜0”ã]¹ &«ï»òse²Ú iÃC¾Ï7P?þU0FÓ&ckᔨ€BûÁ Ç;±,ún&i„È&ÍÐÞ¾d“hDó~j{<©Â@ôµ~X¾´^‚b÷)4›ìâ(’žôñ Lé””#øFS½<9ªTZtÿð= íxª{&O1SéE»ñmý¯©Ž¤ø„?*lxdèG¤–,¶£±oJY•^fœ‹Ñ?,É-Hs=” ?ÁB2—Ú;%K˜¶ßïz#æ:•ôu‹)’êÁ¿Q=NÕuÁ>Õ‰Ê-»=I9Ç�ôµŸ G–ò>€Bgõý½D„=˜Y)ü:Qô%º2pÓàBŒ[m¢€ðúç X’,Ôkxx™˜Å|J7ä°f%@nÔîã•»Kh]}îݵÊÝitp“É$˜E½›I !m¤ÚÛ—líhÞOm'UÆ1ü׊yÄ ó07œ„²/†-ÊNk·+œs #¦Çhã7J¹9ïz(Y ?)”hÓï&/€¸Lu¤‚¶~rÃ*Y¨‘%AÙ ~cy¹ÚÑhBJø¢%þ8¹¥:Œ µáP¶ ²¢«x)©£j¸~¦¯‰ï™ueÇPÂçÄmÑãÛn»ï•DØ~‚ªé7X76Œu\ÀÑóo«å>”Âоtp±þ­6ÉuRºî ¿ux 3–;¨.(M~6ÿ”oýküòxø3ßêvC5 gѧéf2zÈ|¡ÚÛ—lV׸Êz0†`ë@ƒÎ,\¬ftÔúlÁ£€² —Q•qÛÐ{¿ªò"dI”È2þMEP}n…¾V‰žSÒFÔçA®löšò…DŸ)ØÊæß0IU“ðÏ­(ÍÝB>6A–Zãø: O‰9V1v{ò4-`¨©—³žŸ[4Ÿ{n6¤Ã¿ßWJ3”Šý"ôµ N§Äæ‚y,ø–jMyâx±‚Ú‚ËÍ4½A#®CÅÏ ¥ºëŽY’ˆæVÛiF“br ÷C.?€â¼l^ö¶¢@ù sIý´müü9Žº^ÿ[[ßÍóæ¼`¬Yôiº™ŒòÌ ÚÛGbôS`áL-²öCÕ-}'nÓ5Tw¼Y{8­ø•ø^Š¿É«©Ec[À&¯´ J½‰² u¨¿NŸÇ¸Õ·Ñ þBŠæ€€ Ä©úr¨SÉ)o!r˾E›@ hR^ìó›ê„y&òi/gïÄù‹?{¿Û\NŸîœˎ^e©Ä[F†'ý6xKæk8Äo€úd~>^.%™«S8`žNYÈ.¿t³ÂZ®‡l䗜ıÂ|Ë?A©äa”ãù!çEïMªJP”ƒÚð“Ø3¹Ð·i䦟¢®àŸ¼�¥ò TÛƒ9ÕoNN^†D¬—EŸ²›É(!Ïeš¡½}´!F1†`k‡Rý}þΕÆ~ N:6/á ðDcî jöœÃ]óœ¯L µàP *6á7yŸª~‹2šHfhq‘f×éËÐP¢×?ì37‹ °9K)qÀƒXá7›¶N\¾ò8`ƒÌ+6õ_À`ÆLe£wO Wæ§\®”mç$v$·âNƒøßÌzÇëu_;`i- Ý~’�®ªUò|GáY„Íø«×¯($d£s2Y1T}“üL!ë\5t¶Y˜êR´Ñ‰Åü¦étn9Ç~nR¢’WîäŠrÔ6>Æ0f³Œ„ˆ˜EŸGŒ›É$û&’5“fhomˆÑ_LááìÿÍš›ÐéŸÁºÄñ‹ú+<5ÜÁ“ÿÃ&4>œðJ{Ùž)98b°J°Q ½Éû¡;¢Þä¥Ò -Ý®Óݘ‚ܽ8Y{ ÊKÕ8V”ÿ_Ñd†è‰JE€sNÀ·yÞ^뎡 òŸ~78|Ñ?À3’^RÙ'—Û°[ý{t`O„½<”©ùõÅ¿ý?*!ßY ù÷3f$ýñBnÐvaÓ^­/üóŠcçÿ/õí—懮ðQ·Ri‹s6ƒ¬Ë‰ÜL&ß7‘Ì[š¡½}´!F1†0×…ª]çÑ1:niÚƒ9È*ü gJDïÄŸÒ‡Ó2+'žäœmüƱM?I-ä&o+ò£6³‘Ò×`=Òñ:Ý Çðc4)«P"—óŸ‹h”l|$.ó<rsÓå‘h-¼¹Æñ´ýwLû?×[ü®þú°fb`Åm¥ûüof0 Ú0µÿÊ"lßáÊÏŽæ¼bSò$vãkΨ6*Lõ(ØÙ�óù{¢ÀჼíI®�ˆa~È+0”…Hµi´;œ1(ô F¢ˆq3™|ßDòì ÚÛGbôS`xܦo¡ðLD7¦ºÎ`Ûæ‰gÕBCâÉÔÙZóJDÄD–RÂoòTMø—ßdËÖž½Ãëh¯’%ô5ˆ†´;]†Óöîiê¡T^º¹#…fH‘ˆ×<Ÿ‡'°yÓ?¼Ùìý!Áº4¨,ÜÆQIGU1“©<fÿ^!s%ù´?.c=JµCQ®k¼ÖÛ‚¯•·`œ&á΋S|7cÍ93b˜¦CˆôXLâ 1çf2Ù¾‰¤}4C{ûhCŒþb Ïò«®{„?‡¢®àŸÙÒ<Fõ58n—øA-äd½D–RJùà·á&|TjÀDTíÃ× 1èpô~öò:Ù2lÊÚ‰’Ï¢pÇGï-‡æ¥Ô›ÊXIÀ<Ï£TæC®1a†Œƒ@qÙ†ÂÊoÑ¢TE*4û¯DA¨Û¯•"Û…*ml!“(:1fãÿK”#Ú¶¤ìv/1óÃP¤*Dº&q †ˆq3™|ßDR7ÍÐÞ>Ú£¿˜CàfñÒW<HêðÄ>‡Q~³¤T~æ¨4¦ÚY”W`~Œ’‰,[p¿×"q"ËP70¿âÍQlÛ®‚)ª=‚¾¢ÃaÑØGQô&nÚ}YÕ£oz‰§{£Ë-½@É1JÕ(Aó<×L÷®¢ºô0ä®(.tY¦¼õ­ç¨š(¢ø¯Øððæ:7y­n“ ÛsË DÔáGå!ìôøéñÀ*ùélíÜâûŸøÀlÚ•iÞ÷»$B}tÀX'"ƒ‘8bÜLFðMuD±gŠ2ÿi†ööцýŘU\pL¾õ™¹ÄŠ8W²ñÃ+�%*ÏMÅJ"Kª9+m Žv>F^‰>yy`d¨¸;Ä/sÑÎ×Àž”Inò®–íBVàwÜD)<›ê,ìÕŽx+ ŒãW(‹®P…ŒG ó<n6ã=4TC¹²O’¥Àˆâ¿N9(R¬®1t^Vãg»P(ܦ«8ixí{r¨ÓrŠ·#·´5auÓ3Ù^xÄ0‰c0¤"Ž›ÉP¾‰BÖIš¡½}´!Fe°Ãail#äÁì ÿ÷$B8ÑõãJ6Ö˜Ul:”({0³’Ȳr¯D™øyå£^‡ù×L:bùÎa| ’qFÜÍEÕ¹lø¢Šaêl:ˆB1vª_x•C¢À伇¼œ­Ô&Ï<øþôãæ,JËêpµök‰Mȉú¯DPqí–ßÏH³NpNLšŸ@«¾¥ê: ½C^“<êI·è€ëá½¥ïžZäÿ'õz˜Òa|Œä˜S`„³=À7·,pS‹M2lW™"<\"‘jgQ^9t]Ä¡÷Ö 4ÖîÇ»þ>(+'õ¾—âA6xKiâT bætûVn4ü‘ü„?NHüýTPjãT9;P\ý#Ì”¿s¾F_C½ÄQÈÄ •*BùðlE~ÍCبWbĈÈ+ è_gZ¸û;Ñ)ù H„[zAyU]i²v2ɃÌš¡½}´!Fe´ãQ2^jQ£Ø…ìÜ2´’­¢‘LgQb¦²Ó÷àã Ç^>mG³ê Ê/>‚< %S`Dp*ç¦`~ ‡Nw½V'ÿzÃ|ûõúa—|£Å÷×Ô¿ <úzFýo‘^cH÷CNøqC«‚)ÀŠ;šŒn(Ç1Ôq.†<IñÁMPúîA¨:L°únD‰SüKí™ôN’°ù!QN ¸ò"”Je˜r•Å'’`*Jn镨½ÑæwëÖ†Våa쮼êç£G»ÉNÿØ0I†)0 ¦À0|8`¹{ %»¢¾{4¤ßˆg3sPF§òItU@MÇßv_ά"”9 …ä§Ô¾„\¼¼™ }`iF8éT¸Œ_aŸ'<¼XÃç’ÄÌ£½õHÆ<ç°02‚¿›NÖÉC*ô9ÄÚÄ`l$È\¥ÚÛGbôS`6®9Xû_Â*Ð`æ`ÖÖ@NN/å(0b8•“:Íž<6ÜT'ª¶½ ÉSÁ@«øZrÇtn¢§Ï¶á¹_�oÄ$ýGüãÆŒ¹Ós²¬ïµb‰ÜÖ ÷À “†É T€ŠÜ„PçÜè-|V÷S«2ÌÁ53€»Õc¿v8NùyæÎ tÍúÝ€ÝD»1Ûuw’qs§†ÿ›8¾ ý„šièÓÃ`$¦Àl,˜ÈΉÙY’ÙAlDp*_DÓa%ºþü:ëŠ|Y¾—àÕãøñ{Qæ’‰7ì:`\\©8D¤…ÀÞÈ,c®«»jîcÔéÆÒ+-f¿‹Â²J”*ê£<u^†c`�cÊý…þþtðHe€ ,M%Ø–Sˆr9äÅyžH{²‚¯Ðò}CÂ+l³³˜÷ïü¦´Üü,f%?¨w$CÖîæ¸Ï`¬í{BÚÛGbôS`‰“°S¹ŸìCœ}bÃâèϸJlÔ›„iŒÒ´$)!°72$÷Å)o$)n]Uïa³‚d°ÿ;†HRüXéOC~æ ¡ïÂ¥“(Þsæ%œ­; Pq, š$ÃÍÃÚû#TU¥+ÊP£nÇKbê™!p.¿ºøBIŽ//Ç·¿úñ¯~7q|1ÿ‰éÉD †?ä™L3´·6Äè/¦À¬B"ܤc¸Ñ >ð6ÆðËñB6Å+µm¸Q»ïÊ/¡uÕ‘ö®UîNRì ñ/:…º. †:¿@ÌaÉ9ýñhsyeó¨Ï‘[PÎ@Ç+GLa„†—»zô®Þ´ò)0{õ¸+¹ ™Ó==<¡è&‘mÀ4Ë�íòÉæOlˆÑ_Ôöxr…!Ãà0A«ü]ÖLñ1ˆÿ°×~·þÌw£:‡ÝÀ$ çè‡F±Ý;ŸÎ>†}ñOt]½¥²Æéhú–ßø=ŽA6 †þS!”ß…ÈÉÎCñª¼…9G“…Œî›D¶cÐ,´Ë'›?±!FQÛãɆ´7êMù¦¼4s Å€Ù† 7‡7fôd',šã¨ëòg~³DrølN·~¤—““~ Ä_©Ï椃ù(mpÄðŸŠt{·R’¨ÀP~“È6` še€vùdó'6Äè/j{<™Â°®’– Œúòœ¹äw2É—K•û±Ç` ¶û§°cÇ)Ü·‰o¿ÏM?E]Á(>yÿÜ/P}lrd2d+ša¡.ÿF€Ã¢±¢JH6~aü•˜RD¸3“Hý3XÉ ¿ãžîàÉ?9$­ˆä?hBDMÈ(¿I$sŠ‘ÙÐ,´Ë'›?±!FQÛãɆÄÃRtJœ¦ ŒN‘‡Â'“|9®Ãð²´ s áç&%*K+ÊQÛøÃ”Ù^*¸Ég¸Z¶ËýŠÌéµmî bz. óQŠÈ\ªvGÇè<¸¥Ahæ «ð3œ)=eß´ïhE ÿ)7&îßÇoëLc÷o÷qBê¹NÿMb2Ÿ¹ :¡Yh—O6bCŒþ¢¶Ç“+ ‰†¥è”Ø5 ‹ñ¬iµùžÄóÞaþÏØX,À¬ÞÍEÕhl[Q>|EÿÃQÝnm„€ä@Ä‚'Ú(•õОáÕŒô‘Àܦo¡ðÜ,»1ÕuÛ6—@;êL››åÄý§ÈºLQ&~ÊoI[™ Í2@»|²ùbôµ=žtaH(Ü( §Äþ6ipÆ` ¸1â7€¦k8w/Í|y€¿1ª=‚}+INý‰:t-?·î\‡îqA@«å'ÔæïLƒ›FNK+Js·xÖ´•"Ë¿€N›´6–_µàpÝ#ü9ôuïøò2ÍcT_“>¾}AþS"™ J22ñÓðŒˆ é FfC³ Ð.ŸlþĆýEm'UìO¡6ð@wbP¯2Á%§ÄKfh«aúÛ¯!Ü8 Ç/2_F ààšú”G¿CϨ_öqÛk é~ÀíhMÈBnBÓ$ ™¥«~‚É:ç݈sNL¾Ô¢B’$­~p³x©9Œl¾¿dùuxbŸÃh—Jå×h6¾¥^ÅüPw ÕÝS¾×¡˜Bwõ©$(0ôß$’¾ed64Ë�íòÉæOlˆÑ_ÔöxR…Áã7ø$Ågwíû³ðÐrJì„áN¯¶™Ã’å:×ÿŽ¿=¯i&5f6 )!~  9·bØ„†J�hÂd:$�$yGö5a8páF U| £Ôûf¾ÿ“oáH»œVb˜¦zõ×£²:970”ß$’yÉÈlh–Úå“ÍŸØ£¿¨íñ¤ ƒíjk…ÉÖKPì>…f“=:†–Sâ…ç¸|Bמœ…ñr-t¯iWRgfCµ:0¸¦(Á\:ÃM´ãôÙ6<÷W><e“QmªyÅvvóé:Ü0´Ÿ]F÷”ßtMÁr÷, ök1šŠïµØÃ#A.z ÃüЩŽÏñI¤@,d|>ù’ßPSôŒi#³¡Yh—O6bCŒþ¢¶Ç“* ãþ+p“?sÃÉ(£õÐtJ¼�‹æ4êM~óxÇO»w߯h%•f6dì(O0—ÞüÙ™…ý©¦ÿíܨ›;`´Eª“&ˆrÞ Å¶\_”½‘—%Ã&Ùn~mñÏ=$Üú®–#Ÿ|¿ž®•,ÈuVßÑŠæ‡|-ÃMØ{!Baë8ƒÜX$_¦izF„&©Ï\•Ð,´Ë'›?±!FQÛãI[tf¿‡$_¬ftÔ"+ªh=t{=þuÍ«ÈPOJÍlÈÉ(Ý æÒnªUÛ7Ð%²©&gŒ³ù[ù¿ËF^ño6õÍ¢¦s,йIËpZ{qSu%òC(«i€áå[ÉÛî6«ñþæ=¨nüQx»¬»‹îáyß_ÑŠæ‡<œ†#9å•CmxŠ—ÃÄ„kÃ/ŸÂ .Gž,ûµ¯‚’èŠý7‰¤o™ Í2@»|²ùbôµ=žTa瓵jÓœïÒ b:¶;ÊVLÉ('¥f6ô'˜K_ˆP) *¯¢muó¼yÉÿgz´‡5Õt¢)†¬è ºWo]ÈL?šŽTG™$3áFµØ·O kPǺáŠÎ+¥$n~è…³?Åå½ÿ^ßIx暇°IÙ$BóYTÔÿÛÒ¬cpsMcØôLÃÓÔ(á¤O™ Í2@»|²ùbôµ=žTa°µC©~ˆ>ÁC²ƒ“ΰ§ÂA¸^£·¹ʆŸ`!9X\6Û;a²Kíà K¯ åÙdôíO))4³á7s´'˜K_ˆƒô o6uæ»Q½½öh¶nÄ™{/öùB,ùedwc~ÆgzHó·†aÎŽþg#¼z&!® ô(O¡¾gXx»<d€ú6í&d1̽pÎqõjÔ”â×r ö-´Ý¯¼Ê„„,¿jž-{QÛØ€Ke!›Wš ¾¼Žï’ü6D‰Ú…¦_òvDÛ€1h–Úå“ÍŸØ£¿¨íñ¤ ƒk3Žÿ†ÍØŠø@¨ÑÜñoØ¢¶Mö™;ÈrPøq>rKujáldEWñ2ªˆ9™NjÌløÁã\ËJÌ¥/$*ÞY7Œú£Ó·(’í‚Ê“÷ï÷ìSáQßÊáBz;¯£rg Ô¿<ç_÷@wö"¥·1VèkëñSoŸ¯í¾ò¬ e)Ña4Ãê¦ÝžÍ³,„\§… ¯t$l~膽³ýëLaw':£Ê++üçŽaKY¦øgÄpÓ'Ø$×âwCö)Ûa"ælV3:•qs4õq"I22še€vùdó'6Äè/j{<©Â°š/A†¬üÃøüØnì(þ{Kñ2ªŒö䔸»=Y¯0ÔTËÆYÏÏ-šÏ¡6³s|záÊÌ¥5®aèJó‘_r—”—P{r/rd2d+ša‰J±_ÂkÝlæ×²&„/ï`OÓ`|bÅ <+D{ýJÖǨë’ÀŸ‡Ç8ýtÏý'Où–ÉTÜ Ç‚æ‡äp"•™ø½‡#^?Jr™çQ`Œºzh­+æ²æ»ëñ £Ì �še€vùdó'6Äè/j{<™Âà±—½ƒ"Õ3L»8¸Œ*”èF±dÖàD¤œ~pöNœ¿ø³7â×\NŸîœˎ^e)%ÙÂñÖ6%þ&)í¡?Á\Ú㚀I_ªäŠrÔjzÍ,£eî)®Ô?Á¸¿TPyƒI‰n2Ê۪›xa hïXªh`"ÿ&C”ª(Mêba}ÇñåÁv´Péç'†ùa„ÛUA‘.? ¤PPÝyŸóNm–F9rMmmÐ^;ùÎZtÏ¥~!}ÁÈlh–Úå“ÍŸØ£¿¨íñd ƒÛ¤ÂöMWOż ÌƯPU²EŒÞ=ÜPæÛÎ%áá4‰ç½Ãˆ¸%ä7äêS·AgöéA­äl®øMå æüFÜ1 ã½ëP‘Ssu :ŒãHËÌY ˜mÁ7Cn n~ûž í¼‚×]{H|Yã&ÐUõ^ðš$(2l«¢1Ôºæ‡dnß@׬ÿÊh…®DåÙPâD–äòÔtÙÇÑU¹ï«_ÀÍÍ¢¯ÃÞœ­Èúàä(tT¬ËD™ Í2@»|²ùbôµ=žTaXø ª‚}P›½E—Q‰ò`‘E›‰Ÿ˜¹CAå?}f ¾¢€g£Ž¨npà }U5®f¬^-ÄôBl9Ê`™Ù$csî”–žs™çè‡FAœž³‘_rÇ óQ,ÿ¥”8?'†Ï.;Ú[…è!7Ëû *…ë‚'Ao•ðgí&LÒØ ›†ºJ²ÃÃ9^BWWÒša¼yôWdS Y÷™ Í2@»|²ùbôµ=ž\aàt¶üðu=´Æ·p™TÈÉÙ‡ê›/¢ß ¹Æñ´ýwL§d#^i»V‰|r3${¥­ÒF=Šâè¬Ä AÛ›¡TìGeóoo®x†òs™ ñ…8™¬ª¾I~´V6œ³07ÔAKósbµÇ„§–YÑ:\Ư°Ïã—çϺ«÷ ¼Ã&úçIB¢æ‡þ¸&aéTaïæPÞÔƒQO=³è­ý\R&]`°ãD‹”„ú¼X‹T„ú¬X c 1úƒÚ݃ÍoNœ‹~&RÊ„lÎÑû¨! �³¢¾çuÚ/Œ †|æ°d¾†CÊgüo¥dÿýâF‚t&ûÿaA.ÅÌäڅM{Wò™¬(0vþÿ´ø—щ'¡íq^ûå9áFÔea»ÊÙät#Â91ófÅLô-®yØŒÍ(Ï=’ ŒÿF*ÞÂHoC©e€æöÑÞwé†ýAmnŒÁæ7[—«¡Mö½Ç"ì}ÿ„‚„qÎ? ë9ÊO[­¸Ó`À~>(6Û(,uÈÏRJŸ‰_ÊŸz„70Æn4•} eGÌVZsŒ¤+‹x}ïFº–©;`^"RL˜"|·2æzœÕ•#7ÿ0ª/)¡¬=Žâœ-Ø”]‚& SüàF·¾Ý1&ÆLWØŒA» ÐÜ>Úû.Ý£?¨íÑôl’ˆ±¥¹üæ€ow`‘埆6YNÇÄAT÷9òe[‘W® ¶¹¦’p>0Û°[ý»ÄÉ$ÃùÀø—m(ªë”6cwÀ9mèЈ ò÷ ‹)òÓ"l½-øZy Æé9˜TEÈ)>‹›ýoÁ†d=a7ÝF}U©7c­$0W£bž÷-÷,¡Mg]ÁÜÿ:M‚A$YË!Ñ÷3Rí2@sûhï»tCŒþ ¶GÓk°‰™K!r˾õËO@J ”òbTj~äÿÝ óŒÄÊ„k ]u#kÓvÈëŸl¸]xk}C­Ìm¥Wz‹iО„Íñ¹Š¦£~·?¤ ¡£ºÓ˜ï6¨ÓÅo€*–0óªºú f‘¤„ÛPXþ®_RávT Œö‡7pïu`Þ7¦:£¬ƒ‘™xÍ·Tva-–!¯Ô¸|ë07Qý9ÝÁ Ö‡mÀ´Ë�Íí£½ïÒ 1úƒÚMþ`ó-ËhÕW T]‡¡w3Qï’“¾N\¾òvÁ[øhý0H’åÙþó§óEjÚEÃS¼lÆI釶þ'J£ýÙ™…)Ëp `,ÈÆ ËÍFtO“±[ÂT÷EDR›±Æ"†µ‡y…zd9ûp¦áŒ6ï8só³˜j~‘²2äD£é­·ÿ]oaj=‰<™tù;¤Ç§“ISìÄb~HÌ ‹QÙ5é{M°â¶¦{M¡YìEmÖ4½¢=±gâ° ƒv ¹}´÷]º!FPÛ£Él,­ü&IÇe+òkÆd6Ĺ\©qŒåÆÐqö0äryør š|Tâš‚åÉ-¨•J¨4ô¾š^UV–_5a,7}"7Ñ„kVÓC4^8 EE=t=Ot·èÎñq¼]â•í([Ûð}éûeïÇùÚ«Qnd)ÄeÄåÒ›a}Édâ3?ôæ’9Û=å{Í×3ÕòwJVý¹ J7çeD0ˆDŸ©É}&3¤€v ¹}´÷]º!FPÛ£ÉlÏCì݃Pu˜`õeóæœx©=ƒã†ñ(6­aNñ¹¿ÐßM™d0‹^í#¦À„Â9€V²)æeŽÈ§È>DMç˜ïÄßãÓÁŒ03‘®™!ôèHHÜ#8Qrú(oO¼‹°õ| y¶ ›6‚æ?´¦X!ÔáÈJÙŠüªÖÕ[)F ‰šò²3÷ —AcgúžÜBÝÞ`Ó¶£P]»‚ÚKçQV¸ ²ü+èslüéDæ!Ñ÷3Rí2@sûhï»tCŒþ ¶G“9Ø¡ó%ð?«Š¨Ì†H$«ÓŸùJ’)|¥\:‰â=W=Ñ“8[;*v âþ˜„›²I´ [§ñf,Wi û¹6O>n—›m”‚ §´åxW®B‡É ‡çD|ÎÉ~h+ÎÂ0ÝF‰߃–(oOÈܺ€’ÏŠ|¾]?ÃòŸû¸\síúv<ó˜øQŒÛÕö<”©oúùÆñåG%ä;+¡!ÿ~`ÆLÒ&&¿F¼~ÍCÚ2Ä0?$óÞhÎìó$ÁÌ*ü7ͳà¸9 ÿÜ•ª½¶o>F`0†` í=èè÷&ï‹ÛŒŽÎµµBjˆ­~ Ïî ž#R¶/öº…퓺ïÒ 1úƒÚMæ`s£·ðYÝL­>‰"0€»Õc¿vØóÐŒ ±Ó?ŠœÂý!Ì·Î@7¼˜f¶'_a/9¡æûοÈò?‡.c"Å ±“?&~Œ„,Áª=ÅòŒÄ7‹—ÍgQQÿ lKs°Œyo¯\Ó6ýÓðšyÞú¹UYîgÐôýµú>ovþ“iàÃÏËÎïpåç�óC^±©?yvßKÉá`ë'¦| äʲ ×Y}¿ ˜„ÍþÄþLe°†` mz”ŸÄ%ÿC×€r©RŽR¿µBjˆ¶~Î9ã½ïP–÷™à eûb©;Tû¤î»tCŒþ ¶G“;ØXšJ°-§ˆÒQœç=ù+ø }sÑœðº1ýü9SvÌÁùò*Šd[+?kºNôz"yõ K÷½×n|[:ØmBH¦÷jÔuOømªI@‡;¨.(Ý�™Þ“ÇghË^Ô66àRÙGÈÞ´_^Ç÷I ¢To‡"êÈO¼sûtã &‡¥‘H Ón-òUR!1^³½òÂm|¿“ˆ ¨®_òv(0«¬}XÍùfg| ¶cÆÐ¦ƒÜ³G*ÂÃò3)‰\?±Œ0£KsÆ›ÏÊÓ>¡?œ”í[¿îÈ퓲méˆýAm&}°¹yX{„ŠäKP”¡FÝŽ—ÓK¾_ÒÎ$º*w ·ºöP'““JìR>—8§Jšâ4£I±Ãwƒv�ÅyÙ¼üñ›nå3̱OŒ¸a7Ö²L3 ¦O°I®Åï†*ìS¶Ã4<›ÕŒNåEÜŒ¨:1fãÿË+*Ög¸ý³…ù ÅÈòp+ößY.ŠÏ\Ž•\TÜffÓT1Éüp¯š@&ËŒ(cëÁ6` ÁÚ@Óe÷Sî‰5Bµ@!àf»¡¹“j†(þì»=&2I|áȬºþpR¶/|ÝѵOê¾K7Äèj{4©ƒí|ëÛµI°7ùφױ¥bgŸóiäÛ‚¿‡jïU˜SvKD7œs½7U¨*Q@Qvjà L33•8ðš|ey|ÇÈ1Ï£ÀuõÐZW8Ìw×㫈æyK°µkpkh“ËcÓ¦]P™Ò`.aÃÛë(Â˃з˜$8\àGÀjƒÆZ”(N¢^×Ë$¯Ò¬Àˆj~èÆtß5TT\Cí¾RI€mÀ‚1tÍafÞ^+0‡RË€°}ÓxÕÓ¥‚Däå2k'J•mèñ‹ ·KÌXÊöÕcû¤î»tCŒþ ¶G“:ض{¨UÞõ™]­•gM'ð‘²F3ÿk3K΂p¡ÌQÂñÉn…®DµÎß0‰ã6«QPÝyŸóNm–F9rMmmÐ^;ùÎZtÏ­cþE6³-ç øp;rK[aIË”éü¼“gyÖ³ˆeÛtMI¸Nx¶:ÔWAɉc¨ÖÓiB&®ù!ÃÒØ,ãŒ!ç†Ëí?‘B(0àÿÆoï#µ ¬Õ¿Äc“ì}”|÷–™õ-b¤lŸ°îØÛ'uߥbôµ=šÔÁ^×T†¬¢/Ñe´šør$Â_è8^‡®HÂ…ÔhÆ0•þY ˜ml=÷ÆŒ~;Ó¸Ò×0t§® Ë>î1m|_ýn^±èë°7g+²>ø ƒrY¡¯Uâ†2]3¿iÜÊk·ü~ö�¦ÉdÈú2œ£?Q…L,óÃøúî}‰sOÞ„ðá°`¾ú¦ÇvdÆí y–­Á6`™ˆ` m íõ½ „P`ÐÞM• ™ ŽQ#îiÎC¾#ò x°)44R¶/¸îØÚ'uߥbôµ=šÔÁ¶ýUÓo°d¯븀£çßVË}(/> È´ïOâ9 ⇛¾Çé›Ck'g~pÎ?ÑUWŒ]š %øM^y Î\ Œ€²{øÍï1'º ;vœÂ}[ºø%e6œã%tu(­ùæÀ ¢Û‚›ß>Å´ï寯‘áÉ€ 4‡%ó5R>ã+6n8^ÞÀ©ŠïðĶ�‡õX=ýϯOÃý0šF0×mr2Ëüpo}›²Có2TÆ¿aï:‚R]F$e0†` m:(VyÊ~æüyÅ|¯å8P˜ Nüä¶°÷.ÎìG^Á([»`²Naâç6:Â(GÑ>©û.Ý£?¨íѤ¶cæ±àÛ·Eo»I S®©'¨-¸Ækí4+±œ‰°ÛÏ?à›Î?ù­Ê üFiô.óÊAYõP61MåsÚ "…VR¿r\‡áe¦À¤'nØÞÆÓÀH~’ù|Јw4ŽŒc¨ãvd­gö|ß6íÉAqí?Ñp©gË +¨ÅïKͯOä69[q/)½uÍüЃO9Ѐû-ߢ%”³Ø‹ÚwvCmÞøÒÈ6` Á)0Á…fhÂâY‘¦(d„ð퓺ïÒ 1úƒÚ¥j°=›‚,d—ß“ôœ‹˜y` žªp­‰2‰ç½Ãüv—±±ðm ù¹T¤öù †p>0Û°[ý»øJœÝ€’-'ÐÁ÷-7Ü„Ýü´íwŽîSâ¾é¯<ÂÒYÓ7£Éo•D5?ôÉŸœÿ{Op€/qùÁˆ7›nªå[ò2"ß‘»õa°Œ` ƒLÈBR²uàf`ªW BªKÙ¾˜ëhŸÔ}—nˆÑÔö(]ƒ½›ñWX¢:µL gAL0§|íðHýY”}wÃÏ×ã¾++DAeK’|>R·•<îóòo˜G¦iÑ þ|¾›—Q‰,²5¶¡N;²¦°Ìw£ö+b¦E'â™ú)0ä%QbšŽcï‘+ÐvöÀØ{*ùv^™>åNzÃ6` ÁN<á·õ2ñÿ¿0Ü÷½^Hý±D! < –²}Au»^£·¹ʆŸ¼{C— ÆöN˜ìkÖ<þ퓺ïÒ 1úƒÚ݃S΂Xa ƒv88ÇÇñV°QwÃñâ{ì}÷3èF3!7Çߘñš“&÷ ¨ Σ{žó*0ïÔ¡×a†æH¾nú:í?qA¾5Ýo}o 1̽Ad;¾Dïj=‹°å¹]ØÁ?fãüL%‡m<Ñ6@©¼usǪéó l¶±Œ!¥™ø‰B(eû„u¯ä˜ÊAáÇùÈ-Õad¨ ‡ˆÉnÑU¼ q:%uߥbôµ=šúÁ¦9Za£)0$ÁhÕWø…SæŽÃæÜø§¢k –'· æˆ*mßÄÁªÔúa¤7NŒêêP×5Ž©®ÓØò¾f7¯4Zn£vo.dYï!/çh"#&ŠHæ‡ÓÞGÐ÷Ú„J çÄÌ› ÌdÐCúÎÎþgó·ò?Ïö:n(DÎæQÓ9òv.ðýŒôC0†Ôeâw{êO$ ¡”íÖ½�³º»›þàו 5U㲑˜ã-À¢ù<¤O´}—~ˆÑÔöhÊ›àï¡áÌ>äÈ„“—.6’ã‚ýIòIµ¬<{œs°9ÿ:£ ]Í ç�ZKß÷æ™X)²ð›¤É2œ¶ßpOSÏ+ç¡OºE…›…Yw e¥pÓx»à„åf#º©O예ù¡c–1þ¿\6#Ú¶°¼1<Âg*/šbÈŠ® {UÉL?šŽTÃ0Ü¿){&3DC0†¼ó©'`F8HÄ¿‹ø4i ŒËS"Q¥l_`Ýœ½ç/þŒ)2yæºpútæ\vô*KCúÔIÛwé‡ýAm&w°‰ãâ�ž´*QšŸÍöäÊÏãÚ 5Ô1ÜÀpÎqï]‡Š\¿ª[Ða—ÆÎÝÃR`– Ù¹ EÊ_ün]–0ó²G*îa‚m>Ò& åxW®BÇjxV2×ú¡­8r“´ñ a¯C‘-ó$ ,ùü( w|ùÞréM—ìOpóéÛ€ÏpbP¯‡iöI•ˆùálíÜš€Iµ‹_ÏwAeZÇÖ?>SÉ ò^ìõ÷ò°«ö”oæÆüÌÜêAÛ€¥?‚1䘲—Q…’$›%…PÊö ë^ÄèÝÈ%‡®üÏ%ŒOðý 1úƒÚMæ`sSQ³c ÿ™; d"f¡çè‡FAì4³‘_rÇ óQ,ÿ¥’eÞ@ ±ÛÿS¿SܴН½ß‘[ÀÌl4Éëô@B'Ð4¸Ùôß$mp¸ah÷eAVT¾i^¾]F(Kt°-½@É1*¥ÖDä=TuMH«<I‚ öîz‰Æü8ì·œƒâÃíÈ-m…Eº“¤´AøLå•AӷسO…G«&úÐÛy•;K þå9ÿºº³W„ïg¤#‚1$ø>ÑFXƒþƨ¶åù^K/¤þD¢JÙ>aÝKx­;†‚ÊúÝóEß§–ÉJ¡Ô}—nˆÑÔöhÒ›ØéwiP]všý°9áÒ£þv4&dd¢‚LV U^²q#mgan¨ƒ6ª¬Ñ±²O´ö©î£o5RS:«°S¡Æ/äõó6œ=ÝÎncÒ 2/ªQ×=á· _§;¨.(•h^P†ÛÕö¬µ“îÆñ+”EW¤¿¶;¨,«‡võÛíwåÈ/¨B³Éž ŒÀÊ€ÞÕÃ%F¬oÀŽ`3ÿ3òóðåìi9O&¯é` ¹?д{ª:¬!æ1¿¼ªÜ}ÐXœ¾ŸI/¤þD¢JÙ¾ º]ãxÚþ{@n=~ïw¹š¶­õÙ R÷]º!FPÛ£©lÎñÍ¥ïA–•…wØÂ3ï5UØ«…Õ#Ì+ Œÿh{ÈÄ™Çð³—˜ô|Þ2§á‰ªnºƒ¾¨@‘Šì�š^1Ÿ˜´ÂiF“br ÷C.?€â<b¢¹Êg˜K[…9~m(ÆNõ ~ËÈC˜âH¿Ûª:½öÓRá|ë[áÖ„s˜Ð°7‡t#žM)Õ0ÿ)Q!ý'`î)®Ô?Á¸ Éj`yƒI‡··ƒÞÏH;„c¸›¡Ù²”©ïàéËaÀSÃw(ËÛŠÍûµõ[(¤–Àúc5Ë—²}º98-­(Í%–;~듯ÈòOCÐVòsÆbôµ=šÔÁ朘4ÿ­ª…Y2þ!ùäÑÑs†g“¾?ЇS= v6À¼D$–(0Eø o;dIIØg…®NçSž™ƒY÷OhtÑ/¥ãpB,c®û*ê»Güœ¡Ê[Ÿ#àœ£è½©BU‰вsP^`:“Æ‘ä øA¥ö7þ{› ÊÙâê§‹’àÝOuwÛ¾AÅÁ3h¦>t0óŸ›àg*—c4ê "Û€¥?AcÈý…žËŸ ›ÿ9ù‘…¢ô~‘ñ¯?³|)Û'¬›Z"·ì[´ù›éZ ”£Ró#ÿïN˜gÖÖx©û.Ý£?¨íÑd6gëD]q.d›¶"¯üLÄV=faëmÁ×Ê[0N“S×"äŸ H xFQ„Ò¯µèZ}ØûáÉGsÛVºÑç†Ë-}O1h€Ã¢±$ÉÄXÃKkY€£éVä×<„z’ùO‰Mà35Ö b2ŸÉ i9†ÜlÆÛP×”A!—{™¾Ó>Åpˆ©e`­þøÌò¥lŸ°nbb׉ËWÃ.˜+ó0Ö}ŽÿâÙ&uߥbôµ=šüÁ槈ՄQv°µaú]¿Fs“jxFþdemöô›'ÚQÍ·Ðv18I‚‰òÌw£úSŠƆ„›|†«e»EäRPJÒ IzÃMPúîA¨:L°úÌ€8ç^jÏà¸a< +‰Àü§ÄFøL}ƒ(|?#ñCnÆŒäÖ@ÿ Ö%ŽWh_á©á˜ü眩e`­þøÌò¥l_¨º9— BU…o'ó‰ 1úƒÚMé`ûLÊZk ²ÐÒËŠ ßîA#:µß¢¦d§oÓ¸9Å' üçÈ1†‘LH¨ÖÝØ\TÆ6ÿkvòÐ|ŠaJR\Ư°Ï“hMgÕB±NøT*Èxÿ)q>Scß ² Xú#ù.Tí:ŽÑypKƒÐÌAVág8SzʾÐnòRËÀZýñ™åKÙ>aÝÌ&QÄèj{4©ƒ2_7ë¸7Àò`;ZLsžÓG('~bß<†—OïB£<â~¢ÑlBÆØ€SÞ#Ø”k‚Çísg’nô>«{‚©ÕŽ&‰ p·úcì× …d¼ÿ”ˆŸ©±oÙ,ýñC·é[(<nLuÁ¶Í%ž›ƒHRË€°þPfù5h6þ•’"aÝÌ&QÄèj{4©ƒ6_‚‘I5HJV·ú^2ÒÃo˜§þåÑïÐ3êŒá5†t?à63!“,M%Ø–Sˆr9äÅyž[YYÁWè› }‚I?Ì*^ÈsLHlÄà÷3Ò ÿ1\~Õ‚ÃuðçÐCÔ¼ãÛßÙš°&¦RËÀúõ‡7Ñ"HÙ>aÝá}`Lõ_ÀÀ|`ÖEŒþ ¶G“:ض{¨­môÓ¢ùÒz ŠÝU¸æoúÒnò…-NC{Q{˜)0Œd²ˆWM„apW óI ü†ÄÚû#TU¥+ÊP£nÇ˸‚”$æ?%.¤ïÖ‡ÙðodcH’½j{"ÉòëðÄ>‡Ñ. ”ʯy%6„E Ô2°Vì&Zò;©ªÛõ=ÿ÷e\lø ðÀeƒ±½&{èTR¶-£?¨íѤöÂ8†ÿ |¨ÏÃÜp2¬-hú@Â(+q’DYc&dŒ$ÃM´ãôÙ6<_MPºR1ÉLRÃb? h_ ˜ÿ”ØŸ©Ì†? C“é \‹p†Y›¥–µúc7Ñ"HÙ>aݾÃ9Y ?ÎGn©#Cm8”-ƒ¬è*^†XŸ¤î»tCŒþ ¶G“:ضÐ,~&.¤ü5ÈJgW^-yÐ>;-Ø’?ºûþÛ÷šÁHcv†ÖüCn}WË‘Or[ñëéZ‰6Ao*aþSb#|¦2þL$š1tëQªJ±Lì&Z)Û'¬›°c·Ç‡hCMÕ¸lœõüÜ¢ùjó‚÷ÏüºïÒ 1úƒÚMê`‡óÉÚ5µŽûþX¡;xÊG/aó…Kõ‡sÚaéÑ ôˆžš˜¤ŽoŒÐÜ6úqÃþ¨ÆÅ;ÌåAè[LüR¿ñ IvÜf5Þß¼Õd3ê¿I½‹îaopzaþSb#”Mf߉ÆÐ9€ÖÒ÷C›øÊv¡JÛ›Ó/ ?àýX?çøÏV­ÞD—Ùñ@YÊöµÍÞ‰óöúEÏuáôé.̹ìèeQü¢BŒþ ¶G“:ضv~r<DŸÀÄÅŒ‘i_•u!›¶v<›NöämÔH˜,OŸm’å èX®µÝÅÝæoPslrVÙQdBFód¦¹môã‚MWâ•·H%B(Ìt†|7ZàFµØ·o%L®?n¸¨¿Â`þSb$›Ì†?ãðC·I…í¹eP˜hþ¨<„•ÿäÿ­Çó”`$µ ø×¿–hudž@$#/+µƒçÅ'eû„u/bô$Á¾²íºçö‚<Â÷3Äèj{4©ƒ=ýºÕŒ%¼é8 G„M[R6j¼S£Aß«xjøÊ“{½J‹,Å'•Оâ嫨kî0& hnýðsA¯Dí6þ؆µûð®üZW·p­r7 *[`šÜx›PªdÇ5å)Ô÷ ûÝ`ðeÈ�õmúó[1ÿ)qÊ&³áÏDcèCçe5~¶ ×a·é*N^û^ ‘ZÖê_‘Ï=¨ëZõÑáœCÐ? ÃDèg‡”íÖ½„׺cüsŒ(z~  þž:B|KÝwé†ýAm&u°m·Q.?Käšrµ\DeñA¨Íóü¬ÃýŠì¨h‡-äs“lÚ¾0ÕhC«² ¥J}6j‹xk›\­rŽA´×_ASßJHÌà¿I%4Of¶Ð$çø8Þzæ ±³?…¦á€ÝùnTç°©Y~Õ„=¡N©õ 4? á?µÍ¥F(›Ì†?Œ!É×ÍïÜþ3̉A=¿gY¹Ñ‘\Öê'ÏÿD«+,Áª=EG&~×8ž¶ÿŽéÐ]„Ô}—nˆÑÔöhRÛ¦ƒb%W‚ ÄqÝ–×U`øGÀÈþ üÝÒ 4|ú]ØÅ@r¸YXô*\Ôš0íšÙøŠ_žè€æÉ̱pò›¡ã¨ëõ7CpÃñâ{ìÝœö!”ÎP%;Ü8 §¿€îyà Æï°L†6J-™m~(5¤ïüa6ü™‡` Ãæ¿{U]ƒ‚÷KÀZý–†š±ïýË0®ìŸœÐV~„œ-eÜÀxáœã0Fé£#uߥbôµ=šÔÁžîGï`"[{þÁ{ç:tŒ L5¬ÿ¹‹êIبEŠôÄoÍ?âlå1(cNüÑÀñট¢®àŸ¼�¥ò T{|²dÈV4òCáÒ%;\³³˜O›nÎlóC©Ê&³áÏDch»ƒÊ²zhý¬F´ß•#¿  Í&{ŠÂ¦_P_÷-:†¼ Ì©S¨2ž%!°îX}t¤î»tCŒþ ¶G“>ØÜlÆvhTÄ|¬Ú.s vÖáOeùWÐç~ˆ‹º³Z ‡m.¿‘×£ôsâšÛ–ŽpŽ!üܤDe‰rE9jc˜8 o@R.;ö§0#ENŒl"’Z2ÛüPj„²Élø3Á:ßÀúV¨ pöæán¡v-RË@¢õKÙ>aݱûèHÝwé†ýAm&u°ý2Ò’(^… 8o²jñj)š=¯ÀÜn€æ_}~f}èÑ~³†Ñ°§âA¢½‹\ùy\Ó=†id*(C-0ƒþn3h1Ú¡y2³…†/)—°f!þ%¼‰=džù¡Ô±Àlø3Ž 1 8¸½Ñx GgÐür6%JìZýËp `,âÙop %)Û'¬;v©û.Ý£?¨íÑd¶×ÙõÖ=ÄðJn£ú7ŒGñ ãÃý¦N„µ×^)=€²“räy’ÖÉ•'G•J‹Nã˜ôÄr·ã©îYÄd—É„æÉÌF¼¤\vl÷P[Ûè=M¿Q‹âwP¶“,ï {ÛµJD0¡‰L3?”šP²Élø3 ÁÆqp+µ ¬ÕOÌIOC~æ ~îå*Tñ ´äCÊö ëŽÝGGê¾K7Äèj{4™ƒí‰‡¾é ´V¡å"gÕBU&þP70Fôýr ¥Û>„Ê$uÒ¸µÛÎ9…Óc´Õ~‚Üœw½yÈâôI!rÌ„,ØBÈ—”ËŽŸYˆÛô-ž(SþL¡»úã4¸ñ’Iæ‡R(›Ì†?óðÃxn¥–µúù=•î(r ÷V ,¾@K¾wIÙ¾àºcóÑ‘ºïÒ 1úƒÚMê`/Yдïc(=a$ X´§Q”“ƒÒ¨n`Èd å³y·1•š¸¸Œ¨ŒÓpØþƒÞû-P•!‹%²Œ šÛ–^„1àþBzl c…&ÙY¶ü€u=˜óëh¯{6²¢:˜al$„²Élø3ÿ1ŒçàVjX«ßéÿ} ×롌2Ñ*AÊö ëvÃþð6žÎE:LúJÝwé†ýAm&w°9¸¦_àný—¸ÒñŠ×«‰sõ¿À•#?¹ùÚa2Û¤#e›·éª;Þ¬m]F(K˜ l¡ ~^„2¸tÅ{®ÂÌ+öœ­; PqlC(4TÉ7‰žº=È->ŽZ¾ß/UEQÎlÊ.A“…ùdBÙd6ü™ˆ` ã8¸•ZÖê=Ñ*AÊö ëwhXÖü ÉkÆbôµ=šnƒÍ¹\¼NNsOP³çîš'àä–ájÁ¡ŠLù~jh_¶ÐˆE$3€3Ð /2Fj¸9 ÿÜ ee)ßç‡PVÛˆŸ‡ç6D_3bC(›Ì†? ”Xn¥–µúcO´J²}ºÉáÜJÈ÷•(~$yùaì®¼Š¶ÕŸéÑîó7”ºïÒ 1úƒÚMê`“Œ´OßF|¨/¶£Å)<i*YÆ¢óï€ö/à•öˆ×AÏSrpÄ`ø“ Í“™-4báÆôóçÌ —&; Z –Mfßi$:†RË€ý±&Z%HÙ>aÝ’—R…L!uߥbôµ=šÔÁŽ*ô¨ Ûª:½“)®)XžÜ‚Z©„Jc@ï«éñ “†›‡µ·oO=š~‚ƒí…‡ô)­ÐܶôƒƒkÆ‚'Ú(•W nî€Ñ.éjúÃdG,2ÏJj„²Élø3ÁÚŸBÿl:`.EÎ%µ ¬Õ{¢UÂÚûÅGX· ¶;Í0Œø¹ 2ôjÂ$/—²méˆýAm&u°ýC®”ÖKPì®Âµ6¿Ÿµ›0îÉé@kéûÞ¨_+Eö!j:Ç’ ÄD“†.hžÌ4·-Ýàìq6+ß§ÙÈ+>�ùBälNÖ¼H>LvÄ‚˜hd–ÿ”Ôe“˜w2þLC0†anÃ牼_Öê=Ñ*AÊö ë7dÈÚÝR¾Ÿ!FPÛ£Iì…q ÿ8r憓PöE“9Å… C9Þ•«Ða²ú"º,Ã9ÙmEèˆ.âÂ+0?FɉÀ<0-¸ßkay`b„-4bA’CVtÝ«·.äF¦MGª“0/’U²ã‚y,0bOpò7:!„ÌòŸ’¡l‘Ùðg‚1´PS­ñk¾´*QZª„>Lž(©e@PŒ‰V R¶OX7?nõã_©3Œæ?1íÙo#uߥbôµ=šÔÁ¶=€Æ`^ÚþƒŽš‚(Ã:`Tž@ÿP>¢‹¸ð L‰ F¾¡+y`tªRäð}HúÑ›¤êcä•èY²(` XG̽ث xúÏ 7æg梘céU²c»rùi\ò¿ÁðOþÆá~EvT´ÃFyþSR#”Mf߉Æ0ìÁmTaü}¥–µúݘ1wz”*}¯•b¸áîAÿˆ’0Ê\³³˜§D¹JGÄèj{4©ƒî*5k?ÔQ9îÿQm5êº'ü6bK˜±ÜAuA)´£û~&k Ì*üw*Qö`f%Lå^–È2Jhn[zÁ?tLßbÏ>õ­œRõ¡·ó:*w–@ýËsþutg/n˜Ûªd‡_ž…7¾äoT+0„ÌòŸ’¡lº˜ "C[tfáø[_ÀPþàVjX«s]5ØUs£N7–^iq0û]–U¢TQRÁ&HÙ¾Dë–ºïÒ 1úƒÚMê`ÛÚ¡T?DŸÿU ÑŒ‘igôK§MŠ>“‡(ÎËæ¿ÃV(Ÿ ÉI¯À:‡.âØÆÙÐ{ëk÷ãÝR&V>›å‰¶Ðˆ±c>‚Í|’> _ÞÁž¦Aþ‘•þïC Óýètú^¤™æ?%5BÙ$&z̆?ÓŒa¸ƒ[YQXÓyÁû%`­~’§è”ת…›@WÕ{ج¸‰Q×ß­Z¤l_¢uKÝwéÀ¿þõ¯UsEÒ«¦‹|!¿‹j{4©ƒíšÃÌ|â¶ œs½7U¨*Q@Qvjà LG•3QˆÿNŸã—c /Ÿ¶£YuåyOW™5l¡‘¹§¸Rÿãþ§|Aå &ìFü"#*Õ-è0ŽSàÃKæùOIP6™ &"CÛOPi Ç¿§g϶ãuÊóÀD–§P×eÁPç(ù 8‡ ?Þ¯XÊö%Z·Ô}—¬(.¡ S`2,w/¡d÷QÔw†Ü p”d L40Ù~ÓéÊGªd‡{ƒ'g?„ÌÔãcÈåûQ˜“üš‡aÕÑCæùOIP6™ &"Ã>0‹n*¥ ?/¡Ž~hÛùŸmEþÙǰ/þ‰®«W T¶Â8ú™"eû­[ê¾Kþçþ¹¹¹ž¾ð/»wïöýElPÛ£l°ãÀ5kÿKXÌÌÚȉI›œ)0ÑÀd/4ÉβEƒ²¡ì[;ÔpMáeS%*ÂlPè!óü§¤&QÙdëbú#ÃP70}ДîÀv•‰ŸÁH-kõûœøµü×ÿ2ãÈz@•ìHÝwéB¨[˜xn_Ôöhú 6å§œ³³1øôH Íã›~²Ç šdÇmVãý½ZX&=gÕBásÒåæg1KåmLæùOI é¯DHôýŒÔ#Ã0>0²¼S¸;¼àû#!‚÷KÀZý̉£x ïí ÚMê`‹/9œÆÍ“™-4Œx¡Iv8‡õ{AõèÙÚ kïC4VC¡~äyý\÷NÓz“aþSR“¨l²u1ýŒ¡í'ÔkûæÓ[_»ÐH-kõ3'þŒÿ-L¼·/j{4©ƒp¾æp+4Of¶Ð0â…&Ùá^ëpp³ðt5T‘íiÂ+*¯02ËJjÈX'B¢ïg¤2†£/5ç†Ë¸¡qbP¯…Ž µ ¬ÕÏœø72+·0‰Ü¾¨íѤvÂù˜Ãi¬Ð<™ÙBȺdç-º¯|îqÿÖeÒÁÖ¥ QÙdëbúCÆ0dèdAñ) ¾÷øC~/%þõ3'~ÆzPÛ£Iì„ó%0‡ÓX¡y2³…†/´Éçr…tÆed‰Ê&[Ó2†µµÞÜ7jQü®ÊÖ6ïk¾´]«DAAšMö”+0\LÆpÀ"eû­[ê¾ËD¨íÑd67cÆ2õÏ`]âxÍÿžîàÉ?³~$˜Ãi¬þ šÛÆ &; ZIT6™l§?d ­o½»·é[(šþPT¦Ð]ý170ñ eûhn[¦Bm&u°çºPµë<:FçÁ- B{0Y…ŸáLé‘°iƒ`§1Aódf #^˜ì0h%QÙd²þøá²å¨ëÁœŸ¦Â9LhØ›,_”Â@¤–še”æ¶e*Ôöh2{í$©®3ض¹ÚQ§ Üèú0‡ÓX y2³…†/Lv´’¨l2ÙNcÈM¢§nr‹£V©Ä¥ê£(ÊÙ‚MÙ%h²$?ÊÆ��°ÊIDATf¥¹m™ µ=šÌÁ^~Õ‚ÃuðçÐCÔ¼ƒmU˜âæ1ª¯ÁñBŒrÎqï]‡ŠD1S· Ã82+~2 }²ÐÜ>¶Ð0â…ɃV•M&ÛéOÐrsþ¹ÊÊRÈå‡PVÛˆŸ‡çÂîy¤–še”æ¶e*ÔöhR››ÅKÍadóŸ)˯ÃûF»4P*¿F³ñmT ÌZÄŒl䗜ıÂ|Ë?A©¦Ž(1´OšÛÇF¼0ÙaÐJ¢²Éd;ý¡]hní}—‰PÛ£Él“‘“8…çoŒjA&+†ªo’Ô£²:Û,Ì uÐŽþíû»äAûd¡¹}l¡aÄ “­$*›L¶ÓÚe€æöÑÞw™µ=š^ƒM²Æî¦½ZX=úÏŠcçÿ_6k¬”ÐÞ4·-4Œxa²Ã •De“ÉvúC» ÐÜ>ÚûŽn–áÀX`^î/ô÷‡Žx Ôöhz 6‡S= v6À¼D†‚(0Eø o;dÛΠk*ùÎý´÷ÍíËì…†‘Lv´’¨l2ÙNh—šÛG{ßÑ 6ýiÈÏ|%ñ_)—N¢xÏUϾ™³µ£bG*îE­ÐPÛ£T ¶kΨMÊaëmÁ×Ê[0NÏÁ¤*BNñYÜ4ÏÆ­]&í“…æöeöBÃH&; ZIT6™l§?´Ë�Íí£½ïè†W`tG‘S¸r¹< œnx‘)0bã2Ö£T;eeº }²ÐܾÌ^h‰Àd‡A+‰Ê&“íô‡v ¹}´÷ݸ1ýü9E6F¢¶G“:ØÎ´–¾ÿ™äsE¶ UÚ>Øœé•??©ý4·ö¾cÐ “­$*›L¶ÓÚe€æöÑÞwtã†ýQ;žÍ죗¡o1aÁ÷2V¨íÑd¶Û¤ÂöÜ2¨ÛtÐéÖÊÊCØYùOþßz<0O¥Ä,^hŸ,4·/³F"0ÙaÐJ¢²Éd;ý¡]hní}G7Ä„¬ÄÓA%?qj{”|±¤áCçe5~¶ Åܦ«8ixí{•^$µÿâ€æöÑÞw za²Ã •De“ÉvúC» ÐÜ>ÚûŽnˆ¿µ7Úü. ÚЪ<ŒÝ•-0MÆç¨Am&u°íOp³û/¸ÜáïX–ÛÑbšó½¢Ú' ÍíËì…†‘Lv´’¨l2ÙNh—šÛG{ßÑ ‡…‘ü¸Å^z†C*ô9âsÑ ¶G“:Ø6äüç‘Ï _dØVÕ‰©4±##m¦šÛG{ß1è…ɃV•M&Ûéí2@sûhï;ºqÁvç:tŒÃf³­«å'ÔæïŒ;W"µ=šÔÁ¶ÝCmm£ßÕ_Z/A±» ×üýbÚM˜d Œ(ÐܾÌ^h‰Àd‡A+‰Ê&“íô‡Œa¢EJB}^¬E*­[ʶÑO8²v7À´߯šÚMê`/Œcø¯%ß‹æan8 eß´ïuz‘Ôþ‹šÛG{ß1è…ɃV•M&Ûö\›?‰À+0·¿úñ¯0kÅôÞÌ,ð¿j{4©ƒm{�Á"¸Ú²ÙþƒŽšd)qwn*¡}²ÐܾÌ^h‰Àd‡A+D6-Œ Ícœê¶ùσxKæÂÁ5;‹ù ‹Œ—«¡uú^ǵ=šÔÁ瓵ê„÷9,;ðÈ.röž(HjÿÅÍí£½ïôÂd‡‘®0Ùe°çrü°ù NK+Js·xú)°ÈòOCk‡3FK2j{œ|©¤ak‡Rý}þW[F3F¦Qç~á&ŸájÙ.d ̦M%ÐÙ’‡“Ôþ‹šÛG{ß1è…É#]a²Ë`Ïåøaó'ó0© ‘[ö-Úü}Íu-PÊ‹Q©ù‘ÿw'Ì3±öSÛãI×fÿ ›±•J¥ÍÿŽ!ûþÌêÝØ\TÆ€d˜:ýS ǪVŠ�›ìñÃ"F¼0Ùa¤+Lvì¹?lþD‚ƒËÖ‰ËWÃ.ØóŠMý0Äi¥Dm'U¸Y¼ÔF6‰ˆŸÛÅŸ`oi#^:¢éØ¿1ª=‚}Ú‘à· ®äë/l²'�[ˆñÂd‡‘®0Ùe°çrü°ù 7ìÚÑ;û7ÿ/?–¡o1aÁ÷2V¨íñd 7ªÅ>Ù;(R=Ã4¯m¸Œ*”èF±dÖà„v8 32þ=Sÿ‚òèwèõðCºp›™ÁJÆF„É#]a²Ë`Ïåøaó'áÂ(óeÛtM±˜¸q›TØ¾é ´Vo(e¯3‡ñ+E…l¯š@80žÂ|`BAsûhï;½0Ùa¤+Lvì¹?lþD‚W`ôJÔÞhós±hC«ò0vW¶À4ß™ÚOª0,üUÁ>¨Íóž—.£9|€Ù{¨êšˆÊ‘Ÿ›hÇé³mx.@Ê &S`CÆ&{ü°…ˆ/Lvé “]{.Ç›?‘à°02‚¿·ÂK/ÐpH…>G´þæB¨íñä q0êÁ_×Ck| —I…œœ}¨¾ùލu¿1;³•²“ Ød¶1â…É#]a²Ë`Ïåøaó'.Øî\‡îq? ¬–ŸP›¿J£Ã÷w±Am§—0¸1cîô\‹é{­Xâ_;†{`Ð?‚ɾèû›äÂ&{ü°…ˆ/Lvé “]{.Ç›?‘ç#CÖî˜â;ú§¶ÇÓK–1×Uƒ]5÷1êtc镳ßEaY%Jõq_%íýGsûÒKö4Ád‡‘®0Ùe°çrü°ù ^¹ý ÔºX˜†0uº’`¨íñô’¤çš†‰3 ºªÞÃfÅMŒºþ†U{*îë±D`“=~ØBĈ&;Œt…É.ƒ=—ã‡ÍŸP81fãÿËáÌÑÒe‰Á-c}¨íñô…ìêøÁêü+ÎÿÎ!蟅a‚E! „-”Œ“FºÂd—ÁžËñÃæO(–`k×àÖÐLª]|í‚Êä –%ÔöxR…Áþ7Ÿ¾ pÀwbP¯Ú6sôC£ØÎ·{+òÏ>†}ñOt]½¥²Æéøb\'›ìñÃ"F¼0Ùa¤+Lvì¹?lþ„$Šo9Ňۑ[Ú ‹S¼+j{<©Â`ÓAÎùLa‰>Œ²—““Ž(òÆHORû/hní}Ç &;Œt…É.ƒ=—ã‡ÍŸäCm'UlwPYV­_‚íwåÈ/¨B³ÉNMhäX`“=~ØBĈ&;Œt…É.ƒ=—ã‡ÍŸäCm'Uœo`}+¼7á&4ìÍÃ!Ý’C,qØd¶1â…É#]a²Ë`Ïåøaó'ùPÛãɆ%ÌXž@«¾¥ê:î¶}ƒŠƒgÐür6Š˜e80¨ép¡¿?4a“=~ØBĈ&;Œt…É.ƒ=—ã‡ÍŸäCm'W°´–!Wæïÿ²ù5asE£~¸`ÓŸ†üÌP*•kåÒIï¹ óÎÖŽŠ¨¸?–…†Möø¡½ïôÂd‡‘®0Ùe°çrü°ù“|¨íñd 7a@黡ê0Áêðš’qÎ ¼ÔžÁqÃx É2z9…û!—ËÊ膙�[(&;Œt…É.ƒ=—ã‡ÍŸHpp9ÞÂf³yÊ›’Æ÷§ fã¿a¶-ļ7¦¶Ç“) .ãWØ×ôGPçqV-JcQÅܘ~þƒÉ–6Ùã‡-DŒxa²ÃHW˜ì2Øs9~Øü‰„Ó·(”½Å¥&t˜&ø}5‡¥áÛ¨ÈÛêé»M²QÓ9S_j{<™ÂÀÞÂguO0µj.Æk‹3¸[ý1ök‡cÖ i€Möøa #^˜ì0Ò&» ö\Ž6"Áa¾û È›,XòýÎ~¨‹Þáû-•:F_=Aýþª˜¿SÛãÉ,M%Ø–SˆÄì«8YüçË ¾Bß\4×*nصãÙ|€ÿò ô-&,ø^&6Ùã‡-DŒxa²ÃHW˜ì2Øs9~Øü‰Ä<Lªjh­+ê‹£ÚlÞ´¹5¿`ÚsK@\1ª¡4:< ÔöxÒ…›‡µ÷G¨ªJ!W”¡FÝŽ—Ó«ºâ:Ž/ñ´9¨l;ƒ®)–‰?šÛG{ß1è…É#]a²Ë`Ïåøaó'D9…¦áEÏ+nªUÛdØ”]ƒmeŸ= £²ÚÑ¿}¯×‡Ú§Bûaxd󽈉B¦Dí6_"Lo2ÌVåaì®li2«>q`“=~ØBĈ&;Œt…É.ƒ=—ã‡ÍŸHpX0~…=åxÒÓuÉ{|ecŸÇ¤Œ8ø[aÒÕ O†cðÙHY“ÁN´ˆ7¾«åÈÏâ5BÁgdA®³úþ(üàŒŒà¯ÀŽ_z†C*ô9ÄO…)lg|EJB}^¬E*B}V¬…‘™„’…X ƒA#L64Ë�íòÉæÏ:p³xÙtÌ—®dŠê:½iJ–¬èÕ¯üwÂ<½ÅRÊz<ÑÁSXÜf5Þß¼Õ?úÝ rÝÃ󾿊„ ¶;סûc|5L)VËO¨Íß“M_´ÐÔ¡ ¹}´÷ƒ^˜ì06*L64Ë�íòÉæO4xÃ)û‡QöÇÝ߉N;S`b‚Õbß>-¬A=ê†+ÚD–!}`dÈÚÝ�ÓB4uÄF¢ß?Ñ÷¯Íí£½ïôÂd‡±Qa²É Yh—O6Ö‡sŽÃØÑµÂ÷Õre…ÐÙÒ Y¢ƒ-ª°¸&У<…úžaÁ ŠmÈ�õíhLÈxæö7P?þF£q­˜†0éß|Œ@Uÿ…€æöÑÞw za²Ãب0ÙdÐ,4¶í¿þë¿pòäIO!í[ù7)¿ÿþ»ï¯œf4)¶{ú)|)a L¬,¿jÂ]^`‰ÞÆ5;‹yñ/ZÂ’è÷OôýëAsûhï;½0ÙalT˜l2h–Ûö¯ýËÓ®À’››‹ÿùŸÿñýƒX3MuœÄ?JÀóWp„´lZÂÛŽÜa LŒpã0œþºç~·'žò;,“Þ°o´AUÿ…€æöÑÞw za²Ãب0ÙdÐ,´¶m÷îÝž¶ùâCÍðÇ£² ‹Ó÷:4Üü,f£rÛð’2‰HT}¿07(®E8#u&‰ªÐ|õ¿À¶4ëÀäÏ]Ó6ýÓð4¤  LWÿCsûhï;½0ÙalT˜l2h–ZÛx Ãn_BA˜ê˜Ìâ!e!F7ìè_'ø€„‚d³ËXRíPX%Äcz¶e/jp©ì#doÚŠ‚/¯ãûƒ+v~Û¡Ðô{•‘~Þ|†¹HŸ³<}‹ ¾—R÷Ÿ ~ûSèŸMDpbP¯à@Êö ë¦SötÂd‡±Qa²™y¶ÅbY-Dü_§š±±±°m#¿£ÿ[vû & gp¼ãMÈèc+poÇ1îŒ~ܲK¸X’(^'P\y1Dd‚•r•Å'V58áûÄ9€ÖÒ÷!ó   Èv¡JÛ[3>¿y1Ö²LaÃMŸ`“\‹ß Uاl‡ix6«|»oÆY4Z„ßß <+¸íeÛtM%g#%¨ß¦ƒÜ¿«å=TuM„hÁûEFXwŠe‘V0ÙalT˜lfSSSžqUȦ<Õe TÛH¡IQX¹…a·/ááFÔ+Ê¡îèƒÅê,kµŒc@û=n§Ÿ Ù„ CXÖ"×bá6©°=· ê6ÿ0:ü¨<„•ÿäÿ­ÇóTÀFÛÛæ,¥‘ÿ¹Ëó(0F]=´Ö%ßßp˜ï®ÇW’ç±B_«Ä ¿¶ëtÍP*ö£òÚ-¿Ÿ=€i29)Aý¶{¨­môk_Z/A±ûšMv ˜ÔÉ#½Ž=“ÆÆÉffB"i ×+o!›òTC”¢¶FE(|doÃ×´%*KËååcäe•®>+£!e+Â5ÈF઻§|¯C1…îêSÒl\c輬ÆÏvaǹMWqÒðÚ÷*’�³ ºó>æÚ8,8rä2šÚÚ ½vòµèž“&ÿŒ O(–Ì×pHùŒÿm0¢ö_õ/Œcø¯¥n…y˜NBÙ7í{-DÊö ëæeïÎ tÍúÙ¹ŒP–è`ó½$·m³]7V£cHÝw za²Ãب0ÙÌLBÝÂÐpû²Q ÛÇ…‡Å^=S½NÆz¡ðý â‚Ùº�—Û_X›þØC]¬à†îÔtÙÇÑU¹ï«_ÀÍÍ¢¯ÃÞœ­Èúàä(ü73â!üþVÜÑt`$à:n¨ãvd)a !¢ö_õÛ:Р3ûµ/V^¯-ôÝ`#eû„u‡à´ åÿÊ/:†Ô}Ç &;Œ “ÍÌ%ð††Û—oa˜™ÖÆíB¤¸Y¤lÅ"‚¸‰ý9>ÑÜ"øÁ CûÉçè‡ÃvåòÓ¸d»~jó<ÿÙc¸_Q€í°4s¼„®®¥5?Âìð;‰%¸-¸ùíS„¾cH á÷ç³ »Õ¿¯:îû#|¿øê瓵jÓœï„Þ/2us./~„Ø„úO,)ÛÆ &;Œ “ÍÌÅÿ†¦Û—üoaØíKšãš‚¥[Šì³ë¡Ñ=F¿m!üÞ?)[±Kn¸ »sÏ Ã*ïÊ"lg»S‹Ï+ðý Áo°9…8d“wÇuCXŽ À¤ á÷·â¶RƒÇ}þ9lþ óÈÂtµÿB ¨ßÖ¥ú!ú9vú1øf&l˜j)Û'¬ÛÛ]=zýÚ´ ^mJÝw za²Ãب0ÙÌlVnahº}Yaå†Ý¾¤3\¶ÇPîý‡GÎ…ËÒ Ä±7e+i´�ΠÑÈòÊ¡6<ÅKÅË6Žá—OaP—#O–ýÚWXñ& z"L÷£w0r‚Ú~ÿ¿1;3‹iËhÕWx­V掇ˆœ¶†¨ýAý®9ÌÌÜNñD S-eû„uóÅ£È)Ü¿¦¸(DNvŠWÙý(Ì9ʱLv&›™ ¹…¡ñöeróÂn_Òg?ÔEï@–«À…k:tõöÁhìCo—×.(+ÛŠŽ×1ÝĤlÅ µXrö§¸J;Û´ù5aó;­õþ¸‰#OIª~ìOê/ãû*Ë»y:P˜ƒÍùÐòFKú‡• þ8ÂT Þ/2ºClBƒ Û„2¼0ÙalT˜l2 iXÆ\×ilÉ=‡.{¨´"ËpŽêQ¾ë Œ1ì¹S¶b…[,9ç8Œz5jÊñÿC(«ùÚîWAWK¢.¶qä)I5‚ï¿<�ÍÎm(Rþâ§,aæe3ŽTÜÃDˆ/ x¿ø×O˜j)Û'¬›ß„šÁÌ€^˜ì06*L6 †4Ìäúû"ù¹ÃÁÿMÔæP^Û¡IÙŠ•èb)êbGž’T#øþîP¿ÿ©_þܴН½QȸÌÌ®i¾R?¬õǦZÊöyêæfñ²ù,*êÁëÿ™ÂðÀ˜WIvMcØôLÃÓüöÔæˆÍàŽý2þûÅ Œ„·ÔäY›ÿ¿°ùþ†ÉƒV˜l2 i Q„åëD& ëE#’²K¸XºaïìD°›„�w':íÞ?u±#OIª|n¦zö©îû9Ê÷ ³± ;jüB^?oÃÙÓí«·1R?¬üëçfÌxÐvÚ{a]âÀ9^á©á˜&„J‚R¶Ô½üª {¶ìEmc.•}„ìM[Qðåu|p»ç÷›6m‡BÓÒ©Lê¾cЋpìùWò3_øE/ ,~Ñ y˜ì0h…É&ƒ-Ëp `,ððŠû ýýtZí¤iø<NuMú^‡b½µ'Ð4Úí!)[±‚6º(®¼b°RÈFà„4¶äqä)I5‚ïÏBwp›çg‹ì�š^y…ƒ¼–Aýs]¨Úu£óà–¡=˜ƒ¬ÂÏp¦ôHÊYÚ Ç°¥¬SXÄpÓ'Ø$×âwCö)Ûa"$øñïäeîæh°½¦Ô}Ç áØ“uk=R|Ñ ùw0ÙaÐ “M#ZÂ^]:‰â=Wa&µ¶vTì(@Åý1¦Ð~Cýé6Œ†Š<ËÍÃÚõ% w­Eކ”­XÁÏÏ"—‰˜Øó”¤á÷_Æ\÷UÔw•° òŸðß/>þõ»MßBÑô?‰y-¼ë ¶m.vÔ Îª…"E‰,‰¼y•Srµ™çQ`Œºz?3<óÝõø*Äu¦Ô}Ç áØ»1ýü9×¹9ö‡ÉƒV˜l2Ñéðê tËL ÂFùê7å¼U–þDçåã8XVKÊV§£ ¦lÅ.–¼0ܹ®Yÿ†[¡+Qùe‘—0¸<%“ü&Û÷'‘qcÆÜéñÑ÷Z±Ä¿v ÷À “=úë°Xúþœ.wôÓDꇕý˯Zp¸îþzˆº‚w°­ªS¼Æ=ª¯ÁqÃxÈ>–²}¤n·Y‚ênÌû˜wj{à°4âÈ‘ËhjkƒöÚyÈwÖ¢{.ø8@ê¾cÐK¨±÷¹w*r§nA‡q<eù—Œxa²É`DKì‡W /œsæ•È’×Ìfg1/øIT`HžÇÃfl÷uêúyT„q5ØUs£N7–^iq0û]–U¢TQ>G wbQ"üþó· £xyàìè6‚Pn¤~X ê'óšÃÈæ&˯ÃûF»4|?fãÛ”(0p Cwê ºìãèªÜ÷Õ/àæÛiÑ×aoÎVd}ðrÕ}HÝw z {ÎÑ‚øMe#¿ä$Žæ£Xþ J™ÿ#Í`²™a8†` <`]›þØãÙMfnصãÙ|ÀÞnyú¢£•IläD–þ¸&aéTaïæPÞÔƒQQsgÑ[û¹4 Ìê[†¬üÃøüØnì(þ{KñÒóÙëABÄò:qèªz›71êúVí©˜¢*D‹ðû[¡¯­ÇOžÄ@~·HÏšPö‘F3¬ŽUMЃ¨ý‚àú]pL®™°yp-¦4?çx ]]Jk~„9pœÝÜüö)ByèHÝw zŽýßÕ‚LV UߤÏ‘²ÌÂÜP-óŸb¤L63 Ûm”ËOã’¿‡Ðn ÷+ °£¢6¦ÐÁíaÛtM±«™ 6z"ËU8'fÞøûmÌÃflFyîInT‹}²wP¤z†i~Cí2ªP¢Å’YƒãV¯°ˆWM§P×eÁPç(ùòÇ8‡ ?~† ¡ò Âïo…Nžµ6B•¬ùöñÓÎ ù™”DS?™ø½03 F4Çž\즽ZX=²²¢ÀØùÿ—†<¸`²Ã &›†MEN!ùpø‚Ž0&¼£W¢öF›_ú6´*cwe L“âïùÒ› Èr0ÊÎatë;ðs½M¯ÅW`<‰7\uàö*0#p¿BQ”QÈÖLI¶"ÿìcØÿD×Õ+PÆè”-äûO޼ö]¹Yq[u/¬þû|ë@õ Läß$ªšR…_.©V‚ú©ÎÄï?vÌ ˆáØsX0Õ£`gƒ'êŒW)ÂyÛ! s Çd‡A+L63Œé~ô†20g¬¿öŒà¯ÀýÁÒ 4RIâ6ÞlèD–ä:.…a”~ƒª`ßj®—Q‰â±r“âùi¸˜œtD¥ð$ ùþk>B³0Û<aZø›A¹&Ð]{hõTXꇕýtgâgf@Œè ûEØz[ðµòŒÓsü\„œâ³¸iž ¹n0ÙaÐÄý×áäÉ“žBdsåߤX,ß_16$ö§Ð?›X§œÔëaŠá<3á÷¬w®C÷ǸàÐØjù µù;%qHoȾjÃ&²$ Oae~ »l=øáëzhoáâ7Ü99ûP}óEÌNEÉ‚|aƒH·eW¦æ†ÆLü«03 FôÇ>vGN&; šø×¿þå‘ÉÀ²{÷nß_06,áÒGlŠñà6# ·g•!kwS�ƒØè‰,a”aë¼€üm‡¡y¹r’éÆl× Ü‘D‡Xü(…|ÿ袠™ðÔ²v*,uÿ ê·?ÁÍî¿Â<G>鑲}º™#z„cáà…É#M ÊJ üņ±Á±ÝCmm£À*B×z ŠÝ§Ðl²3&"üÚû¨ÿ* œdúoføß2‚ظ‰,ýÃ(û”ÙVäŸù_W|‰›W#ãæg1ëûòÂ÷§žXý(…|ÿè˜`¤î?AýqœôÞ/2Áu33 FtÇžˆÅèÈÉd‡A·0ìö%CXÇð_+‰›W˜‡¹á$”}¡âo2Öðß³úã€ñrµ'Q7#r¾!Y®ƒ ö'u^奿!l¼²ÂÙãÜÁ/ÐÉ+1ÜÛqŒû®4èÚÄîG‘(äû§s•eõÐúmò´ß•#¿ *ìI”í‹®n^&‹!OR¤î;½Ç>vGN&; ñ¿…a·/‚­ :³À‡Ãì§¶YQ/Ê\88-­(Íݲ:oü‹,ÿ4´Zà¤3œË…èU”ȤìiJy ïIæ…žÇÞìwV•/Dk{ˆ³û>ÅécµÐSiB»E¢ïŸ6 Œó ¬o… å&4ìÍÃ!ÝHpð)Û]ÝáOR¤î;½Çž˜¾ÆæÈÉd‡A#+·0ìö%ƒg‘µjÓœï¡!{¾Bä–}‹¶ÕƒYRZ ”£Ró#ÿïN˜gÄÚª§;ëDöáîïD§=ín`VlÉeÈV\‘<’(1÷Q%Q˜hXlGKØI»E¢ïŸ6 L8û\>RæU'!R¶OXwì')äçŒÌD8ö+ëV Ü„w侟Á ¢¼°Û— ÂÖ¥ú!úü}8Œý|36Á4c²'íÄå+at¯ØÔC ›ðÌ€<+c‹4 ){š ääË•†Q^Vpa ‘æÆ—=mªÈ°­ªSaçul~‰BÚ4üì%&#V>£á)ì¾Wþ÷K‰ ~ÇÌc‘%–ð¦ `ò¯!eû„uÇ~’"uß1èE8öüºÒ‘s“yV`²Ã`0¨À5‡™ùàýV¤ÓŒˆóÍú—i_ãú æþ×Ì„l•p‡}e-Òp4¤ìiJ»ÿåôõhzÙñI*'~’‰A%®ùç)ñDã¨þ¬Ý´ŽÂ<ûo²Oƒ²ülŸø¹6ß_ù#|¿øê·ÝF¹ü4.iÛ½¹wBdü•²}ºc?I‘ºïô$;!9ÃÃd‡Á`PA ¦+xݶTvaÍ.‡¸|ûn£ús8*Q§ôƒ(09^¬VD+®é¢Àp³xÙ|õ1j…ùÿó¶kæß`ž{ ày¿H¸Œ_a_Ó7%Sè®Þƒò[ÀÏé@ðýÝ/ ~Šª5·:軇J-³ÿB!¨ß¦ƒ"§ärÈå Žë†°œRÆ çøÏ¢ -uß1èÅ3ö«ëÖ/°-ÍÁ:šu‹Á`0â%žÓŒÈf»•‚¼&VÜÖt¯)4‹½¨Í:€¦WÑç5Ù¸l@fùUölÙ‹ÚÆ\*ûÙ›¶¢àËëøþ GLN¶CFƒs#ÀMÜÃñã¼ö³ûäFÔea»Ê”@Ä„E¼¾w%°‡|nÚ}G µ†Däàv¹C.@Ro¤õO÷£w0¶°‚R¶/°îXC`KÝw z!cO˺Å`0qG‚iÆ Ä¥á,ÎvOù^óûˆ©”¿S²ø‡›0 tsž$AœÒ 7­\‰ÞÅ•eš)0vÃ1l)ëÀ¿Ñnú›äZün¨Â>e;LÃãž~Ê‹¸" ±¸'FuåÈÍ?ŒêKJ(k£8g 6e— É»ðqNú4â‚ü=Èb´é‹á÷_ÂTO=ŽÖ?Ũ_4$›Í ú~êMÈìO¡6 HÑ’È2öØR÷ƒ^ÈØÓ³n1 Fpî€ÓŒháæžáò¡3hììAß“[¨ÛûlÚvªkWP{é<Ê ·A–%d8ý̃(08¨õî—FÑ­©C™¢Uª;xI|Œ]CÐ**ÒG!N=ÞxãdÓ˜çÙuõ~7 æ»ëñUR‘.ÂnºúªRÈå‡PV«Á¿Ìõ별™W=ÐÕW 0KÆ·o Ë¿ÂõK*Ü–ZYDÓžw<? *TøÀМÈÒkËKl)ÛÆ 2öt­[ ƒÁH>Ķš3û#“!«ðsoÐ&nÃ?·@¥jE¯/ ;c£{óPvül°ðMÇ£Zù#L1(|){š’¹Û¬FAu7¿…ônÞ©íÃÒˆ#G.£©­ Úkç!ßY‹î¹à/$úF€[€ÍØŠ8˜«ÑÜñïØ1¬=Œ,¾M²œ}8ÓpFÛ‚gcîx@L„ߟ\g^ÄY]0)r«ŒÔ)Aý¶{¨­mØÙzƒ$œ¢ ‘eì!°¥î;½±§jÝb0 ƒj|y`ç`í kãôÊã†îÔtÙÇÑU¹ï«_ÀÍÍ¢¯ÃÞœ­Èúàä(’pƒ@œr5‡‘Mò7äÆçÇvcGñ'Ø[Ú!¬s�.~`LÑxá(õÐõX<¡T“£Àð„ ‰©7R‚úÆ1üW Î<Ì '¡ì›ö½"eû‚ëŽ-¶Ô}Ç ÏØÓ²n1 #ðò{_âÜ“7!öÌ·QßôÃÑî7<Ä„læá/¡««@iÍ0¶Û‚›ß>E¨-®˜FyŸì©žašW6\FJt£X2kpB;rþý3CèÑÕ£ªäN”\XÍ]#&ÂïoÃ#½1(œk¤ä›Ro¤õÛ:Р3ûùæðÅjFGm¡Ï')Û'¬{ŽŒE¼l欑ºïô²2ö‘×­ÿ ùˇ)É¿Ä`DG˜uû ýý¡Íz Æ dC^‚MÙ‡¡ ™ŒûoػΣ T‡Q °Ó_ñÏ¿È%-óÀxáœã0¦ ”­'œà¦ƒ«6ì^fãW( ³ÁŽ O,ð飑ptò,Ÿ�ø—ðÉ7…ïAýá|`²öCKX7?±ô§!?óEˆ•â—³†Gʶ1è&º±wÀx¹z5?LvtfÝ»tÅ{®zÌi9[;*v âþSh ¾ ùÜoù-¡”FùÝü¾aÁ÷ƒL†ô×FËãGJCÙ.üUÁ¾Õ ªË¨D1‘…w2O5Âïo…¾V‰þ>&ºf(ûQÙü[Èä›Ro¤õóB¥ú!úþ9ýœt†í[)Û'¬›L¬£È)Ü£&°ørÖðïºïô"{NK+Js·x~Xdù§¡ 8„!?g0RO¤uï tËLa0ÂâS`H$O^°/qùÁˆ`­÷„UÞÂÂ({ÙÐ LªCÙz£Iüðu=¿áx —I…œœ}¨¾ù"¤òDÂïïÀÈðdÀC†Ã’ù)Ÿñ¿ Fê©ßñòNU|‡'£o`5ÿV©Íf†ûa4`&ÂÕª”íÖíÆôóçŒá’Lê¾cЋpìI»Bä–}@¶Jy1*5?òÿî„™„ˆôÁd‡A±¯{ c?†¼$JLÓqì=rÚÎ{ïA%ߎMÛÎ… æ’y„P`Ò=Ì)eë‚y,r¸;îý Ÿ‰Å.Q„ßߊ; üáïcb…¥£ùYJ? w ©7R¤þ¦=9(®ý'.•ããldµ¸ñ} ²ùßó¶lÅõ°A¤l_¨ºSe¾ÈH/„cO>:qùÊãUÿ(/üzVÿ !LG™ì0èÀ û£v<›Ø\-Bßb3za0"ÁÏÃ1Èv|‰Þ¹•u~vc ª ·yÖùðþ1™Q`6X˜5RÊÖvåòÓ¸äo P.UîÇõ ÆÒZ!V¸D~ÿp>0Û°[ý{ȇ‘ðýâCê/ÙrüØqÃMؽ©m¿ëptŸ÷M¯¼ Vg=Nß $AÊöÖÍ2ñ3¢E8öüCìámtO-òÿ ‡0a+“øNyy *až¹ ÃOäÙGÐ÷Ú„{Ή™7˜‰: G&°óÀ ʶÍÆ¿ø¥6˜à÷'€MEN!Ù”ã: ‡ìÛØMàEøý­¸­ÔàqŸ¿‰¦A{ÊnHýrßíñ)Ê"Ñ%Œm¨ÓެMöùnÔ~•ê(d,?#z„ca((k¾tä5ƒ‘zxÙÕ+Q{£ÍÏô± ­ÊÃØ]ÙÓdô§  FæàĘeŒÿ/¹}7¢ýg µnTB”¾y`b%eOÓèäüf2Ñ|¦ûÑ;üÑ» \¢¿ÿZ~¡.Œ²ºà<ºùFy˜wêÐë0Cs¤_7ýöŸ¸ ß‹šî·¾w‘²}ºY&~FôÇ>Ò&ðªŸ_Œí¾„­LvtÀaadî#–^ á }1œ‚2Ò¶þ$ÊlíÜšðî6í‚Êä þĈ„/‘å:»é•Èr¢ù,aÆòZõ(U×aèŠèd.$v¸D~:Ã(êêP×5Ž©®ÓØò¾f·ËmÔîÍ…,ë=äå kï(eû„u³LüŒè ’7LvtÀ+ßw®C÷ǸŸß¤ VËO¨Íß)É¡#õ°õGˆÃ~Ë9(>ÜŽÜÒVX¤rtÞPk… ˜ÈÒKª£ù8`i-C®Ìó¿ù5a‹Z‰‰-›{¢¿¿úšZ4¶ù÷]3”¥ePêM© £ÌOt³îÊJ/„è',7Ñ=Z¹“²}Áu³LüŒèŽ=Ù6Ã0â<ƒ/C?¡fG»½cP ÙP„2”!kwêÏM·••x ƒ‘|­7%-Y¦6š7a@黡ê0ÁêðvçœÀKí7ŒK¢€$Šðû‡£ü©ê·”9ñ'‚”íÖ{4©ûŽA/±}(|?ƒ‘*xÙ½ý ÔøMMàÍÌÿ[ú }î°¹Í`„ƒ<+O¡º{Ê÷:Sè®>•Ž Œ×>δèŠÍGh'æbá2~…}M)*œU E"™ø%DøýC‡Qþ¡;RF9¤lŸ°î'Ì„Œ€pìÃlÍb:L&; :ààš ò›ô˜Ð†ñ;M5´Ï6·Œp}V`"Ë@VüÓN!_.6û81 nô>«{‚©Us1~qŸÀÝê±_:̯o8Õ§«ñÀ}HS_øýÃùÀlE~ Y&‚”íÖÍËžþ T73Åó;âˆ]†R¥>d4©ûŽA/±· “ÄîwšjH»h†öö1©Ã©ŽÏñI¤ý47 í'Ÿ{RoDKÊfœp²G8”5û8òZ<°4•`ÛJ(åâ<dñõË ¾B_ R’íO’ÿmUþå lì†öì%^‡NÐ)|¿ø$Z¿”íÖÁûÓï˜C�ÍrÍ`DOì~§©†ö¹Ãæ6ƒO>ÀÜ3è°…Ú“.ÂÖq¹;5°Ä�1e3N8ÙyàÎ tÍ®-–Ë–FœðÏp½$úbÁÍÃÚû#TU¥+ÊP£nÇËépi+!§øgQöÝ ¿Á |WVˆ‰bê ¿(¯À|TjÀD•WêÅ6Ñú¥lŸ°n"{!¢ñüç.ª™#6#�šåšÁˆžØýNS ís‡ÍmÙˆ¿¾w)œ?)‡³Âp$²¼r¨ Oñr˜ì¹Æ1üò) êräɲ±_û ±pOÙŒNö`S —ñ vûg¾çÆa(=.Ä2œ£?AóÐæ{ Îñq¼<Üp¼ø{ßý ºÑз ‰ üþ¡n`~Å/𣨶]Sˆ¹$uÿ%Z¿”íÖþöL–……ÂeHtì™ì0è€(0OѬÒÄ®¿`îÍLÈb€ÍíÌ…sÚÐÿ äïAc$­L‚³?Åå½ÿðÌa‰5ꯗ”͸õ&»çº){?êÚ£¯ï î*Èöäñþ~½÷Çk£Æ{h8³9²,ÈuVß/bÅ{w=ŽTÝÀK‡øÚ¸ðû‡ñ‘ âîКè‡ðýâ“hýR¶OX7¯ÀÜn€æ_}~Ê_z´_à¬a”ÿm0R÷ƒ^h–k#z¼ |·Tva-Õ1¯Ô¸|Ï*n£ús8ªé§&Ó8ís‡ÍíLc 3¯z «¯@a–Œÿm(,ÿ ×/©p›)0ppók YJ8ç8Œz5jÊA.?„²šo¡í~×:“²·îdçÞàÉÙymveCžƒRÝðê†RÜÅbÎÉ<iU¢4?›¯{ råçqí†ê¨n`’ðû[q»^‡?(›í &}!¡C!õb›hýR¶OXwî4}t†‰à>”ºïôB³\3ÑCL²‹QÙ5é{MàŸ#šî5…f±µYÐôJ| ‚x }î°¹I,bX{Øë+³gîÁh[ðnÐçg1ãMÂÆg£†ó8XV¡–I§§¯%e3.ªÉIÿO(• ¸Ù;Šÿžü o}‚!æbÁM=FÍeÊ6ô¼šö)Jn¸¢D×kô6×CÙð,äÆÅeƒ±½&»4‹¿ðûó ˜õ)šU_¡áÞ�¯Éó�#ÚôæýR/¶‰Ö/eû„u‡º1¢ï—k(Ýö!T¦yßß­!uß1è…f¹f0¢Ç… ÃYœõËËÀMu ü’ÕÊžüh›ó¨ÉÊOûÜas;ÃpÍÁjzˆÆ G¡¨¨‡®Ç‚Iç2S`"@ò+šŸÜ„ªêJªTÐv­å^Œ‡”Í8ádwcúùs F´´š‡Yý¥t>0®)Xº4¨.; ¿ñ·9áÒ£þv4&d‹xÕt�2Y ?ÎGn©#Cm8”-ƒ¬è*^J`H,øþ˃hÚód9âã¼|”ê0¤û Ù›ÞA‘º¡"úK½Ø&Z¿”íÖÎf+ò*ncx)xì„ïgd‰Ž=“-psÏpùÐ4vö ïÉ-ÔÛômG¡ºvµ—Σ¬p[X?ÀT@ûÜas;SáàšB®U%Gp¢äôÌ„lø>sXazЈÚR9J.h`èõ*€±²'œìü&R•×nùEñ (­— Ï.•܉Ÿs¼@sé{eeáMÑúÀ,ðÊU1v{’a.`¨©—³žŸ[4ŸCm?Œàû»_@ý¾MËÀ’MŸ}# ÿë€æð÷«~CþH½Ø&Z¿”íÖMn`¾‡v@…Ì6éà©ûŽA/4Ë5ƒ䦾¿§ Y…Ÿã¦y7‡áŸ[ Rµ¢7dÈÓÔ@ûÜas;àfñ²ù,*êmiÖ1¯ï†kæß`zež…E!‹ âÂaA¯á*ÎÈà„a$êHd)›qÂÉAi»ŠÊü­üßoAni+,¾Û Q ΉIó/Ъ|ÎX²÷ ¿ÐˆŽžû0<ó·gïÄù‹?cŠ4o® §OwaÎeG¯²T’+øÀþ³w}…‹]ü#i™ÿø/pºËÎÏ©(‹®°LüÖ͹\pDz{ס"ISÕ-èˆÄMê¾cÐ ÍrÍ`ldhŸ;lno|–_5aÏ–½¨mlÀ¥²½i+ ¾¼Žïn÷Œÿ¦MÛ¡ (ð=¸aïìDÿ:z»ÿ>îÆµ7e3N8ÙC›qÎtÔGþí×?„Xs±àl¨+Îå?g+òÊoÀuþ—1z÷refH|ÙvÝsâ_Á ¾ÿòî}ß/àÁJ‘a[õ¿(3kÞ/‰Ö/eûëæýÐ(È”ü’“8V˜bù'( ³IÝw z¡Y®Œèá7÷¾Ä¹'o¼ÄqX0ßF}Óc KA3^hŸ;lnotø9c8†-e˜"NüMŸ`“\‹ß Uاl‡‰ä5±šÑ©¼ˆ›£ûÞÃðBLõO ¸ò"”ä8d¹ˆÊâ1… NÙŒ‹<Ù9¸ìÏÐ@6•²Qm ÚHŠ¿X¸à°šð ñ"Ê–óöC˜†~EׯÑÜÀ,áµî *ÿ)¼=Ò?À³QGˆDâ¾?7 ÝÁ}Ù“×>_ßñ£a@R/¶‰Ö/eû„uÿQí!ÈdÅPõM)ð%L…¹¡Ú ‘Ô}Ç šåšÁˆ²¡(Á¦ìÃмœ ñŒúö®ó((Õa”‡dÚç›ÛïœÉR}û„<cÔÕCk]9ôæ0ß]¯( |A¾õ†Ÿ#‘Kl9tR6ãHcCã†Ã¢CUþVÈòNBKlr}¿ñ'üûEÀgRÖZ{¥Ñæqãiûï˜NÒZO¾ÿ#C?¼—mÄ–¹íÆ·‚¾ZlG‹)Ôý‹ô‹m¢õKÙ>aÝÞ|›öjaõtÞŠcçÿÚüOê¾cÐ ÍrÍ`DoCq ÷[¾EK(%†„Q~g·$>œñ@ûÜas{ãã6«QPÝÍï¼ Ì;µ=ü~µGŽ\FS[´×ÎC¾³V«›ô†_oîÜ@׬ÿºº•Ÿ‹ÃÊÞ+m˜Eغ¾DQÖfdË¿EO€!÷vãRøÀ„ƒ›‚u<8Œ. ï2y¥ È°­ªÓë—�ù½”$Z¿”íÖÍaÁT‚ 0{"Ž‘IT„ò¶C¶í º¦‚o°¤î;½Ð,× Fôø¹6cò—¸ü`Dà÷ç «¼……QŽ6·3�×0t§® Ë>Ž®Êx_ýn~þXôuØ›³Y|€?§|ÎXƒkvó‚½èFR`\oaÒF6¿éÎV\EÏ«€¨P¶q h¿_ÍpJ×b± ÇÀ�Æ"*ÝKxÓ?�{e"È÷××*qÃc.ÖˆÚâ<È•Ík&d$øAÁnT6ÿ†I¦À®›Wœ{[ðµòŒÓs0©ŠS|Ö‘Ç÷þHÝw z¡Y®ŒèñS`ÈK¢Ä4ÇÞ#W íì±÷Tòí’ùpÆís‡ÍíÌ€s¼„®®¥5?Âh¢ï¶àæ·O1í{Ƀk–Nönþ�åM=>W‡YôÖ~žŽ Ìl¡Ë![ö£0çèê—£k±àúÓŸù"„cÒJ!J¡6‹s£C¾ÿ¸uÊ»Áv› R4cX°Û&¶˜çÃn`‚Öí†ýQ;žÍ<¤—¡o1!”ñ„Ô}Ç šåšÁˆ¯C²lÇ—è[Ù„-ÂnlAUá6œ†÷I ´Ï6·Œ(᜘y³r9ñ×<lÆf”çIg²HpXìÕã.­ Œî(r ÷‡P¼üËA× Eã:‚ï¿<�ͥ߃ˆ‡›Å‹†Øœ¥da”Öí;‰äT˜ #€DǞɃ<™ÄAßk*)žÍÅfbL*'5´Ï6·ŒðtÁ»)Îatë;ÐmÄd ACR6ã„“ƒËñvÕ\ìÍŒsuAåœ6˜ÿ†Ù¶�ÎíÂÊw£k±ZJ„ߟÿüžK(ÈÝ‹“µ— ¼TcE9žðÓŠ&3ËÄ€°nr{¦Dí¶5ó;]Z•‡±»²¦É`íOê¾cÐ ÍrÍ`¬c–1þ¿$ð‹í?[Ò&gís‡Ím#dŸ¥†v4Ôn4~R6ã„“Ý ‡é[ÊÞƒâR:Lü×å°4|y$‰å&pÊ5cüϽdúbüýù>~Œ&eJär(Ê.¢ñç¡°'©û/Ñú¥lŸ°n ##ø+°Ÿ–^ á }ŽàSH©ûŽA/4Ë5ƒ±>K°µkpkhÂ}qÓ.¨Ltª „ö¹Ãæ6ƒŸ¥KVÊëõ0’ ßo!e3N8Ù‰¿Æ7YøåÕ‡³ê¢wø¿ËC¥Î„ÑWOP¿¿ † MÈ’ùþ“#¯ã>=“ºÿ­_Êö ëæ'ÖëÐý! aµü„Úü,Œ2C�ÍrÍ`DqØo9Ňۑ[Ú ‹è1Š¡}î°¹I„ ÜÄý…þþ Q6ç ~Ÿuûè†F`îjÄù‡(ª¼†ý6AäÃXIÙŒNv’‹£Ú/£ÚlÞ´¹5¿ør« ®zuC™é‹ùþÂt±!uÿ%Z¿”íÖí;à&,2dín€i!xv ßÏÈ${&; F|Ð>wØÜÎ$ø}C¨ÀM—N¢xÏUOJÎÖŽŠ¨¸?Æ—ñ+|\­FCåÇÈ—_@c—3q$ÌMÙŒNv¢ÀœBÓ°/-ãT'ª¶É°)»ÛŠR3 £²f53z¦/äû3&>„u““o ~ü+ŒFãZ1ý73 üoƒ‘ºïôB³\3Úç›Û™9ø ¸é tü^–)0áqU(ñ$‰wÁ1ú MåyØœ{JÝï°§£ÿ¯‘í)oÄ“žv¨KÞãŸ}“2âào…IWƒü=M«¡‚3}± ߟ)0ñ!¬;T‚%‚ÆËÕ!Τî;½Ð,× ÆF†ö¹Ãæv&‘üÀM £}Ñ>=êË‹ÅÏM›¶¡°üzíÑojS6ã‚&»'‘Ö1äʼ_¤¨®6¢‰-YÑ«_‰Õ óŒWb2}± ߟ)0ñ!¬›ƒÓÒŠÒÜ-žŸYþihã;MòsFf’èØ3Ùa0âƒö¹Ãæv¦ÁÁ5cÁm”Ê+P7wˆæœ¾ñà¾_{`þÛ çä�«ØÂÏ2gd9ûp¦áŒ£s!-^"‘²z²{Ã)û‡QG¦/äû3&>„uóÅBä–}‹¶Õ0ʤ´@)/F¥æGâLºïôB³\3Ñã}Ö®›ºÀ÷3 }î°¹YpöÇ8›O¢äf#¯ø�ä ‘³Y-—±1¹+G^á¾Û–-È%¾/úaK ßTÊf\ØÉîš‚¥[Š8EÕC£{Œþ i¦/äû3&>„uór['._y »@ÈxŦþ ìÁwÄR÷ƒ^h–k#zbO]jhŸ;lngNX4Å]A÷êþ”ÜÈô£éHõj´\Æ D!a”w¢TÙ†žWÓ¢¬+)›qÁ“l$C¹÷ÞÅÓ¿Èv¡J7 üþÌ‚|ÿõœÎÐ uÿ%Z¿”í UwÄ,±HÝw z¡Y®Œè‰=uAª¡}î°¹I,À¬Þ‹½ÚŸò²Â¬ÚS¾h¹nÌÏÄnµ1ᘛȒǷxÊr¸pM‡®Þ>}èíÒáÚre;PÑñzUX2}± ßøÙKL g——Kob4DT©û/Ñú¥lÍmcÐ “ÆÆ öÔ©†ö¹Ãæv&á½ÁܳO…G}+ÑKùýjçuTî,ú—çüëèÎ^d·1ܘ¸¿­sJì|ŽçÓÑ%ósÎ÷ÿ¤#œì˘ë:-¹çÐe÷†I² ç¨å»®ÀèËˑ鋅ðû;`i-ó@,[‘_Õä\&|¿ø·#ö"‰Ö-eÛtã/Ÿñ#õÄžº ÕÐ>wØÜÎ$–ðZw„WøC¯ñkåìiäw°™¹9Êk·üüŒË-\«<½-z…/e3Ž îd1ýû´Ã×qþ8ø¿©€Ú¼ày%|æ!øþnTÛóP¦¾)ˆ•ffl†üû3~›êþKåç'úÙ™.{Œð0Ù`¤±§.`0~Ì=Å•ú'÷Â]Þ`ÒÁn`¼·¹¡†–èÒOqÀ¨”¯sU-¼Î¾?ó~ÿEØ:¿Ã•ŸmBÐý;.ÿŸzLø^ú“êþKåç'úÙ™.{Œð0Ù`¤ 1¦.`0þðŠ¾‹Íèà÷ï·¿‡v`<„’·RÆ1 ý·ÓOqcªã<NuMú^‡b½µ'V¯¼3}£@¾¿­ëk©º‹'IIàdâ_O¡®»›ï'þ¤ºÿRùù‰~v¦Ë#<L6é¹m‰.uƒÁ`ć £ x¸ŽnâzØ€†Ñ´S`x~Cýé¶çàæaíú…»4°øŒ 3}£@¾GÙ?°ió tL(.3tiªP˜%Ã&¹Ž)0$úÙ™.{Œð0Ù`l$Üýè JžÁ`0¢‡XP@qåE(•$EJ¨r•Å'ÒÑ„ŒÀo¼mqõ›NŒ.ù)1K¢óòq,«Æ%e+Œ¾™¾Q ßßii†âÝO¡y1Å‹G€â’µ•j /íL ÑÏÎtÙc„‡É#àœã0v´@rCqe…1m( #˜ í³F´ù8½?Sð~^i±›p¯¡¥%ðáŠâ¢é‚e†D’áàv¹ùÿ“êþKåç'úÙ™.{Œð0Ù`¤ N3šÛ=2¾Ä¶¡`02 ’xýÉ-Ï€Jc@¯H 7Dùµ½³¾×¡pc¶ë-‰¾?Ý üþž“´{WQ]zÊÖ'L‰�“=†T0Ù`¤Äïô$þQúž¿š€#”é6–ð¶£%¦ cƒãZ„3¤¬d δ–¾¿æ“ußSd¢¦sŒ)1AfýœRÜü,fc¯”=mÙ&21Â~n¶þÐTCY­ µÌ„,&{ ©`²ÁHHäÏ2h,‘3cǺ¡ˆÎñq¼ ªÖ…ÉþcØ”& $rZóYTÔÿÛÒ¬cp?wMcØôLÃRž€»áxy§*¾ÃÛÖ?`u{‘%Ì ÷ÃhÁ ›{bŽß‹fÕWh¸7À÷ymDûƒ~ØlŸËXRíÛ ó=0a(Ç»r:LVßÀ2œ“ýÐVœeÉ+ƒˆN‰•”=mÙ&21Öÿþüd²=CS`‚`²Ç &Œô€(0Õ)2ã73úËPþÔãË`¾RºÑTö)”}0[çBn’—_5aÏ–½¨mlÀ¥²½i+ ¾¼Žï®˜Âm‡BÓïUjÄfyM{rP\ûO4\*ÇÇÙ2È jqãû¾ä³eÈV\ÇKR“B<í|²œñq^>JuÒ}Æ·ñ©ûYeõêva¥Èv¡JÛ›3“Ó3’ù³w%Xµ§Dߨ§?D9Šõ ¾‡Ä#eO[2!Ñ÷§;äû?2ô#púø³<؎ƾ)fB�“=†T0Ù`¤äù Žw¼ ù|X{;ŽñH7"qA63ë9ôúå¥YÅ »á¶”u`Šò 7}‚Mr-~7TaŸ²¦áqجft*/âæèß¾÷ˆˆÝ€’-Þ¨ŸÜpvo*AÛï:ݧÄ}Ó+Øl£°tÖãôÍH ¹“€ûÔï˽›ë% š>ûƾE®hsú•Û¤ÂöÜ2¨ÛVòyËÊCØYùOþßz<0‡Þ[dcT[ºî ?E{ 3–;¨.(…V ùKk–á0]GYÑ.쫽‰>[¤kô¤ìiK©DHôýéùþ:y–o±WdØVÕ‰©« ù}*Iåç'úÙ©î;½0Ù`¤ œÃˆzE9Ô}°XÅI,¼sû*š^Œ|Þ:ª+ 1ñÿ敎z\ìðOÎìU|²”Fþ_ä<Ï£ÀuõÐZWÎu9Ìw×ã+)NÀm:ȳ”0òÝá2*‘EÛP§Ykã|7j¿"íK%.Ø»¾ÂÅ® ¾]˘ëú§»ìpM÷@YtÅÓþuq¡ó²?Û…ì6]ÅIÃkß« Çcr ÷C.?€â¼l~ýߊå3Ìe®f·ËpNÁú–)0¾e&äûëk•¸á9iDmqäÊæµÓ’¶«¨,ØÊæß0ÉLöRÁdƒ‘>pü¦ÖŒ•% ~&(#/«T3³e80dä„åf#º=©–0Õ}‘ß •·Y‚ênÌû˜wj{à°4âÈ‘ËhjkƒöÚyÈwÖ¢{Nó&r³QpÝó|¿æ:ô:ÌЩÀ×M?B§ý'.È÷¢¦û­ï )byw†2ÿ’a[õÌùþl]87\nÿÍ¿ùý š‡¡ŒÒ3Î9ŠÞ›*TñóGQvjà LSᕤìi›èƒ>Ó7 äû[}W¸nTŠf æ 9‰:‡v“=†T0Ù`l8,öêqWtÆ ûÃÛx:`Ë´<}‹ äŸÄ×E–‹rÁ kºSWÐeÿÿۻߟ&Ïþüü½ãoâ “% 7–|b7\Ì74[HÐl!Dgú­ÆŒÛÔºˆ.¶\ž‹[y_³ø¾l.%8ë¤ßªè¬¶ 8©×Êúå]D¸Zµ_ŸÂUFËùüžg)Ø–Êþäù¸räÚ ¥”Óžíñìq¯ÍåÛ°]Û¯8›±EÙ[ |÷]d«ÃoÞ¼vnØ Õ¨n~‘æ“Ø¼] «×+¨›¨*ÊBùr³'¾ì´h‡aÿ‡(×I¡jþM©Ma_ÍúÏìæ;¨=µÙ %T‡ÿÙòÏaн„½Û²¹6Aÿltû´^LÒ‹zWí>lòy‡JôùKäïçsb…Ï J9ò^­Fè4òæ•5Ð~A§sÊÿá˜ëÿòk`²N¡yDzó8a~Øv1¾èꆡúJN߀5´Cîµáúw1ê?\wÒûªÕp¥%gqÝ:®‚Fi® Ù]óëÇ·rE­´\P’'Oڌոô½ZŽÀH¢xSÌ%ìÝVþ‡^‹µþ|ª þû½m;‡9E8^u¹J|Z …\‘¥Î¶êH¢Ï_"?Ÿ{+|nPê;º¿@(ú_¾çmP“+Mä¼þ›®+©óg<ƒÒ ߌ| ¥ùØQ~–á`DKÞ²À|×ü´¨7ý+I*s9ñÀhÆdÈ¿\Ôçª%º dâÈ/8½m³ô\صЀ¶… ½ðpŠ”$MžÃ).aï¶k}£_ëϧºÅ¿®þ_P'T X¥‚ºôK\ù¹/âP¢Ï_"?Ÿ{+|nPÊpwB[ð9jœ½d@s{Ìæ´7pé¬9Šm8bz¹†Oñ# ·ŒôþÕõ½ý öõYàSò~4º‘™¡€2ïc|öé.l+üE%W_FŽ~"õ K™kÖ¡²ôsèîwJál®>#jnr YZ<‡Ó@ÂÞm_\+oÙâ¿_Þ÷å îèj ç¡­7Á<? ŒDŸ¿DþþùçÏZQ8|nPj«SÄæœÏÑ<®ä«¼`Ûˆ²÷ÎÏ•à9†Zkp¨âû�Ñýæ;—¡Ú«0™_`Ý«>‡!ÚõØ£x šG¾EÛ³Å;f¬:Ó'¸Œ²`Þø™oõÔ{#õYŠèêB}É;P(•x+ƒk`"[Ýs˜V/ißmÙXZðù‘’÷e¨3ÈPîDñg‡‘¿í¨ŠÊ ë§;'Ñç7™ÿ}ùÜ£Õâs‡RÃ$,š°gÉζKºÍh­1Z’,Âßò´RøÐèѾ0M):¢«:µ¼e&òŠãÓü<ª>BI¬6² àÛ'%cÿBùæ¹�3�—ù„TN‹?ú‡Cþ]E)\]Âá‘ôÝ(ˆn […^ú÷ÏWJý Å;P½SÛ=4>ö߈(±’öÝ–¥±ú=J( jÐ1*½ zÌŠ pÎt¡öØ ØÃ¼˜'úü&ó¿/Ÿ{´Z|îPjË«–Ù1\^¨\›]ÅÃíô®x§›žGÙù—7<�…¢šŽaégä¿§ç8¬µÕ±ßHpê 4;öHánÒw(—UΖ+ Iý ßþ+‰äÀ­ÚF< ÚcGÞW§yŠú„M¨.Ì‘þ}¶ ·ì{Xä~Q’IÚw[v–t~ä2Ê[•(šßPk>À¸~¸qU¼Ïïý×½y£ iÕÕÕþ[%ù1­Ÿ;”¼1}ÍK}š>†öªcs;º¯+Ëð¶J“Å—oQ¸\õªú#gÐ8M„‘GÞCF‘ß›Þ|€’þ¿$6¡+ˆ\�¡ ÿü¶zókx,dgïAåõ®˜þ,/Ò˜,ìÒþ±‚¿R,tXpÿÊ—(Ý_†ª+?ÁÒ÷;šç %‡¤}·eG`iÁçgBz1/ÄNm|Ÿ“È&[®I¿%ivâñ¿ˆ.n6›Í«ä ?&¢Õàs‡RÆÔÔœl€=\U)qŽæ¿!ÿ=lë^XKá‚Ñ úQ†S–ìØY ëŒüøåû,À»¹[¡Hd[Ï4Ü ¯ÒåÀMA‡_:Ì0›ß4KïÐê×ù§”]«:€®‘x1ÔÔ„ÎežfÞÎ&4 q=L¬$í»-;K[t~</ÑþO ýŒz,ÐdoCae˜:ù~‰8¿áFaŽ?îÿnòHĹ¡Ôõüùs_—›üÜ™ÿo¹Éß#JNse”/þ½ v_ð›ù7š¾>Šý¥•8'\ƒyÝ÷5‘§U¢ºu0`ºØ Æl·P¹£dÓ¿¦ál¿Šo…¤Ç(ˆW€ìÂ3aög‰¹%ú¾(§ÁÅÊ_Ǩ­zíùÕ•xvõÁú|qÀ|eiÅcÇÜ´¹Mž^y …å_JçW.£®}‰òÂc‰ßØ41À¤¨µžŸDœßp£0r'/Ù$âÜPê’«ü„>¯çÛo¿ýæ¿Qr=Äý3b·uêmÈÎß •j såÍ·`‡ð‰ÀˆF¸5<óMÞCGß‘À=a<j©FžBz,Ê\ªTØ—ŸMygÑäŒr: ó&ÊT'¥�Ú!ß?·îG|Ž{Gv`Û‘»p¦Â¿×º“L„,ƒZ1L 1À¤¨µžŸDßÀQ˜d}‘ñ¹G+ñŸÿü999 Ïëù¶k×.ÿ-ˆ’ØR;ñÇè¶£ýºÅj¨K?‡¶±ËW’xmDxÜÓ1ñU!Ë)…¶!°T±7„ØYþßÒqß:’˜‘ Ùèvf¡@ø5 DÍ`¬»‡ŽÜÁ`4Êi€:;û¤ð£ jûqÔЇY8o}æñÀèX°æx~]L¬0À¤¨µžŸDßÀQ˜d}‘ñ¹G+n†£/”ܵ¿CîâÑdÈÅl/ŒW-+XdŽÔiüºz»Û#žçhúZ‹Ÿ‡‚;§^ËEo|é?Jo´Û.”x^ @¯þv®ƒ-Nal|‰©z£hïñ9LiÒµ3>ŽÉ ëƒ&Þ`RÔZÏO"ϯ< “¬£/2>÷h¥BGa8úBI/a;ñ/1ý&êø"ܶk(ÉÙö~y'¡õ¦–¢o?ˆc°Ô¨±Gs ‹øÛÐt¥;ÕZü*?nÀ™“w—‘BŽÓ|×?2W }³à /P¤<ð5iP´é]”ÕµÁî[{<ŽöªÏ`bˆ&E­õüðüFÆsC«8 ÃÑJn‰Ü‰_ 0ƯPyåÆÂÔ+ƒ¡ׄR”FX†£éðÉe”ó‘SúîCnW!¨ Q®“ï» Ö±¸¯îI<ÑÃþ¬…×¢ˆM±uÏ"¬‰ÇÑ­û™¾Ûe#Ÿ¼N) ™ûõxXðæˆnŒ½šßsç5\žI)üÕ£,çL 1À¤¨µžžßÈxnh5æGa8úBÉ/‘;ñ‹˜ÀŸ¡¿XÞxùàX¢ Lòô·&|}þ Ý\ú»j¾Bã†.]+…ÓÖ‹¨iØÈ2\“;ÚáÏõì³:ìV¼…üêŸÐïòwÀÅIاq´ñE FåRÏ’Å/Üýh5šÐjîå¨U 1À¤(˜Øá¹!¢ô&ÏÏOÔNüÒýÞº ÃÓAjÇÿÜFå¶+ú} © &Ǭ¸/øÁ1#Bt=ÃÃÆ[¸o , @kœÞæ+R±Ñ:Ñ¡‡Z0'ÇߘPò(¢6ök­hI 0)Š&vxnˆ(½%v'þHk`yçÑáJTùá˜hFÅ{_ÀdŸ„8Ó ýþl(ó?Á©’C:Fý7Ja36ÔíùP “ãþ/¸`ÓŸDAv6J8#ñ?‡•(«1‡ª}´LŠZëùáùŒç†ˆÒ^Âvâ—:7k¡ûM.0¿È¼mú¯p¦ÑžŸî{-ßA]÷Tê´JA°ù²6û>OŸ žÑ.Ü®ùΛžaÆ`>Ç‘š_áä”(‰üþ' }°6_ÁYÕû((¿„ûÎØŽ  0)Š&vxnˆ(ýÍ•QŽÿNüÖÀˆOQ÷Á14&÷öÙU|\ý�ÿîû Õ;ÞBVEFºFdÃ/cTöšÂ œ¾è1ƒ+µ¨-ÿyª³¸ÒlÃ^Ì1À¤(ùü¬µQx<7D”Þ¼jjB§Ô[j‰·³ Më¾ >ÜŒ¿^BIÖûÐX&ý·KbUºyÕhš€½YAøõæ× 0¡{¬ƒ 2ÊZÔ›þ°1&ò˜5(68äÿ‚Ëþue¹Ø”s�‚á 1ÈÄ Lšâù[=ž;"Joòþc(,ÿRêœÊÔpíK”‹AXÿúéu6¸mAî‘›èO™2½Rgu8r%¯øZç�³ÐPæ}ŒÏ>Ý…m…¡¨ä º}{œP _€ÑwÁÞaDMY”¾çsòË.¡=d³SZ? 0iŠçoõxîˆ(½E ¡­86ææ? ï ®BævIßIqÓh|àôÄÓúÑ®ÇÅ[(Ð<¨ÐæF옱êplÉÒÛ…£¿·Áú—îáü¢Qc³ÿšQdïÁ©Ú;0Û'Rÿùœä`ÒÏßêñÜQz“Lh‰äÐN°\j¹2&ñ%ªüñºÑq± yJ…ïýâMSBå›Joë`BË(Ϙ¸Ìß €e”%òõS†Üüwý£-›‘#¯}¹ßÉivqÄ�“¦xþV玢3 WOž‡¾_‰¢³sŸRRKl€Y"<c6´èk!ç¡­7Å­œ­×ªÅöM»QyEÞñßÐn£µ?kxÖy ÙÔhvìÖ:÷·x̲ß}ÙŠwPÑÌ×¶¹ëG.£¼%BÚž2Ô%�Lšâù[=ž;ŠŽô&f< Õ©¯‚ל;ŽÂÝa•7¸sÞÅ‘m;päÞs¾éS `ÄèUڧ矩É`Ä¡_p&o‹ôz‰ÜÂ}PíËGö¦÷qºéyÌ;“¾)V{ôp,º¨½ð$dMÌ:9:ÛðÏok 7¿†Ç¢AvöT^ïb¥3ùµŸY&Lšâù[=ž;ŠŽÜ <Œìü½P©T!í ýÓ 0”¤äçîì7Øçž—3v´êªQª.A…æºÇ¼ÒMú W‰A€Y‘K7lºB( ΣuaÔE‘éDÝ¡ÊØ—bö ¢M8š¶þàu<}ÐÞLý)d´/ïÝÓeæAz{ãñº—!§y 0iŠçoõxî(:^Œ>~Œ^¾?QÊ‘B„Y‹¢<5ÓÓÅŸªOu¡îèQT 7`Y÷ñ×cär VmŠô!ߟCÂ?²äÅäXlRÏ>«ÃnEàÚ—ù–¨50“èÔaßÉp¢Éd]fÑ$:MmòÑJÉÏá/P~é‡)„í\*ÿƤ‚™ú`ÒÏßêñÜQt¼zp&C:x³½0^µH],¢$癀£³ޏn¾#—^¸,ßa÷ t¼ÙÍ¿½é2ÊwCûëcé¸ †3_Æf4F|Æ“_ÁðøÍ>6sí؆§ý7J %*”Ÿ ‡¡M‹%F)êÐêÈÏáDUñ£y 0iŠçoõxî(:K¼‰eBó‡f(Y½ÙÈr)±ÙÈ2ÒÈ¥{:Ê“¼4¦p×^P{ »ëz±þu¡¤Ç:>ŽÉ%rßlï]\µLøâI 0*e˜sÒT˜U“^ûÕj/Уÿn2ÀÄ Lšâù[=ž;ŠŽ<@@Õ÷ ÓpMø»Ê¯Â2Ì7.JVrøNÔF–‘¸`þº2ú…Ñq¾¦/ÂvçÛ+ »bðøÅA4W¼ó& „m dU4a$žƒ[>ÜÒµb<à÷¾Ù)ÞOB³î~ä�ã~ÇëÅçMîÆ£„TYK6ØkkñÓ2O-ÏOµ¨µó} V`ÒÏßêñÜQtDL àÏÐÊLjhбîkˆÖK"§ÀˆpÛ®¡$gs˜ß—EÞIèÍ/°ü¬6ObF9å*d{w”ãRCÀš‡kç ÞUüµ»ÿº”xú ãcÁå¤,³>ÈyUÂm´M3ãQÝ1| Ü…Ùú®„T[KÉøÀÆÃ�“¦xþV玢#½‰Ýº ÃÓàiÛ¨ÊÛ²ÇQ2‘;`‰ÚfM>rJ¿CÃ|Gß×®BP¢\'ï­Ò«\ -IyÌß`OÝÓ �Œ µr7ÊLίÇÛâ`·8ÀˆðJ·‰ø8¨ü2|S@Yð74;½Þ'Qù�Íc€IS<«ÇsGщô&&½¹ïª…ej#BIÉ-‘Fê`;›ðõù_0t‰HÁ¦æ+4Fµæ&±›ÈŠƒwpôh#^ŒBˆ.3j ”ت± ±ÑËÛz3£Åâ�3ŽvýƒÈSÈœ?BS÷Ž€fäöÜtûtfÿ5÷ |ùSÈ¿áF!_?Ÿ¡ª}ÜŽãÍßãLÌ0À¤)ž¿Õã¹£èHob7ÿí/¿M³0[žâÕØ”ô]¢d&ÀÄm#K/ƬMhÐëq£ÝéØÕ߆FãX†¢ýD_zük.żnØ eÈÉû•rµ¯ª£(ÌÞŒŒÌbÔÙ=ò*Qu.ò÷½©î¶/?™¹¾©ö&oú©^b¿«Öç‹ÿ-¼6#¾k•‹/K!t¤U;¾Þ {Ï„û�`1qrãzª]l1À¤)ž¿Õã¹£èDªD´ÂÅÈDq'wÀ·‘åDói¼wúìn/fžé±?ómä—–£D]åÚ1ùñ'zÙi Yn¢¦¢DúPZ¥Ã}ÛxŒ~×J,0‹ÚrÆgc¶èµç!h.£±½cóñÙ^ÔíV"³ìÞY>ÀPl1À¤)ž¿Õã¹£è¬×bd¢xKäF–ò˜¨“BÆ|5¯Mêë°{þ Ø„r9ÜD6²ÅSÈ[f \°]+ENÐf[wú'8}!fNóï°¹6ê?À\€Þ¡í’b% Lšâù[=ž;ŠNê/F¦ .!YNãYÝ T7ÛÐ×ôv(ÞAEó DwŒGÏÄfãÉ åî5þïeÖáLâIc ýG¡ÄÁF”¼½“jÑ=ˆný)m|‘£L‰6 —å2J ÞÞªëèØ°Å ‹&Mñü­ÏEg=#%B"7²”®W'tê­Òkíä‘®Ÿé£ùâyÂ5˜GyݬcÍ;ñ‡¯²&ý»9ôP f0bΛ…{ô9¯`&Mñü­ÏEG0QoìFØI/ž?aí|É)d”„ä)0 ÞÇÂãÂð°k•a)€=¸‹G“!ÓÛf{a¼jÁ”ÿpc’Ìwâí?à“êŒ,,@—^ëÆzp»òCìÕ÷s†’Lšâù[=ž;ŠŽ<…ì=l.oÆ„ÿ+¾7úù=ÄIØŸã°®sñ¢„’L*ïc±ÄãÏ:…æ‘DŒâH×þËŸ ûié¥ñ±'˜ƒ_¢uqu‘7&[Qyp©Eü.ØêŠ‘•}ò¢ÿÂ\(¥s«Øñ :&8BFÉ&Mñü­ÏEG.3[ˆòæaÿ±Ì›ºÖ7fºUÊ}¨{Æ)”Lä�p•­#þãpäO$o€1~…Ê+ò:³ùµg ¸&”¢D0Â2ÇÇ,NÁÙù®œU#G¡„*h¿•DLÐ~>axÌŠ—©B&NÂÑ~¹Êšº§µwÑ=Ê%ë”<`ÒÏßêñÜQt<l<ƒ3@qÄ„²·ŠJ(ûÃnÊe¹MJ2r€Y® l¬öY"¦ðgè ÃLj^ˆÃ&²ò”ª>´jP–Ÿ%½g( Ì?Íåón&:Àü SY™ôô—ÿx1Ñ®ÇGe&)¢F0Ô‚ë_‡Ls£×(…CnÐKI‚&Mñü­ÏEKœx„¯œÂ•¦6t´ü€ê¢ÿ…Œ¬ÃÐ\:ªs_ TêÜ(òÎG¹·Q¼x1bú -µžAì‡þ£Ï`Z÷éXë±~E `·.ÃðôEÐNñŽÿ¹Êm;bþÁlÿ5ìU*¡ÈAá©‹¸3_.]œÂØxäàÓè¯S!§âž¿äq¦ŠØ©ëAÄW%§*é}P~/ nþŠqþ›%RRõÔ~ûí·…á`ùby34lð}¢'Ÿ?Zž;Šž¼¿ ºS{­?…ý ×­ãÅ ôÿ|Í5´³Ä&%!±¿»rNÁöù9 §érvê`[÷ì-þ¬uýJäûˆÏ¸Ü¿R…bõqÔÚ`vK×}2éßÖy‡2ßBné4>ìB¿/àõ£ûá-hKw@±é ôö%^—œ·P^ZýB¬ú eÈÛQzË %…¤ 0á^äÆ�³2ò9£Õá¹#¢´':Ðx(ŠÜ2h¢»_Íxþî‡hÔ–!W‘‰½úg‘?¥_5)|T}ßð!¥¼~åcì*¿åúé>nÖB÷[Ìf³¿u MÿÎ4Ú¥ïÆ‘gÏÚ ¨©8„âcŸ¢Ò˜è)d2†Ú4(ÊTõ£|Mñ>N7=_ú¹_Áñ:ø¢Ë‚Ú¢\0 Äà9A´rI×SÛµk×¢ Nþ­Œ|Þhuxî(:^ Ýù>oyæISÖ›¨©ûýv·jJvâÐC|-O{ x¿k»®¯·%Ö¯ÐD9zá>ħ¨ûàX‚6Ü…ÛþcT!›'=§Fíç(U«æâ_ø­ý«A‡Zðõ¡JÔw¯êç‰Ö[ÒõÔÂÂpôeåäóF«ÃsGÑñOcÉüº°oêa¨ù ì(1À“Ž Ñj‰ðz¼¾ç¬è~³Q‹Ó¥ R@ééï o}ÃÒßÒunýŠíGTåíŒrýJ¸3:~½„’¬÷¡±Lúo·ž¼puG. Å9—ã)¾'f0Öß ³e�cIq;Ñd²Jv)“è4µaÈD”Š’²§8 ÃÑ—Õa'|õxî(:þ�³¯÷®~‡«áBŒ\Fù­]ÐZ7öÖz”l¦aoüûK«¡klŸ[¿áÿNìù¯ÿ{ü›¦€rWm”U®"ÝÇ义þ™ü5³½¨ÛªÿFí¹2|˜©€bG¾ÿG12ý?S}Ý q]ûNüD© ){j£0}YùÜQôž?›Íækò¹›ÿo¹Œ,µWm\þN”¼£µ8Žîú¿áëûA;ïûÊ*ofeJN¢{Ö–ëÐÈë7*4Ð7[àpÅzú•<zòwhù=hôÄléð;ÚÕò}üúžàQçªwöÂP#Š7óUeó@È(FÃÞ#àžå™ôûí°5ÕàäõDïT¿öø‰RAÒörå‘޾¬žüEÑ“’.z÷7†h / Àȇrˆ©;Š¢Cç¡ojƒ¹ý4ª­ÈÈú­\öJÉL„Çå€åþT•¨P|V‡ÆvÛ ÅJH¿k|Km ÑãYfšÔ:“K +ß‘³�¥` æTëÞ–ÉVT}cŽ]ˆŠŠ·t­<¿Òc/W¸,=¯1ðÜ•àðE=örÓ”Üñ¦èýç?ÿANN΢ðÂM‘y1Ôø)Ûþ†ö‰ù®Ô4†ÌWQáÛÜNzE\C”¬fá¶¡½ñ"N©öáXc ªNy^¢½¾Bí°ÉS®<N˜ï6Á2”Ä%ǽ]Ðîø­Ròò˜·ªÑî²Bwè¾­»ƒþ¿qVU„Ó­¯ý?(a|l*ø5'š�z¢$Ç^nš’;O´2áFa8úBKòLÀay�c»3¸Ã º1öjc1ù›h­¤ðÝÔ„Îe†0¼÷p{©ýBVeÏêöA¡ÈFþ‡yÈ)1` ¯ä5%Ñ8s¾w.C#¯ëÐ^…i~CɘpÃn¨Fuó Œ4ŸÄæíZX½^¸l7QU”…òäf†Á™L@ [Ã=hÒ|„M9GQ×þï¹â òÚ¼`(µ±—›¦`V.t†£/D”žäéÇPXþeøEÞ¾ö%Ê Å C>«¶»êžJÝë)ôÕUâkó¸ïë6ÝgQ¼]Щ·J¯Õ™È+>ŽOóóP¨ú%ºÎØUPÇa5œCiÉÙ¹ ký_žã†íú´Ž&z0Ñ=†Wk„äÐW9¡k``(Ű—›¦`V'p†£/D”žüë·ü¯u‘[qLFÄ¡&|ñåÏ‘ÀD3NžlÆ„gíBI”/þ‚]� E!4ÃÒ_ã‚Y¨”«0j«¡·Çx7ü¡\øzQ€é5£¬¢¶Þ¦1<ð2Šà&ÂÝÿFS+Ì6ù¼`€¡Ã^nš’ß|håæGa8úBDéK 0·¾Góxàh†bo‘úœùP°Þ]ÚiØoCŽ"L`ŠºàÅ$,š÷Q¤‡Ã×iŸ¬CÒÿG‚Ö@êì«B»¯½ƒŠæÁ`¡ÿv«À�C)†½Ü4%¿˜-®X¼Ì ^>ÅŽòÿöx/4ã}<²G[KÄ”¥;vÖÂêÛóE~¬x7w+Y§Ð<ãi\Î[(/­~áñ7@¡ y;*Pob€!ŠörÓ EÅ3 [“E›ÞEY]ì¾ÍÇÑ^õY ŒCw¿Á‰ïÍ ìéÏöÂxÕ‚è·|†³ý*¾~€ytM² Ï„Y›îWp¼>/¢Ë‚Ú¢\0Ä jÛ²`hãa/7M1ÀQT|Uóü ½¯áòLÂi®GYΡ˜%ÖßÄcôdÝÌ`ÌÖ½ö<ÍeÜnø;Žì?…ú„”M_‡�ãÀ£NÿèÑPL“¾/GäµÂÔT€(®’¤—; WOž‡~l!þ‰ÎÎDÌ'M}ò›Q8KnéîG«Ñ„Vs/†=ëý,ãW¨¼r#` Y® ¥(Œ° §Â€ ¶k¥!ëx¶ ïôOp®ûùŠÆ:˜@N#J ã\Øêtsí\¹ %‡ÿˆâ/Iz¹ò ÚI¨N}|‘œ;ŽÂÝ}s\Eç]Ù¶Gî=g  cdd$àÍ`®’Và±ü}""¢¹÷\-ôv·ÿ8žDL àÏÐ7ò™.Ô¼e//†ÜÅ£ÉO=W< muÄÁF”¼½“×\j݃èÖŸÂÑÆ©9(b‘‚À¦„І(yŒá0²ó÷B¥R…´S0ôO3ÀDA®œî…†µˆˆè ÿ4.eÊjŒ0;Cvn)éwߺ ÃÓþ)ksÍñ?·Q)½ÇGWAÌÿøÃ¼ßÅcšÇü öøö± &:ôP'dÉz˜ûÐ5#X\ÐAo…î %N’/F?FoªL}MRò¾%á^йŸ ½!€›ÿ„¡o�Öæ+8«zå—p¿ÓÃìçEмóèpE³^º£€ªïfÈÓÐ>Æ®ò«1Ÿ†&ÚÀ'Õ-Y˜.&Â3ÖƒÛ•b¯¾?²N¢ÿQ7†£þÅ“è4µaÈ´ˆgc“²0éÄ)ŒÇx¿¢%$M€Iäpp: …áè … \#(|X©Emù‡ÈSÅ•fÆb¶–COµÐýÖ³ÙìohÓ…3ö(G/–˜†v@eZ luÅÈÊÎÇ>y¦Ha.”r�Ûñ :&’á“ØY¸ÿ‚©^<-¾U}ŠübcðNüD/<ÞÀ“®¤¶t›„¬÷!š“DSÈÒ¡*Iâ…ŽÂpô…ˆˆ–â1kPì[ÏàËþue¹Ø”s�‚á ­{'5BøŸ¢îƒchŒ&ÂH}†pÓÐl?¢*ogì7²”‰“p´ß€¦¢*u)Nkï¢{tÆÿÍDá¶ÕC©ê ,j*Cä�ã|�}û¸ÿ@&ÀL›¡¿Í)d”8I´ˆ?qÃÁéf~†£/DD´_€ÑwÁÞaDMYo4!## ùe—Ð>´Þï¿áF`ÌèøõJ²Þ‡Æ²Lù^ŸHz* ÜUe!€˜îDãƒD—þ¦Ò÷Q¢kó!—t¦Âð8aÒÝ_"À ž]òµ½ÈÏþ_È-Ü·°>y_~.Ô\ÄO ”$&ÑÃÁée~†£/DD´˜£¿·Áú—îáü¢Qc³?(²÷àTí˜íá;¿k)|lAî‘›è÷í¬¿9ýÚ_~ AfK†Ýqè/ˆƒè¸X†<eè(GTæò˜!ìÖÁ¶äiðbrl‰ßEfqc€¡DKž˜Dmrˆ(Cnþ»þÑ–Íȑ׾Üï„3æ@ÿ€¾'øýÞ9a´ ,žñqL&h ÅkÕbû¦Ý!{ÙÈí6Zû£AŠ!9À/1=,‹¦…Á)d”`I¾&ÁÃÁDDDiÇÿž«Ü‰¡mÏFWÖN. àq¿€ùÎehäEåÚ«0™_Ä¡ÚúízìÙ£‡cÑãM‚…íâ 4~r¦%×{ðÚñ wZ´ˆ?.â§ÄJž�v8ø)^MÅõ…•ˆˆ(½Iï¹ ÛÈRê»:¡SoEFF&òŠãÓü<ª>B‰®®Tè{Ñ&œ@M[ð(R_#´7=*á…Ë¢…ºä‚ mp>¾…Ö }Í‘Gi†Ú`ê\f$Ék…©)Ñë}h#Kš50ᇃ]0]™°Y""¢ôãÅà½{x²LOoïc<]ï* Á®?�…¢šŽa)JÍW¸‡µ¶Zz¿fo/ƬM¾i[ÆvfäN{`šöß&vfŸÕa·"tƈܒewúŒZïC'T 8Ìú_Ùç%«QRxçBË/´så*”p %PÒ·íJr6‡yA7·: } /%/yæ ”_ú!d G`û—Ê¿€1hïõ0 ‹æ=dÍOÁš0CÒÿ—D¹æuͧñÞé{°»½˜y¦ÇþÌ·‘_ZŽuMì ÿÈÓ´N~Ãã€#¾ölñPk7Žvýƒ%«©ÂôÅ‚[²„5Ú¨’$ÀÈ/hùÈ)ý A/ W!¨ Q®“Ê5Á:Æý`ˆˆˆÖ&ÒºÓÐV²yáz1e©Á޵°ú*ŽÉ¦�ïæn…"ê}ßä>à ÔõKaADsÅ;ؤ¾»ç/8ô'âPø'±E–æD“ÉŠ¥Ïâ$ž4¶`дˆ`V¶J·ŠDÄdë—8È�C ”<SÈœMøúü/ zA^¤j¾BムÑú׆©Ô^ GÿÜ\÷�#›†³ý*¾~€ytB #È.<ƒëÖq©7i<«;êfúš¾ÂÅ;¨h„èîƒñè™(7Ã\¡¡‡h4OøÂq£×hL‚¢CJT(?~ê—¯;ŽÂ’%vâ—L±`–ž%‘½Ùü”(1’$ÀÌÝCèµü«s*àElî±A »bñ"JDD´Ñx`¯­ÅO˼­z~ªE­=9ß{ߨ‚¼3¿`húßh¾x^ê _“BQ >ôŒjZ•?Hù$1¤�£R†yl!m©50#&”}¤‡=â"¯c*C™éOÿ1Qü%O€q[Qç{1’.,Åû8ÝôÏK´i!G^,7ÿ5ÿÍ)ŒæEÃÙ³½wqÕ²Ô'FDD´ñÈSÈŽ¡°üËÅŸÎ/´/Q^x,SÈÖ‘Ç…áí³Î;¨ªº27½ýû*¾­†p­aaÊ{Ã¥rìØQzËPâÌÁ/ѺÔü¶ÉVT\"ÀˆOQ·ë=T˜aέ<cæ*rö@gc%Jœ$ 0ò‹é§È+ýo˜Ú;ÐÑz Ú²ñé§»±)# ùåßA¯¯AéŽc±Ny‘>qQ «¢ #‰}5%"¢¤"¿ç&j LŠr¿‚ãõܹðZ¾ƒºîiHPAkå‡É1S¬y©¶e7»œ³ñ2;Pª½…‡ÝþrÑý]xØx¥¹[°i¯öXïyJ´„$ 0ò"¾Ð;füÇÓpšN!'#Eµ]ø™8-ÎKE«|¿Pü@nõÔ{Q^ÿà 0DD´@0Ÿ¡jÉÝÖ½oþ·’2ÀÌÂÕÓƒç¡hñOtvÆ>@ÌÚþ‰}Õm˜øE¢Ë‚Ú¢L(—Y;{ÂTV¶d9jy#ÎÊLRäZ‚t.Û¾þ™a‚­"ï,šœ©PmÒY’y>åq”éÿ€ÃùmºO£Ø‚¼Oàã=§Q×ÔsûmEŸDY#~£qa 8äE[ÄŒõ¤ïÍ“L岊“ãOÊÝÖ¥Ço< Õ©¯‚§½É‹Ów_ôU7wqdÛ¹÷|ý8Œ¶êÝÈ)<Š*é÷ž«<Œ‚ìÍÈÈ,F-Ñï¸Óè¯S!§âœáþí<˜*vb§®GŠË§à4ß„öt)Ô*Ô¥Ÿã‚þ!ú],¬D‰—4k`Äч¨ÎÛâOø›‘Sr 6÷_j©FžoÃ()ÐT?Äh2¾–&œ·jñ4¨‚Œ6“tî”ÂÒCÉDD´ÁD`’—üø#;ïâMU§`蟎m€‘‰èÿ¹By‰ô; ´ê ~ùèO4DçmÊ| ¹¥Ðø° ý¾>A?ºÞ‚¶t›Bo_b…;ñS HžEüÑõo<2ÝBc« c ŸÌÂíìÁ«“YFi LviÿÀ”ÿVDDDó`‡¶ ó·S‹££—x¤ ¢AQ¦bq¿ š‚H܉ŸR@RZ-n :üÒ¼+°¥wˆ¡ˆˆBÌÂe¹ŒÒ‚÷°§ê::¸ž! ÉþšaÔ~ŽRµ *u)N_ø­ÑŒq'~J 0iá/Œ¹ðçÜÑÕ@ÎC«ÿÖa¾)Q$R'wô9¯ù^Aœ÷¡k,½xÊ!7²¤Dc€I ^¸º/Cí.Þ<7/¸0ÊÌCÐ?ã2""JCžØZ~€V Ñ5¢ýÙèÒS£Ö‹«Öç¡¡o¯:{0”ðYÃxÜÞ/õ –âFo{'FýG‹x&06x 0”|`ÒÁl/êv¿EþßÐÔ?ÛnÄÑ£w0ÈidDD”NÜ=¸V²ŠÀiMñÚðÚyeª“!kDä?÷CkÄç¸wd¶¹ gÜß0VTâRCà¶ !­á"Ê+n-±L i Û~‚¦èmä”]A»ÝQúßt»€`(`Ò×ÍV%ŠôÁs[ÅèÕß² ¥Ëð¶J“Å—¯èÏ,ÜÃÐ9û ¯¨³ó±oQ´ý8jèÃl‚Lø¢>!M²‘¥ç5žËá$”t^ÇýÕM_aØ5 ·ó1êËÞçJ(˜´0…¾ºƒØ.<öWá¶ý€ò‚ll.iä ¥yóëc¨ë_<+.^v¢½×í?H6ܬ1 'h[…Ð&½šƒŒÊŠ£Ú„sý­waj5ÃÆu¶”@ 0)kÃ/áš'ž×è¾}ÕçM蟙õ˜G. …Õeˆˆ(­È›_W¢ºu0 Ã=ƒ1Û-Tî(‰ý†×Ca|42ZáF¯ÑËT¢?1ìE­¦e™ 2‚»ÂUØýG>Q¢äÀ�“²0k8=Œˆˆ6·uêmþÍ,÷¡07ò†×;„G˜ˆu†ˆXføT4†™†ORß D…òsësBZÕ§È/6®r†(90À¤,""Ú¸D·í×5¨(VC]ú9´]]Ø;†œwPUu%xaüµsPï:zK`ùáDpÀX­Åƒ}áÌæ6˜®œ…*gó\Ø ]Ã�C)†&e1ÀÅÝÔ ôÿ9ã?˜7 kíq‹ÇÉ8z¬NÌú¤”‡aktå» ”ƒ‹r'JÌΩà Å�C)†&e1ÀÅÓ„Zƒ5xa¼Ã SU>”ÉÄ)8ÍêwæJM+w¡\× ÛXhðòc€¡Ã�“²`ˆˆh#òbèÁ]<š\g˜3Û ãU‹¿g EZ£Ü ­e£D™†³ý2Êó³|I‘s�‚Á §;ä\…b€¡Ã�“²`ˆˆh#’w†/^ ä–u Í#KïC¿fλ´?¡#hI'z‡Ý ^ÿ"óÂÕÿËÜ”±LjZpGó ÜxÔ™èõ;DÑc€IY 0DD´IÆ( êû†€…ô ¸&|Œ]åWaŽñ£gc“1Ik&—•n†îÔ>ì`0¿ˆ.ÈȆÚ`êœôDàµÂÔÝ^þD±À�“²&Ñÿ¨ÃK¾ yàv3áQ:150€?CßÿfºP{@ƒ×2Ó¥ÖÊý Ž×‹ß[Åán<ê_¦ãs!‹øåôf„ƒÈ+¨€®Ù†±å*µ9()<ŽsáJ0ûÛ¹rJ¸?%L:ó˜ñuÉuØãQV’ˆˆ(.<pÞº ÃÓA é¶Q•·3ö;ñËe”…ÛhšBfÆ£ºcø@¸ ³õ9\ {ßTFùw´4Pçl2_ 2í/#¯w‰´Æ'¨)¡b€¡b€I .Ø®•"GîEf ò*®-.™HDD”’"­Q@¹«6ö»á/ÛÁ—GÁßÐìœöÿ@<9`P)Ã<¦ºL éï;XÙŠÈcI"&[¿ÄAJ ˜tàµ@³5¥Úëó¥vC€jg9tòß·bŒ †ˆˆRž`nþÚ_~e°ôax¹j[ëÁù#4uOàý‘ÛsÓYìÓ™ý£A÷ |ù†âþ¾i& u܃¦úÎ’f¹Šd³Å 0”@ 0iaΦ 8ÿ³3x”Åû¾þŒô¥>žñqL&êC9W¬Ï]³µ@¯=Así}xmýñ]ëtéñ´ jÇ× (´cÅW•÷ð—ÿ(¼+/¢Ï´Èˆ eéax~ÿ‚]_†2ÓŸþc¢øc€IYRhiþ‡*~€ÍWZDzÁôVE‘ŽGÍÐ.õ) ­P¸iÛ[wú'8åµ/³½¨Û­DfÙ½„ŒÀJT(?~ñ½¯;ŽÂcä¾øu»ÞC…ÉfFê[8ï¡"gt6·ÿkDñÇ�“²þ„©ô!cÓ1˜‚jÞK/.c64ë*¯T,=Ï•ˆˆˆVDlDÉÛû¡1YàpÍuñE÷ ºõ§p´ñ…ô.< §ùwØ\‰(µ¼k`0gãd*v T{ »ûç¦Éõwáaã”ænÁ¦½zØã0[(˜”%Âm«‡úíƒÐuÀ\”»P®ÕAî2À­ùì©{*½ëz¨¾›}˜=âB×´xÌŠ—ùpSüm_„Ì0áG‘wM )P@ôLJ“BËwjO£¤xÞŸ.ºfØÆf|ß÷z¼‹^d‰ˆˆhuDûø¤º# ¥’å{p»òCìÕ÷'ø=wŒLœ‚Ó|ÚÓ¥P«TP—~Ž ú‡èOÈÈQ°¤ 0ÿùÏüÿEÑÝ/`¾s•%Ç \ka€!""Š luÅÈÊÎÇ>©c¯*Ì…R™Øñ :&ݹ_`ä‘!UU;ÆL– 0£hï]f}‹·í‡ýDñ—´F.üÛo¿ù(jò'&÷¡«ü¥UTq Ñú'áh¿ME TêRœÖÞE÷¨üÁa¢Ifÿ^Î}ˆ9ãh…®ª êâ“л0&ŠðدC½‰�ã¼…Šò‹hÜ–!¤5\ªD…‘e”)q’2ÀÈ£/999صk—ÿ+´˜;ß|¢²È,&›"ã­+ 0DDDÂ(Ìö#o�Ó³‰"¦º¯âhY%½.ÿWYv£N¹q'~J¬¤ 0rºŸ¿H8 It•Fþ¯2F8‡ŒˆˆÒÆ,\==xZKüƒœ6-Ë!‹ç?l¯rñŸœ?¢Fß¹°AgØÖc@ÍMJœ¤ 0ó£/ópŽÂD‱JÀ÷¾áÜ+¨*Ì…J¨3ÄÛpå;v¡¼þ †ùjNDDiçñ$T§¾Z¼¿ÉΈwqdÛ¹÷|ƒša<nïÇ’+qfº =q3òì »šŸÆý¸› h{ýDñ—t&pôe¾q&œI¼pŒÌ½0{-ШëÑô*-b²õsdW4q†ˆˆÒˆ` ‡‘¿*y}P;Cÿô0+*q©áÍz•àÖ€k‚™Kíã4¢¤ð8ΆàvU¥E(æ2J ¤ 0¡£/ó£0˘ínŸ€öÀê'â8ºj÷a“R.§HDD”Ò¼}ü½¬æFä�Óp©y ©_¥ØŽ’k=¦—IœwP­¹‡³æÀÖ~WΪ‘#ß×ÀP‚%U€‘/°Ðð2ß8 ³éżíväáxÕ9ç*ñiA6[¡®³F~‘"""¢4n Ù,Üö{8·™ûQÓö2òú™«ÖçoJ‰îAX›u(ÏÏ’úc (óA0˜áts+~Jœ¤ 0ÏŸ?‡Ífó59´Ìÿ·ÜäïÑR¼põÿ‚:¡Å*yé/qåç>¸8}ŒˆˆhƒšÆPÇC©€"ï U&‹Ì·¿œA€:gó\pɯ€®Ù†±… <‰'éÖÀÌ“ Ñbòî÷6´èk!ç¡­7ÁìœÚ`ë]–!ŽÃfø yŠ-È-ÓÃíúž—h×U _©úb›‘£`0¿€›'—’LÚ˜…Ûùwt5|1'"¢´&ý‚3ò”¨ŒLäîƒj_>²7½ÓMÏ—žµQxž£¹úC(3¶BUóΠQ^;^Ež^.N ÿgyÊØÛÈÜSƒÖ—ìKPòa€I ^¸º/û†ˆ3”;QüÙaäoû�ª¢2èºÇùÂCDDiÄ ›®Š‚óh]ø N‘éDÝ¡J4nä#‡Ñ'Щ·Jý¨­P×>ijEû¸tB_óãò›\{F`kÖáTÑØ/ø¡(%˜t öC¿G)½˜× ctFzÑ1C(6À9Ó…Úc7`ç+¥)XµE(Ò„t¨gàП€`–÷˜÷brlbãÆˆÏa:óq˜òÒM­R/QF9d?Ä)8Íê÷QP®C³m‰M0‰â„&ÈûÀlU¾y1Ÿ0®ß!œge""J#^¸,ßa÷ tÌ—ùí@{Óe”ï,†ö×ÇÒq g¾Üà£1‘Œ£]ÿ`‰}`"”Qîø Âä(²_~í΀Cg 0iaM!vj»0#Ê&ûäfoA7²$"¢´2ƒ—†CØ$õä¾Bäöv×õbcûõÀ5üÊ?Ulc ¥Žåu²=RéÓí…×ã<Ìi€*ìù l܆‹&]ÈUCþ© ‚Qšìm(¬¼}Õ""¢T1ñçkZðbÑúŽÀö î 6#ŽÃRó!9p®î>,Cò(ÉúoŸ@®oÊ (ò΢i©Ñ“H#0­ãÕFJ"""J1"<~@·ØZÏC]ß”ÿX„»û" äð’s†î<kû;önÄ`¤!˜Ð50áÌ:aí÷Å Q:×Ä_‡c>œxú WË;èçátëÚ˜†bMäõ±Cm0uNú"ðZajZ¶ŽQÌ0À¥9À¨ëÑïK*^Œ4ŸBV†™‡nÃ9j¦Cøä‡ÈJF”Ç9A€¡+W¡„k`(`ˆˆˆˆÒÂ8Ì”Õ5£ÍtÅÙ›±i¿J™.Ç*wcwÝS.â§”Æ�CDDD”&DW'êJ¶C! 凨n~.E3ŽG0 0Èí¾cG` (Ì{½x¤/Uú÷×™ã1kPÌ�C Ä�CDDD”VärÊe”W€†R� QZÆãö~,]ŸÍÞöNŒúY`fàЗ£ªýMÕ1J4"""¢´à€±¢—üSŵ†‹(¯¸µÄNüìßoÀKß37­WPUzÅ50vÈ…™a×—b? % %µdï$ÏãsÀ RúÏ’Meˆ`\¸Pô>ö&<[´öºëN¡ìxÎÞÿÓÿ5¢øc€!""¢¤–ì}‚äy|ܬ1 Çé„3b넾æÇÈf´í½ÿ.G7:áöƒ1cÕáG`(`ˆˆˆ(©1ÀDk/ò4/ž±>´ß» ­oï-êï=³±é6¼v¼‚{îsÞBEùE4„›~ækõTﲌ2% %5˜•ðÂÕ}êL…ïq6EΧ¨ë—âÍ"˜p©ü=_yfEN)®ÙÞT%#Š7"""JjÉÞ'HžÇ'bæ™û3ßF~Ù7¨»ÝŒv³fóïh½wš²(3Ka°GñO! ù¾8 »é ä)ÈT}‡6ç´ÿD‰Á�CDDDI&Z¯ÑZù*LŽ€2Ȧ1ØrV·AÞ›?*ž?ÑQ{™[WÙfa?Qü1ÀQRc€‰’׺ýKÍŸ¢Ný,QäÑÕCÅ{P(v Lß×’sψ⇆ˆˆˆ’L”<f{ê– 0Ы¿…9üŸ³ ÕYÈÈÜš¶—Á#:â/ÂU(#Š"""Jj 0ÑFsE1j,cêÏbªû¿ñA™ #þ¯,6ƒQ‹n®@æAÔ¶=]\Š¹Ç€š›¬BF‰Ã�CDDDI&Z"ÜÝQµU×~Â#k¿?tØa³´¢±¶ù™@c™ðß~1Ñiµ *Uä¶/?j–Q¦b€!""¢¤Æ�³Óp6Ež"¸„²¯)ÞÇé¦çø¯À´úÛ 0”8 0DDD”Ô’½O|on§Fíç(•GSÔ¥8}á´öO,½LÔ¼ðx¸¢Ÿ‡†ˆˆˆ’ÌzšÆkçHäQ Ãók]^Á=ŸSÄ)8­ÿ‚Ùê|ó5¢a€!""¢¤Æ�­a<nïÇ’’gº =qNÿa(Ñõ5ù™ÈQ…:S'†ä‘–™>Ü>²Ã· †¼ÌéŸàä % %5˜h9`¬¨Ä¥ †p­×52U†ˆ“­8£ªGßÌ|@q¡[[$…—MÈ)o@·½m5%8Üøb¦£­ %5˜hE0 —Êçö+¶£äZÜþŸåµ\@±~ÀNDxìסÞ$ý\ÎY´ŽúÇvœ æµ Z%"""Jj 0Ñ 7…lnû=œÎÛ~SÊ^ËwP×= 0â š+Þ‘þ¾ljt,„š)s >Ñ÷û‰â†ˆˆˆ’ÌjMc¨ã¿}›R*òΠñYUȦCØ}u-aÒB¶ô·mÚãŸR晀ÃҀʼý¨ëŸöÿ�Qü1ÀQRc€Yq6ÃgÈSlAn™V×’Kûxáê®GIÎféïR@Yð74;å°â†£ýŽJš÷­#¡„a€!""¢¤Æ�³Bžçh®þÊŒ­PÕ< ©æÁkÇ«ˆk`0Ú‰ö^é»r9åÀ2ʼýh<ì? Š?¦"""Jj 0Ñá}z«ô˜¶B]ûÏæ÷tYhÐ×ü¹ ™ó*Ê/¢!¤@`k¸T‰ #wâ§Äa€!""¢¤Æ�%ñ9Lg>†J¥ŠÜöå#[½De§*éï‘ÿ¦ÈM •†‡†ˆˆˆ’šÜiNfÉþø‚£]ÿ`‰�ó#jô!£6!­Ç€š› 0”8 0DDD”Ô`Ö“¯Çy¾û¯—ÙáEãŤÿ€(þ`ˆˆˆ(©1À$ ƞ=½z-A€ ½Š{í} *@” 0DDD”Pr�Xk‹¥p¿o¥-¥ˆãèÖ}ŒÌEÇfä”Ô£;ê’ÌD±‘à+jæÆ‡ò-oc¶èµç!ZÔ›þ§{Öÿ="""JEkíàÇ: $ûã[_Sx¦?„LeÊ4u¸Ýܳ٠sG+îÕƒ²ü·‘Yb€#1”@qº¢<îС4/Ów5Õ•0‚x0ÔR<…ô3Ê\ªTØ—ŸMygÑäÛ`‰ˆˆˆRÑZ;økýùå$ûã[W-¨ÜY S¤¾•lj–êT·ù¿@ñ¹¢¼]ÐnÏBA¥nQ]qckäÍ”Íö@·Sºá×€Q—Œu×ãБ;äDDD)‰&yx-ßA]÷tÉ]öÅþz¨5p"%J|®(±ú=‡ wÌø¿0o™J|!èàâû W ³\0CœÂØø_s_'""¢”À�“<<æo°g¹�ãÐC-˜±L­2¢˜‰Ó5ƒ‘¶®y{P-q+ Ú{ÑM!Ç`©Qcæ:乘¾Ö†¦+Ø©ÖâWùøqΜ¼ËÑ""¢Â�“D&šQñÁw°DZ¨/N »¶e¦?ý_ Š¿ø\Q³½¨Ûý–ï^Ô¢]#ÚaØŸþ>›bêžqM Qªß¿WÄ3çë7ïõ+þùZëýÇúñ­/ºµ{UT…kM`í1÷¡³ÃKë-Ô–ïBæŽX¦øi1%Nœ®(¿Äƒ¿’E`³ G99‹‰Ö‹¨iÁ ×^ÃÅÊDDD)#¨ƒ?Ú‰öÞ¥VÇŠ˜±êpÂðf'ø¤ 0Sf~zóñlj‰ç9šN¿…ô¸åÇØ,žDI ~W”gc“k\î%záñ2œ¥“ ¾ó*Ê/.*úó¦ÕCP½ U2q NóhKwAÇǾ¿å&´§K¡V© .ýôÑ/O- #Š·8]Qãè±:ºc‹øÊŠÎ¡•,›…Ûùwt5„óÐÖ›`vNEW€ˆˆˆ’Rtæ\*Ï7* È)Å5›Ëÿ‰0¢{ÖfNæøG-”q Xëj#`Dñ§+ÊcY1N¤àñ¦+ß‹ÝÚ.ÌHÿsÞ;mÛNàž3´RÙ</\Ý—¡ÎT C¹ÅŸFþ¶ **ƒ®{œ!†ˆˆ(EuðÃu ÅIØM_ O¡@¦ê;´…LaJL€á³¡ùÊY¨r6K·Q@™5†6ØznC{3EÌ*FÀˆâ-nÆ ÎEþ>TªvÔ€þÙ(Œ¯³Š‚tŒJ·ñ˜!àœéBí±°3Á¥¤%;øž?ÑQ{™[WÙˆgaªcÅ7ÀÌ`ìY„È‘7×ÎÈD^É×hhëÃØÂ\/<ëqÓ#ÀD#Š·8]QÃxÜÞ¿¶ ¼h¶*Q¤˜m™0®ß!œŸÛ†ˆˆˆRN¤¾èê¡Bê4+v LßW„+ã`fû¯a¯R!}m3rŠ/ É6²l1¢” 0«#Š·8]QN<0š1òÂ3Û{W-þ£åLÀ¢)ÄNß”3‰`²ßAnödU4a$‹%·Å|gª ²‘¹5m/ƒC‚8Ç‹IÿA|Œï±¹ì0ßÑá¬*ÛTgqå¾Wä“R&T#`Dñ§+ʃJ黀ƒ›beáÃóíÿÔ@Ð?Á¨ÇMö6VÞ€•QÊ îàÏ`Ô¢›[óšyµmOo™Ðc@MטD¾y:Ù#4Ö~†ÂÜ|”ߣÙâÀÄ`+êS¹Œ²_´#`Dñ·�c¬ð}Ð\Êzê½(¯‚á¨/ˆ*dúŸaæ0&Q* ìà‹NΨì™ hûòsãZ¦8šûÝC°µIÁª¬�ÊT®Bæ³²0¢x‹ÓåÂ@ÿðÜÚ•r¾K8 <’¾€*d›‘¿ªÂ\(3AÿlÊ"""J5+îàO›¡¿\æ ©¿bùNS5À¬|Œ(ÞâtE9p«¶Oƒ.�;l¦jä)…èàÏö¢n÷[Päÿ MýãþOfá¶qôè rX“ˆˆ(%…ïàÏ`Ìö߬ ?w:áö½ßÇ·ÊWÐý»ú`}:ûc¯:{04ÿÄ)Œÿå?H­�³š0¢x‹[€ ¿& »´ ªñ“Ð*dóÄèÕß² QŠZÔÁ÷¼@‹ð2õ¶ ¯Â�[ÈÚ×E?¿Î‚îßyeª“8°¯ |‰òÂýÐZ'¥~ÉsÜ;²ÛŽÜ…Óßa‰õã‹»0¢x‹[€¹)èðK‡fó›féubÌmò˜B_ÝAlû·í”dcsI#G`ˆˆˆRTpß…nmŠw :ûšÛæú íM0\úªœ-È:r/è}?¾Æ�uv>ö-™Ø£†>Ìn„�2Foqº¢þÂøØTȉnj¯K®ÃíEàyîÛP}Þ„þ™Y_€9qäZXœˆˆ(euð'šQ¾9•Íΰû«ˆî>ËTÌãþ¯Ä9À„Û'eé`ˆ+NW” ¶k¥þkà _ƒÙ&àQÚ ìà{-dïÑñS â/ËßQ¤íZØ ;ðçc!èþ‡Âøh4¤ÏâF¯ÑËTøëÇG´ÑÄçŠò­_ÉE©öz@e©Ý ÚYüß÷­[2ÁŒ£ÇêĬÿ(,ñOtv2¥À¾Ç, [0/½»½Ó€â€ÛÄ5ÀH¿[%Ë_ nï ¢9|$èç‰hÍâtEMÃÙtçv_ØR°©9~CþÃ¥9`,+Æ©s‹æBÚ¹ã(Ü}ÖF""¢TÔÁ1áè‰fLø1Õ.`_ÝÓ…>E¬BÐý;ï ªêJð²×ÎA½ëê-C 0DqÇ+jîá>XÌ=pºÆQD7Æ^½†kÙu0Ô¹Èߺh.´‚¡ŸkbˆˆˆREp–š¯pÝn‰Ô—p<@uþ>èlo¾×�3õýÎøæMÂZ{BǨÿ8 ÑúŠÓ%W «÷oB™EÞY49Ýð8ƒ¶x; _[*x ãq{ÿÂ|W"""J‹:øžçøù¢MA!Æ {S Êö—¢òÜ·¨7¿NÐŒ µkÀ¾vRsXaªÊ‡2ÂÔ7¢õŸ+J´Ã°7J/ýˆvóïhm¼€2õa|úa&2”»P®½ ý…2ì8´T9dQ <í¨×|ƒÚ;=p‰ò±wïwbˆ¥üˆˆˆR–ÜÁxî ž~%záñF÷þß�a Œr/´–ðß‚~žˆÖ,>W”Ç A­‡cþuÈ〩"›ö¡¶k|îk¹ )çwâÏ~ææ¡ÄЃ>Ã'ÈÌx ÚN¬¬ !% ¹ƒ¸(¥b‚îßy‚ö'tìkg6w¢wØÀ0À­¯ø\Qb?ôO@ße‡óÙCèJ¶C¡Ø‰OŒ=•WÐÔþí? (úh‰²‰Þ.h·«P'¯o™±¡î“¿Ã,—+ôô@÷ñ?`åÜ2""¢””RÆ3±É•u:`ˆÖWœ®(/FÛÎ!o~Åv”\ë[|…–3ïûÖÀd(òQÝ6ñÓ éCÍßàK_‰ÂYL4…“ÍCðŒ¶A(8y䆈ˆˆ’ZJ™gÖæëÐÊP5—ÑøèßpEîÀ0À­³8^Q^¸ìa2ÞE«mäÍ‹”8§ÕërYÎàöá¹ÿ¾´ÐȪlY¢Ü"%3ùý<uF`ž£é´üá«ÊÜ¡RíE~v&òNÿg„5¹±~|DMê\Q¾B�¢\w#¨öºÑôv祪T 0^«Û3rQq§îù¼ây?´Gq¦õµÿ Á`ˆÖW ]Q/q·ê4®”M”ÍöÞÅÕU?ˆˆˆ(ù¥B€™_÷"¾4`–°xêºÓño`€!Z_)tE9`P)}/ÁM¬Š&Œ,9ÿŒˆˆˆ’•ü~žìæM屇h¨üúÖ€*dmøQ8ˆƒ{Øéð±~|DMJcy.èÞL!Ó× 4oÊëŸ`˜†ˆˆ(%ÉüGCo:ÿžØZ~˜[$¯½ “ùÅ›éZaÄ#À„Ýû%¨ea? Q\$ôŠÝ}0ê~Áÿxi“xá ~aÇÑU«ÂÛ`ŸõˆˆˆRJP¡Biò,’—ïÑîû‹Ú+ »Â!1À­¯\Q¸ìfÜ©ý …Ù›‘¡2ÀéÿΊI/r­_EE}ç’å ‰ˆˆ(yvðgm:ìT|¡õyÀ"ùtוãHã‹„ŒpÈ÷ïñ.ÓјîDãƒð=¢õ·+JtÂÚr BÉN(¥ Y‘£ÆÙKWP£ý9ÊÙ,ÜÎ'¸£« œ‡¶Þórå—‰ˆˆ(©vð}U¾Šôp„¼¹‹=Ôþu2âä8ÆFcâ`ˆƒè¸X†<¥Â÷õ7M •Áá¿Q°X?>¢&>W”t±·œÞEÆ&d«Úú0æ{ááõx£ ^¸º/C)½`(w¢ø³ÃÈßöTEeÐu3Ä¥¨À¾è2£f÷h<z³H¾ý'\)/„ZûÀwüØðNŒÆÄ: Þ¿/`mÚÊ+ÁÛ: ·ÑÚ?é¿U0¢õÇ+jc¶fè*¡RwÎIx\=Ð×üÝ2±ú=J( jÐ1:xÌŠ pÎt¡öØ Ø™`ˆˆˆRRP€‘Ëo Ùß»ëðÌ¿þU>Ž¥ÀûízìÙ³x„Hþ ÕÃ,‰â"þW”8ký§ÈV¼å[Šè×Àx-ÐlU¢H?0÷‰Ë|€qý¡àüâzìDDD”‚;ø¯Ñzþh}n¡|@v-”]Žg€gm Դõ?ž¾Fhor Q<Ä銚…{¸-úoQ–Ÿ%]È›‘£:‹+¦_p§ÑŒQÿ­–6‹¦;µ]˜‘å�“ýr³·p""¢ÔÁwõ¡{`sÛFΛÁ«Î Ex¯g€™}V‡ÝŠp£B\C/ñ¹¢Äh®Þ‹lé‚WäÇ5ËëÕmVåy‰öj èŸ`Ôc&{ +oÀê ~™#""¢ÔÔÁwÞD™ê$ÎÉ{À,´/Q^¸Zë¤Ô§xŽ{Gv`Û‘»púM¬BÐýK}šÆ“_Áðx~ËùölÃÓþc€!Z_q¼¢Dx\Xî_AUi1J«®à¾ÅŠöæ?¢!""¢t` PgçcŸJUPÛ£†>Ì&:À¸ú`ù߃˜  JìÑF“ +Ê?¥ìZŠJŒ+ØF.нö<A‹zÓ¿àtsK""¢TÔÁíD{¯Û¸˜$!"ÚhâtE9ñÓõG˜XôÉ„¯¯à{™ší…ñªS¾¯‡ãÁPK5òäy§Ê\ªTØ—ŸMygÑä ?dKDDDÉ/¨ƒ?ôÆG£!Û#¸Ñk4Â2~ˆ#¾&ùFˆˆ6š8]QTJß¼dË:…æ‘ëYf{ Û™…á×€Q—Œu×ãБ; ÿšFDDDINî,‚*´àkï ¢y0ì¾oA?A÷Ÿ„#DDMÜŒ±JÀ÷A>ÕCPïEù¥¾v–áËû½]Ðn?½ÃWƒì q�zõ·se”Å)Œÿ5÷u"""J A|g#NWêÐØg¸& ¤D€Ñ2”ø�3Ô‚ë_'ÕÑF§+Ê…þá‹]ÄŒõ¤ïFAƒ¥F=š{èX¨øÑ†¦+Ø©ÖâWùøqΜ¼ËÑ""¢ÔÁŸzþ?C>¬Ä$¬µÐX&üÇÁâ`’p„ˆh£‰ÓåÀ- >9_ Ïô9¶)…è6¡í0ì—÷ ÷¢ÐûP÷ŒkbˆˆˆR…üþ½ÀiB­ÁÐ_𣠕; Ìa·aúù~|·P^ZýÂQôÊ·£õ !"Úhâ`¯ÉÂ.íK,Ü4‹‰Ö‹¨i~Q[Ô^Ãåá QªêàGáP@è¿ñBÐÏÇ@Ðý»_Áñ:8F‰. j‹rqÀ0 õV‹õã#Úhâ`n :üÒ1?õKnÿ‚u`î•d Ñ —ᄈˆ(uð?B£û% ¿ µ¶k8sæ.^Fø€2®& q¨_ªD}÷8G`ˆâ NWÔ_sá?Î'¸£« œ‡¶Þ³s*ì…NDDDGP?ì˜iôו ¤ñEB¢û§à4ß…N#ï³ü¾t 0Dë+NW”®îËPg*¡Ü‰âÏ#ÛP•AáÓ """Ú‚:øáF`:š +Ù†­‹Ô£X,®FG·îcdf( ÌûŸ}º Û ?BQÉt»ÂoÁ�C´¾âsE‰ýÐïQBQPƒŽÑÀc†Pl€s¦ µÇnÀÎCDD´a˜ðk`¹'p»?üªÙ ŸÀûízìQ¼…Í#ŒzD©K£A±ÁŽ«ÇôýœBFñ¹¢¼h¶*Q¤˜»°çŒëw磫B&ý¤ÇÙŽzÍ7¨½Ó—(›q÷~'†¸hŸˆˆ(euð?¢Fß¹¢=ñ 0^‹[3ö/ìK7`à2ƒ‚UI#ÚhâtEMÀ¢)ÄNm|—»`²ßAnödU4a$šü1Û‹ºÝoA‘ý>>ÌÍC‰¡}†O™ñ ´XÙž¸DDD”,‚:øÿÇË@èv3xÕÙƒ¡ý…xL=fÇh­“¾CY@ö»ï"[Á}`ˆâ%~W”ç%Úÿ© ‚Qšìm(¬¼k„ù¢‹øvâW¡®_zQ›±¡î“¿Ã,ïxëéîãÀåÝQr êà;o¢Luçyü|ûå…ûçBƒø÷ŽìÀ¶#wáô§…¸ߌ6üóÛèͯá±h½•×»àJPÀ"ÚhâtE9ñÀhÆdÈ…=Û{W#쪻˜CÍßàKß§³˜hþ '›‡àm[Á44"""J6ÁÆ�uv>ö©TPµý8jèÃlÂÌÊ1À­¯8]Q‘6²T¬` Ù�nÞE¸û¨lA´1ˆˆˆˆ’‹ü~¾`´í½+›ôó1°Öûõã#Úhâ`ŒU¾7`XhõÔ{Q^ÿÃÑÑÃþQ®»pMav%E|Ïl-?@+OÓ^…Éübɯ`ˆ6–8]Q. ô‡,l1c½„Â#é»Ñ˜«Bv×ü:ä~ˆˆˆ(•uðÅWh9ó>ò>+¹B¥Ú‹üìLäþ Î$݉9 0Dë+NW”·jñ4¨$¢6S5ò”BtëWÄXïa0ÜA»Ã-O ÿá]YF™ˆˆ(¥vðgm:ìT|¡õù›QϺëÊq$Yvâ_!¢õ·�~ Lviÿ@øm©B £¹bN›¤´)<ÓB¦²�¥§Cõ(%›À¾×ªÅö"=!IEtè¥÷û¹}VÄÉqŒ|xøó±°Öûõã#Úhâ`n :üÒa†Ùü¦Yz‡–œÓDÞ S]~éöâH*²Þ†Zß8�½ú[V!#""JQ|ÑeFÍîÐ<xô¦ÏÐþ®”B­}à;~lø 'Fc`ˆ6–8]Qa|ljmkWä,?ÐüïÿASuY§Ð<2·Ýˆ£Gï`pMwNDDD‰`^°SèŒÅM±»Ïfç~F>Ž¥µÞ¬ÑF“BW”®îËPg*¡xgZœ˜¶ÿŒ‹r…’z3F`ˆˆˆRRpÿ5ZÏÿ­/×͆iÃ.ßt2 ÑÆ’bW”ë5†]œ/FDD”.B;ø¢Çƒ•lÀ�C´±ðŠ"""¢„Jö€À�C”\|EMÀÜøCþ#"""Úx`ˆh%âtEy0Ü¡Ci^¦ï"j*œþ[ÑÆ³ÖþZ~9Éþøˆ6šø\QÞ.h·g¡ R‡ƒ†€flí‡Û3"""Úx`ˆh%âsE‰ýÐï9½cÆÿ…y"¼o”å•ÇÑcuÂ_1qøÊŠÎ!.ê'""JU 0D´qº¢f0ÒVƒÃ5a*ƒh…A{/Ê)dËŠqêœ�A.ìoçÊ÷b·¶Kú 3pÞ;mÛNàž34(Q²b€!¢•ˆÏ%oB¹û-ß¼¨E½Æƒ:ùûTP©BÚQúg`ˆˆˆR‘ÜX‹µþür’ýñm4qº¢<lüg m0›ÍÁÍ6¼°ÕÒ†ñ¸½Euቈˆ(ù1ÀÑJÄçŠG`mÔA«»‰v‡[:ž@ÿû0ÞïÄ'Ú-ôx`4c2äæ³½wqÕ2á?"""¢TÃ�CD+§+jÍûpÚ4�·8…gúCÈT ôÔa¨…Gpùoµ4 *¥ïE ¸)UÑ„‘hs%•µvð×úóËIöÇG´ÑÄçŠòZ Q×£_ âH*²Þ†Zß8�½ú[˜£šC怱JÀ÷Ae˜ë!¨÷¢¼þ †`ˆˆˆR ­D|®(yÿÇšÿý?hª.€"ëšGfà¶qôè F>\è)¹,bÆz ¢Å!""¢dÃ�CD+§+Ê W÷e¨3ÈP¼3-NLÛÆE¹r½£QnÕ6âiPf;l¦jä)…(Gqˆˆˆ(Ù0ÀÑJÄñŠáq½Æ°kµI#Ò˜,ìÒþ)ÿ­ˆˆˆ(µ,~o_y‹¥p¿o¥ˆÖO¯¨Y¸OpGWA8m½ fçT”»ð˸)èðKGpfK¯cn¿¥«d� (Dñ§+.` ™r'Š?;Œüm@UT]÷x”!æ/Œ… <3¾.¹{Ô嘉ˆˆ(•0ÀQ ø\qb?ô{”PÔ ctÆ:„bœ3]¨=vö¨²‡ ¶k¥ÈQ„šÝ‚¼Šk+Ñ!""¢Tì!ÙQº‰Ï'—QÞªD‘~`.`Ì×ï ÎG·�ßw¹(Õ^(£,µT;Ë¡“ÿû¾cL0DDDi…†ˆÅ銛€ESˆÚ.Ìȇr€É~¹Ù[V° å4œMpþggð(‹ljŽßÁÿˆˆˆÒ  Šßçy‰öj èŸ`Ôc&{ +oÀêòúoY¸‡û`1÷ÀéžõM"º1öê5\\CDD”v`ˆ(P¯¸ŒÙZ ×ž‡ hQoúWpY–·­~®€ôB¡È;‹&§çoÐo‡bákÓþÛQ:`€!¢@qºâ<j©Fž¼�_™‹B• ûò³±i%C´Ã°7J/ýˆvóïhm¼€2õa|úa¦tŸ»P®½ ý…2ì8ÔåÎþDDD” `ˆ(P|®¸Ùèvf¡@ø5`ÔecÝõ8täNtC^7£ÖÃ1[¦Š\dlÚ‡Ú.)fq�zõ·Ü•Ÿˆˆ(0ÀQ ø\qÞ.h·„Þá[ÂÿF`à§06þ×Ü×ÑK1<}—Îg¡+Ù…b'>=þ1öT^ASûc´ÿ( è#}”e™‰ˆˆ(0ÀQ ø\qâ,5jìÑÜCÇÂ.úmhºRj-~•7àÌÉ»KŒÆx1ÚvnnšôB‘¡ØŽ’k=p‹¯Ðræ}ߘ E>ªÛ†¹ Qa€!¢@q 0òú•¬¹à±TSìCݳ¥ÖÄxá²?†Éx­¶,̧à´Z`åF–DDDiGî#$³d|Dé&NWÜ,&Z/¢¦u�N§s‰ÆRÈDDDŒ†ˆÅðxWNfœ° LJÿ1 §ù'üló/Ø'""¢ †ˆ%ÿ':p÷ï7ÑçzÍV2¶j`YÉÞ—DDD”Ò`ˆ(PJ\q¢«WOÀû™ïÎ-Ü÷ˆˆˆÒ âGDDDI†ˆÅéŠsâ§ë0±Ôâ•Ù^¯Z0å?$"""’1ÀQ 8]qTJß¾dË:…æ.p!""ÚÈFFF`³ÙšÜG<N6òã#¢ø‰[€1V øÞ`€a¡ÕCPïEù¥¾v–á…Ý]ˆˆˆh’LМm×®]þ[%ùqQüÄéŠsa ?t‡|3ÖK8 <’¾KDDDôÆý×- /rûí·ßü·Hòã"¢ø‰ÛÌ- A›V¾@ŸéslS 0¯×  ×Ñ¥…p£0É2ú"Oc{3{Äà{lÇD[q 0á×Àda—ö(‡#ͧµè>B×Ñ¥…ÐQ˜d}YjŠ›ü˜‰(¶â`n :üÒa†Ù<ßþëÀÜÑn«/öC¿÷ƒ53\GCDD”®ƒB²­}‰4ÅM~ÌD[q 0a|Ì…ÿ8ŸàŽ®‚pÚzÌΩu1Kð˜!ì©CЈ˜lý[Ëîa(ê;"""¢T1’míK¸Q޾ÅGœŒ®îËPg*¡Ü‰âÏ#ÛP•A×=]ˆ_ ñè4¾œöA"ŽÁRSÅV ,œ5FDD”vä Œ•Çd¡£0}!Šøyú×%5è™M)6À9Ó…Úc7`.ÁÀc7 $ç=W~A8‹ã…9Pdl…ºÎ ·ÿVDDDDñ8 ÃÑ¢ø‰O€ñZ ÙªD‘~`n´e>À¸~‡Pp~UȤ3ôŒ5'Q¬RA]Z Ý}\œ>FDDD 0? ÃÑ¢ø‰Ó² X4…Ø©íÂŒ|(˜ìw›½YMYS�™€¹ñ!†üGDDDDD”¾â`$ž—hÿ§‚þ F=h²·¡°ò¬®h¯x0Ü¡Ci^æÂpíBSàôߊˆˆˆˆˆÒWœŒ?]„‰‘–ÙÞ»¸j™ð-ÃÛíö,TêаP2y®[û¹†ˆˆˆˆhˆS€‰´‘¥"ú)d¾B�‡ wø&¡áõx£«dFDDDDD)-nÆX^ ú†7#'ú”æíByý G•>f0ÒVƒÃ5aw:á\hV´÷8…ŒˆˆˆˆhˆS€™Ä ÇHð(‰8Ž®ZÞ>Ð�û¬ÿkK™íEÝî·ÂŒâHk`ˆˆˆˆˆ6„ø-â%¾Bë×GQQßed¿ÄCÌfsp³ Kß%""""¢tÇ�3 ·ó îèj ç¡­7ÁìœZÙÚÏÆ&C«–yàv3¾mq 0^¸º/C©@†r'Š?;Œüm@UT]÷øÚà{Ìøºä:ìž5Ý ¥€ø_1%5èñ…ßNü3]¨=vö¨²‡ ¶k¥ÈQ„Y“±y×V>¢CDDDDD)%>Ækf«Eú¹€1`\¿C(8s43À|÷‘‹Ríõ =` 7¨v–C'ÿ÷}+Ƙ`ˆˆˆˆˆÒVœ¦MÀ¢)ÄNm|»¸È&ûäfo‰~LÃÙtçv²HÁ¦æø ù‰ˆˆˆˆ(}Åo¿ç%Úÿ© ‚Qšìm(¬¼«+tQþRDx<+¹=¥“ø"""""¢5b€!""""¢”Á�CDDDDD)#ÅLÈf˜úŸažöˆˆˆˆˆÒ] ˜€Í036#;/T…¹Pf‚þÙ”ÿ6DDDDD”ÎR'ÀÌö¢n÷[Päÿ Mýã˜Û:fn»GÞÁ ÷!""""J{©`B7Ü'@¯þ6ºÍ0‰ˆˆˆˆ(¥¥Ð²)ôÕÄvá±ô_2nÛ(/ÈÆæ’FŽÀm�©µˆßóÝ·/ ú¼ ý3³¾�sâÈ´8¹Ÿˆˆˆˆh#H­�CDDDDDZ g;ê5ß öN\¢|lÆÝûòpþÑF:f¾ Yöûø07%†ô>AfÆ[(ÐvÂí¿¥¯Ô 0Þ.h·«P×? ÌØP÷ÉßažOtÿV¯ÿvDDDDD”¶Rh ™CÍßàËæAˆ˜ÅDóW8Ù<Ïh„‚ó,£LDDDD´¤Ð²Ü>¼ŠŒ d5²*[0á¿¥¯Ô 0¢†ý¢\wƒa¡MawqþÑFBfídýßÑæpKÇèxFV!#""""Ú0Rh Ì0š+öá´i�nq Ïô‡©,@é©ÃP àòߊˆˆˆˆˆÒWê¯u=úEy0¦ YoC­ïƒG€^ý-ñm�)´ˆ¿u hþ÷ÿ ©º�ЬSh™ÛnÄÑ£w0ÈYdDDDDDi/…¦yáê¾ u¦Š÷q¦Å‰iûϸ(êÍe€!""""J{)`d"<®×vÎóÀíæü1""""¢ ÅL3¾.¹;+‘¥½ 0.Ø®•"Gº‘¥Ü¶ ¯âÌÎ)0Æ¥¯Ô 0r²­¹(Õ^ÚÈÒpC€jg9tòß·bŒ †ˆˆˆˆ(m¥ÐÌ4œMpþggð(‹ljŽßÁÿˆˆˆˆˆÒWŠ­ñÂeŒ;ºÂyhëMœ6FDDDD´¤P€ (£¬Ü‰âÏ#ÛP•A×=ÎCDDDD´¤N€û¡ß£„¢ £3¾êcB±Ι.Ô»; QÚK±EüJéæF[æŒëwçaæV0DDDDDi/…¦MÀ¢)ÄNmfäC9Àd¿ƒÜì-ȪhÂG`ˆˆˆˆˆÒ^j-â÷¼Dû?5ôO0ê±@“½ …•7`uyý7 """"¢t–Z3³µ@¯=AТÞô/8ݳþïQºK¡�ãÁPK5òäø•¹(T©°/?›ò΢É9í¿ ¥³Ô 0³=ÐíÌBðkÀ¨Ë ƺëqèÈ r QÚK�ãí‚vûAè¾%üoˆЫ¿«B&Nalü¯¹¯QÚI�#ŽÁR£ÆÍ=t˜Í0ûZš®T`§Z‹_åãÇ 8sò.GcˆˆˆˆˆÒT ; û³‘‘±tSìCÝ3®‰!""""JG)´ˆ­QÓ:�§Ó¹D{ —‡C0DDDDDé(…ŒDôÂãe8!""""Ú¨R+ÀцÆ�CDDDDD)ƒ†ˆˆˆˆˆRFÜny"""""Jw©`<f|]rvV#""""J{)`\°]+EŽ"ÌÞ/[Wq fçcˆˆˆˆˆÒWꯚ­¹(Õ^‡Á`xÓnPí,‡NþïûVŒ1Á¥­™†³éÎÿì e‘‚MÍñ;òQúJ±50³pÿhÑ×Bj k|„gc3þïQºK¡�#Âm»†’œÍAë_ygÑäœö߆ˆˆˆˆˆÒYêñKv@¥ùÇ|…“E7†»õ8rô¹ö…ˆˆˆˆ(í¥N€ñ˜!ì©ChP W 3·‚!""""J{)4Óý'_£u$`Í‹g¶Ûg°c¯vŽÀ¥½[SuVò÷© R}ˆ\¥Š]:F¸ÿ ÑBF6 ·£×5'Q¬:€ÒÓµhì~=·†ˆˆˆˆˆÒ^Š"""""ÚÈ`ˆˆˆˆˆ(e0ÀQÊ`€!""""¢”Á�CDDDDD)ƒ†ˆˆˆˆˆR ¥ """""J 0DDDDD”2`ˆˆˆˆˆ(e0ÀQÊ`€!""""¢”Á�CDDDDD)ƒ†ˆˆˆˆˆR ¥ """""JÀÿF#Œ€/Zß����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_read_xdr_cdf.png�����������������������������0000664�0000000�0000000�00000446774�15030617045�0025634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����¡���ƒÍlE���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOT×Û÷û̟܉š4!$>09cˆlš`ÚpM 1¶† M½ÀØÞ FÐF w›:Þ¶3W+Ø:g• eh+RQ-ðù‚•é§ÃWçkÇ"tF+ȯkðd`¿ï½†g30?öž½6¯dÅBX{íõóXÇñ>Ö€ ‚ ‚ ‚ ˆU‚ ‚ ‚ b•AÆ�‚ ‚ ‚ ‚Xe1€ ‚ˆÊš5k’.AAÐ. ‚ˆJ²‡y2AAð íÒ‚ ˆ¨1€ ‚ beB»4‚ "*d ‚ ‚X™Ð. ‚ˆ ‚ ‚ V&´K#‚ ¢BÆ�‚ ‚ ˆ• íÒ‚ ˆ¨1€ R+É‚ ‚ˆZ9‚ ˆ¨${À  AÄ5‚ "ÕÐÊAAD…(‘h¬A¬>ØÜlIZ9‚ ˆ¨$½È$ùy‚X-ÐX#‚X}¨=÷ÓÊAAD…(‘h¬A¬>Ôžûiå ‚ ¢B‚H 4Ö‚ VjÏý´rAQ¡ A¤kA«µç~Z9‚ ˆ¨Ð… R5‚ ˆÕ‡Ús?­ADTè€B©ÆAÄêCí¹ŸV‚ "*t@!ˆÔ@c bõ¡öÜO+A: Dj ±F±úP{î§•ƒ ‚ˆ P"5ÐX#‚X}HçnþñŒA~?^x^`:øUÒkGð_‚ ‚XP"5ÐX#‚X}HçîaXËó—Ÿü¨e;¶”߯DðI¯Á ‚ bÒE&õk‚X-$½¡£±F¡9¤s÷0¬¥ï-UÖ•ZÉ@A(t‘I½Åš V Ioèh¬AhéÜ=ŽÞŽ{py<ð,”ôÔ}‰S­Ž…ï=ó-\Ì$½vÿ%‚ ˆEH™Ô[¬ bµìX¡±F¡=¤s÷ tš/£Ëfƒm¡ô «î�Þ*¹Ž¡®™I¯Á ‚ bÒE&õk‚X-$½¡£±F¡9¤sw´KÒÉ@A¤é"“z‹5A¬’ÞÐÑX#‚ÐÒ¹{·õ¥8®×CR ¦›pzg‚?#%éµ#ø/AA,"|‘JµÅš V ÉŽkAÚC:w¿ÂøØËe„š¥$½vÿ%‚ ˆEH™Ô[¬ bµ +”¹ƒ b5°xîàë‡Íz Ë´v:àñÍÿßb’ûiå ‚ ¢"]dRo±&ˆÕ‚t¬Pæ‚ ˆÕ€tîž÷Áy¤ëߟ/ºÌR\vzƒ?#%Ù¹ŸV‚ "*‹™ÔZ¬ bµ +”¹ƒ b5 ™»…~˜wn@F^) u?‰û,‹XpîxÞÚ×Œç „cÒÊAADEºÈ¤ÞbM«éX¡ÌA«ÉÜ-xÐzèKX'Â.Y„A\;}®À„?ƒÉ± øÿ#ù¹ŸV‚ "*ÒE*õk‚X-HÇ eî ‚X H÷YãxPÿŽ˜n¢gaîïBë¹c(1¶¿÷+.šïÊæF+Aé"•z‹5A¬¤c…2wA¬¤swêCÄhå ‚ ¢"YdT°XÄjA:V(sAÄj@:w¿‚«ñS?)™ûÃË)‹/ƒŸHvî§•ƒ ‚ˆJø…DÍB¤c…2wA¬¤s·�ÿø8&ã˜ü“ûiå ‚ ¢~@IµÅš V ‹Ç eî ‚XéHçî)¼ö.6O»q÷®ÓÁ/CIvî§•ƒ ‚ˆŠt‘ñáÙ#7¼á«”‚‹A¬¤c…2wA¬¤s÷ tšÎ ! ÐR.UaçÎ*\²´ Ã9² ËÄHvî§•ƒ ‚ˆŠÚ‹A¬$c…2wA¬ ¤sw ᘺTw Ë–V–V‚ "*ÒE&õ‹A¬$c…2wA¬ ¤s÷r—.ìk*«¯/…“ûiå ‚ ¢¢ö"E«ÉX¡ÌA«6wûƆ1ЄYZ3à•÷šŒŸ¡pÏ8ƒ¶âdç~Z9‚ ˆ¨¨½HÄjA:V(sAÄj€ÍÝÖÒ”Z‡ƒß‰Ž0t%éØm~´ Ó”ìÜO+Aµ)‚X-HÇ eî ‚X ijϊD²s?­ADTÔ^¤bµ +©Ï5MA¤µ÷Y´rAQQ{‘"ˆÕ‚t¬¤>×4A‘zÔÞgÑÊAADEíEŠ V Ò±Bi< ‚ Vjï³hå ‚ ¢¢ö"E«éX¡4žA«6w“1€ ‚àµ)‚X-HÇ ¥ñ$‚X ¨½Ï¢•ƒ ‚ˆŠÚ‹A¬ØX¡4žA« 6w;{áž¿z…ñ±—‹ç~Ì`rlB6O²s?­ADT¤‹T$fáótá{S×B¾óPè€B±ÁÆJ¬†7JãI±2ÎÝø­/ÅñE©d+±_ÿ«"û,Z9‚ ˆ¨D[dŸ½ÖKÐmAšø3ëJ­d ˆ$`c…¼p‚ VÒ¹;º^ŒRû,Z9‚ ˆ¨H™) ;n£A¿Yiº…J—±[«î1€ ’€2A¬.¤s÷ tš/£Ëfƒ-Pº`µÔ ¼ø8êmÿP˜�A‘Z$‹Œ0‚MF”æm‚N÷ò›pÍæ‚×ïLjg¯‚? P"6ØX!c�AÄêbÙ¹ÛÿÖŠdëïbb±˜@Òs?­ADT".2‚ÃÎ.Xj ¨µtÂnkÁ7¤@IÁÆ ‚ VËÍÝ‚ç*ö¥¯Eú¾«ð1€ ‚H%‘?¼.®™>Gþ¦uŸ!Í�‚H6VÈ@±ºX<w ðõÃf½‹å Z»Âýìy0ÓÌb’ûiå ‚ ¢"Yd„q8o˜p<ÿ-èÄï³ÿ·fM:² Ëp¤†<"ØX!c�AÄêB:w ð9P¼h™+:¤ï0 k(’b@òs?­ADT¤‹ ¼‰ Ç °ií[È?iÍÃòá ˜ñÏDÈ‹K‚ˆ6V('AÄêB2w ƒh.Ú ~o=rJNãûãÅ8Ps u_ŒmÕ]xü±P’ûiå ‚ ¢y‘à÷º`»vÆšFXí÷ÑÙñP‘EŠ V ÑÆ ¥ñ$‚X¹HæîÙ‡0mIŠÎbÂúÎ;}âBà‚åØE8#D $;÷ÓÊAADeùEfcïà;º­$ˆ¤ŽJãI±ÎÝ“xP³ep1f ø[ò>D^æFd~'Ï�‚ "µÄ¶ÈP˜�A$‹d¬PO‚ ˆUÁ¢¹ÛÿÝ?¶À>ú ÖO±!³�å¦.xü‘vYÉÏý´rAQ‘.2¯0>Æ4™ÁäØ"IÛÐ… b#âX¡4žA+š¤óÉ~>ø/AA,BºÈ ã¶¾Çõzè%¥ûõ¿Ò… ’ òX¡4žA+éÜ-À?Ô‹M·`bb²â×á×íè}ÉHvî§•ƒ ‚ˆŠt‘†µ4#ð½ðB‚HÉX¡4žA«éÜßóδÀ÷tYÕhîœûZ·úžEÂ1iå ‚ ¢"]d^ Ó|]6lÒ«¥åÅÇQoû‡Â" ¤c…ÒxA¬$s·ðÖ²,d•Ö¢áÌaì6þ }ÝMhl¿ƒÆú»Š‚iå ‚ ¢²ì"ã kEN0 Nð{!Ð… b#òX¡4žA+éÜ-À縈/š]„q<¸h ϴ¸×êƒùSJ-HA¤˜åÁsûÒ×"}ßUxÈ@ ³üX¡4žA+ ÉÜ- £[Ÿ‡4ñ{ìû¡emQ3ž+°Ïâjåh*T¨P¡¢~yÿxÆÂ\”gáóà¯þçâQe1ÒÏ éX‰ž¹c|x”ÆAÄ A2w‡h„ݦb48½Á’"ù|pµr$û0¼ÁÛó¬´öå­·µ–êOm­,Òú ÃZž‡¼ü|äKÊvl)¿ ߟ°TB…åOø‚ŸÐúû!ˆT>Ö(sAÄÊG:w ð{zasÏ'Ù¹Ÿ«•c¥-d¼=mR‡ÖÛZKõ§¶Viý–Î&0>t%,d ä:†‚Wšìÿ±<Ò±B™;‚ V‹çnþ±~ج×`±\Ak§_±€ ÉÎý\­+m!ãíyh£:´ÞÖZª?µµ²Hë7ŽÞŽ{py<ð„•gc>qùbbgãðú_;7kýýDªŽÊÜA±ÎÝ3ð>8‚t]àûóE—YŠË& =x{ž•Ö¾<£õ¶ÖRý©­•%¦ú½t¢ó÷⛵ÿ~"U,;V(sAÄŠC2w46 #¯†ºŸ`±XÄÒ€sÇ ðÖ¾U" ¸’àíyh£:´ÞÖZª?µµ²Hë7¯ã'TH5vå c}êÞE­¿‚HËÊÜA±òÌÝ‚­‡¾„u",,@ĵÓWà Ìý3˜›XðKvîçjåXi oÏC…Ô¡õ¶ÖRý©­•ER¿(*· %}7Œ.øB*ìûA,Ïòc…eîÆX”ØQkAÚC2w ãxPÿŽ˜n¢'$L¬õÜ1”[‚ßûÍw´c’û¹Z9VÚBÆÛóÐF!uh½­µTjke‘ÔOFWõ~T[û¤š}<hAûïgcd P ÖÖT´]^)'Þ”Z b… »£‹Ç†–P!Yöu2pµr$û0¼ÁÛó¬´öå­·µ–êOm­,‹êçÁ#ÇàBêÀ�/hjràeðËP´þ~´Äjmë•òÜÒç 4žA«éÜý ®ÆOQtüdXZYi9ey½çJvîçjåXi oÏC…Ô¡õ¶ÖRý©­•eqýÂRÞt;1¬`Ê"vVk[¯”ç–>¥ñä…ðö§B… ¹Ëë0q5>ŽÉÅnaQaŸO®VŽd†7x{ž•Ö¾<£õ¶ÖRý©­•EZ?>gŠ6­ |®è¾Ã€®¡HÉδÿ~´Äjmë•òÜÒç 4ž¼Às»jåó^Oª_òÐ8IV?kiJ­ÃÁïÄG²ÏÇUëh¡³ÇoϳÒÚ—g´ÞÖZª?µµ²Hê' ¢¹hƒø½õÈ)9ïã@Í%Ô}ý1¶UwQ˜€Ê¬Ö¶^)ÏÓsPÏ”Ãs»jåó^Oª_òÐ8IV?2ÑBgÞžg¥µ/Ïh½­µTjke‘Ôoö!L[ÒƒyÎg1aýç>@pÁrì"œ¢´þ~´Äjmë•òÜÒç 4ž¼Às»jåó^Oª_òÐ8IV?2ÑBgÞžg¥µ/Ïh½­µTjke‘Öojö¢,°`1cÀçØ’÷!ò27"Ûð;y¨Ìjmë•òÜ’ç 4žÜÀs»jåó^Oª_òÐ8IV?2ÑBgÞžg¥µ/Ïh½­µTjkeaõ“ä6÷?E÷-°¾Â„õSlÈ,@¹© žØåP´þ~´Äjmë•òÜ’ç 4žÜÀs»jåó^Oª_òÐ8IV?2ÑBgÞžg¥µ/Ïh½­µTjkeaõSs‘"bgµ¶õJyîEÏá£ãÚC3wŒüß”Æ3ÅðÜ®Zyç¼×“ê—<4N‡ÕŒA´ÐÙã·çYiíË3Zok-ÕŸÚZYXýÈ  Vk[¯”ç–>eîàžÛU+ïœ÷zRý’‡ÆIâ°ú‘1 ˆ:{<ðö<+­}yFëm­¥úS[+ «´Ájmë•òÜ’ç ÌÜÀs»jåó^Oª_òÐ8IV¿ag/œÃSâW^ ôGÈóŽEæ~®ZG =x{ž•Ö¾<£õ¶ÖRý©­•…ÕŒÚ`µ¶õJynÉsPænà¹]µòÎy¯'Õ/yhœ$Ž´~ø}ê[´?g†9ß l•x¿ü6&‚ß %Ùçãªu´ÐÙã·çYiíË3Zok-ÕŸÚZYXýÈ  Vk[¯”ç–>eîàžÛU+ïœ÷zRý’‡ÆIâHë÷w¯ßÄo×.âb×C8oâÌ7?³®ÔJÆ�­ÁÛó¬´öå­·µ–êOm­,¬~d Ыµ­WÊs/zÊÜÁ<·«VÞ9ïõ¤ú%“Ä‘Öo9ðÜþʲæŒ�p±R¾k¾OaZƒ·çYiíË3Zok-ÕŸÚZYXýÈ  Vk[¯”çfÏ!Iã'4Ö”çvÕÊ;罞T¿ä¡q’8Òú ‹{®ŒÀ÷Ö¬Y‡M'pîœ » í}d м=ÏJk_žÑz[k©þÔÖÊÂê÷Z؆!À?ÖÛ|º³N<K^´þ~´Äjmë•òÜì9ÈðÆ<·«VÞ9ïõ¤ú%“Ä‘Ö6!-§ &«cO°iŒÞ¯ÇÇ•¤ 9x{ž•Ö¾<£õ¶ÖRý©­•EZ¿xœGAº.ðýù¢Ë,Åe§7ø3Rx¾•Äjmë•òÜì9ÈÀ<·«VÞ9ïõ¤ú%“Ä‘Öï:oµ蒅² hÞžg¥µ/Ïh½­µTjke‘ÔOè‡yçdä•ÂP÷,‹XpîxÞÚ׌çB™µþ~´Äjmë•òÜì9ÈÀ<·«VÞ9ïõ¤ú%“ÄY\¿Ôz`rÕ:ZèìñÀÛó¬´ö%”CK}Eëýš÷úKê'xÐzèKX'Â%a×N_+` ˜ÁäØüÿAóN*Y­m½Rž›=øƒçvÕÊ;罞T¿ä¡q’8Òú¥Þ“«ÖIöaxƒ·çYiíK(‡–úŠÖû5ïõ—ÔOǃúÏpÄt=6lÒ…ÖsÇPbl ~ïW\4ß]ˆk£y'u¬Ö¶^)ÏÍžƒŒüÁs»jåó^Oª_òÐ8IIýTðÀäªu´ÐÙã·çYií«,¦l­¸54üzu¡¥¾¢õ~Í{ý¥õ U¹^BsᲯ‰Ô°ZÛz¥<7{2ðÏíª•wÎ{=©~ÉCã$q$õSÁ“«ÖÑBgÞžg¥µ¯\Ãwq¶ø]¤‰íÃÚèu)„Å3?Ô–bC·Zpw2làÎ>BÓE{D±h¾AØ®‡A¯‡¾¦VÇÐÂ`O%Zê+Zï×¼×_Z¿Wp5~Š¢ã'¡g}4J9eq,ô{­¿-±ZÛz¥<7{2ðÏíª•wÎ{=©~ÉCã$q$õSÁ“«ÖÑBgÞžg¥µ¯<¼„£f+Öæ–ãÂeæŠRš:Ñï‹à³?<–Â@û.*ëÁ:›wàí…©`càsºŒìÊߎ̴ ì6?ÂtðgR«ƒVÐR]#Á{ý¥õàÇd,Ã"ˆÖß–X­m½Rž›=Çë4žâXêŦ[°¿þ ½n¯ø_‘¡±¦ <·«VÞ9ïõ¤ú%“Ä‘Ö/õ˜ü÷. “ìË‘Þêïà2ïÃNóÀâ ÖŒôžË⇧IªK—CŒ —Ñ ß‹­¥aŽån ëvA§Û†ê¶>xƒXðõ¡é`%šŸ§Ö?@K}…úµ²HÛׇ<c#~¼ð¼ˆh´¢÷“:Vk[¯”ç–<G n4-ð=]V5ÚŸ;ç¾Öm…¾g$¢A€Æš2ðÜ®Zyç¼×“ê—<4NGZ¿Ô{`òß»4 o÷Á ü#ÿ‚~ÿt¹<ðxæËSôY~À•˜Â¼À?ỳéû¨Ýc@7z:×LÂnxkv˜á–üži¸ÍG ·EVU -õê×Ê"mßaXËó—Ÿ|IÙŽ-å·1áû–ŠC¨°ü _ðô~RÇjmë•òÜ’çžÃZ–…¬ÒZ4œ9ŒÝÆ¡¯» íwÐXÿÚ=4kÊÀs»jåó^Oª_òÐ8IiýRï™úÖñOÁÛu«æá­óñ>Ô!x#/¶ ki‰U3ÀÏÏçaùk0ĘàÛù ª²¶Äx0ÝWoŸ‚íep|øÂ\ú>2Ö“gÀh©®ZDÚ¾ÑÝטËÚøÐu”¤¯EzÉu »1ûDjX­m½Rž[ú|Ž‹ø¢ÙÅ^4á†gZ\nú`þô"œlÌ4Ö”çvÕÊ;罞T¿ä¡q’8Òú½ÂøØKqG*J²Ï—òÖñÛŒ(2÷E|˜Ø˜…Ïõ L7=Á¯ù…·ÎÇû`P áy ŽV^ƽ¡ŽùòÃ1®¢iè¶µöùÃý²LcôA3ŒÕߢµÿåœ1àÈÛ“/‰¡¥¾ÂW]øÇœh7×B¯?šúVØ<‘&õ¥áEH’!mßqôv܃+Äè5_žùÄçŸß;¾æÂÐR_Ò:«µ­WÊsKžCF·>/‚°í¬-R&½žÛU+ïœ÷zRýV6Úz¿Ã¸­/Åñ°°�½¾ûõ¿*â¦\눙†¢·#߸êÞE™¹_,îÓAüpÙ®¡öØNdèÒoqÿ¿$ûr䆷úðC4+\¬øá¹ò jîü&5&Øû0sŸÁÐÍ+èœL #h©¯ðTWaè*³Þ딎̼]Èß•ƒŒµï¡¢íİyž„$Òö%Í�žY­m½Rž[ò!š¡E·© ÎÈÞf’ϲÁs»jåó^OªßÊF[ïwiLMfìl­š0…öŸô{°¥ô;ñ¿›pÃYç5³ð ?D{ƒEYéâîæüÏqîR jÈ3 nx«Ì`ÌÑè›MÝnñ03ošœc!Z|€)[+n Å’M šwXâÈH ìïj~êêƒÓ”]îit,x0O^Ôí+1Ôƒ/!I†´}—Ñ þT(ZêKZgµ¶õJynésˆs‡§6÷¼úÆòÐXSžÛU+ïœ÷zRýâe žîôßãšsœívá±ÝÄ ûsÕ¼—B[ï÷:͗ѵp¹Ø«¥åÅÇQoû'bû&û|ʵŽÿ ÚNÕàö´Ú3ö³8Üü4øÕÒ#wP±yø›Q æñh°fà×€î�o÷Á ³˜°VàÝŠëpùf0ýØŒÝéS\Š¢cŒâb_¾‹³ÅïFpéŒCw ©Åg.…Ï.áLq²cÎH Zê+üÔ•¥©Ü‹2S„Š@Fùšƒ/!I†´}So±&bgµ¶õJy㥿¿›cæ ±¦ <·«VÞ9ïõ¤úÅÇìã:lÓ­CFÎVdn*eÀËžX£Ûš©ß§,‡æß¯ÿ)¬ây@&ÿdŸO¹ÖjGcÇ?ðÏD?´Ï>jÁE{¤ícþ8­&”Ó^x|Sðö5Áx…Ââ…÷Á ìðuuýS≞©7¿…µpù_Åqøb‡À­X›[Ž až0–¦Nôû¢×ð â…äGgà½ÿ=vløW¬^ „zˆïËþ-¶í4àVϼE·ÝmçQº¥5¿Þ Xx-•'–¸áçKH’!7"i  §îKœîxF•Y­m½Rž[úâ|âø …R/z´¾õNï¢ñFcMxnW­¼sÞëIõ‹G ÞÞZ‡~íY.âãS÷İ�¿ó<öÖÜg/¾ÐÂûõ c,Jh±à¹Š}LœyßUx"l´’}>åZÇcA¾X9VÁèE‡õem‰´ƒ CðÞG}Ñ[Ð¥¥áÍ5¤¼Õ‡˜[öT[èkûÙº·Pf}§[ö+¸Ìû°sѰȌ‰;±ø1Ôaľ²Kxàåmj%3§–}X+™ã"•7±­î¢ûœð#$É`u~MdA—õ¶„dEúyBIVk[¯”ç–<GÍ€…’¾ÆBmÍìû„üðÜ®Zyç¼×“ê'‚ÖÏ¿†°Ãzô X'¦0Ú} ¹z›*{•¥ÐÂûµ–æ Ô:üN8³K ’}>åZÇs UU¤·¤ 'Q°µ çBoO[ìŽvX|vü ³á�rÒtX#Ôò_@k×u4ßÖ`üÀ[çã}0¨ÅkÁ¶7UyCSÃzö4ôúØFc9„ ðü úýgÐå =$=EŸå\‰)L`©ŠüE´Ú%›½Uójÿ5É´ð[ L¦ÀZ ³Õcfˆ$™èÄic;CÊ‹Ë3 {£õ ¾„$Òy#z˜€n§®MÌþ‘Vk[¯”ç–<‡0Œ®êý¨¶öIç> ´ ý÷³12¬r´òÎy¯'Õ/>f]W° ãß ¼òŽÁŸâÞÚ/V¿¥K“ìó)×:/ÑÿO¸¶ô$µ‡¡ï ~½4‚§ Õy› i™%—`UCK;qxë|¼u˜…÷áC<yåÅð°÷µ5Sø½½Ï#º=/&(ú&¶/kci‰U3@ü“ F‰tdÆ'9YÈËÿE¦^xSpŽåáÚ+ßÛR‡´ÌíÈÏÿ�9b{TÜ„'ÖÃ<ËÉmÚ‹tÖþº äìÚ…¼ÌõHßmÆãi%’õ¥ÿ¯Âòqõ%¾„$ìo¿&’€àvdåV¡Í9”EúyBIVk[¯”ç^ôþ<r B"!øÒ¦&GDà µÕ‡VÞ9ïõ¤úŇðÔ‚ÝÙ¥0…^øZ® õîß\îWµð~W¦1Às¦f§Ô¢íù­ÙH‹Ë…įێN xw ª.Ü„½ï7Xãß3€ÐL¸ï(ò}’ËS,'#oÛY8ÄãàiÁÍÙ8pýIÔð¼G+/ãÞ‚úç|yã4 5Ø.†žaÖëaÓ—Ã⇣¶f׫àÏ­lf&lÑm‡¾ãÉë/qCü ®šc:PÏ Û¼‰œê›èŸ¿&ájªÀÁGbÈÑ—ØïàGH’!]d&ð—󟰺Ï`äö·ø²4Ôfµ¶õJyƒ•Gï´Aï\xoGþê7Oç­ÅÞ³þ)ø8x×Âû]¡Æ€(ši f9ÑÀhêö Hš„`7±û‘‘óAÈMç|9KÿT ¸ ݺŒ–Á0A§¸\»ÃUäçCâ¿Eª¨È«A@”f‘’¾8ôÝfˆÂä8Æ—XliM×ì†Ù-õ$ ýÊ G_âOHRºÈ¼@§é $·—Ñ /Àz  Tb¥ô1és€ *Èá–Bè˵£<ømF™ûÜg%ïï—Õo…Z ¯¹‰É-©£¾(›à°ŒápýW .‹ !A$Ï FïÝ㤼¯Ù!0Y×n/íFdo© Ü ÏrñNæFèTrWÁkƒqÛnÝ}=otßÄ…Ò<ÔÜ |}ÏòŽ.uÃ?íDÝÎíÐÛÆƒßðÂi>ŠÜŒ )ê G_Š„ºB’¬¿&šf@t1Xéç B~VJ“< ª‚Þi©„Ÿw>ïƒK8rà Ú=/áuÿw`½šÆX/löŒqhL™‡ÆNœø¢¡èíÈᱺwQfî'ŠØðþ~YýV¦1`ôwt< ¿Ƴއ§#5#APñ=øc‘8ìV¿w'Ã&­¸nõ™k÷(¿ðSØmi1ŠôMq¸vOÁÓ}_ë„mtvC.2ò*ÑèW¸¯ã¡Ã³HÝ^xæ@ïPjí»8´µ‘Ƽ´è¶ÕáqÔuF€ô>®¿ÄéÖÇâ¬ÃŒŸá€ñW…oväèKsð$$ÉÚû5‘<šÐ|›¥}üB¤Ÿ'ùY)}Lò$ ¨ rx§­JÄu®n[òª¾CíÉlO×A—]…KßÎé÷¬Ñ!½à<eFŠ…h¡Mâ~r>å°Ê<07£&,öOú=ØRú]`_pÃ1ÂÍ9÷¹‘Õo…z\AIþQœ ÕŸ@iÞnÔ8&ÅÙô ®ÈÆæ-s&ðüŒÒb#Ì í2ÌgJ•]†zûéV`�ÿ„wÈéû¨ýèLì“·ÿ)ºëÐ×þ'[0ýØZÚ`RÚ5ܦ’B;:Võ8Yú¶ÕÜÓÓð\?‚Í›àºGiÏè8ý=:C6¿‘J¨Øc8ª-¤rô%±7q&$Éêÿ~|›9é牘Fà¸Ñ$®{×Ðíö‰_O ¿³M7z1×Ad>Ïï¸fçýiÔ˜oÃ1œúp%Y)}lÑs€`Ê‘Å;m52ÔŒÂu‡Ð*®sB¶®)Äå?,Ø¿SëöÇâºí‚³Íˆ£ýÔnË¡…‹Pÿ´ªÁí° £ÛiüÏÿ ~żϬ~ÃÎ^8CÖfÁçAïík=€ÕÖ¿¤gM²Ï§\눹 #»BcÝe7Zú0‹1À÷ îÒŽ&xí¨Ý‘‰=–E7™?ìV_ªK—ƒ§9£Sƒ~/¶Æ,Ø&þŽŸÏÃò× äÀêþó*Ê7gÇïÌHÀÔï·gaS‘}—±‡Y×sÏâ¢×ÂnX 2‘³+|¬Šå ý³)4xûð``Òã¦V<ŠäðáOH2éE&Éϯ^†a-Û…ŠÖø„—xlÞ‡ô´\Ûý]±gÄsÝ=qY³fÝœžE^&ÒÒ÷Áü8_"HÇÊ+Œ½Œ0_Í`rlBœCc-yäñNS þRÏ.ÀÖÝ4=lbÇôÛôHc™”l—Qmx݇';Põ9è¹C+¡Â ü3ÒÚf@bHë'Àï¹‰Š¬7B朥=k’}>åZg´Ý$öìøŽ'Ò aèö¬ù¡ê¾Ò®Óq"Û-ŽLðVnYâV=ÞXVûè7º¬Ó1þŽ—pÔäakÝ_¬Fè«+Ç©@ÌûK8MŸ¢Æ¡ä2?Œ{Ýýap•дG‘"ü I²~œ É~~Õ2c‡¡ ýb?FÚP¶~ Ø&K€¹àëÀ¦{Y®»oB—ó%Úúǃ´Yø\M8xðž+7ˆŽ•aÜÖ—â¸d.d¥ûõ¿"’ 359Á;M1äñ>S„™û¨Éþ“âA†Þ¬F·×Ó¾øºî'XÌßáxþTp‘ƒÞƒ›w16ÿÍ>jÁÅDÎåD ¡¤ +’ú Ïa-{Küži9ÅЛÄ}ìO¨ûúcl«îRÄ+L±ÖƸÁ6âMwáf)µ¼ÑÙü3nØŸÇ>Êq0HrÜâÈ oõá•(·úÎ_P•µ%ÆÃ—ø;®ÔÂô¯ž×n…¶t™¿@e³+æþ. µáó·çDØ&¬8zÔŠ ÿº?NbÐ!¶KBï]±ÿ¿L šö(ŠÒ—âòáOH2éE†óE˜[ØA~¯Ö¿ÿD[unðýOÇwg…iØz;LjǠ@¤ éX‰&Ö¹ëJŵ!øS¡°ÿG$à÷óa_„¸Æp–zö5>¸,Õ¨¶bÄzëÞ®cf^çTíØ]Ú[ÈÌØ‹‡‡IÇ K~$qÎèB¸j# µãÔ¾rÔ?àã"Tkš¼#™»gÂ´å ¬/iÆÓÐË[Á˱‹pFØÄJ>Ÿ�Ê­âa¦ìÝÏÑêš„0ýæÝHËùÇŠöAß3ü¡eã`*ä¸Å‘ÞêÃ-ââÑÒ®CÚÖÚos£Ü ¡îýCh~KcOÁuõ6éÂë!–õŸ¡cBI «MUFüÒjÌËÝ:¿¯G«Í÷|¾~¥‘ã(©YH£õ¥x<Dj IF†Õ?’ýüê%ÄÅ_÷*Û=˜rÝÆY}*j»1Sg`^Fámý½àm‚�ŸóG”æf`]Q3yp†t¬¼@§ù2ºæä.X-5(/>ŽzÛ?Ì4ÖdBx ­&»€ªA}ë¿9¹åä/õ¬aËI°^ùàl¼€Žð¼ôª îyJËpF_ Y³ÅY[QZÿ;†y˜¹íƒA¢iØÏâpóÓàWD¬HçîI<¨Ù‹²1Á—x|ù€x>P.k“b+ÇŒý[\žg0b=†õk avùâËõ­ÐÁ@ä¸Å‘ÞêÃ-âîÊ7¨¹ó›ô lïÃpÌ/ûáž6ôüzEë߃Á>ü¹¥˜ÆSË'ÈXTC,­M7p×µ8Ÿ´¼D³’‡”´í¨¶>‰mÜ&ÃP'šîŽ.ÚDÄ-þ§ÊB©Äï!¢žddØûO†d?¿ºà÷¾Àp¨1Îoé¢F¸b ÷ò¿Àƒ«gP}ºýÓ³cÀ\ú¯•%"¸Xv¬ˆsƒµ"ÙúÅ.Î k2 h˜ö"]díŧŸlÅæ¼±£è§Jøê¦ž ׇÙÞâ{¿_› {.Ã¥v55ѧà骃þÄw¸æd†ñkÛÍø¼¿“AÒ¿ja¶:0OtR†0ü�wûcÙ³ËKøÜ-x ébg0ÖKô7Ÿ@QIôu;é}Zð_Ù™}|{«oáï¾›¨Î~3h͘„«©“UaõOÁÇ]Ü{´[±£ÖÛb¼Å‘ÞêÃl²­¯Ä㸆\pü?Oæ”Úý£è·ÿ{ÿhšxŒx#ü2\7à16¶-„½ñ0à›Rxru㊡÷ݯ]ÛåI+Êw™`gÿív Uo@«Ò©åÿSm!•ÇCD=!ÉȰöO†d?¿zñÂÙPÙ[Hœ[²Ê`óD˜ …óØXBÂrcEð\žôµHßw5¢7ärŸ'–Gp™±S÷&r w1*î3ý6 -.L;L8dæC Ÿ§Ô³ÑÄa6,ËJ]-*þG>JëÕÉÚŠúàìã:lÓ1QÚ­ÈÜTË€–=ÅóÆÔ<P8y¡‰k!Û+íÚ…¼ÌõHßmÆãX÷Ûžk¨Ò_EwÈ+wëá}} lñLÂsf²swÒŸþ+?!/K—Uö¡ ¸¬&qÐ}z[xÚ¯øàU­R|èÅ·8ªÂ[}ø!0‘­Ûª µ8Yü¾ØOß@ö—çñýn–Òm¶7¢ æTn~x®|óCi¬¸<C^ØN•¼j”cžÅ±ô3N4~Û‰@Pÿ9:ªö(/`çiFE¹ —C½#ô(*Ò£)Fñ?õRÖ’õQSH22j/R«–@¼&Šk¥ÞB?é‘¿¥&öß7[²Ck/6v5³üX0cËrúüç‰åÄB¯Ù ³{.sÎÜú1�¯í+äÆêÕª ¼¥žÿ‡Ù˲´-(üt?r6¿ü%0q“Ï{dÌ8jðöÖ:ô ¦û.âãS,M|×ÎóØ[s_laå˜3D¼‰œê›èŸ?ßÄ{Ùõâi¾è–û%¬)ò cSŠØ–cý°YYjÁ+hít,éY³øóñ¡ðÊá‡wøEâÖ©U.²4Ö·Æps£$¼Õ‡f0Ôü Ö·bSè¯ûkòÍø£¹ ;õ-°÷‹‡z·múhŒ1•Ûò‚C˹º³XÞmZ·¸¯‹E—ufÕ¬ÿÁÛêôRå=^¢ÿŸðô…“pÔ–‰‡éØn2Õ[Hý²xˆ¨'$ö ÉìçW/Sð´ÁéÛéœ=c‡ñð5 ¿\ ÄÆ ÐX〗¿Ã½sN¤Z„)ãg¼ó2t<äxç/õl$¸?Ì ý0ïLƒ.׈žQ±Ž~ô…xXæŸC?Á¥ö¼Èu "x`ýüë ¨ñ0¬G¿€ub £Ý§Çáýkž¸ÂÐ=¿ÀP÷;Ü¡xbyÒz»L¶À»×¡?q3ö´ÖI »CŒUâ÷ç‹.³—‘÷€ÉÎý\¯®µJÞ,|[>ÕeîЖ˜4Øbš0Ø,ÆÉEÀd‡_Åxøši”ÜÅe©‰œ¥”ËÁ¦âo¥·â–‹Ðçç¡ÔÄr×·Á1¦†‹�¿ÇŽÎ@\˜ÂxZQkqH&gû>šË³ƒï+T[HåðQSH22ìo'C²Ÿ_ÝÌÂ7üÿ Ý\ ½ÞSó]<“n€–†·ØØŒ9Ús[S·ÓlêïBsÓ­841<¸ÕdÃdØ@Ž?ôݼ8ƒmˇ±œÆ°õ® ?|-îl/à÷¡;Q^ßÃAZfþRÏF„÷ÃlÀë*$Ëʼ1Àûô¹§9ØŽÒïsãý1뺂ý/¯ÞF¹Òé#§¨Û¹]ìïÌk’á…Ó|¹(ŠÕ3 BêzÆŒ³ ßv0S»øFÚQ•}*%ýA2wŒU‘W KË8 4àÜñ¼µ/²ð¯äó À÷Ê¡%µJÞ,¼[>U†¹8e—wˆKëœ1àͪ.x°oß)Ô]¾ ó¹Ï‘¿¥*ÆÃ³Ö!»ôlÈAþ2ô{±Uò½&´Duug“N¾f…ãhâ%ÎNa¢¹nércÏB¢âBÊ<DüIÅsF’lE§“Ý¥ž¤™$?¿z‰ì-¤Ë:޶d\…gè8ueªÄÆÎbÂZw+®Ãå›Áôc3v§o@Nq)Рĵ*¦Œò„>CwP™õ†ø¹tdæíBþ®d¬}m)J{ŽdHöóDtøOå/õldx6¨0X–ž<l©¹/®¸"lœÁR¾ÁIøË(Ô î!¾WGœ/„§ìΆ«-”+h½ûw Ö±ÞÇUã—8ÝúX|‡Ìð îÅ@DcÀ4žõ>œÛƒ3ömiH/¹žzÏ�ÁƒÖC_Â~þqíô•àùm“c ý!éµ#ø/¿pݽÆozyx³4roùT?,GNÃ:4kéf¼Íbœ„q8›ª±C\Ò˜»@l¯à/ [¡®?lb™ì@ùÆø\ëï߸«Š0Ð4Æœí0לVwœ1×-ÓI̽­«••-Ò|«K¢ÞB*K<gD!I±)®: ¨„¸ð7e#ßð ìîà¢/ø0üÀŒqe„á)\ŒÝl™›+…ç°–½…µ,3Â+¸ÍGb¼Ùd©Põ¸$Ù„ÖC_ðA¡>8MyЉkaÇB[ˆ̱^Ôí+QìS~h¬q�÷á©l}ã'õl<p¥÷Ųöü`€Þü;Fýâ~9c3òÊ‚ƒCUÅùbFì‡ÿËõ+‰+ú«‰ç Jòâ$Ûk/”(ÍÛ=çÑ"ü…oÙ˜ßY¬Un$s7ÓÜ«ÿ GL7ѳ°îBë¹c(1¶¿÷+.šïbÞNòùPvåðÀÙþ#j=Ø,ˆj!Å o–FÞ-ŸêÃRwXª ¨"Â*ž·,~<o®ÄAIú¸xíß"WÜ<Ä&Ç꣖0CíÕÈb®éi™âßÌÇ®œ ¬Mö2"j0]‡¢˜Ý¿Ô[HåˆçäO;‚ýÝdHöó«6gïdMÁ¯ç`.ø:Fƒ.oábL䪭Nôµ}ìy·a_šVÆx÷b 8¬î¦ç°GWü¿±À„:w¼6–/0b”Þ¼¤kêÃ}x*g©g#½A…y.t£Þðj¯=÷WìkZnôrá¹ ¦8_Ì„ˆÄ'¬èŸ(Q\üCž9лÔEœÇ‚‚Œì÷»ù’²-}˜žàúll>Ð’zc�Ó`(ÍX<vÂʺR«ŒÂ3´W¾'NâA>s»ØÀ 'C<äTÜŒÙC é5$D´4^„M­Iš·ú¬d˜§AQ–xˆ?†“ú“¨:¼:Ò êáŒé䦢0ÐìC˜¶¬G®þ×zcê±ï@<72É3 § ¦¢ÍØh°Ç´ª·ÊÏÉŸvDÒ‹L’Ÿ_µ°P¯O¡c$Ä8Æ ìW+‘ý9¶P/ÃÅ^=ß@Vå Mý ëYæ‘Ô�Ûh,ýÚŸk›ñW¨.‡Çgk5²Òô±IìßbÛNnõÌÏ5=èn;Ò-…¨ùõžøu,•'Rê%@c¸Oå/õl$¸7¨\Àß„.ã=lÏÌB‘å!ú,‹[ñ¼QÓ‹Ôûß…¡¢8_¬È¢èŸ(oõ¥ådéØ6‰Ñ^t?RýM/ »Åó@ã§(:~2â³Í—S‡¸·#éµ#ø¯ìÌ:MØ¢Û}Ǔ׷XâFæA])ÄØQ¸W$qóuªˆ¹Aò1IsWŸ•„ÿ9ìMF” ¿ U¦›s–û˜PQhæ>jÞþh‘2«äRx‰±ñ(GÑ ÐeÁÕþÓê©¶ÊÏÉn(øÒŽHz‘Iòó«æ%R‚õ›³‹ÝXlGfškt[¡ï‰q#Í]¸Ø,¼âÉ+/†C…5…ÐÛ«°X4Í€õØZóÇÂæhi˜6Ç>¬]ô;ÂË›ØV÷H¬uj`3’ý<Á˜‚§«úßq¯Í_êÙˆð®÷ØóäÏ…+11º¿ezò?„iï÷p¤~™• ª8_ŒÈ¢èŸ(QoõÃÊA ú£MÞChº;¶æ,—õK9¤s·Ï¹{O»q÷.Þ]Œôóñ£ØÊ¸[8ؼ&´£“ã_êPª…ô xál(ެÎn@ÊR§É[}V>BRÂq*  câA³�; ×%ñImʰ¥ ¿²¯ï]FåÑå½<¿Àhî ¹ñc%¾ô¤ê.¤òÄsª§±ÖvÉìçW7³ð¹»Ñh8ŠÂü=(®¨Eóƒql´x óÃÓtùǾÞrœ<Œ¼mgsŸàiÁÍÙ8pýI”1ãÆ½ wnôçŠýÑP|cd¢§í”Ì5áå†ço½R�5õá=^›·Ô³‘Ƹq¹柺áfcÚûÍ?s$€çÇõ+œœ#˜¨é8j‚´‹ M-uÅùbDEÿD‘ãV?šXõ’Y¿”C:w¿@§é $ï_,—ª°sg.YZÐᑌ%éçãG±•CðÚ`ܶ†[w_/ØÝ7q¡45·_ß³ˆpÉNÃnÉøN¯±@à&Å5Ò—÷“ù[‚ƒú†c©ª7oõYáÈ﯒0à‚e÷úàD¸DÑíBÝc…CL„øý“ðØZ Uo!ÁЭÜ «ëì#4]´Çxc)W_’öî“!Ùϯ^<¸Ùxaï<îz\ eùÅ=Ø~ñ õA„›œc°ôOÅ` ˜Â°ã&þw²ñ¾þAtüçi®b¯i¬©ßñÚü¥žÈ„eï~ŽV×$„éG0ïÎ@ZÎÇ8V´/ެ@ 2;€«û#iè°¾¼}![=Ľ`§xNŠ)lJ-Ä1‘¬¢°½r’"Ñžk¨ªº²GKÃIl=‚ú¨Y¿”ƒõ¿×Ä  ËAu×kíö½dPlålÈ×Fx€°¢ÛV‡ÇQ毀u‘½ ¦»œZC;cÛœ¾í‘v"ñPn<| ,kejá­>|“Ü­¾ñþräßN”YLtœ…±c ÂÍXh‰ï†>!d ²ú§àS´þì Sqž[³w‡ŠÚQ`õO†d?¿z‘#…;(ó$”5ƒÑ{÷ð(™=®,ñ¾|Æ^';V’ý<!Âu¼v´Ô³7p×åMù&3öoQe˜ÁˆõÖ¯- dÂI‰ y,.@¶5x^·cSë=¸T1’F Yv¥jGcç‹%û\܆ë‘Å{'¢Xõ¤¸Ï:¬ŠÁJ:w¿XÆ3€}mBeõõoݤ׎࿠ð§¿GÇ`¤CEH  ‡wëb(Â7þ fót»Åíˆ0þÎ4©µéâ­>“üM¬ñþräßNv@èÄêO«~`PR4Tù´F~xšô¨ºt9d¿Œý^l-½ûp,YEíˆ(ÐE-Üh*-ÃsH2Qœµ5özÜ eÍ`´ó­¯7¶‚î^æ=ø(¶´T²Äûò{McM}¸×ö?Áí.àrC-ÔO™ÙDZ·úþêì7ƒÆË‰ËÅÄœ‘´Å¶ôaV5d`Wœ¨nö¡%ÃuìÈâ½ãiE­Å!=ºh­ÊAš +Ö^¯™Â ñl¼¨Ù‚š¯¼Ðdü …{.À<H??Ê­Þ><˜ {)ÓxÖû0L+:Ü[% ÃZ¶ ­l“óÍûž–‹âcûźƚîHNx«¯È“.ùxvL6ÿv‚pt`E4Tµ´Fb?À?áóSnßcˆÑ £¢vDµa…H„I ºÃ„…qܯÍdž=—እ;q'”5ï=óØ¡¿ܨг®«Æ%â¼Ë—'Þ—ÇØëdÇ µäá=^[ºƒÊ¬7ÄwŽÌ¼]Èß•ƒŒµï¡¢íIlëc*I;§ËªFûÐ\Vôú¯QÏÍ|cÎv˜kX&“øÃ•Dvʼnêf_†s¡Y$Zì±®ãAïhÆŒ´P£€7ÃrÄ3w C×Q’žÝæGb/ž#žÏGB¹•#bê‡(ÍÛ='CGþ­‹!°ý‚ú@Nha¤ eë7 €ÝBÆ•ZFx«·ÈuËb˜’‰÷—#ÿv‚ðt`A4T½´FâAççó°ü5(±6»¿ *kK ûRjIv"â@x†ŽSQV«×oBYÌp…'«Ÿ¾éùߢËàæçÝ*$K¼/Ÿ±×ìï'C²Ÿ'âüÛñ_°\¿Ô­©…ÙêˆÍkEq|pšò ÇnÇ‚7€�ÿX/êö•§4 æòøáNAhaBˆób{5²ØøOËD^~>våd`mÖq´æ#u‘E€]iTt³—Å{ÇÓ}ÍÍÑlVzñhاÊ>+Ù¹;éÏÿ•Ÿ¨©vã ¥³1´a] ÂnW÷êaýûO´Uçoñ¦ás5áàÁçjgðVn‘ã&vC7¯ s"ìgÅw˜p\¢ù·…§sßKR4Tµ´Fó·žá ”i[kcLW£¦vDb$»K1 Ÿçw\3Åy —`Ø)ÆXh’1_œïÒwÃØõ'ºb5Èï-öºNæ!¦ÉŽ%‹2²ï\Ã4%víB^æz¤ï6ãq` &,¼eÇëT¡ L‡xÎ`rlBµ>¬ f´e=rõ¿†xLcìA=öP,�»ÂxnÀÔì”\|x<¢µ"[q7{Y¼wüâF—Aí¹_¹•CŽÔx¶.†"nÚœGA:Ëý*Û=˜rÝÆYÖÉêmMyõy«Ï${í(–x]»ýaù·SO¹r¿ pݽ–pF‚ÄûÁ•oPsç·× 8+ö> Çü·ÕÔŽH ÖW%™ÃÓ¶ ðÓýÈÙü>òw”Àô ƹ)êÁ¹ Îa5ŒKl®œ3Ì}ù]ÆÝâÁë ¤¥í‹1Là)ZôÕ¸v!–…At¶ü¶za;UGTƒdÇÅä™'{9Õ7Ñ?ŸV’TqN°‹m; ¸µZ³ÝmçQº¥5¿Þ¿î‚¥òg^œð†ühQŽ|„zÎ /ÅÃbê{r°+ŽŠnö˜ 5ÿï·ð?j;—çL—µ]2$ýùà¿ò#צ^SâYîEJó/ oõá‘Yx>Ä“ð Uø½½±¹¥6¸M•(>s)dÃ} gŠs³pœŠð¤¬+GîWY2$‚_œöaºœÌ­¾ŠÚ ’ì"DDAè‡ygt¹FôŒŠ›V¿ úB <LƒâÐOpÅ6" e‰¿ëTëW©^‹™1 ; V8Ü1§àiÿ ;Ò‹b4È“eÁçl@QDWSæ‰xfn‰ØßN†d?OˆçÄ0ÝšyøÐªb-û°6¤¯F.ob[Ý#qwCDDƒÝX€†ë!nâ]h»P†-5ø•}}ï2*¶¨ä% ƒ�»ÒDt³w``4nö2ˆËó¦ËÀÆm2$ýùà¿ò#Ǧž ‡ä"ÿØx­m!–“‡‘·íl t`ù¼×âÆrp/$ÿS<Þÿ;6| ‹‹O÷î×D90ˆmãó¥x©‘!÷«’ –FŽ[}µ#$ÙEˆˆÓ}Ù˜öÚ%xÞàý-Žð/œ Å‘cãY8RYCŠ•ÈÅñ8ühnã(qÇŸ…ïÙS¼ˆÉ8áFSE.H4Aê¡/*†¾)V±*ftËÁ¦âoq9t®±\„>?/hmƒc,µÆÐdÇR²Ÿ'D˜nÎNñÈ.Á`ùÓ"7#E<hUMtâ´±ƒ‘‡ å]-Eàd}È\¥èv¡îqê÷o,­z«ÙŒFžÓª37ûÉ_‘C\ž7]Öß’!éÏÿ•O3*ÊMÒ…¶A¢"=šbÜÔGEñ|áÄêÝTíGFÎaÚ¬ƒ¥*c@$üê0b_Ù%…o£DÛCDidÉHòÜê«§‘É.BD4XÈR¶ÔÜG '3c@Æ[ÈÌx#öð€A!Å5¯×aV~Ò#K0æò†c)^Nß l×ÎÃÀ ¯qÇjz1Ð?6 ˜vœÃG†ßcÔhaÐ6œ:-Ž/É/ǰñ 4©3Î!I"Yľ1zW_âtëcqì1cÀg8`ü•ƒ´nLSæÌæF¾5eü#p<Ÿ ïíÄ·N±¦bíMø¶chîgTegaì3¢„•B”µ’V]x ­%Åá˜âÛ“A\ž7]†dçî¤?üW~¢nêË`H2žDù|áÄêa£÷îáÑ¢½Ÿ¸!ðM¥¶ùŸ¢»Þ}í/p2‚ß[K[ yŽnåÈý*CF‚ÄñV_ íˆIv"–€Í ? 7ÿŽQ¿x°ÏØŒ¼òŸàˆÙÀ8OÛœ¾í‘öû;Œ‡¯AmùkcW:² 㓜,äåˆ"S¬Üø¹¶…Îþl®Àæ4}ì‚§L¯à?OáDÊçÛÄ¡±¶Úш¦Œ¸æµÖž@iaòó2±!_+Ö»èµ|†½wð‡TD£õ'˜›Ñíö‰_O ¿³M7z1ÄÁE£&Òª«Ž)"ƒ¸<oº ìo%CÒŸþ+?7õ÷Ñ\‡Ò¤jùÂ…·¼¥üæQåŸT I±ƒä.è˜zñö,l*²` ï2ö¤ë Ë=‹J¯òt{(‹( »õK2#A‚híV_Øû!€mXo4‰cñZ’Öx]÷ÏH +¯à2ïç¹<zX˜À|JÁq8j«Åù6Á®hšâ˜Óßc,¨8ß&µ0ÔŽÆÎ¥q‹Uʆö4eØšþQñtZÆ…ò÷±ž‰µ–¢º¦W;+¾&GfXl»]¨h€Ox‰Çæ}HOËEñ±ýâa;Ö9D9´V]½pLño9pÃÒ�ÓÿºÇ'FÁ—.Ãâõ,þ’ ¢lêu¹ñ¹ûª’/<xË[ÊwU~àEHŠ¥ ÊÃÖ€5ø%úêÊq*³øNÓ§¨qÄš 08º=”!÷ëÜB!ÎjÅÛièV_Ø8!”@Ž ëLò d…fÞÅš…XÍycÀøoQŒ‡7®êð/ÉÑsåI4?umSs¾Mk) ªÞUh‰G¬RN4¢)ãû¶Î?à|2 ŸØž…Á À¹£[¬ï(ž8ÿ@Çû1j|È »�)¨G¿ø·…‘6”­ß€æmšM@M4V]½pL™Â(¿?¾¢ؼ£$ ~Át'd±KW*+[ð4Ö[ Õò…'�oyK9Ï£ÊJ IÅj µáó·ç6âdwô¨þ!tǼIN”¹›ôÿÔëQ{í!¼ûÚ†5\æä¥Q-ÞNŽÌÚCéEjÕ"džU–Œr"½íFdo© ˆ³ÎrñNæFèbNÃI3€=jÞ/jŽymSo¾Mk) ªˆmÎ…^LµÄ*V)/šð>ó?‡ýÆ0}]â™XŸS‚¯L?¢¥æ�>49Rp¹² ³P·Wëߢ­:78÷LÃçjÂÁƒ¼ì9O«®Z8&[5F!3Ú5DÔ ˜B]Q슬Ì]«ãøg¢ÿ´zîZað–·”ó<ªüÀ¾J IÅj0×ÕC‘ãö×†Ž Ã;ØÂ¸íMè2ÞÃöÌ,Y¢Ïò1Ò×¼‰Üš^¤2ã¶·úê-rd¦ˆÆž^»„›* ›-…Ò‹ÔªEŽ k (ÙŒr3O÷E|­ÿQ<¼0‘Ä\däU¢Ñ«§B$Ï€ßð«i?Öo4ÀÓQq¾Mk)@[ÅÑ’÷™Ç‚½å×1àüwjöâ­]ã“yØY\¯/ö¨ãê1¥{•íL¹nã,[¯ëmU¥NZcîIpL-„QÈÒs¿r¿=’g@OLE›±Ñ`Í5ƒkw­0xË[Ê}U^˜ÁÐÍ+è™Z¢Oú𨩠ö—ÑJŽP–?ødÂ_Bnšnà®Ë«ìä0åÏÅ!²´J{VÿC˜ö~G*ÏŸ2Üê«·PÈŸ™BðyÐ{ãŽç¿ÝšÂó°§ÖÇ %cÃ*CF ÇÕÕ¾¹ç\çÛ$ ±–<7`jv†Åÿ‰ÖŠ8ô®ˆ×DÌ& $½ÏÑÿhP%Í�«Ã JÁ˜ ª†c*FÁi¶:¥ç~‘òºÌ#¸Úc<çîZxË[ÊyU~`¸ÂÈm#)K¹>ÉjàDgË*X¥ý²~…çcjÅ_à¨uþÑ®”ßÊr«¯Z¼]´Ìñ2±Ç]° 'M<®Yœ’¯pþ¤WȰÊaÚtFÞpãŠÑ‚‡’ÃZyÕU›o‡ÆZ ˆv —ˆ-A¬pT ÇœG™0 ^³Õ)=÷+h øFsoÈbÍJœ/N îZ ð–·”ó<ªÜà‡§IªK—Cñ—Ñ ß‹­¥gC÷Mh±E9H.jpê3ü×sÎ7ݳ¸º?RÖÖ—·#•ÛùnõUŒ·óÀÙþ#jôzLÍè~<ÇÂ2…~ó^¤‰í¯Ë؉cµ×”ß…ÉqŒs8V•^¤ˆ$-#Oˆó­>ÏïœdHH4ÖR@D[Fc±%ˆ¤ðöÁñ$ü’nÏz†í1ÕCóqûËV§ôܯÜofÄ{[ L;›@j;M¹kãá7^…éÏè @L ¼Õ‡W¼À?á,ØÚcX"o/3�X¡ßW³sNlj‘2©ÿþ¨ùMÞæJx‘lz0Ì?,hj½Wªo5 ¢»$‘Ý{¨h{û|埀Û~ŽïGÁ#,]N ‹ó&ˆøá;…0„Žo›àœñÁÙx1  ñ–!!uÐXKLÄÖû’Û»*Æê©]ux® $ÿ(NÎëÊ ”æížìžàúll>ÐJ/]ëqûÚÊV§icÀü¦^‡´¬½øô“­Øœ÷!v]ÀƒXšr×r£©¤ÇN†^=N–~€mxÍix®ÁæÍGpÝ[TcrðV^ñÃós=šB Nbéû›³—P•žÁHë!¬]ó(ný'ø½ ìfX<À–æ°0 >ã¼¥0ÃF7Zx8l,â“a·ú|YÄ£ãÇóælÈ7 ÕîÖ¾á^˜$’öI|/c}è²QV¸‡ siXRz‘"ÂñÃ狱ðžB‹ÅÿÄz̧Œ¡BÜeHH4ÖR€{WÅ`žŒJ‰ÔÊÍ4Æœí0ל†ÞpÍÝ}ãÆ˜=އ¸:Káæ²L<ûdä`×"í¡Ý8héÃ,Æ€”_Üø_`à‰Œz.ZÊV'¢ôܯØo\fìÔ½‰\Ã]ŒŠÀ\J¦&2÷ÇöB5å®%nj 2‘³+|ðŠå ý³©7ðU^׈šâF`kí¢">ê ²o²Ï-r#Àzä”~‹‹úXã¼ç„ ;'Â6³ÐtÑ>³^+€,âÑašCsBŒ¦á6I.]YÀâ~‘² â<cé¢F¸bÙXsŸB+c€,øñbÑóû1Üûoô«žû,24Ö”G–½«b°ýм"µÊà…³¡8,[ÇȪ¸ Î/ËF{Ñý(•yœ%…ᘠåö|vðj°’¢ôܯØo¸`¬Ù½ÚnnB€×örc}¡\»k…3Œ{ÝýR7qUá­>¼".®W¾AÍßB NbqüÑXú™ÿ9ì×΢¼h/òß›7˜`uŽÌõñ?b›[¢%Äsþí€\qáeȼQ ³ÕaÅ'ùWp™ËQݪ¦ËnG~FyvÌ®XÓx2�'Ú͵bÝù‡f}”P‚Hêù"n¬Ëbè¼§ÐJÀ K†q¾m:ý/]ÒyßÖºâ oíÃ=2Žù€ÆšòȲwU ¹Dj•ExÞŒ¢ »ahµÃö|ÏñÀ|ŒrÎ/ˆ:Ñtw4¬–ËjµÂ‘ÝÀ»ÁJŠÒs¿r¿ýåï0dÍñÛôÈxçdè–Reƒkw­p<¸ÕdÃd؃Í>jÁEUBx«¯ˆ¯ñqxÿ{¶kça`›äš‹h]6`Ãç5Ô–‚}Ú14U¢øÌ¥ø¥K8SœƒìÒ‹°ó¶-U9,â!îkktâ‚¿ y™ë‘¾ÛŒÇÓñ¼Ôx‹lÞܰ¿›X`²õw1㟆î 2ë ñséÈÌÛ…ü]9ÈX§î@ ¡ŠBnÀ3Q\Ó2'ˆå'=ò·”ÂÄþû†cËö+qŽã6…V"Æ�‘¤3$,a|](ë‘[ÝÆÕÆÕ‹P9ö®Š1ƒ¡[-¸;vQÁ™¡ßövÄå¤ð#.ÇùeY´é%³Z­pd6ðo°’¢ôܯào7 ž.üðµfÛ øíddìDyãý˜óŠòí®ޏ©‰”û˜)²«’Ï™·úð‹àí…©`£Ø6éÈ*<ŒOr²—ÿ!ŠL½ äÀ…ÏÓ‹¦JWãlÕ×1† Dr[÷þ÷رácX\J¦ôàfã2‡Õ”n6’‹5œ}\‡m⼑S}ýó  Û>º (+,@Añg¨i¾˜¿bç)ºÜÓèX¸õež½¨ÛWž€î€ò°y…P‚)xÚÎàôm´ÏÎØa<| ,[·öIÐ4~x®œEÝ}—T+ÆÓ‡Öò0ÙŸˆÿ킳Ո­aí¯"4ÖRAò{WåXˆő¡àúW·cdaÝckØC\-ߎ¸Ø»s~Y5­úÔGÍjÅ Jåé—ÙÀ¿ÁJ ãJÂõÊ·»V8n4UTá‚D™²ú¢bè›ìNùèå­>¼Â\»÷@§Ëƒ¡gXìSó›Òq8j«ãpí^Œà{ŠžZc\¢o‚/ÔCᜫø;J/)ì ÍpVR²ÙHÞu+|Þ˜GùI^Ž[›—pÔìx½@¨îÀ &ÇøqafïˆPf¤ë7ÔKŒ9ÍkЍe ˆ¢ÊÎŒq Y ¦1ÒqÙí5h¬)0æÀ ¶_jº 7äó>Fgóϸa ÿR æA-2O„â:^Wˆõó!y™sér³¿BO¸.’*p~Y¦©´êRËÓ/·g�÷+)JÏýÊýv9b^¸v× Ç‹þá°: ˜vœÃG†ßUجñV^™„Ýð.Öì0Ãh¬ùMéøoÑ’Ù†nµÂ6µD/dõ =±»‡Ëê¡n4UéqiasÁJ=ô ôÜ!ß»¡øfC×­i'êvnßÝxðâÆÄ|¹(RÔ3@Ž[›xíßbÛNnõÌÇ1÷ »í<J·¢æ×{â×]°TžàÆK€=¡<é”"‘Ô‚2ÂD_ÛD^ƒ©ÝG6›sF›PBž«‹ +ÊÞý­®IÓ`Þ´œq¬h±DS!«€0 w÷O0”!¿ 5-xÀ²pÁ{žúßÕ¿,ó´¢Öâz-¹h­Êá'­zªóô+¡ÀµÁJŠÒs¿r¿]–˜žÝµÂqãçÚfü:x=.üÙ\ÍiúŽå„·úðŠ¸¸ÚÈÞRHË3g ÈÅ;™ƒÊÛÑ&…%~¡%æºr ËÝp´'ŹÈåqÝçÑû¸jü§[cšMúæÏpÀø«Âñ¿rÜÚLã©eÖFêK’ò&¶Õ=Z”I X}%ÃHÇÖÐnÔ¾Bíµ‡âºÉ¾¶¡åF/†  ÒfV¢Íá÷ÀÖùˆ«½5å™±‹‚À4ƒë1¬_[(®¿>N܇Å5æçó°ü5²¯óÀíüUY[’ËX#'¾gp¿XÜRÂðÜퟻÜS~ö<‰v~â(­zÊóôËn áÚ`%Eé¹_Ac€†c^"Ú-ÎÈRerá­><3O÷E|­ÿ¶Q¦T‹Œ¼J4:Æ—è§¡¿Ë¸TµòO¢a¡¿ÿˆs¥[ãÿKÔCAÜøÙÔŠÍ…Ç3ˆ¾ÖÏRn8’ÏuKÇ2ÝÚLtâ´±ƒ’÷^žq#ÇæB dذÎ>Bݶ7¡ËxÛ3³Pdyˆ>ËÇH_ó&rkz¡…äUË2Ú‰o˜™q¢ñÛNÄvwëÇóæqÎ6 Õî¦Æš…o¸æ•\js0h¬)Ïìã‹Ø[} ÷ÝDuö›A·ñÔiÎ,M´KˆR!§¶ÿ×_E·$S‡ wëá}} lŽ'©IG•È—eÎÖjdñpY1­z/ s”V=Õyú}¸Û›äÙq¨Ͷ¥Œ)üflPzîWî·k8æ%1ܸb¨Ã¿$ƒ·æÊ“h~ª¤ø[4x«¯$šß?Tðä,Î/?ÙòŒX=õPƒh†£õØZóGŠCJäp݇*)c亵à_*Nœ3XûJ ƒ‘næ>jÞΟ››XøÌÇßÀÆ6:þ‡0íýít³èÌß±ƒ…x‚ß^6¿Z<gK´9øƒÆZ ÉF£ËªFûÐ\Vôú¯Qo{¡òaL\c"¥B¶÷a˜§”ÛQ=ƒç‹i¹_ÂêQk/ÊÓž',­ú¤&gµòôu¡µw“ZÛÂVƒeû%+|fl`uSå~»b^d%Ò-Ž8Vúëð~Q3ž§¼gñV^‰fiK̇p¦�ÕÝ¡.QÁL�k3ãØX&â¡ n\Ñ›pg!F•Ã10_zE¹HÒuK½”12ÝÚ°´iõFèk“ G2wå–6؇ø4â±g$”@Ž «CÖ¯p"°¹™Å„õ µÁ?Ú}îé•.–1€…e•£º#TŽyýŒòì"…ò‡ÆZªðÃ;üBåÛëHTÈá*øÜáù†ºßáÝÿ‹åIëqì2Ùÿív^‡þÄM ©ò,‘ö<6Ø ©³çÑ$j]ºˆxšP”w'™Ðv”r²4EwðAB=Ö/U!oCô ¯Ã:/Ÿ+Evv—ÞëJÏý øy‘—H7ñ¿áWÓ~¬ßh€=åF>ÞêÃ+âN†üþÂh'ª³ßAÞáãâDôÊ?Ù† éõpr¿ºLaØqÿ›‡¸b„GÕK#Ç­Í×í‚N—œíYØTdÁ@ßeìI×A—{8ìKJ/R«Œt³¸º?’È“ëËÛ¡ÎJ,´ÜvܾZîÓë05^G§Ã“ØF<!c€ˆÏº‚ÍÈÈù�ùù»—™.¶ËÈÖ/“fUEh¬šÀÛÇ“ÅÆëg¾í`IQÅ=ÆH;ª²O©d|…ñ±ùÔ½D"¨š§?¦þ4ä‡B´,^kƒ„2‚Žòíä +ŠÅ¼ˆ“ÈÓ›0ÝŒyÉOQnqtÙ8pµ©—¤à­>¼"_~A\�o×éQZX€ü‚T]¸ƒþ˜SFªÃáÞ£_ÉC OqÅQ'ùØ]·ÔKíÖ†~°u\G£É½ñg8¢ö –Z0[‹ÔKôÕ•ãT +ÂK8MŸ¢ÆÁ_ö~%`V/þÛó;®±~£?šúVØ<qlb,»·£ÔôSˆ±Ó‚¦Ö{p)š®4ÌÈØSéÖ@èÏâ1¾› ôhvÆé •¨1@Dð¹ÐÝh@™8g†šæûMµ4h¬+‚Àž# é%×Uò ’EÕ<ýž0YCoïç5¶^ÿUa¼¦ŸÃŒ!Ì:À®ê.‰áWðÚQ»#Kïu¥ç~Å~»0ô¡ÞÔ(_®Vá%<½7qáx6é"X|TÇ+F JÜ¢Ôùâ­>Z¡#ö•Å—ß_ð Âví< ì¶«æ"ZmƒqÜt1…SÐÿÒb<c¥uÅAßÚ‡[¡Üò<ÅË"<ÊYÊaök¡//F~NtéK™„¡6|~âö\®ã +޵bÂ?„nÅ…$ƒ(J1ïƒó(H×aMÚ~º9›ßGþŽ˜Äz`fðn´¨ë,ÀçlÀ¾­…8Ùp 6§ ÏÆ^_ ¾1<s;ak½€ã»Q9¯è ÕŠQkÄÊ` ÛosapDdBҞƿŸTUóô/ÒTXl `gƱñ%½„atUo漃¨baåû‘›±kÒ Qç\}û,å~»,¹ZYçêC—ň’œõbcèÄßq�†ó§¡¿Â›1@¬«¾dnqd…·ú¬lo/LÅ>šŽ¬ÂÃø$' yù¢ÈÔcj*¿¸§].UázäV·)ÅQ\±\£J#e ®«‡Ââð‚eýgè˜àH$*«¡�B?Ì;Ó Ë5¢‡õÝùÃ.ËNqè'¸44‘ ¿Áx´>6ãªÿþ׬Çx$OȰÄ|«¸`kâ°ú Ã{Z<iÊ <C{å{б3Oævä瀜 qo™Šxü˜QñÒE˜&´" þÌrm%L ÿv=ô¥â>1Š«.àvÿ—g$¥ç~Å~»¹ZgûðAškt›wì,®Í[Æ–³ø¨‚·8rÂ[}V2LŒjtº<z†Å¾=?1‹‡ØêŨÄÍ镳¨»ï ñä`¥­å`²?ÿ›¥¾1âD«GÞ÷ÇS\±£2è$Æ ÆmsnØÝnL³1Øß…æ¦[qlÔ¦ñÔò ²yzC¼#šZÑéd}‹?耢3v6¦a‡y`®/Ïv½¿iLüOÀô'þŠùP€ÿÙ¿q'ÖÕ ¦”C+&ÕÐXK\§ÅÓž¦Œ¦ð»pÍtLÕ@Mf&lÑm‡¾ãÉko�ÿÔ•â€êé-CPëÒÅs æn>9OcÀ” 櫼]'ŽÒs¿b¿]ž\­sBC7.T¡°à0Œ–.8™æ�Æ�ÞnqVЭÿ°Ô‚ïbÍ3ÜvŸ˜†Äcuíž…÷áC<Ytñ냳ñ:FÙFz#'-w<OqÅÑ4â•Aw 1˜WEÞ­¸—oÓÍØ¾9Å¥(*Ç¡7Æ[}ÿ :[þÀ¨¤¢bŸ:U0¨òk[B XF‘<l©¹?§ñÂæðŒ·™ñFp= üƘÁè½{x´ä´2 GÍ—a·<r#ŸVL*¡±–¢®óEÍ´xZÑ”a™‘`Ðk p3ñ0aE™…ÏÓ+ž3Ž#Ó:¬ÉÕ»H9f5x{a?ùšÐËTarãÜx ¤qŒÌ{$ óœødæí ~]9™(à.œ<qØÜ£$Êýv¹sµúGñ¸ËcÙ>úåMœ½dÞnqVÌ­’—e»Ù[já˜f­ÍŒ¹x's#t2ºœÎ>®Ã6Ý&”Èí ŒÀ^³ëÿÇYt¹ÅÃ&sêlA“Ùäõ4£¢Ü„Ë!† KƒEEz4)š2†…ŽÌi/Ïa-{ k áò¿Š#wù\luÛ”H6 sE—uf•cGFF"Ö•M›6á¿ÿû¿ƒ?I$ s þÁ�½ùwŒúÅ9=c3òÊZB€2FT»c7òŸ£ôÜã¤4œD~z‘ÂÆ€H$¦“JØ#†ó´xZД™Û«¬CFÎVdn*eÀËžX£ÛšœÄcÏŸ)JrçMÓrQb8‹“úÕ‚×ã¶=0ܺûzÔ}JóPPs+ðõ=Ë8Ê“—@*Yd X\ÈÊýö@j‘ɰ\­ÓxÖû0É t>×/fàíg%Þ*)\BRÌ~_ë„m”µ}.2ò*Ñè1$ƒÅv>ŠQƒ †Åƒë.T´ˆ‡Ì—xlÞ‡tqa,>¶ú»HéÒ½H&¢ê”Á hZSæÂyÕV'úÚ¾@¶.è‰àëCÓÁJ4?åpà 9ØTü­Ô˜a¹}~^Ð{£ Ž1u+ÿëý/‰`¾°º¼Âà ØÆ€ËgQšõ†ØÖaSQƒR²¦6Æ…á:-ž64e7Û[ëÐ/˜î»ˆOÝ÷Rb»9Ïc¯¸'UÝÔ6ÛóÄv['îÓ>Eíµßá ¤ÿÁä˜BBÍq <µ`÷Úï8¬è¶Õá12Bʳ(L &ÊývÏ”äÅÉ@áùr¥y»Qã˜{û\?ÍZà‘¬ù,ÖýŽ8ƒvÏKxÝÁ°ÒOc¬¿6û�ÆxuQê'Qx«—ˆ›S IÉ ó")¨nqXŽ´¡lý˜ûà`.øZ{^$u<[ñ”1¯…$ß@Vå Mý ëÙÓâÜ×�[ Ôc9Ä “§ §N‹Ÿ•Ls“°¿@óý1’w�yp W7`‘Ãß�Z+˜`ÖFä;9Éâ 6Î…jGcg¸÷jˆæŒªiñ¢iÊÜÀ]—W¾‹‡d<°~þupÿ4 ëÑ/`˜Âh÷)ä*¼dž¸Îzݰ߸€ã…á€Ñ‚.ç|Æ�à:NŽÁ=L¤2ìå ®aø§àSzþ~ÞŽæß—óœù¿Ñ|}0øE¢ýBž9Ð;ÄG +=÷+h ˆæÆ±-}˜f L´È«úµ'K° £dWáÒ÷…¯•^pž[7>Bkð"$)†•áÇpï¿Ñ¯ä-s{õ°þý'Úªsƒ¡ Óð¹špðà5<çf‡#Ñb>u¹ñe$H¿ÃÉ,Òþ§èúÏS8Á¹Zt¸w�;gp~Ø”ÝE-3 éÞCysŒžOþ ¸íwpµ®fî¢Á`Bcë¿àH:[ŽXßì lœ U3`^sFå´x5eøê·³®+Ø1Ôím”w¼þ/Lcìq,Æ£(,,Fay³êaì ú``2̃BÏjåñÛŒ(b—IÁ¯ÁÓ„¢¼Ãa—ÍÒr²4EK… D¼°––“¥`Û¼wµÊ°ñ£$ÊýöÑ^t?J@ìj¨…ë¡udB¶®)Äå?,Ø¿SëöÇ(ª·q´Qá<–qãÁ­&&Ã*5û¨uMŽoõá^„¤˜Qâô¿t½Ž ”Ô}kn¥6ïÌ'˜yBÜW¶{0庳lB¬·…m:4�‹ù4Ý‘¶cW*+[ð”ûGí¨E‡zW�¯ð|&Î;N ʲހ.ó0Ì1…T±p¬ó( ¤?hˆE÷ ô×’8¨ñ+ÔÉ`ÏH(Œçg”a^¸¸ ó™de—¡^QÍ™dà«ßÜܳKaZhCV® µóO s¼Bú8È&¸gu ñ=DCQ¤,Tl~eæž áY¢ìBKò—4,¯;(-èç ƒ=“’(¼²LcÌÙsÍiè çÑÜÝ·¼‹?{Éiú€k²ß¦GÚšBXl—Q=/„ǘì@ÕW<¸…â†%?-¬3²¢S)FŸ·úpŽÎöQ#Nº“—ÏÆîx…¤$¿£ÝGãè£~±ëG WX(ë‘[ݦ -;4¼À°—¯Q•5¦Ð_W„"îw´¢=Ǽw�y(8&=ݨ7|…ÚkáØ×6´$,ìÉÓ ˜x¨·~‰Ü´µHÏÿ]aÊì‹A .2|yál8ˆ­»¿DC› N÷?[ØlÎÂ7öÜδ^8Ž‚'ж¤Ú;ÿB‘`u#Æ÷ îÒuPðÚQ»#{,bOS­ô[q|wÞZ—’[ã˜{n•™¨Õe<«SȌ݀›ŠQs9ÔàcÁOú=ØciÂXÓÃÆ‹Ø>•w z € OࣥŒ‰^X«ßJ¢àog wq˜ÐÉȪ¸¹ôafæ>j²?GǤ88™1àÍjt{0í;€¯ë~‚ÅüŽçï@w®Fn4Uéq)dPX,õÐ|€Òúß1œòË[}8&’…S÷*ڞľh%ý;üð\9‹ºû®°¸°>´–€ÉþdÎ+¦ÕˆrgXiDò èiƒ©h36ìa®wü¡µèy˜w�y(D dîMè2ÞÃöÌ,Y¢Ïò1Ò×¼‰Üš^$³QõÌÿö@¦!òw]Ãæ¼A<4+’l3˜èùGè!Œ@Ü;ŒÚ`ú¢ Ù]"¡ ¡ÎpغB¤éEÖÕËßàÀîc¨ £ pBh¤ßªyk έ² …ƒªÿ ÚNÕàvXLýŒý,7? ~¥ —ÑžðÛ (\.›€ð[ LæyQƒúÖ«Û/—@é¹_±ß.<oFцÝ0´ÚáÞ6 ¾çx`>†ƒKÞÎùà²T£Ú:ˆëQ¬{»ŽæNxU;6A—Æñ÷«vh9¼è{.ÓŽsØ“jEö�¼Õ‡WüxÞ\‚ ù´ÚÝÁ̳ð ÷Â| Vx9~Ç,¼âÉ«pï‚§p4^@GÀÂ>‘ŽÈæB€‡c˜wQøD,ºÌ#¸Ú¯äÍú ÆmÍYS·[|[â¼Õß…æ¦[qÄûkC-šHÌ0þvþ\ªÊi'ê>þ6&`æÓÞïÅu1øsËr°Q}Ã3 Oë ,ºñ -,gtøïÃÇ@™T¦ð¬çÿZâPÄnùê ‡Í„Ò$x‘•¢÷[[õ§ø/Nú­ª·Æ± ÛܪChº;Ö>!"–¼ ø0ìˆÓû[FZQò¡®¨ê\æ”´þü: éïuHËÚ‹O?ÙŠÍybGÑ.5锞ûûí~ÛWØpu•"¸Í(Xî0#¾$‡å$Š‹ŽGHÍæƒsápÄnü\ÛŒ¿$7ì&·YÁ°‡ÔÂ[}xÅ ›þÐÜ¢ a:ŽÜðrü‘e¼ ær÷n'8ò XÏ/0š{Cú=+¡)N•bÖ ¼[q.ß ¦›±;}rŠKQT`D7–˜FÔ¢‰àÇõ+œˆ–±¾õŽZ‡àí‚>÷tŒs¸ø;ÚÅ9ŸlÒ2‘'¶wåd`mÖñeÜèÕDÀTw®F5øã^wÿÒ>ÓâfÿÈ•% æRÊvŒL-ñ{øÛ|+½!$ÄÞ—ðEVêüþ°~Ë™ÖE´[cÛiüÏÿZBá=eÈ1·*H” ×"–< ¢ÑLø u[ßEY«;ÂY’Ì®£lÓN˜œÑǃà2c§îMäîbT¬ïœ' Ó™ÕפcÞ–‡^(¬}C¿~òäIð'åA9Ï�×ø¸º# Bl챇¸Z¾ÄÚÐË¥xáŠh1úë±µæ8òÕËoõáfA,GuÇóI…ݤýŒòì"qq}üÞRÈñ;bð.`ªò1ªmËÍì#4]´óÛo†:Ñl c 3ðÏ„7R*æ æÂydÎ($<‡µì-¬-h„Ëÿ*>£PDµhbÕ1;€«û#¹Úê°¾¼1ÉÀÎ>„iËzäê ñç¦õØw@åL!Lc¥£)è¢i„Ér½óÙ�füˆ¾Ÿt£©¬çÂn_—ËhÐ =ß²„1À/î·—Óha…§Í7RARYŠ£!­‹ë07šrÌ­JâiFE¹I Ò GQ‘MœˆXªk4››è�ÒuÙ(®ùúç.}úù Š3ßÀÚÌp-qÿð^Y³f÷œ¾Ôœ1`�^qüó‘þrqƦù²uëÖàOȇ‚+‹κB¬ŸÁÈË ä8Öe…ž‰oõ5a›Ç+zîô„Ä)‹Åþˆ)7$¥ðVŽñ9PW°9 ?ò2ÓÅ>ö²õw1k[%ý;dò.HˆŒXa}ıR)yóÈ u®-JÏ,ÀT[èkûÙºàßcñÙc !ˆ ‚ –ÝÛƒqÀ¯7…M­]pÇx«p‡ýhaó€0�sÁ×s7`ÂKŒÇb°” vssúÿ±xŒ²xb ô þhD¢.Ÿ+ó‚н¢†‡ˆ~/䇧IªK—C>ÏŒ{±µôlÈ&¼ -)ȳ6"”E–‹,Å Í�Yˆ:·Þƒ‹ñˆ"È“pÔ–ÁÀI60ÕfÂ?è:õa0å¼´èbñ|{ù; Ù;ç²3ˆ0ºŒwÞAÆü¾-ð]u ÍØZþõ¯B>”]Y„I¸»‚¡¬ùŨ¨iÁƒÑ826j)Å‹ð õÄ úºÝâD˜@g šÔR'å­>œ#ø\èn4 ¬°�ÅŸ¡¦ù~Àu(’ûrx$ˆÐóï£ôÜ! cPlRò½°sz õ\CUÕ…¹z^ªBÞ†è^oôÙ!!;ó†àí…‰åLgîr•w04õ7¬gY¬vÃ"ee‚XvhîF‹-Ì;Îoé"æqCOÆ`7`§á:zŒÂ]h»P†-5ø•}}ï2*¶¤ÎKÀ׋šÜ7¡ÛT€ãç,°v÷ˆuêA·Õ‚sÇ °I·ZŸ.1N#… ÌÂçºŽŠ¬7°&}7Œ]O—ÙŒ x90€ÂÿÈô}Ôî1ÄÒ“zØFP.²ƒÍ ük]p¯€§h©ªÀ…°¹•›ÔÛžVÔZÁÇ`qßGsy6Ò8¹µæÂh�¼‚šŠâ€ ÛwŸ1w¢?&ƒK]øákñŒ)ö¿Øg32v¢¼ñ¾:Þ·Q÷PÂ+€¡ÜÊ"‡�×)^†µl*Zà;ècó>¤§å¢øØ~¨"ØÇ[}´†€)[+nɶ¸ÆÐ÷åðPHñp¡ßY‡~Éß`©Y>ÃÆ’ëa›N ™+fìߢ`‘Åzâ"¥¬Åw^Ò‹áaïë[ø½½Éþ]qáòMq± RE¤˜Ìùò²Ê`›w«Fà,JNþТۅºÇ©Ð`ñ¹G±nÓg°E2p²C}JÞ=='èSêùé:è²*Ñüx"†±æ‡ççz4„l¶Yéû›³¹ËÚ1{WD Hö"K1¢h]ðƧ¦Ò|Lpžz;š§£.úžÑ੊F³¡.´öFO,`ÆÖ¶x“çŠû¬§7aº©^ÒÝp½”ð `(·²Èæâ¢„ÌUŠ—0fì0ÔTÂHÊÖo@‹ uÇL%¼Õ‡c„á»8[ün`"“öÕ˜³V̵±.ìóáeù¾/‡‡B܃hfnìOCÅ<è6`çã²!ff?`Wu—Ä€2gDLWتÎ\"ÿØÐëYt°œ<Œ¼mgᘠxZp@<l¸þ$Îù‹3(Byؾ1Å5’Û5ËOzäo)…‰ý÷ Æ–ìHâá»ã,ŒÒC Mss~;—¼9òŠ?s�5ŽŽ6Â8œ–O‘¥{™%f8bvñÇjDÍ�Ò¶Ör¨I4«#¡0\+¹Gë·bá)Œé}uü¦À“Þ—M¥e8c 2Qœµ•ÔÛ‘Ò#w5 ²²OS2OLjZF3OŠòãdè>+¬œ,ÍGÑr©ça½7q!à™–†üX?—"æ½”ò `(h qÛ/ 'Q°õH®º*ªUÆ Ë[ºWëߢ­:ºÀÄ<¸å8xP¡&ÞêÃ-/á¨Ùе¹å¸ƒÚÔ‰þ˜˜‹²%±¦ñÆŸÎYü;Ã-ª)±ø ð»,(Úô. ËÙAö8çm‚nÍFÔ9–ˆ»åa]ÕÛ°)ï ªØ¢P¾¹ë°&½uN%oüØFmгc>MÚ|9KÿT Æ�¢˜°›$½åh” wD¸Û–,Þ«)xÚÎàôí°ì!3=¨þŸM ~¹,5Õ‚i£ä/sóÎÆQùò·óþ'°VoGš8Oå;Ãö~¼p?[bîÿÆ•oPsç7é†Ûñ7F9Í3Í`s�¡0\kU‰ý¶©Åg.÷¬\™âqÿq‘Ÿ0>îõ¾&1è SÆq¿6ö\^Rx.%DÔ ˜B]ŠÔÌh*Ô‘|bÒˆZîPÏÂúÐe1¢$‡yÏé–s�†ó§¡¿Â—1`Þ;@)¯�†r+KTŒÃ1»¹h!ÅËkfà}p>àªÈÒÁU¶{0庳ÌJUoSAœ·úð ;ÈïÃNóÀâþ´¤¢u(QÄÿ&;P¾±­a®r‘a`5-þâÄ8ôšŒGQ(^ Š«aºáä*v*.˜FÆízèK‹ÄƒøW]ÀíþX܇“a£÷îáQR¯Je¨eÒ[.Û¬*å±Ç¥?ì]Ç£À>ïéF½á+Ô^cÂ|ìkZTÓŽ™ÁHëç8b~‰1tWESG|†Ñ߃ÚQPۉNj<za6þ²D6ñwŒcRcGBa¸VràÄ I%ĽÞýï±cÃǰ¸RêZÒûšGx†ŽSQVß«þ¾'’g@OLE›±Ñ`߸JÄtOÁÇs&kh?bûg©y.;@ôCýl>Hcç£MÈ;v׿/YR.¨Ë zDÀp µ*'fW]¾S¼„3އާxå}á á‚!<s 7¦Ã ÜðV^7…#ÿ‚~ÿt¹Búªç)ú,?àJLa,-`%6»Bú¤¸@Û¿E®î]ìËÄ6`‡( Xü5Á<Ý 0è¿Ç5' '¿¶ÝÄ {¨8£Ì`´ó­L§#ø-Á w/[Ìa8æÃ›ZQ1¤·\¶('ëAÌ!ƒf�óÛö&tïa{fŠ,Åyíc¤¯y¹5½êxý¼üÆ£—#3˜Û©õKä¼k‚3Úíœð­•{#ô¯²+K¥Ô¦ {÷„Âh@É]ŠCFì+»„<(á34¥÷Å!QݺÌ#¸Ú¯¢2'BÍðO`l2´¯Ço `Ÿñºí¸q¡ …‡a´°,=>d ™h¤´Pã„ÊwŠ—pÜh*)ı“!·ab9Yú¶ÕÜÇ4Ë‹yý6o>‚ëžTÑðV^aéàvEN‡f�üý°e!«ðNêO¢êðdètH/¨‡3&Ÿnµ-þâ¡Ïó;®™Œb?9šúÖåœ2û¸ÛtëÄéVdn*eÀËžX£ÛšJ‡ 0ïŽÿÀý Û²¸à¸:`Ü!Ö#Ö¾$Â<  »ê'Šé-åðŽ È¡H-˜?÷N§¨ûø›9a>ÿC˜ö~GJÞ“¸n»ðdá Â ^wpö›6¸¦C*?ý7ÚNÄîârqM6ûÆ8ºÍ·–00ã«ö<XغD(Œ”ܵˆ0ÔŽSûÊùÓûâÏ/0š{¥}0eº.KÀ…Ps8SvÞ„aÇl*¹€n—WüÛ¦ºõØkì¿»,0–íCá¡OPÞÄW˜@*PÐÐ}ÍÍtF¬ôâ³¼dyxNñŽ–‚Läì »¡`å ý³©7ðU~ž·àhåeÜ“ôÕtwöâÙR“¯àÅ“¯7þç°7âù%¨2Ý„3)K}ª,þ!!%i[Pøé~äl~ùâÖ¤Á…{ÆQƒ··²ì¦û.âãS÷ÀÌ~çyì­¹/>­R0cÀaž¬B~úZ¤ç‹®@®[vÈ.Ý´«~¢È‘ÞrC·Zpw2ìî‡7µkMM3Àãák1jˆsˆõ+œlΘ’ÿ8j÷>]ÐçžN‘,‹5�¿?ɱÈ.œè°˜``yƒ –Ûâ:ó/`Æ?#m7 ¬NÚó`!c@ ˆv‘Å•’;±¢áJç%2ê 5‡3 ߨó Á䆽Sðy佄�Y6›_¸Ê&*”[Y¹q$·)^‰”ûXMx«Ï¼ÂøXø-ørêíL¥û3¬_{­¼(ø&ŠÐóÎ4èrèac‹¥,´ÀÃrnú .¾×¤ÅX?ÿ:¨³0 ëÑ/`˜Âh÷)ä*M xèñ{:aÌßÌyþ'ºb6È᪟I§·dm µkMàÁÍÆ.Œ„iÄ• {v�W÷‡–E‡õåíHÓsdc@rLÁÓþv0fسé²>…%´Úô`aÏG(ŒV”܉$`sëâ5-®¹uµ“j¡fÿ <a·þË1‰þŽ´vØà^Æ£–e°µÀd`ža5¨oýwИ¼úÐæÊ2Õ‹æ[<Znæn*Ú͵bÇ2ÂÔ|ÇÔ4\ðVIT½}CÍG±Ï2ýp)‰?tãʪÀ'JÀ9 ;æEçÞßRx{(³®+Øñ}¾òŽÁŸR‚°Cÿ)ºŒ»‘.¦ÓÒöÅh ÃU?9’Ko)¶A“U—BR6-dÖ í‹ø!¶à‚e÷ö ðäüû° ©•ÅG.³Q’ ¹âœýà,ruë°)ÿsœ³´¡;phë‚Õò=Žç¿Ýú2´.i8›Á˜£m®-ºÝâèš·¿ ÍM·`JU»Ä{ÿ„Âðªä@ͬC+ æVBœŠS(Ôì± PÎËaL{Åý™iY{ñé'[±9ïCì(ºÀöF á{ež£çl ²˜â£dÀò—2°A‰p¨ÔeG[ÀU8ÕðV^I\½]xÞŠ£»K£ç: ‰?‹cÛê?»ã„ØyØÐ’aÆ€Œ·™ñ†&Fá©»³ƒ1Õ å Zïþ­°J0;ô”`‡Á:'DøÞü fQŒÆ�9\õEަ€—ø'¼™—Éz¼$;räÂfñùÝh±½öÇ qe$H¹ð–nƦò¶È„I¸šJñ®ž…Eƒ…LTàÝŠëpùf0ýØŒÝéS\Š¢#·ý”­á„Âðªä€% x^ µ£±3lÎIUÚ¹˜cn%RŠÌÆ�ÁeÆNqOžk¸¸ì˜taÚaÂ!î4锇ë•%û»vÊ/Ho5,–«èèE¡=…ƒh.ÊF¾áØÝsVðaøÔÈëÏ[}¸…m–UoŸ…Ï݉z}Y ßâØSV‚ñ§£¿¡öÀÔö„/Ë!ÖÏ7%ÛÿStÿ`€Þü»81ÚaÈØŒ¼òŸàФ…T<€wÞZ,@柂OÑÃø®†ÁÖþNUüçŒD5ÑjscôÙS¼ˆõo'íªŸ(rl4ÅßñóyXþ >òÀíüUY[RâÙ°r#¶  ’Ffc�ódÊøhiÃØ«?`Øqv Df>2ç#<‡µì-¬-`Æ‘W)óÀ‰–_:tïÃÞ[è×ìÿ2ë’{�q,i!ëP4Ý…T¤‹ 9æVáÞ˜¢2fìl\³f÷œМ1`�^ÛW ‡“ò ׯ€€åf§îE}þ”ÜhÄ»MÝÉDË‚_Ï# À\ðuê]­y«ç$/f¥ËiÈÅìŠÉ& ¿Íˆ"sŸ¢“¼àí æ?OGVáa|’“…¼üQdŠ/wqr®ú‰"ÇF3šAA‡´­µ«w##ñæÂ–##AÒÈl x.é—YÃܰ–ø–E檭Nôµ}l]ðâëCÓÁhsÄÁÖ­[#Œ§5ï À«’{�µ³ňçg”a^˜s.Ã|¦Y©H;—(ñέJ½1Ed6°·†ì¨qÌ],ûmzd¼ó2æ×‚ÀwÕ‚¥†÷,ò"V25<ß>gþçèÒ±«_:1÷5£æ gaL„íãSè ‰5óÀyµÙ˜S/ÂÆ[}¸E¾|Ó‚o¶kçç”­7‘´¢‘¨v¬¬lÕøç‹î]”™{‰a.þ{ ÓåÁÐ3,.ZóYÆá¨­VØÅ_äØhŠ¿+ß æÎoR7[û_x6öR¾…|U dž@ŽŒÉ"³1�ÿ õ`5¬KŒá—]¨ÚU¿ØÂkÃÝȪ¼ƒ¡©¿a={ú¤ÓÊË¿þõ¯Åó˜XØ÷ Ѐ’»t¯ñÎU|„¥JgŠƒtóÌ)Ígbe`Ñœ¦_€hÁ˜âíƒãÉÒ{Y¯rÄVô{ºðÃ×b;Û^Ào7 #c'Êï«o ba,)N ϵ1`.Îzñ"ȯf@= Öo ¦óÛŽL¦u Û }O˜;RJà­>¼"nTeÈ7üpâÚI³Â² Ü¿6£ærh;Zð“~¶”~'þwn8”쾋5;æ½™æCâ¿Eu‘7½¥¸ÀŽcrQã¦ÊÃe%!dž`nÃóŸâçj¯=ç"öµ -7z#ÇÛ+‚¸õÿ½²¹0 xiÿG#{ù>ñP_‡wM—?tø½öʸÁT†pï�ò X½Èå}–j„¡vœÚWŽz..8¿�Ñ‚1Ås%ùG£kf‰åõZ%rRm̈‹Ô§†çÛ3€Å½ý–{!7LòG •ãÅw£Ñp…LY³¢ÍBòЧÞêÃ#ìÖ*Ù|ÓrܳMz¢ÚI²Â² Àÿm§jp;lŸ±ŸÅáæ§Á¯”€RŒÈÞR0"ÍrñNæFèVMZ=5=\V2lf¡nÛ›Ðe¼‡í™Y(²<DŸåc¤¯y¹5½PÅ4ÃôIêÐ×þ'30ù=°µ´-£â?…á§!‡)xnÿ€oÚþÙh ˜vÝ©’B—}½ £+¤Ÿ…{WÀjECÞg<§mÓÂHXûÕû ÿcÇQNŒ)"âá¼ #»ÂצðX«‚ŸI¹©6fÄEêSÃóm »|ä[&ñàV“mQ]ÕË[Ê[}xEŽ|ÓrÜÏ)¹wŒL-1(% ³²² ,¾î—a®žÓxÖû0ÌТâ!¥û"¾ÖÿÛ(k×\däU¢Ñ¡Áp‹„PÑÃeÅ!Æ`æ>jÞΟÊ›v¢îão`có‡ÿ!L{¿_B`O)X¬þ.ñ0“œíYØTdÁ@ßeìI׉ó³xÕJI@ÜøWO?š÷ ¯�•P\€64â}Æ{Ú6Þ/@´ön´ÝRhNö ànoxˆË´Ô K ÔCƒÉ‚Û½žØ.Rm̈‹ÔŸßø3 u¢Ù¶ÔÃòª¨É[ÞRÞêÃ+â!üV îN†öxÓ©%}#Ì<¢(¹KŠBâ&+)›@D‹ï ”æíž‹žàúll>Ðwã€÷üçâìÅ?KdFPÑÃe5²ì<åÇõ+œÌ,Þ8j‚´K¥MïK8jò°µî/6k¢¯®§lãï;MŸŠã3Ú“D2¬.æ½È+@R!@»<Úð>ã?mß šI{§¦÷‡íú‘¾h̲äXæ¼Î–"ÕÆŒ¸Hýù?c€'šŠfháQQÓ¦*=.InÃê¡/ø@¥¼¥¼Õ‡W–8„ǵ¸&{#Ì´ ô¨º’÷Ör ú½ØZz6ä–µ -² Ȭ0/’¨ßÝ8héÃ,ׯ�5óŸÇâ%3)澄ÅmKÌŒ¨oz nS#àÿŽÞ§&3±ÃúHsShYjžšÀÕý‘Ä4ÅMEy»¸%N=ÂP>?q{nC3aÅÑ£VLø‡Ð½äÍfªŒSxzín’Ñjõ¢š�m¬ðï}¦‰´m_€h¢ýTõ^ðâAÍèto!ÿø÷°X»æBÈ»Û`9÷9ò7½õ®k8…zêÏo®¡ªêÂÜÃ_ªBÞ†è^.Ÿ+E6—éI¼è«“€iÇ9ìÑß¼1VÞêÃ+KÂãËÛ+Uøm„Õ1Ǥ-àåÀ�þ ïÔ,†mAáCà ó"áÚâ»Ì T­üçl,|ŽÒs?†Œ…°ÒpùéEKæÜXוмàwXß^pç&ájú û9»â×úÁûaï#¸!|ïFôyJpÁ²{{0<cþç-hj½—*›Þ)¸®¦HÂÀë?CGÔ ÊŸ½7.àxþ[â!°p‰þM¬tÔ ]Ap¶mž°læÛpð¢E¦öSÕ{aŠÒuY(·z"î±)bKòÅýó:Ó"©?¿ñg QÑœ±‹‚€;a(#è(ßÎ¥gÀÏµÍø+4¢Çgk5²Ò–ˉ¬¼Õ‡Wä9„¿Vø]]àVšeoÈÀnó£97´eb?×£y ô}‰¥ïTlÎVø¸ú¼HøõzP3ÿùÆ€ËgQšõ†Ø¿×aSQœQ¯ö™ÛjJ­ÃÁ¯n\1u¼6Lu£*mês²ñâ溺³.,=ž€ÉŽÏ°±äzŒúÌS£-¶œ¬—ÓxjùÙCUHÿjjE§“ ¢EC cÀ4ÆwÁb<€–igÍzä”|…ó' ¸BÆ€Õ‹j´±“ÜÅC*`ó¯iÛ!ÙÄ5- —‰´ô}0?Ž-8TYxo?u½ØßÎØ¹TŠt¯ìß`GÍ}ñMk‘ԟ߸œuþ€]Õ]˜yásé5Ò‘Æ‹«ÌÑnW×ckÍ1ÆžË oõáv?Ë_ƒ!ƒÎ·óTem‰ñ>/е Õm}ðã©ã;À‰õˆ® CÚÖZ…52V˜IðF}q[†~½"ç?ÿÿ¡ªÂ„nEóŸG|h­xº5‘oì„'Ø¿#ãÇóæJTvŒ¿??ÒŠ’7 Ò Ï›Q´6Sa× €eÓaóÇÓ£‰0»1ºص¹Ë»È :[þSú÷.“zRncÀúÍ{‘&Î:q“}¬öÚBŽqarãKöqbE3ÔŽÆŽÂh¥¨iLNþâ!EHâÉka¶:0Ì˸šÏ²’ó%Úúǃg‰Yø\M8xðîå<·CEï…ÀßZî ˜Pöþ§7aºé ~­©?¿qm €0Œ®êmØ”wUz=N–ïGnÆ:¬I/D“·¤Wô&Ü鑦A´?R)>–·úðЇðp…ßy¦ãpíëqåÔÜùMò¾lŽ¿1ªx|âÊò"aîkd—â\¨›gÃIl-“~¯Åί×âüçË–”@\‡î¢–m<uùQL·ÂÄ]œÚs ÚºÐÓþ#ªwüÖ¬ßùӨ:ù9ŠsÖC—uZáЗ•€Øþ. Š6½‹B–*O‡ó6Œ2uuÒ&M¢©'ð ðOÀm¿‰ Ç÷£à€–.'†Å¹–Œ«œ˜t«Ô2&ËqñâÉŶb™CvíB^æz¤ï6ãq@øPe³ Ì# À\ðµú{ÞÛ/€ŠÞ #­8x$41/»õصȳ< ÌðÒËÖ‚lÒ¥!ßâþµˆv~ó`̧LçäÛÀ&лúÒ"ä³\ùUp»"¶œR^a|lîfx«¯D9„ÛûÃØ0ÝWoŸšKÛÅð=„¹ô}d¬+Žq'Öñqxÿ;Ôýï"ZS’“}ey‘øm_agÄð¢m(iõp>&xÉÓ?¯Ó‚²¬7 Ë< s\âTs›Ó±ÈÐé–ó霸U`.¿ƒ¡Ý ˆ fùMÆ£(ÌÏGAq5L7œÖ[`†ÓDRON¢ÿñŽõ¯nÔ¾Bíµ‡b[°¯mh¹Ñ‹¡„ñâçÇúÐe1¢¬pG… ¬^Bu«æ 7Æd9.”göq¶éÞDNõMô{ƒc) SƒÍƒq¬%JÁ2™|„·õ÷‚û¶îþˆÒÜ ¬+jVÝ3€ÿö‹†8—¦äf}"¨1âåÈ,|î[¨ÎÙ“s)“ùëy¿$g½¸¿b{•0œ? ýµQÎo~N1 )ù{�ÿÆ�­Ãn6t´þ“áŒLe[Í‘Ì[}TGœd9„OcôA3ŒÕߢµ_\^˜1àHô×ûb¾Á{íþ—ެÂÃø$' yù¢Hq±µ•åE"<¿†ƒ›ñ4d¼6sÓ°Ñ`ç<†,ÑÃ’œLÁcý¹ik‘žÿ-ºÂî‹A j±c¬&`kîÄPð«¥ae9ÎÉÂþ~[ÄÔ“¶êOñ_±¨øÏ»øf¼‡í™Y(²<DŸåc¤¯y¹5½ÉyL6Ü)›Àjæå úÿ w¸Ÿ„£ö0ô=£Á¯ÕBŽ‹å 'ŸGp›QÀKˆ¯ÿ\=ƒêÓ­èŸÎqäÀ´s`¨ÖDû…¢ÆÍºÿ nŸ5¡MbðÁÕ&îw£üäר_B+g¶¿0­Ý&ä;‹kó{~ñYÆÆ_Íýjxál(Ž,´HذÖ&d Paøßø±Fòâ|äd¼ô=—áRÑ;–·úð€r‡ðx\»_ÁeÞ.†&¤Å„ØÊañŒ‹›jñw(99­4/qA°”`SÖ^qAÐC_uy܆…ý°”’<ýâÉL”^p]¥ZÏ š¿'µ”àÇp ÅYéa›±ä[ÓÝ‹’ç$üþ0£\såÌ}Ô¼?—qcÚ‰º¿™;ù´÷{8b"âXs¢Ý\;§&^ß*û‹Ð ž05;Ãæ½?ÑZ‘͉VU¤‹‡#0¶òsHdãrçv¼Vs7æ£ÈÍÈ@×7Ûœ ‰öcó§J7ëC]hí«0]ÛcÆÖ¶¥VIq—í¶ãÆ…*†ÑÒç°Æ€@K&ŠkC.„Äò“ù[Jabÿ}Ã1;äBãF“øÂ®¡Û-nh˜Klg šÔºá­>Ü"Ç!\×îp÷¿ùz ‰ÿ.•›ˆÌ†ìW`,›/2ᆓŸ<ÌË!øžÃÑþ#jôzLÍè~<š‚Þ4<­'PŸ/¶Y´òr2ö/‘zmC×¾ÄgíÏ"´µ€—ñÔÝA?¹œ¹'pè]ÜrS˜—ˆMý±äe;8Ë…s¥CÖ¯p" R5‹ ë8j‚´ úÜÓ1Çû CwPÈ‘ŽÌ¼]Èß•ƒŒµï¡¢íIêUþ8ç³ð>|ˆ'áÆ|áôöò–mICDÓ Hû�5¼d Iªß¤ñ 8zW_âtëcqea‡ÙÏpÀøë2´©$Ôh„©ù.ñ"ÁÈû©z³îiBQÞaœdž¼QÊÉÒ|Åê¡àÅã.‹¸_܇ÂCŸ ¼Ií0)xÚÎàôí°°Ö;Œ‡¯Åè|BÒ †" ?ÀÝþ9K~†µl*ZÄñÍûž–‹âcûQ Š";oõá9ár¸v‹%»Ù[jáİzäâÌЭ?ëžbÆÛÇ“¥]ý„gô†¥ŽâßC4½ ]èFT—âCJTLu7ájTc€N3}/L"_^‰¹Ï‘]dQ$îmE!ôüsß"WQöfü3Ú6òœåC†¹rv�W÷‡@Ña}yû¢R¡øà4åA'¶AÇ‚7�;ô¢n_yjÜ­“çâXk:ŠücL\2d#|ò0ò¶ ¬#‚§6gãÀõ'1öb›ékn¢'$dÎfs``ÔÇGr½>„21g;Ì5§¡7œGswÆ82D2J겎£ôlbDÅ›õ˜D> W`%~á ›€·šz0.®ó¡(™Å„oc�rÑ_E·dR¶ánÝ!¼¯oÍñdAMUu˜[GA} '´0Ò†²õP`îƒ_-uRÞêÃ-rÂÅM¤,®ÝSðt_Ä×úa7͹ÈÈ«œ_ þž+(É?ºŒÕøl«¹/nWxƒ¥æ+Á†|Zíîàü&.Pý0àD-zÆ/Î#Áÿ^Dа«×/~‹‹‘ Sݨzs+jZ“¦L5Óé2b¿±.‰Ë²–šë1† Èqp–æJÁËîíAÃÁkƒBSë=¸bö8y GÍŽÅjâb›¿b›Á䨄B,9Æ9kûçr¤/òà9KÿÁ?1ïÿ IëVƒúÖãxVŸXÐÀú RÌóȪ¸ÉÇÍ6KÛZ”|Ã/°»ƒc\ðaøxI-ȵ1%ŒT߬{,ø¨¼C\5¢!`²ã>Zd ˜÷Á¥ 6ÄKxÝÁX3Ķîï…Í>ÀIGõV.‹ çÆ€å¬?:¤å~ +–<›¹Wëߢ­:7xœV/o)oõáyá‹ã`µM ]‘IÜ´¿Ö â¼QÈ¿¾A+-èçN/ƒ£͹uKàG-z¦· mQmAc�‹igé‘ê¿Ä©Ì;)ø¿E„‘V”¬Ë¤Ð—åÆûG\ûbÕ åà,'3ºy#SÒ¹R|Ö¦‹ö3—0ƒB7Z‰Cùá‹9í’¸)´‹m; ¸µ œÚƒî¶ó(ÝRˆš_ï‰_wÁRyB¡–ã|£÷îáÑJZtx`!­›¸¿ÌÚ‹O?ÙŠÍybGÑ<P=¼‰ÿõ!<oFцÝ0´ÚÅÃÖÜøa¡oÌÇøPÃ÷Û ßY¸,“ÀÍeçÆ”¨¤èf]Üã.£ßá·Pn ¬©È«úµ'K°=]]v.}_8—ÆQóéç9çn4Uéq)dͶXê¡/ø�¥õ¿+’Å„scÀ/0Ôý·äVă'­Ç±Ëd ü·Ûyú7ÃnÔ€YœÎ£@ì\Ìe«²Ýƒ)×mœe7‘õ6Œ¦¼~¼Õ‡Ð~x]6\«ýtNt/ÖCOŒö¢û‘ZÒhÉÂ4,ÊQÝñ<d¡c7?£<»Ha!É9ß l­ñ¨‹½*>GqÎ%4BŒìK¶±®;ˆûNÃÜÖ[÷5ò7bÍúÏÐ1±Ê•K—…Ýž@¥El·Ï8›­ögKn„^ó-új\ ;8+én¸4Áþ±°Á )ɆCÅ•viO-û°6R=$åMl«{$nqåFŽq>ƒ¡[-¸;V»¸ +D8‚ËŒº7‘k¸‹Q±/Í*\˜v˜pÈܯòAVýõ!"§÷Û–5|‚õñ)tŒ„ø2†«•ÈþÀ —Êûcî)ó/Õñ a .õžØ8)AIë?Á¯ƒ 5£pÝ!´ŠëŒÐ_‡­k qù öïÔãºý±x¦tÁÙfÄÑFµÇ¹ýÃauÄ9èö(æÍ·1 Jì ßv°ûJq¢iGUö)NÜÞÅúx_`x>/¨êðV‚Wæë /Ú‚4q¬ÛT€ãç.ÀXs[{ž µ)9ð9PW°9èþ» y™LMþ d‹‹À„Ò+Tào³Ì‘Fó¥piÁæO Ûü%º'ævS²]DY@qXü|T=bÌey2ì€ס7õî†K㇧©Åg.…Üx\™âd—^„}8–µ*Ò­Ù|‰#íÒD'NÛ1vÙ -Ï”[?“ç VV1áiÝæŒðŠÜ\²j®1"¸~ÄÇÕíY˜£Ä½èØC\-ߎT7¨0˜f@= ÖoBÎ.æ)¸™1¼­Ð÷Œ¨^?î) 5=h„¿P·õ]”µº#´…Ø×<×Q¶i'LΰK!æmž¦œý6½¸×÷2¶Ë¨ ›ì@ÕWj·±?×6ã/ÉZ䂳µYÁúË ßÆ€�KÄÍ\>Ò^rÏ�‚x Ûiá9Ú+²¡[³zXºæÇX<BeÁµ›gl>º (+,@Añg¨i¾¸¥R–Œ´Æý€{ŸGÑc™Æ‹Ö‹øy©Ô‚âÖm¿…¦î0%\Á‡±gÏ1¦£ŒêÈqèM½»áÒˆ›ðÁA¼üÝxï>†ÅCÈŸ\i—üƒèøOq_Qû œl^ð{`kiƒ}(†:ÈDrãœVô¨ºt9¤.£A¿[c6¬‹xù; Ù;Q㘋Hf‡†ŒwÞA†î-”„8ÕGõ!Ĺ«®ëçÃõò2ç.²¿BÏ‚‘Xmfásw£Ñp…,ãPE-š¼àâ Í¿1…ÕQMšixš ]—-®?£óAÿܹÿ>:›Ï 8ó ¬eá[ –]'ûstL²úê‘öf5º½˜öÀ×u?ÁbþÇów ¢ãEðj͈¿[kþPÄë‹óËrq3SðØ~›[È ‚#X_ÕÌèf…©üÊM7Ð뙄ßûfã/š àÛÍs9æbª;Ã7L)qýeñ¨Å‹­éa“ãçjã¹B‘åЛzwÃøñc¨Ãˆ}e—b4ÖEK»ÔƒêÿÙ£'Ó×í‚N—œíYØTdÁ@ßeìa1¤¹gñ`é܆2 Ç8ðr`�ÿ„Wuú>j÷Ðã%£[b°›Å.üðµf›x8´‘±å÷áUº[,‹šëCœ“pwÿKï[PŒŠš<åE²×ƒ›‹=)Ô Ÿ ‡cŠê4Â?è:õa0Ö_Z¢g…ðÁe©Fµu#Ö£X÷v 33ð:¯ jÇ&èÒÞBæ’©“S…Wô&ÜYг™+öGCˤÝM®O,š‰›!ˆ0´g "ŒÃQÿ 2ÄÃtÚ›:Mjpïæ¹$jºþ2c�K«Éw ­äÈ5œzwÃÔ ØÂÒ.‰=Žð –M [®¸/ÑWWŽS¶ñÀ÷¦OSéBŽq.þŽŸÏÃò×`È»e:J¿ *k t®HÔ\â`¨áŸ><jj‚ý%;wÞ§"Àµ1E„š@8èÔT£ ??à%sÆÜ‰þ¥ŒÊlk9‰â¢ãDÂ}p6^@ǨÚãèÆÇbu“®O,šˆ›Y€å…´a2¬²êZgáóüŽk&#ôúÓ¨1߆c8u.«¶°h–šè!ÚÍ_£$×½›òãBë\k¶a4øSšAnžÑa®¿ÉÆT' ¬;†ƒ­Ï–l#áÅ ¿9%æˆpè‹Ô»*<šÂP>?q{nã?aÅÑ£VLø‡Ð­/JÁAZŽqí`¨CÚÖZN]„¼¨¹>ÄAÔL`¼¬Án4•–‰Ç³ÅY[U Ÿ ƒ{c ƒgšh˜~Ò‡¶ „…µ“gy¾=47óÞ,!ÙÄÃ]@l†¹¥ïƒù±6·€Z‚½{Í ÂZýxX^]æa4Øùˆ›K-.RóÈS‚×cA jZ{àt¿¾m|]ñÐü=®Äí=0…§×.áf,y䉠ºõ­±‰ã-zwCÅ‘%|b ®«‡"R’éBŽq. ¯|ƒš;¿IÞ­Íþž½ÔøNDFÝõ!f<?£´X\Æçe˜Ï” +» õö¡8æ/¥˜Ä ;L(PÇýÚ|lØsyq¬yªáÞ˜"Eà=ᙽC ÌDC]hí»ì‰ÊŒ­m‹ýZÏ |ó£Þ€© vqœŸX´ B2gBMqÅ7¡ËùmýãÁËÚ„ƒ¯á9³ÉÊ…MÜÚB<@{ݰ߸€ªâBW]À »ÝÖ?´ç°âˆ7¦:Ä~0*.¢&=J Ïæ]IaªËE1‡>zÅ>u<ÿ-è–ÌB@,&Ä ›¶…ŸîGÎæ÷‘¿£$Žl ÌÝp£ó"¼ÜfÖðcÒ;%>“¸FO,c¨#|‚¥ü٥߅¬×bijE§sX¥ƒt¼ã\«ã㋼á>§Êavi5½*©\bÄ÷ îÒQ$xí¨Ý‘‰=–q”ó@ˆ89›¯_Å…ŠÿÊê{Õ¿4àÞ˜"⹂’ü£81ñ\9Yú¶ÕÜ[Zf<M(Ê;¼ÌßÎG‘Åü@(l]5£¢à]¤o*Fƒ“©üŸXx›Y€3¡¦ÀíIv„¦Ì`0|­áXQm =c@(Á°†*ì(jÒœfÀJ ëÿÚyØÂVs­¶ANnrLu7áê’‡zq“õ¸ ãä°tMkÖ#§ä+œ?iHÀ£`ÃraïLƒ.׈¶æùmÐZàaq‡~Š1¶xPh¯F»OËD^~>våd`mT%u˜}\‡mëàêâ3}Û21ûLü« #aáq‡äùÑÙòF%í¨¥ƒ4KÖ€¢Më‚·†Ò¢Ë: 37ó†Öàz¦›<¬†b]Æœh7׊‡žD¼…ÔAjÇ©}å¨ç"­,çó¢Œ) æ/j—*-è—»ÂQ='BKò#´€ÞágAoÌÐ LÌSð!l¶‡²ôù>±h"nfÞ„š˜(ÒGx[/Ê6?¢47늚É3@aØd¤¢)ë6áËËŠ#Žo´ÕÖË#x{a äúOGVáa|’“%nV>D‘Ié‹ µµ¡w™Ë¥™ß¯ãúóh?4…~óÞ9®Œ8V{ma£JYâ$Ü ;o ðþ}îéØÖ”Ù‡0mY\ý¯!›‡iŒ=¨Ç¾|xˆ ¾1<s÷¢¹j7öäïÀ»åWðÀ=%µ%C޼•pž„݃MÅßâr¨wƒå"ôùy(5ý$þwcœÜk&PÖ{Ž`“ŽÃ…0t•Yoˆý4™y»¿+kßCEÛñÁþ8ÛD wm Ì‹áíwýê¨(âŘ"2Ú‹îG*í=7`²†zH0ý”r‰ÖËœp´FÂ8ìÆíÐmÚƒ“u7‚én_¢ÿêdCÛ¢gLH ¾wÑZˆ›Y€C¡&ÿ <¸zÕ§[Ñ?=09píÝ­TØ»×¼é]ć¶Úz9^ÁeÞ.†æ®<¯ð?Gm5Ì®WÁŸS¶ B^é‰E.w¯Ë ”æZÚÝß?·m ÷£à€–.'†Å âeB<ìåa˼›%3d°ÔGoÄ>.Y^å·?ZȬ±@¨‡˜xàW²_-…NS^` ¯ÍÈÀˆëe†ø|kÖ¼‰mu¢Ü€É!þµÒüž6œ:}C’gŸÍøšIŸ#AØÍ{º,Æ  ®i9`8ú+j.æÆ‹.÷4:¼X}{Q·¯ÍÏ91ÏÐ^ùt¬í2·#?ÿäd¤‡¤WÞçEÞÛOmÄ=ÆØdèü¶ÂŒAGå!ÔõÍŸøœE.3l:˃<îúì—ïb—sc€âfXBMDÂhë€Ê¹²î2¬,c�;¤¼‹5;ÌpÚ}Þ0$þ«´Ê9[P£¤­’”Xcÿ_oªË ÷áPáq4Q˜@|øŸ¢ûôæß1ê·Ã±yå?Ákl°0& °Óp= ëRÚ.”aKA ~e_ß»ŒÊ£-ªÝ†-ò (û v×?!®‘áÈ!þ¥öA:F/œÞ6´-SÁï',™íoÀ,¼I· yÇÎâÚü¶ªF³yXJÌ‹Ã?1 ·ùHp}˜Á䨄8›«Ç¬Ó„-ºíÐw<y½ÿõàA])ðœóy‘ûöãŠ) ;o°c6•\@·Ë+¶ gÔc¯VÌ+°°1¸ñ÷Á\À “Y¨è˜?ûºa)4ÈæuÎ÷.Z"$óˆÒqÿÛðj¯=„W`› ZnôbHKÞ8:<K·‘ðz{yOµ¦MØ¡I;p®¬» ÚjëåðÒnDö–Z8¦ÙaÆ€\¼“¹:ÅóH3cÀ§¨êfùÖ£1ƒqë%üï¡^˜„«é"eH5‚ –ÝlɨRt»P÷X=±G ÞNU3 Â3tœ:Ÿø—ÿ)ºþóNÔþ2—^*jª-è’©4l¬Éà…C(€^·7.T¡°à0Œ–.8‡}¸0ÌÀkÿÛvpkáâ©ÝmçQº¥5¿Þ j-•'TõŒçƒökBÓ‚«ê)Æù¼È}ûqÅ,|cσ¡ÙÏ0ì‚Ïsõ%ïiW3€ êÑx½3±Ãú5:¤ï» Ïü+yúŒQ;hy4·‹æK„$„yõþŒ÷°=3 E–‡è³|Œô5o"·¦W…¸k7šJ qìd¤MF°œ<Œ¼mgƒ‡BNØB¢"Ž˜›Úq1¬²qŸŽO[m Sðt_Ä×úae®â¹ÈÈ«D£Cé9P¤®v‘ˆ¸ Æñ ¾Œ¿Â3=÷Ã'sýÆ?Š~ûï°÷60Dª™ÅDÇY;B´l"•KÄè§�Á‡ñqñÀÅ6vËfƒ)<®Û.9Û³°©È‚¾ËØ“®ƒ.÷,(^6ÖäôÂ!Aœ¿wY`,Û‡ÂCŸ ¼IíÃË‚±k#ö•вT˜òRÔnÛí»Aƒ…XºoâBi jn¾¾gùGU»åæ{^ä¿ýxfý-hí°Á9¬ÕèqØô{PRgEWëf¬Åšµ»ƒaÌXù;,åÛÄ1þ—lï¥í¢Õ#ƒ”º~±óM;Q÷ñ7°1‘CÿC˜ö~GÊ/Äܰd"gWˆªgÄr VgBVØ‚¬"Ž^§…™†çúlÞ|×=üeòÐV[óLlÆ€HÔà×í@Õ…Zœ,~ékÞ@ö—çñýn&„È6§Q ¸�"aþ5^À+Ç \‰9…óªëÀÏÜè2wë<l l¦˜Øn9NÙ˜GÌK8MŸÆï™7âXûù¬ã¡ƒp·Ïù!2¨Ï,|®_øÈ&0Ñ‰ÓÆv F<¼ÎvCª^¿žZ°{m¸bqÑm«Ãc5,­?ÁÜØŒn·Oüzý-hRÍ“W ÷íqîæ&놶aBÒuEoCÇÞuÚvT[™@¨€i÷]4͇óÞp`L¦îJ»hÙðcÈúN„ g1aýG­CðvÅ®ü,+Cø¿Ì&œç&lauÁ&jí°„á(†Œ«f Øì¸óÏ`¨ù¬+nÅË&P÷!Öä›ñGsvê[`ï„Çí@›þ@$¸Åïµz\~ðBìeKÁrÿŒŠ}&Åoç…¡6|~âöœã„GZ1áB·âÚ q=Ǥäã5ˆãîætN„Ý4Ì>BÓE»:¢Åš…å¿X~ ¯û/¸ºbìï…Í>€1.öM3sÜ‚Ù܈¦n·X;±Þý]hnº•¢ð–XyŽÓߣc0ÜHV†½ËÌJ1 kÙ.T´À'¼Äcó>¤§å¢øØ~¨‘ |¼·_bò–u#mîYŠÁÐÔ‚¡L¢·µK<éÉW­£éMýì�®îZq$E‡õåíˆ#û±<p¶°ºÐV_ƽî~q[Ž>KÍ’hzÞá§þ³ðÚÏ£8÷]ì¬jDOÌYGæ\žÓ±Œì�“0Ø,Ƶf“F|¥ø!‹àÁ{æ’mÈ.¬Ä™ºËh¶v]`{Ðm½†Ëuß ¢ð]lÚñUboüâ!ŽmšB–b ®«‡Äkøz-–õŸ¡c"Å×mþa8Û Ø±ö”ÔuÁ8ˆŽ£»êÓ%ŒK„(®/²Âì—2WõjO–`; ɮ¥ï Å=kSÒ ÎãA¬ÂŠÁ.š*ðnÅu¸|3˜~lÆîô È).EQ=^>®‰…1ZÍf46Ý…{ZÇþct6ÿŒöçb¯å€˜la¤ eë7 ÀÜh6•á_Tà8ëÆbؼ¨-fáóü­õ5Ý…Rõ r › —W­£½—B@d{0%QÐ…C,M­÷‚ {Šá.lau¡é¾<߆SEpqîI¢õ¶æ§þó çâ"4úî‘d‘ΙàQvy&ƒÆ€7«ºàu^À¾}§Pwù2Ìç>Gþ–ªÔ²VÜ–;ÛjBi`óz€7’Yû ·ØBò~ÇÓ�ÈÇú}—ñÇ/¥H»f™5ŽÅ^‚ìÒï$ëµ¥éîÔ¨SŒàÃØ³ù?§< ­%›ö-m hªDñ™K!Ïp gŠsÄçºû0ÿ†\njFáºCh™Ð_‡­k qù öïÔãºý±øN\p¶q´±?õ}CË6sdn_'<‡µì-¬-`kô«l0aEÙ»Ÿ£Õ5 aúÌ»3ăâÇ8V$ŽñžÑà©3þìÕÃú÷Ÿh«Î ŠóNÃçjÂÁƒ×Tˬ23¦ÜÌGœSDøÎº±î×F |Îz¤‹í+Y'ÃJ¾…ŒüÁÜð»Ñb{¡òb1oa « mõe/œ Å‘oÉÖ¼¬²Øró‡¶Úz1üÔŸÝ4&¨pîï‡åÈiX‡a-ÝŒ·kîcF‡³©;2Þ@Ú;ï £@¾…‹ˆŒvƂޡ8ž½p>MB4©Iÿ÷ƒ«¨zò?܉ò«½p/çBëDgËUib[òæÏ׎¦VtØa8ª1VÜ0â…äÏÀ{ÿ{ìØð1,®¼+V+ òÓô}‘ߦGn´]Fuh ¿ÉT}5§ä®ÌèuÕV'úÚ¾@¶î-”±=ž¯M+UÍ ÊŒý[ô8‚Jèk avù$jøêÂÂBÎ϶t݃)×mœek\½Mµ9aÞ)xκ±míÿAkñ{(2uáñP”uÌïA«éøÃƒ[M¶°@f€lÁE{ʃÄ?ÌYØÂ*CS}™¹ÌmÌDqMcÈ “X~Ò#K)Lì¿e*‘mÏ<Õ ·cI‰¬p.xÀR}�EòàÏ8Ñøm'xÙÆ¬TØûÑc°›øÆêóI0û¦-ëÄgë±æ?2ÁÄ·TN—¸4âXkª ’Eð Âví< ì SóÎU|„¥—8pi×Ì“2ûstˆ¸€1àÍjt{0í;€¯ë~‚ÅüŽçï@EÇ‹àÔƒ ‹™ ˜0ëȪ¼ƒ¡©¿a={z}l£|¼óÙDZ·úþêì7±¾¬ #ô²8Ⱦø®½/TZŒÿÆ”0¸Ëº±M­~ôÛLp.¹0Î`rlB¶¾ÀUëhk#Ž–ü´À3H‹xøL„ÁK¼…-¬2´Õ—§ài;ƒÓ·=ÒEz¦Õÿ³I6¥ÐV[/†Ÿú3cÀ§¨êfªêјÁ¸õ~&Q3.ÑÖX˜[3ç´&’!Ü3`Ê.ÿ׳±%¼ f0ÚsœCÏÂ*Ò÷”"hxKËE‰±)aÏ«×ÃtdÆ'9YÈËÿE”¹#N|pYªQm_G±.f2¯ó ªvl‚.í-dfì_"d#Åø½æE<.,Õ¬io@oA—Uö¡ ¸¬&èõ_£žïY~ц1%eÝCSk#3¦Ö“’«ÖÑö¦Þ¦Š*\¸üúàm±ÔC_T }“Ã)½¼…-¬.´×—ÅþâÛ�“f@Jà§þ쀲|jAarãQûDð#>Ó¢B¢fŠÃÚY;Èe `°TÛ³f�s·ÞÄ{ Ò÷”B'W~€¥o�ëϹ¥çp£×G¸Ä+¸Ì{ÄúæÁÐ3,þÆùìãpÔVÃL™;âC<À:,'Q\tŽñ°}“ÎÆ èàäæ]0%tuòôkn),¼B Y7£©µQDóÇ• “èøñÂýL61x®ZG[™p¼è¤¦çð‘á÷Ô߈±<ª7š`±\ã2êJG[}™4Ô„ŸúÇf Xñw¨™jhk,Èi —8߯cÎ& éçbý¬ „jøm_a{y jK·#+ÿ8.X1lª™˜Ü»X³Ã wàGçCâ¿©HH+þæN)šÉº±m­3ðÚkPPt­6'Üá)%¥fã/¤Ànü\ÛŒ¿$/Ë…?›+°9(L“ZxÏ£º²ÑT_&Í�Uá§þ̰Ù5÷1Ÿ0~HÔLM´5¦0촣׋zÿ$×nÀóµù<·¯¢sHÆ'¿Í€Â@nnñ�຋º’L¬Ý´zËKï¼´‘½¥Žiö3Ì‹w27ÕÑé{5 õõ¨c@3Y7£½÷;QÇ ˜ôe(ÌÏG~xÉËDeà‘hšo K÷ò¨®d´Õ—£iØa<|4†ŸúÏÂk?âÜw±³ª=‰äzˆCFì+#Q3¥ÑÌXxeGí±kð„ï_þãg¿DHí%Àÿôœøì2Œ.cªbé ¯Vc_m¯l.”J0˜ïÃÕÓcI.Ò{‡õÈ)9‡î% âÜÝ}_ë„mtvC.2ò*#¸¹ÉÀó¸Òʘ罞T¿ÐLÖÅheœÄÎ8ºÍ·ÈÀn\1Ôá_TIó¥æÊ“h~ªÂmçyT“õ-m0¯ë®™ŒÐëO£¦¾•ëЀP´ÓÆ‘á¯þ³ð>ûEó;µÿˆ½S3ºr·9X‰hg,¼„ÓtF{¨™ÜçÍŸáh n$Ä9ÊaFIN. +¾AÝåk°v÷×Ú.X›/£îL% ³ÞÁýx¸‡›Áèo]p¼šoø!î °.¸^è2vâXí5Ø\Ë)EGòÂaø1Üûoô'ž«‘ƒçq¥•1Ï{=©~1 ¡¬áheœÄŽ€ÿŒl{t®ZGÛ/+’f€øºúëð~Q³ ‡oqãÄsÕ$ÐR?ÑF]CúJÚ~º9›ßGþŽ˜ðäõI~Å-R¾‡h( Kk*ÎAmOÈ  0ZêKÂók8x4$Óδ¸©Ü[û«¥fq:æ„ÕT†œ4q¾ ícLQ¿è,¶Á8DøÔ‚…ä” 3ç À:lbZ7záaº1Áô9NAÿKWÈÄÜ%D]ñGзöÀá–/õÔj†çq¥•1Ï{=©~± ±¬!heœH™[ï:,¦¹Ô±,·ãY#b‡«ÖÑæËš'’gÀoøÕ´ë7`OµwlP@Ðlúÿåø?â×+G@PKýDuúaÞ™]®=Ìw>­Éô}Ôú .λ‹¶ç í×_ »Ý-Á†|Zíî øÑ,|ý0¨Dós:š(‰¶úÒ8l§ª`yÊÜþ¼´}‹CWìÆG¿Cý޹µÖîÄ“±ÔÿÉ3°Ô‚[P¤¿Œ®„<g‚¿C|çÑËzäþÿÙûß§¦®õÿ÷Èoö†3a˜áFg^ã0ܰÓ97tÚá;èÔa=NÞèÔ78¶_ÐNAúíTÐ9ƱM^­ÁSsZù †J^±"´Âù�•xÞ’'¡‰+ȯ žPûùÙ+ dïü";;Ù{mØ3ë” ÙëÚk¯kíµ®u­ëjè ÜK‚~H[Ò Í²q¡]NU¾QhÖ ¥èI„yx~…]d“Ž•[4EŸÃâÊìFU­£¼‡Å%AÌ�ÍV¾1," Wº¬Ý�‚Jê'Š5@0»–Ï}-|¿@WrŽúøJêñPºü|H³OÑ4}Ä`óQ5Ây–QV_b°àú ¿âO’JéÈ)áAï|˜uߡӣ´À”dWß³[LTö×/ é‰›´˜”aØêÃäx èe3à”-*ŒŠ hÖ+¥è<írªò­m”Õ~ üƒP¢!c_⢥½Á ætZ¾ÃIí»ÐäÕÀ–ÁͪZGÙ݃ë †x/å—˜ðÉ´’ZÕÔO”!+ <UŠmËQä‰1 Ÿ¸{mB^ Ç—R”þ’Tºü|Hîó:4t½âìt.`Úõê¶V¨¹Ï³ŒâúRÐЀ[ÿü.dÿ:eH@« … 42-âÕíÛx¼Šícñé#<J¸Ë¶ßОÇxŒrwç0Ùu [3”¾q½B³^)Eçi—S•om£¬ö›@gõÔuÄ÷äfæà¶Vã}Ý£Œ¥­§ªu”ÝÙ ð{Ó„mT Š‘5ð½ßë¡3?ÆTÀ}þ”Ö]ƒSÑß•þ’Tºü1øh*Û‚üâ=Ðj÷¢´0—½ÇM삤³ w”€òú9 Çö-Ÿ† D±Æ�âð%ª/þÈOçÊ+?âbõ—°&<ËÎ9^?Ç踽Ú"¦º.¡ÅE< "Æ€¥gMØ¡)@•ê šõJ):O»œª|âQõ$CÍÜü’ožüù+ô».À™¡):U­£¨‡mAØÔ�‚4  Y½¸gµc.ªO,=mÇeÇlø½({ÜP¾üñ`ünô¶èQS^†²Ê/`l{‚)õÜrÖQd_ZÆÍË¿¤÷NR²1`Õóþ¤”' ÆÅÀÿì.ªQ4º½­®}}°« }/à…½û)|ªê‰‚< Z¡Y6.´Ë©Ê'UO2DÐ;7”Â11XÊõóò¦ªuõ°¢¡2ƒ€ïµ|G²„’ú‰2dMïbƒF=& J—?5ÌÛm¸7N¿§‰’QF_ EH~hnáAÇàO‡ Ç,vüÛþž&oñÅÍ1דrÞÿ;˜‡Æ8Ç £Ë†ÌßázJ‘¹‰q¡•Mè¼aB]I Kµ(¯>cÓ tÌRÞtC³^)åýA»œª|âQõ$SüÛ‘tÎ&Éð¦õ{CGÁ3U­£¬‡…ƒ°) %õeÈêµ^‡+<ÕfèÊö ºù1&(ŸE*zÜ`QºüÑ0}¸Pù~8e·$ÛåTÉJèKÌøœ(ÚÄÊšË.X÷B»·ùÓH=/aº%'�wc#î®rûht'ú#þÑÇèfRðÁk© {H žu¬®ý ÿô\Žn<W" Y¯” óÚåTåª'™‚µ¿CmËpÜw"ãÿ ¥xß4„L%¤ªu”õ°¢Qv6%¡¤~¢ Y}™ˆš,2ì\û"ö+ ó„²Ç åËÏç œÆíØXR‡K­\ã[¬Ý¡?¼¢¡¿/ùá2•BSr]+Þ�ÄS`�M릞$i,¿@mç«•ë¬d'~¦²“ÿ)J«OAGŽîÅ-§P]úiÒcñÜi1áëºO°«°�Å•:˜ZZaüä˜\sávQ Íz¥”÷írªò‰GÕ“L2ïýïñMÇï¡5eö羇³U娬;Ñ#ßTµŽòVŠÂ€ß/dÂEJê'ÊÕƒŸÛðÏE•¤¤j@QÎjç–äGéã†âÇ=$›ÀAì^öâ²€6 »Ðß—ˆ±hWănnêÉEÌMÏÆÝ‰áÍ#œýÔŠÁ‹ÍÀ~¶>½@„’“‰˜\ÈõjQg‚ËqƲ°·ò v•îe'_ã²}Ù`¢’äYРͲq¡]NU>ñ¨z’i–àŸøÑe1AO Äz,÷àõgÊ U­£Ì‡¥0vœ­h[Á³r%õeÈš(f@¶ÍXê’l¡Œ6NŒÒåçà 0ùOèG›k\zaË÷)žVIúûÒ"|Žo±c·÷úIÞdRúÑÛñª·•Ãøó£`.eˉS)z ¼ËT ƒÃæÕM©UŠY¼ŽúÞ™ðçx,b¦ó ~JIgâg õøÆGñô9Û>Á¿SIšõJ)ïÚåTåª'™dÞ‡_a ÏÊÎ-š¢Ïaqe60=U­£¼‡E3>¸®V¢@ÃïD¡² E5WåK{(%õeÈêÁu V&ç¡âx:%xu+©?ÄCéòó™Ç³¦½ÐÇ™è¢Æ È6ô÷¥¼°ÄƘ¾]ÞÆŽ¦§)‡ ¬øçÅQ@cÀòÿÄ0s3˜QÝid‡ôIZ¡Y6.´Ë©Ê'UO2ÿà”hÞBöK\´t 78/ïA§å;œÔ¾ M^ l‚ŽÕ%‡ªÖQÖÃJ™Üòƒ QiláŸÛ½¦ƒv[5Läç;NL+pž¡¤~¢ YÿÄÌ´2 C¥kmÜc^µ£öD+q K¡òêÂ&«(¢/Ívãœá!ÆxÇ’¢ËKYpÈñ€ÝØR¹|\@ ¤f P¡šõJ)ïÚåTåª'™bÕ[PP×ñxs&fnk5Þ×=ʘç.U­£¬‡•"²¹åÏÃÛqçî{ù‹¼E ŸÝÄxø£QR?Y“}š2”ÞÆÊï#‹¿gƒ}~y¤‰c\Zz ëeõGN”Ž"úR` ]ÿ8]ã-¸H<’ ¿½Žñùð…Á³;¸Ü•fˆ1à¶.V¡šõJ)ïÚåTåª'‚lææ³;I(Ü?…~×83’ŽªÖQÔÊF·üPð‰P>gLm}x6­ü©‡’ú‰’dU*Jocå÷²°I!ZÞ1¤|S6¤é&|ŒD“âE(¨°`t¸ûs5Д\À`Jç’¼¸gµc.êO—ž¶ã²c6ü‰v–àsü€Ê’÷±»¾ýÞt !*R@³^ѯó!h—S•O<ªždˆ`6ºÕ‚w{`)×g,À7U­£¨‡ unù ü®«¨(x+Ø®ËESt Ÿx(©Ÿ(ºO+¥·±òûH�^«õWZÙ1¯Wêwãí\]ÄÅêíØZ}Ž ŽL­#èïK$›@)¶7ýƾ¡Þ`¸©gí$ˆ ø9ŒÎT|G<Õ(0ïüSÏáy-☄ëá0êtЛÚÐûlŠÕH•LB³^Ñ,ÚåTåª'™âØŽ4 s6IÔœ7=¨ßÛŒ‘ ½ï¨je=¬h(sËgÆÐV±Zý-8<á4MŒƒf>r¯5a⣤~¢ Yç0晌õZaÆ1Ð7 Ÿšf”=n(_þ áql ¯ƒhýQ4D-næºP—¯zd%ô%f¼_žºZ´Ïv¢¶¶³qôê*R<Cïµ^‡++Æ&Rš¡+ÛƒêæÇ˜Pð»M0þ!\­x°SóŽw<W „f½RÊûƒv9UùÄ£êI¦`ðÆñj[†ãŽãŒÿwt6”â}ÓPJAvSªÖQÖʃ@€’É.q3ÙÝk5bFa.ûšúÜñÉPR?Q†¬drmÀ­Þ~~À·¾&T~¨ƒÍî„'å`^Ò£ôqCùã?\¦#hèå—á{òvm,T¦eúûÒ<Ü7>œ.ï t%Û YÁ‡Ñ‘èø� œ±_×Çþëz!€WmUxG«‡Íá/—ˆ €ùð‰S3ª¤ÍzE³l\h—S•O<ªžd’yxïo:~çÄ•aßsî{8[UŽÊºÓÐ5Û1•!ã7U­£¼‡ ƒÀ´‹Ž3úÌÌŸE×$§~âNxã¶î1á$Jê'Ê5‘Û-§äìDC'»MD>%£tù£a¦ºÑ°õ/(ýì$;žFÝ';¯Ñ ·¬.%äªT0ô÷%’Zðl­þ;gWŸ-Vº])Ž/üÔØ†ßxÙÜpÙP”³Ú9˵„vݧ±^8l{ÌGUÃ[¡Y¯”òþ ]NU>ñ¨z’i¤Û`–´uÈÃ[è…¶3úDžf”å x¯ZíNæh°A³ºþ8.á ‚î~ÀG²zp]ß‚'îäš-Ïm¨Ûk‚ƒüìq¦ÓÃ6.ýL›«Oé9‰'Т4ß0î7éP]^mYê/=À‰¯’UÑWcènÿ5jGƒ]Øž­ƒÙÊ¡¤DÆË<l7þºŽ2Vü ·¹ ]¯8F”L»~BÝ֊䑨UA³^Ñ,ÚåTåª'™Â‹›ÉgLs°õd캤­#öaPý0©<£¿¿§-úZ”k÷£òx#Ú_S¹»+%)µ2dÁÓ{öhÑ…–o»1E~¼BWý~Yv›”>n(]~å@_‰o4_.š¢Z˜ícHî@âÁu ú9GšØâx:¾Ê÷Ö ~'šÊ¶ ¿x´Ú½(-ÌeÛq¶êú0»ÞÚ"‹¾I+4ËÆ…v9UùÄ£êI¦ðÀR¡EõtºåÌg(­°Âþ†X$m±ƒê‡¹†ÏèÓ†’”Z9²&;âN–[-›g€ä~J—_E9ÐßWH€ÉbT~‹Vî1Ëeè´¥¨6]cî€s:ٞȟ˜™–:M/½0~7z[ô¨)/CYå0¶=ÁT0~€J¦ Y¯”ò~ ]NU>ñ¨z’)R8ºKŠÖ¢¨c ŸÑ§ ªûAÊuµ#. ^º]3²LÀŶ¡ÜÏ@éò«(úû K:pöÜŒó“98 §Ñ6žÊQr^4ë¿BãÍ!øòÙŽö;_W‹`n.L ü #j|ŽŒA³^)åý@»œª|âQõ$Sx`)×ó7‘½”ëìÏn²]®(dížÑ§ %)µ"d¥< ¥ÒÇ ¥Ë¯¢ÑW/Ðó³8Õx .G"à…½½Žñcë,=EÓŽ·¡Éÿ�; ‹Pa°åcänx%ÆêS¡fŽ�¼Ö³ÐÝêá—°Û»ÐTùt¶~8—ÇsQЬWJy?Ð.§*ŸxT=ɪ1 )ô?L¹ÏèÏcbô|kÜò $¥V„¬”qQú¸¡tù…±ˆñ»×Ñ=µÃË.ଗë(¸›<ÐßWÂGŽ4ù(ÞY„‚ F‡[±?WMÉ ¦²›½øÆ÷´¡(ú .4}ü ìoØï†`:ðœ©8¬ ìü°<øÌ—<”4tÀ«iKZ¡Y6.´Ë©Ê'UO2E¬1€ñ˜¡­ïeß aTc€JbâX“Ö Jꊕò#.J7”.¿0’,PòŽ¡srݬԲFܶXäã œÆRloú ûópSÎÚg‚¿w™>‡Ñ™Š¹(€ñίpªó{%ÌvžFmç8S=Еœ[ó↓®]¿€¦'n~ï0lu‡ar<g&) 8eóªÞ‰"Wg’C³l\h—S•O<ªžd v-·ï0,/ÈœœÁ‚§ ¦ú*”•×Bo}‚ir4ÎÝ‚²}ª1@%.ª1€6”!+ÝG\ømèÅÝ–U"eGíBËý ÄÖ¯¤þ\ XO òüNp¸+8_YŒ­Õ—á˜X7+µ¬¡ôþÄŒwàËS÷1Itx¶µµ˜ Œ£WW‘Z¶’¥QÜ8ô4ì}{‰ òêb6ügkŸ%ø††ð<& Œ®–Kèš"†·LvÂV®{©Š`äÖ™dÐ,ÚåTåª'™b öóûP´[Û³Ù¨98ƒ7ƒ—q¤ª:³™Êï%iëìM÷ÝÄÝpP!e=Ìeðû¥z «Æ�ÚPެô¦¡ä·!ÛÇS‰²ÊÙ…&Ÿå„_¿òŒˆÔl¾'ßa×;ÃâNñ\¸JBÄöyûÓ<Ü7>E&žÎ~®Ù˜•m,Œ–};Ù" ¬¶Gp“*+,=kÂMªTÏ�QÈ«3É¡Y6.´Ë©Ê'UO2…6'æ} <Og¶Œ‡?‰EÒÖò0ÿì7Ï£²@zCKe=Ì0;ÎV´À-É™=Õ@Ê5þuéi;.;äßgã·¡Öz®pK3te{P}ñGÎïî¬ìBËý ¢åWš1C<Œwp°æ ÕÅšhÄöyûÓ^X>ÁÖê¿st•-Ö;èsûR\°¾@»®Wì¯yOËxE$8c÷Ó5GH,+㮈"rÖ-ÚåTå["ƒ˜’mâÕ)¤Ð;O¬Ð¢úŒ:]‚ræ3”VX×ê1%ø'œè4Ciþrš³r…|p]­Œ¿ã±aŠj®ÂîÍvndÕ@Ê5ÑUƒ¼šŽ;¯ŒðÛЇё‰(=b°à¼ˆýº¾¸.SüïK¿~å3Ò!dÌýzòÒ2^†Í>5ÓYfÛdïO1t·ÿŠ©´ûÝã•ü0øçÕc«b¿/9ëæÑÃô‹œÈ]ÿjÐ Ÿ¤ŸvùR'ÅM#íš‹°€i×}\:Y^L硸Ê�KC–ïq] Æ€Eô› QiláLèÙrMí¶j˜ÈÏwœ˜ÎêDE5І2de¨Õ58onô[³•EÛQÝü2O®ùmèÁO&Fy³Æ0lû[rtqû¾ÜÏ€_¿òŒBa|0•mfåÎEQùgø¤¸¥Ú¿¢Â4 îPf�±ýžþ4 ;Î|ÓéF ‡8°ãÕñz\j UÁÒ ]E%tV‡ìã•üø`?[³{ý$Y‹’uŠ}Vú¸DK;&‚ùÄÈ …ü´Ë—:qÖrk:µ`` ÏzZ¡+{7 (g*t­èy6¹áÅ�–=ìézXÑÌÃÛqçîGÍ[tÀðÙÍŒëHŽj   eÈ:‡1OT @fOµxg+ÜÂfê‡ß†‰,¦yØnüuåœ=þ÷¥‡_¿òŒÂønó~h4¥Ð÷O°ã8»0ÑÕÁâ³±] üþ;•tÛèéO!]ÎÜ.±Aí#ýã¸cÀÚ„~½ŠŠ‚e/J~ÑÕ¬zä¤i/1ˆýþjpŸk:E ÄÖ“m9¹í‘nÉ&ñêZ²˜:Tù„°®Œó1@û» š÷P~þ\ÓœÔfq ëaECÎ]÷`2äLlÖsmÏa¤o0¼3 @‘ü„nfPHÝý€’dåÁ¼D×Ù#¨i–7—߆\×™ð ß»}¹ü ÎÑÉ„“^¹ŸA´üJ3fcýûØ°Ë Oðy,ÆÙÿ¦-^%)bû=ý)]c€?5¶á7žAÍ·OhP[›]+FAå·h]ñ å2tÚÒp€Å8§Õ8«A»N‰¹¾Tú¾–Û°Þå#ˆ©C•O±Æ�Æc†¶¾—]9‡YSždßÈmÇMÓ—Ðn)„öä%ÜqxàKl®‡M¢I~T‘,×6+Ä(¤‚´£RP’¬´ÂoÃ?13=ƒ)×C˜çØ~lD³í_ðú»/Èý øõ+Ϙ! olÝÖç¹!b (Á_ 7C#ÙØ·¶Öøyôô§ôñßµ›P”à¨ÍÚ„AÀÛ³ç`œ7vÌÁa86Î3WIŽXûýÕsýl˶ÌZnCÂz— ¦U>!°ï¸}‡ayA6È,xº`ª¯BYy-ôÖ'˜fرßÝ‚²}k.f� 92Ð{Çö pëAè®vÂá™Ä«û­ I-(<0XvIÑ8‘Á�RAäV J’•VømÀøÃ‘Ø"9…(Õj±·8‹N¢Ã?mÜÏ€_¿òŒ™‡·÷2¾ÖýûÔ,úä—ž@‹s†}­©ˆ%Õþ/#Šþô§ƒ}×_ƒãß x8YÞ<†á‹[x•´£xp]ß„®ÓHé‚ùÄ´½XO©+1~÷:º&ç“x�úñÔj…ãªyÉ«ÙÖ)1×—Jß×rÖ»|1u¨ò a öóûP´[Û³Ù¨yƒ7ƒ—q¤ª:³#cÆoIï>µÆ&\è±PUœÇ~G9Ù„Ë.älrf8ìz”[<áO,Ì8:MwTc@Q’¬±à÷Ka¸J¯ —†`Ú–‡ÝÏœô¦›qðð͸‹¹Ÿ¿~å3„ÁÀ?6†×1Ï!€‰aD=À,šäý!yFýé \¦ZÜ7c�¯Ú¾@m竨÷h4ñÞµlÏi‡m«Öx-åágœ¬¼‹šUÛt}CÚIoì°ÜÌœ_ b®ŸmÙ–[ÍmHXïò×ÁÑúäã{ÍI!Ÿ0| <‡¡`%½{ÁÍLÃaÐÁªc€ðÀ`Ù…ì@òSưˆ¹éYvJ¡,èî|”$k ;ÎV´ÀàØŽTðÚpñ Œï}³'*¾3 sÙ×!=cÞ`z&¨NîgÀ«_Æ a° ëYènõpvmC;·M•Agë‡Ó£¼1‡&â÷‡Ô2òhéOÌ«›8RËI¸à„逎?Woâyü‚ŸM‡·YǺñŽ'º¦CýNK+®ê`{õN+Úãª1 )ëûnñÚoÂX¹eœ¹T¶uJÌõ¥Òw±õÐ܆„õ.!å:âè MòÅóš“B¾Ô‘>曤wÏoìEŒwt``•w »-/h|XÑ$rËO,»0D3Œ50XdÿFi“ºûeÈêƒëjex]6¡¨æ*ì^¾aIJxm4–a·þ6úW=è¸TƒmeFüL>?jʼnÚö•…5ïû2À«_Æ a¤²[™‡’†xe62)Ò†+ÌÈCà}_Vf`?[¿r.òý[|jq§0Î$x×j¶âða$C¼–`ÛltD7ØÂ4î×£ß's±šN0þWpvšp¬´ ¤gr U<xõŒ?DK÷뤺¼ô´—³áOt·!a½ËGX­Ždz"¿|ɽæ¤/uØwœÄ1ß$½{~c“Iã§(­>ÿFƒåªK?UÈ1áÁ²‹7ÌöHäI–XcÀ zÍ÷ÔcYD².: ß\ˆJc g‡‰-×tÐn«†‰ü|ljiYúqT2nXö‘ãCá@¢¢Ù‹¦g¡ÞO>Ë ¯~3„ÁŽë×/ é‰›ã!EÊ0lu‡ar<gvÃe3à”-* «JJDúƒðŒ<zúƒ×8`ø2ch;r*Å�“ì»Ö`Á¯½Ä„oÅü±N`uí§f´rÛ-÷p|ËV5s‡�âëƒÀ´ —NBLߨANña,=p Ý€ñºÆ€PœˆîÙdzÂ!•¾óêñZ e?“ß%.äÕD<ƒÈï² ÿú$ûWf“½€¢²I*…ÆBü:RÓùäKÍkN ùRGú˜o’Þ=>1¤rÞM)1ˆ[¾ÿñ>ÆM“:Ý9›m2©¬Å{µÐjCeoqr w®|Öî-F~™@0›(CÖyx;ÎãÜý¨ÅÙ¢†ÏnÊžz’߆K˜íº�C×(S^¯d%‘ûðêW 1CKð áy̦¤®–Kèš"“ØLvÂVÁQäUüþ ,#ªþ44àÖ?¿ ¿Nñz[€Ÿšw­\$šC±“ñíjÐ@ðu‚]<<ëA«nxñ‹¢Š³híÆôŠ^-²}0Ò¾üïgžÈõS7GâDÏRÀ«Ç{õõ—ø› WÏ l{ .¶r~×î§Â–² ).¶8pÈçl»>…Æ¿az"¹|½æ¤/uØþùÑ)tÍ-·cæºP÷ÑZ1üt3 gLÞÄEÌt^ÁOŠ0,Â7øÊr5ÁNWþù!oùÚ]U0 ÊE;ÖSTc@ÖQ†¬ÄJރɨc%<¢¬äRÂoÃ9Œ¹Ç±°¥QÌ8úFãZ‘ûðëWž1CìBíõsŒŽûØ~S]—Ðâ"O%b XzÖ„šT©ži‘°?¤‘‡@W"ÇôؾåÓðqT í]+ìêú70>ø…ãÈçï˜J’D%®N,\Åž¶omx åçÑᚌ,mŠ\Ÿ}æãDH¥ï¼zÞŒaäh}žƒ³ñ3èú§ÂŸùH׆áÙ¿$•Bc [‡P=‘V>á^sRÈ—:ìú­\Ÿ<Ö\ÌzY’Þ=¿±ÙIãÌ x†87ÇÌÍ`F “bfæÝ9ДÐ?Åvºå{!ç÷>½·ä3”Øc±¨Ç²2dn%—Rwò7àVo?ÜׄÊu°ÙðD¹ ó¿/=üú•gÌÿ³»hl¨F¹v/J ߃V׊ξ>XŽÕ†¼¼^Ø»ŸÂ'ù˜¸6X½?$ÎÈC ®?- ãæå_0•j î]+¡9”ï?$ÖГ£•ÆËì8&ÓÑDåÂ× ¶]}n¶MM8©-ÄíI\ºãˆy¯pɶNE®/<N„TúΫÇ{¦6W”ûß°ߊœaÒµ!Axö/Iå£Ð˜Bà×!LO¤—O˜×œò¥Î°UUÁìNì+Ç¸Íøk• “áÏb‘ô ½#ñ,ÔºqD<wƒ]æÑÐ�³|/¾_ +9'C61Ünû?üöaÛâUø“R ºD¡ Y…[É¥„߆).rv¢¡óùÊ„ƒüNNøõ+Ϙ‘>Ä¥µ•Mè¼aB]I Kµ(¯>cÓ tDçÏUIAý!*#†þŠæ¼¼€mA§s<é®êÞµòÁø`*ÛÌ>Ó\•†OŠ‹Pªý+*Lª±M�‰u‚¸B÷¡­ñs”£Bwì‚böUšeI-H<j…ʼnJßyõ$rsÏÙ#çœ;Þ÷³�ÿú³I*…ÆBâ:V×YåKÁkN ùRg#MZÔÜŽh9à­f¶™†)0IïžßØì vÊÞyÎÆÌ÷ZqCÇfáЗb›ñ «,ä^òßEaþ&Þ¹é`MG£TQ*­äRÂ×{’V¬O<Ü—$[žÛP·×ùÙã„M§‡mœŽq#Z~¥3„ÁÀ?úÝžOûØ9a]x‚êƒ]W‹÷Oø§ÇàrtãÁ€šî,"ýAxF‚Üý)²€Ý�M~1öjw¢0'ûÌOCïÎU¡í]+ÂmÞ¦úþ v¼XÖ±8’î*©ðIE'ÿ8\=ªJ#[6b`'"òÝì«ÇÛñ.'H.)NŒNùŽùÙ–“ýDïáÄÙ¿øßÏ<¼ëShL!¤RG"=¡C¾Ä^sRÈ'Æ{sßFaåy´u?ÁHp®;‚ÁîŸ`¬Ü ÍÆØ1>¹ï·$½{~c“Aíò‹÷ðϰç¢tå\ûç¢öaÅxÞïõЙc*à€> Jë®Áé“Þµ:¥E)ŒF©¢T„[É¥„ôÓ‰Ñá® 9½±ÖÐEZ¾íFÐ.ð ]õûWvIÈ÷å„_¿òŒÂ`À¾®û» P\©ƒ©¥ÆO>É5§�Déä*,#AÞþ4gM{Ùì4t ¯¸l2þaXœ@Û«ªÞµr1‡þ}lØe†'ØŒËÆ€qö¿j6Ó‰Eøßá¸U&c€À8Ré;¯žÀ,¦gØEáÃa$ãP ÇW¤kC‚ðì_’ÊG¡1… ¬¾žP'_”לò #€ñ=v‘Ø8¬l¼¢ù�Ç;"F™@Ò»ç7vc@LQ˜1€*<’G£TQ*­äRBdY5˜Ê áÅFn5UžJ6f¤ãkQg‚ËqƲ°·ò v•îEeÝ׸lE»VF¤?ö–‘‡@~'Ñ Øeà1¾€õ9`Ö}‡NOævH”ƒ7¶nk„s4&1”à/…›¡‘)¾‹R‰Ñ‰Àdò…,ó†]ìF</²­S‘ë“8Ó˜™r᡹©dÒJßyõ0/ñðÄÐ…`+2—ÏEÑñ»ñÝžY¤kCÉþ5ƒ)×C˜çØv4¢Ùö/x“Þ”T> )~óðö^…žoºHàVö³ý.î8^E©=‘V>þ±1¼Ži¯�&þ…‘pCÒ“n9 Ãü^;¬Æ/PYÆ®‰Ë*qüüèÊÂKIïžßØìD&ú˜@ J:&@ìOâh”*JE¸•\JˆÞ§n `'K^ºƒ/§rÂä§Ï˜‘>ñ³ ±ß7>ЧÏ}¡­"ý}‡ ÌÈC·?1XnÆî÷ξìÒ삹úCä¿U™ºgÀ2AwÚÂu¼ N&ä—ñµîGاÈñ‰ä—ž@‹s=eUO'(_È2ãp¢hû»\–î yÔnL¼S(•¾sëYr™°M³º®ç‘9D`ƒMÕ8Ü6·oJÙ†dìØ€"’/'ä¼·8‹N¢Ãß°(©|öA·ŽPV ·_¼…U°Œ:aÙ¿4»`Œ¥•}7ZÏBw«‡3§%¥ M•Agë‡Ó3ËÓ)äK™¥Q´ÕV ²Þ„¶^&$È#éÝó{¯nYÑ=u“Ñ)Ì”@:¤F©¢T^¡§ë)«‘|˜—N „¤rBô>õÅt,rÂä§Ï˜¡B‘þ@v …eä!Èߟ05ØC÷°°ozb 8z†‡cq3IY÷Æ�•LÀÕ º²~¸L¥Ð”œC׊7�;L é`]\cšTúέgÑiÄ{1Þ?¬¤3ÊÂð¤—x×_‚i[Jt?s¼0=ØŒƒ‡oâUœ‡,¥|4öA·Žà3ÞÞ„†x/ãã³ØuÛ]?à€ñIÌ|RZùRñšcŸCÇŠq…üŽ.H|ƒ!<4ëQS~5zs0(c¢lb‘ôîùäa%pq#ÿ¦’*ÒG£TQ*X«Êq,*Øä™ê=Ø Òµ�ïí£Ø²å(n{S ñ•IˆÞ¯c@,긧…Û„fä!¬©þ¤T2�W'è^ȾӸ+’Icî1›EÌMGv=¥Òwn=ŒÏÃŽýÐßë‹ìÊöÞÅ¥êR”ï??²œF-ga+]²,>ñ½`öDÍg˜Q˜Ë¾½«e; Bg$ðê`¼èüòëðZmµ§Ñ9;©Þ³(‰“ñ@ZùØõåõ hzâæÇfòÃVw&Çsög7\6NÙ¼Á>(…|é€ÏãÀK ¨Ø}'MmèugÔsWÒ»ç76qã8ºK×8©ËZqUW‰ 5n 3ºaÓÎ e©£Qª(,e…(Þ³ƒ-G,YRbPºü*téì;T`Fý‰s&[O&6Ϧb&)˜€Ëþžu8P%Ópu‚î…, Êö-vìÖãÞʱ¾~ôvü€êmå0þüˆýÜˉS+^Ré;¯ _X°ocœ¾¨¢ÙÑ„gá)2ùœMx×+ÃnýmN¾t\ªÁ¶2#~&ŸµâDmûŠ—€”òÑØ Ü:–Ü×q¨à­àïøå=Ôu½ÿUîw³E¤Ž%ø††ð<fùÅ=®¸€É®SØ6\H!_F`ü˜põ¢­ñ´»êЖ¡5œ¤wÏoloFGñG´ecá ?:/kŠ”ô~)ûHRE©LàQïHŒ[-þªF¦{*1Dúñ®–‘‡ {òájÅ{аrY‚EðûˆÁŸ޵yV&Ã!HP½‹øâf|WZ•xpu‚î…ì^Xb#GŽøåmìhzôú$Ÿ¥€_Ïktû]cÜ]Ù8e·¢óÙ–“w}Æ Ë>’Z.^ÛqŠf/šž…æïäs6á^ŸÆ>HàÖ”qk5L+›¹¤\‡­ï÷p°d>ÒÊ—ÀÀüPàâP̃TQéàE‡Í¹Êœ|mpgèØ€¤wÏolv"óÓ°ü6Æ<ÿ¾º-[ãºýÑõ°¢Hã ’4H2uâGTvFÝ‹»-}˜º‰¥§í¸œ kú(M^0“pÞ±²ùMôzüìçYŒt·Ãzg�ãhÄ@ô^5(ˆŒ,öTéqŒ1…6c@�¯ÚªðŽVÛÊùGr6r�æÃR œ00Âñ'gŒbÆÐväÔ:¤?7¯àî¸ê-‘*| |!;Ûs†‡‹'ÓJy‰ _H:©ôWÿ%Ü/ý1‹fb}#sáO|$mCvÌ™íº�C×hœ¶ã–×+g´¥•¾>Hà×1o÷=؃»ìóðÇ™7J+ûn´ÖB{ì4ïè«îÌg(Ýq!˜}…q‚¿ëÖs X*´¨Ž:ºË+ä^*¬ü#"ôîùM&2ñchŠÎ¡ß½ô¢íaE‘ƤõK&Ψ'J‡§A^M&cÇ"(M^¡L ³f/ŽÛFágûè3óAäæ” òØ!”éú ÷i\ÒN#}ƒ˜Xi#bàzŒ›&ûÎÁh¾çDbïò}9!õ¯c@{*q‰ôö*0#AÞþDÒß}Ц‘h}M'µ ék_ ¶s9E%ƒ¼Êð+Öã[–ñ{1pçNjß…&*¤Jr¢u‚ ÌÂco‡IOÞõ4¥#)Ó<x¹½Ìæ§Lã"•¾óêñÞD½îz—]ÜÃ¥¯éS|¨k‡Ýù<&štmH˜Ã˜{ ‹QíÅŒc …?r‘T> )„TêØ ¨0³=’´ò%3”ƒ…}ÿ0ÞvÞ²‡oSj ˆ»^ˆ*ÚÌeƒ“ôî‰ð؇u½¦ös‹~ô˜OãD›;¦#øß§Œ4Î e—ÝLl=’ŽLœQgèÕ58on¸(™ ¨,ÚŽêæÇœ…c&Pš¼Yt@_ÖŒVf²5yï Œ æ\C–Œðõ~¾ÁP<úBÒÚ°ƒ}i!rrÂül% ¹Ç R¿’ÂÈäbO%‘þ°ˆ)Çm´°c‰µ×ö0«#=h³ÞƒcœÓþTünsº8¹¨Yɧ]?¡nkEÒì7qyóg?µâEðþf`?[Ë‹DcðZ„m»g=°£8‡Œ‰y(®ú ?œÑãºj HžN034@.IëVt�Ÿ²[JÿŠ]—0˜ 6E¶u*r}²ãIgÊ4^=ÁÀžq/+…mÛ’¿¡“s„–ü>›ð¯ÏÎÇê ¸ÕË]°¥¯ •ê`³;á {V,#©|S¼:ây�.Íû¨1÷ó h¼ïf‰Hì»ñÑ#<M¾�â!…|©ãÁO¦.Ìp1«SåÜÀŒN /éÝó;AÌ�æ74}ø©¬)RÒ"3HÙ…]ÀJìf’:™8£>‡1ÏdxG( ûÒ¨Å;û[áNlÄO¥É+¥§h: CçïÿFGC 4Ál ð»­8rDÎ#.!ˆÞ¬@dÝñ64ÅCÇÈLx`d×Idå}_øõ+Ϙ!Œ /öTbˆô‡%ÌvÇûÇoÃí_ÄÂ33ö徃âÊjT”âz×dïO~'šÊ¶„wmö¢´0—•i¶êbQ­Î¸Lµ08|`^ÝÄ‘Z¹½¬¤d#æÈaŸ§&7Ž5Þ„=œn.:Ò¸Jr¸:AR.ïÖ¼}¦Ø6 Øõ(·¸±à4áSóÿ&Û:¹>Ùñ¤3e¯ï-è›ÃåÖþÜv{MöàÏ×mèNÝÅx¸A³-'ÿú)ì¼æìDCgähù]6á]ŸBc [Ç¢CÍ•0¶†7·Âåšn?¶UÿýÙŠ;ÎÈœWZù1~¯}«¥®ç …|©ó'f¦—S‡†Y»Æ€xžvôÿ|y@ïˆu…¡ëaE#ü Rv‘ÞÍ$u¼¸gµƒ—›Eôùyæ%ºÎAMó@Ü�&é£4y…ÂY j>À‰‡^Ì»ïã15Û1%«lQzO¼6çĦVJâÅÀû¾ ðêW 1C0]ì©Désp膼0˜Wè¬yËZàü™Ô ƒ†þÄøÝèm!ù“ËPVùŒmO‚ ¯t¬øçÅQ`]AÜÙwqéä!”6ÀÒã„I5„«ÁEΆ}+G>CÆ€Qøì_ÅM™FȶNE®OæÍt¦L#õŒ>÷…Þ˾a8ŸÇnz-º¬ø¶‹ø¢2L>DýÖ³+ïléÚàÁu} žx¸mÈ–ç6Ôí5ÁA~ö8aÓéa Ç…’T> )^çè8kÄý¨¸Y‹ösøßÿ3þAZù’Í—ºžÕ•‰!tèÿŠGÐÔÐ8ß‹úkÅ÷amBááëYˆ}‘ñ¿O!ÌŸðyì÷ßfÛŠ¥^z¤w3ID† ¡çç£Ü­³ÖÞJ“7ØÇ÷z%èM¶ŽðÃMá=Ý£°u—ßõ#ªKòñVEýž 4f¤C&{*|"ýaÏšŽ¢¡Ó…áŽÓتy5äü¼Ö#‰ã3ÐÙŸÌÛm¸—VÐ;r<`7¶T.X°ã÷ô0z,VçâÓò“°ªÇR†§oC¿u7ŒÎІTÀ®Cþ_þ‚üeý þ–OvuŠ ^ÿyðˆ½)ÓH=¼ùe2‚FñäVÝ–Ô3`bôExã%~Ph,ºÐòm7¦ÈÏWèªß¿bT•B>š)„˜:˜E¢â.P3ÀªCýαÜ`êúØ^}Yq©ëÿ4^.…HÐHÿìÍGP°vb|ó?›�7:f44?,VM#»«9ÛPþù!oùÚ]U0 ÎÄ}déÝLR‡œ×Òá ǵÈbi†®l€óóR¶·Òä][Äè}à5oœGÃ9F–‚Æ€£‡Ïãa‚žrüú•gÌ p5†×1÷‘8À•Š0¸ýñ ÀT¶™ýÝ&x€ñùßÑyátº«±QžÃÈÝŸ˜‰>\¨|?èÞNd‰”tƒÞ1Xxv—û&Ôq”ÀÌÁm½¬f�_'Ø…–·ßm€Ùþ‡ùù»Q×ò$¡_vu*¼~ªñVäJ™FêIÙ@"ÑÛ‹ƒ!Ûr’ë§È—Z÷B“[-©g�ÍÆ¯ªc$I]¿_¯€�õìH4~³s¬‘nXm]°»&RÔ·Õ‘ôìu7 k¼^ØÛ;øÁ8Ðõ°¢`F`ÞM‰ýS ‘…6é|Ÿ^ƒ[ÖY Û±$p3IFG¢'nì„ÎyûS^/i{+MÞµ…X½—{܈©_aÆ a‹¼°�W*ˆíO>LðŒèìxïŸOØÆòö§7p·ccI.E5µX»Å‹nÜ4=! ®œ°ÏzÚ…‡æF ½Í”CJ:‘ e!»:%ÌœGw?]1\H¥ï¤žÔ±d[NrýÔÄ ä@·+²Q#…|4SÜ:èŽÀÎC⥮wÝB}Ѷ¸º$…|©ãUg…[BoJIïžßØaË›&Å;‹PPaÁèp+öçjØÓ ʘ"%-¢Ý—{¾_ +9—â�$–yŽ)ÜLRǃŸÛðGICçÜP”£K­­$mo¥É»¶àë½w[bÏž'‹ß ÷¸¡tù…Á¾„¸RiÃäø`?[³;^‚,¹û 0y»£É¢²¤9z5€;—NB[ð–L1p䃀E›Øgš‹ÂÒ½Ðî-FþÆp¼#øLeuRщDîÏ„ìê”@c@Ré;©gíb‘B>šÛÀ«#QÌ�Ç|Öö"ü)‚´ò%š‡h³½Ž7±/šÈwi€MÎENña¬ö¤iM3…¤wÏol²CPŠíM¿±“â:[‡³ö™àï]¦ÏatÆÆ{¤ëaE3 ‡¾Û‚yçYÈb/ÿ]æo’0<ÛRì²ãf’:‰Îàça»ñ×°ûôjHÙÞJ“wmAÚ:‚ðø üïK¿~åÉ/ ö%,0À•Š0"ý1¹Š ²æõ¥PÑÕÂlC´]ü›|0LþºCçÑãæö¶|Ÿz:¼ÀžõX`¨* 7È)A•þÎèÚב1ÀÏΕJ¡)9‡®o�â)0€¦ƒu cF¨ÄÂÓ îÏÞ÷3Žj Èäúª1@ü:æáíi‚îÔßq3èAA¼î⎃›I(‚´ò‘yÈ70>ø…ï¡èX‡ò¥Ž×mö<A'1tíDµé²èõ%éÝG763Þ/OÝM€g;Q[Û‰ÙÀ8zu pãˆCàz¿×Cg~Œ©€úü-(­»g‚Ü´™'Uc€Ü°]gƒ~Ž’²Åñt<fâš”¸í}öÇLÒGiò¦Iÿöf#9olD³í_’X#S¯÷X«kpÞÌ c6 ²h{Âø rJ—_Â\©#ÒH6bT~‹Öå¾,—¡Ó–²“‡kìÏpNóß?òö§°G +‘ƒ_RŒ°4 óžwØ¿ ù¥Ÿ£ñæãðXµˆ¹éõt…l¨ìŠ FÊêW$›Äzk“ôàê„P÷g÷û™G5dr}Õ n¡Ø$=òvTÁ2ê„eÿflÐì‚qPžõ[¤™iÌL¥~„J ùR‡•%f€vvM\gúÕ%@{ò:]“Ó%½{~cÏÃ}ãShâL ò¾@×lìB„ÿ}•X”b ˆÜ0Sì8[AÒkeòêJ“W(Œ?l@ÑÅœB”jµØ[œE'ё໔ðõ~cþD Ì ž4jñÎþV¸ãØ/ä7”.¦‰p¥"ŒH çZ;pö܃• R!æà0œF[‚�rr÷'æU;jO´âǰ*O1‘Ò8ÈÞ·ÏÇK8Yþ,èqÃìz[ø.Âçø;vëqoÅPÝÞŽP½­ÆŸ±Ÿ{`9qJõXžNt&dW§Tc@& ×WâàÖ±è4â½íMa, _ÆÇgIPdvlvý€Æ'ìèÄGjù„¡’B¾ô Æ€º¡<0 ÷£&TmÉAA™–^é éÝó{/,Ÿ`kÐÒʱÀZï ÏN¯½‹g’O`Æ1Ð7Šø§73RŒ™À×ÕÊøÆ$Y»æ*e”(–wi¦my(ÑýÌñXÀô`3ŽŸû^JHñ‰JÑØÔˆãÿK‹êæ¸ñ2b¿/-«ÖϼD×Ù#¨¡TþŒàJEÑýñ¿‚óá0êtЛÚÐûl*éAÞþ´ˆñ{­h‹zÇ/=…õ²#Å#W\Øqê»à5Ô¢¼¼åumëè˜�™CÄFöy’gš¸¼MOcÓ¨©¬@Ú)‚0÷gÿû™F9Æ€¾ñ^wÃÚ75Ÿñã©Õ÷¼6!Ûr’ë«Æ�qðê`¼èüòëpÎþ tÖžFçì<¦zϲsÉØûV>áG¨¤/=ˆ1àÌ®aô[ ¨*Î Ê<w¡'j# }$½{~c³“‚ö38|ÉŽ©„7Ã<è}X’~΀[½ýa }¸ô5¡òClv'<YÏᾎŒÁ€|…¨4¶ðI×tÐn«†‰ü|ljé )Šhh–wñ Œï}³'Í 7÷=óÓ3†~/1Ñã†Ðr±õG3徦"7¼þï|³&y�9yûS q€É¼cá‰ez0þaX×[6Ùnœ3<Ä/>Gty‰‰¬Ï=” éËu&p¿Ÿy˜àõ‚¹ÑÙyóÝëèžÒ“$Æ´ìÊW×-û™üŽ_ÞEMç+YÞÓäú#}ƒá£xôò%×S¢¥ûuT;ÉkL!pëXr_Ç¡¸ñjÞC]×ëð_Eà~7[Dê~„J ùRg¿t¹ð'ãÇ„óôZr,Ž´íòÑ8;ÜÓ%½{~c'™ðJdð Ÿé%Q`0NÉÙ‰†ÎlFùUº1 �¿?Uáçáí8s÷£\ÙE·á³›M•&o˜i8 eØ­¿þCV:.Õ`[™?“ÏZq¢¶]/¢;+¤‘¢‘÷}àׯ<cFf`’¦»SIHàU[ÞÑêasxà ºØ/Á?1�óá ]ÃåíOì{ߪCýNÌ K+®ê`{õe8‚ žÕ Ç#zѬÿŠ ÁÇÏv´ßÀ¸¬Ç­d 0†®œK9=³J|¸:!Ôý™mâê¼Pcù7)àÕ㽉úúKgËÕ3(Û~ÍŽð‚7ŠlËÉ¿~¢ùº||yקИBàÖÁ¼°`ßÖðFÖJ¹[_8uyÒÊ'ü•ò¥YË}€âÂÜ \4ïcÜð ‹S&�IïžßØdRpu—H£q±ú}l,ªÆÅèÜÃ+ÚÃ]+®ë[ðÄe•nCÝ^äg6;q‹:‹–9n |~ž}A¯ÙXfö¶ni×J“7Œ–}a×£dE³MϤŸd’ºWH#E#ïû2À«_ÆŒÌ<ÝJêDúqüM#Ñ:ÉÝýˆEÞþÄàÍè(þˆîç¤ÿïףߗ‚3ûÒS4íxšü°³°–! [>FQbèH OϬþ-Ìý™mŠ\ŸÌ›O òüÎù ÎWckcšTúΫçÍFþˆò4ÄœŸA×?þÌGº6$ÐÈ—w}ïO¨®4À¼òŒ[a>_…¢­5²Sü:æáíúXn_‡I¯ƒN×s§3aÜiå~„Š|¦b¬ÊENÑAèZ{ðl:Z—2¤wÏolþ±1¼^šËò9Š4y(>ð)tw<q[]+šQ´4=Š‘3cÿ‘N‡¿À+tÕïOûì×êÌñÜ :lθVìs°õȰÍÄùù�&úMìà¶œqKÆsM+M^¡,a¶ë ]£|CVLyÞ}”ÒF„§hä_zxõ+И!ŒôÒÝ©¤iÇ$gº¸g™IVŸP·µfwüc=‘ïË»˜ùéX~ã-×-ÔmKíÝ<Ö¤ A\húø؉ël`¦ßÁ™ü¥·†žžY%>\êþLà~?D®ž7óÆÏEøž|‡]ï| ‹;ÖXŸmÙ–áÕ㵡Ñâäéxp3¬¾9²Tôòå]ßÿž×üVb|4î*Ä~ËhpñM¶å#ðê`ÛkÐt�¹ìï6ƒäÞ½(-ÌCî>3ž-ľà%—Oà*)äK¬:«¤Å%½{~c/büÎW¨<P ÉÝj!î~óðÞÑ£ºò+܉ ™®‡ ûðªÊqì ±EÊ™ê=Ø\¸øð3+?¹‡þõŸðw²‰– -ª£äá•3Ÿ¡´Â*ýB4ççƒÂ<”Ô™¢ÒjY`íÉìîÒä q³íÆ?tç¨t»Ñ{)<å7øõ+Ϙ!ŒôÒÝ©¤¯?øh*Û‚üâ=ÐjÉdŒ7a«.ö<ì2òö§@7g r¶7&<Ë'€ñίp*è.»„ÙÎÓ¨íG`ª'¡Am­"4=³J|¸:!Ôý™Àý~6H~}Vº 8XsƒqÞÙ–m^=‰ÜÜsöÀ(ã™ü¤ÈÈwµë3ãqö`še<NÈ­#[ãm7ÜÅÈòùufnëqi‹‘QjùXað¹a¿ùôd½ÃÎß;ì{"ü¯ÑH!_êŒávÛÿYe3×§½¡æ éÝó;4)Ð}K0bkf½ _ÄÍ7L×ʆ]|—¢x¯–”E•#Œ,ý ÷·d@ü+ny³ïòr3Y%†)²ìJgàü|ÐÝú`lÐ;öŠ‹Å˜HJ“W ”»Ý’~*„æ_zbêW˜1CäytNw§’:Ñýñ»ÑÛ¢GMyÊ*¿€±í Û¯(òö'ö½ýü>Ç.ŽßðrúM‰¥QÜ841X4È«{ˆøKµˆðôÌ*ñ!mA˜û3ÿýÌ}}Æ?ÆYä\†-‰·U¶e[†W·•ë.')x:áO8בº ‰G$M|c®Ï¼×ÞîƒF4ÛþÅÉöK¶å#pëXtè±yþ˜9-ã1£Löl¬¾˜Ê6§É/Æ^íNæäcŸùih#& )äK¬5uqŽÍsJëT×ü”±õ›¤wÏolb 8 “+Ú•Á¼Ý†{Šó ˜À£Þ‘U,9Râå£SèšKüÃ\ê>’Ã@"¹ö`2æü<‡USM-`²Ç€C†n¸yn?NXŒ·3|OJ“W ”»Ýòô> Ã…Üã¿~å3„ŠvÝ59Ÿd,LY%9‘þ <²8AÞþÄö÷™ľ–Ä”Æ8Ùö2‰Lެ¶Gp'0¨­M„§gV‰O'º?²­SÜëG9¹(*ÿ Ÿ¡TûWT˜äMMË«'0‹é¹8º8?€¶{ñg;R¶!;i äË»þJÔ §è�>ÿd;¶”þ»*.Åõþ d[>¯2WܽºàÑ$‚.s-JòóQ!»gÀr<•hè^9ÞÌ8s$~p])äKé7s%½{"<fÞùøck\¢¿O^ܳÚc&9ÉR•d¶3­Lpù¼rø£t¤ØÑ“¥š / ã~/ãÞJ“W(t»Ý’6Z! Ãïû2À«_Æ a$r.‰£"«$‡´_ˆ$md,"ÿ.™ˆ)1ÿsû*nØ£Soq`þÀÀÀ:è_1t·ÿ•ž™Q3w„ô½e„º?¸ßÏ‘ë“8!ûÙEN)ôýì3&ADë`ñÎÀÙØ7NH¶e[†Wó ýªP”Ã.¶ÙßGJ´Oøød[N¾|ôòå^Ÿq›±›íƒ%ú¾ —WÀ®G¹Å§ ŸšGdéƒ~¬\SOpÃð7œ³=9 í2ÆŸá³±!­|ä¸âûØ°Ë O”ÄÁu¥/u<¸n°`ˆ·q]`6ÜZÆ�îNé‘hÁ˜8UIvù¶ªª„A¤dÀùk• “áÏÒáµ^‡+ÜÝ K3te{P}ñGÎïî$I5EÒj KÇ -\\ä%™I”&¯@(w»%²Dn¸à_zxõ+И! vš0uÜNH–aDúika‘Å òö§LÄ”ˆŸ‡WH<œàL°“»¶Q3w…«BÝŸ ÙÖ©Èõ£9ËÆ€qö¿ñãDH¥ï¼6$é7îg ãêù tÌ…ÿŠtmÈŒEW _^ûEõÁ1`>ûW²e´ ðꈖî$Yîf¨´ò‘´ ÍØýÞÙÐüŠà‚¹úCä¿U©�Ï€§hÔ?Œûœ#Ìà®Þ wø“X$½ûèÆ¦ÕÝ)=’,¤*É.óiÒ¢ æv\+Øj¶a›i(ndÒìâÃèÈDÔ Â*¯ó"öëúØM/îþß·ñ{”ËTv<1”&¯@ºÝöÀ5XjxzŸ†áBîqƒ_¿òŒÂÈ@ê8•¤DúƒðÈâyû9#6¦„'q|^9KLÚŵ„š¹#SöZA û3÷ý,¹>;¾: غ­1lè"Æ€ü¥p34 ¼²-Û2Üz‚;Û»£we ‹Ä›²H׆úùò®ÿæ1ô[wÃè Nvòÿòäk{Ôe[>¯ŽDA"y%²J>g~ ˜lƒ¡á[ØFÞ„ŒGÂðpL6cJê°ï8‰ÀKz÷üƦ×Ý)=2±`Ì,Œ÷æ¾ÂÊóhë~‚‘ kÉ»‚±r+4?bÛYŽÉ’?™lå¹¼ŒaØö¶äèRtK—ÒCiò …LÐ{Ñív˾ ÏV´HšÞ$¤VHã¼0ïû2À«_Æ aàý©m£\]aËð-ß²Upž¢ûß»î{\<þvUÇ,N§?ùñÜõœý2ÖØqsµì+I¡->\dÂËB…À× aîÏ„lëÿúóðö^Æ×ºaŸ"‹Úä—ž@‹S¾(ó^=Wèѱ ¯ž‘¨÷@Œ×)8&@ ,/ÿúdœìÁ÷_`fçe‡ùù»Q×ò$îF)!Ûòxuxo¢¾þgÜaËÕ3(Û^Ã|×în†J.Ÿ@¤/u­¢ÊÚˆ@¯»Sz° ÆÆ6üÆø¼n¸l (JyÁ˜iïÑc ’Âí@¤h>ÀñŽçq-dÙ'QGÏÃvã¯I‚ðqñÀZ]ƒófŽ;²Ù€Ê¢íYðÄPš¼Ba';W+ãG¥Þ° E5W“FÙÍ6DŽ lOöûã÷fþ÷¥‡W¿ÂHtŽ]Hê8•dpûƒPï:÷ûÒ±�o» ?¿ ½÷7¼½#¾»púÌÂÞÖZv—5 ÕÌ™€§ÝŸ ÙÖ)ÞõÉ"¶Ù�]ã-¸È;#à…½½Žqy=¸õ„â.D¿H¡$f@xAS _þõ‰Áç*ôºïp3˜mýl¿‹;ŽW çìÙ–À«ãÍFþˆŽË?gãgÐõÇ&¼“V¾%ø††ð<©#â^ ­ŒRÈ—:ìšã€½É‚ê1ãè4ÝY Æ�zÝÒ# Æl@Ò§Øa5~Ê2-´e•8~þGtÌ&}Ùe®ëLxÐÏ=;ÿ/8G'¸4ÎaÌ3É¿fOµxg+ÜõFVš¼ žŸ+D¥±…·@µ\ÓA»-œoYÔNž8RÒû$^ )}?‹ðëWž1Cø©ãœ¿c*IZ$•Ô‰ôáÞuÙú‰}ù ”}°WáJÛ=€‰~*‹rƒ÷Â+²c•vaØó³8•âÂP%><èþL ¿Ë&‘ë/GIÏGñÎ"V,nÅþ\ 4%0G§²-Û2¼z˜1´Õž†åç,¿&<z(]²PÈ—{ý1å-äoGaA,£NXöoÆÍ.ã{×e[>¯ï˜Ú\œÍORþ Ûñ­È‘=µ ;±ÖB{ìt|û`9…êÒ}+G1¤/uØõäjై¹éÙ˜vNIï>¶±étwJx F;OÇÕ3{1ü‰™iþ# ÇkJ0/Ñuöjš‡Òä «‡çqî¾—?‹>»)ûN_ï…{1ð¿/=)ÕO±1C‹˜êéÁP´-w½Dw—€Hî]GPVŠC0gJêLQîñX»FâNä×&†*ñáé„@÷gB¶u*rý7pK±½é7v,}ƒá¦:œ Æ6x—ésva»í$•¾óêïBKûHÔ¼&yJYéÚ…Â@¾Üë0noÂCá]ÆÇg±O˜AÀõŸÄ="•mù¼:ÍröÀ'ï»Y"RñP<„üâ=qbÉpË>± ã¦I!_ê¤b È,’Þ}°±Éî@ó‰Ðù«…Yx†ž‡ŒÀFá™Jhé ëaE“¥cÚ¤r®’œ{ëГm„çxEÊTŽJ“W(d·ºÿÐéRv™“žÞ§áÅ ÷¸Á¯_yÆ a$°Ès¢»3ÞvÞ²‡o?—ilT6‘þ ܻޠ¬þ‡`Z°ƒ1ÑÞI{,×QŸ¾0T‰O'º?²­SÜë3ãøòÔýWÂl'jk;1G/EÙ{WÈ�}úùò®ÏxÑùå×á1|µ§Ñ9;©Þ³ôd`ßã:ã]ôs6?ív'F§Hd˜X¤•oSáiò)äKâiþׯ)ôîIcÝ_ÞÚ…úK8Sù!rÙ ðÖ¿ý€ïö‘sd°ØŒ2EfÈÄ‚1“x`­©ã[²£KëT×ü$½[e9^cIt,# ù”&¯PÒp™“ÒN„{1ð¿/=¼úhÌF2‹|(º»j GŒ>ð®#(«?Åc“=2tÃÍsQuÂb¼½®Ž ]ªÄ‡§ÝŸ ÙÖ©Èõçá¾ñi|crÞèš=ŠùnváÕãmÃñhÏ«:TTè`MR6Ûrò®Oa _îõ—Ü×q(n–÷P×õ:üW|¸ßϼ:³˜žK}µ-½|tÆÖHi8LGPR¤E½ùQÂÀ¥™DÒ»'=Þö Þª$¹íI껿bƒÖŒ_Ûj°[×Çȼ':t§Ð¢´lY0f’D‹Ï¨"ÇËà‚HXŽ×X$Lå¨4y…’†Ëœ”~Êg>÷£”=pb¿/-üú•ğp‹¼Š0Äö:ûƒ€>îB+†°ñ’ÜGLYW1„/ UâCÚlîÏÞ÷³@äú xaù[«ÿΙG°Åz}n_Üw`¶e[†WOBïŠèeoC ùr¯Ï¼°`ßÖðæÀJ¹[ßï ”f[>‚˜:¤•ÞØ‚`ü˜}Ž×kÑ@"M‡¬«Ä¥±0h °[ —?s]|¥´lY0f®,âY·£Ë�̆[2Lž„çxEÊTŽJ“W(Â]椄¯÷Â=pä7bëW–1C‹˜vv„&V½V_Ø{éA›õžÔ,Cðû»ˆžv᡹1¥¾D ³?±ó³u0»SñC àUÛ)œ°ôpÜSÃÅE)®„/ UâÃÓ îÏ„lëïúç¸ÿý%´^MMç¥Òw~ÚÐhqò盞'h«£Á»‚@ŽB>Ä÷¦\5žcÛшfÛ¿àMäVZùæá½ß SëeÉ1;ãeØìcIãe[>‚˜:¤•ÞØ´"éÝ“Æ&1¶Öua޼üu…x»¾>×%<xM­­0_üÚmõ²º;¥G&Œ™ä)õW™M¢]wîð'I˜ã5‰S9*M^!¤á2'%<½OÃGîqƒ_¿òŒ Ƥãxÿøm¸ý‹XxfƾÜwP\YŠ2ö™ùÔÝJ±pû3þ�'Š6±¿ËEaé^h÷#cò´±òö'~×UTÄuÝ�MQ-Ì«Lzƒ¦áu¥nP[³ÆÐÝþ+¦ÖÝgÒ÷VèþLà}? p¯/Tç³-Û2¼zyWhJ¨ˆ»À>dŒ?dç^Ä«&§¥Z-öçccÑItx)ÈvÀ¼Äðs2 r wB«Ýƒâü\¿›Ðe<ÛòÄÔ!µ|´ÆÖ Iï>ØØXŽžCçø:«·à=“™ËÚ€]ìÂ9ç/A~Y|W?ê–èc&ñÀR¡EõN¯èRÿ ŠË­ u«Lt BîTމ XÞ4\椄´Ó ixàð¾/¼úh̉p4tä„y…Κw±±ŒdIøóQõsˆô?\¦R¶/C×ÊB˜x  é`Ú^Å7ÈÛŸHÿ(FAå·Q™�.C§- ApN'w„ÔTT’!V'²­Sbt^*}çÕã½½édz‚-=WqâD;^È´˜å]i¦my(ÑýÌñXÀô`3¾‰W2¼‡¹×_r™°M³º®çÃh`ƒMÕ8Ü6wŒË¶|1uH+½±5hEÒ»_nlÆ7KÃaT³P^t¡åÛî¸î×ûÆÖ#îE¥:´Û{`»tÚåÅž±TZ*GŠåe&á0îFÞÿº€Ÿý<‹‘îvXiÌUH«ô��ÿôIDAT&†ŽÜã¯~3„AÎêEC§ ç±UŽí†õȉ„ T•Ô‰ôâ ¹+Ò—VXà^bsËÛŸˆ{nΞ{€qžÐspœýÿó*ã#uñyT”ŽXȶN‰Ñy©ôWOܘ$NX*dZÌò®Œ“ôQlFf沯Cïaæ ¦g"±Ë¤”/˜Zp%elÆcFYø˜37ƒÎü,ÛòÄÔ!­|ôÆÖ IïžßØ‹¿{ݳQ/ÿ¥§°^vÄÝ)¥ÿa-`ÚõæÏ e— 9½Áü™A?&œ0UoGÛŽdG¥BgQ®k%óÝÍ—Ðj¹‰^ °1P-ï:köâ¸m~öøÌ|¹9%¨<vˆ}ñÈÏ ¤÷£/"szàÈ=nðëWž1C(Œo�¦2’fŠN°‹¾ùßÑyŒ‰WaŸJa±§’”HX„Ïñ-vìÖsŒ¾ýèíøÕÛÊaüùû¹–§xFéû1�tBwð8Ì®Ðh¬ô¯ñ«ñkX½\³E¨‹Ï£¢tÄêD¶uJŒÎK¥ï¼zâyô³óÏŠ-جwðu?ŒtmÈÂLÃa(ÃnýmNlˆt\ªÁ¶2#~&ŸµâDmûŠ—€”ò1>; ;öC¯/Ò~½wq©ºeÆ{ÁÏ,§QË1¬d[>‚˜:¤•oÓŽFüÿò>BcOj±‹¤f$½{~c“TåÁßÅ”9’ɿыð3H’À.î¼v teï†Î„çlGµ©®éh«­Ò { Åò’ÉuY3FØ· 3Ùš¼wPfF€k%—¢÷–r}ÚrÈ=nú•lÌH‹€>ÞŽ´Jfˆô²ûqÙÏäw‰ËÛØÑôtÅ0L~'-‹˜´}ÊÊù_¨´ýþ]˜À$\&Tç±r•Ã’Š1€ºø<*JG¬Nd[§"×®óä³ðêI3@Sx7FâŠä}? ð®<IÆœXyE³MÏBówò9›p¯Ì&°1Ž<QE³£ ÏÂ;ùœmÄÔ!­|ÂcI!ÍHz÷üÆÀk=ÊóW8nWp¾²[«/Ã1;) úa¥q)»üÓ?„'Yì Q°:‹]FO.sóLÆz$0ãècËáI‘t«4yBRuСó÷££¡š 1n~·GŽÈÑwùþ«tc€’åW¡ ^˜íÆ9ÃCŒñ“F——˜ðE:Ÿ,ýÉïDSY´&¦‰'χâêoqY§Çõ”Œ,TÅçQQ:bu"Û:%Fç¥ÒwRÏèó° ¶÷ æ(™^Ã—Ä RÒ6$‹Å® 0tFÉ]"2K+ßktû]cñdâŽÁ=ÛòÄÔ!­|ÂcI!ÍHz÷üÆfàÃkÞØ°ß“ï°ëaqÇî¦Sý°Ò8ƒ”]ˆ[̃б€\-;èyä?›¾ɹoÀ­Þþˆ )}M¨üP›Ý gòI°J“W(l_YÈ¥ù�'z1ï¾ $Èd³]öHÕDïUc€ŠJ^Œ¡ëç k¼Y¼°·w$Mã([ ¼‚ãæÔU€öƒe#€ ®ÉЄv1€”NL1“pޱ¢”#b*Ô#V'²«SLðúÏW ] Ô^Ré;©§|9m ³ˆÀ¢0]̶œäú<=2J!ߊ1…%æ(Õ*d[>‚˜:¤•Oxì")ä£Iï>nc“‚‡?siêM´žÿ ûj®`0Ž…Ÿê‡•Æ$i q :a:¶%ût°¤’¶)ë$ЬÏ)9;YENœKÚ¬ÒäMv‚á{ÍÛA¤Ò¾ª1@E%D¤? Ï^h4ù(ÞY„‚ F‡[±Ÿc4%0˜` —½?®ÝDcÝ'¨Ò]ÅC¡Æ�ÅS¡±:‘] ¯Ÿn&©ôÔ³b HƒlËI®Oó{˜öö#ˆ©Cjù„Æ.’B>š‘ôîcÛ?„«QùÍÙ…’ÜùRÓ"3HÙ%*€ û“ßk‡E÷ŠJj`êt…Ü5eÁƒëú<ñD¹<=·¡n¯ ò³Ç ›NÛx²¡Qª¬ÒäMÒ?S™·›èj P:óxqó îŽ ÙëP‰G¤?Èâ¥ØÞô«§o0ÜT‡³ö™àï]¦ÏatÊs67uȘ3€;¦¨¨lÀ…ú¯S;&@yŒå!V'²«Sª1 ë«Æ�qˆ©CZù1íì€ÅlÂÿÿ!›qj�Á¤Hz÷üÆàU[ÞѲ (‡'|.‡L À|X‰nÂÏ e—D©ÁÃVÊ 6!§¸¦Þi>é3Š–¦G1õ2cfì?ÒJ+x…®úýi¿�3‹Òä Çk¼ÝDïUc€2aü^ ܹ„“ZÀ4Õ�q*Éàöf¼_žº š7Û‰ÚÚNÌÆÑ««H8ÑØŸÿ ô7RË&@yŒå!V'²«Sª1 ë«Æ�qˆ©CZùÔ�‚B‘ôîùíƒ]÷i(Àn¾T>Ô?¬4ÎIe\ÛIÑZà C:<°V•ãØtÄM>\ÎTïÁŽ`„h~Ë÷Á¿þþŽœ(M^Pž·›´«j P ˜~Ö‹á0Šs4¬üy(®ú ?œ N%!‘þ0÷OQ@2ذ¿ã•¼/Ð5?XläûR±ˆñ{6Øç“ $$¥ð¥~̦4ÖÐ~äJEiˆÕ‰ìê”j Èäúª1@bêV>5€ P$½{~cÿ ·¹ ]¯8Ÿœoÿ u[+`vÇÚ[ïK‰<8¥ÿ6ô 7e1XÊ Q¼W ­6ª±`d‰íß’Ií_qËKC D¥É+Êóv½éÄÄÊ$?êHƒù>œL Cê_?Æ€yŒ˜ ‡•Y“¿Ço®7aæf0£xM¤?4cŸ`kõß9yØbµ¡Û5‘pR)} $N#Ì- R LJæ#W*Jƒô?1ˆý~rTc@& ×WâS‡´ò©…"éÝÇ4v0ÝÐäïaV{QZ˜ËþÍ&lÕõÅÝ!XïKÑ1â1çÎa.MàQïÄf'ƒÞ^4ë¿BãÍ!øòÙŽö¬D”Vš¼B¡;o7_ï9»‚Þ ¥…ÈÉ=ó3:ÏH“úùÆ bô|³‘³1¢Ùö¯¤)?7îfáqÜÅ¥“‡PvØ�K ìý©Æ€ÌÀë1t·ÿµîƒýlÌîøIO¥ïOx­:Ô_i…ÅÒŠ+õ»ñŽö ®®0~ÄÅêí S ¯°à…ktŽýa^û]ÜwÉ„Iem V'²«Sª1 ë«Æ�qˆ©CjùÔ�‚Âôîã56ãw£·Ešò2”U~cÛL%˜0Òÿ°ØÞ´ Íl‡3ÀÔÖ‡gÓrí{Ñas®²€Ã€­ãáOÒ‘‚¡‚ù¯OöȹÑoC“ÿv¡Â2„aËÇÈÝð6JŒ©åþO¥É›qóv_†=IŠ2©àéýr;ÿ #3áçRÒóÂrüúØ€"âÚSˆR­{‹ó±±è$:¼k-° ‡Ñc1°ãûA|Z~2µ3á*I‰ô~×UT¼ü]tÑÕÂ'{ ù7iá¦æ¸or™ëB]þ*žŒíß\ǰï1ô›5ذY‡8 ­ŠJ±:‘]RŽ1 o`<ñh²-'¹¾j ‡˜:d‘/àÃÄ„/¥6•B>š‘ôîSklóvîʼn:M÷Ê?1Ó$™äg,ZTGsç•3Ÿ¡´ÂJMÌ�^!²í¸�çB‚WËâßÓ†&• .4}ü ìoØ¿ Átà;83:ITš¼"`ÇÙ rÎ*Ý×{fàé}ô‘†e’D—{ÜàÕ¿Ä>ïmy(ÑýÌñXÀô`3¦Ó˜‘˜9¸­—Õl ÒȺ•ߢ•{LÀr:m)ªMרŸ;àœæ·¹¼ýÉ—éz'9ú»ß“ï°kc᪠²Ûsùø~|ûT\’߈ª²&«ÙÕ)&xýe¯b¸o6@×x .’‚;à…½½Cö(éüzæáí½ ½î;Ü zð„¼yî8¸Ç‚ùd[Nr}¾‡^nÜ4=ˆ»A&…|<c 'íºÎx¶UÒ‚g[>‚˜:TùèFÒ»nlf¢*ßž/%ÿ)ñ£NSý°˜1´Ul…V ÏlhÀcü˜4ã°,Žé ˜ð >¯ƒ%&Àä2Œw~…SäHäÐÓ¨íG`ª' çÜ•&¯P|p]­ŒˆŒ¸XÕ\•5Í ‘#I¡öÞÓ=b"#ܨ.ÉÇ[mô{BÁì‰òâ3˜7˜ž‰ÄL‘[~Áœ¬ª#ÒÈQ£œ=ÇN^yý~Ãi´%0¼ÈÝŸ˜©n4lý J?; î4ê>Ù|¹eÍp%›íª¨d ±:‘mŠ\Ÿœ…Þ &Å;‹PPaÁèp+öçj )¹€Á8ú#•¾sëYzÖ„rŒo; ª`u²36hvÁ8ßà']FNqzé$´d3/ÁœXRù˜—xxâh6hS¸“[îAq~.ŠŽß…WFÏi1u¨òѤwÏol’#y;6–ÔáR+wWƒ-ÖnŒÈ8¨¥9g½»)˜û˜‡l¹Ùl´K”×ÂwCZþ(8ƒ¿4ЇÞcËèÅ«yu1þ³Ì 4yÜm/D¥±…¯‡×tÐn«†‰ü|lji™æé¤x^cðÆy4œ³ad}‘»~ÄÑÃçñR7{^ýÌ4»P+Ãnýmô¯óìAÇ¥l+3âgòùQ+NÔ¶¯6ä–_Â'«*Âàõ‡À ôüã,N 0¼ÐПß0î7éP]^mYê/=À‘_EEÄêD¶u*r}2o.Åö¦ßÀ ãu8kŸ þÞeúFglÜ©ô[Ï¢Óˆ÷¶“ù0ƒ…áËøø,1Þ3¸~À㓸s)éÚ0L` Ïz,0T•„6$sJP¥¿€3ºvÙK.¶ivB×õ<â ˜Ä`S5·Åݘɶ|1u¨òѤwÏol’Mà vG»ûˆgü¢úa‘ôlŸE×$gǸùÜ8­{Ì2¤g£Ù@ˆŠßl¶û̸aÙ·3ì YÀZmàÎʤRiò aÞŽó8wßË¿ŸE ŸÝ”!¦±z/÷¸Á«?Øò‚¿KZ4{Ñô,´ #Ÿ•ƒðɪŠ0"ý!=à ý‰ñÁ~óèStUQÉ&bu"Û:Ž>3Þ/OÝöíDmm'fãèÕUÈš2WãEç—_‡c€L ³ö4:gç1Õ{% ÎÅKÙ†X†yÏ;ìïÞB~éçh¼ù8|losÓaÏÞ(¤”/hLÙe†'jLd<f”…Û/: o¶å#ˆ©C•/M|˜uߡӓ]ÏJIïžßØ »Vþ't‡Î£Çí…×»\^`Øò}Ü|ÔÔ>¬ Ä]¹eyawò($9¶5Û¡ëçž”ŠXc�H´õ½ì2ŒlÆ�NDøœm(ÿüŠ·|í®*˜SM\d{Ñn-AÛ*MÞáE羃;N9úéêÄê=Û–uÊ=nðë_Âl׺F9c^¼ò¾ð‹žîq/¡“UaDúCz†¹ûS$Ês.ŠÊ?Ã'ÅE(Õþ¦øh€TÖ<bu"Û:¹þ<Ü7>¤/ï tÍÆ†9Ž|7»pëYr_Ç¡¸MßC]×ëð_ñá~?ð¯ÏÎ!|8î\ÂÉòpØ`Ak~†c�ã³Ã°c?ô÷ú"©À{ïâRu)ÊŒ÷‚ŸYN£–ã%mùbêPåK¯Ú «ÇÓ‹¤wÏoìð®û;ò{~Q`Ì€ Kð{zÑ¢¯E¹v?*7¢mðuÜ%ûx`Ùw–d‘Ä`ÁÓS}ÊÊk¡·>Á4ImçnAÙ>ŒÄ‹bw4%ôO±ò-%ž ñÓk2xQ¬‚ÒäM…Dçæë½ð@rüúg04èÁŸ‹üNütb`<þH!·üÂ>YU·?¤cxá~_zˆGà~h4¥Ð÷O°ïFìº:ö}?gcÌîH¬ Á$ þ¥¢’ ±:‘mŠ\/,Ÿ`kõßy†« Ý.¢O±H¥ïÜz˜ìÛ>b¸R®ÃÖýoLÈtæ=ñõ0ý¬;o/¯Dy]›ìÇ‚í·1Î;4ªhv4áYø•J>g1u¨ò¥ÉÚ7°þU;jO´âѲåk¥<;`Pû°‚xqÏjÇ\”ØKOÛqÙ!ljð)ØÏïCÑnlÏfW¬‡!¼¼Œ#U‡Qqòû—~yqíû…‚`zqPš¼PBtnžÞ§¨Sîqƒ_üÌgª÷`‡ñ ;-Y€÷öQlÙr·½!oºÇ½hMVï Ï틇TÒ!ÒÒ3¼D¾/$Âûذâ»l gÿ›ŽçHjÁ¿TT’!V'²­S¼ëÆÐÝþ+¦xƒ)«Ggë`vǾÁ¥Òw~=óðvß‹Éç°Pa–}ç=ŒV³ Dx®sß¡kŒë-§pÒæe[>‚˜:TùÒd=È.ÁÌtê箩}XA< ¢÷kWÓÚ¹‘ôîæ} <¿È[xãÑë2LžfÙ a)¶?,dqÿ. ó7ÉÔV«¡4y×<½'m/0P'ïû2À¯Ÿ'e¦8bÁÈ’Ò‹o?ƒÃ—ìüÉêÒSX/; F O¤?¤gx‘·?1xã0`ë¶ÆpVb (Á_ 7C“w,|Æ8ÿRQI†XȶNE®ß3n¹hŠjaŽŠ¿A~/¼züC¸Z/`2[4ï£ÆÜÏI­‚÷ý,À¿~èØf³þ+4Þ‚xÊzíh¿3€q<|Ë ´¸€—CQ™c"d[>‚˜:TùÒ$0—ý <YŽ-&éݓƿgƒ}>Ñ4…%ɤ‘Ú‡Äk½W¸“2K3te{PÝü8ynÓ¬ÀÊSS‡‹Ñ™VJ+®êÊ+×N I?ö½:ócLÐçoAiÝ58Sîð^ÜméÃlT»fÍCiò®!xzŸF N¹Ç ~ýÂ3SÐ=îE€×R”9¦Yì©$„´å qw “Ãû¾,ä—ñµîGاˆ¡µù¥'ÐâL1þJÁ¿TT’!V'²­S‘ëÏšbT~‹VÞ|î2tÚÒp€â8§#ã¬TúέgÑ¡Çæ‚J£æŸ×tû±-h¼´ÆÄ(’® YØuFÓŽ·¡Éÿ�; ‹Pa°åcänx%Ƹ›g’Ê罎*m-Îp¼uºS¨.Ý£sŽ=ÇíÃ[±åp;¼áF̶|1u¨òѤwO;áD‘[Lɿы£#Q“ ΋دëcÿUjZ/V£ˆ¸–jÞ£Ö5|uhóÄX ¥ÉK¤"ÔÉÿ¾ôðë~œHnù…€×z•ç¯pÆœ+8_YŒ­Õ—á˜P—jb‰ô‡EŒßkGß\Ôq€U¼0”ÕŸâ!<ø—ŠJ2ÄêD¶u*r}²ƒÝ³çDíÏÁÞð9þg\¾y3¯žÀstœ5â~TœEû9üïÿ â#]²,>ñ=-šFæš>þö7lƒ†`:ðœqlÖ’Êçµ ,¿{£½µûpÄ2Œ%ÕÚå£Iïž4¶×ªCý•Vv‚ØŠ+õ»ñŽö ®®LÄÅêí 't?,~jlÃo¼3=n¸l (ÊÑÉp®<ÞäüîÛ8^´ r÷ÁÐóBÁ'¬Õ58o&})ÜÌTm—Éc5”&/=Äê½°@rüú……øß§þ±1¼æÝÇ"|O¾Ã®w>†ÅÝô8ëHHÏ ƒüûÚ!µà_**É«ÙÖ©èë3@ÔÜŽ¶˜,Ì"Qré‰ÀxçW8ÕùŠ}c-a¶ó4j;ǘêIJRù¦ÐûTØ6]¶å#ˆ©C•n$½{ÒØ‘‰"qw:²Ìq™ëB]¾=Mòó°Ýø+geç1Þÿ÷`z<MÑ ´ÅTsóDí33xÒ¨Å;û[áŽ;KF(–—™„óŽËMôzØ3‹‘îvX“œŸ“¾Þ+og_¿Öãõ¸ÄóØi†®¢:«#®QHnùÅÃN¼º 8XsƒY>÷¶ˆôâ…qu—ˆkðr_"Ç¿*Q¡³&ôÂP~ŠO²à_ŠG¢\Óë±:‘mŠ\_.¼ë/âÆ¡xòiW÷ñf’Ê7Þ kßTÔݧVv\' qȶ|1u¨ò AúcÅ’Þ=¿±ýp™Ž ¡—»@ ï mŒ9‘®‡×u&<èçgFp<%î‹á?‘ vÑé²|Ž"Í&V™œs§Iú1nš ÐéÎÁØÔˆãÿK‹êfZóUÓ*ï:köâ¸m”í«oðÌ|¹9%¨<ve²qáÃ×{åí¬óëO|œè#ýcÆJQ‘šH`ðftD÷y’òô£ó²N³‹ðà_ŠG¢ˆÒë±:‘mŠ\_.¼ë3nXöí ·WD>«íÜ æÇ’ÊÔ÷è9)ï¢&èÍ ïûYBLª|BþX±¤wÝØÌT7¶þ¥ŸdG§Q÷Éäk4È-k†+Î :úûtA2#øðîb¯Ù»7õl Y!ð ;‘³a3´†nxy“¥�^{^*4fÀ"|ƒ?=6älCùç‡P¼åChwUÁ4˜b ª”‰³«O`Æ1ÐÇ. Ã“#¥¼!©Y#ú™ÉÔ佃2âÊ—$B¿”ðõ^y;ëÑòÇ;Nôï¶ãØ’à8Ý㞊ÔDúC�ÞŸ~€å·1N_òÂóï¨Û²5á‘®þ4Ž®o­p-úáj¹„®¨TdqI#ø—âQYE¬Nd[§"×O3Àa86Úc8.à³¶áO|¤kC ´×Ç%ûkÞÜKNCÞõ½m8^gâ|®êPQ¡ƒÕ1w¾˜mùbêPå‚ôÇŠ%½ûxÍø†q¿I‡êò2h˪PéFd²Ì‰ƒ¶ÅûÒ˜z SÙf¶Ý6£¬±Ï8ÆP€ÙpK™g,ITùÝ9ДÐ?µÀ¾|¹ÿɮا×âF•OV1ë ¸ÕÛÏóú°÷5¡òClv'<¾UVÌ’Ê+2¹> CçïÿFGCI8Å×ün+Ž$ÈÝ/%|½WÞÎ:¿þDßM(Jà…Áÿ¾Êz'ÒÇ ÐC¿/þÙ#òïôÀêC¹ö�I1X‹7ËcÁ¿j È*bu"Û:¹þ"Æï^G×ä<û ²pñꈖ®?¢bÈëæÎ¿>}†¼ë¿ÃÈœŒIAæàl¬^ÆãbêPå‚ôÇŠ%½{±M×Ê‚¶Åó¶¢"‘F•½ÅÈ/“)µ XÈnöæì2†f¹½}¿$ �“>‰^œ’³ ÏÙéy$•W(C–æœxèżû>.t6ÍvAi˲ißÊÛY–ÿº¾ ÿä•ì]0Ÿ8ƒ¶ñÏË-¿ ]DúC�Þë0ý“k¤ìGù4N´¹ŽEtõ§4Œì þ¥x$Ê5½^«ÙÖ)žÎ JþM xõPèæÎ¿¾ðWIåóÚÐhqræ8lñ<A[ÝVäèìqÇölËGS‡*ŸH˜—è:{5Y:V,éÝ‹mlªÕ‹½DÌ ×|O¡Ñ—I~êRl3>AÐ~JÚ;ÿ]æoÊ™²€kÁg`&å¹ u{Mpj'l:=lQnq¤”7|¯1ÁópÀï—¿ãòõ^y;ëüúãy6[b>¬h‹ë…!·ü*té b0¿¡éÃOÑö*¾îÒÕŸÒ0¤üKE%bu"Û:¹~@pêÖl˶ ¯ïO¨®4À¼"c+Ìç«P´µÍ2¹¹ó¯/|çURùS4%ÐõO…ÿˆïûYBLª|B‰Š1–åcç’Þ½ØÆ¦ïaq¡m±€oâexáú Ó+‘[I‚Ý>¯‹Å¬u®¬xÞïõЙc*à€> Jë®e!@â †œ^¶å¢Xt¡åÛn‡æÀ+tÕïOîÆ)™¼‚íÃg+Zà–9(_ï•·³¾ºü¿àgÓ!ämÖç+Ð=î©HM¤?Äó °£ÿ狨Èû�zÇ\øïøÐÕŸÒ0¤üKE%bu"Û:¹¾ðÔ­Ré;¯ÿKx^óu™ñ9и«û-£±s)éÚ0«ì¼J*Ÿ÷ô¦¼qÝÞs'N´ãE‚ùX¶å#ˆ©C•OÒ;—ôîÅ66]+4-ö˜8 ;¡)Ø3Mwà'/‰7¹q…š•QStÞø (•h¦]xhn„Ng€©­Ϧ—ÏtÍãYÓ^hr«“xÐŒ®«•(÷ ~Ù„¢š«²Â$rDPÞÎ:¿þž š­8|c8dHŒ‚ÿ}•õN¤?$rÞ„ÂÃ×1² ߤ1uÒ9&0ÿsû*nDÿâÁüøîÈ**шՉlëTòë'OÝ*•¾¯V3þgÖ¡9ÁbFÒ6L#²¤òÅ0‘¦ T´ÉÒ~1u¨ò @†cç’Þ½ØÆ¦êaQÏ$ºN|Цáå2 üƒPB|Gaųžo°çPüýd"ªÄÏí1¦¿t»’Y줔W Á#.…¨4¶ðvÚ,×tÐn«†‰ü|lji™ú _ï•·³NêŸ}Þm`å7X0Ä=nâ}u<ƒÜò«ÐE¤?Ï€ï`âgðNøØI ]ý)c€Öªr;£ƒŽÄ5‰WÎ|†ÒàL`Q2ŒVÓŒ‡?«ˆG¬Nd[§"×_Ä´³#ä ÓëÁÙAéA›õ^xÃ'©ô[3íÄ2o°öÁÃê ã{†î¶ŸpÇñ*áØ$]„§S–T¾xžý0UlÁf½ƒ}ê±d[>‚˜:Tù ñsIï^lcSõ°h‡t¦òx–çBa˜ËòØ6,Âñ®å3[Ë±à…‘ÿ©ÂŒ¡­b+´ú[pxfC/3ƉA3§m_By3oÇyœ»ïå+Ø>døì¦ì“N¾Þ+ogÔÑ3€0O!¹åW¡ n`¸ÃdÐÕŸÒH-HÆ€²Bï—WŽÁB2¬ ð¹í¸Ùø9JóßÂ-;1 ÿ‹ŠxÄêD¶u*r}0ó8Þ?~nÿ"ž™±/÷WV£¢Ì7ƒˆTúΫg¶5ï ›{ÌÂS˜÷å#§øc«8(Û™wÞõÉüX`:eIåK3@Sx7FâåŒÈ¾|1u¨ò Aúcç’Þ½ØÆ¦ëaQg°c?`²óò6h{ð¼ËéÍ#è>þQÞ´vi“`QÈ-«EøO¢ˆ»›ÂmÉAP~ åM‹%ø'þßÇ ä…´Måí¬“úÅÝä–_….Äöå÷§ <êlQ"Œÿœ¯BW± 9ìsÓ”áäÅK0﫞„vŠ\Ž]$ ¥Õd^¡³æ]l,#q}þ„Ç|4nÌ"©ô[Ï¢ã[”5ýfyî¹±f·ŒÇŒ2™¢áó®ŸF:eIåóÞ‚Á<À™ãò¾$ñ›²-ALª|‘øØ¹¤w/¶±©{XT3»n?ªš:Ñc;òüذq_øØ@�>ÏcXêv`GpÀV"Ä]\l„ÿ!çw>>‹.öe±B`®'°u9EcŠ„ò fµcòBd¹×6€$ñwÖ—ž¶ã²Œùw“AêW*™BlX»ýiö¶îµ³Hf{o…fÃFä—é`éÆtp1À.±”ø—BhשÈõI|¢£hèta¸ã4¶j©úÈÑ‘#'âf‘Jß¹õ,=»Œ ÷ðûð]4l};¼›9·õ8ŽÈtæ}á锥”™ÀÍ–VªŽYÄÔ¡Ê'rô¸Íú¯Ðxs>†|¶£=IL ±Hz÷b›®‡ö% 2'=Œo�MáL+»Î <}°.Ÿ —ñ,¸82á?%Èb¹eya×Ô(Ì!/‘íÐõlj)åHFŽAd¢÷«zU´b Ü§È¿Ë ©_5¨d ±ýAùý)€‰~*‹rƒ÷Â+kÎ}~Ó®N˜ê>Eé¼sø†`6ÜR d±:!öû«Á½>™×™Ê6³¿Û„¢0>ÿ;:/œcçœWasÌ&Û²-뇙Á é�rÙßiŠðp|îN+ã×hNøSÊ6 ÁÎ×cÒ)'FRù(<fAS‡*Ÿ�ˆçÊŽ·¡Éÿ�; ‹Pa°åcVŸÞF‰q +1Æ$½{±MÕÊÖÝU’b›Zp½éÿKð{zÑ¢¯E¹v?*7¢mðuB+­pdÌH‘cك葵^‡+AÖ%Ô—B«kŽ:l½€ê­ÛQÝüª1@e#¶?(¾?->ñ½<”ԙк<„‹µkDÞ`¬Ù‚]\9›?A¾æmä¼­QcdÚu*æú&V ºŒTú[™{&wmç"y DJùh<fAS‡*Ÿ�‚ï8mè8Ђ MûVC0øÎ,œôîÅ66U+êvWS9WéÇÓÞЮôšƒ¸Õ¬á?U¼¸ÛÒ‡Ù¨ %sMN&åHFŽAd¢÷+™x±0–a0×õòUÏ�•u€Øþ "ÇÔ¸£Æ`ôL-·ÑíôŸÊXL»tfO´×ÝZsŸ'q\†ðÐü5ªŠIðß·P =‰K¶¸Ùf_£ïmy ]§Ä\_*}_ËmHR>YÄÔ¡Ê'„�Æ;¿Â)rˆ}ÌvžFmç8S=k'›€ØB-Ôí®z`­©ÃÅVþÎ ¯ÕšŸÖØC�~¦;Qð¿Ä®é©“ y…’‰cÙƒ§÷KC0íÕ¡w–cæbfð¤q/6æèâêïû2@êW*™Bl¯?ƒgLÕÛƒÁðˆüÂ.vËth[Õ º€ÉºáæÆ_ñ:a1Þ^;ï3f {¯!QÄ?ÃUG&=ÑT¸ˆÕ ±ß_ 1×϶lˬå6$H*…Ç,bêPåÀÒ(n ñævÍQ÷™Ú‚äBÑÝSö0„BÝîj ÑëIYkî†;ÎV躙lp¬Õ58onRÌT%vMO™¬È›Ù>‘>¤ŸFXÄTÏl-Ø…ÏêÏ@w¦Ÿ”䳃æf”59ãºó¿/=¤þ‘¾Áäý$àÆÍ¹Ãå–_….ÄöyúSèÝÁíå8sõì.7^NûW&µŒ/=.Øm—p²lNt$ɪ>OIî#¦¬9÷yr®ÙÇK¨¯,Geý%Üq8ÑÛù«êAH߃Øï¯†˜ëg[¶eÖr¤—®c1u¨ò €qòo'ªM×x¸VÛ#¸×B6Õ êa†¶ÝÕx)آˀ‚ùàºZ‰Mœ ! ¬Ssvï› µû\ÄM}™àn´ïìo…;¥p RÊ+)ŽA¤i#>‹ð<@“®åZ-Ê*OáÒýaø4^ì÷¥%qýKð³:xçÒIhI¬‘ ¹åW¡ ±ýAŽþÄÌþCm3S™È&ðèÄ!œûwü|Úd’üªíNXz`·ÛùÅ5±†wÏÃÇ®ÖcW…u=ä…vs}©ô}-·!a½ËGS‡*ŸˆÝC|ojÁU# jD³í_ðf1öMwOÙÃHšvW—°l§šFïíËáó™l§º½œå €×ž—Ê ¸DÎŽo.D¥±…g9³\ÓA»­&òs63%0/Ñuöjš.ByÈ-oR²y B<üq ’ÂR®ð¿/=1õ¦ð¬ÇCUIÈ]:§Uú 8£kW*«"¶?Hߟ,<wá· !`SáiR›Àœ_kQÙ9Î~3YLÏeg‡„i­ø[ë¿×f D™ ]§Ä\_*}_ËmHXïòÄÔ¡Ê'„�Æ6 ˆlæ¢T«ÅÞâ|lÌb@zšîž²‡!wW9¹TÙ¶åMÁ'h”!X]Ƙ‡·ã<ÎÝ÷òï]t>»Ia®išåÍâ1ˆ ÀÒH¹Âû¾ ðå†yÏ;ìïÞB~éçh¼ù8lí]ÄÜt8ðhrËŸ˜%ø× û¦žõ–¬DFÄöyûS�^ë—¨¾ø#ß(Ê-WÏ@›[‹7™xÕ<ÆM“:Ý9›m2zVe º´k ±:!öû«!æúÙ–m™µÜ†„õ.ALª| ±±¶å¡D÷3Ç`ÓƒÍ8x8;é)º{ʆ`h{q3XxfƾÜwP\õšnt¢7èJù ºn_†žìJæVÂâVêþ1¾ô`2dwˆ]8Z/;ÈÙTZh–7Ç ²o\H#å ïû2À¯?rødùG8l° Ç5?£Dc�»°³”cC‚À*ÙAl·?%1€¶E›XùÞBAÅU¸¦à¹s¶¡üóC(Þò!´»ª`R´;º´k ÚuJÌõ¥Ò÷µÜ†„õ.ALª|Îs?ŠÍ˜Ã HϼÁôÌŸ¡ßg�Šîž²‡!Ú^ܯÑU÷WÔØ<qd§úÕÃ3ØÙÐCÉbY()HÌ;†ÎIÜI&¯ÐcY„´Ká)Wøß—žÄõ/`úY,†Z”—W¢¼®MaÇTc€ˆíòö§øÇÿ(lÇ?ÕºáM4+˜Z0šú§ØÉÉäSnwá ?½&{*ÔÌA·‘v-A»N‰¹¾Tú¾–Û°Þå#ˆ©C•O�Ì4†2ìÖßFÿJLœt\ªÁ¶2#~&ŸµâDm{Ƽ(º{ʆ`({qÇÍÇóšÊ¾…ƒ†µ²`<°ÖëpeÙð,ÍЕí‰ÚuºDŽؕŠðsê±H)o:ÐëvËÒH¹"÷¸’JýŒVÅePréóéz`ÇÒñ>4–mÆÍ¨k{ººñ1%»Ì£¡ñiÙàû%k9˜©"#íZB¬Nd[§Ä\_*}_ËmHXïòÄÔ¡Ê'€`6¼ LI‹f/šže&†�EwOÙÃÈr¾¸ÉiwÓ*Æ�ŽË‰âðatd"j±Ê`Áyûu}ì¿f4ΩÇ"¡¼‚¡Ûí–7.$L¹Ò×DüAQîq%¶þL»œb”XzÇEv!7ñöº0¡e½CÙqÇeAMѦ`}³3Õ±f})¶Ÿ°šÄBÞuùï¢0Ó;K?ƒ!§Ñ#óÒ‰qÕú–IÄêM¶õNÌõ¥ÖrÖ»|1u¨ò a ³]`蓎[RO=¹4Ý=eCéL ³¦Çt‚ ÖÞ þVÙ0þ²ðà'“ £<Åðí lÉôNeçÔc‘P^¡PîvËB^íö×ü~ÍÊ|¶¢î8£Üã ¿~áQbÕqQ%U”ÓWæáíüJr6"Wû-z¢ú>óz c c°^ ÷{=tæÇ˜ 8 Ï߂Һkpf)³<x`­*DZ3$ P¤œ©ÞƒACȼ·bË–£¸í:[ª"±z“m½s}©Æ„µÜ†„õ.ALª|`&á´]ƒ¹¥ ½?ûy#Ýí° òFEwOÙÃP< üƒP’·õWï¢Ï9^€ºárt¡­±ŹBOAùôHt?Û¿f8‚ðsê±H)¯@(w»%íÁ×ÕJÅtL[nBQÍÕ˜ã üïK¯þ4¢ÄÊ-¿ŠrPD_ ¼†Ãt�¹4È-»€žgciÈH:dþ×e ¥;VX,7%›(ÉûÎ(+Dñ^-´Ú¨rÄ‚‘%Õ)ÄêM¶õNÌõ¥ÖrÖ»|1u¨ò læîÅqÛ(üÌ<3DnN *BY–<‰iº{ÊF¦Àï—k5EÒÙ íB²mË+šp¼ã9+RñàºÎ„ýËÁ5Hùœ£“¬ò„ÿ$S¤qN= å Ýn·¤­W. Qilá°\ÓA»­&òó'¦92ó¾/|ù…G‰•[~å@_a°¶S(‹^ÜòÊçJ’ZPú‰’<LàQïb}äœS¬MÄêM¶õNÌõ¥ÖrÖ»|1u¨ò €ó™ì@MÞ;(3#Å£ÝÝ=e#S$q_–Ϋñ T–±­²J?ÿ#ºFfùnÖŠcλø¿EõK‘„çÔÁ²[ª„ò¦Ån·d\˜}>—N \çqî¾—ßÙÁÓðÙM*ðñêO#JìšU²ÂÚè+ æ{­¸‘È ÃD‰*dŸS¬=ÄêM¶õNÌõ¥ÖrÖ»|1u¨ò €Ä); CçïÿFGC 4Á,c ð»­8r$¾©X(º{ʆ`„»/ËÏ<^{'•é‘ ~©’àœº$•W ”»Ý²”ë9“|öyR7RïË ¯þ4¢Ä’Ïô³Ä¾¨nÁt7^rD©PF_IÅ�»¸ÿ %yPâœB™ˆÕ±ß_ 1×϶lˬå6$¬wùbêPå'¨·æœxèżû>.¸1ÍvLeaЧéî){IÃ}9»$r1ä°ðÆ£×ãæ6§žŒõ“ªå¥Ûí–Œ |c€0äWøõ Kõ¸˜…Û~Çv#_“­Åþ9PÔ;40 W—&= Œg`ß‘0ÒâVú‰’,P7§X»ˆÕ›lë˜ëK5&¬å6$¬wùbêPå ƒ€ï5&|Òl×Ru÷ô= !w_Î.Xkêp±•3‰à•V\Õ•!WkQ¦1 #Aý¤„by)w»%ãÂÚ1/“nüCw.åã"ô‹KðO ááU*ŠrYùÞBöK\¼b„Qõ e¼CIŸ�Ý®ÿ ÊË+š÷Qc!zþÓ„H;Q’Úæk±z#öû«!æúÙ–m™µÜ†„õ.ALª|tCÕÝ+ÿa°îËÙ%±1 õbu(¨ æ=T\’×E=]2ÔOBh–—r·[ÒNkÆÆq¹å†™|€ã[ÞbåÚ‚2]+zžM…-²ãŸÌeC[_‰‹�ÆV Êpò¢½ý°ÛûÑÛiÁÅ“e(ÐlÁaÛ þxݲŸûnš ÐéÎÁØlSd±z“m½s}©Æ„µÜ†„õ.ALª|tCÕÝ+ÿa0L»ðÐÜr{lëói¹RþÄ;&@ÎõÞÆñ¢MØ»†žÊŒ@HÔ¯®‰øùÚ…ÂøÐ|ô( ǰà{Ž!}ÂäÂaÀˆg+¼éC·Û-ÖŒ1 ã"TŽ‹ÄŻӄºÊ/`º3�¯¾a+ ×ÕcrBÿ;”xEÕâ­‚/Ð9ɘ¼£¬¨zÿ\H/Ö5œq9gÊ??„â-B»« ¦ÁÕ AˆÞˆ-ÙDÌõ³-Û2b롹 ë]>©CLÉ6bêB>š¡êî•ý0ø]WQQ@vÌ"_St^¹{„yŒ÷ÿ=8±Ð@Û3¥g ®¦q‚úe,Òò<ž5íÅ[¥'q©ñ4*wþ»PÞŽ¿]ùûÈäŒ<ßÜ&eÙ–W,¬|”ºÝ’¶^;Ç„‘[þd0¾'h®xšœ¼½A 74÷•spè?ÄnóH’qÓÇþÍaoŸ×)ÌÌ»s )1 j!ø®Ð•[à]x‚ÆO¯Á-÷+cA×;DRÉ.¶žl˩ʗ}ä–ALý4´_„ 9½ì ‘óÒ‰ñìÌÑiº{ʆ@˜1´Ul…V ÏlhÇñcbÐŒÃr»Z33pY>G‘f «ÌT¤‹O¶#-¿@[y!*m°í÷š¶ÿ´­ÿDÛ¡ÐÝþ#^/<®»ÐÕ¶¦8)S#C§ i£µsL@øq¹åŒkΟaflÅ9Ä›ä]hO^‚­ç6Úú&¤"Ôõ•|°ë´ÐÙ“…% Àk©[åo8LuãÛ]hù¶Sá_+ž`�Áì2†Þ ËÆ�ß/”ÆÅY»È­Wbê—Jv±õd[NU¾ì#· bê§¡ý"x`­*DZ3$¸n¤œ©ÞƒÆ'X`ÿç½}[¶Åmof¼Ïiº{ʆ@È‹zwS0¹ƒ°ž£³a'r6l†ÖÐ /o:€×ž—ÊŒõHËX´Å¡ )y¶9d׳ – <+לDWý…ÔžmÖå]»qa¤o+m³€i×C˜çØÒˆfÛ¿àõGÛP#Põ‚Jx\äÜ Œt´‹Œ· ¥Ðl ÆÅ+p]K* ÿºˆIÛ—8Ú™Ìh4ÞúOCGiRÁkA¹ÎŽÀòb9ükå3 ‡¾Û‚“?rùï¢0òj:0©¾+$ƒ†wˆ˜"bëɶœÜöH·d“xõ -r#· bê§¡ý"°ë²BïÕB«*G,YRôB\ú>>‹®I΃!çjoœÀÖ=f\ú¦ÃT¶™m×Í(kìÆ³˜ôe0n)tò”íHËoà4~„º®É°1à=Ô÷zá2}Šƒ__B«å*.žÜ‡mÇS þ§ÄÈÐøýòo?ñÇ…�Æ6„`梔÷çcc’ã8t½ IÒÖtŽ‹ø<ܹt •ûªPé.ÿ óÕ3@Nñ}óâQïh3OçßPü¾ ®Äö=>kÖÀxÞïõЙc*à€> Jë®­ï>å@³^Ñ"›X9ä¾ÚÇNÚå#(ùÒÕ¾)¤†Ï0Tõ.%töĘÍ(Ë+[sv¢0èB»ºþɨ‰¿0Ïa;q ÖªÄ-{‹‘_¦äÉ»°ÊZööÚn+Ž6tb|²Õomžae|C°Öÿùš\ü¥ð/(tF:›òfvrMC<Þ¸°4Ó¶<”è~æx,`z°Ç?Ž£ˆT’¶¦n\ˆ–nŽ1#xlàþÿ¬œ~p‡©"t¾CÙqoÂç+ Xb{€ ßtÀ½Àéï ¿£ãì쫬ÃÝUاR+ת1€™„óŽËMôzüìçYŒt·Ãš$ ©Jv S¯BÐ"›X9侚Ÿ1vùJ~†tµ¯÷¬vÌE óKOÛqÙ‘ÜcTõ.%töä,ÁïéE‹¾åÚý¨<Þˆ¶Á× ÷hß zÍ÷ÖÖNJFY„ÏiECå'8Þò$&÷õ¢ËŠo»ÖB¶gºãðÆ…`4þ`öD¹Fqã0o0=‰TÎû¾ ðëÞÖüïS�»øÒÆÈ*žÉÖOTh}‡ÆÀ™ÙùX³žè¬Ù‹ã¶QøÙ1í™ù rsJPyìÊt}ìH¢"têUZd+‡Ü÷Aó3&Ð.AÉÏ®ö%Ç”s‚2ñ‹&kGĨê]t=Œõ�ƒÅÀ¢:y_é#{J åñ xã3 ‡¡ »õ·Ño·Ã,=è¸TƒmeFüL>?jʼnÚö/¹Ç^ýi´5uã¢÷'TW`^‘¿æóU(ÚZƒfǸ:žÈïP…²Vd¬(kÆ!b&;P“÷ÊÌÃȇhB§^… E6±rÈ}4?cíò”ü éj_¬õ:\Y™c‘Ò ]ÙT7?æÄÏÊTõ.%tv•õˆô‘=¥…îx¼q!€//ø»¤E³MÏB1Èg9á×/¼­å–?ÿKx^óW"ŒÏÆ]…Øo1š©Hu}%ˆj H‹¥§h: CçïÿFGC 4yÇÐ9¹�¿ÛŠ#rg(ZgЩW!h‘M¬rßÍϘ@»|%?CºÚׇё‰¨ ΋؟%¯0ªz—:»pè¶ör·>‘=iö.ðânK&“Å3`'¦ÖËÈ‘ù›?.,a¶ë ]£QÁ0£ËkøÂçjézA‘óÒ=ø‡N‡Æ›Cð1ä³íIÎ+a\dÆâìÁ:4ÎD½ÀT¤„ξ’ecÀZM-HŽ© þ€²\{èœxèżû>.ct³Sª¢IÍc0-²‰•Cîû ùh— ägHWûzðSc~ãÍiÝpÙP”£ËŠWU½K ]0Iƒev¡1íÂCs#t:Lm}x6­ÄëxH¹[Ÿ‰Èž4{$:ŸU‚;S9å+R7fÅÔõ)æûëŸìöíxšü°³°–! [>FQbˆ›æSnùcð Ãù<:sÃ^ a\] È u}%H–köî{ Ÿº¡ 'têUZd+‡Ü÷Aó3&Ð.AÉÏ®öM4'ÏÃvã¯YÙ”£ªwÑõ0„B[6’Ýà** ÞâÉ¢I’‚MYHŸ‡3†€7MRt£§@Þ„$9ŸtñGÎïîÀ1!ý¤”ôÛÂ=,øß—^ýÁ�ˆÚPõš>þö7쨂éÀwpƱµÈ- Þë¨ÒÖâ Ǩ¥ÓBué>sìÃxŽÛ‡·bËávxU〤P×W‚¨Æ�eC§^… E6±rÈ}4?cíò”ü éj_®ëLxп+TOÇáÏÒœŠªÞ¥„ΞÚ‚°1ch«Ø ­þžYv:F~çÇÄ ‡×ÄyCéóp†X‚ß;€;—NBK -ÚTϨÊ%o*H>IüqA¸‡]/¨�Æ;¿Â©ÎWl /a¶ó4j;ǘê®ä\\÷/êÆE¯eùÅØmÔÒîÃË0–Tc€lÐùU*ʆN½ A‹lbåû>h~ÆÚå#(ùÒÕ¾bfZÚ ^Tõ.%töÄP„SÚÝŒDÌc­D"–:s` Ïz,0T• ‡í§rJP¥¿€3:vÁþ“¤P3ÚƒŸL6ŒòÎ'aØö¶dé|’øã‚p ª^PK£¸qè=hHâ òê"^Y¹åaj�½OãhÌÃ/{_^ßP×W‚0ðü Ë^Eèm6@×x .ß"ûÙ {{ã<Ö³ð8àF“1dÔ›Ðbû'œ2¦@UY»Ð©W!h‘M¬rßÍϘ@»|%?C%´o6¡êî•ý0( ÂÆŒÀüñYtMr\ΓpÝ8­{Ìp+~Æ$aæ¥a˜÷¼ÃöÏ·_ú9o>†×OÕ17öºXšsFK>IüqA¸‡ÿûÒë?˜ a'ªM×xDVÛ#¸ÉÂ(rËŸ*»$õYø³ŠôÐßWæñ¬i/4š|ï,BA…£Ã­ØŸ«¦äWõœ‡·÷T'È(¢y—Oo†Œ ЇíE³þ«”ƒªdÒ·h…ÙÄÊ!÷}ÐüŒ ´ËGPò3TBûfªî^Ù#Ñ‚*ªH„Ä hFY^Axu' sHTâíÐõO*÷DÒÌ$ˆ“Ž;—p²ü#6XÐã"gw$•W(ñÎ'ý ÎÑɬOÑ›^ܳÚ1%×ÒÓv\vÄÛW—\áךà·Û_§¬ƒr˃W+ây7°Eó>jÌýac™ŠÔP×Wbx§±Û›~cûÿ 7Õá¬}&ø{—ésÉL$.Ïlß÷7\í°ÃåùÓ+ýl þé?àqõÃvé$ÊvŸR~lœ4‚ªdšõŠÙÄÊ!÷}Ð>vÒ.AÉÏP í›M¨º{e? ƒ°±$O/Zôµ(×îGåñF´ ¾^;w²å`^Àô³X l›–W¢¼®-µc²É› ä|’ÿñ>ÆM“:Ý9›m¼L \HdtÓ ¯¦“qæ_zÄÖ/·üÑ,:ôØ\P c+w¬³àšn?¶UÿýÙŠ;Î5`pT ´õ•x0ãøòÔý®Îv¢¶¶³qôê*’ÄXÄlÿßQûý�|«v,);L§­x¶ à^˜F°Q•ì@³^Ñ"›Òßs´´ËG áŠ)ô ½WU½‹®‡!Ú‚°‘c }˜ê7ÉvP•…ü9˜ÿ0¬)g 9g4G¶œm(ÿüŠ·|í®*˜(ÈÏ<°¯Ç%ÞB´ºŠJè¬LÄVîqElýÔ‹çè8kÄý¨ì ‹Ž ø¬íEø“ŠÐÿ‡ûƧñ³îä}®ÙD%~<wަ`Xf/ûÿ8§•¼blT%;ЬW´ÈÆÓå4‹œÈ]ÿjÐ.f•Ð~+ÈàFUë(êaÅ@[6á;¨Êƒ¸ïK•ƒ™d»s.¥¼ ñ%vç@Sb@ÿÔ9ü ]¹Þ…'hüôšìñ%øãBb£ÛGúÇqãð¿/=bë—[þ¸0³p÷Ý„IO²9Ñlû—z4€¨ì+<ðÂò ¶=H8=ëô¹})ާ)Ä aÇ.ãÑë©ymÑJÁFU²ÍzE¿Î‡ ]NU>ñ¨z’!d𠣪uõ°b -›Öêœ7·F&\f*‹¶£ºùqÜT•Dнs.š`ZÌì2†îeÙàû…Š(þ¸àÁOmøgtsãßmÇÝøß—±õË- Ì MË.JrŠàóO¶cKé_±«â×Dà6åB]_‰G` Ýí¿FyC1øçS<ÂÆ¾Ûjêp1ê˜J¤´âª® ¹)§}¥”4‚ªdšõJ:ÏB»œª|âQõ$SHïFUë(ëaEC[¶9Œy¢Îí²“ø'Z¼³¿nu/u(ß9Ï,úRl æég!÷—ÿ. ó7QáEÂÝ6¡(Áqþ÷¥GlýrË ã6c·æm”èû0`qv=Ê-n,8MøÔ<¢|㘂¡­¯¤Žö³u0»Sq€Ll h½X"rAó*®)<È9'*,بJv Y¯”¢ó´Ë©Ê'UO2„ ^aTµŽ¢V ta ¼D×Ù#¨iN%“Ê ”ïœg’ûû{=tæÇì½ßü-(­»';PüqÁƒëú&üsÅàFJÌ'ΠíEüèár+bë§m\ ܰfO(miÈ0 Ÿý+”èìk#@©B¡ÿJ²Ü\EEÁ[AY£‹¦¨fûØ*ôxÇ–àw߯ñ¢MØ»†žj?TɤoÒ Í²q¡]NU>ñ¨z’!d𠣪uõ°bXã®äŠaö¶îƒú¥J6wγ!ïÚ‚?.Ä‹ÀŽ#Mø°¢-nV¹Ç±õS7.¾y ýÖÝ0:ç‚vòÿòäkÞEMЭMEJž?—Ë,¤¯,ÿL ù7º˜cÇÒbT~‹VÎ$Çb¹ ¶4<ùéøoãý¾{5E'ÐölVíƒ*…º1˜Ͳq¡]NU>ñ¨z’)¤÷ £ªu”õ°¢Xó®ä´ÀD¿ •E¹Á~Ã+Ù8+*zç\byפ"Äó ø?›!o³Ž8ƒÿ}éá=ë4 ]U¾ÿÚ�3û² 8ôÈÏߺ–'ªÇ‘ Åt¼>C ù7º }§gÏ=À8¯¯ÌÁÞð9þg\à®3—åsi6¡°ÊL…'“ÊÚƒè­Ð,ÚåTåª'ÊEöÖùïÿþo|öÙgÁBÖòϤüúë¯á¿R�ëÁ•œ&‚Ñ6óPRgŠÚa²ÀÚ5’á³¢^ܳÚ1µÐ”¦QRy×üA<AÌ�ÍV¾1ò܈‚ÿ}ú ]¾h˜i'î¾kíƒgã{†î¶ŸpÇñJuÍ–ÿüç?(((àë[ÈïÈ¿ÑD¹ù ‰&ð ;‘³a3´†nxyù—xíy¹6ÇÕ€7SNi«’ h£i– írªò‰GÕå"{ëüóŸÿ >¤èBóD&>4a›ÇÄè‹õ±;ôÄ8¸rn9ƒÅÀb†]k2¦QRyפ­#ýÚƒë †xÙ^&M×H¾O3´ËÃl'jÞÿ6÷˜…§0ïËGNñÇ8Vqºþ©ð©H 1*FÆ¥P!¿£LÄ `˜z SÙfö;›QÖØg¼ñ€”˜ ·ÖÇIm;€;—NBKÚNõ&“Ò7i…fÙ¸Ð.§*ŸxT=Q.T´ÎöíÛƒŠ[èœÈ¬‚ìAØØEk¹~x!,`²Ç€C†n¸y“@',ÆÛž(y`­×á Ù ])ÍЕí¦QJyÓaÓ®‡0ÏQ—7>8¬ôkv!¦Oäû4C»|Ñ,:¾EYÓoÄŒ…ÉÎcÈÛXÜÑe<f”©e!Ú;€^czb0Ïa;q�Z­6qÙ[Œü²5°`LáY†ªäg›S‚*ýœÑµ«Æ� ¡yŒVÊûƒv9UùÄ£êI&!`N@zó}8'âÉÎT´N´w€ò¼ha–ž¢iÇÛ¼~³R2¾k/hƒçEìOÎ.IåJ�ãB)¹r QÊN¦÷çccÑItx³7ø¤ i#1ýš|Ÿfh—/š¥g—q á~¾‹†­o‡½cæà¶Ç‘¶±(=Q‘ ²¨^SÈÏt’8f€ÃpmBc$d½æ{Ê^0/ üçöy¾…üÒÏÑxóqØ@»ˆ¹éYÕè&!4ÑJyÐ.§*ŸxT=Éœ€ôdü/Þmi!rrÂüìMøo2 5­Ãõ w"C;ëÉ3 €Wm§pÂÒà $.®‰ O”<ø©± ¿ñvôÝpÙØtŽ.Åö–R^, Á´-%ºŸ9Þ� ˜lÆÁÃ7ãFè—’à˜ è™Á é�rY¹5E x8> w§ :Ý×hVs¢ËƲw�ÝÆôEŒß½Ž®Éy~Ì€¥§°^v@Ø4‡A`Ú….‹ z:½ –ûá1l-¿bïÏçãÎ%œ,ÿ‡ ô¸ÆágTc€ÔÐ<F+åý¡¾‡Å¡„ç¬êI†ojŠÿ†Ž‘™ðXOÒçZqäHvæäԴβw€ê †õd ðâ^KÆ¢Ž` ê—2‰bäa»ñ×'°RÊ+`pÃbã0£0—}êOÌLÏüú½Ä¶V´€oâ5|¼ m*r³ìvO/x-åáñ3ªäCçdªžóð>ü »‚;'üëhŠ>‡ÅµÖÒù.`úY,†Z”—W¢¼®MÙ^ ƒô+Z¡Y6.´Ë©Ê'UO2Dt@úe¸sò CUëï�Õ+@ ëÉh. ¨_Êxp]gƒ~þ޾ã)Ù¥ ÿɪH)¯@˜i8 eØ­¿þ•ûëAÇ¥l+3âgòùQ+NÔ¶Ëâ%@ÚI5¨¨¬ðZO òü•Ã…Årç+‹±µú2©(9ÿà”hÞBöK\´t 7<fuZ¾ÃIí»ÐäÕÀöjm¾ÿ0¬j6I¡yŒVÊûC}‹C ÏYÕ“LñÃMá=Ý£ðf# ¼û#ªKòñVEÛÚö P>sóLÆîF0ãè•(ÅÑú2ˆê—*bfúÈ&)åã†e_^p°LZ4{ÑôLú¤nÕ ¢²`'5ccxÍïá{òv½ó1,îTÆ— tVoAA]Æãy¦ãWTãý•‰”’¡7°ëz‚æ1Z)ïõ=,%<gUO2Hà5oœGÃ9F–‚Æ€£‡Ïãa–âx)¬uh†,ö ¸ÕÛ¿²s,}M¨üP›Ý O’ôg™a=2ÔORh–w ³]`èåÄDˆWäq 'ƒ¸j PQY«0ÞeÀÁš+L%óq¡Ìÿfw’cKþ ý® p¦zê€Jè캞P9âQßÃâPÂsVõD¹¨­“1¹sJÎN4t>g_ñÙb#}ƒá]f/:lN~¦æ0`ëQ¨»a&‚úI Íò’ßÝø‡îoÁÇÏv´ßˆ¿ó&1Dw"ý:7n&p%ß§Úå‹gÇRÿÚz‡1­ÆP‘‚€ºüÕÆÌ5`§<°ëz‚æ1Z)ïõ=,å‹ÎÇ-ÿýßÿþ+ùøì³ÏâÊF ‘n¤õ SÆ(¢<¸®oÁw±Ç–ç6Ôí5ÁA~ö8aÓéa—b†ÂN†*´¨>£c;R‚ræ3”VXˆ(‘ñEHP?±à÷§ú,i7Ë‘Kó?ÀÎÂ"TX†0lù¹ÞF‰q@¢#.‰!í’‡u�w.„¶à­„)Ÿh—/\W+Q@v,Wúñ&¿ ¯jPÉ:Àv¤³I&FozP¿·#Jv]OÐ<FÓ*›Ëå≠¥=å~¦ šŸ1Vù¸™à¸err2üòAú`<ÙˆÌt#½W˜Òf¡3ƒ!§—]žD±èB˷ݘ"?^¡«~?tv)œÂSðT Eö÷é’‰ ~" Øq¶¢î”@È›ˆà¤S‹¦vYp¡éão`à ‚éÀw²»Ú’~Ê#0…g=ªJCúpN ªôpF×®$€yÕ†ŠwöAos¬}bü¯0h>†#mcQGaTT2 ƒ7ŽïPÛ2×ËŽñÿŽÎ†R¼oŠ}+ Ê»®eÈB†,$– £¹Ÿåæùóç e#ÿF¤ ‰lñ Ù±¥ "ÍÐ*_<ï�¼–‰ç@½W€ ^aÊš…R q­îE³þ«®ÖóxÖ´šÜjÉ<~2ua†Óiv=Ê-žð'f¦; 5d"¨_ªÄÛ ].›PTsvïj²H)¯Pïü §:_±ò-a¶ó4j;ÇÙ5wt%çdwµ%í¼ÂÒ0Ì{Þa÷òK?guíqx°Lœ{›÷} ¡]¾hö¯°»é·˜¾ÌxÌ(ÓÙã>•ä0盎?þ™Ù ¤óðÞÿßtüÎN‘–a°à¾‡³U娬; ]³St¸©Ay`×µÌò";^¡a!K[ñd#…¦]÷DrÒb°àB䢚å‹ö Á+`™h]¦ß+€E¯0eÍBifUWkbp [²üDZ‹Ïc@’ýÄ÷Ä`^:1icK0çg!*-<77Ë5´Ûªa"?ßqb:郕P^¡,âÆ¡÷ á ˜¡¢A^ÝC̆ÿL.ˆ,X=òyà¸s 'Ë?Âaƒ=.â]¡¤‚qÿˆbrÅ#†}&ÓC¸Q·{Ì#o*䘌ohÏc•?00@ {ÊaéYväÆ_¯£*wŒÎèƒSó˜}ï¦Ø~Pt„ÀU ;°ëZ'Ñyc²¸›D»îøÏþþ+ù‰''M»Æ\ˆl4C³|\ï�Ÿ/W—éÀ"ƒW˜²f¡4C«uìD)ÖÀ`‘ýeN#<°V•ãXTL„3Õ{°Ãø ìÿ¼·bË–£¸í²® fÞŽó8wßËo«E ŸÝL1�£”ò $¸µÕ¦k<c‡ÕÖׄü;N‰_‚ ˜~Ö‹¡åå•(¯kS H‚®¦räåc¯V miað¸†fëWèŸ]Ë‹3Ú 9ûk¡=vš7¦cÁì¸�çÆÛŽÃ[¶âðíçÔŽóŒ/=h«ß‡ýÚ]x¿î:=Q Ü5P0dÞÀ®kxÞ4¹·ÇÛu'ïmÚˆ–“–]cb4!Ïx¹Ù¸Ÿå6ªvâÊ-m,{Ðä°Ìrû)Â+€ ƒW˜Œ³Ðµ³«‚6Wkn˜íì26B¬1`½æ{Š`)+Dñ^v1B$ÜrÄ‚‘¥L.®É$¬‡”éDLʤ”W(ä~zÑnÍ×;A1²ôVƒñêffžÞkÐ×T@[V‰ãÆv NIÝo×;x-‡_¼'vLуed^Æ�?\¦Ò lÌÏÇmÈC~þ&öóÛØÑô”ãIµ”v]D{д‹Þu§Í+`®œ4í“¶"mÆmCn‘{Q»¼€Wh2J-CvÜiõú 6S„W@é½Âdœ…®]¨sµŽ]|î-.@náÎÈ„qo1òË”@pzGVI˜!22)“P^Ád"&Bö rð–r%öûtA»|)3?€¶{ÊM”É"¦=ÂS…;cÄxÔ\ƒÃý¦y:½”v]pd4.À¸»î4z,³,'m»Æ¤Í–Û[hYÔF£– ž*™dcîq,,Fͺ™q ôfÅ,¯1@ñ»ºZ?‚Û'Ç[;ÉNôrQ´1€0 çýð¢Ð�SÛ/ÙiëŒMÊ$’W(‰‰=ÈË/‚ð”+üïÓíòÅÀ¼Bÿ…*åhV&'¡’-ÏóH%»,bü^;úæ¢ aKOa½ì7]©@F¼—›,fÀ:4Pçm¸>Y^Ѹ�[Þu§Õ+€vyÐb´ˆç@£QJ%Óx`­7àVo8^@¸ô5¡òClvçJ&§L!ã,tmìjDxöúã¸íjÍEÒIZì1X”|L€œã?)QÎLLʤ”W(™ˆ‰=È p…4R®ð¾O!´ËMpá¶qê.ñ ŸË tÌ…ÿJ%ûƒzùÊ$‘WòŽ¡sRA/WÆ™f7Q6õxL€îÀ®ë² £yFv±Éø«’¤í¸úE›«{´w€ê°`ßw«¥†ÏÙ‰†Îçì, 3Èj X+»!Rxx¤H6IÃí¶ÿ³Š[ú·=Ä«ð'EÜ­ß„‚š›ps…S¿þûOdx¢”‰I™”ò &1²ië‚í(,å ïûB»|Ñ0n3vï6ÃÓ5P›I9j§Cý•VŽA¦Wu°½ú2´¬œü鼃ë._øójñ§ ?v¿ä'ס1€:oC•µG´w�mG¸ÞªWÀzÁƒëú<ñDÅxnCÝ^äg6>c©êeœ…®¡] X×ãR+ûÂn½€ê¢<U_@+ç%*w$𤱓§ -ª£¢×ó ‰ÏPaUg�']bp¢´:{ô3 “Æ´'e2É+ÊU‘1a…4R®ð¾O!´ËCàztGaèῨ†Û`¼®oFGñG´ýeá ÷ëÑï‹2´ËIÀ›§th|½ÊN‰òŽ4aç°A£HœÀ®l úýëª!TT² ™Ï‘÷0m^ËÐ|TE%ÄOEŽEZ¾íÆù™‡uÕﳦHyŠØÕH•9Œy&±ä‚¥æ}hrŠq êkܑ͜<¥â© URÌ�®ëLxÐO€ýèiý»k® geQØÞ[:ìþÈ‚Ñä4`|h>Ê.z>ÇW3þ¯’C MÂaÀÈôjÑÓ¥•7m(TEúé A£Š°”+ä3ÍÐ._4ÁœðqƒMª1¤…}‡þô,¿ñŒ2×-ÔmËØ$!S0¾'0WíÀÖò8ßÔŠ¶ÎžÈ8Øy­Mßàxùû(ØõƼ7ç0Ò7ˆ‰à8Z$7ë¿ZŸ)÷(Éò¢¢²VXö Í+`Úª¨HÍ<ž5í…&·z-x(hW#%¼¸£;‚…› )ú× ˜€‡ýÝQTêîÉpîÚËG§Ð5—dÂ0×…:v!ª$c@*Žû2±¸)Û[¥'q©ñ4*wþ»ÀÜŽ¿]ùûrÃÓrÀ4È>çð7b‘R^1Ð¨Š´Qá)Wøß§Úå‹C[íiX-µ–˯pMÈÿb=‘È»Nƒœípƒm&áê4¡º8Ú ÇÊ\t:‹=if ”{2eº³¼¨¨¨¨¨È1€;ÐMÖ™á߈EÆY¨²v5V‡,üþ‹}A[à⸎3³=h8,‡+>+Ïjn•;tåÊ2üÔØ†ß8ý%n™ð±½K,/ÐV^ˆJÛìCü MÛÿ ÚÖ¢íÐènÿжë.tµ­p'ÔF)å媈,È ØèÎ¥¼+Èÿ>}Ð._,l›ÏÌ ÆÎ˜‡_Ý­”özýüÂ7Ê8~ÃËé7òŽ)«€o|ΠÌp=ŸŠ40”{2e ʳ¼¨¨¨¬c|Ãp>6þ/àåÀÆe“–àÂóh»2óȦ—J4ò”¶«‘vñ}¼®˜Éð,ìmÝ2xü[UÌîH µhH °¿VÙ@§cT<ØEH`µ™^¦Ú›wŠCF)b4É!.Ð]°4X8Ó&ÑU!‰ÁEJyE@y *Þb9]AÞ÷)„vùR%`7 Â<Lù"t-‘À(ìgëØ±Ÿö=òi8Ì|ÓéŽ=™”õ’rî,/***ëïuTikq†‹ìªK÷Áèœc_OÏqûðVl9ܯäË9v}i­…öØiŽll!qÒv\€s¡;u=3 ç+;¿‰^ûgf1ÒÝkÂÉk Pì®F<–0ï÷ã?ÞǸi2°ïŒÍ6Ýøæ1Ò¤EAÍmxãuž€¶šmØf8£…�&úM¨,Ê ‘8%#qÞÀiüu]“lUÄðê{½p™>ÅÁ¯/¡ÕrOîöã©îœg[^1Ýõxªè€´Ñ iì ò¾O!´ËƒW+ây’°Eó>jÌý«»z«d�~×UT¼ûØ¢)ª…Ù>–úŽ»ä„ŽQåèìÂÞ÷ë&å—éÍò¢B+l?yý^ËÙG¨Þ5VÉ^ Êò‹±W«…–WöáˆeKr,‡_¼'J6RŽÁÂΩ6`5{qÜ6ʾ¿ßà™ù rsJPyìÊt}Ȇ߼Œ³P¥ïjD³ßà(#çÉs¶¡üóC(Þò!´»ªV9Wž=ï Ì}…•çÑÖý$èÚîõŽ`°û'+·B³ñ#¶zÆ7¸(ÌCI)&cƒµk$çFÙþé¶âhC'Æ';PýÖvoÀø†`­ÿ+ò5¹øKá_P–jÀ´¬Ë»v!ýÂwùß§Úå‹fÑ¡Çæ‚JIæN?¾¦ÛmÕg¶âŽs’ÂìZc}1 *¿S.C§- {útÀ9M«ß|𯀄žL=k+fź‰@T/d1õèž&Ué98ƒÅ+ã–Õ»Æ*aj�½Oi…RÑŠ!GÄÊš1Âêî?jòÞAñºä¦ÐÎ0²”½«3óîhJ èŸZí&“óø$ â§×’œ+Ï&ì©G]Ëï¸EóŽw<6 £‰`{ŒÍ7Ïö«ÅÀb†"‹ð9­h¨üÇ[žÀuÑE—ßv¥è¬)‰¼kÒ_WHcW÷} ¡]¾ÏÑqÖˆûQQlðYÛ‹ð'•ìCvŠ;pö܃¨EʆÓh§}&”¦1 xßq<™ÖZ”ýõ6¨wþÕäÂxåêhs+d6мk¬’Æ»a훊š»úñÔj¥à˜÷"Æïµ£o.ÊCqé)¬—xþH-Ä|@‡Îßÿކh‚éöàw[qäÈÍ•´Ù™DÆY¨Òw5¢ûÉÁ.óhH9–¾_d>Ǹ¿×«ñ T–±ƒqY%ŽŸÿ]#³QJ¬40ÙcÀ!C7ܼ€|NXŒ·) Ѝ4yé·XNcWP5dfEe ʇ,Š»ÑlŒï6øÎtÔÿt ñØ58þíÀ€Çy½y ÷V™ì¬—(ûë%6eÐîþœÈÐzÕE›Xx Wá’Sñ©Þ5VɬžhcÆ_RÞEMpÌ’rL ^L:¶Ö´¯+9žæšpâ¡óîû¸ «ÇñÆ^Le¡qeœ…*}W#šY8ô¥Øf|Â.ûXˆ1 ÿ]æoB^M&%× /:lN¶K%cì"J‘ˆÂ.”q•]ö3øq Y^‚•´QỂüïÓíò©Ð 1¨¿·ª;91¬~,-eæà¶~C¦¯&ùy—©׌À«¶/Øï*É á}DÙ_7±(CîÏŒ¶ã°}e3´†îøq¢¤„ê]c †œÞ˜xYÌK'2”·]Jˆ¹à½‰úúKü1øê”m?ŠfÇxò1<룙õWZ9òµâªî�¶W_†cB –Tö]î{ GÖ,z¿Él Pè®F"/Ðû½:ócLØ Kþ”Ö]ƒS–ˆìX*´¨>Ãuu‹*$²f…i3™8žÂ K?�%)® ö_iƒfy¥V"þbYø® ÿûôA»|)£¦”ìºRTwN„?<¸nêŠ,ç{QŸ³MÏè;Kϼº‰#µCù‚¦F8þ\­%в߆ÿm];Qö)Ïò²f¡~!Ë…G÷¡±lsp±®í)†?ªw X«Êq,j~|¦zv7ôà½}[¶ÅmoôÑN PBÌ…7cù#ºmæàlü ºþ©ðg¹`ðftD· 9¶½_~펥÷~“qªä] %:Û‘¢ »è©˜†×õˆ’ì )@«¼2+é§+¤±+Èû>…Ð._ª¨©¥†OàÉx†™´¡êíò•�¼Ì«6Tl, ¥H¥ŽØÏÖÃò‚L(ÙÉÛÿÇÞÿÿ4•®ÿÿ(@ñG0™„ðÃ$;†'f?`fB‚f o¢cú®f<`¨tŽèdçl—q¦}ÏXÜc_[9¨e¤ï:¢cUÐ ìŽÔ™ò‘¾Ùu°L+ֱȷOáU†Âzžu—‚mi¤íºW½¯Ü¯aa»{³ºÖ½®ëº¯ëyY¿ÇA“k™ëa˜­0Oºi°¿‘ã./i ÷Žì<3ð9L¨Ê_UÞ!íòUÇ„ë]c†dkòP¸#ºDLpÎÊ P€æ‚Ç‚:“=¬äUn;,5…o¡“hðüt¦ß#æçvüŒšüMœ>Ã!ûMF+TÙ»üãÆOÒ¹ ¿X¤¦4ü&×5* þº7, Çó•A¬d%D:Ë+ï½ù~þà}~‹ Ö‚Ü Ž?Àé]Gq±¥Ým?¢¶äoÈÈÞ íù3¨9õÊ ³¡Ê?ÃéNˆˆiÇìÖý†¿ÄA48¹ÌZÎwE3€îY†ôlý;Š2× Ký=:=‘6²øjƒr¦Õr½kÌÂÃ.çÊheD š ñ‚f™Û¡·É]ĦK3@…ÌÍuføD³r;wµÈh…*}WƒwþÂØh”A”NÁ�.»7,×ó'V"@h°&E¬d%°Eü5l·le½·#ßϼÏ/j-Ès÷ƒáè6ä¨$C§ð 4²B¦ûqï´Ú+èŠr¸"¨ÅÏÿþa.(úõ’ȰkB¼CðîÈ^ÁfØ,ɱÉÒœCçÓÈÝOg}ÆpMÖn<ï3<¸k¶"ºµùì“›¸$»#+¡„RÏMú;èŽ({íÁ“£” à¹öô÷ ››4l¿ã…äÉý-‡ÙoIDV+TÙ»JBº¨†úТýkr ¾ë¹Ò –y±[¡Á€ AÈc÷†8p?_é‰+‘–L¿_þá,‡„WÒ{›‚ †Z  ƒ•h±yÃÁP¹ÀrHý® ñÁµ#;-Mï$4‹ÒÇÃÇvæì•½µ ¿»ÆŒxe´*™¿£ˆwþx*U Œctb±³ÊG¹ dÏŽ- ö3ÒOW/l8ó‹w`<jþÉ VÉl…*|WcÒß3ê@›±‚ ƒ¡ùžŽ.×ÀI.¢/ælC>üƒ°6@®b5xëÞð&”6_ iŽ<ÔಇàoÑ{;âýÂûüámCcûŸK¶äf‡%­™÷ÆßñeÛ‹Æ¡ädÛ¯AWNÞÅæ¦ûqãÒ/+È@b†R'†£vMÒïšK½AHHpïȾ S]f\—5Àó®1à s€Ëá™E¦ší¨lx„!¹§¨„R®ËEøWP–»vñܤ¡Ê?£ucúÔ«f…òLì‹O•-) hLahàù2¥¹:;`¶´sª¼¿L¸êÞ° ¸/ß5¸l¯YyïíÈ÷óïó[DÜ]‹ðÁÉKZª‹ÌÚGwä/é^ù e&ŽDõfàmiAÏ–¼™ž´Äm/Ìù®^ÂxWþNÎàÞ‘ †£Ý ƒ–)Íë`0ÝGÏüsz&�Y§Êõ®1ÇçPÔš)bÚ~»8è Ä¿æ‚t‰q].Èê ‘[þ=šÂæf2]‚ .uhi}”S_«*«pÖÖѨCyþ椫d´BÓdWcVûXV�µögØÜãs‹èÇP¯ûS&Â&¥ZþRä ¾á¼—À ¼Eïíˆ÷sïó[DÜ]‹*œ7 nÚäßaIkBÁ€u¸ué{\Š`¥`ïm†Þ>ú…ܰ9DqåIÉ o›>X ­ƒK¤9§ÞP’‡wåïä îY–Q{+«xJƒíÈš˜–Nè¥rÁ½È¬?Õ5ã÷ðR K-ò3ùmhî5$¸.d÷H NŸ¹oĽ0›îk4Ç 4óÂÝQq ëÔxW\I¸ud´B•¸«±,í{[}°=[)mÏFÁ�âmà»— ¼Eïíˆ÷sïó[„v-Þ BÏPVê% ½ ÇéÛ©AQÞµ<‰ð†æ<ïÄ¥KRo(Éûòwr¿ú¢÷ ÊÕàÄyZ»ºaµv£«Õ„ó'4ÈUmÀ~Ëó6uêà_d6^ÖM66ëƒì¡S%”ªÑÞpö˜šnSxaL àé@ƒ¹7v–GàOØ{žs\&ñÚOÿé:øÿ ? ó–? ¨]%`jñŸŸFûp˜‘ÌÒ¸®GÁvcŠÔâ)@¼-³ðý.õ.ØCð5l‘_YïíÈ÷óïó[„ç¶t}8"w-<ÿåX?»ïaÁ�vÈõP²ç Œ-°vÝ€V½Ù_¢}œÏQšóO—Ñ:¸›S ²¬Á±ÖËøi%5ÏACé�ªzäßM(Òºìy„´.Ÿ¾¾Çþ§•i÷wòߎ,+;‚µ¹_¢Õ«÷†t½¸Ì¨øèÌœ–Ž\p/2ëÆ5Á€ûÝᥠVØžx0Êh²JU‚÷ÉÚ#h {¶ˆ€´z3Øux ‡÷^D¯,ÙݬLà#¬­l Ë•lÇyq.ó—Økàu `¨Û€òü¬¹ PøH’ΛüÁ�Eíj,Ó h€&;…;˜¢ëVäe²Vm›!t§êÁAÁ�âmàAï">l.«aµïO6¼ÏoŠØJfàmÞÕ†¿£k|Þàš‚×z U…ÙsßIÜÌ;¹ ²h•çEÁ�f«aL I%¬åkæ&”~±…>º¤‚³ï4ÍàÚ‘eNÎ'Øft.ñýû¤×ì—wµÆëòF‰ÌòÔ/Fëm'¢Éü—ª°¹x?ÂÙ–|ºk—‚cèªÙ„-õOúP´V¡•­C¡c†× í¯çË6›3w þ)‡"õA¡ìlU¢4L0·;cvÍZ-|Ø¡"v5ÞÄ,üî.4j T½ åÇêÐÜû*…7.ˆ·€ ½‹ø0§f5¬öýɆ÷ù-"æ®…#~rPRd4ºmw%Ã;ªÄGºG_¼Ä¨¬u¹±y½{"F0@v4`Ù†Û2¡*Ò¡{dúõyš~ŒºƒWS”møÂuú3srÔoØ c¶uµ¼›hÜ·Æã[4™ÍiyzÙŒ}ÇÛ1:fÙY–Š|hæƒA»ò}™²xÙ|ÇÛ‡CÇÒtØæò{¥ mÙüËÖpºÙ\û÷ÀèŽÎÎ¥GãLR®K­P%îj,…wÍÖȉԶ¢`�ñ0#Sv½‹ø°µ`5¬öýɆ÷ù-‚íZøþox¬7CJÖz4X~•Ý8!”€ä¨\7£k*l±Y à 5…]3Qb˜³æÏ“ï—¸SˆÕÃwúó †-_ápÄŽg4£èª98×~W.xoǹh2ÿš â0ºO—£êâtußGSívdelÀ>­BÍר)/B¦ªH6!qüNï:Š‹-ènûµLp3{/´çÏ æÔW(—üLUþtÇ úÉÍ4†;uØ«ë€+¢Ó“þVdà<AÈk…*pW#>ñIRÙˆ‚Ä[À…ÞE|Vë,¯öýɆ÷ù-‚eqvK~2ówã‹}›±¡øS””Ée ÊíZîENáv¨Õ¬œN; ‘“•‡âùcõvæì]B@ð]a6m16éK¦¡ ä|€¼œuÔZ0‰ðþ,1ùº#M±SÙÅ ¸[ÿŽÂ pÈi>s/2Ë·h2ÿš !X»lÃQç¬EFæfT5>†OœÏyõÚïÐÐõ\†¬€y˜¾T' G·!G%Ù*…_ Ñ>Q‡óÞ%hµWÐÅAlLfŸ ~Ë{!2j¤f€ÏϤÿϾ(+nÞs¤‰Žæ—âx&SÍö¶š€óAoè³<h±Ø#Ó11K§ü !3<è]ć-€«aµïO6¼Ï/ÑeÄ6Õ{(Ò>Àˆd¬Z”š\˜¶ppÉZV‚ˆ X4Þ2˜„m ˆ~Œ¥IÉ 3¶ÿ©…`|$Ýk6hs6 ¸ú*ìtK|§?3˜í|ç¾kk:ì*ŸþCr `gy5N W`‘ñá¾5ËäíÆØ¼ \ˆÔfò.÷š Drae'qÜÔVŠŽ¡¤Ü?2X¡ÓðÜ4àÇþ—AµÇŒŒ µ-,» ƇçP”"JòyìHÿšjÜ0•©Qy*º‡sØ8uÅeæ¤D™¥!·ÞE|(ÀÁÆŒ õlsÁ€ø¬ß ˆº K£L`oS&0…§õjdïiÂo?W"k£vò—‰·»ôgÉùráYT�h‘öOp/2ËC&ïp¯¹@$À(<އ¯;ÉïÁ>”¼Ly¬P–fzéKh>^ܲ+p(ªÙc<Üø©®¿‡GB=.8,µÈÏdHÝ·ØE$¥œJƒ;0uò%g×éjXíû“ ïó[Ää#h ¶AoŸ â²´Úœ?DŽŠ >˜Âó—qÇË£«0ƒ—·náѦ6óèn½\îügáýîÞë¨ùdÔŸnCõõ¸‡| Lyp·¹GúãÃÍîe:ÃUú3˦‘Yp¥Äk7ÄKÆ™¼KÀ»æÃû3Ž}yÞX“™´Ã¤»„{Îq™æ:ï¿ã˶1>_”¦w ºúûpr›aÖI&cí\&]q2³öÀø49]Bf…òL<ç;›õ¿!õM^¤ù|víÑŠ†áL´£ú3 |GÉÏkåƒgxŸßbæjñþù­Fë+lZääHXÐ`½„H9¢ßƒžÛqBýT¥œÖÜ3Çæ Š+O.ÎT['QY|pùóŸíƒak‹ºNº³‘ñ·䬑î{§m£–d9A|Nv/‰¡À`@œÖxüÀ[&oÜk.H³ÖC³W¿d#x[P]°¦zja÷Lé"ôÁÛú ÊLò·‘ŒEH3@Uøw´8ÇBG&^jÆ$uø¢`@Âpãš`ÀýîðH¨¶'^È“ø o\¤âL¼›¸a®¬ÂYcÓë(´Q‡òüÍ|DÉß�3•ŒÒçOÈÉ4FŸv¤ÛB¦ó‘‘Šopá”׸ HFZ„sk¬$˜P‚ª¦Gp½•éÙ»Âw,/¢¦8j¡áõºÜt•ÊX—‰D¡À`�÷ð–É÷š Á`ÀNœ¿u §/Å 0¡Í<lÔ?–¡œ%ôœÙQ‡[—¾Ç¥X©.Ô¼·z{ê·jßHt'™y’Øá‹¬Ð„ñÆF}øoÏ£×5 {•þ KEŒ®¿BÇ‹aB`ŸVXðº'ñn2Aw”P 8†Çuj¼¿« .Λz0çAÉ(}þ„\LÁiÜLéúQålÃѺ Ïqb c\6êgFÚaT‡õ^Ì0Ú«¯0³avýd)^3 l-f¡¦!ªå«ˆ‰ö/‘C™Ƀ»ôg $Þ2y£à^sA"8G´‚¯÷ ŽŸ¾Wx¸ ðæz™‚¡`�+ƒfeé ÇéÛÁaqØ‚ŠµyœÞW“è¯ÿ …‡¡k‘‰|ÿˆÊ¢¬-k¦Ì�¾ «ñÈÜ„Ò/ö¢pÃ'P—TÄISI6’¡X¯FnÕ-xb…7,U›°ÉÐ'O{‚#XÚw´ß îF|¢tüÜŒmÒç0f _°‡¤’Qúü  ¶ç½ƒ‹'öB³_S§C’AÆw0àMŽV¡zÅe¢céÔM€•?ìÐ5Õiw` »—é wéÏ H<¼eòFÁ½æ‚ÄB0€-DÌÿiÀž’r|k¼ƒ.k'niw"+c#ªÛ_ͽ>¥„Ø! Ô@Éž30¶tÂÚuZõzdd‰ö…–¡œx…ÞëgQ{Æçôl0pxÿY´%©"‡V(ÏâGKÀzµoË„ªH‡î‘ié‹ ¥àO?FÝÁ«²ôj=×±'ë=䕟EsÇc8ƒéFNôvü}yTk>ƒÑ¥´šJ"áÌ×'å|Œ­yù(3õ¡ßô¹´¿‡"}䍸Z  ÉIíG§I‡ªÒ=8Xzf.Ëf0lùŸ.Õ‚’=K?ý–áp`ö·W 6<ϽëèˆêÓ­,f0Òy ¹%8Ts ©jì+ÊŠ9ªõvî×eÅÂ]ú3Ëä•+kwp¯¹ ámF©jj»æ³JY ¬ U›ƒÙjqj©`FšÞ>¨6ü=,˜:¯õª ³ƒ6W|=ž ÀïOÎ3+TâGK]ã1 ðý¡èŒLQü�¼Z”)ÃRØP}Œc-ϤW(6¥ ˆ¹Î<†~£õÎ)`ÚúÏ¿ƒ•õ² ôÁ°ûîÓm•t=ÄBéóŸƒe“Üá)ÈŽ8—ù·uÑY͹Ga‰¹Ã!9ñ–£ÈÝd€#bÆ]_?ãä—MèeÁö¥ Ãq½{êød¾™‚½P…Rµšò“¸x¯Ÿûl-EÃ]ú3Æ´ŽÖGZg¬wpÏÁ“3(búY?XÀ3àõfܪÝ3ð¹m¸m~�OÄId./ñbTæ,†`ÖÜ]˜»<‘óý}ñ£á÷´RüÊÓeI=”Ù UšøÑRŒÃ¦-Æ&ýc鯒`Á€œ—³Nfå_éÆôXaÖ‰rjM9Žýí²µüX= H4x[¿ÁÉ`[¸YŒ·~#­^F:e d- Ȉ8 OKS× W• µÉú"5°Œ�ÚŒuèÔ,Ñæ=9PåU@ßÜ^ç <žA8{;Ь¯@ž* ÛOc”¯IŽ±ÝˆŠÂ"”ûõM7ÐÚÕJ¡íDksêÏGiþ‡(îÇ.S|·|M[¸KáwþŠž¡Ðƒ˜µ=lÐA¨ûyÎY :Ž-°y)ËóHkÏÍﮡß÷Úõ’ϱ^ Gþ¶è¹ï~tÀgÓb}† ëµ¶eŸ,Þ~<s<“þ¿ô\”üž›÷¤s©ÈÇ€Ž+å’Mµ‰ë_u%áÏy­P%н¶HÿS Áø#´9P\}vYn–!<ìr¾a!ñãIW8iT²l”ä<)b®³¸¾w#T ‹ÍüP!»º ¼›Jºb¡¼ù3t.%½"˜r§Bfá~h/œp‚©DôÞÇñüuÒw…¼âPï(DÎþ³¾DoN—ü-xíGÉÐ9vg G~.øÑj¨ m „¿7 ùe§a²*°‹@,ønùš¶pþ<…§õ; Rå pk>rËLèo®,TEçЛ~R}=¸tl>ÎúeWú8ËbÁ'#Ži>BVn9®8øËá;`1 ÏM~ì ›ö#é^ýZËQÁLó<”ë_w’aãª�õ¦JØÏ·íMàí.¯ª8ñ#%ᆹªç›Â.¤èÁÚUý¤¸Ö‚Ì R Š˜«è‚içVT®F\fËC¸¸NS›CI×C,”6ÿYçlgŽ˜*ÅGÏáÆ¼ó%Nbt,~÷"Ñøá0KNÀ´/ì0g¹õ{ªÑü’ï”Ñ?«Ycå» VïBù±ïalº|'+àƒ×fÀÿPmD¥©ÏäNKM8Ênùª\xNf]3б¹þwiLq¼§­cÁß; _ðÙ&H38X0±ÀK_Bóñzä–]YÎ OLÁÓrgîE•8ÌØ ;tÞÐa"áÄ }½ÓÄ·ø‘’ˆ·«5æÕ6›·RPÆ\¥ûÏÓ…›ÖW29o’®‡X(oþ!cùb J5‡ 3uÂÁTŽ)b˜cP²¸1¦á6ÕÏ`btœë,ULéæµ=ÔjQvËWe¡œzmÑÛ‚¯NÞ›Ë oÅ‘#­xÑ%”‘®�A¤ ’]ˆ^ƒÆamîHç`@œ‹)7®éLè vˆ7z`ÔýLÁ€$Âó\Yº\ÃáÃе bÚ÷ }nŸ´ü°ÀÜ�lÖ8Gß ÔÅ  ‘Àžvš «ÚƒÒƒûPm¦2Ô1Ÿí{lÙ¦ÅÝ…YÝèj¹€ÊM¥Ðÿëa°–Þtü$GY3ð¶´ ç ÷™ž´,ÇHë`�ƒiþ< ƒnN¢¾Çþ§• ü·|Uü×k3¦àº~0v-1ÏmÒ‚X uPžŸµø>OÒnê­P–ÂÑpûuÿ‚gzî¾gs5ɨtÚÁæIß]Œ”òuÚ¶7œËaÜ.Á:R ì†P üÎu®öpmñ \¬ûå[ÿ† ÕfüýòwØ9ß}B!­W”t=ÄBéóŸCrZ\?S7”2ç¦=XÃîÕ%Ç{ØRÿ$† Ÿ0eôƒ(®<)9·Bœq•Å—×Q(­ƒ,÷4l=ÎÜ„Ò/ö¢pÃ'P—T(°%–à¿^{îžß‡‚ÊD”ô™Ì·ñÀÅ‚ùA(ž`‡¯lUÐ~ŸKÃÜîLŠÎEÊ­ÐÙ§õز¶5ëpªüde¬CÁß/à‡ëC†‹œâ,鄦25*OÅ2¶B£f KÍ”Døës4—æ¡Üò' þŽú̓ºéßhÞ»­ßàôxàvÜp¤ .ÎïE%]±PÆü™¡|‡÷ŸE›g>÷ïpÓh§1êìÕ6€QÒyI=ã8£kÃࢬ¯ðñC>^Bì,P¼æ—Ël/‚Ãú8t-¦¢Æm™PéÐÍÚ)η+ž~ŒºƒW¹_—‰d0ïÍSØÑŠ‘ðïö Ì—l Å€å€oèEh} o3Ç2qú`µöÁ#gë¹€Cóë÷‹Ñׂ¨¬{ýWXíž4I%b\û÷ÀèŽÎÎ1˜IJÐ/ÅV¨´5ïÃÚr †Y7úO‘¡6â·æ*lnÂÆZ ¹íhN¢ÑEµ§«Ã s­>,}t~tÂrñÔ¹kçŒ.Ò H*üΕiJÎí¨1#3“µ…k‡©Ö÷ÂJ3ŒöšsÔZ0É(bþ’±Y¿%Å5ÿ@Ý© leêÕ5¸üC)²Ø:’¡B–æzÓÑ)ã™À Úÿ댂ڌàùé2Zǯi-*Õ†­3>X…ê7Düe3àh³;Ê01i;/o &Å`J)AEéÌךóÁ�ß/ŠhùJ$ƒ%‚iÙGÑ:Lëï²Ç`Óm…*wNÕß­—“p^?Œ¼P †*ÿZ<ò¬£¢ït…YÈÕ|zK¼,Ð>Ýëû B]ŸÞÔuE.Džßá8Cp Ïo\V@ú4†;uØ«ë€k!¨Ï†&ý­t(˜[È2+‹ËIü¼`0ÀjÒ…E@DL´ë𠡬’1ôÙ=¯SCE?†ì-0T†ÚãdnB™`â¿'u ØB­ø+û ÕíÃsFfæFÔtyà0Äžo/¢ÉtçOìĦcÔZ0Ù(bþ¬ÝÖÚƒ°HƦè¬ÇæŒR4ýfÂÞmnÙžJ)-:it*ß S Jl3&‹cc˜ˆ˜ÚÛ$¦í0ìÖÃöWØÿ˜8ˆæ'ÓÄ)‡M[ŒMúÇ’i(ÁÖ霗³ŽZ ¾³H6´ù8ÊÏ^K¾Œ³å…(¨¼ÛEˆ–Ç0ÚD}ÿ|.…ï9±@@îa˜zð´ó;lßÛŒ—rÜgí8®n@ÿôü‡ûЫ/*c r+›Ðëz‚N]ö6sôd =¬3œ¹*¶±Ä—vè÷ çöEœP ÃefÉIpóå½ m¸h¤‹fÀŒ]‚êvL„‚ïÕtÂ縈={N£¾© Æó_A½©†„P»I­&vHRæfTZáPˆ8\,Ø ¡ø«d”»Ì8\Û ïp *×n¶%}}0×|ŠU>ÌûÎõX(ézˆ…"æÏj³3… Ã° ÈdTkjÕì%¦æè%RC´ciþ-Z”¬ùõ¡V¦cèªùb[�/›¿Ä‘Ö—¡kPÄ´ãvë~CÚ䞣ëŸZÆG Ø ÍÙ€âê«°SÎ;Šä´âU„8ßãPòþç0¹xÍâ –uSÚø: 2У&[zçãX»7´žD)SÇŒí,Jž­ÌVk„fd¿çž@ûHèÞ—žÉ¥ÁU¹`bÓs]à* Ù¹S!³p?´Î@¸ÆƒÝ8ѧ0éö£µBÎÈFaÅ7¸pJ‹k¼‚϶“8nêŒÊì–†c()ßyê­Ð€¦ÃgÐêDkålÔ?ÆŒ8‡¹%9ëùá‡ÈÑ(/u?¦à麀ÊàMšL‡LVyë …dDØÍ¨-߇cétÌ8Ìø^z0òŽÒ‚ÿýßÿ ‡Ã±0ØüÃÙ¿s´)ø í’À‚ïÕ¢Ëg‡aÏ~|[&ã?pB]"R¯Bo RâÛŒ‰~Œ¾˜Kt;1˜€ÇÚ€ŠÜ=ËÛ½™|ˆÓÍx\»Æ`=]Ósåº P\½v�ÞvöT]¦2­å‚š8ƒßã †["›•ºí¹Ïüw+­-Âç?Ê¢Í1cûš`WB|‰Öª$;!{Ê¢DLZuøÜ(_&Þ¬ó ¶3'[•‹â£çpÃ:8w_pÑbx Nãî`´*gŽÖÝXÈ‚'Æ0ƽ¾‘wþ¿·ðGÔý<ûä&.Ù’“«+‹-úzaªÝ²c1"Ü34~ß‘Ð!ñ¶HŽžóþ\Y@–ºvwÚŽP0 Dµ°j°(¦„D‰Á€ÜÜÜ༣û=—Á�øá2Õ¢¶uP2œŽ`íF=ì3Ò㸆š’\¨2Yúò^þÓïÒŠtj3æ“ùjûìh7[Ðn}‚¡el, ât6Ÿd3ßÀ#i”>/Ã~Û “éºÜ~éxÎŽ›0ßÕIïzíxï\CÇx”ÝL‚+d Va*ê[Ñi9‹Òœ5ÈX³3T6€Ïý¦ê-Ø2杻Ørõm°è÷ GºîÖl • Æá¶5¡:_š¯SÎLvžl¸}±¥šCЙ:áòCä" <O¬ta/4ûu0u:0äŸUH0€ize.~®g¨’V"¦,+šx ¦1êh…áèí`šÞ)vS(eÌUrêÜÂJI×Ã<¬Öóõÿz°ßs‹8»éÊËN Ñ}]øáh¼ø:…‘HJl3&Â︂²yÛ¨¡Ê?ã ŸQsA�3þ}~.(> ¡µjŽY¤ó1‰§Æ=ÈÊ,BùQɸ€T•’×õÚ$ ˜(D_êË6†Êg·¢¶õ™tvEL»À<¿–Þ¶cT–…”Ùd ¡uR…Ì¢¿£5(f臻ëFh­7ã¶}˜u>0‚§&èªö ôà>T›y*/}]ÎPUºKOÀÌý¦…æÊ*œ56½~®u(ÏߌʆGJ—NÁ€´%J@0¸ók…Iø ùEU0´:Û Œ=ø”‚"æªðVJº払ÀoV@Þ64v¼Š2Büxb6Ã6©Ì5E±Ñqó·È6cÌøñOI†-LÀ¦-Dnù÷Qý“/AP£ÒpUú¹öÑ•85¬<`6”Ï— ¤ a©Ìâp ª²ß‡ÆØ€8�£æ[ê&$ø®×&ÁÄÂZ †·ä V²^ªÂ=’Ÿáú™ßnâ\æK è&0AwT GÃã:5ÞßÕW.W ¤-ñZ þ‚¶&šÜuÈ,¬‚¡ë9§Fc|”äü)b® oa¥¤ë!fÈÍØ`ÇŠ€‰ †Íûõø�U bn„|„Rî]þÐ1OHΕ§§Ï܇7âB™€íô—øß/߯H1ýô6.=J¯k)JïÐúÇÐR[UpçwZ2¶Í8pà†<*çï�|×k“€`ê˜@¥ܪ&ÍØaiIµÓÍ2.ãðþ³hóLÂçþî`©÷4F=°ÚäÝd”æÞ†ãدû<Óãp÷=›Ó ŒÀi{›sDqþÎâ ´Ÿ>€ª†žEú^‰€‚iK¼š“¨‘¤6É„Í[)(c®Êna¥¤ë!œðì�Åd0<?¡²\ãÂÎTŒg+_P…Û¼3‘|ŸrŸX� žc0:æ’ÛÅ@@2+üÂoúoW¾ÉÊßÚ`ÔŸ èÑ`ù5-Äq# +ßR}ŒãmL¹îᜠ@h°Feƒ CõÚá€àÛÁ²e…¥A/­!Ò==jö¡°Ô,Ÿ}ìfACp‹žß)Ô”— 4ÕÝž‚-ïrP\óÔªÀVÖÆ¶ —(EVð¹£B–æ‚l×áìÓzlY[‚š‹u8Uþ‰4§u(øûü°s}蹸CrœéÄ“Z/­hBI.ñ2ÂF÷-hkoP0 ‰(f® na¥¤ë!šùì�Åd0ü/à~é´‰>êJò°Ë4 =ˆԌ”ûd0ƒaËA¬ÉøÊ-†~"0 G«!Ôõf¹ýŸ%ç§­ùL813Åj5væ`Mþ ´ëjÓ‰ø?£.è�(KØU¹p^¯ÍžÕ ’ƒP÷3ìùðÀz³6/e,Hm˜ ´Ä8C¶Í2õóv¼!C?o3Jׄex¢³›¥5»é7önpËö ŽŽ4Ê‘5#ù”Íû°¶Ü‚aÖM þSéû3â·æ*lnÂæ„ÇmG‹p.ޛφ‚S¤ã%£MB(É%Z3 SxfïWœ»F”‚’溶 b·¢Ýò# ÚÓЙ{¹Œ¨*ù³l€Í›7+'+ ¢· §÷T£A‚“éÃ)÷º¯ÑÌS]¤ßŽzM>ÔÛ\iD …•ßã’°Ìþϳ}0lÊF‘ð¯°l€iŒJÜžýé”>ŸzƒƒËzí)<­ß•*…[ó‘[fÂ@v±Ú¢sèUº:tÊø–òQfèÄS¯/vêxÀ‹á¶<Á€a Êÿ¶†‡ýðúbÍNZû_݃á§X‰`¦, ¶f\kj46$&ÚQóLz’O™ÔòðÁ*äƒV“F÷|»YQšžßðÞvW/yƒi.„R[[+£‘ïA‹Å.™KÁyMT(Ä¡_ñ£^@u¹…9ë•$á’բ耋b KÓÖ^@sW¿bIMà9:ÿë4N*a—0ð¶çP]¶êçƒ�´:†ç Ç™�–u Í<†~ãga^ˆpa=^Ú[­… »¦5²Ôk3&a×csPÓ`ýõÕ8m þÞaøz;åÔ. v/m1À±¤=3ƒ‰ÑqœZ6½3Øbè[z3OŽ5Ž­½_¡}Bœ ¼W‹.Ÿ†=ûñmýU˜ŒÿÀ u ޵¿ ½!µÌØõ(¨n—<›¹`À{5ð9.bÏžÓ¨oj‚ñüWPoªá¿í® :^2ZÑé-„âp8‚N rȃ¦25*OE×…S‡P\&cMÔ[BÁ€£ð~Ö H5>8®”Gõ·—³÷ö»ŠBw ƒµ°7PW½Â´­4 ŽÂ¦Ó`›öºÊÞ:Ñr± ›4zü‹?lÂñ#7•% paWEÃc½vÑÛ‚¯NÞ›ÓòoÅ‘#­xÑ%”Aà}Ç“æï¥Ð!o¬ZÙ®¯¥ñÃeªEmë †[`íF=ì3’ßæ¸†š’\¨2™ÖÔÞe–{%€¦ÃgÐêDkålÔ?ÆŒ8‡¹%9ëùá‡ÈÑðû½¿&õ:^œYÑé#„rèС ‘,Ÿ0 ò€2æªì~ÖJºÒñe3ÊÞß ­Åw(…Qô¿D¯ñ(ÈÒ{û]E黄L ©· ÇQV^‹s5ß.¯L@tÁ´“eÄxž…ÕÔ?Uò¦‚²…]• §õÚA¦àº~0*Ù_ò¿ãÉ â š??¬}O�¯Ü/$÷7õ°gìç,Kßãâ0܃¡ƒ"9×vÓ)”—@£=º\ÉGãÅ×-8e@ôõÂT»eÇbh^Í8Ðø}FB‡\“b/Ù­hÑ?ë вˆ«þ,\¨¯Žù¬€ù!Ov€¦RmäîAto\Σ£ñ`çT)(b® ïg­¤ë!X¿Á¶ùÖ[aˆn#4²ôÞ~wI—]BÑÿÝuºev˜Åxû9èÚàñx–¯àSz¦Š‚…] ¯õÚA¦ñÜ´•ÿ•Ö††ù6°¶i ¿ÜSÇ |6=4eg%ŸÃwÌõ£FÝÏòØÇÁì§½(Óÿ «ÃcnÒè3AwÇìB‰ÈjE‹¾4¬åCòKa_a>ŠÕŸ¢L1­b3Ÿ0?äÉ `�(b® ïg­¤ë!]?âóÚ6 /Xž’q<Ú‡ëÕ[±]–ÞÛï*JÙ%œ÷®Ö©%® ÖEèb7Æ—uñ0áÄü—pu7ú$[[qS!eMËǃ»f+&¢þ¤Ù'7qÉ6:" õÚìúkÍDÇÍß"[K®¸5'Á+#öÛ0U(U«¡ŽÅyÈ”3sVúNí– *ËÏM½Åy¹2e§鈌Vô_pwA¥*†¶{HrP™àC5Lž1Øëjaä¾õCl¢³æGê³ØÎº¦K2!CP0 é(c®aªÕ égÍøÃï¯ðñïÿ;ô*"9Ì¥ÑfçbǼÑ$wUÁ7èŽnK$‘%v ]>Ž‚2Kt Ëí"ìuýT9ck^>ÊL}è7}ެŒ÷P¤ï‘%­79Ä+õSQ™@á¯^;Ñ­9‰å1†.ã]~íã)+Œ×)@$=Ö#ù#d”á>Ôæƒ^é¿ÊB‰Î ˜©Ï ‰ûazΪ EL»Ûa¨©€¦ô´æÇe»)®FhvR0 ™(g®Òõà{…¡˜i‘üÁþðûk~° ‘Ä ¸»®B[Uµ¦Çô7ÑËωÔk—…ÖÝvXÛo¡Ñ ƒ ûIæ´rÖ9H@Íå&˜LM¸\³ ï«OáÊB�ãGœ¯Ü¼ü.BÁnjÔ;§€iê?ÿÖIéú`ØýìirÃ\#àrx ÇÔ�A³• 0DÁ€¤Àe½v"[saHvϨí&Ã\©²Ö�Ó½žPËR3™ƒª¬kOLl—æ§5˜p¯Ç*¥žA€êBÒ” º‡_{¢=’ð–ÑS1iÓ¡`SìÓìOfÁ€"|˜·>”¦¬Ì'ú뇶)蜄‡^• F`=»ùÛXžŽG]TҹdÕŒ6éÌ+ v^•‚’æª4beðŸ0†>»gQ ªøÂŽ¯Â ¹©4ßUZh1 ‘ ÛuªË¡.Ì*Kîî<áƒØ&Àá9G>œ‰vTç,÷¹€·õœl})ý/Ïb¼õkiõ"0Ò™f*û> 8‡=»§íç±KÂ®Š…×zí@‚Zs!¦àiû%,#2ÊŽPå“#Z/ÅÑ&|CÈrò«Ls­dåÄ×û³èçÊ4^ôôÁ+ûu8ïkèˆÎTdåh—là¿' ëðsWw¨[Nh<¨Gù'’Ogµ/ˆ7' ™=éf캄o…aaʹEÈ)>C¡R™°W^Øn¯==ÏâD’¦ðÊz(ùÏëòQÒ\•Ftv€2²¤E¾¢G£Z~žªÜŽ-AÕðixnƆ ‡qËÃéN»øÝç*ŸmDÉ¥°M(?†¨í ßõµ^“·¼ŒÀÙ\ß»ªˆk ²«Û>ÕônüT׌ß#Q–ZéÞÒ(èÁ!<×k¯¶5'!!Âß{EªµÈU…ó¦t…Z”¶š~À õPeWÁòR®›Ì‡^} Tª >ñL­sÎ`W L¬W~î:dï¿%¯ž“ç*ÔGp*ÌŽ„“¨,Þ ½}B:ÅÏpk6ì¿ OÊç¹Diš"6›ã•ˆ…Ì­¨m}–0ÿMFO%|· œ�†z~…Sé-$Ø&CxØå”̬%˜~ ýákT&D”4W%ž  ­�i‘×ä¡pG´)&8gùÌØõظf ª/^È|2™®£Ý)C«£w–ŒÚ%ãP:÷æ.7¦™SíìD³ù.l^93–Fé@mÁ‡(>tB2¿Fõ¾-ÈQ©¥i€c9Ïý`kÁ­¨4D^fËC¸ÒJe?žA˜Íúß°»•ÆpQ¯ý–­9 ‰¡`úÜê–Ø¢£â\æJ|$<”ç>oEåÚ|T·zb:{¢¿æ 5„`+Y™ð˜ ™× Š;qÀÔY¹ƒæã(?{9ìqgË —_Ž&+n\Ó6â±;<,gTï0ÀÆ~vÛa´°$(£TFO…}Y§!üŠx-ŒvÔ—ÁÒ »{<aQ9`nùpÃ\UóM¯¥ÈÑ„+‚Yrª¥¾%òž×•¡¤¹*‘ùì�åh,#HÇ9¢ËˆmÛæµ^¡ÆÔÂRäá£c·àòÏ`ú©;³ÞGay%Ê4:tûøí9.úúq¯^@e©jMj.Þ‡sÙŽ<SWïÂMë«°ìF�~:9C’A(p¿;Ü>²ÂöăѴú;yE9õÚ+kÍIÛ)ç|¶´Pù_¿A[rN ’›9Ò3Ö÷ñ—í;”èËgKŒô ë ¯r­±6›ChïË]6·b—“bÆÆï;0Â~¼D{Í®„éëÉ x£Âp6Šj[àQ¨Éþùˆ h:_‰|ÖŽJµeWú§¾,ïy]ʘ«w,j륔V, Œ¬�F´ “BÂaè:‘Qëþfè©ïq «¿_¢µê¬Ñ4Âø nãa®ExEÿ ¬7.̉vé/Áb 9Y« `Åé2ö÷+Ó^XÌ_Œ xH¤ÝßÉ!¼×kǂʖ뤕ó¦R÷âöÜ)"`Þ<Ñ­Âå€ Y¶ý}"×ñùœù'Îû %•—ÑË}Ù›lò)<­ßUVešd\;‡úÇÑ-ý°Tï‡ÁöLú™ÕÇépÒâYü@T�ò:‚±v gáwݱüuÈÈÚ)óÏå]Hâùð}»‘*b}öJ‡üÄKG¥V‰Gùçzöi=¶ÄêmOš)†‡QÛê@Ë×(P}€*&ªÇRHG³lõ®K#úz`Ь—®—,ä—¾Â|«?E™¡¾e]ÿ>8®”#7æ5Èœµ+°zb8ÑŠã]ù;yCõÚÄ*ù–µh_"{j²5;à”ã{¶àÀáÖ%ôODLv ØQÿ»|÷¿ømÇ?†J²]2ó¶B­ÞŽÂiM?v‡‹ ÜÕ?gääMv"ËŽ³¡#"—2z"³ðõõáÙ¢{ÑGãE´07vÃí'Q wôë-a_?LÁÛý`/yU¾d(.ê0À«=o©<ïJšk|Ü0WVᬑµþ eu(ÏßL-¬S‰Ux»0qÍG¾†éadú²ÕúC¼§ß¥¯ É9<~Þ©?Ðzî ArƒÏPÞø .ã.ÉÑ*†¶{Hz®Ï·ƒ½®vé´ÝyXŠïú<”ëÃî!i\ ÞT ûù¶£J_·Þ•¿“7”P¯M¬ÖÍìiìóKëhm1>2ô-NÕN ã°é¾F£+VÞî,ü-܃C¾¼ÞY‡›T[!´?{ Fo}%ö7Êì_$à9#+©·ÉyòV1·•‹ Ê Xâ¦/¯Z‡¼ £Ì=§ß RMŒž¦Ò5ó¸N÷w5ÁÅoé±Qh»0oš­óû"ccQ¥~<1›acýÞ‰Ôðahȧ€9+mø%óšóFšWúoÙ2K¦ài9‹3÷¢ìÉyÖºoèPù¼+'_(¢^{Lø¦¤™IŽâØ8W©Úü"Ý_÷þ‰ïZþÀk©^éY캋Ó¥(¯þBƒ#rËÀ3Ü;g@KD@ÀW‹;ËQ}ê[4,ÒMIA!á…uü5¢ÛMhWœØ,Y‰xÎÈIêmrN¼Õ8<°v<Q@JGl¸pô¤¥µv+23ÖC­ëˆJß à•ûwš ¦Lü7‚bIg ¯¯Ã±ÿ©FeƒRª”„BÛ…yLPK×*»^ãPšzè-±¶#§CÁ¦:إŒ´"|˜·ªe·|b)’ø/A@Ý>i}bÇVܼÝ[\±0©Aüˆ<'â ;zT'J,F1õÚa7β÷ãúo×P‘µz;õšX’Ý3ôÐn2ÌÕ•k 0ÝëÇÏɈèǽ=Žˆ¥¼ˆ>+t[vA{÷ÁëìÀ®;¸XY þnðø¡ék‘%K ÏÎ_ ýôT%É&çÅIK˜,’4ò(”Bºšº<p@ØèQ÷3wÝV{ÞRyÞ•4×øÌÀ×{!XB’‘¹ ¥_ìEá†O .©€¡7q5IC¡íÂ<7PSsq.]ír Šß×@¸ò:…‰’T¡Áæ¥ë…xSðt]Â·Â°ŽŒÃ¦-BNñq4Ú—¹ÖÌ>Aý–÷ Êù[óòQfêC¿ésde¼‡"}âqãㆹ¢GO±þݯǩÊíØ¢ŒiéÿxoCªH”P¯†èÅ wškvb—ºU_C¯{¾´ Œ%ijû%Ìî‰z«ò¿€)õØoç"–âsv®‰žÛâ¡ÚR§²ÄVVùœ‘ɇu ÍX'­û:šàéhòÖy<‘´…ݲ!>ƒåøî¨þŸQcG!r4üµ\íyKåyWÒ\ã":aÜ– U‘Ý#ÒbÔvK¥ëbú1ê^]"]’X9 mæ÷«¹ùÍØ¾‡f‘!<Œöê­”@$Ÿ™ÇÐoTÏuQ˜v þóï`eå)>vÿ K+°äà†I“‡Â1žÝLpÎR0 9ð_¯ý?†â ±&'ËÈFNÎ:éø=l©"Í–ˆï9©Ö"WýΛZÐ|w¢ÕôN¨?€*» ÙDX• bù íg~@û`ô&cÔ¥„-VkAF�C=¿ÂÉ}4Ç”å® ÞÛóC•-žäè2qà‰¤/\8zK2†.ã] ¬%Í5.A¡ªL”æ¹ù`€ïEgøM]W$Êo6ëø'vÔvF´½}6Ô•d!S¡b¯ÊdÞ;×Ð1åýÎ>ù’ß,“U€·õœ žf1Þú5Ž´zéL³õ*VG "%p^¯΢̀ª«°¹þÄ(/©î\2„ÖÊ È­n‰]Z$NÀe®ÄGÂCyÖQ…ˆXŠ�§ëS�ói?‡‚( £õåŸA°tÃîç×Va"ÍePk†m~ž¬d¤×ˆýn$%Ä»·ªhäuôð ½Eç^†=XmxŸtSôÁãŸÁL`†‹Z8çÍÛ KÏDè 3vXZ^‡4ä HÆyK zÞ°:Îô´ Å;÷".‚l'D[ŒMÁÔS‰`Þ—³ŽÃvw¬ŽÖ³hÇC9u´iÐ.LBgíä@ K[®Þ‹¢œµÈÈ*E½ƒwažtB2xL¥1®#i(µ.r9ÌàúÞP-ú»UÈ®n["½[ixp×lE¤P'‹õÌ÷š&’Š8ƒÀ ×+ñA1·,Ò X6l$ç³¥Uåÿú Ú’s²d)SÄ’'–x6.ŒlÕ¶pÑqÌßV¿¸­¥8�£æÛ¤¼yðDÒvÁɆ8›n+T¹»pªþ6l^–Z2 çõÃÈ 9"ÉL9Y çÍcFYñ!œ «™Œ§*Õ( ëožÊóùYl:ˆâÊ“1ç97N¢²ø Lž¹»YÖk$œÀstýS Áø#ö Ü€âê«vžPxm0 # Ú…‰ãpÞk€PYµzÊk.âž“ßv¥é Ûý8Žò³—î¥Ë8[^ˆ‚ÊK° )!8öˆ.˜vnE¥ájØßm‚Ùò.Î;嬌7õš½ŒHÓutp)Þ¶ѱ1¿´þR7eÜðx“`¯tÿ•jeÉ4R¢ˆ%_HÏÆkçPÿØY²à釥z? ¶gÒÏL¸Y‡“<v«c¥»ŸŸFûp˜ †ãúql_*Hôöp≤'ò:zÃh?~õýóâù)ɘÈ= Sï�žv~‡í{›e®;ZLÄy[–Šy&ÔÜÞd£”³`@Œ6& Ñ‹žœ r)½Ž–Ú…‰"V]ä |@ÉûŸÃäâ/ЛX÷€.ÜdiÚ>ŒÂhu§ãßꆹFÀå°€‡ÉÔ�A³=i½¦‰œ‹·«åOXÔ¢u|‰RŠÉNÔìhX¼;› #bÉfm0êÏ@Ð^@sW?F¹ØiŸ…¯¯Ï}½~8/¢}„Ý¿Ón?‰.*L3 šìÜ­»y™*d¨6CèŽa«'�<‘´EVGí@–6¾îè‡Q“-Í)ÇÚç¿å‹|.EÄyó܆¡5\¡|¾_èëI‹cí0üÄI0à§Ëh 3æëïC‡ÌXk½ŒŸ¸ 0£S‡Ÿ»º#ë«Ô£ü«n/‰Òëh§ài¿ ³=V­Ÿää¼øzx/ 8&�o»{ª.£÷]pX‚Áâ<ô~|pE­"¦íç±Kx ý+‘” ÞF¬ÖzîiìéŠþ?ÐZ[Œ }‹JSƒD,c•<®Cþ±;|¦ÞGlÇ©ÊE™AØ÷Ü…F픲ìËcuhî}•´ÀžHÚ"«£Ç‚šù¨æ †[";C…¬=×ᙿò'BøüGîÔâ#Î[`£áFíâ`�ÄIŒŽ½®ýJåyü,É™‹¬ñ\ ^51†±Ðb)ë5²@¼tÔ°‘¹µ­Ï8ˆ *¼Ž6X&‹ÊÖ¡Ð/$ÂjSƒÂ@‡«¨¥#±lDÿ ¬7.ÌõÉÖ_‚Å:øî¤ §u0ÀŸêšñ{Dš+Km­E~æ›Rœ‰·F!âmÄj™‚çÞ?ñ]ËxC(bÚu§+JQ^ý5„+FäZK9±_6£ìýÐZl ›E¢ÿ%zGq yû%àµãIRzö¯žÔÛ¹<x"i s¢äcLršw¡¢¾–³(ÍYƒŒ5;CeøÜ`ªÞ‚-œôÊ 'â¼-ñ‰ €ôš°Hd*Ï{ôg-RW ÀL�óÓ•÷™ÇkÚF<v‡ÒxfAõlìg·A ‹ì"} ¯£e×ÃûG"Ó=‚"¦ºj‘)[o^BIˆ¾4ë¥ë? ù¥‡°¯0ÅêOQfèáÔÈI0i ˆ½Öec³þ·4î!/$Þö.!J¶#Çß"Ç"–ë7ØÃÝFhHË`•¤ÞÎåÁI[Ø—''ÌP¬/ ©./ì슘v?€y¾‘C±²ˆóæ¹ cWx>F0`Ê ãuNÊ®›Ñ5vB˜³gÆu®Êb+ôcÆÆï;0Â~¼D{Í.Œn…×Ѳ–1ûN¡}!ä;ƒaË!¼§™o+ÀËær¬áyçÏۆƎè ?ž˜Í°±~ïDŠø .ã.¨TÅÐv±ohmƒ½®vi¥ìt!0‡õ1ÜiYáÆ5Á€ûÝa¥[Ò°=ñ’@\!ñ¶wZ,ö7s&Ðcé”GÇç-ºh¥Ñõ#>¯mÃðÂFœˆÀh®WoÅv£sQ€X ’{¬›¢ìܲrf[Rì\<‘´…Gµ o-È?‘Á�49…ر ·…9C^ñŽá¸…yÐp# ¸9…Ûæ¦ÞQˆœ¬<Ïç¿w!˜ÁÇ52…Wn¼ÁT//Ú¿7ÃÁž’ Á€)<­ßUV%™J¯£Áx·»ª. ¥ëÚšN¢$k ²÷Áyá$NÕìCaæ{Èçùo îÆFG¬Ùø�UÁÞïDj˜€Mû2JŒ!m˜ù`€WúoYšî–ÏÃvg 8Úì^´LÚÎãË HS}#al”ôCRŽbÄÛˆ·Ç S™•Q]‰"Æ©C(.3Gfu¦Š·è¢•z|pÔ—"{Þ>/ÎC¦d¨ ¾A÷8åÌ¬ŽøvîgÚGIÉ ãÁI[äuô–#´æÇ“®ž¹_Žˆ8o‹‚‹×Á€EƒÇ`ÀžZ~@m°MÜV佯p­zL8º›e50õn:<Ô±§Cí<]q´8ªŒlVýlá(úúq¯þ;hºøàñü„ÊrŒ ë&ÏV ¿  ¶p±O"¹0ÇW‡‚Mu°O³³Î‚Eø0o=TÙGÑ:œæÙ´†ÝzØþ »âXæÍ“ŠþÛYF_ÃáÃе bÚ÷ }nŸôM³]·ج=pŽòØ%%P‚x±:–¡“Ć:ªÄ3UÄ ¸‡È.Z² NÀÝuÚ*ÉvÔ”ã˜þ&zGh}Z=±íÜÿ4Æ$Ù¹<x"i »aåà sU5ÎG¤™D¦s¨¬úIžÅn "ÎÛ¢2ð\&°Ë‘’ŸU¢¾£×/V£(›e5”¡²ö,ê¯wÂ){:.ÕÑÊŽÿܯ"ŸF¬Å[]Iv™—›I„–.á[áGXG$'F[„œâãh´¿ ”¬¤æKYÈF1í¸€Ýºß Ü‰¹,¬µÅ'p±îk”oýX;©¿_þ;³Tsk]ÖnM6œ‹·«E²#¢;iE—~ÄÒ{JÑs n4UGd{¬Z”Ê  rÁ$ÏÎ]—´¬QÞ<‘´‚}yòÁyäs ؼX–€ Ç‚ADüS¯vî'0`í‚Í1ˆQÿ¯’óCÑÑgØÚ;Ð3þô”ª£åQ2 Nï©F9))D„p¯ð�†z~…ó]¸!&âôA3žÿÔ1XO×Àô\É;SÏÑ\š‡rËŸÒ×û;ê7ÿ ꦣyïn·~ƒÓãÛq‘&îº�¥ óõÚKÙ2×k«…‚«&nö• ®&ê]‡Ù¸Vk;ŒÇO¡ùùTè5‰…O$m‘×Ñ“.& }i&Ñ£FÝÏ|¼0?YQô1•ç}yŸå“ŒÔjc¤Ê{Ì3¯í ß º|ò²‹Pþ7õØ÷é8¸Ò›ˆWG€ß/w b9<ÇcgÐS{avÓ¨¿×Ï¿¼8 õ& ZV¿¨GƒåWx¤K’H¢ù4„ŸC}ÐÃŒ†úòÏ Xºaw‡”éÈ$†#ÐÙ|_ÞÀ# è(²$,ˆ_8gô3g$“¥·ÃTk éB0†Ñ^sN!%Q DõÚÄêX `*øêš.É ÁU0`nc%j²dåP¹`òˆ¥ ]£Îz|RÖŒ—I8¹<x"i‹¼ŽÞÝÃÒÅÄj ûÑuëôÁ™d¸ßz€§ÁºÃ�^¹_H®5_Dœ··ˆ>F¼?ÉD~–¿ã Êr׆ÍóõPå1ª8û=_HÉÝ5° 8`»¯‡æƒí(ß÷)Š·íCõ·°ÊžéÁ}ºl^‘Ÿg˜±Ÿ…,ÍôÆ*¹xÐZ]"šN~8q ½†ÝÈÊP!37¾Ø·Š?EIÙÅØ‘$ØnQé¢u&rd£¨¶…o ŠU20ãßçç‚Êfvýg¨n®iBæFÉðÀa8ˆ=ß^D“é Ο؉MÇÚ–¸#VE\›#|pP¯M¬é9¼s(‹ˆuØj‡¡¦šÒ#КcT”ìfW#4;å ì”>{.ãÉwûEÔ”†Ò*̮̽÷Ãe,ÇN9¯A*L"±2~Á¿ {‘½^ [Ì,Þ<‘´‚=4äe¾Þ ÐÌ׆ Uî>ÔsšÒqÞ<7PSs1RëàÊ)h6Ž}Œx’‰ü,¦î]ˆÜòï%£-l¾¦KÔŨ4\•~n}ôõœÊ¹.XÝ$>xýx&»³çƒãJ9rU‘×óÜX‡üª+°zxVàfÁ€ì8oÆ¥Ó?Æpž™¦D-ÞÛ¨‡]îSÑeÄ6Õ{(Ò>ÀˆädÎíP¸0m7à µJ!x®CýcWTÆW?,Õûa°=“~fâš:œ´0Ðt…•lÆòùr%Ü3×¶Â;܂ʵ›¡·K뙯æšO‘£Ê‡yFæ fÑ®,‡)ÚÄ*õìNäo`y:µ6Š˜ì½„Òwn´%¥>ûøºq¶äcl,xºÈFGoýQTTŸÑ6úP¹`¢`vbŒ2oUö_ïG2 áxóDÒ öåɇˆé§FìÌz…ß þz+ºBÑ¥ö[— ­(BfV9L1så%â¼MÂùgô¥?{Ý!ݱû ¤ò¼G~–dÈyZpúÌ}x#V‰ :q³w±w'ï5¢@flЮÏC¹¾1,Ø"«Ô›*a`?ß¶c”Û'Ñ\0€í*UÃëpÛ5öàœÁ°åÖrÜaƦÅúŒ0ºçîË9Ãx�>ë7(Š0¢‰ä2ƒ‘¶[¸ÿÂ'séçö‹h *œÀ$­+åýLFoÃí'QÖß {ÖÝÆ¥‹Ó*•É |v3jË÷áXããE%C33¾o—¥ûù»Þ<h±Ø1ås£§çYœìØ ôX:!ËÔ­ƒÏÝ‹÷Dè—QnE«Ìû†‚í¿“y"ID^GïÚ«?E•ÅÇœÂ˶SØZÛÉ{ÄyóXPg²‡ÝÒpK‹`M!2ã¸ò$ÏÑù_§q²îg8XD7àõf lÞØ¢ X)Sð´œÅ™{Q;36èÝçÁ½"^, P¿gö|kDK×CtÝÒBµÙÕ§O>‚¶`ôö9#%`óá‡ÈQ‘pPjázuµ•(Uï@qÞF¨…&´>x�ÓÑ#Áö¥³Oë±E•‹Š´Î pá†á¾Ö�‚k8¬×&V‰ô.S£òÔb=ˆ…qêŠËÌ2• nÅ»ˆ@ µ©¡ä‰$Y=¶ƒªi€s) ©k¾OJýÉjˆ Ä©ßËܽ-¶»ñþ$ùYsm¡TªnÍGn™ ýMØ•¥‚ªèzc¨{§r®éÁ<íWa¶Çj7)- /þƒ®Ë˜Zøß°¡¶ãó“ ü kÃf²rU|=n`0øç·:­¯°i‘“³ Õ1v1‰TÁv/+Q^ß‚ÖëTå"¯XÒÿ×ÿ@îÿã(š¥Â¦ ³ð{zpûâ ¨™V ‡Ýq…¡„zmb•ÄIÃŽr­'ñìÞˆAºDâ O$‰°V6˜øÐ¶ú7`Ô|Ë]:rÄyóÜ„ ¿ƒî!<òÇ5nSyÞ#?‹‰?csýïÒÜ&Ñ__ÓVæ´2Åë/‚µŸÑÈz(‘`™@.*[‡B¿k%úûa>\ÅqnÉ‘ö¹a»}]žÈòÑ?Š/Fùl‘èí@³u©\ê/œz$·dà:l<õIöã|*³V¡&Ï_ðÂaëÀýž4SwŒài§ :Vî&­¡™E¨ÐžÃ)á&ˆÕ¡Ðzmb%¸©µ ¡@’×5‹<‘$"¯£7„ÖªRè¤Vl#p“½ÿÀ' ‡~à ç-0ŽQßÿ½¢6fò$óÜÛ‚¯NÞ›ko5ÞŠ#GZ1ð¢K(‹XÈçá#0†>»g‘ú«øÂŽž˜-ðd„= ß?‚Öñ°Ùz,0,æø2·Ôã)ÉÙ&ŽeíTP™@jðöàv£ßVïCI^. Ë› ß·G¸E1Ûãö÷¥ëm-rŠ¿@ÝG¡çÁ &FÓ©•"ËÀéBƒöéoìƒ)œ{¬¸y»Þ4îÁ¥ëµ …CÁ€UÔ5xÃýAº‰Eº&“Õ5‹O$ma²|ˆð÷žCQövÔ\¹ƒvg¨æÞ‡­Íu•(ÌúÚ8©örqÞÞ¢Y*Ï{ägMÁuý`l¥ûì/ÑîÀ†ˆ|¿\¸a®(ÅѨú¹S•Û±EÿÓÒÿynƆ ‡q+j7;刃hÞw íó‹áœàÞ{šù2€—ÍåXñ�Ÿ" ïêq¹Åïk \iZpl:_‰ê/,#ÌX<‚jKŸ´¾ß…^ó1v”ïAIñ”W‹KÖt ÒÌg×\ĉÒϰ_gB§Ã ¿˜fÁ€Ù'¨ßòT9ck^>ÊL}è7}.= ßC‘¾'Žè±jÈÉyX ÝF¨kº$+.WÁ�u+H× ‰¤¾kžHÚ"¿£ÇÄÖN ?Ö¥úÇZžqi8…Ÿ··icþþdùYÓxnÚ‡‚ʼV¹gÃ|\>ÙçéÁ¨ÉCá5Ôê¨qÀç,GÁ�ÉùïÖaWÕ´t=@[ÓI”0Á½}gp^8‰S5ûP˜ùò…ò´JWÂz ÏØ¾‡&X Î0Ú«·Rf€l„wðÃÑxí#,X€Ï;€'Ïb¯?Êg£O;aÒAii9J«›Ó§L`æ1ôÕ¨wJîÉ´õŸ++à ôÁ°ûn[*rrÞ$›gç~˜ž3{FÄ´»†š hJ@k~ŒQ–…ãj„f§|Á�îu+–•-HºoE°6µ]³xðDÒv3ÈX²Â¬ÿåɹӔãØÙÑîd‚RSxåæ. ~ÞÞ¦Y*Ï{ð³XöBÃqì×ý žI; ÿo\ì& ŒÀi{›s$î9æãÂÃ.§äN(…)xº.âhq.TÙ(¬úvß D_?îÕmC<ܦÑzp§ñÁkñÀ³Onâ‡Y:±˜uü;Â%DŸ u%Yq;|D² ê…¤U7�¼­ßàd0À6‹ñÖ¯q¤Õ+=V:!¡Ì§dANÎ;À¬gw"›�Ë"qU“½—p ¢‚Ñ&Ϧ‚t+<·aÖ£×çŽt Gê»fñà‰¤-ì¡!Ëpð¦Cøw;)çí-Ú˜¥ò¼³Ï ¶ïZ[‚š‹u8Uþ ²2Ö¡àïðÃÎõÁÏÈX¡'¦Òº¼×È<Ü5[±yBIªrpÇQ1V!»ªeNk‚wÄ!tÖnAnñÔ°]²ê½(ÊY‹Œ¬RÔ;(ƒH6ïH-ýì�®ïÝU¬µ‚çÖ£JG õÚD˜+7êéyÆiÉ çºLÏk"Üàû$q°M£N /Õ^pö Ì—l k OÁ€$ÂÜòᆹªç›ÂRL"F®dqØŠ)ò¼1CoemÌRyÞÙgy›÷am9bœ‚³þSd¨ø­¹ Û„›°9áqÛÑ"œD£ë¯Ð»^#ï52’Ôç¸qì Úb ŽÃnúõ÷ú9nq'Ý—•U8k|]oo2êPž¿• 0¤_F‡ó^„Ê2¨Õ»P^s÷‚ÙF‘dÞ•ZzÑÓέ¨4\ {n›`¶<„‹ëÖ£ ‡‚ï�´XìoȆœ@¥SžL#ÅéVLaÈqÚ’÷‘[q]Á²X&æ,`7Ý'oA<›<jdEëpbž H"ìË’øÁ�&öÔPmDÙ•>7Ÿ·Yø]?Ãp'öB˜ÊóÎ>Ëc* ¥G³–^yÁ`€Õ¤[(m`‰v¾ 3&æ‘÷™GºVj\ޏN$GO³C•-’Yñ{ñ<h­.‘g˜1Çt³š¿0Ä1<®Sãý]Mp)¡‚· ¯¢j-H¤ˆw¦–~.â¦5ú^#’Ê¢`�‡âmÄ*‘ìˆ25*£D“#Æ©C(.3˳Y¦Ýа–ÎA›|ôeH¤ü†|Sð{¢¡âc*§y+–°ÉÏÿö»Û° %ÆÒ¥`@‘×Ñ‹U&Àœè[8–¿Y;¡ë|Î¥Ã÷¼Æá²Þ@ÝÑmÈQůÙKu0`Æ®GAu»äæÍÞ«é„Ïq{öœF}SŒç¿‚zS ÇÝ|pEœ"¦í籋;!> ÈÁŽóf\:ýcŒ€À\kÁ÷6ê•ãˆ/Ð~ú�ªb—’pGÜšZj-H¤‚w¥–žÊ·dAZ߸o#VÉ2w^åÊœûŒ 2ëVxnB0öÇñ!&àl¿ K»Ž¡…þ IJI½MNÁ€$ÂnX~˜‚·ûÐd© Ê?ŽæE¢)üyÞfáêCÛeùYÒ¿­E®ú+œ¿¬‡ž“Ì�œ0>ƒVï Z+7`£þ1fÄ18̵(ÉY‡L¦q ‰ýPáãq㧺füŒêΖZäs×¢o.À‚¢¯ Çu¸í ï§>×jp-×­™¨ç#Ü0è g o°$¼MLRñü„ÊrŒ Ñé&ÏV ŸZ ©à©¥ç°(H_D‰(A¼X%Ò½õÙɰÅ1˜hGõgò> n0Ńe›žÄg²XÀ"…:˜­ƒðÓz”@$›Ü`Á@„M>ˆ~Ë—Ø$Û–'o5í`n.`Ž©é ä«Ö!¯ÂT^ç™ðó&ßDZ k¥ßm€FhBçÓyeþâˆE¥ò¼Ï–èë…©v?ÊŽ]]|~ghü¾#¡Ãpø¸FâÙØ¬ÿ-a%‰áu0€Áõ{v`Ï·F´t=D×--Ô¬Õ ·NÁ |½‚A¹ŒÌM(ýb/ 7|uI ½cÊp¤ÃÚ Î3×M »LPB¥¡`Þ™Zz%•o¥Ází±¥ÅÛ¸ª×&VŽdG”j—vªV¥ò"KU#{©Šçô&;ÜöV\<±ùEU0ÜîÇOÀêI½MΉ·šž°/OvÏÐZ»™ë¡ÖuDµ\ à•ûÿša8Z ¨.ÿ2´ØLÁ×o†îZì…0•ç=ò³fà½{&¢Ã%T?¹¸F¤…çš`Àýn+¬Ö×ÃöÄËa´÷9šKÿ† á­íÂÚp…™’ƒ¡Š¯'À¢Æm™PéÐ=2ÍžèsÇôcÔ¼:×’RˆÞ6œÞS¥43ŠÿëÖ\_ª–^ü==J/YQRùV¡„zmb•ü KEŒ1Dç]F|ZÁ„¡e`Ø‚ŠOKØÁe¬@…åÏб „k0;fëQê*Q”¿'.Þƒct^3‹X9±lò_aNšM΃'’¶Èë艌<‚AÃÚÛ­‡¦®O#RNØèQ÷³<‘Ï%ˆwÞDßc4”}�Uf&Þ[¢^J¾`�S. þnш£úÉþM~þÂØ¨RÒÔçÚÙnßD—'òa#úGñâÅ(ßéj36h×g¢Ä80w¾çƒ¾_”Uï,NÂc½ ƒ–Çz4X~¥"E¸a®(ÅÑ7‰m9û´2VµØ(©|+PB½6±JXç'5r«nEm…¸a©Ú„M†>y2ÝÄßQ¿ù#TYÜ1²˜°è-TånƒÁÁÉVÞB³Ï\xX�Ö|�`†ÍKš+'õ69žHÚ²!>ƒåøn¨ÕêøcGaÜZv9‰8o¢CöÁ¨Ý?·ó«ú�êaé¼…æC¡E’ÊóùYxÌj.‡µ ¶pÜÍ•—bª~Êz20›¶›ô e°‡hÎÈËY§œ:`q ½†ÝÈÊP!37¾Ø·Š?EIÙE~32ˆ4 “&…;b<Ó"ÆQ˜XÇÅ¢¤ò­4B õÚĪ=×±'ë=䕟EsÇc8ƒÁ6'z;~‚¾¼�ª5ŸÁè’ký˜†§y?²T(×ÿ„Ž^ç\0ÐùÍgQž·k¶ùé> \Ãõf]ÈVgöAáœëú3¥NmúZm)òD’ÿŽÞºŒw¹ˆžÔçB•Áô.ÃÆR«ß@*Ï{äg‰˜ÀŸÑw+KߥE·oñÊÍÿ5B$œÀstýS Áø#´9P\Ck‚SXúä6Õ{(Ò>æ/Jv�«]taÚnÀA£“üD’‰Õ)'QRùV¡„zm"àíÔ¢„é÷HvXÄP}Œc-Ï–¼’Žø':OЬè¹IC•-™#6´Û' ú_Â~_õÚÐüT¹(>z7¬.øâèzo"õÚR䉼ӈ˜ Ìpg¼³%’�|nn_<‰ò¨¹x¶þ_Ðú ‡™?]€é÷ÁPJçÜp;~FMþ&ÖÅUž©œ+Át³öTQˆ^ô<àN¿#36-Ögì„Ñ=˜›3Œà³~ƒ¢7Ñ‘<Æamî€7t¤|”T¾•F(¡^›X%óÔl÷Õ ³þK”kÔPkÊqììhwÊÜmk&€àô‚åx× ?VZ Mù—8k쀓‡¥y!/˜U®'$Û¼GI‘xEm)òDîXÒA• \©ÙWÀGÖ`@LÍ�27×Á6¹øŽ|¿\xp§ñÁkA¾ÔÏ:0…p~îêŽØí³>¨Gù',V;Ü>ÎÝéÉGÐlƒÞ>—H° Èaí3U *Øû ’I�CÝ”[ÍF­µrõ'Ò¥Õk+gv�ÍGÊP^c@s—CœéÝ̺šq„m|šÑåà4(¨­‘…ü²ÓhêìÇ(e$´¥(@pG„ƒìmCcG´j´Oþ·MŽØzÊïO2‘Ÿ€çÚwÐßÿ%ÒѳõÇ}ؤr®ñ‰W›Êc?k¥.âë°‘¹µ­2§(. 3ˆ;ñÏou0Z_!`Ó"'gªÃGö�‘lfC¿1EÕ4E´Ý3ÁÜîTDv Á3 «×&Þ’Yø‡úÐfÔ¢ªtª´F´ÚÜü¤¶/èeAiéh­°¹Çù± <7!û9¶S”Lêµ¥(@psˆˆ«ì2âýI&ò³$'il ¾ÿ„õÆh™ªµþ,ÖÁ¸‘ÝTÎ5>n˜+«pÖ&|hÔ¡<3‡ý¬•¸ˆ…×´xì~]FÏ,¨Þa€ýì¶Ã"hañòù˜Gí¸Í®ó¸§Eˆ¾§’‘ünÛ^’a@$Ÿ` åž…2•×ðYöF(Þ뵉3_ŠZ‹2im9ÁÛŽ|`nÛ\¬Ù‹m¥'`hî‚cÈ/ïZ÷² ÍâËl™q¢ëaìr^â ¤X[Š‚ïü×U²îžŸPY®ƒqÞI55Áx¶ùUh°y9 H6„¯'ÔÎ1 ù¥‡°¯0ÅêOQf艹kšÊ¹Æ'F»8†Çuj¼¿«‰³%.b1†>»gq»¢¿ïÀû9ðí5»bjLpÁx+ª>ú ×Äé'0îÌAfáç8Z¶Bwð/ ˆ$2áNöê:à ¨yì0éo¥Q™�ËÀéBƒöÔÝ蓞ìØŠ›·{॔ÜäÃs½6‘<ØŽ¼£ ÍuG¡.©F³lb#ú½pt]GÝÑ](9x]>ûL²Í«*Ï-ÊÎ Mç«Qe&¡M%@Á€´E¹u•²ÿܯ"÷EŸ u%yØeˆÙ6âýI&ò³˜°Ð.¨TÅÐv±X3¬B5Lž1ØëjatýzÝkR9×¥‰jcR_‡cÿS-9رƒò¡¤ÀE,¦ðÊí‚7¨ àEû÷f8˜m¹ ˜ÂÓúPeUr›0cûšúߥï`íG‘½¦Tº¶ýÝFhH@H6³OP¿å½¹gYôH'Í€Ðß©Êù[óòQfêC¿ésde¼‡"}•C$‹yñ6"ñ ÅbCG’ ô4·À%ÇÅàí„¥çM»îv4_wÊ÷¼›µ>2¡¦®Š€‚)Er<é¹y\WÉ‘¥½m8½§ qZl¼éý‰$ò³&`Ó~„Œ#ÜÁ‰Í¼ÒË8î&ú6&«C)‹XLà©åÔV–A­Þм÷5®µâA Gw3G†íþÙÐáàñ¼Ï1ûôv×ÞÅýwP[ð^¨<c.ó1hävÞDºÀËæ“8nêŒÔfaÃÁ‚°iBð®F½s ˜v þóï`e"´>vÿ�;mP'Eˆ·«Ä S™d3œ$"Î8uÅefy‚‹3ÊŠáT¬y…Æ©Ju\í”àù:cOXfVŒÑg‚î”�Æ2zOK÷Ã×R³¸(¸®r‘ƒL×» ƒ–-‚z4X~…g õWù‚"&m:lªƒ}ša (‡yë¡Ê>ŠÖáÅWÁ�Ú˜¼=J \,…d|V‰úŽV\¿X¢ì<«ËPY{õ×;ùMGÇÐkج§Uå×¢Í;W«Aº7¿Eƒ5Zì“ ’@`ÇÃ×Á ¬i×Ò*�oë78ÔÆ™Åxë×8ÒêE`¤3iŠÒDÞÅÛˆU² !_6äÊ4R®»Ëí±ÐAmÐÖ= Ë'õ-¨)0Ü0WUã|Sä.üëÑ„+‚Y)[\”[Wɺ2ówã‹}›±¡øS””]Dog)âýIfñgMÁÓu ß ?Â:ÂA‹S|vù³â"C“·FQ‹XL`ÀÚ›c£þ?`*ÕÎßù¿C2BGŸ9`kï@ÏǦ§t_:nüÚ¥xs€Ž G:—`v�×÷n„*hø‡²«Û@M_SâmÄ*qã'C;ÆÂ¿DÉ/ /s›&‡SŠç6 ­ášX¬muuDviÀªE©¬™ È^P,©oAMÁ€„?Ðt¾ù*é!®Úˆ²+}©IÑWp]%›ã<¢Ëˆmª÷P¤}€‘€Z�]˜¶pÐè”ÝÁ^ÖgS¨/᎗ÓÌ�Ú˜¼5J \Äd ^ɰl4|ƒêòmÈË.Bù74ÞÔcß§àP‚Cý:‚HŠ.ÑÓέ¨4\°'Ì–NÉ%5{9àF¼X%al4*“ˆ§`@`£áÏRƒ¤<Rß‚š‚ #V™À,ü®[8–¿Y;¡ë|ž°/îÍ(·®’]èóÌØ´XŸ±s¡Üan€Ïú Šâˆ•…¿?ÙÄÿ,Ÿ Öçp´8ªŒR˜<‹g›Ê¹.IŠÛ˜¼= \¼iÁß]Ë€¶ûzh>ØŽò}Ÿ¢xÛ>TÛ+§™o #ˆ„¡ø€àraú!]¸]z#ý½§Ëå6{P‚x‘@¤ûl¨-ÚO±&÷�ê»þ˜ÓšêBMPÇGn¦0ä¸mÉûÈ­¸ˆ.—Oš±(MOÀn™ƒ»kº¤ÙÅGk‡á' ¬œÔ· ¦`@Ò˜‚·ûÁTFUþq4?| 'qöfô†kèrû¥ãq8;n¬€¶Dòä#h ¶AoŸ{8¬r>ü9ªP¬¥\Œ¬Á€P­áaò3UÈæ©>ñ\Öç83@a(&pñ&buøàuöã§ÏÛè"q¤S@p)|p\)G.Ë*”ž‘cò«®¤¡NPúó;‡èÅ‹y‡kȇ€Ö†Èå"‹vþÑ—!‡ð†|Sð{¢¡âcywÝ£3)b!Nbtlq-âM¤¾5y"É€ÕÓš¾@¾jò*Œ29)Ch­Úc–ø¥ò©q²2‹P~t/4ÂÉÌà—H™íŽtâŸßê`´¾B@rDrr¶¡ºñq\åøÈ÷'—ÈÏšÁpÛ l`Æ[Žt“š:ñttÎaŠ×®(•sOêÅJÞ%Í5My‹�A$”´ .A0"åúƈ2ÓUêM•0°ŸoÛ1J7\b¡ôçw�É® Ä[+Dø0[ÚåË¢g˜‰wcOÀÙ~–v«¼åBË oIì`€øÂŽž`&@â[PS0 Ñž¡µv+23ÖC­ë€' à•ûEjfHhà”>^nAUöûÐû%‡t�FÍ·\§R²‡íþp¿Z<Yq¨œ±Sù"ÞŸd–ôu Õð%Ê« ¸Ýã?0†~ã¸Æm™@êÅJÞ%Í5]Yy€Ž Ëz»m–ãŠËz[Sð´œÅ™{¬áh3ݨýšá  F âmÄ*‘ìÁÌo©ç&f¯‡¹„Í æ;g‰Eº>+Jq4ªõå©ÊíØ̈û ®ïYPòSüì m8® $ É@yƒf½ô­‡¦®OçÓŽFŒºŸS“vÄw hýã?h©- µ¶›†ßeÆ7ð’ãû7ÂAöÜ@p]᎟4ÔÄ'ÂMXíÏà‹ZÐå Ì3ŸýÊrÖ!3sô:ž5R/Vòö(i®iŠ·æ#‘ üxb6ÃÆú DRQnÖÛʉ±ƒIšÉE âmÄ*avD2 ÷Cg¶ò× '˜’ ÌÖAi ýž'|¿ÂPþ ò·ÕÀØí!{+¡H×§&…;ÔP«£Æœ³ÓðÜ:Œ ã8C|ËñÝ‹¿¸ð±£9šTÕ …µ_R}ŒãmL¹îá‹05X1±ÁºÞ˜²§BfÑßÑêy.Å~Ÿ*¢?Kô¿„½­ÚŠ"dJÿ¦ÊÕàÄÅ[è¼ñ3Œ,NKKå\ã“z±’·GIsMSâÞ“T&@¤�g½­ Ò NÅÛˆU"Ùúfô»£õâ ¨óY׎Ûèáå~òÜ‚Þd‡ÛÞŠ‹'v"¿¨ †Û=\¶ïýÃpS0 ¡Ä¤O. H)cè2ÞM¡ ‰ˆ€ï†–6ÍŒ<?C[ÿîpÇOÏ,'°Ã` þìvÜ‚pò¼¡U<âýI&ò³¦ái=…✵ÈP âŠ-¨¶¾©œk\ħ¸tLÀÑi·7ë!œiOŠXÉÛ“za" –­Ss1²ŽùÊ)h6Fƒ-<½– ’€‚³ÞViÈCD½6§âmÄ* ϸñÁ*”¡Úð*‹¤ïõÄE´:dvnïA&ºõ( u•(Ê߉ïÁ1¯EE¤)qìÜpÄ?ÑÓ“¸Í $iu ÍXAÐÁÐüീ\3Ò”šg÷›(ø%ÂAöõÃþl±HʌÌïÛYÕ¤t·ÛPSpzaGH¾`@ˆÀ8ܶ;¸XSå'qñöoèïú~á63àMi·‰+y{¦ðÊí‚7àŠ¥ÆÏÓ\Ó”ÉA8ÿŒ6F&`¯;¡;Ž!ˆ$¢Ü¬·•O3ÀÝ¡¤,–¬×æD¼H ,P=WÆ)Ùn®‡õ¨Ø‰\�“í¥ü;Þó­S™­ësáaýlXód›™aóÒ5˜žÄÖ ˆ§¡x˹„i6P0 aˆð;® ,wmÐÁ›ªüh KaOo H|ÍI¢X‘ƒÌv‰¶d"«â™‹™+¸Œš’ƒüj¼1íVzylèpŒ¥(µxjùµ•eP«·"ï} „k­xÐcÂÑ`O`žæš¦x,¨3Ù²t‚ƒ•fÔ"“Ô…‰”À cåe½­ î4vb8J3`öÉM\²‡Žˆ„£„zm"°`ÀQýè6ëPQ˜´Ë22‹Pq®sÁ®”`0à ®‡0ëö£µ¬få±…p®ëO²sÒ’%4"ÆQ˜œ‰ñ/)(ÄA4—@­ý6÷øœAÌzÎ÷±_–ÔÅÔ P$Š•9ÈSðX#¬¥”|Á€xï\CÇxTÀìüï¿›áˆaUp PlÚ­tV‰úŽV\¿X¢ì<«ËPY{õ×;áL§6c<O3 s;ôä¤D‚`"g±ÄRUÈ®jÁ0yÉAAõÚÄÛ2„_Úø‹Ùèö»ÐªßÝ[k‘SüênXá’3Ð8bC»}bn3é¾굡{_•‹â£çpÃêZ$œM¤¤ \Xôn[}pw5ÙDR1% ¶è­†Õ¾%D~S.[´£GÐÁ^üm°“%¥ÝN`ÀÚ›c£þ?`*ÕÎÝ[ó©tÒÃ}ô™¶öô ¥ó®¡Œ°4ZýtGtøèÁ“!?íRDÂpÃ\Y…³Æ¦×zFÊó7£²á†èfKT¯ýà–l‡Q˜—5gŸ©>j[Aóp_yÌ(ÍûyÁ,€y!ê;ü)`~Ï#Ü0è g o°$U0–‚‰BtÂøùi´‡=(Ãp\?Ž‚íF¸R~{p×lÅDÔç*!Åpµr*ìÈÏ Hkøq”Ÿ½&øtgË QPy ¶Îi*çº4JI»‚×v†oP]¾ yÙE(ÿƀƛzìûô´{“|µÞ ˜‚Ÿv+"AL`Ð=iü‰cx\§Æû»šà¢¥.ùP½všÂ²n²™¿BSg”¶³ï²_vMý¥çê;FØ]æ&”~±…>º¤†Þä”ÀR0 a0Í€h²sC©ù[ç¢zªÍº£è)A¹)†«uWûþ•ùYÒ508ˆWçVº©ÿ€’÷?‡ÉµØxHå\Óéß]Ë€¶ûzh>ØŽò}Ÿ¢xÛ>TÛ+e¤”€U‡²¸Â[A¬ñÚO@UC|ä$ª×NSÜ0 f¸xu²—±$Ò¶¹¼-ª"ºG¦_%§£îàÕ¤l.“'’Pfáww¡Q{¥ê](?V‡æÞ?áóËqKK‹]€Ë ;Ôl4@Ðlç>ÅP¹Á€Xàm×aOÕeôƨa§`ÀjˆÕM@"àƒ×Ùg¤ü}¸R¶*éÚe×oÄP}„*c7Õ×ĪQnG ECõÚï�ƒ¸Õü½¡ŒÖ']=s6EªyÙ†æG¡ƒ8Ì8Ñõp(t@¤Á¶²™(1Ì烾_ IJÙ9y"ÉFúO—5ÊôaÀ9¹1m?]Ávqü¼«aµï_ ±>KôÂzã´¬æ^ –%‰S9W‚H36-Öç–Cßh4᪰ ›*ÿ!ýlÆm»ÙP‘N(·#¢¡zíw�éÞªªÆù¨gXÄh:‡ÊªŸà ½#¥x~BUå94ÅšWh4¯F•Ùz‘^ŒÃ¦-Ʀà:/Á‚9 /g]Ò2»ÉI>8®”#W¶K¶0Ö!¿êJRÅãÆOuÍø=¼ý—LJ¥ù™‚ ‚†Ë‡³Õ°Ú÷¯„èÏ}=0hÖK¿ÏB~é!ì+ÌG±úS”b§u¦r®ñ‰½ø'zz^’1DH¦gh9­Ç½¨ÝÉÛ9j~:"bu¸ÛHÑP½ö;@¼2Ú¨¡fz2¯cOÄÈ„ÚDÁ€´%ð]ÿÔB0>ÂHÀmÎW_…=I¯ HÁ´Ž<”ë##xW¨7UÂÀ~¾mÇhÊž+ñ»llÖÿ†ÉЫx„Ís5¬öý+!ò³þ‚˸ *U1´ÝCû×VÃ䃽®F×_¡×½&•sO쨈qꊷœƒ}š £w_?ìîÉ׊ÛA¦ñ¢§OþžÌ‘6(·#¢¡zíw�7®éLè‹Ø,‹=0ê~–)ð3tÆžs }&è®Q0€H  HSð´œÅ™{Lw6Œt‡nÀ:LÒb'p¿;¼ý—¶'^>Z§,rƒ°i?BF‰îà9žx¥ÿ–A°..Îà%w*b…ÉI Êï<žk¨PÁ©ˆ€ÑITï„Þ>ˆÏpk6ì¿ "yÌ>ù’ëà¾â zíw€'¨Ó¶½!à3†;Z#\¡£”â2B{g,t‡@´uOB±:(Pfàs=LY_ÈX°4õ†Ã‡¡k{ ¯û?ø?nŸôù"£°Y{àT@\åDLÚt(ØTÚAgÁ€"|˜·ªì£h^¼ÇÃG0€v ˆà1A“Sˆ‹‚E;qÀÔY D˜ÁpëQdKÏöœˆ;â<[ˆ·„êµßÜ0•©Qù¦lÈ2³L™f”Š ¸GŽS•j”Q™�‘ (0Rßr1SxZ¿k‹OàbÝ×(ßú·`kÿ_þ;Ù¼˜áµ;…óy;Ø<WÃjß¿Ö<]—ð­ð#¬#L¤9ÅÇÑh}ÎS9×øj5±FzÐõÄ: ")°öRÛ?AåùÃÑPG ˆß݆ڨ&ª×~ Í�‚‡‚‰B†¾‹yŽæÒ<”[þ”æó;ê7ÿ ꦣyïn·~ƒÓãÛq‘¦Íçí` ÝjXíûWBäg‰ðâÕ¢sÀPϯpƨÏHå\ãCªÕÄ ðvÀü`$*¸ådz¶IŽ‚P̆ØVgÄ-%b¢ýK¬¯¸EúÉ‚êµßÜ0íÐ5µÄM$zÑj¸-[0`wM–*ÊÇÚaø‰®A"1P0 QÈÐr1,ÚY8W›Î>?“EÛaª5…jØÃh¯9GÝDägà1Ÿ†ðsg„NƒÕÚŽúòÏ XºawGÔ©ñ ÕjbÙÄݵø�U­Ôq‚ ‚8ˆæÇÑü<Ì%GaÓCµ^ U$ÿ ¸_½Á@‡á|ƒ®�Á1’ÍSª}ƒ<ƒ‰ÑH{-eHÏØRÁºôg‹“[,JMoFêûB.fvýg¨n6¢¦Ë‡á ö|{M¦+8b'6k“fË/«uWûþ•ùYi / 9FñF6Šj[à µ+b¿“Ò V€çjj.†¥)KãÊ)h6FƒÍKÁ�‚H".Êr?Biõׄ8Tœ UÆzhêí B$áí„¥çM‚vXZdÙ3&Âr‚2²œ`�A$ $’÷…\ 3Ì8\Û ïp *×n†Þ> Ñ×sͧÈQeáü¡á¼Îhµr*ìÈÏ Àsíê»¢Ò ûa©Þƒí™ô³ ‹'-s]'¸ˆÃ°ß6KNÝ t¹%S‡³ã&Ì·{à¥ËD4“ƒpþ!2{Ý!Ý#¡c‚ VôL÷þ³îJÕjhÊka¸í€–åäAâmï�,‹öÓ¹î7<Â²ï æ…¨ "ùP0 í˜ÏnFmù>k|¼Èh˜q˜ñ}{ê®åfáëëóh%>øáh¼ˆöšÆpûI„¢¾\0„Öª8f€_œÄSãde¡üè^h„XÜ‘x§ñXPg²G¼ÜvXj ‘I»‘dÆamî¡]ñ;BÜ2¨ðAâmÊf6Ãå«Qc|¸©É ¾_a(ÿùÛj`ìöÐ3•H: Hâ+tׯþº_02¿®ÄúñFØÃv5¬öý+a¥Ÿ5û´[T¹¨à)3€é]h‚BUâp ª²ß‡ÆØ€8�£æ[®õ%ˆg,gn‡ÞÆsA(‰�†º (ÏÏZ|¯É¥rþ. ­o$ÞöŽ ú12ð ¯8Í€ýÃpS0€H: H³OP¿å=¨¶ÔãéüÎp¬ßo„;«aµï_ +þ¬€ÖŽ' ©œk\Øuº[@ëÿAKmTÁ¾ÕÓð»Ì8pà^R ‹Çs‚þº#D2{ðdÈ p‘�fC¿1EÕ†E=ïÍíNÒ HË©×&ñ6‚ Ò $Ñ?Ž1¤×ëwò€ßÏwœ1­ƒQp `¥%½ ÉR!Cõ1Ž·y0庇s¬>²ÁJY-„»F.ãðþ³hs½€Ûþ¸ƒZ(ÓuöÀjÀ(éKDâ¶+Þ£;ZŸCÄL`†oÉb9Á�‚ ˆ4‚‚ï+N—5ÂűáNÁ�9ð½Â/Üâ?pD¤ˆ`–SŠkþºSØš¥‚ª —(E–t gd¨¥¹€Þ”‰¥Dº3áNöê:à ×çðØaÒߢ2dÁÊ H¼ ˆw ¤->8®”#WUkë_uVÏ$—» «uWûþ• ¤¹®ŽˆámFéÚƒ° Ï@tÖcsF)š~3aï6·lO%ÅG‹G´cI‰ Tf8÷ÌŽ¤<H¼ ˆw ¤+Ln}Êõµ†¦«Ô›*a`?ß¶c”CË;«aµï_ Jšk|”8"RÛ-Ë‚b’«€ÌŒR˜¬M¨5¼¾.&ÚQó ¥×DbàeóI7u†is°Ñ…Û ºÏ’ ‰·ñ®@Á€„!"àéBƒöÔÝèƒOdÇVÜ”­Wû<-gqæÞœjý36èÝàº-ÑjäÕ¾%(i®qQpàˆHL̬à+´OHë ¼W‹.Ÿ†=ûñmýU˜ŒÿÀ u ޵¿ ½ ˆUÇèDTé elA „‚‰b¾s@ÎÇØš—2SúMŸ#+ã=é{dRþ• ÷€òjx)j”8"R….S-j[1Üzk7êaŸ™Ïq 5%¹Pe~€¼œ½0yh elAɇ‚‰"ØHzç0í@ýçßÁ:)=¦}0ìþA2œC¯KÜi|€ñ¥,…Ù'0_²a2tÈ «uWûþ• ¤¹.2GD Ç`7ByÙ 4ÚÇ¢œ?Ñ>B×A$ÊØ"‚ R�F�ÞÖop²õ¥d$Ïb¼õkiõ"0Ò ¡èL°Ö6µ¸aRgÍ%G°§<_<›×jXíûW‚’æš®üûßÿý¤L˜O elAɇ<‘D1;€ë{7BÅ숡BvuÆC/Kn˜k\ßQ05@ÐlGåùÃ~w¶!¾R{•ä`+i®éÈÿ÷#77W±‡Ã¼Ø ‚ "™Ïõ7 :Âè,T@A$òD…è‚içVT®†9Ú&˜-á’¥÷¶Ρ(£AÄ´ý<v ¤å ¤ÞÄ/—»ÇØ9ܼysè7ÊâСCÁù³ÿA¼f¾Þ Ðd©‘¹ ¥_ìEá†O .©€¡7ºL‡ ‚ Þ $Œ9‡ê¦õ'i7~2X0àñÀ³0ÑoùB-ÂxEI¶’æ.Å/ßÌ|V�;‡l(-;`>+`~(';` ž®+Ð ?à†ƒ9%Ò±õnÛ^R.‚H¢Æm™PéÐ=2ì" ”šà™~ŒºƒWá¢h�A‘�(0<¸k¶b"ê=ûä&.ÙR_$_3 ›õ¿q'›çjXíûW‚’æîÄ/—Ç|VÀüPZvÀ|VÀüPJvÀìÓzlQ­ENáfäåVÀ4`‡i×zd¨J ïå9çˆ DP@0%ƹ †ù`€ï™tˆ‚ ˆt„‚ #žó­BvU †SÅwãš`Àýn+¬Öùñ+ìÃðs¾£ÀÎÛjXíûW‚’æÞÄ/ßLtVÀüPJv@tVÀüPBvÀŒ]›ëáEL÷_Âç§‚U1°[ÿÔO€ Á8lÚbl’î©ivÈ‚9¬…ç:™l ‚ "¡`@ÂXB°¯á†Rþàþ c£>ü·ç‘âć˜S´Vûþ• ¤¹Æ…;ñË70?”’0?‘ zÐúÕ·¡.$Ch=ò5Zǧ0ÒuE‚•J"Qž£ëŸZÆG Ø ÍÙ€âê«°Ë¢CDA¤# H¼ ö)W|ˆ9E«aµï_ Jšk\¸¿|3µµµAÇyÞ©žÿ™ Þwׇ‡‡#æ=öï<3뺆½¹kƒóŽQÝþ*ô*‚ ‚ ‚w(0Üø©®¿Gö¹à°Ô"_Á>‹1Çb5¬öý+AIsoâ—+ƒsøö(mþâsvTÂ82™®Áòàø”xAA¼£(ÛŠæ Îû,>´Zçhµï_ Jšk|ÆÐg÷`6tñOôô0Mþàã¾=Ê›ÿ<wa¡Te‚ ‚ %£l+š+b öYa{òœ(åŠ)ÉÁVÒ\ãㆹ¢GO „8ãÔ!o9û4ŽòœéH”>‚ ‚ B™º*¦àiý{ª~„Ã?…±Ñhq>+ôµ7à ý&¥(T|HI¶’æ7Lš<îPC­^j…‰µä ¥;ÓJŸ?AA¡LÈ ]ÂRþ7d¬9KPY{QZ U(ÌT!Cm’' P”ä`+i®qÿƒïËŽ£Ñt]n¿t<gÇM˜o÷Àà8…$„Òi¥ÏŸ ‚ ‚P&d…® ~G4ïÃãa¢ƒ�™›Q©7@nR0`(ÉÁVÒ\ã3„Öª8f€_œÄSãde¡üè^hd鄱2”îL+rþa8Ú~„ž•è/Áb”®Ð¿AAŠ@ÙV4ˆxm¸Qw e¥;ðñ|ÀÐ Ç(«Ö1#‹f€rQ’ƒ­¤¹Æ…‰Mjà”.Rq¸UÙïCcìG@€Qó-×b“ E:Óa(nþâ ´ÿª 2ó¶B­ÞŽÂœ,ä»2I‚ ‚ ˆ9”mEs†è„õÆ9T—„p¥ƒ`À4Fm0êÏ@ôh°ü IÍx.P’ƒ­¤¹Æeö êw hýã?h©-‚*û(Z‡§áw™qàÀ ¼äÜ¿Sœ3…Òæ?ë0`“j+„ög¯³Ãè­¯ÄþæA |AA(e[Ѽ"NÂÓs†ê}(¯Ñ¢F–2�¼mµÈWe #3Åj5væ`Mþ ´xø GI¶’æŸøz/@“¥B†êcoó`ÊuçX xƒ# H*J›ÿŒ]%F¸£® Ñm„F°J+ôóÄÆ(K€ ‚ ‚k”mEsÏ,üž¨“#0Ûæl ÿ ˘Æhoöìç{·WI¶’æº4"¾Wòq^¥9ÓÑ(mþ¢Ï Ý–]ÐÞ}ðºj×\¬,†F7xüÐô5ŽP–�AA×(ÛŠV2• Ì<†~ãg0ºY©Báuàâ$FÇþšû=G(ÉÁVÒ\—fNü²ÍXAÐÁÐü�Oƒe.ü£4g:¥Í_|nÂÎ5Áy/5T[êñ”ÿª$‚ ‚ ˆwe[ÑD|ÄQØtlÓÞB÷üîµ-«°I£Ç¿ØñÃ&?r“»,æH¬†Õ¾%(i®ña]1® ,wmp>óC¥€’çðíQÞü_¡ýÌhôÀãYb ù‚%AAŸ(ÛŠ&â#º`Ú™áÜŪ¨Ê—ÃÇæµVûþ• ¤¹ÆEDsYÔÚŸasÏ9p¢C½Fì'Á¤£Äù‹�fB?AAÊDÙV4OˆÃ°ß6Ãdº.·_:‡³ã&Ì·{à•EHkãíç kˆ½k·0^ÁǙЗ’l%Í5.+„mõÁÖ‚PkÁ” ¸ùûúa@œÆ‹ž>x9AA¯Q¶ÍCh­Úc–øÅI<5îAVfÊî…Fx�_èU)EœA`FyÖ¹’l%Í5.¢ÆÏO£}8L# 0 Çõã(Øn„‹óKHqÎtŠ›¿ç*ÔGpŠu›X'QY¼zû„t==íýذÿ&< ‚ ‚àe[Ñ<1cƒVÓÜ]‡[P•ý>4Æ~dÛ]CŸÝƒhý.ñ…=^¾·z•ä`+i®ñaš Ðdç¢p‡jõVäe²6ƒ›!t§^ür…(ΙŽBqó÷˜ É)Ä5»VÂÇN0õc–‚AAŠ@ÙV4OÌ>Aýn­ü-µEPeEëð4ü.3ÈRw톹¢GO…ïÞ 8U¹[ô1-ýŸçÖalØp·<|©Æ3çhµ#UÄúì•>˜…ßÝ…F픪w¡üXš{_)B�ŽŸsøv(nþ#=èzâAAJ…‚ c¾Þ Ðd±Õq¼Íƒ)×=œcNxƒ#2Lš¼ÐNoÔ8`‚s–ß`À›P’ó¤tGU P0 Åx;`~0•1âdz¶IJ ‚ ‚P ä©$ß+ ùxØOÂÃ.gZ*~S0€‡‚)Æc‚Zš3›wäø�U­/¹/+!‚ ‚ æ O%axp§ñÆ—²„gŸÀ|ɆÉÐarñà®ÙЉ¨ùÌ>¹‰K¶ñБ2Q’󤤹*¥ŸcÅÍßÓŒcÕ4™L0Í+Êʘm^ AA(òT†&ufа_rµR±_o>*dWµ`XÁ;û;”‚’æªT”~Ž7ÿÉA8ÿŒ.-š€½® Z… ‚ ‚ Þ%ÈSIn˜Õàb“ ¦¦s¨ÌÏF~å¹ÈݳภÛP*ÊÂæ³ðÙ ÊÊ!˜m¢`@J `@ò¡`@ŠñXPg²Ããñ¼îÇh®.@¦`U„è$AAAÁ€2A÷0f}}0U}Uf!vW|‹Ûž©Ð¿§œCQ)»"¦íçñ™öQŠJ’ˆp(bâi¨Š t„^DAAðy* ÃÛÂìÎ[Uþ09Æ ÜÒï£\¸ oèU©ÃŸêšñ{øîÇ…ÿ4ÆLVoß)ÉyRÒ\•ŠÒϱâæïùZÃ}X­Ö×£ó Ž¿‰çR ‚ ‚P ä©$ V£ÿ7äW™àð½ÖÇ;Q»ß Oè8uÄÓ X‡|á|¡W)%9OJš«RQú9VÜücjLÁY_†²æA$‚ ‚Pä©$ Éù>Ö�Ç¢±qX›;dÉ ¸¦­Ç¿Ãwï¬í0?…æçr•.$ áP0 ÅÄÊ èn¡lÖkmiÙΔ ‚ "!O%a ã7ëÀ"CX|aGWŽœüXšÒ|œõø¤¬/¼}GÁ�" ¤˜8šª¼Ã¸îT² AAÄ»y* à sE)Žž ¯Ç©ÊíØ¢Œiéÿ<·cÆøå‰N±M±2~Á¿ {‘½^ ›‚·ï”ä<)i®JEéçXqó÷ü ±'L‹„Wð‘^�AA„¢ O%a¸aÒä¡p‡juÔ8`‚s6õÁ€˜šªì¿ÞTÌ Y(ÉyRÒ\•ŠÒϱâæ/Î ˜€Çz- zêÑ`ùÿlèAA„ O%a áa—“£zY7®éLè‹Ø½{!Ÿò»€S0€‡‚)FC¯a7²2TÈÌß/ömƆâOQRv½aâ©AAß§²*<¸Û܃¥äøfŸÜÄ%Ûxè(•ˆ¦á÷< ƒ‚pú ¬žIÅ«}S0€‡‚©Et±MõŠ´0Ö«¥&¦í4:©›�AA„B OeUÄkß>TÈ®jÁpÊ-äøz/@“¥BFæ&”~±…>º¤†Þ1Eìì¼*%ÍU©(ý+mþ36-Ögì„Ñ=Wl4 €Ïú Š+”Ÿ{DAñn@žÊªpÃ\#à²É“é"jŠó ¤ŸÙ±4šÎ¡²`3*a(ÕÞ·è„q[&TE:tHF{À ¡ÔÏôcÔ¼ —‚£ ¡`@Š™|mÁ6èíÁÀU@·"GõªZ_Rf�AA„B OeUL`Ð=<güÎØ Õ4Àa ‹˜hÿ9rd°ù¬ÏD‰q`n~óÁ�ß/ŠÎÀªàí; áP0 Õˆx:ñÏou0Z_!`Ó"'gªÃG‘�‚ ‚ Å@žJ¢˜íƒa‡€®ñ0-q ëv`M¦ ƒó=›¶›‚m %X0 çä嬓©l!qP0€‡‚)ÆÛ󃑨 �?ž˜Í°MR4€ ‚ B)§’0f0Òy ¹%8Ts ©jì+Ê*c=4õvÉT–ÀstýS Áø#´9P\}v…+~S0€‡‚)Æc‚Zš3›wä 2‚ ‚ %AžJB™ÏyõBJÕjhÊOââ½~™Rg=¸k¶b"ê³åën8”ä<)i®JEéçXqó÷Ü@MÍÅ×Ú(l\9ÍæÃh°y)@A¡ÈSY<·Œ×é@®î‰CIΓ’æªT觘ÉA8ÿœë$ðš ØëAè AA¼CVôªà¹µ`x§ƒùÑ�A³]žî „W¥ ¤¹*:Ç)ÆcAÉÇóz¸í°Ô"“Z AA(²¢WÇ­áÀs(*eWÄ´ý<v ¤U. ¡sœbâidn‡^á%HAAïdE¯ Ž[ Ÿêšñ{øîLJ¥ù²t7HJrþ”4W¥Bç8ÅxnBÐßA·Õ ëÂèÁ“!?éAA(²¢w­ã•0dc³þ7L†^¥D”äü)i®J…Îqj½ÿ?4a2?€{Z„è{ŠŽæŸpÛö’J‚ ‚ YÑ ƒ·Ö‚n\ ¸ß¾{g…í‰~…oßQ0€x÷ðOñál·¢ê£¯`qM@œ~ãÎd~Ž£e{H@ ‚ BA§’P8j-(¾@GÃE4™n Ëí—ŽÇáì¸ óíxÊŽP0€àÉiu ÍXA8}ƒVÏdÒç}°ž®†Ñ•ú°b43¶ï¡©ÿ]ú›f0ÜzÙkJƒóÝFhH@ ‚ B1§’¶ ¡µjŽYà'ñÔ¸Y™E(?ºW2ØI@0UP0àÝBôÞÇñüuÒ÷ž…¼âPï(DΚq¬åÙ2d~Ç”å® ^;ÑC•Fë ¬Ù=³O/awí]üѵ¥LÀe>†̓ |AA©€<•„2 ¿çnt Þ|  ÅáTe¿±q�FÍ·$ ˜"”4Wbµøá0CUtí ÷=ËèAýžj4¿\ÎM7›¶¹åߣi¡%(— ¨‹Qi¸*ýÜûh˜6IªÇÐkج`p¢mÞq¸Z Òš÷-¬¯(@A¡ÈSI3ðõ^€&K…ŒÌM(ýb/ 7|uI ½c©7gŸ ~·€Ö?þƒ–Ú"¨²¢ux~—ÜÀK[ì ødv} JŒQ÷û4ÜÆÃ¬,g£ãKd ˆxZpúÌ}x#þG&`Ó}f¯ŒA€y|ý°?›€oè| %GÓxÑÓ5g‚ ‚ ‚gÈSI¢Æm™PéÐ=2 ¬JMðL?FÝÁ«p¥ÜH N¨>Æñ6¦\÷pN 4X1¢`£‚ŸH÷œí{lÙ¦ÅÝáÎntµ\@å¦RèÿõP:î„éøÉ%²fà½s íÃSÒOñðã‰Ù Û¤L7±ç*ÔGpŠ­% ã$*‹wBoŸÖÂg¸µ¿�öß„‡‚AAÜBžJ¢`iùë3_ï Î|¿@(:#CZþúìÏñ—ï†|¯?\|aG7å“I( ødÏM{°FúÎÙ÷¼‡-õO0zW$xL¥1Þ=>@UëKyRò=&hr ±C­†:bìÄS?f)@A¡ÈSIã°i‹±IÿXr $X0 çäå¬ l_”BÜ0W”âè©ðÝ;§*·cKpŽÓðÜ:Œ ã–'8cÅÀœ!¥ ¤¹*qöÛf˜xí’1Þ3º6 z<ðÄ/"t‘à1 ¨¹Ü¦Є+Ânl®<¦#`ÆM›Wž`ÀHºžÈßÕ€ ‚ ‚Xä©$’ÀstýS Áø#´9P\}vŸu¾n˜4y(ܽ{'&8g) (hxî’1 _ßÿÁÀ_Q÷»ø'zz–»‹/br`�F¿˜•íÒ¢Û;Ÿ õLcÔÑ£þ í4wõcTá-K ‚ ‚ Þ5ÈSI(a² GƒåWxürïCxØå\¢îX¹P0à†ë.lWÿÔG¿ŽÈÆNBñ–s°O‹=7±Cößz'8 ýoüÔ€æ¨l‚þŸqLzßœ¡Üøà¸RŽ\UxÙÂ:仂 ‚ y* #�o[-ò™œ™‡bµ; s°&ÿZ<S¡×‰€‚ï0\wÉ`õþ{‘S¸}q6Žú(LΩåbj¨¹¹N>ÑÀ0Ä—Í({'´Ü¡rÑÿ½Æ£8Ð<(OéAA±bÈSI³}0lÊF‘ð¯°l€iŒö6`Ï~¹œÖãÜ6cACó<UVI�ãöíÛ1œ£¹±yóæÐ«øáý¯ÿs®lÔÖÖ†^E¼ñºdÔàX]—Ì]2f0òð!ž¬*'�ϵÿK¨AhØÿÀˆlYF‘¬ß`[ý~Ñm„F°JAA¡((fC¿ñ3ÝQÎvxú²8‰Ñ±¿æ~ŸtDøWP–»6ÂU)0Sá¿ÿû¿‘››ñwÌÿûß¡WñÃððp̹²áp8B¯"Þ¨.L°ótY#\²¦©ÏÀ{÷&LD9í³O`¾dÃdèpif0ÒÙ‰¾è€ÂŠt’‹èúŸ×¶axá\³ c®WoÅv£“‹9AAo†‚‰B…M§Á6í-t/ìèu¢åb6iôø;~Ø„ãGn¦&K@DsYÔÚŸasÏíÖ‰~ õ±_ötê•ÃÔ£k³払pèСпoO¬zõù±ùUW`õLÊäÆKñ—F°œa9)Òÿƪu’ôÔ—"{¾½`q2¥¿QUð ºÇÓQ¥„ ‚ "=¡`@¢]0íÌŽí„ÕÔ?MÁÎ<km¸­>(´Bk+'Vv�YóÄÊ ¬€À×ç¡\ßj±W¨7UÂÀ~¾mǨ,^2sä¿FõÅ«ascmËQ&˜aZÎMÇ «ÕHâÜ]W¡­*ƒZSŽcú›èQ^ AAÄ» Æ,ÆÛÏA×>©¾h¼‚/©Ì¢ÆÏO£}8Ì@ Ãqý8 ¶á’Í‹x{˜s5ïXóœ0Oxv�e$Š)xZÎâÌ=O¤#<cƒîÐ xC‡ò°D[ÀÏÎ.Sü/ºIÆÛ󃑨@„OÌf. ‚ ‚ ˆåAÁ€D"Î 0Ë1Ì4 ÉÎEá¶«¸y™Ltm3„îaùvWAxv�ÏYó„g°Ÿ‰D1 ÿÐÿáP3�ÏO`ú}0"�èþÏuT/»-à Fí-ÁÀ—¹ËiéØçìD³ù.l^N´><&¨C×uäø�U­|èAAo†‚iä4¹»Ð¨=‚Rõ.”«Csï+ÉeQ.ÌIRBVÀ<,;€ "Qð,ŒÉRück¨òÏ Û·œn�³o=†ŽÝ‚Ë?ƒé§FìÌz…å•(Óè–ù¿‘d<7PSs1TWNA³ù0l^ AA( ¤-Ü5[1e™Ï>¹‰K¶ñÐA( ®…1ð\«ƒáßÝam»ÑiüÇ›]Ë ÂMÀ¦=Œzç”ôw½DkÕX£a]þ‚Ûxx™ÙIfrÎ?£31&`¯;¡{$tLAAðÆúìDïÛ‰/ìèñʱï†Ic—R…ìª Óö¡D¸ÆŒ£ þŽúO¢ùår&7…§õ‡QÛê@Ë×(P…Rïýý08¾Ìÿ$ã± Îd(…ð¸í°Ô"S°*:óˆ ‚ â]‚‚ à sE)Žž k&S•Û±EÿÓÒÿynƆ ‡qË“Šúfi>5.‡§òš h¶£²á†(@(®…1ceXÑý¯ó(ËþZÛDèuK#úz`ЬG°UâñûðNýÖsg¤õä ¬#( ÆÓ ÈÜ=eAA( $ 7Lš¼X_Ô8`‚s6ÕÁ�œCQõ»"¦íç±Kx ý+A(ž…1ãi¬CÞþkpN¯`v††||î²{nBÐßAwXÀÃjíÁ“!¿ÌçŸ ‚ ‚X  HCxØå?ÁÜø©®¿‡§òz\pXj‘Ÿ)ÈœNM«WaL–ðŒ}‘Ý<¼:õoK`£<÷>$‚ ‚ –o‚}ñ4²±Yÿ&C¯"eáÁÆçæ>‹D 8 AAD|(0xìsãš`ÀýîðT^+lO¼ðS./¡XøÆýƒ°Þ¸�-Ó Ñ_‚Å:H÷AAÁ H¼ öý…±ÑÉÅ5¼q¸íV´[~„A{:s/|JtT¦zÐ|×:àSV îziÏxõH÷YeΛ^ßgFÊó7s!ŒùZü/ ù¥‡°¯0ÅêOQfèQæ}FAA¤- HÊì‡~ÅzÕåjæ¬CÖ®&¸¢û!ò„øÝç*ÏDâ"v‚3¡6¹C/âqèΕ„̈¹²Q “‡„VÏÝQBâשñ¾ì×ò_pwA¥*†¶{é®· ÕÒ÷>{]-Œ®¿B¯{¦ðüÆeÜá" 4O×h…pÃ1ÆB]ðXïà¶íezi#AA¤9 Hœ ö‰Ã°ß6Ãdº.·_:‡³ã&Ì·{à (g‹rÆ®ÇÆ5[P}ñêëàฎvçòZµ¥ŽIØõ›±¦¨›Âç* sœ”+žÄh?}�U rï¾OÀ¦ý%F¸ƒó˜x¥ÿ–A°®<$(ú=è¹}'Ô@ÅI@iöi=¶¨Ö"§p3òr+`°Ã´k=2T%Ð÷RŸ‚ ‚ ¥@Á€„Á›`ßZ«và˜e�~qO{•Y„ò£{¡QPkAÑeĶmóÎU83pÔ`;Ã{°Í8•!"1€‚b0œ3 ¿çnt„3Ð7X`õÄ(‰I9"&m:lªƒ=ØFŠðaÞz¨²¢ux¹»úÓ}Ú “n? ƒ1Ù(¬øNiqƒ`@0@·¹NQÄtÿ%|~ú¡´¾‰8.`·þ1 (AA( $ ÎûflÐj$ƒ]rQ†[P•ý>4Æ~É!€Qó­rZ ^¢S8 ]§3,ãBýÍÐ_ã­L@rˆ†ÿ aïYtºÂæêyŽ~Ó?¹pä”Ï |½ É’œäÌM(ýb/ 7|uI ½,e]nX ý%|+üëÈ8lÚ"äG£}¹s›‚Ó¸;Xf¢ÊÙ†£u7âÄÆxˆ(‰´~õm(¸1„Ö#_£u| #]§Q$X©T€ ‚ B!P0 aÄì“‹Ù'¨ß- õÿ ¥¶(´39 ¿ËŒnà%7]š¹”äèl 6xÔ ˜ÂÓúP-š+¤D'ŒÛ2¡*Ò¡{dX!”šà™~ŒºƒWá’õºž÷îM<˜ˆ.îEó%Ûò³ƒ˜È§í.žØ Í~L ùg¹ ̺®aoîÚ×øFT·¿ ½Š ‚ ‚à $”iŒ:Ú`ÔŸ èÑ`ùɈ—‡°TÕÇ8ÞæÁ”ëαvg VŒ($�qÍG¾†éadÆ…ÕúCS¡ñƒøò&ŽoÂȹ²ñCT'°zXÆËúL”Ì—bÌ|¿@(:#sÆK�Si 'Y+*˜GD`´&ªJ÷à`é ˜9(‰ÏMØYP C¸&†é,þ Ž AA ‚‚ #�o[-òÙ.vfŠÕjì(ÌÁšühñÈå´J΄ï†|JÞ‘–þ†±1L(ÆÉà,C$í`©÷ÅØ¤ŒivÈ‚9 /g²«Z0,ë‰ÀcPs9¬í¡© W„ÝØ\y ¶¡U܇â\æKütè¸ ë©AA( $ŠÙ>6e£HøWX6À4F{°g¿rÒò¹Ã×û³è`Ê4^ôôÁËÝ9…¯¯Ï¢“AÄ?ÑÓó’‰"ð]ÿÔB0>ÂHÀmÎW_…Ý'·s*br`�FѬ„a—ݾåf ±Œ�ÚŒuœ $†ðvÀü`$j>~<1›a›¤«œ ‚ B)P0 QÌ<†~ãg0ºƒû•¯ ì'1:¶š^ãï žk¨PÁ)VÞ°0N¢²x'ôö éœ>íýذÿ&<²û!lgøÔG¿›«4NBñ–sA…yÑsû7`ÿ­gx¸n™)}ÿ?]€é÷Á0ñHÜŽŸQ“¿iÙ­Eï}Ï_‡ŒŒ,äï€zG!rÖ|Œc-ϤOà� êX¥ ª•‚^AAJ‚‰B…M§Á6í-t/Ô‰w¢åb6iôø;~Ø„ãGnR–ÀJMN!v¨ÕPGŒ8`êÇ,oÁ�Ó^änš+GarNQ0`ÕðÜ23žf€ ™›ë–¹kî‡ÃP UÑ´/d°LÔï©FóKž¨©¹V !+§ Ù| 6/]×AA ‚‰BtÁ´3;†#5T;Pÿ4\ï ®€‘t=‘æ¯f0òð!žP)uòàºef�žkßAÿ—0áHiØúƒÝ�–Ç$ìú’׉ LÃm<Ê.˜ÁÄè¸|Y“ƒpþ•… ØëAè AA¼CÁ€„1‹ñösеD¤/¯àK‰3Îóê PT}r‚ZËñáºef@º\ah2ÁÜå–Ü÷øœh6ß…Í»Ü� ôÛ÷زM‹»Ýó…ntµ\@å¦RèÿõP:î„éøIù²<Ô™ì‘ëšÛKM!2«|A ‚ ‚ bEP0 ‘ˆÁç¶â†AÙ…¿¸ÞA]ŠªOŽ—&.·j-G,†ç–™³o=†ŽÝ‚Ë?ƒé§FìÌz…å•(Óè–) 8ç¦=XëŠïaKýée Þ=™¹zÛxèEAAïP0 a„9)™›PúÅ^nøê’ zÇRï´r½ƒºUŸH^k9" ^[fNÀ¦=Œzç”4Å—h­ú�k4pþ Kñ_ã8£kÃ`øÎû¢ñB¾¿ßs‚þN˜6 =x2äçì~$‚ ‚ –‚‚‰Bt¸-ª"ºG¦%¿Ð ¡Ôk+vð*\)·’yÞA]ŠªONTk9B™LáiýaÔ¶:Ðßò5 T¡ì?ÌŽ/?­?0ˆöÿ:¡îg8X»Ä€Ö›-+(5H2qŒŽyáhûz¶žè/Áb„Ÿ"AAŠ‚‚‰‚¥å¯Ï|-ü5 ðý¡èŒLiù¼î ®�EÕ'ÒZŽP.¢¯Ízdd¬CþñûðNýÖs’c/\ud9e", °*U ·æ#·Ì„þ&ìÊRAUt½<xÜâ ´ÿ*Ö%!o+Ôêí(ÌÉBþ±;ð(Iœ” ‚ ⇂ c6m16é#¸Í‚9 /g²«Z0œry }vÏ¢šbñ…=^UŸO3`%­åˆ·#�¿_îëz¾¾><ûˇ¡!ßë@•ø'zz–«oÁº csýï,ÏýõÕ8m þÞaøz»ü2”³6©¶Bhö: 0ŒÞúJìo\æßIAAÈ Ià9ºþ©…`|„‘€ Úœ (®þ=#É` »a®(ÅÑS–ʧ*·cK0`1 Ï­ÃØ°á0ny¢Óð9"^}ò‹Qø¹Û… Äi-÷;^ŒN¾v‰Ä°ât«Ï—óš`šG >úuÄ='œ:„â-ç`Ÿ!J×óþ ØëYÜ5Aô¶à«“÷æˆã­8r¤ã/º„2.²Kfìzl,1Âõˆn#4¡lqb c”%@AÁ5 HÜ1ÜÁóhX|KÝ-é_S&M w¨¡VG&8g `õɋӫVÊXw„Ð1ˆŒab‘äƒõt5Œ.è˜x{|p\)G®*:û‚uȯº"_ 0íENáöÅ÷œú(LΩe¦àº~0öß—ý%ÚÇå×}Vè¶ì‚öîƒ×¯®;¸XY þnðø¡ék¡,‚ ‚ ®¡`@œïÒUÔÃÆ™c8bÕŠ¨Ô&‚CxØå„â›Ùùûp¥l#TÑŽªPeì†ÇÏ‹0Ÿ¿ã Êr×.ž«4TùG`$¡µÕÔæÈC¹¾1¬cƒ4® Poª„ý|ÛŽQYÎñ F>Ä“UÝt¬µà>Tþ#òï3[Ðáâ"ø%>7açšÅ×wôPm©ÇSÒÌ$‚ ‚à $Œ º‡1=bƒñä·¸ò“^r ×!«ä Ôœ½oèU©Ã‹ŽºóhuM,ìΉ>7zØ.'NÅr˜±i±>·ú¦0ÇHW…]Øt˜Ì¸mæd’µ–+Dnù÷h ›«Ét ‚º•†ÿ{÷÷Õ½÷Ÿ?`Nz¸Lšš\1Ä›¦‘Œ 6mˆ©54Û@Ó6Ö6EmD{ï­m®.c;¤íàÞ»–¯Ö±:A‹¶ØB­zE¬L÷n¯‹Ðqµ ò+× ÖëžÁQQGY–>ÉgËÀÈFë¬ÌçµÞŸ÷ûPòãF…ûç}D3‡Fd6~ªÝ?˜Sÿ›…Týö±9xÍÀê½Ýißã«W󕾇{½Y]:süßÓ&~dSuÉuÞýOîºÓ$sÆ5¹o���²a€clYVr“g]ÓÙêµÊËÉÑî/ôŸÔh°LmÌ��MàIDAT9UÀ«œ¼—eœêºù¦ÜTäìÇZµv.*‘uU»¼úaZÓñн]-ý([$ÿ ˜Úµû¤bS6rC U¿¯ú!Àì™úîàYõ¦^k÷2~YuûCš“V{3U²¸žÓ¶Æ«nŒçGu‰mYó¿ê��àOŽ0À1QÕU½¦×Šó“ðµª>ÖªµÍ[§ºú þø‰øQþúš>Ø• &Ë]}ææØ¯[#ÓÏšì1Ycs¼ûyl”§tÈ5ÃFyÊÊߪ¦Þ?ú¿‚¥îú7ô”Û£†PTñ‰þ!ãJô´Ê¿q»ê»3‰¨.��Àƒ0À1©MÊSZRáSKl$ý¹1Å/îUYEÝÜ4,÷(hÈ<û‰ÜyO(Ïý‰ÎFÏ̯0à o³{ÕÙ9˜%ÇîÕ@ðûzDsV-²DU·ÃЗS6Êûd”­Våg_MúÜ …zþè"õ¸‚Æ[ªí¸õú¿eTQÿæ 'P]��€?a€c¢:R}L]Ó§ hX¡_’Û„?Ú­0 õqjƒqFÕîÅÊy2W¹eó( 0¿•7žùLòÄ:§š7¿PÛh6ĩтŸ+Ð~m†Ÿ3½‚ŸéM_8¹=Ä£‰«³£gZøck4ü™Öçæàu6Ù EüUÚyº{Ò‘€Qõ·UUQ…ü‘éÏ=@ê¨Ñÿ»KïÕ|£¶Tpd™ oTèvÈ���Ìa€cÒ=²FTµ•çÇ6õÜê¶oué”ñ²òædºÁ#2rÏT>e=­MMÝÓ6ˆs!5Z®|†ŸoÚš“ö…"ª£¾uN YºÔÞð®–æéðk%ª-[š/¸F¥Ëò’ÿÍ©È8§ÁŒþŽèJí¹\*~±PK*êl?¬uy.¹Jöèb6Œ¢ˆ·+|õîê‡ßZ/M«f���@6# X°FÔÓÔ©ÃmÛö¾ c·¼û¼ÓoW{3lf–Ìã2Ò³Ëï·Z£ñìêªåýñüŒ?ãuAQŽ <¢{õ È×Jï¿ç¦ià4v"¢æƒm*/SÙ†wå­¿ ¾»*†îeXao©VÖþ’ü÷<¬öÚ*í L|¾Í÷޼á,øšGô†{‹>0ŒäuåÖzO•¥k“?ßPò/ાÝX¤¥Ë$���ÈZ„ Vº_AžK9¹ËUþΫ*^ú‚Ü«Þïâ@lœ3”øMÑëó%º°•èêÒu6@QTG ŸN¶LWþ¥pgïœwØO½æbß×¹¡iÃõrºkÔßÞûA½©?Ï`“¶liÒ S³Q‘aßÇÌ ¨¬ XkÜn¹§¬µz3ЮqÂ���€y0`¡²;ä)W®’jµôêöÑ ªyë"¼IǼtCýqý¯ù³ŽùªïT¼˜ÃÙ}L$ã£!#Š|ý––¸fúïêôà´ a.ôµªùr"ý`kD‰Œ+ ���0×eËêoÓ)Mr“R-_ý9]韣Vqc!yçj•¿óæ&éVÿIFÉî¹?[ýPÆ•0[Õ4ñ÷jÈðî×·ÍíêÏÖ‡=,³µI~ïîôfõ5_é›?G3²Z6W¼¤Ž‰ÚñåáIS 뀱^++÷g8Ý`Tׯ«¨ò“¾GrÕйH6…¹7+X­ ;ÿÎ��æ Â�ÇØJ´PÅ’¿L¹›ç*ü»͹è>¨§T˽nv®O…OkYÁ"åoj¼Y‚</ŒÈlúo•ä&7“þ^sr\Ê-Ù©cW²e¬`šuUM;_T5µòU²ã¸®Ð+`v²ºâÅÖpg§~Ÿþ3¤~¶uµÄ3¼«ouéÌñ«/[_£‰K:PñŒ\wýO.× mò·È¼Õ´���Y‹0À)v—ê+Šäö|£PtðæÝ1;¡ž‹~m|ó˜ºçâ½uMÍŸ{døVŸ’§`©J«)<6¤vì[m,y[_œ¾$3žú[Wâ×Czåù·ôAåJåæ•«¶- ÎQO°kxG%oìÕé6SñTå‚=¤_¾©ç+ÿ®Êâ§”W¶OmÙÐ~¾ÊêŠKæÑ½ üÒ5iÒ©hÛ7ÚQ¸<;Îû;`,äÑâ%ä=<©r!¹ë´|¢¢¡N'½Y]Å����Â�ç¤6%/Õªcú;`»Sþ²æYY~ö°‚©ìÖÆï–ÔßéËÛÕ48,óìGZµ¢Z¡álØzÄ46Ëz4ÄŽúõreª Ü55ÜZáù9+ºÞÏOÙ\ñr¯ž.宬ɒ£°®ªq—W?Ħ^ÔÆB{ôvýµô#���d;Â�§¤Ê—_Û¥Ó½“6‚V¯Ú¾Þ®¢Õ~ö="»»^¯®®QK,!;UÐסÿþå-5L4dK(â¯Ô榞›¿aNYê®ß¤ÕÞsŠ¥Ê¤í„ú:ÎÉ¿i…þ²¡A½Oi—ÿ¯WS64‚›¯²¶âÅ’yäcyOþ4iÒAr…ÚÕ³€Êæíþ°N>(ÿ¡fEGmÙñ+:ST'BÝÉ¿���Ì„ŽIõ ا²ü%*^“³õ¢–¥Î¹»VÊh¡döÑÈlü» §tW_¤"ãœoý¥öžÐÖê²âðCê®é¶ç¦ž§žòo`L½ »Tšx„…Ä–50 ¡Y½ØÇûîˆÎ Þï_sB—ëêæ®Ò`°I›VüM ‘!Ù£—å_[ Üâ×´µâ•ä¿ó¾ô“���í5®D´Y=[Tî^§ ÛjTñ:wËfmTým§ÒÝùkä?}EñÉû »G—.õdOà’ª9õ•¼“¾Ò鎩MížËº”Qgy, –âѰ‚§¿ÕÁÔ8Äê£÷©b¸×Qƒéëimjêž“óc¡OTVûKòÿ{L½M[•ÿD¹ü‘ÄÄq˜2#Èõ��`ž p̺¢3T�Ø1µžëÔ S¹ü$¯¡¯jdTm»¸@®¼×ˆÜkˆuŸñ„{tøöçêt<›“0`üÊ~­ßù½~mÿN;‹žL÷jR¤n›Þ¬ïš“Ÿ ���0À1QÕí¨Ö7Í-SÏ Ÿ«Õ† 5ÊNtð0©?Ü8±Y¯kŽj4ù8ÞqVõuß+Ët¼¨Cã '{@}ë•—“ºS§bƒŠ4ùdi_ð:a���À<Aà˜¨îÜÊy'­Üµ³é*e´À#3õÝÁIý"ÒÆ/×þÐ`úÑ\×`Ó6­Øö­"‰1^ñkmÞS*ÞP©Š²ê 7ò–Ì£ûTßyg4áÄjÿFÛ–eÑxBKñžë7Çg��`^" pLTG<u!:íMüÕU­ñ)”ú8VƒáQô‘\�2u¯ÐÍ•£‡òlVmLjdw«iÓÓz¢ì "Ö Eý›3ÜÈß«gÀO��€9Gà˜] ›ºëÞßX›~rF=¶­nÞ±.‹îîóMTu•›ô©Ò™zµ6®T徟Õ3§{å]©Ý¬Mmjo|_E®t“¿D»êÞÜ®úîLB@kæñ„á_Õ·€Æ��`îüaR…5råUR�<²uÚºPãÖSë+2Çûe;Þ*_Ùb¥Æ_n?©ØÈ¯jÚ“š‚q@Á¾L†_Ú²z.êÄÿ©–QóÚRS,SÁãÑw����x0€?LòM¾Ò™¶lN²Óé]ojÓ¾Ö©#'çŠWOOü{ƒ¤CCWŠ_,Ô’Š€:Ûk]žK®’=º˜È’«‡=,3x\>!Ãðj_ÿdR¹���0¯<v– *�çŒ+aþ¬c©™ýÆny÷5(h/mXao©VNÌñV{m•v&>ßæ{GÞððͧͥÛÓ\Ê-\¯w^_©¥¥/kUź˜ªd���À¼@ð¸YAíªH5£�˜½1Å/îUYžK9¹ËUþΫ*^ú‚Ü«Þï⨺±cúÛ{?Ül†8ؤ-[š4hÅÔlTdE¿;â×K®'Uâ9§¾äuÍ zTˆh4ìÓ[þ*Ÿ���æ Â�ÇÄÕv`ƒ–¸¦wO­E*Üt`ݽæˆÝ!ÿK¹r•T«¥ot"l3Ê2Ssøß:¤È¼(òõ[3_GòßÕéÁ¹/Å y´8g­üÑäßÒÍ0 Sñà‡*1‚x<���4Â�§Œ…äY¼L¼ït9O­C†ÜË+åK}|"¬~Ò�àÑM¼ÎrµÊßy3X»Ä’Q²[Á9Ý‰Ž©?Ü8ñº¯kŽj4UÅÐqVõuß?Dó¿Q] ¼®¢ÊL½ŽÔйH<;ÂÄáŸå)zIÞðÐÄC+h¨àÙgUpkzÂÄg��í3"³ñSíþÁœúf8¹y©~û˜bé‡�fcP!O©–{/$·ÍI©0 ài-+X¤üM7Këç̸›¶iŶoIŒiôŠ_kóžRñ†JU”U«%žá]}«KgŽÿ[}Y»«N5C=«Ï?ª–?x]VÈ£‚‚—TuðBv4p��@Fc껃gÕkÝ§ÖøeÕí) Z€ó—uMÍŸ{døVŸ’§`©J«)<çÍë†òlVmÇHr¿Ü­¦MO뉲T¿Šú7gxÞ߉ê‚Ç,Þ®ðÕûÿ,öoaµ2B�� «8&ª€;÷îs¾ÓWþV5õÒqx4CêŠöÞ]ŠnÇÔz®S‰ôù‘ ¸Y;›ÚÔÞø¾Šn•Í'ÚU÷ævÕwg²9v¨ºàq2è ÷}`¤Æ μ>¨\­çoUo��� +8&ªº†¾œ|Î7°OFÙjU~öÕ¤ÏP¨‡;fÀ£I½ÎªõMs‹‚Áàu®V^0Ô +Ÿ»×—o•¯l±&š†n?©ØÈ¯jÚ³;¹A> `_&! Õ™PYA±Ö¸Ýrßo½PGd���˜a€câêìè™vÇÒÖhø3­3Î%¿ `ö2¨ÀÉ}Q;›®Î]W{+®žžø#þÿ;Q]ð˜õµªùòÜÖ`���`öÕQ_ƒ:MSæíÕ¥ö†wµ4טã.çÀBÕÏA]ˆN~%×ÕU­ñ)”ú8VƒáQÃ~f}\ñK—tuúÝpûwµ¶fÞeöÕ�{Xfð¸|žÔ±�¯ö5üKf‚2���€ù„0À1÷ºc™¯•ÞÓ4pÄ€.…Íä¶{š±6üäŒúR[Ý:½cÝ”Ô[2ë¶È½õýÛgç'Öo«ôù= Ú²ÍãÚ¸´H¿½zÿp`VÕ™= ‹¾õÊËq)·p½Þy}¥––¾¬U_èâœ7q��@¦Õç“-“Î1ÿ¥pg¯ŒÛ2¢ëшb}b:ýIÚRûÏÛa@ªÌ~\y•sP`É ¼ª‚âÕ3œ¡ßª@ÇHæa@³#~½äzR%žsê³lYAʆ}zËß1oÿ\���6„޹¡þ¸þ×üYÇ|Õ2ŒÝòîkPÐæÍ1à˜!]iø§vVV$7Ø/jÙSe2Ž4é\k@[×d&_m–Ò™¶9xÝ©ïüy]^à7ÇÇB-ÎY+ô欀›a@§âÁUb³³š���w! p̘â÷ª,Ï¥œÜå*çU/}AîUoÈwq.6&ÀBU௕ª=Ó¤¯¿¨RIþ2•º+T¹óSÕ~}VxÉú˜úÎ|®ê¦Î;Õ@v\ÑÖT•ÐeõX ä*0ü³<E/Éšxh <û¬ n5;œø,���²a€Sìù_Ê•«¤Z-}£©wÈ2Ê2G/¨æ­CŠðpÀ:ƒÍ µu©?ñ«åž›Í9o½Þì„ú¯¶)túŒZÿðž©cåÊÉù/­2NÊœØü[ŠGN«zÕ ˜ñóX½j;õ•¼†!¯^ÍWú²èŽ{ªúâ¬>ÿ¨ZþàuY! ^RÕÁ Šs��˜7œ2’gq®Vù;oÞ»µ9‰ÿ$£d7Ó�GŒ(úN}ªjÃKZ–_¢ útð¸W¯¿¼WmsÚÑ>¼­òvÈ÷„òÜŸè¬9’ü|\A£*ó0 qI*ž‘kr#R×sÚÖ8‡ã'‹Qݹ¾i� ]®«Sh˜4���`¾ pÌ BžR-÷^ÐÄIÚTPð´–,Rþ¦FõòpXTõ;ÔÐÙ¦ÐI¯Êž^­ ¯¿¬Ò—^WÕGœ“Ê€ª‰)–yFÕîÅÊÉ[«ê³ÿÑÙŒÃ�KÝõoè)·G ¡¨âÕãJô´Ê¿q»ê»³ 0rO*n/Ž ���Ì'„N²®©ùs ÿÏê³Bò,UiÕ!…·<3MH²âŠu´ëêþº»Ü|xMg«×*/g‘rs_É0 HU¼¥ÚŽTEÁd£Šú7ÏÁ¸Ä˜õÚVåÓá@@[ë€¡Š Cu¡a���À<A��ŽH…oh•§Im=‰ô¦xD橵*¯"Ã0à†"þ*í<Ý=éHÀ¨úÛŽªª¨BþÈôçæÐp—:~¿9IàŽ!…k6ÉL?��@¶# ��Gزz.+xêvmûôaÈðîWC0ª¾ß®éz¦ÓaÕ–-UAñj¹ÝkTº,O99‹TdœÓ`6Üv7TË4Í;+zAõUEÊe´ ��À¼A��±ã­ò•-NnÞóTXþ¶^/.T©ûeUøZªÓ¾ˆ¨ù G›ÊËT¶á]yë/¨/[FÞ«g€«DFËÄA ���Ì„�æ‘] ›š>3Àþ-¬ÖØ\ß“N•ø¯“ËU*OK¬ÛS®Ù™a‰ÿ˜bß×¹¡iÂñ˪ÛÒpúáœ2¿‘ÇwRÁ`ðÎ:{@Û·×µl ,���ð@„ŽRW´÷îæYvL­ç:•H?0QÕ½Q®­2ReøéõAåj=?1ÉcTæ·›µtéf}kN?×þ¸ )äY¡œU~E'.·Â€Xò׊ ›ÿ¥ú”ß}×=µò·ª©7 š‘ÎØ3`Dµª¨ï¢ ��À<Aà˜ä&eGµ¾in™zÇì\­6¼`¨!V4ÎiZ`v¢ ”-Sñ·ÜîiëÍ€:Æç2 °5ªVÑò…GS[âTP¢g—-–+ã¼%³ÎÐŽ/ßéÔ8¬Æz­¬Ü¯Ð>.q3U´4ÊW±T‹=!1;��`~ pLr“âÎùŽÞ­•û¢v6]¥ÁðÈzt¾¹#‹7œ#2›÷ë#ã+ûò”¨ t»†2¼cnk¸³S¿OòèÕ¬ó¨%>ý€Ä¸GÏ�ײÍúº#+2��� „މêˆç .D'uØN­« ªZãSh¢ãvX †G s~¶˜¯L}_ÔдÍòøåãÚ?gcíÆ5’¸qs³oÅu½ÿÖXÁGaÉ<ºW_º¦\G¢mßhGáò <fæ7ªö·NùùLóºâô ���˜W3sc3µéà'g4ÑcÛêÖéë²ã =0/ݫǥüMê“ýh\¡Ï¿PóàÚ|«äÊ{MÈHúk{lá^=\Ê]Y£Ðpl¸í1YÖÌàqù<©ž ^íkø—ÌDT-��� c„ޱe™ÍÚçùP5Ç.)n§uüD«bwÌFt¥vMr£PIe�ðÈR½9 }yû<}jí“Q¶Z•û~VÏí•S#÷¿·KŸl]™|oTýíÿ#„G>–÷äOSÏä‡ÚÕ“-›m{@}ë•— ( ×ë×WjiéËZUñ….Æé���0_8eü²jŸR®‚çôâ²BU.©=ðZò ó“*ñ¶*U8l™!iËôì0€»ÅÕÙÑ3í5dk4ü™Öç’_;v"¦Ë¡+lÏâ5ž¼N (þ¿] Û+OjZ‚w¿‚]JdÉ…ÃŽøõ’+y]óœSŸ•üyƒ•"Éÿ>½åïàú��0O8e삼ϸUÛ1"¶©öµL•ôZ—ä[ÿO…¹a8 ª£5õúeÊyõˆÚvª0×Ppݤª |e‹•““§Âò·õzq¡JÝ/«Âתxì´ÇB-ÎY+ôf¥ÃÍ0 Sñà‡*1‚4H��˜'c)Öô¡Þkê–­q 6½¯-M1Y}ge”ì^›`îÝ«g@¾Vzÿ­ùßËþ†"þur¹JåiéI^URã «0®Ù)äFúyshøgyŠ^’7<4ñÐ *xöY¸žÖ¦‰ë���æÂ�§ŒwêëWŸ‘ë®MŠKùU§4W}Î…%ª#†O'[&§O®ÐåXÖ”ÑÏÎBžÊYåWtâÏs+ ˆ%­È’棩#OgõùGÕò¯Ë yTPð’ª^ÈŠÊ���d†0À)vDµ/ªÒwhRc³€êÎ+BS-À!74Ð?›3ùÙÎÖp¨ZEËkMý)Sa@‰ž]¶X®ü­jêÍ‚kIìŒêÎõMûoÐ庺ì˜v���€Œ8æšŽïØ¦/‚×ï½Q¿¬ºý¡PÊ ànãŠ_º¤«Ó›þÛ¿«µõaÊçGd6ï×GÆW ö *ä)QAév gIóQ3 ÷]P©Å1��€ù„0À1÷:Ë<meËÝ=�³dÖm‘{ëû2RS�n­ÞVéó{&îôÛæqm\Z¤ß^¿›fó˜vìøbJTàÀ*[¹YûB1Â���€y‚0À1QÕmÛ¡/'ßÞ£ÊÂ|VîÑáÉo˜'Ö …zè&8ËR"1ׯ+KfàU¯–Ûíž¶¶*Ð1²0€á.uü~s’ÀC ×¼-£¥/ý���ÙŽ0À1CêŠöj<~IM+äÊ-Öú7>Ò s$ýu�Ô®ŠƒŠXs¹ÅSßùóº|Wá-+1¢š ª „'vL®hX ;Š•ËhA��€yƒ0À1¦Nojý²Er¾£@Û€l+šüÜfm0¾W,ý,�³WÛ ZâšáNÎ"n:  ™m ã ?’H?žçîÕ3 wµ¼!æ¦���Ì„ŽIõ ø¯äf$ ¶IÓìÁ³Ú¹±Nfú1€Y ɳx™6xN=~sÈ{y¥|©O„Õ?'i€­DÛU,ùËÝåärn‘?Øõ€ˆÉïÑÕ¥ëw=ÇROë¿Ô‘ óÍã2¼ß©eÒhÇ`°U—ëWbN+3���ð0U`Û>µÝõfxPÁú3T�Ž‘Ùø©vÿ`N½û?RõÛÇæøu6¤§XK6|2­WÈ~îÒôØÑF…ûï×@4Õ„p—ŒoÎNÚh§ÖiÕnø«Œ†…£ƒs[Šo ªèî?ƒ¬V…¿c���óa€cÆ5’HèÍŸuÌW-ÃØ-ニ,,Yæ3Sß<«^ë>ê9áiË2µk÷IŦ¼è‡ª~_õ±û…�·¤š–ÏXYpgå«dg£Ì¹º Ÿ¸¤ÏÈ5ÓÏæZ¡Mþ™‰éó��m3¦øÅ½*Ës)'w¹ÊßyUÅK_{Õò]Ì’ùàÀ¼—Í#<ÇÔnÔa¿_‡š£M]:Ϊ¾î{…b™6µdÙ£Ú ‘© úÌv5Tm”/t5ùqDm Õz¯aZuÄd,äÑâ%äMMN™TqÈX§å•ÿH~\§á^®y���YŽ0À)v‡ü/åÊUR­–¾ÑTͬŒò€ÌÑ ªyë"¼3UÝC_NÚ„ûd”­Våg_MúÜ\Œð×`Ó6­Øö­"‰1^ñkmÞS*ÞP©Š²äu!žÉÝrKæÁƒúŸé?ºÝ©}ëÞÕ©¾TÀ1ªÞÓï©h®:÷[Wո˫bSÿßÇB{ôvýµô#���d;Â�§L46ËÕ*çÍ;b·Â€øO2Jv+ÈAZÀquvôL»ëlk4ü™Öç’_K©ž›UÛ1’ü‘ºÕ´éi=Q–wxCQÿfÁL~ºTÏ€-ro}_†aÜY¼­Òç÷(<jkìÇtõÃsÍš‹b|»?¬‡Ê¨YÑäÏcǯèLýQuÏM8��€GBà˜ÁäF T˽4šz˜  žÖ²‚EÊßÔ¨^*�DuÔ× Î)%ô]joxWKs9ÝFt¥v³v6µ©½ñ}¹žÖ¦¦nÙ‰vÕ½¹]õÝ™üp©ž¯ª xµÜn÷´µUŽÙ‘ê‰0`Õ7W禰I›VüM ‘!Ù£—å_[ Üâ×´µâ-}é'�� Û8ɺ¦æÏ=2ü?«Ï ÉS°T¥U‡ž4jÀlÜ«g@¾Vzÿ=M§²ã­ò•-Nþ<‹T¸ý¤b#¿ªiÏnÆ'JüdL}çÏër_2ÆBŸ¨¬öÙÉŸµ·i«òŸ(—?’õ«l®Ž.���à¡�˜G¢:bøt²eòؽ)ÜÙû€ùý +®žžø¬6Åv¢KÁc{åIðîWC°+kþ|ãWökýÎïõkûwÚYôdºòiH‘ºmz³¾knª���ðÐ�Ì#74Ð_Ð#<ïTä©°üm½^\¨R÷˪ðµ*ž H{@}ë•—“#WáNŠ *ÒäKþ·øHû‚× ���æ Â��óÈBáyCÿ:¹\¥ò´ôÈR\A£Js@ášòGn¤Ÿ7×’?YÏuÅ-¶þ���óa�€ùcÁðLM$X¡œU~E'þ,·Â€Xò׊ '����FàSß×54m32~ù¸ö‡Ó�ÌJVðSìûã:74màßøeÕíeØÜÐÖp¨ZEËk&ÆÞ Jôì²ÅråoUS/ÍH��à Â�Çܫ˹‹Ñ‚€c²y„gj,`ù ×€äz¨üˆÌæýúÈøJÁ¾ÔŸ·D¥Ûu0¼ŽA��� [8&ªº†¾ ¸½öÉ([­Ê}?«‡wñ€3²v„§%³ÎÐŽ/OºÖc½VVîW¨‡¡{���È„މ«³£gÚ;[£áÏ´Î8—ü*€…ÍÖpg§~Ÿü¥ú¬ó¨%>íøÀŒÆ¿tIWïûÔQýÖzI1F���Ìa€c¢:ZS¯_LSæíQ[ÃNæs|–ÀãgÉ<ºW_º&]LE۾юÂå6ÿKUl‘{ëû2 ãë=U–®•7<”þ=���ÀÃ# p̽zäk¥÷ß60Ý«g€K¹+kÎäV~ê{¼ª‚âÕr»Ý÷Ykõf ]™Ô����3! pLTG ŸN¶ ÞY¡Ë1%(çþ’ù#Ë{ò§)×€`¨]=‰L·ícê;^áëm:寑aì–w_ƒ‚æ0Í��à(Â�ÇŒ¨'üþçCÕ»¤¸mË2ƒ:~¢U1‹·ñ€3®éXå:½m|®ú3§Ïß$" wÎuÙ|ò5ßsQ'þOµŒšoÔ–jhh™ oT(6’~΃ٱ“Ú^¸H99yZVºFî5Å*xâ9mk¼*N��À)„N¿¬Ú矔«à9½¸¬PKj¼¦¼œ'UâmU"ý4�³1"3xTŸí(Wa®kbÃ\X¾]ŸzÞÒ‹žævžÀˆ®Ô®‘ËU â µ¤" ÎöÃZ—ç’«d.fT"”P›¯4ùüÝ:}»À–ÕߪÚWªTßM����g8e삼ϸUÛ1"¶©öµL¶.É·þŸ ÏõÔ3`AImÛÔøé«*,zYåk •¿¡A½é¯Îa…½¥ZYûKò§V{m•v&>ßæ{GÞp&CRßc•Vù;ÓAÀ-£Šú7§›Ži¨*���Ì a€c,Åš>Ô{MÝÉ7ñãlz_[šb²úÎÊ(ÙÍ4à±U_è€Þ«þAñ‘iè?žkÔßÞûA½©d°I[¶4iЊ©Ù¨ÈpšÀ˜â¡OôüK}»ÿH‹š÷ªry¹¼?žO>>«Àö÷¨���À¬8e¼S_¿úŒ\3tϯ:¥ÁôÓ�8k<z\o.{* ŽãŒ(òõ[Zâš~ H®üwuz0“&‚£ºxEOLÿýw­'õ|íe¦ ���à‘8ÅŽ(°öEUú)Ü^u çI5ðxX×Ô¼ïcU×·ÍqÚÈ¿®¢ÊL¹êNè\$žyÕÂàí®>¥.Ó”yÏõ›zn5O���a€c®é¸±S_¯OyÓ?~ù¸ö‡¨ �œaËŠåßù†ÊÊÞÐß …ûFÓ_›kcŠÿP›¿ ªoêE@uûCʤcÀMÉ?£E€��€Ç‹0À1Qܹ3”󺔿©ñæb�³c›jxc©òJ«ô™w“JKW«xI¹|æ¼_@ªoˆ(Ÿá\ù[ÕÔ{¿ ~BWÛ®&ÿ×¾9’ô‡6Źf���à1" pLTuÛvè‹Ã“ʃûdTlQRoìÙ³‚2rKåkKL|ü‘qVC}­òoÞ©zs®+,™uï«ê‹ÉG…뀱AFB=÷+ë•yܧ¯Ú»ò¬PNÎ yBCé¯���Î# pL\=ÓîNÚ ¦¿z~~ˆa�S)ÞvF'ÛdÛ]ª¯¨¸9ÂS¿«a»wb„§Ýûƒþ{OH7nþ†9bk¸³S¿OþF/¨æ¯Ÿ*”5z?ö€.îWeÏ-Ö’ŠjK ��àñ! pLTGkêõË”&_ý§~›–æŒÙ5Õ¿½Z5-JµáK\ôéM_X£SoÓß´ÚøQæp»ü;¿–™þsÃ’yt¯¿tMº˜ŠþçkU--Êp´ ���ðÇ p̽z,R¡q.¹‰ðhF9öí þ¦›7ËGdžüA­©;íÖU5n{N®œ'´Ô8?Ç8÷îà*Ü­–8ƒ���=ÕO­þ'Tðö:-ÿöT-UÒ à‘Y¿«Å÷º ‹ÖkÛ§ÕüE=‰ôæÚêSûw‡uä?sÝDÐ’y¤F¾ÿi™t hÑYÿûÚ^I~���È„Ž™©g€dwÔê…Šzusü˜¥1Å#ç¨Þ¨â\—rr åÞô‘ö}{Náú­zªê´æ¶åÞ=zØ¿¨ö…·TßM���€ìAà˜™*~Ò¾W•¿Ø£cÃçXƒŠ†šäÿt»Ê ón–㻊´ÁwFÑ[¸™*‚jùñ3Uä?çÐt�[VüºÌž8•���˜Â�ÇÜ£g@rƒ²ñëvÍõÐ3`a°4™Vci i›ò×lÕîÊUZRôw5šsq4ç^=iÙÆ#êEy}M§vm”»¸@®‰ëʪ›ã��€GDà˜¨ŽTtiRqÓüM=qîߎI|å¿äZ¶QƒéO&?è_m×ek\ ó¬ölñ=x”ŸãR•ÿ”ÿÒÔiNÝÅ·ý2; žnPݱ L‹³G���xt„ޱeY£ÉÈÏ:æ«–aì–w_ƒ‚æð´»˜�Ùø%íýÛQuMl„“¯¹äÆßWõŠÊÞøT§nUX=º´ï¿õ‰#eùǶ,Y‰.í•Ç0dx÷«!Ø•ž‚0–âÑT𭦮/ÕGŽsö���Ž0À1cŠ_Ü«²¼Tc³å*çU/}AîUoÈwq®»œ ÄXHo=®nkHÑÓË|½¹–½¡O¿øo­ÛöƒRµcm>=WôÎöýñ›e;Þ*_Ùbåää©°üm½^\¨R÷˪ðµ*>›‹€Sè+¯vV–«tYžrò^S ”���<:Â�§Øò¿”+WIµZúF%+(£< sô‚jÞ:¤i�à€a]ñ¿¢¼[gñßðß¼Cž|ýc×ɉ0`îÜPÄ¿N.W©<-=©{ù U ˜ ×ì”?r#ý<���`î8e,$Ïâ\­òwÞ¬¸Ä’Q²[AZ�UÇ….Ç”°m ‡¿Ô+ËòTèù—æ¶¥ÞBžÊYåWtâ"p+ ˆ%­ŒO<kö’æsÇô]Œc���xt„ŽLnJµÜ{áæä€TPð´–,Rþ¦FõR�<F3Mø£%7é¡j-¯Qxbr@* (ѳËË•¿UM½³ß¼Ûý>Õ†e¯)`’0��àÑ8ɺ¦æÏ=2ü?«Ï ÉS°T¥U‡hôüiŒÈlÞ¯Œ¯ìK„%*(Ý®ƒáÙô W¢'¬&ßV•ü%=®°œ0����³B��YiTým?è‹¿—i‰+�䫸jΆu)ð¹Ž���`� ›X}ºrö°Œ²§åJUä.W…qXg¯ôéööÌÒÄtE���à�˜Gt)lj<ýhFöïjmížãþjDþõÊM…�®gTþé÷jëŸèB���8Š0�À<UÝåÚú!øÇúàm•>¿'ÝÄo>²uÌ÷7¹—.“ûï_èD(ª8¥����pa€cf¾ciÿVkŒ³½€3¢ ”-Sñ·Üîû­­ tŒ¤Ïe\ñK—tõ®‹À,*RGš¿VÍÖÕZVôŠŒM E{ÕýÃaF ��`V3óË*Wëù‰qƒ£2¿Ý¬¥K7ë[“²_àÑôè|s‡²slɬÛ"÷Ö÷§\&W*Øæqm\Z¤ß^}Èp 5Q MgÕz£8Ÿi���˜5Â�ÇÜçŽå›uŒ�³—Í8–ÌÀ«*(^}÷5 ]©ðèaÀ$v¿BÕ†ê���0 „ŽÉæ;–ÀB‘Í8cê;^—g{°®©y_µŒšoÔO~3ËTðx£B±;Çì¡ ÐC����³@à»Wáu Ž©9šH>TÇ™ãª;ѪoÚ‡dsΘúÃÉk@@uÍQ&Ç;Ϊ¾îû)ùûÑ•Ú5r¹ Tüb¡–TÔÙ~Xëò\r•ìÑÅ×���8ƒ0À1=jÚ´FÛ:•°‡uÅÿŠòrK´aë«*3Î)ž~€ÙÈæ œq 6mÓŠmß*’Óè¿Öæ=¥â •ª(«VKü¾Ó†ö–jeí/²“·×ViWp`âóm¾wä ß|���0K„N ÉS¶OvªH Q›òŸR™¿]–Ý)ÙG r¼˜½¬®ÀRȳYµ©)v·š6=­'Ê*bÝPÔ¿YF0³HÐŽ5êoïý ÞÔg°I[¶4iЊ©Ù¨Èø{����Bà”ñ˪]o¨é×ÿ¨qg‰\ù[ÕÔ;ªD¤No¾yLÝT÷Èæ œT‰ÿfíljS{ãû*r=­MMݲíª{s»ê»3IGùú--qå('gÚÊW§3©.����Œ0À1cŠ_Ü«²<—r\Ïiû)S#‘´'Õàl_P}„ÀìeyŽo•¯lqró¾H…ÛO*6ò«šöì–aP°/“à £ºx]E•ÿ˜è=p{ÕйHüÑ'����Ó8Ê–¿®ž8g€Çb>TàXqõôÄõhWqÅÿ¿oõù×ÿ¾O€8ªßZ/)F2���€Y �0Ü«g‡¶Õ4/€ Kfݹ·¾?etâÔõž*K×ÊJÿ���àá�˜gf¨À±‚ÚU‘jÖ7ßÓ�KfàU¯¾{t┵VoÚE���<*Â��óH\m6ÌÜ`/uNÓÍá,;[oËJŒdxl`L}çÏërvÎN��ÀBà˜ä~³Yû<ªæØ%ÅíÔã ŽgÅÈ3`H5\¼L¼§6Ø;dȽ¼R¾ÔÇ'ÂêϪ—\\Á]UòGéÇÂÖH°AßÇH ���à Â�§¤›=ÿ¤\ÏéÅe…ª\R{à5åå<©o«f³ �pËˆÌÆOµûsêÝÿ±ªß>¦Xúáܰ•h; Š%™¡j!G®Â-ò»”x@Pa÷œÓž +”{×÷(WÀ¤9)���œAà”± ò>ãVmLj4Ú¦Ú×>Vp8ù®ßº$ßú*Ì =À!¶,+_PC yеdÃ':<¹j!°_†»T•¾CÉî¿ßÏ>¬°w¥ž(©Ò‡'äª;£Ž% ���@†c)Öô¡ÞkêNnUÆ5Øô¾¶4Ådõ•Q²{ÎçŸxÜRGƒµk÷Éicÿ†ª~_õ•øßPÄÿŠ^òwN­|H³Ä‰#���8…0À)ãúúÕg享´×¥üªSL? ÀB5¦ØwGtºw$ùѽ$t¹®N¡TÕÐŒlY½ÿ#ãÕOu6bÊ4o­kj|®#���€CœbGXûbºøNio]ÃyEâœ�¾ÔXÀòiaàLëimš¨ šÉˆ®Ô®™!TL-z���À9„޹9Màxðú=ÞäXØ,™u†v|yxR xXŒõZY¹gR:Åîy°»kËöÃ: *8e]Vç���àÂ�Gª¿í”üÞÝ2 ¯ö5üKfb<ý5� ›­áÎNý>}¿>zA5ë<j‰gz-¸¡~³MÁc{å1 ÞýjÈ` ���ð0c)vj§ ]9ÊÉ]¦R·[kŠ ôDáßÕhޤŸ`á²dݧúÎÉgý“«ým[Z$#O?ïþìx«|e‹•““§Âò·õzqaòzò²*|­Š���À!„N¿$ßò|•?NªUÿÅ}zeã1uó&XàîÕ3À¥Ü•5÷i8YjšÀ:¹\¥ò´ô$¿c\A£Js@ášòGn¤Ÿ���Ìa€SÆ.ÈûÌ_厦?‘fwÊ_öÑÍÑ‚ö°úx3,L–Ì#Ë{ò§©gýÿª/ããBC yV(g•_щìàVKþZ‘qu���ð „N±ûª.ÓKžoÕr{#pV_lÒò2¯~L=>XÛ·§J�XlYšÕëÛÖp¨ZEËkM}£TP¢g—-–+«šz™L���gÌ’¿¦Îž‘ä©Ñ‚ù3”O[®5ª½B`¡²]³lþ7"³y¿>2¾R°oP!O‰ J·ë`x€I%���p aÀ¬\×éªgôĆõj\ƒ§÷¨útçÔæaw­ëŠ3 XfßüoLýáÆ‰„uÍQ&Ç;Ϊ¾î{…b„ˆ���paÀ¬\Sý«›èJ¿I·ÇdM}ÇoÿVk,Õ0 õ ¡w÷€ɉæãlÚ¦Û¾U$1¦Ñ+~­Í{JÅ*UQVýã ��€û# ˜KÝ ×ÚÊ÷d¤J‚gXT®ÖóÞ Õˆ®Ô®In8&�,LN4ÿK}ͪíH=êVÓ¦§õDÙAE¬Šú7Ó@���Ž! ˜-{HÑ3ûeTVÈívÏ¼Þ ¨c|L}-ŸiãÆÏÔÒG0`áq¢ù_*4ܬMmjo|_E®§µ©©[v¢]uonW}wºÊ���˜%Â��pÌì›ÿÝé;°H…ÛO*6ò«šöì–aH~O‚D���8ƒ0à±T°þŒbéG�ð@V\==qQ���€Ç…0À1–zZ|ÚP˜7u”`j¹2ÓÏ€GgËŠ_—IP���€Y" pÊØyŸÉWI•O‡‰Ñ`·VÝé%ÒO€‡f_Ó©]å..+0ºVÉׯU���Ž0À)v‡ü/½"t4ý‰[lYcŒþlYým:寑aì–w_ƒ‚æ°#¯;Ñ/³#¬àéÕ Ê´¸ª���àÑ8fT½g«õjõELSæíVÀû-Ç€?;vRÛ )''OËJ×Ƚ¦XO<§mWgYÖo)Mßê ¯ZFõQ…ã4��À£# pÊøeÕ>ÿäÝýR‹žÀŸ@Bm¾R¹Jvëôíj€T¥@«j_©šÝX@;¦ÐW^í¬,Wé²<å佦@d$ýE���àá8ÆRwý{Ú8«`08uµõÐì Xð†ö®Ò*ç´c£Šú7ËÆ“i¨p†ëABWÛ®&ÿ×–euü‡6Å9���€Çˆ0À)v¯Âõ>y}GÔM$ªãÌqÕhUŒ³½ÀŸÀ˜â¡OôüK}ßr+ lQsã^U./—÷ÇóÉÇgØþÞ U£2ûôU{·BžÊÉY!Oh(ý5���Ày„ŽéQÓ¦5ÚÖЩ„=¬+þW”—[¢ [_U™qN©{‚�²Q] ¼¢'f:*4e=©çk/k<ý»n³tqÿ»*{n±–TP[‚���a€SÆBò”íSGòý»ÝÛ¨MùO©Ìß.Ëì#9'�,|ƒg´»ú”º¦4¾~SOœ ���æa€SR ×júõ?jÜY"WþV5õŽ*©Ó›oS77ù€n\ñKÿW7¦uù·Wkk·#ã���§8fLñ‹{U–çRŽë9m?ej$òƒö†Œ}Aõ±�8Kfݹ·¾/#õº¿µ>x[¥ÏïQxÔ–mׯ¥EÚøíUÂ���Ì)Â�GÙ²â×§•�[J$( >KfàU¯–Ûíž¶¶*Ð1B���€¬Að¸YAíª8¨€nL}çÏëò´S���@6" pL\m6h‰k¦îá‹T¸é€‚æ0wÜŸuMÍûªeÔ|£¶øXò±©àñF…b#é'����³Gà”Ô4ÅË´Á{P@àÎ:dȽ¼R¾ÔÇ'Âê' �¨1ž?®sCÓ†Ž_VÝþ†ÓïoDWj×Èå*Pñ‹…ZRPgûa­ËsÉU²G7���‡8fDfã§Úýƒ9õîÿXHÕoS,ýÀB•êP>CePrMLÉäüÀ°ÂÞR­¬ý%yV{m•v&>ßæ{GÞpf‘���ð „ŽS<r^Ç|Õ2ŒÝòîkàh�ð§‘š&𾪾84©:è°TaÔ)Ô“Y#Q;Ö¨¿½÷ƒzSŽÁ&mÙÒ¤A+¦f£BF0~óI���À,8fÒhÁÜå*çU/}AîUoÈwq€@�Xðl wvê÷é/öÑ ªùë§ grQäë·fî=’ÿ®NN;‚����<"Â�§Øò¿”+WIµZúF'¦å™©À[‡! �8KæÑ½ üÒ%Ó4o¯è¾VÕÒ¢ ïêêZàuUþcRuArÕйHœP���Ž! pÊDÁ\­òwÞ|Ã~+ ˆÿ$£d·‚™U˜·îÝ3ÀU¸[-ñLîê)vüCmþ2¨¾É;ÿ‡jB���<a€cò”j¹÷‚FSSa@ÁÓZV°Hù›ožÿ°€Y2ÔÈ÷?- ƒéÕ¢³þ÷µ½>’üj&œhB���<a€“RóÁ?÷Èðÿ¬>+$OÁR•VR85+Àwžö/ª}á-Õwg¤šÚñåáIÇRM×keåþŒ›���Bà¨Qõ·’ß»[†áÕ¾†ÉLÐð øs˜©2 ¨–?SEþsò„†ÒÏ»Ÿû4!\çÉð¨���ð`„ޱ;µS…©.à¹ËTêvkMqž(ü»Í‘ôs�,\÷*ñ_¤e¨c4“³BÉï1S¶o´£p9£��àÂ�§Œ_’oy¾JŒ'UŒªÿâ>½²ñ˜ºé�,p©Ê€ÊiêFÞì‰'¿’©{ .宬Ép<!���ð`„N» ï3•?:Ñ>ð»Sþ²nN°‡Õ?pãæç,8¶eÉJt)xl¯<†!û_ Á.%2Þç…å=ùÓ”£ÁP»z8r���8ÅîW¨ºL/y¾UËí7ñgÕøÅ&-/óêÇÔãó‡µ}Ëqª€ÊŽ·ÊW¶X99y*,[¯ªÔý²*|­Šgôº·e ôk ¯M§ü52ŒÝòîkPо9²���pa€Sìˆkó§•öΰ\kT{…ÀÂsCÿ:¹\¥ò´ôÈR\A£Js@ášòG2« ²c'µ½pQòz‘§e¥kä^S¬‚'žÓ¶Æ«qÜ����¸?Â�ÇŒkðôUŸîœz^ø®u]q‹{|ÀÂ3¤g…rVùx‰ß bÉ_+2lþ—P›¯T®’Ý:}»À–ÕߪÚWª2O���<a€“ì1Yclô?'[áj-¯Qxbr@* (ѳËË•¿UM½c7Ÿv_à {Wi•¿sÚ±€QEý›Ó˜†ú©���À¬�€cFd6ï×GÆW ö *ä)QAév dxæLñÐ'zþ%¾o¹Õ{¤EÍ{U¹¼\ÞÏOô" l*���Ì a��8bL±ïëÜд®ÿã—U·?¤áôÃûÕµÀ+zb¦~#SÖ“z¾ö²˜/���€GE��ްdÊgظ'WÆÇ’Ïhwõ)uÍØsäÖúM=q*���ðèc껃ç4x¿Zà‡ºC`~±dÖÚñåaô:¬Æz­¬Ü¯PO¦›w[–•ap����<"Â�ÇDpçÎ|Wpòz˜;„�æ[Ãú}z 8zA5ë<j‰SÔ��€ìAà˜¨êvúòöÁÔÚ'£lµ*?ûjÒçN<ÄB�ó‡%óè^~éšRÒmûF; —g8Z���øc8&®ÎŽžiÃm†?Ó:ã\ò«�¶{õ p)weBÙÍ����þ„Ž‰ê¨¯A“îšf—ÚÞÕÒ\CAŠ€Î’yäcyOþ” ˜^¡võ$òˆ€Õ«¶S_ÉkòøêÕ|¥/ùÝ���ç8æ^=òµÒûoš ž¥Ø™ƒò¨®9ªQ)ÞqVõuß+I?'‰K:PñŒ\“¯#®ç´­ñ*����Cà˜¨Ž>l™tG0ø/…;{• :ø×`Ó6­Øö­"‰1^ñkmÞS*ÞP©Š²ê Zê®CO¹=jE·Rq%zZå߸]õÝÄ���pa€cnh ?®ÿ5Ö1_µ c·¼û4‡§õ�°0 )äÙ¬ÚŽÉîVÓ¦§õDÙAE¬Šú7gØ@0® ñÖÍï1ÅèC|���àÁ3¦øÅ½*Ës)'w¹ÊßyUÅK_{Õò] �¼]©Ý¬Mmjo|_E®§µ©©[v¢]uofzWÿ†"þ*í<Ý=éHÀ¨úÛŽªª¨BþÈôç���€Ù! pŠÝ!ÿK¹r•T«¥oT²‚2Ê2S3Æß:¤i�°àÙñVùÊ+'g‘ ·ŸTläW5íÙ-Ã8 `ßXúY«¶l© ŠWËí^£Òey߯È8§A®#���pa€SÆBò,ÎÕ*çÍ*€[a@ü'%»™&�,xãŠ_º¤«7âêé‰ß¹³oÿ®ÖÖ²5ôhSy™Ê6¼+oýõMô����œAà˜A…<¥Zî½ ÑÔÃTPð´–,Rþ¦Fõò>Xà,™u[äÞú¾ ø³>x[¥ÏïQxÔ–mׯ¥EÚøíÕ{„cŠ}\熦5¿¬ºý!¦’���À1„N²®©ùs ÿÏê³Bò,UiÕ!…ã–˜Ç,™WÓåýîik«#„©ïQ~g¤àä•¿UM½\K���à Â�ǘúîàÝgzÇ/×þÐ`ú€…kL}çÏëò¬öë©êC;¾<¬@ ^‡uÀX¯••ûêá¼���œAà˜¨îÜîè¹8&� C¶†;;õûôëEªé:ZâÓŽ����ˆ0À1QÕUnÒ§þIwôüÕÚP¸R•û~Va�ðç`õªíÔWò†<¾z5_é»ÓLð,™G÷*ðK—LÓ¼½¢mßhGárÁxúy���Àì8fH]ÑÞ©ç€í]¨që©u‡á†°ð%.é@Å3rM®r=§mW3 îÕ3À¥Ü•5 “*��À„“ý›NïzS›öµ*Î{x`³Ô]ÿ†žr{ÔŠ*>1 p\‰žVù7nW}w&q€%óÈÇòžüIÁ`ðÎ µ«'A¢���ç8*ùÆßüYÇ|Õ2ŒÝòîkPÐ~¨ùâ�櫸‚Æ[ªíI?¾eTQÿæ KümYŠÿo—‚ÇöÊ“Mèݯ†`—\H���à Â�ÇŒ)~q¯Êò\ÊÉ]®òw^UñÒä^õ†|€ï†"þ*í<Ý=éHÀ¨úÛŽªª¨BþÈôçîÏŽ·ÊW¶X99y*,[¯ªÔý²*|T��À9„N±;ä)W®’jµôJVPFy@fª ø[‡áM<°ð%ª-[ª‚âÕr»×¨tY^rS¿HEÆÝcGg– ÖÉå*•§¥GÖDµA•æ€Â5;3���€! pÊXHžÅ¹Zåï¼Yp+ ˆÿ$£d·‚Œ¸1ž?®æëj>èѦò2•mxWÞ#T³÷ßN?ëþ†ò¬PÎ*¿¢’[a@,ùkÓ���àÂ�Ç &ßÄ—j¹÷‚FSSa@ÁÓZV°Hù›ÕKe�°ÀÝk@råoUSïXúy÷ck8T­¢å5 ¦.©0 DÏ.[,WÆß���x0Â�'Y×Ôü¹G†ÿgõY!y –ª´êÂqÞÀ Ÿ%³ÎÐŽ/+¤×a0Ökeå~…z2-‘Ù¼__)Ø— KTPº]Ãô��€s�À¶†;;õûô{ªoÈ:ZâŒ��@ö ��GX2îUà—.™¦y{E۾юÂåœ÷��@V! ��GÜ«g€K¹+k¦È���Ùƒ0��aÉ<ò±¼'R0¼³BíêIpD����Ù…0��aËÐЬ �ÆûîˆÎ Nk::~YuûCŽ'���Œ0��+KñhXÁÓßê ¯ZFõÑûLqb<!���ð`„�ð8Ù1…¾ª‘QµAîâ¹ò^S 2’þât©ñ„ÛµáÓ/''üRŸn(VÑC'���î0��1¦þpãľ®9ªÑäãxÇYÕ×}¯Pì^›ÿél%ººt}ÊQƒä÷¹ðO­zê~!���ðp�ÀãlÚ¦Û¾U$1¦Ñ+~­Í{JÅ*UQV­–ø£6´;]­W6}©‹÷<^����<Â��pÄBžÍªí‘ìn5mzZO”Tĺ¡¨³Œ`<ý¼³] Û+aÈðîWC°K &��ÀA„�àˆ]©Ý¬Mmjo|_E®§µ©©;¹±oWÝ›ÛUßÙy;Þ*_Ùbåää©°üm½^\¨R÷˪ðµ*N ����‡�€Cîlä©pûIÅF~UÓžÝ2Œ öeRâCÿ:¹\¥ò´ô¤æ(hT)`(\³SþÈôó���€Ù! ��'YqõôÄ“ùG‘:j°B9«üŠNTÜ bÉ_+ê¨���p?„�5l ‡ªU´¼FáÑT Jôì²ÅråoUS/ ��à Â��È*#2›÷ë#ã+ûò”¨ t»†DË����8…0��²ÌÔiÕŽ=â±���`f„�àˆ1ž?®sCãéÇiã—U·?¤áôùӄ0G®‚b­q¿¨e¹Z뿬Ñôs���€Ù" ��GX2囸»VÆçýSã ×Èåz^;Û·n xØñ„���Àƒ�€#,™u†v|yX@ ½뀱^++÷+Ô“ÉF~ú4[Fõofš����C��ް5ÜÙ©ß§wù½ šuµÄ§˜‘­Ñö}zé™] §¿Qâ’ü•/¨à/¨ ���€c�À–Ì£{ø¥K¦iÞ^Ѷo´£pùCÜÕUßÅzUïüD Ã7À͛U}ª‹&‚���p a��8â^=\Ê]Y£Ð­;ý™°zÕvê+y C_½š¯ô���ÀQ„�àKæ‘å=ù“‚ÁàjWO"“#i‰K:PñŒ\“×sÚÖx•@����Ž! ��Gز4ô�w³Ô]ÿ†žr{ÔЦ§ Œ+ÑÓ*ÿF¦ ���À9„�àëšš÷U˨ùFmñ±äcSÁã ÅFÒOx¸‚Æ[ªí˜þ|¦ ���ÀY„�àˆ]©]#—«@Å/jIE@퇵.Ï%WÉ]LdR2pC•vžîžt$`TýmGUUT!äFús���Àì�€#†ö–jeí/©!ƒj¯­Ò®àÀÄçÛ|ïȾù´I„U[¶TÅ«åv¯Qé²<åä,R‘qNƒ³:‚����ÜA��±cúÛ{?¨7µilÒ–-M´bj6*ªÄßNDÔ|УMåe*Ûð®¼õÔ7Ñ?����pa��8bD‘¯ßÒפ)�·Vþ»:=˜ÉD1ž;¢3ƒcéÇiã—U·?¤ k ���€" ��GŒêZàuUþC@àΪ;¡s‘¸2»¯oÉ ”ß&L [ÕÔ;-$����a��8bL±ãjó—AõMÞù?Ô]}KfÝvmøôËI—útC±Š*÷+ÔÃhA���8ƒ0��áÄ]}[‰®.]ŸRF0¦ø…jÕS¯)ÉtD!���p„�àˆÔ]ý÷UõÅ¡Iwõ뀱AFÝ,îê[Š®Ö+›¾ÔÅ8Ç���à Â��p„­áÎNý>½9ÀèÕüõS…†3`ËêoÓ) c·¼û4‡3ì9����d†0��aÉ<ºW_ºdšæíýÏתZZ”ñhA;vRÛ )''OËJ×Ƚ¦XO<§mW“ÿ���€3�À÷îà*Ü­–x&£jó•ÊU²[§oW¤*ZUûJ•껉���à Â��p„%óH|ÿÓ¢`0˜^-:ë_Ûë#ÞÕVØ»J«üÓŽŒ*êßœ®.ÓPÿ U���˜Â��pÄ=zØ¿¨ö…·2¼«?¦xè=ÿ’Gß·Ü š÷ªry¹¼?žO>>«Àö÷¨���À¬�€#fª ªåÇÏT‘ÿœ<¡¡ôóîgTׯ艎L]OêùÚËÊäà���0Â��pĽz,Ò²GÔ1šá<€Á3Ú]}J]“šÞ½~SOœÊ����<:Â��pDª2àŸò_š:MÀì‰gp¾?¡«mW“ÿkË2[Twâÿ*Î,A���<F„�àÛ²d%º<¶WÃáݯ†`—ÜØÊ<îÓWíÝ yV('gE†Ç ���€GC��±ã­ò•-NnæóTXþ¶^/.T©ûeUøZ|§ßÐÅýïªì¹ÅZRq@mN���€GF��ޏ¡ˆ\®RyZzd)® Q¥€9 pÍNù#7ÒÏ���æa��8bèf‰ÿ*¿¢7õo…±ä¯2‚ñ‰g���Ù€0��ak8T­¢å5 OLH…%zvÙb¹ò·ª©wìæÓ���€,@��Ž‘Ù¼__)Ø7¨§D¥Ûu0< Ùu�°e%F2˜J����d†0��²^\Á]UòGéÇ���Àì�@Ö°•h; Š%QNNÎ]ËU¸EþŒF���÷G��Y#Õ„°XK6|¢Ã€·×~îRUú%?nT¸Ÿþ���˜Â��ȶ,³Q»vŸTlÊÝÿ!…ªßW}Œ����Î �€¬1¦ØwGtºw$ùѽ$t¹®N¡aÎ ���àÑ�@Ö°dÊgì0u=­MMݳœP���€?3Â��È–Ì:C;¾<<©_Àa0ÖkeåžI}êt<# ���À## �€¬ak¸³S¿Oßå^PÍ:ZâãéO����³C��YÃ’ytŸê;M™æ¤Õþ¶--’Œ§Ÿ���Ìa��d{õ p)we M��àÂ��È–Ì#Ë{ò'ƒÁ;+ü«ú���€s� kزÿß.í•Ç0dx÷«!Ø¥E���pa��d;Þ*_Ùbåää©°üm½^\¨R÷˪ðµ*N ����‡�@Ö¸¡ˆ\®RyZzd)® Q¥€9 pÍNù#7ÒÏ���f‡0��²ÆBžÊYåWt¢ àVKþZÁ4���8†0��²†­áPµŠ–×(<šJRa@‰ž]¶X®ü­jê»ù4���`–� «ŒÈlÞ¯Œ¯ìTÈS¢‚Òí:-���àÂ������þd�����ø“! �����àO†0�����€?Â������þd�����ø“! �����àO†0�����€?Â������þd�����ø“! �����àO†0�����€?Â������þd�����øS‘þÇyÛmÞ›(»����IEND®B`‚����hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_write_var.png��������������������������������0000664�0000000�0000000�00000351040�15030617045�0025207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ì��×���?·ö���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOTWû÷ûÌŸ\I˜4!$>09ÓrǦiঠߠ©á2Z3ßÑè ÆzA{ 6lêÛ™œuðSçSá‹:´Ì…©£‚V8o°2=;\:‹Ðq, ¿îÁÏPöû»ÖÌ�³‡™a~î½6®×™u–AfæØÇ^{­cëXDZ‡Ãáp8'*Ü`æp8‡ÃápbÀ f‡Ãáp8'Ü`æp8‡ÃápbÀ f‡Ãáp8'Ü`æp8‡ÃápbÀ f‡Ãáp8'Ü`æp8‡ÃápbÀ f‡Ãáp8'Ü`æp8‡ÃápbÀ f‡Ãáp8'Ü`æp8‡Ãá0˺uëRn©Â f‡Ãáp8³¤jðrƒ™Ãáp8‡³¦á3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡n0s8‡Ãáp81à3‡Ãáp8‡±ÁëÅ_îIÁW‘ñá•û悯¸ÁÌáp8‡ÃYÓˆ Þ1tT£X­†:jÛŽ-U÷0|7˜9‡Ãáp8kšsEŽÿw±Ú[Ü`æp8‡ÃἈ Þ)ôu>‚Óí†{© ¡·áKœ³Ø—~÷rÒ»¶Á f‡Ãáp8ΚFlð¾B—©ÝV+¬K­Ý ‡ñnù-ŒFnæ3‡Ãáp8gM#6x£…d¨Í f‡Ãáp8ΛˆØàÃ=mNkµÐ†4ñžùà߈á3‡Ãáp8gM#6xÿÆÔäëUÒʉá3‡Ãáp8gM³Òàà›„µã&Ìæë°tÙáö.ÿm%Ü`æp8‡Ãá¬iÄï<<O.C“­òÿ~±©ò*ÐìðÿF 7˜9‡Ãáp8k‘Á+ ´srŠ+ køf³™´k¸tZƒw´b„úãp8‡Ãá¼iˆ f7,G¿DÇtX†0Œ›ç¯Ãé7˜ç139 Ÿÿ¸ÁÌáp8‡ÃY㈠æ)<iü Çw딇¹–K'Q®o þîg\1=ä•þ8‡Ãáp8obƒ——Ææp8‡ÃápDˆ Þ¿álú¥§ÏŠò0‡·sf;^ßÁ f‡Ãáp8ΚFlð ðMMa&DÌÜ`æp8‡Ãá¬iÄï,^yV.™sááCæ‚/Cá3‡Ãáp8gM#6x_¡Ëx×üéäBÚÕìÜYƒ«æ6t:Æ—2dP¸ÁÌáp8‡ÃYÓˆ Þ8ý© QÛ=¶ä…¦¿Kn0s8‡Ãáp˜…¼ÞÉ1LúË_¯æa¦¯8U{k©ˆ 7˜9‡Ãáp8kjðvT¢¢cŒ¼ŠÃü·ç ZôŸ¡do=ÁÚ&Ü`æp8‡Ãá¬iÄsl„Ñ[(ÏÎÁÓÓ¥€Ü`æp8‡Ãá¬i1˜#Á f‡Ãáp8Κ†Ì‡Ãáp8N ¸ÁÌáp8‡ÃáĀ̇Ãáp8N ¸ÁÌáp8‡ÃáÄ€¼cŽ>8Æfƒ¿I n0s8‡ÃápÖ4«¼ ðº»ñ­±ÓÁ߄ f‡Ãáp8Κ&šÁ+xÝèë¸ méd‘¿y«¢ƒÌ‡Ãáp8œ7±Á;‹1û=\Ó@~–Êÿo´©r¶`kÍ}n0s8‡ÃápÞ<D¯0Ž'-zTçB¥zêÓFÜ´:áñù0îÃßÁ? …̇Ãáp8œ5MDƒWðbÌÑ suæ.جmø'aæp8‡ÃἉD6x}ð8­¸iüêÜ·üÃc˜9‡Ãáp8o$"ƒW˜‚ã¶§ÕïBE~Oÿmݺlä—Tâ¸{˜9‡Ãáp8o bƒ—ú»ƒúÓä®ê³fXݯ!ÿÍûæÉÿ¯„̇Ãáp8œ5MdƒW€Ïã„õæeè Mè°=FWg?^ÿ5n0s8‡ÃápÖ4«¼s˜|vÿÁýq8‡ÃápÞDÄïߘš¤!áÌcjl‚˜Î+á3‡Ãáp8gM#6xÇpO[ÓZ-´¢v µ?s3‡Ãáp8çÍ#Ü`î¨Èñÿ.¼ñ´r‡Ãáp8œ7±Áû ]¦ft[­°ú[7:ÌT•F£õ/ø‚ 7˜9‡Ãáp8kšU ^ß tT¢@ûÓòÊ­yƒ™^ o¼ñÆo¼ñÆoov‹…à¾Ùë‘}àÜoªÁ¬$¸¼™EIò².+—/}p]Æ’îëZ@éúæã€t°.¿X>/þrO†eÉX€wÒ?GÞÌ,Jë€\ÞÌ¢$yY—•Ë—>¸.ãGI÷u- t}óq@:X—_,ß:ªŠQ¬VC-jÛ±¥ê¦½¿Ã\}տ߉i ×Ç´†”Ö¹¼™EIò².+—/}p]Æ’îëZ@éúæã€t°.¿X¾ØY2¦Fo¡œ†g”ßÂhÐ Mÿ-U˜ÖP:.PJ¸¼™EIò².+—/}p]Æ’îëZ@éúæã€t°.¿X¾)ôu>‚Óí†;¬½œôBð—Ìž‚Ç·´‘ŽëcZCJë€\ÞÌ¢$yY—•Ë—>¸.ãGI÷u- t}óq@:X—?.ù^;Ðõë«�Ós}LkHiË›Y”$/ë²rùÒ×eü(é¾®”®o>Hëò‹å›‡ÇþªK4âæÝ…ÈÙXŠF‡g…ÑœŽëcZCJë€\ÞÌ¢$yY—•Ë—>¸.ãGI÷u- t}óq@:X—_$Ÿ0ÓÎ,ÿï"¶ì=Ðw:á ±šéïS…i ¥ã¥„Ë›Y”$/ë²rùÒ×eü(é¾®”®o>Hëò‹äÆÐ]{µâæ3Ž1c€þür’Ì,ÃåÍ,J’—uY¹|éƒë2~”t_×J×7¤ƒuùWÈçÇSûðRÚ8?¯íhi±ãuðe(é¸>¦5¤´ÈåÍ,J’—uY¹|éƒë2~”t_×J×7¤ƒuùWÊ'À79kÇM˜Í×aéq`Ì»ü·•¤ãú˜ÖÒ: —7³(I^Öeåò¥®ËøQÒ}] (]ß|ÖåË'À븆ÒÜ·ü¿4²wèÐ=ê þ˜t\Óbý†ÃåÍ,J’—uY¹|éƒë2~”t_×J×7¤ƒuùEò Ãh-ÝD~·…åçñíé26\EÃן`[m7ÉP\ÞÌ¢$yY—•Ë—>¸.ãGI÷u- t}óq@:X—_$ßB?Œ[²Q }ˆiaÓÿË/1¤0Ÿ¼G„ÈŒt\ÓRZäòf%É˺¬\¾ôÁu?Jº¯k¥ë›ÒÁºübùfðİ•cägj0Ž-Å£8ïè~åf%ÀåÍ,J’—uY¹|éƒë2~”t_×J×7¤ƒuùWÈç{žïÛ`›ø›ÌŸbSžUÆn¸CÊa‡’ŽëcZCJë€\ÞÌ¢$yY—•Ë—>¸.ãGI÷u- t}óq@:X—ŸÊçÃdŒL±HÇõ1­!¥u@.ofQ’¼¬ËÊåK\—ñ£¤ûºPº¾ù8 ¬ËOåë¨(D…? #qÒq}LkHiË›Y”$/ë²rùÒ×eü(é¾®”®o>HëòSù¸Á¥u@.ofQ’¼¬ËÊå{s`I—ü¾J‹Òõ­$ù¹®3 •Ì1PZäòf%É˺¬\¾7–tÉï«´(]ßJ’Ÿë:³Pù¸Á¥u@.ofQ’¼¬ËÊåKaÒŽÛf3Ì-áš xž¡«õGܶ r})ùaI—Jz†×J×·’äçºÎ,T>n0Ç@iË›Y”$/ë²rù’dº•|‹sÂÜS˜öä «ðœ,=�mïDðØ‚%]*é^ (]ßJ’Ÿë:³Pù¸Á¥u@.ofQ’¼¬ËÊåKŽyÛ7Ð4üóï8‰ëK`rz!¸LÐh­Lz™YÒ¥’žáµ€Òõ­$ù¹®3 •Ì1PZäòf%É˺¬\¾äXxvûkïâÏ;¨-x+Û1.ÌÀÙR#­ÃÄf–t©¤gx- t}+I~®ëÌBåsôÁ16üM8 ðº»ñ­±ÓÁß„’ŽëcZCJë€\ÞÌ¢$yY—•Ë—$ž÷#›È§Ê¯ÅƒÑi8;ŒÐj¿F£õ7˜WAIÏ0G~”Ô_”Þ·Y—?ª|Âk¸ûnÃX±YäoÞªèà³àòf%É˺¬\¾TðÁ3ö ž(%XYƒ%]*éæÈ’ú‹Òû6ëò‡Ë'xG`ï¨Çiõ»P‘£ÿ¾.ë¼[uÌJ€Ë›Y”$/ë²rùR€z4¬m0ê´Ðj h´üî$˵JKºTÒ3Ìf­Ü¾~³PRQzßf]~‘|‚í•yACù-䟄±ÃŽ1ï,^¹_a.øg¡¤ãú˜ÖÒ: —7³(I^Öeåò%ÉRH† Yùûñé¡­Ø\ü1v”Ö㉇M£†%]*é–aì!.–}àßV¦zZn%0»ã9N:Ñ»mx8¶x[xŠ–+6¼¾ŒÁ; ëÍËÐiÉ¢ÐЄû¨,Z•Ô_xßÎ,+õ;‡IÇ\ÓÖB«“þ?ó¾ùˆ¡qé¸?Lßa¥u@.ofQ’¼¬ËÊåKÁiÂNÕÛ(Ò=Ä }VJÌNÌÙ8jä1Ì« ¤gXZ^ÃnØŠõEU¨o6ÃLs}/¶–. zãéY>¸Í%~¯hO¢c<¾àéƒQóŽÿ}ªœBìVoG^Vö˜žFôÜe*ƒRP’¬J$º~É8<éÀÓEèFœç‡þ”—7³(I^Öeåò%ǼM‡wÖíÉ0ó<Ö¯PÄÓÊ­Š’žaiùNÓì4 ­\tÍû_¸<1˜[´¨¹Úbp7ãšv?¶V\m,žÞ9‹g »¡RmCmûÀRœ¾à@Ë‘Sh‘¶‡+©¿0'«oŽßàÕBglEϳ‰ÕÇ'ºƒÖx ‡õ?Ã=7 WÿsxhðM`Ðö+lƒq|F†ˆG¿‚wwo?‰¸›’ŽûÃtoTÚàÊåÍ,J’—uY¹|IòúWè vÂ`Ÿñ¿ôYµÈyÿ}ä¨ÞEeÇ÷0¯‚’žaiˆ}ó/h^@·Ó ·{±½À€ù;\+$CÀë¡!üÞ ç£n¯½žxâìg`Ó}€u;Lp‰>g.Óqh­žàkiPRaJVo?®•¾·|Ž6Õ‡¨nÓà]xÖ€moí@M}Ζ}„ìuPðåe|»'°ã°nÝ;ÐûF´ÄˆõKž—Ñ>Ün¹ Û(M3G^ý>—'꜎ûÃG¯4’Ž"%\ÞÌÁº¬\¾d!³»ß}­‡Éú >›99;QÕØ‹QF³f°¤K%=ÃÒôìýP‰[¼1Ì>¸¼ óÃ!·.ÇO¨Éß§±+`n ;ß;ëë`&Æ—©â#ä¼UÆ=ÌŠÀ‡‘ÖrlRë`±¹‚» ðŽõÁt8Ö.Á<F[á­2 ÆIløëÔ&üÖZ‰Ú6ØI¿rÙÑ®=ƒ&çßÁ÷H‡¨/ƒ0íÌòÿΟÞsÄx­Ú mïxD£9}‰÷Æ4¢´‡›Ë›9X—•Ë—^|V=JM²mWÆ‚%]*í¾J‰0Ò†§šñÈj…UÔžb,®ÅX´f²¶ÖÁ¶h�¯Ê&ž´B_û ,ƒ¯óñãÐ?–¼óþ’ XµGÑ0^àcµ]‚@ÿÉò‡–ÑÏÈóÌV³~).¨f:õøJâЍ/#è¨ÌG~E®]8†=úa §MñáZaàóÎ29É$¸3‹’ô˺¬\¾$‰´Õ¹ØT ÒÔË\Š9–tÉ’,l1I{ê ß¡¥ÇEL›yx»Ñº´åÄà¹þOîÿ"6¸m‹»OÎcôÎutM‡L"ÓF:·¿²0˜ ç¡Õ]FkÏ@0C*,Àëü Æ;îàëL@ãá«PÛ9b[ÑkùU¥0ÅðÏÛ (¨êÄLÐ`~»¦G=8‡†æf˜.}õ–tNK?Ɖû‚�¯ý ¾huB q×WŒ¸í&F½o�¦O¯ÀA¼tô%™G/rSÎU‘è ¾NYÚ+¸Ã@žJ>d%é—uY¹|Éá?ô—[CX&ƒ´{±¥â?ÈÏ-¸m¼%(|\R ˜î¨ÆÕ·àôÎcî™ {²7¡°¬¥}œñÇ|SS˜YÑùÉåÍKMZ™6Òý^yðÀq­ ¹ªPl@~õ¸“1š}ÓpZo¢îäN䨲 6»‚ÿ!¼v4h6#§pÔêÝ(ÎËöË_ }ˆéXâûa>~£Ãè¨ØŒ÷ 1O RGK-väl@=¯¡1#“æ~4D}AC¶8B ÆuX_ÚŠ‘×(z’HÔÉjÀq ¥¹o­¸8ÚTù'`²#®Ì9~ÈÀàqÂzó"NçBwŒWf¡×ÂÉJÒ/ë²rù’Ä÷íç ¸7*oæmq¬õEð[ðqI ÐÃvÇÛèþíæw±^Ó§ïï„Û¥žË™Ì-§PvájÈ‚ð*.”¢ îLéC®¾+Œ´¢tÓè,6¸<k¦•垘NâHëpœ b7Ü×´(ͧë[ÈUŽKW 0dÔÃ@ð:ÑÓ¤Ce‰š²Ï`h}ìO…¹‚ç ̵‡QZýìá¹åçhú¦ Á—R"ê !1Ì¡M•[†kŽÈÏŠèýI"Qo¤ƒA!r˾AsˆWÆl¾­ºÆÈÏí°O®²z¼³ÿŒkÚÈÏRaê]¨Oÿ®ê/1áaVRl¥ttx©P’¬,ªþ„I;n77ÁôC\s™\ž¡«õGܶ…nr8‰BýGm‡í_ `1ëJBéÜÒ‘ËY€wx¯D:Ïão±cÓ'0;ã Q6>ëWØÙðÇ ÃXp™ ‰3}¤0~Õ›©“p3yO3º—ÒºÍ×rhG,"ÝCŠc}ÿ޳°¹KBŽÍô"žèáë>X]ñG'(È`¦׎sçïcT¤lbHë¿@k\Æî<ÆœÆfºE’³Zs7žMÑãÎSÉñ#õöPšàó›³ú›î@åŸÃâœ0÷¦=9È*ü'K@Û+‡ßEyø@#™ ‚¯9– †l@þ)¢ŸÙ?Ñqñ<´Úk°NÄ3G¦#—s$|íÔã@åUf«Y¦Áù=>©}€ñ%¥f²7ª¶cW"Šh.ä#ªÊ>ƒñvÜÞYxZ ¿žÉ9—ö§nq,»µ eû µôÂîš^Õè_îÙÈ/9†C…ù(VŒR&ÒÊý©É×îÃ<f&#_›‚ æÀA‚ÎñYòS4¼xÚÒ²ÊI^Úiè0~†²*#n÷¹áõMaÀômœy*ßdäÝzÓ`ß`f{wUýÍÛ¾Æïy" øŽ“ظ¾Ä#ÏÓ›‰§7ë>EqÎ[X§–'’y|Œy’ìGd~L9—s�–<‹ò࣡ý•ÕPçùÃ\T_¡7ü@džÇh,}ª¬,¼½.ÓNªqèKm#ŠjÛcÄcÓÅ×^¨TÅÐõŽÑ§VmÌî)ØëjcÌTîeÆpO[Ó´ŠÚ)Ôþ¬ô,ñÜ@ÚâMþ?ý JizÖò>6b˜YF¾í¡7ÚŸ™D!» ¬êoáÙ쯽‹?î ¶àml¬lǸÿàqu±o4îÓþà´¥[G®§/ÕCo¸Ç=Ì"àéïÇóð³}Â_èë‹· N:r9SãŽ-Ï¢lçÚÕót•¥PkÊPmhÓ‰ŠƒCHMºÃ(\ !­‡¥ûZŽÿ({ëúE4<v†,šh€¥ê0Œ¶çäg'=ÎXÜQúVx›Eƒy”ü·Tò6ñœ0†ŽŠœþ½ÜÞªèXsÔ’Câš[Ðf:8ß&èÊ‹–ßú[è¾ùƵeõ†#ËöЛI:Îô¡¼Ý¶ôMadÜl:þЄù£dBž)­ök4Z_qƒ9aª ˆ·9-ÌÝ‹i¹Ìûæ¹®DÐ9òÔ'¿{ÌÎCñ¶‹°Óxywo.Àá[ϣϑ)çrfϳ( Þ—p½Z¹ÀÆžàá` ÊçjîvÔú“l@^ùUØ1¶S"Êâ ^8šêÑé·•æ0ÞyQwż¶éQ°¥Îß÷sÞÏ{*²¥PÄsÂ+t™šÑ½Ô¿»Ña6Ûæ4‡ÿŠxM 2˜ÓQ²sí<UʯÙâ:ñÉY‰´ÛCo&,|JÜ]`Ö`öC̈±WÁ ZœØÐü¯0VE•ñ6úÜ3ðyúaÒÿÄC2DƒÙ|0˜LÖNÂ<8‡Á<Ñ»Íh+œPeö<‹²à¾‰í ôˆV<l8Š´m°ÚŸÇùü“±ÂeÃíú3(ÛSŽšú;° ü‚Ž_2éa^ lU.Ê£z˜)³p÷\Á×Úïa˜&ý¢9ÅÕQ ÒL³êœà{Žê¨©ód0“ÁàÇF´…n6ð™È {}ÓpÙî ¾¦{ÊΠþöoèù¿psldÛz3aÎàSØîÛ3'a„)Ø!Gõ6²Þ&ãacáiJÓ5ºS̞͡gQÜf¨#éq©©Uô%:Ü d YÌòU³¥r;©|nX»ž&bCúCªµ3’„ê=‚ûd¯Göp+Þ`Žø 'Z²SL Dã*jv•<†ÙŸ^ÊŸ®ç¡"ÒKÉ·=ôf’އ3(ewUý10ûí˜Í7ÑCS. ÓìjC Y$J¾FyáFrOi(ÐiÔ[îãf«U–\®ìB½Ãmx8¶Ûšw˜Ì³-_ ªž¦i },C©¶%Ê‘<‹§ÐdŸŠáLSè·»I¯#¼´£/,ïyÆqÿ]ïp…:øH{n9ÝF«ÿg—ã´gî„eþ aôšºÂô¼xú¿ hŽ’+˜Ò];#uè÷ƆŒ7“c˜ŒRÕrõ÷¯Žts¤’ö?1‘†’ÿëË8¤>«ÈôRlnq2 ß]xƒCGånT[†ÈdöÏLU„²“¡Ñ>„¤Ó´0ŒŽÚ]ÈQ‘ 6ï®Ù^1éL`ƒ4y‡£…>cÊ÷=zhë~‚ƒ¦‘£ÞȶöJt'‹ -å%8y6$†›´³»°Íðs4,óÖqlÞ|·häLâ€ýùÊëw´à›Nz\•f$y€š‚s°FëÔQ½Ôñ&7H7DfïlœÏ`šjg¤ª»THõý‰ æyLtw£?\· �NÇ€’>Ÿ^Š¥í¡H0å)S6|wAfûÐz— ƒytšF ’GDoGåÆMИà†`Ò|}rÏd’ö¸`»]š²”ÕÔã¶ÍŽžŽß¸‡YõG;o…=ò?^†ùa‘WÔõû TÅúÌ´¡ÊAáö|ä–š14ÐŒ½Ù*¨Š.âIFS.˜5y(ÜÃMÚ3$4˜Wcá)¶e!»üVt³ûGT”éa ¹Ÿ¦ åÈ/¨DcŒä™#‘p òܦ\;#½P[/R}?E"ƒ™©ž�¦ŸÁNÉNÅ¥—RÜöCž²$a«@ƒÒvÍ-Œ ÷"™ô¨§>tÑÎJx È÷kÑñçïh¯- ÆÎ]¶àÈ‘›‘u`ZÌÖRƒ¥-<†YD:ÆGw*©òÏÇù´Z`1¶úA¯1ÐP…sÖ)ÿïÆOa°Ç’cxÔ3éM±d˜…ÛúKÀ™6 u;ò°×<´"ô$}¤#œb“öv4›Lø¡Ç…9òÚ3ØÖ–»ì4D†Êž ©¾Ÿ"Áœò `ÆJvFK/USƒºž±(× #Ìm­sž²x!†)ëXÞ]`<Oô¼Ý€÷Öo ‹¥í:ãL7•YȘøä24Ù4ôæCœzàÆ¬ó.jkP]׃ It7î4­<±¾ð´_6ÿN–ëœeÈÉ;ìø 5ù[âô“ϸ^ã¿zCB{Ñmú§Zä_ãCmÇçgîaœÞ·éœ8Ñiß(z2ž%cîñ•s‘0о‡Clôß,¼)ìp £pî@Ÿd2<á äÖWãƒê[pzç1÷Ì„=Ù›PXVR>ÎÅWzIÕàMõý‰ ætœ�Ž”[ЇÑ‰"Îà±,%;W¦—òYõ(¥†]ð530·=´ L{ÊVÂtæw”“'Zpš°sçbÊ­PXJÑGà ^aÌ2 ù¬8WÚ§¤2º`Vgù'*qSw䂯!Dó'r0>Š—Zø EëH<³Ò,œ7Ž"W.i?Cçt& %Zjôø©'Ôà'íaÊ>ÒÂbµÃÚ§e ¡ù=bô^öõGãH é§ F÷q4 ù…tT¾‹õ:~ü —é¸,éiL…TßO‘Ì`¦î}j¨µ$íÞ'JÊaiÄÛk¥ïE®ª¤ú�•¦^¸ã>Ð(²m% Kž²U`½@ã» ŠÊíA·ö8ô݃"O { &Rôyà¸VÙàY·ù•×`u¿–螨¢L!q¹&=Êò·¢¢ñWŒ1vkå…z‡#Œ· `,îy„~F¸‡ÙŠÞŸ/¡tã‡ÐÙâٙà ó!TüÇò=£­Å‚.-d’I¢-°BZÖvÔv<ϰ„tÌïîë(WŸÀÙP{E{Å{`°“{!<Ç­ÃØ|¸-b´ä $HèŸ%?E˧--1b4–ý8ѵí_ @œ+h˜á‘Sq.¾Ò Õ}*¤ú~ŠDs:Üûd0H9¬#}ÌÛtx'· †æA…´´{±Å?Ø´à¶=Âö’\DXí £w±wÝCÍãL§ JV<eñÀp%ì.($Ot á„I”•fÊôNÊ MKc’¿ý …zKŒôçÛvLJrÓ#l± Sx\§Æ¦½Íp²·J—Ú×x ‡õ÷áuÂþžrãú&0hû¶ÁÅÅc<Ð92’—zò_Ç ?¯rø†ÑÕö[˜SBŠü».\×5á±+d!JÛs ªva£?»ì°hu°d8Í\Zæw·šœBì^a¯ìÁó�2f0Gëá-¶Ãd¹D:YhŸºÑÙ?Ñqñ<1úÉ¢[†ºTæTHõý‰ æt¸÷£…u£*îT)iÄ÷íç ¸öàÎÛ.âXë‹à+†mµ›,,yʀŠÚ]`>O´0ŒÖ_Àü(Ä èo¿Á1ïnY&™…»ýÎß «àE iý±›‡EÈ«+¼Äƒ½ä®±&Q4aíá_€½µ5õu8[ö²ÉØVðåe|»‡*t¬{c_œº¢æoaêÇA»Ç< Ìræßœ‡ó4}ÓȪâAgÍÞ̇¤c~ŸèCÏÓ Œã W‡ôƒ¨W.†Ä5· m5‡‰Ïƒ±„úOæ ý/R}?E"ƒ9“î}ù*ÏO=€É@V]ºËhíYÜŠgÙV»I”§l5”W AšÃ'qÂzžèÑ.´Z§ƒ/È}j 3"¥­¶½)5´?þÒëÈ¢XcëC<›”# Cyu™d£­‡ðV™ãdŽlø˜,°Mø­µ;µm° Ã×eG»ö šœßÁ狱 OY­¯¦ãÀX¦¦¼Ë®È¸‡Ùî£ó/øæ£?Ó OÛpŶ8.ÄOæÏ9¥#ã {¼A3¹…)»÷Y«<ÉJ®­úÜ,Ͳ­v“…%OÙ*°^ A¶Ã'ñÁ|žè¨1à¡•l3‘ÇIUþi´'RÆ7-((¯®,¶Î³üyûi ê<¿Ál5ëar-êCÀL§_ÅéQ d OyÞbõÕtËT6º,òãzæW9¼*Û9'Ò¯~lDëPÈ.m?¡:î|ÜìAõ– ©¾Ÿ"™Áì'%÷>[+_a¤¥›ö@g±-Ü¥™ž˜N²™‡9 Ìfõðʧ,h¼5£ŽÃpžh÷MÔûéo®Ö x“ÚkËÛÍ—*PÀJ<8 )-€Z÷l®éÀsM=øOL8,yv™hyu}ðzÙq¤†¦),¨ê$³[À`~»¦G=8‡†æf˜.}õ–š8³Sü §©¢m÷ä¶âÏŸxxó2tt¬0\Eâ2ȲúÌ/¶kg¡ÙZ‰K¡qÍm¶¨‡Wå;çXˆ‰ tK$ã {¤jð¦ú~Š´sJ°µòõY¿ÂNrw1ÌVúSZV¢Yv<e‰ÂX¥…ã°–':$|¹Âg(ãè¬ÚΆ‡Ùg…vgƒ?¹–ò—3{pW|ƒ0?ŽÑatTlÆ{†Ç˜¦àh©ÅŽœ Èzÿ}ähâ=AB¡Ìt¢êøÃ–wƒ³‘_r ‡ óQ¬þ¥qÇR§=< sÔÐhù·<óÒëa þ½î´½qº@d;çD æHWìb‚©9>1èüŸ ©¾Ÿ¢ ƒ9�++_Áù=>©}€ñ¥AŸô“ý¸A&Î]¦Aù'Î0—Õƒ)OÙj0^ õpU¡\p|‡ÝµÝ¢{8@™ÜZ—a¦OΡs<d²§HnœBÁ.œ’Þn…Ü•ÁóæÚÃ(­þöðz¡ÞVŇ‘ÖS8"*R2Yä©>ˆ3­õRï…JU ]/M#Gð*˜ÝSÄX¬…)ÎXêä uj‘OûKV1ÒÕØ]˜ƒõr8IÜ·aluˆCÜ¿ÃR]Øs.LÃùð&Œ:º«'Õ€Ø"SSðü×0¬IÛJÔt]Óaýqá)Z®ØÉzÑHÕàMõýEÌò®|Ã!“AC 6.zîŠó+ ¾Box'c¥eõP‚§l eh`&'j¼ +qÁ!cè®Ý†Üâ#¨!ÑÙªƒ(¢³KÐÀ„qOwf¡Ù˜ŒÞŽ<ÿAÊ­ÐöJ¼ VÔÁÝ5õX—æ“ùñ$ÎjÏ¢æØä¨TÈÖ4—µDC?Àº‹Åy æQòß Wú[è‡qËFi1*ç0ù¤Kì$‰6&eí‚!Þƒ~KÕ€UÈÊßOmÅæâ±£´O2\h-u[)ZXiþ"bÒÛ8ô»S!Õ÷Sd6˜gñâæU܉+œBΕo„¸z~€®²jMª mxÂÚ¥PdYí& Sž²Õ`¼@ëá8J«BIž£Á{ÐVç^½×¯~opš!9àuõ Iw%T¾ê:´>‘ã ª‚î®%|#°µèQY¢!óR9jŒwàˆÛ@ðÚ¦GÁ–:1°€Á\„÷óÞ V[Í ¡4ÿ†÷ö…x ê$^crJ‚¹ÞÝ­ázCC¬v Mxã~ÎýUAUo£H÷>>«%f'æìFÍè.t:l%b0·œBÙ…«Ësšù*.”¢ â lcÒ&©¼©¾Ÿ"‹Á,xÝè»]ÓêwÉ$^Bnd<Ê—qå‰hÛÈL¥— AÆÕnr0ä)[¶ 40Ž£¸*”,-<(¹X©3ónõd‘~†F ÃÈ0‚7•­x Yèô\Á×Úïa˜&ónrŠO¡ÉžáìÂ$lz vên…ªÝh¯¯Ä?ÓךqêD[æ½Í¾iLΤ6/úÇÝu{–�ƒyëW(ÊhøV:l%2ÿã•HÏäY~ü-vlúf§ôçˆÞ0ƒy“ϺaÖs­®ÛˆÂò¯pù¬×ã2˜e\ùFBIÛÈùV»©ÀЧ, „—è<w•r„ …¡´pSy¢KáA!åí³¶ äÓƒ(ÜüÔ;Êaä÷5#¤¾?I{»AÝÒã"³6¹‡ƒÝhm¹ Ûh†$Á óšÇ>¼ï†5Õn4<˰,éHÅùúWè v2|V-rè!ÎÅ:þßf‚ôÙJâÅ×w¸T½;*®Êâd£÷>R}?E"ƒyƒ¦ýßœ8YwsÉË ÌLa*îƒG2­|#¡°mdùV»Éš§,‘+T /íèËt‚ýxa9‡ñ<ÑÊ‚¡ð Vµ3 ª"=zi¨=—Pb†›P8úcaUlšw8[ñ ˜î¨ÆÕ·àôÎcî™ {²7¡°¬¥r3Zô‚|wçEè;‡ÂÛ…·Wðdú°rZRqÒÌ^Ýøîkb'X_ÁGæàbÿT5=–À‰’º­ÄÖ™±7Ê`&ø¦á²ÝAýéƒÐÖÃÜíÀ™°3˜BiÛȲ­v“EIé¯hÆz8ŽâʶG€™@ …ùýea‡i( Ï¢ÁìùÚ¢óŒÜ•ŸÔ ”tlÅÓÏ8HM'Œ £ò]¬×ЀÃe:žáÐGj`vá?µçQw³Ÿ\3}mEÛí>ŒJýl¥!§0iÇmº`myל@îï3tµþˆÛ¶ì’²wf,Uƒ7Õ÷S¤3˜— Áä�ºÍôPÂ-9–¸B2dÜ*ж·‘å\í&ãéD°]ÑŒùp¥å‰Ž�Ó€d ¢ž­blñ/ Ô`Îyy9˜Î#é0PÒ±OËOGm‡í_ `Ñ¡â@Ë‘ShÉ`_xІmoC•ó!¶çå£ÔÜó'd¡OÆ.CŸ´é9£¥âL„éT~ð9,ÎsOaÚ“ƒ¬ÂOp²ô@ü¹œeƒ±3c±ã,¹–*2Ì!3p¶\‰3K†œ[EQ^ÃmmSDÖ å­vÙ>H'†íŠḟã(©l»" �-Àëþ•ƒv¾èùN­éW²X³A—³ÅUò ¿ñ¤Ë@IçVü䟺ÑÙ?Ñq‘¹F>3ƒ÷ÍŸ%CðnÏ9ÐðÉ?a¥è}ý0îÿv »L:æËå"Góï8‰ëKÈÂÇËnq3Œ‹ƒtÄ«!ÁLÎF2€×ýHqãsÃÚÖž€wXέ¢(-ë„¢W»AX:H¬T4S\8N�½¶ì�âí”I: ”4›ðy06æ‘øÙóa´ã+œñIÔAöNtŒÂ7Ñ-}OæË…gW°¿ö.þ¸ƒÚ‚·ƒ»*ÔIX#­Ãi~ɽ¿KƳ1>5á~ÀЙ±8XC3ÝæÙ •*…Ûó‘[jÆÐ@3ö’A]UtOâ:Õ ãVQ”–uB™«]†<e1a½¢ãá8J*ÛÎzÆ–Ú ã°ßn!‹ˆ›èqyÉëi vµ¡EŽ˜TEªâc®ØDB, áÆÁH〠«@Ê£Þi™/—œjë Ê¯ÅƒÑi8;Œd.ûdNïãÞ‡¶¸ûA¤´rÆúþÁÄòJ½¾L#‘ÁüvC1¶ú;àk 4TáœuÊÿ{‡ñSìñ­ydÛ*Š€Ò²NH»ÚM ò”1^ÑŒõpö½¶aÐíö0ÈØ£»ŒÖžL²b�2uÐn •»Qm‚Wxg¦ÈÎ*BÙɃÄèxH–™œeàéïÇóðu¡ðúúâÝ"FcÅ&ŸVn;*Œ?„ÈoF‹¥Ž1iÏ)¥o¾ôÁ3&AVÿ½×¢æ*=óÓŒ«5;±I}×–ôø=.UlM ÐÏ;íOÝ!…[hëDCÙ>h-½°»¦™˜?YC3yFÛñù™{ƒÓ8q¢Ó¾Qô$@.ËVQ”¶Í-éj7 (*%Õ,ÛÍXÇQTžèH» d_}n&Œf†ÚQã]Óè/o/Œ·£rã&hhˆ “åíå†(' >ù“C²Åœ=†âmýa‚» ‡7àð­çQÆköŠM$Ý ëA[ø|$Gh›ÒæKѽ _ e¦U9ñz˜ãñXoDQm;#ãÞš2˜gá¼q4ò–õÆÏÐ9ÍæA¹Ø(-ëEªÕnP\J*211ZÑLá8 )Û.Œ´¢tÓè,6¸<Í Þ<1dg§†•ƒv4ëÁ~-:þüíµEÁXÜ9x-8räf櫵) j DNá®°L1´„™?«Ì‘ða´S• ›Hù¼Q²°Ú¦ ùR„ãÔö„îÊNëóâtP’þxý";Ãr`ÀRuFÛsò³‹g,aŽ"™ ý$ÓHd0Ïá…ù üÛ«Ë[-æ–Ûxèô°1É$ˆ²s,*%¥¤b;|„ùp õY¿ÂNÿâC 3‹¦â†Cž Õ‡8õÀYç=\¤žÓF+&˜z†åfáéŠî.Àç•°_¥ã¼Q’0Ú¦$„‰.2Ö¿âc§¡Õ~ªCÛ£R![ÓG\÷0Jˆ5Æ›êÑéÃxç0âtYCó<FÛÎâp}Ø ™ÌéÝH= Y Y'XG))©Xa|{QIhç÷ø¤öÆ—ŒO"ïd?nTmÇ.&de-n˜èÇó cAo<'Q<°ž«òïICzÎ%ã¡mÉ cêYÁ3€{ ZT”h Ö”£¦þ>ãž;Ésûê9†Fiø+YÌuÖ£ÉAûà²Á¼ð¬ÛT¹(çæt#&åÓ»R(”cQ(鄽"ÂGØÝ^TÖZ %ظXh¥8/Pò¿à+ô†§ó’7¬Px×PšûVÄyR•¦„Êd‡’˜S)mç†ÈéîÆjµòWúK Ú9[ éÏî ®¶%êÝ(Î{jm3:>„ùä ˜i±9ªÓõ”™Túœdé æ”Oïfr@IåePJ:a¯¤ðQÜÚ¸z~€®²jMª mxBwX€Ç +zP«¹eß yiŽ¤í ´êâ`æˆvØ'“1´q*ÉxÞˆö]V*ýE„ð/îÀxÇ|YwÎÒ‡Nž(khGÇ #ªŠr‘W¬FIÅn kpš‰1šöÑL#‘ÁœŽÓ»™P’@q§h)s˜t0š+¥yÊ”>Â$Ï’²в V&ôhǹó÷1*ºGdÞÓÖ¸ªá¦Ã©$ãy#†*ý‰ a}wPZCYP›]Áˆ|;géˆC'}ièWtÙx>é!sUpwÔ¡(ÿ†wr[î÷f¶_Ä íã™F"ƒ9‰žÞMÇ€’n”tŠ–õtXa(ÉSÆ 4¤?@›nÈXÉDܰw[¬˜ {ž¶áŠMÊ2J P¥¯s|–ü /ž¶´ÀFȈ¤É©äFWÛo2,®ªôGŸ¡Ét›õ(/ÜHæJ² Cwù<´×ã3˜åÛ9KG:¹þÑ>Ün2âëªCØ‘—‹Â2-ŒMÍ0:£c&ƒò'Ç2˜Ó‘”=Ê›‹"Òa‰P’§Œñðš»|1-ÐËÉeõœØÿ «Ý-Y(SDøÚ5Š fuVÈ}±©x¨Ò bœóµXÆ‹N¥`¨ÒßÂà5ìÊ¢sO.ŠO^ÄÍEÏ<3'§þüѪÐû!ÏÎYzãÐiß<*K?¶»0h>Äî²ØQ¼eU_㊕°9ÚW2D3QxÊIÙÓ1 ¼¹0Ÿ+"¬xÊVñðÁó+ô…ÙÈÕ|KÐë=7€‡ ‚““¼; ü�íZÅ…–-®Š¼Ðjv¡¢ñWŒñA::G.Vj[ÔU3®i÷ckÅÅq Úl±·ÀÍkƼŒGÁŸY%j¥¿GpJÚæƒÇeÃíú”hŽAo¦Õɘ”ÁLK_ƒNû-n:hzQòÚzG‚³tÇ¡GÎ’á×Ñèž>g#50½¾L#ÁœrRöô (Å7 /ƒ#ûé° ëá#38¥nÄ�Y˜ðà‰a1–×#·¢OœOÑ­/ÅA™v”€vÜëŸâ> $>x½R/=< »æì—°——ÆCÀë¡!üÞÙijʽ:ôz¢9Ô‹Ùíj˜Q4ê{…ß _£…f6`z-*ýÉoϺÍÐW@ÉÑC¨j‰/$#ví-b÷lE^n9ÌCv˜÷¾ƒuª0<Édï_{u/âa ÌÑ’²'B²Š´ø¬z”Rïbð5;0žKѰ>2o»€’Å”wtRr6A³~Öåžz n3Jäòæ*ò�-ÁGä´ÞDÝÉÈIà0,ød(/ ~¬kÅ¢Ja´:X-ò³´<ÅÜ?6¢u(TW¤ ü„êÍ1¶Ñç1n9Šõëþ2Ë_ÁßñÃAž£  nI تB»Âç„´ÔLP:‰-Œçí¼·µƒY$\Á'çý‘ñ×qû ‰¦3Å<&muøÿl܇ºn1ŸÉü4ØÖ–»Tk”5d0RNs’쀒!¼ý¸V)ÞŠ4Õ¨4õ²WÚ—åtXq#‡§,È@ÈhøÈrÈAAG廤Ÿæà@«+hŒ’Å(Yè}"ëNƒRÐ’Is¬®iQšŸMôørÕŸãÒU Lx˜Y*/-†y#¶~{ïpÈü1äP…¬­u±ÏåxíhÐäCm´²‰ å(¬øW´:\Ë`Ž&i)×LPi§Üèøüë ÎÆÐqâ tLÏb¢ç\†³dÐ“Õø úœÞyÌ=3aOö&–U T£gƹ˜nhÍ4ÌéHs’€’ü)crË`hÙò íí^lño…´à¶=´–;£Ìö¡õ.Ë[ÉaÈâ)S8¯A»ítÁb8€òܬß ÑðMÃekFUþž@:'NL„ñûdNÓvm†FÛŒîgÁ‰o>ú¤¿ˆ+å…]¸®5â~¯Vër³=•÷)“ùíú?a¸ÿ‹HWVûŸ˜ˆÇñâíæET•î‡úÃECÙˆÇx ÆÃLäH¹f‚òIG8Å‚ó:FLñ÷ª:_ÿ*Ðl)ÇãyÐA²^CçÌ¿á2—Þ¹(T·™F"ƒ9iNRPÒï9ÚÏpoT<€ÌÛ.âXë‹à+† NïÅräÓ“¿¢‡—Õ­d–<eJ‡†Œ4ó³’fÑ—èpSãØ WÏÍन =xUeŸÁx»nï,<-ÐÇ›n*£°T^øoLMFzF§amíRf©ãŒ!À75Ï Ãzó2t4œËp–D‹qÑÌ74L¨êʵ×ð aƒ95’Å;M1KN‰BCÒN!¼0cOAp‘ºÔ®ÃòðÏ gÉ Êã¨íp` ý ,¦±ó åÈ)´Ž$°è¡c݃ïa ýQglEÏ’ƒ€=¨mi$2˜IçI9ÍIš”t1ú�MÁ7ýËYÊ7ê�ÖoCU½ø²Ù|ƒ<‘LÁ”§l@ÓË…¦•㤄àyŒÆÒw¡ÊÊÂÛÌ,<©ÑÑq_Œ)]²xTÆz(󇮄-zÕf")'Áӣ梟lä—áÂ|«?F©±/ k^wnO¡´¬k¾Ž3$#‰ÖLH–h!<aMŠÐ´„SÅk×]XωHÈr_Ú€üS÷1:û':.ž‡–,¢â–'RØ©êCT·?gÒh¦òe‰ æô¤9I"n3Ôáײ¢±“oÔ_¦s§ ®²0²•¼–<e«Áx†ÑnXúVYÍÛai—É„íBËà ñ}f5§ºàŘýg˜t‡QèÏÓú.Ô§ëaé¾…Ö‡cÁ?’†Œå¶(ª2†Ò0£¥sÜaÎ2ÃiÚ •ªºÞ1b,VT›‚½®&g´Tfó½ku6ús"Ì´C³. Ì‚WÇTŒ4„—¾ùÝ팇†¤-œÂïñoƒQGô¨­ƒ©ÃŽ1©æ[ê ó$iÜú0ÒZŽMj,6Wðl =¿ÑÓá½ÔAïO¦‘È`NGš“d” ᾉššzñõ\; ÍÖJ\ kn³±‘oÔ7‚níqè»ÃM¶ÂÀÄVr8,yÊVƒñ î”ÃY:ùEig+Ô(•ËCuñÉ^NuÁÝŽÚâ\¨Öm@^ùUؘ;4ËŽÑa¦–J/#`ž<×,ÝWù¡q§`ÝŽE§Æâü6JþkÖý^hûoÇ`‰s$ŸcŠ4„i §Éþ³ŽžßÚ½Åy‘½Ç„gK)>3Á<&íí~™[z’Í’AûßÑçZ昃¦ý<ÓHd0V-·OÙÏd” ñzƒ…O3Äx?Ædu²À!†°AÔßXafÈS¶*ÄH©®A½è�(1RJË ma`Á×nˆŒýÀÝŠêp/$ÍBQªE‹œ9Õ£²XÔà Êö”£¦þl¿ ã<Ì,å>žÃx·õ]p†.ÒÝv˜ ·xH†¯mzl©óò ÌoEx?ï`^÷hc1˜—ê4ãjÍNlRŸÅµ¥gé{\ªØšÀ=9S.üh´`HÔW†1`ù ›¥NC8jAÍáú°ð…Äv½sîÛ(¬½ƒÁÅìI’ä—OG– ÚªPÛšd“ŽQUP*½ƒ2è<–i$3˜Ðœ…·Øe?“P2„û6Œ­Ž›¶ßa©.@‹ÕÉ„a´žøæG!&iëé†íe&r$ Cž²U‰n¤ìÓý*¿œÌûª:Ér.f:Ï`Ÿ\sÔÅg%tŒœX‚ž]è É íÑø ÿƒŽ_—Á_Ê CF-è³ííã<i<†94•Ù|­ýžjÓ°éŠS| MvšÖ,¡‡ôB²#„2Ó‰ªœxçH9S ¥!Lî—?“Öº=+vX2_Á4MY2üé 7 ÎQï8=‹°dáó`¦LÐû“i$2˜éj¥”¬rC+ò%S¥/™%CD{ ²vÁÀÚ$ï'ph2<ΖåB+Ê©¹@Ãï­ÕÒ)‘ }uµ¢$>«%²y˜-¨3ÛCtGšë1Z«\|ÆðÖç^|&ý8´†ŒrçFZÏà”¹[¼H§ÍA½—œeÒQ0Ä ‡ñj{B³Ý3\¬Ï‹ÓP’Ó1) á¿a—þ ²ûGT”éa ±WLÊ‘_P‰Æxw½æhعèf£xà0@QNJ3êaN_– ÁëDO“•%hÊ>ƒ¡õ1&˜<ó´¦ fúÐEˆ‡¡+ßw*` KͦÜmÐî 7t°Ú14áe`ÒŒ€â ­0ä)[•hFÊä³`Ü[Pþ± Ψ“.hËQ^)L*¢¡ª"ö›Ò1‘f†Œz¶©Ãa™XÊÄ1b‘0T…‰.Ô¼âc§¡Õ~ªCÛ£R![ÓGÜ@.ÇT´4„2à} ×+ñ$#xl¨Û‘‡½æ!Ä™¦�¾‰Ç¸¡ÿç-Ï0ç7˜?ÃaýÏpgØèL=KF¤ô‚ÆúþAS-Ñg%ÓHd0SOÃ)iu†xÈÊ×ö Šˆ±¦³1˜Öl5|Ó˜ôü¿!'` h´ü›½ê~A”Wh…%OÙj#E×€‰O0:‹Ö „» a+YY\¼zdPwßBeîN2å-pÿñ~ˆîH뾆S§Úð‚5oFZ&ÒLBþËý+nõd\:C£E¦œåÑžav²±ENOÁÁ3€{ ZT”h ÖÐûûŒ;œœ†‹zШû u7ûáèk+Ún÷a”q@}€sªÐø$Î…CxøV2¹x<ý¸YGdbŸ$œé„öÇsÐþ¾;Ô‰†²}ÐZzawMG˜O䃎-™F"ƒ™à„¹4ù%'qV{5Çv$±òeˆ¥°*dåïǧ‡¶bsñÇØQZŸá\•I¢´B+LyÊV#Røé"ƒ ø¨´#²Ë;wëad« Pfø]O‚™R£«õÊò6`ý.œrY{c˜g1ØPšá­ËôðDšQh‘šËÐd«°.k J>=ˆÂÍA½£FÉåcü0,S¤¯`Hj)ád4”‚1煮±=/¥æ~ ˜?!sìÛ(2ôI›†,:ìÏÃu>‡—}ýW—1·–[f©g:‰±ã±Ô6¢¨¶=ãÞòx¡2eé fŠo¶½?Æ¿ò5ÞƒEã2üyUäAÖ=ôÇôb@˜³qÔ4Èæ$/ÌÇ,´Â,yÊV#’‡ùül<ˆïè`c¡‹ ¡ûÜÇGaM•íþÊ2ÉÃÜÛcéf¼£³³!Ò1‘f*·,¨Šôè¥)ï|VhKÌpÏ=FÝÑb„ådÆÃ2OâCm(ùóv«¡›4þ÷“ÂJ3RøúaÜÿ-ìRîë(WŸKÅyÅ{`°ÏE?Ç­ÃØ|¸ îhj-õl:2~pý";CB"i€¥ê0Œ¶çäg'=ÎXÂj%Èí›™FZƒ9#ÌâÅÍ«¸3*í´~6`0Ácý*J@œè°ä)[([Ϫ¾1@Ì)Fð'Ñ¿Cu4jµÿÇSWÛµ"Š'F•w73«Ò1‘f…Ì,ì0 ž‘EƒÙó ´Eç%Žýgü0ìšCé†Y t|…3þ,45Ú8Ñ1 ßD·ô}—ŒIšœBì&ã¤ZÔöàˆy� ñ<ç²¥žMG¦“xúûñ|Å®£ަztúã ç0ÞyŒØ;tÎÈ4ÌÑ”Jb^ÁëFßízœV¿ ÕºÒ$¾e¯…®`g`’$ø¬Zä¼ÿ>rO¤ú«�|³ð²'JaÊS¶.\×›Ñ/š`^bl1÷¦Ü°^éÏýô¦¾ÝÑö*X]Š1Ò1‘fzH«[  5úÜ伋¼œ 2Ä 3~vÍ¡pCia7F:˜®Âƪ¤gKÈDzž¦"[êYi2òL碜{˜Ó Yµ¶œ€úä!^™ð⥉Ê&Ÿuì–¥]·…å_áòY] uò“…HèÆw_ëa²¾‚ϦCNÎNT5=Îp5¤ôÂlZ9¦<e«Aú‚o^VÃGX¯ôGC…|3Ê8@m"eiáé{žïtК~Å„<G9›Q\õì’ï$0~vÍ¡pCIp¼g;*Œ?ˆÂZ,à”¼ïÒL!× Ó~‹›º£I^[ïà¶-´Ç*D‹a–$õ¬™N|nX»žÊfú Õmèëÿú¯ÿ þeúÎ`6 &À÷Ì„¶ —&ø.1³4íGQŠŠ¦'ën.$Â̦XôF±„âÒʱä)[ ÆÃGâ:|"c¥?¥ �»ùÌå„õð,‘Ž<ÌJÂ8l†Øøÿ½ˆnY” ÓìjC‹ Y2‹‚·ˆÍ²y¹å0ÙaÞû™+wÀð$νYSÏ ðM:ðÀT¶Ïÿ¤ÆÖ­[#ÌeëpìØ±à_¤‰ æyL<zÇL*§w ¾i¸lwPú 4‡õ0w;0FŒ<n0¯ŽòÒʘñ”­ëá#Ä`f¹ÒŸ¢Ð*ná)' 8 Ë Ô©”zfe3†ŽÊݨ¶ »à5ž™ ;«e'É|/qϼ݀÷¶6`P07pŸœ{D-dlr\Æ~Ããø"ÓÔ³3òÜ7aô>Nåo ý'yÅ»¡Þ]ˆœõ¢ºýyB‹úÔ2®džýë_+ŸÒGð/Ò‹D3Q|ʧwC¡«§t›iÆ8Zr-’‡d( Å¥•S¬‡ƒ™åJJ:@«È…§l(ä0,ƒ9My˜ G5ÄH%3üx;*7n‚†îÚC0i¾–vÜèøüëàB…ò'¾@Çô,&zÎ)àP?­øX ™{:—¼ÊÔfêCê¸+ý¥×fËá^æLy—)Ìé8½aΖ+’gɈ ß8ܯ‰Õ£IÔ;ÿŠ™VŽWàJÆÃGX¯ô§¤´|á™�Œ†eŠôåaN  —Ð<Ìûµèøów´×ã®çàu¶àÈ‘›’†ð,8¯ã`î["C,ÐÞCUç«à_±ÊkØ ;–8KÌÁe:<ü9™ÉXù´3h³¥™p/s¦¼Ë‰ æNïÒøÆÆSr’sÓpõ?¬n|´ý Ûà„<«½UOÑÒ|£F—+.4œ¸âXy®¤‰>rÖQL¬WúóËá�mc/¾V LÃùð&£ݸÛbÅL˜ÚäY “ûê[Å‘‘pŒî›Dây˜S‡zºåªðrDõ!N=pcÖyi8@£ 3öTÀ²‹d6_‡åáŸLyW#CôhûÛvêpw©ðW/zÚ/£bK ??"¯»a>u&†·9W¤cÑËœIï2E"ƒ9ùÓ»þàû·v ¦¾gË>Böº (øò2¾ÝC· ¨‘÷4rl¸DeÅE4‹¨ÐÖ­ú}ùR…#[õ7ŸçJ›à”Ýèc¼Ò_˜<HÇüE–ÊQÏc¼ã$6®%¬½11ºqà‡ãÁ÷0#QglEϳ$B)}FŒXê¥–É od‘åyÅÀ.Ä,Ü]waõ§Ñ‹Ìê‹Ð4dÚHŠ9¼0Àúˆ÷.´½m O£$Y&ãJºXô2gÒ»L‘,†9¹Ó»óm=„·Ê,'ïløëÔ&üÖZ‰Ú6؇ávÙÑ®=ƒ&©·¢ÌßãRÅþCAªÜ2\s0²“-‰z²øà{ÜÆÁä’o^w?Y!÷3äÕóÀq­ ¹ªHƒÒäW^“ÿ„2Ë•þtŽýŠ.´ÔhqU4&‘Å»f*•v1LÃîú—¾_)‹èw·ßŒÝÕˆô¨<¨•ògƒYaÞ2‚0‚ŽÊw—u±Å^„¦%ÓF²Lwá¼þ†E÷0¼­%AÆ…!¡Áœ äá%«Ý@’oºÂÉóÌV³~é€] Ítêñ•Ô[‘B2h<µåsä«TÈVƒn9pdK¢ž$ÂlúídѱgÈ„êmxÁÇ‘4Le7ôñúËC™¡)Ä í-Ô[‚Ûz·í˜”{”a´ÒŸ’Ò±@1z9ê½R ¡±ü;i¦àk?t¼þ ï”ßb£”83ø0ÒZŽMj,6W°hϼc}0>çA­t|F°pÉßá^ê°3Zá-Ð…ñ®‚ ñîk‚;²iÉ´‘4q„C­ 3lÔC[÷tŽ éÛÚƒsñ› ãs ÓøSb æ·kºáqÔãÀshhn†éÒçÄ(©Aç´Ì(ß_è­ÛçɯjÅ3ÖRŸÉšD=ÆÑyê(£xŸ\D5–sÃüdϺÿ‰]YÈçJVâípþ^˜Ç…Òúc71|ɉ‚’Ò1@1r9j‡¥ùR—£†Ñz„j¡EJ„I².†Š§• ƒÎod¼ 7FBj­F:>ƒ°Š—šµ o™ÀGÀ;þ»>2'Um‹ÿºicÏvC¥ÊAáö|ä–š14ÐŒ½Ù*¨Š.â K¹å$„yƒ¾A˜ŸGÇè0:*6ã=º2¦àh©ÅŽœ È¢“•Æ ™Šúú<ý0W~@:WÊMŒVú“5‰zP¯mISðÀÁ7�“f#¼óQÝ9”Ùs‰Ž‘ªiXÑ¿ÉÐj12¸°¹ÏLWøŒü[ ¿I|¸ŽèÊiFiî(©¢U^OãXq.1ÄÞ¦Á¹Ž˜² ÍJP…ÚÎÐøÖ9L:~DUAiœY Òñqx©å¬ð&Ñ!Qaä&ŽiÅ‹8mÁc…¾( ïèlqy‡•Ÿi£[ý‹†×h¨Â9ë”ÿ÷ã§0ØßÌcºìÌÁóæÚÃ(­ŽP´bÞ¦oº O.<ÛQ[D ¹ì=Ðw¿¯…q¸†c•ú–“¨'5˜ƒ99É‹àá!²Ü€{q {ýÚO¾—¿0ˆ¿ô Q÷ênö“‰„¾¶¢M† UÊD®Ã1k®k¸¿t:>ÐlOGe*8@ž…ÑßТ?P-Œ·l:äÆkGƒfs°"înçeãj ´1¯¾RþŒ4y©“‚¥C¢^8ÍåÈÍߪ³ZhkŽ 8‡¿Ù%hˆó\RÔL]¿cLó‚0ÚŽÏÏÜ ÄhOwàĉLûFÑÃ`– ©P„Á ]¥CÓÅ&lÆ@ œì}¨ëþ#d 4ØúÍÐ_g$KÅÃÚÆh:¬p¦ÈÀ½å è¶\@IÎz¬[¿'¢áƒÇõ+ÌUÛ°mŶ™ Ðü¡ÛÞ†*çClÏËG©¹æO½îmú¸'md=³æøS“‘˜NÃÚÚ%Cx=¤û+nõkºDoº¼Nô4éPY¢ñŸ10´>ö.M„Ô>#^ê$aîè,Fmס¯,%‹½(«1â¶A/dá!ÓFæ³ÿãÐçvá/ôõÅ66 磑²oüLþX™PÁ8�¸âæùo ôiN·§4jò Eo» ó a%­óé°VB+ 5,ÆÒemGm¡0çzˆ–ÅÁ“…ÃtóaxOðÊÌ9ÐðÉ?a}M„òõøÿ[ØåV/-ZÓõ*l ôâiK lTN™‘÷pÌZDZ^#Êò©g1lœTKº’W7k J>=ˆÂÍA½£Æ'oîIûÄ0kµànÚ sÅñܧÃÓ ,õ Àþ<ÜË.FxiG_ع ²eÿ!¶RË ¨OÒ0(ê ¶³ÇP¼í¢?MœànÃáÍ8|ëy”禦;„ÿ¡ëÅ… i-·ñÐéycŸ]eÌJ+:k…é3ûé°¢AÓË…¦•cF;¾Âÿ¡¯Lw|£ðMt3S;rÑFª)úpLß,¼,l³úoQTe\‘ò²¥sPÚÝê1Ü™U‘½sDGÁ’ñsQwôB©ØB{ˆ‹e kÅsZ³;¾§ PRš,PV|Fh[ý¹O‡§;aX:$꾎rõ œ 58ÃÚÙŠ]ضXÝ5òeÿ¡ÎŃÁO¸#ï$̃³qÌß0ºÚ~“´` ë(È`f¥thÑnXúV‰Ožÿßh½5|!/ì§Ã Çv‹}ïâ ú,Ýòg¡Xƒ‘< *l¬z�Ùs¸DE™¦¥A»¦ åÈ/¨D£mñ�¥|(ûpL�fЬøÔ!i70ï›—ö^Ósïd-—è]4˜=¿°±d zÈj+ÖU¡>ÌÀ2·tÅY’š†S”¢@T ×´û±Uô»´E}îå }Ø9$ê6C“SˆÝ+ ΰvÄŒÁh¾œhÙ¬çñÿ¯LÚó˜xôOÓ°À¼Ã°Þ¼ ]$šÐa•nŒK©�O:ÂRV¢ ƒ9ˆH‰f4_8†=’– ânAiñ±UV j”²’Á|:¬p\0—ªQA\„éu©Ñ-¦ÒY3¤øœ0ïÙŽ ãÁ )ÐZ,àd!ÜÅû®Wâ¡FðØP·#{É¢Inß½¢ÊÐ2_deãÝzÔwÁ):Sa‡ÙpKâg…;(Æ–E/5˜sÞE^Î^‚ÔØ=€‹‹‹Pæ}ˆÏ¹åÀÞL'ªÞ©€%VøÀÔ;)gè##‡D#ÕYH†Ù2¿¸&‹ž»mx86%¸è¡!‘FM ¢²Ê¿xØŽ¼¬ì1=êUOé(À“rXÊJ”e0§¬Ä4u›;´e±S›DL§Ã 'Zz¬°&y\f$¨nà;c®Γ“õ•DâÑ8w  LÄ’ÎÂ}¯Ææ+þ…°Öpë°LYbÃ|‘•àTfžZüà;´¦_1á³A—³ÅU²½ñ1dü_м€ngèBçÌßáz\!4%Ü)iu†Ì‡óðؾAYÌélñdl¢††œ¡ Mõ¼œ1Ì)/zó0oCmû@0½ Q‰w�-4l&®"8É’ž">i K CQ1Ì©+1ƒyŸ¿ J4èa…3ØÇŒÁ¬4ˆÁ¼ï :gbteê9ÙÇ‚ÁìÃèƒZäÓÅYy(&åî¬g¥!…å )ÂK<8õ!™XTÈÊÛN´](ÌÉF~õ¸37™(ÌY¡ãäœ2w‹ÒÊù›cŒü«”¸q§iåA±…§m¸Âd±$9 (‘ŒœÕb˜ž½ Ü[Z· 4ù%'qV{5Çv ‡VžÕ4Â× TÎÐG†‰¦á¼¬1Ì-ZÔ\mùÞÅМx=3°é>Àº¦åZ~¤H/˜ŽÔ†é K EA³œù!#@ æ’UbqÂÜ`NŽ8Š’,ÆD_ÊÆB?Œ[6¢Hûsˆ:‡É'8pø¦ü•ϲà0b‹j;´Ï—½Ê¾q<i¨ÀáÖai'ÊÕ G:ÿŠYdE^ƒÐ»Mí»¯òÈm—HÅC2" Œ´áÄ©f<-tzÑÓÕ‡—QŽ ˜îü ×…eÑsè­Eï?°§Ö”£Æx'PÚ8i|íÔã@¦C:$š–Cò²-®¼Â_áBR=îÕ¡×£„f,jÄÎ÷Î2>Q¼ý0U|„œ·Ê2ì LGjÃô„¥„£ ƒYÆü‘· ücSŒ‡˜Ê[ŽrË_Á× €)îWŒxDñ,åå1ï+Ô>.·`<øZ6ü™ ö­<h% Á¤ù:`ô ¯19%q Âz†Z¹ž "·ËMpQ*ÌLaŠos\¡Xr„,©.´TTâ‚)ÄÓeÒ£,+*Å·“-"åÐöÀz®ŠŒƒÑâi‰aÐzÌCÑ7¢ƒN ðNM3îÄÒ!Ñ´’¸¸–"§î/ÃüÇpHh.ÇO¨Éß’€sqOZ¡¯ý–AbbRƒùøqè Çwý©rjÃt„¥¬Da1Ì2凌„ð¶~€J‹+Bç¡1­·P™»F#e+V=Ä@V”Ä€:ÎŒG|ƒ jäVÞŠ¼-ïsÁR¹[Œýd ê# vên…”ïF{}%¶h ø™¾~ÔŒS'Údñ6³ž!Å_rvÛ^èî>\ö¬õÜA}E14†»þ×Ì_à Þf÷MÔÔÔ‡lu’ví,4[+q)tëµÍ&“AHŒÔêš°L Ж–AÛ"µL3v…m9 Sx\§Æ¦½Íp2ļŽk(˜-fTù'`Š×/ŒXpbOEôè!E‚ÞÆ¶†§ò›+`èh:ÉG]\gú }4cQ…¬­uqëQ²¥ˆÈ¬ñŸZjÃt„¥¬DY3A–ü™ƒ»õ0²U(3üˆ®'ƒ•Üàctµ^@YÞ¬ßebgRpÿˆJQj¡ðF&Uõû R$÷Ú}²ßF^Ù´v=Æ ¥<ˆ']?ÂPV�Õú}0IN0þ,# PaMµ Ïd—ñ )þ,ë#è+¬©¶5à™ÜÏÓëa þ¶“@ C{Ý1h{å)Ð/ƃ¡Á±°{J×°O÷k†Ó‚Åð玠²±—ÇAcF ‘[öMØ}…ŒËÅÁ <í°OF2`àuu¡Q[éÏ,±òmÁƒN¿ îðqÔõ†2Z >ïlæ×Ì¥N¯É˖Γ‹×ÿ Ãý_–´Ù0÷¹•ZQËÄ’ŽÔ†éKY‰â 敤»R¡ûÜÇȎБT,ø¢D5˜¿Ç¥Šü‡MT¹e¸g|iða´[‡ôH˜~eËŽGxúΡ¥í¯ÈíÕÒiciIÃàŸQ^¡óü·èޤ³6æ‘ÿ~»oÃØê“íwXª ÅD>s~¬kÅ"ùœø½µ›³´<÷1³Ðg´çÎß«hG iýh•c~±ZhHº`(KFªÈ–Γô¥©)Ä:/¿:±<´ñæôN–ÆzÜáä3Ò–"FQs:*!¥öë0T—ACVòÔë}ÁÔ…AS‰ˆ’!ÌÀiùùôµút³dà/AP+Z Ÿ¡Œ–"×”¡úÂ÷èœfh¥“]þ“ ðu7û‰J_[Ñv»£²Èeɨƒ©ÃŽ1Vd£iå:ë‰\ß⦃ž†'¯­wpÛz^¢m³f킉ÌÑb˜7 _û˜=6 ZpýíƒhæH¢Ð‚¸ØD¢)“ Iµ_J­tž±ÈŒ‡6>¨±žjjÃhFw"a)+QÁœŽJH™`“ÏâV£Á/–xE™ðý…Þº}ȦiU+ž±fàCI•þ¹oU9b{^>JÍý0Btû6Š }ÒV¨ŠÄR– 2`¨rP¸›ÆÿoDöžÍÉ?lâ*ßBNáVäå–Ã<d‡yï;DÖ0<aÌÄs·#äNH¬:mv Mx™�]¸®kÀ¿DòuÂtꬸä0‡1¨‘z¡…åbÙÈ/9†C…ù(VŒRc¼!0©„†¤ÈZ+¥î€ýyø37‡—}ýa»,Búãh Ý©"mà'T“>˜Ù¬déHmHä–ò^N¾NÚ>SÁœŽJHi†" ‡KóïŠV1ÿÀí}örÈ<ý0W~�•ª�å&† —(¥ÒŸ?K†:òpΆOþHÅãë‡qÿ·°Ë¼Y<èSX{ƒžàPAwZªq„ƒtþ,[0(ÐTFWðɹGdy,À縌ý†Ç«,š$Æ7IÏÿËnNëˆ1ÌÔiÀG¥­ò§8ôãƒ×˼KAbÈŸr¡:Gî%ãz1t½4ç6MÅZ³{ öºÚ83IɲÖJ©»¯£\}"ì0æTï œ'žãÖál>Ü7Ïe(´?¦ßC›<‰¦6Œ–’Zh‘‚ f¢€”+!¥F,•ظî-äª?Ç%²êî¡+˜žv˜/}u.Yá×va‚©!0Ömĺì=Ðw¿ W‚0×p<Õ ¤ ÚÖrXc¢Òy˜;¾Âÿá‡Lw|£ðMt31ЇgÉX$4m›¬nt|þu06m '¾@Çô,&zÎ1‘ÅCã9­#{˜ÁÏÆƒØøŽ6D$†Ð¹Ò&8u(ÈC: -„›X4˜GÉKò ¾°ÐIXc¥ÔÝfhü%¥Ã@{pÄ<€É æY¼¸ywâZôDñÐÚÿÄ3ÎXd&´HAs •2Áß¿A÷^ª-C”N Ó + ;v@gceKy6c >,{êºÿYt[¿úë¬dÉ ³R*ý- áÆÁH%PUØXõ€L2C½Þ;·“ s*ø ¦(ÊÉA)æçuŒ8°½‡ªÎWÁ¿bÖsZG]hª pøÆ@À‘ ÒÏ®•EØ£mò+¯)÷@WÚIG¡¯mzl©ó‡p æ"¼Ÿ÷Tq–’9ØZ*¥¾j*Wi¼nôÝ®Çiõ»dŽŠ×VŠæ¡U ™ -RÖ¡¿ˆ•h{*ù&Z¬͈úµdðê9‹bò·§è¡¹«Ýå¶»0fÒÊ‘‰_)•þüiå¶Â凳ÅÒ Ç q£t÷7ô_â¼å1š¨Áüëf"lÈŸV® ÆÝ™Í×aéú¡ƒ‰XÏií÷0ëÍè-†_bl1GJü[ìy(34…ÜWÒ~ÐB½%x¿oÛ1©ØI9DÛ'-¡B ³p÷\Á×Úïa Û"äŸB“=ÞCf1ä56RR*ÌUà¤g«ºaÖFaÍ2µ‘Ø+_áòY »ñ™€Ìi¯þ«¨óù÷ „1n0ÓU·ÖÙÅ+ŽP )ÅR‡É˜(W1.ã(ŸÍ³V˜n°b0+¨ÒŸÿáìA›5,·)S[Ï´*æ˜ ç¡Õ]FkÏ�&™1FÉ$ßu—LðâAÌgÕ£Ô4ÀÖóÃxNk_ô­2H6f’ûÚ~çï¹Åz™ÿ çþG F‚/9b¨f ÐBâÄ’#ÓéÄܸÛbE¸WSÞRó) Œ £òݰ…FxËDÎY šöû³‰©rvâdÝÍ¥f*¦Æ$žð¤Ø _Æð–Ó9¹ -Oqß÷ì}/ÖZHFœ«ÝJ&Ë¼íŸØî=mÁøÛö ÔŒx˜1Ú Kß*ñÉóÿ­·†ƒ/äFA•þ˜ßzŽ$‘«úS½ý¸V)¤…4Õ¨4õ2t¨ŽÄ,ç´žÇxÇIlŒ¤ËЖ±1“É_ã@å÷pøg£pž¼¦ájµ78{ÀéKã%N+ׄûh‹N9Ó‰E;·"g©ùä¡]â  RUõMÃe»ƒúÓ¡9¬‡¹Ûá/Z¢ ƒ™.Ú>GÅ¥ï—uÞˆÕÙ¥1 æ@<ÿ[!!‘!c‘ÿÐûg8wö˜�ìÌK«Ýf\­Ù‰M곸¶¤8Ztck¹ùÒȸå[«P¿$ ]…WB¿x°ÂçDkùÇÐZY»[PZ|,zùTÒÎV¨QÊ+ý%ã[ÏÂH+J7íÎbƒ+¸5/xGðÄt’,4Ì!· †°t‘?h÷bKÅŸ[pÛVb™ššk×Ga“M#´š]a¿»¡1ó/XÊþuëÂ"2ÈÉd5é@‡±2°EÌÄa]– s] -,§•£ÞEzàl;ò²r°Çô4Îøu*‡\éÄ\h©ÑâêR 黿ÊTj>y|Ö¯°³á°qkUÛPn ÛuÉô¹@·YÊ’8Zr-q‡džÙ¦:bHYD&†ÁÜ|ùHÿ~ ¹¥×‚‹òHÐøýbTtŒ_S\¸nì\6 g{P“•Xõ]Æ æÐ||tÅp<º+zð+Gzsäí–<ÿÁª ëe” p÷QÔ…oÓËEÔºö¡-‹©ÒØôÁQF¥¿h[Ï6èÝ”=Otä›taV²døž£ýœ÷FÅ’ÌÛ.âXë‹à+N\иþ4E_ðµ “Ÿáò[䥧ӡٴÆÇã¤o…ÊY[Qa0’ ¸Ì"ˆ‘r¯àÁxÕ6Ô¶,U¼h9r ­#ñ<éé#Y¢—uß«À¢;ÂÈM9ÒŠ!]Ác…¾( ïèlØb!_N½ªWâÌ’Aþ|ô>NùÓläï†zw!rÖK1ïFɼC°TÕºw Öw­²;êÃHë)œê\ب“óí’¥”r~GÒzj³Åß³tèÏ ‡ñj{B=MÁdÖ ^tº¼“x² wva”Aޏ ó¾ªN²ìˆTÏ`S3E)•þºñŸZ-“•þç÷ø¤öÆ—d¡FL?nTmÇ.&2;Gw´gþƒýJ¬# £•G¡EJ„IØôÅPI–VŽô¯QnÖU£´d7>\4”pLR?§€yß<ýŽ%ˆ¡±Ð€+=>ÂÓÊ-2—éxœsd9$I'¹¬»ÃR‹|E–u÷Âi.Gnþ~TÑz5GPœóÖe— Á‘a;fiÔC[÷4ÃˆÏ k[;l£ñzS©½EÆŒ¢óè\ò*Óy£ ªâ\|¥ :ž<DÝ9Q}ˆªÖ§q…QÓqnïIÔ·w£÷Á÷¨Ýñ¬ÛxºKçQsös”n„*ÿ|BaF 2˜‰&ºP[ð>ІVûªmC-ë¬iŒáš—Áï¤ vk',MFè´Ð÷éä Çĸ2Ê Í²[ÑiùFÝ9èiP¿Ü f½Òan(ÁÆÅœ Åy!_¡7fú(iPT¥¿xðÃýJ®P!2¹8Í(Íý�%U´jÜi+Îõ{e4 vÉûb žö"ªJB{í7˜£BîÛÔ<ÿ•ZYë¹Fì|ï\ pÅÛSÅGÈy«,N#'r$K´æØjøMòƒýéa£¶ëÐW–B­Þ‹²#nû™dq§!…Ûó‘[jÆÐ@3öf«ˆ|O⺑´²òŽå"2K„.¾æ139a§Æ<<3*ó7@•w ¦„ì)Ò—ÝÝ0žÜé·³ ? d‹¦1xï tºkèq'6N+Ê`¦žÜkТ¢Dµ¦5õ÷1ÈLŽFÆl-0h«P¦.$7éì5±qènG|lŠQ^”V‰*G¹å¯àk6Æþï ZT•©Q˜³Ù{›á”[ÁŒWúó#ÌÀÕóttà¦^zCžÐò³  ¨J«æV¥[ÈF—uáIt7úZô'PBHš²Zo;ä]X ¯áî» cÕ!b4èPÃC2VzYkÊ&ž´B_û ,ƒÄĤóñJho ĽXJÉàÂu­÷{C<Û¤ÙžŽJ`¬KÈlZïf²÷Sc·[ýax¯1ÐP…sþü¯á0~ ƒ=ž¥1Tmß`ÛNî.Ý^ô´_FÅ–~~D^wÃ|êL½Íô�ñ—(ÊZlõ7è3n…WÖ¸c(Î`æ$‰ð¶~€J‹+Š®Än¡2w'Œùý¡ÊƒíJ}€¦®ðXú H%UúsÿˆJQz­ðÖ­ú}ÆÎH‰w[ûÈTÌtìú·ë¹Á,"e­£‘H9àLʱÒÆ*a½Ë‘OC’DóÌŸFÛñù™{Ì"Ó8q¢Ó¾QôÄ]ñq/̰^$w¤ö6¶5<M¿SÐ÷ ¶`EÕlÍEt?†u»‡Ñoú6FNéyŒÞüŸ=x¡?‘e„ý:ô ‰;[¹Áœ$¤·éÙò®9¬ÊŸ¡«õG†ã.çàn=ŒlUÊ ?¢ëÉ` ã >&r_@YÞ¬ße’ß[»ˆ0ûíb€ÜD‹ ôt¥« -ŒÄ‹`½Ò_ÔŸläVR¥¿è3ÍØó¿¨rËp-Ó1Š1¡qÿ¿â¦Q/ñévJ´muqûo1‹>½‰„Ç/ª‰”µNG9àtÈÁ¡øwÎÖoCU½¸ •Ù|ƒ«¤xM‰Y8oœætãg蜎s’ŸîÂyý ‹ Õ𖉢HÄV±œ&¤¨Úʶ …9c¤• ^ÍÞã“Hac´ãs”šª“À æd!«¶Ê>‡Å9aî)L{rUø N–€¶w"øGŒ!ü…îs“UÛÊI•í Æód–1tTî–g¦ÈÎ*BÙɃаvb:j¥¿Gp².DŒ¼Š2=LK²5Ãt¡ù•hL{ñĉZéïáŸòǧ‡)$ƒž>·|Ž|zž"ÂÖ¡´ÌÃóär ~Ö”|z…›?‚zGy”‰#Ý„¦«GMqÔÚÆåûJÓBlUdš°Ì"¤¡¬55vS-œ98ýá0)óðeÔéC½Ã‡PàOÉÒZnã¡Óç°�OÿÿÁÐßa÷›Ø}}lhšíiÁÕ æÝu¸uå\‰4öÑ´roo3D%�7˜“dÞö 4þ¡`¡€õt%̤êŠ%´^‡¡ºÌ¿‚Ó”}† ¦.†âÀƒÐÜÆšFz,a¼•7AC«¾ C0i¾fìÄ4 i‰Pé¼/áz%V˜à±¡nG#1ö³+ý)ß_è­ÛG¡_ÕŠgr?G4óÎ,¨Šôè¥1ê‹åãiባ?Ä8Ã.f0ì f2 y†— ¤¸ËQ`!ŠÌCžƒ”ÊZÓq(å€S•#½øÓâÉ5_+ߺµÇ¡ïîæ.¶V®g2$c£mgq¸ÞЉÐ–P…Obp¶œ€ú$=8¼\«A{öŠ·]ô/¦wo.Àá[Ïeéó¿Þ­‘h}:h0Ó|ïž4~‰s·©ó-øÏš¹·ÖlZ¹ÐœÌ¡ø0Ö÷o Jü½ðì ö×ÞÅŸwP[ðv°ÍsXÍD1ÅC3Oì×¢ãÏßÑ^[ônÌÁëlÁ‘#71œÂèœ;P…FI¼ŽkÁÓsåP© Pnb¤ÒŸ¿ˆNÖòéöEƒÙó‹ôñô ý0îÖ¢'4 ™¼×íÆzE¦ S‚ÏGL&¥ãƒÇiÅͺO©ØXè&ýgånnæc˜ƒÆâŠï%-î]ú‘S¸+B8ÄI˜g3n0û3ìX®Àj°/5šîðê!‹ý†Í G°ãÀy˜Ú»aí¹ úÄBT 2˜éŠç´?‘‹ 9Akµv¢¡l´–^Ø]™Nq½þ tÎP‹£ÓpvЄü_£‘UO£Ÿ9L>{ˆ[ÇÓ[ÑólB:½ÅMÈÖ²êCœzàÆ¬ó.Ò‡¥1låÌYß8¾ >’¥‰Z«<yµE±.{ôÝ/ÄÏ0×p&ccA=‚ÅØbxLžt5˜sÞE^ÎÊ Ïc¢û, rwàXÍYhÏVáPQŽl)î8ìC+Ú\ƒ¶tK õe®§/ÕCo¸§<3͉~â ˜…Ú+¤õtÃö2“a[ÔV:…² WCB2®âBYaU‘#‘ ¯ ÁŠ•Ñ[I ƒy£­‡ ÚüeÈ‚}£Ö+¨,$ã6}Ôøæè(Ë`޶jZjQTÛ¾J˜tBVÁc¯–**1•u(Âa€`‡ö¾„z‹b˜x^eàPAæ¡zeá%œ¢’TÈÊÛŽÀ‰läWßaðž`J"æ0a3rÙûP×ý‡x»•¶~3ôÝr]Z´à;´¦_1á³A—³ÅU?À.K¸YøÞGƒ¶2˜âî êï °›Î‘aª È8µ9-ÌݘôOJÍÛM毩)Ì„ î³êQJà ƒ¯ÓO¤ÝxòÒ"o›>Ù±N λmx8æ}M(¬#Yæ1n9†”~‡GÏF¢ØWsxe¹‚£ÌZ³Áv-=ax/&_Ž`2‰B<Ê2˜¯_DÃcgØ5�KÕamÏÉÏ´*g$«Ó®$|±Tb#­Á®þ—Ìíèñ¯vÛa¾ô9ԹĀªíâžÛ4Á’Á·à0b‹j;´Ï—½Ê¾q²xªÀaFÇX5˜·§hÅÉÛ”Ëmwa4²¥•sãNÓCL‡ÝÔ…§m¸b“=_ GbØ]xFc“ޫޢÊx}îø<ý0éR^Bo?®•FÊžDšêTšzáÎxõÄE|íÔã@åU<‰káÃA™ñßô iÙª)n…™)LIìðQÐÓDOmöãùŠþå…£©þCsï<ƒ–ÝÉÅß¿A÷^Q0ëDðwK•ð„†; ³ñ´Aé€,¬àOo´¢\.¹ë!Tå|bÁ’þfÖ Ó ¹ æhiÝT2„dPäLqÇQìs$LÁÞx9ª·‘õ¶J‘1Ìó6ÞÉ-ƒ¡9$Si?h÷b‹?ƒE nÛƒd™ƒ†u|–¯׈![ªm‰3¬#YS²gÅ)ïi ‰Å ¿ Ù碜{˜W@½Œ…1sŸ xÝsÅÆ~²&(–&*Ác…~Û^èî> ‰£»ƒúŠbh wý¯™¿À †¼ÍÌNô£Ý°ô­Ÿ<ÿ¿Ñzk8øBj\h©¨ÄSóòDgÒ£,_ŽTnr§¸ã(Ë`&‹«±~<0}rœ)Ý =zË}Ülµ‚Ñd­Ññ=Gû9îŠ ¿yÛEk}|Å*ÄÂ_á)Ͷ³ïB† ^ù0ÒzG,‘ŠŽ,Ã+ý­F¤-Õ‡¨n0š}nX»žJÇzõ´0|VJVÛ&v›QÂŒw^Ù[ËLÌ4Ïñúg&JSmkÀ3FVKT&q· ´øÎúOjGng+Ô(•-$#$­Û"þÌjl’ºŒ¼ì)î8Ì>G‘†ÑQ» 9*2åÃ5Û+F梦á|xF h´ü[Â0ŒTðÁýãe˜ÿWØsý~U› 2^ÀÆïäÑ”Ã`é…»ØV«ô—ô4ÑUG96©u°Ø\Á@pº"íƒéð© Ö3ãÕÓ™·ý;ýǢ" þ¶}53fÖ¶–ƒÊʯÐyþ[tGxBÚ˜‡™ Š-ý…õ¹m™/}›ÂKtž;‚ÊÆ>iÛ±”âî …öGeAz»`»]š²”ÕÔã¶ÍŽžŽß”ça^ʤ¥BVþ~|zh+6Œ¥õqÆËIôfUþyôz2m%Ð0Q;,F-*J4ΊlG^Via³xqó*îÄ“\Œ‚ž&×r ƒá'<çà2—¾d'ãÕÓV@“to­B}ˆ¼×´•Ð/êÍçDkùÇD¬xoYÚZN:°°„Òr³²¦¿%ˆÁ¼¯ªу2haŽ3ØÇ’Á,,¥¸{3aö9Š‹`ˆÆµbd¶(.†Ù_éOõ6Št1á# —׉9»GMƒìÙ"ˆÁ|½Æõ.‡ñY{Ñmú§Z 8VV«ô'FðºÑGa§ÕïB3]lô4ý §© µ#!7‹ž¨ýU¥09ÿþN"˜¯ž†0‚ŽÊw—V‰F«ÜLaÂzåE(Ü}uÌäfhk9 ”=Qɳú‹#l)®ð§7¦Rܽy(kІׂ/›W\Þnÿ¡¿u{`rù—‹ÁqaëW(b>1A”fá4|t4Ã;úómoGß*CDìJZs¢fýaf©È³°…å_áòY]Ò¡ÊšÕýɬ7«ÏìFq^6QÂhW>drÀzõ4Á;‰—![ðÎN#ŒR{æSA®­å$`}¢âò% Ý©ùØ#þ–.ìËQnù+øš|ðzÙž¢9éGY³²ÃðVðúWè vÂ`ìGù¬Zä¼ÿ>rTl†mЉäa¶¢÷çK(Ýø!t¶Lf¢á GQ\qfÅùåvÅGcxŠg1hÚ(~“³'ën.eçI%#”² f‚àu¢§I‡Ê 4eŸÁÐúØ¿Ý! Âk¸­m è"ÌÃ7Ïòc«Ü”T¬OT\¾$¡–­ ÒâŠà!àsßBeîÎUsˆJŽÏŠs¥Mp2”:“yXÎÅ(; o%t<èÆw_ëa²¾‚ϦC1Þªš)£“h1Ìwø:ç2yÑã§Åm•Ð á’;¨?}šÃz˜»#öÙb0ÏcôÎut-•9 "Iå™(: _ (;%} Y†Ë—,sp·F¶ª�e†Ñõd0°c3ø]­P–·ëw™d òÀq­,B5OÚ6 ¿òš¬‹NvïëÚDYúVvÞÚ‚z˜¿…©_œ%CšƒáÔ`þ5=SÁב˜ÇTÇÕØ•þ– —Ét›õ¨,9€£%§Ñ²öC2b¬:2^yf%Êè@uÇ, OIÅ´n \¾þB÷¹ÉbyåX¤Ê?vw<¥g3„?3E1æ›–½t´ý …zKŒôçÛvLÊôü0}_× Š×·‚ÂðÖò§¶^Õª‰’ò 3p¶\y²d%¶œBÙ…«!ÁU\(+DAÅ• WžY‰²ú0=˜*<%ë—/EüáX×a¨.ƒF­ö‡‡]0uaPöÝ¥Y¸Û/àü½°âMó¿áÜÿhÁHð¥\(Þ€SÊÒ÷úíîæ…—vô…ÿ`Þ·ÓE|sDèÎã)Öÿ ÷Ü4\ýÏ -ßm¿Â6¸\è.t‡x‡‡ñJ< Àóø[ìØô ÌN‰½:ŠèÀö®ì”T¬ž\¾T¡'°âV£Á%¼ê¨´#¹ãk¨üå+>_¨áN^ÓÒ÷µ7eOÍÅ iQ–¾]h)/Áɳâ^g+va›˜ƒûÖqlÞ|·ÜGK(½o³#?5˜¢`qîO�µç·v ¦¾gË>B6M ñåe|»çÿõ­[÷4Æäw+>zù0Ú©'ÅU↕Ѐù\Á)©X×-—/¨£áP„8á`‡ö>Ü’¬û –²`Ýú£°ˆBÓhìžÆÊ@Z%µ™ÌoÊÒ· fM w‡© 툃 Ü`Î$ìÈ¿�í2ÊŠ>ÀΚ&ôÆâ6ÑÖCx«Ì‚qš%£ác2æ™ð[k%vjÛ`†ÛeG»ö š’LCÌG¯d‰‡™"Œ=ÁÃÁL¦\Il?à€P„Qô=b>''ëƒ'—/Y|±Tb㺷«þ—Ìíè¡)—zÚa¾ô9Ô¹Ùȯ턤6³�¯£šMû`|<N$ 3”³¶¢Â`„–LÜ`~³P–¾Çð¨g0Bܬ2R"*½o³'ÿ¼ω¯Á8ç–剥…îòü³Õ¬_ ¥cåL§_%™N—^É⾉íÀdÒ6ÅGdb²ÚŸËw³ Û¸ -5züÔ#Îi}Ø€²´°XípyØDY<¹|Iò÷oнW„j Y´­\ÍBvì€Î&u~sòÝ£6ܬ«FiÉn|¸h(;à˜¤“…€yß<ùya½ß­5Ö„¾’QéºfGþ8 —ôµ£=ìð޼݀%Ö€ÁüvM7<Žz8p ÍÍ0Q§Æ–tN'—r…é;Ìtt›¡&òQ#7²Š¾D‡œ'æWÊÉ.ђ؇´¬í¨íxNV“ìAåc._r,8Œ(,·Äˆ¡ðºç,Šý²Uû¼Ã°Þ¼ˆªÒ£Ð^{À æ7eé›í”ˆ«¡,]¯„ù©§8ÉÂ%¾A˜ŸGÇè0:*6ã=ÃcÌ Sp´ÔbGÎdÑsfšäCÓ˜¾ÃLw@÷OÐ5ü WhŽBÒž[Nc·ÑêÿÙå¸í™;eô gûwẮ ]býºŸ[PµÛýÙe‡E«ƒ…ÁÔ¬ž\¾äˆ«ìuå³%fòè» cÕ!”ÕèPÃC2Þ8¥oÆS"®†Òû6;òB+¨<±[äÂ%‚ç ̵‡QZá¼Ó¼Mßta"ø2Q˜¾ÃT)Ì2ñ7î»a]ø¦Éá½úÛüß°®ì1ùI€oüj Î1›iýbnü?xé»Eç7-pøÜLä>Œú'¾tÖìM.ýL†a[·\¾d™·ý;ýÇ}èyºU/àoÛ7PËèa^ ­˜ùuÜ`~ãP–¾£¥DìEíÿÝBf¶QzßfG~j0§Z¸$3…ÃLw@ï�,ugPQ¢º8›ÔZ\ïxˆ>ógØO=PäÆ4lËBvù-îaNŠ<³|‹ÚŠR¨ÕÛ‘·Iíõ<ì3ãä~º¥2‹g »¡Ê®àæ$àò%ɸå[«P¿äkÆ5m%ô‹‹6Ÿ­å“EÜtàµ$¸q·µ<ÑYxÚ†úÞ‡h%†õ~·ÖPž¾…°”ˆÃ, ìÈO æT —ÄðR§PèŽé;L/N¸ÍØWV®ŽQ_õ6æm‡º¤ÿ=÷üÏ֧̦™SŒ~i<ó¾ 4tuàF}Š6æ¡X]‚ÿñßßÃÿõ?[ñŒÁ4s¬ë–Ë—$Â:*ßõË·ÜòÈà>… ëe” p÷QÔY_IhœÆï¿NÅDþr* G:”¥oÃ,'ìÈŸÁò(tÇôfºzÿ„µë78žOÀ³¸ã(x'ðÜñ:ï?Æ7˜“`CÖØØ$º6—è¡-‹ÿ/&Ÿ;`ëìBŸÄUãõÁ“Ë—<‚w/CâêFe ¢e´¸êŸêQSœµ¶qy¢h¾ˆŠ‚­¨hüUö±ˆõ~·ÖP”¾y ³¬°#?5˜“+\²Lf Ý1}‡™î€¾Ønã×Õ(Û‘‡…åøÊø=Ú ‡ñ±Ñ!å{°ý€ÏbÔvMƯPU¶y‹Pö•Mmúø2^v"D#ÁúàÉåK#Â<|ór>ð!9˩ѡiÄ Hš{ô3äpó‡²ô-†Ùý±›<†9ð#²…KV#õBwLßaÅt@·û«naÈñîöãÝÝŸàÐŽbì,«Æ×Wz¹‡9e\0ï¯eÈÛ}4ïîBÙ¡Q¼óª¾n‚•{˜†Ë·FYè‡q·=¡‡]„)<®ÛõYZÙ ¯¥ûJ¯Ei}æáq>ÂM£Zíy-L‡a„¢ ýF‡=ù-\ß8¾‡A«…ÎØŠžgþH€daú+¦†dɘw´à›NºàóŒ`ðé0aN™,¡ia|Œà9aN._ú`KÖyLtŸEAî«9 íÙ**ÊjÝ;Ð4Øe¯©¤ûºJ»öå%Æò“ËÐdÓ¢;[PòéAnþêå0>™bÞhVzß^KϦo?®•¾GƾE£êCT·'_»i ­¹È\¿™ƒuÝrùÒ{²Ãcð>´•(Q«¡);ƒú{L,Ü×Ò˜£´ka^^a¦YPéÑ;1‡¥ó*sQwô8·˜•Þ·×Ò³IÃ/FZ˱I­ƒÅLÿK=Öc}0>…Ö‘äLf¦5´¶n {pýfÖuËåKìÉJó.ÿÊä¶öZs”v-ÌËë?ô—…¦¡@_]4˜=¿@[tžÙz‹(½o¯¥g“f\±j¢a0<œc.Óñ¤3p0­¡µuÙƒë7s°®[._ú`KV¶·µ×Ò˜£´ka_ÞiØtÅØ²˜Ì9ï"/g)WCé}{-=›ÀßpšªPÛ9~1‡IǨ*(…Éùwðw‰Á´†ÖÖ d®ßÌÁºn¹|éƒ)YßÖ^KcŽÒ®Eòú^ ç;´¦_1á³A—³ÅUJ3ˆÒûöZz6ýxíhÐlFNá.¨Õ»Qœ—M®q ´1ä8È´†˜¾žØŸ¯t÷¿ìëg¶²_8l? Sè·»ž<NxiGƒ•ýÂa}ðáò¥¦de|[[I÷u5”v-ìËëÆÝ+fÂæOZ¥òŠMÊʙɡô¾½–žÍE¯=M:T–h )û †ÖÇd!–¼Æ´†˜¾îë(WŸÀY­Ú¥vÅ{`°Ï;õ·`óá6¸5 Ù~@\h)/Áɳ¡úÕâlÅ.lóoÙÍÁ}ë86o>Ž[îäÓ›g Ö._ú`KV¶·µ•t_WCi×¾¼Ñ*V²Q¥r5Ø×ol”.|˜µZpw4¹ ¦5Äô t›¡É)ÄnµjQÛƒ#æ,pƒ9EÈà©ÉCáîpý’vÄŒÁn0§—/}0'+ÃÛÚJº¯«¡´ka_ÞЊ•‹­ZÍ.&ªT®†ÒûöZz6)ÂØC\,û�Yäºèµ-·˜Ý<K†´Lô¡ç©ÜYMSƒíd zý¹­•Ûºåò¥EÈꛆËnE§å{uç oy"Kš9%Ý×ÕPÚµ°/¯CƒcaSÌÙ/a¯ö!ùW¶Qzß^KÏ&ðvÃV¬/ªB}s茴–. &YŠ™i 1}G»Ðòp"ìáöâiK l¯_ aûáñl™„Ë—>” «0öo|oТªLœ ÈÞÛ § Õå•t_WCi×¾¼.üX׊?Ün¸—šK-ò¨R¹JïÛkéÙ dÉ8€‹g9B™÷!Ù0f¦5Äô t›¡&òQÅí]TvŒ¬¼I ´~y<[Fáò¥%É*7kIWJ»öå6æoÄVÃoxü+Va_¿±QºübøÆÿíÁ èv†.À^`Àü®ó ‰qßDMM½ØÕí,4[£Ñ6Ê æ”áñl™„Ë—>˜’U‡ýv yVn¢Çå%¯§1ØÕ†–Û}MátxºPÒ}] ¥] ûòºp]kÄý^+¬Öåf{:Š$wÐ%Eé}{-=›À,ž5ì—Å^j<†Yz^cð¯ðÃf3°×ƒ¶w"øšm˜Ö/gË(\¾ôÁ–¬cè¨ÜjË12^ã™é�²³ŠPvò 4 <7Jº¯«¡´ka_Þ¿15ÉFEÊdPzß^KÏ&EiÉSÍx²ø ´§KÒyÀ´†˜¾n êÌöW?i.;,5…ÈÒZCªË° ÛgË$\¾ôÁ”¬4³¦ƒd>ÆÛQ¹q4¦ø„!˜4_ó<ÌiDiײ–tÏ"JׯòûÇ<FïZ`]4†#,Àž¢åŠ-éð¦5Äô Œܵ J£0­_Ï–Q¸|éƒ)YɄа_‹Ž?G{mTO¢c|^g ޹‰™ÝwJº¯«¡´kYKºg¥ëWùýÃG̲ÿuÄlþ1‘ça–w´†;è¹úûðtÌ«˜-%¦õËãÙ2 —/}°%ë<<O.C“­Â:Õ‡8õÀYç=\¤…­˜àsÚPÚµ¬%ݳëú¥ò¥Ú؆Ì-ZÔ\m†ÙÜŒ«5;±I}×–Î@}K[QPq¶1Ã,-¾iLÎ(5Kp�¶�Ï–I¸|éƒ=Yø<¯0æa/nII÷u5”v-ìË;ƒa×øÊ1_EßÃ!°^õ€uý¦*ûýG€wx¯üh6Ýq4 Îúÿe‰™NTåp3' ¸~3ÇZ<3’ú&Žâg-éJi×¾¼43’?õôŠv­Pö‘«.‹°®ßTåSV÷Âa<‚ÚžÐØ<<¿ÅŽõyÐZ“;þÌ´”6 ) ®ß̱ÖÏLÃ’|T–T'ÀZÒ…Ò®…}y£[ iYÛQÛñ\–CõåI°ÉIªß/·ü‰"Lt¡¶à}; ­ö TÚ†• ÙšF8x¥?N8‹i²HúJ´e’Hß—hË$‘¾/Ñ&©~—”²²ÎZÒ…Ò®…}y]¸®kÂcWhf$Òž[PµÛý™f¢Òê`•ÞdVú8 tù“Að à^ƒ%¨5娩¿AOò¡´Lk€é4Ú†ŠG¡5Þ@דçðøóú ðýŽ!FN¥¥¢?ùuÿ7+öâ˜ö;´v=^ÞŠó:aš ü,#¬>\¾ô¡$Y7î4=ÄtØ$UIyz­©6¥ $Y)ìË;…~»+*¶Ï;ÐôMüÕ |#è¬Ù›ô–z*¤ª?¹õ¯tùY€i 0}ƒ|nX[¾EMÉd9×emAIµºc¥ÐÙä7è(©èO~ÝÏÂmý—jJŸ¥"òd#¿ä.èŽb»Î¹[¦ªŸLë—Ë—>”$kômmiJʧz­©¾_J”$+Eò ðM:ðÀT­VcëC<›\,¬Þ–]Á=ÌI tùY€i (ãÍaÒqJ>Dzvç½2Ë_Á“—TôÇŽîhû…ƒÈ/ø%»ó±±Ì‚ñà¿Ê냗/}(IVÿÁ©ŠJ\0ÑÔJÁtJ&=Êò·JRR^YºJ %ÉJa_^^Ç5”æ¾å—u±©òO£ÝM³¹ÀmC—cŠü$=©êOný+]~Uô¤Ú˜Á÷ ¶ÆóÐÿü žÙ›J²Š~˜Ò­Ÿ9LØ®áŒþ=³² ˜¡¤ªŸLë—Ë—>”$kÄÔ\Âש±io3œ𔥫ÔP’¬æå†ÑZZ�µî'Ø\Óƒ}‚cOL8¼ŠîÈ­ñ÷GÝVOiý=Ȫ¥w@1³pÝúyëwÀðDúøªH¤¢ŽWŽämB‘¡Oöœœ¬÷]._úP’¬^¢óÜT6öÁ“a£CñºJ�%ÉJa^^ŸÚ þ²î"ÖHYw¹õ/þþ82’ÐR¾Vó½s]ÓaÁ›J.ê `ëÒí¢4êêÐêàsFð½@Oã?¡oupƒy¸|éCI²X€×ý+nõÐjÏÃÐhÕ-M åé*y”$+…yy…A˜>9‡ÎñŘe‚oާP°Ë'÷0§„øûiÎk-®.UÁ£­ZÍ.T\ú>äw·—ªâ)«¿Ç(“­ÔÒØTøTHõý©1‹QkjËöBSV £ÅŽ ¦ vHE?òê–B £V˜jË¡¡é`Œ·aŸHe†õ¾ËåK¢ï톥o•C½óvXÚÝÁÒÊ**M"z…›?‚zG9ŒO2û©¤ûš*J’•¾¼4†¹š¹(Ü­†Z½yôÀ·j+´½*�JŒXÊ i¿Cƒca:0g¿„½Ú‡ä_W¢¬þNËdŸBÙ…«!ÆÿU\(+TniìTo€œ7P½…òìwP\u†ŠQ¬.D®æ2ž¤ã/݈ô“àD/ûÃ!¸a)ߌìâ*\2T¢¸x sK$™ôãA¬7ÚÉ‚)öŸAŸ¥£ÁW™Öo*÷žò¦ËŠè»Ü-(->†³Z-´QÚÙ 5JͮकÕï¥Û™U‘½tI·¹KÌpÏ=FÝÑ2î¥_+{ÏE:Q’¬eÈ»�¯«Mº(QïEYuZŸ¼’¥PI8bý)/¤Aüý.üh´`(4ßµ{–ϰ9K1üEnù#´Lö"ÁJ›>ÙV2;NdÕ@ª7@Îè³j‘µÅÇýù[h{Æ0ñ¤ ÇOÜ„›‹Ž ÒO‚½ì賊atxý?­íÆÌDLÇkÑê–ßÓ,Ö<KÕ¨8Y¯þvöŠK[ˆ  ÓúMåÞSÞtùBËj†š¼¦¿‹Þ² –Ë`ž·A÷Nv˜† ËEƒÙó ´Eç3*¾Vöž‹t¢$Y)ìË+oñÕïÛJ i—?²Á¿[ ¿EŒñ¿_ÞaXo^†ŽŽ5†ïp©zvT\MÚ±)«R½’ß@a Žû]pe #­(ý(x@aüN{D:Ù<Æ;.à¢Áæ'zúZzÈ ÐÑ…û4mÿÄt)éJð/XN`}-@¿‡//Úðwà ²!ÖOœÞ51\‚ï ¯3‰èó4òDŸÏ¸*ú."뾪ND÷‡ ˜é<ƒ}r̘†MWŒ-†Çð/+©Áœó.òr6ȇ™½ç"(IV ûòFë/Òä_ ±þ”Ò þ~®k¸ßk…ÕºØþ ûÐ8¢Õ]“[þD<}0jÞ!rÓÇp¨0ÅêQjLþð³¬HõH~GÛp¬èꬴæOê>‡ÑAÖbÂ:Ž€¶ó9^;ͨ ™,åD¤Ÿ'zyŽh=¶ ¥u½D»¼OŒ8b´“‰Ÿ.D>Ç.íÏp¿€©öÆÒ+bý~ßtÎÄx g:QµO.ƒù6Œ£!ƒ»VmÌîew£0Õ ãòÌ,¡á²–h­1·ˆ}VJd3˜ ôpìw:hM¿bÂgƒ.g3Š«~€]‚p1ñµÒmßNL…<áº0Šãmn0K�ûòÊ›C|5Vöme…4ˆ¿ÿoLMNaÂñ�&Ãyhµ4Zþ ·7zÞIeõ÷¿á4í…JU ]ï¯ç¼)Øëjar&çr“U‰ß€I<4wÊï¶0„›_]ƒuÔ0>|ÏqÿöÐóç>÷Tço 2}�­uÊÿçr#ÒO‚½<Ç,œ7ÿÖ—ÁUî,Ü÷ï¡ï5yAtÝ^ý!TëÖc³–zóåE¬b0—èbow/n_fZ¿¢Ï÷Mcr&ÔXZi0CxÉ©åADRù7BEß5nAùDZNìÓºå!Å‹¤”5bf 1Lûe<»ŒøZé¤,ÎαÂ`&‹á™É`Î]‚´ºJ %ÉJa_^ysˆ¯†XѼáì†4ˆ¿ß‡ÑµÈW™³òP¬VcwaÖ/‰Y‰Üò'Æ lº°n‡ .‡ZœóFÉK“.­.«â¿Á4I†räiäܾ£™~±ôC”œ"+á»°> wäß&ŸâNÓ-üÎÈÁ?‘~œèe{8|¡×xùûQ}¡ íÖ?0¶¸êõM`àN3®ÿ.ÿÁ?±~þ‚¥¼<æªUpšðqùr…ÂLëWôùÂ<|ó¡‹`0ÃÅ’åERù7Bźü [?@¥ÅÁÀ§ ç[¨Ì݈½"¥¬~/]?õô†lµ’ö°eia±ÚáòÄZ𤆸Z‰>|â±p¥Á,`žüÍâ­—VW©¡$Y)J“ׄ9ÄWC¬?å…4ˆ¾¡Æ-QDwm—¼Ês˜|Òˆ‡#‰QVÿðÚ¦GÁ–:ØçèÅÐ9¯ïç½ÕšM+G«üØÛa<¹9t%Dþž‰x7Ágúò"d­S!+OJÝÜê±¢µj;ª:å.Ü@¤Ÿ'zyŽyxœaÖF!M+”•uå×h¼õöÖ“Øsû^Äú™Å`ƒ¹•·àŽ”ZÐç‚¥r ¶ûÉÒ/@¦õ+ú|÷]˜zBw="̳V˜nHçÁ}>ãF¨ø»æàn=ŒlUÊ ?¢ëÉ``;vð1ºZ/ ,oÖÓœ±!Þ0)eîù iYÛQÛñ<‚®S‡~þ2.Ü0YÉÓ±ÌJƒy =¦»<$C”&/kˆõ§¼Ñ÷Ï?†á½}0¹ÂЇ‰‘x×1ýÌÂÝs_k¿‡u‚ží(BNñ)4Ù“w¸Éª¨7€&+ï¨Çiõ»P‘¿Y—U„r½ÝÌb”ÿLþH&s ¶Ž&\¨Þ|jÜ™Ty‡aìrF]iJ…X?‰MôÌ<¾i¸l0]8…’ül¿\ëè5»àŠ18ešpýî8ý6òÊ. µë1ý1mƒxÒõ# eP­'ƒSH*›LëWôùn349…Ø­¦¹Miۅœ ¯xwð5ݎ˃FÂñç³m„®ø.á/tŸûÙä÷ôßB›*–æŠ÷g®ëšðØEû_H{nAÕn#lôg—­–Ñô›Ìâk%Æ»&/˜Sw±Ÿå";oûÒkõîBäȺk˜<J’•¢4yYC¬?å…4ˆ¾_˜„M¯ÁNÝ-ô.yÈ»Ñ^_‰-~¦¯5ãÔ‰¶%o³²úO¤´rÆúþÁ$3Y5 ¾Äøœ@w³šÜ·È¿©•�Úæn<›\\1´}ç{ O¸ÁæAG1LªÎ ¢ø}T߉ìq”ˆúI`¢_ñ^ÉñaÆ3»t¯ø0ÕQ»Oâ|ÅäDœ2ÍJý´[‡´`Dˆ^ýMõ!ªÛŽ•ïO/¢Ï_a0¯lò̆Јß%¼†Ûz†ê2hˆþ4eŸá‚© ƒ±¤”Áƒÿ^úÃ.FÑùM T¤¿›‰‡1@ÿ„ŒS5{“Žã‹…øZWÌ+7˜%Ciò.ãƒ×›‰ýÄéO! ¢ïœ0ïÙèÿ]̦چg±—¾V´pÉ9hê ™¡­ eû µôÂîZ>;/²j@t`ÚµÉÿ;Uî\hw`rcSÎHÓÊxkò\…JóCC žÀñŠÜ:¡öq¢îß²P‹¨Ÿ8'zÙšVîÀ?üÞúkö圂lj;^CšÆµwãâ #lKú—ŽÈú¡2YÑbø eb hÊP}á{tN‡þ™×¯èóW„dD@ÎŒE5BEßÅ|¥¿<³|‹ÚŠRbnGÞ& ´×;ð°ÏŒ“û©a:‹g »¡Ê®ÄÃ’±’!J“w ŸçJ›à”¹’®H iÿ¦;/Bß9$Þ‰ZÑ^ÁÔ»²ú1˜£•Æ^jdÁSÛžSSV P¡Eø¦á´¶ÁxZƒÍ›58]¶«€ï—ÇU|n ÊFceêQU²åz²âôß�¾±>4ž$]rñå)#ÒÒ*ý‘üåÏÄð¢.‰ql¬:�Mù<Xô6úÆÐßø%¾±IÑ,Ö›•þZ­Á…ÆŠC/ž¶´„,6d<ôÇ+ýeÌû*ÐÐÕõU(ÚH·ŽKð?þû{ø¿þg+žeàp2½Ö»­}A#™<·a‡þ(âBüПT°/¯ŽkeÈ]<¯$j_y V·8는ˆô§Àñ÷Ï`Ø9йðy!F6¹åO b0_¿ˆ†ÇΰÀ�,U‡a´='?;á°èqÆâŽ»Oɪè7 žÑÓz'‹ PPªÅµ\Óø×xŸ‰2ªó¶K8Ùú>¯ú=È&t^™õÚrTwŒ‘¿ðÂaÜ‚Ú.LÈô„‹ô£´Jó6üó$l|3puþêlTyå¸Pÿ%öVßnçF|XpÝÒ¯HÄú!† ƒ•þV/ò.*;F"ôß3‰èóy¥¿42ƒ!klŽaLzÿ\Nw¸˜ÖPðbò¹¶Î.ô+¥z­«+‰^ˆ‚þ»RP’¬æåõW©ÌC™¡)¤Ri?h¡ÞR#ýù¶“,̧ iâÙtä–?1àéïÇóÇœˆ]ÖTN¿Í0‡ñÎ3(X%¥i(²j ®@3e8º—3&°Rjî)L{húP ÜôVúiÄ9¿Á,?"ý$8ÑÓ×òòÏL‚1­d1Rn ^˜{Œÿ8wßo0ˉX?qd& MâJ55õ çj ŠéÖüµå‚�Í—*PPP‰F[hA“e¤o ÆPÑw­(C·þªDñÀr挦»]£¶;h2~…ª²ÈÛX„²¯Œhj3àÐÇ—áÈðAYz­Ë%ƒëQSœµ¶q©ß™›/¢¢ z! iu•J’•¾¼³p·_Àù{a?bHëÝ\r”É…XÊ isVX6ú;å À÷ê9†F=DþyLt֣ɟeiÙ`^xÖ€mª\”+ßÃÁc…¾z¹Ê›ì7Ð7A[žŽÑB&Ó°_;Œ<ÕVè¨{Oé'Á‰ž‡c“ƒaóçºðÚ~ò²‘¯ûwÄ-#)ëgeE3jŠŠqÈP¸ÄEcé ó¶o iø#lPGgÕvF<Ìl¡¢ïZQ†5ƒ92)î¯eÈÛ}4ïîBÙ¡Q¼óª¾n‚5Cæ¥âÔc¨iÄ ¨ƒÑªŸ!‡{˜%‡}yݸÓÔña<K,<EË›,ç‚ÄúS^HƒøûϦ£¬þ.Àûìêj+P¢Þâ¼÷ȽÂ|òD ¥ªÏ k×Ó„ò{˪ñ ˆ't]ÿ¿6¼¾bòFÊž!"ý$8ѳûpDÊž!=bý¬¬hÆ‚Á¼È‚ã;ì®íÆtˆ€‚džºÙÈŠ²%¥|¬¡Ñ¿kcŽ;ÐíØ„Üòzô8iAw³=ZìgÂ`É’1ï@Ó7] Eýáó`tp�Ï3üÍ$°[‹žéïñWnÛõŒ–N%ÉJa_Þ8wêR(<‘ ô»—Q^Hýþ±¡Aq ýv7VX*¢qBœMGnù“‡Î'(khGÇ #ªŠr‘W¬FIÅn +¡ühȪðÈZ¨Ò‰®ŸÕ'z®ÛØD×�ßX?Úuc}î4ôü f{PãÏR Óú}¾0†îÚmÈ->‚ò­:ˆ¢œ·°.» Že£4IåÁžý»à zg^bŒ,ä¼îGh,ÿPÆfy_ë<&ºÏ¢ wŽÕœ%ãwå@µîhìLzáAi÷•}y©ºγØ¡ÕìBÅ¥ïC~w¶ 쎬†XÊ i ß¿t¦aUVfÓ‘[þÄàú]6žOzB0‹E»þ&c÷0¶.Üï‹– Y5 ¾q®.Y‰aV�Ñõ³úDÏu›Xú¼“x¹¸Å5æÏ; kãäJÃ,B˜Æà=2ùøÓíEYM=îÅXYK.ßì¡ñ× ;Û`é´Â1¶œLMJYåfåµÎÃ3x ÚJ”øSžAý½¨Û o’®8áx0486&ÑsA—°Wûü«¼ˆû¦òBè÷Ço0 ð¹mèr,WÅSÖ³IäíÃí&#¾®:„y¹(,ÓÂØÔ Ã¡C0:fÂúY|Ȫð¾ Kãƒ:Œ·¹Á'+ôC+(>øê­7\Å:¬F¸r¢çºÍJýÌa2b™T²ÒìB‹¥VǘdÞ†¸>¶­wŸ&1’Ë—@ߤdZ¾Pâ—52RÊ*7ñ]ë4¬­]q½Iºâ„Cm� †B P÷0,Ÿas”)¡}SÉ! ôûã7˜W¢Üg“†dœ@•¥Û]4bwÙì(Þ²ª¯qÅùO$dÕ€ø¬Œ]a0c3“Ëy™e½žØŸ/Oà‘^ÚÑ—â�ñ"ÒðN}­ è/MKË#g#?J5BùŽ(R(Â_èë‹¿³§±~Ø+“*¾÷#è½X¾Tº}¹‰3O„"­|‰õMJ¦å EI²ÊøZ}ë5¢l±¤}h Ùm Eü~ΛE´]æØjøM¶`‹PY”Ò˜ü+‘[þ䉜%ƒŽOžÑ!<}NÃþâCV ˆo€°"ÉýJƒ™¡$÷îë(WŸX%wì.l3<FX- ÉÕςÈ-ªíÐv>_ö†ùÆñ¤¡‡[‡WtùZÊKprµ˜ömaŸ‹·»§‘~,“úùóvÞ[¿ Uõ?„ÄÒvƒ‘ †H)_¢}“’iùBQ’¬ÑšR-ÞE×ꯆFž‹*#šEýÎŒ–ÎAÅÇ0sÒ ×µFÜï 9Dgý7ìCã1wp¤‚öM%‡4$&ÿJø³Itü¯,ˆoÀÊ2ª+ f†Ê¨ºÍÐäb·Z u¬vÄŒÁ˜nÒ̪¿Ñ´ÃWØÀ#¸LÐ3%3S˜b$g¤ßÛ ÉCáî:µ“0Æöôg‘~,“úù‚Ó„;WÞ{ºò­îŠ”ò%Ú7)™–/%Ém¡¹¼xŸƒûÖqlÞ|·Üé_Ê‹®U„iç•Ï1!B¡H«+[Œ »ó)•ÄȽS»í›J68•.? Ȫñ Xi í.ÌE¶Û3ø»Ý…ÈÑ0rèo¢=OåΛPýøsXoÛ Ý݇˫÷ž;¨¯(†Æp×ÿú‘ù œzÉä8Æð¨gpÅàÉ "ý0X&Uôù>2iCß=HÚ@+ ×åÉH´oR2-_(J’5æBÓ¿x—Ð`&Æùx·õ]p†ö;·fÃ-’Á CÞÅÞjÐ¾É æ7Y5 ¾qxY2˜#Æ0Ïáe_?F#¹Nd T? 3ö¬ [ÙTÛðl…‡CÞ­åÕé‡Á2©¡Ÿ¨hAFb˜í›úZ*B¿‹uYå^hŠ®uá)¶½-ÒËRã1̜ȻØ[ Ú7•n0?»mÄ™ŠãÐ?Æœç9ú]´¾É!ج}œŒ®Wþlÿ+ â°2$c%,…dDŠa>ƒŠâ=0ØgÈÌú·`óá6¸e2 Åúy…Îóߢs8ÔÓ¡Ñ4hä¯å8Ø÷6,Ã^™TÑç Ãh=ñÌ‚Ñ%Ïh7l/#?q’Ê—`ߤdZ¾P”$+-�u·ÅŠ™°1gái®HPT|­>Œ´žÁ)s·¸ßÑ’1&iu•ŽE9­N÷PTˆ’}§AÞÑhêzµ´ûÀ‹§--°½–i¢Z‚ý]EÅÌ »ñVñiÔ×}²íÿÀ:ÕV|yõŸØ“<ž½Æ'ËqסÈ-R„d4Ò[Ñól"â¸/²j@|†ñSÓ/« ô,ú‹üGÌX`Î`&ÚóѪêñ!ÿÃÁ¾·A„0_x™ÔdZ¿âÏà›šZñlù¬z”šd1\Â??‘¾IÉ´|¡ˆ¾Ë3€'C3a²ÆÞY’RVÿs1Ó€ £”£N'+®uEGŠ^oäikÅû3J:åRê; ò’yK½BVÚÞZ&_2„qØo·Àl¾‰——¼žÆ`WZn÷a4äL€\P=)Ý`n-ÉC™å/¢Û?аõP7ÿ ­÷C{ë7 ’…¾ËqÚÍpFP·Üò'Œ·×J߃Êß¿ƒMõ!ªÛ—‹É$Ь߀Äñû%Fa1̉†Èª[? ŠaNÂó“iýŠ>?ÒÀ±ØT ÒÔ’Ý#€èý@ôùI„7eZ¾PDß•ÄÎ’”²úªhÕÒÅX}¦‹¸®ÕgŹÒ&8#ARë*õE9ÑwE%.˜š—õmÒ£,kôyÝ?¢¢LÓRßh†éB9ò *Ñh‹¿âYfCGånT[†à^ã™é�²³ŠPvò 4Œ.|ø$æ=¼h1Þg2Ç8ý~³º0š<ƒÚ,’× s­9äó8:k.F\È-bÐÝ­rlRë`±¹‚;» ðŽõÁtøZG’3™eÕ€ø§ºõÍ‹2md /-ƒ¶Å±“Êy…I;nS[Â5'@ð<CWë¸mIÉåŸNDúIp¢—ýáP€·a™Ä=?™ÖoèçÏÛtx'· ѳeÆÚ½ØRñäçܶ‹&K)åcÝËšøÎ’”²’Õ‡¬ÕÒÄ×êãZr#ÆÏo@~å5XÝâÜûâ÷gšt,Êg0ì?;¦ð¸NM{›á _E§Däõ¾„ë•x†<6ÔíÈÃ^óЊE¿¤ÌÛ Ó4b(SoGåÆMÐаÐlC2½oúàqZq³îSç¼Ål|>ý~»aª:ǃó{¨éqÃa<Š_×£Ù| —NïÁ–êˆL$·ü‰AK`EÊ Zsp™Ž/“IY5 ¾Ñú}º_#&-—õNw òƒÏaqÎ@˜{ Óžd~‚“¥ íõ×ù‘‘~œèå8Ø÷6,“¸ç'Óú}¾ï9ÚÏp/ÌÛ=o»ˆc­/‚¯ÄH*ãF¨è»’ØY’RVÚ¬kÅ¢˜j'–ZäKP-Mt­Ô�z'e†&ÑBÍüƒê-0ÒŸoÛ12èK«« Å{ /Ñyî*û¢–�OŽÌÈ+Œ>À¹UhŒ»*ôè~-:þüíµEPm<‰Žñ9x-8r$r>{) wö× -Ý‚,òoª\ N_ª‡ÞpY³èòxmFÉ‚¤â­­0ØÉ‚ÕÓ–š‘£ÊÆûyïC#ÓAðôò7œ¦*Ôv†:0i5ÞQUP “s9Åk"Ȫñ ˆ<ÐÿÞZµ,¦œ7pÞö 4 fã'±q} ¹ ^Q>V¹é'Á‰^ö‡CQÞ†Ä=?™ÖïŠÏ¦á|xFõÞ†–¤ò1n„†~W2;KRÊê_¼ÉX-M|­³p·_Àù{n±!Fžmý±› ‰‡Ff^÷¯¸iÔ“gë< –žóô&y…×p[Ûâ ¤cž'—¡¡ÐTâÔ7f÷p‘î85Z1‘~…&ÕõÂT@µn=r4Z˜»0éßùd7Çxàû‰Ží-¨-;„ê¦Ç+tóŽ|ÓéÉ”_þ„ñÚÑ ÙŒœÂ]P«w£8VÝ€íÊCºñ"«Ä7 Ú`°ùQ<Šâ÷K˳+Ø_{ÜAmÁÛÁkΖj‰RñKjV×è?Áxgå’œºõ£�oÃÝÖ¾˜Y]by~2­_Ñç SxbÜl2±fåïǧ‡¶bsñÇØQZ'žÈf¾òµZcyÅbŸÜÏ´|¡ˆ¾+‰%)e¥ãèÊjiVØžŽJR-måµ’ Úù(ncRj]¥ïbäemAɧQ¸ù#¨w”GÍ6<i7‰±@Zø<¯0æaÁå$feߤË«Ž¢Êx}î"{?LúŸ˜ É“ØBOnù“Að:ÑÓ¤Ce‰š²Ï`h}Œ‰B:eÕ€ø^×€… òVk'L§Î¢õ…<©¯b²4ð¬ƒ*¿F§áì0B[SƒºžðÐyˆª‘Õzu'w"G9¯üG4oC ªëz˜ð6D^à…6ù¬†~¾¿ÒŸêméú‹@M'æìF5 Fì«RÈù´~h‹~rŸþ»T„~W2;KRÊJ·"§&3áÝŒñµ&nLJ««4Ä{û«fAU¤GïÄ\ 6´Ä ÷ÜcÔý!b¶äI]ÞdÆN€¨}“ØöÆCd.}Yo“¾Îp ó2¬?›©"À;<ŒW+.ć±¾c0Iï¬߀HƒðQikD¢ü7ÐÏØrn]J¬T]R#Ö=!Ú×´(ͧ[o!Wý9.]5ÀÀ¢‡ÙOoCŒöRBõ³ìí©GMqÔÚÆeÏOóETD?)Ÿiý†~¾ÿÐߺ=K%Š“ä<Ö¯P$“‘G?¿¦¦> ««5(Þ¤öÚr¦æK(ˆqr?Óò…ú]Éì,I)«Üˆ®5 cRZ]¥!ÞÛ§…¦¡À½_¼FÏ/ÐOsèXêò&3pˆûfp>5}òBZ´ŠÎ§§Qo¹›­VDÚk’{PÖ³™*>¸[ÎAûSxøN4”íƒÖÒ »k:áþ.«Ä7 ’‡ùül<ˆïè`‹°[$ë L"U—Ô„êG¿êÍo‘ßm†FÛŒî¥ÞóðE0>Cß+‰Ÿ°—*ÇÒéøxëeÌt~†<Ìxý+t;'>«9ï¿•|\úù‹§õ—½¶¡Œ£³j;sæ¨;KÚ¯Ñh /@JYåFt­I“Òê*ñÞӰ銱ş ‡@¯1ç]äålH0:Ò oc'�ÕõÂ0:jw½‘q ï®Ù^­j|‰Þ/¢ïgþÙLb0›Kü2GoQTÛwÎ7Y5@…^&Ê` *ÀáÁ( ñû¥%™T]R³B?´ê ™Ü«Ê>ƒñv1ègáhþ:ƒ!þ:±öR"ÒÏB?Œ»µè™YÕÃêqÝn¬—éÀªøóøÜÝøîk=LĨ󑾛“³U},"¥| Žï°»¶[t#ê*Y „9¬ø.ro7¿%F2(YB|­‰“Òê*MñÞ¾èùN­éWLøÈ¸•³ÅUW`uÂ!Ò!o”± ±—‰t¸à0ÎÇõlIÉʾIw@]°Ý®GMY ÊjêqÛfGOÇoì{˜™6S…Ì×/¢á±3d7†¶XªÃh{ÜÑãŒ%ìPr dÕ€øÁ@oF¿èâ^Æ þ—õ&‘ªKj¢éGð<Fcé»Peeáíu¬Æ0'~Â^JÄú™ÇD÷YäîÀ±š³Ðž­Â¡¢¨Ö½Mƒ‘ò?dZ¿¢ÏXDLx‘IåÆÐ]» ¹ÅGPCŒÐ³UQDó™f— Á923Óò…"–•½”b^àfÅ^Ó~‡Ö®Çp-ŽŸ^'ìC¯b&Yq­É`gBWŒ÷&HúCÇ2'/¡„>Œ>¨E>ÝUÌÊC±ZÝ…9XŸíît/>'vß\ y¬!cA‹2ý%¸Ð“[þÄX€§¿ÏW¬µ¼p4Õ£s‚Ž?sï<ƒ‚B‘dÕ€øçêB£î+ÔÝì‡G +a+Úbªý&XYjDú¼³ÿ “î0 ³èAºw¡>]K÷-´> þÑ2l<¤ø"O¬r³R?óð ÞGƒ¶%d ×”Aý½&<¸‘ ƒˆÛr‘•�’ÊG¡…iî5B[Q µz¯ß[sop:ªqiùB ý.PŠ! Më¸TS‚|úœ¯ËF~É)\ÐÅvôÒÌ"¾ÖÈ0E¡¯o9@Z]¥¶CÇVÀr(!ݩ۲EÚŸCd˜Ãä“F8ÌZf7î4­LO¶ð´_6ÿ.‹“d5âúþ =¹åO7 ϰM•‹rEz˜i±moC•ó!¶çå£ÔÜó'È^G&'C“uBõ#¸ÛQ[œKÊ È+¿  ô×mlâÓÏ4¬­]²ä›}~Ô aÍ_d%ðI勯lZïFòÕd^¾PB¿‹Å”‘!Æü¤í"¿àc”ìÎÇÆ2 ƃÿš)Ä×¹¦¨=†âmaŸ LYòè* ‡éPÂùÇ0¼·oéÙZ"4÷¾ð“SÉH•ð¾9ž\¾ÌH«!þ~Ö«pJ€Ï k×Ó„Š ÉªÑ ð?,ê@)Ã9>ù'¬4«¬:÷ {×Èš»if¥~|ð¸l¸]e{ÊQS¶_Ðñ «fvëLJ±^#ÊüÙG™R ‰>ŸÁ ¢ÏFÐ{±<è Õ_äp!J¦å Eô]  ŒÍ&l×pFƒžÙŒBâk%FE´ ˜¢væ` [yuµˆ^o¼›´,„Ž% /Ë¡„Â$lz vên¡w)F»íõ•Ø¢1àgúúQ3Nh“ÅÛÞ·[**qÁ´œÙÇlÒ“9@¾ÌH«!úþ$zl<›©"ÀçèØˆY5 ¾>Œv|…3þIgÓ_àDÇ(|ÝkäÔ¦ôÄÔO0DãZÍ^”2ÃÌ6"ýø{QTeDsèàCZKç ü1Ì”«{I)߼݀÷ÖoCUý"Ý™Í7Ð99î6Óò…"þ.*ÆÖÊÕXpµáHÞ¦¨;uéD|­ìUÀŒ‹„ã#…ŽEß]J;‰Ê)”0ÆnŽdN˜÷Ðm¡‹æMµ Ϥi¦ß½ÌÌr–¤Eü½ÕØ´·ÎC«øýÒC¿lèEpœb½ g¦ðÀz®ÊŸ;?dÕ€è, áÆÁH±U*l¬z@†Ÿ•¬˜9Dú}€¦®ð´W^<ý_4G8XÅu‘~ü9-¬ÜJ$Ú–«LªX>6+ý-â Þi‚k…¢"§<¤dZ¾Pâú.ß,¼ Èz¸§ñŸÐ·:$6˜),WKGüqâ»KÉ“y“ØÍ‘ŽLw^„¾s(äà¤&®} TO1^¢óÜT6öE\<¯úþ C¿ß\¢ q>FZèEGnùC€×q ¥¹4•nh?4Uþ ˜¬Ã W?•UTð%ü«Ëí¨0нL-–Gp2q¢Zyˆôã6G©¬y+Yô^Î Äú™Ãx·õ]pŠv;̆[²‡d°Zéo ߺµÇ¡ï Ñi­0DHyHÉ´|¡Äó]±² H)«µÂT[¦5ÆÛ°¯r^!ˆ¯•ñjbéˆ?Nbw)iÒ o2»9ÒAwoºðŸdaïÁ)÷ÍÈZó …"í8°úýbƒ91ä–?1f`ÓýÿÙûÿ§¦®=Þ÷È/ýåÎøCg:Ã0ÃΜé0Ü÷Øétàœvø :ux;Z'zÁ±½ AûìThçG §5xjî)¼QB%7V %z€ó*é1\ÉÛÆ"4Qc òžPûùÙ+Ì æËÞÙk'ëqfLد¼ök­ýZk½ÖëU„¼ŠoÃúåehÔ%A?³öÙxö¿xÿ+ Âð]uµhŠ’ü?ÀòC˜.ÛÖ´+ë¦~Ü?¢ª¢†5Ãi‡áB% ¢TScºÝ~‚VÉïÖ5 b˜i­ô·ÊÊi庣1†9,‚ÏK 熹r+²KjpIW’’=(Ê+‹ê Šà»R_ML„øãv—'yyÙÍI üO%BÛŒ| õU¶¡E¸oÃÖ­Çpýb©µíõëgŽÃL&[=8sö<³æ醯Ñá‰ÏQ^EV „`äS§a-ç,Ó+_–¼fDG ß³µÊj«¬‡ÈÇ~Þy Ÿ)3ÝnŒP?~Lv|…“Æð2œƒè·=“Ý!¥µÒßÜtÿÆ»¡ºãÛà�lÏäÏ z­D² ¤RÖ€SšU½ƒw/øŸÏk0?3ñztÜR"ø®Q𫉑Ô`˜Þh[:l‘f=ñï.%Žò&°›“28øŸJ„¶¹ÁÖ@¶!æ0ËË<7¯¡ozaƒ3><4™`#6#²j Ü�Mµuh"¢ö‹¨*ÈAAÕÅuÛ\Fc7lS+w\Y70õô¡xç¹…ý›þ êî¯_}bºÝ˜uúñÏav>¬knpGjý ÿ>™mÓ[é/ ß‹˜“…–0ÁµÈ2 ½¬Kð:úqÇÁ÷c2ù(/_q:ðÌ'u§ƒ›¾¿^´Aê„\ÂïJ¥¿xiÖ‘ÀîRâ$/o"»9©#þƒÿ©„èéÑ´FÏX"ü|ê!×χÙCilÒâ+ /«ˆÀ¯X9uºì}�cõûPeá@åytoPáGøyF8ýD,^ñªJö­¬<rqãp!¶î‚›·¦Ûꇾœ–‚¿ïé‡ih&lPØxvRù(sXw­8³ H/ëSt݃òÆaÞ9øFõ8¢·óNê¦-_b)ñr †úë";pëY÷]©®ôç‚©Nƒ+‚™hJ÷ êÒ!¿{µH³žh»K|sLEœì%ŽòFÛͱރc*ú³6%$pð?•Äd›2.’¼rýŒr˜MÔ] IûglG«æ�¶ bM芒 Y5 ¼ntkŽà@þ›P|#Y-ñ»øßC…æV§9‘~¢¯Ø‡#Æ1,3‡9.úIà0ŽÔú ¿÷ñø$>/¡Ÿö0Áµ¨Ì½�gçßÑb}<õ½�÷Û lg?FOí¼ò¶jînZ ÂïêÆ-“uÝÎÁòÃ.\¶Ev¤×U(^LŒO…Ù?‡Eû%ì× ñÿ nÜü¿oà÷° ÀFß1qD×Ó‹ÿÛô[ØÎRü[Ó’ÀÁÿT"´Måþ ×Ϥæ—ø#ܤÉù‰ýZ {#äý‹Y5 ¼d»é/¼¡áéÜÜ�êÓY›vú‰V¼"J:,¦Ûꇾœ–‚¿ïî@mø)þV ÊË50E™]§T>*Ã^z-jsFûÿÀ°þS@í…6ôXÃÔꪼc7ÛqíWéþ ¿k´Zª¡¹ð£ÞŒ‰ÐX^÷Œ™¿ÀÖ,MŒŽEüß1qD7Ésê ¡cƒèZwð?žB2ÒAô´…‹$¯ƒ\|h4XT%ZioZ&³Éâ‡ûÇtL„ö¾ý„Ú­…ÐXc›‡#«„7€xj[àXç¼ÉW^XéÄ¢Ÿhq¢L·³^?ü`OQNKÁßùã„øš‡½±Z™Çu?R˜ÃH-_(¡×¢;gô¼Î!£ˆ¬€g@]}-7†`ï8-5}ü]—áw 9—²æT´@S^ÉFA5´hÎn¶ëîŸÏÇ8+¾%ŽòÆ™-‰ 6sH%DׯP^ááõiŸÌ&K´f²¶7&¼›"«„7` ¾?ãê°ÂÏ3Âè'Î8QÁgëHV?RëWð÷Ýf4í™¶ë>:j ‘EAZ¹DZ¾P×¢<gôþ9¸lÞ:‰²Õ¢ªBTèûáÚ Âc²¿kô‚µ¿DtðR«+®iô¸3ËûoØ'¦ã(hÅ·ÄAÞ8³%¥1 ÉHÇzÛ$Ô»”åYðúñOôä–?>x‡ùÚ7ÐÝù9¤¯ðÍþ;f’ÿdÕÀú@sU(媟xãD™n7&YýH­_Áß¶ «*†fx&ø&!‚ÏK@²_jùB ½í9£ÉƒbÞ»6fúñÂR‹œ½'p¶jò O¡gƒÃÔÉ ü®.üØØßB'n'~í¨BZ]ý‰³^ü'ŽgNL¼¦â[âH#/çéÅ™ƒ5hIQ®î¨$æJ„¶IyQž¯¯¼ÒÞñ±„™<ßôåþÀÈHâ¡G²j@éH;ýÄ'Êt»1ÉêGjý þ¾û'hõw„3íVœ<Ù…§2…Ю¿P×J Ë@*e Èwð/PåF«ýU¸ çuâßJ%pñ¸^’C^ÂïmÛ÷MD9¤&ü¼ÔÄÿÌYOüGyȘ“:D($#!Û¤¾(Ïz^{}ÊK{LJnÓq¨O|ÍO,C2ƒ>Š’a_äÀ¹»pxk!ßxc_çuü¯,(Ý�ig~¸98‡:¡×ãÑ¡ÅüïuéºVaºÝ˜dõ#µ~?b óÆ›ËQÞñ$â`‘Rù@jùB!×ê°®:?‘rFË›¢OÀò|ÿåx˜­äßÖ×Diåô®®*û§ð å¯øÖ&~D³ð»ºpMÛŒ &}0œ<ާ4L.âæ¬'þXЄC^êý àòŽ õ¥±«á4åYÏúë§óŽ>ï0!·hOXV0ÒNÀ8¾ p‡YH;ýp/0ª?€lô^p�Ÿº[K>®ò&ŒFHÙÃt»1ÉêGjý þ~¤æáèË·âm­ ‘Ž*¦T¾Z¾Pȵ";¡M¾}øqô›]˜ôÏÃÕ÷ ÔÙ*¨ò+q¡é¯Ø_{;ËvɡDž§10û!ÕX~×H1ÌÄïkƇ嘌 ¬Të*ÞgÎz6È,ö¡?1äuw¢®®)DV¾µžFéöcòúSTilÚ‹ò¬GxýtßÑ_ÂÌÝ»x(ò'«”n€´ªŸÀé~?ðh‡0ÃÏÖýV-ÊŒN,ÚõøÌ0¾®ƒ0ÝnL²ú‘Z¿‚¿eUI• ×Ç#Ÿ­|^’ýûRË ¹Öš“q¥%[J¡i}uX¦ýR 7È2JY—xd8È;俉üJÃJ‘Åûøû™;’~×H+Ì?ãŸúCÈy[ [„‡Yjuÿ3g=bärŽäš1çhÔó )C¥±§&ž¾ W º(Ïz×Oûý%ÌÚ{ã³iÐ(âä@‡élžÄÏoȪu7@aH;¡ú úÛ´×Ê`¹â0OÀk=‡â™˜n7&YýH­_Áßwÿ„ÃHÈÁ+ҞûÁ6gJåK�©å …\k5³À’í[”6ÿæ M£¯f'+Ì1;~¶‡ø8/íWp0?ÚK¾J'ü®QÂT…8|}lÅé Cøùç3g=‘6:Ìõ(ˆ9—s$+oÄŒ9v˜ëŠ¢fÌIô—ÆVráÁõÓ~GŸØO-Þ¯½§o ‹ Ø—½EU(/å' J-\ÂyGÐrìzŸ`Ñû\¤¸+ÿìlÖŒÏFVWPÖ L=ý¼üÚÂÝ+e°yüV rß{¹ªÈ[ÉL·“¬~¤Ö¯àï“Çþy¸­]1ůR*_H-_(¡×Zvü{ë ÿWÒreË–¢/6"eÏáwuáZƒB3÷3Ly£{tè*DÈœJ¢Å0gíNôCŠq¢€ÒØiã0§ýŽþ<ÿýŽ­ìVp“°T¿ƒ7JI.ï?á2Sná’GÍ{±¹äš¿FÅο`“j;þzå~6  üû¦ì,KF‚õ³r âç`°>‡ß¦EnînÔ´ÝOƒ±©'YýH­_Áß3~Rù@jùBêr õ;Wru N×Bqîf~œ*C³#ò œJYåFø]ù1Ç¿˜æ©B#åF¶W÷ƒo¡ w4º›‘ÕjÁÃ)Ÿä“©×¢€ÒØéã0ó¤õŽþï[C½Å±ž¯Q¸º0èƒéÈItL&veÕ�¹eù¨0ÿÁw–ßмý/P·ÿ ‡@sãÆÝn¸7¡9Þβd$@2úaºÝ˜dõ#µ~Cÿ~¼ñë„TÊ—RËʺkqs¿ÝMU9Ôêý¨¨kÂíñ¹4rGø]3 U(÷ ý-Mh7vbÐå[±þ.˜(ÉìçùТoƒÑ4I­å}„þŽÑm›”9ƒ‡›†M·9ÿí"(Ô%±Íôq˜#äa&pŒ MD ÝRZß$Ñ úÒ·y¹ßDÁÉ;ð,üËųüĽÖ<˪€ª‹V–ÇÉ–@Iþßc½1¤ôì4úê.¦ALMêIF?L·“¬~¤Öoèß7~JùAjùBQ’¬r#ø®‘*t –꽨5óN<p™UŒŠ‡P*ú¡?˜³ úý/av΃[|þ\d}‚åå?ôG¹.‰m¦ÃL²»4à§Áá¾ 5£âC ÌV;\a¡SÊë›<~/¦¦¼¢MeÕ�¹vÝǨé›:Ìï¢nÐ ‡þ3<Ofí­¸tj¶ÕFŽ_Rä L!Éè‡évc’ÕÔúüý8ã× )•/¤–/%É ¼À»iI²ÚÕF¾+õ‹â_e[ùŽ¥-çÿ7݃êœ-(5ŒÁÏMÀPz>aç*2ÉËûêÐê¦-'óF N8—wJe>ô—R]ƱÍtr˜#ÇÞ‡´¬¨·<^³ ò»LGV àwšp¬ÞßAª6oçê/Áyð³Ÿøz6ÞË¥T”œUÉè‡évc’ÕÔúþýøâ× ©•/~¤–/%ÉX9ª,ÉÓ!Õ­Â[Hµ+±~WÚſʶ’;ø€–ßEO}1T9'`™^„®9Ò1×tâ$/ïò£Ë8P ¿ÝD}á[Áû0§©G¢1J)ÕeüÛL'‡ùš¶ ÷]¡rùöØŒš½zØÈÏ${ŠF s°:°ÜòÓ€¬X¹KðÚM¨¯øµàK¾í‹\“ÝÀIF?L·“¬~¤Ö/“O<”$k`å¨4E{ë[…·•jWb³î»R}°(þU¶õ„Äi«>ÀÉ^7œ·q‘LLZ¬˜ÙaNZÞµÀ› *¨G¯gN‹žŸHG ?™–×'M¥.ã‡èw|h4XŒ†,B ¢E{.檄äór"¼~”¨%Ú¾íG 8Ç?‰¾ºýk%ä–ŸdÕ€ð¸q³mH®‰°QM~v7&ý0ÝnL²ú‘Z¿‚¿ïé‡ih&ìa(o9gÚõŠ’d%q wÇy×C„ßÕ[&+„eÄiÓã_e‹ ï,yŸo˜.OÄ’×ïÔÆyØå#UºŒm&P•0µ¶½žø®O²Lì…*»Š­0‡ «„7 Úì9zM~áçá$£¦ÛIV?RëWð÷£å^•±œs²_jùBQ’¬ÑVޏgvŒlèD‰ƒð»Ò>¦Ç¿Ê&/J“7–ãJC˜J¶™@UÂÔÚözâ»>Y1·¡ßñ*›Üò‹Ãžv^ÁMB³d¼ÂSU5.^•œ5PQ°=jMþô¸Ò‘Œ~˜n7&YýH­_Áßww¾*í¼ÚZO£tû1ÙÊ9Ó®¿P”$k`Ã|ºjvb‰á¾q [·à wô¢P‰"ü®$æVƒ+¡vgl¦t%cúë&ëWÙäEiòÆKüiS‰Ð6ã¯J˜ZÛ^O²×—[þdà|nŒt7á”ú¨6•ÁèN¬Ȫá ˆp˜{ûjlÙßçºiµ²o`*HF?L·“¬~¤Ö¯àï¿|‚ñ?£yØFM%•Rù@jùBQ’¬UÝh1ÌGŒ_N¥ÃìÅÄøT˜£ÃaÑ~ û£¤ Kµ®6ž\ü ç·dEü#ü$®âGiòÆIiS‰À6¨J˜ZÛ^O²×—[þøYÄ죣(‹ÂËAQå9|Z‹kÊw˜ ü³ôù úë?àÂárT·Œ°jt Œ~˜n7&YýH­_Áßw›Ñh´ ãI¬c]‘låœi×_(J’•®f~lìÀo¡vçvÂa®GA–†‚U81&dë:¾Ã_‰#†¼ p¶B«ùívþµõ&…KHC˜J¶µ*á�S‘Ӧֶדìõå–?>0n8€,^fUînœhì\ íáæ_àE‚}SV o�Ÿ£åy›¿_mª‚SèqÓi€´“Œ~˜n7&YýH­_Áßܵ:™_%û÷¥–/%ÉJª¥Ù»MüÃ[žÊsÂï-†9Ûu÷ð2ø®P„Ÿ—& þJœäå]~ÔŒªÍÈ-ÚŽü¼J'ì0î›T» •;î9þ4„©Dh›+¥®ðÌ"¼ÌgÊÛàŒÐ×RkÛëIöúrË7þ9¸l7ÑtêJ7À8àÀ”o9Mfî :Ê ¡Öþ›kne¶Ëù05jÀá(9wSL2úaºÝ˜dõ#µ~ßÝî&†Cs·ZGððÙ,|QŽ”Ê—�RËŠ’d%N•œÕÒ„ßÕ…k=î ‡Ú¶‡nÌú"/¦VWQÑ…òº"/ þJœäå]²ëðîöfŒsÇ.ã“3wù‰ ïü9¾ÇÞQ•kgbˆi/Ãê?b¼mÓ GkòTá“AÒÞDAuëºÃŠÂϧžd¯/·ü‰C"Æ0`l@uÙA|Vv &ŇdÙänÒ‘ƒ¯WÙ Êro`jHF?L·“¬~¤Ö¯àïó3íÙùõB¿µ夒Vðu()•/¤–/%É*wµ4áwý/f#d8 f.rL° ½¶ÈKü‡¿Gy97,_ž‡ešŒüäêø×°Ì-`fðLÔ2ù²³½¤mÂGòQ¡k„d¯j ÞV=ù¹ÛŽÙ‘SkÛëIöúrË/ "=—Ó K øÿä ú¦Cb¯üÓp\?‰Â=†ˆÿiq%$ý0ÝnL²ú‘Z¿‚¿ï{€ÖòHTø¦zÕ†a¸}Âu+Áç% Ù¿/µ|¡(IV¹«¥ ¿+í«pÄ ÚE^8ü•8É˻켆Caa+í]Ôô=¾K.â·—TBäxÅÜ=pö¶[(ÏÒ0êÿ» ‘J­ ?Ÿz’½¾ÜòÇ Ù­hi€¦ñ'8H¡$¿Ö®ؒحUÂ@b˜[Pš“v"ŸœlTm‡f8Bý|ÅÝÀ“Œ~˜n7&YýH­ßп¿dÓâí¼ èÚCVBøvU³ÛªþÎÿlB·]ØÇR)_"H-_(J’•¿ÛQª¥Õ¡¶qPòji‚ïJý*œ1ÌQÝ…3J5ÃÄI^^î©û ƒº_k×`ú=j™ü”‘€½¤’õ¶ÉÁï»,†™‚)U¹(ÚY€¼r#&ÆÚ±ŸUÅ1êK̈dÕÀú° ŸkmÚã(SïGEm#:FŸGÝ&RÖ L=Éè‡évc’ÕÔúü}ÿcôœÑávXnÖ%ÛEíx|%$¥ò%€Ôò…¢$YWàäáÕÒR´­-ü®ÑVálh8ÚIÉ*\²…2¢þ’ŒdååïIÿ-XgÄvæÅ ~{I%BÛd1Ìtóv] ¶7ÿÆßƒ—k®Áë‹ÀïúÏ¡³G:rüzdÕ@l7`ÖŽ~*·8h'ý0ÝnL²ú‘Z¿ëþ>·ÿRìÕ”Ë'RËŠ’d•{[{ýw° ·ë?/%tÊXÒä‘E7óü$Å]÷ºÝ.ZØ&‹a¦ÎÓƒ/¿º½’]e΂ãÇ-˜ó{0¨)O¸¦¬Þ�?¦†õ¨(Èü^ÐÔF¸ƒï EøyF8Éè‡évc’ÕÔúeò‰‡’d•{[[Qº¢¼PÆ:”&o¬p.t}s cÞ_xÛå'oka£p\h›JØ=¢¨¾™4 p^ÿ,òÂAÎè›Û0×LTdÕ€àÒóä ¸FöОo¦¾ñˆù,Ÿg¬#ý0ÝnL²ú‘Z¿L>ñP’¬rok+JWɽ…2Ö¡4yã€óŽàrí~|ýÊ[ˆœ¿ZÖÛ&Í»'ëQTßLšE<5~ŠÂÀÒÔ!§W86ƬÜ€Àìù ®ð E–x£Œô•uSO2úaºÝ˜dõ#µ~™|â¡$YWˆïA.&ÊÒ•…2ܸÙ6„¹°÷.?ìÂå(EGy=½hë·öá¡ÉÉ͈ŠÐ6ã¿ï©„ë'Û”Ã<]§q¸É*<è¼ü¦Ë¶ˆE“bAV oÀ"¦p¨¡NA)U;Œº,$#’ÑÓíÆ$«©õËä%É*7ŠÓUÄBWa9ÃE´j†*iªÓ%+o´ªŸ›ÞAu —4#DO¯ˆÿ¾ ?O´Ë~ÞÔËBîKH ¤ÚLlAAV á×–]÷åHc1Ì ‘Œ~˜n7&YýH­_&Ÿx(IV¹É<]¹`ªªÆCû«m_C* ¶£ªåLÑæºDUE kÛÔí0\¨DAa5Zlæ0o€Ð6ã¿ï´ÛvzS¼Ãl:‰Š W^Ýã\¨(BaÕeئ‹_’UCÂäÇdÇW8i”Q 4ÇTÄÔréuƒÅ'ý0ÝnL²ú‘Z¿L>ñP’¬r“yºšÇWXVîî7ª±e;œ‰-’ß3¸ž Ÿ¦œ×†Æ]ùØoœ�mâÒ„Ð6ã¿ï´ÛvzS|Ožà¹à-Á{ÿ;ìÚò ŒÎÄŠ—Ȫ¡u7(J ßh¤× ŸdôÃt»1ÉêGjý2ùÄCI²Ê Ó÷ }gŽ ºeDþb 1Àyzqæ` ZäNMÇMÃÞm‚ÑØ‰A—=‡ñþ.˜ºGà‘¹,6áµ¶ùšûN»m§ÿ8凧¯«¯`4Á¢B²jˆÜ [#ØÈ×§9ˆžv’ÑÓíÆ$«©õËä%É*7™©«d‹‰ÄJ„UMçÁÈÐDì™%¸—p[» ×jxyuh1ÿ{]i|y˜‚¥z/jÍüwáe|d8ˆì¬bTœ8„RÍËœ+énÛ™4N%Ь"7(rà|hSn½Ü$£¦ÛIV?Rë—É'J’Un2OW©,&â‚©®?  C‡šQñ¡f«®Ðꎑà^`T�Ùüs5«à�>ÿt;¶–|„]åM ¯º‰I›WÚ‚q^iÜtªs¶ Ô0?7CéyÙÓæ¥»mgÒ8•(²jˆÜ SWÙM¨+ɇZÓò*H»ý"ª •D/7Éè‡évc’ÕÔúeò‰‡’d•›ŒÓUJ‹‰DËÌÒ²v¢Þò8â™ç4`·ê-k‡0ãçxqµ(3:±h×ã3ø¼!äàÿ ,¿ÿŠžúb¨Ù ásšpäH'&e.ým›vùh@V ‘´¶Å2»|‡ù¾/ËV˜"ý0ÝnL²ú‘Z¿L>ñP’¬r“qºJi1®iÛpßšv•oͨ٫‡üì²Ã¬ÑÂì‰|á%›ooÚ·Vï`Åaž€×zÅkTG;5„¬Ö«>ÀÉ^7œ·qQ£¦%,Ÿ® ¤»mgÒ8•(²jHpƒ–@¿WƒÁ¹m¡À©Ó½x#Kqàa7xc’ÑÓíÆ$«©õËä%É*7™§+1ŠŸÄÊ <°»×g²Xr íÛ~ÌŸý“è«Û5JÄïË_ -Ü }>ðÒoÕ ÷½÷«¢%3¿÷9¦¡%~ø|òºò„t·íL§EV oÐfN£0oŽÖ†æt >-Î…jÓÛ(m¶³ÒØ Œ~˜n7&YýH­_&Ÿx(IV¹ÉH]%]ü$x‡rÖ^C#4šè;†ðhveµ˜”EÔ¼ªìª¨+ÌÏ»ðó 0XŸÃoÓ"7w7jÚîӛуŸ„œ)oƒSæLénÛ™4N%ЬZƒ–࿃fM5ÊÔj”V|…¦ÛcQ;2»Á“Œ~˜n7&YýH­_&Ÿx(IV¹É<]‰”¹"&8ø­(ÏÛÐÓjSœB›äš"ΰ ýŽ FÈÃLà¦F14¾²ê,^8Z+§ ‰É^ko¢ ºU¢ì#±AäH†d?/5´ËG²j(Ý Pn’ÑÓíÆÐn»L>ñP’¬r“yº!sE¬pOÐQ^µö'Ø\s+ñÆœS£ŽõPœ»ušë ••oCÍŸáCM¬öÇðʵ’ˆÏG…®íÕÁÒ®j ÞV=ù¹ÛŽY™ÄKwÛΤq*QdÕPæ ®©%ý0Ýn í¶Ëä%É*7™§«ä3WÄ ‰ÞÝv0ž'ž´kn#Ô‘d\k*dÿ–ÀŠuªY€»çÎÞv W‘yGºáh'<Á—rAô“ É~^jh—dÕPº Ü$£¦Û¡Ýv™|â¡$Yå&ót•|折!)ì>9ƒ¾éÕ˜eÿ4×O¢p!¶vmþ®PYùöØ| {õÖÀÏ.Ç h¾º ,+¹ËðMý¿Qb´å%Ým;“Æ©D‘UC™7¸¦–dôÃt»1´Û.“O<”$«Üdž®DÈ\3$†¹¥9y(Ú«†Z½ùY$Ûvh†#ÄQGÂ;ûãõ«ÇK¾í#k¸ïƒ÷¢®ðŒ …B^£-/énÛ´ËG²j(Ý Pn’ÑÓíÆÐn»L>ñP’¬rÃtN,™+âa>× Ú´ÇQ¦ÞŠÚFtŒ>/2)²# Ù•7R¿Â,FŒ¶„¤»mgÒ8•(²jˆ ®Ò’Œ~˜n7†vÛeò‰‡’d•¦«pbÈ\3nÜlÂ\ØZ~؅˶¹à«dY€Ûú3r”É#F[BÒݶ3iœJY5ÄWiIF?L·C»í2ùă\+Ù–)$û]ÓGWRÛˆvÀP•|‘ÿ|2ç9%F[BÖë=þF3´ËG²j(ÙÄnðƬvÒD#:‘ôo“’H׋·II¤ëÅÛh&Yä&Y]¤.%)¶á‚©ª í¯R®PQ°U-¿`*‰Kù­ (7Œ‰Ú‘"ÄhËÈÑ£Gáp8‚¯”Ç^¬bƒ«¼0ýIíºeò‰ëG¯ ºH¶)‹TÛˆP$…{ûjlÙß纓‡ð=@kù»P­“•oª÷Qm†ÛË’ ‰c´%„9Ìé¬Jö±œLÒA»n™|âÁúQ줮ä.¶Á=Cß™#¨n‰©´õ’M‹·ó* k‘•oW5û±­êïüÏ&tÛåZÍMEŒ¶t0‡9ý‘UCÉÞ vƒ“ƒéO:h×-“O<X?ŠôÓÝÅ6Öጞ3:ÜËØ±d»ˆ£Oƒ¯äBÂíÀæôGV ­ïñ7Fâ0ýIíºeò‰ëG±“~º"«¢˜öoUbù!L—mx|)+ž^´õýÿRtïS¾]éb´Ss˜åb^ÛUh¾±À%q4Õb"iaú•ÚuËäÖb'ýtCilÒrNÀ2-Cª¶p^[›4¹VtEˆÑ–æ0Ë…Ÿ7ë2lÊÒHžzj )÷*¦_é ]·L>ñ`ý(vÒOW.˜ê4¸l4¶@SºU—~ù]7lSÉ>ÍINçA´hÏ¡±ó¼ymEW÷<±fãpw¢®®)D.¾µžFéöj\ kî²É´¢» Ÿûtê Ñœ…®¹µÿMªc´å„9ÌrÁæ�ìA$-L¿ÒA»n™|âÁúQ줟®¼˜Ÿ ;$ÇaÑ~ û5Cü¿ŠH  ß[På~€ù(7>À˜ñdoz źø‚oÛ—O0þGHžã�ó°7…f8PÈ[F–àý¥Ù*ÞùÙ†²Ï¡hë‡P彩~TŒÂ/ÒÂf¹`s�ö ’¦_é ]·L>ñ`ý(vÒOW.ü¨7cÂí†{­=Á˜ù lû¾tºwÕh_�hþäX_òn¤ÿô¾ƒ=–ˆw7ôŽYIûæÚBdi¬ò¦o#…KvgAUÜ€áÞ©'•ÿÊŒp/ÞGãgWe/\ò:þö·¿¡»»;øJy(·orðO=„uÄ%ù.Õb"iaú•ÚuËäÖb'ýt-†9Ûu÷D>èç‡Çr_Y&yas–¯qÜâf�šâ³±9çÑb˜³ö@'wê¶@о,ì2L¬¬&¯:ÌÞŸcÿ~2²΢Tˆ06†j ±(-L¿ÒA»n™|âÁúQ줟®\¸¦ÑãΰVëjû7ìÓð‰½Úµ<ë‡"Q!§¦1¹»î.ht71¼&+ivLÌø(y˜ƒM[‚mºû‡9÷ä義ˆ´rÌaN¨Ö»ÒÂô+´ë–É'¬ÅNúéêO¼˜«’ßkàœ0îÛ‰*ýÕ5çŒ4“ù.œÞ3pøç0;OA¶ŽhøŸbðZh ¿`Æoƒ6w+Jj®Âë÷“æ0§?TkˆÝ@iaú•ÚuËäÖb'ýt%B折Y¹V—õyú܃­Ðj¾C§ƒ¤ã_[o¢Û6)oü2›†½ÛÄ;tùø×sïï‚I]Šs˜i`>çOÐßt_‹ Õb"iaú•ÚuËäÖb'ít%F抲ü¨;T›‘[´ùy•0NØaÜÿ66©vA7*jN˜‚¥z/jÍðq/ñÈpÙYŨ8q¥bg‘�æ0ˈNk'OìF®* j£+øâBµ†ØƒHZ˜~¥ƒvÝ2ùăõ£ØI;]‰‘¹"…,Ùuxw{3Æ9‹c—ñÉ™» %~Ç÷8 »YÅ%‡þJ[xÙÈbsªs¶ Ô0?7CéyvèOb”×7—á›z€ÞV Ê ²yù7#Oý%.]ÑAÇV˜bÃô+´ë–É'¬ÅNúéJ„Ì©„sÃòåù`ÕÁ)XŽ ËÜfÏ Xî´rdµþ€–ßEO}1Tꈋð9M8r¤“”Ge(ÍažžžäŽ^m¤o†¾&ÿN3ÜôÔnÝÌ˽¥šv <š Úïü…ðP=z±‘´0ýJíºeò‰ëG±“vº#sÅkà¼#h9v ½O°è}Œ./ïœsðÏNÀfÁølx!’è,;¯áPq2Âå}5}σÂ%ªp²×çm\Ôh i±b†9Ì¢³ê(‡7ò{EàŸ†Ã¢GMÅÐwÀí[€wÌ„†k,$ƒ!2L¿ÒA»n™|âÁúQ줮¢f®€cj!ø¦dXÀ£æ½Ø\r M_£bç_xgr;þzåì#Ž%¯ÏMÙb®„Ç=5b_aô!²×`îÿST¬ã'Þç˜òRU}* R™0`CaMi 9ï}´”¿UVÞÚÄb˜Àô+´ë–É'¬ÅNúé*Jæ ¿gÊÛàLÚ }ŠŽ²|T˜ÿà/õš·ÿêö¡ãÐhnÜÃ¸Û —ã&4ÇÛc¬„·�wÿ-Xg„ÑÊ~kÊI¼pð5#~”è0ÂW™³ºÌù0eÿ' ÚÃ(Ê"»ï@}ª æèš ¾I\¨½ØƒHZ˜~¥ƒvÝ2ùăõ£ØI?]yáh­@žJ¸B·ÒÞDAu+¬îdò4“J‚EÐX½'\“EVÏú`¬7µöG§ÑWw1¶xiß´–G !á›ê}T†áö-ß̈¥:Ìá«ÌJY]æÜ=¨/ÉãmùMäW^”S—ªG/róÒÁô+´ë–É'¬ÅNÚé*PÎ9º¶5‡)Юj Þ }è¶c6aù%ìºQÓ7t˜ßEÝ ýg8x¾ íÆV\:µÛjc‹—^²iñv^tí!²òíªf?¶UýÿÙ„nût¾øáóÑ¿ö½ªK%²ºÊ¬˜Õå5üðºlènú û*Q×t¶±Ÿaù™­03D†éW:h×-“O<X?ŠôÓÕÜ=pö¶[èdòŽtÃÑNx‚/‡ƒßi±z <Ó=¨Ú¼:ûKpÞ0Õ}„\U6ÞË¥±Ælú£çŒ·=BtÉvG;ž_Q†há-Ò¢d‡yu•Yi±Ë‚!­uûQÎb˜bÃô+´ë–É'¬ÅNzêŠwjýRf0^‚×nB}ŧ¨m»o˜ß¸ä0áÛ¾8\sn þ%O©Ã[¤Eɳ"ñô¢­?¼ê¥ÿ—íiÊÜP=z¥çàJL¿ÒA»n™|âÁúQì0]%à <°»aÌ=³c$lÅX‘HÞ"-ÿú׿P__|Å·j~<!cа½ƒê@^tñ¡zôbƒ«´0ýJíºeò‰ëG±Ãt• .˜*Ëpâ´’›8ØNWíÁÝ},òÿsß8†­[á†[úPâ#ux‹´påÅ�+÷¨ªh€amrÕÃ…JV£Åæa3C\˜~¥ƒvÝ2ùăõ£ØaºJŒ¥ù(Ú«†ZÖŽ1¾¬t‡Ù›m˜Þ(¼eù!L—mx|IÌaN1¾gp=î¬p^wåc¿qbÝNŒP=z±ÁUZ˜~¥ƒvÝ2ùăõ£ØI?]¥2Lb wÇ‘T´´w öÇáUñlä<²‡:zYÙ°JfK3žÌa–ÎÓ‹3kÐc!Ÿx¡zô"ƒ!L¿ÒA»n™|âÁúQ줟®(“ð;Ñ©¿[È‚û*ÕÇq:DVæ+T•ìƒÎ>Ï{qãp!¶î‚;å4¯Ë: ®¬m±“ÖMéT]ú!äwݰMÑ³Íæ#ÃäêÑ‹=ˆ¤…éW:h×-“O<X?ŠôÓ•\aËð¹GÐÝt ê¼Íؤ6Âü— qQš[„½á²ª÷áˆq ˲:Ì^LŒO…­ rX´_Â~Íÿ¯tÃæ#ÃäêÑ‹=ˆ¤…éW:h×-“O<X?ŠôÓ•añàŸÁ£#*‹‘ÅërSV1*µy§w ‚oÙ™ >ô_І ?ê͘p»á^kO0fþ[³4±U2”æ0§&T^ìA$-L¿ÒA»n™|âÁúQ줮¸iØ»M0;1èâQnãý]0uÀ#v¡å1öláu¸¹%Ÿ£±ó—`ë%ÌÏÎ!’›µ£›„5˜†àZäÀy¡¿ãGtÛ&cú¼´D‹aÎÁvÝ=*ú…¢,‡9 RF›üùà“¨È Õ£WÚ ®”Áô+´ë–É'¬ÅNúéj –꽨5OÀǽÄ#ÃAdg£âÄ!”ŠFÀÁïuÁÖÝ„SeãpƒÝØfÌYPýþ—0;çÁ->„a_.²Š>Á‰òƒÐ Ïß$.\ÓèqgØ «uµýö‰iþ;ßB1Êr˜Ó7E¡ßÚ€rØ$@ªG/ö ’¦_é ]·L>ñ`ý(vÒNW¤ØFi Æy‡Ž›îAuΔ’‡57Céy Ã1ûh�Ɔã(+«@YMGL!K¶oQÚüïz/aÚr9o”Áàôsxß*ó*óŸx1Ko%¿×¡4‡Yñ) }ÐZþ.Tü˜BÆAS½jÃppF<¨½Ònp¥ ¦_é ]·L>ñ`ý(vÒNWËÑ|@Ëï¿¢§¾ª@ʳEøœ&9Ò‰Éxœo ¦³d,?ºŒõ·ðûØMÔ¾…œêLsópšjq¤ã Î*9Ìø :õ ÐhÎB×b¦ºv(Êr˜S{/K6-ÞΫ€®}5{ÊJ»ªÙmUç6¡Û>-ªíP=z±‘´0ýJíºeò‰ëG±“~ºZ‚wô{”f«°IõNöº±à¼‹d‹»ÅŠÑ=½$JîFõÍßUA=z=spZôüß:ës™Ó]fmCÙç‡P´õC¨wUB/Q^]1Q–ÃìÆ-“óaJ]~؅˶¹à+Êñ?FÏn‡Å\/Ù.âhÇÓà+q¡zôb"iaú•ÚuËäÖb'=uEb‹ŸcÊ+u@ƒX¥Þ©çðJt0*a¸qvgAUÜ€á™EŒ M™îÅûhüì*œ”{ÌŠ ɈxÀRÜu¾v8~Â7Ô ½–Ä`ëÐbþ·èa¡P=z¥çàJL¿â1==2è¬oäßi‚ÈD3´ËŠ’d•¦«$P¸CùZH<øÛYØe˜XqþW¿Ÿ÷ghŠÏ²´r¢²A‘˜–_0¥[ZÛ-Q!«à�>ÿt;¶–|„]åMõJlBõèÅWqù׿þèЫèwõ禦¦à»‰ò·¿ý- ÓðF~OD.š ¶RlóÞ½{Qe%ÚìNQ(Ü¡|=s°iK°-¥‡|¿ÜwŸû&µ«ž?^ë÷ü1þëý¯k¯ëëëƒï¢e‰!pNv«ÞB±v3~Ž7-ÊŒNþ;èñ™a<Ž—Øas±Ñ*(q¦ÉM¿4¬.^­$r…¾–²:®·ÕF›mþç?ÿA^^^DYiœÉM¨…¾&÷+Ês(ãÆÿƒÿÐBcø…w‚ø BîV”Ô\…]¢C1ؾ}ûºq`ÕÎéÅ…;ð› HŒs= P$†8ô·i ®•,+ó¼Ös(–(ã s˜3ŒH« ¤Ã3Ä!\¿´8P9y´¬Š9Âe£Õ6W¿ðF[è Dº¯«-}õ5kGL™+âB*‡ra·bªÈƒLè•gÛÊ.àå/Ðî^)ƒÍã·jûÞ{ÈU½ƒjË$[af$éÄá„­.‹G¸~i4£9y´¬òEZe¦Õ6#M@Øêrd¢í¤‡¾ü˜Ö£¢ {ýwTc+W3"d6à&1|±Yª0y³ 6º‚obÄKø*3ý¶©HŒ¶‡nÌú”ÛÃÁïÀ?Î7À`}¿M‹ÜÜݨi»¯D»-ÌaÎ@BWAÙê²ø¬ê—¶A3’“GËêò*¡«‘´Ûfww·@—é»Zš<‘V™ÓB_K÷¡{7Å5z´ÃLV›©o ÷&Aò™ –ì:¼ûÆÔ4]Èj4^GßøÊJ#~ÂW™é·í(EbüVœ)oƒ“¶ *£Ì;s˜3ÐUP¶º,>«ú¥qÐ$èVï=i´Å†®F*Á6WW–ÒcµT:ÂW™ÓF_Ì×â(_ÁaÉ¿$ò¶pò™ ¥vàZ÷Þ%ø©p’1ëè…Aw6%iÂÄDYcŽÖ ä©^õÉWíMT·Ò_0F†2ïÌaÎPH§f«Ë™Gèd‰œê¦²©Û\]Y¢EI~BW™ÓG_‹˜hÀ¡†~8¨ì0ênˆ’!Bfÿ$4ÇÐ00"+߯: »&wH†žÞz'.+%j5öåâ‚Sèq/ßC/Š WòQ¡k ™|ñíªêmUГŸ»í˜¥Øc–£Ì;s˜Œ ƒL–Hßb» ŒT²ºÊœV«ñ¤4öŽ·ßk]=†9ùÌËš±#âª"1ÌË ß–ƒbÍ?CV•1;Ú‚ƒ‡SSf<sX€»çÎÞv '`¼#Ýp´Süê G™wª<R23#««täÐ×$“Á`$églw!dO¯Õx?&;¾ÂIã€àðT 9¦D^å!³÷Ç¿†ñn˜¬Ö{pLɼŠˆÿx}x 7Céù• ÷³/þ\ù=# x‡¹ï*LöÁסpð?û#´‡dÈPæº%ÜUG9¼¥ÕªƒÁ`0Ò�7nµõàIXZ·¸2WÄL´Ìøbõ<}hëË"àÃC“ ¶—2»GÜ,l ¥Ø­½áµï7€ž¦jl+ÕáŸäõÝvœ<ÞÅV›“%’‘‡*ËTð<ÜüK+Šå|c0«Ž³äº¤¶Ì;us´Déµ*Á`0 å“|æŠØ‰’Ù ÜF¨×ÉJšt¹kc†s¸/'‚laMµÍèi¦RôfËqXæBTºÍЯ9Ð둵£”qæ2%P$¾ÊÌV— ƒAÉg®H)îNÔÕ5…ÈÊ·ÖÓ(Ý~ -6Ì«‰Ë˜ë»ˆ†¾‰íH-u+Ši Íùô4úÖ’z/aÚ|o•®¦”#¡FxC!UÿR•sø*3[]f0 }ˆ¹"•¼|‚ñ?ÂSàÍÃÞxT²T\qÀ’%Ì 7`õ÷èBoûWØ•ýr>=‹Kš¯pºîSe½…mXF¨t˜ ««Ìlu™A?/ðÀîFøÎ÷ÌŽ›ž3éKò™+’Ç_¬ÕÙÜf4í!²òÍe‡¹®Y¥âŠR¹m-Úshì|�/G^[ÑÕ=[Q–€¸›p¢$ªM9(ªþ!PbóŽávó7ж ÂM½ÞCòvk¿GÇàf%”™Z‡yu•™­.3èÇSeNœÖ@£yÕNWíÁÝ}¾K/Â}ã¶n=†îðÕƒ¡\DÈ\‘,ñTg‹ܵ:Ñ)ÆI0EŸ*÷ìÌ/@¹ñÆŒŸ {Ó[(Öˆ\5‘¡|"_yµ7%sô©u˜"ÃÏíÃJ,âÙÈxØä=Iø‡fi>Šöª¡V‡µ#FŒ/3‡yC”d›¬1ˆ¹"fD¨Îæî‚Fw3$ i#x8å“9~™'VNæq¾-:ÐüÉ7°’ÌþÐøva"ùQôXðµgÑqtvãwh¾=–M….¸É”o٭ٗwå{p¾IŒNdFf†„¸¯¡R}§CV@5š¯PU²:û<oiqãp!¶î‚›úÎNS¸;8ÚÆó5hØ•d›¬ÅA&„*Mb ïẾ/Éw£:ÛÌ/è{¾îMËXà‡Çr_²u,cÎò5Ž[<ðÏ @S|–¾ÃgŠ ÈÎH6²K¿ÇhXJÄ�~7,5»Pn—9L':~ë9ìTú’±•þ"â6¢4·{ÃW@ÕûpÄ8†eö O_hØ•d›¬ÅA&„*¥ò;ŠPæ±`y×½ ÕºÕsrjz!sÀÈz=‡9{/™pù̜整ro½«£oe?çüŸÔ÷bz-ü‚ƒö®×ìÄÃø:GZ ˜Ãœ)ÌŒ`ð!‹“7n™¬XËÐDšâ @ûÀ®$Ûdý(2!T)•ß‘‚ÀÿäÜ„ÅÑ<ò0ïD•þª`Ýd¿ a$=¬8̤:çAËÉt;çCœÌ•4s›©N+ç…£¹ 9«ö\’,~‚¥*<‡á9i¼|æ0g ž~˜†fÂf]”TxR<dðIUñ‚ }`W’m²~”‡*‰B ¿£‡â¨ V²dt…—5ŽçPc*QôXðÊa&§¹ùà^<o@Ïà] ÞÐBMÒÌѸ² 7×àUh«Ë¡.­@­® £3ÒM¾™Ãœ)¸)®ð¤x(/^@ûÀ®$Ûdý((ßyLÙo¯¤¶Ò4@ßñ3œ‘âB“E¬Cq~ì–6èH8IÅ5ô;%‡»D8Ô˜J=<EGÙ_°µ~�s«‚úÿ€µå8вTüwPEo¦…tÜr_ˆ s˜3ª+<)Ê‹Ð>°+É6Y?ŠÊw^DÄŸBqò²òQ¢VcoQ.Þ(8…·Øa"Šó?FOíPñ÷ +'Ôê=(ÊÍ–4Ẅq¨1•(z,àà÷º`ëîÂ`X¨ç›Å³g³dynÃ+QpðCÇ—¬µ•s±as¦@{…'ECCñ‚  }`W’m²~ +Uß7‘WÝ §o5È"fîýûOм-¡¸%»ïnÊGuçø+‡Èÿ÷tGp²ïyðr!¡ÆTÂÆY Øò;PÓ$Œy7¯£o|>ø.q¡ÈafÕÒ$…ê OJ'ÚJZ ‹lí»’l“õ£8PXÙè˜ù/fƒ¡ƒjÛ¡±†~L(ÓŠ;YŽz(îîÆ! þ9Ìίü;÷Ôˆ}9&ñn#ʨ¨ô—䡯TÂÆYáœìÞm€ki,Á/‘½Pä0³ji’m[ž† OŠ'Zñ7fc-Y+%´ìJ²MÖâ€ò—„ íïÃhÿ»«¯``­ïcð' vlÄSQŸÛQŽA±’~´×@µ¡/(+iøIó1>6:ãû»b£´Jl,ÿ$4ÇÐ002¾ðm¬ºki’ÁÏÈYµ4éˆVá‰Ä*Ñ8{W!+N¡Ðrº›ö]I¶ÉúQP¾ó’0Ѿ—°½±O‡9öëïô>Á¢÷1¸¼üXÃ;ϳ°ñ¶7>ûšça´þ/h9Ø'·Ã¬´Jl,•åGÍØñ€hFÄ0gB " Ù– Åom@¹aŒm%å§»iØ•d›¬Åå;/ iå<B›òŠ` xÔ¼›KN¡©ñkTìü 6©¶ã¯W¾Á¾ìàa§ìоˆ>¾DÚaZמa*X^X>VéOÑc7Û†^eÈ¢¨ 6ÜtÿÆ»ÂñÅ:8�Û3iòvSä0gJ "™ð=@ky¤#|S½jÃ0Ük‡VqAûénÚv%Ù&ëGq@ùÎKÂpðû×÷'!s°vô‹pP¤ÿâÇóüeCóö¿@Ýþ/t:�Í{ç]—ã&4ÇÛጦNn þ¥×èZÂT\1£´JŠ ¢í’()ƒ ß_¼Xç3Jù\£+$#íSÉÇ’M‹·ó* kqèøvU³ÛªþÎÿlB·}:ú*c(?ÝMùÀ®$Ûdý(–W7!ü˜Ö£¢ {ýwT‘¼ Jž‹E+‡ ù‰†&‹l7÷ÁXo 9ì4¾º‹±­ÀÊŠ+f=Ô(Ê \0UUã‚¡ý•ì†ÞŽ·+'ƒ Ï5ºý¥{ "9!ù7Ïèp;,ãÈ’í"Žv< ¾b$ÙÆ‹°U'ZvG¨Ø•d›¬ÅŽÒòê&B î6Å5z´‡~G¾™úÆE8¨övÝǨé›:Ìï¢nÐ ‡þ3<ßÄ_³—NíöÚ8ÒÊ¥8Wì$x¨Q.=Ìã‰+lÌç^à~£[ö·Ã©€M29žk9Ìéš‚ˆHµ·AOØÖ+é+”ïŽÐ>°+É6ýOÐ×Ò »7ÒeÏìXHÆ Ë«›Ü8 »Âà ?xÇa‰Ÿ@'o½¼é4áX½žéTmÞý%8ï˜ê>B®*ï忇ÒW‡åHÅ•¶¤ÛXÀ=Cß™#¨n¡¤òãká¹FÕ sz¦ ¢„¨'¥YIßä¡|w„ö]A¶XÕØ|–¹Wúâüþàaåeøœ×pìP“2KÊŠï0÷]…Éþ"ø:Þ|ö+F’±ˆéjè‡Sðì²Ã¨»!BHa ^» õŸ¢¶íþ:gfÉa·}1N?dHÅ•®(,àetÿ‚N}4š³Ðµ˜•"K|¾ˆ( †Yé)ˆ(•ô•ºwG¨Ød›~«[ª,!Ûß~¸¯]Ñí ÖmÎ懼f3œ@HFª,SÁ_ð„<à8ßLǪ7Îð@;ÁÜÁëŸ[|%†Y\äHÅ•®({,à'a£ß£”dZÉÚ†²Ï¡hë‡PïªTv”ªæôLAD ¬Œ§„н;BýÀ® Ûä&;ðéÉ>^º Ü3˜+ Pºz*›¤:*ßÂ*}HÌíáD¤8Ó¯9Ð둵£èó(bÄÉŽ¯pÒ8 xnšcŠ>ˆ–ŠËzŽ)iRqÅ 7 {·‰Ÿ0wbÐåã_Ïa¼¿ &J+ý)z,„eAUÜ€á~ì%}µŒŸà-ÞGãgW£g\Ép(r˜Ó5%°2žB÷îõ»’l“¨Ÿ©@uÓM ßA{ýdoÚŠOµ:hê¾F]E1²TÅlJ võéiô­å}Z´ù(Þ*]ω³Y7”r%m#DNÅES°TïE­y>î%";«'¡”ÆsLJ »?YØe˜Xñ¹VfïÏt漎ÿ‚dõ¨:ô—þ)ˆd„•ñ”h»#~à¾ENhØ•f›þ§ÔŸ@Iîf^Æí¨Ä•.Á;~ÍÚoÐ2ø”M@,an¸û«¿GÏàzۿ®ì7óéY\Ò|…ÓuŸ¢(ë-(þP·ÂbAygÔmí‚^«áåÕ¡Åüo:§'®´ã¼â¸éTçlY™Ôs0”ž§Ó‰SìX0›¶Ût÷ØÛ#sî;ÈÏ}Sñi|3#s&¤ ’“hÕÞ¦|l’4QvGh‚æÙf³�÷`N”äAµ)EÕ?Àî]çÃíæo m„[Ñ»‡ ‹å^`T€Ÿ0«Up�Ÿº[K>®r §‘xðX~ÿ=õÅP圀ez>§ GŽtb’ âBž ÿÐBcø3~ÞÿÊÝŠ’š«þ©2;s¤ ’Em22 %Ù¦ç'Ô~qžHï—v.ãöøsô3…Å‚ÒÊ©ÞB±vˆw’8^\-ÊŒN,ÚõøÌ0.³Ý†L>Tàd¯ ÎÛ¸¨Ñ@ÓbÅ mJÑcA„<Ì΃‘¡ ò‡KO†ça΄D † 0'O<á#o£T)W)?NyzPSxF§9RóµgÑ–'u…9Øß¡ùöX=*…Å‚œŒMûÖòF¯8ÌðZÏ¡˜Šó|ò>Ç”7T?|4üWôX@R¡6à§Áá]=¾ 5£âC ÌV;\‚{@!‡90ð¤y "Fšâ‡wêYðÀÚ$f×¶Hlã~ ¢!Ï1sòD! Ë}¸tã2Î\ޤO’q$ïêîƒíçðÙÈ.ý>òv¿ß KÍ.”Ç)pÔEa± /¶p7tö•#À$ƒNî{ï!WEq>~^§TüWôXí zHËÚ‰zËczû¦§m}l˜‡Yìj»ô8Ìd IûDŒ´„{[ÃN¨òöãts7l’žé%ƯC~ð«ªàzÜ2¥mbNžxtY#/½£­8yæ&œ¡“¡@’·Yæ™�䡜‹½—L¸|æ‡NóʘþÖ»:Ø•lxŠŠå'Èîüã| ÖçðÛ´ÈÍÝšQRÂþ+z,páš¶ ÷]!™‰H{lFÍ^=l«™Š4Z˜#îQ@@ÿ‘l%´‰[m—‡9SRÉ…ß‹©ÕNñlöUörbÚþoXín:2:(’iôü Íc« ä8øF/¢˜ üyÇ`À£o°çP‡<WhØ•d›kº$š"1—-8¸«ç 71hÀ í>doz5}ÏWޟѬ8̤ çAËÉt;çCž•1~3Ó¥üWôX0‰ÞëÿžÂ.<èûÖ™ßýÙÎ;™‡1FÞâŸD_Ý~h¬”æ°‰Zðª—Bãš»l¢UÛ¥(†9SRÉçý EÙÈ+ýÍæ`"øÅ1\?\<eÊÏàko*üĺL¾¬ ®UÕùÇ`(ÍáuZ€Ú¾ÕJu¼óP¦•Ç1 |`W”mz:P¦Ú†úÁÕÃ$$¤e-ÕÛ‘5ZèK&òÊa&§¹ùà^<oàÇø»¼¡…šŒñ5½!Eu™‹Âþ+z,˜Ç#ów¨¯*‡Z½ù[J¡¹fÁЈ' • xÔ¼ªì*zW˜e(xE‘ÃLH÷D22߇“êŒ-®êÏ‹QÝ.^Ïo ¯ª£Î‡h(Ç¡Ž'ÂÁŠñzˆÃÌJÒiË älR!ûàu¸W•ùò.4Ÿü Ï©yÚvEÙ¦^— ݦ¡W÷6À2|³“x6ËRá½â):Êþ‚­õ˜[UŠÿX[Ž£(KÅÛßG¢Å732¾Mý¿è54B£i€¾cfÃ"ZH—±€ŸØ~\…æ~ ®7Õ 8'%ê2üÿó]üÿWÑÚ?Ýݼ}8„!%î_a®-”l·”2‡™!K¶ ([=ÉM&gJßॼSè› v·e,ö2^ÀªÙÊf ̼žsßÀ¦7öC4È ú Œ5;°£ù7™Pºvf›é /½.غ»0è:=œoÏBÃo Þ^|ŽV”çmæ'Sd"¿Òd=ÿ‘¶ÌcÂ:›ã f}¿¿Úý\ÍòÂù0ûØ[_?F¦(u;§¯ìd­IXðŠ"‡9RÉÈ’í[”®:lÜ$,ÕïðÆ•‹ƒ®5G奵ŸÈž‹S™¶›W“¨¯.æ°è‚i5–ŠÞ‰³Mƒ±R¢¿jíO°¹æV&Ǽã65jÀaV¸Ddà±ÝD›þj*v#?§çôhëÒáÓ¾‡CάN±±à•3Ò-�Qä0“x·tOA$#$$`ÇQ4÷öì;ˆ\Þ±{cwpÜ?—­5ûÐ<Îfò‰CÒË…¦•cijMƒAV7w7CÛB ¹4vZÀû^ê`žpÀvG‡Òwö âÓP²ûSÔœoƒ•ÖfRðÊûÿ¥´Ì;es¤ ’•Ã^+Û]*dÿ–À6—®ÁÎà‰Rñ+ã0V™Çˆy€U¬Œ³M#ã!U?9ƒ¾éðÿ4×O¢pºª‰éCH–Œ%Ú¾íGàÈœß ÏøÓÃ,C™wêf–‚HbH /;(¤HÉ¿anÑñ3]2Û k$ËK™ îà» Ö6‰CÇ_@¯û%¼®ßà È‹˜Õ6Yv™ÁHÃ܂Ҝ<íU¯do ‡CUÛ¡¦p²L gô?“ˇ‡&l/Ùx 5r”y§Òa&°D2°d‡¹‡¹tñè³ÉÉÿ°¡MMÒõÈ€®‰Ix‰S7ÓoÛ¼ HLø¶O!kÞrÚæòC4ïÈEIÝßÑxº;ùû¬*¬Ã•ïʸ·,ÛCdðÜå„'<×kè*ƒ!`>× Ú´ÇQ¦ÞŠÚFtŒ>§3 3Ú¡³MWML#ä(óNÕ¡?–‚HbH!«-º³VAO£®bop+F<üsÅ(×à‘ǹ£úÝ0ë»åq˜}c07~…ª²R¨Kò±E­Á5ËFŒ_à�-÷›fÛ$iù6óô¸ñflßT†ö{FÚ­Á Û#¸ÝN8zp¼Jòº\¯ F(nÜlzõü"vycÑpÿˆªŠVuÛa¸P‰‚Âj´ØVóï3$C†2ï9Ì,‘´xáh^]‹Ö²ÖVøq@«ìÐñáYƒ%ÌÏO~ˉۈ+šÐoùM5"''ÔeU¨×µàzÿ#™²ÐPn›d%) Få,RÆÚŽúµTx<ó}¨;ÇÒÞEÇ!×k9ªê/ ùú�ÆÙB#°Ëœ¡ï‹[ÞX4|Ïàz.ìñœ×†Æ]ùØoœ�;ú-5¼Ï˜â2ïò;Ì‹n8&È anëMÜv¼`33)˜6£â/‡ ¿;Ü" ‡7¾ç·¡ÿ‘9Ìq³š»2ø’:|¿ÃÚŽÇ3ð…ä3^ÙÂrñÒ<vÜCßû¢• Úmsé>t…_Êöæ·ê1èµCð0Î7_…ÑðwœRïB-+‡Fäze¤LUÕ¸`h®ØòÍÐ€Š‚í¨jùEž±)N8O/άAË(ócÒùfÎ…®o®aÌû ´o«°ém-ll±Atüֳء°ñ¬—{‰Ù_0b†äýäd`Ë>:~<w=ƒ/ø*¥ø'aëþú󵍨•œ¢JœÓÿ€.Ýa|¤·Ë¾sC¿múà4Ö£ÞòÓ–ãØÈÔ³¯ãêvåA•õòsK3^‘¹^)dO\a‡û¸¸ß¨Æ–ýípÒh.P²Ô¥5cÈ !ä€ßåÚýø û=”·>Ç©HsVWRÀ;O6JË/ÀluÀ%(Õ¹ÚF`høIþUh·jn`ÂqwtðÎÞOðé®쮨ÅùËò¬â(Â6ù·Ýxå§Ðf_=òÁÑÖôª*!#.eæze¤²Å>ˆí94v>€—ã_?5a÷¦M(’³t4dHkÆŠb˜RÂMvà“#æãÀ¸i¸ž¬Ð3âe3önè5Õ(S“”Ha­$YreÉ%b– þÁäÄøÃ'²<”e›,•T‚(4×+#u²Ñ¼UîØ™_€rãŒ?áÒ·P¬¡n!MŽ´f yas¦ÀÍÂÖp废`u8#¬€òí ר*´4¼À áË  %Ù&K%ÅBî»’ ^^rVà]õJEÏEš?ùV2 õ?€þÀwÔ,“#­ãu]‰›Ðß”æIËæLÂÿvó÷ÐÒ<…¯‚îEI~Ë’‘|gu Ï¨‡–¤CÓêa¼=Œiã°ä_bU4”b›,•#s˜ÅÆå¾ L<—1gùÇ-øg )>K_Á2Òš1¢@bÉGn¢éT)òTÒeTb3ã V®3‡91àî=‡]Š—¨ >‡‘eIZl“¥’b¡ßB½¼Ë¸~è]¨BÆÎ•¦¢´`—ò´fŒPÈÕŒ ¨,Ê ØIVÑah¿? D»‘ô÷x¿ú;PH=2°ˆYG?Œú†@Q­ÞˆÛ#î`¦„%øY‰ßà཈bÕfä©¿Ä%c­VX­°¿Ã)õ;PåTÃ<É6é6F™¶ÉRIe&ÌaΠ㾨Ò_}•VŽo&ó]8iŒq0y&pS£gg¤fy¼{¥ÓóPrâ":­OVžfT¢´-ÃçAwÓ)¨ó6ËWR8Ýð?A¯æ£"ÞDAµvð&A¦`©Úмšx"9uÜ<œ¦*¼¯¹‹—Á_¥âŒöÂ@*éi¿GÇàfir@e›”ë’*V”z ü$¨úŽ!<š¦R*Ä>•ýò’ÛAtYÃÕRŠ»ušëÁÅ‘Wm¨ù3|¨é‚Õþ^6.Hˆ^—÷ëPVz Æ8¦|à2ÆaöÏàÑ€ •ÅÈ"ˬbTj/â4o|ÌaN/Fu» R½õ©ï`´ ¬tðÁ/}ÉOLÞDÎá˜dý;~–lÐæ~ ƒsƒNúç=hw]”éàŠŽÖ ä©ÂÑÚ›pS1 +É6i×%Mpð9ZQN=ÖtEB”N¡Ç½|r!ßEIÐ*/I+ÛrìzŸ`Ñû\^ÞrÈDk6ëÆi`E=�¼ÚTÈ*þ+,i`ëÔ³ê;VDÙgŸ¢Æ”î!Ëc0ìÙÂÙfä–|ŽÆÎ_‚‡¥())¬tæ,¨Ú\€‹;¢.9ßL•jh¬/‚¿aÄ ©\–»R:9:®W•ÎR IÛV¾e´f\ÁJzœo£†8ÒñDþÕÙ&õº¤ RЧ¼jíO°¹‚c8çÃÔ¨‡t*~rNœ"%A§¼ xÔ¼›KN¡©ñkTìü 6©¶ã¯W¾Á¾Õó Ù §1ÜÉý´Í¿¬Ë»ÿØ| {õÖÀÏ.Ç h¾º RÄ2|Ο2!K?£ôº`ën©²q¸Áˆ‡>Ž9Ìb@Ràäî6ÀµãrøÓö véîrô2âá˜ÔÃ2·Á‘¯—¨ÛÛ‚qN¿õv7ÿ¶îù (¥ ý‘’l“v]R™Hîn^oóÜ ¥çéËz'Ìaƒ§è(ËG…ùÞ.~Cóö¿J��ÒIDAT@Ýþ/t:�Í{87¡9Þ¾Áø 3C¸~ǵv’ßþOãÁ¦ŠûüO¼O3Ý‹ºÂ3Š·uzX‚wô ޾€^÷Kx]¿Á×[Äìø¬¶ IÃã(íñü—4�cÃq”•U ¬¦ƒ…d$I åÍëèn#ÊØC?8¼´}‡ãmcuÇù~‡¥¾ï¿®ü³DpÎðI}/¦×²Ýù�×kvb ö•d›´ë’*¸q>9ƒ¾é-uÿ4×O¢pÏF$eÀf1pÁ¨.‚Æê]™`e‘”`}0ÖáZ³iôÕ]¤ÏéôÁÜøªÊJ…©¶¨5¸fˆñ  iÍ…X²]yƒ­0‹E@§¹(©û;OWbg¶ ªÂ:\ù®,xþE…ìÒï%«´H}lDz,É3mÆ‘c– RóðNß {#¬ž1baîÛÿÀ7=¿óÓ½U8,:oáLe*j¾†¦ÅŠY”ë…£¹ 9¹EØKò“ªƒüà¢*<‡á9 öe›”ë’*H s JsòP´—äÓÞ‰üÀ©öíÐ O+~œa³¼„]÷1jú¦ƒó»¨táÿ Ï7¡ÝØŠK§öa[-iåBà'ôW4¡ßò#šj>DNþN¨ËÊñæ½ÿ«ã!K3'ž”mþ æé%~>ÞŒí›ÊÐ~ψC»5¸a{·Û GOŽ·I³x!{RlÀ¿â˜ƒ­ák´9#]†Ïu õE{¡wÐV€TIðvë§Ôiâæá¼ mu9Ô¥¨Õuat†–¾¥0Û¤Z—´Aîß Ú´ÇQ¦ÞŠÚFtŒ>O‹],æ0‹?f:M8VogºU›·CgÉû`ªû¹ªl¼—ÿJi,¨åûÖþ{p<ž/dl¥âŸ œo÷Ðwç>¦˜Ã,ä eÖÊy!²3™Å;ÌFk;ê ¯äù>Ô“f7Ræ¤à€%âŒÛõè8&>8ùYå¾ Ôœ>¥¤ô¡2Ñ‹VéOF”/Té¶¹0‚Ž[,pLÈ<ž¸"¬$sŒ MðwWÙ0‡Y,–൛P_ñ)j#ýXr˜ðm…{ÌþIغ€þ|-*vå#§¨çô? KwéíÁüñ Q!åÓ ¿Dß<ÿ¬%ó[õôÚ¡?x盯Âhø;N©w¡¶ïyðâ"sRpÀ¿R!§Ôí}QŠC0‡âJJɪÛä&1|±$´@pŸ¥+Ǫ\\0Õ5à§ÁaÝY‡šQñ¡f«}-Óˆ!÷]I(C^RƒátÆ€³Ðµ˜au¿¤ÇmÄš˜pÜÃݼ³÷|º«»+jqþò0[a œÆzÔ[ž`Úr›ßÕÁ¾ÄO¸×P·+ª¬wŸ{F·4ãŠÌ=HÁÿJ„.‘Ê+ý‘m¬u÷<´Q/T!¶¹d×áÝ7v ¦IXÌh¼Ž>VÝ+ 2¾g…Ýϰ–µ“ø=Vdˆ‘_IÐ//É€ð=JÉ¢CÖ6”}~E[?„zW%ý»Ì!Y2^­ˆsð{'1þð ‹aîìÆÓ¨(?…6{¸]øàhkBߌ4Ï ™{Pšü+V¸D:(¯ôG}¾PåØ&ç4`÷nCÈ„~VV~=.\Ó¶á¾KhwîÇfÔìÕÃF~vÙaÖhaö(Ïef³È¬*»³ *nÀ09@|‚2#Ü‹÷ÑøÙU¶ËÌâéE[x˜žM&Ø^Jc,2÷ ü+ V¸D:h¯ôçƒýñúÕcÁJˆœùB•d›þI hŽ¡a`\èŽu@wSB^àÝuüK´}Ûò3¯Ï¾ºý+»Œ ƒ9Ì"CÆÑ·³°kõ�תÃìýšâ³l—™!$êÎé;¨¶L†9Òâ@ARhÀ¿Â`…K$„ ìWú{-2ç U’m.?jÆAYìÕÆb˜ãgåз*»Š­0§�úåƒM[‚m|?äœ Œ«$&õMäT÷`Z†±‰A1îQUÑ�ÃZX\; *QPX›']fF*`…K¤„îJ¯gnëϲŠ+Ê6I¹çã_Ãx7x€m­ÝƒcJÆpEÂÁï¶¡_αIÀf ð?Åà?´Ð~ÁŒŸìÜmEIÍUØÙùF8²?q^wåc¿qbýΖ0‡9S`…K$„îJÔC»mzúÑa]•Žwò^¼À¼@iãætÂæៃËnEŸùèµgÐ`e‡èá<½8s°-esÆÀ —H Í•þ^ÏòÃ.\¶Éu´–rÛ|m–Ò¤‹›Kk–ÂtÙ&ÏaØ$!÷]I(MÞU¸©ã5j徉ìýíp²•F€EÌ:zaÐ…Fû=:Ç0+áákæ0g¬p‰ÄptVúã&a©~'Ĺ‹ÔTòÆ Òl›$u]ÓJœÜ•:”l)…¦µ=7gDû¥*J7§\–0m9œˆöÒrNÀ2­¼-w"»’ ^^nönß§:1èâÇnãý]0uDÎ>ÄÈp¼p´V Op¦äMÔÞ„["{¡¨¹q³msaßSÞ•¯4„[‚‰ >ââFÙþšió1@Žã«$ÚžÂ*\j_=Á·ÖÓ(Ý^-ü]—MÞû´ÚfH¬Ü’í[”® ™F_ÍN¶ÂI¶çCT]úá•[ )Ýö»nئdNæ0‹Í?±ß‹Zó|ÜK<2DvV1*NB©fˆwŒWp“(ß²Z³m­�ç›Ä¨áŽt<‘d,¦¨EKr/óÊWºà€yä5…–ì0÷°ò¾ñÃÛn¹U§5 uÛé£()7ñ®uêñ[ÏawD'o*Ínù<Ùæ²ãØ[? ˜Ø¯4ÉF;0+„d9ØÝvЕÃ|ßx[¦Œ,bB¿*„zyIZ¹Ò•ƒÑÜtªs¶ Ô0?7Céy–VŽ! òs·—Ÿ`I3Så0›ªªqÁðj«Óhh@EÁvTµüÂJK&‹Û„ò’£8É™ ¶ÓUj”³ÔX CE3ÒÔFYfn²GŽtàiÈ6çµ¢¡8 okmò§T’mrS¨ß¼’#¨#rÕBqîflÊ.C³ƒ­ EŽœDÇÓì!Ü,l %P½­…Má‰HŸVÔËKÒ[ÐÀòû¯è©/†*ª³ŸÓÄ_¬¨C�çüŸÔ÷bzí¹ÆÁ?û�×kvba\’… ŠzÐ<ž¸¦…_’{ûjlaAþÉÓÁ%–K61"äXOƒ¶š„?ø2µúû•È+8€² ^w%49yJ³M[y»šªr¨ÕûQQׄÛãs’ Ðʆ€9(Ï{eäЫæŽ–äAµém”6Ûy«T6Ä.•ýò†”ÆV}€“½n,8oã"™4S|`š!^8šË“[„½j5Ô%ùÈâm\UxÃsÒÌÆéîAÜ3ô9‚ê––F&YÖå±õó¿ªTØò[µ(csÐî0à±]CCõª“§G·cšŽrÎÌ6ÓÞiö܃©á8Êø‡ZiE=ôÝ¿bÖ¿¤ø s˜¥€·ïsLcR©ãèÑ£ÁŸ7×àUhÉs­´µº.Œ’²êAYZ†Ïý :õ ÐhÎB×b†Õý’­ÜˆsJ$d½ÃLâ¨Ôuƒ¼›$Õ³ÿ1,~²ixe%o3÷þz÷›Ùf±�·å<Vÿ�‡/ÒÈÍ;D3Vèê;eœ<Šs˜é¿þõ¯€}ÿ*ž…tÜ’ft¡¨…lÇdmCÙç‡P´õC¨wUB/QêŒbS²—¡ uƒ/‚¯™S’8¼Ã¼ï0ŒOÉ̖â«úºJ”–‡Öt³ÙšnCé¾:ÌÓfT¼± oT˜1üÕ $o¥úªíÈ¢%ÌÙfñÌÁ¦7>ƒY*Žï³XôÕ(ÊâÇx™âùÅ„9ÌŒtaûöíû ÿU Ü$†/V¢€Œ'¼ì¯štÏ5zzIA´; ªâ “%õÕ¹Åûhüì*œÌcNÞ)ÙÇ;lOzôÁÕׄºŠQVÝ�Ó(‰÷Ái¨À>æ”$À ¬ö¡`·æGᱬ^Ž^Æ‘Êh ¶¦FZ‰ïÚ¢þîÏG>ÔQV!«¨ ºË硹F‡ÃÌl3]àï–£¥[>†þþ4? s”³¶£J§‡FÓÅæ£4y©auuyµ)e•yɮûoì@MÓÕ•¤]Gßøk².%==ˆ¤”y; » +ǪÃìýšâ³,¥L²x‡qaר­1ãѺºüsm>Êš³0Øfƒ¿cÄÎJæ¯ ##£„@È‘‡™Ä-w¡±æ”©ß:ÊÕÐ[ÁjHKtÄ0+É6½c°?Éú`ÏF(>MšxðN²Ç†ÎÆZ”—íū޲ÞG`òÆa‰Å0§úåeµä`uuyµ)e•™ÔؽÛ�׺DºçE=h6m ¶éîóâ0羃üÜ7YfÑðÃëňKšÙWæâ¢:óÚÙ�âÀTjÐÚK™Ã@!¶é¾†Jõñ°x_¡ªdtv^vî1n.ÄÖÃ]p³1 œï ¬QSþ4­½Ìa–úååÇQV‹!¥„¯.¯6E¬2û'1 9††q¸ÝîWm¬:‰vNéêAþ§ü‡Ã/˜ñÛ ÍÝŠ’š«°¯[ubÄ +\"!Ñú°FAÜ&çsc¤[Ï;0‡Qwñ4!J²M·¥«iŒmŽǰÌæÈp/á醾æSTÔiQ§€Œˆ}8Ζ*"];Þ&?¬Cª _]^mJXe^~ÔŒ‚²Ø«-b˜#åa&pŒ MDÙæfÄ +\"!ë³d¬;È&{Z¹0ˆ3ð-j~p!#J²Í™ >d£QâÝŽ~hjäÚm‰òðM†d?J’5:¬C*ùÏþ‡Ã±Öˆ „¾&ÿN5¤0Òñ¯a¼k…ÕÚîÁ16'9Ìüì²®?  ¿üP3*>ÔÀlµ¯Õ g$�ïÀ±Â%R¡@‡™Ço=‹Òæß^É(J³Mÿ4½?@GœyÝe~lz‚ˆÔ‘ñãëÒËøšp È»K†d?J’5.X-†”A­ „âéG‡u5žƒÿÅ Ì ì‡‡&l/¥1Š4övÖNÔ[Ëÿ€W"áÿËu+ëfÙó0‡â{€Öòw¡ŠÔ§Tï£Ú0 ·OÆå%Ù&ÿ�ï=ù¯K²òwB­Þƒ¢ÜlÔÞ„›r0õxáh­@^ÄmÓ7QPÝJuž}"g2$ûùxP’¬£ìZ Ô¯Ên�=6°1-®¼ƒjˤ$6C‘†\¸¦mÃ}WHð6iͨ٫‡üì²Ã¬ÑÂìa.sÜ0‡YBx‡™¶<Ì!,Ù´x;¯ºöÐÔ;F\ÕìǶª¿ó?›Ðm•*d›Ë=¶©vBÓ÷øÕª²£ÍU8ÜñD1ö”È|” ]›ÀîŒW5Po«‚žüÜmçûGðý”A¾ÉìçãAI²FGÙµ¦§§••Ç8 :là5¸;QW×´2Ž\©CÉ–RhZ_ż·_ªBaa5Zlžtw˜_àÝÍÏ/ÃXr íÛ~ÌŸý“è«Û/x2bdSŠCˆy˜Cð?FÏn‡M4—lq´ãið•Œ(È6¹?w­OeDvJƒß›lµ™gîž 8{Û-ì¼#Ýp´3Å)ã‡9Ì)Fáµþö·¿ô¨ÔjyTØÀëð=ƒëùÊ“bÉöm ¤PhÓè«Ù™ +̯cš÷B•]ÅV˜wJXq)áàß0³ÌpspuB¯%‡èth1ÿ[Þ0ŒPd›œ×Іû¡½5ôêœÅàM4U• Tw+ðú®ñkg«ÍA–àuÞUä»’œP%É×b «ËD‡¤)u•™ ˆƒeÇ?°·~@·›óÚи+Y‚ñP†x‡ÄmC¿ƒ•ÉNV¸DBV —lœüPŽÂ%A¸Õ@6‰»-8€Ï?ÝŽ­%aWyFiHÙ¨ ÛäžòÎýá1së›jG3eü©~eo±“û¸F©Ÿ—áµ–àééÁÈkºöÒHz<+oJ¥¬ÑQn-†ÕÕåÕ¦ÄUf:l ¸) Ôï@^ÉÔ‘LJ5‡Pœ»›²ËÐìf/Wab$L`À±qq–‡9A\T. TDR½…bífüüÄ3ÞàÄ¢]Ï ãò;.вÍçè;ûúž„µoS^IV8…·ØD©S逯EÎ�|†’ª¯"ʹÒH±Ï`t¯X)5Î’k1„®.¯6%®2ScñÀÍaüv 4UåP«÷£¢® ·ÇÃÃ"ÅCb$ËÃ,!1dx!M¦Â%C›öÁà ¬Ûæ x­çP,ÑÖU\(Ì69¿ÿ5» Œ� Þb'>»†;þÔ‡äw©Bx-â0—…È­•Qæ0+³CøêòjSÚ*3‘™±1LC™B>#Vx‡ùã¯Ð'L)d¾5Ëã0ãå/Ðî^)ÝÌã·jûÞ{ÈUI—~'.˜m¦)ÊÝb'»[ÃÝ ½%ôä½VMÍšÃIà^ôAÿ#%óW`y2­[¬_ò³¼°\ÁT9ÌÊ«Åiuyµ)m•™ÈÌØ¦¡LwJ>®éãçðÑàxŸî+|Ìœ’XŸ‡yëX©„Äÿàç`°>‡ß¦EnînԴݧ£�³ÍôE[ì«ÿfçCe^ï0“꙳/þ ¾H­"¼ßßà :DB³¹Ðá,ŰSGy-"£RQ²ì©‚i(Sàaê®õ°´r‰òÌ••08_=,Ã!qÄUš1|J¸Y;ºIžJÓ\‹8ï#ôwüˆnÛ$ÅÙæ"f½0èÎB£ýƒc˜eiäÖÃMÃÞm‚ÑØ‰A—=‡ñþ.˜ºGàQ€¾·ÿR¨Ìfðï ù^©t@¯µ.l(Ò„}ÉUqép–”_‹AÉN§’eOLC™Â´•68hó'œ†JTšÿ¾fÄÎÆ›ÕÈ«¾¹Ú›ßsõ6lÓ?XŸg<ÌYPýþ—0;çÁ->„a_.²Š>Á‰òƒÐ 2œË‹¢l3Rõº7Y¥¿ˆLÁR½µæ ø¸—xd8ˆì¬bTœ8„RÍ<9Éã@à@¸oÁ’<¢Ã¼`…á:%!×M\±Çu3‡…A®S’¡üZ tè11'»§mýÏyK%cJc3$…û ÍÛßGµÙa%lÙß@uÞnè´­ Î}³ßB~ÅtôßÇx`ud£ý?BWQÕÃà\+”R^%x_´årÞ(ãeñ ŠmÈŠ‚l“›ì@ù–}Кmkñ”œo£†8Âr/ !‡þJ[0Î+…›îAuΔÆàç&`(=¯¸C¥¹EØ«VCh¤$ú__²7øZ½Eù( ÙI¥"¼9ôw¹E{ÖdSï-Bnv>JV_ä?DÙ¡¿<w9á ô+ú¾5ÁA–É×fúk1(Îé Aq²ó}2òÙ—Œ(Í–E¸;#[Uˆ Ýè_Ùî¿þŽ ¨Èoì1À™ñ¹cÅÏ€»HÎÙð¬ú�µ=òÅÝ-?ºŒõ·ðûØMÔ¾<p5§©–'O9¶é·žÃîuÕ¥x‡–ÉM,?Dó ,¿ÿŠžúb¨rNÀ2½ŸÓ„#G:1Iùì‚ôÝ5Ö9ÌëÕóºF£Ã<GæïPH¶ù¤ìñ5 †FŒ8q€¬Ž“É3ݵèÐcb(Nv÷¨ªh€!XÛhl‡áB% 2£46Cr¸?0pæ#dóƒtŽÐ¦*8…·<+ Êg5vq>·&ݨ(åJ¥¨½ðú$Ì k…KÈ}®G¯gN‹Íy´X÷´dB!¶É9À'õ½˜^ ¿àâ³p½f'öÐÓš*B —ð“Æ“½n,8oã"IØbÅ åÊ"¶·ÆºŒÐ’€·UßBpRGcHF($óPšû-¸ÞTƒâ²:^Žªú h¾>€qJÒ§ÇØQœì!e²WY©ô—ýÆ I•{wñ±zÀƒ{ ·õtµ(U«QZñ.ú©€Áò:Ž—£¢NŽA¦h)9-ÀïÔsxiŒ³U”mzáh.CÎêjcI>²øªð†çXZï¤yŸcвt`± p &ï ­?<Gpx¼$Ňþxa=SÇ @Ý¡¿yLXas<Á¬ï÷W™‡Vã¯9f;`ëëÇÈö¤8§3EÊxftA¯%ùúuh¾ôþÛ®ãh‘¨’¨rï.#.–8¾¯uú :<ðIaMÍ2|SÐkТºì ªµXl.:TÊPœmróp ^…¶º|eA×…QRÉŽ‘Vˆâ%Ÿ—áµ8ø­(ÏÛ"竦*8ƒõ‰ Ÿ‘ßËÏ<¶›hÓŸCMÅnäç£âœm]:|úÑ÷pP¹!„=&†âd_Û9U!«à�>ÿt;¶–|„]åM•h‘E¹w—?ü }ÊþO´ÇQVvZƒ6׋»?¼.º›êQ¾û N±IÊëQŠmÊp2›!Â݉ºº¦`¬d°µžFéöcQã%S逯5›¶yߢ=T^ãehÔ%¨Ò_åî}ö•SAŸ³ä‚ñ@ÌØîèPúÎT|úJvŠšóm°²fÑQšì$UënÕ[(ÖaÆÏS:±h×ã3‰Âã”{wÉៃ‹ŸÍ7ÕÂî²SÐw Â1å“ÄÈ2â:ÑÑxê]5è)S†¢ Ù6e8™Íñò ÆÿßE˜‡½ñhÔÔŒ‚ÏKŒðZäp\Μ½À yGºáktxÖ¯¾¥RÖØˆ”%ƒÇï…g| Y ³è(Mö%›ooÚƒk¥_®8ÌðZÏ¡X¢ØÊ½» Ñà|8¯£ñÄ~ìúì:Ë”7nô˜íbC™ÇHGœ,D#.¨³MNf3äAà@¸Íh4ÚW²·¬6RD£®YQΩt@Ö]Ëÿÿó ¾jü â\úݰvõÀæ‰<aW²£GJÖ£âdù ´…»¡³¯Ôˆõ[5È}ï=äªXZ9F²x`‰^|8À’×ÇYˆFܸ`,W£ê49x¥>Š’r“°Ò–¬,Ãçü ú›H¤$Û”ádvºÁùÆ`Òß'øšVD´…¬=ÐÙæ‚o"ø¼Ä¯ÌW¬ÊEÑÎä•11ÖŽýÙ*¨Š/b4BlX*eMg”¬GåÉNvRðó 0XŸÃoÓ"7w7jÚîÃ+ÑÊë%™‚Û„ò’£8É™ ¶ÓUj”³ÒØ À;Ìê¬À€³aS‡•¦•ÿœÖN4žØÍÏij ¦á~+Ü69O/ά‘ìdvzà‡×iEgãç(ÉÝLG_x ¤Ï®áî‚FwÃV+¬km7|^b„×z »®ÛùÂ_b¬¹g¬$%ÞK8ôŸCg¹ò¶R)k:£d=~üñÇp8ÁW”âéG‡5òuVé!Qc/C%”âpáG}^„öQ^ße¡[µëJÓ¦’`V Ê ²ùû¼yê/qéŠ:V˜™m¦-¤ ¢½·šòm+é÷òJqêRt·•µÂÌO4gçã‹›|^b¯ÅyzðåW·1MƤ9 Ž·`ÎïÁ ¦<bYéTÊšÎ(YG¥ßaŽéYÁB2Éâî†ÞcIªAÕÏ• yæ”ÄÏŸx1ûRØA)r˜¹é;¨ÝJRLmE©¦f‚r óÆÊ³Íô„›Dom!T›Þ@n©Æ1ÌìÃ’I’š˜‡¯€°œ¯-æýAª³uŸ—áµà¼þòTœ‰œ/Ð7·^fáçåâØÝ뚸gvŒPZ ;:ô˜Êp˜C²Õ\©C ©ÙÚ<ObDû¥*²JŒ¤Y·BœiààŸz€íGx#ïš_‰§ZD] ¼«Lø§á°èQSñôÝ#üƒ~Þ1®Qp¿™m¦1‹˜uX ¯ù 5únŒ¸çá÷>€¡á'e…d$ó5•ΓðZ‹xjü…U_s$ÍÔ!§7¢#A‡£ç‚©² 'Â΂œ®Úƒºûü·Z„ûÆ1lÝz 7Ütæ=g³Ä„œ!Y²}‹Ò@ØQ(Óè«ÙÉV˜b²€)ÇMhwmA^eƒ()•ªÁæ”$ ç›Å³Õ“ôS^ø}O`m9‚< â69ï}´”¿UVÞ¢2ÌÙfZÂ;œö–O‘«z Yo©ÜHÎWùfÿôwÝ‹¹ü8-³±4E{ÕP“*š¡íˆãËÌa–E8Ì!,;þ½õ˜ ±ñ•ØÙQ3×$‹rï.# –á› ¦Gz†)ï|î»h©ü€Å‰&ÿ�õG‹oäàï‡ÉÜ«cJ’NüZÖŠ‚FQﬨÞúTÌ7Ð14|-Pn›1fô0÷ÐÕê—çQY”Ã;$vþšÌwÐÙa]É«K1¡ÎO"9_Sî0“Uð–“8ÜðO¸çàzðxewË?ƒqÛ/°¯†b­‡Go wÇ_“ž“n˜ÃœB¸) Ôï@^ÉÔ‘ˆšC(&гËÐìX§/ʽ»Œøà–à_жÜ0ñ¾.˜û¬pL±Âñã‚Ic¢6Ç2çîA}IT›ÞD~åØh+ã¬$ÛdÙfb‡{Kýäª6A•­¶çòLDàü$ó5Õóò£fìØ¼ uM8]ñ!²ùþ^ø×ïñݾ·ÿ¾iÓÛ(ÕDL¹E‡£çÆ-“óaò-?ìÂå(©ûhƒ=&†âf7‡ñÛ-ÐT•C­ÞŠº&ÜŸ‹ØÅ€9Ì™I‹dSÔK9´rÙÈ*:Œ~Àßè |¬–ëþ û*ù‡êMØÆ~†åg V˜•d›,£Gœpð{]°u7¡®¢,ð@ë¶Ù1h¹§¨æÀ÷ˆ3ç«ðóÒB®åéø›+̘ÆÆ›?Â&µ÷:ª±[ÓÛø“@¡•ÍWhsþüÔ+R)kt¢¥çT!§ºg%ãåСÇÄP¤Ãœb˜Ãœ)ô9(ªl€Éúr×3Æ…kºŒ¹îÃÒt ꂨ p Ëœ!ž^´õ?%K Dã'üò0úÞü¥Œ(É6YF8pãfÛPHŒáJˆÆÿAœ ï”uè/"ü÷Ù øO*'r-·±,»é…U“p˜­FÞÁ†‘§¾¯çBlu:=Lu\ =¨hl¦tªZ~ÁÍãBæ0§ðçZ�–‡™!îÐípÙ-h:µÅÕÁl ¬6Yò„Æ0“‡U9jôß ªøƒ@¬°Å1-ïêé«¢y… 82 $Ûd=â`ƒ‚>yz<¡Ü"rF$Æâ?Q?/äZKv kú0t˜ßª€×Ñ„ƒÏ ¹½†K_B½­Žâ´r^LŒO…Gí—°_3Äÿ+ýСÇÄPœÃõ¹Æò03’%4N”äÞyúÆ*ìé¦ÛpÌÒyêXy‡U ŒnÞE&ֻͨܚ…<’‡Ö6)ãìþU 0¬­ÚðÏ •(0_e\(Ö6YFqÁTU †WyR†TlWÄŠ¡Ðù `Œ£øðóÒ¸–Æcgañ<¥j+ÞÕÝÇ÷S=v徉,s]9;I*eŽ ?6và·Õ Cæ„Ã\‚, ¬ ˆÙ¢C‰¡<‡9õÏ5åÞ]Fâ¬Ñ ñ…NÜm>‚­o¼ƒR 6;ô—Äa>ƒc æ†`v�~Ö›UŒÊ‹ðÈá$„ä®\e%ýN>ö'xW€"h·MÁEÊ3zÈÎ<ž¸¦….޻ߨƖýípR¾¹êü$Rü'•ÎÓêµ8ï(Œõ‡Q^{öðüÐK´}Û1vœG/ÚŽD¶ëîa}Aoú C‰¡8‡Y†çšrï.#qNI+λ05S‘„üEGpqðIfféÍ~îsàÏ@lð-hÕ[‚ýfä–|ŽÆN+œ^º–G8O/άAËè ºî7í¶¹áE–mæµpÏÐwæª["gk ‰uÎOœÅRé< ¯µÏ­. ͇¹ Ëaºl‹èxÒáè¹pM£Ça+¬ÖWÍöУ˜37tè11êëëñøñãà+…V}³ùÒøo»ŽKö\SîÝeÄÇŒ }öyp¾IØï4@½98{Wå¡äÄEtZðRš~\0–}€¢|²UKtº’ç¸{ÄMÇ@ïƒýq¸·ˆg#äYñGI¶ÉÏÆ²KGs~b-þ“JçIx-W_¶Ò‡Â[Î X¦×g:&ÿ&?âÅ,%¥„=f TßLvw3· eùï#?°b· ª¼RœjºIO&EL+Wpšö<¢-æÖ} •êãa¹ƒ¿BUɾ•¼²ÜcÜ8\ˆ­‡»à–Ôd›ìðl(»Ô±ÀùI øO*'áµx‡Ù¤AÝ•Øqc;Z5°½ê2lSë'+©”5azL‰TßLvw3…ÀÊX6 ÊÏ }` ³l5YDè.\Bî}inö†—›UïÃã–ew˜d›ìðlðI—:u~)þ#ŸÃÌáåÄþïF‹÷Ѹ_‹aïúÉsôÄé1u$R}3YØÝÍXá y‚ÿû5%]}x88"O±†™ >ô_„à_€çT©¶ÉϾ†h¥Žýðù”’_ñùf?Ü?~ãoOB²M¸árü„º‚m‚ˆ«Ðáè…çí^UúcD$ê›ÉÂîn¦0Ù‹Ž_V +*Kã¼KAå7Åá‚©º—ÚW·?#´ö‹¨ªþ1bJ'¹ð[PNƒ£ªTÛd‡gƒ×Û™ò6zwd‚lèüC4ZëöG-ƒ.«Ã1†™·Íí‹:?/Ѳd°JŒHpqWßLvw3÷¨®ºˆöHÎ\°µ_ªAµ‰¥ÃŠŸh}XSGÎ*9¾h-ªH2©ÞGµaXÞ\%Ù&;<^8Z+§ ±·µö& ª[a¥ø ‘shUÅþ—íŽÈ%5Ÿ—áµx‡ùÚ7ÐÝùYmÂjÃT”~žJY££ì¼Ý:ô˜p³vt1 ÁµÈó>BÇè–°Þ»»™BÔª8¡-ú‰oÆF¸p­Áˆ!ÛŸëÛ ?Éâ0b½ò*  [¿ªÙmUç6¡Û–/7•(É6ÙáÙØY²Aûv>*tm»3^Õ@½­ zòs·³”*ŽÜß5¢Úhôí_Áç%Fx-þ/àýÏX;¿‡–¶Ô]†yƒ¬.©”5:ÊÎÛM CœÕï ³sÜâCöå"«èœ(?Ͱ4Áìîf îŸÐ`‰àÈ…´ƨ9EñÚÞ×Ìj_à¦Ö�gðUJñ?FÏn‡¥òZ²žÅÿ_O‚¯dDI¶©¤в³�wÏœ½M¢¼CXFý7Á|I+ç'ªbò9̼Ÿé¾ômþ÷¼­–ŧE(Q„r}äü×Ô:z ÊÛM E’®¾.Œ ã–üÁ…K¶oQÚüß÷–0m9œ7Ê`púÀ¹ (e‡þIá4@{óEðEü½Ð6> ¾`ÄŽ Ær5ªÂÒg Úé£()7ÉÃ,¨P·51ÌJ²Mvx6N8øýaÇþ”Ü@U1ùæ?ù.µ*U ´ÃS¼­®–ë{c=ïTü|ß+èq˜—ásÿ‚N}?nž…®ÅLuØN8ÔèQŒÕWnÃùIap7íU£c·oùÑe¨¿…ßÇn¢¾ð­`œû<œ¦Zéx"‰ÍÐÒKRã6¡¼ähX.^a;]¥Žz€…±,†9)”d›ìðl¤Q 3!Ϊbë>/!ÂkÍæ}›và ¶ê0{øÿ–Sœ%c ÞÑïQšÍ;hYÛPöù!mýê]•ÐÓV‘”rÄX}]²ëðî;PÓtURe¼Ž¾ñ׌©`­pÉ&¨ êÑ뙃Ӣçûæy´XÃψs˜3Ã,!¼Ã|@ƒÁ… º(çEßÍb˜#¡¨fvx6fÒ)†9ªb‚ÏKŒðZ^ÚP¸­öE¢\â0ã½ü·¡¢¹Ò7Ãî,¨Š0Lò\¯¦m$ù£?» '¥vB#b¬¾ ƒì^t…²?5»C~x§ž§ì 5s˜3Þ)9P7ˆ²Ãr/ú ÿ‘=èã‡w˜Ë´°n8m_Âüìœ<[ùÑb˜mq´ãið•Œ(É6ÙÄ3¢Å0ÛÐp´SQ1̉T ý¼Ô¬¿¯ûÁË8¯ùÖ™9Ø´ÅÈ-9‰6»ü«áQ L°²°Ë0±"ãªÃìýšâ³¯_¢­¾ÖÕ¡qp*&‡þI hŽ¡a`\xžd¬:ZÎ:…íú´˜ÿ-én)s˜3þA_öº­Þøf_¬oc¼ŽXf™áøs¨3eK\(É6ÙáÙ8Y‚×yW‘1©¡Nd"UÅäu˜#Xa¼Œ›JW˜Aûl ”Mç!sî;ÈÏ}S1y˜ébýêk<çV–5cGÄp*JØõIæ0g ±8%Œ!1Ì­U¢–¸P’m²Ã³q ì˜T™@U1Áç%&úµVªPZ;/âD ´wŒîõ=-•²nˆÿ)ÿ¡…Æð fü6hs·¢¤æ*ì4ŒSJBŒs+ÜtÿÆ»!¹¼íSòW2Md×'Y˜Ãœ)­äÂÕ˜6†¸Ì¦?‚â5ê wá¦&¾k9–¸P’m²Ã³±£ð˜T¡É÷›8«Š ?/-뮵Z‰Psp%ËïØ«OýW.Q¼Â!3ó`dhŠû3¢ ƹnvЧ°0H<$²ë“,Ìaμÿ†¾âC쮃aØÍVš¥€HÍL<ÆsÊf9–¸P’m瞬ÒlØX s�…Ǥ’{¹F„´rnjCQ2>/1Âk-aº÷¶’íôÜýÐðhv¥ïcÉHÃS*eŽ ¦ºü48,\ÑjFŇ˜­v¸¼ìÉbœ[‘¡0H\$°ë“,ÌaÎ08ß4&øY<v2–DP„mò3;<+ÊŽI8‘îNÔi®c0Ô‘ãÛPógøPÓ«ýñº“úò9ÌþY,ú/PQ£G÷ˆ>ÿ Œ¾Ã5jC2bHÏ™µõ–ÇTŒr”fŽ‹À.C/ º³Ðh¿GÇ`|…–ä( ñïú$ s˜Œ´'õKÚK¼5;<û Ǥm×î,¨UüWXܯ¦Rä÷©"úµ–àµ_F9?IÉÊz“Í1Ì.\Ó¶á¾+ìíc3jöêa#?»ì0k´0‡­œÊÕ+°‘r ¿‰‚Ú›1‡ ÊQ$.<ý0 Í„ÉáÃC“ ¶—ÒHÇf#Ý‘a`I[bq˜Aܸe²b>ÌÄ–vá²m.øŠ^N¤û'h›+Ô‘ãÛcó)ìÕ[?»7 ùê&<Áï›J'4üZœoöÞ6h+‹‘Åÿ›*¯§šn` ó' ÍÐÃüìîõU—hû¶Ô?‰¾ºý‹¯¤šW`¹É”oÙ­Ù¶ÆBlbÔp"vgW†Â quËB2 F¢È0°¤-D—ìðlŒDÛbW)/$Ã;ûãõ8K¾í#¥9ø§{QWxf-6[ðy‰^knËi”änÆ&U!*[mþ‘JY£ÂMÃÞm‚ÑØ‰A—=‡ñþ.˜ºGà È¿€GÍ{¡Ê®¢b…™æX¿õvœy!q;ó¼Óìèü.x ™¶t¤¨«kj4¶žFéöch±y˜ÃÌ`0@†%ma‡gã€âÒàJ¨Ý[ )݃ª–_0E¹áÅåD.?DóŽ,dWÞ b…9€.ÛM4ÕUb_ÅWh꾇±ÁâgjW˜§`©Þ‹Zó|ÜK<2DvV1*Nâ¼!xɤÄmC¿ƒ’”„b‘Îù>©ïÅôÚD‰Ä´?ÀõšØkf$ÚÓ‘¾|‚ñ?‚‡Yט‡½ñ¨d!1Ìaf0Ò–t‡ž/&ÆÃ‹öKØp€è&>'rnëÏp„8²;Ì!¬„h\AÝ®Ïèa&YUJ[0Î 7݃êœ-(%E6¸ JÏSšU%¹â Òá…£¹ 9¹EØ«VC]’¿šSxÃs±9»ô§#5£Ñh„HbÜëŠ%QH s˜ŒtG†…Á +Ì?6và·P»s;á0×£ K£¬´r ŸÃ¼ÏÍkèwŒ–âýÕ‡o½«C…ÃLVéh`ùýWôÔC•s–éEøœ&9Ò‰IÙ=´0Ä("%Ü<\ƒW¡­.‡º´µº.Œ’|è1B}:Òh¡†Y{ “èŒs˜ŒtG†…Áˆ܃íº{x|­Y“!ÙÏǃðZ~¾Ë—uÖN(­!!•!Uàd¯ ÎÛ¸Hâg[¬˜¡Ìa£8ˆdxzÑÖ~0/΃޴§#uwA£»‰aAªÇ<|6 ßkbö…9Ì Fºm`™òÉ?è1Ò®iô¸3jwVØza‘“:’u"Sé„ ¯Å;̦“¨¸p%Ä‘»‚ E(¬º ÛÔúµA:f¿÷9¦”P DŒâ R!ÊAo3Nq:Rÿfç×Oþ¤ ‰a3ƒ‘îDX iù/f_*vR–¬™ìçãAx-¾'Oð\ ø%xï‡][>ѹ>ÛG*eM+’,"îQUÁ;ºk¦v.T¢ °:æƒÞÔf‘!$†õƒÁ`0ÂHÖ‰LöóñðúkùáékÀÁê+3¤RÖô!ùâ ’¡”;絡qW>ö'Ö纎奱å‰a½„Á`0Œ0’u"Sé„Fºç{kç÷Ð’`Ýe˜­O¢†Â¤RÖtA”â )„óôâÌÁ´ŒÆ––úÒØ2„İ^Â`0 FJv˜9ïô¥oó¿ÏFAÙQ|ZT€õG(×DŒ?¥ÃaŽRé/ÐQlI´â RÁ½„ÛÚ½6±¢#Ô—Æ&Å„\/á_ •dÏF¬åBæ03Á"fÆÚ1ÒR0Á^C#ÿÐn€¾cfcOm%'Êu˜ÿ„Ó°*U ´ÃS¼ãæ…US£ûìõ08ÿ ¾ït8Ì.˜*Ëpâ4qð¢´ÓGQ²ã"•6E)"b¡¾4ö5Tªã´ÀF¾BUɾ•ÌÜcÜ8\ˆ­‡»àIXæ03ÐÔÔü‰(޵c¤1|ŽV”çm±;òð=…÷úƒg´AdM†d?ÂkÍæ}›và tïU‡ÙÃÿ·ëú’1©”5:.KóQ´W 5)¶µ€qœûI¾8ˆTˆWtd}ajpQºª{AÛ‡#Æ1,3‡™!ÓÓÓ¸wï^ðCLþõ¯@‡#øyQZ¬Ñ›’l³»»;øC�÷å…Pk‚Í5·²EM² Œp˜ÆBa(×aæðÒÖ€ÂmÁ•Xâ0ã½ü·ƒÅ@h=ô7…»ƒãPT>Ÿ$‹ƒHõEGÄ`fƒ}Á©9ÌÊßþö7lß¾=øŠ!&D¯ätôèÑàoä…úX»0ˆÞ”b›«“#2e„á·B³»9PêX�Õ¥Ž_‘¬™J'týµà¼Œóš`™ƒM[ŒÜ’“h³G>ð•JY£9†™{fÇHØÁ.*£8ˆTÐ^tD <ý0 ͤTÿÌaÎ@Èà ¤‘>C<V¨ÕFÃ*3Õ±va})Å6ÿóŸÿ¬MŽÈ”7Ã'gÐ7²â柆ãúIî1ÀIùS›Ü×dHöóñ ¼V¤<Ì?¦FþqZKcG‰a>]µ;t÷±ÈÿÏ}ã¶n=†n âàE)"ñ/HVI/.dÐ?s˜3òp_5.¶Ê,.«Ôj£c•™ÞX»pˆ¾”b›$çgè½f«Ìáæ”æäãRw"?‹”=ÞͰL%ƒã€ÜÓdHöóñ ¼©ôwšŸ­Ö>4W| yöÕ™ ©”5:Ä01b|™6‡9ùâ ’B&§½?@G&¯I+RVÒ‹ w'êêš‚º¶ÖÓ(Ý~L2ý3‡9Ã]]^ml•YÂW—W±Ì”ÆÚ…ºº¼ÚhµM²ºœ——'•­2Gb>× Ú´ÇQ¦ÞŠÚFtŒ>§. (äž&C²Ÿáµx‡ÙX¶f—‘[Šë{Öý’ßÉÂb˜Å("Ü3ôžü�*’%#'?éØƒ¢ÜìøzËPI/.^>ÁøáϰyØJVX…9ÌFèêòjc«Ì⾺¼Úd_e¦9Ö.„ÐÕåÕF«m†¯.¯6¶ÊŠ7Û†0fbË»pÙ6|E/ä~&C²Ÿáµx‡ùÚE4ßwÂív‡´1˜kCo{Ìÿì„ÃÜ€¯ÌîÀ¸JY£ÂMÃÞmâûV']>þõÆû»`ê‡Æ, ˆ·8ˆT,;ôØ¦Ú MßãW«ÊþiŒ6WápŒ½å¨¤n3v¡»ì0×!K¢³9ÌaÎ "­.¯6¶ÊœD·¡ƒ Ñièk²")TÇÚ­iuyµÑf›‘V—WÅ£:+‚žTÁ"Á·Q ‘5’ý|<¯µ ïƒx¼nñÏG[úfÈî"¦û¾BaбH¥¬Ñ™‚¥z/jͼ“÷ ‘UŒŠ‡PªÂúdxdq©X²ëðîZZÁW„ôææ_àÅF*éÅE´çZÖè$š3‡9ƒ ŽYÅ[mĸV¦+o°ò!º¥Úcíxˆ\J±M’ò.š¬¤1VqÁTU †öµ‰£ÑÐ€Š‚í¨jùSÌax¯µü¨;Ty¨¤i…yÉmiK « 7݃êœ-(%±²´fU£8ˆDp^+vì‡öÖЫöÁ›hª*A©îVàõ]ã×8¾Ñj3Ù™ìû#¬’žYw‹Ü]Ðènbx-FŸ´<œòIöL£è©ÎH5T ’i Uº¥9Ö. J²MÖ¢1'®°-[ÞɸߨƖýípÒhx!${_Siq_ËÿáZÆ*lxù!šh`ùýWôÔsF/Âç4á…y»Å+">ÜS#ö½aõ5¬©v4ãQ´~ug2´É¸[äŸÃì|j'&l¤Ï`ˆÁ3¤vÝÒk %Ù&ëGqÀ=Cß™#¨nI>½•Ä${_SiJ’5:KðŽ~Òl’IåœìucÁy5u¨mÄ eöBwqçè;ûúž„Ä÷FjSÞèrFÍBQK¡qÍ]¶î¹‚c‡/ ×ý^×opVó1;>«m³Æ»³‘>ƒazé`ºM%éÝëô$ÙûšJ»P’¬ÃÁï}Ž©`EÒ�~+Δ·ÁIÛÁ?Ê‹ƒp~rGdÈBñZÈ.ÄŽ\”Ôý§+±“Ÿ\© ëpå»2dó6LV¼³K¿—,$†ô {ÐKÓmr(Iì^§'ÉÞ×TÚ…’dŽŽÖ ä©Â·ýI{Õ­°º_R´#&aqpwCßá[•þæÚBɲP¼OÊ6óô¸ñflßT†ö{FÚ­Á Û#^>'= 8Þ&MH é3:Éô„é69”¤?v¯Ó“dïk*íBI²F…ú{;º6aÀU ÔÛª '?wÛ1K‰3ÊÍÚÑMd2 ÁµÈó>BÇè¶MÊŽ!2d¡x-D¦,Mà�(YÑÏâf£µõ†‰Wò|êα´r ‘¡bLS¨Ò­g�æ‘•mè,Ùaîq_È’l“õ£h¸Ñc¶¿f[x#æx‚¯h"ÙûšJ»P’¬ÑY€»çÎÞ^ÉܱïH7í¤ÏFæ,¨~ÿK˜óà°/YEŸàDùAùBÄ$b ;&f¤ËBñZ–îCWø%úæÉ!KÞa~«ƒ^;ôã|óU Ç)õ.Ôö=~@\ØHŸÁ°½tP¥[· å%Gqš”HÒNW©Qnt? ?J²M֢Ⴑ\ªÓ‘m.ÐNEI¹‰w­é#ÙûšJ»P’¬Ã;BþÔf>H”%Û·(mþ—x Ó–Èy£ 'ïL†ä:– ïì‚/VYij‘ðÄêíÊ…âõøà4Ö£Þò„×ùql~WûÒ¼Žk¨Û•UÖ;ÈÏ=£[í³‘>ƒazé J·1¥Ê‚š9Ì ¡$YSK´Â%aMmds’(IÖtaùÑe¨¿…ßÇn¢¾ð­`zµy8Mµ8c5=Ép_C¥úxØ"ÉW¨*Ù·rH‘{Œ‡ ±õpÜ JcaîìÆÓ¨(?…6{x–§Ðâ<âÃzIÃIé J·äð†%´@‰Ÿ÷¡k ±¾ªµ’‰9̉ÀúQ4\øQ߇¡O4~òVºúæ·BSÆædQ’¬iÃZá’MPÔ£×3§EÏ;–çÑb}.³ÃlDinöªÕP Ú>1Ža9‡™âÂ,rÁzIÃIé J·ë¶Ö˜Ã,&¬EãO¼˜ ËjÀfIP’¬é…Þ©çðÒ–ònfƒ}Á‰Asa¹`½$ƒaƒ¤tЫÛL9nB»k ò*›0èôò‡…A 0‡9!X?Šþ;õ�=ÚðFÞ4þ¾’zkau˜Ãœ,J’5:$MÛ Z´çÐØù€·òÚŠ®îxhsHiÇÓÓÐL˜SëÃC“ ¶—±é’îÂ,òÀFú †=襃^Ý.Ã7;Ì©ù SÞøÜwÑRù‹aNÖbƒóÍâÙj>WRaÌ÷Ö–#Èc1ÌI£$Y£(JñT¹`g~Ê0füÙ›ÞB±n„w÷1õÜJEU(/ÌȪ2Ø ­æ;t:H,3ÿÚzSÒ´~l¤Ï`¨$ÓªtË-Á¿mx›Çx_Ì}V8¦ÂOUˇ’l“õ£hl”ñ€ƒo¼&s¬Ž)*W«’½¯©´ %É’2ì]5šÇùqhÑæO¾•¬†ú@à;Ø•6ë_€Oîñ¨e­¡Åzže#È ?½…Y–5c‡j3r‹¶#?¯Æ ;Œû߯&Õ.èF_…Š é3ö —ªtKòiƵ…¦$Ûdý(.˜4&úJÇH²÷5•v¡$Y£ã‡Çr_V/—1gùÇ-øg )>(V¡üÖ”Ë=ÞÒXÖZd–ì:¼»½ã‡Å±ËøäÌ]~Ç÷8 »Ÿ\Yð(°‘>ƒazé J·í¹U6Àd}Ÿü%Ù&ëGÑ i岑Ut &«üé¨â$ÙûšJ»P’¬QYžÀõCïBÅËBäyÕTÈ©é…Lµå¢ã{€ÖòHòòMõ>ª ÃòÙ¼ÛŒF£=zl.;ÌuEò•µÎ Ë—ça™&®ñ,Ç¿†en3ƒg$‹±f#}C:6C¨Ò­ûtüàé²[Ðtj Š«¡ï¡ÚQ’m²~ ®é:0æºKÓ)¨ v¢JßwXæ JIö¾¦Ò.”$kT8'Œûˆ\„˜Ìwá¤0YàP\^tí!a|»ªÙmUç6¡Û>-­G‹a–³¬µÈ,;¯áPÞæõßqÓ»¨a•þbCŒ‹! Té64†™¤ñÚyúÆ*ìé¦Ûp̆oÝÉ’l“õ£h„Æ0{aÕ”£Fÿ ªŠ?€úT,ŽiªWº’½¯©´ %ÉYüï­¸¾QcÐpàŒÇÿ=gt¸íZñ’í"Žv< ¾’‰ˆe­GðpJƲÖ"Ã=5b_aô!“£ñÌCÁ <ÀFú †=襃ZÝ®å½å¯w›`ëï Tc‚ÍÃý%ëG±@æš•’µþ98ï6£rkòJ50Jxª=’½¯©´ %ÉL•e8ñºRê;.¾HÛçéE[ߨ&‰?ºpYŽ]QÊZ§> E|ðòôß‚U¢ª~‘`#}ÃôÒA­ns+λ05FQ–Š—U…¬¢#¸8ø5«J²MÖb8Ì'`pŒaØÔ€Ê¢œ€Þ6e£òâ�<.{%{_SiJ’5:.KóQ´7¼:]x;#ɤ!7QS·…6U°dvð3 BŽ,´ÃFú †th†4P¥Ûúìóà|“°ßi€zsp0Wå¡äÄEtZÔUªR’m²~)üÜçÀŸœSö[Ъ·¬ØÝ&þ!\ò9;­pzé ÊHö¾¦Ò.”$kt¦pwp\’ì’5u[5.…Æ5wÙ0¥@‡YŽ,´ÃFú †ŽA2=¡J·nÊòßG~`5yTy¥8Õt“êÃWJ²M֢Ⴑìågt´IõN v¹{Ä™ZRiJ’5*Ü4ìÝ&ÞÉìÄ ËÇ¿žÃxL´VúSbê¶xrDË…‚vØHŸÁP1H¦)Té6°u˜‚ò3hìòâ*É6Y?ŠF0­\ÁAhÚðˆÂÃ¥‘ì}M¥](IÖèðNYõ^Ôš'ø ÕK<2DvV1*NB©fÔ¸»¡ïpS·¹…¹¶ÚÔmñ䈖# Eòpð?½ ýMij‡²‘>ƒ¡cLO¨Ò-+\")¬Eƒ.IJ’5*K6hK[0Λ 7݃êœ-(%ã7Céyú —МºM„Ñrd¡H~‚幉¦S¥ÈSeAmtÿA\ØHŸÁÎêt;Ù‹Ž_æƒ/¢°4ŽÁ»SÁò£$Ûdý(Op£ã¿&Öч‡ƒ# q;ÙûšJ»P’¬QY~ˆæX~ÿ=õÅP圀ez>§ GŽtb’6'-bê6;&fäOÝ&FŽhnÖ Ýÿïü·Æ~¸9pÞGèïø‘¢,ü³c0®"&‡×CûýYh®1‡™!2ìA/TéÖý#ª«.¢=dà oí—jPm’fI%Ù&ëGÑpÁT]#<�ÞÚ/¢ªúGH³šÉÞ×TÚ…’dμ£ß£4[…Mªp²×çm\$éäZ¬˜¡Ía%u›Dˆ‘#z΂ê÷¿„Ù9nñ! ûry‡ôœ(?HEŒöòx+ös9k‡×ƒUl¹—˜}ñçÊ›D†ô {ÐKUº)ý‘tÛX‰@dR J’5µæ¬‹ÒÔ$/8}Ù’!ÙÏǃ’dÝ’þ9¦(Ξ"€„X» ×’<Ñ:´˜ÿMGUrD/Ù¾EióoüY´årÞ(ƒÁéç2 ”Šm?¼.º›êPVz Æ8Haæ03¤€žA2ý J·îŸÐ` ;œÖÑ Ñ6V"(É6Y?І ׌xÉÞÖÚ ?1‡9I”$ëÆmvz ¼Ú�}ǽ‡E¹Õ@6 (8€Ï?ÝŽ­%aWyFå.å-BŽèåG—q þ~»‰ú·‚ï‡ÓT‹#O6 çH9þ<àŸaÕQöÙ§¨‘h·”ô é4 i J·N´7__DÁß mãÃà ùQ’m²~‡hÔö¾f%ênj p_ÑD²÷5•v¡$Y£ÃÁçhEyXfUÁ)ô¸é©Bº Ç«»Uo¡X;„?ïè[µ(3:±h×ã3ø¼¥9¢×&äÔ£×3§EÏOdΣe£òå²² Ÿó'–%ƒ!>t ’é Uºu›P^r§ÃË̆´ÓUj”³Œ„`ý(.ËÕ¨z]©ãr[aN%Éî :Ê ¡Öþ›kne¢EŠÞŒp˜ÂCƒu›öÁàZY_q˜'൞“?O±9¢¹Y;º­Ðÿíìÿ¡ñÐ_êKw³‘>ƒazé J·,†YR”$kja1Ì©BI²F…”íßM*Ë_¯BkZ¹—¿@[¸:ûJ"¿UƒÜ÷ÞC®êT[&e^a!G4í‡þd(ÝÍFú †ŠA2M¡J·¼Ã| nŸG‡{ÑýÌaNÖ¢Á;Ì4\ØÀuà<°è»™Ãœ$J’5*Ü8 ŸœAßtÈʨŽë'Q¸Ç�'u1�üîüã| ÖçðÛ´ÈÍÝš¶ûòç)!G4í‡þä(ÝÍFú †ŠA2M¡J·üàYöºN“ʼn $Ûdý(¼Ã\¦}ÍÊàægƒÛì}M¥](IÖèæ”æä¡h¯jõΕrþªíÐ oœ3˜†9¢©?ô'Cén6Òg0ìA/Té6‡™2”d›¬E#‡™^È}M¶¥ŠH׎·ÑÁ2|®A´i£L½µè}®¨±‹ HŽhïÿ—\Ê;ÊýÉQº›ô =ƒ$CRÈö\a#ì‹ÊY£Q’m²~ ÃüÑZŒgº¡´ûÎì4ƒ-åÞ©çðRXÞ^ŽÒݬe0l�ͼÿ†¾âC쮃aØ­ˆÕæ0§³°é ¸@:Ã]¸)|è&s˜3R¤?|¥Õ‡‡&l/åµuñRÞ-bÖÑ ƒî,4ÚïÑ18†YjúñÜý·`I]ÎkÖƒŒ óMcÂ5Ͷ7E†9"¯óafâ1ž3‡YV˜ŠL´ƒu›äÏ’!NÊ;/­ÈS…~·7QP{“ŽÉ¯ Öƒ # ȃ„‘y(í¾3;÷¨ªh€a- † •((¬F‹Í#oŒ¯)ï¸É”oÙ­ÙW°T9ç›Ä¨á‡þd˜°°Ä`0IÀ‘ÌDi÷Ù©ÈøžÁõ\¸VËymhÜ•ýÆ Äq¼N’Oyç·žÃî@Z9!´¤•“cÂÂzƒÁ`$sD2æ03Âá<½8s°-£¤òœ²áœ?à“ú^L¯…_ðNøì\¯Ù‰=r—þ&È0aa=ˆÁH~ðð-°x`sD2æ03Hþú¤R·QŽæ2ääa¯Z uI>²xRžÃð\êÚEÅ;ûca9.Îs û7ýÔÝ—fÂÂzƒ‘^XÏÔ*Å„ÿ)[ iü ’ÖÇ«6ÏFõ÷Ò?|¾ô˜n0G$3as†#Zê6Šáæá¼ mu9Ô¥¨Õuat&¤£œ¸¯¡R}§5d²²Ú¾BUɾ•Ømî1n.ÄÖÃ]p‹ä=³”1,À=Ø ­æ;t:Èì‹m½‰nÛ$[%ÝR}ªå¤“„îÇa°>où€GÍ{¡Rå¢hgòʘkÇþlTÅ1ºñ‡Ó¿gÊÛàŒé´5‰ÇD‹ö;ÀË‘×VtuÀ“f™Êô%¡4yiG¼Ôm#XAo„ÁbÇ-c®ÛˆÒÕÕoAÛ‡#Æ1,3‡™‘(Ëš±Cµ¹EÛ‘ŸW ã„Æýoc“jt£Þà»뙇M[„¼ŠoѾv¸€´ËШKP¥¿ÊÿÜûìF+ /aו`{à�ÅKŒ5×àŒõEà÷ýçüløåÊÛÒ’H©‰VÛ›(¨n…Õýrã‡ËòC4ïx ªÜ°3¿�åÆ3~‚ìMüÃJ7‚×ø QQšª4yiGœÔmáéBծϠÑ_Gÿèã`ᾉ_1ëMH¥¿Md±gï^”äç {Ÿh(‚53‚Á‡©ýYÊ–ì:¼»½ã‡Å±ËøäÌ]Þ]ãgÅŽïq@wi²$d5³gÎÞG0FðŽtÃ×èðĦ9ÎÓƒ/¿ºiò7æ,8~Ü‚9¿ƒšrh¬i<aY²Aûv>*tm!“ ¾]Õ@½-X¥©ÛŽÙÆß¥ûн«Fóø°è@ó'ßÀJòlú@à;Ø™ñ2d€9ÌŽ©Û$ƒ„ü™¾C]Ù¶@Üñ¦¬m(«ÕB{´Z[l•7WÙÞBQýMŒÓÊ‘ §©–Ž´r2ìš³”)pnX¾<Ë4ñ.¦`9þ5,s ˜<#ÿlXp~¿pR8.ãfLóœ×?‹¼ÊšóúæÒåH$øA¬çÎÞv XÞ‘n8Ú OðåÆøá±œÃW‡Ð2?ßøÇ-øg )> +3^† (ÍUš¼ôCS’KÝ&=¤Rß-\(û�…ê±7ÿ=T˜ÿþÛÆ„¯ ¯BKZ99vÍYÊ–×p(bé{|ccøÒ넵ó"N”äAµ© Fw,ÃÆ"ž?EaÕß…«¬¦n 9½BG2-áõæN,8ßLú;±9Ì˸~è]^ßá¶«BNM/æ‚oc0R ±A%¡4y©'BZ375Š¡ñØVqS†ÿ9l-gÑðÏGð.ĸ@Cvóvï„&>HðÂa8ŽâÜ\”S°Â,Ç®9ëA÷Ôˆ}…Á-ðµv æ¡ß)š S çÔýŸhÕDA–ŠŸÁ¾õ©¿ãJÃ¥W˜yüOÐ×fÂŽï¡%§yum°Ø=¶²ï‡×iEgãç(Éå'oj#ÜÁÙÎ ã¾ÁxñWök2ß…3]N£3s˜3w'ê4×1hµÂÒ†š?Çš.Xí«±Ã4°�×Ï‘ÿF<«¯¼ó9s×þгæGX 8Ì_àpÃ?é(-î9ëAÃÜ}ÿ Æ×è<ñJ-K˜î=…­$œ"w?4Æ<š nQ-ù«ú8ïô¥oZªÀÉÞÈÏÊÅ>ÃC~ JoH9U{o+4å+ñtª¼RœºÔ„ÝíC2ÈÖç¿ÐfìB‡¾·Ý³ÐnÃ>%GJ¾ÔÇÍ1è„9ÌNÔÒÌ«M…¬â¿Ââ–gœòXÛP_±¥õЛG1é@‹¶ŽæyŽÉn鳑açyäAŽ]sÖƒ2ÚO¼R ï°Í:`ÑŠ=ºGÜðù_`Ìð®Å’±šVnê{ÆÖVa GN¢c2]-n½µ…Pmz¹¥Æ0øþ?ßXâÿ?–àý¥Ù*~0$1k{V’èg„áQj3Œ°l3ŒUÈÃYI(M^êqÿmó/p¹Ýp‡´ÇæSØ«·~v9n@óÕÍ”;˜œç*³ßFIÍèª>B‰ºy¥ßÇ—Z†<Çñ Ç®9ëAý'^•�ï¸Ù/£<÷Mde½É?€ba&©éÞǦ]¸Š^„Ëp,½³d O,Ð×|†}7FÜóð{ÀÐðSl!«iåŠþŠžñÁ•Üeøœ&9Ò‰É/Ë6ÃX…9ÌNÄX~Œp˜ðmÙ;ãÇ…é^ÔžIùÁd’±#k›ŽeòówÐ Naf´ ÇŽwÆîÜÊç8>àî¿ëLêF]Öƒ2ÚO¼ÒÌJHA´•ůB šn` ó' ÅÔY‰sÕ‚Ýïò'I‡FðñcÕ‡ÈÝ\‘Þ+Ì¡p/`où¹üÄ-ë-Uì1ÌÔtYØe˜Nì¸ JϧöaIJÍ0‚0‡9ÃñOÃ51¹²c8ÓoÛ óšÃ˜èg!»òFjV˜ùñÕq§?PI–›ì@ù‡dbÏÿ~ú&N&öK˜¶\ÀE[Œ 42ä9›å‡]¸lïX8ëA™å'^éenËé•CjªBT¶ÚUâg‘Ÿáw ¡þ[˜Ç_®8ÌÇŽ¡¡÷Iš;YËðM=@¯á<*‹rø‡öfä©O¡É|VÌßµ1¤ØËÇxWC}©¾øªŠs±¹¼#¥+Ì,Û c¥9 J“—z|c07~…ª²Ò@ˆØµ×,C1~Fÿr¾á瀛<]8Zü)­dTõb´ñKèüˆÉMÂrì 4}ñÒiD}@¶X ü¼ù^ÕÁ‘š 9Õ=+õD€õ Œò¯´ãŸƒËvMu•ØWñšºïalðŸø9©í þžøÒÛaæžÀR¿¹ªMPåE«íybß×ÿ£×/ þ¬㋼Î;ÌÇ_@oŠÔ°l3ŒUÈYI(M^Eá6âãŠ&ô[~DS͇ÈÉß uYêu-¸Þÿ(5cÃò:ϵÂêñ­,€ùãN÷èJȘû&j Háû!‹fCûy Rš|?_j‹[O£t{µðw]6L1‡™! þø˜Ã+!WP·ë³c˜£á…õL Ît/îÌØ^lÝM¨«(CE]ºmv ZîŸÂ ?|¾TO7X¶F�æ0g8¾ßaí¿Çãøx‡¹,’µR"ÛÅ?'fðØq}wî‹æ°m ?Îz~†¾ü–ÄÃ-Xz°R ›ÿ·Ù‡¸Ùv¿Æ¸âMûy ¿õv7ÿÆKÊ4újv ÒV(K$XÊpüÖ”ÆÒ{•3)–á}ð�Ãs½sÀvÓ WLuùIA+Ê#nåo‚ªà8 Ö'Á-Ý †h´ÖaW¹)¶æhø­8SÞg*U–m†„ô]%¡4y©Ç? [÷П¯EÅ®|äUâœþtéã#½]¾ñœóÂ9hDCàÌ YùjTk/ãÆ 5;QÓ7|ãk ü¼7Ù‰#G:ð4düç¼V4gám­M‡žõ LÁ÷�­å‘ª¥‘ÿû¨6 ÃíKç͉â‡Ûtê_‡¤ÖáÛé£(ÙqvÞIâÜ]8¼µ‡o<Ž2«%Y2ŠWñ-ÚW·‰í24ê’`AŽØgåž³KÁ <°»y7Y÷̆›w]ˆmmÝ GkEäÒâ›ÞDAu+¬n²ö!=,Û cbJBiò* ·jn`ÂqwtðÎÞOðé®쮨ÅùËÃ)Za'¸³giÃ…Ú+E·xP冾ßùZ‡žþó>8•È+8€šÓü3¹îÈÊY£ì24Çšk:NXÊY2ò*  íáÛUÍ~l ”l6¡Û>Íøëàfã¡•Ü¿ëÒ뜀q|!‡™¸Ü=8söNØiiÞ‘nø±V T$.˜*Ëp‚ h!ŽÓU{°Cw‹äPåcغõn¸£”p dÉÈG…®M`»Æ«¨·㉻í˜Mñ²l3ŒUˆó $”&¯¢ˆ”%#à°Nbüá“ÔŸoð¿„7|Ì? KMöÖ\Êï¡°öæ†ç—”q^cÛ54T—óÏãý¨¨Ó£;p@QXÊüÑsF‡Ûá#}ÉvG;ž_1Ö³„™»wñPŸ–óûö‰8,X͸•æ³±4E{Ã'|;bÄør 3‰î¹€³·ÃâÒxGºáhgŒÕE‚e›aa3ƒVHZ¹ƒ›ßDþÁ+°¯¦2åŸ>^ç(Ïy€{ ÷ ÇÿÌ< ~ܔ瘖sOQò`‡Â=³c$ÌçIÖƒ2 n þ¥0C_AÇ­¤"I3Î÷ÖÎï¡%+¤º6X잸V¹©!\¬x?Çye[kµÅZüD©Láîà¸ñdüþð¿2kGjf"Ë6Ãàa3ƒV–Wð¥q"øŒ"éášPSö1*ׯ)~›AË =lqÎÔœ{ŠX‰PØ^ídŠëA™7‰á‹•kqL¯ZÔ1çeÌL8ïô¥oô¥ T>Ú‰ü¬\ì3<Œ±#¾„]·o× ),$ÆhêÇxÚŸö[†Ïý :õ ü v:ÃmاâIçÇÔ°Ùa¶Ë·X‹ŸH Ë6“qûSJ“—‘8K¶K8Ññ~Ÿ} û½éMäW4 IS‰ZËÿú½(¬ïÇL´a‹ösOQ+†µÀNfð3IÂzP†HóÆÔ4‘f¡NÛuôÏßÅXÏ5ï…Jµõ=c+Ux8ßLGNÆX¥ïO8 ±;¼RaÉôö³–àý¥Ùd¢Frzî $ùÏÊ>ãè›–îC÷nŠkôa‡&0õÇxpPZX¶™ÌCi¨Òäe$ÁâCö­,ò nýÿۻ㟦îþøüýÅ÷ÃBâK>1„\–rãBf 18Ó€™3wƒAw .¸\–ÛY¾—¯­÷ÁQ§ý։̪°]À'À¤nå+½½ÊÖŠu¹ ß2N9ÏûœR°”Š(=ÏGr>ëÀ k{ú<ïóz¿^†‡ðÈíál ¨öæÕÅý¾§M˜DÈwBÈM¾óò p.Ol¸2¶¹ÃÅ$í }îfá4œ„ÆÍn\ÂØCóñ%t:\p¹ާ0~‹‰\’Ừ¬ eðE PÎÁë0áØ±[ÑMéaÈ“vÈF;ùyõ ¾=a³Û Èÿæ[ÉVûyã^ØÚY<ë}´1£°W#ŒcÐÚ‹þQyÉ$lG‘®Ê6ÚQÑ[aß“\‹miôÄסÁüÛºžùR aš“¨é lÒ1ÐÝ –dD&7mo@Þ;Õ°,lžÇZ—¾Ô7Š£\a¬R‡«Å#Ák˜ý.’±/tu]‚!ÿ,QýÕg1ÖYƒk:à~íºl0ênohI»ÍЂ­@·ÚÏ÷ÂÖÐÊ(  ³MIç¸'¸}4»Ž6Ã/'„pÝ3"‘/œÓ!ûžâè‚`±'¾ ɇðé'9Ø•û!öÕ¡oÆ‘ó¤óýcÃ6Ö0¯nã}M¨©ºóàô|`>)]|´ G} ^iÆ©3×qßbeÉÑŸàSâ¦1PÿÞÑÈS¢dò—PšŠ7Šš¢[a¬R/íJÇF×0³Û ȯ¿­d«ý¼q/b mŽ0y-âü‚À×\µÙÚnŒKŸ¡ó˜µéqÜ0¸.‹|)…8Œ¦S_Âx?4°ýûš6`)ÓÒ.W`^ëd>a·ª?‡¦ö'Øå«_ÁKs ¬n<÷Âsôݼ„ªóf ÎÎùóÉ£—ÐæŠöï.`¤é,Î;C^»ÒaÝøºav›! ³ÂmB 톊ó ‚ОøóyËWë6‰ï ÅðÂqK‹ Í׸åoì=—å.îXG6>pl1/»d¤ £ð>ÉÊ@®úCé{£lྰq0Yd ­Èˆ¡ë8˜¢‚*û2ú”1û5ˆ?¡ºBƒÚ[ü›W—ÍwzáÞèÕyv›¡�f…swÀÔ=²’éE¿Éëbïã-,Þ/¦@›™7¿Ú-,¤¾û.RUo£¬u„+ÌôêæK2ä.9HO+qÈãA)ªöA×·>c$ƒÜáâ vs¡í‘W3=°hÊat½€­¶ Ç߯[‰ÜV.9õHob¹D¡ÕþÁÓ°ë?•ÞðQv‹Ø²BÚÊ5˜×6Êzaã`ê{ø =EÆG0AJÒvdëz7´K»ÍÐf…s¡ö_,‡ëØ6Þ,&ìm0èÎC£ýM]˜ˆ›Byá¤ß^¨Áò‚U‹ÔÔ<”_•;‚¾$ÆøRÿ}N=åÖ2Wp¤Z®)•^pöïpH÷0ƒ%Uh—Œ…Àì–þQ”]2¤·¶»ŸŸýcòŸ1ÙŠS§Z1)¸Ñµ†?ck j+—¼…Ÿ~Œ¬]ïC½¯ú¾(G˜úÛÊ©Q?8#¿í¨?òÏù ˜Â#è} Û¾xÙm†lµ�ºÕ~޸纅Êʺ¥ÎçŸs V÷ææ˜LÁóÀÞXŒ´%{ŸÞDÆ*#µßAJ!ºÐúù´ŽÉéb­§¾Dëä Æ»ª×­Þ'1ˆ˜¶Ö sw-l³òIBÌÙx7}'T;NžÏÕÌÀqóxȉ'pìø í“ Ü†Ìß.ªìôŒÏÊ÷Í )4Â5ûµÇ¯ÁÕyW€»õ+œõ¯ÚÌI×_âT«Âx'4Ùç£ì´#»Í(ÕØØìvûâ!¿ƒÇ›'Ož,ùù‚^ù¿ÑkšÆà_¡­.§`«=MÏxàñ&‰Á<y¼vÑ[К­pzæO²¢w}†Ó8Ö4¼¹›„Y!æ7ðqÚKÚÿxåíÏ_EáÉ£E¯à‚æXÆ'aÕf#5÷ ®Ú¢\!•NIOŸ Óßv,h5ÂtÝObŸxBÛÊ-fϯчݹ!Üü8\ïcv”·!Ê®¢1Án3ʵ:ÃÿãüÀWÅùîg•ù¿Ñkr™Qk´-½pvÚ`®ÌBòf/BÅ` ž`ù yþ2Â¥D§ù ]dc`Vñ©™¥Ð6ã ˜»ÿ\·zZ0Ïÿºooþy i<õ·Œ)ù#»V2äÀœú6ÒSßÄŽ²–ù•Õˆ >@©~iݰÉ|Žuê·»Í(Ú‰'ÂPyõ9Þüïÿý¿‘––¶ìg•Oþoôš"Õ0'ï‡.Úá ëÅÑí]yŸL°µ}ƈŽp¤ª c‹å"„‰G¸Yþö¯SÛ¶µ‘²¤¿ç62``V On{–ñÈcõš&z5\¦SPŸþ2ì­±ù#¨¿e¢ž¢ë[-4†¬Ð¦îBnù5Ø¢»ø_·qÓò<òIZü ½½±Ñ†Ýf”,Ü*s<®.//,C^ù÷(\ÍÐèî¢gÉ…óÂd½M“ÊØë ±ca¥:7ÉÒëG•ùz&7x¡"ŒÍhdÀÀ¬1¨i¢W%fãÇÒ{øÛb‹G ¿eà»h¦’Bœ>þuë?Î@îÞË:óõÃn3ºÊ«Ë BW™¹ºCÂ$&¦6?8†«Êâœ]× -+‚:¿ºfôÉ{QâÀf42``VŠÔ4Ñ«òaüþ}ôÇé¹5þ9aÌOGÖ0¯×%ÇiåNëˆÝf(x•9žW—¯2suY!bÑC9ÞûLoB#f¥Hô©DëF„wxÏ—Œöþ†Á¨†ŽÌÁó螬x!’¨5̱0Šû]ƒñFÙm†$ «Ìñ¼º¼`a•™«ËD˜w“Û®‰6Ü‘.ŽŒ¦n8gEˆžÇèhúqm¥cqÞgz300+ELú2*‘\\ ÍO¡c™ÛQ_ü4æØœ“«œ„”\Ã<…açØò“«èFo÷P”CG^à‘͵r©ÊÕ0³Û ÉäUæ­°º¼@^YæêòÆ,5(2 lîÅód+Êö|³c âl? ©HÎ:‚ÓE‡£oyÏ}¦%›ÑÈ€Y)XÃüŠäúãÂ0)øØìª–š¹+¹†Ù Se ~êêYzÁÑ]â÷50[l‹=>#‹Ÿfv›!"?ï#4…kw)ª=(3ôÀåÝœ³¹Ïzùþ–p>ŒµžÆŽm…08¼kk Ï}¦ýfà긷b#ƒXc`V Ö0¿")ìÞ¸Œú‡Ž¥ý6]0—…ÞúDúµvs Κ]®ºW¨aö Hì¡INÕÉË?P‚äPÕúd…“xüÔ0³Û É|V-v¦Cw=øâÙˆkšƒØíï¹oÂ[˜»k`îñªº‡?î¢*s{ …禊臎ÄsŸiÙ&ÔX30+EÄfŽô]Y¤úc/ìWëÐîN³k?‹Ì%'yÎ}+4‡+`°Gèž <Çïº 0¹9\9qC{A']ùxbFù=¬ 'aæˆ!3R ³(]oø6ö‰wjˆH&<AKµ?‡œ·|ÖË8Ñô4ðh“ˆ/Ч?„”¤$¨2ªÐæž„£U/Ÿ. a¥öœÁâ¹Ï´lj¬˜™ô†nÕC™áQ„ZÑYŒÿþ-ªLœP¶*a ö¶ “‘Vß„®Çã‹áx¾ÕXJ–¬0û0f>ŽmIÿ…bó_ß ÿ,éäUšµCzs˜Ð9Bý±ÏŽ«;࿱'Œ ½ò 4–à ‹¸Z/àpÙ°‡ÝX)]Œ[ «ºWàw6ïÔ‘Ì݆«íAðEŽfsý͸²iáR€gô9<Á bkÙÏ}¦e›PcÍÀœÈÆÌ(Þ–„mÅf,ÝË=‹ {+ô¥9HæHßÕ…«US½‡Š–@à‚¥£y «×†úü ¨õVLÈ'©%Ay²J/âŠF‹ ˜eò„(;Ú µÐhj oêÆã‰…õ×<®?�UJiÈ ó_0ÿ’¶‡Ùß‘bÁüŸÕª/CV² IjãÆfv›!"YÄÎàCýDÓ °¦ ‰ñÜgZ¶ 5Ö Ì m~RÏ[êoñÐP‚ƒ² ÉY¥Ð]¹�Í æÈŒ4•HÏ¡f«3pµ>ïh/ GÏ id•S0ë­Ë(/:õ{ AYVûØüI+ák˜Exí( é,¡Êø-.¹ÞX.]±¢Ã?5/˜ü} Èë#èÊÏUHPNÎA©N¾Åؼ±™ÝfˆHq…³ ß×57[1ºÑçø8Þ3›PcÍÀœðfà¶6£¶ü Õ{A¹ úVûüª'k˜WáEsõË6“ÍÂi8RF°q.Ë-éßá”hѦ”À,£©(jíO°.´ß½í3àè±[Yñï.…d··j+PTx�ï-e}+ìþ @Ö0Ñ&‰ã.ñ¼!1f6¡ÆšY1æàu=˜%4¶10Gço8 å¨jnø.¯ÔÿˆòÌ"~/Zò¿C/îèÏ ¨¸ —+/$vI†`&OžŒx¼@‚!ÿ,QþÕEï0,þ•úãÐ4¶mb`f 3™éEÓ½ ½ÇñDÌX̸çŽãÛì[‰ëôMö¥+œ®ÿÀ\‘¹ù]$b±!1Þï¦mB5³‰^zïè¥ðq•—ϱ$c5þZä]>Ê›ž"]ɾ‰LM7&_ã)zŸ¢§¶&±»dˆƒ0©FûXÐJŒ\Ë}ó 2÷àXëó'¯Ô÷JT埠¸R‹Ê.É`·eGÐs¹ò]Ž%+Zñ¹DíÆåbùŽbðÏ*‰¾Éxm 皈Ò9i… ‰«Š÷»irõ ÷âf|î Ì–aD5|÷10+™>z¾ƒ†]2V%z躪EYa>ò‹?ƒ®é!ÆW H^<±?‘þ¯\§kAóÏöåQÃÜ€üi>Ê ]ªhz^ç– ¼RßÚÌì6£x>›ïlÛ‹òºkKnq7Ñ>oÓ9§aÓå`[v9êBnÉMQŽó§U…]á´ah<NºH¼®x¿›&>CÛ™÷ ’ËLÓ?~–ýÈJMAFÅ݆ˆ½æ„&böÉ�†ä¤ÜÉ¡¹ vOèí8®Œ­Ì÷Ýè˜ yÞæúaºb•>šV2+Sõøa`Ví$%íÖšh£¯£!…[g®jO¡P}ŵhê{¾ú-ËYìCòó5—å.~³1pCJ2ØmFñD‡yy8—½Øâñü)—‘Fžahù{#á/Ð7P¼w‘x]qÞhήÇnÕд?y¹ª,Œ¡¯¾G£βF Ì NtÝÁ?°Ã#o®Ävj­Ò)ž¢'HÚFcï8Ö%-ÏÂÈ_ù ùïíDZQc„žÂ‰Ì…»W——®DÕŸTt¢ùŸ70ày�íN’vjaÝ”/»Í(ž0‚NÍIÔt.­Yh‚.îþÝE)7ü74_B§#ègu=Å€ñ[´±Ü@þÍÜÍÐkåÌ¿mýî ÂÖ0ÏâYï#¸ãàcÌ×gßò‹ØàñßâÔ ¼ˆá"sÂóÁÓg@Eþ¤¤£1ÒÔ9Š@ ̦3(¾ô}ЭÍïq©8 ™¥W`å‡ÏÊ"ÆŽ®?©èéÅ•Šƒx/å]5F*‰Øì6£dóÉB_Ãòw½Í—ý¬òÁæ˜Yœ¦' 2áÓOr°+÷Cì+ªCß²;¹Mºhò8aýùGÔëÎûëµú`î°EèÃÖ0ŸEint¶)éâ nÍÄ®£Ípm©OôXP³÷ ´÷º_–ÄtÝE]i.òu÷üï¿Ä©®630­H„wxÏ—¼ã¤‹‡_cß[G`t¬¼‹˜œ0•–á’áúË C Š3rPÚð`ãû“¾6v›Q$¹=â©/a¼\¯*¿Ã>ç�q¤§Î\Çý%?«|ôc”¯Ó˜ð—騶#[ÛíßÏ"X´(4:0kÓã¸ap]J¢"<E×B¿ú0Mª´ƒÐ4=Z¾Ÿ&TÄæ3`n³óS# ¶-ÿû…ª½õx£Ef¢5àn¯Áá²ïã`%!ÞMaز¹O|‡µj¼uð:[øî%»Í(ˆg�Öÿ5‚©%/äø¹=½Ô<¬ø_cÓ!ÐÛ;²yA.Áø{'Ààœï1˜‡à±|…ìÍj+',9¼ç¾G‹Å糉—õ½¢Ï°[̨ûâòά²9.î§š>Gûù¯Ñ>\væõÄìß‚™ˆ6–ø íÕÇPÖлú*ÇVÀn3‰/ÎoO/%—‘‚úô—A?«tœ;ܽ—a›!ºšqtW&ŽÞ~Â�ýª¦@›™7ÿï/,¤¾û.RUo£¬u.LÄ1ôÔTáÛ¾ÐÍÑáÈ}ðåýÒ¯Â'l¸ãï¬Ò §üšñ<FGÓ¸c žI°¹DAØÐ=Y ÌDA¾MÖPMíOóJü]KZ`u³¤#þ±ÛŒâÅùíé¥äÊúƇþ¼§aœa`Ž ¹]h'¾½Pƒå9«©©y(¿úpsfŸÂöÇJay^ÇOÐß]hÄ9—í1&"}Ãd+Êö|³c âl? ©HÎ:‚ÓE‡7}’áfa`V´Ð7­À&U*²>È@Z‘C×q0EUöeô)®sÆZÉL]hÐ~…Ú[ríüØ‚æ;½poPHe·…‹ûÛÓÁ|¿ý|’L˜„Ãr µ§óªŠ~“ªÏzùõHg_ÆZOcǶBÞ%](”†Y‰^ñ ¤Lònãç‹õPÏ&^6¥—kXm–ß`s…Ô .#ÈEŽÿä3úrT[^øß®ÿ:ÛÊÝœo®õ{·C•ú>HÏ@‘ñŒG’´ÙºÞ êœÁn3Šæî€©{<ä}îE¿Éët¼]ðúà¾×Œî© QõާÄ0ïè#´5jP”!O¦}iêÏñÍ÷:è¢\ ›{|‡ªîáÏ»¨ÊÜèj4‡©ÇÖ©Ïq¼c`VŒ×)“”¤+í,ÕÛÈ?W³¿~KÄìà Ms~'®ê=T´<YñŠ[t·àó³?Ï·Q›lÅ©S­˜ÜèÒAcIäð%À3ú,pÁ1‚‰Å–Fr·‰G°X­ÞæÈ÷ºwÔ¨œfí¨?òOXä"<‚þÐ×°q%Ö[¤1ÈI›T¯º¢×ìO[ž8ö *v½!ý›ïB¾æ::>ŸÖP:¶Ø6/ ªŒ*´¹'áhÕC£¹€ËóÍÍoBŸhf…ˆÉH‘DLµ u½ýåæo/tÙÛ¥ç2¥F+ÛP³¿ M#‘"ó 7#-\ן¡}r ·ŠXtÒµÖ|àoet®þN f{ƒ7O"=ð|¨2¾@‹k¥ZnîÖ¯pÖLæ¤ë/qªÕ a¼šìó°(ñÞ m,×-TVÖõb—ŽÆsÈÏ9‰«;þ³IƒÊïƒZ9¯£Qs9ì;îf”î;þ&:úžÀãÿáúÏü~‡Í&ŒÁ.ÜòâÏ ¿Ó —wFʘ&Ô¬©›¼àñ<ðw fà‡Ì° q˜•$&o ¥™‚U[¾Ø:H¾ ë0b[Ò6¤Uüãþ7¢¼¢S¾ÂJñ,ž?Afé¿‚>À¤ÃtÝOœ}ØÆÚÚÏGýÀÂ`é¥ï2²å°œvƾ!<îü'öÜ„‘HOÄÜn~üN˜A *ì(oÃ*ó‰^ßô0ÿ í'0[í‰8Ü�%bzh…¾Ÿf¢ö =ž¾@ßHò`Óר,Üdù|”¼…ZhOAkïœDÏC4½ Ur2¶Ç`ÐŽ`©A‘a °à¶‰6a#.³Åú ”ØäÀ|r¾@"޵ l‡ I)GÑäZø�}‹¦ÇßÇaOðó·u¸ÞX+]Ÿ‡®Á ˪µÏ Àg…¶ðêËñ¥Â� ù;¤°›Šö…•9'Œ…ÚÈ+ŢƂPª¿¶ä‚Ãd¾û`ÓFp™Qk´-îeðNÌ•YHŽ» PÒüßÁøÇð’Ÿ×iÿ •»¼l3È£òïáRá{ÈT„éï¢ØüWà¿mÑ‹QÛ¿aÐ`¢zê/ê`îÑÀ­Bîé\n¡B:T{PfèÙÜ1à‘6â®ã 8³RÄâ ¤H"¦-_aoIÚ:›¡+|[:a¤ Ï_¢!otÂj¬@ÆÞz ®ðÝ¿àL†\óœ‚ôÜPÈBê¶ÕkŸ·<90ç7ž›Ànë$Rß|yÕ?}š#?Àñù“»b´á[ýU4úǼêÐ`þmSNÖ[¡7)­ƒH5ÌÉû¡³ÆÛ=ùŽW¸f’sjãp“b‚žÃÚp5ÿ~ ÏÌæ®â‹®Tå¦Ia÷M¤—|ëx¤nË‘ù³¤Cwýå"…|\ÓÄnÿÝRîØB†RÅõ\g`VˆX¼KÞüPÿI y²«Zæ'$Í:ÑeZ8‘´À6iµÓ »>ªìóh_\U–BàD/ê—¯PûœäÕ÷ƒ(©oE§ù S·!i[A DC€Çù�Æò½Øëï ‰�w[2äç?9¹j5d¥bÛªµÏ뀽I•ÉÕ î.z–Œ™îE¿<I-ê9—óB÷˯A?«tXÿÀ³‰éu $›óö§Hß¶º¾xXŗϯVÜ©;‹â‚TÖÝ…uàW´þå™ð-Õ:üì^úŠñY/ãDÓÓÀ£M´ +à ÌŠòšo E›o/ÜV.zr[¹}Øg ùÞY8 '·H}˜š˜LÈ3Ñ#],œØ’?@U«¼ª.J×Ý0-¬\ܱEn ?÷úÝÒ…ŠæßA'ÀYLô5àðÑ[‘kŸ×{“*”0‰‰©åÄqSϹ„t®zñKÇxË<°T—û_¯´ä;ar¿øZ4Å[ÛÉÀæÆÊƒ(ZK ¦èƒàÛÀìlÆ 8³R½êHq|p·´ w•RY_o ZÜ‘¾h¾5ÝÞ<-îõ,¬øô «å;”î.„îß÷¥Ç0ž9›À«Íònëà¶rkào+÷QÐÆË�q†ü óµÏâ4&^¬PC#ìMªPñ^Ϲ„¯½EirW¤å?¯*ã –ap^ÒëšÛrUÅ‘_\½Ù†ñx¹ÛànÃÕŽ0­ßÄ18‡ç7$Îõ7ãJÜ•­Á&¬€30+EØ7ýÿS‡ë°¹ð8rKϵ® =äV6ÇatE »r—ŒÃØæÃké±{ëû/»±áB‹ôA²òõÆzÍp-#NÀZ“<íí [âh©+Ãî|þ-?¾gN5¯ÿjs¼÷&¥u±µê9åÊYH+¾ˆëA?«Ñxun`óìJ%d Ñ}%);‘[~ ºÒ‘«–žóüïБ#ö >T þÀ÷l1þý$ׯÂp­kÃö“00+Å–j¼O"m  = WÌ’Éœ¯iÃpЮõåÇ3ŒzÖë­¾Yœ0©Qz.Ü…Fà8w¹E&)ZGàï’!wÖ÷¼ª¨¼5ÍRh¶ßú:ðóoÞDÚ@ñ^Ϲ„\Ђêó¿„ p‚tÍ—hŠx'ŒÖB°h¼[»ôÖ,Òù kã}WqòÔ­˜µ1{eû†—á›à‹¾f+FWüYå m0È›­µß¡©k�ñ²Š¾ ûI˜•Âõ#J‹k`X|]‡áR 22Ëâ°ñ~<‘óI”·‡3†öò“+fÿ¤Åÿm…µ•“³:9|À >ÔÆÈYVÒ~5íCa.2‚ûëaq…Y…äŒCøô“ìÊýûŠêâce‰ÖO×s†# Â*wvhÍä‹å_:`—ÞëâHŠÞtG»‹3Õ÷1íßÛp —­›|×6&}Ã=°7‡ Üzwç7½o²ÍØOÂÀ¬Þgp>_ú=VÔîKÇAãP‚•Ä’˜WJ"óÀ¢)_10+¶­œ˜?:‹öå;^šjGùG+fIœ„Ña@žj;²µÝþzEÁ¢E¡ÑY›Ç ƒ¼ð$JdîfœÈþµ9tzÐWû9ôöiéÄ0‚Ö“‡¡i‚i‡U›½/Èuú&{È‚Â`®ÈŒºo¸ÿ‚à­hÍV8w>Eïú §ãb¿Æfì'a`V0Ñ݆êÃåhè{Áúˆ¤«Wó§øp¥0$Âðá§0EZÏQr[¹U†’È 4…«æà[ƒ›Xá¯eM*XÜ€8˜‡à±|…lvÉH\ºd,Ç044'çÑH]2^Ÿ;0Ä;"k77„[_5ÂâtKžà—;}Ïê‚ë.*ü‹"{ ±¼ðù¦‰AßpA:§å…i÷76a? ³Rx`{Zß9‹g½BêÜ(”8Xœ´Ó0‡íù;—ù4Òµlá)¹­Ü_0—”¬8Q^µý°ÄŒÈE/qÔ‡yú´™yÐÙæwšËuŒ©ï¾‹T÷$4×mèB'ý-9ºQ{¬öÙxxpÝøƧa~ÎÀaùÇô6é Dk#c÷¯Ð½‡ÌÂ3¸d¸K¿;ÐqD^éÇÝ«·ñŸÍ¾ Û7܆¡ñèÛ¢ŠŽp¤ª c‹åòßïn–€ýqs7Mî¾´¥x ÌJáºõ)œ[²áJîîP0ÿá¿s׆èDÓáT¨ÒK kê@ß <rvƒ}hÒ• ]•"@¯PÖ¢ä¶r3¬W#­ìvøº7Á sÙnìÖ?ŠüüÅQfÿ‡†«ß^¨Áò‚U‹ÔÔ<”_}ß7‰+ª®ñrÑåFå§Ññ®­HôÀÑeDMI6’åý éj”i¯àv—MR \yÏË€öGòp¨`k] óÀ^_ˆ©Y8 VC›.ý]“ Êü =“Ê|Ý00+…tÂÏ_xá/9 pÌ8€9æ‰îTïû¯0<Ñl‚Pr[9é¹sÝÄá”íH/¾„¦Ž‡ô¯r ¢¯ãGèŠ3¡Úö ŽVŠã¨sDÂLN|£˜ñ¯ØÝ \ìF>zžø̦šÀ…xøŸsþx'Ë2^“tíqÂÚz—*!#Yå?—«ÒBßáØ¼^×±Z §àìºmYÔùŨÐ5£OÁS‚˜•b¼]ýa&<ñƒ>j¢w“Å¥ ƒ(®¸CûãèVÛVN&Àݩž”ù“%‡*ŠñÔ‡9‚øœøF1fÓtüáÆsžÖ×—0 Oè> a­åY8P.‡Ów‘¹Y%b±@á5/Žö¡{p¾$Mi˜Žô¯J3nƒ¥ý6®êk ©ù¶ˆ«5>LØîÁ`¸ S—³r‰Æ`'šL÷`uop ƒ×eI÷Šó¥·¼Zqé´F±Q*žú0o©‰oD´^ä.‡ßx釿‡mzá,&Û}°ËASœ†«KSµ¿!´8bÝEZ [ ¹—³æ&º)æîúãx_Ó ‹íɆÕG$?Ç–fèµò úúog`V ~ÐÇ–è†õ‡ZhÊ‹¡ÎJ…*åŒË æ0ÙZ=·áðú0ûØ€‚”·U\Š¢üôxø¼ “pÚ,h7ÿ ìªQcê[a¥>~ú0o­‰o[òE_/Zý½Ô¥h\³GƒBÉa¢·5ÐYFîýþºsq$FæìßãsãPàùœ‘ÂqÊ ?BIÍ¿«Ê"„Ñ^4œÖú•/KÂd- ­6Œ®åµºjݾ ÉÙÿ@ëFo¼^° =ñ˜‚ô¯J^nñ?W¯¾:,ª=‰úAéëå~eoc[þU8„¿ƒºd(‹8ú~ÐiP^¬FVê›H9xŽH× âlæk0\mB—Ó+=žÄ`G3LwzáÞè°²¥&¾QìH¨õÈÔ¨. U¸õ8^ZÊH¯ÓÖªü›´–þ¼;]ٌǬ]~m>ë78Ýô‚×öš)¸½‰ôâÔiJPÑ:*}…ÜNô�2«:0¾Ñ/Ž –kIªTd8€ÜôH)0àq´\\?A[ÿ�Î…‰'æ/p@oñÿÚi¿ ÍÙ»›Òik3zâ30+?è_Q,V‡gð¸þ$ªZíhù™ -ȼ0;“à}˜caTºÈ8€ ó¼â4#%9ŧ?F¾¦y¹!NØpçúU®uÁ)}ðˆžÇèhúw¬#\¹K`¢û6ŽfŸ@]û#¸üû æàýóï=Žs¥9HN)D½=^.|¸ÍŸ"»ä;´Û]ów]Ä)üyõö–~Ò¬·’ß�û¦íHKþqÌ;ç/DT™(1ÈrD)°5 Ú˜7ÏÜãzì•ÂdVÕ] .ì‹YëP°­h¥Ì`7áb»[ú•RÇÚP™Y½rŸýu²=ñ˜•Dœ„£ûÖ†Õû$†Ø¬‹ž^èóå“ë›È8ó Ü3¢õ²|«´–ñ^í‘W‡ï˜`4ÞzõÕaŸZé~PþÜkAÙŽ·/×ÝwÉØ(“­(Ûó9ÌŽ)ˆþÌT$gÁé¢Ãk9K[`¹ ½æBú¨Ë¯¿Ï ur®Î Ø·§ÖÅZÖÍ$O=¹¬«Œ<pâÃÒVL OÑ©QcöÁÆ×Ö&aƒÖ^ôÊý'ak<ŠtU´QY/¡arAL‡ŽÌõ£~o2RJnoÎ,‡Mè‰ÏÀ¬›Pï“b¸:,x0:êQØJd V‡åó! ZÿüZª²¡ò÷…×a±cÛ‡Ùg½ˆ|ÿô+ÆZOcǶBÒ‡e¼L¿¢u!oðúx-züÞæàDá2Þ8˜ðé…ÃPŠ“›¼²8OÀHSöëºá–DD/Æ»a(Ûƒ7Š‚„>úB û\0‰¹pÝ36Ú¬õyMôÀ.½^³SSQ³±Ñ3pY~…}ÓòÃÆ÷Äg`VˆÍ¨÷IŠ]Ž…˜¬ûàéûùr[:Õ{8ÓæÂŒãg\–7^5X6´>pîñªº‡?î¢*s;v”µ`l­·:i ’ÂAËóÓ&ëßD¦tÑ7¹ð>v§k¬Ò«5È%xï-Ýä­Ê¦gaŸŠ<ò¿5Ve¶K|ÒgüøCܬùΛcÖ˜?ÃÑÅ ‰ BÉH0ñ™ ½!e¨¯ƒY!6£Þ'¡(ru8b¶:,}�xžo~Ÿê Í4ªŒ*´¹'áhÕKOÐ`yÎÀœÐf1ao t¨]Þƒ]Å£G£ñóÆ`oû:Gå-ÅÑ~<åÖ(^f7„βô8Wº{u¥wnl00+Å&ÔûÅÓêpìðŒ® ;"¢WânÃÕŽ•/àçú›qåj­ãfvCÄá,!Ç1#cT!ÃÀ¬_ïC«‘þM¼3 XµŽ“Õa"¢XÙ„’€¨­ÚCY>T’²À÷„Š÷Ù ±βF Ì áo‡%÷^6u³VÜðÀR]îß4F¯B€×ËW/m‚M( ˆš<¥¯²nqÞ‚ÿh<‡üœ2|<‹¡ÙŠÑyKÌnà¤?Zl‡µ‰Dxí(J{cù•ºt¨2NÁ`Û¢®‘`Au‘ÜâOm°M( ˆÚô0ÿ éS°Õžˆþó>Þg7pÒ­¶Ãz ÂSt5Ô@SûÓ| ÁKsË'ýe!­ø"®]©W Qç¢TMúu l츞öÆb¤-éP°p¼‰Œ²FX\Ó›»Ò1Ó‹¦{®À"Jx›P5×è›ìK&ô¹\ÿ¹"ÉÑ~ÞËuÐíAðE>³¾jt,pÒ­¶ÃzUræPÉãE?È@Z‘C×q0EUöeôEµ,,×· úü/! Þ¥ ]ó%šÜ‰”å¿{´_¡öÖ#ÿ$,ÁeAóZ—ìLG±îjÐņt\Ó@½»zù×wl˜Øˆ±8‚žË%ÈX6"9j£3ðED”ðÂÖ0ÏâYï£Íä,R sò~è¢ ¸±¨ƒ^GœôGë‡í°^Ñ4lº\äøWç§1P_Žj3øiØõŸBg‹rV–<]ëÿ©ÆÙW^¥Þ¢üÓ ¶C•ú>HÏ@‘ñŒG¤×ávdëzÝúŒÜ÷ÎÿìZú:•‚t͉[‡´nŸM‡w¶íEy|W (¼o¢}=m‰#l óY”æÌw£ŸàöÑLì:Ú ×FÀºš¡ÑÝEÅËâaÃи<x'J1¨ƒ^WœôGë‹í°^…ènÁçgž¿ŠžlÅ©SòxY7º4EQŽÆŽÅ*õå{Ý;êùÑâòô©#ÿ„E,<‚þÐ×°Eµ¸.¯Jwâÿ‘>^y•:Fü·ó p.ûŸõAàûŠH9"Ö0à˜q�s›˜…ILL½æËXÔA¯«ùÏNú#Š3pÜ<¾~vÇghj´lŒV©·$îÖ¯pÖÅ?']o|‰S­nãÐdŸnÒ_LV©cDA§æ$j:—Ö4Awƒ%DŠÏ5̱‹:èõä{<d%Ù‹~“ VyQf00­hOŸ ÓßF'è6”麞7kd¯¿J½EÍ áæÇázyª°£¼ QUÓÅd•:6æ×coØÍ‡¬a&R’„oÕ‹:èõ±Æš%D›ÄwóW8ù}ÈTº¹~˜®XÝÚp,V©·(ÑcÁN //8LæûpDÝú'«Ô±"£éÔ—0Þ® ”ßaMðzt"zi˵jƒ×ñôw£ìæ‹:èõäjBE¹~iç©F ŠŠ40YÝ ÌôÜ0÷®²)Égƒ¹…­±–¤ ÙÂåA×vO£u,šÐ›Uê­é)š5Uø>dcéšÚÅb•úu¸;ÐdYø_!¼x©%ÿhë{ˆâÏ–iÕ*LÂa¹…ÚÓyHU­áNØø´? ]Š“. ²ˆ5ÖeÐ®Ó 8³R¸L(Ê=±ÊT"5Šx[9„˜MT~=(ì^G£ærJ¯À:ºÂiQîLÒpGkþ ×´ úÿˇ|¢Æ1h}�ëàxbܺ[‘FurHÐ „ÝhÛÅd•ú5DÕ^iýnQü‰ïV­sðŽ>B›¼âš‘"ŸÞ@šús|󽺨W˜ã¸ ˆÌeF­Ñ¶´ÆÚùMåëWcÍÀ¬Q}è³s9ÓCCø+ô„0ûµµèñD.§ð×»¾±•uµ8Wü>R’ÞDæ?¾Ã×;Ï÷Näë{×mGo|pÂT©Á÷AA×hl€&?J¬ØŽHôô¢áäIÔ´=Á´½ÿ×U¹½abVK/'6hàlp{¥ï+‘ûV>4// ®SŠÌÌ24¬Óm@"ŠCqܪUû»äɲ»¯¹ŽÎÇ ‹3kèæÏ]@d‘2*{ÝJb˜•Bzq}TÞŽÈE"¦ÚÏâ#æ\?~ãÃK®döŸP™±{… {>¸›>ÁÅfŒaƒõ"ImÀïMeÈÓ4Ã:(ýyNZ¤+ö«Ž¿ß“ˆ< ùð1kû5ÝÒd¾ß¹_ ®öKð_Ò‰0ÿøþŸ(H I9}ß‹õÿ`ò>ƒóyàãfñ6l°1´—Àf"Å ÓªU˜7ZL c°K¾¼ø3èïôÂågÀ„šh»ùÄ{×OÐê ª¯–ŽÎFœ9ÓŒ§ëôü30+…˜ W¹M1?)‡y©H5Ì*$çÔ®P·:ÿ}ó·†<°hÒýÙb¬YœL4‘Rƒ¯¹Kœø±¶ ]l¸\ØÍUÈHÖ¬°aï)š ÓQlþKzšþ@}ÎA}ý¿Ñôñ!hnÿŽAÿEË]hN]Ÿ/sÙ söoq ª“Aÿ›¢ÇŠÚ})ñÑj‰ˆ6•`©A‘a n΢ç!ŠÞ†*9Û×p9„­a–§ŠP´N%1 ÌJ1fFɇ†ÂÅßpJP" "ßÿ„î—_—^ÉZ0ê]¹»…<.Ó¿ª?˜·WvÂc¯ÃáÃÕ¨¿~†o>‡zwebwɈXü9ºßWè2"_Öü ¾`F:Ù«í0Vƒ††Œ¡½òòwÉEgÕ^¤åC¥\÷_þ1²Sß@RJ!êí‰|áCDKx¡±(ÜfdéPíA™¡®U>#ÖèŨíß0h"Kã¯zê/ê`îÑÀ­"Þ»€„[aîi¾hvj­XÝ- ÌJá_¥“ÞÄfg˜«CybÎm”¥åAoOàFì¯DîŠ0ãv´j¡Ñœ‡®Á ‹kzõ+XaÆ“çÑêFké.¼£{ŸøvSö¥¾‰dyŒg¾‰Ý—ĉ=~é :©I‡µß•ÊÃ^>ByûX 0¿ƒÊ.ìúã8|¡×øæ‹ì®Ø€.¡ÄI þÜ�MiÔêƒ(®¬Ãσ“ë²¢ADñÉgÕbgZ1tÁc¢¥ãšæ vû;"™pÇ6¶)çÑÕ‚ªÜ4)Ì¿‰ô’ïa_û~¸ï¡†Y•~7×g³bÌÂÕt)ªLë~DG_`RÙàCt4]Bqú›Ø¶ß�G"/v¾"Ñý Îd¼)½Sž{�êYHÝö*Zž¬zÒ=}0V•  ì{ô…vtðÙqõbâ±cgìü/0noƒAw^ºàСÁü[+/Ò…ŠÃ„“U­pµ ôÿDDÑó¦Ê‘ªJÁ»éï"Ÿ%DD´„'h©Öág÷ÒOŸõ2N4= <ÚL<N+îÔEqA *ëîÂ:ð+Zn…9¾»€H\?¡ÆÐTê'!õä1ÆÀ¬$â_è¬þп«wÙUYÆhqqðÂr^Øõ¹PeŸGû⪲ܩ¡õ‡ËÑ4Íuö MŸ£ ¸ ú¦.ØGã¤ñû†àn«B†<´%9¹j5d¥b[T¯7<6ªŠ QÖð¿–uñÙM¸Øî<""Ú`¢‚o œÍ%•£oÇ]@üäç^˜‚ËÒ ½VnyíbÌ«c`VqZzÝ€®¢ùRxÉ/þ — ܈~¶[’\°û C!'ˆY8 ']2|˜š˜\}µÙ;[ÛUhË£°L C«NÏ¦ßØZ_s ß½ÙšÈf1Ñ×€ÃGoa$š³îÜšN¡¸R¦.ûªµãDDŠæ€íIè‚Ä,žYÛqß¹Ê�³%Ât‰‹^…äŒCøô“ìÊýûŠê–ßÍf¥ˆ¦EŒo]÷£Ü >x¬±7O‹{‹u¸=èjù¥» ¡û÷}éq'ŒgÎF¹Ú,!xœ°Þ©Ce‘…_$pô=„î‚:ƒˆC0ä_˜ß°']ÄM¼X­µ^ ¿A‹²ÂÃ(ÓÐjuÆç‰œˆh3ÅûБä©¶#[Ûqés`¾Ë—³6=Žäžý±ÇÀ¬®QVzyéÜõãú7å(3±&t)y¬õal )aY~lÇÞú~)Ö­•íèjºŒÓê8Þ4ô F'`­ÉGžö6z7ýu¢¥® »óuø·üøþuœ9ÕÝj³ßBm^Šòã }ºì«m"Œ¸oµDDïCGbÀ¿é2©`q1f>0Ácù Ùë´)‘Y)"MÅYrpÒ_X“8_Ó†á%› BgX^áƒûî tL†Ü&šë‡éŠ5¨µš�¯7Áb—¬õŽ0¯µCu�õ_¡†^®Í³w¡©ö4ÔûÊÑäXç:üxoµDDïCGbaú´™yó+æÁ¢AªÜyJõöº ‘b`Vа;JCŽGÆè§�)ŠAxš¨ù!&aƒâŽÓhKäúñ9L¶_FMûPø×Üâ±Rœ w¯v/"›ëoÆkPS¹ ˜°÷­–ˆˆÂÖ0/%>³¡7¤ÃÇê¤Ï§w¡¿ÍP¥ŸÅÕ‰o/ÔÀ`yÁªEjjʯ>\¶A<V˜•"h¼oDâœÃkÙ@Ñ‘³é Š/}Tó=.g!³ô ¬£ ³^{'y¤á'ª@«£À—m€¸oµDD¶†yéq®t?öê"ªÍr³€Þ»¨û"iª8¹í{<äœëE¿É´ÂÞ×ÃÀL´îDx‡‡ñ|É{ØÏï±ï­#0®wÁ–ç„©´ — ×_^pjPœ‘ƒÒ†ÝȔﭖˆˆ"Ö0‡ÇŒŒ¸iF„01€Nc J²ä²:’³ŽBûÝyhâáNtÄ2S–d%îö7ЄBLaØ21K ®kÕxëàõõ¶ãî@“%xž`h«¥õ]Õ "Z“Ô0Ï 6b¿¬vrO_Æ-ËðüÆê¨ºm�×-TVÖݵ•ŽÆsÈÏ9‰«›™hãùà¾×Œî©T¶lÃÞêDï0,·¾ƒV¾%¦»ó ˆÖN|†öêc(kè]·zµEQm˜]¿U "¢5‰I óB7¢JæŸ@±s~èV¼æéa þZP2[í‰uÛ€ÍÀ¬ë¶ ÑÅfÞèé…>§ô})È(<O²2«þEú |›Ê…{& ¦BþŽË6ì­j^×ÜÒ×@£9]ƒ–ÅÉ‹ë,x%ãûJ侕MãËòëß”"3³lÝV5ˆˆÖ$Ö5ÌÂ8wQ#Ý:þ Êã¡ý¬ËŒZ£méæq§ æÊ,$³­½–X¿CÞ°§Aå÷Aõ³ÆëhÔBNÔöþ†Ãp*U.´=£òu;,šr]/¤«á*qpµ¾nb±aÏOßwÈOQ!)y7 ?ýY»Þ‡z_ ô}/Ö?¤m˜}Ù%#ØÚË?à 3Ň˜Ô0‡3¯ã§øè’éÎ_ò~èÖ´=f¥X·7P¢1=4„¿B“ÐìCÔÔ¢ÇÍ“5«v’öàôÿ9 Ù-ýÿ¢ÀxíDå„©Rƒï/6䣚üýÑoØaÈK†*»=ãÒåœ`¦Ð—üopü˜Rçìßâ@Uç’w¢ÇŠÚ})붪AD´&1éÃ<WW#´š¯qË./LH-wãgH“«ÝÝ XòÑ‹þgëÖ^”Y)”ÐÈ|]pýøŒ /¹õã´ÿ„ÊŒÝQ†])t[k¹»¶Yù,æl¼›¾ª„ïÃìÁÐàhÈÊ«ˆYÛ78¨é–þk|Vhw&cŸahþÏYÌž_¡É>??^{£ˆ£è¬Ú‹´Üc¨”ïÊ”ŒìÔ7”Rˆz{"_ø‘’Ì=®Ç^ÕHÍÊAzZ ŒC6îD’jt}qp®&11µü³S°Ô È0°.¡žY)ÂÖ0ÏâYï#¸×çb,ADªaV!9§v ä«õ+¸ ù–ñIXµÙHÍ=ƒ«¶ ()ØTNüXÛ„?‚.6\.ìæ*d$k¢ »òó•‹Ý åBr`N}é©onxf?qƒ?7@SZµú Š+ëðóàd‚ÿ;‘’øl:¼“SAQÄìÀ©¾y׈`ÿ‡¤sñ¦/óx¡±è¨–}6K‡jÊ =pyc{»œY)ÂÖ0ŸEinÁühɘ-¿>¤À|ãŸÐýòkÐmé°`4ê7c¸>Ì2£½¿a0¡[eDªaÞÝïÑwž¢ë[-4†¬Ð¦îBnù5Ø6¼%_œß¦$"ŠÑ…ÖÏ/¢õÔ—hœÁxW5²ã üÌgÕbgZ1t׃ËýŒ¸¦9ˆÝ¥ÿ’~mÂ[H;Ò×ÄÀ¬k˜ pÌ8€9æ¤+ê/–uyÆbÆ=w4M ݦjh~ê\º-í¨/þslÎÉ \NÜÐèñKOðßÛk¿{ -õÂôa–‰nôva# âþ6%Q Ì9nàã´7Â,v¼ƒòöç¯ÚD´TëðsHg/Ÿõ2N4= <Š-f¥` ó+G»q¹x’—8 atEs#•u;]Õ×:mVØ<ãÅD¸öo“°4uÀx´2yã` ~êêYº-Ýõ(~_³Å§gc.7âþ6%‘Lgmi†^+ßM®…¡Õ†Ñ5|¾ˆO(È,…>hõÖh¼s÷ŸqÑ Uœ°áÎõ«0\ë‚sV„èyŒŽ¦×õn³Bø_\ò ÞÔ½a/®Ä0 ›.Û²ËQrëÇhꈲœB.브ú‡Ž :^ù€¹ü(ôÖ'ºÞœ5»Â„Ë­LÀhÅ)Ë/ÔFDל(RYGБüªZŸ¬ÿk9ÎoSðOR¥"ëÀä¦ï@JýÏ£à6£òh,ãÁË�q4Õt²e{>‡Ù1q¶†‚T$gÁé¢Ã\B¯i^\‰Aî¡|y ‚ùDwÁ>Ï£Gx²¬äÙ ûÕ:´ûOH³k?‹ÌD ]¾‡Ð½³Ùåz\¾ØSû`”åNÜÐ^ÅCgðņt<1£ü€Vù×rÃzæu¼÷·)‰HñæKǶ#«ê.Sp˜*p¬i8ºE™ˆNãcªéËžø>ŒµžÆŽm…08¼äsp ½ŽÍxq%ÂØCóñ%t:‚ÛS ¿Å¨J2V7‚KCI¢­0û{(†Á:Gz% ¾(ÿ®/ðÈæ’.;Bøì¸z±þË=aí•×½§u¼ß¦$"òoˆK*XvÞ]Óç½ëG”×À°xž»Ã¥dÄÉTÓ¹ÇWp¨êþ¸‹ªÌíŽIk¼(X#f…ØŒWb˜Áãúá[×D]ÃÁKG†®YŒuÖàãš8/6äãîv”%« ü¥”®û ³¿KFǽ۔DDqdÖŽú¼ ±¼ü†vÃ)d§¦¢(ÚÏû  § æ‡4¥ã qhùÆF *;QeT¡Í= G«Í4Xž30Ókˆô⪬DmWè` &Ž4ãԙ븼áÌô¯iÅr"ïLb¯îÏõ£~ïö0Òu ój¤çÑeE‡¿ÍÛxÍÍ4DDëK:'Ž?ÄÍšà¼ù1fýù3­ù÷km,Ým¨>\ކ¾x™ À3úž :ÿ20+Êò×zNÅI >¸ï]Gó°gé B ‚¦+Öèû‡å¥ºÜ_“¸Œ4ÅchK=é°¾æëN€×»Á¯ÜXl¦!"Zw³˜°·Á ;ö;4u `‚ö¯…Y)6a*NbX¡%\Ôc­Exí( »YL^ñ?ƒex }‰·˜#L_›`AuÑU86ðC &›iˆˆÖ•öÆb¤©‚?kÞDFÅݨW˜Åñ_Q{ô$j{^–7„û=%a`VˆÍ˜Š“¤Àlúåuׂž·ëhÔ£Hc‚u4šÎ)XµYH+¾Ò)â 4ê\”êå?»¶‰D¬‹uážÉ‚ÐÁ/sý͸b <ZM¸“Ї@Y#,®p½žc/&›iˆˆÖ‘8Ò„¢·  5[{Ô‹ÞôNG}a¿°8°·¾±^9Üï) ³RlÂTœÄ bzh…žaf¢ö£KQö£”kl[P}þ¸—|¹¤k¾DSTÓ·ªH=”U§/[‰Ï íÎtë®]lHÇ5 Ô»+îØ0ÍŸõºb±™†ˆh –¯çÔÚ.ìçà}1rç3Üï)³’ˆ>>~¤¯�×ßÁøÇpP‡œÿ¹‰ò]™kjc&_áÛÚ~€N£Vß„®Çã X‘tÂTQ2ô¥š¢bhLVŒFõrœ«åÎÿÒrO Ò5'nE9-0VÖg3 Q¬ˆŽp¤ª c‹ç$é¼5ñ7Ë?À~à /ì_3ÑŠ"×0«2ΣÇå©p5äª÷PѲÓé6•Cƒ¡]XDÌÚ¾ÁGÚkØ49ïèÿ‹6C-4š蛺ñx"´·óYÒ%C‡óo¬ÿ'¢8"]È×bGj¨ÕPç¦#YþÌÊü =“l‰ùª˜‰V$æµÐÿwOP‡‡t¾Ä™&G”aWîQ‚·ÔZ˜­Î@—9�öÂpô šF92;ñcmþZ—Ç€ÿ§©»’5°DõW¿iR•ñZ\3¯Ù ‹]2THÎ8„O?ÉÁ®Ü±¯¨}~Qœ§àìºmYÔùŨÐ5£o|“³Ò 3ðòVò "Ô0‹ þýãQ†],šã¨ w³pN®ûtºÍ©†ùMdhº¥g& â0šŠ2¡Öþ«srþ"Eôb´Ï€£Çnad_¾¢Ã€<Õvdk»1.½o‹…Ffmzç­N"Šî˜ºÇCÎG^ô›LQp˜Ž}˜Wn…Ù‚žƒ¢ïAk |ÝJþ†ÃPŽªö‘ çYî‘ù#Ê3‹`püø½DäÄ m=þ;è¹³XÚa8sMO£\,ÐäÕcpÙEË ù¢\¥ŽÐ.óyËWÈf— "Š.#ÔË)äãm”µŽ¼Æ…½áé]èïÆfäÔVÃÀ¬ìÃüŠ"Õ0¿‰ô£70í° ¯ õù»šµjµ<ì"Åÿgdjº1™Ðüáj˜¥Óî`=Þ/jŠnuX„áH5ÚÇ‚n' c°ß<ƒÌý86òù›~�mft¶ù %Á¢Aê»ï"UõºDDD1⺅Êʺ ÖÒÑxù9'Ñ`u¯ý<%ïÛ轋º/ò‘¦J†Úè üea`Vöa~Uò ó×0<ZÚ%Ã5êYój¢èu ëªe…ùÈ/þ º¦‡þÛú‰-Ü ó¯ø·þcìØ©…5ª²_¹†¹ù;Òu@-]p|€ôd•t¡—MÏF¿fåøöB –ç¤÷Ujjʯ>„‡o"ŠÓÃü+´^y ¶ÚÒ9s<ðx5rgtkP’µr+Ð䬣Ð~wš Ì”ÈØ‡ù•‰‚€•skÃ"‹PìÊÄÑ›ˆ~ ʼÎ.\ÕžB¡ú Š+jÑÔ'ÖÀ%"¢�—µFÛÒE§ æÊ,$GY:67؈ýþ…‰4äž¾Œ[ ÓhÅiL¼Hä2ÂȘ•DÞ(eãlùµÇZP¶C:q„†¾%oɇçÄ#Ÿ¸]Ï0º0Všˆˆb+R sò~袞°*Àã´âN]% óO ÆØ û¨"3%¾×Ÿ-¯Lò†½"d–^k-Æ>„œ%¿gBó«Ô†%<‚°JÝÅ\?LW¬kèÉLDD¹š¡ÑÝEÏ’R¸^ô?›xµ®XÂ8wQSv…Ç?A¹‰%”Àb1[^™"´„›jGùÎR˜CJ\(”c­§±#x•#ܱã4ZÇØÇ˜ˆèµ “˜˜Z~>}ý®Xsð:~b— Jl±™-¯DòБ3ÒEEð<Ö‹ÈV퉲­œî–ô®’}½-hq'Xh”;\ì¥ßüX‰—hò÷‡üÞXG·À«Ðû ÎçËNq´݃ѼˆˆÖYLºbÍÀÕÕ­ækܲ¿²ƒôØrw¬ÁíQ•…Y!8[þ5ƒ0e £ð4ÎiΡòÄ>¤ªTHÉo€Ý¿ b5\ÆãÈ-= F§î8‹ÒÜã0ºìT¶‡²ˆ©öϰ³ä6ÜQ½ð\h1ÛVÙx9…^s'ÜGëFnפ¹‰®%·:-è®?Ž÷5Ͱ؞&9mŽXtÅš{\½ª7š•ƒô´‡l0Ü)î}Ðõ%ò°­È˜ƒ³å_‹0«©ÆßN_‚Jý]Ø£…,æp½œCÂÄ Ìò”¾cg–)'`­É…*ê¶rNé‚EÒsá.4ǹÈ-2IÑzE°p¨œý´nôÈn"¢1èŠå³éðN޼Ø!bvà ŽTßÇ´¼Ðfÿ‡tWYÀHL ÌJÂÙò›DÌ'QÞ>xÎÚËO&^`–O°#ŠÒö °üK)Ü~¹iP%íD~½ ÞÀW­,ÒxíCmÜ€Àü´õà\ÒõÃ…'æ/p@oñÿÚi¿ ÍÙ»Q®žÅÚ \õÒyè_¯^N!ºÐúù…ÀÞ’Q´žú­“3ïªVìTSf¢(ˆÞaXn}­¼š©»óBOʨȹËJ·±äÍ…å ˜eRhvÿSÜCYüâ*èïØ×0èC ÌEûÔ ß oÂüh³g�¶'ËW}v.¶Ë!Òßu¬ •™Õ:²›ˆhA,Ê)æ7ðqÚa'ÞAyûóÀW) 3Ñ*DO/ôùÒÉ&)…'ðIVrÕ¢HßeèóaÌü)>\©V\Þ÷á§0'd§ˆ9x]pK_æ<t fX\òͽhI¹P»r�•k¥ 7 0ûÍb¡Ÿù\?ê÷&#%êúl"¢ØŠE9…øÔˆ‚ÌRèƒj Æ0wÿ©Ø©¦ ÌD+’û0„J• mÏ(„Å•à°ÕVÁàˆ®»8Xœ´Ó0‡­mË|i»õ°¯¶qyËñÁÓ÷òSTHJÞÂO?FÖ®÷¡ÞW}Ÿ|«0Á\R²âs-: ø°ÄŒ•Š^bcµ~æò­Ï_×PßNDc±(§p›Qy´–ñàs™²§Ú20­h Ví$í3Àé?G,f·ôÿ‹V)³":Ñt8ªôèš:Ð78 —kƒ}hÒ• ]•‚ý†ÇH¸¼,¯œç%C•]ƒ¹^~a%xö!j_ƒ#ªóî ëÕH+»~ÈŽà„¹l7vë­ûóÇ~æDïbRNqƒ³r§Ú20+ûǾ"ÓÖdî®…mV>EÈ9ï¦ï„jÃ6Dwª÷ýW˜PO\ôY¡Ý™Œ}†¡ùìB`öü Möù¨ë|E×MNÙŽôâKhêxˆAÿf»Aôuü]q&TÛ>‚Á±þ)ØÏœˆâ]LÊ)\?¢´¸†Åï¿Ã¥dd–¡A¡Sm˜•‚ýc_à \]WpAó,ã“°j³‘š{WmÑ–¼äß<hÒ¡¢ø Ôêƒ(®¸Cûã® “Ÿ¯\ìÖ=„¿‹˜SßFzê›ØQÖ‚±¨ÿÞÜZì“K;B/8Tï¡¢åɆ„Uö3'¢ø'}fuÜ )§X£0‹l¢ÇŠÚ}é8hJ¼»¡Q``V ö}E>¸ïÞ@Gh¯ê¹~˜®X1x¸2ÆïßGÿ*ç._ÿ}Ü\¼ž¢ë[-4†¬Ð¦îBnù5ØÖ\ç+o´À¤û ÅùêùÖˆ—~@ûàäUö3'¢8¶›Ï,žõ>z­ÍÈ¢» Õ‡ËÑõþ“ÄÂÀ¬ìûŠV:uI†ôg˜>zü€oJ?‡)áÚʹp÷j7&C^Ssý͸b <ZÍ(îw ®²³Û‹þ®^Œ­+ö3'¢xæºõ)œ[2àIž&[�mJ:‡=Áí£™Øu´®U?ïçà±^ƒæŸ­p*qY9³R¸šQÿß¡eà Çq¬ýc#“Ãî_ú>(Ü~KÅYÈ,½ëh4OÖ ¡{É‘€“þ"Q­¡$à SY9¾ óºä¸~¥e?®[9w®v<Y]QöÎq"Š3.#òî‚-9 pÌ8€¹5æÀçW²FñÙ€Y)V»âôÝ ™ÿ¿)ü*r)Þáa<_rRñÁóðkì{ëŒQm4“N87¾†á‘Ücé ÿËc _ãFfSi.®¿ ·†gä ´áF£ Ìñ3é;lj(Î÷¢«?º9ª«c`^ÀÀ¬«^qþ‹òÿ¾›Q\q*�w{ —}¾¨êpÃ…îåÄçÃŽ~|à1…açØÒ )¾ÀÃZ5Þ:xލ.Μ¸QcÄ£° G/ 5?m@`æÎq"ŠsÇCÎG¯z'Œy³RÄôŠ“è5ˆÏÐ^} e ÑNJ º—ðÜùLúHXgÜ9NDñ.fwÂ<°Öj`´öÁÒë :_OÂZs·F”• ˜•"ì®Ù¥Äg6ôº~ I´FJß9NDqFn#[Y÷² N>Ï!?çä˜•Çi×üŽà9«âÈ-;µ–¶ ‰Y)ÂÖ0/=ΕîÇÞ…~¹´ ‚w¼¼ "¢¸2=ŒÁ¿B?ɧ`«=MÏ{ ‰Ãh:v6¨#Ô4ìúS¨±F9å600+EÄæã˜ƒ¼¯,Õå08¢)˜ƒçÑ#<Yñy}ý™[‹�¯——DD1ç2£Öh[ºÏÃiƒ¹2 ÉkžH*bÚrÇŽù•ééû¨>nÂSÞNc`V Ö0¿"^{#ŠÂÎåO‚*ã –a¬¼WO€Ët êÓ_†]ÙŸ?‚:–(`AuÑU8¢š.ùl®•ëƒÅ¿ÐÛË.DDk˜“÷Cuÿû ³6èé`ý[ÀHÓg8¥ÐŽ@ ÌJ"NÃei†^+4Ì¿Áååròʦ`Õf!­ø"®׃¯@£ÎE©þšôëØ&Vê–!ï2þ©Yûïê/Ž%ïJ Ø‹‘¦ sòNze°¸¦W9ù:a*)Äés¡AǹÈÝ{¶Ùõ>ËcÒ¡Õ|[v¹fYzl¹‹;Ö–çQ|p5C£»‹‹–Å£ý£ÞW º üÓ=|ãÎÊ\š``V ñúô‡"ÀÎ8„O?ÉÁ®Ü±¯¨.ÊÖhJ%Bpµ úü/!åR®þ ÿs$šç.ºÑØ Ég…vg:ŠuWƒ.6¤ãšêÝ¥ÐË¿¾cÃÄŠç_'ŒùéÈ:î"#ø8 ãàúŽvŸ{\½ª7¤‹Ÿ¤§•À8dƒñàN$©öA×§¼š>"ŠCÂ$&¦bü#—bäìAñBi†10+„è0 OµÙÚnŒ R´hQ(½ðgmz7 *ö ž’[¡9\ƒ}>‰‚°t4³ð¿ë.D9Ê:B ³"Êfàj¹„ó?»–þ=}¿£úÿ4a$ðpeÑŒÆÞ>›ïäÔcP1;pGªïC^ä亇qñ3ÅÞ4ß2¡{\¹g9f…ðYµØ™T�ƒs~çì|`‚Çò²×¼ Ñù0f>ŽmIÿ…bó_ß Æ`oÕ£4k¢e¡†9¨Œ@t5ãè®L½ý$´’[/àpÙ°û‹»¥@)Ÿd¥ÇãèªnE9h$| ó¦´A]hýüB`Çø(ZO}‰ÖÉŒwUó}DD „åg¡˜•bú´™y‹›Ê‹©ï¾‹TGú†åµ¡>?j½òÆ´%Ay²J/âŠFå(ë•j˜çË+0ÿsñ!iÛq˜[ɤ <aG«¾ Yɪ5Œ²_Ãü² â,\·Ob×®“¸íZߦˆsŽø8ìÐwPÞþ<ðUDD[ËÏ–c`V ¹Ì ß^¨Áò‚U‹ÔÔ<”_}å´5F`½uåE‡ ~o!(ëÑj›¿Âö ˆªÉƒâj˜åÎ" Èë#èÊÏUHPNÎA©N/…Þæ¨sÄfÄ ÌâS# 2µ×‹Ç ˜»ÿäûˆˆâÄ믳ül9f¢Õø»‹ÜBmù'(Ñ4¢íó„­Å®L]NÌJ=ƒh2݃ս¾›Ô6tbu[q«¶E…ðÞBPÖ·Â>!‡ZQzú|ÒÿFüÔ0û?ˆ:îÁ¢à:>"Šo1YfùÙ2 ÌDQ›ƒ×Õ‹;ú3(*®ÂåÊ Q–dÌa²µ{*nÃáõaö±)o!«¸Eù5èñ$vk?Ñ; ‹¥þ84mkÌâlwLÒÇ-t9½ÒãI v4Ãt§îè®Xˆˆ#«Ã,?[Ž™èˆÞ§è©­‰²K†ÜËù$êå–gâZËÞÆ¶|yhÇßpNBcQH=˜¼Rß{úòOP\©EeÔ%£Òsv�æ!x¥?ã±á0R’³Q|úcäkºÁfnDDAb°:Ìò³å˜‰–ñÁ}Ï ËÌ g…¹~˜êz0Õ‰cëO¢ªÕŽ–/‘¹°ÑÒ;�Ó±3hQÚÍ-y¥¾µÑf¹—s~¥çZkAÙŽ·o€ Á%Þ$"Š 6«Ã,? ÅÀL´ŒÜÕ¢0ÌÉ&äØq:p¿:ÑÓ }þNéûÞDÆ™_àžù­—ÿoTVèÑ•p'$î5õJ§ÛÈæú›Q×3]I†tqRHƒÖ?ÿƒ–ªl¨üÏû,¼Ž»…‘\íð ÀödåºóMiwGD‹Õaq†;ò÷™ºá”[Ÿz££éG¶•#¢`rßd *¿¿.d®ãûÊ<¼¥>‡ÆÅÏø¦4™¥W`]éCð`tÔt²ñÀR]ƒÃxœ(œ0ª“—_`,9TØQÖ‚±¨NÞ>xú¾C~Š Iª÷p¦Í…Çϸ¬©DEmÆ720»n D} ç‚ÚÛ…/ÛÝmOn{sÅÕáU/ì'[Q¶çs˜Sgûa(HErÖœ.: MÏxà‹”…™hÞáa<÷± úã`Sí(Ov…Yn³Öˆ¢°·È’ Ê8ƒeþ Á S¥ßû/.êP™›µ¦!p±!×/£43¥ 0õßY”®7žcÔt‚,¨.’kÁ7ð‰s‘Ÿš…¡ííB»»À÷m¤\Øû¬‘_ÿ‡tæõa¬õ4vl+ô/îˆNòÙ%ƒˆ–ó®?†ª®àò<¿Æ¾méQnØ“CwÒŠ/âúâ*µ|\F‹Rý5é×-°M$JiƆç+¨þø%QºÞø ©Q¯0{`o,Fšjùņ¿Ä¥¬—¼|Œ÷¢«?ÑîQB‰Á…ýÜã+8TuÜEUæöÀÁ)8L8Ö4¼1çÛ8ÃÀL´ q¼C:a¼‹Ü_HWæ_¢ü“½HU©"ÁùÑÏ«!¸ZP}þ¸—|¹¤k¾D“;Ñj˜ƒÌ=‚þ€]“AGñÖÀ¶dMtöäн3ź«AÒqMõî@Þ&6â ¶†yÏz…üÛm’X\ØKçé>ý!¤øï‚V¡Í= G«<pê,Ϙ‰(<Q J?×kPZ˜u~ *ë~Á gµ ;‡ïßó'–eõËJáÃxç9d¦íÉÊsМ+Ç'Ù©P%íD~½ ÑÒgàj¹„ó?»–ž¤¥ ]sâ܇"ì­Î³(Í-˜;/>Áí£™Øu´.h"Ú 1Øœ<¿é¯úÿq¶ÿÍM2f¢(ÌßøZ9 é®ÀUͱÖoëÐ59»~T)G`t,œÄ6nœóæ“'þ‚zM ÕjäŸEÝÏ«ïÖÿ†wF¾_¸P¿ÏSÄ[8fÀ3m¶XlN榿e˜‰Vñ²%\ 2 Oà“¬ äª?D‘¾wÕÐ'ոx:G ÌGÑ´Ž•˜å¾ËpK_#¨ÏC×`Ž®æøo+¾½Ø…Iß#è÷lGÊÁëp,ÔÛmV0e 3Å»Ô0sÓßr ÌD+úÃA¨T¹ÐöŒJ' ,šr]/`«­’N ¾.2ÑëF¿õwØ6jcZ\ j —¼…Ÿ~Œ¬]ïC½¯ú¾«<ò÷^ÅYÍW8•Œ”Ã7_†ãM ÌìMJDq/öÜô·3ÑŠä{´Ï�§ÿ ±˜ÝÒÿ/RÎXëW%— Uv zÆgý­à4…F¸f¢öø58V=ëÎÁ;:�«å\Þ8èÓÆÛ”D¤Üô· 3ÑŠDL[k¹»¶Yù!æl¼›¾30q.;\Ä‚¿ÃE2ö†æO° Ùó+4Ùç·ÜXkÞ¦$"åà}ÏFöºc ÌD«š«ë .h~€e|Vm6RsÏàªmµ’äç+»6—È9õm¤§¾¹†Iñƒ·)‰H9f1aoƒAwíwhêÀ„‚Ã33Ñ+‘®¼6XÚo㪼™­æGØVm3§PÂSt}«…Æð�ã‚ÚÔ]È-¿¶5Ÿ¯H·)++QÛ5ÊÀLD›Ï݆«¡e^ô›L°NG{– 70êMdTÜ…K¡¡™™èUˆnX¨…¦¼ê¬Ô–q´*aN›íæ ×V£ÆÔ·z›¹¸±ü6¥`©A‘a€%D´ù\F¨Cnðñ6ÊZG¢º°GšPôV´f+œžù3›èAŸá47ýmqô7ü Ó ¼X¬Ô7—¶Œ‹gÞGh,zªpFª=(3ôÄÇæD"R.×(-®aq2êu.• #³ VwTaW°|…<ÿ~¥ØVŽˆ"ðaÂÖâ?阺œ˜•[ v¢ÉtV7W”•ÆgÕbgZ1t×>ˆækšƒØ]ú/é×&ܱ)rõ…ˆâ„÷œÏ—FZÑcEí¾t4!šKzÑñŽTµalñNšaân–€ý†A®0Q¨9L¶V`OÅm8¼>Ì>6  å-d—¢(¿=®&®HƒíŽI ’·ÐåôJ'1ØÑ Ó^¸·bœð-Õ:ü2RÖg½ŒMOˆˆâ‹ènCõár4¬Úÿ~öúBìX€’›Žä¤$¨2¿BϤ2÷ë00­HîÃ|õƒ3Òg­eoc[þU8„¿á4œdæUJÏÙT˜‡à§ñØp)ÉÙ(>ý1ò5ÝÒ)y }|\C&¢8&o]–fèµò(lÌ¿­½\Lœ‚³ë´eEPç£B׌>¹Ÿ¾B10­hëO¢ªÕŽ–/‘© lšðÀtì šF¸ÍkEræü JùRkAÙŽ·/oއ`È¿°åú0ŽÅn>*$g§Ÿä`Wî‡ØWT‡¾µt'Zºkahµa”måˆ(ÑÓ }þNø[êœùî™?Ñzù¼ti„eœ­äV4×úC´þù´Te†½ÌÂë0áØ±[áB-QL‰òTÛ‘­íƸp‹…Ffmz¶þ8¨…f’*Y 7}R xìâ¥< ÌDÑ<õ°mØšùàéûù)*é¤ûδ¹0ãø—5h,g`&"Š)ÿæä¤œóåóyËWÈŽ²ÃÅÜãzì•BwVÕ] ÚÊÉ%JÒÄÀLDëL”®7žct᤻åqúűéÐfæAg›ò?,¤¾û.RJ ý¿»²Ðн€m刈( œ~EDñN„àêÄ·j`°<‡ …ßÔÔ<”_}ý€¨Y;êó>€Æò"ðÒ¹Ïp Ù©©(â 3­„Ó¯ˆ(î…éÃ,GûÐ=8¿ê¼:)t?ÄÍšà¼ù1fýù3­ù7GcÑÊ8ýŠˆâžë*57Ñe±Àtt×ÇûšfXlO–Œö_Ù<ÖkÐü³N…``&"Ч_QÜs¡^, w¨œý´º¢™V+H\!’’5ŠoÊÀLD5N¿"¢8çú Úúpº\pOÌ_à€ÞâÿµÓ~š³wá^õ*Ÿy3ÑZpúÅ3Ï�lO–¯ûì&\lwK¿!Œµ¡2³:ŠÌÀ¼€™ˆ(Z1ÙLCD´Ž„18‡Fæë”Ç;pñªòý¯ÅÀ,”Ú›Œ”’ÛQ¬0Káz´–^gô63Q´bº™†ˆhx`®=‹ÒÂ|ÙØ[j n´v£×øÒÌÀeùöUÇd{`­­F“+ôÚ$¬5çqkDYKÎ ÌDDÑŠéf"¢u&³>*®CGë¨+;Ò?€º°UºÜìx¼Êª±ˆYûw8Tó;þüŽL¹…c§Z0¦°µf"¢hÅt3 Ñ:ðþ KÇï°?‡W Ì…–—ó#²½ãxbÿí¿<Äèjç)qMÇ΢ula5zvý)ÔX=ÇÊÁÀLD­˜n¦!"Z¬w~€þBŠ÷¥cGV ¾Òÿ€fÝQ|¨·Á»¦‹yÓ–‹8ntH¿’LßGõqž*pA€™ˆ(VÖ´™†ˆh¹Œ8T~Cößñ‹îÞ>pŸìËE^q.\éY}…Y6kƒþÖ¿Œ4}†S­#óáYa˜‰ˆb&ÚÍ4DD \— ùN˜gƒýÃQv¾åŸîápVæj�3Q‚'l¸c4Âhê†sV„èyŒŽ¦qÇ:â¯e~%r)FÎ/”f(3Q´Ü0÷®ÒoÙgƒ¹Åx@D´Á&[Q¶çs˜Sgûa(HErÖœ.: MÏxà‹Öjo™Ð=®Ü»g ÌDDÑr™P”{ç4h"çJÕ(ò÷:%"Úx>ëEä×ÿ>ŒµžÆŽm…08¼ä:f¼ÂÓ»ÐßUæ‚�3Q´VíÃ,ÉP30Ñ&™{|‡ªîáÏ»¨ÊÜŽerÏä)8L8Ö4¼ö’ q®Þ»¨û"i*åžß˜‰ˆ¢%(oGä¢ Sígñ3mñúô‡"]À«2ªÐæž„£Uæ,Ï£ Ì"„‰tkP’µþ¡LYG¡ýî<47˜‰ˆh%AC�"Y@D´yxFŸ¿ò¨þ¹ÁFìOV!I•†ÜÓ—qË2<ß¿YœÆÄ‹à¹ÊÁÀLD­13J>4Àñ3èo8 %(1ÿxLD´IÛiźJæŸ@±öQ/Df""Z•øêsö Ìì ³Ê,BpÝFYZôvoà÷ˆˆ¶8a;¨);ŒÂ㟠ÜÄ’ ""ZÑ,\MG‘¢ÊD±îGtô ÂårÁ5øM—Pœþ&¶í7À1ør"¢„1¯ã'vÉ "¢(ˆ¡³úCÿ†šÐªŒ/Ðâš |!Ñ&ð Àö$ô<4‹g½Ö0²®®Fh5_ã–ýDÿÓ»¯7üd‹c`&"Z+¹Í’åtÅÈW«‘_ü.:0È‘ØD´Ù\7P¢>Ò/þ,Js  ³MIç¯'¸}4»Ž6Ã!@Ï=®Ç^ÕHÍÊAzZ ŒC6îD’jt}žÀW) 3Q´Æ{ÑÕ¿J}²o]÷Gˆˆ6˜ËˆüÔ,.æÕKŽ3`.ŠÀì³éðNN=E³Wp¤ú>¦å}öïpH÷J\``&"Š–ëG”•^Æu£ÆÇõoÊQ¦ÐM1D¢¹°_èBëçÐ:&GãQ´žú­“3ïªFökM ܺ˜‰ˆ¢ÅIDïÜ0u‡ (ñ¢ßd‚u:º"æ9Ç |œöF˜óÛ;(oø*ea`&"Š–ë'Ôzç;cD:Q£ÐIXD"^Ø¿²Ö‘ žøÔˆ‚ÌRè—ÜA»s÷ŸðD—¹3Q”D×ÔÔ4Âhê†sV„èyŒŽ¦—îÇàŽ<<›ˆh]¹n¡²².(èJGã9äçœDƒÕU`†§·¿½ Ëxäjeñ™ ½någ00Ek²e{>‡Ù1q¶†‚T$gÁé¢ÃÐôŒ¾ˆˆhMcð¯ÙÀƒS°Õžˆþ<¶ÓÆÒã\é~ìÕ=DèÿR¢b`&"Š’Ïzùõ@„c­§±c[! /D§ù ÝCDqÆeF­Ñ¶´TÌiƒ¹2 ÉÑž§"vÚ9Ž1¨AM ÌDDQš{|‡ªîáÏ»¨ÊÜŽe-§à0UàXÓpt·:‰ˆÖS¤æäýÐY'_´ŠXtÚH0 ÌDDÑ_ OÈ?åO•Q…6÷$­zh4Ð`yÎÀLD›ÏÕ î.z,X^ôz_ÿ5Ó‹¦{MDD«à}ÀxLDqH˜ÄÄÔkŽGÐs¹ɪ•jå¶Íd`&"""¢EþIÛö¢¼îÚÒnÆ›hTf f""""Z$: ÈË3À¹ìFš‚Bï®10%:aÞhî0‚NÍIÔt.í¶1ÐB310%8ÁRƒ"Ã@Tmåæ×c¯*¸v™5Ì ÌDDDD‰ÂûEï@µ,ìJ‡jÊ =pyWiž,£éÔ—0Þî´!¿Ã>:ø"ea`&"""J>«;ÓŠ¡»¼YψkšƒØ]ú/é×&ܱ­ÒbN„0ñvK3ôZy²Ÿ æßVÚ Œ™ˆˆˆ(QOÐR­ÃÏî¥Å>ëeœhzx´ŠÅžó*$g§Ÿä`Wî‡ØWT‡>Ïk¶¬Û¢˜‰ˆˆˆ…» WÛÿ‚à‹¼†<×ߌ++LýówÉPmG¶¶ã‚Á¢E¡ÑY›Ç ƒŠÒÄÀLDDD”("Æ^r¨£ýßÂ_Ö‘T�ƒsÖÿx>0Ácù ÙKT 3Q¢pÝBeeÝ’úecã9äç”á›àºæf+F#-O?€63:ÛüÁ¢Aê»ï"Uõ6ÊZG¸ÂLDDDD[Øô0ÿš_~i ¶ÚÐôŒ¯F„àêÄ·j`°<‡`Õ"55åW£Ĵ,a`&"""J®;Ð7Ù—qýæŠL$GYN!NØpG^…6uÃ9+Bô<FGÓ¸cQd9†Œ™ˆˆˆ(QDªaNÞÝ ý–˜lEÙžÏavLAœí‡¡ ÉYGpºèðV© 3Q¢p5C£»‹ž%Gl÷F]{ì³^D~ýÒ×û0Öz;¶Âà¾ßi@>7ýÑ–&LbÂóÿÁõCGæ_Á¡ª{øsà.ª2·:jLÁaªÀ±¦anú#"""¢-,CGÿŒ$¨2ªÐæž„£U/…ï h°<g`&"""¢­+vCGxFŸÃ#ýÄÀLDDD”08td}00%ŠW:â³B»Sµ¼»Æ ‡ª° îÀ·':f"""¢„ñŠCG 4Y¥Ð/L\í¸¦ú ®À·':f""""¥“sáðZ¿~‹c`&"""R:ÑÞî!xWµÖ¯ß☉ˆˆˆè%Ï�lOfÌâYï#¸Ú4ƒ™ˆˆˆˆ^rÝ@‰úÎiäÁ' ÇY”æÌo&ŸàöÑLì:Ú —B43Q¢ð>ƒóùòæqâhºç;g¬ÊeD~j¨ÕP/9 pÌ8€9f""""Ú²\·P©¹‰.‹– £»þ8Þ×4Ãb{²ú0’ñ^tõ+¥:9: ÌDDDD‰Âe„:LÏä—‡ ÉÙÿ@«+¤FyΟoôÂx¸ªµ~ýÇÀLDDD”(\?A[ÿ�N— ® ã‰ù Ð[ü¿vÚoCsöîÒ |l+·"f"""¢DájFýO,˜ÅpÃqk“çò‰ÆÚP™Y Kp©³€ÓÕ(_²Ño…ãÅÈ*``&"""¢­fµ¾»ÒŒÿ¿Í¾Gæ³Ãp$?d“ßÊG¾¦ãoOt ÌDDDD‰bÕ࢘÷Ý\ÖáBœñbÆÿ{<Ï_À«Ñ``&"""J¯ÜáBÄßÖïq±k >»{T;qÐ8„…EhÑÕŒ£»2qôöé+•‡™ˆˆˆ(Q„Ò·”øÌ†^÷ò^Í_ ïJ54O!K•ŠÃMÎÅpÌÀLDDDD‰!l óÒã\é~ìÕ=Älà[–½íï…ÅæbIFf"""¢D±†9ä8fÄ`ð¦?Z3Q¢à”¾uÁÀLDDD”HÄi¸,ÍÐkå Ì¿Áååròë``&"""JòÆ=ý!¤È#°3áÓOr°+÷Cì+ªCŸÇø¢W$ÌÀ+(³°™™ˆˆˆ(AˆòTÛ‘­íƸn‹…Ffmz7 ¾V‡ ÁRƒ"Ã�Âô×Hx ÌDDDD ÂgÕbgR ÎùóyËWÈÖX¢ »ÞGh,z*ÿDÀCµe†Å•x00%ŠéÐfæÍÁ– Rß}©ª·QÖ:Õ ³?t§CwÝ£ñåqMs»Kÿ%ýÚ„;¶1Eõcf`&"""J"W'¾½Pƒå9)ü¦¦æ¡üêCx¢M¸Â´TëðsÈpŸõ2N4= <Rf"""¢­ìïG¸uã¢n&'âŸè„;R€v·ájû_|‘ö\3®X'3Ñ–6ƒ§·Îã³ëýý"!L<ÂÍŠRÔöy¿†Ëu¸úå%‡ ;ÊZ0¦º f"""¢­N|›¡Y™‡Pq©×›ZÑe±À"]­hº^K‡‘v�š¶á•7ÿ¹n¡²²nIý²±ñòsÊðMp]s³£ ÌDDDD´uÌbÂÞ }i’CW„“w£Hc„Å5½úf½éa þ5ßeã¥)ØjO@Ó3x¬, ÌDDDD E„àÁ í7ÿ ³Õ>Œ‰µ´sݾÉ—ËtüæŠL$GÛš.Á00ÑK‘j˜“÷C§ ~Á˜‰ˆˆˆè%W34º»èY¨ö6 {Õ{93½$LbÂóÿÁei†^«F£Cƒù7ÅM÷ ÆÀLDDDD/‰/Ч?„”$’3áÓOr°+÷Cì+ªCŸÇø"ea`&"""JÞgp>_¾-OíC÷àü¸ìÕˆòTÛ‘­íö÷u,Z˜µéqÜ0¨È² f"""¢D!÷PÖÜ|Ùƒ9pt×ÇûšfXlOàYq¸‰<[‹I08ç[ËÍæ!x,_!›]2ˆˆˆˆhK[uJŸ ÉÙÿ@«k&ð aL?€63:ÛüŠ´`Ñ õÝw‘ªze­#\a&"""¢-Ìõ´õà\ÒCÙ…'æ/p@oñÿÚi¿ ÍÙ»pGL¾"W'¾½Pƒå9«©©y(¿ú…¶É``&"""JžØžx0aoƒAwíwhêÀsÛÿÄÅv·ôRkCef5,J¬­xE ÌDDDD Ã{c1ÒTÁeo"£â.\ríò\?ê÷&#¥äö +ÌŠ™ˆˆˆ(Aˆ#M(z«�Z³NÏü²èAŸá4Ž5 CÄ \–_aWh{¸WÅÀLDDD” ËWÈ«ÿcÙÆ<Ñi@¾B;\Ä3Q‚?àHUÆ[lj&áfùØmew®v<ùZ/úM&X§•YÇÁÀLDDD”0<°×bGj¨ÕPç¦#9) ªÌ¯Ð3eFÄÖtl+GDDDD‰@œ‚³ë´eEPç£B׌¾ñù!$QqýˆÒâŒFýÇu.• #³ V73ma±(§3^[ôXQ»/C˜ üž’00%Šu*§¥ ^}¸ }/¸ÂLDDDD[X¬Ê)Äi¸,ÍÐk5Ðhth0ÿ—W‰kË󘉈ˆˆE,Ê)ÄèÓBJ’ ɇðé'9Ø•û!öÕ¡O¡ý›˜‰ˆˆˆØZË)D‡yªíÈÖvc\!X´(4:0kÓãx´­é 3-òYµØ™T�ƒs¾³Æ|`‚Çò²:ü„™ˆˆˆˆ^š~�mft¶)ÿCÁ¢Aê»ï"UÅ>ÌDDDDD‚«ß^¨Áò‚U‹ÔÔ<”_}Ó²„™ˆˆˆˆ^ ³qP&Žö¡{p~ÕYi˜‰ˆˆˆ…g�¶'3á‰Ïlèu¯P‰ìº…JÍMtY,°ÝõÇñ¾¦Ûxe-530% × ”¨OáœFîŸþ8Wº{uqXvÄá' ‡ ÉÙÿ@«kå`žH˜‰ˆˆˆ…vóS³p@­†z¥ã˜ƒ‘š2»~‚¶þœ.\AÇó8 ·øí´ß†æì]¸²ÐÌÀLDDD”(Æ»a¨ýZÍ׸e—û.ÏÀe¹‹;Ö‘èÛÁE(ëðÙM¸Øî–~%BkCef5, é1ÇÀLDDD” æ×c¯ê ¤få =­Æ!Œw"Iµº>Oà«V!ŒÁ942_§<Þ‹Wíçû-æ¹~ÔïMFJÉm®0ÑÖâ³éðNN=E³Wp¤ú>¦åaûw8¤{辫òÀ\{¥…ùPç¦ã-µ7Z»Ñkü ‡ŒNé äUë_aWИlf"""¢D!ºÐúù´ŽÉav­§¾Dëä Æ»ª_mJŸËˆŠëÐÑú#êÊßÇŽô .,E•®7;+¦/33Q‚˜sÜÀÇio„élñÊÛŸ¾jÞ?aéøö'ãðJ¹0´çGd;!zÇñÄþ;ÚyˆQf""""ÚJħFd–Bo4¸xÜ€¹ûÏèWƒ…Xïü�ý… ïKÇŽ¬|¥ÿͺ£øPoƒW!!93Q˜«ã,ã!õÅ ¼¯2lÄeÄ¡òÛ²ÿŽ_t‡ðö#ød_.òŠ+páJW˜‰ˆˆˆ(1–Ö^îK†¼‰Ð3‚ÁþaÖ0Ñã}„Æ¢w ZVÃ,ª=(3ôÀå4±„"a`&"""J>«;ÓŠ¡»\ÃlÄ5ÍAì.ý—ôkîØÆ À2ä×ÂÀLDDD”(„'h©Öág÷Òâ Ÿõ2N4= <¢µb`&"""J$â$Ý· ×j ÑèÐ`þmmeaGcÏâYï#ÅLö ÅÀLDDD”(ÄèÓBJ’ ɇðé'9Ø•û!öÕ¡/ÚÉ|®(QŸÂ9¸޳(Í-€Î6%ýo<Áí£™Øu´.nú#"""¢­Dt§ÚŽlm7Æ10lÄY›Ç ƒÑÕ.»ŒÈO͵ê%GŽ0ÇÀLDDDD[•Ó_R ÎYÿãùÀ<å«èGc÷¢«ßx@2f"""¢D1ý�Ú̼ùÒ ‰`Ñ õÝw‘ªze­#Q­0‹6Ü‘»k˜ºáœ!z££éGܱެ½s‚``&"""J"W'¾½Pƒå9«©©y(¿ú0ú!#“­(Ûó9ÌŽ)ˆ³ý0¤"9ëN†¦g<ðEÊÂÀLDDD”(Üm¸Úñ<d%Ù‹~“ Öéè³ÏzùõH†c­§±c[! /D§ùÑ–u$f"""¢Dá2BnÊ_Rô%s¯àPÕ=ü9pU™Û±£¬c⦠kŽêÏH4 ÌDDDD‰Âõ#J‹k`Xœòw†K%ÈÈ,CƒÕ]Ø]lM—UFÚÜ“p´ê¡Ñ\@ƒ%tõZ˜‰ˆˆˆ…÷œÏ—Mˆ+j÷¥ã qÑ/à} Äx¼3QÝm¨>\ކ¾Š\Žf""""¢00Ñê„xZ¢ÁÀLDDDD«,5(2 °­%š9x?A×x¼ ï#4½Õ²ÖtÒ¡Úƒ2C\Þè·&f"""¢D$LÂa¹…ÚÓyHU%CmtþÃÊ|V-v¦Cw}¡5ÝüqMs»Kÿ%ýÚ„;¶1Em d`&"""JsðŽ>B[£E)HJziêÏñÍ÷:è¢]až ¥Z‡ŸÝK‹/|ÖË8Ñô4ðHY˜‰ˆˆˆ„8ö *v½!å]È×\Gçãñ@ͱB´öäñÚíAðEþú¹þf\±N%>f"""¢D"ŒÁÞªGyñgÐßé…Ë;Ï€ 57¢+Ɉ<^;øPFf¾'Á10% Ñó EoC•œŒíIÑ×0Ãu ••uKê—çŸS†o‚ëš›­e`&"""¢-EôbÔöo´G‘•¬B’êm¨¿¨ƒ¹ó6šºG_´Šéa þ5x°` ¶ÚÐôŒ+ 3Q‚]-¨ÊMƒ*éM¤—|ëxhð‚ëôMv¸\® ã?0Wd"Ycaf""""ÚêxœVÜ©;‹â‚TÖÝ…uàW´þå s¤æäýÐ)h£_0f"""¢D(Ñh¬<ˆ¢¨k˜›¡ÑÝEÅËâaÃиWQ½—ƒ10% ¹%\Çó`ëEÿÿÔáºÝx¼ aS¾À’10%Šˆ-áÞFYëHô+Äâ4\–fèµh4:4˜SÜ8ì` ÌDDDD‰Âõ#J‹k`Xl w†K%ÈÈ,CƒÕ]`_ O)I*$g§Ÿä`Wî‡ØWT‡>2Wž˜‰ˆˆˆ…÷œÏ—ö±=VÔîKÇAã¢Y#ä©¶#[ÛqA„`Ñ¢ÐèÀ¬Mã†AEÖ130%0Ñ݆êÃåhè{UØõYµØ™T�ƒs¾%Ý|`‚Çò²ÙVŽˆˆˆˆ¶4Ï�lOfÌâYï#¸£]ž~�mft¶)ÿCÁ¢Aê»ï"UµÆ:èÂÀLDDD”(\7P¢>…sy³ÞÂq¥¹óX|‚ÛG3±ëh3\“¯ÁÕ‰o/ÔÀ`yÁªEjjʯ>„G‰iYÂÀLDDD”(\Fä§fá€Z õ’£�ÇŒ˜‹&0»;`êYIö¢ßd‚uZ™‰™™ˆˆˆ(QŒ÷¢«ßxD˜Wˆ2ìÆª5]a`&"""Jp‚¥E†è6ì¹n¡²².Ж.p4žC~ÎÉè[Ó%f"""¢Dá}„Æ¢w  ·B¬Úƒ2CÏêH¦‡1ø×|‡Œ—¦`«=MÏxà±²00%K¸´bè®­KÇ5ÍAì.ý—ôkîØÆV^%v™Qk´Áår½<œ6˜+³Ì¶rDDDD´¥ OÐR­ÃÏÖg½ŒMOV©†9y?tÖÉÀ) 3Q¢û0;§!ø‚×ר‡ÙÕ î.z,X^ôzY¿,c`&"""J±èÃ,LbbÊx@2f"""¢D‹>Ì´ 3Q¢ˆÔ‡™^ 3Q¢à”¾uÁÀLDDD”(8¥o]00% Né[ ÌDDDD‰‚SúÖ3Q¢à”¾uÁÀLDDD”(8¥o]00% Né[ ÌDDDD[šž¾ïqòè%´9žÁiûœyRß,&{a±aB`\~ ÌDDDD[Ù\?ê÷¦"·ò_¨=W‚RTPeVâû¯ ‘â/ÉP!%ÿ;ôùC4½ f"""¢­ÌÝ„Â7ŽÃ<æƒ8Xœ¤B\ÿ݈ó4¸m} —Ë{K N]dYÆ+b`&"""ÚÊä~ÉX@°h,f£å:ª C/òT;*¿b—ŒWÅÀLDDD´•ùB—ù9Ú§ÄùÀ¼½ ]ô‡âBý5 ÿÂê}¨høZ+f"""¢-Í ‡± U­Ãk=…7ÞÑÁæóÁc¿Ê}iP%¿ôÔatq}ùU10muâ ØŒçP\ô®Ú^„Ô*{a¿Z‡öqnú{U ÌDDDDD+``&""""Z3Ñ ˜‰ˆˆˆˆVÀÀLDDDD´f""""¢00­€™ˆˆˆˆh ÌDDDDD+``&""""Z3Ñ ˜‰ˆˆˆˆVÀÀLDDDD´f""""¢00­€™ˆˆˆˆh ÌDDDDD+``&""""Z3Ñ ˜‰ˆˆˆˆ"þŽøM¯ŒÄÆ(����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS-AppB-hdf_write_xdr_cdf.png����������������������������0000664�0000000�0000000�00000237232�15030617045�0026036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��u�����‰3B7���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïOSÙ÷óô‰OîÄ&“LrbœL&ð�ã„Ín£cúE3Þ`œ ¨dnÁ¹GÐŒõ«Ó^3‚Çé=#7j¡WE¥z„ù‚#3å’~=õ N+Ö”)^E û}ïÕú»´t·{>¯“•cºY{¯½Öz¯µ>?²@AAd<$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ V�$ê‚ ‚ $&+++é’($ê‚ ‚ $f9¢,uAA@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ b@¢Ž ‚ bàefÿ~‰×‚ïc„×/ñ÷¬ÿ—HÔAAp€_”ÍcÊø56•ì‚R©ŒRv¡dÓ×0NÍû¾C¢Ž ‚ ‚ ‚E] ÖŠŸÙÏ¢–µ5$ê‚ ‚ xÃ/ʼø ¿Ùp8üÅÖ ÇNß„uág/'à 8¢%QGAÁ~Q6©žV\êí‡Édò—Þ‹¨ø £nßïC¢Ž ‚ ‚‚D]´ãל*uAA<ãe¢¨»{ûŸ‚J¥òõEܲN"šS,‰:‚ ‚ ð‹2îÉIL/Ò$uAA&ÊÜã6ÝE›^Cço°8ÞFÝ¥c¨#‚ ‚à€@Q&8 -ÝàùÙbQ¢²õ?pù~'uAAàeï`ÓíÁšÜí¨R_D«^½¾º¾†òƒƒh{EŽAAÜâenŒvÖ£Î8æû¼€¯Úÿ‰Ÿmï<Ÿ„éILº)MAAWøEÙœƒ—qäˆ]ý qêúÑ×yU•ß¡Óó³~ô^jEe” ‚ ‚à ¿(£4aAAK (l­8P~,8N]h9m€å-¿AApE(sOabzÎ÷!>HÔAAp€_” ˜}ý“aAé\°?øöÙÈÑêHÔAAp€_”±„þqæJ+ôžp& å"êwìFýe=Úº­˜ð|e¨#‚ ‚à€ Q·¤£Ä:4ô`<@×±Ÿ' ‰:‚ ‚ ‰a¢ìï „%wêØÏ[qñØi´"&QGA!;óQ–]eÄÔR6uï&`1|ãe•ÐZýIÃHÔAAÈN ¨[ÁÎÊÈÙ­ÃÓ�§ uAA²“€¨‹‰:‚ ‚ Ù!QGA± QGA± QGA± QGA±<¢ìëü‘çƒDAA,%Ê×ú.´ gjÞ÷“`HÔAAp@DQ&¼…cÀˆ+ª}(ÈV km Œ$ê‚ ‚ øÅ/ʸÇ,0^Q¡¼ ÇósOQäâã-'q—DAA¿øEÙ&…ºj;rk‘§üÚvlN7„7/ñò]Xþ0$ê‚ ‚ 8 \”ÍÃ5fE¯þŸ8Ýd@¯ùwt~w‘lê‚ ‚ x&\” p;m0µkq\ùâ'›:‚ ‚ Îñ‹²98­·¡=^Š<…Ïž.K삽8z䟴SGAÁ3~QÆ%qëâq(󲑧<½é\Ì”nÎ wd“:uAA<Q”¹§`3u@«9ñOü§ç7 ¼%G ‚ ‚ n‰-ʸ'†pÿŸ|˜ ‚ ‚kü¢Lp““˜Ž°!'L¾ÆëYÚ©#‚ ‚à¿(›ÇÔݳØüT*U@9…ãûÏRða‚ ‚ ž uƬ?³Ÿ iBAÁ7~Q&ŠºžV\êí‡ÉdK?úŒ­h¬=„º–~ŒFq%QGAÁ±EÙ ^¿Æ…gÑ?5çûY0$ê‚ ‚ 8 ¦(ìhÛ—‹¬œhsÌú~ ‰:‚ ‚ ð‹2³¿ÄëSVÁ5—ÿ}†—äýJAÁ/~QÆ%¾Æ¦’]P*•eJ6} ãÔ¬úTÔ`õ¤™ðB¢Ž ‚ ‚‚E] ï×ÉtVæ!+§ £nßwHÔAAp_” x;ð~³9àp„”—Þ°îiL8ý‚ŽA¢Ž ‚ ‚–eS°ô `<²I‰:‚ ‚ e‚ó®Öí ±©Û‰¢ÜØÝbA¤œþ$ê‚ ‚ 8À/ÊÞÁ¦Û…ø™ý,¼l€Ró/Ø]Á™%ØKuAAãesïUagÃØ‚lê,Ьƒ~è…øïW˜ QGAÁÁ¢lOþ{@ÈMá,‘Î^EHÔAAp@˜(scØtmz= `s!Š„uAA$Ê\q¥üÃ`»ºœOqº÷ï¨ÂŽDAAøE™¯Ú*°&Kì¢P_8Žòߣµù4Ê·ªÐGǯAAüâe.Xµ%PžEÿÔ0ug~zŒyÌâ…þ4~´º|¿̪uì&©P¡B… *Tx/^¼lBQµSìãÔ]ÔnÚeI>r 50¯æºåÜ$‘~¨ø„Ú… ÂÉ´~Ás}y«›œõaûï‰gˆ8ú®Á`~ aʈª÷  ¬½ˆ>ÇŒç¿Fb9uϬ7Y„ç—™ðCíÄ'Ô.N¦õ žëË[Ýä«Ï¼çogWùvç–ÁrêžYo²Ï/3á‡Ú‰O¨]"œLë<×—·ºÉWuqÁóËLø¡vâj‚'ÓúÏõå­nòÕ‡D]\ðü2~¨ø„Ú… ÂÉ´~Ás}y«›|õ!Q<¿Ì„j'>¡v!ˆp2­_ð\_Þê&_}HÔÅÏ/3á‡Ú‰O¨]"œLë<×—·ºÉWuqÁóËLø¡vâj‚'ÓúÏõå­nòÕ‡D]\ðü2~¨ø„Ú… ÂÉ´~Ás}y«›|õ<ûëܾŸ$ÊrêžYo²Ï/3á‡Ú‰O¨]"œLë<×—·ºÉYÿßðöÙ3ü–8BÀì³Çø/e” x‡Ú‰O¨]"œLë<×—·ºÉYÿßžÇÔÝïñÍ}‡×Nx ‡é*ê>9ãÔ¼ï‡Á,§îü¾Qàùe&üP;ñ µ A„“iý‚çúòV79ëãÿÛ¢¨{p ¿w ùR¬Ö»ø¡¢ ñ¿g­­!QGðµŸP»D8™Ö/x®/ou“³>þ¿-àí­zeFkõf¯˜ËR »¨ çþÙŽ:~%x‡Ú‰O¨]"œLë<×—·ºÉYÿߞǔ±kÅÏìgм=8õÃ4éÍxõx�IÔ¼CíÄ'Ô.N¦õ žëË[Ýä¬ÿoûD]öTi°NÌŠ?à7£ùóoèø•àj'>¡v!ˆp2­_ð\_Þê&g}ü[u=üj›¥\ äýÊõËLø¡vâj‚'ÓúÏõå­nrÖ'ìo»Ç1lº‹6½†Îß`q¼ yÁ,§îü¾Qàùe&üP;ñ µ A„“iý‚çúòV79ëø·ç�´¥<?[,ŠBT¶þ.ßœºóûfDa97I¤j'>¡v!ˆÌ‡ç~Ì[Ýä¬ÿo¿ƒM·kr·£J}­z=ôúVè~øÊ¢íUäœË©;¿oFx~™ ?ÔN|BíB™Ïý˜·ºÉYÿßvc´³uÆ1ßçÜxÕþOül{çù$LObÒí?]NÝù}3¢ÀóËLø¡vâjbÕãz ûëðal†§}Ÿø†ç~Ì[Ýä¬ÿoÏÁ9xGŽhÑÕo‚ÉÄJ?ú:/ ªò;tz~ÖÞK­è ð„]NÝù}3¢ÀóËLø¡vâjbÕãhG½ê:ú<«¿<h>„OT0YžÃ°[Â#<÷cÞê&g}ü;8N]Ô’]‚ý,Qø}3¢°œ›$ÒµŸP»«‡J6F- d£cÆ÷þ`õäÞê&g}ÿ¶`kÅòcP©TÑËi,áM–Sw~ߌ(ðü2~¨ø„Ú…Xõ8n@ÝüìåyçqìÒš<ÿ¶[oBuâ6F9ݰã¹óV79ëãÿÛÜc6<wÎù>û µ£ d9uç÷͈Ï/3AðõbÕã‚åyø.ܜՀï»Gʼnð›û¨/< Sd§DÙá¹óV79ëãÿÛó˜º{ûŸ Ù;…ãûÏâ.e” ‚ ˆå2‹ ë}èÏ@¥þ m}C˜XØ-™‚æ­ÙÈ©¼I;uË€·ºÉYÿߎaSbGˆÿûñÃï›…åÜ$‘J¸FFð:lðsclàßvq:*±JqÂz¥yŠÀÉu ênÃáv3p˜~‡5ÂQ/ð<òV79ëãÿÛ,MX+.õöûsúÑglEcí!Ôµôc”Ž_ ~pÃa8 ÕÞ O2“©ÍŸAÕÙ‹}Jü-"ýLcÄþ&< 0ŠÏ¢F1'ˆ•Œðª åïï†ºÓ »Ó;2 ®WÔÅÁ¶‘˜i›xçy·ºÉYŸØ{¯Œ_ãƒÂ³èŸŠ¼€XNÝù}3¢Àó˼:E¾ÌÓ.ÑËz7tùVÁDú°ÃP¯Á¾…Õ¡¯<hFÅ'*tš,‹“A¬ܦ³ØÑüß0ñ&Øu(U™2bÊÆU^á¹né&æ³ìhÛ—‹¬œhsÌú~ÌržeÆ=}zaxCu×Σù‘-È“ÌáBgíhÍÏÅÛ`íÔàD§##VÁ+;ôÊlOŸ‰Z²·¡ÁøœvR‰Uƒ`ûŸ7ÜÇ›ÅE¦�÷Äc\¯Ý†ºaÚ©Kžë–nسø{Âõ\1ÿûrž%‰:"Iæá|üÏÃì<]°^½ˆîq¶­<‹7Ý'P˜!«à•ƒ×ÔWñÈ(¶Åò¼µ»´0³Û-èT©Ñ9J-C¬œ°6—a}nv)•P–ä#[œW1ŽÁxƒD]&0ïyÙUFLù~’($êùp¿õþÏhT© Ö¶¡ïéø¢€›ÚŒ­Š<TÒN]š™Äc‹CZB˜³âê÷=gÿv¿Bwý¨LNÏ"ˆU0 {ß/PW—CYZºÆ ŽG>ã‘U+ê"†£™ÅËljy* oá0u@«faEš 3Z0&¹y‰º¸ QÇ!®Ç¸Rþ!bÛ°öñÅǨëòë¹0õ<“ °£%+îëšÄÁKmÛ<X˜¼fð´y9U´SG¬FïãjÏë¦ O ˜¢ùó Ïó`Jëæ¸†Je NÅz;ª’Ýh´L‹ÃÝsÜ<Pˆ:àˆÖ”Â$µ{‘ã™§rQ´kJò×#g·Og¥luqÁó˼:qãU[%ÞWªÑi¶ûr&ÎÃ56�Ých{EbA>¸¬WPž·ÖÓoŠ¢à8º<)DÁç0£Ç:I;¨Äê!jš°Pm|•}Õ—WRZ7±íJŽÍƒÊnÔa>Qç=9zE ·1¼à(&LÃf¨“Øû™D]\ðü2¯Nœ0©¡y8|KÜ®;BÇzr"Œ ­¼Jõ ˜ÂÊ.Œ êpà`;^‘’#V#Ž_QU¡N¯‡ÞSZ¡;W‰‚Âj´˜GIÔ%IJë6>€¾'Écš3«±!k7töàãv齟IÔʼn:Þx›® ݯ:‹Öþ+j Ë¡³½óýŒH;nT;š1:K Ï +ý–ÛH‘R\/aüò N3š¶çcþ™8óϪu£=0<Þ ÏZѼcT¦Ißœ°êjPœ›‹rÚ©K?$ê8ÄeAséFäí„RÉìrÄvZ‡BÕLe²w¥" C÷ùit¿ X‘2‡–ëÇP¸Sµ AxFïãô¾Z´ f†)ªu’ p?ÂuÍ78Óù³Q÷hþ%q,UuD#¸l軪FuY)J+¾BcÛ#ŒS°a™a6u-(]Ÿ‡¢]Ìîdò³ÈRlª?B¦ ‚ 2‚åLöé"¥us´£¾þ¢ïØÜW®œBé–# ÇÈý+‚çYüaóŸb1¯Û{hÓÐf4axÑi-2$ê˜Ãèíkè ï4ÿ†Kf¼õ}$äb.{®ªkP¦ÜƒŠº&´ ¾–Ðn„ ˆt³jEÝÛ ÿ*„¦ai:,.T=Ašâ`©Ü¿Òô,ÜÏÑU÷qp”ˆœ½ÐÆØú~œ¨#’$Fš°õGa|“Á<W&ܾ~>ÿ¤—ÌË= BnØøÊ+)­›£MzKp0u@½¾Ùq:9¤3÷¯ÿYÌáñ(Ö³y1»ª<Ž:­Í§Q¾U…¾(ö€Ëy–ò¾ #¼´` ÑZ÷äK¸=J‚"õˆ¢Îp ç.l‰_ƹŠ"V]‚yŒö„ä#Zš0ÖWwá´‹R‚È‚‚Ï6¢¥óßp¸2ÁEÂËr&ût‘ÒºE³©ËÞ‰Æ8ªéÌýë.Xµ%ÈZm/5Ï,^èOãGkd^ÿ÷ãGÞ7#b Áàrªj'¶6>o})¸6˜ÚÏãhIYeÐ;HP¤®‘¼ê!sp>º€íï½-¶h'R‰†ªjœÓµú·NƒŠ‚-¨jùc$êˆÕÈbðY² öâË/¶`cɧØ^~ƒNJ–,)­›£ªÆÛè7™`Z,xòr®8NÓ™û×ÿ,¼lBQõ‚Ó„€Ù§­ØÇbˆÆ8ÑÊ@Q-`H9¨Çp´E‹»eù®¨ö¡Àcþ”Çÿ‰Ëšh§N6ÜíÖ`_õåŒ$W&Ó±‡8DˆÚ£&%ÞßÓ [ælL„d6v(ÞC±úÇ™ËmR£LoìE‹C”ПoÜS˜˜ŸSÜ& ÊuCqî²¥/÷oP;‰c¯ÅЊn_à÷Ùá6+? Íý‘¨õÎ<Q—t Á9¼¹™Ácî¨ô½þHsnHîÌB™Žðݧ¢ºe€Ò¶«’Ðà³^Q÷ NÓYK|ü–*V­¨‹”’r¡(6£Z×ß1zšrÿ†µ“{æ»hÓëaèü ÇÛ˜‹ˆ°ïÇüoFÒ¶ lëÔ £ö+TÔjqkÀ—{Cº ¸FǯAD oÿ€ºp‡7W¨ˆÛ¤BîG!W‘9iÂV+AžWÆÖûmoùEµ›ªþ)þÛ€[–%Â5IÀ8NE™à€¶tƒ_„²¢(DeëÄ¿™Ìu’Ú6ÌÁi¹„òÜuÈÎ^'> ²©#‚ BàvôâÇo5Й^Ã- …Üܨ½úˆv¯—ƒûúZ4P5Ý€•ÍÛnL]0¦Àžš…9݈»!Γsæó8ÜöÂ÷i Ò˜û×/ÊXæ¥=X“»Uê‹hõˆÑVè~øÊFÍ‘îÿ~üÈ*ꤰm`®È–ûW¡®,öž‹ç•âøÅ›èm¿ãdÏ•.×Lí?AÍ\/¡Ó4 ApÇ }WıêÚ­,F˜øÙt·Ì©y‚çúÎàió.(¹(ÚV€¼r=ž µbOŽŠâóLÅ$à±£O"p°dŒ—Æ/ÊÜí¬GqÌ÷y7^µÿ?ûÒi Ó“˜ ¸—ŒuÉÛ6ÌÂa<…’ܵÞmÌ+fÊb þm唯E(Q~Šr-ÙmÉÏ<\Ž?ЮWÒª3hlé„i ;‚XÉÌ?mÆVÅZämA~^%ôÏ,ÐïÇ/Åv4:}¿Å|×÷-,%Øâ òC͵8íÉ©úVí—h´H~^‚ÀÁ’0Ž¿(›ƒsð2ŽÑ¢«Ák·}PUù:=?ëGï¥VôLùÍÏ2NÔIfÛàž‚Ý|ë+±»â.ÞúC}ÿÂï´S—¼ÛÊ E Ôý,Š&U-ôŽI±“4PBYaÉO(WÍYÙ›Pöå~müÊí•1£˜ÄJfÎÒˆ·4cX0;t ŸŸ~(JnëOØÛøHì5|Á{}…Ñ.|}â®7îå”55FL¹Gѧ*‡Ê$­è”$p°ŒãÅ/ÊæÅGSƒµ‹B4JY[cF‹:öbJlÛà=޽Œúí‡È¦.-Lìތ¬í:Ø=m¶ êFÅÿ—¾S ÀúïȆ¢Xƒ~æÙå6AU¦‡cöšýB ý‰Õ‰à€ñëo}±ÁÆ`¬9)N¤3ï;ͧ÷+×õíú¡3_YÿºŠH8X‚�Æñ®»€`kÅòcAqxÃÊi,Îß™E]$D¡÷â6´·¾Ï±ˆžwô~c€•ŒºÒ€€·f 75Á2Ëž7uÅø(”&L^æÌPoÈÆvÝ3ï ¸ ꜿCU|&Zó«yÛ5ìgA_'tOùµÝ¯}¿Å|×—eDø…ÏÓ�5Ã-<°9ÃÄW²H88Z�ã1—äõeí´H”{±ú~œð#êXh“Û¸x¼TTýÙPêí¾ÿ 7ååfÈ{ ߪ~†i| fu1rKŽáª…Žøä…µE 6-dda¢.÷ä箣4aĪEx¡ÇîÂ*hEˆþ:üÅ¥ 0ßõ‡óÝÄ×ÿÄxÔºÌâåÀcŒJRW GW‰l&ÅÓ"^̾~ɰgà‚ýÁ°{6DÂñ?~duLe¡W¯AeÑzñÈ.:�õOg º§¨£¼£ò“N—v"1XÛü¨†J÷ÆÝf¨s7¢¤öX(Ó±j¡=wÄh†ôç nþx=f}—•#]Ø\åÑ“‘=åªJv/ÚÎ'”ƒ—µ™?~Q6©ž‹8s% e£§\DýŽÝ¨¿¬G[·5Ì‹7ãDÝüðìô¤öÊCÉÑóh_ƒ!>è‰Éx ì)ï¨üÈàÒNÄ ³YíC‹ú,šÚ‹«zöÙ„Ž[%/qb5ô¾ :£c¼ö Is¤K ;-ÛÜ¢‘S|.–Ý8¨¥ $»™?A¢nIG‰u(hè Úñd?OYE{!œv3n]¬GYéahô½°²sí¸EÝ<œãyЛâÆèýýâÃ8G´‘ÒíÒNÄÍü4o}ŠÜ±-¿�åúÇÒŽœ¬÷PÜ85Š9A¬hƒÞ‹)[ŒîÚ…’üõÈÙ­ÃÓ(Ç`²"EŽô”1‡ñ‡ñ$ƒ¦Úä7“âÇ/Ê–Ú©c?oÅÅc§Ñˆ8E]�îq<íÕCS½e‡¾@­!Þã×[¿§£dëyá¾àèÀ…8pó¹(:ˆTN—v"æ¡ñC%š‡g€Y+š?ÿ&æYå~ íÞ °Ðš‡X…xã¾½‡¢†Ûö…Å`Gz6C]üa1ÒIÒ9ÒSI¤•P¤´©“‚d7“âÇ/Ê–°©{7‹á{/«„ÖêoëÌu‹ÌÃe»§Áb¬­ß£Ð‹“‰ºT“^—v"Ü5žÅ OÌG¶ý5ÆQqýÔKޯĪ%4èý …ÅH'Î!XžÇ6%ZU6uR²¬Í¤ø‰[” tVn Û-ŽûûÈ/ê‚lMèmëW€Û5Ã_ç\‘¤×¥H€ùg¸¾ÿC(…¶§(°¾ö>¤ÈDÛµÞ± *™à «®ʹ(çq§Žlê‚I‰=d"›Iñ³QHæ‰:Iúâ„ét-t6²J ît_5àfÛBî׫0ZFITË`ƒ~÷6Ti ܆·°‘½)±jýãp]ó Ît>…u_á€æ_ñ§šJ'dSçG*{Ȥ6“âgÕ‰ºäú pY¯ <b`Æ,( j £Äò)ÇŸûU|æžÁgò³s±[÷D†•#á‡y»þ†«ú´-ä~ÕÝ…eŒ¼Â‰UÌè}\íys~™ÒKgX6\ÛÔùp¿õþÏhõjmúžŽ§dQ/‰=dÊ6“Âasb2,çû²Šºäú³UEÈ«ø­;zý%¨”%¾Š.X&hW"u,„4ÙŠ†®!8}+]Á5ÃÁch ðä!ÒM@î×,–|§7XgÎ>èž’W2±J‰–&*¨(8 Ð=‹ ë}èÏ@¥þ m}Ca1ÍdÃõWÊCÌ<£®ë¹äÂN {Èä7“â‡=‹dXÎ÷euÉ'ôg;]8}æ^ˆg(ö4'Ñ6Jb.õ„æ~]`vÝò~•“…&Eß kxÒ7à1ÛlÇ+Næ‚H+ŽvÔ×_ ØË•S(ÝRZ~ÖaÆ}Ä ë•Šg´u(¨»ÍÁq±¯Ú*ñ¾RN³Ý·¨ǘ±è¤`Q/=dò›Iñ³úDG”%ŸÐ_pþ…í ö\—ÐIG®iDÀìP v|xÚ.ƒ!®ÜtUŸ wmíÔÉIhîׄgЕ~KÞ¯Äêäí†ÿ5 ™†¥é0Týã¾Ïü ¼jCùû»¡î4Ãî;r\¯0¨;ÊA–ëû7lR©ZÔ‹š!Y{Ȥ7“âgõ‰: \µýö\9((;Œ/Š P¢üåÚ.óø­Lf1>ØMÃ÷è~ëuGŽ@sDòíw"X0èÏð¡ê¡ø/³AýUŹX[ÞF;uÄêÄq Ú6+G@ù:ë ‘ÍaH·é,vx‚»ÃG–w°éjÑÐý* ì¨øWÔ–Cg“6î›—d¢¥ÙLЇÕ'ê’vÕf/Ô(%P÷‰/[5ÔBï˜W] )z¡"ƒp¿Æàõsh8Ó‰áÙy¨;ràî;ÈY‚X¥D³©ËÞ‰F^œ#l?ãó†ûx³(\DQ2ñ×k·a§Ä6`ËÂeAséF_Xæš#>Ïu(T=À”ä•ãù(:V¿dXÎ÷euɺj‡Ús-ˆºQñÿ)›Az˜Ãèík虊e¿èƒæ…ãY‚ ¹pt@Õxý&L‹Å‚gã.ùRDD!Ó\†õ s%sv'{EáYôÇwӇಡïªÕe¥(­ø m<NR#ÉQtDïçÔÌQ«OÔ%íª-à­YƒÂMMž”`^QWŒò7@±þ(ŒoÈQ"õ°à“ež—/v‘Þ^X n_]bµ<ÿ†Kfßñ,A¬ÜS˜˜Î°¹A˜†½ï¨«Ë¡,­@]cÇ#Ÿ_ÉàiÑ®=uqJ%9ŠŽêýL6uœ0Gß%|«ú¦ñ)˜ÕÅÈ-9†«–Ii¥‰Qù/x޵âŠj/¶T5c@‡y”Ú$­Ø¡Wf ZQ -€‚oR’EAÒ§T’£hǯ¨ªÐ@0_éÎU¢ °-ÏQì™$Ãr¾¿D!/Þ>{†¿C{Âì#4íQ£ß™öçÄ"vêU¸¼8x±ÒUéNTýðsÀÏnÁ<&¯¹5AQ*‹BJHwœR Ž¢]/a\/ÁiFSq¶ŠÂPÊ‹D]ÂÌaÂÒ噘 }vqU0çp/Ú w`%Cðôà>-h{èI&–¡¨ÛXHv²âij᱕§€YËØ£z þW‚ xG’, )C†8¥)8ŠFïãÍ{û%Ý]$QçA€ûÅí8ëÎcÊX‡Íu7asÍaö©»sÞGQEÊK5´K”¢ÙÔ)½¥‰œ#dÅŽ_µx(¶#êü ³U§ŽX½¤µâ=¶©YR‡qJ“ i)ÆBQlFµ®_²<°a×_FI~D³¸‹ÇK‘§È†Ro÷ý‡X°UÂoàCáŒÕ`MéUØÜï(›AÚEݵïÐxï÷�O2±XþÂx $‰ͦn=¶4þIÎÄêDx‰ûÇ>'uqᙿ JåNåæpCŠ, ©%qJ“iâÉyh Ì"–_T{°©êŸâ¿ ¸ey“–çÊê/52‹:fä8„^½•EëÅ;YѨøµxD;Ï?‚£C]'Q¸šòަ± ''1ÍáXHØqM¥Å½þ�±mú7,ÏÞPÆbÕ2oÕb“BIÝÏýýÀýƒÍU8À…H Ec“Í¢JÜ/Ð×¢ªé¬,!¾ÛSGWJL $ iâ~ޮӏ’Ô`Î|‡Û^ø>¥‡'êæ‡¯`g¶YŠ<”=ö…-pá-&&ã ì÷¼Õú±{ù Æó¢(T]iœ<úˆÕÌ;LN¼åp’"ù˜³4âÃ00q. 8Φ'1ÉÍ®‹ðpjÕ´[YTñ³é6n™³8ÈÅ‚£D.ж ¯\gC­Ø“£€¢ø<%^=JÒD˜°àVëUè~éƒ}V5ÄSô´ý*Ëó\;un8ífܺX²ÒÃÐè{asAH@Ôyp;16æäà'‚ xFpš Ùºê;ü;Ø}·q±ª¥w<ŸêO¢†“];¯£ÄZämA~^%ôÏ,ÐïÙ€,Åv4Êmbô–Ælñ-––°§=ÇÄoaÕ~‰F‹´F’„4™2¢zó×è´MC˜}Ýî\d}Ž£åûÒžûwŠº�ÜãxÚ«‡¦zÊ}ZC<ǯA? =v¯ ´ÉŠ\[›ñ”³`ÏÎâ–f Ì)á>?Ír9‹bÆúö6>‚ÜçQÂh¾>qo˜¢SMSîQô¥$«Sò!MæÌߣÔ#BçðÆxë×”AgsÉâxÂÞ3©áGÔ-2—íFœÞ¯¤Ñ¦‚ "9^£ûÌtz…G(¼œþ¿þÖ | Æš“0NÍ`¼ï4Še÷~íú¡Ç_Yÿº§R Š“ i2ÿôö6ÜÁ_C·ÑPøÖWw‰‚Tž1+DÔÍÁ9xÙ—Tü-œöÿÂ΄�sS€Éü,1÷dBfÒkSAH€Û†ví=Œú>ĪÂ9„ÁgÓ!;\³x9ð£Wó¶kØŸ·6\4e}ˆÚî׾ߒ‹Y¼ÐB×h€7©áØœÒ $)ò¶sV4àþèlF-TªoÑb ½vjY¢nþ 𷿢¤þŸh:U‰mlò/¬Çå eÞˆÙY ä”þ„AЋ“€˜CjmúžŽ“}]ÚH¯M±\æár àÖÅãP² B©í…«Ç5T*kpŠÅ¨[,'PU²[¯¦ÅIÿ9n(ÄÆpp ò<ÇÅ…UЊ&ý5töü‡Taîôtü‰ñ ªp»f¤Ÿ‡%ËÛê†sìõb ¹X¢n´ ek¡óÍ„áflÉ*CëŸzìß¡ÂMóS86X»4¨¹§Ñc¤@‚ŠQ×õœ„]šH¯M‘ ¶ª•ÅÛ“¬ìbTªÏ‹š8aù~… V¢0(]°É *»qP?„yÎDÇûµçNX4·Iƒrݧóœ¦Óµ[5IIcÞÖt°2DSÚ¾hön“JœhÊ 7µ¢A÷Ìß Óݨ?­€¯Ú*ñ¾RN³Ý§ºçá€î�Å©K2ØTñ1?ÝÎ÷ŶX‹Ü’/ÑÔþ‡/Rú¦'¦hÑC¬NÆÐ÷Db±‘JÒ˜!q¸¬WPñx˜oÖ@'e¶Žhy[·çcþ™¤y[Ó{FR“~Q7÷…_£{ZðŠº÷Ðç´@»ï�¾mþzÝ?q\¹uqÙ ˆ«Õ!oF‰ R˜wŽ!šME'z¬c$dEìcN;Ì·.âxÙg8 Ñ£×:*°$êˆUÌh ÆCvu´ËJ#<e@‡eu*B^Å÷h ¨›^ *e ª´âœ®ï‚e"sªay[Oï«EË ‹á—Y¬ Q'v›¾ Ƽ1Ö`퇰ÌÍÁi½†úíyPd€üÜýÐ;â™rÞÁ¦«ECw`Ð@–îWÔ–CgK Ö±|"ÚT¤hûX&b¿xÚ ½¦ee(«m£ãWbu"™]Všà(B8âÂÑÑ…Ógî…8™ˆbOsm£)sIæíõfÂÓð€‚K†0 ‹þ*Êãª%T]»`½zÝñfƒpYÐ\º¹E;¡TîBI~Žø Ö¡Põ�SÜõΕHš·ß‰¤ñ¤Ñ#ïWbµâhC]­6xgéŠ åå*xµË¦`{Эš9u4¢¥óß2¹†#8ÿƒöŸ ^¦ÐŠ)òöRðá"…{²ˆà²¡ïªÕe¥(­ø m0NaQÒ„üÛïD4Ø*º-ê³hj §À>›Ðqk�£Ô?ˆÕÊÛ ÿ×l–¦j¨ÍS¾Ï±‚C2{ñå[°±äSl/¿˜X”ˆáOÕ)Š«²Ãø¢¨�%ÊOQ®Çß/I„y{)øp*IÙ6¸€S'î¤bë—!úö»©áKüOjùð„zŠÜ±-¿�åúÇÒ.Nq@\>Ä*Äщ&½%8аýÚj ‘-{0ßp›;bŸU?ðlV¸Mj”ém˜µhq(ÞÔX)ƒ™@íBQu?³¡fvîµÐ;&E‘Ü ¹ ”y{)øp*‘À=Y{€ó›½á‚JYœvy„nwH0O²©“æ”ô¡ÒëH4kEóçßÁÄvÀÝ¡Ý{ÒÛÄj$Úf‚¢8íÇoñàq”ÈÚ Ý»»èuÏà4å £;©ÙŒ¬E¡µ êFÅÿ—>¤•$y{)øp IÚ=™¾Ý‚5ŵ¸â¤7ô`˜ ¹Ò�ÙÔñ‹£Æ³8áÙõžÇ”Q쌣p÷BU|ÆVˆ VŽPkïùE+½WpìX^ðh–ðö¨ wx#‹°¨¹}„\ŽÞš5(ÜÔË,« uÅø(ëúR›I‡ty{)øpÚHÌ=™mýîÃŽÀw ̹AfCé€lê¸eþ®ïßJõµ÷Á¡õA¤žˆ6u3n.Gyšß⃙¸ôâÇo5âù5Üf5rsw öê#ÉmÖ–Ç }—ð­êg˜Æ§Äù ¹%Ç"8AJDy{…·p˜:|Ž'MÐ-²dçX¡¢Ž… ¹]ã¨Ô?¡­o(ܯâËþæ7¨öŸC¯-°Q_`Hÿ#®ÑñkˆnS—2—v">ô»·ù„µ_p:ÂÆ5AÈB¤ºþ.hË7bƒÚbFBÄf–.ï¸Òggó98‡{Ñf¸óhhüXi7õI€ã×,–³|‹š±9»uxêÙmL+PÔ9a½R’`]îɾdò‹ß ,dS—æ0zûºßÌw´ù'0\2ƒ2¿ÊÉ tÔ×ábˆÈü“\âÑË ÒA›:Eþ\æoÄâ)®Z8̬£›ënÂæšÃìSvç¼¢Š*”—jÐïä/ÇÃüÓflU¼‡¢†Ûvúž 9JHƒðª åïï†ºÓ »ïá ®WÔûá ¯:Ps¬W]¦~ôõ à%¿¦·8F–… ž’› "ìÐ+³#´Âçñåû5‚XM8n@£8ÙaE~ûª¨pW-f~sÄëŒ%¼‚±ú¬)½ ›û·YBO &à6ÅO¼˜`{¸ï09ñ6ääy™>DQg8†Šs—Žø.ã\E «.Á<&ÿZrõb‡¡ªçt­þ¶ÑiPQ°U-`ŒD±æàvOØTñÌ7žâª…ÃNËŽ ÁhÅP×I.8o°�çÓ•]€ûÅmhoÇ™#‡EرMœ“¾8aÕÕ 877í6•+NÔ ¶ŸñyÃ}¼Y\!‰3ñ×k·ag\ñwÈóR~Ä6Áë g<ç£ ØþþçÐÛRcWAÄÃ4Fì!9!…I<jRâý=­°ñ9‡Djá<˜o(<ÅU‹„?øð:»‡Ñ™¿`<FËW`Š73Ôr`ηqñx)òÙPêí¾ÿ°¢Î„ëšop¦ó)f=¢î+Ðü+þ¬ÁtŠÔÈ*ê< ¹¹ ës‹°K©„²$ßoNQxýSñ¼ äyÉ'nŒvk°¯ú2—ƒäªFx‰îÓQÝ"}´w‚ÈøæŽâªEÅíÄØR§’À6~†Ð«× ²h½(ŠDa^t�êŸDy-^QǼu¯@­º€v+óÐ?›nSîWÉWö¾_ ®.‡²´uu7†ØÀäy)3óp>~Œç¡»>Âßà09öªb-ްxÂK B’ƒÄjï`¾Ñà#®šÜÌ_ÁÎl²y(9zí 'qÂ[LLÆ—½Âë(±¹E[ŸW ý3 ô{6ˆ×ÜŽÆÁÔÚ�Þºu ‡^,LÔ-ü›mHIü¢.3h»çù¸HÒ.ÎD0›º(žWŽÌ>ÅWNFÉÖ󞀔‚£6âÀÍç$òÒŠ†Ê2=Ð.b9Uµ[aVüŸãælÜx7ñ.¤"Ãá:˜/QÜÚ͸u±e¥‡¡Ñ÷Â:æ‚€¨ó¤ÛÒŒaAÀìÐ%|~ú!˜U¾ÛúöŠãb*µÄ›7o<B.R±Z­¾ßJyEð ýç+QÀ”wÐ &r>NÈ ó~Ý/®zvBɎЃÊQè‡gHÔɆúÒ|í m±ÔcxžD±a'<<ó] ˆÏØ5“Ú]O÷8žöê¡©Þ‡²C_ Ö§f0~ý­/2ÃŒ5'aœšÁxßé´ìÔþÿñ?BôŽw·N*dużf+j/GÕ믣{Ø»Š"xgãâ m•rÈö Ó.6A2ÚÃñ¦ O ˜YndBÒb.Û¸½_çm×°?¢s凨í~íû­Ôi·Nª]:†¬¢Îc°ºc!p Ìå<™Î•†U‘�4`ÊÛ‘èC‹ú,šÚÃ)°Ï&tÜÀè*·Í!V1Ñúgqzü:zW{B"xSÓ"y'OþØÂ*hƒ6’®¡óÁ_iÛ© Ü­“r—Ž!ïñ«ûzUG é9ԆƸ=Y"AqêÒ‰ð¦ ÕëCÐC Ù«¤ù'hÞú¹c[~Êõ1¤ÿ9Yq@œbâhG}ýÅ€ ],WN¡tË´˜Gù£¸¡é@!“ƒ({î¤6ÜÊîÖI¹KÇUÔy(ôEe%^›:ŠS'?ï`Ó•£°ê|@§nÅÕ^l ú™<˜+™¹GhüPéöÎn~þLleï~ íÞ °Ð¹,±‰˜Ð–¦Ãdhˆ€ãWTUh  _uç*QPXÍe»ÿé‹@!‰“ƒs–ç±ã§¦#B�Û­“z—Ž!³£ÄÚjNBÿ00Å+Â:OÐZŠS'?N˜T‡¼Â!énÔn¨B'…Î7Fgq³šg9O¢Æ8 ÷x/TÅg`¢¦!V#ŽN4é-Á§Cv :ë‹ÍcH×KØ_×JpšÑ´={ôÏÂB¥÷ ôþOãDÓ XY\R·¦Ž®Ô$ô—ÂÉÁq •Êœ ˆZü2ô‹ºÑ´™’‰‹ {rÓA ?[ô®ˆH¸ñªí¶Ù:ÔœæïQ¬Ø µ™^dcþ®ïÿа]lÖ×Þ¥ô'V%ÑŽ3³w¢ÑÌi¯`ÙÒš5ÿðþí5hdverÂÒ„í‚B‘‹¢mÈ+×ãÙP+öä( (>A‰É$qrÛ¿t!áA¬â‰àûN‘~QÕ> °Äk+0‡ÑÛ×Ðýf&ƶ+é§÷0ôå((;*®~N¡þðvä*È)m•ξåC°A¿{›oÇÚ¿“mè|eú V+ލo£?èth�OX¼3߯p×iÍÞÂÒX‚-žÜ´o1Ô\‹ÓžœªoaÕ~‰FË[ï¯I„$Nã賾Θܿ‰"ƒ¨ 0R½\’÷K¡ºâO8ÞúC ã¶`1ÒÊ"ˆÂÐBFú)Çý fƒÕe¥P–V¢^{Û»OÈÛÉîCG¬TBóO`¸d‡`‚X£ÿZ´W¡7<€Gw>EOÛ¯²¤‰ŠÞÓš £]øúÄ]¼a™2¢¦Æˆ)÷(úTåP™¤ÎÐ “C†åþM”ô‹º�û€9ó÷(õ(ü@Þ »v[œ"Œe3P¡þ²_’‘>/˜1uâËÈÞb}Ä…N@YÔg£B«�QxToþ¶i³O Û‹ì¢Ïq´|—Ž|§5›íú!äErx\ÿº§$Þý’ ¼KÆåþMY%æ­?bWC/¦ž¢×�4'NƒUoŸ=Ãß¡­0ûM{Ôèw®ŒíTÞÆà|Åfd‡vê¬2è<®}W Â0t;?AÕ?,zZ *Ýò³[0Q;«ÿf‚oѳ¦ÌþJ°ëPÊ££×iÍfñBÿ «þ0žˆÅp lNéë&Ax—ÌÌý?²Š:Q  ·a+òJ¢žyœÔîGqîZd唡Ù϶­Ž_[Ðö,À‹‰•¡¨ÛX˜‚­_"fS±kŠkq±5 S{:v†É¦N>Ü&¨v0÷ßg¦»¿Â†Ê›!ÎE±:˜z {î௡Ûh(|ë«»ðF˜†ÍP‡ƒm#2‹¤H03 ÎÒš±#Ì–c8 ùo-Ðþ¿õ°±º¸Ç1lþæáñÔˆ#)»¬ðÜ¿òŠ:†0…á»-PU•C©ÜƒŠú‹¸;<çƒfS§@ö–&rŽH ,NÝ>ìÐ= o³97(qŒ°A¡íE@hafM Ô0Ó‰+±Y´©b±Lpt 6£*Õ·h‰eJ,â‰1»v;ê/6áTÅ'â³\‡Âo~Â…Ý|sð”j¤’„w‘C$ÏÃùø1ž‡VPøÒ IùE]Rˆ¢îÚwh¼÷{€“X,a|…x²ðØAÞüÕþsèµÀþG\£ãWÛÆ¦GyÞf”Õž'­ã8\’p›-”Q‚XŸá{ g&¬:#†06ˆ²äHŸÃhÛX[щ7˜Ápó§ÈRêðg[5v¨:`ñÄýëRÀUÛ;ßwR‡0z§÷ÕrÞ%Ìþ¿Ê£lˆ‰wê0J¶ž‡…9ì8:p`c!Ü|žÔ}d¸¨'­ÉI8ÿ÷Lí?AÍRã%tR‰4â‹S´SºPȦN~Ä>2ú' š”)•(­h€ö–U¾c‚›ˆfñrà1Ÿ& ,b„ê:ú7.Äò ù>E”Éò<ÍâÔ{Bæµ{gÁçó=¢Î¤×,Ú©±qgº[ƒ³dåƒ=³ýÈ-ÚOyúáu ÎhKÙ–o Êã‹¢”(?Ey*¶~‰ˆ¯:Ps¬ƒ~ôõ à%¿ÊÈ$[±$R°ýO\1£À T•ìöÚY Ïqó@!6考‡Ž±dlW²‹¿Ñ‘‚ Q`éº k»1íuïÕ÷Âi½ˆ}ûN£¹µº¾†rS½ôÞ¯ËÆ>Ä“4˜¼d¸¨cö\{ P”@Ý?æ[5ÔB¥©º4lýŒw˜œ`øÛât­Ç«Œ ; •e8z*pò )Ûÿ±*ˆšQ`7ê‡0Ϩ»uó°:ŠåyçqìÒš<ÿ¶[oBuâvúvYÀù#g`±j#>dyW…IX Øž»ÙÌñ T‡ï׉9ŒÞéÀƒé‘›‚8¡œˆºYLX{ ×j<Z«ÇÝGG¨,÷ëfdm×ÁîùÝQ7*þ*ápY¯ <bêfˆ\‡Ë„úÒ|í ¼B‹wûŸ V,£À“ ZlFI@?g5àûîQñ_Ì®ù>ê O§5Ÿ³à„¾á�Êë~%4hïœW¿ïAz¢þ‰÷ÿâ6´·“‘R\#Ñœ:Å"qœPùE{÷UŸz<‘‚ov ªõKd%ðÖ¬Aá¦&ßNuÅø(P5M0a]„¼Šï‚=³r *e‰/EU,Ôég û†Å5"AÁ°„ûÐ5žJýÚú†0‘©¦"óOм59«-Lˇ;p—"O‘ ¥Þîû Å5â‚9JDK”pIÒ8¡2‹:'·C¡ø�Êã 7özí±úº ggòyë°þÀM¼Šù¢ÎÀÑw ߪ~†i|JÅÈ-9†«ž=aVâ ÇÑ…Ógî… (¢ØÓœDe”™y¸ Ý³ ~-09BÊ b5á„õJEH„u(¨» GF ;q4ý¾JÒ2ŠóÍÄzõT­ÛMì¢Pÿ$Šókñ 2)®‘(éK” ¯¨›2¢jmjQdž#¸†`¨TBåILðŒàü È™3æàü ¥9 deoBÙ—ûQ´ñ(·WB˵û?A¤áUÊßß u§v§wæ\¯0¨;Êiðabùá+Ø™-ŽgŠ<”=ö…yFx‹‰Éøl襸Fâ¸áøõ'èÿ;di·Þ@}Á&IMÅdu,]Gî7uD¼3‡íÌÓ÷‚?È™SXš°ÙPkÐ?>+Ž+&¨Êôp°Õá¡_bô;‚X¹¸Mg±#,ç¸Ø]xMŦ.ᥣÜÕ<¸á´›qëb=ÊJC£ï…uÌ!!A&Å5%šMô‰dužôKu"‡e w4n×L‚ß!–y sËœê ÙØ¾ícAÔ9‡ªøLZª ‚ÛÏø¼á>Þ,µ²ã¸Ç¸^» ;yLè1Kp9Uµ[a!J\úˆ’)!ˆÅ�tãi¯šê}(;ôj Ë8:•âq!ŠºH‰ÌC“8Q‚¼Ç¯o:qðˆS¾áxۧ®«ªØP8ôAÈüÂlLK°ia°g¢.÷äç®óå»ôüA¬2œ°6—aýBX“’|dgeAQxýSž E ÁRê1œö°p¢X‰”)!¨Ä�L ópÙn$é¹*Å5b!.&'16æJ¿%³£„8éhNâjDñ%>dû4í‚ÖMœQ8 ù!d®q¿@ßj¨t`Üm†:w#Jj#„ ˆÕ„0 {ß/PW—CYZºÆ 2á: ;VŒ–)!°øb�ú¾µ|˜cä¨UÐnevÁÌIä6n™_% Œ¤¸†TH¿%³¨q?ÇÝóZtÝ” ¶. *wW öT¬$ËNƒX'!d‚ 2€ÑŒ‡ŒM.<1$µm’ ®Óš¥/Scþi3¶*ÖŠ"r òó*¡f~Ïd)¶£q0¾S!)®‘8éÛ€’WÔö¢s€¥e™ƒ{.ÊÝÌYÐÙmKT pADüDM»õª¦Ìã:­Y›º¥déÉ>ÜÒŒaAÀìÐ%|~ú!X€&·õ'ìÓ¡RŠk$Nú6 äuÊK/a�ªDù·›¼c "ØäE«– ¿þbÀÄ*–+§PºåZÌ£Š:žÓšE±© H?(U¢z‚Ư¿õ™õŒÁXsÆ©Œ÷Fq¼•R\#aÒ·%³¨[*Q1+qDyv¿õþÏh_&µ¶ }OÇe8'amGðµ ±êy;‚á¿Cíç¦ai: Uz[%DÆÚÔyÓJ)êæm×°?â懨í~íû­ØHqÄñæ~í›|¼µâr¿Š¢î³Ún±;ECÀt÷ |KÔ¹ãJù‡P6ŽâcÔu='a'#¬þ v!V=ŽN4é-AA`v :ë‹Íaœ:a‚[l7Ñð�v¶óå|Šž¶_e2ì%½6u =vVA¸Ëª¿†ÎÅUŠk$¿«!÷«(ê–ŠAç6©QUÔ¹ñª­ï+Õè4ÛáôÄš‡kl�ºÇÐöŠd\°—•àjbÕí„({'ÍÑlÉÆ”Õ›¿F§mÂìèvç"»ès-ßÇÁÎâ&,]adè³cVüìîE›áÌ£±&/ ç nþx¦ñè"hÉ@ÌR\#aØ1õjÈýú¦•ŸÆÊ(ÁÛV¢²óoßçPXøŒCh÷ ²ëŽPŒ4!ñÀ'Ô.ĪÇÑUãmô5 à Ë*àûž˜3RO¬Ö9¼1Åú5ež|dÀ˜5g6×Ý„Í5‡Ù§:ìÎyEU(/ÕHšÓÔƒ˜e æ¼Zr¿ ÿEó–ͨî´Gx1™aáMTçíˆ§Ž‰¾Z4tnCÏbÂú+j Ë)›ŒxàjbÕãžÂÄtšÎ %`þé%ìm¸ƒ¿†n£¡ð=_àðiØ uäªe^G¼+Â+«?ÀšÒ«°¹ß¥fc%ªÓHH‰ˆYŠk$Œ{uä~eÌÑv�9ŠBT4þŠžÁaïÍ?BOÛ9Tä¯Ãš:Øb=X—Í¥}†š»P’Ÿ#N\ëP¨z€)—]«|BíB†0‰Aí^äˆ}WQЀû£S°µPÕ×£©oLfQ7ƒ§ÍGÐ`´b¨ë$ ¾°0®!¦ÀJ §YO¢ÙÔ­°Ü¯„¿Ñ{úSÏ zÊ‚ãèr„­2/’N˜füApÙÐwUê²R”V|…ÆkWÐôÓŸ’z”‰ÁÚàj‚‡ÿ~á†sìµÏn܋ۤA¹n(Â)WzœЖnŸá:»‡Ñ™¿`<ÿ¢¾N‹¾vk’23€¶;I¦ø’âQEݪÈýº€ðÓ54ÖU T©ô³sº GLeË$°PŠ*Yam@ðµ A„Ãu¿ˆáa¡(6£ZׇĠaÜNŒ9fŠò¯ ¯Ð¾ÙŠgG賤¸FÂQr¿JOŽð¢¨[ô"iÅåúx_y W=J~ÆU[P(±G ‘¬“üAíBáðÜ/æÌjlÈ«@cëÂç-¿¨ö`SÕ?ÅpËòF¦cØôæ_÷dƒX³µY†ÀçqÝÃу£"Å5xFÞ7y!MX,ÂÒ„‰/ÑÈ^{^’�#Í@¦»Q›K;urÂ:4ÁÔ.×ýÂý]§q7$ÄÆœù<·½ð}’‹ô¥¿b6vìÐÁ&çà8šŽ…×àyßä¤Ó„¹`ÕDC_à*eÎG°}M>…4‘|BíBápß/båG—•ô¥¿òà~…^Õhz}N• e¨ ×â<:•â #>'çëÅ¿õrÂ>Gp9`1ýË@›<2‹ºäÓ„ ã=h(ü%‡‹"ð$j¿ØŠ\…9¥-°JµçK$ k;‚?¨]"êÉ‘®üëóO›±U‘¸NDŠk$ΜæïQ¤ø�¥§šÑéÉ"`vøä¯óþ}‰2aÉ,ênAk L Ìœ jƒvØbg”ð"8‡p·Y…ª²R(K+Qñ^' "]°—”àj‚'ÓúŪíÇÂÚjNBÿ0ÀƒÔSþ„u,Î R\#aXÊÓ“P6[ý]h,~OlË|TéͰ=½ÍÎê¤ÃÀÈûf„\ž¨#øƒÄŸP»D8$ê¤#µuàžx«©Z53ÑjDKç¿ôþ•â‰Âlk¡³/H:lº2¬ÉZƒ¼ºaܳ³®–GoÆ Æ¬·¡Þþ>ò*/¢Ïæ½€™>ö’¨Ë8H<ð µ A„C¢N:RZ·Å@Ì dìÅ—_lÁÆ’O±½ü"ã=“â ìÔ)¼éBõz²r Í± ô&aRÕ% ‹£7c®‰W>C—sÎÀåxˆ–ÊSxÎM¤ |BíBᨓŽTÖÍ㹪xÅêw ¾“<f-ZÒ #+z)®‘8ÞšÎbkåEÜïí@cÙâsÊÁÏq,s¢°Ã¬¯CÁÖf 'YŽßäi ww ³Û”Âsn"Uxàj‚‡Dt¤²nž˜}Y»1½‚윢`*V™âr2âË‚í6<“Æz7tÁÁB¨ÌÚÑgX“|øቔ@âO¨]"uÒ‘Òº½ýêÂh´xãÛºM*ä~ôrrÎz~ºR\cÙ°]¹×A!M¤&ãFxš”2j'>¡v!ˆp2­_ð\ßÔÖMEŽ^üø­:Ók¸Íjäæî@íÕGpÆ­’¤¸Fj˜èBW’±ý2n„§I)3 vâj‚'ÓúÏõ¥1&:‚k¦ÎKh I²à-_£¢è�ôŽLi² è…É ¨ø„Ú… ÂÉ´~Ás}SY7a‚[ÌöÌð�öY‚ó)zÚ~Å-O0ßøâËÂeAséÏó‰^ÊHÔAÄj‚çy0¥u›2¢zó×è´MC˜}Ýî\d}Ž£åû ê÷ýÒHq„™Ã›ÎÃøGùxøôœsÌÎâuç%üJ¢Ž ‚ V«UÔÍ™¿Gió!0‘d<ŠõkÊ ³¹ Øu(Ûû5ùk$Ž&U´V—ïsd„éILF|ñC¢Ž ‚ 2ˆÕ*êæŸ^ÂÞ†;økè6 ßÃúê.¼¦a3Ôá`ÛH\¥R\#q˜¨«Múh5HÔAD±ZE?D ¸?:›Q •ê[´˜^Ç'Ȥ¸F¸ñªí(v¾Œy}áõF\ÉÕ€Dg°ûã©~"=9 Á'‘ÚŠJzÊjƒç{N}ÝÜp޽Žb—/R\#1§ šÒJ4vöÃjg™³BËë.àÙÔ­,Vã�•)PÛ±XÍïõôÂóó¦w!ÜãtjU¨*+…R© )ÛŸ]NÞ¯+ êüBmCÄb5¿Ô7Ò ÏÏ›·ºeλ)`¦Ï€ë$êVüÝ‹¾Ý‡õY4µ?†S`ŸMè¸5€Ñål];ÍЩ.Àhϼ|¾|µN»w¯·øYj ½z=7ɘ€Y§ÁwFæ}?!g¥M±ÿÞçá|üÏc¾À³x9ð£qõ¾ûÏïouãîY¹ßÀÚm€Ví·õ÷0àxëµµ›s#ÙጅVúÀÉÝýÍ?AóÖ÷ ÈýÛò P®Œ!ýçÈÉzÅˆí ‡ʬ|¨LNß2>ÚÆ›âF[µÙb}X‚ËZ䕪Ðfôqa‡^™ìT&³^ðñ~ȃü÷î†ÃPåÑ“âD¥?°œ@UÉîÅœŸ±á»Oðü®ñV7~êÃÆî{Pmÿ‡§NAE±ÕâÜ*Eš²Œ…øi ÔÀÝýÍ=Bã‡J4ψ ]+š?ÿ¦·â›ç~ íÞ °$š¦ŽD]pY¯`ß–2œºr&«-(1´àšÀK»¦Î‹8^ºǺžÇ9!‘¨“‚•>6ÅBþ{E~?r‹vF°U ,»qP?ÇåÂ[ݸ©k�ÅïA‘WŠã?èaìë‡ÉÔ>£?/Ežb#t¾H`1™Œ…VúÀÉßý¹1j<‹ÆWâË6)ãIÔGáï…ªø L‰Žx$ê–0õ;45-tÆ¡¤Ý¯ñ§VƒŸŸ¾õý $ê¤`¥M±ÿÞç0þð!ž$— =�uË…·ºñQ6wÖ`mÞW0޾óý,y¸lTnçT¶i’7 ­ô“»û›†ëû?„B¬«›¿(°¾ö>¦|¿7î1XM`G˜p†¼m#`ö¹ÿû¹ p¿ü7îYÞıò›Á˜ÕŒ»3éUâj†»¾›Fä¿÷(6uÂß` ÒDá»Oðü®ñV7>ê3 ³úìÐ ÇxŸœâï@£%ž…xt2nZé'w÷'Ø ß½ UÚ_ gI}ÅÐÙ ëXæ9;$?mÏ®Ä4,ߤ%‚9áe¥M±ÿÞ£ØÔ:Œ’­çaa‰Û8°±n>ÏøÅ Ïïouã£>,£„r‰*fBP›ô)VÆB+}àäïþ¼Þ¯¡‘¶Ý&œ.¿ [ƒ7Ê ?mÃ&°¯QõÃÏAB;¨\9eNò1ˆøYécS,ä¿÷X6uG¡ž!Q—&x«õa ý¿Æã˜ïs$&ÐWÈk¿ž7 ­ô“¿ûsÂz¥yŠÐãWVÖ¡ ú L îØ+~Ú&†¨k=ª‚ub]×"¯ü ¬I¦œ!⇟÷#ýÈïRÛÔñ Ïïouã¦>oÿ€¦¦5òFˆ0 »ñmÖšd Œ…VúÀÉÝýÍ™¡ÞŠÆ«Áâá”›ª eÿ¾eÁDLí0‰ÇG˜Ç™ðÒ‚ÑÌÙIâ§m"O`‚ë:ë>†"k”š8bî¢JmƒD¬ô±)òßû&,]ž±ÉÐgǬøÙ9Ü‹6ØGãÝùÈœ>Áó»Æ[Ýø©7¤Éùïº`› x›fÿB×éƒØ]Q‹Sª+0'·2ɸQh¥œüÝß ]çpæ®#xP›ëGÃÿË€QßÇØØa¨,ÃÑS¶.b9Uµ[‰ð,7`ãÆ#¸é˜õ}‡?ø}÷ÄÁbôšJ7 Kñ1jÛžÄïˆíö­¤t°ÒǦXÈïÌ»°›ënÂæšÃìSvç¼¢Š*”—jÐïŒgû#súÏïouã­>‚Û-.9RGÆB+}àäóþDÑày ²©³C_š¢]¡¶.b9¨Çð<‰ºå3§Uê‚uPä†ÎoÐáÕeƒ”VúØ ùïyñÚ# ¯`¬þ�kJÙøôvÝ‘8Ï3§Oðü®ñV7îžU¬Œq£ÐJ8ù»?)lêÆð°o8¥«“tÀ_ÛÌÀaüÅÙk£ü½Žàc&áõF¢ÚÔ­.¤tÀßû‘>ä¿÷<m>‚£C]'Q¨ø�Õ,¶¦k†ƒÇÐö*3Ìé<¿k¼ÕŸúx_)£Dü4Pjàîþ$±©›Æˆ=B¼4až%žjL&¸j÷k˜µ{‘“¥@Néyô>Ãá(#x¬»€kQ½_¸FFð:¬QÜø7†ÉÁ"aVúØ î]p@ËLØbóØ=ŒÎüãùÿõuZôÅe§”9}‚çw·ºqSÊ(™•>pòwÑlêÌÐnߦ®^ƒž—Øä/šQñ‰ & ìNþ&øi›Y8:O 4ìˆ(°ìDQîþ!M˜ýÐi¨nô·‰©ÍŸAÕÙ‹}Jü-"^VúØ nîÝíÄØ˜3à½uÂtº:[<KÇÌé<¿k¼ÕúPF‰¨¬ô“Ïû‹`S—Þ”;ìÞ¢–ìmh0Æ›«TX=33}\%êôeáíTÖ£¸¡k /ZböÌV+òß»7/ryÞÚ€÷×_5ЙF{³-sú« ¯ðV7>êC%¢ÂóË,üÝŸ·¯>ÀTÈ›8ÿ¤—Ìñ& ³ãšú*ÙÅò¼µ»´0³Û-èT©ÑÉqˆ.ß½XF·snDŸ{Ä ìÚy4?²·‰cµ 5?ÿmƒµSƒ!»´DDVúØ ùïMšEÈ«ø­f"úKP)K|qº`™ˆµ8Íœ>Áó»Æ[Ýø¨e”ˆÊJ8ù»¿h»l ¬¯î›¸F¶Èqê0gÅÕï{0Îþí~…îú=I¿Ð©„¯¶IÖè6JL.¸`½zݤY¼é>BJô|½éEþ{gý¡ §ÏÜÃhÐ{/Š=ÍI´ÆsÒ9}‚çw·ºñQÊ(••>pòwvªªqN×ê_ýê4¨(Ø‚ª–?0&Ér•y®í‚"§Švêâ% F·óO›±U‘‡JÚ©‹‹•>6Å‚—{Ou 0^úÏïouã¦>”Q"2+}àäïþ"x® “xÔ¤Äû{Ä4ÉÐ [e›Ñc7Æš<ðÓ6i2ºu;`ê‰'1ÁXécS,VͽsÒ'x~Þ¼ÕŸúxOW(£D+}ðàïþ" /qO²êM«jÂç§mÒgtKÄÏJ›b±šï]x~Þ¼Õ·úPF‰VúàÁßý¥2Å—.WæXkñÓ6©4ºW“®²¡[+}lŠÅʾwþúÏÏ›·ºñQŸ9Œvua` 577Ð…®¸ì?£“q=q¥œüÝ_ S|%”jL~øi›TÝ&׋d¥M±àãÞÝpÚ͸{½žÅ§Ú«7Ñcq,Êd)øë<¿k¼Õ—wÓ¡?„’ªA›#ÁåªJň-7 ­ô“¿û“"Å—©Æä‡«¶IÚèVЏ^D ì¹­Vä½wf«Ô mÕd¼Ãþ²y¥*´-i³›9}‚Õ‡Wx«õa¢n©ˆ¬”‘¨[idäýÍ?á’Q­·$I5&?|µM²F·RÄõ"YécS,ä»w¯Û·¥ §®ÜÉjÃË ×¢x\xi·ÂÔyÇKwãXW¬�ç™Ó'x~×x«õ‰dc‡¾L Óâ ÉÌjjIÔ­4ø»¿9¼1Åz±^¬nQËú£0¾‰6ØI‘jŒˆD°Ñ­ÓÎñÏÃ59µÄŽ…ÉÆõ"aý`µ"×½ S¿CSÓ‚Agï«û5þÔjðóÓhËÏÌé<¿k¼Õú¨‹ÊJ8¹»?aºŸ ê‡ŸV®-P•î ùÙ-˜Ç¢½Œ,+E/ÞÄJ5¶Ôn±$žZëàúŸ×P™³u Ï×9ŒÞ¾†î731ŽÖ]xb0Àœd.ÂÕÂJ›b!Ͻ ˜}nÅãtDÑöò߸g Ñ´Hæô žß5ÞêÆG}"ˆ:átJúfÞ%uD:p› ÚÑŒá 1LÀt÷WØPy3dE8r¿²s·ˆ…÷˜i�mõ»±G¹›k¯aÐ>gT'”xm<>@µñU”I„=¯ÕŠü÷>‡ñ‡ñ$æð1 Kã71&ÍÌ鬼Â[Ýø¨{·`·Þæ}ofmèÖ6 ¢´Õê_1ÈŽôÝCЕ QG¤am¡íE€¥0³¦Š j˜ãÒ`vêU¸¼¸«·œÝ>":.Xµ%ž¾±&7ÿÈZÜÜuâç÷°µùIpŒÁEÄAÆ Býå€L!úV\QíÅ–ªó6Et˜GIÔÅÁj›ä¿wö>2ž„”+§ Ì)-ê2¤Oðü®ñV7>ê3§©Û J¡êüox|×·Ð|ð jU¿ÀìL.¢?wok€d !%Ü6=Êó6£¬ö$Tªã8\’EÖ”6[D9N< ÌZ~ÀÕñ¿É¶SW-¶¿1áŠ6@xûìþ\f¡iýI,‘^bˆºÖó¨*`‹œµÈ+¿kTcS~úD¤y-Ñ’J"ý½D‹TDºv¢%õøâÔÍLÁ>0{”wpEÆ©Kö§§V¢°ýM Ê”J”V4@{Ëš@6 ;~Õvâ™ÃÇbÁPçWؘ­ 0%’aÎÒˆs⵩'Á_[Ðö,°MÄ2tu —´˜ ä$òñ«àz†Îº=‹P¥¦Ž˜11ùé¼Ïƒ<Õ÷gåE|·VkœºÌh ˜‚©­'NÏÕh6uë±¥ñOrŽ Á…ÉIÎ!ïW6ÈD²R {K9G[ˆ>@Séd)>Fm[<ùZùéìï&C²ß_ žêÇû³òíÝ -+0N»±dHöûD(nŒõkQQðâùŠR‡ï·bcÇ5•÷úM0™Ê¿ayö†‚ÛÆ€w–[¸fw·€…gèÆÏ=/ÅEBd®}‡Æ{¿´‰X,a<ê‘-AdspZõ¨.XEþaè,K^€Ÿ>‘ì<–ì÷—‚§úñþ¬¼0Q·JCšdF­"æ¡ñÃõ(®Õ†äÔÃÐ=§MÝ;LN8ñ¿ ]«Ju-‘E"Á5ƒöž<±õÜ6´ŸP¡uðµ8DÄbÖ_Q·O‹ÁöCîÉI8ÿ÷Lí?AͶÿ/¡“²HÍ ÆoPœ½9ÊïÑëN“'¼ÁHô ÞçAžêÇû³òB¢nÙ¤§ÒÁ<\¶ÐÞŽo/,e°8u;öAgÍë*`Î=§(W΃?¡4G¬ìM(ûr?Š6~åöJhã]EˉN› íM_¢$wm;”Ò#8AW¹…eÇp®¹mÆ^ߎB?úŒíhmþue›‘·ý,î‡Lh¡ÎhÙñTV Êã‹¢”(?E¹v {I‚à÷k˜µ{‘“¥@Néyô> ¶sŒà±î®Å˜4yé¼Ïƒ<Õ÷gå%‚¨[-qê2£Rˆ{ 6S;šŽî@®"J½Ý÷äboz5دé-h€´@ßx3>qã†ÙPkÐ?.ŠCû®LFÌ«ìÐ/°q* ×+Xî_ª|“'§¤"¯Ç¸Mã]y³`¸ßÀjÔ¢ªh½ç}÷² öA¥7Á±äqÑ;Øt{ P”@Ý?Æd«o@™„¥©:Û;ßïD&0 Gç ”*•PF-;Q”»?ƤÉOŸà}ä©~¼?+/LÔ­Ò8u™Ñ@R3רcÜ¿¢B¹Çvm-ò”_ã‡Ëh”{§nþ š·¾çy®a%Þ+Oî×ll×=ó¾Ð ¢Îù;TÅgøô~^á~]!Yk[ª‚¾wϹDv(S8íŒ>ƒÅ³S7�ëóñމXžËÍÈÚ®ƒÝó… lTüÿrò~É<œãy¨nþÆÀÀj Ô,ŽY溻°ŒÅÞ–3}\:iòÓ'Øøš É~)xªïÏÊË*S—x ï^Ü9IOI‹ðæê6®ë¾¥ªVô>§kÆÜ1]ðÓ¯ÚNà˜~á˜/ XÙj6¦ÄÁ²›‰ëi&êr?@~î:¬¯îÂngAf›f„¶öjµ·0à˜†Ûù:Í ÙŽ_Ù€Y§ÁwF›8l$‚€·f 75Á2Ë€M`Åø(”Ùc ÄU·¡Ê£,nc@H‚S‡Q²õ¼çy ŽØXˆ7Ÿs(òDqcêÄeÇà 0§ ¹E;¡,ÉGvÎ>è¢æUM#l'»Û�­šµ‹Zý=±ïúìwç܈>¤òÓ'‚æ±Ñ^tLû>Da΂Î.ÿ¨”êyÐ}_üµ%Mhü5)ë|-–’ò¦buº””©~VA¸cÇ©“‚4ÞM|Äÿ€}+ÅÆJä—úwŒÒÚ@Râ;R«­ø Ú[p¸fà2@sMîãWñEœ˜íµn¸\ l±¹_ ïG5Tº?0î6C»%µ¿ÀwÞF&aiù¹Š÷ýž8‘ÉhSŽ7\L¶Ê§Àd޾KøVõ3LãLx#·ä®Æí-¸ZaG)û½b&ìˆï(ôÃ3܈:aìÎWlö˜°±Ñ_’àÛ½W}ƒ®áIß{Çl€ 8x°¯d»aæñ}ªíÿ¹W±(6£Zÿ8»8>ú«ó"ÊKãTà"¤œªR¢<ÀT'èû)À}Ö¿&eý‚¯•xJJö9õ,Oü.‡tÜMB,ù€Æ,]ÐzlÎ| 0ɦ§R3„o)ÿ�Šìl¼—ŃM]Ü&œ.¿ [\;‰‘WOóO:pÉ<åûľ#qÝ·¨ôØ®±#ñã¸Øyím&Œû~K~–+ê¼ÉË{¦BU,‰xòŒòÀ[X·`Mq-.¶{®ë =^înA¨9ÅÌð»ô[ùÌ)\h,ŦÇöUc_?¼Dzüp¼yŠ8Ðù"†8ã§OÍc=”lž‹Y‚ç ö³Tâ¿>u‰Ç_c?“Šàk%ž’RʺDgyâw9¤ãn"êöìd]Äq¥(xØK’]ŒJ½VsÁ~zHb<Bõ_Щ ([!®*?€òøEtöÞDÛƒ1ß/É…Ö+â€ÚIYY‡‚ê+q„&‰¶zRð{ü*ŒÀذӳp`±®®˜— #"Ëu1c:~]®‘¼{oÝø÷òÅ’ä0Ãÿ}Ø*¾1!—â-†š?Ǫ‡>¡#>ëϨ*ÎÅÚò6™vêæ1e¬ÁÚ¼¯`äÐàÝI¬Ü|¦¨A„ùéìo.⸭10×ì‚­Ÿ¿Ç “ÝÐþ*“¨ûõ2Œ“ÏfÁfÚ÷‘‰åIãeüšQ—xJÊT?+/1Þ­ ²âƒ pO ¡·U…Ò<fsæóîkíÅÓ‰…Á†ëÁßÏ G<ùT×!¿ò2ÌÌC”<«ò|T4^ Xåˆå”›ª eÿ¾eÁDÌ\\=UUãœ. Q¶NƒŠ‚-¨jùc1¿+'âûç´Ã|ë"ê+ÊPQ·Ìqåÿ'G;u36vçbˆq1CŹËízç*ŠPXuiqKD‚=»ÓPݵ3íFsÅgPuöÃbŸKnÄ÷÷ÍoPí?‡^[ çú éŒÚcIܯ1xýÎtbxVL¢¨;ràÜ’atRsrøD°Ã1úSü1ÒçñÓ'‚æ±0ó—pQá-&&ýb6Õó ÿúÞØ~Ó=LÔ‰¿5=‰É€U„”õ ¾Vâ))Sý¬¼0QwµÝo|Ÿ#ñݵGV¸¨›‚nçûžŸ)òöá\—Õçô4P*pÃi7ãÖŨØ]‰ú‹·aúÆßåÞ©›£ëÎÜu–¢ØÓn3´Ç4Fìo‚¿/LâQ“ïïi…-½ÁÚ—‰ï8öJ=¶—‚,ÙxgFÓÑv8B»ÄÛ? ùêÆ;&‘v›æà|tÛßÿzrϪ{=Šº–È5šjfð´y—÷d#¬$¿#ÀLè(—ðPeí�6~úk£E„9¸ç+AÔ‰õ tª ú~ ¼¾àv‹=€¢.tgXÊú_+Ú©Pô””ÁßOK½{ŒHíš8鸛„{Àž¸mÐ/ÅÆ¥8ÎÄNŒUpz(ÅøŽc¯Ôï 2~•q`³=”6„ðݧ¢º…×@·Ñì� ø¦õ?qfÒH5oaÕÖ@c(˜·òW¨1.'´†£Ý쫾ŒÁLp`‘ q€¾vÍl»¬ ¡³ö�´æçâ¿m°vjp¢3d1”f„W¨9ÖŠ‡A;Ь<Áزg↩go:¿Æc¬Eðúê¡y8q&OŸšÇw ë›ô}`D˜ügLÐ]—éøõº! €®H˜¨ %#eý‚¯•xJÊT?+/ìýüŸÆÚIfñ\?ýIó§ãn"úöÅöµÇÑ’B–«pÅh†}jw[üi›ÒÓ@3zW{^‡4¶ Oþg#ZãÎõ™*¤Ê1׊û4a™a(¼jÇÁš€úÌZ ÝÛó»ø*(¸(MXâD‰S'öYëÕ‹ègƒò,ÞtŸ@á²¼’¥b–45þCŸ]¬‘Ø—‡{Ñf¸óh2»NÑúFHI·m&Û¡®iì¼%LÃnüE›µ°.q2ÀCŸ`Ïo‡¥¹EصèaÍ‚(ÿù%»½®wå£T6G‰Oð]EÈÍÉGÉÂçAŸ¥¬_ðµXJÊIŒ[ïC×xFœkÑÒùï˜ÁØSý¬†›±%ï(:#š(ÌÀÑyy›–~?—"=w“�q=`¶“eí…^ãs,ÈtïרÞM zY;."I6©„a:É;ÀI˜N×Cÿ‚Ùa xkú‡¢–/¥ KóO›±U‘‡JYwê˜ó@6×Ý„Í5‡Ù§:ìÎyEU(/û󲃜&îa˜Ä…¿ãÎ×›'ΜٿÐuú vWÔâ”ê LÑ.Ó„…‰ºð•¨ +éunŒÞo@sìËö Ë]E¹XSp]Qì=Sý¬ìhÛ— E~%Ûz08ÌÒØ`x°m,4›";uOÅ^›iº›øIô N4u×3\ÔýŠª t‹ƒa+tç*QPXs ×“ H‘ "#Ó„eŠ €YëOØ«ùï„´<çî¥ K)nL=OdÇÌyàˆ÷¸QxcõXSʽƒ]w$‰ ‰{¦“`/7¦3bíæášœZbÇÓ4aaǯàéø5Œ4¿Î?†vÓz«þ°;7‹‰Áì;9†bªŸU ÂhNGŠ£È"IÔÝ–Ä7}w'ÁØ®NK@Äzþxáûüý Áõö×ÁêHpšÑ´={ôÏ’VîÉ!A6)„aÚ™Äc‹#øÙ /qØëM|ídyÄ\nüvÁ+î|?Ž ¥ [ù0G‰#h0Z1Ôu… ßοk†ƒÇÐöj¹/qC¹ð옮?€ë^CeÎÖž¯ NÓ„½º¶?–Ê(ñ¿ÐvsÄ÷!õó ÿúsxuó&þXb9÷ÇMÜ|åÿ%)ët­¹Ghüð3èì!$c(¦ÙSØ‹?J‡çxßЈºŠ=P*÷ ¢î{躟J6§¤ãn"øÛ¡/W¢êT`€¾ÂRóx#¦§R0z§÷Õ¢…‡ãɤ³Adbš0; •e8òîªÚ‰­žû˜…ãælÜx7!HÚaÇ®jlÙxÈw ”&Lz¸]3àiâ?N\‡‚c÷0:óŒç™­QìcÈØ$îa(‚k/íh«ß=ÊíØ\{ ƒö18£î†pš&Œ2JÄ$èZÂÌšRìPßDÿ¢£D/º.VcSi#þÅ>?lűšŽÅ]»T?+/3°µ}Ý жõÁ:æJÙ¼žŽ»Iˆà§An¦ÛÔ9‡`yzÞ?‹—1šª–O7—&L|÷JóQ´+Ô>D,õžçIԉ̡ýÒïOè}¡4aÒ"Š€ÓµÐÙøð^ÄíÄØ˜SB±™¸‡aúqÁª-ñÌkrsñQp抋Ȭ¬÷°µùIŒÓÓ„QF‰X]K°A¿›e�ŠT‡€¢Ø…æ§Þ9—}N‚ë,÷¯B]½eÕj蘳§SÚe`úî&N‚0ÛæïÆd@or›Ô( ó!ŒÂ¨½•á6u×P©¬ Y‰±ÕÍn4Z¦Å{|Ž› ±ñ@GxL2"EŒáaßp„£ÿsÞ¦•¼h¿ŒÛIæ$–‚eP¸‚rO@ôð CQPG^ÄÒ{s2C'þ7çÞìa;uÕ¿Àlû1<!y½G‹ˆ¢î³ÚnD?€0Ý}ŸÉ&êª+eý‚¯5©îóÐt? 0 ˆT^/îØ¦úYEFð¶/W¢ì¸m}VŒIðnÊq71 ~Àlð(ÂD8íNOøãÖÉÓ@IÕ»i7ê‡0O¢Ž܉ä¼M‚Ëqpð¦Ð[iAey„Ù^!¯â{´.:7±r *e ª´¿ˆÿî‚eB~qoÎÌñfŸ³4âÜxmêø!h燲%Bã„΋©žý×g¢.ñ ºRÖ/øZÓ±b6(X³ˆ0ŠÏ"ÆMõ³ZØÞê צ܅CmÉÙÑË}7a?`QͺƒÆpQ—ùiÂ0>€¾'^7÷ \²‹‡¡c`@æÐ+’#EÎÛT2‹‰§a}²Ö£¨ò,~:¥N.ý,tFNŸ¹b!Š=ÍI´q³Sš"oÎLòf\˜œdöKñx¿òCÐ<ö¦•Ÿêb<WÖΕ¨ìüÛ÷9õó ÿúË ª+eý‚¯ÅÂíhp£¯?À4@,šQñ‰ &KØqgªŸ•—9Œvua`‰¡anà&®'™¹$w“¡ t]gBà-†‹ºIôéî¬8G †Û¤A¹n(æ -õDv*ÌYeëyŸqq$Ø$؇õY4µ?†S`ŸMè¸5€QŽv¼‚ðxì&›ó6UÌ`X·Ùâ»®ÈÝ£Mí‹34ÇbL˜c‹ª¦°2ÛF†££+ÉÀ´«q€¾} ÝofÄEÃ…'ÌQ“ǧƒysrãÍ.àå®Å ;Ýø¹ç¥·Þ‘à¤OÍcÂѼe3ª;íævO7Q·Z«c Õó`àõ—TWÊú_+;üìmh0>_|–ìg©gy%Ë!w“Á8ÜX}WQrò·ù(YôêÒ w”p=Æ•ò#çhTˆY×3"vj‰á0TŽB-ýÎü4o}O c[~Êõ1¤ÿ9Yq â–¸üH‘ó6…¸§`7߯ÅãûQz@}¯×#~QçË ªÈEѶä•ëñl¨{rPŸÇ`¦liÈ ã1—;xxª¼99òfwÛÐ~B…ÖÁ×K,~g1aýuû´1Þm~ú{üÌÂÑv�9ŠBq‘ù+z‡½vaÃÐÓvùë°f§.(vfð÷¥'èú˪+eý‚¯eÇ5õU<²‡ØÐ=ïDí.-Ììßv :UjtŽzߘT?+/ñŽɛϤãn‚ݘŸ8Å usf56äU ±5`GH,¿¨ö`SÕ?ÅpË7mDsH�Oì ¥7ê¬ÍŸÛÁp?†vïX’ºx*WÁ!Çÿü!Öqb½z ªËöáPÙqâÞÂÒX‚-ÍÿeS?†škqÚÄœ²|²_fŒí‘<ˆ´A…úËÙFô­¸¢Ú‹-Uçìì è;x8[œ¤Â›“#ovÁùºÊ­(,;†sÍ­h3öúŽÝúÑglGków¨+ÛŒ¼ígq?JV/üô‰°yLø½§?ÂáB@![BØ÷%&ôú‰Õ ý~2°k={á³b.4gÅÕï{0Îþí~…îú=‹;ÕRÖ%:â˜ñëe'û‡¨oÊÔ;ÛᶇË!w“Á8üø5œpüê~ޮӏë[9,0g>Ãm a•å"r'^Z0Rßè¸1j<‹ž] –ºè$jŒ£p÷r|˜‘aùj…iØ —âö~F»ðõ‰»Þ•)#jjŒ˜r¢‚/8å?{†¿C_fS¶GDú­L"¤oèîÂ2{¤N)î7°µ¨* g¡@vÁ>¨ô¦¸N;xéç1á-¦kh¬«@©R‰ÒНpN׃áB:Õó`¤ë'TWÊú±k‹£XøvcsªÒ¼S'.¾''1ô,V¥¨Á«¿‡<vš×Kæ)ß§à(Á¦`{Эš­/„8}H„wþ®ït¼¬ÀúÚûXhI¾àÜÃ/iÛŸØ®Šì²þ+tO­a²\ت»mÏ|G; eèê6®AÐ7²Özó~–ä#;gtOåÞáuÃ9ú ÏNÝ�¬ÏÇpŽà§O°¿¹Èh ÆCÆœØ6›AßOþëÏaôNL‡<›ù'0\2#ÚÛ eýصâuÌÑŒ« Oõ³Šˆ{ Ö.5¶¯ù•ͽ°y„ù$úê¿\ǯE1Åv#øû‚0‰Aí^äxV•{ñå[°±äSl/¿ˆAŽ3‚‰qo^O@Èm¾P GSz:ú^fáÚÃO ÛŸY¼ÐBÏñ¾¿Mô†[x`sÊ/Z¹&š}ŒØ·4ÉìâÄ–Læ‹Ù¢oÐ5<é»Î<\6Œœ_3½LÀ¬Óà;£-ì„!6üô‰ y,jðáè6›AßOþëǰ‹a·Éþ»T°kÅ/ꑲ.q#¸0ñraAÈbæMÃajAeÞ¾•/ê uõ¸dkÖUyT3Æ"¼Í²4P’6v(ÞC±úÆÝâ€ëñðµa֢šX®âiA›:6‰8úÐaz-ó½$�×ùj%²ýq §ãϳPž‰ìÚwh¼÷»?d+–¿0ÎÅîúR8“Ë|Ú7̯)+ÞÍ€ì%b»E„“>49ÚPW« މxE…òr Ql6S=ú¯/öÃIÔ^ \°3ûÒ ”« 0En)ëÇ®• ¢Np»£Ï£®at:Ñmz‚±¸Ý¢“ž»I€àìij᱗VÅÎøLýGÄ­Ýt5”x%²v/&!öŠºgpšÎ¢x9“”o`¹e;j;úìâ$ La¸§†„‘8pûêL…üzð1:oð¯6yÛoXŽž©af‰c‚1‡ñÞ^<¡¹‹×˜ªÌl!ñ>T=ô½'ìïüŒªâ\¬-oã`§n¹¢ŽŸ>ÁÚg‘·#þ;ôd–¦j¨£ŒŸAßOþëǰ/ýì\ZŽ‡ÙµøuLü6¦%…`:î&!‚°¿6µá¿v+þÓV‡Ùªˆ˜ž’˜·@]¸Ã›LÄmR!÷£«;$c Æê]¨ë|&þoñT·9ÙŨ8º¥ª¢ìއÄѹ€Û|µRØþ,ïØ„`°ºÊ£'ƒìLã5 ŽØXˆ7ŸËØS˜ùÂýƒ×Ï¡áL'†gç=¢îÈsKx—¦‹åŠ:~úû›‹8:Ѥ·Ìb±?B[maÔ{ ú~ ð__|f¿þýYýìÿ¹ŽÚö¥RÖ]+#D{·Ä¹³RcH©Ã]:î&!‚p41°QEð÷3v<Ù‹¿Õˆ+ç×p›ÕÈÍÝÚ«’Hå#쨥´Ãb=„7]¨^ÿ>JY@䄎Zì0TUãœ. „NƒŠ‚-¨jù#â1ºìH²C™*¤°ýaÂä*Î]¸Æeœ«(¯{)ê± Á`ô~¯ƒ@¨©/^#¢Ž+]ùBjf0f5cÀž¨?}"h‹fS§(†ªß¤#Œ ï§�ÿõ}b%°^¾¢(8Õœýw©`×ÊQwíG臞Ábd)?FqÕ¸5à<ËI:î&!‚0 $ØŒßíVLÝÐ;…¶‘W„éi i&,¸å™”ÀÎVùΧèiû·Ì¯ÄWAf˜Qô^Œý] ž ¥³ EOcÄgO˜Ä£&%ÞßÓ4“¤Ø¡Lsí8…MÁ¶?  pŒàuP£ÌÁùè¶¿ÿ9ôI¦ªYÙÌaüáC<á^ÍaÂÒ…V¿ôÙÅ¥€Ø¾Ã½h3ÜI2CBdsŠ ä:ÆgFÓÑöðÙoÿ€æ«KŒWüô‰ yÌqjí½€9P,½WpìX^DY`¦zô_Ÿ‰•&h LËÕ^ÝIk³E¿¤¬»ÖðƒÁ€ÍÄÂí¤úY-hSç6ŶÚF4UmCò8.­˜h³ =w“�Á8’Møp†›ñIÛt5¤LQ½ùktÚ¦!Ì>nw.²‹>ÇÑò}QWbé# |âc»ïÀŒí.γ㦖Q“ŽÖÜ„ºÿC‰ª–d‹§Iv(SEôÕq¢ÇDžØRí?AÍÚ³ñGüP÷¶W]æÀëšg¼b‰íä$KRÃbBÖasÝMØ\s˜}ªÃîœ÷QTQ…òRMñô¢ „YŽñ™³P 4æÀe—¯Ú¾BMœ¦,<ô öü‰hS7ƒáær”·D¼§ ï§�ÿõ£ØÔ±ÔfŸBÛ«È¥”õ ¾VÀ|g¸T?«HøÓºá´=@se>ÖäíJÿgÒ'Aé¿›%~À‘vê~Ç¿´û±~ƒæ}LŽJ–9ó÷(õx2Îáñ(Ö¯)óT vJåv”ð Àí|± DÈn¸\ñÖ, £ñó-’ìP¦ QÔIpL$8 -Ý ö™”ÆE(Q~Šr-§B›R%–¤†ÙÔñfr^ÁXýÖ”^…ÍývÝ‘$âéD%h=ª‚õ(ʤ±PnÉrŒ/¼jÇÁš�[ÝY ´{a~·ôKÍKŸšÇ"íÔõwA[¾Ôfqt 'Õó ÿú‘vêLèÿ×(_ÿ1Ôf¯x(RÖ/èZlÜN0ÜNªŸU$<¢N÷¶~4•Åž<ÞYYëQTùúâê™ôßÍ?à(+BE!\òz%†üýÌ`þé%ìm¸ƒ¿†n£¡ð=Ÿó�ËP‡ƒQVb²ã6át9› â¨×1ߢ!Õe*â˜èlº=P(J î¿…hæ“°45ˆ‹Šw¾ß#ÂI•X’ÏðŒV uDá‚ã•k†ƒÇ¢î¢,לbÞùúêÍPdao巸Ņ“c¦Óõп`3„€·¦ïqHo‹cå§OÍcQlêùGp}XžÝ'ÿõ£¬CþköäÇÿýä ºÖ2ÂíHY—èÌaü÷^XÞÍÁ5ö÷Ô¥Xë{VŠÜ8ÚÔ“mÊ'B“#w“ÁØŽk=xÕ8/CvŒ‚IOIÌbðaf\Ú€û£S°µP©¾E‹ì±Ýœ°^©ˆìiÉVª¯,íÉÃuÌ·XDÚ¡ä7F»5ØWï1&›‘µ]»§Q&°Qñÿ)MXlR%–¤Ç¿ó$öÕc÷0:óŒçψc‹ØoÇ—{œèÀ-ÕAìÍ_'ŽW_BÏ¢ó»íâÏŽ Bu£¾ß’³ÖŸ°Wó'Þ #h;x"Îc`~úDÐ<æ¸n `d…¬>ê}?ø¯Ïvê.@÷8ØûÕ1æŒ)P¤¬_ðµ·“êgå…‰ßJä}äÛ•[‹<fKwKlW‰c[¦ãn"øÏÃeïA‹ú,šÚÃ)0o.:bx ¦§R¸.‹ÝQeÁ#ÈòQÑx5øhå”›ª eÿ¾eÁDÌjóó-ó¦KÀ[³…›š<!8¼X1>Êßà;j^î„¿:HXJn'Æ–˜dƒ üC\Ðé½)ê|S½h8`XÌÃ-+1×€¿]ðŠ;ßcÃOŸšÇ„iØ{.C­º€vOz«8L·c:Ò¥z ¼¾à²¡'Á”…RÖ/ìZ †ÛIõ³òâÛÑÌÞ„rU+zŸŽK؃IÇÝ$DÐ^8ÏýÛò P®Œ!ýçÈÉzňÆ/= ´š®s8s×!&ˆbOs¸=þU9·1ß2©lºÄ¶í»„oU?‹B„ ïbä–ÃU §v޼!¹X’šy8?ÆóÐ×!é É¢¨«k5l:S[;u vìªÆ–‡|ǰñÂGŸœÇæŸ6c«‚ýoA~^%ôÏ,ÐïŠíhŒ¼{˜êyÐýå¥,”²~á×àž°â¾®I\di m{€§ÑßT?+/¢¨£àÃ"sÐø¡Òk»2kEóçßÁÄ"T»C»÷,ô@zhµ!v7‰/~È›.B^ØD’Š Éó˜q½K«ÈY³Ch¿ô{F¦Á œÇæ,øpK3†A¼¥Køü4;ZÇdvÄÜø‘FæTσþë//e¡”õ ¾;n Ï¢¢(8Ž.YwêæðêæMü±Ä4:÷ä!&¹ÓŸŽ»IˆàìÆ¨ñ,Nx\ÑÙîÄIÔGáïj‹•ž"V-nÚµ÷dÞÈ›.BNØ‘O&I–ŠÀš3hléLiäþT4 ¿þÖwü;cÍI§f0Þw:jÉTσ×_NÊB)ëü¬FÐV^¥úÌvŸãàÂØ dõ~e ¬¯QõÃÏÁfLAågüPõ5 +:¡ÿü3\ßÿ!âÏØÏýEõµ÷)ë]zHjØ–ÿ•„l&ˆtÂbì àÖÅãP² R/»ÝPFÙt2‘)A’¥A½‡cëÄ>‘ƒü’]Pî*BîšQ×õ<ãÆÑÀylÞv û#æïýµÝ¯}¿Là÷SÿúËKYèÿ~ò]‹Ùkï`»š¾Ï ÈîýÊXQb‹•2èW´¨lÐïÞæËQèW´†Î‡°E±Å ú~†°›‰´âž‚Ý|×›½Ç7j-®vþK†®‚ãÆ=ާ½z!–·O}§T|ƒ{lºì0é4øÎh¥'‘>2aWHu=?BcdYQ|?œ°°XbO0¶l§¬bÂ(ˆË÷1½¸`Õ–@Q|Ý‹íÀÚh�Íûj3n÷:p^è±»Ðç”¶X®¡óÁ_Qcç¥zô_y) ¥¬_еXø¬ÏO£ûM€ û ¬×¡p§.bø¬T?+/¢¨‹ä%TFðXw×V´¨cÒчŽÂz¤§¤e96éí þ„ª¢õžçV TÕäo;&âÅ,;óCÐí|_¼OQl—|)ÖûŸëù¦'¤‰'$ ÞXމ'/aÎ+ z­^2cWhawàØ®º‡§¯±öÝÐlËž<ì0Ôkp£/8à¬éA3*>Q¡Ód=ía€˜m×öðød¢èðÛ™ÆÑw9él|]Ä9ˆ›?^¹/¼´` hmÐ÷S€ÿúópþ¯›øñúŸ1lgñràqPþa)ë|-fSׂÒõy(ÚÅÌ ¶!?›ÅÝU„…ˆHªŸ•7lMM¸½D·pßnB“-¹¾“Ž»IˆàœxŽÁô4Ä,Ãf"õ°øt±e÷7¸Òe‚Õþ7&ãéÌÃ5ñ7ìÖ~t^<ŽÒ'¢¡zX†³üˆÂÓi‡ùÖE/û 4zôZGáVЍ[ž×ÁÈ”]!&ê£ìT=”9k£ü½ž~ºm¹õŒ>°doCƒ1wNó÷غC;ý B³}]â¢tSÿõPüÜ ý±1Ú‡Ÿ>Ážá"Žk¨TÖàT ³KH9Uµ[BF‰}?ø¯/¾c‘œq‚Ê T•ìF£ÅŸ]BÊú…_‹…BëÃUu Ê”{PQׄ¶Á×QßÅT?+/¬/BIÕ‰Ïg¡°çth…¿Æ3x°Cˆ}Î4–c3‘Zæ0ÕÿOÔüOjq27A{Ò€§Q¢‡/Ç‹™/f1ñTœ4â QV²Ú6>Ž_=,WÔ-Ïk`H´+”rØDRë©ÛÑr²rvCÓûô&)ꮩ¯â‘=äøèy'jwiafÿ¶[ЩR£3É”GñÃŽ÷aMØZÞÃÖæ'QLøé¬®‹8ô(Í-®0g—rPaß}?ø¯ÏÞ±hÎ8e7ꇟ»”õ ¾–w &L‡LEóO:pÉÉ ?õÏÊ {NdS'’xŽÁàïgQm&zþ“„ÝK2¸ðÜò,\‡3xÙÿÁ2M%îÅÌ+SÙ½_™Á˜ÕŒ{tû•h,Çk`H±+”ü¢Îûñz5»‘“µÙÙû’˜<&ñØâFsV\ý¾ãìßîWè®ß“Þ÷hªg4÷1(4ÃJìŒD¼ô‰ yl|�}O;ÏHõ<è¿þòœq¤¬_ðµ¢m)¢ºþ~ª`}ñKÔ÷±EB4æ0i¼Œ_W¶¨K<Ç`zHjfàè¹f3á6iP®_9Ãþañu‹Áì#4¹}÷j^Ìò“v€ïÌh:ÚGhuÞþÍW7"ºïûYž×ÁbW(°‰¤ÛÕFXÇ\>Ñ/Ž5÷Ïb{Ny’;ì¸9Z€Wß1fNUwêX åÿÏÞ…ŒT Zæ§O°¿¹ˆs–ç±múdµ©‹à:ˆtÚÔ1{O.m´@UºU-`,‹êgå%daz“IÎ/鸛„~À‰çLOIŒë1®”G=bQlFµ®_òüpñ#v’êZüÀvKƒ:ÊBiÅU)rb…ùX†³ìd„ ;ªÆ8P¸ñªí+ÔxvEc±<¯5‡»B©G^cO`ºÿ N×ý¼6Y—Ði²cüå ¼^öä±T€W¶�2£Çž)]ˆ“f$Û®„-óÓ'Øó\„lêb|-'ž …´•€YËØ£z þ×pRý¬¼Ä'ê¤ w“Á˜m¥&–c0= $-sf56äU 1D8ý¢ÚƒMžÆ€[–Èž;©'º¨ký¡ lU«øåWÇ:Þ]¯D¼˜e'Cì�…Wí8Xp¬0kë×ó»8ž´{=±¼ÖˆÈH±+”üñ sPPv_ Dù)ʵñØËFa^S›4%´ÌIŸšÇȦ.&Áײãצ6ü7hqeƒµ³Ù*™ãÔíGa€ðN鸛„m Ds ¦§$Æý]§q7ä¨bÎ|‡Û^ø>ÉE¤ã×y¸l7QÇB:x ¯_xö¨$n¼*?™b8 Óéz_~K–ïò{ÒÛâs½ÓÓ!;À!ÞäD$Ä:é]¡tð6Ý(%P÷‰µ^ðz„¥©:[|iîÃXF€×Ô#E e~úDÐ<F6u1 ¾V4›ºõØÒøgÄ6 þ~ª‚æŸPQ¼;ꯢ?V´ˆ$IÇÝ$Dðf9]øßŽ?ЮՈçÒA>ÓÓ@)@˜ƒ{.ä®Ü3pñb¿µÈ Fûÿ‰Rææ_p mO§â˜´7^•Œ±0ËâjþÄ;¶ƒrðÄ¢'xlØÊ1Š7V€79 ‰v…R˼YÛu°{*± êFÅÿOÂð^S‚ŒŸ>Áþf0³˜°Þ‡®ñ TêŸÐÖ7„‰sCø÷¥%ìú¬ýïÿŒFqq£Ö¶¡ï鏸4£#eý‚¯eÇ5•÷˜¼Åü„…£òýJ©~VÁÌÃ5þö׫VÔÍÁ9ø“G@deoBÙ—ûQ´ñ(·WB;Ù^#½ ”Zøp”@˜„Uÿ% ë_©ƒ%n{¸ÄWe'“ì�=b®7~»àw¾dží6©P¹5àþ˜}ä^l©º´èMNDBŠ]¡t à­YƒÂMMžÝC¯¨+ÆGù HJ¤$à5õH!Èøé¬Þ~XÌЊŽu(¨»í (Nð÷¥'èú‘l±qKY¿àk½ÃäDb™]¤¬ pw7A˜­wdCQ¬Aÿ¸¸*dÛþez8f¡éÐ/2¦ü®%|¸ŸÃذ ÙY Ôô„ &n¼¶¿ŒaS—¸ñªü¼@G}.†ØòydÌŽ]ÕØ²ñï6Äï<{†¿Cûë[{ÔèwÊü¾qM&]³¬0—ð­êg˜Æ§`V#·ä®Z’ubH,Àkêa‚ì$j/.˜ «@¹Ê§ ã§OÎc«6”¿¿êNób¦Áõ ƒº£8Ø6±¿Ÿ ü×gŽY•x_©F§Ù§g^ß±è‹ÒGÊúÅu-· íQBQ¥úY¥îî&èÏ™¡Þíò¹ ꜿGµkÊÄâÛQB€{üŸ±õ”6õài*+bÖ܈îýŠÄWå'ÃŽŒg‡Ð~é÷ ¼ÅIðן ÿop.B»õê 6¥7¾XÆ!>;n®™àì„i&Æ‹´øŒœéGÞO AöÙ9˜™“Ó’ðÓ'Ø»´€Ût;<‘ƒì:”F :øýTà¿>Ûý=äu( "0w8RÖ/úµDq)ÎM·.‡’yjG‰Ðêg•n¸»›àÌV–%Ø´à1ÂD]îÈÏ]'s A‰áÙQBxŽÎc{Cì†B Ë{Y#¤ITÝxU~ì0TUãœ.à(F§AEÁ~Œ1ƒí—q{4Σ¦ˆÂDì-MqN‚«)v…RE ÁX’Ÿ<.x¢²ÿ\GíÆÂ8?}‚ýÝÛÏø¼á>Þ,žŽ°q½vvê†#.ö¿Ÿ ü×gÎ8µhè~%>½˜ý߯¨-,êŒ#eý®åÇÓ^=4•ÅÈÿ[Vv1*ÕçqJÕA¢NÂèú~TC¥ûãn3Ô¹QRûKT{®Œl Ñû¸Úýwˆ£„ O â‘“ë$útwbŠºÈÆ«¯0íž‹8(É7ðuPÝ„I<jRâý=­°qt:)¸`9j•@wšq»öïýÔ&&óƦß!† 6!¾Éï ¥ &8ìÂZq¹~ÞWžÂ•Eñù3~¨Ú‚¤lÄx\ðD³Š‚3qòÓ'X½ý8am.Ãú…°&%ù±¢(<‹þ)yæÁ ë»,h.ÝèsÚ…’üñ¿¯C¡*zÞv)ët­ù!èv¾/þl-rK¾DSû>Ó¥èiûRý¬Ò wwÃ0‹­Ôrä4÷G0ë|ŽÇžHluò fÓ�†#—‡“‘ äÐC)Ö›Õ=¸|€ê%ƒÈ¦ öü­èÖk¡fáÔZèïø:Œ€¹0q6‡ñ[ì«þV×LãUv¬kBcC{ 1ÈÂKtŸ>ˆê–$b|IÆB>Ú(bFêYëQTy?RãZTQ'>s‡ª}uÐYpON"4Ì Ü¯ñgã·0$™ªfe#NþIï ¥ ®‘¼ö´+ó~=~46ÝÚÜdvêx\ð0AÖíoý‚¬½º“8Öf‹8™{á³O„ÍcÂ4ì}¿@]]eiê;0ÈìÌ£ö}‰ ½¾à²¡ïªÕe¥(­ø m0CKY¿àk‰íé´Ã̹eŸá€F^+ó|%Q'ì³3kKŽãbÓITlû˜WÕ7—¿Ãnæ+þ÷¬œ½+ËûÕñ+ª*4Ð-®¦[¡;W‰‚Âj´˜G#ÞgzYH-ä{þe1Ó‡ï7ýüÎ ±íÖBgÐäá‡FmµWŒÄÊD!+‘ó[†¦ã‘‡ ëözWë¹;p´©}1ÌOì43sxÓyk²þŠÎ¿}?óÁBµ¨*Z/¶kòI¥W6Rì ¥¬Úƒhè `sp>º€íkò¥Ÿ²/x¢ìž ÿEó'‡bäàå³O°w)á-¦hÕ,&btFK̼àaß—˜Ðë ®˜Úò.ø¯Âh!¤¥­_ôk-,|kPVV²Ú6:~•ö€ÛÊò½ŒuÈ-ÿ€²õ7´íß ÕÍ?1ÌVÄÖÛPÕˆ+ÂïtF6ë%쯃»€à4£i{>ö蟅 ‹ô"®üÏ£X±yʯñƒ¾ }žUp/Œú Þ#¿õÕè 4}aÞÿ ÚGoÄ"æ²· ªQ+P‘íäÇCeŽžò–õ:žY8nÁÆGpӯǩ„¸§`7߯ÅãûQz@}¯c®ù¥szŽJ  Ôš½q®‚&®õ(ªú—T±vû¨[Ö®PúÆ{ÐPøJßß“¨ýb+r ä”¶À-pWF©MLèÿ×(_ÿ1ÔfŠª08ìAó˜0‰Aí^äˆ?ËRä¢h;â\œÝ:<õ„ª 'Õó`àõýYKØ"“³7¹Ø­{"Ž’‘‘²~ìZcÏ^Ä\L®!ÈûUØÖ+‹¼«Hæ‘ ¥¾ú½/€&ã ºëϯï×H ›…Ñ;Ø“õÿ@ý£tæOŒÄŒU‘WÛ9‘½0 ›¡ ›U#8<ˆBnÔŒö¦:”—íÂÇ bNk„Õs„騖ìЗæûâp…O:™EÝ"L,¡W¯AuÙ>*;¾ô1‘ûÌíçQ[¾Ê&.-ŒV&¾EæÜdS“åî Ƀ Ž/w›U¨*+…²´õïÁ:ö–+ñ™<ÑvO×!ÿÀ5 G?‹pÖ'ç±ù§ÍتxE ·1¼KØ3îÖqÒdÆs²¦PlEC×/¤‰X=&¢¦/¤‰¾L½ì( ©~V醻»aØÒøj»ßøD݇¨ïsÀª=„}ß^D«þ ~8¾›ê"GõÏÈŠ˜°9 ²ð7bã8Ò8°x`aer?‹RèÝŸPo?3ªw{ž š‡ ºr?D]¤ôhœãè/Åéý*â9ÒiGSí¨T]Á}uq’Ä®8a:]+öéÄROñ k“ Ð=¶stŒ9½ït¼pÒ'ç1OÈ«¬ÝÐÙƒ|„4 ÍZ²@zCš¨óÃÝݰì¶p¤ÁˆÑ7]¨Z»E6oÅÕæcê?E®"å„R½Ý÷`2²¢&lö%A–SÔyÂÈ,KΧbƒæÀ-hÅA³¢^zn_¸}hQŸESûc8öÙ„Ž[‘w,Ó ó oÑ@ÕtVæ îvÀÔÑóèrÒÏøâ9i¡¼¢çë¿¥ãט$¹+”6˜ Ä”³]aueö5ЙF¢¦OŠM@Ú*U#Z:ÿ-s€ô9Œ›oâª^CŸ]¬ÝœÃ½h3ÜÉÈ>ÁÚg‘Y+šwlÒ¤ïNXu5(ÎÍE¹ì;uf‡Z°ãÃÓ0-x}»CWõ r×VÐN pw7Þ,vH‹ _ î꣰³ò9«ßwG:ÏÐZFÂæôñ7:6À8cÀ~Û‹ú]-á ¾cÂÍhâUÔÍ?AóÖ÷ ÈýÛò P®Œ!ýçÈÉzÅ1²g¤ƒ…#\m+@^¹φZ±‡åã->Á$l¥× ô7iÈû5&í ¥¶‹R„¼ŠïѺè„ÅÊ%¨”%¾x]°L$ºíÆèý°´UÙù( »Šr±¦à8ºR˜¨<6ó˜2ÖasÝMØ\s˜}ªÃîœ÷QTQ…òRMRÎ+rô‰àyL\PŽ?ÂuÍ78ÓùT¬LÔ}…šñ‘&L¬Ñø`4 ߣsø­WÔù¢WD{bRÖ]‹Dîî&ø'¹|¥5ÐòEkðÖ|5W#ç \ÁØP‚ÍÚÇËpèàøøuî?TzÃA°•òçßyW¢îÇÐî½ó¨9õ¼…¥±[<Qæßb¨¹§=«ø·°j¿ôìl'¿.‰àŸQÇß%t.{×+U°Ýå.œ>s£AõÅžæ$Úâ=¦e^ì›Ö£X%ŠŠÅݹYL ¶`ßv¼’å„o^ÁXýÖ”^…Íý.æ1`ÜÈxüºR=òT?v-u~¸»›àœxäòàïg¾A(ü>‹œÑÚgà¸û#¾ëúKº0k»ƒÓ•e¨¨= U‹)U™€£Æ³8á‰ÈvN¢Æ8*®˜{£¦¨K'Âh¾>q×û>LQScÄ”{}ªriCUñ{üå  ì0¾(*@‰òS”kyˆa¸ÀFo_C÷›™`ÛÐdÓ„y<Ÿ…ÙxAx]é·Þ¾!¼ÅÄd ;\Éa»×GÐ`´b¨ë$ ¾ŸKìó ó“!Ùï/Oõc×"Q燻» ~À‰G.ÏÄl:ì,¬Â¹_¯œBé–êàŸu˜eLO%®úݲnO¥—ùg¸¾ÿC(Ä÷‰½Sþ"ŠëÚÈN:éc¶ë‡ÇŽ¿Bë·þ+tÇ:*'$€¥FÚ…¢êþ1Qþ³ü—µÐ;&aijˆíT”V¢Ùþ±÷$‰àÃÂÌšRìPßDÿ¢£H/º.VcSi#þÅ>?lűšŽ´îÚù…ö:»‡Ñ™¿`<Ïlþ®À4žYck£dHöûKÁSýصHÔùáîn‚pâ‘Ë3±"'l~ƒîÚ­¨ìt„üœÜoádG/‚ ““®%ê¡Â(<“Ù>- ‚ úÝÛ|vG~amè|[”uéc/ô_ °êŸAuÓnáe_I†DòÇ®VB=þDݨøÿ<픊¢Îp ç.¼'—q®¢(¹4až¾ÁÂ~D‹E± ÍOÓlcçvb,)ÛFqñ:aÅ}]“(Ï ±¥s1°w:aÏ/’ýþRðT?v­áƒÞ á ,· â{ÞŽ>»8³Sîé€!†ƒ[ªŸUºáîn–|ÀKD.ÏÄ^µãàÁ6¼xé§ šâllP›ƒN¸€u(±~_+þ¼Q…œ—°1³ÃP¯Á¾à¦ͨøD…N“ö…øKÜÀì‘úÐaz}@OökÙÌÃù¿nâÇëÆ8òžÅËÇ!¶TÑY^þØÕ ³3Õ pS,OW&êŠñQþ(’J”/5)Ãðe”xÿsèmË\ó˜ê>M÷³`G‘°òz1nYz™€Y§ÁwF[Âv¾Âè=+X'Î#9È/Ùå®"ä®ùu]Ï“Љ“ì<–êy§ú_k Æê]¨ë|—ðOuû“]ŒŠ£ûQªz öÔpRý¬Ò wwþ€WNhÛàéJËý lúJäìE-Ë`P%¹k‘•S†f+oöQópMü ûàuÔ"zŸî@íõØc®Ž£ÙF”ìmh0¦wàŒÍÞb}¤ºY&q¶SåÑ“bŸŒmXâFe9ùc /3pô]·ªŸaŸ‚Y]ŒÜ’c¸j‘;XøR¸1Ú­Á¾êËLfÇY˜ƒ{Ž×;õŽ7ÙQb¸E‡¥U+¢ø ºwçØü3€æ}µiµËccK2$ûý¥à©~A×bqUK½‘„7]¨^ÿ>JuCpÚ{†êg•n¸»›à9Î’"†ë|æ6Ð FÍ× a ›•{PQ¯Å­ˆ9UeÆãùÆÚcrs×#ë¹âJVl—˜G-v\S_Å#{ÈJþy'jwiafÿ¶[ЩR£Sö¼ª>„aèv~‚ª~8ºjªtgÈÏn-ÿkÙ0[©ýÈ-Ú×0´øâú¾ÌróÇD4¦`j뉘Š)½,WÔ1¯òíØ®{2îÒž^J’ÇR=òT¿ k±PT{U0þõt5ûvÎgá²pð`dÏìT?«p–¿“é¾›% zÀÂÚÊ ¡T߀ÙîëH‚ cƒ:à¦RÈÌ�ÚîðÅ-t§n;ª[ÿ€íåDŒp‘“ãcΊ«ß÷`œýÛý Ýõ{ø±GbA—w4‡ÄÞ0Ýý6TÞŒûX35ÌaüáC<Ivƒp¹ùcW=s½ÓÓ!o´lÇñ鯱~-* r<ãmPQê9ˆ;¹\Q7§ù{lÝ¡Æþ3‘~ôuý„ªMehü×Cñs/ôÇN¤|×.Ùy,Ùï/Oõ ¾–؆ƒ?¡4G,ÅÇ8vßÛ]œg§Q"4¤úY…³Ü÷3>Ò}7Kô€#N¬"+m+Ux…þó•(ð’,ïmäÌòÂV´[‘·M]dQ'¼´`À³3ç ¦›SÅÑN¸ `¡^ì>z¼þJ Ø †™³© ̘:q'a'vÄ”`þØU Û)MWi¦à i²ŵڠÆzº‡åu|zgFÓÑ_`þö�§¡·@óÕ%¼q™Ò>¬‰Ô®Aå=lm~’’]–ØßI†d¿¿<Õ/üZ¢°³Þ@“Ç å uwa‹n?šêgÎjuììóÓè~`Cç~ëõc(Ü©ƒ Õ<s–F|¸f+j/{Zêõ×Ñ=ÌgIÁ5…ɸ½_í0T–á(³ °û:Uµ[‰Cé;ؾgƒå§¸!krü@D¡cÓ£<o3ÊX>Õq.Ƀ"kJ›-²{ì cp¾b³çø”½óþ’¤“C¢ùcW%̦Q…úË¡–ô­¸¢Ú‹-Éx•f l\Þ±/<NØgä&Îp×@cÜñwãUÛW¨ñÄœ\‚©œÑÜÇH ™HXy‰±;v%;¥zä©~Á× Ø©ËZë5Q)ÉGvŽø¾>¼‡žêgÎjubtY[Pº>E»˜Ð6ä³Ý,Ũú#„ÈI%‹S·cGhBdÆܲƒMÃÒ~ Ö¸Ãã³àÄ×Ñu—M|‰Kó}mRê1<? ÇÍ#ظñnr#ꢰýM Êĺ–V4@{ËÊApY¶SºkŠkq10Ž!+† ÇÛn’æ]Mxûìþ}̳дGTJ*ÉIIÏâM¯û5=°‰ ô7e?~õD¨ Ô>kvo#Ìï–êóp>þ¿ñì]È‚FøqB IvKõ<ÈSý‚®µÞ±èt OúDÓ<g6u3³†ì$KHºïfI塯 ö>\U³‰u*êšÐ6ø:ªÂMI€ûzUG é Å2Ô†Ækr¿ŠbæÅ œøªƒãKˆ,ÏÎiö5Åʇ:†‡}âDÍ$¢Ø"Ã`݇aÝ"q§3J]þØ•Ž_‚þ¿Á¹_íÖ¨/ØÄQœºµ±oâdcmXá¦n¦Óõп`c—(ÀMßãÞG?e;°¼ÊOFÉÖóžð5‚£6âÀÍç)í÷ìY&C²ß_ žêt-æýº!;ÜÙ…¼_å#¾ÝË*hþi3¶FÊ «MÝœ*‹ŠQV÷š[Ûa\Œ3× c[+šÏCYÁGØ®º5±´žR4"•€Á>½ˆ¢ûÍoPí?‡^[À"ÀñCúã G’âü±+šh6u doi‚™åæ‚Tµ1;Î<cú^ßxP¬,ÆÜ˜µþ„½š?ñÎc{"N;G֮ѼÊB?<C¢ÎOõ ¾{Ï?Ǫ‡â¿ì´ïgTçbmyÛÊw®áîn‚pâ^VÁßÏØÀSsú‡!¤éOXcx¦f@o…Q[í‹cØ9((? }\IÌyHшqdT¼ƒ}zñíÀµÇB‰ß¦ŽòÇ.qò¿öïýÜ_ÍCïaž®¸Ó6 ¾y>ÜS˜˜JóO:pÉ,o½E<b®7~»àw¾ÇF"¯r `}9’ýþRðT¿°k¹_cðú94œéÄðì¼GÔ9p÷W\´Èpw7Ax^V™Ù@¢xšœÄt¨žqÏÀÅKh ·£f-þŸŠQ¥À󉥜#áY Eƒï#cáUj޵âa ¨ð”'‹ë¡ü±ËÇÑž«Ð¶ŠãPŸ³lW{¸m†;œÙ#JÙÆ^ãî°ëÖWØ²É ;vUcËÆC¾cØxà'TMäç›XI%‘þ^¢E*’½–”uI˜8¦q§€‚ð2¼¬dm ‰q›4(gѰ}ŸeÇ¡‡2+»8™hSÇWyŽ?ЮÕ@Î<‘y‡ ‡¦öŸ f;—Ð×®é©Ì»Ò™Ç”±›ënÂæšÃìSvç¼¢Š*”—j8r”²Yª?.{®qõ%ùPªZü×l=ªÂ-¨jùÛƒ“f‡Ð~é÷©ôB‰v¬.ŽBÕX­V>|Ø÷‰?ØóJ'ÁOð¤wlQŸESûc8öÙ„®r¿ŠurÚıû<Žz"*H›–‘;ü€÷²JI€ë1®”ù8M±Õº~8x8ÖY¶¨cð,"àŸ½ e_îGÑÆO Ü^ í ü™>ç�´¥Äw$e‡ñEQJ”Ÿ¢\9'rDÜ#è鈕?–ˆ KèÍlWYxcõXSz6÷»€Ì<0‡Ñ޳8rÙÜÆËÚyšÆˆÝq “o`î\nvê˜Á‹öËq¢Îp2$´ USr•›P5$ê‚ ú{ Þ¯¹c[~Êõ1¤ÿ9Y1²3_ÚêË'Xþ%¾Oû¼1i@yüŸ¸¬ùaíÔ-ÃËŠý·LcάƆ¼ 4†„§øEµ›<«lnY"‡pI+Ëu| ¤ˆxv‰³¡(Ö Ÿy�³@Øeâ;ÇÂVú%bŒÄôÁ¼_÷@¡(ºŸ¦³„òµâjo–¦èlñX‰þíkè™ Ld8jÊ<˜Mã4­ê:‰Bqp®f1Ð\C0°€ÕiÌ›í<±T»Tè |w„I<jÚ…5Ùªˆ†éFp90pë"Ž+?H`'$F¨šÏÎqã�C¢.˜ ¿ç1ÙRz\³V4þL¬ÝÜâ;»÷BÄ ùé©ïÞÜ?ŽÌ"wTú^û¸#Äw (ø'îe•îJÜÏÑuºwCâ¼Í™ÏãpÛ ß'pÁjz{¢‰À¹HQu_¨³ów¨ŠÏÈ<q±¢ÍÈÚ¾ÛpAÔŠÿ¯|f5ñЧt ŽÝÃèÌ_0ž?•ê Lã¼<;¶ó”Š Ésï=…¼í8\ ªSµø¢8—ƒÀܳ˜xÚ ½æ€Ï±k=Š*Ïâ§Sê8=ÂÅç)TÍ®£vc!7;°$ê‚ þ{nŒÏâ„'Ð43“8‰ã(Üã½QÇíôÕWð9~…ŠZ-n 8àrObHw!Î÷3>¸S@ì'ãe•îJ2„)Ø´C«fÞ héü7G®¼3kq´Íî8‹ˆ+[óøª}$äç!p-¢1% §lòd¼auÎý�ù¹ë80gÏ]ƒÂMM>oa&êŠñQþ_ëxD›ð¡âÜå€ ÿ2ÎU¡p5dEH ¤ö1ž¿sblÌ)>I܅剱ó”tdærͪj_`î¸xwHÆÀÜ3ÖíõdXQäîÀѦöEóŽøsG_è( Îpc+I¢.˜ ¿7ÿ ×÷G2eR`}í}qT'ÝõõôË%”‹sIvö:ñﯛºd¼¬ØÏ8„I j÷"‡Å¹*Ø‹/¿Ø‚%Ÿb{ùE &º+–*"Ee;Ï),ÿj¨t`Ü- ÓÜ(©ý.Úd޾KøVõ3Lãìù#·ä®Zâ=ÎàÁë _›G°ýýÏ¡·ñäÅÉLó¤66Qvž’’ÌiÜI÷ìæÛ¸x|?Jh ïµzBÌ$$ê®5AûÛB<NVúÑ«;‰cm6¿x—uÁý=Áýîm¨Ò§Ü4t>„-ʸ®ú ®W°Ü¿ ue±wñ‘WŠão¢·ýH¸»Ï¥¨KÆË*E'M˜â=«ˆâA5ez›¨£´8¤–qR$4b@€OÏç%àZ ­F|»MA3³£÷÷‹}èQ»Ä€íèð¤66Ñvž’ ’Ì{ÜIvÌ5„^½Õeûp¨ì8 ÉØÔ ÿEó'‡¸±•$QLðß›Àÿºy×M¯£÷»Gzê; ‡ñJr×"KQˆÊ+fÏ\Ÿ ¸uÉxY¥û…’£DÖîÅÐ-^Q÷ NÓY§(éï²xû§ðÂóÜSñée–.ï tÙqÒÄ ?#v›xdŽ› µ±a;O©’œAq'ŠÆžWèN ýÿúåë?†Ú<íû=y!QLðßK|Á‘Öú.ì&×Wb73Y¸õ'†úþ…ßWúNÝ"Ëð²ÊDQ‡·@]¸ï á6©ûÑGÈ]ðªóü”Xz¡hÌÎð¤ÙD‘"NÛÅÉ„Ý&ŽayïÿŒFq¢PkÛÐ÷tœŸ˜îÉ LŽ[q_×$NhR…â4î$; hÑ@ÕtV¶ÓìvÀÔÑ•ØB'âÎæ:丆aYvÃ!QLðßK|Á‘îú.à=޽Œúí‡VSœºÄ½¬äj ä_G/~üVé5Üf5rsw öê# #ãsüöƒWÜr Eœ´LÙmâ”H±%£®ë9WÂN½‡cÌ;ù%» ÜU„Ü5ÉÖ3²MðÒ‚þôáK§ÈEѶä•ëñl¨{rPŸÇ`\Q¹ÙNÝèÛ :a8€D]0Á/ñGzê=„ÔÿüÆ�küQã—„;þ€ó²J÷ µú`Ç®;°±bá6˜hM,Ê70Ûœ…] ´mü±…dE¢8iIïl¬V˜}i%ÞWªÑi¶Ãéy‡çá€î�Oqê\°jKDQsÝ‹»sì@ó¾Ú$êùˆëTÕNlõ8CÍÂqó6n<‚›Žtõ—·°4–`KóÅ;dIÝkqÚ4éù¹Uû%-ñE^Ün¸]#IdjI=$ê‚ ÿ{‰ºOO}£í‹EâRÜ) v“Éì÷‰¥0ûô.=‹ÚIÂXF”oùà²^AyÞÚ ¨(8Ž®(‰¡ÓIòqÒ¤ØÙX­°2‡¼;¥AÌr–Q‚ íþPB‹ÖsÓS îDÅ8â:¨Çð¼¢Nì£]øúÄ]¯IÈ”55FL¹GÑwìÆÀ~•D¦–C¢.˜à¿7—p ûôÔWui !ÅJö§û…ZùH°Ë¶Œ(߲õ”B©¾³Ý7é±4/ƒ:8ØŽW< ðî8i !ÍÎÆê„eô¨EC÷«€g?‹ 믨-,3£G:'8ó÷غC;ý †ÿýèëú U›ÊÐø¯‡âç^èHp׎G›ºØ®B‹Ø/ÎAeýW螊ÇÎTŠL-©‡D]0AoîÓSßô…âN%û€ÓýBI›îC×x*õOhëÂG“’ì²%å[vØ`°£9ÄóZDx]é·œLN )v6V-. šK7úMv¡$?G{Ö¡Põ�St[/,¡ÿ>¬ÇD6.F/ïakó“0¹Ø„qéîÂ2&ç6»×/PèI«¸°"Ã-<°9#îЄ#E¦–ÔC¢.˜ ¿·Œ@÷é©oúBHq§€’}Àé~¡¤Á 땊Uæ:Ô݆Cna'Å.Û2¢|Ë[ñ}~ÝoŽ˜·ãõc(Ü©ã3µYBH±³±º\6ô]U£º¬¥_¡±íQÊbO-›©œÑÜÇH áXy‰1g"«”€#®¬µ^a[’ìœ}Ð=•q‡×=‚žŽ?1¾ì&"SKê!QLðßK<Ð}zêËŽ_ÓBŠ;”ìN÷ %«6”¿¿êN3ì¾Á•¹;êŽâ`Û)¸RŽ»lˈò-?̦®¥ëó|¶CÛÏòI*¶@Õï‹£˜ÑH±³±Z™Ãè<˜¾óO`¸d_×Ün‰ûØÂî}Ñ7èžGÏá²pP6Ó„H;!¡ÌâåÀcŒÆ¬_²™ZR‰º`Âþ^‚îÓ&êÒBŠ;´EÛt;<¶MÁvJå>,É.›×.¯#,Ê·.—¬w·âDeïÃUu Ê”{PQׄ¶Á×ò¶‡”$½³±ZIŸ'—„q- «iB” rU%»ãf*$ê‚ ú{ÂXnÄj;úì.ñó†{:`ˆažžúF !%ήIçîP²8Ý/”¶ŸñyÃ}¼Y|éĆžxŒëµÛ°Sî4aQwÙzaMÖ†ÆmÂér_-“TÅLm=õ}ZÙ¸ðÄ`H"ÔJ… ê/·ô‰V\Qíʼn=Ùø„9Ö|†U}»’lWûgTçbmy›L;u±vBËnԉ˵HdÆ,‰º`‚ÿތջP×ù .á-žêö!'»G÷£Tõ�‘¬"åÕ N˜N×Bg“.w h5Š:M]sÖçax˜}ŠxŠÂ³è Vøÿoïÿ¢ºöøÔ?`~ñ—Oâ&M‰?˜œÂ6M?`Ú€iCŒÖÌM½`ZƒÚÚˆ4GÐÇëéÌi<ur ul™÷hE=`/P™žWæC±Ç:È·;ء̰Ÿw¯a€½‡d˜aöÚãëq²Ndëf}y­çZëµ^¯”c—-.AÍgp¾lDnù•$D¹O6Œt›QšËà#ÞYk…'üSjFmAù&æñûÉ oYMx FŽPvÃn¯a…=”$ »—èýá<ªÏ5cpf6$êŽ:6ÅÂýÄÞ ™¶7ãîJÓ„©`–DÙ¿'I-:gß6Cg@`™]äÔ¼oôYóE“{ –$ÅCäN±_0}^1„)¸;¿‡¡¼Z])N˜šÐË®d+NYè¸&¥¦«’ ±|¯‡v[ÌìëÛNŒó¤BD6¡ ÂŒé;‹ÅÖ>Èil½x`áJWvAòûÍï6I¿gC“û|û¾qˆ“ÿõoaýMžyÀÝU¹ÛTps8Ñݹ…oÁÄ…‘.\(}/´ –Û©â¦aRÇ,‰:9²ù{îÓ£õ÷_ÑR]¾à2³¬¿gjޗݬÎGvé×óÉ%èµEá“°8Ç_8p§€­àTw¨5eºwÞJŠ ›†§å<ÎÝóÈÅA°ÕÿOŸG™¡xGûaqG kÁ@0 D»Ù%€îT;*¶”¡Y±tOj ÖŽŽ…5W¯Ñî@RÂ%w±ë *PÛ ±S¬Ø`pE¿¤:v`IÔÉ‘ÿ{’›Ùš÷QÙæÁ´ë.0ŸÊz{TÿáÔ¼/[ø´àì¹ûuD±g<Æí$¯ îP¢œê•„è¾p¹ìv¥øþ‹%Z«;üCJ‘,A&vêÈ[x\ûÔÍ`´ÃˆOŒà’ìÆx<NXM·Òàø•¥ºªÄáF—øÕ<sÁj 4ïÁàP·3ùÚ"Šºk_Átÿ§p@ßpq `ÄÏÓÑëípLœí<ïÇÎ%Ù3D‚¬ÌĨc–Dœ¥ÿž8×ø^®8LO*ßWðýŽ®5NAÇJ´‚SÝ¡’AÐiÂ;ë·£¢V~Ájýíƒ<L®‰ 2úÔ…w#–¾¯XÒħAXKr‘[|gôgPud²4dêꓚ`:ýÇÃĦ¸¯¢µÚà1˜¸ø»Žþý'çÑá’.žaÀú\[éñ« v`IÔÉIôßKÕû¦*w hq ­¾¨ ÁeÁÎóQÌ¥E1¥´!yC}êDÿ¢ñ*­òÝ{'8ž‹š&^Àa3†èjuQe¾3—ÜŸH‚ðÞ¹†öÑiñ«X¬â†3—ÁÄùŒ—¼+qøÔ©`–DœDÿ½Ô¼oêRЩN¥ºÃ¤qbíÐ…±cP²ÂË@#L×>~]SŸ:ŒGnð$0‰ñ©Dv(y&YÁZ ~‰µóYâ¼á¼–aŽ@xÑ„c• x(d¡ò#+¯x\…¹Aü]:ÝbïÂ7ØFÛ]8¼Êý^‘¨““è¿—š÷M] :u0û¤Û£î„ñìS óàÎÕŒFáÎ>nÂ%—IÂDÔ†%Ä ÿ ÖúæÂÚ8ÖmÎDn8³cÝDíab<‘1ÉŽ’Oཷàò1óÄ‚=™›‘_Z†‘.J¬f#SI¢ÿ^jÞ7u)èHÔñ€0ŒÆc§a}¹ÂüEÑ•ïÉdnXµ¡¶“MÌ||Š£Ê#ãx`»8‰kM-KûOrËʉ±Ë)üžžbú­ÕmN~<‚öU;¢³Ý”£s@„h-ëuL¤þ·å(]”X!ñ¥ÄIôßKÝû¦&êRª;Ljˆáx˜†_ñc¾d27leå8o‘ìXŒ(Í-DYýÏQúWŒŠJŒWL¬`­üÂÏØ±Ë¹ɹC|Ïëõh’¸t„Ü:nâ„øn«)œ.xwDg~yGQÝÚ–ÓÈÓ„¥ý°®Dã ><iIÔÉIôßãÇ®$Õý6éÖ�˰Q¢a‡?+C2Ù†ÝIð… <ªÑbóÞ¸ø8Õˆ‚(¶#oý¦‰íl¤®D]Š’s'{ϵ¸ÍÉã‚'9Žè‹Âp#r+ïÃ;ý;Z/œEûØÇø°$êä$úï¥æ}ƒw¶„æÏµö×TBJu‡I þ>\)‰v›L,š÷Pné†G±ÛWk$È„çh?{åõɽÎM¬œT]±OüŒ}µìrŠ¢.ÚmNçïKØžð¶àI†#zøXý/FF|‹‹iÎŽÕIÔÉIôßKÍû¦Î_Su ‰Þ<‚¶d— ý{ý^l+û·øµ ·ÂJIâdèsz–øe Ïè¡Ì ‘º+öÉ‚'Q—ªUwbˆÂk¤·ÿßFèknÎ…ª x`ojIð=yÏÉpDE° ŽÕIÔÉQ‡¨K¿¦êR:Š:ž¢å¬ ÷" bÐqGŸ…?)„0 çm›8Ý@§Û/~žÄàƒ&ØâÊóè†í`1ŽŸ‘J±œ)Û…í¦Gâ¤8Ï­£Øºõ(nyxÈwû&º+öÉ‚Ÿ±¯Ž[’s>b»Eáž…üs‘]bÅÐ@öfj )¸€ÞUŸ³ó:žuDWDZ:‰:9êu©ó×TBJKQÇ‚•2Ë1"®*vãDóüÂ+<±ìGfFJ¾K”+Á «.ù»# ¥X[18K¢.õ¤îŠ}²àgì«ã–ä\>Ô"ÖýÆZu8kŸ}¿ßü9LÎWs?7<Žçd잪ãXDuˆ:ÑT¤È_Su )mE¯°›nºz Šó¾0Ú‚òM›¡c—7„!Xt_®0%ÐvŠ&“à‹Ô\±OüŒ}uÜ’dÞüýÔ½¹[ê“­8v¬“/:Úåq<'q÷40Šþ¶ï`Òëa07¢óÉØ¢¨“£Q"᯹¨N!‘¨K1,ê>=Zÿ-Õá]œø]6>|/’5û‹ÿŽí’«Ý; VŠOûŸŠÿÏÈÚÑt¯_5Uxûj¸%Éħë‡Ï¢Ç“ÛôÚ'9&ûÏx?Ú,5âïl„¹± OÆ•ÜeOÒîi´Kkš÷q¢å)7ÂŽDœDÿ½T¿ïZ£ºß&Ý€‚ðõ~ ]¦&dÜ*Û<˜vÝÃæGSoÇØŠA£­Ç±‰Èå §Ç~éÅ <Mf|7ðbΧnÝ{08Ô‘1‚õ®HÁª;1fðÌz�y¡ËV’KX¶ÛèrùØàï¿‚’ì ²ñ«É=‰O"0!»§,ßóAlÖÐìpÃòž…¤–C§n¥¤zœ&úï¥ú}×Õý6éÖ�ê@\•û^bÄ·J£& ²ë”]üN2¹ÔC¯Ûñ½ÛpŒð;E¦ Âz/}Ýû[]rý¼¦‹€Æþ* ãAÓ/+\|­–§$ZÃM8Ü“s¢Vðc¤×‚CÉܽ“ÄwO™_égs»}2f(£D¨SÕý6dØÄç€Eÿ ZÝq®ÆvèwÖ…üò0Õþ¶¼E ã‰Ac?^Ö(ôJÔñ,—Ÿí‘Ðî) óSêö’çg0Þy%Ü„ù!Q'GU¢.þšª³’dØÄc…v]Nü+V¶²gG Ï$‰0‡±š-8èÄ•X4öãeB¯°÷OÏ¢}TâCÇ&«*‘·Ë—ši~'êt[ÃaMv£('Sìw‘§ïÂ$'¿‰:9ªu)ò×T•Lu‡!$¬VÔ±ã[—%Ù‚ö<‰#EÙbçÞ]þðOÄrð3öƒðÞmB×T„(âî²ÏZ…^a>uõÐmʇ5ù9Ìç¶únŽ‚¤¯ÁïBçUÊ‹uЕ~Sã#Œ)žƒ{urReíI¿&‰:bå¬ZÔ1Daçý6ã1kµ¢±¬†ù¶zn^ÊÃÏØgAj£åT W—}Ö2ôŠ8!¹;qÕÀÆó^”ž¨Acïˤ%¥uˆuuñÁÇû¤Î_“D±üå0ã¸ÕŽ_íàfé†Âß师/n ¯ru> {ã…€¿é„ó\.{7ƒç=}Üø<ò3öEQgÓ£êrƒä’O®è÷¡°ìW—}Ö&ôŠwmvLEô‹ÙÇM¸ä˜ R#üŠu&äæûÚ¿þõ/.|þñÇÃ?¥ìæß‡Õ×ü×<¼{åI¿&‰:beÌ8aÞg‚ã/‰%ùÊZ± `¤ÛŒÒ\æŸa,µVqŠ R&Qò\ÊÊ)”íÉÉGÈ~ƾ¸˜Â‘bwæjö8J„÷Î5<Xæò€m68^Å£Üݰj3–Žåul*o™ t¬JøëLÔ-­ï¹Â‹¨‹ön¬¨ “"MuÄ a>_à;¾ }0Óÿ-ö× ¯!ø¦w6¡ ÂŒÉ Ž[û ùÔ)Û•ˆ•çRZöà°u�<È~ƾXw׿…õ·ax<ž…âªÜmI=JIŒevžd%|,~êõ¸a«Òã²l,‡CÕÿŒÕŠ:¾Å:;rl;¶cÇ ì]x|?ö¼ MuÄÊyõg?³áY¨NÀ~¶ Ög+ˆ"ÏnËíÜ‹;ògÁ8&"y¨#Ï¥~Æ~,±¤AFaMœ»^kÉr;O$ ,šÞ8Æ¡Cƒ#?/.òœ±wÅù y„o±m·Ž‡]ºy¢íÖ±wVöü"`ÚÞŒ»ÞäbuD°DàÇ`tø ¼¸ÃÇVzÔ2ƒÑ#>1>€Kb,='¬¦[tüª$œç¹”ÂÏØ'ÿk_Átÿ'ØíöÅâÀˆŸ—£WÆZí<¹q½¦¿ÉƲ ýÍÕÈÍÐ+§.!øëüñÂ{±¯yCº[ÇËeö.< ŒtáBé{È×Ïb)†Õ“¼AC¢Žˆ‹91gÃçÄÝŠ`ùc·¿ёÅ|ê”Cy.¥°÷㉠Lq/ˆÙÎS=‡¤âK,7qbk^;O±|ê6¡Ðô‹Šó7ó/Ö¥»a<ì‚EÂãû±wQžWpš ±¾ µ ó;äáb{€Á$fõ!QGÄ ;v݉­¥óǰ+ùãB¥µCn,íxàxÎ¥€HÔ‘çR Wc_‚x­vžÜ¸¦7ã~·t,Ûáxì…J2ÎEàÇÓþ§âÿ øÓy—ZùµÄvÃxiÂÛû±>¯<ìöë~ì´ ‰½,‚`�Ét«#QGĉ€™'·q©+Ò§æ5&1>á7°ãl †ªÊ™@å¨#Ï¥~ƾZqŒ'çïKhçé/LŒ¿ŠoüsÍ <Mf|7ðÃ{b?{7¾‰ÄáÃnŒþý'çÑá’îœ?Àõ?¸Fǯ„â\¸a¾¿Âs>ô_)E¶&rÇ€•È-¿»'& 5 Ž<—Røû< b@·öi6šÂÇÄ‘‹»Ì L ÷Òн¿Ù%WЯÎ-G" |Ø |·|g¡O]ø+"õÌÂïéÁíÚ“ÐfoX¹?\ÐÖ”š®Ê} ¾×C»­ föõm'ÆÉަä¹”ÂÏØçYÇ:r(\e¾ ˆµƒõw^4áXeJwÍíÝè|ЃçI<­"QG¼žÀžtXa<X0ws'£� pFß´ÂKÓð´œÇ¹{ùnœ(öŒGnPF á=Ï¥®Æ>·‚Xu aLp¹j'6kÏàÊÂbê;\,+Dg™/b­àÇnDs[ðÁ~¶B\&/Z+‰:byf`ÙµY¬÷ È*ú57~†'äÄÔø¤d§âuás=Ä ³zý9˜ê›éÈ•(¤Éª‰&ˆ½>¿Âõ'À?<Œ—¡%Iè/eªY´SG¼ða7ÄqÙ%ì„K|ŸÈ¢É=‹}8)HÔ¯A@Àç†ãv-NŒCF+:úÙ-·xD(èz¿….SƒuÛPüù'Èßú´;ÂÜ;AÂN)(¤I’Iþª;1üè7Fuç¨dŒ‰cñÑ7ر>‡ËË0‘lø°l•ìÒ¯#²*]‚^[„2ó÷â×-pŽ'¾Ð"QGÄÁ ÆŸtÀj<†ââRW4®ìø5”Q"š#ºÇfÀn½ê‹­ð° ¨Ÿ}©: &«'u«îDÆ :ï]9 ½þ4*lG–FƒL]=] ÞؘTO Ξ»¯l؉bÏx”Q‚PÁ?�ÛJo¿†.Jd`Ç|ŒžyQçû ú‚sª‰@Ÿ^}Bš¬žÔ­º“àÀ½:=ÊŠuÐꢪö>}tôº”YøúúðtÙh/3xÞÓ11<ÓݬõÈ#QG¼¶ÂèD½áŸ¨¹ÑŸÀ>ÛÑt»Þ;ÔOŠ“`¶™‰&Q„‰º¬·‘“µ›ÊWšjLyÒ«ïQH“Õ“ºU÷Ú ¾¿šË#vea—LŽA{ü4ôz}Œr eE{`r¦*Ž] ¡)üžžs‹dEáýýÞ<Í@¢Ž3¸ûýÂ)¾4YïãÜ\”Xû0`ý™ëÞB©+ö <Cç Ð[~ÆXÀCÖVU|§Šv Ò®ïQH“„HŪ{màÍ÷X8˜OÂãA»LÙƒÃÖQΤ‚BóÌm¿�çŒ�ÁÓ„C[ópèÖSDïï—þš!Õý¶$êRLðLïhçŽéfúQ÷éW°³ôB>˜÷}çJf5aÎÛ6X­7Ðé'aƒš`‹k·OyÒ±ïQH“tF=¾|ÄØÃ‡xÌ•R_Nh‡U´ËŠ‹:®ß#»Á66êÐ×ÜD?ÛÌx`ojÃ铪³’Ü4ÐÁßõŸ8ÕʶÒg1ÙzÇZ½ŒuÄá7‚ÖòÝ8Ñ<$N ¯ðIJ™(=þ tú.¨åžúûž4Û@ (Û@‘Âwéd—¹ óãДÂûûñÒ7Ã%4YÈÿ0Ù%V 4`o¦š‚ èMâÊJu#‘D]Š™ÂŸD„½ 6U´a2ücËÂ.Jèê1(ö[a´å›6Cg@@‚E÷%]”HlUMÙÞRxãNì7iwa~ØB¬ ]S‡½Ü,¾x?^úæ+8ME(¬ûM•¯0PW³ö‰Ð÷ûÍŸÃäL^M©n$¦ñˆw¿Ÿà‚uχáUýâjßÖü®•úÃ1¿¼}z´þþ+Zª   ‰†ø]6>|/”Ø“_êï{ÌÿEÍÙfÅ>sæ;+Ëc²¶ˆ‚i¼m–ðL[œpï\Cûè´ø•„5˜pÓÃ.óæg™…‹/Þߟ¾)x[ð÷S÷æ.N¶âرVL¼èÔ—$5Ú€êF"/ ´Vð÷û±Õ~'šì/˜°$Á‡ÅUoe›Ó®{¸Àjëí#Q—"Tšm 0 —ýjŽïD–&Z«;üÊ!xï£2w£Ø'2‘S´ÚÝùÈZÏ[àæÔM¸ìïT?<†ù‘.Äæ_ ¸¢ß‡B._¼¿/}s®>C¶&ÚXüí“É»vÃýHüóÏ?%ŪéçÑÑÑðO¦ì÷ã‹ ô9=ËßôZÑõuQú^bÄÇãÐÊà¯m÷ll‡¤mWô(Ée·r7 [ûw\¼l‚Iñ:VwEМCûÂîÛ¹ëAÝþ Ž7³ ·¥ç/Klæeœ/ÍOúnlzŒ Ãüx54„?"+ ܾ׀n_jîàÆ†÷÷ã¥oÎà™õ€8îþ-‹b±ÝF—Ë'±Á‰£Š‘xäÈ‘PÃD–ÂÂÂðO¤ì÷â 7l‹qüŒäºzd‘\_—1ãAÿ‹ç4 ýîõ«;%m“<gFïãÄVvks+tút,8«Püv.óÙ±L{éŽN¼¹‘×éÎì<aá¾ùSX]É»u—6cƒ»0?¢0¿þ-¬¿ Ããñ,wÿMTånã`ñÅûûqÔ7ÃxÐôËšŸL©b$ö÷÷‡&²üøãáŸHØïÅnXu9Èßy]=²Ì]_—!¸ÑôÕ5 ø~†a‹ë¶ààèT/^øk›Äá:Û�»…ØjFEé0ßîÇ? ߀ ÆkJ¿ŠÂÈñ5¶ï4àn·v;+ÝèlùeÛŠaúïCñs¬•§8L·€·Ýˆýå—Ñ›ÄvN§±ÁW˜Q4E=B× £°^JQx¿ô´ÛË¡šß6r·.wéüuÀ<ì§±Õ!øzpéÄ^¼Ÿù.J®ô­<X1‡ð×6o‚ïêKÞ†&#o­ãÁ§Ž¥ìÇz‰=Š^ÞÂöºÇË».¤ ì÷M¸ i"Цk_Átÿ§ðâ!\¿áùø+ßkÞßD·DîÖ¥ã.C=pöÆ+Ëýš&¼iÆAQ?Fœÿ…Åpùì‚ÍÛО¬EsÇ-4v„HA&àœ± Ã’#§¥å¹ª}Hã!mÆw!M&&0µdË—¬ ¼¿‰:®™ß­K×]:0€‘n3JCÎêCÇŠÖ ‚K¤ þÚ&}<-¨.Ê'×È9xޱPÖ`Ž'³@äþµ€i{3î¾¹_ÓclðÒ„÷¬ üg-aïÁ ‚ößÂÀ|ÑMWÑêô&}± ª‘8¿[—®»t ž:`ˆPš°M(¨0GD¥·ÂÖ>¨êãÔxá®mÖ„äOø«'�ŸÛÛµ§Pº‡ùûÝcà'´þ¤üN0Ò… ¥ï!Cì¬_,–bX=|Ô^l’¿‹’cƒÇ&©Ë ²:x?~ú&sE2ë¶„ÞG“•ÝÚ‘“‘…=–ÇbKoÂ,¥*¸3ŽÂ ,;÷ÃâŽìv‚ øÿoé1q½~ŽMd„c¯TíE‰â>uìök!ÖT ¶A:‘‰Åö�ƒÜ$SMÝ. ûûÔŸ!MR•duðþ~¼ôÍù4aÛQÝ2Þffm�¶ÃÉÝ&QÇüÇŒvñ‰ñ\2!'¬¦[+<~MV¬;eI‰kÎM¼m¸ú 2àµÿ ýJ‡I`“ÿ~ì\ÒD$€b%—º]ÖgÒîBš0Ñô�õ¶^q¹…Àpö<Sôø•ï÷ã¥o²±øÖí°À-«‹äã îŒ#Kñµý­Ð{-)+ö©K ÖG°ß9}àüØÄc…6²¿…ÊÛ(oUZü‹ÙèÐr.éBç¬ÿÁ5nŽ_S·‹’Ncƒ¯&sb`CY«$϶خóþœÂ\¶/ð‰¹>E^‘÷÷ã¥o ˜¨ÇÎwÎÂ>æÅßKÙÈÚPJ;ué Æ‘9ŸB¥µC~e•þ‘ú^%ëŽ#Òiâ ^žM<×QVj„eAl6Àrþ róÊQïðŠo¯$ᣔȌ,üùÔ þp®qˆõŽ –¾öéez”¢É陟Ÿ¸Èj•ú‘ºqÍܾ(¢¦;Q•±uO”°¼¿O}sc½0VæA±71Qwô(ŒmÃI$ê8ƒK㇧ÿ!n˜X]òòÄbÝñ‚z'®hÄHö.ÃÇ6›2DýÏá~)7u‚Ïš9ØkR<ö›ð¢ Ç*ð0r¡cŒ~Î_CG*Bt¨wlbçǕŒӳEu%*ÛÓa £Í8øVñ‚ß«ð¢%Š¥öãýýÒÍn¿uœÁ_”$ãÏØ†âÏ?AþÖ ÝqæÞxÒ~ ¢6ìG›¥F†F˜»ðdœ·0Ë“^Æa…“™RǾ8ŸÊWö‚÷.ö®û¿PõH‰ts‘;:ab<ba£èŽN4R¢ƒõu"Žƒ…„ô ¸\µS¬¯3¸²°Cü.–&=Wn<“]8»÷8j[:ÐÝöªwüM™ŸÀpñªÎü¥ù› É=§XžUÞߟ¾)W³9²2HÔqwÆ1tû5š#ºY¬°€úb+<,aógßõ¢Ý)_“{-~[#á®mB:™-q^ÑïCaÙ‰Ÿ MJwz®á öÎÈ|/O¡¬hLÎ)±K=Å­CyØz¨ ž”¼ï;:ÑH]ˆö»«Ñ6-äÇeþaG—Ö×T;*²”lWæ*Ñóñ¡ÜÌùŸãªS\Ø“¼w Ãt*jGù~?^ú¦à½ÊÜâûd"§h7´»ó‘µ~ vÍÃÿ%8;ãtÀ°%c1yù¼¨óý}Á9ØWÒ…a4–äAk¸ ‡;œäœ…¨èµàÐáx‘rŰ:Ô;qECÀ«¡!üY÷L¬ï5(¶ª^Àc….Ë)Òïr[0«„¨ã|Gg)© Ñ‘cÃ~óaTwŽÎÙºAø}ƒ ‰ÁGßd}«qÎl_Øc;w=¨Û_ñ&]”ˆ CxîD—Ù\ø3Ž“âêµÛLÄé@„‰º¬·‘“µ›Ê[0º’ •=³³ƒ‘?+ Á¢ûreÂÒKÔ‰"åz=‡¤·7Å2p'¶æ)?õ óq”XyiøñYSÃŽNR¢#]Ɔ0ö�Õyï¢èÈIèõ§Qq`{h÷)SW~Eârá½ñ|Ñö\"4çfÎk0ÖÝÇ O©>ÇûûñÒ7YlË‹›# Hw̓˜oz$�ç#1z(Œ3e»°=$2fà¹u[·Å-ºü³bÁ¥q <Cç Ð[~ÆXÀCÖVU|çJ*;Âýô,ÚG%mÄ’fÿP‰¼]–á*OÚ‰º¨Ç‰dÖ(s9bìF”X6|‰¡®T„èH§±!øp¯N2±¾´:–ÉDIQ§™ûbø0ÿoëß‘Wb…K‘ÅïïÇKßíƒãklßiÀÝîùKUÝèlùeÛŠaúïCñs¬•§Þµã^ÔÅ …qØŠÁYukŽ0 çm¬ÖètûÅÏ“|ÐÛíxW<H™O]=t›²ÃmÉÒ£°$í…ÐwK'F¾I§‰+dŒ¯}ÓýŸÂ&\œ¿c̯ôÝR‘h·6ç‹æ=”[ºáQð=ùÛÑQ–ô<M»kpëÒ׸M8±!oÂäTâŠïïÇKßœÁ3ë~¬—Ú±¨å-l¯{œÐí~ÎGbz„ˆÖ°|1‚ÖòÝ8Ñ<¿ð O,û‘™Q€ÒãŸ@§ïŠE<*³ð»;qÕp ÅÚ½(=QƒÆÞ—¢IPüµM"ðìò7hšˆ]œÜà : Ø’] SD®ïõ{±­ìßâ×6Üv*» àkGGYÒklðDX4±@ïÂzëÿ³·™-ÿ±H(„ÈåBšðý~õÍÉ8glðÔÝeIyŽ_ZïÔyp×fÇT„åž}Ü„KŽÅøÕjbN'VR »(¡«ùà £-(ß´:vü·?ÿ!M¢Õu¼E=„q”ß‹œ§h9k½ßÙ ãŽ4> "REÔ~gQ/¢íòO+´�•ˆ&ö‘ §ºÃرÿ,-°wÞ€A»E³_ }R‰kÞßQÇ|rÝx>iWéù_RóEs>Òܰj3–æ÷³b'}ÎH´ƒ%ú|ܰ4aûôhýýW´T@šðgàwÙpxÅ7WÕÒDum“¢1¶U¢ôüeÉNØeœ/Íçç§0 W× ˜ Ì—Ö„úæÿ)zäºÈ,|}}xºì«ÌàyO_D¶ŽTĸ³%Ô¶¶N·øFAø;Ðh» ‡7¾q÷fH|°Ÿ­X¦›Z‚ð6€fë?Ð99/¦áµ_Byþ¦P½ÆögK¼¿/}ÙÛ³ÐߌÌÌÔŽºÒ¡oî†s>2D‚p>ÒܰUéqyaÒa¥zÝ.”ÕÿŒu)@|Xó>*Û<˜vÝÃvi¥Þޱ•´JBš¨¯mAz›sž°³ÿæOau),¶ÙŠß¼™ìâFî>|~ [‹>ÂŽ’Zô*~ÄÉ ô1hŸ^¸¼µ´Hbê)Æ,&[Oཷàò1óÄ‚=™›‘_Z†1®°5oÆØˆ¾øœ/šÜc°Ø‡SŸœ>0 ·ã®(Ì=ra$ÚÐñç/0®ôB‡ó÷cm§<á͈>%/›PPÝO‚J8i> ŽD(|3΋Ø—??°ÆK„DŸ_¾—«?ëWIHu¶M‚°[È yA­h8{Ê/+.œ—;5o¡Àк©°Plu‰cߌÏ,ƒ6!Õ0ýI8LHÄ.Y ÇÔ ?•z$¡W„h-ëuWá üwðá7cl°úÊGvé×’àÛ¬\‚^[„2ó÷â×-pŽ+½¨ â¾'ÚŒkP÷ÈáC7€æŠC0;žŠ_»ÐßlÄ©æq'œ47®×4â7Y%°_¼¹zÕÄ7“òF •„4yãÚ&EyAWCè¢Äº=°¸çúÌœ¨‚ÏþOèí ¿ß \55¸é*üžRªÅdOꎢºµ-§‘§ §|óÀv8¾4aoÆØžœ=w?âØ\{ÆÓhô’˜S#|ô½X.~ô_­Eûë[3m?…¼íç#-–OÝ&š~á(ÇâÊI´ƒ%ú¼2¨#¤É›Õ6©Ë º*^ý CÞÎ…ãË€]¬wßEÖ¼0 }W)ÄUw´ã×3GP´ýœ3OmÍá[O}WÁ׳n‹Ø77"·R+Ó¿£õÂ9ñ}¯ÀšHVÆ›16‚ðÞ¹&.>§Å¯báÇc›Û8ŽÄRÔb—gŸÔa»&Ó}§îšÞŒû ÁúæŠã±ã~¥÷VÇ›%¤ðÒäÍj›Ôå]lפÿùÒ‹]ì'²²v¢âê#øŸO—;~=«X§¼ˆºFF|‰­þãîÛÓxé]ø7Õ16X»¾Îï‰ÄJam¦ Ø<NؾqþÛþ…‰ñù<ivœ-a¾!êV²æmÃÕ/—5‘á[TÓAY8šÆѴdž·Ð4òºõàÎÕפRŠˆé¦ž¶a¤./húÄØÃ‡x¬ÚÓ8ÓöfÜã8QÞ·W?tæLG¯Í…¹QÇØ`;°óù}çýépE¿…e$~v649¼ ‹º�¦|ââ-–'&Syãµðó~ê²Ë‰ÃùoëCÿ•Rdk¢­–6"·ü ì ÉqÕ¬ƒy¬Ð.ù½"‹<| ûž:ˆut.-|…¦aï´ÈJÞ_,’˜n쳪HQ^ÐÕ Œ;q›M ¶.¸Ùq¦ï 4^Çm‡T„*‹à†ýÆ·0°£WÓU´:½Ü¼Û<ÂH.”¾‡ŒÈ~»®VÏÊßV޷ݰ•WàbD`èÅ„™ó±ËDÔ16¼Â‘}_¨5{ qÝ^kBGu›á‡_®á`ævŲ5Ä‚§÷ã£ï%/¼Ðëà{¤±À·[rP*L™Ñø^í¶2˜Ù×·W‘ª“u0Ï TUÕÊ·+g +,—Ì&ÇBøuG†4M-ªŠr Õ×/þN P–WÈUhš%W¬p:¿“|ïöBL7õ´Í"©È º*&[QþÞßÑìš‚0ó–=YÈÈÿÇKöCß=þ!åXôU[MV>v‡üD³°ÇòX4ؼÀ’ˆb}Aj#˜íA\O—Œ¢®ábrÙ"\óJ®ôa>²›:ÆF�žëõh’^ÌËÀMœØšÇMN_Á?Žçî4VíÁ^í¼Wq ½î‘°_¬òðö~|ô½ä…zœ´ixZÎãܽÇAQìÜ€7üQMÈ:Ø«a þ9LÁYs$æÄ¥ãȘ°;| B’•bSí_ ‹ÛºøÃ騧m–#þ£¹µ èøººßÄ· b´õ86­/Üè¿ýÊn•î†F³Õ- “Õjn•®-ìˆ}?vZ†"ú±H0€xæXyߎvü: ¿ëNänĺÌ=0v<“µ‘:ÆF,Ÿ: 2 k8¹áG¿¹(ô^ë³²ð·u›•%Öyr†&þÞ½‹ò$/¼Ðëà|¤‰¢®ý{ØœáÏRžÿŠU¿Þ†¹±_¾*ôüŠæyȈ1qñÑAãd¶æÝzIÄqajvc=G¡iäuëÆus3†dm3Œæ/°5Æ;«­m’u4·Ì>¹„}ÕwñûÀTç½>¦Ÿ‚Ëv‡‡óÌ@¿‡u;,pË^„—K&óˆ6rôGè?9—´?Àõ?¸¶êã×H¦áíþw(@¹&WµO&—´:Ɔ(ê®}ÓýŸdóìÎß1ÆE&“9–ì„•‡ë僇áíýøè{É /ô:øi¡ã×l”µŽ„¿!"ΙŒP…-W4I¼È:X,ŸºŒ]0Ÿ@ {^51ÖqyÙ;p¤ê ôg*p  šu[ «s.Ñ(¼nã§#žw’w4·&,d”`‘ü«Ñæ„«Õ ½þKÔÛ—¿\´ö˜¨ÇÎwÎÂ>¿{ãìdm(åh§.¼£(ë¿ó%Ÿ: b;õ[?G®f#rZàŒ´:æó\!Šà‰ Dæç‘ Ó„w2ùõ©ãéýxé{É /ô:øi,Áæch•&ö4ü òLwV#c{žð³ZYó4AoºƒnéªÐîÄИ?椥ã æzuúrkµÐ•žBí½ÂS,"¯ÛhátþçÐhÌ›\êj›äÍ­øF^rã+$gc½0VæAqÂb¢îèQÛ†£î°+…ð¢ Ç*ðPfcXyŒ‘8ê5jß<Ekõ‡ÈgZトôF¼t?W™OÝ\œºÒFÄ-w.ü˜˜`ó§·_~¿#GŽ,Ö÷¤Ÿùå—ðO)À’ðBâBÂ?T›Á÷Hc9CœAûÂÒ)ˆÑæ#x+t;Ǩ–ru„÷:dÆ-0‰ñ©øºº„ƒº×mŒp:Ë ®¶IÞÑÁ¢0¹Û ûô|ÏÒW!Rä}[ì;c?‡w¶@Wó�OúÏ|éÅxS}!MbÅ©“Ürç i²µµµQÛ1;;þùgø§xÀûÙŠ¿p²à|¤1ÙmÄÞòoÑÒÙ…¶†SØ‘¹›œÃEý)œ©:€üŒ·«¢<°¬cÉäÞÔ›.¡ù5 £—<O$¥uËâ¶µÁbb[ä&Ô7ÿžeüBÔÕ6É;š{# <Cg½úš›ègGŽ,phSKÒÃÄÏ2ÂDZâ)완§h®Üt9¢ìÎG–Nm!Mĺ³U¢ôüe‰;Âeœ/ÍG^Ù¥…[î<@!M–‡ 7&àd}^,¬M•eUº‚’ì KÞ‰Mî1X^3÷¯Œ´ix:kq¼([œ€6!¿ü»ß†àÀ½º¯`¨ïŒØöçÖ€ ÏÑVù¾ø{i‘ó¡h w!?+¹'îÄüdÏ«ž�üe‘×m�Þ¶ê¹ð 9('ªÝùYXŸ{-žè·ÚÚ&YGsoó·_³ÿa.²K¬hÀ^vQ àzÝ6aÂd>€n.WíÄfí\Y)ßábYaÜ"%þ¾=NË]ÕÅ©ó㥬ù‚ð=ú;6 «KiÁ>…4Y¬¿³~7_”Ý¥c—«ò‘]úµ$ˆ5+— ×¡Ìü½øu œã‰ï§“BPRã6ÛoÆ6͇з?]TèQôÖ•áPŒ~ê0Ž+„³Ì ²ºe7v·mBþ¿’ݹŒ÷Öcÿ¡xå•Õ×6ñ1§”8w±S»dR„ÂPÈ•W¨«ÀY;»¡ÿ ýæÏÞ5‘ I)Sí¨ÈJ`§nEÄÅwø“ªÆ†¤ßÌV4œ?‚=å—ÑãHj¡&+%r·N¹]:†€€§gÏ݇WfÃÄ1j<Æ$†â|¤=ÃçÐæ¶¢œ„Óú ê8s¶Rãº!´$,‚Øü’X\ÂÔ&$¢Gú¼zPGfYÝÁôÎǰ¸#â C°è¾œóá^a|b1–ìy^a·Jë+qÈ(ŠÕ™I¸ûžÎŸÀ?Ã18êwгŠ]ìT"x[ð÷S÷æb,N¶âرVL¼èÔ—pÒ„M°‡QÝŽ"¼ó´>'®÷ŒÞ·Å‰j¼íVó\V ƒÖ{=Q]T16þ>\)yGî– y'Zžò1.D(¤Éʙ߭SÞ—nîNûè´ø•„5¸„ÃùHca%2‘©û6ú*)àAkÅ”X¹p¯CjÜŸÆí{a¸ÛµxôÕyµeEЙî†>?´žÆ1É®jŒ£•d‘Õ­0.® tØi¸%¹Ü–ÚrlÓ™ð_öùa*5-ìÚ©¡mB¾.v ª¶gJ?@&K öoñÍž¹ì!Çwsâ ¥Õìb§Ži¸~ø,ú"eÓh—ÞÖWaìªóÞEÑ‘“ÐëO£âÀvdi4¢M­GÛžìw“3 OÛ?±#S³¤4¹ŸÃÚ/3µôyaïb³Ö€f‡;|\8 ÿH,‡x *Þ &+¢°°Pá]:Fê.áp>Ò˜¨ËÂî‹6\:û]a7Òä­wLp&¯NÖÖˆóϬس>J#G$d û¬>Ô‘DV·‚ Ö=›díµhv£îÉÜñûÌ7âj±ñ�6”6cTl“Áº°NkÁ/娩o‚cp·-úS¸ªpBÿÕìb§Ž<³@^Ù¿å‹[3ôp·Àœó?Ö£¬X­î (èïc0ΣDyßàï½€ÍdkÿŽ‹Öt†=­ÖopRû64›ÊÑ,Aü †výgK«¹ *-B!MTFê.áp>ÒæDÖê4â6ËþS6I±'ÔÒ/Ñ~î´G†ˆ(’¸6ê0Ž‘xpçjFËL$Ä‚’×í,&Û/ÀØ>½MÊb5þÛfnµ8—­„M`9!Qg·%ÇÌ,}›ÿTx[Í.vJ ãAÓ/“ýãÉO³ðõõá鲇3xÞÓáç³yßAkÙVdW´ÀMT‡2”á=ýÃ…ñ¬»Åb7V ºý…D˜³ð×Q‘W"¶«² Bͤîç#mQÔ1˜°«Û¿û¿´ ¥ó!:o e!N*Ú=ÿÈŒ›ÿ9\Ïýò3va¤]ƒSáOrÔa#‰•!¢( нÃ"Svy1Î^²€àEO×PÔ,òçù„í€åU´‹¿Ýœ¨{«ª¾þZìßu °\ü;´Ûª?B\Í.vêH]x‚Ä`»Ç =~zæóµœBYјœÑíÍ<ì÷Z€¹Sd}¼¼Èùëv\X8A‘=Ï3~'êt[‘•¿ ZínådŠï¾yú.L*ÞžDz€·Ý€ÄþõÅ@ò œ´gh,þ¶Vw,¨À°×C~óå`¾!1üí8EfÜ<7P¥ÿ!|t±Xºê>Ãú&ØO—\Wq”ᆭJËÒ£*k=ôº](»øä{·%¯[öÎFÜìì–µ½«¥èÑlwÂí“¿«*Ú&0ëÑshõ‡v[Þ1=B¥z²UcGÖFd¼û®,¾˜rÄ¿‹:Rž 1ØÎì'a%–ÜBÙƒÃÖ,§e}›eúÉzÝ鈸+6,üŒšì–àw¡óªåÅ:èJ¿€©ñÆ9æ'Ò‰TåÚæ|¤ øÜpÜnB§G~ 1tÃæù¸êÎêeÆ-Vî×…¢AFÁ?Ð*‰‹Æ¾¯>|‰8&0㼈½Ž–×í v3>Duëâ­8ö=5 øza­>„’ß/ÍÕìÇÕ¯`,üQ1|蚊ØÅ^ÙQáÚ“ºð‰ÄØÃ‡xœ„ב÷í?Ð|¸Zž¾1’W¨Ú]Ápý¨elDGÀ´½w¹iWB}¤.×6Ÿ#mƃ~Ñ ‡ìíwp/â&•šaÆmè©oî÷ñÜ„¡îg¸#vž6ŸÄn³=ôµ»ÿô§î,Lê4Žn\77cHö{c ù låÈ’ÕíÈгðÍO7®®â‘[úÎbyÚŒŠÝf8Ø×n'šõ4‡Cmbä¹”áÇc› Žù¤õ©Äs µÇp&ÖQ¡ð·åaë¡&x2‚ïwtÝøv.œWqôäþaØ|OyßðÊñ Ž]ˆºK*øGkuÞ3÷-ìþ©el¤j7…xÓH]®m>GšàFÓW×0àû†-¬Ûb€#MIÌ@‡oï±ÝçÓ¥’Á~¾ngwBFÛP•wV•Ç‹ÄÚõÚ„BÓ/Š^ŽÂÞiñÈh}NÏÒ#)éNVàÚ«ö.ÜŠcÏ«‡¹KòöˆVÞFyë‹Ô/ª<Vè²ò±;ÖQ¡Â¢Žù÷Îå>ÍDnñÈÏE‘ö#”pFJ²Þ“õ…ÅC\pßû¾jù‹g(f\wqö`1J+NC_o_¸HžçŸÔí¦ol.OM®mnG3F—NìÅû™ï¢äJ_TÇt5Œۂ¨{³Q·=™o©~§îšÞŒûÝß4ûÿàåjgƒÕ­Ôhy©¢2ËTºSÇœèçÓIÍO^ ¸¢ß‡Â² _1šÞÔ‹º±t>æuÔ³U÷^h4E0t³&ìÒI¬ž 8kª9º%™¼÷Œ>6ĉj¹íÔ16R·›B¼i¤.×¶‚ªa¸bQ:~þi.axö¼úà<UV·+u̯Ê×�uµ€WCCø#²Qf¡f¯ݾ”_)•ã}�[×XDŸQð8X»(ñÖ-ÄÑ›K^ñ¿<e”HÞ{Æ76–¢Ž±‘ºÝb­ˆ~Â"<w¢'jfªÔ‘ª\Û$êR 3n+uKQ—p˜‡Å©[`öq.9ø FófL\óà¹^Æ!éä%–›8±5Oyaó‘BÇÁ2˜O™yÛjàœaoÂÄRÞÍÙÂayä$ï=YݧÿØHÝn ±V¸a;XŒãg¤¾¸zœ)Û…í¦G˜ÿç¹u[·Å­ˆË—kOj67HÔ¥f Þ<Q˧NƒMå-sù39€½Ó%ê¢úÔiQX£ün˜§'*Ìò!Wô()ÑæÄqð¦á鼄/õßÁ>6 ‡¡�YE•¸êäíRWrÞ“õ7al¤j7…X+ĹF—ƒüÝ‘¾¸b9lÅ଒¢Nì_²KKWÑêô®Z Ä‚D]ŠaÆíMu¶²rœ·Hü·,F”梬þgŒpb+ß”‰kQÔ]û ¦û?É'/çïã!1ø«a þit§à¬)‡‹Ý]!”̾ÍR½þLõͰ{xs1Â{· ]Sí¹Šì-i=6„ ôÖWâñ¿ðÌŒ çÇ_ç.„Æ0èøŽÁ±¤O¼ÄZ1‚‡ƒKúóÀ⥥uЄ.}ˆœŒ,ì±<–\6Ju)†5è›'ê¦0ì•Ox¢!}T£Åæ½ pq !i=q-A%˜âuóÁÓŒ«S~4ì~„ÆŠ¼pš3e¼÷Q™»QlóLäí†vw>²Ö¿-‹q •g™ÎtüºÀì“:lß°Uµ58Sú2Y‰|‹oöÌMÀëÖm޳[ÍD,<¸k³/±kÊ»ú„ö5ÛQÝ2°T@ðÀv¸’<ɉ¢NQpá†ù>7‰à㉮žÕñl—Gº³a„ù‡ïpþP Êëù1–¬n»zW½s¨Þ¶áX>uš軕ìG¿¹š‚sh_Øcý›¥1¬HªN QÔÙN£¢–e¸˜?Æf7œKQ¢·Å•½…Õ}zŠº ¼°¡´£âÄ;X÷Q(ò/娩o‚cp8²E W)÷« àÕÕ'òÒÒ<3p[Ž&Õ‡YE³Ð,üžÜ®= -˹¨å!•Qü¼Þ¸‰¿§ë&Ìw¢ÿv¯žG¢çÊÔäžD‹$[†Ò¬¤nC+« u¶M$¢8ñO+¿ÛÄs‹õ,;ÊÊ&<SÜ·‰Å3ÛKB_H tSã“ ×ã27œ?>—ß$ëÛò³Ç?‹‹kãÜñ³åœ#±Ç2¿ccn7sn÷—]$É ‰:»Õ‹{þPLÀT»ÿäæV3›eRR*êê#`f ;ß9 ûü¸ó÷ÁRö²6”¾a;u1<é°Âx°`.ÊwF.àŒ¸ŠJ+Q˜„Ë~5Çw"K“­Õþ9ªÂ0Kò 5܄Þè?Fz-8tø^(6ÐäÄ®[ÑÜ»ì¸Qó9вb/(TÙ6K'¶³°¸ŽÕ§Ží¤” ¤q8BL¥š |ޝ±}§wb/v£³å[”m+†é¿ÅϰVžRx×N,׿…õ·aÙ1¶û×Pç gyßÿÞo¡Ëdù·7Ìå–-ÊAFæ~XžD÷Ôãyl&äU´c*,êުꀯ¿û÷ŸE]C,ÿí¶*´/—àžSRÎ`¬·Æê¯Ñ<(Ž&ꎖCk ©qxùž…f`ÙµyÎp}Žš?Ãrâæa¼:äÆM\íŽô¡ÝêËÍ ýžÙÚ¿ãâeLé´SÇ€ï¬[ȹ€0‹îËUé$›Èºü/àl»}ɶЂB“­ÃÉ‹µ0šî¥ÁN]ôÝÓù¢É=‹’i¯¢íÔu·À\²[ Ñ(É žY÷c}”z“—·°½îñ’˜Y©#¶O&÷\\±Ù3 „‚¢¿Mþ?Ð28¶Ãì„Á†Ã1i²çy#0ëÑshõ£µl+Þ1=BP˜@¿­;²6"ãÝw‘¥SçÉЛ‡×kñ›dãñ¸Ðß\\ŽRR.’üE4ç³Nè_‹“ÅãÑŠŽ~¯8Ѥ‡¨FïãÄV6©n…N߀Ž'󷬂Ä8bâÚ8ÆB„åÓ³h•ì¼FÑÿC%òvYàRJ8D «[áÚNäA³n½hÐõ°v `<Ô&‚`ÄJpuµ óñÈGvé×ò°!ÖKÐk‹Pff~X-pŽ+$ŸbøÔirŽâ¶ÊUšÉ8glðlòˆ,Ï1âSÒJ‰¢îZ Ì?vKÄq7:,§QÙèŠË~ÊúvÐÖŒ¥ÇÏË,ÒdÏsˆàë…µúJN|§$Ø{ij@‚sxMI™ºE´Šf¡Œ?é€Õx ÅÅ¥(®hLãW&nZͨ(ýæÛ=ðø§á°Áx-Ž_CººMÙáøAì*·ë4…ÐwGÜŠU¥u+ö¹þV˜+>C…ù6z<Sâ"£ãÍ48~Lžœ=w!Ý¢Ø3žF£Wá �ž›0ZÄñ I/n)X+L‘¥1|ê„ßP÷Ágq Ëûö+ Ô}ŒwôÓ$ßß¡¬ JÕ·S·@Þ;×ð`r¹vå%« h))íp<ö`ܯä+u‹h5*„eÕy'–q|P_ò64xk]šùÔ…˜…ß݉«Q”k÷¢ôD {_rµÛ³n… 8ë Kó2ÞÅhZøÔÍM`í£ÓËe*8 l·z {ÌÞ„úæÿ…Ý/ˆ•m§ÎŽîÿ^Dɦ÷apL…îõ,éÛ—èýá<ªÏ5cpFÛ¢¨;zè<Úb\|RÇØˆ}\-/<d5!¢#kCÀ޳%WáRlQ˜ºE4—#é«?zƶaÌøž¢Ïí«D¬”ñ!8ì=Of¨¾ÔÂŒÂì²€ó¿°!?´sõ6´'kÑÜq ]#á’#{^õLÂÞø€q.¯Û°¿£åKÌß$þów<‰Úæû¸Ñhz£®¶á|caÍûÉ2\äîÃç ±µè#ì(©EoäñƒXm¼9‡®‰blå­ÊžK„DŸO b}Ùô¨º, ’ ³…e$;,64q‘Õ„XŠýWJ‘­‰ìósý>·üŠ¢AÂ…@ b-`ÚÞŒ»é-êæ‚ôm('КÓ(ýðo¢Ø)Ä?.…=¡ÛVbãd—·t<+ƒ½ÿ<‚¨Ü«‹²¡aFöàe8Æ^/V¥Ï«‡�FºÍ( ]‰h…¦‘Õ­0ŒÖê]ȃ&ç®8^¿«({ž{øžÀ—;5o¡ÀÐ…1qu°PluaÆiÆg–AšPW„ØÆ×¾¥O~ûÕ3â{m_Ždißf‹lIÜÉÆ.<Yf±­Ž±±L˜½†¸.– ò÷ÌA©éªÄ®‰å{=´ÛÊ`f_ßvb\"ŒtáBé{sQ<d%¹y…9iÏÐX,6Jób-ü†ºÂ¿AÛð#?Ùý­_0(%wÿè5pã`K[�>··kO¡tÏATÕÞcà'´þ”F;uÁG0½³ ‘¹<ÅbkLêuîDXZ·âľ¨SUZŒÒªZÜv8ÑÙúKìÔñ=lY·g!VØœ¨‚ÏþOpQB-°€,ßä%4¯Â![Þ·ã;©Ž±!Šàëõh’`VnâDœ!`¥˜†§å<ÎÝóˆ½T‚(öŒGn(x*Äb[b}Ajäs Õö�ƒI 3ÀáHc·Wòç …‘ÁüËÚa­¶J"1¢½ê‡×“_ϲÆ-|{¥j/JÒ*NÝ ,;÷K‚yÎû&©,_·óágª°£Ä–>uœO`¯~†!o'LÎ9¿¯€],ZBCþLñ°˜o2¹ÅGp ?EÚPgÚ+Yß^EÜIuŒ qLD=®Ö £°†.G¨–&¬—˜”Oö\–ýع$`¹HP\x%±kq8Ò˜¢ýí£aQ÷ª:=è7†ý_Ö¢ÁzOîÁ¶mà!­w¼ÈŒ›· W¼Œhd?ÿú£Oª²çUà F;ŒøÄø�.©€ð8a5ÝâóøU|«;W»01ØfÛð†_£î.ª«mxŸÀ˜cqþó¥ûKdeíDÅÕG”ƒsۉd/4š"ºGÄgÁu+`õLÀYS Ki¯d}{q'eÏs ;®þ ¦û?É.–Ø¿cŒ.è¨^Ó„‰ölôGè?9—t|†ëp-½_Å_ÞeÃÑêVxG[P¶¡P\­¿Wœ}°U}$®Ô3ñnλÐÅØÉâ™q‹•ßrçtÙój!¬téï)^}êVaäÏóç˜÷l]cK<N""óM΋:¯øß’Õg”XEÜIuŒ q@d2xBMðš&,œÐa‘–´÷©cásÚP]z�'¢¬Ìƒý6|ݮƀ&ÆÍse¥FX:_,ç"7¯õ1œÓeÏ«†�^4žB¥µC. Xég;| ¯[Ñ8”•ã¼Er‘ÀbDinaLã ®¶á|[Å‚‡ˆDÀ+‡yÛjà Ýte¢®@\ofÓq´Ž®üƼoÇwRþ<A¬ü¦ ^4áXeFÎöÇIâù+´#3nþçp¿”KÁç@ÍŽìµ!Ú~‰šŒ£,4ÍX/~t²Ë¢˜à44¼n§0쎘 „ <ªÑbóÞ¸¢4Ž'.! Nôk‚窪j5+WÎ@Wx4悇ˆÆ4<—ð¥þ;ØÇ&á0 «¨WCcqå,íÛñÅTãØ Ô¯iÂX\P l¿ÿÿäãnö1l—IÍtA#-ÅÈŒ›o�ΧòÛb‚÷.ö®û¿Põ(ºÑUqT_hyÝN Ïé‘ ká9ÚöŠï]eê×¥¶‰+YNôkBÔ„þSpÖ¾›6­ q"¹Û„®©ˆÈ*&yßfÎèö%»¼Ë9£«mlÈ¢þinNˆåà5MX,f±Ä¹kþ:Ô<ÒT kÄ<×pP{ gØ.ÉB9…²¢=s·þ„§¸u([5Á6 ²ç¹F}¡iäuë†í`1ŽŸ‘¶gÊva»éfÄÿynÅÖ­GqË3'>ÔÓ6Œä9ѯ žfÔX’Õ¶XÜN4Wå#ƒBš¬äM$ì™EÒÝß4’ä']'ÖŠXiÂXÎøð(‚8m•(=YrúpçKó‘Wv Ž‘äY4ÎGZ¬ˆJ_O^=2ãæ±B—•ÝZæ—"-{pØ:€YU‹:õ…¦‘×­øþºœ°ÏPD9lÅà¬ÚE]òœèׄX>u»`RéØO=l"‰`:¾‰DÞ·Åωªˆx[õЗ”Bos¨Øß4uI׉µ"Fš0ÅûÖð0^Ê^,ߣo°có§°º¢Çw\ œ´øW„¼ÃÞ±t>޲ú LÃÃqRö<ר/4¼nGð°s0"¥ #�ŒÄÐêiFòœè×Oô¦;è–¬¶íö<ñsh°y%y¦å};¶3údžŸ£q©cl¤.é:A°¹ÄÛnÄþòËIM}ÈùH‹ÿ"ï¬Ä¸ìF”XÄ&_Šz„ƒúBÓ¬¨nE+1´zÚfžä8ѯ‚÷ÿƒzóUXm]p‹¢Sð=ÁƒÆë¸íxu\ÑÀsý[X“§ s÷ßDUî¶Õ‡4ír4gô_O`k gtuŒ Ñf¥(é:ñf’Š‹iœ´øo òŽÌ¸ùûp¥äè±k4ï¡ÜÒ ODÌ0ÙóÜ£®Ð4òº?1´üy"!&[QþÞßÑìš‚0ó–=YÈÈÿÇKöÓE‰˧.þ�Óò¾ëE1ÂFÈŸçvCñÚG§£ìÐÏC±‰Õ‘ª‹iê›…„çh?{åõÜÐ[RãÊo™] SD.¸ïõ{±­ìßâ×6ÜvÊE­:Œc$Ñ}#e¬ÁÕîx‘Õí*C«³mø$èøººßľÄhëqlZ_rTÜèè¢Ä E]´�ÓŽŒÄ`Z޷ݸf¨ÃÒ¿ÓÞKå4>Syî×XKd…b%òK�¾‘çáÝã_èç³ð{úÄ~Ú·d£$5¤îbš FkŒŸqÃl„^¦úæ%;$j‚…OÑrÖ„{^ùt\À‘ÆgáOrdÏ«†X+ûˆ¢°/{‡EâO -žH„Ù'—°¯ú.~¸ƒê¼·Â>´SpÙNàpã0M¨+"V€éøCtÈûv4Ÿ:ño¬Ã%êÎýóbɉŸ M+‘O„ 8ŒB“½gênÃáe‹ŒWüá(r§.šÜ“hñ$ïbÂÊHÝÅ4ÎGZ¾Þo¡cqÍ2¶¡øóO¿õhwä*¾Y<,1nÂ$\]7`6°&Ô7ÿoÙ•„:…Ã2©[.~'ùž8“xµ;^–Ö­Øÿ\W¼ PgÛD2g7.ãŽÒþC¢qî5ïCfÈW£Í+Ž“V³Ø_¢Þ™/™ˆøCtÈûv´ºŸð_ó'Ø´Å�G”®£Ž±‘¼‹%„RŒ¢½ò3Ô ÌŸùð÷^@tÙGaíÂ“Ž¯°ë“苵#uÓøi,ÇàÎ h Œè›Rvè‹­ð°AöÙ÷ÜÄ7‹™q[˜¸4ÈÈ݇ÏbkÑGØQRó6Œ:…¿©[¤Èë6þ…:ÛfÁïAÏíZœÔ¾ M’s®v”ò¾$¦Ðy³H^ˆöó‹ÄØy×äáЈ–'Fþ<¯à¹^Æ!é± Üĉ­yʇù!^s›)¾º6+0�‹n“Øÿrq¢}~wUì¿ÅBi¥æbß#-ä×”–¡¹_z^Ôù~‚¾à7ñÍâAjÜ—;5o¡ÀÐ…1qâ Ø (¶ºD±cÆg–Á4n\77cHj(=Ãhþ"æm9%Õí*êk›Œ?é€Õxù,wçºMÈ?øO|{Æ€kJ‹º(ÙVØû>ï鋸™HÄ&y!:ä}ÛkF+údãù9F|±ûŒ:ÆF,Ÿºø/– Á4ƒ®ƒ¡¦ ûãŠí—¹ÿ‡…X¯xõúO¿Så¦ÐJà|¤15[„m¡þ"lbÍz9YÓ"N]è¢Äº=°¸çÖ¶s¢n>û?QÃ\ú¼zˆåS§tê9²º]Å‚Bö<÷Lcвâ;k²vâxÍ…£eajJ"Û IòBt°¾}·±Gì5 ñï ,}VýiÂDQíb‰ówŒ)â\OÄÏìú½8X×ŠŽæó(ÎZuë÷„c𹆵b;¶‡.a¥'ü´À3tþÇ�½ågŒĉ6k+Š*¾‡3‰ÁúR‰Ì¸½ú†¼s“”HÀ®GÖ»ï"Kûv•º„Ã<ÑR·üΡQ®¢³Ëë6þ…êÚ&0 ·ãjO~Ý!#¬ý¡[‘|ˆºø³­Ñ$j-Yß~ýe'µ§ ›»Xâûsíc‰k R7*,ãCT·>圀wló»Õ‘ Ò ÎGZ”8u Á‹ž®!¨13nCO}á߉­¤;ðŸ/°Ø_"à0 +k'*¢Ät›GÆ1^S·Èau;2ôl±îã\P¨³mb?@‡Õˆòâýø¬ø$lJ¿ÆÊ¶B(ëÛ‹—jQU”­¾>|œ+–† (Ë‹^-c#U±Äˆµ†ùãJCšH™BOsGÔ©G´½qÞDœ4vkÒˆ›Ý’±tÕ¡ô½¸‚r½Œ0ãVœ@œ-õ þau›ˆmZ´M(lÈ%åo¿†˜Áx,¦sоEcç�ÆéÒDˆ"a}{a-ó[šGÀTûÈRõN]êb‰k ƒö?4×›$®’Ru�ùÅ6xÂ?­,ñßDÜ‹º×nù/l¯ªöÎ$êø„Õí%êØNd½úš›èg»ìM-áØNJ-£ÇF䞸 »I0¤ÉlÌ»õ蜔ÿP¦ŸÝX¯ê4a©‹%F¬ìÆwý\Ô‚»¥h­)uÉ»‰þ:¸u× WñÈ-½e%–§Í¨Øm†ƒ}ív¢Yo@sD�_^a H¢nžØÉñ•€Õí›#ê¦ñ¤n74š,䘋ì+†°W4†š‚ èU؉Hxш’Í{`hv,ìÆ þèµ§àÃ+f­Bš1ÖqyÙ;p¤ê ôg*p  šu[ «sFu‹‘?Ï+©‹%F¬ ¹ô}”˜;ðÄë‹>ÏŠ‹×fó틺äÝDœ´ ô9=Xr*ìÇÕ¯ ”2ðíU{U³ŠbÆD]˜@ìäøJÀêöÍu¯à4¡0t ìê*pÖ>ú~¿ùs˜œÊÞIØÿ‰Qn¨Qš°xX«&Œ |ƒ÷Q§/G±V ]é)ÔÞH_àÔÄ#Öv¡m»ýË^Vbj|2Å6„ùÏ'ç&úëP¹Bï6d–ÑN×ÄŸ_ Øû¼Iǯ‚·?uoÎj²Ç޵b2àE'GM‚ë;|Z݆ÑÁÏ.sôᇊ±+F G"’äM$ò¾ÍþÞNÔþ‰š}¢cŸíhºÝoŒšÚÆ¡RæCO…?ò;mp¶}“^ƒ¹OÆ’..U>Ò˜1qàA¿zVQ̸½q¢.ó-¾äøJÀêöM:~uýðYt¡½é ´O*—K\ÔcÓ|X“¢œ¹˜zyÿD·Ô—‹X† ¼w®¡}tz™&~<¶Ù^XWÖ·g£nû[Ðd½srQbíÀõSd®{ ¦¿ªGFã§•h^ö¨<€—î穞áïÕùP+óEó>N´$÷N�´ÃòÍÛ©‹?9¾°º}sDÝ žY ¯ìßr¡m».×|È…¦àîü†òhu¥8ajB/ËîA¬X"K츘ó°Ÿ[ ø¦w´¨œ»Q?ê>ý v& }0ïûÎ(ó©ìy‚X3‚ð9LЕœG³½n©/þBéÅx3Å»y¼h<ˆÍZšîpêÃYøGÄw9T‰ÆÉ“u4ÒR 3n]=ó9èâGÆÑƒ;W;0% ýâêßvÉ¡hv V·ƒ]½Qãl­ÕµM`š~ÁØj;ãZâ}�[×XÄ8YÙ®1(êlzT]n÷\ÑïCaÙ‰Ÿ MŽåm’¼oàmý'N…„à,&[OãX«±Ž4ɶB¨›Œ9oÃö÷”/ïú§üö+»tóÙÜBHÆ Ü–£Iuw¡‘–bäÆ9å^Aÿ n„ŽÅÏö;¸íxs'OÆq¡iXQø†{‡×pá†ù~ÔÝÅ=Ï sGs"29×!<Vh¥}c¡¼~W‰˜GÀ«¡!üYY,ñ^º}+?b—õíÙ!üðIÄ1R¨h°©¢ Ñ…Éžçæ»Ù6K ôús0Õ7sáïK$“ tZî¦XÔ±ˆ¨n—Îí,çuTä•$5¢‚ª‘·Ù'uخـ¬üBäd„uÈ ëÞ-X§ÙSotå®ã(…‘žF?_ê¡×íBÙÅï$ß» ÇHò¶¡ã%vݲ`–=¸]{Z"Æ*O]m³ÌÑá<7PUU+éb¹rºÂ£¨Í®1ØÆ×ëÑ8qü4p'¶æÅµ;ÀúÅ‚ Ö=†oÏ.¶­ù!\*϶"xï£2w£ø¾™È)Ú íî|d­O¾ß¡$‚`êmˆß‰:ÝVq¾ß­v7Šr2Å~¶yú.L&ñeÔ¨TÔ¸&¼SX‡AAÀÌÀ%|zö!Øš0Ðÿ-ö™EunV‹q”ãÃÐàHÄ gçEì;4/Áh–Ôm` O:¬0,9é¯Ë(ÀAÜÑ7¥‡¨³U¢ôüeÉÄ|çKó‘WvIQqâÕ0ÿˆôŸ›‚³æôÝ¡`FÄk‰%Ü5È(¬‰ë[Þ·Ÿ¡©êjí/ecZý ýýè7ASpí »slç®uû+’ê÷D¬5s;®íVó\_ƒÖ{=ðDM–:¿ W (/ÖAWúL0–ä^jTªFfÜZÿþexWd­ÇN£urcgQã2…:Œc$n\77cHº[àÆ@óØ#½Èêvv�–]›Åïm@VÑ稹ñsØ ÄŽq¤®¶àÆK™= Â÷èìØü)¬.…³JxšQcuJú‹XX ñª|dPœº"Šºk_Átÿ'yšEçï‹sr“÷íXîjOèÏb7îÀËL¬Êýž”ˆqFÄÇ4<mÿÄŽ(Y%4¹ŸÃª¢h«A AÕHÛ¬ë>‰íýT´¿ ÿ”éóê!Ö$° …¦_”÷ß #¯[q¥çsÃq»'‹?Æ!£ý^ø…tuÑÀÛnÄþòËèqŒ–2bùÔeì‚)Æn‰Ø‡'&àûsößÎíX˜.¡yéˆä}Û [Y9Î[$0,F”æª=¡?»9ù5¶ï4àn÷¼îFgË·(ÛV ÓŠŸ;`­<E»vÜ".V{/ @³Ùڿ㢵¡vì@«õœÔ¾ ͦr4§qû©}RRã&<³bO^8NÛB¹†æ¿b$­‚xºqMoÆýCÉÊÿàMJ®»d»ng0þD4æÆc(..EqEc¿rާI wнÐ_XéÁãZ¯²“àëY·Eì›™È->‚ù¹(Ò~„sOÌìÑ÷í©Åäþó„r¿j±yo\Q6Õ16X˜ŸýX/¾+{ߨå-l¯{¼4ÓÁ#h-ۊ슖谅)¸lexOÏ\x@\xù§“ºóK³PŠaFa‘ixÜ…}L¾+°QbH£Ý ¿01îßžŸqÃläöVÙJêVðÀ–·_9'0‰ñ)…w U»q·M Ý#¢=™OP?gMu\7î^Û·…çh?{åõÑÅ¢jÆÆäœ3¶aXz쿤<ÇH81Á,Ð}ÖÇË÷í¿~aÇ…¨ñS8&ÏVˆï›¼PÈ4 ¥™q‹az¾hÞC¹¥{‰c§ìyÕ„¯÷[è˜CÆ6þ ò·~�펃0÷òãß ¯[qE©UÃr¿¾‡u;,p‡ºì¼¨óŠÿ/ÜÒ¾Ín„¯|‘¦Ž±1 _ßÿ¡¿"f{áôôPUÀÒ„e½ÎOÛPùÕ!Àß%QÝ­˜¯ß1XVá š…R kÀy‚¶d—ÂÔ =~µâ{ý^l Eú·á¶S~Ì!}^5ƒ°ìÌ€Ek��>~IDAT¦Àˆn–`>?‹—õÙ÷pqb-eu›ö©ØÖ‡§Ëž!ÍàyO_DÞPB=xå0"o[ œ3¬™¨+À»9[ ‰3l¼oÇ¿HSÇØ`7ÂA{ü´(Tõ‹åÌm¿ªCÁÓ„C[ópèÖSy\òšW£u¹4‡¯:Pµ»ƒ)m@¶ÀÊGvé×’ ß¬\‚^[ÔçxâÛ‡*TêFfÜOÑrÖ„{^ù’!h?‡ÿçÿ’£.á&”û5cñVÙ¼¨óý3½Èê6íS!ŘÀdåÊŠöÀäœ ?C¨àü¾Ôûؤ8± «¨WñíËúö*iê,Ì'á8b‘™ŽÃ*Úu¼Ã2ßàØÕèîK‚ÿw´Vá=s_Š}"ÙIO Ξ»±HÅžñ4½É; V¡BP7KŒ›D (7éçSÇ&“"l3=B(òXh‹ümädmŒA äu›î©–›À¤e[Rl�ça×Û`1ƒÞð-;0žä˜NÄÊõíU,ÒÔ16‚{ø“7¿Š .dîý_µü>7ß„0㺋³‹QZ!.dëí)N8—Á§}tZü*ÉIƒ¨F… jdÆíñ© <Cç Ð[~ÆX€9³nEQÅ÷p*:C‚¬nÓ:ƒ÷ ̇þ+¥ÈÖHë~#rO܇„]Ê‘÷íøiêâÄ{· ]SK^RçqÀ’åÿßf‹è|d%ñ4ˆ*Uê…5Ü<oŒOJÕm§Bš#†O'Ná‹F”lÞC³îðMCÁÿ½–ã8Ü8¬øû½i°¾=2ôlñfkœ‹4uŒe&^Rç+„ÇàÃbß²éQuYÛÑÚ€+ú}(,» ñ³³¡)Á4ˆ¤R ëX Äò©s\À‘ÆgáOrdÏIE^·éš ifdøu Øÿ‰u¿-ùw·:Ê(‘rXßN䯠:ƧQQ+]ȱ‰·%z›ò©óˆÀkða¯††ðG¤Ac~¨{ èö%o‘BŠ‘7o®¶ÿáS·ü¹ºº„ƒº×mº¦Bš‡íJðë.¸¾Ã§Õm]8jïÃb—e0åï£f¿4£ÄU´:½q‹bÖ·Ó_Ô-3ñ~|>a_'"ð|X´·×ëÑ8ópà&Nˆ66žðB¯ƒBŠ‘·X©–9W—=O$yݦk*¤yTàSWWŒMYùØÍ„fQ2ÄúÕäýÝ“t ¶R3JˆuªË‘“‘…=–Ç'ò×Þ#vê® ëoò‰×ýë¨HòÄK¬Üf‹èhGûdÖ$uÁ@ !ÅÈŒ›ç:ÊJ°H¶ú-ç"7¯õ1ÎÕeÏIE^·éš iž Æ-¡~gët‹|¾Á4ÚîÂáU8™ÿ<âªÚÝù= å%ÐêJqÂÔ„^BƒX!ÓxR·ÍvT· ÀÞ¹eE9\WþRÖ·ßQçN“{.©Gdĺ´Ãcða±o]û ¦û?IÒŠÅù;Æ’|yƒBŠabÿs¸_Ê{–às fGöZ‡¢†‘=O$•×Ömº¤B Á´œÀ{'nÁåbæ‰{27#¿´ %:#¿ØtïF˼K,%2£Ä<3p[ŽÆQâu×j`þ±[2ñv£Ãr•.ñO þá5ø°€ÀÄ|J]!.¡9IY$¤BH1¯3n‚· g÷W ^Õ‘ÙÕI¢u«®¶aþѹàÊ ´–¿õº«pþŠ{Â_Äwê¾p¹‘7Ø2 µºÃ?D,€™zì|çì\àl†¿–²µ¡”vê–çNø u|W}JÁkðañß^p…ÈDnñÈÏE‘ö#”˜£o¬R)&Qã¦ã¨NÞ¬¶aGsGQÝÚ–ÓÈÓ„ý8Wq4·&¼³~{ÄMDV~@û e¸X93ëm„±úk4¾šuGÂØ6×ÎëÛoæNÝÿ½ˆ’MïÃà ~§x >ü\–½ÐhŠ`è{Ú|æ 8kª—÷ŒR)æÍêâMk›Å•ãFäVÞ‡wZ\Å^ø¡ê„cÊ^F\ìÜylÈ"@Á‡SëÛƒ]½s„„Q8oÛD}n¿øyƒš`»ÝýÆ¡ˆ:ÆF,ŸºÈ9t ƒ¡ü¹„:D;ÁÓ…ªHWˆyQçÿ[B·_ÕL¢Æ-Ñç‰Ø¼‘mðadÄ'ÙµÍÙ qå(NÖJxýQ;e7=0]£ã׸Œ¢¿í;˜ôzÌè|2×.CÞ·GÐZ¾'š‡à^á‰e?23 Pzüèô]bZŠ:ÆÛ©û–>ùíWl||ãAK³S\ú-Çzš;à J ìX؈¼m5¡ s¢®�ïæl&É­I!¤˜7R8¨„7«møû¯ ${Cè½#‹&÷,kàÄ»RfŸÔa»,EØ|!Ÿº¸ˆ–ŠPó>N´<K¨°ç`a#tsŽæÂh Ê7m†Žåª†`Ñ}õˆVö<ÇÀkÁ7nXK´(;# ¨YX€õ›(ÿRÍ4<—ð¥þ;ØÇXª½dUâª3¹.H!¤˜D›ZŒ£y³Ú†ä#»ôkIŠV.A¯- §Gks\¡)NFã±Ó°>\ôm •Î8žsr…{xÑx›µ4;Üá&,'f,‡âi²ÀìcÔíÓ£õ÷_ÑR]Þi˜ßeÃáÃ7ð"Ê Ev‹H ±‚ÆG­UQ—h¤¥Ö¡!Ñç‰Ø¼Ym# àiÁÙs÷á•M¢Ø3žF£Wéýй�S!`7¢„í …?ËÁŽx>›»á,cu!M Â×û-t,·¦æ}T¶y0íº‡ l$†:Ù-"5D‰Aç±¢XšZŲ+&QG$‰7K8¨‹7±m¸=nŠvl8_4ï¡ÜÒ O’ƒv¦ìÆ]ªÛ_HDð Æû¯£"¯$®wKû¶(º}/1â“ΞøýÑåöÒç b- QG#-Å$jÜÈ8®Ô6üt°%»¦éѰßë÷b[ٿům¸íŒÈøA,ÅïDnk8ÇïnådŠýt#òô]˜Œ£òVÔ·ÅÉòl ‹u¸ô/¦±A¤†¥¢Np[ ­êÄÂ~5‰:"™pàjŽ<EËYîyå;?AÇi|þD¬ÁïBçUÊ‹uЕ~Sã#ŒÅFÞ·}è¿RŠì¨Y6"·ü ìžW2Á-ž Ö QÔí9ë3¡NÀŒ»檃ЃÁöã‚€€ë*t{R-êø‡‡ñrɰ `¤çLâ4i)&QãFÆqí ¶á !ˆ@0yÆîÍ#ïÝ&tMESÏ>†í’¯ÂW‚¬o³Û¯[rPjº*ÛEµ~¯‡v[ÌìëÛNq ÿ¼ "5ŒÁ~~rwêÑüd2b'_À«ÞK8|°z‹#jèµ#�í,ô7;ä¿ìí¨+ýúæn8Ý“7‰ÕC#-Åpàj"½'’ ê×Å‹=³È4<-çqîžG>iŠbÏxäFÔø_òç b­˜‹S7ís£§ç)¢GÛT"NÝ2cq¡lBAu <qî¢GB#-ŰÆK„DŸ'bCmÃ7T¿ñÂvNG¤ZkÀ})Jô68FV¾/ ¯{î\íÀhDÄþÙÇM¸ä˜ ’CmG¤7§qêıxíê¹ä­=h®8³ã©øµ ýÍFœjŽX,Å ´CÂ_¨mø†ê7^b$¨Ÿy„šÏÃ1ŸäÈë^œ8£ÆÓ`Sy F£üµòç b­ˆÕ7#JÊãÔÍÂ×ׇ§K.ìûÑµí¡´Œ3m?…<éMÝU@#-Ű•‰>OĆچo¨~ã%�ÏõoaýMžöÊýë¨Øš—@œ:7leå8oiXÜ´Qš[ˆ²úŸçòÃF@mG¤†¥·_ùiCÔ  §çEhgn.‹N6ÒNº áÀ/Ô6|Cõ/±ýx4¹çÐí[yœ?öÌ"SvG„“&ð¨F‹Í{àŠò×ÊŸ'ˆµ‚WQÇ\!ŽA{üôÒ£àíBù`—14NvÜ|J¢NM$jÜÈ8®Ô6|Cõ/̧æ»%·íºÑa9ÊF×â$·äu?>§2í&<GÛ^Q0VÙá£:B1–Š:>âÔ±Ö'áx‘ÚˆrÖÁiž&Úš‡C·HÔ© üBmÃ7T¿ñçNø u|¶úܯìøõ`1ŽG8£Ÿ)Û…í¦G˜ÿç¹u[·Å-‹FmG¤ QÔq§.ˆ±‡ñ8é{h¤¥üBmÃ7T¿ñm§ÎŽîÿ^Dɦ÷apL…îõÈë^œ8u9È߹㠖ÃV Î’¨#”‚×8u±.JH™Á󞾈\ÜñC#-Åpàj¾¡ú—X>u‘sègV>{Èë~;ãÊ,ž Ö–—x¹8uJçNVN¡¬hLΕ/¶¢A#-Å$jÜÈ8®Ô6|Cõ/l§îXúä·_=#>ñOâƒÆ¡æ‚/¿àP*øp,Ÿ:iÙƒÃÖ¹¿jœÐHK1dù…Ú†o¨~WK Ö ûôÜ.œ,àM&NœwmvLElôQðaByÜœ&Ÿº´…„¿PÛð ÕïJˆuäQJ&Nœ|˜à’X}3¢¤<øð‚ößÂÀÄ¥éšíÃHb.ÿ4ÒRLÔg!Ö†huo!֪ߕÀ|wô¨ºÌ7àrÕNlÖžÁ•…4aßábY!òÊ.%&Ì [•—þNVê¡×í¢àĈ¢îãShÜF–2ÕŽŠS/ê_̺-âXÈDnñÈÏE‘ö#”˜{¢†Z-4Ò8ƒŒ¿PÛ( ÕÿJàÆËÐ$1‡á(ê"tÍÁ&µ¬Dvê|Yr³pÆy{õ]QoRÛ©Au‘Á‡#Q$NÝ_pYöB£)‚¡{D\zù`×WÀꙀ³¦×_áŸKiœAÆ_¨m”…ê?^üè7Fu§4ûC¾Gß`Çúœ„Ò„]¯iÄoÒË¡däÕÈÍÐGP©íˆÔðš\V$ . >:ØŒÑðçÔÀXïaÝ Ü¡Á8/ê¼âK⋯ƒFgñãje¡úaìªóÞEÑ‘“ÐëO£âÀvdi4ÈÔÕ£?gžHQÝoi M¿D½€!ž ÖŠi Öi‘]~ ž@”þp£¹|¶™ûºa?^9ŒÈÛVJ 6'ê ðnÎhâôo}4Ò8ƒŒ¿PÛ( Õÿê|¸W§GY±ZÝATÕÞÇ /¾ID^÷n\Ó›q¿{1 1+ŽÇÞ˜NßÔvDª<?`æ[È)=Æ0ÚIDïƒë0•æA³þcX\. )ažÎKøRÿìc“p UT‰«Î‰W†Ä ‘Ædüø…ÚFY¨þWAà:ëÐ×ÜD?rìM-pxã›ÔXÝ3Gïú£Gal{¯ûWüßnŸ8 ŒÁaïÁàø\öˆhPÛ©#�o‡;25¡~'+š÷q¢å©øé 4Î ãÇ/Ô6ÊBõ/ÓxR·Mò?ÌEv‰C Ø+Nvš‚ èóø•ý]ŠN¢¶æ4J?ü›8A◿žùÉ3s̽Ñw¨íˆÔD tì: ¿Ç›é ”ê´ÐêJqâüwhŒL–~ÐHã 2~üBm£,Tÿñò NS ë~'²W¨«ÀYûDèûýæÏar®<ü0«ûÆâ”6ÿ¿¡®ðoÐ6üˆÆOöAë—З»ÿôÇàŠ2kRÛ)avÇJPZeFcg?Fü©õœãiœAÆ_¨m”…ê?~o þ~êÞ\@àÉV;ÖŠÉ€qÞ¸cuoÕæÏ=ÃBBdd@km‡µÚ¾ÍÇE{ÕºýJ(Ì,ü#}h³P^¼å Znø¢]œHCh¤q?~¡¶Qªÿx™†ë‡Ï­‰ð+beÓhŸ\ù.{Æiúí£aQ÷ª:=è7†ý_Ö¢ÁzOîÁ¶mˆ–(Œ=O©'�ŸÛÛµÕ(Ù¹'Íèì}¡' ‘Ædüø…ÚFY¨þãeϬWöoIæ±Øn£ËÅ.9¬V÷— G«[ámAÙ†ÂÐñ­à냭ê#di2ñnλÐYÝá'äPÛŠ#ø1Ò߉ƚãÐî¨@£"7`×iœAÆ_¨m”…ê?^‚ð6Á¡Z;Ƥ nÕ ýƒð9m¨.=€W-Imì·áëvoø“j;"5xÐÒì{êrL¡§±®4=Ž¥‘Ædüø…ÚFY¨þãe™äþ %ôŸDŸ'ˆ•ᆵD‹²3zèYÒühåÌ•ØIèŸ h¤q?~¡¶I-ýýý²cCVÿó_ß¾};üSDlXrÿJ”ž¿,©ÇË8_šŸ`Bÿø¡±C¤†XÙN"Š6õ ýS4Î`Žàj›Ô2::*7Ä’Â ñ:¤Éýç ç~Ýü)¬qø±:O„DŸ'ˆ•áÆus;&¤}ÞcE±Þ¾pX‘„þ©ƒFgñãj›Ôó¯ý+TïÒ’?ÿü3üD|àm7bùeôÆ‘*,ѾŸèó±2þÂÄø+ù% u„’ñãj›Ôm·ŽvéVÊ,|}}x¹Dø==/â¾ýš‰>Oñ# 0Ò‡ÃGXŸ}u¿Ï]î™îDÕ>uDŠ ãÇ/Ô6Ê Ý­£]ºx`>uÇ =~z©£øö pÎ<M8´5‡n=]Vä%Ú÷iìJ øÇñ<”Ð_,#>üð×F6ùÔ©‚Œ¿PÛ(ƒt·ŽvéâÝ~ýYù» Õj#ÊqX§IÔi†€@ –[�ÿàØšÛaïY<ŽM3h¤q?~¡¶Q¶[G»tñÄØÃ‡x¼r×¹˜¨#Ô6½-mcЭiœAÆ_¨mÖV¿‰BJãΖÐÓvóu°¶»px㋦ŸhÝRÛ©…4ÉDFþ!mvx(¡?¡4düø…Úfm!álf1Ùz︗?ˆ™'ìÉÜŒüÒ2”èŒèöÅ—û5¨mˆÔàÆ5S#ÜÐZ{ÚÜQf¾OÄØ4†Fgñãj›µ…„C²™‚ÃpuƒÓ€ð­åoc½î*\¿à¶…Þî ÿÜë¡¶!Ôԧλ¾æ¯PVð>´'kÑÚ?š¶¾tóÐHã 2~üBm³¶pH6ÓxRwÕ­ýh9<ÍÛ(o}Á?�ÛáJ4¾ ŒD:ÃD]¬±Ÿ&ázX‡ƒ[3­ÓÃêxA%ˆÔ@Æ_¨mÖÉGðõÀ¬Û"ÖÍFäVÞ‡wúw´^8½þ ìcñN´Dja¢î8,ýè¶q0Ó\_Ì(ÀÁ ð¦éy,4Î ãÇ/Ô6kK¢õKí¿ í– 0èõ0˜Ñùd,é»T÷Œà§ö~ü%ø1â¼ ƒvs¨o®[·YEŸ£æ†._zÀÒHä 2ŽüBm³¶$Z¿Ô>Qð÷áJÉ;Є&¶pѼ-O“*ì¨î >pÃZü>òs2Ã}ýí/ÝíüoÈM ‰œAÆ‘_¨mÖ–Dë—Ú'’�^4Äf­Í7|¡Ø]³ðôÀr(>Ÿº×AuOðA8¤Iî~è:ðd|&üý7‰œAÆ‘_¨mÖYýzÛpõÁËeÃÌ>nÂ%ÇdøµÏR˜OÑgs·_eÌÄ}ûõuPÝ|@Á‡i$rG~¡¶Y[dõë±B+~fß‹]4ØTނѰýfß#¤ü—¥ÕíÒ›~3ï¿ŽŠ¼X\…¿—8T÷ ãVãÿË_òãqgÆÂŸÒ ‰œAÆ‘_¨mÖYýzn ªª6” a¡\9]a9.6H¾×äÀ‰ºØø¨Óm çÝ¢¯ÑFäé»0™ÄÍ ª{‚ܰ•WÈmDdi¸€²òë”ПH dù…Úfm‘Õï«a þé3gÍ軣¯±©}¢#ø]è¼j@y±ºÒ/`j|„±$OQÝ|À|ê2BýqÙ¢µ’¨#RëpŸPÛ¬-²úõ܆¹±GR~Eó‰<dèíQonRûD„÷nº¦"ÒÍ>†í’¯Â“Õ=Án\3ZÑ'³‘¥ãMuDj ãÈ/Ô6k‹\ÔÅð©ËØ“är„Ùó„H@¬Æâ¥uÈʦãh]yðá×ÁþN‚PžÇ¨1´½&\Ïî,p…?¥49ƒŒ#¿PÛ¬-²úõ4Aoºƒn»ö…âÄИ?æXjŸHDQgÓ£êrƒÄ§¨WôûPXv Ž iB¤nXK´(;£‡^£œ9‚¢íÔ©Œ#¿PÛ¬-²ú Lb|‹þ¶ï`b†Øt ÍöáeˆRûD"àÕÐþˆ¬³™G¨Ùk@·/âX6¨î > Ÿ:‰œÁ:Á'Ô6k‹¬~…çh«|šudä|­vò³2‘{â<1œü©}" Àsý[X–ù¹ûo¢*wÅ©#ÒQÔíÓ£sz™ÕŸàE«ù6‰:"5qäj›µEZ¿³ýflÓ|}ûÓÅݹÀ(zëÊp¨q8ê,µO$±|êD¡\XÇ«e&¾8¡º'ø@uÅØ—õ,bj|ò5~wê…F"gqäj›µEZ¿A§ ïì°À¡;·ºðíWaj’];jŸHDQwí+˜îÿ$ñK‹c�#þä½2¨î >X‰¨Koh$rG~¡¶Y[¤õ+øì0nß ÃÝ®E1ÒyµeEЙî†>?´žÆ1É®µO$˜JÞ†\L¨î >`>uÁäœ ~ó ‘Èdù…Úfm‘‰ºgVìYyl¸´h¶×áIxÓ‰}&”êžàƒq8̇Q«E•åaLÿÛt†F"gqäj›µE^¿/Ñ~î´Kƒ†F)#¾ßjå º'¸Bðclè)^’¨#”†Œ#¿PÛ¬-²úõ?‡ë¹Ibna¤]ƒÑV¨}”ƒêž ø€F"gqäj›µEV¿,¡¿þtÎûÓ…KWÝgø@ß»ó)|«pjŸFâýÌè|2–ô›T÷Á49ƒŒ#¿PÛ¬-rQ#MØBÑ £àhõL‡ ö‰Š¿WJÞFZwš÷q¢åiR…Õ=AðDÎ ãÈ/Ô6k‹¬~=7a¨ûÍ'±Ûl}íî¿ý©;ð†7ì¨}" àEãAlÖÐìp‡w6gáéåP%_$OÖQÝÐHä 2ŽüBm³¶°úzê› Qâ€óéâ.Ü<Á~¾n÷Š_ Œ¶¡*ïìBL*jŸH|°ë?CÝ`d=ÎÀm9J%" ¡‘Èdù…Úfmaõ[,üZf£n{2Þ¢º˜ü—¥Õí/$u:ƒñþë¨È+ÅõWø{‰CuO|@#‘3È8ò µÍÚ—¨Ã4<öŸÐï[¼Kí¿uº­ÈÊß­v7Šr2ÅzÚˆ<}&å÷L‚êž ø€F"gqäj›µ%>Q·jŸè~:¯P^¬ƒ®ô ˜a,Éñ»¨î ‚h$rG~¡¶Y[HÔ%þáa¼\¢ßéùýÉvT÷Á49ƒŒ#¿PÛ¬-$ê’M�ÛYèovÈbýÙíí¨+ýúæn8Ý“«®o)T÷Á4¦¿¿GŽY(Ì8J?ÊR]]³mXÛɃD]²Eµ8T/±Ë&T·$œ#“ý]A(D(,,Œ0´så_ÿúWø'¥°Z­QÛ†µ‘\X½’¨K&¢¨»vu\²XÏ�š+Áìx*~íB³§š=s¡dV Õ=AðDøñÇÄ‚´ŒŽŽ†‚PŠ?ÿüÙÙÙKÚ†µ‘\X½võx—³ð»nÂ|Çþ,‡=OH™…¯¯OgÃð£ÿj-ÚÇØÍጶŸB^bšAuO|@#‘"wëh—Ž"wëh—nm`u•À$\ö¨9¾Yš h­îðȉù<“Ù'uØ®ÉÆAÚ©#ˆ´€F"'DîÖÑ.?DîÖÑ.ÝÚÀêv–ΪmWô(Ée±Õ6 [ûw\¼l‚‰vê’GÀûƒÇð%x–êž ø€F"GÌïÖÑ.ÌïÖÑ.ÝÚ!Âè}œØºAüÞVèô èx2> "韄…rPÝÐHäˆùÝ:Ú¥ãùÝ:Ú¥[;–ƒÀ(ú[ͨ(ýæÛ=ðø§á°ÁxŽ_WŽ€Àx?Ú,5ÐëÏÁTß »çUBG­Ñ º'> ‘HÄ‚ïêKÞ†&#o­#Ÿºx¼÷Q™»Q¬›Läí†vw>²Ö¿-Oº Õ=AðD‚ ¸@& ?Fœÿ…Åpù¬Ó¼ íÉZ4wÜBc×Hø‡ä°ˆÄ~s4çо°;ÇvîzP·¿/’'ë¨î ‚h$ÁRa xZP]” ͺÈ9xޱ™ðŸÄ†„E$¯à4íÀËPÄqë Ü–£ÐÛ}â×AL'žU‚êž ø€F"A\°Tàs;p»öJ÷DUí8~BëO´S·2‚ð9¾ÆöÜížOÖΖoQ¶­¦ÿ>?wÀZy*á];ª{‚à‰ApÁ²Â |{¥j/Jȧn…Ìà™u?Ö‹õÂê&vy ÛëcIŒâ8`AÊC#‘ . o®>xqlèÇãÿcBC?;6\ ‹(L>À9c†eiÂ"ËsŒøh§Ž Ò‰ApLx¬ÐŠŸÙ÷äåm”·¾ˆ’Cö<F@ ÀÒ%Ÿêêj9r$TXÝÏÍÊÓ§OÃ?ED*!+HÈD™ç:ÊJ°X­¡ÀÏVk,ç"7¯õŽèùaIÔE#÷«ðzz¢ ãxˆLŸ7_(@7A(YA%ñ Àùt:üaž<ïéƒ7Q‹K$Èúœž%~FÂs'z¼ÉŒðEÌÃÁþçp¿”׳às fGöZ‡¢úÉž'DðØŽA{ü4ôzýb9sEÛ/À9#@ð4áÐÖ<ºõ4n‘™>o¾P€n‚P²‚J⹆ƒÚc8#5¸úS(+Ú“sJœÅžâÖ¡<l=Ô‰¼ã†í`1ŽŸ‘¶gÊva»é‘(½gà¹u[·Å-ÏëÃm¯çu¢Lð¶áìþ Ô÷NÐNÝŠEõdåï‚V«(ÇaœNHÔ1"wëh—Ž ”…¬ ’x¬Ðeåc÷ƒ»‡­˜%Q§ nXu9ÈßÙ6b9lÅà,‰ºd#e«ØÅ&QIcâñÚ¸Ô…ˆÜ­£]:‚P²‚J2ÖƒÎÇþð‚/Fð°sPœ‰T!e«ØÅ&QIÞ»M蚊8¬ž} Û%^…?&ÊüníÒ„òTïغÆ"Ž=üxl³Áñжæ”Ń»6;¦"šaöq.9&߈d"uñïb“¨‹„¿‡êeIÙt­£ÉY²ÌïÖÑ.A(YA%YEØ"U¸aÕfDi 6•·`”'é°ú] Ö.v`þ@ôÊ—=Oˆ°‹§QQû}øñÜ-â+úR”èÅ…ã]ø!ˆtƒ¬ ’xn ªªVbpÅrå t…Gc†m R…¶*=.KÛÆZ½nÊêÆ5NÒY‰( Ø(± ˆre)$ê"ðjhDöÕ™G¨ùø<DBVPI^ cðH'û)8kŽ@ß=þL(ƒCƒ#ÂZÀŒó"öê»Ä?%’L”ùûp¥ähÄï±ïËŠæ=”[ºáñË}ÅdÏ"x® ëoò î_@ÅÖ¼pB‚ Ò ²‚JâiFÕ)3¸·ÍUùÈÐÛ£îF©Âë5øMÚ6ú›«‘›¡‡'éHEYÐaÀ–ìR˜¤;¥V|¯ß‹meÿ¿¶á¶sT&ºIÔEÛ§N“{ݾhÑþ‚P3d•$–O]Æ.˜È_abùÔmB¡é—¤Ý$aõ»@à)ZΚp/"ÐsÐqGŸ…?É‘=Oˆˆ¢îZ Ì?vÃn·‡K7:,§QÙè¢E#A¤!d•ÄÓ½éº .+=xü|<¦38‘*ܸ¦7ã~·´mìp<ö`ÜOÓáZ°D” “puÝ€ÙÀ™˜Pßü¿%G®RHÔEçNø u|†ÆÔ "Ý +¨$IŒO- +°œ38‘*þÂÄø«Ÿ:‘€gK®ÂE¢;éÈD™0^ó>d®Ó #w>?Pˆ­EaGI-z}ÑCq¨‹$ÚNÝÿ½ˆ’MïÃà˜ ÿAéYA%Y…38‘*|è¿RŠlM”¶Y·¹åW`÷D}Īau;à²`§æ-º0& è€Ý€b« 3N3>³ F­wéó#–OÝF了Á™Õö^Ê‹L¼BVPAVã N¤ˆ †-9(5]•µõ{=´ÛÊ`f_ßvbœ'iHEYhl¬Û‹{îvøœ¨‚ÏþOĸD$}ž`°ºo`é“ß~õŒø< ¼ÈÁ+d•dÎàDª˜†§å<ÎÝóÈEµ(öŒGnÀþH$™({õ3 y;çR‚‰ìzd½û.²4±s“¨[ЬAª;Ê‹L¼BVPIÃh¯¿gÔÐÓxîì£ãWÅE]û÷°9'Ÿ¥<ÿ=tüšT˜(zê שXÇžüçK#,ö—8 ÈÊÚ‰Š«à‹Qé$êRåE&^!+¨ ¡#¦ ÇÐ:¹(ÜWÖ³ð»®áè'±É5$tüš²Ö‘ð7D„ Á°äðÀv´æÞ vI‚‰²ââ3’¨K”™ x…¬ ‚°#¥Íe­X4ƒÌæ’DäM ³j¶×=^â”L¬1;ô›å‚›‹6/ˆ<ÓÕÈØ^‡'Ô8ID]² Â{çLF, gÃvÉ‘@¬EÊ‹L¼BVPA„8PÙŽ…ÀÂs4Ì…n>œ‰0ŒÆ’Í”]B XÝ8ƒö…íˆ F›à-Ý|8“�^4–b=e—HL¨K&±n¿ŠeÓq´Ž®ö€ò"¯TaÝgKQ^{Ý÷ÑP½ ™ë¶â€Á}ÕiT• CS@y`!ˆÉn#ö–‹–Î.´5œÂŽÌõØtà.êOáLÕäg¼…\Ê›4˜Ø Q—LDQg«DéùËñuçKó‘Wv Ž‘ÕÖ4åE&^!+¨4gè4GQÖ¬Ë(DyÈ<ßà}Ô¾B}ç³UOrD¢LÃÓY‹ãEÙЬۄüòïàô!øp¯î+ê;á¡ ÄIƒD]²àÆKYmË£o°có§°º¦ÃߋʋL¼BV . Q— 𶱿ür°(/2Að YA%ñÞĉ/îÃm³ç•Vã%Üœ¤Û•Šð 7NœC[Ôù“pZ¿Aݽ˜á5ˆøa€D]òüÃ°ßø$Øt Íöaøê·±ò"{ü{ ‚H²‚Jâ±B»n tæž(â@@ÀÛ‚Š¼C°ºüá暑íFd"S÷mô€­;Pb¤ãñ$ÁDYWwqEÛw0­PŒ¨[ŠàëY·E¬›LäÁü\i?BIT›³RbäEG‚ßO£ ”„¬ ’„DÝ\¼u g/E3²,¤IÞ1= Ç®#RuYØ}цKg¿‹"ìæBš¼õŽ Njœ¤ eÂs´U¾ KèŸó!´Ú]ÈÏ…ɉ;1ýIÔEò\–½ÐhŠ`è%—v}¬ž 8kªaqýþ¹$°ãlÉüíp‚ ”€¬ ’„D]±hd§á뽂ʳwà’f…8ÙB!MaNÔi­îÐnG}¥·]S’݉¹'È1<iHEÙl¿Û4Bßþtqw.0ŠÞº2j޲KD¢n)SpÞú¸C6/ê¼âK ·¯öžªýWJ‘­‰ô©ce#r˯ÀNÙVBÈ *É‚¨cª ( »zìßQŠ/-wÐiïÀ-Ãd®{í/ç~žH!‹¢ŽÁ„]ÝþÝØÿ¥-ÑyË�- qRÑ& M$‚T”&¼³ FÜè‹aj’]!éóCÀ+‡yÛjàœaõÄD]ÞÍÙM"qêBÙVrPjº* •"–ïõÐn+ƒ™}}Û‰qRu‘rÈ *‰·Åšm¨î ¯j™]7êË ‘ZõÆò·#Öžgh,þ¶Vw`r¾þÀ^ ù±m4±ýíˆU!e‚Ïãö½0ÜíZtÆï¼ƒÚ²"èLwCŸZOã˜d׎D]4XXžKøRÿìc“p UT‰«ÎDÒÛ‰gËyœ»ç‘ÿ¢Ø3¹oø#A©‡¬ ¢às;pÛÖÌ:ÎÂ?þÏÇý ^"1DísÃq» ž™ð÷æüãxþ|œnú%™¨{fÅžõ‘G{K‹F’¦}&–"¿ýz­No‚kÿ6Q.E7ÏE¿„"$‚ ä¢ì%ÚÏ}ƒöai€Û(eÄ· PHÔ-eñö«(€³ò±[û!r2²°Çòò¥J„Ž_³Q¶YD"œ“q‚�¶£å0÷&²HÄj +HÈD™o�½CS·¾gð¼§/z\Gu‘LãIÝnh4ÛQÝ2�_Øÿ0$ºW¢ñÅ*÷ëvè7Cë¤äR—§æ‘7w3<C²‹JDj +HÈD™çjá ;2\(§PV´&用žâÖ¡<l=Ô´àº@¢.’ÈÛ¯óÌÀm9ºúÛ¯Â0œAûÔü_:wü-Ý|8“�^4–b=Ý 'ˆ”CV .‹:+t¡ãB-´²²‡­˜%Q·Ì Ôcç;ga®$,e kCéêwêD7ÙmÄÞòoÑÒÙ…¶†SØÁn‚8‡‹¢ð>Su�ùo!—’ûDÊ!+HÈDÙX:Ç—I…D]4f0ÖÛcõ×h|5'ꎅ±m8ñ˵8^” ͺMÈ/ÿN_‚o�÷꾂¡¾3fh‚ Ö²‚ApL”yÀÖ5áhïÇc› Žù]§HÔÅ@’nÍ`nD瓱A¼BV .‰²P`îhaLÞFy단·*eÏsøûp¥äh¤u¨y'Zž& ìžáƉshóFû&á´~ƒº{_“ €¬ A\ ežFœ¨0£Aš±àŠ%%zØ’¤ÿHÔEÂ.,Äf­Íwøöë,ü#=°Jàök(ÛJfìàÛZ+v Ä:H;‚‘bÈ Á2QöjƒDFR›‚³¦GôÄl$ê"aiÁ>CÝàtøó< Þ~ §ÐÛ}цKg¿‹"ìæBš¼õŽ NJ¸B)…¬ A\ ß©kFÕ)4ì~„ÆŠ<d„s¿FB¢.’¿à²T ºý…¤¾f0Þy%°¸þ /^ó"³àÆõ•FÜvMIvOçBœl &‘rÈ ÁrQçNS�}÷Xø‡äÈž'æð;Q§ÛЬü]Ðjw£('S¬§ÈÓw-æ4Ž›EQÇ`®nÿnìÿÒ‚–·è¼e€–…8©hCô=U‚ Ö ²‚ApL”ynÂ`¾¿˜ÌŸ•Ž+¨¬l³¡2HÔEGð»ÐyÕ€òbt¥_ÀÔøc …y†Æâ¿akuÇ¢0 ü{ý1äghÄvÐÄö·#bM!+HÈDYTŸºi Ö• ¤q˜.J¬ˆ ¼w®áÁd„¸š} Û%^…?Æ€€Ï Çí&tzäm$øÇñüù8ü‰hF‚ V YA‚ ¸àµ;uÝ-0—lŃ#"'ì$ê" Àc-ÕË’²é8ZGãÜI›ñ hJübûÜë§„ýÁd ‚à&6ˆáS§É9ŠXf„(Èž'DDQg«DéùË‹aa¬—q¾4ye—à‰óƒàFÓW×0àû†-¬Ûb€ƒNX ‚+È Á2Qæ¹ £¥G~ûÕó2k-:$ê"àÆKY•á{ô vlþVWd¨“×Ã.E\:±ïg¾‹’+}ˆ/‘Ak YA‚ ¸@&Ê„ Áø÷HÔ­„�¼íFì/¿L" !+H$*ÊHÔEC@`¼m–èõç`ªo†ÝóŠ|á"M!+H¨K>‚÷>*s7Šu“‰œ¢ÝÐîÎGÖúDs¿Á+d ‚àuÉÆ~s4çо°;ÇvîX°àŠr¿Á+d ‚àuÉæœ¦ØaŠ8n•æ~ bj|29»vn˜ïÃþHDê!+H¨K6Aø_cûNîvÏÇûëFgË·(ÛV ÓŠŸ;`­<•À®Ý,üžÜ®= mö¬ÓZá ÿ A©‡¬ A\@¢.ÙÌà™u?Ö‹õÂê&vy Ûë‹ò,cxÒa…ñ`2Øß‘Q€ƒ† 8£o"QG BV .`#}>-™|€sÆ6 ËâýE–çñűS7;�Ë®Íb}o@VÑ稹ñ3<~& “x”KĪ +H¨K6AŒ;ïÂb¹ [§3ì8v°¶»pxã<¼È|î×Zœ,þ‡ŒVtô{áHÔ„Ò$‚ HÔ%›YL¶žÀ{'nÁåbæ‰{27#¿´ %:#º}q¸Æ`ãO:`5Cqq)Š+éø• „¬ A\@¢.ÙLÁa8ŠºÁi@xÖò·±^w®À_’Û¯ÉCðÀF·_ BQÈ Á$ê’Í4žÔEuk?ZN#Oó6Ê[_̉¯Ã•qßxey_ë…±m3¾§èsû „âÞ ÁaïÁàøLø' ‚P ²‚Ap‰ºäĘY·E¬›È­¼ïôïh½pzýØÇâÉýÊânl(:‰ÚšÓ(ýðoX§)Ä?.…=™šPݯËÜsïDDL<‚ R YA‚ ¸€DÝðadÄ—à†gh,ÎAió¢Rü u…ƒ¶áG4~²ú[¿`Ðã»ÿôÇà"UGŠAV . QÇ3nXµùs~x;ôÐZÛa­¶Â½ âFÑ^uvºþJŠAV . QÇ3,åØÇ¨h ‹ºwPÕéA¿ù3ìÿ² Ö+¸xr¶hÃdø ‚ RYA‚ ¸€Dϸl8ZÝ ïh Ê6Âä|Á×[ÕGÈÒdâÝœw¡³ºÃ?O„$‚ HÔñN>§ Õ¥pâê#ø"|ç‚ý6|ÝNMBIÈ Á$ê‚ ƒ¬ A\@¢Ž "1È ÁL”%Z‚ ÞdÈ ¡ H´A,YI‚ T‰:^˜@ŸÓƒÙð§y„çNôx)HA( YI‚ T‰:^pÃv°ÇÏè¡×/–3e»°Ýô3âÿ<·ŽbëÖ£¸å¡|°‘JÈJ¡ HÔñ‚V]òwk¡ÕF”ÃV Î’¨#¥ +I„* QÇ #xØ9ˆ`øAü@V’ U@¢Ž'f0Þß‹éôzê›ÿ?ÒËŽ ˆTCV’ U@¢Žð¶U#W³ë2rP¤Õbw~ÖçžD‹g:ü3A(YI‚ T‰:N˜íƒyÛ&èÿ+Ù›Áxo=öºéÂHd% ‚P$ê8!ø¦w>†Åq B‚E÷%ì,ª‰ð ãÍ}Ÿ ˆ”AV’ U@¢Ž„q8Œ:ì4ÜB·Ý{¨t ¥¶Ût&ü—}~Ø€ÊcM´kG)†¬$Aª€D'.X÷l µÇ²E³uOÈÇŽ R YI‚ T Ìb²ýŒíCðx<Ë”—ðh«Ž R YI‚ T‰:Ž‚I°o•$B¨#‚X²’A¨uAËCV’ U@¢Ž byÈJ¡ HÔñ„€Àx?Ú,5Ðë07váÉ8%ï'¥!+I„* QÇ üýWP’½!Ô&óECiÂBqÈJ¡ HÔq‚0ŒÆ’<h 7ápO‚%€àÇH¯‡Sš0‚P²’A¨uœ°C¿³ƒ‘âMš&Œ E +I„* QÇ Â ,ŸžEû¨Ä‡.0Šþ*‘·ËíÔ„b•$B¨ãæSWݦläïÖB«ý9¬ÓBß=*þ)AJAV’ U@¢Ž'fáwwâªáе{Qz¢½/çüë‚P ²’A¨u¼àÁ«]˜ŒØ’›}Ü„KŽÉð'‚ ”€¬$Aª€D/¸aÕf„ÚC^4ØTÞ‚Q:%Å +I„* QÇ nØÊÊqÞÒ�«Õ:W,F”梬þgŒ¨#Å +I„* QÇ SvG\ˆ&ð¨F‹Í{àš  ˆ”CV’ U@¢Žc„çh?{åõ=ðÑNA(YI‚ T‰:‚ ˆå!+I„* QG±<d% ‚P$ê‚ –‡¬$Aª€D/xÐÒìD0ü):Sèiî€7ü‰ ˆÔ@V’ U@¢Žܰ–hQvF½>F9sE%6Qþ‘JÈJ¡ HÔñB¬àÃEk%QG)†¬$A\Òßß¿ÜV,L(Ì}ûöíðO©ÇëævLHC—x¬(ÖÛs¿ìГ¨#ˆTC¢Ž .]ºû.LØJñ&Æ_Ƀ“¨#. QG·üë_ÿZ"è²³³ñ矆‚P‘>´>Âúìèëü}.øðt'ªö‘¨#ˆTC¢Ž n‰¶[G»t|!øÇñÜ㇕þaØë#›|ê"å¨#‚k¤»u´KÇXMøÀÖÜ{ÿÈâq,A)DA\#Ý­£]:pæ·Á $¯Á$ê‚à¶[G»t¼ÀBšd"#ÿŒ6;<þÙð÷ ‚PuAD¸qÍÔˆ÷#´Öž„6÷C”™o£Çq#– ˆ”C¢Ž ‚ˆ©Ov} *Ì_¡¬à}hOÖ¢µ”|éB!HÔA«„‰º X=¢Œ LÂõ°·f [§‡Õñ‚ÄA¤uAÄ*a¢î8,ýè¶q0ÓÜ¥–Œ¼Ð/ÇDJ!QGAÄÁ~jïÇ_‚#λ0h7‡o'o@VÑ稹a‡ËG{t¡$ê‚ ˆ8pÃZü>òs2çÄœæí/Ýíü´3GŠB¢Ž ‚ˆƒpH“ÜýÐ7tàÉøLøûA( ‰:‚ "ìø¬;Áeƒûñ¸³cáOA¤uAð‡o�ΧÓáóÌàyO9ß+Îo¸°ã|Ó` eøˆZ. ¬ü:å~%ˆC¢Ž þð\ÃAí1œÑë¡_(§PV´&ç <Å­CyØz¨ y)†¿f„/G,S(¡?A¤uAð‡Ç ]V>vkµÐÊʶ`–D‚¸qÍhEŸÇOÌÒ‹ñ&‰:‚H1$ê‚à±t>ö‡?|1…a÷èkR‚ðÒýÔ‚‘ZHÔÁÞ°uE?Ûlp¼¢­9eñ ¥Ù‰ùDaÑ™BOs¼áOA¤uAð‡Ç m4?­uo£¼õ%ŽW7¬%Z”‘ú;F”3GPTb£ãW‚H1$ê‚àÏ TUÕÊoT^9]áQÔ;¼$ê….J¯¨#‚?^ cðÈ ¶SpÖ¾›¢Ÿ)‹(êöéÑ9½Œ´¼h5ß&QG)†DAüáiFÕ)¿Qév¢¹*z;(³¨’ˆ¢®Ø�û²ÄÔø$µA¤uAðG,ŸºŒ]09&Ã?D(ÃJDAJ@¢Ž þð4Aoºƒn»ö…ÒƒÇÏÇá_6=±ö0Ÿºæ‚@Á$ê‚àÀ$Ƨ–ÍØ(± бž¢ŒÃa>Œ‚\-ª,á!‘MÜ@¢Ž þð÷áJÉ;ÐD;‚Õ¼‡rK7<þÙðŠ ø16ô/IÔ7¨#‚;‚¶d—‘4þ{ý^l+û·øµ ·¯Ëj@ñfA¢Ž þ<EËYîyå­AÇi|þDAH!QG†Ñ^N_´#Öi<wöÑñ+AD$ê‚àŽÐñë†ch\nB Î7: ¿ëŽ~R‹^ßòH ‚ Þ$HÔÁ»›ËZ±‘.�ϵK‘7ΪmØ^÷X”xAƒDAÜ!¼hÄÊv,DBž£ù`.tóáL„a4–l¦ìAHÔÁÂ(ºÏ–¢¼ö:»ï£¡z2×mŃ úªÓ¨*-@†¦€òÀAH QGŸž¡Ó|EY°.£åWÁ'á¼:ÃW¨ï|F»tAHÔAA¤$ê‚àïMœøâ>¼Ñ¢ ¿rÂj¼„{ƒ“|˜ B‰:‚ øÃc…vÝèÌ=ð-QnÞTä‚Õå ‚ QG„DÝ\¼u g/Ev,¤IÞ1= Ç®#‚ HÔÁ!QW «g¾Þ+¨<{.i‰Pˆ“-Ò„ B‰:‚ øcAÔ1É…]=öï(Å—–;è´wà–a2×½ƒŠö—s?OA¨#‚C¼(ÖlCuçhø2ó£ëF}y!2֭ú˜þvAo.$ê‚à�|nnÛºà‘ ·YøÇ_àù¸Ÿn¾AD@¢Ž ‚ " QGA‘¨#‚ ‚HHÔAA¤$ê‚ ‚ Ò�uAAi�‰:‚ ‚ ˆ4€DAAD@¢Ž ‚ " QGA‘¨#‚ ‚HHÔAA¤$ê‚ ‚ Ò�uAAi�‰:‚ ‚ ˆ4€DAAD@¢Ž ‚ " QGA‘¨#‚ ‚P=Àÿ,uÖà‡Åw����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-1a.png��������������������������������������������0000664�0000000�0000000�00000035536�15030617045�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ß���ª���uz#Ÿ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��:óIDATx^íÿ‹$Õ¹ÿ÷ñ’˜äv ¿dÀ{Å5Œ .L“¹Ñ%ÉÆ|1 ŽÊx A\³XpÊ!&캰‰×&ãÂAûÂq¥ïÂe%h’p% rÛp¯ ÃU–¥y>õ>]Õ]]ótw®êêSÕï¼§»êéª3çœ}÷3OsH!„B!™@óM!„BHFÐ|B!„’4ß„B!„dÍ7!„B!AóM!„BHFÐ|B!„’4ß„B!„dÍ7!„B!AóM!„BHFX›ïC‡Q5…!„B¦2ß„äWú+Ç !„B�Í7)44ß„Bq šoRhh¾ !„â4ߤÐÐ|B!Ä%h¾S¤ÛiÉ¥zUÊ+uiwýÉ\¡ù&„BˆKÐ|§EwGê+%Ó>‡¬ÍwWö®¼*Wö"'íýIWÞ÷ Ó@óM!„— ùN“À€Ûšïî;ÒX?-Í!ó}Mv²Ñ¤ùNÍ7!„B\‚æ;UÞ—fuÙÒ|ïÉN}MJ¥ùîÊþΖTJËR¥ùNÍ÷bƒv§¨¸"„, ùîv¤ué¢Ô*+žÑ}[Ú )›‰Øû¹±#ûþa ÛÙ–­êJ¢.U6år{ÏŒ0ßøŒ­ª·$åêiu®yoøÆÛgT:!ÿïOuÏx‡^;2á#c ´Ÿ ¸r‹FíŽüq"!F§ÓI$ÄxõÕW 1ž~úéDBŒo}ë[‰…8Ÿÿüç 1Ò!„dõlS¬ êci×ùïa©ÔS|XÖïˆñÑ( Y[–rm»gÈ÷·¥VŽ–˜(æ»»+Íõ¾‘ïv®Êfåpèÿ†2ßÞqíº¬„M7˜‹Dq¥¿òöùF»#†f¨m„š¡¶bh†ÚFˆ¡j!†f¦m…8š¡¶b¤)BÉëÙ¦xTWöšžÑŽ]˜í±5õÜGBÇøF{È44ß0ѫզg碟ß|OŽE¢¸Ò_ùû|H£ÝC3Ô6B ÍPÛ14Cm#ÄÐ µC3Ó¶BÍPÛ1Ò!„dõlS¼ j” ²âǤÞþØ te¿}E^®U¼s¼ {¬ùgÖ£*ÉJ}Ç‹×|ljE¢ }\À•ëX4ÒhwÄÐ µC3Ô6B ÍPÛ14Cm#ÄÐÌ´­G3Ô6BŒ4E!Y`=Ûo‚Šo¾ƒšïR¥&ÖßäòÄÌwïçÒP¶:J\ó'‰âJå?ìó!vG ÍPÛ14Cm#ÄÐ µC3Ô6B ÍLÛ q4Cm#ÄHS„’Ö³Mñ&¨ æ;0ŦÆ{iPóí8™ïò¦´öÆz˜¸æ;N,Å•þÊØçC펚¡¶bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦!$ ¬g›âMP£Ìw8Ó¬Ç|&ZYe¿%[¶9®ùŽ‹Dq¥¿òöùF»#†f¨m„š¡¶bh†ÚFˆ¡j!†f¦m…8š¡¶b¤)BÉëÙ¦xT`¬aj·dÇd•¯I§ù´”K?‘Æno¿žñ-ù™oïýÖ©bµ˜æÝ¿I³õÁ`”Ðyý7C¼Qÿ˜àóQÞò²ÿ—ÿLø^Sª%¿–{ÿ­^ü‰±H´ ¸r‹F펚¡¶bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦!$ ¬g›âMPƒ¬öñú–lÀ<{÷xp ïКÜåªlµvåCsž¿¸1Ëá‰<ô æÐÚÜZæú-©cÉÀRE6·;~{°Üaeóªt‚´ö¤Xd´‘ ¸r‹F펚¡¶bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦!$ ¬g›âMP£ÊNHp¥¿òöƒ´ÛmùàƒüŸfC펚¡¶bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦!$ ¬g›âMP4ßEÆ•þÊØÒh4L»<üðÃòâ‹/3ž6i´;bh†ÚFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!Fš"„,°žmŠ7A]“ÝÆOLyG7KR\é¯ü‡ý }ôQßôºýöÛå™gž‘«W¯¦’O£ÝC3Ô6B ÍPÛ14Cm#ÄÐ µC3Ó¶BÍPÛ1Ò!„dõlS¬ Ê_¤?ùr³š¢áJå?ì:Ï=÷\hüTÒ¬8b$14Cm#ÄÐ µC3Ô6B ÍPÛ143m+ÄÑ µ#MBHXÏ6œ Hžp¥¿rÜèüõ¯íŸIš&+Žó’‚š¡¶bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦!$ ¬gNP$O¸Ò_9nFS˜ÅɊ㸤 †f¨m„š¡¶bh†ÚFˆ¡j!†f¦m…8š¡¶b¤)BÉëنɮôWŽ›ÑüÛ¿ý[ßüL«QYq¼—ÄÐ µC3Ô6B ÍPÛ14Cm#ÄÐÌ´­G3Ô6BŒ4E!Y`=Ûp‚"y"þþÇ™r[÷ÝwŸ©# 8^K bh†ÚFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!Fš"„, ù&…Æ•þÊq3š'NôÍÏ4Âù¯¿þº¼÷Þ{~Äx?)ˆ¡j!†f¨m„š¡¶bh†ÚFˆ¡™i[!Žf¨m„ijQÑÚ‚¢Òþ*yï½÷šÿ¿çž{ä«_ýªùoÿ÷‚÷µó]×´XŸ™äÃÜd_ZµòÞ9R?¦¯¥š´®_—Nc]ßÓR­%×êzKjK¡÷Ê›Ò2[ÚGØoËåZEÌŽšžp=¯ÕËr'×[5Y >ÇWÿ:|†Y—Fçãáû0÷ö®4*Kƒ×†T–Zkßæ¸Fpå:\êáþ4YAvkb¹Âqàø¤ †f¨m„š¡¶bh†ÚFˆ¡j!†f¦m…8š¡¶b¤©Ee‘ï$ÏÜ ùqöìYY[[3}éÁ”ãÇËo~óy饗Œþüç?ËþçéßÿýßûïC8çóÃÏ~ö3ÙÚÚŠ5×σ$ãÆúÌbR˜ëʉìv.ËÆÊãÒØ½æ¿sý¸Tïú?ûÀL/æ{ð>Lmß(w²5ÍØŽ~õŒ4ž_?¸¹O÷i¬?.õжñÝ]in¬0Ïqº íúp_ë é˜`¾½¶èàˆp[ážOÒ|Ç ˜ã&9˜´Ñ6“4.»=œ›ÄÐ µC3Ô6B ÍPÛ14Cm#Ĉéi„8š¡¶b¤©Ee‘ïÄF†8l´aš1¿ÀPkóß4úßÿý_¦†Ÿ…Ï|å•WRÙ" ’Œë3‹9HšïÞΗ'e¥¶í½ Âæ:tüTæûlÈL·gÂ7<“»ÛO~÷>w5ÅõÆi¾çO1ÇMr¾ò•¯˜¶‰Ê&»=ÄJ bhÿ8Ø14Cm#Ĉši[!†f¨m„š™¶âh†ÚFˆ‘¦•E¾w2$<`xÃf†8M£WÈžÃèßvÛm&+ŽìçI’qc}f1©f¾=<SZ©F3\V-·°0ßÝ©¯ž”æì56úY—zûãÞ{30´4ßó§˜ã&˜Ôãiúìö8ÒhwÄÐþ!°bh†ÚFˆ¡j!†f¨m„š™¶âh†ÚFˆ‘¦•E¾wrÌÁÈn£cõ…^0ÆÙhm~ËZ¸”¬à‹�Œø¼²áIÆõ™Å¤qÍ·’ùÁ8ÃÛmoÉZ?£Þûy½ŸéŽÚh½µ}õÁk ›i‰æ;Ìä{w Wúk1ÇM2°FwÙíq¤Ñý`#ÄÐ µC3Ô6B ÍPÛ1¢Fz!Žf¨m„ijQYä{'=4ÃýöÛo«ó™KBÙpôa˜ð,kÓŒë3‹9HuCÙm×åhß”g¶'1Ú|G·´÷UÚð3á£ËN&f°GÇ|¯U›ª0ïÕ¤¯Ñ|§…+×±h¤ÑMú6B ÍPÛ14Cm#ÄÐ µ#j¤§âh†ÚFˆ‘¦•E¾÷EÙbÖ¼nMÿýßÿ-§N2™ðF£áßálI2n¬Ï,æ U åþ[R_«N~àr#2j¼7"F×îg{5à`[j•“Ò诶p̆ž…ù6e0k²¹Ýñ ÿžìÔ×GÔÓ|Oÿq›i´;bh“½C3Ô6B ÍPÛ14Cm#Ĉéi„8š¡¶b¤©Ee‘ï}A­4j¦ñ{GÖ%%Ú¼•G!Žr”‡zhæ¥(IÆõ™Å¤0“S,5h–àóߣ;jy¿á÷°¬^ŽÝ_Í$²Ôà¡C+R­7¥­-K8íZ >¿G·sU6+‡ý÷Keóªt†>Jk'·—¸Npå:4Ú1´IÞFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!FšZTùÞ”• Ì™a˜SÔL»RÃ= !‹{åC™IÆõ™¤$O¸Ò_9næCíŽÚän#ÄÐ µC3Ô6B ÍPÛ143m+ÄÑ µ#M-*‹|ïE™_<Ä.+Ay†6GQÈ‚///›ÒšYdÜXŸÉAJò„+ý•ãf>¤ÑMì6B ÍPÛ14Cm#ÄÐ µ#j¤§âh†ÚFˆ‘¦•E¾÷"‚lïéÓ§ÍïuÐE*+±jØ‘éGÖ?m’Œë39HIžp¥¿rÜ̇4Ú1´IÝFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!FšZTùÞ‹B´¬ã½Èe%6B;Ì€'7Ögr:�–@ôÿ±­ášîEmá®\Ç¢‘F»#†6¡Û14Cm#Ĉši[!†f¨m„š™¶âh†ÚFˆ‘¦•E¾÷<.+AyEžW+™µfaÀ“Œë39HIžp¥¿rÜ̇4Ú1´ÉÜFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!FšZTùÞóÖ±FYI°ã䢗•Ø(0àiÕ€'7Ögr’<áJ帙i´;bh¹C3Ô6B ÍPÛ14Cm#ÄÐÌ´­G3Ô6BŒ4µ¨áÞÛí¶*lâ³~m»!&!0Üá:V‚L¼KyâzðW‚4VAI2n¬Ï\ä ŠäWú+ÇÍ|H£ÝC›Äm„š¡¶bh†ÚFˆ¡j!†f¦m…8š¡¶b¤©E%÷ ㌠T`BŸ|òÉ¡ß2šÇW³ü7ÎC]tp2ÈXóúìÙ³&# S†úéyƒkÀõ„3Ü.n˜Z\Úñ‘Gé·ï]wÝ%7ß|sÿgè»ßý®<úè£ráÂ…¹l[UPÐ’~ ýL‹õ™I>Œ¬q¥¿rÜ̇4Ú1´ ÜFˆ¡j!†f¨m„š¡¶bhfÚVˆ£j!FšZT\¼÷ Û 3‡šf\#Ì3êšaò` Ò0mˆa|¼ôÒKÆäýÆŸë˜u¶fõÛø<C\C°Ž«†mè[o½Õ˜ìÿøÇòóŸÿ\~ûÛßš/IÑù'Þ?sæŒ9öرc¦­¿÷½ïɹsçÌïBû¬´…¶Å—¸$$7Ögº8H …+ý•ãf> Ý)*®Wî7œí…Ù†Y›ÇC„0¼)‡!Çõຶ¶¶L>Iv÷‰¸Wdݳϙ×ýÚíòÌ3Ϙ6Y__7f:0ÖÓ 1žxâ 9räˆÜ}÷Ýrþüù™–«à÷‹òü¦%ɸ±>Ó•AJH\é¯7„W™÷ü„ºìèvç.f{q]ȼãKAGV×þûßÿÞ˜iMxÇ|˜íp?/ßà:aºQF‚¬õþðÕH'Ú ¦ŸóÔSOÍ,ŽÏÂïdZ’Œë3ñaEM'BqyÍM(M€ù‘…rµ¼bœ¥†9DÉÊ8á˜Y™ÈY ¿”—ÜrË-Æ+)ISø˜üú§2Ÿ;‹U]Ð÷¦}ø2ɸ™Ê|’\é¯7„WÉz~Ÿúaºñd^ é¢_.î¿ÿ~S›FyÉ4‚ ÿÕ¯~eJR¾öµ¯Éo¼¡^ë4‚¡Ÿ6ûMóMÈh¾ !d<YÍOxˆ5Ó¨µ…©ÒÌåŽÞ|óM“íF-vÔÏK Çj)iÕÆ#ûÒ'[h¾ Í7!„Œ'‹ù Æ,¢Ö9/5΋,<ðøÏÿüÏfUÍÏSA9 ú-®3i¹bN³òI’qc}&MÉ®ôWŽBˆ«Ìz~ Œ7¦ÔÌåŽ`d{ì1¹çž{fö@eZÂõ}ûÛß6K&©Ç—AŒôS’Œë3i"Hžp¥¿rÜB\eÖóVú ñv_A}7ÖëÎê¡Ê4„Rdé/]º¤ÞWáùÛÒšoBF@óM!ã™åü„o›<®d²Hƒ¯¨ïF9‡fp]–'¼óÎ;å—¿ü¥z“„iÐWm ù&d4ß„2žYÍOÈ$âáJÖx»-¬‚>€ ²fló"dëQ.3Ç—ü…Ɔ$ãÆúLš’'\é¯7óíNQd<³j#,á†Md4³C¹!¬ß’ dŽ5C›7üâÅ‹êýŽþ2c;’Œë39‘‘<áJ帙lwÂ>0™Y´6.ÁnšÑ¡Ü2Ä0ªE1Þp?øB¥µû%ôW›í擌ë39‘‘<áJ帙lwÂ>0™Y´þ„Ϭ·›B–÷?ø1Þyz°ÒFX"ñðáÃV%Ox(øõ×_÷{ðd’Œë3c"Û“v³!õꪬÔw¤ë¿*ûÛR+/ËZãÁkÎó¡´j«RZkÈn~.:5\é¯4�óíNØ&“v}ðÁrÛm·ñ!K¬h’å6ñóîuìZ;hÂC—ÈšÇ%ɸ±>³øYWöšRòîóСÍwÎq¥¿Ò�̶;a˜LÚm„ìá©S§TƒCÍOX Ûµ+g)¬޾÷K ÚÇæ¡Ë$ãÆúÌE™Èºíº¬DÍ7É®ô×E7®Áv'ì“I»Îž=kÌfp¨ù(x°ÒÅ+g)”ÖÄÝ€ÇvÅ“$ãÆúÌE™Èh¾‹+ý•`>°Ý ûÀdÒn#ÍàÌ[(»Àµ¡Ä�†´^¯ËSO=evu|ä‘G䡇: ”/à}‹sp.b@®—Ö æùÑG-䃕q„uËÏ;§¶MT4ßó`¿-—k•^¹Iùi¹Ü<1ßפÓzu¸Ü;§Ùx^ªåJ½ý?Ò¾¼)•ÊUV¤ÚØ‘}ÔŽ÷_;,•Í«ÒròˆyÁ;¿dÚõP¹*[­Žÿy¨;Ij•eïóþ&»ýãÆév®Êfå°ÿ¹—Ýæó²Õþد%—êU)¯Ô¥=ôÙákë}v½Ùö®Ù÷örÍ{ÿ˜ÔwþKZ[^ WªÈævpÀ»‡ís½8å i´ß–ææK‘Ïš®ô×ÂŽÇa»öɤÝFO>ù¤12šÁÉR0žØõæùî»ï6÷y×]w™-ÉQzc¡.ø·¿ýíX!cs-"&ôÝï~×˜Ü ë?ïûÇ—|QÊLŠ^ß=Jø½á÷¯µQTø¡ïÆ%ɸ±>3íAêÝw¤±¶,åË=S»ÿ–lUÊ‘¾ùÖêÀß—fuÙxžé­¿*­Î5/Ö®47VŒI}öù-¹ÔÞó^“ÝÆO¼ó=#ë›bcZ›§¥RmH{ßûÐnG¶7aþqÌÿ }^yíYÙ2†W‰ÓÝ‘úêºgñ9sY6Ì—ïý½¦Ts=d¾ý:ðÊ–ìà³=#¾S_óâöëÙÃ÷V–µÚEÙ6÷†vòL~(þB°Úƒ{zZ1úóÕþZÈq“Øî„}`2i·Ñ<Í7 ÷ùóçåk_ûšÜ|óÍý‡îfõ L:Ì9¶g_]]5í Ó_­VͺÓYµ 6ÍÁç;vl!³Ýaáw‚¿^híÍw¦ø†6bµ²“ƒ¯},íú1¯M¦:0êËRm¾ï¿¦œkLóIiî…>Ô7Ë¥jÓ³Ã1¯ç,ýD»ž96àó™oó9+¥†yeèšo¸Kþ5i÷}­w¯KCszq˜ù>@ñÆM>`»öɤÝFó0ß0ÝÏ<óLßp»RÛ ó ókúÆ7¾aÚÿ¬tšm„L7 >L÷‘#G®¶{”`¾ñW ­Í¢¢ùÎßœ†7 –ñM`¾{?ûYé¨|£ës]ªHíå+½,z˜æÛ¿æ¾Éˆ^wó\÷…¡R“—Ãe+Ž€ötW®Ã5~øayî¹çÌ6Ô}ô‘ÿjz°Ý ûÀdÒn£,k¾aºQ Ó¬³ëå¸>c”‚À$c-jdÆã> 7ÎÃf9ø"㳩}î¢ê¿ø…©é×Ú/*ôYÖ|gE$ÛËøNm¾ýcàaâ]ƒ÷Z¿ææ=¨7÷9`¾£îñã™ï¡šo|¾©û·ä|q¥¿nܤþ!êõÛžNœ8a–)Ã:ÁiÀv'ì“I»NŸ>É;(¯È{M3–ÃAüÞ÷¾g2â¨?ÐÚâxüÞPZ‚/ˆ£Å_t¡oÄÝjžë|gÉ\ÌwðóªÔZöPˆw xx³!5cƒÚmQ™ï¡kîÑ‹m—ùîÓíH«4=U —ÁÌWúkáÆMJÀd£m4Ýwß}òâ‹/𬸴 Îlè=7qèк4:×ý×à ñó܈w/å§¥‰g&"Ä9&{º²ßnJ½ºâÿ¢c_¶Ÿ—ê ž ) ž“"Î1Ù1»>PÒn£W^yÅÍà¤%Ôucé¼¢dzažƒšñàNìýèG}Áhãuò’xÂ_ð¥EëCQ¡Ï¢ïÆ%ɸ±>³x™ž Žg|§7ßCå"—Û¡r ïõ­Wã—ì]•­KáMz÷Óÿ2qÀ|ëq½W{×]Þ”–)]‰c¾½s®¼$—ÂFÛ|™¾÷yâJ¥ JOÐ>“„zΫW¯ZeÅq^úôžYZ;-Ïþðñƒæ»ûŽ\:óÚà9ˆèÏ Î1™ãïÖ¦”ÌIº»¯É™Ð|ýÄ9&KfÓŠEÚm„/ÌÇW NB&3ïKçf{”´s(;¡Q¯õ!MÜ^>cº» YCö»rÎ_ÕcW®l®õ2RžzFÖÿ‡©ÿ3²_á v°"I(ûìýoÏ—¤\ÛöÿQ Ž‹šŒà¼Á9“\C(Žyà2´üßþ[R¯”Ÿmvå„ɹ®{E6𻿏Þ*)«ýŸû_J†Ìwô~{׸´›÷óþΖT†�/®ôWW®ÃE`¨‡ÇÀdÁ°#+Þn·ý(:86mÌ|aúøÛÒ¨4ß×[gd½ñ®ÿÀ—Öǽ13°³qŽÉÌ+ÞýŒ»ûÞø?9|¿ørÔûÂÞ)Î1Ù2‹>P4Òn£à/ZšÁI*d1‘ñΓñƵž<yRÊå²ÜtÓM¦m>õ©OÉ¿øEùÄ'>q@xÇ`‹þïÿûæÍE]*0‰P¥&µ~¤ _'ý›&ɸ±>3íAêøSk£¿Þ6LøŸ°Îwÿ!Æë¾€ò¥¬Ïm“|E.Ã~í/²c²ÅÁkaóŽR‘Ð:ßýŒSaŸsYÞ\ƒ‰³÷'i\y[ÚÞ:Üášo¿¤f'd¤Q&¬ÝX•š4‚5ƃlyÿ<d²ÿî›ñðkÿ#{W^•+»—FðgjÖ|«¸r.‚-ýÊ^·ß~»yh&>úÐ&ÞOóeö¨ÿåó]Å|_—N£ùË^{\*}³ç˜8àó—zí°T3æöz«&K¦]–,cõÎ]®µ¼+…÷ykOGž‰¶Aœc²%õ>P@fÑFkkkS=D8NxÀ™LÔHkfË%¡,ä0fûþáä†no¼Q>÷¹ÏÉç?ÿùXúìg?+Ÿþô§å3ŸùŒùïý×emwL!ë‡Ym6AÂ8°yð?ɸ±>“ÉiõWÄ¡ò!dÅ‘% ~oé¿ü ýõJ3•š‰ÖÌ÷¤cbâïÐûëÓ~ïáçð_Âb|þ[þšÿ^[(?ÑîW1ßÉ–tû@1™Emmm™?ãk&gZ!‹‰ºgÍl¹ Ì;xh†¦Ùm³=Nÿøÿh <b=z”™ð1BÛà¯#o¾ù¦Ú4açÓ{ï½×ï½ñH2n¬ÏäDFò„+ý•ãf<ßüæ7M%ÐŒ.[ˆ×SãzKjKÊgûYç›oÃµÞæV¸–©ÿò„r‘9R®ÈFµ$”Æmö  ù.,³h£÷Þ{O–——U£3­ð�¢KÂä!ʲd¹ÑŽŸüä'M–Z3Ði¨T*3·.uá¡T,¿¨õ¡QÂyXiƆ$ãÆúLNd$O¸Ò_9nFƒ¤Ñ>Ó(Xš14pÌìÐMåõÖ¦z˜Y«ùž|Llü]uK•ãr|è¹ üçI* éø¯€áÚtôÇCÏ€x¨5ß“ŽÉ–Ùöb0«6J³ôëyc-ï¨ÑšµƒRÔ_c{ú nB†e% ±f˜g!”¢à3ñ ºvÝ‹*,×xÿý÷[•›@§N²zØ$7Ögr"#y•þÊq3d«Ñ>q¤e·ÇsfLjŒn÷ilÔúKâÍõõð.°qމAoÿ²T6¯šåü¢?[kZ;60ïûm¹\;Ê|ã:/ÉÆÉ`é@dÆ«ž9^É$Î1Y2Û>P fÕF03i­z‚õ­ñ�f¸Ò2Ê<òˆyàmó…/|¡_ò¬vZ¥$I…ë hZã }ë[ß™ÄE’qc}&'2’'\é¯7£ùò—¿lÚg”&e·ÇóÓ%"ëƒk*;éÑ[=hð�wo5 aâ3–NC*‘k<pé)’ÅŽC·³-[ý5¾#vB%.‡0ùqŽÉÜ ϬÚ_a`‘µÖ PCŽõ­5Ó•†‚$a®‘Á†©EvY3½. ׋9ó¼ìb‚ñþÒ—¾4•ñF½7ú©-IÆõ™œÈHžp¥¿rÜèüñ4m–mv{lwÂ>0™Y¶QZ^b‹p,¹§¯i…’,< eY:’–‘¿óÎ;Õ{,ºð;ÄC¸ÈxÃDk}g’Ð?ÑOmI2n¬ÏäDFò„+ý•ãF.EÛüô§?:»=¶;a˜Ì,Û(Xó;iöû±ÇKuó™_ÿúׯ¸"»‡ ÷$Á€/Zù újîñpå4ï@ÈzÛlÞdÜXŸÉ‰Œä Wú+ÇŽ¶6wš°Ý ûÀdfÝFXE"évói™odJWVVúëgkF6BéÉ<H‡ð;Dý?Öñ~ã7ÔþWx–�OC’qc}&'2’'\é¯7óíNØ&3ë6B hÓÌO\!«›ts˜¶;î¸Ã<<‰%û4›g!û]ôMxÐð%#i¶;Fh’Œë39‘‘<áJ帙lwÂ>0™,Ú˜`kxÍ�ÅÑ… ?po͸AÈäuíoÔû£®k½'éGa!JN¦ýëk’qc}fñ&2¬K[6÷V©²)—û›UèÇôeVˆ¬€ÑR°mst£Žò¦´ö•¥�Ì2_•þvò¸ž×êÇ'lÿeÔ5…·žŽsÿù÷â®\Ç¢Áv'ì“É¢ð@[’Ò¬ŽÍS4cGX:™aÍ´E¸¿'žxB½ÿ< ©€é>räˆ|ýë_7%"ZߘVÈz¿òÊ+~µ'ɸ±>³˜ hehƒ ³ ØÊãÒØ –ÿ±Ìôr`¾ïcɯ¾Qî4d=jš÷šR]=#ç×¥Ú|ßÑëí®?.õùõ7Òè›x[ú×éÿ<DœûÏ'®ôW€ùÀv'ì“É¢ð§ý$k~c%‹ikšQŠcšÇ•Ll„Ì7êÙµ6È“½ÇÒx˜ÿŸV¦;¬¤YodÜXŸỶì ùôì§çOÊJmÛ{„Íuèø©Ì76žØ ˜nÏ„o m®ÑûÜÕ¡ÝïRÀÒ|¼ÿ|âJ¥˜lwÂ>0™,Ú+%­û¾ûî»§ZÏ;SbÝnͰIXó;æî°áFi ^Kc}øQÂA|F’Œë3‹9‘iæÓ›Xô7ªˆ–p”#Ç[˜ol·¼zRš{°×ïK³ºÚŽqN¼–¤X›o¡ûÏ'®ô×bŽ÷a»öÉdÕFøÍÅÕ¹sç¦*«Àç=ë aÅ“£Gªmà’ð—˜mü.¿ño˜ßŒ÷¬ w d½ñ Â<÷‘°>3«Aš-qÍ·’ùÁùŽÐmoÉZ(£ŒŸ×û™î¨ùÆÖK¦Ý{Ššþ˜Ð|Ï•bŽ÷a»öÉdÕFXÒ-I ê¾Qÿ«ºQ‚É[ã ¡´æÑGUÛ!kÁ`ciH¬N‚eQ¯¿ººjúÚ­·ÞjjðÏŸ?o~§ÚïzV )ø Ì´+œ„I2n¬Ï,æD¦›Ïn».Gûz8³=‰Ñæ™îeÓŽC*mø™ðÑe'ã ýD¦0ßÃ÷ŸO\鯮\Ç¢Áv'ì“ɪ~ö³Ÿ%®ßEé‰Ízß'NœXˆ’÷9.Q “ì5JFПƒ%"±R Lö,j·m…Ý,OŸ>í÷Èd$7Ögs"SÌçþ[R_«N~àr#2j¼7š2¼Ž ÷³½p°¿-µÊIi ­6‚c6äpVæûÀýçWúk1Çû°Ý ûÀd²j£4Ì7ŒLžf5!\ôUNe¹Ô`P£ýÕ¯~Õlv“}ñâEóûMcýíY«¥$}È2L’qc}fñ&2Ï)–4Ë úo‡€é^ ç)X¡dø½uitðêpìþj&‘¥Z‘j½)mmY‘à —tW®cÑ`»öÉdÕFÈ&Ýé5Á¸Þ¸›ÉàÄ"íd9NhÔMkí†ÂEÞÿýæ‹V¡Ñ~O® × ãÝn·ýÞ˜œ$ãÆúLNd$O¸Ò_9næÚ¢Èx²j#¬©œÔ|CȲÆÝp+,Bæ+ÜtÓMj$Ì<JJPk’ÔigñPdš‚ñ^^^–×_Ýï‰édÜXŸÉ‰Œä Wú+Ç !ÄUòf¾ƒ5¿ãdyúÓŸ.„ùF½÷< ¶Á4Â_åFߨV«™?™–PóàƒÊsÏ=ç÷ÂôH2n¬Ï¤‰ y•þÊqCq•¬æ§´Ì7„Zndd5ãŽùä'?©Ö¢¨T*™/Ó¬¾Ð¦aÈ[–;,|I›•ñIÆõ™4€%�½ß~£Ô”/6h på:!$JVóSšæ;XåsŸûœjZ‹"ïr¹¬Þ¿°•;깟zê©\›n((5™•ñIÆõ™4$OÐ|BÈxòh¾¡¸ËâþÖŒkÞd½m–_Œ %&ÇŽ3íéÂr€I…UMfQã%ɸ±>“&‚ä Wú+Ç !ÄU²šŸÒ6ßxø/βƒÈ c÷Gͼæ]7Üpƒy¨T»ï8ƒ«øýcåW—Œ+\ÿ /¼`V5ùë_ÿê÷ºÙ‘dÜXŸIAò„+ý•ã†â*YÍOi›odi±=¹f*Ã:yòd!뾱 vïœfyAd»ï¹ç³)J4´öÍ“‚l76Ðùàƒü7[h¾ Í7!„Œ'«ùéìÙ³ÆøiæiZáÚ'™OMW¤ÒÜ ¾Pà‹…vÏã„õºQÛ}îÜ9µMó$˜nlï½÷f’í“dÜXŸ‰£(j:Bˆkd57¥±ÃeTØÂ<N½ówÜQ¨Ò”›`!í^Ç ÛÏßrË-òæ›oªíéºPZ‚‡mQ^‚L÷ÚÚš\½zÕïaÙ’dÜLe¾ É ®ôWŽBˆ«äÙ|ce¬Ò¡Ͱ°l^QJO‚/6å&8UbgÊ<¬d“¾£R¥S§N™ 7ú*úJ˜Þ{ï=¿g͇$ãÆúLš’'\é¯7„WÉj~š…ù®×ë±v»„ùÄ}æ½ôuÞ¸›5½qï¨ïþå/éÜC•A&;0ØÇ7÷!«md·ÓÜ> ’Œë3“|!YãJå¸!„¸JVóÓ,Ì7LÛ¢l5õʱ“%²øÚýi o­ý²²î¨ÓþÍo~s “쬘LJ’qc}&MÉ®ôWŽBˆ«d5?ÍÛ|#[ óÇì÷4Æ÷{çwÎÕx#³=Êl»–ɶ%ɸ±>“&‚ä Wú+Ç !ÄU²šŸfa¾Q²ðío[5ŸšðbÞ²ßÓo¬h‚zx­Ýf©Àp£Œ} å#ÈÀçÝlGI2n¬Ï¤‰ y•þÊqCq•¬æ§'Ÿ|2uóx6æ+£À|c}lÍ躦$ÆûâÅ‹j›ÍBQÃ/ZØa2/%$ÓdÜXŸIAò„+ý•ã†â*YÍO³0ß¶™oËæaå“Ï|æ3ÖÆkšßtÓM™e¼Ã†Ü nû£>òãÅ&ɸ±>“&‚ä Wú+Ç !ÄU²šŸfa¾mj¾¡"0·QÃëŠ>ýéO›•M\|¸;b¢†;¼Îö¢î04ß Í‡Òª­Ji­!»]ÿ%Ò‡æ›BƳhæúõ¯m²Ê(ëÐÌï¼ì\yóÍ7O½œ ÖNI…UJð9Án’[[[….)‰Í·ËìýIWÞ÷˜4ßã ù&„ñ,¢ù†°5;2Ì®¬~‚L<®ç;ßùŽ1ÓÚ5kš¥ñÆï Ynô‘³gÏf¾…»Ë$7ÖgÒDØpMv²Ñœ¥ù&ãp¥¿rÜB\%«ùiæûÂ… S›oè0`Î3އ?ƒt›2hVÆµÜØðæ¶Ûn3Ë.bYÉ$h¾¤+û;[R)-K•æ{nÐ|BÈx²šŸPœ¶ùŽ»Ãå88q” d]ÓÏ…ùÇC 6Ùn(mãK7(-A-7 Íw"ö¤ÝlH½º*+õ¿Énói):,kw<û|M:­ R-—Ì}ò^¯Ôþ(íýA}G·sU6+‡½÷V¤Úø»wþó²Õþ?ßx÷¶Hí)d»imU½ÏÁë%)W/H«s­÷ÞØë9H·Ó’Ku/ÖJ]Úæ�Ïô·¯H#xm¯-—k)á³ÊÒhï‰wÀàµRE6·;ƒØC×Ö{¿v¹-ûþÛ=†Û¥Tٔˈ¡ÛÙ–­êŠÿ^ûlmK'ãÒ|¶ ¸r„%«ù Ÿ£™¾$JÃ|CgΜ1†øŸøÄÌ—!„ÉÇç =yÇ %Ú5SšÆõÜ(ßA–K²´$IÆõ™Å2]ÙknôL(LðÚi¾û_ÒÜX•rm[öv²VZ•ZëCsì~kÓ3¥%ÏïôÌjwGê«ëRßéÏnç²l”(õöǽŸÛuY ›nÐÝõâ¯{F}ÇÚ¾y7æyüõ `½¦Tƒ˜ïðkåªÔ/µŒáí][É3ʧåùúk½/Ýw¤±|6¢Læ'R*oJË|ÁèÕ“:t¬OÞI~;íâqóÁÿÌÒ†4÷º½Ï«œì™}³}Îû2j»Œp¥¿kÜBŠDVóÌŒžf�§UZæ‚¡}â‰'L{Üpà fµÍ<Û 5åÁ²¨éÆÃ”¨7·ÍtJËxãw®ç~ï½÷ü߉C’qc}fMDÏ$4†æußL|c[ª6ÅØmü¼ôiìYk˜gd¾G›o¼¶œo ÷à¸Q×£‚/�+¥ñš¼/Íêrß÷øXÚõcÞï40×½Ÿû÷§\[?Ž{pâx_0Â_:ÔÏŸ=®ô×"ŽBH1Èj~šEÍ7j¤ñ‹_¨&uZ! Ž 8JB`šo¼ñÆØuá8ÆçÂt£}ï¸ãÓfMiï`©@\×sÏ=·ð«–LK’qc}fMÄd³‹R—¤fÊKBæ;0¹(ÍxùÊP9 8h¾³ëg‰‡4øüù™ïûmi¾\óKg”{Š1äÁç«÷©|Ö Ágº€+×A!Q²šŸf±½üc=fv­ÔŒjBl˜æù—1›× ­¾ð…/˜²‘@0ØØQ²÷oÜ!cÀïºë.SR‚r–i3ÜQ%5ÞhûðC”4ÝÉH2n¬ÏÌjfÉh³Ô6/K¥ÖÖÎkÙoAÍ7ê¾{å$æ½æ;š!Ö™«ùj¾ñ…¢±-;—£™o‚¯Mêoù¥3øyiPcþB0|μp¥¿qÜBfÃ}÷ÝgÄöÜY”d5?Á|cGJÍN«Yd¾' †\SZ&[Sã6݈ÕKÒ!ɸ±>³ˆ&B7»ÑÚfhÙI˜ô†Ÿ<yÐ|ûf·_S­3?óí×x÷¯O+;¨ó>/ÏVè×§G¦4Ÿ2ãs„æ›’7`º1g‚GyÀ¬„Ëj~B¶öiqZ]¼xÑd¦5ÃZMk¼±\àƒ>Ø_¹„¦;]’Œë3³¤Y¢›]Ŭ¨ù¾*[—« g¶šïà5/Ft…ý–l5Ú!Ó>ó}àË…f¾{_JVÆfÑÕapîËÒ`Ù !„Œå�˜3F Ù^ô´Ê3 `"Qk¬Åi…¬.Œ©fZ‹ iŒ7L7— œ=IÆõ™Y Òì fÔìÒÏ|‡–à+U/Ëî_þCZï^–êRh©¾ý·¤^)–4fÖë½×lye°ÂˆgH¥àÁÍQ×3‚ým©aÉ¿°©^ g؃Ïíð yÿ}ÓîŸ7X*æ»-iþÍ3ÜÁ9‘ë7÷0h‹®Y)æà1YïĉÏtW®ƒ’Pvž;G Yñ_|1QVq² Ýn›òÍ0&ÑáǧZ®ÏuááLÔ™Ç5Þ4ÝÙ’dÜXŸ™Õ ͆À`&²¡’c¦a”ƒµ¸w{Æ3X/Ûlÿ¶´þR{Ã5ßÞ²S_óŒôa©l^ •e ¯¥=È‚O¸ž(~¦zpü1ù]ãŒÉ¬‡_«o¿zà¸úÎ_zF»ÿ öÿ„Ö'÷KI>ì}(W~»«¬aR(Û>¼Î÷Á5Ò³�Ÿí®\!$À<õçU M“ÇyY€kBݱf“æt}}]5°yÔÄCœ¿ûÝïÔ{Þ5õ4ÝÙ‘dÜXŸ™Õ %®óýš4þâ×Á‡Áæ'Ï„ÊZæ+ý•ã†bês1o$Qܬ8ŽÍ | £f$§Ö«FÜ¤Ëø¹"Ô°ßrË-òæ›oª÷ ¡ Q?¿¼¼lL7þª@²%ɸ±>3ËAJÜÔ“¬†kÉÃ|è—¦¸Cšý±(Š¢òªQYQ¼—§OŸ6åš¡L¢ .˜ÚhÔHk†6Bé îá?øÁÈ͈ÓìFIÓ=?’ŒšobA°ÌŠTëÍá”Ò\z-´M¾¸Ò_9n!6 ó}ûí·›¹cZ…WI·ÒŽÍ |8uê”j,“ å'y5àX.e&çÏŸWï-¼<v£¤éž?IÆõ™YRâ"XVñU©÷k¹=ØdÈ\é¯7„¦­ùžf}pœ—A9MÚ¥'`À9bÖÝÖL®kÂuÞyçrÿý÷«E·€çÆ8îdÜXŸ™å %$)®ôWŽBˆ xpóÆ$ÅÍnq²å³(= ôÆoÈ­·Þ*?þñ­G‰ ®+µ\ºtéÀ=Ðt»O’qc}fÖƒ”$¸Ò_9n!qÑœ1J?ü°)­Hk÷KÄÌ|QÀêQÙ¦YG8\<vì˜üêW¿RMpÖ‚éÆÊ,hs”˜Dÿ€ìw`ºñ¥Š¦Û]’Œë3³¤„$Á•þÊqC‰ v‚Äœµß0b(E™6»=ŽyÌOÈ~§½Û¥&˜[d¿þõ¯›šj_ñ,ëÂñYøL| À—˜îè•øK@°<~ÿ4Ýî“dÜXŸ9AJÈ´¸Ò_9n!qA)IÚÙíqÌc~ƒX&oVµßšÞ~ûmSâdžñp&–õÃÃŽ¨½NÓ#ø(-Ágá3ñ% |¿øo|áÆ8ù$ɸ±>“&‚ä Wú+Ç !$.³Ènc^ó–œÕÊ'“ãûç?ÿY.^¼hêëyäÓ7ß|³ÉPÃ4ÿüç?ïó@0ÕPø5lˆƒcaäq.â æ¼Z­šŒv4Ë/Ai Ú€+—ä“$ãÆúÌy ÒÙ±/­ZÙÜWXƒ]'GÓ×RMZׯK§Ñû6­i©Ö’ëu½%µ¥Ð{á-àÃì·år­"%ÿ8\Ïkõã²ęȨë‰îÂéÑiHåÀqž* éø‡ä܇ ¸r„e^ó¾d ã‹LqØœÎS0ʨ»Æ5¡fÆü±Ç3æü¡‡2¦ÂCxï×ëucäqnÔlC0ûˆ‰,7JK¶¶¶XZ’s’Œë3‹i"`®+Rk ,i·sY6V—Æn°n5ÌìãRi¼ëÿì3½˜ïÁû×[µQöÌízÔ4ckøÕ3Òx~]ªÍ÷ý}ºïHcýq©ï„¶«Áî‘+“¡ëðèv®ÊfÅ3àÑÏ4l‡¼CóM!ã™çü„²˜ÑY®~2O!»Žì>ÚYîI»’üdÜXŸYL¡™Î®çOÊJmÛχÍuèø©Ì÷5ÙmlÈ °gÂ7Ö²ÛO~÷>wµ¾ãýWr¢æh¯õ ùžÅ7„"0ïù)0àY<€™…PVò /ôk¹±î:³ÜŃæ;1#L'Ê1ú¥Ñ2Žräx óÝÝ‘úêIiîÁ^¿/ÍêºÔÛ÷Þ3qN¦f€‡vWöÛ”Zå‡^üÍ+ÃÐ|ÏŠbŽBHpa~‚‡QE–X+Ûp]Èp£Ž;0Ü(+a-w±I2n¬Ï,¦‰ˆk¾•Ì÷Fg—= ÜÞ’µ~F½÷óz?Ó5ßïJ£²dÚ½§¨é®c©n´–= Í÷¬på:!$Š+ójÀaZƒ,x–+¡Ø ׆Rn\ïÚÚš¹ö,V§!ndÜXŸYL¡›În».Gûz8³=‰Ñæ™îeÓŽC*mø™ðÑe'ã ý(†Îévd{sMV6.KG­i¡ùž®\!„Dqm~BÆë€ÃÔ¢|Ã…L8®f×óàƒš6Ã5²¤dqI2n¬Ï,¦‰PLçþ[R_«N~àr#2j¼7š2œ{†á~¶Wö·¥V9)¡ 5ŽÙÃIÌ·aOvêë# 8Í÷¬(æ¸!„Wç'd‘±¹L8 /Œ/VÑÌqš V< 2Û(%AÁlc–“dÜXŸY<Ã9ÅRƒfyAÿí0»á2(X¡dø½uitðêpìþj&‘¥Íõ¦´µe Uðe!\£|žVSY;<¸”×ô ‰K ¦†+×A!Qò0?a•”u ¼× CŒ!aÈQ¢£ à áǨ¡F™Hð~X81+ÈhC0ÚX™m–’$ãÆúÌ< RB\é¯7„WÉãüCŒ 4v¥D6F†ùÉ'Ÿ4<➢Â{Ž ôûßÿÞÄ@,f´‰ èSÓb}f’#$k\é¯7„WáüDˆ=4ß„Œ€æ›BÆÃù‰{h¾Q5ÚC Õx/0h på:!$ ç'BìI2n¬Ïä %y‚æ›BÆÃù‰{h¾ Í7!„Œ‡ó!öÐ|2šoBç'Bì¡ù&d4ß„2ÎO„ØCóMÈh¾ !d<˜Ÿ(в״Ð|“BãJå¸!„B˜Ê|Se/B!„:B!„B2‚æ›B!„Œ ù&„B!$#h¾ !„BÉšoB!„B2‚æ›B!„Œ ù&„B!$#h¾ !„BÉšoB!„B2‚æ›B!„Œ ù&„B!$#h¾ !„BÉšoB!„B2‚æ›B!„Œ ù&„B!$Dþ?MtO¥�����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-1b.png��������������������������������������������0000664�0000000�0000000�00000040557�15030617045�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ï���ö���)˜jû���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��AIDATx^íÝÁkÛhÿïýüxímvÝu¥•7Ùt“î.tÀ›,²ŽÀ‹ÂÀ]˜Ã q‡Â@¹‹ 0<PÂ#ÊÂ`~Ú•b ‡ßSBðá !˜¥ó=×÷Ò%Y’eGIœ'}¿@´–mIV,é£K_]Þ����­ž��€–Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-žoé2 ¥»³#;•á@âé¥{Å7™¦¿KôÜs= ŽG2»§e.³I,×1ÏuÄ b™ÌŠ'[º”i|à¦o†n(i>{���l áù–4<? S_›Ìå"H×ÊÉä"5û(‘ïI?þlž5æc‰ú/$™~3LÐN^H?gÏÝÄe*᣿)<Ocñ‹ˆ¦Á“0¹��Ü?„ç[Zž›Í'‘ôz‘L4!?¤ðlJì•ZÞs3ICŸð ��îµ- Ï®<ÉJ^de ¾DŸ>I2Ð’3~p’•;Ì&’¼ Åïä-š= ¢¤TîOKŸÓŠ?er2t¯ïÉ 9Ë©N' ij¯ÓùFò.zv­0|“ðl[hóðl–äöe%+óÎ'©–D±yütÖð ��®-kyvµ»šÇç2K‡&غÐ|ùYâþ“,|ÍÇr<|/®¸I<^?–³rîÔ ÙõÄ÷û‹:ã‹D‚] —_eõÅ~XÔϧ2ú²{Íð\­y®×4×ÌÆû‹²:³ éÛXÞ˜ Ù©ÔN·´*<k ÷^_†£i1ßùôƒ }·N7¦ž Ì��àaÙÂð|(½¼l¡¯bM¡Ñ†ç=óžs7¢, Ï+CìMÙ�~(õéõÀ»ÕÀ®´<þMB×<¯­Ï/%Žß߬zmx6¡öLËCî’†çnéd‚:g��ðplax>?>uW„gmËefxì‰g[”í;36<¯i½u-Í|^ Q21sº%mÝÞËË2ªæÓTâðPúÑÇl>6T›@þ&ñ&æ½*<YK³tý¼Y™J’ßÈx¥r)LÃàÇ2µ¯£å��<\÷0<ŸšŸ˜à÷JR{“Ó¯ ÏK.d-‚íM­ °Ö\KPúM¾º™r¸íø¿È¨üùÚºjÞeÚóGÿH¢qÛ�ÝÆªšg��€ûïþ…ç? w’\Ôšu‹Zf÷X];<Ú|Ë~’+½i4ú"IpP ÏfÜàÈÕ$Ïe6>–þ )Õu·tðl×÷t¯{ÃãZ„g��ðpÝ¿ð<ú(q_‚xìZ‡/d’DYoõл.<kHÖ2·i©þX[ž¤ŽÚµ<k`ïšeŠóiä=gèMxZg­!ù©Ñï‹VòÙDNÌçèÖon¼Óð¬ëõÐÖR¿M7 f}NkoM5á7Ex��×…çjM­m µáWk�>wÏwå?ý«V»ûJÒӋמþáþ¿<­¬žý—’$¯Ýzúü=e4Èj˜«uÓÇ债TŸ­õÍïo¼qÙFq3bÓ ëîkvR½«vñW_ÖÛjZ~í��< [Öò ���l/Â3���Ðá���h‰ð ���´Dx^’ußV¹émÕÀÍp���ßÂ3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–îyx>•ØïJ7Låûë1î\ÒЗ ùâ��ஞï©ùY,ýÞPÒÙÜ��À]Û¢ð\þq’GµÕ¹\$éØç< Ó™Õ|îÒW™D}éÇŸÍß#=q>’xʯ�þZ[Öò¬ÁöP{¥Ûå,O†ó±D½]ñ<OüøÔ¼¿j>wä"‘ ;ä‚èŒïá�ð÷ØÂð|$þË_%èìI˜žÛ±óI$½Î3‰^ºP›•kä?“]-ÛX´,wÃr:úEü޾®#^ËÄ–9´™Ïÿ'³É{yú®%Ú ^ Q2‘¬=Z[÷Ý2tÝrÍ$ ½ê¸ÙXâ çÆé°+~øÎ-‡q™JØuÏù±Lg9Éçéý Éô[öºÂ793˾iuÆ=“o·ž„£‰Œ†ù¶Õ“ »íJ]È$ˆWl3;Òñ‡r2¹0Ï•·±úo‡m™ù$‘^'{¿nßïÌãG‹ŸÝŸOGr\Ú~›–c±ÿ)í—òŸîoµ}Ï;æ„þ®›î«^š}ÏôíçÑçãÅrêÐñ%<É÷E�€¿Òv†çxbƒi'HÌá- ©àŒísÕƒãeÊ£†šg¿ëyâù¿ÈHPó©=Xwí4ÛÍg>y-ÃrY‡ Âû¥r‰ GÒœÈ4O²³ùû2HÎÌkÎ%>¯ä²ö x%ãR½².o×{*¾?ãtjÞ›•ìÖ?Ûl$aïHâ³z¨î {ây=ñ‡ìv3Ÿ~¡o´ÝÖLPLÍImùSÇM‰Ï%kpU·oyÖ“å½|ÿ`}“©žlïfÁw>=‘çÁ¯¥ç »8t'ÜÙ‰úÒ=˜K\­Þ¾Gr>>¿7؆òLÚŸdû;³ÍƒŸ]hwLO¢$ˆ> à/¶¥áÙ0´4¡³/Ñè÷ìßÉlñ\ɺðÜ­·Üê4íñúóÉ-ϯ /ÊÁÙœm0¯Óçæu‹`ž-ïU7�êûžKÏp9`â~Òðܯ|ÂYI³]iéÔÞóæ’$³­ùö´¡ð\.Ûªø"Ip`ö_ÝãÝgìE2™_7<7mßkæcéIýÁŠ^uÌ{?R¾�±í ϶+¶'¶.¹ÓËT× ÏK㋃Z»ù̧©Ä岎}ÝRk° Ð}óº^œó@°xïòP>èÚƒ«^ÖuÙšì§k´À¶Óðì/ÝŒ[l¯öd¶y{±C^±ð\´4óëI%Y‹÷ºo·ÃC3ï¯× ÏMÛwÃk«4\?ª®ƒÊ°Í76ÀôÅá9kê™ÀÚ³õ½wžWÌ'úMBoO‚ãQ©…lÅt]©Æ³À/•p”ZÓì‹Ö[yp-èåì¡ô[²û¢Exveëm"<×™ml|,ýþ±Œ/>mQxÞ' ÀÙêð\uwá¹*{nß„áÝ¥ Úˆ+5εh -ûb¾2<Ï?KÜêj-ûêŠðlâ>Õ÷ü.³ÒéêMÄÿ¹z9Ö–md<¯›Î­Ü¾¯¼š¤ûJµ�`›ž—dÏýãÇJ¿|½A'°=�ËJpΕ´öŒqhšùú޽ã¾_é1ãªð¼¾>¸/® Ïæ»®?�Ô5¯©ßh{2߆V}¬!»'~qÃ\ÞsÆãJ}°–-ËXôª“ÑüD‚èwI‹û"\ðu'¼zÃàÀ^»‘Oon\œÄÚ«Vù½ó©¤q(¾Þ¨Ü6<ë<Ó¡x^ý†ÁTÞšý½ÒdOœ½j/=ú>ÛCGŸ2.�ø‹mQxÖƒj¹ ªƒ¢UÉxŠñW þkù8ÿ}ìXÓXüòëŠaÝ|ve¿\y<’Ó‘{;/~ÞUcWuf°óþ&ÓôU¥›©ŽÊ×åÝêÏV®eÔ °·â¦!à¾ÐÀšw1™o3Yëmñ½wÛk½‹8Û5Û›÷¥ðXMÖ½Û[Û“ÅÂúð|(QrRêŽR§ñª¦——cÑU].¿ß¡ôþÓ®{ºy¿h±}ë>".uUgí6ïmº(Ó`~œ¼g¯Ñ./_KRY�À_aËZžÑHƒ¿½™Ñ=��Àß‚ð ���´Dx���Z"<���-ž��€–Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<ãnèOŠïx¦37��àþ#<ßÒeJwgGv*ÃÄÓK÷Š’ÙHB¯#;~,S7Jd.³I,ŽßéˆÄ2™ÍÝswéÒäÛ»¼Ý056Œð �� Âó-ix~Ô*|~“³øPºž'Ëáy>–¨ÿB’é7óà›L“ÒÆ&Rÿ5Ú-ÿ©Ä~7;1è $¹(/ÝI‚GÙsÝPÒÛ¤p¸³NÈ…m]$t²çî$ì��´@x¾¥¶áy~K¿³/QòJü{ž•hO<ï±ôãÏÅòÍ'‘ô:Å{|ØÜÚ~] ›ùtÍôÎt¨¯2‰ö¥S?ñ���ø‹mQxžIz’•.¼ÈÊ:}‰>}’dÐËÆNdª©m6‘äM(¾k‰ÜÙéI%¥r‡|Zúœ–Pü)““¡{}OÉYþt:Q ž}Î7’wѳ–a2Ó.|ž›åy"^8’™†Ã;)Û¸(}Æ|¼’ÐæB­ æilï.ž?Ééè:áùP^šõÓñ†’Úet¡6øU^úGÙ|J­Ç;õ²ü¹n(£Ó2Ì—ÅH<qíÌvýü,Q`¹®/§'½ÇæóüìÖù¬ÉëÒgÉþv‰›† ôù2¸u­§¢¼ÆŽ+¯w7¾ãKx2ÉæYyOW|sÂ0›¼só,}�ÀweËZž]®†æñ¹ÌÒ¡ ¶.¨\~–¸ÿ$ c&Lß—.ë›0¤×å¬h.S »ž \}mØÑËÿ»Z^ Á¯/þðÃ"ͧ2ú²{Íð\­yÎBé"X™¦Ÿ#/wX Ï5fÒ·±¼ }鬪^r!ãè@z•à­aù• ‡Ú"üÍ.CÏÿEF¶…ÛÐùä©÷¸åçÕðlòÙÇ,È&_ìß!ûš=WYV=1a´^ó¬“]Œ½¾ GaÍrŽ~¿[]?g¶E;—µn›ÿ߸ugþvÇ/Kå#.÷tùôó™Çãcñ{?¸}åÖQq6’að³œä¡]Ù“©LHÿXèìsôÄó}ñƒW’Úéi©Ê>õÜ��|‡¶0<J//[Рõ(¯£]Ær•×:6<ï™÷œ»eYx.— l„ à‡rO×ÌG‹ù4…g mño‹VÍà¥Äñûö-ÐzB°ÉdÕËuöž×j••¶ˆïµ¬!váÙ„Ç‹d ÞKè¿:ßü¹–á¹[jý·Ja´X?:î±ù.¼—û¯ùN¬=ñ¨Ï¯ ¿Tƒ³ýÛd'�KÌ|?–Ö• Ïy+8��ø®max>?>uW„gm5ËefÐ:YÛ¢lß™±AmMë­kiîäÓð‰’Åeû+¬»I°Ü"^€úxgWüð7‰o8ï+KGÖ„Îve'ªm¯!Úz¼ëNt®žë'9å×ËêZìõ蝹⓯¥çê%(:<2Ë£'Jåù¹�Ý©—Y”nrlÊå&ºl{‹ï$��ø®ÝÃð|jþ}"^q Ýi eW…ç%ziÿHú•Ëö7P,‹.s^{]z¦˜OuÀr‰Åþòðìjwv\¨½“ðlØVûŽìØÖmóØ>÷o™h¨6':Ç©Fì\Óü\©Æ³gµŽë”]èt Ï�� sÿÂ󉄻õîÒŒ¢–Ù=V×φ´[v¹fktóÀW·2Èj¹À‘«ÎZLûƒZwm+¬ŸÚhÙFÓ+ï(<×Ùç"‰Ãý†’‹z .×8×k çæëò\z­J1Ï��`áþ…çÑG‰û&<Åc|´ç…(ë5¡z×…g bZ¦ñ6-]Îw«m}«ö®Y¦8Ÿ† i¶½±±©ÎÚ¸ƒð\ôæ±tÃàïOMÐüß›»aðoÏ¿ÉÈ|G7Gê:OÌçÔYòr‹ÚÍV-@ÏõTOüð]ié´´G¾kQW„g��°°EáYCÊ¢ÄÁ¶†Úð«5�k@Ôç»òŸþµèæÌÞ`÷JÒӋמþáþ¿<­¬6ˆ½”¤ÒåY½§Œ«Í§©Ä&ø•릫åNñYܰÁ² k©<»ñðm±,«»ª³½…¬ ¬ª¾ìÅk«³õCWüŸþYêÆ.?©Ñàí~€¥2h÷p¥“¨òüÿ/_~üõu>‘QÓ²¸e­öŠâæmO ò® uÐÚó׮˻5Ÿí–W&��Àýµe-Ï���Àö"<���-ž��€–Ï���@K„ç%ÚãÇAóbõÇ���¾+„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–Ï·t™†Ò]êú@â©ë�ú2•°[¾+~|š=/s™Mb ¼Žß/ˆe2›»çÚªõMMÿÓ���w‚ð|Kž…©‰¯+hx~´&ÌÎÇõ_H2ýf|“iòBúÑØDêºj~wi‹_9I¨ž„é̽��àþ!<ßá¹îTbÿhÑò^˜Iú„g��p¯mQxÖpåIVºð"+cèô%úôI’A/?8‘©¦ÊÙD’7¡ø¼E³'A””ÊòiésZBñ§LN†îõ=$gY8ÕéDxöu:ßHÞEÏÖ‡áš[‡ç”m”¬œŸÎ'‘(Ðu™¯³Ø<~ºá@Kx��×–µ<»Ú] Íãs™¥Cl]h¾ü,qÿI¾æc9¾— ÷.1ÿ›Äéõc9+çN ’]O|¿/Áñ( Þ‰».¿Ê$ê‹?üW󩌆¾ì^3<WkžM(Í畽 Vó¬ù•¤¶¥¹Y†ôm,oLÐì”k§ÛZžµ…{¯/ÃÑ´hÕžO?ÈÐwëtcÊá™À ��–- χÒËË*AðŠ ÖmpÝ3ï9w#ʲðÜ?ar#l�?”ƒ•Óý&ÓÑ/Ò?(}m“Ðßuáú¥Äñû›µ@¯ Ï&Ôž­í£á¹[:Y Î��<[ž=Q¬ ÏÚ:—Ë6ÌðØ϶(Ûwflx^ÓzëZš;ù4¼@¢dbætKÚº½Édeöý"Ip Ñä«»ÉnWüð7‰71ïUáÙÈZš5 ëçÍÊT’É¢ý~½r)LÃàÇ2µ¯£å��<\÷0<ŸšŸ,—>4…Æ«Âó’ GGÒ>Þ.Ä® °™æPY·ÿ­*íXçÊy—Ì>JÔ?’hÜ6@·±ªæ��àþ»áùDÂÝ$µfÝ¢–Ù=V×φ¶ß²Ÿäù$’^oM˳–Pôžf-Ï…/’ Ž\Mò\fãcé’R]wK× Ïv}H÷5ÞW#<�€‡ëþ…çÑG‰ûûÄc×:|!“$Êz«¨‡ÞuáYC²–i¼M7÷Ù–çé…£v-ÏØ»f™â|yÏzžÖYkyFOü0^´’ÏÆ{â-Íã.ó®×C[Ký6]Ü0h[ž}ím£©&ü¦Ï��àáÚ¢ð¬áxQSk[CmøÕÇ€ÏÝó]ùÇOÿªÕî¾’ôôÃâµ§¸ÿ/E+«†gÿ¥$Ékw£ž>_ë)£…ù4•Ø„úrÝôq9 .Õg¯žÇË6Öþ8‰®»¯ÙIIô®ÚÅ_}Yo«i9øµC��ð€lYË3���°½Ï���@K„g��� %Â3���ÐáyIÖ}[妷U7Ã��|WÏ���@K„g��� %Â3���Ðá���h‰ð ���´Dx���ZºçáùTb¿+Ý0•­ï1n‹¿ãI˜ÎÜ�ëÝ£íkœKú$_Üc�¸ß¶0<×úY^Û—2áx¸Ï×2ŸJúö¥^ïû™ ™ÄñìþwWüá™ÎÝSs™¥Cóº®øñ©×l~K¿7”tÖ8!�¸w¶»åù2•ðÑ]þ‰œ$ž^wå€ÿ¨Ö¢2—‹d ûÜmÃrì|:I.ÊŸ/’²çø±à;öM¦I(Aø›¼M'2 ýîw4ÿ*AôQ²wët_ˆŽÜã’ùg‰ûÅó¼+ÂóW™D}éÇŸÍÔàa <ß(<+ ЇòØ{,Ý~,gù‘a>–¨·Ûâ Ò–.£g¦÷¸r�šO"éuÌÁëñá —ÀÃ3³%7 ϺïÚ{^;I7ûŸþµqßäÌìû:½_%ys´~?w‘HЭŸøÀývOÃs©EÖ Í—u/d’Dxìu^ Ñ;óØNO0^ñþêpõeÈŒ†gsàxù«=s°:·c³PûL¢—‡Ùtl¹F>ízKtþ9ÌøÑDFCßµX÷$ˆÇ®µG_s(/£gÒñòKŸÚš³/àWyiÃÿŸæ³¾–ÐßuóéˆD’L.ì²@ïÖÃÎA¶uÝvóårãfc‰ƒž§Ã®øá;™¸Ë­—i(];^×Ñg™MÞ¹yšù NV\ÞT¾ÍéwóE¶]vú}ú$É@¿såïкíûŠm¦ø^›Çá3[~Ðñå“ù®ì¾ 'ƒäÌœ„ÎÍ÷÷½¼1A3{¿t‘L²ínCÛLå=~,ÓÙDNòyz&”N¿e¯[a±ÍeC¶.ªë§XëáÙì«úAböœe:½ýêÕµÙHBǗl¸r©!ûHö¢1­Î�”{ßò¬—G áYCìžÿ‹ŒŠƒÓ7™Ž~·<==ݦåYdõ “‡Úw2^:¨¬:¨éø=ñ¼^Q_8Ÿ~¡oþö€å–ñì£9˜?ÎÆÙ»þ?uË?“ÉñËR뎃X‚ž¾Ï}þ™y¿¿ï‚ƒ2¯‹ßËàç’ŸKx⃕€ ‚W2.êuy{âù¾øf|jß«%$û7;`ã;âÊ44Ï]ͬ Í—Z ¬újÞ¾Ûl3]šÇ³?íkóÐ|©õ·n0Ÿ¼–a%jÞ_\áÙØ6“}Ž®÷T| ÇéÔL)+ïÚm<ñ¯±aõ©D“¯n„ÊÞ_¹êe­ÚÏ\­y]çû¹|_¦7ÿí¹ý]ý¹]îò>�ˆ‡ž—,u›ÏæÀ¡—&;û~ÏþÌ*ë³ £•–Ûò5_Æov\§÷RF'úo$“ùºåo˜_Nå¢ÜúZjuRº,?š÷ä!Ã-oS$°–n3‡ÒË["+Ûwóö±:<_µÍøEجLãŠ}ÊÒü6²ÍdÓíWŽ®KOÊŸV·9[sœŸ,”5¯Ç6ì2jë¸{œ©äìÊÚ¡ Äë³®ƒçÒc?àz°á¹hiîä—6Í&J—S­ …gÛóÄÖ?g¡¶é ²ê vUh(-£mÒ›tv]�ÉŸû/™¦q©lC‡GæuZNR›Ÿ æu•KÆYð(._7 ‹K纼{+˜À:µíâVá¹å6SoóœOS‰ÍtßûŽÝ†—Zƒo½Íd˰LÛËBë¢v¸þxaÕ~æjÍËXú›ÙÀî•î½XžíÕ±zk9�< 8<×e—\û}½”›p6žÝÁÌ|³P{GáÙ•…ììhë¶”ô¹C‰âÿa‚rà.皦›_v>” v9zÑjw.á7±Eáù\OD÷$8•Z¯›æ·‰m&›îmÂsVe–×¶47´Dš×M+zÆÒ2êô\ͳ®»¢æ{õ‰‚]géPz­ò�pÿ}GáYéAµÜ»¹ð\uWá¹NŸû¿Í/?¨–ÕëkõšõzN-=iÕ«./á7±=áù?BÙ] wõ@¼©m&[†Û…g×Ò­W¶Î]™Xc«îªýL M½m4+¬ØÚê§f²›¨à¡y áYžO$ˆ~w7´©ü@X>ØiÀì‰_ôkš÷Ðán̳\·LÚÂR©YÜ–ðÜ—:^»’ó9'‰D¶€¼wZÈUÂ@ö9»þPNò^:”í _ºc^——ðŒ›Øžð<ú¬?Ü18ÿ®›ïy¶wެu“ÛL¶ ëÃóªýL‰-ÛÚ—Cí&NËÃÜøŠUûÇ[×CÎR˵ùÌKý<‡¥ÇuÍû@[ ~åý&�pm_x®tíV´K¦¯æ%¥_ ¬ö�¥ÏC‰’“RWTÚEVÞ;ÄÂ|:’㢫)}ÍKy[)h:¨éªÜÕÝ¢«({,Ư´»·ÿi–3ïr*ï"OH+>_qð­Ïß oQiK8ôÇô5]Ù7ûÅ25u»•ÏÛ,ÓW‹îýÌÐñCyc»ïj˜g>ð#-¸RõûcjñÔï¤Þ7°âûUüÊO­·™ì䱨&uû)æùT~ú÷°zOÄñHNGMÛïM·™uûƒz·•-ÂsQ¶Uÿa¦5ûŒú¶¹6<«v¿0Xÿ\‹²ry �<LÛÝò �¸?´ñce«8�< „g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„g��� %Â3���ÐáwC¦wÇ“0¹���÷áù–.ÓPº;;²S$ž^ºWä¾É4%ôwÝköL°<7ãç2›Äx3®#^Ëd6ÏÞr§.M¾=°ËÒ SóhÃÏ×2Ÿ¦ò6 Ä높Þô1Kô²ïWÇ—áhj¾]MÌw.Š·Ó?>uã��@„ç[ÒðüèÊðy!ãè@zA$ÉäÂsæc‰ú/$™~3LÀN^H?¯=›×nùqgæg’<Høæÿ‘ôôƒ„nžÏ%þ ÑØ}¿tºƒCw‚V3ÿ,qÿ±xžGx�àšÏ·tuøÔV¾ŸÅGÒØKxFî2½qxžO"Ù sšV2¥_g¾cgñ¡tz¿Jòæˆð �À5mQxžIz®táEVÆÐéKôé“$½mÆNdª©r61þPüN^&Ñ“ JJåù´òŠ?er2t¯ïÉ 9Ë©NG/•Û×é|#y=»V˜¼2|j8Þ{.ÉŪ8¼©²‹ÒgÌ×É+ ýg®„¤^6bž?Éé¨ExÖP×uï ŸÙõÕñåÓä ìr—Ö©-×È—¡V¶‘?× etúA†ù²x‰'v]Ú¶ü`Wü(•IòCö7ò~p'æ³&¯KŸ%ûÛå­ú${v¼üX¦f\1íb\y½»ñ_“Iq’³x–7|6¯çæYú.®TþêàÖEeý˜Á-Ÿuãð¬%8É÷ØÑéíªß½ÙHBï‰Y–/æ=„g��®kËZž]®†æñ¹«ËtAåR/5ëAßH‡ïK-j&LÅéõc9+ú<ñý¾ Š6ì\$ìj@ù*“¨/þðÃ"ͧ2ú²{Íð\­yÎBi1M_ÿLŠà¥Ás('õòœY†ôm,oB_:µÓMò²rðÖ°üÊ„ÃC3ov]öü_ddç¡ó9ÈSïqËÏ{*±ßµ¡y<ûÓÃ=ûY54_žÅÒ·ëÔ½ÔÒðhÂh½æÙ:-軚\³œ£_ÄïºgÃ¥†æ2³AÏ„[šg¶Å4[Vó·;~Y ….÷Ž$>ÓÏgÅïåa[¹uTœ€dü\ý;Ø“©ÌI‡™·•}Žžx¾/~ðJR;½/’ûËŸm‰^u0ßá^$“|Q-}Oú&WFß8<¯X×öofÖIñ:··ŽmÖmð �Àumax>”^^¶P «‚Ó<lxÎoÌ«ËÂóR€¹-ÀåÀM×¶‚zOMËâ¾äƒ n¿Jš] mño‹VÍà¥Äñûö-ÐÐ÷ê­deëw¦ÚÝ0¨AÌ—hòÕ>ª´¸7†¾5á¹[j©¶JaTÃs6«Ó¨ÌsI}~å�ý¥œíßþ`¹¥Ö2Ë2ø±´®tº&<¯*»¹Š®ûžžô-¾ƒs=ÙÈOÊ×cºŒ{ A¸žíw±cN¦ì á�€›ØÂð\: WÂD)i«i\.Û0ÃcO¼zë§ jkZo]Ks'Ÿ†H”,.ÛßX)Ìf-Ó»K!ý2ýUžkxË[ZÃß$¾á¼×‡JCçQ.(¹ò½…j»Ux^÷ÚʲV§±˜g½E‡Gâyz¢TžŸ Ðz™…†õG¥÷Ö‡r¹Éª`Ú–õ}×ÚÛô¸ä.ó½IÐ+} Ï��ÜÄ= ϧæß'â—Цà¡ãÖ…ç%ziÿHú•Ëö7PZ–¬þ¶¾ ÍÁŶH¥¥‹+|_áy$çZ aNtŽÓrWlMós¥ÏžÕJ8Ú–](îm³¡'SyKsCKt¡qÝ´±"ëôòšgý¿­[_B��¨ûžÿH–o‚RE-³{¬l`¸Nx64¼Ý¦¯]Ãæ¼ôÀ¶øõj%s³¸?Ê 2NËŽ\iGÖbÚ4´N6¨Ì¯ÉÆÊ6¶!<'òG¸ßPrQÄåçz ´®ÿçÒkUбðl—í±ô¢Orž ¤³êoÕ¸nÚÑï@½·¦q ´<�p÷/<>š0jÂS<vÁG{^ˆ²^ê¡w]xÖ¦eoÓÒå|¸ÚÖ·ÚE³Lq> ÒlµW ·EOîF>ÿçEͳuóðœ…`m¯ß0ø»DÁS4ÿ÷†n܆ðüA>›ïÈâæH]ç‰ùœÚ;G^nQ»9ЪhWÆà‡ïJëL§¥7vö‹ÚîVáÙNËÕ«7~wÌtíƒÏ%|¦!zEW„W„g[+mK•šêøúy~þ|ñx á�€›Ø¢ð¬!eѵ—m µáWk�Ö€¨Ïwå?ýkÑÍ™½ÁîUöùkOÿ¸úµ i/%©tyVë)£ýe¸Ø¼rÝtµœ@å=_dÝ¢­êmã¦eÖRxvãáÛbYêu‹®êlo!+Ê:¬âï CP5Èï«<¿jèŠÿÓ?KÝ´å'5Ê»¥×¹Ážå߉ì—ðŠyþã'ùw­Vý8ȨÒ5œÜç*Þk7o{‘wU¨ƒÖž¿v]ÞU¿•¡~’vex6l¹†ùûwêWMV|~3Ô¯¬ÏFË_¬® Ê6��¸Ž-ky���¶á���h‰ð ���´Dx���Z"</Ñ^Š›©Ö·ìÒ���÷ á���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„ç[ºLCé.ucw ñTû°;•ØïÖžsCÑÍÝ\f“X¯cÆwÄ b™ÌæúÄ5Ժף =��€;Ax¾% ÏÂÔÄ×&ž÷$Lgî±s‘H°ÉD3ò|,Qÿ…$ÓoæÁ7™&/¤M¤¾¡ËTÂGSxžÆâ—O–oy]���Ü#„ç[Zž›ÌMv~.{y@~HáÙÒ†#×ò^6“4ô Ï��à^Û¢ð¬áÊ“¬táEVÆÐéKôé“$ƒ^6~p"SM•³‰$oBñ;y‹fO‚()•;äÓÒç´„âO™œ Ýë{2HβpªÓ‰ñìët¾‘¼‹ž]+ _?<‘$Ø“ ùâo¢l£dexÖù$º.óu›ÇO7h Ï��àáÚ²–gW»«¡y|.³th‚­ Í—Ÿ%î?ÉÂ×|,ÇÃ÷ráÞ%æ“x ½~,gåÜ©A²ë‰ï÷%8eÁ[K&v5\~•IÔø!¯æS }Ù½fx®Ö<›PšÏ«‰Î¿;äbÅ Ì2¤ocyc‚f§¨¾†UáY[¸÷ú2M‹Víùôƒ }·N7¦ž Ì��àaÙÂð|(½¼l¡¯bM¡Ñ†g­9>w#ʲðÜ?ar#l�?”ƒÓO"Ù ’Rð7´<þMBׄom}~)qüþf-Ðkó µgZr—ê7IRç ��Ž- ÏGâǧîáŠð¬­³q¹là =ñl‹²}gƆç5­·®¥¹“Oà $J&fN·T¾!°BûA©dð7ÙíŠþ&ñ&æ½*<YK³tý¼Y™J2©Äø5Ê¥0 ƒËÔ¾Ž–g��ðpÝÃð|jþ}b‚ß+IíMvNSh¼*</¹qt$ýèãíBìª�k[Ÿ¯,Ù(‡ÛŽÿ‹ŒÊŸ¯­5áyÉì£Dý#‰Æmt«jž��î¿ûžÿH$Üm¨.j™ÝcuíðlhKð-ûIÖÒŒ^o¹å¹±d£ðE’Á‘«IžËl|,ýÁª×®qðl×÷t¯uÃãUÏ��àáºáyôQâþ¾ñص_È$‰²Þ*ê¡w]xÖ¬eoÓÒÍ}Úò| ½pÔ®åÙÞüg–)Χ‘÷œ¡7áÕ묵dÃ_|¶%wžu½ÚZê·éâ†AÛòìkoM5á7Ex��×…çjM­m µáWk�>wÏwå?ý«V»ûJÒӋמþáþ¿<­¬žý—’$¯Ýzúü=e4˜OS‰M¨/×M—jAC¥/Ñä«{¼ìÆekœD×Ý×ì¤$zWíâoå²ÞPÓrðk‡��àÙ²–g���`{ž��€–Ï���@K„g��� %Âó’¬û¶ÊMo«n†��ø®ž��€–Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx°¥N%ö»Ò S¡GÈ–¦±ø;ž„é̸­sIC_‚ä‹{ `Ù÷¼¯ú>÷„g�[Šð|™†ÒÕ>åýX¦nÜZÏó³Xú½¡¤³¹`Ù÷»¯ú^÷ÛžçSIãPüŽû1’Ž/áI*‰9»É ói*±yÜq?XÒñ‡r2¹°Ï™#Ž„]÷ÞÊГàx$Óo¥çË?tb<å×ׇŽxÁ+I§ßܲ ¦ñµÅÁî›LÓXB×=—Mãøyþ!§Å²tÅOÍëgæ,Î[Œ{ýzÅgɇ‰§´Ë–î—Ú†çú*“¨/ýø³,û~÷ÛžçŸ%>8”ðÍ{™g22‰â¹•ùôDÞ^„íKÌó'C¶÷ÌóçöY]„mË„òѰ/½p$3;Ÿ@â³<«¹ÌÒŸÅ×çÝ/ VÎ$íûM`ïE2©Sô�·ô‹ƒ&8'?HÏ?–qù¬l6–8è¹i7,§¡-Nôy=x”O·¾LÞÏÀCöw…ç‹D‚î@’‹ïí° •ïx±eáynþÏe/7œÅ|‘$Ø7!ó?Í¿½†3 ¾CñŠ`ÛJm«ônöÇ®_n¨>nÏV¾µé6…çÙHÂÞó+¾X„g|ò+*zåå…^Gv:}‰>}’dÐËÆNÜÉpõŠNuÌŸ3'Ò£Iv2k_ד ˬ¸êd‡ÏÌ ·^•:–O“wæ„ÛÌÓŒ$gfoaö“÷ò¦tõjÇ $J&fIùX¢ž¾^ŸsWw*W´Ü8w"œ/ëÎή9ù~·8ñ/¿Gðl"'ù<½$)®b­áÂóÙt$ÇżjóÑ×ËP/Û¸b¹WU}“³øhž߯ ™$Q¶ýÚï°ÙfÞ™ÇÅ1ÊÐ+ÇÇÝöìkì•cÝ®ò}@y›.mëùñ³Õ6£Ûï»ÚÝ—f{>0Ù@¯àêóñb9u(–ã*›ÚWeÇëlü9ý⮦ëtc™œ›|°‰}•mýÝÏÆ¯º‚­ã6¾¯ú¾÷[žWÓ2=ÓÙkhùµÊïo¥Õ3¥ì_´D÷Ÿš×ç-×+³}Ù&_ݧ!<k�Þ ³»Y§y9 ÏxxÜÁDDãóìd7?]êvõdõvàgt›ÙÏë‰?ü`bóéúæ doZÉhz Ïþ´¯ÍD—z‚¼›mOóÉk–or±—ýʼnùì£Dþ¾;€)s‹ßË$ç’Ÿ×ÈY¸¯*W›ôst½§&ä8š)iCÁ@v—>[Ý·è{{}Žô½FP¼z­áŠýÞ•ë¬Æžø›}KåʾwóI${þ/2*‚Ô7™j(tÛ”ÌÏ$y>X|O-½rü|õ]U9ÎeVo3#9·Ûá@â¼TÓ˜Û“Ë'.(Ždü¼(åT& &ÑDKÛë*›ÚWeãw=O¼|½¹+Ø]› 6´¯2SGÒ+B½QÙÝÁ¾ê;ßGlYx¾: Ú/âÊ@ª_ø£Ò™Wí R.Ûp£²0¼/Ï¿:Þm<å<«³6ï/AsKáyÅNb‰.g~†X–ßÛvšÀ6Òïï¡ôò–ŠÊ³9ô5ôµ½Rë*ïàu?â'¸•i4¤Ë–æW€N墜õ€f‚Dã¾H—åGóžÅÁ.; Ýð¦Ûª\.IË5Õ6¯Ç«×Y™Ž^Ûî;ßå¬ñkœ}oV_9>0Ûä¬ù¶2<7m3ù´j XÝ.Vôþ`Þ;ø±E™Á¦öUù稵Üj#ž ÆÜW•ôEõÄóû*ö<<×BéªË6zpêÔëv² ÚêýªMx¶ÁÒôìåÕÿÿbÃ4{£¼}êÃÛ„çu¯­îG*Ó(ͳ~Ó±^N}ì=nhaÑÑníÒe<ï]ÊÛ©.C÷¦u˺ßhºÏÂÐéV÷‡ÍëæZë×–¬<]Nðýr-ÍùÍüZr%îÒÿºÐªÏùfÛÿÏæcتðÜ´Í\*³pý¨²-V‡zYS“Mí«VŒ/¦·á}• Ð}óº¼äCÝÁ¾Š}Ķ…gýRî¯ï/ð¶eM–‚¯ªU½ô4^å’UIÃ4VmLjñÜu6DÂ3î³- ÏZoX¹é8³<¿¼TãP‚Z Gs«m3îýÏæó¦Cé­l �ʲí£ßײƒÿÚ¢ð|Eùç•¶(<·ÞWîJ™½’^\eÚô¾Š}„Úºíeåe!¥Æ-nlÒ*<+­‘>”nÓò5MCƒþŠþ_üëlˆ„gÜgÛžÿø£é Vý “ƒ¢T£^½fû®Óe¸Ux^Y¶Q+«ö{-×ïÒ½ÀUt{Óïç…Ù$V]Ê×ãöª² ·åuÓÎÊmæÊVOÝŽo[R°=á¹Ý¾Ê¨ìŸj5ЛÜW±°¶,<+ý£IßÝÔ’ÉûJölh¾¼iWu«´ÏJMç©øõ›§¡]Õ½_שּׂ|i³ž}ñ¯³!žqŸmOx}ÖžuJ7Ù›‰²²í«œs•”;™.÷1¯ì]êýJíç•$7­ìÎöÚAN÷-+n\êså~¯Ýú]_ÓŠï›nWO$ˆ~/ýÖA¾¸ï¬Þ080'tå^\j÷éw¬——@é÷XÓAo¨kžužÚPæÕoLå­Ù†m‹¨ x^µ7 }Ÿí¡£zÿíeË–¡”óÃö„ç«÷U:®vbo•ôæöUì#2[žUv袛íÚ奼µw~f®ÿ#)Ë?&b¿$•×ä¯Ó€\®—®ÖH›ÿOù©ÔMMe(¾|ü_-w™§æ ­Nþþ¦.fòéÔÆUžîƒêwØîô‹í´i›[1T¶¹|›ÉN*—^ë¶Ûb;×í¥˜çSùéßz¿¶gOÆOG«ö fßQÙ¯äó^Þ¾;~(o\7RÍûêu—ÍṼ쫻ª+ïGêƒ.çÿlØÏÔ֙ݗhëàÞú²9|Çô{v(QrRê6MÍå3܉ÝrWu¹¼.·ôþÓžàuü¢Å6“7¨å]Õ™A»o{«ÇU÷’úrØmæµ$åðh,‡çMí«^Ë,mc†½’Tzn±¯Ú÷Å_Ú/5åˆMì«ØGä¶4<�þRzP_Q[ �ì#Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„g��� %Â3�lÒl$aï¹$ü†-�GÚzÇ“0¹ß»S‰ý®tÃT.ݘ;·Á}3áÀ÷ÉÌvdÇ›:¨}“³øHzáH8D(l}x¾4‹xàö‡f膒Þiªý«Ãóf÷ÍÛž/S »ùÁ¬<ô$8ÉÔœ,\¦¡t—ž_ Ù"û£”Çw‚D.Ül–¾$Ű+~øN&“ÕêûŒ‹D‚Ný} Ãñ�lÆLÒÐßÌAm>–hïHâ³on€ûK³„Ùž§ßÙÁ\³Ø£›f˜-]gÞ7oa˳®ø½Êl>ý Cÿ‘ô¢±ØÆv=ƒk§¬UÎb¾H<–ÞË×ò²÷T¢ÉW7>³üú¹ÌÒ¡ôück€~ì‰×=,­ì¯2‰ö¥ãyòØeÚ°¬Ö­¾x�þZ› Ïssn=ný„À=Ex¾¾m\g›ß7ß‹ðli‹ï®ûc¶ ϶•xß„æszŸ.·³ž•ä¾ôúAþáÿ,‘ ß^Þ̯g.½ÇD?‹Oxnf6‘$ ijWi:⑼‹ž-¶E}þM(~q…§g¶¹D&³ r=÷žxÙéô%úôI’A/?x#ñúš®øñG™œ Ó阀|2i¸d·*<_È$¸å̆Ž?”“ÉŠÝïü³Ä}³<µ“tàá0ÛDeÛžn^ Ñ;ó¸|¼›O%=ηïòv§Û™n›ùb¥ÇPw•8?¦—¯@ëqÖìNÌöÙÑÇÞ’Lµ1knvï$ôw³×Ù}ÂKyH?>uÏÇ‹åÔaåößd±¬Ëƒî[tY†È®„ë¸Ï¥eÒ}щ½Zž•käïm(ÛX¹¿Ó7/®’wÃr:úŽN?oì^“™OGrè~ÐMãxd^_½R¿v½—­Ê0k—µÝ:«ÌÛ Íeßdš¾*ýý\U€Î'_Ÿf¹G§Ú°ê¾Þ@â¿pß|oÂóü,–þ^$“üËXÙÐÎr²3NϽGƒtþ~§9<›wN"ééÃl¸gúÿÎÀ˜Ûñúÿñ›†ð¬_œ½ÒÀ²ìäÔ~È,ÊlGC_vómÑœ¤ß—Z²Ûë›íqî&šÇçöJ‘—¨.uùÄlçæ5‡âù¾øÁ+IíÁÖ°óé7Ô¼5…g½ õ«ù;7I$<7ó®ï¤ÝU+»ŒnðÀè1pÏÿEFù6¥!G]Þ°5?“äù@†£©Ù"rºý>7áG·»lû] L aÍSï©9Öä8ÕéeÇô]3óñ±ø½jXÊÂã“ì<É0ø¹z¢kOÚ0aïcmû_GñWµ¢êþ£WÛßèUïýÚ>¥i?c¬Ýßect]ìzž™‡[÷nŸY´¤Úáú¥õž­ó§Þc·_m¿Þ­Uã[,k»u–iÎ`æ;•„”ºÕ“!ÿgIu¬Ë·ûX</ÿÌî{ØÍ²ZÕÝì›ïAxÖ3ØœÍíË 9˾•39šÂ³~y÷$H¾”TÎ<V…gû‡Ñéîk@v¥Ñ{9±ÿŽÍ÷ÖÌ¿ÏåÚêòÙ€eîÊNüÙíä[*væz8\\Eªìä󃓆g°óç2[÷V¿Ûºá Öø:Çœˆõ˺ŸÈæ <T6<¯ !nŸË^í o&?þήž‡YXªX>–Wé>æ tì/3ïüxÞ®ž¯¼mExnR[ÙºÈ[ÝâjüªÏ{næ·çÖõ†Âs“¥×Þ2<74tfJß/g··È„–~/ê',ênöÍ[žk7ûÕ/•¶iyÖ?@å,dyÃnž³³OëŸm ˆÙ`+á™–gàZ\«‰½ «ƒ^úMJ—Sõ²o\¾4hÝþìBG‹í¬²ã.‡çRÀ®h:€5ŒÓýGyþõ¡v©Ó^•j ëÀƒâZø/Û¯ ­úœo¶Ûÿlâl`´ÇÙš†×ViXzTÝ^+Ãuz¼hžÛû›ö=ÆÚý]ö’ƬR¬‡Õ˸xߦZž¯^ÖÛ†g{‚¶¢6Ùîgõ;Ѹ|Íë÷®öÍÛßò<KlÎ&*—yËá¹LW¨ Ò3³¡î/þ¸å¡´W†ç¼e;ßpµª×Y¼·1<—µÝ˜�˜¤*ãèHúörª¶–<¯\n¡Šå_ž+„ut™ý¡xÈææ},ýþ±ŒgÿµEṩò&î:<_µ¿ËnCxn·¬Ûžïnß|?jžm±··¸Ô{Ux>û˜ÝØ·´Ât£Z\îiÏY_€{ÿý™ü£iÃU„g`³òmú«Ù†wêÖŠ0Û6<ß²lã—úìý½¦ËËÀ÷ ?^Ø«»ÍýèæÇÞ¦²,€uÓÎÊðl³–{ÏZÈ®2o¦?ß6A°íñ¾a?£û¯µû»ìáúð|Ó²æõn5…Ó–ËzÛðl§×¸?­•m´Ïw¹o¾77 fñfãÓu®Ïÿþ-nò«ªnT˸쒔=‹Ö®êÏÀfé¶£eoÓÒÍ Úò|m—öDy_‚xl·Q}®¸»ßnóí[ž›o<t-Üe 5Ãîx»f|å}³<ÚƒGQ“§®Ôp÷ŽïžHý^jyt,(zÃàÀ¹bû5ìv·¸Q×¶æõ»y€Þ ×6<ë<µ”²Ö»Â|šÊÛ(ž¶Zº·¢‡†ì’õ†QíuÁnç¶ Aåõ“e ý=ñ‹}F¾?*7ε=Þ7ìg®ÜßÙ‘Í!³¼ïÓ|ä?/­½‘¯|à™UËõn5…Ó–ËÚne?—æ°ä…Ùw—{qåBù÷¬Ux¾Û}óv…g~K%•?ˆ¶.žk5¬î¥yȺCù”üXêÞ¥4úò­¸yXbO<_J’¼6;û¼›©¬[¥<Lgýº—» 2øôÃÒ¶g[QŠmR˵´¥%ï*I·¿ÿUíî¨ÒUÕºýÁbÛ­vÿdÆ›÷‹º¶’4Þá <4ºÍJ”œÈR²{ÜöY¾Œ¯Á¬±«ºœž,÷«ï/¶ïy¿XñChåZå¼#|?a†úIy}9ìñýµ$åû§Œõá¹¾Ðå})omïÖVtÍVd—«÷3ë÷wÿM~ú鿹çÌŸLè~´˜NvÏWu9Ígj×våpº~½ÇÿñºÖCyÈç±nY³×¨Õë,k¯N»4'Kú÷½¢«:;äó,¯g·ÿ¾ã}ó¶<ÀmÔZ§ïŒÎgUm5�üôJ»víWoÙýÜý¾™ð àù«Â3�l©ÙG‰ü§­é¸=Â3€¤áRêª{�àÁ¨•ˆtüÚÕ`“Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„ç[ºLCé–ÍÌO¿&?Ÿ~¡¿ëžëIeæžÓߟŸMb ¼Žy®#^ËdÆo��l#Âó-ix~¦²ˆÊ5³‘„½‰ÆnÄ…Œ£#9ˆ?g?›9KÔ!Éô›yðM¦É éGc~R��` žoéªðÜøü4¿ÉD2á��àÞØ¢ð<“4ô\鋬Œ¡Ó—èÓ'I½lüàD¦š*gIÞ„âwò2‰žQR*wȧ•—Pü)““¡{}OÉYNu:Q ž}Î7’wѳõ-É57 ω{.<S¶��polYËó¥Lãƒ,4Ïe–M°u¡ùò³Äý'¦3ÛZ{<|/y!„–BLâôú±œ•sçe*a×ßïKp<Ê‚·×ÝPÒ˯2‰úâ?dãÕ|*£¡/»× ÏÕšgäóy©¹YîAèZ–Õ79‹”azîטeH߯ò&ô¥S«��Àßk Ãó¡ôò² ¿4èêmMö³ðܤòZdžç=󞦠š…ç~^{¼)6€.jšµey|,}ß—§s"à?]ùÚÿ&¡½©P[Ÿ_J¿§��`Ëlax>?>uW„gmËefxì‰g[”í;36<¯i½u-Í|^ Q2)õ„qCå² óÿÁA9,›0þ,~8Êæ£õÏ;»æñoobÞ���¸3÷0<ŸšŸˆ¼’´(…0V¶<_§ô!ë £}¼]ˆ-–en²ósÙ«ß�Ø´¬F¹K»Žÿ‹ŒÊŸ���»ûžÿH$ÜHrQ+i(j™ÝcuíðlhKpw9Ø^Ç|IÏö¦¡áùéçŸ'§=l»s_$Ép45AÛ•z ’R]7���þn÷/<>JÜß/ýÐÈ…L’(ë­¢z×…g ÉZ¦ñ6]ÜÜg[ž¤——T\E{×,SœO#ï9ColtuÖ³‘ ƒ_K­Èzsã ,ÕZž��¶Ý…g Çy÷r;ÒÕ/løÕÇ€ÏÝó]ùÇOÿ*ýbŸÞ`÷JÒӋמþáþ¿<Øéêì4<û/%I^»õôùZO-̧©Ä&Ô—ë¦S À K¿0¸b”m���l·-ky���¶á���h‰ð ���´Dx���Z"</Ñ?ÜÍ}W ·ìÒ���÷ á���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„g��� %Â3���Ðá���h‰ð ���´Dx���Z"<���-ž��€–Ï���@K„g��� ‘ÿ®ö„HЬi����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-2a.png��������������������������������������������0000664�0000000�0000000�00000030731�15030617045�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ê���á���ž?L���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��1nIDATx^íÝÿoW¾ÿñüþ…_>R~@ª!ñR…P~�U«ðA½Bˆ^d…¨÷P…ÚîUÃòQéV÷ÒíÝëUzÃv—ÞîÇZ)]jÑ]oµ,ª?½t)­»MrÛ°…¦¾K¸P¢”åK¿>3ã{ìŒÛãÄ“ÌóQ©çÛ™sÎ{ŽÏÚ��� pÔ��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� pêÙ„¢mmj«Ú£1z/­ì¼½~Ë\W"ÚáyŒVj*vê}¥³ìõƒâ{¥c;ŒãëSüÊ´½ �hÅ´3F½ÚåyŒ¥©K±ôŒ±þ¬qjýÅåÑ„²ù XABÜ£~O™øn»ëP4qÝZ:Ÿ=¯Áèky{ô5]l86‚Õ¡a¥gí?}˜ÏÄÕ]^ÙÎguq0ªvs™°^̪åíˆc6­XGþx;bi£¹hÀÌE ÅÿÒØw .KÝÌk&}Rq+€öi:¥ö²öÀbì#sF±è.;P7ÝTj`“Ǻ+IóÚR`% q îîm(VÌ#HŒuµç+羄&뎀ÍJyP]±æT.ÊÖî¹6—·?­ÄdPzÖýö¨ç¿ßp�uYÊöÀ`m£Û@ûàêñ ¾ç'Szï/Î~\½ð+2Por[ ¬@ê^sIïÊ& ¤nÚËkaT,WN*jöx,y nìÍÕÛÞ>ÒÊh2­+ñ>ë—u�Ëc©ÚÃÌ%Å­^ygHŠOžº'RøJÔ— -V uÏŠ¹4�. g2JŠå+ëón œ¼h_œV&qD]ö÷ ©PAŸ§F³JmkkW×Àðâc̫ꚿ¢xw¾·§´23öuvÐ>Îòý<Pöâk®s(ß®óªsœ®st7VÃ3YØõ Pò¹}]Ë—Åß³.ãï®LÛÃvf®(1Ðm¯çZ¿7îsÊ7žÊMQÞl:¦ç{æµø>£³1sxÓ¸.vÞ�Âi)Ú³MhÀî/¦~%²ælêv@ÛçU—U ÔËêxw=¼ ¾>c×£æßÝ:’šÔlö¬Ž8çåõË©q]Üß)^“Òqö¯$4zrÀn3õWìú¼Z[J=Žp!P· úŠÙ38v‚âö#JMÏk~2¡>«²hWwüJ¾’sWD%³Ó+cóß(ÑgW’Ýqeò_öV-P/yá´Ø�ä{¥7¨/ñæíã.ülkqtŽÙ®°cïÛÛµ+}ó¼¬ãrÆ8ϱØhmГ#úËôxþº8ç[8Þâu-éùžÔ•™ÙüOšæ2÷°W#QÚ£þ@“‰§s2³ØEã*;o0’Kvåîêùjß­Scš¶÷km«êy¯¥jÌ*Íé@p÷¨ûhJiWò V½õbŸoìcqÕà ëë{v}k,kߢ®-›Œz÷¬Îøw÷1;¿ ØÛËoËn‹ÌÏÝK]/)•½g4IGì ÞiÃLÚRêq„ ºU9ÔZ1;•©]¹z••u'°t†¨TZÏC½záe#§Òsöe7ÎöºŽ(‘),S˜¡P»*ÚÂñ8ëä+úÂЛÂç®ë구Pa»¶Jzᜊ]¡1±ÊÒ<Ý­xæž½-ùüªzÞ�Âk©Ús±W î£=pêÖ±Ø=Ì5÷¨;u|ñ<c,·G}]<§sÄuÍ Ç<_ ºý9Ç[X§Øf9ûó¾F® õ8B†@ݪVÌî…’€ÑbþdyR±W ?¿×Y¬Â5{�RŠÇŽiÀùÙq±ŠÙ«‘p¸{'ìí+½ò䜧ë%T³ÒQfÆî)4•£p<Î’2•¼ç2÷CFy¥n,ónì\=.…m:•»+O Á»[•óbKÕ¸ë.wêh =X¨›Œv§Ö1êîï—'gúza쨻ö· 9ßó¨S#dÔ­Â^^1»zJ‚Qûg6£Bµ~2|àTV Ôq{ÖO‚·*¯W®Pi©<P/ô4;=3îJÏîUöô@ÙôpaüdþçM£²smoaƒd[ —ñ ʽ–-e ^ñšV8o�!¶Tí»î*«/m<õRó™ôaɯ©®u ß/¢S£¾®;P¯8„Ço n¢Gx¨[•CYÅì/X2Waš®F†¾{š7ô¥øó©÷øB×p•Jæ'•:b¾ÀiW%ã•öªüÈe¼‚r¯e })>|*w¯¡/‹]ÓòóbKո꩒ºÆG{°h nl»0ï¸k»Îº®:¾ä|ÜÔÝï Û¤RÍÔmÔãê® Å]1»f)ÿ.Š•‰XŽkÚyÒHÅŠÙ]Qä÷ßèïjÞ]¹š= ÓŹy«˜Ý?»+f×[ñåÿà‘ûŤÂùfD*?£@ö}Åb {v;Ø/TªÎ˜ts<Ÿ[ßœÝÀža¥x<‹ }qà…eæuÍ÷~·ãêùw7"Föýä¨>üÚü¬ø‚l~|¤ÓÐ9›Ê®}ùЗªç ¼–ª=(¯/'5ùáy}ý ñöÀý«gy=7ŸM+aöÒÚ ×?xTèávuð¸êOó»I{æ—â1;×Âý«‚S_{×·Å—j‹u½ùô¥“ö¿îZVÇO—lÛpWhK©Ç2á Ô]AãÂdN‘õ†®iÿ óášëÄ•º2n?Íßs¿Øâ^ïÈY{Zªâüàùi/)“zÉ®ØÝÓR¹¹††x%s;‰½Çç•LeV˜ƒ:ë_vT©Ìb ïžšËRú³¢ù KØ•¬ûÃJe½O >·+^wMüýâ4Œ öm<(8³ÎØS?3NÜÓ3šÇu¶ÂôŒVr “1-zÞ�Bg©Ûƒ’ºßœåÄ (i\=Ì‹¤|�ìþ• ŸŠUêR¯:</½FÇ”)Ýv±©8$(ÿ™{yù9íAìXÙõwÕÛ^m)õ8B&Ä=êXVî@ÝØ��À:–:��@]Ô±,Šc«Ì4���€u,½cä9[���ê���@�¨���D ���:���@ê���@�¨���D ���:���@ê���@�¨���D ���:���@ê���@�¨���D ���:���@ê���@�¨���D ���:���@ê���@�¨���D ���:�„@[[‰d%�+%�BÀ+`#…3X9|—X¯J€D"­¼„Õ|÷�°ò¨“H$+au#ŸÁ=�¬<M Ôø×ŠòDòÜÀÊã»ÄRðæiEy¢ ‡ù î`åñ]b)ø@ó´¢<Q†Ã|÷�°òø.±| yZQž(Ãá@>ƒ{�Xy|—X >Ð<­(O”áà¸uë–ýÍG>ƒ{�Xy|—X >Ð<­(O”áàøüóÏõòË/ëïÿ»½¤yÈgp�+ïKÁš§å‰2,zê©§šÞ»N>ƒ{�Xy|—XÏ‚ŸM(j//Míêˆ+•™¶Wôc^3™”âÝj‹&”µ—.â¾;biÍÚK+›V&×@W·békÉl:¦Ž¶~%²‹{Ù̦ëèP4qÝ^€å攕åÔŠ}¢²_þò—V~˜û·ß~k/õ|÷�°òø.±• þM¥6©­#¦´‹Áj∺Ìõ»•ž™·Öj˜Tæ÷½ìºkßµêù Ü\¿«¨^*—§¥ÓŠ}¢2sø‹“'f°~þüyûÈg·9M%)b^“Bµúq�+ï[¹àÏ(ë*«íà½Y«0/{ºÁÞwm=êN°N ŽêZѶbŸ¨Î Ð|1ÓŸþô'û“Æ5’Ϲ™+JÆúÔÉ7ÒÙ§XòŠfrö M—Ólö½¼s}þx;¶ëÙ·¾X¸¿Ü]>d×zí|1©‰{ ”ùëïrê³Y¥OÇõGŸÖÎMíUÚ9Í\~K:Ûó‹¨cç¿(9ñƒý™Kס‘{�@kù.±• ~µ@}·â™{ö2Աʴ¢!mÅ>Q3üÅÌe~8Û©Ýz\ëœÔçS÷¿àq"©£[{ŒzìN~•f»û™†ºwéž5êU#hŸÕñ=Ûu8uÃøË1¯é^Ò£{~£K3sFåz]g?®žø¸ÚkÔl¹õÛ+þ³_kø÷g '*·ÓçtôѨ^¿tÇ8ïûÊžyA›{âÊ<táõ_‡úï�­æ»ÄV.øeú|Vé“ê2Ç©9«laäËe/¾¦h»Ó 9Ÿ›ãÀ?Ô©XTíÑ7”r†Í´uëHjÒ¨¢ %ú¬QçöŽÇ«œÏž×`tCa¶®—”Ê>0>1Ç(Ý¢hü}%Ìqï%Ÿ›ÌãIh Ëìá0ŽñÇ?¶Ž¹r îêcóžT»¨Ïd”:3¾ïŒQwíÿÔ¨.ç\ØÿM×v6Çwɸ²ööϯ[×€N¦³fսȹ¸®w{Tƒgâ:2hžƒë{®1êóÙ‹:élÃzÇ`Xé¯YñzÇ=xJñ#'–¯A\¡ò×yyÒVìÕ¹‡¿¸ÓóÏ?ßðŒ0Î6j7«›c)}tÕÝ“ûP×Gú´qhÌÛ›onü„ëÖÕB<jÔh©#zä™3*¾ZkvøìÐ@ê¦ý·”»:¬žÇNh¼Þƒ2õGžÓÿMÄÔkõ^ר£G‡ßúTS³ÆAL%ÕoÿšÐ9¤ä”½÷òC«ûbäÛ+ïö#Î)£–µå¾ÒpÏn¿k/0Õê¿�´šï[¹àÛºý¹•Œ`2žÊئmþŠâÝíj·*¥|e´?±–[ß3Ê‹Fj¯ÛÖWÆŒÔݺüž=­¾Áó®‡�·{ÊÄwÛ:¢Ô´±ÂtJv ý W·}ŒíÑ×tÑ4ç­eíêŽ_1ŽÊ8ÌÉ„úÚ@ÙvS/YÁ³wEû@“‰§ÕÞÞ§ø£ªŸTêˆÈšú»®K>PÏï+¿'ÐÍïÏø»pîß(Ñg½ÖñÏj&=¨îèI]1Çú;ÛoZ¿=ûËêçb]Ã]Æq|o§y;Œs¸WGïz™tæ¢b]…«ùìY1Tºu1ýŸ‹\3óz?©®ØE+¿­ïî$P_Dþ¾XÞ†´ûÄâʇ¿8©ÑaœïûsǨ¿žÐÞ‘«®n[î¦Fc»µ®ó9½;á(kgêNýn³‚Ow0lÕaÿ¤‘ë®~ãû£:Öá ¤keM|Ѻèq¥®Nçdöâ¬×{·kÿÈ—ùžéÜ ¥?®ý‰k®sžÑåûÔ=ô™;ÓjºYwîÓž‘¿ºöwG£Çv¨?ùý·¡ëМ{�Àrò]b+|wú÷Æÿï0ÖÛaˆ ½ÌæöìžçC[ÊzéÏ»žÖ@´ËÕÛ\ÓœïYw*ÊüÐWZ2´Å²ãn@J>/c=ƒ|SéÐç!¦8ëK>Èuϸr]‰h‡ëÜ_ Ìïü·=„(í‹i“Õ»Rõ\¬ÿw÷Œ•~ÏyhrSr–åש~Íìs,ôô£N^.§Vì‹óþâ¤Ff„q¾Û°Ü´&’/©gÿI]6‡Z”Ë]Wò Q/Evih¬Á™½Ž+ÞcŽKÿLS³÷usüŠn,BiÕ3e3fy-«…¨?¡ã¥ã¿s×F´w£±Ïûf¨œÓC£~îÙò ¥ïæCçÜw íô¥nÕù`PP-P7ëή¶À䱬ëàû�°ì|—ØÊ¿,¨vz„Ìøâ ÅèÖ@<©ÑÄKÅ€ÖüÔŸT´«]íNsù¡›Œ õ ½7šÐ+®@»jÐéôäŽÃàþÜ^äXt;Û¯¨ç ÷wªê“—Œãé(yp«@*…¡4foø ÎÚÓe–~ÏãMÖqæ·•ï…¯´÷P!c_íQÅΖýš‚*—§¥ÓŠ}bq•†¿8©Þaœï5dö;]8ާͽ‚ô¦1_&=¯×ŸÙnÔ-íÚ´ûE<ñœ6ìÑu§{yî’N<ÕðUsܼÍìI^÷Ï:SoàlÖgî‡�‡U—¹ê¾’^uóW…]‰/¨¨ßÕø‰Ýêþª¬G½GÏœù›ý·¡ëàë�оKlå‚_TòÃ9JǨçƒÚ êK|c%­ø-¨GO)“4‚OcÛöP‹ì`»½/¡ÉüŽ\A¥³ßJA§4{ô¨ç‡ì”±‚Y¯õ|·ï@={Õú¬p.Ž™¯•6‚îêçb3ßxï| m*ýž³?ç˜óòùUCÏ}~‰ÁxK'óóÝ—m 5«!u¶CZý©ÖaœõëcÎÖñh·öÄ>TÖ·½œr·4úò®²¡6M£¾hºµÄêUßµ+®KW†µ÷±bïzcªêŒQP´„º=\Än±Çn›µ=ôÂ×lØFð˜‘ÒèìÀ¯¬–mÓgž mƒþN¯¸Õ£¯ðB¥h/:ímç?/n;j/ŽQ·ÎßÝÓn*Œ'wÆ—;cÔÍõÍ}ŒÛzqX‰s Á½s¼…‡{Œ½õé²ã1?ŸÖ•“ÃúpAÀm~ä:ãšöçÇ”ÇÒ»u×1XcÔÍkvD ³×Ý9ûW‘ê×ÌxÈŸ¿ñQþ!@}1•ËS}œíVªõSgýÚÝ×Ô§qغW/§ÌYXLUL»ÎZ³?¡ï|ÇóÆÂÍË:óë§µmÿ[Ê”L9h²ÍœõÅ£þ+]Èš=ÓcÔV¯z·6mêÒÁäu׃C#ªêf}`[š@ݪüŠ IÉ ŠNkÖñÊ)±ƒXó¥ÄÑ‹o[/Q¶ï.®c¥h\ +¸u-s§èˆÒV°ý÷‚Ÿ3]Áµ@ž×);˜þ·W¢ú_Î÷ÌcÉ? 8ËÌ@¼0k¹ÌO¼¦Žüpò±Þ¦’ÙRÚûtâ«Ã|™ö½”¯¸Ï£_#‰cFÀëüm\“c1sï¿c@±cî8LzÎúòÀ žõ<ÎewTÿ{0¡óÎÌ2öÃÄ‚ïÙùU:SNñ+¤»Ö_pÍŒüzM‰óÎŒ>î‡ Tâ\¿åÔŠ}bq™L¦7•R"‘°×^œóš9%®ý9É+À´zsÛÓÑþÇ^R¿¹±!m´÷Ù´W/Ä?ÔUÏñðeó‡¿üA½ý®ðè‘guâ­ÿ£‘üù™³¾¼sÉc®øœ~øè§zdAÀ\÷l1%i»†ÆÜ½úåó¨ÿ\)ëA¢L×ÁÙ€•Ãw‰¥àÍÓŠòD¦j/“öôô,ÿˤU™=ÄÙìwHH€å®)±ÿñ²9ÝW–¥½�,ß%–‚4O+Êe8xÌ¡,N¾”§7ß|³¡¹Ôï/ sXâ|¾`dsºýÑ¿jKS†õ´ÎÒÞ�–‚ïKÁš§å‰2<æ ¢N¾8ÉœåÅœ ¦QÎvP×;Eú“š²?]i¸€•Çw‰¥àÍÓŠòDsh‹“/fòó/’:Ègp�+ïKÁš§å‰2,å/‘Ö:ýâbÈgp�+ïKÁš§å‰2,ÎK¤O=õTÝ/ŒVC>ƒ{�Xy|—X >Ð<­(O”áàp^"mô…ÑjÈgp�+ïKÁš§å‰2æË¢æÐ—¥@>ƒ{�Xy|—X >Ð<­(O”áp ŸÁ=�¬<¾K,hžV”'Êp8Ïà�Vß%–‚4O+Êe8Ègp�+ïë|‰´²V/¯ü&…7X9ÔI$’•°zyå7)¼ ÀÊA‰���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�ò¨·µµ‘H¤U”°úyå;‰D"9 ÁA N"‘JV?¯|'‘H$'!8š¨hžV”+Êrx×�¼P7ïÜ SækE¹¢,‡y À uCðøÎ 2h¾V”+Êrx×�¼P7ïÜ SækE¹¢,‡y À uCðøÎ 2h¾V”+Êrëýýï·ÿoi‘×�¼P7ïÜ SækE¹¢,·Þùóçõæ›oÚ-ò€ê†àñd*Ð|­(W”åÖ3{ÔÍ<øå/¹¤½ëä5�/Ô Áã;7<35›PÔ^¾0uk žP*3m¯  œS^–S+ö‰…^~ùe+žzê©% ÖÉk�^¨‚ÇwnTÎÔ›J lR[GLéY{Ñ|Vé“ê²¾Ó­#©IÍÛ(jEeÙŠ}b!sø‹“===úöÛoíOš‡¼à…º!x|çFåLQ:ÖU¨[æ5“ÌëíG”š®!TŸ¹¨ØÀ{ÊÚ«]+*ËVì 9Ã_œÔÙÙ©L&cÚä5�/Ô Áã;7*gj¥@Ýd÷¶·µ«;~¥z¯úü¤RGºÕM¨#4ZQY¶bŸðæ q'³§½Yœm€uCðøÎÊ™Z-PŸ×têˆÚﵤ4=ŸÕÅÁ¨õw~{ö°˜ùo”èÛPØG[[—bé[Ê^|MÑvgY»ºŽœU–14XEœ{~9µbŸðæþâNÍšÆÙ�¸Q7ïܨœ©Õui6S‡ùÝhB“™¸ºÛ6i uÓø¤|lûu%¢Åõù+Šw·çüBÀoð3æ§ÀªÐŠÊ²û„·òá/îÔŒaœm€uCðøÎÊ™ZGº½l&ó¡NÅìžõJºc&£Ô©˜Ý³N ŽÕ¥•e+ö‰Ê¼†¿8ÉïŒ0Îv�Àº!x|çFåL­eŒºÝ‹î }éPü½”¯¸¿W¨?°‡¾˜Ó<&5šxIêXeZQY¶bŸ¨¬Òð'ù™ÆÙ�¸Q7ïܨœ©•u׬/]ƒJÏÜU&¾[míO+1ùÀø¼ü{¥ú¼5Lfƒúß[r†Ð¨cuñ[Y:ß'­îdÎóùçŸÛ¹^;çû¾äî(“Ô­ëìí­Wò;ûÃ9Ídþ ØîüǶvuö×¹ì}ûózØÛêÝ¢Ha[1%3w”³×h »m²¯¥“"ýIMÙk¸ånÿ—^ì\³ð×ášÕ·¿å‘Ól6­ÓñWuôÐ.mŠTh‹­{%¦ÞÎöüqG¶¨7öefæìj—›¹¢dì ¶vDòçßù”†ÎMjA âÜWŽ% Ô™G½½Oñ+æ —{ù@½m‡QÀ¿7V9¯Áè×ÔvåÔý†ÒßÐ+±£F Þ®®ØEÍ^BuÆ·«ƒßÊÒù>iõ'3X¯wŒó݆×åx¿:wþTïŒÝð’æt;ý¾N~£3š6Ö¿ôú>­=Ôz£ë¹1 mܬñ´¦f/ç¦5‘ü©¶nù…Òw[ª›m“ÙnÕÐI”»¥OcOê‰Ý«ÝW ^ãþ–‘Ï£oêg'ÞÒïS§Û±Ý󸿯†´qýÓŠž¿Wr3_*yt§¶Ä>ÑÝü*5ËÝþ‹NŸþX׬ ßxˆ»ôíYûŒ’7Õ›ÁwÝ€¦[š@½Ú¿LÚUìÔûJgÍÞó¼ùìYé2Ÿ´7(:˜ÒÅSOÁ·ùÿç• É„ù·=»Ë¬=]£±­öèk½ø¶úÚóÿѵM`%sÊËrjÅ>Q™9¬ÅÉ“JÉÇÞÈXuçûÉénúÚ²íU}:]G¨Ù.x…\DnJcïŸ×Õ{® <÷WìÙ¥¡±ì­Pkàl\¯±ãêÞ×å ÿ®ŽU¨»U>¾ÜÍ1½ÿÑUݳÿ6å®hÏÆ!Õß©^&è×eeñW7`)øÎ 2h¾V”+Êr°˜³»8yRžÌ^ô?ýéOöšõs¶Óó×ÒmÚŸ¸VûГٿé“ãûôèÑsöä>ÝýD±-ÿ¤‘k­ìœ1ÄMÚÑÿ´vojW[¤S»¾­ôTÙðž{_èDOT'.Ïä‡jú ÔkØ_ËÔ0Û{{GtÍ×"÷5õɯ´çÑ—ôQ-ÿx"å¯nÀRðd*Ð|­(W”å`1ƒq'OÜÉœñ¥Ñ—Hζ2wI'Û©~ýóâ˜ãŽ'ôbò«’Ó¼9M%åÇ–GzûôVíÁ}ùaÿ¨ýñ/òÃjZæ{½5¨ãïæ‡aÌÞ¼¬3Cûµaï[úú¡s`æ;X½êúÌâá/P¯e­Tk >§™‰¤Žö<­øeïL%Õ1ïãµÚûXÓA¸«€¯ºKÂwn©@óµ¢\Q–ƒ#ÐÿàÑlZ±ŽµÚzxDcVo®ùBáuxs¯†'*ôîÎNiüÌ¢›)q­Ñ`s?Öñèvõ¶<H¯à¡ñ³ítbÜ Ëszøõ[zr{qˆ¿@ÝCÉþZ­–@ý¾²~eÜýþ‚ô‚ûº9þG ÷D_â¯ÖðÇWÝ€%á;7ÈT ùZQ®(ËÁñüóÏòÃLÎîR‰¯¼Î]S¢w†ÆÜ™9[×E×í¿½Ô²N%N€·O± Ïð‘ûJÃ=»íÀù m/ÉÇbÚÞœñõ%ûkµEõÙïtáxŸ6ïyµÁÙ*kúPˆ9÷(‚Ãwn©@óµ¢\Q–ƒáÖ­[…¼0“´ûý—HËùËë9ÝJÕ–Þ7ôiÅu#°»¨ñ›Å¿§ÆÞÖ³F Ïx•¿Ò»¤u;_Õèí²· gÿ¦OㇴµççJ¼*Aáü—ÞõˆÖ42ÃL=fÆõ§?\´g1ÌÞÐØ[?Öæž¸2†¢T(sz8ñ®vnÔÎØÝ.ßDû›ŸÖ®ÈHN6¡çº•òĸ?¦.*~`‡z^þ@YsæSÅ—‹«]ó^ûBŸ²ÖÌm¦·žÝ®žø¸ZËÜîkbxŸ"kš0+Lµ{´.‹äs]š¹­<u–‚ïÜ SækE¹¢,ƒ9¼ÅÉ ?/ŒVã;¯Íy±O¿¤•æ²ÎÝÒØÈÏÔ_˜c=¢Ž­Ïêõ ßy÷†ßýLCÛÖªmÝsJfKÃ-+¸µ·4yÏÙÿ·6¶èpê†Æ,ùëhp ª.û´µ­ÓÖg~£ ^½ÅÖ“ÎzfòêQÏϳ-Ѻƒ¿W¶ìàëÚŸ3íñú”ºå'¨\Œë„òT˜ÑÅþ·Q¼Ö©¨W¾sú~ì·:ÖïÌÏonc»žyý|ñÀmþŠâÝkµþðºå÷f¨rÖ§z>×§™ÛÊsòÁá;7ÈT ùZQ®(ËÁ`siÆ £Õ¬Þ¼~ k#}Šlnõë-–»ª‘½ëµ¹yÊW“ܵí˜s»ß±—`1´Áã;7ÈT ùZQ®(Ë­g¾Djö¨7{¨K¹U›×ÖøùMÚ5üe¨_,Ìeê]³¯ò˽¡0«lâ€ÖìÖo™ÖŒv x|ç™ 4_+Êe9<Èk�^¨‚Çwn©@óµ¢\Q–üà…º!x|ç™ 4_+Êe9<Èk�^¨‚Çwn8™J"‘VGÂêG^ðBÝ<ê$©$aõ#¯x¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dü5Æ÷•MÿNñÿxQ‡vnR¤#¦ô¬ýQ c½sÇÕÛÙžß_G¿sI39ûãšÍi&óÅz·(bw»:{cJfî¨îMÕ$§ÙlZ§ã¯êè¡]ÚéR,=cV&wG—‡©3b×zí|1©‰{®£2>Ï$u`ëºü5ˆlQïÐ);Ûø‘çf®(;¨­{›‡”œš³? ¦ÙtLVÞ•§*×vQsºýÑ¿ª³­CÑÄu{üròÁAn�@ÈøkŒoj4>¨ÿS*ùïÚQ!PÏÝHêÀ£Ï鯧Ð× ~ÿ¨Ã=«30›ÓÐÆÍ:OkÊ psÓšHþT[·üBé»Kªàè›úÙ‰·ôûÔiÅvl¯LÎkú£—ôèžßèÒŒ(Ï^יë'>®‡öÊýÒ§“½6c=TäfÆôúžÇt 9ÙÐCFnæ Å{·¿ÕØÔ}{iðYz4¡¬ý·e:¥Ž#JMÏÛ ê“›þX±í=ÚýÄfõ&"Pr�B¦iq6¡h…@}ap6£tlGýAUnJcïŸ×Õ’žê¿jdÏ.#èÿÁ^°T®+ÝQ!P¿©ÔÀ ¤nÚ‡uuX=ÐxÅîYã’õ«#–6þ¯^wŒë×£m±5½Ï'K(7s]_dnºÎyV7’ÏêÑ£ç4m/©Ï´Æ†öjWüc]häžBEêÁCn�@È,G ®és:úè> û«fr÷55ö¶žÝÜ«á‰&ôßýD±-ÿ¤‘kìK¥J >Eñnã®úÏ¥û£:ÖQi(JN³S£:¾çqýèìeu0{ 9¨Äw®ý­T¹«Ù»CÇF¿·Ô#§{—ÿS==ÿ©Ë÷¦{øCEêÁCn�@È,K ®»ÊÄŸ´Ç•çÓšÞwtÍÇølSnæK%þ£öÇ¿h`¼{½ªê³iÅ:ú•ȺNÞk™å;%û×[× ²íU}:]ÿ˜ò¹ñzlëOôëWŸ²ÇÄGÔ±ó_”œXê_šo>W÷–ã{Ð@>W|×^ ™}ñ þJƒŠšV7 iÈ �™¦5ÆUõù‰aíÚüž0Ǩ›vF§¶«ûÄj¬ÜçþgnWï²é¦*úÜ%x,ªá«®_Ìõuÿ¬3·*ô¨ß¼¬3C}ÚÜ÷®®Õ94ÛJÙ®Ã#ÉÕ7_Ö=ó‚6ïÖDcü›Ãz‡À~±µ¶W–4£±¡]ÚvâRq,Íîêëá~m/ ÿ!Po¶¦Õ hr�B¦iqÅ@Ý{,¶çK…51‚Ò ¿Rtó>ÅÎM60¾»QÍ£n¨Øë^]θֽ•õB7¸­–º{AÇ6ìQ<sÏ^Pχ;mÒXý?T Œs=ä�„LÓãEzÔŸØöS%KzÔ×®á/µ øáWz÷à´n竽]mÍþMŸÆikÏÏ•Ê:½×ÕÆŽ©á]hͤnøîu¯¨×0ëËlVc×Mg¸Ïì ½õcmî‰+ó°üàrz8ñ®vnÔÎØÝ^ðñ ¥÷¨÷õkêQ·~шlhx†™¥1§[gž×Ú½#ºVñ ¹%ëQ¿¯‰á}ЬyFÉ>fªÝ£u©çüÓÌm娹�!ã¯1.Ž·.Mm3B1GÙ<êÕæ¿û™†¶­UÛºç”Ì–ˆ¨wnküsÛNÝh0@ÓTòPÉØúB*ïµ-ŸGýåJÎ/÷ý˜FŽõç<o[§­ÏüF n9Ý;®m‘ˆÖü½²oΡ~úÅ'ìëaÎ'\ç<·uO™ønµ­A)Ïa8-’›TòÀ´?q­JÞ,~LscCÚX-oLÖ ¿kµþðºÕØÍPTå­OmçW›fn+Ϲžr�Bfõ6Ætm¤O‘ÍK5Çú aͪ²^›cŸè®½(Œr×F´7b΃Ç^‚Ũ¹�!³jãÜ5%z7y¯ k<ûš}Í™ sÅ2ß“8 5­~Ùv…!Pr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� d–¯1ÎéáÄ»:عQ;ct;g/»šx÷9u®Û­ØèM㪄ÔïôîÁiÝÎW5z{Î^ˆ !Pr�Bf9õ»cǵ-Ѻƒ¿W6´ê´Æ†v)Ò¶I“×èßýLCÛÖªmÝsJfÚ $êÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@È,_cÌõ<ƨ[£xêÁCn�@È,g ÎucÔ-ŒQ<õà!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dhŒx¡nr�B†Æ€ê†à!7� dü5Æ÷•MÿNñÿxQ‡vnR¤#¦ô¬ý‘Kn抒±>uFòûŠtö)–¼¢™œ½BÍjÛ_ åî(“Ô­ëìk¿^ýÉïìë0û­R/ÿƒ:¬m¬ÓÖgßÖå™9ûÃV1òçÜqõv¶çÏ­£G‡ß¹T’Ïù{á ¶vDì{á) ›”Ÿl,ßf[ä’S­¾+_þþ$4 r�BÆ_c|S£ñAþRÉ×ÏÀù =®õNêó©ûÆßsš™HêèÖÅÒwò«Ô¬–ý˜¤_Ž÷«sçOõÎØ Áé´qM÷hÛ‹g•5¢àÙ¿é“ãûôèát«î‡ŸæÉÝHêÀ£Ï鯧•3þ›ÍþQ‡;{446c¯a¬sû/:}úc]³*Œ{áÒo´gí3JÞhìjäf¾P¼w«v¾ø[Y÷š…@=xÈ �™¦5ÆÙ„¢žó¬nŽ¥ôÑÕì¿Mu}¤O‡ÆŒP­A÷T9ÝMÿB[¶½ªO§}ööÎ]҉Ǣ¾ê L§SxäŸuæVëz’gÓ1uDÊÚK3JÇv(š¸nÿíåºÑÆC[1˜¯Ýcû=ÚûXÓ-|@Y­Ôƒ‡Ü�€Yú@Ý‹`=¡½#WðµA+.P¿©ÔÀ6íO\küœV ¾WñÌ={!÷•†{ÌÞk÷Ñ2›>§£îÓй¿j&w_ScoëÙͽž¨ÔÓm¬óɯ´çÑ—ôÑô¼½¬ÖÃÉA%¾{h/@3¨¹�!³ìznZÉ—Ô³ÿ¤¿1Õ+-P·‚ëzá×?wá~B/&¿’+Ü®Ñ]eâû´ùÙ·­á³7/ëÌÐ~­këj°gºYÌãzRûž2ÓšÞwtÍžSn*©~ë…µ ÷ˆÏŸÐc[¢_¿ú”ýþCD;ÿEɉ>¬¬"M«Ð4ä�„LÓãZçÙïtáxŸ6÷ú ÒM+-PŸM+Ö±V[Øc©í1ÜU{œ«0¯åëÏZ/PF6íÕÑ“¯éù }¹ÞºÞåù‰aíÚüž0Ǩ›ãÇ3:=°]Ý'¾Ðƒü*eîëæø5Ý®¾Ä_UoŸº5Ô&²]‡Gþ¢)ëaྲg^Ðæ]Úh ƒ¥Ôƒ‡Ü�€Yž@Ý Jÿ¬ãÑní‰}˜Ò¯•¨ç®)Ñ»§äÅÊÚÆp×bNÓ£?×–½#ºÖ„KÛ˜Y#KúÕK—¼$»pÜúBµ¬ã%gܽר×I[DýJdWÊ\êÁCn�@È,} ~_SŸÆu`ë^½œúÖ⼃:ËïôîÁiÝÎW5z»J¯{-úü—ÞõˆÖHêFËXÇœn¥ŽjKïútÑõœN¼«ƒµ3vA·«ûì”ÆÏüJýÛžÖpÆ{Ø‹ÕÓÙ ÉI«§{©˜ûybÛO•,éQ\»†¿´{ËÍsþBŸ²óÝø{ê3½õìvõÄǵð·€E®Cî†R‡{ÔûúÇ5ô¨ß×Äð>EÖ4>ÃLA­÷è¢êÈçE5s[yêÁCn�@ÈøkŒ¿S²}aÅ)Îèbõp–žOžúÝÏ4´m­ÚÖ=§d¶<t«a.󙸺۶èpê†Æ€9‡úé—´sÑ9Äsº;v\Û"­;ø{eË~nLC9Ã;µû…¸þßÕ|p¼Ð=eâ»Õ¶þ¥–|F˜²yÔ#[Ô;ô_®_PæôýØou¬¿ÛžÿÝHÛõÌëç+üʲÈu0˜s¨Ÿ~ñ {{íêì=®sY¡DóWï^«õ͘²ê=ZÅϯvÍÜV^¾l ¹�!³zãº6Ò§Èæ_(}· QËJ•»ª‘½ëµ9ö‰îÚ‹Â(wmD{#Û˜»?¼Ôƒ‡Ü�€Yµ±5&|“kØE8Yã¸×ìkì…ÕUÃju@kxÉ´.êÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@ÈÐðBÝ<ä�„ 1�/Ô ÁCn�@È81‰D"y%¹�!ãÕ0“H$’“ä���ÔˆÜ����ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� €Ô��€�"P���ˆ@��� u��� p¤ÿ‚ŠÒ·Jm����IEND®B`‚���������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-2b.png��������������������������������������������0000664�0000000�0000000�00000021146�15030617045�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ü���·���!‰Ù���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��!ûIDATx^íÝÁ‹é™Çñþ7tÖ)‹I&‡ „‰Ùæ°>(¡ øà\Ò0†Mð²" !C !&MÃà4g¡ÁhWl––Fd`‡I£=˜Y#ÄÆ#ž­§ê}K¯J%©Ú­ê®·ëûbÆ’ºT]ïÓ¥ŸÞzë­=���P7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P 7���P wN{{{Ñ���œ 2'¸YXXXXXXXʶ Üh¡œ²Š›…………………¥ Êʉ‚./ÚÆ´ÊŽ…o¨YÐJ9QÔåEÛøvBÙQ£ð 5ëZ)'Šº¼h?ÐN(;j¾¡fýA+åDQ—mãÚ eGÂ7Ô¬?h¥œ(êò¢mü@;¡ì¨Qø†šõ­”E]^´h'”5 ßP³þ •r¢¨Ë‹¶ñ턲£FájÖ´RNuyÑ6~ PvÔ(|CÍúƒVʉ¢./ÚÆ´ÊŽ…o¨YÐJ9QÔåEÛøvBÙQ£ð 5ëZ)'Šº¼h?ÐN(;j¾¡fýA+åDQ—mãÚ eGÂ7Ô¬?h¥œ(êò¢mü@;¡ì¨Qø†šõ­”E]^´h'”5 ßP³þ •r¢¨Ë+_Û|"A«ž¼vii´¥?Ë̼2Ÿ©Œ{Òªé:jÒh2žÍÍsÈb÷7PVÔ(|CÍúƒVʉ¢.¯üm3—é #µ½†tG¯ç2ÒnÔŸ¿>ö"~ÙVf=µŽ ¦/e2¸'½›Ò<7Ï# C(;j¾¡fýA+åDQ—×yÚæõ¨+õ$p+Â÷¤ÞÉkóèfÏeо){­@&ælÇßÊŽ…o¨YÐJ9QÔåuž¶Y¸kÒ쟆ÿÊà O!pŸ C(;j¾¡fýA+åDQ—×yÚf9p¿’Éè½xHIãž &¯â©ÙXŽ»­¨ç;£ýžŒôùI -ó~v‰zÆ×½>||pÔ•V­)íÛñóQPwÇ€‡K£-‡£‰ÆI·õ–´ú¿— Ý4Ï;Û7ŸÈè°-è½ö¤ÖêÉñx?·n;JÀî/ ¬¨Qø†šõ­”E]^çi›8pǯ—¦´ûƒÔ/dÔ½Þ£ )ç“cé„¡¼¶ÈYô²t÷º×÷åè~#yŸÎàÌô Ïe6êI³u(§ú¾ó3tÂ`]»+¿=þ¹4ͶÕZd†åù¸>f{àõ½n…Ï™Ÿ ¥«ïÕ„Q}Ûv_-»Ï²¢FájÖ´RNuy§m=ÜÓ(ô6´¸;\ž¡d:¶íyv—è"IM®©À½ñõÓ0kè¾#ÁÄŽ7cÀÓ¯7^ÆÛX—VðIüò×#éÖMOzÔþæÍ­Û}µìö�eEÂ7Ô¬?h¥œ(êò:OÛ¤‡”œw¥–š¡$îQ~[úã—æ‘´åÀ½ùõ³ÕÀ=?•~³¾vÌø¦Àýriû—mßî«ÅßÊŽ…o¨YÐJ9•§¨m€‹·'{qÂZØß;åÀš,Áþå1ÒQ/ò Ù>v±N!øfèIª‡{ãë³z¸ãŸ_ê1ûHFãéÆÀ÷p¯¹Àsëv_­ó´Óµ cí¿oÿ.uLýCyÕOËš×ý™ëý’U«FÍqÌüÎñ’ýeþò8×°Tè3ì"ªU³~£•r*OQkàÞ_ŒvÃXôüTNûwÃÐEà^eg$Y’1? d_C½pцðZKzCŽfÊaÿ$Ü»úÚC]“½f_ÆúäÆ×gôp'=ë7¤Õ;‘Iôa»¾'O§óÕÀm†ŠDã´³ÞKÇn~ ã×[¶ûŠ•ço¨xvüü^£#ÁÊ­a»›qö±¬yÝÿNnûï™ëý’U©Fco2KSqâ³tÚÕê4ºˆêÕ¬¿h¥œÊSÔa€ûY_F6»­îÐô©ô¯þàyYòµMFoNrÑ£ ÀæñzWF/òÎRbz„2gù4u6 ÝÙ³”¼ŠÂ¶}}ø¡óèQÔ¾É:t›—Þ+\–6³”\¹äKÑ] ÎÒûÞŽßw‡1eÍ뾫¹ÞõÝÒ&¼äR™u¬|Á¿tz±÷’cãÕo_ªX³¾¢•r*mQgîŠá€ã‡ª´“í¥‹gŽY ÷ùÔ¥HÖcç÷´ß ¼äTÅcÉÕÜWæìÍ¢3‚À}>U¬Y_ÑJ9•¶¨7îùäDz­ɶ/Ï5膜ñ¥vñï@g·åVvz)ãþÛáï¹á½=K¢ÃEN›:cþ-·Zòvú±ðïûUò÷¬C‘ޤßyלéÊ>[òÚ•²ëÑ37UýVž“ÝWU’/àf×XÞû {ιd¹-÷ÿyéq­óøÂðp{Ö­Kì¾CùÑJ9•¶¨×nóÁo§„3ã€íëâ^8{]<·ó^‰g¸Ø„ŽªÑNvÌþ†�cþfCŒòôpëßóíd ˨çúV/ Ðëçt†³DážÞ¼ªx,Ù¸×רöûØÏ!Sæ¾Éõ/á§Ñ$¸ãü-ØíY·>¤U±f}E+åTÚ¢Þ:¤Äö@Ä=Ýñëì…2Îé0sÀñC5Ú)G·/=éqθMOz­Ísº¸ÏÇî¿*Ù¸/pß�û³I­§öºÀ½n}H³íò£•r*mQo8ÅCJnJ4Ù³@‹zê¦ÇÌ^4H7ŠS•vÚ6†{õù<[§w ¤­½ƒºk-ée¶eNw÷ùTñX²5p_à¾Ú¹ß`Ì\$l/(ÞÚÃMàΫŠ5ë+Z)§Òõºƒ‘™º.™ëyåuöb•ø÷ZžfÎ/püP™v²¡"ó ¬¾åÎR’'p[áßíèéGc[µ‡q½nÝœîîó©â±d}àÖ°ü3Ùïÿ^~»¡Æ¶d;Åì[;T$Fྨ*Ö¬¯h¥œJ[ÔöôtÒc`ع¢=Í^&HÚ^µ¸—mqó?T©óp;C@’)›‹yôUz^÷ÌÇf2굓/ÅñÜñ¸Ï6ÎénÞr"ÃÞƒRÜâ¿Ìªw,Y7·=£r;üÒ8}óûØ!V+_-¸Ã/§£§Òë>•O£õ9Û³´>¤U¯fýE+åT¾¢¶ªx»âÅ ÐN¶ö^?;‘#ç¦(¯m Xúùtïƒì¶£Ü*×NaÀôÛ‹³Haˆh´û2°7ÂQQ ¶ÏëÒnÐ_}lô?2úÙ NìÌBËá'{‰PÒÛž ùÈd÷y5˜³(Ie,ɾìÛ~߀÷åßÜ3©É²¨ßÅÇîÉ“àÞÆõÑ˽Êî”­”Óõ*ê¹ÌNß“v/žñ`AÇrxw—J8~ PvÔè®éïI/>eD_®ÅÖ«FÍúƒVÊéZµ¹¦Ñd¬Ó<ÑE–í®wórÀñ턲£Fw+ºØ”vpêtîè= Þ•öÍ\5ëZ)§ëUÔzáUL/áA±ÿAin~>·Í|2’Ç:ì 7%ñ¹P ÔèŽÍ'2 º‹¡(º4ÚÒ<"lï5ëZ)'Šº¼ümg~[7på¨Qø†šõ­”E]^~·MúÆ×C(;j¾¡fýA+åDQ——ßmcî Hà®5 ßP³þ •r¢¨Ëk§m£S¹é˜Ã}é™;ûÕ¤ÑÑ |L8Ö÷‹²;5£NÝ6 ü©é\Ë­÷edæ>§dûD¦Îk­C9.Xµû@ú:fú,wÊ7÷‰3Þ¾)íÃaøœ>nÞ«qWÚÑóÎ\¸%o?C(/j¾¡fýA+åDQ—×îÚÆÜ¤!ZŸ ½ö1{×Àô{ãˆ0pÿ5¾YIôófÞãdd»>{}½iÉóðçMàNîô©Óhí/nD¡·àoÞ‘þ©ÎÝlçV¿!ûÞnÕ½Wãž3Ë쮀bP£ð 5ëZ)'Šº¼vÛ6¶;}«aíÁÖ‰­V‡€,=oï˜ÜYmõÖÅñÍNloôêúwü¥ 5ÌÇ¿Ÿ»Dw]3·<^·r±Û”5 ßP³þ •r¢¨Ëk·msÁÀmïÞv‘Àm×Qÿ¡ôß}{õ¶ýØ)j¾¡fýA+åDQ—×nÛ¦Ûôp×ÚOäT¶vW‚3wÈÈTÆ£dFàvŠ…o¨YÐJ9QÔåµÛ¶In;FÛŽ¹¶cºo…ûE|wÎ䂯0tÛqÜI¯tz x¸ÆèîkfŒ¶}¿ôn²çgì×ô"Ë2ŒÆiëmù¤ÿ4Ü7°SÔ(|CÍúƒVʉ¢.¯Ýµ Ûñú4t? ~$õäßq¯ô|r,;{I;ÿÜ—ºÞ=íI_ÚöBF]êméþÈ]_C~Ôm;ëÛ“zw$¯uf½Ûdô˜®³/ƒ±^$©ÖÌRòÊ„m».B·ÝV ¬¨Qø†šõ­”E]^´h'”5 ßP³þ •r¢¨Ë‹¶ñ턲£FájÖ´RNuyÑ6~ PvÔ(|CÍúƒVʉ¢./ÚÆ´ÊŽ…o¨YÐJ9QÔåEÛøvBÙQ£ð 5ëZ)'Šº¼h?ÐN(;j¾¡fýA+åDQ—mãÚ eGÂ7Ô¬?h¥œª[Ô/dÔ½ÏmQóÉPÛM³_nH«w"“•Û›y­×Ìߡѹãì#%óOçÇǘ ¥Ûhš;^ó‰Œíßî tR¢›èØ»_¦¥ÛÑÜé2úÿüh§ šJ'tŽù÷ddêoù¢µÙ“ãÌ¿ÿË9Ž(j´Â6Ôjú8ª7*ë3Ž—W«5ëZ)§jµ¹ëaø{/îùÇìß”Fw^ô·‡ÒªÙ;1º6|–LÒ®­ |›qÀ Í>”~ts{‹yõJ΂»Rkôd4 ¿ ™×ÔÚƒ°eS6n×s´oækÓÚ©jL­$õ§_kqýÍO£;²ÖZ‡rªÏÍÏdÐ ÃŽ}í’Ë9Ž(j´ª6Ôª½[pm_ú§zä|%“Á½0|Çw^vyµjQ³þ •rª\QG¡º!ûÁS9jÕ—w|kòÅ­Ê×;ÇÁgHËÜÉñ¼ª~À‰nÿ^¿+Áðýp:; 5us ù-rîO$ëÀó3ǃzWFÉ·÷…¸÷ÏýÂh]ÎqDQ£ˆm®Õøx™êˆŠ\^­ZÔ¬?h¥œ*WÔz í©ž2‹ÖâÀò:<NÜ ¿íwd0ÝãìÁç} H«îÃF[G“(�&§×>yæÜ¦\@ÿ-³q íèöéúغ!+±ÊµMÊ|òïòTOKFp'°DÿÎ:óÁî£g2쵤¶tJÕ¶c_ý¯ÙßчÊÒiØ CVBö5¨¦ùäX:º93¶*>d}‘ÓãÈÊ8è, è ãŸY‡…ÚV«ññ²–Ñ™q9Ÿy.jÖ´RNÕ-êtà6”ð ò°«ÁL÷KSÚ‡Ãõc¸Ãç;ƒ3™‡!> s&¬'Ïæ~Û·§›£Óys™zá‡æúàÈÇHîxÿ†móð~|àOKt™›½Æ=„ÏÏ''ÒK†ŸØíµq{¸í©Vóåké4ì*Ú©ªLhû7:dŽY¯©ír¶£ãH|&Î7âõoë( F«.O­šÏ¤Ú] ÎÒÇÒËùÌsQ³þ •rªnQ¯ Üä‚Óð_¶7à¦ì¯ù¶ïœ^‹Æ­Å’õÎr# õýÇ£­ßò9à™[Cv cgœlf¨YR2›ªc>(¦N;ºÛŒ×Zèä´SÕ™kBV‚Š›`Ô›G¢¡V5­ÿ‡òØô0nC"¶®V7}Þ©ËùÌsQ³þ •rªnQ§·éhöeœâ NV{6ãƒÏÒ87'Ø­=ø„æ“‘<î/® _?ƒœD*p¯ŽµwCtꈵËòøÙEûhï`VàéУǧB×^½O;!´r¡˜½è:ë4ëM#a} }w6¥î“øËçÔ(Y5FžÛ ²\Îgž‹šõ­”Su‹:¸Mh;Gà>÷·ý%áòø‰tuw=8F*pÇûú<ÛÝÿyz¸Sfc9ކ™6M¡àþý‡ÿ0c¬Íé÷øvq ßë¸û¬ç¨Q$–jU?‡tŒu]ã =Зó™ç¢fýA+åTÝ¢NîP4VwqJ->Åö–90¹ÌÁ'Ïf¦þÊÏ”ÌÁ'Z¿s`Û4]ˆŽ‘Üéq±vHIÖ~Œw¸“1ÜÚ¦vL¡û!âN hÆÅšŸÑPŸ†Íô!Ú©bÌiòÅ&wšÊOãÚÙ¶Õ›GþÛŒƒµë·=é6@e£F+jc­¾6µTÛ¶Õå|湨YÐJ9U·¨3wÈ^Tï—ÅxîeæàÓ¸+mûZçB”¥ƒ=0…µfÿ¿dºtÅö†‹ýBÕm›”•À²í$ûÑŒçN‹wøüÁs¥}­¸í´ákô,Çty–÷Šü4Ú©zÖÞÜ& ¦f––¬¿7=Ž<“Sw–=Ne^ܽ`·Õ³þFL¦“Á<¾´¬ô@_ÎgžËn ÊVʉ¢./ÚÆ´ÊŽ…o¨YÐJ9QÔåEÛøvBÙQ£ð 5ëZ)'Šº¼h?ÐN�°[WýA+åDQ—mãÚ �v‹ãª?h¥œ(j��P&dÐJ9Ø‚faaaaaaa)Û‚ò£•rÈ*n–2,(?Z ���(���({ N×���à"H’[¸��p$É-làþë_ÿjp|i�TŸ‚[¼óÎ;QXøùÏnpn�@Õñ)¸ÅÉÉI>ýôSó(€<Æã1�Py| æðÍo~3 ßÿþ÷Í#�òà ��î\þô§?ÉW¿úÕ(8üùÏ6ØÄíÝÖÿ� ªÜ9}÷»ß‚þðùÛßþfEÿFnß¾ýÍh/7��UFàÎIÇokØÖ�ñãÿØ< Möý‚ªÿ¥w�Puîsøãÿ…]Z¬rö.zÑ1��UGà>'{˜öv3k °@Ø� ûœÜ¡%ßúÖ·Ï „ôïàÛßþ6a�€ î7 ³–Ø`ÁxîÝ+ò®ž 93±[nÏög>ó æ�� ÜoÈÞG§ üÎw¾Ã­ß/@÷Ž×//öìAzѹÐϻݛ¥]ŸÎ ­¯¡íÞÃH��ØŽÀ}¿ùÍo–B\ædÑžew_Ùñðy ãùË_ÌÚ6Ó^Ö¬u¬[tÝøí¿u[.´ÙG}$ßøÆ7’}FØ� û‚´wÔíáÓÿ§Çt™×_ÿú×É>²ûÉý· ¼ÚÓÞúo}^‡+|îsŸÛº5øékíû¤ƒ³NSgÿºuûœ¾Žà½ÌmO=ãû‰Y{��XÀ½#ÌÜÀöþûï›gªKƒñO~ò“ÌP«ÁÚéÈ3¦Z×¥a[V×·.tëúì{|ï{ßË–u]vH‹ýYwÑ÷{ôèQåÇ~Û í¶§öpoû�@Õ¸wHƒ‡í¹ýâ¿“ªõê>ÐP¦c¤u?|ö³ŸMBëE÷…®Û†=ýo:è¹a;«gû<4\ë»>·Ç\¿*…LÝÚvºÏwÙž��T»�Ú»mƒ¡ 'ÚÓ{CšþNt5œÚí._ûÚ×¢€º«`æ†î›7oʇ~=þøñãä=/¶]¼úÓŸfþnÚ»ûðáÃh8ÅuìýÖß+}†âóŸÿ|ô;´�ÈÀ]·WÐ iÜ|í!ÕP©!L¯M<jàÕ!E…PÝw¶íY„ßýîwÑû¾õÖ[; Ûiú¾ÚvúéßYÝÝ/º| áöwLÁÐßm��Þ »`P´÷5+¤}å+_‰Â†³2ݽ°P{®5dýà?Xùâà.6hþḴ©3d¤·I§g¼¬ý¨¿§ŽëÞôÅC7„ëþÔýZ&ú{èvý⿈ÎF¤·_ëVÛ•  �À›#p_" 7ÚókÃ÷—¿üå•p£\ÐeW} €ºMú¾ ³‚õ׿þõ¥ëëìv^eO½¾·»½W u[tØýèá(6ˆëëuÿk;\ÆöÛíÌô¥/})ú¯Öa‘g(��¨÷Ñ0£c½³z¾Ë²h ÓPø«_ýêÊÃõ:ºíö–î/ ®:|Ý—™²,º}„l��ŠAà.íÙÌ36º¨EC¿¾oY‡=lch[»Ãut¿gõ€¹¸Ã\|kk��|Dà.©¢‡hïk{¬«LÛ¼È6ÑÞkÚ�€ËGà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� Dà��� DàÆÍdÔmÈÞÞÞ†¥.­àóú š¤ÓÈÔüóÜfc9mWSÚÁiø���‡À ÒÀ½/Á™ÌõŸ¯GÒ­ïI½;’×ÑóS9íß•ýîy˜·ï‡ïõÜüû¼žË }Sjí0°ÏÏdÐiÊ^­#ƒi´å���… pã‚ÂÀý³¾Œât¸CÓ§Ò;<ùEÌO¥ë‡o§i×vØÛ��»•¸wd>îË-í6ÿ>·I ­]o��ÈÀÝÚ¸ç“éµn,Æv7îÉ`òÊ<ûJ&ÃÒªÙqßv±ù¥Œûw¤ '™ÊxðHº­›Ò880?sG‚p]³ñ“ðqûMie2fí;æ1»4¤;bô6��(»µ6pk`~{1f:Þ±xö^7÷nÈ~ð±Ìå…Œº·ÂPü¶ôÇ/ãw†“¼u¥…æš4:Ça Ž_"³¡t›w¤ª}àa€Ü“F²Î=Ü��à ¸±[[‡”ØÞé¸:~^ Ù‘šÛëœ Çéá$qèvó]‡Û‹/ÑE’ú7��¸nìÖÖ!%7¥Ñ~(Ÿrß}öN7êÒèe&¯ä,¸†gÛÃí'‰­nÓƒÞìËxÝ5•n��pÜØ­u[‡„4kRÛäLñÊëìÓ3]kIo8‰‡‚dÌN²¸Í8íÚ] Îì¸p5•ñè£x®m7��¸nì–›½ÒÓl÷^£'£ÙËäI;Ü#í>®D™åNyZÁÕÀ¾î,}]gë £‹1ç2;=’þÓ¸g<~š4Së��(;’5ˆ lí½~v"Gû7’žìדcé4Â@¾ôóžÿI~ùÎÁââÉÐâ¢I]ÜÐì¼³”Ô»‹¹Ã�� DàF hOô{Òîéøm—Žå>ØÑ]*��®W/nR—F;ñl1Ø#ºÈ²Ýuæê��ð%ðJ&£À b†ƒô?a��xŽÀ ���ˆÀ ���ˆÀ ���ˆÀ ���ˆÀ ���ˆÀ ���ˆÀ ���ˆÀ}­Me|Ü“Ö~ óHLo>~»)õîHоÃy|+v÷6ï®p}i7šÒ-ßgr'^¤[woÿ®R·€otäQÿ`Ã6n¢·?V÷ÉÒM{���,÷µ5•Óþ¾Ô[d˜¾yLBãÌ\FàÞ$ãº-bw–é@Úµ›Ò<—ùäX:šÔÚƒp½¡Ù©á——ZëPN Ý�� …À}-½’³à®Ô=­ €&tç Üs™H{©—xwâн£À=J·ý8գy»#µ7êÍÞ`~&ƒÎ-it‡rI_��€'Üב†ÎÆ[QîZçÜq/ðÔ°ŒÝÙYàŽBoSöZé!4.rGöv¸Có³@ök·Âßã…y��€À} ­ëÁÕqË´µ0lÖ¤qp ­Ú"pÏ''Ò³cš£qÍ÷d0yeB¤yL—zWF¯&2ìµÂ÷°7¥38 ß!Ãl,ƒ£nø^îöLet¤a~ö };\— Ü©ñÕáóíáLæúøS9ê†ïÛz(çç£÷ž,Á¾³ýÑúÎd<x®ë-óeá Zuç5ᢿϋŒm ·ûXß+z]¸¿ÚïÉH‡æ$¿Ýîðyðç§Òo^px ��¸vÜ×ÎLFÝF$¼çÒê¾â•L÷¢Àî—2î¿-{µŽ ¦alŽÆ8;½ß“@Z{‹ çã¾4÷â1Ð"Ïeо¹ò~1³-QhµaÖ w©íKÿ4Œ¥¶WÚníoÞ‰ŸK¶ó†ìÿöùef£uÕZÒNÂܽf_ÆQÚ7ÚàÅøp÷¢ÉtwÖ6¾»möU¸‰vœ÷~_ŽîÛ×f}É0ëJ¶��€À} ™�¼4¬Â<æÁÌ!%:cˆöÇ=ÅëwÌéqÖ�š¸• ´&ÌFa¾&ÍþiVCJ¦¦w^íòõÛ‹=“ß-ýåb9p«xÝ›·ÊÚÆÕmˆ¿L—_»Ä¬Ç~q��¸¯Œpm{‚Ýž Üñ’›Òh?”ÇϹï†ñtàž›!%¶ô$Ð^ßœ;î_ï‹Àý<îi_×C|I;ÞÆ·¥?~ižw¥Âù7��XEà¾vÒ!T™ šÑÃõÛ±ÇûœéóéÞï¥Àm‡ŸÜ•àL§Ìz?W* FëÊêáÖ!*ÿ‡ádÝÖTÆ£dvY=ÜÑ6ÞýàcgȈöèÿ‡Œg9z¸R��îkÇ^4éöКqÓaˆlõNd2_ŒáކJüü£=àÑ4‚/e2|]P™\ü—„äöþIº÷¿þ\<Gr±åÚ^]fÍöØ‹“qØv ·nK]þáþ?FiÖ’ùÃà{z$ý§Ï“/‹@mzó“÷¶_,ÊhøPºƒç&p»ß|aXÚ?[¶1zɇrþþÓt8_¿?M��û:Ц¼¹ÜC;ŸÈè°mBv¼ß} ízSÚýd4™-¸†Ìg'r´Ší ñ…‚¯ÍE„Ñzz¹aÞ¼_ĆS}O]â:Ÿ å°mBvm_Þ}x õhxÊÈÌF’1KÉ+¶íºZ} VÖýæ‹EMcùd¨aÛ>¯½Üÿòä1íÅȳŒmÌž¥äÓÌß'ýfZ@��°ŒÀ}-™l3µ.ƒÎlr‹Þm��°‚À}mÅ·v¯5:Œ‰€…2‘Ö¹µ;��È@à¾Ö¦2>îIkq!vM/Â<V÷‰Œ Û�� ���(���(���(���(���(���(���(���(���(���(���(���(ŒÈÿ!H~ÿ¾����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-2c.png��������������������������������������������0000664�0000000�0000000�00000031116�15030617045�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��d���ª���Â⌑���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��1ãIDATx^íÝÏ‹ìÆÙ/ðóoôÚÛ³;xó®f5›YøÝx“E/†,²¸HÃ, ^ÄäBÀq ÄÐ0 CÀyÁns.ápÃÀ‚^.&|c†!6& u«¤z¤GRIªR«$}?á!>=­V=¥_õHjõ3������ƒ@A�����0d������AA�����0d������AA�����0d������AA�����0d������AA�����0d������AA�����0d������AA�����0d������ .Èž={–������¸é¬ C @ „[‰…‚ @ @ : ds6§> \M«ØÛgk*yØš[¾6¨OxÄn,íl3•<\Ì9gc3ÖvsSÈÁÕs¶E}cŠ˜„´-8Ÿ™NÍœú€r5E¬boŸ­©äaknùÚ >á»±´³ÍTòp1çœyŒÍXÛÍM!WsÌÙõ)bÒ¶àL|f:5sêÊձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WSÄ*ööÙšJ¶æ–¯ ê±K;ÛL%sÎ™ÇØŒµÝÜrp5ÇœmQߘ"&!m ÎÄg¦S3§> \M«ØÛgk*yØš[¾6¨OxÄn,íl3•<\Ì9gc3ÖvsSÈÁÕs¶E}cŠ˜„´-8Ÿ™NÍœú€r5E¬boŸ­©äaknùÚ >á»±´³ÍTòp1çœyŒÍXÛÍM!WsÌÙõ)bÒ¶àL|f:5sêÊձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WSÄ*ööÙšJ¶æ–¯ ê±K;ÛL%sÎ™ÇØŒµÝÜrp5ÇœmQߘ"&!m ÎÄg¦ÎžîÅÍåGbuô ±Ùÿ¤_ìÀã^ì.Öb¹x;ès}úài¿Çzºg‹_‰íÝÏú/ÌÓ­Ø/²Ïöl!Ž7·âIÿyy[ª«ØÛgk*yØš[¾6¨OxÄn,íl3•<\Ì9gc3ÖvsSÈÁÕs¶E}cŠ˜„´-8·™>‰‡Ý©X°Æ–c±\‹‹ËqŸU?‰ýæmý÷°Â©è;±[½èäs©íîÄþêL„rú£÷ÄîÞP”Iªx;Yíä»;öðW±}õþ‡Êձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™i^d ¡§û±]/“‚mñr+î²¢Œ ¹. 2ÅÜW~} ñ«`Ggâæ±zý«Ÿ‚ìgq·=§;dc1•<lÍ-_Ô'<b7–v¶™J.æœ3±k»¹)äàjŽ9Û¢¾1ELBÚœ‰ÏL› !ºrÅÿ6ñ‚ìä×bsñ®8’Ÿ±Xž‹ÛRQÖ}Aö$oÏÅrñB¬PÆTò°5·|mPŸðˆÝXÚÙf*y¸˜sÎ<Æf¬í榃«9æl‹úÆ1 i[p&>3EAÆ$Ù»b÷ð“¸ß½'‹²…8:½b·lš 2YPíwb³:Öó>«ók9Mù–PUp}[|íøâæ+UŒÑ{è}v…Y>M5b{ûlM%[sË×õ Ø¥m¦’‡‹9çÌclÆÚnn 9¸šcζ¨oL“¶gâ3ÓúB(ÿN•Õ-‹êa[õPüb)ÖW{ñ¨ÿœúYÜßüI¬Žôm…÷”ÛQ*hŽ7b_½ƒ°Â¯´¬ S3z·›—rþÅ¢¬\=ÝmÅËãS±Ý«Wd~׿—}?ðãéþJœÊ|4ÍãßÅfù¶Xmo³¾QŸyìPˆÊձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™i^žE¥2dOwbwz YÌmOÓ+Lëk]x¨ïIýJ¼±ü½¸N˜Aó=ë›Ø¿óÏ}º->XÿA\%ÅŽj·—BA¦PQö\,7Oò(dê âI©ÒW§Ùç$E›*lWÿ%¾ºÜˆËÒSQÏTò°5·|mPŸðˆÝXÚÙf*y¸˜sÎ<Æf¬í榃«9æl‹úÆ1 i[p&>3­½B¦C¿Y%ߥ*>u°\=‰Ç›3qÄ TésvbUz¤½*¸Î–Ǻaï¿ý¿âæüT,W[±7<X£‰_h•‚LùAܬOäg>/·_‹ó‚L½¿ð(|<WúžXõHÙøL%[sË×õ Ø¥m¦’‡‹9çÌclÆÚnn 9¸šcζ¨oL“¶gâ3ÓÚ‚,‘^Õ*>i±\éé+êö½¯Ä?M·9P;tç>φ_hÆ‚LJ®�ªïˆÉâqýkqLYRdÚR?‹ûW[±»ý‹X½È®¶dã3•<lÍ-_Ô'<b7–v¶™J.æœ3±k»¹)äàjŽ9Û¢¾1ELBÚœ‰ÏL› 2*äçfR¹ «Þ¢GòBƒfaSý§XoÕ÷ÌÞ0^Mjã×Z]A¦<}-¶/Ÿ'Ÿ}Lç^üŽöø­¸O®î©+ˆ§Û¯å髉²°;ÝÝÉ¥ú-ÈJßÅk Ï"ØÍk즒‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™isAÆóÙwɪ·,¦ÿ®I¡AƒüäjRù!Š,Rî¿¥v¤·3¾p.Êüú@k*È”äÏYAF·"Êy­Äf»[›Kñ·Ç'ùKž3Ý™eiA¦"ç±»ù>}k ÊÕ9µ|~+^ò«r´,²<ä»’þ~ÙP0w£Ú¾<îÅ•þ½üɘúoºÏC®KûÏÄZ®_ÉgËõéüæ^¾Z÷úauŸï@Ô­ØÛÄêèÁë:õ Ø¥m¦’‡‹9çÌclÆÚnn 9¸šcζ¨oL“¶gâ3Óú‚,Êbþà Åð~ºz´Xгk=XLŠ—£ä{Wéà‘ ‘…8Z}¤ —Wâv%>Øîå{ Ÿûx-ÖêJYö`va}/¸Ú§:ʼÎ7¯³B¦2NòÛˆÝþ!¿ºHÅ–ü_ùjURe·D>˳×Ö…AÖVCädnç‹LCA¦<É<.c)ÈtyNyÈ~Z’ô±—d}ý…^§õh¯R[Ìägî>aë„ õDÑ‹Wµß‰LŸÖ©ŒüñVlWÇÉòùgÍëž™{«Ï—~Cç™EyÞÖðöUs®Y×eîWÉ]ѼÆn*y¸˜sÎ<Æf¬í榃«9æl‹úÆ1 i[p&n3­Õ(|˃¯üñîÉ™gzˆ uÅhW~ì=/òT‹Õf'ö_•ŽÁos¤×ìPôs÷W5Õd‡`Õ>¦põ0y…~Z@~Îâ¥ØÜºf ×ûÀÛ3k󠫨˵ز+YO÷×â\ýV±ÍúÖ×Êò¨{=„ÌÿÕ§â•cî­Ëps€Û^Ý|'^mÿÊú¯î”;êFr{;}Éd^ïGy_=݋볗â$[ÏûÑØÎ!x^©î>†+ÑWÓ»ݲsáyešræ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WS4j+ÈÔoʳâZ BØï¦)Y¡þnüÍ93«ö1Õ‚LÉO&¸+z@ÞGA¦‹±gGúŠV] ]üJlùOèb¦’KÝë!ÔÕÁ_þÖ9÷ÖåF™åòøËSÞ‡/ÈžöŸˆ³Â•/CA¦<íÅ奺[ ?Mí4ŠôJ5µÁLW¯ÄEVDµ·µî õCWÓ»R̹î„jy_~"×m»+æ–F=›“Ì:¸ ižc6…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WS4j,Èô“5³¢‚n5eÒÒ­¤ôã×é¼›o»²jc.ÈèuùYÎ@Í`ØQ5z"ió€ˆÚ]ø.eÝòh+œéßÕóȽu¹ÅXÑÕÊBÿ p…¬¢›uЇ[;s±]©®ÏƒÖñ¥Xooò+YÙI&Y˜•žrKË£º…µ±ÖÃ_Åö•û­©æœi}îÿvW7²ï Wâý¶;Ê™G=µ¼âù¾4iowŸºùr?9ð;¦ÔW=þ$n’ŸWª{ý°†]n]“}ºÛŠÍꤓ6Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WS4jè§ÎüotÖ‘øôo~`µ¸Xµ1dMÅÚñlÄŠ DöpŒ´ÝÅ~ò˜Óô*HÚ>O÷}ú¾°3Ç,Žßë_›^WÅŽ>KŸ¼&VëK±=û$/‚ ·r霳ÏshÒ4µœ 25HØÉƒƒ¾ÂZ¸ L-?õý»rÙ~)înÔWU¿Êtùû•…+¹ê Ègùwôèj¥n·ŠtfÃä÷õôüû¯–øgSØi)È,®P7æÞÀ­9óv˜oSæ}I½:-Èhçßyæd¹{OöYú›’Ù\k¯D‡µÑLí»NÅ©GñdÎÙ¯Ðé]åJ¼_;)gõä<"ú¾4inwÝqIGËwÛÔ^ùÕ·Eí©¥Ž;köuÙç˵¸¨|m…¨íàˆã䤮:lå~þ?äã®æõßlhÍ9;–—"²»DŠëXó c[•œYÄ$¤mÁ™øÌÔMzµÄø˜÷H¸öÁÓý¸TØ–ƒnö¾N76vkÇçR®¦hÔX‘´mÛl'›ŸMgüŒ,mðí[«ö1• +8Kþ½EïäéÅå õúLݶÄÛÕÓ²B¡ÕÐYáÆú¯ny^Wýq’å­¯Rœèu'¹½êílðžž –EI¶nù0[—›CA–NÅ6¹}Œ®´¨eL¿W¨æ•?']®ª�ç}«¯ÜÒ•ÜìÁ8i;“>3´i`(‹õýÕdZÕo¼ŸìмxØiZu®MW¨mr×ï,skgÎ\Ñëò3÷_aÛ¡)d½RÛ`S[h=å· ×î»ÙWää>5y*¯ßÕ,󲋱 3]‰?DAf`u¬ë—]» ý“¿dû+Ç:éúÛEîõ9Ð:­N mÙ•,¹_×'ÓŒmO–‹a;¨{=Hù{Ävì–›ì½r3*]‰¯Û‡û ¾1ELBÚœ‰ÏLÝL¬ ËÇrš¦ƒ.ŸóÀ£>Xø~.åjŠF-©ôûa'r@ü‘ØînÅ]2Hf;I=�Ìv´4 ¬ûîcÕ>&ðñ0>0FRy½QZŽ•\Ç\éÂ÷è=±«Ü‘þíÂgP¡LóŠ¡ SýR:à—‰éÀQy-é›ÒÁ%y¯§i›Šýjz°Ø´¦m©,óÊúÒ’{ ·væÌs*”˯+ý^©¦ér´ Mmátß'ïûßâ*ùïR[Žÿ(®¯êÚø/}ÖžòZ‹«íÄyÖöú¼³ŸHÉ>¯}yq4]‘ãº[{½xrðö.ÿŽðbù{q]Øßäƒíôïgâ*ûn^Ý•øåít¸2} '•}hQá»Ð*ŽèDiÊÕŽ]»ë–#­¯nëJ¸ÿócÎÖiu§†ùIØôu†ò˜1ÝŸTsª{=Dõ{Ävì–µ¹m¿shjß\¼ße;©oLQ¤ìXzâŒß¥`ó?ÍmkæönŸ™N{4 Ž8ý¾. 2Åz [E¹š¢QÓAª²7 ¥§û8ûÝJ0ø½™Uû˜âN$?gÚPÓ÷û!‹¬m—w3úÜ -Ƕ½Ï¿ny˜^×·¤}® f*Lé€^Ê; ê?ýÜé³jÙ®ÇY?•Û¨"í;Ó£òZe=•’þjyqàã8¨ÕL9رYÓ²é µUî5ÜÚ™«ôÿÀWª«yèÏ+­7Uùv’õ_íþÐÐFÕ÷'¿Ì¾3Wü>R{Þi?ú 8ÍËÎaÝmº‚þÏ´’y°^éÀˆ÷©\/oÎär§ÛBeÁ’ܪ§MúJ_…eKít»2M9ópR»l¥dþ/òb"ùn4߇ÙäZÓpÆ®ÝuË‘^oß¶+šrwdÌ–_ãºGíçÇló˜¢þõ�ÆïÛ±[n²Õ†ãÕ°hœT³uØNêS¡ Óÿš'÷>°è÷µ 8]Ñ�Õãs)WS4IWöºƒ”ìÑ-9ðJù¬6î½øÛîKñ \Ç ? ÝÀ¦}\u'BÅò÷DôÎÜv9ZLëTóÐ;•–^šO©ï뜵Ôt°NO‘K—UšWóG=ro]n­ë±Ü\ˆíõ§2§æ®éÀQ»d”0¬¦ÂÅ8ð© 5£>áa§yl½Bm“{ ·væh½å¹y¥ºš‡þ¼Ö-kÖ–ÚíÌÐÆä½ùúXäö£ß€³š³b»î¦ûÇÆ+è¦m¸òšî“Âvž¾–÷Ÿi?ã·ÝQÎ<œÔ.[)É?©¼¼mrmg×îš¾h*zj¯vêvëùfQ»onGŸÁeû„ÆÏ¥uL¿þYÈmöwÿSüÚôºÚ–³“ê5¹»ºgç´«caÍ÷‘k¿Gl‡¦ic:^Õ«»‚.©å™œ€“˺ñ*²Üß×^µ¥b,Ï™Næåílùn¶…ü³«“¶gâ3Ó©qïƒòN¸ŽiçÜÖl=ÊÕF4¯Â{Ë;¹±ÓÓÓhçöƒÚ‰ª¾:óûï|[‰ö›Þk˼³Óß¡áßQ’ƒ¯é¬ŠÜIÝ«Ž¶Ë»™1:ÃZnW¦©Ý†ƒEÓ`BK‹kµÃÕ¿Ûgœ÷£¸¿WÙ›JvZ—[Ûz¬ïþYþMhL·=?~+î-oYTÔ­²g¿+:èòƒ›¢ÛTì?¿¡ õ ; ë`¥Í5gÛr¯áÖÎ\±ÿé ?Ü•jú¼-Ãò¾¢ŒÞÇú³v;3µ‘=TG¤Ûü 6y§ï)-KKôYE¶ë.½¯Ô®$tŸ™¶áÊkús }¢û©ñ=¦v¶·ÝÔ^'ûÐd™î.óŸIÈÚm“k;»v—û‚ò¸Z~2hR¨5}_X²ÊÝN5‡R¡ÕÐÙv‘õcÍ>Íøºê——yþÉUçü÷“ãŸñûÈz`<ر[nr…}c“¦+èü_MW‘åzaqÕÖ´Ÿ¡v67Ûõ)bÒ¶àL|fZÑp6¢ú` ½sÒó-[ȵgrºGó·—t¯nÿ’îÔÔgT8æ±ê“-íÈeï1—jZá=•ïÓæ<}9ze8ó”Gó`ƒÞg«vgG;ªÂã­éû úv¾íVÇ'ràôeÿ™”KëOãC[dê€õ®Ü¡³ï}$c½­eËEíÐ/òü/þ$¶S;o~Ðÿ—xüÛ_Äe´.7ZMýZxºµY~^2 ¥e´›Kñ7ë‚L·ËæmaÛú!½ºkš^kG}ÂÃJ¶îúŠMW¨mr¯áÔN¦ÚÿuWåô ªuû ÛMyЕÿÆ¢i=u*È´ìl¶œ_rä'«¼Ó~lÞGÖ1/;‹u÷ñFœoÿ’|_®q`Z9™_K¿ô"$§ÿÎ%kS¡/ü¶;Ê™‡“Æ¢„®4œÈýåVRÿ»²¼Ûsmg×nê ž+<sé6Öü}ai™ÚÿC^Nôª¿59ÛŸzôA5g3ÓñÊH-Æ+è6ۈίÐçék<GÓ~ÆÔNë¶—Pߘ"&!m ÎÄg¦EjáלÐ+N2leøN¼:ÿŒé¦êѱ9“Ó!÷>  ˜ý¸qV”òÁFuCHwÎ'ùí+¦é’üò+Gt€ËžV>ੳ<±>kŒ5åjŠþ¨õ'b}®—oZþ²¨HÖíãë[ÅwÚÿ²ï’¿ÑNåý†‰ :ÛTseÏs=¤éT~ùQ~[‚ ãã‹õ:EïIBåazØ€zý+ñOõÛ>w_å'MÊ'²¼žN=ì¶²¬ÏZ¾L_Fí¨2å` ~pë ÿm™[:ðø¶2(Y¬®Ä?JË-9ð×ý÷ì!ùÙÃäµ»/Óm-{¯jÓW¥ö— õòiòhftÉ(¬ƒjûoºB-ßh•»½Ï•ùÀ=Ü•jsº=…ï«pùñ©ðwÝŸÕA›Euq¯“Íy›J¶Ì9›qœ: ~&Î÷ÿJ÷MWÐ- ²t»úƒøÝêz»ÔëiöwݦB¿™ÚÙÖvŸm¬¤vÙš–…iy·åÚήÝå¾ 'Uš–½·Ø/i°m´!wWôù\Úòõ–c(½/o‡KA¦Žôu,W…³Î†ÖMݶbè~Ôïñéú¬6æ}cUÖ_¦HúÐfÑÿ.¬£z½eË¡ºn›ÛiÛö2c:bÒ¶àL|fZ¤lÝÙɸs&rÃIÎ|ËC6}ºµžÉé{Ôt+;³òJŸü+z¡t®…þÒ.:SÂÞŸ>Ùê—ÕߪA¹š¢7Émyꌢ¾¤žQ;ÎWì!f½·ï@¦’‡­øò5<ÍEƒ6¦ù†îôWµî®T׿‘ÝT8gw)nÿr)ÈÔ{ÙI䪴úÍ<Õ/íyúQN»»ù^}ŠsÎ4`3Oõí•Ôþ¶+è¦ã{åµ´¨=nܾø ’®Ä³§,Ö6«(g.š¾/. * ÕñKŸ$Rýu÷¥\6ÿÏ"×vví6ôEíÓ‹Óõ²u×sA–mû Ëϼ~֛Ɔê¶Rõû”j~z™%ùµŒ#õúëÓvËM΢µ¨‘cÅóËôÉ­û;ÓöP}ÍæªmÚ¦bߘÚÙÞv3êSÄ$¤mÁ™øÌ´¨ál„bÚaktæ½øÄ-Z™Š’†ûJ`ƒ>ß^ÍÀ ’k© «ÝÐù¤ï 6ôW†æ£Ûí²ã iLÑŸò(é�ä’_©©Ñûc*yØŠ._9¸<_bþmžGu‹Ö¾ó}Kõ ƒÈݹzPÇs,À†¸RMÓ™ý,îo>e_ôW! 1ÙgÅÛ¿ô>={ Õ~þ{x,Tÿ©~Ûç¿Ù³— ¿Ú¼õh­ÚãøezjGН4Ÿú(Sj® ?$36:þ㪸ì“cä·†>£¿çWÝ WâÿÏ•ø#;ƹ\™Îÿž‡•Òq5Ò˜#+Þåß’; îÄIŸÊe–œ5­:î0 iš™ã’þ^rñ;·zÙ7~_Xê» “íH¯8Ëy˜¾¬4µß© #ôD¾|]lú>rý8­Ýr“³h)jžî.Å»êk?Éòhº‚nWÙ\µEA– i[p&>353œP/WŠμU~ÉòLN‡Üû ¹ ËÛ^*Èjwvzâ/›‚ìøwb{q*wn5Oð2 \M«ØÛgk*yØŠ+_uuú?õmŽ¥=‹ún{ÐBŸ¨Oxô/,÷õ³_SÉÃE9ËÁcå)n,ÊÇÑ@¦yN7¹Òû›ÕdRv•o¹Û•Y5>S¿éûÂRïøIn©æÏP'EÒ'ùUÃ¥ Sã®_°‚C_…NÆTlùÔ|¹8f¥ïÛ±[nrúdFµŸeû’ ô$϶+è6™üL‹«¶…BK®+êJ< 2·¶gâ3ÓfülDyåÖo¡3~¦‡ÐÖv&§Cî}PS%;³òŽW5Óé (Ý8ic:+bºoŸvnvEåjŠXÅÞ>[SÉÃV\ùªÿšuP¾¤ÛæúW˜·Žþ…å~¸vök*y¸ˆ#g9¨<ÿ@œWŽõŠº5ëÓ|lÐÊ™Çát“ks»iŒPÊ“±’+"ìIz48¯ý¾°›dïWá>èæèsêd|cóTäEù+ ºH¤÷¤!óI~ÅðúþâÕöµ¸ËîÜ*~åý¡ú;?Y•÷]Û÷k˨µŒ¹¢0F¬¹‚þðU:̦ScOÓUäòk,øUÛ•ø+ñ¿þ¨Šºü½µßÍNÚØŽV9bÒ¶àL|fZÔt6Bþ³RQÅ_- žî>ç¯d1cs&§Cî}@…Uù¡'ÅïÒŠÑüÌmèrç ÎؼÁ Pz:Ï÷w±ß§¿¨|nzÄå7…L«ØÛgk*yØš[¾6¨OxÄn,íl3•<\ Ÿ³>6eNÝUóiõªm Ê™Çat—ëaÛÝ)äà*Μõ³®´¼jÊ8o1 i[p&>3-ú®þlDålÀÛâÛ’Kµùk<ØÕ¥–'¿u‰æïFí`‹?ÖW8ÛlÈ=»|\øQÂòÙÍå¾ýò=ú…3eEÙ{ «ØÛgk*yØš[¾6¨OxÄn,íl3•<\D‘sùX–„:Ùøi/?e“Ï#ƒé(׃·»SÈÁUœ9ö uêSÄ$¤mÁ™øÌtjæÔ”«)b{ûlM%[sË×õ Ø¥m¦’‡‹9çÌclÆÚnn 9¸Š/çÃ_¡®C}cŠ˜„´-8Ÿ™NÍœú€r5E¬boŸ­©äaknùÚ >á»±´³ÍTòp1çœyŒÍXÛÍM!WQæ|à+ÔuòyW#&!m ÎÄg¦S3§> \M«ØÛgk*yØš[¾6¨OxÄn,íl3•<\Ì9gc3ÖvsSÈÁÕs¶E}cŠ˜„´-8Ÿ™NÍœú€r5E¬boŸ­©äaknùÚ >á»±´³ÍTòp1çœyŒÍXÛÍM!WsÌÙõ)bÒ¶àL|f:5sêÊձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WSÄ*ööÙšJ¶æ–¯ ê±K;ÛL%sÎ™ÇØŒµÝÜrp5ÇœmQߘ"&!m ÎÄg¦S3§> \M«ØÛgk*yØš[¾6¨OxÄn,íl3•<\Ì9gc3ÖvsSÈÁÕs¶E}cŠ˜„´-8Ÿ™NÍœú€r5E¬boŸ­©äaknùÚ >á»±´³ÍTòp1çœyŒÍXÛÍM!WsÌÙõ)bÒ¶àL|f:5sêÊձн}¶¦’‡­¹åkƒú„GìÆÒÎ6SÉÃÅœsæ16cm77…\Í1g[Ô7¦ˆIHÛ‚3ñ™éÔÌ©(WSÄ*ööÙšJ¶æ–¯ ê±K;ÛL%sÎ™ÇØŒµÝÜrp5ÇœmQߘ"&!m ÎÄg¦S3÷>ˆ=ÿ©,Ÿ©äaknùNÕT–ã×Ç9æ<SXns\÷昳/ê«ÃWð’mÀ̽bÏ*Ëg*yØš[¾S5•å8ÇõqŽ9OÁ–Û×½9æì‹ú*Æð…%�����0d������AA�����0d������AA�����0d������AA�����0d������ñ*ÈBü ������ 2������àÃ:�0 l{�ýÃv�}CAÁ°� Û@ÿ°@ßPA0¬�ÃÀ¶Ð?lg�ñˆi{¤¶ððå5e— €ñÃ:�0 l{�ýÃv˜¶Gj _^SvÙ�?¬�ÃÀ¶Ð?lg�ñˆi{¤¶ððå5e— €ñÃ:�0 l{�ýÃv˜¶Gj _^SvÙ�?¬�ÃÀ¶Ð?lg�ñˆi{¤¶ððå5e— €ñÃ:�0 l{�ýÃv˜¶Gj _^SvÙ�?¬�ÃÀ¶Ð?lg�ñˆi{¤¶ððå5e— h²ßïõA›o¾ùFÿ×áõ¹¬ 0‡^OûÞö¾ÿþû$�b¦Ž?þø£þW÷qŒãT.CÓBLm{lBmááËkÊ.PöÅ_ˆ?üP¼ùæ›âõë×úUh£úì­·ÞüñÁwä]¯ëŒZOÕúªÖ[µþö­mO`Ÿþ¹xçw’èóÀ ÐuÌSÛÝû￟lƒ]¯³}ã8ÕfÕv•ƒÊŒÕ¶G[Ô¾¼¦ì² xÓçu7�ÿNìV/ m-ÆB­>ÛËqÿ¤'ñšæI<ìNÅ¢üÞãØ'ïùIì7oÿ&c±Ú‰‡dúpªésYœÑ<»Ðïº�Ð?µ¾Òº«Öã>‹3šO(^„Ñg¢ƒ1¡A ­¿]é3»Æ‹0š‡ÊŌݷGÔ¾¼¦ì¢¦7E/ð§[±9^°IyûWâb½L ©£S±Ý³òÈgš¬ðz[lö?é×ãgv‡e± ¾.�ôL­·åu¹í>Û‡©£@1cTRÐ`Ð÷ö[úœ.˜Š0 Õvc0mÛ£ï1†>'<¯ÐvyMéÛ€¦7EoðÆBègq¿{O©6‰›GýŸi.ÈSQFË pÐua’j®Ðò8Z‰Íö¿ÄÍýÏÓ€-µþûTFWÛ!}ž-u€¬+Â(PŒYz؉ÕÂ܇i‹ÕæB\ÞÜË-Mó™œÔ )Ôú­¶—⌦õÕT„Q¨6£óàµMùÜ>bÜ»Äs m—×”. °xSô:�o-„~7ëÙŽ…8Þܦ®Ï4dJSQFqèAa4ë¤լ{±»X‹erà’¨í­xÔò›l4e!Û!}Fu@T·/«Û˜ù|MbÌÝÓ~#Ž Ç�åAìwŸˆõò¹ìW5¸ÛŠ}vÒÎo°×6¤° Òû]¨Ïl+Â(T[QŒ…ñÚ¦Œã±¶» ÀU Ûc_xûCÛå5eSlΙ¢÷¸E!”nв=ôŸi")È›¢Œ¢¯A¡KFb,Dóú÷t%Näú÷ìD¬o~ЯúL¶lŠ2 ×í¦+s)Â(PŒù1µ§;±;=–ý+ƒëë섆Ï4àÆvHÑ4¤÷´QÓªÏPŸÅ?»)TQŒ…óÚ¦ÇcuwAµŽ»B·ÇCàmm—×”¦øa¡áÄ¥¸ZœŠÝƒ|“Ï4Ùà¶ØÖJt\çᡃBŸ" QnZN¨³7géA&[}¦ñcÊa›íÞ«øas¸h*×bœÐÈ·/Ÿi|˜rC´Gy0H¯›øa»páµMµŽñLwA¹3冰¦í‘¿/–ðå5¥©C ¾¼ «9Z|¦Sÿ„†Ø©  ½_QH » 7mÅ•Dë`öŸiü˜òC4‡Úž¶Û­îÁ"zúý3 » ­ÁlûÊßã3SnûP'™Õ‰úw™ úDôœÂ…×6å2Æ ³™rC¸‡i{ä%|yMY×�ß+#jšÞùlx^kËàÖâ3»¢n?r¤©ÁŸëãòiZÎ÷l½j/n› áR\½«ÝwòŸiÀVŸÛ!½Ÿøž­Wûl—mröÁügN|¦w.· S¨AŸšŽ‡èouÔ{}ïRÓA8¯mÊeŒ—t_‡Ú‰·5´]^SÚ4€Š3ÛyïEYë†G—¦Ÿ‹—Û¯-Ïž¦iÜZì�ºà2ô)Â8úœ:®Åв>Å•Ï4`£ïí¦5q-ÎP”ùAA'—ÁŸiÐÇÑûl¨ÏPŸåRœ©÷Cdqj{ìowh»¼¦tm€í€\-„Þâ^þåÍÅò\ÜÒ—7}¦iÜZì�BÙ C‹0Ž>Ó†íº€¢Ì—KqEïñ™Úb;¤Ïic[œ¡(sg?Ìßã3 سüµ ú8šÆ‡íC(ÊÂxmS㱬 ëqÌ6u1m]ã9„¶ËkÊ´ È{ˆ7¼âãMËß‹kþ{K>Ó´ n-v�!š]a}¾«ÁÖ…Ik+®òt,^nÅ]²úLMµÒgºPmS¾º3ø(ÊÜ´éa‹_‰í]z¬ð™ì4 þ\}Mª­8SûðãµMµŽÇLwA‹ºíQmCo]à9…¶ËkÊ®P7 ïv Þö€ÏÅrýg±ÝíÙã…}¦©ù‘ÝlC§Aoñï]ÞŽbª÷Q„q4¯‡Yæ ¹¸Êa¿x)6·´æùLuLÛal'Cˆj«©8CQf¯q ˜=n[36w|ì}qhWü©õX@MO*µAŸ×¥ºâ¬÷¯oL”×6ÕXÕݶƴ=úâù…¶ËkÊ.@Êr ÄÝðA úþˆÐ¾uµ¬ !jŠ+þ#Ï‹¥8»¾g-ŸiÀ„o‡}a\—Û^¹8SOõohfò¤•ƒÀ³×âžm<>Ó@3üu5èãºÜÎLÊÅŠ2w^Û”×]P`cÌÛ£ j _^SvÙ�«ØQ+ü!‹0®u€`]°Us…–Åb¹ÛWbŸé󙚨õ´ï"Œ£åÔ5^œuy ”‡X©“l{)Äb)Ö—b·gW•}¦VTÐôµ®Òò9Ê¥î§. Äk›ò¹ l©cÇT¶Ç6Åõ&¬]^SvÙ�?¬�ÃÀ¶Ð?lg�ñˆi{¤¶ððå5e— €ñÃ:�0 l{�ýÃv˜¶Gj _^SvÙ�?¬�ÃÀ¶��sÓqÚÂ×ה]6�Æë�À0°í�ÀœÄtÜ£¶ððå5e— €ñÃ:�0 l{���àc0_(È Ö€a`Û��ƒyøBA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë!d������º¬‡P�����8è²BA�����à Ëz�����€ƒ.ë¡h ²üQ¼~ýZ¼ÿþûÉÿ�����øR5Å;ï¼#>ÿüsñý÷ßëWýtYEU©ŽQ¤:Š>Å�����tAÕTg„gô<| ^™Š0 c��sõ³¸¿ùTlV'âxs+žô«áÄ~÷‰X/_tü¹��0¼(£p-ÎÊÓ«ð5HAÖT„Q �èÒwb·zaÜߦ±G«ÄöòFÜgUŠÏ4&mŸó\,×—7÷Yô´ßˆãäo‹ §'ñ°;‹Î?��ÆÆT”QØg¦é|¬ ³)Â(PŒ�ôäéVlŽâÙñFì³jäI<î_‰‹õ2-VŽNÅvÿ ÿ&ùLcbüu%l+ÖËçrÿÿ\¼Ü~I;±Zt_8¥Å 2�€¹k*Ê(êŠ3Ó{}õZ¹a(Æ��zd,Šˆ,Žvï‰#µ?>:7ú >Ó˜4}NR|ÉÏàCA��=³)Ê(xqfú»¯Î 2Ÿ"ŒÅ�@Ï‹+åq³>‘ûdV°øLc‚‚ ��"äR”5…¯Î 2õ˜úßüæ7Æ¿!¢ÿ°ÒZ\QÁ"?“Þã3IÝç<îÅUrë£Ý-‹O÷7bK·JÊX,ÏÄUévɧûkq¾:Ö}£¾£ö™Øë«w•‚ŒŠÁä½o‹Íþ§ä}]¢e„@ ˆé†¯Î 2òÅ_ˆ?üP¼ùæ›Æ÷!¢Ÿ°âR\-NÅîA¾ÉgúÖæ< W¬ ÙÓý•8=:§»»ôµÇ[±M ¯±¾ù!}ÏÝV¼|c)ήӇ„Pv´¾ìßÙç>Ý‹ëÖâìjŸü½æœ1¥ðÕyAÆ}óÍ7âã?o½õ–qSà¶E�€ÅP>G=d'6IQ%‹¦Ó«ü‰•‚,½5r±Ú‰Âõ°Âçª':þG±¸S×ÙR¼¡§Ë ²/ÅÝÍŸÄjùnûI��`’\nWTœÔ…'uÊôw_½dœKq†¢ � '.ŽÇg“¦ÏyúZl_–ž´X.Èôô•‚Lü$ö›·å´o‹Íõ§ÆÛ¹¬­I¼«Ýwú/��0'6Å/Â8Ó{}¬ ãlŠ3e��=h-®è¬0ò™Æ¤ñs¨¨z–\å‚L׫¶ SWçþqeYÉ÷¬?êÊÜÑ{bwÿ³þ+��ÌAS1VW„q¦é| RqMÅŠ2�€Ž5Eù#ìËsqëøØûÂ4&ŸC?].Àxq¥ßS¹-2-ÈÒBÞó+±½+Yߊ{Ù¾ü–Eù¹úvÆŠ2�€Ù0cªQ5‰ªMl”§Wákð‚Œ3g(Ê��:d,ŠŠ?ò¼Xþ^\óâÄg“º‚,{Ê¢Üï³ß2+NÉ+ò5õÀu•,›ŸlÇí¹X¾A˜ü÷Í™þ]´•Øl·b»½»Û¯ÄîƒËd¾ÕÏÕWøÚ~G ��Fc®EGŸÁÃW7•Txq†¢ � ]ª@ÒP†ÿ³Øîø“}¦1iû‹¥X_¼Ò¦»Óì±öIdEˆúÛB­6bWx(‡zÏgb½TßIãïù6»-’"¹ª¦o…¤÷ò��¦CÕ!EÇ%¾¢-È8õcÓ������¾º¬)fW�����Ä�����À@P�����L� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€  ����� 2�����€AñÿúÞäœùW����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-2d.png��������������������������������������������0000664�0000000�0000000�00000134241�15030617045�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����/���Çùlä���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¸6IDATx^í½ÍkÛZ»ÿ¿â=;d–ÑÓ‘GždÒI'hàI:ø@: …B@ Ê ‚À¦° ) ›pL¹¡lŒùÝJ1>ƒr?%˜›R‚¹žu­yéͱ^¢HÍ÷¢,KK뫵Öõ]/ò������0������<@`������x€À������ð�������à#������ÀF������€Œ������������� 0`gööð¸thØ ��€6P©5âÆ 6lذaÆ 6l÷·•¥r·T•‹ƒn­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€ˆñ“–Ó|w_¦mÏqÉ¿œÓêzJ“O+}Lü¤ÅïéÓþ“ÿŸ’³·OÃð ­õÞ_‰v/+šú}¥yl;¦p‰DëÅ„.j}ºÅýhÈeò ¼A\›¾GÁÅ”–Y…e5§Kßå‰u¨ï…4_݈ÝnÊöÞ€¼p&”¯Àú ýqñ™6OH3Ü�T@”ÉɹO®cÊð>¹þït1]ÒºööuÃÝÕÙÉ6€îR¥M©Üµ«A[Ój:¦¾F“… Æ×Kšžyb_Ÿüi}•ÉzÒpß§)Œ@«XÏÈFjoB×z¿D}áðq­ÏA×h^ÃkšCÐ÷Gε"«…Ú8îÍVv‰ùFï@|Æeöo Ýžøî˜¦‹Kò8é‰r÷5$— ‚UÁ¨2»ïOa�ÈEù«×Ú�ó}vµ1ï‘a¯·}¸Ã:;݆Ð]ª´)•[£v5h:€pF4¹¶ nð_и¦Êd½¼¤QßQɪD:¼ÜLÉï)#г¼õ‚&#<ï¨ÁêÍjhÌ1ëñ„‚ù½_³žQ0åH|î CZ˜"i×êfêSÏUK¹ÁÍäõ“ÏICt¢,Àk³³ÈDl1¾ÓÔ?®¿^½Ã:û¡¶áà×¥J›R¹5jWƒ¶™â¸cº4½Lrè2)P\¬—C°^^ÑY4•§&¼¥éò­æ!y\Èýzs ­i)›Àâšæ“€¼AŸúø;â:Á„æ¦÷Ó Z÷öŽÈűòÜâz£Ëì)÷§³õd«÷y³™)C<måí&ߥÎ?ù[›À“7÷wšF½bûäŽ?Òòú3Ñ´!³ØøC+á´6ÆêŠ|SVÍSÏóšOÔçÆ(,¹§Ÿÿ6[ÜðÄîckoZ¿”¶öT°<mE¹ Gºì›¯óU}­øš�´Ù#¯ë¸Ì2¬‰µ¯ÛÛ½X½zäShµÃ‘Ѩ£ÎÎ<·06™mxHËT½Ðl�@ø™-KåÖ¨ÊÅëÇL ÚpÇ•ÏaÔG(¸ãP|~Hþô»"t¬)=&€áé«©)?™=“Vï¦ @­´ÈJF"¯ïýÜT\úü×5ý¡…=×íÒ:‡¼Ì^f£‘hLxЉnô6úXët o4”û¤a» É©fµÎm¦I íiZÙ½î7V€ïÐ ˜©ò·óˆ€6fPNSxE2XØ]Ûì´Ý-Mê�@i,c¾[9٥ݳëÕ§.~Ðõd¤Fí6µrî¬6\ÕWäM¾‰¿„)¸|MþŒ�èUڔʭQû4»·€+޸׀Êšb ˜JÀT8²ÇcUy_¦ ¯j.sô½Moçæ<æ˜Í4‰нQå×¾ÞˆöiA” ý²•ȼ™}¦1úXª ò£ó° àQë˜ØóÐNšÔpólïP–ìc²´¤Ë)cz„FoÅ­ÚÂ�p»”á8»´{V°®ëÕT;È”ª³w;wº.ÙÄŽûš®ô�]¡J›R¹5ªrñ»…‡'ßYo\/µ+·Ø&{¯o ²*‘´È 4Ì1› ?UIE•Œ@)¢üKè—Õ¨XÇÆ7Ó+´Í˜óÀäQlDÀzÞ³´d6Þf®/ï·#ߪ-Œ��·a—áÔË2Ù¥ÝÛ-XϬ ”ë¢F`³&­ád�4?·e©ÜU¹xý,èÃäŸjzA„5ïOúMzQ1cÞX’_ñeV"0íÀj(b^V£MÃ2HJXÓåv^#Àdi%È.w‚Ø«FÕt¿Ûµ…�àVn]ç“äŽ@r]ØHxJÐX¯ÓÓô'�´™*mJåÖ¨ÊÅëGT8Ãç.’Ãzº"Ò…~ÓËaVp’iò*‘¤ØŽÈP¤†53*©¨òƒ(E”;Hk~z jÜòÖ (ÈH4¸YZ òof½ÝDê~«¶0�ÜŽ]†µÉNÁoà:§‰ ²wi÷*府Ьô‹ :P§ÀTiS*·FíjÐt0n~DLî•”|Û‹µØzBôs~‹ÐúÇì�E¿½g½ü/z;ù*¿U"l¾¡þ‡ÖQeU€±EÇ⛦7Ã2©J*ªüò*ºû£]Zg“;”å+÷$-hñá#ýsm5rÑ[xÉD¿…ÂjTLoXªGÊ2Ž0”øÌ^¿¬‘<aÂ.^mʺ,oºœï®-?'ßч&;îŽæu� $¢m¼ë·XÛ*à ^|¶öÝÖîm Ö³FKÖÙ[ÎÙ†/ß“ïÿ©×ªŠØ/ö� ÍTiS*·FíjÐ4 ?ÑŠƒúÐúľGgÉ7Å^OÆ¿h*�f-ê7ëL“•ŸU1ª f³®@m›ÞüÍkH÷éÈ},¾cõ~FÞ¯!õŽ´�NS{±€ØfòÐB±/öªÏø+ãì×ÎnµõüwôNú˜s¿ KÓ|ïr8ÍÃåéGÓwÔÆoô:ŸXåŠ)ôúдüð_4[|¤±,«ÉEÃùÚ2ë¥õ=;i�N�Ý!« ‹¶Ì;U¿,¬2lk÷âõª(ßïÞ%ÚA=úZ¹ÎÞrîT.î`ùMfÿcíÇ¢aÐøù.KåÖ¨ÊÅA·€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���uqïF�6lذaÆ 6l÷³•¥#�кû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º¸w#€ 6lذaÆ ¶ûÙÊR‹�hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]Àlc5§IàQ¿çÓôFï¥@ðÒ} a;€÷ÈzIW¯Æt6»Ö;@«X†äŠò±·çÐ ˜ÑZïnQ:ŸP0ÿ¡w6ÉH±¬KoBí{šW4õû±ô­ç¿ÓIø¥½šv˜*mJåÖ¨ÐÅ£‚c¶c —":Oíï“?]é/Uaó îÁT†óqgn¦ä÷lM›Ò²ñçp~–ãšæáˆúR}rÇi‰Ú¼4etX/?ÒØÝ—ßuÜ×tµü©?¹|Ç.9¬ãÒøj¹iˆíÏDàÕ÷Bš¯la×´š s_“ªCÒòê5¹Ž.§ý…s;±?ÏzfÄ35yG¾¸§ž?aM¬>Sàù4y·ž4÷­7}7SŸz‰ýW'ŽÕ›ãút>™‹–Æ"UÅ·vm-ãzBžs_v8‡Íï­.üFï¼É7ýwÛH¤o=£àøìóë×…ë–²”ÿ¦¦ðÅùA8´7H~`2öWE›ÊÐ~Ð<x"¾§|ÃêŠüñңñçáaS®²Áàô yÁgðˆ�oò¹þU<�;SX.3ýr¥ßEvHÎ0¤Å­eCëžÑlu#tSßyJá‚MÄOZ„¿Ñ(œ‰s gg"hOôÂÚ†>Q‡®4iãÀ6›”¨¼ò3Ã×RÀ=ï:ýC«7и12GäO¿ë´ ”x–UÚöcéUÆÁÊŸÕœ.Ù %Ž“èóÆòr½ Éè螃6Ó‹œ¨“[ÅZÄ×#rš¨û¥N=rïzGT:{÷iì¤aªªåW ÝžêœÓ{jCÖvú8&8n±qé.åÚvEùojŠ_<ï¡Ó{í#Œ@]×z—F§éçáaSª²`³vxB“k»Uº _$ö])¦ƒŒœÑ&¿e�pp{ƒš:NìÌ^iiÊ{Ó1v©Cµé‚·äu2îÑFãî�¢Ç‰€?'Mæ^bûõ±©i ºÃ"qib†kLgó‹sœŠ[ÞË}ïpž>j÷´ §ó~{ã¥amqg™,±ô©˜ ±ÀįkÖKšžyz:[¿¥©çáê?å2__~6ºÜ ;ÛÃÝý§äñqQ#ö“–Ó·äõõݾGgS*çaê@ì? ×{ª®‰ 4Fq­ÓF`½é騮`š¤Te± i˜ YŸ'èÙ)I1t°«ãAûzyEgÞ@Õi{òήD}h‚×dœ°ktïvOŽ$£ŠÛŒ€¨;/Çäötï¿ÜÅ$ÞÓªzÔt#F@N¤‚øœ¼Ð£”q³¤5H]¦Ž³§/ªóFó¢——42# lFF„N‹/4±Ž‡räB~—Ûª„)Ù´ûª½Š>×Z˜éZfãÏgÿMYŠÝ›YG'?ç‹Fþ6ÄÒ¸ü—ž&hFRÌ´AkDæ¡8—пðýÉgGß—üžxžå¨•Á´Õ¦ yûý*¹r¼KZÌCñy–©5èv‡¿Ï×þ—ù>?³_D–ð÷ÅùùÜ©ò ‰zã“ùaÈHçÜh žÅhº_tÿÛ´e,}û/(upìcZÚéáóN(0u„©û—~vùXÕYPï³Èåà(¡.sh×k‡u,KùojŠ_Ü*€Y[ô€p/ÊÓ¨a2¡ªÀì Q·é©1CájmôðêFŒÑ¡i°äP­xÐŃûçåK]�2†y„õ)†i$ãÇý]ŸPœ§EáÆá ¨±¶ÏJ©ƒb:¨2’Unä¾õ ‡}Àñ´­"à†ýUù‹ðºLÚû¢9íÜÙ’\#Àl3Vùµ×Ès&ÖödíkÂÈüÙOO¥ÒT×ĶÄh‹ ú²¯f¬ón­Ç´aü&;Ü}¾yÒ£#ÿ5xoi6?ùÆ'ç¼ä.ÇL‹i 4š,Ä‘úoÛ¼ÈãmîÍL9óÿºßÈtäMuQ½»¯éòÜ£aðI¿â¾Ýÿ¤ÙäL>Ò¹£ü‘ùeÚäb÷§Ì« þõ=DÁå5Í‚!9úYSæRç½¾·ç§§4Þ’oßg&qæ¾D§—oéx(âŽXºÒÈ YæO¯û¬óÃè¼-ü<ÐÀC>ßTÞ¶i˨söLlcŸ“‘Sßtþ· ¸e™ç•Óô\ò/y=K|$Cž'ÊߺžEþ˜ÿÄË{,vuÂõLYÊSSüâºáH=‰D?T±Ê”·ŒÆH¹X] ddWâv#¦Ýhòœú»±ó€œWÅ0d¼â8ƈÀ½Q\C]¾R:ÀT¡˜ÛÀO$ë4®ÿ¢¯É ß”ÉT=ºéiL¯=ØfQ®M¯ ™Ó"# ¦t¯ö'G tþ$z=Upš<–Ñyc}?/a¯Dàœ46j´ÁéÓ)¯_0ÆLöF«à< æSk-ø»zM*p4AÝÆă>=]ÊMÏEõîöŸŸƆS§Ù\+Öî&¯[àþìûá?²þ‘iÖk\tµé,tt¯½Ñy·ûÈüÚ˜ùýþSùïäz™®Øs`³-?tà“Î(¢©cšmÚšsö_È…îÎǘ–‡:OÅßÚlÈyÞCm“$ÌP­¶¦WÀÏD/‘©gÔE±6%NùojŠ_|ÇÀO6Y=0ÖË)]œû²ñÊæíFLÿߪm`¶S\ë¤ÈF IÊT0õSL;ÈÐXõãOYoe©&à°ãmu î(Iüvªwe 1]¦:dLýšHç¼ ^ßk*T^Çë½/+Ïä}Úæ)#—R`åC õô4“^DÚÁ•ú¬g5y}}o&È’Ÿ³9ãé-v ¦GËcÁ{Ös“AìÜâ:ͱ�Ñš–³óý Ri²G56åà»hûC^¨m£›|Ï Ü“èÀ::Þ|ßç›ke¬[óc[:52À¶ïómå9––*½q-ùú ZNCiÊÍ bÚ$‘ZY#'u=‹æódþÉû.»8lã6Y½SŒþî{„èï OëQ jŒìÈnÄôÿ“N\#°îSª²àÊ;S¬(K1’Ó#D3+ë9Õ@«z+{J£œ i䱆>‰nøSAƒ]‡ê]YØ€™Ž:ЊzE5wnrF@t>D¨AÞC¢*ïØhj©ä™�1/€Ì@j™€¦‚Á¾Dé^àH/ü›‘ôÄÜú(XTÏ‚|nù²^þ“þiëcˆ®ú9‰žG;@i:=¶9¶Èýe<v ªŸyoºíŸ_/èÓ§¥ Ù¶& I"²JNm²ãˆ8ñ{Òyiòc[:åÑ"ÆCê?²§.Ý¢­LOrJNBK©9Oï;¥p2§ëågú´ü—,»ñò%â§ùñ\$u,¢Õ-镟‹gâô’¦Ñ}›ëeÇ_ ¥ÚvMùoj _\W”¹=1Ñ~Ýpðóþiž7úæ?µI¨n$E�ÿòü-Ã÷êüfnžY#À…Dœ{6ãT|7z7Ï»{©ßè R\Š?hFÃM£bççÔA©Ê‚5J¾5(kØ™Â:èax¹@ Q'‰)CÑop ð–Fg:0ã^`Ù;øCu ä4Äjáb?ÃPì`ô 6=„¦ÇUɪŽ¿>TÒ”ˆÕ#¦ÍHÖKYû3öñK,.~×S¡ìž^³>Ãô îBVÏ®ù¾ Œ_ÓdúY´V°*óû ú=ržtùç~k#àþ¶™>a‚0«ò¥ÊLnÖ,§âžÆ“Œi5ê»mÕóÀ×pˆ×âþOé4øM“æ:×îë|3wï…§›éé-ü]ùœ k¦þ¬fŠãe~Ä‚ÔÇ‹@:ü/úÀ/ á¿{ÉÀþ“äçGd"´†&?¶¥S>#¾|eïLçËw°ÿŸíÚF÷÷oY¶=ï¹0Éÿ’kzâZêç $Žÿ®Ú`3¥ˆŸÝ³1åqªu¼sºúðI¤µÆgQ§÷4|Gg¦,˜|Éì„�U)Õ¶kÊSSèâf¾Y´i‡›Ú¯ƒqù€é·ÿH§kÞ¤âð~~ëÏe@ÏÍÜÀøïŒéT8×¾' ©\È& bìGpÔ[ƒÔðºÞ3 çÍÎØ½"zK5öEŸPÎÏâpP—üßú¥¸¦qçN ».TØuÞæ­AúCˆè·…èúN}¤Í¶üŽú,Hþ8–±3ÇXë}d`í× &‰…Æ"Œ~„.‘&&YÎïhôOuѹ“÷£ë–T}Å÷ù?‰c­ÍôôF÷›sÞÛÁ‘é6Á–1-Ú€ÙÁº4|}îèZˆÏôhpB2€5¦E÷ ‡ºÍct§ŒÓ'÷tª5¶ÚÑ,}"ø9±¦ï˜{ÕÁ¥ B÷éhø‚^]-è;ßCßσ¸NÑû³ßè-n5ˆ2 {ÂuGÏkò¼©§È‡œ S¥Y¥îizî»1Qº’lÏÜtÊçÝŠSt¾©ŽÎÛ´Õ=îRÛæ‹Kh‹ïFu°­%câù–¨üKmœÍz€:ŸEy¯4ýïHŽ‚Ú`}ËRþ›š*ÝZwŸòÚA5JJ²Ô Ü;y¯¿þÚ�º§×—Á¼(«“ åú¹ú<Ù‰8¤Ã(X÷ hŽãë$@­À€F€ÖݶèÐ$Üî둌_5G<у›’òàÞëÇè¬h <•ñä&àŽ��­»4lСYÖ‹÷ôêâî—#懤ôÆSR.¦†ÁýÁfÔ“±fÔM•6¥rk„íá�­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���uqoF€/Œ 6lذaÆ ¶ûÛÊR¹[ªÊÅA·€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#d½¤iè“ëS¸¼Ñ;-Vsšõ{>M3>ÞkšOòúò§+½ï×ÁK÷†í�:���¨‹îeH®8ž¿“ÚúSZ®KcMד9òØ,#ðƒæÁužŠFàfêSO^§#â+…nOåsjüAÓåÏŽí‘~ÍØ¿G=J•|Þ/çKy¾ÓÔ?¤=7¤¥ÞÊQM���`C•6¥rkTøâë'L¬—Wtæ ä¹÷Œf+á96ÆðÇ☜Z‰€¦_Ù0Ê ÀdcL—¥ÖœyÔçÚs†Ì®ÕþRÇ>¡`þCïcŒ Lî†ò•ÅOZ„O•Á†¨Li¸L\œn…\Í(ÔuäžãÒøj)JÆ]pMóp¤ÊçÞ>¹ã93���î’òm»ø®þ·4Å/®{nSÁ„îmÜshÌtÃUäX» ¸Öy:¬i5«�bÐ\ XDZF<ÝAÙÊb½éøø7zy”UAQŠëð“–Ÿ<ÿwº˜ÎéÊwsêQ7Ž_lLózA“ÑSqìwõwmp¹|C^ðYÔ¦ §ï7rý+ý7��€¦øEŒ€àzBžc|E޵1âùçcrù¸XU†XÍéR4®jJ‘C}ï­5E4zó?Éw÷åýÊé*áL6x1#`OgªÁd´âZo3dßhâˆÏLï}=ÇÂl§Te±ºÏþ+š®¾ä—GPˆR:Dpý•mÖó€½ ™±3‰¨—†É}UáÑÚÚ\Û•¯¨¯‡/û���Ü5UÚ”*­‘¤øÅ·÷f*3ÒI‘cmL 8 Ñd!ÂøkšCä7ù&>O5Â`¦­——4ê‹s÷Ç"ø/DCêìÓ0ü"Î¥G#ôw7F`AóË1 ‡¯é*2¿õ3½ÇhRæXmºRŒ@œ?…àå“Ýü¥<‚BÖ!Fžàráé2bq3%?«ž¬@¦¹àt=I_��ÀR¥M©ÒIŠ_¼I#`„úxG6^ # {òMɘ¹æ¼ï« B3G¸e#°OGîcêå®Yø5(®õ]ô±ØN1 y]€GÇÒ�30uq7F o?ëö¬Ö2Áåì µŸËå3½x��@Sü:F ö©Av@hŸ+n6½úV*Í¿‘æoulNð£¾Û£~ÿ@˜’§.~ÍÑ�¦^#€©A÷A! ¹'¹g´Øò¸ œ‡åÙf3ñ»1½T#���÷A•6¥Jk$)~ñ¼àÞ,�6Sp˜"ÇÚdŠrD §Ç�Ï«$«}x~W½Ñ™#&ð&âê3…Ãý-o2ê>ŵΠØ7 €aH ™]ukô@šGµ�t‹1…€���PÝ2fJÕˆl^ êPt¹y]‘cc˜@1±F ê±×=Ì&¸_‘A|ôŠJù¦Axª5öõxêÐ)Íÿ­§©Ñ„è¸_ôÍÅ43¥Ç6dÖ+Aû/h­§(s¬!0àõ¡·#ÐîÆäâw´FÀM=œ.¬��€¦éŽÓmìé›Íq}:ŸÌ7t‘c3¹–‹wÕƒì·�éÑ�s>³NÀ~÷¶<>¤yÔ³ÿ“–W¯õ¹xÛ'7øLßeï³Ù'Ì@Xiþõz¥ù¾vGQ~X›#‚˜óVþV9?(VΗòÀÔE5òŒ€°Âo Ê|“PU¸“&ùÖ ¬}���îœ*mJ•ÖHR­A]ZwhØîÊdþŽ@ôÖ§:Éúßú��@SÀ€F€Öݶƒâ:˜éŽ›¯h3£šü²0��<(¸¾/K娠ÊÅA·€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#Óú+…nO~'½ È þ éò§>ö†–áqÆq¼9Ô÷Nébº¤µ>”‡ó´8×4Ÿ¼#ßݧž?jÅY/?ÒX|ÆçvÜ×té ò(§h ëå”.ú=Ÿ¦É±3?i9ýƒoY®˜è:Q]øÖª7 ¢|†#}Ì>¹ã´¼ëÊruE~ß¡=7¤¥Þ�¸?ª´)•[#4h‡âZÿ yðD|ï˜Â¥næÖKšžé†ÍR0»Vûëy@ƒ½¹áW½‡Ê·äqƒÃ \ð™VúPŽ2åõfêSõ[*`‘ÁÖæ;MýCr†!-àÚ¶RX‡eH®ÖÀÞwL—s]†rŽÙ}Óe/užò&ßÔ5,8H }—s\ߣ³¿Bzy°kp¼­³@mòy˽¯¼ôª-–7u±^ÐädDþù{š~ýHþÎ÷g½¼¤oLçSúzåÓA–¸ž×sÉ¿œëzïšfÁz±òµ¦Õô yQÝ(êÌÉoäúWwXWþ¤Eø”zý>=‚� pW–ÊQ|•‹ƒnQ\kÓÓo 7^ceÍM£&tÛhLïÓÞ æ?ôNP†ÒåõfJ~/iÖ"V‘ãŒhr­EäàÅÉÁ†R:°ÉÀ“ËÆàØ2Ô\?K”7f%LZ_\·OþT‡ˆ\Þ¢m.«ÏâeOjù„NÃW4°Ë©€ÙQ캌î™.ÔKžq] Ðx€¬ê“ÌÞóò¦f²®Y‚ô}na=£`p´©ùïÓMù“ˆg`ø"±¯>Ö‹†â¹&oÉ…� À€F¨Ï0ßhâˆÏ¬à>Ϙ€sÏ¡A0á Ôk´†v0 •tº…ÚŒ€€GÒ£^⺌€.sl�nÁ§ùqk2{whñ¼©™û0R_7Vg½‰°`6¬õ“;2ã¬ýcêóˆ??0�´Ðõ3mÈê=Î5ªAˆë;©F¡^# ¦vܾ$©Ó(óõT—1Ûp@ènÿäß[�›¼GÚб)8¡Ccî8ûÖ(P%â×Ý7ñ¼©™Æ€qXÆ&û»I-ëBäš@�ZŒ�hî#Ðj5±�_å?Ÿ_mÖ@’˜H ç§'¦|êéAÛ¾WSGlæöç?;%Œ@Ê ÕHcF`£ir1>·— ÆïÈHSu@Ãð‹2„0�´®ÊR9НrqÐ-Šk½Í`jÐ}Pº¼f¥aÌœÉã Óm”Òag#7" 7 Wå­3ݬõ±*«©ï%ÍǶ`>I<h­}Dà—0~ÑBèÓpxF³•*]ͽ@Øžf#�@k(ݶ *GñU.ºEq­óŒÀf±pì 3yFÀ,vžR¸À«)«Pº¼fØ‹…ÕÈÍ¡¼¾Ë¿A6¥tÈ <íàßþÿ-äÙóË‹ó7½Ú´ÁÛ�Ž‹­eŒ@ü(Já{Ífg# á2÷l3M+3góS÷>'¯1I>b«mt�P.‹e©ÅW¹8èŵ¾åõ¡ý4±†¹Uiûõ¡Mèe®HéòÊAOÊìׇò«G¼>tJéxÊ·¸˜i;5Yí7A¢éA<:À½ìf¯eF ž75s/F ±^ƒM[ò­AYûîŒ�Ð`@#Ó:=] ÚDœ ¹Þ6 |æ±üûþ;šÔý>ð çiaäH¥I¬ñ_Ójj³–÷ƒG I)2OùcnÃg;¼>4ƒL# Ì{öZœ¯uO(L”Kxï·Ã¤ó¦fîÔ¨€û1Åkš_Ž…föÈhÖïøÖßwŒ��­¡T›¢©ÅW¹8èкû@ÃvPX‡¤ÓÛ­?(–Ñã/ç•'“£vüjH{ú‡5’;·µ[/¯èÌXdzi Á¬Î‚ŒÅÍ9÷~/?(¶¥ƒ#Ó ä‘{Oöýóˆh(ÑÛ|ž}O ÿ²0 ž•fL àÞá²X–ÊQA•‹ƒn­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@ÃvðKë»6¹mùÕc���;ÃujY*·FU.º´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#Óú+…nO~'½ È þ éò§>ö†–áqÆq¼9Ô÷Nébº¤µ>”‡ó´?i9}K^ßQzô=:³µX/izæQ?Òê­¥+È£¸���@6Uڔʭ´‡Cq­Ð<x"¾wLáòFí²GgHÁìZí¬ç özä†_õ;Ý'7øL+ý (Ga ¯'4¾¦+îWŸ)p÷…nO)\p°¿ÿFÃñGZ®×´š‘ëì‘3 i×¶Ô›Ýf½œÒE 걞OS]µ‡ë·?(ðÔó§”ušè:\_Þj´¿ÓÔ?Œ×·wÅêŠ|®—Ý–zW×ñ§¢Þ?E @À€F(®µééO6L"hœŽUã6hn‚ÆeHnÌhL£³÷„‚ù½”¡˜†èŸÒ™•çq³ö&ãwý²ŒȤpY’eƒƒÁøæ¸cºœk3sÌî›Ö5užò&ßÔ5,8H }—sýÒ˃]ƒãm£†jëùïè]Ö1ŽKþå¼ùŽõ‚&'#òÏßÓôëGòw¾×8ëå%xc:¿˜Ò×+Ÿ²Œ€0á^ϾÏkšCêåíõ"¤aïõ £~§åï'-§Ôë÷éQÌc3ñÉó§‹éœ®Ä³#�@3p½X–ÊQ|•‹ƒnQ\ë<#Àˆ Ò;ŸYÁ}žéH ‚ÙfZ (Låò*5Ê3dZoÛÜLJép3Mžl’ÇÖÈ×Ï2ÊÛŠ¦~_\·¿ ÎX˨G›µ{/{ˆ:Oè4|Eƒ„¦ÈŽb×e®iŽ ö’g\Ws352§=Trï÷ÑýŽféQ‚Í}îÀzFÁà(]þÖ_(ˆúñ=gê_Òpˆç"˜¼%7kD@’¥�஀�P¯0½ÇVoc®ì‰Þ#Ç›ˆp”¥ZyU†,¯GR™» Ã/0k·P›pÙ8Œ4©ËhóÍà&|rîfާ¬pP|(îUNS»îÃH}Ý„Ð#¬ý1MWÂÜ©`íSß¿¢??0�´Ð0ݧRy•½Ïy— FX°uÕKl¦ƒØF Œ%þÞjØÔ=Ò#pl NèÐŒÆq:öG4¹®Cèøu³ƒâ¼ ’ë7³¾h„Æ€qI•19uò‘®GóŒ`hÃáhía�h 0 ê5˜t”/¯ÜøL4ìßõß 8q_Ñtuv¡V# º8´çÔ[#�IbF œŸnûü÷¡ž´í{…1uÄfþzál~PY¬7½f3MW/ÜP*›úwh¤á<ØŒøÁ�и~(Kå(¾ÊÅA·(®užØ,޽a&ϘÅÂÑÛj@YÊ•W^¤xB'“E¶ ã· y>MðÚÐ)¥ÃÎF oD An@¯§€ÅFߨ¸+Óžú^Ò|dóyTØ%ˆ¾Cšà·ñ„> ‡g4Ó†[-¶ëÅ»2zp²¾†� ”kÛ•£ø*Ý¢¸Öo‘±_Ú ·¿>t@£¼@ìLq ùM ohlç=þ£ßUï0¿EeüÆÒQ˜¼Ù[aäf¥êÍÜÀÓþ ‚yF@öür™ÛöjÓ#rÛàÂÁqÜd“TîòÝ;¤i# á€üY4M‹¿ÛKéÄÛ–‘ R°¼Æ$ãZ™fF�€&á²X–ÊQ|•‹ƒnQLët/a´ñ«ÿÎ?Ð<šF’ž°ÙöÉõßÑļ"T‚ótwÔë £×CF›Íï ¤>Çk^oƒó©09§ì6Óvj0Ò›yà6Ñô à /cšX“F@¾)gxÏÚ½Äzw5"F�h ¥ÚMå(¾ÊÅA·€ÖݶƒºŒÀzù‘ÆÃg;¼>4ƒL# çœg.Êß�ùúP÷„„A—¦d¿#°^ÒÕø) Ùׇª€ûUõkš_Ž…fÛ¦HÂ�ð��­»4l…uà K|‡¿go·þ XFötž¾Ç ÂíéÖ”¾Ø¹Õô½õòŠÎ¼u<Þ…[~ù6IÖ¨arJKÖ1b»¯ËKØv_!ÈÑ3~ÿ<52$ßu‹éƒo[»º§Y°ê™ëˆ-zƶŒìfN�Ô—³²TŽ ª\t hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶƒ_Z‡Ü…°Éí´�À‚ëÔ²Tnª\t hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F(¦õW ÝžüNzüAÓåO}ì -ÃãŒãxs¨ïÒÅtIk}4(çi1~Òòê5¹ŽÖ£?¢p~­?K°º"¿¿OnøUï�y×´‰õrJGýžOÓ½³0¢lMÿ ÀPÏŸŠZÐf[Ø'ºÒÇ­hê÷ÓǸ!-õõ°¥>Ï̾·|w_w(Òü}óÙ®u �`'¸,•¥rkTåâ [×ú̓'â{Ç.uK±^ÒôL4 Ü�8C f›`=h°×³InLÞ’×wÄ9D€|ͨBQ ׋ B𝄠[}¦€öA@ó¤+[¡pȾ­È£pYZ†är™IlŽ;¦KDå³û¦µK瀼É7u †Cß%Ç×÷èì¯^ìg¦×r“Á°þ¬è}Ö¯49‘þž¦_?’¿ë½&X//éÄÓùÅ”¾^ùtcÒáM¼c æ?ôßl\+Ïî 6Ì'®s=!ï0Y\Ó,8¦Ð$à¯i5ÓÀ=£×) ×+CÂ…é�…뺲TŽâ«\t‹âZ›†Ü2ÕH3`•²Ï$eO3›'VÊP­¼jc—2?iztì¿ #(¥ÃÍ4xrÙˆÀ02Ô°=K”7Æô[6—·¨7—Ë곸vä9Oè4|Eƒ„æÈŽb×e®iŽŠ÷’ó}õ’uĆ›i^ ¬Òÿ<°ò=ÖÞ;®ÉÒ£Ù÷—C*ðnÊd±É9¡Ã`fÖrÝþŠ\ÿ*§Ó&+½¬åSÄÎ�(Œ�h„úŒ�Ã=[â3+¸Ï3²Á‘³ç ±¨Hùò*‚¼Ë±ã£8±†?W?¤6# à‘´ÃaH Y0ê2ºÌ±¸™Q08²LøwÌe”F`G# 4éyQ ÷i¸?Œ?kñ¬žÐä:¯–ÎJo–¡��F�4B½FÀL²¦l $Õ´¡=rb (J¹òÊÁ•žœ˜Ï«¦8¼UÃü0;SJ‡¼À“ƒ¯ÁS]Æl# ºo5ä=ÒÆ;¨q:öG[‚½‚Àìh2ïÈàYS¡xŠVkªxt¢—xxßðœæó?£õ±ék9Ýðä’–æk<­pô†¦fª� 0¥ÚMå(¾ÊÅA·(®5Œ@Û(_^×´2»#‚NžÏË ø±5·F`gJéxÚ¾eÚäfϹO3 ’Až=%eÛ÷ÊPÑÄI»¤i#pko»b½üHãæÜË‘¨D},ëéþ¹ƒ!¯”‘éñì@Ÿ×íÜÇäˆç“ÿ†_îÞ¸�ð S¾mßÕÿ–¦ÊÅA·(®õ6#€©A÷AÕòª ™ .9€éÉ`3c»«^Ø_ΣÂìlòFäôYSP¸¼êEª©ï%ÍÇ^Æ"×-Àìd²ïlš˜jÃ9Ç©éaªNØOö7Ó7t"å´ýFDZÏyªÙ3¡™y«� (¥ÚMå(¾ÊÅA·(®užØ,v¢¹Í‚<#` ›žhPšÊå•{†œEÛ¹F$)¥Cnàiÿöÿo!ÏÈ©F¼8ß2vrÓF|[�\&8Î4#ÀdÞyìj.J“3:¡: ’ZÚZY†ÒâÎÓ À/N©6ES9НrqÐ-Škm¦ÿX ƒýúÐþ šD¿%`;´_: Ñdq‡=\ƒJåUhw5v©g›7)¥CNà¹^„4ŒÞ$SÝÈrèd¬ˆ¦q0ÇAzFîìžð¼Àø5;N RpÞÝéèiîè„|ð ¡ ¼õ7ïãgÇK=Ÿëùc´€ÒÀ€F(¦57È9?@ãˆþüƒz7½ÄŒdË¿à¿Ëx5(çéî˜)YF þ!¸‰¥[)¦ƒ&#ðTóÁŸíðúÐ 2€2ïÙkq6@¾>Ô=Iý”4%ûõ\ö­ßÑ?H5g,0ý5€4g©évz —ëS-Ö¯pígåM]ð3âæ–s™Ö¨“Gw港tzx4ø yã›Å«…£ß0Ú @Jµ)šÊQ|•‹ƒn­»4l…u&Ë6Èj»õÅ2zü9ðL¯íà@œçjÛo ±‚󨹕Ù[/¯èÌXdzi­_ ¿…œ{ÚlÖBçÕœ.…1P¦”mümü:ÒL$¿¦4¿ƒ£ÐºˆÜ{ÏZÜÍ%yïÙç@Ûþߌ¼©Î7{z ÄÉM¿5(2rÑ/ 7ô–#�~a¸,•¥rTPåâ [@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>аüÒ:ܺØl[~õ��ÀÎpZ–Ê­Q•‹ƒn­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�h„bZ¥ÐíÉ路yÁ4]þÔÇÞÐ2<Î8Ž7‡úÞ)]L—´ÖGƒòpž–ç;MýCÚsCZê=®i>yG¾»/®Ñ#7üª÷ƒ,ªé�î”õ’¦§äõäOWzgQÖ´š‡âŽªÇú# ç×ú³$º\íS¸¼Ñûëå”.úQ]øÖª7ïˆÕùœîÌr�h#Uڔʭ´‡Cq­Ð<xoฑ=Ó ›3¤`¶i×ó€± ò'-§oucºOnð™Ê6Ë@Q¾¼þ¤Eø”Ö- ¬4 „ž.ùá”–pl·RX‡eH.ç}bsÜ1]š�3ç˜Ý7]öRç9 oòM]ƒÔÐwÕ3Á[ߣ³¿BzyàÓ4Ïæ“›fSät(ð³v9¯¹>õÍÄ'Ïÿ.¦sº÷VÚp0=ÒøJw`¬æt9~M‹t¿^„4ì=¢þ£§q#p=!¯gßç5Í‚!õ†!-©rÞë÷éŒ��ëŲTŽâ«\t‹âZ›žþdOךVÓ±2ƒ€æ¦Q“AAFo²é¡Ú{BÁü‡Þ ÊP¶¼r°r|ü½<AY,@н™ý4¹ëžÊ_ˆR:ÜLÉOÙ2à<¶ 5ÎÏR=Ëâ@¡S_\·¿ n¹¼õÌù¸¬>‹—=D't¾¢]Nëå%b×e®iލ³ª®èùSñ¿$œödPÎÏÝÑvd]sWÖ"ëNè0˜ÅG1¯?Ðø,±oý…Âá ‚÷tž©[‚õŒ‚ÁÑÕƒÒ”̓É[ra�è 0 ê3Ì7šxâ3+¸Ï3²a‘³çˆ3Ñ‚B”*¯lº¯hºA ÷ÎZ‚ ê»Gzú€¼pvGÁÙ¯CmF@À#i‡Q/q]F@—96�7Éà“ƒp7s” <E€€ƒâCq¯½ìÕ©b2LÃÆêÐ6TºC¤?Öek# õuïȰ®©ï_ÑŠŸ �:Œ�h„z€™6dM;È5*؈ë;Þ„òfÚ‚Û)¬!Oû99Ñ=¿zšF h £ùÏjê‚“3•l¨Ó¨^b3­Ä6É`6ñ÷V#ÀFý‘6Þ‰nNÇþˆ&×uZòF@>nf}Q*F oD@}K?9ÒùH—•<g£F\w25H›Gë #�@§€��#Ð}ŠiÈó…=:¿è€&iô¨Ž0Èé${90ÔjbA«ÖHœ_mÖ@’˜H ç§[Á¾Ý›½í{¥)c8K|:¸“g­ŠÄÖèµN®0-}cØTýçÜ:’Ãl4uÜ×tuSð¤™< ¡)ë0�tŠRmЦr_åâ [×z›ÀÔ û †xöL@™ÜXÓÿM´À°m‡ó°0;¼¹½*o½˜†\^UYM}/i>ÊÁ_̈<´ß$uÿ}¤¨ÂÂDÓš¶ ¿h!ôi8<£ÙªÎZP/¶G`�è¥ÚMå(¾ÊÅA·(®užØ,Þôˆ òŒ€Y,ìØ '(Cµòª¾(@У:f:#{{0l·PJ‡\#`‘;”†<# 5Tl|ÓF<7‚mŸm¥ŒàïdÌů…ªF kT… L/•¿¼mÁ‘pÐþ,=í¨|¯¼~$#=µü��î.¯e©ÅW¹8èŵ6Ó,#`¿>4ñ¦™í¯Ðh²@pY‘jå5i„ff±ðè’–k~ýâ êðÝJ)r‚l©A´µºåÐ6w†(åÑ’¿ë,š4ò;Ã;Z8[·Po9Š¦Þ¤ØU·œõuƒ�:Œ�h„bZë Q|'µñ;ÀÏ?Ð<Þ6#Çòïøïh’ûc< œ§åILvÿá$`(¥CF½^~¤ñðÙ¯Í Óè¹ë™S»6@¾>Ô=Ii-M‰½ vg õ’®ÆOiØÊׇ&#r¥YÖûR$uSÿ öcŠ×4¿ Í0Ú0�tŠ*m{å(¾Z`º´î>аÖ3ñþž½Ýúƒb=þÙÓRxÔŽ{­í)"ÖH^ìÜjÔn½¼¢3o`Ϧ=,öË·9÷u??(¶¥C¢ÐaŽggä:껎ëÓù$/­Éi9öÔ  õ¯u›sYzßl6íuA˜@'àòZ–ÊQA•‹ƒn­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@ÃvðKë»�8¹ÝöÎ|���»ÀujY*·FU.º´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#Óú+…nO~'½ È þ éò§>ö†–áqÆq¼9Ô÷Nébº¤µ>”‡ó´8?i>%'ÒäüéwýÙ5ÍÃõÍgŽKã+huåt�°^Òô┼þ@<ç+½³(kZÍCqG•‹þˆÂùµþ,Éwšú‡â¸c —7zß¶:±_!]yü¤åôí&½¢û—sʽÊêŠ|>Ö i©wE¬fzƒè<éú ž7Žû𮢶ÀP×1�< ¸ ”¥rkTåâ [×ú̓'â{VÇì™§GgHÁlÓ8®ç özä†_õ»qÚ'7øœß0(U^¹ÑœÐä:Þ¯éz2a@£ÉBüeš'Ìèc@…uX†är™IlŽ;¦K`æ³û¦Ë^ê<äM¾©kX¬—S }wcûýÒËŸ¦&žÝÂÍÔ§^ì:ÖylãŸ{_v]Q¢¾™øäù¿ÓÅtNWâÞJÜ²Ì 7AðjN—ã×t±HªëEHÃÞ#ê?zš2=*þgó&ÞqÍåKÔÓ1õ£|ç�ûOòÝ> Ã/"TÇ@¯ß§G)# ê€ñ‹M½¾^ÐdôÔê8ˆ¼{oi¶Rg^//iä¾¢©þ[R×1�<¸N,Kå(¾ÊÅA·(®µéÕ²{ºÝðpc>hnêmÙàg4îܨJ3€�³*Å5ä`ÿ„ƒYF@ÖWwÐé6JÕ›7Sò“A¶ 8E`j‰{–(oÌJ˜´¾¸®Õ›Ìå­gÎÇZ>‹—½ë yÎ: _ÑÀ.§tÅ®ËèÑ¡èœ;K#‚ñ«×äŠë¦Ÿ¡¼àø.àü*krÊÌõŸ%ö­¿P8< AðžÎ3uKÀšƵ¨ßë“”Ù“3 Ýi\XŸÉ[rF€¿sèMÄ“`!4Fû¸sè8q-ÖÕ³öÕu �Ðõ†{¶ÄgVƒŸgdÃÊ=ÏŽh0³R°+…5\Ï(° SS´ÂI|º€ ø³æ«‰€â#7;P›ÈàkÒBŒºŒ€.sÞð3pdæ<òãÖp¥Œ�£®½Ÿ øU}Ò~#ÌKM*ˆ7=ñcš®„!¸Õ¨|é%í»B¤wtlž+kÿ˜úþ­X»˜È Äù¹ÝéEñ|_¤F¹a?º¯ºŽàá�#�¡^#`¦ YÓr€ vâú*ùJ”-¯< ä"à)]"èç @ï—ÁÌìŒ\‡§jÀ¨íJF@™53­Ä6É`6ñ÷V#ÀFý‘Ö3Ñà ì*’ixêɳŒQ¨®D~Øì[÷*G:éú/ÏÀÙ°&‡ õx .Þч˜ÆÚ¸8Zû”ÈË3ëÞòžaû\uÀF�4Œ@÷©V^Í”.{ÚOåxCÞè”Âs_³^�l£V# À8è²éoYXÊå-„k8híYÁ¾Ý›½í{EIž‹×…â9¼ IjágWŒ€@NÙ2kôZ'×%·o ›ªÿœ[Gr,Øðf­Õ©^+ñ†ÆÉr, çÁfÝ@*èæ<;̨¿F —ÑØçªë�UÚöÊQ|µÀt‰âZo3˜tT/¯Ü¨h=„²'—ß.d¿UdQJ‡@Þˆ@.o™}Ök‘jê{Ió±·{°.Ëüæ{ò¥�þŸ4Ï\ðÙ!#Àe#öF›1]þ}¤¨ÂÂD‹‡o7™óïk'Çè²Ý‹Œ‹ tÃ�p_p=S–ÊQ|•‹ƒnQ\ë<#`z–E™lX¶-v솔¡ry•½‚f:7ü}Ú³ƒBî9v²GuÀ†R:ä;ˆ¼= Œàò–e¢u!v€Î›6â¹élû,‹Xtðl¿m'F—Œ@Ö¨Jî“rGp²ÇÖÍ5ÍÎÆô*3ïuYÏJs¤등6‚Ÿ {@Æó™šÿ_Ë1�<¸,–¥r_åâ [×ÚLÿ±Œ€ýúÐ~|ø_Mÿ±ƒH=¤.{Õ0å¤ k¸šÓÄ,Ú]‡4]ÒR aF�Œ6Ü›øBh‹Û(UoæÙ²w9Z„ZÝÈròXD,pœ¡q%# H÷–ºlx‘íQÎë8™[t»óiA¼&à ÅÞu ¬]¢÷=kÔ"¾/ËÐ$÷Õu �ÐÅ´æ†-çÅøÇjÎ?XÃÿfä ãX9UàMrŒó´ê­@Z Ö-œj ±9fÛIQ$Aözù‘ÆÃg;¼>4ƒL#ÀÁÔ“œµ8 ÞÙ~’ú‘,ù¼Ø bo#3 jÄpàžEïˆWtÔÈ22"72ÐYl×Mš³;›ò’3è6S—a2Gàä$þšÙUúýÿ'Öß’ºŽàPªMÑTŽâ«\t hÝ} a;(¬]â;ü={»õÅ2zü³§¥ð¨÷ZÛÓ?¬‘¼Ø¹Õ¨ÝzyEgæd實=´~1|;ÉtÄ|ù~ý}±_¤á¿ßeÞ{ý?(¶¥C"#óF&z“käÓyâµ»’Sn²¦qºžÞÝú(9Ï\?±eÝ7„Þ–cðËÂ�4—²TŽ ª\t hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶƒ_Z‡œ…Íém˯��Ø®SËR¹5ªrqÐ- u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€�PL믺=ùô6 /øƒ¦ËŸúØZ†ÇÇñæPß;¥‹é’ÖúhPÎÓB¬¿P8ÜOh"¶A@s-Èzù‘Æ®:Æq_ÓU¤+Èƒó ´‘Ÿ´œ¾%¯ï¨çÜqÉ¿œÓJº3ë%MÏ<êëòâ¸cºœ_ë“|§©(Ž;¦py£÷®iŽôyöɤeª"´áú2¤ù*¯¶ÌºÖ–ººçÓ4™¤­É¿5­¦c‘î¹áW½Ï >›‡Ñy²ë•]Ž)šyÇ�Ðn¸ ”¥rkTåâ [×ú̓'â{V£c7΂٦q\ÏÄ»Qtð¹xƒ bÕp=ÿF±|ÿFï ‚™2f«+òûZd8ÃhH·R¸,-Cr¹Ì$¶X€™sÌî›.{©ó7ù¦®a±^N)ô]rÌq}Îþ éåÁnÁãÍÔ§^ì:ÖylãŸ{_Ydt`]ŸÍ?Éwû4 ¿lÒs+\‹€ü­îìæå˜ÜÞS i“¼^„4ì=¢þ#ñyÌpzÞ•?QN~#׿²Ê£Jó ‚UšÇã÷™e0ûZlÉŸ&j×ë y‡Ã;óOv2ˆ´ôûiE½2ù7Ó†f½¼¤‘ûЦ¶Á¹õ˜]óï¶c�h?\'–¥r_åâ [×Úôô'{ºtƒÁ¹Õ³¬üŒÆ]›lžP0ÿ¡w‚2T.¯8F‡µøsDŽ3¢ÉµQ~ž8‚ ¥t¸™’Ÿ ²¹l Ž-CÍAݳDycV"8í‹ëö7—·¨Ç—Ëê³xÙÓZŸ†¯h`—S ºb×etÏj‘^äXˆ]½&7zÆlT}Òó§âwçѓԳ+;(÷¿Öiß*î9Úhƒ †Äþ÷tžÔm=£àð$q¡ïð…µ¹Ð!–W\.Oé,™Û®•‚ÏqB‡Éôn¥Hþý¤Eø”œÁšœ'ž;™Wljó°öžµo‡cvÉ¿ò€ö#�¡>#Àpv >³ü<#`Î='Ý‚BT+¯Z‡¨Q׺!-åçnX=èt µZ‡Ñ(L]FÀÒú†5=²‚MîñvS_)RF€Q×ÞOüwmr†ht\u”‹ïé7:ŽõŒ›ô1MW"HOê&òfèM„½²IÛYzóµ’Aü-×JÁeû°³òOvî<Ïâ·ÄsÇdâ<‚´åÇÇì’;å1�íF�4B½FÀL²z9(ÈîWÓ†öÈIUÚ ÕÊkbZ Bz‰À,kHR§PæËLõ°Ch\kÊGâïXž4¶Ö‰À2³Ç»$±4¸·øYFoô}‘–‹wô¡ê½®¿ÐÅÙÇxÝ%ƒáGºþ³uSpP{i†’:e$ŒÔ-×JÁ£A½:4ÎÊ?=…PÖåÉûä=çü¬˜N‡ŽÙ%ÿvËc�ÚŒ�hîS©¼ê©"› F ,µX€¯òŸÏ¯6k If®I‚ü·™/¾í{EIž‹×…>¹ƒ4I-üTõIsÏÏCãÉ"aH ²^Ðdü&q?ªþÛ¬§É6={´M’ RUO´F@®Á‰`øˆúÑwo¿V9ÊT¹®ÍÎ?Y—;f½DFÐÍÏy/£Í°‚ü]ŽÙ%ÿvËc�ÚO•¶½r_)°�¢¸ÖªáÆÔ öP¾¼j bs}•†1s&hèt¥tØÙä$È è•Ö½X hõ<§¾—4{»ë²Ìo¾'_ àÿ™óÖUŸ4cîÒðn^´k/.k˜Ä[oDþý=yM‘ÙåZq²æß%'ÿä:{ñpÆýÀ�P®?ËR9НrqÐ-Šk­îm‹…co˜‘AÁ–ÅÂQ/(KùòjO1èÖba5rÃo ù.ÿÙ”Ò!רÝmAžE* ×È©FꕌñM¼Üt¶}–E, ¢^à×A†4¾Êz]°ªOîÞ\ÓìlL¯2ÓP€Õg:óƒÌ×éÊ�4•¿¼%Öp¤‚T6w·Í_OåÚéZ6™ h‹°%ÿd�Ÿ•Û<f?Ã|±5·³Kþ•Îc�Ú—¡²TŽâ«\t‹âZ›é?–°_Úÿ« Ò6?­×‡hTµw”.¯é^E4iúõ¡Üû9àõ¡;PJ‡œ [j½æ±ºPS72æ‡GÓƒØòHC†Ù«d¹ÏZ#F€ç´¿¡³ØÛJÀkÆï¢W[ÞN†nYù.A:—É8Wn§Éög¤Ú´ ¢ù—Õûž5"‘Ü·Ã1»ä_Ù< eÀ€F(¦5769?RÃ?2sþÁþ7#ÇÊ¡îw4Éý1PÎÓâ(C—½>C÷âJ³Æ?fdÞ¶QJ‡Œ [þ˜ÛðÙ¯Í ÓlÓzc�Ô;ÛO(L”KÄïW3ò™’óÞÏô]œé,EÍMÎt î­N/L5déÆù|ǽoýf½¼¢3ïø–N“mÏëï–œS&ÿ²Œ€@˜™äoœXKn=f—ü+žÇ�´‘rm»¢r_åâ [@ëî ÛAa8`ßáïÙÛ­?(–ÑãŸ=U„Gíøm.üŠQ{ŸþrìÜjÔNëx6íáÎF0™ŽX€/ç’ó¯U‹4ü÷»Ì{¯ýÅäbø¬ëˆ-#³1ë™2Î!¶´‰ái(vž'§ëÜö«·×4 †úz·ušÜv-†M‚›x ÑŽÌ¿­ús€Ž_`g¸ ”¥rTPåâ [@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>аüÒ:ä,lNo[~õ��ÀÎpZ–Ê­Q•‹ƒn­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:€âü¤åU@þÙgZé=­c=£³“ Z¬õß�€F€�PL믺=ùô6 /øƒ¦ËŸúØZ†ÇÇñæPß;¥‹é’жT‡ó´kZÍCòúŽÖcŸÜñGZ1ÖKšžyÔ´zké ò(¬Ã2$Wæq|sÜ1]ίõA̶r§¶ž?%nES¿Ÿù¹Úzä†_Õ)S×> oòM}–B«Ó|w_«ž‰¿Ât ¯»;7SŸzæþ•~“÷wLá¿‹¥OÝ_⸞OÓ›œzF~&O¾!3¿ûäOï+¿¦YpB'“…(‘ÛêKsÿ÷Åš‹tóúo�@pÙ/Kå(¾ÊÅA·(®57 OÄ÷Dc½ÔM“8:C f› f=h` 2¨x«ƒP€-î ë…5¼žçˆ@lt)‚a ¦c¡Cƒ`&’µøø7Jc >›‘ëˆàt¢GðJÕ›7SòAëêŠüÁq¬)cýÌ*G8¸V9wØràÄ9ß—ÏÂ: _Ñ`Ð<¥±(¯“4pÏh¶²>\Í(ôåT¾ç×O)\X3–^AVÞ0|œÒRÿi&#c y}«þºØÓ 2CŒ6±|QÇʲY3ë/>}Îß ¸?ô&"5�€¦€�P\kÓs•lHM@)x; ½p¶Ðp°#ÍÀô4U¤°†IMd`dŒÀ7šŒßYa†ñ™Ôf2ðŠ™¯»0lúFäpy½™Q08J—EiJNhr]c*ïù„‚7OȱƒËct]ÙÓÔ6Wº¬™<YÏßјGi–R;ZS6CêíÜ'µ�Ü90 ê3Œ"½ñ™Ü'ƒÎ„D=Ñ ,…5äžÀá>íõGοˠ$Õã¡õÎì-6už— žZe,Èo‚›¢F€Ëë#k$è$ÕóÌ×Ù¯»'ØÜówî °ÌÇC1²¤—®÷¤æÔ­Õg Üç›4Ê4ó4!®Kÿ)GixON¯Z/h2ˆÏ6Ó»d^ˆçqoðš&½–£z<}sÄÓ¢NÞgmÑH„euÕÈ.:�h’RmЦr_åâ [×z›0½ÇÖ|ã\#`—½x¯ (L©ò* =ç{kÏÁ á—xÐR”Ò!/ØMõQ¹Ûn·NËIÖIxZPo´éíç¿ígA]³öùéÑ=ÿ¤Eø”zfäãAuÏNrZ”ÀÔ‡‘ÆIíä4®Çä>yÁGšðz£—œœP0ûL¡{`Õ³zt¡?¤—áL˜mþuYOöêïM½½^^Òhx= ÊXÀ�Ð$\”¥r_åâ [×F m”)¯ëåG{/('_j½€þ0BMa`}ÀN”ª7 ÛFl5ª×7>5„Mß±5=(ÃÈòl«eÛÚ÷,{ÁEp;ýþ0Œ€¼_'Ã|ëºÓìAÿhdk£{é>¹§Sñt˜…Ó‡*ïôZH;yžµ ›Ÿ'adþ¤{üUžlêéõâ‚NÎ̈…N›c™F�ÀSªMÑTŽâ«\t‹âZo3˜tÖPN ÐSëEHC^<[¸(àãÜW‰yÌ Rõf®à@ï™UÆâF`'¶Š4Ç·xyÜf8v2#YÄîÙ JÅsX»È:‡ z“õWÒxÝ2`Ϩótàí¿ùDgoíct0nÖèó¨2›ìe'‹¸ÇÎoO ÓÈ<±Ö ù§V¹×¦c“�¨RmЦr_åâ [×:Ïl ÇÞ0“gÌ<ÕŒ!rPŒ¢Ê€)Ö“« œÝÐóÔ!ϧ ^º3¥êÍœ`Wš³Ô4úŒ@*P4p€i_—ÿ$µ*ê19m…_?ü*ž^^Ó •9íYo°é„õaz%95'BÔ“cÿ]Ë@þ@OÑ3£F¿d`¯§Ey”˜Ž$MD2 *Øï cñ}ú;<Ê`Çïcz � #�¡¸ÖfúÕÚ¯í¿ˆª³€ýúP½xMÊQTÃh@O’óûÖ4^|8~céȯ}K£hª�È¢.# §m ŸíüúÐ\r@2P´á ’bòëC#× i3*¸Ü¯ÃðóeÞ8K¯^C`-d—yãYéÛÐ#|SÚwqíÃÄÔóÛ Â s7n*ðÊ« ÔŸÐéäŠ>É2kõú×¾U×Ê|纜ýCÏ(#฽O¬i‚‰‘�@cÀ€F(¦µ™—jO%Л#ÑóV°`F2ŽåßðßÑ$ö£I ,œ§Å°Í˜ÑãO¥½ˆ8¶á5¯·ÁùT&óy×ËŸ›¯F|ìcy3¯ž+žÚ/ˆ¥'ϼëϹ¼‡ÓŒu%ÛI¦m³þ@J¥ŒË5Í/Çú­7bë{tû!ÂmõŒÞÌ9sò{³•XïP”¤ ‘A|VZô&ƒÿÇ›üMyTyº1öÉs:®Oa”g:¿ú.y±€_?É€_ŽÜê5�€Fáò[–ÊQ|•‹ƒn­»4lÐÜ{AvÝd,Þ ‘.œ˜ È#GøÑG�î Ðкû@Ãv�À.¬çoiTdŠW!ìiA·`Öf„(ô_Q…â)EüšR˜��î Ðкû@Ãv�ÀNˆ�üâÕûú_É›;µ+ýæ(Ç}MW±‘€kš‡¯hŒõ[�Ü+Uڔʭ´‡´î>а@���u#�Zwhج·.Â5[‹q�àëͲTnª\t hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐç'-¯òÏ>ÓJïië\Ðb­ÿ�4Œ�h„bZ¥ÐíÉ路yÁ4]þÔÇÞÐ2<Î8Ž7‡úÞ)]L—„¶¥:œ§ÅXÓj’×w”ŽKã«-VWä÷÷É ¿ê Â:,Cr£2±ÙwL—ók}³­Ü©­çOE‰[ÑÔïg~®¶ÞFÇԵț|SŸ¥Áê4$ßÝ×Çrù}K…/è@^wwn¦>õÌ9ü+ü&ïï˜Âÿ~KŸº¿Äq=Ÿ¦79õŒüLž|Cf~÷ÉŸÞW~M³à„N& Qö¶Õ—æþï‹4é æ?ôß�€&à²_–ÊQ|•‹ƒnQ\knžˆï‰Æz©›¦õ’¦gõ¹Ñr†Ì6AÌzÐÀ@dPñV¡"À ZÜÖ kx=!ÏÆ-œ‰¼zL^힤úõ ‡üÙú<JÕ›7SòA+›¯Áq¬)cý,S®U@ÎFÀݶøFqÎ÷å³ð„NÃW44O¹Aõ| Ü3š­¬W3 ½A¹�•ï¹ÇuÅS ¦ã@K¯ +o>Î i©ÿ4H“‘±?…¼¾UÝ lŽi™!F›X¾¨ãƒYý&\¾Ÿ¾Nço\z‘�@SÀ€F(®µé¹J6¤kZMÇÊ Ø…ì…Ë$eO3›Œ�¢˜†Z¿Xé7šxäÄúŸ´=:ö_ÐŒÀNÔf2ð†ÖtŒ»0káFäpy½™Q08J—EiJNhr]c*ïù„‚7OâÏ܃1º®ìij›+ÝÉbòd=Gc¥YþIAîhMYØ` ©·kpŸÔ�pçÀ€F¨Ï0* Œ÷yFÀ!{ ëQLC=¢ãŒ¬àNO)‰ *¯ÈåÞÊ\ý@’:�ÏËO­2ä7Á¿MQ#Àåõ‘.\OR=Ï|ýº{‚Í=çÎ�Ë|$ƒÍ_ÕÈN^ºÞ“š?RS´VŸ)pŸoÒ(ÓÌÓ„¸,þSâééUëMFñÙfz—Ì ñ<î ^Óä¯×ä:üÝxRÔ Ãû¬-‰° ¢N Ù½ïQ�¥ÚMå(¾ÊÅA·(®õ6#`¦ Yó·’ªqÙKôDƒ¢ÓÐŒÜì“;þHKnèeбõò’N¼·j*ŒÀΔª7ó‚ÝdP•»Màvë´œd`„§õ,CÈZ£yúšµÏOî™GžRÏŒ|<# îÙIN‹˜ú0Ò8©œÆõ˜üÀ'/øH6ïG/)89¡`ö™B÷À*§zt¡?¤—<ÐLó3e<Ø«¿7õ6×£áYô,(c#�@“p=P–ÊQ|•‹ƒnQ\k¶Q\Ãkš‡#5‹ Á˲ÇPêÀñ· R`v¦T½YÈÜ6"`«P½¾ñ©!<BplMÊ0òy°‚Õ2‹mí{–½à"¸~O§÷W4ò~øôI‰®;Í~ôF¶6º—Þé“{:O‡Y8}¨òN¯õˆ´“×éY ²õ¨ŸÌŸt¿Ê“M9_/.èäÌŒXd"�îšRmЦr_åâ [×z›ÀÔ û Zy5:¨€"šRµíd=`8 “k8Ð{f•±¸؉mFÀ¤Iåq›áØÉŒd»g+(]ÜÈ:‡ z“õWÒxÝ2`Ϩótàí¿ùDgoíct0nÖèó¨@?ØËN;pßž¦‘ybÒ%>÷O­õ Út üÐ(¥ÚMå(¾ÊÅA·(®užØ,vìEŽyFÀÌSÍ"ŨR^å�¡CL3›\#’”Ò!'Ø]‹ x˜š¦SŸHŠ0íëò߃ä¢VE=F@ §­ðë‡_ÅÓËÁëaz¡2§=ë 60²<¥GQ’Ss"D=9ö?е äh~5­ü#ý’½žåQb:’4É4¨`¿'ŒÅ÷éïð(ƒA¿¯¯ �h Ðŵ6Ó¬†Ô~}hÿM¢ß0 œHÚ¯Õ‹×ô' åÊë5Í'ÔÁI¾ÒF`gê2ëåGŸíüúÐ\r@2P´á ’bòëC#× i{FTp¹_‡5@ôƱXzõëù”yãYéÛÐ#|SÚwqíÃÄÔ®'ù·„Aæ nÜTàMû‘ú:\Ñ'Y÷ÚÆÀ¼xS×Ê|纜ýCÏ(#฽OÔÚ!Ib$�Ð0 Šimæ¥ÚS ôæˆFôüƒ,˜‘ƒŒcy^ºÿŽ&±Meá<-‚ X‡¾GÁÅÔjô3€Ø™¢:¨¼M–]P,n~¤ol3¯ž+žÚ/ˆ¥'ϼëϹ¼‡·<;$Ó¶YÀÁëAÆ Ãz9Öo½›xfÏb?D¸­žÑ›9gN~o¶~\,iBdŸ•½Éàÿßqã¦c&Tž:Ô]*=çt\ŸÂ(Ït~õ]òb¿~.’¿¹Õk8��Âå·,•£ø*ÝZwhØ ¸6<ö‚ìºI¯Ø ‘.ÍU#GøÑG�î Ðкû@Ãv�À.¬çoitg#lö´ [0k3Âú¯(ŒBñ”"~M)L��÷Œ�hhÝ} a;€`'D�~ñê}öâü*äNíÊA¿9Êq_ÓUl$€_/üŠÆX¿À½R¥M©Ü¡A{8@ëî Ût���P0  u÷†íàÁêpë"\³5°��~¸Þ,KåÖ¨ÊÅA·€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:€âü¤åU@þÙgZé=­c=£³“ Z¬õß�€F€�PL믺=ùô6 /øƒ¦ËŸúØZ†ÇÇñæPß;¥‹é’жT‡ó´8×4Ÿ¼#ßݧž?jÅY/?ÒX|ÆçvÜ×téjXÓjþÎ}—ÖÔ i©?y¨Öa’+ËC|sÜ1]ίõA̶r§6¥áЦ~?ósµõÈ ¿ªS¦®}@Þä›ú,…V§¡|VÔ±\~ßÒ_á :Èxv¶q3õ©gÎá_éà7yÇþ÷»XúÔý%Žëù4½É©gägòä2ó»Oþô¾Bðkš't2YˆÒ´­¾4÷_ü ¹Hg0ÿ¡ÿ�4—ý²TŽâ«\t‹âZs£ðD|O4ÖKÝ4­—4=ó¨Ï–3¤`¶ bÖó€v�"ƒŠ·äõqŽ}rƒ÷„u„2åue«+òûZ›ï"¸<$gZ=‚BÃÉ ¡·ÐÏ-ó÷°)UoÞLÉ?H­œÿƒãX9RÆú™UŽ6°–* g#àn[|£€8çû×òœ't¾¢Á  yÊ™+­îÍVÖ‡«…Þ \€Ê÷Üãºâ)… ëÙ‰¥W•7 —a<å3½‹!•×·ê¯{MÀ1 "3Äh3ËuÜa0«¿Ódý…§¯Óù›×ã‡ÞD¤�ÐUbñÊQ|•‹ƒnQ\kÓs•lH×´šŽ•° Ù g 6Ù <AOSEJ—Wѹµˆ Gä8#š\ke°hzŒÎÉžL`¨Ídà3_wa´Ö\^of ŽÒeQš’“ͳPòžO(xó„;¸|0F@—¡þ˜¦¶¹Ò,&OÖów4æ2·ü“‚ÜÑš²°ÁRo×à>© �àÎ�PŸ`¾ÑÄ;ŸYÁ}ž0AÈžCƒ»èíz@Ôk´†v@µæ ±§tâ^Äá>íõÈ•Fާ‰„44“:€Êó§V‹ò›àߦ¨`­éòÇåñ$ÕóÌ×Ù¯»'ØÜówî °ÌÇC1²D—'½K"5¤ ÷ê3îóMuYUÓ»þ©Gäôôªõ‚&£øl3½Kæ…x÷¯iò×krþ®6ïQ' ï³¶h$Â2ˆ:jd÷¾GQ�xX”jS4•£ø*Ý¢¸ÖÛŒ€™6dÍ7Î5¦qÙ‹÷ ‚”.¯:¸ˆ5;oßO©Ù€¼p&ÂÎ5­fg2È€†%uÈ v“A}Tî6[\£ ’uéé%F~íéAêš·^§(Ñ=ÿ¤Eø”zfäãAuÏNrZ”ÀÔ‡‘ÆIíäÈÜcòŸ¼à#Mx=ÈÑK NN(˜}eôÀªgõèBH/¹¬¯ƒûd`¯þÞÔÛëå%†gѳ ŒŒ��MÂõ@Y*GñU.ºEq­aÚFéòZØ\Ñ¿ä(Ž­½AØp>JéPÈÜ6"`«P½¾ñ©!¬å±5=(ÃÈòl«eÛÚ÷,{ÁEp;ýþ0Œ€¼_'>}R¢ëN³_ý£‘­î¥wúäžNÅÓaNª¼“&Á‰Õ£x›Ùü< ã ó'Ýã¯òdSO¯trfF,tÚìé‚�€;§tÛ.¨ÅW¹8èŵÞf05è>(]^eãŸ=5(fÎäq¬Óßôÿ¥Œ€~$”Ó!/ؕ޳D>g¯Èe›0©Hs|‹—Çm†c'3’Eìž­ tqF ëòyNÖ_IãuGÈ€=£ÎÓ{´ÿæ½µÑÁ¸YW Ï£ýt`/;Yì2;¿=%L#óĤK|îŸZë´éØÅd�j£T›¢©ÅW¹8èŵÎ3›Å±7Ìä3O5cˆ£ty•Ò˜© › BܨžÇä‚TO榔9ÁîZÅÃÔ4úŒ@*P4p€i_—ÿ$µ*ê19m…_?ü*ž^^Ó •9íYo°é„õaz%]®4¢žûèZò4 ¿ˆšÖŒý’½*“3Ÿ˜Ž$MD2 ›Q¿ïÓß)àQƒ<~__�Ð0 Šk­?Ûدí¿ ‰õ:IÕÀÙFÀ~}(Þ<Sõ4iúõ¡z!bdî¢ÅÂJg9—X‹ ¡¤ªü ‡á³_šK®HŠ6Tr@lA~}èo䦄«àr¿# žœèc±ôê5Ö«KÕï[YéÛÐ#|SšzEo|TëIþía„9ˆ7øGÓ~d þ„N'WôIÖ½¶10¯úÝÔµ2ŸÄ¹.gÿÐÇ3Ê8®G/ÇZFR'F"��#�¡˜Öf^ª=•@oŽhDÏ?XÁ‚9È8V¾þMb?šÊÂyZXšÄ(˜ÍCmÖÔGÅ~+@¿C^}×,…uHj ·Ý~P,n¾ ôbÇòf_=W<µ_KOžyןsy§VÀ¸É´mL(¯YkM®i~9Öo½[ߣ³Øn«gôfΙ“ß›­KšÄg¥Eo2øÿwܸéÀߘ •§¢œŽ.•‰s:®Oa”g:¿ú.y±€_?É€_v è5�€Fáò[–ÊQ|•‹ƒn­»4lÐÜ{AvÝd,Þ ‘.ÍU#GøÑG�î Ðкû@Ãv�À.¬çoiTdŠW!ìiA·`Öf„(ô_Q…â)EüšR˜��î Ðкû@Ãv�ÀNˆ�üâÕ{ëW£k"wjWúÍQŽûš®b#×4_Ñë·�¸Wª´)•[#4hhÝ} a;€���êF�4´î>а<Xn]„k¶ã�À/×›e©ÜU¹8èкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ (ÎOZ^äŸ}¦•ÞÓ:Ö3:;¹ ÅZÿ �hÐÅ´þJ¡Û“ßIoò‚?hºü©½¡exœqoõ½Sº˜. mKu8O‹sMóÉ;òÝ}êùS¡–Í-Ÿ…#ê-—ÆWБ)¬Ã2$×䣵9î˜.ç×ú f[¹S›ÒiES¿Ÿù¹Úzä†_Õ)S×> oòM}–B«ÓP>êX.¿oé¯ð¤žíÜL}ê™søW:øMÞß1…ÿý.–>u‰ãz>Morêù™<ù†Ìüî“?½¯üšfÁ L¢ül«/Íýß?h.ÒÌè¿�MÀe¿,•£ø*Ý¢¸ÖÜ(<ßõR7Më%MÏ<:C f› f=h` 2¨xK^ßçØ'7hqOXG(S^7Y:ÈÈÿlMד9Âôdðò]ž‡â¸'¥êÍ›)ù‰ uuEþà8VŽ”±~f•£ ¬— ÈÙ¸›À–ß( Îùþõ„<ç †¯h0hžrt¢¼N^ÐÀ=£ÙÊúp5£Ð” Pùž{\W<¥pa:±ô ²ò†áãÜ–úOƒ|n3ö§×·ê¯{MÀ1 "3Äh3ËuÜa0«ßl¯¿Pøôu:3àzüЛˆÔ��š¢T›¢©ÅW¹8èŵ6=WɆtM«éX™; ½p¶Ðp°#Í�‚Ȫ”.¯: Ë æ2?Kk¯L4dj3x Ck:Æ]m츼ÞÌ(¥u”¦ä„&×5†¡òžO(xó„;¸|0F@וý1Mms¥;YLž¬çïhÌ£4Ë?)È­) Œ!õv î“Ú��îÐõæM¼ñ™æ„ì94¸‹Þ®DsF@¨¶ièðÔæ«‰Àó£:š:�ÏËO­2ä7Á¿MQ#Àåõ‘.\OR=Ï|ýº{‚Í=çÎ�Ë|<# ;AzézOjþHMÑZ}¦À}¾I£.jz×?å(MßL¯Z/h2ˆÏ6Ó»d^ˆçqoðš&½&×áïꑼ¨†÷Y[4aD@5²{Ÿæ €‡G©6ES9НrqÐ-Šk½Í˜iCÖ|ã\#`—½x¯ (Léòªƒ‹"F€ƒ„ÕìL0q6¥tÈ v“A}Tî6[¦n6ÉÀ: O ê6½ýü÷¡==H]óÖë%ºçŸ´ŸRÏŒ|<# îÙIN‹˜ú0Ò8©œÆõ˜üÀ'/øH^rô’‚“ fŸ)t¬zV.ô‡ô2œ ³ð…Âá~4Z› ìÕß›z{½¼¤Ñð,z”±€� I¸(Kå(¾ÊÅA·(®5Œ@Û(]^sƒ}Aîgü–“7äN)<÷…!0ë@)ò‚ÝL#pÛˆ@‚­F@õúƧ†ðÁ±5=(ÃÈòl«eÛÚ÷,{ÁEp;ýþ0Œ€¼_'>}R¢ëN³_ý£‘­î¥wúäžNÅÓaNª¼Ók="íäuzÖ‚l~ž„qù“îñWy²©§×‹ :93&_§Í±L#�àÎ)ݶ *GñU.ºEq­·L ºJ—WÙø1znsèÞMŒ<pJéìÊ@ï™UÆâF`'¶Š4Ç·xyÜf8v2#YÄîÙ Jw`²Î!Ÿídý•4^w„ Ø3ê<¸Gûo>ÑÙ[ûŒ›uú<*ÐOö²“ÅÜcç·§„idž˜t‰ÏýSký‚6»˜,�@m”jS4•£ø*Ý¢¸ÖyF`³Xر9æ3O5cˆ£ty•# {í`M$Ù#>R:dª¹#5M§>#  ¬§}]þ{\Ôª¨Çä´~ýð«xz9x=L/Tæ´g½Á¦F@Ö‡éQ”äÔœQOŽýt-ù†_DMkFŒ~ÉÀ^O Šò(1I–ÙdT°ßÆâûôw lc/ß××�4Œ�h„âZ›é?VCj¿>´ÿ‚&Ño ˜ÎíׇbZI4gÌ€ÑM½Z²I]F`½üHãá³_šK®HŠ6Tr@lôd#W.·Kªzöë0âIŠÞ8K¯ºFÏzu©Ì÷(óyëŽH¾eK¿†7f̸žäßnI˜ƒ¸qS4íGêOètrEŸdÝkSF7u­Ì'q®ËÙ?ôñŒ2ŽëÑËñ„–‘Ô‰‘�@cÀ€F(¦µ™—jO%Л#ÑóV°`F2ŽåßðßÑ$ö£I ,œ§…‘‰¥‰@mûÌ6}¼±î—s<p8? ‘Ìg½íöƒbùsóe ;–7øêQÔ~A,=yæ]κ‡S+`ÜdÚ6F“ƒ×ƒŒ»¦ùåX/N[ߣ³Øn«gôfΙ“ß›­KšÄg¥Eo2øÿwܸéÀߘ •§õG—JÄ9×§0Ê3_}—¼XÀ¯Ÿ‹dÀ/Gnõ�@£pù-Kå(¾ÊÅA·€Öݶè�n‡ ½ »n2ï„H—?Žæª‘ ¼€ûF�4´î>а@° ëù[ÝÙš{ZÐ-˜µá ýWÆF¡xJ¿¦&�€ûF�4´î>а@°"�¿xõÞúÕèšÈÚ•ƒ~s”㾦«ØHÀ5ÍÃW4Æú-�î•*mJåÖ ÚÃZwhØ ��€º€��­»4lV‡[ᚭŸ��ð‹ÀõfY*·FU.º´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]Ü›à cÆ 6lذaÆíþ¶²Tî–ªrqÐ- u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���PÝ1Ë\q<'µõ= .¦´\ëcAë`vç+…n/­³ÜäÐtùS š‚ó¿8×4Ÿ¼#ßݧž?¥½W²^ÒÕØ%GêêPß i¾² ±ý¹ãÒøjI(âÕ*íÊM¦§äõUEÝ{6….��ÐUª´)•[£Â_Ï(ˆÈ iiv-¯èÌÈs9îÍì@"—Ÿ´_ÐxºÒƒ»¦øƒöƒæÁñ½c —:|ä äÌ£> ΂ٵÚ ëEHOlj ¦Leq3õ©Çz‰-n¸ þF£pF+F®fgä: ‚™*¿ÓÔ?Ôeú†VÓ1õ§.`�ËèPßh"êZ×ÿS6­[º��@W©Ò¦TnŠ_\÷[F@¡‚îUÜy˜ £O>Œ@c×ú†–á±øže$B? ÅùöÍoó}«ÏdõFƒÂ”®,n¦ä÷’F 4ù½Mù½žç7ù&?VAè9Þ„v³¿.÷g²`Ã~´C½ �� ü"F@ Š`qþ§œŽÀ×ÓF—´äýÒ¨J¹¹ÿIóÌcõyA-×:Ï0*(ÜÛ{BÁü‡øûšæ—cK×& Zki-Ïõ¯ìcÕ‰ÁŠk¨¹Í¬æté»Ô‹FôÖ¢8ȉi¯Gˆv1¿8åtà)ZAlJOð§øûÀ§é5/Q·nFtò:N¸œ>…��€ŽRºm”ÿ¦¦øÅ·3mÈÑäúš¦~_ÇSžŠ Â¦q3 Ûjë± Šk½Í˜iCºÇXš=rïâ9øBáPÿ&`L¡ÛŽ[)]Yl3ÑÚ{€Ö¾ÇAª:,{ßäŒëy@‡îkºŠÖÖü¤åÕkr÷u~rGÊ0£^ÈïfŽÄp‡KHÞà¦�@GùE@<ª‹þé¿m¶}Ês§F †6v&`ÜÚ8låNŒ€d3¢ãˆ`t±†ØFi# óVïHÂõçቪ;…^ãc{tæ Ù8G˜²) q�@§)ݶ ÊSSüâ»N R»ÖË)]œûzÈv#w,¨‡âZo3É©AÌOZNßÓ¹¯ß2³Õä ¶Rº²¸Õ0ÚÜI-ôÔ ˜©×¦ £7%uÐ#�Ö”8/˜Xoiâü}&Ë›†A´ÞŠËÚqÎ)—£ü¡øÞŽ ÷��´‹Òm» ü75Å/žgÌbá}†_Dã%¨É êó<Øðý=y¹eD`û± Škg6‹…Uï1ïZÐdtH}ï”ÂÉ”&ÛF¶ ¶Rº²ØÉèà_úü¦§¡½XX/&îûW"d}ØT©´7¨õRáÝóÿ’F“¯rñoßkqcä µ:„A�€.Ò-#`¦ÿXF`óúPk‘¯<ÔF̼ÿ>½<K㋯Úˆ ãòŠ.ü§tôå ê¡øƒf¦ÿXFÀ~}hÿMô|çHOͼÿÞ :wJ_ÿÒÏÂ{úû" óóùǦF€Í]õò#ݾ6òŒýúÐʬãõ¡’zŒ�Ã+‡Q§<öÿ ?y`öIÔµGLÞ’›5kã±0��ÐIºc¶ü ˜ãút>™[=…×4 †jÚÿàÍe@ÏË(¬®Èç·gÈwÑÝ~,¨ÖiwôÈÖ7¶9.ùçâ?<½ˆœžÑeðLèiÞ´-rƒÏ´Úz,Øça’å6 *Íô.½ŸGäbeX°šQ¨#?\µó£\ž'~ˆO¿Am0¦©)KÜÑâ¨/ƒz6âGô¨ß§Cû•®ûÇy±0¿qÍ6p���ºDñ6eCùojª\t hÝ} a;(gž £u¹Y#ðÛÄ/t³9{½ T­H¯¥ £sˆùeÂÀ��è UÚöÊQ‹‡´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@‡2|¥ÐíQÏŸÒÞÓnnhÓ^ϧi7¼Ëܽ>ùÓ•ÞñPèÚó×qVWäNhr½Ö;ʰ¦ÕtLoB×zϯ Œ�h„bZ«J“¿“ÞäÐtùS š‚ó¿8×4Ÿ¼#ßÝO7‚ë%]]r¤®õ½æ«¬Šû;MýCÚsCZê=™r:ÔNMYìTZw f꨻ j›0ñz¶‘ õ17SŸz…Ê@מ¿±s;aøI‹ð ü+²sf½üHcÑ©ç]Äá,öyŠõ ‡G"¿ëÌOZ^½&×Qef¯?¢pž´ »Ó.8e©ÜU¹8èŵþAóà‰øÞ1…K]uŠ azæQŸ —3¤`¶[áZ/Bz:FOLUʔרÁ[¼äÊú7ÉÊxM«Ù™¨83ñ— ÷T50’VÔ›7Sò~±ÞꬄAu‰@ŒËéAé •MË3rïúï_6-Ûêþü^Íp™ç ijM›Úz¸èˆÜà³ÚU[1<i‘çÖ3 Å=.¬ÎB9BplÅ ×4 žÑqø%ÑÞlXÏ:Ú×Ñ#îÍŒY}¦`èY×Úå˜öQ¥M©Üµ¢AP\kÓûh‰*hÒ šç•b¬ÞhP˜Ò啃ÆÞ-=Ž\yz)#À&îøø7zyÔƒÐÀ´ŒÀýð�Œ@f=Ã÷àR0ÿ¡ÿ¶YÓõdD½ÄtžÌç›õË!¾ÑÄ;$oòMÿÍdå7?ûO­vk—cÚŒ�h„úŒ�Ã…ô@|öDW×4¿o†âö4š,h­M€ÚÇ›8×üoºU 3Š­ÿ‚&˜f´Å5ÔÜfVs©IÏîEa¸Ç}EÓÕ5 # )§OÑ Èë;ú¹÷(øSükdÒrúvsÌÞ>¹þŸÙÃð¹F`3Lƒ‡òšXCã›Q¢ž¿ùÿÔÇ‹cG—´¼µµ4uŸ#Q?èg?SÏ›™Baï3lÎÓó?Ò×h8?cúF†¾5ÜïÑÙtNWE1ñ¬O=ª©óæÏ๤Ø÷&6;ÐŒîm@žÿ\žÃeæo‘#©™ª÷~šü¾kŸ3{*I®àôž[÷-§fN¢¼Ùh™±Ù啃®è³¼é,Ûž?k*Ì•È÷hªHÎ9­C?S‰)"·b=CéÍzÞ¤xAá_Všås±´¾mÏÃcß:÷¿¬¶L·c|XåçϾNrãr¨Mœ}ײַ®›e^˶ò_ÖylíûÌj³K’YÏpûœm¤îÃÔg™Ï÷õ„¼Ãl#ÀPÃÔgYA>:Üj’Ç´Ö­,•£ø*Ý¢¸ÖÛŒ€™6t »¬¼tef�ãôuÅf*`Õp©sÊž9dQº¼&4ˆ‰àk½ ÉɉÊÕ Œ€¤Œr˜Û}MW‘éÕóX÷M#+þžøä?ZøZÄ!yÒŒ%JHf͈²yvj-ÒÓç$†êeƒ9 ¾ë’ë½Õk~¸²c`ÃÇzÙ‡œ^(˜ìòþý~_¤Eçž“¼éUÔÓ¬¼Y/¯èÌ;¢~ÿpÇô2\o cç1×ÚÏ*™y¬Ê€ÙŠƒ²Cñ<¨€ñ†ë3£gfouV¢ÈËÎ˳ñ«wU½pDƒØ” ®«wÈKÃ.Ï÷Päù ÊC5ï[˜XÏ­ Š0pÞ6"ÀuW4\—©Þ(s‘jn3²Žì‹ë É;»RyÀªÔ³®çáççöÙNöÅ5Ý‘66ª§]>§2oû4LN«‘£ºEzì9õUQSHOŒ!¬4giª§åÄžM §yä[~|Þ—4ÎL«ÊïÔý äµO¬Î yÞ7±úq—cÚŒ�h„;51¸±èozö¡Û>)îÄH6#:ެĹ’ö¬ù›06¥@ViÈíËéÍÊ RóÈ þxŸ0eƒ4Yëò/Î5mæÿò½ˆ{M>+ÛŒ@/92a:ï²ÞÂ#V"(-j²ŒL2ó˜ËÂfZDìžìãë2Y¤ÒUƒØéùÓÏLlÔÈ PõžÚØÅ8O7ßÌnÍcYGrPŸLë{þ˜"F`œ¼ª€»›V£tèm«cÊ"çØ»ä cÇæ$Õ©`à¼çg++¸iæµ¢ì9ºGÙ†ágqwïjmë>&gÛãŒò¼Ë1íF�4B½F€ ¼=5ˆáaå÷t.9Œ¹Íð0ëÅïÑôÝ(]^³4H¡ÍëöCÏ×Ko5;w·âèÞÊœ)¹Á†€?$¢T0hàrZSƒx;Èè¹ä îpÇà1›Œ<æ�QöD:z0Ǹò±ÌýÑým róë\ôÀfj¢GÁd.ΔAfǹXÚíãë2É))¼=êS?IbªÝž¿ìïæ¦½*»ºÌ–¬#³ê¶šŸ¿"F`Û½ËQk$F–ÁGsUmýhü£)£ñ.Ÿ“¼9ÿ"¸Å³™yEnª#‚Û!a2g pÝò[b1<ó±Ë1íƒËuY*GñU.ºEq­óŒ€îçS½Ç¼k!*‹Cê{§N¦4Ù2"°^^ÒH%^ÒäïËT`(]^d£z”œÌŠ#6õÔ›º‡l¨ÖeÔctÙL͓ΠXx_5# ÷Ñ„¾sú¸§PlÁü»5R'/ËÜÝ_ÝXÕ{8ŒÞŠb‘™ÇM`‹zÕLÝÒ¤Ò#°¡hk8O»dbõµ.÷yAx2GŠ²î›ŸU7Ljätd•/ùv¡¼ßàÈôÚ„¸®»Ó>`@#×ÚLÿ±*Gî2¯µ†òe¥e¦ ÉžŠ}a^Ðù»Sºøú— Bï=ý}áÓðè?hÏQs8Õ ¾üÞß#ȼ…»4j®oƼS Œ€M}õ&ç«î©Ï/ЈÊúIFcÌcrº[Ñp/äcŸ.ÿäô}5÷ä½§óœ@'¯1ÎÜoÝ_nZjjF™¥ 3+ùòžÃNonìgÌwçg¥æÝž¿ìïæéZ™VºŸ¿ºŒ€ ø[”ïÁÝLáç"5Ícƒ“X°-ÛòÜé<ü ½éK<Ÿœþã3Ëdð”Ôôïlàz,½.i=?£ã¨~Üå˜ö#�¡˜Ö:ðßImލdÏ?Äß轈œžÑeðŒœè ÜSÀ êöÉ þAÿ+ßWÏçwvAÁ󃘩�ùpþ†K[¿¨qá “§wéýÛ¦HÀÄ(®çßãÄñ©7j<y±æoäÆÞ–£§e5°™AªnH£sˆkÌ'ˆ !ý¦˜Œ€ Ž©ßWsæeÏ1O[ÉyH^ –G÷ÇuH ‹5¹,ðs~1µæ¸óˆÀqvð‘™Ç;¤ê:ÐL×ä¦73d§Š0vÑ[y¬7OÅ`Õ;Ü‹ÞúµÑÝI°yò.Ï_#`:„ª,æ ´gý^yã“îHjÊÔöüI¸ÞXïå7šÆ§õpZo5ZwõF¡ì Üt¶ííq:ËL÷>>¡ñ•aäg+¤ÑèšæÃõÀ-ko„i{o¬—%ð¢wþë;\f’¿?C\{ú&¾ }5£pô›õ]ŽiÅÛ” •£ø*ÝZwhØÊ§Âh]nÖÐHÓœ˜ò!Æ-¯MšºØ¦ƒ˜Œ9ðê5‡üÊA~³×ß"¨ÉyaV¯øVt b¦$Èà×±FžÌôÂŒkñæ¾£ÿ¶?7Oì>7÷•ýúFs_;>¯{J“ØëU¹CB¿%Æ]{Û¦Œ• ØøoN» &ù3NóOeôrÓû?·äÊ‹ø¯±êgæëGë:Z0{´–·˜áÙұ˻mÏŸ}ó„¾vàZ‡H¥‡×Õ(3å»ÜL>$Ó¸CG𥷨jÏŸF™6ç|.Öô”.ôT¾ø}Ù[Î+_e™Kÿþ‹¡ºÄꔌzK¶ì75Ù¤~YØ.wº.Iþþ@mNc:ØÓ ™]ŽiœÎ²TŽ ª\t hÝ} a;€�€6 ý‚ð»ƒÍ`?ÖÅ&.ïGÊ~}`@#@ëî Ût��Ü?ê ;åG\@[€��­»4lÐ�p_dN²§eÎQ¥M©Ü¡A{8@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lСü¤åU@þÙgZé=ma½¼¢3o ž›}rƒºÓ÷•B·'ÎíÐ ˜ÑZïin¦>õDÙÝsF4¹¾»œZϧ“ð ´�;#�¡˜Ö¦q•fjüAÓåO},h Îÿâ\Ó|òŽ|wŸzþ”nô^f½iè$õµŠŸ´Ÿ’}vHþô»üä!SNpw\Ó,8¡“ÉB<·?h<ÑÏ«½‰ ÜG“ùµþNC¬¿P8ì pES‘.Ç›ˆÔÖÍ7šxÇÌè¿A6kºžŒ¨w'X¬gŸÑN�ìH•6¥rkTåâ [×Ú4¨Ç.uø¸^ÒôÌ£>7¬Î‚ÙnÕ)œOÇñ §LyzÁÄ7Bß³—q ¯'ä9O6ÅêŠüÁÉöžuÔ›m‚MÀ1 ü+«§ÝÔ]æY^Ójþ§4Ã{ÎS :18úš¦¥*/x:ý1MW5–¡dš¸Üöjèå^†äîõÈ ¿ê¿+šú‡;ß_²ÝÚ½ãçÉ7ý7�Û©Ò¦TnР=Šk}#Ú…cñ=ËHD£:+30nïõX}¦ £7§ty½™’ßK$:h‰4å¿OèÓ R Þl º.JÚÜC~®Ÿ¤ÑÝ+Ð+Ï&cXºy½¼¤Qÿ€†µNI¦©¡^î_î©í6r"Û­Á&˜Oþ½Õv¢Í»#�¡>#Àè†6êq»¦ùå˜ÜhšÉ€F<L¯M€ÚÇ›8×üoºôÝÍt“þ š`šÑN×P³“`Mm¦ÉFÓ×t¨ïR8™·nîõ}QZP/<bÕï¥çÆË€?kμžòØó7½é«yT9îszÞ¤‚=yn~þU=¥ÊŽ5²ÀS¼§ÔÏœoÎ=Ïýè»Q=É#ª¡¯ëI.W!ÍÙÀèòÉÇ:Þ%-æ!yY÷•™&.·}r…ÙXÉï‰ÏcƈÓ<¡@®QàïeMﳦ‚Êû¹Þ¤ß i! 9ïZN^ÈŽ ¸¡²Ú�爼çëódû ·(ïvI£ÉS¡ëé%ý5ÖmH¬ýØ®ÏzÐ f³®û¯MG—ÜþoòüÿÇú»/Žášp[šõˆ”È»¥ÞÀ6ø*KåÖ¨ÊÅA·(®õ6#`†ÞT£)2=¤,çÄŠŠØT¸‰ TMUQçTsÔ±ÈmWJ—×]Œ@rZf½œÒEÀÓÁDà›~ñpA½Ùôú•ÔT=²uRØ$Œ€ì¨8Ðù¿U– £úO~³3ÌÈ g´ÒFyÛ肬ëL=¸^Ðd$‚ÆþˆB^§ ëɃ„ñ~DÏOOi¼%_ü?«÷9ž&,ÛOèôòwÄ}ÌÏɽ%ÍÙõ€ªÓ7÷£;ü7ä{oéó䥨·È~#/øDsn¢@WR8úÞTuÛ­3ÒCæokäqç4ÊÏö©ï¾T׉µ·é£îosÞm×MòÉ¿oK³6-0`G`@#Ü©ˆ¡+AÓØn Bw PAÄÝä´ $¢á“½dYÁÕÃõf ÐÁWzzbδ F—õÙwQO’3 i¡ÒôÔ8ëoÙoOóIŒ ¥°O}®˜iQõ¤)“*xf{tIËì ÒåT~¯ÿ”Fþ;š­nôu´™Ñ#&ÆÀ«À9gÁ¿ÌOË|ÈŽñ]÷”¦«Ÿº-0ö½ëºÁ¾7»S!gåëniTyd}&õÔP·êÃnîoëu³¾ký}[šS÷ Àv`@#Ôk¸b´§1¢±˜¾§s3íg›à!ò‹ßõ.ŒÀ®”.¯·d×÷¦ü wõf È›þ“;-H {û*Xäãzv`¾-øSßíE¦A`»YÄëŒò%?7ÓtÇŠ5‘Mò<æ{æ>øó€ó!Îù}¡§$å½¾ÔóÉÑ;0õ½™r»wþl`à‰@ßÅ2ïÄuäô%°I£ºW;¸Viätü[žg«>Ros·\7ë»Ñß;¤ù—_t ê¦J›R¹5Bƒöp(®už0½Ã{›Þ49ì}¨ç’Oi²eD@- ;$/iò÷å-*°¹3#lø²ˆ6Ô›-@[f¾ö†Mp–U½#R÷lÓsnOõHŽxÉ2aÎÏÁ.ÏÃ7MÈuÐÈt˜ÀZ–?;­‰iM1S°…Xšò{V/¸¼Ž¥µ×) T};ÿFËOŸ3FlÁè ÛÔïòºæ¼‰@_~fµº·|s/&ø7kôtùY4&ë=U¥ñ6}Lš_ÓdÊçÞv]}l´Ž$ù÷mi6FÁ6™�l‡Ÿ§²Tnª\t‹âZëÞ&Ûدµi©yÿº¡0kz/èüÝ)]|ýK¡Ž÷žþ¾ðixôQÏ—RêËßéÝø=æSÞBéòºÕ¨ $֛Ƭæ41 „…îWã! ¶N[x8”¯7Í|i.?Û_)iÊÆ­¿Ý`ÊÛmk8v=®+H#øÍ=Zº\ãr®è*ÀèNyÿÙz.‚LÇyFÁåG¹€WÖi¢žºœýƒ>-ÿ…î¾ neYxFì:Ϻüµˆ^? ¬uÀ®zùz¯e/rÀïbÄñ4‰º—¿g½6T™q“ˆrªë羽¾¦y8¢~–y1~ø_ôaº÷hÝ:°žWºÉ»ÓOâXK‡õò#Ÿ?¦¾8×óà=}¿Ù €û[ÆK!ЦQçQ´ÞÂ|G+·écÒ|NçgSñ÷¶ëª@ŸÛ«™ î“ß’fmê~‰2F�4B1­­·H$7Ç%ÿüƒzÛ…!z;2¼3º žY‹ÃtïŒüUÍÐÿÊEV|®yg<ç!gS©‚mpþF6Ô–~ÉlÉž6Í&kNa4¥tÀÔ†4·V'Eò96®“Òo½2#¦‡ú;ÙÓ肃smú.yã‰xîEð®ß”£û.D6 GƒºÈìõåÀÓšn‚aÓ+Þ÷èŒný™ê­Î~c$Ó”üžÁ5õ® öÖ6ÄëmE1ëÖñÑ D›~Ý©ÕÙ&(—ùÒüû••ŒþÐ æ™×:„ñuÛ)ú^å1¼‰¶Ä­µ¼Mebzå^WÛw=Ë|Lþ½í»zdé–² @~–ÊR9НrqÐ- u÷†í�:´P[úkºÜ{=@0È#‰Ó³1ùgW¸\Ó|rA¡±FCv"aFÚ O‹ˆgrÇÚÀ�#�ZwhØ C;XÏßÒ¨- 2åÜø#þ“&£ãM¯üFMµF(˜ÕŒBï°XP¿ãÔ©{…GFNN`@)`@#@ëî Ûth ë/tñê}|mË}!§Øm¦a~¸À^Sf¶¾GÁÅ®Ó Ít'óý¬7ص�67þLo¥©Ò¦Tnª\t hÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€ÖݶƒÊ:¬®Èï;´ç†´Ô»â\Ó<Q_\gooŸÜñGZ®õG1Ö´š‡äñ¹Ä±Žûš®–?õgUøIËiH¾»/Ï»·wHþô»þÌpßi,Çzù‘^ùïh¶ÊLlËùJ¡Ûùx@Þä›Þ÷°Xϧ“ð‹xª�øu¨Ò¦TŽ *7h 3ÓÚ48ÜÈ'·yÁ4½ÇÆü¡Âù_Œx¶ç¸4¾Zf7¢28]øUïÁàÕkr­{DáüZö°)®ƒÍOZ„O©×ïÓ£L# 4›¾eì3­äßB‡ÉoäúWúo ¡ÙØ{µëå%ÜW4­ä^Ó,8¦Ð$WïûNcDšgoÉ;¹†å†–á±z®åæÐ ˜e—‹¶q=!¯7¢Éu'R[?ëÇg4 ·~Mª´)•£øj èŵþAóà‰øÞ1…˵k½¤é™§z!³ÝÃõ"¤§ã)é³€’ÖƒG·p&4Ö^ížP0ÿ¡Ь¿P8äÞß^dÖ‹ BšsÀ¶úL÷4À‚*õ&—…¡#4˜¼%7Ëp sx’ô„1¾Hìãòyœèæ�׫Ð[Ìþ«ì€Þæ^ÓX6g䯖1f k´£­¬E‘‘=7ºÃ&wd©a–!¹Vr7d=S�tÐŵ6 ¥e$,Œ•Ø%0ÔAdχ¨J1 µ~=Ÿ¦QÆ£‰w@Ž7¡…ãjŽýt”ÛˆkS# )_o~§©ÿ˜úhsДÀ‰ýØ>ÌJ|ïI"øÉ ¼…êSŸöSßß‘Ì�?ƒûLcäh×ãDÀßÅgšóxÐÑ‹;AÕkhOÀ¯Œ�h„úŒ�£ʽ¨wùšæ—ãÍ4’½& Z›žd¹7q®ùßté»ä˜}}(`šÑNÓP:Ž=€‰¾üX=À¹½yZÛÞî#@¿:Åt0hmôÈ1$¤‚.‹ÏâÚÜLÉ?°Mž&Ï`ì Ïi>ÿ3Zà¸cºLLº×4†Í×a:àgÓ3è© šÓÙãúˆŸÿê‘3G¶õ‚&£ø,1/5ê1Ç}NÏû6Ÿ[Ÿ©zOm.ÊÔ$ØLÙëÛ# ¢s‰ô¼|CþàHÔ¹+‘…fj“JkÒ“‹:vñE§YvÈéX|­X] žÇù„ãïñ±_UýÀ³>«…òóͨ ¯±ÛuºÔQLðßÖ5ÖË)…Q>˜‘IõüDi]þK¯5Ñù­¾HWc;ÿì6H×k=?�Ü=üœ—¥r_åâ [×z›Е±ieCªƒH3ÍÄ4¼º‘5=8ªPçTÓ$:4?÷ž)¦¡¹±r&¦øp€pbæog«ÇˆRõ¦ <hh:n1½Ôþœ »—Q6+Ùëy@ƒþ¹ƒa´–D~Þ›X zŸi,Šªcö7ù®‘÷jO““Óè“øäiÂñÑK NN„þ,ÊÁÁæÞd9: ¾ÇSçþ7ܦþ3ò龜ã5CrtyRéè‹@;c2–¼N_—_]çZ#|ò»Qà­§ ~£ÀAÁçKY'ù¯UŸŸ‹òm´uO•2Óå³éè:š¯sDƒÓ?èüøYâÞu› ¯y#;†Ñ}©ô³£ÌGOçÑz3%Nç·Lûà5]ž{⟄ç5Ï„¬‹tÛ£9C{M€îÌhèù  ªÄâ•£ø*Ý¢¸ÖŒ@ ]Q›+ablû ¤(®aâÍ./_ÈQÙXs€rìQ¸Ð£1™F€ážCÝCì<Ýÿ€)®ƒ^ < iašeÒÓAóÍô Xå¼;FÀÔSÉu1z¿52&ƒhGݧSQƒ¬{Â¥I0çP# N¤¥ Àµ¹–½]/òèé#mŒ97=ìê¹p2Gô4²/næ¿U}¼UˆÞÑ´¿þ1ò¹eyfÏ羉¥QM•AºîWAºN“4‡ô|äÓ�Ê{ßÜ<6ktP~ÏŒŠè´ØÏ»|Œáá´Qÿù ùg¼à<1eQš'¡E´ÝB›–Í}Ð}`@#Ôk’Sƒ~åà{:7CÁÛŒ�/:¾ø=š~�#°ÕÊ«Xt¢‚>6[F¶µçòÁyT mŽ“ùÌ[l ‡ 3HæïgÌ¿wŸ¥Ê&ëZvþ½Ò8YÞ3ü{Lc1t=üšX8£ Èeðk¦ªÄ}ùYÏ6Ä| è›<4fJñÈ@oÞïfÚLÞK’׉ÚÌ[ËÏMp/ëñ4êϸWÿû‚¦¡O®³Ýñô[ÇFSŠôKbÚà˜ãbÆI¡Î«÷™`Þ…„Ù`Ôˆ‚5‚f'«Ã€îÂmAY*GñU.ºEq­óŒ€éÕÚÛTärí!õ½S 'S5¬žcTH^Òäo¾†Ø•*åÕÌŽõÒÙÜÖÀf4î•ZêÍÌ`ZÀARrÁnÖ>¼&ßž’µ¯�²'vø>ƒ/idï»Ï4Bõì'ë”Z§ LMЙ ~3‚èH7SÚåÂ…›=¥N×…j¿GAøæ× úô)ùJßäuôt¢(Mé�]ÞS†áWŽ•]Û”ò« E=<ÿFËOŸ7¯UŒSâ<zT$Ú?Nv2ØWO—ŠêYטô¤ïE‘0zŸ:Ö6!�tŸ*mJåÖ¨– t‚âZë^2ÛدµùªÞeݰêJ¯÷‚ÎßÒÅ׿dãçxïéï Ÿ†GÿͧUCÒ¼üÞß§ƒ"£\yÝ,LtܳüRÚfôâ½ØÔ–L-õfžPòý<o=cšDÆ;ú£5%‘eT¶y”ï-y©÷þßow‡À¾5?_`ÿ¦‚hó· ü£…«:ˆ>\ѧ忭@YÜóÕz>x$Óg\~T¯ÚåòžM鱆£·™î#ãÆÓ'ѯ¼›€ò¼#ñ÷K ¯þ)Òeïsºúð)Z?üÍh€9×kšL9Ø×õz¤±6.òZ|ÞÁ¦^—z\Š{ÿ—þõ9 °M~ø_ôaº¤™Ÿz¤Ã,ü‚w•žM]¢Œ‰ó< ‰0D?Eð¨G5R&ËäŸÑ€_ÐÅ´6sdu9.ùçt£§‰ÞäPß;£Ëà9æÍA¦Ñà9êÁ?èå"5>×€¼³ žÄLȇó¿Ñôî}¼˜¦›˜ÐÁC¤;÷Nâš?`ŠêÃîæ-95Hb÷*[‹½Sˆ`©ö_íÕÁtÎô[ƒ÷™Æ]á ó02·j$ÀÊ{ü«Å¾Ù½ç¦ ‰zMïfdͼç;þè1.tðl:Bd™9§{ý£r#ò"ªÿÄÆår2ÏjåÔs¿i!{ÂMpͱ0öf=€üÛL²M„<‘ ´ù<ª>æ]öÛܬ²¸wU'è{¿Q׌òÎéPù*t÷TFûÙà6á­õ”ÊhmÌnkd ¾';Ÿô5t«üÑÆ`Û–�è(ü¼—¥r_åâ [@ëî Ûtè ŸÐaªÇýnX/¯èÌÓÙtIëÕœ&a¨ÖLa*KuØ ޳×S�Ðq`@#@ëî ÛtèÜ[>ºh`Ú¡îynšÑ~÷¿îeÅáé\ò5®0à×F�4´î>а@‡.ñ“]4Ð#/G¢è2ÓbNé‚Gô1  ¼ŽÂƒ©£à—¦J›R¹5Bƒöp€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@‡6ò“–WùgŸi¥÷´‘®é[òúí9C f×z]|¥Ðí‰gÒ¡A0£µÞ[ž»N/¨ÄzFg'´¨.4h0 Šim—½Œm@^ðM—?õ± )8ÿ‹±¦Õ<T:kç¸4¾Zf «+òûûä†_Õßë/÷-Ýõ6hþÀ!ÎÐ&®iœÐÉd!ží4ž¤ŸÛ=ñlûïh2o6°]/BöD@ý÷_ ‘7ù¦?©“o4ñŽ)˜ÿЗ§™ô‚òðó}R‹Ö =TiS*·FU.ºEq­MƒzLáòFíZ/izæQŸÖ½Eܸ<OIŸ”¤°†×òaÜ­¸§oòBh÷$݈DA/2ëùï4 ìÞU6ÕÔëØmPo¶ 6Ç4ð¯¬gÕÔ]æYgCü'ù®xƧ. tbpÙxúš¦¥*/Ufú±´Õ@2M\Î{#š\W-™Éôê!7¤¥ü»8Öý•´Ê¢úýßëy@‡ÞD<ùàWF�4Bq­oh‹ïYF@"ÕéX™]z‡WŸ) pχ¨J1 µ~=ßj¹¡? 'Öˆü¤Eèѱÿ‚Ž,#BšŠ ñ�A½Ùt]ÔÓteWDê9OÕOòÞK<ÿÛ`“1¤^© Kï¢ÆãV’iZ‹Û•L£Í¤WÖýƒ†FªhÕ1–!¹±ztÐõF7´QÛ5Í/ÇäŠF–¯ÃÓ‡F<L¯M€ÚÇ›8×üoºô]r̾þ š`šÑNÓP÷Š:vOኦ~ß 8zE.÷�rã’kT°á`Z¤˜àÎÓÙzéQ*ðgÍ™×=¼vµšGõ‘ã>§ç}=Fž[O©›êȰFxª‘÷TÎ=ñ7Sò{¦Î›)7<¢úºžt¨ï…4gcïx—´Óù2î+3M\÷E¹ý²™3F¢nž›é)Ó$H¥÷ ý¿ÿÉu?ÿ} òãT½Áóý.þ¦Ð¨ûºYÒÕØªÏe{ñsÓY$·>ùS{LD×CYç“I³Ú爼çƒÈ¼­—il·)Ü[Ÿ™/|™9M=‚Íù-ê¹ïSŸzòo¾¯Ò<eŒ’š¶Ï÷Md‘ùž¸¿ÅšŒDz÷Å}}iº¤_?ö,l{VìÏTšíkI2ÒnrG™í2è*¬Y*·FU.ºEq­·3ô®+.Ùè ÒL31•ºndLå¬*TuN95³ÁYÓP÷–r#4þHKÎ`cÌ´6Ü€xoiÆÁV# ¦ @'êÍ6À#YOÉIõ`kÓš5.idy8Ðù¿SÆ9p‰ò4;Á©žj·žQ0p¶Œ.p°;Ø”™õBý…¼NAÖ“Öç|¾Gôüô”ÆÁ[òsæç§‚@Y¿>¡ÓËßi4÷1?åØ|®zÉ}MõÝdPnH¤W òCÕùÎó׌:÷«{—õ†n8 žé`^·¹ÓjrΗ™f ë6I¦éFvb uzSù’¥­Ö]Ý×3: ĵÏ_Z÷'~ÿ¦3ä7 ü|¾”mÞ‘ÿZÕ¡±|ßþ¬˜v¯?º”õ²úÛz^·¤±ÛPðk�#�áN@ ÝÛc*®„ˆ±í3¢¸†×ºÇ‹{•„!xùBö²É‰‘coDm3˜õf ÐÁÕ¦Ù3-ˆÑõú컨§É†ú ,ÉQ¯Äß²×ù€†áñ s‹9–éè [Ÿ+fZT=iê>Èn‚Ãl’iÔßë?¥‘ÿNú}(sG€êµŽŒSÖˆ�K/£uctL~'Gp¥¡é“Äì’?ÉóéÎ ;Ÿu šy1sl}Z2_”¶Ñè‡6]ªWÝ´]zÔZ~?‹ÄýëçÊéÓ)秬/ų$¯¡ó}§gE_ß6±{Ü–v&ãû óÀ€F¨×èÆ6ÖëÆ¯{OçfÚÏ6#ÀCä¿GC£0»Q­¼êÆR›¡îŒ-Ö‹—>:œGàžÉ›þ“;-È<ÿû*@ããzv`ž \í¿Õw{‘i$Ô$ñÞää¹26Óv î’ç1ß3÷¡êe¼nþÿ}9¥ëå-/xˆ§W ƒÙͨ„2*Y?â395Æ|»äOê|œæuž¬º'k-C"_äµùÜ Ñ&…²qÜ35ò© È&ÀÏ!qÿF/ÇëÒøõo{Vš­frZTdH·¥]ÒÎÌ Uڔʭ´‡Cq­óŒ€™r²·©¼ä°÷!õ½S 'SšlPÆ!yAH“¿yxF`Wª”W3uÓš wD ÑÈÔ›m@>¯éi.*ÀL Ñó/ƒ*݃S¦N³¾'2s~.<ß” Ýk›kŽU°›²´Óš˜Ö3[ˆ¥I ¿gàò::¸6£âYÝë{„h~½ OŸ²^œH¯8BæOd tðš{¿¦'߯¿oMg‰“s>yV{#ƒñ¬|Ñ£9&½‰|Ùtrð: n“æt½üLŸ–?sŸ8Éû{¤QÊ2\y}sΞüKmìµ"‚mi—Èki3«ö€_€*mJåÖ Úá¸Öº²¶€ýúPkHWU^º’C™û¼ ów§tñõ/Ù 9Þ{úû§áÑD=_jn¤0/§wã÷èḅråu³X0Þ³” Ǩ¡x»÷ ”¯7u�(ËOÎ )fAb.¦¼%¦Øõ¸® Ÿ×D@gîÑ ºÖË)]œ«º›ç_wrÈã~Òòê =<ß3 .?Ê LÖi¢žºœýCaÿ‡Bw_¤¢¼?£Pç]~˜gä%÷Úö½Ézú _ïµHÌÅÉ|âiå‘¿g½6T«â&ÿ åîÁ6Sdðy˜c6éÝsºúðI|?»3àFÿ‡º‡<n¤Ô´'®ógŸ>gLuÊ>Ÿ­©\üü±0ô<xOæ qÎc]âÁu2_T°o¦þˆ´ÉEÔGâ¼ÿV~Ò€¤HÞÂ(I½L¹Ô¦aðš&S¾WÎË[ž©ÅqæÔ¤ü´s¾ê6ù–ºtÐÅ´Öð$7Ç%ÿüCÔƒ!‰ÞĽgt<ÁŽ©Ìt¥ÍsÔƒÐÿÊET|®yg<?ˆ™ ç¢Þ%f4È™F Ñ�IQ6ÀÔ†ìñ¶:)äóËù•ܸNR=«ö=›Y…3õ6™GitÁÁ¹6 }—¼ñD”=…Ï'±rP: GƒºÈ2ȉ�]\Mt|=>‡GgSÓ3oÉÛ‚Ódš’ß3#¸VÕµêšA""’é5ÓgÌ|øL£b:Šôùu>ªó«`¸ïz4Îv³Ï'0 ª¥f!Í¿_ÉŽÁèZHc£óOÞ^tÊ>‘^p,åsú‡är H’äýË¿Í4¡d¾ë5qQ¾ßþ¬De[ŽÔ„‰g3/í9Bòx{}�: ?Óe©ÅW¹8èкû@Ãv�Ú�uõüšn½p x’ø³6Óµôva¦¿“ïÿNÓåa?Pªµr¹S6#¸Cí(cQ6ø€��­»4lС¬çoi”ZÓrè©1ƒ€f‹K¹¿µ|„³kéýE£XNâÍPúÍn[G„x”Á'&à—F�4´î>а@‡–°þB¯ÞßÒ“Ú jn·=e¥Ýt-½¿<"ðv3ELnàÿAÓ\#ÆFáUö+ðËP¥M©Ü¡A{8@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŒ�hhÝ} a;€���êF�4´î>а@���u#�ZwhØ CùIË«€ü³Ï´Ò{ÚH×ô-y}‡öœ!³k½¿.¾RèöÄ3éÐ ˜ÑZïý¥X†äŠ2·çŒhrýKÞaã¬ç¿ÓIøå×|^:Œ�h„bZ›ÆET¾©m@^ðM—?õ± )8ÿ‹a!¬]ߣ³é2»ò_]‘ßß'7üªwÖKº»äðw—ÆWöw¯iލ¯Ÿ Ç}MW™ÏÄšVÓ±8î˜ÂåÞõ…Âá¾~ž¬mм-§´‰kš't2Yˆ§í̓'égkO<Ûþ;šÌëÄ·³^„4ì ð÷_ ‘7ù¦?©“o4ñŽ)˜ÿÐÿj¬éz2¢ž7JƒZXÏ(8>ëD}û¨Ò¦Tnª\t‹âZ›Õà–4=óTðW w‹çã)é³€’ÖðzB£¡ÐWŸ)pEðí<¥p‘Ø£À¼gï4õE€F³Õ æ£ïª†Ùé(äÀj½ ÉhÈË@Èá@lóqoÔ(°{n9yÔ™MÔ›m‚MÀ1 ü+ëy2u× 3:ÿ“ü¼ç\6ž¾¦i©ÊK=×ýXÚj ™&QνޯÜ[ÎùØwRÜ%•4ÏBw¬¹!-õžû‡ËÈñSPÐŵ¾¡ex,¾g‰éáÁÝ.=¸:�íù0U)¦!ë§tfõ®ç bÁ>ó“¡GÇþ :²?ãàÂ9° nŒÈ‘½rªa‹iš:^À êñ3ò_e<Gò»&hk?¨7Û‚®‹úcš®ìŠH=«©úI>g{úÞ6Ã’=Ñ?i9ya™çºH¦éô–ßLÉï5U?TѼK¨öír;€�PŸ`tCkzÜVsºôõÞú/hb÷B›ýò\ÿ¢ùå˜\ÙKÌÛ€FrHÜFq ȹ¶vƒÊÔ+r¹ÇR~fŒ€îñi¯{Y9¸º™Q0pâ•l¬íyÊ<¢ LÀôÛ–çˆÑ×êÈ´ ¦² ät¶^z$IüYsæuÏlÏßôöZu—ã>§ç}=}Gž[O©› ˜¬‘žjä=~FO¼, ¦~›y¶yD5ôuÝçPß iÎÆ:Þñ.i1É˺¯Ì4™Þò/"mü=ñyÌ]Ó|XÓ“¦I±^~¤±]WÛ½×"& ætG#œ ¼úŽ=J|ë½r]“—f;Ÿéeð ²ê‡Ûò-O[¹žäµÕéz/WsëEzüéwqiŸzòoîüø§ž&™4+¦ 5Çý¨ûêo‘¿‹å%¢{ÿ¡Œ£ø,nT…~¦½tŽÈ{>°>·>“×Ð[ôLf§]¡ëóVR<\XŸ²Tnª\t‹âZo3fè]õ�«JQ§¦‚X°®¬£žù·®xÍ””÷Iµòª{‡¢Òy½ щ÷–fÜ�ÇŒ€ÖÞ˜bûÔ´¡ÍºÑàÌÎDƒdtçÞPŸ<9ýgÛsÄp ÓiA êÍ6À#YOÉIõ¸›Õƒœ0²£â@©ÿVušØ«4óÜšg|@^8£ϱNšá+QF›çÚLŸ‹¦ÓqÝw`}Îç{DÏOOi¼%?g=A<MYŸ>¡ÓËßi4÷1?åØ|®z·Í>õݾ“•t•÷ÎÓ�_ÑФ++dþ‰üÓ]ò/çân¹ª4ït¯G"ÍoéxxF³Xšu>÷tÝ¢ó9·ç:/ß¶j«ž¥×e^ô¬ì¢¹I‹<ÖyF§Ák Î_Šÿg˜B:Î|¦ë;ÿ ù¢îý<y)ÚÎ#ò…Ùñ‚OÂP¢à<K?3ꪟÿ¨#Mÿµ¥ÛÓ®žOaJ`ZŒ�h„»412ëïº2Šœ Jå•{»Ï6A“œ¶ãmþ.dÄŸ«…QO K/_rÏ›zØ Ãq‹èØ´ õf ÐMºAVnëA–Ÿé50‘1NŽL%þ–½Å4ŒÞ´r‹•éè [Ÿ+fZTÝ *¹ç|tIËÌ2É4êïõŸÒÈ'×ò¨ë˜€ž§pš^`(æ˜Eͱu_Úð›ïè€^ŽÈü8ÌÍÝñ^3Ó,Δ:/íýt;£Éη۴Uyѓ럢/ ²4ïE# ª“Ëä§ioÑVÇE†QÖwâœî©ÈÓŸºn4£,ö3eŒ–•v]©Ÿÿ-’vÞ‘ü>¸Oª´)•[#4h‡âZo àtck÷ºñPðÅïz8÷6#Ào³yOçf:ŒÀN”/¯Ü0ò43,̲˜¡íŒÍýOšÙ³D›6+Ù Ÿ0\«ã²Î C:°é|/àžÉ›þ“;-H?k{û*˜çãzv°š ìãA×MS×É7°2@MöÛi’˜™Æ¢ƒÊXyË"yó=sªªànóÿïË)…\×n}ÁCÆšyleÝn^_nw½×¬4§ó9žIròíVmzÔbcû8ý¼ð¹¿/ô4§}rÍKv ¤e@¾ÝQÆÅäêÞ#£{¦ø³e<u¥¹¾L¿0 rZ”1ª·¤‰uü€û¦J›R¹5Bƒöp(®užÐ=â|¦å)&£þ!yAH“¿/·È øúÞ)…“)M0"°3åÊ+/›W+n!Ñ0¨$kÄG7æ›ùÁ@˜�KïÝp›¡L4Ð�õf Ïkzš‹ ´Òºª£Dàd²Ñ´S§Yß“A™9??§ö[ktOy®MôË:ÐNkbZS,PÞB,Mù=k”B^G—Y3ú!žU~mp~ ùõ‚>}Êy}°D÷¤ëto: xŽ?××sº^~¦OËI³ŸêÜ™¡Õm÷*{ø÷7÷™ ®gù¬×˜åÛ™ù¦ƒàmÚAz<uLJ¼~e¶hÛæßhùé³yÈ{ÎâX¹4*ú¹0æ#vï‰@_~fÕ™º‡s¯&ø7kô ùÙö´oÒe›%pŸTiS*·FU.ºEq­uo‹ÀÙ¯5 ‚M¥£+;@ŠÀÿåïônüž–ºAr¼÷ô÷E@çç/Dã¢+?³F ÷‚ÎßÒE*P6Å5ä ý mÀëè÷t�“ê!ÒA œôB¶dÃ-"Lô6ÅÈ7j:B÷£òõ¦ŠdùÉž¢a0å(¾À/S†¢é9ìz\WÏk"3÷hèëå”.ÎÕ¢Uõ,óú™”lj2rõ†ž‰Àè—å¢V‹:íröøþŸMð*êÀ«ñ3ˆ ÌyÐ垟$1E쪌ðõx¡ªeœeÐw[P©ó(M¢Ìð÷¬×†ªÞsq“ˆzWw3eFNå;Ì0\ëg,npT°k¦¾˜ÀóH¤ó»jL Û…±ªgv¹W«Ì«{Òi^[\Oyyî ü®x­A’Ì|»EÛï" >Ôe/\Çó÷:~ŠÈÁò¼‰ =¾í8§«Ÿ´&ÆxèsDõ€¾÷ÓKš²Y³žo¹ûùcQÿÐóà=}y¡õpÓé³ÑmwfÚÅŸÚ@ýõÀ/Œ�h„bZëEu°$7^vþA½B"*$¹(‰?wvAÁsî4•n\L°¨{yT/Ó]ϬO`œÿ»£š%õùž)# °×Ä~ŒÌô8©žÂ‹hyF ÑkÚ!Šé`#P²ƒÁz¦äókžq{SÏ(÷fÛ÷lFLOêw=¦Ñ¬ú™í»ä'"@eC­Þè¢À.Äó? GƒºÈ2±‰�]Ö‘vïm¬,íT&Ó”üž)gVàÕËêšA"$2(4½ÊæþL‰´ëÎÇ`óƒlQ=®ÎmßÏî÷š‘f=Ú¬ÒñOH§æò3ùù¶MÛinø~Ì=é·¥òWì²ï‘ÏLô±–aá æ¡óÖéÓ©(Ãʨ™ç"q3‚™+½àÚ¤‘ LO˜¢Ñz*“©Kôó^Ä,/7í:o©@³°Ne©ÅW¹8èкû@Ãv�Ú�Rmü5]PO?p@èÿìJ–kšO.(”£^yÓ3-xd ÊÍŽ? šF�4´î>а@‡v°ž¿¥‘=‚uoè^ÖA@³Å%2§k�PjíFb=wê—2œœÀ´Ðкû@Ãv�ZÂú ]¼zo½õåþPóéyj‡=µ€;À^«g6žúu1USš²`£à¿Am)Uڔʭ´‡´î>а@���u#�ZwhØ ��€º€��­»4lÐ��@]À€F€Öݶè��� .`@#@ëî Ût���P0  u÷†í�:���¨ Ðкû@Ãv����ÔŽ¾06lذaÆ 6lØîo+ º¥������x€À������ð�������à#������ÀF������€Œ������������� 0������<@`������x€À������ð�������à#������ÀF������€Œ������������� 0������<@`������x€À������ð�������àÁAôÿopÄ0Éü;]����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-3a.png��������������������������������������������0000664�0000000�0000000�00000040515�15030617045�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��*��;���2ÜuÐ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��@âIDATx^íÝOˆÇžàñ¾¿ûBûb/º5‚g†>õÅ#4Æ 5–«7ö PCX¬…‡WÐæ!Ë H†aQ`,k‰-k V/ÅÓá)ÐÁèOÏÁH¦iž„MlFfü²£²¢*³:+«"2¿øawWUVVFį㗑YZQ����à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���àï •×¯_«Û·o«••‚ *épýúuçþ1ßðÑË—/ÕµkלûKÄ|Ã7^*ÃáP={Öy ‚˜øæñãÇêôéÓÎ}%b>ñ›ßü&ýßÜ¿Ÿ@ ßxY¨dWQt’ÒÉ À|è1æ:Cé‹ìþé ‹�ó¡W)®\¹22þuø"»ú¤¥>y `>ž={¦.\¸02þuøÆ»=Ê®¢èD¥€ùÈ®R\¾|9ýd÷O,ºp0ÙUŠ«W¯¦ÿïƒìþé—ä�`~z½^:¾tܼy3ýßx³G¬¢�ÕÊ®R¬­­©{÷î©7oÞ¤¿[&VQ€jeW)txôè‘79€U ZÙU”3gΨŸ~úÉ›àâűŠT˵ŠòâÅ‹89ù XEªåZEyõê•79€U Z®UŸrÀ$KÝ#VQ€jM[E±C_4VQ€jM[Eñ!°ŠTkÚ*Š9 ÏÒöˆU Zy«(ËNP¬¢�ÕÊ[EYv`¨VÞ*ʲs@ ß#VQ€j]E±Cž»¬¢�Õ*ºŠb‡<wXEªUtÅy®oºG¬¢�ÕšeÅy~ÕXEª5Ë*Šòüª±ŠTk–U;äù¾YȱŠTë$«(vÈëªÂ* P­“¬¢Ø!¯« «(@µN²Šb‡¼Î7•ï‘|p VQ€ùÒãÉ>CYtÅymdÛ¬¢�ó•]©,ºŠb‡¼¶ ²m VQ€ùÒ9ÀcEWQì×úfá… AÕĬ«(vÈ6ª`ï#AÕŬ«(vÈ6ª`ï#AÕŬ«(vÈ6|C¡B5‰YWQìmTÁÞG‚ ª‹YÏ Ú!Û¨‚½AT¾æ€2V¨�¨†Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×Ô…Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×Ô…Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×Ô…Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×Ô…Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×Ô…Œ1Wâ)UŽÓ*· €�4Œ1ר.¾ŽÓÊ÷È×>_ïÔ~ïbúY“¸¨zûª³jÿ~E­¶ÛêcëçÑØP›Ýžê̶Ÿª^{Õñ<‰5µÙÿÅ<7ñnÐQ«#ÏYWÁ¡y4»=³ŸYñ~¯ªvïiôÑ:>Tw;mÕj÷Ô~ò ó>^;TƒÎºZ±^ƒù“¶t%ž¢!Û¨B•Û.%36[ç{êù‘yLÛï©¶y,«íÔ·ÝMµ.µÚªÓÛUÃݯÔf<fŒ£}µ»›•SªÝù^í n©-ûñÔ‘:èoEÏûXu‡oÌïfpÐW›­–ÚèîE[š³Ã¡êßí¨vËë#ùa¾òó ²¤ºÆvÑmT¡Êm'ôߨžÚ\o™÷ŠþŽöö¢¿@3Ðý\éÕŽd»žãïxú>ݾÎ}Ô@É2ÕIç�'ÅÜaVÒ']c»hÈ6|SùùúÁ+O¢ Ïf_I™‘x£†Ý£ã`'_TsM­ØI1šÔ nÉägCmõŸ›I‡$ »àÐÞªç½Ëê¼k²p´§ºQÒ^ßVƒ±$šlo5;1›D¶¥÷‹Äác®ÄS4ª§Un{.ÒIHK­wv3“=N?²ND°÷nE“öhœ··Õ9¡Ž]kò~øWÕÝì¨þþÛ臷jÐSö‡îÉýÑϪwþT¼³:\ŠòCô6ºj8×9“ä.}|(|%cÌ5¶‹F•ã´ÊmkGÏ¿U[[½¤`8z®ú[ÑûÍ2a7c½Ÿ®B%–ù›ž„pœäX†R9$s�ïÉsí¢!ÛðMå{ä믄™ð¬vj4ÏÉŠ‹ý‡Þ$Ʊ¤M„ÛI±ÒÚRýƒ$Ý$g.²…Ê4fådBRÑÛ[³÷ópWu6¿’€¦o/ñkô™>g2³`2Æ\‰§hT9N«Üö\èq{êTûýGþ£hŒýjÐô8m;s2Â}@Oê?I& ºHq%Gï+*GîÚh}¨Ö?Œ&³ñ$â”Z_&Q•œMuå¯yÑù.³ …™Ésí¢Qå8­rÛNñjè¬caÒßdáx<-N:îæ×ÿKåBŠÌNйCY2Æ\c»h,|œTùùúÁ+1—BE3gn¬3#•*rjjÊKRoÕ~ÿ³¨Àâ¬ë¢És%ž¢Qå8­rÛs¡ÇíZGí>} ¶ô¥#­Kª÷\¯‚hv¡"« SÎXF…Ìï·£q•4Ÿ™•i¤Àù³Ú‹·?~9ç4ñ%š˜ìíEÿŽóøŠnYÕ*Gûú˜Ÿªä²&‘1æÛE£ÊqZå¶ÇÍxÅ@ê…Šün¦¿ÍÇæ×ÿËåbª*T˜;̃Œ1ר.‹§ÅU¾G¾~ðJÌ­P‘K½Ž'c…Š>“sé« U+X¨¤g„’vJîs5ìßÉ\¦’ÙÞÈuë;¾ôÄÄjgWý:vM«¾Îõûh»ò~jóÖ®Ú×LìeôöÕ÷ÝÏÕö É1w%ž¢!Û¨B•Ûž S¨ Þ¯f¶Ú·Ô^¼bb*f š”D†ófLä\Ç5ÉÙ¸èÐï_¸ØÐ'5>L '¹<ÃZ‰ÕÒûiV?S½¯âËÖVô=3Û;ñØË{|<8òƒ¾´íëã{ô=;†ÑÑÓÛßQÛé˜ÂoGÏ{ê|ü^&t.üÕq?ÌÈ%±úõ›êÖ`?)Ó<t^u£}JÞ¿¥Ö·4*¯È1tí¢!Û¨B•Û¥ûf7êŸX+úïŽù[´~ImÆ}Ñ\¢y¸§z›ú21ݯÌc3*rRQßµ¿+ãG‡ÕÓ~º¡.o~’þ­ü/vÿÏD2±ýnâ~ErsˆŸ÷T7ú¬«_ôÔŽzœnïê±”÷¸6mà«Ç—ÇFÛwë²UÞô®º%m¥_¿ùµÄ'¬ömßPýÞ–yÿãËçsÎkwUwëN™;…IŽŸkl Ù†o*ß#_?x%L¡"Ÿy<Š*R˜D¯15ýÙŽi‰«h¡ÿ4úÜã÷²o–µŸ#g‘ôsä3e&3ö±}З—m\TÝ=“¸â³(§ÔùÞÏêN®r9M¼ÂsþDg¨šHúƒ+ñ ÙFªÜö\¤…ŠþA ¹_Å*TÒ>mãi&OÞeÏþš‰O¦Ø˜HOPVeHNpØgSe"¥÷[n0>þŒÝÿ«L}\¯Žíñü` <],Äc[_Æñ‘ù KV¡ä󘕦ôdN|‰ŽlÇ•W̶de*½ÿ@_¢÷Ÿf…K?_ +Yõ²&m È+É1hz°ûO²2jÿ-²W8ÍI:9)‘¬nDc5¯PIûyT™Iq|Ê»äDAR ÈXÔ'5þÓÚ/ûÞÓÈHÿÄ—ŒFûd¯é¿›Q‘=~©©(Cd…7>[ª§‹ó^ñXÙ½7ýñ¸èË›$c5=É£÷;:žññ0'QÆ‹çë«iá—¶•Ûÿq|ÿŒVrÒ&¾.Ym’ûã×~½ÎÙÆáJÚ‚BåD|ýà•0,¨•ø§ñç&ï7©PÑ$QÉgr|FI8ñkŽ?“ô ý_Æïg­° 09Ž®ÄS4dU¨rÛs¡ûiZ¨DÒUF=©ØS»R¨¤7”Êî‚ôYÆž>ó¨ƒ@Fü^Q¿·nÖOÆI‘K7’³‘«&GÄÌ„DòFÂL\ì\3ò‡<ïññ±=š’Ü0úžY² £ë¤BEË䕸ód.µ“IWœW²yHö-É•Éÿ×?¯Èsí¢Qå8­rÛcÒ3ýV?ù[¤É8³Çò´¿Éšôµä³$ÈïGWK­÷?^}ï§±±þ/«º2þõ~þ^}4éRS­hÉž$ˆ$«/f|å=ž7ˆ?KNÞr›¢s»­äwæØµ¯Ý–æÿí•Ø’>éÛEC¶á›Ê÷È×^ 3XÊ*rôxÐÛ|‹1IŹýdŸJ÷s…Š9Ó9é&?{ Þ•ü1‘Œ1Wâ)UŽÓ*·=ºŸÚ…J$=c×Ò7ÙÿƒwããrÇÛ<>Ó)—iÈ1²cúÄ?’NŽ×¬È¸ròÏ)T&æ½DrÙÅšZß¼¡¾ý±§¾°Ÿ›S¨Œç!ͱïcûfreCòŠ´»kl ÙFªÜ¶“Œ ù{56‘••7ëïÕÔ¿ÉZÞãryST4tï©{ŸY³Çûil¬ÿGäD‰þ[©Wi>ú½5–ÇÎ!®q¿¿ù]Þã9s€és”iÇ&oî0íØîûؾÅm¥/ ³¾ºÚ¹²>isר.² ßT¾G¾~ðJ¸zl–BEΨDÇÍúf¡éIÀE·ëì¯^¢m[“­l’÷›g¡b¹QY;PÃÁ“4iØÿ>EîD 1c®ÄS4ª§Un{.t?Í*#ãÐwé¤Àù­_‘ÃêvêPoS_^0òœì‘`³gK—n8Äû2Vø»Î¦:r™È%c,ïññ±=šLnp„íÈe)Ù™S¨$grkßÇöm4WÖ=¯Èsí¢Qå8­rÛnz ™{·ô#‹â_˜>íXQ™8îãÄ’ä†äR椫Ûýp¼ŸÆÆú¿v¼ªr¹ó{õÑÔþ:CÉŽ½H²Ï&Wä=ž7ˆ?KfõÓ˜~l Î2'ˆ\û>¶o#m¥/ÅMîéæË–KƘklÅÓb*ß#_?x%œ—]hröÆNŠ&‘ŒL¬ÑÒë`ã“|r³j«ý•Ú•ër‡ê¾éld¢%j°{Cu¢÷H‰•tä U:‘$%ŸÉJüƒ‡j»óPHò0¯ߟ(!ïÝU݇úý¾Råæ]sF©ŽŠ*Ès%ž"qïÞ½tU¨rÛs¡Çíªkr"÷jØ“Þã›?[íŽê¥—˜ûQäZò¸ïgoøLÎê%“vÝ÷õ¿Çâ:‘ _žŒ¿ôfܬøúñ5ç¤ ý£^/cU®ö5¾?L¾Š9ïññü5šä˜È}"úz²uWõöþœä8ß¼Io¨MÇv:¹ÙQ»Û_EmpÉ+æ}ùV|ÿ̤}—IÎh®lJ^‘1æßEâÎ;é6ªPå¶Ç™>bß26‘ºCæïQºâïk¦ ˆM?LœÍ¥é—8Èßìl?5Æú¿Ù®¬ªŒÌ²fÌ!Ù¼ ÷{É\ ïñ¼9€ìóÈ øÑø½uÏ|#á¤c“?wû]Òûg&í{Ú¾v[E9e{3ݧ¤Ý)Tìxõꕺyófº ßT¾G¾~ðù’–|Ö$LB’d=6õ_¦×Ë’wÿd&7š)"ìçL8£3NOŽúæ ‚¼^_þг¶¯ÉD#IjOwu‚“篪vôGlä3´»ª'(ù]òYÓoñщîéNæ5:èýqë×»AWm÷þ”~;ÐHq…©ä»дxñâ…º|ùrúú³gÏš-Ηlß?ããvl54þã+—~ ]”È™9y­¾¤Áúf¯wV·¾þ‹zÿ#Òß/=J&òÚѳÿ£éÈLn29edŸÇò>[ûÉ„¢õ‰Ú¼löyd2a&ÎÇe2"Û»¨îô>ÍñÙà5|°!Éï¥h‘Â"úÞæ;ê®=™I'dr?Ðx^Ñ'pä›»âߧךçïÛÇíÿÞˆ¼"ÇÀ5Χœ'OÔ¹sçÒ×_¹rÅlq¾dûÕâTÚ=ó7.;&ÒɬÇÇ_v¡¿¡êÆæzr‰bzÂW£c6–~ÑCÒÏ~ÜýwS]U_´ÿ«õZk<ôë&{ùL®UJcæòôÇø3´Ú—Õåô3[ãÁ|FçãcÇÐ=HO„ÊïÓq>éØ˜"1wî Ó€ýíÑ\ENåîÛß«öÛžð†õ!Ÿ×5ΧÅO?ý¤Îœ9“¾þúõëf‹þ P'cÌ•„&…^EY[[K_{ûömõúõk³Åù’÷À²˜ ýÄyÃw2Æ\c}RØ«(:z½žÙÚüÉ{ (]¨|®.šK¥æÂLèÇNƈ¼Çá5c®±îŠì*ÊéÓ§Õýû÷ÍÖüB¡NƘ+eõŠ2Í–ª!ï…e™~ÉJþãðŒ1טÏFvåÂ… êÙ³gfKÕ÷BAñWùO¿‰~f/M7ò‡×dŒ¹Æ|6²«(z%õåË—fKþ¡P'cÌ•ìXä*ŠMÞ˹ttlÕ$ïq„@ÚÏ5îíXä*ŠMÞÓȽ`ú’(ù‡çÄ|)…´ÃتIÞãðž´kÜK„´Šb£P'cÌ•˜t,cÅ&ï  2Æ\ã_Ç2VQlò¾�ª!cÌ5þu„¶Šb£P'cÌ•œ–µŠb“÷P c®°¬U›¼7€jÈËŽÿPWQl*@àdŒÙÉiÙ«(6Ù�Õ1fç€e¯¢Ød�TCƘB^E±Q¨�“1&ÉɇU›ì€jÈ“àÃ*ŠMö@5dŒéñ_‡U… 8c>­¢Ød�TCƘO«(6Ù�Õ1V—U… 8c>­¢ØdŸ�TCƘË^E±É>¨†=öu„¾Šb£Pg''>¬¢Ød¿�TÃÿ:|XE±É~¨†=þu„¾Šb£Pg''Çš¯ûÔ…=þ}k¾îPöø¯ÛX«üÓdAÕ†o\ûHDuá×>Q]Ô … AÔ,|ãÚG‚ ª ߸ö‘ ˆê¢Nêõi0éÐò•–³DÐŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|EÏj0ÐLŒ}�6r|DÏzýúu˜/ÐLŒ}�6r|å}Ïzüø±:}ú´º}ûvü³ b~áJ<yáÚAa…klç…k;AÔ#\c>/\Û!Â_x[¨è”k×®¥L+/_¾9ˆÄ|•xòµ‚ Â ×ØÎ ×v‚¨G¸Æ|^¸¶C„¾ð²P‘U9XW®\‰‹Ì—_WâÉ y-€ð0öØÈ ÍõìÙ3uáÂ…´}kO¯z–kåþýûæQÌ›gWâÉ y-€ð0öØÈ Í”]øá‡¼kOoö„U”Å“cíJ<y!¯¿_~ù¥s|O ÿˆ(OƵã®±?)t!'„©×ë¥mwæÌõäÉ“¸M}kÏ¥ï «(Ë#ÇüÕ«WcÉ'/äµ�£¿œDưο®1žo¾ù&}ÍÙ³gÍ–�Ô}éë®Ï?ÿ<}|áü§çÝz1@ÚîòåË#ó@ù½/–º'¬¢,—÷sçÎÍT¬pVßõë×Õûï¿㼕ó¿ýíoã _Ô‹ÓzlðÁñXÏ[Y‘•”÷Þ{/Î%ƒ¾EŸhÒm§ãÎ;cm+ùb){Â*ŠvvvÒ6ø—ù—BÅÊwß}—¾† ¶û·KÇs‘øôÓO9™Ô”þ{®Ç¸kìOŠý×5¯†ïì9ßÚÚšzôè‘sž'ÏñÅÂ÷„U¿èŽ+gUóVV䬪>㢓E >}6Tòñ´Ðgáó@½é1îú(W°’ݦvž×s½/^8çy:äy¾XØžèÅ*ŠŸúý~Ú.EB'1ŠK >ŠŒgÆ<Ð ENHpÒ" :oÛ…§¾d/ïêy®/²'¬¢øÏ^œ\î��à7×W» “lÈó}QùžèwäCAAQMhöWëûQ䫇‹„½T¾'ò ‚ ‚ ‚XLd¿z¸HÈk}±°B���@5dέãæÍ›ÎB$/|›·S¨����“9÷¤¯.¾ÍÛ)T���€ÀÉœÛU€ ßæí*���@àdÎí*@Іoóv ��� p2çv E÷y;… ���8™s» ¢áÛ¼B���œÌ¹]HÑðmÞN¡`Ažª^{5Í q´{j?zäÝ £Ví߯¬©vûï­Ÿ3±¾©º½‡jxx”lz¿§Ú®çI´¶TÿÀ<w¢_TsM­ltÕ0ï©3;PÃþÕi¨Ú½§æw‡jÐYOÁ\½¨Îêªõ^óò.:Ô3Ç·Š÷™âp¨tÚª¿÷†ÚìíEG� yÙU€ Ù†/(T�,Б:èoE“Ì5µÙÿÅüÎ8ÚSÝÖh¡pÐW›­µÚDSäÄÑþ®ºµ¹‘ä–õÏTÿ­yÄ«5'kG?«Þù˪·oÿrÜÑóž:½×ÊÊǪ;|c~;Gîڈsá‚'õUqµÕB$mÜÚ쫃£çª¿õƒBE(�ԟ̹]HÑðmÞN¡`¡’Õ“uÕdσ›{…!^-T¿ªAç£8·Ä“Öøwf…"[¨òF »«Öúºúp¥¥6º{QI5gñªOE…Êá®êl~;ÿ•™‰m•K·Ùç¹ãTqáZ“b�æLæÜ®¤hø6o§P°Pó)T"fµåx¤D¡¯|¢º{NV ª8K_U¡"+ U\B6Ѭ…Ê[µßÿL­¯\,W¨TYì@àdÎí*@Іoóv � 5·BE.õJ/#/Tôå\—¶]¯µ™ËÑ⢒••ãmGûjðí µ¹¾¡¾èýIm·OÅy­ÕþJíêKÏò×F&ÙGêpøPÝÕ÷ZXŸwä²¶•SªÝù>¹'Úþî¶Ü—¡cCmõŸ«£ø²¶ä½’ÐÇõ¹ã~˜¨P|í_T„™×oÞÚUûq-fÝ?Óý“ê9/«Ëʶմmªç½KÖ¾K{F¯y°­Úq±©Ÿ»©n öuk˜m­©õË—Íãÿ¬þð‡N_Ÿ„þ¬/ÕþîWÇÛXi©õ­æsM9žññÿ>z9vÖñ°Žu«ýGõ}÷sµ=ÖWÀ?’]HÑmø‚BÀBß8Ÿ‰Â…Š)LÒÉ¿ü<º=÷kmºàÙPç{?'—{™•šãKÊä¾½½h"¼Ù‹&»ïÔáÞ­d‚¼ñ¿Ôîƒi›û8ìBÅ|®‘Ï«/ßZ_‹&ú>I4‘l«uS0%÷¸Hñ”½g´h8>¾VQoË7éêF´¯]uÞ?s\X%ï7í¸Ñ÷<¾gÒ6ä&|YQIöi£}KíÅ…˜ÜorIݹû™ÙÿÑ¢#–]Q1÷Ê$m%ídŠà)Ç3~lã¢êîé–ãq*îïô~¯o«Aº_çE5�øGþî¹ ¢!Ûð… €…òmE%¾‰~Õ¾ÔËlwäò¯Ì$8&«/úÒ³¿å<þf|’-ÅJüyÍD~ê%gzÀ¬Âè¼:¡PÑ’c,ïe>ÏÈïrì’Âaôù‘©Ç]Ë{ÏøÖ6²…мò÷á8’¶Û–˜té×áPõïvÌÊŠnƒ_§O»ð ]ð¼ŒßÛ^q€0H.s EC¶á � 5·BEîQI'£'¹GEЉ$O†@‰ñý–Éwò»¼ÇÇ&Ù#…JξËåHúk™¿í«ÞössІ‘÷®}ŸTd¸”,Tâ•Õ‰+6cÛc…Ê[séWTXtï©{z5F¦ÿœr<M›OúƲýãK×F.�¿Éß/WR4d¾ P°Pãz1K¡"ßú•\¾”lé…ŠÜDŸý:â±Ë¿\ûm&¼¦PÊ{|z¡"y×W#Ëv.©Þs}ÏHösæ æñ‘Õ×¾O*2\J*æõ­ó=õÜ®Ÿ¨Áð`|["s “ËË’K¶ôfŽÛÀ¬¨8§Ù—ôxŠ5<1}I׆õmwS­G¿ì~��¾’9·«�)¾ÍÛ)T�,\v3ºZsýÛ¦`°'Ìö Ò-¹Ç!æºdkšµ×=on¢7¿J™b ½¯C&ÁÇ÷Mí?P[ë«i¡”÷øØ}R¨˜÷—ÇeäüúÕûK´ŸQQ±òQ<?ÚßInÖO?§)6n¨Áî ÕI/’÷’û3¢}‹ïŸ‰~ãÜw«0pj#m5}V!6x¨¶;ÿ[ýG|ƒý)ÕÞÞ1—XEíqëkõÐU8Ùc(?ÇŸ#½ >é[“çP½{,:F{wU÷¡>v_©‹²OæË (T�„@æÜ®¤hø6o§P° fBmrBæŒ|21µ~M6§ýËô­vGÝývp|A|¦}ô9“W4)DÌóGVa2éˆöói¼ÑÄzóR|–=¾,(dËgp?>úù¢ ø;I‘"¿‹ƒ¾Åþ&ªã‰tRXèoìÒÛì«Ý»ö$ÿ­ùV­¤Hzº›y¯x²/—HÉïïÁ(¶oB ëñè5·?ÎÝÆsS›˜û[¿Þf÷'ÞÇûê6{knÂ~ÖÇêÇÝ· 7g\˜LøÖ¯wƒ®ÚžôÍm�à1Éu®¤hÈ6|A¡�$z×%k‰¼Ç�¨’̹]HÑðmÞN¡�¹¦\²Ë{�€jÉœÛU€ ßæí*�0Uö²£ìªIÞã��TOþ¹ ¢!Ûð… ���8™s» ¢áÛ¼B���œÌ¹]HÑðmÞN¡���NæÜ®¤hø6o§P���'snWR4|›·S¨4˜´Í<þsµ[Ù@\mW66W›– „ÃÕ~eË#mà*@ІoíXùžøöqLÚfžÿ¹Ú­l ®¶+›«MËÂáj¿²å‘6p E÷v¬|O|ûÀ8&mãê¨EãÕ«WêæÍ›´s@æÑîOž<QçΣÝ3¶×qçÎÚ¾&æÕ'îÝ»GŸÐ<ÚÿÅ‹êòåË´¿æÑž¾µcå{âÛÆ1iWG-z²zæÌ™t;´sʶ»=I•@¤½\íZ$²*m¾²}BŸ¬²'©ô‰°”mÿ~øA­­­Ñþž(Ûž:|kÇÊ÷Ä·ŒcÒ6®Žš®ÉªøOÚÊÕ®Ó"{ÖììÙ³éÿ# Ò^®öÍ }Æ<;!ѰI;ºÚ</=zDŸœ´™«}§….P¯^½š¾þôéÓéÿcy¤ \m–Ù6õEå{âÛÆ1iW‡®Éêp8L†ÿ¤­\í;)²gÍ®]»¦^¿~þŒ0H{¹ÚxRdϘë ÉãÇÓŸ6iGWÛOŠì%¿ºOÜ¿?ýá6sµó¤øé§ŸFþ\¹rE½|ù2ýË#màj·i‘=épûöm³Å嫼Gɇ†¤m\ÖÙÉêõë×ãɪ½-øOÚÊÕÆÙp5Ó“T!¿G¤½\míŠì/)Pím!lÒŽ®öwEö’ß .Ä“T{[‡´™«­]a¨:t*äwXiWÛ¹"ïo¼*ïQòááiWçµ£HG–Çà?i+W[Û1鬙MC¤½\ímǤ3æ6y a“vtõƒld/ùíõzf+ ù=Â!mæjo;²÷§éõÙ³gf+ y Ë#màjÃlL;å“Ê{”�øGÚÆÕ%\“UWG–Çá?i+W{ëÈNRud'©BG¤½\í.1팹MGؤ]}AB_òkORå’ß,yá6sµ»„ýn:&]$cy¤ \í(Â*Š­ò%þ‘¶™Ô‘‹NV5yü'måj÷"gÍlò<„AÚËÕö:òΘÛä9›´£«?è˜vÉo–<á6sµý¤{R'‘çay¤ \í©#”U[å=Jü#m“íȳNV5y.ü'm•m÷ì$µÈÍtò\„AÚ+Ûö®3æŒùfvÌö‰“œu•ç"ÒfÙö?É„Vž‹å‘6ȶgh«(¶Ê{”øGÚÆîÌ'™¬jò|øOÚJÚ|Ö³f6y  íeùì×O;cn“ç#lÒŽvŸ(rš‹<á6“¶wMhwvv̳§“×`y¤ ìñâ*Š­ò%þ‘¶Ñ¹ÌdU“×ÁÒVºÝ'}ípQò:„AÚK·}Ù3lò:„MÚQ&5³\ò›%¯A8¤ÍtÛëÕ¾?­h*äuXiƒyäx_TÞ£ä�Á?Ò6e'«š¼þ“¶šG“×# Ò^Ù3l“¾$cy-Â&íx’K~³äµ‡´Y¶@vÚ$òZ,´Aè«(¶Ê{”$øGÚF¢Lµ-Û€ÿì6×1ëY3›la°Û]‡ó³œ1·É66»?Hœô{“×#v»ë8I*dX»-u„ºŠb«¼Geág”™¬j®mþÇI'©ÂµM"Œ(3!Ñ\Û$Â=©™å’ß,×6‰pB¨eκ»¶I,/B^E±Q¨¥'«šk»„ßQf’*\Û%ü“\Ö‘åÚ.nÌcRãÚ.F”)P…k»Är"ôUkt9\`Ö@8\í7k ,®6<I L®¶œ5PO®¶ž5à/W{ͨG9‡«c·«ýf „ÅÕ†' „ÉÕ–³êÉÕÖ³üåj¯YÕã(çÎ(_Ý8KБÃC{7O™6×A»‡­LûÓöõFߨ7Ú7 åtäf¡½›§L›ë ÝÃV¦ýiûz£oÔíŽr:r³ÐÞÍS¦ÍuÐîa+Óþ´}½Ñ7êö G9¹Yhïæ)Óæ:h÷°•iÚ¾ÞèõFû†£œƒŽÜ,´wó”is´{ØÊ´?m_oôz£}ÃÀQÎAGnÚ»yÊ´¹Ú=leÚŸ¶¯7úF½Ñ¾aà(ç #7 íÝ<eÚ\í¶2íOÛ×}£Þhß0p”sБ›…önž2m®ƒv[™ö§íë¾Qo´o8Ê9èÈÍB{7O™6×A»‡­LûÓöõFߨ7Ú7 åtäf¡½›§L›ë ÝÃV¦ýiûz£oÔíŽr:r³ÐÞÍS¦ÍuÐîa+Óþ´}½Ñ7êö G9¹Yhïæ)Óæ:h÷°•iÚ¾ÞèõFû†£œƒŽÜ,´wó”is´{ØÊ´?m_oôz£}ÃÀQÎAGnÚ»yÊ´¹Ú=leÚŸ¶¯7úF½Ñ¾aà(ç #7 íÝ<eÚ\í¶2íOÛ×}£Þhß0p”sБ›…önž2m®ƒv[™ö§íë¾Qo´o8Ê9èÈÍB{7O™6×A»‡­LûÓöõFߨ7Ú7 åtäf¡½›§L›ë ÝÃV¦ýiûz£oÔíŽr:r³ÐÞÍS¦ÍuÐîa+Óþ´}½Ñ7êö G9¹Yhïæ)Óæ:h÷°•iÚ¾ÞèõFû†£œƒŽÜ,´wó”is´{ØÊ´?m_oôz£}ÃÀQÎAGnÚ»yÊ´¹Ú=leÚŸ¶¯7úF½Ñ¾aâ(¿|ùR½~ýÚü´Xtäf¡½›§L›ë ÝÃV¦ýiûz£oÔí;ž{ûÀû£|ÿþ}uúôiuíÚµøgé‹WGÍ ×vˆ0ÂÕžyáÚN¸Ú´H¸¶E„®¶Í ×vˆú…«íóµÂÏpµ_^¸¶S×X6o ]É]¹r%=PºXÑ«*öÁ[d¸:j^¸¶C„®öÌ ×vˆpÂÕ¦Eµ-"¼pµm^¸¶CÔ/\mŸ®í~†«ýòµºÄo~ó›‘Ÿ—ÍËBEVQä éÕ.ýÂ"ÐÞÍS¦ÍuÐîa+Óþ´}½Ñ7êö=¦çØz®-ŸkmmÍ›ÏèÕQv­¢<~üØ<º²/®ŽšòZ„ã¤íýêÕ+Ú;PÒnº ]m;-=zD»NÚÏÕ¾Ó‚1_'í:èþ;iûÖmìëy¶½8põêU¯>£7GÙ§U›ìÏ—_~éì°“B?_^‹0Ø—þðÃÎvu…ÐçΣ½%í¦Ûp–bE÷y-í.i?Æ<²NÒ7tð÷? 'iß:}×*Š>ù&ŸÕ—ϸô=ðqÅvûöítßt•iwØIñõ×_§¯¹~ýºÙ|§í… Ò¶ûî»ïœík‡NZ¿ûÝïÒ×ìì옭!ºÍ¤ýþéŸþ©P±¢û†¼F÷Nªàdì1ÿÍ7ß8Û;[[[ékóõu’¾¡ç ò=€Ÿšþ÷~Ò*Šýyå±e[êøºŠ’¥‹>ø ÞǼ•9˪ŸO‘Ýÿ>ýôSõÛßþ6nÇigZì3+ï½÷–€é¶{ÿý÷ã¶Ì[Y±Ç¸î+)a“1/9>ï쪜-gÌןLfgíüýCÿÞëÏ<mÅyβ-e|_EqÙÞÞN÷·H0 —îŸö™–"Ñï÷Í«*݆®¶ºè¾‚ð1æ1‰Lf]}`RèùÂФ±_dÅyÞ²-|BYEqÑgHd¿§…îô)aÓíW4yqVµ>t[ÚùiR0Æë‡1If鬤„§îc_¾¢«(vÈó—ma{â* ���¢YWQì×,ÛBö äU��� ']E±C^»l•ï^I‘KAAÄbb–U;äõ˶=èõz# ‚ ‚ ˆêbÖU;d˶°=ðå���u%snWR4|™·S¨����5!snWR4|™·S¨����5!snWR4|™·S¨����5!snWR4|™·S¨����5!snWR4|™·S¨����5!snWR4|™·S¨����5!snWR4|™·S¨�¨Ø;µß»˜æ€$.ªÞþ»è¡ê¬Ú¿Ï‰õMÕí=TÃãdÓû=Õv=O¢µ¥úæ¹1×¾¬¨ÕÎ zdQžª^{5³ëª384WíHª»¶jµ{jßü6å:¦®çUæ@ l«vK¿wK­oöŽÛ�Kr·«�)²e£P°}µM>[›ýh*j{£†Ý£üð±êß$¿2ϵ ˆ£ý]uks#É%럩þþ[óÈ/ª¿¹¦VV;j`WG?«ÞùËIA”e¶¿²ÑUå̢]ØR­h"¾ÑÝ‹~Z £=ÕÝh%Çqbâh“…0Ç%.0ߨýþgj}eMmö1�òÈœÛU€ ÙÆ²Q¨�X ³z2¾z!«f•%þÕ¤çþªâ\r\ðF¿[/T¦‘•œ…®Œz7è¨Õ•UÕî=5¿Y$³ª3ñó;Ú¤ˆÃ]ÕÙü¶Ä15EçÛ�B'snWR4|™·S¨�XŒ¹*Y IÏöS¨Ì®‚Båè¹êom”<¦yû�È#snWR4|™·S¨�XŒy*rÖ=½$h¼P9zÞS—¶]¯5 *#—›Å÷K|­ú’3y}üûh¿ŸþhýlŠô9îb¤X¡b߯Åú¦º5ØWoã×Êû™û[¬}JŽ›ûµÉef³*ö}-7T¿·¥Öã÷ÞP[ýçê(¾ÌîTò>ö>ÕýšøwrüÞoký’Úlë×EÇáÿcìÞý9Þîï¨íø9æ÷#—ý½Uûƒ¯Õ溹”­ÕVèGh“>ôšÝ¯’ßGÏßþ¾«¶¦õ�ŒäKWR4dËF¡`1F&÷®(Z¨˜Â$äËÏ£Ûs¿Ö}™V¨è˘ÖWÕúÖµÍîö¨-=!^ßV}s·¹×ãø4sYZzßË[õ<šÐoM¸¿"¿P‰ŠƒÁ¶ÚhßR{ñû™‹Ö%Õ{MÔã÷?5òú£áµ¿_Îkg-TìûZôä~7šðËïÒϛݦ>Ÿ¨v÷¯qá ǯõI[}ò_L;Zvæ^ùR„‘{—’ϸÞ:¯º{ºÌñŸûnòçú—h¿ÿ!*¤~^-ýÏÔGÓú �Fþº ¢!ÛX6 �‹1±øðqEEnv·o&—ßIq‘™D§û%¯‰&Ý磉øÈ·ŽË/Td{Iî<ùÜÉû·Î÷Ôóø-¢ŸoÝÈìˤ×κ¢¢•=fÙãžÙfz‰^&ôñzÎã?i¿Ô°GuÌÊJÒ/’çŽ9ƒ6åó/zoku �jFrž«�)²e£P°ó*Tdœã…J®ÜBEVi¬}ÒÌW÷Ê~ »jC&ÿÑ~mm~¡¾Uýó–kÈ-Tâ‹Õ©ß –¼ÿGÉêÀá®Úî<LÞ/÷µÕ*ɾMøÖ°‰Ç|¿ŽâK¿Ö¢Ââ†úöÇžúBúÅ´>2õóGEOzéÚŠjµ·Õƒá¤V€ðÈœÛU€ _æí*�câÄr–BE¾õ«¥Ö;»ÑTY›s¡¢/ù:CýŸoô>É Db¤0‰‘\þÔÚ¼§v»›QÁ°oVY6ÕÝ»ŸO¼ìK›\¨èKšþ¨Îwÿ¤¾Ñ+銉qøD dbmî im>POû_XïgV&¾¶úB%)êN©ó½Ÿ­bAßëò5üµàŠŠ_ù#ýÂ<×ùÓyŸ?r´¯ßÞHîoI‹^�ŸÌ¹]HÑðeÞN¡`1ÌJÈ<þ•–Ü{3—ùÌ2Ù”U™ì$÷pOõ6?JÎÄÇ÷¨è{R¶TOOnå>¹G%&—}¨Ö£}ÒÛJŠ™hÛS÷gÒ¿£¢'ò½hòüIt,ÔóÞ¥è9§T{{'¾OF¯ìÝúZ=L·+Û‰Þod¿ôý1S^k €ÉÿŽŒ£MÆ •ìq—Âá†ìÞPÿ/¹Á^îiÑ/9ü«ºÕÝQ“ Åì~ÉÏñg{“ÞŸô!×gÔEÞݸ½&~þ—»jûâWj7¾ìËlƒB@ÈœÛU€ _æí*�*&gç“„9S/Ö‘Ç&G«ÝQw¿˜‰gÄñ¯¨;/J¹ö%Ç“óä²#ùÆ)÷} Iab­¤«,“.û2ú±÷µ"- ¦}s—]®8rÂk³Ç<[,¸þeúÛª=òš®êÅ—ÆÉït{þÍÑq2_@àüÖ¯§;î÷{_ýÍa/Í?úý¬ žwÔÝ‘â'ó3…ɤÏÿÇížÚÙ6ûeR�P’G]HÑm,… ���P2çv E×y;… ���P2çv E×y;… ���P2çv E×y;… ���P2çv E×y;… ���P2çv E×y;… ���P2çv E×y;… ���P2çv E×y;… Ð2ç�ÂåÓeÀòÉxt E×1M¡4„ŒÁy€p¹ÆtÙ�°|2]HÑðeLS¨� !cÐ•ŠÆO?ý¤Îœ9Ãxj`9áÞ½{jmmœ�xdcÛ—1M¡4„ŒAWB*wîÜI·! \2Ž]ã=/^½z¥®^½:’t�X>®±[4|Ó*@CÈt%¤iñâÅ uîܹôõgÏžMÿ@¸d»Æý´xôèÑÈ*Ê•+WÒÿ°|2]ã7/ôßüË—/{3¦)T€†1èJL“"{YÇõë×Õëׯӟ„KƱkì»B¯¢Ü¼y3}ÝéÓ§Õýû÷G¶`ùd<ºÆñ´ÈþÍïõzf‹ËC¡4„ŒAWrÊFö²=!yüø±Ùã¨Ç®'OžŒÜŸváÂõìÙ3³%rà®±ìŠì*оrb8š­-… Ð2]IÊ}Ã|ö²½Šb“Ç�„KƱ+Ø‘½?Íu–U°|2]ã9ÙU”Û·oýÍ_&  !d º•Ži—udÉs�„KƱ+èpÝŸ6é,«<ÀòÉxtk ŸWQl*@CÈt%,}Y‡=!É^Ö‘%Ï.Ç®œ0éþ´Iäy�–OÆ£klëð}ÅF¡4„ŒÁlÂÊ^Ö¡Vy.€pÉ8¶óAÞýi“Èó,ŸŒG{lëeÅF¡4„ŒÁy$,y €pÉ8–œPäþ´Iä5�–OÆ£Œm!­¢Ø(T€†1¨VößA¸víÚL K^ \2Žg¹?my-€å“ñ¨ÿÞ‡¸Šb£PBÆ`ö²ŽóŒâäõ�Â%ãx–ûÓ&‘×X>¡®¢Ø(T€†1(¡/ëxùò¥yt6² �á²óŽ2ÿ¸›lÀòÙãZGh«(¶…*A,?Êþk³®mfÌcãÚ.AËWQl =ýá:€A,.ô*ÊI.ëÈrm› ˆð"ïk‡‹rm› ˆå…¾÷4ÔUë´5åê´³€zpï“€zpïYXzZM¹’ʬ \ãû$ \ã{Ö�žVS’HìïÐ.$! ^Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘èi5E Êää ^Êäò‰žVS$!�¢L>ÐAN�ê¥LN `‘‚ìiÃáP½~ýÚü’�Q&è '�õR&'šCϵõœ{™‚êiú€Ý¾};$D~¸’L^¸¶CDøáïEµ-‚ Â×xÏ ×vˆúDzS¨èŠîìٳ΃GLW’É ×v‚?\ã½H¸¶EDøáïyáÚQÿXï ×*J¯×3b9V®$“òZ�õP&è '�õR&'ê+»(pîܹ¥··×=-{À.\¸ ž={fÅ4rÌ\IfZ¼xñ"}-€z1ýäÉ縟="'�5#cúÕ«WÎq?-ÈõãZ¸sçŽííeOc¥}üä¸ýðÃcIfRè„åCõ `¾dL¯­­ÍT¬èü!¯%'�õ!cúòåËα?)¾üòKòA͸VQì¿Ënoïz«(åéBE79†ß}÷ÝH¢q….R~÷»ß¥¯á˜õ¡ÇóéÓ§ã±ýw÷w…Š•¤ù@çW�ÔÃÎÎN:¾¯^½êÌÙøÃþ¾æúõëfKÕ´U;ä±eñ¦Pae¾ôñüôÓOÕ|Ëi++öJÊûï¿'0�õ¢‹•õõõxœç­¬ÈJÊ{ï½§þñÿ‘"¨!=ç’9‚^)qå YIÑϧH _Þ*Šòœeñ¢Pa¥zra¯¬ Š ¾ì••"ÁJ PoºèpýIA‘6×¢€kÅyÞ²,µPq0VQæk–b…"¨?]¬Ø'†&E Ð E‹Š”°Í²Šb‡<Y–öά¢����Õ9É*ŠòšeYø;³Š���T뤫(vÈk—eáï,˜ ‚ ‚ ˆêc–U;äõËB¡BAA5YWQìm,ËÒ ����Õ9·«�)Ëž·S¨����5#snWR4–=o§P���jFæÜ®¤h,{ÞN¡���Ԍ̹]HÑXö¼B���¨™s» ¢±ìy;… ���P32çv EcÙóv ��� fdÎí*@ŠÆ²çí*���@ÍÈœÛU€eÏÛ)T���€š‘9·«�)Ëž·S¨�@垪^{5Íq´{j?zäÝ £Ví߯¬©vûï­Ÿ3±¾©º½‡jxx”lz¿§Ú®çI´¶TÿÀ<7ö.zÉE÷sM´6ûê@?3Þ·‹ª·ÿ.úé@ ûwT§ý¡j÷žÆ[�øKrº«�)²e¡P€…8Rý-ÕŠ ‘Íþ/æwÆÑžên´ÔÊFW ¥¦8è«ÍÖŠZí ¢Ò"q´¿«nmn$ytý3ÕßkùEõ7×ÔÊjG äÉÚÑϪwþ²)42Û׎ž÷ÔùóIe;vÕFœ¿W)T� �2çv EcÙóv �Xd…b]u‡æ7¬¸˜U–ػꬎJýªâ<*+JF¿[/T¦™¸ý)âÕ �̹]HÑXö¼B�d>…JĬ†¬¬|¬ºÃ7Ñ/(T��£dÎí*@ŠÆ²çí*�° s+TäR¯ô2²ñBE_Âui{J2¶ý·êyï3µ-ûv8Tý»ÕnÉ=*‘±Bå@ lGÏIòº¾æÖ`_ÙwÄ��–CæÜ®¤h,{ÞN¡� 2~ã|& *¦0I‹ùyt{SWKÌöG_#E”½½I…Ê‘:l«ö-µ§oì?z®ú[j¥uIõžË½3�€e‘Üî*@ІlcY(T�`A‚ZQI‹•I…ŠìC’ÓÃñe�€…“¼ì*@ŠÄ£GÒm, … �,ÈÜïQI¿zx¼PÉ5µÒr •ø›ÊVÕFwK½�ÀC2çv!ÓâÕ«WêêÕ«éë—9o§P€™O¡"ßúÕRëݨœÐ–P¨˜}nï©çv¥røD †Éw‘�–GæÜ®bdRèU”µµãÕòk×®©×¯_›-.… �,Ä|ÿ•–Ü3—aýãŽS˜íÅq–*òÍbÑûÇÿ–Jˬ¢èKÅ.EŸç”joï¨ýømÔÞ­¯Õâû��¨ŒÌ¹]I6²«(§OŸV?6[Z �¨œY11ù/³z2~ƒýô™¾ÕßLa‰W9FŸ3y•DsýËôÙU)Räñ‹êNïsk?eU…oý�_Iw&vø¶Šb£P���jFæÜ®âD‡¯«(6 ��� fdÎí*R|^E±Q¨����5#sn»@ aÅF¡���Ԍ̹C[E±Q¨����5#sîÐVQl*���@ÍÈœ;´U… ���P32ç–eÅF¡���ÔŒ]¤„:÷¦P���jH¯¢P¨Ì@AAA‹‰Q¨AADÍ#Daî5���€Z£P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����Þ¡P���à ����žQêÿ¡Ê_¬Ü����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-4a.png��������������������������������������������0000664�0000000�0000000�00000042267�15030617045�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��!��.���™'���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��DLIDATx^íÝߋיøÿÜçؾöE¼ÁÙ\ ‚l`a®†…A(ë‹5É _ø"0 †¹0X°"$c‚ a…FþˆfIJÖ@[°ˆo$,cošK°FÁHf"cÂp¾uªë©>UýTWõÔïê÷ky²Vwýê:už>Oîžï����¨E���€JQ„����¨E���€JQ„����¨E���€JQ„����¨E���€JQ„����¨E���€JQ„����¨E���€JQ„����¨E���€JQ„����¨E���€J5ºyõê•�Êñâŋ࿚‰þ”«é9 éÇ´YÝãìÆ!Ož<1—.]2ßûÞ÷‚(9šh8ªÇJDñÑ4¶ø¸~ýºz¬Auh\æ±ÙÍ›7ÕDD9Ñ$Ïž=3×®]S“ ˆbâûßÿ~äßMrÿþ}nBDÅQ‡Fežøì‡½ ÂT,Pœ¤Ù…¦ˆŸý7€bÄgVVVÂÿn‚øñ]¹rÅŒÇãàY�yÅÇÙ[[[áס™'>ûaO½ ñÙ…«W¯š§OŸ†ÿ®[üøìÛÇ�#>»pãÆ óòåËðßu‹ßíÛ·ùNPø8ÛÞ€¸wïžùöÛoÃÇêP{æaö(W|váÎ;~â©;ùf?€òh³=jL`ö(—6ûñüùóFä€Ú2³@¹’f?$ñÔ|˜ý�Ê•4ûÑ”ÀìPžy³Mɵì•Ù \óf?š|˜ý�Ê“6ûQw`ö(WÚìGÝ9@TºWf?€re™ýpC–« ³@¹²Ì~¸!ËU…Ù <Yg?ÜeëPÙ^™ý�Ê•uöà Y¶ Ì~�åYdöà Y¾lÌ~�åZdöà Y¾¥ï•Ù \‹Î~¸!딉Ù \‹Î~¸!딉Ù <™ýpCÖ«C©{eö(×Ef?ÜõÊÂìPž‹Î~¸!ë–Ù \ýpCÖ­Ci{•EDù±È쇲~Üã#¢øø»¿û»ð¿™ýpCÖ/ƒl› ˆrcÑÙ7du !ˆ–Ç¢³nÈ6Êà#AåÅ¢³nÈ6Êà#AåÄEf?ÜíÔ¡ô"@9¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_° ¤iI%k”ÙOËÜ6�r�°Ì¤iýz‘¨³Ÿ–¶×:_.ês¸³nz›Cs|>yäüäÐìúfum`ÆÁcÚrºssv¸kV{ï˜áñwÁc(Šô1-©d2ûi™ÛF5ôþ_a¿>{lvVWÌæðÏÞ^'}LëÛY£Ì~Zæ¶ç;5ãÑÐ úëfmpĵ“×ù‰9Ü¿eú«o™ÁøÛàAOeý3ë˜c¹HÿÒúõ"Q_?õ^Cðÿ Wç‹*Æ×fÔ_ _Ç$zÓ„v~dk½ØóiÑ3«ý[f¸hNÂŽtnNGÛ¦§.ïÆ›ÑÎo©Çà£u:2ýÞœç#bÝÝ>EHãH›jI%kÈ6ÊPæ¶£¾5ãÁ›áþ’®ËóñÀ¬ËL"Ö§ÎÆf4´o´Ó>ÕÛØ1ÃÃs~úG3|ðu°àwæäphv6Þ–[3ýÁÈŒÏþb ÿè ’|gއï˜^¤/]ÀùŸÍps¥üÁUbÿ§i ¹Nµ¾5deXlÛ¶_}<í«}³gû^ðlvî{jÒû]4gDþOÌhœÜ“›¡ |’Ê=WñœIR'¹fµ~½HÈvêPÚ^ë|Q…’7ℎ>ØÄºŽ÷Æ=~`îîlL’ãê¶F’œtt¥Ø8ûÒ 66gA¡Ñë@ö8×ã82°Jc™Ý×)ƒ0Iú˜–T²F™ý´Ìm«¼"âÀï_Þ bûÀ)ô]¶Ÿ½mú#÷º·}sè~¢#xÆ/LìL@ØÇƒ¸-<†GæÌ_h:xš×§ƒúu³søMðàâÂbjuמ¥vÊœéÿyyƒÇ÷̃ÓÒwÔÒÇ´¾5Êì§Ù·mûÕÇfGúÔù‰y¼ëõå…®úÞ7ó^msÁ'Á †5³=:N^7«Lï³PP>ÉF ;e|R†²ÎYÇHÿÒúõ"‘½Ÿ¯´½Öù¢ UX"¼Ëè=oãŸÈ bNâ'€[f/oyÞÞEÙö’lqEÈùñм½=g†BIÓ’JÖ(³Ÿ–¹í$á�Ý";ƒ"Á5[„ØëvÓöŸÄ»l¶Ïþ›Ùôûxr˜ýÛ>ü®Yÿõ¯ÍVJ_ÏîÓüzço@°+¦ÊPabgxÞþ73¢ÉLú˜Ö·³F™ý4ó¶Ï¿2£ýÏ£ýÕ_»ø5~±"d"Ì#¹¯û¬ï³‹**ŸdUeRÖ9ëé_Z¿^$2÷Ó”¶×:_T¡ /B¬ÉÔbtª8¡9›ýýqrµ.BÎÍÙÑžÙÈ”à3BüÙš7*H†ÒÇ´¤’5Êì§en;‰oÝ2w·×¼}¿a6_Æ ‘x\ßio®Þ�yï¡9•¾­Þ¡3°ÿ2Ù_oûBƒí°ÐÉÐç‹QUrjŽ›¦wÁ󲬤i};k”ÙO/¾í`Æ1Çl_ž"DÞSSóÂ\‹¼Ï.¨ |’]UEH‰ç¬ƒ¤iýz‘¸x?ͯ´½Öù¢ UJ"ëyç(\F/BÎ÷Í»{s’¨µP"|Ò>“˜txýK¨³ƒ™å‚dº½àX¿Ì&q±ËÚÏß~lOd@ç_ðÑ[«;æ`øûäY %&çZK*YC¶Q†2·$¼ÎÏÍÈ/D⩈!2ØÈü&|Ûmk¦¿÷8ác_Qçã=³éÏ̃«´Á‘Ê{?øè…ÜÈP~¿ûƒÙÙðŽïàss¸'}Í9Þ,Ëø”"$©_ÛÇÃíx9`c×89=?ylöú¶M&ÏO?’ ò¸ ¿=¾5'‡÷”/Ç¿“ã›;Ÿ˜q8Xµ_J¾ã=o¿7ó¹9¿gà-·ûpúÚÎŽÌ0<žu³sp×ì¦åÚ†‘ó¥õí¬!Û(Ã…¶m¯£áŽÙX{ÏŒÂ÷Ëý²¹×®þ' Þ¿`ß—†áÇß3£/\„ÈìhøxìÚöûIøqLí¸^3k[¿2ÿ{ŸÝÚywò¾Døž-Çá?ž>ÐÏ–Ol?ùOÿ#à¯õÿÓ…ýÀ}ÏͲŒ¥!vݤþé|·§·áõ­qx3(9,:6±ÛrÚÜ‹hÎɘìrÃí mí ú¾îމ짩ä<iýz‘íÔ¡´½Öù¢ II‘£ ?R„¤l[³ðLˆìß¹ÛÞùñ"rܱAHÒrÁkžƒÜa¶Ë:‰ËÿRí›a??yhví`B¶e·³þ¶M¶2y~Î÷a–˜\#ZRɲ2”¹í$‘ë<,ŽÝBÄ-Bä5v-§rß´lxÿ‹éI°}Á»¦Ã>žT¶ï­O×™ôáx~póˆ7êï™Çþ@BŽÙ.ÿ™7èO[F¶/BæõëÕé›»¼F¹“í?¿2ýˆœÿ…V÷ÇæC§m"Çã pì ÏdN¨ÎM _‹¬7ý‚±rÌv›Ó™2oùxwÓ¬§åÚ†™´Cwr@ø¾è‡;Ð^«›¿3£¯þÏŒ¶×'×Tðéðúó ÌýMóÓȵ£¯ÓiÁ¾'…Np턳2î €¿Î=®Óøû¬G¶?ó~mû÷Z–™ŸlùÄ=—½µ¾<¶ßusú‹·üÑQú2“mÆ‹äþiÏÕk9EòQð½•Ô< Ç>69?90Û«ëÓÜÞT°ûzm—Ä<0ÙßúÆž9òÏ»—_h6œ<Ûd“~B¢ªóE*eÀ 2 2Â1S„8oìÞÏŽ>6ۅ΄LÿOŽúqÇ!m¹à±è1Ä_Ó$q½YF’Yp,þk)è '}LK*Y£Ì~Z涓įó°éy…¬_ØÚk2o2¿ gïøíúoâQ³ß‘~ësÙ7ÏØç¤¥ÎÌâÄúT(èËþò2XŸ·ŒÝ¦ÒÿúuôWz‚7óׂíøÇúSg_ñýÛŒ½–™üêZÜíLÄ—›Yoæ1»ÿŸÎùƒv>¦õí¬Qf?½Ø¶í xdþ€r:Óá?£´kxíÄú°¾lŒô¡à8ÃXõä#¹{?Ùþô½m¶%íkòøl?Ÿ<î~¡Üöï¾y;ïL-”OÔ±öž›²Løow|"¯ÃyÝþ¶bËøE—WPÚí¤æÙfìµH;…müZVä˜=±å´v‰>¼.§m¹^µ~½HÈvêPÚ^ë|Q…š¹ø£´‹<mk²žwŽÂeâoìR¾"ûOëè–2Ñ– ‹Cü5É¿'×F4ä:w™íÁðÁœ;ÌËMΖT²ÄóçÏÃm”¡Ìm'‰_ç>¹Ûæû¾œcÍöÃÅEŠ‘™ïŠÌ»æç÷ÙésÊ6fñ„pû£ÜÁ·Œí³YŠm™$ÞùíO%pÁ"DÍ[V,'Å×ó‰<æÜíõg²†-øIÖYr hý;K<zô(ÜFrm[yŸÑÚUïIX6NÙG2{Í<0û;ÁG†¦×aÒ¾&+×kÐg"?‡¿þnäÚ×-˜OÆ‘ãͲŒ÷éEˆ¾Œ.)$œ³x;%´y<7Eobæ±pÅΘÜ2ðøl>iw­og‰—/_š>ú(ÜNJÛk/ªP)IJ»ÈÓ›Lçºwyâoì HìSö3¤oÏtÄ”Žî+² ïœã ÙïH²¯âï´ô1-¹¤Å½{÷Ìʊ׮%öÓ2·Ä^×3Eˆg2uï]³«[f§ÿÖôº—k9s¿Kúò¹LóÇr}ƒW§öƒ~•éÚ¶oîïê’Dä—½RŠÿ ?i&Ä]ÆnP+0ô~œï,ùœøz0à¼þEФ×å‰å-/«¹Ú[zò¹q÷ã7í!}LëãóÂ>nܸ®_V?Í·íàšp®+µ 3 ¢¨ïy³&ßcX©Gæ8v&íkò¸r½z&ÏÉG‡úwÜ¢ùdî¹ Ž+Ë2Þ‘S„¤åø~ñvJ8æx‰ß„ö˜}}îŸPhËß#‘þ¥õñ´øâ‹/ÌåË—Ãm\¼ŸæSÚ^ë|Q…JIRê=wà3Í޹酟C´âoì‹}Ÿ²EÏF¤Sgêè>e€¡-<M ñ×$)uàufNN”ûþgHùÕ-ô1-Á$…ýØÚÚ ×½té’yòäI°ÅbÉ>ªd¯k­±Â/›F®{ïÍÇÿbgÊýbê=ûGF½þ°½­³}JùUHö;;p™aû@âO×j_PO¬»}9Ë2Ú¿­„~­â'ýzöÜÛ]¨ñ$ >üü3ý˜ÇÌz MEdbm&écZ_O ;ûáÞ€¸~ýºyñâE°ÅbÉ>.Æ^#?MoCy?Šü’–\“)ýK}Ï‹™yo›í;I×Öäñx“>ÐÛü¹µå|Ç#Ñò‰Ú_äøƒþ›e™™O̼nÙÖL.õŽïä/Êwdây@¶;g3í4»ÞÄ$ÈkÑÚ%©­Ää}"©ÍšEú—ÖÏ“">ûac8[¬EHš”$¥^Ðê:±J;üâ–ÈS„HÇq¿€51ù¨È¦Y‹}ö9rÜg_šÑ¡÷&¤÷…ûÆ|6úÜKÊkr¾,ÜÜõ/~?î~l†Ÿ}3IbkÎ_Êõ—¯à¯C·ô1-ÑhŸý¸yó¦yõêU°µâÉ~ªd¯ë¤"Ä{6øõ•øŒ{c`ÇÜLÇÛ;wC³»s'¸a¼ùE>3î ¦ô§7‚}Éw"4ÁvÒwI&&¿ý•KnN‘Çl>g”×(ŸCϲŒ]LËeZ¿>òæöëÑ—f<Ú3Co™I¾‘"ÅæÂàÂÙAÄñç^þ9v¶ùWsöÙ›Cï¼ÍæW™qrá&8GÎÀGËËÑÇl;¾åüXð ]‘×Ù|ÒÇ´þøì‡½qÿþý`Kå}¥òû‚û+g“å®EnÔéíj¯e€‡×òÙçÞûÞ¯ü>m÷?S´ õúŽ – ÖáEµydì¿×½T+v¼ò>ë˜<?çøBÌ'ò˜óÇ‘'³Â¯M¿že™„ñÉl{ÈM‘à£Mþûûs4>0¿ŽÍßüåçåú9SÚIn*¹yorަ79µë%ú˜Íƒïšµð—À‚mľ×ÒTÒ¿´þ®E|öãÚµkæÙ³gÁÖêA’(l¯cÎÅ,"ò|ZØ$û‡Øg§ƒˆÈ²¸#þŒ»;XÚ·wpƒ…Dø¦Á›ùË …ëzðñ½lùÕÈÙ¤àm?rþœs&ñà9w@çÿ¥Ô§Î¯yƒšŒ?ƒºläÜjÉÆ*g?\²¿JÌôÇèÏ”}“¹k3×¾!>0ÃXÿ™-J‚cÙ™ÿgjeŸvð-¿%oØÉÇ"ƒé2^ÄB3¯)þÆß »¯?™—~NY1[ƒ½ÉÇмç¢?_)ygÎ228 ·m÷ÿÕÅúµÿëSÁsÞã{^Ññ¿ï¼…¿”|dÎD¯AöãEx~ìG¨Ͻ÷šúæ«Ø¶zýÿç Žšãð{!vÐäþ$i;ÈëÑú½UÎ~¸d©Â›SAͼoEÛµ·ºêµ—;p·7 ¦? koüéð–Y³?{Wû^aRßÑr†·mû# ~_Þ¾±}crÍ w®„Û˜9®øûìÌÆí8Ã;Æð êšù$x_ï…;É{Üžç's¥Ÿ'/ ¹9FóÂퟻÁù²áôÏ y ÓØÄσ6gËØÇm{ÈMجyÀ{ìÁ=óàøOÓŸëö+é¦P³ÈëÐú¼M›ýpQ„�-%}LK:UÏ~¸dŸ¨Ú´ÀHþHA–eÐtÒÇ´¾o£ŽÙ—ì lPæÏÁJ1o¦%Ë2h$é_Zß—hâ쇋"h)écZâ©köÃ%ûFÕ(B–…ô1-Ô5ûá’}C3û]ÍÂQ„tšô/­ÿ7yöÃE´”ô±xò©söÃ%ûGÕ(B–…ô1·ÿ×=ûá’c€ïLLÎKôÇiJ@Òir¹ýßFÓg?\!@KI“ÄÓ„Ù—ª¤}~;þ9÷,Ë  ¤ %4aöÃ%Ç1ý)ïr¿ƒ$7¤{ÿÎY¦eÐdÒnÒÿÛ2ûá¢ZJú˜M>M™ýpɱ�(‡ô±&Í~¸äx�Oú—´iöÃE´”ô±&Í~¸ä˜�”CúX“f?\rL�Š'ý«m³.Š ¥Ü¤c£ ³.9.�åpûÿ÷¿ÿýFÌ~¸È@yÜþo£-³.Š ¥ÜäÓľÖÔãºÂíÿMìkM=.  ܾßÖ~VÚQ·ù¤�ma?zÕÔ¾F�Ê÷ðáCr�°¤ìÌG›ûYiG-'… ˆj¢i´c$¢¼híø‚(/Úˆ"„ :M£#AåE“hÇGDyÑFí<jd"¦ü†ô¢Ñæ À¬<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�uã ê°< ÆIè–<9|�t ù�ukôtÿþ}3ýÿ– žX<´’%´mÑþÐú{ZhÛ!¢ý¡õ÷´Ð¶C´?ªÖÈ"äÅ‹æúõëþ ¹råŠyõêÕ̉"²‡–@²„¶-‚ ÚZO m;A´?´þžÚvˆöGÕW„ØÙK—.…'äöíÛ~‚ÅÉ9ÔH–õtCžœ@>�º…|°Üž={f®]»¶eíÙ˜+Èý°ag@ä£X¸9—Zɲ>€nÈ“È@·–×ÇÃþ+++µµg#® f?Ê!çóÓO?U“ȼøè£Âõtƒôé—/_ªý>)ž>}J>�:FúôEÆäƒö²cli¿«W¯Öšßk½‚˜ý(ד'OÂs»H’yÿý÷Ãõh ;äf}ãÉZˆØ7(¹SvóæÍ`K�ÚÎÞ�–÷ú‹Œl>á†q{Ø1·ûñ«7n„ïòXÕj+B˜ý(Ÿ=ŸrÁýä'?É”dì ã?ø¿Î|l @Ø)xɹ?ÿùÏS [€üó?ÿ³¿¼Í×ö3Ä�ºÁ#üÓ?ýÓÂc›OÐö†²;æ¾wï^¤]åñªU¾Gf?ªe“Ì;>ïyIÆùÍo~l@—ŒF#óúë¯ûý|ÞŒˆ;ò/ÿò/ @¹…ˆ¬c„ÿøÿ¶€¦‡a»ÙœþÅ_Ì´­<_µJ÷ÈìG=âI&-˜ºÍI f@€ncŒÐM¶]íÌ•´ÛÖÖVâM'Y¦j•ì‘ÙúÙ‹Ñ&iƒ¤°3€îËZˆP€�ÝgÇZÿc„v°yÛŽµ¥Ýì iŇ„,WµÒ÷Èì���P>÷“ýøÕ£GÔÂà Y¾j¥íÑÌ~����åŠâE~~W+:â!ëT­´=Ê "‚ ‚ ¢¼p¿×cD ëϰÛõªFBAAˆøÏïf Y·j¥!����Š'ãíË—/gþøU<ê³S„����-$ãíE>~ºÆì!���@ Éx[+.²F]cvŠ��� …d¼­Y£®1;E���ÐB2ÞÖŠ‹¬Qט"���h!okÅEÖ¨kÌN���´Œ·µâ"kÔ5f§€œÎOÍþ oV×f|<hÎÍÙá®Yí½c†Çß•äì±ÙY]1›Ã?{{]F§f|°k6zö}§gVû›Ã“’Ï9�4€Œ·µâ"kÔ5f§ìtdúþÀÎ7Í`ü­ÿôùx`Ö"ÏyÑû™ùå[?Œ> ;H¼e†û‡æÄ°ŸŽ¶MO]Þé¾SÿÙ 7WÌÚà¨Üùù‘¬õ&Ç×ù"ä[3¼k“øë®Úwæxø+³¶óØœÙs>šþêOMôuð<�t—äa­¸È²ªQ„�H5)6z z˜Æ œÇæãæîÎÆ¤àXÝ6Ãñi𜕰-ëìK3ØØÌ\„„Òê®9<+{„üµõW*Œm ÿhܳV½àõö¶ÍètÑìœî™ ¯—À/”W(:�,%okÅEÖ¨kÌN UqEˆøÎœŒÞ3«6ODŠ„9Eˆ¼Žn™½LEˆ$oš_ï¼ã;U P«+B·æííQ{‹;Cõö¿] xÑM®MŠ�ËIÆÛZq‘5ê³S„�HU|b}cwÖ½õÜí&mklö÷Çʾuá@=ø8Y¯_ö ½¢"ÄŸ z£‚דæ¢EÈ©9lšÞ…fP4ò1>Š�ËIÆÛZq‘5ê³S„�HUN"ÛõrE¸Œ¾­óã}óîž¶oÝFßì~ãý·:ÊÌÊù‰9ÜÿƒÙÙX3ýƒÏÍá^23ó=ïß{'ßWɲŒO)Büuo™þê[±óâ=nÇ+6vÍAø‘´ïÌÉáÇÞ:ÁwL¼s¾Úš±) É­þº~1b×¹gýõXûØÇ‡Þ±Ë:o˜O&ÛòšñèŽ÷¼ýÞÌçæ8ܯ·ÜîCçµi”"ällFwwÌFÏ;×Gÿ7}½ ³ûøÄ– “Ä9þéúöcz#ï5¬Ϲç×ç0x}Þqú3ho˜ÍÿÐlÍ|_I®Ñ9çQÌm}=öÇÂõÝ/»ËwO‚í¯î˜ƒáï3ÎÒ@q$ÿiÅEÖmT"@ª°X˜9Šp0*EH|ÛIÂÎ~¬O÷©Pî~^3ký=óØ`zÞá¶7ð´Ëæ šÓ–‘mÆ‹àßþºÎyñ¿,¿:äË9 >’fgp6{ëA|±ÝÝO°üt&ÄýB¿{<ÁÇÝVß3#ÿ˜A³¿¯¿EÖ[íÌÈ€Û/yÛ°)E[D¼q_¯W@ F“¿ÿz½"(^dÆfBü×½&ßòŽýñ‡^1c_ÏŸÌK÷87gF_ýŸm¯›Õà‹èÚLHúyœß“çß4ýá‘·ïŸ'Í®-æäuØå×ßöŠ­ üç³_ �Š2É»!u½ �Å+}&d¦q·å ">6Û™fBì zÛl»͑㈠|ívõò¸l¬Ï[Æn3øw䵯_K°¿È2Á€ûµÉvüóágüãd3EÈÄLûø¿–5û Qñå´vÕ›ý–ÖvñÇ‚GÖ³ÛZŸ{~“)¡±Ë'žÇ´v˜´ùk‘sÛ¿½5ï:;žsŽ� |2ÞÖŠ‹¬Qט"@ªùSmðéY¤ —IÚVÆï„È>ƒüx!‘T„¸Çð× ËØãÌR„hË$°ÚM>Jµh2ùwü˜=±6ÑÚu~[‹‹¹m6Y/ù˜’Ú0 žÇ´vcÖŽGŽAfüÇVûf0|ý¨�TDò“V\d ÙFÕ(B�¤š?0ÕŸžÔ"D¾¯ñ†ó÷-¶•‰¾kÖµc”;á›Cs>™R„ø夙ø`º "D¾§ Ûム̘̄ÇÖoDâ·MBX¸™{ÓÚaò|ü«ÂïÁxïwUü=�ˆ‘ñ¶V\dºÆì!�R_„ßYðrDocÏ…w‘¶•ÅÜŸ~Õ¾ ž4Xw©Y–ÑþmÅ_‹lË-ºÄ™99ù:a€¾h≯'üõ§ÓjD"ƒþH8û‹9±ß•Y¨Qö9iíp:y^-*ìóö["1Áw_2.�P okÅEÖ¨kÌN UqEˆý‚ôôö6> ¾ì-¶•jòËKÑÏñ»dàéîSs9IŠ£é—šÓ—±‹i¯Uy-þw5ìGì—·ïšáph†£/Íx´g†ão‚Á³ ~OÍø`׿ËÞë˜ãÏþÛ¾ü“³ŸoÌg£Ïý×;Û>òs÷—®‚sä ök+BüÿÕœÙ×tú7sv´7™Mðg.¼sÄÝÁ¾ùìÂEÈœóxüÿÍiï8Ã_"sž·q÷c3üÌks[Ô¬õÍÞ¡ýÕ/¿|�bd¼­Y£®1;E€dÁdéÏ“˜2'ƒÃØó½Ÿ™_¾õÃèc‘°?ûoÐ7öyhbZ$D– rH®ç‚-ø:Ûõ´òËK+fk°g¶ƒŸ[þTët›¸ÌÌ9²ûÿj2HsÐgcs 1Þ†xç"ü&oùÉOÂO¶þeywÉSßΞ·°òߣó3µÎ¯V)çÄпŠmköξv.½X}Ël„û±a‹‚?ÅÎÁ¤P8?9˜œÇð§{-[œ~âüœ°üb×_"ûë­®zÇ4çÚL?ž9íà›÷üéÍðÁÓé÷Bì¹üd3�TCòŸV\d ÙFÕ(B�,)í.z\–e��¨‡Œ·µâ"kÔ5f§°¤(B��í&ãm­¸ÈuÙ)B�,)Š�@»Éx[+.²F]cvŠ�K(øbu§"ßÙeY�€úÈ{”V\d ÙFÕ(B–´M‘æÓÚ-O =´öËh?­]óÚEkÃ<úHhÅEÖ¨«KÛc]/é¤mŠ 4ŸÖnyí µ]Þ@»imš7ÐZÛå ÔGÚ@+.²F]íXÚëzAH'm£]ˆ‹Ä_|A;·HíþòåKsãÆ Ú½eŠh{÷îÝ£í;¢¨kâÑ£G\-STÛ?}ú”¶o€"Ú³®v,mu½ ¤“¶Ñ.Ä,a¢}ôQ¸Ú¹ò¶»-:/_¾L»·PÞ¶þü¹ÙÚÚ¢í;$ï5¿!Á5ÑyÛÞ†{C‚¶¯WíYW;–¶Çº^ÒIÛhbZØ;ñ¨ 4Ÿ´•Ö®óB+:%ÐÒ^Zû¦…½Ó½²â~AŸ¶ïiG­ÍÓÂÞàšh/i/­mÓB»!aõ‘6ÐÚ+KØ6­«KÛc]/é¤m´‹q^ܹs'\ׯp8 ÿÍ'm¥µmRØ¢óêÕ«áº×®]3Ïž= ÿvöÒÚ8)âwº/]ºd>|þí&í¨µ}Rh7$îß¿þ7ÚAÚKkãy¿!qóæÍð¿Qi­ÍÒÂÎhI›Ú_µÒ®.ÌæZô‚µU²;½råŠÇ‘m¡ù¤­´6Ö"^tÞ¾};ØíÞ6Ò^Z;kÿèÝõë×Í‹/"ÛB»I;jí¯E|\nH¸ÛB;H{ií¬EÒ w[¨´ÖvIŸÑ²múäÉ“`‹Õ)íÊ‘†æ‘¶Ñ.Ìx¸U²>øÀ¼zõ*ØíÜ&ÒVZ;»ONnÑ)ä9´ƒ´—ÖÞñˆßé¶3ž.yí&í¨]ñÐfÁ]ò8ÚAÚKkëxÌ»!aÉ㨴Ö~Z¤ëªTÚ•#/Í#m£]œöÎG–*YžGóI[ií-ONvº]KNò<ÚAÚKks‰¤ÞÅÉóh7iGíZ˜7 î’çÑÒ^Z›»‘vCÂ’çPi­ ÝÈrƒ±j¥]9ò"Ñ<Ò6ÚEjCûÜgR•,Ë ù¤­´6צÛçMÍÊrhi/­ímÄéÆ~ôŽ>ßmÒŽÚõ`c‘»¥² ÚAÚKkwYoHX² ê#m µ¥D¼?ÏËñU*íÊ‘Šæ‘¶‰_¤Ú@Ô~épYÍ'mo÷xÑi§ÛÓ’“,‹vöŠ·½ö¹à´;c²,ÚMÚ1~Mdwɲhi¯xÛÛ˜÷]@,‡úHhíÙÄÙWiW޼`4´{¡¦}î3‰,æ“¶’6·ƒ÷ß?|<KÑ)d´ƒ´—Ûç™ñtÉòh7iG®‰å#íå¶ýE«²<ê#mà¶§ ­ lÂ쇫´+G^4šGÚF.Ô,ŸûL"ë ù¤­l›Ç‹N;Ýž¥è²ÚAÚ˶½6ã)¿t“…¬‡v“vLº&²Þ°d=´ƒ´—Œ>ýôÓ Ÿ–¬ƒúHH{Æ?N×´ÙWiW޼x4´Í"ŸûL"ë¢ù¤­Ò~é& Yí íuÑO—¬‹v“vÌ{CÂ’uÑÒ^Zñ¹èϴʺ¨´-@Ú0ûá*íÊ‘€æq/P‰‹^¨²>šÏmoöîÈ¢E§m Üv—¸HñiÉúh7÷ZàšXÒ^ñï.Z|Z²>ê#mЖÙWiWŽœ¢Ù‘÷BÕ¶I4?òÞѶI´#.2ãéÒ¶I´;¸&–;ùè]œ¶=¢Þhú쇋"d‰c‘Ï}&ѶK4;Џ;¢m—h~Ø7§¼´íí",Úv‰æGÞâÓÒ¶KÔE´gÕ˜CK 5ð¢Ñd™ví2­ý‰6°¶Ü©‚ÖŽ‹F›Ð磴ö\$º€kB§µ÷"ÑËú^ µ×¢ÑDmmÏndÒhÞ¢öÐÚoÑ@»hm¸h ´¶¼H {´v¾H ™´¶Z4PÎf¹Øä'Ï .Ôö¡½—m¾¼ò´½ Ú¿»¸6º-OûÒ¶Åãl&àB].´÷ò¡Í—Wž¶·Aûw×F·åi_Ú¶xœÍ\¨Ë…ö^>´ùòÊÓö6hÿîâÚè¶<íKÛ³™€ u¹ÐÞˇ6_^yÚÞíß]\Ý–§}iÛâq6p¡.Ú{ùÐæË+OÛÛ ý»‹k£Ûò´/m[<Îf.ÔåB{/Ú|yåi{´wqmt[žö¥m‹ÇÙLÀ…º\hïåC›/¯<moƒöï.®nËÓ¾´mñ8› ¸P— í½|hóå•§ímÐþÝŵÑmyÚ—¶-g3êr¡½—m¾¼ò´½ Ú¿»¸6º-OûÒ¶Åãl&àB].´÷ò¡Í—Wž¶·Aûw×F·åi_Ú¶xœÍ\¨Ë…ö^>´ùòÊÓö6hÿîâÚè¶<íKÛ³™€ u¹ÐÞˇ6_^yÚÞíß]\Ý–§}iÛâq6p¡.Ú{ùÐæË+OÛÛ ý»‹k£Ûò´/m[<Îf.ÔåB{/Ú|yåi{´wqmt[žö¥m‹ÇÙLÀ…º\hïåC›/¯<moƒöï.®nËÓ¾´mñ8› ¸P— í½|hóå•§ímÐþÝŵÑmyÚ—¶-g3êr¡½—m¾¼ò´½ Ú¿»¸6º-OûÒ¶Åãl&àB].´÷ò¡Í—Wž¶·Aûw×F·åi_Ú¶xœÍ\¨Ë…ö^>´ùòÊÓö6hÿîâÚè¶<íKÛ³™€ u¹ÐÞˇ6_^yÚÞíß]\Ý–§}iÛâq6p¡.Ú{ùÐæË+OÛÛ ý»‹k£Ûò´/m[<Îf.ÔåB{/Ú|yåi{´wqmt[žö¥m‹ÇÙLÀ…º\hïåC›/¯<moƒöï.®nËÓ¾´mñ{6_¼xa®_¿n†Ã¡ÿoiüªC»ÓBÛÑŽÐÚ3-´íí ­MÓBÛѾÐÚ6KhÛ"ºZ»g m[DóBk»´Ð¶ÓÕ¨J#‹û÷ï›K—.…'ãÕ«W‘“SehbZhÛ!ÚZ{¦…¶¢=¡µiZhÛ!ÚZÛf m[D·Bk÷,¡m‹h^hm—ÚvºUiT"³r®\¹bÆãqðlµä´ 1-d]´í½|hóå•§ímÐþÝŵÑmyÚ·‹mkÇØv¬-¯­êר˜³Ÿý¸}û¶?R9íBL YíqÑö~ùò%íÝRms´y»åiûçÏŸÓþ–çÚàý ùò´o—ÚÖŽ¯í8[^ÓÊÊŠ¹wï^寱ö³Ù¤Ù—ϧŸ~ª^ŒIa——uÑÒföMDkW-ì²W¯^¥½[JÚ>¾|¤ýÞÿ}µ“ÂöùË—/Óþ–çÚàý ù¤}ÍûOŸ>íLÛÆg?¶¶¶ü›+öuVýk=›M›ýp¹…ÑÁÁÁÌ©…]Nֱ룞={¶ÛÆÆ†999QÛ× û†ó‹_ü"\ïÉ“'ÁÖÐ7oÞ Û>¾\ì{´ãoû[µ­ãaó‚ôyû¾eo ¡{ÜkÃæíZˆ‡½6Üľ§ ™Ü¼ÿ_ÿõ_j{Æãþçü™»Žíûm•4ûá¾Vy®*µ!MýpÙÆºvíšyýõ×ýcL«šåî¨]Þ®×”b Ù<|øÐo¿Ÿüä'þ›É¼¹ãe—µëØuÑ>ôñåöÁ„}ÞÞ ¤ÏCȵñƒü uFÄÞ!·7¯¸6ÚAò¾´oZÞôè‘ùÑ~äç}[€´µÀœ7ûá†<_•Ê‹&Ï~ÄÙãú×ý×ðX³„]žÁI;íïï«m:/ì:h/úørûýﯶñ¼ Ï/‡ßüæ7jû'…½«üÉ'Ÿk£Élþþå/©¶cRüøÇ?6ÿû¿ÿl¡=ìkM›ýpC–«Je{jÃì‡Æ6 TÍiÁÝÑö“‘,Á¯n /·¬}ÞÞ<£Ï/wð6/Ú|‡|YÙ<î~4k^´5ïgýpC–­J%{jÓì‡ÆkÚñfYíå³Þ|¼[èãË>$\Ý–ÖvmÌûöx™ýpCÖ©J©{²ÛÆÙ��� M.2ûᆬW•Òöd wöƒ ‚ ‚ ˆrc‘Ù7dýª”º§¬Ÿ·#‚ ‚ "_,:ûá†l£*¥îÉ~.­ê���,okÅEÖ¨zÌ^úžª~A���À2‘ñ¶V\dªÇì!���@‹Éx[+.²FÕcvŠ��� Åd¼­Y£ê1;E���Ðb2ÞÖŠ‹¬Qõ˜"���h1okÅEÖ¨zÌN���´˜Œ·µâ"kT=f§€et~b÷o™þê[f0þ6x° ÎÍÙø³³ñÆäýeµoöO¼G`yÉx[+.²FÕcvŠ�éNG¦ß›ôåi¼^Ïdzy΋ÞÏÌ/ßúaô±HôÌjÿ–îš“pùµõW”ec±60ã™QgÒºÓã¬Gë[3¼™rî2N¨ç¾:çÇC³¹¶kϼƒ8;2ÃþšéõGæ4x�–‘äh­¸È²ªP„�ÈlRlôÌÚàH¹ó,ƒÖØ öüÈ Öz±Á«½›ýÀÜÝÙ0=›#V·Ípì #Õu,o½£=³±>g ,ëö¶Íè4i¡4î¸Î½ÚrÛ;ÿiÅPPD]ô¸Oÿh†¾þ‘×äX(:� JÆÛZq‘5ª³S„�Ȭ¸"D|gNFï™U›'Vƒ»ÛÖÜu¼èîô"¤æ;ö3w\U!ß™ãá¶ÙT„ç"�¢d¼­Y£ê1;E€ÌŠ/B¬oÌáκ·ž³Ý„uÎÇŸ˜ý¹fEHFe!Á¬UoÅô‹*B‚R„�@”Œ·µâ"kT=f§Y9Eˆl×˲ŒºŽ½«¾kö -B¾3'‡Ãé—œ¿÷†ÙØùÄŒý™`ðä°ÉöbÉÀ\öé=–8@^è¸ìÇÕFfÐ_ öµfú{ÍI|ÿN[„ç0<†¤mLö`÷qñ"äÔŒGw¼ó¶âíÿss|ø±é¯Ú×ï¿Ý‡Þ>¤�‘ã´á#gc3ô'3`ÞkXílO¾óž°ÇüÀ ísÞy::>0ÛÞv{›¿3·¶Üׄ.mÊþe{à El™Þ†Ù9›³àÙÉëLŸÙ=øîÉdûëÞºwÍîžÖ� “üDQõ Pw ›9ŠeP?wۚ̃ýà£`«ï™Q8�N¢áGüÇw½Árt¿“ãÞá??Þ7ïΘ.P„L¾|-ß“ñŽóñ‡Þ€Þ)þüAñúL1x~ò¥ùÌ-¶áýïÅŠY϶‡ðÌ(ØÇñðÈö´ódÎÿl†›ošþðÈ/ÎOš][ÚóòÒù„Õ·Íîè©9öÛ(he&Ä=¯08üÆþ+h/÷uNŽëµÍcÿÜH±,ëØçeÖ¤p9?1wíw•äuØå7ÍÆàËIÑâ?¿iÖcç�ê$ï“Zq‘5dU¡ÙdPYâLH¼‰¬sjŽ¿.n&äì±ÙYýéÌG…f^£¿½×ÌêÎãéó™Á°÷Ú÷vÍðxR�¨2!vп;®ÙÙˆÉq:çúìÐì ÇA»dÙF¾ci×Bü±É¿Ý"d²Ï×"³ErÁróΓV„Ø}¸Ç_Æÿwô5N ŸµÉþìó¯E_[töõÿÔ¬n8³H�Ð,2ÞÖŠ‹¬Qõ˜"@fÚÀsªìcÙåŠûNÈì�90³~ðºÂ®ý÷–Ùê¿ezò˜·ÎÞîg`­Èx\árAsnƒå&e;¿5-Ð2m£Ž"D®í¸‚õæ'¥ Ùx ÿ~´nz^æ¿ÆðÚÓÂ?g†Ì~¤m0 f~� 9$oiÅEÖmT…"@fÚÀsê¢Eˆ|1ý ³9üód»©ëÌ‘º®ýÈÎóï;ö£CÉEHd ë~ƒeÏ›Ýí}sü}lrÌß1»ñíÄe:®»føøÞt_s9çûè33x{oº]÷xÕQ„L¶¥bÞyÒŠûG÷úfuµoÃf||à,“öƒçc¯M'߃±EŽs­@Èx[+.²FÕcvŠ�™_„ßËðrDocÏÉ—‰Sìs¤­k¿“ðîÂïÌ ˆýõãÓ’Áóš?…?9Ok¿3ÃÁ­ôAlÖã ¾|ÞÛšãørg1'ή¥=V76Ìf¤M²l£Ž"Dýï(];3''gÞ"sÎÓL\sî±Å—‘Ïœ ¯è;ù‹9óŸ×ŠŠàùà_SÁw_2.�P okÅEÖ¨zÌN ³âŠû—é+ì…_¤ Øç‘uµAbä/lË©åìö{'›æ5eÀ:°{ùÌ9¦ÉùP MæãòÎü²”wh†AÜì›Ïœ"$,f ‰,ÛHh¯y‹àßg_šÑá ïµ~iþl‚ýhÓÝð¸†w?6ÃϾ™ž§…Š)jNÍø`×ݽþ9þì¿Íáé‹ð' ý¿Ðïïï9˜ßùß¡™´y/ò¼;ÞyûÜ+BìëËùe±`ù‹\›�PokÅEÖ¨zÌN ]0ø“þ<‰éàUã‘ç{?3¿|ë‡ÑÇ"a÷f8r*UÕÑe3 òÖ ÷Î|ì§Yýñ(öó®p›!Ñ›q‘ã²EÚ'ÎO»¿Bå Š#u@<oñcÒ K)Rd™ ìÌÏ¿G·þ¯¤H óÚìüØŒ¶íOÛº…žçllä¯åÛ°…’wœº×Qï§fuõÝ ðÑÎáä˜ÿ&¿®å¿>ûS¿Þ>í²‘¿Â?-N&ëÆÛyÞó_›Çæ8ü^ˆìgÎ�@Å$7jÅEÖmT…"���h1okÅEÖ¨zÌN���´˜Œ·µâ"kT=f§���ZLÆÛZq‘5ª³S„����-&ãm­¸ÈUÙ)B���€“ñ¶V\dªÇì!@ÇI,2�´“ÖŸó€úIÔŠ‹¬QuŸ¦:Nú`‘ ´þœ7�ÔOú£V\dªû4EÐqÒµ„“5¾øâ sùòeú3ÐrE䃗/_š÷ߟ|�4H}»ê>MtœôA-ád‰;wî„Û�ÐNÒ‡µ¾ž%â7$È@3äíÛ6ªîÓ!@ÇIÔμxúô©¹zõj¸þ•+WÂÿÐNÒ‡µ>ŸÚ �ê'ýQë»YÂíßU¡:Nú –t’âÞ½{fee%\÷öíÛæÕ«Wá¿´“ôa­ß'…vCâÙ³gá¿ÔOú£Ö‡çE¼_»v-Øbù(B€Ž“>¨%ŸxØÏzomm…ë\ºtÉ<yò$Øýh;éÃZÿ×"醄»-�õ“þ¨õ㤈Ïn‡Ã°W"è8éƒZrãÑ£G‘ÁÆÍ›7g’‘< ¤k9ÀçϟϽ!aÉs�ê'ýQëÏñÐf?ììfÕ(B€Ž“>¨%"ñ_º±ƒû÷ïkGÉ2�ÚIú°– $²Ü°äy�õ“þ¨õi7´ÙºP„�'}PKFñ_º±wC^¼x¬9K–ÐNÒ‡µ|`oHܸq#\ÆÞxøða°æ,Y@ý¤?j}Û†}¿oÂ쇋"è8éƒñ„t‘»!²,€v’>Ïñׯ_Ÿ{CÂ’eÔOúc¼oÛ› }ôQø¼:g?\!@ÇI”„”ôK7YÈ:�ÚIú°;H¹è�E–P?énßÖ>íP÷쇋"è8éƒ6!Íû¥›,d=�í$}Øæƒ¼_N•õ�ÔOú£íÛMžýpQ„�'}0í—n²õ´“ôa{CBþÛÆ¢7$,Y@ý¤?6}öÃEtœôA‰¤_ºÉB¶ Ü\`ÃÞÇÁ³‹‘m�¨ŸÛ¯mؾÝÄÙWeEAõFÚ/Ýd¡m— ˆvFž–¶M‚ ê,?,Ñ•ÜÂÐNAÕEQ IÛ6A틼7$„¶m‚ ꋤ¿óÕDÌ£vŒvA.�ºAëß‹€nÐú÷E( WSÇh cÑ�Ð Zÿ^4�tƒÖ¿/@Q¸š:F’„üFô"A‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢q5uLž$C‚º…|�@äÉ6È (WSÇäI2$ [È�Dž|`ƒœ€¢µêjzöìYð_H’'É`€n!�yò rÂò¨j¼ÝŠ«éÕ«WæöíÛa ÒCK i¡m‡ ˆö‡ÖßÓBÛAí­¿g m[D·£l/BÆã±¹råŠzrˆäÐHZhÛ!¢ý¡õ÷´Ð¶CDûCëïYBÛÑí([c‹möc8Ï"‰œ+-¤…¬  È�Dž|`ƒœÐMññöÊÊJemÝÈ«)>ûqíÚ5¾’‘œ3-Ì‹§OŸ†ë膋æä [¤OÛ÷{­ÏÏ ÆÝoomm™çÏŸWÖÖºš˜ýÈÇž?9oŸ~ú©šH´°\••/€jHŸ~ÿý÷Õ¾ŸvyòÐ-Ò§íûý"…ˆ]–1B·h³÷îÝ Û¼ª¶nÌÕÄìG~ö¢²çMÎáÁÁA$‘hñòåKóóŸÿÜ_þÒ¥Kœs C>øàƒ0ܸqCÍñøío®c×Ð öýݾÏÛ¾ý£ý(S!b—ù‡øÆÝ4ûá¶»<W¶Ú‹f?ŠeÏç/~ñ óúë¯ûçrÞŒˆM.—/_ö—ûû¿ÿ{ÿÂÐ-¶øÇüG¿Ÿ§ÍˆÈ ˆ]žè[DüøÇ?öÇi3"2b—µëP€´[Ú쇲LÙj-B˜ý(G|F$-ìÝ'OžkèwF$KP€�ÝåΈd f@Ú/Ë쇲\Ùj)B˜ý(Ÿ=Çׯ_œc-ì2$ û²" @÷Ù÷}wPšÜn·Ef?ÜåËVyÂì���PžEg?ÜuÊVYÂì���Pž‹Î~¸!ë–­²"D^AAAåÆ"³nÈúe£!‚ ‚ ˆÅ¢³nÈ6ÊVy��� x2ÞÖŠ‹¬QÕ˜"���è�okÅEÖ¨jÌN���t€Œ·µâ"kT5f§���:@ÆÛZq‘5ª³S„���� ãm­¸ÈUÙ)B���€ñ¶V\dªÆì!���@Èx[+.²FUcvŠ��� d¼­Y£ª1;E���Ð2ÞÖŠ‹¬QÕ˜"� øÆî¬›ÞæÐŸO9?94ûƒ¾Y]˜qð� 9d¼­Y£ª1;E�äöµõWÂ<7‰žY¬~~dk½ØóiÑ3«ý[f¸hNÂÿ¹9m›žº¼ošÁøÛ`¡£a+BÜ×@�$¹\+.²†l£l!�P¨' ÒÏdzæ'–ºÎ¹9?0ww6&Çê¶ŽOƒç¬oÍxð¦—S•bãìK3ØØTŠ@â1zû<Ú3ëó Œ ¡€F’ñ¶V\dªÆì!�P”Šñ9½gVmþ\Ý5‡g²Àœ"ÄŸ-¹eö.B,¯ÈؽC�-%ãm­¸ÈUÙ)B� (…!ÖäcQ‘w%!çc³¿?žn[“°¿óñ'f?©p Q„�@“Éx[+.²FUcvŠ�(J)Eˆ¬çåÐp½9?Þ7ïî9ÛÖ¨ûûÎw#³'ú—е"Ä~tldýµ ϯ™þÞcç{,�€ªÈx[+.²FUcvŠ�(Š ðƒ|§GŽ"¤·mF§v!)BR¶­I<F§ 9™~/x<¥9?šÍ5ùÎÊwæäñ‡f£—á8��…“œ®YâéÓ§á6ÊF�EI)(rÏ„Ì!îLˆýbùÇfûB3!§æhðëè÷HÔåâEˆý÷ºé¾öŸ– �PokFZܹs'\¿Š1;E�¥ì"$\¦‚ï„d)Bd™ ¿G#vl�€ÒIÖŠŒ¤°³W¯^ ×½víšyöìY°ÅòP„�@QJ)Bä‹éo˜ÍៃõŠ,R÷ÈR„øÛZ‰Í„��ê"ãm­ØÐ">û1ƒ-•"�ŠRx2ý‰ÞÞÆž9Êô½)Š,B‚»U=tös/�  2ÞÖ 7êšýpQ„�@Q +B¢¬°·ñ¡y|ò]ðœUS2óXðí—ØWûf0úwÑlÜì›Ï(B� R2ÞÖ ‰:g?\!�[0Cà$õÈ/UÉà=ò|Z¼a6vþ`†£±9ó÷aÙ?D¸=ù+êndú¸vŒ^Ó÷o±ûÜ_ÇòÃ+vß›}Ì/€lÁô‰ÙÙx#x¼gVû3Šü…w�@$GkÅGf?\!���@Èx;^€4eöÃE���t€Œ·¥øhÚ쇋"���è�o7uöÃE���t€Œ·›:ûá¢���:@ÆÛM›ýpQ„����à MwW^„AAQ~4EAAAt0š¬ÙG���`!!����C��� R!����*E��� R!����*E��� R!����*E��� R!����*E��� R!����*E��� R!����*E��� R!����*E��� R!����*dÌÿ—S\ÈÚá]����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5a.png��������������������������������������������0000664�0000000�0000000�00000154214�15030617045�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ñ��Ç���Q���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��Ø!IDATx^ìý¿kM÷ÿûߨZ­;w©T©q“&MŠ-Ô¸HH± Ââ‚ ‚@ `X0Ì‚á&pa ó/Bpóy‡ Ô„›`ÄMFœïœù±š]ý°&±äç–Ä«Õþ8;sæ9gÎŒ������°S@Ä�����°c@Ä�����°c@Ä�����°c@Ä�����°c@Ä�����°c@Ä�����°c@Ä�����°c@Äß‘ƒ˜�����üZ* ”E)6lذaÆ 6lØî×fã #»z`+�����ŸÞ„ˆ¿#°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ùõ"~>¥áå%íHžSmµ“3ºNi®[0§ÙøOJãC}l‡’|D³Úý›3Ÿ èòﻜA±®­n‡)µ [˜­EqþU!˜¡]~¦[ýçÃ冯ƒ÷Ö{? (NéârHÓù7úßÁ?Al´­²á#ä¹���°Ÿ°r 'âgŸ)“â‹E{NãKvã¹õ‡gŸËBüf@I$ÄZ+¥áלbþnzM³ºýúkk#DrÞ}Léð׋xÉ|DYGwl¢ nìîÌOšäÏè0>h?Ÿ~¢~Q~ÞÑpúS"„ýUŸbQZ!l´Å²Q!ä¹���°·ü:/ÅŠŽžv2;!÷ù8£&„|7ÿRDä‹(5‹uKÕí߈ù„½Ž¸vû÷‰xÑý¦meŸÒ3ý¤éà%µÅþ uW°;€½+šV†lDgpاãmÛhËe£DÈs���`¯ùE"^ ,¢,Â:Ù¨év$ZŠü[šæ'êïb;¡|ú£f¿n³å ‹"g¿Dˆáá;ñ·"¹•ï¸ß[>ÇúøDü óž¶›Ùi6óé5›{o'tnÒ‘n‡”¶Ìñ't1ü¨#Øœzò†®§ßh”u)’Ÿ{F?îj$BÝïÊÆ?ô~;†Ón2J:mj?âwÞ¡$èÑAÉFO)Íű¦l˜NÂ’²QgÿRzÔÓ”òóD¿ÃõõŽjÏýÓ™Òû㜦ü����� k—�"þ³'Z”ÔE¿R·ô1 ¡¶z$^_ä¢ÌÆt•¾¦K)¸L'B§ÜèQ¨›ÓD©.-èîc$~±¿‰Ÿ]SÊB¯Ý§á쇹Ñ3Ê'*Åd!$µH·GBxk¿¤«Á=úq·NKx¬²á”?V§Q àù$§n$:1æ lÉÑ“¢e—ƒº²Ñhë]Ê}?èfÐSûþ}çÖÙ(ˆn§šýIiú"����%Xg¸ñ–¨©ÊþcÖñ,ZûŸÊéE”ßœ×\KwvNÄ/:EfŸ²‡5Ê1åyüLF [ç~À£Å1Ûyî`ØQó•D|Õ>‹Ž€§ƒhlT\ÇšTì-ËìoÙZw"*×bDüASÿÚ7Ñ����à—‰ø…詌v$~!tªb]áÛ?Ÿ^QϤ!´{”oÔ¶,mG” ¾ùÅÔàs¯Ï:"Þ:ÖÙTWÐ â‹ó슈oœôëÃg3S¾}s¿ÌþÖçëŠxk„Jû2À����°Îp â…+&®®š¯v¯#â%2&ÖùÓÇB}_¬pcD»ËΉøo4HŽä¾B´»ì“ˆ§ïâÞå½7çÄ|6Û¦ˆ_fÿ»ˆxF§Ñ˜e4eÊ„<����°Fp "â›W§±r˜ðÖ¬-â%â|£óÅ’ƒE¡¦±s"ÞÙð¬ô#Ù+/Þ¨Îi—Ñ隥DçÓt>˜ðÿŠôBdWRª<Âze¿Ìþwñ†=ùþ¿����üZXg¸„ñÌÚëÄ/ÄX9·ÿ–¦—¯)½«ïˉ‡Gz¹Jku“¨KÙˆe¯V3P+ÔbŠ#õš|üDÿö ãÙÈVµ)# AÈ‚ôûä/úøï–¨]Øl>Ò¿*+¤˜Èu5z¼Ù‘(Þ×õÙ1“Ïœþi¥™¨•hzÉ;™}¥‰§bŸ±l[/â­Î^MÙh¶“ˆ·F¼çþJ—麒©`ºskMX����`|z3œˆ—TqS‰²÷409ì’u—˜û?þ/&æÄ9K\ËË5Fq_ %ƈ…Èß>ÿ:,ž½-¢Á‹9ZF)ð쥣xÑ)Ä¡ÞZPþÞ¶™8÷{ñJÇøF4î!³1 .R-æõÖN(“¿ØªÑ,–€<¤§ñcщ³¢ø®âŒr#¼åf"æue£Þþå÷é±µöþsOèãàšû1Á����UXS¸ñûl�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€¬%â±aÆ 6lذaÃv?6—ZV¶�����!ˆ�l�����B�Ø �����„">�°�����ÉZ"6lذaÆ 6l÷cs©ñ`5`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€ñóé'êLJò»Qü†®§?õ'ûÍz¶šÑ0mËïø·Êÿï)v÷Mo‰¦¹³¿Mép¦Ï ��`¿øIÓëŒÒóÏ¢å�•ÛaJ-Óîw2Ïõ[f>þ:Í¿P Óƒ-ÀeÀe;"~vMiûˆâŒÍw!T)êæ4y�¥am[ æãŒ:-Šó¯zÃv;QÂ|>¢¬y*ì7$GA+òýaN³qNI[ØAØx;Ãç=j³3<8¤¸ÿ‰¦;ΧCºÌ}\Díä k®]ÛJi(úZ~Dc<üeIG>ËÁA‡’ókïµW½Gfµk�ve§ÔËG¢MýJyÜÒ¾Ãlu²‘\%‘Wlüùÿ<ß3ûµ3Êãj¡0ªÙ¢ nîkCt+ãDܧÛÎî(7J¢j¥Cñd`ÝÑ}MÃÙ}}§€ëËDü\”¯Ev…–Á7õ÷³ž­4ÒI69í´ãœ¦zBGò+û÷Ñ1ì ñ<Òe>½¢^|#:÷”ÈŽ&#„õàŠÓër#Æe·Sze7nL»Ôr;¥ó N{”^| á×O”Õ iU?ZqŸ®Æ7j×ì3eq›º•¨ÇŠ÷¸òµ�;×ïÞ3ü qöD´7¢c_Ú¯¹RÚÂºÝ£Üø‰ùžÝs€ä#]¤1E¢ýŠâóÂϘ@’O¨Ï§tÝ©• „wáÑ«ôCÀeåäAè¶]%ˆ×Ña[XJÐ*"ûÌVDüü åÏÞXBì¡‹xŸ3áÈJ²¹ƒá2y|ê4HÂÎÝ—Ë£I²<?¥lüCïpàtM!-GcÜ•Mîqƒk�î+u#ÙZŒ×E¿k#µº}>xâñ_êZ2*ï L§ ¦­¹¾¥Sˆ½_Ä’w¿5tÀ ³{K ¯gÙyøöí'›‹xkX’·RJ„ñî1fÛ{ï®<l|è:˜Ùˆò"M…·CŠÓ?iìF–„Í»çÄ¢'+t ø}Ä[ñ² ¸"~“{„ˆ`OøI“üE>Ám"ãÞTʆH­ãu)˜¦-r¢Jù\¤ìH8m6¹lh{Ì}°Öß-üó¡y´Ò$£g”OÊiŠóé5kÎ)”écñÛüý•šè¦Zš4ýYÅŸÞÐxišœÚØLÏX`ŸGÛu>¥á¹N³l÷£ÂæKÏcF@ôœ6ÝÉ’ç“ïb‘6YtØ*¶Òïþåö)–çát¨ÜiçÊ#,‹cþŸ¥'ô\ºâZúþ425 é™÷~‡.ñwd=[i¤ã´"ñœ^q‚H|A0e»•žý; û§Vê £œtÏJÅaØ9UÊ#;êçKr&•³í4ÍñXWHKú¤’N³Ñ=BİÌ'¢/ZUxŠÏ|¢º@GÛ=‘Zõ½†\j#òKBÙPkŸLñ9^it]]S|wx-ÄvJNùÓQýÉä’z§WôõšóøË™2ÙniáùCwhÄ÷ Q)Dêè\ŠØB¸ËûZzÓYñwBŒØ6é’ú9ë:8‚âYÆBÀ§Ï(É?‹ö€Å½¶h»ÏÓwt•uÅ>{± Ïü5)Æ9Cá/ú';¥ÓÁˆ®åBBHOþMyoa«R0-žK%çH¨Ϩô|œzùRt Ì<*Ó¡2÷¤ÿæ22ù?qÏ™ê ÙÙÖ𳕅=¸?ñª°– t ug¿ØŠˆ¯�Ÿ¶<ŽÄñì`= žrX¯¨g52ÂP±[“@Öï@¼ß¥“jWÒ…3öOX]ÿñ�ì&µÅ—÷lÄ•ªu[EŒ1ÞKíñ ßWÞVYMßkô”’䔲‘ðÎÚïE/ÞPÖO£™œòy¬óÉÅ1¢r‘ùžññ&"]ŠxÛØÏèé„ûF]uOŒÖ)•T¢}žÖKºxŸÐ‰ º˜sëöiö…ÆÓ›êõô½VŸðýI¢ç=i;GÏé,{Cç–­.#Æû4m‰l/DçfØWÞšOUÕÑ:íÅ]ôßÕÌ-sž Ü;¸ºlAÄëÂbETïõXTÐïòï}f=[id„ˆ¯e%oÝú7;ú´‘@fx5O©ÛõLþ2¬)¤yU™<}F]g‚D<�“náÍ{®´Û"¯43"Ñ÷=…j«ëê{) PÙw¾Ž}¯…è\Üß#ñýK)¾Ýçñ§©{³ÚIÓá(uVÌõ,_I=2"wÝÀ¢>÷£6uNtç¢rnÿ>uïvÇÂj¯LôÛ¼óG©w©RÔ1ö÷jÞ½-öyN]÷Њª› Køé<MºÌØ"þ¾ÂºÆe "^`/1©‡·°Äd=ª‚78Ÿ£èJVÙ¿opãó¼âHXä.râ•Ã;¬&v)u� «æÄs#óœŽëÞ×&BZ:Þn©ÑÚè!âØyd^´%%ál0¬â˜†h{ã÷ó]ûº>!ÉŸœþ«æ<Fh¢Sž Qocî˵.îÃŽnk±ZDÓ=yåL¥R#„—Q<‹ù×ç¶D¦#´ØgFUìN‰±Ã®æ/Ä·9ÆѶQçZè‰èfü‘r¹<ry´·(_MºÌ”—½×»K8/ ÕbMoQYÖÕÞ7Ö³•©¤¢¢˜ÍD¢{Ø‹ct…®ì_ehsWáÆÅ]ƳNÇÎék€¡»ò‹oŸvš§Ûñ²a9)‹øMî"€Ç—b0‚­&è£E^U .ùž@å ówíôÓF•£â«R P÷·¸†{ŒúÛyöšç²TRnœßž­ÔIJÀU»ô¹Ö§æ>i,žsWö-òöKm{åLÊšÄê¹OuÝ)1©IÚ턲üƒ£¿ÌµšßicGÜ ø»lIÄ?\`«@xÖ‰?u&«šaØÒìÌlLWi×Ý<¤ê®ÁžZ3ìO©“œÑå3 ™_õ)nÙ C£f‡ûT\ç_ Ç*ï/®®=¿Ò=:@İãïYZ°Õmj£§æ{5ÂMþV‹agu#$7Z¡Äó:ø´†® 4"Ø~>“^ã”Òwöô`ù0ÏmE³MD½b#áÛ?þ]ócz¾w¢ï½Ô±°µØ'Û­„^p~¿}ïÒv‡ªšêTé�¶±ïÛ•ÿ®Ä¿¹O·|pgâõÎù\úZc·‡‘½«@Ä�¶ …pB+ýb«ºÃwÖ’a|lJ¾_"d§½ô×Pù|9¥V´'r; íõ1öfµJt^½ZŒ7qmß2˜’Uîqk�î9Fˆ¹¹È,ÄtT׉H+ë¼—£íÖ÷Jbœ}ÛÊ/´/ªü0Tƒx^ -­Õdª‘ksÌKÊÿ<£LFÖo¹ŒcŸúgô"Ïuö/ÊÏ?é{1"Úþ1>‡B°ŸÑðÑ.ô9ŠnªYÝEÀ~J¯¯M°ÆE§$|~EÙ[•ßo:=œÄ£ä- 'W¢cÅïä]gg4˜þ¨vT*)?‹ÎÌ«<§~6\Üwq: ÙXÅ7¥øçvÊÌÛÒmˆy¿ž  æ~Hô®Âm¼ Dü­���lŽp%Áíë¨/Äp‘Omoòûõ|µq�á(wƒFüÚÇz; èsT¢î¥óèûB¼o´½Ld;¡óá”nµ0=h¿"ØoLq2`si¥Ó˜‘ [°3źèü§üf4¨f,´8/ _#ØíÎÉÓ·3FT/ŽÓ)J•¨»Ý¹19;pÃ,wMü”òb”Ø`~ÄÆœ‹:HäëH¹˜÷Ô0Ú îü~] âïl��àN°øl­)šR„Ÿ,R8b™ëIœˆ ßõûH£Ù â�[��¸œ:áLt6äÍÓ÷b€•‘s#žÔüj-¸o@Ä�¶��p7æ4¾¦n)·(LM‡’ókkŽ™¿Ô.刃á4¦Sýƒ\`'€ˆ�l��àÎp~õéÿ4¬ ò€‘é3g¥ Tn»½’X™Ùg:O³æ_"÷ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„d%ÏaÆ 6lذaÆí~m6Þ0²{¨¶�����!ñéMˆø;[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����’_#âg×”¶)οêûÍz¶º¥i~"¿SÝ"j'gt9œÒ|ÇÆ9M}û[) oå—î=óé.³„ÚËîy6¢<é¨ç‹bê_»lÊ óµ¥ÍDYî¢éÝN����°1¬q\¶+âç_(ïŠï· â˜3ê”lô“¦Ãw”´#%³Ï4ÓŸ¬lDlT±7J"ÏþûÊ|BƒÓ¥høõ¥GM"þ; û/)ݨ?ù»½g”¿«¿×fN³á[J » {þ 8½.ìLô•ò¸%ß½½µÒ¡è6����lŸÞÜ¢ˆÿI“<¡“ô%=…ˆofšS쳑Å`qþ„²ñµoÇÞ)míè;á{oñÜq9N¤%¼BØ¡ëî[•ùˆ²ãSÜØÝ!Ú»/}ÌŒ†éñƒ)ë����ø=ñ½|­¢•uBrOÙªˆv¼ô(²£éÛ8voE<§ %” ¾é¿5üÞGt¯€·ÀbýIõ:ñ����øñóé&ïh4¢ "~9 6R)1!¹ö±åŶ"žEtLép‘è¢àt—ç”O×On¹¦tTI‹áÎÂsý â���Ör.wñœ’P>ù©þ†ˆ_NPï9vo#ñu"ún"¾%'Û@Ä���à÷DÄKÑ#ŽçïT¶ŠÚ?ø9צV˜#¦D<����8>½yg_¡!r¼lUěɪѳå#ë»·"¾F\ówîWD<‹õÕsâý)9�����›€Ml¥Ò`lÙËFv¨7˜¨Èº`ýc=KIîÚ“6"^=³»:oßÊøV§ñ®XÃ@Ä��� <ñXÏV9®û§CŠÓ÷4éyÇc÷àÇž$KD¼wøÓÓÅßkã['>µþ¶ˆ���@xXùl_Ä?0`«øL‰7ï*ýò_l­¿?³á‡Ÿ����°-X[¸@Äߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„$¬ˆŸip‘Rµ)ÎôNÃOš^¿ŸˆsRÜÿDÓ¹þhÇYÏV·4ÍOäwª[DíäŒ.‡SR¦YçX�����°¯°þsÙ’ˆŸÑ0mkéŠø9͆}jG]ÊF7âÐkJÛGÔÍ¿ì…�]ßVÂ"ãŒ:-Šó¯zèä ßQÒŽÄùD''û,,ªXçX�À*púeI‡ZéPt—2+Úb>¥áå™ö;ÂÏ·:÷„¿çÅqQü†®§?õg�€ýDë¼’VÛÆ§7·$â·Ã”ZÿÉEÉ€„„ÌéfУ(êÑàf÷eüF¶šæû »ìàpã÷„²ñµoc÷‚ºÑaIÿ¤ñÌ*3Ò6îqö¦ËâíÒ–ïs³P>eùâ¹vS9ea“óè“9¾CÉùå¯bÏhÔ2¾R·Ê×v¶…Èj86Îi*YÃŽˆùôŠN“>]\éëuJGXįn öá«Üˆ{tNqëåG  ¿ÔOÞÑH—/¾F/~MÃZÞ�xÌ¿PÞ}Dív"> ܆»„ñ7J¢²UÑåýŸÙªN˜›ÎADl$þ¬sìÁe©,*TO¿ŸAÁ‚ö¹á6<:¤Å4‹ø£”†ò%nË‚Øý¾¶mç5ågOýöOhÐ{⌄˜(dgÏð½=÷:Áª=4\>ZæÙª¬nLJG­M ëÛâ3·nð¾Jßôß —éÄÙ�Ø~Ò$&ÚË·4¸ð·_`;ü/Eè ûv”íŠx!±dç`1r±Î±{„_T°Hè:©X!D<GIrË6îd4.é]-„·n÷_!âŸë ×ýe}[pY}æˆxQ—º/+#W|îÃ=ôQ��Ì x,ÚÚoµíØñ€ˆC¨Ï\¤Œ0¶·„»Íº"^Ž™‘"ô'Ψ_çI€èbYį$¬6ñ>;><V²ïa=[è§Ž¨7v:M©žYp}àe €ýä»h µ©Bíð{D¼DG%Á£ŽC:Mµ°#ÆP+**BE¸¾¬sèŠxe×VÑ1â¿OéØ8ÆÇ:¡êÞÏbçÁ×°¡ˆ¯ÚñᱞpÝoV³…U>£˜ú×ÎÄV.S-3¿Ä"€½Dƒ"37">4ì{]‹x9ááЊóPþ:h÷÷b²ÓF¶ªæf²jQ)ë»G¬'â—DâK,ñy?.GÙ¹#zl§Ô¸"¾*¾„u=e'¸’°‚ˆß˜Õ„ëÃ`=[ðŠ69¥ÝçjÅ1D<�©íÚVZ&D|h|z3¼ˆ¯×^bR®V€%&©~ÙÈõ“Â6ë»OÔŠŠŠ ð¤Ã4Ò,╽-1^löÈQSga•ŽD8ÁME<„ÕšÂu¿ÙÄóINÝJç¶ZùÜȉ`Ïv_[¹Â2ض­Ë–D¼‰t#Ç74Î{Ô–Ÿñ2|×ø±§ÊÆKÿ½§ÁØ4uë»øEÏ‚îImÙ–ˆW£DÕ9nJú»“^ Éî² "ÞgLJDü‚lQ¡ò­NãÛ�Ø?6h¿ÀZ°þsÙ’ˆ¸ÀVa¨ŠŠŸòW»ÝU—˜¬£AÄÏG”uù –Ž•&—˜â$•…¼bä™ú÷UÄ×ÙñῠѲì'”]uð…'¶þIil¥k<ëÄŸZ�öˆøÐ@Ä�¶Ú6Jd³]ËÛŠ?öT+h9Bn~UØÚLJ‰;4X¤š¸÷cåüò='z„ImQœRîý%ËepgÄý§ºIº¾cõV{ßf{Ø?öä-3r[6!zYÃóéò4¦ÈÅ”^=#Qzå™îÇõ¿Ø À¾ÃA€Vá?N ¶­ Dü­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø ø©›XêÙV—����`½àG`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€„ñó) Ïj‹ïDÔNÞÑpúSÈ_ÓyÒ‘ç=8èPr~MÓ¹þpÇYÏV·4ÍO´ÜívF—Ã))Ó¬s,�`u~Òtø/Ê„Oj¥CQÓ2+Ú‚}üå%íHù vBçþgN³a_´ -Šó¯z�`·øNÃôXÔùʧ~ï0Ÿé2ú¯•Òða;Óà°ïuÙ‚ˆŸÓÍàêö? a.÷èœâ耢nNéá¿Ñ ÷œú×ìðoh”u):8¤nþe/èz¶RÌÇuJ7¤ïtyHqö™fú“uŽÝê:/âYÓ?i<³JÍ4§¸rœ½µ) ëÜ)mù>7›qPžkG=ÜÔ”T6y*Ë»:ž;¨W”¿ŠÕu×â+åq«|mgS"k û€ óé&}º¸Ò×딎°ˆ_݇ ‘¿(_ÚÏ·žQ>YkJÌ¿PÞ}Dív"€e>É©Ûõø‘¨ë®ˆŸOhpÚ£ôâ ¿~¢ô">4ÜÖ»lAÄ ßOãB;ü qöDœC £›Ô?-û|DYGÐ8§©ÞµË¬g+ŸžÕìšR)ΟP6þ¡ö­sìq;tE…Šìuâs•„*‹ßçž(ÁŒ†©Ó,â £Dð"êèû>wL{u^S~ö”:™U~ ìÀzOœN”¸Çq.:X D<Ã÷öÜ+z\{¬nPGÕ†—õmÁ~¾¦nÐOšäÏDýyKƒ y�ÜsdGüHÔñtámc-Jm,E ï¢#…Ìö6,škœÿî±U/,"ÅãA´°Ï:Çî~QÁ¡ëŒâ„ñy|$ízË#!•²¬s2 ½g;ÜEÄ3>û€: â¬o .«Ïü¾G‹º÷­¶<�î3ªk·û4œ 1/øE"^ ½Ö ‰›%Mð;ÆvE¼¨:2}æ€"#×9v¨ò™K£8¶·„»Íº"žËhdF8¸<Ÿ8£|'” ¾é¿·EYÄ7 «Õíꀈ_°ž-ôˆSGÔ›ŠW9´Ê'ÕwJ�÷Ù¤Û¸º@™Dü/áˆx¡,òá]ØÁ?Ý«H!D|jEEÅY°ƒ±sÉu|-®ˆwQ#­Â¦ü÷)—"Ž|Íã SfšP÷¶x“_euû€: â¬f «|F±žçTFú¤Èi âØ=TJôb^#Dü}}¯ËvE<÷Þâ×4ôæä²ÀMqzmåï>Ùj™uŽÝ#ÖñK"ñ%–‰x޼—£ì™?¶Sj\_ßÍÔ/‹ž&aw â¬g ž\ŸSÚ}NÙÈ ÈÚ¶¤ˆ`×P“Yíl ˆøû‚OonOÄÏ>S–¤4°––\ üè%§W{³´¤a#[Õ s3Yµˆd Ö9v¨lÚtšUhñft£ãÅfO nê,¬Ò‘¨cuѳº}@ñ 6±…lìíÎ-7ä5«@Õwš�÷ ö-On冈ÿ%ð{pÙŽˆç•:úo-¯D{O¯J3Ÿ¨ßXž—š|Eç{°ªÊÚ¶(¡h s{ÙÈõ“"²¾Î±û„_TðªÏ=©-Ûñz±’žä¦Ô¨¿;ÞQ¥ß)â}öu@Ä/ØÈ•*DâØ}‰¿/„ñåwÊG.ÿ[¬_ù¼võšÝ‚Ÿeu”€¬ØBn¼Î÷{Œ|\çØý£**Dçåú u»«.1YGƒˆ—ËŸšÉ<,X:<S__[.1yBI>* y™RÀ+süj_gPDü‚F[ȲŸPv9ÔžØú'¥±:ã"€Ý"þ¾ÀúÏåî"þ[m›ºÎËŠ?öT›‹ÎòvùXÞLꉛ P¤¤¸÷cýr]é—ŠÕÅ)åý’.;J÷Çž|×kØTñ•¹-›½‡¬a þUÆ<)2ÇD1¥WcÏH”‚;ö<Òi�Ø5Ü6Óõ ¾6Km¨ïa`Ûº@Äߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­€Ÿº ¨žm£†���ÀCõ‚ Dü­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„$œˆŸOéºS$¾wpQ;Éi<›ëmæ4ö©}pBùôVïÛmÖ³Õ-MóùêÆv;£ËáTXiÝc�«ó“¦ÃQ–t¨•EM{Ȭ`‹iN±×T¾s;L©U9nü=�»ÉWÊã–S/õÖJiXS=çÓ!å©¥íÒkšéÏÂ\¿¡8Òçj÷(ßèÏÀ¶a»lAÄÿ¤Iþõò‘x¹B¤ÎÅ ¨“*s>É©+_öCñŠù8£ÎA‹âü«Þà é;JÚ‘8ß!ÅÙ碢¬sì~P×yÏšþYî6ˆ µµ) ëÜ)mù>7›)žkG=ÜÔt•Dçu˜§ vСäüŠòW±ºî:xŸEß¿sœQŽƒ–NyFô½ØWÙì2õp˜O¯è4éÓÅå¾^§tô€Eüʶà2Wièçt38¥cÇϳˆÈ6à~ÂmÄqµ=¹PrœÑ¸ÒÄi-×I(Œk4† Êvâs™vyö™²nBùä§úln»]¶ âæ#Ê:­ªˆŸ¡üä9¥¯žŠó?l¯„˜GDÍ®)•âü eãjß:ÇîU1àqvNÏ=å‰E¬Ó,âŒQB}Aô}ŸJ¢ÎkÊÏžz;¤¢GJƒÞ§%îqœ‹Vg}oŽ%õ£ô<\V✦òëù™’c<"Þ‚sÁú¶øFƒä¤â{`S�vG\Âú"~MCoF…Áic$ܶ<ó·™à΄ñ³1]‰—Úª­ïâe ?ü&D|0—•JˆÇk$cc÷¿øAã¬KÝü‹õ¼!D< ”GÒ®·<Òq#ºC‘ hë‡ñ¿ ÎkÛ‚#x­ê(l À®ÀíÜ1%ƒoúo·³'žý.>ßÐ1�w&¬ˆ—b“‡éÝœøŸ4¤”Ȉ¥PñuÂ\T™>s@‘ˆë»GÔ‰ùÌ…Pelîs*‚uE< ”ÈŒpø"Ž|'+8¹ €ˆÿe@p.XÏ*€Ðòø>O9'žSÌ®iŠ€ûEMG\µy åãdPVæÃG¢-¹ª¦ÕÌ'—Ô;½ZÔoθè½]Á›VÄKnh|Õ—9ÂQ7§‰xœr¢þ¯ÄD¼TñÔŠŠŠ€enOØñä‘—pE¼‹+P|‘¾¦'¿plMÄ;”D<` â¬g‹U#u¹èÁ3:)ž�~7¬Ž}ÚA¦DwD[ò˜âþ'%Ðe=>¥þð»:¦à†FÙsyl$Ú^þ·<R¶É/ñ ;ø'+L®ó Ó]ƒŸemj…¹'Efc÷ˆõDü’H|‰e"Þ3ÄX™üãŠxÓ9µÊ÷¦‚"þ—¿`-[p#|Z?áÛ¥vò�à÷ÐЗmÐ"[ ö÷OmÑÏ䧃nR§]±¶OoñZ\VòˆDâ%uÂÜLVž-fw¯sìQ+**BÕ“ÓH³ˆ7£…/6{qSga•ŽD^ïœ"~+@Ä/Xǵ¼:êÊ+�à÷ÐÔ—‘øÃªæ¨´/¾TSøÕøôæÖEü|ú‰úq»fH"žQBÑæö²‘ê &…íÖ9vŸð;^Îô¹'µe["^"UÓ“Ü”õw§²f.ó D|nWñÐØ,XÝk¤Òh¤óu��¿ƒæŽ8·³Ïªs^nÔëÙûtî¼ÓöÎÇçt²‡Ù÷@"ž_ä‘üŽÜÚMëŠ>tožßŽðš×AOƒâ‡Ö9vÿ¨Š Ñy¹~CÝîªKLÖÑ âeâ‘_ pJ@§¿˜°#—˜bFþ>‚Oìé>+⓵VRç§â˜šaLˆø ñ V¶…¬#ÏüõMN”å4ê‰nfÉU®^à~Àñ¸i·‘õü¸Χ×tž<sê1¯Òö–“7ÏÌF”÷þÀ:ñ`ýç²ÿ°­¶M]çeÅ{ªª,„=ó3Ìð Ïžý•û±6ÿØÓyBíⳊâ”òM~I×÷,¥Í°»˜D.?çsÏuYœá4-jí¼lBô²‰-ø; Qõò/<Š­¦\�~øŠ+i0.J¸wT=®YÆ×–µC`;°] âïl�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀVÀOÓêBΆUc����Ð�ëˆø;[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„ä׈øÙ5¥íCŠó¯z‡ÅlLƒ‹”âè@\ã„òé­þ`wYÏV·4ÍOäwª[DíäŒ.‡Sš¯},�`u~Òtø/Ê’µÒ¡¨i™ç=j~%§ñ¬É«Ìi6ì‹ã[~?ŸÒðòŒ’v¤|U;¡sø)�öœ%~lö©.Ûñó/”wÅ÷«/r>½¢žpìQœR¾GN}[ÍÇuJ6bQñN7|¢”}¦™þdc÷ƒºÎ‹xÖôϲÀ˜æW޳·6¥CaÛ!¥-ßçf3Jϵ£ njJ+ –ÜtJyëPr~Eù«X]w]jŸÇ~ÿkØT`?tšôéârH_¯S:zÐ"^5¼ø ]Oª¿ÇR¿ÿ&uÅHúøGÔn·=õ7ˆŽÑ¢ŠóÎ)n=£|Âç�ì%~l në]¶(âÒ$Oè$}IO]/£ó-j÷®hºgc#[I±Víè(;±8BÙø‡Ú·Î±{ÄíÐXFpœÓ¨$T¿R?÷ŒêÌh˜j1Í"þ(¥¡<D‰àEÖ÷ý9Ý zu^S~ö”:ÙHìq˜OhÐ{ât¢X境ÕÙLĸ÷Xeuû€:ª6|h°è>qü—ý3:÷úöñÏD½xKƒ‹ç+6Ö?hœÕÔ!�À°‰_�›Pij€xMqzM³ŠèÔ/ø@ôÐâ¶<÷A»GùøF¾ÛlUÄËTˆÇƒhÑè­sìáX,ºÔÍ¿XÏBij¸y$ízË#!ŒÆ%kÁœ (L)ÞDÄ3>û€: âë:°§tìó)2pðXÔ©o¢|®ÚXsY~À¾²‘_�›LÄ«!êw*èŠÎùˆ²Nk‘k9ûLY|Øœ¦°ClWÄ sÉô™ŠŒ@\çØ=¢N`ÉgŽsšê¿ËBÄî6ëŠø›%‘áðE+ù:O(|Óo›ME¼Ï> ˆøºH|+vù.Êü±ö5\>Wi¬õÈTGÔ/¤Ó�°‡lâÀ¦„ñœ u’,œ´+:¥ ²E¨‰ ë|å"> µ«$Èá-ùÔ¶¬\-Ȫ|¶ ›ú"“|Íã€åws_µ¨"Þ¤`éœxžãqÞ£8~Jm§#(}MdrÛ—5ÖªüÊúÅÔ¿ÆÄV�ö‘õü¸+>½ygÏ a«PÎÆ AEÄ ¤0= Éüuðs®M­07¤Ó¬'â—DâK,È<.—M.ÃÇvJ+â-Ñb¶Ö]„ô²{\Ç> ˆxÆ^FMŽþgðŠíÀ€œ´Ö¶Ò´Vm¬y~Ni÷9e£} 3�ðÀÙØ/€MñéÍ;‹ø ®è”é4Q)Z¬"Èû1!s#[Õ s3YµèÙ Ö9v¨XlÚtšUhÈft£ãÅf—צÎÂ*‰eÜAÄWìꀈ÷áyâŽaÍêNMeÔ0ŸäÔ-u‚�;ÏýX¶­Kx_LlíPo0¡¹\Õ£CQ7¯_Æl‡ØÄVJ(–m´X6RÛI²Î±û„_`qYzîImÙ–ˆç‰¡O<éI®°Qwx"·üÛæwŠxŸ}@ñ88°4‡}͈[e$ �°¬éÀÚü&Ϭûƒ"»Ãz¶R⌿SÝx(û= ŠU{Ö9vÿ¨ ,Ñy¹~CÝîªKLÖÑ å¨Ñ#š ‘NŸ†æÚ²3zBI>* y9ÄÈ3õµˆ¯³¨"¾Ì|zMçÉÉ šÆZÖ‘„²Ë¡^J˜'¶þIil¹�ö“¿�¶ë?—í‹ølµmê:/+þØSm.:GÈõ§öfROÜ¡Á"%Žë—†åDÀDwNÕv§3ó=ÜìNñöUjm¼í×ã†FY—"ùü«¸ãcÏr;šóéò4Öç[Sz5öŒX�ö…e~l¶­ Dü­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø ø©›€êÙîôÃP����ØwX/¸@Äߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@HŠøùÊ»‡ò»rk÷i8›«Ïf#Ê“NñY¿¡ëéOõÙŽ³ž­nišŸ,lTÚ"j'gt9œ’²Ú:Ç�Vç'M‡ÿ¢Lø¤V:5í!sCã¼Gí¯ä46~ÛËœfþ8¾EqþUïÓLsŠ+¾Jm°3�ŠùôšÎ =tHqúçæuN">ç”´#yÎF}ek±(¦þu†°ý‚¸Çþ'šz\ãÚàΰ]¶$âU!ë$ñê]¾Ñ 9¢þ% øåή)åÞÉh¼ t}[ k3ê”*$‹Šwº"ˆ “}¦™þdc÷ƒºÎ‹ÇÙ5ˆµµ) ëÜ)mù>7Û åS–žkG=ÜÔÔù”†yJqdŽïPr~Eù«X]w n‡)µìëš­Ðy¥³ö•ò¸U=–·8§©> T™O¯è4éÓÅå¾^§tô Å¥öÛEÃË òŸÔï Io–ÁšGÔn·ý"¾•Ò°dÐ9Ý Né89e€ˆÔ?Ç¢¸V¢x6¦«4¦V7߬Î1âœýätÛÈ>®¿^Q ¾Ó°ÿ’²‘Vió zÏD[õ]ý]À~á-%…¶šcð‡h¯«ZcåkƒmÀm¼Ë–D< õÊÆ?ôß6ZpâbFôý E¼Ÿž^µéà<YØrc÷µeeÇyá0\¾žknÃåL‹iñGF\(¡¾ˆ ú¾Ï£GQç5ågO©ã Ò>q:Q,‚8*ÑY[ÄK*"H8Ïë7¢“ÐðŽ½Â ¬BµŒ=4|~›Ëþ{ËÛOšäÏD½xKƒ‹ç~AQ¡©m�àaÁ>çÐ vÎG”užÖÔ‘euî³Jßôß ·q‰³O\fœÑ±{mÑ~t}÷s|ê¯D;Ù}éì[ýÚ`;ñ*ZÌ‘ÀŽè½å4ÛEBBþ,ÑŒÅgG8uÓÜq¶*âx<ˆÂqc÷¿Àb§Ñ¥nþÅzÞ"ž…Ç#i×[.Û•§îPxGžî€W«÷|X'6!â7"¾®[9—ƒÇ¢N}ÅnE3 ¤Õ0šÀƒG´7½åOÊÒ:ç×Ê·•; 5âšÛÆC§~ú„½lOŸ8ß_õÚ`[ñŠEžéÁÁ±(töÍ „øŠ¤Ð߯ÈñvE¼hBu‡(2•`c÷ˆ:%Ÿ¹”2b K¸Û¬+âYxÑo_$Ñçж€Ws'øy}:DüÆ@Ä×Eâ}Æï¢Ìk_Ãuh¯ÎÕBƒ@-óÉŸtþÑ×–¬PçJm›· ¥v²¦mô´~¿è¹þÊ×Û"°ˆ7¨‚WJ—™Oéºß£^vA¢ E&?~€ˆC­Àª8vBv~¸Îƒ¯Åñ.®ððE&ùšÜQÝ e¦ W›œûNC}q¿V"Þ¤¨éœx.oç=Ñ�?¥¶ÓK_=ÓÑÂUE¼o¸�`˜OÔ3FWªs̜ܶ.‹Šf쩳~ߪˆð¿ÒµÁ¶øE"^ …§y¹voR`V±±W¯Ùa¶+â•€D:r$«‹ø%‘øËD<G'˃#óÇvJ+âÕ9 ±m"¬å»¶Î±ÊÊüˆø€ˆgœU(Dyûgðª<.}vÛJc[QÄ{sk�L“€_¹ÎAÄ?(X¸ñª©ó¬ä‹¶—3âÓóòwlU'ÌÍdÕ¢÷-XçØ=¢V`UDÕ 5Ó,âÍèÆBH›ÍNkê,¬Ò‘¨Ÿ­äz’l§Û° ˜ ô°ñ><#OÚ‡WëDóÒ‘\—*é�xðß>zOéëºe+×9ûǾ­š_Ó ðäÄWE8·kžœø•® ¶¿—-ˆxÿ[LfO?Q?~B½ÁD5Eä]§ÈU=::¯„¢-Ìíe#; Û Ö9vŸð ,_~ø6E<ÿ?ñ¤'¹ÂFýÝñ-¹µ5¯˜Orê¶:jñïA.< êSc` F”@* �>æ“Ô?_wièº:ç«gþºçëT{;Ú¾4ï¨Úê×Û!ˆ7«Ï¨^b§”;ëZ—Ü€éÓUi›Ýe=[)iìPÞx(û½µ²Ï:ÇîU¥–[ìvW]b²Ž/—úzäw@œRÓ±:ž²3*œ¯¸¤ö(d§•WØŽˆ'¬YZS¿1ñe”Ÿ>Y!0°‚ˆ—uIt>W®—�ì?þšU? uNt¼ÝµÚO­¿xÖ‰?=õ¬ÈmŽ»N|jým±òµÁ6`ýç²ÿ°­¶M]çeÅ{ª´ì(Ûåcy3Æîðe1œèÞ•&'&:ŸXm¾Nì*° ´ì©ÔÉ0£Yŵ¹ã‚{Ú_™‘Û² Ñûˆ½jØjÆrjÃvÞ“ß`;ð|«£¢î”·zÿ³¼ÎéÔK9:Ïm~±u_a»@Äߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­€Ÿº ºž «Ë���� Ö .ñw¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°�����I0?ŸäÔä÷[DlDsyÄOš^¿¡XsHqÿMÕ;Ïz¶º¥i~bÙÈÞ"j'gt9œj›­s,�`UæÓk:O:º. ”þIãÙìIëÛbN³aŸÚ-Šó¯zŸø|œSÒŽä9£ø ]OêÏf#Ê‹kw(ÉG4ÓùùNÃôX{BùôVïÓLsŠåyª[+ o �Ç2¿�¶û3—-ˆø4>EÙèFÿ-¸P=¡lüCü¡_nÔUÇÌ®)mQ7ÿ²t=[)æãŒ:¥Â.:9Ãwºá iö¹hÌÖ9v?¨ë¼xFCí¶6¥CaÛ!¥-ßçf3¢Àsí¨Gƒ›š’:ŸÒ0Ouç”7!Dί(«ë®KíóØï û€*Òÿ‹÷t­ ³1]¥1µº9Mšé6±Åü åÝGÔn·ýµ8g?yG#]çÓ+êůiX)—,ÈŸZ_½¥þe}» ƒE-qíGÏü"¾•Ò°´{.š¢S:.‚I�€ ,ó `+p[ï²ïÂŽ³GQ'£±ôœßhQ” „›¶>oG;ÄF¶’bÍÓc•*‹sÓ¬sìq;Lé¨ASÁN|^ÅWÊãçÕF]tm†B"þÈ4ðJ/¢s¾ï›2üšò³§Öˆ’Å|BƒÞ§e¢ÍD|{UV·°a»¾H3QÖyº—õ¨‰õmñ“&ù3Q/ÞÒàâ¹§±þAãì„’Á7ý7Ãe9qö 8ÐslÚƒh+úï})ŽD]ü@ÞúîƒÛž“÷^øµ,ó `[ü"ÏŽóÑBøÈ¨|Y„ªèò~ˆÏ­Šx#íT¤uŽÝ#ª"•a‘ÐuFqBˆøE¾å²ZtH Z0»hkl"âŸ}ÀrÄûîõ(ŸÔ¤}<(l!Eú&ʧ¯±u©û²œñvدÅ9MõŸŠ:Ñ­GsÛ}΄˜_UÄsÛÓÚ`�÷–¥~l‹_#âK©4)BuZƒÁ·oGÙ®ˆ7œƒÅÈÅ:Çî~‘ªŸ¹ÔøÛ"Üî6ëŠøRö ¾Î“jtqkl*â}ö˘Oþ¤ó¡ÞånQo •®| —OOc]ªg>Á^‰OžTë¯ t}«ë´»¨ Gk}#�÷‡üØ¿@Ä›4Ë9CÄWˆ_JH­ nÔ[ò=¨mY¹Z&ÝÆŸÿvójùšÇËïæ"¾VH/óé€úýÁÞL´¿ M¶¾&z¦#ô "¾U3é´Ò±,çÄ« ¶]qܱs^]zBQ‘§¿ªˆ÷¥ö��¶ÉJ~l_ â9’b¥Ò02ªyTr¦,@ZH§ñvOŠÌ:Çîë‰ø%‘øË2—áãrã_‰º"^sÑ‘[e’Ý:@Äÿ à4ÚB棷­4­mˆx½:M$êíÕΗšÌjD³¢ˆçÜþãS¤Ò�ŠUýØ>½¹]ï¦Ò0òEZÑbY9ù»ï`7²U07“U‹ž­`c÷ˆZ‘Z«Fæ ÍÙŒnHaQÚìrÝÔYX¥#±Œ;ˆø:Á,æB?¾§ôõþ,u»9+ØBŠs_p—oô×E.«•œx/ÕÔ5þnËsÝe#n\÷p„€{ÃÊ~l ¶­ËE¼š¡\]žLOJÒKLÊ%ǰĤж0·—ìPo0)l³Î±û„_¤r{îImÙ–ˆ×C÷•ÆßM©QwÒk!Ù]~§ˆ÷Ù¸Ì'¨¾oK³nÆf¶¨‹¸ùRXVMkѓŗ.õ¹J}G* �¿ž:¿�¶EX/—&3“\nhœ÷¨-ΫÖÒÖëïëÙJ‰3þNuãu¾ßÓ`läã:ÇîU‘ª~0¬Û]u‰É:rSæQ¦Ž5z$—˜BÁý9òÄ3õµˆ¯³°ñ§l£ãµ{ln‹†ÆzV]'þÔúÛLÄР V¨ï²?[Ã'��îNƒ_�[õŸËöDü¶Ú6u—ì©6ÅI»|,o&õÄ,RRÜû±r~ùÇžÎÝ9U[§”oúKº¾ç‘›=³†}€§kylÇÛ~L´_ÍlᦷT;šóÕ~±uö™²øP‡óá/>.)»nýmx_\*ËÂ�B±Ü/€mÀ¶uˆ¿#°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[?uP=Û~ ����ûëˆø;[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°�����I@Cã¼Gmñ=þîASÿzJsýé|zMçIG}vСäüš¦æÃg=[ÝÒ4?Ñvp·ˆÚÉ]ÝÖ9�°*etHqú'g³&­o‹9͆}áë[ç_õ>ñù8§¤ÉsFñºžþÔŸ9ÌF”ÛíB>¢™þhÁŒ†i[cmqNS}„Í|:¤Ë,¡v+¥á­Þ À=âÞÔ9G§•±5¸Çþ§ͶƵÁa»lAÄÏéfУH8áÞ`"þú.œî±8ÇÊÆ?ÄçßhÐ{® Ë ²®8öºù—šÂ³[¬g+Å|œQ§T!ÒtøNWQa²ÏEc¶Î±ûA]çÅãì¦9Å•ãì­MéPXçvHiË÷¹ÙN(Ÿr‹ï¹vÔ£ÁMMIOi˜§Gæxî ^Qþ*V×]ƒÛaJ-ûºfk't^é¬}¥<nUå­FÜ�ÍìšÒöñ"0ÓUS«›ÓdÒ:lb‹ùÊ»¨Ýnû…8g?yG#]OçÓ+êůiX)ÜN<µÄ Wo©é¶ ,âW¨Oó N{”^| á×O”Aă{Èï®sý—”nÔŸ\gzÏDÝú®þ.àNÃ[J m!4ÇàÑþ^WµÆÊ×Û€Ûx—-ˆx#|Œ2‚D‹ø›Ô?-ó|DYGÐ=ëÙJ#ŧ§W-+8‹sÓ¬sìÁeè(ŠÒePшN|^8  ÚçEÙ[`5þ,â‹F]•×Vqnß÷uÇ´óšò³§Ôɬòkð‰Ó‰2Q‰ÎÚ"^ÂïºAÎóúè$4¼ãÊw@\®“ŒÒ'=ÝËzÔÄú¶øI“ü™¨oipñÜ#(~Ð8;¡dðMÿÍp}Kœ}‚›%ÇKë úï}+Šx›R}àþð;ëÝk‹ö£ë»ŸãS'x%ÚÉîKgßõl…@"^¼ó‰(§xä4žýGEXj#Ä,šýÂhÙªˆ7âñ ZØgc÷ˆªˆgØitQœ"^ˆ‰ä‘´ë-„t\±¡;®ó»+^A®Þóaňø-À£…=Ê'n´… <uê›(v>AákèU]®.·•@×»GÌ@ă}çWÔ¹qÍuåÐmu³"ìe=|â|ú¶B0/EÍè\§,•i=Û›s»"^XR¦ÏPd*Á:Çî~¯Ÿ¹ÔøÛ"¼¦Á_WÄs-¢ßuÂÂuh[À+È9óœŽëê”÷;`æ“?éü#"GL½-Tš¤ò5\‡<‚¢N<su{]$>yâÔ_®kNN¼7ÅÌ"쿦ÎÕu†«íŸ¿íõ\ú¶‚OonIÄó°ÿ[Jzg”_pްÉwQyû’Ϭo+rˆøFêD|Õq°²óÃu|-®ˆwQ‘ïVaSþûÔÑ|Íã%×Ù�~×¶ 79÷—4¨›,ä~¬Å|: ~P3iëaÑd ék"|i­EZe·Q/çÄ«É~]qܱ××Ù̧Ÿ¨ßMêAñ`GøuuŽE¼¯nùE|«R_kDüÊõlƒ@"^¥´‹ €:‡ë€EŽ=a‚{ퟱÃlWÄ#ưžˆ_‰/±LÄs4ð¸e¯D ]¯Î¹èHˆma-ßµußd^þDüF@À/h´…œX×¶‚/Ûñg¥ŒôjHƒ•F¸|k ˆx°üÚ:¿°¯tÙ‚ˆ×öé¶ðät›w”œ^í]ƒ¹ž­4R¬y„¹™¬Zô¾ë»GÔŠøŠƒ¨:¡fšE¼ÝP"ÚÞìÉ¥M…U:5ð³õHÔž$Ûé6,&(}¬û£÷”¾®[6í!±‚-dcí«N=ò×E®Ë«åÈúR×üÔú"Ük~Gkèxrâ«"œÛ5ONüê;X~ÿ.[ñ&ònRhx9¢—Ô¶"ñÕ'/5ùŠÎWpÖ÷õl¥PBÑæö²‘åT¤uŽÝ'ü´/?|›"ž'Î>ñ¤'¹‘?õwÇ;ª´-¯“Æ›æ@įÍ|òúçû¶4ëflf‹Aà]­Â·Ï‡6<Y|¥¥>ùœ5«F1ñàó»êk wuß>ïê4ÞkîRßÁ&ñÎÝ=OJ?ö”^E!å§™ðêl•?v~–ÕQ²b ¹qêÄ{ŒMuZçØý£*âÕr‹ÝîªKLÖÑ âåR_üˆG—:ýÅú·r‰Iá¬Ü¨‘༚ÀvD¼8aÍÒšˆøµðaß¡ãµÃln‹:A!˜U×>µþö£ñÎÜ•2ØŠSÊ‹‰¬úGhÚV]tˆ÷”ß[ç<ëÄŸž.þ.à6Ç]'>µþ¶Ø¨¾ƒMaýç²ÿ€­¶M]çeÅ{ª´ì(~ùѾ,†Ýû±r�ÝΫآ’àXî´Ø?öTêdÈŽÁ¡umî¸àÇžÖ‡Ó5Žüv[:!zߨÌåT"À*¿à8ûLYÌeZœ‡ƒ>kæ~°ÀÏ)5ÇðRÆïhX9g}ðºð«ùÍuŽÁ/¶î4lcˆø;[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°ðS7A׳au����4ÀzÁ"þŽÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����! (âohœ÷¨-¾Çßâ7t=ý©?³™ÓlØÇP>½Õûv›õluKÓüD~§ºEÔNÎèr8VZ÷X�����°¯°þsÙ‚ˆŸÓÍ GQ»GùøFü9¡A¯CŒÆŽÂœOrêF,BªˆWÌÇuZç_õžŸ4¾£¤‰óRœ}¦™þdc�«Àuè_”%j¥CÑ]Dßi˜7øfa³ë7Kÿ-6ãï+Ìi6εj èf#ÊÅ;ç;èP’<¾l&î«­±¶8§©>Âf>Òe–P»•Ò/€ YÑGΧ4<õM×Ë(îÓ•×/€mÀ6vÙ‚ˆÿJyÜ*¿è›%Ñ%ƒoz‡`þ…ò“甾z*Îÿ°E<MsŠKÂ\3»¦T6~O(ÿPûÖ9v/¨–ôOϬž¡´{œ½µ) Yp;¤´åûÜl¦<z®õhpS3ÞÁ,O†…Èùå¯buÝ5¸¦Ô²¯k¶vBç•Uç*Çò抛-Þã>0Ÿ^ÑiÒ§‹Ë!}½Né"^",­GÔ~ôÌã›Õj'>§‘©³Ï”uÊ'Ž@~©Ÿ¼+Žc{÷â×4´ë­„; O)üè†ÆWo©ùÅ)ë,âW(«<:íQzñ†_?QzÀ&¬î#¹?¦¶¨ïCÙQç:ܧ¸%|ˆëÀVà6Üåî"~>¢¬Q” Ä+ÔHÑQ'i‡Ì/[øá7-’ â½Â\XKŽjX¶[çØ=‚EmÙyx„„„ísOy².E£®„ú¢Óéû¾¶mç5ågOýö•#NOœ‘…ìl&ù]—"ˆ&úÙÐQ«|Ç"Ä=îÕ2ö@á�K÷H”ót±¬.p=zæÔ4ÎNÊÁy\âìp çØ­ýFƒþ{gߊ"Þ¦Tß�›Òè#¹žºA.ö5m&¸3aD¼†bê_sÄPˆ„ѹF\ !2H)‘BÂD:!âýÂ\´§2}æ`Ñ)ZçØ=Âï<ØAt©›ÛѺ"^ˆ‰ä‘,¿·lãJj˜îPlÛî^A®:‡uŽ´VĺÇ="žQå¤ÝîÓp&ÄüÊ"žËå)—kQ—º/+#WlçC·r¹­¤Äp½;q:¬ñ�ü.Ö÷‘ìþ “R ¶E /°s…˜õ*¦è@¥Óð0íÉINùF!â%ñK©sò™K¿-ÂküuE¼L3Ñï:añ¤]¼+^Aþ“&ùsG,YÔŠø@÷¸G@Ä dZÞ#]Nê:Ä¢ÞM.©wz¥S_x‡ü½·å4™:ñììu‘øä‰S¹;9ñÞ3 ˆx�¶ÂÚ>Rø…ËóO§7·#âK°#>Ž–#;7U\l~aºkð³¬M­0÷¤È¬sìQë<* 4 ;?\çÁ×âŠxe×VÑ1ª‰8ÆÇëEWÁä&Ÿ½ó’u“kE| {Ü# âydë E]d©ñœï:Êž 1þXøœ¶ü·<"&àºÙòh|"ÞɉŸO¯é<éŠãŽ—¶ óé'êûòñ ñ�l…µ|$§oößÖ·UàÎøôæ–E<§Î¼¤öÁaÕÁK‰—Ô s3Y5²&†¬s챞ˆ_‰/±LÄs'ô¸Á®D ]lʵÕIõ ë%ÈwmÃ7™×ee¿¥{Ü#ºˆW“YmÿQ'â}CäfžÓwý·`-/pFpÓ«! V=òu¬- âØ +ûHø_ûJ—í‰øÙ˜¼´W㲇ñŒJƒ±…9/çd–ìPo0)§uŽÝ'jGE4E}4‹x“¢$…Ei³'—6uVéHÔPäzj§«çšÔP+âÝãñÐE<?¿wE¤Êh–/¥Ìg?]äã*9ñ^ü×ñÑøî âØ +ùÈÙg:O³ú¥dÁÖ`ÿì²Ï‚€SfVù¢‡.â=ÑÐbã¨ë{k¬®sìþáw¾üðmŠx^PnäOýÝI¯EéwÙ–ˆWT£¥µ">Ð=î+5PŠººÄâ:©ìŸÏé¤T}«Óøöùб‹Ôž&øœ +`@İ–úHÎï¿wVŒ¡`ýç²ÿ°­ÂPuj¹ÅnwÕ%&ëhñr¹T3ÉÏSj:<ÏC_[.ß(ĉû5r¹¾Ç[ñ…¸©,­©©ñ‚÷¸G@Ä»ÔÕ%.ƒo))Ötp*LïjçÒ³Nü©õ·=ºÿá ÇsG´G­8¥¼é_—s®jÎ ÀVhô‘5)4ð«á€ˆ�lµmêF Vü±§:A+£Ï ¿ü(óy=û+÷c"9¿VÇ[T«ÃŽÏNm(u2¤è>´®Íbk{ÚÒ=î¾2#·e¢÷·nøl¡:Ñ‹_l­[!F§Ét?.k5¿ØÊ?s™çâ|ø‹5s?Xà甚c刯ùq›ú:Q?ÿ�Pa%©:Ø‘÷8Ô¹P°m] âïl�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀVÀOÓ¡ÎV;�����">°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@HŠøÙ˜)ÅQ›ÒáLï4ü¤éõñÙ8÷!ÅýO4ë æâé")×?ˆsšêOî3ëÙê–¦ù‰üNu‹¨œÑåp*,±î±�€U™O¯é<éèº$üQú'g½&}§az,ìqBùôVï³±}¸ØÚ=ÊÇ7ú3öã9%íHÅoèzúSæ0Q^¼‡%ùˆÜ–Ãf>RnÚöéuùøù”†—gŵÚ ÃG°¢¾ÿE™¨Ÿ­t(ÔH \çÎjË:Éõ½OW^¿�¶ÛØeK"~&€¶rœ®ˆN}اvÔ¥l$^îìšÒöuó/–sfðRnPsÖ9ý{Èú¶gÔ9hQœÕ{¸Â¼Ó°Aö¹hœÖ9v?¨ë¼xÄÖ4§¸rœ½é²x;¤´åûÜlF¸x®õhpS#ØåÜq5Ç !r~Eù«ØÓ‘mæv˜R˾®Ù¼Bä+åq«z,onçw‹÷¸Hÿs,lp­ ³1] aØêæ4©yÍù$§nëµ=óˆxåÃ;ñ9Lý›}¦¬›P>q|µ°o?yW7Ÿ^Q/~MÃJ'‰; O­€Î ¯ÞRÿÒn âú£sŠ; eƒq¿ûF!8>B§%žÇ½G�@-\gO“>]\éëuJGµ"žëðcj‹ú®4×á>ê\@¸ wÙ’ˆW(!âŠxv®G%ñŠ™9Ý zâH‹|!.zƒ‰Çßo6²•Ÿ¶0×HÁâü eãjß:Çî\–ÊÎÃ#$$,hŸ{„w,µPe”ÒP¢„ú"ºàû¾.£×”Ÿ=¥N6ª–Ëù„½'N'JÜ£ŒBv6Èü®[æ>ýlxÇ•ïX„¸Ç‡ËÕaá‹4óe§{YVbþ…òî‘(çèbY]*àzôÌ©?hœP2ø¦ÿfø¸ÄÙ'¸PrœÑ¸T±D[Ñïì°¯óv–Á÷SS�K©¶ÃÜ®ºA.Ô¹üÏÎ:*‹P]ÖÂD6 ‡tÐ~J±¥œ*’ïÌðöVE¼(öR< •`c÷¿ó`ÑuFqBˆxîx>’v½å²ÚqņîP¸bð®x¹zχuŽ´VĺǽD¼ï^ïFT9i·ûB$ _¼²ˆçryJÇ%ß#êR÷eeäÊÛqâr[I™äzwât¦|ƒUñu4��«Ò(â½°_øƒNJm4Ø¿GÄKZ¿O z“)¬Èýýf»"^Tiëù×9v¨sò™K¿-Â}bC°®ˆ—Oýö ¾Î“ …Eü®+‚ü'MòçŽX²ð~‡ t{È|ò'| v’#zt9©ë³.©wzµ˜ËÄÁ—ÞÛrt¼TÏ,¸Œº‚½.Ÿ<qê/ïK(ÿ#Óžd>|$êøU]ZA8uÄó`h€X[Ä ¿pyþ £@ÜC#£ŒQi2;í#:¨K¸g@ć¡ÖyT„ ;?Ü)k\ï¢"߭¦5ÇøxÉu6€ßµ]îM>{ç% êæ‰¸ß)t{Æ|: ~à™hÿà(÷ŠŠù�õ"žó]GÙs!Æ Ý–ÿ–GÄ\7[ž‰±\F+Q÷rN¼šlÜÇ—}LuêÈëùó¢^\÷O©?ü®Ž)¡ê·ôBì÷¯1±€MYKÄsúfÿm}[îŒOo†ñ2ªyTŠªã8Òù_ˆ×N¸iBá=b#[Õ s% ‘NÓà<¼"~I$¾Ä2ÏÈãr»5t²%̶I'T¾k뫬œ²²ˆßÒ=î[Às›Ë“YíIhu"Þ7DÎ"ü¹(_–^KÄ ìÕidt}HwôHžóÀêhhÄþþiSð‚�È)í>W *��ÖfeÿK`_é^Äëœ÷E´XEdæ\G“m‘¯?¯ä!ßO6²U07“U#«a]çØ=¢ÖyTASôÐG³ˆ7£RX”6{riSga•ŽD %AnÒºÍÑÄÒwlÝã^Ài{ï)}í[êöá üµ¯¬»£Y¾”2_õ×E>®’ïÅs‰Y×ÿUü€ÙQ©¤í��V¡¶¶™}¦ó4«_Jl öÏ.áE<7˜<qJ/1)—³—˜,&¶ª”Êç÷œMl¥„¢-Ìíe#Ë«ô¬sì>áw¾üðmŠx^PnJú»ã®S-Ù–ˆWT£¥µ">Ð=îóÉêŸïÛÒ¬Û ®.é¼tgÿ||N'¥ºè›„êÛçCµÊRŸ\çŸYémš›õz+t ¼¹÷�€UX*â9¾ÿÞY1„" ˆw‡êÝÈñ óžþA�^§Z¯ÑlXóG?îëÙÊ“ÒPlœ:ñžÅ%¬sìþQuj¹ÅnwÕ%&ëhñ2êg&ù9°è¨Ñ#‰\¾Qˆ·¬ÊNéã­‰øBÜT–ÖÔÔŠxAˆ{Üqü)4}dÂPW—¸ ¾¥Äþ‘>öÙ½?ªËYuøSëo?:0ÿ᎗õò¸X¨üùgâ}Y©<²~&”]õ=Š{ÿIiÜÞ™€�÷F_“B³Tøƒaýç²%ÿp­¶M]çeÅ{ª´R¨™$³63$¯so+û+÷cåü:¿VÇ[§”oð+‘ìøìÔ†R'ÃŒV×f±µÆ=méw=iÞ²Åb[6!zŸqë†Ïª½øÅÖº_Ceñ¼Â/¶òEÅ\¦Å¹8þâcãÜÒ¯ìÖ¬NSþE×úã�� øÚU¹Ù~ÁÌÉóç´_`k°m] âïl�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀVÀOÓêBÎV;�����">°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­��`w˜O?Ñëô=fs½ç¾ñƒÆç}Ê'?õß��ZÄÏÆ4¸H)ŽÚ”gz§¦ñ³åIG^“·(~C×ÓÝq^ëÙê–¦ùIñ¬å-¢vrF—Ã)©¦ec��43ÍÍ;JN¯hÊŽsšSìõ¯bk¥4¼UßúÌÇçt’àß�ì›\¶$âg4LÛÚºB½é³o4HŽè ý’,Üg×”¶#:èd4Þïµ¾­ØAgÔ9hQœÕ{~Òt(~öƒCгÏÂjŠuŽ��àƒü9Å> í¼ò‡ÔÍ¿hÁ¬;ÓÍ'9=ëiiÿ`>¢ìø”7ñ��E@¯¸¦Ôªu…ÿ³¯”Ç-:ˆsšÊ¿µàßs¯[˜kL'æà eãjß:Çîu#¢Ã’þIãJìgoº¼Ý)mù>7Û åSnV=׎zõ é|JÜG˜ÌñJί({ë@=vG÷X|÷»Úí>×g_+eA ë‘Ù/£ˆÎ>½©ãmjìý›#‘�lé//ê–FILÂù¼ÿ‘nD}ºÌþWü»efŸ)‹…|Ó;šàú˾�!�€‚Ûf—ß,âÒ$F‹Ÿ|D3v´ÊF[wŸÁØÈVuœæt3è {DÔ1C©ë»Gpy9* Î9͆}êÄçN.+7vϵ·aa¬Å4‹ø##J•h]ˆYß÷µm;¯)?{ê·ï|BƒÞg$DÜã8§¤ÝÙ¨ñUu䀢nN“â‚îý JÏcÁe¥èØÇžòSE^¿ò}�vï²TƒC?hœ=¡(Á~C£ìu­zbê£ìäO¾ˆúÎiŸª“=Ÿ^Qƒ(¦P žÐÙàŠúñ¡øDí§î(ßÕ–ç²7kàf@Idd8ß9\©Þ�>½ù›E<Ãγ+Ĩr€»UÞÈVµÂ\øn™>#„œlXë»Gpy)‹x†Ý®5ôÍ„ñœæõHŠ÷[¶q¥ñ׊-Û]>ó«3zÛydEë ⸠œÂÒì”Ê<šiDµÛ>™Îü”¥/)û|%„z‹ž¦oè4yG£ñ…ðÍfOûã¨Mñ«KÏ~è�•iÓT‡¡uÖ×.|· ¼X´²Sà÷û�€‡Éýñó)]÷{ÔË.èBˆ®ÈäÇïñað‹xýÌ%¡i‹pK¸Û¬+âKQ1ô'Nç’¯ódÅañÕQÏ|Mß9jWt âØ-ž="å?­zÞ{å¤Î©9[Qû„Î8 Gúb!öÛœW«¾©§ú:ò3uÕæ‘¿ ¨O¹^¶-Qÿ…òÓÿ)‚êÞŽ¶îc��»Ë=ñj˜sެ{Xr„÷íŠx¤Ó” ­Šxñ#`Y„Û¹ßþò·À#ŠK(»¶ŠŽÿ}JÇ%ó5·Ÿ¯Z<³¬m9„ˆ`s”¯K¥Yìõä</#£å-j‹ŽõLû…¨˜³âˆry¬=‚æœßM—1"^~Îç~Cý"__ÕùÅ\��¸"^ړ팣ÜçµUo&«FÏk¯s챞ˆ_‰/±LÄsã|\Ž€q\Z­Âñ¦Ñ5 ±m01Ô~f‰“ÙŸÕû…ˆ`ET'¿RßÝt–‚ï4ì¿‘yY ÿª£òæxG”«c“àË)<º]+ùí3xß÷!eÙPÔTƒ¾Vin �à¡ãÓ›¿WÄ‘wB#ó;{‰WC¥¶0·—ìPo0QÑÁ:Çîµ"¾"Tm¿ Í"^ÙÛãÅæFÑê: «t$ü”ŸÙDú>Ó$€ˆ÷ÙWÖQ÷ûu×`'`ÿpèŒVš‰¦åt•ùtH¹¨»jNEÒË¢ÝDáµ(ï±?ü,'®ª¿UG_MzméI­üe®ƒmq®4ú›ç}ZÄGO)yõ¶”Bª|¹��(|zsK"ÞDÚ¢³é3vx×t^ú±§>]˱‘û ßó긶°7^Bñ= Šg_çØýÃ/ây5£çžÔ–m‰x§á.àFÚN©Qwä0»Ë¶D¼¸ GóZ/(;ë–ï—£ˆž5¤¹ñ?®Ü;D<xȸå_E¹ý~•7-ìKé1e‘nDù"ˆâœ3õ?j±Î¨ŽD;N¨o]d}«ˆuN1}¬Sx��`û—-‰ø‡ l†ªÈüIÓë7Ôí®ºÄd "¾’×jÁ‘8û‡bä¨Ñ‰ZUíQÈÑ%^úî"¾XO”±òýª¥Y[Ör›üSòýø©'z2n<�•|÷UàûzM§¥‘Ôºet��">°Õ¶©XñÇžjsÑMôÌ9ÞˆV«öBbÖ½k¾ÿØÓyRZÿ9ŠSʇÓ5ƒ{oVÚ™¾iº¡ñUñCSí„ÎK×åÎMõÇžìM³iÄGoøá'°Ëpç¼wYîœn 7Jß„î|'t¿¦Ô �pŽ\º�àÛcˆø;[�À}FˆçËŒ.·¾�€ÓQvG±*èk¢˜ú×v‡›$î’ÒþÀJÁ�€2ñ€­�����@H â�[����€@Ä�¶�����!ˆ�lü¬0aÔl˜8 ���€X/¸@Äߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $+‰x>6lذaÆ 6l÷k³ñ†‘݃@=°�����‰OoBÄߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€„ñ³1 .RŠ£6¥Ã™Þ©˜O?Q?>”ç=8èP’¨tÄ|J×ý˜"þ<Š©=¥¹þè¾³ž­nišŸh;¸[DíäŒ.‡»óì»Æ|:¤Ë,¡vaïw4œþÔŸ����ÜOX+ºlIÄÏh˜¶µuDüü å½?(߈?nh”u…XBÙø‡úœ¾‹ïSŸÓhvK³aŸÚÑ3Ê'»!®Ö·•0É8£ÎA‹âü«Þó“¦Ãw”´#q¾CгÏåNN óINÏúCÑ5�K¹PÒŠ)½kÛª²Øêæ4A¯ ����÷˜€"^q;L©åŠx%`-Ïâ*:¢dðMýMßhQ” „̺ÿld«iNqIÄkf×”J!owrj˜}¦,>¤V ¿1óe§Ëm ����ðùÍ"~N³ñŸ”Æm+Ò<¾GÑÁ åS#EÐ8{BŒÆ;!ݪˆ/ìQ'ñ_4¾êS™”›õšk¯öñÆöûÿX}æƒÓ³J©/ý™½ £¢Óò•ò¸¥ž5Îi*÷)T9äï5w(Õ9bˆx����ÜkXï¸ü"oç‚Û9ñz+¥aNöí»¿ld«ZoF*ÔHÄíÒ–>ŽÓ’ºB¸›Îüì`‰o:vçàŽ\—âþ'ššû×ó&í‘Åé–¼íxÜ8š#:Hy:H§���À=ç7ŠxÍlLW)O`=¤nþ…æñzÇ‚’ˆ×ûzÞ±‹+âK8ÇîJÄ«2Ò�§ÃŸÒàF%ìÑ?áyü Ñx)¾_µ¯Áâ7t‰­����¸çü~ÏÈ<äH‹O>õ”“hŠt-`yÒ뺟ƒ%"¾æØ]Ä^±ˆ·vBÙÀLJ5pYy.ÓaTçÇØçUœ4§Éˆóó”º]#ü����î'÷CÄKõ¨©¼ÂJמØ*E~‹Úéµ#Øî'[ñfb«Yg>¡AïX.=™†4hŠÄ7»ðj2Ï©[Z¹‡;=¯¨7øJãì)µc±qçïÖŠÐ7ò“&ùs:.:L�����÷{ âÒôú Å-{ I{‰É4¼|àKL.&¤*{êŽÉso½¤‹÷gtùõ/)â£äýs™ÑÅÅËúc‹IÃ;w~œŽ Ûòqú/ú“#Õj3ƒw;“]ýp'à"����÷š€"Þž¸Ê›%På’f¿Zed ׌·˜(O:ê˜vBç;ôƒGëÙʵ“½Rœ¾/Û¦X…†ívNWÙsŠ ‘¯:?źòÇî,Ö9}ær¸˜Ø*#ñ'ÔqGhxä&îPû˜Ó¯8—þ)=j·a®Äz§ôcZzåŸR‡����àþÁZÑeK"þá[€E||FƒÁ{Jí_ú=¿¶D½ÁIÏ’£¾Ñ íÈ­óñÄÖ>]¹J����€{†OoBÄߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„$¬ˆŸip‘Rµ)ÎôNÅ|ú‰úñ¡<ïÁA‡’|Då# ßi˜ÓAœÓTï¹ï¬g«[šæ'ÚîQ;9£Ëá”æúh�šÑå©•ÒðVïÚYöéYÖá+åq‹ZéPX�T˜æTÛpŸ˜ÓlاN2 ½çî°ˆ)|Ó�X+ºlIÄÏD…kk1ê8ÜùÊ{P>æê}C£¬KÑÁÊÆ?Ôç?i’?Ÿ‰sì­ˆWÌÇuZç_õžŸ4¾£¤‰óRœ}®éä”™OrzÖGã¿J,©2z°'¢)¤ð5öúUêwˆx§Sý[:EÄ/Úˆµž5¤ˆ—çþ]ïý2ŸÒu?Vm° *å4ž­Râ6¾ûT¼£ïzÇ‚Õxe¸mëvú4¬\_´•×o(Žtm÷´¶¨²éµ¸¯pYvÙ’ˆWÜSj-q¸JÀVE<WÚ““?èÕS!ö\Ä«ÆÃñšÙ5¥RÈû:9³Ï” …Þúp9=‚ÝV€…Wü‹DüoævHéÑ6Äw žWëöÞÑç”O› ¨:M÷ÊgÝõ½³/ß¡öªŽ|?µHsšÎ©{’Ód‰Žç6ý¸ë9ŽÛ³Î e##²9ˆ÷œNò/KF›Ð8ëR·rœŽøÇç42âžÛÁnBùä§úÛ°ñµ¸¿üf/*àøOJãv5ÒÌ.~-zÝ¢GÏÑ¿‡*â…n=Š"êd#þ‹ÆWýEÔá C½Á„æZÀ«}¼ˆÆó?þcõ™ÁˆøUˆ_ˆøz âï-^;ð;—”¾Ñ 9ö¦½xý,Û«“Ѹ©aºPÒêÑàÆ=Èç¸L=Óí傯 À=Ƨ7‘ˆWÎÛˆËÒ°Ö|BƒÓSÝcÖCøVÄ«¨FGœ3âüBv¬-}œ²ÂÝ8!ù™54Ýtì.Âs,²„Ú²ÌðÐnFf/<âÛNEâc)NÿlnñÅÜŽEg(ÉÕóiûËc¸¼Šï]‰FE·_Ò`êD†±ëwȬ;³®³?öñbó¦èºÄõñzl “× +ϧ4Ì­çn't>ß»‹ˆ_é.åWøž^PštÄqœr6¤ñà¥:·eïâØâ<öùF ÙεbŽé¼_yÍ„²Á¸dÇâÚ¾­âÓÌûQŸ7 [~7çÆŽb‹Ä;¹²¯½xÆVú‰¾éÍ)2eAw,ìRM…X ;•ÒÝ\§î³õ*§¿Šçá{|GC·¾HiÎSÿÞ6çk}Ñ"pˆóö®hj=ú|:¤¼x‡úº_?m&âíú_Ùêëp½¯°íh?¯]Nœónoùg~Ò(âe:ö·3^?˽æx§Õ>§cG”+|"ž_§•ã7»6�÷ö.¿HÄk çu¨‡Ê¸Â&ÖD|IÄë} íä8Ñ ƒ¿ñwŽÝ9ÔpjÜÿ´h„u¾æaéy…€¤”ØÇ‰’4ç”È‘¿·ö:xÃ|Dçý–íohœ÷¨ã.È2ß~JqÜ¢—'%«Ñ”ò}®7˜‰¿‘÷”Ÿz"S‚FñÉåà˜ÚíNaK•'*„|)r¦‡Ò-;Χ×tž<ßeWSŸYõZ4=‹¬3z¾ˆI;“h&çÒ”ÎÉÇVʾO�X4ÚQÜúø=õm›ÍF”'O<Cþ,T׋Ä7—Grô¨mOxç2y*:«×â©ðyÛmjÇoèš…¡¶w«fÂávD¼}÷j‘øRçbÉ=.}o>¦#ž;¦¸èp}z²øžL¯èZvÔÿ§â{‡wð“\ÖVl¯–ú |iWË×ÿÎã-¼£&¸-þƒN­ÑÛùä’zýr+£üFµhä|¸Ô hð5^Q¿é9ä{åÈMÑÈ{:µ:gòo«¾~“kpÏùý"ž‘)RâS Q¾^u uØ"|¯kS+âÝt†›‹(`£ˆ¯9vç¨Ë‰t¨¬ø£3†FÑä£A੆Ù7k]ø™O´¸¢¤ß[äsòsŠN„W(4ŠO-nJÉj'Cæ´úD”Ë%ªŽß¡MÓ³p)F–Ê®ò>ˆxþr´MßTŽ«QRUQ .;w©+³ºˆÜqã=.yo]ÎNÍ»nÙ¨ëö]üäÚ"¾ÉWèû) ªúÚª "l™_.:BOEYt6Ä´„ß›wò©A<çÕ‹ÎÕÓHtÜâ§µÁ…*ïÚ÷ȨÜö8~,Ú¸¶ü×ïcÖ½6�÷ŸÞüõ"^6>*9lЉ7Æè™rž…ë/=™†4hŠÄ7»‹è]SúB­øÈšrT/š⺥´Þµk£u²Ìo©¼ÞŠü1× ÝÑUéPÍYE|U�•Ÿ¿It®" Xá–X&â ;—ï«ò>ˆør*o=j?òŒ*lSÄ׉O†?‚˺Ž÷<tN6cu_=Ü  —ácŽlÞpowµÏº"~Ù±2o”I_𨦠lÑ.÷zeÑÎíQíˆ&—?!Œëü#D~¯41–;)¯+#HòYŸ6¤ï°/üٜʣÏEùp"ìë^€€Û—_,âªå¡ZZ¤Vx"^¥ÌØ"^íʼîÅ„TeÏ#åÀ¥s?Âü%]¼?£Ë¯I%èŸËŒ..^Ö»#ËQ˜®5)zû"ž„ÇÕ݆†~¥†yU¸áé è;ß;GÂÄ–¿79Á¨üüE|…ê;,Ñô,¿SÄËÎõ1%ç×Öˆ†çºˆøz â—û yt¾™GÕ+£š ¶—i/5)~’šàC­½Õ³6¯5_}bªå~Ýk°ñÊ9ó÷Ôf TvET“s!3Ô¬ëºÿ"Þµ“½ñ„Ì÷e۫аÝÎéJ ¨ù,8Õ÷džpÓ±{‚+θly‡s›£×µ¢‰ü¡gU¾Î/ˆÄËHÔã”®þä{ÿ[^Žt} ‹&q´�rŸ¿¶3t§tš¼[Óô,wñ²~p^qͳ4\›ÏX±[a#ñªûÓ üé4•óü2árŸE|]gH‹äºò¸ [ñ‚"úþxÇõRÒ6…}\%eívꉌ«É§Íi/\v_Š{wÞ ?ÛÉyµS"Oþµæp™¯ÎšÏé¤äë×¼6�;kE—-‰ø‡ l�n9õârhE>9Š{â4?i:øƒâÒ z´§!W³V4Ɇ䉵zË ™!©ièWn˜WB‰v[-ë&G8•§iE…-ˆø [W~‡ÛñRë,r唯ægi¸¶úáëGe¬Uw*‚T ˆž(f-k!ÇÊ„«NVWÔ–GF¦É ZZыӔº;zϳ칶6±•VGäß¦îØ© ¿KÄ dä8ÀÄV¿­îbþŠ)Q5°º¯PeH¦n5æÐ³˜Ö?xçy9ÂôO-ûp¹Í©×»¬æ‘sý:¶¦|yFؼŸ¼U“¬%<!ûêy:%2°4g;]oË ðsþ1I÷^Ö¸6�»D|�`«�HÁvFƒÁ{½\ N%Aa§"™ w‰É¦±Y kùWþxTC/C''`/&[ËÙ=Ü–Í iB7Þfø\ŠQ= \ `ûx¯Í›¹G=ª%÷™‘1Ƕ pç®–˜äeï|“°—°ê;\áYJ¶–)m‹û*>/žG4ö£óåϲ’Ý1,FÕs|½v¯«a[ÚKBV:3«—G‰{¾†%&Kß/=_u¡€íŠx¾Mîøñ |N®;gt)WaaÌ;Ó÷ÓxvÙu7»,:ç´7O§»v‰I§n¯‡ëDÙÈþUJÇÛÈWȺßjÎ9ߪˆ”æ°hûØi…ÝImL{YPùÕT¯ç ­ù*N]”uÛ”±2«]€Ý˲ Dü­���lÙÁòþàÑï†;XË~�jM¸#÷+òþØq â�[��ØœV÷´aÉL�ÀC">�°��€»âM»qS«��ŸÞ„ˆ¿#°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�ì>?izQzþ™fzÏý@Ü×ð%툢.e£½x¹RÚ:íÒ%ƒozg~Ðø¼Oùä§þ�š°"~6¦ÁEJqÔ¦th7?i’?£Hœ“ϻ؞P6þQs̱8ÇwýÙýf=[ÝÒ4?ÑÏènµ“3ºNi®�€ðÜÐ(;¥ÓÁ„æóe!˜]ÿÅ”^|¤ñì×z§ù$§nKˆ÷þ÷õ(°0Ýn”´z4¸ û®æãs:ÉFh¯�øE°/vÙ’ˆŸÑ0mk‡ïˆxÑ(œ÷ÞѨpþsáczu2›]³kJ;§ÁNÖ·;¿Œ:-Šó¯zm:8¤8[-Æ Ü³þPt ��`XÀŸP'½^ø#ä }Cã«>ÅÑEÝœ&k¸é»ù¨o4HQÛ¾·;ó•ò¸EqNS½g߸¦ÔZõùæ_(ö††Å â€ÚKê—q5p99ÞÍv€]$ ˆWHçáŠø Ê1wŠ<‹úS:ÞÑýF¶šæ—D¼†;3RÈÛ£5Ì>SR+…ˆ�lœfÃ>µÛ}ÚvŽäF‘å£|Y'MCú¨Î†ÑóŸ4¼¤vô )kñƒÆÙSçÝÕÁ¸.µ’ø#ÊÃèœâ•£øÜ!âQóíu±��õÜ/K¤÷*$ŒïYNf3[ñECiÐEŒ¯spСyk¯öñvBùô?þcõ™� „ ´jĺ' ýÖ8¢oü'¥ÒRœ<¢›à­êþÉ´ –?‹žRò¢CQ! -мn½éùtHyë´KÑ9ÈG²­PíïãÆ¿iœ÷ĵÝû·SUGdñ=á?'_hÐëˆÿ«TÎùôŠz2ß´uÏËŸÛŸñ9Ífuz8å4K´]D{ça(î©ó†½ÑþÜñåâ<WÚQü‚^´­4#Ùž>-?»ïºEÀˆ÷ñ;ý“þJ‹¿Z©ŠÎ7ݳ¼–°C¥�„€ë¦Ë/ñº°Si4ì /¥³ð;·ûÊF¶ªñÂ2ÕF8gnÜdc¦ãaÏ®h ŒítCW4¨MÇ�@ =©éæ‘Ò#¿ï(‰xµ´˜ÖÁ˜…(çˆð+mEE}£vòñösMQ}NÑì %ª[ÔNr™—/så­`<_ôœÎ²7”]¼ÿ÷G“Õq á­Ú£?(K_RöùJúЧé:MÞÑh|!ž—$ìa›ŸWÝh»zW4§vïOJéûÿ¯²Ê%”Ý¢v—^Éë8¾ÜwëYåóÙçm¸®zæù®(_vÏv›�Î=ñn*‹p”2‚ã‰ÝS‚Šx½O¡ç'êŠøα��`£EhE¬{SiÊ¿ëÏd$÷ˆºù}œëÛí¿µ_·; ‹¼¿ŽnKTÇ¢”/ýŸikt‡aéè£È…oÕçmŸÐ/¤ ;)2½è¶pj|^}}»ãPz¾ïÂëóŠÏ¥0âØ¬’Ï-:+ÅgÚ—ËÎ:ÏÂnPLý½Hiº®' ¶æ=«¶jô*�Àøý"~™ã–pžÝÑÎôî·+âµc5 ¥ÜÇ“^?Ð…Fnñ5Ç�€W¬ÿãóÑJðH!þCײEµëÛKów;–�öH‡RÄÜÓn(©÷9QñZ¤wSOŒ`6ÏnVF³Eºú¬þyˆ×”Ùˆrñ¼…ؖDzØÿœË”›(>·{XPzn¹CÝ£¼>OË9±ïÑü}¼x¾ÆëºßuÞÉÒ{6éIV$�”ß,â—;n‰tZ»³”ØVE¼ÉS4Á|BƒÞ1©¹C4E⛎��éƒ\_­ÅhÅGëI¦ÅÊY,�Û–ÿÒQÛâ{Ú×ÿ#¡%ö¤ŸssñmÊsٮؾL§˜‘\ôµè{rSOŠÑ~¦£EG@Þ³Ý iz^îܨù]*í‡Qí¢Ù¯æ}ÝL?ÓßS#Æ îHò¤:NQ‘žäµÖ÷|6¸–çn¼®<Ö~ÿêùM{²üžµ½ìŽ � (¿WÄKÇÛ¶¢1ž8c&³Î§tÝïRGçî›ØJ5:¶ˆ·—˜\ +{êáJÝp´^ÒÅû3ºüú—ñQòþ¹Ìèââeý±ˆ”��l¤ˆ/ _“×½×öÈžð –ªã¤Ï~N!Ê£]}d_®R@Ø7þþLSq^s­ùôõ_<¦vtD/²ôqì‹óùÛE G‰mýCOòzâ~ ñ½bp¨étýñoѾ8‚YŠZ…7ç|Cƒ¡¸ÿù²çHâMçQþÞøu!¾Ç¹ðõÎäS ߣ‰Ž›Ž“ùžŽ|ËçŸ]¿¥GÂÏ)»ú$: &ýç5å2¦éº²mš«Ñÿ)a.ƒB¢ý¸ÿ=¥Û%÷¬Î½;¿çÀ>PÄ»?bT2+Gl jTá¿Ç?(’wFÀ3ëÙªéÇžD#™¾§Ý¨«Ðp4䜮²ç¢15ŽUGƒLãÚxì.á<—Þ[¢±¨ûÇÎÀCFŠ6oòKJ²¼ì— )>—U'¢¾uèQç”.¥°V¢·'Ôgÿ#G 9J;)§ñwQ…`ìôþåâ² .-sx£Wœáûás¼£a)"l§…Ô`RnLþ{iÄ×íè<ôÂ.{^«k'”幌\/üŽžÔ[ÜæØS#;|ŒÚ¢8¥Üúñ¿bÅ~'ùˆ¾³ô˜z—Óï°ø›©»®>¶SÒ¨öVÌĉè¸HÛ6Ý3ûWÑóåô�‚Á~ÁeK"þá[mˆx�ÂÃâ÷Ä þݰ >-ÿøÔ½†G+þ‡ÒôDÇâÍÆ)ÏÅߢ³^ªÉª# ¿•ÆÓ©Éé�„">�°�`™ßQÏ—ó[ÐùÝBÀŽ&WÔ‹ÿÐÑà@ŽhDÅÒ’ =r°– _qDá7ãrùMx�~9ñ€­��;Éü ]¾þp/&&ªë®â]»¯p$ÞÌg2©0œ‚ô/+åg 2•Å|׿ôðï‡óâ/)5é7�€_ŽOoBÄߨ �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�Ø}~Òô:£ôü3Íôžû¸¯á;JÚD]ÊF7z?¸_)[¢ý:¢dðM￞[šæ'RGDÉ€nèÏû”O~êÏXPÄßÐ8ïQ[|OÆø ]O}…pN³a_wBùôVïãÆã Å‘úîA»Gùxwõz¶ZTØêQ;9£ËáTX ,0e¦EqþUïs˜(O:ÊŽQLýë:Úåôâþ'šþRc³ É)õ;?¦tø]fXõ…]ƹ7âØú:À2nh”Òé`Bóùˆ²Ž*S¥MÔ«ôâ#g¿Ö;Í'9u[B¼ÿ󗸯G[œFÀŠçêd4~¨÷f@I«Gƒ›‡j€ûÂ7$ÇEÙžÏé$A€ ì³\¶ âçÂô(2â{>¡AO*s”YŠõ…ˆŸO.©×ËUã0ûL œr¬ëÙJ1gÔ)‰R+ÚÄÂ-[-Æö|ÖŠ®Á3ÿBy÷µÛíÿ†ý—‹,Ï<â˜;o))l+l>øƒâôúEY(P'ÉhPÛI]ãg×ÔOÞÑH‹ªùôŠzñkþb‘v].í2f„|á‡EÇòª/-Q7§ÉEìn>ŠÅ¨ûAê¨:wge±ô“&ùKêkîdšSÜh¸wèv;Îi*ÿ6&;Àö;Ñ­âþöîLE–ݹþŸ¢s*ñª²µRËQËBé Ó±;yNé«§ Žâ³'{/âk¾f©òO(ÿÐ;kО’Ý÷n8ŸQÔyKƒ‹çÞ’;DÇrÒBØ·ëîó:FQv»/³dqþzy‡aå{äzrâD%¹N04Ö@rµûåΟôß‘#pµè['ýBú¨Î†e’;°/©= “Z Ÿq?+vS¼WQë ÓΊÛaJ­’æaMÅ£´ÛﺂÝ&Œˆ×Q•Ï¥¹RÚ²ïÂa?üÖÐÛ×Ñ:Ý¡¼Ç­Šø¢¡4¶[DÀø:êñ·±ûÌÈÆüÇê3ï$²SóX—Ÿˆ¯®\þ×'ìeCö$¼ð]5²²ò=ú;ÜV¾@ ²~µjĺGàJ¿u`„¸ÿ©ÓÃ)Nž ÑÍõîV§À_ÔÖ‚ÄògÑSJ^tÊí†A¶æ»bÓg>RžÆâÞx¿èä#Ù)–"HîãÆ¿u:Z“@×Ïè‹æÓOÔ·ýªŒsÛu¼Ø×JiXjºTK~&ŸýFß.¾?á2ÌÈŽÒÕ1Ÿ•Ÿ»É.n 7y-¾y~ÊL:¡7EO3Ó•´_DíWo)í<U6Òï•¿/¯[ØŸÛ¨ë{ßá „iw;sâ܃,Ñï\û½x/º}’ïEŸ‡¿3ŸÒuß¼Osœ°Q‘rj_ÃIE4#ÿ¥{ý²H1t;¦ö¥úݰý&ÿ¨4LS<Ï d´cc{n†x†ažê÷#¾“謫 GÉMä}™ºf½ÓöKÊ„/ÕA©©D}Ú™Qð«àòärwoœ\‘‹¬£E$‡#*©N¨²³á^çÄkjE¼¨¿2ÕÆv¦ú8™Vb¥i'Q4¨MÇî$ª\©ÆŒËOijSŽ= .OÏKeŒú£Ê¨EÝy· Gýº4.x¿qŸ®œr¾ò=ò»>rÅ„€ËÕC~[@rU"Ýœfrä÷%oü¼Ó•`ŽU-Ê#§ít‹´Kå皢úåH±L"Ȉ$•š¹êò|Ñs:ËÞPvñJüßéÄ—ð¥Ò趩脼¦®ù|©¨RϺxv}þTåä}¼bö)¥Ù¢ü[ˆYq•ì¢ßQ1#“æÝøßwtV~ÚzŽ~7v‡D~ךs G*‹{æ¶û Xü>}EÙé©°Ÿ…=ZØCžûH¿›ÿ–Î-Ÿ§ó†®.aOçÙeyÒÏÊÊîyQæÔû4ïPÊ7ÇòÞŸÒÙÕ;:ç/Äy}BF¿«¢œô3ºH«÷Vû ÂÆÜ!å9!Wcqm~·:ÝthŠTbnwåJÛôÅÙõ³w¢ÓÄöý·|ß-=‡I½oÓÉÕØm9�D¼À™Xøê÷®Uådg{rbò(ëD<ý]-rB ¡ ¨ˆ×û:Š`¯+âK8Çî ʉ›rÐ$â=ûý"¾U¸¿FÄËgi?¥¸Ó-&Ýʨ_ò¶-Zùå»÷Ô!ˆx°*ZðUĺ7•F¡"Þú3Å?¢nþEç cûo#„,¿¾,EÞ_G‹>×Q9_Ö#~´(]uôѬÙ1ð¯t¯®�ŽøLÔo!@e›g"»kØE¿£E[àŒ è‘1V_$ž"©Ý»Ò“äU;l·1eѬ¯ Ñ6ç6A6}î’=tÏD¾µU÷Äïå)µ_œêUô{4וNJkTæ€9"y½C«¬é²hwÚϨ—¾§ÑìVß{M'ΔûöK 4<ƒ´ñ±§\ÙZEµ»¦MVm¹xï…Ýõû¶¯Í>Û¹Wõ½¦.x¨„ñ%TEUÂZ¬lM"Öé™ÞcøYÖ¦VÄkÇ`J¹‡?Ð…Fnñ5ÇîÚ¹/œön‹x%~Ês;|K§–£†ˆ¿ )Œ\±nüO°j¿.EËy\ËÕ%açþÍßíXåߣJ¢Ò=·@µz_Eì6S:w ñ- ³e÷j„øâ|êÞŒ˜¶ÛC÷Y–ØÅ<—´3¹8%Ãtœô±|ÝïÒQ³(_³e=“Ûé(z2ºSTºgÓ qîQ~Æ‚sR¤»Dñ¹šp_ºûØ…ÏS#,vgP …³¹?ŸýõýÉ}úÿÅ;Sö®+ êÝ8¹öt‡Àûîù:ÎhŽ|^“2cîË.gîûv:+ÕÁò:ÁCǧ7·,âͰWU°(V( ²B•ö}f«"^:¯háäpݱ\z2 Õfˆo:v×ÐϦ:{å­Üi©áü}ON|Uàr' |N¼j8Ü2ï¹÷•ï±ÚIa¸€œx°Ò¹Á[é]’…_W"‘ň½Z”ŽdßÓÂËøéÓ­ò¯#Èå„MYÜØQW‰ìä ¡¥ÅaIÐ/Å'œl\A«D¡Ä“qE£>¿W¸úp“]Œpm‚ô‹y�Ê/˜�™ØŸå4£éߟ%iõ5 ¿¢ÓwlqYºG£žÎ‚<¾,^U€‚ïóÁ¹íÓÍô3ýÍ‘fYÆÌ{qÏcp;Aîqåè6£FŒÆ`_x¸°™û,%üå»þþS¹¶¬ ã/4“m”]œô´’ ×”Þ·xn™ åÞ«.Ov� ×w—í‰øbRHM4@²DÄë‰.¥Ï=g[©FÇñA7KL.†„•sÑ•\7\­—tñþŒ.¿þ%…n”| .3º¸xY¬ÏÖ;EX°-ÝÕi|û¤Su'—úöI´³ïv+ÎT¾ÑЖœ57V¯Ä»¶ö­||îê4¾}�ÔPX %ŽêFm¿n '鳟SGˆÏèEFW9oX /öM#•â¼æZ2ìÅc!ÚŽèEö>zç?ñùÛEY–þÒL&4“!‹È«}Þh©‡R”×À÷{¢#çN‡DŠ5áW¯þþþÛóûF4æÿKù7>¤xs¢È&¢mðÙ ù\Ö;ðÛE‹øø+õà}T‘šq£&ŽVì`Û‡ü)%ÉSñ÷+ʯÿ-žÜˆæDüý‰†â\ÊÞeÑnRvÔó>¡³Áµêª-3m–étð„ÙÿÊó.Úr]&Dˆgÿ)„û±ŽìK_”EÓ)º ëùû&ºo&—:IÖ(ƒl3£ç” þÏéÌ0刡þ¾—mÌ“XÏûÔçãä{>ÒuBÔù[7VðRÛÉ®_‹}ÿ^´÷É ñÇ”æ©É°u/ ““Áƒ&ˆ7Õ‹mþ±"WÄk"®Ç×T…AQ wõležß<¯½‰F2}_^C¼X…†m{NWÙsa+ãltccׯcwz/]wx9ùÊÜX¸k°› ×.,"¬Ð- sÑàêN[e]÷5îQˆwøSëïÍ0éDy,„‡%ø¸Ü.±‘éPr¹4B�ü~¤85~¸É/™(¯]Ÿ¸\rd^|.'õM„/êУÎ)]J1¥D~;N´à1+š°oÊiü]i!Œ;½ù;ÈR˜Ù[-Påýð9ÞI±©ð ³*î3ZQT)ÈL´Û<“~^=b'o<BZ|UŠ.“ÿ.$ ÿ]µV6çóQ¸Ì.¦>òçg”ç—5íßwCÛiFxù˜üšHÑnrÿug È×¢ÙA1ªKâ~Š<oÙ—÷À÷i~Ã}/Ú§Êgiì-ïK0èwµOèÌø{Î{~]ä˜/:(ü·yÇ5ížOXKêžA`Û¸Ðy¡oŒØ×åÆù¬|_Ófë÷=¹÷cwŽùsÑ‘ƒŸ5pYsÙ‚ˆØÀVaY uªÍ;¬½í_l•Î~KQø-ܵÓ÷­N£XñFd;¿Ø ÿp`‘uâ4¿@§åŸzˆè¨o*«ð ƒKÊ/TÞ»?Uì6ÀéSÇÌ'�À·õ.ñw¶Ú7Ìè/bÀþ0¿£žwtëW£ §‚Œ&üËþô‘‡… ^8e¬8^aÔìÛIûD|�`«}ƒÓÃ:ˆƒýgþ…._ØâhÓæ¨´²RY22ÏsÌx´Ko턲ËaÍÈØMxDõ’Òþ�ï,">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�Ø}~Òô:£ôü3Íôžû¸¯á;JÚD]ÊF7z?Øuæãÿ¡Óü Íõß�€fŠøç=j‹ïñw£ø ]OêÏlæ4öÅq'”Ooõ®/”wå÷J['£ñÔn¾×Õ¹¥i~R}V¹EÔNÎèr8…S�üBnh”Òé`Bóùˆ²ŽÌ®ŠbJ/>Òxök½Ó|’S·%Äû?‰ûzDÉà›þä.|¥<n©çÚ‘vf/á²vrû°"ì³\¶ âçt3èQÔîQ>¾a¯Kƒ^Çë¥CޏQXˆxî÷2;úóÉ#êd£³ëÙJ1gÔ9hQœÕ{¬hÓÁ!Å%{ÔÃö|ÖŠ®��l øê¤× Ÿc„|áÃoh|Õ§Xøî¨›Ód Ç|7¥Ú‚¶}o[cÝvæ'Mò—ÔþšqŠ­ûöiNq©Í¹ü ±({Û阰ÿñ*ªÑJ-‡s3 $:*WNޏŸ<§ôÕÓ’ˆ¯ ¿û„²ñ½ã~³‰ˆ¯u¨³kJ¥_áùgŸ)‹Ëv�€•Ñ#£í> í»ôÁ‘#pu°æÀñëMHÕÙP¤ý¤éà%µ£g”O|£ºwd­vFØitNq«Gƒ›5z0›r'»íjdm�«FÄë¨M” ¨ÈV¼RÚ²ï4L…€~Óé$u"^7;4ĹU_4”Æv‹_çà C=òÖ^í3#ÿñ«Ï ��%dРU#Ö=Wú­Kt q;þ“Ré‹)Nž ÑÍB÷V§M_Ô¾Ÿ#ØuÇ;^J¶æ»bÓíÁ|:¤<Žñ~!ró‘ŒÐßSjÉ}ÜÁø·Nílèþvf>ýD}Û¯Æ9MeÛu¼Ø×Jih7]Ö½FÉMÆ9%¶MgcºÒ÷Å/èEÛ¤ñ„7–¿æöàÿ5Øm@YÒÑûÅþ¯â¾Úêo¶áäÊùóJÛi¥I[ß,¾'žo2½¢ŽdGî‡ê8‰ÏJí¹ÝEO)yѱ>wÛ(½ïÕwïßå7U$þ‰¶3�`\‡\î.â“‹bê_s>·ŽZ‘ލ¤”È“^'âw+•†YÏVš†¡M•j£¨l ôqfî€qÒºñ(Ô¦c� §‡<£¨éf|ä÷%oü¼Ó•`Ž+Жï2íJ§h æRl¶¨ä2/_¥f.„ºô›Ñs:ËÞPvñJüßÓ9(ðµ3ºm’ßãNÈkêšÏ彊N‡Ç_KäçèÅÙõ³w”šÜ}l9Ò÷ü_eâ¾”¸VÏÏmh¢Ÿe5»©w Ž^ˆgîgt‘>®±§>®øL?ú–Òä}¼ §”fˆvúoÑ v(®ÏéVÝ"]VµOf4F—¡"`¤ÿ.ÊNÓ½3üŽE‡"€•$â³‘Šˆï±˜õŠ#ª¢³³=91y”KDüŽ¥Ò0AE¼Þ§ÐÏD‚\_Â9��l´ ªˆuo*BE¼õg2ŠDÝbuW;/=ÞAÞ_GG¢ùØ£r>¾ô&R­…画Zt»é*²cÀ“hÝp–´KÊgGÔî]Ñ´¸¸ n-îÙþ+ÁÛŠÏiTš,ì³›è¼èyªó¢£Ùæ¶_ÒÀ»„Æ}^ù<âœñ g?u›,î_^þ¾á<2`wôl[èë/Ú*ç›î©|�ÐD8_B9\5<g ÝU6WÄú‡8ï;ü,k³r: Ó^?Ð…Fnñ5Ç�€W¬ÿã¬Ú¯KA÷CײEµ+tK«ó6ï "ë:jí9V g½oM1X:w 5vóð—µKºážï¹eŸÇçŒ^¢Ô9ñØ-âsŸÐ0O)Ž (,›£`„øâþÔ÷Œ˜¶ÛkñyéúüYÇêx9¶0v—÷/®#S‰LG­ùÞ% Á,�@ŸÞܲˆ×NðàЪø6M‘x“Û¶*âeä"Ò ¥pþÒÉË¥'óÁM‘ø¦c�ÀFú É6hAZ¬ ¿®Dûê¶å¿tJeñ=-à ÿ³ìx—rú‡°}™N4â·$è—⦖¸èzñ¹¹þO²5ó ì”™ëî¹GéóM”ܵ›Qå€ ÏÈrŒ¿ÑôïÏ4×½+uÿ‹çÑÏo:R´›Ž€#ÒågV[­#ë‹g5ÂcÐ÷¨ç)4ß»ú®ùvG�ЄOonOÄÏÆ4ÈËÑû¨ñj(s÷*ô&¶RŽ-â9‚n–˜\ «ákí`Mž{ë%]¼?£Ë¯I%èŸËŒ..^Öë��x°H_•*Ý¡nÐöëœÏ}¨Ž›Oéºÿœ:BÜE/2ºú8Ç(Ǿi$EÛ²ã]øøvaV‘sæ"¿/î§Žð\FI4ø~OtdÚé`È`‰ð«WÿGÿíù RäÚ Û9yaÃë·ô¢óHÜósÊ®>Ñø»¸‡cù. c×nZ¨é2ú÷XäyW z‘žÿ/}äß ‘§ÓP¬N¤ÏyvEC~V«ŒÈI¿/S[œëEö>òrÒ|Ç,âã?<é<M÷.þÔŸ0ˇ°Ÿñ¦Ç½ÊÕ‰øeÑ‘ûËz¶2ÏÏÑ wdúžÒ9jŠUhضçt•=©ùº±1kã±;ŠéŒùšu˜ VÂŽîryJ¨°½íU�x`Hqjüp“_2QTÛ3›È¼ø\Nxœ_Ô¡GSº”ÂZ‰övœP_Oxl>Þ…gi9G-�åý°{GÃB4®(f+ÏhBè´â3ó›'Œ±ˆ“7¡ZßPqUP†£Óß9 óè1õ.¿Ð­ â˜ûàçQ“u«v”V"ãw1PÇz;ULÀHå¿Ïu‡ÈØÖ±Ý-„·ùÍsÜùšNï_:ýÇø]þüŒòü²¦ýrî]\MŽL,ñÕ�€2\—\¶ â6°U@ â ¸“¥"ð×ÃÂø´üãSàþ1ŸÒð¼Oéù5M碓5¸¤üBå½ûSi-xô¡#Êž;�ÐD|�`+�À.2¿£Þ½˜T¨#³ŒF“+êyÓ3À}B¥z:#½r•ºãæQŽîŸžBÀ°ñ€­��;Éü ]¾þ°Xå7¢Ò>x$ÍJe÷‰ç9p<ª©·vBÙåPO\õÀ"?}‹��Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�Ø}~Òô:£ôü3Íôžû¸¯á;JÚD]ÊF7zÿ=`šS,üÿAÔ£ÁÍ\ïÜe¾R·D›vDÉà›Þ~=·¢hHm%º¡4>ïS>ù©?•p"~>¥áyBmvhµ“w4œú Üœfþ8î„òé­Þ'ß¿îÇI‡Sÿz*Ž4ÜÐ8ïés‹B¿¡kﹿÓ0=¦ƒ8§©Þ3ŸäÔÔ÷[Dldÿn¬g«Eå¬nl·3ºÚÏe¦EqþUïs˜(O:ÊŽ•òcc—¥CŠûŸhúKÍ‚$§4>Ôïü˜Òáwý™aÕ{vçJ܈cëë�˸¡QvJ§ƒ Íç#Ê:ªL•6Q¯Ò‹4žýZï$}xKˆ÷þ÷õh âÒêܹÞÌéfУ–Z{ÂÍ€’Ö¾tJv™o4HŽ‹ò>ŸÓÉu ØMØg¹lAij#ûƒºRla1:§X稛ÓÄ)q Qm‹x%¾£øœF³[%Ø¢gº×©œdÔîQ>nr>¡AOˆµNFãÒ¹Ò$¦:…ˆçÞë«rä†Tô„²ñ½ãî¬g+Å|œQ§$Jí†E·lµhÛóY(º{Ìü åÝGÔn·kD¼(?ý—‹÷,ËÈ38æÎÀ[J Û ›‹r§×¿(òÈBé„:IF.Ë^Ö¸ÇÙ5õEgy¤EÕ|zE½ø5 ±È»Ž.—v3B¾ð³¢cyÕ¯õëMÜÍG±u‹ut>ù@ý׺­Ò`íܾ¿:¿$‘ú†àýC··Ej‚NNÐí·¡G ¬@ÝÞ"µŠew®“ǧè\=p‰xáÈúï-Q-Äsö¤ZñYŒ<§ôÕÓòg²°ÚÃwì´cU•¶•Z@åxÕPœœüA¯ž6Upí *€»±‰ˆ¯uîB˜¥RȯÐј}¦,>,ÛfïгÎ[\<÷6†Ü!:vaaß®»ÏëEùê¾üŽ‘Åùë冕ï‘ëØ‰•ä7ÙB¤<¸\öE¹_îüIëŽXjÿ¹Nª…ôQ Ë$w`_ZÌh˜¶7…·CJ[Û ý^Ø­ŽTƒÍ¸¦Ô*iÖB<r»­î,ØE‰xÝ{/@޶ ?üæôìMÃ` ~Ý àïߪˆP)R"§ÕÀ°ð•HÑIh쥫¨Î¶ÔVE|aó|‹_çà C=òÖ^í3#ÿñ«Ï¼“ÈNÍc]n|"¾F¸r9t†„}Â^6ZO ßU£(+ߣ¿óÁŽÿ°ò}�jõ«U#Ö=âTú­+pÀÑì?uzØ!ÅÉ3!º¹ÞéÕÂ?µµø°üYô”’\úxó]±é¶d>Ržê´Káß’|$;ÅRðÈ}ÜÁø·NG[E\[mBqMöË_©j¥Žý¼Çô*ûƒ:Þ  >É{—ö¸Qþ[´O5+ÎýCuVÄge[4ÙÊmôVäæó}(3)†Þ´=ÍlLWÒ¦µ_½¥´óTÙM¿kþ¾¼nÉ>ÿÖ÷,¾Ã 3BîvðĹ™•f+Žý^¼+ÝfÉw¥ÏÃß±Sk‹ã„Š4TëœÆ›§ÚœŽš«t¯•Þ傯òãy%£Ûó5–ÞÛôŠ&ò¾Lý³Þiû%eÂç—ê¥ulgFu@¸ì¸ñì;Ô•G@ލ¤:EÀžÓ·Rád{ŸÎs/òœEÅ‘é:Zä²ó8=Õ•G;Î: •†ÙÈVµ"^ÔU™jc;N}œL+‡i4´C(Ô¦cwf%..>Ï7öD'¸,<·:†lž”Ž*£uçÝ2\öº4.€x¿qŸ®œ´š•ï‘ßõ‘]g4\®6*‚†åªDºÕH¨×w”D¼ñÅZLK‘a\t0¦(œ¶Ó-R#•ŸkŠê—£Â2]L#ˆTjæÂŸËóEÏé,{CÙÅ+ñÿåyÝòKØÉgxJgWïè¤{N£ñ…x^ÓVéçmé¶H?oýH¨zþ…=t‡!B9yGŸ¯„p|J©è$ÙßB8Š6o%[™ÔQ¤1£•æ}ùß‹÷>e0¨­çÝè÷e·Åò»Ö<Ù†>÷Ìíù'pÇäé+ÊdüYøÜ£…Ÿ’ç>Òïë¿¥sËç鼡«‹„ºî³Ë2¦Ÿ•;™â=˜r¨Þ±~¯¦ãP¤Úr›w´¾ï²Š·üLþ¯æ„eÚ¯h{®Æ¢¤ò»Õùë+Ý×#zqvFýìè4±}ÿ-ßwKÏÏPïÛt|5vû,¿@Ä«Âݱò&Uª‹ù[ ô•E¼øÓ™´øê÷Ò¹’O„óJè¤è,4‰x] jƒŠx½OÁšpšÆ.®ˆ/ể(§jFØæç<öì÷‹øV¥lÔw»Ègi?¥¸Ó-&ÝΧŸ¨Ÿ¼-E†V¾Gùî= D<X-î*bÝ›J£PKý™ŒâYÁ+ª]ùÛˆ«Ã°,¨"ﯣ…ŒêX”òñe0BG ÐuFYd&) ¬I­ªž>£^ú^ÎÏ’m†òy­ó³i/®‹W�‹NH|&êüOQU¹4‘Ý5l¥ßÛ¢}pÚ6=ºb"ƪ³ã‹Äsä1µ{Wzâ¼jwívGùàEt_ÙCˆþ³¡8·noM”¿ô>uðÍD¾µU÷Äïê)µ_œê•ô»5וNJkTæ…Ù"s/vTµy¦=l|—|å§á*eÁ°â}ñ{/ì®ßwûå¢,²wîU}¯©Ó áE<îÒä:-&Y€W6±ÿÏS¹ôw¼‚[UxY±¾‹ké¡©êæ ÛIn¾ÞÚÔŠxíLC)÷ ‡?ü@f¹QÄ×»khG¾»-â•ø9´žGq;|K§–S†ˆ¿ ¯X7þÇ'®µï•å‡<®e‹jW”—þæïÚ£³ú: A•’€tÏ-P¢Fï«Û%”Fp ZÈÌ—ê~íç-Ý_#ÄŸ«û5bÚjǸ­\ÇVæY彈ëÈ” Ó™ÒÇòu¿OtJGÍB |Í–%6ÝNGi$”Ñö)ݳé„8÷(?S6³—Z¸B|XºûØ…T£.vQ …³¹?¶‘ÓžËóšÔ”¦wéÁW~jŸAwjõÉ*÷e—÷}«cÊ÷ª:XU]>½¹=ï‰lT©F)°*±.ô&’°@Otòˆ!EC$^VÈr#°-¶*⥣ŠÎGÍ/=™†jø²NÄ7»kègS²òVî´Ôˆpþ¾''¾*p¹>'^5à®öÜûÊ÷Xí¤0Ü @N<X 郜!{#2*eá{• dáa¯Ê¢£–Å÷´¨3þGú_«üëhq¹aS2²skû2ÙÉ¢J Á’ _ûÉþk•êP‚ëÔáâžJâÒy^='©VVD£~¯põ à&[á.Ú és”¯0A3±?Ëi0þFÓ¿?먯A_³ð5:}Ç—¥{ÈvÙÓYÇ—Å« Zð=p>8·Gcº™~¦¿YÈrgÞ•{ƒÛ rŽ“íƒ]vÝÔ°¦wYÅW~êŸá?ÒÆ•àÙø Í–ÝWIÐkJï[<·L…rïU—'« &\·]¶#â¥c|k x.Œï¨wnV‰¯G©{ü²—«'ù•QSL.iZ~±NÄ«ŠTŠm‘µm%PNÃñA7KL.†ô”#ÑZ7\­—tñþŒ.¿þ%…n”| .3º¸xY¬#öv±.`[º«ÓøöIêN.õí“h1#ÞíV§|¢Q-9fn˜^‰wmí[ùùþÜÕi|û�¨¡$¦* R7 hû^K$ɉˆÏ©#„fô"£«œ#¬Ä$û¦ Hq^s-™Föâ±ðñGô"û@+bšáó/RU¤¿4ÍÄÇ¢ÐÏuàÔÌtÑNͧzÕ³²˜²"ÓÒ÷FÏ)üŸÀ–H•Áª„’øˆ:iN×¾û7¢1ÿ_úÈ¿û!Å›‰"ëû5m#€Ï®hø·8Öz/~[iÿá ˜i¿U¤fܨIšÛØ6cJIòTüýŠòë‹·gDs"þþ$óE½ƒ²h/mòyŸÐÙàZ uÕ¾™vÌt:xÂìåym±.'¢Ü ijÿÂýXGö¥ˆ/ʧ±É]ü›¦rÁ‹#]E½~#GŠà^ã»”»,üå§þ¾—mÌ“XÏûÔçãä{^r_n0±Ø÷_©™’ä…øÎcJó¿ÔdXº—†ÉÉàÁFÄ먧¼9…Uâñ;ï½ÐyñƒG&² zÃÍ?„T#âKtûð=¯Žy~×V¼‰F2}_^C¼°-?ÿ9]eÏEcj‹Ž~™ÆµñØ]§^ÄËN »N|e¨œá†Á]ƒÝL¸vÑei‹ŽS:â¢qնʺîkÜ㬺Nü©õ÷f˜Is¢<"Ã|\n—ØÈt(¹\VF×ÀoCF nòK&¢k×'.—jE5o"|Q‡uNéR '%òÛq¢Å ²gß”ÓX¦B Üû—¿ƒ,E˜ÕbTÞŸÃþ1AK`ë=^¼í”i£\!gìa‰8)*Íóþ[‰J“"â D—Éßæ¿k¢Öê=ðy(\f+SGùó3ÊóËš6ƒŸßÝ ƒ%̨/“ÿC)ÚÍ +º3Pä¿«¿‹‘GŒª`“¸Ÿ"Ï[Göå=ð}šßÆpß•ö³òÙÅ;Ö“âÞ̓lÃ#Ññ9¡3ékŒ¨Ö£%Ͱì]ºÔ•ŸºgØ6v®½ú}L;®ß÷äJØÖî0óç¢#ß \®\î.â8°UXÚj+cj¶ý‹­²‘ÚR¾@ wíà}«Ó(V¼G§ÁØÎ/¶BÄ?X¼œx-¿;§åŸ õMϯ…O~bpIù…Ê{÷§˜‚ÝFu;5Eððà¶Þ"þŽÀVû†Ž˜xG’�ØæãwÔóŽnýjt¤»“Ñh¿<ìK* áD”e�ãxùHØ9¶3º ö ˆø�ÀVû§pu5ûÏü ]¾þ°ÅѦÍQ)(<¤××Ud$>Ñ£tzk'”]kFëÀn£¬—”öx¯ D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �°ûü¤éuFéùgšé=÷q_Ãw”´#:ˆº”nôþ{À4§Xøÿƒ¨Gƒ›¹Þ îÂ|ü?tš!X€*áDü|JÃó„ÚìÐ"j'ïh8ý©?´™ÓlØÇP>½Õûâû×ý˜"écê_O­J|Cã¼§Ï}@Qü†®KçþI“ü™ú®ÜŽ)~ן fc\¤Gm±ûÍÓz¶º~ÿDß§»±ÝÎèrh?;��„æ†FÙ)&4Ÿ(ëÁìú'á—Ó‹4žýZï4ŸäÔm ñþÏ_â¾Q2ø¦?Ù«S ž«Úž¬Ãœn=j%aA°¸üœÓ �Øg¹lAij#ûƒºýO4 ‘>:‚Y8ÇnN§"J‡,>;(‰øï4L…3=§ÑìV‰üèåv¬ÊIFíåcá&çô:tÐÉ•|vMiç´&2çn«Fèà>ˆxÅ|œQç EqþUï±–CгբalÏgý¡è��À&°€?¡Nz½ð9FÈ~ö†ÆWýZ¿ÞÄÝ|Ô7$¨mßÛ™O>Pÿµn«Æ¹ô¹ÑÆ"œï¯mùñ°lßߥ<nÑAœÓTïùýü ±(wאּñ‘õß[=g®„OÄ9ÜhûÊOžSúêiù³›%Ñ‘UiÙ1iǪœL+µWéxù§tœ£×·Ã”Z÷HÄ«aX[Äk¸C"…üÊÆ?ôÎfŸ)‹˶�€•Ñ#£í> í»ô±uJ~UTl_½é£: ²Ÿ4¼´:!ÐAžMEìíÒÖ ¾zÜÉ–»„­F»@•@"ÞE§ŒØÑrm~øM§“o[ðëN�ÿVE„J‘é8uS ýªT”|0öFlvFÄö0 è"Æ×98èP‡¼µ€WûÌÈÆüÇê3�@ 4hÕˆu8Õ9à ÅÑì?)•¾èâä™Ýœ®GT ÿd|¯åÏ¢§”¼èø£àÒÇ›ïŠM·%óéòT§] ÿ–ä#éï•ç}ÜÁø·N¿\E\«H¿|þâšì—¿QúƒRÇ~Þcz•ýAR;§±î?J®h"ÏeÙy6¦+ýQü‚^´MšÏKxcùp¾—ÿWcK¾—eIGïWi¤«ÙÂNëäãþ¿ÅˆµèÐL¦WÔ+žý‡êL‰ÏÊïªé]ºí–ÞŠ¹þ{Wèöÿ^�p?àúâ@ijcìP·˜œÂ•”™"bœ‡íúïVJâÛmïS©6‹<yQùeºN9JÄÎý2ãœ|!æ=C¯»#âųÈTí0ec ã‘Œ®h<L£¡Š¢Am:��Jè¹D•H· õúŽ’ˆ7¾X‹iPY9WŒqÚN·HT~®)ªÏQòNáççRX¶¨ä2/_¥f.Ä©<_ôœÎ²7”]¼ÿ_>ÙTž£c‰tù OéìêtÏi4¾Ï»8Éçmé¶H?omÄX~þˆ^œQ?{G©Éç—˜#ýÿU6*îU<+rÛ—èçsmé·½¹—Um¡Ž3ŸéMú–Òä}¼mæSJEG%ÉþÑ&¯ô.Í5DÒå©ùÞÕ{¿Ãè�{Ì/ñ¢‚ûÔ±ò&ÙQžœ˜¿×ñâÏÙˆrÓcbþÕ+Ž`øœ¿ºvÛÙY¯÷)´s3vqE| çX��°Ñâ©"Ö½©4 åGõg2Šdk¬¨våoí›íƒ¼NC´\Þ_GûlÕ±(åãKÿg|ºIá\cô‘Åt’ÒÀšÔ*}oûõÒ÷r~–‘0"W>ï±u~ÜíÚNˆòãµ{W4-nHÏÿ*žCzï@ Þ–œV|IàØV ˜€•êИhöª¶PÇíŒ|âœñ™èÔüÔí´ Š­ñ.u¹Z´_Î36Þ;ïp¿�0„ñ\Aã×Öð£“,À+›*,9Jû;¾Hvæå!Nv¬Gq¼;"ÞM§axÒëº0ÃÈ"¾æX��°iÌ{÷‰kí{¥xû!kÙ¢Ú奿ù»öè¬+^«”¢Äî¹J$× Ç%ð §§Îr•ZüâT=¯:§º_ûyK÷WÁœËùœŸ£e|ØâX£o(uXJϯmÇçþ>¡aÎ+¯Y‹!¬j )¦«ý({1í´³ë¼Ks}yÿBðËT"ÓÙ[rïLC€ €‡ŽOonOÄ{"UÜH¼¨ó²'nEÖ¥XôÔpZçæZÄA~·º ÙΈxéX£EC"ú±Î÷Ò )ßt,��ØHäúD->+âzá{•àb!g¯Ê¢Ó‹ïi±fü Ÿo¢±å„M9J,ý·íËtº º%A¿ ö“ý×jµ³�:\Ü“¼gÓ.9Ï«ç$Õ e݆y;HvJLÍÈqY`;¶4A.Òð¼€,§ÁøMÿþ,#þ«ÙÂÓ²“¡ím:¥g×Çšw»ô]áÎsÕô=ê¹ Ëî}q_vG�`ðéÍíˆxéßZ^TäÑ;ê»Nº*âËKLêI4n%æµÞeλÓkçýf2«\k¾KÒð¥â¾‰xåhmÏt³ÄäbTÝ·v¦&Ͻõ’.ÞŸÑå׿¤ˆ’ôÏeF/ë-l ��)âËbOTêFmßk ^éwŸSG¹èEFWÙ+±Æ¾iÄMœ×\k>ýDý…?¢ÙúXÓL9UEE½õ=™ß)ÚGd6Á©™é¢šOô:«geqjEÉ¥ïžS6ø?ÑžXs¬J(‰¨“ætí»)t]!­Û>yŸÂ®×oéEç‘xq«O4þ.Äð±Ž|—„±c˹îhµ_êç¸Q“WåyWµ…Š´GÉ]ü›¦r §ÓPŒvëg?»¢áßSa³eïR‹øøO@¯éÞÅŸµ<��FÄ먧¼ù¢>/°óÞÛ ?xdzîþBR޾ÿI>t¼¹ž¹§íÓñyWǽ{dúžv£PØ–Ÿÿœ®²ç¢15"_G¿LãÚxìŽb:#EnfÖ~Õ¦Z)eÆ^€†É3~¸É/™ˆ©-VMd^|.'7N„/êУÎ)]J¬D~;N¨ÏþG§ˆ(ß”+ÁÚ"¸÷¯EʈÔv*Š{ò~øö Z[ïñâm§LåŠ_cã?MÔÜ<ï¿•®ä®3õBZMÎUŽNçŽÂ£ÇÔ»üB·2°cîKÛIžÛ±%Ÿ¨ô,ü~úØmaR^Ú't&| ê${;çÐ#¾…ð^ú./æÏÏ(Ï/kÚ4÷Þµ—øo�2\o\î.â8°U@ ⋵O åwÃ"ø´üãS`7¿ÜÞ§ôüš¦sÑñ\R.-½!ÖÀ£QKó��6ñ€­��»È|üŽz[™Ü …íd4š\QÏ›Šî;*ýÓý•£ìÇÍ£ݯL4�¸@Ä�¶�ì$ó/tùúƒ?¥å£æ ñHšZ{ì 2Ïs×x¤So턲K7ÍÕ™§��¨">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø ì-³kJ;§4¸™ë`ùNÃ4¦dðMÿ ö¼k�v‘_#â¹áoRœÕ;³åIGž—·(~C×ÓŸúCÁ|J×ý˜"þ<Š©=¥…l¸¡qÞ£vÝwé'Mògê»r;¦tø]&˜ip‘RµÅþ™Þ¹=Ö³Õ-Mó}ŸîQ;9£Ë¡ýì�Ü•Ÿ4½~#Ê¿.gíåãýY\¯žS'½¦j­çþ‹2Q§[éP”j°ëÌ'9u;}Î\ïƒw½oà]°›pî²]?ÿBy÷P|¿e‰øo4HŽ„xxIßRäGtÐÉh,}GŽ…8?§Ñì–fÃ>µ£g”OX¨ÏéfУÈù„=Ñ(¾+hŒÎĹÛJ¼Ü¯˜3ê”lÄÎó%l—ÑÊ>{„SvÆÏúûælë::Â.éŸ4¶žiNqå8{ÓïüvHiË÷¹ÙN(Ÿ²=׎zõ‘hÑùæÜA4Çw(9¿¢üU¼YY«}»¬ðã¤Ôò×Nè¼Ô œËúÔ‘uKï}¦¬›èúÕÀ|DÙñóÊqóé&}º¸Ò×딎~Uc_c›(îÓU©Sò•ò¸U9ÎÞ”@±}ƒo³m^=g” Èß⺜S³äc¹sþŽþÊ_nh«†ç‰sšê£V·4κÔÍ¿”x×j«×l£!å©@ñÆuð¯œ^¥4\ÇXµ>Š}Ê5MK.¨)d|Y÷ì]�V†ë¸ËE<Gî:I_ÒSŸS,íP¿PYC{Jô+Ç©¾[Š ”Žg‘JÇÙ¨ä\”è¹?"^5Rea&1œƒ'”è5°Ba_#&üÎÊ ‰GJ¸Œ±Yi¸¸œi1Í dѨªpa7ß÷uç±óšò³§Ôñ•/Ù¡|ât¸Ä=ŽsÑëܱ¬¹÷è¡ôLŠùôõã§âÚf$ʲAŸû™ÿ™ Ôó·Ä S}Gñ<³êÄŸP6²ï”Ÿñyµ~ ÷ìØ†ëdË.#¾ï³ozD³÷tÖyê©£BÀ^V˨‰¼s]-Ý£‡•íãÀ>µÕÐYà]Wý1 ß^å~ôÈqÓ{ª…}$[EÖ飆úZýN#÷ñ]�V" ˆgõšbz¯T“îÒ¡$Ѭ䈵X*E8RðD‰üÛe¨ açÞŠ”Sãh¡øÜ¤¢äƒ±%¨°SÚ _ØC?7WýR¤·7˜Ð\ xµÏD_þã?VŸy×ð7$¾(R¯pñnyÔÄù‘èÅ‘»9î=zð‰Ûí°¸/Ÿˆç2¶¤ã+GÔºK;’¿¼±¯yfÙ:îæ4)(°“î`åÐÓ¹“¾-à‚MD¼ j•6µJ ïÚ&D^y ç{9¬{ïëˆø{ú®�+áÓ›[ñj(îŠ>yê „øRCŽv”Y‰•ƒRÃdïS©6‹<y!žFçB¨‘«à!ÍË,¡6‹yO/;¥Ýñª‘êˆsÊŽ 7d-}œIU2‚R~f†‹Íß5Çî u ‰´FPá>Ñ*( U¾E|Ñ€s9eA/:%AË×ypb˜{¼"§AŸO.©wzµŽç²Ñ{ëɇ5èJ­è[p_„Lýé<³ÞaY˜ùïs]a§;Øöâq¹~ñu¨�l(â«ö±Qþ—¤Wá];¾”ïï°9¢½>~A.sØÝë¬!âïë»�¬DÏ¢àÄʱõ T9qµG½ì‚.„3L~¼t M"^üiOŠbþÕ+Î?´Óo J|´=©(ì”vRÄë} nˆÚ »p#b‹øα;HmCRiܹ³sX—½gU¾ê²+„}‘ë5ÎXvÈ©¦Ó0Ü"%~,êM[þëæÃ–áN û~î°sEš¶ß¢LÔÕ‹eYÚåØIû³;w+¼³»²©ˆ¯ØÇ Ê¶òr¼k§#¿ô›àú3¿âIèꪾè¿k�ÀJ°s¹³ˆWyá@K›Œ˜ê‰«F™(q›gÇßJÁ•&jê"³3åI²¾™õ ;´£Š8V÷¸‹é4 ;òªóÃ65 7r_sìRÛTw~çK"ñ%–‰-·T"qnÃYw³ý ‚P¿ûšÕ‰\žþ “’hçúø\Ü»_¤ËNäŠ#8÷[Ø-‹Î:,e\J¹ÄnçÎóÎd=·ßÑ}в{\Ù>Õöç{»à];ùÊ9Ø'”'Ä.íLT¨žcùÄd×ÕpŸß5�`%Ø'¸ÜYÄW —%PµØX84#TU¼*´'¶JgÓò¤Å¨IcíƒÃúH¢üî£J”žÒNMl5«óÈÉ“Ç:ßHƒ¦H|Ó±;HmC¶«M§Y…flFBL#ºØìž¦ÎÂ*‰e¬(â½"ÇÆAÔ7Òëåùþòƾö™Ý2Pv+Ñ(ìô<_¹°:<MöØŠ­ïQ°²}˜õæuà]—ßuýý Vª›>A.G¡ŸPÜÿä¬Ncã|ÇË=×�€•`?ä^Ä‘wBc–‰,¢é:R/Wtø¡„z±Ä¤†×z—9ïÎò‹¼ßLf•);]êô¬ü_ ;¥û$â•P´E<GÐÍ“‹ ©ê¾uÇØ±õ’.ÞŸÑå׿¤ˆ’ôÏeF/ë]YàÞü ‰ob–O 4Ñ$U^Mer#qêoÿÐô}ñIÅ6óñ9”l¨¨_?ÚÏ*}Ñ)rëô&Ô<s5gxË®&8Pé$q·Æ~[FŠxoNµônêU=x×n‡˜ÿæzî±ß¶D<#ßS»!nà]�~=¿GÄ æÓk:7yíb« Úy掠®YµÅ~ÿ!©(¾:'ç˧ùpÉzºžè÷áó®Ž{?öÆë ¿§AÉ.f~þsºÊž¯ò£D¾žôk:6ÇîÕ†Dtt®ßP·»ê“u4äÚ\à 4Ù=Q+.©= Ù`>nnT—Òp†•„GàÞRbGò¸®õþðˆ,ßÊ?Í,oìMy÷O8_Ï3Ëy�Ýç+/;XKƒ°“âÔû{ngŽG ÿ 8ÉË¿g ;ŸÏèð®Âhï·z¦úkªà]W;îr‰Éø´òãi²]ª]M¦‰A^ZÑÍe¹ˆßþ»�üX+ºl_Ä?0`«mcÄ€¯“³Â=ÕŠÓ!tŽ7©9,ìó"eǽk9Tþ±§s!Z|/ŠSÊÎæÊøžGnåÎ'7²•y(¥#ÕùYüb«ûƒPšJp µ÷èéâhåÑv"³5×]í€êGá¼¶´Þqùsû=8×)ìoªéϼ†Uñ=Þìw¾²}~/μx×rý»fPP)?•Ó°ô«â+àúŸ’3Ë4›{ªó‘¼YþIâ]�~\'] âïlvË~�j¸cà, î,ØVœ¼¼2x×÷“ï�ð[€ˆ�l€Ù¬]I ìx×��ˆø�ÀV����� $ñ€­�����@H â�[?M“Ïœ­iŰ_ÔN t7L(Ü}&%;[ãJT�� `_áG`+�����ˆø�ÀV����� $ñ€­�����@H â�[����€@Ä�¶�����!ˆ�l�����B�Ø �����„">�°����� D|�`+�����ˆø�ÀV����� $ñ€­�����@H â�[�vŸŸ4½Î(=ÿL3½'³kJã×4œÍõŽõ˜O¯é<éß{Hq¶êýŠç¾£¤ÑAÔ¥lt£÷?@æ#:?½¤Éfæ�ü& â�[�v›e§t:˜Ðüf@It ýšwëd4¾“øûI“¼G½Á7ý÷šÌ¿PÞm ñ~MÃì EÉ@Üýr擜º-!Þÿù‹²Î#J6½~‰[šæ'Ú6O(ÿÐûï€×þJίiZØý+åqËúܾö 9e²“£>â>]þòþšÊc~ÐX¼ï­Ü/�à—ÁõÙ"þŽÀV�€Ý…ü uÒkўϩ›ä4žÍÅÿ3êiÁËâû9g#º“†ç(|÷|ÃŽÀ\hÜEíþšQüo4HQ[?ãvÑ÷´Fç†;ÏúCÑð#;Ñ1¥Ãïâ/~?]ŠŠ÷`ÐBÞ¶ÅlD9‹÷(¦4jÑ?§Ù8§¤Ý¢ŽõîøÝ¯Ø�Ü â�[�v!ð†}jBðÏÏhp£ÿŸ=‚°§ÿ&º¾§wwŠÞÞ- ?Ÿ^Q¯}DÝüK!F—óóÿßÞ»¸µ{Ï¿áÚmºéR¹r3Í6iR¸˜fŠ ) …†!°°ea0i^Ìr!¼ †å²„ÁpY.a.!óÜóœs$IG²Ç3'±w¿»±-K:²åßyt¤‘Åô¹ô:%»üì»K®ƒäV×ïe2è·ž °§ Sðe6–n5Ä//dÒ‚¹=Cqßì¯ØvjGãE¹Ý™ ºc™5õ$�ìB|´€½¤UñJ…vÅUzËÃU´ªû«Œ&,êxôácŽó>—óÐ)ŸyþóLÆ]?Ôcx&—¥J±™¸±ë:¿í`\ÉlÜ Þó¡L.þ[ÎOÒ);–lQI¤_V˱SŒ— ™ecØa+éù3áëëëÕÀ© ¥1ï__·Ï®ÃT<Ö“ñ,v^@;OG¾£’WÑM[TÎ>¸³$ùrµsô8R­Ïiˆ%§Á:ºù#m`gé±£ŠK´€ýãƒ_S…Ú†Ó0š@yqj‚o_†Ù…\ÛJp§ùnˆ Ä£3;ŒÃý; ·•*¼ÿ<}õJN&¯elÇ©ÿᆎôF’ͯ|Ð\…][‘΃¸V’óÐÚ:DçÚt�úAÅúR¦£¾ Ån®‚}<[¯X0V Ci×ÍŸÝd~lz„oWôÍÔÊ${ç:ÿ>E§ÄÏS]®ºOˆö !>Ú ÀÞi ~>œ†LÚª}8”%FRzS«PW‚¶ è«Ð¯Ët•ê|,¸ïd„C}Ì2ºc?–¼¸ÀuÍÝiìvö}GÀoW©ã¢!¿W¼o}½Ú¸uª]\Û¸në‡ÞØåÛvü¿rPÙm Îø‹a«ëá‚z^ù7S1|&²¿�ì<B|´€½cƒ_§!PjØ<¤ ¿Ý£lu[ÂRHÏC¡ÇþËNñúêXøXˆtËÔ úq1“l<0a;¸¤ ®åªø&cäW¡X_ Ñ¥@|ÃpY§\tݪ›š°SéHyÕ3î}ë!Þòû¹Ü)ñŶ�°sñ ÐV�öŽòÑ0.»ð5üöd}°ÿù(³ña¹JœßÅKãÌ•¾ßaðÚj%Y…ã×ó!$W—òûï ûšrÏùê}cèC±a—nseHQl½ZÄ×)W]7ÊÛ.&­v jûAE:v¾N¤óÑаï{ÿ†øÖñ ÐV�öŽ ñ±ª°¶¥ç´r{ß…I{Ñæé÷ºÒy:‘³ws7dĆøc齿í<9 Çåjµ ‘•eû�]TŒíûú�ëîÇž‡ñ/&ÚÛEæCpbÛ¡t½{«eÛeøa.úÇ­~AfcëÕÈudªÕïæusÃv:Ã_äâ÷÷‘¡:ùëÃqêþŒHï¹Lnø«ð¯®EpòyµóôZfþµõ3*Êw*ÊØ}„øh+�{ÇV¥+6Vïær¯ë«ïþ6ú˜½ ôÒ^,ú ÿLÞú±åîBÖ¼ŠžI6õá¾Z…7ÓV‡kc½MµÎúeëûäïaÃè¡ã>„ëè/´µ¯«ÐewÃê´YF~·¿ŒÓ™«ô7¯W„í�åË¿·§ßºn®#Ô å¤ÖÑq5_¾_òJzþxyªùù´ôGžìkcÉŠm4ìµ ßùë�ìýNWâo‰¶°4oXuncþìG”Ùâ“ ’ï$ËÌ¿M`]‰¿% ãý›VŽ5�?+þˆ”ž=x´þb`�;‰Ÿ�m`-ç¯eTŒsß’­ÞW/œ¼’y6’Þ&Uí&¶büH&Èt¦㇕˜å^\žÉhð}1 z6e,C<°·ñ ÐV�öÒòOyûò—[V˵ÿz5DÅN}Æfo!¿X³m¸L„»s‹Y‡ü>ð0´Sõ22ŒÀ>!Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´���R"Ä'@[�� %B|´þ¶®ÏeÜ&Ó«¥�_e6Èpú—ÿ7þ¾Ø×À>ú:!^ø{÷e}ð×’ ûö}uê ~óÅgÿ¤±\ÈùÉ@:ú|g 'ç Yņ+™g#é5Ík-åzþNÞ˜“}A& ûpð¾÷:Òf2¿¾Û@r³¶ú"‹ì¸h‡ò¤ë÷JÞÎÂmnë³,ÎAÇÎz#ÉæWþ¹6Ÿå2{"ýñ¹\ûGVÌ{Î~–‰ùNwÇ3󩯾[^frÔ?‘Yåø¸\œËiqì6Çõñ¯w~ Åמö“~7«î6Ä/ÿ”ìè¾™¿„ø¿d:<0áá¹L5|Ûß‘{ý‰ÌíñA«‡&œŸÊÅõ¹žH¯óX²K êK¹šŽ¤“å¥LGæ SÌ«L ˜>7!_:™ÌŠ€¯!ä{e&„˜qj‚LGú“‹; ÉÛ´Õr>‘~©4½–¡¶‹nÇä}$8ÕéÁøñÉß-D5ut"?*‹Lµ×…SOÆ3Ó’_f2îÆžÏ§cÉÚŠ‘ewFÍ•hÓIœeãU@¾×—áé™d/n¹7Õ¸=ágE7g,ÝØëzC9-uÍçÞ|Ÿúö»å½~/“£¡ÿ~µX^ÈäðIíuËÅ™<žÈ›·3ùp>–ƒ¯âÚ¦38‘³R§äƒdƒníuáä:׿¸Ó‹>聆ÍëïÙN%ÞÒïr&ãõµÚ9-ÿΞoÙV-Û“+ÔÆíóIæ“#9Êþ,í±úÐ|¦Ïe¡O\Ïål<îQ&— _‰;±7ûZ¿3Éòâ‘Núüw&/Æ2»ÉÎn<Fé1Å·¡­”ËšìØ¾°1ýŽWÝaˆ×Ð<”ãñsy;(?8þ€šñ«© ;Á©=úÝÓÍ[ªö•^ïBJÏèFÓËòA©JCI¿»!ÞýH•ƒ™•wpî=”Éü“°†1þ®•P ªåÐ ¤–~FLجýpéç̇iý,~TÝàªÝbóûÎcÿ¥d¯Å?3¶Cù°ÒáÒ3B™éŒõ· ñ…ê:F”¶ÉY.~““Á#³ìþ‘  úÞ×|Üöw[‹ªï£Ä"Ûl¿3ýc™\„kªÛø¤þý2Vë\iýNvÃÏHl~=6=þ«ŸäUÿQä;ê µÏ¨?yëïji#6nŸ =¦vëUm«ûÕÏ€=ŽÆ¶ýŽíü¾ÖïÛ™ŒjëãÏ·í§Fz,:,}_Ýwú åûZŸ§Õ.îk�Iâ5`½”žz¯T ÷¥£­Š—Ä>,•ªZ)xèBþ=ˆtÊ•=¸w}E=¯ü÷ÉÀ†ß†!3yU¡�oïNC|ÑùóƒpvRªôÚΊðî±¼úò¿ñ×úwÞ7ñ€«"¥ñþÜìƒ/zÖ¤tæGùÅš»½ê:FÄBŽQþ1Ž…xýŒ=“öo¿WGk¼ãû(¡†mÖ3[‡¥Ša¢`g ÚÁþh>‡‘Î=¶%¼†`›oÔÛ'ä†Mµ~JÌwc4Z&ç¶v}_'WÞÈu]î7í÷›„øÝ×�6Ë›wâÝ)ö×. Gê•\˜ðåN9†UfVî•~˜ÂÇÜP›Õ8yž‚a16`åƒâ¹ÊéO»>ºÜ]ïEÛÈqCmü6èY׿.ï°äÒ>—Ÿ.ÎÿÝðÚ=Ômû„ÃJ!<ZR pŸ¯Ö_ü€ëçT½ét–­.ça êë 9õ úòò­Œž­NÇëgcô¯ÚxØßAÙà4ú®„xW1|ìÃr0‹¯çMƒï`‡gËß/]N­šy—Jë±qûlÇÃ|þ7 jËË_åôÝW¸ rÇ÷µ]¿û-Cí¶äv {uù…„ø]Ý×�6’&Äk(8ÆØÆª½Àt$£Éwñi>>Þ@ÛB¼ùgxQ¬ ó/^èøCNó?î@[ªâkà:¨¼ŸZU´;w<Æ/iˆ÷9úCÔ[m›þˆ„!¾¤òÚ=Ôk?îú#Žaõãà¹ÏWs@®áXåú?œ[Y·ŽF$äÔ‡Ó(í@›2øÎ|Wzö¿µñ°%úÒÀ¾GÜ΄øjHóí·úL4}Oë²m—Ãʰ¿°s·Á>»­mC|­}rx¹n¹˜ÊÉÉ´2>;‘ÞׯÚ÷ØFõ¸’__ñ°å¬ê¦Ç¢Þ×�6¢Ç·ª[‡xý!^d§“­˜ú WóP”W‰{zuüÄKú�­"ëÁT/’ æ-…x@^Œè‡éÜñW·óÆC¼¯�Ãi”ÈYÝy'_ý‘«…ø†×î¡›…ø5•ø’ua«únÔ*qÕÎz¸]Ûoýþ—Y¿ðO?OßËq)´ë÷ñ‰Y÷xH·È Ïàìvˆ_W­XÊô3PK\íÜEö™ýž‡ûh]suë¸qûx7óüÕCÝNïk£özL(_»¶3QSõ&oâwy_؈ªnâkìWP}ØXÐò ê·=U^Øj6]éÕ*î¢1½ M^ItUëð¢Ø`<}í�ä—»a@ÙÔVmUm£œžîÔ±ýùÝyìÅ“‡öÖ“Ùt&Ó¶J|Ûk÷Pã±¶]ãpšM´äüLHþ#ºšÂa`m…M:ëlâ£!'© ÍAçfã|w'ÄW?å`·‘Ö`ç+±ÏEp<ik;i«Öu46nµéu:Lñ'¿üí놺ß×ÍëglôÝŒ©r{ú¡ NÚÚ¾2OÔŽïk�ÑãPUú_TÞýšü6‘¶š®G _©·~rA½¸Å¤w=—édèn#Þ ¤òÞön½ƒèp7Ô ·f(ÁÍmÓV.(†!^+èù-&W¤ê7ï¤äÛÚ}.o~z%o?üÛ†øÎðùÏÛ‰¼yó¼ùµÜÝ=± ³b¥M[@v?àõ¡LÕJœûwüÔô®…øa­m–óS9.µ¡Ótÿè&›Ó¢STýNo£a›ëc†ï8ØÙƒHç¦ÒIÒ nCû}ËSmÕ¡WuËË_äätÃ[Þþ“öµý·~Ï#íwW!^ÙýÔö»µAˆO°¯|}ß&Äå?"9EŽ{/ÝëZQÏ<Þò‡JH*¿ÈUéAöÀ?îÞw2ßùJß{s.œëTšô>è?É´Ô.ù]htûOålòDô.?.äû‹~óŽMëk÷O=ô˜ŽÎùrt´é-&›´äÆp£Ðlgô8ø¼yöó»öÕµî*Äkî_2 +yú}} YÚ‰Ü?ºÅú`šÞÍgrñ¸­"Ûl;çGO6¾í`£–`gÃitˆ^µ3§g ¿—Aízw‡®ûß ÄÇÛÇmSókœø°Š¦Nê?m_ëúœÉhð¬öÇÓlG£ñn2myéŽnUëCüÝïk�ß‚fŪ»ñÿ0´Õ]ËÃ@¬“³Á{j 9y‡°òú|hކ†pŒy1d§º>Á5úÇžNõ Ñj¾Î`,Y¬³¹‰ØöØ©Ü)Öð\»¥4Ä(ä:?Å­GkÊ«nÐ¸Ž±ñÞ¾#}•Ù†ånö€šÇ¢GÛ2ØÇåçÃýPYNÑþáY5ÿ\Ç¡l¶å…Øöø)Üç·ÒýR¹î£¦R)Mìë¼Ý«*wœ ÿèà†ªÇŸÒq,¿Ms¾NMÇHÂkÄTŠ} à[Ðïd!þ–h+ì? ëþ�Ô´cà¯$ã–4$ßñµAìë•b_ø&ñ ÐV@œ­l×¾àïŒ} �iâ ­���!>Ú ���)â ­×vñYej»ãþ^.Ú¬O\P¸ÿZ.J®L­w¢�CU„ø[¢­���!>Ú ���)â ­���!>Ú ���)â ­���!>Ú ���)â ­���!>Ú ���)â ­���!>Ú ���)â ­���!>Ú Àþû,‹ó‰ŒOß˵$™ës^Êìz鸙åâ\N‡}sì½/ƒÉæë»í|é}lÐ5ëu Ãé_þ±¯ly!§ÏÞÊåv»ÀW@ˆO€¶°ß®äbòLžM/ey5•açž=®E§þDæ· zŸå2ÉhÛ°ºüS²£ž áç2›<”ÎpjÖ~ÛÎ×f¹ÙéPz¶mLÇàä7YlÛ6ÚîÝ‘L¯"oÝ'}žžËË;ùóe2ÿ䟻’ù4“‰íÀ¸ç;ƒ9»ø/ÉN~‘…}Í'™›ÏÀj�»F¿»U„ø[¢­�ì/ ðÇÒŸÛÊôr~*GÃLæ×KóÿéÕa ßOäpr!·ÊðZ…?:ݲ#°4yv$ÞÉ «øÛÎׯ´ÇÛäåùBß]æ¦cÒÛº’î×où@]·¼Ìä¨s(ãÙGó/ÝgGÒ©-Ïùp;¯/$ÓðÞÈ8›ùп”ëy&Ã^WúÁþÔý}x�Iâ ­�ì'æf'Ò+Bß'™Ÿ¾òÕ`­Ì>4áoUþ2ûI^ߪR{»*ürq&£ÞeÁsÛÎw#_f2îve}ðÜÄµÌÆýR ®²ªà,È—ÙXºÕ¿¼I?æöìÃ}³KvùÙ¾dE;/Êûb‘É ;–Ùÿo�;…Ÿ�m`/iU¼R]qUÝò°­àþ*ã †:|døXzEȟˇtèÍ¢ ¯¡µçž×ù/ÿãªÅ6¤êûLƒ¡Z}þ°z½t¨È•,ÎA1Ì$ ƒåói'ä³,fÙj]{#ÉÌû¹ î^ÛžÉe¤ZÝÈyÑ÷ÿkµL­¬ç•p»ZE÷®çr6Hç^Gz/þ%ãþ£–¡,Ú¡:ò¼ŠÞ)WÜ wædµ—ÙãHµ>§!þ•œËtóK¶ Å»H+U„ø[¢­�ìò¢UZÆÒ0�šðxqjBs_†Ù…\Ûªo§ùn¸‡ ¤£3;dÃý;—]­Â»Jçé29™È›ñw.8G–ÑÏDc¥­>Õè°“ñÑçac.Ïgüô¹ôtL¹.#o‡üy»ÌòôÕ+9™¼6áúACé{<)†$¹m{$ýW?Ë›ã'2¹xoÖõ`Õɸ~/“AÏ¡÷g<Ú*à¾lÇ@§žÙÖìò´âß§´fžb»×sÕ}B<°«ñ ÐV�öNkÈóc´Ã‹#mÕ>’ò—L‡|•ÚÈ`èͪ2ÌŽ…Ï—ß{.Ó…ïDø3½||~i¸[FèóNHwp*­ãÜ+óÙõº_ZcëÑ®½êŒ¬§›×2|¼ÞnÛ¡<åôÂtqJ"íp|¼ÿYdÇ•3evlÛþ_9¨‡ì2ƒ³v™zF¡ü¾.¨û΀NEç!²ìB|´€½cC^§a¨ˆôƒ ,ºPß=ÊV· ,…ô<�úª¾BÒ)^_­Âû`Zêá;"?^Ê,ËÀ„íâV6¤VªâËK™ŽÂåD”æóË(…`¿îö±›YoÿløºÔ‘pÛ–w‚íÒ÷Ôvëg?bÛUâÖÉ…ñHçÊsË왿qfCˆ·ü¾/wTüE±-×ø¶ñ ÐV�öŽ^þP-àk¨ïcεš|X®c¿µÂk¢¿Ã¥ïwØœýC¥ñë}N2™Îÿ’ÅïïmÐ\U£‹[½oÁåùÜ2VÕ|ó¼­öûÀ]­f¯±\Lådü¶2¬ÅUÖWÛæ:D¥^e—™¶NC5ä×öŠt>ì|H‡¤¡#`ß·|†Àn!Ä'@[Ø;6Ä×+ºù0•rÈÓ*í}— 9?y"ý^W:O'rönî*å6ÄËHï5oçÉiÀ<®„ìp(NÎÑbx¿m£ Õ!'zê¡¿¨ÓÁ‰ïêP_ÕöCp–‹ßäÄlWQÉ·A6Ö&Uzqé[ŸL}%[ÇÙŸJfçÓmë¯Â°½Xö@žNÎä÷Å' í6¹{ó‡Ì¿_Hvþ‡kdz½{Piœº?K CrwßY]Ÿàäój‡êµÌò!Kùü¥TÞöwy N�wŸ�m`ïØpY¹ˆ1¸;‹›ò;¾äƒšÇì\.Eo‰ø ÿLÞúa!®¢­ÏëE—™dSîkUx£),Û >ó»Ûh5~ê«Ü<‹Ž€:’¯c¥ê_RžÏ*10Ë(þ`Rl¨ML~o¾|?åóU·Ív–‚¡+¶Ó¡©ê…µÿ‘K]fçH&:v¾¤zg|_å•ô`ÙÁT ò¥;ýø× Æ’Íôþöž]§ïÊwϰsôû[Eˆ¿%Ú ÀþÑ€{¼AÕy½]ã2ÿ(³Å'ßI–™‡îÛÒ`ÜߢJ¼í|ÿ(:4êÑêÚ�;‹Ÿ�m`-ç¯e´Õ' Øê}õ"Ép(Œè¦luø‘L.þé(6L§Á¶óý#é–± ðÀ^ Ä'@[ØKË?åíË_nY-×Jük÷LJ̱ÐM:æç`öò 3í°½Ÿû†¶ïG;Z/å„N°7ñ ÐV���H‰Ÿ�m��€”ñ ÐV���H‰Ÿ�m��€”ñ ÐV���H‰Ÿ�m��€”ñ ÐV���H‰Ÿ�m��€”6 ñú"&&&&&&&&&&¦ÝšB”‘��€=Cˆ���ö !���Ø3„x���`Ïâ��€=Cˆ���ö !���Ø3„x���`Ïâ��€=Cˆ���ö !���Ø3„x���`Ïâ��€=Cˆ���öŠÈÿ|Ÿz2³zô����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5b.png��������������������������������������������0000664�0000000�0000000�00000044540�15030617045�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ß��C���âFba���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��HõIDATx^íÝ_Œ×uàFà¾ðq $˜‚LðA‚P"Ó!Lj„ ÊÈÏ„GP ÊÆZÌ"žü´ ’]y½@$¬ §á…­H¯fý3m˜R<k3î8cQÒx%†¶ˆ‘"‰CÎùõéé3súNuýëªêªî¼uëv÷TWß®>}ûÖ­-��� ß���@E¾��€Š|���!ø���*Bð ���T„à���¨Á7���P‚o��� "ß���@E¾��€Š|���!ø���*Bð ���T„à���¨Á7���P‚o��� "ß�€Zز…$�£#Ðp°H$Ò  @5x· õ!J"‘HY€jðnŽÎâ°/‡‡}?<ì{ Z¼Û€†ãƒ³8ìËáaßû¨ï6 áøà,ûrxØ÷ÃþªÅ» h8>8‹Ã¾öýð°ïjøn[‘¥Öáõ7qdÚ=#s­Éâò­î}ÔiMOFß¾“&d÷Ì·¤5¿(ËÝ{ô·, ³»#£&gea¥{³(Ë/Ëìî Ù2qHæ.]ï®Lpë7ÒzêyYêSY^”ù¹£2ÓºÒ]Ñ•ç±r¸µ8'{gæ%å3Lé#YZhÉìô·Ï'ä{¿Ûá(Šís Ž}9<ìûáaßÕ*áÝvUægvvßÌ“2Ý 2o-½,ÏÎìY[?1-O½¼$>—ëó23±v�ز尴–4pÓ î¤ÌhPÜ^?1ý7òòÒGk·ctç±öËÜâÝŠþn-ýPË|_—Ks‡ÚÛÔJ0¯ý2ýÔOe©÷Ég~¬|>ŹÃ23µ[.Â-Y^xJv¯¿n—¥u¿½ŽGd>Íë…¬ík>8‹À¾öýð°ïj•ðnó½ÏÁw‡Š'þLZoºÀleAf'×�Á·òÁ];�?Ô’7{×(¾7Ý?VQ®Ëbë±µmJ0wžû¤ìž}9èÁÏñXyݺ$s{ÊüõĘÿÅÃíkíÉ?´C¶ì~Jz~é@ÑÖö}Ã?8o¼"Ïìùœ¿üûV™Fb_&Z•¿){îzZ.|¸Ú]7|£»ïß“‹Ï»ŽÿB>쮩›ñh÷@}T|wz^÷¯¿Ñ'üð‡¾Áw›{¬'{gŠžÛlÁ÷ʬLv·im›ÿE–[Ý÷=2Óº(oÎ?'ÿ]çÖ›2ÿX·ß§ØÀÙ~ zá“K‡¨|oV¦×ho˳/÷öšw†±Ì¬9éM½Ï½gÈIÏþ^{n-ýTžÒ¡#ë_Œ‚á$»gäÙÿ‹EÔ0÷kGûïíÑaCþ Çò+2×ù†÷ –íûæº%×Ï}M¦îø+Yx¸Á`ó÷eÿ*çŽî–;fÿQÞﮩƒ‘Ý÷×,G§þDfÞí®¨Ÿñh÷@}T|[@¶öFß2ñØF/l\ð´GÊÚóÝþðŸL&:·ooóÜs®—º€¾ü7í�Ø?Ž{ü½ÕëÏyÏœ,nêîóXÖsܹïýß!‡Z¿Y €í6ëîïÛû~oç±6ÿB1äd}¨Oû9ï¼üâååÎýõ ÎÛÝ¿>öÞö‡Èï» úô|«õ/M_:üÉÙ…ö½1¨µ}ßç­Üó¾ Ó”ì}ôïäâòÍî»–Z2y{M›ßÓ²z]^;ó´<x÷öîm&dçþyúž—oaçæÛ‡V_—ÖÁ]rßÉ_¹/vê¦,_ù'9÷Âsò̱#2½»ýø%ÿ:dϳ:IçÊØ{*îv[eòî/Ëlë—òÎJò——Õ·Zrpâ ròµ vuY®\ø‰¼ðÿ,Çf¦e÷äöä×®@ö|ÊÒÛɤÉ}òèw_‘åžÝ—öµ‰sCÞj}Y&î;)¯õ4îêÛv{N�ªQyðÝûÁî^±ÁwpL<Hev²q`noó7¾ÞÙÆ1æÉ›­o­õ|wd ¾7¾8Diˆ~¬íé®n¿YкñEfã×€M÷3:Þ;d}ŸOȇ¾'¿nWuS{¾¯\èλÛÁöZ¿µ=vïóˆ ¾×{ü'dÏÜ¥µÀŠžï­íû¸·r÷5êi«ÊÕ‹ÏËìþñ= 6²Ñ6Y}W^û’Lí:$³ÿY¼ú¡¬\ý?ò“—û´ýDz¬ ¸g∜¹| è¾7¶î¼W¾4óuyòpû¸Rr€’¼/ËÕyžéõXmïïEyéÌ·ä¡ÝSr÷±ŸÈïbãoñ9™xøŒ\ o×9Æ´¿8íý¢Ìûªþã#|¯Ñ6|!\yG.¾0+û·}:¶w:ñµ‰¢Ã©î¹C>óÛö+åUß¶ã »Ýã†à»k#hmoóß=¿1ÌebZfδ0GÛ¸mtOoŸÇZŸ}¥;dÀàûÖâ³rØ`ãöy¸m=¿P„©§?.øÞh É¿V /{]ú‹ ¾Õª¼wî«ò‰ÛË…0î5±Á÷-Y>ÿd×®ÇåÌÒæÑ¬«Ú†ïN àÒè÷Š•¼/Ë•=ø6í üõïÊÛöÆ›O=BK)~µ(P5û¾ßóºÖn‡wÊíÇ/Hÿ·BÖà;ípªjÚvœa·{`ÜT|÷uµvÒ=°vn¿¶ÍëãŸ;ëtºÃ–›"±OÀiã¶™‚oÓÓý˜LO~}\÷úã¤v¢ëgz{ÂULð½±?bz=;ÒßÃü`ukû>Oð}S®9"w=#óß«oÊéï”ûO]zõL¿@gCß!›|wÄ~Ò_švÅý†@DI~íŠV;ïó¼V+gÞ%w=óJqÁwßáT!‚o`ÜT|û±ÕA|ûé ‹:á²П<µ~ ƒïŽ[K²ð¬Ìè†N$Ì=6n›-ø¶±æÝ@úÍÍ=ߺ-wR¦öÔ·zOÊÔ±Ý{#Æ›§ ¾ýóŽBð=lkû>Kðí‡*Ü)Oýª–õì½wNŽ~"Þ”ÏM¾;bƒïråÔAÙzø´¼Ó]Ó£ïˆ(}‚ÔU³ïÃçõ¡\]|IÎ|ûÙ=õe9õZÿß_²ßqéBßÀ¸©6ø^ï©m×¥žj°}·vày¨\5Õ`ç1Ûe»žàûÿ¯<e'5¶ÿ·“7Ô~s”Û¦¾ý –ÝÚˆa'Ûé¬,‡ž8‘Ó螣²7*€Ž ¾7NÆl§ÈEMÆà›1ß…[Û÷)‚ïîí,mÝy¿Ýt’Y .Øë´É~_nSÈ4 ÁwGlð·²Î(©å«fßûÏKz‚ðWå»ßýR’-øÎ2£ Á70nJx·E_dG–/I+óEvºÁewnð|Ù gçÐÇ<Ó™>o£ç=˜íDO¸tc½×‚ßã¦×åG=SðyI'\F=Öe¹´>ÌÆÏ<¢e÷8=S0ö¦‰é§ä‡‹z+}üÃѽ“nŸoÞ6=ÉôϺûd‡Lϵƒ4]­Ã`z®6ꇅ½ öÜ6zÏ7¾äôû2‚¬ì5ï¯÷Ã}õúK2{Ï]ò`ëròþ ö:íçOåäe?dÄù¶| ïÈ2B|wÄßkïÅÈãLê!f”ƒo{^7åúÏÿ£Ü3õ´^Oþõ&Kð~8•"øÆMï¶î¤û&ŽJÓ³ò½Ì——o~³Ï ~yùM): \O3¿Å>ÕΡs}_êùûëWÄÔíÛtÅÊ^ëãÜûô G=ÖÆ:o>'ó—.nÌ nómÇߤïwÉCN,m†¯»}ÐN›N>M´"¦¤ç»x¶ïû ?ÜÛAÇù¿”;¶?"§—ú8Yì­^–S÷ß![¯gói„"øîˆ}=t þΈabY†@˜q¾ÛV¯ÉùcŸ–í_þ,%4ÄôÁw–áTŠà7¼Û*a'B2>6Jï/›Ó�C °ö¥ÃNEYìõî/âÃ}õm™ô.™zôÅø�!¶§õ¦\›\¦úÌvÒ?€Ë:B|wô}=VåƒWÿ‹Ü»-ª·5ÏEuÆ$øn[½ö¢<:u—<:ÿv1ÃN2_T‡à7¼ÛªÒ =ô$§Îcîܸèκî?›Låº_8¸¼|é’?8£?ÜWß~AI bƒï¶vÿó§væùþÆßþOY¸²Ü`ô$¶—åÅSßvNmà2Pß›^î¾þÛ'åÀöI¹÷é…Mcø³ 0ã|kÛzûÌ£‰_ÓßY‡S)‚o`Üðn«ÐÚP’ö?a˜JZk=ËÃ^:ãë÷oŒÓ®Ú­%yù©i™Øý5™O3F‰ýàìkkõkÉnï˯O”mõn¸PÏ\üaŠ¿½z].ÿ¯9y|ÿ.Ùº~» Ùyïÿ#OÎ=/ÞñA_–!(Å IK5 {ìêt/ÿ¼z’ýzw;Ý×ÉìéK'Ïfûº—ކý²t‚g÷|zÚÏE9y¿]¡5Í>×ñËbêáTÕ·í8öwTƒw[Õ:óv•™Bz”>’¥…Ó2g'²vSgl}ª1òeЬ¯ÉÌÜ|0¶eiÖgž!ÕiÖ¾L!óˆáiþ¾Ï3œªF®Ý5Ç» h¸&}pæQÑ Bò žÆïû\éêa´Ú=P¼Û€†kÎçŠ,~Xv¤ž¢z#„¬¾!§üt†e†«éû~uéòàŽ™ 3ÊÔÇHµ{ x· W‡Î'NȱcǺ¥æªcòoÿöoò×ý×}<Êê¸ï½ºoß Fù¹uÄ» h¸ap¶Z­‘ùð®ãóÐ/5ºMGŽé®MuoCuß¾AŒòsêˆwÐpÃüàüéOºþ÷u¹é†¹/£ø/6o¼ñFwíhªÛ¾Õ}û1ÊÏ ¨#Þm@à ëƒSƒÁ]»vuþö¨ ‰¨SòË_þr}{Fá‹M’:íû(uß¾AŒòsêˆwÐpÃøàÔqÈûöíëüÝQQ— äÚµkë_lt¼7†¯.m£ £üÜ€:âÝ4œ}p’H$Ò @5x· õ!J"‘HY€jðnš?ÁRÇ$£XgÏž]ß¿‹‹‹Ýµ¨{]�`PI�¤¢'XZ�¢³p XlÛþÕ õb¯ � Š# €DþÀQ¸˜NÝè ¬œ`Yoß�ŠÂ‘@, ¿øÅ/v͵Œb±ëà@Q8’�ˆ¥=±thϬö€£Xìßf øPŽ$�úâÀrqksØë�ƒâH ’¿Â"'�X›Å^+�G�›øKÇs`ñü –œÀÚ ß�ŠÂ‘@ðKO/Éoû—,›à@Q8’�è¡=±dhÏ,añNœ8±¾õ4Á7€¢p$°ŽÀ°\þK]Fs|( G�†åòãèõKš…à@Q8’� 0,™ßÙ·o_gÿêxo4Á7€¢p$Æaùl½îgÆÑ7Á7€¢p$Æ—6/—Îámã蛋à@Q8’�cÌ_ÚœÀ°xþBEŒ£o6‚o�EáHŒ)‚%—6/žGÏ…Ššà@Q8’�cHC &¸´yñtø*-ß�ŠÂ‘3×®]£G¶d~8ãèGÁ7€¢p$ÆHØ#K`X¼³gÏ®jŒ£ß�ŠÂ‘#¾GV{ÀQ¬ÅÅÅõ MƒpŒ‚o�EáHŒ ß#«A"ŠÅpžÑFð  (I€1À”wåc8Ïh#øPŽ$ÀˆcÊ»ò1œgô|( G`„1å]ùü|é ç]ß�ŠÂ‘aÇŽë LyWæKß�ŠÂ‘Q'NœX¼™ò®xúeƆóè—Œ6‚o�EáHŒ ?‚,ËÁ –ã…à@Q8’�#ÆŸ`©½ß(¿*Œ‚o�EáHŒíÝ·o_'H8räHw-ŠäUÐ)1¾…# 0B Q.~U_ß�ŠÂ‘~®i†B_ÆÁ7€¢p$F�C!ʧ·î_ ÀùUaü|( G áôÂ.0×t9t¿êþåW…ñEð  (I€ÓK™Ûd._ý%Á/¦m_ß�ŠÂ‘h(úÀ –åò'Xòåf¼|( G ¡ü –ÚŽb…_n0Þ¾…# Ð@6Y“ŽùFñô’ñºõË ¿*€à@Q8’� Ãäò={v}s‚%”µ�G Aƒ\>?{ _n`¾…# ÐŒA.³Ç ‚o�EáH4„]ä…1Èå¿Ü°á|( G Nœ8±x3¹Ìƒ8ß�ŠÂ‘¨9éxÆ —ÃïcfAk�0(Ž$@ù,µ÷ÅÓ}l•ÎrD!øPŽ$@Mé˜c ¼uÎi}Œ´¾…# PSœüW>ö1Ò"øPŽ$@ ù“ÿ8Á²ìcdAð  (I€šñ'ÿéÕ,Q<ö1²²ö�ƒâHÔˆ¿º"'ÿ•ßÄÚjµºkxß�ŠÂ‘¨ ®®X>×½oß¾Î>Ö‹i|( G 4(ää¿òÙUB5�g# ‚o�EáHÔ�WW,W Å ¾…# 0d:îØ>Ø Ë¡'UÚ>æ*¡ÈÃÚ� Š# 0D…åó'Xr•PäEð  (I€!ñA!'X–#KäEð  (I€! (¬†^2^÷±~ÉáK ‚à@Q8’�CÀ¬åc,=ŠDð  (I€Š1ëFùüÅŠK"|( G Bþ²æ…åàbE(Á7€¢p$*¬åc,=ÊBð  (I€ hPh·žˆrp±"”…à@Q8’�𽱜`Y޳gÏ®H:æ(Á7€¢p$Jæ{c9Á²º_-8Ò (Á7€¢p$JäO°Ô«Y¢x~H'X¢,ß�ŠÂ‘(‰ŸîŽÞØò0¤U øPŽ$@ ˜î® éAU¾…# P°pº;zcËÁT‰à@Q8’�Ó©õCšéîÊãO°ÔËÈe#øPŽ$@4´i†A”CIØ·o_g3g:ªBð  (I€‚èÐû€æÒñå9räHgk�ÎT…à@Q8’�Ð^nN°,Ÿ^–_÷1'X¢jß�ŠÂ‘¡'X¢þK~Y@Õ¾…# 0 †A”Ïÿ² ½ß@Õ¾…# 0�†A”O¿ÐØÔúE‚o�EáHäÄ0ˆjØÔü²€a"øPŽ$@ÚËmÆ ƒ(S7¢.¬À 8’�iï«?fžéò0u#ê„à@Q8’�qéøòé•A™ºuBð  (I€ 4Ô`N°,?Á’©Qß�ŠÂ‘HéìÙ³ëÀ‹‹‹Ýµ(šÿ‚Ã/ ¨ ‚o�EáH¤ Á¶}øjŽrðueí�Å‘HÀøãjðuFð  (I€áøc†A”C÷+_pPgß�ŠÂ‘ˆaxaüq¹ø‚ƒº#øPŽ$@\à¥þKâÔÁ7€¢p$"p—jøKôë>êÊÚ)� Š# Ð^nÆ—Ï_¢_e�êŒà@Q8’�ŽŽ7Þ·o_çCöÈ‘#ݵ(š?Á’Kô£ ¾…# àhÀ­°€sâ_yl?s‚%š‚à@Q8’�]'Nœè|¸j,'X–‡ýŒ&"øPŽ$@›?ñ,ËÃ~FSY»€Aq$ÁØãÄ¿jøYµ÷h‚o�EáH‚±Æ‰ÕàDV4Á7€¢p$ÁXãÊŠÕ°+…r"+šŠà@Q8’`lù++râ_vgÏží¤¤«RÚ•BÙÏh2‚o�EáH‚±¤A£}˜...v×" F¢I9Ð(Ã^m®ŠQaí�Å‘cGƒmû Õ Ùio·íCŸ´wÛNZõ'Xr¥P4µq�GŒ  ç§ ŒJŸýìgeÿþýeíšÎÚ6� Š# Ɔ‰àËbØxù¤ôGôGìgŒkÓ�0(Ž$6ã†ö|Æ÷NJ|ÑÁ(°ö �ƒâH‚±`3nhbÆÁôï—ÀÑtÖ–`PI0ò¸¤y±’Æ{÷Kàh2kÇ�0(Ž$i̸Q¼´ã½£’à@Y€Aq$ÁÈÒ^V.i^¼,ã½£Ò‰'º4‡µ_�GŒ, ¸õÃ’Kš'Ïxï¨Ä…Ð4Öv`PI0’lh„9áËâäï&¾¡i¬íÀ 8’`äp‚eyï&»&ÐÖn`P%I~/ ³{Û©½2»ðûΚ[o¶äÐÄ™8Ô’7ouVµ]‘ÖôäúmsšÝ3ß’Öü¢,wï‘Ë­ßHë©çe©[,Æ-Y^xJvë6ξ¼¶}úwí-&­7?êÜ ÕÓ^nkCwÅt¼·% âu ÐÖv`PÅIVdvrí 59» +íK­ÃÝ×ai-­toØu}^fÚyoýG²´pRfvOtÖOLÿ¼¼”' ½.—æµïß*8ø^nÁؽ¶Í“³² ›¼Ô’éÎs˜”éÖ•µ›¡R:ŒÁf6Ñ ê XEŒ÷&èFSY€A•p$±í23µ³feaV&õÀµgN×{¾»\°Þœ[ïòZ]o¯y×e±õØÚý ¾7¾PLÌÌ·ÿ’®²ç±_æ?èÜ ÕÑÀ[§±Óׄù¤Ë1Èxo=ù• Mfm�U‘äYœÛß>H¹ ´Û»½Öè|·Ýº$s{Öz¿}0ß Ì$ß›–‰îqËîyva©]£ÕoÊüc{º÷sÉ‚ðåE™ÿÞ¬L¯÷¸ï‘™g_–%Ü/¿"sÓ:ŒäÌ]ê„×=n-ÎÉž-²gîÒÚß”«2?³s£'•âËòåï­A73›`X›€A•r$é¦=½Ü˜îuÁ³|¯òkõÖ˼6†Ü_cÞ¾MÏxk7¦Ü÷|ÛØìÎöùÞõr¨õ›n ­›Õí­o§È/ /Ÿw½Ü·Úß1“Ië GeΞ=»ö:·^y²Œ÷&èÆ¨±¶ �ƒ*çHr}^Ž>åV ¢g7÷V±Á·/ÞN Ú·îÐþ6»evÁNÏŒ¾7‚ênÏüúXí ÈNèùî|¡8úLO/÷­Å“òã½+¥ÞÚk¿¥„£iÇ{ë‚nŒ m÷ÚžÃ㌭cx€<†ÿ5>sð½Ñ[½6<[ð-Ë/ˬžÈi½äý‚oÔ—ޝNÒxoígZG4Û\ë ÛvlIJÚöõø£íŸ`@5¾£‡¬Ñqßó27sH¦§»=ái‚o£ã¾çkß÷óë'u|7Gx‚%ÊÕo¼7A7FÁ/ùËõãÉ Iv}¯„ˆSóà»{c§ÎpykI^~JO¶ÔqÚ¿–7³ô|ë4†/ÿMçdËNÏù›ô|7‘öLék¦v|Е/ï­û £"ÏÉÄq‰™}�Ä©uðmçѺ©Ý –™E² ;ñ'Xvo›{Ì7†E/ž³özoaf“ øñÞtëþç FIÚsÒ$†ÀH2üà;ò";:¤¤}‘?ýàÄc2ýÚF0Þ3¡ë5×3¯/Ê.Ë¥õa,zÛ·{çwÃZg;ÁPø±Çô¼VC÷3A7FÎÐcÇ–A�’ 1øv=Ó‘i‡LÏ>qyùdiþkÝ€yÌÌÍË¥Å3òX'P×KÒŸ”…n ~ké‡ÝõíÇzê§y¼7ÖémçdþÒÅ9Áý\áô|׎?Áòĉݵ(›îw‚nŒ:?£IÞ¤<�$~Ï7‚6î˜8�eÏmÈšôÄM�HBðF°Ÿ„õÑ^X�eðÃÚ²&=6@ߨ=›‰@‡œ0ž@™lh[ÖÄE¾�¤EðZó=Qü¤  l~6¥´Iv~‘Á7jK{¹íÃM? lDûÀ:Mâp�Y|£–ôÐ~þÕ ê�@U²^t‡‹ê�Ȃൣ·¿t<?稒ÿÕ-)qQ�Y|£vü –ƒö(…”$RSª•ö¢;:?8�dÁµ¢3ù¡æ?$I¤&'TKOðŽz|âš�òàˆŽÚðW˜+jÚ.{< ©hÃÓtÑ �²âˆŽZð—Ž/r ¥}HMEž¸‹îpQ�yqDÇÐ…'XÉ>(¦¢ Ÿu)LL /Žè:JP?ÌʸP…}PME®¨‹î”q¬0>8¢c¨ü[—Ž·ÇšŠ6<\:ã’½–˜^À 8¢chüxʲN\²ÇšŠ6<|áEw¸¨€ApDÇPø,˼4³}XME>Ñ®¸ `PÑQ9+iSx•=O. Šñ{¹pê9uá÷ÝruhÃõ`Ýá¢:�Å•³™M4�/û¤¥4Ëêò?Ë™ã˽;'Ön¿u—ì?úœ,¼óa÷Õweñû_“{'·®Ý~rŸ<úÝWdyµ[ßã¦,/~_ž¸wª»-S²÷Ñ¿“‹Ë7»õ5¤Ïïì·äñý»dkg›'dçcòýÅw%ò)¶­._’ï?ñ9™ìÜ~«LîýsùîÅ>·Ï´ÿê⊴¦wÊtëJ·\µvázØth\ѳ1OÑQ)éø2N° %.·þEZ‡n—­w?&{îÿÈÕ•åêÅÊ·ºG¶Ýû_äÕˆpEÞ>ó¨Lm?(Çç-Ë7Þ‘‹gŽËôö;å‘3om 6Wß~A™jmÇ_”ËËï·û9Þâ¦yAÞ®i°¹ºô¼<öà×eîôOeñꇲrõÕö—“ƒ²}ûŒœyg¥{+gõ-9óȲ}úi™¿|]nØí§•3o‡·Ï¶ÿêƒàk€AqDGeü –zéæ*$.7/ÈñÛï–'Ïà ÞÿG™½ãžÍëo]’¹=·ËÁÖë.P¼!oµ¾,ÛöÌÉâ­îªŽdqn¿l;Ø’·\T¹úVKnÛ/s‹t×d³²0Ûía^K“³ í¶m©%ÓQë‹°úÏrrßòЙÿÛ]±áÖâœìÙöei½u£»¦mõui¼]öÌ]’ž]’iÿ•íCY:Âõðo•É»ÿLŽŸùçÞ^ø`¿ö¦Ý2»°Ü½¡³ò¶\hý•<x÷öîíô×€Gä©£Ÿ—‰ÉYYÈðÂØß�ŒŽè¨„?a©Ê‹Sä\úôt¾sZo=(§®¸@³mõÊ)9°õ+rú?œä-9}x—8õ/½=º«ÿ"§ì’çßê®È£8žy\vM‘Óou‡Ç¬¼.§¾S¦>-o­ôüÅÁÝxEž¹gWDð}³½K¾"[œ’+=ò†\9uP¶>-ït×tdÚeú@^o=$Û·^ŽýýO:=ü«Ë¿‘óÿr`û.y°u9øâ’¡ç{õ·òã¯þ‰lÛýˆ|ûÌÿ–+Ë7Ûýº,œù¶Ìì’-%ßv;iÐ$´X”N§å²™Mªž) ßyUVÞü¾<ø‰/ÈÉ×zÇ}ß¼øŒÜ<­,ÈìdÐ z³°ÞuODÏè²,Ìî¼gzõ]yuîK2uÏ”Ÿ_ÿW¹ðô~™8ð_å•BǓߔå×ÏË©'>'Ûïþ†üìwác¿/ŸÙù\:=ôÁ¾Ê´ÿJÔùõab¿<}á÷ÁP—›rýü_Ê;þBοïkÒß·äú¹¯É”ÿRäDí“$iÛ°ÝŽDÇ4 -¥Ò*ý¥ã«¾*\ös;ð^ú‘Û{›Üûô¦“�ûOQÁc߀² à[­¼!/>±W¶ï¼]&w=.g–úœ$šËÚv®íÃ?”½Ç~$K›zÔû?—¨}•iÿ•f­·~âÁÓÑãî;CcöÛ’6ø¾&çŽÞ%wÿ¥|Ô]ã­^½ Ï?A®FýÝ>Ò¶áìmh>Ú=šˆ‹Rù,‡qaŠl曲üÚi9z÷2ýôO"ÍnÏí“ónŠÊÛÁã§åø…÷º+Ú:=ß»åÉóïvW Xï–Û_hÿÅAÝ”kóËÔ–­²ã‰Ëõ A]j+WeñÜßɱwÈÝÇ~"¿ëùk=ßøäy ÃþN }ûq¹àžd¦ýWÿ¥¢_š í´Áw†á))Ù6%I{;`”ÐîÑD´X”æìÙ³ëÆaÍþÀü¡,Íÿ¥Ü»ýOäÑÖ¥þÓÞ];#mûS9y¹7ÔŒ³üåÌCwȾ“ÿ\˜oÕþ²ðê³òÀÔ^9úßží|i8xêWÒ;šº8«—OʾmÿNÎ\óϱüŸùw²mßI¹Üó$ûŒùδÿÊÒÿ Ciƒêwåü“,;žüYû¯#mNßÖÑA»GÑbQ ÍÄŠ„KªóÊ[ò³§ÊÔ®¯ÈÉWmnê÷äò¹ÿ!ç.=±«—åÔýwDÎÖ1qßIy­g¶ŽäõS‡d"j¶“‰ÍãɳÑá1?”'Ú÷'/Ê.âÅ7βɪܸøM¹gâ1™¿Þ;%Éêë§äþ‰¨ÙNvÉ}'Õ;ÛI¦ýW–Uyÿü_ÈŽ©Çe¾ç‹„³r]~ÿž¯Óàû¶Í_¤ÔêûòûwmÉ-Y>ÿd×ö‡¤õzÄl6+oÈÿzîDz´éAÖèIŸ/Í¿$—ݸýTm¸-ííF‘oôJ¹6Ä-OÒû걪i—Ž×íÕíÎóÜõZ : U“Ùsš„‹ÂùKÇë°“aŠ?0·Øw^’o>°S¶Oÿ'ùYÏxé~=7åwç¾Þ®Êñ3¯ÊÕ×åòüÓ2½ý.ytþíMÙêïþ?y¢½/¦¿ ¯¾/Ë—_\›çûÑåZŸ�,Õå òÍ·Ë=³/¹¡&+òÎÉÝS_’¹õ/YµÓ ÏÉ׎Ÿ’Ï¿âfêø–<´{Jî9þ¿7÷设#瞸§½Ë™‹ïÈå_Ë|gžï¨à6Ûþ[w}^f&Ú¯åOË…Øq¦;V~êÀ“ò·/¾Ü™í¤ýDåÊ…srzîßËô®Ûäž/Êk'¿ Ût>øó¿‘åÕåêâOåô7ÿ\öïÜÑÛNl¶“]Êñ¬Í•îg;ÙzOû9ôœÌÙuë59õùµ© ýô”ñmxCÚÛý%MgM²«NêˆpG¥&áö€&¡Å¢Pá –Ã`^‘¥ÖáõÛlNá¸ß®ÎÉ»"æäçä‰ï÷ª¢W¸üïòä›KzJî}âû²˜{FýR0½›æ£>,­¥¬}à7åÝÅÿ)'fgdz·ÍQ½E¶î¼_Ž~ççòNŸ) ;W¸|òOeçV½ýV™¼÷ký¯ˆ™iÿ©nOõ–?ÜÜ“>ˆ•·äüÜ=ÏsËÖrïWŽÉÜ?\Øü\WÞ”ÿ¢ìê<ǤÛê<ß³òÀ®îsÔ}²û9:÷£ž^í«WågÇö¶ÛÉ'zÆÖÛ¶%I{»¦Òc‹ÜöÅ>LÚóm¿¸y¾Ü¯NÛ_‡À' ðëpq¸€[g‘²í7~Y…uQû³‰A¸m;Ð$´XÄÒ³,W¢Ô=ê½ê™M¢p`×eaöÙ^ÈgL¤mãÚÖû‰v2·ïöÏ?ÜiëôïiÙŽe–†„ÇܺNeÛ^Ï—“êš„Û6MB‹E_vP·ƒ±~èº~´çIo«ñ*.ŸæЙ5fbà¡:M•¶ Z[ 5�{x•/ç­SQe ò-U”jÐþ]ÿ÷í ‡–=_ÎZgû[—- {Ø`¶­@“ÐbÑ—?iÒ’~ê: ÂíQSzLl›Ð\YV¶Þ'Ç/\ï®/iÛð¨´u=¶èù0è¶^gÿÃç[DŠ*ûžð²‚Ò¨ Ûþ®?æjÙ‹+g­ ƒðºà¶@“ÐbÑ—õdG%ý`ÔžpåO°ÔûÔ‰m/ÐTiÛð(´u=¦Ô-è6º¬Û§¹¦"ƒÒ¸ ÛËR´Îw¨Ô9�·mš„‹¾¢Æ†é‘G‘Ï~ö³eý ¬ÛN ©Ò¶á&·u >õøaÏA=QA·òå2êTÒ}-iPþ ˜…v\„ö…C—_VYʃÔ5!�·íš„‹Húbµ4éþûïèC¨,¶}@S¥mÃMmë¾·Ûÿ¢>_.£N¥½¯J5i/µ®K:jP­ÏOoï{ø5Õ)èö´lÉ^›:±mš„‹Há‡KRºí¶Ûjs’¥gÛ4UÚ6Ü´¶®Ç ÿ뚟Ú>‡¸ru*Í}õ©'¢kÙ' ¬uÌ´O¾W?Lzû0èV¾W§òÞ7m ·Ñ/ v²g]èv…Ϩ;Z,"…ãÓ$=0×-�·mš*mnR[×ãħ>õ©ÎöZow¸íqå2êTžûÚ†4Ãôü‰v¬ÔeÏ—ãêTÞû橳/š×‰nS¸Í@ÝÑb)ªG'Mª[�µ$RS’´·6x[Àêe)—Q§òÞW—õ‹„õxkYsí%OêÕÏ[§òÞ7k •©ÓðÝžp[º£ÅbûÈ›ôµ.ã¿£¶DjbJ’öväÇ à4ùãD¸íqå2êTÞûfy•ö¾YG¥½oÞ:û…BS]:Yl{€&¡Åb“¬ã½£RݦF½÷êJm?4Ãïp›³”˨Syï›åqTÚûfy•ö¾yêlø‰¾–u Ûn+Pw´XlbóËšlª0�å³÷]é¯ixë6 ¼ÃmÍR.£Nå½o–ÇQiï›åqTÚûæ­SZ¶_/ôBlæÛn#Pw´Xlâ$Õ¥gö¾«žà)iN4Tqå¬uìÛ/zÚsk)MÙÆ7ë²çËqu*ï}ýrÚí×Û)_åËyë”–mnò:Ìý­Ûn#Pw´XôÐF;˜ 𴇫nÓR£ÊÞwuâo.ˆßÎp›³”“ê´g¶ˆ_òþàþ`à Vå¹oÞa€eáº_µ¬ÇøaÓí·¨;Z,zøjò&= Û@5ìýWxûYM¡&á¶f)'Õi¬ýí0ÙœÚis?ó“?¶iÙøe•¥œTgɾÄ$m¯ÿ•!ÏöÆÕ)+Ûß±_2†E·!ÜF îh±è1H/‘ŒuZ-ëÝP{ÖAx‡ÛåËqu*Í}µ'Vî}ìcu>Ù cËYr ` jU\9ªÎ’M[hë“rݶA¿4ÄÕ)-köÉõ¶@“ÐbÑÃdYA70|ö~6?ÔD“?.øí ·5KY—õqõ¸ãÿ–%pû<j]Ú\“°¶¬Iÿ¶>_]ö²”“ê,Y9m®)Ü^ý"4È|ãÊÊuz¢Ûn#Pw´X¬³Ÿ-Ó&‚n >ì}9Lýïp»|9®NE•õ¸ã‡•X/¯ °û„¹êW—”+¿Îþ¦ö¶‡×d)GÕY²r–\é²¾šÛë’v{ãê”–- S¶ÈŠ‹uöÓfR"èêÇÞŸÃâï¨1ÞÊ—ãêTTY;Ÿüä';Ë–¬w×nã—Ã<®.)ZgCj4Y@«ì6&®Ü¯Î.C߯?)Z—f{ý²Š+ërX_µ:l-ëlªª~‰ ¨/{Ÿƒ¼5Ùã­Õ1`¿Ô)ŸG­³<®.)Zg_04éóOÓ£¬|¹_õìëcÚº,yÔºp{m6*»òË*®¬Ëa}Õê° @V´Xtøƒr˜ºú³÷kÕô¸`·õx+¿-áv¥©ÓÀP{?þñwÖYÒ [ÙíÂ\å©KÊUT>_ëQöC:”¿¯Š+ûe?žÚÖgÍUTß^[åËquÊZ¶ÈŠ‹;ØûDÐ 4‡½o«f¿˜Yàí·!Üž4utkÙ’ý eël9ÌóÖ%åIuÐÚ/®U矿­Ëš'ÕY OÀôË*®¬Ëa}Õê° @V´XtظBMÝ@ó #±á Igšº¨ [SÔð®´.)WIu€Û ¾^Å•ý²õx÷Z“&WIušô54a½U¶4LuØ +Z,:ôCƒ h®ªƒ?;’Í!­ü6„ÛU—¦§;Ì˨KÊÓÖù²‰+GÕùdë²æIuv¢ªÚ¢ü²Š+ërX_µ:l-Ý@³U„è±ÂNÔÀY…Û—ûÕéøèðÂ8iz{UÑuI¹J[U¯âÊᲕóæ*©ÎRÔ‰¢~YE•- S¶ÈŠ �# Ê Äóÿ¦/'ÕÙpÿ8iò2ê’ò´u¾lâÊQu>Ùº¬yÚ:_V~YÅ•ÃûC¶ÈŠ �# ª ÄÆykJ;³GT]ÞÀÛ]—”«¤:?ÇÖyqåpÙÊys•Tg'Úë—)[gü²Š*[¦:l-�F@AˆÍ9­ÉÆy‡Ó—£êô1lÈJžÀ[ó2ê’ò´u¾lâÊQu>Ùº¬yÚ:_V~YÅ•ÃûC¶ÈŠ �# Š ÄNÎ;vìØ¦¿W¶å"oSt]R®’ê,éI¤¶Î‹+‡ËVΛ«¤:ë©§ç¨-�F@ÙAˆnâOÎÿ¦/ûeßknIåÉ˨KÊ“êl¼ÍÜâÅ•£ê|²uYó´u¾¬ü²Š+‡÷†:l-�F@™Aˆöä~ò“Ÿì<¾ŽVáߊ+ë²õxk²àÝn“5WE×%åª_Ÿ*Ñz½•Õ›¸r¸lå¼¹Jª£çZ,�Œ€2ƒëյ܋+ë²j¢Io[¶ÛdÍ˨KÊ“ê4¥¯|9ªÎ'[—5O[çËÊ/«¸rxßa¨Ã6�YÑb`”„ØŒš²öêö ¼-gÍUÑuI¹ŠªÓ¤3·Ø~ò²”Ãe+çÍURÝúÒà—UTÙÒ0Õa€¬h±�0ÊB4XþÌg>Óy\» yø7ú•5P×eK>ð¶u¶œ5/£.)÷Ë~JA_g²”£ê|²uYó´u¾¬ü²Š+‡÷†:l-�F@Aˆd©³œ„ã´M¿²ƒî7«IÔº´yuI¹¦¨ Û.Óîe)GÕùdë²æIuá—#ã—U\9¼ï0Ôa€¬h±�0ŠBüì$Y‡TDva®úÕ%åªèº¸\ƒnïnI¿\Øó4~Ye)Û²MçþÒ5WIušìdKÖ{QeKÃT‡m�²¢ÅÀ(:ñÁ¦—¦|âĉžûFåquIy‘uÖ›Ý/¯*èVÖ‹nWÿ´º<yRýªa¯•ñË*®¬Ëa}Õê° @V´X�E!Q'Y†Ý¯¬ÃSlZB `U˜«~uI¹¤.ì™OJÿøÇ;Ajt+_Ž«SI÷µ^ïp}ž\%Õi²“-UXïE•- S¶Ȫ±-Ö¿ñI$Òæ„ñRäënãµÃ^Q•¦ì“­ 󸺤|:?'·&“®½ÛÖÃmËVÖâp–åËqu*Í}­'Z“ý=«Ë“'ÕYïº /2~YÅ•u9¬¯Z¶Ȫ±-ÖÞp$):a¼ùº‡ÃTøØQe í¾Úëmë£rÕ¯.)WYë|p«IƒëpM\9oêWŽ_oËYsÕ¯Î÷ü{¾W§ìþáúªÕa€¬ÛbyÃÑxoŒ§¢^w þt„ 3®l®õ[]TW—”§­³dÿe¢NA·Òe›ÆæÝ¶õ~9kžT§Iÿž­3~YÅ•u9¬¯Z¶Ȫ±-–7ÜøâµÇþOE½î~ȉ 3®ì{½5·º¨<®.)Oª³žÝ0èÖÜËRÎ[§’îkÉo±u¶œ5OªÓ”÷â:F—ÃúªÕa€¬ÛbyÃ/^ûxìŸñTÔënkž±À>[sÕ¯.)WQu¼Féö'~*¿¬²”óÖ©¨²%?ÜÄß.\—6WQuáɦž/ÇÕ)»¸¾juØ «Æ¶ØqyÃq`ÙŒ}ý3žŠxÝÃk>f\Ùß7\󸺤<j?IQ“ /±Û(¿¬²”óÖ©¨²¿ô~8ÜÄò¨uió¤:Ý?Æê”_Vqe]ë«V‡m�²jl‹—7–ÍØ'ñØ?㩈×Ý‚U Ìüã…UöÉØr˜«~uI¹òë|à­cÕà[ùr\Ê{ß´ãï~W�5ýê’rUgþÙ³g{n«|9®NiY“nÿ0Ùv�MÒØ;.o8,›±Oâ±ÆS¯»ŸßÛ„Wö÷ —Ã<®.)÷Ë>ð¶€Öóå¸:•÷¾YÇÏlbIEåquIyÔ:¿¯tø‰±Û(¿¬ú•-x×a>äÛn#Pwm±ãò†ãÀ²û$ûg<ñºÇl>vTÙ'cËa®úÕ%åJ—ão¿¬ÒÖ©¼÷Mó8¶štûm}T®úÕ%å*ªN“õVûÛ*_Ž«SZÖ¤3Ü “mÐ$m±ãò†ãÀ²û$ûg<ñºûÙALø˜qeßp9Ìãê’rM>ðÖ¤=ÊVïùr\Ê{ß4㇚hòÛo· 󸺤<j 9±uÆ—ãꔕm¸Œñ&݆pºkl‹­ÝîÆ+òÌžÏÉñ ËÝÅhô…}xO.>s@î:þ ù°»¦ n3ÈmÐ×=œß[ùÇ ;ªì“±å0Wýê’ò°Ç;*ðöË*mÊ{ß~uýocËa®úÕ%åÊ¯ó³œØ[åËquJËš¬÷~Xl;€&il‹­×î–\?÷5™ºã¯dáýÕîºb4÷ÀÂ>ÙäúåèÔŸÈì»Ýåhn›Á }Ýýÿ8ácÆ•uÙÊár˜ÇÕ%å–,ð¶:å—UÚ:•÷¾quá•5}àmël9Ìãê’ò~ëü žÆ—ãê”–mŸû/jâÛn#Pwm±±o¸¥–Lwë7§I™n]I¾Ýäypöûrá}”«¯Këà.¹ïä¯Ú!§wS–¯ü“œ{á9yæØ™Þ½]¶L·d©[›†mO~˲0»»÷¹­§­2¹÷Ïå»ß•žð8íþ‹ÓoŸ¬.Ë• ?‘¾óŸåØÌ´ìžÜžîñÛ–Á\‘Öô¤{^Aêybn«íäøYymùf÷¶ýÜ·Z_–‰ûNÊk½¤½K®È…sÏËwžù ™™¾[&·–ÖÒJ·6;Û6Œ—A_w?¿·ñ>vTÙ'cËa®úÕ%åQS"*_Î[§òÞ×/[€êSx›p]šº¤\ùutGÕ›´uzq-Û2‡I·#ÜV îÛbS¿áVdvr·Ì.ôú°œNÎ.Èz¸³rU_úòí‡î‘mwC~ö»¸ÀjUn\ü¦Ü3qDÎ\ o·´mÝy¯|iæëòäáv\yðÝÕ ¨}P·Ú~š¯Ê ³÷˶¸ÞéÄý%fŸt¶cBvîý¢ÌûªþãC ¾½ˆ6aeaV&'gea}.Ëëç¿'ÇÜ.S¾(×â:øuÎ=wÈÃg~ÛûE§ý—Z‡eËÖ²÷K3rìÉÃòÇßÈa×݂٨KʇWÖe+‡ËaW—”[Ê:%b\Ê{ߨ:Kö¥ÆÖ‡yÞº¤Ü/û/+áåËquJËöëȰO¶Tºá6uר›ú —'ø6+¿–SÜ&wÿ¥|Ô]µÙ¿Ê¹£»åŽÙ”÷»k¢uƒ¬Úß]ï“£Ÿø´¿ð^wE WðvŸè—“Í ¾»V_?%÷o{0&`Î0§ßë”AñûM0Èë>hO²²û[2¶æª_]R^çžoßÃÜïâ9>Wyê’rå×i²¡EÆ/«´uv©~=O`Øt;Âmê®±-6õnà[ƒ¦ùÇdâöãr¡Oç÷ê[-98ñ9ùZÒð”zß«×ÎÈÃû䙋}ÂäÁwú}2Áwâ>ê;,)Á7räu·`6ïÅuŒ.[9\󸺤ÜÒ'?ùɾ'/š´u*ï}uÙRKþ"6qyÞº¤<\ÖT䉖šü\áÃbÛ4Ic[lê7Ü@Áw;nºrJlýŠœ~'*úÖÙ+>'Ÿ‰rÐQ³à{}hÍ™:xJ^»QÔ°“,ûd„z¾·þ©œ¼õe#nXR‚oä4ÈëÞ´žo¥ËšlNrÖ{iëTÚûúý¦É†˜Díî—«<uI¹ÒeûR`à ë½4u6ÞÛæ 6Ý–p[ºkl‹Mý†0øŽ †2Í^Q‡à{ãC¢“¶î’ýG¿'ãNÌ|gÚ' ¾õäÑ…çåxû9lÿòd)òËFÚ!8]ßÈi×½‰=ßaàkü²J[§ÒÞ×PŸlV•%Ï[—”kòÓ ZòË*mÒ²&íÙ¯Û IÛbS¿á ¾o-ÎÉž‰Çdþz8` ÿìÑjÔó½zM~>{ŸL=Ø’×Wº§3ßY÷Iƒïîß^O _`ÒÁé"øFNƒ¼îM ¾ý²••_ViëTÒ}5èÖ“RuYSxQ¢<yÞº¤\“ñ.j¬·õèkªÃeÛ4Ic[lê7Ü@Á÷м}ú!Ù¶gN7ÅÞýf¯è§^ÃNV¯ÿLŽÝq‡|ùô•øíÏ|gÞ'#2滯,Cpº¾‘Ó ¯{S‡øí.*ÀTQetkò=ÝÊ–³æ*O]Rî{½} lõÊ/«¤:Ç^—!'J·'ÜV îÛbS¿á ¾?ø'yæÞÛ"N”Ës™zß:ùµùÇejêq™‹œ:øÎ³OF<øÎsQ‚oä4ÈënA¬UþqÂÇŒ+법Ãå0«KÊý²àÊ—ãêTT9ª§;Óí—³æyë’rKEõV6“K]†œ(Ýžp›ºkl‹Mý†Ë|ëü׋òÒ‹ÏÉ“n“­÷þ'¹)È2{źºßm«oÉ™G6øÎµOF9øÎ:§‹à9 úºÛýóô’*»¿%cËa®úÕ%åʯ ðAæ²¶û†AwܘnÕ¯.)Wyêârë¡¶äùrÖ:Kur¢l›€&il‹}Ãu˜EoJw…Ë­;fÿA7åÍ2{…—1WQLÈÙmó[ ,ýßõ_4nüú;rÿ¶n}1H»ÿÖeØ'±í·­?»í`^›ž/I}n÷E*õœî—²ð±×SÊ!?ŽÝãeÐ×Ýæ¤.âòò~l°­󸺤<j]x¤>[gü²Ò²n«ÎWmÏ;LþòðvŸ0«KÊóÖõËýpßCm·Q~Y¥©³€¾Wµôt›Âmê®±-vxo¸Œ³W ¨öI¯<CpŠÓŒ6ƒ¢ úº[ jW¹TþñÂÇŽ*û¹®-‡¹êW—”«¨: ¢ýEn4i¯µ GÑá56ÄFƒíð¶–ìyØãšp]šº¤\å©‹Ë5E<«|9k&m'ubÛ4Ic[ì°Þp™g¯P,ì“@®!8ÅiB›AñŠxÝÃÙ;Tø˜qe lÓÌW—”'ÕYïox’d\²žïp<·åQë,«KÊóÖõË5}êSŸZ_g|9kïM×ýS'¶]@“4¶Åç ·"K§–Yf¯Pý,ì“ÐêÒäÁ3é.ªS‚ú·”¡ˆ×Ýzˆýã„™¦ì“­ 󸺤<k:b½ÚIÁv˜ç­KÊóÖ…ùo¼ÑÉ5é/�Vg|9k]]‡œ(Ý®p›ºkl‹—7–ÍØ'ñØ?㩈×Ý‚6zâ/|ì~eßûت~uI¹*º.)Wyê’r•§Îç¶Ÿ5ÙØ}ã—Už:žS·!'J·+|@Ý5¶ÅŽËŽËfì“xìŸñTÔënC5,Ð 3M9û•ÇÕ%åeÔ%åyë’ò¼uanɆ…Xñå¬u–ê6äDÙ¶MÒØ;.o8,›±Oâ±ÆSQ¯»?ñÒ?^øØqåpì· sÕ¯.)WE×%å*O]R®òÔùÜ’þraëŒ_VYëê<äD鶅Ϩ»Æ¶ØqyÃq`ÙŒ}ý3žŠ|Ýí„= Ľ´e Þû͵.m^F]Rž·.)Ï[g¹ )c¸‰Ò²&?maØöMÒØ;.o8,›±Oâ±ÆS‘¯{8·µ ;MÙ’âýíÂuisUt]R®òÔ%å*Oæö:}ìcëb·Q~Ye©ócÉëta϶h’ƶØqyÃq`AV´™ñTäë®AWÔ´ƒ*KÙî¯) ÀýrÖ¼Œº¤<o]Rž·.œÝÄÖ¿¬òÔÙk¦½ëu¥Û> îÛbí G"‘¢ÆKѯ»õ 3KY—ýô…V.gÍ˨KÊóÖ%åyëìË‘‹mõÊ/«<u6”¥®CN”n_ø|€ºkl‹µ7‰DŠN/e¼îŸùÌg:i¸—¥¬Ë>[Κ«¢ë’r•§.)WYë,ðÖiâùò u–ê:äDÙ6MB‹€PFbÃ4é² ÿF\Ù/‡=àV—'/£.)Ï[—”g­³ÀÛö§ç˃Ö5aȉÒm ŸPw´X�e!>h¶�\…+®lËácÙú¬¹*º.)Wyê’r•¶.Ï8üAê4Õyȉ²íš„ �# Ì $jܶ‰+GÕ€—Q—”ç­KÊÓÖ…CMl½ç˃Ôé0Ím¹Îl;&¡ÅÀ(;é4›¸rT¥<¸*º.)Wyê’r•T—eŒ· ï數³) ë>äDév†Ï¨;Z,�Œ€*‚¨!(áßôå¤:KYð2ê’ò¼uIyR% „­ÎÄ•©³d¯qÙ¶MB‹€PU€«ðoûr¿º¼CPTÑuI¹ÊS—”«¨: ¶-yYÊYëìʤu½œ|H·5|@ÝÑb`T„ø 9ü›¾œ¦.O�^F]Rž·.)ZgÃLôÊ•ve·1qå<u6¯·à6®¼ît{ÃçÔ-�F@ÕAˆš-hó|9©Î?–-[]T®Š®KÊUžº¤\ùu>ÙÉŽVo²”ÓÖÙ8oMzõ̦°mš„ �#`Aȉ'Öÿ®öÖZ�gÂíIª³d=¿¶>Ì˨KÊóÖ%åšüì"št¿Z½—¥œµÎRÆy{¶Ý@“Ðb` +Ñ^Ò#Gެÿ}²°¸¸Ø³-ávõ«³ûùäg÷°\…ë­KÊUžº¤\÷Ÿ.kúÔ§>µ>ÌÄê•_VYÊIuºíËŽþêÐ4ºÝásêŽ �#`ØAˆö˜Z§i¡(~„&y{[gËaž·.)Ï[—”[Ò,­Üøe•¥œ¶Î¾8Ù4†M£Û>W îh±�0ê„hð–4Eùr¿:íö3~Ø,Æ–Ã\å©KÊUžº¸Ü¾¬$M#W§òÜ×uÑíhÒ8oÏžÐ$´X�u BŠ¢¬¬Á»ïQ·¤¢ò¼uIyÞº~¹N¾ÇÙn£ü²ÊRNª³¿¯¹ŸQ¥iô9„Ϩ;Z,�Œ€:!áPMyfð°qßþ±|O¸Ï£ÖYW—”ç­ s?Æ»êoÝ~fý‚d¯GSÙsš„ �# ®AHÔP¿á6Ç•£‚pM~L¸²å0Wýê’r•§Îçþ„Ò0ðöË*mJsßpþ¢0 ìù�MB‹€P÷ $Š¢i Èh𨳃èr˜,Ø·`Ýîã—³æyë,·žzKºmVçùr\J{_ûr¢I¿¸è—€QaÏ hZ,�Œ€¦!:å3ŸùÌúöjòCÂçWÖe ,uf•0¸µdëõïúÙD²æ*kïñפW¬ÔuQ·_ViëT¿²?©R“î'ûۣžÐ$´X�M B4� §ÔäÃð¹ør¿: 65À {Ù-Y0®½îš«4yÚº0ඤϷª [ÿŽ.û¤_RF‘=? Ih±�0š„h°ìƒdËv8Jš:bè—lHL‘ÏÅÄ•íK…¥Q8©2Ž=O Ih±�0š„h€5lDgæ°àÕ?7¿¬²ÔéßÒÞiòaQIn›MÄ‹+ç­S¾1ÑýéÿQeÏhZ,�Œ€QB4XÔà5œÍ$쟧/ç­Syï›åqTÚû¦yœ¨!<~ˆË¨³ç 4 -�FÀ¨!:;ŠöPÇõˆ‡Ï×—óÖ©¼÷Íò8*í}ûÕéI¤~ÿŒú“(öÜ&¡ÅÀå $.·1ã6}ž.{¾W§òÞ7Ë㨴÷ª‹Úã2Ä$Ší Ih±�0Æ%‰ Ä5i0nÃ0<_Ž«Syï›åqTÚûêrÔsÖá8ú\Ç™í  Ih±�0Æ1Ñ!:ôB‡¡ô Æ5i€ª=ãºìe)ç­Syî«_2t9*àö'¢Ž;Û/@“Ðb`„¤ ÆõB3šk0n㣵ìÅ•óÖ©¤ûê6é|Üá¶Û,*Ü›Ù>š„ �#€ d³´=ãZgcǵ—\à°§Ü/«´uÊ—í8ú7t(‰.Ç}Q àŽgû hZ,�Œ�‚d>·`;mÒÛû�Ý’/÷«Kû÷tîq ¸uÇeªÀAÙ¾š„ �#€ $?_mC>|°×[>HÒÇÖ [ÿ–ölëßG>¶O&¡ÅÀ )ö˜kp®²õjgM~Œ9ŠC»GÑb`„`ÑîÑD´X�!G´{4-�F�AÆíMD‹€@‚qD»GÑb`„`ÑîÑD´X�!G´{4-�F�AÆíMD‹€@‚qD»GÑb`XB"cš„ �# * !‘Æ%MB‹���*Bð ���T„à���¨Á7���P‚o��� "ß���@E¾��€Š|���!ø���*Bð ���T„à���¨Á7���P‚o��� "ß���@%Dþ{† Mh/‚����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5c.png��������������������������������������������0000664�0000000�0000000�00000052311�15030617045�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ë��u��� §C���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��T^IDATx^íÝ_ŒWè{KhÞü◫餑ZÖø!åG²5ŠXGEQ¨GaÄ%ÜQÚÊtIsth”#›ÑÉ.-%Ì%}Ax¸i¸éA8Qœz&F‰åéø'é!ñ°:!&¶ûw÷o÷þµ×^]ÿkWíUUß´´ªöÚÖ®ZUõÛk¯ªÚ"����",���1–��€Ë���@ ‚e��� Á2���ƒ`���ˆA° ���Ä X���b,���1–��€Ë���@ ‚e��� Á2���ƒ`è -[¶H$©! ãÅ�:(jgL"‘H¤0Æ‹5�t;àÑaYŽ˾z,ãñbù‡5�t;àÑaYŽ˾z,ãñbù‡5�t;àÑaYŽ˾z,ãñbù‡5�t;àÑaYŽ˾z,ãñbù‡!€5pAæ§&7Äæ4!{¦¿!ó‹Ë²:xꢝÛìêÒ¬LF¾Ç™]Š{õuY]zLöôž71õ„œ[½>x<ƒë¿–ùÇ~$+ƒÙt½ÏZ^”¹é/ÉüÊÕÁc½Gß8)ýàÂ`®:×—çdÿô¢\Ì—÷GYYš—Ù©›†–÷Ýÿ÷¹Ôu…ѰeŽòX–ãò¯Ëx¼Xþag \^”é‰õF±eË¡AP¨AÕq™Þ3Ñ|bêïåÅ•?®?ß}Ý&¿“¥Ùýƒ÷™}sçz!j’Þg,~©@°|YÎÍÝÛ{Í|Æ`yð9SòØ‹+7ê´ú²ÌMÝ,SóUËïÉòÜ!™^¼8˜/ëÆŒõõuÞùÑó¿Éž‡"+9~w ˜õåÍxX–ãò¯Ëx¼Xþag \]’ÙÉõFq#èUnpÕ Lï—7Ü`ªèë6¹*+ó‡ï3YQzY–ç^¯S¦`Ù¾Ã~™]úÝ౞Õs2?½¯Âz:®Ÿ“¹ýGdñò¨"Xw9»ë«÷QoÌ˽²göEz˜+¶¾ü¾~ÿey|ß§äè™ñ¶–V,ËTïÈÙÇï”[Žþ‹\<‚v.û5yÿì?Ⱦ[ŽÉ™+kƒÇƧõí;ýHœÖ/ÿ†g Ľ=°í[ï%Þ²eçp/gÑ×m’'X^•¥Ù=ƒçzŸ»Èê0yY~ã§2§C%®¿!‹ëãöšAJ š­×|ßœ,bÕë+?‘‡=æ7’SßÕeYüÞ¬Lmô¶ï“é'^î­ÕçÌMoüN^�ë Á®¢Ï{WV^üûþg¹?F®¯,Éüì”LôŸç~¾¿Ü4¹ËZ{±ïè=æý8°Þø-7ÉÔÜËÒ#`Ë¿¹®ËåS_’»¿&KïŽ7 hþ²ÌàòÏäÈŽOô¶ËßC;—ýÈ©#{d÷ìÿ’wŒS»Ûw8û‘8í^þÍÎH z7‚¨õò wülÑ×m’·gù¢,Nï<ß>w0”cÏc²´z½4>' •pÆY§ö,[Ý#†„¬ÌËTT=u,ô½7 ‚k·gý&¹wþ×ëïaÏÑ`¾ßƒ{cøÉæÞwFoDzøð >$ß[úù—åS2«ÁûÄÃë½Ï«/®Ï÷—ÁÕAÜÞâøže¥Áù>-s~ ­ãÉYY~ X_þ1›ÿÐ6å§²ÿðÿ%gW¯ ž<°Ñ&£RÄö´vY^]8&÷ïÝ>x΄ì¼cZŽýã䛵3}û[{Mæî’ÛÿÛð¶±¶*Î<+Oë¿ËÌô”ì™Üža[.Ǿg}RÎ×ØØ·$=o»ì½ÿk2æ­Þ™æ}ysþ³2qûqyuha_“Õ ¿SO[ŸyH¦öôÖeæáe£aß§Q?î-m•Éý'ß=û{ ±ònÖÞœ—ƒ%Ç_îÃ_[½ gNýH¾õøWdzj¯LFì?«`õ/&k[Uî±ÁOÚ^É«—‡—·¶ÁåÈ£wî’­ýçé~ä‘Íë%N@û‘8¶ 0^á¬Ä ×ÛˆÜ ¬èë6É,»;RûÜÁŽÁ_<|^Ž`y£W<¢G<&X¾Ñó{‡Ì-¿7´ãžœ]ê7‚Qç}7½Îhî=ÚüÍçÞÜ ÀÕûŽëAýz }ãlj}ÞÆú±`zh9Gìì7Æ »u¡gyÔÖ—Òæ?XOCíôŠ\<û#™½ã¦ä^¯þ:O89ví÷òÊÜgdÇ®{eö©geùâ¹zñ_åÙ•C»´Í§mëSß:ñ,\Š Ú{Ìý÷ÉôÌ#rèc½6SñA.}YVi}?´±½Eèo³C?2{ëqùYøæçe϶ý2óüÅäÀBÿ¦¾u·<¸ðïÞóÖ÷g[wÞ&Ÿ™þ²<z¨·?LÛ¯X-˾ߦÜ}ÕZ¯½¾"OÏÞ%Û’z$Ó¶ƒH:ÜåS2ñà‚\zÛÁö¸u§ìÿÌ´Ì<zH>µÿ¬Àè–qz[íÛ´Üzñk/ÈS3wËö_Eg›_»ôŒÞÑûq}ôi9Ûß¼" Gnz^´°ö#qjiãHÎ(ô}Ý&îs‹ËnOvoãš]å¡ÿrËnÄÎv£Ì«§õêN|Næßø£ó¼bÁòõå'ä׫}ã¹õöâ'{ow9Gìì7ÖgÚ°”aë%Þ`=mj§kòΩGäƒ9*gâŽE‰AÂuY=ý_d×®/ÈÂÊæÑ¯kÚ†÷¦˜²þM­Û[†^ê’Ò—e•ŠËæ=yíÄ!Ùvó19óǸp9ëßÔqí¥Zµ,ûMÁòÀ;§äÈ?.Gϼ3xÀ“¸ÄÈ:Ü%®NÝ2.,¬—wí’{æ_üh»&—þV¶8.çݦÙ?í’~3x NXû‘8µ´q¤ g $½nÊ0Œ¨`¹çúмø˜×í¥=Ëü²}jÅÁ²éI~X¦¦îÞ—¼±ƒÊ< CŸîiîI –u¿CÌ,gY(j}ù'mþqÁ ’‰[—³E‚åµ7ääý7Ë]'Î{½”&ýÀ÷7õfË*>Xîéÿ““ðÅýM½I÷‚åµK òàÄyülL¨•´DŠî¡‹Áò¦×ÇËk¿”ãv§Ë¡íGâÔÒÆ‘*œ5àZ›ƒ(w|°×ãXôu›d –¯/ÏËý8&Xî¾tÝñ·U˽ÏuO¸{Þ篽€~iÞ9 pbJfç—†OÔƒè~gÜð@Ö`yhÌñ‚å¬/ÿ¤Íß~ô¯çeyaáòÀž›åà‰ëÚcÄìzú½qÞpŸ\âþ¦ŽB°¬ƒåµÿONܹK|sð€+áoêM:,_½(Ë/ü?òÍöÉŽƒ'äÕ÷cbÒv%v¸K„.ËýžåËã¿ÜX>ëÃ0n‘ûçž•×V¯9Ã0ËÂ[IŸÞ~$N-m©ÂYn åíÖ/)¶^¶é$´¢¯Û$C°Üï•ýߟ,_<vòÆçذˆU•Á²{Bßà5ÏsƒåÞózÿô½OijJOä;"û#®5,ý8‰ ˆŠËŒYµõ埴ù»ëéFÚºó.9òÝÞ:H:À$ eò¹®Ê@°¬ƒåÄe”çª m–‡·ƒ-[wÉG¾·ùDWWÒv°IΫ2”ÝŽrÝ2.,뉤ÿ,Ok¼ýórrÅý™þ®,¿wpL²t“Üuü\üyà~$Îè–?Êg DÞ\dØ zh³ß”$Ãë6¾)ɦký®.ËOôrh'ªE] C7ª›oŒU y¸1üÃyö¼^^–Ÿ.97q%à·ñõJgåòòiYZ¹ì 9Ñ×¼5|i«C¸≩Çä'ý!#ZÏCÁ®{5Œèžú¡(7kéÕmñÔ`ü¶;4&" ÞønN™ûƒ(ö <lÇ~Ö.¿ ³·Þ"÷ÏŸO>Щ¤ ¡¿~?-ÇÏ»}º?<-Eý`Íñ7uÁ²J –ûûƒ›#·åìS«¶˃}üÚ%ùùìí²ãþyyíjJP›'XÎ<Üe õÁ²í,E]åâšüöù¯ÊÞwËÌS/ô{–×V-§ŸúŠÜ¹ã¶„WÃÜÄÝòG¬mˆƒÞÖȤ'Ê}»Àí®ã^·ÙÞÒ ©?¼ âàÞ?]ÌýTÞX^ÜÊyp­eç$¿×IîÕï±çîVgAeÔÝoÜ=pèÊï­Ÿ;'‹çÎÞ¸¶óžiyBóÄ“ðzI¿ßo{Mâ KQý¡bß_Ÿ£ëÁNtLŠ"/GÏòÈÙòç?×äòéÿ*»7õìDH ú¥î–ƒ'éøLyþ¦î#XVIÁòÚ['åþmQÿåù›Zu$XîY»ü¼ÌìÞ-Ÿ=y!¹f–ó wèTÏrœßÈ»äÖÇ_öz‘×Ûî¶zmwðÈ@÷#qjiãHÅ™ ãˆÿ[Äp¯ûæTÏ8šý@ðoJ‚Q³õ/"øY{Kß";?“@%ì®É¥Å/ÈŽ˜«aĘrþMÝG°¬âƒåUyåñ;e[T[î›t'XÞhÃi—'Ëô¸ ÁrË»‡Æ0¯[?ŽDËáîGâÔÒÆ‘Š5´^`ÛJ=ä¡~�¾óÆMJ6üQÞ˜ÿœ3Ìd úu›äv×5HßG?ko=-ŸO ¢Òv½ ûçÇö¯³üÕïü¿²taµw°Ókÿ¾(ÏœøªÜ³sÇæSÞ¿©û–Õ¦`¹‚ÚOä;Þ-Û·Þ!ÇÎüÎ 6òþM­º,÷¬½) Ÿ¿¥ÜõÆò w Xî±a÷Èì_ô†aÜ.³?¿´¹ç8àýHœZÚ8R±‚7rá ·(c}˜CÄþmºïÛ0‡õ»î”=ÿ$ah F%qÜ?X­—¯'÷Àõ®üêøAÙÖÜBÓ?x»¯qSÄøãµËrþŸæä wØ·4MÈÎÛþ³<:÷#9ó¶8äø›:±I—4,ÎÞ»>zðN‚¶°&<oëN¹íÿ&'—#ît–ùoê”zÄ“!û¬j¬wîwºÑ~zmòWß’»¶ Êl™çÝ2wü‰|_MY‚Ëbì3ŠÉÚVUÜwLúQpEVN?!Óûw ž«wV<,s§ßŒØÎÃÞıÏÄx±A‡N,ÊÜô—FГ —µ;Ù{¯ÁXæAš˜š•ïeß]ÞuúˆÌíó»§Y;àSרYË2M‘¿©Ç§ñË>÷p—úµ§}‡½‰Óžåßl¬ ƒš´.ô7uZu0+ô7õø4aÙÿáÿøÇré’?‚¶Èp—úµ¥}‡¾‰Ó–åßt¬ ƒš³¾*+'”›2_•¡~m:˜­­üPî¿i:ûUƬ Ë^e­ãüüüà‘µ×åäýÏqU†ñhGû?§Ë¿ùX@…°Ö â¹çžÌ5Wˆ3íÍüú׿.ËË˃GÚ)Äeï»ï¾ûúulj[q‡¾ÎG)ÄåßE¬ ƒÆ½Ö^6ýü]»v i®f(k6õf¶LˆËÞ¥C/¬Žú¦‰B[ơէj]û¾¡b �4ÎðK/½´ñùô,žeV'z–Lj`ÌÌÌ ižÐ–qèë|Ôºö}CÅ�:h\;à×_½ß›¬Ÿ­½ŸmÚÁÌzízè¡Á#íÚ²÷5}† m‡¾ÎG­kß7T¬ ƒÆ±ÖÏô?·M\h3û1Ò†^û&s{ø7_ £9Bkߡէj]û¾¡b �d;`‰D"…Ÿ0^¬ ƒ¢vÆ$‰D 3a¼X�*¥Ãl‡ÏЀêèÉ|ºŒuFS¯¼Ðm‚"[®@hq�*ãžÐ÷ä“OEôŠ ºœÛrâd“ÙD=Á£E°Œq Å¨„ö®Y ÜäKg5{=_z2ÇÏ~¸è¥ã0ZÖÎ:Ñâ�TÂ.›¥9êe7!áGIìG¢þ³‚Ñ"XÆ8Ðâ�Œœo40TËíÁoûMHšÀnº£—IÄè,chq�FÊ=¡OTËîGpû¡Èýjؾ¨-ÀÈh/²ÌôNr¨žÝè…+„!Õ²ý P'Z€‘à„¾úY/¾.wŒC0ªG°Œq Å(MeN諟Þ6\—9½øa`Fõ–1´8�¥¹'ôqé²zØMH4ñã$ 6$†±úÕ±6Ô‰ ;ÁLWc¨ý@ÑãgãõS-Û×�u¢Å(ÌíÝä õqoB‰daСº>øñR-k÷@hq� Ñ€ÍNè#@¨—ŽQÖå®c–†`Ôƒ`ã@‹'ô.kû‘B`†`Ô‡`ã@‹›^΂åzÙåâ¸<Y8‚Q‚eŒ-@.6@ãeëÇMHÂcÿ²°Nªgû N´8�™ÙM ÆÃ–?=úápO¶dTÏ–5P'Z€L´™úÆËnBÂM/Âa—N䮕õ XÆ8Ðâ�¤Ò3÷„>ÔÏíÁäÆ/á`F½l�êD‹ŠúÆO{óuЫ†`ÔÏ–7P'Z€Dv¦¿ÊœÐ7ˆYÀ]ÃÁŒúÙv�Ô‰ –]¦L37! “ýãÂÝ+ëcû# N´8�‘Üú8¡l¼l=ðƒ%no?cÈëc˨-À&Øõ|éÍ/ëÝç&$a±õ ¯õ"XÆ8Ðâ�lb—(Ó�—ÆË®¶ C1†`ŒÁ2Æ`ˆ]uúÆOOæ³uÁ–p0c|l¹u¢ÅØàžÐ§w‹ÃxYï%—‹ C0ÆÇöO@hq�ú´ÙDüå?~Ü„$\öï '¾Ö϶  N´8�ý¿•íŠ \36 ±>ÂcÛ Ã”êG°Œq ÅØ8‰LsÆÆŽŸûã…›„E‡'ézáê$ãA°Œq ÅÇ }á±;Ã…‡!ãE°Œq ÅÆ }a²k\ëúAX‚1^¶¿êD‹:Ê.K¦‰kņÃ~ÀhP†°Ø6CÿøØ> ¨-è ½º‚õqY²°Ø a¸"IxtèÛÌx,chq@ÇèÉcœÐ&··ŸõÃ¥ñ±í¨-è÷„>®ß[7ô\†Ç®CÎð˜ñ"XÆ8Ð‱«,hâ’daá&$acFlêD‹:®«‰«,„GÇ(ëºÑ1ËC0Â`û0 N´8 ô/dNè —{‚±ðØ ‚´ñc=`hq@Ëù'ô!<v¹8.I&¾Ä­ÇÇ`ã@‹ZNðzpÑžK®°&nB6û±Éú?‚eŒ-h1«‰;Ž…ÉÆ’óc&L¬Ÿñ³uÔ‰´'ô57! C0Âbû4 N´8 …8¡¯¸\\ø‚Û^€:Ñ‖ѿŠm ,—! 7! ›nKœ1# ¶>€:Ñ‖±¿õ5`æ�.7ã1a²«”p™pØ6Ô‰´ˆÝeL‡`pB_ظ IøìJ2:na XÆ8Ð‖°^0MŒ¯ Ÿ)g]…Éíùg<y8l�u¢Å-àžÐ§½Ë›ý°á&$ábF˜–1´8 á´Ìe.oÕ v…þÞC0ÂD°Œq Å g—æœÐ>=™O×—þÀa}…Ë‚2Æþ‡ÅÖ P'ZÐ`vé1Nèkë±ärqá²ú0L&<ËZÐPî }zpGø¸ I3ØPÆÿ‡Ç¶ N´8 ´ÙÜ&¹9,clyØì�þ­ í÷€:Ñ ÑI;˜óW~s¸'br’p1#lËZÐ pqB_3éUl½!\ ÁÁ2Æ4ˆȵ‡’1¯Í¢=•ºî¸ IØèýÁ2Æ4„õLr o;S1„ËÎ`=…Ëö@hq@صy5q“„æy衇ú뎓1æC/t=q.@¸l?Ô‰ŽúšÍý¡Ãó°ÙP.Å.Û–€:Ñ qB_óÙ8s~è„!Í@°Œq Å³»½éœ@¹y¸ Is0£l{êD‹¥ã[íÀÀÍšÉÖ¡ŽYFØì†`„Íö‰@hq@€ìÆš¸ÔX3é?6Öœ�,lî?�üƒ6[O@hq@`´™úšÏ.ÇàÂg—eä6äá#XÆ8Ð ø'ô¡¹¸ IsØ6Ǻ Á2ÆĮǫ7— £áÄÌð1£Yl]u¢Å°³ñ5Àℾfã&$ÍÁŒf!XÆ8Ðâ€�ØøVMüÜl\.®Yì‡ wÆlÛ¶€:Ñâ€1sOèÓÞe47!ivaÁ?lšÁÖP'Z0Fz°¶Á¸oó¹Á—Þæa³t8™¶9lûêD‹ƈúÚ…›4‹Ý!“!ÍA°Œq Åcb×sB_{ØpƇ!Ídë ¨-÷„>îîÖ¶N¹ I30£™l¿ Ô‰ÔL{‘m‡Ï¥ÅÚÃnlÁ_úÍ`ÿì° 6‹í;:Ñâ€é_¿öW=×um=™Oש®[Æž7ƒm‡ j‚eŒ-¨‘õ>jNPÕv¢—‹k»Ã"Cfš‡`ã@‹j }íÄMHšÇ¶E®kÞ<¶­u¢Å5°[êjâú»íbÃjšƒ!ÍeûQ N´8 b6žU'µ‹;AÍÀŒf³})P'ZP!ý[Þ‚)Ƴ¶ýcÀåÇšC‡^°=6Á2ÆTD{9¡¯ÝìVåÜ„¤9lq}óf"XÆ8Ð ¸'ôqâWûØM-tý¢ì笳æ"XÆ8ІpB_û=ôÐCýõËM-šƒ!ÍgûU N´8`Äì"Mü=ßNîI› ¯i†`4Ÿmw@hqÀéß¼œÐ×~6ĆuÜ Áh‚eŒ-ÿ„>´7!i&Åõ°›Í¶= N´8`Dì–ÇÚsÅ_óí¥c”u=ë˜e4‡ýehT³,chqÀX�¥‰»‚µ—þ²a6Œ{m÷ß�~È6›­G N´8 $»„˜&z­ÚÍÖ5wk†`´‡ík:Ñâ€Üúô²Th7nBÒL Áh‚eŒ-(Hÿεà‰ñ«íg—dLz³0£]l]u¢ÅÙM)4`æ Ü~Ü„¤™lè W¨i‚eŒ-(ÀŒœÐ×|v�Ö¤?~40Ö ØNâãrqÍeW©ÑqËh>Û:Ñ“¬§Jc ÛÁÖg\úË¿üË~ÎMHšEÿñ±uÈœv°õ Ô‰ä`wÓÄ }íaë4-ýÅ_ü?„!ícÛ"P'Z‘öRÙ•/¸U»Ø8kÒ¡ËË˃W#T ÁhÛ:Ñ‌ìòSšsB_»Ø8oÒh abF;Ù:êD‹2бªºƒæ„¾v²p‘¤?žÆÂc—úÓжÝu¢Å)Üú¸Åq;Ùú-šøû˹íbÛP'ZÀ=¡ëë¶—­ã2‰€9,v~ë¤]l{êD‹bè_ëvÀå’aífà2‰±ìá`F{ÙöÔ‰DР‡úºÃÀEm$, Áh/Ûæ€:Ñâ€î }œ¼Õ~v�.’ônÊaaF{ÙvÔ‰xôš¬¶CæZºÝ`ë;obxNxì< ˜Ñ>¶íu¢Å ŽmgÌ ºÃÖyžD &zÁúi/Ûþ€:Ñâ€í‘ℾn²pÖDû—žÔ§ëˆË<¶“mƒ@hq@BºÅÀY’^wabFûÙvÔ)œ·ú¢Ìî™-{“¥Õë½þ(oÌN&¶Ü$÷ÎÿZôY™—©Á†öÉôܼ,._Ög— Ÿý ùÁÊÕÁüdù~›™™™~Òƒ,'kuÏæ}It"PC0Ú϶E NÁ´¸«K³2ÙßöÈìÒjï‘ 2?5¹¾aLÍËÊúÓz®ËåŇ{Aæà�fe×Wdé‰iÙÓü&™zì9Y)^—ÕsOÈÔÄ!™a°œýû¡nz³Ûsö|7ÙúOJÊácFûÙöÔ)œg½ÆËâerWeivOo£˜}sç†z^ož½4hþ®÷šýƒ©Hm/P^ž—iíÞ2Ú`9Ï÷C}ìæš†ºËÚ@TҾ§—x´uÆ¿Cí '\kg†þó§—h´sJ,é9}\ÿQÐý7—ùDU –¯Ÿ“¹}½ ußœ,÷#GëA¶žØâƒåÞ«–çdŸ•m¦ý’^ üSùÞìÔ^é=ÓòÄÒÊ Pý£¬,~iÐ3í& šÓ^¯¬Wz‹LL=!çúÃ-r|?Ôƒú`†·ùIÛÿ64ƒ]òQ+4—½6,®HÒ�ZÛ3F) ÿ2Þ“å¹»‡{Y//Êô¤ð®K –7‚Ò~ùN™^¼¸þðórï„õâ:=П“ù7þØNïeeþÐàµÃ=ËÙ^o½Åúz?ÎþýP=Nèƒk}›NÊÍbÛ3ÿ5—öûÛa™DÀŒQ (XÖžÖÇä17ÀÔÀ÷álÏ›,»c·LÊÔü…ÞcNÛïÙuƒb7¨ –³¾>¡g9Ç÷Cõl§¬cùËëÛò¤í‚@¹9‚ÑúCÇÝË$:A0J%Ÿ?Xî±Kõ‡XLÜ;/oä–³¾M`gÌÓs³¾-¯'=Èp5 C0Ú×\4ñF©}ÁrÌ0Œu:îxQæ¦ï•©©¨áqÁ²I{=Bçö\°3…±6A ÜLöOÛtó¹W'*š4àF©}Á²Žž”¹'ø]_‘Ó“óô*¿’7rõ,÷dz=BæžÐ§½Ë€Ñ6A ÜLºÎÖ÷ÅŒQmw}Mp£Ô²`Ùnô¡eî¥ãœò&geéjÞaY_Ÿ4fã¤;`»«öB.~<5—ý[ÄÕöЫ­_‹%~ôbÔ,ÇÜ”D.ËòüÃÑ7%q‡fô{›/Ý~‡†j¸ï}‡Ì-¿%Ë?ýY¹šõõIWÃÀ8éT× ½‡@»ØeÆtÜ2ÚAÿ\?ŽæO\UhV°œv»ë‰)™ýÞ"nwí^CYo‰½(ç–äáþÍG&dÏôqYZ\þíú²øð¾þûMLý½¼Ø<ëëéY‘õRpBÐ. Áh¯¢—‘£  †dåžÐÇ]Ø€vaF{¹wWÍšb‡ª,£µÜ¿ò8áh‚ÁöÝNvžIÖ¤·Çª@°ŒVÒ¿gíÊ\{h'ÛÆ^ÕNî?ƒiIk *Ëh%NèÚÍþ¦'Hj/·Ó#-qmT‰`­Ã }@ûÙvÎeÿÚ-ËMJt_O§ªD°ŒV±ÛÞjbüÐ^ Á轺…íÓãcÖQ5‚e´†Ƕóäš«@{1£[ÒnRÂåâP5‚e´‚î,­§‰‹Òí¦C/t[gF7¸W6òû{Ô`§cÕ8¡è»¤×N›”0 u XFã¹'ôñwÐnÖ˨Û;º#ê2rÜ„u!XF£¹gJÓÃ�´Ÿ Áàï÷îñoRÂ? ¨ Á2˽*רº!Ýå^툓;Q'‚e4’ö"sBÐ- Áè6÷&%t NËhÿ„>�Ý`}wé0 ˜9‘u"XFãèÒz—ØaÝa?’éUì.=‰›K¢nËh”PNè³:HMOMáÞÉÉ�êD°ŒÆp/4îž%«‰ÔôÔvrC0�Ô`àžÐÂ_pM 4�_ÓÚ0C0ÚÍÚc (‹V„àé_®v¹¨P.BÏNMפ6ÌŒö³õ[EÊ¢!xv›S ˜C9P²FÓ5© Û îØÖ^U´Ç&µq„V„ ÙݺtFHwèc'Œ¦kR¶+àhÐŒvª¢=6©#l´"+¤ú|ì„ÑtMiÃúo’ÕU‡c ªhU¼'º‰V„ Ùº4éåâBÃNM×”6l?š¹Q»UÑ›ÒÆ>Z‚£=Ivå‹P/ÅNM×”6ÌŒn¨¢=6¥#|´"ǽ•u¨g¾³Æh\—Õ3ß“¯8#«ƒGêÒ„6̌=Vñžè&Z‚òõ¯½¿s í„>_¶ð5Y}õÇrôÛeçÖõçoÝy—ùÖÏåí«kƒç [[='ßÿâ§d²ÿþ[erÿßÉwÏþ^"Ÿ½ö{Yþþ—ä¶É­ëõ™< ‡¿û²¬F¿u�zËcù'ò_¸ËYŸ–G¿.¾Î9¿c®å„«²2H¶LÍËÊà‘ºô—g/…쥗^ê×Q¯„ƒv«¢=6¡£hE†{BŸ$C–e'|ýµ§äÞí&{[N-_”«Wß–³?þ†<°ç&¹íñ_È{ƒçmX{S>³lŸ:&‹ç/Ëû_‘…£eûŽÃ²ðÖÕÁ“ÌUyká°ìØ~PŽ.þJVßï½÷ÂQ™Ú~³|~áÍ0ƒÃµ ò?(_žû¡<kË£_çÝòàÂJDs~Ç\Ë/ËIìÇs7"BµªhMhãhZ‚°¼¼¼±ckÂØÄ,;ákgŽÊGnúŠœ~× ëÖäÝ¥¯ÉîM÷‚ëå9Ù·í³2ÿæûƒGzÖ^“ùƒ‘}sçäúࡾëçdnßGäàükNÐø¾¼9ÿYÙ¶oN–‡žœÕª,ÍîÙøn[¶ì‘Ù%0è6=> WäüñO˶dÓŸì9¿c®åW©+²rúIù»dkym•ɽŸ“£ ¿ôzÄ/ÈüÔ¤³\‡ÓäìRoÉû®ÈÛg¾/³÷ïôž÷Òämòàc_¿šÈ·^ìsBfç.„ü/F£ŠöØ„6Žf aäòŽ-ÔçÛAQ{’š ÔNxe^¦¶’ù7º&oŸüÙzç ¹0P½/N”­‡NÊÛƒGúÞ>)‡¶”œÀ°gí ¹sëßÈÉ·¯ )àêY8¼Wv<xRÞìY“«ož”wÜ,ž|-"€+ã9ûø§¢ƒå\ß1çò«Ì{òÚü²}ûÝ2óÔ³²|ñЬ­þZN?õ¹sû.¹þ¼·üòô,_•·6#{·Ý*|óiYº°*kk«raéi™›>Ð žÛ,3£[ªh¡·q4­#§'æéNÿ:M œõž&œÐç+¾¾"oÌÿ|ðöãòêPW绽 ±ðDô&^]š•ÉÉYYr ®}\nñ뻺$³“å{~×V!s÷Ü,·Î¾ —//ɱÛvÊÿpf¤ã¡ûAä‰Gä¶í·ÉÌó7 «È÷ó-¿ª¬½9/'îcg~ç}ŸkrùôøG!G°|ùgr$îKõz ÁŒn©¢=†ÞÆÑ´"Œ”{öº%½E­³ˆâžÐפ³Ýí»åsEV~öUÙ¿-*˜Z‘5Ø‹ �G,÷{“W~"_ÜûaÙ¹s‡ì:ü´¬Äœ”XD¿þƒe¸uÿWåg+W%7äûŽù–_5Ö{·'î?)oE-ªþ°’}^½³ËkòΩGäƒ7“3Œxóµ·åÌ~"g.fÿ’ÅÚp}‚Ñ-U´ÇÐÛ8šƒV„‘²¿N£’Ín@¬c“­,.˜•Õ;³µËòêÉGdrìù77÷ zFÿìÑÓ½zX?ØûÈQ9ãŒ:è÷ºþÙŒœ¾âNý@òãrôÌ;ƒJX{KßÜûž“/žúM=¿å]‘‹ËÏÊS3wËŽ½_•ç;<t$ßwÌ·üªáùŽJ“25að|•5XÎ3\#«Sˆì ˜Ñ U´ÇÛ8š…V„‘Ò¿Lm—ôŽ|M;¡ÏguÏäêë²8óŸdûÞ¿“ùå¸Ë˜]“K +Û—óCOˆs{iAØöi9~~84ɘeµö{yeî3½ öˆüÏÿy¤äVN¼úî pÄÖ~)Çì–~3x` ×w̹ü*°ÇËÞ³|åôŒüYĉ¡EåjÃ5³ýHSÎa@yU´ÇÛ8š…V„‘²ñÇiéOÿôOûyS†ö=’éP†gåØÔnÙuÿ·ä•ÕAp÷Þy9õýgåü{ÃAÏÚk'䮉¨«9ì’ÛÿÛðÕÖÎˉ»vG^)bbÓxè¼®ÈÊ3_îȇäøòjï³,pþ²<1\¢´÷_–Ço½Y¦/Èùs-¿J¬É»§¿"7íø‚,^Šù±rõ²üî·l,o òÕ5yçw—oü ±ú¼<ºkwÄI‚ª·ÎþéûòO+Ã'CþÂâ rÞÚ`O¶6<z΃Ö-ôKHbtªh!·q4 ­#5^9)ýùŸÿycÇ#ÚwˆwEÞþù7äží;eêØ³Ãã}#¯†Ñ³ö¶œúâ­²}ê¨,œ}[Þ_ý•,ö¯|]“ßžú²ìÒk/¼"ß¿,çÉÔö[äðâ[Np™×5Y}ùÿ”;'ÈìÏ/ÝxŸµ—Ÿ=²_vÜóÄ ?¯wÏÈñ/“Ïœ–_8Wrøæ·Ê¶[É™M=¦9¿c®åg.ÊâôÎÞºÜ/GÏ”çÝsõuy拽åtç£òg^ì_ £©Ê…3§ääÜÿ!S»>,÷ ÿ"×_=.·oû¸þÎiy­·l¯^üWyöäÿX¿ôÜP³] ã9tôûëתv¯†±õöÞw¸<x®ãú«râîíýöºí༼9øðô6<ºOÐz1£[¬=V‘€²hE™¤ñÊqIˆM ˜­þñ’¯¡»%*XîéßîÑOîp·U&oû’|?nèFÿîv3rçΉõ÷œü”|1énxiúA|T½ŸnY±³k¿ÿWùñ“³2=µ÷Æ5‚·î’;Ž|[–ÞŽé±Îùs-?õîóòèM[ekéÞxÇÕ7åôÜejÏz€ºþ=wÊm3#sÿx&âîzâç1¹g×à;n™·ýgytîGrfÓr\gùž›×pî¥É½2udNþéüå˜vrQžŸÙß{þeï̳òÛÁ“¬n¡aF7Y{¬"eÑŠ02YÆ+G%ý˵)—Œ3Vw4Ùš\Yš•oÙá õè†PÛ0C0º©ŠöjGóЊ02v+’t¬s“X½Ñdë'ämI¦Ñ^ãhÃz5=¹×Oöï’–³muSÚz/R–öž@V´"Œ„{+šštó«3¬ŽrëÑî…ÍÝ3Ž6¬W±ÏJŸøÄ'úù_ÿõ_7îß&”cm`”ªxOt­#ñÜsÏmì˜Ê$íej«/ÐTãhÃiÁ²ŸtÜrSö (ÇÖù(Uñžè&ZFÂîÄW6éPŽ&°úM5Ž6¬¯}nž”tP´ƒ­kãNû’Ê”•ûï E+ÂH”¯ì'í¥Õhªq´á¢Á²¥™™†g´”­ãQªâ=ÑM´"”6ŠñÊš4ànB ¬¬Î@S« ÛçMz¹I®”Ñ>¶~G©Š÷D7ÑŠPZÙñÊM ’MÔ÷ ‘š˜êU‡"©‰·ÉG<[¯£TÅ{¢›hE(­èxeí!Ò~š(êûHMLuÓñÇQõÈ›ÃÜ.¶^ã)K{O +ZJË;^Ù‚dÆÝ3Š`¹iÿD!­ÛQªâ=ÑM´"”¢7°RZ"H÷òq~jÒõØ‘­ßQªâ=ÑM´"”¢ãm‡—’˜2Á²ùB;Ù:6î´/©LY¹ÿž@Q´"”¢—r²’Ÿ’øŠ^>No‰Ï¾¤½l=Rï‰n¢¡ ˆm‡d‰ @œ"Á2rûÙº¥*ÞÝD+Baþxe‚d�itÿàî7Ò’îWt_ƒv³õ=JU¼'º‰V„Âl¼2A2€<,ˆÉ’”»!jÝ*eÑŠP˜ŽWÖn’ä¡Ã*¢‚?q‰¸îˆZÿ£J@Y´"�@­²\k™;ôu‹­÷8EÊÒÞÈŠV�¨•^+Ù™¨Ä%âºÇÖý(Uñžè&Z� VI×ZÖ^gt­ãNû’Ê”•ûï E+�Ô꥗^ÚdÜÄ%âºËÚÀ(Uñžè&Z� VQ×ZÖ«ê\ºtið tµƒ8EÊÒÞÈŠV�¨•ÅÈhâZʨ"°­â=ÑM´"�@í,ѤÃ2Ðm~`ëNû’Ê”•ûï E+�ÔîÀý@†k)CUØ,cThE�€ÚéU/¸DLZ`[¤,í=¬hE�€Ú1ô.?°M rÓ`+÷ß(ŠV��ƪŠÀ–`£B+��c•Ø)K{O +Z��«*[‚eŒJçZ‘m<$)9@]üýNÒ>(mÿdåþ{Eu®ÙÆC"‘’�Ô¥Šýû2ŒJgƒe�ÑØF�ÔÍö;U$ ,‚etë=¶�u³ýN (‹`ÀzÏŽe nUìwØ—aT:׊º²ñ°“ÆòÈŽe nî~ÇÝÿøû¢¬eJçýÇ€":׊º²ñ°“ÆòÈŽe nUìwØ—aT:׊º²ñ°“ÆòÈŽe nþ~Çße-S6¯¹_ѹVÔ•‡Ä0–Gvm]Vö½H¤.¦ÐUQϦ|w„¯s­¨+;‰a,ìÚº¬ì{‘H]L¡sëéÖׯ{Ö2¥óþc@kEam<kòþÙ}·“3WÖFcwï¿,ïû”=³:x`4»<òÁòkë²êL�Mi÷UÔ³)ßáë\+ kãù9udìžý_òîà‘QiæNâº\>õ%Ù±ûk²ô.?òÍòkë²Êú½ìyERÓE}§´„°5e=ùõô뜵LÙ¼æ~PDçZQüÆsAæ§&7Ê7¥©yYé?窱ÌŠ~Ζ­2¹÷³2;ÿ’¼}5=XY{s^Nü•õÊà‘uk«ä̩ɷÿŠLOí•É-‡d~åê 4«SQW—f{Ÿë¿Aš< ‡¿û²¬}ŬË/ÁÚk2p—Ü~üßzaŸëš¬^ø…œzúÛòøÌC2µg{¶÷sX=ÊÉó“ÚÉvÙ{ÿ1Yxõ² ·’Þ÷\þ<zç.ÙÚÞ„ì¼ãùîÙß{Ï‹·üÖVå™gåéoýw™™ž’=“Ûejþ p3«gÛdý^ö¼")t—.]ê§8Qß)-5Å믿.øÃsét9åy~¨š²žª¨gS¾;Â×¹V”mãY•¥Ù=29»Ô yb\]’ÙÉ=2»dw¯ÉÕ‹ËòÂÂ7ä=;dï̳òÛÄç9ûø§dâÁ¹4ô¼Aµu§ìÿÌ´Ì<zH>6†`y‡;‡««oËÙ§gåŽmï}÷ßôeX~›¬I¹uâ!Y¸tmð˜YR·î¼M>3ýeyôО1Ë®ŒßqS;éį½ OÍÜ-Ûw|Aïºvé9¼£·¼>-g/^éµ§WdáèÁMÏ‹–°üVæeJïý÷ÉôÌ#rèc7,w„|Ï=÷œ|ýë_—l, yä‘Á³Ö¹óî´¾‡½î¾ûî“ÿøÇ‰wH´žóóóß}×®]‰ß[éüòòrÿùýèGû¯orÐlë.tn=ÝúúuÏZ¦tÞ (¢s­(ÛÆS$X6½ ùµïÊ=Ûö'½ü39²ã ç@?Ð (Xî»$§ŽÜ,9z¦úE),g’2ø1ÑØ`y`í¼œ¸k—Ü3ÿÚ ×øš\Zø[Ùvผw<]?'sûvÉ ¿<'ëò‹[§7Œ~Y…¡­ßË[Ò`qfffh9¸Ó*ªLßO§Ýdsh¤ÈZ/­Ÿ_g |λ¢æ-59h¶ïº*êÙ”ïŽðu®eÛxÊËê¢,NïJ&ß—7ç?+·—W‡Çlb°¼öï²ðà.¹åñ—G,Ç IÙ¬%Áò¦×ÇËk¿”ãv§ËÙ—Ár[iüÉO~rã{Zz衇úžö&»ßßVie(êgX°mIðq’I²&­·ÕOç]Ió:íþèhbÐlu_O¿ÎYË”Íkî—Et®eÛxÊËïË…eë¡“òöà‘!zÅ‚[w˃ ÿ>èULT°|E..¿ ßü¼ìÙñY9ñj\fÞ`9nHJ”6õ,XÿåFX†q‹Ü?÷¬¼¶z͆qXÞJú”<Ë`¹mü Ù‚;J`üïíÎ)³ÀYç-YÐ\­C\€¬½ÕϸÓ*ϼNGÍM`u]õlÊwGø:׊²m<eƒå¤€.ç Æ,û'´e9é,g°œuHJ_Óƒe=YñŸåi ‚·^N®¼?x\½+ËÇïõN¬¼Iî:~®÷ó+A®åG°ÜqA²+i¾h™rçý Y‡lTIƒd T5`u?×d-×yãN«<óQenÐ\õw«kèÜzºõõëžµLé¼ÿPDçZQ¶§l°üž,ÏÝ!Ó‹ryðȆØ+>Ħgùš\þù“[w< 󯽷^+O°œcHJ_ƒåõϾ‘¢~p\“ß>ÿUÙ»ãn™yê…~ÏòÚê¯åôS_‘;wÜ&3Ï_Œùq’wù,7„nÀ¦Óú˜ò¿_Ò|Ñ25¯½¼šk:räÈ dt,HÖlûûî:írç“ÊT‘׺ß5ô€Ùê:¿ž~³–)›×Ü/Šè\+ʶñ” –×Þ“÷ï”}sç¼€8éŠ1B†±vINÏ|\¶ö‡²’Ø)ž#XÎ3$¥¯-c–}¿‘…vÉ­¿ìõ"¯±ØöÀ‚D^ ÷ò#Xn*—«ãí{h*$+w¾h™Šš·4ª 2*HÖ¡QßÝVYËTÞ×Z®)ä€Ùê:«g («s­(ÛÆS&X^“÷^ùrÛ¶¨“­ Ü„$°ül\íáÅ·‚³¬Ár‘›h´9XÞ=4†yÝú¿ÑÁr‘åG°ÜD/½ôÒP°¨=›Êÿ>yæ‹–©´×ZÒ¡zba^ ëw~òÉ'‡¾·þX°±Ø:oÜi•µL}­N7!`¶ú…ÎêYEÊê\+ʶñ –õä·å™ï<*wnŸ”ÛŽ-y7íèš™¯Xà,XÖ`õ­…Ã)ZÆ@2¶Ë6 ã™ýá‹Þ0ŒÛeöç—6ÿ8)´ü–›DƒF÷êÚ£jÁ§û]üï•g¾h™Š›wƒHM:\BߤÀÙ‚ã¨öâ‚dåÎ-SE_«Ó–ô;„Æê:·žn}ýºg-S:ï?ѹV¿ñhQö~²ó¶döä¹Mrö+$½¿¦,WùĦ;øMÎÊ’E…ï/Ëñ»¶Ê,ϺüLž!))ïíÖ-†=·œ<ß1n=&ýð¹"+§Ÿéý;ÏÝ*“ûËÜé7#ò˯ÿƒË¯ÇäüöxÛ4í{i`éöªÚÕÜïàŸ<óEËT–×jp«½­:ï& œ5øu“ÿK<‡$]7:¯ëKà„Dëåùõô뜵LÙ¼æ~PDçZÑØ6ž\W,(/üD!)%„¿<òªnùµoY­kÒ÷r{f­7Ù¯»;ŸT¦Š¾6Ïû¨¸×j«Î»Á¿Ÿô{jp¬ÓnÀ©ó®¤ù¢eªèkmÚzÄõŸ€hüú‡È­§[_¿îYË”ÎûEt®gãÉ{Å‚òBßI’RBèË#¯*—_Û–•iÊ÷òÇÁúuvç“ÊTÑ׿y•õµ:­=Å–l^O^LzJš/Z¦Š¾6ªÌRHÃ1¬N¡óëé×9k™²yÍý2 ˆÎµ¢±l<k¯ËÉû?žãŠå…½“¸*+'”›2ÝDc4Â^yU»üÚµ¬nhÂ÷Š:a̯³;ŸT¦Š¾6Ïû¨¬¯-Z¦Š¾6Ïû¨¬¯* q8†ÖǯkˆüzúuÎZ¦l^s¿ (¢s­¨+;‰a,ìÚº¬Bÿ^i²_÷¬eªèkó¼ÊúÚ¢eªèkó¼ÊúÚ¨2M¡\Ãê:·žn}ýºg-S:ï?ѹVÔ•‡Ä0–Gvm]V!¯¤¡~³–©¢¯Íó>*ëk‹–©¢¯Íó>*ëkãÊlx‰¦z—­.¡óëé×9k™²yÍý2 ˆÎµ¢®l<ì$†±<²kë² õ{¹²_?w¾h™J{­Ž±Õ Ý¿…t–¤¯Ó1Çö^ÆV£(SQó ÚŒ¤¤ßO‡Jh«ó®¤ù¼ev²Ÿ®ÛqÓzøu ‘[O·¾~ݳ–)÷Šè\+êÊÆÃNbË#»¶.«¿WÔÐ åÖÓ¯sÖ27oÁbÑ�9*éU ¬WÕåÎ-SQóúyI—ž‹K:¦X¯¼‘vbaÑ2»vWÆÐzøu ‘_O¿ÎYË”Íkî—Et®ueãa'1Œå‘][—Uhß+mŒ²rç‹–)›·d÷“]¶ÍØtRnÁ¦›4x-s©»¤2eóQŸí¿–+÷1?¸Öå1ê Ù­Û¸‡bX=BçÖÓ­¯_÷¬eJçýÇ€":׊º²ñ°“ÆòÈ®­Ë*¤ï•4FY¹óEË”Î[€uc7@vó¨ÇÒr? BÝi•µLEÍ»Éóó¨ÇÜqÅ–´¾þð wZe-S:¯iÜC1¬¡óëé×9k™²yÍý2 ˆÎµ¢®l<ì$PT[ÛN(ß«®e÷sÜd²&•'•¥ån²�ݸÓ*k™Ššw“=æçIe~Ð<êúj÷P «GèüzúuÎZ¦l^s¿ (¢s­¨+; ÕÖ¶Â÷ÊÓ£¬Üù¬eQArT²òËR––+¶“Ü4�õ‡e¸Ó*k™²y[~þ?WqennõÕ|=̈ë°qÒ:øu ‘[O·¾~ݳ–)÷Šè\+²‡D"%§¶÷÷òƒXWÒ|Ö2ÿý­—Ô üÜ<ê1Ë“ÊÒrwÚ ˜í–×.w>©LEÍ»Éóó¤2??pà@? ˜•;ŸT¦t^Ár6~=ý:g-S6¯¹_ѹVd‰DJNm3Îïå÷(¿>IóqeQ=Év'9—«"ei¹rsO¨ÓºÚã.w>©Lé¼ÞQ¯ósW•ÛŒ|àýq{ÜåÎǕѳœ[O·¾~ݳ–)÷Š è„q8m‚¦,c”•;WæÉÖ+דìçEËÒò¨ÇlÈ„& ˜•=G¹Ó*iÞÞ¯ªñ×Ö#nw>©LÙë –³±zV‘€²hE�:aN \-ˆÕ½üÏÏ3oÓlÚ{Z²ÀYeÍU‘²´\E•Y€û¡}hè¹ÊO*S:ï^ÚØ´Ÿ«¸²¤ÜRÑáô,çcõ¬"eÑŠ�tÂ8œ kÒ ËøõHš·é¨ ÙÊŠäEËÒò´2Mv…+Sî´Š›w¯`¡üi?O*KË5•é ×D°œÕ³Š”E+Ð u8í.nš²Œ}UQó:>× ’ã.o–7WEÊÒrWæºÆO*Söz mlÚÏU\YRîÞ…Ï7î|\=ËùX=«H@Y´"�PçÓ§lA—+ë¼ ¯°äŸ¸çNçÍ‹–¥åieš,€´2åN«¸ùº{–5Ù¿V¦Üi5¯‰`9·žþ´Ÿ'•ù¹MeЊ�tB]ΤqÊþç'Íû²;vÖ}žÿXÖ\)KËU\Y“z–U™ýèYÎÇêéÖÕ¦ý\Å•¹¹% ,Z€N¨ëÀé^ù!ªGRe™w“=æçIeiyѲ´<­LSÔUAÜi7?ŽžeíÑ·ÇŒ;­¢æ5,gãÖÓŸöó¤2?·i  Z€N¨ãÀéökP§ÜÏô??jÞ}?¨ôsW––«"ei¹Š*»téR?·ärç“Ê”½¾ŽžeöbóÆ+£g9«§[W›ösWææ–€²hE�:¡ê§ö"ÛÉwîØbånܼ(Û´ŠÊ“ÊÒò¢eiyZ™<Z™r§UÜ<=ËùX=BçÖÓŸöó¤2?·i  Z€N¨úÀé·ÆO*‹ ”Mû¹Š+KËU‘²´\E•Ù v]î|R™ÒyMô,g£uðë"«§[W›ösWææ–€²hE�:¡Ê§ÛÛ©ÓÊý,ÿs£æ-¹²=fÓ~žT––-KË£³@Ù3î|R™²yz–ó±z„έ§?íçIe~nÓ@´"�PåÓ®š`cŒ•ûYþçºóþU/”›G=fyRYZ^´,-w§ÝKèÙ2r¹óIeÊæÇ,—ùD°œ[OÚÏ“Êüܦ2hE�:¡ª§]GY{OÝË»w>ªÌMö˜›«"ei¹*R––+N ”Ýi•µL鼦:†ahnÉåÎÇ•YPO°œÕÓ­«Mû¹Š+ssK@Y´"�PÅÓ=©Ïow>ª,êêQyѲ´¼hYZ®Éë«)Ë%ô’Ê”Í×ݳ¬×Ì6V¦Üi5¯‰`9·žþ´Ÿ'•ù¹MeЊ�tBΨ“úüψ+ó_—«"ei¹*R–”kìþxÐ@1*Pv§UÖ2¥óšª> ’Û]×ËêéÖÕ¦ý\Å•¹¹% ,Z€NõÓíá´i—;UfÉz˜íq?/Z––-ószâɺLì9ÆVYË”ÎÇõÆ»Ó~žT––k²“û”•)wZEÍk"XÎÆ­§?íçIe~nÓ@´"�0ê§{RŸû¾þgD•i�å¿6.WEÊÒr•Vf?âr¸…&=aÑ^ïrç‹–ÅõÆ+ÿ±,eI¹­_û®.w>®Ì^G°œÕÓ­«Mû¹Š+ssK@Y´"�0ʧ{‹¼ãqÝßìñ¤¼hYZžV¦cum:Kª2HV:oÉ `í1›ö󤲴\“­_eeÊVQóš–³qëéOûyR™ŸÛ4P­@'ŒòÀiãXÝ÷óß;®ÌzG³ô*k^´,-zÌ¿ŒÝG?úÑ^pÍ-Ù¼.¿çÕV£(³¡–”›G=fyRY\nßÉ3î|R™²×ër'«GèÜzúÓ~žTæç6 ”A+Ð £:pº›Ž¡UîûúŸá—¹ÉKÊU‘²´\¹¹=É:þ؆X¸ò̲ìÉ'Ÿìçšlù[™ñËR–”kÒ46ïrçãʆ‘ճДE+Ð £:pZïk‘kǹMÊ‹–¥åšüžäЂdåöò¾ôÒK»yÔc–'•Åå¶ní1ãÎ'•){=Ár6VÏ*P­@'ŒêÀiC0ôÒbÆ}_ÿ3ü2Mþ˜Û¤\)KÊ5Hv{’u¸…Én¯­r§UžùQ”¹½øIÃVT‘²¨Ü½â†~¾=îrçãÊèYÎÇêYEÊ¢è„Q8ý!îûùïU¦¹%›OË‹–ÅåQÃ-B ’•Î[€lu¶Çý¼hY\®©èõ•Îk"XÎÆêYEÊ¢è„Q8Ëžøå¾6k®Š”Eå–>ðDÉÊO*SE_›¥Ìn bIÅåªHYTîþ˜0î´ÊRfC\–³±zZ]£¦ó”ùeЊ�tÂ(œþ_ëîûùïU¦¹%›OË‹–ù¹%í­ 9HVþXj•”-ós»¬Ÿö¸biÒ%ãdõÕÓ­oܼ;u(ƒV Fqàtƒ8—;ŸVfóYsU¤ÌÍíîzQWwp§UÖ2Uôµien²Ç’rU¤,*×äŽVî´ÊR¦?¨tZOJ'­ƒ_ÇY=­®QÓyÊüÇ2hE�:aNÿä>÷ýü÷Ž*ÓܒͧåEË,·@ÙƒëN«¬eªèkÓÊòö([^´ÌÏí*Z{ÌåÎ'•)×d—«G謞n}ãæÝé¬ó@´"�PöÀéžÜç¿;ŸVfóYsU¤Ls ”5iý=G¹Ó*k™*úÚ¨²<c”ý\)ssÿ*V¦Üi•Væç7­‡_ÇY=­®QÓyÊüÇ2hE�:¡ìÓz=µ÷Ѹïç¿wT™æ–l>-/S¦Iëk²•+wZe-SE_U¦u³a–¬,k^´ÌÏ-wZe-³¶2î“û”Öïkˆ¬žn}ãæÝé¬ó@´"�PöÀiÃÒnÚ‘VfóYs•·ÌND´@Ù}¾rç‹–©¢¯µi­§{õ {<o®Š”¹yÒ wZ¥•ÙÇ}rŸÒzøu ‘ÕÓê5§Ì(ƒV Ê8mHƒþÅnÜ÷óß;ªLsK6Ÿ–—)³yãÎ-SE_kÓÀ»·°¶¤ŠäEË,w‡`ØãÊVYËB9¹Oi=üº†ÈêéÖ7nÞÎ:”A+Ð eœîëý÷qçÓÊl>k®ò–%]âN¹óEËT‘×Úx^7ùÃDòæªH™›kÒŒ•)wZ¥•Y²ï5NV—йËÍw§ó”ùeЊ�tBÙgÔëÝù,eš[²ù´¼L™Íw¾h™*òZ¿÷Özê•=fÓyó¢e–[²ÆVYÊìÇ€/ Öůkˆ¬žn}ãæÝé¬ó@´"�PöÀõzw>K™æ–l>-/S¦É½t™•+wZe-Sy_ëŸÀ§ÉKmÙtÞ¼h™åšŠÞhÆØ¼ /q{©ÇIëâ×5DVO·¾qóîtÖy  Z€N({àt_ï¿;ŸVfóYsU¤LsMþ 6”;_´L¥½Ö’m,¯•»¹Š+KËU‘2ÍÝärçó–i²ÇÍê:«§Õ5j:O™ÿ8P­@'”=pF½ÞÏR¦¹%›OË‹–ÙMÖ»låÊVYËTÚkã‚dMö?O*KË‹–Y=­WYY¹r§UZ™;;„ñÊÊê:«§[߸yw:ë<P­@'”=pº¯÷ßÇO+³ù¬¹*R¦¹´ºÁ›=G¹Ó*k™rçý1É–âÆû¹Š+KËUÞ2·¾~•;ŸµÌn¬Ê ¥õñë"«§Õ5j:O™ÿ8P­@'”=pF½ÞÏR¦¹%›OË‹–Yn'ÒÙu„;­²–)w>*HŽnõ˜åIeiy™2›7î|Þ2ÿZÍ!Ðúøu ‘ÕÓ­oܼ;u(ƒV Ê8Ý×ûïãΧ•Ù|Ö\)ss7`vO¬Sî´ÊZ$»½´~®Š”¥å*o™¥¨!*ÊÏRæ.P†`(«S謞U$ ,Z€N({à´;͹7špßÏï¨2Í-Ù|Z^´ÌÏÝ€ÙÆÖºÜù¸2 õû뼟Ü1Ò**/Z––ç-³u9ê“5…4CY½Bgõ¬"eÑŠ�tBÙ§]L,㾟ÿÞQeš[²ù´¼h™ŸGÝ D¿“>nÏ16íÇ6ÄÀOÖ£ªì1›öó¢eiyÞ2MýèG7õ²+w>o™¦†`(«W謞U$ ,Z€N({à´`Ó½™†qçÓÊ4iï£=ž–«"eQ¹¶ö,iO«ÎóóóýyŽ Ž5Ù{_7W£.KËUÖ27¹’æÓÊB‚¡¬^¡³zV‘€²hE�:aNûû^‡(÷ýü÷Ž*sƒ*¿G6./Z––kò/ñ•,h¶f{}\^EYZžµÌ¾KÜm­•;Ÿµ,Ä«`­—ÿ=Bdõ¬"eÑŠ�tÂ(œnpérçÓÊü÷HËU‘²´\¹Y¯²æ6íSÈš«Q—¥å*­Ì¾“öª§ ¿Pþë]~™á¡ ÁPZ/¿þ!²zV‘€²hE�:aNë] ¸ü÷Ž+óÇ«¤¼hYZ^´,-¯¢,-O+‹Zæ&i>KYÈC0”Õ-tVÏ*P­@'ŒêÀiC1´§Ò¸ïëFT™]‡Ø½C\®Š”¥åªHYZ®F]––«´2MY‡_(ÿõ.¿LSˆC0”Õ/tVÏ*P­@'ŒêÀi—HóOôóß;­ÌRÚØå¢eiyѲ´¼Š²´<­LS–«_(w>KYÈC0”ÖÍÿ!²zV‘€²hE�:a”Në¶Þe÷}ýψ+Ë:vY)KËU‘²´\º,-WQeE‡_(w>®,ô!Êê:«g (‹V FyàtoÀ¡“òßÛ*s-+Ê‹–¥åEËÒò*ÊÒò´²ª†_Ø%ôB‚¡´~þ÷‘ճДE+Ð £>pF;Vþg¤•¹ÉssU¤,-WEÊÒr5ê²´\E•i*2üB¹óqe6~=Ô!Jëç×?DVÏ*P­@'ŒúÀé÷.ûïíÎ'•i ¥ó–”›G=fyRYZ^´,-¯¢,-{Ì-3yæÓÊ,…:CYCç.ÏQ' ,Z€N¨âÀi½ËîûúŸ‘¥,)`VþcYÊÒrU¤,-W£.KË•û˜›Œ;­òÌG•…|#—Öѯˆ¬žU$ ,Z€N¨âÀ©'¹·Žv¹óIeJçãfwÚÏ“ÊÒò¢eiyei¹?­É†FX™É3ŸV¦)ä!Êê:«g (‹V ª:pºA®?~Y¹óIeJçÝdlÚÏU\YZ®Š”¥åjÔei¹ÒiKQ²;­òÌG•Y y†²z†Î]¦£N@Y´"�PåÓ˜•ûYþç&Í»ïeIEåIeiyѲ´¼Š²´ÜM¶üŒ;­òÌÇ•5e†Òzúß#DVÏ*P­@'T}àLêaö?7˼›ì1?O*KË‹–¥åU”Ååv• Kuô(ëg6á*FëéY=«H@Y´"�PÇÓ˜•û™þç'Í»ïeû¹Š+KËU‘²´\º,*÷o8bËËåÎ'•©¬¯µB:V=ô!Jëê·Y=«H@Y´"�P×3-`VYçÓæ¨Ç²æEËÒò*Êü܆AhÒë([™qç“ÊTÞ×ZÒK6Õ7tî²uÊ¢è„:œQA®ò??˼ÿ^6ôÀØtÞ\)KËÕ¨ËÜ\Ç kîNwZe-Si¯u¯|b·9o­¯ÿÝBdõ¬"eÑŠ�tBÝN?Èu{"ýz$ÍëtÔ{Ù´='o^´,-¯¢Ìr+lɸÓ*k™ÊòZwœ²^[»I´Îþw ‘ճДE+Ð ã8p¾ôÒKòÉO~rèÀ­wû3~}’æuÚ†hzòÉ'‡z™óæªHYZ®F]¦¹¥?ù“?é÷ò{Žr§UÖ2•öZM07aœ²Ëê 8¶ �0® Aƒ+ýÛÞ>ß’tùõrçÝi ŽÝd½Ì*O^´,-¯ªL“»°åfåÊVYËTÚkÝñÑnÞVw�űè„q Ú£ìÞ[{)µçYùõrç£Ê4@Žê±¶çfÉ‹–¥å£,‹û­Üù¢e*íµ–4hn"«?€âØ‚�tB(AƒÈîØ[  mh†_?w>ªL‡bhnÉz°­<)WEÊÒr5Š27P¶«Š(÷ùÊ/Z¦¢æ-5áæ#qì;�(Ž-@'„4D ÍÐù"C ´—Ùí±¶+6Ø {žŸ-KËGQ([¹qç‹–©¨ywyêçÛzi"û�Šc Ð ! þÐ M64C¹õõëî—ùA³¦¤žfU¤,-WeÊü@Ù-WIóEË”Îë2´úЇúui:ý.þw[€N9hð‡fh*:4#®§ÙNT³ç¹Ó~žT––—)³àØ’+i¾h™²y·§ÿ¾ûîkäÉ|Qì;(Ž-@'„4D ÍÐ54C¹óQeQ=Í–t ®<»¹Š+KËUÞ2?H¶¡Êžg’æ‹”éòmÓ° Ÿ}/�ű脦 £š¡t^{H50vï|ç'+ÓçÚcöú¼yÖ2ÿJšô{koÏq%Í-së =ðmvá³ï 8¶ �д Aä¬74ñ¿WÒ¼Ä Û 7éc~ð¬²æ*ªL{k£dKE‚dåÎg-shjÓ° Ÿ}G�űè„& qC34èÔ2ÿûä™·i mHFTð\UÒ�Uó,c³UÒ|Ö2[f–ôûêòm3û®�Šc Ð M¢†fhÒ`ë­uå™*K¶Q4i€ìŽ•6î|R™*úZv è÷s{êÛʾ/€âØ‚�tB‚ î4Ø´^Y7Ypëžœ¦ó.w¾h™*úÚ¢eªèkuÚý¡¡W±!]`ß@qlA�:¡mACRà¬I˲ q(Z¦Š¾¶h™ÊúZÈ…^7¹íC.¢Ø÷P[€NhsÐ8kOª^Í®áN«¬eªèk‹–©,¯Õ�9ê$® ¹ˆbË�@qlA�:¡+AƒÎQcœ5ÙÍO²œ$˜T¦Š¾¶h™Šš×ï5ÆZ<tiÈE[�Šc Ð ] 4XÔáqÁ³”O>ùdÚÆ;ë´+Ï|eÊ· ?.@v‡ t-�ű肆uY‚gÍõ:ÏúÜ´ÞgåÎWQ¦t^ë¤CJüKÜ dze 8¶ �@а™Â€jϲÉqÉÊ5XÕ`ÛÆ»7óÐyãN«,e˜ë{'ôšt8‰>‡�9™-/�ű肆tnð¬jR°ê'ííµçkkÉ*³ÏÒ餤Á±>O_×Ö»íUÁ–€âØ‚�tAC9:$ÆphÒñ¼Žú®Úƒ­ï­Ÿ¡=Ìú™(Ζ+€âØ‚�tACµt8„¶6„"OÒ×Ñ[\ Ú=P[€N h@ÑîòØ‚�tAºˆv”Ç ÐE´{ <¶ �@Ѐ.¢Ýå±è‚tí(-@'4 ‹h÷@ylA�: ]D»Êc Ð  è"Ú=P[€N° DêbP[€Nˆ H¤®$�ű���1–��€Ë���@ ‚e��� Á2���ƒ`���ˆA° ���Ä X���b,���1–��€Ë���@ ‚e��� Á2���ƒ`���ˆ$òÿðò}#VÉâr����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5d.png��������������������������������������������0000664�0000000�0000000�00000115056�15030617045�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��š��¡���ÁY ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��™ÃIDATx^íýá×yæ óà}œ ð‚ÀÕ †—ü †ˆ† A°PBÊð’„z”Çt‚DrðfÙT’¥×›ÁÚ„½áÆ8»ŒßP‚ø8¦ ÑŠÆ1 ‹°Ç‰ì–&¹²Íw¬%­!ç¼}UÕ=s¦ºêÔ}Ý=u¦{xÿ€ƒ>w_u]§»¦§çtÕ©žÁqÇqÇqzÀ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½àMÇqÇq§|¢é8Žã8Žãô‚O4ÇqÇqœ^ð‰¦ã8Žã8ŽÓ >ÑtÇqÇqzÁ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½p[N4o--„¿™;öOφ…•êΰ–æ„îÛ$–à ³GÂ#ó—«;úâzXœ;Žž½ZÕ6n-½¾tô`رcGÕ>^¼v«RÇqÇqtäh.͇™µÉK½M…ýG¿æÿf!,­Íi.‡ù™é†m«¶ÿh˜›ÿFXXúuµ½†(s¤IåÕpö؉Nÿ­¥“û÷†™g¾½þ¼® ÇžYLm7™[? s÷ gG™"ãàt88÷ÃpëÖáì#Õ¾Þ7~¸ì“MÇqÇqôlÁÍÁíèÞÁäåH˜_’©Ö¯ÃÒÂ|˜ÙSLj¦f¾Mjn æeO†©Óa&:"ˆ£’ó³3ƒû“ ©GÂܯUІj²9ÂDóÖâ\8Øå¿õ/aþ‘½aÿì+a¹º«<êø`˜žÝü‰&ÓýGÏfOÔ)ž×Žýavaý‡ð‹°0{˜zd>¼ásMÇqÇq”lÁD³:E½a¢Y#hOâ”íÔÆÉYq$tãD³d0A=ûaqtó™° >â6âDsùa“⤿š O=a¼–ø¥03µ£‡‰ææœ6_Y˜ ÓCÍ×Ά£S{GÎwÇqçöa¼&š ˜Ðà(e4Akh9BÊL‚êÍÁpñ›ák8Bºá¾ùptÿÔ {O˜™ ³Gþ<,ü¢šdbr[µÆIcq z*L­a\Ÿd®{« Ý­¥°ð¥£å„mj&<óÊÒÀQQ¬ñ¬ŽÞâ±Ä§á…ø´ù`û³_›Œµ?üñüדx2¯gÍž ‹Å½i™B<á¬öóÁ¹°XÛqÇq§ñ›h6M“M9µ¾#šÔuQ›hV“Âbrµá¾½á‘ù)'|8 þ‰ÁD³xÈŠ#¢m¹Z§º>9•Çÿ`R÷‹ÁDð•0‹‰áZvyÚzÇþ?g—~]­ù¬k4\?m¾<Ø~¥öÉ#_ ¯¼ðaÿÔ'ÂüåÅ0ÿÈþj¢*Gƒ7=n=¢ÙùssÇqÇÙÈN4e¢MÒ’M™ &V3óa©º/MÓD±vßÊB˜Þfæ~­¯º'š­¶¡‰æ¯ÃóŸˆN±WÏÃãˆ'ÑåÏ G|‡N›Ë>Þx”·Xûd‚Ý×>Ñ” q“æ8Žã8Ž3ÌÑŒ&4Ê#šúuЉ¦IÄW·7] ¿)MD}£<}1%{è¼ì¿(;>m^аÍÚ}å‘ÎmýgÑ>ÑLkŽã8Žã8u|æÚChºïZX<{jíjøõ Ž´͆ÇÔ0ѼµôíðÌ`Œ©™Ùðµ³ ál|Dsíˆgue}q%ûàñDûgøjóÄD3ñ˜O4ÇqÇÙ,Æk¢¹¥W§&2Ž<†î‰fëcšhÖ/²©: Q995óLxaQ¦•MW›7M4kkA#n-ýsøçjßµO&;> 8Žã8ŽãÔØ‚‰¦Œ',8m,ߣ9˜d>ùBtšZ&H'm¾G³ºPFMÃÚÄ¡ûVÂ3Ÿï¼–žL4åe5ÑĶo¼ææ†×qò®¨&šSG_o,|5Ì-\(³Šçp=,/ž)÷ƒ<Žâæ½-Gs 6Õ:Îú„Qކî?¾´P]Õ¾üÃ0ÿÌßT“\Ù×MG‡ëbÇqÇqœ4y'šÕ$k}m`ܪÿ tv1š´UºÆí­øÏ@߬¾žGIuqÍzÎ`Â{ù|ã}Ï™ _ÿª,î;ŽÎÿ°zlëGR§fþ<¼Ò8É­&mñd¬µ•¯)d½òçÕ×á¾ÂÙ/b’ˆý1¯]®¶_µíܵ¡Óæ¯:¯O67þ{IŒq²úÏJ û:>bëߣé8Žã8ÉѼhüÏ@,¸(鱡ÓÝå—Æÿv¦ÓØþŸÇqÇáñ‰fßBùîÊê>5Õ)ûƯmºÎ>ùǵSæ=pk)¼òÌL˜ÞðoAÇqÇqºñ‰fŠÿÆs$<ҶβYky0ýÒ+ëÕbò÷‰pD¾L¾7pÐoGÿ=ÈqÇqGO4Çü{Êyü;Éõµ“ø¤y¹˜ÇqÇqgLñ‰¦ã8Žã8ŽÓ >ÑtÇqÇqzÁ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½àMÇqÇq§|¢é8Žã8Žãô‚O4ÇqÇqœ^ð‰¦ã8Žã8ŽÓ >ÑtÇqÇqzÁ'šŽã8Žã8N/dhÊÿêöæÍ›7o“ÑÇqFÁ'šÞ¼yóæ­µ9ŽãŒÂ–L4Ññ}¹5ø~ïß·ã…ÿ<ÇÙ ²¾‹ø׿áûrkðýÞ¾oÇ ÿy8޳d}ñ7®ÍÃ÷åÖàû½?|ߎþópg3Èú.âo\›‡ïË­Á÷{ø¾/üçá8Îfõ]Ä߸6ß—[ƒï÷þð};^øÏÃqœÍ 뻈¿qm¾/·ßïýáûv¼ðŸ‡ã8›AÖwãÚ<|_n ¾ßûÃ÷íxá?Çq6ƒ¬ï"ÛákõÍùðÈþgÃ…«Õ=[Ãöú#ðnxsþ“aÿñ 7ª{Æ•‰Úï«—Âü# Ç/,WwŒ7þš/¶×ÏÃqœ­"ë»Èä¿q-‡ Ç…}³ÿÞ©îÙ*¶Õ_/¿÷þ0»ðËêŽñeröûjøõ…gýûþ4,¼³µŠ´økz¼ØV?Çq¶Œ¬ï"£½q­†•¥o‡/<öþ0]åìÜûáð[ÞvÌÌ‡Ë ³k÷ol»ÂGŸ §9Hn„¥—ÿkxìÀ®j›©°÷ÁO‡¹SÿŸðáGÂüÒJµ]kß ÇöÌ„“¯¯£X]¾Î·¹Ï&|ò½açôlXh±o&òüF§i_îÝfæ/†…ÙýkcmhÓã³—o†°²f§¶Ù±3Løx˜=ýðÜ:×¹®ûƒ°çƒ'Ãë·ª»ÂͰ|ùÃÙù¹ðùcŸì Ó³ !ÃníDžÛæÚ÷—»•yM×ùßáܱƒáƒ'<ØÃ«Ëƒß“³a~îsáØ'?öîÜ?˜ÏÑNy~#³òfxù ‡Ó;ËÌ÷„ëÃa/~·/ŸW¼VWÂÒü‘êþ©p߉„w«è®‡Å¹+mºø9 Óðšó}ß„ìÇqœQÈú.2Ò×õ7Ìÿ»pñê`¢7xã¾tþkáé‡î*&šKئ˜ðÄoàƒÉéÕ×Âóù©°÷Çé×qòz¸ô¿Ž†}û>þó™×ÂÕ•ÁŸê•+áâóŽÞ¿{ðøÚ&š8öñp磧Ã[Ñ_÷›¾>üÐ'ñÏÏ…¯Î΄©‰šh®†ë¯ý—ðÀî‡Ãñj_¬.ÿK8ÿÜgÃC»v­ý-&<ž×põâ á/;v?|*¼þ.vÈr1)Ý0!,öëÃcûï ŸúqôÇ:§w~_xôôѤéWáÂ‰ß =ö™ðù¹ÿfgölɦnßë^ÓÃ`‰ÇÃw>N¿íµ›‰4<vìsaî«f¦¶ãDs9¼vâ#a÷Ìñpæâ•Ákfð¡åÒwÂsO4ìZûÝÖ¼VËmîØ»7Ü.ŽTÞöî½³ý5Ùôšó}ßÄæ½ÖǹÉú.bãZ ¿:÷ûáÎC'ÃO¢IÞà¯Cyä¡u¢)ürðGãa÷±o…koN}4Ì-ÿ^½|*<Ô6Ñ|÷áÄ} ²ÛO… OÈúcsþ¼ÎÛü§h’.‡ù™½‰‰fÅ;ÿf÷íÇÎýïAÑðÇ»`5¼³ð§aßî?ç®­[«X ï^üB¸/yz·-wkØœýtû^õš®îYçWáâ‰ÓK<Zs·ŽMÙ·¿:ŽÝù±pò'µ•‘Kóa&5Ñ,ˆ_«×ÊmþðÏÃñû†§Îÿb]?8æþ¸í5©xMá¾obó^ëŽãÜÎd}±¿qÝ WN2ìšhâèÎÃw¯–oø­oà«áÆ`²t×{þ üϯÿöÐQÉ5®ÿ$œûúKá'×ëâàÌùφ»Í…Åâè]3“7Ñ|3œ>²·a²s#\]ü~XÄ‘ãíÏ Œï ïyêüÀ‘˜Þx5ÌÞõ¾Áëú$ýáüS‡æ.6í,Ø®Mݾï~M?Î×/L{çåðÔ]kü0µÆvh^9Žìl˜h®\ ‹ßýqyCõZ}£Ú楰xò7ÂGÏ^íXŽðþð‘SÂ?´¾&¯iŸh:Žs‘õ]d”7®Õ·þ.|j÷žðÀ±/‡¿³XýÁ¨‘z/Žhü_aff/?ii<½;ÌäM4WÂ[gž»§?Ž|!|G&ì5ÚŸW|D95!¬¥«h<½;Ävhêö}÷kº~¾y‰ÇÛu¢¹úf8ó©{ÃôÇÂÉ_YŸ°o@óZ-×'c›w/ ™z,ü¯‹§Ããïùx˜óíV¿ê5íMÇqn#²¾‹ŒöÆu3,/þm˜}ô`t.Šø‹ð­¥®£?ðGyço„cÿÏÿUÊ?:òØŠ¶aRµÞ]œ ‡îúl8ßqõîäM4¬þ2,ž~&<ºvA žÿÁðè³–ªÉ|×Dsç‘ÓáJçï}áÈé7«¼ç>îzêåŽ+ø·ëDs€bßw¿¦?N_¹YÝ1àÝ‹aîЪS½ ¶ëDsÀêòÃéÙ¯_ T\èó‰ðì·Þ¨^Cš×êÖ·Y}#œ~ôžðÞýûª |›_ùšö‰¦ã8·YßE6÷ §_*ùï–SÚ­oàÕÏ»?¾ýÒgÞû¾.6o<B„µpì8½[2‘Í:8Åxî¯ÃÓÝ»öœÛŸÖÞî>~ÚÿxëæÞŽ_øUuÇ�¬ï¼÷7Ò§w ¶ñD³Nþï~MÖæ™åÂ{;–xlã‰æF°¼æGá.²Ú-Ë 4¯Õ‹¶¹®}2Lí¸;<~æ_‰-~íkÚ'šŽãÜFd}1¿q%Þ˜‹ xîøpæmùš†íVß gŸxo؃# ï|7¿oxüô¥á?2 ÍU\<t'N—uM31üdM4Ûï»áò©‡ÃL%Û·[}ûÅðÄîÕѳ¶?Þ7ÃÛg?v„·N?î|x>¼Ù1Ú®Mí¾W½¦«»Bqäí}ááùKƒÉPÛr¢™x­¬þ4œLà;óoƒBóZýÿmÜæúb8ýìsáÂ2.hkò¯iŸh:Žs‘õ]ÄüÆU¼1ßö?öŸÃé—~T­ÏÄ×–œõÄÂîÿ¯°„»†ÞÀ×zîÚýD8S¬›ø^ûR8¼û`xì/_(¿* ÷]þÇðâÜãáž ÍòTØžÆ+{‡™È‰æÎûÂc'þgxIÖ_õÕðÄ÷†Ÿ¾\LX†ž×Ú‘·»ÃîOý]µ°þÇ7:’´ëÞð©3o®O~ŠÓ»««Õ»ØÆMž׽¦AµÄcOÓÕý lã‰æÎý‡§¿½¶>³øÚ¨¿z2Øý©pz 5¯ÕÔë®Ac^Ó>Ñtç6"뻈ù«xcÞ~ãÓ¿¿q=ÛÎ{ÃáêKË?Ürÿ††uœÏ†3¯_[Ÿè`b‰õž‡ï ;×¶› {øOá©“ç××Ç_ßó`8q1:å[£}ÜA“¯]êcŠÇ>õÑðé?Ž×³í;ïy¤úâêòªÜ¿¡a-áñçÃë_Øþ‰püÌ?E_Ø^}ELÛò…‚ĸ­_’y£Ò½ïS¯­¦×4–x<Pûrñ­?'´ú’‘üÈc±S¾n¦~ãÉðÇÖrO…{Ï–_p¯z­Æ_ؾ£6ÙŒ_›òZT¼¦Ç|ß7!Ïqg²¾‹LÖ×Íðö™ß ïQÞÍÏÄþXý×pæñºÓ»cȸî÷Õ·ÏTWDw/ñWü5=^LìÏÃqœ±"ë»ÈD½qÝúq8ùÁûÂgßË?“úGàÖë'Ã÷|:œÅšÚ d<÷ûðúÉ™°ç‰ÃÛ<Óñ×ôx1©?ÇqÆ‹¬ï"õƵòV¸ð—ÃO»®ÞÝ"&óÀjX¹r!|㥟¶ŸÞsÆs¿ßW.œ /ý´ë þñÆ_ÓãÅdþ<Ç7²¾‹ø׿áûrkðýÞ¾oÇ ÿy8޳d}ñ7®ÍÃ÷åÖàû½?|ߎþópg3Èú.âo\›‡ïË­Á÷{ø¾/üçá8Îfõ]Ä߸6ß—[ƒï÷þð};^øÏÃqœÍ 뻈¼qyóæÍ›·ÉhŽã8£àMoÞ¼yóÖÚÇqFÁßE*~ö³Ÿoª¿û»¿[ÝãôÉoþæoû{qq±ºÇé‹ùùùb_ÿÙŸýYu“ùÜsÏ=á{ßû^u¯ã8ÎöÇ'šo¿ývñ‡� }§_0é‘?¼ÿçÿüŸê^§0™—×ö·¿ýíê^''xO‘WhxýûëÞqœÛŸhF<ýôÓÅ/ùËÕ=N_à¬üáõ£ÈýQÃÑ{'?xÍã½E&›‡ò#úŽãl{|¢SZòÇØéLx°¯±Ï1rúzìkLðýhÚÖÉ%&™2áÄäÓŽãlW|¢YCþ�ø)Æ<`?Ë\?ºÓ/˜ÌÈÄÞ×kn-~tÓqœÛŸhÖSŒ~:7¾^3¾^s¼h:ºé8޳ð‰f ¿((?˜\úzÍ|øzÍñ¯ù°…†ßÿ¹8޳]ð‰f~QP~|½f^|½æø5âò;࿎ãl|¢Ù€_´5øzÍ|`r)“_¯9>àç"tÑüè¦ã8“ŽO4[ð‹‚¶_¯™_¯9¾øÑMÇq¶ >ÑlÁ/ Ú0¹ôõšù×9š9/šŽnúºqÇq& Ÿh¶àm¾^3/2™ÁQ|?Š<~<ÿüók¿¸Eí8Ž3)øD3_´uøzÍ|`r)KEðšwÆ|Ø• ¸ÐÐ÷ÀŽãL>ÑL á°“_¯™E–IŒ1_üè¦ã8“†O4;#=˜t:yñõšyÁ¤E&›¾^s|ñ£›ŽãL>Ñì@.–ðSŠ[ƒ¯×Ì‹¯×œâøñÃŽãŒ#>Ñì�G äÍÜl ¾^3¾^s²À19ê/?3ÿ€à8Î8áMr”Ǩm¾^3¾^sòˆ¿¦Ên:Ž3NøDS_´õøzͼøzÍÉÃn:Ž3ŽøDS‰_´õøzͼøzÍɤ~tÓ—›8޳•øDS‰¼yûºµ­Å×kæ“Kù€åG‘' ünÈÏ ßìÇÙ |¢©Ä/ |½f>ü(òä‚ß L0å} Oÿpæ8Nn|¢Iàøêë5óáG‘'?ºé8ÎVâM¿(h|ð#myñ£È“Ýtg«ð‰&‰ð‹‚¶?Ò–?м=Àï‰|@CóiŽãôO4Iü¢ ñ´åÃ"oð{"Ë€Ðð?[Çqœ>ð‰&‰_4^ø‘¶¼øQäíÎÊøÑMÇqúÆ'šü¢ ñ´åÅ"oüè¦ã8}ãM~QÐøáGÚòáG‘·õ£›þ¯GÇÙ,|¢iÄ/ ?üH[>ü(òö¿3øà “Mô}yã8£âM#øãŠ7c¿(h|ð#myñ£ÈÛÍ”¸õ£›ŽãŒ‚O4øEAã‰iËK|Ù¶øYúÑMÇq6ŸhŽ€_4žø‘¶¼ÈQdÜ:Û ?ºé8ΨøDsü¢ ñÅ×kæGºd2‚ÿ>ãl/ðó•hø€í¿SŽãhñ‰æˆøEA㉯×Ì‹|èò߅틬KGà ÿ9;Ž£Á'š#â/¾^3/ò¿´±Ï}=ßö¿S~tÓqŸhŽþ Ê›®ÿq?|½f^|½æíÝtG‹O47¿(h¼ñõšùðõš·õ£›ø=óß/ÇqêøDsõi~QÐxâë5óâë5o/dÉ„¼ú™Çqb|¢¹IøEAã¯×Ì‹¯×¼½ÀäRÞÑðó÷£›Žã�Ÿhn~QÐøãë5óâë5o/0±ô£›ŽãÔñ‰æ&áM¾^3ñzMìwçöÀn:ŽãÍMÄ/ |½f^âõš8¢ìÜà÷L>Ô¡áwËWǹýð‰æ&âM¾^3/²¬ûÜ'·xO”ß5ÿ}sœÛŸhn2~QÐdàë5ó‚£ÇØ×8²å§Qo/ðó–³=òðŽsûàÍMÆ/ š|½f>°}½æíÝtœÛŸhn2~QÐä€É¯×ÌŽË׼=ñ£›ŽsûáÍð‹‚&_¯™9â}îŒÛ|Ðß;Ü>ÿüó•â8ÎvÃ'š=àM¾^3/¾^Ó8ã#¯4ôý,ãl?|¢Ù~QÐdáë5óáë5Íô£›Ž³}ñ‰fOøEA“…¯×Ì‹¯×tbüè¦ãl_|¢Ùx“”7MÜ |½f^|½¦SG3å}¯ ?#ä8“O4{Ä/ š<|½f^ä(–šø’àC‡œ]@Ãû¨¿6grñ‰føEA“‰¯×Ìö¯¬göe&NŒñ–ßE?ºé8“‰O4{Æ/ š<|½f^pK&~!ˆãG7gòñ‰fÏøEA“‰¯×ÌK¼6Ï×k:uüè¦ãL.>Ñì¿(hrñõšy‘5;^Ói@ä Ú—¿üe8ÎàÍ ÈP?26yøzÍ|`ÿúzM'^#˜`Êd¯ÿè8ãO43àM.øÃæë5óáë5 ˜\úÑMÇ™ |¢™ ySôµE“‡¯×Ì‹¯×t4øÑMÇ™ |¢™ ¿(h²ñõšyñõšŽ–úÑMÿ0è8ã…O43áM>¾^3Ø¿2yðgNx½È‡4,wñ£áŽ3øD3#òF蟸'ü1óõšùˆ×kúK“d™‹¿ng<ð‰fFü¢ ÉÇ×kæÅ—,8,~tÓqÆ ŸhfFNúEA“‹O~òâK ~tÓqÆŸhfovxÓóug“O~òáK+xíà5#“Mô}¼ãäÅ'š™ñ‹‚¶>ùÉ‹/YpF_™%¯Üúw´:N>|¢¹øEAÛŸüäÅ—,8£€ö~tÓqòãÍ-À/ Ú>øä'/¾dÁ?ºé8yñ‰æám|ò“_²àlMG7ýw×qúÁ'š[„_´}ðÉO^|É‚³YÈû0^SþÁßq6Ÿhn~QÐöÂ'?yñ% Îfß]ù ˆ†ÿ~tÓq6Ÿhn!~QÐöÂ'?y‰—,ø‡5gTüè¦ãôƒO4·¿(hûáë5ó/YÀ­ãŒŠÝtœÍÇ'š[Œ_´½ðõšyÁ‘LY²ðå/¹º×qF¯%™lâ=ÚÏP8ŽŸhn1rºÆ/ Ú>øzͼș4ÿÀæl˜\Ê�4L>ýè¦ãðøDs‹ñ‹‚¶'¾^3/rÊ×k:› &–~tÓqFÃ'šc€_´=ñõšyñõšN_øÑMDZãÍ1À/ ÚžøzͼøzM§OšŽnb™Œã8i|¢9&ȧe_c¶½ðõšyñõšNßàu%¿Óþ{í8ÝøDsLð‹‚¶/¾^3/¾^ÓéÝ”%Oh8sáG7§ŸhŽ ~QÐöÆ×kæÅ×k:9𣛎ÓO4Ç¿(hûâë5ó¯×Ä$ßqúÂn:NŸh޲¾Ì/ ÚžøzͼÄë5±|Áqú$>º‰Û矾RçöÆ'šc†_´½ñõšy‘µÏøÃïG™œ¾Á‘tœ±ßqô})”s»ãÍ1Ã/ ÚþÄë5ýPÿÈ~œÒôõ±Np4Ón:N‰O4Ç L<ðæ„æ“íI¼^Ó/Véìoù£ïë5\øÑMÇ)ñ‰æâmâõšþåâýƒe òß×k:9©Ýôןs»áÍ1Ä/ º=ˆ/Vñ5¹ýãë5­¯79‹†ƒ ¾ŒÃ¹]ð‰æ˜âÝø—‹çÅ×k:[‰|Ø‘ßywn|¢9¦øEA·¾^3¾^ÓÙjüè¦s»áÍ1Å/ º}ÀÏW&?¾^³|½¦3øÑMçv!ïDsi>ÌT¿XÃm*ì?úÅ0ÿ7 aéVµ½Š[áÚÙgÂ3 ËU½}ð‹‚n|½f^|½¦3Ôn⃦Ýt¶Dój8{tïà—êH˜_Z©îûuXZ˜³3{Š_¶©™/….+g›·~æ ³Ûp¢)“¿(èöÀ×kæÅ×k:ã�^{ò»/ï÷þÏœíÄL4WÂÒü‘Á/T<Ѭ¸õF8ûäÁ6öϾº§Ž×Âç S;öoˉ&ð‹‚n/|½f>ð^~¿|-´³Õ`r)¯G4?ºélÆk¢ ® G§¿hSO†³×pTG;O†£û§ª_À=aæ™o‡¥[2É,)‹6=‘·–^ _:Š kyÿÔÌŸ‡W–~]æO~QÐí…¯×Ì N]Êû„ÿ÷g«ñ£›Îvdü&šk§Ö÷†£g¯VO9Âù‹°0{ÿ@“#˜’ѬüûŸ Ë+ayá™°ð ;=»0Øzòð‹‚n?|½f^0Á”ýíë5q éè¦ãL*c8Ñ\L&÷ôé039Üzc><2UM:¬,̆éÔDóÖ¿„ùGö„©£gÃ5Ô+ avzr'šÀ/ ºý£¾^3ò;†?î~ºÒð:”×%–Óø!gã#š×]ÞZZóµÙ0ƒÓêÉ#š·–ÂÂß|uí£IžhúEA·'¾^3¾^ÓWðþ/ËiÐü€ƒ3iŒÿÍÁ„ñ•gfÂÔÔL˜ýÚ7Ãųœ>¢‰5¯üù`Bº'ÌÌž g/¾0ñG4üôS©·¾^3/¾^ÓWüè¦3ÉŒ×Dsèªs|Gæ“ajǃanñz±Iç©ójMçÁ¹Ü¶Á©sàÝžøzͼøzMgœñ£›Î$²Í®ïÑL2Ÿ|¡úÒv™H Ož}#ÜZ^ /ÌÎ &ž²fStÔ‹aaî«aañ¯ÃÌZƵ°øÂ3Åéöµ5›Š_tûâë5óâë5q¦é覿/8ãLÞ‰¦æ? &ŒñjË[KßϬ}‘ûŸ‡ógÿ<ÄöûŸ ó‹×ú áI|õÑÔLxæ•¥pKNµcÜwþ…ðŃøj¤ƒáèüßÍ9¾È›‹нýðõšùðõšÎ$€£ïrt·¾ÜÃW¶àˆ¦cEN£úEA·¾^3/¾^Ó™ð¾ ÿá }?ºéŒ>Ñœ0ü¢ Û_¯™—x½¦i¶3ÎøÑMgœñ‰æ„áÝÞøzͼüÙŸýÙÚþöõšÎ8ÓttÓ_³Î8àÍ o&òFâÛ_¯™ü¡–ý?ÜŽ3îÈÁ4|@ò³ÎVãÍ Ä/ º½Á 9Mæë5ûë5eûïœ3 à5+Ðð7Ãn:[…O4'¿(Èñõšyùö·¿½¶¿}½¦3)øÑMgð‰æ„â9¾^3/¾^Ó™Dü観Õd™hþô§?­zÃ|ó›ß¬zÃÔµ®:f³´¾Æ5W>©Ö×éš+tålVnL®1·S®ü‘×AŽ1ëÜ.¹øã|ÿý÷û»i½fc‚Û57&טÛ9÷ÿð×&›ø°™ïkLÏ-·1s“ýˆ&^äBÜZ X½V X½LÐx›. jÛVˆk«¬^«¬^&h½LÐz™€ZÖ¦¶µjÀêer€ÖËä�­W“¯×Ôz­°z™ õ29@ëµjÀêer€ÖËä�­—ÉM^L.ålšœ‰iò LmÕ€ÕËä�­—ÉZ¯U£xs“utíŽèÚIV¯UV/“´^ôã‹‚RÛ‚º7F««×ª«—ÉZ/“´^&HÝ´^3Þ¶ÍR°z™ õ29@ëerêë5SÛZ5`õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“º¼2ÁDÃÄSŽnvùbRµUV/“´^&h½V X½ÿá?ü‡ª——¨G´;"¥«×ª«—ÉZ¯ôã FŒÆ+h5`õZ5`õ29@ëer€ÖË䀺7^¯Y×b´°z™ õ29@ëer�jY¯‰¯w‹·mò ) X½LÐz™ õZ5`õ29@ëer€ÖËä�­ýøè&š¼–ãí�S[5`õ29@ëer€ÖkÕ€Õ[×r’eäßÿý߯zäž|j§Æ3cnf.ZÓ‘,0JnL_¹1¹ÆÜ®¹õõšuúÜŽ¹øƒ\ßßLnLÛÂíš“kÌÛ-¯ãúÑM,‰é£)W`4Ϧ¯1s“ý‘ÄO>µÓR°z­°z™ õ¢/§Íå4zL—7F««×ª«—ÉZ/“´^&Ô½rD³¾öªËÃÔV X½LÐz™€Ú×Çêë>4`õ29@ëer€ÖËä�­}œ:_Ëò}±)HÕV X½LÐz™ õZ50Š77YG×dõZ5`õ29@ë•~ÓEA@ã´°z­°z™ õ29@ëer@“·k½&¨û´¯P÷Æh5`õ29@ëer€Ô]û»ÍR°z™ õ29@ëµjÀêer€ÖËä�­—ÉZoÜÇÑMÔq‹nÆÛ‚TmÕ€ÕËä�­—ÉZ¯UV¯¯Ñ¬HiÀêµjÀêer€ÖÛ¤¡i>…Z5`õZ5`õ29@ëer€ÖËä€./Z}½&:¾ ë AÛ¶B\[5`õ29@ëer@Ýëëcí^«¬^&h½LÐz™ õ¶iñ‡'´I¿ØX½LÐz­°zëZN²Œìk4ûÍ•7YØ3JnL_¹1¹Æ¼r›Ök¢Æ³~€æuS¯cm»æ6íï˜>ÆÛ97&טž[‚£›² ¯k9ºYß–Ééʹ]scú37ÙIüäS;-¥«×ª«—ÉZoÜ—É‚œ¾Z/ÐjÀêµjÀêer€ÖËä�­—ÉmÞxI…q“ÉPS“«Mê˜TmÕ€ÕËä�­—Éu¯¯µ{­°z™ õ29@ëer€ÖÛ¥Åk7SÛ‚¸¶jÀêer€ÖËä�­×ªQ¼¹É:ºvGtí$«×ª«—ÉZo“††O¡RÇty…”¬^«¬^&h½LÐz™Ðå­ŸKµ¦õ… U[5`õ29@ëer@“7Þßšý™Ò€ÕËä�­—ÉZ¯UV/“´^&h½LÐz5>´â?a¡FC_>ÈÆ4y­¬^&h½LÐz­°z·õM?uÞn|+uqG £uÕ1ã>æí”ûÿã,îÓ´˜®:†Ñ¶{n¼^Óú{ØUÇlçܘ\czî0¢=ÿüókG7q‹lÖ˜]uÌvÎékÌÜd$ñ“Oí´”¬^«¬^&h½Mš_¤Ó€ÕËä�­—É]^m‹ÿw7ê˜TmÕ€ÕËä�­—ÉmÞúzM­0µUV/“´^«¬^&h½LÐz™ õ²Z|t­íUÜZ X½LÐz™ õZ50Š77YG×dõZ5`õ29@ëmÒäÔ]×ÅV X½V X½LÐz™ õ29 ËË6ñŤj«¬^&h½LèòÆëÚbº|1V/“´^&h½V X½LÐz™ õ29@ëµj8š‰MŽnj½) X½LÐz™ õZ5`õú×U¤4`õZ5`õ29@ëMi]¥¼) X½V X½LÐz™ õ29 Ëkm1©Úª«—ÉZ/“4Þx½&®ôŸª­°z™ õZ5`õ29@ëer€ÖËä�­×ªÔ8’_`ˆëä»8câ:¥«—ÉZ/“´^«¬Þº–“,#ûͼ¹hmŰ¹1›•“kÌíž›ºº<ÕdÍ@S¯cívÊmû~Í:]c0Þ˜IÏÉ5¦ç£S^ëm9ꈆ¥^M¿#o]9ãžÓט¹ÉþHâ'ŸÚi) X½V X½LÐz›´ø¢ &]°jÀêµjÀêer€ÖËä�­—Éuoý(Ó4ßX�âÚª«—ÉZ/“4^YφŸ‰|…”Æ'¤j«¬^&h½V X½LÐz™ õ29@ëµj@j|ÇfýèfÊ‹>~âõžòþº¼1Z X½LÐz­Å››¬£kwD×N²z­°z™ õ¦4ù%—‹‚€Ö›Ò€ÕkÕ€ÕËä�­—ÉZ/“º¼õ/fïjš£ qmÕ€ÕËä�­—ÉZ/ú²_ñ˜´>ª­°z™ õZ5`õ29@ëer€ÖËä�­×ª¦Zþ‹Z|t3Þ}L2›>ã®ã6&®­°z™ õZ5`õú×5Úa€ñƌØ}æ¦. Šasc6+7&ט·Sn|ZJÓä Rôcêu £Ý޹òÇMÖkÆtÑ– mÒrcré¹Ã°cÖnâVü!Ú&™hø›Õtä¿£uÕ1ãÓט¹ÉþHâ'ŸÚi) X½V X½LÐzSš_TÂä�­—ÉZ/“4^¼q£¯iò?ÐcRµUV/“´^&h½èË‘žúQ㔤j«¬^&h½V X½LÐz™ õ29@ëµj ­®¿çÄ=äÈ~[“ß•˜¸¶jÀêer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­W“ƒÖ´î.åMiÀêµjÀêer€ÖËä�­—ÉZ¯ôq´²ëM-&U[5`õ29@ëer€Ö÷ëë5S>ª­°z™ õZ5`õ29@ëer€ÖËä�­×ªGóã%<ø‡¸ÖO5ù¿ê�µ÷VV/“´^«¬^ÿz£Š”¬^«¬^&h½šœ¶‹‚š¶R°z­°z™ õ29@ëer€ÖÛ¤áÍ¿þ¥ËÒ0 PÇĵUV/“´^&h½MZ¼Œ!†©­°z™ õZ5`õ29@ëer€ÖËä�­×ªÖ+ßÀ mx¯÷VV/“´^«¬Þº–“,#ûÍ­É•ÉD|QPŒ50Þ˜qÓsKêG¤i޶Å0ÚížÛ´^³îëªcmÒrcré¹ÃlÖ˜š³)õÖ£uÕ1ãÓט¹ÉþHâ'ŸÚi) X½V X½LÐz59h˜LH-¤¼) X½V X½LÐz™ õ29@ëíÒêΘTmÕ€ÕËä�­—ÉZo“†V_¯ ˜Úª«—ÉZ¯UV/“´^&h½LÐz­Ðz™uâÒðû@-Ä} Õ€ÕËä�­×ªQ¼¹É:ºvGtí$«×ª«—ÉZ¯6§éT]ʛҀÕkÕ€ÕËä�­—ÉZ/“´^†7tY„×x­¬^&h½LÐzÛ´úzMÊqmÕ€ÕËä�­×ª«—ÉZ/“´^&h½V °^Kc¾,¥«—ÉZ¯UV¯¯Ñ¬HiÀêµjÀêer€ÖËäÈÚÍ—q§4`õZ5`õÖûÞ¼mE‹‰kôåC`×—[ƒº7F««—ÉZ¯UV/“´^&h½LÐz­`½ò·4,7‘œ˜¸NiÀêer€ÖkÕ€Õ[×r’ed_£¹µ¹Òä;…ú¶1M91Œ7f«Æôæm+š÷\Y+Ûù¿ÿ1=w˜Í·Ö&K¿bpu­«Ž‡Ü˜¾ÆÌMöG?ùÔNKiÀêµjÀêer€Ö«Í‰¯0RÞ”¬^«¬^ô¥I“ª­°z™ õZ5`õ29@ëer€ÖËä€.¯Ü×å“&ϘTmÕ€ÕËä�­×ª«—ÉZ/“´^&h½V h¼ñp£4!î­¬^&h½V ŒâÍMÖѵ;¢k'Y½V X½LÐz™ù‚@\§4`õZ5`õJ·ÒbRµUV/“´^«¬^&h½LÐz™Ðå[L\K?>­(ë5Æ+h5`õ29@ëµjÀêer€ÖËä�­—ÉZ¯U¬‡dxÓ·]t5ùʾ˜¸NiÀêer€ÖkÕ€Õëk4+R°z­°z™ õ29�µæûûR°z­°zëýÔ¶ Í ´°z™ õZ5`õ29@ëer€ÖËä�·Z_|Eî¨k©S°z™ õZ5`õ29@ëer€ÖËä�­×ª«·I“ hÛwûÆ-&®S°z™ õZ5`õÖµœdÙ×hn}ný¢ °¹Ml–¶™cÆúfæÆLZnL®1o—\ôëuÐâõšõm»¼mtåŒ{nL®1=w˜\cJ^rº·0•%mß=Ó–+0Þ˜\¹1}™›ì$~ò©–Ò€ÕkÕ€ÕËä�­—ɉÿSÐ8ž‚HiÀêE_šÔ1©Úª«—ÉZ¯UV/“´^&h½LèòÊ}Z.Ÿü >­h5`õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“PcÚµŽY“£õ29@ëµj`on²Ž®Ý];ÉêµjÀêer€ÖËä�ÔM¸NiÀêµjÀê•>n¥Å¤j«¬^&h½V X½LÐz™ õ29 Ë·˜¸nÒd½¦¬a‹éò ) X½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬Þm½FÓOGn×EA1LnÍÒ6sÌXßÌܘIËÉ5æí’‹~½n#Ö4ë5c­«Ž‡Ü˜\cnÇ\Üçmò›ü,cêuLJËMöG?ùÔNKiÀêµjÀêer€ÖËä�Ô·ãEAÒ¤ŽIÕV X½LÐz­°z™ õ29@ëer@—Wîc}ÚõšV X½LÐz­°z™ õ29@ëer€Ô¸õ¶=ZLªîÚ67YG×dõZ5`õ29@ëer€Ô]is­×ª«Wú¸•“ª­°z™ õZ5`õ29@ëer€ÖËä€.oÜbâ:¥u­×LyS°z™ õZ5`õ29@ëer€ÖË䀺·^ ]¾¦¶jÀêer€ÖËä�­W«¡ŸÚ´yA\û×U¤4`õZ5`õ29@ëer@Ý+­~QPÜL݇¬Þz?µ-hó­¬^&h½V X½LöÞW¿¯ÞhÐÖaj«,^ÜZ|jù?ÏrBHyS°z™ õZ5`õ29@ëer€ÖË䀺WšÔBÜZ X½LÐz™ õ29@ëeµQ¼B]ËI–‘}æxå¶]cÉ6KÛÌ1c]•»4f*߯¶?Ì.,›lô-õ;¦ÃÌüåâžúF­«ŽÙ¨­†•+ß ó³„{vÊã?æ—V*}ÀÊá[dzҦÂ=‡Ÿ ßZÚ8Áú17Ò•Óì½ægöö[’#ýzÝF]“ë5ó7ËŸ ~g›°ä Œ7&WnL®1·c.î“Ö£uÕ1ž[2Š&Mê˜.ï¸ý‘ÄO>µÓR°z­°z™ õ29@êúEA ÞV›#h½V X½èK“:¦µL4Ñ'eñ¶}«EýÀ¾†ß·§˜hnÔS^½ôÞ›E}x÷{ÃáÙ¯ýhzYmûNøç“ýr-¬.ÿsxqö#EýÏï®–(·]'®­h¯Ëý'vo«Ï)Ñz™Ðå•ûX_ j9¢)ÿUEHyS°z™ õZ5`õ29@ëer€ÖËä�©q›ÚÖª«—ÉZ/“´^&h½ ·ÒbRu×¶¹É:ºvGtí$«×ª«—ÉZ/“ê^ùãõ½ï}oH‹aê>4`õJ·ÒbR5ú3ÑÑ¿ºƒúÙC…ÙW¿žk8×åÝxôTŽˆ®TuÕ¦g‹Û˜¸nÒŽß÷þðęĤ÷æŠþSçQÖPÏî{˜]¸¶VÇĵI[ù·°ð•ÏuÙpµ|nÅÔve!ÒjmfãD §ØQ?v`WµÍÎâöèoí/¶]lo¿Ñ«×�ë[L\§4 µ|0DÃYƒ”7¥«—ÉZ¯UV/“´^&h½L¨{ëµÐå‹aj«¬^&h½LÐzµú©mA›ĵ½Q©oÌ8Œ¹Õ¹MÅXsÁfi›9f¬«r‹Éß‘ÎܰúvxuöÁppö;ES¾¶Sç7õW?îÛS.k@½üƒÿÚ3üºsWÂ[§ S9.­˜öá9N=Î^»iWÃÙ£ï+êȪ³™ ÚêÕ¢Þ=s<œ¹x¥8Šúü_=ìy"œyK޹êN_ùÖÓáÀŸ+÷}X]—¾óõ0;swQc¢ÙDWnLWkè×ë6êZS¯×Ä)uaÔÜ6Æ!7&טÛ1÷IkƒÑºêÏ-E“&uL—w\ÈþHâ'ŸÚi) X½V X½LÐz™P÷JÛîI“:¦µ®Nßÿà0=¸Eíø·ÞX› a2øó—ÿ$Üwè¿Tu9A²Ÿ:/Ðí;ð‡á?ÞýPQ§&|q½Þ;œ;VNÿû‡ÖÿýOüu¸¸|³ØõÍ ÇÃÝCGJ˵¦Ó³ k§Ú7êmc–ti¼ëùkë¡äWáâ‰ò¹Þ*jÅ©ówþ!Ìî;>sîÊmíHpuD y#´`½rë‹‘ºi½fʛҀÕËä�­×ª«—ÉZ/“´^&HÛÔ¶V X½LÐz™ õ29@ëÕh¸•“ª»¶ÍMÖѵ;¢k'Y½V X½LÐz™Ðämº((婺 X½ÒÇ­´˜Tþ_}öÙð•³ÃÕ•r æùç>Úý@ÑÇäoõç>so¹Æ±¤ùH\\wj«¿ž}0ìܱ¯¨e²:½k”µ;ßžø«óEùÒËáäãûÃî'^\Ûve¡œd.Dƒõìþµ‰¦l+Ä5«]9ýÉÁóZÿYÔÛÎ#§Ã•jÛ¶#ÃÒ¿yñDxï{Êÿ¢“ª­`½q‹‰ë”šêqý\`õZ5`õ29@ëer€ÖË䀺·^ ]¾¦¶jÀêer€ÖËä�­W«¡ŸÚ´yA\û×U¤4`õZ5`õ29@ëer@›·ë?1u°zëýÔ¶ Í Öë_ý©£gõÁ4li¾<­ÝÜÊõè q4i«ËÂzoQï{âïÂÒ`’ 4^õÙ£û½Ç7®¿]ýÉÉ¢>óöúÅ™;~gC-§Î:õÓ ^×¼v3¼}æwÂRx› Çý[‹sE}îWëÇ{c´yV/n->¡­îZ¯ÙæRµUV¯UV/“´^&h½L¨{¥I-Ä} Õ€ÕËä�­—ÉZ/“´^VÅ+ÔµœdÙ×hŽon|QP̨¹m0ÚfŽëöÜá''?VM4›sÚŽÄÕiÔÞýq8õðþB[~÷R8ýøþp_µö3¦;÷×áÒ©GŸ oGçÝ¡Š&–¸èÄ{ï+.ZË,NI¿ß0f3±vëõr¢;ÿæ»Õ=m^ÝÍÙ}ï Oœ}«8º¼aÛÕkE=õ tåÆtÕ1±†~½n£®uÕm߯Y‡Í‡Ü˜\cnÇ\Ü'­ Fëªc¶*÷òÂÙ0?÷¹pì“,jùJ:Pzo†åËÿÎÎÏ…ÏûDx`ïTq‡³±^y+\˜Ÿ ‡ï™*j¹¸“É)3Övõm»¼ãBöG?ùÔNKiÀêµjÀêer€ÖËä€&¯\Ô¤ L݇¬^ô¥IÓ\¯„+çÿºè_¸¼\NXVʵ€íþP8~¡œÈÄ”õk4W~^üLù¦(G1W—¿_ԇ羖«YS£·"î¯þü¥¢~ü+ß WªSÿ§žø@ØóÄ‹Åä³Üöú`BZ•-¾ÞhåßÂ?<û±¢^løz#E<¸ãŽ¢þuqþñ�Ô¯Î~0ì~è³á¹óÿRê+WÃâKÿ3|áè¡¢~»Ø²úNÒ‡þ"üÕƒº\»zêø§ÂýG¾^úð3ª.B} kOq1ÐùçJot!T¹ýrX<Y>×C'¾Þ)¥J+‰û€©›4¹õÅ4Õm߯o«É‰Ñz™ õZ5`õ29@ëer€ÖËä�©q›ÚÖª«—ÉZoÑ¿y!œøðGÃcÇ>WÔ3SMß}ü«páDù;ôù¹ÿfgöý¶¥Jq4Õx¿ž;¼oí[4°äJ´˜¸Öh¸•“ª»¶ÍMÖѵ;¢k'Y½V X½LÐz™Ðæ• Ðê¦îCV¯ôq+-¦½.Oy?5ø4¼wí‹Îw„éûŸsçßlôa]£lW6ýW#m</oе¯7ÜÛ˜¸nÒV–þ>?|oÑß±c÷ÚÅ@u¾°½üB÷òëÎ.arW²¾my”õÉ×K=Îqݪ­¼ÎÏ}º¨¥íÜ[^t¡˜T–ÛâMûä£ï]_Ó9}0yªüP$“n™€½w¹MÕ>=÷Íð“袧’ròºkÇÝáðÉ‹ƒ)¶òñV¤ê&-n1qÒ@—WŽhʇE!å©Úª«×ª«—ÉZ/“´^&Ô½õZhò_µ6õ¡¢¿sðž°ëð_†—_þRQïØqg8ðûß Wª« _ùløä{×OwÞÿû¢_~ðž®|ƒ}åØú×¹¥ß×@\ÓÚÊB˜.ßSÛ½é Û}%e}-\8þáb¹“Ö«ÕÐOm Ú¼ ®ýëHí0ÀxcÆaÌqÊ•‹‚ð…ÐÂfä6Áh›9f¬ofn̤åÆhÆ<ýèžpÇÃóáÍõƒ£æ¶1ɹè×ë6êZW-Èwà¢Õ—¾�k.`´¾rcr¹sqŸ´6b  N&€G¿¾–¯Ußk»ë·ÂÜk¿ï¾þ•¢ž[|T[}#œýóÿ\Ô—‹v7Ãòë_Gï¹;<zúµ%-«×¾fïÛ?}©˜È•ëÐË &>ð ¨cêuŒZ«¾—wøÔyÌòÚ̘q½úÖé¢>uIÎõl„É&Mê˜.ï¸ý‘ÄO>µÓR°z­°z™ õ29 Í»Ý/ ’&uLª¶jÀêer€ÖkÕ@Q_;ŽNÝ?ó¯joJV/“´^&tyå>ÖÓå•£™õõš)HÕV X½V X½LÐz™ õ29@jܦ¶mÒ¦§g‹o£@¿þ-r„P¶‰·_×VÃÊRy¤ï3ßx!|ùáòbÇõ3qÎhK\š´®Ç+Môåˆ&ˆ·mö åÒ¤;ï{:œúï¿îŸ.Ï Mßÿ{á\üeÒ«Ñp+-&Uwm››¬£kwD×N²z­°z™ õ29 Ë«ùÚªûЀÕ+}ÜJ‹IÕV X½LÐz­zõê…ð¯—ë>…”7¥«—ÉZ/“º¼q‹‰ë”´^Y¯‰[À䀸¶jÀêµjÀêer€ÖËä�­—Éuo½š|Å͵ï×­í«Š~ý̳áѵÿ̵±Õ'mËþ"<°³œ„½Y­_¨×±/qiÔ2:/—?Ý<ñÕ¢^]þ—pþäoý³rñå€ØÛ”#Ôû©mA›ĵ½QEJV¯UV/“´^&h¼Mÿ)(•⺠X½õ~j[ÐæZ X½LÐz­°z™ õ29@ëer€Æ‹[‹O`½©Џx§Ö»Ö`[5`õZ5`õ29@ëer€ÖË䀺WšÔBÜRoü~ÝÚѾjâ†ú­3O„=ž uîG•w5¬\-/`š´­þ2üà 3Eÿ}û>ÎTëÀKß:©Ú¤E7¦î­µR>Pַµ³O†©{Ÿòž<´/<væßÖj¡9§¤IÅ+ÔµœdÙ×hŽî¨Ål–¶™cÆúfæÆLZnL®1o—\ôëuu­«Ž­i½&úøà(÷£ÅÔëFë+7&טÛ1÷Ik#Ö䈦L4¡­M×Ö<þ(œ>rÏÐ÷í–ë/wÕ&mï„×O}<ìy迆,¿Þ<ý»aÏ}åá1]uŒZ[{¼=¯Ñ¼T~?ðÚWÇÕZ›h2¹1ФIÓå²?’øÉ§vZJV¯UV/“´^&ty›þS`ê>4`õ¢/Mê˜TmÕ€ÕËä�­×ª«—ÉZ/“´^&tyå>ÖÃzÑþÝ¿ûwký¸µ}ˆk«¬^«¬^&h½LÐz™ 5nSÛ6iÝk4ÿ5¼vâÃE]|ÙÊ•pñù/õþ÷½'š´ÝK/þQ¸ï¾?ªê«åºÅ}‡¿^úv\½]~ÍÛ¸­ÑÄÚÑ];v«)çå§…}µøö ÔN=ì)¿a#&®5n¥Å¤ê®ms“utíŽèÚIV¯UV/“´^&h¼õ‹‚@*Äu°z¥[i1©Úª«—ÉZ¯UV/“´^&h½LèòÆ-&®S`½8EŽ5Xè·5Ù6&®­°z­°z™ õ29@ëer@Ý[¯…&_yÕyéYZ›„•_STžŠ†V^°óõÏ|¨Ú¶\{ù•… /W“¶z‹'«ë_oT¶õ Þ&¬Ñ\{ŒMM¾v®§¹Uϵ¢ì—)áq¡n¼Z~åâ«âÊŒÅÅ@èÇ_Ò±¶í€¸Ú4ôSÛ‚6/ˆk_£Y‘Ò€ÕkÕ€ÕËä�­—ÉZ/ú²ÖKNÅÅtyc6CVo½ïÍÛV´˜¸Ni€õb¹‹\ÔÕbâÚª«×ª«—ÉZ/“´^&Ô½Ò¤â>ÐjÀêer€ÖËä�­—ÉZ/«âêZN²Œìk4''·é?QsFÛÌ1½yÛŠ&Äý:u­«Žö³ŸýlÃÅ@©öüóÏWNî1ÅÔµ®:fÜÇÜŽ¹¸OZŒÖUÇxnÉ(š4©cº¼ãBöG?ùÔNKiÀêµjÀêer€ÖËä�·~QhÛVˆë>4`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V tyqº\;ÉDÃÿIoL\[5`õZ5`õ29@ëer€ÖËä�©q›ÚÖª«—ÉZ/“´^&h½ ·ÒbRu×¶¹É:ºvGtí$«×ª«—ÉZ/“´^ôãÿ”ÚÔ½1›¡«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj@ãÕž.—†õ׸‰k«¬^«¬^&h½LÐz™P÷Ök¡ËÃÔV X½LÐz™ õj5ôSÛ‚6/ˆk_£Y‘Ò€ÕkÕ€ÕËä�­—ÉZ¯ô墠Զ É+l†¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª7^æÂ49SP qh5`õZ5`õ29@ëer€ÖË䀺WšÔBÜZ X½LÐz™ õ29@ëeµQ¼B]ËI–‘}ædæ¢Åßɇ>Žr6éŒÙ,­«ŽñÜ’qÓs‡±Œ‰u™¸ßÒâßé6­«Ž÷1·c.î“Ö£uÕ1ž[2Š&Mê˜.ï¸ý‘ÄO>µÓR°z­°z™ õ29@ëEÿ/þâ/ŠÛÿïÿ}q[o‹‹‹ÕÖ\nŒVV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ@[¯¥f› ‰k«¬^«¬^&h½LÐz™ 5nSÛZ5`õ29@ëer€ÖËä�­W£áVZLªîÚ67YG×dõZ5`õ29@ëer€Ö‹~ý¿‰45™h¢/Ä}°°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«4^ÙŒÿÑ‚¶ÅĵUV¯UV/“´^&h½L¨{ëµÐå‹aj«¬^&h½LÐzµú©mA›Äõ¶^£é§ÎÇ?W¯âŠTܧmml–ÖUÇxnɸé¹ÃlƘøàÇ\ä¶ FëªcÆ}Ì혋û¤µÁh]uŒç–Œ¢I“:¦Ë;.d$ñ“Oí´”¬^«¬^&h½LhóZÖ{ù©s}Ðz™ õZ5`õ29@ëer€ÖËä�­×ªÖ‹ ùäÊò®×V X½V X½LÐz™ õ29@jܦ¶µj@êÕåËáû ?V{S°z™ õ29@ëÕh¸•“ª»¶ÍMÖѵ;¢k'Y½V X½LÐz™Ðæ•ÿ�Ä6LNúBÜ›¡«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêE쥾_º€Zˆû@««×ª«—ÉZ/“´^&Ô½õZèòŤjüÛJÔå¿wܼ\ õ29@ëer€Ö«ÕÐOm Ú¼ ®ýë*R°z­°z™ õ29 Í;Ê@nAÜ›¡«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêûXƒº©a6@_ˆû@««×ª«—ÉZ/“´^&Ô½Ò¤â>Ðj ©ž®þxj[MNŒÖË䀲^ +K_ôwÚŽ÷†ÃÇËZÐå X½^?ólQ—mwq{qùf©ˆ½qti£x…º–“,#ûÍñÍeþ}]½µ±YZWã¹%ã>¦çÓ÷˜ø@Y_-¿óm0ZW3îcnÇ\Ü'­ FëªcÆ:÷ÝÅpò#ûƒ³/„Ÿ,¿–òB¡}ääbx·Übí¹7ÃÏÏþ^Q›ÿ~¸º2˜À^ùÇpꉄÝ<.ÝöÆtiÒ¤ŽéòŽ ÙIüäS;-¥«×ª«—ÉZ/“Ú¼–5š1q݇¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«·IÃºêø uYþº¼BJV¯UV/“´^&h½L·©m7hKåw$ï˜úPøä'î+ú»ÿexùå/…Gï™*ê¿ÿÍpe/—Û®µ#Å­€þüÌt©ýÆ)n=°«¬Ñ?ùý°\äÔÀTmÕ@\ß¼x¢¨Ï¿S>ôßYøÓ°ï®Ù°pcuö©L4Q?<{.ü¼º§Ð¯ G§Lz5n¥Å¤ê®ms“utíŽèÚIV¯UV/“´^&tyÙ#›B[l†¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«W“ƒ †páÔBʛҀÕkÕ€ÕËä�­—ÉZ/“êÞz-4ù°ÞrzÇþ¢¿|m!<ûÀ{ÂŽ]¿UÔï¾þ•ðÐÎÃÜâõÞj‚:¼Fse •Ð{ާ/¼Uô¯¼ü¹ðÀ„S—~½1g@ª¶j`c]žâŸ:z6\TkZ19|xöéœD}ã|ÑǾâmS9õ~j[Ðæqí_oÔ@j‡Æ3cŽc®u²Yg³´®:ÆsKÆ}LÏ&ט“–“kÌ혋û¤µkÅDsz6,sÆò¨åôìÂ`jVˆE=»°Œª ð&š3ÕÍhÅDó¹°¸R¾m9ƒñO »ª5Žï”Òå¶ÍÔµæúWáÂñ÷¯?¯ h³Óû7<.A—[±úËðÚÜ‘°ïáSáõw7­Ó¥I“:¦Ë;.d$ñ“Oí´”¬^«¬^&h½LÐxµ§Ñc⺠X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½V X½LÐz™ õ29@jܦ¶mÒd¢‰þÂìþµ êx"¶æ­&šqVÙ¯ŽhÎlü·Å­9ÕDõᓃ ¬{c´X¯—‹ç…Z&š…6˜�Ë㊽í9%êÁ$õî^\º‘ÜV£áVZLªîÚ67YG×dõZ5`õ29@ëer€Ö‹¾æÈ¦ÐÖ›¡«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“´^&Ô½õZhòÉÍR+'d˜huËD MÔ©SçKÕ=Éœ©ÚªuyêüŽÇ΄·Õš6ê©ó•ò@Í=‡¿^[.×nÆÄµVC?µ-hó‚¸ö¯7ªHiÀêµjÀêer€ÖËä�­7îwÙr â>Ø X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½V X½LÐz™ õ29 î•&µ÷Ôò˜rê|Ñ¿j‚Øä•Sçµ²ÆML4×´DNL\[5ÐTãb ÷îùl¤­¡ÆÅ@@“S‚¯JúfQ?ðô‹ai¥<]~ùû¯…ËÕWÅÞöœfm¯P×r’ed_£9™¹mG6å_ݵ±YZWã¹%[5¦7oÞ6¿Õ©ß×UÉjÒ„Xëef5Ñ\£-'\ Ž0ìì}怕§ß[}½ÑͰr¥¼xçÐÜņ¯7*÷ÖŽ:ñ½âq­çÞW^ýbQ?~êkWÒËdºé¨mL—&Mê˜.ï¸ý‘ÄO>µÓR°z­°z™ õ29@ëûmG6c⺠X½LÐz™ õ29@ëµj ËëÍ›·þš÷¶ÆmjÛ&mžj]eyDs:ÌÌ_.êÙiä &•¯ž*êæVž._ûz£ªa"*GL¥­–/ȵF”G&›Å¶šñ¶è—)Ý]<®9å~in飶 ·ÒbRu×¶¹É:ºvGtí$«×ª«—ÉZ/“´Þ& _ø,G1Ñð]|B—W°jÀêer€ÖËä�­—ÉZ¯U/n¥ q0µUV/“´^«¬^&h½LÐz­°z™ õ29 Í‹~›˜ýz-tùb˜Úª«—ÉZ/“´^­†~j[Ðæqík4+R°z­°z™ õ29@ëMiñ¿³“‰¦ÖkÕ€ÕËä�­—ÉZ/“´^«´^ôÛ4ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€.¯Ü—òT¾4©…¸´°z™ õ29@ëer€ÖËj£x…º–“,#ûÍí‘‹É&ŽlÊic3ÇŒñÜ’ÍÊuÌ6}ÔÜ6&=7&ט“–“kÌqÉ•V§+§Í#­ Fëªc<·dMšÔ1]Þq!û#‰Ÿ|j§¥4`õZ5`õ29@ëer€Ö›ÒäÈfŒÖkÕ€ÕËä�­—ÉZ/“´^«º¼Ò¤â>`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@“·Ò„¸´5nSÛZ5`õ29@ëer€ÖËä�­W£áVZLªîÚ67YG×dõZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h¼¸•&Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€6/úm`jôëµÐå‹aj«¬^&h½LÐzµú©mA›ĵ¯Ñ¬HiÀêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­ÐzÑoÓ�S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“º¼r_ÊR5úÒ¤â>ÐjÀêer€ÖËä�­—ÉZ/«âêZN²Œìk4=W‡1=w˜QÇlÓGÍmcÒscr9i¹1¹Æ—\iuºrÚ<ÒÚ`´®:ÆsKFѤIÓå²?’øÉ§vZJV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ@—WšÔBÜLmÕ€ÕËä�­×ª«—ÉZ/“´^«¬^&h½LhòâVš÷¶Æmj[«¬^&h½LÐz™ õj4ÜJ‹IÕ]Ûæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª·Ò„¸˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐæE¿ML~½º|1LmÕ€ÕËä�­—ÉZ¯VC?µ-hó‚¸ÞÖk47óÔ¹7oÞúkBÜõ:¦îéÊéÊmcÒscr9i¹1¹Æ—\iuºrÚ<ÒÚ`´®:ÆsKFѤIÓå²?’øÉ§vZ“æÍ›·~›ü®Å¤jñÉ}u-†©­°z™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—ÉM^ÜJâ>ÐÖ¸MmkÕ€ÕËä�­—ÉZ/“´^†[i1©ºkÛÜd]»#Ú4ÜJ‹‰ë>4`õ29 Ë·¦¶jÀêµj ­ÆmjÛ”¬^&h½LÐz5n¥Å¤j鋯I˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐæE¿ML¾·Éo1©:¥ù×Uti£xc´°z™ ñâ6å©Úª«×ª.o½R>ª­°z™ õj5ôSÛ­7å©Úª«—ÉZ¯UV/“´^&h½V X½LÐz™Ðå•ûR>ªÑ÷¶=š÷UËI–‘7{¦Àxc­«ŽÉ‘‹~½Žéªc­¯ÜvLÔr_]‹Ñä´±sc Åz}[ÆÓ•Ó•ÛÆ¤çÆäsÒrcr9.¹Òêtå4y„ÍÒúÓs‡ékÌÜd$ñ“Oí´&MšÔ1q݇¬^&tyå¾”¤j«¬^«šê¸ÅÄuJV/“´^&h½]š4©cRµøä¾ºÃÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#Ú4ÜJ‹‰ë>4`õ29 Ë·¦¶jÀêµj ­ÆmjÛ”¬^&h½LÐz5n¥Å¤j鋯I˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐæE¿ML݇¬^&h½LÐz™ õZ5`õú×5дÃâûo £uÕ19rѯ×1]u £õ•ÃŽ‰Zî«k1šœ6¶sn ´X¯oËxcºrºrÛ˜ôܘ\cNZnL®1Ç%WZ®œ&°YZ_czî0}™›ì$~ò©Ö¤I“:&®ûЀÕËä€.¯Ü—òTmÕ€ÕkÕ@S·˜¸NiÀêer€ÖËä�­·K“&uLªŸÜW×b˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐäÅ­4!î¦îCV/“´^&h½LÐz­Å››¬£kwD›†[i1q݇¬^&tyãÃÔV X½V ´Õ¸Mm›Ò€ÕËä�­—ÉZ¯Fí´˜T-}ñ5iS[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“Ú¼è·i€©ûЀÕËä�­—ÉZ/“´^«¬^ÿz£Š.moŒVV/“4^ܦ| U[5`õZ5Ðå­×BÊRµUV/“´^­†~j[ õ¦| U[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“º¼r_ÊRu°z™ õ29@ëer€ÖkÕ€Õ[×r’eäÛ~æê¥B;~a¹ºÃž‹~½Žéªc­;÷Ýðæü'Ãþãÿ˜mLÔr_]‹Ñä´Ñg®ì¯Õ}¨¹mti±^ß–ñÆtåtå¶1é¹1¹Æœ´Ü˜\cŽK®´:]9Ma³´¾ÆôÜaú37ÙIüäS;­I“&uL\÷¡›wµèß»ïOÃÂ;«Å=©×MšÜ—òTmÕ@cýëï…ã÷ÞŸÜÖª¦:n1qÒ€ÕËä€!oµ¿f~9¬E0õ(š4©cRµøä¾ºÃÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#Ú4ÜJ‹‰ë&íå/<Lï,½;ï þÖ‡ÃÞGŠzvz=s½•ÛΞþaXÌ Wfkº´]áÀ£Ïýr Y‚Z@ÿܱƒáƒ'nUuX]—Άù¹ÏõÞûŽòhg݃:n1šzéåÿ;°«òO…½îÝ]ÔxŽÓÅýà Ïñôâ/‹çˆ:¦¬o…kçþ è¿Ž' Ï5žã±O~°èËsqNÜÚ·©m[µ•7‹×„øå5þüÒ/ÂÂìþu-nÓã³[ôÃÒ|˜‰´‹ï®¿Pmf¾Ü¾¢ì—ûkÏO®kµý…×Dì©zT ·ÒbRµôÅפ Lݪ­^+ú®½†Ë×îÅ囥> Õ;`½#\¹ðõ¢._óåïûß¾~mí÷8•âšÖ®¿æ*ŸÃüÒJ¥¤sÀz}¹è7µéÙ…â6†©»µÕpýGÿ-<tG9ÞR)t{KV—Ë3<sŸÿLøä{‹þÂúnhõ¦¶jÀêer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õëk4+º4ÖûÚ‰„Ý3Ç‹þJ¸–/}'<÷ôG‹º|“/ÿÀã ZÞëP_|þ‹á±ý÷†‡Oý¸¨3±Á¤´œõà wåêkEÿî‡S¯¿³æÐ_}s><|çcáô[+ëÚÍ áćËÇ0÷Õ? 3SqnIÜRã¶Mšêë¯ý—ðÀþÕ•ÕÁ›ý¿„óÏ}¶¨gæ/¯m'ÏQj<ÇçÿòSÅsD³VWK=ýƆ?ÔxŽ+'ÓòEâ>`jôëµÐî[.^¨Ï\¼²öš@½kðᯠô‹‰÷ôlñ°ôÞW/¾Pôw?|*¼>˜Xʽw•G&ê Ç…»öÞîøKoÉZ°¿æ~_Q7í/¼&P·MÌA\o††~j[ õ¦| U·k7‹þ®Çæ¿_¼†QŸzâa÷#Ï…Kƒ8íÞš¶úVQÏ>÷pi0IEÿÜ‰ß »ï{6\x§ÌIÕ¼†×_ù»ÿ¾êõ¶®­“ªÑŸŸÙ»á÷V`r€Ö»Ö¿þýpâEQ2ÑTy+Pø¡O†cŸŸ+úSÕï™hB“/&U[5`õ29 Ë+÷¥| U÷¡«—ÉZ/“´^&h½V X½u-'YFÞ²5š¿:ŽÝù±pò'WÁA›Y{“_.Ž`ÉDs=s5¼³ð§E}îÚà¯X5Ñó—ÿàݱo5h¿ O<öÍþöV·æ®kè×ë˜æúípîØþpèä?­Ml�´øÖðdZ(Oïâ9^«îY×Wû¿îK, hÏÝH]ÓÔr_]‹Ù  ^¨ã×D¡G(×ÿðËDs(÷³ûö‡cçþw¡MOÿßáÄñ‡=O½\n[è 'æŽu|¤¦¤Ü_…Ví¯:Ðêþ˜z3ŠëõmoLWNWî:7ÃÏÏ}.<<{.ü|P­i×Ά£SŽ[Q¼WêÌ¡s+Jmð¡æÂ_„C?^ýÑ_¯½Þø1/¯ýÞv¹Nwî:Úê/Â…g?Vh?zîÈÚDs”ÜátÍtÁxcÆ5WZ®œ&°YZ_czî0}™›ì$~ò©Ö¤I“:&®×úWN‡#;Ë7F¡è¯\ ‹ßýñÚQ™hÆÛÔ³w½/<uþ—Åd©¨‡Ž2­†Õ‘­ó7Ö'…öÎËá©»6Ž6Ô­¹%M^¹¯I‹Y¯ß §”§¨â#hÅQºÅï‡Å«7ʺeÒ‹Ïñ®÷<]<Çú/ŠúÐÜÅðî jò¦r…”šê¸ÅÄu“†×„L4×ôê5!µ­>¥wmðz¹¯èÿªú#ùÊby ü쵕ò”øGNµü]÷‚û ¬kU?11OÕ£hÒ¤ŽIÕâ“ûêZ S«µç‹znñzu‡1w0aer@\k´Õkß ³ËIñjõÁ&åÍu9ÑLm«ËY§Û{3\{µ<;ñ굃ÏeåD3•âºIkû@×勱z™ õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×îˆ6 ·Òbâzƒ¶úfQO?p,œ|ñ•_yDýøàS©m<rÐv” ýøhX©á*ìòtó[Ñ«ØP§rcPÇ-&]—GMvO(;Yžþ~®R“ÞÄÆ¡¥kµa2ÓVã6µm£6xMœùÔ½Åk5&ÙBÝÛ<Q,Ÿ'þÈ^ŽþHžúȽáÑÿõáï/O+¾[iõ#5èËþ’ZXë+&æ Ñ[Áj¸•“ª¥/¾&M`jµ¶ZißW-e�jÆÒ‰r²*K"ÖµuRµJ[½^~º\\Le¿OèË{Hå€õº|?ºûþ®¯=´ÃÇÿ>,Užc˜ºM[ýùKEÿÄkø^)'šƒÚ²FHÝþ®¤Í'¤j«¬^&´yÑoÓ�S÷¡«—ÉZ/“´^&h½V X½¾F³¢Kc½«Ë? §gË _Ùv†éŸ(úå{[yÔ¨¾F³Í}eÝr”©èc¶ó“áô•r½WÁ»‹þSçQÖb(êTn„Ô¸mÓ„ÆzðGyñtyáÒZ›>XÜâ“l×6é•?ŒxŽêŹ…»ä´qD\£ÏL¦cR5úõZHùðš@½þGº¼}ö[o¯ôÛNé¡?²;œKk$WÂ[§ Sï-'‡˜D6©A_öVôÖµ5:&æ Õ;À¢¡ŸÚh½)HÕj­šdî>ðGáÅ¥ÚÑéŠV^Ÿ0íØqw˜yö%z¢¦ÓpÚÿŠúG××׆?œ®“ªÑ¿ðWŸ Ç¿r6\¬ÎF\:ÿµðôCå{ÕÏ;>ØÆÄu«¶z¥è?4÷Z9Iì7Ô£¬ÑÐoþ@—öTmÕ€ÕËä€.¯Ü—òT݇¬^&h½LÐz™ õZ5`õÖµœdy|¾Gðü¨ÐÚý±0·ˆ?÷mk4TëùŽ_øÕÚ„p8wu°Ùï‡;ï./8’û°¾óÞCsa±ëIkî:±†~½Žéª×X¹ZhO?tïúiÜ–I/žj<Ç Õ<³Ð±ñÞߨöã:Cc¶æn¤®ij¹¯®Å¤sÊçvî¹ÏF¯ <äæSzåz×{ÃÝÇ/ÚÚÉêÔëÔãgÂÛƒyÓ‘šx ç®­mbº¼mti±^ß–ñÆtåtå6²ò³B»çð—ÂkÕç£åâB¯¿ Çgî-´õéý¨¹BûUâÒ´Gë¬kÕZé©'ÃY¬)Е£ËPœÍh~Ü;vL·1õ:¦®µ} «Ó5ã×\iuºrš<Âfi}é¹Ãô5fn²?’øÉ§vZ“&M꘸.ûëÈ!mõ§áÔ`‚õØ™+êæ5šåÑÉÝ{>Î㢶£L«o…³O¼·è¯M·Vß(ê‡ç/ ÞþÓµ5·¢É+÷5i1R·]Ãéý˧w<v¦¬[&½¨ñqÁËú‘¸ò(Þ7}}Ï:EÈRhªã×µÄÑëê5!uÓDõêÛ/†'v—§Çë$OÏ…SÊ#ب×&¡UÝ´¿@\ýÄļÓÁhÒ¤ŽIÕâ“ûêZ S7kƒŠKß,ú<ýby$¾úZ¨ËôW•¬×åŽ÷Ô?LE¤jZK,E‰IÕMÚ¡j¢É䀸îÖª#Á¾Fs ­4^ÜJâ>`ê>4`õ29@ëer€ÖËä�­×ªQ¼¹É:ºvG´i¸•×ëýõµ—'N{í‚—âk}þêÉp`÷§ªmëk4££ž»î Ÿ:óæÚd±~”éêâKk_•t¦Zs'°íùƒâjuôcšê¶£WMÛÆ-&Uˤé±ÿ3¼´XÉÄèK翞8PN’ñ1ÁA}Ò[î3<Ç]»Ÿ(žcáï^ s‡ÊSïBÜkµa2ÓVã6µm“†ŸõÎý¯ Ñå5úôRy‰úõ‰â⹿O?twÑǺÛÔÉú$´i¸^ë+&æ Ñ[Áj¸•“ª¥/¾&M`êfíF¸òê‹þã§~P|¿­hÍ¿?Ëañd9‘;tâ{—* >.üÍ7ŠºÌ)_ç8¢yßñï-k�©Ú¤u­Ñ¼^.½Ù1ýÑpâBù]¢¯^)¿ŽëÜ…ËÿìCûŠÇ¿!g�Së´®5š«áúâWŠzúÐ’_%ïMõtB›OX«ûëäáòw³¾¿Ôx\‡wÝQôñ¸„ Û&ö=ذí�­´^ôÛ4ÀÔ}hÀêer€ÖËä�­—ÉZ¯UVï¶^£¹U§Î1©˜ú'Ã?z0ú2ò©â¶øòâºÜ·rçñ3ÿTÔŤah4|aû³áLõEϸ¯üº£Â}'~°vU1(µŠjâÕÜÖ×m ¸_털šêâñO}4|ú?¾áâ´øKéSÏýõ·åòǾû¾°á‹ÊhxŽÍûmø9h1šZî«k1ëÚú‡Š¯ œ†­¾”~}›¡†/l?þ|xGϪ‰ByÿÆSöe±Ž­\Jï/ÙväþJ_43ŠëõmoLWNWî:X/]ž¦nÍ“rL4wí¸;>y±Z[XíÜÜSáÈÚ¿Úô¡pt.½ÖÔë•Öòsš°ÉÄi×ðQÏÕ«¯†¯<õŸÂ{Ë÷²¢U_Ö[ƒº¯«ŽiÓdb¸ÞšOË„n×ᯄÅj]*€Öþ^3hѺÏh1Mµì¯“‹ëhÁú¶å8~\¹‰}Ãh]u 4iuºrš<Âfi}é¹Ãô5fn²?’øÉ§vZ“&M꘸îCïêÛgÂãïÙøåæLèòÊ})HÕV  >óøÆ¥)¯UMuÜbâ:¥«—É «ÿZÔš¥ÉœVo—&Mê˜T->¹¯®Å0µUV/“´^«¬^&h½LÐz­°z™ õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×îˆ6 ·Òb⺠è¼7Âë'gŠ„�&Äu“·¦¶j�õ­×O†îùt8ûvt•ý€”ת¶·©mS°z™€ºi¸ÖäÄh½ ·ÒbRµôÅפ LmÕ€ÕËä�­×ª«—ÉZ/“´^«¬^&h½Lhó¢ß¦¦îCV/“´^&h½LÐz­°zýë*º´Q¼1Z è½åZ©—~Z^Ä䀸nÓp›òTmÕ@Y¯†•+Â7^ú©ÚkÕ@—·^ )HÕV 4ÕMû ĵ&'FëÕjè§¶ZoÊRµUV/“´^«¬^&h½LÐz­°z™ õ29 Ë+÷¥| U÷¡«—ÉZ/“´^&h½V X½u-'YFŸ¯7*a´®:&G.úõ:¦«Ža´¾rcØ1QË}u-F“ÓÆvÎëõmoLWNWn“ž“kÌIËÉ5æ¸äJ«Ó•Óä6KëkLϦ¯1s“ý‘ÄO>µÓš4iRÇÄu°z™Ðå•ûR>ª­°z­hªã×) X½LÐz™ õviÒ¤ŽIÕâ“ûêZ S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“𼏕&Ä}ÀÔ}hÀêer€ÖËä�­—ÉZ¯U£xs“utíŽhÓp+-&®ûЀÕËä€.oÜb˜Úª«×ª¶·©mS°z™ õ29@ëÕh¸•“ª¥/¾&M`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õë_oÔ@Ó‹ïc¼1ŒÖUÇäÈE¿^ÇtÕ1ŒÖWn ;&j¹¯®ÅhrÚØÎ¹1Ðb½¾-ãéÊéÊmcÒscr9i¹1¹Æ—\iuºrš<Âfi}é¹Ãô5fn²?’øÉ§vZ“&M꘸îCV/“º¼r_ÊRµUV¯UMuÜbâ:¥«—ÉZ/“´Þ.MšÔ1©Z|r_]‹aj«¬^&h½V X½LÐz™ õZ5`õ29@ëer@“·Ò„¸˜º X½LÐz™ õ29@ëµj`on²Ž®Ýmn¥ÅÄu°z™Ðå[ S[5`õZ5ÐVã6µmJV/“´^&h½ ·ÒbRµôÅפ LmÕ€ÕËä�­×ª«—ÉZ/“´^«¬^&h½Lhó¢ß¦¦îCV/“´^&h½LÐz­°zýë*º´Q¼1Z X½LÐxq›òTmÕ€ÕkÕ@—·^ )HÕV X½LÐzµú©mÖ›òTmÕ€ÕËä�­×ª«—ÉZ/“´^«¬^&h½LèòÊ})HÕ}hÀêer€ÖËä�­—ÉZ¯UVo]ËI–‘}ææå¢_¯cºêFë+7†µÜW×b49mlçÜh±^ß–ñÆtåtå¶1é¹1¹Æœ´Ü˜\cŽK®´:]9Ma³´¾ÆôÜaú37ÙIüäS;­I“&uL\÷¡«—É]^¹/å©Úª«×ª¦:n1qÒ€ÕËä�­—ÉZo—&Mê˜T->¹¯®Å0u£¶z-¼~¦ü¿ûeÛî⯛·ˆë²¿–æËÿc=Ôªÿ[¿¾í:©šÕæÂÿYþ_Úêzõ­¢ÏNyÜ*n—{údú×ôßÂCw Æœ)ÿßL—·ü‡ß ó³å¿é-Úô‡‹[yì`Ø·S[5`õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×îˆ6 ·Þ¼yë·Å¤j鋯I˜ºY»~~ö÷Šþ±ù+˜°ücQï~ä¹péV¼í:q½Þ_Ÿh.U÷¤| U³Úk'>ö=XN ç—ªYí€TX¯ß-ú»|&Ì¿v%¬ &ਜúp8ñÚ¯ˆœ’¸îÔ®?œxà@xðÁ÷µì?Ðé-¸Þþÿ´¨Ï_Z««ËEÿðî…ã®[4ûJ˜Úª«—Ém^ôÛ4ÀÔ}hÀêer€ÖËä�­—ÉZ¯UV¯½QM;Ì›7oý5!îƒzS÷Ætåtå®3˜hžû\xxö\øù ZÓ® G§¤s‹‰æÌü†‰èÊéÊm£Ôn†å ü\xõGfv)&šü˜ÿÎ<¶/:ùO‘öv8wì½á½'~0¥„Ï]§Q[ýE¸ðìÇ íGÏ­ï¿‘s«ÇM{®1ø1KÆ5WZ®œ&°YZ_czî0}™›ì$~ò©–Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5Ðå•&µ÷S«µç‹znñzu‡Æ[ѬúMù@ªÖh«×¾f–“âÕ¥ùb¢™òæúj8{´œ˜­Ÿm~»¨e¢©ËY'®›µ›áÚ«Ÿ+ú¯^»Ñ¸ÿ@ªn×®ýƒs? Õi¥¯$U[5`õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×dõZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h¼¸•&Ä}ÀÔjmõ—E½ïáSáõwË)—λ~êüÁX+Y>ö{?¾µt£Ø"öT­ÒV¯†—Ÿ.×"SâÁD}Û©ó›EÏ'é oE§Î?:˜p¿Cä”Äu›¶úó—Šþ‰×–ÕðÒÐæmÚêò¿ý»?N½þNqŸÆ'¤j«¬^&´yÑoÓ�S÷¡«—ÉZ/“´^&h½V X½þõF) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UZ/úm`jµVM2wø£ð¢br¸Q»UÔŸ=þÕpöâ•¢¿|é;á¹§?:Èû“dˆk†ÓþTÔ?º¾>!–SçRǤê¢ÿîÅ0wè=E¿l;ÃîÇOoØ0u«¶Zæ^+'Ƀ‰&êxéA«w@«VM¶ñØwÍüExyðsTù*RµUV/“º¼r_ÊRu°z™ õ29@ëer€ÖkÕ€Õ[×r’eäÍ\£ÃxcÆaLÏ&טž;̨c¶é£æ6²ò³B»çð—ÂkË媾MÉ}÷…vôìÕêŽMÊ — -Õ´G V/‡Óo8ðÄW m5ÜW/þ]8>so¸ïøwCy\°;g(7bƒVœæo~Ü;vL·1õ:fX[ +W_ gŽ?\h¯.ËÉótÁ¹Î¸æJ«Ó•Óä6KëkLϦ¯1s“ý‘ÄO>µÓR°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«º¼Ò¤â>`êfm0)YúfÑàéÃÒÊêà®òªåËÕ„4{Kº´“‡Þ»6ÑLm êÞ˜Nm”5š ïtõõLªœˆ¸î֚׸‚nï:uí©÷¼?¿ð«µZHù@ª¶jÀêer@“·Ò„¸˜º X½LÐz™ õ29@ëµj`on²Ž®Ý];ÉêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­Ðxq+Mˆû€©›µáÊ«_,úŸúÁ†ï‹œÞf°v0ö.‡Å“ådìЉïGùÖ´Õ ç¿ú•¢.'¨«EÿôìÇÂîûž Þ)ë˜TmÒºÖh^¿XÔ;¦?NÔ¿öçÖO‹þƒ³ß¯bÙ@¹fóäã‹#šr0µNëZ£¹®/–ûwúÐjûs%\Yøÿu¼ïqD³ißÇ}ÐZö×ÉÃwõÐþª@Çux×Ec ¶Míû¶ Õ€Ö‹~›˜º X½LÐz™ õ29@ëµjÀêõ5š) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UZ/úm`êv-uú¹œh¢¿NYïÚqw8|²œ8¬Q}Ùù'Øv~´Ýáþ£_ çkëAª¦µ•…ÁÄ8~ìƒÖrd°˜8í:N.n|nè¯.ÿ ü'…iøÑvÞÿûÆœ˜T­ÑVf×Ç,Út˜™/6딓ELèv.'œë\/ê§ŽŒrš÷ýF_G-“ÆýÊz}ŒÇµ­—AÚ÷1Z °^¹/婺 X½LÐz™ õ29@ëµjÀê­k9É2²¯Ñô\aÆôÜaF³M5·IÏÉ5æ¤åÆäs\r¥ÕéÊiò›¥õ5¦çÓט¹ÉþHâ'ŸÚi) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯U]^iR q0µUV/“´^«¬^&h½LÐz­°z™ õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×dõZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h¼¸•&Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€6/úm`ê>4`õ29@ëer€ÖËä�­×ª«××hV¤4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h½è·i€©­°z™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—É]^¹/婺 X½LÐz™ õ29@ëµjÀê­k9É2²¯Ñô\aÆôÜaF³M5·IÏÉ5æ¤åÆäs\r¥ÕéÊiò›¥õ5¦çÓט¹ÉþHâ'ŸÚi) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯U]^iR q0µUV/“´^«¬^&h½LÐz­°z™ õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×dõZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h¼¸•&Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€6/úm`ê>4`õ29@ëer€ÖËä�­×ª«w[¯ÑôSçž+ŒÃ˜ž;̨c¶é£æ¶1é¹1¹Æœ´Ü˜\cŽK®´:]9Ma³´¾ÆôÜaú37ÙIüäS;-¥«×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj Ë+Mj!jÀêer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&4yq+Mˆû€©ûЀÕËä�­—ÉZ/“´^«Fñæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª·Ò„¸˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐæE¿ML݇¬^&h½LÐz™ õZ5`õú×U¤4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h½è·i€©­°z™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—É]^¹/婺 X½LÐz™ õ29@ëµjÀê­k9É2²¯Ñô\aÆôÜaF³M5·IÏÉ5æ¤åÆäs\r¥ÕéÊiò›¥õ5¦çÓט¹ÉþHâ'ŸÚi) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯U]^iR q0µUV/“´^«¬^&h½LÐz­°z™ õ29 É‹[iBÜL݇¬^&h½LÐz™ õZ50Š77YG×dõZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h¼¸•&Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€6/úm`ê>4`õ29@ëer€ÖËä�­×ª«×¿Þ¨ÔŒ7fÆôÜaré¹ÃŒ:f›>jn“ž“kÌIËÉ5æ¸äJ«Ó•Óä6KëkLϦ¯1s“ý‘ÄO>µÓR°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«º¼Ò¤â>`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@“·Ò„¸˜º X½LÐz™ õ29@ëµj`on²Ž®Ý];ÉêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­Ðxq+Mˆû€©­°z™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—Ém^ôÛ4ÀÔ}hÀêer€ÖËä�­—ÉZ¯UV¯½QEJV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€Ö‹~›˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™Ðå•ûR>ªûЀÕËä�­—ÉZ/“´^«¬Þº–“,#ûMÏÆaLÏfÔ1ÛôQsÛ˜ôܘ\cNZnL®1Ç%WZ®œ&°YZ_czî0}™›ì$~ò©–Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5Ðå•&µ÷Swi'ßvL4œ¸p­eÛå°xòHصcwQ¿SJµmW‹úð®;Âô¡/´ä¬“ªûЀÕËä�­—ÉZ¯UV/“´^&4yq+Mˆû€©ûЀÕËä�­—ÉZ/“´^«Fñæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª·Ò„¸˜ºS»~±œhî:’ضœh¢>|òb¸>¸§iÛë‹_)&šè/^_­”æmc⺠X½LÐz™ õZ5`õ29@ëer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õëk4+R°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«´^ôÛ4ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€.¯Ü—òT݇¬^&h½LÐz™ õZ5`õÖµœdÙ×hz®0czî0£ŽÙ¦šÛƤçÆäsÒrcr9.¹Òêtå4y„ÍÒúÓs‡ékÌÜd$ñ“Oí´”¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª.¯4©…¸˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐäÅ­4!î¦îCV/“´^&h½LÐz­Å››¬£kwD×N²z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«4^ÜJâ>`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õëk4+R°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«´^ôÛ4ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€.¯Ü—òT݇¬^&h½LÐz™ õZ5`õÖµœdÙ×hz®0czî0£ŽÙ¦šÛƤçÆäsÒrcr9.¹Òêtå4y„ÍÒúÓs‡ékÌÜd$ñ“Oí´”¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª.¯4©…¸˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐäÅ­4!î¦îCV/“´^&h½LÐz­Å››¬£kwD×N²z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«4^ÜJâ>`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õ»­×hú©sÏÆaLÏfÔ1ÛôQsÛ˜ôܘ\cNZnL®1Ç%WZ®œ&°YZ_czî0}™›ì$~ò©–Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5Ðå•&µ÷S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“𼏕&Ä}ÀÔ}hÀêer€ÖËä�­—ÉZ¯U£xs“utíŽèÚIV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkՀƋ[iBÜLmÕ€ÕËä�­×ª«—ÉZ/“´^«¬^&h½Lhó¢ß¦¦îCV/“´^&h½LÐz­°zýë*R°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«´^ôÛ4ÀÔ]ÚÂÙù0÷ùÏ„O>°·¬W*q@—7¦¬WÃÊ•ïý{vÊd9õÿÓKâZ­­¼UÔØUÜ¢=ðÔ7ÂëË7 yöRuÑ_½^?3Úµ³¨wL(|æë?¤r@\·k+E¿µÍÌ·1qݤ½~æÙh_ì÷?ñ×áâ`_tùbRµUV/“º¼r_ÊRu°z™ õ29@ëer€ÖkÕ€Õ[×r’ed_£é¹Â8Œé¹ÃŒ:f›>jnÌÍ _~è“áØçç mjzvm¢ÉçÞ Ë¯})ÞýÞpxökáÜâÕÁtª;§;·hŸýÄlxîü¿„åÕÁØ—¾N¾7Üwü»†1o†Ÿ¿ü'áÀ¾ß.´•p#\¹p*<q`øÔ™7Óç>wÚJXšLÀÊ¥Aµ®ý"œê¾¢þuuèÊýùÙß »v~ ›ÿ~¸º‚Éþ?†SO| Ð.ݪ6¬QÏìªcm\r¥ÕéÊiò›¥õ5¦çÓט¹ÉþHâ'ŸÚi) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯U]^iR q0u—¶²0¦«‰fj[P÷¼óÝpü¾÷—Yå=Tˆk^[ ¿:÷ûEÿbyP³ •Êúß™Çö}™Tbò‰zêÐÉð“ÁºœuâºI»þ“—Â×Ïýd£ví[E=·x½ºC“;˜$Ÿû\xxöÜvtêÁµ¬aß:LmÕ€ÕËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 ñâVš÷Sk4™h¦¶M^¡{ëôcE}©š©19 ®mÚ­¢?up.,VGñR9`½¾Zôü§ G/W/Ÿ Ýñ;DNI\ëµrb{çO†×¿S»q><õžr¢©õTmÕ€ÕËä€6/úm`ê>4`õ29@ëer€ÖËä�­×ª«×¿Þ¨ÔŒ7fÆôÜaré¹ÃŒ:f›>jnÐ䈦Ô1]ÞsÇÞîû“¯„ÿþÄ¡0=¨e`WNWn´ÕåpéüWÃî Ÿú±aÌ›áí³Ÿ»÷þ§B[^Å©óùðôCw ê#a~©Ü)|î:Úêáô£÷†œªå@ç®þ2¼6W®}ýÝõc´1]cÐcVŒk®´:]9Ma³´¾ÆôÜaú37ÙIüäS;-¥«×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj Ë+Mj!î¦îÒF;u~9ÌÏL‡;ËSç—–ß Ë—^.ú»Ÿx1¼m8Ê©×.uÑv=\ÜÊ©{°qÛD=˜œ¡ÿ4.Ú¦<^ÔûÞót8cµÝW‘ª5Úê¥Sá#SåQáW(êb’ù[EÿÅ¥•¢ðE¤j«¬^&4yq+Mˆû€©ûЀÕËä�­—ÉZ/“´^«Fñæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª·Ò„¸˜Z£vêüj8{´\ã(± ¿ú““áпμ½ñêgªMÚÊ•¢?³ûP˜}õçÅ]©×MÚ¥S„©GOS9 ®uÚõ°8÷`Q¿€ÔyKŠzågáìÓeÎkÕÕ÷ Ó‘ª­°z™ÐæE¿ML݇¬^&h½LÐz™ õZ5`õú×U¤4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V h½è·i€©µ&š¨m_oô뢾óñ3ÅÑKÑd¢™Êq=šöËpþ©÷…»_Hn †½ë ^½ö0{_yåv|ò9•âZ­ýºüJ¨£g¯Vwð¹+Kß ³í/úK+ƒG¼º.ÿµN_Lª¶jÀêer@—WîKù@ªîCV/“´^&h½LÐz­°zëZN²Œìk4=W‡1=w˜QÇlÓGÍmZ×ÍÅ“G®»Ã¡ß ïT÷h«?)<}à`xü+ß Wj_±#§ÎASn]Úßüí¹páòr9\¹.ž9fv¨yŒëÃÉÃw‡ÓíÌ]8óÅðØþÝáÀÓ/…Ÿ½+·™ò´ü¾=Ÿ çß)kʽ¾ø•px×aúÐÂ…j;�íÊ«_ ‡wöý©„e‘V mva¹ºc#McÄ –ýuâµêÞ’õmW‡Wc.±ïÛhÌèòJ«Ó•Óä6KëkLϦ¯1s“ý‘ÄO>µÓR°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«º¼Ò¤â>`ê&­8]>¸E¨Ußñ(Û†°\M4†A-_ÀSj`0¹\úû¢Þ ÿ`BŠ>¾4\Xß¶$Uwiï^>æž:k*1ÞÎ0}ÿE¿q¦LvõÉÅõÉW©WkL%çÀÇÃìé_Ö÷SwiçŸ:ö<õr1yoÞv}B‡zñz<!{½í_›h¢â>h¬eíÚø…û·-'–x\»¥9$÷}I«w@J/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 ñâVš÷S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“Ú¼è·i€©ûЀÕËä�­—ÉZ/“´^«¬^_£Y‘Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 õ¢ß¦¦¶jÀêer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&tyå¾”¤ê>4`õ29@ëer€ÖËä�­×ª«·®å$ËȾFÓs…qÓs‡uÌ6}ÔÜ6&=7&ט“–“kÌqÉ•V§+§É#l–Öטž;L_cæ&û#‰Ÿ|j§¥4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V ty¥I-Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 ñâVš÷S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“Ú¼è·i€©ûЀÕËä�­—ÉZ/“´^«¬^_£Y‘Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 õ¢ß¦¦¶jÀêer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&tyå¾”¤ê>4`õ29@ëer€ÖËä�­×ª«·®å$ËȾFÓs…qÓs‡uÌ6}ÔÜ6&=7&ט“–“kÌqÉ•V§+§É#l–Öטž;L_cæ&û#‰Ÿ|j§¥4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V ty¥I-Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 ñâVš÷S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“Ú¼è·i€©ûЀÕËä�­—ÉZ/“´^«¬Þm½FÓO{®0czî0£ŽÙ¦šÛƤçÆäsÒrcr9.¹Òêtå4y„ÍÒúÓs‡ékÌÜd$ñ“Oí´”¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª.¯4©…¸˜Úª«—ÉZ¯UV/“´^&h½V X½LÐz™ÐäÅ­4!î¦îCV/“´^&h½LÐz­Å››¬£kwD×N²z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«4^ÜJâ>`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@›ý6 0u°z™ õ29@ëer€ÖkÕ€Õë_oT‘Ò€ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 õ¢ß¦¦¶jÀêer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&tyå¾”¤ê>4`õ29@ëer€ÖËä�­×ª«·®å$ËȾFÓs…qÓs‡uÌ6}ÔÜ6&=7&ט“–“kÌqÉ•V§+§É#l–Öטž;L_cæ&û#‰Ÿ|j§¥4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V ty¥I-Ä}ÀÔV X½LÐz­°z™ õ29@ëµjÀêer€ÖËä€&/n¥ q0u°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5 ñâVš÷S[5`õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“Ú¼è·i€©ûЀÕËä�­—ÉZ/“´^«¬^ÿz£R; 0Þ˜qÓs‡É5¦ç3ê˜mú¨¹mLznL®1'-7&טã’+­NWN“GØ,­¯1=w˜¾ÆÌMöG?ùÔNKiÀêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­èòJ“Zˆû€©­°z™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—ÉM^ÜJâ>`ê>4`õ29@ëer€ÖËä�­×ªQ¼¹É:ºvGtí$«×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj@ãÅ­4!jÀêer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&´yÑoÓ�S÷¡«—ÉZ/“´^&h½V X½þõF) X½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UZ/úm`j«¬^&h½V X½LÐz™ õZ5`õ29@ëer@—WîKù@ªîCV/“´^&h½LÐz­°zëZN²Œìk4=W‡1=w˜QÇlÓGÍmcÒscr9i¹1¹Æ—\iuºrš<Âfi}é¹Ãô5fn²?’øÉ§vZJV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ@—×›7oý5!î¦îCV/“´^&h½LÐz­Å››¬£kwD×N²z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«4^Üzóæmó›÷S÷¡«—ÉZ/“´^&h½V X½¾F³"¥«×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UVo]ËI–‘}¦ç ã0¦ç“kLÏ&ט“–“kLÏ&טž;L_cæ&û#‰Ÿ|j§¥4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj`on²Ž®Ý];ÉêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€Õëk4+R°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5`õÖµœdÙ×hz®0czî0¹ÆôÜar9i¹1¹ÆôÜaré¹Ãô5fn²?’øÉ§vZJV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«Fñæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½Ûz¦Ÿ:÷\aÆôÜaré¹ÃäsÒrcré¹ÃäÓs‡ékÌÜd$ñ“Oí´”¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V ŒâÍMÖѵ;¢k'Y½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­°zýë*R°z­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5`õÖµœdÙ×hz®0czî0¹ÆôÜar9i¹1¹ÆôÜaré¹Ãô5fn²?’øÉ§vZJV¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ/“´^«Fñæ&ëèÚѵ“¬^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½þõF ¤v`¼1ã0¦ç“kLÏ&טž;L®1'-7&טž;L®1=w˜¾ÆÌMöG?ùÔNKiÀêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕÀ(ÞÜd]»#ºv’ÕkÕ€ÕËä�­—ÉZ/“´^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^«¬^&h½LÐz™ õZ5`õ29@ëer€ÖËä�­×ª«×¿Þ¨"¥«×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­—ÉZ¯UVo]ËI–‘}¦ç ã0¦ç“kLÏ&ט“–“kLÏ&טž;L_cæ&û#‰Ÿ|j§¥4`õZ5`õ29@ëer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµjÀêer€ÖËä�­×ª«—ÉZ/“´^&h½V X½LÐz™ õ29@ëµj`on²Ž®Ý];ÉêµjÀêer€ÖËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€ÕËä�­—ÉZ¯UV/“´^&h½LÐz­°z™ õ29@ëer€ÖkÕ€Õë_oÔ@j‡Æ3czî0¹ÆôÜaré¹ÃäsÒrcré¹ÃäÓs‡ékÌÜŒÏ#qÇqÇq¶>ÑtÇqÇqzÁ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½àMÇqÇq§|¢é8Žã8Žãô‚O4ÇqÇqœ^ð‰¦ã8Žã8ŽÓ >ÑtÇqÇqzÁ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½àMÇqÇq§|¢é8Žã8Žãô‚O4ÇqÇqœ^ð‰¦ã8Žã8ŽÓ >ÑtÇqÇqzÁ'šŽã8Žã8N/øDÓqÇqÇéŸh:Žã8Žã8½àMÇqÇq§Bøÿ_[¡eSò’É����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5e.png��������������������������������������������0000664�0000000�0000000�00000112434�15030617045�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��è��‘���7ŸF���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��”±IDATx^í½ßçuæÏ?€7ºùs!¬€^k/HZòBD ¢`CìJp@Ž iSP`ÊÁFrL ‡r¼T²Ä"ä kÖþ†Î×´ ®cÚýcÑ0 yœH6ii6"#[ÄXKYCÎûí§ªÏÌÛÕ]oszºëíáó^t~êyЬªé>]ýv÷–@!„BÉ6è„B!„dtB!„B2‚ :!„B!ÁB!„Œ`ƒN!„BHF°A'„B!$#Ø B!„’lÐ !„BÉ6è„B!„dtB!„B2‚ :!„B!ÁB!„Œ`ƒN!„BHF°A'„B!$#nÊýÆÒBøÚÜá°wz6,¬tï —ÂüÌt˜ž]kwmË‹áÅÙCáùKÝ;Fŵ°8w(>}¥[û¸±ôýð¥ÃûÖ-[ºãSᥫ7º*!„B%í6èKóaf­ ¬Ž©°÷ð_‡ù¯-„¥µÞ°l¢¯ß{‡¹ù K¿í®?ˆ(£§A·r%œ>r¬ÑcéÅðøÞaæéï®ÿ?®žGžÁ ¯†¹»Ž„ÓÃ4ÓÈØ?öϽnÜx#œ~ »owÏ…W—Ù¤B!„Œš ® wÝÃ;;Mà¡0¿$-ëoÃÒÂ|˜ÙQ4‡S3_ŠšÃþöñ0µe:ÌDW¤qU|~v¦s§™œz ̽zµ« ¢Û¤Ñ ßXœ û›ü7~æØöÎ~?,wï*¯rß;’+õø7ÝuøtHýÏ›(þ_[ö†Ù…õq¿ ³w…©æÃìÑ !„BFJ úJXš?Tiлà îã˜j1ÕÛäWÞ{ô’NcúÂÞâjúÓa¡öŠï úòOÂ^<$ýÝSGW´o„åW¿f¦¶Œ Aߘé-+ ³aº¯Aïpõt8<µsè|B!„’&ï!®ŠGnmƒäŠ|ª™¬6èWÃâéÅûõƹÓL/·Ã{§:Y;ÂÌì\˜=ô—aá×Ýæ/ºc`³]L™ SkW´×›óuoÙWç|OÍüeø~<M§˜ÃÞ}w�ÿ–xºŒOoé¬ú+³mí 2ÿ•ð8þò‚¥š5{*,/dMŠõî~Ý?«Û&„B!Fþ ú †;٠˘N£[;Ý£·A/§u”MéZ³]4Ø;Ãó¿è$¢þE˜ÿT§A/DÅøºcwÞýzSßýÿ ôJX^xºx`]/§—lÙûGát§i/ç´ãECo½>½e¹³þÞ®ÞÙ|9|ÿÅ? {§>æ/-†ùöv|y·¡÷݉Ú+èljB!„lРKÃ5»É]šÌNƒ:3–º÷õ2 Á®6Î+ avzG˜™ûI4\hnÐkÝêvŠyê;Ö_LÛ­þ;âåöžwú¦·È>í}¡x!ûºWùã¬ú]^ø Ò!„BÈF1AWУÆ0Ù ¯_A_¿ ]EÑ Ë•k4úøv˜Aß&³ ºpc),|íËkŒ]oà«SedEÙñô–‚ë¬ÝW^Yïëû¾¾AOk„B!dcàtÙäÀÆy}nzÑÈ®}ðTÛ ø7ômç·aéûf¦0üD8}áÅÞ+èýùO…)ùfšî÷xô{K¢AOü›tB!„vÉ»Aç·¸Ô]Ù.\Ùfsƒ^ûo¬n§x2U~ï8êê—7–¾žŽ>˜:5ótxqQÚñAßÞ2¨A—wîêÜ÷ëî}%7–þ-ü[w_Õ7á /¤!„BȆAƒ.W¼ãƯÓ¯}z§9üÅhz‰4š½ÍoÏ÷ w?PYË€¹×òAÑx.øÓŸ’ïý¾Ñýð¦\ï6èð¿ñý07·Ð?O½ojJ—nƒ>uøÅðÆÂ—ÃÜü±N-ÿÇ«añŧ‹ozYóWÌ÷Ô¼[Сoz èÎS¯6Úrõ}ïá𥅥òÁò«aþé¯u¿™Eöí wºÇ‰ßâB!„2RÚmлÍêú\èxtšVü’èéŨùí6Æ×ïŒâ—D¿ÕýÚÀºW¨×}‡Â‰ù'Cñ¡Røp)ôC³á+s‡Ë+ò[ö‡Ãó¯vÿ-ëWêû¾qn³OÍkï t¿.qe)|ÿiù¥™ðôÙÃ_ãŃlomýèßWŒò¬Wû¦·ô~‹KµIïýJGìããÝ_^°oãwø=è„B!c!ƒ+蛘âŠuõ—D­àê÷MK),鿎iº I”B!d\°A5E#-ß=Þ½OMwjÍÀ¯‹¼N?þ'•©-#àFy…zæKáÕÔ;„B!dC`ƒ>Š_ï<¨›G^‹Ì%ßéûë ~Ñ4*’Qø`è~m”B!„Œ6蹃ïGŸÇÏö¯Ï Ÿš™ óò!OB!„²©`ƒN!„BHF°A'„B!$#Ø B!„’lÐ !„BÉ6è„B!„dtB!„B2‚ :!„B!ÁB!„Œ`ƒN!„BHF°A'„B!$#Ø ²lÙÂ?)B!„ GëÝŽÉ„BFtõ „2z²iÐÉÆÀýÙÜ÷ãû¹¸ß !d|´þhËý…û³=¸ïÇ÷s;p¿BÈøhýÑ–ú ÷g{pßîçvà~'„ñÑú£-ô7îÏöà¾ÜÏíÀýN!ã£õG[>èo,ÜŸíÁ}?¸ŸÛûBÆGë¶|ÐßX¸?Ûƒû~<p?·÷;!„ŒÖmù ¿±p¶÷ýxà~nîwB­?ÚNìƒþêÅ0ÿÀÇÂÑsËÝ;ò`ÒŸDWßœì}&œ{oµ{Ïäï¾?¼9ÿPØ{ô_Â{Ý{&™I?Ç’éãI̦Üï„’)­?ÚNæƒþjøí¹gžÝÞÍ«‘œì'Ñåpîè°{öáÝî=“D¶ûþ·¯„£{î ³ ïtï˜l&ûD¾'1›o¿BH¾´þh«пæg¦»ëï ~«ó´Öai>Ìt3Òck˜Þ÷É0{òÕ°¼öø^Xzù„‡÷më®3vÞû™0wâOÃG¶ óK+ÝõªüG8sd¸çøÏÂî=«ËÃÂéù0÷O„‡îÞ¶Nφ…:û‘ÿ¯Aûâ`¸wçö03)¬,̆énvïØö=øt8¹øNX]Y³ÓƒÖ´ïpõÛáÈŽ™pü5¹Î{=,_ú—pz~.üÅ‘O…»wN…éÙ…ÐÂnU!ÿ_;°ï»IýÜWÏüQØqÏñðÚúÉ.-œósŸGº'ìܺ·Ó¼ç{å¶Šüÿ7†Õ°²ôÝðìÿ³¶·îüHø½{w…-3óý¤Ù÷ñcӇñ ¿éfw¸ñj˜Û?ÕÕêSò}<‰‘ÿ;!„ÑÓú£­íA¥Ó*=•«ME³ö$¶f÷ö6s+—Ã…oþuxxïžpÿ‰Ÿ…÷õpñ‡Ý»?þû©óáÊJ'«XçoÂá»¶w¶Qß cÆý·>N¾µ®_?÷løÈ}…#1¾<;¦&ªA_ ×ÎÿU¸{ûýáhw_¬.ÿ"œ}ásá¾mÛŠ&± hÀãf®ÓÜ\9¾ù7†½Û?N¼†ëÞš}?LÃød¸õÁ“á­µÃú›pîØ'Â}?þbîoÃìÌŽMØ oä¾�¦NÜGxðäG—ëç±|,<|äóaîËf¦nâýÚñ»?fŽ~#\¸ÒyaØyñrñìWÂS÷} hЗ°ŽfßëÜvîü@ôP÷Êøv†·ÔïãœOb6t¿BIÒú£­íA¿Û øÓáÈGw‡_\köô‚ÕðÝÛÿ(|ûg_ N},Ì-ö76«—N„ûjôß„ ÇîMNÃèý·Œß“èÛáÌ‘½áÀñ]oâ pepg¢IÞéìï…íG¾®*öý™«r0âýŸ„cwÞÝÉ®›†Q—›íïû*«áý φ;SS'jsóÅ·Ÿ±~sæ³áÖÇÃë=»§û8SÛ  Ѿ/Ö¹#ü·cO…;w|.œ-ö7ô»Ãþcþ¤vçýx³qûBH­?ÚÚôå‰ó…ðoçžé<>Nu¯:éôïý0Ì~`WøÄ¡{+Wk#®½Î|õ;áõkÄw_O~àw6öÂä5èo†“‡vhß WqeÔ6*«á½Îÿù·=ξ״ïïOž­6áæýìçÂÌ…Å÷°YôÜ÷Õ}÷ëpöÉ…sjÞµèpS7è×Ãå“…­} :®ÿ,ühñJy®iöýo:ç6ÖùþB8~Ïáðé+Ý)[Ÿ'^ûný>Îüñ$fãö;!„&Z´µ=èGW¶Vß §»cíÊ“ºA/®L–Û´7{ƒ¦aô3y úJxëÔcaûô‡Ã‘ã/†ïIcR%ÕÌŸÀ»¿nØ÷ÑUaaÐ4Œ>6kƒ¾‘û¾×9hêD7uƒÞÙGo}#<º}G¸ûÈsá¥ï-–Sݪhöý¥³ÝuÞO<¦üj¸ðO‡ÛîŸo¾_çÏÿñ$f#÷;!„4­?ÚÚô{ßz.î4[ƒþÿÛ¼íɳaýkçJü{ŠQ}R|ÿB˜;ð¡ðäÙ_wïÌä5èVß ‹'Ÿ®}PÿÿýáÁgþ9,IÓÒÔ¨l}(œ¼Œ·õSû~w8tòÍn VÃû‹sáÀdZ@›µAï°aûþz÷ðnXœûÝð'_®:Qp“7èÅ‘¿fÜ}�ýbøöRÓ»dß/}omÕ·N†§v…½wì._tÖù'àñ$fc÷;!„­?ÚÚô+sC»MÈŽG¿Þü²AÿÍ™päÖ;ÃÍþAØqç³á )¯H–s¨÷$§a”Ldƒ^eåJX<óá©ûö¬O‘¨mTºsyo?Î]oÚ÷¿Žž‹¾å¢˜§{OzFÁ&nЫ¸÷}÷.ðîÂìž'§NÜô zL-úNxá©…íò·®Ù÷ïÅë\ §ï [¦>N½Ý9(ý“ñx3ÚýN!$¦õG[Ûƒ~µAï<Í]}9<µûCá‰'?nklЯ‡·O&lLJ¸®,„£wî œ¼Øßð jÐWß'¼#Ü?±óÔšfÒôúïûáÒ‰ûÃ-Ÿ o£¬kTŠéF ;Š«µŠ}])/®6ÞúÉ0ÿfº=߬ úÆî{a%¼uòáp+¦W4Ÿ¬5Íg¾xöó@ÿ÷âƒâ·üA¢ÁîïûžuVõÅ Ïœ8×9k; òOÈãĬíwB!´þhk{ÐïoÐÑÈ,|4lCNmƒŽ}ý4œ)¾ºnOxôÔ›{®‡åó_ ·ïÿÍ‹åW¬á¾Kÿ^š{$ìêiлÓ0vÔ|I…‰lзÞ>öÿ†ïÈèâëæ¾Û÷ÁðÉ“—Ê&¢¯ÑX¿Ú¸m»|`W³ï…î; ¿¤Ê&nÐ7lßw)¦NìGÎüG÷ŽuÍgÆxöó@Šÿû­aïÃÿ=œüÎO»óÏ;φ¿{ìCaû'ÿ1,á.;OíÇ>mrOb6l¿Bi¤õG[ýƒ>æ/Ë”c­Y+’ÛÊýž ××Yø±œO…£§þ5ú±œîüÓƒ{ÂÖµõ¦Âλ?<yüìúüßî×¥Ýyì'µÓ0Š'ÑžíE£çÅh‘mZ(þíS Ÿù“O†}Ó[×2¶îz`íÇ…êÿ˜¯ûL8õÚÕ†*ªîû˜†±ûÞÞvé¡lÊûó0¦û?lÚ2òo³°aû¾›‡æ¯ø:˺é[ ö8aôØ47äß:4Å~Ø>þ™ÏöÎÿߺ'œýzX\¾®Ü÷ñcS¥IïÙײo'çñ$F¶O!dô´þh; ú«oŸ ܦ™†Ñ>“ó$z=¼}ªû-5}䤑ž_ý?áÔ#ûTS'&•É9Ç3I'1“¾ß !d’hýÑ6ÿý÷ÂkÇgÂŽÇ^ oO@Ç31O¢7~Žßsgxìô[›¦‘Ìaßßxíx¸gÇgÂiÌÞ¤LÌ9>Éz<‰™ìýN!“Eë¶ù?è¿.Ÿ;¾óó†oÃÈ„‰y]y+œû§—ÃϾÁb’h߯†•ËçÂ?}ççµS'6sŽd²Ob&{¿BÈdÑú£-ô7îÏöà¾ÜÏíÀýN!ã£õG[>èo,ÜŸíÁ}?¸ŸÛûBÆGë¶|ÐßX¸?Ûƒû~<p?·÷;!„ŒÖmù ¿±p¶ ÷ýèá9ÞÜï„2>Z´åƒþÆÂýI6;<ÇÛûBÆG6 :GþƒBÈèaƒÎÁÁÁÁ¡„BFm|ó›ß,ž¬>ýéOwï!Éââbø¿ÿ÷ÿv+2N¾ð…/çöx 6˜·ß~»Ø¯Òìâñã—¿üeW%„BJØ ;Á­<Éb™l,د»víbƒØØçÒD>õÔSÝ{ÉF2??_œßòòÜsÏñ\'„²ô!@ó"O®dcùÄ'>Á±EpUWšG¼[D6¼°—Ç 4ìßýîw»*!„›6èCðÊ+¯¬=±’%n±ŸÉø‘i\œ†1:0‹Ó^!„İAybe¹ñ`�ö-§º´‡\áå1=œöB!D`ƒ>$ÒDr*Æh©.ü0n; Aä1œöB!°A~Xt´p.tûàÈ•]¼ %£‡Ó^!俆 ú€'O6/£CæB£Iä‹ vÀU\iÑ<’ñÀi/„rsÂ}æW¼ÈhAœfÑòýèhÙ$ŽN{!„›6è„\åâ‡EGšÙÇœêÒœÞ.xçBö¿N{!„Í ô o=ãIWÉhà×þµ磷þäÈcßÑ „Íô "þ°(Ÿ,G‡LuÁ•DÒœÞ>xŒ‘)GhØùÎ!„lØ o òö3Ÿ(G^ÁmÎGσê´,óE!„L>lÐ7~Xt<È/¸bpªK; )—ÆóÑÛ‡Ó^!dsÁ}‰¯î²q-ò­hÙˆ´ç£çþ8í…B6lÐ7y‚Ä-ñ‹!|@—´ç£ç§½BÈäÃ}ƒÁUE<)¢yä•ÝÑOuaÒñ|tþT>pÚ !„L.lÐG€\½â‰ŒùzKÌûgóÑØïrÎã–äŽ §½BÈäÁ}à ÍÊx@‚æû›S]Ú#þ!)‡üà´B™,Ø �4òDÈ‹Ž4²¿ùK®íO9âqÈN{!„É€ úˆ·•y5q<ÈT4l8Ú#>œž'œöB!ùÃ}DÈU]<ù‘у¦CÞÂÇW0’öãÀ)^yÃi/„’/lÐGˆÌæ‡Eǃ|ƒ§X´ç£OœöB!ùÁ}„àÇ[ð„Ç_Z²ÏÑp°ÉhÎGŸ,8í…Bò‚ úÁ•DyÂã|Üñ!oÛó…Q»p>úäÁi/„’lÐGŒü$=ßêñT^liöpK&N{!„vaƒ>bä­~ÌG'ã ö;¯Þ¶ ç£O.œöB!íÁ} ȇE9w¼`Š ö;§º´ ç£O6xGJþ–08í…BFô1 sqùõã%¾zË+íÏGçwM&ø6*ù{’Ç3¾;E!£ úÀ“˜<©ñ m¼ÈT 6†íÏGç|æÉÇM^la aÇ7'BÙXØ  y‹˜OfãGö=?¨Ø.hîä ,æ6“É¥:íÓø8í…B66ècoË/ñT¾@j4qÒÔñ¼&N{!„ÑÀ}ŒÈ¯4ŸøƒŠœêÒ.ñIñXL>œöB!ô1"Ob|{¿ä;é9º}âiG<›N{!„ƒ úÁ˜<y±)?ñh¼X"í ¾`Ý\pÚ !„ ô1#ßdÁ¯ýk‡xª ¯îµ ç£o^ðŒÓ^!Äô1˶ü:"ŽßÉhÎGßÜpÚ !„ø`ƒ>fâ·öÙ´ŽNuiÎGßüpÚ !„Ø`ƒÞr—soÛ#ž^Á+zí¿håßÄæÇ™Ó^!Dô‹â ŠW ÛCš‡öá|ô›N{!„fØ ·„L±`3ÒhÊå8à-wÒ.2ƒÓ¿6?œöB!õ°Ao |‹ ž”øóóí"ïf`à^H»ÈwÕã…ßÕØüpÚ !„ † zKà‰Iž”xµ°]âoaSØ.|Wãæ„Ó^!¤6è-"å7‰´|?=›Âö‰ßÕàïÜ\pÚ !„”°Aoù`žH»°)Ì ™†Áw˜n.ð.JüyN{!„ÜŒ°Ao~X4â©.¼j×>œ~sƒ¿Áê´~N„r³À½e¤)Äiix<Ú‡óÑ @S.çümò4!d³Ã½eðD#O<|Òi™Ë©.íéGT§½` æ;+„Í ô ·òùaÑ<ùÏhÔ9ÿ¹}8œöB¹Y`ƒžx‚‘'’Òð{êó€óÑI §½B6;lÐ3Ažlx5(â©.ü‰öá|tR…Ó^!›6è™ ¿¦Çæ#ä N­hÎG'ƒà´BÈf„ z&àIFž`øVm>ÈÔ NuɃx>:i’ÄpÚ !d3Á=#ä*§TäÞ.—©.üoÈ/ðâ¸p:‰á´BÈf zFàÇŠð„‚«@$â©.¼jÛ>h¶ðŽŽ^ÔR…Ó^!“ôÌ«µlóB®Ú≞WãÚóÑù!^Ò§½B&6è™!ECHòM¹<ÑsªKÈ;N|AKêà´BÈ$Â=3âoªàH^  ”cÆ08há´BÈ$Á=Cd~-¿J.?ä6„y€cÀùèħ½B&6è‹æ ByrçwÖçç£+ø;æ´BHΰAÏ<IHÃÁÈÉxß"ÏÎG'8í…’+lÐ3EæÖòây"Wß8Õ%8xá´BHn°AϹJËf#_dî3§ºäþN8 ^xË»—œöBi 6è#Wtðö=Éxª ?ЛœN†WÎñ¢[þ¶q>ñ1˜2nØ g š><Aઠɓxª ßσx>:ç/ø,CuÚ ?DlÐ3o­Ê“ŸòE>dÆiùÏGç '2 Õi/øªUN{!„Œ6è™#½2_Ð�Ê8§ºäƒÌGç;PdX8í…2nØ gŽüz%žH¾Èt$'¾Û‘ñ '¾À%§½BÆô € dª ¯Øææ K3Åùèd£à´BȨaƒ>È9Ç9oâ+¶ü‘|@ó„c‚cÃùèd£à´BÈ(aƒ>à‰@žØ`äM|Å–o}ç磓QÁi/„QÀ}B+5œK›?r¬Ø æCüîÿ†È(à´BÈFÂ}B+³¸RCòOÊlóƒóÑɨá´BÈFÁ}‚·QÙ\äOÜ â-p’œNƧ½B†… ú!Í®Ðü‘ï°Ç5ßêÎÎG'ã‚Ó^!^Ø Oü°èd'b¹ŠÆ©.ùÀùèdœpÚ !Äô C¾k›¿X9ÈMapªK>ÄSØ,‘qÀi/„ lÐ' 4xpÇ=™ âyÏ|{;ä÷p\Ø(‘qÁi/„ lÐ'ypçÙÉ žêÂÏä…¼#…ùèl’ȸà´BHlÐ'ùð!nÉd€+´òdÌoáÉ4åò‚—OdÜà"‹|hƒÓ^!ô $nöxÕorˆ§Tð¸åCü9^Å$m€ÏÅÓ^ðb‘„ÜܰAŸPäª ?,:YÈqãT—¼à|tÒ6hÈåÝQ9ùøNÈÍ ô E>,Êïrž,âw?øä›œNr :íËü¼!7lÐ'4ò–(¯øMñÕZ~Ÿ}>ÄSœNÚ†Ó^¹¹aƒ>ÁÈÛ¡l&&¹Z‹[’œNr‚Ó^¹yaƒ>ÁH3m^Y™,â_³än^p>:É N{!äæƒ ú„#߯ͫ}“s6‚yÂùè$G8í…›6èŽ4yh$Èä7‚$ÐôH#Ä)d$'8í…›6è¬åš8œ<â©.˜ZAò!žÎˆä§½²¹aƒ¾ «)Ï=÷\÷2Ià—EåI–S]òBÞ¡â±!¹Âi/„lNØ o¤ÁÃ4™LðÃE8†œê’rlðy6>$G8í…ÍôM?,:Ùà V®‚ñ¼À±‘¿/þ,ÉN{!dóÀ}“ _ ÇïÕž\â©.|RÍ Lo‘cÃ+“$w8í…ɇ ú&6”c~XtrátŠ|á|t2IpÚ !“ ôM„4wü6É%žNÁ©.ùÁPdÒà´B&6è›™"æL.xò”'S>‘æEüŠóÑÉ$Ái/„LlÐ7ò�ŒfL.¸zŽãˆãÉ'Ѽà|t2©à±„Ó^™ ÚmЗæÃL÷¢L…½‡ÿ:Ìm!,Ý讯åêépäé…°Ò-o&¤±ãսɆWjó†óÑÉ$ƒsV~ŃÓ^É ® _ §ïì<H óKÒRÿ6,-̇ٙŃÇÔ̗«ËÚ.ýZXœ»7LÏÞœ :?,ºyˆ§ºð‘üà|t2éàkyãi/8§ù¼AHdР¯„¥ùC‡¸Aïrãpúñým*ìý~XîÞ]ϰüê—ÂÌÔ–›¶Are„o]N>òõ™œê’|—ƒlpË;¯òXÃ/ ¤}ònÐÁÕÓáp§áÞ2õx8}WÑquýx8¼wªû€²#Ì<ýݰtc½9—š-[ö†Ù…åpcéûáK‡Ñè—÷OÍüeøþÒoËüM®ŠàÿÉ‹n䨿G<M ™dªÓ^ðüÁi/„´Gþ úÚ˜áðé+݆]®¨ÿ:,ÌÞÕÑÊF¼ ;¯}ý z׿÷é°°¼–ž{{ô͉¼mÉØÉ'nùK±ù!/ˆù÷F6œöBHL@ƒ¾ÜiÂ÷vôé03)Üxc><0ÕmÖ;¬,̆éTƒ~ãaþaêðépõÊB˜Þü º|R·dò‰§ºðÉ2?äïS‘Èf€Ó^iŸ º‚5án,-„¯}e¶;¥%u½Ë¥°ðµ/¯}ðt³7èñUW6 ›™ê‚·¡I^àoŒÇ‡l68í…ö˜¼9èFûûOÏ„©©™0û•o… §ÿ$}sÖ¿ÿ—F~G˜™=N_xñ¦¸‚¤aà‡E7¸r.o=:¦xâÄU.<©’ñƒý.LJWÉf‚Ó^?y7è}ßâr£Ó¯?¦¶Ü毫4NqéÎYß?÷jÇÝá&™âdn,u²9ï߯“%ž Ñ”czEüäÉæ°=8lV8í…ñ’AƒÞô=èæüñ»?V$Íüþðøé7ÂåÅðâìL§a_Ÿ“. úÔáà _sóÇ:µd\ ‹/>]L‹Y›“¾‰Áª4n¼ªºy·œÿóþÏÅmuðÛ^Ú…óÑÉf†Ó^í6èÝfZþÐ{G§©Æ/‰ž^ìùþóKß O¯ý€Ñ_†³§ÿ2ìÇú{ó‹–{íª{÷ëWºSb°ÎÔLxúì‹á¯÷ã+÷‡Ãó¯*¾[}²á‡E7_üâ‹cZ7øŽI»p>:¹à´BFKWÐÉ(Á• <xòjÞä7~Mƒ´ 磓›<&qÚ !£Ïä7òk‡¸âA&KsŽÁ·œÛ‡óÑÉͧ½²ñ°A¿ rêÃdbmÎ1øb,8ÜLpÚ !ô›�4ò€ÉËÉ#¾2¥|›9âWœNnpÎsÚ !ÃÃý&A®äá“Lxb“':Ë`3˜ñ|tþý‘›N{!d8Ø ß$¼òÊ+Ń$29Èô$ëàq΋x>:þ ¹Yà´B|°A¿‰à‡E'“ê•(íàœç¼·ýѬ°A!7x,Šß Äß�§½’¦•ý[ßúVw©ä³Ÿýlw©wXj¯¼^KÐz-9@ã•ÈxúƒÆ'¤j¯¼^KÐz-9@ëõj�5®¦ÇW¢šÞNÖäÆÄµW^¯%h½^ x½ƒ4™Ž[«WHiÀëµä�­×«¯×’´^KÐz½ðz-9@ëMixaºgÏžµÇ(\4:tèPWÕçâ±ðÑGíV%Z/Ø x½– õZrÀßþíßv—HŽ´~¤B¼ ,µW^¯%h½– õbY(«ZŒ¥öjÀëµä�­×’´^¯â:þÀ¯fÄXj¯¼^KÐz½ðzë4üÝÉ‹¬x>ºÆ Rðz-9@ëõjÀëµä�­×’´^¯¼^KÐzµ9˜æ%ïèbÈ;„1q/Ëç©ð"WÞ%ÔzÁFhÀëµä�­×’ª5ÉVPêæäbnÉ óÿp¿Å×TÇ0·dÔÛÄÕñø nЈ=uLScÑ&-7f\ÛD-C>R‡EkªcrÈ×6'-7f\ÛgnõCð¨å"Ä ¤9—!ÓÆbê¼`£´Qm3‡\’­¥Ô c=¹´^KÐz-9@ëµä�W4w‚Æ'¤j¯¼^KÐz-9@ëõj`P]}‚‹‡LeÂrŒ¥öjÀëµä�­×«¯·N“Æ#ž®ñ‚”¼^KÐz½ðz-9@ëµä�­×«¯×’´^K޼›øƒÔ²nµ9—1h]!®G¡¯×’´^KÉ›VŽTuÔ0'—ÖkÉZ¯%h½– õbYÞb¯^½Kù@ªöjÀëµä�­×’´^¯š¼©‘ÆXj¯¼^KÐz½ðz59x«^j!åMiÀëµä�­×«¯×’´^KÐz½ðz-9@ëµä�©åùHF<í%õmVx>tÕ=®G¡¯×’´^Kø/ÿå¿t—HŽô­æäÒz-9@ëµä�­×’´^YŽ¯Þ )HÕ^ x½– õZr€ÖëÕ€Ö[}‚è»: RµW^¯%h½^ x½šœx>ºÖ›Ò€×kÉZ¯W^¯%h½– õz5àõZr€ÖkÉUoõÛ^0âç«Ôˆ‰ëQhÀëµä�­×’ª5ÉVPêæäbnI¿¥7pBÓ6êrEcn?ÃnOpñš¼ýÛ”S­c,Ú¤åÆŒk›q¿¨’cãÍo̸rcƵÍIË×6sÉM½+8h ±o¥5Õ1“–Kò¡µ£”:a¬'—ÖkÉZ¯%h½– õbYüä­C!å©Ú«¯×’´^KÐz½°z1uB®FÅXj¯¼^KÐz½ðz59ò‚J®¦ )oJ^¯%h½^ x½– õZr€ÖëÕ€×kÉZ¯%Ôy¿öµ¯µeÄÄõ(4àõZr€ÖkÉ!yÓÊ‘âô¯¼^YŽÙPHù@ªöjÀëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’?:H­›Ò€×kÉZ¯W^¯%h½– õz5àõZr€ÖkÉM^ËÀ— úêÅxl„¼^KÐz-9€sÐó¦÷h™êÉc=Ñb˜[Ò¤É;|e_LÓ6šrë`nIÛdn?ãÚæ :žžúzÌMn9äÆŒk›“–3®mæ’+üôŒ:6Jkªc&-—äCkG)uÂXO.­×’´^KÐz-9@ë•åøk«„”¤j¯¼^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9x¡ŒCÞ኉딼^KÐz½ðz-9@ëµä�­×«¯×’´^Käßåµx–…xl„¼^KÐz-9$oZ9RœâRâÕ€×/ÿò—¿,jŒ¦¯©©Ú«¯×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^K@ƒþ>…xÝA¾˜TíÕ€×ëÕ€×kÉZ¯%h½^ x½– õZr@·î{Ï5c£>ϑҀ×kÉZ¯%pŠKÞô­æäÒz-9@ëµä�­×’´ÞAšÌ}Mù@ªöj@ãÅ-Ǹ‡œ{1qíÕ@“›ÕÎ)HÕ^ x½^ x½– õZr€ÖëÕ€×kÉZ¯%4y‡Ã~ž#¥¯×’´^K¨Ö$?Z=B©d˜“‹¹%MÞF”3д Mî ¼¹¸Ÿƒ£S­c,ZS¦|Ð÷£W±æÆä3®mNZn̸¶™KîF |CR î«Ã¢5Õ1“–Kò¡µ£”:a¬'—ÖkÉZ¯%h½– õÆËñqdÊKŒ¥öj É[­…”¤j¯¼^¯¼^KÐz-9@ëµä�­W«a9µ.¨ó­êêê|t¯[çRµW^¯W^¯%h½– õz5àõZr€ÖkÉu^y~Â߃LÿÂÔ|M°ö{ÒåK°×^ x½– õZrHÞ´r¤8½Ä«¯w6èâÀR{5Ðä•!µ/KíÕ€×ëÕ€×kÉZ¯%h½– õZµa¼BJM^iH,óiAªöjÀëõjÀëµä�­×’´^¯¼^KÐz-9@ëMirq ?ö…¿ùÛ‰ù˜¸öjÀëµä�­×’8=ozÖ˜©ž,1Ö-†¹%ZM®Ö¡ð|X4Æ¢isqÿ(rA¹1ãÚ&sû ·2b4ÞA4å4y1d>z̰¹uŒ+7f\Ûœ´Ü˜qm“¹ýŒk›9ä’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½ƒ4üÀnS>ª½hòVk!å©Ú«¯×«¯×’´^KÐz-9@ëÕjXN­ ê¼@«&oÝ|ô”¤j¯¼^¯¼^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä¼iåHqŠK‰W^o&?ùïý°¨WM^R ñ2°Ô^ x½^ x½– õZr€ÖkÉZ¯UÆ+¤4 õZ¾¤j¯¼^¯¼^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�NqɛޣÕÜ\Z¯%h½– õZr€ÖÛ¤ÉÀ¯¦ÖqíՀƋ[B¼ ,µW^¯W^¯%h½– õZr€ÖkÕdH×^ X½šïG©Ú«¯×«¯×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NaN.æ–X5ï‡Ec,š6÷"ä3®m2·Ñp+#FãDSŽÖ+vôýèÀ›[e\¹1ãÚæ¤åÆlÔ6±Ì±9FU­©&yÒÚQJ0Ö“Këµä�­×’´^KÐzë4|˘ó*¤r@\{5Ðä­ÖBÊRµW^¯W^¯%h½– õZr€Ö«Õ°œZÔyVVoÝ÷£[j¯¼^¯¼^KÐz-9@ëõjÀêå˜ü×) Tk’/­)ÎA/ñjÀëmÒäâֹ®^ 4yeH-ÄËÀR{5àõz5àõZr€Ö;H[¹ò³ð£Å+a¥[Ç4y…”¼^«6ŒWHiÀ㕯“ÃÀçF@ݺB\{5àõz5àõZr€ÖkÉZ¯WVo<b,µW^¯%h½^ x½–PõVk!åÕšsÐó¦÷hµÀ0'—ÖkÉZ¯%h½– õj´x®kŒÆ+h5 ñâV†/ƒ¢^š3Ѻëcoq+¬//‡ŸÎÍõÌü¥âžx=`©7F[-êùÙ®­ëÿ‡ù%´½%¨—¾ýL8¸kªXÞºëáè·ßèkŒãe`©íÚJg÷ [fÊó'¦Ù[’Ò€×kÕdH×^ x½X–tˈIÕ^ x½^ x½– õZr€ÖëՀNj۔¤j¯¼^KÐz½ðz-9 ê•!µ/kMò£Õ#”:A†9¹˜[âÑä¢XÕu=¹ )§Î‹ûU¹EƒÞiU¹«áÚù¿*´{ïØ±Ö Ç4å Î-ñi× íàö†ƒ³_ g¯ Üæûÿö|øè­ ³/ý[X^½^éÏý·ÞoÚfS£Óº z§^êÞ†Ï-iªc†Õp+#FãDSŽ'÷©§ž*4¼ã%ß¾¹ )g£rcƵÍIËÙ¨mb¹ZÇ4Õ1mÒrcƵMM.î“QGSNÊKò¡µ£”:a¬'—ÖkÉZ¯%h½– õ6iòä/WÓcš¼1Z 4y«µÐãë4訫W›c¤^]^(–gøJxafgÑ ÇëÖùÔó3ÓÅ­Œ¢1íþʱ7Ì.,ËB¼ ªÚÑ;'<vêRbšÈ»á±{ÂŽ'_ŽôwŠåÌþ0¼×½'öÎY'UË+ÿž"Ü»³¼b¿eËTØup¶X^-ÖZ ³å»ýãÐÚñ@F+Kåô©iYgzq{GwÝr½u,õFhXN­ ê¼@«¯Ë2Mþ^cš¼1Z x½^ x½– õZr€ÖëÕ€Õ+÷¥| U{5àõZr€ÖëÕ€×kÉRã6µnJÕšäK+GŠsÐK¼ðz5šÌ?O­ y­š¼2¤âe€WÐ{ÂuÖêÕò]‚ý³ß WW/uí=ëÖúºÄõêÕïõ#'/®5ÕÏÞ·7<~!\ëÖB*Ëo|8L}ôD¸Øézë×Å¿·ÊÎÕÓ‡©ûN„Ko}NIª.–W¯„—Ÿº;lŸ9ZÔø?®.ÿ¢XÞ·ã±pê­õ}-S\ðB%ÎR¯^þV±|ßS_ g/.wÚõò]ƒœ=¶)ÞýHÕ© ãRðzeyÐ|t ñ Z x½^ x½– õZr€ÖëÕ€ÕKíÕ€×kÉZ¯W^¯%T½ÕZHù@µæô¼é=Z-0ÌÉ¥õZr€ÖkÉZ¯%h½V ßì"uL“WHi@ãÅ­ !^E]Lq¹=Üuï¾µõe~öúúeCxç¿ ç¯áúoyå|˜9è+Kßí¾»X~îþ†»ŸYˆF¹\~;œ9rG¸óÏž/êòêòöp×cÿÐë½~®¨qeˆ¶²0¦§Ë«ÚB¯ƒ¥–å¯÷|à¿ Ð~.»/ìŸ{µ[kæ —Wúw=ñÏáWå¥÷uÍðî‡×©É:&®½ðzi2¤a‰k¯¼^¯¼^KÐz-9@ëõjÀãÅmÊRµW^¯%h½^ x½–PõÊZˆ—µ&ùÑêJ Ü\Ì-F{î¹çŠ[ÍÛç1M›‹ûU¹ËçÂß}¾²²Z\é=ûÂçŠú©—¯Ó1VõÏá‰=÷‡¹Ÿ®7¸¸‚>ÜôëM1ܽukØþÈÉðfgÛÕuck¸2^N™yìïΆ‹Ëï‡å‹å4–í½ÞŽÚÙérêL th ëýmÕm6Õ%×Ãå“Zj\.ÖUÌA¿þ“pìƒ{Ógß)Ê­BUkªc†Õp+#FãDSΰ¹ò7Š!óÑÁ°¹BS“û6'-7f£¶‰åjÓTÇX´IË×65¹¸OFM9)/ɇ֎Rꄱž\Z¯%h½– õZr€Ö«Ñ⋦žôy­š¼ÕZHù�ê Ç>¦ŸW;M$êÔhœÓ¥§^-¯ ïøÐ‡Â»?“\·^+?ºçè+á·Ý{P¯¾~<¸å©·Ë+ÿe#ÿÁðð©¼7Še™âÖµÔ6Kêër›·¨r»û¶;Åôêe=·ÿŽpäLú—jSðzµ–Së‚:/ÐjÀë—åG‹0Ь­h5àõz5àõZr€ÖkÉZ¯WV¯Ü—òTíÕ€×kÉZ¯W^¯%HÛÔº) Tk’/­)ÎA/ñjÀëµjšï[öj É+Cj!^ƒë÷ÂëÇ·hÐ{‡›ƒŽm¢Þqßÿ?Yî.ßùùðÃ«× 5^7•ƒå‹'·>rª¸Z.š4èëë–Eýn÷,/Ì~híC¢ëëö.KåbŠËÔ'Ãü›ï÷i1¨›ç ¿Sü;±,ï€R»–~±Æ·NªÞHm¯Ò€×;H‹ç£Ò¯¼^¯¼^KÐz-9@ëõjÀêGŒ¥öjÀëµä�­×«¯×’ªÞj-¤| ZszÞô­1S=Yb¬'Z sK†Õ´±hÚ\Üßœ».Ÿý‡ð·'ÏuÑÿ­\çO–S?Žž»Š{ú€6Ì—¥—þ8Üy燗–ºßŸ²úN8?WNõ8¿\6éUª9Â꯾Sh<ÿ£pyeµóÏÿ—¢ÞQ™â²rñïÃÁµ¯Y|/\þÁÃ}S˜{cq.ìßrK¡É•yP]w· ûÚí÷}.¼pöÅÜú°r%,~çÿ Ï.¿E¤ü2ÎÕðÛsåô¢g~ðï£Ñù÷_¹PÔÜõèÚ;øèg÷í.>$ ]¾ø½ð¾÷ý–‰‹å¿¾fñø¡°mËö¢–$ Ô3¬†[1ï šr62WÆ ùè1­©ŽÉ}›“–³QÛÄrµŽiªc,Ú8s/-œósŸGº'ìܺ>%0^wuùbX8=æþâ‰ðÐÝåEš¡§®¼ÎÍÏ®ýFÅ–-å´Å:Ô¹enï1¬Ò”“ò’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½Z-~ë|qq±¸OëZ 4y«µ°¾¼®,üÏ¢Þ¹ö?[‹Û¹³ovÔ’õõ˯?¬Ë—ê"Ξ¯Yܦg˯sâePÕV–þ9=¸'lí,£Æ‡D/týõuß+~¨u1¦?Rz»*(×ýmqUËÇ_“/`Lÿ@\Ë+o†³sŸ‰¾fqKغó¾âöÜåÞÜóÇêù¥}‡ž ÏúQ¸Ôù? F#¿²Tέ_ûšÅ­åÏ×ÿïׯ/¬Êõ@Ù £–oÅëzI\o„†åÔº Î ´ðzë4Í|ô:/HiÀëõjÀëµä�­×’´^¯¬^¹/å©Ú«¯W•sý\8ö‘…‡|¾¨g¦ú¿î þÈ}…#1W,OMÏ®5èñºƒ|1R¯.ÿ8ÌÜ]Ô/œùiñ9¨”7¥º·©uS¨Ö$_Z9RœâRâÕ€×kÕ¾ð…/ôÜÆ4y…”š¼2¤âe`©½ðz½pyWËo¯¹åþùðft>&U{5àõZr€ÖkÕ†ñ ) x½)-~QýéOº¸OëMiÀëõjÀëµä�­×’´^¯¬ÞxÄ”µ|X½|×j/^loû½0÷rùõ¨¸p°u_÷‹Vß Ïníês1¶î)n—:Í).šÈÇ˱þ;Õßè¿€R×) ¬WŠÕ§ÖŲ| ôªS__ 玖JÊÿ{Ú›Ò@“·Z )¨Öœâ’7½G«†9¹´^KÐz-9@ëµä�­×£Ås[Ûº"‡[B¼ ,µW^¯W^/–OÝ9õ*W¦Kš¼1Z x½– õZ5RÇĵW^¯&³»v•ïJh½) x½^ x½– õZr€ÖëՀNj۔M-ê]‡¿^[þpî™{‹úàÜÃòû‹Å2¾^õÆêáô_þ÷¢Æ;dò¡òûnž|cý1gõíðÃÙ{ÂŽGNvëwÂOž ;–_)+ÄË@«Úºû‰¿õ*^W–‡ýšÚÕ·Êÿ[ï½uâ:¥&¯ ©…xXk’­¡Ô 2ÌÉÅÜ’Ü&æ¤K]‡57¦Î‹ûG‘ rÈÙÈm®^9þé«ß ¯_K¿Õ ,¹1“ž#neÄh¼ƒhÊEnüù™žãÍoLÛœ´Ü˜Ú&–«u êø«\QËÕeùÕ`LÝCYõÆz¶RþÞľ'¾þù¹Ãö»¿8À Ö§µ8öJÏçN„ª/Yw¯ šƒ3Ü×Ô–¯·ÞùT8ñ?ÿ0Ü5©•[Ãô]þþBù _u¤sÿ{qŸŒ:šrR^’­¥Ô c=¹´^KÐz-9@ëµä�­×ªÉ“ý'>ñ ³WHi É[­…”¤j¯¼^¯¼^KÐz-9@ëµä�­W«a9µ.¨ó­¼^MŽLK“«éBʛҀ×ëÕ€×kÉZ¯%h½^ X½rß@_ÔÔ¢®Nÿˆð×N=Ü·­X®Ž¸×E½º¼ž¹û¶°eû§‹:f½.·¹mËíæ_cƒêøÿ×X^үŠªË©<·†}}¹¨‹ßà8þ_‹åÓo¯Y@ì”SWã6µnJÕšäK+GŠsÐK¼ðz=Z<¯oŸ /Hi É+Cj!^–Ú«¯×«¯×’´^KÐz-9@ëµjÃx…”¼^mþnåEuu>:~ç`~¾ü@³æà UB^¯%h½– õz5`õÆ#f­®ÌÛîþQ^!Çò›§ ;ö=þîÌO»¾¹éÇŲ\a¥v=,ÿä„ûvÜYÔº4pÞy¼ ´XWþ/B\cy¸9è7ÂÕÓ‡©=å÷,?°»øÍ ©…Á9ë¤j,Wk!åÕšsÐó¦÷h™êÉc=Ñb˜[²‘ÛL}X4ÆšSçÅý£È9äÆŒk›ÌíG4ÜʈÑxÑ”3ÊÜx>:r4ãhÖQËÀý1¸/¦©ŽÙ(mTÛœ´Ü˜Ú&–«u êê´þ)./„ÿu¨<¯ºŸ?/X]>ž½o[eŠËjxÿµEýìO~ÞódxdGù[±7fÝÛOUKÖc™âRÖ½õÓÅÊ­±ú¯Eƒ^·M É­‚ûdÔÑ”“ò’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½ OìXÆhãâÕZHù@ªöjÀëõjÀëµä�­×’´^KÐzµ–Së‚:/ÐjÀëµäÄóÑë†/K= x½– õZr€ÖëÕ€Õ+÷ ô©¦¸üïbyê¾/†à«VW.õÃûî{︭ô‰øZÕ‹ú‰—~Ù½¯ü0éÁ݇ÂÜùwŠ&uÉÕbyë–íksÐ×µšoÄ :þ¿ÄÄ5–ÓS\~“aõJxù©a÷#å—âûÐO<^,sŠ ñÒʑ◯¼^¯Pc ú°hÊ›Ò@“W†ÔB¼ ,µW^¯W^¯%h½– õZr€ÖkÕ†ñ ) x½–€ú?ý§ÿTܸÂ.ëÅXêQhÀëµä�­×’´^¯¬ÞxĬÕEƒ^êøZÄ¢A﮿MqùøßüSøê^Ó¦ïz<<¿ð¯År1¦ï 3÷F_§5ùÕ¯YŒã².ç £âeP[Gÿþþ±þUñÿ«oôý"²â7Vʯµ-¢ü |HTÞ%ˆ×íñu°ÔX®ÖBʪ5§¸äMïÑjaN.­×’´^KÐz-9@ëõj�5~ò·ò¹ò¦4 ñâ–ƒcÜCν˜¸öjÀëµä�ÔÚc©G¡¯×’´^KÐz½ðxq›òTíÕ€×kÉZ¯W^¯%T½2¤âe`­I~´z„R'È0'sK6z›ñ‡Eñ!³Axr…:/îçàhcÄTë‹6Î\íwÅ�꘦:f£´QmsÒrc6j›X®Ö1MuŒE›´Ü˜qmS“‹ûdÔÑ”“ò’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½^  Æxî¹çÖj!åMiÀëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^MŽeàÃß⋱ԣЀ×kÉZ¯%h½^ X½r_ÊRµW^¯%h½^ x½– 5nSë¦4P­I¾´r¤8½Ä«¯×«Ô¯¼òJq›ûw+¯×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^MŽu4ýÆHգЀ×kÉZ¯%h½^ X½ñˆ±Ô^ x½– õz5àõZr@Õ[­…”TkÎAϛޣ5fª'KŒõD‹anÉ(·‰¿-. ›[ÇfÎ×6™Ûϸ¶9ê\i¶­C¾ Ë1MuÌFi£Úæ¤åÆlÔ6±\­cšê‹6i¹1ãÚ¦&÷ɨ£)'å%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½@-?pòÔSO©½) x½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö[§i¾R±nÈ»c1–zðz-9@ëµä�­×««WîKù@ªöjÀëµä�­×«¯×’¤ÆmjÝ”ª5É—Vާ¸”x5àõz5 5> Še ù°hʛҀ×kÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½šœêiGŒ¥…¼^KÐz-9@ëõjÀêGŒ¥öjÀëµä�­×«¯×’ªÞj-¤| ZsŠKÞô­æäÒz-9@ëµä�­×’´^¯ÕòË¢hâ¦@~Ë1–Ú«¯×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^KŽõj:þ~Ô1©zðz-9@ëµä�­×«·)HÕ^ x½– õz5àõZr@Õ+Cj!^ÖšäG«G(u‚ sr1·d”Û|ôÑG‹ÛºQýùp€ûcšê‹6i¹1ãÚ&sû×6Ç‹¿EùPwÓ�r+4Õ1¥j›“–³QÛÄrµŽiªc,Ú¤åÆŒk›š\Ü'£Ž¦œ”—äCkG)uÂXO.­×’´^KÐz-9@ëõjñÔ–¦!óÔ…xXj¯¼^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9�µüM6K= x½– õZr€ÖëÕ€Õ+÷¥| UÇ˫˗ŠúÊJù»™–×^ x½^ x½– 5nSë¦4P­I¾´r¤8½Ä«¯×«É¯ˆZ†/KíÕ€×kÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%T½2-mÐÀß¹€:&UB^¯%h½– õz5`õÆ#ÆRÒ¦£ŸÑ±Ô^ x½^ x½–PõVk!åÕšsÐó¦÷hµÀ0'—ÖkÉZ¯%h½– õz4|õZê ½n,..~,ÇXj¯¼^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9 Î‹¿OÔÕofXŽIգЀ×kÉZ¯%h½^ x¼¸Mù@ª¤­,Ì º%ĵW^/–¿}ôa×Vì“©²^zoM‹IÖ«W‹úÁ}ÛŠ[Œ»û‡paùz!Çëöø:Xj,ËZˆ—µ&ùÑêJ Ü\Ì-ÙÍûÊÒ Çàþ˜¦:Æ¢MZn̸¶ÉÜ~Ƶ͜rñÕŠ(j YŽiªc6JÕ6'-7f£¶‰åjÓTÇX´ürß ÿvüþpë½^z½l°_šýh¸õ£Ï‡{¿œª#¤·q½¨·mýP82ÿãbšÏÊå 'ûPØþÀ }Þ˜tn pŸŒ:šrR^’­¥Ô c=¹´^KÐz-9@ëµä�­×ªy†\¡âe`©½ðz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä€&/¾ñE>H*_ R9 ®G¡¯×’´^KÐz½°zå¾AÚüÌtçv{¸÷¡îÅ™m¿æ^þVxîÁõÖ}O…o_.§²,Ìî-×éLq‘œVÂÒ|yUão^új˜}p˜îÖ»|>œ7^aNiÀê=öÁ;Óg½®½ûƒ0»ûw}1¨uæóáþÙ3áWݺàêébynñZYwˆ½ƒrbêjܦÖMi Z“|iåHqz‰W^¯Góþø‰/KíÕ€×kÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½XÆIùË_®Õ1MޘЀ×kÉZ¯%h½^ X½ñˆY«WÂìô-EýÚò„sÏܶn¹½¨—ß_ ÇïÛQ,ß(×.@=“˜ƒ>Ó[w=Žž<WÔ+—¿fï¾=|ôÄë=ëò ) ˜½KóafêñŠv¥¨ï;ñó€kè}©ËOÞvïZƒ^Õb,5–«µòjÍ9èyÓ{´Z`˜“Këµä�­×’´^KÐz½@mž'y×^ x½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õz5àñâ6åCƒŽzva¹[ÎõBqq|¹Xžž]åµò®ÍnÝôBûh§Q}7Ò—×®¾÷ätî_<~(lÛ²½¨ß-¥ÈWb©ë´ëçŽËåÿ«¤¨;ÿ.üÿê|BªÆòù¹Ca÷ý'Âkï¯öi1–Ë2¤âe`­I~´z„R'È0'sK6z›–+部ÞßTÇX´IË×6™Ûϸ¶ÉÜ~ƵÍIËÙ¨mb¹ZÇ žÞ»Ö £žžž]kÐ¥E¹æí6è2ÅTµÞíô7ú%eƒíàñ a}rÈ:½9ÍuL¬l]û‰ÖûÿLÛ\}§Óœÿ^ؾïÃKKïõ­cÊí‚ûdÔÑ”“ò’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½^  Ö YWˆ—¥öjÀëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­×««Wîè+¦¸” :긑E=ð s§ GÝ;½KEqî×ïñvÐjÀê¹å©·Ëy–\ §ßQÔò1ÑA¾˜žzå—E½ëà—Šùõ©u“9êjܦÖMi Z“|iåHqz‰W^¯WRk¯¤ ñ2°Ô^ x½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õz5`õÆ#f­î6èRKƒ^ÖýSS�êôôõ«ëqNµÑäR0{¯ÿ¤øhöîŠzvájQôE¬×«aeé[E}÷S/…¥•rZË¥Ÿ—FôU‹BÝ2hª9=ozÖ˜©ž,1Ö-†¹%£ÜfS“>ˆêýMuŒE›´Ü˜qms”¹£1MuL¬U³å´7Ååj8wôžB;p앵9è1½9ÍuL¯v-\<q¨çkðÌsaqÀ×,ÊÜxü»zsÊi,·ïœøIXkå…Î ªZS pŸŒ:šrR^’­¥Ô c=¹´^KÐz-9@ëµä�­×«¸N5é@nA¼ ,µW^¯%h½^ x½– õÖi¸åààØø!ÄË UÒä¾¾¢±Ä:eS]þQ§ž)§ª”WÐñUŒå·³àvИ_ºÖéÍËŒrL‡™ùKE~¼Þ–µ«ó lÜ·m¹}múºVóïHÕµ•7Š*Âò–-[ÃôÝNWæ—ËòáÕòÛlâ¹ñ¨Ë¯¦ŒþOÑ:�µ/mÛÔº) Tk’/­)Nq)ñjÀëõj`P=¨Iÿô§?]Ü ñ2°Ô^ x½– õz5àõZr€ÖÛ¤ ã±Ô£Ð€×kÉZ¯%h½– õz5àõZr€ÖkÉZo“&Cê˜T=H‹GŒ¥öjÀëµä�­×«¯×’ªÞj-¤| ZsŠKÞô­æäÒz-9@ëµä�­×’´^¯š¼Õ!ÄËÀR{5àõZr€ÖëÕ€×kÉZ¯&§ný”7¥¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^†[1©ºNÃmÊRµW^¯%h½^ x½–PõÊZˆ—µ&ùÑêJ Ü\Ì-ç6ã+鸂>O®`Ñ&-7f\Ûe® ©ë°hMuLîÛdn?ãÚæ¤å ¸¿iÚÜjVSNµŽ±h“–3®mjrqŸŒ:šrR^’­¥Ô c=¹´^KÐz-9@ëµä�­×«&/†4èU-ÆR{5àõZr€ÖëÕ€×kÉZo†[1qíÕ€×ëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZo“¦]4­+÷¥| U{5àõZr€ÖëÕ€×kÉRã6µnJÕšäK+GŠsÐK¼ðz½Ðx¿ð…/pzÄFhÀëµä�­·IÆc©G¡¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M†Ô1©zKíÕ€×kÉZ¯W^¯%T½ÕZHù@µæô¼é=Zc¦z²ÄXO´æ–´µÍÅÅÅnÕ˰¹uLzn̸¶9Ê\R×aÑšê˜Ü·ÉÜ~ƵÍIËpÓ6´¹Õ¬¦œjcÑ&-7f\ÛÔäâ>u4夼$Z;J©Æzri½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZo†[1qíÕ€×ëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZo“¦]4­+÷¥| U{5àõZr€ÖëÕ€×kÉRã6µnJÕšäK+GŠS\J¼ðz½ðz-9@ëµä�­×’´^¯¼^KÐz›´a¼1–zðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒdH“ªiñˆ±Ô^ x½– õz5àõZr@Õ[­…”TkNqɛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö«É©[?åMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLª®Óp›òTíÕ€×kÉZ¯W^¯%T½2¤âe`­I~´z„R'ˆæäâààí¿µ:ªÚ0Þ˜ªÖTÇä¾Mæö3®mNZ®€û›¶¡Í­f5åTë‹6i¹1ãÚ¦&÷ɨ£)'å%ùÐÚQJ0Ú“ ·£1q]§‰¯N^ x½^ x½– õZr€ÖkÉZ¯W^¯%h½– õ6iÚuAÓºr_ÊRµW^¯%h½^ x½– 5nSë¦4P­I¾´r¤6j:–µÞ”¼^KÐz-9 Î‹å: h5àõZr€Ökɨå¾Ôº) x½^ x½– 5nSë6iÃxc,õ(4àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖÛ¤É:&UÒ86Çê–ASÍ9èyÓ{´Z`˜“ µÜ—Z7¥¯×’´^KhòÊ}V_Œ×kÉZ¯% ŽGL\§4àõz5àõZr@Õ[­…”x½) x½^ x½– õZr€ÖkÉZ¯W^¯%h½– õj4ÜʈIÕun9&ȱâe`­I~´z„R'ˆæä’QeÐ} œ‹7&×\Uš|1MuLι¸mZ7¦i]‹7&‡mjj¹¯ªÅÔù<Þ˜ªÖTÇä¾Mæö3®mNZ®€û›¶áÉÌ-Éa›9ä’|hí(¥NíÉ…[Bݺ ¥¯×’´^KäÅ­ !^Z x½– õZs´Þ”¼^¯¼^K@˜¸®ÓÄW§¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4íº@»®%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+GŠsÐK¼Ðz±\§­¼^KÐz-9�µÜ—Z7¥¯×«¯×’¤ÆmjÝ&moŒ¥…¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4RǤj¯¼^KÐz-9@ëõjÀëµä�­×’8=ozV sr¡–ûRë¦4àõZr€ÖkÉM^¹Ïê‹ñz-9@ëµä�Ôñˆ‰ë”¼^¯¼^K¨z«µò¯7¥¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^†[1©Ú«¯×’´^KÐz½ðz-9@ëµä€jMò£Õ#”:A4'—Œ*ƒîåÄX¼1¹æÊ¨Òä‹iªcrÎÅmÓº1MëZ¼19lSSË}U-¦ÎçñÆTµ¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂhO.ÜÊêÖ) x½– õZrÀ /neñ2ÐjÀëµä�­×š£õ¦4àõz5àõZr�êxÄÄu&¾:x5àõz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖÛ¤i×Úu-9@ëµä�­×’´^¯¼^KÐz-9$oZ9Rœƒ^âÕ€Ö‹å: h5àõZr€Ökɨå¾Ôº) x½^ x½– 5nSë6iÃxc,õ(4àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖÛ¤É:&U{5àõZr€ÖkÉZ¯W^¯%h½–À9èyÓ{´ÆLõd‰Ñœh2ª ºO”cñÆèrßoÎ?öý—ð^ywÁð¹ƒ&£J“/¦©ŽQk«‹úè¹åî”Û¡®ÆmÓº1MëZ¼1®mvö×üÛøÜ.ƒj¹¯ªÅÔù<Þ˜^ízQ}p˜îÜnÙ²µ¨ÿþÂ;aµ»FL}îj¡ÍÏ~2ì›.3¶L$<ùõŸ…åNPÕ×TÇè´åðÓ¹™¢ž™¿Ô½Ï’»–æ÷õéÙâ6¦ZÇX´µúÚù0wß¶¢ž_Z)ï«Ð”{iát˜Ÿû|8òÐ=açÖ½av¡üû¯Ýf—¦Ü:&=WÀýMÛðäæ–ä°ÍrI>´v”R'Œöä­ ¡n]Ҁ׫Îùí+áèž»ÔÞ”4^ÜÊâe Õ€×Û«•ÒžÝÞ-[,½W¯êºZoJ^¯O[ ¿=÷LQËþ:oZƒêxÄÄu&¾:XµÃÛn ûŽÌ‡óWÞ+ês'û¶ÿ~˜¿XÖ ¯€å·ÿ÷Ÿ‡O;Î^\.ê‹gŽ…ƒÛ?œôT­ÓV;ýí_õ½wìXkÐuÞÔEƒ>3ŸôTíÓ–Ãùcå Ä;¶ZkÐuÞîòõsáØG>>òù¢ž™*ô”¤j¯¼^KÐz›4íº@»®%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+Gª­)./?ûÈú•³Î¸÷÷>vO6¿^»¯oLï/n—¯‡•…Ùî¼êØö=øt8¹øNQǬ×7ÂÕ3TÔ¯Ý(ïÁr|E µ÷ŠR\W—ë4P«­¼YÔkûkë®âVö×ÂìÞòþêèì¯g¿^, ñ2@}æÈþpÏñŸuöJY¯._ §çÃÜ_<QÔ[§gÃB§äRTË}©u{µòÅijÿNϱÿ½{;û£Ó(-­,¬Ý×;¶†é}Ÿ,–—W/…ù™éîýÇ.ü¦HFn¼æöOuµÁOÿQÔ²¿�j9w°\w5²7G_ã6µn“6Œ7¦¨u&ÌÞÿùpæWå•ô’+áôá=E¸®×Þ.–?xì'áz÷žTˆk­¶º\ž'³?|%¼0³³hе^PÖëWЗʻ R9 ®}Úõ°|î‹EýßþC˜éž§:oÖù»™.Cb,µW^¯%h½Mš ©cRµW^¯%h½– õz5àõZr€ÖkÉœâ’7½G«†9¹PË}©u±|þØGÃö™£áÔ…ËE½|ñ{á…§>¶užldÝ¢ïy«¸¼:÷7ïÛï?^{¿lÖðIJ~åg5¬\9¾ù7õ‰×Þ-­Ös:t§t<xòŽ£«éВܧ÷•ÿÙ_+Ý)²¿äÉyÐþºráÅÒí¯Ô«o·ûo}8œ|kýIþú¹gÃGî{¨¨¿<;¦Þ²Oi`P˜¸¤»ûƒaæè7Â…îÕÛ‹g¿žºïÑ•Ìåµ,koü¯”çÙÃ{÷„ûOü¬Xž¾5ìÜù°{ö]ßú•ñ·¤ßî—ý%µœ;XžûòŸ <wåĤj,Wk!å^oJ½uùbxÿÜ«k/òbâºIC£¯ÉUoL­¶Z¾Ø?û½pµx±¶Sïí°^—/Å Ãî=©×^mõê÷Šzö‡o‡Õ¥ù¢A×zkµî [9çA*ĵW^¯%h½ ·2bRµW^¯%h½– õz5àõZr€ÖkÉÕšäG«G(u‚hN.UúîûÍ™päÖß Ç_ï};<tžlPËUK4œ¨q嶇wfww¯öt¯üÄO, ðÍ~(l?òípµ[¯S6ªwFS:bšrcšêh2ª4ùdI]Pyr–=Þ_…ÖÝ_GÎüG÷Þ’Ò÷›páØ½Q“ºNcn u9‚Ô¸mZ7ÚoÎ|6Üzàxx½gŽrõJfÙ OÏ.¬5è庫áÝ…?»·ÿQ8óö÷;Ç÷Žðߎ=Uhg‹óàŽïî°ÿØ_‡?éyÑ·jÙ_xéWÕ j®FÆ ÊTË}U-¦ÎçñÆTµÞº|Áxp÷§z^ ÚÜÕå_„³‡©2Ÿ,rÒÛÔçöRþ[ï<ðWáü5óòÊùPsÐoÿP¸w_9|Ë–©°ëà3áÛK•ǶúÜ^z´Õ+E}àØÃ5Ô•ÇÌ*êÜÊã]Õ×TÇX´IËpÓ6<¹€¹%9l3‡\’­¥Ô £=¹p+C¸îå“áÐÖߨ-þègáÊJÙ4£ŽÃõõ¯Ë·=y6¼7 *—WÃ{Æò·• X ê³O~(˜»ÞïÖÂÚrmî:–Z–q+Cˆ—AŸÖÝ_}/hVÊ'kÙ_Õ4ëë^í4žwµ|vM{÷åðä ¡>·$®S¨®«õ–Ë×;»â¡°µÓ ÷®[¾àúÑâ•nC^6ÖÒ ÷¬ûÞ‹úÉ3/®ßã÷ÜŸ¾ÒÙMß.ê¯}w`ƒ]ÔÝý5·˜h ;ç–ë®FÖúº ªã×ušøêtàÕÖšóíw…'^úeßþNy{´n£‰©HÛfÊé1–ºI{bÏýaî§ë(® {ç /Ÿûûð¹£_.–ñΖ¼ˆúå_É${®Ð«•ûzÏ}~Z¼¸(u™â"µÐëmÖ¤AOù@ªöjÀëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤Æ>}µœO=}÷‘pü¥ï‡ÅîT…Ôñ•ÛXDz|8Kæ¼ò3àêêAS:@7•ÛÁRW—ë40Pëì¯S–ó{eAÞAû«óŸ)jy+~]÷ؔó²ß*Ÿï z½©ÜÞ:¥AµÜ—Z7^^}ëE}÷‘çÂKß[,^œ òÊôAZÑ8Q,Ï.¼.žx L=øÕ¢¾íþùðæûu v¹¿n}ðd·^'® o·Ù‘ZHù@]ÛÔºMÚ0Þ˜Þºü»½{ס0w¾ü­w°VNOÃòö}O‡.—³ÙS9 ®›4y§¥nT+„x4iÇîÜS¾èëÖ1M^a¶þÙ‰ÁC3Õf 6à‚°Ô^ x½– õ6i2¤ŽIÕ^ x½– õZr€ÖëÕ€×kÉZ¯%pzÞô­1S=Yb4'šŒ*ƒî[]~5œœ-›ÃràC|Ÿ*–å)²zåvõ) —»O,q3 ¡AŸÙúP8y¹¼òTònXœ+¯÷¿_R¬›Êhªc É¨Òä“ýµþ¡Úr=óí7Ö¼õSQÊýµõÐÉp¹¼»�ÚÜ…'Ïþz­ŽiÎL]Ž 5n›Ö)µëayñëaöÁòÃÂåÀ‡‚ã«®uS\�æï‡þ× =W œÚöÞ±»üLBtì×}Þ¿PÔ²¿@.Ô4;1UMSË}U-¦ÎçñÆT5ÔßžýxØu÷Ÿ†ÓÝé˗·_Z.õó6ß;ž¼íwn3ƜۥWfŠK/kÚ꿆ã>Ø·îй]zjNq)W®€û›¶áÉÌ-Éa›9ä’|hí(¥NíÉ…[Bݺ`}WÎ~ZÔ÷m/§�Ôqc¸¾~ù!¯Ûž ×4Cåòj9_ùö£=æc£–m€~o‡ÚÜu,µ,ãV†/ƒf­Ü_g^ø\QËÿ¥~*ÊÛáÌ‘ò |ü͘½çÀ\X¬ùð¨PŸ[×) T×Õzëµ÷•Åïõöîÿ%9Åå7gŠúè·¢ã‹o Ù¶L}º¬6Øå>’ýzõ¨îø±¿¸‹×­õuTÇ#&®ë4ñÕé@¯•ûáÙƒ{ÂÞGN„ ËòâwýEQÕ{mñùppÛ-aúÀ³}Úå…ÿ/|ýÌÃ¥n® Ÿ:z±|®æ+,Aª¶jMS\ Û¶l/–ãõ¨Ï~ùùp²óï/}ø»üIç…ty@ûï÷j�ujŠKjßÇ –}“ª±,ûëÀ±Wú´5®•/v·L,;‡O ÎMí{a/&U£i×Úu-9@ëµä�­×’´^¯¼^KÐz-9$oZ9Rãâ2à6:ÚêÏÉûö„‡Oý{©GWnã,,?¶}_y%³Ò ­­·úV8ýXyký½œêq+¦1tŸ;×Öï/׿v±ÔÕå: ôkƒ€Zö—Ôƒö×êÛ/uÏ•òÕ7ÂÉï÷Ï—ßf3¨” âZ“ƒZîK­»¶<°q.õÕK'Â}·üA8õvÙè Þg¥¶}ÇçÂÙ«å µòø®v™*êâh×4ز¿pê Ž‰ëÂÛmv¤R>PWã6µn“6Œ7uÓ4ù»Ær¹oË&õb4wºÓ¥…Kgž OŠß )›±³Kë?V®»NªÖke#ZýS\–‹&Ë_(?˜Ù¡Ð:1 Ï—/’·vn­ÿ~¯&çhuôNqIíûÅßSF9ú¿º¤êr¹Ü_Û¶Ü^Ô=û+õñƒu¶ Çë^$ö}—Á¾uRõ0š ©cRµW^¯%h½– õz5àõZr€ÖkÉœâ’7½G«†9¹PË}õë–Æ[÷>ŽüîÚüóõop(¿Hƒ¾æí~(ò©ûnÛýF1ouòŠª|PëT÷«ð�ê¹û׾ͤ\¿$^¨7êŠR j¹Oç[A#û  –ýuréý¢´¿ÏüCQÇû OÜï/Î…;ÊïT÷åv‰kMN êxÄÄuÖmJö>üßÃÉïütmþùòųáïûPØþÉì®_}½C³mOxôTùˆT]Õd¹z£g]Põ–Oÿ¹“òTåj-¤|ÀëMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLªöjÀëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NÍÉ%£Jï}eó4õñÇßôÌ#Æ×“•MàjÔ`õ üðÎÑo†×ºo‰×ýPnO½vµ“U‚ºøŠ½;Ÿ Lé(Øà+JUÖ³úש÷•Mžì¯õÿo¹¿äǘj÷WgÈþZ§ü:Ahøµ ÓZ޵ïLU««‹¬†uc ÍNïÿÌgÃk_k×[÷„ƒòcL‰cˆ9ûGOýk凊*Wä{üåÕ;Ù_wûIïºÖjŹƒûc4µÜWÕbê|oLUkªcrß&sû×6'-WÀýMÛðäæ–ä°ÍrI>´v”R'Œöä­ ¡n]Ò€×;P[ý?áÔ#û§tx5 ñâV†/­<ÞÕ·OËóo®·ç©×^ T×ÕzSðz5ö×#·•hŽÑx­Õñˆ‰ë:M|u:ðjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤Úú©ÿKíÑn¼v<ܳã3./Hi@ëÅr´ðyË)E;{)¼Ý}{!•âÚ«AµÜ—Z7¥¯W§½^;>SÔ²¿€Î[¢Õ@]ÛÔºMÚ0ÞK= x½– õZr€ÖkÉZ¯W^¯%h½– õ6i2¤ŽIÕ^ x½– õZr€ÖëÕ€×kÉZ¯%pzÞô­æäB-÷¥ÖMiÀë­×VÃÊåsE]7¥£Þ›Ö€Õ+÷Y}1^/–/Ÿ;¾óóò£³©uAÕ£ÕÀ :1qҀ׫×Ê4²¿€Þ«×@“·Z )ðzSðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëÕh¸•“ª½ðz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©Dsrɨ2è>aPNŒÅ“k®Œ*M¾˜¦:&ç\Ü6­Ó´®Å“Ã65µÜWÕbê|oLUkªcrß&sû×6'-WÀýMÛðäæ–ä°ÍrI>´v”R'Œöä­ ¡n]Ò€×kÉZ¯% òâV†/­¼^KÐz­9ZoJ^¯W^¯% ŽGL\×iâ«ÓW^¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½Mšv] ]×’´^KÐz-9@ëõjÀëµä�­×’Cò¦•#u3ÌA¼^K¨ób¹NZ x½– õZr�j¹/µnJ^¯W^¯%HÛÔºMÚ0ÞK= x½– õZr€ÖkÉZ¯W^¯%h½– õ6i2¤ŽIÕ^ x½– õZr€ÖëÕ€×kÉZ¯%pzÞô­æäB-÷¥ÖMiÀëµä�­×’š¼rŸÕãõZr€Ökɨã×) x½^ x½–PõVk!å^oJ^¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½ ·2bRµW^¯%h½– õz5àõZr€ÖkÉÕšäG«G(u‚hN.UÝ' ʉ±xcrÍ•Q¥ÉÓTÇ䜋ۦucšÖµxcrئ¦–ûªZLÏã©jMuLîÛdn?ãÚæ¤å ¸¿iž\ÀÜ’¶™C.ɇ֎Rê„Ñž\¸•!Ô­ Rðz-9@ëµä€A^ÜÊâe Õ€×kÉZ¯5GëMiÀëõjÀëµä�Ôñˆ‰ë:M|u:ðjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8½Ä«­ËuÐjÀëµä�­×’PË}©uSðz½ðz-9@jܦÖmÒ†ñÆ”õõ°üÚ7Ãѵ_Þ¦ïúÃð÷Ê_µ{KÖ–—æÃL‘Q{ÃìÂr±ÊÚº]RµUûéÜL¸eËt˜™¿dö–”¿.|h×Tq»eËöâv1úåÞz¯_¨çîÃ/êöÿÊqÊ»¶¼òV87ÿçE]Žòßÿêpì©Ú«¯×’´Þ&M†Ô1©Ú«¯×’´^KÐz½ðz-9@ëµä�ÎAϛޣ5fª'KŒæD“QeÐ} œ‹7&çÜAëh|BS“s.n›ÖiZ×âÉa›šZî«j1u>7¦GûÕKE½ïÈ|8å½¢Ñ+êí¿æ/vê M¹3ݳJÕ×TÇ4k«áÚù¿ wï¾§¨Ñ  –ÜÕ¥ ŸÜ~W82ÿãB[~ýÅ0{ïíaÿ±²Ž±äÆ ÎYç},ì¾÷ÃE=hÿ¦ÜÏ}j6¼pöayµó¢ëâ·Ã±ƒ{ÂGT³Íušrë˜ô\÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ú“ ·£1q]§‰¯NVmöþχ3¿*¯´–ú•púðž°îÕF¯P,WÐmW€AªÖh«Ë á™÷õ 3;×tW@ýö©?·8i«á7g>[ÔÖ/Dô v­ÓLŸûb8°ÿóE¿Àiö– Öìÿv×^ x½– õ6iÚuv]KÐz-9@ëµä�­×«¯×’´^KÉ›VŽÔFOqáàà͈‰ë&moL}ýN8ûä¾¢¾Ñ½'å][î6èµ.–Z¥­¾~8{oQ_]½æ» ºÊÛ¥¬o„«§/–__-ïG“‹úÖ[kr{K<ÚêÕï…Ùýå¿Õñ§^»Q,OíŸ ‹Ýƒ˜ÊqíÕ€×kÉZo“&Cê˜TíÕ€×kÉZ¯%h½^ x½– õZr�§¸äMïÑjaN.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëÕäÔ­Ÿò¦4°^_Ëç¿TÔ'^{·¸'åíÑ: &ê»îݦ;·XÞºëáè·ß¸&œÊq­Ó®‡_½ügE}þºê²A×yKªÚc;>;ñ/áòÊõ¢ž½wg80w!¼ßÕcªÞ•¶z%¼üÔGŠújã œZmu¹X~lßžpÿ‰Ÿ5þÛA\{5àõZr€Ö«Ñp+#&U{5àõZr€ÖkÉZ¯W^¯%h½–P­I~´z„R'È0'sKrß&sû×6G™+Cê:,Úz½Þœ?ñÒ/‹¦ºJSîß}î™ðüé áÊÊj§OüE8ûÂçÂ}Ûï.´µ Óª9M¹ƒXýÕ?ÚÜOË ¢AG탻aqîcakç~hÅØþépòÍ÷úֵ害®u^\œùã¢þiñâ¢C÷Žwz ^¤Lõ–m÷‡g^~³Ï×TÇX´IËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öiï…¥ÓZÔsçßYk¦uÞ”ö›byêðépµ{O*Äu½VN©½W¢A\Ò–N>¶ï+§¹,¯®†•+çé£÷õ¹w×_^ ò z­|1Q;fÊf]ˆ—A£¶r9\8u´Xžý᯺J:ĵW^¯%h½Mšv] ]×’´^KÐz-9@ëõjÀëµä�­×’Cò¦•#µQsÐÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õ6iÃxcÖê•7·g?^Ô§—ðÍ-×Ãò¥óE=¨Qqݤ½~üw×ôÔº êiÖ†™ƒ^?=fvZ÷5‘^ õ†ÎA/—Ï>yG¸ýè¹ÎM¯ ªÞ­¼^KÐz›4RǤj¯¼^KÐz-9@ëõjÀëµä�­×’8=ozÖ˜©ž,1Ö-†¹%¹o“¹ýŒk›£Ì•!u:m5¬\þ^Qï}äD¸ÐýÎlÔ ³{ÃôìBešKù¡ÉƒÛn Óží¹ª,W´ÿöä™pîÒrÙØ¯\çOΆû¶—_ÓTÇ赦).Ëañø¡°mËöpàØ+í½pqþ÷ÃŽ{gÃ7.\.´bŠÎñÿvßùLeÝú÷Vêä—Ô¾/s¾öõÞ}+è3Cíûr.»ì¯ò ë¬ù®]ÇÞ^ÔÇÎÉû$ÕÜԾ索5Õ1 ÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐzë4Üʈ‰k½–ž&‚·–¯->_4‰Û>ß§]YøŸáɇî ;·J~ôè±b9n9cHÕ:m¹xAz} žâR6‰e3Y|0³K±îê;áÂßÿa±\Ž©°ë`ss×.me!ÌNÇÿöÎ0Å%µïß¿t&Ì=y(ì›ÞZú7hßËþ:xüBŸ¶F§AG½eÛ¡p|±þ†ä¾ï2È“ª‡Ñ´ëíº– õZr€ÖkÉZ¯W^¯%h½–’7­)Nq)ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëmÒ†ñÆXêQhÀëµä�­×’´^KÐz½ðz-9@ëµä�­·I“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€S\ò¦÷hµÀ0'—ÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õjrêÖOySðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëÕh¸•“ª½ðz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©d˜“‹¹%¹o“¹ýŒk›£Ì•!u­©ŽÉ}›Ìíg\Ûœ´\÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐzë4Üʈ‰k¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4íº@»®%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+GŠsÐK¼ðz½ðz-9@ëµä�­×’´^¯¼^KÐz›´a¼1–zðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒdH“ª½ðz-9@ëµä�­×«¯×’´^Kàô¼é=Zc¦z²ÄXO´æ–ä¾Mæö3®mŽ2W†ÔuX´¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½ðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒ´ëíº– õZr€ÖkÉZ¯W^¯%h½–’7­)Nq)ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëmÒ†ñÆXêQhÀëµä�­×’´^KÐz½ðz-9@ëµä�­·I“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€S\ò¦÷hµÀ0'—ÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õjrêÖOySðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëÕh¸•“ª½ðz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©d˜“‹¹%¹o“¹ýŒk›£Ì•!u­©ŽÉ}›Ìíg\Ûœ´\÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐzë4Üʈ‰k¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4íº@»®%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+GŠsÐK¼ðz½ðz-9@ëµä�­×’´^¯¼^KÐz›´a¼1–zðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒdH“ª½ðz-9@ëµä�­×«¯×’´^Kàô¼é=Z-0ÌÉ¥õZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½šœºõSÞ”¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz5neĤj¯¼^KÐz-9@ëõjÀëµä�­×’ª5ÉVPêæäbnIîÛdn?ãÚæ(seH]‡Ekªcrß&sû×6'-WÀýMÛðäæ–ä°ÍrI>´v”R'ŒõäÒz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´Þ: ·2bâÚ«¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M».ЮkÉZ¯%h½– õz5àõZr€ÖkÉ!yÓÊ‘âô¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´Þ&moŒ¥…¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4RǤj¯¼^KÐz-9@ëõjÀëµä�­×’8=ozV sri½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯&§ný”7¥¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^†[1©Ú«¯×’´^KÐz½ðz-9@ëµä€jMò£Õ#”:A†9¹˜[’û6™Ûϸ¶9Ê\R×aÑšê˜Ü·ÉÜ~ƵÍIËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8½Ä«¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆÓ[/õ¶-ÛÃc¯„w;÷ô{WõÅçÃÁm·õ¹wW#mÔÇÞ¶Ll “ª½ðz-9@ëµä�­×«¯×’´^KÐz›4RǤj¯¼^KÐz-9@ëõjÀëµä�­×’8=ozÖ˜©ž,1Ö-†¹%¹o“¹ýŒk›£Ì•!u­¬—ÃâñC½ÓXwêk¥TaµÐРo;ø|X¼V6èÂZîµ eƒ¾íP8¾¸\Ü5x›ëTë‹ÆÜ~ƵÍIËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8ťī¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆc©G¡¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M†Ô1©Ú«¯×’´^KÐz½ðz-9@ëµä�NqɛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö«É©[?åMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLªöjÀëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NaN.æ–ä¾Mæö3®mŽ2W†ÔuX´¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½ðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒ´ëíº– õZr€ÖkÉZ¯W^¯%h½–’7­)ÎA/ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëmÒ†ñÆXêQhÀëµä�­×’´^KÐz½ðz-9@ëµä�­·I“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€sÐó¦÷h™êÉc=Ñb˜[’û6™Ûϸ¶9Ê\R×aÑšê˜Ü·ÉÜ~ƵÍIËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8ťī¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆc©G¡¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M†Ô1©Ú«¯×’´^KÐz½ðz-9@ëµä�NqɛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö«É©[?åMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLªöjÀëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NaN.æ–ä¾Mæö3®mŽ2W†ÔuX´¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®­Ú¥…Óa~îóáÈC÷õìÂrWu殼UÔwM·3ó—ºb:Äu“vùÜWÃìƒûÃtgõôÝO…¯¿v5¬võ˜ª7¦¬¯‡å×NËåØî~â«5ë®×Vm¦3pÛ?·B¼ ú5üÛ¿ŽvöEéߦïúÃbûBH倸öjÀëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8½Ä«¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆSÔ×Ï…cùXxøÈç‹zfjïZƒÞèí/¯.ÿ¸¨wœ /œùiÒRu£¶úVøßŸ;f_ø^Q¯.ÿ<œ9ö‰°ýÎgš½R¯þê;Åò#Ïÿ(\^Y +—ÿ¥¨w<úðV·Ë­ó³¶4ßiÐ…ù¥•H_ ïžý\QŸûm¹ÑÞ.kË¿z)Þv[QŸ¿òÞÚ‹¤}Û?Ì_ìÔR9 ®½ðz-9@ëmÒdH“ª½ðz-9@ëµä�­×«¯×’´^Kàô¼é=Z-0ÌÉ¥õZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½šœºõSÞ”Šze!ÌN— ºÖÛ«]-êÝ}#,uÜ”¤j¯~s¦¨]x·{‡Ö{½X¾åÀñðzÔŒ¯¾}*<2õ»áøëï%¼©Ü„víõpæ«å‹‚uþ£¨÷ϽntªZo‡íWåÿû̯®e©] §ï)²R9 ®½ðz-9@ëÕh¸•“ª½ðz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©d˜“‹¹%¹o“¹ýŒk›£Ì•!um­î6èÃä>8õ@8qñ·Ý{Ö©Ýf—a¶ƒúðÔ½anñÚZ]G¯v#\=ýx˜ê6èkÚêÏÉûö ÜNmPýÈ­Ç_+¯zÇØ·ùN8ûä¾BC³/ ÚfmÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½tÔÞ9è¿9óÙpëO…ÿ³œû<ÞyÐåð¿{ìCaûý'Âk璘àÒVß~)<¶ýƒÅòÅåëaåò+aþ©µv½W¨ß:ùp˜úè‰p1~‘Ð!å¬]Ëç¿T,Ÿxmð» U{5àõZr€ÖÛ¤i×Úu-9@ëµä�­×’´^¯¼^KÐz-9$oZ9Rœƒ^âÕ€×ëÕ€×kÉZ¯%h½– õz5àõZr€ÖÛ¤ ãTË©…”·\^ Kóø`ã­E}öârX]þE±¼kûgÂé·ã©ë¤j½VÎá.Çíaæ™ê´mnÙä?v×öâvËôï·‡wï Ož}§X£Þë×@Q¯¾N|tOxðäjï`m½9â¥_vöNI*ĵW^¯%h½Mš ©cRµW^¯%h½– õz5àõZr€ÖkÉœƒž7½G«†9¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­W“S·~Ê›Ò@Q5½œ"‚ºçëÿŽØ>õïÉ×>í½påÂ7Šzßì÷‚¼ óÖV/žz8œ|+þ gI“WHi@ê‹saÿ-«½ƒµ÷ÂÒé?-–çο³öÎE*ĵW^¯%h½ ·2bRµW^¯%h½– õz5àõZr€ÖkÉÕšäG«G(u‚ sr1·$÷m2·Ÿqms”¹2¤®Ã¢­Õ0ý£·~:œê^-/è6èµÛì2Ì6cP¿wö©pÛíGùÎ?c¨ÜÕ·Ãg?v?ñÏ·S‡E[¯—ù£wõÕî=UsWÞßžýxØu÷Ÿ†ÓK˜Ã~=,_:_h–)F1mÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½šfúµÅçÃÁm·„éÏöiaõJxù©a÷#_.땷¹åUu™âbHÕMÚÂ×þ)œ9w),wçlã úÑ™=áΣ?è]<~(lÛRNaYŸ™ÝŸ{iááo¾3ܲïÏæÄT½1Z-¼ûƒ¢~ò쯻wô{Sû~åò÷³÷„½œˆ´òéÙ÷4Ù_Ž½Ò§­qíBQo™þX8v®|yÑ£wˆ³°œÚ÷1–zM».ЮkÉZ¯%h½– õz5àõZr€ÖkÉ!yÓÊ‘âô¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´Þ&moLQWÍ×›þêÀwt¯­VךDÔ‹×¢©,ÂJ9z×Vø·ËaDS-Þ¿ÎÌ=íÛVÔŘ>Ͻ\ã].šD,<~!”ßó"šÌ¡—œýáÁÙ¯wµuRµWÃ~E½cÇçÂÙwû÷i¹œÚ÷•{eHƒŽå˜T].—ûkÛ–Û‹ºw­ƒúøÁÎ:Û…㋽ӣ@œ…åþ}_2Ø·NªF“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€sÐó¦÷h™êÉc=Ñb˜[’û6™Ûϸ¶9Ê\R×aÑšê˜Ü·ÉÜ~ƵÍIËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8ťī¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆc©G¡¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M†Ô1©Ú«¯×’´^KÐz½ðz-9@ëµä�NqɛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö«É©[?åMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLªöjÀëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NaN.æ–ä¾Mæö3®mŽ2W†ÔuX´¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½ðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒ´ëíº– õZr€ÖkÉZ¯W^¯%h½–’7­)ÎA/ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëmÒ†ñÆXêQhÀëµä�­×’´^KÐz½ðz-9@ëµä�­·I“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€sÐó¦÷h™êÉc=Ñb˜[’û6™Ûϸ¶9Ê\R×aÑšê˜Ü·ÉÜ~ƵÍIËpÓ6<¹€¹%9l3‡\’­¥Ô c=¹´^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­·N팘¸öjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­·IÓ® ´ëZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8ťī¯×«¯×’´^KÐz-9@ëõjÀëµä�­·IÆc©G¡¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M†Ô1©Ú«¯×’´^KÐz½ðz-9@ëµä�NqɛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€Ö«É©[?åMiÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­W£áVFLªöjÀëµä�­×’´^¯¼^KÐz-9 Z“ühõ¥NaN.æ–ä¾Mæö3®mŽ2W†ÔuX´¦:&÷m2·ŸqmsÒrÜß´ O.`nIÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ë­Óp+#&®½ðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒ´ëíº– õZr€ÖkÉZ¯W^¯%h½–’7­)ÎA/ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëmÒ†ñÆXêQhÀëµä�­×’´^KÐz½ðz-9@ëµä�­·I“!uLªöjÀëµä�­×’´^¯¼^KÐz-9€sÐó¦÷hµÀ0'—ÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õjrêÖOySðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëÕh¸•“ª½ðz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©d˜“‹¹%¹o“¹ýŒk›£Ì•!u­©ŽÉ}›Ìíg\Ûœ´\÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐzë4Üʈ‰k¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4íº@»®%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+GŠsÐK¼ðz½ðz-9@ëµä�­×’´^¯¼^KÐz›´a¼1–zðz-9@ëµä�­×’´^¯¼^KÐz-9@ëmÒdH“ª½ðz-9@ëµä�­×«¯×’´^Kàô¼é=Z-0ÌÉ¥õZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½šœºõSÞ”¼^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz5neĤj¯¼^KÐz-9@ëõjÀëµä�­×’ª5ÉVPêæäbnIîÛdn?ãÚæ(seH]‡Ekªcrß&sû×6'-WÀýMÛðäæ–ä°ÍrI>´v”R'ŒõäÒz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´Þ: ·2bâÚ«¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´Þ&M».ЮkÉZ¯%h½– õz5àõZr€ÖkÉ!yÓÊ‘âô¯¼^¯¼^KÐz-9@ëµä�­×«¯×’´Þ&moŒ¥…¼^KÐz-9@ëµä�­×«¯×’´^KÐz›4RǤj¯¼^KÐz-9@ëõjÀëµä�­×’8=ozÖ˜©ž,1Ö-†¹%¹o“¹ýŒk›£Ì•!u­©ŽÉ}›Ìíg\Ûœ´\÷7mÓ ˜[’Ã6sÈ%ùÐÚQJ0Ö“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐzë4Ürpplüâeª½ðz-9@ëµä�­×«¯×’´^KÉ›Vާ¸”x5àõz5àõZr€ÖkÉZ¯%h½^ x½– õ6i?äï+&U{5àõZr€ÖkÉZ¯W^¯%h½–À).yÓ{´Z`˜“Këµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^K¨Ö$?Z=B©d˜“‹¹%¹o“¹ýŒk›Ìíg\Ûdn?ãÚæ¤åÆŒk›Ìíg\ÛÌ!—äCkG)uÂXO.­×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9$oZ9Rœƒ^âÕ€×ëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr�ç çMïÑ3Õ“%Æz¢Å0·$÷m2·Ÿqm“¹ýŒk›Ìíg\Ûœ´Ü˜qm“¹ýŒk›9ä’|hí(¥NëÉ¥õZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%‡äM+GŠS\J¼ðz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^Kà—¼é=Z-0ÌÉ¥õZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%Tk’­¡Ô 2ÌÉÅÜ’Ü·ÉÜ~ƵMæö3®m2·ŸqmsÒrcƵMæö3®mæKò¡µ£”:a¬'—ÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½–’7­)ÎA/ñjÀëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëµä�­×«¯×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9€sÐó¦÷hµÀ0'—ÖkÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õZr€ÖëÕ€×kÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½–P­I~´z„R'È0'sKrß&sû×6™Ûϸ¶ÉÜ~ƵÍIË×6™Ûϸ¶™C.ɇ֎Rꄱž\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZrHÞ´r¤8½Ä«¯×«¯×’´^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�­×’´^¯¼^KÐz-9@ëõjÀëµä�­×’´^KÐz½ðz-9@ëµä�ÎAϛޣÕÜ\Z¯%h½– õZr€ÖëÕ€×kÉZ¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr€ÖkÉZ¯W^¯%h½– õz5àõZr€ÖkÉZ¯%h½^ x½– õZr@µ&ùÑêJ½z«jMu sKrß&sû×6™Ûϸ¶ÉÜ~ƵÍIË×6™Ûϸ¶™C.ɾ„"„B!$#Ø B!„’lÐ !„BÉ6è„B!„dtB!„B2‚ :!„B!ÁB!„Œ`ƒN!„BHF°A'„B!$#Ø B!„’lÐ !„BÉ6è„B!„dtB!„B2‚ :!„B!ÁB!„Œ`ƒN!„BH6„ðÿu´<Àœ½zÝ����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5f.png��������������������������������������������0000664�0000000�0000000�00000156355�15030617045�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ü��Ä���E™þÒ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��Ü‚IDATx^ìýQŒçuç ó~y£K^00 0\!|  hÉ „!;; û#¯@i “¯ü™Ž±+:H&+›Údé8Äâg¿fbœdâ åÕ eˆ’=‰Æ{Kiq‘¡-¾c­h9ÏÛÿª>ݧ«Ÿzêœ3ÝÕÕÃótþ×ÿ_5Õ=ÝOU=U½)8Žã8Žã8޳añ¿ã8Žã8Žãl`¼Ãï8Žã8Žã8ïð;Žã8Žã8ÎÆ;üŽã8Žã8޳ñ¿ã8Žã8Žãl`¼Ãï8Žã8Žã8ïð;Žã8Žã8ÎÆ;üŽã8Žã8޳ñ¿ã8Žã8Žãl`¼Ãï8Žã8Žã8ïð;Žã8Žã8ÎÆ;üŽã8Žã8޳ñ¿ã8Žã8Žãl`¼Ã/ay6LmÚ¦VÚO Škaéûφ©ÇfÃrû™aqki&<td¾µÄupk9,|ýHعiSØÔnÿåÅËmÑqÇqÇi"#îð¯¶úÒ;Çþ¶;™ùvøË…åp«íÈ;ß±yѶ„G¾fÿr!,w EJ–91VÛ³¬‹[áÚü³áÙªƒ[ï„ù§w‡-S^[þmûÉ+aþØÉ­烰4s0™¿Ò®- coØ´{&,ÝúmXžÿÿ¶·Ý¶0ó“uíF8Žã8Žã8C¤Gø¯Í‡#[ZÇ)v¤G“g§Ãžou*§fÞÝ.t«c|d{ëùƒav™zÇ­NèÂl˜žÚ–uD·L}=üd¥´×ßÊÿI˜Ù½%lÚòt˜¿–˜OK–»»âlÀoÃ;³Ÿ [v>Ø:â(üîíx0°N[ßßÙÞ^Ó ­]&âVXYx6ìÜò©0ûí´8Žã8Žã8M¢!Cz.†Ù©‰Þ›[ËßOïluÌ7=ÔêDÿºý,¥çþ6í#çÙÑþéרNB‘ö2ÚÁ¾~2óXØR5ü'ÛÁÙÞ{Ä}å0ƒ•!tø2œgu!LOl*tøA¾óµe½ùŽã8Žã8ÎPh|‡G‘¯Í?ÝêDobÊD‡ÐƒäÑ{a‡e)ÌgX'~å'aöv*p&a:œž>ž]x§ÝÙljv‹f·‡Æðu£Î>ófëâ˜ù-SáÙרð¦ÖÖÈ®È΂`]øð ‚çiÍ?:; 2ñ{ßg²#Ú‘*f=¾¿„­ÕíøÓë³7Ì,}=ã8Žã8Žã4‡1èð·èëÀWtø;C~ GÑ{tøÛó¬“Kþü¹-͆w²ž7†ç|¡=fŸÖ+u„¿ìo-®u¤Ûò•×Â4Ît0=N³iwxzþp«sf£Ð!gÃyV¦ÃD[ß´åSáۯͅ§wnÍ.…‹³Ÿ í†ÎY>ä¨ô‹ìºŠ‰05{±ý„ã8Žã8ŽÓÆ£Ãßîlv;øUþ•°0½³¥§:¡’?(vâóìø5‚iǹ¸>íqþœößÔÑÛ5;S]PØÉéÎÓ¾è¹gN6>ÿ^棖•êð·wÈ¢šã8Žã8Ž3RÆë§³+=Â/8Ò®îðÓ‘uì€à.Bsa¡3Œf~#/|{z*.ÔÑ#CƒÚùn6ÎÓ¦ož¥w>b;L©JsÇqÇqFŠá/éðßZ:žÎ:»±N|«Ó¿ôwÝNxg¼¼Ãß‘kÿúÜZþAxvj[vÀ·çÂ|Ïþ–þÎlxl ÝÁ¨}F€•ݧ´ÃŸÚ9já~ÇqÇqœ±¤ñþÑÜ¥g¶/BMwâ;ë—­» Ã_ú·×§}–"»ï=êâž·–ÃkÏÒNvp¦Âô÷—:sôî<±¶ƒÙ^·Þ K?o»Sú,ÓÇð;Žã8Žã4‘ftøéˆ<ï÷܇¿}aj[êÙá~~þVçõéï'~|«Eû¾ò}g¨Ýy¾8ž½Õñ~ö Ýûη/¦ÍØS‡ó.……™oöÜg?'2'£ÝáÇóï¼ffN‡Ô;¿æ—?+Kgò¿­ãkÑž‘á<-òqþÅŽ;ØŽ|ýµöv»–f¿féÎ;íרÿ̄ߥÇqÇq§ÉŒ¸ÃOäö꾆1ò³a>»=d›Òñæhí_Úmu¶ËìW-3oyǶ}T½ó<ŽbŸouø„éo5ÉÎ<`™³a©Ý±ïñï»…&#ë<÷^\›í°Ì!»6 ¿½æJX~íº?<öì÷ÃüW±ãAËû 3?_o´ì‚âkçû†óôÜ¥§Õz:ýÅ[€î<¾žýÂql{ñ3ùÎWÿŽ€ã8Žã8ŽÓ2¤çv£}D½ðK»:pñð‰0Õ7l ?þõ©ðX-Ãkü—vÇqÇqšŽwøGFþ«¼tï{5ÙP¢VG»ï¢e ±ù½ðta(Ïàùm~bâ±0ó?¶ï8Žã8ŽÓT¼Ã?RÚ¿nûXÙ8ürò±øÞsŠÝ4ï„?v~lˆ,φÇ:¿Æë8Žã8Žã4ïð-ü"åöØzÜ¥gv!}±²ã8Žã8Žs[á~ÇqÇqÇÙÀx‡ßqÇqÇq60ÞáwÇqÇqœ ŒwøÇqÇqgã~ÇqÇqÇÙÀx‡ßqÇqÇq60ÞáßÀÐí:Çqš„.9ŽãÔKc>u;÷’÷æÍ›7oÞ¼y“æ8ã€wø½yóæÍ›7oÞŒÍqÆÆuøÁáÛttø¶o>þßö6|»5 =œq¢1ïTÿÇ<¾MG‡oûæã¯Ñèðmo÷[³ð×Ã'óNõœÁãÛttø¶o>þßö6|»5 =œq¢1ïTÿÇ<¾MG‡oûæã¯Ñèðmo÷[³ð×Ã'óNõœÁãÛttø¶o>þßö6|»5 =œq¢1ïTÿÇ<¾MG‡oûæã¯Ñèðmo÷[³ð×Ã'óNõœÁãÛttø¶o>þßö6|»5 =œq¢1ïÔñÿǹ.Í>vžøÇp½ý̨ÙFkÂìc 'WÚOŒbÛÿÿ þÿ1š÷^%Æú=;¦ïÕcýz8·y§Žý?Îo_'î}(L/¼×~bôŒÿ‡ÑZøíâsáÞÞ_k?7Œÿ¶0þÿ1üÿc(4ð½JŒï{v|ß«)Æ÷õpnGóN]ß?Îõ°üÊŸ†Ã»¶¶s¶„í{÷‡½Û'ÃÔìù°0½³“ßÓ&v‡CÓ–Vn¶sZ¬^ ¯|åɰkbs>Ïæ{ÂÞÏýi8=½/lšš ËíÙz¹®ýBØöÈ©ðÖ­öSáfX¹øa~v&|ùاÂÃÛ·„‰é…°ÚVë€þN«ayö`Û»9L}1\Í>Ÿ/†Ù©‰NfyÛ&v=¦ç~V:Ÿëkauùá+‡?&ÚómÞþhøÜÌóaú£w·^£‹íùŠü[8{lwxäÔÏZ[¸ÍÚJ¸¸0fg¾Ž=ñHؾyg당yGŒh{˜‰½?ùѰ}ÓÁ0»ükÙ{zu!LOç)l¯åÙ0EÚäçÂüUü/ð÷@»Mì S{ùëõø 0_ÙkùÿhÀëHëm#öžþhøäÞ{²Ï‰‹ Óç{ÛÖ°ëгané½VŠþÿµ• aa~6Ì|ùóቇ·‡ÍÓa¡Î!ôwÚHoûåèû-öÙT¤™Ÿåý-jRŸ'Ï ¶ÿLØ8ùF¸ÑŽჰ4³·­M”|žïgy ÚVŽ34æjÿÇY ¼ù'ááÉáÄ™7ÕյÖçÈ?‡sßùbØ·ukçÃg_À=_~×Õóß_;¼;L8ÞºÑúXýEøë';þq8sþrë½õÅråÍðÂÌÑð>(Ë:ü8Uyàþphî–ƒøMX<ù‰°ïðç×gþ,LOm“›NGðíav¤+û2¥æ¼ÃÒów­^ç_øj8¼óÞpàôÏZ_ ­mxá¯Â“;v…ƒÿóL8'Éóm?sdOë »ì ¢µY/͆wsï²­vs1œüèÇÂác_ 3ßüƒ0µ¥™_ëÚö­íúæÉGÃäÔ‰öû°Õá¸ðjøÎñ…­YG;ߢ÷4È^Ë®¯Ú™»#ì˜þax¿ýlÿëÛþÒgÿk+ ṇï ûOo}í—ûÿhÀ븮×胇“­¿{êÄßæïéVçå¹o‡ãûîênŸžÿÐþ<ùÚSaçäãáô[ù–¿Žbÿ7¿>ºï‰pìË3á›ÓSaËFìðK¶½è³)BC?Ë Ûv“|žH¶W>ÏÛ·‡»ø‘úìŒÈ]aûö;K·Ë8–§X×ûØqj¦1ïTû?ÎÕpöØÎ°çÔ?±h€NÌöD‡¿Íû? Ó;v†cgÿ5¼;w8lÙ3–ú¾`o„‹§”tø×Âó_ $OUF>Lk`]FY'ñ#á³Ç w>úðsÚ&UþŒµðþ†“_g¯] s‡v„=3çû¿`×~Nï+;Âÿ›pþäÞB´@_‡ª9¬kÛÿæl8vçÇé· #ˆ ÷ê÷ô¿åµ¨ÃwøÈg†Gï<Nýœ¶xñõííð¯­ü8ÌìÿpØ?óãÄSÁÿLj^Gûk´Öz‰~7ܹçTx»çO*ì•þ]ïµ¶ëƒaòØKáZ«¿Ž=Tÿ”æ6€¡o{ÑgSçXs›æ~–¦í&ú<‘l¯kù<ÿõ‰v‡gÎýº«ïž3¿W¶]Æû³<…ý}ì8õÓ˜wªýçR˜;¸=Òá¿®,ý8,eG”S_~ø{ |虿ß=¼«pd‡X ¼ýrøîÙ·#G1Î=ó`¼CÛa4_ëú0¢/ƒŸ¿Úúpßž:s)ß.¢‹ë? ÓwÝžù«o†ÃÅ#;~Þ>û¿ÂٷӮ￞¹ëãaf©ô+¢Ñ_ëÚö—çÂÁÍ‘/èÕ+aé~–ÅÊÊÊ÷ô¹ÖA Q‡;Ço„Å ÛžúÛðn¶ˆâëË:U¢Î>üŒ]‡ÿfë%z"lîëtâþÏÂ?,]É·Wéßµ®·^»»>t<œ»ÞòH_GŽàÿccvø…Û^òÙt®8F¿¹Ÿå„i»‰>O$Ûëö</‡¥S¿î<2ßz‡b¨Î‡Ã£§ÃËücþYžÂþ>vœúiÌ;Õþ³Þ=s4LN|$;õýðjç¿—ò/¿v'fïT˜2|àDOUö1š/‰u}u:‰×ÃÕùÏ…I:ê%íð·;‘{§ö:¸KÆãáÎCsíŽg µÃ¿v)œyêÞ0ñð±pêÅ×:;­E*ßÓt´SÜá¿Ö®¾ŽN>ØÚ¦è _ßvîƒO†cûï›¶ý×pöZjŒ¹ðÿcì:ü­¿ëÝ¿ OMn {>¼øêRg'¬‡ÔßÅ^ñëØAöÿ±1;üÂm/øl*žYlòg9aÚn¢ÏÉöʯ‡Ã<7.œn9þúü\xòC‡ÙKWKüãÿYžb=ïcÇ©›Æ¼S×õ³ö^Xš{6ê\´Ûj¸èí¹¿Ë•GCó/ÕÍ}6üÿvïê=ê“}µóÚ­÷íý°4óñp×3¯”ŸªÌÍ—­³ ÞIÌÆµÞ“ùêù`®ú’Ø;öé°»}$“È^ ¶Mû.ö¼q>Ììy°}Ê8Aƒ¿$Öµí[¬­ü$ÌM?Þ½È.»€îSá¹—ÞélëÊ÷ôÁ¹peI‡ÿÖÅùðG4.Þâ ü :ÚV|}ÛÐMw‡ý3/†ÿ=ý‘°ãÿúßáré¹ðÿcD¯ãú^£›aeéoÂô¡Ý콌 rÿ8¼ÔÚIÎHý]xM6?æ.ß”¿Ž„ðÿc£vøEÛ^ðÙtpîR»Íþ,'¬Û­úóD²½~Úgí0wèžpßÎíÎ|‰|–§°¾Ž3 óNè?NUžý‹p|ß½Ó³å_~¸àÞp÷‰ÃËÏì.Ü}€(9Ò†1¶÷þNúTeÆh¾$ÖµM{:‰káÆÒLسíh8séY‡?7úápâ/„g¶}4œ<¶=Ò– ½7z-E ÜáïÃ~ÎâBôÉî©ñê÷ôb«kÔ¢¤Ãßõ^‡ìKzWxêÌO §éÛÿûN‡‹xi²‹'1_{¸WéÿÇXvø‹`áËÙ…“ôÞ-ý»ÚãÐï>³›) _Ç ùÿÇÆíð‰l{ÉgÓ"ûLjøg91˜íû<‘l¯eóÜ ×æŸ[Z;ÿOžù—VbÌ¿1>ËS ö}ì8Ã¥1ïTë?Nù—Z~¡í‡Ï´¾6Ëçˇ0àÈþ¯Âû‹Ï…¶}&Ì]*žòŒuøW³‹|ï<0.U|–‡¿ÅÚÕpîøƒaÇçÿkøô‡ª:ü7óa@Û¾νÿ^>.üɹp©ïÔ{¤ÃŸ9º?˜½Ðúº¨`Cvøï•ì"ç{Ãá3ÿš•ÕïéöQ5m‡¿õú];÷ûaÇŽO‡g>½ƒ­Kñÿ }‡¬mt;OŽâÿcÜ:ü‰õ]»x:ì»ãÓá ¶GÙ|kï†ù£÷…mí£Éâ×(þ?Ê?GÏз½è³‰¶`ó?Ë ýv“~žH¶×ÿÓ;ÏKaî¹ï„Å\üñoÏòæ÷±ãŒ€Æ¼S­ÿ8Ù—ÚæÂá“^¦ñûÙmÚ¾Žîº/<>w1û°éûò뜸;LÒEŠkï…7g>&w>¾öB~‹Od]\ø~˜9|o‡?; º»äEFó%±®£H'qmù¯Ãã[qJ˜>˜‹;r´õÞΑßün.÷†‡¿^Èn ‡ç.„…¿߃ßJ Ž&IˆÝA#Bƒ¿$ìÛ>ߦ›w>NÎý 3Þ6»Õì·ž»&Ÿ sËù9(Ñ{¨;ü-Ö.†¹Ç·gC÷õìøf×ûûïÀ¡ùÿÑëh~²õ½³õ~þŸaî埶ÇãV‡ç·Ž>&ÿë°Œ§úþ®î‘è­“GÙöXqñë¨üÿèËmCßöÂϦŒ1ø,'ôÛMúy"Ù^©¿½ß¿Q>ËS˜ßÇŽ3óNµþãd_j[>>÷{||⦰ùžÇÚ?’Ñó= ãüO¼Þâ?n“]0öß³¥;ßæíáá'¾N»Ôù0ËnEöÀWÂùÒS•‰å&î=?Hhy:Ú:¾¾Nƹ~,lF‡ÿÜ|ëšÍÓiùØÐgþ©çî-ùÒÇÂ=›»ónÞþHxâ™o†sq·¸]áÃ%êÚd_ |y¼õwjG­“žü}³åwž¿×3FyK¸gÿ´ì›è=ÜVe¾tÛ_Ø­×+ÿÇNAñ‡·Úÿ ¸ØñŽöóÙ{Eðÿрב–§&[÷máw>÷»½× m¾7ìoÿXVö¹DÏ÷4Œ5.œyëšüuìPýÿQ¾ÜV+I!´NjÛ¾ü½ûlÏr‚–+Gðy"Ú^½ß ½~¾}h{lœÏò´¾Ž34æ:Vÿ8kÿÎ<¹Kvªr„ŒÛ‡ÑÚÕ3í;>”~EŒ ã¶íŠÿ ÿÿcò^%Æå=»‘Þ«)ÆåõpИwê8ýãÜzëTx$:n¹YŒ×‡ÑõðÖ©©°íè‹áê8|óV0^Û~°øÿÇ0ðÿa0.ïUb<Þ³뽚b<^ÇÉiÌ;u|þqÖÂêåÅð½—Q~ª²!Œ×‡Ñõpyq>¼ü‹ª»dŒãµí‰ÿ ÿÿ<ãó^%Æã=»±Þ«)ÆãõpœœÆ¼Sýgðø6¾í›¿F£Ã·½ ßnÍÂ_gœhÌ;ÕÿqoÓÑáÛ¾ùøk4:|ÛÛðíÖ,üõpƉƼSýgðø6¾í›¿F£Ã·½ ßnÍÂ_gœhÌ;ÕÿqoÓÑáÛ¾ùøk4:|ÛÛðíÖ,üõpƉƼSýgðø6¾í›¿F£Ã·½ ßnÍÂ_gœhÌ;ÕÿqoÓÑáÛ¾ùøk4:|ÛÛðíÖ,üõpƉƼSýgðø6¾í›¿F£Ã·½ ßnÍÂ_gœhÌ;•þq¼yóæÍ›7oÞÆ¥9Î8à~oÞ¼yóæÍ›7csœqÀß©>ó™Ïdÿä³³³ígœAóƒü ÛÆ÷ÜsOø?ÿçÿ´ŸuFÉ /¼à¯ICÀg^‹={öøk1$~ùË_vÞïÎàxþùç³íŠïQÇqêÃ;ü¨3Š/[gx`ûb;ûŽUsøÄ'>‘½&Ço?ãŒtòýÿcøÐ6~ýõ×ÛÏ8ëåêÕ«Ù6Eôã8õà~#ôE€Î¿3ð%‹mìG”›õDÃgtÐÿ^gðÐÑèÿñ?þGûg`{úvuœzñ¿:¥î§%‡‹ŸjôÞÇŽ˜¡-8ÓâŸCÃëñƒƒcii)Û®hþâ8õà~#ü´¤]þÅÐLhGÌ;š£ÿèŒâµð³ÃÁÏæ?˜ã8õâþuà§%ë¾|;7ÞÑô¡=£…Ÿqñ£Ðƒ‡¶¯_·2X|ȦãÔ‹wø×}ö¬áâGù› ¿kŸå-t1µï~6×?狟=qœúðÿ:¡/Z?Ê9\ü(3¡×ÿÎèà;Řv }Î{Çt°`{b»¢ãï8Îpñÿ:ñ¬zð£üÍ„íñ±¸£…†úÎ×ࡳY>¬gðÐç‡ïL9Îpñÿ� ,¿Wóp¡åo~{Èf€á&¾ó5|XÏð k$ü�Ž3\¼Ã?�ü—ëéú°…fA·‡ô£Ë£…Î8¢ãïg‹ëØòÏuÇ>Þá�¼#ê_²Ã…ŽòûÎU³àG—±ìŒº®Â‡Ÿ Ö3<èsÝ·­ã ïð:ÂéáâGù› Úã¯Íè ‹Bóa†ƒƒöø°žÁâÍgøx‡@ÐE¥8Êé_ÃÅò7zmp»ÿŒí¯Ã`¡a=~W¶ÁCÍü-ÇÞá ~Oázð£üÍKú?ð³]£ƒ¿~ïà a=~­ÊàñƒfŽ3\¼Ã?@üõáJ7úâFó²ÑáwO<èˆÒ6õ¡'ƒ‡®?ñTÇ<Þá ø2  ½£3\|[7Ú!ó£u£…†IøŽñà mêÃz¿Ë”ã8ƒÅ;ü†::~·áÃÇ);Í|Râÿ £G¡iÇØ‡ê”ú°žá@Ÿþ~uœÁâþãw¨~”ß¿š‡ß-¦ÐޱŸm ؆ô¾öÏøÁC×IøÇ,Þá>±>ü(³ñÎf3 »ËøPƒëü@Ž(pœÁáþ!@ËáCË.~”¿ùPgÓ‡öŒ¿z°ø°žáB üÚÇÞá>±>ü(³áC{üˆèè ë‹¼“º~|XÏpáCcýSŽ3¼Ã?$ü~Íõâ;X͆íñÒhàgÃðz8냆õøïM ú?†æ8ƒÁ;üC‚¹ú)ôáC§Ø±Í±íæA×¶øiúÑÁÿO|Çk}жô3‹Ãå÷÷ªã¬ïð?BQ/t”ß^6|iÓN°í¾ã58èýìÃN†½Wý,Šã¬ïð>vÙP ?Êß|h¨^#ï$~äÔ>è ŽwH‡]lîŸé޳~¼Ã?dè…u®?Êß|è¯otMþ_¼#e‡îÈæÃz†‡¦;Î`ðÿñqžõâGù›Úã_â£ÿÔ‘ò£ÓëƒÞË~Æj8øw¨ã ïð×�}±âƒË>tßwïL6:2ê¥ÑÁïÍï¯Ö3|ü;ÔqÖwøk€NŸûErõàã>Ǻ­¡íôøg“Ö3|è;Ô?+ÇŽwøk�N|X¡ù‘´z qâ~‡¤æ‚ÿ áGGGƒß9i0Ð6ô[0þYáÛØqlx‡¿&üõ‡+ø’š Úã_ä£ß9ÉψÙðÏ÷áCÛØÏF9Ž ïð×ï€ú—j=øQþñ€¾È1$Âÿ7F]÷âÿ+6èó;MÎpà·“õƒ8Ž£Ç;ü5B_ª~ê¼ü(ÿx€N>]”çC{Fÿ_ñ3-6è=ì¿m0<èà€ï˜:Žïð׈ß^¬~ü(ÿxàÎу-ÿ|²CÛÏ?k†ÿœð³Ž£Ã;ü5CùQ zðÓÀãu˜|,ùhÀ6§Ï'¿¥­ÜÞ¿Îð ƒ8þuÞ᯿EgýÐi`ßæÍ†íÁí"úá?\ç;Èz|XÏð¡ ýýÀ€ãèðÍøçúáÛ܇‹4:JŠæ¦Ñ@GP}Yë©Ú±òâr9Þáôc7þ¥P~”| ³`~o4ðdßéÒáÃzêÁ¯‡s=Þátá‘whêÃòtG+Ú3h§ *ÿŒÒáGŸ‡Þ“øþôíì8r¼Ã?"üK¡~ü(ÿøÀ‡öømlë*úŒò[¥ê a=¾³:\üz8ÇÑáþá§$ëGùé¨åo>|h_ïR?üˆØsdð³‰~vdx`ÛÒvöÏsÇ©Æ;ü#‚Ÿ’ô«úð£Bã^'½F]oäÛ_ Ió3¸Ã…ÎÚúõpŽSwøGˆŸú­û9^ð³2>´§~øÿ‹o9ØVþÙ>|øÙ? è8i¼Ã?BüÃj4ð æC't<}hIýðíïCTdðÏvßfÃ…ÎBùQ~ÇIãþCV~a\}øQþñƒ†ö`¨„S?~×$=>¬§èZß!uœ4Þá1üWúð£ü㎘ÒN^;§^ø]“üš#>¬§>hçÊ?§ïð7�¿EgýøQþñƒvŽÑ|hOýÐ5G¾“,ÇõÔ>ñýÀ™ã”ãþ@G‚|¸B½Ð—„w`Æçÿ+õÃw’ýHª :òŒÏxg¸ø3ÇIãþÀ¿Hýty½Ð—„w`Æþ¿â×½Ô?Ëâ7¨ÆæÔmk?€ã8q¼Ãßü~£Ÿ öÓîãïtúrýøo#ÈÁg ½W}i¸ø3ÇIãþ†ÀÇ{úC½øQþñƒvñÚùŽZ½ðÏ*ì|9ihšë>ø ǶöQÇéÇ;ü ‚Žœydz^ü(ÿø×‰vÔ|hOýPÇÊÿgª¡ÏÖ3|øÎ¨_Øï8½x‡¿AðާS/~”ü ûo£ù)üúñ.Ø!¢÷©Ÿ½>><Öqâx‡¿aЗ¨ßi ^øï!øËñné¯[ýð.?ššÆ‡õÔÿÍßÁrœ.Þáo>qtÐ*?b9>ð¡=þGõã·I•áÃzêÅ?˧ïð7 ~ú×šÕ ?béG†Æ~DÏ/"­|^áì ¶½½.‡®ûgËð¡Ïr?óç8]¼Ãß@| âè #C¾íÇ ¿ˆttÐýÏ}Û§¡³!~P=Й?ßuœïð7~ÄÒ¿@ëÅò/ô«¦>´§~|ÛWCÃzÐu†ooÇéÅ;ü …¾@ýhPýøQþñ„ï(ûQ½záÛÞï˜ohø“׬¿ †ãtñCñ££Ãò/|h¿võBwLòϬrh¸¦_LZôyàK;Žwø  ò ëǯ£_è úàG°ýÌdºý¯ïÕOú™'çvÇ;ü †ŽNxÇ¥~ptÛÞ¿(Ƽvô%ïC{ê…:´h~†%½7}XO=ÐÁÿunw¼Ãß`x§Ó¿<ëÇ¿(Æ~çïXÕ‹ŸaIãÃzêÅ¿G'Ç;ü LJ–ŒþEáGùÇêxúøÝzÁÿ Åöáˆýø°žúñïQÇñã¡ Hñê·è¬ú¢ð£•ãïxú˜òzáOûçV?ô¾ô³OõÀoÄàïGçvÅ;üc�ÝZÌÇ#×åoø˜rï\Õ }nùЕ~üˆsýÐ?ßùwnW¼Ã?ø-:G‹_<=ÞÐ/œúОzáGU}g¹ÚÅ‘~§è{ÔÏ:9·+ÞáüÖb£…o“<~ð×Ï6× Éö­~è ˆ¦Ômsÿ!.çvÄ;ücý¨ÿtýh £ü~–e<áC{|§¹>øÎ–Iì…>Ó}XO}øÙrçvÆ;ücKŽi§^xÇÅ't´_öx=zà·HõÏ®.¸¦„¶‹S~¶Ö¹ñÿAc‘}XÂhð£üã ¾ì锾ÿÕ ]0ég({¡÷£w>ëïÉrnW¼Ã?FÐEp8BáG(ëÇò?~!éh £Ù¾Ý{ña=õƒÏq/:·#Þá3èˆw8Gƒå¨“å;ÎõBÛÿ;¾Ýs|XÏh á}¾£åÜNŒ¸Ã¿–gfÿxñ¶;™ùvøË…åp«íq+\›6<»°Ò®74Öïz1:|§k¼Ag“^CbR|»cÇÙÉ¡mâÃzêï‰snGšq„ÿÚ|8²¥õÏ75–ÛO…[Ëaav:LáùMÛÂÔÌAÜ}¿õ“0³{w˜Þ€~|iÒ°?9èN~„x|áCL¼£UünIÞÑÊ¡3¾óY/t]‰åwn2¤çb˜šèíð·¹µüýðôÎ-­̇Zø_·ŸMq-üdæ±°eÓÎ Ùá~:rôø‘Êñ‡†gùŽ[½PGË/šÌá;Ÿþ>¬ºžÇÿÿÛ…Æwøóá9O·:ð›Â–#ó­î<žZ _?v¶?$7m™ Ͼ†a?ÔÙo?61V–N…#ÙŽžß¦žýAXÖj ~:rôøQþ†Æáuô£«õÏ,:KéÃârè}èÛ£^h»ûçv` :ü-hÈÏ–§ÃüµÕö@ûˆÿÊkaù¬c™éº�v„?óo ;§_ +á×aaú¡^} ¡£dþA5:ü(ÿøÃ®úCÕ‡Ÿ]é…®ÍòÏz¡7ø,wœÎxtøWÂô¾”†Ùå÷Ã;³Ÿ [²Î?ѯ´:ð;“þ[ï̆ǶlGæ¯dõêÂt˜ó?…Ŧ3ü(ÿÆ€w>ýŒY}гÿ&BïY[ÿ,©zúÙg£3^Gø;z€a:ß ßžžÊ‡ð¤Žð·¹µ¼þòÛt!ðxwøP?Ó²1ðqåõCc¨Ñü>¬gTÐÙ?ÊïltÆr ÿ­å„g§¶…-SÓáÛó a¾â?Æü¿ölkÇ`ËT˜þöß…óó¿7öGø™ô[tŽ~á—_ø¸rÚStÿ óa=£gTèßw<Lã;üýw鹿l›vÏ„¥ì¢Ûª!=´Ã°7Ì,}€6Ä€*|H¡a,²3èè°ß5i¼¡¾üýÿ©xgëvßÑòa=£ƒnêgøœL3:ü•÷áßžž§Õuíƒ_óË„•¥3azj[û‚^ÌA~ŒÙ_ 3_³3u3V–Â÷³a@Ý1ýãŒß¢sôð¡ ~”¼¡7?â\|Gëvÿÿña=£ïlùξ³Qq‡Ÿ:çù?ZÃ/íΆù¥ìfœm~–_û£îr=ûý0ÿÕ½­é-aç‘Ù°´r«{V }»ÎÕö dn™ú£pnþÂnäï|:Ìöd~çfàGù7|h_—Qôÿs»g¡ßá¬?xælt2¤ÇYôeé”ÑáGù7ü×`ýh_=ð·ó8j~¤Ù?Gê…¿}Û;ïðo�èö~—ÑâGù78ÒŒ×Ò´ÖÝ„�Ÿc·óÙJzïÝî×4Œ?xæld¼Ã¿A a>östøÑ¹¿˜Ôï_Øæt«áÛ¹ÃEp|g³~ø]×|ˆ¬³ÑðÿŽŽá…3:h¨¿ãÚã·ë«NÕ{÷5?pP?´ÓégXœ†wø7~t¹ð×Á;‰ãíÀÝîÃLꄆ´ÜÎ;Í>¬gtøYg£âþ „ße øQþfâC{ê;Í·ûEÖ3Z|ˆ¬³ñÿÂÇ6?Ê¿± ÿ+=냆(Þ®Ÿe>¬g´ÐûÏw¸œ„wø7ø€Â•Ÿ -~”cA¿Äé;ÓõAŸe·ëKÖãwŒ©üÓQ~ßÉw6 éðã« VUsšËÄ2cã‘cÜs9ƒ^fÙÆzs‰ªœ¦çrêZæzrñzÒОAærêÊåÔµLKnìÌJUN±æ JÖ2c5Zl,ùzsËhB.§®eÆj:hƒ/ÎzsËhB.§®enäÜÿðþC{ª”¯i¤6 UV¯&H½V H½üT0Ýñ‚£©­°z59@êµjÀêÅ4NÍ Š^ŽTV¯&H½V X½š ñòæÁÿ(›—àµUV¯UV¯&TyÑèh?GSCV¯$‡4zS°z59@êµjÀê•æð¡™4¬*åMiÀêÕä�©×ª«W“¤^Mz59 åm#_£âPjƒI5`õjr€ÔkÕ€ÖKÃR>ª­°z59@êµjÀêÅtÙ6¨òr¤°z59@êµjÀêÕä�©Ó|lyj^Pôr¤°z­°z59 ÊËÿ‡øÐ–Tàõ04`õjrè(3]0žš7¥«W“¤^«¬^M@F¯‡×) X½š õZ5`õjr€Ô«ÉR¯&¤¼M¡Qk•Ú`R X½š õZ5`ñjL�^[5`õjr€ÔkÕ€Õ˧©ƒ(beÕ€Õ«ÉR¯UV¯&H½|šŽ6óSýR/jÀêµjÀêÕä�©ÓhèøÓg§ÊË„¬^M@FÃÉ8¼NiÀêÕä�©×ª«W“PóaeØù$ø¼1'U[5`õZ5`õjr€Ô«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—3ÈeÒ_t´Ÿ³ž\θçr†¹L:BI×WpÖ“Ë·\N]Ëd.5\OóbÈ?»F;Ûš7FQ«ª9ƒÒ†µÌõæââw<?è\B£ k™e5}~ð"DnŒ&ärêZfª¦÷aTn‘&ärêZæFÎõ1üRЪ«W“¤^«´^É‘ ª­°z59@êµjÀê¥i:ÊŸšļ„TV¯&H½V X½š õÒ4Mÿ×ÿú_=ôR+^CçTV¯UV¯&H¼£º~"¥«W“ãÃzr4µU±­j_JV¯&H½V X½š õjr€Ô«É)oùùþ´¬^L£Ñ‡¤æE/Gª«W“¤^«¬^>.Ôh’ת«W“¤^«¬^MzcZU#ø4jÀêµjÀêÕä�©Ó|x\j^Pôr¡«W“P£ù°ž.V¯&PMÛžÿŸWšCH½š õZ5`õjr€Ô«ÉR¯&¤¼M¡Qk•Ú`R X½š õZ5`õbšß¢35/(z9R X½š õZ5`õÆ4ékaÕ€Õ«ÉR¯UV¯&H½1­ªÑLsxÒ€ÕkÕ€Õ«ÉR/McÇ™þhxx‰AhÀêÕä�ª«†õHs©W“¤^«¬^M(zÑðþ£šHù@ª¶jÀêµjÀêÕä�©W“¤^MHy›DcÖ,µ‘4ZUÍiB.gÐËäw¸ð{Á~™’Î G£UÕœ&ärêZæ rùÙšªF·cåàù2ŠZUÍ”6¬e2— óáTyËÐhÃZfª®ÖÃÑäiB.§®eVÕü»t¹œ&ärêZæFÎõ1üRЪ«W“¤^«¬^L£á ƒjN•—#Õ€Õ«ÉR¯UVoLCÃu9U^"¥«W“¤^«¬^Mz1­mŸR X½V X½š õÒ4Ý 5/ˆy‰AhÀêÕä�Ôh>޼‹Õ«ÉTÓ2þëé|^i!õjr€ÔkÕ€Õ«ÉR¯&H½šò6‘¯‘áOkÀêÅ4¿Egj^Àk«¬^Mz­°zË4:Êoñ‚”¬^Mz­°z59@êÅ´¶Ñ LsxÒ€ÕkÕ€Õ«ÉR/ŸæŸiü&&¥«W“¨¦Î>]´ ø¼ÒBêÕä�©×ª«W“Š^jtS ‚OMmÕ€ÕkÕ€Õ«ÉR¯&H½šò6…ƬUji´ªšÓ„\Î0—‰FCI™Ë·\N]ËDVv”Ÿ£Íå4=—S×2דK×`hïœ<WFQ«ª9ƒÒ†µÌAçÒÑV4üëÍQÔªjÎ sé–¯±âhs9MÈåÔµLi.m{:c^Äš 4Ú°r9u-s#çúž© hÕ€Õ«ÉR¯UV/¦éö€U§ƒAÑË‘jÀêÕä�©×ª«·Ló£ü2 X½šPå¥ÿK#ø4jÀêµjÀêÕä�©7¦¡I†+CV¯& æ·&åð:¥«W“¤^«¬^M(z©ŽOMmÕ€ÕkÕ€Õ«ÉR¯&H½šò6‘¯‘éIkÀêåÓÔÉ,»­(ó©¬^Mz­°zS¦£ü@êMiÀêÕä�©×ª«W“$^þ»šæwê‘×Z­øšpx= X½šPô¢Å~‹ å©Úª«×ª«W“bÞØÀ¥| U[5`õZ5`õjr€Ô«ÉR¯&¤¼M¡Qk•Ú`R X½š õZ5`õÆ44ºsˆÖK¤4`õjr€ÔkÕ€Õ+É¡/â/!§¼) X½š õZ5`õjr€ÔKÓøe]ÍÑ~ÚÑæð:¥«×ª«W“¤Þ”FC,ø‘¤^«¬^M(zˆõ¤| U[5`õZ5`õjr@™·xÀF“xmÕ€ÕkÕ€Õ«ÉR¯&H½šò6‰Æ¬Yj#i´ªšÓ„\Î0—ILÔ8UÞ2ªršžË©k™Tó£“85Ã’Kh¼œºr9u-s¹üN1US¬9Uój¼œ&,s˜¹´FãúË”VUs[6¬‡cÉ%šË©k™Ú\ì`â‘ßb¬7·Œºr9u-s#çúþ© hÕ€Õ«ÉR¯UV/ŸŽ]p$õ©¬^Mz­°z%9h±1È)oJV¯&H½V X½š õòiº6¦ªaç`šÃ딬^«¬^MzË4~A5ßy–xUV¯&½h>¬ÇæÕ䀘—¿çˆ”¤j«¬^«¬^Mz59@êÕ䀔· Œ|| ZVoL£Vu*Òª«W“¤^«¬^INÙ䨼DJV¯&H½V X½š õÆ4üñ;ÆÄu8¼NiÀêµjÀêÕä�©W’ƒF÷H—z­°z59 èõa=v¯&TyѪþ¿Aª¶jÀêµjÀêÕä�©W“¤^MHy›BcÖ*µ4ZUÍiB.§ŽeÒØq~*r¹ ªæ4!—S×2c5?ëB¬7·Œ&ärêZæ0s1Ô‚_ÌÇ›õ­ªæ JÖ2‡ËïÍ_¼*¡É嵪š3Œ\>¬‡.úçXsFV.§®eZriG×éƒÈQW.§®enä\Ò!µ­°z59@êµjÀêihô!¥õ) X½š õZ5`õJrü(¹¬^Mz%9Å‹zcG¯S°z­°z59@ê•ä á³­x3åµjÀêÕ䀢—ßu­¨q4µUV¯UV¯&”yùuqô9ÎÑÔV X½V X½š õjr€Ô«É)oùùž´¬Þ2¾,,^Ò€Õ«ÉR¯UV¯&‡NÍ7õŽÀêµjÀêÕä�©WšƒŽ�½¦hôÿÆáuJV¯UV¯&H½’l÷Øg[ÊkÕ€Õ«É1/î…é˜Fhj«¬^«¬^M¨òÒ𪔤j«¬^«¬^Mz59@êÕ䀔·)4j­RLª«W“¤^«¬Þ”F§"éÈ#zS°z59@êµjÀêÕä�Ô¼qxÒ€Õ«ÉR¯UV¯&H½š€Gýèn^Kr8R¯UV¯&H½š~ÆŒ†¾pxmÕ€Õ«Ée^>„©x6hj«¬^«¬^Mxùë@Œ—ÍKðÚª«×ª«W“¤^Mz59 åmY³ÔFÒhU5§ ¹œº–‰šZìK‘£ÑªjNr9u-³¬¦#Âe;aE¤¹1šË©k™£ÊÅ6þÏÀ s9ƒÒ†µÌ:sé–©ü hr9±epF•K;“ÖÃYonuårêZæzré³›9ëÉåÔ•Ë©k™9×ÇðGHm@«¬^Mz­°zË4>ä€#ñ‚”¬^Mz­°z59üHQÕxД¬^Mz­°z59@êÕä�©W“¤^«¬^Mz¥9ø_¢ë(0ô¤¼V X½šóú°›W“ª¼ü"j:ÊbórxmÕ€ÕkÕ€Õ«ÉR¯&H½šò6‘¯‘áOkÀêMiÔ©¤_ RoJV¯&H½V X½š€z½;aÀêÕä�©×ª«W“¤^M ©yS°z­°z59@êÕä�ÔhÔñçðÚª«W“ʼü ë‘y59@êÅ4Ý‘+5/(z9R X½V X½š õjr€Ô«É)oShÔZ¥6˜TV¯&H½V X½’:%LGŠˆ”7¥«W“¤^«¬^M ºx”ðyË|Dª¶j V{ó֤ơš>ß°#MðyË| ¥«W“ª¼ô7¦| U[5`õZ5`õjr€Ô‹iú¾ªLPôr¤°z­°z59@êÕä�©W“RÞ&ј5Km$VUsšË©k™TÇ~-°ˆ%—hz.§®eVÕü‚êAær‘‹GoÞšÒ>Í/à “ãh´ªš3ì\:X“ºöÇ’£®\N]ËD.Ý!І‘A䂪œAårêZæFÎõ1üRЪ«W“¤^«¬^IšögÚS°z59@êµjÀêÕä�Ô85OG‰øñy%9©W›#õZ5`õjr€Ô«É¨yãð:¥«×ª«W“¤Þ˜FjjÉm­°z59 ÌËÏ Ò4GS[5`õZ5`õjr€Ô‹i4tü©æTy9R X½V X½š õjr€Ô«É)oùùþ´¬^I}!(§¼) X½š õZ5`õjr@Ñ‹ûâHù@ª¶j VÓs©y­°z59@êÕä�ªñ˜š7¥«×ª«W“¤Þ2 Ô8TÓØv´Øøê2HiÀêÕä€*/}v§| U[5`õZ5`õjr€ÔKÓt°&5/ˆy ©¬^«¬^Mz59@êÕ䀔·)4j­RLª«W“¤^«¬^iNñHyS°z59@êµjÀêÕ䀢—å/jMmÕ@¬æÃk«¬^Mz59 è-ÖDÊRõ04`õjr€Ô[¥Ué4t±8¾ºÊÇÑÔV X¼ô÷a<?‘ʼ¶jÀêµjÀêÕä�©—OWýÆ (ó©¬^«¬^Mz59@êÕ䀔·I4fÍRI£UÕœ&ärêZf¬FÃÑþ"ëÍ-£ ¹œº–)Í¥/:Ê_Äš 4ZYǪy9m£å¢¦çŠG’SÆ ´a-s˜¹ü¹2/ç1N™µªšSG.?‹aÖÃÑhÃÊåÔµÌAæÒŽeÕí•‹h´aårêZæFÎõ1üRЪ«W“¤^«¬^I¿E§Ô›Ò€Õ«ÉR¯UV¯&½ôzÐ<"å©Úªâ¼R¯UV¯&H½š€š7¯S°z­°z59@êiÔ¨æðšÏKwT!ø4jÀêÕä€*/ýØXÊRµUV¯UV¯&H½4-¹½2ˆy ©¬^«¬^Mz59@êÕ䀔· Œ|| ZV¯&‡î0@¿Ú˜š7¥«W“¤^«¬^Mˆy›þÃ:ô\j^«¬^Mz59€j<¦æMiÀêµjÀêÕä�©·LÃ#5¯išÎš¡á¨8øMmÕ€ÅëÃzd^Mzùô ‡É¦4`õZ5`õjr€Ô«ÉR¯&¤¼M¡1k•Ú@­ªæ4!—S×2c5}a‡¬7·Œ&ärêZ¦6—vÄø­ÞÀzsËæâ±j^ŽFÛh¹¨é¹¢Æ‘ä”1(mXËf.®ÊKÿOÅá‹U>NUÍ©+—ë©Ê)Ö6¬\N]Ët®ôŒ G£ +—S×27r®é‰Ú€V X½š õZ5`õJsø…¢±}¼NiÀêÕä�©×ª«W“b^ÚC“•©Úªâ¼R¯UV¯&H½š€š7¯S°z­°z59@êiÔ¨æðš¦ù½ùùË_fÏI|„¦¶jÀâ¥N¦æ>ð¼¶jÀêµjÀêÕä�©—Oó÷ÙzÏ&¥4`õZ5`õjr€Ô«ÉR¯&¤¼M`äkäCzÒ°z59�5}qpxÒ€Õ«ÉR¯UV¯&TyÑhHGS[5«é¹Ô¼V X½š õjr�ÕxL͛ҀÕkÕ€Õ«ÉRo™†Gj^Ç4´â­ˆA•cõjr€Ô‹i4:K›š½©¬^«¬^Mzc½¿ª>·­°z­°z59@êÕä�©W“RަШµJm0©¬^Mz­°z59�ulì!àóÆ|œTmÕ€ÕkÕ€Õ«ÉUÞØQ~›—Ãk«b5o^[5`õJr.Í>vžøÇp½])oJUÞbM¤| UC±ú±Ï…ÅëkÉy%9©·JÓzñÙFg3ËŽ†Ç|œTmÕ€Õ‹ië°«¬^«¬^MzË4þ¹Í‘xAJV¯UV¯&H½š õjr@ÊÛ$³f©¤ÑªjNr9u-3Uó£`P¹EšË©k™Ö\{\öºXs‹HsñX5/G£ 5÷·¯‡÷>¦Þl.#VÓsE#É)cPZ¬^<±'ì˜þax¿ý±ÞÜ2´¹ü9©—.ˆGÇŸ:ÊeµªšSw.Ý!†_£0ˆ\P•3¨\N]Ëf.:ÿT—¡Íå *—S×27r®áÚ€V X½š õZ5`õjr�j´â-:¯S°z59@êµjÀêÕä€*/ZÕëRµUÅy¥Þîôõ°üÊŸv¼›6mÉ÷nŸ S³çÃÂôN¦±6±;šþ›°´r3«3V/eÓ»&6çólηËéé}aÓTÙ)ô[áÚÙ/„mœbúͰrñ³úËÇ>Þž¯Ój[<‹OI͇×=Úr÷n2›&?æ¯æ÷òìÁîómסgÃÜÛ©im¯W¾òdwžÂöZnÍÒ™·MV_{)Û6N½u½­÷o¯‰é…o4‡‘ªµ5ª9¼Ži¸£ µ>ŽÕ«ÉR/¦Ñ|XMVoL£K:`éò) X½V X½š õjr€Ô«É)oùùþ´¬^M š>œè¨àóJs©W“¤^«¬^Mx‹g_@*ðÚªXMÏ¥æíN¯…Þü“¬>qæÍpe5rî;_ û¶nmuø/fõêÂt˜˜˜ ­wî½®œÿ~øÚáÝYýÖµVçõÙôŽƒΜ¿ÜêœçY/Ì µw�Ð%òœkÂìû³º•Òæ7Y½ïðç×gþ,›F–:üo > ¤5S󯵋avj¢5}GVw®¯d5­#¦§'v†é…•LE½zåÍðÂמʦO¿Õr¶¶×_?ù@VG·WéÒpiöñpç¡9¦÷n¯é©mYÛ^@S[4<RãðºLÃE»äݨ ÌG¤j«¬^š¦ƒ©yAÌKH5`õZ5`õjr€Ô[¦áì½øýBâ) X½V X½š õjr€Ô«É)oShÌZ¥6F«ª9MÈåԵ̪šŽJа2´¹œ&ärêZæzrË~ ¬'—#ÍÅcÕ¼hgí {Nýëlƒ¼£?@‡5:üD–ûþÃôŽáØÙ ïÎ[öÌ„¥Vç¿w™7ÂÅÓJŽXçó>°ãÃÂûùôê`%;ËP<b]¤¨Ijz®¨qzµ|»|ä³Gãw§~þ~[ï®c¶‰V²î{­ù “Ç^Ì4Ú^½ÜÈ4Ú^ 'çÆYáO1 õ¬ £'§EUÍÑh¨ùsÚ\ })f)jU5gT¹h4¬g¹œaårêZæ0sé¢ÝØEâm.gP¹œº–¹‘s}HO„Ô´jÀêÕä�©×ª«W“Pó£tä ðy%9©W“¤^«¬^MxéKcu‰TàµUÅy¥Þ|úR˜;¸=ëðµ+K?KWp m^Ó~ªs®µ:—ùQêïÞͽӓPðöËá»gߎjçžy0ì™9ßêæòÜœ¼Î;Ó˜æX>oÜ×%VóÆáuL›ÚÞÚz#,žøHV¿›õ× ëØêðcšŽðƒ<k-\oï<Ü¿3Û^°çZ¦i{}Ю»ä;Hw±…¢·l©7GWk5jTsx]¦ñ ]c×Ç”ùˆTmÕ€Õ‹iú%áªa$ èåH5`õZ5`õjr€Ô[¦ñ›aЭ`Ä R°z­°z59@êÕä�©W“RÞ&0ò5ò!=i X½šPô¢QDz¨q4µUV¯UV¯&H½˜¦F_$œTmÕ@¬¦çRóv§WûgŽfõ±S߯.]‰úú‡ô«Y½iïT˜ŠÑæuL[»4Üy8̽›çpºuïpÀç-÷å”ÕxLÍ×0¤þüHÿÑÉÛGÚ«‡ô˜žjµM›¶gzQãÄj *ÛQÈéßAŠåpRµEÃ#5¯«4ê S#ø4ÐÔV X½|šØ”u0A™H5`õZ5`õjr€Ô+ÉAÓ~Ÿ¦4`õZ5`õjr€Ô«ÉR¯&¤¼M¡Qk•Ú`R X½š õZ5`õjr@ÑËÇ·5ަ¶jÀêµjÀêÕä�©—¦é(j^óR ÄjÞ8¼ŽiKsφC»¶v¼Ù¹Ïý}g^êðǼ¸huócŸÍ¦Ÿ9×f‚zz¢wx‡8„÷ÃÒÌÇÃ]ϼҮ»ðÓ|ˆJQãhjLk¢Ü—wøó:Ka9¨{Žª·‡ôD;ô˳íÿÿ§O+Û^¤ßXš {îúb8÷~ï°)>Ûùàhêõhëñô?…GòTmÕ€ÕÓÐ$Ãz¬°z­°z59@ê•äð£ü\ÍK¤4`õZ5`õjr€Ô«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—S×2¥¹ô%È/åXsFV.§®e"—ÿŠ#ý^ rAUÕx¬š—ÕV¯„¥³‘i4Ô¦t ¸Î»7Ü}âÅðò3»Ã'߈ ÍYÍïdSÃñÿ÷þNaÞØ:Ҩ©Ê‰Õô\Qãôj½×6„ç³ú©3? ?d;%ÔáïÏ] ¿9û»áλdm¯^ÚgMúÆðcüÿ#ÙkÒŸÛßAâ}U5G£¡æÏ­'—¿¸}U5G£ 2—ÎZH®÷áh´aårêZf¹ô}Êo™Ê±æ—Ó„enä\Ã!µ­°z59@êµjÀêÕ䀢-v‹·”¤j«¬^«¬^Mz1M¿†L÷ÝæTy9R ç•z1]6TÓ¸ÐöŽÃgZ]ú¼Žá_»úb8:¹+«ß_|.<°-ÿòä ¦W[Í.òE}‰]³󯆍�>oÜ×%VóÆáuL£!=T_;÷ûaÇŽO‡g>½#«©Ãé¾1ükï†ù£÷eÓWÚÛkîÝZ3Ó±¤µwç¡;e;H)HÕZÕ^K´ÿþßÿ{6-õTmÕ€Õ˧«îʼ@ª«×ª«W“¤^I^—âo?¤¼) X½V X½š õjr€Ô«É)oùùþ´¬^Mˆy鯘Fhj«¬^«¬^MziZr!ˆy ©b5=—𗦳ÿæü¢Û——®dUL_8÷Ípt×}áñ¹’Ûr¶ÏßwwVg®®å÷—ŸÜùTøÚ Ý[|^\ø~˜9œßv“ŽXÓ‘ñcgÿ­ýDj}›;†?cíb˜{<æCëˆéâþ+K/‡ïÿX6}æÝÖ\­íõæÌ'³:º½zvòáO¨¯µŸ]OoŒ1ü�ÿCÔAþýßÿýì¹”¤j«¬Þ˜†7ª¼DJV¯UV¯&H½Òí÷iJV¯UV¯&H½š õjr@ÊÛµV© &Õ€Õ«ÉR¯UV¯&”yù-Å€&ðÚª«×ª«W“¤Þ˜†&ym¬ˆÕ¼qxͧi¨Îç~ïñîeµÚæ{ Ós?ɦ©óØ×&Ú÷à_¹™eaØ¥¹é°ÿžü‡²²¶9ï Ÿ:w©ÝÍ;¶;øJ8¹Ó @]ºÜVãGØ9šÓÅšˆú:cï©Q‡>ÿ{ölÎ;ü˜žè™Z~Ä™·®eÜÔ±íõð_̦©ÃŽáO¨OžÿMû‰þõ•l/€š“ª×£­Ç p´•nAŒGòTmÕ€ÕÓè:¬ªa=V X½V X½š õjrðÛ6¨cgͯS°z­°z59@êÕä�©W“RÞ&ј5Km$VUsšË©k™Ú\jüH2¨Ê)Ö6¬\N]ËdnÙ…` Ê[FUÕx¬š—£Ñ™{æÉ]áÀì…¾;Í€õär$5=WÔ8’œ2£å¿èû¡³áOƒZfUÍÑæòç,¹4<ކZ)úªjŽFF.QN ëáh´ªšÓôeÖ™K¯ ÿaK°ÞÜ2¥ k™9×ÇðGHm@«¬^Mz­°z59 æ¥qâ1ÐÔV X½V X½š õòizmè(?zTÅy¥^«¬^LßzëTxdÛçÂüÕ¼#Ë©òr¤ˆÕ¼qxÒ€Õ«ÕN=ò@8:ÿnå’UVoL£F5‡×eýÈ ÐøˆTmÕ€ÕÓÐ|XLV¯4‡ÎšK½) X½V X½š õjr€Ô«É)oùùþ´¬^M(óò»Â/6šÚª«×ª«W“¤Þ˜F^'¯­ˆÕô\j^«¬Þ|z-¬^^ ß{ùÉyA¿·‹Te5Só¦4`õªµÕwÃâ÷^ ¿èûãuæ2¬Þ2 Ô8¼.Óøç:þ@â#RµUVoLóa=r X½šþcoëùÌV¯UV¯&H½š õjr@ÊÛµV© &Õ€Õ«ÉR¯UV¯&TyiŒkÊRµUV¯UV¯&H½eZì xAJ±š7¯­°z59@êÕ䀢·X)HÕÃЀիÉRo•fñòNWìèw™HÕV X½)­jXOʛҀÕkÕ€Õ«ÉR¯& Æ­9ñ˜š7¥«×ª«W“¤^Mz59 åmY³ÔFÒhU5§ ¹œº–iÉ-^l‘£®\N]ËFnñˆD.(«ñX5/G£m´\Ôô\QãHrÊ”6¬e3—?'õò‹tcg-9E­ªæ4%­lXG›ËT.§®eÖ˯¿*û-NY¡ñrš°Ìœëcø#¤6 UV¯&H½V X½šPåE£uáhj«¬^«¬^Mzc ¥Ž §ÊK¤4PœWêµjÀêÕä�©W“PóÆáuJV¯UV¯&H½1Õ^ói:#†a.Ôñâ”ù€¦¶jÀêi>¬G®«W“P£Ñû‘Ã딬^«¬^Mz59@êÕ䀔· Œ|| ZV¯&TycMmÕ€ÕkÕ€Õ«ÉRo™†£”ô…Îïþ ñ‚”b5=—š×ª«W“¤^M ©yS°z­°z59@ê-ÓðHÃk>Mg*Ѫ\¤4`õjr€Ô›Òbw†‘zS°z­°z59@êÕä�Ôü:Êø¼1'UCV¯&H½š õjr@ÊÛ³V© ¤ÑªjNr9u-Óš[< Y•S¬9mX¹œº–9Ì\Ú!£/÷2´¹ªñX5/G£m´\Ôô\QãHrÊ”6¬e3—?Wå¥bü¯pª|œªšÓ”\úl [–¡Íå *—S×2G•‹»«á9z}ÊÐær¥ k™9ׇôDHm@«¬^Mz­°z59 ÊK_)HÕV X½V X½š õ–iuåÇ´ÔkÕ€Õ«ÉR¯& æÃ딬^«¬^Mzc5ª9¼Æ4í;½U>ަ¶jÀê-ÓøÁ|N/HiÀêµjÀêÕä�©W“PÓY&4ËëRõ04`õjr€Ô«ÉR¯&¤¼M`äkäCzÒ°z59@â¥Óÿþßÿûð§ú§#ÔbG*xmÕ€ÕkÕ€Õ«ÉR¯$.®–zSˆÕô\j^«¬^Mz59€j<¦æMiÀêµjÀêÕä�©·LÃ#5¯1MŸSų_U>ަ¶jÀê•ä ÑÁ�©7¥«×ª«W“¤^M(zÑ´¯ HÕÃЀիÉR¯&H½šò6…F­UjƒI5`õjr€ÔkÕ€Õ«É/ÝÍbËöóü‘ÆáµUV¯UV¯&H½’¼FÔ©‘zSˆÕ¼qxmÕ€Õ«ÉR¯&½ÅšHù@ª†¬^Mz«´*B/Z­òq4µUV¯$‡~d¬ég8R°z59@êÕ䀢—®+Ñ쌂T= X½š õjr€Ô«É)o“hÌš¥6’F«ª9MÈåÔµLK.¾4é 3Õ0º VUsš¾Ì:rù?MLXsÕxôæ­)àÓ€™(jVUsš”[6¬‡cÉ%4^N–9êÜØPLŽ5 JÖ27r®áÚ€V X½š õZ5`õjr@Ñ‹[ºñݪjÔáÇ4‡×V X½V X½š õJrèhQqˆUÊ›Ò@q^oÞšÒè=ÉAÍRpxmÕ€Õ«ÉR¯$͇õtÑÔV TyÑ0ôŒj"å©z°z59@êÕä�©W“RÞ&0ò5ò1üi X½šPôb¼¾ä¨>oÅ&àµUV¯UV¯&H½Ò:ÊFGóRÞ”¬^«¬^Mz59@êÕä�©×ª«W“¤Þ˜†ÏtÊ>s$¿nÕ€Õ«ÉR¯$LJõÈs€Ô«ÉE/ —¥Fði ©‡¡«W“¤^Mz59 åm Y«ÔÒhU5§ ¹œº–)É-ž —6:ÂP—¡ÑªjNÓ—Yg.?ÊÏYonƒÒ†µLÏí§®e#—ß1 ÿèÿq­²^ŽF«ª9MË-ÞZ¹ˆ5h¼œ&,³)¹hx_YonmXËÜȹ>¤'BjZ5`õjr€ÔkÕ€Õ«ÉTó#ÄšFKLsxmÕ€ÕkÕ€Õ«ÉR¯4ÇòwÑÔV X½š õZ5`õjr€ÔÓbíÁìLcH"ÍËáµUV¯&H½’Ú1¢£ýDʛҀÕkÕ€Õ«ÉR¯&½|g¬¨q4õ04`õjr€Ô«ÉR¯&¤¼M`äkäCzÒ°z59 èE‡Ñ‡ôؼš õjr�j´õ¼.ÀêµjÀêÕä�©W“¤^Mz­°z59@êiUíØ±cy9¼¶jÀêÕä�©WšÃ)oJV¯UV¯&H½šP楳V8C49€×ÃЀիÉR¯&H½šò6…F­UjƒI5`õjr€ÔkÕ€Õ«Ée^!C­i^[5`õZ5`õjr€Ô«É¨ùÏ·ó;sðyc>Nª†¬^Mz59@êÕä�©×ª«W“¤Þ˜Æß×UÃk«¬^Mz59|¼8Uæð:¥«×ª«W“¤^M¨ò¢Ñ6ަ†¬^Mz59@êÕ䀔·I4fÍRI£UÕœ&ärêZ¦6~é‘~ÃßKréG‡žþù¬Tn‘AiÃZ¦çöS×2Kg¬$ÆDcº VUsššKG’1¬‡³ÞÜ2¥ k™MÊ¥ÏëÔw©%7†FÖ27r®áÚ€V X½š õZ5`õjr@™Wz¤Ÿ>¤0ÍáµUV¯UV¯&H½š€š7¯S°z­°z59@êÕä�©W“¤^«¬^Mzùtñ‚]IãðÚª«W“¤^iŽë颩­zéµÁA6 É¼†¬^Mz59@êÕ䀔· Œ|| ZV¯&Tyqú·êžüë+žÒ€ÕkÕ€Õ«ÉR¯&PMGhl(àóJs©×ª«W“¤^Mz59@êµjÀêÕä�©7¦i:Rä%ø4jÀêÕä�©W“ãÃzr4µUZoì×Ò¦†¬^Mz59@êÕ䀔·)4f­RH£UÕœ&ärêZæzrñE‘êôûž^š’[ó\FUŽÆËiÂ2=·Ÿº–9È\ÞYÕ6~ ZE­ªæ4976¬g¹1¥ k™MË¥;(¡ã•[D£ k™9ׇôDHm@«¬^Mz­°z59@âM}áú™¬^M Úòw±z59@êÕä�©×ª«W“¤^š¶þF:OØñ¨ > ¤°z59@êÕäÐÐÀ©yS°z­°z59@êÕä€*/¿nŽ£©‡¡«W“¤^Mz59 åm#_#Ò“Ö€Õ«ÉR/¦ËŽôûžMz59 è¥V<ϧ¦†¬^Mz59@êÕä�©×ª«W“¤^>MŸ1šÝGMði Õ€Õ«ÉR¯& æÃ딬^«¬^Mz59@â¥÷9Ô©ÀëahÀêÕä�©W“¤^MHy›B£Ö*µÁ¤°z59@êµjÀêÕä�©7¦‡×V X½V X½š õjr@ÌK¿@ÓM= X½š õjr€Ô«ÉR¯UV¯&H½1MÓ°sK &ø4jÀêÕä�©W“¨¦a=t/Àç•æR¯UV¯&H½š õbšÝ4ƒ“ª‡¡«W“¤^Mz59 åmY³ÔFÒhU5§ ¹œº–9è\Þ‰¤!=`½¹DUÍiú2GKGöÑhxÇš ¥ k™žÛO]Ëd®äÁ8ûX|ãù24ZUÍiz. *+ÎÑä”6¬e657v€¬7—ÐhÃZæFÎõ1üRЪ«W“¤^«¬^Mzcuøµ^"¥«×ª«W“¤^M(zéK„Æô)HÕÃЀիÉR¯&H½š õZ5`õjr€Ô‹i¾ÃkØäÝxR°z59@êÕä�Ô’±â) X½V X½š õjr€ÄËo‡MgªÊæ%x= X½š õjr€Ô«É)oùùþ´¬^MzË4töiÜ!Gâ) X½V X½š õjr@Ì;ÊŸòT= X½š õjr€Ô«ÉR¯UV¯&H½4º`ÃR9N?¥«W“¤^M š�ø°»W“¤^LÓ¼>©yAÑË„¬^Mz59@êÕ䀔·)4j­RLª«W“¤^«¬^Mz59@êÕä�©×ª«W“¤^M¨ò¢òM= X½š õjr€Ô«ÉR¯UV¯&H½|š(Û Çé§4`õjr€Ô«ÉE/ZlXOÊRõ04`õjr€Ô«ÉR/Mó[*óÛÊJ¼Ä 4`õjr€Ô«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—S×2=·Ÿº–Ù”\tèT>ë¼ÞÜ24Ú°–é¹ýÔµÌAæR£'âTyËÐhÃZæ(sˆõp,¹Ä ´a-srÑè7™[FÕ2<7'åõ1üR°Lã7oÞäþo:ZJ·}ãÐÔÃЀիÉR¯&H½š õZ5`õjr€Ô‹itLѪ†‚¢—3 X½š õjr�Õ>¬§‹Õ«ÉR/¦é7$;¹E/g°z59@êÕä�©W“RÞ&0ò5ZÏ~oÞ¼éµä‚=ª‡¡«W“¤^Mz59@êµjÀêÕä�©Ó΀Ž)Só‚¢—3 X½š õjr@Ñ‹æÃzl^Mzù4uöé¢t õ‚AhÀêÕä�©W“¤^MHy›B£Ö*µÁŠ5ª9©Úª«×ª*o±&R>ª­°z%9eó§¼V X½š õjr�Õx,ÓèH)}у²y ^CV¯&H½š õjr€ÔkÕ€Õ«ÉR¯&H½V X½š õjr@ÌÛùOù@ª†¬^Mz59@êihëýed«¬^Mz59@êÕ䀔·I4fÍR)¦á9jœªš£Ñ†•ËÑ.5=WÔ8’œ2š’Kê2¥UÕœ¦çbºX8ZJ_ôtÚ˜SUs¥ k™žÛO]Ë·\N]Ëu. ëÁc k.”6¬eŽC.ÿ¬dnUËðÜœ”×ÇðGHmÀ2 )HÕV X½V ÄjÞ8¼NiÀêÕä�©·LÃ#5¯‡¡«W“¤^M@MÏÅ4~çަ†¬^Mz%9Þ¼¢Ñû£©1†N%ÕDÊRõ04`õjr€Ô«ÉR/Ÿ¦2ºî H½`°z59@êÕä�©W“RÞ&0ò5Zï~"5/ΫÉR¯Ue5Só¦4`õjr€Ô[¥­ÇË‘jÀêÕä�©W“PóÆ¡šÆD£Å~´¤êahÀêÕä�©WšƒGoÞFÑ8šš¦iœxL#4õ04`õjr€Ô«ÉRoL£F¿§Âáõ04`õjr€Ô«ÉR¯&¤¼M¡1k•Ú@1 ÏQãTÕ6¬\Žv™¨é¹¢Æ‘ä”Ñ”\jT—1(­ªæ4=Óźn÷VœTÕœAiÃZf¹eþõæ–1(mXË·\N]Ë´æbºXsªjeņõ¬7· 6¬eŽSnlèÕ r‹µªšã¹9>¤'Bj–ixLù@ª¶jÀêµj VóÆáuJV¯&H½e©qx= X½š õjr�jz.5/Í'½×sÑË„¬^Mz%9Ô¨&bó) X½V X½š õjr€ÔkÕ€Õ«ÉU^z.å©Ó¿üå/³G+N¤| UCV¯&H½š õÆ4jUw¬†¬^Mz59@êÕ䀔· Œ||HOZe5Só¦4`õjr€Ô[¥­ÇË‘jÀêÕä�©W“PóÆá5¦é¢Ýâ—=¨òr¡«W“¤^i©e󂔬^«¬^Mz59@êµjÀêÕä€*/oMͧiXÏ믿žÕšÀëahÀêÕä�©W“¤Þ2~!ÝâV X½š õjr€Ô«É)oShÔZ¥6XQ£F5'U[5`õZ5På-ÖDÊRµUV¯$§lþ”ת«W“¤^M ©yù4}ÙãB^BêƒÐ€Õ«ÉR¯6GêMiÀêµjÀêÕä�©W“¤^«¬^Mxñ˜òTÓÐhèGSCV¯&H½š õ¦4쌡ÆÁåR¯UV¯&H½š õjr@ÊÛ$³f©Óð5NUÍÑhÃÊåh—‰šž+jINMÉ¥FuƒÒªjNÓs1]¬Ë y鋤8o•· 6¬eÖ™[æ_onƒÒ†µÌqËåÔµLk.¦‹5§ªæ@ãÃz¨3 Ö›[†FÖ2Ç1—ÿ× r9E­ªæxnŽáÚ€eS>ª­°z­ˆÕ¼qxÒ€Õ«ÉRo™†Gj^CV¯&H½š€šžKÍKÓ±;u�‰—„¬^Mz%9Ô¨&bó) X½V X½š õjr€ÔkÕ€Õ«ÉU^z.婚OóÎ$Ðä�^CV¯&H½š õ–iÔÑ·xUV¯&H½š õjr@ÊÛF¾F>†?­²©yS°z59@ê­ÒÖãåH5`õjr€Ô«É¨yãðšOW.e^0 X½š õJsðH(›¤4`õZ5`õjr€Ô«ÉR¯UV¯&Tyyãhꘆvüøñ¤¤êahÀêÕä�©W“¤Þ”Fg`Ñb;f)¯UV¯&H½š õjr@ÊÛ³V© Óð5NUÍÑhƒÌ}ìcáÄâJû™.Úe¢¦çŠG’S†)wíBö72—Õe J«ª9ëÎmo¯â{bݹm0]¬Ë MrQX‘AiÃZf¹eþõæ–1(mXË·\N]Ë´æbºXsªjitw4ÉN?(ÖœAiÃZæ¸æ–ýh"gPZUÍñÜÒ!µË4<¦| U[5`õbú·‹Ï…{wüaXxM챚7¯S°z˵µìoD¿‘yË5<Rãðz°ze9ùöÂ{BêMi VÓs©yùôÒÒRLJ/ õ‚AhÀêÕä�©W’Cj"6/‘Ò€ÕkÕ€Õ«ÉR¯&H½ùôõpeéÇaéÊu±¤j«´^z.å©:¦¡ÅƈkêahÀêÕä�©W“¤Þ”Æòã3H½V X½š õjr€Ô«É)oùÕ9¤guùá+‡?ÜñnÞþÑðɽù-—WÂôDþ|±Mìz<LÏý$¬¬­Dõ¬MìΗVn¶—Ø¿¾!ü[8{lwxäÔϺZ;svæKáØ„í›wöø@YÇÔ¼åÚõ°üÊŸvü›6m Û÷îϦ§f/†Õ…i¦ñ¶5ì:ôl6ÝíÊ—óoY¿ñVûÔ泿Óø§ò£ÙÜÛ›Ó¯UéöÊWž »&6gÓh{?ùѰ}ÓÁ0»üëÎs}­óz·¶åìÁÎóœ|#Ühç†ðAXšÙÛѰm‰\ù{ul{á=:¶½€¤æÃë˜FGù«îÖ1 X½š õJsðH(›t¦—gÃTÛWlôúÔ¼ÙÖñ^]Ížêh-ø4jÀêÅôåÅï†éý÷†Í­iÔ›¦fÃ2ÓÃê;ᥟ÷lÎõ{ö?^Zîíh^§4`õv§/†Ù©íbHÕV h½¼q4uL³þ¯‡¡«W“¤^Mz%9ü‡¸¤^«¬^Mz59@êÕ䀔·)4j­R¬¨Q£š­?øq8ùð}Ùôù+׳Žö…sßÎjúBÂôÂôÎ01½ðõ™ùV/‡ó/|5ÞyoV£3‡ñÄDÞ)ÎÉ¿¬¾vxw˜<p:¼u#~ô~íÒl8pçá>íäG?ûR˜ùæduô˽MÑ[¬‰rßZ«Ÿð'Y}âÌ›áÊêZkSüsVïÛº5ë”fóf;@yÇ<÷®…Õ+ycçäãáô[ïgi¹Ö5þƹwYäæbö7bãÔž›Ëá .›?å­ÒÞ<ùh˜œ:Μ¿œÕ+^ ß9þ±°µÕ‰¢y«_ïüo¹cûöp?RÿÛ×É{ïÊjzOnNþž@Û^xO Žm/ ­ñ˜š·L‹å/°jÀêÕä�©W›#õöh­?j꼃roþ~ر÷#áþv‡ŸÏ[îKkÀêÅô›3Ÿ “÷<¦¿órɼŸ:îÜ›ÿŸ¬­ü<¼8ýh6ýóÖç&Á½ñœ.©Z®åŸ{´SžòTmՀŋǔ¤ê2m½Ãz†¡«W“¤^Mz¥9üuæÙX`õjr€Ô«ÉR¯&¤¼M¢1k–ÚH1 ÏQãÄëµð›³¿îÜs*¼ÍMCËŽÎvŽ@­t:ü½9y~ÇäÂÙk·:GÀºßË9ïÿ0Lïè?BŸó›pþd~´7ï*÷:ÙTsb5=WÔ8½Zþá°çÔ?uŽÒçz~„«sºÝáïÏ}¯µ “Ç^êÓPãoÜ1ýÃìoì÷¶(ÍíË¥Fu*í7gñ;?N½]8ºXèxI^ïì}ó_ÿ(œx`wxæÜ¯[âZx!ïÔÌü^a'²Ão²š¶W‘l^¶ãÅéÍIט.ÖeÄrÐègÜ5^ŽF«ª9MÍ-óWåN•­ÝúfXYüã°g÷—Â~ú™§*·ž³ íÿû|§¡ÓzvrûéÕZï÷ÅçÂ;>ΤŽÖß|#œ¼ï^=û?úpë=~-+åˬ®3Vÿ5,|ãó™–·-ážýÓané½ü3°õ?ÖÕ ­õÝ€Ç.ùßvx×Öö<ù™Á#Ÿl}°3D¯·—¢VUs¸†ébÍ©ª9EíŸøDöœeXgPÚ°–¹rÑèsš£ÉåÄ–ÁñÜœ”×ÇðGHmÀ2 )èÖ7Ãå¹'²š:ü¹†£Ö? ÿ°t¥]ç~Ló¾]¦]ÿQ˜¾ëþVgÆ_ê�æ^p-›þÐ3çZ_ 9íýW²é™¥n×®ëkO÷Uï«yãð:¦ÍÜÞéðwõ| k§n òŽf®­…ëíð¹ëݽ§LkýÏÜõñìoìä´éÔ¥¹9e><RãðZ­]ž 7<ª-ýÃϲ³T§_ï3áålG1?ªyç‘ù–’mzôôbøat'2Ï¡íE5Ñ™n¿'¢ZIMÏ¥æiü(L'†¡«W“¤^I5ª‰Ø¼D6uÂûÖ^¯]{5«§t5¬UœHå`úÚ¾Øö™0w)ïÈ®¼ñ§aß¶ƒáÔRú3(¦Íº·õ~;é£éùk4€-×çÜöþEÒ›Ò@´^»^9þp6³xØJtFs×¶£áÌ»´­»<xŸný3æ¾É…ãßy5\X¹™Õ^ýn˜žº»oç ×Û[§4 õÒs)HÕ1͇õȽš õJrèsºø+é)¯UV¯&H½š õjr@ÊÛF¾FuŽájr[xøØóÙ4uæ@wÞüK.>ü¢;Æ“†x ØÕói~Æ «ÝȦï<4ÞíÙáÈéLG:w ¬ÆcjÞ¸¶Þ=s4LN|$«_míìôÿ­ù4?²\ÔúDÞ—fÏþF>/(zS¹œ¢V¥sDÚÚ¥lzâácáÔ‹¯õ]°PW¿Þ3a¶½£xãÂéðè–|ØÖ“z<Ì^ºZºIÛ ï ÔŸ.î õh-$5o^§4º5?z$õZ5`õjr€Ô+ÍÁ#5¢l^ЙÎ:ü­Žc«žh5<n¾'?ÂÚyï´:°¨÷œüqø Ubºì¬�ŸqízX>ó¹¬þÞßÏ„“ûÂs‹ùµ+œ¸7'«³³eù½Û>4™=nšÈë•îGmVßÝ·óœ8ÐÒ†Oi}ë­SÙôÙkÅk«pÆu_6ïzÈÆðOïØ>örá`Éjþ9Ъ{®U`ð:¥­—7ަ.Ó|XÌ«ÉR¯&‡ÎÆÐ¯¤§æµjÀêÕä�©W“¤^MHy›B£Ö*µÁŠ5ª9ñúfXYú›lš¾Lq*qÁÍGCzðÅ“ûˆüÈÏÁ¹K ×óéüƒóÁÞN/¦gö<Øêћ˧‹;У·(z‹5‘ò…µü,Å¡Îié¼zîïÃrkG(›·½óuÉê6Ù4:&›Ÿs—ó#\7Îg#ŸôyS¹ŒX]6Ê[¥­­ü$ÌM?Î.ÚÝ&v}*<÷Ò;y«_ïÿVgÜwßÎíÎ|ÉNd{{á=‘gåði€:¶½€´ÆcjÞ”ÈF¿ÂIÄæ%¬°z59@êÕæH½=ÚÊbVcþ|ïµ5“‡ã¯\iu2óÿ·{÷ýYøéíÿÓ’³|Ti‹Ïí ›7íOÎ]P{3ÚGî7ïz:|ëÜ?wnpðä=÷‡£óïv:Èñç’ÿ‘6|Èë|{u.Ž4|V_Îæ­ÃóüÉp߇Žgg6c:aՀŋǔ¤ê*:’t´ŸSåå BV¯&H½š õjr�j´âQ~Àk«¬^Mz59@êÕ䀔·I4fÍR)¦á9jœªºK~4hNî™ KÙcecøóœcw~8œXüMö¥…šŽRu¹ÎË/îíOÊÇrßÛ^F1—­ìè7ˆÕô\QãHr–ÎþE8¾ïÞ°gæ|va2uÌûsÛ×CÜ}‚iÝñêùvÌé÷¶(ÍíRÔPS£ºŒõiâõÓpö;_Ìjj#y½_íì(Þ ×æŸ[6Ýž<ó/¹¯o'²ûžÈë8™Æv8E_ªÆt±.£,‡î�¡ñr4ZUÍijn™_Ÿ‹#Ñ [ŽÌgõìÔDöm‘1ä�ZÐÖZ;_Ùw_xð¡û³;ýD•·ÃµùpdËCߒȵëáíSw>Ó;(w|º{¥3¤§÷Èy?E-]ß WÏ|:ܱït¸Ø ®Êí¹†‰A¾[K3a÷¿[±Ì^4š5ÓÅšSUsbšuXgPÚ°–¹Qr‹¿ 4¹œ²ež›“òúþ© X¦á1å:Òɤ鵋§Ã¾ÎPù©å«óŸ “Û¾εïŸOG©HkW_̦éH>@=wèþp`Vpä¬äè7ˆÕ¼qxÓbëŽ!9OÈêì:ÿÖº`šw4³y×Þ óGó»u®FhÕÆßH]…l^F§.ËmSæÃ#5¯µZjçîtkççð™íÔé×ûboÖKaî¹ï´ç‹ìD¶¶Þ¨»]«ÞuìL'Þ»„¤¦çRó¦4~jßï÷Ü%VS£šˆÍK”ky§u~IkNGoY·Žá7~NØö}%?»0÷äÎðÀô«áZ¤ƒÜçe >ýèýÜœîºwîñtó¬.~FÒE»]o¯SˆÕÒóÈ–Ç“óæÓ‚1üïÿ0«éŒèèk×Â/~‘ÿ=ÞR h½ô\ÊRu™Æïõ.¹ àõ04`õjr€Ô«ÉR¯&‡vÎÐñ©y­°z59@êÕä�©W“RÞ&0ò5ªe »“¹óðÿ s/ÿ´­Ý +Î…o͇¡,gŸàÅSËyçG|÷m½7<u&óÝwZzõJv„Ó“OýmÏ8ýK3a϶/äó1xÝ™Žtî@YÇÔ¼1-[÷Í„Ã'ÿ*¯!d·(ýfV?>w±s”YF}eéå쌦q±[N¾ð7âF�5‡×˜.æU¾*S­uwîNÎý ¿OÚ¹o=vM>æ–ók/ª_ïþÅl¾Œ¢¶–½'PÓöÝù{§é½Û^@RóÆáuJ¨é(?ÝŸŸHy­°z59@ê•æà‘Q6/ȧWÃåsþlîlVg!«—ÛsùÙ¥‹Ýî~ÑkÿúËðâç |þûmmåÇafþ[%ű÷Ÿy}3üê•ü¶ÂßX|·õ×\—Ogu±ƒ|áôÁì¶œ/¾wðøÜÇÖÈÙ.ÔÙQõMwdÓ¿m?bór:õZÞ ŸÜ÷Åðl¨Q®-½üWá+Gò£¡yv%,žx(«xŸùàÓ'ž ün皬Ë/ï\´‹:ÿìüNö»¨/´ÿÐLûà|8µÿî°i¢÷WÇù4ÐÔ17ަ®Òè:ÖÓEª«W“PÓžÔ¼V X½š õjr€Ô«É)oShÔZ¥6XQ£F5'VOOl ¿ó¹ütl§mÎ?¤³Ëjw¬ú[>¦ûÄ™Êjê¼ÅÚ¡/„·Ú?¼…:¿…e~‡ˆl˜L›\ËÁtÙ~áuðÈá5ÍG”Mª³Îë–ü ˆÿØZþãbù¼ÝëxËÇüŸyëZÏ8þÆÞœê’ÕÙŽL,­ú®$€æ'ʦLËwî¶üÎÓá÷ífo÷–}¨«_ïÞÞê=cÐíìwo}˜çÒöÝùÛÓ‚íÕ™—QV“—Ã딨®:ÊxmÕ€Õ«ÉR¯6GêíN¯†+ ÿwVooÿ ÝòqæÜ¥þÉ’Ï+éE£ü=‹–ïPv/>Í[ÿÙF> ŠÚòKÏ…ý÷lɦюþù‡Î¼íÞÊçi}¾>üû]­M^ÿ¶µsðX6}ê-ºïYz�¯³éÕKáÜÌçÂÞíÝõÚ¼=¿`w1ëÜç >uè¾î˜ÿ‰Ýáà3χ3 üìlëÿýÜ×s½Ý6oÏGàížÏþÔáoÕ¸ëèhm4u™†Ç”¤j‰F·åLÍ b^b°z59@êÕä�©W“¨ÆE»˜Æ‚Ï›ÊIiÀêÕä�©W“¤^MHy›DcÖ,µ‘bž£Æ©ª9Í’»võLûN-Ýîþ —‰šž+jINUÿ™ËAMê2¥UÕm.O 2—ÃkLë2R9€²žzê©ö3]4¹œØ28ã˜[æ_onƒÒ†µLSn6ôm[¸ãÀl¸TÜihcʠцµLk.¦‹5§ªæ”i–a=œAiÃZæFÊåfŠ7Y(¢ÑªjŽçæøþ© X¦á1å©Úª™÷zxëÔTV_|Y¥4«yãð:¥«7ŸÎÿÆmGó±ìœjo‰†Gj^CVoL£í…÷„ÖK¤4«é¹Ô¼)  žŸŸÿîßý»lZêµjÀêÕä�©W’Cj"6/‘Ò€ÕkÕ€Õ«É¥Þkù…ʸ.�¡šÀëahÀêÕä€*/=—òT]¥ù°»¬^M@]v“^[5`õjr€Ô«ÉR¯&¤¼M`äkTç}ø «äÞ| èË¿èÿQ%Pî“×xL͛ҀÕÛÆ8ÝüK™#óæh´õx9R X½q-ß^xOè½9) ÄjÞ8¼Ni�5?­Ïõؼ„UV¯&H½Ò<R#Êæ) X½V X½šPåýÞw_oÓ-Hšz°z59 ÊËGSK4ÖcÓ€Õ«ÉTÓ‘}´Ø™2HiÀêÕä�©W“¤^MHy›BcÖ*µbž£Æ©ª9mX¹í2QÓsE#É)£)¹Ô¨.cPZUÍiz.¦‹ue9üˆÿ.Ž&—SÔªjNSsËüëÍ-cPÚ°–9n¹œº–iÍÅt±æTÕœ*Úk¯½–=b¼8ŽüÓ…üÔ¹,­ VUsn÷\zM4¹œªexnNÊëCz"¤6`™†Ç”¤j«¬^«b5o^§4`õjr€Ô[¦á‘‡×ÃЀիÉR¯& ¦çRóÆ4ŒÝ¥Sùh8OTy «¬^Mz%9Ô¨&bó) X½V X½š õjr€ÔkÕ€Õ«ÉU^z.婺JÃ…úÿñ?þÇlº¬ù-{»hj«Êj¼˜Æ]{b¿’œÊIiÀêÕä�©W“¤^MHy›ÀÈ×hãéŒÊj<¦æMiÀêÕä�©·J[—#Õ€Õ«ÉR¯& æÃ똆/ ú•M´²s‰y «¬^Mz¥9x¤F”Í R°z­°z59@êÕä�©×ª«W“ª¼¼q4u•F?èTÕ¨“Iði0 X½š õjr€Ô«ÉE/½nÅë.ª|MmÕ€Õ«ÉR¯&¤¼M¡Qk•Ú`EÕœTmÕ€ÕkÕ@•·X)HÕV X½’œ²ùS^«¬^Mz59€j<¦æiÊï猚¨òV X½š õjs¤Þ”¬^«¬^Mz59@êµjÀêÕä�‰)HÕe¿Û‹¦| BV¯&H½š õjr@Ì»îBâ#4µUV¯&H½šò6‰Æ¬Yj#Å4<GSUs4Ú°r9Úe¢¦çŠG’SFSr©Q]Æ ´ªšÓô\Lë2 á(¤³_dPZUÍij®7ou7‚OƒªšCZñ3@ÚÊ”VUs<7?CKTù8U5Çss| „Ô,Óð˜òTmÕ€ÕkÕ@¬æÃ딬^MzË4<Rãðz°z59@êÕä�Ôô\j^LïÄCc?Ÿðz°z59@ê•äxó6ŠFï?ަ¦i~‡m#ʦÁ 4`õjr€Ô«ÉR¯&½ôC\4<“¨òq4µUV¯&H½šò6‘¯ÑzÇð{óæMÞ8¼ÆôóÏ?/šðz°z59@êÕä�©W“¤^«¬^Mz59@êµjÀêÕä�©W“ª¼Ú†ñâä%ø4„¬^Mz59@êÕ䀘mèlMì¢jóšÚª«W“¤^MHy›BcÖ*µbžóæÍ›¼|šà·ÝDÇŸ(ÎóƒÒ†µLÏí§®eŽ[.§®e6-—&H[ƒÒªjŽçæ@£×w\ãTù8U5Çss|HO„Ô´jÀêÕä�©×ª«W“¤^Mz59@êµjÀêÕä�©W“ª¼’;ñ€T= X½š õjr€Ô«ÉR¯UV¯&H½š õZ5`õjr€Ô«ÉU^M§÷}'P| BV¯&H½š õjr@ÌË/ÀŽýˆùMmÕ€Õ«ÉR¯&¤¼M`äk´ž!=MmÕ€ÕkÕ€Õ«ÉR¯&H½š õZ5`õjr€Ô«ÉU^ÞÙ§Ó½ 6/‡×ÃЀիÉR¯&H½š õZ5`õjr€Ô«ÉR¯UV¯&H½š ñb8¦%ŽcšàÓ`°z59@êÕä�©W“ª¼h´Ç©òq¬^Mz59@êÕ䀔·)4j­RLª«W“¤^«¬^Mz59@êÕä�©×ª«W“¤^M¨òJïÄ“ª‡¡«W“¤^Mz59@êµjÀêÕä�©W“¤^«¬^Mz59@êÅtñ÷8Ê]Jði0 X½š õjr€Ô«ÉU^ú´²›1Ä|œTmÕ€Õ«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—S×2=·Ÿº–Ù”\êìã‹\z'P•[†FÖ2=·Ÿº–9n¹œº–Ùä\é‘þ2¥UÕÏÍá†]¡ÆÎú@UÍñÜÃ!µ­°z59@êµjÀêÕä�©W“¤^Mz­°z59@êÕ䀢—NÁ5ަ†¬^Mz59@êÕä�©×ª«W“¤^Mz­°z59@êÕä�©Óûº7?~Í•@Mði0 X½š õjr€Ô«ÉU^4z9U>ŽÕ«ÉR¯&H½šò6‘¯‘áOkÀêÕä�©W“¤^Mz­°z59@êÕ䀢—Zq'Ÿšz°z59@êÕä�©W“¤^«¬^Mz59@êµjÀêÕä�©W“¤^>ºGì–| BV¯&H½š õjr€Ä‹Û§bºì e>"U[5`õjr€Ô«É)oShÔZ¥6˜TV¯&H½V X½š õjr€Ô«ÉR¯UV¯&H½š@uñt<ý¸Á§¦†¬^Mz59@êÕä�©×ª«W“¤^Mz­°z59@êÕä�©7¦¡Ó;ÒOcÄ > ¡«W“¤^Mz59@êÅ4šöw@ª¶jÀêÕä�©W“RÞ&ј5Km$VUsšË©k™žÛO]ˬ;—_p‡/ébg¿ˆ47Æ ´a-Ósû©k™ã–Ë©k™ã”[v¤¿ŒAiU5Çssоø[UËÐx9·S®áÚ€V X½š õZ5`õjr€Ô«ÉR¯&H½V X½š õJsø‘8<Ò—4‡×) X½V X½š õjr€Ô«ÉR¯UV¯&H½š õZ5`õjr€Ô«ÉRoL£ƒÔ8¼†¬^Mz59@êÕä�‰—î¨dùíª­°z59@êÕ䀔· Œ|| ZV¯&H½š õjr€ÔkÕ€Õ«ÉR¯4çõ×_ïtöq„Ÿ~x…Ã딬^«¬^Mz59@êÕä�©×ª«W“¤^Mz­°z59@êÕä�©7¥ñN?!õZ5`õjr€Ô«ÉR¯&H½˜¦¦ŠRµUV¯&H½šò6…F­UjƒI5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õjr€Ô+Íá_ÂtÛÍ”7¥«×ª«W“¤^Mz59@êµjÀêÕä�©W“¤^«¬^Mz59@ê•äða‚R¯UV¯&H½š õjr€ÔKÓüW”‰”¤j«¬^Mz59 åmY³ÔFÒhU5§ ¹œº–é¹ýÔµÌaç>ÿüóÙ4>ÐcXr —Ó„ezn?u-sÜr9u-sœsqKÎAårRËž›cÉ¥³¾h˜.RµŒ²\ Ñ6r®áÚ€V X½š õZ5`õjr€Ô«ÉR¯&H½V X½š õÆ4ÅçGlè‡U@•—HiÀêµjÀêÕä�©W“¤^Mz­°z59@êÕä�©×ª«W“¤^Mz59@êµjÀêÕä�©W“¤^Mz1M?ÄÕ„Û4«W“¤^MHy›ÀÈ×ÈÇð§5`õjr€Ô«ÉR¯&H½V X½š õÆ4~'4œb'ª¼DJV¯UV¯&H½š õjr€ÔkÕ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉR¯UV¯&H½š õjr€ÔKÓ4~ ß# å©Úª«W“¤^MHy›BcÖ*µ4ZUÍiB.§®ezn?u-sй¸óý ݉¬7—¨ª9M_¦çöS×2Ç-—S×2=·Ÿº–y;çÒÁ"~VT-£*·ŒÛ)ׇôDHm@«¬^Mz­°z59@êÕä�©W“¤^«¬^Mzišßvþ²Î~ÌKH5`õZ5`õjr€Ô«ÉR¯&H½V X½š õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õjr€Ô«ÉR¯&H½4]u§% ©­°z59@êÕ䀔· Œ||HOZV¯&H½š õjr€ÔkÕ€Õ«ÉR/MÇîÄ$^Bª«×ª«W“¤^Mz59@êµjÀêÕä�©W“¤^«¬^Mz59@êÕä�©×ª«W“¤^Mz59@êihüŽK„¦¶jÀêÕä�©W“RަШµJm0©¬^Mz­°z59@êÕä�©W“¤^«¬^Mziš~4 [yg_¦«W“¤^MˆyñèÍ›·Á7‚O©¬^MzcÝe‰k4¾ÿøñãÙŽt6™Ãk«¬^Mz59 åmY³ÔFÒhU5§ ¹œº–é¹ýÔµÌõæò;ñðÛn®7—¨ÊT.§®enÔ\<ïÍ›·Á·eσ¢VUsF™‹ƒFÔ¡?vìXgºØ°@ .C£UÕœqËõ1üRЪ«W“¤^«¬^Mz59@êÕä�©×ª«W“ª¼t 5´²;ñ€TmÕ€ÕkÕ€Õ«ÉR¯&H½šPôk¢ÊÇÑÔV X½š õZ5`õjr€Ô«ÉR¯&H½V X½’jT±y‰”¬^Mzù4¿'ªQ‡Ó^[5`õjr€Ô«É)oùùþ´¬^Mz59@êÕä�©×ª«W“ª¼ü¶›¯¿þz[Y.¡ÉR¯UV¯&H½š õjr@ÑKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í R°z59@êåÓ|8OU£a>^[5`õjr€Ô«É)oShÌZ¥6F«ª9MÈåÔµLÏí§®ejsùxð(¹¨Ê-£®\N]Ëܨ¹x^“Ë©ZÆíšË©k™žÛO]ËŒÕeþõæ–Qw.†ñ@Ó4Ò£Ëõ!=RЪ«W“¤^«¬^Mz59@êÕä�©×ª«W“Š^ Ûác)7⣤4`õjr€Ô«ÉR¯&½Åš¨òq4µUV¯&H½V X½š õjr€Ô«ÉR¯UV¯$‡ÕDl^"¥«W“$^KgîÕi¯­°z59@êÕ䀔· Œ||HOZV¯&H½š õjr€ÔkÕ€Õ«ÉE/¿í&šwöå^Mz59@êÕ䀢—ÕŸR X½š õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õJsðH(›¤4`õjr€Ô‹iK£;ÄqxmÕ€Õ«ÉR¯&¤¼M¡Qk•Ú`R X½š õZ5`õjr€Ô«ÉR¯&H½V X½šPôò;ñ5ަ¶jÀêµjÀêÕä�©W“¤^MˆyñHàÓ@ª«W“¤^Mz­°z59@êÕä�©W“¤^«¬^mŽÔ›Ò€Õ«ÉR/¦‹”4Ãk«¬^Mz59 åmY³ÔFÒhU5§ ¹œº–é¹ýÔµÌT£ø¸ç1ž£VF*h¼œºr9u-s£æâyM.§j·k.§®ezn?u-3V—ù×›[Fݹt®¦Ñ€º VUsÆ-×ÇðGHm@«¬^Mz­°z59@êÕä�©W“¤^«¬^MNlL%‡×) X½š õZ5`õjr€Ô«ÉR¯&½Åš¨òq4µUV¯&H½V X½š õjr€Ô«ÉR¯UV¯$‡ÕDl^"¥«W“¤^Lã&{öìɦ%ÍÇðËë¢ÖF¾F>†?­«W“¤^Mz59@êµjÀêÕäàC5]¤ËáuJV¯&H½V X½š õjr€Ô«ÉE/5ª > ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀê•æà‘Q6/HiÀêÕä�©—Ok.àõ1ü]4ަИµJm VUsšË©k™žÛO]ËŒÕÔÉǽöé¶›`½¹e4!—S×27j.ž×ärª–q»ærêZ¦çöS×2cu™½¹eŒ2þâµc±æCzt¹>¤'BjZ5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õJr¨Ñk±y‰”¬^Mz­°z59@êÕä�©W“ŠÞbMTù8šÚª«W“¤^«¬^Mz59@êÕä�©×ª«W’Cj"6/‘Ò€Õ«ÉRoL«êôûy]ÔšÀÈ×ȇô¤5`õjr€Ô«ÉR¯&H½V X½’jô!KÄæ%R°z59@êµjÀêÕä�©W“¤^M(z©QMði Õ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉR¯UV¯4Ôˆ²yAJV¯&H½UZYó!=]4ަШµJm0©¬^Mz­°z59@êÕä�©W“¤^«¬^IµçŸ¾GÍK¤4`õjr€ÔkÕ€Õ«ÉR¯&H½šóâ‘Á§TV¯&H½š õZ5`õjr€Ô«ÉR¯&H½V X½Ú©7¥«W“¤^‰öúë¯÷üè#o^[5`õjr€Ô«É)o“hÌš¥6’F«ª9MÈåÔµLÏí§Že/Ž¢{!—¡ÑªjNr9u-s£æâyM.§j·k.§®ezn?u-3V—ù×›[Fr9Њ~ïËõ1üRЪ«W“¤^«¬^Mz59@êÕä�©×ª«—OïÄC÷@æ”yTV¯&H½V X½š õjr€Ô«ÉEo±&ª|MmÕ€Õ«ÉR¯UV¯&H½š õjr€ÔkÕ€Õ+É¡F5›—HiÀêÕä�©W¢]½zµs}šá—×E­ Œ|| ZV¯&H½š õjr€ÔkÕ€Õ˧‹}ª9e^ Õ€Õ«ÉR¯UV¯&H½š õjr@ÑKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í R°z59@êÕjŸùÌg²GÃßEãm Z«Ô“jÀêÕä�©×ª«W“¤^Mz59@êµjÀêåÓü'Ìq¤„†õpʼ@ª«W“¤^«¬^Mz59@êÕ䀘Ô> ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀêÕæH½) X½š õZµâÍ%€Ô›Ò€Õ«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—S×2=·Ÿa,ó…^È4´ãÇWvö‹h´qËåԵ̚‹ç5¹œªeÜ®¹œº–é¹ýÔµÌX]æ_onMÈåÄ–!>Ä s9)×ÇðGHm@«¬^Mz­°z59@êÕä�©W“¤^«,^~?cLƒ²y ^[5`õjr€ÔkÕ€Õ«ÉR¯&H½šPôk¢ÊÇÑÔV X½š õZ5`õjr€Ô«ÉR¯&H½V X½’jT±y‰”¬^Mz­°z59@êÕä�©W“RÞ&0ò5ò1üi X½š õjr€Ô«ÉR¯UZ/ŽâÓxG4 é!“ª­°z59@êµjÀêÕä�©W“¤^M(z©QMði Õ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉR¯UV¯4Ôˆ²yAJV¯&H½V X½š õjr€Ô«É)oShÔZ¥6˜TV¯&H½V X½š õjr€Ô«ÉR¯UZ/:ûtG\œë}›¬^Mz59@êÕ䀘Ô> ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀêÕæH½) X½š õZ5`õjr€Ô«ÉR¯&¤¼M¢1k–ÚH­ªæ4!—S×2=·Ÿõ.wÞ¡{ÓxHãhsË÷\N]Ëܨ¹x^“Ë©ZÆíšË©k™žÛO]ËŒÕeþõæ–Ñ„\N]ËÜȹ>†?BjZ5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5På-þ*!]Ø”òTmÕ€Õ«ÉR¯UV¯&H½š õjr@Ñ[¬‰*GS[5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õJr¨QMÄæ%R°z59@êµjÀêÕä�©W“¤^MHy›ÀÈ×ÈÇð§5`õjr€Ô«ÉR¯&H½V Tyùm7Ñ0¬‡4ަ¶jÀêÕä�©×ª«W“¤^Mz59 è¥F5Á§T kײúЮ­Ùã¦M“Ùãù•›™œòÆ´ÅÙ?dY›ÂÃÏ|/¼ÉŠy‰”âõJøéÌT6=5{1ZðyS9˜^ž=˜=öµ‰éì‘Ãk«:õo†™}ùv›]^ÍžJycÚÅ…ù0;ó¥pì‰G²zza¥­V{‰”¬^«¬^i©e󂔬^Mz­°z59@êÕä�©W“RަИµJm VUsšË©k™žÛe™Ï?ÿ|ö<݉§ˆ%—Ðhã–Ë©k™5Ïkr9±eüjþ³aëæñÙgõêå §>&ûN¸p«=c IîÚÕ¿ _üTÞ9^Y»V.¼Nî¿7«ßÏæèG’K”×k­þòŸ„‡w<öÞ¿-ëðkrsV;þåö3 |™ýh´Þz%«wìýH¸ÓÁN‡ŸåÞ\ '?ú±¬žùæ„©-;³¿È¡¨UÕœ¦/3V—ù×›[Fr9u-s#çúž© hÕ€Õ«ÉR¯UV¯&H½š õjr€ÔkÕ@¬æ·Ý¤Ÿ|Þ˜“ª­°z59@êµjÀêÕä�©W“¤^M(z‹5QåãäõÍð«³_ ¦Ïöê׿³zf郬Œ{sR:â¨ï¼ïd8Ÿä{SàõÚÊBVOÿèõð©íÉy˵ÕlzÓÔl§ÃŸÊ¼¶jx PïÙý¥ð£ŸþE˜juø¥ÞRmu!LOì´y[¤4`õZ5`õJr¨QMÄæ%R°z59@êµjÀêÕä�©W“¤^MHy›ÀÈ×ȇô¤5`õjr€Ô«ÉR¯&H½V Äjº݉ðyc>Nª¶jÀêÕä�©×ª«W“¤^Mz59 è¥F5Á§T±ú™íÍ:ü©y%9׿Ÿ[vÏ„¥[roJ=õÚÕ¬Þ=ýj¸¶–Ù_מv‡?5/(z9R  žÞ½·µ³r5¬-ÏfµuHO‡V‡µé‘åà‘Q6/HiÀêÕä�©×ª«W“¤^Mz59 åm Z«Ô“jÀêÕä�©×ª«W“¤^Mz59@êµj VïÙ³'{D[ZZj+ëÏ%¬°z59@êµjÀêÕä�©W“¤^MˆyñHàÓ@ªXýæÌÁ°ãÀéä¼’œ 美îº78ý3±7¥Þ:?:þÀž? o~ŸM˜ÚÞéðóyS9ùt{HÏÝfuÞ¶„{ö?×3/è÷v‘j�õ+Ç?öœüqÀ¹Ô8ÂÊ›Ò�já§¿Ô›Ò€ÕkÕ€Õ«Í‘zS°z59@êµjÀêÕä�©W“¤^MHy›DcÖ,µ‘4ZUÍiB.§®ezn?’eÒxÐé§Ûn‚õæ–±‘s9u-s£æâyM.§j¨ßœùd˜Üõß‹Ë×ÛÏæhsg§&²ÇM[d½£Ò»hs9¨?ï0óS:’}±Óá×äæÜ +‹žióç/·Ö× ¼šÕ“»þ ¼ò«øĔúWgÿ[¸wߟ…Ÿ¶wVZ{?G›KCz| Ž$·Ì¿ÞÜ2šË©k™9×ÇðGHm@«¬^Mz­°z59@êÕä�©W“¤^«PS£á<Dl^"¥«W“¤^Mz­°z59@êÕä�©W“ŠÞbMTù8±zþøÞpÏþ¯‡7Wò#çDÊ›ÒÂê嬞šÜ¦ô«ì)©7¥Ô¥wÕÉZ·ãŒšàÓ R»ñF8ùÀ½áÈü½·M\ÃÎI{§(ÖC‹J5Ãßž’åP£šˆÍKðù½mœÆÑÔE­ Œ|| ZV¯&H½š õjr€ÔkÕ�jjt¡.›—HiÀêÕä�©W“¤^«¬^Mz59@êÕ䀢—ÕŸR.¬Þ·3<|üŰ¼š×üf¸Xèø^§4×ï…sÏÜî>±(ö¦4P^¯o ?§S¯ýS8µç>›·EJ=µáÏÐÔV PGjDÙ¼ 8ímc4ަ.jM¡1k•Ú@­ªæ4!—S×2=·ŸØ2øx4^NQ«ª99—S×27j.ž×ärb˸ü£¯†ý“»Ã“§ßèêlH‘kkქo„ý[ï{¾ß_cZK½¼þòoò;þdÊêåpþ̉¬>±x-›§Hg™ŠZU]=¤g%,ÊÏ ì9ùzï­B×þ5œûæ72 ;:ø[W¯äÛdòçúþÖ-Z'‡ô¤·=‘ÕÒ“o¯­íßfàÛ«ëí_¯xnbÛ·)úªjŽF‹Õeþª\î-Î[å-£*gP¹œº–ÙÄ\Ôô\UN±æøž© hÕ€Õ«ÉR¯UV¯&H½š õjr€ÔKÓ¸…&ýXó}æ3ŸÉ©qxmÕ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉEo±&ª|œ¼N+é¿è3ïܡ޺ÿa‰Æž·µóÎþ®‰ÍÙã¦Mùã̹K1üÝùËÖ)'¥Þ:ïØö¶Øž|¾­›îûOï\(›±ön6ýÄÃÛÃæÌŸ·‡Ž|=œk_ÏЙ· ¯­@==Á×½Õú†ô¤¶}‹öQýx뿘Oƒ¸Öí¤Óö½Þ|=ÐáÇzõj½Y˜Žnû徜TmÕ�jjT±y >?5Nª¶jÀêµjÀêÕä�©W“ª¼¼q4uQk#_#Ò“Ö€Õ«ÉR¯&H½š õÒ4~—_x‹»ìÄ|4NŸæåðÚª«W“¤^Mz­°z59@êÕä�©W“Š^jT|H5`õjr€Ô«ÉR¯UV¯&H½š õjr€ÔkÕ€Õ+ÍÁ#5¢l^PœNÍ Ê¼@ª«×ª«W“¤^Mxñ˜òT]ÔšB£Ö*µÁ¤°z59@êµjÀêÕä�©W“¤^Mzù4Žî£æ­ø£YÔÉ÷Î~«×ª«W“¤^Mz59 æÅ#5‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°zµ9RoL[—HiÀêµjÀêÕä�©W“¤^LKç©y›DcÖ,µ‘4ZUÍiB.§®eÞŽ¹8º-Öh¬>uò‹wâÅš£Ñ<·Ÿº–¹Qsñ¼&—SµŒÛ5—S×2=·Ÿº–«ËüU¹Ü[œ·Ê[FUΠr9u-³‰¹¨é¹ªœbÍñ1üRЪ«W“¤^«¬^Mz59@êÕä�©Ó’Fc÷9©Úª«W“¤^Mz­°z59@êÕä�©W“ŠÞbMTù8šÚª«W“¤^«¬^Mz59@êÕä�©×ª«W’Cj"6/Áç§ÆIÕV X½V X½š õjr@•—7ަ.jM`äkäcøÓ°z59@êÕä�©W“¤^Ló_È-kÿé?ý§ì‘“ª­°z59@êÕä�©×ª«W“¤^Mz59 è¥F5Á§TV¯&H½š õZ5`õjr€Ô«ÉR¯&H½V X½Ò<R#ÊæÅéÔ¼ Ì ¤°z­°z59@êÕä�‰)HÕE­)4j­RLª«W“¤^«¬^Mz59@êÕä�©ÓtWI{ýõ×ÛÎõ-“£©­°z59@êµjÀêÕä�©W“¤^MˆyñHàÓ@ª«W“¤^Mz­°z59@êÕä�©W“¤^«¬^mŽÔÓÖã%R°z­°z59@êÕä�©ÓÒyAjÞ&ј5Km$VUsšË©k™·[®äè>5Œã§ñþœbÍÑhžÛO]Ëܨ¹x^“Ë©ZÆíšË©k™žÛO]ËŒÕeþª\î-Î[å-£*gP¹œº–ÙÄ\Ôô\UN±æøþ© hÕ€Õ«ÉR¯UV¯&H½š õjr@•—n½©mœTmÕ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉEo±&ª|MmÕ€Õ«ÉR¯UV¯&H½š õjr€ÔkÕ€Õ+É¡F5›—àóSã¤j«¬^«BþkÛó³3áËÇ>Þ¾%«‹¿«±¶r!,ÌçwÆË~ËbbºSµœÞ:Ÿ¾./~7Lï¿7«³6•/ƒ£©coM]ÔšÀÈ×ÈÇð§5`õjr€Ô«ÉR¯&H¼ÅÐ’4:ÊPsxmÕ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉE/5ª > ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀê•æà‘Q6/(N§æe^ Õ€ÕkÕ�êÅ“Ÿû>|yæÏ²zbz!ëðóyo.~%«}y&|sz*›^`?Íç©:›^{/¼9óÉ0yÏcY½t¥úÇï@ª.Óð˜òT]ÔšB£Ö*µÁ¤°z59@êµjÀêÕä�©W“¤^Mx­G÷Ñ^xá…ì‘Ãk«¬^Mz59@êµjÀêÕä�©W“¤^MˆyñHàÓ@ª«W“¤^Mz­°z59@êÕä�©W“¤^«¬^mŽÔÓÊõ‹m}2ì}"¿ýó¦­Ÿ 3¯ü]xþÐ}Y½y×ñðÒåüW¯,üßá™' Û7ç™›6m ÷ì.¼´|=«—gó_=¦–ÿ’4-#oèŒã‘àÓ@ªX½0½³o€×˜ž˜˜îtøS󂢿Þüþâs់h]4u•&¤æmY³ÔFÒhU5§ ¹œº–y»äÒýõ­S¬9Ísû©k™5Ïkr9Ñe¬] oy.Úµµ=:úáüÊÍö\9²Ü‹avj¢ÓÛè¨`heµt½~:3îØ4¦fóNPåZÞñ:xO>lÛKl[Ør«Ö=¯göá58ØîÈu宾gÿ0«ó6~æ{2o„¢VUsš¾ÌX]æ¯ÊåÞâ¼Y½º¦'î÷ùnxkåßÂâs{ÃæMwgÚÊ¥pjß¶°{æ'áV¸–翞;ý¿3m­å_[Y ß=²3«ßÅ`íjVo{r.\Zm=¹ö^xã+SaÛþo„¥Öòe– ÑâõJ§ÃÏß¡ÅyW¦;~YnµwÂÜ¡|ýÙEL¹mbóÒsU9Åšãcø#¤6 UV¯&H½V X½š õjr€Ô«ÉeÞ«WóAm£ |ýn=ºz°z59@êÕä�©W“ŠÞbMTù8y}3üjþ³aëæ³úJ«±zùÃé£y}៷ ¯{µ¼£7!÷Ê5Ð[ç‡w<öÞ¿-9o•öøäCáØì[Û"»<½÷î°ûäÃoÛ:§èåH5€úÍ“ ;ö~$ÜßêðK½|zíêßeõwÎýsXY»V.¼”Õœø‡ð~{ž2/jÀêµjÀê•äP£šˆÍKðù©q:uÖáÏ;íy™mÏ~çhÔÔŽåô-_½ÎýpØõùïfõäÃ[;¥1ïKßû·Þ‘M/¾ßí>óyc>N·–­/uøËsrJëߜͦÿàôŸ…£å;ÝhGÿüÖ{[‘Ó†×17ަ.jM`äkäcøÓ°z59@êÕä�©W“ª¼Ò†_Ö ¿üå/³š“ª­°z59@êÕä�©×ª«W“¤^Mz59 è¥F5Á§LkuøÏ~)«Õ~ >²eo˜Yú áçÎNmïtøµ^"¥XýÜž}aúG¯gÓe;©L_=óépÇžSáíN§b­Õ÷øÝpç}'+½©P¯,þqسûKáG?ý‹¬¦#ü)oJ¨iÝÏß”{S°z­°z¥9x¤F”Í ŠÓ©yÑáG=½°’•˜îvàWò:;bžwØOÚ&Z˜î´ÈÑòµ•<wÓägÂÜ¥|È'¯×²?¦·¶Ï�tµœ¸¯KoÍ×·|ÞÞšœ²y ^czªÕ6ïz:|«µ‹ú¹çÓ÷ÜŸMó£þ©Àë2 )HÕE­)4f­RH£UÕœ&ärêZæFÏ¥Ûj¦Úñãdzqú8@>NUÍÑhžÛO]Ëܨ¹x^“Ë©ZF§¾~.<ó¡¼ÃOÈr1¤g{år8-Z¯] ?šÞvO¿®­åË· é¹®Í?ièðçäg¨Ó ô¹9Eêµk¯†éÝ{³zmy¶ÕÑ1éiÓ­»ÏRûLM[nŽÆËiÂ2cu™¿*—{‹ófuû?uø{~w‡ÈÜx÷oÃSÛ G¿•ÝÎg¾~òÃY]ì<¯¼ñ§aß¶ÂC÷8=s±ôˆ;G£Å뚆ô\›G¶<TЮ‡·O}<ÜqøLÀ·¸)·Ml^z®*§Xs|HO„Ô´jÀêÕä�©×ª«W“¤^Mz59 æÅÑzLÆôãG¸Š÷ÙçÓ@S[5`õjr€Ô«ÉR¯UV¯&H½š õjr@Ñ[¬‰*§´Î+yëFÿAÀë^-ïhßýÐ#a×Äælmÿ‰¿ËoÜ¢Ü+×@^ß ¿zåÂ{þ¤]WïpTiGÑé:ýárgHÏö°gæ|¸ÑÖ9E/G¤­] ¯ÿhVg»Ví¿ÈÛ¢T[[ Î}3«œþY¶î@äm‘Ò€ÕkÕ€Õ+É¡F5›—àóSãtjážå¹'Âæ}§{sZÿ‹¨ïèœÈso¼u:Ø6¾òƯ³úÉm„éåÃZ9¼¶j [×4¤gíílúÉ3ÿÒ9šš:üâœ6¼Ži¼q4uQk#_#Ò“Ö€Õ«ÉR¯&H½šó¢3Ûj¢ÆxüçŸ^ä#4µUV¯&H½š õZ5`õjr€Ô«ÉR¯&½Ô¨&ø4j S·o…‡úÅåêÛàÅ´Åo})œøÆ|8%fpáÜ·Ãñ};®ã/Wz‰”¨^ûÕ߇Ïß{€éékÊr@>ý~XšùXØÜšFµä‰›†áTÿ-«Új?êõ éaNo=ž{åRßð‹roZV¯UV¯4Ôˆ²yAq:5/:ü¨ÓCz~Þ3¿­ås?ü×Öëu=\9ÿý¬¾çŽN‡õêò÷Ãçx$|þE’z3¬¼ùõlzæÍ÷z:È­ÿìn7˜žØó•Îþ\ËáÓ ]jHO~æ ×ÐzqÓØ‘ߵ㿄o,¾›Õ—O‡£»veÓô7LÃcÊRuQk Z«Ô“jÀêÕä�©×ª«W“¤^Mz59 Ì‹‹mQc<>ú€¦¶jÀêÕä�©W“¤^«¬^Mz59@êÕ䀘Ô> ¤èÔ«¿ óÇó¡%o¶ïJ“ò¦4Э×ÂóygfþZ>¶$åMi [¯öݦ°·i”ßËsO…É]ù0˜•µµ°zåÍpæD¾Ca¹à1¥ÑÎIª-·ç¨ > ¢õêåpþ̉05™ß˜€HyS°z­°zµ9RoL«Ò§'0Oþ~ÌŽ~ÃÓþ©üˆy¾ƒ¶ôÝ/„‡Ù™±£ßøQXnu|ûÆô·[Þ¡.¼zެw;Ö4†¿«Åו“×Ý£úý-¿#Í[¶žhÅ÷2]LŒõBMt§¯‡å—ò•¬Mäïc\´KpHÕUšt^š·I4fÍRI£UÕœ&ärêZ¦çöS×2=·Ÿº–¹Qsñ¼&—_F«c»üwaz_{hAv«¿•pñÇo†‹ÆÛQÆê=[žîtø9ëÍíe=cøË‡ñ1ØúÜœX.'«:†äCBî>±º¯d{®ÎËiÂ2cu™¿*—{‹óVy˨ÊT.§®e615=W•S¬9>†?BjZ5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õjr€Ô«ÉR¯&H½V X½š õjr€Ô«ÉEo±&ª|œ¼¾.ÿè«aÿäî¬î=‹ CÈéÞõ#v*~íò«Y}vñb;+ 3½oGçö|~> ¤ˆ×Ucøó! [7M†='_/¬O¾®ÛöN‡¿=¹3dáÜ©ÿv<ð\ßß xmÕ@§NŽá¯Úöùk¶xq¥5g‹ÕËY=5ù‘pbñZ6ŸŸOƒ¸¶–NåëCÛ ôz»G‘±^½Zo¦ãÛ¾˜©«­@Mj"6/Áç§ÆIÕV X½V X½š õjr@•—7ަ.jM`äkäcøÓ°z59@êÕä�©W“¤^«¬^Mz«´õx9šz°z59@êÕä�©W“Š^jT|È46Þ»¯åGµ1Ý¥Û¹+žŠ¨¿ñÌo§®jµ‰=áÈÌ+Ù™>ÌK¤4«û‡äGÊù¼˜Fv릻ÃþSçû4\ÃpþÏ?ê «èý¥SNŸ—!Õ@Vgvòuoµö.©mŸk3Ïì¹Xzâ¡£aæÜzÆðS'=ß^¸°8æå÷z§[?>o¦¥¶=CS[5@5©eó‚âtj^PæR X½V X½š õjr€Ä‹Ç”¤ê¢Ö³V© TÜÞ¼yóÖäV†F«ª <¯ÉåT-ãvÍåÔµLÏí§®eÆê2U.÷ç­ò–Q•3¨\N]Ëlb.jz®*§Xs|HO„ÔŒiÞ¼yóÖÔÆáµUUÞbMTù8šÚª«W“¤^«¬^Mz59@êÕä�©×ª«W’Cj"6/Áç§ÆIÕV X½V X½š õjr@•—7ަ.jM`äk¤ÒÃGS[5`õZ5«é¹Ô¼) X½š õjr�jÞ8¼¶jÀêÕä�©·J[—£©‡¡«W“¤^INÙü)oJU^jT|H5`õjr€Ô«ÉR¯UV¯&H½š õjr€ÔkÕ€Õ+ÍÁ#5¢l^PœNÍ Ê¼@ª«×ª«W“¤^Mxñ˜òT]ÔšB£Ö*µÁ¨Æc™F¤j«¬^«b5o^§4`õjr€Ô«ÉTã15¯UV¯&H½’œ²ùSÞ”¬^«¬^Mz%9Ô¨&bó) H¼x¤Fði Õ€Õ«ÉR¯&H½V X½š õjr€Ô«ÉR¯UV¯6Gêiëñ) X½V X½š õjr€Ô‹ié¼ 5o“hÌš¥6Rqc¦6nUÍÑhÃÊåH—‰Çªy9Uój¼œ&äbºX—¡ÑªjNSr©Q]†F«ª9M_æ°sñH­ VUx^“Ë©ZÆíšË©k™žÛO]ËŒÕeþª\î-Î[å-£*gP¹œº–ÙÄ\Ôô\UN±æøþ© Óè¹”¤j«¬^«ŠóJ½) X½š õjr�jz.5¯UV¯&H½e©qxmÕ€ÕkÕ€Õ«ÉRo•¶/GScºXU>ަ¶jÀêÕä�©×ª«W“¤^Mz59@êµjÀê•äP£šˆÍKðù©qRµUV¯UV¯&H½šPå壩‹Zùùþ´b5=—š7¥«W“¤^M@͇×V X½š õViëñr4õ04`õjr€Ô+É)›?åMi ÊKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í ŠÓ©yA™Dµì‡ï“ó‚¨·Í 4`õjr€Ô«É/S>ª‹ZShÔZ¥6Õx,ÓˆTmÕ€ÕkÕ@¬æÃ딬^Mz59€j<¦æµjÀêÕä�©W’S6ʛҀÕkÕ€Õ«ÉR¯$‡ÕDl^"¥‰Ô> ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀêÕæH½1m=^¢Gkÿð~1š{[ BV¯&H½š õbZ:/HÍÛ$³f©Tܘ©[Us4Ú°r9Òeâ±j^NÕ¼/§ ¹˜.Öeh´ªšÓ”\jT—¡ÑªjNÓ—9ì\<R+C£UÕž×ärª–q»ærêZ¦çöS×2cu™¿*—{‹óVyË€6=1Ñéð2·Œªeˆ¼«ï„—N|"ܳÛ$ÿÑ:[îͰòÖ ™6Ñj›6m}6üùù÷ò_‘naË͉ÍKÏUåkŽáÚ€1žKù@ª¶jÀêµj 8¯Ô›Ò€Õ«ÉR¯& ¦çRóZ5`õjr€Ô[¦á‘‡×V X½V X½š õViëñr45¦‹5Qåãhj«¬^Mz­°z59@êÕä�©W“¤^«¬^I5ª‰Ø¼ŸŸ'U[5`õZ5 ó¾~~ê@V¿øöµ°¶òólúÎG¿~~#獵r@§þÕ‹Ùô®c³áÍ+×[;ïæõä³Ò¿z RuL㣩‹Zùùþ´b5=—š7¥«W“¤^M@͇×V X½š õViëñr4õ04`õjr€Ô+É)›?åMi ÊKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í ŠÓåó^ ³SY½÷‰O„Ù‘ïMaæ•¿ Ϻ/ln{_º¼šÍéüˆ6Zîë²Ú~í@øÚ‹ßͦóù·dÓo®ÜlÏ[¾¾@ª±÷æYý̹_ge¦½ÿÃ0½ãÃazáZ2ðÓÓ¾Îþ*ÿ{ríJ˜?ro6}+{6'•x]¦á1婺¨5…F­UjƒQÇ2HÕV X½V ÄjÞ8¼NiÀêÕä�©W“¨Æcj^«¬^Mz%9eó§¼) X½V X½š õJr¨QMÄæ%RxñHàÓ@ª«W“¤^Mz­°z59@êÕä�©W“¤^«¬^mŽÔÓªôé‰;Â=Gòúâs{[ý»Ãþ™gõ©}ÛÂ|³::†y6Lµ¦QŸ˜[ —Wײéé‡ïž~;ò³ø4j@ëÚòt˜¿v‹iè¤ßŸÕ4ļD¹ö^6mEþTàu•&¤æmY³ÔF*nÌÔÆ­ª9mX¹é2ñX5/§j^—Ó„\Lë24ZUÍiJ.5ªËÐhU5§éËv.©•¡ÑªjÏkr9U˸]s9u-Ósû©k™±ºÌ_•˽Åy³zu¡ÕáߦV²çV¦ÃÄÄt{Þ•°0½3LL/„ü´Ù©íñ1ü­?ꙥ÷ÛO€nNϼ­nöKßû·Þ&ö|¥ õRÔªj´›‹'ÂÝ­¿kÿ!­õ‚Æÿ>mnÎͰòæ×ÃþŸ §ßÊÿîªYnjz®*§Xs| „ÔŒiô\ÊRµUZïìc 'ó7:§ÊÇ)Î+õ¦4`õöj7²zç‰ ×ÛÏȽr Äjz.5¯UVo¹v#\š}"«i{™·\Ã#5¯­°z­Ðz%ÿk U¯G[—£©1]¬‰*GS[5`õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õJr¨QMÄæ%øüÔ8ºÝá§~Lçã¼£Žº·CŒ¡@y‡¿“ÓõÔ¦ƒav9wäz@M~L/}Ð=Ξûrø4ÐÔ4Ý»#“ƒi¾C“ÊEoNÞÙGýù©Î¼Ži¼q4uQk#_£>†ÿ·‹Ï…{wü¡ÚljÕô\jÞ”¬Þ˜vâÞ‡ÂôÂ{šSå%RˆÕ¼qxmÕ€Õ›ÌùíëYMÛ H½UÚz¼M= h½’ÿ5ª­@]6Ê›Ò@•—ÕŸR X½š õjr€ÔkÕ€Õ«ÉR¯&H½š õZ5`õJsðH(›§Só¢ÃšŽðccêðgu_‡8ïð÷ä´ÈêlHOÞáïêé#éÑœ6) ˆ½í3g®ÇÝßöþE2ðº;}=,Ïÿ~Vϼ™ß¡G“x]¦á1婺¨5…ƬUj7djÃöÔ«—²z×Ŀܷùž°÷“ Û³Ž_çÏÅÚÄîìqiåf¾—ZÔÛmסgÃÜR÷¶P´œ gíœúYϳ‹ óavæKáØ„í›»§öº¾œ²Uór ­.ÿ |åð‡;Ëæí ŸÜ{OØ4•ÿSÆÿÆ­ÙcìoÐBë/»vö aÛ#§Ú5hí_üǬþò±O…‡·oéùàÝyû)j©ÓźŒ\k}`¼ò§áð®üoÃÅMÛ÷îϦ§fÏwŽŠÄÚ¡é¿ÉÞ|Ìä¦zO‹ÞZš »Iko[jÚ^oµÞ¹žo¯ùÙ™žíUôrb¹Ô¨.#×Ö¢ï‰,£µÞËÙQ¨n&o»Ós? +­7Eôÿ£x·ýÁŸµÉÏ…ùì `µõôÁ^_±a=ÚcW;­çrªÿ×PÓÿèzûÑhTã‘Z­ª&ð¼&—SµŒÛ5—S×2=·Ÿº–«ËüU¹Ü[œ7«‡4¤‡Žðç” ééE£UÕœL»ùF8yß‹v3Þÿa¦á¢]Bœ»úN¦Ýóðï‡ùeœÇ÷æ›áÇWLNl^z®*§Xs|HO„ÔŒiô\ÊG{¸“S'™ó—[ÿ<7³ú;Ç?¶¶:ü4oÿi§üO_;¼;L8޺Ѿ�†ýƒ¢^½òfxákO…“3oï:¬]ÊÿçÞÍÿ3íæb8ùÑ…ÃǾ”ÕS[ò\î©ÓÅšÓ§}ðãpòáûÂÔ‰¿Í뵕páÜ·Ãñ}weõ2f,œfD‡Óô7bœ\WcËX»f/ÂùMVï;üùðå™? ÓSÛ²š>ŽxàuJ±šžKÍ›O¯…Þü“ððd~«°+«k­MñÏÙô¾­[{>L»G\òúÊùïwÞ¨³÷Íùöë©Ï_Ç»¶ßîèyOådu{{šË?¼r~O~"«cÛ ð,> ¨Æ#5¯;Óí÷êó¸ÍYë=éì=‘u´óyûN¿®^ç_øj8¼3¿;Â,¬}·ˆ¶dó¶É§éîù©dmŠéâ2Š_l+‹Üz͆SK½ÿ'|Zó¿ÖѼ^¶/GScºXU>ަ¶jÀêÕä�©×ª«W“¤^Mz59@êµjÀê•äP£šˆÍKðù©q:õˆ‡ô¼¿ø\x`s~tñýî·vîËáÓ@Sw§?Nç}­ì¶œ«ÿšMoÙ3–únË™_[€×ÐzåúZëkçÕlzç“§Ãùö‡P—íÔhê˜ÆGSµ&0ò5æžcw~<œz;%ÝÑ {ýÿll¾ìöQíJ¶GÞÑ3ò«Ä'½°¿Ú«åÞÓ?Ì:7½Z»îëdçHjz.5o>½~söwÃ{øxP褵Öu‡è½Ö?ÕƒYMûä]m-Ü8Ÿá^(ùà NpO§‘Áë”b5o^w§¯†³ÇòíMk›k½¦´ˆ÷Ï¡£ÇÎþ[ç}sòÄGög^鼯Ó; 'gŽeÓýG¢óíõ@rØIïö|Þr_>]¥çäï Ôo·7D®µº·Þy]v”(ßÜ1ù…p¶}òÑŽÑÆ6¾;«½ó@8õsÚ,.£÷µÈ/Ì:˜¾ífõ.Có¿VµsmÕ�ê²ùSÞ”ª¼Ô¨&ø4jÀêÕä�©W“¤^«¬^Mz59@êÕä�©×ª«WšƒGjDÙ¼ 8š—¾k7±a8ÙYÒìó3ÿ|Â-8§f_jOÇô·ûžÃcþYÇžïù.ëv¬·îÿFg ®åði ©cZ÷‡·Zgçè|qÞü;×Ðzuu~ûÑxc_µYÍIÕeS>ª‹ZShÔZ¥6Õx,Óˆ¬¾<nÎ;ü\ÇôÒ?ü,;ºKu´s×êÞ¢þÐ3çÂõDÇüz«ãwׇŽGµgîúxvå|LË(t²Aé¼mPóÆáuwúfkSäˆRç ^½ò³ðKW:ñx‡(ÿÇÃßxî:ÿ'ù°¨=3çÛGz{× –ì…§4PVã15o¯–ñÚsêŸZ×®‡+Kù-Ñ�uø{½ùü Ódï Lcž×–N…Gî|:«³¡:æg�Šgr~Î=“ï<Ñö]–Ñ{Ä›àÓ V—Íß;o~¶ksk'¶–½'Pç«^~”(\ÿQ˜¾+?³ƒäÞ…>Ž<ê©Ù7Ââ‰dÓïfïÇâ2ò?jYg?¯%ÿkU;×V  ¦F5›—Hi@âÅ#5‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°zµ9RoL[—HiÀêµjÀêÕä�©W“¤^LKç©y›DcÖ,µ‘Š3µq;õÚ¥pæ©|ØÁ©_ K¶P�?šËÖ9j™ê˜gã¹»§Ó�´K³‡;͵;5]:>Ðî„ôUÏ)«ñX5/ÚS“ÛÂÃÇž/¾º÷Ö…È´Èß ¸ópï0 F^wàrwq^N<§ ¯1]¬Ë€öarâ#áØ©ï‡WÛ;;¤ų> ×»Û‹ô¾¹‘e9ô×? ûä®p`öB¸ÁÞS<·8ìp=§ì¨z/E 55ªË€¶öîßö¼'øp—ÔÙ†î‘øÎvii4¤§4šíê‹áè䃭÷†B—‘ï<ø™£ÙÑžmŸÏr•Mú¿†:µsÍÑhTã‘Z­ª&ð¼&—“\Æçó쉅“‹Ý1·D>oïmþzOÅwA½tê`غi2ì9™_´^†F«ª9M_¦çöS×2cu™¿*—{‹óVy˨ÊT.§®e615=W•S¬9>†?BjÆ4z.å¨ç¦ï^´Ûj»>ž{©;~:v47ŸÎ;1›ÎeuiǼ=Dhî2»ýÆù0³çÁìb>o¯êøQõø¼¦‹5§_»V–þ&LÊ/FÎÛÖ°ëÐwçíL£Ã¿9?K@`ziæãá.6œ…Ó­û—Ï›Ö@¬¦çRóv¦×Þ KsÏv|Ô=÷÷­»ng%~„žulÙûæÝ¹ÃaË};Ãý­Ôñ3ùÑgÚ^ W§:qT½MÜ—?Rãðº;¿'Pó‹nñžx‰rå;k]/È;æç.µ¦ËÆð_ç¿–Mßb;¨ÑIÇXNL—‘õßúÉ0óƒïeõÿ5¿œ‘¨‰lÚð¿F5§ÊKTiëñr45¦‹5QåãÄêSûïn½©ë'ú‡Ärð¾Î;üù°®r)ƒÏ÷æ¤4`õZ5`õjr€Ô«ÉR¯&H½V X½’jT±y >?5Nª¶jÀêµjÀêÕä�©W“ª¼¼q4uQk#_£:o˹zå§áìw¾˜MÓTæv}ïŸ!¸ÉŽ~wu¹Ýy÷‰°ØêïçÚZxáýíÎ ÑëkבN6Ôô\jÞr CX^ÎêIº€¦p´;ow¼7þFi¸ÆáÞßI£Èè=‚›š7¯yãðºJ[:ûáø¾{³¡I¨ùYŸ^ïÕ¬¾ûÄb6” ÓÙûæÚ|8²%_‡«Ù¦ì}OÔ´½¨ætëâïÞyË}ùt•Î)jxOà¢v¼'r­ülêcw~8œXÌÇÏwΆµµþ·t‡êd´:ê˜~êÌOÃ{–ùîîܶ-»ÈzÛÑpæÝ|§‚ȧõÿkU;×V  .›?åMi ÊKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í ŠÓ©yA™H5`õZ5`õjr€Ô«É/S>ª‹ZShÌZ¥6PqC¦6l^'†E¬ý"œnuîŸÉ¯ç;´£“»ò[J:à Ë]{7̽¯sÑfÆZ~ö�C;è¨$'ó¬z´e5«æíP¶î-Ö.žûîøt^Ö…€Ö÷7¶ºo8ª íû#)—ÈëîkÁ7qq^N<§ ¯1]¬Ë€{­é‡Ãî8|¦Õ¥Ç¦ˆwØó¡(ù{¢¸S°47N/æ·ëßaÈ·×zǸƒb|ï2b9Ô¨.ZìµÐðžÈï\¶óq3\ÿ\˜ÜöÅp.ÂQ6¤§÷oé7õs¿vìÈßÝeÐXš/_‡mG_Ìv¦zPþ¯¡ŽýÄÐhTã‘Z­ª&ð¼&—SµŒÛ5—S×2=·Ÿº–«ËüU¹Ü[œ·Ê[FUΠr9u-³‰¹¨é¹ªœbÍñ!=R0¦Ñså¾¼£úäÜ:ã÷QŸûÖÓa×äSy©sÖñ®^ɦï»;L>õ·Ù¸`ÔÅŽ9 Ý:y´ëmu;0½g[~÷ÐÕz§jÉQGPÌ)Öœ¢6=qgØyø†¹—ÚÖn†• çÂ·Žæ.g}¶âÙ†übgú{ް¶Îân5D×—Ó­»¯Eo§± ¯SˆÕô\j^Lg¯õæÂá“•×Ú·£<ºë¾ðøÜŬ㈚ï ÎÏäï‰Nß´‰jÙ°“|8'^÷o/Àç-ËÁ#5¯³éìµÎߨóñûù…¼xOL>þ×Ù{5uر.¨é,Ù¾­ùÙ/8[Ùtÿþ·ôéÉXË§Ñø2øŽj>æ¿ã]ÇÿÕœ*/Q¥­ÇËÑÔ˜.ÖD•£©­°z59@êµjÀêÕä�©W“¤^Mz­°z%9Ô¨&bó|~jœTmÕ€ÕkÕ€Õ«ÉR¯&Tyyãhê¢ÖF¾FÃÒ“wâ¶üÎÓá÷ífc”·„{öç±5Öék»Ã¡/„·VòNPß e càŸË¦óNO¾ Ó‡N¾‘Ý…5Ñ™Î:[±<´îmº8±šžKÍ›MgËÛ~çsù°œNÛœwØÒ?.–ÿgÞÊïX”“w´v<ð•p¾ï^º9¨K·m«uÞFÖ—!©yã𚦳¿sËDzš_×±ùžÇÚ?$•¿o¢­ýžÀtvMCçùÞƒžm™u€óa'¨i{,§Cb¹t«µ6|µ*=£ýž@}¨ód­ÖzOìoÿ¸êøûtsv ¦é‡·úçémSSaoÏsÝÜK3aÏæ¼Ãº³]Û-߸‘ù§çhÞAü¯ÔŸR  .›?åMi ÊKj‚O©¬^Mz59@êµjÀêÕä�©W“¤^Mz­°z¥9x¤F”Í ŠÓ©yA™H5`õZ5`õjr€Ô«É/S>ª‹ZShÔZ¥6Õx,ÓˆTmÕ@•wíê™ð䇳—ò!"D•#©yãð:¥«ÓgÚw£A÷55/(z9R ”ÕxLÍkÕ€ÕÛ£­ýKVóa'bo ©P—ÍŸò¦4`õZ5Påµü¯TmÕ�jjT±y‰”$^<R#ø4jÀêÕä�©W“¤^«¬^Mz59@êÕä�©×ª«W›#õÆ´õx‰”¬^«¬^Mz59@êÅ´t^š·I4fÍR©¸1S·ªæh´êÜëá­SSÙXãa/UórªæÕxo½u*<²ísaþj~˜³ž\Ž&Óź VUsª4Ú^TsÖ“ËAMê24ZUÍ©o™¶ÿµêÜ.–\<R+C£UÕž×ärª–q»ærêZ¦çöS×2cu™¿*—{‹óVy˨ÊT.§®e615=W•S¬9>†?BjÆ4z.å©Úªx}=\^œOÎkÕ@q^©7¥­wõòbøÞËùT8šÚªXMÏ¥æµjÀêÅ4m¯â°PååH4<RãðÚª«×ªx½¾ÿ5`õViëñr45¦‹5Qåãhj«¬^Mz­°z59@êÕä�©W“¤^«¬^I5ª‰Ø¼ŸŸ'U[5`õZ5`õjr€Ô«ÉU^Þ8šº¨5‘¯Q·å$¬°z­ˆÕô\jÞ”¬^Mz59�5o^[5`õjr€Ô[¥­ÇËÑÔÃЀիÉR¯$§lþ”7¥*/5ª > ¤°z59@êÕä�©×ª«W“¤^Mz59@êµjÀê•æà‘Q6/(N§æe^ Õ€ÕkÕ€Õ«ÉR¯&H¼xLù@ª.jM¡Qk•Ú`Tã±L#RµUV¯U±š7¯S°z59@êÕä�ªñ˜š×ª«W“¤^INÙü)oJV¯UV¯&H½’jT±y‰”$^<R#ø4jÀêÕä�©W“¤^«¬^Mz59@êÕä�©×ª«W›#õÆ4o£|¤ê¢Ö$³f©Tܘ©[Us4Ú°r9Òeâ±j^NÕ¼/§ ¹˜.Öeh´ªšÓ”\jT—¡ÑªjNÓ—9ì\<R+C£UÕž×ärª–q»ærêZ¦çöS×2cu™¿*×ÛÆiôšrªjŽáÚ€1žKù@ª¶jÀêµj 8¯Ô›Ò€Õ«ÉR¯& ¦çRóZ5`õjr€Ô[¦á‘‡×V X½V X½š õViëñr45¦‹5Qåãhj«¬^Mz­°z59@êÕä�©W“¤^«¬^I5ª‰Ø¼DJV¯&H½V X½š õjr€Ô«É)oùùþ´b5=—š7¥«W“¤^M@͇×V X½š õViëñr4õ04`õjr€Ô+É)›?åMi ÊKj‚O©¶¶r!«g¾üùðÄÃÛÃæÂÌ¥¼å.´þnVon5<âw*dÞ´ºuw9ùïaä¿·ñ7o]‹Þ·<‡¦o†•·Î„é}weõ¦M“ááÏ·ó[œ~o©†ßø@où¯YsxÓVÞz!œ`¿E3ñÐgߟ¯ï–Ê1/‘Ò€ÕkÕ€Õ+ÍÁ#5¢l^Ò€Õ«ÉR¯UV¯&H½š õjr@ÊÛµV© F5Ë4"U[5`õZ5«yãð:¥«W“¤^M ©y­°z59@ê•ä”ÍŸò¦4`õZ5`õjr€Ô+É¡F5›—Hi@âÅ#5‚O©PtßáØ—gÂ7§§²šÿ¸‡×¥ÚÚ{áÍ™Ofõôw^îùås¢ÔÛ"¥žzíݬžþΫáB»S~öä'ÂäÏ…Å÷ó $R94½ö«—Ãñ]ù¯d_^] «—ÿ1œnÿB9~…ˆy ©POõý(ÜZxÿܳéÅßvʽ±œð«Ñ­ »Žµw¬Vß ‹§ñKóÿ¹ÚÛ&¥«×ª«W›#õ¦4`õjr€ÔkÕ€Õ«ÉR¯&H½šò6‰Æ¬Yj#7fjãVÕ6¬\Žt™x¬š—S5¯ÆËiB.¦‹u­ªæ4%—Õeh´ªšÓôe;ÔÊÐhU5ç5¹œªe ž`¿&Í‘å¶:«‹ù/’ŸYÎ;ú@æí§¨UÕ¿9ŽÝ¹Ç°Ì›áê™OgÚÛ…Îý“[>N½Ý¿ãRD£eõo‡³ß}9¼ýß9ù·pöØ®°{æ'áVûQî¯Î†é_*Ì{%«yG”Û¦ªæ JÖ2cu™½¹e4!—S×27r®áÚ€1žKù@ª¶jÀêµj 8¯Ô›Ò€Õ«ÉR¯& ¦çRóZ5`õjr€Ô[¦á‘‡×V X½V X½š õViëñr45¦‹5QåãÄêÕ…éN‡_êíÑÖÞÉêGO¿]Ë/Ms:õµü7f–>Èë|Þòœ[Ùô–=§:þL[ûE8½ïÞpøÌ¿&¼©Ü´x_•F}ê­ø¯S@}î™î΃ԛҀÕkÕ€Õ+É¡F5›—HiÀêÕä�©×ª«W“¤^Mz59 åm#_#ßÖ@¬¦çRó¦4`õjr€Ô«É¨yãðÚª«W“¤Þ*m=^ަ†¬^Mz%9eó§¼) Ty©QMði Õ�ÕÔá—zcŽ®ÿÁé? GšÌêM{ÂÑ?#¬´:ÑU^"¥x}3¬\8—MO8Þº‘÷Úù¼©L¯]}1¼/šy9«W/¿f,lÝ4QéåH5Ð[¯fõ–GO‡ …íxÎÉë•7¿öïøT8ýÖûboJV¯UV¯4Ôˆ²yAJV¯&H½V X½š õjr€Ô«É)oShÌZ¥6PqCzóæÍ[“[­ª&ð¼&—Sµ ÔëÒ³<¦ZÓ¨¿uîŸ[ü•páÜóY}tþÝÎQŽ(·My½ÚZt~‘ë¦Mw‡©çò{åZ~@wgåÃÙã‘;Ã3çÞËæ°å¦Ö='«×Þ§½7š{§g[és[;?ÿo;gìjÙuŸQÿ *ÝÄ@ 7.TØEðvp “`¦S:™q—Ê ØSMåQ3¸P“*» J\X&VÈ¢bš@DpH‚Â`4 Å'³Þ}[³ß=çîû}ß(çí¹ó[pxïÌw×Ú—c Wòõðaÿ7ûê~ã?Î+üîs·g†3·îOù/Ú=Å Ýž½Î¼än}¥gƒÑÜÚꪫ®ºf½zúûtƒsîñ}ãœ×³uÿÂ_é¹þ:̓GO®ÿà°ÿóÃß_^{ëGË/¯ï7Üg¨lß?]þóƒ^ý~÷þO—ö.ú׎:[Û¯ÿååŸkù«?üÛ÷žsnc´A»ÿßÇo/_{í-ÙÝÞž.¿ø›ï._ãð@§þÁaÛ=0Ú uÓ RWé´«Ý7¶^ÛmºNT7Ý u¨®ÓÕu:0rgàÖß‘û•žÆhƒÔu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªëtàØmW»oô¿ƒºA»ÿ,¾ÒóÎ7~kùÖþíêƒæaúéþsnc´Á9÷é{ºüÆ,>Yo=g·_ÿrùÙýß]¾ô'ë»×Œ6x~ÿdyôàðoäÿçúOFîæöñ¿.wÿ–7¾þÝëý“åɇÿ´üüÃ'çÝkF¤nºAêª~¶«qêµ0Ú u¨nºAê:P]§ªët`äÎÂTïjôÀÔ R×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Ó-—Ÿíjô¿ƒºAÏ~îG-çG°Ü»óÚÕïüÕ—Ãk?Yþë'ß[î~é®î?¾ú{òßY¾}÷îÕ}{õáµÏéïGܸ¿þk9üèÃOÿ?üþßüòòÕÿp㵇ߟ,¾¹ÜùÜá+;¿:L7^Üøþ—¿xë«Ëkw¿·¹7Ò nÜÿêï¯î¿óÞ_Ýn½vôì?þŸ.~ïËËW¾õNç>YÞ¿ÿ•Ã~ý'Ï·ýýÖÖž×ï|ÿO»}põûç^ÿ½åûÿ¸Ò¿öð»þì{F÷éǯUÝÑ©ët@uÓ R×é€ê:P]§#w&¦yg£‡älçî{fèöìufu×ìufu×ìuæ¥vùs§Û³uÆÕ¿Õ¿n®®oþåò‹îµÏ>aú¡óν,?:|è<l§W÷÷Þøü¡ñúá¯Èäù7Ý›o[÷?~û;Ë›wï\ý~u=;ïßþÉêµ:Ùî=ü`yþ÷ø@ÿÿ óµåïÿõª³Ý=àl7ï-ç¾ðgË{ÝùÆáµ£gôÞ®×ï¿¿ù=~¶S¶ö!ý‹W÷ýóºá>ûÀÿðÞ³×ÜysyøøæÿšðœÑ³?pì»ïq¶­ûSþ‹vO1C·g¯3/¹[ßáß`ô�Ó R×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Óc÷ø¾qÎëqîÓ R×é€ê¦¤®ÓÕu: ºNT7Ý u•N»Ú}cëµÑ©ët@uÓ R×é€ê:P]§#wnýÕwøÇ¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Óc·]í¾Ñÿê©ët@u¨nºAê:P]§ªët@uÓ RWíð³]S¯…Ñ©ët@uÓ R×é€ê:P]§#w¦yW£älçî{fèöìufu×ìufu×ìuæ¥vùs§ÛsîŒWµÛ³×™Õ]³×™[÷§üížb†nÏ^g^r·¾Ò³Á覤®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§Çîñ}ãœ×ãܧ¤®ÓÕM7H]§ªët@u¨nºAê*vµûÆÖk£ R×é€ê¦¤®ÓÕu: ºNFî Üú;ª¯ôŒ7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§Çn»Ú}£ÿÔ R×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®Úág»§^ £ R×é€ê¦¤®ÓÕu: ºNFî,Lõ®FLÝ u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:ØrùÙ®Fÿ;¨¤®ÓÕu: ºé©ët@u¨®ÓÕM7H]·£º£ R×é€ê¦¤®ÓÕu: ºNFîLLóÎFÉÙÎÝ÷ÌÐíÙëÌê®ÙëÌê®ÙëÌKíòçN·çܯj·g¯3«»f¯3·îOù/Ú=Å Ýž½Î¼än}‡ƒÑL7H]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNŽÝãûÆ9¯Ç¹O7H]§ª›nºNT×é€ê:PÝtƒÔU:íj÷­×6F¤®ÓÕM7H]§ªët@uŒÜ¸õwTßáoºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNŽÝvµûFÿ;¨¤®ÓÕu: ºé©ët@u¨®ÓÕM7H]µÃÏv5N½F¤®ÓÕM7H]§ªët@uŒÜY˜æ]³»ï™¡Û³×™Õ]³×™Õ]³×™—ÚåÏnϹ3^ÕnÏ^gVwÍ^gnÝŸò_´{Šº={yÉÝúJÏ£˜nºNT7Ý u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u»Ç÷s^sŸnºNT7Ý u¨®ÓÕu: ºé©«tÚÕî[¯mŒ6H]§ª›nºNT×é€ê:¹3pë慨Ò3Þ u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u»íj÷þwP7H]§ªët@uÓ R×é€ê:P]§ª›nºj‡Ÿíjœz-Œ6H]§ª›nºNT×é€ê:¹³0Õ»=0uƒÔu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët`Ëåg»ýï nºNT×é€ê¦¤®ÓÕu: ºNT7Ý uÝŽêŽ6H]§ª›nºNT×é€ê:¹31Í;=$g;wß3C·g¯3«»f¯3«»f¯3/µËŸ;Ýžsg¼ªÝž½Î¬îš½Îܺ?å¿h÷3t{ö:ó’»õþ F0Ý u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:8vïç¼ç>Ý u¨nºAê:P]§ªët@uÓ RWé´«Ý7¶^ÛmºNT7Ý u¨®ÓÕu:0rgàÖßQ}‡¼Aê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:8vÛÕîýï nºNT×é€ê¦¤®ÓÕu: ºNT7Ý uÕ?ÛÕ8õZmºNT7Ý u¨®ÓÕu:0rgaªw5z`ê©ët@uÓ R×é€ê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×éÀ–ËÏv5úßAÝ u¨®ÓÕM7H]§ªët@u¨nºAêºÕmºNT7Ý u¨®ÓÕu:0rgbšw6zHÎvî¾g†nÏ^gVwÍ^gVwÍ^g^j—?wº=çÎxU»={YÝ5{¹uÊÑî)fèöìuæ%wë;üŒ`ºAê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu:pìß7Îy=Î}ºAê:PÝtƒÔu: ºNT×é€ê¦¤®ÒiW»ol½¶1Ú u¨nºAê:P]§ªët`äÎÀ­¿£úÿxƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu:pì¶«Ý7úßAÝ u¨®ÓÕM7H]§ªët@u¨nºAêª~¶«qêµ0Ú u¨nºAê:P]§ªët`äÎÂTïjôÀÔ R×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Ó-—Ÿíjô¿ƒºAê:P]§ª›nºNT×é€ê:PÝtƒÔu;ª;Ú u¨nºAê:P]§ªët`äÎÄ4ïlôœíÜ}Ï Ýž½Î¬îš½Î¬îš½Î¼Ô.^W]u}ö×§þŽ·s÷=3t{ö:ó’»õþ F0Ý u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:8v몫®Ïþjÿýjô¿ƒºAê:PÝtƒÔu: ºNT×éÀÈ[Gõþñ©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu:0rgašw5z@Îvî¾g†nÏ^gVwÍ^gVwÍ^gVwÍ^g¾lÝž½Î¬îš½Î¬îš½Î¼än}¥gƒÑL7H]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§#wnýÕWzƤ®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×éÀÈ…©ÞÕ詤®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Ó‘;Ó¼³ÑCr¶s÷=3t{ö:³ºkö:³ºkö:³ºkö:óeëöìufu×ìufu×ìuæ%wë;üŒ`ºAê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:¹3pë慨Ã?Þ u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNFî,Ló®FÈÙÎÝ÷ÌÐíÙëÌê®ÙëÌê®ÙëÌê®ÙëÌ—­Û³×™Õ]³×™Õ]³×™—Ü­¯ôl0z€é©ët@uÓ R×é€ê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët`äÎÀ­¿£úJÏxƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:¹³0Õ»=0uƒÔu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu:0rgbšw6zHÎvî¾g†nÏ^gVwÍ^gVwÍ^gVwÍ^g¾lÝž½Î¬îš½Î¬îš½Î¼än}‡ƒÑL7H]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§#wnýÕwøÇ¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×éÀÈ…©ÞÕ詤®ÓÕM7H]§ªët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®Ó‘;Ó¼³ÑCr¶s÷=3t{ö:³ºkö:³ºkö:³ºkö:óeëöìufu×ìufu×ìuæ%wë;üŒ`ºAê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:¹3pë慨Ã?Þ u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNFî,Lõ®FLÝ u¨nºAê:P]§ªët@uÓ R×é€ê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT7Ý u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@uŒÜ™˜æ’³»ï™¡Û³×™Õ]³×™Õ]³×™Õ]³×™/[·g¯3«»f¯3«»f¯3/¹[ßáßàÝwß½þí@ŸnºNT7Ý u¨®ÓÕu: ºé©ët@u¨®ÓÕM7H]§ªët@u¨nºAê:P]§ª›nºNT×é€ê:PÝtƒÔu: ºNT×é€ê¦¤®ÓÕu: ºNFî Lñ¿(Š¢(Š¢(ŠÿêQEQEQ\0õ¿(Š¢(Š¢(.˜úÀ_EQEQL}à/Š¢(Š¢(Š ¦>ðEQEQÅSø‹¢(Š¢(Šâ‚©üEQEQEqÁÔþ¢(Š¢(Š¢¸`êQEQEQ\0õ¿(Š¢(Š¢(.˜úÀ_EQEQL}à/Š¢(Š¢(Š ¦>ðEQEQÅSø‹¢(Š¢(Šâ‚©üEQEQEq±,Ëÿa´~ëkž‚(����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-5g.png��������������������������������������������0000664�0000000�0000000�00000131004�15030617045�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¥��é���z$šx���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��±™IDATx^íýïoÇçóàƒÕƒ{À ðXÝŠ t‰;ÉjWò%'vr„,x!Ž!{¡V‹È ¾+9ØL ‡º$òæ2ˆ-ÈkfíùÚˆ’⯙Ät Z1Óg “X‰™I+ÛÂX«çóí÷LÈb³{¦»¦»§{úý>˜®®®êêêêšzwUWõ!„B!„Ò!(J !„œÓÓÓC£åÊ!Ä„µ!„’süý4Z–BLX+B!9Çlè› ~oã?¬° %6¬­° %6l”x@ذ¶~À6l”x�ÜÞ}„ÂZBÉ9~ }ÓmëlÃF‰„ këlÃF‰„ %6¬­° 6üzý!„µ!„’s̆¾Ùà÷6þÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀíÝG!¬!„œã×Ð7ݶ~À6l”x@ذ¶~À6l”x@ذQâaÃÚúÛ°aãÁ¯×BX+B!9Çlè› ~oã?¬° %6¬­° %6l”x@ذ¶~À6l”x�ÜÞ}„ÂZBÉ9~ }ÓmëlÃF‰„ këlÃF‰„ %6¬­° 6üzý!„µ!„’s̆¾Ùà÷6þÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅ!Å€O;!„’s̼Ù÷6êÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅ!Å€O;!„’süð¦ÛÖ؆ÖÖ؆6J< lX[?`6l<øb„bÀ§BÉ9fÞlÈ{õaý€mØ(ñ€°amý€mØ(ñ€°a£Ä†µõ¶a£ÄàŽb„bÀ§BÉ9~ xÓmëlÃF‰„ këlÃF‰„ %6¬­° 6üF1BH1àÓN!„ä³o6ä½ú°~À6l”x@ذ¶~À6l”x@ذQâaÃÚúÛ°QâpG1BH1àÓN!„俼é¶õ¶a£Ä†µõ¶a£Ä†ÖÖ؆ ~£!¤ði'„BrŽÙ€7òÞF}X?`6J< lX[?`6J< lØ(ñ€°amý€mØ(ñ�¸£!¤ði'„BrŽ_ÞtÛúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÆ¿QŒR ø´B!9ÇlÀ› yo£>¬° %6¬­° %6l”x@ذ¶~À6l”x�ÜQŒR ø´B!9ǯoºmý€mØ(ñ€°amý€mØ(ñ€°a£Ä†µõ¶aÃÆƒß(F)|Ú !„œc6à͆¼·QÖ؆ÖÖ؆6J< lX[?`6J<�î(F)|Ú !„œã×€7ݶ~À6l”x@ذ¶~À6l”x@ذQâaÃÚúÛ°aãÁo#„>í„BHÎ1ðfCÞÛ¨ëlÃF‰„ këlÃF‰„ %6¬­° %�w#„>í„BHÎñkÀ›n[?`6J< lX[?`6J< lØ(ñ€°amý€mذñà7ŠBŠŸvB!$ç˜ x³!ïmÔ‡õ¶a£Ä†µõ¶a£Ä†ÖÖ؆€;ŠBŠŸvB!$ç˜ x³!ïmÔ‡õ¶a£Ä†µõ¶a£Ä†ÖÖ؆€;ŠBŠŸvB!$çø5àM·­° %6¬­° %6l”x@ذ¶~À6lØxðÅ!Å€O;!„’s̼Ù÷6êÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅ!Å€O;!„’süð¦ÛÖ؆ÖÖ؆6J< lX[?`6l<øb„bÀ§BÉ9fÞlÈ{õaý€mØ(ñ€°amý€mØ(ñ€°a£Ä†µõ¶a£ÄàŽb„bÀ§BÉ9~ xÓmëlÃF‰„ këlÃF‰„ %6¬­° 6üF1BH1àÓN!„ä³o6ä½ú°~À6l”x@ذ¶~À6l”x@ذQâaÃÚúÛ°QâpG1BH1àÓN!„ä³o6ä½ú°~À6l”x@ذ¶~À6l”x@ذQâaÃÚúÛ°QâpG1BH1àÓN!„俼é¶õ¶a£Ä†µõ¶a£Ä†ÖÖ؆ ~£!¤ði'„BrŽÙ€7òÞF}X?`6J< lX[?`6J< lØ(ñ€°amý€mØ(ñ�¸£!¤ði'„BrŽ_ÞtÛúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÆ¿QŒR ø´B!9ÇlÀ› yo£>¬° %6¬­° %6l”x@ذ¶~À6l”x�ÜQŒR ø´B!9ǯoºmý€mØ(ñ€°amý€mØ(ñ€°a£Ä†µõ¶aÃÆƒß(Ö’…sRîsß.åٛݳeîY#»*¸ç¦¥R‘>Oü==}2|ôÛò•~×Ý·_&® ³•ý2Ø3(¥éj=>©ÎÊDyÔÙ×8®oärzî¶ëwN*£ÃnXœÍÁMWßè„\›.I¿†}AN¿rXFúà^##åwÄ=!…&ÄÓN!„,£ lÝVÌmÖ؆ÖÖ؆6J< lX[?`6J<�î(ŽÛr©òˆ#8ûe¤r±±«.·Èpùœ,TOKiЮƒû¥2{Ýñü@¦K[œø—D¬ÈU™]WSÏŒIù…¯Èpß#R¹tÛ´¯È~'ü¢uãƒà¼¾ð©ì/É+ßpD°ßõ í['£WŒ8xãàˆì¯œ“*ÂíZ³\ÈR`Â>í„BÉ(~ xÓmëlÃF‰„ këlÃF‰„ %6¬­° 6üF±ÐÔE_ô—¦e¾¾ã¦Ì–8"ñ†£÷;‚Õˆu¿íNü»¥2×8º!"{¤op·|{úƒÆ> âqð°LWU<VQ;(=ý%™®ŸwN¿{™Àœ¯÷Žjü núd°tÚíuØi ¤ÀDxÚ !„’E̼Ù÷6êÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅB3?-% Á©Èœã\¸T‘Ýû'äú¢ Ô¡¼·eîô7d¤Ïˆ*"1¼a–ðnpQ*#ýÒ3\–ÙúNíeÕ°nO좿+b— ÛF˜%aKH±‰ð´B!$‹ø5àM·­° %6¬­° %6l”x@ذ¶~À6lØxðÅÂã EˆRwHí„~ó¹0'§ß“öH©2í×ð^ì9u‡ë.áÓ£ê�Á» ½ª*B— Õ]ê¹gêߌ.öÚÖ¿/ío %†ÔÃ,Æ„™(O;!„B2ˆÙ€7òÞF}X?`6J< lX[?`6J< lØ(ñ€°amý€mØ(ñ�¸£Xx\QÚÿeyaü+rØ‚ëöŽîÚõŒœ[ì©40&%2{IWÓn/袀u{buènõ´–ÆpáFo«9|Xãà÷¤„(QžvB!„d¿¼é¶õ¶a£Ä†µõ¶a£Ä†ÖÖ؆ ~£Xx\¹b¨­ƒwÒ!/õïQýüuèï)Aä.ö¸Ëþ‰Kî9½©uA[}Gž)Ë;_©OúÂéòÌO/ûÇÑ·KÊç–K`BŠL”§B!ÄlÀ› yo£>¬° %6¬­° %6l”x@ذ¶~À6l”x�ÜQ,<¥÷û/±âNb„øúFJòBå§2»ØcªÂÓœ‰×`ÙÐß>-ËD}_E‡ø®‘‘ÒI'ÞÛîFαû_‘¹÷ÛÑÅkò‹ƒåi'„BHñkÀ›n[?`6J< lX[?`6J< lØ(ñ€°amý€mذñà7е‡û}ç°N0t]f'^–J}½QŸÕ$¨OÀÔ·ü{RBÈ Ú}Ú !„Òa̼Ù÷6êÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅÚ¢þ­èš¥µKq—cqgêM’Æ÷¤½°„EÚ|Ú !„Òi̼Ù÷6êÃúÛ°QâaÃÚúÛ°QâaÃF‰„ këlÃF‰ÀÅÚÂÀ¨gp¿T‡ËÞ–¹éc2:¸.…žRwB#.ûBHKÚ|Ú !„Òiüð¦ÛÖ؆ÖÖ؆6J< lX[?`6l<øbí²07-•’±ŒcõïJ'f“]ŠE×M]<ïòee!Ëiÿi'„BHGц¯n+æ6ëlÃF‰„ këlÃF‰„ %6¬­° %�w#„>í„BHÎñkÀ›n[?`6J< lX[?`6J< lØ(ñ€°amý€mذñà7ŠBŠŸvB!$ç˜ x³!ïmÔ‡õ¶a£Ä†µõ¶a£Ä†ÖÖ؆€;ŠBŠŸvB!$çø5æi´n0BH1àÓN!„ä¿Æ<Ö F)|Ú !„.æÙgŸõmìÓhy0BH1àÓN!„t!üãåá‡ömèÓhy1BH1àÓN!„t?ÿùÏeýúõõF=~ßzë­}-F)|Ú !„.á?þã?äСC‹ ú/|á õ}ÀlèÓhy1BH1àÓN!„t³³³²mÛ¶ÅÆ|¥Rq}˜ }-/F)|Ú !„œªxS|OêÅlèÓhy1BH1àÓN!„ä”k×®Õ‡èjþÿüŸÿ³8\׋ÙЧÑòb„bÀ§BÉ!˜¼ÈœÌ“5ÃÛØ§Ñò`„bÀ§BÉè 5×Ų/è1Íb¬¢=¼YBg+Fú²Žö”#ÍYeVïu–ÓI饄BHNð®= qšGLAŠë rÜ) ’ó’¿ú‚Â;±UÖÐtBDBˆŠRB!$üøÇ?®7êat˜m7d]š½z~Fe Û΃ØCo¾–ß<öìB’…¢”BÉ0IæÚ£ØÎš ÄH–)P‘‡ôåg¤ùšu´gm¸6!¤óP”B!½¡*â`è-Í+ :ô8«‚è7šyÊk-YïDyF:Q¦óúb…’ ¥„BHñNf”‡¡¤A˜‚ë¨fUäuˆi&;Rpÿ‘Ö<¿`!„ÄE)!„’! †TÀÁš­=šLAв,‹kL„tb˜ižÐtg}²# Ã£!N !D¡(%„B2ì:\¿y_>#O‚h/^«5_³†.a“‡™mQ&´ŒsyBˆBQJ!„t4Ôuy>„+̓ 5¿wÌ:ì8/içò0„/¥„BHXÓ:X†`†AEv)ÐôæufXí}ÌÃË ÑyI/!$y(J !„¡ß Lóºö¨³×7×d)̓€ö#O“.C1¡(%„BR"HE,Ïkz1i^¾Íì†Éwò4Ùàò0„ŠRB!$EГ¥½røí¦¥1ò(H¾ Èó½ÈÓdGŠ[çò0„ŠRB!$%ºiíQ/zmy¤Ýò}£yy¡z¨ !ñ@QJ!„$ ħ¹ö(Äi7¡â–'A tØkÞÖ&õ#oßÅšßòryBŠ E)!„’ èA4‡ëv[ãÛ¤yÛ:„4obÚ†œ§káò0„@QJ!„$�zt†QmtwÛ„.¦ Íã,ªy^›ÔíõÍÓË.C¥„BHÌ@ìh¬'rÉ» :1S^Óï%“.C¡(%„BbÄ»öh7Mf¤àštHrž…„^C·Ü£<Nv¸< !„¢”B‰s2#ˆµnl`w‹ ÕžÞn›ù5¯B[GpyBŠ E)!„Ò&ÞµG»aÒ?LA žgÑ­CF»Måq²#Э/ !á (%„B,(Co!Ó*Ôºu²–n¤Ý<¹N';(OZ¾¸< !Ń¢”B±�"Í® 1Э@¸u‹ èŵtã2$yìpyBŠ E)!„50ˆ5LÔÒ­@€ªøîA ôûÅnfmöçnîÁ&„4‡¢”B ™~³Ãw‰Ý Ò‚0)„\7\+z¸q=x™Ð­÷N{µó6Ùàò0„ŠRB!$è ÕÆ>¬Ûg 5)®;Çý¸›EO^';\†bBQJ!„´@¿uƒA¨u‹@ ¢[)Ð Ý<ä:¯“)\†âAQJ!„€ïÚTœi#¿½7ÚÓÖm‚´(ËŽäy²#Àåa)¥¤ã,\ªÈ#‡§eÞu·KÜñBŠ ÆÚ«†ß¢,S¡Ã[»Mý^±›gJyžìàÅ>{\†b@QJ:ÊÂÜÏåðȰŒN\u÷´GÜñBŠÄ*^`èm*ÊL æš«Ý6¼µh3»êؼ¾Xàò0„ ŠRÒ!nË¥Ê#Òç6`ý%·wsaN¦+%ésý¿,s¿•ÊHÝÝ·«"—T€®qö JiúZp|„4àµ1ëö5SvãR)ݼ6©úb%¯÷²h/):¥¤ƒÜ”Ùòvé.ˬ#2ëTß‘²#4ûF¾!§çn‹ÌUd¤§_F*Ï©N–ÁžíRžþ©=&çªøÄG!!ÑÉa`¦Ý6tµÝ.H¾lèÖëó’÷ÉŽ�—‡!¤8P”’αpNÊÃý2\>çÈMðL—¶HÏàa™®‹M·7µï©\rj‹Óeû\VÄG!­Áp]؆†p&3R´Ö­‚ /p}øN±(÷V—VÉsÏ0—‡!¤8P”’Îq}BFû0ô¶Zw.Ì–e¸gŒN\’¹éÊ ¥GŽÈáÓs†Èt{CG*2çîYÄ!„´“¨è„*ø-J/š‚ëŵúùÚµ'¸H=nqzoóŒöpsyBºŠRÒ! ¹ßûeâ:$§+6Ý?о‘’¼Pù©Ì.ž ÜãÃ)Þø!$4Ø‹¶ö¨SæyˆgôÅC7¯MêGÞ';ZNq-„î…¢”tˆªL—¥otB®îžžÝR™3¦'ªž–Ã¥ŸºÇ8ÒóÒ˲ôod¤=ªæ »Þø!Ä4нk Sv{ï¡®ÙYDQ“÷ÉŽ�^ éK.CH÷BQJ:CýûÏŽ°üœ+Ež™½ÑèéìY##åw‰¹ ÕÙŠŒn‘ý—Ãw1 ÒèQ™®^–‰ÑõoGç‘zà™s²°"¾›õÓBˆ †�šÃu‹ÖsŠ$H ³"ͤ¬èdGy¿Ï\†î‡¢”t†ºˆ\'îú²Œé7£ srúðˆ»¬KŸ Ž–eböº{lŸô î— Ü:TöðÏeýâ#„ô¶¨8ÑÆm'NA/±Šò"Ró»Ê".+¢ad@žáò0„t?¥„Bº4ÌUˆÁŠ:aŠ)H!Ћ@ÑÖ&õbŠò¼£/•Š4Y!E‚¢”BH×RäµGMLAŠ^³¢ôë·Ãyþ¦²]t²£¼U×^_”ã"Žr ¤Û¡(%„Òu`ˆŸ9™zWŠÚ-ª Åuëý/²ˆÑÆn! ›ËÃÒ}P”Bé*¼kyÆNˆó" R “ã}¸g·Lv¸< !Ý E)!„®�‚ o4ZU„yRä‡öMãE_F¤[&;(ü¯„t'¥„Br†jêÐ>X—ÿ01)ñE¤,¸vö¨u×dG€ËÃÒP”BÉ5:Ã* ,ﺴ‹Wqr'ýކtÏdG€ËÃÒP”BÉ%_è-Ñ*„HÑz½P.ï¤hiÐM“.CH÷QQªN4–#íý¶ ¿œ³Šô¢ R =çÝð e\tÓdG€ËÃÒ}P”Òh4ZŒØ£ß”Á <Š*¾¼è$OE¤@{Š‹¼6©—nšìHáò0„t…¥„ÒiXÙ¡¥‚qÊ^’æ¬ÃEž•eDóec sHs·Àåaé.(J !$EXÙ¨9\—ËA,a Ò¢÷rmÒ`ºi²#�¡­uëBòE)!„¤ë£h á©“šÀðÍ${À–  ]EJ0Ý6Ùàò0„t¥„’"¬Âƒ¡˜Ú»+úÚ£^tø"Œ‚”k“¶¢Û&;\†î¢”BR„õQ8´ ƒÈàdFË¡ ]‰ösmRºq²#Àåaé(J !$EX5½\{´9¦ eC¼9‘{Ìü1ó¨›àò0„t¥„’"¬‚ÁðKs2#ö�®„‚ÔÍ—n댽º[&;Rt˜?—‡!$¿P”BHа>Z z7¼k²·k%úÍ$Œ‚t9*¶ø"£9:ĹÛÄ›¾”à÷Ä„äŠRBIÖGËñ[{”¬ù¤½È¤Ë1'»áðÍæ@ŒvcÂ}çÌË„äŠRBIÖGKh†e· )Œ Sâ[²íegÞ´¦[';\†|CQJ!)ÂúˆkFÁ¤̧•è÷„ì! ‡>w݆ÙcÎáÿ„äŠRBI‘¢×Gè©Q‘ãÄ$ÁP¶F¿³E>‘pèpùn™ÀåaÉ/¥„’"E®ÌµGÑ0†è"þ˜ßÈQ£÷ð[äðhžáyì6tx2ž>3„ä ŠRBI‘"ÖGJ§½304ŠÙ` y£ùEA òEË_p„G¿åîÖop¹< !ù„¢”BR¤hõ–jÐ?üò»¿æ˜‚”½=ÍáÚ¤vhob·.ŸÂåaÉ'¥„’"E© ¦t˜ “4Ç+HÙû×Í+öˆEGŸËn|ékÒa| FH~ (%„)B}1¥Cè`ÝøíZÜPFƒk“¶‡–µnœìpyBòE)!„¤H·×GæÚ£¦ÝÚè5”‚4\›´=ºy²#ÀåaÉ¥„’"ÝZ¡· ½z} ìÁ ‡  ÒðhO<‡gÚÑí“}уç‹’}(J !$Eº±>‚0Ðo¸ðËoüÂc~wKä“–5bG·Ov¸< !ù‚¢”BR¤Ûê#F Ãwjìé )H1c( ‡æ×&m-{Ý,Ø´G/ÊÉ>¥„’"ÝRA|êd)0 „hPÚ¥ùÆ íÑí“.CH~ (%$‡ÔªåíéßÈÕùš»§ ©UåâÛ32{õ–»£;è†ú½æp];†6”a¤Ñмƒ "í¡/Fºyvl¼ÄкŠõ!Ù†¢4¯ÌOK©¿q]=#™sw“b0?]’þžÝR™›w÷$Cã<n9k»¬Ý’«³o‡™õ2Þ/#•‹îŽî Ïõx:y ñ[­hP¶‡N¦Åá˜íS„ÉŽ�—‡!$P”¶b®"#nøžÍOËÙ;K=S ³eV¿ŽÃy'y»c:÷]©^ü•LTÊòõÈÖu}Ò_švÎàå¢TFúóÔ4ÿãÛ%lºj×åÝ“%Ù±º·‘¦þOÉ/“ª§3±Vý­œ,}FV×ÓÝ+ý[¿,/Í~(Ë»%s¯‘ëûêqõ®XÆ^»”Àõ)5™Ÿû¹<½÷‹"°wݧ寷¯÷½¿i‰Ò%â(k(;ë‹LŠÒL!~ú}ŒkFǤè¥"ÑàÚ¤ñR„ÉŽ�—‡!$P”† .�V}LÖ}l‹”¦?t÷Vefl›|lÝÇdUI¦ÓÒˈS”~$3G–{Ÿ¯—¿+¥‘5MDiaÑ6aÓuWÞ?õUÚð7r|æ²ãK®ÌŒË¾¡Ayüä{K‚³vUNÚ&{Nf®Ür²ð²ÌŒï—¡5ûääeµ&w~w\¸ç)½ú;GÔ^—ó¯~M¶ßóûÝ ÷˜˜¹ù¶ݺIFÆ~$gÑ“X«Ê…©äÐŽuè…‡—ˆÒ.¥Ýú¨@€jºÑ€å·|Ñ¡ m-‡ÝÞ³—&Z&»]äsyB²EiꢴÿïäèØ§eÍÁSR—%7~!¥ ÈÑòÇÏ¥µË2}üIytë:éuÏÙÓ»QvŽýLæÜoÿ–‡DO×-©Îþ@J;7ÖÃô’×®¸âhþ=9õôc2Ôïöüõ¬–¡=Ë_ß·ÆmØ«P8.ÓSÏÊ·¯wÏ; [½ºxÎèTeº4˜QjÒ,]’“{7ȶc¿5z<ïʵ“_¾mÇä¼î¼vRö®úŒ;o !­ý›œ|l£ö†œ=zÿÒ½®ó¡sîOÊÇJo:r7njòÑä—ä3u¼B°qýZžåÇÌ íÅí>,ƒ½Î1«ÿZʧ~*ÏîÙ´T¾æN-ý^ÊK÷\¾ñ‚&¢4D¹oôzº~^óĹü ê)½%sËʼcýŸ½OÿÜ=§æ…³ÿ³ÿ$¯ž8,{†V7ܽ›dϱ·Wô §EãºòQõ¢WÁ\{ :öPEG—0Ñ<$vhO=‡=ÇG&;\†ìCQ‚†(-ÉéÙcrÿ=ûeâú¼\Ÿü²¬y`\ÞýEï!J/ÉÄ7¾%ã¯þJ.Vï:;îJõÝ—dtýZÙsâ’!–êÂwÈWŸýGy`ó#ò­‰ßIõÎïåÄ{¥4y¥.”^ûÒØñ¤¼8õ‡zºVýƒ¼ñý¯ÉÈêÕËE©sm½ƒËw~‚^=眿~VFVm–Òôõƹ"“GQzU&F7yD©“gÇeǪ¿•“×p?®OÈhŸG”ʹ8þ¬Ú{R{pƒ2:qµîj°àÝ/};Æåbìbæ®\9ñ¨ô®¥5™¿úùåìÕ•×[/?>â±.þVÉúÑ—äÝê¿ËÌ‘íŽh[+;ËŽ»3+Çv¬‘áò9çjò2(^-k¾¢4l¹Zv‚ŽŸ—+¯’¡åЋoÈœs±gyƒ }é§r¥~R}>údýî19¡=è§ž’­«vÉø…ÛõØÒ¦Ýú(- ¤ÌÉŒ(ì@¯²æ#©=¦¨ ñ2‰|-Âp|}©Áï‘ É&¥!PQ:}缌?°Qö|ÿò£Ç†ä¡Ê¹£~+U’K³Æ¯¬ù¦œšóö½ÕäÆô×dÃúÉ÷]1µˆÙPwÝCOÉt] (í ÇV¢t@Ön¹©×Û+–ÍÒuW®M|QÖ}^ʯÿÞç¾[i 5EVí²Lì»OÖíù޼~¡*5 ß­<ÙøU×Ý[;äˆúj=ˆ²Xïµ=µË?’ÇÖÈÖÏÊ«o̶žU·©(\Lûò4›ù£(õÅ/þ˜DéSrpÍ&Ù7qyù‹‡ÚµWeßÀ'Ýaönš·–eÖÌOO¥M»õQÒ Aª0ô¤ð;,;LAÊ!§í¡e’Â>^Š2ÙÐ!ôÝþ -!y…¢4K ûy¹|b¯ôm”ûîÙ+'.Ï/oô×'Ú9²4LÐ0ÿÆÿC2~ñŽ»ÃÃG·É½§Z   IŠÒdæù§dìø„çÛÇ 2tèuy?Q]Ú,]µåì÷þ^¶ÔÅr¯ô=&ßüÖßʆ{ÉÔ­¥„ÕªïÈ÷öms‡ˆ®–¡½OÉ·F‡–ò;@´$)J뽋ƽgغŠáÚß”×V¼´pÈ’( ]îã¥õ Æîù’L~äWØ®ÉäM²éè;Nޤ™¢4®=¦ EžrÈ =È;ÍK~Ï/ÈOäk„šYޏ< !Ùƒ¢4ËöõáŸ=Ò÷ØI¹æ´‰— Ö“ûdÍÐ~y~ò×nO†_¾-Ç÷®‹Ðø7e¶¼]î90)¹{üé„(õ£&wÎ>-›û0´yÁÝ—QÓu[.Œï’¾='är3±\s{À‡š"ÿ6ÉÞ“ª»$9|×,Ÿòº¼xèAØV–YcÖç:™¥QÊ}<¢ôîÙ£²Éó¢a‰eêà E©ÚcCíۿ1K ÒxaW²ès_„rÊåaÉ.¥!ð6ìgO”e|æß{rb÷zÙ1þûeC kÕyzÇêàßø¢Lè·µêå÷ÿŽpY¥ÐuÇd[ÆDiíúRÚüIybòʲ{²œ»rýͧdós¨tÊ5I+¾‰Ub¥Ë{ãïJuú)Š$J£”ûxDiÓá»×OÉ¡ ›åàžOŠÒ0 !ª3S°MeÙCA\›4Y4‹ð"ŠËÃ’](JC°¼a¿œ%¿äÌÑOKߎoÊ/êK\‘³?þ¶ìºOï»7¢(u˜èhêÅ’ì\¿F?ï4ÈÓ¥µ+oÈsßý¾LÎ\tg/½%WϜҎ ²yì—†ˆsY8'åá>éÙxDfnKÃp„¥µê™>éäýà@“!ÅŽ�»øK9ùÇepÕ9têª!pœœ½ð=Ù¹¸$Ì-¹ò‹oÊŽ¾¥<ë³$ÌͳrlçZééPŽÎXL.UI÷ÈàÞoɉ׵·ÑIß…)y~ß'eàsß—9ï5´-J13ñßʪõ'/½{]jXöf∌Ô×x"J£”{,£´EVé±(;g"ãcË–Ý/yâAå¸ÙDGkeà±ò^=)J[F¨ (ýíªÃŸ)Hã""y´÷°(ksyB² Ei+êÿFø0­7øÕ ßê9yé‰O¹ûz¥Ë~9>ý[9å ?5e„Yf>K_Ì¿'Så}î7’8¦OÖmÿ¢”ë³ì¢Áî.yQ7·‘m¦¶BDÑ,Kñ™¶”¶ÚÕ7åøÁÏËÖuŽÐTÿþm2Z>å;ÑQí¸<Ð{¯Üì7bׇ.] £ùïI?'¥ç\ál°,ðÍæa91û኷ú’#¯‘ëÝëìÿ´šø£!° T”®Þ-Çf-„N]$­‘Ï~ñKË¿ËÄR¥ȬNbå½·ËÌ’õ¸–Ü‹e´^4/Ý|›¿$¯•>#«ëá<ÛúeyéÕ’ÏÖÝ8æ|CÔ-žÃcnÙª…(÷úÜÔªoË1wyš†ß°ì>ø¬œœ¾àÞ+o¹6ͼßXæÝ2°ä¿¬zãñä‡k­^p$ž»ÓhCÅoõÚäú¤ñÀµI“G‡G%¹< !Ù„¢”$Hcb¨U«>'•÷ü&t"¤xtº>Bo“Š'Ä)fíá¤øñÁµI“§H“)Z®8:„ì@QJk‡®[œŠÒÙú {®‹_Î@Ù>¤ÉÁµIÓC륢¼ âäY„dŠR’µ+2óÃ2y¾ù„‰NÔGhhškbb~Ÿú}iüpmÒôÐÉŽŠò¢ u¢¾ ãË9B²E)!„¤HÚõ„’Uƒe2“4PÑDA?¦h`Þ&OÑ&;\†lAQJ!)’f}¤“ÄÀ L¹öh|˜=Ïìi‰¯LÍï" 4ÎìLH¶ (%„I£>B/“ǃqíÑx1)'àI͉hÒ½ÑÈï¢}¿«åŒCÄ é<¥„’"I×GèµÓaø¥hŠ ÒäaVg(bžsyB²E)!„¤HRõT\{4Ytˆ#Œ‚49Ð;Š<.ʺ™Y¡h“)\†l@QJ!)’D}ñé]{”Ä iz¨H`>§K';úlóûeB: EiBÔªåíéßÈÕy.ÐIY"îúo÷Íẜt'~LAÊoÏ’Åü¶‘Ã)ÓEËyÑf£E9Ó:”õ'!ƒ¢4!æ§KÒß³[*sóîƒù«2ûË`ÁÚ‹4÷ËH墻ג¹ŠŒ¸×ß_šŸÔƒ¥¼”ÒtÕÝÛ5çvÿF~9{•yOêÄU¡!¥“tÀÐd#>~(HÓE¿Ùe^§OQ';\†ÎCQšMEi](ø-rQ*#ëÚ¥uª2]ŒG”ÖªrqzB*å§äÀ£÷˺Þ&âmþ’¼6ö°¬ïEþ÷ÉúGäµ¹[®ga7÷3Û¹Qzq/{7ÊαŸÉ\R½ÐóÓRêK”Î;·{·ôŒTdÎÝ“4µê™ž¨HùëOÈ£[×IoI¦mo|íº¼{òˆìZí>G²eß¿ÈÙê]÷�pWªïþXÆö »‚¾Wú·ü½|ïì‡Î‹Ê-¹2ó’”̸¶’¼{Ý"®l¶>ÂA søéG¿…JôšhS$¥ƒöXqù¢Î å½hLqr-B:Ei'ȳ(½;#G?ý ì=𔔟ûªŒô‰·ò»cÉ=Û¿&¯žwEõwòjé¹çãò»;åÅY9öÀÙ^zEÎWïHõü+RÚ¾A86+wÜCb%ç¢ôîÌÓòéʯ—å¹ÒˆôY‹Ò»òþÄßËêÞOÊÊÛõžýù+¿’ñ}Ÿ”]/Ê…÷°÷_•ÑÕ÷ÊЊœ¹z˹äË23¾_†>/• _BÔ.ËOž•Ò‹oÈGøÖª¿—É£ËÀæ#2s£;diØúHE§W y×ådFÉ€|UDAšü¶¯óu²#Àåaé,¥­0†¿öx÷¦_]t4ÄŸž¯ÇGx. õšw¨®+JŸ?%Så/Êöu}ãú?-‡&þQ\š¢ÔIç@3ñv÷9ºi³œúÀÝápãRÚð çøëîŽpÜ={T6­yR¦EIMnLM6|̹·*õëºOþ¡òCyzï'Œ»/ËK³fïß-¹2ýœؾ¾ÑƒëXïú]R:qNªõƒ¼åÁ´åe£võM9~ðó²Uï³c½ë–±×.µõ"¡^ÞÚ¥“OÉC¥IyßÝSçú„Œöm—òì͆ûýI)=ô”L¾oöž^•‰Ñ2\>'ª][çW�MÊ{¶Éѳ7ÜùFïo3Ì!£04’ðöÞœÌû8\7LAÊ`ÓCEAÑ&ÚÉEìpyB: EiKœ6ø~éÛvLÎ×Î7äüɲŸþ÷†8A½¿L\_jz×iÖº§´ßI÷=2¸÷ÿÊOÐÛX».¿.ï’U‘Ř)JoÉÜÄ?ÊÖõ»¥|Æfx¥A3QŠkìóæ „Ê}²cü÷ÎÛÑ}£²LÊÖ…ÑC2~1¾Òúu¡Ì¬•‘±ÉÙ«·¤VýƒL=Þ¿ÏÉø»GŽ`;õUÇýŒ<Óø>¸V• SÏɾ¡Ayüä{î5†ë)­ÍýD¾qd\^¾Ðh6ûÒßÉúU{åÄe{YÚž( àÖ”¼×¥¾|(S‡ Q6¿|ðŠàœÓª>BcÈš«ö_ÿë­ÿ¢ÁÑJ’Á¤x ÀÆi:pød6(êdGŠÖ½ü$‚ô¡( AÍX;ûþVN^»ëö�®rERMn9þµ;ÁámQÇ"J×ÈPéôò^¤Pa½¸¢ô«?–™ñ/ÈÐæW½ßv. 1óúÛD”Þ“µ+Ä)ŽÃò‘ÌŒ}be˜f‚¸]êq÷ÊÀ¾WåÚ²ûú¡“þOÊšƒ§äÆÂoäØýŸ'&Ý—‹ÔäÎÙ§eópYfëj¬á»žk îe‡ùçE좴ö¡œ)ï– ˻ðïJõÌ3²sÃ#®€w_&N<¦äy nz¾|¡÷,sx®×þê¯þŠ ö¡ íº6)'šé,xpð!'¤sP”†¡ö[9¶mPL^“…Ù² #¾{¾$“ÝÙòƒž!Š.±ˆRŸoJÛ¥½ýýroÏyìÄ…¢° M„¡¿²¥a¥ê÷{95¹5uHîÝtTÎþÛ Ù]ŸÀ)Àz•W0œ5dOiõ·rrìrÄðò¸Ú»ÆXEi]þµ ù¼ÔXĤ[ä‰WaæWÂæ—âæ[Ý­Œy=¹‰­RF¯Ùˆ EAÆï’ÁÌ{ ÒôÑ*Žè<Z×ñ˜YpyBÒ…¢47äìÑOÉÆ±7ä·ã»äž¿ùŠ|eø“Rzó©ì¼ß >ßHfP”öí©Èï/¼"Ol¾¹`°¥™0D:W¹½Ë‹Øß]µ÷¤,û{L|øn Qzå¤ì]æü!Dií=9ùø  í{N&—޹%WÏý³ì½'#¢tþ2qh»¬ßùŒœY6ó®I“¡á×Âæ—'ÎþHÆF6ÊPé §$çŸfõ‘~ÏÕÊ(Lã Qý^—‚4}ÌÞ9æ}ç)òdG€ËÃÒ(JCQ“&¿$÷lþ9ððì=ù[™Û&›¾üÿ‘Çý¾'¥ÞF,¯ò#Ù·q§<ýŽ!êBleãWÍ·w³™(ÍýDG½²æ‰×äº}íšLú¤l(ý¾»^ª\X.¾VB”Ö{½‚í®Tßù¿²cÕRþvfø.ÊËO¥´cP¶zµÑ[‰eÞ>#MqŠåJŸ•õ[ÿQ&꽨Nú/ž‘·/Vù:¿üp_¬“™ =œ#ôžy1¿© ch8‘ö1)EQgÀKä?_¶dƒ"Ovø}3!¢4,õž'wâ|Kú1'Î^¿ïIA3ñxû-Û¸Fv™’+häÏ_‘³ã2öØÙ½(B“¥À 3ß”­¾('­Ö ui&Jå¦\ß½´$ÌüŸäG>#}ÛÊ2»âÛÀªÌÛ-«{dÛÑ·dÅ«ó¿“ñÝ%aî:Ù5%Gv¬“må³>KÂÜ”Ùòvç~o‘±Ë~µEމŽ^­ŸKÚL|ës²~Í>9YŸxè®\ó)Ù<ð r—/©÷êÍþ\N<=*[¾àö×äöÌÙ¸ê3räj¼¸zV&Æ¿.my¼qo¿-G‡×.–‡ù«gäÇßy\†î”û QjCkQZ“›³ÇeçêUÒ¿íiϲ+·äʛߖÃòØø;Kß6/»ïX&æ yÚ¹?ƒë—®,s¡ò«vY¦_þ¡LÎ\tÏ·ÔSºyì—+ËÆÍ³rlçZééPŽÎD{ÙÑ)‚ê#m˜‡1 uä:Žíã¤è±#é£Ã%Y¦³®Ï[äžB.CHúP”†¥vA*;WKïãråú2}Ë¿'­ Æ• Ȇ™BßÝ—=ëuù^éÚ-Ÿ=)ÓèYòÆSæ7v°K¹, ,³·‚3ûj\D®ßJóă޳±‡e}ý[B,©¢½h^T”®•ÇÎ:²Ò zë~&cŽði,%2°Ôkç¥v^Æè—ÞûÉ»>Ø­XêÜ _øÎq)-ž³OÖí8´bI˜¹©g勯'=½ëeûèyiæ²›×øóØ£n>ÀVËÐîCòìÉ_º½Ny˜}IžØ:àúÈ–}ÏÉôÜë>÷®5M{TWôØ.‰ÒÕ;ËìM3O½åÄ4¥Þr¹Ü–§;D~ݹ “僲{hõR<ýÛd´|Êÿ~«(]½[ŽÍÚ‹÷4Ñë2Ñ¥ÂIìÍk ÒlÀ‰e²‡öâ¹(*\†ô¡(%]Eíò Ù³jÀr˜(!ÉãWé7\Í #N¼ÚBAÚY¸6i6ÁsûRäá«\†t¡(%]„»¦lŸ%${xë£0½¤h¸óm}|èPi Ò΂2­eœßîe‹¢OvØ‹OHºP”’.b^®ÎüX^š<ï3˜là­ôm¼ŸA4ñ-}¼˜ßîrù‘εI³‹®—\äl¼4ÑcŽR!$y(J !$EÌúHßÄûêì=Š Òl¡ßôò^dNvÔ ìò0­„´E)!„¤ˆÖGx ÔKÊïë⇂4[èÚ¤0MÏœì¨æÌï%!Ê1^®°·Ÿö¡(%„ÑúH‡Ç™†Æ ¿qŒ³Gš‚4h^l¢CW‹^'-ƒºD󈢔ö¡(%„ÑúH3jh¤³Ç(~LAÊïs³¿ÕË>Z¸GE‘ã]f޼€Q”Ò>¥„’"fC†!¼hôø1){䲃~¯ÈYM³ŽæÀ ³¢£ŸZ<÷Üs‹ßB›FQJHûP”BHŠ˜ .õ’¤ÙE‡CRìdNv´„Ö'ög¶X¯˜Æ<"¤}(J éZîJõâ;2={UæÝ=¤óh}Äa‹É¡ii¶ÀK½7œ]:Û˜“ü Ô™¦íܹs1/üŒ¢”ö¡(MªL—ʬ_F*]¿„˜Ÿ–RÿRåÙÓ³[*s¶2¥&óW#¿LSèÌ_•Ù_þF®Î×ÜË™Ÿ.IZy™+ܲ6R‘9wÏ2Zä«ó2WÙSYë>ôÛ$ILÊ¢ß+Rf]›C IöÑg©H“™õtX£(%¤}(JC㈱¹SRÝæ  é]÷€øîSòè=ƒRš®ºÇEá¢TFÖ¥+¤æ*2Ò–PpEGÐI‚Piî@^fž¢´í²Ð‚¤ãÏ!EíyH S²‘˜M¸6i¾ÀsTÄû¥³C‡µâÕ7æ hþÏ“x ( é+òÄÐÙq虺PuöÜ’«gOÊ·vo’ÞŠÒD¡(MŠÒŽÐ~}Dü0)„¿Õ͸GZþyòAQ';Bù ZGÚÏŠùlA®Oì—¾á²Ì.¸»iŠÒ0Ô.Ëľ!Ù\zC®{G:Þš’ƒ÷º¢Ô9núø“òèÖuŽPu+«Þ²sìg2ç;D²…šON=ý˜ õ÷º×°Z†ö<.}ß_’Û_šv‡Ò†xs(æåêô?ËÁGï—u½nÚ{údýÎ#òÚÜ-÷ïÐcÓ¼qÞ’+ÓÏÉíëó¢wý.)8'Õ£E—†æzÍ;T×ÍËçOÉTù‹²}]_ã¸þOË¡‰?ºùâHÎÕï„í>,ƒÈ¯Õ-åS?•g÷à%…çÐ!yíŠsÖe¢V=''J»d½æ}ïzÙþÅÿ+㥠÷¢õËg¿óCçØÏ-–‹Þõʱ3ÊblÞáÚ>/Zç«q¯ûK2­X/?æqà®Tßý±|}çF÷{¥Ë~9^ùš|zY¹ˆ§LäÍk¤ù@{Ÿ8¬:?y²#óÛôVVLQŠv° —Ï9ò4,·åRåËrØìÈYøƒTùÆR;ƒŠÒ0\;){ûvÉø…Û³2þù¿“ñÙ›Ž²¸$ßø–Œ¿ú+¹X½ O§±þ’Œ®_+{N\Z ‹4¥µ“×¾´Ev<)/Ný¡Þh¯Uÿ o|ÿk2²zõ2á°$J]šõPúÝ‘¹‰ïÈ‘ñÿŸL_DO0Î7+/ʪ='äò’âiߦ=¥wåýS_•¡‡dì䙯7‹µª\˜zNö Êã'ßóÉ‹&„êqS¡x îý¿ò“ó×¥V».¿.ï’UsDÕ-œ1ÆtÕ…ß*Y?ú’¼[ýw™9²ÝZkegùm©Þ™•c;Ö4*ê0eâæY9æºÁ½ß–Ÿ½âä0¾Û=#'Ç’Õ(»‹yí^cï&Ù=vBf®ÜrÒñorªôiYõÀ¸\X‘ø÷*D¾ÖÅ«)Jë˜åÖIë{'ä±5÷ÉîoMÈy\ãü9s¢$;VC4kü1—‰Óv}D–JAšô>q’¯üPôOt¦èVVHQºpNÊÃÃF Þ–¹Óß‘þý2qÝ•± srúðˆôNÈõÆR`(JCpwfLÖ®h˜‡%@8Ö ¥5¹1ý5Ù°þdò}3Lœ¢ÔŸ•¢$„(]ø»ÿòÄä¿{„FMîœ}Z6GêZ”®‘¡Òéå½nfØ8ÓU¥Kö—çS³{Lÿ»ríäßJß6çÜw<²¬öorò±µQú1Ùêˆ]3^áÒ¥:ײE6:åEpCfË:B=¼Ï9íÖGd PýF‘‚4Ûh¯×&Íú2¡H“)æK¯f–Qjޤê•ÊéJÉi;ÁÝ7òŒœ«Ä®`ìñƒû¥4ºÑ ³$(fË2l¸8Âsº²gOϰ쟸$ è Ý¥û`ƒò•ʲ«OÝŽ-¶5â¨ÇOºŠÒÜ={T6ù6ú=Ԯ˻'Èž¡Õ‹çT‹&JoÈÙ£ÛäÞƒS¢gý‰S”6†`Ží^9¬sÙµ‡¥WNÈîÅ!À>Öû¨œ¸âÛM-J}òÒ gºÂŠÒ–e¢™€õæµÿ5vT”Öß”ÉÁ©]¿%êÏMyŸsôšI{˜‚F./’m¸6i~à½+êäT:ct3ËWO)þÃû¥gã°Œì¯Èlõ¦\ª<âˆÏu2:qµqHõ);¢°oärzî¦T§Ë s}‹=š7e¶¼Ýpƒër®¼KúúFäðé9GDºçÑ6H½½Ð¿l¸o]Øöl—2FÖiéj(JÃp}BFû>#ÇÎ7“ˆórùä>Y3´_žŸüµ»Ì†a¾-Ç÷®‹(Jû=&å#w?ñ‰ÒÚåÉãk>)ûžŸ”Ù«îuÎ_•sÇ÷Ê=QE)†;¯zHÆ/Þqw´I\¢4Ît…¥§ä½–eÂ)7'öô”^’ŸûX¶EéÝ[{_kQw™È1m×Gd… -bNžÀýÒrÏ—ù£¨“™¨0²\‰Òz›ÖI÷àa™ÖžÑz{@çŠøÀiÃlññï3åU™4Ú# ®pÝâ´‹>hì¹T‘]}kdWåõ0+h£­Û³8Rªu¤»¡( Å¿ËäAYÿÄÏä}nXâ=9±{½ìÿý²á‰µêŒ<½cuDQêßø¢L\[Ù{T«þQ~ÿ!~–÷¨Þuê§d(Hlø ‘»råÄ£Ò»c\..Kü‡òÎÓŸ•UQEi}¨æzy¨raY^XB<…¥q¦+”(}Qþ¿aÊÄÍ·åèÖ5Æ7¥Î=¼0%ãO|ªÑkÝiQzï!™ª“Û V=-¥¡5n:ÏF¸á»1–‰Ó~}Tl(HózØp¿pßHþ(òdG ^¦4Æ›§¼©ÿ¯Âb°>‹®»’DC½¦+e]Øîz/h_½çôƒ¹iyù…’Œ8bräðÏeΜõs,k«@Ø6-ã ÝEiHjW~*_Z'[ŸxÞ]=^geâù”•Ê{ïË™£Ÿ–¾ß”_Ô' ¹"gümÙ;tŸ ÞwoDQê0ÑÑÔ‹%Ù¹~<0~ÞIAã{ÄUëÿN^z·1±Ïù‰#2²l‚¾B¤&·Ï<-Ã}Ÿ‘#¿ø““N,wóŠ|gï¹opƒG”:ÇΑ«ôX7Æ¿.myÜ÷®\ó)Ù<ð zñ ¹PŸàljsöçrâéQÙ2ð9é#¶¹ý–Œm\#;ŽLÉô6"o'Æeì±²{1ïBˆÒ8ÓJ”þDfB–‰¦³ï&%JÃäk½‡sPF_šuÊ #–Ï¿*c#k4êÕšÜyw\–Çž}½‘§ó—ef|¿ Õ¯%¼7©O大ÿA9:4MBMnΗ«WIÿ¶§eæF€,WûÄQÌÜŠü£ Íúk“殯Ü@{Œý,?¢ÔÛ; â°Ñ3ŠÊŽÿ²oEÝžÓÅ}+—‚iˆV7?úF¤ôÂË21kþ6αl¸o]Ø.‰ßÖqn‡¢44Žøºò¦?ð€±d –hùšTf.×Å„ÅKÚ»¥ËbLÿVN9¥~|]8@X`–XÃ4Ï2'óïÉTyŸlY\¦OÖmÿ¢”ò»¥É|æ/Ék¥Ï4fiÅ9·~Y^zõŸä³f|ua¦çðš+jÊìK_–­z®þm²ïø›2wê«îõ, 0{æØ£K ù°û<{ò—î ³à–ÌM=+_4–ÿ¨ ­Ñ#ò’›_áqÄЙã²g½»Ì ®sh·|ödc¦`ïõÕóÙd‹û5ocJ×âdük¼ytÜuØ¥8'–oi]&Ü8W`ˆJï5.;îÇ=úÀsÝ[&P[äký'¿^{ÊI×9¦ÿSòÄK?”ï|Ö-Ãõøœxf_–ƒ;4OrºãÐÊrk™pQ!¹z·›uËç –DéêÇeöf QÚ4®öiä5E© ¤ùÃ4èå&ùD{ ‹þÜé ¯åF”½‘ ¹§CfUºu±­àøŸ{FFúÌïIm¾ÑWäÒì”LÏÝvÛ@ž6,Äìáo4„l½Í´¼÷µÆ¿-ã ]E)!™å–œ?öYµ÷¤ð+¬îõ‘*HaìqË\›´;ЉªŠþìA”k=dZnDi½w²O±R.Ñ‚!²åw70{Mo:þGet׃Žhí“áÒ 21=' ua»QF_9-/ýP.A/ºß©.Îà[='•Ñ-2¸ÿ•úÐÛz/(è¥)ïNft¢$GØž;&ûŸ9' -â ÝE)!ç†ü~òeùþÄé¥I¦×ðÜ$Ÿ;qÑíµ$Ý�ë£èPæ,ƒûƵIó ';ZB_´˜–QªßŽi•òĬ+HÁRÏ(–b­œ“j}¤V¿ Ž|»1ñÑ¢xÄ̼º~¿ \ÿx¢ô~Ùõ•²Æ¥>"_ÓoF›ÇAºŠRB:Î2sì€üõ–uKÃZaBý½w–¯»Jrë£h˜ @ Ò|¡ä`è'É7³³³õ{™§ }’ÃÐõe‹Z>òÅýä§@ë‚“|AQJ!)Âú(<¡š_¤ùC{¸Ù»–Ìe}È’HWË…(õY'”,AQJ!)Âú(¦ Åâõ$_˜"†“RuÚ;ÈûÙ@¿³…e_”ê„FƤ•„d ŠRBIÖG­1)'ÈÉ'z¹6i÷ÀÉŽ–ƒ/:+q¶E©w¦~ï ·„dŠRBIÖGÍ¡ íté örwœìh%úÝ4¿µ%¤}(J !$EXc~§EAš_¸6iw¢Ï'{¿—AJQJHûP”BHа>òß©éP8 Ò|£3&c¸'é8Ù‘?x òNHûP”BHа>Z‰)HÙã¸6i÷¢÷½¦DëQ¯uŠRBIÖGË1)†r¸g¾áÚ¤ÝNvÔéo…µ¥ÑhñZ'¡(%„a}´i÷ÁµI»ì¨ÓCìµÍ’yÓeºÍí¨nsÛÏÔ?êoT?¯™˜n[?Ð*¬šºs„õ­ÂzÝA4óaÃb»U\IЩóštöì)‘…Œ&„Àú¨¨¤ íÌo¹–ew’•ÉŽ´œeÅÌ4™ÛQüZ¹ÍmuÓ/Ê/ˆê§¦˜Û ?䯝×/IÒ>èÄ9A§ÎkÒÙ³§D2šB�룆xA£ù@AÚ=pmÒîÇ|ñÐI4 Y2oºL·¹Õmnû™úGýêç5ÓmëZ…U3ñcÖø¹ÕÒ¤ç:¯IgÏžYÈhBE¯LAŠ¡»˜¹’t˜¤ ÷•k“v7Y˜ìHëÑ,™7]¦ÛÜŽê6·ýLý£þFõóš‰é¶õ­Âª©[1·AX?Ð*¬×_ Ú¯4óoå×*î$èÔyM:{ö”ÈBFB(r}ä¤âÙ=pmÒâ…ÉŽ´¬eÅÌ4™ÛQüZ¹ÍmuÓ/Ê/ˆê§¦˜Û ?䯝×/IÒ>èÄ9A§ÎkÒÙ³§D2šB@Që# ÒîF'ÀázÝO&;Òz4KæM—é6·£ºÍm?Sÿ¨¿Qý¼fbºmý@«°j&ÞcLÂú?·Zšt✠Sç5éìÙS" M! ¨õ‘ÎÊJAÚpmÒâ…ÉŽ´ÍŠ™i2·£øµr›Ûê¦_”_ÕOM1·A~ È_¯_’¤}>Љs‚Nפ³gO‰,d4!„€"ÖG¤ÝŠÜ_Òýda²#=–Ì›.ÓmnGu›Û~¦þQ£úyÍÄtÛúVaÕÔ­˜Û ¬hÖ뢙ۭâJ‚Nפ³gO‰,d4!„€¢ÕG*Ha˜•tz;9œ“¤K§';Ò:%+f¦ÉÜŽâ×Êmn«˜~Q~AT?5ÅÜqø 7~½~I’öù@'Î :u^“Ξ=%²Ñ„ŠTQv?è5C)î1{Á‹C§';Òz%KæM—é6·£ºÍm?Sÿ¨¿Qý¼fbºmý@«°j&ÞcLÂú?·Zšt✠Sç5éìÙS" M! (õѳÏ>»x­¤Ý‹®MŠž3R:=Ù‘Ö-Y13Mæv¿Vns[ÝÀô‹ò ¢ú©)æ6ˆÃ¹ñëõK’´Ï:qNЩóštöì)‘…Œ&„P„úH… Œ‚´»áڤŤӓiý’%ó¦Ët›ÛQÝæ¶Ÿ©Ôߨ~^31ݶ~ UX5u+æ6ëZ…õú+Aû•fþ­üZÅ:¯IgÏžYÈhBÝ^™‚”B¥»1×&Å6)žìHÏ3ÓdnGñkå6·Õ L¿(¿ ªŸšbnƒ8ü@¿^¿$Iû| ç:¯IgÏžšÑ4–ëFLAÊIoº®MZl:9Ù‘Ö3Y2oºL·¹Õmnû™úGýêç5ÓmëZ…U3ñcÖø¹ÕÒ¤ç:¯IgÏžšÑ4–ë6(H‹‡ŠÑ.&:‘Y'FDh]“3ÓdnGñkå6·Õ L¿(¿ ªŸšbnƒ8ü@¿^¿$Iû| ç:¯IgÏN!$÷è÷e0 ÒbÀµI Äh§žy­o²dÞt™ns;ªÛÜö3õúÕÏk&¦ÛÖ´ «¦nÅÜaý@«°^wÍü@ذØnWtê¼&=;!„\ƒe@tI Òâ ½d¼çÅ¥““i:+f¦ÉÜŽâ×Êmn«˜~Q~AT?5ÅÜqø 7~½~I’öù@'Î :u^“ΞBHn1)fa%Å€k“¥S Y=o–Ì›.ÓmnGu›Û~¦þQ£úyÍÄtÛúVaÕL¼Ç˜„õ~nµ4éÄ9A§ÎkÒÙ³BÉ%¦ EO „ )úý0×&%xöQÒžìHÐY2oºL·¹Õmnû™úGýêç5ÓmëZ…US·bnƒ°~ UX¯¿´_iæßʯUÜIЩóštöì„Bri±áÚ¤DÑaÜi—m@gÅÌ4™ÛQüZ¹ÍmuÓ/Ê/ˆê§¦˜Û ?䯝×/IÒ>èÄ9A§ÎkÒÙ³BÉ :ë*iñàÚ¤ÄD';J{Y -ƒY2oºL·¹Õmnû™úGýêç5ÓmëZ…U3ñcÖø¹ÕÒ¤ç:¯IgÏN!$7@€êp= ÒbÒ)B²‰Nv”öPnm@gÅÌ4™ÛQüZ¹ÍmuÓ/Ê/ˆê§¦˜Û ?䯝×/IÒ>èÄ9A§ÎkÒÙ³Bɦ ÅÐ]ö’®MJ¼hc6Í—TzÎ,™7]¦ÛÜŽê6·ýLý£þFõóš‰é¶õ­Âª©[1·AX?Ð*¬×D3?6,¶[Å•:¯IgÏN!$óx)g\-&¸ïZQ´nHs²#m@gÅÌ4™ÛQüZ¹ÍmuÓ/Ê/ˆê§¦˜Û ?䯝×/IÒ>èÄ9A§ÎkÒÙ³BÉ4¤DáÚ¤Ä-•JÅÝ“<ڀΒyÓeºÍí¨nsÛÏÔ?êoT?¯™˜n[?Ð*¬š‰÷“°~ÀÏ­–&8'èÔyM:{vB!™Fœ¤e�e!íå?H¶éÄwÆÚ€Î’yÓeºÍí¨nsÛÏÔ?êoT?¯™˜n[?Ð*¬šºs„õ­Âzý• ýJ3ÿV~­âN‚Nפ³g'„’Y(H‰ÂµII˜ìHÐY13Mæv¿Vns[ÝÀô‹ò ¢ú©)æ6ˆÃ¹ñëõK’´Ï:qNЩóštöì„B2‰ R'µ!èCYHsˆ&ÉZW¤5Ù‘žF£Åk„¢”BÈ2(H‰ ×&%­H{²#-4-^ë$¥„ByöÙgÿœ(H Ðo¿ð…/¸{YN'&;"„t¥„Bêèwƒ¤Ä„k“’Vtb²#BHwAQJ!d™ E“`®MšÖ÷‚$tb²#BHwAQJ!Ǥ†Gˆ¢Ã2Y.H+´áË Bˆ ¥„R`(HI3¸6) KÚ“Bº ŠRB)(:䎂”ø¡/,8$“„A{Õ9Ù!ÄŠRB) øVP{Á(H‰\›”D“BÚ¢”B †)H¹Ìñƒk“’¨p²#BH;P”BH0)¾ã¤$Ä®MJlЬW!Q¡(%„‚@AJ¢“ÖpmR¼Ä@¹ádG„¨P”BH€�Ű: RÒ ®MJlyöÙgëe‡ß!B¢BQJ!]„…ö|Q’V¨°àX$*:c3';"„D…¢”BºS¢ç ½`„4C‡x¿õÖ[îB¡½ìœìˆŠRBéR(HIT D)*H; üÀ8"ƒŠRBéB(H‰ º6)†ðb';"„Ø@QJ!]¾¤ %QÀ‹ ”×&%¶p²#Bˆ ¥„Òe¨ …Q’°èÚ¤èa'ÄìˆkÜB¢@QJ!]„)H¹Æ$‰‚÷f¹!í “a”!„„…¢”Bº Rb‹ '¨!í¢e‰ÃÀ !a¡(%„.@¿ã‚Q’¨pmR':Ù—"„„…¢”BrŽ~ÃEAJláÚ¤$N8Ù!$*¥„’cLAÊ ±k“’¸Ñz‰“BÂBQJ!9ŤvIláÚ¤$n8Ù!$*¥„’C(HIpmR’,W„(P”BHÎ0gJ¥ %íÀµIIRp²#BH(J !$G@ê¤4¤¤]¸6)I NvD‰E)!„äS²g‹´ †U¢,Á¸6)‰NvD‰E)!„ä�¯ ¥ˆ íµII’p²#BH(J !$ãP’$À0(Süæ$ÊŒ“BZAQJ!T¿û£ %qÁµIIp²#BHX(J !$£P’¤À]”+®MJ’„“BÂBQJ!Ĥº‹!¼„ÄÊÊŒåŠ$ ';"„„…¢”B2)I (c„$‰ÎðÌÉŽ!­ (%„ŒAAJ’DË×ücw!É¡“´q²#BH3(J !$Cè·~¤$ ¸6)INvD E)!„d¤0 R’:ñÌ¡C‡Ü=„$ &9B™ãdG„fP”BH0)¾ù#$ ¸6)I]~ˆ“BšAQJ!†‚”¤ŠN:CÒ„“BÂ@QJ!D‡¶Q’¤áÚ¤¤Sp²#BH+(J !¤CèÒ¤$i¸6)é$:Ùë9BH¥„ÒLAÊ @HÒhyãÚ¤¤èˆöÒB‚ (%„”1)†T’4\›”tNvDiE)!„¤)I®MJ:Y !ÄÖ„’ø–Of¤$-tè$×&%D';â7Í„?(J !$ÐÓF)I®MJ²�';"„4ƒ¢”BƤœh†¤Éììl½ÜqHÒi8Ù!¤¥„’ ^AÊoúHšpmR’8Ù!¤¥„’¤¤“ ¼iùãw|¤Óp²#BH3X3BH@è2¤¤èLÏø¦”,À—$„ (J !$f(HIЉe¸6)É œìˆE)!„Ĉ)HÑ+ÀÒ Ì¡’Ø&$ p²#BH¥„¤$+pmR’E8Ù!$ŠRB‰ R’tmR“$Y‚“B‚`­@!1 KoP’NõII–A¹Dùd=I1¡(%„6QAʆÉZñKHÖð›ìˆõ&!„¢”BÚÀ¤*I: ¾kfOÉ2ú½óSO=UŸðH‡šBŠ kB±„‚”d ”C”G®MJ: †‘C€zíÿñëMÓ!ņµ�!„X€Æ•6¦(HIVàÚ¤$+è ’0Æ—(„ŠRB‰ˆÙØ¢ %Yk“’¬¡Cs[—ˆ!„P”BHLAŠÞRB²‚öÞsmR’Ì%ÍŒ¢”BQJ!!1)g6%Yƒk“’¬aöÞ7³,¾H™Ÿ.I=}ëdt⪻—’¥„ R’e0Ó.Ê&×&%YÜ.Ȳ9êdA®Oì—¾žÝR™›w÷B’‚¢”BZ  ~)É"Úðgù$Y³ðjýdÙ¥7e¶¼]z†Ë2»àî äòÈ7dš:–HP”BH HuÝG6øIVáÚ¤$Ë´šð(“¢t᜔‡ûe¸|NBkÒ…99}xDúG'亻‹ŠRB À¤?ü°»—l¡C˹¬É*æç~†ÞÔ¤X˜-˰žk±×Óíí{D*—n×¹-sÓÇdt°Ï9vXö—¿"z¿'uEgâÜ/¥ÑNûeâú‚,\ªÈ®¾¥kêé/¹½¥N¼§¿!#u¿-r°´Wúù*!+ (%„¼‚ô?þã?\B²&‰A9ÍæHB¤^j}êgIŠÒ:R»ks.ý>tAª³G€>(åÙ›Žûºœ+ï’¾¾9|zNª§¥qê Î:Õw¤<²FúF¾!§çnJuú° :iï3zEx»'/!¤E)!„x  %yk“’¼Ðl£ÄE©ÌË\e·s®A)MW»0<w÷32»àÔºÀÜâø}Ðð“‹Ré—ž‘ŠÌÕÝÈti‹ô –éª+&ç*2ÒÓg ïõ~ƒÚ$ިߩR�(J !Ä�B % R’u~üã×Ë*×y$Y§Ùò0iÔ³%^úe¤rÑqÝ–K•ý²Chëߎö-ëñ”ë2Ú·$8Cs—¹]Ù+zU&F×IiÚ‘Ànïì²xm¾S%¤ P”Bˆ )É\›”ä ¼<1ŨZ*Ô{6¢táÒ˲ÿÀ+2ç(ÆX5zPµÇsQpê÷§æ[·çÔÜW²Kµ!ZM!«=§üž”?(J !ÄÁ¤ºËYLIÖAÕòÊ($Mx” uQÚ#ý_yNÆ÷u‡áê°^ã[ÓsÏ4&%ZœÐ¥¡¼Kǘ½ uq»ÆgS÷›T~OJˆ?¥„ÂCAJò×&%yÄ;áêÞT˜Ÿ–R?Ħ9㮊G|÷y­>ùÑþýßoÿÍ:éû›²LüjÎ9Â¥õïIoÊÜé£2ºëAÄ÷¤¥dbÇ4zSûF_‘KçŽÉþgÎÊû‹ñ~ s?—ã»e“ E*¿ª÷ÒB– (%„ R’G´qŸü$1„Äf‰6EijßCC”®Ù%åsžDµ³gŒ”NÊlõɈÅ«Ñ{Ú3,£•sRu‡Ž|ÛíquEéƒÈWÆ~Þœ‹ñöÉàhe1Þ¾ÁÝòíʼn! E)!¤Ðho)É\›”äï„Gœ¤‹(J !…Å\¢€‚”ä ®MJòŒ–_‡ŸB�E)!¤˜‚”3—’<ÁµIIÞÁs-Ã|±B¥„ÂAAJò ×&%Ý€.gDQJ¥„BaN²AAJò×&%Ý€¾\Á/!„P”B ƒNÃ=É+\›”t (¿(Çœ=š(J !…À¤Ï>û¬»—|²‹2ÌÉaH7€rLQJ¥„®Ç¤lÌ“<õI ÐúŒF£ÑÔòE)!¤«¡ %ÝÂ[o½U/Ç\›”hF£Ñhjy‡¢”’{Ðkä÷}~£ %yG×väðsÒ-PBHûtK}À’{ÐsôðÃ×E¨‚mêHAJò^ºhÃk“’ni„BÚ§[êÖh$ô¡ÑÚ5/æ"ì¡£¦ …Xå,¥$ïèò(Ï„hG!ÝR°F#©  Ö®yA/¨é¿víZùØÇ>Vߦ %ÝÊ2Ê4—2"@ë;Bé–ú€5Iþfˆ¶J¥²xÔÐÓÁ‡ÉU²€¦ËÃÍ4›ö?ÿçÿ¤ %]ùm4Ë4Z!¤[êÖh$øš=TŒê0Wؾð…ú$*øFS÷Áp ü`Ó‰oÚ4-&~bÚ4L ÃF<É;\›”xÑ:ŽBº¥>`FR Ù‚[¯õ®{ˆÞ?ª†8Ò§z^“ ´™†ëÌJo/!6è³ÊrL­ß!¤[êÖh$øš Ì5;a~bÔï>A ê„BcÆ‘–8Õó)Þkieì5%y„k“?´^#„n©X£‘Tàhç1EœŸ¦-Nõ<Š÷ü­ zˆkBò×&%~h½F!ÝR°F#©À?ÐÎb Ò8¿KKSœjü�ñ›çleH#{IIÞ@™Õ2œæPy’}´\BH·Ô¬ÑH*ð´s´¤ÍîKX?¯8Å7p˜„(N!¨q\‡º[{˜H^áÚ¤$­ß!¤[êÖh$øÚ’ê! ÂOœBÆÑË£qBèš“4ŽÁõ’W¸6) Bë9Bé–ú€5Iþ¦OA ¡AÙÌ¢ôzâø¸‡õj<æu¿%y‡k“’fhÙ „n©X£‘Tàhº˜ëw6¤hìz×* 2UèÅ)N5¼ö¿%Ý�×&%ÍÐúŽBº¥>`–c´Òh6æ£{* ñkn›ë Sø¡ñh04¶£ôšaƒŒß’nAŸ9®MJüÐ:B´>°µ¬À-Çø,-ªA,BbÛÄtc[{(±D…-~=§w+aê c¿%Ý×&%­ÐºB´>°µ¬À-Çd­0å Õº"¢åB.ŒUôXˆÊvA\·ˆK{k[ Sãgü~”tE€²Íž„Ö„¢õ­eÖh9&k…)«@°  =sªÄ†³B,uû÷ˆzÝ*ä°mbºÍm¯(õ†3iæL¤C…)îAð÷Z˜VBòʳ–o¾l!Ah!„­l-+°FË1Y+LY 9¬ï¡i~3i„•Ÿ@UƒŽH‚!¾n?æu*:£­y¦?¶ãì)õ‚<FÜQD)'€!݈>‹xáBHZBˆÖ¶–X£å˜¬¦NÑJ„büp „•ìƒD‚Þðjˆ¢)ïâT¯x—WÑaƒŠ¹”(E~j¾‰RýÆNß’nEŸÔI„¡u!!„h}`kY5ZŽÉZaJ ˆŽÛJ„ÚC8œ" föªª8mgÍÍNb敟i$¶l'!JMAŠ| ÊSœÇÀ8¤‘t+(ÿZÎóþò‹$‹–BÑúÀÖ²k´“µÂ”4‰›æƒ3Eh³ühæZ…Åù½C~!¨pÞ< T3ýA¦˜Û­D©y¬— ?í™ýøÇ?(6͆z³s’wtmRÔg„4ƒõ!!DÑúÀÖ²k´“µÂ”B~=¢*;Ñk$Ž‘&ô "ÍYÆ›n?ÓãlÇÝSjŠÍfy††ºŠW!ÝŠ¾ôâÚ¤¤¬ !ŠÖ¶–X£å˜¬¦8H1‡lÂÐ`ƒ@ÉÊðMFì'PaH?Ò‹f–†âù¥Õkй·(…€ŸÞooÚé&ô»i¼€#¤¬ !ŠÖ¶–X£å˜¬¦8ð£è%Ëúw„æw®Þ!¾jèI…?zx›õ &_Ú¼¦Ç)ØŽS”"¿´÷;l^àX3M„t:€k“’0°>$„(ZØZV`–c²V˜Ú!HŒêÏ lý@’ñBt¡ç LÈÇÏpÍ8‚6-áí—¯)æ¶6šõ{7ÓÏK3?�ò&,†nõ…–﬿€#Ù€õ!!DÑúÀÖ²k´“µÂd„[Í2‘ÍĦŸý÷ÿþßë‚Ô›d8Ã]ãì¿i¸6=N1ýãèåµéuÕóÒmà™CÙŽò’†Ö‡„Eë[Ë ¬ÑrLÖ SXt¨«W˜åEŒF”^Cxă|€8ƒØ„8óNæäg8¦]qꯚ6ŽÝÖ^Ò("²¥„,¡/¸0´Ÿ0°>$„(ZØZV`–c²V˜ZÁ AeŠ/YY£fϨ^ƒ)á6ñs›‚ñ…ªç'†±/ªH5Û¹‘F=>Ž^R@QJHýDÖÎË&R,XB­l-+°FË1Y+LA Ñ¥=m¦io¡Í®+ ?ä4Âf+Fl£7ÄæAÂÔê©Uq¦Q«aT`bÛÄtkÜø…€ôkÅy€}ú}jp|³s’GðMyÔgäêÚÌÏýLÆvn”^œ£w£ìû™ÌÍ×–ü¯¼%•Òçd¨¿·‘ŽþOËÁüFªzH"´J—IMnþú»²c•sÜHEæÜ½ÉR•_—GdUO¿ŒT.ºû”‹Ré_¼g¦õ—¦e¾~Ì]©^ü•LTÊòõÈÖu}†_TnÉ•™—¤´gXúëçé•þ­‡äï^wrÆ`þ²ÌT¾&{†V»é­(ïVïº$I“üê@ºjÕ 2=Q‘òןG·®“Þþ’L{3®"#î}[i»¥2gw·âÀ?Má-+°…—c²V˜¼@ô¨Qƒ;OkðAäi©Š3ÅÜQÜØÖx!2m ©Èç ¼Ç¼ÃvÜzÍHkÁ½vœ7,8Þ›FBòŽ>¿yªIçI¬>¼3+ÇØ ÛK¯Èù꩞EJÛ7ÈÇfåNý€»rí'_“GJ/ÊÔ…ªÔjU¹0yTv|JÆf®×H„–é2¸ù¶Ý:$Û·oJI”:"øÌ?ÉÖ ÷ËöûÖˆÒu>ûM>’™£Ë޽OÈ×Ëß•ÒÈ{QZ»,?yrTJ/¾!!W«þ^&¸6‘™K²´ví§òä#%yqêR­9¢øÂkrÔý›Ç~)7Üc’¡y~u"]wgž–OïxT|½,Ï•F¤/P”zÅgMnL=)k6:y{;Ñ·2MÑúÀÖ²[x9&k…IñJè)kègZ˜‚¦=šØ6צæç¯˜Ûˆnïñ6 ÏÍ´6‹SýÍÞZ˜.Uƒm4“¤¶Ã5 !Ý‚>oxÖ‰BRõáݳGeÓš'ejQ¼8îé¯É†9ô[Aîk2y`“l:úŽ#Y“!tºjÈÌ‘ÏÈpéuùõ‹»S¥µê´Ù¶CJo¾%/úŠÏ0¢Ô¤*Ó¥Á6zJ}øhRܳMŽžm&ëjÎa_’{6•³ v–¶Î//é¤K™Ÿ.I¿Ÿ(½y^&_z]Îß4ŸƒwÊþ —ÏÉ‚»§h}`kY-¼“¥Âqá÷½(†¦©iF3ÿ$ü@«°*òôšs[{½®À­˜Û@×íf4󇟙÷­Ž5ýÍ0~$áD3?›¡»@ÓCH· Ÿ5pmR•dêÃy™«ì–¾Ñ YÖçy}BFû’ñ‹+ú$]®ÊÄèÆæaÓuW®¿ù” ?%o^¿U“¸(­]“7KÛü†\¯‰Ï ˆÒz^m—òìMw‡ Îaû¥o¸,³I)¬Pùå%…tŠRj×NÊc÷|V޽{ËÝÓ´>°µ¬À^ŽÉBaòû^½¤qö®¥ Òí×C àVÔ¿™™˜nÝö;.*HŸ Rä=†îâA~çÄñgDc÷Pó6ÊÐ]à—nBò ž-}nƒ¾+'$ˆdêÃdfì+ÅÐü´”ú¥4]uw,Q«þA¦žß/CŸ“ñw“\.]µ÷_—C›?+GÏÀݲɊһòþ©¯Êæmÿ$gê½gÍD逬ÝrÿÒw¸M¿‰S”bøë”<¿ï“2ðи¼{Çï|†=õœìÚ(ÿfåèX›_©¤k9áEé¼\>±Wú— ÙšZØZV` /Çtª0¡…7ûÞ!º2Q…FÖ0)Œ~Cvu[¯»™©`WÌm ÇÙb Ò°ÃlÛ=g;´3Óh'ÓMHÜè( <·„D%™ú0@ ‰Òʼn_zeõÈ7åÔ\R½E!ÒU»"“Ol“å3Òè L^”ÖÞÿ™<±ñ!)ÿZó%Hd} 3Ï?%cÇ'äìU'êBë9´cƒ z]Þ_!hâ¥nÔïÑZ9òz€FºÝ‰˜V?$GN½×æyý Ÿ_J:éòZ”ÖÎËøeωKÒaMêÞc{Ë láå˜4 Ä„Ÿ…åñ{Q? ðôúTbÛÄtëõ·2Ê‹mE·õl)hçœí¢ßÐáFT:™nBâÏ�Ê3F••dêÆˆYµ÷¤,[¤­éðÝšÌ_=#'Ç’¡Ãòf5‰ñ•!ÒÕtfT¿qÛÅ|~Öj6ÖšÜ9û´lîÛ/×½y÷ðÝ[rõìdld£ •Þpb`þŠœ=9&#Û¤ôæûîθh#¿M×JŠ҅ٲ ¯Ú+'.Çs—ÚÁ?OÃ[V` /ǤU˜LñÃ6„&Ãiv~[?D¼aÎ ÓžRÓmïåV¦¢Û&êïGÐ~ ‚E‚fçIúi™¡(%EÆ1€mB¢’T}h7ёí)9xï'dlæ#wG¼DO—+‚R™}W 1Õ vþ˜lKE”‚šs‹ɽkÇd¦édAÊÔÁûdíØLb“V-%¿ÒKW8QZ•™±-+¿sîZØZV` /ǤQ˜¼½qݺlöàyóÔ›¿pG¤0_Ñmõ‚m©bsθÐÞ!í=ŽB'ÓMHœàn”e®MJlI¬>œÿŒïÜè.½rWæ¯LÉ‘ëd[ù¬û=ß¼\™þWùÁäÛr±¾n¤ÑSêYr$VZ¦ËKvDiíÊòÜw¿/“3ݵ\oÉÕ3'¤´cCÀ2'aDiUfí–Õ=²íè[Ëã¨]–é—¸ü|nO©y¾Ú•iyù“2s±êÜE‡ÅÉ„—÷Y$(¿:›®P¢ôÆ/¤´a³œúÀÝÑY´>°µ¬PÈžß ¡Ñ’4›žÒ TØÙR`sÎ80…¿MïP§ÒMHÜègyÿŸtŽäêCGdÎýLÆØ[?Ç€l=ôªñ-âM¹8ù¬Ü=,ýnpÌ–Ñgd*±oJA«t-Q‹iƒ%1|פ!"—Î[ŽZ»ú¦?øyÙº®oÉ¿›Œ–Oé÷‹CÍ/ý*J×ÊÎcgÝïh]î\ÉòAÙ=´z)Žç«É‹“R>¸{iò¥ž^éß²OÊSI»Ù,¿:“®•eư/6ܵI—õÜwßtG°¬PÈžß ¡Ñ’´0¢ÔëçEýU”jœQ1Ï š7N¿vzIÂ6;'!y@_Î`´!¶°>$„(ZØZV(d–µ›@ò‡ù0‡1mˆ*º­þQˆ[”¦…ž×öºN¥›8Ñáÿ¶/g¬ !ŠÖ¶– Y£eí&üa>Ìa,LOiXò.JméTº ‰ ·×ïÁñm8!¶°>$„(ZØZV(d–µ›@ò‡ù0‡±¸zJÍFmžD©®ÉˆoéléDº ‰“8žB�ëCBˆ¢õ­e…BÖhY» yoû±Îf‘„a»K˜s³é)õÛ¯³v&)î’òƒ!ý¶h„äåÀµII»°>$„(ZØZV(d–µ›'Lª=v~Ñ„o¦Ð3Ð"Õïš›Y\=¥šçíÌÚõœí¢×Ž´Û̬¤nBâõ –á"¼¸#ÉÂú¢h}`kY¡5ZÖnB–i%B±O{H›‘Š^ŽkGœdïõµ2ÅÜFxý›×п(çŒízöÙgÝ=v¤nBâ„k“’8a}HQ´>°µ¬PÈ-k7!K W §0"´ÙDðC<*Hüâ^Å©ß5™öjb[Á6ÖÅoX‘‰ãÌølAfZ’D{Iaíö¥™nBâ&®ç—Àú¢h}`kY¡5ZÖnB§0„@ #B›å[+?4È´qæg8zÔš Þ,à—v?ÓkUt[ÅúÇ?þñÅk5óW/)@<湚·]?½Î8–¿@<ÍÎIHV1‡°¬ !ŠÖ¶– Y£eí&t ?1 ѣ߂&) ¿öÒ’Uê—^?{ë­·Ü0Šú‡¹6Ü'½Gqô²è¹“ÆlˆÇñ ]Zé&$n¸6)‰Ö‡„Eë[Ë …¬Ñ²vÒ½ŸfDD„-~qzͼAÃv!âpŒ)”ap#Ñ8¦Ó…˜ió3Óm\»ßqAàšql½¤ ʹÛA_: ýqVº ioý¤õYÖG€üÀú¢h}`kY¡5ZÖnB‰½vÄhPœa ¢=¡ˆÇO¤¶Šßª¸† ¡›~陓ùÀm¢nƒí0"פ×G/)@\Þ´Å i¤=®û’Fº ‰ÔK0ˆS<·(·q½T"°>$„(ZØZV(d–µ›h ù‰:«oó›å…úi|ñ±,.5ĉ_³'�nÛŽ+h¬i¸f†cUÐ ^œ_]Ãõ›qÅÆ­Û&ÍÜÑí=Ö~*îâlÐêùƒh×÷JÏo‘ãBã$$ë˜uÜ_ýÕ_Åþ,Âú¢h}`kY¡5ZÖnB\¨pôF«B4êð1Ä a„ yšÅ ·bn??Ä«¢¬Ù·¥8/ÎAëµ×^{mQ¨†º§é¾‘ªqš„q«xÇ=jÒw/)@|Þ´Å‰Þ üÆIÒé&$.ô97í/ÿò/­ê`BüÐrE!æe…BÖhY» í¢ÂÑÛ# ±‡ý6 ?1ª -ÓmëüÜa„&ÒÔJ°Áß/®vzP5Ý6 rã\ØÆyÜSÇ5Æ âô¦1.Ф×÷w¿I¦›8Ѳdx¦!P ±EË!„˜ÿ/6– Y£eí&´—)FÑØQaD+?ˆ!oœ*ü¼aM·­r£GÛ•jêFº° 3Ó¨h âB¥7¬8Õ°ºmâç6‡´¢‡Ø3Ò¢÷ •莊¦C1·½DñƒÕ4'1Tñ6K!YAËj3C=Dˆ-ZŽ!Äüo±±¬PÈ-k7Á•V¢, Ú3j#Fé¶õQÃBü˜iÆðܰxó=Ëa…©†1ñsC¨!Mz|˜a» ©^R i‰ä›ÃNª±Dº ‰< ZV›YÜ# H±ÐrD!æ‹e…BÖhY» QȃEœ7âÖÞN“(îV~z ؆E¦�iÕë+¨ô\ºm7ÒdŠQâÆþ0è=nçÞ¡é‰ \“ RäcRí¸ÓMHh}×Ì¢ÖQ„xѲD!æÿ‹e…BÖhY» a@C¢FÓŽÆ;C$UÈ™bf#FÜ^qè5M¿9ÉÜ&ÍÜ­üTâ #3lüŽU·)Ò`¸n\sXTÌ&ÑK 4]q€|6i’“¸Ä™nB’¢•(MòÅ )Zž!Äü±±¬PÈ-k7¡æUüBø©¨SZ]ú£1·ÍÄhAÌ`² ‹_˜·gÕÜ­ü`~"Ð{¬!¥ù4…AÏ£Û î‹ú!Nïµxñú™½«Aßž¶‹ÆDX?3ß  “¤ Uº É:«x¡Ž#¤]´<BˆùccY¡5ZÖnBÞÞQlÛ¼aG[³÷NÍ ·bnƒfnï0Õ¸ÌìYØ61ݺí Ó ¯ õŠý p¼y~ qàqFi8¯¹”y_âFÏѶùÖq¤›¤iö‚ÏLÏ é~´L¥OM毼%•Òçd¨¿·‘ŽþOËÁüFª5÷ع(•‘þÅk^ný2R¹Ø8¬v]Þ=yDö ­výd˾‘³Õ» ÿØ™—¹Ên#-†õ—dzÞ=LîJõÝËØžaé¯û÷Jÿ–¿—ïýÐÉMå–\™yIJæ1[ÉÞ½nžZõ·rrìãm“}ß{gù=ªUåâô„TÊOÉGï—u½ƒRš®ºžI`q7ÏHyîçn©Ì-fhü„*;aîcgXVö,,+²…—µ›à4l´Ñ_›¡ºxcï'DaqˆQ�wZÁ©Ãlsè±aDi;ÂJÏ£"¿ú(–щ*HmŬ šv[ð’Ã6ßÚ¡Ýt’ÍD){II\h™JŸ»rí'_“GJ/ÊÔ…ªÔasaò¨ìø”ŒÍ\w‰ˆÒuKâS¹qJ®ÙêœBꮼ?ñ÷²º÷“r ò¶\‡xþ•Œïû¤ ìzQ.,4‚Ä‹+JG*2çîñåýWetõ½2t "g®Þr‚]–™ñý24ðy©\pÜ vY~ò䨔^|C.8B¨Vý½L}X6‘™Q%Ïe™Ý ½COHåÌ'•ƒã²oh£ìªü^³âîŒýôƒ²÷ÀSR~î«2Ò—°(|U9sôAÙ°ýSr_¢¢4dÙ s;„ù?ccY¡-¼¬ÝÅ+Fa;~½£ÍÒx4¼itêgbº›ùÓÝj˜Z’¦¢Û&êßjØ,„Ÿk#¬4¬×ôÞáõÃyÓ¤@Ӫئ7MA ¼é&$‹‰Ò¤¾'ÅDËU6¸&“6ɦ£ï8Íû$øHÎOþ«LžÿÈuƒ¹>ùe.Ël]48Âbò)y¨4)ï×ý]®OÈhßv)ÏÞtwÄIXQ:)¥‡ž’É÷ÍܹêÇ2\>·$½|4)îÙ&GÏÞpw„åŠL–—Òä× œüšØ/}‹ùåa~ZJýI÷”úxw¥:óMÙ6ü”¼ùë‘‘¤Ei˜²c{SÀü¯±±¬PÈ^Önð.m‚ŒÍNE3˜)àVÌmÖÀ½nݺúo'M¯ Û ÌðÝvzH=?ÎcZ”¸plÚ‚hÚ£‚ëë” ¶é&$M´òšM}NHZ®²A浓“m’ûý¦ù9oMÉÁ{;,J}ùP¦5ϳXuÍÉŠCroÖDiÀ5Ö®¿!¥áíRzóšÔæ* ‹Ò�B•÷1ÌÿË …láeé&x¿µ£Þx`¦È[1·AX? nóûÇN›‰îƒ€ò#A üÎ…N R5íÈK³l¥^%jº é~¢Ï:!q¢e«ÓÔª©ç1„ñs2þnÔ={j—OÈž¾]2~ᶻLJڇr¦¼[6<4.ïÞIâ«?W”®ý¤l_ü±OÖï<"¯Í5ÎyWªgž‘ È3Çÿ”<á£1¥½V}[Ê;?!ÿFî¸û–‘º(mrµ«rêЧeÛÑ·¥.;!JC•V÷1=´>°µ¬PÈ^Vn‚wV]›ïF)´`æwKÞë4ݶ~¶ë5½Vlmú‰RAͧv{úôü6àB§)›vä·I­ÚÉ·v›î¼ƒ©‘ïìYË'~¢4è%!¶hÙŠº�X^~aý¥iG‚yX<¶WV|SN5bqr[.Œï’¾='är^¨‹Š¿–¡WKׂTg¾'OŽ='gñí&„Öòâ¡ó~UN-橸Bf`‹<ñêWæ© Ýz¾®•‘#¯ËÜ|{¢´!H7ÊЯǕª(mvJû²qÇwå×7Ý}i‹ÒPe§Õ}LóYµ±¬Ðý-<:}¼½šØÖïF›¥ËÏÏÛó§Ç{¬é¶õpgaØ®i&ºÏ¯¨~ènWXi\ºÝ Óßû""‹=ŽðCþ˜Ââ_Ëh§h•în�ù®× ³9A:‡>ßj¨ß ‰-_§&óWÏÈɱ‡œFüay³šÂ Æ…sR^'{N\òŸõtþ2qh»¬ßùŒœIlæÝ&ÜyGŽnÞ(£WÝÊ-™›øGÙº~·”Ï´š±õ–\=û#qÄdé ±“ŠÎ½™{Um’巛ώܑá»~רl¦eǬ†JG TÙ‰rÓÁ7¯"XVèî^�¼ h`š¢Ä¶w@ÐüùŸÿy=.ô`ïu5sGõƒÐS¡’‹ÒSŠ}ð‹£‘¨ç Ć9äÙ|‘6AiG5ÿÔ:%œýJw7¡£隸¡8ÍzÏÔ²òüîBËWf¨÷ ›1'#J‚šÜž9"ûöËÄu¯�†û©”v ÊÖC¯6zß°ìÉÛgäbšâ´ö[9¶mÓrQ:I^+}VÖoýG™¨÷¾Ý•êÅ3òöÅjQã~ºvLf"'ßN¯=%;Öo—Cž¼Zõ¢¼ýöEqÚ©oJÃ\c*=¥!ËŽÕ}Ló?ÇÆ²B¢)ñ»p-n3Ñ}~¢T×S…8l¿sá|Ê^Ý ‚Òî}á%A ‚ÒÝMhÅ^¼$@Y¡8Íz¯`ú²¸Ñ2–>óreú_å“o»u£§Ôjù’¨|(Ó¥OÊšƒ§dùW|·äʛߖÃòظ±g’b«ö'™zX–ïȉÒgŒ¼pö]yCžÞ¹Q7Ö½¬:×1¸4,ºvY¦_þ¡LΨh\êEÜ<öKϵ‚ªÌÛ-«{dÛÑ·–ûÏÿIÞ|úaü‚ŒkhÎO—¤Ùú©iˆÒÈ×è’¸( SvBÞÇaþïØXVH4%~N£Åia{JÑ+©aükT4®fà<fÏ£9¼º“hzü,kBÔDÓØÍ@tâÍ2JqšÌzÖé!ï¤{Ñ2–>7åâä³rp÷°ô/–õÙ2úŒL¥ñMi}mÒ!98õ»Ci6ì3)QꈬãOÊ£[×Iïâ¹¼ya~?¹ÒÅÌ 2Y>(»'Lr¬›Œ–O|ª¢t­ì<v¶1!ð]p#NC”ÖE—Ï1uK@F½F¿ô%2|7LÙ y;„_š¢XVH4%Y»Ø¬€a¼èÁ3ž­ ‚=*‹F,¬[†Šù]o™è>ä…é§=Pȳ8Ðóø¡çÑc`î51ÓeÊž)†²†¦³[1§ÙGëX–žyÒ}h9#„­l-+$š’¬]lVh%B±~8ÇÂ0ˆVÂÇdY\„ÁïºüL~Ø~=Mq÷’ÏÄûÝ( b8k½%~iÏyMwXð¼ãúZ /÷§ÝðÌw*JqopŸI }ö !Dë[Ë ‰¦$kÛ)Z‰P)S„†B 4NR¯`ÍsCÕÌŸV¦ Çnoƒ0î^Rà=·÷»Qô`guèž7íy!¯é‹¾Ð@=ŠÓì¡u¾,#$)ô™'„­l-+$š’¬]lš@\B˜hÏihDª[¸ø5T‘¤%¬àÍf~53müa[óÚl&ÑK 4Nä·Š XV¾m†¦5oä5ÝaÑë‹Z'PœfÜÔCæK1B’@ŸuBÑúÀÖ²B¢)ÉÚÅ& “š~³˜š=¡Íò$.?¿†*,/ÕLs+ÚC3„Iô’=—™¿¦Î2šÞ¼‘×t‡׆çÓŠÓ΃üç7¾$ º¹>$„DCë[Ë ‰¦$k›£*~LƒÍBCK‘>¯@…V4¤²Öp5ÓÙÌTzÝ ©^R ñ $òÔð×t缦; xQ„kÃsÚ.§u-!iÐÍõ!!$ZØZVH4%Y»Ø¸Ao£WŒ¢ñ!šÕá[*Pu¨«×L‘ÚÉkðK[ášð‹Fx½¤@Ï 1‘Õ{„¦=oä5ÝaÐÑqŠš"ˆSÔÁ¸Ø‹/¾(Gu}énº¹>$„DCë[Ë ‰¦$khèAtz‡èB� ‰m–Iø0aÑ“ˆki&R±=¾i U¿´ÚøM«—hÜy$¯iÏsž7Ï”^[ÏWžÄ© LÒ¬†ôªé5Ùÿþßÿ»þüÒÍhy'„ó?ÐÆ²B¢)ÉÚŶƒöŠš ;lc_˜†ø¦Ôlh%e¶ß‹ªHEï_³ÆŸ)Tý,Žžb¿óúÙÛo¿]ÿýøÇ?¾ìœIö’=ÉkÚóœçÍÀó‚ë‹®$‰*NQàxÛgáU`¢Xë­_`Þ—{Q uÑã?.ÿù?ÿçºû?ý§ÿTÿÅ5†Å˜<¢Ï�!„h}`kY!Ñ”díb£‚Ƙ_¯(Bhð„i¬ù5Ó0¤1Ž ^{S£6 õ›Z›F­_|¦íܹS~ûÛß.º‘Ç ú?¨ÁÝ.ÉkÚóœçÍÐ(fN¿:ÉOœâø©¸C] "Ï5üaH¿ŠLÔ;§¡ŽÑ¸Pé9 jõÜæK@\‹ÖKø}ï½÷êa5>ÔA6õ!YGË8!„h}`kY!Ñ”díbÂFD^!‰Æ—·áp~qh# fºãôóžSªÓ®PE4ëõõ¯fÏj˜ó{Ûæ¤8ŸÙðLº—è¹óH^Óžç<o†>¯í>—Q §xVñûñ‹ûm ñ¨éóS kG4곎kxíµ×4Ρi€_Øz›¼ å›B´>°µ¬hJ²v±­€ÕFŽZP¯¨ßu©5ë™"¸sÄáàÆµxªšÙ“ wÍü@¿öVú T©ÍŠ~a`¤øExüz©yl’ Q=G1ó(ÖMèó‡ç´Sø‰S?ƒ¿ Ló%êG<kjiaÖµÈG­TÜã×ì¹Åñ„t Z® !Dë[Ë ‰¦$k„Ÿm%š ëmЩیnÓ„€Ûüž noZÑpÓÆ&Ži§çÂ4õü~ùìw>óÓp,òTÝÈñ&‰ž?hÚójÝ® "¯ÓàÙBz^zé%ù/ÿå¿d:Ïõ;\¶ºÍúÛ¦xÅK,­„ä-Ó„¢õ­e…DS’µ‹õÒŽÅ1hHša!ö4>“fî$ü@«°ª~b†}IˆSÅ›ïÞÞN`¦†R=F÷y{>¯ú…¹‡í çÉ#yN{·ú÷B…U§`Ó:Ïå_þå_Ö·“~ž¢`¾”B=¥è>?PßéuáW‡ù’Wš•wBH±ÐúÀÖ²B¢)ÉÚÅ*Ab´YZÕG¿!©hô(z,ÐâW3Ý­üÐxÒÞ@¸sDqûù!fï 7M‹ÙDT?\—6½=EØÓüSAªiD8ìö¢÷éMœÇ<wžÈsÚ» ½úŒw¯ Åó¥/Þ²"âÌ4âyW´ž@ºƒÀõh½ õi½BHÞÐrL!ZØZVH4%Y»Ø 1ŠM3ÐpÁym Á°­q)æ¶6’â24¶Ð0ô 1sDqùyÅ©†ùª8 môz…¤y^ ×­fö�Ü[õku?ã@Ï•Gòœön/²pš ©´0Å~U$ã9Ã>S�v Ôú¨7Ï´¾ óB õ(ŽÕk5_(’´ BˆÖ¶–MIV.ó»"X1ê'bÑ(ÒFbnÇ-FýLßöCÐA$z…*hæë§×‚s˜†ÄÕˆ6óÖ+vu¿n›/¼‚‰Û¤Ð´ä‘<§½›Ð:©Óðx)ÜŠÖΨã¤uÜ&*žÃæ%®QãÓpÞ8 É2Zv !Dë[Ë ‰¦¤Ó‹F†·‡3ŒÅ›s~f8íA4Qwb4ÈÖ­[WxÚóbÒÌÕÏÌËVyØŠf‚¨ŸihDš fÅŒ«Ýt…EÏ—GòœönB_ôt²§®™ ú«ÓåEŸq¿4¥~/¬‚Àµ™/+ƒêB²ˆ–[BÑúÀÖ²B¢)éÔņ£Þ´y{ah ©à41ÝæñY2ªšFÅÜaý�Ü0ÍK¯¿I_+A Ô_Íll­„‰+ ôœy$ÏiïÌáæÂ¤° A¦ubZ/|¼˜Â1( úÑFà#N3²òýl@м"öI:hy%„­l-+$š’´/Öö›Q?1Š?aý® nÅÜpkƒ(«†žTê ·bnƒ0~z­¶ Ô°"RÁ} j,wJ=oÉsÚ»}ñ<u¯ möüèÐøNˆ5ͧVil·^‹L½Nâþ¢‚¼6ÿQVH¶Ð{C!ZØZVH4%i]lÜbT#p+æ6P7ŽÕ°y0Tüš˜îf~�n˜Mã/ŠˆÔãü†Þd«¸’@ÏGòœön¡“B/Š ¨qžß4A£ilõ­¨×®ÄýмÁo'‡Vwä¹WŒê6ɼ/„Eë[Ë ‰¦$é‹MCŒÓmnçMªA˜¢aŠmÓägÛ#µWSõ‚Fb”uR¥/ä9íÝ‚–á Q�IU‡iNvd¦³•6ëá8À¹ÍIpþvÅnÖÁ=Öº†¼×ÿÄN•UÒ½WÉQ•_—GdUO¿ŒT.ºû\æ*2âž¹ Jiºê'¥2Òïs>˜¦oÞIÖn×F*2׈,j2å-©”vÉú^=çn©ÌÍ»þµËòæÓŸ[òïÿ”<ñÒ9©Ö\ÿe4ÉûPÜ•êÅ_ÉD¥,_?ðˆl]×'ý¥i'‡|¨]—wO–dÇêÞéj—&÷¨¿$ÓšÀÀòóäk\„)ÓHWHüÓÞ²B¢)Iòb½+£ÍÎ?¯E£,ªp› —<š6:°­˜ÛÀÏ ó¥Þc䱆 +"õxÝF:ÍÞÑNOJb¦/oä9íÝ€ÖS¨‹ÒÄ[gâùƒÖi•œOëi<çZ?‘”h6¿eEzºQ”5£Ší‹H’,zÏ’¡&7Ïü“lÝp¿l¿oM€(M³Qºne:nœ’ƒk¶ÊØ Dƒ+xVˆÏdêàfÙ8ö–Üv÷Ä‹#�Ï<#;6ÉÎÒ 29{ÕGüÝ‘¹ËÀÐR9sEæ!xþÕ¯Éö¾OËÑ3¹Ç(-ò>ÉÌчeÇÞ'äëåïJidM€(½+ïŸúª mø9>sÙñ¿%WfÆeßР<~ò='%qt<ø–¯šÜ˜zRÖl<"3·PÌaÊt'Ò­l-+$š’¤.Öl\¡!ÒêÏBÈOŒ*Þ46scØy¤jè5"Nm(ˆaZ Á3ÁñzNoïhØÆt’˜éËyN{7 ÏCšÃa½‚4ê¹µþLC˜hÝŠs¶¤�õŽGÝ7¸^ó¿# uO`”‘ù’Ô#¬Ç…}¡HÒAï[ÔªÓrdÛ)½ù–¼è'S¥ÉùÉ•Éó¦€[ë“_–á²Ì.À툹ó¯ËK“çåfÝßåúkr``‡”g—í¿”±ÍŸ}'/úˆ>åOrrïÙv췆л&“6ɦ£ï8Òp‰–y™ªL—D©_ºîʵ“_¾mÇä|ì+¤(½y^&_z]Îß4ðïN~ Épùœsç L™îDºB¢õ­e…DS’ÄÅzi³F þxÍ·À0ó.oÚš¹u»›©iÚHŶ‰Ÿf#J£4èô<æýC¾g¥·BÓ”Gòœön@ë´ùí RÖ7°H΃ô†}Öµ~‰òÒ+ ¨óM‡:I'ÁË~Ÿ¼ÀÝìzlêo’<zÿb§vMÞ,m—áÒr½ÐC™º(õ¡öorò±Mrÿ±ß4 uÏýÇäÝDü\>±Wú— MÜU™ÝÔZ”†ÉûÈ4¥~ér’qq\v¬ú[9yÍ”ËqR”úP»vR»ç³rìÝ[±,Ó‰§+$ZØZVH4%q_lAª¤0 £Ç{ÓÖðØîFSñ§˜Û@Ýz\Z¢T Îf÷;m¼éË£‘ô1ë4Ês‚è3l> f¥~Ña¶QêðAó¿yšÉFŒ*x¡Ç“ì ÷1^Ã97oû'9Sï j&J×Ê–íCÒ念wýÃ2öÚ%á“ µË'dOß.¿ÐdPn풜سQ?¿LtÅ„å}²ù«ÇåŸ÷msób@¶ìû9[5#Ž'¾(k†öË8†É.ß}Pʳ7 •÷‘i&JéX÷y)¿þ{©Ö0|·"‡v|̹Ž$^:¸¢tí'eûÐj· ÷ÉúGäµ¹f¢.¬øo«2BºB¢õ­e…DSçÅê#Ì+HÍs æíÉÔ?^ó8Åmo¼Ýd›z&~n˜6½þ&ê׎(Eƒ3LÃ)m4}y6’>:ÔuIÒxi;çÄóždº!ø4Q{õEY"u‘ù?€Ô,½,ó‚´™b†üŠ"úõÞëÉz?ã¤öþÏä‰Iù×:YQ€0ªÎÈóO‘ãgåê|MjÕ?ÈÔ‹OÊŽ­rèÔÕ„ Ém¹0¾KúöœËMNV»0.ôí•—“’ÊÈŸ~ééý„ì{~J.TïHõÂ)9öØ  ì{U®™i»sVÊÛî]¼o==½2ðØ yÏÉ?:ï#ÓL”:Ô>”³ßû{ÙÒ‰Žz¥è1ùæ·þV6Ü{H¦nÅ}'œ¢ó=yrì9™8{ÅIÏ]'¿Þ=(C_•SïôÌÖÎËøeωKÉ•-›2FºB²T®ì,+$š’8.ªæÐ©f�ïŸoÐP]s„qw³ …iÃN1·ºõ¸(švDiVÉzúH6ÑÞª¤†š*~‚´ñ„°I•y¤Uã¶É­›£ÔIíbþ×à›Ó4Ï£fˆ*F¥¸N’ô¾Æ‡Û‹åÆ»ÒZõœ}$g~JúF'亻'1ÎIyx] 1pSfËÛeU áÚþºaÅ$JµóÇd›9üµvQN|n“ í{N¦.T4ß’«g$c#eóØ/åFÛyߌ¢tá¬ÜyGŽnÞ(£WÝËY˜-Ëðª$_.ѼLw.]+ñ/7á-+$š’v/s’‰ ï™¼½£®~½£æ6ãÆŸ{· R˜¾Ƕ‰Ÿ¥q£ qŠRRt´>KRÄÄ-H•$Òn¦Õvx¨^g×äƒùÿ¥~KŠ8Ũ‰ÆE²C:÷$JoÝ-9ì3)ˆÒšÜž9"ûöËÄõ&ŠÞ~KÆ6n:ñÐp÷<vrY¯è Qð½âütIúÍ¥P–‘RO©‡Úõ7¤´ù“òÄä•ôzÿj¿•cÛ6Ü«ªÌŒmIçeÇ š•éN¦k%ZØZVH4%í\¬9\üh¼(fœæký#61ÝÍü€Ÿ»‚‡(õ ðr Y˜ 4LVÉzúHö@†2ƒz*)¼‚ug\bMG¬½ŒŠùÂÏV8#Œ^k'ÀùÍ‘<¸ŽN}n€aϦHÆv\“iiœq•%Ò>zO’ÅOÍË•©‘”™‹èõî+ræDIv |JÆf’n¢般OÊšƒ§D¿Æ\IMnLM6¬yR¦n$+­jï¿.‡††å±ã¿”+óX¯ôW2¾ÏIŸ9|wá÷RÙ5(ÛK?”³Wñí$†­b˜ï°ÛSêG+QZ•Ùc»euÏ€l;úV“¼'JkÕ 2}òÛ²wp@†½.ï'‘mµ?ÉÔsÇåÄäÛr±þÍ­“_Wß‘¥ÏÈÀæ#2ãw¯nüBJ6ËÁ©ÜI`Q¦SIWx´>°µ¬hJl.Öû'4\/S0jÅÜaý�Ü8gQ)L‡å*æ6P·V`j/©ŠÞ° Œ7 Y"ëé#ÙC_´¡®J¯ Ŷù2¯]ô`\ÞhýŠtÚŠÔCˆqu|Ϫy߸Ä`’£JÔzŸ$Þïdh=Gô§o^®Nÿ³|ô~Y׫~½Ò¿eŸ”§Þ Õ×õµI‡Zˆ¬M:ÔB¸Æ…#¬æ~&c;7Jo=/ü&:‚è{G¾·8’c½eçØÏdÎý¦t‰fyo¢¢t­ì<vvù28¾q¨õB·ßÝïI?'¥礚„ µË2}üIytë:7¯`N~>#S¾¹k€&þr!j™N+]áYº¿v–MIÔ‹õ6ª‚ÞÈ7ë5·AX? î¢ RX=¥^l{I†Ë*YOÉúâ,®žF“¤)ˆS�ê˪vÓ©GE}镨ïT¼Á‚^¨Æ…WŒ"/“Ãz]iL&E¡÷B´>°µ¬hJ¢^¬þñ¡ÑÔPÑÆŒšù§ožËÜaýÜE3Í{ÅÜêÖãˆL=¿QA8o²DÖÓG²‡–™¸‡w¦!HY7¶ƒùR±]‘£q%=qTÌëƒhŒ»wñiÝ ÃýÆ9“ÀzMø%Ù@ï?!„h}`kY!Ñ”D¹X4¢ôxo£Mã0©ùFXý¹ Âú¸‹ÖCª¦ÂÛ&~n˜6´¼þŠUDƒÉ¦®çÉ*YOÉÚË‘'^A ‹[™hÏœí9Pok:ãèÕKkҨ྘½˜qˆæNˆQEEi–ÄÑÑr@!ZØZVH4%Q.VgÐ÷J~‚Ô·éŽê‡?ö¢ R˜6vs¨[kÖ(…Õ†²íPE„õ¦!Kd=}$[¨x ªßlð¤I ßTÚ‚l¾xŒ+´>Êâ°Rü§˜ÿ[ÍF�5aL1 KKŒ*Y&MhY „­l-+$š’° £Çúõªy©7NÓmãWtA ÓÆ¶Müܰf¢TPí4`ô<Y%ëé#ÙBë—¸ÄS')г¨¢ÒLoœ=i¾&Ù;Ü.¸çzíø +èñ_hþ÷Áà¶yÒ.È_œŸ¢4;h™ „­l-+$š’°«¼~ÂÈ+H7NÓÕ‚´aaD©ùòÀï?öë°]X;'#«d=}$;˜ÏM½[¤@Å ḛ̂˜u,~ãìáÓë3Î$@úôe¬Ù$HY£ Òªi!Ù€÷ƒ¢h}`kY!Ñ”„¹X³Áæ}Ûí¤Þ¸š¹Ãøá–‚´aÚ`RÌm�·÷å³±Üî7^ˆÃ›†,‘õô‘ì uWÐs?Ašæw~6âDë¤;HˆÙG¡d¾´C~˜ÿy¸æ­†¼ë¤5Ñ4‘lÀûAQ´>°µ¬hJÂ\¬ üš˜‚ÔG3wX?³ACkÝSÚìå0ËQzQ‚Ðse•¬§d­ËÚ}Qã'H½õfD™ìH¯éFúãĦ×6 Ì—¡¢(æ½E}&ÓDÓœµt-+„¢õ­e…DSÒêbM¡c¾ Öž˜9,ÍW3w+?ö.7íÍPÌm Çù}o Ò8zCô|Y%ëé#ÙAŸvDYV);Ù‘Ù+˜ÄDDyž|ǯWT¯%«¢Oÿ#(J³–BÑúÀÖ²B¢)iu±ú'§oÓLC‡¥yãhæn凯�éJÓ†¶Màzy�°OïW\‚èù²JÖÓG²Ä$Ê ¥-~‚4ÎÉ‚¢¢Ï{3Qôb1N¼ÿyÂuoë™ÆþO#ßIçÑç‹B´>°µ¬hJš],þ€Õß+t´±á ÅíçGAlú‚@1·µ1â×Ežjƒ9ÎFâ3Ó5²ž>’ ´·°™€k†Ÿ óå Zw#~˜i¶½î0hOcE’ÎÈ«/ña KJÄ·‹þ/S”fÜ !„h}`kY!Ñ”4»X³—Ô‹÷ÏÏG3wqئù[³žR5?Ñ©÷JÃÇ…ž3«d=}$h=g#4²(HY—z¸Ò4'Ý›«y›õF䆙õ¦~« Ë¢8ÕÞïNöÒ“%´¬BˆÖ¶–MIÐÅê6˜·—¨_\¢ñ¬[·®¾Mó7?Qj6>ýüqïÔ?ƛU²ž>ÒyÌçǯžkFV©¢Ê|î‘6‰’FZõ\y¥H§yOõÿMA~aŸ)Nq<öeá¾#ýH“)¤IçÐ2B!ZØZVH4%AÛêÏ Â~a£¸±M1Þp/ð«`[}h¡‘ìEÃ$ÑHA¼fz²FÖÓG:Năç( ~‚î¬Rà7Ù‘Öi¥Uó&ë /ÌIPüêSôJfMœêKH¤…t-„¢õ­e…DSt±aE)~7ŽfnÝÖ¡F´p¦÷Ûhø¨ ýøÇ?îÛ€ÒoåÐ@‰Ú MWVÉzúHçQ!e"ž AÚJĤÖÑúù~ÓL+ê(ÍŸ,ƒ¼0Å%ÊBaé'NGun4¤óð^B­l-+$š’ ‹M«§”Þ´—äA L4ˆ´áÜjY[4]Y%ëé#GÅDØåPò"HÖá;wî”r¹¼˜Þ´¾ƒÌÃPRó ÷i¶EgéÕø`x¶8Õò™Å2Y4´BˆÖ¶–MIÐÅú5(Ìãâè)5´Ö†{aö>hcÛ^´q”dƒPÓ‘u#Äê¶ŒäI"MÏ?ÿü²´Â¾õ­o¹G$N²²ù£/ö`ê¥w´øïÔúW-MqªçnG`“xÐûO!ZØZVH4%AÛê-7{JÓ·‰‰‰Åífᤇí*š–¬!~èsf¦R?A K«×±xΑ\‹_:ÿÛûoõß4E´÷ÅeVÀ}×<ÂoØ^ò¨ø‰S¸“‹ú-qVÊf‘ÑûN!ZØZVH4%AV”jƒÃG3·n›Â–ÖÚZ ÙhˆèñI ÛUô<„俉€üÈ¢ E¯Ä¾]4¿gTCzÑ;‡4ê‹)HÍê8Ñïu³"J‘¦HÄv½—8‡~Ïkž;)qêýo&Cï7!„h}`kY!Ñ”],{J³cè!m5©0)AI£ç"$¨Ðl&в$H‘Ô»¦°2 û!°ƒ®'Ì·èq¢éLºg0 ðzñ›ô ;?‚ÄiÜe ׆¸Óø ÍÑûL!ZØZVH4%AÛJ”j8mÜxãhæÖmSØÒüí»ßýî²Æ”_^½_°´#z>Bò†>/èe Ïš>{¦¥%h b X‚†äB`¢72ÊðSS˜âÚãúŽÒ=O'E)®O{Ä5Ï’ã­À}Å}3ï)îE\â´Õ7I½¿ÉQ•_—GdUO¿ŒT.ºû\æ*2âž¹ Jiºê”5™¿ò–TJ»d}¯žs·Tææ¿y'Y»´xl¤"sHbä¢TFúýÏç—orK®Ì¼$¥¥W3ÒU«þVNŽ="Cý½ ¿þm²ï{ïHµæ‰»R}÷¤”v|ÌMÏ€l}â%™­Þuýæ/ËLåk²ghõÒ1(ïšÇ$F“òÕ$_ûKÓÎŽ-WŸ3òþÓrð¿ Èûæ÷±˜ydcY!Ñ”]l«?¶ ·îÞ¸š¹±Mó·¿üË¿”Ïþó‹îf)Ü+mà¤ùv\ÓFHÞÐbAÏK MòùBuH® fÝߤ„©¦»S˜õ",kÃY‘ïH“™Æ8Ä©þw7{áBÒAïk2Ôäæ™’­î—í÷­ ¥*ÓÂYgž‘›dg陜½ê'®(]!>©ƒ›eãØ[rÛÝOëVæÏSrpÍV›1zíC9SþkX¿KJ/¾.³Wo¹Êe™Ý ½COHåÌçj |ÆeßÐFÙUù½,¸G…¥öþërhhX;þK¹2Ñõ+ß÷IYóøä²+´j×~*O>R’§þàˆ/'/¼&G¡µyì—r£qHB´(_AùšwåÚO¾&”^”© U©Õªraò¨SÖ>åÜÃëî1.-ïcgÐúÀÖ²B¢) ºØ0o[ÍÆ ÌMÞ8M·n£¦ai C~¿üòËËö5kL™½ÍèH=/!yCë-?¦ Źð ã¹÷ž†ý͆äÚb^cÂñé5¤ έ߳ Îâο8ñ§ØÆ>Ûû¢ñÎ’ä}¨U§åȶRzó-yÑOtB”Þø¥Œmþ„ì;y1 §Ì:ç_——&ÏËMwOë¯ÉRž]¶7&>’ó“ÿ*“ç?rÝ`A®O~Y†Ë2»¨$krcæˆlÞðE99$b®Èdéq)M^qÝÀ‰kb¿ô-‹+ ŽÈ:ù·²jÛ19oôôÕ®”Çú>#ÇÎ¥¡&M~IîÙtTÎ&ØYÚ²|¥.Jý¸&“6ɦ£ï8¹©„¹Aë[Ë ‰¦$èbÈR€?Mmà韪I37¶ux¶‹lÈçÿ÷ÿþ_è¡fè)1²h0Û6`lÑs’'ðœhÙõ>3¦X3-.AšÄ\[¼Â4NÂþÄ ®ÉìeF^¦]/¶ʆ™~[qªáÛéQ'í£÷!vj×äÍÒv.½!×kâ uQ:/—O앾ÆåB¤¡¬g_{î?&ïFíj´¥öorò±Mrÿ±ß,õnÖ.ɉ=åñ󎬉BMnM’{#‹RWÌzD©Ô~/ã;6ÊÞ“rwx±ÁS¾2!J¯ÊÄèF.Ÿ‹á>&Ö¶–MIÐÅú5*‚2ÅläáO ﱦÛÏqàÛE2ä/òZó[ ìS¼“vøõö¤¦•<¡õŒWˆ Òv„êµ4†äÚb^sœ=Á: &MQŠ:ÓÌWÔ©yÅOœ¢ …-#Èw„Ëstzÿâ宼ꫲyÛ?É™›hv7¥keËö!éwÓÑ»þa{íR@/f» ×ê>ÙüÕãòÏû¶¹ç-ûþEÎ6ûþ±"¢vù„ìéÛ%ãŒÁÂMÊ{¶ÉWÇ¿+û¶ 4î]ˆïEkÕ·¥¼óòÐøo䎻/,µk¯Ê¾M²§üº\pò¨þÍä¡eµï7œ²:õ\}¸°Íù²|Õ÷ÈÚ-÷/}ãÙ»QvŽýLææ“¿“µêdêùý24ð9×ÈlyÓ ž–6,+$š’ ‹õ¥Í@ãËì1U¡äÛtù©È]·n]ý·›Lóù‹!0ý[ 53‡¥!®N¾ ×t’' ¾PnÍ?A‚Ïê£( .Ä­ÂÀkØŸÄ\[Ìbq SˆÞ—kI€|Ôz†^è¨÷,«àÔ[ŽpZÕû&wŒÞ³8©½ÿ3ybãCRþµ~  ª3òü“GäøÄY¹êˆ„z#þÅ'eÇÀV9têjéèw„É'dßóSŽÈº#Õ §äØcƒ2°ïU¹pÂÚ…qy o¯œ¸œVîm¹0¾KúöœXün³Ž;1TïÐ~y¾þý&à³òØúûdßÄeßüjÒ2ôÄ+–Bì®TÏþ‹!ž>!{¿9&£åàÔ‡î1Š›¿8nõCräÔ{‰¼\]¾ä™yþ);>!gñÍf=¿^C;6ÈС×åýø Øî½êéé•Õ#ß”Sæ0]‹û˜ZØZVH4%A‹?=õ +|La ƒÀò§æ6òë&qªo½Mà6hl5¦p̼…8í4šBò„>‹Ú‹d RøévXAŠgõ\†äÚ‚ôkzã¦úò,iQ q¯yŽßna(«QÄiš/H0z¯â£Åìµ-‡ë~$g~JúF'Ä35L `(冓ÕΓm«þVN^óë-½)³åí²Ê+“d᜔‡×Éž—– ”ë2Ú·eùÄGrKÎûŒ¬Ú{R–?i5™Ÿ{Um’å·cík)Òç¯ÈÙ“c22°MJo¾ïvËWMîœ}Z6÷í—‰ëIÅvîÁÕ3rrì!:,oVÝóEºé⟧á-+$š’f‹?=øáÏÐKP4âôQÍ+ȼaÃøáOÙì%̺©6{DàVÌÞ 4¦T¼+æ±f£9K /M?!yÏ’>GêÖg õ”ÖUÍ)öãD}¤Ç›†øPwâ™ûB/ ˜ÂÔ[EE” ÿ¸A¾š" ÛyÊk[üÄ)^†xóYÿƒ³ðò²Èè=J– ž,?ódDi£òžÇœ†¿!ÒšŠÒÛoÉØÆ 2:qÕÝ‘45¹=sD6ú‰¦Úyà>yìä¿bÕOÌÜ’¹×ž’ë·Ë¡‰?Ö{+kÕ‹òöÛÛ§õo9?%žøY‹žÆeêà}²vlƘà')¢”/÷~§"J]nMÉÁ{?áˆPw"«Ð÷1}´>°µ¬hJš],þäÕ?jãBÅéÇ?þñÅ8´§=l›˜îf~7þpÍÞÃN ¸fœŠ¹ Ì0H¿ŠV?—6šql–^z „ä¼$B™EC>HbŸ÷™„϶W¨a–†äÚ—0Õz9êÿFðB@ï~‘ïEÿúÒX ePóy¤ûHçÐ{“,~¢a^®Lý‹|÷ĤÌ\¬6çóWä̉’ìð[B#&—8ñ¾[“Ó_“ kž”©íª¹°|(Ó%'=Où,§Òø–rhÃßÈñ™ËNêr/CKÃ>çÿ$o>ý° ~AÆÏ~¸(zæ§KÒß_’éˆU™=¶[V÷ ȶ£o/áR«ÊÅéÉwön–UC_•SïsÉ^™–—°ü>6zJ“»Ëñ¥µ+oÈsßý¾LΨ¿%WϜҎ -Wã”éé•L¾-ëß(=¥›ÈÌb q;„Ö¶–MI«‹Õ?¾f=Íð§0³ÁcžßÜaÜ8‡Ù˜JÃÐІ-¶Í†Üй à6Øn–§ú¶f›ÿI¢i#$/è3ûÜsÏ5¤hô£NÉó\[Ì:ÊV˜jø8Aý§÷†{÷—�í$NuY1äézO’¡ê¬ÁÅs4L‡WÎËÕé–ƒÞ/ëzÕ¯Wú·ì“òT2ß"6À°ÖŸÉØÎÒ[?g³‰Ž°6éP€@LˆúÚ¤Crpêw‡ô‚‘ëûyæ gñ[Fk*J×ÊÎcg—/ƒãÜ…eCeû‡eOé2»,¯jrç⤔î^šL(•ûš•/'eWß”ã?/[×¹ysòk´|*¡‰ŽnÊÅÉgåàîáʼn»êåkô™Z±ôK‹ûØ!óÉÒ²B¢)iu±øÓÓFY»Â mü©aD nmd`Û$¬éÃ6/øs†Áí·Õí á¸æ6ðó ÛØCüÈk=ᲈ¦¼ evíÚµõ_<g*tþüÏÿ\žzê©u u žC<·Y­f]µ·Së`X\ æË¼°#K Lâ%‰ß Ò9x!ŠY/ÛXVH4%a."©•0m‡éï'NMƒþ`q^¸Mš¹mý€mØ0~hP©¨… RøAôj^ã·™xí4z=„äÒøgögõßx@|ðÁÅrì5<³Ý0$צ¨‡¢ä¾`Dþµ þkð_ ÷ÿ E½a@~A°›â´ˆÃ›³‚ÞBÑúÀÖ²B¢) {±a„iTðg©½jæŸ)Lª7Íܶ~À6¬ŸÁ¸&lÚ‰L¼é6ÅvÖ{d4­„äSÜøê5ÓCrmÑQ„i\ß3â|z~îMÿ;E�ùô?þÇÿ¨çEiçвK!ZØZVH4%Q.Ö¦‹x#›D#¼¥÷ Tuã¼:¤ nÅÜaý€mXÝF>˜=øUCºƒò ÂÓ*‡cóÒˆÐ4’¼Ï¥ÚÑ£G 1$×ÔYQ…)ê:_[4=¯Ö÷$<ZÞ™wCË0!„h}`kY!Ñ”D½X4JÌ¡·*¸¼ºfqFñ ¨¦áüÚˆ1ÿ€áVÌmÅíç‡ëÕóm¾×® 1ê=6½£&šnBò�žW¯0Íòðø¬` SüúÕg&ú’ u_TPÿ™õ)¾÷mu>â~+msH<h9&„­l-+$šÛ‹õû. ôò%%¬/΋F÷Ü^CãÆÚ{©˜Û Œç5‡¤ d\?†˜!Ay€ýfÏ( qæñm¶¦Ÿ<¡å–õð@jÛJ˜ªðZ§á¿CëVü¢Î%ÑЗ¸æÿ#‡ïv½„¢õ­e…DSÒîÅâOМ¦_-i T¤¢q «ÚÐÑã`aÜÍ( þú Z«·ùÝ$F½BòžWöFÇü|£™0Õ:8l݆xTȰäÿF7¡ÿ~ÿÁ¸Wìiî,z/!ĬŸm,+dZ”*øã úsD~iý9êu˜Õ°¦ñ†ù®JéF1ªèõBŠ)LQ×û¥^À ¿ìÕk î^œâUóZ ÿwœ¬+;è}!„³®¶±¬hJ’¸X¨æÛo54dÌIí• z3¿f4óW?ÄÆŽ÷œ¦Ûkð ­Î‰ëG£ [Ũ¢×E)¦0Eg‚º6L½€:Ò| åe_‘0ÿOü^²â%éQIĽG„bÖÛ6–MIÒ«‚Ðï­®×ð‡‹† ŽÏSE xCíwÝ&F½>BH±@}§Ï¿)LQÏiŽ1Å^’åèÿ¦ßÈ#¼@ž§9úˆØ¡÷ŒBÌzÜÆ²B®E©‰_%̯G†?_øÁôO8+oƒÑ@ÚƒÄ6öC¤v£UôZ !Åõ±Ö¨ëÌ}~¢u&ŽÓ0¦Ý\?F/bƒ^láÿ¤ÑûG!fncY¡kDi+ð‡«o‡ux˜Ÿ¡1Ó)‘ªbÔ›>m4 ¡(o¯õÚ !ÅĦØÖTl›@p™b ueÑ{ùpý:,×ïÿNG eåE,‰ŽÞKB1ëwË …¥^ÐP5ÅêÇ?þñe7 ‘ª½­Ú³êµf~°°aÍÆÜhTÍBHqÁK:­ PGëË9íÕ3ýQ¹ÎÔÑBú¿bòùStÁÞ-è½%„³¾·±¬PXQ;͆ý&m8¯6¸ŠŒæ!¤Ø@L™u¤Ÿý¯ÿõ¿äûßÿ~½î,Rï®BÝüŽVMGØp’§îDï3!„˜u¿eŠÒàO?-cãa‰n(;„x@ݨsìÙ³GþìÏþl±Ž2¼àCï*˜½«y½œ¾ÜlXn'>=!é£÷œBÌÿË ¥$“°ìBü€@EÝ�ÑùÎ;ïÔ'„'„Z˜.úIz!t!V³,âTû]›ÎPäaËEEË�!„˜ÿ 6–(JI&aÙ!„Ø‚EˆMí]… óâê5—…ÞUœ»Ù°\¤#kŠ–B1ÿ#l,+¤"Ji4[#„8˜‹£w5Î ƒtX.±wX.Ü–K¼hù „ó?ÃÆ²E)-ÓF!iÐNï*Ä­ö®†íÁÔa¹ær6j8/0‡å’ ´¬BˆùÿacY5!„Ò³w½–QzWF{Wlа\Ça¹$ Zn!Äü/±±¬ÀB±�Ãiµw=›a{Waæ°Ü8‡“b åˆBÌÿË ¬Ñ!„˜ÑžQ³wñ ?BÚ!kIBHç0¦eÖh„B!9"kIBHç0¦eÖh„B!9"kIBHç0¦eÖh„B!9"kIBHç0¦eÖh„B!9¯aI£Ñh6–(J !„Br„_Ã’F£Ñl,+P”B!„t9~QFË ¥„B!]Ž_c”F£Ñ²E)!„BH—ã×¥Ñh´¬@QJ!$ŸÌOK©ªý2R¹èî$„øá×¥Ñh´¬@QJ!…bAª³ì«ÿõ|CNÏÝvý…ÞJë)É ³RuÍ ç¤<ü ”goº;!~ø=Ó4–(J !¤HT§¥\zYf« ²p©"»ú±9:!×]ï:u¡çˆÖ¾ý2q}¡±knZ*¥éëé“Áý¯È\cwÇY˜-ËpI¦çÝ„_ü£4–(J !¤°\”ÊHÿJQz}BFýĪ| Ó¥-ΟØ)Màîë$ NR÷KÿŠtB¼ø5Fi4-+P”BHAiô”®˜õÞÇžu2:qÕݳÄütIú?±•‚4D.þäúKÓ2_='•ÑaǽFvUþ srú0z[]· ,õÄâOÒè] £ }2\>熽*£ƒïIÏ•ÁLH¶0¡4¦–(J !¤`@�¾üBIF†Gå™é¹eâPä¦Ì–·/ºk¢¢´g¤"sî¾å@(n‘ÑWNKeI&.þ¼ñêÈ·å•ò90ñsyÁ®uÑZ?~ÁÑ“ÏÈHß9üsGˆÎË\e·óG¹[*só®@VQû©ìºßîW­ú=éôi)ïÚ+ås—dº4hÄMQü£4–(J ‰6ú—w„ Ï¾ûg4¸_*³žþNýž4@t6ï)u¨ý”‘]û‘è¡Cï—Ѻ°DüýK½ÕÓRì—ÁÒéÆJuá¹FúvUä’s@£7weÏ*h|OºWJ_ùrã\õ¸qË™x YÙ¥Ñh4µ¬@QšaÐ{ä0ßøBb¦:+åQÄÒpYf µ×è™4‡Èš¸½¨C{AC´ªˆl|󉡷‹"³ÿvw¶\£WöƒK2ýòsRqé²oË¥Ê#Ò×·«!<Q½$X—ÇM1ñkŒÒh4ZV (Í( s?—Ã#à ?Bi ³]'=Ëf®UÑ ì꽚}Ò3xX¦«+%ëbøEÿj}8íÒwž®¿ aí•­ÿ1®‘‘ÒsRñ]rÆ`iÙyÝô/îs°GdBx¢4Ë ¥¶˜kùÕ¿½ú@f+ûeÐkNÐ1¸_J£ï´nËÜéoÈHßR¡h4ÔÜ^ÝçØâ÷QN|Ó•ÒR˜Á/ËÄÜ5·Ñ‡}轸¼¸¡ßwU‹ßƒ-ö„´31 „óšz\ƒ¿"£N~, és®oºRïõÐëX2£Áë{M·—ç]Ý‚zn!v4ã²a¸*ý„]õ)ןç& y‡æºñi/iCHn\ò×ztÙPá©N[Jçôí]ª+êÀû—†æÖÚiñÄMYÆòÿaFkXV (m‹Æ›ú¾Ñdê™1)¿ðî{D*—Qå6àÃÐn:¬Ãõ¡r‹ Àeµ†]³("=½ `Y|NüséÑšÛCÐ7*•©ç¤T>&¥áu¾ß`Õ©7îÌž\G;“è2:¤J\¯#VG+õõ{XB^SÓÉM!ÑÐa}æ´ó̺Ïð°û¨ÎÒsk »ú¤H•o×_tù~ƒjR†—ê–Æsl õu¿7-M¼"‡K?uêB··sqhîõÆË½úË©ßJÅ©³ðjÚ–âªÇmöòÖEªã_9!åò´Oo+!ÅÆ¯1J£ÑhY¢´'ðØ-ß^Ösà3Ô¬ÞX3{žÉ<–áímXŸ~cå àņݠŒ|»UcÌgˆ›ÛP´ž˜dñÛ.mŒjzŒÙ;]¾Ô#ÒüššMnB‰Š¾HÒ?!Gœ–OÈô¢ ]1ág}#%yáåéÆ-xë}YfÔn=¸ø²ÊaiÄÎ…tM4ü´ÎXL‡ j„jÔ9Ëzy}â&„,±ô,Ñh4Ú’eŠÒ6š…²!¨ŒÞ¿ 8Tx”ßY.$µ7Áí\êm¸$sÓ?”°–_߈>í.å CàÌÆ_ Ú»»”æh“¨x4ÏåíÙUQêŠæÅ¡¸KCíZ^Óây¼“›B!„Bº ŠRk\!¶Ø[©è~S´¹½‚+D£I3¿‹òö.è°»ÆÛŒzEå§Ëz/d¯b]ðš‚Ù±Ç2ÜÄ$Ë„¸;4×Ü·¼÷£‘îÊâzˆ­¯©O3!„B!¤« (µÅOœÕq{ ‡©. ›Ócç!zÿâÐ\ïñÞÉGT$6’_Ä‚o²üDp>Ãé¼Csõº‚&&©‹Zc²'çÊ»¤Ïün Ô{G‘]Þ^à:Í®éey¥Ùä&„B!„®‚¢Ô–ú÷K!VÇ™õÞ½›2wú¨Œîz°1yH陘¾(—ðý¥Î2ëíe¬‹ÂN¼¿sÄÞWä™Ù !Ù£Ã|‘[Ÿ]w‹ìŸ¸ä¸ß‚­Ç~4lßè+réÜ1ÙÿŒ#4£NLRw÷5¾'­ ÏQÙ5y¿”*î7j>âw:DØïš~.ÿÒdrB!„BHwAQj…Šªå߈6Xê­OÌQ9'Õºðë—Á‘o;BõƲ¡«õåTF-M8R¥ëäÁ]_–1ý¾rÙò(8¾,:¦+—&Ej†+˜8ë×ibíuÒRŸ‰óZ}‘å“,iþ ½k]“ÛS»”?æä&„B!„nƒ¢”Ä DënÖ™y«³2QyAÊXûtÅ÷·„B!„¢CQJb¥1ü×ó­h 3^ÇoC !„B!Ë (%±Ò¥æp_윓égFe=¥„B!„¥$fnËÜtEJÆr0ïJÇ—¾ƒ%„B!„ŠRB!„B!BäÿªQ£ZÔ5j����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-6a.png��������������������������������������������0000664�0000000�0000000�00000020104�15030617045�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��G�� ���žùƒv���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÙIDATx^íÝÿkw¾ïñüúeÌ SèK0þ¡Åç‡ë¥JÒ‹H‚‹SΖd÷âäfiË%ê¥ ŽO¯»_éYνße“%ficÚz7 9&¨ÙúÇCìõ¶FµóÅŽ^gFš‘>’%YI>–<3Ï|ÒŒ-ÍÌûó™W>3’w ���%„#` kkkÊf³Þ#�@ØŽ€.^¼¨]»vZWW—¦¦¦¼%�€°"u¸AÈFf@�„á¨chh¨ˆ‰DáÒš’��áÅ(Ô122RBJ§Ó¥`4??ï­�#ÂP‡{¶ˆüÖßßï-�„áhÀ Hîe5÷›{s¶{y �n„#���á(¢Ö§“꨺d´©ÅÓZðÖ� *Gµ>ýžýƒžºršNöhWGRÓëîã§ÊÝùXñã„#�@ôŽ"j}:¥áéœ÷¨:¹–4ùÁ¸²…ðÔ±V¼Ö¬ã®Ýê9ÒdvÅ[±I¹¬þŒkwáwôêtúŽS�ÐZ„#8j…# YN>ÝiÔÏŠ²é³êqNÏšÎ5›°‹¿g÷éI­<ý«&Ïöj×\!¡h-ÂõÃÑÓ…)}ßSžèù…&{Kká‹V|··¬Ô:OßóÖAøÕ™ytÓ®%K3”[X™ÔéÝÔ€ö#ÁQ/=T6u¨ü¿÷ÂÉk—:’ÓrW{šM©w×Oÿ§žê[çwtN†‡”Ê>,þ8"¢Q8z†z(\¢#h?Â[]V[Qvr\Io©Žž:Yé¬v›3!<¹¹ßsä~Ç‘ÛÜï;Z^^ö– ¬ª~ž.húãÓêqï;*Ýô喝§È½/iLÓ «Né j«ÜžaÆ �,#ÁQ?/«u:'±_éÿÞHëw”gŽ”ûBÉžõ$¿p~Ãcý5ýÎI/<3G|Cv³¼ú1÷UÏi¥&³Î“;»xDñÔíÂóOþ ³=»µûxZu3G�vÂuÂÑÓ;Jõ'¯õi%ÍpäÞs4ù‹â·nÛ×_,(,·Ïº3Eîvñ·Õ¶bÖyõ ’ÓßzË=ÞeY?–šÙ–p`‡ ÁQçþ/?qô°tóuáÓDîâÂ=GƒJ/TM7…„ùWùÝËiæ ¦êËjÿ©ôñ=›>©V¬—3‹„#�;£|ÔNHÆÿâ+NNÆÌ;+tcJÿêžô¼¢uﲈܶ;þÏú¢ô‰¶àšššÚ´m]]]ü}µM6Ï<>ýkZÇwWÝsT¨5ÿ~ßSå²eÝE8°CŽðœÜoÑÓéÜûLî½G?sN€á8Á™—ÓÜû¸¤V‹7óXñDþ=hþM×NXög”Ì˯¹Ûú85eÌDîVoêNh.Í&žOá’[‡sâKÿ×ï)ÜÀ}:i|Rð¹3E„¢:Í<úaÈ[V¸W­ÙO«Õøp��´ áÏ鱦ӥ÷[¯N§&г��á��À@8��0Ž��� „#���á��À@8��0Ž��� „#���á��À@8²¤âOÐh4Z@€Íè–Ôth4m§7�›Ñ3,a ‚-J}˜ñ hŒÞa ƒ ‚Œú%(£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p ŒÞa ƒ ‚Œú%(£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p ŒÞa ƒ ‚Œú%(£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p„í755¥ååeïv2z‡% 62ê—p„íçï÷þþ~ŒŒ–v0z‡% 62ê7Zû€ãÝþ~¯n]]]J$ºråŠæçç½µÑNôKü"·jqBƒ±Í)ÖyXç>ùJ‹ëù†ë[‡âé{Òú´’µ–ûÍ[o#£á½1ãù¿ñmñuLùï”ý4¡7:w׋uéлÃJî+þž&ld†µ·ð1½r檖ÝÍ©~ý½ÃÊ,4¹ùÜ}zþMuzë»ë¼ûË÷5øÃA¥Ö½µPÍß§­ä«‰äquùǪ븒w”+ΖjÇ>h—(mëNâï÷­a©ýè–øEm]!Ô˜'ö åæ>ÓèÑnýhô–zÏn^Ï•Ótò ŽÊË×§“ꈧµPxd¬ç[ùLçöžÔ¯uB/º\ .%9eÇNèÕøMή¨°hý2ãgµ?æ…¬f•B[Ÿ’ÓßyOV¿?G3ûááŒÆŽö)>|U³¹ 牼Öÿ¬ñ3}Ší"5²mõ[×÷Ê ÿƒ^9ñ±n.>r;Çó› Ûß_Q­Ôú}Ð>QÚÖÄßïÏÚK­Gï°Ä/bëj†ç´?­c/ÕäÊÓâVÃѺLœÒÞó×µºú¥’Ý?Qúþo™óÚsã:üÚûº±âSµ•Âû:ªSCÚÓŸRöI1…mŽŠÊûá¡æÆßÒk‰ëZ©žy¨ó³(Û¶ú­k]K™I}>û½÷ØõD÷ÆkïpƉJ­×ú}ðü'KmhhHétZÙlÖ«&ØD8²Ä/XëêØów5ÖH£3«ÅÇëÕ)ùœîݺ«%ïTeøpþ×~KîÿàùY~ÓùÝî‰kUÙÔ1½>öµŠ1ì‘fÇâê½]ãVë„·ÿ}ߟÕÄÛõöĽÂLT³á¨´ng*÷‡)¿¨Ìï¦4û°:5Á·mõûL¾sêöuŸ-ÎF¶X;öÿš4Úó6ÿæîµµ5¯ª`áÈ¿P­«;ëqOéøA%§sŇ…õÌNÓøòÖ¦ðaxšM©ïð¸æ¼3TþÁ„Nì» Ìc÷‰ç˜jÄØ¾'ÎëöïyW“Ë›ßßVûáÆdåhƶÕo³ò+úfâê?ö±þ£pI´õÚ¾Z(JÛº“øûýEŸtk z‡%~áZW/lÜÖhw\c³ÞlOÅz[˜úá(§ÌðÁŠÎXlÝ:÷ùßœå•MQoêŽ7“äØtCxŸ†3MÎU¼ïçµßPïðŸ´Òl8ò÷ÃÝŒR½G”Êúwam8oëÅÌmpoînÏywÇó÷Q[¬ß×õ ÇõêÑö#W[÷A‹Ei[w¿?K# µ½Ã¿­« òz2ó‘ìyO7V½éŠõª.“ÕP7­^×ùΟ—ïe*Èëqæ‚ö˜Ðƒ|ñµ{ûƒÊž÷ž£òöå—¯êÌž75ú›³M„#s?ä43zDý©•ïŽòÔ V(Ù¶úm(¯õ…kºïÕÉ?jÁøÔa;´g´G”¶u'ñ÷{£FÚè–ø…mݦ»|f¯j8Þ§cã_—ƒÀ3€ÚáhCË—‡ÔqzR+Þ3%oj¸û-Ï=vÎiKºžx]ûO}¬ks9ïþçD·tKŸœìy¡päÞ”»0ñ3uv¼¤XÃp´y?äÿ~M‰uêâ5Í•f iéÎou’ò7´mõ[×#-~•Ò‰ý‡•˜œWñȬk!=¨Žä´÷¸µZ¿Ú'JÛº“øûÝl„¡‰Þa‰_èV5úž£K·ËßS½^ìM,Ö¾<Qþn¡r‹ Nh±ðÑê¾òóÆ%¨ÊŸñ.™¹Ý¿ôžŽö¼\þ™ŽýŠŸùP—¿iî’Zõ{)¾Ç“¬Æ;¿×GÍî7 -þY—ÇÕÓáWRL=q¹pEßpCv]þ>m™BØ­<ž~#m¿(mëNâîsÂP0Ð;,a°AQ¿ÑÚïö ½ÃõK8PFï°„ÁAFýŽ�”Ñ;,a°1Ý×Äà+¥}R·ñÑúÃ?&Q¥}Àñ£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p ŒÞa ƒ ‚Œú%(£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p ŒÞa ƒ ‚Œú%(£wXÂ`ƒ £~ G�Êè–0Ø È¨_€2z‡% 62ê—p ŒÞa ƒ ‚Œú%(£wXà44¤ 6z‡µFÛé @mô�ˆÂн��À@8��0Ž€-¬­­)›Íz��aG8¸xñbéþŒ®®.MMMyK��aE8êpƒŒÌ€äÎ$�‹pÔ144TD‰D¢ˆÌ�/Fy 7¹Ah``@étºŒæçç½5��aD8êpCˆüæ%�@¸Ž€ÜO©ŒŒ.±¹7gs¿�„á��À@8��0Ž��� „#���á��À@8��0Ž��� „#���á��À@8��0Ž��� „# ÷¯ñwuuþèláo­�ÂpÔ155µé¯ò»A �n„# ÷/ñ»(‘HèæÍ›! �^Œò@n(rƒÐÀÀ@Å,—Ö� ÜG@nò‘ßÜûŽ��áF8p/§¹—×Ü{FFF4??ï-�„á��À@8��0Ž��� „#���á��À@8��0Ž��� „#Kª¿,F£Ñ‚Ð�lFϰ¤Ö C£Ñh;½ØŒža  € `¼£wXÂ`ƒ ‹rýFqÛ£|¼fÐ;,a°AE¹~£¸íQ>Þ@3è–0Ø È¢\¿QÜö(o ôKldQ®ß(n{”7Ð z‡% 6²(×o·=ÊÇh½ÃY”ë7ŠÛåã 4ƒÞa ƒ ‚,ÊõÅmòñšAï°„ÁAåúâ¶GùxÍ wXÂ`ƒ ‹rýFqÛ£|¼fÐ;,a°AE¹~£¸íQ>Þ@3è–0Ø È¢\¿QÜö(o ôKldQ®ß(n{”w+MMMéæÍ›Z[[óžAPÐ;,a°AE¹~£¸íQ>Þ­444TÚ׺xñ"a) è–0Ø È¢\¿QÜö(ïV2ÃQu#,ílôKü‚·jqBƒ±Í*ÖyXç>ùJ‹ëù†ë[‡âé{Òú´’µ–ûÍ[o#£á½1ãù¿ñmñuLùï”ý4¡7:w׋uéлÃJî+þž&ld†µ·ð1½r檖ÝÍ©~ý½ÃÊ,4¹ùÜ}zþMuzë»ë¼ûË÷5øÃA¥Ö½µPÍß§­µª¿ŒÓœKNç¼çZ¯=ÛÞ^QÜævhŽªaig¡wXâ¸u…PcžØ7”›ûL£G»õ£Ñ[zè=»y=WNÓɃF8*/_ŸNª#žÖBᑱžoå3Û{R¿þÕ ½têr1¸”ä”;¡Wã49»¢Â¢õÊŒŸÕþ˜²šU m}Î ò;ïÉê÷çhf?<œÑØÑ>Ň¯j6·á<‘×úâŸ5~¦O±]„£F¶­~ërŽÍÜ%}íÇ:´¯—pÔbQÜævx–pTÝKíEï°Ä/hëj†çÔr?­c/ÕäÊÓâVÃѺLœÒÞó×µºú¥’Ý?Qúþo™óÚsã:üÚûº±âSµ•Âû:ªSCÚÓŸRöI1…mŽŠÊûá¡æÆßÒk‰ëZ©rŽ:?‹²m«ßzÖg•>ñ†þéó¯ôoñƒ‘ GþkÑhÏÚK­E8²Ä/`ëêØów5ÖH£3«ÅÇëÕ)ùœîݺ«%ïTeøØPîÞe—)?«ñÃo:¿û{çÁª²©cz}ìkcØ#ÍŽÅÕ=zÛù©jëZÊLêóY÷çšä¿ïû³šxû Þž¸W˜‰j6•öÃíLåþ0å•ùÝ”fV§&ø¶­~kz¢…‰ŸéµŸþ^ò÷”&ÑhM·þþ~ŒŒh~~Þ«*l‘%~áZWwÖ£ê¤RXÏìD/om †§Ù”úkÎËù:±ï‚2Ý'žcv¨cûž8¯Û¿ç]M.ol~[퇓u–£ÛV¿5äü^?íþŸºüÀ=VÑ G;E·¹^䲚ßü0ä~-Àòò²÷›±Ýè–ø…l]½P°q[£ÝqÍz³=ëm`ꇣœ2Ã+:g±uëÜçs–?T6uD½©;ÞL’cÓ á}Î49{Tñ¾Wœ×~C½ÃÒJ³áÈßw3JõQ*ëß…µá¼­w3·Á½¹{ótþ>ÚvùûºüÓþÒ !á¨=¢¸Ííð<áˆ0´3Ð;,ñ Ûºš¡ ¯'3éÀž÷tcÕ›Þ©X¯ê2Y uÃÑêuïüyù^¦‚¼g.h߉ =È_»×¸?¨ìyï9*o_~ùªÎìyS£¿9ÛD82÷CN3£GÔŸšQùî(O½`…’m«ßj >YœÐ¢·Z+ù¯%QÜævh&†v&z‡%~¡[·éÄîŸÙ«Ž÷騸×å ðŒ v8ÚÐòå!uœžÔŠ÷LÉã›î~KãsL²¤ë‰×µÿÔǺ6—óf�òZ_º¥ONö¼P8òïGéìxI±†áhó~ÈÿýšêÔÅkš+|ZÍõHKw~«“|”¿¡m«ß-1sÔQÜæv¨ŽCÁ@ï°Ä/|«}ÏÑ¥ÛÊù7ÕëÅÞÑÄbíëGåï*·âÿØ¿Wf¸¯ü¼q ªòg¼KfîG÷/½§£=/—¦c¿âg>Ôåoš»¤Vý^J3O²;ìü^?5»Ü€¶øg]JWO‡ÿ]I1uôÄuæÂ}à Ùuùû´u6_ödæ¨u¢¸Ííà†#ÂP0Ñ;,a°AE¹~£¸íQ>Þ@3è–0Ø È¢\¿QÜö(o ôKldQ®ß(n{”7Ð z‡% 6¦ûš|¥´Oê6>Z¿cøÇ$Š¢¸íQ>Þ@3è–0Ø È¢\¿QÜö(o ôKldQ®ß(n{”7Ð z‡% 6²(×o·=ÊÇh½ÃY”ë7ŠÛåã 4ƒÞa ƒ ‚,ÊõÅmòñšAï°„ÁAåúâ¶GùxÍ wXÂ`ƒ ‹rýFqÛ£|¼fÐ;,a°AE¹~£¸íQ>Þ@3èø F£©¨ÞaA­A‡F£ÑvzP½�"†p4Fï���0Ž��� „#���á��À@8��0Ž��� „#` ËËËÊf³Þ#�@ØŽ€‰Dé;aººº455å-�„á¨ãÊ•+¥`d¤µµ5o �@Ž€:††† È=r‘’��áÅ(Ôá_RÐÅ‹KÁh~~Þ[�F„# 7ùÈonP�„áhÀý”ÚÈÈHá[:æ~#�ˆ�Â��€p��` ��G���Â��€p��` ��G@7oÞ,|Ç‘ÛÜoÌvÿB?� ÜG@î@VCv¿·�V„# óo«¹3H~@rC� ¼G@æ_寞E�„£<PÇÔÔTE r[WW_ �BŽp4àþ±Y7¹ÁȽßÈýKý�€p#��G���Â��€p��` ��G–øõ��ÁÆÙÜ?Ñh4Z€2z„%µF JPF°„a@Gkp¼Úè–0È ¨cÂ�‘5 2ê˜p€pd ƒ €:& Yà ƒ0 Ž G�GÖ0È ¨cÂ�‘5 2ê˜p€pd ƒ €:& Yà ƒ0 Ž G�GÖ0È ¨cÂ�‘5 2ê˜p€pd ƒ €:& Yà ƒ0 Ž G�GÖ0È ¨cÂZkmmMÙlÖ{„‚^a ƒ €:&¡µÜ`䇡¡!¥ÓiÂÒ@¯°„Aa@ŽÐZf8ªn„¥ö¡WXâ󋹯‰ÁW*:G¡ÅºtèÜ¿hzñQãõüOka}ZÉŽËJ­Cñô=i#£á½1ãù¿ñ­÷:†üwÊ~šÐ»‹ë¹ïéÝa%÷O3Ì×zå]M.o8O~¯ÌpŸñú}þý¿h0æ?.·Xçaûä+-®ç‹¿Ï‘ÏÝѧçßT§·¾»Î»¿|_ƒ?TzaÝ[ Íò÷u”Eip¼Û¯Q8ªn„¥Ö¡WXâï‹Ëi:y°"päsÿ_Ÿè•ýRÿñЛ×s­O'ÕQ Gå€Pz¾ð¨ÆÏ®|¦s{Oê׿:¡—N]Ör98rʎЫñ šœ]QaÑúeÆÏjÌ YMs_»ÇÙW?ЫÉ/µê=ë¼ÁŠ÷»é±6”›ûL£G»õ£Ñ[zè>õpFcGû¾ªÙœ´òZ_ü³ÆÏô)¶‹pô<ìÕqpEip¼ÛïYÂQu#,mz…%~±¾¸Ú¡Gù9¥ÐéÉ%ï ›áh]&NiïùëZ]ýRÉîŸ(}ÿ‰·Ì}éq~í}ÝXqˆ©Î{m¨ø3ÿýÃÿ£3{ÞT*ëÅ£-ÃQQþ~ZÇ^:«É•‡šK¯%®k¥"È9êü,¶f¯Ž›á„Ù…?*ùÆ+¾n¬Ko$'Ú­> ­ÕÚ}Ð^QÚÖêEÂQu#,ÙC¯°Ä/ÎW/p<ÒìX\Ý£·UŒ(•ëU†G>§{·îjÉ;ÑT.ßPîÞe—¼ËtùY~S£3ß;V•MÓëc_ëiaaõëšÖµ”™Ôç³îÏ5ËßÑÂÄÏôêÛÿ®÷-6Ž”¿«±þC½)þ;Sš{*Ë/*ó»)Í–fÙÐ,{uÜ„Õ?i¸÷Çú§«óN%¹%›Õ§§ÿAý©•£yëµtÔá¿íy[WW—®\¹âUžáÈ¿ _\½p´®…ô :’Ó…Iq=÷ò”Ñ!ÌpTeSx2<ͦÔwx\s^–È?˜Ð‰}”yì>Qïý</ã÷=™Qªÿ€ÎL>P¾Ùp¤{JÇ*yc’Ù¡m`¯Ž·¶13ªîþ1ÍÖ­ÅÞîQÍlNâ-ÓÊ}Pÿh´f›†‰D!ÍÏÏ{•„çE8²Ä/ÐW/Œ¬jfôúÇîïù©Z¯QøqÕ_žSfø`E'+¶nûüoÎò‡Ê¦Ž¨7uÇ›Ir,NTÝ0ݧáL³³GæûÎk5sA½½N[ù²¹p´q[£ÝqÝÍ(Õ{D©láî#wó¶ÞQÌ܆½ÃÊ´ñ$Dþ¾k…B8êM)[*,Ç÷ŸëÜKïhb±}®•û Ý¢´­;Õó^V# m/z…%~Á¾¸:áè‰ ôŸ$«\/Ÿ»§[Ù%oVi³ºáhõºÎwþ\“+æ*¯ÇNhÙwbBòy=™ùH½ýÎIìIõeªzA®‘ªŸÉ?Ðä™êýHÿkËpT|/ö¼§«9',©} ¦î¬¶b¯Ž›P˜9ìÖÑÑÏ4—{¢Üìõ›“Ú~3}K÷A›Ei[wªfÃa¨µè–øüâ6Ž|î/š>®Wë›R@y¶`R;mhùò:NOjÅ{¦äñM w¿¥ñ¹ÇÎXÒõÄëÚêc]›Ëy3Wy­/ÝÒ''{^,9ò ÿ®·;_VG¬Q8ÚpNžW5ïÓ±ñ¯ (ÿ÷kJ8¨S¯9'W¦á‘–îüV'ù(ÿs±WÇÍpoÈžÒGC¯«3¶[‡Î裻 ·^NèÆ£ê Þ:­Ýí¥mÝ©ê…#ÂP{Ñ+,ñ úÅ4úž£ÕL)�T¯÷Š'î{Ë*md†µ×ü]N‹ Nh±úû…ŒKP•?ã]2s?ºé=íy¹ü3û?ó¡.Óä%µêïTŠù—OVõ—±cú?c°é²]±¾çèÒmåJçÍâG÷/%Ž«§Ãÿ½1uôÄuæÂ}à ÙÏÌß×íá~ñDñS“Þ3íÐÞ}ÐZQÚÖÊG„¡…^a ƒ  ]uì~—×µ‹ÿCû$ôÙb{gü¢Ô—£´­;•û·ÕC;½Â„Aëê¸òúXçu2ùÿ”-ÍŽ¶O”úr”¶xô KdÔ1á�áÈšh25>F_³=ËGþÑþ±Š²(íŽ7P½Â„uL8@8²†Aa@Ž�ެaAPÇ„#�„#kdÔ1á�áÈ„uL8@8²†Aa@Ž�ެaAPÇ„#�„#kdÔ1á�áÈ„uL8@8²†Aa@Ž�ެðF bP‰^aA­Á†F£Ñ‚Ò�T¢W�@DŽ€Úè���Â��€p��` ��G���ÂÐ@:VWWWá=ýýýšŸŸ÷–��ŠpÔ155Uú¨³ßÜ �7ÂPÇÐÐP!% e³ÙŠ�/Fy 7¹Ah``@7oÞ,#7(�‹pÔa"¿¹÷�Âp4à$7¹ÁÈIZ^^ö–��Šp��` ��G���Â��€p��` ��G���ÂЀûmØ###…?%rñâE­­­yK��aE8êp¿ð±ú²Ý�7ÂP‡;cä"÷²ÝY#? ÍÏÏ{k��ˆpÔaþU~÷ršŽÜ�/Fy Žt:]ˆüÆ}G�n„# ÿÒšÛººº455å-�„áØ‚{‘û©5fŒ� G���Â��€p��` ��G���Â��€p��` ��G���Â��€p��` ��G���%ÒiÙAsœGÞ¾����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-6b.png��������������������������������������������0000664�0000000�0000000�00000024176�15030617045�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ê���Ò���SŒæŸ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��(IDATx^íÝÿo÷½ïqÿþ¥?ú‡JHV¤ü€„Å ™°ˆ,aÔ!’he¬D&âDJYê£F=¸UÎVܘ6ÇizW+=rš³JoÝÜ:ör!—dOc.±|¶ 4Pã\B­ å‹ñ¾ï|æËîìîÌóÙoχôQâÙÙ™Ù™ÏÌ絟ùìÐ!����J”���e���ÀA���ð@P���<”���e���ÀA���ð@P���<”ë⎤býÒ5”…U{���Jå²8 ]}qI·\˜Ô”We99"]ÒáWz£O| ©Åßâ=���­§qƒòê¼ÄûºŒ`Ö/±Ô{b½!òÌ”œY®2Ý.ÏHâÌ’ýG=Ü“t|·±/wK<}ÏžfȤ%ù^L"]*�÷I41/û¥µ½�� u4hPV½šG¤ÿ'?‘ï¬+š”eû•ºZýRÃG%YUPV=ã#2’lÀ l[]<%#½Å_JÖò��€ÖјA9HoJ2Ú#]#U†Ó0,Ë||HºªÚ–UÉÌŸHWD8(›Û™:&½jXEn¨ËZÞ��Ð:2(¯¦OÈPì¢dra¬KúâóÆ_nÆké3ò^,bŽcž_¸('¢}F°ë®ÈÏå¢9~6È<¶ÕEI%œ!FéŠHìTÚV`‡d5Ý)v`^]Ì/Ó,½#’H«þocÝfHv½§Ã Ì«‹)ùM<*½ESMO¨mµçSæ²”eI''%é1öŬ,¤&$jö讗ȱó²X6¨V ½†ÜPgžµ¼�� u4`P^’dt8¼œ0VÜk¹œ”¨BÕË’V¨]]HÈP—¬ƒÌ£–µº É‘~é9eN#”&FÌ€ÞkvÅŽîeÕó=Ô“Ÿ'sQb*¼º¶u5—>; ›ÜÛäžÏÊÐ/#Ék›2ó’0¸ÚpÛõ;c›¢qIšÚþÁcÅ ZMèu¶u-ï��h ”UˆqIv›Gó ÑÅÓ*Îc÷Z— ©(Š^AY-g‹k»TÈ/*R”•’m²Ÿ‚Q<»h>kY…½ë^ÓJ”��ªÕ`AÙ gvkQ©$=§UœÇ#�Û C¨ÿ|Ö°ˆßXC<Ô¶V”í¿K´XVõå¢/U½�� u4VPVÃú]6Çé©= ‰÷¸â¢Àé5­â<¥½ÀŽÂë”È¢9V¸_¢ñ„$Ó_¬­GÙŽá”íå…”±àÆ6äží¼–÷���´Ž Ê壿„²¢@X“ ìü¥ÃÌš ½¥A¹4¯uè…_X·Öéè°‚rîQo]CŸw¢úZÞ��Ð:$(ÛOˆè.Š.Îàº"rì⢠k”ÕßêGyë —¹,ñH¯ %¾´¨;8Þ•ÌÏÉÅ‹¿0Bêz{ã3¤§%QË1>Ǭ$S· ƒ¬±L5Ík›¬ª']¸žØaî“|/z̓²ûqvÓZÞ��Ð: (;̇¬žêPú¬0è¼îST8½~*ÿD ¯â5Ó‹« zd›3Ýõ” G¾Õˆ«‹rñ˜=.Ù˜ÿDjAӮ±Î|¢†zz…ý·¯]O½0‹DUÐNJ<÷¨9÷Ó-Š÷‘¦qJ®ýSÓ¥C7*ÿsÔ]‘˜¼—8#錳Ç×ò��€ÖÓ`?æ���A���ð@P���<”���e���ÀA���ð@P���<”���e���ÀA���ðjPöúç)Jý ��¨Œ L¡´a��•i Ê�êó�€ê”ªf­­Xw[ñ3�&‚2BÕ¬u ën+~&��ÂDPF¨šµ´bÝmÅÏ�@˜ÊU³ÖV¬»­ø™��A¡jÖ:Њu·?��a"(#TÍZZ±î¶âg� Le„ªYë@+ÖÝVüL��„‰ ŒP5khźۊŸ �€0”ªf­­Xw[ñ3�&‚2BÕ¬u ën+~&��ÂDPF¨šµ´bÝmÅÏ�@˜ÊU³ÖV¬»­ø™��A¡jÖ:Њu·?��a"(#TÍZZ±î¶âg� Le„ªYë@+ÖÝVüL��„‰ ŒP5khźۊŸ �€05pP~$·¦^”N{ùÒ%=»_•wR_ÉJÙùœ2,‰ÅYIŤÛóu§Xó=š“îéë,3w³æšÜ²™yyÿè3ÒÓiÍ×Ù³W^ùÅë2ü]k9Üš’aûýuäOäÖŠ³ÞodvlGÉ|ËðÔ {cOÜvœm©G’IÿNbƒ[ìãÝ%›c2•þ»ÔúSÖv»C+~&��ÂÔÀAÙbÜHBí¿„*×ÎËàã{eü³Œ=Ñc>e%%±nWPνž‘T¬_"‰ëæ_îù,«²|î5Ùxðçòöðv94ý× voN&wHdì´\Í<2&deåÖeòð#ÀU”•’uaðÚYÜ*;Ç/É={jÎbB"Ý1Iù®¢Â¶kVÓpöhVÆ6n–ýñ”õ%"»,W¦~(Û¶üTR5þBPÓín­ø™��SóeÓC¹‘xAÖE“²lO©iPÎ.ÈÔþ]rtæ¶ÜMýT¶îKÈ\{ ×&Ÿ—-£d¹8›•„Þ�|Þ“½‘}ëF$¹¼jO±U Êe·]¿š†³ì-™ýà¼\½çú@Ù?Ëäž]26û=¡6jºÝ ¢?��ajÒ l䣫2°u\æT‡®¡`>ð™Í\—Ké%{¸FQPÎfäú¥ÏeÉê½6){ûÞ’¹‡Æßç$¾ë9™¸rß|M²ŸËÄÀnŸ»kýíæä*ñ ×~ë©”Ën{„Îî~,±-ÏËäµö„Ú}» :Öá¦{}��4»P[ÍZ4Ì~A¹80šóÙë³J¹žÝ¢ \àž¤ãÙ;yÕ²°"7§^’'Æ>3Š­¥×¸ßå]—D¤_b©üðSÙ \aÛë uÀO6ó'™:òŒì‹_’LßM‚s»:Öá¦{}��4»P[ÍZ4Ì~AùÑܸl˜«v@ªÔ£\¨LP~ð©ŒmùNnÛsåñ×䜱:/ñ¾§%žvF{ü˜pã˜ÌÚ=Ýùmë£Ë2¾5"W‹zƒËåJÛ^Î6ÔVVV?’ã‘2BHVÂÙîB:Öá¦{}��4»P[ÍZ4ÌÞAù™JÖ½ ÎÀ„‚ùІR”ò ÊY¹;ócéq}¶ddvìiÙ?µ`Ì¡Öý´ Äçä¡ýjÎZz›=ß“•‡soÉv¯§Vøå Û®_íÃÙ}Y¼ð¦D6?+±³ öPšÚ«ýv—Ò±7Ýë� Ù…ÚjÖ¢a. ÊÙe¹š<n¥2y%?~ׯçÙ›OPÎþU¦=)Ñä’=Á‘•³ÇeëÞI¹f¤Íì×Éèö~9tò#¹f>õB¹/Kóÿ.«y<œR”Iæêi‹ì}“* ã~A9à¶ëVÓp¶ò•|Q¶ ¼.ÉE§§ÝgˆÊ·TÓíö¡cnº×�@³ µÕüv s¹ç(ÿPÞsž[:_çð”Ü2_+æõ<bûYÄæ£Ç:íi²qlÖX²Ç{ÌaÖãàÞ’Þîü{º{#røø‡r%èùÊ=GùÝË®!ž£\Õ¶›/h㬻Ì/CÎg)(½å�t¯�€fj«IÃŒf­:¶[÷¾Ñ½>��š]¨­& 3šµèØnÝûF÷ú��hv¡¶š4ÌhÖ: c»uïÝë� Ù…Új¶mÃì3ö¸°¸Ç·.çó6Û­{ßè^��Í.ÔV“†ÍZtl·î}£{}��4»P[Mf4kбݺ÷îõ�ÐìBm5i˜Ñ¬u@ÇvëÞ7º×�@³ µÕ¤aF³ÖÛ­{ßè^��Í.ÔV“†ÍZtl·î}£{}��4»P[Mf4kбݺ÷îõ�ÐìBm5i˜Ñ¬u@ÇvëÞ7º×�@³ µÕ¤aF³ÖÛ­{ßè^��Í.ÔV“†ÍZtl·î}£{}��4»P[Mf4kбݺ÷îõ�ÐìBm5i˜Ñ¬u@ÇvëÞ7º×�@³ µÕ¤aF³ÖÛ­{ßè^��Í.ÔV“†ÍZtl·î}£{}��4»P[MfÀŸîóƒó�€êh Ê ¥q ��† L¡´Y��ÁÐjuBp� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJuBP� ±ÑJ·¹üãòòË/çBE��‰Vº©üÜsÏy†7Šž��-u›*ÉçÏŸ·_��€BPnC„d��€ÊÊm† �� A¹’��‚#(· B2��@uÊm€ ��P=‚r‹#$��¬ A¹…’��ÖŽ Ü¢É���ßA¹’��¾=‚r‹!$��ÔA¹…’��j‡ Ü"É���µEPn„d��€Ú#(79B2��@8Ê Fßt:mÿU!�� <å£Â®|Ë!$��„‹ Ü`*eB2��@øÊ ÄÝ›ì” É���z”ˆ;�{eB2��€>å¡~Àçɪ¸’��ô"(7ˆ—_~¹ $«â $��èGPn�·oß.ÈNQÉ���õAPn�?ûÙÏ ²SwO3!��@‚rùõ&«âЄd���½ÊuvòäÉ‚pìUÉ���ú”ëH?îééñ ÇN!$��ÔA¹Ž‰„g8vʇ~hÏ ���ÝÊuT©79H��@8HZu¢†Txßj ���ÂAÒª“Ïà´lڴɺ��€p”ëàÓO?õ ¿AŠúÇGTo´ú! ���ÂCP®¯®º\Q½Çê1rùË_ì%��� leÍÒé´gö**Póx8��€ú (k6::êŠâô«±���õCPÖ¨Ü?WMï1��@c!(kâŽ) …B¡P(µ)a (kâu@) …B¡P(µ)a (kâDÆ·¯0OäFÑŸ�Ð8ÂnwhÑ4!@ ê�õ� SØí-š&´C ž�t »Ý¡EÓ„�v¨Ôs�€Na·;´hš Ðu€z�Ð)ìv‡MÚ¡PÏ�:…ÝîТiB€@;Ôê9�@§°ÛZ4Mh‡:@=�èv»C‹¦ íP¨ç��ÂnwhÑ4!@ ê�õ� SØí-š&´C ž�t »Ý¡EÓ„�v¨Ôs�€Na·;´hš Ðu€z�Ð)ìv‡MÚ¡PÏ�:…ÝîТiB€@;Ôê9�@§°ÛZ4Mh‡:@=�èv»C‹¦ íP¨ç�°Ù™Úÿ´ŒÍfì !Ó½¾…ÝîТiB€@;Ôêy±¬¬,ž–ÑçöMGÇ98ý•ýz£y$·¦^”NµÝ1I­Ø“=Ý©a×çª8ÿ·QÍvU’ßîîXJ¾õ&ßš’áN{Ôj™m`%“îŽaI,²·Ôuâa:.[Ë샬=-Lº×.çÜ -š&µ9E “S:7Éî#¿’Ô­ûåçsJ$!‹+)‰u{¼–+ÝI\7Ú§YÛØéšÞ+GgîØëqÉþ]ÒïÊžž.k>µM¯ŒIlø k9A¸×õø+’¼ýȘøÌŽíp­‡ŒýþW “S:{öÊ‘w>‘[+ù?›™—÷>#=öüjžW~ñº WÿÚÙÎpÜ•/&öÉwŒãKÕ¯‡ ¦Ÿ±(€8Åë8s]‘~Íûç®Ì?%Ûb%ÓLíÑbB"ÕÒjç_«š­gÅXÔpCmËl]”kxmXY³cÏÉ&§ÍÙôœŒ]¨P'îÈÌÑÙ—¸fDXÇ}¹5û¡¼3þc‰F¶•ÙW÷eñìqÜä´½[dpìÿm|¹ Ž×ú A¶]ƒöµ¸°Ô¯íq¶!,eMjw 3’Šõ„ÏlæÏrnü9y|ç/ä³{Nµ/O1/N¹ œ?ñrÓÍ¿<Þ»|VŽl<(¿|{¿¬;4-· ήŒ¤'öËæÈqI^]¶N¼•›2;9"Û:íÀ˜Zw¯±¯¾#›c1ÃV´½%Ë#É\;+ãƒ[eçø%¹§&Ý›“‰Á;-W3*tgeåÖeòðé¬Ã:¼“Ùø\×Þ•Á-»d÷}­”• Ç9°zeïó°á”×€ Ü¼jumX‘›S‡dÃÁ÷ä ³Í1®W—){¾{P¦nú׊ì„ìÛàt9nÉGFH~#þk™>sBútîdoNÉþ /É»_Xmo63+oíÙ*û§ C°‹÷ún»×9h惨L,OŸðÚV AY“ÚHŸ†7{Mû¶K4¹dO¨eP¶N G/ÈÝ»Klë?IâÆCû5µêIÙ»åu™Y.>IÖ¬÷<ûæ¿ÉáõÏH<mGåŠAÙb^�ÖHrùž\›|^¶Œ^åâ«…Ï{ÃÚɼrUû÷È«ç>‘ÿÐ Õü3V<ΫÆ_ÆµßÆäÅ=Ö­y£”ô„”ÜqÊ›ýÆžI °¬€ÍŽÉÆ‚uÙËž2š@yÌóò†\ÁêÑé|R~xö¯öϯ$õΫ²Û¹cÓñ˜lÛL¦Ò7^wîº<.O=ÿŒùÞÎm¯Éÿúϸì7{™6ʾÉ?IþŒ @5†ë^’ÿ™ˆë©ò °Y¹—þ­Œ¾¸+wWÇ{9jˆÊ‰G¤ÛÞ=OÉó»7O÷z î8<.ÃS7¬y±Cí¿ü‡œ‹–þnU7:¥{gLÎÝr}ˆ²û½Xù œÍ|.Óoä{ë:º$¿à½?+(¿,×0U6ŽÉ¬qi.¨kcòû÷íyÔq~×}7°ôøTÞv÷?Õ9rÍ8žçe|x«¹ŽÎm£rÖܯEÛV\gœó´k@žRïý®l{õ=ùÏ“/Zë~왼âtŸAîʇòÆà{yÆñë?,ñ™ÖþÏóë䩨I‰¿²×®ƒê8¿.ÉEûlàkCm^öÏ2¹çÉ2×å»’Ž?+[Ç>•ö”eڬ¶[y(×'÷•ùÂæ·¾€Û¾²$éK×]wÈT>8(ë¢IY¶§èæ³°”5©Ýô Ÿ÷åêDD¶Ž_6.Já|%'S6#×/}.Kö…®ðuãt}^ÒKö…${U&÷>#ãsꢡN²}ò½‰?‰Š(¥ëu[‘¥Ù¤œ»ZÍÅÆÙî/dqêû²ù…ßÊ¢ÚÄ€AY²ŸËÄÀn¿<kýw.×'—½%³œ—«¹Þw=Â9™šûiËK¿—›Ùzô˜ªùg¬tœÍãûÌMýJ¦foÚ ƒQgß”~,3wÝÇ8Èþ º¬ üÎ×Bæù÷ä!9²ošPÃJVäëÔ¯åíä—ò0{[>‰í–m‡&òë²Ër5y\"›IâšêWWŸm“ìykÖhÀnËÌhŸtn]ÎÞ¼/çÞ’í[Çe®šÎH@ñØž˜L_qzªþ$SGvÉöÑäëâ]Q&(?˜û@~95›*“ͤäøÎ' †pe¿þHF·ÈáÉ?ÚóÁyé’¼íõ Ê÷eñ›2¸ý L|æZ+±BmGçVþ·¤uÇÉÜoýÒŸ·®mö»[™ lœ›S/<éqwë)yz"]Ý—˜ ËÊþ]>‹WO֨ǟ}Gå´ç8GÞ” ætµ¬ÿ’wõɶ،ګ&U³íª¾ï'_>,ûv¾,©¯d%û7IýjB’Åû˯ΨéßyVÞºl×å 2º¹Û¨sgäæŠqnŽïε5ÙÅßÊ ›‡d,ù…ÚÔP…I9Ü7,_8×}µ=½FÀÞ'cÓŸYíyœŸ,j³juí\•ÌÌOdËîŸÊiuwuå–q=•þõ¯É9óK½‡»äèÆO%ÊeÉïßòŒÄN«ýp_–æ~+Gûûäȹ¿Ù3ñ]ß¶]1;鼇djNÛšGPÖ¤vÒ¯á-¾HÛ{½f)øÖY¨ô[iÞj:.;öNÊ5»52oõ<áü Xε¼‡sØ.‡“7“6`Pv.x3Iÿ KÔ®äeoþ^^Úú™6oµQP®ôY=ß·ÆýS®‘ª(Øùaž=/qЗ5‚Ãà†U¾Y·¸{†ÜŸ­èZàHÊ1Ô÷ì/Ç.ª‘ÝðB龨jÅûDmï ²Aݱ²§XÉ×çÞ'Óù@£ÖóÝäãÏÉúÝoØán-¬}´î茯…û-Ø~w+¾;Œ/ ³Çå‰} ¹Qtp³·§åÐf«Ç7˜*—e‡ýí/’g7—Ö/ŸãlÞ%\÷C9÷Íj•Û®Ží6ylð„|f†ê2üêLÁt¿z‘Ù±½¥clšr{:*›Çfí:ãuþy§^;Ívk]îZh#ôº³iz(7dѳå{cË^ƒT}|:ßK¯Êf¯;¼J…õUµí³®¬¹#¡6œí AY“ÚH¿†Wýhh· L|n_8 ç+„ÿ×Õ©?·ýù²ÕþÆzÏ<Is½0Jɰª¹…åÞî¬Ü5.Ò}}F(_þ¸ðBáwáxtYÆ·FdâóY‰÷=-ñ´Ó‹QtËOû–¤.Îzk&{C¦_¦®ÛǼ†û5ªùg¬tœ¯1GýtÊ5D WŠß`ÿ^VP~çk¡rçg°×BÊëFeæ~qãç³}×ñH2éßI,w{Ü)îß.ÛG&µžŽ ²çÈäÅ<¿Xã– §UL¼–©XÓ ë“«t¾(S·‚^ˆª]VÖúýÂw|ßqËw÷ª\_•ÇrÍAYMïöÞ&£ä‡7ym{9Ž�׆@îË•‰AÙ}_®äzßgäøžV‡5SžLŸ.ýBZ¬LP^½2!»6ÿ@Þ·ïü¨áBV6>]ô["CÙõU¹í&Õþï•-å†hà÷°”5©Ýô¹=4‚Ãö>×íÂù²™ër)½äº0òmTRÏ?ÛcAv¯Æþ)¹™ÍçÞ[Ò7—ôÃâS©Š‹fNÑ{²7%yx» Œ¿%?ª”­mÙ¾^}»Í_ž–ø\émÍ20Õüdöy*„*îq°:9믙ŠÇyUî¦~*[÷¼)çžúb¸?#G׿¯Rch|1 ¼¬ ‚åB™ÕcãÕ³yÏhØöÉÆØ'Fç( ¾!¶ 3Ö GÙüMCDŽü•ëÚów™9ºÃµOìy5ìÅrë1ñÅSòêÀZòWX*œl¿»y-SY•åäˆt—üz-ªY–½¶ï’þïSrrp‡ Æ/>}Åç8›ŸÝ|tØ£*·½Šk¾_)˜îW¯—$}RMÛcø}ym×qªUPöZN™zqî5ÙàÑ[_·ÍòY¶ç¾­´¾j¶ÝöàSÛ2P÷g1×¼Ý)BPÖ¤v²ôÄÏf¾äØlÞ7)WraµŠ –Á»¡V·±^–n¯AúêÙú¼L^3¾Gf—äÂè÷dÛ¡òѵŒ}á2.ÒK—䃽·ÁâñùÔX´žÇ¤»Óu¡(¹p<’ÌÕÓ2Ù‘ûá’5î±_üH®ånÞ—¥ù÷ýq˜Â>™kw±_»šÆŠÇÙ ë"'å¿ÍclßÏ~gÿÀ§ø«Æõ Ùy<•Ó¸4÷drìH¼óPͲ‚ v– ÊùóËk¬ìûÇM~ÂàHÊ1”»š’zÔbâð€ôÅþ¼gr9)ÑuCÿoµ uM¸,SæÂ Ÿ†“]þƒÄúŒsÕŸm®MVn}*‰Øs²cÔ5$£`=Æ<ײKT¦nFÖʼ@Ñ´@ûÝ­L¨¸û_2Ö·KŽ$.å~bÕ¿S=)©L™1 Å.ËÚ§»äÕÓ1·'›¹$ñÁ§äðôõüö厳{Œòä-#Tç~�ZÕ¶WÑîøÕ™‚é~õÚ¾Û¸ýUI|v+ÿyÔ¸Úã27Îqs‚×öx§J׆ üzeŸ,3lŽíí÷KìV¦sÇ·G¹xxEÅõU±í&«caóö·d®¤“L¯°ÛV‚²&µ9垣üžÌåÂ`ñ|þ¿÷úe¾ÕYôüb×0…Â÷ØÃ*VnÊì»?–ÁÞÇòïéÞ&‘ÃoÊô• ·•Å¿>ÎÝÖsžl_(Ê=_÷ÝË®u¢ÿQÞ’^óWíj¾NéîÈáãÊ•–ø1ŸR:¬¤%z”ƒç‚gvɦÁ˜L}vJþÕ|N¸»îõ¡àÿè’žÿ$GOž±¤d¼¬Êª~ê…Ï<¦•2Åõô{ÛrO_P¢Û>gî›A ·½f Z'\uiÝ!çŸí'B? Á÷i²17F´ð¯›†$6uQNÿ«õû‰ü6©cSüÔ‹]r0ö;I›ÇƵ]¹UTïa(º>š×6¯iƬ÷»ÿ1,rf¾Ü“TyLz#?ã‰?¸¾ÈQiY× >‹³=¯Ûªn?õ¢{@_G+n{ñóîRtÎøÖW](¨¯e굪[3'å•Ý›òuÀlsŽKbæKɬ®ËZžÏq6?c…kCPEÏ".ÝŸŠ}W¬lÈôiï’?o”ÂsLíŸþÿvå%Èú ¶Ý¡žÅÜW8ì²Nœý‚²&aH4¾v¨Ôs ‰øõê"d“sGú=~ŒÝëÓ+ìv‡MÚ¡PÏ&BP® óÉQõ=)B÷út »Ý¡EÓ„�v¨Ôs x<hMÿÀÖæ‘|sgÙ5F:lº×§WØí-š&aÈÆæuQö*­}¡v>g+k‡Ï�ha·;´hš Ðu€z�Ð)ìv‡MÚ¡PÏ�:…ÝîТiB€@;Ôê9�@§°ÛZ4Mh‡:@=�èv»C‹¦ íP¨ç��ÂnwhÑ4!@ ê�õ� SØí-š&´C ž�t »Ý¡EÓ„�v¨Ôs�€Na·;´hš Ðu€z�Ð)ìv‡MÚ¡PÏ�:…ÝîТiB€���¨-‚r p"…B¡P( ¥ö%,e ¼(…B¡P( ¥6%,e���ÀA���ð@P���<”QFFR±^ϱ@ùÒ-‘Äu{~ÔÞuIDº=ö»Qz£O¦£TeIŸ:&‘.µŒ.é&$Yµ_4ZLHÄ«^›¥O¢ñ„$ÓËöÌ­¤$Öým®köu3’E{ €æEPFê‚?$#É1£”Ù€tHw,%+æëË2? Cå­ÊrrDº:z%–R±xU2é„D{»Œ@ÑoL»cÍV‘½œ®I.ß“ÅäkÒÛÑ#Ñä’ý: Û’$£=ÒÑ“”uQ1ªé¢¤NDºiæÜõ�ꀠŒ2Œ <Ï7`%AÙ°|FŽ˜§! ÙJ*&ݹ ¬8á¹èx”e‡zºÐ0ìÞWwP6_SǬ°l~±kä+Ìã3•Äb°³@s!(#8¯  -üƒr—ôŃ~Q±‡q”Ñ0ü‚²b±«ªŽëöÀ¾33LPZAÁ• Ê«‹çåXd½=¾Ð(½¯IrñýªÑ˜\ü¹=.Ö]ßTaP6ögjÂzQ°Ÿ ™´œŠEÌžfk ò„¤ÔëãAùƒú+”ówMº¢IYV½Ìéi‰å®3}=qQU‚^]”‹Ç¬zß“éøQ9f©\]¼('¢}ö{ÖK$6-éÌŠ±¬3òž:WzHÔ\¦ºý?I''ul±®MjÈoÞ6ε>ùIâƒÜ5®+òs¹¸˜‘…Äû\sΩ‹rÇY®ë iá6¸ÎKó39ó¿-ÉÄCN€CPFp¾Aùž¤ã»ó·H—“5B±3ßj:.}F5”øÒ¸ð«Û”ýFC°[âé{ÖÛQ‘”ó ²õc§dÑñÔ¾}Z"ñËFüPó)1Ât×PBÌÙèQF£)”]õ^ÕÙÌE‰õ K|^ýÀÏéɵ®++êÓ{LRê|X]äÈõ¥R½§·Ç>'œá=ž2¯eæ¹äú²™?ÏThþs.¨çøjìùÖ—þ¾¸¤WWŒï ÃÆëv²}4—ëœgæ6tKïÈ)3Ô;çe‡ÚÞå9‰÷©ßówEäØÅEY]·¦™Ë77 @”\Å¡ËvoŒÕëbÍWüC4ƒÙ»Ior5ò=ÊËvco4ܱ‹f α¿ XAÚUrc< Êh4A{”OÉõ\h-,ª·ù¶y~¸z˜Mvˆõãì„Ú¢óÁ:לë“ÇõËé0¿ìg ƒ²R°\çýîŽgš½Ž’í(ÿå€^eW&([C/z¤7ú¶üf&!?qÏçô¨˜Áî}»’åj䃲j¬}XøÄ «ç¾Ü~%(£Ñ£¬žÌrÝ §~½¬™yI” ¯X.8åâsÏœb‡c5íN… l¾â1ÌöP(óIPAÁùeûVaîÉ|ÎmRÕˆŹÅh¾† JëÕ/%1´¾pŒ²Ùø:C\j ä¬=Dƒ ŒFã ]O½0‡T׳wø€$\còÕ]¬ÔÆR,«‹)ùMÜz´\WtZæÍëóåqÍAÙ=ÔÌÞ.ß ì„êÂÇ0Z_jíie ¡”œsk¿¸WÇSg6h÷r?ܳ~€ã4 E=*¨‚s«¶¨±]HÈ:½Q9‘Rcíðìþ"’¹,'âçÍã;NŒ}Dèðå®!{Lr¾¾[?¤³7ÿžÄÏ,Yóç2|ì¼ýÃ>ë<Pן¯KÞcȤäD"-«eƒrþIÎß…cŒ;dN6Âxꌋ‘eg¹ÎyfÞQS×ÇI¨@ÅCÝg_/J¶ÃÞ' ÿX< =”€Óó\q_W± i3çå=W`[q~¼Rðþ¢Æ >ì^`÷¾Ë5¨Î {º w‚>õÂÝCÔÇ“XrŸvÄÞûÀ~2„CÝñ~êÅJ*.ÇJžJ¡Þ[üûµëç­pjOsÎ)+;Ó­^ekÚz‰DØwÅŒÿwB¹ZCî ëk’ôYnáS\祒sóÇ%aÕp¦ÑÁ�ÔA!S½>=VôÃ33ä}ŸÕ@C+z ”.óv·ýh¥ümD³‡%+|0�4ïaO�ÚA!{ ‹©DÁ­OëÀSE·U ‘9£WhGe���ÀA���ð@P���<”���e���ÀA���ð@P���<”���e���ÀA���ð@P���<”���e���ÀA���(!òÿÀŸp¬íØnÀ����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7a.png��������������������������������������������0000664�0000000�0000000�00000064767�15030617045�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ø��z���l²,­���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��iŒIDATx^í½MˆYº§ŸûYÏBk-fc¸ ¦7µÒbÈMtmjã…’r‘ ÍJ EÕx!m(®Am0c&‰!™ÆP7QÃÅC‘ý»‡1&wèk|5SmÑmL"Þÿù Å—Ò)§"ü<æàTĉóçüΉ7Nì�����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4ˆB¿³³ƒÃáp8‡Ãá¶È•Qê£J �����°Yªêr>����@ @à����4>����@ƒ@à����4>����@ƒ@àß‹™L¢t[Í®ÜÁ³Hº;ço OG“¹;�Õ¹”éx$½Î.å·6 ™OÇ2êíJ{0‘ ·r��€ÏŠ-øoeÜ»+;»#™.Ü¡kñF¢nۤź¶t£7Çw”¨x&ÏRÇ–nWz£ßÉdöÁ{5‘A;ËŸsÝHfÖgr9îKË\û <lŒ«É@Ú¦™ ­Íâ\F»-sÿ ð��n=¾Va³ÿr,½–J{J(½s¯Ë{™Ž¾Ra}%£é{wLã…uxÜû „¶^]?êIG ·Ö¾ŒÎ/íñ,¿šù™ ö†2YK¡\É,:X k,."9" Šù Ñ^C¤[‘ß4ýòX 7qFà��Ü,[ ðµp>Þñ#ò[½±xI}=òųcáñ<¿ ™O†VäÇOnR”"?)£îT!ª®Ï¤ÛºžHožÀÿ¸òX >��ÀF¸}¯Õï}#ã˱f:­¾ú;´Óñv·r<ùQ†J°îì´¤38“lùq_ã̆âÿU¿¥«ã󩜺ÎG¥¹÷Ä™ýø°îÉàx¨Ä”>GºÃ23YϰíŸ,$ÂR¬ÄÉôOÿLj{]/Öeå1Ï™Ø8:ßÈñèÛŒUÜ¥ít«{_îw´™…û/2›¨Išù­¯ïÉÑd¦|«0'‘ º_ȽÁ‘«?5‘ë>’3~•öñHå«uOz÷wÕ9gV•›ßü4.fgr¤Òeó»+½£3Už>½_J÷ø'9ºrê e2¿rbVûwΘ[é4gåE£Î=r×ìÊýÞ=^ŽNÔ‹çŒ]-f§Ò7áïJÿø±ô3Û‘Nûªì|=ªr蟺6²nøk°UyE¯äOYå‘› ÷æü\¢¸N–Έú_Tî���P=ŽVaC_‰ŒÉwÒ5‚À›ÐÜ•Þø­;¯|LG²kD®ó÷r*Y‚UãÅsRP,]x]‘À÷&9>=Ùáæ¯>¾“É`O ®#9Ÿ/–‚ÎK%dLXJÜ/tÎå|´ç}™g/µÉÄ¡´Sa™§‹×íß‘Ö~$ZÌš'Òrc*å&4‹ ÷÷W…kð>‚ÓÖ“ý¶3i2×*Q§'koNù•õ:ýKQÝêýw%;æÜNëP¢ 7a)Êo^M9t¤;z©Ú’Ÿ¨ò<ý_±­÷N§/ÑôÒ¦µåßÏðå°é¹y¹Ti×åÛêÊðL O.Gà‡JgKvG窾õäñ ÷·Më^fÍURåã&¶Ý§MÏëÖ‰š@ÛôÜ‘ýèµJƒm«;í15K—G^>®JïMnb2åËÀœhŸEé��€êhMP… |-t–‚ÅÙâ§ÍtB±ü-ªÔÙ\Ñž§Èo¾À÷~•˜V‚å oßìNNV ̟Vãu/ú¼'ò¼˜pJ½Ò"+CôiJ¾&)ÿ;jÂõƒk¢j%\_V©ôùpMY,uì߈·K+b¸4äwòsv—“¢¤3i4é âO¥?ÙžŠòòGóT'lŸÅm1 §}:ÔêåTM8ªR×ZuòÖžËy©}x¬ße;N^k_n_–—{ÙÝ¿”ž«¤ ��@eôZ…|»˜ЕK­Ú‹ˆ47%ðËMtŠÈLc,tÿ˜VRü$®7B(Xù XÍSÀŠè[%™ÎK™FýÀ,F¯Êf*ÀT¸n¥9o¤–¥^åM ü‚üæ¥Ñæ£h¢SUàä%£<“×f MNžÆ¦0öZm¦(öÉB‹ÙDNŽõ¶ª:Ï9q­U'á“U2ó”™ïwÙþ’׺')þéŒ~!½ÓÎYÁ/iC���P=VWa_¯Ø+Ü»›wÅ""ÍM|oêš<¬'ð³òai:_ ˬZ/ÅO"N…æfø¤ C¦É,K-æÌ>ý«OS yb2af·‚oD½»vEàgç7&•ÆŸM>¼ÉI Þš?+/©§,š¢¶hM‹ö¤7Šdüê4£.´Í¹~?A‰æLS';=E?Ê«ñÃܸÒy*®Wþ9æ/é<åÃú]¶ã•òp/z›‰Lâ=E"Í%m���*sKßš·tÛÛgÄ/ò¥··ô¿s„Nü¨?½š›Gãý†B;x¹3x)2?Üœm|¼Õ¦³)¶¢ÕOR6ø¸I %w ´pê?•é•‹'Lëå2<R/”{ÏåÕÉHNV„Sª,•ÿá{ùÕ›‘d |gJŠUo"¿<kòôPŽtY¯Ï…6õwwOJB_”ß9iôíÆÛÇ«óó'Ò×å`ÒL¶Ré·e­íõÏää»çòæ<//ï\ºô ©ç2mðµxM· /Xm÷O«ÚŸÊ³áS‰†½8¦²Äv\º¼ ~G?‘቟,9Ö¬oK¿|iW§ã±9—,§rü0/ÿCÎ ïM[aš¸4û6V؆��� 2·"ð­€Ð¢H¹„°[ýPÕW]%âßò,ú6ñ;¹š¾z½]µM×B¨àCWJ$Ž\š§8¡úÉ-!‰DÒ&/—2=õ;èèsÁ®8 [FhTx˜”ÿÅìE¼;v^HÇ/9j¡l^>M’¨-Ê~ú_rôÝ39vi^ ­€TY,ËáC°»Œrá(Fà«4wï9Ó/Üva%ÚB^~¯~Ÿ›Æd9¸]tÔ„`™^Õž=KþÖíØŽèÉ›Œå%L—òÿýãûÒÖ+ìãiª|Ý$Ö„¡Ór"£ûj"c&b?«Iäc‰Žû¶<âII7ñói8Éý„(w\§NÒçÂ6’(?çæã‡èAɽù7)ñÇœÓ&IîI€?fÓ\^—ÇJ÷��ÀgŽG«p£ʱâ;=©)+&:ðy &(Gß§žYó·ì]ƒ���à&@ào%ÎÔ¡)/ºüð}h>Æä&ýtB?Õêãž”���À&@àoáö%;«ÔgoòÄ*þçEð"´­mj5’qÚ5��ÀƒÀ����h|����€À���€›a~&ß~ÏF · ����>÷ ¶4¾}ø����ð‘øoïðÍ’m�����þÚz_v;ö¢üÛ����×äƒÌÆéG/åÌ}û ð���à,d~þDzÃ3™«þÖ€À���€µYÌÆ2Žef>WþVƽ»JòQËm�����ë1)£î£ÿ’¿ TÕå|����Y\Èxø½ŒgÜ͉ºú%[þ6€À���€ ,d>ýQŽGGr2½tÇó3tZJ¶dwt®|Âm‚À���€–/Ñj¾H{5HÛ·ŽUüÛ¦ª.Gà����Ô�>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4ˆø:‡Ãáp8·=® Vð����j@U]ŽÀ����¨|����€À����h|����€À����hüo$ê¶¥=˜È•;R+™E²ÓÈdý‹kÂ¥LÇ#éuve0™»cëð1å[……̧cõ¾”nôÆK³é442›D2è~QRŽw Îß³Hº;k¶7ˆ¹v9ú{j7¸gnùšOe<êI'³¯­Òv�šÏ–ü·2îݕݑLîl‹éHvU=ïl«àZœËh·¥Ò×fpÿ.ÇÒkéz¦?{®&2hÛ½”·cR<—É cÒ“¹˜BÛ�0l‡À;å=%ß¹ƒÛιˆÈð3[Y¼š ¤]Uà/^KtøèÓ>Ñ0‚„Áý£1+¾Ÿ ?QY\Dr8ä©Íµp"ÿæþuûP'òóž–~ª¶ �°ÅlÀ/ÓÑôŽŸ‘ßêåÒÙ^2??’nëó3¨.ð/å|´/­Om²„À¿>‰HúDmdþRFÝ;˜e]—üéCø��eܾÀ×f{ßÈøò_¬™N«¯þNÚé,f§ÒïhÓ‹]é?–¾[‰Ë;®m4O]i©4íì´¤Ó{"“Ù}F¡mJðušõµ½è\ ¶¦‰p”ë<ñ콘Ü1íº‘Ì²ìBsÓáãúRºÇ?ÉÙÐùé e2×yÿ ³ñé˜cßÈñèÛüU®Ü8¼½ü]éömX:ö*GŽŸÅL&G*/+a¦~º,•ßþ©ºÞ 7sL;=Øþ“ËshË›QGgêz}ΧíPŽ'?ÊÐøQáÎT]irÊÈ üÌrM×ñÒ^÷ÞàÈÅ¡&™ÝGræò›Ûƨ´žƒ6¡üŽ/TlA|#y§Gµ£‹×Ëôµöetî§µeâÛX÷©LιøÂ§^úÚH•™N¯>ç]ŽˆÊm; '’²Ë%]Ž]–j’îãîôäh2S>5©òéô%š¾Éh#iAæÛ€磤M,.dÜßµÇúG2ê/“wVÜÛ8´;hösI}åÝ—š¬¼Øº[ÌÎäH•‰sÙ–+ÞωúÐ~uSp/ܧIÖ,GÅböbyüþ}“_[×YuŸÑfã>5«PdzúТü¨sËú8”ž³D௶ݿ¨SË8Ýõ¶OÓÇtÛH¸Vü­üϬzZi3þÞ°ï2Øôè{ôUê÷|™6“Ö5Æ�øìÑ}I6$ðUG?ùNºf`YÈ帯:Ò»Ò¿uç5Ú>ÿ Ù+¶ƒÛ3KÞñw2ì©ýHÎÕ  47HëGõû­;²½V×Y¿¦ó|oW©t>üÀe;WÛéÛëZ.¾´ÐͲ -HÇå+g+®;j+løNä“¥¯d4}¯ŠH‹–}Ošü8~?tƒ–Ïë*Ë-ô£›J;¦²’™o3ˆÙëZ;.Ýþœ/· –¯ÌÏd ÃÑKåÛ^Vh\Æöþz d:ïÂwƒp^ùxÜ@œ(×tbÓ0-�t~¯báaó›×ÆRøI…ŽC›œì+Q¡ß'¹òï¨8œˆ·éÑésÂДÁ²|óËäG™Œ¾²ayåã2åï¯m;¡æ'Y¾>Òß'V$­ 2“Îø]‡e]š|µÝDÅ m3YwõÖ:”èB #—_{]ñJì²}Úö¶|$«M|°ý‡{ÇägOåE‡ëê=nwUê+ë¾ôm<+/&œNªÞ\_Vñ~Îëo>\ã> Y¯U ù68|¡êÞçÅ•_úRáÛ´fô©WEýƒO—ïKŠòãÛª`Æm5§Ý¶]•Âùd¨òNŒõ}~yŸ¬S'ËrëÉÅç'ññ$ÔÇŸ~ÿL?ÑV÷y¼Ð¥Î÷Ú¿+ ��·.ðS«\ÉAÊv€­îPNÝJ™%ç¸éÜÃIB8qxc;ϼ—yÓB $u.98iRb¥0êX(24aø¦ÏjðÍJ¨£$ŽÕ4®²â'o çòUfò\†xK”¡Ûu(ñÄÆ vî˜ Ï‰E"ü¼2Ê,לrÖ¿Mç¬}ª´ÚöŠÈžØ,ÛTz·ŠgDPY™\‚ISÒæVòPÖ> ËE¥-‘/w.Ýft]ýÃÿ§ÚS;ž'Éh#)Òí-¿M\Úô·º28ªVê $«¾rÚ‹¹7²ó²ÍIg®«z?‡¤Òœ.‡²û4Íúå´Átù%~»ºÏëS²Óà~åçg]~a[-i7em×û‘\¨ŸZ¸ôW'F+”Õ‰bõ˜½¿cZbœó÷Ÿø¸ûÝ߇Êoß§í:í�>[tZ…|»"’êеKœ…$ÌâGâÙdz:Ýe‡ÿ*%R¤2~l|ò4~̜߹'ât¨ÇÄ•#$Tw>úfÕl¹Ê¶Ú¡—Å‘y>ÅŠ“Žå“Š4Ya.f99¸GÐþ\Æ œÈcÖ í®6®ŸWF™åšWΊ1¦áCNÛËâƒÌ&ÏåØ?Î÷ùJÇW(ðËÊD¯d†í7åß­ZáâW*³Wð3ÛFX…å¢"˪Ë,‘—.ÿYùM’Nga›˜ŸKšÈ3ã)Uš¢úÊi/y±éÈ.ëܶšEÕþƤ%ÿ>MS½ÿ´Z'éòKüvu˜×§*²û‡Tš ò³’÷²vSÖvõدâÏ”ø?&T2Ž¥ËÎÞó #Ü]zµ ï=”‡j²ÓêÊ›ñCéÇi[£Àg°¯WUV;V»–ÕÑëYÛK«N61H?=ûÛ•ëm˜zð}—ZÉI‘êŒí£à=é"¿:Mœ+t²ò±L‡&®!aèÈ$²cò©†¥,ެ(MÞ€äW·Ò$ý»Ç÷žŒ¢å•1 òç2áDýªo(Š’«6®1çI—Qf¹”óŠpiHˆ‡¼¶ç0ÂzO ¸%Odæ;_¡À/+“´˜J—±.¡ms«+Ã3oŸ¤´}æ•‹ñ‰|¹txÓ•·2›Õ~K…š"]çUÚ„”‘în4]¥õ•Ó^ òbÓšfdPv?¯Ó߸tåݧiª—ã[[Ïa;O—_â·k™}jQÿJSA~l»¼üpêëò¾Óæ°ìB\o È8æŸL¬Ä> rOz¿“³Ñ7êþsãT[¿Ê0*iG��š[øNˆ´³Ä’ëã—™Tg>ì9¡âgšÁä2ûøŸÿhmjS6áãXmGií3M„êÚÇr¤;Q÷èÔvà^´Ø4ú§ í‡OåÙð¹¼1¹tNÏää»ç*l÷hÕ:Þ¶7'6®@`…q«Ánxà_hôFG^‡ô›€’dùñ"ó޳ÁU‡ô.$ý§j€òþ“ÂɦÍÛØväáñž¸§%ªüN_ýN¾;QÂ'Q¾:¹¶L“vàwHòqy±›Jk^e–kN9ëßF ä¥!¯í™bì îÊÄ×Iû?{,'ç?˜øâúK‹Ä”�(.ׯb±ns:¬Š!+kŸ¦\ü}â'€Mˆ<u¹a:ݾNô;�Õ}uéÚ…‘U£Ò=|¦ò°¼Çâ6bÎ{Òí³¸M\MÉo³¦žÓíô¹¼:Éññƒ’úÊk/¾gäÅÛïÇ“*]fO¤¤Â©t?õ7ÿCÎå )ºO­%ë•£Ÿüyû|oƒ¯WM¹¤î¡Ü>õÕßôþ £ïCåôosòãËÖ¿aî õ[§)Ξ²¶kðyêz…uë$]Οo•¯ðýŒÄdØ]×úB:ê¾7ý€»Ÿù«ÔŽ�šÍÏ?ÿìþ‚2nEàÛŽÝ­2&VaÜj¦?gVa”P<z,Ñqß2ñ�ª:ßÌãŠÄ£z?Pù^Ru°ñ$Ú¹Ž×‰�w{p&ïâÕP½#ƉŒî+1å'î;+.ì@à®ó”—ŽD\*Ïž¥~ËÑwÏäØ]îê²BN‰2N 8Krý,‚+L˜v7‹UÿËPôΧ#¹ôª†Ìcp'Vß©òJ”¯ÊOb×—¥YE2®y}›ø½ù‡Õ2zó¢¤\Ãß. ^ tï9Œ¢6â¶a´eu$§£_©2Q"ð‡cy˜ˆï™< Úwú·]™Ï+'6b¿#‰¿Õµ^¬úcÆ-ÛÄ …÷‰NG°JbW…iá8JÝW¡ÿD{RÎO*taI¥1ÝÞ¾ô ÛijèH¾‹üN>a=º?ý½^©¾2Ú^ÎÍ‹>åwžÑçtŸávѹú}…ûY•ENóC¤'$.¾ ÷išuË1Ò»ÍÄu©ÊìûGÒk«4Æ2ͼsúT3ÉËëTÂ}¨ždæç',[ýNÌã^GÉ8Ód®¤ízLü÷VWÈcÖ«“ÜþT•ÃÒ´F¹,S¿ôBÄÊ*¿"·¹¾!ï‰@ƒˆ¢H~ñ‹_Èoû[Ä~ ºŸ¨Â |€­aåq~QÂõh¨Ÿ&¹ß-n±qCßrƒÏ-ª÷2ž��ÀÖ¢¾D[÷õ×_Ë‹/ÜYAàÃç[ÁÏL_¬ÉFruX¯dFÒï=YYÿhÌŠcø®�@Ц3=9H˜í�À¶“øÞ±ª¿Š.—* ð¡yqï;ˆú¯F/_.õyrf7&î½Ý· ÛïRPü;/¡ À1N]ÛL§…¸^u¿®ûå/™nè´?Võø����[AÓþ§rZäë²üœÑåP>����Üy&:Úa¦“D—Iø����pkd |Lr²©ªËø����pkxÏj}9|����Øzþð‡?°Z_>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4>����@ƒ@à����4ˆø:‡Ãáp8·=® Vð����j@U]ŽÀ����¨|����€À����h|����€À����hõøó©ŒG=é´2¹Ò®dÈNü{Y¨deÔÛ•ö`¢RœÁ,’îNG“¹;°+eòF¢n;?®­áR¦ã‘ô:‡Ͷ;¥Ÿž:´ëäcÚüÇ\»6·q?ù>ãKéFoÜ1ù ³ÉÕg´d§µ/£óKw| VúË5ÙxÛ«P÷Ÿ´ý@ØÿVƽ»²³;’éªÄ\&ƒŽ‰»VÂçj"ƒ¶ÝŸôæEBMËD±˜ŽdW§{ç�²8—Ñ®±;m~Àâ"’ý¶ö¯~Råó…ôÆoÝ™ª¼—éè«íî/©{�¸UuùfþåXz--ìöd0yçVÅ Úº­l:‘¿™UÀM•ɹˆÈð&W‰¯%:|§ój26_±²n©vÓLRmÀôÍyZ ¯Ûê…¡/¤38S=Þǰfym¯u�›e ¾^A9Þñ#ò[½±¬÷¿Ê&Êd!óó#é¶nò1ð¥œö¥¤¯ÙDY7‰ÕvÓ<2Ú@ÓDÞü¥Œº»×Xu×|ÙøtZ‡]|pÇ®Ë:ýå-µ=>�¬Éí |ýøqï_þ‹5ÓiõÕß%v:‹™œ »ÒRqît¥×½³ìœÓö”ê÷éÀù5þÈx¦o׸+퇑¼ˆÃSç/^/ÃOØu^Êôt¨]VOŽ&3’ÂÇÛ}*“³GÎOò‰ÄböB†:­;-éÜ¿oüd |o‹¾ë÷¥múñäÇeáÊUn™ùŒãÒÇ~ G§S ²Ñ¹ +}\ÅÑ?•Ù‹ }̹n$³ÐþÕÄ»,ÅìTúæø®ôKe•Î ”><÷øÙ üì|æÇ—$/îôü\"UöÜÒÙòÑ×FË8b§…Ö…«‡»ÒíJG×å Ê~r¤êÞøSqõžÈÄ´±’¸2Ûæûì²Î²N\Æ«óàlv ÚÅP&ó¬{+Õ®u/l¹..dÜ×é×ex$£þ÷6þ¼ãE÷ˆf%Í‘LMš2Ú|fš²ÚÍÿM]«)HG…{5_¶ïϵ‡JäÜo^äåÕéZñ†÷ÈÛžsú^{Oª0wÉø'_^AÉ ëÒ g}­þ}ñÊÞ »«Ê}èÒ©]ÎDVç'¸ø‚¶âGâ²I›vúúmÝ“Þ}ÝFmß²˜ÉQ|/ª>ïèÌõ i‹m/ï¾*¬ûÔ½—Û=ût¨z¾Xö�ÐxtÿS… |50L¾“®pªû÷UÇu·dEçêŒ÷¤Õ}$gjðŠ…¤éœ]G­;?×Y‡+ÂÆ^³Õ’Ýѹ,b»Få׉x{^wœ}‰¦JÔÏÏd Â¶OtZÕ äÜëÎùOK;N=ph±¬ãî«Ïa… K CÓɺÕ'å?K$Īø–¶é~{/Ñ¡*+¿Ò]P&ï—ƒ¡ËæóŽìG¯U®ìµ‰òsâÝÆñ•Œ¦ïƒt-ãØþ5,3°ëÉÚ¶œÝJÛ^¦Z]9³qèÁM rŸ† þ2ãKZEùpù5ƒã•R®M˜Ku=µÝ¤ÂèöÚe½ø²ÓØðÛÝ#9Wƒ­/{ÛfŠãÊm›ñ9_Ö«ízYçÉxM\—¯–mÛµe¾:+„«ƒ¾ÝÑäîI' L{*|5iÌ;ž(ãÂníGr¡'Ú¯Ëã²l]žsÓ¤œl7+תü¨{µˆ@\f ü¢ö°É6`ظÝ"E²N׉W•i‹>ÿ¶/ÌO£µSouöåaX^®‡å®½ÿHFѾtçœí{^™û:ó}±‰óîò>5m`7øí î•puß\ß‘îè¥òáû_?Ö$ÛÓíµ½¼ûʧ)»î“i¸tã¨þ­D½É¯ïÇÊÆVØF~þùgùÿïÿ¹_�ÕÑ}M6$ðµ åA, UÏTn¦cü„Uªs^ùà:Éx`Nÿ^ÙÃþ¶¯ý;‘¶Dz]¼ñ€¦ÃuÜ¡]‰;Izp·¿—¦+‰óee’ˆË ¬ñ€•OvüoŽHB§ÏÿÑ<iu‡rªç\Vë*;Ÿú÷¼ >›¾<’éN×cXÇ ³EP–æ·Q«e²|.•.“§’¸BRía%žtY¥ÓéÅ?fÂ[¦;~>Yí¶+ƒÓ©:ãÉ;^|üÙLT—Æ4«yö¤ÛI^»É«cEå{Õ(¦¨, ÛƒóS‘•òȬS/D׈×-6,'©Ö–}U,;LØ~Ò« ʯ,,Ÿ®øÉ©§(Nß¾Bóg\æ&ÜpÕ<dµ>—‹$IgÃ+ªÿô¹U¿7×öòî+EQÝ›ŸaÜŽ[A?êë!‘.Øz´¸ÿ7ÿæßÈ¿úWÿJ¾ÿþ{w º«ÂF¾]…Xít‹ÌtVE@y,ú‘åÉÓØd#$VjÛ9§›Îxů&8_Øqg¤)3¼%é|ÚßÙ¿´Lq¥Ó¹Êb6‘“cÿh<ÿÛ…“9QXHÂÌů­°Z.ÙùÔ¿õŠu^|ÙdçíÞyñàVì—‚Ä®¸%W™óŸbز ž�$(‰K“Ó6Ëêtõ¼"œŒ˜t¥A~{3i<—co>ãë$abäVµ÷¬ã™q,ï‘7©ºM³š§œ4å¶wmI:ŠïUs ˜¢²4çòÚÃzd·µ‘W9^+"Û¦}»CF€æO¼Œ8ûd'øwG¯äÏ%aYaND…qfˆÿ8N{l%M òÚG^|YõKm/ï~+ª{ó3l+?‘¨^ÜÛ¶`"ÖA·™*l@àëàƒ•ŽßùÕꀑîp“¿í£ê=é"¿:Mv¾+±íÓ¿M§èW¢B™tŠ:n·Ú½¡üÒ2IÄ•‘–'H;=E?Ê«ñÃŒ4øß.ŽÂ—Üô Yñš_*Šì|¿0>Oq>ìË}VP¯Ú¦z“ש¶º2<[Ú'ËÀ0ek'öP‚‚¸ŠÚæJ<©²ÊºOì1'bRÀ§3³½™IÍžtz%Odœªž,EFì$ÅZâøéÿ*¼G®VÚi’Dž Ó”×nüµs¯šÅ•eY{Xƒì¶V$ð«Ä«Åsg†7#Ë8Ûþb¹òëLÞÌ}¨ê¨0,×׬„íVªóÊÛä%lûaœúÞO§)M^ûMëBRþ· í­ÜoEuo~†m%?o¼íâÿñWĽwˆ|¨Šn/U¸aïDT;Côùrå‘®#>ïl‹­©iü¦SÕØ]×aºÎÓ‰KÿÄ ýð©<>—YâÑé2ìôo®db»F'"ãAÇÅwìa:TPNyzs­¹a³&3n�Œ;lÿÛ¯@¥Î—•ÉŸm>}çnËÁÛ¹ûøËÑ«¿·"Áäßç·#ŸÈðÄÛzj!w&'ß=—7ç:OÊ¿³ýuÕùè¡MßÊdØsÂØ¥µHà«s§¯~'ßüѬ®æÓþ¶e˜_jU΋Ì|L8ÈèLYæ=úO•»Á‰˜P¼kQߪÚ=—WqÛ´«Ý˲¾H´ku¹·ÝMÙúÆÏ´í m¹¶ž•–¸^µðá¶Èñ³Çr åÀçË„aý]Me¿(¾G|Øá½}ù£ t“e[”¦“x²—n7¾^>î^-¥ ,‹ÛƒõQ•ôývaîãtúßUãÕ‹wì5 ýbþ¯d·Ó–Öý‘œþ˜2 1è²I¾OÓÙñ/–…^bÛ~«÷\ÎÿÒ¦5Ä܃w—ug^F Ź޷cÛF&õéûÈx®Ǡ'Ò7mÏùw÷âm¶½ìûJ¥#Q×þœÿî—¼ÀÏKl3ÿðÿ ÿú_ÿk;~ç¸_ÿú×Î7@>º­TáF¾í@]cM ªnÅÜŸ lŸC–»Ñh±7”ǽŽÎ#O/lç‡ýPÆ/ýjì®ôŽNdt_u¦Z`¼yaD ÷Û<“gAÜéßvÅåR¦Qß såbÓ'Öb¿#‰¿õµ~ ÒÇTÇûý#éµUšFc·‹È’Dù¨NûÛA/ø} Ï¢o¿õ*Mn™¸•aë׋’0-Úù Ø%Bïüp:’ûj‰'ÆÄD’NT¦Ã‰w‹PåqôX¢cWV©Uð%ʧ1Ñi>’—f¥Ý…•™Ï¿äÄ—¦(~�öáú°Â—ùl9.˜Ù'þX ò¸qò_¿{IQ\ï‚'©¶©¯M”uº]»{&ñ8ߦqu—u={–ü¾§â§ :Œ#9ýJ¥ÙЏ“§ò]äw.ZŠÇ«œãºì³ïKØNµó/ §Ûü`ü¿sÓdÄYn»ñõrý{ÕN®TØY«á‰²µ÷Ó{ã¿J{pqÇb® MØ^†÷qNæÆâÄžöcÊD·­]ùb÷9Én2ãóÛê$Šï¹’°ÌµYf1vbÐéödhê3ªß„‰_ê>×áf-RõŒ/ɶ§ï9½‹N†ÿwù÷ÃæÛ^Æ}õ¡ø~þªûU* ïœÀïHWM„ÌñDœl‡°=hq¯íím]»ÃÃCw@6ºTáF>Àí¡ÄÿÑ÷)1cm³Ó»GC½bîNôªÝÁRÀU¦$.w¶‘·2þÆoý¹I>U<×Á­ Ç«ÍÛ€NÓ7²n )²lðaÛÑ;åT÷Þ}ýõ×îj€Ut©1óI?QÐ+áýodtþ/ÆÌai¤±«‰ýÞ³Ò¼Åq-Wµa»0öÏám¸Ž>U<×G›äító)q«æj¢q~q*ýî·Ùæ›àð?ëé l3ÿå¿ü—X¼—9m£¯mõòÐí¤ |h‹ðã9ÚéÇðڼˊ¬åËmþ|¶U%JâØZÌŽL¾Ýf˜u}büû7i“/H㎯;Vñ놶¯_Ö_¶Óâ^ï²P„n+U@à���l½SN(èC‡¸‡ªèöR>���À' Käÿ»÷ï÷P™ªº���ð‰ø¯ÿõ¿Æ/Þ~õÕWî(@5ø����[ˆÞ:ó?ý§ÿä~T����Ð ø����� ����Ð ø����� ����Ð ø����� ����Ð ø����� ����Ð ø����� ����Ð nDàë@p8‡Ãáp8Üö¸2XÁ����¨Uu9����  ð�������� A ð�������� Al¿À_Ìd ¤Û:hvå†\É,:n$3wdûx#Q·-íÁD¥¶Î|ÙÙ#Uz륖tz‘Lç w®uÝ$’A÷ éFoܱ4ºŒîœ���€*ܲÀ÷Â޸NOFã©ÌÍù…\ŽûÒ2çòþ§À ô8 ·+½Ñïd2ûàü6—ÅE$ûíC‰.æ2?ÎÎW2š¾wg ¸KÏL Ú·(àÝD0³ïHw}u���ÍGë›*l@à_Êùh_‰w%£s'è/ez:”n«%þ©ÌÌâ°f›øZÀóVÙßËtôU2úéÂQO ]%[û2:¿´Ç·”âü•áê¡=Éu˜EÒýñZ¢ÃG¹i\LG²›H‡osªwG2­ò@���`‹¹%¿ùd¨„qKvGçêWȹˆ•ð¿#ûÑkuî üùKuï˜Ñä¥ÃçeËbiþʘËdÐÙrï&EiÌL‡ËÛ­>%���¸nIà¿•q﮺&ÇÄÛtÁì…õ=»•VmR1|aWøçSzÒ DÝbv&G½]“&cBstæž(1>ý!0 rOœøµÇ´ËzE¢üè8Ç2Ré‰ÅõâBÆ}>ý¤âHFýïWiüîAN¾Ã•g——þøBŶŒ¯Õ½/÷;-wÞÿ¯]V2Ê&.·U¥Ì‰‚ª‹ÓA×™Tiý'K³'¬ï ŽdèâhuÉ™9ŸQFÆ|ë‰ô|ú;=9šÌ”OM*ï¾DÓ7î‰;–7™Xø*îó#Vk?’ �|¦Øþ·mÖ#« qÛç6IÕðoVà_MdÐV™Ë[iMœ÷ÂÚ XoÚsWzã7Îl&K›hìw¤;z)s-­¸öûÖÚ·ü“w2ì-¯sq®¿‚¯ñæ;6ž>/*6l÷^[í_ÌN¥¿7L•Cøîõ&/a¾U&\'TMž•hÖa~XÆ—¬eù›ŸÉ s7UnJ¤ÎÔoã¡dß–g«{$çs5ÍÐùÒâ¼£ò¦_Ä5ÂÚ›^¢º7–ËŹŒv­÷é³öþÎìÉOˆZ}_¾·OxZú]�590én¹ë*<e0é°å“p&lÔ=ÀçŽî`» NÖ‡2Û~6]GUÃ/õµVBÞ IœÏÖNq˜uÖÆ:nε/¯´Ï3£)Àêèµ¾&¶ï­® NýËÄY”å;$%l³òR˜?WB产ñ±ñl„s˜?IqÇVVÎ]™ùðéó噮ǎ ÎþA•A;ôKSUà‡é¸”éxdŸøI�|¶è¾¶ êd}(³ígÓuT5üR_ë%ô:&:¡°v&#fk̤¨»š ¤®ó—·æG ü’ü¤ÃžŸKšÅ/‡”å[£ÍXžË±7‹¹¶ÀÏÆéø‹Å³-w%À'ANB1½"¬Sá'ÒçâÊšŒa8!Åi4¬¤C³|b’_ÿ�ð9€0Ú>¨“õ¡Ì¶ŸM×QÕðK}­—P/¨BO…—lÍJ¶_ÅMŠ:+4ýµ!©ã4…X“'ðU ÜK¶¹6Ü9a/f‰Œ8ÏZùÏË·3G1f+{Òé=–h<‘q(l³â+ÌŸ_1'(îX,²‹Å³}r’|iÚsaæ­àûðésqe­¨ç>ÅÐ ðàã@mÔÉúPfÛϦë¨jø¥¾ÖO¨³O¼ÌY´MfÊ?)QçàN«+Ã3ýR¦¶÷~"ý£s¹26øaØZØ=–#-@ÀlõžË«“‘œ¬˜jx î`›ÌÎçí£îžHxñx5y$þeYs®Hà{|gïòm'2î:oƒß~ ÇÏËÉù‰ø %ù³ï'¨ó ú»ÁD)m²“§ÁoêìæãIÖiü`"–š€xS«å‹¸ºÞªººt@ß4*mÃgj¢à'}9}õ;ùî$=Éóá†_¥e¹—y÷d0yçŽÀçÂhû NÖ‡2Û~6]GUÃ/õu½„öÏêzãºò„»¦(‘îÎâ~`α˜½ˆwjIN ”HŽ¿ÄªÏ?áy >t¥méÌÿ¢«®Þ¿°ï'Oå»ÈïîŒâ~Gº]•?—´(âtyÉéèWVôþp,SñY‘_”?M(tõµ¡éP:ÿ9&2 Ó#®ðK·:ü`—žÄ®8 SNá€T]…þÕÄêlèwëQ.þŠÃ?Mq•%¾<Ý5i—JO¦É�4ÝÀvA¬e¶ýlºŽª†_êëö“øy¶õµ%ÃD§ÉŸ3q��øD Œ¶êd}(³ígÓuT5üR_·×˜´éÈ9»ªÔ/ðs^ÜmÆTé3É+�l-£íƒ:YÊlûÙtU ¿Ô×§nLËí0Ó¦ M mNÒÔU|ÿ^ƒÎcÞnB��ŸŽO=–A9ÔÉúPfÛϦë¨jø¥¾hL��Pw˶êd}(³ígÓuT5üR_4&��¨;ŒeÛu²>”Ùö³é:ª~©/��ÔƲíƒ:YÊlûÙtU ¿Ô ��êcÙöAˆüú׿–étê~•C™m?›®£ªá—ú¢1�@Ýa,Û>²êä¯ý«üæ7¿‘ÿüŸÿ³üápG›‹.í¾þúëJBŸv¼ýlºŽª†_êkc Õ_‹Òmåí$ãvœÙÚ}ðíG¢_•‡ÿÐÙîG|P*ü Öz;*-f‰]iå¶mo[�pÓÔF¥>¢¸êÂ<ÖŸ¿û»¿“¿ù›¿IäW ߟþÙùha^}~‹„¾öSwì'“ùŽþ(jô<øèiýÐùØ$UÃ/õu½„*q6‰–_7õ•Év!—ã¾ûbémnYò%ÛhÒˆNôS³¼y¯ÿÅØÅE$ûíC‰.æ2?Nåïèï'ܵux›~I7lO¡Ó÷ m àS¢ï½ún5ìû¾K9í»q3ü:x}ñuòÏÿüÏòþÃpùÍvQ¿M#+¯Úå }}®,^K´ï5¢kÏzá÷¨g¾Z¯'²ýñE-Ûø¦ë¨jø¥¾ÖO¨ï„ÂýÏ/ez:”n«%þ©6Ÿî‹®Z,óVÚ}G¤c>•S½ÜNô6°"ÿºßµö@&×jnâ¶qÿA.¢2ÌËãâ\F»­D:³39êíšûªÕ=’óF}ç`{Ùô {³ »#™ún"X8hõÆjd­7:¿ýíom>+¸ÿïÿýZöêu +Ÿ¡K }}¬m<±€÷N&ƒ={¼¥ùê·’¿é:ª~©¯õºùd¨f_YÂX‹¡C%šïÈ~ôZûDþRFÝ;¦49éðI1ã¸'ðçêïl¹ÀWmýüHMZ‹ò˜—ß1øTlzнQÌÀ­À[ y?†êãw¥7~kŽÖmk¯ó‡«æ¼Ð×7‚ '&±Šðƒ§u#7]GUÃ/õµ^BýŒ,ÇœÂW¨©L/¬ïÉàX¯îëʼ#Ýá »Â?ŸÊxÔ“N òÂÕϤ¢[Ó“ ÷ôÀ‰{{L»¬ÉD–À÷O!üd$Žo,#•–xâ°¸q_§M?¥8’QÿûqêŸf¸4uúMý:Lú\OŽ&3[ßÃH^ õÓ}þŒ/^Ë™ÿÝڗѹË›H}!÷G2teÐê>’³Ø®-/.En^t¸O¤×i­^£ÏÅ6ó»r¿wO¥©@üÆOI´mcÿÄÙÜ­šMeOÎ Òïø7ã¸lº2<sçWÚVQ¾²ÚÖ+ù“÷.ní2'ĽàŽÀÆÐ÷i=MXM´ùè©7w­7qÿ‰+uúÅcý.‚þ»þ„m<Cć&®5\dÝtU ¿Ô×Z õ«Þy+¯‰ó^X{;+/ªu‡öfièÃ2öZéŽ^ªŽM 2c—m;?c¯ÝòbÜ­Žúë\œå+ø®1.÷hð” ×5V'Ö³Séï 3ÊÀ­ÀøÇNó3(QéÃ0O?¼HEöž Îþ·5õÐérçmžÕo?Apa™4‡«?Æ äÊ­6û<Ä5ù97/Ö.>uM«/ãK¾ ωè8¼<oëÈ›¨˜8´¸î¨xŒÉJÙ ~Qúß©óNXë ž4ø‰žIë_VÚV~¾TÚ ÚVùSŠïÍw\<�°Yô=_BÓ…Ðå-8Õ/m[¿š×l§íôµ½~“ÈÊgè¼°÷ècõ'Ï<ÇÀ/¤jø¥¾ÖJèµ~°rîD¡I‘·|d“tíÁßË+-ØòVB+ ü ~…W…ßÚä¢4\'ðËVVLþÚ9œ¬LL*œP7ÇVòaý§Ç7ƒ¹AÚÒÞ˜³ñ»FPþSA\§ò&3/áK_¡Ó÷æf Ã+¿&má#f?›÷ÇÊ~IYekÛ~²Â/Ê×[{.§m!ðꃾ¯kA¸@ãú¸Åì…{»ÞŽbÛŽ¯-`µ ʲÿM:½³ŽÞa§‰dåW»´°÷èsµ'hãYãkBï!ðW¨~©¯õzÐ4&DI‘gÅTV¸Î_^#¸ŽÀ7ø¼ä¸t¸ós‰Bó¡øã�sM(º2Ó”ÇG ü Ÿo~*Ž+3/®œ³ÄnFÚ‹Äoæ¹DzK~YY¥ËB“~A¾¼¿0œ€ø‰{Á€±éA÷¦XŠ›p$<ÞœwwÒu¢÷½ÿ·ÿößšãÞéAi{ý¦æõ¿ø…yé¸h[Pí¯Þ”˜ç$±ÁÏ¢jø¥¾ÖK¨¯¸–tgJ…TxÉ6±ÂyVLe=¢ W¦3šA¦ ¹!ïˆ÷`OuΆÄŠ~E7|ay|´Àwå¤ËóCI\þP"/´õ‘õV{F¾ŠÄ¯¨’7®=æ'p%¿¬¬2„u~øîïÌ·õ‹ÛÖõ¾ɶyܶ•z£@ܤûpÕ3gÑ¡ndÕ‰óZä–íßtha¯M•ªLdêÑŽ‹(1Ïñã»>Ï.:™T ¿Ô×ú õâ%| ¶h›Ì” ~\¡)‘ç+=~YRMΟHÿè\®Œt¶žh<–#Ýpœ0nõžË«“‘œä‰¸„ÀWéúö…¦Ø.<…ël½À¾š<’ÿ‚°9—!ðãIN¸¿«jìÃgJ¨.'@‰÷ |y¸øbÕiÑk¾òŸ°s¿ëeq\yyñ+HË—uu=TåüΕ¡[ímâón`·ÿmʆ~iå:€\ó•’²òÂ:eƒ¿ ?Ù¶òóõÞÙàg·-+ðUÙœžÉÉwÏWM¹|„øEñ0L�Ø4›to„Pܤžîù~JŸË\$ª!µ¨“ £MÖyBQû2 'ª+‹xáê~}À6]GUÃ/õu½„*l¾dê:*í:ᇮ<áN(JðÄ;©hœ :¹¥¢öN ”À‹wpÑÎ ?ÍrµtyÌã„ OcÂ¥Óà& Þ¯ùï'Oå»ÈïÄ¢âò9Íb¶ÜõF;/r ÁÄB;ÿíJ|ÏäYîôo#(ÀWyèÞsá¥Ó”—â*7/©rNì¼äKåéûÇ÷¥Y玄.koW𮓓¦‚ô»ô„mE“n[ù*j[îÅæd:Ük™¥kurœ*—ò§�ð1è{oÛYŠø”iBâ£@Y‹Gõ¤u²mÔ»ÌBŸž¨êE[¿;]–^«›®£ªá—úº½ÆäDXCE~rVLt` m àscë…QΓÏäöÐÍzò·õu²…Ô¹Ìâó\[Ž'±zØh`Å}¶ÝtU ¿Ô×í5&m¦ñErªãVð)¿,h[�ŸÛ+Œ’«šÙN?å|,QÞÑš¢óëQÏ2+²–ÐîŽtO%:™4bòªó´Iª†_êkÓ M>¢lÒv`Ÿ”„y«øÚÀç˧Ë êd}(³ígÓuT5üR_4&��¨;ŒeÛu²>”Ùö³é:ª~©/��ÔƲíƒ:YÊlûÙtU ¿Ô ��êcÙöA¬e¶ýlºŽª†_ê‹Æ��u‡±lû NÖ‡2Û~6]GUÃ/õEc�€ºÃX¶}P'ëC™m?›®£ªá—ú¢1�@ÝÑcnû¬GVâ¶Ïm’ªá#ð����j����� A ð�������� A ð�������� A ð����Ä|‡Ãáp8‡ÛW+ø�����5 ª.Gà����Ô�>����@ƒ@à����4>����@ƒ@à����4ˆ-ø ™OÇ2ê})Ýè;¶í|Ù$’A÷‹¥¹ˆ7uÛÒLäÊYR—ú¹”éx$½Î® &swl}³2ìÞ1í|§Ó—hzéΤ©c»½&³Hº;k”«/£Ý mµµÛÀ·›C‰fÛ‘"K•ö¼NYf…·Îõ·Po‹™œ »ÒÒ÷âήô¢s¹þ½ ®Ô­q ;íLÖ.”¹�`Éíü«‰ ÚÉ}:“®-Ýÿö\F»-ûw]„ÒåXz-—þ¦‹»Åy-êçj2¶iS×¢ŽÅk‰ö;²½–«Ù©ô;mÙ+™šAMÊåV îÿíôIÓ‘ìšvs°U™®hÏ7Þæù Ñ¡´÷#¹¸ºqWvvG2ͼ�>_ô[…›ø{d<û ¤V,>Èlü@öôÀo„@Í„’YÕÜ®4/."9ÞŒJ„U“ú±"ÿ#LéJµdèÏ×±Ý~jœÈ¿yŸª‹uйÃGñÊ©m7Û%ð5+í9•îuùèû#ÅMö7«lÛ“žg³å�Ÿ+·#ð3ùýïgn4㑤?Àÿxæ/eÔ½s3b:¬ÏDà_¿ùù‘t[Áy~9øuQ™K9íK+è‡ê!ðWÓ½.7*ðo²¿ÉbcÃ[bÓå�Ÿ-·#ðØz¡tüÓÒæ²3”ÉÜN ³39ê횸-æÑ™ÌVÕ6ÑáØÁM_oòôou±ŒG=é´Hôâ‘6®þørqæß‘î襵uÿÞà(¶ÙnuÉ™yZ¡P“—É‘ ÏÄÑ’Nï‰Lô9Oëžôîë<iøæi†ñÛùFŽGßf¯LªkOÞ&UûuOGÜàaËG»,±¢ßx"½Ž6+Ñ×öäh¢'_);鬰ÞüTX?ëåuU çÖ¯¿¾ûT&qì)òÎ^¨óß•û½{*m&Q~A:}Û4ÇK´S/(ƒóÝHf%í6·\ÒäÕkl7}Wº½CN÷¿ÉÔÕW«{_î›úÔõýAóƒ âºóå˜Ì[{ð“¼IüVuîÄT¶ùFÊv»´Nt¶ý{ *Ï÷ï?Vؤښõ½šnck>®Â꟪üäÔE¥²v"Ù_çÚ£øÇ“—éœ9{ï¼û&ͲœFÏ—á¨4_\,ßëhuä¼J¤°Çt\d¤ûŸRe¹|/(¯OZ†§s¶n]õ¡sáÇm*ûž7åu:\ÖcX®¦oõái—Ñ.sïÝþ´y®/Õ?–¾[5Ï;^˜ÍJ¿ÉTßãþ^ˆûŠT8:žñ…,²úÔé«ÔµŠ•x|öåŸ=¶iòó�MG÷+U¸E¯;,ÛIëG™û-708»h+¬­YOgç®ôÆoÝÅŽØ&Z‡c_ŽL„£:ÉËq_uŒ~� Ïe:úÊ^ëE¼‰WwÊ~{'“Ážì´ú2¾Tª„ì�ŠŽVo¬ºyg?êsßù¶zÿ]uàOëP¢ '@ŒMÿW2š¾WÉÒö¦û«šÂ ~›·ÖÒFÜ•ár°Nbü·÷et~éâP‚Zçåç37צÃ*ªŸuóš&·~ßuâêÀ׉tzЛ Õä¡+Ã3õËç)S¤jlýyˆÁ ™@«¬œ¿V¹èö‘$¯^?˜ã:ÿwÌ{a=ëriiûd›t%T=ê‰@¢½Põmݵ1…µÉö÷‘>ÿP‰‘Ô=¥°iÓñé|¿-©…OÇð…º/|:Ò‰eÛ²ùõùs÷˜é#æêoÕ~L¸¶,Ãô'ë¢zY«Úpƒ~ȆåïeWPY÷î–6î^Ä¿wáxAxeÛk¢Ìóú#›°dSéN—eü^_Å—è“Rá­SïWýúëãߦÞÛÁÄHççÙË|‡Åß»©r 'ŠéðSؼdõ…oeÜûÂýmÛŸ1Í=^’×¾í½æüš2ü“­U&É: Ç-u_ø÷ùqu^[Ô?]¾*Ûòò�Ÿºo¨Â- |ßY%‡gè2;þÌp–~ÃAÁž§þtzýJ¨ó¿b¢óÞŠ=øÿ9èCgÂZj$Tƒ³šX ~°+CUHåmåw—¶tzRƒ}nXæwvý$&V¡ËËkŠâúu×{ñ˜¨#=¨ÝMˆ¸¤ Jaê+œzAµ<Vx½båüµËÅzÏ$Uö™iJùQlÛLO[>ñ1ÓÆ¼òy÷âOùí?\­ždŠêÄ…¦#ÖÄo×.+¼<™.‡ÄïµÊzµMÚ°²ú…pâºT}8Òi´m.ý{Ù^òã ûëWÓ­<$˶¨ORõ±’¾uꢰ5¾îÝd^ ܃osÚ”µ¯OLÀÜ%>¶~ ¿®_èå4±VÞñâ´üÙôOˉe’Œ:‰I[ÉOê|Yÿd®O÷5ey€Ï=.Uaë¾”ò:Ø… þY4 ¦;ëu~pÞ˜´«ë ²…K™F}³Ò™xœ…6E8y?FŒT^“¸8¯;xg–«ûmþ^'¯IŠë×]Ÿ%&ݪb˜ßy.Spe_¯Y9írÉ §^3ÓdÂóžUΩöê¿)K-èû2xø¥oN¥ßNŠd ê$kB—Nkâw:¬U³‰œœÙòiZ«¬WÓhÃÊêôªªò[q÷–•º2í+ý;Ý޲⠧ʽ¨l‹ú$æJúÖ©‹Âzt«ø—Jï…¢9$ëZ'´ãø3ý¤È¼g2ŸFI•ßê6çxIZÞ¤ê$IFèôÉs9ö¦6þÜJ<ÉkWêFÖ§¹>Ý×”å�>ô}_…-ø‰B… þ™ì¬ío/.Óu:½)Á´2˜+`l¼ Š˜¬AÁ¡¬ÈŠ™ÄŠ’Ã>¶Ý“Þ(’ñ«ÓDÞÒyMââÌ3•I_›ù;»~¼ßµóê(®_w}–˜ü`WmÃrÊ$öIARÚcyf«¬œ¿v¹$)ª×Ì4¹°—uíŸÐ„¥ôŠìruýôl$ª®Lþ¿û½ƒS K2 ur•\16¤Óšøá?Æ™÷tz2Š~”W㇉rH¤i²Îj“6¬t¿ ;_db°RW×øyíq5ÝÊC²lóú$wÍJú*×…¢°=>ŒC5yÜV£Sø'.áÄÉ ¶¥Í Ia_hÐB[¿“ Ä"O©ãþikNZì=®¬‡¤êĘ÷ìI§÷X¢ñDÆá¹•ü$¯-íŸÌõ龦jž ÉlÀw6YOÂ| õÛÞÖZý›Ÿ?‘þQ† É gÙ ÚÎuÖós‰zÚÖR¯ êAöOI“†•Ïýö®LÓ6ø^¨z¿wœ-²º\¿hÕª·’š¨‡þe8÷¸uEà»Á¥ÇÚ`ª¼=|*φÏÝ Ÿzbð\^Œä$%H¼)Ìò¥;ýÂáC9ÒyI•“<â°^=ϯŸu󚦰~Ýõñà†çãõ¶àÞvV×g(tÞ&6ek»…©GâÄíçôLN¾{.ÎjoUÊE{öÕëÿs“¦@”iÒõ¥ð×%mxï&'N溶Ͷ||Ùg•WŒ/Ÿ†¢:Q¾P±O¡ÞÇ6øúÉ”)—TÚ½ý´½tx:¾Çrôêï]Ô÷·‹ïÈÃã'2<ñ_Çrú·UÊZ³,ïÓW¿“ïNþ(6ùóeàókÞ7 VÛ½6ý{Ù^Šû£©ðÒéVõšn¦OÊkí»j]輦ãÊëoœ¿„`^Á×§ª¯ð‘p"åÂÉZè(¾gžJ4ìÅ}‰É³ñw)“Ìãþ]‰œ´ø~#x‰W.”aØ?¹¶Ÿ¨O]û?{,'æ©nX^ªÿ ®-íŸLy¤û_ª<2ó–[�Ð nWà»ÁÀ^Ú­®DÄÇŸ=KþVþ_Õ‚.k á„»ÍèûEô@ÚfÇ„©œéÃøU®ý­DÏôj}Îo7�'vœHï¼°¿Â¨Þág;0ùp|ç~õ{9úî™»>±OŒŸDèkuœÈè¾ âÇM â*¸â]O”óéMÕ0‚°¾$½²r]'¯dׯÄýõÝ‘D‰ß‘òÄ«Æïß7õ9O3ò¯Hˆ(/Buù§3.l¾½j‰1AГ5¿´«†Öÿ:åR½^ÐíÓ§Ç ìÌúrá„éýÄÇœó¤Å¹›„ˆ1+Z–ñ%\V$Ú™o?*-£±Lß©ò[I{ª]Æí7ØñF·ÕÓ‘ÜÅgXFU)k*'󢤾ώä¥y2àã>gÑ·‰ßÑì/Ù÷ Í“,'UWÑȈíìßeý‘*Åtx“ËDºÏ³ÊÒ/:tï¹I•*K7áYIßOãêuQÖG$ú}üË¥Í%4KT.4+qŸ­‡°ó(ê U¿sôX¢cv¼p ú“Ìãš‚´(’ý“+ÿ¹š0¤û·w¾>uû;’ÓѯT{t;é$ÊëÛÕýðZ½¼þ©tl{•ŸgOAß �õG÷UØŒÀ�€Í²b¢sèI¤{B���ÐdÜ ~ùêùæÐæ2UÞ…��€›��ÐTf-Ÿzß¿oRd��›�����Ð ø����� ����àøùçŸÝ_õ����àКö7¿ùM­…>����À¡5­wuú|�����G(𽫛Ð×i®_~90ü|ºÿ2 k˯ˆB)‹™LŽzÒY㫊á×7ãO¶ÛÁ—Ý^���ÖÀë¹,W¡¯ÓZ~@,0;C™èO†Û£2‹oõc2õá­Œ¿ùÞú¸,×þlºŸTµ¤38 >‰ÿF¢n—/f��\ƒPÌâòݶ }Æ* ð´(½s¯+÷Z¡¸ÔÿW·ü9ø:°ùd¬Øër;¸¦ÀÿRîu¿”ÖΞ &ïÜq-ð%Ñl­À���@ŠX\¹›N§®ä¶ ¶* ð´À¿;x!oƤ³sGö£×J¶6EàÙÙ#é¶tÃÕ_ ŒdúîliúÒ}&-Èõß^”Ï_ʨ{ÇSåѽ´“žù¹D½]{¼Õ•áÙ…\ž¹°µ;PBüýRà¿LlLØKÓ§U³'}®+ƒ³s÷U±É���®Õ(ùî¿ø…DQÄ ~Ó°_ ÎwJdî)q¹/£óŸ!ð‘ì·u~.•†V¾ӶfGNÄ·öŸÊÙé@zƒdjÌ“r9îKËr÷iúÝ‘LoeÜûB:ýS™-.å|´/­n$³•ûÔïŹŒv¿ŒWäÓ#9È4{r_ÛÙ›t¶TøGr>À��€kŠùÐyaÿ׿þÕùÜ^tz«€ÀX |ÅB Êý;²Óy(Ñè°æ߉õ 1g„¹Â i+àÍ1‹ÙDNF=éhÿñj|Ö‹®%ß§ÁÄ¡' ßäØÓ_a&&Æd꩚ˆ ð��àz$4ruöî* ð_aÅ¥níš |'¶[}_®®™/f§òÍý}¹× Ìp” 76õ-%¶£Ÿdrìĺøw¥7~k|-)ø 3‘øR§Ï¤··:™°$¾6-ºˆÝäD›þ ð��`}ê,ì=üµ±+Ìw6áNäÖ^àûÉŠðÃ23Âú­ü¨„ûŸ•¸ïw¿“ÉüJæÆŽÞ‹|k'o·«t&KF¬k»²Óy ã™¶WåöãïäÇ˱ ?{õƒœLßY³žPà‹3õ‰ßoÈB‡ÿUê ‹���×ä—¿ü¥¼xñ¢–ÂÞƒÀ_ ·Ú¬òjœ7]1h;óC%H›ô’­r¾DÓÿ+Q·­~k“›™ô¶ ô„æŸÜäFûíÉãAWZ;»Ò‹ÎåröB†ñË·ö˜–ã±9MÿTÞœ-÷´O”çåXzíì' öEZŸ† ÌÍ»÷ø���×@?­ïksÜ`ܾ‹éHözc¥Žê‹Îî×(æ}K››Äñ ³åm@§­ |ø´(ßï×»c���¨f£‹»öé¹^hke™ÚVdñZ&¿¯Ï—_sYLåx¿cM€Ãï©ã''Ó+ƒÛ[ˆ6µé^¿S��€µ±+ÓNԱߒ֚«ð‰ÕmçÖ c«ÐB>:•S½%·Î‹ÿ‚> *Înÿ# ��Àºø÷ß’ÿZ&(ó©œJÿáPŽ&³­Á•ðBÞï$è¿÷ƒÀ���€í&Gàç쬗 G¯Ú¿Ó«ùk_¿eB~¹kâž Î~Bà���À6sƒ+øM"±RïwMT"¿Õ‘ýc>����l17aƒß8VLqÜ×ùwZöKÿîè¶À¿ós‰zîe‹î#93û¼WäJ�ʽxÒ:”èÂ_k÷“7Ç•k'öÙ‡›B¤ÌoË¿(cO,ëÅlÊ���ð™aD½ÛEÇØœaž>従cι¯øÛqÔ}h2¡iD–­½Éÿ]~³°S ?씊‰…f¸å’Ùgÿp«Ìv¡?:6”áÚbÜO¦ZÒœ/óêýõ»2š¾w¿��>/òöÁÿ~á~÷ó‰E˜è4‡ô¾°³Hº;_­- µÀ¿s¯+÷ôŸb‘©þ¯jÿ5ÜO†Y]ؽÆj»ø_ʽî—ÒÒ/ÊLÞ¹ãZàÿŠd��@­A௉Í,E 1íE´À¿;x!oƤ³ãfÄÛ ð̈́śª„³Öð ·jRÒ‹d:/³I$%”FÇjÆǤ}~Á¶Õ•áYz‹¬å—hµ)Ò{ÿ4£=‰*ÖÅìLŽzJ€¹U·%•»Ú`¾Xë¿’ë¾f»˜ÉÙPIWS× _È,sj­~Wgç2ÖûÚÆ«|���¨?ZUï°¦5iïæX¯íì­™ýòÏ[ ðŸËÐL6” ×“÷ifóh®í>ÓlVÎÛ²ûýcyèìÖc3%c¿·'ýñ… ýˆ’õØÎ½¼cß5Л'ð—âß?ú3éÈzJb&#Þ^^¿ýO:ýS%ê2??R“?qJã¾¾ÎíkÛêÉùü5���jMnvß½HëlÙv:%Þ®À7x¼ë„º¶uﻕñÀu#™%D¶+·oh!¿|Ig‰òþeb3qò×¥'My“¨0nOh®³Ü‡wõíÿ@à+¬]¡6•z*#>���Ôþº¤lð­à¿ž ~,ðË'¬ÿ4àÆq+ôÉw$óc)o„zŸòøF¼[óŸaÜ+-›æ*_Ľ d&.Áä ��� † ð׿&vѱ+âw¯Ù'ܲÀO¼¯¼•ñ7ßËÙkûöüÒ®ý­üý$6œ¥À'¡©L;ë+vVྸ°¶ðZ`k{ÿZ¬§Lt²Ì|¼À?›ÈÉÉOr¦M:d¬·-56ú»9OVTžz__ãL¥ø���Psø×!wüpU:´+W§âÕæwö¸³Úi3{±BÛ¬Êþ­ |ÿ;—6ïV^²U®Ó—èÕ©âÖŸÆJÔO#é™—c¿iÖ'2‚Us%ʈÈîPNµ_³ß’N÷žûZ\Ö‹ºŠØ´É‹úe½¤·÷ZbëÈúIM¦Ì¤à>���jÖ9U@àç#Ïæ����JAàÃöáVðùà���Àú ðaËMhÛ~����¨���� A ð�������� A ð����ÿ:ä&櫸ë���� þÚÜÄ—lõN1w¤ÓûVz»ûòðaWZþƒX�����]̪û]éßÚßæ µ×Y…Ÿ«ÉAÇ”[òk¶�����׿&‹éHvw$š¹åvóQ¦@ðWb‹WðÍ„EïA¸Ý‘LdvöHº-}¬¥ÒÉtþ^f“HÝ/åat,ýÎûõÙÅLΆ*OæzuløBfYO8rü-f‰]¹óðX~èï¦&@*‰8[êÚ]é_ɫѾ «Õ=’ó¹p1{!CUÖ&­® Ïf²X C§û3òÇg¶��� ~TÕå|ÇÕd íß¶Âv]¶Ñö\†Ñk+‚ǤÓÚ—Ñù¥,."ÙoÛ¿e~&ƒN[v¿,ÛZ+Q›)½—éèžtú§J¬/d~~¤DóÙ7a†äù{)gþÉFëP¢‹Ôû ¦¼××^½–h_ xŸN3sÈZœËhwO‰ÿ ÷¥œë €óõ Æ2Ý™ùãKº���PCøkr3+øÛŽÜze\‹c%Ç}·Ò8½²nVüƒ/ÎQ½|V ù¯¤Õ+‰PèÏ~Ͷ=˜HæCDœÎÔɯòçL]…OFLœ_غJ„Q?{%���@mÐ:¦ |OÊß þ†í„ãV°;ƒ3%Ÿ5WJÈN«/ãËÔšvZà¯Lxìµ+¿ÐßÍ|ó´%‘fn'Càä��� f ð׿&vÑÙbÖäe™§·2þæ{9{É~+´§+?F?ÉŸC“ƒ-“ÎëíCç/eÔÝ „¼§ÀŸYioå |;©ò“'ðÍ{ê§î¨„f@m+â¦<:Lm¢“‘¿Ä¤���  ð¯Cî>øáʳ[ö&"é•î­ÄšÉè|%ÜÊK¶Êuú½:mÙwB³¥ |ô °½èÜ= H‘é/Ø]h'ã݆Ø_»=évﺿw¤ýí@¾Ïé²¾”ù4’žyWÓiž*Éžç;#Ú/���@ÍÐZ¦ |����€€À����h|����€À����h|����€À����h|����€q#_‚Ãáp8‡Ãá¶Ç•Á >����@ ¨ªËø�����5�����Ð ø����� ����Ð ø����� ����Ð ¶_à/f2‰ÒmH4»rC®dÈN7’™;²}¼‘¨Û–ö`¢Rû1\Êt<’^gW“¹;¶ó©ŒG=é´2ù¸„l YÛ„jçgî´Ô}´³³+½è\*å¨ôþPÌ"éîœ��€FqËÿƒÌ&‘ ºwÌõÆuz2O¸YÈå¸ïDÏ6 Ÿ®¯d4}ïŽmžÅt$»¦,:×´s™ :¶Œ"ð?®<¶‰rJ{?’‹« ÷wegw$Ó…;˶Þ;±ïíеº2ˆ&2+ÍãG¢'@'Õ$°åâ¾#ÝÁr>9’~ôÆy��hzÌ«Âþ¥œö•8 W+/ez:”n«%þ©üÝ ý'0‹‹H‡UVÙßʸwW¥I¥spVm¥õ†¸š ¤}mAëD~~ºŽ>®<¶…y³÷GÈ{™Ž¾J¦o>•Ó~ZÑ’Ýѹš¦lˆùKéÅ=™8õ‹ËE…¢��°Ü’À_È|2”Næ�oW3[;wd?z­Î}"ãÄ@•A_¯ïõžÈ±ù­¾Œ/7½ ¹ä³øuÔ5‘A{g»þ÷G’œô¹<oδîjë{*Þ=Õ6Þ¹cK®7Y��¨·$ðý xމËåXz-5ø3/îÉàX¯î»ÇìÃv…?î|1;“£Þ®I“±g>:sOÔÄbúC`äžø•>sL»"±¤W$¤7þgqWýýÖËBÇ9–‘JGþ÷—Ò=þiiwÝÊdî' þI†KO§/ÑôÒœ ­ý{™ÞôoChÛÝ9”žÎ§/+m¾p¤ÊÎ\Ó’Žš´LfÜe§Ò7f »Ò?~,ý1”YÖœx3ÇTZ/A—®‡ð‰"^áuçz‘Lÿô2ëhYï\;qç]3Ë$&£=ø¶âÛU÷©LιºÅ¢^ ~²4ýèôäh¢s–Eº>¿Æ>Þ7.k²RÎX@çÜYï)Ô{õ²ÿ‹ÌÆloäxô­ 3'YYß?½ó“ø,ŠòìótWº½C›†ôD!ч¸c�� gÙOãêâ6EÕ°oVàûÕ»¼•äÄy/”Ð_¨aß‹-¬ß¸ÇÿAX‹×íw¤;z)s-ÂŒ±"\¯Úí·¼¨p+|þºª«¨ó3%:¾³b܉ˆVo¬R•ƒÏ‹J£ {q.£]/ ­p·éjKר»'­C‰.”èÒñ)éÓ |-‚ì$˧ôo›ÇV÷‘œ)‹v“gg÷Ý=’s•ÎæEOÀ¾pOWlîe•KAYÇæ2¾ø£Œû{V,šIŒ{’`D™bã&{&Ì;ÒÒöè %òÌ“—ߌ:J—‡õ q—ƒì‰¤)[%éW¢vð£L|»ÒÂRO]º¼4uÖޗѹªù…³›Ï|šãÒÔJù ÓXÖörÓ©ÍÊîÕæWÞS(¨÷uÊÞ´}_g:Oû.ü4>}ö]á}Sçwñ¤-‚àó]�@ÃÐ}+Ô‡MÖWÕ°·@à+€N$ÛÁ;iv²4I×ü½¼Ò¢-oE¯Ld´€þFöb³"÷$¢ÌL'¶ùí½ÿíΛ¼µsm““‚Öÿ^–Mâ·aᆠ¬>Йr´ùju‡rêžd‘_Ö.Ÿnr²²BŸ"Ì“ 3çÉNF¥ËÃ׉©*Jˆô³DžkW‰º ëó2˜„hÂvæíÊÓyÓá±öõ ¡™ž¶½²t*ñ[x¤Ê(œ`†NåëìÕeoò`_Xµ“¶<2î_ÿtDÅëë)IYžõžÄžÏ+S�€f¢ûs¨›¬¯ªa߬À÷ƒõZ&:@ð»sñ•øv`Ï 7\5ΠPd9ü*®ÊkÒ…":ƒtØæwŽÀOŸK‘6öw¶ÀOûMˆÔ÷:ž¼—µyD˜Ÿ,M„BòËÚãŸ(d üÅl"'Çz‹G]†6éü$Ȩ£Õ<†«ø3gN•U7Évc Ûš~ú¶—пû»ŠùGFš“íW‘éÇS–Î÷%÷GªŒL\Ùõ¾^Ù_Ê4ê‘›òd ý¬ûWãû€°î<eyÎjÛ)}ˆ;�Ðpô˜ õa“õU5ìøð[Ù…¦ÂK¶‰U֣{·êšX (Y½º¼—~äïWD‹„D:ló»h¹úš&-lÒ¢Ìþ¶¢Û®†ç¬àŸ·‚êù°ÜÆ4£ÜòËÚbÌ?vetü­‚wœ¹…Æ™\è-Q£åÕøaœ§Õ4dÔQº< ¾ ï?”‡{ßd×w¼»K8AqÇL]º²*øÞŒªˆ¬ö‘h¿ŠÂ¶W–βû#UF.®¬z_·ì ñ>üyæ0×øeyNå)~öK¶úéÒpðcæ=�PWøõ¢_ãw¹H½<—»MfÊÆ8WI ªVW†gúEF58"ý£s¹2¶îaØz¢ñXŽ´ˆð§÷\^Œä$-ÜŒM¹JëŠøñbħ/·š‹#ó;XEMœ÷œ0<%V†Ï”°ñ£¥³BÇýžŸK¿ðªÕ…J³. oë¿8«W6¿“èouºÃ–•ÿþS+n‡½¸üLœY£¢²6âþÀڧ󗵄þ\G?‘¡üæ)‰¶Ý÷/~^þ(Cæò:_GïWÊòœ@f­T{ì»*¼„=ú]7aq1æî·kgV ëkíû ºížÚ¶”`9aMØ“‡“Wÿy“ºât–Ýi1ìÛkF½_¹'TUÊþõ ø¼Û²ÉN¿/øÁêâåò%Åyöõ[$ðU¾½'öÜ×O§~Ao°Ì#�@Cؤ`„›g“õU5ì |ß Ã‰Níºòxá¯ýhs€`×/ðƒÒÅL‰ÌÝ7”¸ŠwDÑ.\UöŽð˜Ã‰{M(*¼¸òç”K›�%®U"þÛ|ÿnK÷Ù³à¼[Õw¾Ñν i…š÷ëÒì�¤Åæ‹è´ƒ]Z²Ð6õ{U~#k“›D<a¹ª2=z,ѱa±€_%»¬‰ˆ:f&-‰2Ðyü¿îEPõ[§õt$÷ƒ‰W2Ì¥ÈK×Ñ»¬òðûÿ{æC-öS$~óMצ|ØÝ‘D‰ßºŽSm)Üg…МEû LžVvÑI¯tkòÒé)º?¼ÀVÃsë½zÙϯ~/Gß=“c7¡\NtB–í`Õ­¦3I~ž3ïƒ<{ë_¥e”OI8��5@÷sP6Y_UÃÞÀ¿ œK kø¼Ñ«â{YÌgŒ°Y��hüzÀ/D›ø-4Ú,¦'9ï|^8s–ð���h$üzÀÏÀÛ@ÛGýy;xÀg…' a–õ™—…ºGrvA�€fÀ¯|����(-V/ø����PZ¬^ ð��� ´X½@à���@!Òb©mÆW]ýß·ÓùØUÃFà���l1ÍÓbþc‰ZÐûﹸ:šcÅ´Üvø����PHó´˜ûмóávÏÁG"ó¾_6Y_UÃFà���l1Óbú£•î‹ñK!¯¿usèVðïJoüÖ­#|����(¤YZÌ}¨1ò‹™LŽzÒÑÇZ]œNeî|×>���À–sÛZ¨YZ,0ÏI¸;²ß/Õo²¾ª†]êk“‰���Øv–"ôö\cÈ0ÏYÌ^Ȱ{GkI§Ét^o™¿Éúª6��� €ÛÖBMÒb‹éHvU~ÒvöËãõÞAGƒÀ��øDèñ W/·-ÜvZ¶©,>Ž`{ÌV_Æ—ŒVöwº‘ÌÜá:²Éúªv©¯æ4*��øœa<«ÛT_·–Æ´ÝŹŒv[&?‰í1Ëüzo‘©Ùd}U »ÔWc��|Ö0žÕ‹mª¯ÛNKSÚn®ÎâµDûÚ_Ÿ«÷™šMÖWÕ°K}5¥Q�Àç ãY½Ø¦úºí´4¢í..dÜß5yY~½VžÉQÏoI§*³z¿c»Ñúªv©¯F4*��øìa<«ÛT_·–z·Ýpßû<§wÏy,ѸÞûß{tž6EÕ°K}m2‘���Ÿ Ƴz±MõuÛi¡íÖ‹MÖWÕ°K}Ѩ��  0žÕ‹mª¯ÛN m·^l²¾ª†]ê‹F��M€ñ¬^lS}ÝvZh»õb“õU5ìR_4*��hŒgõb›êë¶ÓBÛ­›¬¯ªa—ú¢Q�@`<«ÛT_·Ún½Ød}U »Ô ��š�ãY½Ø¦úºí´ÐvëÅ&ë«jØ¥¾hT��Ð>›ñlþRFƒçµþÔ¿f›êë¶Ó‚«›¬¯ªa—ú¢Q�@ø,Æ3ÿEÐn„À¿An;-h±z±Éúªv©/��4ægïd2Ø3ùlõÆréŽÖ•uëk:Ê?ÿó?»_7Ëm·?®^nST »Ô×& ��ð©höxv)ç£ýøk¡íÁD®Ü™ºRµ¾´°ÿúë¯ÿ¿û»¿sGo´l UÛb©/5��4æŽgd6Hÿñ#¹ßú|¾ö¿øÅ/ä7¿ùñÿ׿þÕ½YÐB°-Tm‹¥¾hÔ��К9ž-d~þLG/e>‹¤«ò¨óÙd û(ŠŒ¨×ÿk‘¿)ÐB°-Tm‹¥¾hÔ��К8ž-.N¤ÿÍ©ÌêGÃ~–°÷üú׿–/^¸_7Z¶…ªm±Ô��š@ãÆ³ù™ {Oä|®Õ½"ø-Ù‹;Z[|} {Ï/ù˽`«A Á¶€À��hÔx¦÷ºïÞ1yZuméFoœÇú¢ó¢Wæ‹„½GûÝ$› *UÛb©/5��4ÆŒg‹ ó­DÜG¼‚_ÿ‡?üÁÔ—øe/ÎþüóÏÆï¦À6Pµ-"ð�à³ ã™Þó 'ïÜï%W“´­¿À×¢^×—^½×æ9ÚL§ˆM×-Z¶…ªm±Ô��š@ÝdzÅìLŽz{9öõä":tûà7Ç_ }mžS&ôõy½’¿)ÐB°- ð��ê;ž-ärÜ?bµ²B9–žÛÿ>tußIGçÁS&ôõ1vÑϪm±Ô��š�ãY½Èª/-ôµ×»æ„B_‹ÿßþö·æïM@Ûm��ÀxV/ÊêË ýÿøÿ£÷zuSÐv`[@à��0žÕ‹ªõå…¾ö¯wßٴت¶ÅR_4j��hŒgõbÝúÒB¿l·ëBÛm��ÀxV/¶©¾h;°- ð��ÏꉎW/·)ª†]êk“‰��øT0žÕ‹mª¯ÛN m·^l²¾ª†]ê‹F��M€ñ¬^lS}ÝvZh»õb“õU5ìR_4*��hŒgõb›êë¶ÓBÛ­›¬¯ªa—ú¢Q�@`<«ÛT_·Ún½Ød}U »Ô ��š€ÏpõrÛÂm§e›ÊÊÙd}U »Ô ���>gø°|���€-ë€À���Ørø°|���€-ë€À���Ørø°|���€-ë€À���Ørø°|���€-ë€À���Ørø›c1›ÈIôXz–ÉçÎNK:½ÇE‘D£ï%š¾w>ëÃ&ë«jØ¥¾šÜ¨����ʸm-ÔH-6ŸÊé +-•·NOFã©Ì͉…:YÁßÈäʬ|���€-³,f§Òw+ö­î‘œÏîÌ’Åt${½±\ºßub“õU5ìR_MkT����ëpÛZ¨QZl~&oŽÓ:”èâƒ;‘âêÿHô»7îG½Ød}U »ÔW£���ÀL§S£…¾þúë[sÍÑbïd2Ø3ùÙÙ¹#ûÑkY]»¯?›¬¯ªa#ð��� ÐZH ýÛrÑb—céµ´¸×«÷}_6QÞ#ð��� „fh±…Ò÷}ûR­r­šÚ×W����…4C‹½—éè+“—»Ò¿uÇ›���� i†›ËdÐ1yÙÙéÈ`b7Ål"|����(¤Z,4Ñaÿº ð���@c´X¼EfK:ƒ3÷a«‹™L~7‘Yß¿Eà���@!ÍÑb ™ŸI×ì¤sGºƒdäêR¦ãcžÇê ���� iš[Ì&r2êIGåKçM»Vw Çãiöª~ÍØd}U ���°Å Åê���� A‹Õ >����‚«|����(-V/ø����PZ¬^ ð��� ´X½@à���@!h±zÀ���€B´ÃÕËmŠªa#ð����j����� A ð�������� A ð�������� A ð�������� A܈À×àp8‡Ãáp¸íqe°<����Ð ø����� ����Ð ø����� ����Ð ø����� ����Ð ø����� ����ÐDþ?„úŽÃ€Ÿ����IEND®B`‚���������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7aa.png�������������������������������������������0000664�0000000�0000000�00000041425�15030617045�0022704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��½��±���o>���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��BªIDATx^íÝÁkÉÚïqÿZk›]˜ÍYiåï»™MZ˜^d1…@‹/YaÃh0pBƒ9—Á\q69\ âåðƒ!#ôr†`Ì™ŒxnUwUw«K‰»Û]r¹çû&iÉ–[õHªŸËÕÕ{���t¡���Gè��@çz��Ðy„^���t¡���Gè��@çz��Ðy„^���t¡���W)ôîíí±5Ø���†Ê¡õÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐë m��B¯'´��@8½žÐf���á ôzB›��„ƒÐëÉ­Íôóe«¿�€Ý ôzòGk3^#õÑf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=iµÍ®2‹F2èOd~mn[Å2ÜÈd~enhßo¿ý–lUð©6�`w ½×*Ë%?/ÝT¨{oîS’ gïSÛ0–•¹k½šË©†ö¾ÞP&gÿy4‘xe“âîèchÇ•Ì'ƒô9Cï,‹äç~óÍ77†ßÏ?ߦuý(«ùÿ–h´ŸÝ×NåìâÿJ4>Íj_éç��v#°Ð›»žO¤¯ƒÎàXf«æVíW™d4ûÕì¯åêâD†=ˆ—ææ•Ì㉺Ýïhè§´Ûf&øÞQèµÛçÂoÕç[½®—rJoï '?Êâjܪ¹‰'Céí¸-|h÷5��>'àÐ;•ƒ'OL˜=‘ zÒ�8̃ìÕ¹L=¢¦2ϾÆú(ËøX¦„ÞFÊ¡×nÛ¯¾½ŠjuU¿È¨¯ìõd09W÷”¬ßJüø¡��Tpè}.Gñ?Uh},½ð³Ž.gãäþýèBí…ãÖm¶^Éùt¨ž›},£áƒBè½”Å,’Ñ`ß´C¾ÿ,þA¦úku›Ïd¹|cö‹!ó£¬fÇéTÁ×ò:zºõƒO…^»ïޯ¢Z]õ¨ïCõ˜_J´øÜÛØÕBÎôȰ=îl„Ù¶ÙCާm1ü_òœÛþ¢ÚáG™˜6´íºZ—¦l˜Úd#Ù{G7N«©Úf��àö½ïÔÿÞ«0t ŽáÆoõ`!}Eô¥ºïaáÏâaÈÂP-—>çÞð…œ«€¶^ÉXf;Á*º±^D²o# ¶òP9ŠequmFNM;]ÎdÔ3r½”ÙøÐ´gª|\7m:üꫨT×õ…DûêùöÆ2»¼Ý¯2i[¥t½Œå°—þ‚ô1kCûó‹íšß–²'óŒõ_t»Ú0nG¤‹s”u`?ªÖ«¶��¸½{zýçìÃ*Jt±,„^H<¯bÐÄ­Ú, ¥Å ožgazCÐòç]ÞOO+ï÷e¨Û4yü͹²ÛÜ4Òk·f¡WùT]¯ç2é«Çn{:‡yÜþd.úa6S¶ÝVäÞŸŽJ÷cYª¦ÔÁúh<3³ü³ª¶��¸½ûz•l´s0–Éè‘ ÝœÞà«–C¯þÓ~<Nÿ|Ÿ»­çozÃMumqzƒ¦Oj<}™MQhz“ÕA^ë#õs/Þ_í]É":ªüW‡ªm��nïÞ„Þ<\”BG2j©nÛz"›þžïdrSnÓfét#½V¶ÂÅžôFî褟ÙªÔ5ÿefë‰lzjÄôE¥©i¨>QËìç³#½fþó`$Qü7ùyöÌ Åf:FïÉ3yvðuå)UÛ ��Ü^ ¡WÏüJöÀcçTn %ê{ÉÄó•ŠLÚ¥,ΞËèk}ÒQrÃNݪÍìœÖÁXâÅe>ªƒá~$‹µ …å˜årpN÷͈øõ\¦Gé|áìÏóBï¶°kU{¾5êšÌ5Öëóêi±Ìíòfɉicùz¶4uþóË‚™œÎéU¡÷ÙKy5ý«\l´¡VnWÅL‰HÛ'?Îg¯¿—é© ïÍþâP­Í��@ ½ï$ö“Ÿ™låy[N¼Ò¡ãj1Û¸ˆArqŠx~'W»m›­WÅU¦òÝh ƒQ$3‚ÓÑHó<U�{:mìOâHò‹=”÷û2|õZNž¿’צ½ì se6ô~.ìZúë>¯I]í &ð«m󛛨ׅYÃyoo_F'§=y˜¬àðc|¼Ùfêç–Û5=»^°ºm0’“³Hžôì éOI$Kç=ª5Cÿ��°†ÞnèB›ýþûï7†]ëÿÑÓlô(¼Ù¯€÷��»CèõäÖfì׈žö0’£l™³jx_�°;„^O½þmNGز%këzdç^'S'ÎkO¥ÑÇ��vƒÐëÉ­ÍxÔG›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^O½¸ m�Àîz=!ôâ&´��»Cèõ„Ћ›Ðf��ì¡×B/nB›�°;„^Oþˆ¡—­þ��vƒÐë mê���4B¯'´Y¨��нžÐfa ��@#ôzB›…:���Ðë mê���4B¯'´Y¨��нžÐfa ��@#ôzB›…:���Ðë mê���4B¯'´Y¨��нžÐfa ��@#ôzB›…:���Ðë mêÐŒn·P6��Ú@èõ„6 uh&”v£~�€¶TêQèxê£ÍÂ@š!ô�º¦RBÇSmêÐ ¡�Ð5•z:žúh³0P‡f½�€®©Ô£ÐñÔG›…:4Cè�tM¥…ާ>Ú, Ô¡B/� k*õ(t<õÑfa Íz�]S©G¡ã©6 uh†Ð �èšJ= O}´Y¨C3„^�@×TêQèxê£ÍÂ@š!ô�º¦RBÇSm†pê°–«ÅL¢Ñ¾ô's¹6·†ŠÐ �èšJ= O}´Y‚©ÃúB¢ý^r<wzß¼y“lU„Òn¼��m©Ô£ÐñÔG›…!¨:\ÏeÒ¿»ÐÇqÒÿñÿqcø ¥Ýx�ÚR©G¡ã©6 CPu$ôÚísá7”v ª~�€{­RBÇSm†vëp%óÉ yÌdƲ*Þ6ü‹,?ÊdøÀ|MOã3Y­Í·Bï‡ùDúÉ×I¼ºVwmîkëÕ¹œŒöÍcíËèä<}¬õRfc}»~ü‰ÆßʼBŠ.‡^»m ¿úö„r�€û¯RBÇSm†öëð^…ÜÙëOò ¹¾“¯Oe¹68 Ãe?–ÞÞ—->¤_·1Ò»–ËÙXÝoCniýVâà £ŸT¬þ(«Ù± öÊhöÿÒ¯Ûd¡ðzu&ãƒé­B¯ÝŠáWï‡ ”ã��Ü•z:žúh³0è:´±­—±öò0»^¼’éì×äÿEéèí@&ó+{ÃÆô†ôþ|d·¸¿^D²¿å8ú“sùM‡ÞÞP&g ˆ]åï©»éð«ÿ A(Çv_glÕ7„i[­Øn¿ùTéÑ}DÑf]ö«ÌF¥7šÉ¥ù¾Ù¥Ã G_çrúz"Þ~7 ½éÿ £ÄEW§=Ä[ÃoÙM#½zûæ›oä·ß~Kþ‚PŽí žõÑfá¢6íóݦ•ÂÖG›u™™ŠÐËìÝ™ŒÇ:üjfÂ`$Qü7ùyöL׺¡7 ºéÿÈaüVý´ít¸Ž'Cé%ÓÜ‘æ²Ï…^v-}[B9´ƒzÖG›…«óµYÅ2,öa;à»M+=:oºúh³Ž»œÉ¨×“? þSÆ6pšP›Ž�Û9½yöú{™ž¾3ßcï·!×ÖÑ[„—?¥ëúö†2=_©à»V_ò½ŒO.äãü…Mߤ'µ%Ù<ô–î¥ï A(ÇvPÏúh³pU«ÍµÊŽGÉ×¦Û ‘ïÍ}J, ŸËÉ9!©ä¯†ÑHö¾dZÛ?dM²Á’®ÑÏÓ§Jîû ºˆ6ë:sB›íͦ6\ÊEt¨‚®úpŒää,’'*'+8|LqòÁ¥¶d´÷J[³ÒCoøBÞÄÇÒ×ß7×!Wདi¶D¾zÃõü¥<¿—Ñ@_ìâ m�¾A1ô~*ìZúkBÊq Ô³>Ú,\uk“tèþáXf«æVMO™;( ^èAŽ“dŠ\o8•³Eú·DÕ)È<ÖSçn?úªÏMy<Mÿê߯÷JΛ®>Ú ¡Ñ¡÷¦°k…òúå}Ô-Ô³>Ú,\uks=ŸÊÁ“'&ÌžÈÅ•­Ð+ÿ ó {u.=¨1˜Ê<ûKÿñX¦· ½fÀÅNµ ‰ï×{¥GçMWm†û,”×/ï£n¡žõÑfáª[›ëùs9Šÿi¦¾õd097'!C¯]¾²'ûÑEòW¿Æ¶­éþ>ÿ cºI¼øYfzEžè¯ïË0þoYÌ" öÍq]šýÇòzþ7óWÈâsP6¦éå[p­¿Þ§Jîû ºˆ6Ã}Êë—÷Q·PÏúh³pÕ­Mzß©ÿ™éqÙÉÊÅÐûAÑ—ê¾jçj|š ÏÛÖtß8©ºp¥Þc‰—é´‹l*†9‘-_FSÝQ,‹«&¼Û“±ÍsJF§Õ£&Ó3êw߯÷JΛ®>Ú ÷Y(¯_ÞGÝB=ë£ÍÂU·6yèU’ =PAóP¢‹e!ôÚzÛy»v•!}ò[iM÷ÒJBÙÏ,^tIIƒo~é~yÅ!{ÿ;‰‡ýìDm»_<1¯ ߯÷J®‚­þÜW¡¼~yu õ¬6 WÝÚl„^%}MæîŽe2zdÂc‹Ó>µ¦»—Ðk–ì´£ÅɼäþýéðÇJGK‡ß-Ô³>Ú,\ukS½:à^ͧfI²ÂÈ®YÞrû‰lú{¾“I©Κî^B¯RX‘¨ÎÊBE¾_ï¼›�8Béhéð»åþÕSŒÅL¢Ñ~! ˜uWKÁÞáªW½êÂW²_<ñ+‘¯éž…G;jª¿7œHl–±LN&;{.£¯Ï*…ÉëO­éž­)ÿƒü|Éér™\etó5mGœíqÙ}{¥Ðòýé\äü}ÒŒï×;ï&�ŽP:Z:üûëÍ›7æ¹ZõÜX´¿t–¸/˜ÝŸ>µº ¿ úqnÛ™7¥6îÖ/¿ü’leÕkSz½–aJVY8,„^-ÿ…+û>ýZŽç•GO?½¦{~"Ý0ú»Ìì‰l…cKGqÍm*Ø>Œ ûGò*~º±¯þm»½Ílƒ±Ävá ô÷øÄ» €Ã÷OU¡êÓµ+ßFõ̂羌gK3⥥#MýìÄ|,èïü)x·xܽÅb!_|ñ…|©MÑ¥\œ|+§fõ‡T:}ã Æ{Çw›R1�ŽP>ÌéTî/];½ƒo£zêÐyðXFz®`r¦{>j¤G£ÚÕׂþ„Þ?<zuÊÁ—Úä’%Í²ËæúDºñ×ïÙ›ønS*Àʇ9Êý¥kg7|ÕS‡Î£X–ËXK'÷ä¡·Å3Þ•üà=˜+he¡÷j‘.äoÿDíKüæEòµé¨ô¿dyn÷õŸ‘*Íå¬&¨÷€}®Ã—2ÏžÛLæï³ûÏ’¦Òºç—Ûµ6Ø—gñyÛŽÏT]óË­o\¥LПØi*zmØïe¾qéÞݱ¡WoÅà{§µÉþò©-Ÿò³Ù_TìÏ×5‹dVcjƒ¦¿×'z�ß<U…r¨/íøòMßFõ4¡WÙ3Ý{‡*«l”‡Þ¶ôW’ã‡fþc~BQz ù'¡×þ\ýM°µë¯fKD™ù“½±Ì.ëÇñFmæEñ¹šçfŸ«Y‹5š†­uòKJúKÈuvalí… t0Ò:P-›ÔÖÖ/=¹«oB°]Ú+_v·Š¡Wo6øêÿ£]¾Û”Šp´ùÁc; 66½Õ–…^ÍžéžÌ÷Yèm{AÿB@u¦7”—w*ï—Ww0û GÞ¶µá®·œy®ÙÊϽ Ôni .Ô'9Q±¼¯/ûN•áB¢}}òUéX ?ǹoÇ›¾ú_´Ëw›R1�ŽP>ÌéTî/]»âöç?ÿ¹Y=7B¯’œé®Ïh?§“¯ZžÞ°%ÄzÃQ!ôê?sŸ¾”‰™²Ð(ô&mÞÎT•6”GzõöÍ7ß$ÿ¢]¾Û”Šp„òaN§réÚÙMÞßÿ½Y=Ë¡W³'­©ÇËÂh+ ú›?á6ҎχÞtÂŒ¢Xf?Ÿ5é5mn§±ÜµrèÕW «6Ýà»M©�G(æt*÷—®Þlàµ·Õ•Ì Ýwƒl:g´FÛYÐ?9 =›kú!{L}bN:òøki!³Ÿårp¶saí¢þõ„õ0Ïu?’EҖŶ0Ø<ï¬>Ï^Ê«é_å"‰Ïç\§í\Þ·mlÛ¬°¶¬¾Ú×ø¥ù¹»U ½6ðj·ªÍz%çS{Ò_áÁeå'½I×ÎßOwÃ÷ë€#”Ž6”ã@}ºvÅÀ«Õ«§!MÆ;_7 ¹›k€Þ~Aÿäq‹«.|ûBF}J¢™ Á—i°³ÝÉäiqÿ©Ä¯ Ç\Þo0Ú«¿/ &ÔÚç2Œ$ÞØÿ‹,Ì:ÉIˆ;9•è‰ Äƒcù1>–â…&q$ù…GÊûv^o1†±zC1ðjú¶f̉zz$ûÚL×É~‘(*´yÝЛŒœÛ6-mƒ‘D§uÞÕ䫞è_<_Èyƒzéïõ‰€Ã÷OU¡ê+^zÖG›Ý=zËWk^›:£ª›SHj±'fÓQt0=—óKáÆq·eW=I–æKW,i2=Å÷ëw�G(-~·PÏúh³p5®3Oüsnzíå ¡7e/CÜÖÉ‚[V=IæØ×_BÐ÷ëw�G(-~·Üy=MØÐDZ}kv²™Oú¸¦Fµq¦èi;KYœM v(^r»z7§ü¤¡ù£¬æßËȜة§.œdóÙ?z{âg2­"Ÿ”>faÿY,oì4}±‘åÛ|ÚIv…D3·»øs’Qæ~íP­ŸƒO¼›�8|ðTÊq Ô³>Ú,\kSéMöí\fsÁlŽo!ô¾×W¼{,‡öä>%9a°o§]Î/qýLèµSô×þvžý2˜Sqdl퉉{ƒ±Äú*kf•ô‚!Û¦kԙ‘óýzçÝÀJGÊq Ô³>Ú,\kóÙé åé f¿÷Ÿ2|4(]κx•¼âfOú¬zu@ÞÄ‹ÇX±ÅÇ&ô¸Ç|ðTÊq Ô³>Ú,\k³5ôêi ?È뉙:à„Þ?ÉàO½ÒÉaæ¾­+?hŸ ½ÓÔþ­Bo:½aã2ÑÉ÷ן3ìûõλ €#”Ž–¿[¨g}´Y¸צ(“i 2}'ñl.³m#½jÿü­žb^‚;íµø±ÄËm˃}*ôÚÙÈaü6 ¥· ½æòà…ÙÒu—d2ŸìWåûõλ €#”Ž–¿[¨g}´Y¸ׯŒ²Ú‘Ñôjuf¥;§·,¯_}'§«ÿ)\�Ä„ËB˜LÃeq]ÜK¹ˆžÉ‰¾Êg—,ëÉ`\¸`‹9¦,Ô–ŽÑ>Vy?)..Yfæ³d€{!”Ž–¿[¨g}´Y¸ÕÆY½áHâÅI”\ÔA_„ãD΢¯T°Õ+8\ȹɵ_[¾Ø‰eÍ/¦¢6»zÃg.N¡¯Xøz¶0£ÅŠÕµ÷÷ŸNäiqòJ^éQÝOì§Ç¡W|ˆÍ*Í/&¢Ï'ÞM�¾?xª å8ÐêYm.jÓ>ßmJÅ�8Bù0§SéêYm.jÓ>ßmJÅ�8Bù0§SéêYm.jÓ>ßmJÅ�8Bù0§Sé]O¶ú´­Vl·ß|âÝÀáûƒ§ªPŽ�pÿÑ£�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�Ø ƒfH��m G°a[ð¼Ë �€6У�p„6 ½�€¶Ð£�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡>èz²Õߦmµb»ýæï&�ß<U…rhõ¬6 µiŸï6¥b�¡|˜Ó©t õ¬6 Wçk³Še¸7ÉüÊÜàŸï6åÝÀʇ9~·PÏúh³pU«ÍµÊŽGÉ×¦Û ‘ïÍ}J, ÞƲ2w­Ws9F2°÷õ†29û‡Ì£‰Ä«kóUÝ¢Ÿ§O¼›�8|ðTÊq Ô³>Ú,\uks=ŸH_}ÏÞàXf«æVíW™d4ûÕì¯åêâD†½=é §r¶¸47¯dOÔí·}]/cy<«H߯wÞM�¡t´tøÝB=ë£ÍÂU·6×ó©<ybÂì‰\\­Í=W2Ÿ ó {u.“AO…ã©Ì³¯±>Ê2>–émBïÕO HBè€`:Z:ün¡žõÑfáª[›ëùs9Šÿ©Bëcéíõd09WqW+†Þµ\ÎÆÉýûÑ…Ú»…õRfã}uœêgO$+ó÷iàÕÇžnG/~–™žFÑ{$£'úëû2Œÿ[³HFƒ}s\—fÿ±¼žÿM¦ÉcŸƒru!ñH¿}ìt«®õ×ûÄ» €Ã÷OU¡ÚA=ë£ÍÂU·6iè}§þ÷^…Üõýä0~«'3BïYD_ªû¦;4aÂó~$ •œ×«3Le®Óçõ\&}FõÏ$Ïe¯÷Xâe:í"›ŠaNd[/"ÙOöUÐŲ¸ú`» ÍÉübóœ’Ñiõ¨ÉôŒúÁÝ÷ëw�G(-~·PÏúh³pÕ­Mz•õ[‰¨ y(ÑŲzm½í¼]z““ßùh¬¶z5ó3û“4iðÍ#Ý·!·|ÿ;‰‡}éf’Î@N÷‹'æUáûõλ €#”Ž–¿[¨g}´Y¸êÖf#ô*Éèk2ww,“Ñ#[œÞ°1Ý`_FñE~½„Þ²šËÀŽ'ó’ûŒô_(-~·PÏúh³pÕ­M9ôê€{5Ÿš%É #»—3õÔm[OdÓßóLjL}ÐKŸÅ“¡ ÒfÊ„—Ы˜ät»è©ÃéYÕLí¾_ï¼›�8Béhéð»…zÖG›…«^môª _É~ñᄾ]Ï-„G;jª¿7œH<_™ÑÒKYœ=—Ñ×g•Âäõü…Ùà™éÍÐÛý ?ŸFrº\Êlô°z툳=.»ÿ¥D‹[îOç"×9im߯wÞM�¡t´tø÷×o¿ýfþ—»õ\ËÕb&Ñh¿Ð™›‹ ”FÅ|á=p÷~ÿý÷d+«^3¿U}}²•_;É* ‡…Ы寽ìûôüÜx^yôôzþRžÇßËHO¡ØyÍO¤F—™=‘­plé(®¹MÛ§“QaÿH^ÅO7öãÕ¿Mx··™m0–Ø®3\þŸx7pøþà©*”ã@}_|ñ…üòË/f/U«žWª*-T…?¹¶z+3"¦ç¶#XM韻µX,äÏþ³|©MÑ¥\œ|+§fõ‡T:}ã Æ{Çw›R1�ŽP>ÌéTî/]»rðmTÏ,xîËx¶Tݨ•þyµŸ-®:XW±ræ?îï»§C¯®C9øR›\²¤™úszn§b(úDºñ×]0Ò `¡|˜Ó©Ü_ºvz+ßFõÔ¡óౌô 2ÉòNyªÿûІQ_W±"ôþáÙЫ·bð½ÓÚþ ±}Ëÿú±Ù/—öçëõ|#™Õ˜Ú éïõ‰w�‡ïžªB9Ô—v|éfƒo£zêÎý(–å2–ÃÒíyèmq™'e½z“_qÊ\66 ½W‹ôêUv^f¶,ñ›¦Ó×£Òÿ’å¹Ý×s'*ÀTMPïû\‡/ež=·™Ìßg÷Ÿ%«¤ußËl¥ÿÜm¯æµ/Ïâò¶Ÿ©ºÚ¶.]šW‡¨;ME¨ïež<ÖîC¯ÞlðÕÿG»|·)àåÜNåþÒµ+n:ø6ª§ ½ú¦vy§Þ¡ Á*å¡·­«X)ɈñCsÒO~}z W¯JB¯ý¹ú9š`k/:­‹jNêevY?Ž7j3/ŠÏÕ<7û\ÍÒ“ŸÒÆuòKJúKÈuv5/líÕ¼t˜ÕW÷R-›ÔÖÖ/]Ñ oB°]Ï6¿ðÁn•C¯ÞtðÕÿ¢]¾Û”Šp´ùÁc; ¶?övûЫÙåÒ€ù> ½m_ŪPé å5MËûåÕÌ~Ã?7—Ûñ.¶œy®ÙU¶ÊϽ Ôni .Ô'9Q±¼ß—¡^Çv}!Ѿ^q t,…ŸãÜ·ãÐë‡ï6¥b�¡|˜Ó©Ü_ºvvkczCv)Ódy'½ŒÓ<|Õòô†-!.€ÐŽ ¡WOK8})3e¡QèMÚ¼©*mð2½AµÓùÔN)\-­¬<Æ›tE”üu~7nÕ¦У�pøþà©*”ã@}ºvzkåD¶bèÕìIkêñ²Nº•«X™?á6ҎχÞtÂŒ¢Xf?Ÿ5é5mn§±ÜµöOd3Ó7ôó»6¿ÄíG²pž«i_ý³ë†Þ¤=Ócv¶ÁH¢ÓêëýV¦úë[¬”¢èãó‰€Ã÷OU¡êÓµ+^­I=“¹¡ûnMçŒÃh;W±J–^Êæš~ÈSŸL•Ž<þZºz•ÙÏ‚r98Û¹°öJVõ„õ0Ï5 hŶ0Í<ï¬>Ï^Ê«é_å"‰Ïç\§í\Þ·mlÛ¬pA}‰ÛñË-ÁÐ?z‹Wk^›:£ªå_ªj°ÓD²_RÔM«s91¼Ø8qðÖ ½øËLM¾_ïô(�¾?xª å8P_9ðjõêiGHíU¹#MCîæÂ÷·¿ŠUò¸ÅU¾}!£þ¾Œ¢™ Á—…Ž]mý‘Lž÷ŸJüªpÌåý£½úûÂP 5jFoìÿEfääÏõ'§=Qxp,?ÆÇR¼º×$Ž £å};¯·øçÿ»_½¡x5}¼8=øœ[„^{—BèMÙ+²µ?…Äѯ©q›VDÀáûƒ§ªPŽõ•¯F=ë£Íîž¾¤v9ðjjãL;Ðq)‹³©ù…AoÅ ±Cïæ/‚ihV¿¤Íí¥†Õ탑œdåøTèUìt dÔ>ÿe1}ÌÂþ³XÞØ_>ôtË·ù/#¥u³5B/€{Ç÷OU¡ÚA=ë£ÍÂÕ¸6å‘Þdߎp›eà²)$…Ðû^¯ƒüXí”%™FÒ7áÓžä™M­ùLèµSô×þvž~>É1WÏ0ÁÖNWÙŒ%Öœ0óêËËÈzÜ;¡t´¡Úqçõ4a#éÌ·nÍN6óIÂÔ¸6ŸÞPžÎ`ö{ÿ)ÃGƒÒENŠk'7:+†^·ñâ1–ç!olB/€{Ç÷OU¡ÚA=ë£ÍÂÕ¸6[C¯ž¦ðƒ¼¶W´sBïŸdð§^iE sßÖ•´ªÓÔ>¡ÀU(-~·PÏúh³p5®M9P&Ód0úNâÙ\fÛFzÕþù[=Å xIkˆK¼Üv’ß§B¯=‘íÆoÓù¿„^�T¡t´tøÝB=ë£ÍÂÕ¸6f”Õ·Mƒ¢Y¾ÍÎéíËëWßÉéê ËÂÙ+¨Pù>y¨t©7½üØ 9OV·¸”‹è™œèåñ>»dYOãÂ2~昲P[:FûXåýò(3¡À½JGK‡ß-Ô³>Ú,\jã¬Þp$ñâ¿$J®`§—f;‘³è+lõ r®Grí×–—ÀKÂlq‰=µÙÕ>sq ½ŽõëÙÂŒ+fT×Þß:‘§ÅýÉ+y¥Gu?±ŸGy‰Asb^Mú{}âÝÀáûƒ§ªPŽí žõÑfá¢6íóݦT €#”s:•n¡žõÑfá¢6íóݦT €#”s:•n¡žõÑfá¢6íóݦT €#”s:•n¡žõÑfá¢6íóݦT €#”s:•n¡žõÑfá¢6íóݦT €#”s:•nÑõd«¿!LÛjÅvûÍ'ÞM�¾?xª å8��÷= �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]C`ƒš!m��´À†mÁó.7��Ú@ÀJØ$ô�ÚBÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pzხ'[ý aÚV+¶Ûo>ñnàðýÁSU(ÇvPÏúh³pQ›öùnS*Àʇ9J·PÏúh³pu¾6«X†{™Ì¯Ì þùnSÞM�¡|˜Óáw õ¬6 WµÚ\«ìx”|mº¨ùÞܧ$Á²ðçýa,+s×z5—Óh${_o(“³È<šH¼º6_Õ-úyúÄ» €Ã÷OU¡ÚA=ë£ÍÂU·6×ó‰ôÕ÷ì Že¶úhnÕ~•Ùè@F³_ÍþZ®.NdØÛ“Þp*g‹KsóJæñDÝ~ûÑ×õ2–ÇÓ¹ŠäañýzçÝÀJGK‡ß-Ô³>Ú,\uks=ŸÊÁ“'&ÌžÈÅÕÚÜs%óÉ0²Wç2ôT8žÊ<ûë£,ãc™Þ&ô^ý$Ñðô'„^�¦£¥ÃïêYm®ºµ¹ž?—£øŸ*´>–Þ^O“swµbè]ËålœÜ¿]¨½[X/e6ÞWÇ©~ÖøD¢ñ·2Ÿ^}ìév$ñâg™éi½G2z¢¿¾/Ãø¿e1‹d4Ø7ÇuiöËëùßdš<Fñ9(Wô÷ÛÇN·:áZ½O¼›�8|ðTÊq Ô³>Ú,\uk“†ÞwêïUÈ=Pßÿ@ã·z2C!ô~Eô¥ºïaaºC&<ïG²PÉy½:“ñÁTæ:}^ÏeÒ·aTÿìAò\öz%^¦Ó.²©æD¶õ"’ýd_ÝQ,‹«&¼«ÐœÌ/6Ï)VšLϨÜ}¿Þy7p„ÒÑÒáw õ¬6 WÝÚä¡WY¿•øð š‡], ¡×†ÐÛÎÛ5¡79ùm‘Æj¡W3?³?IC±‘ßü8Ò}rË÷¿“xØ—Þh&é ät¿xb^¾_ï¼›�8Béhéð»…zÖG›…«nm6B¯’Œ¾&swÇ2=2á±Åé Ó öe_¤á×Kèý(«Ù± ìhq2/¹ÏH/€ð…ÒÑÒáw õ¬6 WÝÚ”C¯¸Wó©Y’¬0²{9“QOݶõD6ý=ßɤÆÔ½ôY<ª m¦Lx ½Š9AN·‹žº1œ¾‘UÍÔîûõλ €#”Ž–¿[î_=UÀXÌ$í‚Ywµ|á=®zµÑ«.|%ûÅ¿úv=7¶í¨©züÞp"ñ|eFK/eqö\F_ŸU “×órdƒg¤7Cooôƒü|Éér)³ÑÃÒkÚŽ8Ûã²û_J´ø°åþt.rþ>iÆ÷ëw�G(-þýõÍ7ߘÿåjÕscÑþÒYâv¾`v>úÔê‚þ&èǹmgÞ”þÙ¸[‹ÅBÞ¼ycörÕkSz½–aJVY8,„^-ÿ…+û>ýZŽç•GO¯ç/åyü½ŒôŠ‘×üDºaôw™ÙÙ Ç–ŽâšÛT°}:öäUütc?^ýÛ„w{›Ùc‰í:Ãèïñ‰w�‡ïžªB9Ô§kW¾ê™Ï}Ï–fÄKKGšúÙ‰3*$øXÐßùSðnñ¸{:ôê:”ƒ/µ)º”‹“oåÔ¬þJ§oÔxïønS*Àʇ9Êý¥k§·bðmTO:ËHÏLÎtÏGôhÔCÛ¡úZПÐû‡gC¯ÞŠÁ—Úä’%ÍzC™žÛ©Š>‘nüõÆ{ö&¾Û”Šp„òaN§réÚÙÍßFõÔ¡ó(–å2–ÃÒÉ=yèmñŒwe½z“/¾o® •…Þ«Eº¿ýu¶,ñ›Éצ£Òÿ’å¹Ý×Fþ©4—³š Þö¹_Ê<{n2™¿Ïî?KN˜Jëž_n×^Ø`_žÅ?äm;>Suµm]ºJ™¡?±ÓTôÚ°ßË|ãÒ½»S ½z³ÁWÿÿÎdùÔ–OùÙ‰ì/*öçëšE2«1µAÓßë= �‡ïžªB9Ô—v|ù¦ƒo£zšÐ«Çì™î½C‚U6ÊCo[ ú+ɈñC3ÿ1?¡( ½……ü“Ðk®~Ž&ØÚõW³%¢ÌüÉÞXf—õãx£6ó¢ø\Ís³ÏլŚÎMÃÖ:ù%%ý%ä:»° ¶öÂ:é ¨–Mjkë—žÜÕ7!Ø.핯»[åЫ7|õ¿h—ï6¥b�m~ðØN‚Moµe¡W³gº§ó}zÛ^пPé ååÊûåÕÌ~Ñ·mm¸ë-gžkvÁòs/(µ[ˆ õINT,ïëËß¾Se¸h_Ÿ|U:–ÂÏq íòݦT €#”s:•ûˆ»5Û½Jr¦»>£ý@žN¾jyzÖ@è G…ЫÿÌ}úR&fÊB£Ð›´y;SUÚÀHïîønS*Àʇ9Êý¥kg·[Í,‡^Íž´¦/ £­,èoþ„ØHo8>zÓi2Šb™ý|Ö|¤×´¹ÆrׂœÓÛQ¾Û”Šp„òaN§réÚéÍ­I=“¹¡ûnMçŒÃh; ú'g¡gsM?d©OÌIG--äoö³ \Îv.¬]Ô¿ž°Þæ¹îG²HÚ²Ø&�›çÕçÙKy5ý«\$#ñùœë´Ëû¶m›Ö–ÕWû¿4?w·Z_½a½’ó©=á¯pyà ù:½ùkÜ“ò/ wÈ÷ë€#”Ž6”ã@}倠ի§!MÆ;_7 ¹›k€æA!û¾š ú'[\uáÛ2ê«`ÍT¾Lƒ}ìþH&O‹ûO%~U8æò~ƒÑ^ý}a0¡Ö>—a$ñÆþ_daÖIN‚ÜÉ©DOT Ëñ±/t0‰#²>µoçõƒa«7Üîõl™“ôô(öµ™ª“ýQ`F»õϨzËï›â¦Ûñ;9Í~!lI‹+mèãô‰€Ã÷OU¡ê+zÖG›Ý½_~ù¥Å×szu¶JAÖ™ZS]:rn~H¨_ææ…«³5\BÏ¥çÓ?•ÃdD^ýÒi/ÓpjŠï×;ï&�ŽP:Z:ün¡žõÑfájT›:Aö¡wcŽtQ6¾Ùtׯ2›¾*ŒTÛ©)aÎaçÝÀJGK‡ß-w^ÏŸŒ·oÍ:jŸôq!Lµk“ÑâëMOÙYÊâlZ¸¨CárÛ¡7!οOÓGoÕ탑œØ© Ÿ ½ÉÈlq¥“üÂ!éc6¸È3½bÛ” ôcûÄ» €Ã÷OU¡ÚA=ë£ÍÂÕ¨6åÑÛdßÎc6û°1ûÚsy¿øQ&‡7.ó›œ,Ø7—æ¶KùÙ(?zÕ—š‹…è‹}ü–¬ª‘i{Ÿ~nÕ.$R¦OnÜ—Ãømvœuø~½ónॣ¥ÃïêYm®Fµ)‡Þ ¥åïÌ×ö å‘ ·; ¨ùfF+†^ýˆååäj-/·!½jâþ-–škÔ¦5ðnàðýÁSU(ÇvPÏúh³p5ªÍÖЫ§)ü ¯'fµŠrè äO{J£§& jAåé -†^=_xø|Ë:ÙÕù~½ónॣ¥ÃïêYm®Fµ)‡ÞdZÂA²”X<›ËlËHoòFÞê)½âh¯]ù±ÄË-˃}.˜ê9À…ïk%ôêu”G™ÝrY9߯wÞM�¡t´tøÝB=ë£ÍÂÕ¨6æÊ›S ÌüX;§·,¯_}'§?&_›d{_ኃÙ4…á 9OÂæ¥\DÏädñá†%Ë 'Ëe#¿6ÔÚýªÑ7¨à>ý¶xõÒeßËøÄÜ_ƒï×;ï&�ŽP:Z:ün¡žõÑfáª]›d„´8ÿöHâÅIdWHÈYô• œ*”þøZžõó¯íO^É«lõf‹RQ[²zÃ;Y~òâd¨g¶Èç§¡ÛÞ?§“ÑÆþ‰NÍñÛÛìæy7pøþà©*”ã@;¨g}´Y¸¨Mû|·)àåÜN¥[¨g}´Y¸¨Mû|·)àåÜN¥[¨g}´Y¸¨Mû|·)àåÜN¥[t=ÙêoÓ¶Z±Ý~ó‰w�‡ïžªB9�ÀýGÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�Ø ƒfH��m G°a[ð¼Ë �€6У�p„6 ½�€¶Ð£�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^�@×У�pz�]CÀAè�t = �¡�Ð5ô(�„^ø ëÉVC˜¶ÕŠíö›O¼›�8|ðTÊq Ô³>Ú,\Ô¦}¾Û”Šp„òaN§Ò-Ô³>Ú,\¯Í*–áÞ@&ó+sƒ¾Û”w�G(ætøÝB=ë£ÍÂU­6×*;%_›n*D¾7÷)I°,üyËÊܵ^Íå4ÉÀÞ×Êäì2&¯®ÍWu‹~ž>ñnàðýÁSU(ÇvPÏúh³pÕ­Íõ|"}õ={ƒc™­>š[µ_e6:ÑìW³¿–«‹öö¤7œÊÙâÒܼ’y<Q·ß~ôu½Œåñt®"yX|¿Þy7p„ÒÑÒáw õ¬6 WÝÚ\ϧrðä‰ ³'rqµ6÷\É|2̃ìÕ¹L=ާ2ϾÆú(ËøX¦· ½W?I4| ý ¡�‚éhéð»…zÖG›…«nm®çÏå(þ§ ­¥·×“Áä\Å]­z×r9'÷ïGjïÖK™÷ÕqªŸ5>‘hü­Ìß§W{ºI¼øYfzEžè¯ïË0þoYÌ" öÍq]šýÇòzþ7™&Q|ÊÕ…Ä#ýýö±Ó­N¸Ö_ïï&�ß<U…rhõ¬6 WÝÚ¤¡÷úß{rÔ÷?Ãø­žÌP½d}©î{X˜îЄ Ïû‘,Tr^¯Îd|0•¹NŸ×s™ômÕ?{<—½Þc‰—é´‹l*†9‘m½ˆd?ÙWAwËâêƒ ï*4'ó‹ÍsJF§Õ£&Ó3êw߯wÞM�¡t´tøÝB=ë£ÍÂU·6yèUÖo%>| ‚æ¡DËBèµ!ô¶óvMèMN~[䣱ÚFèÕÌÏìOÒPl¤Á7?Žt߆Üòýï$ö¥7šI:9Ý/ž˜W…ï×;ï&�ŽP:Z:ün¡žõÑfáª[›Ð«$£¯ÉÜݱLFLxlqzÃÆtƒ}Åiøõz?Êjv,;ZœÌKî3Ò |¡t´tøÝB=ë£ÍÂU·6åЫîÕ|j–$+Œì^ÎdÔS·m=‘MÏw2©1õA/}O†*H›)^B¯bNÓí¢§n §odU3µû~½ónॣ¥Ãï–ûWO03‰Fû…€`Ö]-_x„«^môª _É~ñᄾ]Ï-„G;jª¿7œH<_™ÑÒKYœ=—Ñ×g•Âäõü…Ùà™éÍÐÛý ?ŸFrº\Êlô°ôš¶#Îö¸ìþ—->l¹?‹œ¿OšñýzçÝÀJGK‡}óÍ7æ¹ZõÜX´¿t–¸/˜ÝŸ>µº ¿ úqnÛ™7¥6îÖb±7oÞ˜½\õÚ”^¯å_˜’U ¡WËáʾO¿–ãyåÑÓëùKy/#=…bcä5?‘ný]föD¶Â±¥£¸æ6lŸNF…ý#y?ÝØWÿ6áÝÞf¶ÁXb»Îpú{|âÝÀáûƒ§ªPŽõéÚ•ƒo£zfÁs_Ƴ¥ñÒÒ‘¦~v⌠>ôwþ¼[¼îž½ºåàKmŠ.åâä[95«?¤Òé5Þ;¾Û”Šp„òaN§réÚé­|ÕS‡ÎƒÇ2Òs“3ÝóQ#=õÐv¨¾ô'ôþáÙЫ·bð¥6¹dI³ÞP¦çv*†¢O¤½ñž½‰ï6¥b�¡|˜Ó©Ü_ºvv³Á·Q=uè<Še¹Œå°trOz[<ã]Y¯Þä‹ï›+he¡÷j‘.äoÿDíKüæEòµé¨ô¿dyn÷õŸ‘*Íå¬&¨÷€}®Ã—2ÏžÛLæï³ûÏ’¦Òºç—Ûµ6Ø—gñyÛŽÏT]m[—®R¦GèOì4½6ì÷2߸tïîC¯ÞlðÕÿ¿3Ù_@>µåS~v"û‹Šýùºf‘ÌjLmÐô÷úDÀáûƒ§ªPŽõ¥_¾éàÛ¨ž&ôêñ#{¦{ïP…`•òÐÛÖ‚þJ2büÐÌÌO(JCoa!ÿ$ôÚŸ«Ÿ£ ¶výÕl‰(3²7–Ùeý8ިͼ(>WóÜìs5k±¦ó@Ó°µN~II ¹Î.l`ƒ­½°FúBªe“ÚÚú¥'wõM¶K{åkÀîV9ôêM_ý/Úå»M©�G›<¶“`cÓ[mYèÕì™îiÀ|Ÿ…Þ¶ô/TgzCyy§ò~yu³ßpäm[îzË™çš]p üÜ Jí–âB}’Ëûúò·ïT.$Ú×'_•Ž¥ðsœûv¼}ñÅÉ¿h—ï6¥b�¡|˜Ó©Ü_ºvÅ­ñÈØFèU’3ÝõíòtòUËÓ¶„¸�Bo8*„^ýgîÓ—21S…Þ¤ÍÛ™ªÒ†òH¯¼¿üòK`µéßmJÅ�8Bù0§S¹¿tíìv«9åЫٓÖÔãea´•ýÍŸðé ÇçCo: á@FQ,³ŸÏšôš6·ÓXîZ1ôÚÀ«…U›nðݦT €#”s:•ûK×No·=Û=™ºïÙtÎh1Œ¶³ rz6×ôCö˜úÄœtäñ×ÒBþf? ÊåàlçÂÚEýë ë=`žë~$‹¤-‹ma°yÞY}ž½”WÓ¿ÊE2ŸÏ¹NÛ¹¼oÛØ¶YamY}µ¯ñKóswˆÞbàÕ×f½’ó©=á¯pyà ù:½ùkÜ“ò/ wÈ÷ë€#”Ž6¬uèÚ¯V¯žv„4 Ïî|Ý4än®š…ìûj.èŸ<nqÕ…o_Ȩ¯‚I4S!ø2 vö±û#™<-î?•øUá˜Ëû F{õ÷…Á„Zû\†‘Äû‘…Y'9 r'§=Qxp,?ÆÇR¼ÐÁ$ŽTÈúÔ¾×[ †w¿zC9ðjúxë3'ééQìk3U'û%¢ÀŒvëŸQ/ô–ß7ÅM·ãwršýBاVúÆf?A§Oô(�¾?xª å8P_9ðjÔ³>Úìîé°[¼Z³Ú¤Wg«d©5Õ¥#çæˆ„úen^¸:[Ã%ô\:Ä?•q2Z­~éL~ñi>Û÷ëw�G(-~·PÏúh³p5ªM {‹Ð»1Gº(›ßlºÍ’•7ú„^�÷G(-~·Üy= 2Þ¾5;ÙÌ'}\SíÚ$A´øzÓSv–²8›.êP¸ÜöFèMGˆóïÓã´ÅÑ[uû`$'vê§B¯ºws¥“üÂ!éc6¸ˆe.Nb×WnB?¶O¼›�8|ðTÊq Ô³>Ú,\jS½Möí<fs±;Ç7ûÚsy¿øQ&‡7.ó›œ,Ø7—æ¶KùÙ(?zÕ—š‹…è‹}ü–¬ª‘i{Ÿ~nÕ.$bdž9½�î™P:Z:ün¡žõÑfájT›rèÝPZþÎ|mïÑPÙp›)^!¯¸™QàŠ¡W?by9¹ZËËmÐ+¥¤£ÖM—›kÔ¦5ðnàðýÁSU(ÇvPÏúh³p5ªÍÖЫ§)ü ¯'f„rè äO{ä0~›òfyÛÊÚ'ƒ©{!—öB¯fÂx¶¤_=¾_ï¼›�8Béhéð»…zÖG›…«QmÊ¡7™–p,%Ïæ2Û2ÒÛŸ¼‘·zŠA¯8Úk×E~,ñrËRnŸ ¦öD¶Â÷µzM¨þT¿ï×;ï&�ŽP:Z:ün¡žõÑfájTsåÀÍ©f~¬ÓÛ?–ׯ¾“Ó‹“¯M²½¯pÅÁlšÂð…œ'k_ÊEôLNnX²¬p²\6òkC­Ý¯z!‘Më•>ÙmP•®Î÷ëw�G(-~·PÏúh³pÕ®M2BZœ{$ñâ¿$²+$ŒNä,úJNJ|-Ïúù×ö'¯äU¶zƒ ³Å ©¨-Y½á,?yqŠ2T3[äsƒÓÐmïÈÓÉhcÿæ ‰ÌÓ«òÙÛÔ1D³Eã5€õcøÄ» €Ã÷OU¡ÚA=ë£ÍÂEmÚç»M©�G(æt*ÝB=ë£ÍÂEmÚç»M©�G(æt*ÝB=ë£ÍÂEmÚç»M©�G(æt*Ý¢ëÉVC˜¶ÕŠíö›O¼›�8|ðTÊq��î?z�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�B/� kèQ�8½�€®¡Gà ô�º†€ƒÐ �èz�6CÙ��h= ���:Ð ��€Î#ô�� ó½���è<B/���:Ð ��€Î#ô�� ó½���è<B/���:Ð ��€Žùÿñ�«òë£����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7ab.png�������������������������������������������0000664�0000000�0000000�00000056763�15030617045�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����º���iêûÑ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��]ˆIDATx^íÝÏoWž÷{ý\= ®ðÎð¦Wœã…{“YdÁ`„4 C0`"Dà/bà ’±1Éã<œ‘óÀˆ{<Õ¯Áu‡0­;‰`ÞvÃI¬aÒ·ãÄ »Ÿv;~tÛW­ß[ߪsÈbéHdñ—ŠÅ÷+(DUÅ_:‡®Ssª����¦€ð���`*����¦‚ð���`*����¦‚ð���`*����¦‚ð���`*����¦‚ð���`*………–!����C„$C™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1a”���"|Le���„F™���!ÂÇ„Qf���@ˆð1aóVfúû²$_���æácÂæ­ÌøŽ$G™�€yAø˜0Âú¡Ì��À¼ |LáýPf��`^>&Œð~(3��0/Fø@?”��˜„ #| Ê ��Ì ÂÇ„>Ðe��æácÂè‡2��ó‚ð1a„ôC™�€yAø˜0Âú¡Ì��À¼ |LáýPf��`^>&Œð~(3��0/Fø@?”��˜„ #| Ê ��Ì ÂÇ„>Ðe��æácÂè‡2��ó‚ð1a„ôC™�€yAø˜0Âú¡Ì��À¼ |LáýPf��`^>&l|eÖ–íf]j¥EÉW²lûV¼b>²~øøŽ$G™�€y‘Òð±+-ïdð~ár\*§fŸ¯åI±³Ï_Šž´Ì®v«!7k%)Ø}¹¢TV#ZE¼ÖôOÑõ3ŒÅnC*ùðwšvØð<OΜ9#ÍfÓlÙßÁ¿o–‚zÑ¥P•ÆvÛì‹×y^ŠÞ·fߎ´¿ ‚—ÝŸ+Veuã©•ovê~Véï��0R>ºvÉë gáœÔ[;f«z,õÒq)Õ›õ¶lo¬H1gNL›[fsK^Åß^ðÌv¸mŠÆZf&€Fø°'ýýBÈ`¿ï¶4*ÿ±9)”W¥eó‡ÚªK)_–ú–ݸ%µ%É-‘båciš°¢!Ó«%—¯H#-Ý>C:ŒW���‡aÂGUŽŸ>mBÅŠltþR®'°Ån Ø^—J!ûkºµ#›Þ9©>† vÙ/„ öûjÝ-ÉéÒËa¨¨}æo1ôw<j…(ýú/hH©¬wcµŠ·|™ð��0#f |¼#'½ßúáaÙ?Qž„FÃG[¶êå`ÿbmÃ_KQˬÝZ“jñˆÿ:þïnBX>âs@"ë=Y«ýò0=F›eݮ疤¶a{…6¥^Ö¡LÚ±"µò»ÎyWø°K<„è¶þ´îΊ·ù[ñ–ôw‹ «ë Ú»uÔßÿ’Ôš/‚ÝÃѲùX*A9êçŽô¸l7¥®Ãôr/Ké´–…÷º/ÍzMJ…£R,-‡CøŠÿâÿž®×ˆ 3=1»…“}‡û Vf���³oF‡Žý꟰÷?ÃYòêéd$|¼fí%ßÑÈ0¬t©Ì‚Þÿ¸ºæŸäîH«~.8ÂF|H{Cj‹¹`ÝŒö¦'K~XY(”ÅÓah¦w(Wª‹¿7 l‹5iú'áíÖª”W‡»Ø¢?÷g‡ž”۫ܲFvzÇýrÑaXÃÐ÷+˜¹AÚ ¦AVÍãp»þöý}Ýà`¿kj¿×ÐPd{h¢s“48(4 Vf���³o†Â‡O‡Ùè_ʃ“ëÍHø0'† ‡3¯ã Á‰mÂ%dÂAôÄ;>ìªßúž«a™ ßÁ ´}}ßôKp/×g;hÑ�¢ÿï/>|6$ÃêžúaưÆ<¯# ö»b¾;±÷è}Ì^{÷‡½4¹%O65Ìù¿Óɲ†¼þ+3��€Ù7[áÃü…>˜ÛQ–Jéesò—ÅaWŽ“â±†ßö†x+H-JÉÛp†~=Ñ¡WºÞ_oø®fôêä¤pþ¢”Æ>ì*\ í†^|@?÷páÃýÁžHïGKšµ“÷ Vf���³oæÂG÷$/vò§WI †¹&œës®Hå†d _ff(ÙÄz>º:WŽÚgØÚ~áÃ5é\·÷Ê«ó_»º¡Ò9á\ŸS½<À,n %©ywä‹úÅ!z>z à ˾(Ÿx¨Ø`e��0ûR>tlýk²¸çÄÓŽ¹wœúŸ1W¬ˆ×ÐEjKš«ïHélì’®S2J™µ›5YÔï’'ÍíßO';=<&puÂ…Yçtè ˜“áØú‚™ç±Û¸,'ƒù$ö¹ƒ…Wè°ú}ƒásÚk¹w‹²Ãê¢A 3)^/µëIÃ^ny»)«•²œ­ošz>€ ea9t¿;o| Õ›°w¥'|ØÐù~ø6×7Êw��`–¤8|˜¿Ò›Þø_¦Ã“Ò¥Þ¿<û§{öŠOç霯q(ÁCVf~ Z¿l†øø'ßï^–R~QJµº4un„2lÏüùŠœ®W®ËõHùÅ×µ÷ãÛÆ5yÇû@J:ŒM_ß‘> –>î@±Dv{eBî‰ï~€ ®>¥Ÿ3|^oÀìÇÞ+Än¡$+«59Ó«UÝï¢Î2ŸÇ|ÇÂ^³­@ö{X¨ &пœh˜˜¾��À<HqøÈ†,”Ù½{÷ú†kî¿#Úƒt<ìYÿ®��À¼ |Lؼ•Ù|Gt8VINv.Ï;þ]�€yAø˜0ÂÇäõ“r,± öc×¹ÇÊ¢”VÖñÓÏ��06oeÆw$9Ê ��Ì ÂÇ„>Ðe��æácÂè‡2��ó‚ð1a„ôC™�€yAø˜0Âú¡Ì��À¼ |LáýPf��`^>&Œð~(3��0/Fø@?”��˜„ #| Ê ��Ì ÂÇ„>Ðe��æácÂè‡2��ó‚ð1a„ôC™�€yAø˜0Âú¡Ì��À¼ |LáýPf��`^>&Œð~(3��0/Fø@?”��˜„ #| Ê ��Ì ÂÇ„Ícø`I¾���ÌÂÇ„Qfé@=���>ÂÇ„Qfé@=���>ÂÇ„Qfé@=���>ÂÇ„Qfé@=���>ÂÇ„Qfé@=��†¥mËøÌ'ÂÇ„Qfé@=��†E2~”éüJTó|Q’£ÌÒz�� +ómHË“âBA*m³aòh—çW¢šç‹’e–Ô�`Xƒµ!»þ9üÉà±árÜ?™jöù‚üȰ£¢'-³«ÝjÈÍZI v_®(•ÕßH£V¯µk•-ú{b>%ªy¾(ÉQfé@=��†•´ ÙmT$ï?g¡pNê­³U=–z鸔êÍz[¶7V¤˜[\±*«Í-³¹% ¯âo½7¢½éÉrµáG£t¡]ž_‰jž/Jr”Y:P�€a%U9~ú´ +²±Ý6{¶¥Q)vÅöºT 9?¤T¥ÑyŒµ#›Þ9©Ž>¶?“Zñˆä+„¤G¢šç‹’e–Ô�`XÉÃÇ;rÒû­–%·“BeÝ*>Ú²U/ûkþÚÚ›R//úŸÓ¯òŠÔÊïJãi<ô³‡ËIñš_H]‡wå^–Òi}|^ŠÞ}iÖkR*,šÏµeÖ—åFãŽTƒ×ˆþ¾í ñJú|ûÚá’$äèã1ŸÕ<_”ä(³t ��ÃJÚ†„áã[ÿ§§~Ø8î?ÿˆ,yuU$|¼fí%ßÑÈ0¬a˜³X“¦Ÿ`Ú­U)¯JCSÀnC*y ô½ Áï²[o3Ö"f&œ·›5Y ÖýÀQò¤¹ý„(?¼óOÌïôÖø¯ K h—çW¢šç‹’e–ÔCrA•¢�KÒcP7|øÚÅ[:âŸð/Imc3>lu^‡ Á$õf·wBõ„eÞ3_ Éîç×m؈ïÿV¼b^r¥º„3TÂõèúAp\Ÿ_‰jž/Jr”Y:PÉ¥©Ì¨?�‡)é1¨'|ø‚Þˆ`nGY*¥—ÍIü‡]õ ƒZ”’·†‰„iÕÏIÁöžóVòô|``‰jž/Jr”Y:PÉ¥©Ì¨?�‡)é1(>4hl7ªæRº‘žŽ­º”rþ6ç„s}Ω$’¥—ìõ*E?И¡\ >3‘]ËE‡”«kÒJ˜ž8®Ï¯D5Ï%9Ê,¨‡äÒTfԀÔì¤W©zM£´º]çNDNâm/‚ÿú¹bE¼FËôlIsõ)]è¤~·qYNÚ�šÞð‘+}$_ܬÉÍÍM©—ŽÆÂ‡í±ŸË®¿$µæ Çþp®J’Éå.×çW¢šç‹’e–ÔCri*3êÀaüdæ?ø–XCxUª¥HøPmÙnÖ¥½z”Îßð÷&ì6®É;ÞRÒ¡]==Ý ïÅÚÿ%u;á<òÙÂ^ ³Íç+¥ÈúI¹îïY÷ZÏLˆ²ÛÌR(‹gïS2�}æS¢šç‹’e–ÔCri*3êÀ¤5›Myòä‰YëÅ1(jK6VÞ•›æjY¡pXÙñ½!”éüJTó|Q’£ÌÒzH.MeFý˜4 ÇŽÏóäùóçfkˆcPWp)Þ\Qªëvˆ˜O'¼—ÏJmƒžô—¨æù¢$G™¥õ\šÊŒú0 >ôxsâÄ Y[[3[ùdæmègp/݉áSÑnIëwoß_ïR“z‚!WJŸ‹ù”¨æù¢$G™¥õ\šÊŒú0 .\Ž7v9sæLÐ#Â1hü(Óù•¨æù¢$G™¥õ\šÊŒú0 ·oߎ7®ãE™Î¯D5Ï%9Ê,¨‡äÒTfÔ€IzôèQ<Þxãàx].]ºÄ1h(Óù•¨æù¢$G™¥CzêaKšõš” ‹±K-¦Oš¾»ü;0NzU+Ó¡ÁBçwè\ýY·ýÕ_ýUpÌÑE·ëäsŽAãG™Î¯D5Ï%9Ê,ÒRÁUBüÏÒs‡Û)ÓÆu¿ËIF¥é»Ë¿#�£Ð�qïÞ=¹zõj6ô˜¢ó;´·C{=¢lO‡.zå+5ê1¨ÝZ“ª½#ø¾÷ÃèÞïcÔøù/$õZI ÑûŒ´<)bÛ7j™bv%ªy¾(ÉQfé¦zoètx €N ÔòÐö ’¦2ã߀¤t¢¸†‡W_}58†è±O×uûA4¤èã5¤X#ƒÚÅ[*È’÷Pv[«R.äe±¶Ñ½L­¹ªÕhác[öf‚ñ›ŽdGZë—ÍU®¢72ÎHeŠ™–¨æù¢$G™¥Cšê!-áÃ.û…4•Yš> €t²ó6ì1NC‡öth˜ˆß·ã v˜•>Ï锤ÇÁ‘{>l�[øo"XÈ-…÷òØ^—Jáh¨†Í×çW¢šç‹’e–c­‡žk®ç¥è}Ù¦ë_Ëvóc©Ø.v½zyµó¢høÖÇ„×i¯«vk]VJ‹æµ¥´²n^kGZõsRÐí…³r£v^ª4nñða—xÑmi‘¦Ï ì¼ >¥s3´§ÂÎÛdhéAìp+k”cP¢?8¥6|<–zé¨äJu Œµe«^–\®,õ­áâÇõù•¨æù¢$G™¥ÃØë!ø«O®§h7¯ÉÙà¯@æ _ô¤å„MoYr /I­ù"x\oCdà°[7ÝõÅÚgþ«Ú°qTJõÇâ?PJ9óºíM©——jÜö v±!DN‹4}�‡'>I|¿yã6Ü1hWZÞÉα5X4 <mÊj¥èçͶÂ9©·vÌS¢áã[ñŠyó\Ófè þVJá‚›û} û\ßzÕ¼naYJú°Nøˆ]ì¤3'äœxkv(Õ¢”ë¿“ÍèЪ íѧk{cþØf„s»m[Rú{a>%ªy¾(ÉQfé¼G_ºL¨X¬I3ø£Ï i®\qþ(þW/÷z·§#ºÞ Þ» SÐøCåcinï}ßøs†YÒ"MŸ£‰ÇX[²ó6&6âF©ƒƒŽùíMO–r¹îNøX—§Úƒ¾´,ÕõV¸Ï´;ùâŠløÇüv0$gz#žJ£r\rÅ˲φð=õ»¤Ÿã±4k/™ï– Áº´·~QJÞ†8Â×[°=®¡c#N`ç{=¿Õ<_”ä(³ NþM/ÄöºT+wLwt¨ÝjÈÍó¤xÃãnˆâëáÏûýeiKš^9ò0ÏBâúõ|è¢YÔÿ§Eš> FC]&G™¾Qê ~ÌïfeÖs/åå¼™_aµ7¤¶è ÿ³ô,0žDÚ£ÀÞaW½Ÿ#¾ßôÒÄ×mÛDøÀ%ªy¾(ÉQfYfÇÀ®Ê·õ‹RîôÍð¨BIjÞùÂß·7lÄ×ãá# áÏGžÔ§Ýð^rºãq÷wPøˆÎûÐõ´HÓgÁh¨Ëä(³Ã7JÄù=nß¼Ö™¸'| ò“ø±?Øé%‰ØûcÑ?¶Ѷj|¯çW¢šç‹’e–ev~ÆQ),žë¹²G윂\¼ñTo~ÝyŽ=ˆ‡pÛƒ²!^gr¹Ðßü,üKW®hºÞÛþC>òŠßøøïS=v±ï ¸?Wøˆ†K·§Eš> FC]&wèefç¯I£3à¸û´³ß=‡!rߊ‹ž¬uæ#øû7vç'Ø+(v¤Õø@J:d(xlIVvØÑá¥âÁ u\J5Oê_¬:{>ò•5y¨mG´llÛ²äÉf¬@Â!ºìù0òºmÌ‹pèV¡*zÜ]8̯D5Ï%9Ê,ãÌÄóÞ“þ-Ù¨-™FÖo8Wkr:^ñêÛu=øûÛƒÅ4Û~À0ýÒñºkÞ9ÉGÜž›SE¯vµûkYyçºÜ0aÅŽõí'>\¡ÃÒýi‘¦Ï‚ÑP—Én™™“Lÿ3tæØùÁE5ìImx’Ú3‡!:LÈœD‡ûýu{£½Ø14Øo‡Òðo#\Qi\†¯ƒî©Â``NúÍïdË#ñš\¯~$­ ‡Á„[Î|[‘{lhûQ¾&Í]SÖ¦\;s>´ìƒ¹‰ösØðþÁª[¶æµãëžÞK톯ϥv1œD5Ï%9Ê i£áã Ða¥é»Ë¿£ì .“;ü23'Ì<Ö#Uïèüå>þ—|³n®à__;t¢K·×à° W¶÷ ò»ÿEš+«K•VnJí´´7èÛµ ¬ìcó•ër½sµ+s¥©è­bW»Šþ¡*W¬Ê•RÁß_“ºF€Ø}íž%^¼ë‘Ï_ï ŽÎ3Œ^ö}8úÚ˜O‰jž/Jr”ÒfЛm¥é»Ë¿£ì .“;ü2 |ô™Ã0Xø0¯Û¹Š`zð½?Êt~%ªy¾(ÉQf˜Uiúîòï(;¨Ëä¿ÌƒÍaH>rËâmöB:M|oÇ2_‰jž/Jr”fUš¾»ü;Êê2¹Ã/33? Ó#aÖƒðaÃÁs:óâÌ<øº}m{o£î6CwQV†¼¢Ò¸ð½?Êt~%ªyý¢°$_€Y”¦ï.ÿ޲ƒºLî0ÊìÞ½{rõêUÿ'.üÏ,Åšx=ëÃÎaØ»ö~ìH«sE-IÑÕ®XÆ¿`>Qó�œÒÔ0ÐHeu™Ü4ÊLï®w·WÃ{õÕWMø�€ñ¢�àDøÀ$Ìf]nI³^“Ra±{Õ¥ïîœÄ$ÊLÃÆíÛ·åÂ… rìØ19qâDp¼µµµ/J�àEàDøÀ¨ô7.Y]šÉÈþs‚¥ç†fñ˘šK‘ôFu¿ nng÷ë¥GW7>‘Zù¦™4=¸îeJç’¯úùG¥—ÖÖ`¡Cƒ† º­ße·`œhÑ8ã„g\ÒôY08Æ£'»QÃÕ¥wÞ¬³çÞ:¡9½ ½Éç)V>–¦ +íVC<½ ·ëވߥzš†)3í½°ó6t•¾†©ÒÞW(€i¡EàDøÀ¨4|hÝEÈpu©ácIN—^CEí3‹¡—r=j…¹ ³†”Êz÷1–Þ1zùrfÃG³Ù Ê܆ ý¿®ëv�H Zt�Ni:áOÓgÁàløÐÅáêRÃÇYñ6+Þ’ÞÄ†»z‡¹ìÂKRùҬѫ.-šàcÃG|Hwý¢÷‘¹ËtØK³¹½ëôŠlt† n¿2‹ÎÛÐÇèp*íéÐæm�H+Zt�NÃ$NFš>  ºh�®.Møhù c{]*…\÷FtÑðaïaî91<Óƒ’+Ju½%íö¦ÔË:$ ñ9 öÞú»…ã…lzË~XñHÉ“æö®é‘9*¥úcóƒ³efçm¸&‰3oÀ¬ Eà4ÜIâþôõXXtI.>|öFvÁ‰þS?ŒØðaî¦mï¼=¼°¥s#<_|ØU¿õ=Wà ֣“â§e$μ �³ŒðÀi¸“ÄÉHÓgÁàâ=vI®7|C¢êç¹ç/JiÜîLˆÉWbßñ°Ãó6�d-:�§áN'#MŸƒ‹‡4\]ÆÃ‡zêo;¾v§§£-[õr8ÜÉ5á\ŸS½ÜH–¾•¦ž�È Žh�œÒtÂÃÉ×lІ j¨ºÔ«T-½ìŸÈ›IæV°ýHï0«Îü ½Ô®'ÖN¸}»)«•²œ­oú¥ŸÒ¬½ä¿Æ¢”¼ Ùþ.Ú«òÌ„.lèéÎéçÄ×s²XÛàý{ñý%Ñ�8¥é„‡“¯ÙdÇ *q]=ÝÞ“èP(Õn­Jùx56ÇÃ^}*×y^®X¯ÑüĿݒõjÑþósKòî•Ó’/”¤VoÊÓ —Ã~¦‚œ¯”zÖ+^-ò™ãëÉ{?ôy�Ñ�8¥é„‡“¯Ù¤á#<u™e K8¢p"|`T®{MP—ÉQf�²„#�'Â&! uN·Ã KÑ“–ylèg€¬àˆÀ)M'<œ|eu™e K8¢p"|`¨Ëä(3�Y €á“@]&G™ÈŽh�œ˜ê29Ê @–pDàDøÀ$P—ÉQf�²„#�'Â&ºLŽ2%Ñ�8>0 Ôer”€,áˆÀ‰ðI .“£Ì�d G4�N„Lu™e K8¢p"|`¨Ëä(3�Y €á“ uÉ’|€¬àˆÀ)M'<œ|� ´è�œ��`ÜhÑ8>��À¸Ñ¢p"|��€q£EàDø���ãF‹À‰ð��Æ€á��Œ-:�'Â��7Zt�N„��0n´è�œ��`ÜhÑ8>��À¸Ñ¢p"|��€q£EàDø���ãF‹À‰ð��Æ€á��Œ-:�'Â��‡ïÑ£Gæ§l EàDø��àp=þ<sm -:�'Â��‡ëÞ½{ræÌ³– ´è�œ��®K—.ÉíÛ·ÍZ6Тp"|��p¸Nœ8Áœ�óð�ÀáÑСá#khÑ8>��8<:ÜJ‡]e -:�'Â��‡G'šë„ó¬¡EàDø��àpØKìêÿ³†€“ôÒ´��0/ÖÖÖ2w‰]‹€“+�æ�À¼Èâ%v-Zt�Ni:á'|��æÉ±cÇ2w‰]‹€á�€éËê%v-Zt�N„��¦Ïó¼L^b×¢EàDø��`ú^}õÕL^b×¢EàDø��`º²|‰]‹€á�€éÊò%v-Zt�N„��¦+˗صhÑ8>�à`zlb™Ì2¯²|‰]‹€SšþóÜH/ŽM“1¯åšõKìZü«àDø�€ƒeÿØ´+-ï¤,ä+ÒØ5›¦€c~¶Q»�œ�p°M-OŠþcõñ 9)TÖeÛìùV¼bÞìÓå¤x-{¦¿#­Æ/¥VZììÏ«²ºñ‰ÔÊ7¥e•5ú{"»¨]�Ni:øÓH£ÄǦ݆Tò"¥\ß”¶Ù,þO[õ²äKuÙ2[Äÿi£¶$¹…#R¬|,ÍíðÑíVC¼JQr£öF´Š·|yª=ƒâ˜ŸmÔ.�'Â�l¨ðq|YJÅ#²[’ÚF7jì6*r´Ò0 ´e»Q•ž^cäà`‚Í”‡S Šc~¶Q»�œ�p°¡ÂÇIO67=YÊ-ÈB¡* Ó£Ñ>K½tÔý—¤Ö|lÎŽ´êçü£ïuVnÔÎKµ±izTÂa\ y)z÷¥Y¯I©pTŠ¥åðñEOZÛM©×JRBŠˆšu©•~*ÅŸÈzµ¾FäwBSÓó_'g^Û.©4öD¨}%.WÌj€Sšþ4D�Ò(ñ±É„V§gcArK~ñÏÝ{ÂG{Cj‹þ |®,õ­îà¬Ä¶êRÊ™�ÓÞ”zyÉ„€miT ‰äúÞyÿ³,,‘%ï¡f£Ûõq;æ3éz¡,^sËI Q^¾ ž!ÛëR)äMo6–<@qÌÏ6j€Sšþ4DÙœ¸°$^N‰ë¦>ÔŽlzËᜎÚgò4>ìÜQ‡Eá£wÎH¨7|¨0€Ä{(b >W$l˜Ï™·Ÿ;˜XTJõÇÁîp=òøñÏ6j€Sšþ4DÙA]&G™¥Wâºé ¾ 7B¯du\ÎW^›À°«-izåp•Î)y&„L(|˜ß'ìͱ½;ô| µ À)M¢ì .“£ÌÒ+qÝÄÇ †*…Ù:'ñæêW¹ý&œËSiT/>$«Ý’†W‘bnArÁµ&>t8ÙÆJð>úû,äŠR]×AfÉðÏ6j€Sšþ4DÙA]&G™¥WÒº æH,F'h‡Â¹Ñ“x_§WD‡MyÒhí„Û·›²Z)ËÙžKõîÃÕ“—e=xnØ›Ò>reYýâ—òÎÍßÉ÷A؉‡ÓcÃG0Œ+'‹µð½ƒõhχΠYŒ½Fr³ýß2“÷—åFãŽTõÊf±Ùn­ËJçÞ-‹RZY—–ÿèÜ FËûÛØú®©3½ç{2ƒ8¢pJÓÁ?MŸ£¡.“£ÌÒáÑ£Gæ§®ÁëÆÜ)Ü|¸ÄOòëRßsRiOd»WÊ+â5ìMØýµ¬¼s]n˜Ý\ёȄ÷âŠ|V¿h&œG?[÷dwï’—âõëA¯Gg]{CôÀKz²}lt¸×`ôy³ªÝ¬ÉbÏïýÂÌí17 ʨÌóÙî\ÌÌ“‰‡;sá00úüýårô^0³‰#�§4üg¹!B/ê29Ê,´ÖÖÖÌZˆº‰ÙþLVªWïêzꇘ“‰zCf½\Ã!lÝ;ÕG‡´uÃIïöf˜ž¦Åš4µ MÏRxÕ³]õ¢”ídþÆ¿�Ni:ø§é³`4Ôer”Y:h=èrûöm³…ºéõBšµ—"½+*¼ïG¹ôlÌIχ:(|„?ï7 ßÎõÑçîa£T9ë‡íùBêå‹£]z9%øWÀ)Møì .“£ÌÒAëÁ.—.]êl;< ‹Ò%ù%nGÕn5Ä«˜›Ë¢”jõDC®”>w–õÑû©Ä½~ØX½#µ“+ÒÜ ‡^åO—äµã¦GdÆqDà”¦ƒÿ¬7Dè¢.“£ÌÒáĉA]ØåÂ… ÔÍ„Ìv¹ÚÞ Û»a×Í\šÎ $í•Àô aHyÅÌó°(,J1˜ûö(é’Î\Ç¿�Ni:øÓÀgu™e6]ÏŸ?—f³,÷îÝÏó‚å¯þꯂºˆ/¿Y.×°gÃ~?NÊuï|Ϻö†´[kæ*XºÍ\íª“*âáÅßÌõž/éÁ¿�Ni:øÏrC„^Ôer”Ùhö W¯^•3gÎË«¯¾”³]ìv]ìãúÓŸö<Æ>ãG¹fµ À)M¢ì .“KW™õ»‡¿µÚ½ÉÜ¢”íý(¶›R¯•¤?'ÞÚeóÝÿ;Ù\·ëGÌ%HÕŽ´t/3[(ÉJì³£„ ]l(Ñ¥}®}=}} 5ú3ÆrÍ6j€Sšþ4D³IOÎâf³.í wäæi-½˜½Âd¥©ÌúÞà zl{χಡvܺ>׌Î=!¥ämøC/ÉzÜ\V´Þx/¿$µ-ÿµÌ ÷Ì>k”0‘”†ýüÇŽëÜócäºi·d½j'hÛrpè·îɇ£WŸªK­´¹QÝ·âó©ºqÝl'0(j€Sšþ4D³IOG»/BxR¤Ï –BôÎÐñ›¶E¯ì£1ÿep‚e÷çŠUYÝøDjå›Ò2Tw ÷tÂFœ~þ49èJ>½ÌÕ˜:'ÌñuS‡ñõ൷#a%ºN(ý>ëgˆ]ÞNÜòKžlîšpeïïÐ#rU«QÃGòkØÐpt£"ÅÜxêg´rEÚQ»�œÒtð§!šMöd-@†«K{ò•“By521Ó§—¥ÌGÿ¾%µ%Éé_×+w.ñÙ¹è'oûŸ`OÞaÿíœ «øÐð÷‘ܰ—\*|h/ˆÿXçÉøá=LÇ%éqˆ—ÝL�_øˆ„£1ý9ìï<&‹Úà”¦ƒ? Ñl²áC{Ò6\]êÉÍ’œ.½†ŠÎœ�ŸžHµ'dmÙnT¥Ð3!B‡ù,_êä-KácØ ØÖá#u\ ¥+âÕRï9a"|ä–ÅÛ´7¬;\Ož<1?uT7‰B@šÃGhœÿFÆýGºP»�œÒtð§!šMÑð¡‹áêRO¼Îú'¡¿5sŽû'8OÃ]=á#¼>þÂX.I¹#­Î$èE|ì‰U|Hwý¢÷QwvyU67»—ÔÌWÝåÙêWf㺚“.öutq;øá ¨Þùqö´¾òçäÆõ+r³õû°~:ó6Ì<øºym;¿¤{ÇlíÕº(+)ºÜh¿ºÙW0g¨[aÁ–l7?–Jç¬Ñž¾hø°!-|n"žœß½´«ÿš§Oßëðyñ9 ‘õ‹ž¬Ùù(…sRß|ØŸ’3sq"ƒÓúou^Ñ¢pJÓÁ?ë QVéÉlp"[’3áCÿÒ¾½.=Á²†ÎÍ»z'%'gzPìMÀìdçžlý]Âõî$l0ì$lÿD/˜”½kzdÌIyBúº“ Étw]÷0hþZjö$·´"«µ×ürÐ+ZmȺž<ÛÇæÏ‹w½{½g=èýx €þâ¸ÚÕaÓÏ5´==&`=i™ù Ý O›²ZY–¥êZgâ“óƒ3G¥<Þ)õsþwѼ¯ù ú{ëöß–· ÁkkÊ~ýú¯oþ æJu?v>c¯’æº Ç¼ Eà4îƒИ±°øKr‘ðá³'CÁ‰þSÿDȆ{"5òÐs‡áÈÉUüĪßzø—íøztRüà´Ì&&0šá¾ÏÆžðÑ«÷;eÂGî§R|¹Ð;ô°Ócÿ·¦ÏÝ {¦¢<þ¾ýÖ÷ÌM1‚BRác0Ú¬$˜g„�Ni:øg¹!Ê2=Yîž-È¥K—†¬ËÞð ‰ þz›“Âù‹R÷°+ÇIáa‡¤ÓHu³OøÐ‹#Ü ®e„~‡løø‰~’“œ^!«Ódöt¥¬h '|*=Þ¾}Û¬Í'Žh�œÒtðçäk6EÇ6¸j¸ºŒ‡eî ¡¯ß9±²óüPâšp®Ï©^î?$Ë =ISÏÒi¤ºÙs’oBu¡$5ïŽ|Q¿ùNuCÄúCíù‹^xÁ×äüø¼áãPEï3¯8¢pJÓÁŸ“¯ÙdÇ j¨º &.¿ìŸÔ˜IæVgBs䯺ùz©]OÁDeß¶Ž“/ËY{·íÙa,æ¦o×Ô ¥½*Ïz&YwCOwNG8$¾ž“ÅÚFâ9 |ÿÓk¤ºÑËDëðArÍI¸nç|äâ¤z³öêßu»¯{á…ƒ&çÛïž½)¤ó¡ór‚ï£ùpÿ\ñ0nç…ÄzZýiè8qâ„Y›_Ñ�8¥éàÏÉ×l²ó¢×eÐcöžèÒýëk¨ÝZ•òñj7|ìÕ§ÌÄYÉ+â%™¬½ótnIÞ½rZòúézSž'Yö3ä|¥Ô³^ñj‘Ï_OÞû¡ÏC: ]7±ïu8Áþ‰¹G¿®“ëWkr:燆ò ñ.ºOÎ7Ô÷ŸœÝç‡òw/K)ïëZ]š:gÊ<öµòç+r>º^¹.×µ—cŸõð½{¯¾5Ìw<N_'‹ôxýc̼âˆÀ)Mÿ¬6DY纚 u™e–^ÔÍddµ\çý»ÿj�8¥éàOŸÔer”YzQ7“‘Årå»]ü«à”¦ƒ? |v¤¡.ñévˆˆc‰M¤=lú™NÔÍdd±\¹Änÿj�8¥éàOŸÔer”YziݰLfÉ.±ÛÅ €SšþYlˆæu™eÌ>.±ÛÅ €á“@]&G™³åêÕ«=˹Än/Žh�œ˜ê29Ê ˜-:ÄJÿÝêráÂ…`ùû¿ÿ{³Ñ�8¥é„‡“¯ì .“£Ì€ÙòäÉ“àßm|ÑKíê½>¸Ã9�8è2-ÒôY0ê29Ê ˜=2ôßî~‹Ú×ËîrDà¤Ç´HÓgÁh¨Ëä(3`öh°ÐIæúï7ºè6 &ó|¿Žh�œÒt“¦Ï‚ÑP—ÉQfÀlŠ÷~è\n2Hø�°4ðpò•Ôer”0›lï‡Þ\Pç Ä €á“ uÉ’|Ðåú7Â2že8¢pšÖAhiú,�€ÃE›0„�‡Šð�H£ì· »ÒòNÊB¾"]³i �á�Fƒ· ߊWÌ–BUÛm³ÏœàÛ} y)zßš};ÒjüRj¥ÅÎþ\±*«ŸH­|SZæQY£¿ç4ТpšÖAhiú,�€Ã•¼MØ–F¥à?/'…òª´lþP[u)åËRß²·d£¶$¹…#R¬|,MVÚ­†x•¢äFîØ‘MïœTÛf==�á�FÃ…%9]z9 µÏü-ÆnC*Gm hËv£* )•õîc¬öCñ–/>ü×ßX‘b® Â�ô"|��Òh¸ðqV¼Íߊ·tÄþqÿäÿi¸«'|<–z騿ÿ%©5_»‡Õn­J¹ó_kQÊ7®H¹º.Oƒàa‡yùKñ¿Ê¿ÕkR*•biÙ=ºÍ“ÖvSêµ’l/‹]/^“Æúeó‘ßACMÓó_Gß/òú ÉBŽ>ghÑ8Më 4ˆ4}�ÀáJÞ&˜ðÑòÏä·×¥¢'é¹e?Œìô†ö†Ôu_tÖ04ÄüDk~,Ø‘Výœ¯4Dßb·Q‘¼ áÏŽÈ’÷Ь²CÄüíAøx!ÍÚKáºdJÞ†lkŒ†( *ÁSôwÊ›Þ;l,y€šV[K‹À)M'üiú,�€Ã•¼Mˆ„_{Ó“¥œN"_‘§þ‰» Dòö¤?xè”`’zsËl EÇk=dHçs˜u6âû[žŽJ©þ8Ø®G'ІðàP>��i4jø®fU?Îí8QJcvU(‹gBÈDÂG{SêåEÉ-y²Ù¶óVèù�0c�€4=|¨§þ¶ãa8èœä·e«^–Ü~Îõ9ÕË †dé%{=©t†rM$|h؉Î'É¥ºÞ2ø7­¶–€SšNøÓôY��ÓóüùsóSWâ6!˜#ñ²‚o'hvîDç$^·…½:£Xñ¤ÑÚ ·o7eµR–³õÍNêýpP-™�`MOø8*¥Õu¹ùÎ-ùbUÃN<|˜˜Îç2ë‹5ioÛÌUYŒ½Fr„�‡Šð�8lžçÉÚÚšY %j‚ù¦GÀ_òfâ·\•êxµ>[Ò ®BÕ½zT®X¯1ho‚>V®ˆw£^Á*ÚÑ™ð¾$ï^9íûÙl�1½v{¾$•ó‘õbM¼è~í ±!Ên –œJ^ç>%ƒÐçM-:�§i„‘¦Ï�˜ ÚDmBÌög²RýH6{r†+;™¨7„ðàP>��‡Í†]l�¡Mˆ /Å›+^–u;DL ïåÒ²AÏ€Y‘¦ƒ; �̧høÐEÈa· á¼îgÚ³t&†OG»Õ¯R”\ç3,J©VO4äJés§€Ó´BƒHÓg�LO<|Øã7­r¥ö�8¥éàNCLž=©ca™…ã7­r¥ö�8¥éàNCLÿÎFñžK—.ñ]i•+µÀ)Mw`òøw†4І ŠïêdL«\©=�Ni:¸ÓÐ�“Ç¿3¤‘ 6x¨Ñ¿«z5¨ºÔJ‹‘û~|+^1¿ç> ódZÇ�Ž4�œÒt"ÂI0yü;Ciøˆ5òwu·!•|Ø›2Ïa#nZÇ�Ž4�œÒt"ÂI0yü;C=zôÈüÔ5–ïª „.€CEø�æ ÿÎ0+“Aø�p¨À|áßfŰßÕvkMªÅ#þósR8}ZŠ9>âs@"ë=Y«šøÎI}ó¡¬ÛõÜ’Ô6¶Ì«GÙçÿTŠ7>é>¾P•Fpã?Ýÿ±T‚ϢÿüÏS^•–îÚnJ½V’Bþœxk—ƒÏ¨7 ,×'›ëvýˆkŸÉvð^ú{­ËŠÿYÃ×Z”ÒÊzøZ MëÀ‘€SxKÏ’.\îÐ ¤M–þ!Û†ú®n¯K¥pTŠÕ5ÿÄ|GZõsRð_'ñ9 í ©-æÂöÇŒö¦'Kzâ_(‹×ôGðz9É•ê²'~DŸo>?/Eï[ÿÛÒ¨ÌÐwdÓ[öÃÉKRk>•fí¥ðy6`´Š·¤!ÅÞ†ÿ̧þsûŸ«,õ-?aû &ŒØß먔êÃÏ’ÀPå:Ž4�œÂƒ_z–¬h6›râÄ 9sæŒs,3pX²ôï Ù–ü»Ú–­zYrö„]Ň]õ[ßs5¬p= ÁómذëÑ×ëÚmT$¿PJCû2L0ÉW¤~iy'÷®/œ¯µ+ífM#m¥]\ïÓOòrG�NÓ: "MŸe\ô .ÇŽ“«W¯ÊóçÏÍVàðdñß²)ùw5~BïKAøh·róFÅ ¥.|„ÁE{M^èΑ>�*ÂÇä=yò$†¥!„¡X8l„ÌŠäßÕáp¦Ôô|˜áQ…’Ô¼;òEýâÐ=aø8"KÞCbšG€CEø˜†b! ˜Ã|WÃáI9)”<in¿èÌùÐÉÞ‹µ ioÕ¥Ô™€î3ë9fG|}a±&M×Yð|óÚuóú&ˆ„¯eç|äâ¤z³!õÒÑHPŠ'³n{;ìçÈ¥ºÞòß«-ÛHyżo„�‡Šð1} Å€þ†kv¤½ZÔ»—¥”_”R­.ͧëAÐ×Õ%¾"ç£ë•ër]{9öYßÓûaÂE¸?/Åë×{×½û²Q[2WÀ*ÉÊjMNûA¥P¾!ÞÅ‚yœ¿äÏ‹w]{9öY·ó>:WñÒm\í ÀŒšÖAhiú,“¦C±´„¡X�à6OmÂ4>�*ÂÇáºwïC±�Àð1„�‡Šðqøtè•ÅÒߟ¡X�"|LáÀ¡"|¤C±� KÛ–É,Ó@ø�à4­ƒÐ ÒôYC±��³Ž€á#¢C±��˜5´^�œé¦C±��˜5´è�œÀ,iËv³.µÒO¥xãY¯Í=ªÒØÖ þëþ¥Ò¹€ÞS`5¼ÀvSêµ’òçÄ[³÷AX”rýw²½/Bí3Ñû/«vk]VJ‹æµ†¿¯�€ùC‹À‰ð1«¶¤Y¯I©°(•†9UlyR\(tב=ö.ÇAà(‹×Ü’ö¦'K9½¡Ù·þ¶¥Q)˜›¡Ù;*ë’Ÿš»%GFû¡xKRüPámøÏ|ê?÷x÷ËÁþ‚ #;æNÑG¥T~�8�-:�'ÂÇlÚmT$œH6æNpWe6ìºÞ¹!»á–Žð{b¿#&˜ä+Ò¸ëçÕ“{×íÝ”›5Y ¾c½‹ë}� Ž€SšNøÓôYfAï‰%æÆ�á£ÝjÈÍ3”j¸ð~¿´×ä…î€DhÑ8>fácN>Ìð¨BIjÞù¢~qèžðûuD–¼‡Â4�IÑ¢p"|ÌÿIJ31xQN—^–\çÄ2>¤»~ÑûHªÁäpòñææšY_\qE6‚‰Ê˜[u)år²XÛCA°n‡ "¹RÝÿØ9¹xã©ÞlH½t´;§C^„ó@âë¶·ÃÎ/É¥ºÞòß«-ÛHyż/�€€ácVø'~ªì‰`{Sêe½ Q>¿Rw‡ØDÇë‡ã…9õHÉ“æönøzL ž-&\h½.,ä¥xýzïºw_6jKæ X%YY­Éi?¨Ê7Ä»X0ó—üyñ®k/Ç>ëvÞG«T¹Ú€$hÑ8éIEZ¤é³¤Ïãà¯Öá_´CñaWýÖ%~5¬`=2|�€1¡EàDø˜ŽIÅ„�@ZÑ¢p"|Ì3þ~Vz>´.Y’/H'W]±ŒgAvQ»�œÒtð§!:ˆ ln×™ó¡ ¸N~&[õrdzÛ¬wçt„ó@â둉ËcD]&G™¥—ÖÍÏ~ö³=Ë~Ûué·o”纶ë2É×um×eÔ÷DvQ»�œÒtð§!ê£Ý’õj1œLœ[’w¯œ–¼^RµÞ”§A/Gx “ÎÏWJ=ë¯&Å}×ÇßûA]&G™¥—ÖÍ~'Ï®íºôÛ7Ês]Ûuþu—å•_øÇ€ȵå½û'óžá>dµ À)M¢ì .“£ÌÒKëÆž,ÛŸãK°ï•_H÷Úqmyöຼn÷-œ”;4ûÔäÎ[Ëæ¹Gä•Êu¹ûÍfŸÿìÇŸËGWþEê7䕃ÞsŸ}º´ûtIò\ýÙEípJÓÁŸ†(;¨Ëä(³ôÒºq<G—ž}Ë×äA3~¯oUÂÞÊ`ß)yãÖ×òã7·äÎsßr}Ó*;òøÁÿ!ï½~*Ø~ê­krçÁci›‹MØ÷‰.}]‚ý¹e¹ÓúÍžƒž;ì>]’<WFvQ»�œÒtð§!Êê2¹i•u“œ–Yô$:zòìÚ®á£ñô¡|óøÏ"í?ÊÝ+otö-_{ /Ì0I #¯_û\žEzIô1×=õöžà°ï{ú‹îëÝÿ†\¹ûGi›áTýžëÚ®K²÷ܻߵ]݇ì¢v8¥éàOC”.\'Ož˜µáP—ÉM«Ì¨›ä´Ìö;yvmÂÇ·¿JåŽüQ¯æðìs¹fz4zÃÇ›rë›ÿOåî{§;Ïß÷uýŽï5yëÖo%¸ŽÝöòïw¿”ϯUÂà¡Û?Êïñ¿É{·îÊ7Ïväñ7-?ôøß‘·^/˜;ö,)~ zï–ÜýæÉãÿ¹þùãð5"¿CšÞ»ã¿NüRÏäÁµ×#Ÿ‹ð1Ϩ]�Ni:øÓ¥Ã¥K—䨱câyžÙ’u™Ü´ÊŒºINËÌž,ÛŸãKÏ>võÿ¤ÞôlןÛôÃÈ©0|ì<¸&Ëú¸SWäîþ ¼¹”vü5uè=߸%ß´M€9U‘[_ÿ1ÁÅ%ôêw¦çCß;œuògÙüÅr0ìg?{]®=bHø¸×®H}Ë„Šg_Ë÷ÞSAˆúÑÏ)Õð= UyðìGÓ[czWL€èóFÖ‘]Ô.�§4üiˆÒ£ÙlÊ«¯¾*'Nœ~NŠºLnZeFÝ$§e=‰Žž<»¶Ûž·‚õפr§åŸœÿYßý'9íù°sCbW™Ú÷uýŹ/–ß7>R!bL°ˆ » H¼‡âõž~®0lèþ…|%øœ?ÚÐôÖy,;òÍ­7ƒ× 'Úw]úý.È.j€Sšþ4Désûöí $éP,ê2¹i•u“œ–Ù~'Ï®í½áÃ_‚Þ½’Õÿ+_>ØœÀ°«7ä½;_‡Ã®tþÈ7wÌÄõ …óû´ÿxG–r9)TÖýWìýìÒïwAvQ»�œÒtð§!J§çÏŸ<K÷?zôˆº´ʌºINËÌž,ÛŸãKÏ>=y†]EöC•ÂáL“xsõ«¶ÿßv£Ú™pÞ]ÎJe}mð!Y§Þ’kwÈcÉõÍ-YŒ »ÒÇØðѨ"Ï…?l4vw»=¦‡F?wxÿ œ¼~e=xŸ@û±|~ý-9å?vÏgŠ,ñ}ú3²‹Úà”¦ƒ? Qºí7KÉҞ (Ú[2›u¹%ÍzMJ…Es—x_Ë“¢=›°i•ÿÎf¿ÏQZf®“çèÝÌ‘ø¡;AÛî çNDÇ¿œªHmc˽Ôî¹öÖkáö×ß“|-_Ô–ÌÜŒî{Ù¥óž~8øü¿‘ëÁsÃÞ”žðÑþZ>úoÿ§Ü¯_’¿ ÂN<|˜>kÒl·å‡»W‚@늄\YîþðÞÉå=Ÿ)¶ÝµOFvQ»�œÒtð§!š v(–ö†è‰šöv¬­­C³´íÿ÷­xÅ|ðœ`)T¥±mÿ¤ºëŸÿŸìîë¹ûŽ´¿”Zi±³?W¬ÊêÆ'R+ß”–yÔ v;w‰ŸN؈ÓÏ? ÓzŸY¥;@´Ì¢'ÑÑ“çÞmËòÖ?˜g©øð¦ðªTO;îìö7ÌU¨ì÷^;ÈkaoB÷q®÷ô—åÿ.ë÷%7›bô¹6ˆØKùê¶u9Wûµ™p®ìg‹L8ßãGyü«_Ic׬Úyz à?þÙl³¢Ã½ºŸm¿²Ó…ïb¶Q»�œÒtð§!šÑ¡X÷wÔ]|InÛü56'…òª´ºça"[u)åËÝ«ðÈ–l>"ÅÊÇÒ4a¥ÝjˆW)J.6lJ$ „y¦å ºm¿“g×v]úíå¹®íºLòu{¶½þO²þùíàê]Ý÷<뇘?ìé é÷ºÈ.j€Sšþ4D³G‡_ýå_þePwñ%9 Krºôr*jŸ™ ´>½ËóQ(Âññ )•õîc¬öCñ–/>ö1­÷™Uöû ºnO–íÏñeØ}º û܃öé2ìsÞwTJõÇ‘ÞÝÞ÷ãëo>‘r!7ðëêÏÈ.j€Sšþ4D³éÌ™3“Šè’œ†³âmþV¼¥#þk÷CÀÓpWOøx,õÒQÿKRk¾voGZë—¥˜Óϼh‚ ñ9 Ýõ‹ÞGR-êg {i67×̺ýZ‘ΰ±Á WfÉ ö>Ïä»ûuù°zUþã«Ïä£÷/ʹsoJõÖ—–¸¿ÿ7Éûožó·ëò¶üüþŸüXè{ñܯ(Õ ž|úàcóÝÿùÓ—vý¢¼_h^kW¾ÿêßý÷z3|­ê‡rç«ïÃ×:öû«‹ úsô$:zòìÚ®K¿}ƒ?÷ aQ*rUªD¯;ü¾So]“;ÌÍ[òÍÝ[{†\éÒïu‘]Ô.�§4üiˆf½²•kI΄–Ÿ0¶×¥¢AÍ-ûad§7|˜²é¤×î0¬a˜”\Qªë-i·7¥^Öù#aøˆÏi7k²h~·0`¼MOoÔæ’'Íí]Ó#þe8©áÊ,¹AÞ§ý]]ÞB…8>üT¾{±#úôª¼yîŸåÓïõ²G_É­ äýOýß³ý?åÓšNÞ®Ëwíù®þaˆ°Ãî÷ȇŸ>òÇòÕ­soþ\î?kKûOŸJíBMêüìöŸäþÏßîì; öûk úÿýNž]Ûué·o”纶ë2É×um×eÔ÷DvQ»�œÆ}ð·  Kr‘ðákoz²”3'úOý0bÇ‘¼ÿCÎëè {Pr¥º„Ót÷»ê·¾çjXÁztRüà\e8­%úþÖ_Ý’ 6ltÖ«rë«xoÓ ?LTåÜ…[òUðÐøúòý§ÿ¼w=xí‘°]zß'þY•ý9ºÏ.ÑíÑŸ£‹ÝnÅ÷Ç{²lŽ/ÃîÓeØç´O—aŸ;ì>]’<WFvQ»�œÒtð§!š-z…+pþòË/wN*t±)N®7|C¢êç¹ç/JiÜîLˆÉWbßñ°ÃGšô:\êÿ–ÿ¸õ¾¼©a¨ð¡½ þcƒ^Ýwø¢ße]ô{®ÿw<G—a÷é2ìsڧ˰ÏvŸ.Iž«?#»¨]�Ni:øÓÍ{Çs½Ô®=©ˆŽ‘O.>ÔSÛñðõ;=mÙª—ÃáN® çúœêåþC²Ìð­4õ|¤Éá#õRýðßäÓû_Éý¡{>Løxóª|ú§h½û]ÖEƒ‡Ý=‰Žž<»¶ëÒoß(Ïum×e’¯ëڮ˨ï‰ì¢v8¥éàOC4›løˆ_(1½JÕÒËþ‰¼™dnÛô³êÌÏÐKízÒhí„Û·›²Z)ËÙúæ�–_H³ö’ÿ‹Rò6d»óšz2¥½*ÏLȱᆞpH|='‹µÞ¿Wº¾ÿmyvÿçòæ¹”úwZ¶v= ayK>¼ïÇ6;§ã‚'ÿ±öo²þý÷rÿ÷"ó6Ì<øºym;¿äÍ÷?–/¿× ~&ê7åNð¾ÓÖ7x(]ßïäÙµ]—ž}§Þ’ëŸÛ Ú?Hóe)¸žûú{rëî7²½ÛèÜ‘<¾ô{Ïp¿^}ê–Üýæ‡È «ò‹ßïöÞà0² ü»Ä–î{î¿ßµ]݇ì¢v8¥éàOC4›4|Dƒ‡J\—AAx£Kt(”j·V¥|¼›ãa¯>^ÚS—\±"^£5ø‰»%ëÕ¢(üçç–äÝ+§%_(I­ÞìÜ.|킜¯”zÖ+^-ò™ãëÉ{?ôyi† ;ÿâŸeíÓÿѳþéwÿÔí°>¼#¿©ÿw?˜è­É—Ú“a{áȧkÚ˱ÏzÐûñÿÉ÷«`ùK ®v J·Ù“eûs|Ùßk²ô‹‡²»ù ©,WäÖ×?øù㮼wªû˜ð¹…îU­ÌÆ»û¾çò5yvX½uû…D¯ë¨kë~0 ^Uo(øI÷nì‘%ÉëêÏÈ.j€Sšþ4D³Iïõ ŠºLŽ2K‡{÷º´n\'ÏÑeÿ}aÃ~!@—îsÍeuG ºøDÃúxÂÇ)yãÖ—òÇÏÿU^É…——~ì§Ãöï7<ø¹ûïÓŸ‘]Ô.�§4üiˆ²ƒºLŽ2K/­›èItôäÙµ]—Î>Ó î¤ûÜÏ5ácäaWþú>ï}|t9xßKrëó_EzkNË{wuxää¯äGx]¾óYFípJÓÁŸ†(;ÒP—áäððd̹=i™Ç¦~&¤“ÖÍ~'Ï®íºûÞº#½w|y&®½!…ÒÒø½ÓÒ–g_$o'öÑð±,oÝùƒyŒ ¯É+•å{”gßÈúµ·ä”yÏÜ+—e=x]ÿ5= z'Âç…s@êÍ­žõ`NÈÞ‘µóQžýVnUÞîÎOiÿQî^yÃñ{šÏöÃ])7èìSŽíºè>dµ À)M¢ì .“£ÌÒKëÆž,ÛŸã˾ûö 2ãñyË•;:G)¼|tϰ«³ïÉGZ²¹~Y^ñOðõµNUîÈ ÁÏNU¤¶¡þ7äÖ§äg¯_—Ïväñçÿê™×ä­[¿ ægSWºWƒ3#xmÝôìkùEiQ UÿõÚÒþæ–¼ù}Âßó%¹å—?Þy»|z÷VFú3²‹Úà”¦ƒ? QvP—ÉQfé¥uã:yŽ.ûîë3÷bùÚÙ .3]ð×Møhÿ/yüä™<¾ûOÁU±Â×µCⶃޔ7n}-íö×aÑ׎¿ol–½zœ]×¹)wÿ¬‡=†'ƒõ0$u?ÄõŽùáþÁËHFvQ»�œÒtð§!Êê29Ê,½´n¢'ÑÑ“g×v]:ûb'ýv_ÔÿýA04*Žõº¿Ï†gòìE;6¡ÛìÛª÷\)«gŸ¹qf°-þ¾&ŒD×{ˆ Ýφ ¯DÏׯ˃Ç÷åÚëaÈÑße rp,ºÙEípJÓÁŸ†(;¨Ëä(³ôÒºÙïäÙµ]—ξ=áã5y¥ö™lo7åîÿ]þÛ­ÿ”ãáÃ×ßÖaPz?^žgƒÉC¹S‰_âÖôŠ˜g:ßwáãõ’»ß<[‘Kìêï9P98݇ì¢v8¥éàOC”Ôer”YziÝØ“eûs|Ùwß·¤ÙösA³Î0'ýá\ ;çc[~}ócù¼~Mn}³£‰@®-Û}á]þõµN½wW~ð?Oûñoäº�ô™åú¯eý½ÓfŸÞ㎼÷úéΜÿÑòÃÝ+rÊÿßøŸ£6káç²s:N]‘»?„s<õwÉ•ƒõÎ=INUäÖç÷¤öÊó{ž’ׯ|"_¯û¯­Ï7K’2ÒŸ‘]Ô.�§4üiˆ²ƒºLŽ2K/­›èItôäÙµ]—`ßž«]ýAî¼uÎ æüzµªîÊ£¶^ñêßåÎ> øñK¹ó«îÕ®ìõWªkf¨–¯çjWá¾ßûþ,ïýF¾ùñùæî-yïìõ ðX?~ù@¾Œ®?ø•üò÷»f-\ÿ•özXÛå›Ç6+QOƒ‰ò}ËÁ±]݇ì¢v8¥éàOC”Ôer”YziÝìwòìÚ®K¿}£<×µ]—ƒ^÷¯ÿú¯§þžºôÛ‡ì¢v8¥éàOC”Ôer”YziÝØ“eûs|vŸ.Ã>÷ }ºØýÿå¿ü—àÿó7³g_ôñ£îÓ%Ésõgdµ À)M¢ì .“£ÌÒKëÆuò]†Ý§Ë°ÏÝoŸörüä'?éì×E×£Ùï¹£ìÓ%Ésõgdµ À)M¢ì°',ɤ“«®XƳ »¨]�Ni:øÓÀhîÝ»×sr¯Ëßþíßš½ÀôТpJÓ š> �̪'Nô„¿ø‹¿3gΘ½ÀtТp"|�@¶xž× Dž?.Íf3Øg·“Æ· €Sš!D�Ý“'O:!CƒˆË£GäÂ… ²¶¶f¶�ãE‹À‰ð�Ù£ÁB©Úëá¢Û5x¼úê«rìØ±}C 0,Zt�N„�Èx~éÒ%³v0í±áC‰öœ�£¢EàDø�€lÚ¯×ã ·oß‚Ktž0 Zt�N„�@œö~èdu]´W„Þ$E‹À‰ð�Øö~èð- !@´è�œ�€AéqÚ«é ÁAhÑ8>��Ié$u=fëUµtŽG‹À‰ð�†NJ× êvnE‹À‰ð�•½²ÖÕ«W‡è y&ßݯˇշåÖW/̶¨~û‘F´è�œ�€qÑy ºè°¬A{CÚßÕåísçäܹª3\üøÕ-¹pÀ~¤-:�'Â�`’Ü'$ û‡‹~û‘>´è�œ�€ÃFøÈZt�N„�Àä=“ï~ó‘¼ÿ¦Ÿò—ê‡rç«ï¥möî »òý—›Ç¿-×>ü¯ò&ác¦Ð¢p"|��&«-/¾úHªoÖ¤þ虿ú'¹ÿó·ýPñ~˜ø!xDoø°_>úÒ(Ç>f -:�'Â�`²˧ï_7?¼/~ô=»/¾y®³­7|lÉýßêy<îf-:�'Â�`¢~üJn]8'n}%?šM6œ{ÿSùÞ_ë ŽÇ>f-:�'=áOÓ�Șö#©¿ý¦œ{».ßÙIÁ¶ òvýQ0ï£'\˜ÇÓó1ÛhÑ8¹Àa.�€¬Ù•?}zUÞ<wQÞ¯?”:™ü¾'Õ7¯Ê§Úõ÷·åÙýŸûûß’ïoùë;ò]ýƒ‰æ~úH^tæ|èäó”úw;Á«"ÝhÑ8¥é„Ÿð�YõL¾ûôçR „^íêçòéwa¿FØ«a¶wz?¾—/?zß$þ¶7k²úo×äBõC©ßÿÎ/!½™!Ò‹€á�0‹´Í¸pá‚Ü»wÏlAšÐ¢p"|��f‘ö|xž''NœW_}ÕlEZТp"|��f‚uéÒ%zBR‚€á�= ‚ˆþ_ƒH³Ù4{0m´è�œ�€¬yþüygH–.kkkf¦…€á�e: Kƒ¦‹€á�0/´ÑE‡eݾ};è!ÁdТp"|��æÎ ÑËôj»ÃÜÉ EàDø��Ì+{¹Þ3gÎëÚ#‚ñ EàDø�� ¤!DçˆØ+fax´è�œ��ôÒaXöJYÌ -:�'Â��nÚ ¢sC4„ Zt�N„��óꫯrÏÑ¢p"|��ŒöˆØ Â,7Zt�N„L‚Ö%Kòéäª+–ñ,³Lƒ‡NP?vì˜\½zÕl…Å €Sšþ³Þ¡‹ºLŽ2K/êf2²R®ze,†bíÅ¿�Ni:øÓÀgu™e–^ÔÍdP®ÙFípJÓÁŸ†(;¨Ëä(³ôÊ~ÝìJË;) ùŠ4vͦ)à;ŸmÔ.�§4üiˆ²ƒºLŽ2K¯ë¦åIѬ>~a!'…ʺl›]"ߊWÌ›}ºœ¯eÏôw¤Õø¥ÔJ‹ý¹bUV7>‘Zù¦´Ì£²FOdµ À)M¢ì .“£ÌÒ+qÝì6¤’×±(åú¦´ÍfñÚª—%_ªË–Ù"þOµ%É-‘båcin‡n·âUŠ’µ7¢ýP¼åËSíÑßùl£v8¥éàOC”Ôer”Yz%® Ç—¥T<" ¹%©mt£Æn£"G+ ³@[¶U)ìé%1F&ØLy8Õ øÎgµ À)M¢ì .“£ÌÒ+qÝhø8éÉæ¦'K¹Y(T¥az4zÃÇc©—Žú¯ÿ’Ôš/‚-ÃÙ‘Výœbô½ÎÊÚy©66MJ8Œka!/Eï¾4ë5)ŽJ±´>¾èIk»)õZI AHñQ³.µÒO¥xãY¯Ã׈üAhjzþëäÌkÛ¥ •Æžµ¯Ä劙BípJÓÁŸ†(;¨Ëä(³ôJ\7&|´:= ’[òÈîÞ>ÚR[ôOàse©oug%¶U—RΘö¦ÔËK&lK£RèL$×÷ÎûŸeaáˆ,yÍp0óÝ®Û1ŸI× eñš[þKjˆÒðòmð Ù^—J!ozkì°±äŠï|¶Q»�œÒtð§!Êê29Ê,½×M'|¨Ùô–Ã9µÏäi4|ع!£‹ ÂGPoøPa�‰÷PÄ|®HØ0Ÿ3o?w0±þ¨”êƒÝázäñâ;ŸmÔ.�§4üiˆ²ƒºLŽ2K¯ÄuÓ>|Ao„^É긜¯¼6aW[ÒôÊá0*?RòL™Pø0¿OØ›c{wèù@/j€Sšþ4DÙA]&G™¥W⺉‡ U ‡3uNâÍÕ¯rûM8—§Ò¨^|HV»% ¯"ÅÜ‚ä‚+jM(|èp²•à}ô÷YÈ¥º®ƒÌ’á;ŸmÔ.�§4üiˆfÓóçÏÍO]³Y—[f2îb÷Ä,N’lí°øþ§Ã“'OÌO]Ië&˜#±  çNDOâ}^6åI£µnßnÊj¥,g{.Õ»?TO^–õà¹aoJOøÈ•eõ‹_Ê;7'ßa'þ6=06|ør²XÛß;Xö|è¼È¿“!ñÏ6j€Sšþ4D³Éó<Y[[3k¡du»ùZÏUuÌ—í¾žqåã½1[w2îtÂFœ~~¾cÇŽÉ£GÌZhðº‰_ãߥðªTÇ£á#`ƒo÷êQ¹bE¼Æ€½ »¿–•w®Ë óo!W´A$2ὸ"ŸÕ/šïxô³™€ÒÙ]üoׯ½uý÷§—�^:yœ.Ñá^ƒÑç!»¨]�Ni:øÓÍ& ZwÑ�2\]Ú“ ÿ$¦¼*­è9Œþå5½"ÐdnÌæ’2|ÿÓAë!@¨›˜íÏd¥úQpõ®®§þ¿ß“‰þíP®ÙFípJÓÁŸ†h6Ùð¡‹ ÃÕ¥†%9]z¹se ÎiŒŽ9?j…ýkîøoÌFø€ý.GuõBšµ—"½+Êÿ7Ùô¤\ú@6èù€AípJÓÁŸ†h6EÇ.@†«K gÅÛü­ÒqÜOÃ]=ác\WR;ÒZ¿l&Î.šàcÃG|Hwý¢÷‘TõîÕ¦—fssͬ‡Ã[’œ€YÕ٤ØßuYn4ît×NØó÷¯V»Žý²+Û¹ Öo­[¶åúïd³SÖÑp©Ãç>è9*”deÐáFþ>ábˆþ|x¥Kt(âttz;ŸaQJµz¢!WJŸ‹ì¢v8¥éàOC4›âáÃ.É™ðÑò†½2PnÙ#;½ác\7f³=(öJ=‰¿aøˆÏi7k²h~·0`¼0÷o°cÝwMLäþ Wf“Ñý]íïfדaýW?Šÿ_¬I³þU<ü˜€Ñ™àŸ z~-ëðœãú &aç—¤¶±å¿–©ƒ‘ëvxöûk úŒåšmÔ.�§qümƒÍÂ’\$|øì•‚ý§~±á#8ñõßcÈy]Ñ«…âîú­ï¹Ö7[S®2<ŒÅ W6:ë‘ßµÃüe¾Sñu3 ;¾¼öv$¬D—Þ÷Ù»ú ÆrÍ6j€Sšþ4D³)ÞóqéÒ¥!ë²7|Ø+s;Î_”Ò¸‡]™½ìéa‡4é>t¸ÔGrÿ*|h/ˆÿØ ×D÷¾èwY—ᇢÊ5Û¨]�Ni:øÓͦhøÐࡆ«ËxøPfˆŽ¾~çäuL7f3÷ÒÔó‘&†`xÔq)”®ˆWoH}èž>ìðº°ße]F»€ú¡\³Úà”¦ƒ? Ñl²áÃ5T]s^öOnÍ$sËÎ蜼ê¶1ܘÍ\µ§3¡óšz⩽*ÏLȱᆞpnD|=rs¶Òõý·¿«í]²ëaY„AÄüÞú9'7®_‘›­ß‡=Sy¦œãëæµíü’îÕ“ô2Êeeä‹ '¬ÿq\::¢Ý’õª mç¾8t&ëG¾ëCÑ«OÕƒ{àt{öÂûéôÜàð¥ë;q£v8¥éàOC4›4|Dƒ‡J\—AA÷/Îñ¤vkUÊÇ«±²o̦¢'…¹%y÷ÊiÉJR«7åip‚m?SAÎWJ=ë¯ùÌñõä½ú¼´Ã…ý]NÊuï|Ϻ×üµÔì°J+²Z{Í/C½¢Õ†¬kO†}lþ¼x×µ—cŸõ ÷ãYäŠcþ’‚«]Eƒ‡ÒmÃÛ &ëç—<ÙÜ5×9ÌÌôiŒ>ì¼(ÿµÆ6z”½Áhµ4Z¹"í¨]�Ni:øÓͦøÝ u™e–÷îÝ3?uV7IzâCÖFà˜Ó4< Pç¥ôØ´e{cÅ‹ÃõðEñÏ6j€Sšþ4DÙA]&G™¥×Hu“(¤5|Äó¥ò„ˆÚà”¦ƒ? Qv¤¡.{‡9–¢'-óØ4ÐÏ„tºnbà ÃKoÉvóc©˜›RÚU¶‚³øhø°óÃç†!âà2¶[öf—þkž> e ŸŸY¿èÉšNU8'õ͇=Cƒû¯D󪊒òfšQú; »¨]�Ni:øÓeu™e–^#ÕÍž0‚ðÎéNì„§z’¿,KÕ5LüpqÐ ƒs•bðx{™jó¾ñ9 öFþº ö¾: …²xMÿõÍ>£Wƒë†)æ| ?j€Sšþ4DÙA]&G™¥×HuÓgøSÏ%ŒmøÈýTŠ/Â;ćóEï]ÂÞ”àjdÑ;ÃÇß·ßúž¹)áúÞÂ-i®Vƒ^•œN¢!ŒT®H=j€Sšþ4DÙA]&G™¥×Hu³Oøh·róFÅ\å+>~"…Ÿäb'÷fßAWʊΙXøP&87…ï|¶Q»�œÒtð§!Êê29Ê,½Fª›='ùfH”^ÒÙ»#_Ô/îíùðOê×ê0¨#‘ÞL\7dŒßKÅ7Ñðaîû2âéùÎgµ À)M¢ì .“£ÌÒk¤ºÙªKI‡(Ù¹æ¤?\·s> rñÆR½ÙoÐô(Ø}Çý`Þxó 2Ú\†s1^tæ|èüŒàªTæstÂEüsÅïøoç…8F8±½ KÞC®v…}Q»�œÒtð§!Êê29Ê,½†®›=W»Ò›*>ñÃ’¹ºTIVVkr:§W¼º!ÞÅB÷±ñ2š êûß1ºïˆß½,¥ü¢”jui>]}­üùŠœ®W®ËuíåØg}¡øŽÔ4Ùuíµ©7MÌðôµ]Ô.�§4üiˆ²ƒºLŽ2K/êf2(×l£v8¥éàOC”Ôer”YzQ7“A¹fµ À)M¢ì .“£ÌÒ‹º™ Ê5Û¨]�Ni:øÓe‡Ö%Kòéäª+–ñ,È.j€Sšþ4D��d-:�'Â��7Zt�N„��0n´è�œ��`ÜhÑ8>��À¸Ñ¢p"|��€q£EàDø���ãF‹À‰ð��Æ€á��Œ-:�'Â��7Zt�N„��0n´è�œ��`ÜhÑ8>��À¸Ñ¢p"|��€q£EàDø���ãF‹À‰ð��Æ€á��Œ-:�'Â��7Zt�N„��0n´è�œ��`ÜhÑ8>��À¸Ñ¢p"|��€q£EàDø���ãF‹À‰ð��Æ€“žð§i��³���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����Lá���ÀT>����LÈÿ-=þ†eÀš����IEND®B`‚�������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7ac.png�������������������������������������������0000664�0000000�0000000�00000051261�15030617045�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�� ��Ï���µ– ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��RFIDATx^íÝÑoWš÷yý¼Ö­ï ßÌ/ºñEæ&7¹à�B†a !ðB@l!½öNgå;N/Œ¸ÇS¯Á›x‡ÐÌ»Úéæv'm5“Ì$Žf&nǯ[q B<[OÕ9d±H‘,R¤–¾ŸàÀb•H‘ç0<çÇ:§jA���� ����  !���@B���€.„����] ����º����t!$����èBH����Ð…����  !���@B���€.¦CÂÂÂeŒ���LÂ|H@6Ô���&EHÈê ���“"$ä u��€Ir†:��À¤ 9C��`R„„œ¡Î���0)BBÎPg���˜!!g¨3���LŠ3Ô���&EHÈê ���“"$ä u��€Ir†:��À¤ 9C��`R„„œ¡Î���0)BBÎPg���˜!!g¨3���LŠ3Ô���&EHÈê ���“"$ä u��€Ir†:��À¤ 9C��`R„„œ¡Î���0)BBÎPg���˜!!g¨3���LŠ3Ô���&EHÈê ���“"$ä u��€Ir†:��À¤ 9C��`R„„œ¡Î���0)BBÎPg���˜!!g¨3���LŠ3Ô���&EHÈê ���“"$ä u��€Ir†:��À¤ 9C��`R„„œ¡Î���0)BBε:Ó×KÉ^���!$äÌQ«3Þ#ÙQg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎ0 u��†!$ä !ÃPg��`BBÎhí4¤V-Kq±"õ=ݰ'Íà”,´oOÇãÇå§Ÿ~r·ã=’u��†!$DÜà7ü{q9)•ú·/Ô ¤ÔÞ–R M·KZM©ßº*åbÁí?&¥Ê²U¿&+Á7î—fGŸÃÁØ‘z¥¿¦)‡‚´ äĉÑ¿ÃÂÂà×û¥E×.a)®I}§åö¥Û|QJíöÚ•fý·R-/µ÷JkrgëwR]¹Õiû9¥¯��`BBÊ^½"‹:0,®J­¹ë¶ªGR+Ÿ”rí‘»ÚùTª¥c²P(IåN#V+`R ·/VêáPt¶¶Î\P8„àçÃÂÂh¯×ž‚WîHÓçõ´&åÅ©=õŸÊVuY .ì5\¨h5ëTJR˜q]LÃaü��æ !!e¯¾&'Ïž•RA¿=¾&[íožu †zDž„·O†Ï1uÔÁimrf0ŽdHðe¿°0ÚëÕ×±,gË/Ńÿê§ág¯.•ãþõµd'lÿ¢†‰Êfçw¼Öל¹BH���¹GHHÙ«ÿRN_Êvp&P&‹© ß@‡Aba©*ä7Ó‡lâ:k5es­¾öðµÏHY”ø^£Ð¾½*ÁÆ•(X-,,ÉJíße{ÓßN Ê[ÛR[Ñ)<úþ5©®üªï€»_Hð%tÛpÚvç$ØþR‚åðõ$ƒ]WHУEÇÃý/Jµñ<Ú=ž0l4>ˆŽ&ÅÏ;yã©4jU)K©|& $áþÒÿ.ÿÔ³íï¥Ñ÷1RÓ¤\[´€-œ’ Ù§RF«3��p”Râ sÓý‘‚c²|­Ã¾®ÐjTe)|~…r-öÙ1Yů¹Pº"›ÍÝ0/Ü‘]k DÝQˆF·ŸK£úb|Ûý¦=„/I9Ø kÌÕaA§óì…¹jE .TE}r-sHðŇýy8tð¼³)}M…3ahØí ­-©.é¾äô£q¸ºŠÖ®ìºÀÎ`Þ¿¯’üζA…èˆGò(–œS#…›Ñê ��e„„”NHùAoaYª[Ûá ­üÀî0Ö âÑYJ[ttäxbÝ…¨ú#Co§Ï~ä¿õÖo·wãе~£[¿ç6¨\¾|9úw8}ž.$„t*زŸNö$ >$h`X »ýüFü^)¦Þ;۪߶¤ÞýñQÂr ÛºÂ×tje´À:Z�€£ŒÒBíoÓ‹+R)¿Ô¤åpºQï@ô CB¸agK‚öƒüц^ÃŽ$h8ÐÓ¤*½=\wHˆ—×Vãµç/JùÀ§Åt±ó­›7íj¼°ßc„{GšÒ¨žê^T?Àhu��Ž2BBJ:$tcéAšPö_¸¬ÓZÖ*ë3ŸŠ4IÅS¨¦u$!ÚiŸ)¨ëouì’áÀÓíÃ¥C‚òÓÉÂÇn?ßV|´£k-JRxŸµ+#LEr!¤X–j°.¨]ì �£…„ÁqÓ£ g/ÊÅ“çFž"5Z�€£ŒÐEç~¿"K=D?'¼{Ö>Ê Sh‚º[˜ê­–+©S¨ÎÆDuæçäW$h<í¼>HGGL\0jªÝíö~·N!}»=ÿŠœZÛˆë©gjSG:$ô ÞH¯7š6¦GRaÎO'k¿ÝæWë)P©û6ÜiÈÊŠœ«m‡-<„›¶¯Wé¼w.Þüµ¬ÝúÊ‘ä{ɇ“ĶáCl'Ô,U·†?/g¤:��G!¡-uá­äÀQEƒÇåîor•?ÿ_zp9c“ÖY«¹!kîŒ:z±«å¢ËU©5tMFѽF­Ÿ²TÎ'oŸ—à†5ØçöÂ)¹\“_¿vž ëɆ…Oo Ô…ðÒkHú/ ög r),…RE‚zsĸ¿ÖBxßbY®Ý©ÊÙB|v¢o6õˆ>q(ˆ"toô]u-Ä~)Óô(ý;���ƒr&uÖh4††ïÈ¿GôˆÌÉlëbøÿ �� CHÈ™£VgGû=¢ÓÊrª}ÚÔÑðÿ��†3„„éëžÔ§D×6˜"¿vDÏum³ï”­Aô9�� BHÈ™£Vg¼G²£Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ!$`ê �� CHÈB†¡Î��À0„„œ9Š!’½��� BHÈêÌÚ��Ì3BBÎPg6Ð��`žr†:³v���óŒ3Ô™ ´��˜g„„œ¡Îl ��À<#$ä ufí���æ!!g¨3h��0Ï 9CÙ@;��€yFHÈêÌÚ��Ì3BBÎPg6Ð��`žr†:³v���óŒ3Ô™ ´��˜g„„œ¡Îl ²Ó:³T��8Ê 9CÙ@;dg©Îh?�ÀQgº'¤£ÎŽ:³vÈŽ��€¦{B:êì¨3h‡ì ��Øaº'¤£ÎŽ:³vÈŽ��€¦{B:êì¨3h‡ì ��Øaº'¤£ÎŽ:³vÈŽ��€¦{B:êì¨3h‡ì ��Øaº'¤£ÎŽ:³vÈŽ��€¦{B:êì¨3h‡ì ��Øaº'¤£ÎŽ:³vÈŽ��€¦{B:êì¨3ì´ÃSiÔªR..I¥¾ã¶ÙDH��ÀÓ=!uvÔ™ VÚ¡Õ¨ÊRø\ЇÞyçÙØØp·öGH��ÀÓ=!uvÔ™ –Úa¯^‘ÅC ¯¾újT/¼ðÂÀ°`©Îøÿ�pÔ™î 騳£Îl°ÔVB‚/û…Kufé¹��pL÷„tÔÙQg6h;ìÕ¥²èÙ‹R ¾IlÓÛ_ÉNã©”޹ß)HqåŽ4[þîÿ¬¿sJ‚æ^ÏmÕjnʵò’{¬%)_Ûtµ+ÍÚªu{ñœÜ¬ž—µ‚G:$ø’ ºÍ KÏ�€Ã`º'¤£ÎŽ:³áÀÛagS*Å‚,Vêåu½Áu9|--Ù‘z¥( ¥@šá@~;8#……¥Úxý^÷‘„–<­­„û}(HÝn}-ÁrQJÕOÃGõ¡à¸”k$üE)Üã¶¶¥¶²<ÒщýB‚/>,èÏVXz.��Ó=!uvÔ™ ÚQ:Üà©*è[ýçÒ¸vUjOÝá‚„ôô¢þ·;G’·; »KN¢pLJ•¤±ÓûwÓ÷§Xaé¹`2é÷e´‚ÃÕ¯M(“dcºÆhÐ쨳‹éî[ýMY«¬ËS·Kµšu¹u³"¥‚~ŽâŸ;G!º=•F°O7Ò)Må oXHv$áĉAô³–ž &C[fG>ÚààQ§Ù™®14;ê,ÏI­|\ å;òMí¢¬hXˆ¸iAŲTƒuùC¸/û‘„8Ä?“åhÓ>ZM©q)”k]A¥ŸýB‚?ýôSô{ºÍ KÏ“¡-³£Î_îÛ H)Ñ/ÍïëìL× šu–g~ýÀq).­v¦¹EÌñ€Ý¯I(ÊÅ›¿–µ[_µïˆ~]ƒ€?"±%A{‘r¶?•êRA %YÛl†±þʯeåÚ–´Â¿³vêŠl6wÃGñ%{HH‡ÏÒ{×ÒsÁdhË쨳Ã7Zì…cíSÑïÆåd8è~âö…¢xç³7^·‹Ž<WËîÈpXÂÏüÊO¤^­´¿@Ê}ÈÆtÑ ÙQg9ç0wΟÊVu9 á}±,×îTål!>ÃÑ7›\'࿵٠ƒ€;R¡tE6‚UYÔûÕ5hç±!kí3%%În´÷{¹öËrÓ… ½oó!a¿pàéïXaé¹`2´evÔÙáËÚñ—?Ú¬J­ësY¿Ð9Ùþ’H¿lÚÙº .­É†ëIÚGˆ'ÿv¿µÈ™µÎI6¬à}é£A³£Î`Í… †ÏÒ{—ÿòƒ¶ÌŽ:;|YÛ`¯¾&'Ïžuƒÿk²Õ^/¦g¿+uþ…âšÔ{Ö”é‘èÕ‘Nm½/÷%TòL|Vð¾ÎÎtÑ ÙQg˜W–Þ»ü”´evÔÙáËÚ{õ_Ê©àK7Ý´ ÅÊfT2$ø)«YªnEGŽÇ[*ëQëkR]ù•ÔŸtŽRÇå”?HM§5^’òYý}½¶Ï=iÔªR..¹çõÔÝ>#7ëëîHvò5„º¦ÆvJ–0¢¿lL× šu†yeé½ËÿGùA[fG¾¬m‡„oŸž„¡àdxŠdHx.ê‹á¾Îµñ¸°áNÉÝjÞ‘•“kR×Ѻ[#ÞÝ5|ÂײP8#Áv< ª=5ÊMíœzÛŸ5ï¹ ;þî5EG?ÂG¦Ke:¼¯³3]c4hvÔæ•¥÷.ÿåm™uvø²¶A'$„¢‹b æËRÝÚN„?hŸtÝ ÑbçFçÛ~Õ”û›‹•8D8qPè<øvú¬{~ÿ7”kñâÛÉ…Ø£à}éÓ¥d/À<²ôÞåÿ£ü -³£Î_Ö6è ¡èÛýhíÁŠTÊ/¹ÁöN7êšþ³$å`+ S î4ßþhD´®b‘# 3@0ÁÒ8I~ЖÙQg‡/k¤C‚‚úš;ÅiâÈAtQÎp[ß…ËzŸ«RÉ0IO¥TJaðpS˜¦B‰³òéTªÒÚF|Ö½ x_gG0ÁÒ8I~Ìg[ú…œ~agh†Ÿâýø²µž•èYJ.ôt®›Óy߸oåÃÇ/”*¸S_Gï¹;¿”ò¹;# ¾÷êW䔨GÁ£;$ÊïËnUåÖövtMîàhøçåoû«ý§÷Çk)²,Rî‡÷uvÔ�,}€Ó™Ì§?þx‹ô¹¹Îá}¢ÒõmkúÂUz–ÿÍm8ðªÿVª‰³¯Dç ßúTWneš7­âoQõqf Òôùc6>|•´ÑÛ õžM}cŸ…h9õ>jÉN£Öõ~.¦ÔGþv~¯~]~ü: ²…ðþÉoö; §KÕÿWj~árâ¹uÞßZŠr¾RNÜ>%7‚ó]·ƒæ3vü6WŠ+øë<Œ@ïƒl¨1�&Xú�§3™Oz=Ž—_~¹+(Œ×–~g|Q®“~kº¸Ò¹âyûb†á ¨ò4\¨hOÃHÚFÔ3Ýb†xÿÏN£Ñˆ.4™ ´ARøÿص_É-wv¤X<êd†£ ÔivÔ�,}€Ó™Ì' ÚvÉ 0^[jHX–³å—âÁõÓÎ4NqÜüý¼ïÔ9Ý==ËÌ™+„ìKC‚Öw:(ÐÑ)R %YÛôS£BºpzåœT·8’0MÔ�,}€Ó™Ì'´ø 0^[jH8'Áö—ñ©$N†ƒõ'ñ®®ð(žoÝžK=‰]in^‰®˜«g‹‰Š é5 Ûƒ÷;ŸZ¹#ÛÛîvúÊ»£;ô÷ÿN#¾�WéºÔÛu’hƒpÿh±¬Ÿv²*µ¦~ËÜ™F³x15÷;ºûkÙô·£SƒúÁ¥NóÓfôwËr­=Oú|HÐ’ ‡Ún]^½¥³Àx&ZM©÷>Т×S¨J-ÃT#¥÷E6Ô�,}€Ó™Ì§dHТAa¼¶t!ABÑéä?ýb2$´¶¤º¤û’ÓÆáŽHøoKÛW³CBzBçâS>ø‹Où‹Qí¹#ã]4k¼:;(þ‚_úúÜ©5ýyÿÝyñãúˆª­í@–ý…µ|{è}]ˆ÷‡·ýüuמþœûÑþE|½OÜž£K†->(èÏ8XÔivÔ�úÜwºJv‰òÍh@þ$dúà¿qsÝAG|D¢s±(?îL7v»çìGÑíäâêÑõ«ÃY•˜[Ò¾X–»Ý¯ž]´Ï|“¾íö¦oÇ $ÉÒ©ÇÞ}Ó/ô_,ê4;j € –>ÀéLæSúHÂøƒ­îÐ9mdAŠç/Jù §õ l‡‡‚i‡„Ã5BHÐ)(·®KÅM­/$¸Ç]ªJcVó‹RÒG´\¾|9ú‹:ÍŽ`‚¥p:“ù” “MÛH‡åOí>~{°Ú¹‚mß…ËzŸµ+箸i2–Ž$®Á!!¾šðI)W©ýáÎGÜãú©d‡ 4 ¨Ãoƒü¡N³£Æ�˜`éœÎd>ù0ñÐhüKá€Û-”õüÜø®o´ýú=j õhm(Z\»"çjÛ#,‚õÓ^ü|ÿ˜:pÔ£Ïö¹øTgÍA¼N!}ÛÍÕ¶ŒîðßÿîMû~w;ªw?°× ø©`‹¯Ëµ÷¥é®(Ü\é�æ×-¸Çöë; ¥+²µžÒö¢\›x!úh’!Á5i´šìû_O ±Ð»¢Æä›·ÿßp×Iþ¿rÈÿ}=¨1�&Xú�§3™O’AenËèøÎ7»éÁSô-öɵÔÀÇŸmÈ-š K÷ÕlGÐjv}çWWÏÊb±,ÕZCžDG üsJ_|* A5ñœÓ·³MÐûüó/U%èºý÷ÒØºÖ> TùÚ-©ž „žÁè›è(‚ÿÝÅÊ ¹¡G ö¹MHžU*,‡tv£d@PºmlQ˜-ÊrðµìEG]û‡EwÔEÿÖd!!Ñf ’m“¼`Ûx&ªÓ#Š`‚¥p:“ùôá‡vE[fGÍŽ†„t@PµAzêÙ }ÖÃŒ§{JØäü¿Ü™§¢³R‚ϸ9÷uvÔ�,}€Ó™äm™uvø&iƒžõ*ƒ˜ é3~¹)vœž–÷uvÔ�,}€Ó™ä‡…¶Œmn:K¿Ò^ kƒ>'®ñÚÀ­H¾·tÐþd¿‹Ïé]’!Á-êŽ~Ï… =‹Ôµ²£mzŽ_wÖÝ$§ÈÏHY×@ø^£Ð¾½*ÁFç¢+µ—íä”"uóhmI÷T¹xýÈøgÓ×…l¨1�&Xú�§3ÉÚ2;êìðMÒýÏ„ÕçâsñN6åIã©,Ÿ‰/èÝs7ºHߢ»rw|V)¿<>Û—_ðí÷Å!!½F!y= üI�üb}ö0¤ ß”©,Ó¨úà}5ÀKàt&ùA[fG¾IÚ`àt£ôô"w»ðRI^òWžö’W°Nø?Öoú“WôNO7v;}ö#$3„¨1�&Xú�§3ÉÚ2;êìðMÒ}C‹ÏŠEù‹…cÝ ƒ£}ýO£Ûû78$DÓ’!ÄÿM¦Í5ÀKàt&ùA[fG¾IÚ =€íâsòupF þlB‰}…å@¶S)!}]Ž n:Rgá²›²T\“úN:²Œ†÷uvÔ�,}€Ó™äm™uvøÆoƒô…öÜà|ÈÅç¢Ðà× ´â~-Aâ;ŸJuåº4öÜT$w¡¶öš„ðyǪK^�OŸ—»Ý>;‘{ìôíö‘‚îS ÆÏ)Pg`‚¥p:“ü -³£Îßxmà¿O¬ûâsîÌBÉ3¥În”¼ªs¡´&WËÅpUjí8˜¸Ç]X,Kå|òöy n$žgú¶?š ) VÜ™•ô¹or1µ£Æ�˜`éœÎ$?hË쨳ÃG<ê4;j € –>ÀéLòƒ¶ÌŽ:;|´ÁÁ£N³£Æ�˜`éœÎ$?hË쨳ÃG<ê4;j € –>ÀéLòCÛ’’½àpõkÊäÙPc�L°ôNg�8êè ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜ sK�€£Œž€ ýê‡Y��8Êè ˜`i`NH��uô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB¦AÛ’’½À¦~mE9˜‚^Ô �,}HÓaäm™ufm3ÔkÔ �,}HÓaäm™ufWþÛfOšÁ)YX¬H}ÏmšÞóýQ+�L°ô!M‡‘´evÔ™]#·M3Rø»úû )V6eÇíùF‚Ò¢Û§å”M?"ß•fý·R-/µ÷JkrgëwR]¹%M÷[y£¯½¨�&Xú¦ÃÈÚ2;êÌ®Ìm³W—Ê¢ö—d¥¶--·YŸžÖVd±\“§n‹„?mU—¥°pLJ•¤±ÿv«Y— R’¤ßî·¾–àÌ•™!ïùþ¨�&Xú¦ÃÈÚ2;êÌ®Ìm£!áä)—ŽÉBaYª[H°W¯ÈñJ]â1{KvêkRì9êàL<ÀwdÆÓˆFÅ{¾?j€ –>¤é0òƒ¶ÌŽ:³+sÛhH8Èöv Ë…Y(®IÝ!è ¤V>>þ‹Rm<¶ŒgWšµÕ0lèß:'7«çe­¾íŽPÄÓ—¥Ü“F­*åâq)•ÏÄ¿_ ¤¹ÓZµ,Å(L„Á¥Q“jù¯¤tów²¹VŠ#ñ4|4‚•øþÉ’1Œd®×#‚Z`‚¥i:Œü -³£ÎìÊÜ6.$4ÛG ¤°††pŒÝZ[R]*ÈBaEjO;“’2{Z“rÁÖ¶ÔV–¥R×ã;R¯ÛƒwýÛ‹ásYX8&ËÁ×n”ûÝ®¿·ëž“Þ.®HÐx>¤† ß„¿ï_ÓÉðo< ïþ©TõˆÉRU_ïùþ¨�&Xú¦ÃÈÚ2;êÌ®ÌmÓ jW¶ƒ3ñšƒê§ò$üÚ…I§E!¡{MC¬;$¨8(]ˆðR¿=/ üíYŒž·;R;ظÛ] ±GÃ{¾?j€ –>¤é0òƒ¶ÌŽ:³+sÛt…„Pôí¾ž¹è¤œ¯¼2…éFÉé?)–¦—Ӽ#+ÅãîhÄ“ð¾'9’p€¨�&Xú¦ÃÈÚ2;êÌ®Ìm“ jgS*ÅxlëÔ=ÛQa¿…Ë:�_»2úT¤VSêAEJ…)DgPšNHh/ˆ_‹¾žBéŠl6w£=YðžïZ`‚¥i:Œü˜Ï¶|êu.uPÑyïÓªéàýoWÖ¶‰æð/%úÆâ¹ýÉÁv¨}”A§ R÷ƒí†Ü©¬È¹®S¨î#įòõøèDWH(¬È?üV~yëßå‡(”¤ßÓ Ñô¥‚,U·â¿ÝNIhTe)<ÆÅ{¾?j€ –>¤é0æÓÇÝOÙÚ2u‘©®³¨øùÎn_t†÷íæ_€ª³¨s6¡ MŸ?ßÇì~ê½mÒï×ô{)> ÑÉdHˆø€ê ‡¥PªHP×¥Ï#Øû½\ûå ¹éþ_è|³ŸX8]º&ŸÖ.º÷xò¹¹ ÑÞž,áÿo7nDGÚ·Ãÿÿ|ØéþÝ%)[}ކìOï‡^Ô �,}HÓa̧ äòåËîVl¼¶ôƒ•‚WîH39:Òo2“g€™Î¨úOŘ Þÿ6h;lll¸[1Ú&) [7dí–?;’£Ó©N†?ÃÿwÔkÔ �,}HÓaÌ' ÚvÉ 0^[jHX–³å—Úg‚iÕuNôq?ð÷ߎü¨ ÐvÐ’ ´MBtÚÖãRZÛHy]8}^ÊÉÿgG@½öG­�0ÁÒ‡4Æ|ò!A‹ ãµ¥†„sl)Áò±ð1ÜyØUWH8¨3¨]in^‰zêt‰8 ø^£Ð¹}1x_ÖôÜðî¨Çöö†»OëØJÍE…­÷¿­gäf}½óZÛ¡,ÜgÍÕ[\w+ÑÜù0ÀEâZ’Å‹l´/ĵ*µí¯;æêº ±NûugªM±,×Ff3ñ뉋 úóá4HKr Þ,h{Rqï÷¨„mV­52¥÷E/j€ –>¤é0æS2$hÑ 0^[º çZ÷g‚)œ CÃnwH8¨ Pù#…’¬m†ƒÒöÒ8$¤×(D‹5ÝkŒƒÀswþûpðrrÏá8.åÚ#÷7F7^MGçµú׿_«;~t¶78Õ#7êô˜{‰ q¹ О¿î.ÌåÛ6^XÞ]÷/ºÐàÛ`â¶_ôÜEƒ‚þ‹ƒG½öG­�0á ?¤}ÇJ¡d— !?¸ŒäOÂ¥ Ñ�5üŸ]%y˜XzºÑ°Û=g?Šn÷Ín¿:<Œâůµs¬ž×Þæ¾éî:}fò >ñÂôôí…’ž"ô¹4ª/öyݧwÿì õÚµÀKÒtó)}$Á—ìºC‚?L´öàüE)ôt£žÁlï@xÖ!Á’á!A§¼/7u¡¸¶ùX!ÁŒ1.Ä5-é÷ñ‰'̵M^P¯ýQ+�L°ô!M‡1ŸÒ!aüéé ÜÕ\õ±ÛGèTnÚ’¥# – Ñ´ “R,_• V—ÚØG\HðÓÊ ðïc-ô¿ÖÚ&/¨×þ¨�&Xú¦Ã˜OÉ0ÑBÏhnûKá Ô-Vöüœ÷äô¢ƒ¸�U{ª‹;¿{û1õµèQŠg.ŒøàÃIgÍA<w?};qª l½ÿýkõGküí¸.âÀà^w»}Våæ«rkëƒèÂ[íð•c~M‰;zà×?tÎí¯§·½(×&^”>ÿ^öÁoÃÁ£^û£V�˜`éCšc>ù0Ñ)#£oà;ßà&§�©VóެôœƒÝŸÇ-” K¦ P©V³ëŒ;¿ºzVÝ™ZžDaÿœŠr¾Rîº] ª‰çœ¾ýh‚ÞÏŠ8ø×rJnç»nßKÕŸñ¨|MîT_ ëpIV>¸)u½ˆûÝÅÊ ¹¡G ö¹MHža*,În” J·M$ù>tѱ0äÖªe)&ñXg™Ú÷ˆÎᛸ^sŠZ`‚¥i:Œù¤!!m™ufC: ¨ÉÚf7:3Ôâr Û{îhUß5nêUø·ºŽšÃ/îë@C†˜›•0Ðù£k“á=ßµÀKÒtóé§Ÿ~r?uЖÙQg6<~üØýÔ1YÛdùß…‰$„ú,ÌŸL"Ä´§àM†÷|Ô �,}HÓa䇅¶ìž2Ó§DS]ìÐç›&j›LƒuË!!Öµ€}B¼çû£V�˜`éCš#?hËì¨3»Æn›ÔZ›øø§²Óø qÅâBtÕîf4ý(ö»Ÿjß7ì¾:u«é¯ü>æÙ³Ñ:ø~é5 ã_=œ0}Ô �,}HÓaäm™uf×DmÓó¾ nÑv|%k©DHx¢gê:#Ëk.@„!`ÐÕ©£+Y—Rôûþ#îï¦Ö(ìNpõpBÂôQ+�L°ô!M‡‘´evÔ™]µÍi?݃n %¥—ŠRª~nñ]úi|ŠZTúï¦n÷ öG¼æ!aú¨�&Xú¦ÃÈÚ2;êÌ®‰ÚfŸÐjÖåVt¦ ?ÐO†„¿â_¤ gDjÏöqû)¹–0·¨�&Xú¦ÃÈÚ2;êÌ®‰Ú¦'$¸©@z=Ž`]þP»Ø{$!ìo~ÈráXâh‚ý®NíŽ2p$!¨�&Xú¦ÃÈÚ2;êÌ®‰Úæi­û Ôn°ßökŠrñæ¯eíV]jåãßw2ÇW!tujµïxMÁóöš]]Ü=8$ŒõpBÂôQ+�L°ô!M‡‘´evÔ™]c·Môm|rýÀ) šÃýr8@oëÙ‰îTålAÏ,tS‚‹ÅÎï.ž—àFçìFïNÜwLJ¿º"åÅ%)WkÒx²“öcu•pÀ?ÒÕû϶4ÎUÅÓôqЋZ`‚¥i:Œü -³£Îì¢m¦ƒzíZ`‚¥i:Œü -³£Îì¢m¦ƒzíZ`‚¥i:Œüж¤d/°©_[Q¦ µÀKÒt�€£Žž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ „��ì '`!��;è ˜@H��ÀzB�&��°ƒž€ :0·T��8Êè ˜Ðo ~˜�€£Œž€ –æ„�ÀQGOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ��ØAOÀB��vÐ0��€ô„�L $��`=!� ˜mKJö›úµå` zQ+�L°ô!M‡‘´evÔ™]´ÍtP¯ýQ+�L°ô!M‡‘´evÔ™]ùo›=i§da±"õ=·ixÏ÷G­�0ÁÒ‡4F~ЖÙQgvÜ6Í@Jáïêï/,¤XÙ”·Kä J‹nŸ–S4ýˆ|WšõßJµ¼ÔÞ_(­É­ßIuå–4Ýoå¾Nô¢V�˜`éCš#?hËì¨3»2·Í^]*‹:Ø_’•Ú¶´Üf zZ[‘ÅrMžº-þ´U]–ÂÂ1)U>ÆNüÛ­f]‚JI “~»ßúZ‚3Wfz„`T¼çû£V�˜`éCš#?hËì¨3»2·†„“g¤\:& …e©nu"Á^½"Ç+u‰Çì-Ù©¯I±ç¨ƒ3ñ�ßO#ïùþ¨�&Xú¦ÃÈÚ2;êÌ®Ìm£!áT ÛÛ,d¡¸&uw„ ;$<’Zùxøø/Jµñ<Ú2ž]iÖVð¡ëœÜ¬ž—µú¶;BO_ZXX”RpOµª”‹Ç¥T>ÿ~)æNCjÕ²£0—FMªå¿’ÒÍßÉæZ)~ŒÄkÐðÑVâû'KÆ0’¹^j€ –>¤é0òƒ¶ÌŽ:³+sÛ¸Ðl)XÂrÂ1vWHhmIu© …©=íLJÊìiMÊ4ZÛR[Y–J]KìH½RlÞõo/†Ïeaá˜,_»iPîwt»þÞ®{Nz»¸"Aãiøv4d|þ¾M'ÿñ$¼û§RÕ#&KUid| ¼çû£V�˜`éCš#?hËì¨3»2·M;$¨]ÙÎÄkªŸÊ“dHðk&…„î5 ±î â Pt!ÂKý^ô¼|(ð·d1zÞîLHí`ãnw-Ä ïùþ¨�&Xú¦ÃÈÚ2;êÌ®ÌmÓBÑ·ûz梓r¾òʦ%§ÿ¤X\X˜FH_Nóެ»£OÂûžäH¢V�˜`éCš#?hËì¨3»2·M:$¨M©ãi<~°­SwôlG…ý.ë�|íÊèS‘ZM©)¤Ai:!¡½ :|-úz ¥+²ÙÜödÁ{¾?j€ –>¤é0æÓO?ýä~ê˜Ï¶|êu.uPÑyïÓªéàýoÃãÇÝOYÛ&šÃ¿”\è‹çö'Û¡öQ.Hݶwr§²"çºN¡ºp¿vÊÔã£]!¡°"wþð[ùå­—¢P’~O»#>$DÓ— ²TÝŠÿvt;q$¡Q•¥Dðïùþ¨�&Xú¦Ã˜OAÈÆÆ†»ËÖ–©‹LuEÅÏwvû¢3´¸o7øTE³ iúüqøNœ8!>t·b£·Múýš~/Åg!:™ PÝ‚á°J êºôy{¿—k¿¼!7Ýÿ oö §K×äÓÚE÷O>7$ÚÛ“%üÿíÆè(BûvøÿŸ;Ý¿»$å`«ÏÑýéýЋZ`‚¥i:Œù¤!AÛ.ÆkK?X)HqåŽ4“£#ý&s1y˜é\€ªÿTŒÙàýoƒ¶C:(Ð6Iaðغ!k·üÙ‘Nu2 øþ¿£^û£V�˜`éCšc>ù Å…ñÚRC²œ-¿Ô>L{¨®s¢û¿ÿvôà/@EH€/'ƒm“¶õ¸”Ö6A^NŸ—ròÿÙP¯ýQ+�L°ô!M‡1Ÿ’!A‹…ñÚRCÂ9 ¶¿”`ùXøî<ìª+$ÔaÔ®47¯D =uºDP|HH¯Qèܾ¼/kznxwÔc{{ÃÝŽ§ul¥æ¢b¼:›ÿZÏÈÍúzçµ¶CY¸ÿΚ«·¸îV¢¹óa€‹.ĵ$‹Ùh_ˆkUjÛ_w.ÌÕub6öëÎT›bY®:Íf â×ôçÃ3h:–ä¼YÐö ¤âÞïQ Û¬Zkd Jï‹^Ô �,}HÓa̧tHð%;ô\ëþL0…3ahØí u*D¢P’µÍpPÚ^@‡„ô…h±¦{mqxîΞ£SNî¹#Ç¥\{äþÆèÆ«³éè¼VÿÚükuçÂÎvã§zäFCžs/q!.Úó×Ý…¹|ÛÆ kûëþE|Lܶãóï__4(è¿8xÔkÔ �úCÚw¬Jv‰òƒËh@þ$Xú Pÿ1ñÙU’g‰¥§ »Ýsö£èöxßìö«ÃÃ(^üZ;Èêyímî›î®Óg&Ïà/LOß^(é)BŸK£úbŸçÑýwz÷ϾààQ¯ýQ+�L°ô!M‡1ŸÒG._¾<f[v‡&˜híÁù‹R>èéF=ƒÙÞð¬C‚%ÃC‚N;y_nêBqmû±B‚ c\ˆkZ’ïe-ãOŸÃ0ÔkÔ �,}HÓa̧dHЀ ÆkËtHPîj®úøí#t*7mÉÒ‘K†„hZÐI)–¯JP«Kmì# .$øieø÷²–Éâcêµ?j€ –>¤é0æ“ > ¨±Ú2šÛþR8u‹•=?ç=9½è .@ÕžêâÎïÞ~L êQŠg.ŒøàÃIgÍA<w?};qª l½ÿýkõGküí¸.âÀà^w»}Våæ«rkëƒèÂ[íð•c~M‰;zà×?tÎí¯§·½(×&^”>ž¸ý┾IéEð¡tÀ<‚l½çí V�˜`éCšc>iHH•¹-£SçÜä ÕjÞ‘•žs°û—[(–L R­f×w~uõ¬,º3µ<‰Âþ9å|¥Üu»TÏ9};ûѽŸqð¯å”ÜÎwÝ¿—ª?ãQùšÜ©¾Öá’¬|pS.êz÷»‹•rCìs;>š<ÃTX œÝ(”n›D§>v(H›´^óŠZ`‚¥i:Œù”¾:­¢-³£ÎløøãÝOÑ6]Óµá=ßµÀKÒtùA[fGÙumCHèÅ{¾?j€ –>¤é0æ“Õ# ÝSfú”hª‹úœ`Óxm“œF5í õùûÏ×ÅïxÏ÷G­�0ÁÒ‡4Æ|:5  Î ËÞ6³½Pß¼^üŽ÷|Ô �,}HÓa̧;»ÑGÙ•½mf¡¾øþ6.~7ªìõz4P+�L°ô!M‡1Ÿî: GufWæ¶9„ õ  ö.~Ç{¾?jÀÌèÙ:^~ùeyçw¢Ÿúé'·ÇÖ‡4Æ|J†-hËì¨3»2·Í!\¨o`H0zñ;ÞóýQ+�fêÕW_>}ñ¡ÁÒ‡´Õ#Yo”Ñ ²¡ÎìÊÞ6³¾Pß|^üŽ÷|Ô €™züø±ë z‹–žK’ÕçeEúH‚/Ȇ:³k¬¶™á…úâà÷ÏÏÅïôþèE­�˜9ëƒ9KÏ%Éêó²"ý¾Ò«ÕRgÙQgvÑ6ÓA½öG­�˜)]‡ðî»ïFÊéb…¥ç’dõyY‘ u–ufm3ÔkÔ €™ÑÅÊ/¼ðB´.áŸÿùŸ£æd±Âj‡aõyYáC‚Š:ËŽ:³‹¶™êµ?jÀÔé: 4(xéEÌVXí0èÈÓ *ùþ¢Œ^`S¿¶¢LA/jÀÔèÔ"ÿí®þ›<å©ò‹˜}X°Âj‡AG6Xúý�=€©HN-Ò0° >HXAH��uô8�Ô~S‹ö£ßþj!$ GH��Ì =€1ljÑ0„„á �€Y¡Ç0±Q§ BHŽ��˜z�cË:µhBÂp„�À¬Ðã�È,9µèwÞÉ<µ¨BÂp„�À¬Ðã�È$9µèáÇnëä Ã��³BY-ÙiÔ¤Z^’ÅJ]öÜÖaNœ8ÑsÁªƒ@HŽ��˜zà¨Ú«Ke1¾Òd–pS‹ú!$ GH��Ì =p”¹ %$L !a8B�`Vèq€£ŒÐ!�pÔÑã�GL«¹!k¥cဳ ųg¥Tp!¡Õ”zP o¿$•›kÑö……cRZÛfËÝyŠ Ã��³B%;›R)wÿ]iÖV¥<+›ò¸¶"…ðç(T?•y*[ÕåpÛq)×¹˜BÂp„�À¬Ðã�GFKžj(¬Hí©;4Ð5ÝhOšÁ©p zJ‚¦›|ÔÚ’êRA åZ¦‹0!�0+ô8À‘±#õJQ+R÷ †…ùF‚Ò¢,”iº-ÓBHŽ��˜zàÈx.ꋲ0Æ‘„Y,l&$ GH��Ì =p„´UYÒËå@;ÏÛktóRõSÙŽB‚_“àÖ,ÎH°½ëaz Ã��³B)áÀóJçÌE¿º"åÅ%)Wkah÷E!¡(¥R1.J²¶Ù”œÜÈÔ�˜��8êèq€œk4î§aú­I˜BÂp„�À¬Ðã�9õøñc¹pႜ8qÂmƇ„¥Úxî¶ÍŽ€-‹¬>/�@þÐã�9AÞyçùé§ŸÜÖA|@ðƒäÙMèümÅ"«Ï �?ô8@ŽèÔ¢^xA^}õUyøð¡Û:, € �€£ŽÈäÔ¢ ·u¾†#$��f…˜sÙ§ÙDHŽ��˜z`NÍóÔ¢~ Ã��³BÌ™äÔ¢?üÐm„„á �€Y¡Ç戟Ztùò幞ZÔ!a8B�`Vèq€9à§½üòË.Ž6_ Ã��³B–שEý†#$��f…0*ÏS‹ú!$ GH��Ì =`ÌQ˜ZÔ!a8B�`Vèq�#ŽÒÔ¢~ Ã��³B¡×;8*S‹ú!$ GH��Ì =� Ã��³BÀBÂp„�À¬Ðã�00!�0+ô8�L $ GHÈN댒½À¦~mE9˜‚^Ô �,}H[í0èȲÓ:ûÅ/~ÑUt[¿í¾Lkß¼<®n‡MÓho-GýquzQ+�L°ô!mµÃ #Ën¿A¿í¾Lkß¼<®n‡MÓho-v÷Œ\Zÿ‘ŸïKeñ wð>݆^Ô �,}H[í0èȲÓ:ó%=0ðeÐþiìÓ2î}íÓ2î}“ûô_Ø”n¿d»u•Këò»HKžÝ¿!¯µ÷¯É{ßí¹}ê?dýÒ·ï¹týÿ–Zã©ÛÞûÑgòþÕ¿—»_ÕäRø;ûþÍ!û´Œ{ßAû´Œ{_¿O zQ+�L°ô!mµÃ #ËÎ�´ô$h´û´Œ{ßAû´Œ{ßä>ý6¥Û/Ùnéí[¬ÈýŸõž?ÊW·+rº½¯ KÕ-ùùÁmy½}Ÿ×åêÝïÃHñ_ò]ý×R.¢í§/]—õû¤õó}¹~f„¿¹Ï¾_œ~SÞûzcß#c?nXƽ¯ß§½¨�&Xú¶ÚaБe§u¶ßÀ ½Ý—ií›—ÇÕí°)s{Ÿ¹.÷ÿÜ”þK¤µ-w¯¾ÞÞwæú}Ù½]΄?kh(V6åYÏQ‡¸,ÎÈzó“($$·Gû†<Ÿx¿ .h$÷'?YF{Üý÷÷Û®¥ß>݆^Ô �,}H[í0èȲÛo@Ðo»/ÓÚ7/«ÛaSæöÖðëR©¬Ëv+|€gŸÉõ×NGûºC‹Rm<á‰Ü}ël÷cDûGý›¯È¥Û_†aCÿÖ¿É­Ú'²YYvG(¼ŸåÑúßÉ[·ïJcç¹<zÐŒÿѺ\zí-¹}÷<‹Ö$äµ·nËÝÿSýËßËÏž†J±àþîëòÖúWñý“öê}–~¯E·¡µÀKÒV; :²ì´Î|I |´û´Œ{ßAû´Œ{ßä>ý6¥Û/ÙnéíÓéFaH¸ô‹ÓòÚõÏ¢ÁtëûuY.,Èb¥Þ ¿8}UîþÁ[_Éí×OÜýö-U¥ÑzÓ¹ýÕ÷rÿúká¾×äúý𯇃wn¤%š%ÿ%߯¿MƒZX(J¥¾mÕ…Ë×_qÏIílÉ{å%9†ï[2ÖÂÇô¯éÏR¯œ”…âªÜÕ#&?Þ•·N'žÓ¯E zQ+�L°ô!mµÃ #ËÎ�´ô$h´û´Œ{ßAû´Œ{ßä>ý6¥Û/Ùnéík‡ÝöŠTÖ›ñšƒÚªœL†=â £ö ×Ä!aWÝÿïò–;b—î Ûâ ðÌ…ÿ¸Åø÷ü´¤èyý,ß½w*þ›îyþ=ow&¤0ØT—ôÈÂb|»k!öh¯E zQ+�L°ô!mµÃ #ËNël¿Az»/ÓÚ7/«ÛaSæövÓüY‰âo÷ éÏòùýí)L7JNÿiÉNã=·�Ú…„Äš {²Ó qéü^&\Hˆ„û]HØ«Wd1ü»§/½/_=ÛuG#Î…÷ýst$¡\õùv¶¡µÀKÒV; :²ìöôÛîË´öÍËãêvØ”¹½Ó!A·½vCî?‹§ñÄßÈë¾ølG­ð¿¾ —NÊõÏ>‰¦"%·Çûú<ŸÓ—äúú}ùNg05ªòú”BBçŒL±Ö£O䯥Wú?'WúíÓmèE­�0ÁÒ‡´ÕƒŽ,;­3_Ò_íŸÆ>-ãÞwÐ>-ãÞ7¹Oÿ…MéöK¶[ºèöÂò{òýÅʾèv]ÈìCB´½}”AOúžTþúX¼ýµ·äýû_É¿¹S¨ü›‹Ùüf#¨ÿâoÈí»ÒŠN³êÿ­-¹vî†Ü«]–ÿåöWIRÓ^Œîӯߖ­–<­­HAÿft»ó¼O¿uW~tbP= Û§½¨�&Xú¶ÚaБ öðáC÷S‡�hé7HÐ2hÿ4öi|ß%)WkòàÙoY/­Ë£p@U¯'xÜÑöé¿8|û½Ÿ÷k·îrFþú½oܽTg0®eaá˜üuõSùs2$DåuwÖ!ÿݼ~;_Ö¯_J\caÀûhñ¢ÜùÝoå_hØè|³ïë²äÖwwä¿Ýþ£[¸¬âçÖµp¹Çž|÷ÛßFGbñÑ…x!³ÛÔö£<X¿Ú>2ðùº}ZЋZ`‚¥i«Ù`AÈåË—Ý­˜ÖÙ~ƒôv½íú£ÎÐ%yºHtÅ‹"½Äˆ ¯R«%¹¯sæ?x|¿Q7]öÛ§ÛqøNœ8ѦÑÞZæóq òÚÕÿG>«ÅgGjïí†ÔŸl¶§5¥K¿ÇÕmèE­�0ÁÒ‡´ÕƒŽl0 ZGÉ  ·û úm÷¥}† ñÕûr)y:Å¥ª<ø9>Md¼­û*µþŒ.Y®R«%½/yæ—a÷Ëò¸É²ß>ݎçí ºmœ6Õ2lßÜ=naEîþ¸+>û‡Äÿ£ºpúsiÔV{ÖUøÒïquzQ+�L°ô!mµÃ #̇->(øÛZÒ_z÷ëüéïåáƒÇáà7:]d{À¡ 'wýÀÿ«ÔF9ä*µû='Ý®ç°Ož2¹o¿ûiö¸£ìÓqø|›$ƒ‚o£~í–.ãîÓÒ¿[W°¯Ä©J»î×)ƒþnö}zo]îëµ¼gäîí·zÿ_ò¸ZЋZ`‚¥i«Ù`É Eƒ‚þ»ßÀ ½Ý—øH¿Ézå“õïu�òçp°~.Þ§çw!Á/Ìô§ü˜Ãþæ1¹tãyͯþÑ$a)š'ÞY£Ï×Û¿ïºl~§Ï!>êQ©üƒ|æM­G›²~r¿¿¹ÿÀÉŽgòí½š¼»öŽüëŸÊûo_”ÕÕ7díöç¢'ìŒöò¾¼ýÆj¸]Ë›ò›{ k£%Ï¿½'µwß” ·>’ûï¿-oèþµ@îýé?åsûªÔúïžüðÅ¿„ëø±ÖÞ•õ/~épø÷Œüí~í¦e’}GùquzQ+�L8èi}¼<ÏÿœÞŸÞžü9Yüv¯ß~åNïOoOþœ,~»×o¿ò?§÷§·'Vú úm÷¥ô‚L¯¹ÓE¶šahx¥;$ô¹Jm¿ÇÓ2øožŽH´Ég7.ÉéöYfâUPñíèŒ.ÑíðOw' ÇÝE²Â ð`]Þz팻í®4ª/öù{qÙïùøçš,ªßÏÉâ·{ûíOÿœ,ÉíªõmMÞŒÿa0x÷#ùöù®üé£wÂþßÉG?„µòórûÂyû£Gá/ÿ§|T CÄ›5ùöç‡R{Ó ö]hýé#©j˜Xû|ôm ž.·Ã@ðÆ»÷º ï®û/¸ÐÐú“ÜûÍ›á}#÷ÜéBUú¹*ÿsrŸ/ÉíÉŸ“Åo÷Òû}Ñ àî×nZ&Ùw”W·¡µÀKÒtóÇ5TÒ_z÷ë´Š8$èöè4’šmÊÕsahðÓÂÀPß ÿxâÜïû?æ ýÉSEÆûÒÓüv£äš…è1Òg?Šn'W~NÉ}ú¯%?q[.øPо½&·¿ˆ%t<—/n¯Éê…Ûò…þj VåÂí/\Èz$½}¡çöêÛÉa ú¶ö·îhD²ôû;³áÛÄök·twŸ–qï;hŸ–qï;hŸ–qïë÷iA/j€ –>¤é0æÏO?ý$ù—ÙÕé§K¿A‚–ÞýÝ!!š tûËpÞ’gŸÿQ´×$ì•ÚLÓ] ªsa+BBÒð Ó„þ?ù×Ûn ÑX!Á = qXó‹R|›hIN7Ú¯ÝÒeÜ}Zƽï }Zƽï }Zƽ¯ß§½¨�&Xú¦Ã˜OW¯^íêô}Ùo`ÞîK×t£öösá¶?Ǩ}äà´¼]*^¸\ìyÌð>î*µÿæé«R{>Š;’ ÛÒg7J‡‚thð!¡;4Ä IÛ'Uö{>ºÝ’!!šô¿ÊÚ»ÿ$ÝûBî}$Á…„7Þ‘þ¤‡‡Ÿ¶ƒ–ôÂåýÚMË$ûŽòãê6ô¢V�˜`éCšcþè‘„ zV¢ï‡îx±r»œ~SÞÛN\ 6ÚÖ}•ÚëÑ…£Âí®Rû‹_œ•ríQøî"PíÇTO¤Vþ F|ðá$^s ¯SØ•·ßˆ3¾_©¶ëò‰²ßóÑív„¯úÞoäÕ¿•Ú·nvt; q`¸$ïÞ{îrk.ò¯ÿ$›?–wßXm¯9V¼N!}Û=ðëÞxûùü Ïäaí–¬Gwö´’Aé¶ýÚMËÐ}§/ÉÏ…µ¨:ëyÜðý{ûîy–8…oò±’eð¾‚ËU¹ûàÇö‘2=½½8öãNX}¶¡µÀKÒtóEQ:˜ú›¿ù›hmÂ;ï¼µaº¤¾tí¾ïØ«Wº2§/½/_ýù³öÀ)¾Ÿ?ÛPgžJ뻺¼WùëôößÔ’¼µ¶å¬)?»Ó9ž‹Žx;òI½‘¸‡õ»‰ç¼#õ÷j‰Û)G=3Q’ûô_+âà×ül|ô]·?úöߤæÏxôîº|Rû?Ã�ñ¦üæã•[üïéÑ„ ÙУûÜŽ&ìÉŸÐ9SÒ!ŸÝ(Tºý’í–.½û^‰¸ÿüýº,/.Ku+ V?Þ•·×‰Ëk+g\oÓ³ÏM¥‹*#ßw¿}]A' Ö¥\,Lô¸ZЋZ`‚¥i:Œùñá‡Fíµ±±!?v[E^}õÕvç¿ßÀ ½Ý—ií›—ÇÕí8|É÷³7Y{Ÿjƒ£ŸÜ—~\wM„‰$„«g ƒÂ~7y;YúïÓ ó¹l½·"ÅèŠË›ò¨Õ ³ÎÕ®@žõquzQ+�fF;=ý¦÷ã?ަ‡$Yú¦Ã˜Òß¶*}é7±û úm÷eZûæåqu;lš¨½‡ Ö»ïk5$töEû£ÓÿLH˜jÀL%¿á½páBôM°†KÒt¶i�Ð÷Í0ü{MKz`àË ý±/^d<À£u¹´Ï}ÓeÐ>-ãÞ7¹Oÿ…MéöK¶[ºtíKM£‹¦¥U–äµ·þ{âŠÅ­è‚|—Në}‹ñ”£($œ‘Këÿá~ÇOÁ;&—®ÿ®3ÅîÙÙ¼~I îož¾ä/ê>føÿ¡^$0žn”^£0â…£ë¤. ­ûy$?»‹ŽTûìÓ‚^Ô €™JÜ’Å KϽF´î`É÷W¿A‚–Aû§±O˸÷´O˸÷MîÓaSºý’í–.=û§Ú×èY¼ž¹¯Whµ¯ž çt0Þ”ï?û ܵC~þ^î^}½³x¿õ•T—ÂÁzqMî?Û•GÑï¿âNìþ®¿¶ˆ»ýʈÜ‘çÝl‡Ö$Lµ`æö»ð•–ž :4èÚƒ,´-÷¤·û2­}óò¸º6MÔÞC¦ýt_›ÃM7jýOyôø™|W[΂ÿþYyëî÷Œ’ô¾¯ÇgÞJ\…¼çï¦ÂÊ k~tn÷»æÇ’¼õþgÑQŠÖ÷ëRI,ÀÎZGº ½¨�3÷å—_ºùîb…¥ç‚xz‘NM{ùå—û.æD۲߀ ßv_¦µo^W·Ã¦‰Ú{ŸpúÒu¹y«.ßE3‡Ò!á¹<{Þ’Öö{‰A¸ÛçÎŒÔý7{×2L/$èßuÅý½ä~ÿsºôÛ§ÛЋZ03~á²~ ë€OÿM+,=Hô^Ñ^ì>Šäû+=0ðeÐþiìÓ2î}íÓ2î}“ûô_Ø”n¿d»¥KϾžéFîJâzªÝõÿKþÛlÖ“Ón¼¹.ß·þKÝýoîš n_«)ëw]WŽÇ×üpGúþÝThå€ßÉÞ>t× yZ“raÄzè³O zQ+�¦NwþÜõ4,øÅÊZ|`°‚ÃÖ"]ƒ0.ÿÓÒo eÐþiìÓ2î}íÓ2î}“ûô_Ø”n¿d»¥KϾ×oËšóà¶,é>7X¯ôí×$<“?þËïdófEªçîz¿ïÏáÀý\ô˜…r-ZKÐzô‰Üˆ. øº\½ûG¹S>îöù5gÛkÂߎ.îWXªFÏ# £]ð©»oúº#ñég²ýÞ™hÑtrŸ/=õÐgŸô¢V�L†ƒ ¢SQúp䃃ÿ× :ŒÃ§á…^p·Æ§m¹ßÀ ½Ý—ií›—ÇÕí°iìö޾OúY¿´ì¿‡ß¡†Ü¹V“‡-=³Ð¿Èúãa}äçÏå½ß~ãn„ÜBçK7>‰ÖDÜÙâA|rß®|÷?6äÁÏ?ʃ»·å­s7¢`Òß³ž vßÖ)G×åöƒÄ°Ý;ë%â’µŽtzQ+�¦Â‡=åé~ßkˆðWµô!M‡qxô½uqò û úm÷eZûæåqu;lšF{k9ê«ÛЋZp t€§ß� I~@héCšãp$¯ž|Pôñ|I |´û´Œ{ßAû´Œ{ßä>ý6¥Û/Ùné2î>-ãÞwÐ>-ãÞwÐ>-ãÞ×ïÓ‚^Ô €¡WQÖp EÎÊÒ‡4ÆìéÂd}ïøu%9è7HÐ2hÿ4öi÷¾ƒöi÷¾É}ú/lJ·_²ÝÒeÜ}Zƽï }Zƽï }Zƽ¯ß§½¨�Ñ£zÔ@x“|léCšcötzÚ8g/&9 Œ^`S¿¶¢LA/jÀX|8Ð5:MdR–>¤é0fïI�ØCO ­Üä·¿„„£iœ©i�€é£'‰ õ”¥=5„��€ô„�2I_ëà ��°ƒž€ „��ì 'Ž”§Ò¸³&¥‚?£Ã’¬Ô¶£+n¶šu *%)¼T‘›kῺ¿P’µM½ÿô,kÉóoïIíÝ7åÂí/$¾`ê#ùèí ‰Û�€<¡'Ž’½ºT¥|Žû¾–`ù˜,,U¥Ñz$µòñ88–¥ºõTdçS©–Âý…©=~L $öórûª¬®® �àˆ 'ެ©Wв°X‘úžÞþF‚Ò¢,”iFûÃѨÊÒÂq)×¹-ÓCH0ÎB� ô„À‘³+ÍúûrS§鑃!Aš”Ü‘‡)#$GH�€#…ž8JZÛR[9)ÅòU ju©t$¡(•úŽÛ2=„{Z?Ü—÷ß¾(««oÈÚõëòö>$¤×($nßúHî¿ÿ¶¼±º*«kÜûÓÊçþöU©=|æ�`=!p„ìÕ+²è§ù5 ‹«róÆU¹Õü÷8$ø5 Q X’Âr Û3X¹LH0æùçr{í’¼ýþ}ù¡µ'?Ü dͯIH¯Qh=”Ú›oD·}hýé#©†¡buí7òÑ·a0ˆï yãÝ{BL��ûè # }m¿y¡ Åò5¹S}E í3¹# Å—¤T,DåBéŠl6wãûN!Á’–<»÷yãßȽg.!¦§ »Ýsö£øöêÛÉÑm�€e„ ÇôªÈAȉ'Ü–Aú¬I˜!B‚%Ïå‹Ûk²zá¶|á �àH!$�9” ¯¾úêˆWIv!!:%ªÛ4C„KvåÛÚßÊ*G�àÈ"$�9³±±ÑFÃmÆ„pp•C8š@H°¥õmMÞÔËï~$ß>ßm¯IÐEÌoÖJëÙ=y·½9än·×¸u éÛ«oÖäÛC¡�€lè œÐpð /ÈË/¿œ!ØAH°fO~øüƒèŒF««åí;Ȼޔwk÷äÛ?ŽD •uñò?Þ–LÞ¾½!zÔ`ŸÛM��ûè 9§@à óŠ��€ô„ÀœÒp SŠæ=x„��ì 'æÌÇ£p ëtq².RÎB��vÐsBÏPtùòåÜ…��€ô„€q>èÀUÿÍ[8ð ��ØAO•¼Ö†ƒÑ®u0¿ ��ØAO3Þ…Ðæ!��;è Cüµ²]- ‡Gƒé;ï¼sd)�`8B`Ä… æöBhAæ–ÊQ¡gËÒ÷Ó¼®w�dGH�Œà[\ÌšRÖ¦G��H"$�À¥!áã?v·��è $�À£ ãµ��°B�zä€im�€Q�àÐ3géú¦�FAH�€œÓ‹ñi@Ð3�0 B�䘞ÖTO¯ËéM�Y� ‡týA��`„�È=b E(3½�0.B�䄽zò‡~è¶��0B�ä€5àêÉ�€ƒBH�€XXXˆNs �ÀA $�Àcj�` �0Ç‚ p?�pp �0gtZ‘.P�`Z �0Gta².PÖë ��0-„�˜zåd=‚ §:�`š �0'¸8�`V ����º����t!$����èBH����Ð…����  !���@B���€.„����] ����º����t!$����èBH����Ð…����  !���@B���€.„����] ����º����t!$����èBH����Ð…���� AäÿE-^MF/s*����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7asub1.png����������������������������������������0000664�0000000�0000000�00000002677�15030617045�0023344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��5���6���¦ü���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��TIDATx^íÝ¿K$IðþL;1Ñp2Q0ëÈd7™dƒaƒ  ÁË” DXÐ…‹Ž†ÅèXh.1 6É&Yä‘æÝ¼žn·œí™é î¨zõý@!Ý­AÕ+¿öšÖ#��Aj� B �DA¨€(5�¡�¢ Ô�@„�ˆR+Ô<ÏC³¬A}Uã‡f^««v¨=ªë5 4 Š Ò Vü•²âÈsÑR1q¼¥ˆÒçâ€í]JþŒ(lLïæ·ùtj„Phj½žSŠ–8ÀÞP”þSìêÇnt¨[&õ¾S·ÓÌÇbVPc~›¡æ¸™¡ÖxKá»yÁ¥ƒ"Å8Ô˜ú£-!ž‡ÝzP�¡æ¸™¡¶ÑÕígÚ |ò[1õ8×j`0„šãê„ZúœÑ =¢ÀkPØùB„ ¡æ¸z¡ÆOÔ‹!Ÿï¯Å§50BÍqõCm(ûJq«‘ÿŒ‡PC!Ô7µ^ µÇ—8 ®( |¹¡æïQò0ù±.æ·ùjŽ›X/¾o6<ÆÇ=ï=Åý—Ó5ÜœQØ’jE •ýr¶†ùm>!ÔB½F®¯¯éññ±Øš ãe>„šãÆëÅ¿Ø'''ùþÍÍMº»»+ŽÈ¶»»K«««ÇñÔpÃü6BÍqj½ºÝ.­­­ÑÂÂB¾¿lçççµÎblÆ¡VöwZ¸ñq0›Njq½ø—÷ððæççóíñÆ!·¾¾ž‡žTj¨•­*Üx?˜M§F5¸^ËËËù×YCïøøXäY[U¨•M 7Þ³éÔÈáPã'~Pôé¶Ø–áþþþåmvÛÞÞοÚM}KUó)h¤´ÿT|¿}¸u9jY/¦–¿Da,+Ô׋LºôTÛââ"]\\?)Ë´3µ­­-º¼¼Ì¿·%ȺÚÈûçÓFçføg»Xªãý¶ø-,:5r3ÔÊÅ¦Þ µ“oÅN9ÊzqXqhåz¬ÍÍÍÑÎÎN~f'UU¨©aVâýöËè!Ù#?ïg“:ÝïÅþ[ŠÃ¥Qÿg,B6™NÜ µÁê„ÅÇ‚¼€¢tPC­‡‡‡Ø¨Ï^þ4”×pI§†ZU˜•Ôñ²×7JÚ+£þ*á5º"ßNè!ßk¹jY’ýúðá×â/šüP+qˆ5›Í|½šÄ‡U8Ô¦…YIÄü濽 ¯'ê§©_‘4(Œþ¢nùî< !Ô*=ÐÍÙïtvs¯||ÆPsQÝEÆö—zéùº½¼/Ïr:5r$Ôø;¿Ñ~Ò–_ýL B $ŒWÅ¥gÖ§«£ptÁÅ][/<Gtjä@¨ñËO©Í/BÌ·ÕPSo¨Êaÿ/éÿËúñÊn¨³Á—™c÷Í”ý6?ùd:5jc´jê›*äà¾A}¶×¥ãOó•38ËçºND‡ZÖÿLû{ŸÆî)¨gj5°}¼”ÿš5~塞©Y¼œƒéÔHn¨ñÒöéÿ–ôB]}PËÇkâ%fùªvžçv/ç`:5jå£ìwÕ÷ËÔ×Wãž Ù;^ùžPÏåòSCYŸÒ³v±Ø‚J,þˆÓ©‘°PSï!p{ýv×êÇÞòž€r¿ >+ÇKY—6±mêÄ[½>­Äý©KX¨C½ô`¼Ì‡Psê¥ãe>„šãP/=/ó!Ô‡zéÁx™¡æ8ÔKÆË|5Ç¡^z0^æûOB Í®õUšy­.Ì~�¡�¢ Ô�@„�ˆ‚P�Qj� B �DA¨€(5�¡�¢ Ô�@¢)[gíê @����IEND®B`‚�����������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7b.png��������������������������������������������0000664�0000000�0000000�00000025634�15030617045�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ï���Æ���b¿n†���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��+1IDATx^íÝMˆ#IÞßñºúðÜù` ÂÆô­†9é²u©Ë\æÒêR‡yàÁW pÃÏAP°Ð°û4ʃÚ4ùÐ~†1ƒXQ°Œi ‹v/à Ä.ËÐÈ‚ñ0[bwh ñwDdDfdf襪T-)êû„nU¾D¾ÿ2:����{ð���ì Â;���°'ï���Àž ¼���{‚ð���ì Â;���°'ï���Àž ¼���{‚ð���ì Â;���°'®Þöl���@ï÷d���Àþ#¼ß“���ûïÆá»ð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q¹ßá}þ½$Çä q*ÃÙ<ýh:”—É3i5Iwü³ùl_Þ��âr¿Ãû4‘¦YŸ†t†3‘˾´j6ðÖÚÒ¿Lý¾rû*šý��pÏíyx¿”Q÷39ókÈgßJ·ý…Œ×ÉÝ•š÷¹Êïm©©õ«µújîpòláØ<óí\·%•ø?J¿õPjljLö»��°Cö7¼ÏF’´åà°kƒñ\fãDZºvGê7ñ³Œ»©õ«K3yk?»©M”çvïÀº.eÜ.¦z˜wçM­)ç2¶MêŒùHº‡5û÷m†÷å<yµ™ �À^ÙÑðþN¦ÃÏUðU7ÉÚ‰<{öR;¨Ù¬kÛMíxv“m|,¿ôoº.|ÏÆÒÑ‘f]ßd/Òéì 7oÛ~˜6™Ñ²ó¡´º¿N—ð@š§ßÈÔÝ|çS¾üBÝäÕ8ýÓÆ]9ÔËuº¶=T+«¹3Sóï~+¶•/Ÿð,dÏ×Z³#Épš=hϧ9ÓµcéŽü˜œ†òm6­›O9ioèÛA�À^ÙÁð®‚{ÿlkÒè d–µC·íÒµ,d?¬èì†úV’fÝ”µÖêÉdxjÃòGÒ|nÛî–ånÖ³tL€WÓ˜¦9ù<N$™^©ÏÂMmªåÑ.eœ´U9TðOF2smLí›äö•Þ—‰ÚE¿UÏ)ÿJä§ý~ß÷{Ðö^Z/˜O¤ßÖþcI&ïì‡[ïîacSMû��{eç»®Q:6ÚÞ¯†Ò©{ÿ×ãT‚±kîRj«nÂqMŸ=—gö«îì+lœóñC!Ü…u¯æÜü¬¹Ž½‘{áò”JÔÿ'ÉÇÞ7 ›çö•îÊ_ÕóË+õäñ›ïDýNäï¾N‡ÏþØYëƒîz“7ÉÃ{oô*­×çY£-É8Óæ6ýÍß‘»VXúÛ»3÷Í›º´>—áÔ=¤ô´I§i¿a| ÍÎ×ióÊ·zþ5Ƨ›íË =u­Mì·züæSxË˾apókžJ/[t>‰þ¦P_ó.ÇÒsårë;ó>«5åt{¡ç(­³AþM&�àÚv,¼_Ȱs¤æï®R©…ìP€vã}(ŸuZr\hšâþæ7gqÛ›GVÃïjýÝtîf¯nl~~öâl <Y­¾~ะ5ðj=Û½;»‘¹}µéý¥k×ÿûŸÒÚuÖËÃ?«¿;-;¿ýs7 ûöÏçÎoû šÇ…jWCï·ÏôS“’M7Ÿ~#§z:óß‘´ûu…Q㘇ïšhçíVVf54N¤söÊ\gÒÊïaż´ÿ0Ÿ·û¶Ñ•§0Ÿ–t_ÓùL{ÒVãÕšŸÊ³îW郅ë�À[3^ó‰}¨y'ÓÁSiúË�\Ûn…÷ìFáÂr¨fÌÝ8½Ï*7W͆ñÚrØzYzaÌÍÃßÝl—Öð—ByÖ¬Fãß|+åÉ8Òí§kÛžÉK¯}í]pûê¶ûK7ѵë7"¿è‡Ãº?èq€¼ndAÜ=ŒÛë€w­Ð*ÁØç‡YuM9*„nwmpóN+0 Á|>•ÁiSêî³u»æÊí_›ÊŸ™ÿW2„Ö-4Ÿà6p n{êÿ«•lÞZxÛ�Ö·Sá= Ë®=yŽU˜|'çç’ù²`ºIÚªZnþø®†?»©ÙZ¤ƒrœ|ŸÞŒÝtúÆ3y#ÝÖSé%-³ìüF*ÏLÝf»Û·_ÊøüõNÖ¼ÿ^Ýo¿/¯]_4è&4ÀÎÛpx¯†ÜrxÏ›ÓUúÍ<VôPe—³‘ðžñšÙèòl"¼»é*몇Û�°Ðn†wsC¸qïTšææú@µžËëÙ<§Þ‘áÅX·’‘½!Ö;¹¿2íGÝxÕ\®Í‹¬füŸíg®ÖÌõhSlÖr5ìH]/[æ¥Ö?¦70}Sï½–óÏÏe2ÏoÐyyTHw7íìÅ8Ý5Ýו¶®›d–g‡Utíº~ÑT×®‡ùuݬØyY¸\3¼gAõ¦á=ýÿÒÐm(üÚû�»œM…w×&=ímçôÊëšÏ:áݬ‹{à�lÊN…÷¼¶[wÕØ—ñ¤—ÖŒy/‚å/´6¥ÓKþâ§ÿ¢•»‰„úk÷Â{6¾îšòKéz/m™ö}=ÿœ[v>k£ï½P,âú¥7ó×ã'wܵl]ÔP¦_4ÕµëåMo;èyûáš/¬fayyx¯Œ—…^{]ZÔ³ Ê%•å,šWù3óíf=oóZ·`™Öïf:Þ�€MØ­ðŽ*‡w×ãúßáཉAÏØ®i^¨yaÐ×è*2}¸?’ÎðÂ~Rïj÷ PèÑE™ å,«;y/&ñ~ j.³×¿“¡^ÞÆÂ»«ÈðkÇ7Þ³ÿû•š~Ñÿ…$4›€!¼Gì_ü»/ûñSù×§ÿs­M71з;öMÖãK£%gkýH“ ¥åÞf¥\«†÷üÛÅüÁÚ ÞÃAöíba¯·™Â|/äuÿM8ćÞíq+¶ö?}˜póöO…òÉéªLc¸õ=Ôä0áuQ/wò«³�p?Þ#óuϼ鋦›><ùÿ+­éßÔ »¨Ü—A÷У÷Ǿ º)Õ½e~9Yÿâ² ©.dê¦y/νcŸ~g¥›hf ïZ¡Ÿ÷@-¼®™-¬?wیЯ¹™÷Ê}¶;Ù»AnÐaü­m†èvùçü«ÍÃËD.Lm|ú`rYž®U÷äÎ}6zÖÎgŸåµùÅ~Þ˵ð�€ë"¼ï¹ëvãÈÀËz¸ÓChÜíXÞ�¸ÂûrÝ8nòES†˜‡íHÃûʶé��\á}O¸ÚõP0a``X>¼7¦ùiž~#Ó+ý¢ç#ú3�lá}OÜU׎ ÷axoÌ‹«¶­zéX��6ð¾§\·»ðb*î��Ä‚ð]+ÏK« ‹��bAxîöO¿Ðúo_ü 2 ÷m�� „÷ˆéýô7|(ÿò?þ—­¼ìZîG|WÝÜ(Ô/û®¡îwuØÕf\��Ä‚ð1·¯Üþò_z½«æ5zþ���¸„÷ˆ•Ã{™~éU×ìn²¶T?���ànÞ#¶*¼û6ùK­÷úgö��îá=b× ïe·ùWý���€Í#¼Gì6áÝçú”×/$†Âzyе÷���Ø<Â{Ä6Þ}®OùU/½Òt��`óﻋð^¦»^ÔÍkÊ/½Òt��`óï{áݧ_zÕÍkt³æ��°Y„÷ˆ½ïð��€»Exá�� .[ ï~°d·µÉy��`û¶ÞýPɰ|¸MÍ���»a+á]óƒ%Cx¸­MÎ ���Û·µðŽ»Gx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸Þ#Fx��ˆ á=b„w��€¸l!¼_É49±óùHºãŸe>ÈYëPý¿&Î@fvL‘¹ÌÆ_K§ù ýÛãÇÒ¬H½3Tsy+I³žÎ§Ö–þå…Œ“¶4ÔÿkljLæþ´érrúoçò¢Ó”š]ŸZóLF³¹ý{ܾÒ���öß»6—Ë~[j:tO^©€ýD’ñ·&Œ×Z}¹4㼓iÿÆ¥•ŒT ÿQú­‡jÙ¥ÕÿÑŒ!ö³Zë…¼ê>‘'ý‘ : 9¨wdð¶'OZŸË·ýϤ^˜Æ›ïÙ@¦*䛲Tþþ#¼��ÄeKáÝñGŸHç¤%Éä¨-­ZM»#íU¼Ÿ$r\{ ÇÉ÷æÿy½²í4扴ºßª€ŸÖÆ×?•gí_ËpvU æ•ùÎ'ÒoÊÁaWÆqU¼gûŠð��‡í„÷«¡têz>yø|Ü•C²çßKrü ¨g2ÔµêÞgé4j>î3æõ|¤3¼P؇÷w¾WS¾üÂ4«©5ŸÊ`ª "Cx��ˆËV» ÝiÛtýÉÏ2î~dÛ®Ïíßý¦.Êl FÍkVc§ÉÆsÍ_¼vó¥Ú|™&Ò´å?ÐÍfº/$é½6öqqûê¶û ���»a á=ÔÆÜ6w1Á<ô÷ vŽÔrëÒLÞÚÏJµêY˜÷šÈ”®†©«²§/¼:s™¾ÎK7ßxÞ��â²…ð^ÝŠ©!WÁ¼û\º§=õtx·íÒçSüê3i?Ö½Ñ|$Ïúy­›¸Ø&2YŸ¤{X«†ùZK’ÞçÒÕÍh\³šÆ'Ò7Íd.ÓjmIÆi}~Lï���qyÿá݆l¿ö;kFãºkœ}+]ÓÅ£þìTzãŸì˪5i´{2U£TšÖ”›È¸6òYo5Ú;™žšî&ÍzÔšÒyq.ãȺˆtܾºÕþ��ÀÎxÿáï á�� .„÷ˆÞ��âBxá�� .„÷ˆÞ��âBxá�� .„÷ˆÞ��âBxá�� .„÷ˆÞ��âBxá�� .„÷ˆÞ��âBxá�� .„÷ˆÞ»1Ÿåe·%Z[ú—sûiÈÒo=”Úq"“e£í»Ù@:‡rœ|/f5çS¾|&­ÆÒêÿhF‰Öl,ýD¯ë#鎶Þ2ìmàØÞÔ|öDù\ÉÌÕ¡Ô—nëÐÞ·¥uö•$ŸmbÛ\ʸŸ¨yÉawTZ.öá=bn_±¿€uèÜsé4äçN­)ç2žy·»ùHº‡5û÷m†÷å<y¥J}[s¹<ÿRÎËëqùJ’ó5ƒw!ü,ãîGv>Ü\x¿NyÞ›tÿ¦ëúÑî‡÷nÛ„îбFx׿“DŽëK2y§þ§®EI[µGÒzü‹[nµÍûm©™c´Fxá=bn_±¿€fßJW…öZ³#ÉpšÝÜæÓœéš°Ú±tG~L¶¡mex¿;úfÒîß>¼Ï¿—ääÓÒz¼“‰ ío6Þo[ž»äVv=¼ïÀ6 kÈŽ¡;¼žÌÇ]9$¼GcËáýLûŸÊ1ÓØFxÿIÝ»^ME:oDþþ•ýØe6¸4Neè×°;ó‰ôÛ:À»Z1mËáÝ=l´nÞ/eÔ=–Za=æ2I³v›à½Éð¾‰òÜ¥}ï»° CÇRw=!¼Çe‹áÝ~-´_5î©÷Þÿp!òÅ8 ë÷u>üïíÀÎÒµ‘«¹ü¦–Þø¼¯¯ó›moô*­×çZ£-É8Ó¦mü‹Ž4º2ög®Û„ŸµÔõOŸŸ5i´>—áÔ=hïd:Lò&<ºùNo,3ý'÷°a¦M‡Å!^Ïçsi5l3ŸƒÒì|m›Ù0åÍç öKù§W]ò¼ÏL�ÿAfãsIt;ÿîŒ&=i«y¦ÛC/ãËR{Z/¼÷Þxëz(­d”®G¨ù‘ÿ™¹7üņNW=xtÅvœO¿‘S³­ôr¿“Iÿ™œ¹û®>V@ë4IÐËIÔ~´å¨5O¥—íg?¼ÿ`ïkj<µÏNù·8Ë÷…â·ý±øÀXXÏtÞÙñà,,£ îvZ3äÛ0ûvÉ|®ÛYdê ½¤LÙ{êxÈmµŽƒ§é²Ì¹ ¦9}®þ:ÖÒ}ž²t›ë?/Ù· Ç×Ëyù…:×Ôçý?æûÏ?V3¥}ØhÉÙÐßÇzvCI:M»®¥}l¦÷Ï¿I‹?¤¹hé¶YzýPÔ¾ë¹r4>‘^ÿ)á="Û ïö¢Y<XÝp$¡JƒFzƒÔ×ï©Ûqêoä­wÕšOeà¸ú‚£o˜îbUùÊû~È·éfû_»þ‹~1°ûÃÿ-^õ€Ý“…Å•—}i™ë‰φwÿïBu¸¼ êß|MMþI6]*²qTØžJCÝpûæºæÂ¡wm´ó^UónÚÑÖÜtv¾…xøëúôaÅ ÉÙú«¡q"§*äLúŸ¨2v¤÷O¿´á߯ %:X$¥‡…Þ‹­ö^à/?»?äû¤RmÕvÔÛèè$»öϧúÃ{©tíð®Ûd(v/ µn¿fßÔ¸ýÓãÎé½È­ƒ·ß—ï w<éí¨æsÚ—·æéC5þéf¶¼´xñ˜]UFõQ`šmÒ|b8]ð^£L½ÿ–þ:ªe5Ïdd–©æ§‘ìïcÍ?®¼ù¬\ŸUû¶láøvßé2è Ø8VÍú|*Mw<«�=8ÕáØÛ¦=û‘´û3MºÍÕ9ШcÔêåW¬Ü6+¯úC}ü=Ì·Ÿº6µ>”*ËžÚNx×ìÉèß|Üž\¥“šHSŸMuàž~£ÊêÍ(=)ëù“¨9îçëöÕ&ö×¢ÚõEƒöÀΫ„ò\xÈÂOàf«¤Í¿ÞØñ¼« 8…Ð]jbb@±—–ô­kígëgˆ¹¦A>Ýšá]sÛ ²RÕkwiœJ¨ mG†—‡÷•ÛQ¯kö ûûòÚÙ*{)”φܺû¬ZÞ…ë°Î¾¨‹éçùxåm»Níò ÛPÏWÝKýýSًʤTއ´\õÂÚŸ©y×ÿ¶ó*”S Ìgåú\wß.¿¼=­ò±ªËyô¤XöÂ>´/ÞúǤ øuï³ê¹¢…¯'¡snåq¯¶•yØó¦ÑÂËžÚ^x7A¼.Íä­ý@¹J§®kÖ‡re?šÏä¸ðÔêžb-{ò˜i*5)6ü‡.<÷ÀmÂûºµë‹=-°óìõ#N|î&šÝ ×½ÙÚñ²ÿ»0”Ÿ›ùÞX¯ÌMv½ò‚ÂRÅžt*±´Õ §‚„S  Q% †¶c50V˳z;Î]yC=­Í.'°Î¹jyß9+öŲ}_øVÙmuÊ؆Ù1]Þ~zpeXR¦Àñ.C­S³#/ú¥f=n^+Ï™5Öçºûvéøë«nÝ‚ÛK—õJ/£¾2WÏmÝë‰+S  ¥ã¾|m/ûjKáÝ,¥ ‚;P›‰˜ì§ÃøIË>-ÏÔSm£rpçäykÚ®êy^Êtø•¼Ðí½*íïÿÄ^Çuk× :ìÿÕ=}»Ì]sBáÄ—ÝüÝõç¦á=ýÿâнàÚX¶à]õζÑ}˜6 }µÝš÷R ºyx_µSy;g} µa^¥¼ÿBªå ¶æ¾í{ׯY‡Ïd £ž¿m×)c`š×òþ)[V¦Ðñ`kÈÍÃ… ï€Øy]ûœ »î¾]<þ:Çê_ÒqÊe÷™í¹:WÏ-t( ¶ÍÒã¾ðm@.¼\ì«-…÷E'ç[IšuÞõWg¿–vÖ62t³²mÿLÓ?¤Óšòév–Ï$InZÛ·¯í¯ÛÖ®/~ó]�°ó®ùÂjvýY~³­Œ—]ël XÔ³²ÖM6x=,sÍ ½¶ò•{8PU‚žV ¹j™W¢ly¡í臦40V˳z;æthv/ÿúm˜×Q-KUhœògר•eÙû\¶®åm»NÛÐìÏzñ›ìŠ%ó^r<˜‡ ÷²iÖK“×Ê€ºÞú¤®»oCã¯w¬¦ÛÏÛe˶‡§z®h˯'×¹~T«Tx¹ØWÛ ï¶yLõÆcàzGo{ò¤ý2o;gšÙø'—ºš7èí hç©§úµ¾ú%²ÎWiMþ= ]_6üÞ¿þ»Î´1W7È,d”ù•îïá›mñ¥D­ÞÝMT]ÿJ½g¨t'gÉXæöæ[­M¼×ý7é5ÓÞÔ—‡÷@·ÞÝ‹tY` mÇjx •gõvüFÎ^úa.]ÖòmVæÖCíROBúÞÒþ¤þ ›åÏ®±/Ê¡µ2^yÛ®SÆÐ6tË+÷ˆ¢4^¨ùè2,(“V9T9ΟËKÿ2ewË´ó*kÁù¬ZŸëîۥ㗷§Sš§+§þö£ÐÓº>œ}©Ên÷±:ò—´5µ=_ÿN†v«çŠ8>´À9·ò¸_0¯ðr±¯¶Þ³‹HïµôO?÷ž ]Ó˜¥ù¸c{ZÐÜÉåž”ÝWsê$qoS»VÝðÒ7½Õ 3N¤Õ8ºÁW¥qÐûéo>øPþö㧯]_w�öAö•z©ë·Å?ÒäB°uEA³!Íî·ÞõÆ^—üÀë^„³×ÒlÈÜ·¥¿zâJçë…úWF;×½\­Õ“‰ WöÚªÃÙ_òaB—½Ñg) ‘…u1\­²0Õ§6,”{›©g½‘hîÚî®ÛºfTw¥çº.´*TžUÛQOS÷šMÚý“ÕÎVÞ‘Z`Ñr²ÚOwïñ÷}àË>[g_ü`çS Ê.ÀÙåå];êm3N÷ýÊ2*m˜>l–¦QC¾MܺÂ{öÐëBbº/ëYïo¶‚-{QÔíëÒ±V™uÅú¬Ú·eKÇwåÒ¸ÔSNá}Ñy™×ø‡·§ÿž^ø\IË£Ö·\pmãMëÊ‘õÄ7ŸÈùé±|`Ç]øƒ½±Åð^—†zr̺æžÌË7Jêí²Í n²ÝÒ 1Å6mº6á¹ôý'Ó{ÂÕ®ÿ›ÿ: j†û6¬Eª—ºOku³t×™¥/Äé»ùøkR0¼k^xÓÓVjÑô¼{§^Ûáò¼m0òoÐ!.˜­{àš¤åñk4³àà¿”w•×<ýF&£´¶/ß.ÅÀV4Ùºê ”¾ÄÕƒN·_Ý–³‘$vœt;ü îÒ¦Ù:Ë“VØ(˶ãå+IΗôÛ½nx×ü>³Í¶ì¦÷¬íòÓ@ý ¼þgêdÙ¾½ ÌÇÕçûÚ¬ƒî‡ý" â…ÞEeÌ„·a±Ÿw¯>¸n¶LæAÀ}®‡4_ž)ç“ï²ýª9/kÁù؇„eë³jß–-ßÃåq÷Lôïè²TÏIM?\zý¼Wjáõ1ÿuö2rñ˜+ÿ(óþ‚÷™ù\C^²mV^?t9tå¥[—§òJ÷ó¾ôz†}²•ð¾˜ï³>R3ö"ÂÓbØ]µ]g`ˆeØžáÀŽÈÃ{±Ù °»v(¼«'Åá¯ÕSªÿ•³ežÎ9±|ï£í:C,Ãö¤áŠ`WÞ±¶Þu`×?ÆðÒýú©´NCo½»vf'’LïwÿƒÔ®30Ülx¯Leƒmš`ú~^òË�¶ÌeŒuz«vÃÖÃ{úÄkÛñ•Ï׃Œ]f±àýCó†› ïUÖ¶Y]³J/ÀØ%î…\—1èûaËá·AÓ†õ��bAxµò ‹��bAx”®•ÿWÿ¹Gw‘ j�� „÷ˆ¹}¥¨é}ÕÊëùÿõ~¿W ��pgïsûª¼¿\[ùG¿ ðÛúA���›GxØ¢ðîÓmåû6­•ñ› z^�v뎷ô³ëÛ`~êýáöºãË~A÷ƒ÷Øk™þÞDº­#z1Ù˜»Ü¦úT¿ ÌûB†#ï×xÝx‡ü†¶‚ð±uÂ{ÙïÕ=mµòú¡�ˆÇrž¼Úý›´ùx?˜n+¼¶×VûþõîìõðŽ»ÎöÿsøtAxsj;ž)ç—zëÝí6»rœw1¼çãÞ±„÷ˆ¹}uÓýu›Zy=‹ù$‘“ö®ß¤õÍ´¥½¿…±›Ûë}ü’fu¤Að~cóï%9ùTú&¼§îr›®=oócl„wlá=b· ïeש•×}ÏQ°?º´Û7é¹ÌFgÒ¬íÀÙíìöºëðÞ„÷Û¸”Q÷Xjµö{ ïi('¼c·Þ#¶éðî[§V~2³#»L·…>kIÃ/µ¦tzc1‡¯ÿk©vXz³ÖóJ:*ÀÙq›§Ò»±ý¶ºodÒÿD-ÓûIöB9jÒh}.ÃiÞÔe>ÈYë0/G6oó2fMC²vÞ¤;öÛ²©iÆ_K'[·Ciuû2ž¹¸¢Ëú\ýýaZÖáçj55Þiž~Sý5lgáö µ%ö·Çwr™•G¯{¢ÊrU(c­ùTÞöHÛ»r©e­ü5[/¼÷ÞxÛZ­{2J÷÷|$ÝC;?=d¡Ñov v‹÷A4õ:&K¶ã5ÖÇ/§+c¡ìyû[Íwð4-[£-ÉøÒ?}.c7ã¥ÇÝŠc6d6–^§™5mi´ºÒÏÎ}ÜKÒUË;ìÊhÒ“¶Zß¼-¹Ïw3;Øu]{›®8§‚á}>ÊK[æl»eáý+eûÍ»v$µ-ú‰=ÿFj»·Õùëš°ʦ×Í»îhÁiÉ/ÿ"ß ùƒbºMìç~9%Â{Äòüî÷W¨V^ÿØmº™ÃÇRkœÊÐÜpÓ¶­…ðcCÑê6=í‡Òh÷Ò�á”™÷• Žú|T7øã_IÿíŸÔ ùHÌæõï“,DΧßÈ©­î&¬›?LÇÕ‹2íÇÕ¼½›tzóök}ýŸ~÷Ü P¦ü± Å🆨b»âÆñgr6Ð!Òn«Â¼*Û+ÔN¹´ŒÖ3y9L—1µ±ùÙ¯¥ûÒnI"Ç…@¥ÇûTš.(© 48ÕqYÙÜ2ý€å¢ÿ¥÷…JÅÚÞtÿ>Z\«ûÀ}¶j;Þ`}Ì1¡Ž¿œî3o:½ü£æ™ŒÌúÚí›WËŽ»òqP:fõÌËì{ Íî·ö8µs.°ÚÀkŽÉƉœöÿ˜>dç_™}h*틵¶éªsj‘rx÷ËìOë>7D¡óÈ?ÿr|Ú—·æaåCé XqÝY>mzŽ3³|u^„› ï3u�7ì2–\´°·¯în…¹Zùß|g?�vVªAÓ»1®Þ] öC†­ñ¬çŸ¹ÐQ®¹5«0ÿR9Lü^RìÍÝ[^:ïò ÝÕû¡FÏ«^*Cu½Ce]Tþ‚Ûkíùe5šÞôvžùÃŒúÿÑ“B  NWØ·š ¼•`VªaÖŸ-~¡}°Özßh}ªÇ@u§ë\/:5­y×åXzÜéOBû(È.»ŽËëQÞ—K-ï˶é:ëdÊ[ZßP™ƒû§ü8ÿŒôó|ÚPÙM«¥û¾ø…þì$0.b´cá] Ÿ¬¸¾m…w`/鯩_¸&/ÞMÔÞ¸‡(Í^·V’pr7éü|͇ò¸ê!a|./\³„„÷ðxJ)Œ„Ê.É‚íµöüB¡¨žÒéÊÛÊ ÷Á¢ð Iö³¬fTOûDŽ–­·’–«8ÿuÖûfë³NxÏç]kväEßk–±æq*ÐÂó¤TÎP^È–ñÚá}½u ºUx_TŽP�·]wVL›.çH:Ëô]ž—ˆÇî…÷…�\—Á°€k{ªÛœ&õJo­k’ (+I8ÙZ´×<׿]‡°døFz¥à–Î{U0]RûX (¡²†Ë_²`{­=¿•áÝ®C)Эvð®Æ6Muì¸zùGÿ°²»ÍÐ>X½Þ7]ŸõÂ{ö ‡jÈšy¬yÜ…öQÈ‚0[)Sé8[ÎN{íð¾Þº½¯ð¾êº³lZÍ~c”._{¼ü]De÷Â{èÄYÃ|Ú“öñÙƒûÃí«;Ý_À^³mM 5¬¥›è‚0Z´âFk…ƒva»_Å´%®{m«Á-÷ê`.ƒRZÏÐx §õ-Ø^kÏoexwÓyµŽkYÞ+áÙj™£Q¹ FXZ®ë†÷›®ÏºáÝÒaѽLmÚ _®>î”PùƒB×(mß…ã…„÷Íêmj§[±nA ïîX´?Ö¸î,Û—†mª§ÿ>z]mv…¨í\x¿v¤¾ð` Ñ_#ë·ÍËm8AxV¨Ü€oÞÝtê|Ëj6­Ù·Òþdþ¹(¥Ÿ«rz§QfC9KFòçÊýæá}ax2Û"¡².*Á‚íµöüÖïÙÿË=tèPtöå‚P¸ ¼—_ö¤åSM£Òv KÇ/έõ¾Ñú¬ÞÕ:Ÿ?——þ7fû¦eL˱踛²…ʶ(lêr~oßEÇ_çµÃ»ûÿòu 2Û§´¾¡2‡ŽS׿= å ¶IeÚ›„wÅ–«ÖhHcéõ ±Ù~x÷»•j<–Žî ­p¢êpîu!öø±©9¨w†r•½’‡ÔƒzG†W«¦»²m¢�î¦lo¶ywŒú&:–×ý7ê†hC’¹q_ØÏ²ž>¼ë‘*µk ´hZÛK‡ &i�z—w)¨¯•“7éÃ:²[ÃW®ÆNÍ/ëG÷Ìq”ÿ?XVoºE½¡íå¦-–ÐüÒæ*j<ÿe<vòm¸ö›ay7†Ùv,õ6SÏzc)ó×Å~´Leü¿l;æëZÛG‡ÒîOÔÿôq‘þd:­Þç?˜qêY7›jÙºG”ºë®pùq—/#p̆¸^ŸHß,Ïön“ý_qûr­mê–¯ì_döúw2¼t=7­Ø¦+×-Ä;NýãÏ­—ŸM²kG©·™ºëÅI³ÇO9€_纳,¼¶Ï¢q£­†wÓÔEl.¤?g¯üânOü¬^w0žN éâç_°�„Ø®úzq6éEÀò€—Sík¼Ä¯ŒÐA"ëãÚÕ¢åçd±ÆNqm`ÝßK}Äg}^›þ¿'ranÚ^åÙ8®¿kwÝsËô˜÷� ÿfÚÝmp•µ'oÍòüÏÕô•·×Ï6`äÓþJ’,.ãàð™ L»_ÿ³´ÉJáeÎìZX‡B­uˆ*Û¸ï\µý ýÛ—émñh½àjøû '¿-­ãòíxƒõ™$±ë’/?˜òê®7órª wç_Êùä»l¼Ê7C »5ŽÙ€âï¨íÐI²¾Õ]mx6ÏÂ}{¬»É¦œþ¤¶ï5¶éÒsªÌá|>æãÏöa#ûÜ ÊúeSÝÿ»ùÜ?ßгéJÐË®;—ß-™¶ÈlÓu.í…wû$ë?ݺZw¡Lk`üš‡+™&'jùþSæ[Išu9h&2µŸ¬7]üòŸð�×§€Ú*ì.¬©¶I?p|*'¼¨zïl)¼»'z?L—úGu_yž(m?ðþgþ×”úÿëNwÞà¦Òopרm¶Á´^8äEÕûh;áݽdá_KmÊÒZøÒWE®¶>›®ÚÞk½éîÂ;�\Ç<kól®KÛG[ಒ9F—¿ãxm'¼Oiªyä/º—ª\[µÐKnœº4“·ö3[£žµ›[wºûÁí«[ï/�¸'Ü ³•¶áÀ.È^ÄõßwÁ}³ðnß67íݯ¦28mË“Ïä±nþÒy&ݬk4ûT9Wãüê3i?Ö/Á|$Ïúy­_€Éjð¿’Q_M7üɆ÷ÓÝ„w��€¸l'¼K¹ç„©Ìmm|ÍuÙåÞ07Ÿé7IJ/Ö¼îÍlxoKÇt•¥¬3Ý=áöÕí÷���vÁ–Â;ÞÂ;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\ï#¼��Ä…ð1Â;��@\¶ÞýPɰ|¸MÍ���»ð¾ãÃmlj>���Ø [ ïx?ï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q!¼GŒð��Â{Äï���q¹qxgد���ûð~O���ì?Âû=���’���°'ï���Àž ¼���{‚ð���ì Â;���°'ï���Àž ¼���{‚ð���ì Â;���°'ï���Àž ¼���{‚ð���ì Â;���°'ï���Àž ¼���{Aäÿ¹½S&ƒžû����IEND®B`‚����������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7c.png��������������������������������������������0000664�0000000�0000000�00000041662�15030617045�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��@�����1Zï���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��CGIDATx^í¨$×uççœ`›Ø!@‚CpÐ_2ØQ@áýõ0Ìk0bÙaÝ‚‡7PvµöÆ} C’ 2‘vAÞ&3^Û «ôz$Ù^kv{g¢yüpKV¤u^ÚJleæ¹,Éòó“-fŸÏÞouêÛÕUÝUÝõãÞªï3¯ººúVÝ{ë|ëÜsoB!„–AD!„ÖAD!„ÖAD!„ÖAD!„ÖAD!„ÖAD!„ÖAD!„ÖADˆÇ;vŒÖ�#„T{!Cçé?¬CBê=¡óôÖ!!õÀžGˆÇÐyúëz`Ï#Äcè<ý‡uHH=°çâ1tžþÃ:$¤Øóñ:OÿaRìy„x §ÿ° ©ö<B<†ÎÓX‡„Ô{!Cçé?¬CBê=¡óôÖ!!õÀžGˆÇÐyúëz`Ï#Äcè<ý‡uHH=°çâ1tžþÃ:$¤Øóñ:OÿaRìy„xL­ÎóÖ@vŽ Ê0±ãÒé]7íÈñ©í°»¥û¿>#™í°Û¥³ó9¹8ÉQxø1·dÔ;°Ì6º2œþâ˜Ã¤ÛÙ­þ+ᆇÒïnɺï·×e}혬mödÇ=Éàâçd§³)Ýá›ãï~R=ìy„xLíÎóhOºkA9Ö:çeïp¢Bކ]Ùņl÷÷'Âæè%émÞ|çøÎÀHœ^:'#8!Ô}AÃ]•ɱÞ7-fŒp¹´³)'º{1ádÄùµmé$©£Ã]ÙY7ç°fÄÍÞË2ìþsó;krg$€^‘þÖû‚ò¦ ­ �"¤ØóñwPL˜"Ñ ‰ß¹)û½{e-9wÏDY¢c%‰™ƒkÒ»ûíÑ%Ù†¨1ßYÛꉕB$ÆNÈÎàõpca™Ç‚­X(€©ö<B<¦nç™.L^—ÁΉd2ê‡ÁâßÑíá0Ú„7eؽ;v¬#9|Iú£Y9ˆŸ»¥s ÂfV˜)“¨RhayŽF¹Ø{X¶ÖOEBl¼oüX¦ ÃËòèNg,Ü‚RªÔJ¥î:$¤­°çâ1õ:ω0™‰òôe+Òš ýí±`èôdn ˆ…ÌDŒnÊhðÙÚ<?35?§¥ûÍkáwNK/A$Ѳ¬É†¡ÙyMÇwd|5<Ï)Áv ÃÞ¶¬¯Ÿ5"ì5#öÖÍwâÂ-@„Ô{!S«ó´òRm&2¤ù4–è™Dd¦?›‰Ô„ŽŠÄÏÞÁä;ssv´,ë²3°²ŽB!E›ÂóœDŸŒ�럕u6Óë°v¯ôöo{äçB©ö<B<¦VçEyâ9;ICV!©ß±"CSŸ%E™/´-ÛVdÉ?“ïÌŠ¬)"áb‹4-Ç$r5SVtG“¦Qžƒ=émm˜ßŠ%z瀈z`Ï#Äcêsž–`IMrŽ eùŽM:õ<àºô:ÇÍö˜˜]“~$’¬YZ36›P­DQ¢©¡¸ðX‘(R1¥Ç±…lC¶º=S–ü¹? ŽC©ö<B<¦>ç™>”eBJ”g"T¦#C²×Ý‹Šõs2°¦Ò§kú¹Ã_º¾Pl¸m¿'›æ»ñá¯É±’¿· @„Ô{!Só<’ýóáº=ñ$gKÌĆ–&ß™D†0ãª΢Zë<(»#;‡&íXóÐÍ"¢b,i¸ çô2¼ü¬ìï£DÈ7ºiÊúÄ`_~F€&‘ªö/&,☠Bê=©Þyê„ÌÄ‚„dk×Ä 0†‰ßÛxè^8½øaâ±bÉʉ¨°‰ ³:ÛkJXéZDk²¾Õ“áá-9œ¯½Ö‘s»¡À9Ô¼” ûv9Fˆ‡°çâ1tžË¡ù?3IÚ5À:$¤Øóñ:Ïeˆ'6× ëz`Ï#Äcè<³3Np^—þ%ÙY?.ë;»3ï«Ö!!õÀžGˆÇÐyfGgxS×ÏïÊh™Œå`Rìy„x §ÿ° ©ö<B<†ÎÓX‡„Ô{!.Lÿ^üRÍ¿þë¿– .Ðy6�Ôák¯½þ•Œm„2Þ= q ¬4|ß\çö“Ÿü$pšj·Ýv›|ùË_?%>ðo|C~ÿ÷?¨;Ô!þŸÅm„² Bœb±s»xñ¢üÂ/ü”¢ùoÙ¡�"¤(€qŠtç†a’3gÎâçŸø„üÞïý^ä<s ¡däÔ©Sòîw¿;úßýÝß ?©ŽO~ò“ò¶·½MNž<D¾ª×YÏ[­Hüñà˜¿ò+¿"çÎ ®óïüÎïÈp8 ÷˜!E@DˆSÌ:78~äûüÚ¯ýÚ”C~ç;ßüûÁ~0ܳX’D@B+ ˆŸw¼ãÑoW)‚Þÿþ÷G¿û‹¿ø‹²±±~R 7n܈Ä%êñ×ý׃ÿcÛG?úÑ×™ˆ" �"Ä%¢w`–ÞèV+gŒH$þÅߨŽhÁ#<"_ûÚ×Â/Ë•+W‚ß|òÉ'å]ïzWôÿ*À¹á÷âvÿý÷‡{”ĉþÞþáÊ>ðùÈG>~Zwß}·ÜsÏ=ò—ù—Áÿm±§çš(øbm„²@„8œ0œãÚÚZäB$¨ª(Èöövð»oûÛå·~ë·‚a›*‡¡Âïã7ño• «W¯ÊüÁD×þWõWK~AôÝyçSBu‘[åu'¤-P�âpt=ôPä�aÁpT•ÃOø-ýý;î¸#ÜZ=øý÷¼ç=Á¿uˆ�]j�†:¨‚~¿3L£~ØN) B C$�Ql‰±yAÉió;ÉÃ(šÿç[§ãÕk«ˆ.­\ Dæª�¿ÏûB4°¼ö@Hû �"¤fàÐÈlϸB |áq]zûfýAä¡N´°tpÇåX§'£pK‘@˜jÝ Ay>ó…e^P£šË–(MY!5ö±}lJøÀ0VÍpO²�r%úìë2$—$€€Î CTnq&ùº®‚æ„eN”&„,„ˆŠÑá Û‘Á±UÿT?ë¨]Šþ�ûÍ¥d„Ywš~×]w…[Ó(^�)L”&¤8(€©DT ,tHÿâo8Øê™uÔ.E€:yØ\J@� C¢ó¯MyHÁï3QšÕ �"¤Ò¦µãɽ4WÅ”%®E€–6— ¢/*\!>Ò#.å  ‘D&J²@„”œÖ³QÇ Ãÿiq-‰U£?‹#Õ¡× –Çq³OùoH·#d³Ì ˲A;B¹ì6ÆDiBCDHI`öýtaaŸÎ]Œþ�-Ìì넺uI`0Qš|P�R0š¨Zý´öåq1úôúÁ\ÁN`GtÏ5˜(MH6(€)D0ì‡ÃtÙñ¸ýöutÔe‹#æE¥uh ÿ2Qš @„¬¢ÓÚ—ÃÕè°¯©K š¢Âõì*Ú6™(MÈ,@„¬€>e«sÁ°†|q.hêÈ]‹þ�½®0×ÀõB¹ ]¯oÔs<Ÿ‰Ò¤íP�²pxHhvgZûr¸ýzma®7Æg_Ñ 0\—4LËDiÒF(€Éž–ãSŽñ<]ûæ@\þ�½Æ0ɾ8¢[@ÀC´ÙBˆ‰Ò¤mP�’8‡x.…«ÓÚ³àzô赆¹êÞ‘¾‰ÂÕsÀ¿L”&m¨HÞ¹òm‘ž¹c rn/î‹|áy³ýI³ÏÍpcÕ˜ò=pY佯ž5ÿ'ÙÀk*àÔIÀ\ŸÖ¾¢?@¯7ÌUðB[”×3yqD·a¢4i+ÕßU þ^ääWŒ#íŒùûÙ7Œ`0"ᳯ‡ûýLä•É>iv‡_0¢ãŠ~¯.båµЋæü¢2; €p͆@ HðqZ{|ˆþ�ûº» Ú‰–"Â×¶ó`¢4i•ÞUŽŒÈ9:௛ÿáð¬0§0€@¸2ú|öÀËáÆ7̾Ybêô "ß3Ç«ˆ¸;LYâ 1¢ç α"„r<U—Ðò8°‡z(rêð¤ßG€sð!úì:p»½¸¸8b˜(MÚB¥w•gŸO�G‡"÷šÏâ\1b"I)BgB‘tò™zE (WjŒ4yŒæDèMß·iíYð%ú´`.a ‹#š ”™(MšNuw"š#�0T´Œ�* °ß#Bê¢nñóOW#´šnöÈy°oöphxŸW“ð)ú´.`®ãËâˆyч=7üËDiÒª@F¤ UóÅ%"Lf¿÷šßy1K(žtÙü†0::gƒ$f$7û;m~ yKq–@¦¬ö0 öyàFz94ÚCþÔ‹a>Ï?°ŽaÙ‡Í>Gáwç%bg9Çï½;†ÇÀßú©¡MO€ ÀÐ"=êhqƒ÷qZ{|Šþ�­˜@èõmRÔ}‰Ò¤iTzWù®qòê,û ’U�©øÈ²¯æ1e |¶!}uüÝ{Í6ÂÊvîÑ›Œè°É-€Ìï^yÆ…FÌ<žïT9ÂýNšÏTðèõ¼Ã”û»ø.0ÿ&EÚ%bg9GûúbûŸï‰|Þ ”QÅ×TY&톎·i»ún§Uñ-ú´n`>`/ŽqÐ4Ðo˜(MšBµwã¿n}äDÁ¡/šÁ•U�!‚ôáð¸s‡ÁL9 vN§o,ÔékÄ$Øf<¢†B¢!·X´)¯�‚ˆù@\4$ìˆS¶©éë*–ì2˜S‡SÊë­ãOí?ïw#>­½-!}ߢ?@,Ì|]1;L”&¾SË]Ã&ö0 Ã-ÙˆS´�Òý²ä ¿m � -—}œ\( ¶à P1¡Çÿž9fó„HR ¹ÎqÎñ³ÖS] ²ƒ>¡«5aZû"|Œþ�»ž|CBöµnrÛJÊc¢4ñ…úî*Æ‘Nå½ÀŒ(ºb‡dB²:Ö¬H‡ƒ  )â@c ˜\H·…eN2ûVx^¥ Ý–õ=@¸7yZ{|Œþ�»Î|Â÷Åó‚6ÕÆ¨*ñ›úï*BC‰‘“rH²:V;GeÞ¾YP$¨RÄA’ØÉ#€ôø3 º_(÷9Î9¾‹³¸ìéÉ>mKÜ´£?¾¼´SÑzƒù®¹–ÛçÅó€sŒçÕAp3Qš¸Juwã8?ûBºòPàˆhVÇšuXRä&‰¬â`ÕÐ"a³¨SÌ(« ß"@¸ábý{vW§µg¹8 ý!I×'´î`¾aG‘Ó „(mׄ¥‰kT*€.üM‚SVÔ±&8Ð,ŽÕž_1:Näô“D‚áï1…ísÊTØŸå@–˜ˆ' ˜Ï¿øS^«‰Q«·Ì1õœ­cΜۼ2d=Ç9ÇwA�áŸÖƒ3jcN‚â[ôØuèhov4¤mÎç›”(ÝÔ%&ˆT+€Œã<ý÷F`„›¦?_fÌ^ :õø6–ÓŸ™ŽoÄÄ…g&Ñhªy\ÐP®xys ƒF£°=¾öÏÐ|¦ïF˺ß<’V†\ç8çøu ¿Û7Ú¦OkÏ‚ÏÑ`×§4uqÄ<¤%J·aòq›Êd|ê;Öäù,œ§qª3S±ÍgYß­é“´EaS¿cÊõw°Ý^ÀñEó['’¶U¨Ä…‘uš:G.#ÂìßW›š¦Ÿu?ƒ œ®ßç(ÃðUjrœ£½âöÔu2å Þ4o¶Ç×Q*›´LLwo3¾G€:L˜¯ -¢üˆJ¶9†‰ÒÄ5*@š­H gš¾>Â쯂ižAL=fnÚúy@@]Å Sñ×$2e‰ÏX³W`H)/¢!QôƲ©ü#ßJ‡@yÀüÞÌjÙæ÷ì•«½ú‚¹–öe¶hTQ˜© ÎQ£[ö15º‘²=M*š¤ií|²œà{ôh½Â|^ÛhG̃Fj™(M\Àß» i-¸‰&­FÛ¦ií‹hBôhýÂ|FG„bă‰ÒÄ (€ˆW §‚O‹iBôh=Ã|íSó1ìÃå&J“:¡�"^�ŸÖŽ7Tóiz–¦D€Ö5ÌwìÅ!äÉ´Y&J“ª¡�"N“ö„ØÖiíYhJôØuî;hËz.pîl¿³0QšT C¼qKä‡o%ÛwͽòŸ~<ß’¾Ãq}Î!>­9‹iRôØõßÚº8b´ïs¨›” PɨQ3ü‘Ès¯‹ ~ rùûõÙ׌†@9þïÁ¬€ºŸ}V1xÚÃð–Þüô)°íÓڳФèÐ6�kpî¶c§˜O× "Ñn|"EB´".Š›¢,.’pž8ß²ÀÓfËè”aœó%²Ñ´èÐv�k \1: _݉ÒdU(€2‚a¤WoŽ…�DÄA’hh‹©8ÂõÀuYe˜ 78¼­\ ÿÇ6>ée§iÑ íÖ$ÑÄ9µ}qÄ<à:a,þ€ÄDi²,@) Òçþü“�-ÙTeqZ{141ú´]Àš†yÕ‘#êI²ÃDiR@†Ÿþ?‘—ßaŇ¯žzeúoZ>C¤Ch¸¾¸Î òy워ÓÚ—§‰Ñ mÖ4¸8âò âÇ'²*­@²A¤¢íCYUÛSßÿ™üÕî·äÔ¿ýÑ Æ0öò45úì6Ò4Poöâˆ$?L”&«Ð„è’xåù?9£:W_MÞN[ξüÃàß'¯¿)ìå[¯þx*:DòÑÔè°[áâˆÅÀDi² @HÐÅLÜ ç±kD‰;c›==}Ã÷ãÇLúÝ:ì+ÿô“Äí(#†ÊꞆïMŽþ�Û™58n=? çÐY¯ú¥IVyWAî2‘ž4[%HÅÇ?Ž… <ÊW÷â„ø}”åA¹P>—„êâ•̧ÉÑ N ÖTìÅñ²:L”&YhÌ]C(pâE‰ž¬†¤iÖÀa» nŠBEL£J«®qtõ•Ÿ%nO3Ô'ê•Cd³4=úTÀš "v2/sWŠו‰ÒdÞßU :ªˆZ „ß±£8mâH£G¸.Y…ç*ùTøF…&سˆšzCWÇk2öâˆÈ "Å!ÄDi’„—wäˆÀñ–9ƒ $N7%¢S&˜Öþ‘{ÿ½üÑú¯òéÿýœ<þ­×¯k†zGý·9W‚7qÜÌ›¼ŽŒí´š†hpž\± v .™(M¯î**|Êæ‚SEÞ “póqãÆ ¹çž{¦’aH:<üñ›AÄCX¸¾W ®7´ƒ¶ ¡6D€Ý¦šòS´qqÄò@ÁõµïYL”n'ÞÜUÊ>Ègsf„'?¸Q aSÃö°Eaåƒ0—¨è!KBm¡-Ñ m ÖŸ‚s…sfÂn¹0Qš8WAD¦È¡. k1ʳ?þ¸ÜvÛm‘cBHùÎ;ï̉ÀõGtQ·¤zZÆÐNP·M§-Ñ m ÖPŸ\±Z˜(Ý^œ½« *SÔ[ÕqäòPô¬n:ö:„Ñ* ^ \ N“ê/¯¡¾›ÕC´%ú´ÁÚ‚.m€ˆG¬hÛímQD›ø“w•"†»4Q–Ó§W')y7ç2’Q_¨·"¢~8NÓDo›¢?@Û¬- ¿é9#2Á¼”ê`¢t»pê®RDÔQN•.tx$Ú78^$=#ù¹l°ÔÀªCdRMim‹þ�»íµ {Ú6G¬ô5ô1&J7gî*xZOr`Y Ñ".–W,.%ê"—«D…о|§mÑ ÎÖ&àdí¼ÃÔ¥›Míw Q,;+¨ÍÓ Ë‘ø“Ì•'ŸU’â]ôU$·1úì6Ø6¸8¢;0Qº™ÔzW3Zfȋ§x n0έ7\ÆÁqãuñéIíËä‰á;>&H·1ú´-ÂÚú$¢ 8wôK:ÛzA}0QºYÔvWA~Ç2 9!Í>7eÔ?+ëÇÖd}û’ŒŽÂÍ ¹.½Î}ÒãÉãO7>y§µ×چƒÚÉ<C»ó)/¨­Ñ mÖF0Ô¢ÑØ¶Õ½«0Qº9ÔrWøIrLó Ãd›Ú|´'ÝFÈ\JosSºÃ ‹ØíKû”¬olÈú©OÉà0³jš޵ŒiíUƒv±Ì0ª/kµ5ú´]ÂÚŠ½8bßøï+è‹è›vº@Ù‰ÒG£K²½n~oý¬ôGYŸânɨwŸtz×ÿ‰Rù]OÞy"?Ø·±‹ÛzÒéôd”§ €ðƒ°­F`±#¼ëó ÚIÞ¨¢ëm«ÍÑ í6— _l˜ý6d»¿/™{EÔÝm@R0$FÜ¢ºDé7eØÝ”ÍÞP®q¢»—¡c”áOäÔú†l¬wdg`žID¥OêIN(ÍðTßè™]Ë €å†À nêœÖ^Ë» ¢Ë"¨ÍÑ`·Õy »rb³'ׯ÷dóDW†Pð4}Ê8ó0qjgWÃí.ÂÅݧüDi뾟Y¸S�Í£2ñ“çé¼ Ó–²ÌØ’àiä=ïyOÔ9õ)oqo"H’NjWi†aY×h{ôh{…¥c?@d8ðI�!j«×ÃÔÌ5qÔKy‰ÒË À!°4*@x*Ï3u¹±C^3$%A§ÜÌ— ÕÉÂyÚÃ]eS»BÑý\K®×èê®Ñ m–Îr(Àƒ!0…‹#úƒ&Jë° ÿ_-Qz™!02JPÖÕ|›ü§ªA<sæÌTtyZ{YäYjC®®ÀèÏm»°y,3æpœöK›ú±¯èhQ‰Ò³IÐÅ>0·Ò¢9IÎ&nxot¾OÉØ w\´kDv²Š W¢ŒþŒ‡¶aþNu‰IÐIÁïá�8N}¨ÁñÌÞË’(Ýô¨¼k”.€² }a׆|‚êSŸúÔT'ƒù8­½ ²Š †ÂàèÛýAR¾¶á}èCÁ¿h×�m}\¯G[ű¯à^{²¶mûámË’PUG©(Ëû½àp8ìµ<¶£ø¹Ÿû¹èÿ0ß§µ „M–œ ,®X'ŒþŒÑë ‡ÏaŸq´·íÙgpOŽ'J¿ýío—·½ímÁÿ·¶¶Â=IÙ”*€²8ÌÖ!ËóÁ~0êD¿ù›¿Ü¹4{:X‡*©ÚVçp,æ ´Ý¹a†¢;Á!Ÿ öâˆMÉÙtp¶¥ã7~#ø¹š¬Ój(M�eÉý©ûIÛw2/Ç£ø™O–×gÔµ £?ÓÜu×]l×  mhCbÄ_vww£6®†%K½/ŸÒP–ÅèêxÊŽ74š[VY†Â—V5eEâט掭‚.Žˆ‡ æùÍ¿Ö4wÌJ) L’S±­®'l—.>™¦ÊºÉ¡¬:7­¬èïm9MŒþ¬Z/¸&8Œ‹#ÎâK»G½¡¿Ûöä“O6vÌ¥z)¥$ßÿ©ÈSæ ûÚ«"_5–ä\êʱð¥S´‘ªëfQ¨J‘Ž›^Y¹?lónRD½`a=ÖörqØîÝÄ¥z)¥$i9*ˆþö‡áŽ5ÀNá.U×Í¢\ *F,3÷‡mÞMЍD¸8b2l÷nâR½”R8Ž$‡¢V×ð`§p—ªëC\IíÓ¶*(3úØæÝ¤¨záâˆÉ°Ý»‰KõRJI -Ô¹â3;…»ÔQ7IíÓ¶*(3úØæÝ¤¨zAˆ‹#ÎÂvï&.ÕK)%Ir$¶Õ ;…»ÔQ7‹V‡.[¬—ýlónRd½pqÄYØîÝÄ¥z)¥$IŽÄ¶:a§p—:êæùާ¼§Ùð¾Á);úØæÝ¤èzáâˆÓ°Ý»‰KõRJI’DmuÂNá.uÔÍ¢|µ¾îXUD�Û¼›]/hOââˆl÷®âR½”R’$Gb[°S¸Ku“Ô>m+“*¢?€mÞMʨ.Ž8íÞM\ª—RJ²(¯¢Ì§êE°S¸KÕuƒüž¤ö©†!°²¨*úØæÝ¤Œz±GlûëØîÝÄ¥z)¥$‹^ƒQç;ÀØ)Ü¥êºY´t™ë�UýlónRV½pqÄ1l÷nâR½”R¼á=É¡¨aš|]°S¸KÕu³(RY–P¯2úØæÝ¤¬záâˆcØîÝÄ¥z)¥$Y˜{µäÙ5i°S¸K•uƒaؤvi"De ÑŸªÖla›w“2ë…‹#²Ý»ŠKõRZI?‘äTÔÊ̯˜;…»TY7Ï.˜ýÃK}‹Ó“5úƒ„Õ*¨¯ÍÈ^wSÖŽÝ.›½—ä(ÜJÆ”Y/\‘÷zWq©^J+ ^w‘äTlÃPYÕx×)ŽF28¿%ë¦ÜÇŽ­ÉúÖÃrq0’£Ã¤?€Š¼.½Îñà¼â¶ÖÙ‘G/d4ãynÊhðÙZ;âcë[Ò ö{]ží?gÜV= ,U€è#^Öû7sV,þ(ܹ`îºë®à<«tJU]×Y(€æQv½Ø‹#ÞsÏ=áÖöP_»Oâ@†ýžt·NÈFw¯ö¾p4ÈÅGw¤s|[ú ¥1þ¥Û¹]Ž­Ý+½ýb‡k\ª—ÒJ²h††ËªÄ­N±ˆ×e°s”ÙŸíKc!s¸'½­ ³í´ôFzñnÊ~ï^ãhŒ˜9¾#ƒ[Gr8üŠì ›mkó²w¨Ü|687Tëg¥?Bã6³·m¶—Nïúx·¨¢nÕ±_Õòô«ÓíQ­Œ™ŠW¯^­<úüjóí¡Šzióâˆõ¶{ó¹{^º—‘ðzKF½ÓAyŽ»[ºÃ’ÆÖ³rk ;ÇÇä­~òoáhr=ê­—iJ-É¢Eæ`HD­—.þBú²µ††º.;+#ÛOte ÷7eؽ{¦Aí÷d3øþšõÔñŠô·Þì{|g`º¦‚í§kíœUÔMÚ E[•5û«Žè¨§Í#Êø%éu·d}CÛêxÛ£;›ríQÅüZøz4’Ýs#äO˜önUB´ývÙ|øAù8Út ôƒØï›'k< ­oÈVoOfó×ñþW)õPE½ ièÎ;ï ·¶ƒzÚ=ÐJKìíIwÃ<üh[¯õï“­>ZÙL_úêe–RK’5 TÖpC.]ü…DhMÖwv­›ú+r¹wÍRî: oÐÖðX§'£`ÛD�[?'+2tpù ¹\cç,»n0«+©ý©] EP“¢? Ž6k°#ÇÑÆŒ©Ðžl3íôÒ®ô6Çb$ø»{ÒßVcE"^ïD+÷£¶«B?ùk›ÒÝ3[¢>cL…W ´NŒ£¨7õé׎ ÖÊXm]±¼ëÝk9·;2[±½7I-0µÓaW6¢¿U$ ' õ©!«ýç‚èLjô¥‡ ·KçÜU+"ôk÷I÷+Ÿ’ŽÝP†‹æA¥#ǧ~çw9ØŒ6L}'~MðÙ¯þu…ÒK²Èé¨U%‚\ºø‹Ñ!°°w_Hx²5D7ýøMÝ@ö³sáIX)³n²ä¤Áþ.õ޲uE@™×5 ûÛ¢üдçõàÆûðÃbœÆÕ𩟕3ý½©'SÚUG~?ú<!ò©}AÅÏ‘MV¡ØÑfOöknöUÕË7¢amZ±œë{SFý³xßULhd')ºboÛŸ¤+À¢SCšP¿~ͲzBvÃ6?õ]‹£Ñ%Ù6¢c|o¿eºÄ¶ù=«<ÚG‚‡Š7'þ 8ž=\g§D„¢-øÎka?ÔÏ­k¡ukÜçÆ>³×£œzYŽÒK‚œ‹Eë­¨U!‚\ºø™ÐxÐ “DÐQØÀÍçÑPCˆ†]g>Ó‹cº#‚ʪ›¬âÃ`e¼ý½Îè(ëºÎ'î ÚûC²}ѽ›¿·Î›v&8Ü•<=FÇÐè¥-Ä‘Õ4.¸¹cø›r O£Qî[½TY/m\±ŒëE£û©>d†i Ñ=×~´Û‡/}IÎ_|Áˆ ˆ +5a‘Põ¤ƒ‘€Ÿ“Þ³ß6íþTòĘF}d"hÆ‚Dûˆ%ˆ‚ckŸÁíWz õáÐtÔOÇùAãk2¥—=¶¯u=ªl÷‹¨¤$YÖRƒ*cú±âÒÅÏLLM7|í\vžOHJø,.‚úDŒö”ÔÎ’¬¬µ©êŒþ€ZÚ|Øöì0ýôM}"V´íMXŸ§EwÌ>‡{祳ÞÌU0ÁQ7cíã6Ìvì]–a "žq°bÛG,þúj{Jˆ¦¨ƒŸi£Ö>hý¡Õ.U`,êÚÖeó\Î}:¡ÏD¿¥Ñ7A¢ý.Š(©hÑsÐ~…¿tΆl÷÷Í/ÆÏ%FÂõ¨²Ý/¢²’,zí€mˆ•ñ$\ºøé\—'zϵn)û”Î5Ó�'Ãc¥þc=ñD¨ðköXZ®"ë":K¾ZYÑǺ£? ú6¯íÊrQ{Ôg½qêßzóÖµ>¹NÂìÚVmQ…\‡KçþL¶?> ¬ud§§K?èÓyým;‰ªë¥m‹#~}õ^E$ã"^ÿž~àŒrßô¾=# ´/à>llF¨ÇûJº_‚@ÓÙ\qqõËI™Ç‚Hÿžœã¸|²ÕíIöÀ3!ùz^/+PiIò<c8¢Œ•x]ºø© QmØ ÊÀ››Õ8í¡³}üdŒk;ãâHß @ˆä,ZˆÓ¶2‡^ëŽþ€ÊÛ|"7mrO.cÝ*{Úiüïèæ}·<Ü¿*—‡¯Yè%+ÁÒüýè5\6OÒÁ“éñ`m¬^âzWzL+jŠäÐÞ—dв!0€Üä�i{DnP“)úúÎFJô¡4.ê“„¿n³DS$äõ¹"ÃBûTÝч†øð”%vtH/š/¯úi¡þ#1)éz¸åƒ+/IÃþE‰¹tñÓ?1˜F»õ™èF­‰mÓ7óp­†©N9’Ao'Ìì×Ù ]ûÁ<]œ‡C ö ­5e,kÒ½Z™Ë0¸ý•·ùÈ1L¦¤OoÍþ=Iø·¾Ýœ·¥7ü‡HÌD3Zìö¯ì«ñ!ó 05 O¯ýV)mZ±ðë;%Dt‘O 2dþ¶(¸ôÜXÈÏêo†‚)E€L¡Çúqølüˆ®!‰›PhEkýX³¹fÊk ¶ÈGŒg‰ òê5±"¹˜)<ÜJ¸f:Ú}µ”$¯‚“*jj²K?ÓH{5~+hHÑ”C4ÀÎŽô‚FdgêÏZ°t,×áhø„>¦¢ca:eÐhM Ô Ê³,hY“íÕÊ|Û;p!úV¹®Îýs²µý9ãÔŸžÝ¦=);B]õ¢íB¨ÎvY6Å_ß›2Ú}0lgx@íN†‚@±Ö¢ #$‰Bÿünxß'ÔUÔÄÖ‚KáhtUÎéCA”s¤˜òÛo�H8‡ÙC´ønÒwìkúýͤëaÀ~®P[IòŠ Öª+G»tñÉ4ËÔ rÅòäú¨YŒãJô4¯ÍëS©=ÓÆ 7Üh6‹ÛÔU/=mX±yí¾lâÃ_åàR½ÔZ’eD Óš—u^ìî’§nPÿY§·Ç í®l\‰þ€æµy5c ‡ak0L|<¶h¨»ÔY/º8"„†ÅšHóÚ}لѦhø«\ª—ÚK‚Dgû5Y ßYF±S¸K–ºQá³L›Uñ^—¢? ™my]+œoÌ¡áÜ,ÔY/mX±™í¾xƹv§åÑÝ¿2ÿÆ—Y)—êʼn’`X+ϬÛàñDŸuÚ<;…»Ì«Ô/êyYáƒöUÖ:?q\Šþ�¶y7©»^š¾8"Û}6¢É±\²p©^œ) žì—SÃ÷%K³S¸KRÝ >Wmxê²C¦yq-úØæÝ¤îz±GÄ¿M[‘íÞM\ªçZžÒ—}ÊWÃÓ>†Ö’œ;…»hÝ ÞPyguÅ í¨Œµ¤æáZô°Í»‰ õ‚ÈÊkÚâˆl÷nâR½8ÙBŠˆÁtx앟†6°S¸Ë?ûÈ¿ÖñYU�êŒú(.F�Û¼›¸P/M^‘íÞM\ª§[È2k»$ÙSÆ¡"*ç 'KÜù_Hj^6,nE®•£?€ŽÀM\©—¦.Žˆó¡¹i®àÅqÙ™b0ˆŸø¶'¯¿)ŸþßÏÉ}ÿñÁÄÊ¡•ký£?•¿øÒÓòø·^›©›e í£Š^iØNĵ¡„øõ§¹c®€õ€Pž¦/ŽHˆW†By#×2ì…ô…Xu‘E’ ®+Ä †¥’®ÿ*¦ù^uóþ÷¿?p ˆþ´áMÛ¤Y@ô¨€G$“6à•�RŠHM3Dà¨á°)ˆ–SÖUð‘Ï“d®àrô‡¬`øK£@M]‘/‚có^ƒpõÕäíy b ùCø=Š¢i vp]p}Ê¥¶¡¾]> £?¤ ´aqDBl¼@Š.’w–O$€’ Ž¿‰¡3$ÝV=ã¨jp~8ODvpÞ˼kÃoº(>ý!MmXÅ|G$ĦH“†ƒ®"‘fšÁЄ‘Š#_’–×eÇyàZ5C+¯á·Q—¯£?¤I4}qDBl%€l~&ÞÖå¼Ó åAô†a£¸PŠ[Þ¨¢aIÇéoáwµ YÄbQC‰Y ×åóa¨‘ÑÒDìÅñº BšJc œ)‘!Zº¡^ z Ò|‚ÑÒDš¼8"!6­@6NAm™3”h‹ Ñ'Dè±òFH“±Û·K«šR$­@qth9ÉQÓŠ1Dyp«z#{Ù0úCšG$M§õ(Ž-ˆ\ËòÅYÃõÃuÄõô!<Œþ6ÀÅIÓ¡�Z�†h0d¦‰Ãm6Kƒ*vp}p|ÒÊ£?¤-pqDÒd(€–� !—¨ Ãg_}u|ž:Åçß±‡ÑÒ&¸8"i2@ƒgˆ„@$ØÓÍ“D…k¦eE¹Q~œ„™Àèi\‘4  Š@‚¨€©PRSR†Ù¿£ÂæÃz;®Àèi#úö∌‘¦@Dͼ…!1#͆I†}tÿÓÛ,ÿòßlÉ¿úwÛrýÕ5.¹›4¸8"i"@Ä;4ŠæâP£–#>ŒÈHñ™øâˆþ%M€ˆ8G\à¸"nŠ2=;ÂÔÆ„râ~÷»ßˆ .ŽHš�© {6]o˜wÑp =Â*Ù¸6„¸G$M‚ˆT¢pìw ò ßË–ÙT!"Ƽ#R'=kkk:yòd¸•?¡�"¥Á§èN|!E¬+dÿMËnúòX ŸQ‘ªá∤)P�‘€3N<q»¶àsZvƒ Ú3×ü{Œ‘ @HGĺXœO|…ˆ¬–ÈûÞ4F€Ê3Ôòª˜XMÊ‚‹#’&@Dr³¬è©ÚP>q¥†rCd±û?ÿEùãóÿ=°½W~|7~<WÞ w-EPâ ÜC¤H0 ÆÅ‰¯P�‘Lh3†[’m•¦ÂFßKÃŒ)XQC@ÈmÐ0ÖUŸñÛZ-—¾+®l±˜%¢†ºCR ‘"àâˆÄw(€H*šÓS–èy*%z¢o˜W£kåT™ß¢ïü‚¹è›Š$]…Z#IIסLõEY{qÄ¢û !U@Df@„�‰ÌI޳HCTbÇ~Ã|•"'e¢?E€ë®Ñ#\“¬ÃkiB2‹¡ð{.\wâ?þ8G$ÞBD"à|ËŽFènü–«C1eE–בšy3늚QÑ…z!$\‘ø )Uø¨àñeÍšº¢?Y Š/5pµàuh B$+ßøÆ7¸8"ñ  S†ðS†s†“v5Â3—¢?YÀ5þÞOÆ×¼èih>Ö!©]Bˆ‹#_ �j!pjîHrzËDkùŒëÑŸ, Ò†ºH.[Æ ®˜#DæÁʼnP�µ818Ç$'—×mÀ±°&PSð-ú³ÔMQ‘!Sè IÃ^ñ‘G ·â.@-Ñ™"¢p¨Mœ>Ý„èÏ<0$YDÔÃbM½¤8ðР\‘ø�PÃ)"ê§Úäa¦EÒÀð'¦½¯B›â°‰c/Žxÿý÷‡[ q  ƒ'õU¢>ˆ´a±¼¦G’€x¨]% 3ü˜$Mlõ¹í¶ÛZñ0Aü‡¨¡ _#Éie1 sµÉ±µ%ú“Æ*³IjƒH&ÙáâˆÄ(€L’³ZdmœölGÚ²_EaXE* „¸8"q  aeÞÛ…ïø>…}ø.£d04¶ÌÐ)„7!€‹# �jˈ _ÀÙµLÕeô'´§e’¥Abr4§N úG$®BÔòŠ$8·ÙQ1ú“ ‰æm[ŒÀʼnëP�5€<9?LZÃèO>ò&ÕSÀʼnËP�yNž¤U<Éûšä|4º$Ûëkrlý¬ôGYÜ-õî“Nïzø÷F–Ë*ä‰11š oi?ãâˆÄ5(€<&Éñ$™ß ×½)Ãî¦lö†rÝšÝ=9 ?I禌ú"§Ö7dc½#;£CýY´¡<¢»Í9fdŒ½8âC=nM§È‡BæAä)ÆJr8I濺.½Î}ÒÝs—“N§'£ð“t’£?ÅuØC®|uF»AŸË¾8b±;„̃ÈCðžuvN3žÀ—@`ö©ÑŸâÈúŠ ›‘vc/Žø±},ÜšDq;„,‚ÈC²}5'u™§ÂYý)ž¬‘ ¾Ižd[±¸‡BAäHbÎýiÚ,œÄ¼€èißü¬hÈ7‚hϧ?ýiFJ ‹B›%íÆ^k%SÌÃ!Y �òŒ,ΆCÓôz½(ê£ÆèOq`H6Ëì0Fˆ½8"’£1;)8¹"D„ÌBä‹¢?ø¼Í &¡è—~é—äï|gðÿ,³QHvèœÔmÃë5H»ÁÐ×/ÿò/}ðçþçåïxßFjƒÈ#²ÌüâÚ+³Ä#@¸é~ò“Ÿ ?%E‘%)š‹p¶<x B½ë]ï þODê‚È#ðúŠ$§¢Æ'ìdâˆï%*‡,³›–›Fòq×]w‘X»?R�‘º �òˆ§Œsùê«"׌%9F’Qtçw Ѥ<E(ÒÛ fb" ¤“`W¯^ ?%¤Z(€<!-ÇÂDU¾æBo^4÷¬NÐãm4n¾¾Ž…¢>x A{Å !u@ä ˜A“äLÔž©xæWÝŽ–$ãB½,šÆ< åQ‘Ksψ°Ö<aÑâ‡U±Ã»‰ õ²hŒÓá—‡ýÎMX/~ÂZó„E¨êW^°Ã»‰ õâšXoìwnÂzñÖš',r*?|+ܱ"ØáÝÄ…zùþOÇÉÎiö7ÂInØïÜ„õâ'¬5O �"Yp¡^å«1´<ìwnÂzñÖš'¸6¬Àï&.ÔË¢¶Ê åa¿sÖ‹Ÿ°Ö<a‘S©z9vx7q¡^-ØI´<ìwnÂzñÖš',z FÕoÛf‡w“ºë«A'µOÛª®mìwnÂzñÖš'dq,UÎc‡w“ºëm0©mÚF–‡ýÎMX/~ÂZóˆE Ìaè¡*ØáݤîzYÔFŸ{=Ü‘,û›°^ü„µæ‹f×Àª^`‡w“:ëÓߓڤmU¯WÕ4ØïÜ„õâ'¬5Èòž%<W;¼›ÔU/¢½öšÈÕ”õªa?²<ìwnÂzñÖšg,šaëʆÞMêªÌBÔö÷Ô+"cÌn“°ªg*6ö;7a½ø kÍ30Äw,IVöP;¼›ÔQ/i‰ÏOÇ¢A| üê°ß¹ ëÅOXk‚DRÛ±$¦Å¿q+üB ¸ØáF¹Ø{X¶Öׂò¶¾%ÝÞ£Ò=wQ†GØiOºÖç¶aßþP* •ΣJÐÆ’ÚŸmh‹Wa‚~“©º~I6X/~ÂZó¬Q 8ž²r.œêðG#Ù=ב5ˆ˜µŽìô2‚Ø >º*ç:·ËÚV_&>øºô:ǃs8¾3[rSFý³²Žï»[ºC3u«¬ˆ´±¤¶göùiXd5èhÝ„õâ'¬5OY´2´’¢Ëzp¦Ã¾ ]#pPžcëg¥?º~0áhx^Nw÷$òÁ}ÙZƒØyŸlõw·²sÛŽK§w}¼ÍCªª—¬âVõkZšŒóŽ6êG–ß‘F£§>?-½Ñt˜:ˆâ>º#ÝqÄÖœ¯’kÍc² …Áਊs£Ã¿.ƒã›éÚ½ÒÛŸ?é?;Ø:ve#øÎ¶ôÆwÙhÛ±²3ðw±š*ê«’g?\÷§X¼p´ÑÆ1YÛìÉ~LÈÜ<(§wz2ˆ?¬XßGf³rSF»ç¥{9|˜©/ê…ÌÀZó˜<OáØŽ«(\èðѲ&ë;»swÞ”a÷î üÇ6ð”y$‡Ã^˜7t»tº/0hY#0D9í½X¼p´Q”gM6ìÈ«ùßáð¢ìœëGCÔÓhß´"³ 9ao[Ökº¦�òÖšçäA08°"œRýþ–Œz§ƒr;¶.;ƒ¬²e’ÿ31# ¶ºÒúŸ©[V½ ÍdY‚A­Œ¨#ñM�ÙÃÉFüì}F¶Î\š?QþžéƒöŸe¬Èì8ºó tÖMú”<üñ÷™ã¢¿X.ã~<ÉóKûNy6^Ô ™µÖ�òŠ ¯½¶ºsª¿ÃÛh:—àÖ`Gއ7űY7â(ÌŽ'Æ×£hÐt’´¿”Q/HºÏÓ¾(~Ê£Œú-œ„»£Ñ%9³õÙ;´ÔÏÑKÒÛ¼=¾~Ó|m;˜È` ™ýÞ½fÛ†l÷¯Ëëáç”1Zôrð¢^È ¬µ†å%”q[%9µþÝ0“’)# s…íï„7Äh¿’oUQd½ êƒE5“ÚNšQü”‹ŽvÔ“úTuI?‘P¹]6{/™ž©}s2lv´ß“Í Š3Î#Ò¾ ¤hI‹Iÿ_ø’ �òÖZƒ€Êó¤C4h™EèðI³¹&y>Ó7¾Cì¬OoO=†ŸU/xï\Þ¶DñS>^8ÚH�Ý-ÝÁ®t·vfggj¿›‰æh.NpÐ~9+¢cD9¾S^Ô ™µÖ0ò‡©a¶N!äF‡·ÖïYß’óƒÑô1&jð$ºä ع ¯H 9FuÎÇžRýcÕzA¢ü¢7º'„4Wz.¿Ðûd}ãã ³3'‘Ø™33Iû© ¤9‚(õ;åAä'¬µ‡”ä¨YV!äN‡ÇÌ’¾yÊÜÊ4± Ùêöeš‰È±m<Õvr3oŸNó œÃ2 z¸J›ál¯jX¶~«d2¬¼)ݽ¤'Äꃈ‡YbFET§'#ó§mÍŠë!gáwÊÇz!³°Ö RÖu‚’ ß7mžÞMòÖË*ÂVÅ‹wÉмõ´t¸ è%ëƈ™KÏÉàòPm1s8”~wkéí|Nƒk2<øæ8ÿâfO.#ú»è;%Fwy?ôÖZÃY&/È68GäƒÄŸðÙáÝ$K½`¨ ð«´©"ו"ÙðC�—³ýýq$'…(Y¹sN. _ÑíÒ9wu<M^gˆ!’Ûû¦ìëYçAÙE>Q”�Ï÷Ækw-úN‰ð~è'¬µ�‡·J4‡7üÑ$σÞMæÕ †FQ‡Iõ›Ç°‡¼êýÎMX/~ÂZkËÌìI2$É~âÿB'è ñ1êõ¾J´G ÇXfÆ ):Z7a½ø k­e ‚SDà|çà_D0ÌF1丣.P'yVn^dÈõa×­›°^ü„µÖRð$¿Ê°Øÿüî[3Ûp<8JN‡®\s\ûGÿv¦^V1{ؓԭ›°^ü„µÖrVBi†á8O$Ê2rP<¸¦¸¶¸ÆE oÅÂÇMèhÝ„õâ'¬5�!”uhìÚ‘‰ÿvI>úGÜ,hùì½w| ¸v¸†EGyÔâ‰îÄ=Ј{°^ü„µF¦€óƒ,"Yzž!j$è2±vDwpMpm+».p|L‹g¤Î}lQLsˈ°ÖH"p†H¤¿á©±Š"8c ï´á½R8G\gœ3ÄNÃYi†ßÃoBH¡�" Ñ\D ž~5Ù™–iø]M°Vq„‰C58(«ŠœCQ4Ãï¢.Û . !d@$£‚§Wa*`A‚At@|ض*ñã©°á·µIå¬ÓP6GB!c(€ÈRèk]Ñ ßíj‰× u‚ºA1·‡Bf¡�"…Pæ”ì¦ZÑ× ÇÇ·!d1@¤p›ƒÈÑ|[f9Ûpmqq­9uBòADJGg:ÁYÇg•µÙòŠCäQðBH1P�‘ÊAN †Ì4q¸­¢èêœu¸&;¸FE$oB™†ˆ8ƒÎªÒ©âm>Ã0ÎB¢ù;„R @Äy0ÜqŸnîƒ@BQV”YËsáÌ,B© â=j*4l±T†é•š] Bq RF(\ù¶ÈO‹Ü11Z%âÅ}‘/<o¶?iö©k?S¾.‹¼×سæÿ„Bšã¼ñºÈcÿ(rÚ÷~ebgþ^ä‹/‹qð˜ ?¹pez¿3ÇyÀïźz¬¬¶�zÑœ›]ÞºÐF  )€!¤QP�¹Š_Á8_#N?oD€B6ˆœAtÂ|þa#ŽÂí¹0Ÿ]°¾wô†ÈgЄ…ùüŠù»nÌyàã 1¢ç D_Eåxª.¡E!¤r(€\ĈŸ+ÏŒ…ÊY㘧ÄM(tfáJ(tl`ŽýØWǟ͈ŽpA�Až½RÐ"„â@òÝoEÁÉçEiŽŒÀù B&U�¢!¦:‡—Bê@?ñ´ׂBHuP�¹†:þñ’ÄSF0-%€®˜ÿÿ,ܘ…·ÌqÍwOâ»°ËæøFÀ$‰4 Ñ!¹9ØÏ†ñžMØq)dÊü¬9ç(/ÊüûÀôrèP! ¹SšÿôÆfs«`Q[”ˆå¿÷²Èc¸fá1ð·~¹E_O*4!„Ò¡�rŒ¥ÅIŒTdå% ¥ ™ï1Â#ðÙÖPÚ½f›}œg!,çŽDî@„pÁˆ›ÜÈü.†O¿`Ä®9ŸÇÂs*G¸ßIó™ ¬ÝaÊý]½¶æß ;ö;‹±³œ£ž›ãÏ÷D>ÄuìН©²B© ÇPá²j~N’�²£!‘€È‚Ùb'>$§NßRohÇc‡á†#ó÷½f{\Øå@1ˆ‹†„}±cÊ65}]Å’]óo’� H)C®s´Ž?µÿ¼ß%„R:@.¡Nq�šŠNXfGPÜÒ†¢æ<£›ïž1beÁïÚÀBËd'—� ¯ÏLäʺnÁ±Ã¿3‰Hýn’I*ƒ!×9Î9¾î›u¨“BHqP�¹„åÈÓ¬ÍÐbyàåpcHܹê¾Ë ¹¨àZ(€T0¤”]c ˜\H·™ýÓ Ç¾ ¶RnËzŽsŽOD!õAäQt'É!ÇÐÈL&çj±æìœ6¿‘'”U�EåIIb'�ÒãÏD€bè~e ÜçHD!NB䑃5–Ypdt®QŽŠÙÍ#)r“DVq°jh‘°YTŽ)J@Œ�BˆÛP�9fÁ1.zU^‚Þ Ç¶™÷;àï›ca»:û„ß*ìÏr KLÄÌç_üŽ)¯UŽDiÎûŠ À9en²žãœãS�BH}P�¹ˆqеbN>“>[kT`e~Ç•åôñ¾}L”Õ”Q£!ÑTó¸ 1 Lñ¤\È`Æ×þAžÓgòeÝ/·�2ä:Ç9ǧ�"„ú �r#,t}›`ÁÁïL !¬ËóEãȃhNܹšïêZ?‰ù>–Àš·˜¡MÚ¢°©á4SF}‡=ÕþE#NšßŠ¿L…J\Ùân*Úc—=fSÓô³îgP!‚óÀuý¼¹¾J-CŽsLv´ê(¾Ž!„ò¡�rœ´·ÁÃ0¥ý1[™5R·øPí˜ÕE"P– *ÊŒ%½¤5À”cj¥fcö Ì)eE¢èeSùG8þ00ó;˜ß›‰”™ß³W®Fôê bOyÄ>ºÐc¦2,8GnÙÇ@ÔèFÊöyyM„BŠ…ˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!­ƒˆB!-Cäÿ;Cï†ÑCäL����IEND®B`‚������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7d.png��������������������������������������������0000664�0000000�0000000�00000025425�15030617045�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ö���Ú���Tò`E���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��*ªIDATx^íoˆ\×™æý)â`B ÄH‚ÓÆa>EàÍŠ|hÌxÃJôa[ ¸H³ÌfX!ŠíÆ"ŒD’ÅØX®YaãAi¶ãm[n§°<h´M1Þ¬WéÔà‘ÛÚNO¬ÑôÖ¾{ŸsϹuêÔ­ÿ÷VÝ{îóƒCKuëϹ÷¾ç<ç}Ï{νO!„â vB!Ä#(ì„BˆGP؉÷Üwß},,©B²­’x;_’´-’Eh•Ä{Øù’´ m‘,B«$ÞÃΗ¤m‹dZ%ñv¾$-h[$‹Ð*‰÷°ó%iAÛ"Y„VI¼‡/I ÚÉ"´Jâ=ì|IZжH¡UïaçKÒ‚¶E²­’x;_’´-’Eh•Ä{Øù’´ m‘,B«$ÞÃΗ¤m‹dZ%ñv¾$-h[$‹Ð*‰÷°ó%iAÛ"Y„VI¼‡/I ÚÉ"´Jâ=ì|IZжH¡UïaçKÒ‚¶E²­’x;_’´-’Eh•Ä{Øù’´ m‘,B«$ÞÃΗ¤m‹dZ%ñv¾$-h[$‹Ð*‰÷°ó%iAÛ"Y„VI¼‡/I ÚÉ"´Jâ=~u¾Òª•Õ9õ—ÓÒèH»~"æØðRªÔäR㪴ºúûAWö›ëRŠy¿[JÕ¦ìëO…tå`ç¢TJ'¤Þ¾«_ÂA[6k•þß)oHKÕe_ÚÍËr)8¾2ðÙu&$kÐ*‰÷ø×ùÚÂ{D*õÜ÷è¶ë²ªŽ•¤¼¾)¥Ù·¥Y=Šçj]ÚÝ@€ÛW¤V9¾V~^š{êóûM©–ÂïY­ï¿j0Ÿ]•jó¶~-¤ÛÙ”õrIÿ†~1†è}åui´?f¿ƒR–Zë¶5@q;[øg[Äh•Ä{üë|-a/­Ksß–½aÇzÂÞçeGâ¼¾Ö]û«¢cG<üårçPÿßëqbÜýPkP<ˆøþ×"ÝD&&ðü—…dZ%ñÿ:ß!"­p=sýòaKj+q"m½¿OD‡ º·äêÕ߈¶õJE*JØã†{²ÛxV}ïÀ@¦»#õÕà»VjÒê2…dZ%ñï:_#zqžq$àýÇzáy×¶çì7A}Kð+ éृiT׬÷„(Q_=-õ›×Âz D4Q½ñ[aÁÀä“NK.7ÎKµ¼Úûn-p.]¼·^•²úüà4Ä¢Á9’5h•Ä{|ë|{"=ªØ~·7g=0÷=DØcDXW´nH}íRßÙê5E°ˆÂûº~ÖT@ï»M´Àöü÷¥ÝX}Uª9è4¤‚ϘAÇ’@½ É´Jâ=~u¾–HxƇÒiœŽ9Öó¾Wj­à]6·¤QY ?c â<|噯]ì ꕲÞÜ ¤ØÔkT…š¬à{í»éÞ€ÀÔ×üö=é4ŸD½$åÚv01áüå'Öùe[Äh•Ä{üê|{"=j~½ïب$8Ûc޼ùa xò~« T²›uü_{øƒ ›Þ ¤W?ó[+RiÜR¯Du2õ1ÿWß}G{îvÆÿòð˶ˆ/Ð*‰÷xÕùN$Ò–HD^²Zënûë–÷og¨<„ŒœºÔÍD캻ÞyoPF¬A†* WÏËåV'P,Ô‰¬A«$ÞãSç‰tŒgŸ 7l~½+­( m­ñaO(‡fÐÈï˜Ðx4ð°êçzç!}+ o>}_ÚWߣÇNH ´Jâ=Þt¾jN[o(ã {wWšë«úØ³ÒØ 7›é­-·¼ïnGZMf¹NFSï½åh“ »ëuÇayÞ1!ÿRuSvÛפµû¾NÚCtáÒiý•Ô*ªú÷ïJwEZî†:KÀÛ"^A«$Þ“ÿÎ× G›‚,öý!ÇF—Ø­dM¦¹Sî¼î8Œ'n{õ–°W6d³ ;¢Ík¬×Ô2;=hÁ·Z#¢P'B²­’x;ß -ŸåÕçÚÉ"´Jâ=ì|—O´Æ}Ôns9„¶E²­’x;ß%q°-µrIVjWäZí©¾¹_ m‘,B«$ÞÃÎwIhaÇõæË=ƒ¶E²­’x;_’´-’Eh•Ä{Øù’´ m‘,B«$ÞÃΗ¤m‹dZ%ñv¾$-h[$‹Ð*‰÷°ó%iAÛ"Y„VI¼‡oöùôÓOõ¿òm‹dZ%ñv¾ÙäúõëòÓŸþT{ì1u~÷»ßé#ù¶E²­’xïøC9v옜<yRýûÕW_ÕGò D÷Å”/}éKÒn·õÑü@a'Y„VI¼Ç‡Î÷á‡îBÎÉœG©T’Ï}îsòë_ÿZÉ>Üâ´Jâ=F@XXÒ(„d Z%!‰e yðÁÕ¿–Ï;8œË“O>©¦àµcÎ2vB2 Dý;ßùŽ|ík_Sÿ~üñÇ•>ýôÓúùåÔ©Sê\xàõåóŸÿ¼\¸pA¿c>º–4j92îyò„x…Œ!ÿîw¿«ï+_ùŠ<ú裑�BóÎ;ï¼#?ûÙÏTvü÷¾÷½èܾøÅ/J³ÙÔïš•ÛÒ¬Uß·Ba'ƒÂNHRt;ÒjÔ¤r¤&­”äĉ‘Ø}á _P^úùóçUVük¯½¦ßåö &9q?V­La'…ƒÂNH"te¿¹.%ÓÊüÂŽ¹fˆ›ºgžyFñWÜQæ[Ga'Å„ÂNH‚¶j²2§°»¢±ƒèœ§½´ï«_ýê×PØI1¡°’ ó û¹sçTYEÝ�!‡ Ï/îvRL(ì„$È<ÂŽ9eÛSG|ÑDÝàŠûlׂÂNŠ …™UØ]QŸ/íÈ–7×eúè… ;! 2‹°ommQÔ‡àx&÷PÔÍç(î¤HPØ Ii…Ý 9£PÔûqŽZ­ê#„8(ì„$„u#Ј»+ê¯ù×nû‰TˆëÄ­g …%@QŸ{ ÅáPØ Y0˜#¶7b¡¨OŽ+î¼n„ Ba'dĉúÙ³gõQ2\¿ãÇsPDÈ(ì„,ˆ8Qg8yzâ®#VBB(ì„,dsC„(êóãŠ;—ÒƒÂNȰç†QN&óá& RÜ ¡°’2®¨ÃÓ„ÇIæÇ÷‡zHöööôQBŠ …ÁsÓ‹þP—´qÅט ;!)lmÛSÇãHéM¦ƒ{­)î¤ÈPØ IWh8ÿ›>î5?qâ„>BH± °’0ív;Šúb±§> ò\y@Š…qç{Q ôdqØÉŠwRD(ì„$„+êlq¿ÿþû套^ÒGñ ;! €D-$ÇQÔ³6âý E„ÂNÈœ@Ôí]Ð0Ç‹¹^²\ÜûBq'EÂNÈĉçt³ƒ{P˜ÈH|‡ÂNÈ`IE=Û@Üyä‘è>q•ñ ;!3âf_cN—d7±‘âN|†ÂNÈ Ø¢ŽÂβ+îßþö·yψ—PØ ™’sçÎqÿ÷œânÄ{G|„ÂNȸۖRòï!ñ ;!â ÊyÚ|bßKüeÒ#ñ ;!°µµÕ'êL¾Ê?.\à¾òÄK(섌Õþâ®l8{ö¬>BH~¡°2WÔQ®_¿®pŻӑ¼Ca'd®¨³Ó÷—ãÇó>o °²¤‘-Íξ¸÷…‘’W(ì„8¸<¬hEüƽïÌ¥ y…ÂNˆEœ§Îléâ°··§–1RÜIž¡°bá&RQÔ‹‡›[çìCð É vB4¶¨£<óÌ3ú)®¸#Šƒh!y€ÂNH€+êìȉ»)m‚ä ;)<¯½öêBb±·žE9uê”>BHv¡°“BãvÜ?þ8EôaÛþ2ï‚d ;),®¨3š ƒI•$OPØI!€A§¨“I°ÅS7˜Â!$‹PØIáp3žQ(êdªÕjŸçÎÝI¡°“BáŠ:;g2 È¿p70¢ý¬Aa'…26a§LæÁwF|H– °“B@O‹$ ì +(Œ=1Gƒd ;ñž8Q?{ö¬>JÈl¸Ó:w’(ìÄ{°©ˆ-ê\ªD’ÂwnnD²�…x ד´¸a§¸“,@a'Þb‹:ÊñãÇõB’ù®­QÜɲ °/¹pá÷' ÅwF‡È2¡°ïp½'Š:Y/½ô’Üÿýw²T(ìÄ+\QǺõ½½=}”ô±§€5:wîœ>BÈb °o¸~ýz$è(\~D–…-îøË=È"¡°{È?ÿ_‘ÿó/"ßùßì•¿ÛyÿNX®þãüÅ|Šý;ø]ü>ê±(¸¦˜d w™%Å, {9ü¡pþþÓPH¸þ÷Ûñœ…bêø?Â:')ü®¨£´Ûm}”值{c$Ú%YöŒóO‡¡€C!Œq¢™÷‚ójÿ!<Oþ4@Ôz表ã¤gD²„+îŒ$‘E@aÏ6x´›gÙO»@ìg? ·Ó¤¨“,‚äMûáCw’6ö%‚º™÷ÕOª´> £¸^¸n®¨#ûøµ×^ÓW–láNA蹓¤…}Á@˜ P*[¸Þ,°w>Kù¯÷òo¼%§þÃRž:× “¬ãŠ;÷W iAa_�sÌ!9´žfùo¿¿§¦.>ºzó„dwI&Ť…=% æÓΓ/ÛkG]1%à–< HPW#ò„dw¥jµª’ öA;ÂìïìŋθrmÆÏ¹ÅhÌߣ` D4Ô3 Ìzy|¿ù-³^~ÖëTÙú8Œ”ŒJÀ#dØâΩ$’4ö€wèΙÏRÞ„(îu·áÆ Â,CYä†0Ó`ÖÝ£ØK÷ÒŽ¼e]O 2ª'Yâܹsw’ öˆ.bÞ܈8<á,‹÷¬¯ßxú‹¸ž¸o¾]G’OÜ­g¹²ƒ$…}JŒ Ç‰F^;žmR!ó¼a6åQ×ù÷ÿ{ÆÛ[V(ð$ p_y’4ö �@pãbž‚>abŠL?X„ÎîOþô˜ZÖvî¯ß–·?ú—Øëè–iáµ'Ë‚-‘¤¡°! b”b2wͯ½[®®ß°¼†YWЃ'ËÂwîNGæÂ>$Y!É+©9_x…Ùó®ì\”J)è\JkRßÙׯãžtZ ©UŽI­\´9qEëã0"oGS& Ã*¸ïL²#‹f9â¾/;õ5)¿Wª\”ƒ®~}îJ»~RVë;AB²�…=„Å“Xª…ï@RXn¼Àý¦TKOâ¼'­ )—Ö¥¹?ASUŸCgTž[ØÑ¹=òÈ#Qç6MXb ‘7{‡דEãjñ€£ôĽ4Ýu)•7¤u°'­ÚSRª6©Ÿœn».«¥Šœ9ó¬¬y>p NH½Í†³l(ìHÚšwٚɺÎ_â›nä«ui+-¿%JYªÍà„&á°%µ•ù„=ɹF ¦pæ¸`pVÔ$F²\qOowºÛÒ¬>Ñó´;@˜'ÌÛàsª®§¥ÑacÉv <븎}Ò’ÿuÒÁˆ½,+µ–„MÓýÿævWÔñP— .è£ó‘DöÁð<YwÓRw·ÍÎІé±g“ û¼^ºôü³\a?uêTÔ‰ÁSOc³ŽyŸÅš{B½;ÊñãÇõ‘„H@ØC8Çž5 -ìèèg Õ"Û¨úÃò„Ý]Ç›ö\gÜ¿¸û:I÷NÈ"°Å=ñ¶‘˜°“¬QHa7ïqö¸â‡î¢çØ+ é¨ÿîH}õ‰ÔçØmQGyæ™gô‘ôÁÀlVYø Í“E€Ýè05•¼¸c޽,•Æ-õ¿0¬>Ã;É…v$UÍz/D–ô¬Yñ`aǺé°PÒKͬ!zØëÈ"°Àh3/½ô’>2ógÅ“lR(aG'<Kè½8‰S÷¤³ý‚³ŽýP:ÓrŸòä‘)4á«LX«D=çI—¼¹ó‡Ëuî/îó´ö÷û5%C²Š-îø;늑>ºÙÞ¨8ëØáɵ¦áÆýŸdÂû,óéôÈÒÁõÇ|©¢n3kDÇûhɘª2í&1q'ÞQaG§×+�0A*°ƒœé˜P²ºu&6º™v H›!iã. Ei·Ûú(!!Þ û´¢o-7;Åå w㬊ºáùiüCϤ+îYoGdñx-ìÓŠ:v*c¦s:¸¢Ž’—ÎhÚw’6÷‡~˜âNbñVاI”ÃûØ'Ï/ùKõö¼6PçaÓ„æiO$mÜÁ²«²··§þ’b⥰O+êLK3—þꫯö… óœð;™fYw©#iãŠ;ÚÚîî®ú7=øââ°#”NQ_>?þñUçòÙÏ~6êt|Èâ…}Mš5ûb¾I$Ï™6†òo|Cý=wîœ~)Þ û¤.ÞÇùôt@8Ðt2>ú¨ú Q?{ö¬~G¾™FÜigdØKH?ó™Ï¨¿ßüæ7õQR4¼v,7Šë\Ý‚p*;ÛôØÚÚŠ:™/ùËrÿý÷ËsÏ=§úÁ4âŽÌzBÒâþÀÈ·¾õ-ÕöJ¥’š#ÅÃaGH=®Su Ãïéóýï_u,vyúé§õQ˜FÜ9ßNÁ׿þõ¾v—èCcHnðFØ'é`)êéc‡áÝâãF÷Ir:%"iƒH¢cv›Cb)^û¤ëÕ¹)}ð$*»cyòÉ'UÏ»ca¯ø8{s w¦#iòÎ;ïÈc=¦Ú݃>¨þBè!ø¤Xä^Ø'õ˜Ø©.,oC(ó}EZK;éà’Yò‹Ã`²°˜Rr–“$Ì!LOHÚ`çÂ8û³ ÞCCQ:q29ö0‰·ŽãIyIö¨…Åìl’èçÚƒ}oE±‰\Ÿå$áÏ$Cðì(ˆ‹k“Ø$žG҇핸PØsÀ¸Lxd"' ; âgã¶MÚ.I<l¯Ä…žq&Y·žt<; âg“xí\מ>l¯Ä…žqÆ=JsIÃŽ‚¸ ³‰qsíL¢K¶WâBaÏ8&ÜùfÐ^ þ¿vÇ áOvÄe˜MŒx2Ÿ>l¯Ä…ža}×Y¢¼õ±ÈÛAIc½0; â2Ì&FÙ¨)Ü1]Ø^‰ …=ÃŒ›Ã|7%oˆqeã’;¹iRº°½ {†·)MaxÀŽ‚¸Œ² ,k‹³OSøÔ·ta{%.ö óþøŽÒ”´Ö ³£ .£l™ïqöi 오Û+q¡°g˜qÇi-%bGA\ÆÙDœ}š’ÆÊ ҃핸PØ3L\'i—´`GA\æv’l¯Ä…žaâ:H»¤; â2Î&ÆMqßøôÈz{ívZr¹q^ªå“Ro'¼›ÖTÜ“Në iÔ«R^­K»«_ŽèÊÁÎE©”JR®mKJ)L žaâ:H»¤…¸Œ³‰÷FdÆc-û'÷ôIâdº½vR ê‡:Þ·R“ÖÒ–>ve¿¹.%]—Rµ)ƒ9‡AuOg ®ó“i›H ûÅ(È䌳‰ëc<vn-›™k¯7¤¾þ¢öˆ{‚/¦‹ä¶4«GƒëuTªÍ¸Ä¤=v|߯dýâNð¯ÅBaÏ0q¤]Ò"]£@8¬!µÊõ;÷•*R»tUÚwe÷òËrõÖ¦TKz„ï”R¥&—xoZÍ$hˆí«Ò¸T“Êʺ4÷ƒß9hK³ñbPßÕ!Á|tw²–ƒÐ®ÿ(Š_ãîÍâ@ûiHµ¼"«u#fÒª•ƒ:®H¥qK½²4º;R_-u9-NÚîø¾´ëR¾ïÄR¦²cé⥰§ÕY¦g¨7ŸŒ=êòóÒì >»/;õµ0DViHG½ÏŒ¬ƒ×Ô\:Œ+½Á@ôÙdé¶ë²Šï7¿{h:¼–FÍOèuEœ}Ú…¤Ç¸{“,˜¿.õêªnÁ€·±#ðÒMûTE y$¦ºýìHC}ö)©µìuÎ÷–Ö¤¾ø÷XGí;a_QÒƒîÔ|>æÐU‚sµ9Qû.W¥nÞ8Û`¢õ1¹�ýßyD*õÑ ÇµŠñÇ6þFÚ7áõãÿ¦‰ö }ÞÁÿ•3ó¢ü¼q#èÒ¿Sry–Þ-w‹¹3zï~(µ£Ö(¿'ì}á»ýfäֲ͗߶çâ°U“• CˆêrØ’ÚJð›±É6³€Ì¹¨;_<ö8û4…ËÝÒeq¸„‘µÆ‡Aû0í4íH8-á^ÃÀõŽ-þV`ľ¼àžìâøßH£²¢Þ_ªnÊnkC‹kÜ aïPPþÁL˜¶lM T.ÊÎÁ¡˜ïCÛÚá`.€ñºõàÅä (Äüž<ÜÕN ¢Ò®ŸÐõFÿuWÿ_×»»+Íõc©F0gË%—g9.¼ùqJ I©…ÉÈà htgdÝ„º£÷¹sa–'ŸŠm`9ð&B™5ÓJ­5ÿèÚt`‰ Ç(›à5Ëe1ø=Ùm< c4¨¾¥…"ÜvÄ Øóë/Ëfý…ÐsUŸ±EÎòàÕ â¯+1 ÄùüËr^GÏâõá�9èJÏJc£ SB3¿%ö…¡ùpPoêo¢‹fÐmÎ?(šß+oH í´¨ºE‘>ó[f:Âòö÷oJ냤û¯‹±‰å“˳ôoKY[˜W!ß š~H·}E.k¡î…Ä]ñ6 Çzâ;@·#­F- ‡•*/ÈvºJTÇtý"ÃtLƒÉ6ÃÃsøþþ‚í¹i¦L©¼(¿1Koœ0üðp"¾;ü̪é|Z¿’j9èDL“¨ó0ÆÙ)·”M—Q÷&1¢h™Õ&û^»5(œQ{ÚÇz]š\ó=ÅÖ—X…éMß`Ž“3µª¬Y!ð~ÌïX‘6÷5-M84ƒz]SOõþ;ÚsÚâú¦tºæ»ûEßgõo™@ôêåÔXˆMd€\žå¸‡Ààái¦Qt;›²!BƒrÄ=Ä4°àø€g;°›¹>ÖÛ׿t,*ì5:”hdÏãÐÇ­Šïž3߯oÇ¢itEÎÅöpF…ïi"ì¬Þ—]“¯ Jº AøaŒ‹,ñ!0é2êÞ$CO€{mÒyí[äµðG6oÚ›#äQû36´›úëÒŠáº/(= d/Ÿzë`Ä :zÓ½¶ÖëgÔkQ]ñþ?öÎM ®ÏËåðÖw÷õ †¸kzm{è€ AÒ·‰l˳œä‘˜ù{l«mà(®¸÷û`øÛ„þð9«¢0žIÌ1ÂscB‰ÿK7HkÔopÔ@G…çÞ—[úßf¾<ìLÂNíÐxQg`B…½F>6œhu>ç7_”õŸ#ÿ;nÓa˜MLb£iM‘a÷&9zvµÉÈÑÖöbÅ,òˆ£×O7šrsrnÚr"j~#jC0ƒë(òeDÛ´ESÿ^ÛvÛZ]-B Ø Á þê{Ò >Ûÿ{!ÝÎ y¯ æÕ9šß êrùŠ>ÿ ïÓóú‰Lí }›È¹=Klî×Yš’F8>y£¸-o6oör/4…Æe|£‘v̨6:”!s½g?øš %šãæûb„^Õ× ÏeÌ(¾W7ÓÉOÛüßú=çµhp\›Õõ×-~yŸ0<çÒ'ýNܵ_'2ey¿+Þi_ ¼î»ƒ6 9²ÄoÊÕíMùK58è †Uüå– UzÙCèk—‡NRZ’iGºmGüÆ©p.½óéMq¢Þ¼F¶¥¦¢Žf .ìöÕУ<ˆ(î¿–úV¥²±ž“ê÷è±'Enϲý‡øÓ”4:ÎÄ úØp!¶Ãê&e0´l5¶¥2Àñú°~+8¯aŽFáæûLÝìú¢ ã0á9·ãs‰mÓ™úŒxXáÁȃuÎÉ2Ì&Æ <a¿$]Ò‰w;²½a–uÁöëÒlK·ë*²©^±M#ˆXîµÙÖ‚ˆuïBØuðz#õ^{w¼ùXîIgû…^ËÙšø~ rn.c›þúÇÕÕÌ÷ãý€×ÖA½±¿FÄ飨!>xêû/W¯ÞͰ~ѹ§ êUr{–ã2ŽQ0Ÿ$‰… •ňq”•jÄÌï>¼ÂêÍ×¹˜°º3÷4ê÷Þ»t<£B‰w½ƒ( h<ðQá¹wå7¯8߯:œ÷nô¼ùQÑ€±áăƒØ(A²ÄÙĸî8—>q÷†LÁÛÑ¢(ŠMäú,ÇyEðړܬ&Y£°<Ý`$}ÑŒl­±™ó¶ëzŒ¶/Vµ¨Ûì.wá}*ü¬Z§|aÖs=êa¡ÄÐ;èÛtBÍmcÄÿFðÚ¿Uß?ž»Ûx˜5¢cÖüDûæß—ÍÈCø œ·ë åÇ„£HÏ£¢•KÒVáÏô&³ãlâÚ»„Ý’ô‰»7d *zp4p~+wô ;šð€¢ØD®Ïò÷ŸÆwœvI2ó8Y£D³qI ¡ZÆ…]¤”÷ 3¡7ãê×2ñV²vø¬/¬0a(Ñ„Êö£�RS…Qá¹@ÈÕœûà±^¢Ž Ùóµ¾{L81X^EeˆÂŸé:ÙÀ&·‚eœ-š‚÷ôqï ™�! Ö›Ûaè<¥Ý,—EQl"×g o|Ü.t(Ieȳ£ .¶M¸ö¸õq¿¢$E"Ãa{h.ƒü_¥íZöœ0.ûëÚ“èLÙQÛ&°áLœý½m |Z›'‘AØ^‰ …='Lêµ'’gGA\ŒMŒK˜{3°Q„èÓØ_ÄÃöJ\(ì9b’ y”y³äÙQØ6š‰³7·pn}±LÔ^‘còóäò¨^æÂ¬Jé_zÙ¿ÿz èµñ©} ©ŸÓ$tÛҸؚìGaÏànù'{ ø”P؉˿ú濞(b”Ö6Çd8cÛ+¶6Þø…JS¢äì˜6Ž‘ŸQª—˜ª„4wÿ $Š–'X‹ÐÝ‘‹W'Ëè½XÑrÒÚÔiØç.ƒvƒ¨nûeÙP Ù>¯’’/žº<ž3&ÙÂežùv ;±]úÛÝX;s ×­/ž‘íU=¯àÙÁ=$G/)uw„TÂomº4ìUñ‚T'�ô½"ûTê4õ1ñ9 Ksÿ|Îg;`·¼êÐó¦°çI–¿¡Ì*îvb€ýÀŽâìË-L˜[ÃÛ«-¶fƒ%lpô†¼‚°9–Nî¾n¯z4Ü?" ¥ëwøšÞÒØ~€SðÙ+›gÂ}¢ï_•rõÏõŽláv­jäh‰æ¾´Íl}Mõö ÷’øûÞS ‘µÞ÷44罯¼!õÕgÃÇÁb)ªX´eÓìEáî5-}="'+ÇôX”cR»¤—œ–ŽIåä£ê÷Wk¿’ój Zë¹8§½m}ŒÈÛK^õÆW-ÙÀgÕ÷‘ÒÓ?’™kýygÏŽõæÖà}ŠöзÁæéã{‹€wg9î‰Z¦Ì"îE1 2šiD}ž™¡íUmjôDÏ«S;¬…asµBùY©VkÒl½†Ðwoï_ÑamGMêÛ¯ëÏìÇxäá~ J\Ôo­è •öBñ­¼,¿ÁŽj§Æp¯ˆõå@�Ýð9ê¶‚Àa¸ÙS ;îHתsDôÞàÓÿ—NçxÀÛæ<>ÆZ9ÜŸ]=ý¤å]›z`«ü€ ~·Ô¼¹D¨Ï‘ÊË/‡Â­Ö¸£Î'œsÒ'5Mnzž8µ.ë›ï†õÀ~òjšƒ–ðaS+j~Þþ|8` 1­÷Ù^ß¾sŸ”§?:„OaÏ)ÓtºØlš9w ;½Lj_\³¾\†µ×p##ZD”÷|Oy{}OfS⊅J ;Ø–õ†ÜÜ4Ÿ Dk¿Oÿ@ﬠDW{øJ`õûôNŽ¥ê‘KÕ'BWbxη>”V0`¨¬öo£êŠAƒU3¸°çð5Ñ{ƒ7„‰lð¤õr+gdóJ œkXïbÉ5Yµ=~Ugãac`‚ú½ˆr ÚÆÖ¢Õ~\?³vÌ9é ®×'Ø„ çEœ©‰èwïXƒëóê^õÂûa^C0Xy9î>áëëä@aÏ1˜oŸ$¡ ï›4[žÂ^lý>©]¡p^}¹ k¯J";¦ÐÓÔ‚¢¶r6‚R?å¬ò‹@ˆÉ?XŸÑ@ VCì î…¢cÞg"W^DÂÿQx<¨§Úºþºl·nÊ*¤ ¬:(ÏÖœ~FD4`�v}õ9©s4¯Cxõ.–ؽñò–´v>ÔÙãZlM=£ÉM-ðIó›ÏÉ¥KÏõ„YmAkŸSÐ@Ôyž}0¨¯›uÔ56 v֠ꓛᵉû|t¯´÷®Ïeð>u.öœÏjšNx’yP {q™äÁ.v™wi%™Ÿ‘ÂÞ'¶‡W{]v0_ëˆËÉÚf ´Æ“×óßÑg.˵úºœŽ^[ Dÿ¶Õ3ryçÙ®­†Â¨ç¯•Ǽã¿öˆÕ3!Vb‰5–ʕʥmi·.bkæ§1§ýÜí‡>Yïýàƒ@<Mâœ~½ÑR"îûœOóyYÕb\u~J£í¡ƒúݺEz¿y#8'êV ˆ«J`{çt¨Åõ˜Ô.¿>*:¿-ùùÆ–3VêöQïIp¸zåÀ¥ÖNp®©?ÿ¾ì 2¢>WÕ¹Œ¼€[ÃîÓûD> »L+îX27*tJa/&ãì®WÏCÛkà‘®¯ëÎ_…´W¤\9/­ö+½°¹N’3b: ¼Õ§Lè:ú̆ÔÍ‚>di? Û—OËùÖžõSóüƒCí¥"ilMê­wõ3ÐñyçÙêwÑZ«ÉåÝÔh ~+z¶‚…ýÞ·‚k¯5:Wdç& „ºÚÏb�½§Db.{«ñ¼¬”Êòg'ƒóÐç=hJ ©Irö³Èè?§_Ô¢>_9ß’ƒèï&ÙÏ$ùuØxCgÂkõBíÁgŽÉZí ùp;x |Þº>öô†}ŸðÀ(5¾§x–ÓŠ;æO‡…P‹b$dšùtSè©g‡áíõ¶47^Öá]3n蛋ÏÖž£ °{Ĵ⎂мë½SØ‹Ã$Ï p E=[ o¯ðP/I#kâ”)0næ× CÄ~ÙL(ê€Â»ë½SØý÷{Ò%“¦À®XG²Û묘mpn7™÷:P½vß ;Âeƒ¢ØD¡,–Ð* æXá½³£ðÜ_Diâîÿ¨‚ç`W${°½ »§ Ÿt_y·üÇ‹¥¿…øÄ,aw ±W<É&vâBa÷œY;sljùT?À}ÄýŒ»Ïã £8Ù‡÷†¸PØ À´ŽØÞ>ŸÌ#è(ör6ŠGvÁ½aaqK(|¯„]êf Í£@ ÐÑ»ô$[àþÌ+èHªsçÓ‹ÒQBò{%Í4Þû¿ýÃÀk¿¾uWþâ·äßü»?0BdY^ù“?=¦r#pÜ{6MYá—±ßB!Y‚½’¼÷i—:Å|ÃôË×?©{ɬwBHž °Ç0*dûÖÇñ¯ÇD�dŇ,0–¬Ín7ßÁÁ!$PØG€¹óY“ëÜ‚d;dâÓûKDYpŸfÙŸ ®à~s¯wBHž¡°IWfiÜ4Þú¨‚gÉÝÊf× ÷$‰P»]â¶&„¼AaŸx†èø“òà킬|„})*ñ˜Œv\§4®?¦Kp !Ä(ìS‘¤!0(ðæñý²¢Š ÎçTR!ö¸BA'„ø…}FŒ™¦ð˜b‡î}›£Çù ¹0Ðz\ᾄߡ°'�„ Þ_œ¤U öMC1À@²*V¨ê‡z¢¾ÿ#¸V‹q»àþpu!¤PØo0‰åVóˆ& Ä BŠ‚zAØP’òú·m‹6 ¢ ¦qõ»–P⸂û€ú0ÜN)ö”€ØAXÓš‹ÏsÙJQØq½éBŠ …}`nb³lOÞ×bÄœË !„¾pLÆ÷<ža ¯¦¸á!„ôCa_"&³>íe]Y,oN9Eh¼r\/f´BÈp(ì‚eïªæóüü¨i œ7Îß,ñ£BÈäPØ3Ž Ý±÷ežÞdÆÇùá<Z'„ù °çd}cŽÙ,/Ëz(ß„ÒQ_”Oè‰BH*PØ !„ °B!Aa'„B<‚ÂN!„x…Bñ‘ÿç£p7Ææì����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7e.png��������������������������������������������0000664�0000000�0000000�00000074667�15030617045�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ð��¯���=–áÅ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��yLIDATx^í½_Œ$G~ßÙO~°dc_váz¸5„¢hIn? à`×(ƒÞÂã=|èó±mu}´†Â˜¦¶uSFû8òX©µ,]Ã#ÏbÀÞK¨w|cŽØ›ÜÆÆ–·<Zz´í^HÚã¹rIô,Õ¬«5ö6Jäì¸Uü]ü23ª¢²³òOueUDÖ÷ª"2223~‘ߌŒŒ˜#������€1@À�����`ð������<�����������€A@À�����`ð������<�����������€A@À�����`ð������<�����������€A@À�ŒcnnnÆ��Ì2¨�Æ7ÛÀþ�€Yµ �À8 àfØ�0ë �Ülû�fÔ‚�� ›mfÙþ|ípz8�¦ J �À8ÐxÎ6³l”}=€À´A �ÏÙLØL”@�€q ñœm àÁ´À´A �ÏÙLØL”@�€q ñœm àÁ´À´A �ÏÙLØL”@�€q ñœm àÁ´À´A �ÏÙLØL”@�€q ñœmfÅþµZnß¾íù\Pöõ�v�Ó%�`ú6ž÷©V^pίïrT´Þ¢†µè Ÿ£ÜÊoÐZ1w$|n®Heë:ÕÛ¼t=jTÎùãº\¹F^ô>âøË”ܦÐiRµR¢§•+Rié ñ{†ìÖ#ê6-*†crð9ÌO?ý´s­O>ùdOÈÏʵëì�¦ J �À8ôn<RSŠuOüºt…þ^uÅñÜIªÔ÷½p%~Ñ¢f÷µkç©àì¿LVÃ/•û BºÓ »|R<,4Ä‘Tdz T®Ý÷Âè¾Göò<ÍÎS­õYÅy*Äqz× Ï?" À×nÛvæÝ_úKÉ-ž[\tËÉxQ:òçûè=ÀåV©v0$RxiŽŽ—¾H»ÑHr^I9 fíæÑiqÏòµõïm�&<�À8Æ/bƉ/Üó®Šé¾PìÁ ß§z夶lSk@— KŸEÖMÚn>ô|LWèúM*q¯}¨ÀyD-ûL„8—ç¹HÖÀ1&çK– õŸù™Ÿ9â‚â²{î¹çèã?örc 8ovŽ–§Aú¢9– •¦N6í¦_Ü›×c+áy9ˆû¢¾EvX9¶zFyЄíprÊo¢Àl�0n<µ¥Û ËãºRxûDr/¾®ôÖû…wo’~çÕêÜÿ ÝvÖ+kT.䇽tv©"ℊ|yž©ô¨&C³³è …ÂX¼Û»õf…Ëï‰Ø‚<^š ¢ [¥e¯Ló¯Ót2Ö±’ß[ÎCíɰrÌЧ¨PÙ¥Žâ‡íPL¥×€x@À�ŒƒO]:Ô@ o_xp|u¸ú  „{BºÛÞ¥ÍÕ‹G…„D›•kt·¾!ÒÞÚ;¾çrå*íõŽÝ+àÆó§#ÄPómõÆÍ«C†ÒƒÏ«ÙlfÞI›HÇcáùwdÔo<—+_§]~³¢”?§L•‹b{Ž «Ujs°ó�·@¥µóÎþ›!÷ûŠ\î•–æ½òâ½­ ¸Gãزi¹÷mÇ‚x@É÷þ—«ïÐîúÚl4È^.ÒJåÜàýx^òm‘W^{&ZÞ›&yí|®\†kd9×;OËö=:¨¯S¡wßõßbåJÚª5QÏû5xfx�€qpã©'ýá0ÃÜ`OxÐðFMG ²ß—®¿WœÇ³¯V¨Ö>ðÒ òXjo©?,hü»HÛ^¥béíöŽ£nO¾æY@Ú÷™gžÃG¬žMï*ö]{:"øƒ!(Ýv•V BȾG‡ÎC›WvÌW ?p1?¸Ý½¡ ™6¬Åª_–5Nß;ç2Ùõ¦û áO;ð¼¼pÿ«×!ë‰ó¢üî#/ªçîϹ?;wi»vOìåÚ!Ñ�Æ <�À8´pÃa)¼}=Ø‘ñ}â\öâK1¤~‘–Õ4ùõÿúšÛgØ‹Œ£ö–ÊZ{aÞùôü|Üu*8=î÷©Y]§’E½ÞÚ”ÑÖþcæ•W^qzâUF¿vO<sY8ôìëüwíï>@zß^xåE¾ÎÏþ½ðÆ[b_½¢üõz¹E9öÊÔàC©À ß —ê9VÉ .Š ¾Àój~ä>8á‡Ê5ޏœãžçð®ó0ê”gçÁB} –߇¨žw;¸ÃŒHx�€qè*à\q vOèzÞ.Ãâw{C TatøŒÃÁÙ·dk´.…Æ@oãä¹)iÊóê‰/NÏ/E?Ÿ ³(oÐv½=ücfV|ǺvVU>E'ØnR«Bz ¼¨bÞÕ®ý½r(ÂÝ`Ü2= ŒÕ4Ô8Ãã«Ý=V^ý{ nðyÉóuÎýð]ñ°r»/΀˜—eøŠ3ÛŒæÐæZ‹Ê=rß-û=?�“�`z 8O4ˆsë ]žPhð‡Ä—½ß,*>¢“ñCù€°VÝQ1å" Ô4åqä>GãÈëñ_ç¤àkšUF¾v§lœòͪ"m+„týÕw·<qüû†¥×ëÌ¢ÚýPô°7Äæ}(÷m¼ë \µÇ[¦Ùë9WŽ5¿ß+¾QÛ¥·äP–*Õßz‡ª¾Tûqïлþã?¯÷D\ù°E»·nµ"þ—*d×ï¹ë1/Q­þ5ªÞùðCD·Mõëuj¨> ˆs¾u¶[Ýs—Úâ!‚í ž�“�`Z 89“Ë‘Þ;)È}‚×™uÃê2~ÿãÁy*­ßŽâŽMæô‡‰q?þa/Axq¤ˆaäC€Ø¯Ú¨Ó­æž gáuê·št H ëTïpÚ<_ööÄzá!àG@)‡s¹Uªü1¦Õ¢¼Yw„ßûÀÔ±m™6{öôzã9œ³΃¥û¦ˆ‡NmSmC”±UkPk Í>áñ‹´ZkyCk8N•ÚÎðâÒ/ﮀ÷â9¯^/~i“ŽÈÿ^|¯¼óZ<·»rÊ65¹,÷†Õð1Ñ­;´³ÎþÊcºCjø˜ §ì0 à�Æ1²ˆI…~Ozß±(¿KûŽ0QÃ…+^$ûe|éxÖ-Ÿ–"{0ndï·#„"âyqÞ ô¦”,Ñú.Ÿ‡IêC…"ôñcQ­×Óš>|ý³Êh×þˆÚ»­o7©U¿áͤ<´è«B¬?$óCÈéåK3] �Œç8è÷¾ºÃÌ>!N¯²^"{±!à‡"b×+·Ž>øvšTÛ®;±¨ƒÀ´A �Ïc ?¬î:C*Ž®ôª?ðIá¹ÎmgA/Þp¸ ÔA`Ú �Œç1èÕŸ§Rå¦;î×0 àÁ´À´A �ÏÙLØL”@�€q ñœm àÁ´À´A �ÏÙLØL”@�€q ñœm àÁ´À´A �GPãyûömzýõ×=ŸÞ|üñÇdÛ¶ó;ë¼òÊ+‰óLØL”@�€qpã 7ÛnV9ÞµRÛ>Msù Õ½ H¨±y™¶[Pݺꭼ+è4ÈvV æ…¼.Ð9ë-‘zrñ/ÿÂ:Y×÷è°~Áµg±BÖZ!zq2˜å2ô�%�`Ü[˽íŸÿüç] 8î‰×•÷ߟ~ò'²w®õ¯þUoKºÈãqO·N<xð€üñÞù±{ì±Çœ^yÞŽÂyt,ëTYH"àÝ•€ókt¹8O%{Ï [êÍ%ßmWé\ÐÂG*|ÜùUª í•*ÛœŽ s‡6­Û´ß®ÑE»iÌ‚bǶ�Ç%�` rè ‹àO}êSÂï™gž¡·ß~Û‹©~ñÎ6 ä1¿ò•¯x!úÀ6eÁÎÂ]žçüÈ8¿ëëëò>8_BiÛTâ|,Ù´W¯P>ÿ<U.œtó¶hQó ø d_;-ÂNÓ5ûåÅï«oÞ U^ w†ì÷nS%ïÚÂuyO¸{ðb`'EZj»+„ù&•r"~n™.o¬ˆt T*„Ÿ…ûBôŸ BÙ¢Z“¥þÙ¥<å+õˆž{=‰´�)ƒ�Ðq_ýêW‘$ܛͦSOø­ÀýØ9çËçÿs?÷sÿ®æ•®H!Ï=òÒÆòGáü§+ôõ9:i5¨{°Cö­ûÔmïÒ¦3Üå4Ù{;^< èçÉnß¿OÓÙ³§¨hÝ¥ýÚ*ÍG‰ê@Ïé•Èj~Dú:J/ÒK¥EªÔßá'Å/÷ÕP³fQ¹°@Ëö{ôH<`,@À0(��maÑÆâK¿pÿò—¿<±ìãÀâ]ž3 Ò§žzj¢âùâ¿è_g/ zË!߇ó!G`oÐní:Ýrz¾KTÙ¹I•|€€oÝ!«¸$¼×KÏn±D¥°øî{d//*Chj´n]#ËìûÔmZt²|™^î= ¿#✱©%D?o/zo à ”@�€v°0gΤoRÌq¸)"Nñΰpçs0AÀK¤ç¡Fþ‡·Yò|ýÑðõ“T(_§¶7†}®°D¥Bž>ãä! òºžaOМß"­ÖZ‘cÑ»íÛ´^šwÎ'WÚ¤F‡Ç¶Ë!4â`…{üû6›[üZ»xɦ³LÖª7LG<T´Í“ðñì�@z �´‡Â<÷Üs ? _:ÃChLm<D^ Ð_|ÑÛ2y¤€ç|4~ ú`Ù¤‡¹qÁ× ¦ì�¦ J �`êðǧRdJÇ¢—ÇC³žF¯õqÃ~¤cÿ4ùÒ—¾Ô;“ ò& §¦Û0+À`Ú �¦ ²'Ÿ|r@Œ±c‘ÆÓDš&ÜÝÄ;ÃCQäùdaBžßÞèþAóqÉŠ Mv�Ó%�0QX”`ÆÛL„¯‹{‚?ýéO÷®ç›ßü¦·uº¨>KCNfQÈóõé;€iƒ�˜ò£Ä 9Üî _ *?¸e§Óõ¨>‹Â–ó:èMN…<_˜>°˜6(�€Tá_ÿüÞÒñ¸wÓ–îâáo r9ža$›^2 Bž¯LØL”@�@*°p—ãÁýÂý…^È„ ’â]^ßg?ûY-Wƒå¼æóãá=Yð¾FÿGÑì²ðÀÈצì�¦ J �`¬°p—s¸Ka+³4íÏzÂÃøºØñ]gB‘ž§™„¼ŽZqàóÓv�Ó%�0X, ›Ã{â³ôñ¤Iâás“ç:K^2LÈópÓ¾½àóÓv�Ó%�p,X=ûì³ÂH wçpÂ/Þ¿øÅ/j-Þ%ò|gQÀK² äýç7=À4A �ŒÄ°YܲHÌšpgøšìÇ~̹N~HáÙsL¹NiŸi®« Yê‘�Ì&ð�€D°À) GÄÉs¸Ç¯M^+‹wþxÕ¤‡yî,\Kа/v\¾!ä�:�ˆ„…*÷ª«CG¤›…^K¿xç!C¦½a AÀ……¼üðZuY(�˜ <�`(,Ry; ÷,Îá¾~yÍ< £©CPä‘§Ÿ~Ú ~Ô”T'…¼im�€ì�8‚œÃ?DågUÌdy™z?r{éØo*ê˜oNçØ,ß�0 Ôä�€R¸KÁ¢ ˜,Íá‡,‰w>9ò��]AM�pzÔyuT¿PáßYî,Êøšy¸ŒÌ‹Z­æm5u(H„<�@7P“0ÃÍ¡Îá>KÂa!Ƴ˨Ʋò# MyM&Ì[¯#|?È73²ŒH!ŸÅ5��úÀ ¢”ç0—‚B$ÛâQü¬|ÃABž]V/�è<�3 Ò Å—f}– )Þå°!^¬)k½Ôl_y}ðãË vîêý4«o°��“€ŒÃ"ƒ{_Y¤«"ƒî³ u~ó ó„ÿgqˆ ‹v¾>ño¿ý¶ ÆA—=óÜS!�7ð�d)ÜYÊžWéxF’Yî̬ˆwF xv\.ÀøQ…¼ðò�€4€€ c°HøêW¿: "¤›•Å—âàï_üâ3-° à'„<� m àÈ, ä‡uþwž½¿}àqîœ7,¬xü;‹®¬#ËüdB^} &…ü¬MÏ �/ð� s9GµR,@$…Å;ç̯Yî/}éK^˜\¾† gÃ= �x� ……û°9Üy DÁQüâ½\.ÏŒxgäµóP*0y¸¬½þú딳Ïê÷�€ñ€a°U—Ågǽz,Üùuý, Ò$pÞ¨yÆÃf'žx¹vøéÃ÷qç‡r w�D€!pƒ?lw~=á>ùm€t³(ÞùàÇì=€�Œ<�öÊøñáøÅ;/šUÔ77@/ ä�I@-€†°pöÑÛââ"„{ 8_|ñEúô§?ÝË»Z­æmM àõg˜öÙg!ä�=P‹ üᩜ?Ú/ÜY|¡‹wž]FÎÊÃ=ƒß�½áò4dõ��€A-€°p6‡û /¼€;~ñþÙÏ~â݃ßêÈr…OÌ LÈ¿ýöÛ^,�À¬Àa%çpÇüÐLJÅ;1’yÉo2 Tû¨…fÁöR‡@IÇâ¨�Ìð�LnŒƒæpç_pO uþf@æ'ÿ‡x„…žü&�ÞL ä� <�„_yû_¹øæpˆ÷x°øãüÉår{†!ÀlÀà5h+ MÌá~<TñÎCgxŽsäg0RÀ³ãrÌg˜/ ò�dx�R‚E$7 ASÂq×ãÃyÈ©ržò› þxâ}8ðÙ…mËSMJûJ‡º€lÀ˜aÉâˆ{…ý¦¢Wl|p>Ê|…xÌ3²² yÿ÷5ì¤Ç=@6€€`LpÃÈ¢èñÇ?"Üù77¬`<¨âóšl‚0‰‡Z&AváúFÎp¥Þ+¶@6€€à˜„ÍáŽÕÇÏW¿úÕ<æ¼ñ‘ù?pý!@ö€€`DÔ†Ñ/Ü9³ Œù $Ä{ržxâ 'ï àg y�²<� c*<7˜Ã=üâc¸GCÎXÂBÌaBSÙ`ð�Ä„…»–uw÷t`AQ.—{ ±Ã‡À£#<;0»¨B^."‡5)�0Ôà�DÀbÑ?‡;÷XñǪhèÒ…ó–g—‘ƒÄûñ€€*,äåÛ­ !Ž �ô58�C`¡ÈÓ>J±#OÇöúë¯C¸§Œ_¼ó|ï¼’-8êGÀ�H† yþåpy�ô58� ,ùƒ.éRäH'çQéÃbaqq±÷m¿íÀGÁãË·,Ó˜! øá:{Þ¹B�}€@ …{ÐâK<ä�Â}r°Pg;ÈüçÿïãÄB�½€3|m¬6RÒ±p‡À™,~ñÎo= ÞÇ ÿ’ù‹ò ¢ò˜u €éf)ܹò÷¸s£a3yTñ·аx�ã…Ë6ç1ÏêÃb€8 yµÎ„`²@Àƒ™‚ÅË /¼0ÐøHFhzð%iüñ*Ä{:HÏŽ‡Ó�)䃆rŠ7f�Lx0°hñ/¾ÄB‘{“0žsº@¼Ox0øöÝ×µ\Î��é2 ‹CŠ¡6.ÜØ°pç^$Å颊wÒñâ‹/z[@Zp™—yþ•¯|Å `4¸<ñP¬ ™» äHxIXú_bÇ ÷A¸Ou>rvü&L™çü¡6�ã‚ë]y�&<È a=AÆ Ðù±tï“Eæ;<HƒaBþÙgŸ…`L@Àãaá>l,&Ÿp× ¿x¯ÕjÞ0)xç=<H“aBSôp| à±ð‡§< ƒÅˆ_¸£Ð~Ð*—ËÎXwi'<\M¾?8ÿùÞ m„üÛo¿íÅ�$GØîk©',Þyvuþhˆ÷é!<;�&ßóAß&qê�’Ú sžg˜+|¿pÇîú"Å»´Õg?ûY<dMx0M ä8>¨½ö°ØóÏá.<÷ÄC¸ë Û†¿Cöâï°ÐËôáé#å½ÄX�L®ÛÕ‡Ié äˆh WàþÊ].¾„9Üõ‡…: vi;ˆw}ྥ]ð6L›aB¾P(@È0x A¯W¹— „»øÅû¿øEˆw€€:2LÈó°ò� ´€E9WÐA3ÈÊÂÝ üâÇ¿ÃvzÁë%Hû@À݈ò¨O�€€S†+âas¸ãõ©y°½¤ýx¸Ä»ž°@’vâû�árôý·\nQ·€YLþ¸‘‡Ã<þøãG„;÷¼`n`óð‹w^u ¬ž@À“€à(ð`¢„ÍáŽe¶ÍEïìxZO /ðÀD¸ÜÊ©„¥ƒ³ <˜<.:lw|àh.¼®jO~@zÃBGÚëÅ_ôB0î&ä1ј àÁØ`îú2ìÕ'ÿrŒ9ÜÍ‚Fµ§K¾M‘ŽÅ<0i3²€‰ yL5 fx0¸¢äN¹åJ•…¼Y±²Èƒp79T†…»_¼×j5/Й¯}ík3|°ÀD¢„¼ÚÞpGÏÂ€é Æcá…^p*Ì¿ðþýøÿø@EÊ=îü±*zḊ¿Sve[Ëÿ˜-ÈäT­ñ/þEúËù/÷lX.—½�˜‰*ä¹=â_ùÆ—;x»|xELæ\!J÷çþÜŸëýg±À½îæÃŸjgéК…ÿƒcé0óÈ \WÉ7„RÀË_é¸wß^“€ÇBÍ‚¬$ÿÊ_ù+vƒÇ¾Kû~úÓŸ¦?ÿçÿ¼ó yø‡Ððƒ6�YC yë~ÏnqqKÀX àÁÈpåÈCcü•";ž �c¶C/üŽ?Rf¡>xóPŒ Y†Û"ÿlY²ìóðO�LŒŒº{c‘�²_ðñïÏýÜÏ9e€ä€y¨³Cáadu—ßᘼAU<péºitNp£»itNp£; ?Avƒî�ˆ J‹Aàæž,:ä7l>>`Ï£ð‡«¦ö¾ãÞ0Ø)>È+”ƒÀÍ=YtÈoØ||ÀžÙyi°S|W (-›{²èß°ùø€=³òÒ `§ø ¯@R/-\ ³â¦ç0KÀæÙöÌÈK3€âƒ¼IH½´d¥@êp¸¹' lž-`Ïl¼4Ø)>È+„ÔKKV ¤×›{²ÀæÙöÌÈK3€âƒ¼IH½´d¥@êp¸¹' lž-`Ïl¼4Ø)>È+„ÔKKV ¤×›{²ÀæÙöÌÈK3€âƒ¼IH½´d¥@êp¸¹' lž-`Ïl¼4Ø)>È+„ÔKKV ¤×›{²ÀæÙöÌÈK3€âƒ¼IH½´L¬@¶m*Í&{o‡*yžöq‘¬æCoãñÑáÆÂÍ=Y`ól{f ä¥ÀNñA^$¤^ZÆR ;wÈZ½JÍn—:+´ºÙ ®·é(©i-Ò\Ññ½ ¡PÃZ£ÍB_‡ 7÷dͳì™-—f�;Åy’ziIV Q»vž bÞ/W®R«iS¹£¹\‰*/Ÿíms\îNÌÓbi‘òNØ"Y·È*ŠøŽž–íw©eŸvýBÔ7s«TkÝ%»\á T®}@æMª”æÝ}^}ƒª«¼mž–Jk´Ý>töŸ6©œC§IÕJ‰rN~©lÕ¨ÙyH­[·éÝ®÷0älS]Ž å Ú®·>H…¦×S³m²­2Ø‘OZS!•üNH:ç „{å]Ø©P&«Ö¤NwnݺG‡Mq8öó9Ž·]§ösP³ºN¥Çã²aQ­y@ÝÖÝz×{8VË…¸—×wÊNÊð5L›tÎ!<ÿ»IíçæcÚ«n}<ÃöѤb§i´[ •¼™%õÒ¿@ QQ_ B‘Vk·iKˆ‹¢ÕðÄ‹ì=÷¦tßT+/ˆhê¾»î»~)Ð4Þ¢*‡•ljÔ¨œË‰ôÞ¢†ì?l8B?W®Ñ‡-›–‹¢1ÛªˆFð$Uª¿#â³ø‹v/^¡ú¡7ÖØÏ¡ûÙË,â8¿ZÂü†cÓœ/2ZO�¸Ã’ºí*­òC•xÀ)Yw¨ãÅ‹•žc‹~¥ªG72isA—Ë;Û pžjíG"„ßD-‹Æ‹ï³û^$÷þàFïÃn·E5ç¡Vج´I ç¾c‰ä3b_Ñ8®V]1ÈoÌøá ÷p¶OõÊIgßžË!»ÅÇžiäeRÆqò_מ±ê„GÔ®ï#¶Êº` â:ØD3v;M£Ýš(Ó ©—–øÒá¹e›Zû,òø¦ëP›{ÏÆá{d—òî å4F B`¿'n5AO ßq{Ûž¯ìÒƒÚªhàDzõ[T)äÝÌ3Ï‚å®+þùF—=‘=A#Ä|}ß9;n¬qŸC¯‚h|¹÷ât_È ŽÆœó°5(Äâ¦×æ¤ F É¢Íûyïkœøž:y®o·žàSlÔÙ÷Û�öî½ x. '½ô»ÍmZ·NƒÙoD'oûLÚ3Fþ;Ä´gü{XâužŒù›£8è`O͸í·ŒwÜv+}P¦AR/-± äa*y!Â7nºÃWòªz¢ž"G¤»sÃ)7åèÍ=ÿ„è;t—¸s“¶Ü¦°BeÈŒ³“†ò`Ði]¹âõêï9áùJ…O‡+µŠPyPaºÍ›´ÝkŒ‡¾^Oz_ÄKO ÅÄ@…©Y´¹jÏþ,/|ûfﻑàFMŠ5¥,ô„aŽ âa¹ß«Õ¤íí¦+òÇŸMÁ7ösˆ™ÿqíû–ÈãÇúæh¼è`O͸í4µvk Lƒ$¤^ZbHù+wŠJKâ÷Ä)ZݺJkBÔJçéšuŽòs*­^!ûåEå¦ìP½Rpö[¾|‘֜ƌ*o\¦l` «d×6œ^÷âê¿¢­5±O¡D«ö®+öygHA‹nYë´æ¼‚^&«áeØuܾ}›Þ~ûmÏ—.c¿¹{¯åµ iè ¥çŽéU„Þ+y‹“ž@V˜«†Œ=¿G sè ¡Q‡] 0¤ñS__°É!œž|§qbPlNˆlÚ3Nþ'°gÌ{XD¤N³FV¹H¹Ò%Ú/=t°'ˆfìvšh»¥Ü#^ZÝömZwôÁø‡¢Lƒ$¤^Z²R ý×ÁÂýÉ'ŸtŸyæ/4]ÒÈ˾˜ ® ƒ{î”pµ"äðˆôD ÷í‡o?I#¿“’Î9¨¢/@Äküzáb?µÇUm�CE¼;¶tyYC?92kϨüOhÏØu—ïƒÙi ƒ=A4iØi²í–'âEZÕÆ.]¯¿ã~_—Â[D”i„ÔKKV ¤¼U¸Kg²€UWïƒNßù¡Wß ë¹“"œ÷ñWbaé1²GcòC(’’N~'#½sßy°”1í‚a_`ï•D~8éìÜ3ÅãßÏ•¯LE¼3™¶gHþ'·gÔ=,è¶©¾YöÆûÒ:ØD“Ž&Øny÷I®T!›g°‘÷M ÃÆP¦AR/-Y)|‹‹n¥0M7ŽŒO•—ü¸Gí¥Ús×ïñs*ȸé1)V~ãflù} ÆyGÇt*³ÃôDذÆOéµwâ~40fÞ¡÷Q¤_qìvÖ+ÛÎÌ%Ó"[övŠ•ÿ1íùa#þ=Ücºã:ØD36;M¥Ýê‹~WÔ§ûe$!õÒ’•É×Q(èSŸú”óZn,°ˆ>éЕ^pÏÒðË c¦×¯ õ>ÃŒ-¿ÁøÎóþôåûiüú¯˜å‡^,ÞNû„[°Xì¶ß ÍÍo˜Žh$7È~«ÿ±Ø¤È–=cæ\{ƾ‡UúC І16;M¥Ýò?¤¦ûЊ2 ’ziÉJ”×aÛ6=þøãô#?ò#N;³†ÐH=O¥ÊM¯GTY@«73‰2Ä¢÷[ÿµyÿõ¸éqTÙ2Lè…ew|ç ÅV‰*Už*UЛ \Î`ÂâZ¾F– Ïù}¥·˜ZoÁnüD¼\iªÞèþ‘ýÙúaî½â¸)½}É”=cå\{Ƽ‡cöã¸q>\Nì ¢¦Ôny÷Y/-éÏ•ÉÞ}ËÛo| Lƒ$¤^Z²R Õëøøãé•W^¡Ç{Ì 7KÀ?¤¦½%*§ÃÞ,œ®³¸EŦº¨Üz=G´¶AöÀêÑéõ{-Ó|¥¯|ŽÓflçÐm’½Y"ý€š5Ëplô¶°§·n‚´Í€ãõìž-]ºÍë´É"‘WÕåu½¸½q¢'H¼‹r¡Ž·Ÿ$|üi3®sˆÌÿ^O¢š÷ž;bÏ8÷°@gïl»6µX> ?ã±Ó4Ú-)ò•7Ær˜Ïj—BÙçs� .©—–¬È ë`!ÿÕ¯~Õó“�7÷dÑ!¿aóñ{f ä¥ÀNñA^$¤^Z²R u¸ÜÜ“6ϰg¶@^šìäHBê¥%+R‡ëÀÍ=Y`ól{f ä¥ÀNñA^$¤^ZŽ] Û6•æ T©'X·±s‡6×oPë N–Åã~ûÖ+´P©Ó¡çŠsÜEºÌ+ÀæVµ¸±psOØ<[ÀžÙyi°S|W ©—–ãÈÕ+¥dÞùR¼@kV…Šs§Énßi\¿‘²]ရWèÖþÕ.nkqcáæž,°y¶€=³òÒ `§ø ¯@R/-ÑrìR^ÄB{o‡*ù'¨\ù§Þ¬ <õ‹ož)âÒ\žJ×®‰8â×þÃÞ”O¼ÀÂ{»Ê;ûHÇ»²8C~‘J‹yÊ_¨Ð…|Ž ¥%¾@+i9çN¥w gÎð­f¨Ã…›{²ÀæÙöÌÈK3€âƒ¼IH½´Ä*Ücî,¨pŸnÙ;tЛ·•…ú]¯~ŸÚöóÂÏý}õYÅ%!ð÷¨V^Œè¡ç‡„çAï¡Ù¡=ûŒì;Ôª­R^<�ì5,*–®Ð·¬%*Zwi_„Ï+Cmt¸±psOØ<[ÀžÙyi°S|W ©—–x’ç ?MÖnì[=ŽŠ•*Õ*'|“šVÉðržã<-–‡ôÀ3AžÓÚë‰ç1wW2t\ɦ¶—û§ç0KÀæÙöÌÈK3€âƒ¼IH½´Ä+¼`Â9*Vi»ýÈ[<¡ urŸ‘búUj(ássKô’µê)œ§ZoQ’ Ü…„rK%Z’麭Ù[Þâ3ƒ+ òöi£Ã9̰y¶€=³òÒ `§ø ¯@R/-Y):\nîÉ›g Ø3[ /Í�vŠò $!õÒ’•©Ãuè—]ê4®Ñúö=:¨_%‹—y€‡,åL zHmû´¸¾Ód¿ym`úÎÚÁ4ÝwÍãÀ³5]¦íÖT·®R½d/žIª@sù Õ{Aõ?.Ï•6¨j-Ó\±BÖZråšHuüÀžqÕžz“ Ì–¨TÈSñò­å¨\»ïÅ/úç%`ô¶ÓqÚ-¦;ì22 ’ziÉJÔá:t¯¡Oùsd]^ø~`®èNT„ò;…Ów6§§ßaóX¸ÃÓòkt¹8ï|Wc2 øöh{ý:µß#{ù•¬mÚ´nÓ~»FífoèÚ8=ã0ª==º ²Š‹TÙÚ$ëVKˆúM²›½ãEÿ¼ŒÞv:n»%á­c—y”i„ÔKKV ¤×1Žs= Îw¹³ôZµâöšñ”wß Jàôšß¦¦2egËSWnZê7ê‡Ã‚.‹³yÊ•.ÑnûO¨a-SΉW Êîe¿ÐÿÐX²bsa¨»–k@õÊI×f^¯·Ûkš£ÜÊ%Úv™+¬ÓnówN©ê¤¥ÚœgŠREÞ#jÙg(—+Ñún›º;d•Dz7ž¶®)Ûœøüö¥œZ/­ÊXòò˜Œåüö|m›*Îw;9*Zߥ]=½´Ô:"Mt°'ˆfzeþÙ¯½¸Ýê¶lÑ×õÛÔî ´[k[–·í[ôï·ÎÓò…ß¡ûò/Qé_|‡‚ûî“2 ’ziÉJÔá:Æs,”yÚÍwÜ…ݦ2e'OÑ0½æS+t6ö” ‡o‘unƒlû5[U*ש~p—¬b‘*;¿×ßæ¼¦‡€b<çÀ"™íz›šöiÊWêô¨½K›å¢Hß¶$^m”ânïgŠÖ³gON©N‡ê–x(°·©ÖüЛQj—š¢åËT¹,·yƒdº Ú<·=3‚/{Þ¦½ú*³ áD=[T[]š™2ÍÔÊ|E÷©ÄíÖa}“ÎY[dךÔá)®•vëBeÝÛöÿÒò°ÏŸ8Kßø7úÜОûd Lƒ$¤^Z²R u¸ŽñœƒÊ÷Äïh¥|Z™²Ó›cß?½¦#๷ƒ+Ä~]d<P³f‰Jv–_:OOq+|½Õßf¿G]ø@ÆsÜøÉ5¸ñ»N7Ë%ñu“*yOÀsĽ\ <,‚mñ´|^/=;Ù@EöØv©Ó¬‘%rË×h÷Unt¥à[£Ú]¹Í¦Ö¡{ë—©Ö¾OÍú»B*¦ËxòòxŒç|ö\)ÓóBdìÔÖ(/ÅÌ4ìé<„í;ÓþBÀÉxì4B™*¸\G¶[&Õ¬2øMÕîU÷Á@¶[µº·í£sÿ{ž½þôŸ//ÑÏÛDŸx»‡ñä˜R/-Y):\ÇñÏ+AþXT­¼Øù¦ì<â~ŠJeÑpóÿÈ);ºmÚ]/Qާä¬îPu•{|½4Ÿz‰^•ÛjïQKž—Àç3mÆrܸÉ|wÜOS¡÷^9«áƒî3¥Zq^SN©Î#jï^¢½Z­R«å­l,Ó}jÙÝvö2Ygeyà×à˜ékÚŒåŽØÓuÎð‚ÜgŽ„K—ª=W7ÉZYaâÙöÞª¥ èÏXì4b™g·À¿ Ú­nû6­ó01Þ§ujj»5÷³´ÌÛ>÷4ý¯ý*í<¼G×þÞ ZºÒwÊñác�—ÔKK¿à›ï¦ç0KÀæÙöÌÈK3Ȥ>yH?øÁCúD<?ì|DãzoŒ2 ’€Òb¸¹'‹ù ›Ø3[ /Í�vŠò $¥Å psOò6°g¶@^šìäHJ‹Aàæž,:ä7l>>`Ïl¼4Ø)>È+”ƒ˜öÍÝ›™Æó;8©+Ôñ*¥À)»ºmï8uêãЛqÀó*Ó©ŸC`ó¬&yg:JX6ú+tŽk~ðáÇ öhgÏáõE:ØD3m;™Ôn¡Lƒ$ ´ÄtnnžîBÈôŽq`9 ˜:E݈tv©RÞN}¶*ÓéœC—:õKT±U|ÍâpÓƒF•Ãh`OØLžéØÉÌv e$¥Å Æys÷W›ûmzé©<Í(P!ǽj—ikM®Òù2Õw×Ýé#ó‹TZä^º›´Ó[ÅÓ¢f×WÊžÚàÊyÖEo0±­öûÞjŽâøkÿœžÎåèDá„›¦7¥å\îyÚØ8M¹¹“"þ eսߧ]y|缸'£¿Z^®´Nå'¼)s”+×È[b&1œþ´ë9¨+ã¾yUØÃÍ÷œ°Ã²u…ÖdW.{ÿ„-þŽÈã5ªíxå€Wìm>ô >Ùƒ[eCY±|“rzÐü m\–6²hçµ³âÿ\;ÊrÒ_ý÷†³6³o`9Ü¥ýÆ&•D™Ë-“u§:XÞæ!Ï®=×éÕ—–DÚ"?yzPî)l|»ÏèlOÇqOèu{^ÞXQVŒ^¥ÚÁÑ®þ±æ%HqÚix»õ*5zeêg©býs÷Zí–õoéµò‚s|gšJçÞ:N»µIwjkζ°2€ j@ƒgE¨®6·/ï<Wj»¢Â9C¯¾y»¿J§³à“Ûã&ùU<ÛîÂ-ýž Y1î‹:Q]9o‡öz qœqçýæ‰Â2½ôÒ²78 ^1¯I5‘þ²Ý\Iìó‡Ôö¯º§.Ú±'üN¥Ìç"*ì—^tßhnQÉ©(½SKÈ8ó{TÆzêʸ‘WE‘ïwé .¾ÒUz³—Ç×èMÙë$óøQ[Y±WYèK&-ýl›¼÷zly±(ÕFö·ExIˆÇŽWN|«ÿ û¶Ê™¿^£kÎþQÇ9>gµ¼íMδ=÷Ž$ÄŠÕvròW½gt¶§¬?îzûK{¾H/©+Fô”ê`OÍ8íÖnÙ­=¥LsyL³ÝÇëÝcj·Ä9s^…•y�TPÄX,eµ¹k[çÝÕìº ²Š'¨P•‘\¥óˆpò­âZÊŠïhEÈ«9vøx'Ëd½|F„ó+JOôÒôÒxù²³œõÐU÷¸"d‘ÑùˆšÖi·×Dƃ€WPVƵï8=Bœï]^Uó‰zyì|kT½ÉKèË{#ß@Þ+‚OµQ­îÙú¡WN|«ÿ–.’5P΂<7šûÎùŸtz‡ÕòÖ?7I¦íyí*­9ùÔù+ÄÃÀ=£³=U¯Úó2½ìlçxð&3V; m·~^áý2íðãn·ÎQ­ñª{oŒ«Ý÷çUX™@5 AŒ³"TW›»i‹ŠP¤=ðjÐymÎBï»TþÜR‰–œ•ZÕU<Åö—ÎÓS¼¯S‘¹ ÿà2Õ~ç{yVTŠž¿@öµ Ub¥ó^kòð€»7¨Ì¯ÚpîmùOÊ«H^mR]™¯¿„vRxÿi3ÖsPWÆ­5„€/¸yÄCPv¶DžÊ<áÆ?¦\î•–~JÄù =QxBìç­Ø»ü"­ñëk§'KH>n–ãpC.6¨*ìÅáùR‰Õx~7´Šs®nô‡ÐT_ö^uK盇O›±žƒjÏ›[BÀ»×ίã­ªöì…—^¥foÍ]ážRo›³Ý­_T8èÏ8í4¼ÝzÇyãÓ/Óic%ÅvËÚÿùžñ†¥îÃ.n»Õ¿‡z. Ì ‚Ð ø¦N§òBeq„´ò; é÷8¹½¯³B¦íéˆî£-YF{‚hÒ²SÛ-”i”ƒHçææ×Ü“À’ᕊ•ijçÀ¯sEÚîÇT^XÆÉ®=y¦ ÷íUÐС¬¢ƒ=A4éØ)›íÊ4HJ‹Aàæž,:ä7l>>`Ïl¼4Ø)>È+”ƒÐãæ–½}I^×ó<Ôî_ÎøÜŽÓcéßÚTèN}Ìï œYrîØôƨ“xŽÎK]ÜÔIbO‰fvÕ"A$zØi”vK0á22 ’€ÒbÚÜ܉ÇÛîÑöúujò¼Õ'Œw­C~ëS¡Ç3/Êí ²[jÙgÄ›>cTaO•¤ß@ègW}ò„¡·[“/ó(Ó (-‘îÍÝ¥ç+~^ æ§Ü/çÅñx¡—ËÖ¹ÁEUìºáÞÎ@…xôK~eɽ åÀEvtD‡Ê4õs8¨9³•8 :ž"^°ÇYxäò­ ,ŒtÏ|wÝßkׄíU[ôæ¶mZ>ÆBZãf¦íi}×uÈ™…ƒezªª=¥íŽÌ@£¯]u°g2¨Y]wgÚá¼-”i³Þ5oRƑθÎ%šÔíÔ+óʬF¼@ÙÝ7DYVê°›×Û-Ê|êy2J‹A¤só‡A¼˜ÊCgŠºÁE1”EUœÕêXè{qãÒmÐæ¹mj²Àœ•iúçÀUÞ%ôÈ·øº  ¯ÊYdN:q£xHÍÍu²[<ÿô™m{Úî<Ô½E™ÊT¹Äž}쪃=ã#;HT¡ÈÎ] 7>ãHg\çN;]”2?Ðnɹ۽:ìB….ŒÒnM°Ì§ŸW K ´Dú7·\⑨àÕ…^ä¢ÞŽ€/ÒJyÉYiQ òÐøn‹jë—©Ö¾OÍú»d¼:T¦éŸ7~Þ"?Ü“udñ¹ ‰+à ++Bü!û½Û!½VB8Ö.ÓzmšïPS“ofÛžž€—¿ž€ïÙSŠ“ÐÞH½ìªƒ=㟲ÌO\—ÚnqÝ¥ÔaŽ€?ÚnéTæÓÏ+%PZ "Ý››+A9Ý.=p*x6£¾–ô¹Å’hüyxEÄï«ra~Ÿ¤ÇozðùN›ÔÏÅÛ…§“|ྊîŸ r¢ae"7ôu27xçûû;K…{›¦ ŸÏ´Iý†Ù3§.n¦º({Jô³+Ÿ‡Y`M*ôÊ<¯0,ۭ圜\Üvk ež@\PZ 7÷dÑ!¿aóñ{f ä¥ÀNñA^$ ´nîÉ¢C~ÃæãöÌÈK3€âƒ¼I@i1ÜÜ“E‡ü†ÍÇì™-—f�;Åy’€Òb¸¹'‹ù ›Ø3[ /Í�vŠò $¥Å ¦rs{_軳”¨RO6 ÏL³P©SÜ¥3¢‘Ûz3Üô>-Òj­E]¿ßÛk(¾•öºí*­²¿pÞÉoÕ_kO~ê¼ÉÛœø)¸A>¶_¿‰ŒÇû'/'áðìHyw*DáKl“./ 6ïäå´× ˜¸={÷oŽp/Žÿþe¼•™ã,ŒÓ»ŸsT¨ìÌ^5•ú$fze^Ó6«÷q¬(Ó«Uj+Tp^=r’Û¢?6³j@ƒ˜NƒåV>,�ÆÛˆ9Ýå!u›\¶ioϦå“5ƒþðYĵ ¬´w…¾e-Ӳݤ=ûy'¿Š?Ù|Ùãa*6w¦L*ÜS†ÏÉ|©™È&žXÌ•œ¼œöô¥“·§~÷o·uƒÖWÏÄð|Ÿ}³€L§>IA™gúm¯‡bÿ÷šd//LݘWN'Ó•*7µ™’èj@ƒ˜lE(„Oc³7ÍX¾T¢Å¹‚7|u»•‹´ÌSÕõzǼÞ!˜Öw¿C¯–ò¢"ÝbË¢’]neƒ¶œ^µyOˆÉør3¯Ø‹ï¸Æ^V†EEíÍy턦—^:­ø½ ³—ž¨K'ů2?½DÄåòezYî#ü|Ü—¿+ ' ŸÃÄèÜ!«äöTÏå/}MØÌ™/\YÁsåmpo6/ä5&Ý–È»Ü<•ÖoS[ü/q9±-wj7v¹Uª6~×í5Ïñ®yñÀt‰v½ôÈU|{ù¯ØUµ‰œË9¿H¥Å~o½¤Û¾í¤[©ï{!ÓÏa2øîßÊ5ºÆ÷¢3ö8ïß÷èPµ¿S$Bîßî{´}ñµ¸œ(6’öwëun¹Í=–*_8] ?“³SŠmVù5¼)%s²ƒ(n™wª·øAC¶_n9çý‚î^Xqw}™Š¾·P`¶A h|sOŽûT+óëÇ65­EQ¡Éבû¢ÒáÕív¨U[uÄØkXTìUV¢"³*dÙÛTk8•ÒW†ÛWÈ®V¨ Ü«Õéö¦íר</âå~üx$ð9Œ"pØ…\iï*YÎïÙ𼸠/‚²KÜÛ©¡•³‚g«Je^ôgﲊâ×ËÛÃú&³¶È®5…õ¹!åÄþǦÜs´l7¨a-QѺKû¢ÌÌ_X§Ëç6ȶoÅïQŠð÷AB4̾×ÒÎËÓj£8&gOÿý+‡Ð°0çý[¡ÕþáH¡ÎùÀ®ßK*‡ }s†MÏQí ¿ery ŽÃôÊüøÚ,·Î["«¹'ޱH*ë±Ë¼K´€ç{€ójØ= NŒ*§ûõ�¨ b² W8‹C*C·Òq+:Ñ�©.uš5²ÊE§§â½]/Žó𤨘ô³J/ÅÜ2Yߺًﮎ¿7#öšÎÚ¬Th­T ’uG©tÕ•övÈ×8›Ch¸1áFnˆ€çüçÄï{8ê4©f•݆®õÀðõ=ñ{ÊÓ{»¿CçÎò›iË—é[5‹Êޏw{UýÂnxü°!4Üûv*•óTÊ»ß3 rऻ:3càý÷¯*àÇyÿ ;5ï*öç‡ã¨ûWà{øbû4ÄCte­DùÒ&5üv||x#™œÒk³v_ý :[Ìyå9/ÚßMXæ•:sè·Ž ¾Ü· Ë«ú 4¾¹'‡oºHW%Ëb±ßî%*qO(/Ó÷ÓT(äûqŸZ#K~˜¶úMzó;^ü!=§ƒ¸ãt¸‚Œõ«W¹–.P…?†TÏÕ·Ò^£UÙX{×*ó#ÂÉÞSž²ÎCoDÝ´Ïû„8»Óôê›7¼´…]ª»ôõÒðž¦#pãÇvs_+ÚÄB#¶W.ôW"uô¿°qÝvw×èò•.|“aR÷o•Z­¾ýcß#>ï>À ±%£×3À«Éòq‹T¶ʃ÷¤ëC0*“³SŠe¾t•Þ”i‹r^}ó[ ʼ¯Íêç`›Ç÷�ÇñßÝvÝéXÊ+C`PßÔ`rèß°ùø€=³òÒ `§ø ¯@PZ 7÷dÑ!¿aóñ{f ä¥ÀNñA^$Ì|ii6›ôÌ3ÏP­VóBô7÷dÑ!¿aóñ{f ä¥ÀNñA^$Ì|i±mw¶S˜:ä7l>>`Ïl¼4Ø)>È+„™/-RÀs/¼î˜rs»zK·ÝÑ"áMyÆ�õ3µcЛ1Åó€ù­½ÍÇÏ“öŒÏÀ=<w>¶}{³|xþã^'˜’—³Žîvo™=(Ó 3_ZfWÀï‹ÆñÂàT}c¡?·m¼Š1­óO VÞV¦÷Ž•éøÎAß|žÙ²'Ó¥Ný•Ž6^”ù©c= M¸lyÇÓÁž š±Ùi¢uJZ÷V8(Ó 3_ZfSÀså´®L·ÅÓóÝâ‚ç_p§ÐâE[v¿éNÙ×›ï– ™ó–§‡s t¡RöæÓ•+|ÎSÉú=ªU¼9Á‹/S}W=£«æ•k ŽÕŸCÜZKNËÕ?O»QWŽñ5y{ž™áéé TâisKT^ù‚’N8oÚŒçŽiogŠF¹¯ÜŸ6Ïaù¼¶E7{«vÞ£õ<òçɾéNÍ–[¾H+â|N¨ X)w ð1§ÍXÏÁ™§ZöSäÛÞU<ÿ‰Â Ê9ùÞ¤–7^¬µ”{عYÀï«÷ð;ôýž–*Ö?wÿ{«àºóo‹´åê½å*µìî=8ÇÉ)çùݵ–Åqž<vóU±Ý­Gúeë,½Æ‹ëxi™ðægÖa;~hSÖ’e]ÖKN½Áåû*íVýe«°aëL¸SÔúW(.¿Æ‹Ðñ½õST*ŸQÒ<Ï”VhEÖ—woP9ç•geŠÔ$pš�ÄeæKËìöÀË…%>¢–]¦Óö.UׯQó‹µE²ší^ß[A3ÖkF¼»òc‘Üq‡‰oÞ¦Í2‹:®DïyçÁ£\tƒºíˆðüÚ]æU?[B@œTrqD¥<O®P?3p §rï-:Ä‹{¼#~OºKüǬ\u¨LÇw)Ù»×CœÏ-^ª·jç9².—DÙhRÓ:Måêï ¬nèìÃqSš«=[öd”žr^iøtYˆˆ›´¾ù]Ú­;:LO­ÐY5Ÿ#‡©ù{à/}mð¶[{Tß, aÃsßöÊ–x´–oÝXœóê½Í-*å}vï-¦ÅÊyмᵚŽHÎC&× wË–ãwZú36;ɵÊzƒ±8çrs Êæ,¬O%(ë\ÄûíT¯Ý‘ ž½zc°ŽÚý®» µÓ=O•µE¥¾TÚ:/í¤ Lƒ$Ì|i€K)iYT†]G³°îˆÆVíñ®'|Czï†x^á³ã¬@÷¿ÐÓKOQeç¦wœ Ïûß¿\‘VéŽì•SzTaÑ;ÏEqŸQŽ!„þQ™÷„%§ÏÇ€ÉÞN%¼×ïm ÉgGÀ÷ö[&«ºA%^˜‡{¬œåÉe²Hó¥cÛfø8Óf¼ç m!jç¨ Äõf󾸗N:á¼RqÑðJ>;ñãÝî}]ß¿¿Vikk•ŠâÞä·iC<§Ç¿ù5ªÝÙìÛ}àMžrž|,ú;yBÿžW'¸‚½W¶ àblv’ej ¬?tÊ\žÃ¹lö¾Û`ׯ§œ8½pv\ç¹ÝývJmwT¯Þ;ÿÉYÛm®Põen{¼4K×èÍÞý8œ�q™ùÒ2»þ>ÕÊ ÊkÁ29K:+b_cßmþ®;¤"\ÉreÖs¢¢l¾¥¼~ÿ·ôš8®ûz—Òÿ.UÙ?°Ï0ǯÙÝ¥÷ýçÙø¾ƒ½cü¾>q"ÝüªUI'Ž?mÆwiØ;@J'óùÕ7¨Ú[µs›¾¥4xêëî¹ÂÜ_¶1®™}ð1§ÍxÏ…Ì*å¤(æÞñåMjv»äÄCSãOú+TÆY9²w/Áôwį.ÖöÀš×Ö"‡?å–J´ä¬bîúâþóÜë‹#QïÔÖ|¢Ës¥‹dyuFïh Ûi,8«òzuw¯¬«âœËfšIʺRÿ ºezÙZ÷V‰^Ú8ÛO¯¥v:ˆã½t‘ÎÊúÒZ£§8¼· tr8]�â2ó¥ev¼¿’<wÕºàThýÞ‰©#*êõÊ-:àÿ·œW¦N›=óÔ¡2Må¦foñà°~É%(xcÌÉY{zt[Ûtι?ú=Ûz0ÌîÇ;Oì ¢IÃNý²î øßÜ 0¬=(Ó 3_Zf]À»¯®ùµô¾ðñ«sþ84ÞGž“ Û¾MëNÏŸ×ÓÞqªì‰œgù”qŸÃTíÝmÓîzÉéau{\fpbdÑž.ÝadÎðqÈôcôŽ•av?æyê`OÍxíä+ëÞG¨i¾¹S nÆÊ4HÂÌ—ôÀƒaèß°ùø€=³òÒ `§ø ¯@f¾´@Àƒaèß°ùø€=³òÒ `§ø ¯@f¾´@Àƒaèß°ùø€=³òÒ `§ø ¯@f¾´@Àƒaèß°ùø€=³òÒ `§ø ¯@f¾´@À'çý÷ßwò³Œùæ9H;>xðÀ É6Y·ç¬¼4]í¤c½‡2 ’0ó¥Å47Y7m‚Î nt7m‚Î ntô'ÈnpÃ�q€7HÀëççç0Ø�0«pÝ×l6=�柿l�;�fx`:ðð‰ð˰#æ‡ôÁk—æ7¨ÖäE—þ”š7ÿ5½rŦÿp„—>ù€vþŸMºVkR‡>¡GÍ*m¾r•~ç?| |Ãàx_§ÕÓ¿J×ßÿï^Xuº~û¾ç x`:ðð‰ð˰#8Ê©}ó_ЯßlÒ¶éGÞ¦¶PÙ‡õKôK×[G÷£? w»"Ä]œ€ôY²Ûâà°N¿ùK×部ܤç"`•ÖaÇì6è·×ª4ŸdƒãL>1~Ù�vƒ|Bþ‹Eÿó×ߣk/”©ü³ÿ€¬æºûòEºùà!}xçTùg¿B¿ò[ÿŽþ¿ö·©²x‚~úŸü.Ý{çëT9÷ËTþÚ¤ý7Úù­—Èþ¯½tÿ;í]{‘Ζé´tx÷kô«7¿O‡þGúzåWéW~å2ÕÚ?ô⊳èܡߩ¼Hÿ´ô9úñ ;ô°ó6YåDgåŸÑÿYùMúõÞ1¿FåÓ¿L¿òâ]»û‘ØsìÓ ~�€€¦Ÿ¿l�;‚Aþ˜n>¿H•úQûô˗ߦöõ/ÑßX·è+ÿôô½†E‹ÿЦV÷´sáïSåß‹* ÿmßþý£_Û¦ÿp¥L¥+ zDF÷ÿˆîÊ>r!¬Ù¢ÿܾNÏþ_£+_©ý½wÈZ\!»õCúáίÑ_¯ÔÉÑÝÿHÖ™uzãà©V>Iå·èÊéßþâ˜Wø¿és“Nÿútðp‡.üÄ*Õº$¢ = Ç€� àé@ÀCÀ'Â/ÀŽ`€Ã:Uþú¯ÑÎÿŒjë´^ï|›ÎýÄÿ@Eë»´[ù»ôüÍ?&zô6],®Ðkö‹”/YdWNÒÿtáôæmÑý<òS8¨Ñ¹uèÿÞ8÷9š+Ztw·B?ñüMz@zçâ? g¯¿OŸáÿàæ?¡¿m5è‡ÿõÿ¡¿—ûÇôµ¯}‰ —ïПýÉïÒ/ÍŸ¥ëÿæ×Å1“.?_¢ËwèOn–iÞIçúa½B Î�¢€¦Ÿ¿l�;‚XÀŸþ:ýÑý·ÈúÅ_"ë¿YÌ»LV³C÷¿]¡çëôõ_[¥ßüö÷èìgéÇ/Ðÿ]yš~zñé¹g+TkïÓÝË%Wè;iþ ݱVhÙºCO>¡Gï|…JB ÿÙý[ôÏž¿Dÿæë/Ñ—~óµÞú?£ýï|™¾ð7Ÿ¢³çþýíüÓ´^9Mó'ž~éù¿OŸûÑ'éþáßÇ|–~áoþ4üùçèùð9úÑÏý½óÃ]?ó¬8ç?u @ðÀt à!àá— ¤ß~ûm/Ì6L7×þ55?Ú§ï·¿O÷;îX”O~ø~茆éÒÃýû´ÿ°ë†?< 8ÿ©sÿ¿QÇ2óÉÃ?¥?•Ãg>yHûßoSû~Ç"óÉ#zøC¹ÿ>ýñþCßǨ"­ý?¥ÃO~H?å=¤ÿ!ýà"®<æáŸÒ¾8?×ÿˆî×.Ò¯ÝÜs@ àé@ÀCÀ'>H;¢.Fû·_§On ŸÐ£»ß ¯¾Ñ†x‰@ÝL>1ðÙ��0« î¦Ÿøl��˜UP÷Ó€‡€O |68uê1�ÀL‚º˜¼'à—––¼|6ø™Ÿù4b�€™u0xOÀso$ˆÇ±<OW—Ÿi,’Õ”«5‚IÃ6D#�˜EP÷Ó€÷üßú[Ë Q¿þ!5­EgA—fà„]ê4®ÐêfCüi1’€ÇÃ� @ÀÓ€÷<;‘|·EµÕ"ÍåNPáDžŠ–è2̱Á•kïRÓ^¥‚ðçÊ5ú°]¥ÕBÎÝžó–LcA–ûd¾��擼î@/ à!àóôÓO;ù•LÀ{¯pžjõ«Tš+P¥¾GõÊI%Œ{u÷Ýx,Ö[ß¡J!O…ÕTß:"Á(Èr«ÃÃ� CÄ®û�ÐxøÄÈÙK øƒ•só´l7iÏ>C9t{U/ìí×V)çô=²Ky!�«´Ça¹3d·„P,ŸpE£—8>²ÜG7bxø�d‹xu�úŸ˜Ç{Ìɯ$¾Û´¨(DÞFmÛé•åÚõ å•°|¥N‡ŽÐçÞÜ{B „ð»Dµêy*8¢±ã¥Æ,÷‘¾��#VÝ€Æ@ÀCÀ'FæWòø9Ê•Vh¥§Åsdï\¥e[*ÑR.ç„mm¢¾@¥Õ«T}UˆÅ¹yZ*¿ T\½N-¨À±!íÕˆáá �5âÔ}�è <|bd~%ð@;¤ãõÀãá �bÕ}�h <|bd~KÀ;Óæ©dïyaRÛ>-Žyšìö¡€7Å¡Óì9tîUš§9gHÇ#/H;¢�̨û€é@ÀCÀ'Fæ×ñzàY”?SÀ q!à=¡DÀ·m*7h·v¶!à{H;N¦ë¸ÃjJ6µ½áà �.“«û�HxøÄÈüJ.à¨a-SNì›[¾F»¯ž¡Bi‰ <¡u‘Jsy*]»æöÌ;¿¹þö›×]¿·ãü¾úæ wŠBG¤=¤Nc“J9÷¼ü‚®Û²i9'Òª\Â./âD=ÌÒŽckÄ:»T)oèü KÀ ðÀ�H‘±Ö}�LxøÄÈüJ,à…°Z^¶½±Ð,¾„€¯Ü¦¦ø-Zw¨åôÈßáòWn"íB….ä¨P(yÓ.‰}î:3 ÌW®ÓÍr‰*õ¶3¡*躭mZ=w“š»ëbߪ¬^@¯¬‡´cÜFìÐùpµ DxÁ›×ýÃþYé7h£ü'½~þ«lÂîâAªTX.G¹BžPØKÂnjÚÄÃ�Ø��)‘¤î@G à!à#ó+qåÇ=£…uªwéàÖkôÛ/Ÿñ„:÷¢îО#Ü›B„—|B^ ø"­”—(¿|…ª//öÎc®ô"½$àQ/v©C<Åá<V«Ô>ü€šï81f™ävä<ä|~Güž¤ŠmQÉ™>rŸê•E*½ôâ`ûÀ›ëwìßÜû]¦o½ª>°}{0íšîx`�¤×}�˜ÌÌ–à¯ýë}èsï¿ÿ¾ !ó)±€ï­ÜÉCcžrVììçû2½l­PNöÂlSÜ¢÷BØ­X›nì\‘Vk÷¨Uãé e¼~«Û+Âr%Z¯Þ  Œî!ó4™€^äí½¾€wÈ>Bú´; Ê'àûl×éVãUw;‡ç…°¾¦>°±€WÒv<Ø��éÀu �&3³%øöíÛ}Aàs<ðb d>áõ£Ù$³£ü°T¹WJ/Sµ7„f“-¹¸Ó{î¢Mê[o8‹Üÿ3ôDá ïmA ÷9<°�R€ë�Lf¦Kðç?ÿyO�ôÝúúº· Cæ•Ñ~Ø &3D&ì��#Àu�&3Ó%øõ×_§O}êS=!ýïÁ°ÈSóIu¯¼òŠË$†Ì`’qøÍÓ3Ï<ã8i¿ÅÅEÇÏÛ²Šü�+Â�®û�0™™.Áü1=þøã=!óå/ÙÛüp^=öØc½¼R]üÜnögXß(³˜¬ÓFù 𓳔¬\¢åyÏÿš;Q ‚Ø/·|‘6V\?ÍøÂ qî°CgøÄ<•ÖoSkOùߪƞÁ$ë„=ˆ[ÀGM#9UxLüIx�€ÓQÇu˜u¼õI„–(Z wè§AÌ| æÞc)`Ðûç•ÿÅ“O>émƒQË+ýñÈü1£þè‘ÇRç…ØÞ{‡¬âºf_ <Ç;± Âß¼æì×hXTäðý•ç+´³³Iç¬-²kMÚ¯ËÿïP=æ &³ÂsÏ=7`Cv<œ,ŠcO#yà-°$¸J—/ óÇÌî<ÿ+Ý©›st¢pBì'Ì^¾D+"œýssOÐäƒØ^S”¥yqÜK´ÛîPË>C9÷¾û½Þøxç˜Ýþ9Ì¡� �t›BGÌ-’Õ|è…øà…W¯ âù5Bû¬Š Óép/¼ÿš’õÚÊi÷…¶Û!û·/ÏbÂãÓ*T?tg=q<‡wŽ w¼ð·œOžËi²›w©f•©À¯ñŸ¼ÿKtvÅ–Ž:ƒÉìÔ ÏŽÒ~£L#éÎãôrpO}a™^zi™ •!¸W)/âíñYÉ"»Rt¸êëBÐ_£7ýÞB\y»°N—Ïmmߢfç@<¤UȲ·©ÖØedITÆ{T+‹s­¾Få¢(cwEx��?ó<¢¶ÓÑ“§BaæœvLˆù¶÷¶žÛÅÜYzm÷U*;FÜaõÐÛÇm3såM{n3#|Úð´‘,NÓ$+•ä+{áãôÚ"oq8Â]íÁ]¡*ÃÛ†ºy*YÛÞl&ªì6ú³œ¬V©ÕºMëÜÃ[8OÕ7¿¥üÿf¬Lf µ>¾ÝªÑ¦‘äyÿÁâ‘ÄN–ÉrÖØszöøAŠã;þ¤îôŒ8^N7©N%ù2}«f‰Êu–í{tЬ‘U.zåÈ«€y¡(ùV�à?Û¸½î¬nÓ–ÐNGžÓ±$ýê ªovD½ó–ŸW‚¯}@îPêí3ïvFyéM ø ‘•ëcÙMê£Ggè†* Á±‘ ?ŒÅ³ãq§‘Â_EÊ!4gÏ(QC\n™¬êËTâÿù íîÉÞQ‰Vwé;ë%qlï¡l÷•xÎê7éͪ|H<OµÖ=ï¼4QŽ�˜y àg™ûT+/8C,÷œoå\~P[¥œóœh·Ê'„@çÕáE›çô¾ÐÛ§ÅCvs!Cn&ü„˜äuôÄÊ”$hÛ4„{á …‚çÓþ¨Èí�€4€€Ÿaœ¡¸y*nܤ*wî8ýÀý˜µx‰jN/uÏí<TÆ™v:×ß'ÏC|½ô¦ˆö%8+7Ù$¯C=–ÿ¸Q~†Ã’îæöŸ‰ò3–t¿(¿‰ð5èîŽ £á´4© �Ù~–q{àçrKT^büÄ)ZÝnÒO„07OK¥SâwŠ+§ié3<±Ây² gÒ„¹Ü)*-‰_gïMóѾgå&›äu¨Çò7ÊÏpXÒýÂüÃþ3Q~†Ã’îå7‘8×'jÿ´·�€@Àƒ, } ÎÊM6Éëàcéà$AÛ¦áL'Î5„ʼnÚ?íí�� ð h_‚³r“Mò:Ôcùåg8,é~aþaÿ™(?ÃaI÷‹ò›Hœk‹µÚÛ�@Lð|Îpz8оë’QÇe’סËÜ(?ÃaI÷ óûÏDùKº_”ßDâ\CXœ¨ýÓÞ��:`²€ÓG;h_²R`'yê±üÇò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM$Î5„ʼnÚ?íí�� ðà8èbíKCâŒr¦ûaÁÇót6É.-¤8%/l/ýIœ¥ƒ“m›†38×'jÿ´·�€@Àƒã ‹´/ É3ê¡»b£·4®.LÒàê±üÇò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM„¯Aw��ºŽƒ.vо4ÄÎ(¹êcîNä©xyƒÖœžøÏ®ÐS"¹ü m\^¦\®LöŽE¥Þª‘]ê4oRÅ[%rù¥ónü¹"•++T˜;I•úÔö–àÏ-¦µ­k^O¿HßjÐa{—6ËîŠÎj]-o>k/ ¯Ô÷½“M5Ïüùåg8,é~aþaÿ™(?ÃaI÷‹ò›Hœk‹µÚÛ�@ àÁqÐÅÚ—†xåõºóÒéõ«B8ó*ZîÒ¸ÎPš=wâ~!¦WÊK"Œ—\ß$k…—Ëâ[ˆíåb™¬­Šõ,ÖÿÀ‹/ÄüÆ%Zq–Ú½ë-¥»E]±¯š~ýU 9G¸¿·[¡üÜi²ÛßHƒ¯£\»ïoº¨yæÏ¿(?ÃaI÷ óûÏDùKº_”ßDâ\CXœ¨ýÓÞ��:�Žƒ.vо4Äʨƒ•Þto5-giÜ\ÍCi>äís”+_§]Gè¯S½Uaª¸"± D|­I'=îIߢ»U!Òô©ÓØ_ˆÿÊ.uäj^Å—i—ã8 ûîƒÇßãôûipúµƒÉŒéq®E' Ú6 g:q®!,NÔþio��€€ÇA;h_âdT·iQQèÚ6­rOx¹FŽ÷†·xÛÝZ NOøa½ByG˜O„åÝ}: ²+¿MÕ×ÎôÜ;Ûœ#RÛ>í.óþ@¦‡Z^Øî{6-;÷èÃ#½ÿs^飿™?ÿ¢ü ‡%Ý/Ì?ì?åg8,é~Q~‰s aq¢öO{;��è�<8ºØAûÒ+£dyi…V y:Q<G[[ç)?7OKËú¿Ö~Öí‰ßçx,ª;®?±H•[ïRÃZb[ˆD‚Ón¹‚Û÷ï q?/Ò[%˺L•µ’ˆ7O%!Ú÷ùÀIÿ_Ò¶3žžEf‘Ê›»Ôîz½óJ|Û­GÞ §‹šgþü‹ò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM$Î5„ʼnÚ?íí�� ðà8èbíKCV ì$¯C=–ÿ¸Q~†Ã’îæöŸ‰ò3–t¿(¿‰Ä¹†°8Qû§½��t�]ì }iÈJäuð±tp’ mÓp¦çÂâDíŸöv��Ðxpt±ƒö¥!+v’סËÜ(?ÃaI÷ óûÏDùKº_”ßDøtw�� ;ðà8èbíKCV ì$¯C=–ÿ¸Q~†Ã’îæöŸ‰ò3–t¿(¿‰Ä¹†°8Qû§½��t�]ì }iÈJäu¨Çò7ÊÏpXÒýÂüÃþ3Q~†Ã’îå7‘8×'jÿ´·�€@Àƒã ‹´/ SϨú»âª3£Ìèó¸Oò:øX:8Iжi8Ó‰s aq¢öO{;��è�<8ºØAûÒ0ýŒòVyåi(±Ó$¯C=–ÿ¸Q~†Ã’îæöŸ‰ò3–t¿(¿‰Ä¹†°8Qû§½��t@gÿñÇÓ믿îüúA«ºØAûÒ0Ό궫ÎBOs¹STZ»Aín›v×ynw!yuÖÎCj×ÎSýÂ9 8udó΂P]: fuÝó=w†ìóºOÒàê±üÇò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM$Î5„ʼnÚ?íí�� : xyn=öÙ¶= äQÇê.vо4Œ/£„üæÕQYx7Þ ‹ÖïÓ]îY/œ§êîUZΟ¥×ª!Þ‹´Z»M[¥yW´;‹DñâOÔ²Ÿ§byƒ¶*Bô;‚?~—ü$ ®ËÜ(?ÃaI÷ óûÏDùKº_”ßDâ\CXœ¨ýÓÞ��:`‚€g÷©O}Š~ò'Òé‘gPÇê.vо4Œ5£:wÈâUQY|·ªB˜/P¹vßÛ讞š[¶©Õ[±õ#Wôç+Tà®ö:7—£BÙ¢šôI˜¤ÁùX:8Iжi8Ó‰s aq¢öO{;��èÀ/þâ/:õÕ3Ï<36÷×þÚ_sÒ—cñ®þÿüç?ïüÓG;h_ÆžQm›JsªØ–øeÿušÛ´~Í¢µ|ŽŠ7©ºZ¤9퇞¨ç¡4Î~ýø«N/É8LÒàê±üÇò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM„¯Aw��ºTwéæT¯:0}t±ƒö¥alup›¬Êygüz®´Iƒ{d/Ï‹ôsTX­Rûð=×Ïãã—Äï‰S´ºuÕõ…Ò*Yµßs{ïeü„´NÒàê±üÇò3–t¿0ÿ°ÿL”Ÿá°¤ûEùM$Î5„ʼnÚ?íí�� <¶ü•W^q~Gu<¬…‡»ŒÛqº\—ªîÉ'Ÿt¶¡ŽÕ]ì }iÈJäu¨Çò7ÊÏpXÒýÂüÃþ3Q~†Ã’îå7‘8×'jÿ´·��G uv,Üoß¾ímA« ºØAûÒ•;Éëàcéà$AÛ¦áL'Î5„ʼnÚ?íí���Âyðà=÷ÜsÂ]‚:Vt±ƒö¥!+v’סËÜ(?ÃaI÷ óûÏDùKº_”ßDâ\CXœ¨ýÓÞ��`tPÇê.vо4d¥ÀNò:Ôcùåg8,é~aþaÿ™(?ÃaI÷‹ò›Hœk‹µÚÛ��ŒêX=ÐÅÚ—†¬ØI^‡z,ÿq£ü ‡%Ý/Ì?ì?åg8,é~Q~‰s aq¢öO{;��€ÑA«ºØAûÒ•;Éëàcéà$AÛ¦áL'Î5„ʼnÚ?íí���Fu¬èbíKgTVܤPå?n”Ÿá°¤û…ù‡ýg¢ü ‡%Ý/Êo"q®!,NÔþio��0:¨cõ@;Ì|iàù\Ù¼’ZVP —¿ EùKº_˜Ø&ÊÏpXÒý¢ü&Â× »��¨cõ@;Ì|is®BÀ÷á°¤û…ù‡ýg¢ü ‡%Ý/Êo"q®!,NÔþio��0:¨cõ@;Ì|iȪ€×ÁI‚¶MÙNœk‹µÚÛ��ŒêX=ÐÅ3_²(àA6‰Si„ʼnÚ?íí���Fu¬èb‡™/ ðÀâTaq¢öO{;��€ÑA«ºØaæKCÖ<_Ëq]–Ó1™8×'jÿ´·��Ô±z ‹f¾4dQÀ«Œê‹•3J:̰øIÒñû™ 0Óˆs aq¢öO{;��€ÑA«ºØaæK|°?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���Fu¬èb‡™/ BsÔe9“ º&Ý��€t@«ºØaæKzàƒýañ¢Ò`FI‡?I:~?fq®!,NÔþio��0:¨cõ@;Ì|i€€ö‡Å‹Jƒ%fXü$éøýLP˜iņ°8Qû§½��Àè ŽÕ]ì0ó¥A øÅÅE/ÄlükTX¼¨4˜QÒa†ÅO’ŽßÏ…™Fœk‹µÚÛ��ŒêX=ÐÅ3_¤€?uê”b6|-ÇuYNÇdâ\CXœ¨ýÓÞ��`tPÇê.v˜ùÒ |Vn ÿuŒê‹•3J:̰øIÒñû™ 0Óˆs aq¢öO{;��€ÑA«ºØaæK|°?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���Fu¬èb‡™/ ðÁþ°xQi0£¤Ã ‹Ÿ$¿Ÿ 38×'jÿ´·��Ô±z ‹f¾4dQÀ×e9“ º&Ý��€t@«ºØaæKzàƒýañ¢Ò`FI‡?I:~?fq®!,NÔþio��0:¨cõ@;Ì|i€€ö‡Å‹Jƒ%fXü$éøýLP˜iņ°8Qû§½��Àè ŽÕ]ì0ó¥>Ø/* f”t˜añ“¤ã÷3Aa¦çÂâDíŸöv���£ƒ:Vt±ÃÌ—Œ?겜ŽÉņ°8Qû§½��Àè ŽÕ]ì0³¥áÁƒŽxýõ×c°c?»?þØ‹eþ‚5ª?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���Fu¬èb‡™- ¯¼òŠc„ Ç¢ÞTøüUFõ‡Å‹Jƒ%fXü$éøýLP˜iņ°8Qû§½��Àè ŽÕ]ì0³¥A:ãwÜ;o*|þ*£úÃâE¥ÁŒ’3,~’tü~&(Ì4â\CXœ¨ýÓÞ��`tPÇê.v˜éÒðÜsÏ9†PÝ—¿üeo«™ø¯g—åtL&èšts���Òu¬èb‡™. A½ð&÷¾3þ‚5ª?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���Fu¬èb‡™/ j/¼é½ïŒ¿`ê‹•3J:̰øIÒñû™ 0Óˆs aq¢öO{;��€ÑA«ºØaæK÷¸³1ؽÿþû^¨¹ø Ö¨þ°xQi0£¤Ã ‹Ÿ$¿Ÿ 38×'jÿ´·��Ô±z ‹´/ œQYq“ è¸I]–Ó1™8×'jÿ´·��Ô±z ‹´/ Y)°“ºÿqFõ‡Å‹Jƒ%fXü$éøýLP˜iņ°8Qû§½��Àèp §‡Óí[\]2ê¸Lê:üÇÕ/* f”t˜añ“¤ã÷3Aa¦çÂâDíŸöv����Œí[ܬˆ‚I]‡ÿ8£úÃâE¥ÁŒ’3,~’tü~&(Ì4â\CXœ¨ýÓÞ���€ñ }‹›Q0©ëàã×e9“ º&Ý����ÒGû7+¢`R×á?Ψþ°xQi0£¤Ã ‹Ÿ$¿Ÿ 38×'jÿ´·���`<hßâfELê:üÇÕ/* f”t˜añ“¤ã÷3Aa¦çÂâDíŸöv����Œí[ܬˆ‚I]ç¸.Ëé˜Lœk‹µÚÛ��€ñÑ¡z¥ Úž*×î{aL—:M›Ê…œÓ.±+Ù{tX¯P^üÏ•ktàÅ4í[ܬˆ‚I]‡ÿ8£úÃâE¥ÁŒ’3,~’tü~&(Ì4â\CXœ¨ýÓÞ��`†éÜ!kõ*5»ž t›çÉj>ôB]ªòTXÝ"{m±/î» ²Šy*Z !ñÍGû7+¢`R×á?Ψþ°xQi0£¤Ã ‹Ÿ$¿Ÿ 38×'jÿ´·��È"Ô¬®S)7Gs¹T8ñÑä„PÞ¡»Ö2åæ–ÉúÖ5·G<·Jµƒ•øKtvå Nû‘+èÄÜÓôÒKO;þ¹Â UÊEñ»NõN—ºí*­Ê^u'¨i-Ò\Ñê?Ö©’w{ÝçN¨ðþÏçÒ CUìwšT­”ʼnã.ÛÔ2PÑkßâfELê:üÇÕ/* f”t˜añ“¤ã÷3Aa¦çÂâDíŸöv���Yãµìç©XÞ -ÄŽØ~@õÊIÑ&œ¤J}߉åö”óP—ÖÑø­*•s9*Tv©Ã‘jÂÏ"ý4ml<O9ë­ïx½ê7¨¾uÚí÷©V>áëQ¨ˆú®HjUˆtí¹ÿ9üð=²—©l]¡Ji¡\ÃоÅÍŠ(˜Ôuø3ª?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���2†ÛsB€—-ª5ÝÑåƒC[©m ÑÍB|Åú`|'nî Ù­G¼§'ºçiÙÞ¥jyrå*íq˜§Õíα â!A‘ßÎ0™å+uqTø ŠØ_á»ôÀIŸÏ¡(D|š3ÔhßâfELê:ø8ÇuYNÇd‚®I7��`†hÛTrzÖ? Ns›*V:´Ouk•J…<7®“½¹E[ޝÑÁ‘øoˆ¸‹Ê‡¥ŠèÞgÎq﹫/Q­zž s,Ú\¡ï ¥Q¸#ê½ZÿîðWìsø÷ûûÔ´/‘å½%0 í[ܬˆˆp\┡°8Qû§½��@ÆàSKó¢þÏy ¡]X%»yŸZö·×ü½ÛTÉ‹í¥ód׿«Ä¯Rû{ÌO¸‚›ñzôU±_éî¼*Òš›§¥Ò)ñËaÿжœc•¨ì<40^ï½'êÝYgÄ>Ë—©Z]ÿ Tâ^ÿïZîøû¹"­ÖZÆ~Ъ}‹›Q0©ëàã×e9“‰s aq¢öO{;���0~<áž?Må罞~oK–ѾÅÍŠ(˜Ôuø3ª?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí���ÀøéR§¾NÑåJ—h·Ícé³ö-nš¢@Nê?0QJLJÜø3ª?,^TÌ(é0Ãâ'IÇïg‚ÂL#Î5„ʼnÚ?íí����Ú·¸©Š‚¨IýǸèÀ¤Äÿ8£úÃâE¥ÁŒ’3,~’tü~&(Ì4â\CXœ¨ýÓÞ���€ñ }‹›†(‹¸‹ð4GÔ®ñ—ÍîXiž²¨%—áå!>Ü£ÚjÑÙvtÉÞxLJܸçx<—åtL&Î5„ʼnÚ?íí����Ú·¸c^¯{o1€üÕvxì|›¶JóÊŠ],ÖÿÀ] pžjõ«Tò/Ù“I‰ÿqFõ‡Å‹Jƒ%fXü$éøýLP˜iņ°8Qû§½����ãAûw¼¢@N1t†ì½&ÙËó”+ÿ+w~R^J×™s”zÇ·è�/(pöyßÇËOJÜø3ª?,^TÌ(é0Ãâ'IÇïg‚ÂLƒ¯Aw���€ôѾů(KìÊÅ�¨|óº3?iqã&Uy˜L¾BõCw!žŠèó¡ë"mÔ¶a7îê^É™”¸ñgTX¼¨4˜QÒa†ÅO’ŽßÏ…����˜ˆöªf¼Â«¿Do©|Æðų¿Ak¼¨@î•–Äï‰S´ºu•Ö¼E^­^¡e^T`©DK¹(ž£mg¹ßdLJ@òqŽë²œ����€éh¯j²"¼&uþãŒê‹•3J:̰øIÒñû™ 0�����Ñ^ÕdExMê:¢Äl\X¼¨4˜QÒa†ÅO’ŽßÏ…����˜ˆöª&+ÂkR×%fãúÃâE¥ÁŒ’3,~’tü~&( ����ÀD´W5Y^“º>Îq]–Ó����0íUMV„פ®ÃœQýañ¢Ò`FI‡?I:~?����`"Ú«š¬¯I]G”˜ë‹•3J:̰øIÒñû™ 0�����Ñ^ÕdExMê:ø8ÇuYN����Àt´W5Y^“ºÿqFõ‡Å‹Jƒ%fXü$éøýLP����€‰h¯j²"¼&uQb6®?,^TÌ(é0Ãâ'IÇïg‚Â�����LD{U“á5©ëˆ³qýañ¢Ò`FI‡?I:~?����`"Ú«š¬¯I]ç¸.Ëé�����˜Žöª&+ÂkR×á?Ψþ°xQi0£¤Ã ‹Ÿ$¿Ÿ ����0íU ¯¬¸Ià?Ψþ°xQi0£¤Ã ‹Ÿ$¿Ÿ ����0¨šŒ%fãúÃâE¥ÁŒ’3,~’tü~&( ����ÀD j2 Õãº,§����`:P5Ã/TGõ‡Å‹Jƒ%fXü$éøýLP����€‰@ÕdŒ(1×/* f”t˜añ“¤ã÷3Aa�����&U“1¢Äl\X¼¨4˜QÒa†ÅO’ŽßÏ…����˜TMÆ`¡z\—åt�����Lª&cø…ê¨þ°xQi0£¤Ã ‹Ÿ$¿Ÿ ����0¨šŒ%fãúÃâE¥ÁŒ’3,~’tü~&( ����ÀD j2F”˜ë‹•3J:̰øIÒñû™ 0�����ªÉ,T벜����€é@Õd ¿PÕ/* f”t˜añ“¤ã÷3Aa�����&U“1¢Äl\X¼¨4˜QÒa†ÅO’ŽßÏ…����˜TMƈ³qýañ¢Ò`FI‡?I:~?����`"P5#JÌÆõ‡Å‹Jƒ%fXü$éøýLP����€‰@Õd ªÇuYN����Àt j������0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0ˆTüa½Bù¹9š‹ãòªv¨^)øÂ¼ÄÆÂÙ¥üàq‡¸|¥Nc=tÚ´m*õÎ?O%{ÏÛ0„n›êv…J9oŸ\‰*vÚÝûôFí®¸ö¨¼ÊQ¡¼Av­I/ɡ֩’JCÉçónì¶N·]¥ÕBŽæ «d7¼Ð^_ŽŠVƒº^•nÓ¢â@\v§ÉnzÁ‡"ûN+iŰ¿$i¹���€6¤&àçK—h·ýÈ PÅBɦ¶øˆÚ»—¨4ï ¶nƒ¬¢S'%7  zçáÑiRÍ*ÓIӼеUÊ9×%ÄöŃÒÉAÁªú‡—ƒ•¥Èï‰La³ú*³èá9ÕÆCQÏO¸¢EÍ#êö!5EÞWêûžð1½ë×R®ÑÞ¡ÛܤRáDô5n®QemÉ;æp¡Ÿ”~¹N"Ä“”����èD:þ­[ôÆ"M<#DÍ•kžXWz~Óê…zÙ mý7áBL ½£oºÔ©¯>¼ ô.«½ÄnÜ‚—¹e›Z*tàL`¾sOòåcôD‚¸Ž†Þò!%ð¼bÒ¾N•­ýй“GF:»´^©R£×c>FÑÜ+×ÉÒŒ[n���� “)œUÀ¯QíîMª”æ…Ÿ‡lØÔì ªÄn»Nv¥äõ ©¼¹Kí¨îÌ!çÑmÚ´Y?: dð|ÕzC-|Ã~8½n›v×9þ<-ÛïÑ£¡DªÔêTUÏÙnP§s‡,ç:9lžJÖßДjÖ®yyÁqø<®P]éùŽ+Äzñr%Zßmûz}/C¼@}[2·@åÚ}oC0# øNƒìrQìãÙ¿u‹¬måÚ†ùòdàÜÝ<é¶oÓ:çaî Ù­Á·ü`s²×/òÛ^uPœ7ïRͺ.îYÀÛÍ}îí^£ÕZ[\gˆ€÷o*”É ªÔmïÒ¦“7Þ9Ö6‚|X à���3ÑSÀ q»ZkQ·7ŒÃ7Ü ³Kgìò:Õ;‡^°(•ÝðqÙçኡeªø¼<†|~¿Ã}ª•¼ô®Rý­w¨¹ëöN»npøH®´IÎCjÙgzaްZ½IªŒ·HVó¡—þ#/®&ÏÓRz¾c 1e÷|*´5l,{˜€O8ü$¹€—C}ؾ]O|ŸP®ÍÛ.{ºʃ—)½²#òdk‡Þzë.í:û¨]ꈇ·rñyϦòí‚—®| Zf=/ÎMv”[¥Zï-”('• qnB¼¼&÷á¯{Äïѳ¡<ÇÕV=1?ftAÀ���f¢i¼7„F‘}‘ؽ¡ 2Þ€h @=Wð xE öηÖ?¥þ„ï ‘íôN/ôDW_$õÑcñ^uÞôÃÙ»~ù�<Ì(¾ó ‘.¨§7TÀû>žŒ¸ýó×/à½ëTÞt[×iÝëïùîå´CpÞXÞ¢wE"Î~êX{›Ê½Òòºæ©´~Û}£Ó}ìõñ¼ú@׳™àà­oò5ßmÕÇÞÏë^X¯\+åRgß+×ý4ãäQür����0FÀ÷ö¾áwjïu�q{à•côź"¾Žˆ"5l¾H ðAaª˜ò÷ÂWÀ»  ’Î÷cª^íábºrSB¥nó;E4+çŸdf¡¾æ7ëT3;MOÀîïŠl>ßs^¹&à•kRB{åU–Åþj>ðñò(i¹���€˜'àGfÃΣ]#[ðÇPÅ—´i x ƒ·¨\*QIAÀù¸˜gÞÙRÆ\«@¡~P Ž ÷=·_oæœè<w¹œx³#õòÄûVÁÛˆ"à0ORe÷6mžÛö†; ðC®éˆ0+àãåQÜr����½0ZÀO×B¬ó("¬/þ‚zIÓðƒ_¾{¬øÃúe:ðÁio>tå|D䯉þˆ5:ß¼Ãà´•®½•<{ã2²€wøP4òÍŽ"àÉ÷ÝCa‘Özù£^±k¿7_æñ>äÜ!à���31OÀˆÇaå'®€WU/^_ŽOCÀ+º"4 ñ¼ˆW8Oµ#s·Ë<×ßmÙ´ìõPÇ™FràãΠ|âqæç®*c{´½~½Ÿ®Ìg_U û>nVIÀ ½½¡|¤,‡0)6A xb·Áï2† xU¬÷óºg× 1ðJ>ö÷•ù/â–����èÅDüÑqÁÞuè,ªðS÷€€tfváy˜ÉG¦›T‰u)ÂâÎB3 Ô$ª’½¨Qa}Á¥ž¯óÐ( Õ}cxŽW(Óf]N#)‡ŒøÆÀ«yߕެ-Þ9Ä[ȉ‘³épZ¾1í<]äê9²ê ~P9ÑÇy¾ÿàäùÝ|Xööås{£?ͧrþQC|ú¸»?öÝ;ï@ÛJxæš‹´< ’¥Ðö‹gE€Ùoš~Ù÷ÂE^l¯ž¢Nšì¼‡È<Š_n���� ) x¥ÇxÀùƒúÊßs¥ TñíÛïIe!"ç‰çmþý ;ðÞÙÁaBà†ÍÏÎ×»Üïá”î4]³/øÂ„ಭþ›æˆ0eŠ@g¦˜;â!å¼·ˆ’7÷½tûpøÖ º.>Ž|Ä:0 Íð¼rçõU²‡M?9c+6“i]SòT²GÛÖ-jõlÌyï[  ÓTæÔç‡ åƒÓ·®‹× Ï=ðW©ÖjôÓVW­õsä8ýÞsWh÷ßh- G÷†¡úfÙ³¯póÀ«Q^¾4·h™§µ·ó2,Ô·QŽ‹xË�����m˜Ì������ÀX€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����À à�����0x������ ������ƒ€€�����Àˆþ£&‡íuóví����IEND®B`‚�������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7f.png��������������������������������������������0000664�0000000�0000000�00000044574�15030617045�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¶��0���B2´���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IIDATx^í½oˆdGšŸ[Ÿî -ø²NcCiµ«µd}°@Þ2ÂŽWp¥5ôâ‘!ÁÖ-#–e*(`àZˆÙ„ºˆXÜrBk`Ðà&MÃ00*H–†¡ØD-¢(V,¢UÔb†vS–Mñú}ãDDFž:Y•Y•yòüyˆªÌÈ8qâïï¼'Nœ5����h�[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h•¶kkk8\%ÝÌœ|.ýî³z̦låÔ{ŸÇéáÙÞÙ“ÿ½5 ¤ëÊw]ºƒÞs+zn�êM%ºñ\ $fo—ßÊAÿš¬uoËþp[:mŸ'mOdÔÛpñ;waøâÄíù lhw�õa 0…ÙÛå¯e¸õœt¶†òpÔ“õµkÒ?øÖÿ6cÙï_—õîeïè;ï×"¶PAhw�õa 0…ÙÛåt×e½7’o°ÝÞè‚&ì:oJïýWÝq½wk@ØB¡ÝÔ„-ÀæµØŽ…í,Û–ƒ°… R…v÷ÜM®\×4¶�S˜½]ú5¶›7eow–5¶€°…*Ra PÛ%°…*2W»ÌïŠðx$½õL¸=vVÜ2xð«è×jœ¨ ;O/Û`H€UP…v‡°…2AØ. „-TÚåê èa l¡m l—ªíruPô° ¶Ð6¶KU„v¹:(zX[hÛ%€€*B»\=¬„-´ „í’@@@¡]®ŠVÂÚÂvI  ŠÐ.WE«�a ma»$uâ;9þ@6Öž•nÿs¹àýZµ†v¹:(úzrz$²½!ÒéŠì×pp@ØBÛ@Ø.‰jl£_È ¿%—Ù`ÿä@†ƒŸJ¯»)[Ã_{ÏK¢³ÃèÎméomJgk(ÇÞûªœíÊ»½»¹øL¨îHoæ<ŸÈ¨·áêlm½'#÷.ØS=ý»2¸Ý“îúb_NPœçr@Ø.—O>ùD>|è¿M²Š¢?Šl©(³´×:"½Û"#j§‡"w¿ÌÂ<‰¬ÛïENí²cÊæHó5苎]¢ýÏ{j7ÝÑ<m©ÐT·Œ>t¤eÖSH˧§Ÿë†å{Õ l¡L¶KbõâTއÛÒÑ|X^æ“n3þ°áü ]åÍÿÙëY³¸ž»ºHöœÝ“3¢[EíÞç£g-¶Ù üùw²¨y½8Ïå1K»¼wïž¼÷Þ{þÌÂÁÁ¼ôÒK¾¯ÉÇ,ß|óÿ5c†¢_(û* ;š¦Y÷|>P‘º¡~&r£X4´«ô7³<®éÿýn–Ê[*Ÿºm{‹»¼;ŸcMËòné¦v˜äG‡´…s´':vL– Û«ƒ°…2AØ.‰YÄòy,Gƒš—˽*Š»Í¾›è®ÆèŒqu‘l˜%ú'²µÑÑø®IÿàÛÌÛ¬Â:o,$ÏÁŠÛ‘Íþþ&ô)y.™iíÒD˜ ÚW^yÅ…±Ïp1Vn;;;®ÌR÷ÄOÈ‹/¾(÷ïß÷!K*̶T¼Zšz]6vk½XSç¿;´a«]gÜÞõÃàzæobxpèýKàHó]”ÿæÝü‹ºÚ4ô<G·¼è÷¾)XY­š¹„†–ýp;Ë·Ý1î‹ìhÝìY»Í_ÍHh3ù¶T6¡MŸéUB3Öµ<^²¬«�ÂvIØä¶<Žå`Ø÷"É&ÒMÙì¬ –Ò³Bêôh$wl‰‚;¾#[98IGóoå Íý¶Ù»-¿ìu3ëïÆdxô㉂RãéÝ‘K3g™=êD«ÇÏ"8Ï/µþzgË,ìfñ'þ™•:¿¤à‘ì÷¯K§ó¦NÒvV–šF~¹Æé¾NôV¾¯Jo0ž{µ¬æg{WŽbþ“¸;A°-åc+ù”<§e;ç;7Çuº±#£‰úX wŠ ³žßóÏ??‘¿¼µÎbâÿé§Ÿ–'Ÿ|r¢ìòî7ÞpËôcy„ÉI݆ ‚tl8=yUý&./“ðyKhj=½ÓÐ�¶\ .0q’›ÅÍ zÇ–øx7¶TLæ°`ík~#A°ˆÏ3qæÎ{j¾’‹€à‚•øDÓÖîáŽÉ—Ë,ç`KAtxŽÏ¯Å§C©K»à­ËKÁò¶jæÖÞÖµŒœu\]_?[Ù[»Ý¼ìE‡¯ãЖìân=ß.ƒFÐ[Ÿo‰ŠµëÐÜ2=>[þ6'Á­¬.'À ÄwX–s™‹J«¿\ZÛ%aÚrx¤òe™A4š_*b Ťбý[*ÄTx]Èáéwr8xS'.‘{㉠»p{~œîIJ†ÓC½ºÞTÿ—µs?”ã»=Ù|!o• boëçLñëo.¾ø¾þ$lòÿÎÖ®Žvt"²ïö>ÿ¿÷VÙðûø¼Nú²iþëÒßWß“=é9Ñ9ìËb›?×)yVlÍíöƺÍ!œåoñ3ŸåÕ˜&hÍ™LÇDª‰Õ|¹]ìÎ.OXÚÀ¢¥U]W'ÒØštþµÿì‰âµÀJ“®1½P x!bñh3wâÏnã§‚øDý»ú»v-Ôé$jiOQÍC‘€ ùÌ l[kÓ-—Ð4HOÃEù Ǩ â'=ï|¹Ìr:„Äò·tŽý1Á¯¬õº–Öª™GhX¹¥ËOLd™r‚7ñŸ'Š/+ ‰¶»3²ˆº?Ñ8¶´l–A*¾…]L,ô.Ë9 l—„MdK! µÄ"…íämþLxM ©S¯[Øh±LÖâjKŽ“Hˆ3Zò†4\ÅcQX¼|!ÜÖ?k9ždÆøâù‰ç|ÚI9Üü¹Ü¾n–W -¢Aˆ¦Ë5Ь®E´`¹B¼ È ÓÂ<kp'j;þ"C¿‡úY¢Åvš  îí·ßö¡!Ïp8,,³ÙÜ“²±±!_ýµm¹ñ¦I;×ÝÑácJ“ŠkW ,b3 [=.ˆé0q;qçŤa­]7q§.,k0Á¢M~"í¦veß×2lr´øS+nµÚ…\Ø3"s†|åÁˆþ‰õjÖsÖ<K×H_ós áƒux½D,­U3Ðåke–Œ ®Îl)AX'ÊÏÚùŽ¿h龦õį<ðíº«¿;ÿ¤Nìx·DAjšîÂ'XÒÕíj}¹: .'Œc¿°:×ãíÂÈÒ8ô09>Ïš†÷î")´åØÆ“ü¦}·î[éè¹½¦ÿuJŠÇšsË+Òüjk—ýß§9&—ߨ‹kè}mi|î7Ãîlœé{i:oý=Üqe átšÌò¡î¿ýÍùZ�Û%aÙ2ˆ–Ä(bA7!lÃR‚D�Ÿ~¥¼¿¥­³!œ¯=$¼‹„]"lC¸(ÖBEÇ)Aì]´3ÃŒñ­©i|ãó˜H;ú¿*ï÷¶äz~;¯(DSÁÄnRvQØ&8;ÎïI°çε8Ï!Kûx¼wc[ú}XùüèG?rÿqå»§žzÊ=hVyq;a $“}^HNúã‹~A™ZÛ&ЃÀ,´lꤟ?c?›Ä#z¼[œN†ú?Zvõ<ÂD. ¸0_JH/&øÇóžãœ•Ðü4[ïgB%Š¡œHZ&–¯U3¯Ðâ(½Ó`"´«õ³­õyÛ>› óõáÂiÁ›¸ BÏ„ªó÷m$Ô¡»ñåïêHÓÙÒx‡Z7v¼Y­>ÃÂiø<vA.ö옷4®w5ìíq[°‡8ÃÒ w.~|¾ÜÅVȯ]|jd:Õº6îD¾¦m`ny€ÏŸ;Vý]?eàµ>bâÓå;¤U€ Õð`é™2ÑtÜ……æËD©+ÓÒtw24ÌŽŠñÇš÷Ûî0°¶_”¯E€°]6‰-…p«Þ[\ƒÅÏÒ V¿,ÜY19ʼnˆ‹â,µD1˜Z1ÇëD×µ'>NqL£Èú9NwRpæ™5¾)öŒÈ ø8:¯ÊõÞ/Æåã‰e¢£^ìh1®äBA{c&ºKlð ùÇ©_¼H0Šó<®Ìuº=¹}g4Õª¶,Ãn§O¸,E8Ÿ°ÂEkkϺ.)‚6®Á]ÿ9à''Í‚sÑââ‰LÝ„4´-†‡ÊL M}x, w&OšNÌCr\*Ÿ¦—ZsÂñ©ø41áòæv!Ñ.”Åc̯©aÿß™ÏA BÄÜ„¥X¿Ÿ'²¥·j.#4ÂE™«†íâË-ýx¤~^Nˆ$-Pó·z±‹™u «þ¡ÎB˜¸ åê(ÆåʼnhW—züPÅYXr2O/´gýÕüÚôïw^˜º~£Ç[; BØ¥çÛxšß‹gBûsuçä?›¿û@ÓhÜ›š_7‡¨3îJ¤„2 mØ]pùs·2‰íSã°<Û9º0zŽNW¥iå¦~áÎIеû´OË×¢@Ø. ›È–…Û2jë†t½ ]ÓË®Þ`R“‰ÅU{V¸úŒâ*.M0Ï Ð¬-yòVz°`&iœ cQ—œyf/ˆÝÉ%Åa•èokvuDœ`,83±žqVì&Vñ"?'beÿVO¶ß²õÁ¹¼湸>–¥—2m­mikAkŒ•›Y`/¸¯¿þºÃúq騄u#L Ú œÕÒòà¬/ Alå…¤aëøÂ­Ê¢ +¢ÇÙ$o᦭£‹BÏO FŠzlÍÁošõ4 #<íÄÂfÈW&ŠU%æ-Éï¬ç`8ëœúçE‚ù¥ç°l,½U3«Ð°:NëɬŠÖ^C[ý¸ÏZÖÖV­ŒC{vmÜüÿçXŒîºê ãD®”–v¨«°†ÚÕŸ·jæ yŠT ïúˆOÃÒŸˆÓ÷¥/מ½PtÖhŸ§ˆ3”‡Ë«+7´3Õý;z¾šwozÉâм[LÀµcõÏæ²¬ŒÒøB^Ò²¶4C?+LSó,Þ$å™’¯E°]6¡-¿ßêÄíì"‚`›"¤´Õfm/®Ü·‚Œ".<8–,aÐË·lŸÛÆx}¬j¾”‘ÝN/ÉEÌ_ªéÖDdNˆÄ"AšPhå Ç$eKÅq*V?“áŠÚÛ?—›gâS ó\ôRˆŒÓÿ–;ŸæEøb˜Ö.ó—í¾fÃ,ßï¼óNV‰³í¾lÇ„´Õ{é¸ Ë[R¢øR71Áhb+½n¤Ë6‚h~R³°©8´ø?ýÔý‹Â$0A¦·œÝ„¯~ÑÂc$ùŒñkŸ K(„8ÔsüÔ"œ!_Qô'bÕù¾1ë9¸‰Û £`)ŒyñB¡,,«fV¡áD•/ÇÐþ‚55ÜÊvuBkÏq]§ùûvaþ¶þºü-Nßz*ÆÂ-t×|ûzMÛÑ—š¸¥ý®¶ù3VÚ×>ô˜;*ê[¼¾^c¯N ®ý<²ø4/¨¿~>½Mý}_¿Ûy„¥-¶¦vGógy0qíD¥ž³‰â 8¾­þ_feÕ47õûýCÑ۠ǵy?N¸5Ꚏ»(óeç. 4}[».h]Ýøô‹Ò<¶üÚy[ZzÀÞZ6§÷¿­þ£ÿ~~¾ÂvIØä¶xÆV͵-髹3:rn‚ 1ù¿´Óß•Áp_þ>¬ÿt"/y)ÁνdÒ‹ÁÌrÂÙ­ò[²hŠidðñÑg2ìÿy&"“Ûþ“ÖOÛZëç2,Z?:o|&îÊèîv®É[ýŽ>•»."Ÿç íÔ|\A°zq–~äÅâæ¼àOã;øBîúº)Îs"º£`Ö²Þû™Üº{x6¯ â¢vi×ÞžeË`vÌ"k†eíaM>üðÃ3Vï Š~!‘5aeÒFëŒ1ÿÜíÎðà•ûÍ&'ï°«“‘fç=tÑßm¢²ðQkºCþØhýÕpv‘Òžˆ?‰Ç&W·Ý–†;öb!kÛh Õ/œoóúÛÞ-‘»áÜ“ø¦å+°&@´{:BÜ6™Û[ÐlÍîLç Ä ‰DÄF­Çš…Ëò_v«f&¡¡¢êÖOTèiy‡6 3‹b¸Ð Xb³ò¼¯å«íঠ¨à¯Ç8qéýÝít=¶«ùqÆP?^Ð…þêjK·ögyÈ㬜>^Û¡ÿ¸4ôX„ÇúÙÎÅúãçOLÛ§g“Y»M-Äñ!.õwKˆÔ_§hy?„שŽ}MójÂ1=Ö–âX; mÚœ¥}æÅ"ú=Ž ú7i‹éK\z:¸CÁk¥i„—ÂX [ü…2¿®ávÿKvÌÔ|-„í’¸H@\Ž±È ¨sÚÝ–Tø˜þ¦øV¿*,Ûñx[Ó98#Œ³½Yo‡}k]üg—:¤yÉâùJ„mÃt4 {âÆ§üÿOd”ß72o|›²ukÏç)±î¦ç{‘µ8ZbÓ¸L|ÿÌï[›a9Å2NöNãKö.γýp${zIʹ££óî’ X:°ÂEÁ´]–^ôÚ®*ê¬Ý9A¨“L6ÑØ-ÃØölR¿8›tnë§Í~f,M·G«Å‘NŠ qÒôiè°’ëWê§¶‹Có|Ëÿw"P{0,ä+X•\xué$¸(_¶¾1LÆ!=#ˆ£4=ãÂsP¢°ÐßáQçÒY6–US'¡a¢­÷Ö›ÅC­ëe¾¾¹.¤Kê�ÂvI,^@¨ð ¤wýMÙÙÊîà§â«ðV;@„íê èaT¡ÝÕIh¸Ûüza.~â­vÿ½M˜åúe- {ë[º HÕAØ.‰… ›;}ÈɈ»"äÖi°]=¬„í|ز“øv:uv`ž;M",ɰ»ù;!Ua»$–%l'÷8 oKê8„íê èaT¡Ý5Qh@uAØ.‰Å ˆ‚µ¯æôRª?´‡‘�.a»:(zXUhw[(„í’@@@¡]®Ž²ŠÞÖ¾Üy¬W»áÉçÍ·E¾¯Ÿÿf}?³×dÙø§¬óÛt‡­}Lóž>Ÿ¶ePÜñÁœû@dôm–¦pùÃù´.EZþýùídooZÄc–þªAضí3á¡Ô‰þüKz� a»$PEh—«£Œ¢·§—_V1eÛè˜ð{®@8.D´-€iù»Û!áM~vœK¡°UE÷É4yCÅ¢`¬ãN_ýíÝüó>ñn»(ìLÓ)—=?#ìö0±÷î%AØ.­T»HºpVm‡·´­ºö5ë1ÃÆ”½Hœ·.×o‡—’î?¼l¶KU„v¹:Ê(zÛ{Õ‰!pšž¥iVÑŸé„’njoÂ6njßÑcöÝá‘híô¿…˜(´ÿn¯M/ _ä‘NØfA}MÃØ'nãû\ýã~AÓ~6~! {mç5ýoùy¿¿üËìÿ@ó^lûËÚ¹„ôò‚ÁÊâ̼V.>N®š¡žN©)äÃÞâmB¤óš¦¡å`øPÓ[}Y^Òs³ýR­¼6^ÐïšßXþïkùû-ÌÂ>©&\ÃË/Üøåä.RÔïª.‹sÕ´Õbk[¼Ù^¼uƶ½›çBضº+ºcýqÞ;—a»$PEh—«céEo¡gÇ"-µºÛö^Ðak‰A³@†·:9ôƒ½5˲ÛËÕ[_‚uÔíǪ~{»:QéïǶǬ @KטP{¤âÕDëCý?Æ^wú²†ÓïE ïÞeâRó°koa2lç¦Ç[¾í·p\HÏC..S‡»êg¯Y·õõø a«„òˆäÒrbô‘æKËÖ¬¾¡Ì25qn~Óú¢òyÑ6Ê>¼ÑÉ8—ÅaõàÓ¼ u¶&úoiùX¾m‰mô.6L}¡®£e”/—¸§±ÖAW/Fœ%^ x¸íãRgm+½¨°°¡¾ÒÝÒ7íÅ @ó×: p¡_ö¶0«ûpdé„}Í]Ó|9¦ =k[.OÚÜ2ýÝ^à0-Ï)ù|Ú~ËöùL™%mÑâroÓ´÷ô"ÐüÜ…¢ÏC¸ˆ4çúHѱæÒVgozsµ)š®õ©-=6,ú¥õYûìËÄí•›”ÏU@Ø. TÚåêXzÑÛäñÜx¿HغIÔ&sþ7Ã…U? ã>û 1 @ŸÎàgÉñ>|}!í~raþf,,ÓüLìš ¹í…Íûúû-ðÂÄhiä…mš^W ˆ‚hÉNÎÕ&ê¼Å¶0-óóeÒ bkâÜ‚x°hBžL°ÜÐc~¡»7–¥çL\ö[’æU°øVÍÌBÃêÃÄ‘·´Û€+ýlKKLÝÔ6rF�Y눳vkÙ™µÜ½þÕ.T€¥K:Šn•»‹5 ç.€ü1î"Î.V´ÎÌÿ±Š¸*@­©Ä|ég÷ò “ÞÙpõgñ¨h[é1ÓÒsâ΄¡†êw;‹kÚíý@a>‹ÊLwåd嫟íw+wa¨mÒ–0YÛ ã¥/zCçŽ iÛù»|jžÓò6Üy©¿{“\¨c«_W¡/ 4ßÛb´˜Vªíru,½èu²™×b_ß™â'Ú`y jtÛIJe„0!mg±MÃXÜ~,²Øº‰ñM[»©iDë”›gùžUØÞÑïî•~"=#lm×28³Æ¶(-óË [ËëĹYÜzÜakþV†fõÕó e–gâ2¬¬Zf±uolóíÍ0«§++C=i/ pí&çÛoW&Ú¬=Åã4Œ]hÄå7úÝDZ¼Mîë¿§"Ñ„\jYwøøƒUÒê2›æc™£ß ÓÓö„qh_Ñʪ'òœb¿å³ Ì,Îu û@Åï@ý]›ûŸ“啞ÕGzngŽÕ¼¥i»úKú@ÀÎ+ö3 è·•…?wKÛ.>¸“ÅsU¶KU„v¹:Ê(z›”¢€Óô,Mn­ÿîœ~?0K‹Nhö=/îòkl t*£ŸÎ–á©óû¥ ]wkñ𯫓•ù÷4ž4Œ‰Ôð>ùµ±>ßñV®†Q¯8á»|kxËÛÖß]zê^™›Æõ¥~–_w«÷»luñxWô Þ˜Vr&†í¿•å¯,_Z£¿Ÿ<·9„˜û®yøÏÞ^¿û–þ7pÊ^Ýu„seiåÔÆ5¶ÖÆ¢àÓ2± k Näi¹„[ßyÜ…‚–«† <Ã~ŸhgúÛ–Š+»ÍÚ\vÁšê––¨°&‚õÑù[<–/ÆÒ })Ü}°ÏÇLKOºãU(Ú:ìôx‡¥òœâãË糨Ì,~ׯ´\íÛ#=ÇC §åî·4ô˜T€»ÏJѱÇv^>òc‰adžúqeŽIDýHÏ÷̹]„í’@@@¡]®Ž2ŠÞ‰!¤ör“Ü"0Ñ‘Ÿ<aIèoB7ˆŸ«P….?«Ð0ä,Œ*ªlmìT‘—ÃÚ¦ °¸ÖÓ„šÞ¾1>Þ.8ì X§^´9±«áLÌÙç°lÅY õ³ FFÃï} rGE¢³Jê±wTع0^¤ÙšV»à ÎòÔ½­þ_掙–žÏS**_Ó<þ{AžSÎÉg¾Ìbùêg»xµWïkÜ.œz†S~[ãýR+:ö¡þ¶nçÿHÝ»ú»=8éÏ?’Ze5N[Z—]9i\ýüy]„í’@@@¡]®Ž²ŠÞ&·­ÿ¾R‹©Íy°\ÌZ]¸LäT¡ËÏ*4ÜzMJ–çhM÷‚îŒ`JjÙúÏÁû*ÔT,þ• ;³’ºv«q†å/î»:³Rº¥*J¸‹`áz»™x›ð×øì!6ÃÒ²øošÓ€f¥´ãv¯nCã©Ð31÷š s™Ç(…é™Ôï©%Ó„ýîÉò›ÏsÊ™|N)³¢òuc÷= oBµ«õå’ÓÏ×5œ]ÖMrþýϳ<»óÏå1ˆþ|ù&l§-1¹,Û%a‡«¢ƒÕ`Eí­š& X�ªfû[g…ðUAØ�@eùúk‘ÿã ‘æ= v l!Ŭěo‰Ü~W¦®›¾ [��¨,ßÿ÷"OüŸ™åÑD.Ô„-¤„Û wyX�[��¨$f¥ý¿+òÏ»úÿ÷Eþäßù V l¡L¶��P92+íïýß:Qý©È¾–}Ÿ¾$á ºëfMÖºr«[(„-��TŠo¾ù×/‰üîó™¨ nýßdâvú’/n¶•b¡v8û§Fl×�õ·'ëÝÎ�S@Ø�@¥ØùÿEžü‡"ßû“ÂÖÜùK¶Ud.¡á÷y {&›Ðu/½ÐÏnÛ¹.[ÎÁù l� 2Ü¿ŸYìžù·“‚6¸ó—$ l«È<BýþySâkuSì%ñÍd�S@Ø�@exæDþÑ “b6ïþ‰m _8Ò#l«È<B#¾1Ë¿¤ÀêÙ½ÍßêùÍþýËÂËCLð~aÇj˜‘†=ÚË^(ÐÑ ¡×ô¿-m°—¸øT<ÇW›óBÚ½îuЍ†ú€°�€Êðáï„P$jmy“ÿXä?½é˜�a[Eæî«þYn[(/TèÔÙ}K;9ÉÞxå©u¯¢UÁ{S…­ Óý"×õ8ÛN*_[ÚàâPÿÞ_éoÞYÕßÖƒm„mÝAØ�@e°Çl íïü³IAœYk<|èˆxQ«*ÆÜzo´Ð× Ãå™YhøõµÎB«ØÒg½ÕÏ&PÃç(fí3/LÓײ¦Kœ8öVØ rµiŒñ–`KóôPäƒ;ÙqP_¶��P)l× ¶ B*jÿàO2[‡ õaV¡áÖ׆]¼x Ö[«á³³¼úpa³ÿø+/Žƒ6Çîóu‘ÃT¹zakbw¤bxѯw…òAØ�@åøä“LÄš˜5QkK~GÈ;ïú�Pf¶¾6ìz–ôîè÷﫪þ¸£a®«È5}×亳àzÑ{ al=îÄ’³òæpË4[{ õa ��•ÄD¬‰Yµ¶§íï?“-U€z1«ÐpU{Øëe‘/ö2ëmW5#j©¶mo×/;ÈYu~ý­…Û¹'ò¾¶Ÿ ®{*ZM(KnŠ Ût)Ô„-��T±Ïþa¶w-KêK¥…†ªÙ¾ j– 4„-��T–ðj]Û-êI…ƉYpß¹ýn²>Â��* [¨/Uá¡3Û šÂ��* ¶Þ4Qh@uAØ�@¥AØÖ„-” Â��* Â¶Þ l¡L¶��Pi¶õa e‚°�€Jƒ°­7[(„-��T„m½AØB™ l� Ò lë ÂÊa ��•a[o¶P&[��¨4Ûzƒ°…2AØ�@¥AØÖ„-” Â��* ¶ޘÐÀáÊtMƒ!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4„-�´†@�€°€6Ã�Ð ¶�Ðf�Â�Ú C �@ƒ@Ø@›a�h[�h3 �� a �m†!� A l Í0�4ˆéÂöTNöoI·³&k?áÑwÞÿN¿’Áö_ÉèäÔ{��T„-�@ƒ˜*lO÷¥¿ù¬t#n='­¡ûŸŠx<êɺF¶æÜs²5üµÿ� º l�jÊýû"þ‹'/l¿þZäÞ=ýp<”­Ž Ô¿“QoCÖ6ûrp®!Ö[x×»²³w¤ß��ªÂ� ¦<|˜ ÙçŸyûm‘>ʾÛûþÊ+Ùw'~Ò]ÛÞè(¶ë==Îâ)æ ºòVï]Ù¼0,�@5@Ø�Ô˜ f§9¸g±M„í…[�€ú¡Ã��Ô•o¾É,¶E¢Ö\\ªàÖØ®Ëfÿ®ìΰÆ� Žè°��uf08+hÍEk­#¿+ÂÃÌrÛÈ÷ Ø =Š~Gþ(�€:¡C��Ô™iVÛüƒe��Ma �Ð�òVÛIk-�@;@Ø�4€¼Õk-�´„-�@C°ýj±Ö@›AØ�4Û»k-�´„í„Ûz¸ö8hÙ«`Ûèþ´À¯Ê¡¨ìqÍwu‘àjT—°�¨ïæP§®õ]”uû@Ø6úo» ¾›“o» ¾Ëƒ²nÛAÿmÔws`òmÔwyPÖíaÛ è¿íbZ}zÙokúùDä(ìÚÕÏ> T &ßvq¹ú~¬}ù†;vͽyí±÷o0'ŸK¿û¬žï¦låÔ{Oç;9¼/;£Gþ;}« lý·]œWß±öûƶŠY F¨kÁ<¸\h¹®»Asúk\O²×¼Z˜sÃMÂäÛ.._ßAܶAØ~+ýkÚ‡nËþp[:mŸ#m¤·îûºÎÖPŽÕ›¾Õ>êTç´Î  ÿ¶‹óê{ð–ŠÚNæú@da» ¼¸=W°Îf&ßvqùún“°ýµ ·žsõá¨'ëkפð­ÿm λ!Ý{î‚Þ oµ„mƒ ÿ¶‹óê{Ð9©¸Õ0k*p»×¶‹a Wa; Y?Zïä['l7¤gk«¦’•Mç­÷åýÍÍ–¾Õ>¶ ‚þÛ.Ϋo¶&ªöû" ·¶Ž°] [¸:ÛYÈ,¶ca;ƒÅ¶�úVû@Ø6úo»8¯¾ƒ°µ§-†Ûa» ¶pu¶³àרnÞ”½ÝÖØN¾Õ>¶ ‚þÛ.¦ÕwØa]ÿ»©ïD¤a»æ¶›}9°yøôHöv>;ç&ßvq¹ú¢Ö? ¥¼ñ}:¿+‚{@l]ºƒ/²‡4µ>pÖÜéBŸ¾Õ>êTç´Î  ÿ¶ ê»l¼`5Q¡n|‹Ô&ÕG~¢íË Ý!¸ ¬MÚõ]”uû¨SÓ:/€þÛ.¨ïæÀäÛ.¨ïò ¬Û¶AT¡.†Ù“øÝ¾»^;ê”ÆëæÀäÛ.¨ïòhUYŸÊp{SÖ:×¥¿o»ø¶„mƒ(µ.Uõ "½®È¦ŠÀp“5¬ï¬ëÃJuÊ›Æë:pp òÍ7þËœÔ{ò=–ƒa_¶6:î<Ö:]éÝþ…ŒŽ¾ÓyöWr÷ËìIöÇnÙFn‰Fp[ÒdÇ3[uÁΡˆ¯¿þZ>|è¿Á"˜VÖUãôhWÞíÝu/•ó w¤7üµÿ~ÉK*l©T6…ÊÉÁ]ÜîIwýràM£8Ï«§.un0_@iu©ý¢¿™¥gNûO‹myÌRß6GþèG—\p1&hÿäßeõñûψܻ瘃: Ä“Ë~ÿºt4ÿîeÏ S¡ƒmíG&@sé龎^œú‡ëNöäÖÖfæWøêÔ9Ó¨ùú61ûgög¾ Öäã?Ö>K§ÆvºW^yEûÚÅ-_ÖUäôèžìt7ekBÀª¨Ýûñ|b´Àb;qA9ÇN-QœçjP‡:Ôuä/2ëR/ µ³hšÑNç=¡TΫï h-Œý‡Åcºã/½…ÿwŸùÃ×DþÉFöýOo˜õÍœ: Äe«c“¦=©þÀ{ö0ÝËg'Ò(l;²Ùß ØÓ¯dpÝž~7¡ú¦ Ëí¼iÔ€´¾MĺóNÜO<!/¾ø¢Ü¿߇‚¶¡¬.¸¦º¨xýÄ߉Höé==’Ñ­­ìÂ-ì®riÂk¾s}îÒLÉs…¨vORÓ‘¿<–Z—ÚF·2k¦^ ÊîÍ,½Î–ÙN2†"ƒ¾†É‰]ó¿­`݇ VÑ õsVQý3Ðß,¾Ôú›r¤þ}f"\Á’ˆƒ]‘®æ!ÆïѱBt¬ÈâPÒ×ã>PVLË¿aÇÞ±ß|úÏAùùX–<©  î2D8ŸO>ù½*ò;ë"ð'"Ïý騙Àý–•ý‡ÿu6kyâ ŽÒÕ¼Û¤¹ÑÛ›ìo}y5ÞõÄðÏå,=§ª_·UöÌ<o5ÀêÛÄÙK/½$O>ù¤û>ͽñÆ,OÈ‘ Ûàžþy g,ÝöÛʈÕÚîçžÓü„¶Ÿ½€bâ<ìîÃ]!7vöZác»K1¼£siWçRýî·Bë\È¡u–“ƒnë<¹éÃ{âÅä«ÒÓòé¹íÓ4?Û»ñµÃÖÿâr…NØ:mÜ'ÇñMÉsbQ>ÕÉúŽNÖN”ôÙ2°|Õ…šŽüå±´ºÔ6ë6ù×ø·Uü=>Pñ¦Ÿí{WÅœצªKÅ®ÎIÑßß± Ò ×TZǨPNÃŒ»ˆÒV!:Tqâs{´êoé’ˆ¾æ+¾iË\nìÐD­ ÍÁ¡~Ñžfbú¢ü'û™@5AoÈ¡ciDÁ:g>…Å(´ÁÙ­rX V–¶ìàü®¶Á3)hóî÷ÿ_‘'ÿ¡È¿ú×"Þê4OZZמ•nÿóñ$öø þõñZ°| ½e:^¨Ì•Fõ1‘šË|Žå cŠ„mpyk~+!, X{Yz£‡r|·'›/ä­œa Áis!lº‡± ãƒìn…}·ýŒ¿¯­Í_4ÚÅߦù‡å '{ÒsÖÖq¸‰å ÑBDlÞÒ;%Ïn=ðt~÷ˉÂ9¬`¿å•Õù%¨éÈ_ËªË ú¢àSÙÕïæg".à„£ú±¨€ua÷ÔÝÒøTô…ø~¥ßo©p a&ŽÕãDm£ú=ˆà`±M—D vÕ_?TñíD¥ŠÍx G;VOfz¬ÌðSÿY)Ê¿ŽMr]ãŽyPŽ âŸ9 Äòzž  ÎÄØUœY'užh½ûodåiËþ¹¶×"1›wßû"ÿè…ì¸ÿëÿ)Ž×ÜÚÚG¾Vë‡=@²í&J›UxîÜK,A)‰µ'Nžc¦ [eö4ªÝ2ê©§üyÌç~ã7~Cžyæ¹y󦶙A㜕 ÖYÜ':(•Qê‚ÀµÏåóÞtqÁÚÛwÚöã2›Tì&€ý$,)¸&7w¢ó’—XDc\éË*Ь®E´`¹B´ônèœ/%§ä9ˆÚgåúà+=>œ?Û‹¨ONWÄ2ê2 ;[ûEæ§bÇYlSÁ¦ÿƒÕ2»Ö“¶¼0ÜVAkÏ b7ôÿŽÆyÂäŽ Ò¬¸“e[*BGÑ‹Qç×ѸÞ×Ïæ„x|ó–'ø[^´ïNR”Ë«Òér‚¦³8çüfÉÇ¢°¸ß~ÛçeNgÇáæsßûYÙÙ:Z¬EB¶È™e׎{æÙâxÍ­­éÕP™žS&³øÄvÞÒcø×§úãÏþ>cg8úüÏïLØþöoÿ¶¼þúëÚfÞn¥+*—óœ‰[û_:Qü«h‘ÀTßhMMï`ŒûBá’‚Íw¥·õÖ™í¼b\b8\L¦VÜ l“5ëQÄŽó{2ÚÉ–ä—å9œ¯¥­“u\~¡“õÁI¾'/Ÿ•Ôù%©ONWÄ2ê2ЏDÄF,¸J¡ØU¢¿:'Äb “Þ²×8ÒÛûÚG¤w[JÒD²-Up•ÉqAˆGôw½(ñ ¬Q”ÿ3ywžãøMp‡S+ Ââ6ì!¥ó¬¶,Ï[¶^ù™?È–<óo‹…lp¶ööÉœ­Å5«÷yÔi vÿJwÇ·;ñ§NpÖœŒ8!æn•:âÄj¦xìiÔÛÒ+Ëÿ|î‡?ü!K<fµ-*£àÒåö½\’‹´(þ‚ÀL€¼@Àæû‰×Þ”Þ³Š¦„¸r…1®ÄŠEwb‰ ~!¿iì¦gå99_çž•nï§rG'ëÉ<–‡å£.Ôlä/ŸeÔelQÄ&â0lAìæ­“yÅ¢ Ëð€V‘PN—;Ä¥y4pÉ!/Eñ§ØC`Û>ÿ©0-Ê\œî4þ(Œ/‘E`é¥L[– s�,ÓöP˜•­=$–_–.?xçÝÙ.,ê4§·äÆ«jr ub7Š&û@bŠ·2/“F}°r°ÛéO?ýô¹ÙoNÈÁ˜iÂ6ì^�˜¹Œ_½Å_“éÅØ”5¬…a“v¿±#£¼4 ÑÉeg­¸I<E~NÄËþ­žl¿eëƒówOŠò<>ßü¢UQ~_žzü+`áu©-4¬K ëNÃŽæ7бvh¢S[w¡u2ñâ´HÄñœ׬&Ç:4ÎáÌÒ«ý_;£†I„g£"YÜÊŽ1N4>;‡(b§ä? [Í_¸bëpõ<B|3çcÁXüEûüóY˜ê»|³Ò˜Öû×Úr´ó<0–R§Øz{¥`‚j•jÒŸâƒNò¤ö%Ò¨¡¾M€½óÎ;Y¹äœ­ÅµÆà,ya{Þ–_ö{©œYr3^oë¤zô¥ŒtVˆ6£‰È´°Q%NÁžÂå1®ä˜xÇÃh{äBMÆý™UÔÞþ¹Ü<Çj<‘çx¾ya«ç=ü¥|ÊR„s©ÓÈ¿^—ÚÓÛîÇ:‘ïê'â:ã5³¦Ü‚ÅÒ¬˜£»^ôÿÄj„aé±ÿ]®$þqɂΆ·T †‡FŠDrˆßò»¯i¸-¹,.;{YÜAØFÁœæ!É–'Ä—7ìŒó`ÌœcñŸ‡-*°u̇%¶þ2Aku2ë_)uˆÇáZòÂÅo?äüÃDŽð`I6ùoaËÁîŽtÝD™ lÞ4ê…å?Å„šYfƒõ–-¾Î'[[w{‘5;_ÖK'^Äe‚òñÑg2ìÿy&V;¯ÊõÞ/\»£uÞ9ÐygòVÿ££O安àgÑò›I‹ëa8&ö!/Nã. ùEÒüÚõ(`oè¼ü…ÎËÙ²‚â<ûj¼ÕÉzïÖOånè·%Sz_:ü+auÄœ=µ«ãG{û¸êÿ¸<!žÑ’,ž‰€ŒkVñêßÛu_#G*Dm›- æwM#ˆî`M6Â[–¿°÷ôKÌû*6Ud:¡ªéÝ Ú˜’ã@ãvǨ³2¤ÇsäcÑXü³`"k^¡ó."æy)CJbÝd èD¿Ûû2îYiÛ–ôïŒÆ}(lù3Åuº=¹]ô*ÝyÒ¨!vyÌzkËx)ÃŘè¿HЊÊz¹Œ/ä¬}F_Ƀ°C@ò0ÕéáÀïl°©óΞoωuWÛù­¼ ŒËR’¥<É1îÂqø3¿o­¥ò“[û·ÓÓ| ö³96Zv?¥8ÏêïÞB–lÉ×ûåJ ”_ç—§F#ÿj¨Q] ¾›Cb¸:ÔwyPÖíaÛ è¿í‚únL¾í‚ú.ʺ} lý·]PßÍÉ·]PßåAY·„mƒ ÿ¶ ê»90ù¶ ê»<(ëö°môßvA}7&ßvA}—eÝ>¶ ‚þÛ.¨ïæÀäÛ.¨ïò ¬Û¶AÐÛõݘ|Ûõ]”uû@Ø6úo» ¾›“o» ¾Ëƒ²nÛAÿmÔws`òmÔwyPÖíaÛ è¿í‚únL¾í‚ú.ʺ} lý·]PßÍÉ·]PßåAY·„mƒ ÿ¶ ê»90ù¶ ê»<(ëö°môßvA}7&ßvA}—eÝ>¶ ‚þ[?üáåþèd0ÈÁÁ÷-ê»9Ø@Œk—ƒr ¬ÛGêœÖyV—õtÕý¹ºW¿ª»ÿO]~²z]Ý@Ý}uߨ+:n± ®|øá‡Ú†×dccC¾ùæï °XÎŽÓ¸6¸ºÀ4Þ0>|(;;;µlŒ÷ï›xìHy÷ÇüÇ2ý�°»¡Ÿ<ñÄòñÇû_��Ú¶!˜u&Xkž|òÉ8Á™« vi¾§¹×_Ý�k×®é+v¡ �Ð&¶5ÇÄ Yfžzê©3‚6¸:a·P‹Î!ï�`ŒEýÿ7Þð!��Ú ¡ÆÜ»wOž~úiwÛ1?¡¥n:åhpÇ»!ƒ£ÇÞuØdùü¹U=\P5¾þúëÂ>œ��ma[cì–|ÑD–wçÄm5„­MÂÓ,Ï©³Îç ºëYøî@޼/@Óøþ÷¿¦¤Î.~y �ÚÂ¶ÆØmÆ¢‰,ïΧZÂö"ëSpñá8/n¶ÐP>ùä“Âþ‘:»£cëï�Ú�¶Ƙղh"Ë;‹Ó©–°5ÌÂTt©³0ƒ°…fóÌ3Ïö"�Ðíj̬Âöüõ¨Õ¶³Z¢ÏìÂjÈÑ@º®¯KwðÀ{3í¡±¼{çwü��Ía[cšj±µüÚ­Ót q~òþÍßüMwö|¶PSœ¸½XØEÛ|¥ÎvLaÛ/�h Ûsž°5!øâ‹/^ðDtµþ¸õžŒª¡m'0‹³‰XÛ1ÁÎ)ä÷½÷Þó!¦°…š2‡°M_ÌPä.¾��hÛc¶ÓéLLbö ˆYhì·¦> mçõî»ïÊ÷¾÷½s¬Ñ^ÔúrYïTÆÔ„9„­aw8Š–$ð2�hÛ“Zj~ë·~Ë Z[s׆­}ìmÒ~þùçgXk P3æ¶Ö^zé¥ Qk޾�ma[cRak›6ÚÄ-4–9…­‘ŽvçÆ.r�Ú¶ƄWé~ùå—Þ§} n¡q8Q¬®Òø.Æ.pí8{5uÛ.t� „mM±§œMÌÙZÚ¶Ä­9&sh3ÖþMØšõ�  lkÊ~ô#yå•WrÄ-@† [�€¶ÂXCÂZºû÷ï{0·�[�h7Œ€5äí·ßvÎb‚Ö–h n¡­ l Í0Ö {á‚M\<(5+Ä-´„-�´FÀa"ÍÖÕÚúZ8Ä-´„-�´FÀa; ˜XC¨ÍF·¿z 9 l Í0Ö¶÷ºAÜb冶€°€6ÃXÌêhË`~·Ð&¶�Ðfk@ØÞ‹M×/‰[+CÄ-4„-�´FÀ`@±½×Õ ;J n¡É l Í0Vœ Æl-\Ä-4„-�´FÀ c»ØÚÐ>úÈûÀ"â–ñ ‰ l Í0V¶÷ZAÜÚ€&°€6ÃXQléMPŸ|ò‰÷Eƒ¸…&‚°€6ÃXQìa1¶÷Z>ˆ[h[�h3Œ€„í½ÊÅ$CÜBS@Ø@›a¬ f©å5°å‚¸…¦€°€6ÃX1lM­MLlïU>AÜÞ¿ßû�Ô„-�´FÀ ¶÷bªÕaâÖêÀÞTPG¶�Ðf+„íWËö^«q ua �m†°"„í½XãY ·PW¶�Ðf+‚mïõúë¯ûoP¬>·P7¶�Ðf+€=¬d“Û{U [‚¸…º°€6ÃXl{/»õ Õq ua �m†pÅØ&šØÞ«ºqkŽû ê l Í0®I&jÙÞ«ú n¡. l Í0®[~`ËJõ�q u�a �m†pEØzM›€ØÞ«^˜ 5+;⪠Â�Ú #àŠ°í½ÌAý°‹Ä-T„-�´FÀ`VZ›|ØÞ«¾ n¡ª l Í0–Œ‰ ¶÷jAÜby‡*°€6ÃX2a{/¬|Í ˆ[.T * l Í0–ˆíUk"ˆí½šâªÂ�Ú #`‰„í½ y n¡* l Í0–„=(fÎýû÷½4ðP âV Â�Ú #`I°½W;@ܪAØ@›a, vìv54ŸPß}ô‘÷(„-�´FÀ%c»ØÚKDN»âÖþ” Â�Ú #à’a{¯ö‚¸…U€°€6øDl{/›d>ùäïmq eƒ°€6øDÞ{ï=¶÷· q e°€6ø$Âö^öÀvI@ÜB l Í0.‰×_í½`Ä-”Â�Ú #à±u´ylM­M.E¿A»1qk²õ, „-�´FÀ+b“ˆ‰• bÃö^¶@ˆ[X&[�h3Œ€WÄ&sAÌ~øá‡—ßÞëäséwŸÕø6e{x(§Þû<NïÈöΞœøïP·°,¶�Ðf¯H¶©ÛÙÙñ¿Î÷rп&kÝÛ²?Ü–Ng[†ÇçIÛõ6Æé^ª†­ÁFܶ€¹.XËÑà†ï×7dpôØûÏŽ �ÐV¯@ا¶ÈÙ6_÷ïß÷!gá×2ÜzN:[Cy8êÉúÚ5é|ë›Æ±ì÷¯Ëz÷Dzwô÷ƒ+1—y ƒîzVçÝyßY1«¾=dˆ¸m2ó^°AÜ"l�æ…ð „-½Îsf•›M´d"i½7’o°ÝÞè‚GévÞ”Þû¯ºãæŸa’ˈ/n/!l‹Ä­ý>ßT‹Ë\°"l�. #à˜EØÚKf[o›M€ca;Ë‹å2"äjÂÖâÖ¬üi[Iý¡®\â‚uakãKѸ“w´!�h Û+pž°5 Ü|–6o-ܼ){»³Z a±\F„\]ØAÄš³Ï¶ÌÅ>‡öÄÖquå2¬³ [³ò§ãÎ4ÇÞÉ�жW`š°ÝJ›#¿¾óñHzëëÒ|‘=(¦âé›/w‹.â2"d1ÂÖâöûßÿ¾<÷ÜsmÊöF†:r™ Öù–"„LsXk M l¯€YAÒ d~+-T‹ËˆÅ [ãoÿöoåÉ'ŸœhWæx‹]™á‚õ(úýµ¾î×{2º@Ûž÷«9¬µ�Ð&¶WÀö­ “Ç¥­´P-沚ÿ]&j}0KïUìèvÀ.ŽB|yGû‚iL³Úb­€¶°½&l±ÒÂ"È[ÿ‹–7˜Æ4«-m�ÚF%„mÑ€Œkžƒb쨨¼òάr�ÓÈ[m±Ö@©Œ°…fCŸ=ÝþÑG91’Š“ÔÙÝ€iä­¶Xk  l¡¨ãÙ±µ¶f}+Zok¿L#Xm±Ö@[AØB)PǗÖ)¤"׬º�Ó° ­­Øú�€6‚°…R¨J[>p‹wM¡èÜpWw��e°…R¨JÓÖO“Ê”ö±x(S�(“JŒ8 |ͧ*uL[[<M*SÚÇâ¡L L*1â0ð5ŸªÔ1mmñ4©Li‹‡2€2©ÄˆÃÀ×|ªRÇ´µÅÓ¤2¥},Ê�ʤ#_ó©JÓÖO“Ê”ö±x(S�(“JŒ8 |ͧ*uL[[<M*SÚÇâ¡L L*1â´bà;=”áö¦¬u®KÿØ{¶‡ªÔ1“ìâiR™Ò>e �eR‰§êßéÑ®¼Û»+rÔ„ê»ÈðøÔ{\Àã‘ôÖ³=×{#yì<Oåäà® n÷¤»¾={\3P˜çR•:f’]<M*SÚÇâ¡L L*1âTyà;=º';ÝMÙþÚû(§G²·Ó•õ­áì±ÀbûxÔ“u=w;ÿµî@ŽœïÕ)ÌóŠ©J3É.ž&•)ícñP¦�P&•qª9ð}'G£ŸÈÖFGówMúß:ßÓ£=¹µ¥u­#›ý}¹šõDF½Åeç¹ T¥ŽW›c9Þ‘Û½®t6ûrp™ Ÿ÷NA 4I¸Ð>O“Ú�TŸJŒ8+øNdtkK6TTnôîÈ`ë9ÍÇsÞÊùkºïãWB®uÞ–Û·ß–NêÃ'$gÅ=ù\úÝg¥s} ‡6¿œÈpp[ú*ˆ;©•÷t_ú›&B_•Þ` ==ÆDîÆö®Åy)Y®Ð¹!ƒ#[Äp*ÇÃm——q|Eyž\Þpz4’;};gûÝÎ{O¥u9X~ªÀêòñ­ô¯Åº/G™ƒËÜ)(ªÔí" },ž&µ�¨>•qJøÂ²€µ—¥7z(Çw{²ùBÞÊù@ÝuõK­©åhpÃåw-ZT?'tdÔ{9û¾Þ“Ñ·ãµµc!œqzЗMóËNö¤ç¬­ãpËbšAÄæ-½Ey6¾“£áTÐnÊöðPç¿tCþæž=/‡å¿ ¬4qõd;˜…ÅÞ)X,U©ÛE@ûX<Mj�P}*1â”;ð}'‡ƒ7'¬Q<¦·ÿއ²Õ±I&»ÓeXRpMnîþD®»ã‹hŒ+X\"«k‘0-X®-½*Ì›kažƒ¨}V®¾ÒãÃùc±]>ÉÒΛr{÷ÇþB&ÿ `n£'»ƒ­¤]ŒÛ‰å=s©ð9ïØr¨JÝ.‚æµTôê…üîϲ1âLË£Ií�ªO%FœR¾(þÂà_$0Õ7ZS“ ÊœE%øo¾+½­·ÎlçãšX7DrW¶ëÒ<ȼΤy*'£l9A~©AQžÃùZÚ“å[98)gb3ª2¹•—#î‚Â/-yêQëbâAÁ$œ]hÿµô6óOEw ŒYŽ]>U©ÛEЬö¡cÂÑ®l;A¼#£“ÿ!w{×ä…‚pˤIí�ªO%Fœò¾d[A`&b2 w¡Ø5¼xì¼ö¦ôî˜U4%Ä•Q°&VÜ(ºKlð iÆãÔob,Êó亽µµg¥Ûû©Ü•&z–~('EÅËDN™…?„‹·£/¾S0۱˧*u»šÔ>äô+\·uûá¢xÑ«ÎF“Ú�TŸJŒ8å |aòHÄ_“MÉ-¿ kGâï¬"¹é" ÑÉeg­¸Eñ'~NÄËþ­žl¿U´–®(Ïãó½ÔÃ( ¤*“[)ùˆ‚"ig±µ³‚örÆjoÌxl T¥nAsÚG2vİ!¾4ÜòiRû�€êS‰§´/Z;‚ø¯·uR=úRF:}D±›ŠÑñ$3)ƒ±¤ØÊ&ä˜øà˜=ÐöÈ…šŒû39ª¨½ýs¹yfSŠòÏ7Ÿg=ïá/åS–",…Xç‰H)jãp¡.ó2W9¶ ªR·‹ )íc,v DñÄZÿåÓ¤ö�Õ§#Ni_ì3Aùøè3öÿ<›(:¯ÊõÞ/Üö\Å£CÝ=“ «È¡~•­Q-´´&'¢Ã£Oå® ç¼å$îÒð¬tûŸèJ„©å9[c—LN_È]¿¬ 0ωÖdÛèÖOåîÑwY%Q•ÉmùùHÖ;F¡ñ(î”EFa¸¢‹¤¤ EKþ¬Ç–ÃòË´<–.e´%ì|R$Š'î8-Ÿ&µ�¨>•qÊøÂƒ:t{2}%ÂÉÃTq]ÛÚ¦lÝÚËö”·-ìOdä…a”…“E²–ncKnŵ­¶ïíÏü¾µ–NÈOníkLSó1ØÏo´ì&~JažÍß½…,¤cklYêCcªLnËÏGXǨåí­jñ·Žû3ùtø™¶€$œo;ã:4«û¡Œ¾œ¸8[Ýg=¶–_¦å±üs)£}¨,ŽÛú îdùú^ ?:ø¬´q`ùe �0¦#_ó©J/?É{&HŽäîn_Þr‚D/,¶û2<´‹¢\¸ÇG*hÆá^»Þ“;®ðNÁÿšíØ’¨JÝ.‚f´Ódƒ Ûc9útWúoe¸ø!×åѤö�Õ§#_ó©J—‘hët¥·{ 'Áʾ±-·%c"Ü`$‡¼E. 7íNÁ,Ç–D“úoSÚ‡¤Ë›zœ½ûSŒï�P&•qøšOU꘶¶xšT¦´ÅC™@™TbÄaàk>U©cÚÚâiR™Ò>e �eR‰‡¯ùT¥Žik‹§IeJûX<”)�”I%F¾æS•:¦­-ž&•)ícñP¦�P&•qøšOU꘶¶xšT¦´ÅC™@™TbÄaàk>U©cÚÚâiR™Ò>e �eR‰‡¯ùT¥Žik‹§IeJûX<”)�”I%F¾æS•:¦­-ž&•)ícñP¦�P&•qøšOU꘶¶xšT¦´ÅC™@™Tbı×|WŠò…»ºk E熻º�( F����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h[����h�"ÿè%ÜGxК����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7g.png��������������������������������������������0000664�0000000�0000000�00000030527�15030617045�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ü�����‡,���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��0ìIDATx^íÁ‹Ûȶÿû¯xàµwì²úeå•7Ùd3›»Ðo²èÅ@/Y d!0 †×`0ùA`LÃ#04ˆáBŒáòÁ.Ãû…Æ\BhÌùUIURIVgZåSnWõ÷†Ä-—T:§Î·NUIuB�Ü;®h1Pçä„NNPÿJËÍVý ��Ü�Á�������8�\���à�@p��€�Á�������8�\���à�@pN²g\ñññÃISùøàs›Oˆ8­UÓMÄç¸?\p–·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­Žã¦}¥õüõNP4ù@õ-Ø…Ó^^5˜íŠæ£>t4Y\©/ï'Üv 5p·„ê7Nku'7m»¦ôÝ {ìü''ýí?ówcJ¯åAB„Ó_(™ ©×Ñüj›ýô¾Ãi¯ÃÙ^v¨ÆÏÿTÿÏÙ®Ïéy|A·’Ïë”â®ðqÍÝ8¥ÌEÄ/—ów4‹#êç·+ç´º®;€Ûn|åmi³œÓd(:F¢ÌÙŽßлtMÛí'º¸øq„4eLÝìï ŸÞ&É/”®¿æEÖÙ,i.c‚:¾Å4{—Òzû•VïéŸCÞÿqZ«Cß´íú=£â¼¢1ŽßÓúzA“¾l<]ú?E†»¥«ùˆ:ºQ1Sßá´×al/ÄöòEÝj§)÷ƒ> k"|#;î†Ò¸—ÕAúN”|ÊÛ“Ö×upÛ§<!¶‹)EaNDãK!²™�'ªcý°zO·²Ý«wBKáÛõ%M ±îÓh¾Êº`ó&fìÜ,(Q¿Aœ8,Ü~x,8­ÕAoZÑ`:Ô‹/ó¡ãÍ%Ž'§Ÿ³CJ®i<ÇòÓà´—sÛË‘Œ©ÊFTPÍG.^« üM–_²C­(²Þ=ËÉ`¼.ÇpÛ§¼?i>|˜•u%´VßfBœŽ…<¥dKd‚Û¡þdQ ëö#%#D9SJV:Ó5;áµ²²"Dqâ 8w„ÓZæ¦}¡å仼Ýã͇w‡Žun~õ!éÞ˜ÒM¥/,œöÚ·¬2#yLñù[fÙ²áÕ<ÿao™ü_šé ¬?Ùñ×"º d«Lø3-&êè€+‡“Y6Tif1Ûå„ú²ŒþKJ~çÙU=3Ê~û†âèQõµþfˆEåºJŸÚ®SzW eÆ;@^'<å}¢$êæ÷®Þ¥¸>ß)zÓe÷²–ùV„ÕcÝ—ß «tÐe|ù^|‡Õ‡„Û§µ:ÜM+‡�Ë i Ö†„tP,2£9¿6êu©7:§õV7òÞ½ilœöÚ§¬Ü¢Ã“×ÑEü=’v4íUU³Ó¤mfÓâ8éç´Ê2"ùa×ßæÅÜm58—¸N4¥ÅFˆ¶þKcÞ·¼# W|«áº2äü³\Ч„\_k±Öàðìc·&xÊûJ«ä´œÊl¢ïâ†~Ÿ§Æp¯aƒZÇFbÎñ–óõâW«„ºW[<wýûýw­àn?<œÖê`7í¦!¤"»¨ç®z¬òAB+ñeÑ�‘áZa]V1ì§PwœL{Ý lEæ[¹(ì}ö3Íô¢¶kñs(Qû! _ïâJ¡6ƒyóui±}@ƒä£¨‘d¸èyöÌRt_Ñeãâ'cD¡Ö¡–Ü$¸¥=ò¿•sÅà.6§µ:ØM+Z--„Ø t:(š9Ä|UηõF”ˆÿß8íeWVSvÒ ~fÚ4 \Élô±Oèe<¤AíѰrè¸A¸Ír ÁÕÂÜp Ù|Ÿô7óZo¸.}yÞk=-Äv˜Ðò;xÜm–µ¼šè6v†‹‘‡zç[RÚ¬ùï5ÑÝ^‡‚Õoާµ:ÔM+z­µ!¤Æ`ªEØ8¶8N}ÊDz?ß8íeUVÑA2D¬)-Žûk.»ó„ñ/ÙèE‰þMm´CûC±@ÇèýõŽ€ÌÍl¹éºÌcåÇxÄ%ûûÝ!¯‡“ýÊû“.’ß [J>S?V÷mW4˶\íôdþ•/šúBW?Ó…3¤­‹éùiÈ’{¸ýðXpZ«ÃÜ4#xUGù}e®F5È2ø &îpîìà´—UYE©ƒe›¡c-€µ \Û­ØÑ~c–ÓPv¥#ð•6‹·Nó@]ñæë*U‡5ïNìUž´ÏÓé®à÷^|*«–XPë|W…TãËãŸ>¤Ñ6“Çš'p(¸ýðXpZ«ÃÜ´¤|3 25WÕw»úoz÷ûýRâ´—MYåüšRã1Žn|IŸ—ÿ åæºaÓ^E6ÅóÁVÙP%8ë`«ÅÜÔÅfµÜÅꜞÞÐùYì+vÓu5¾hCò•Vó_éw )çd°ou”j÷ÚÌ`+B,þ¤≶Ÿ/Š”ßÊØñ aÎü[ · Nku›V´Ú’™¬>Qz±¤MÑ e0ýwþ¸È|!‚œ žEãþJëË·4½¨=8œö²)«Ts鿟ÓäYžitþvJñ;•”Âöyý;]ˆc+âùy•Û»±ƒ¥1DSç•*§ðh‹@]Y¹Z]¯WSçB-è} åÅïYPo¾.#ƒÒ"¾]Óåô ]Üô¤!¯‰ûò ûT0]åueß›ÏÒVç_K!¾¢å¹~¬Ëx©Eö'#ÌïEK¿d£È„Á¡áöÃcÁi­qÓš³A±€¥OÃéeÞ˜Ìß{Cšê93ìÆ‘]ÑX£1ߣÅRN{Y•U,Š‘s𠥫¥²—°a²PYˆñˆˆaÃò±ÓÞf«>lhf®†/Ègkå3»YYò£®¥"„ÆŠâb‘“ž[¬.|j¼.ù}ñV4}Ž_ït±”†Ó$öå‰ÎR2Ë;#ÙóÎÆ³ñò^N~.mRLE4²5 ¯tÜ.v—lù¼~b¼6RÚðì(æÔï+Ò!â´VîoZ5Û¹É §½Bm0¡Ãm7ø°!T¿qZ+77-Ï$òçeõümSÚÂi/Z?á¶ü�تß8­•“›¦œt3Z\Ê!ÁØv N{!Ðú ·ÝàÀ†PýÆi­ÜÜ4ã9<¹ÝÖ\.BpÚ ÖO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœö‚íý„Ûnð`C¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7Nk…Ææœöj]ÖuJq÷$û>·ý<¥d}­n ²\NìËÛP÷Œºâãõ'Jh­,{äoBÄi­Úß44²öŸ.EÉ'uÿöC–ÇgYàppÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íÛû ·ÝàÀ†PýÆi­ÐØü‚Ó^°½ŸpÛ ~�lÕoœÖ Í/8íeWÖ'J¢nöۓΈæW[Ú®/i:ì‹ï:Ô‹/i£ŽÌùJëô5 {ñ÷½¦¸/þÝŸÐr»¥«ùˆ:²,ñÛþdAÛÍ‚’¬¬4H>’(6Ë$ÿ}ç”’ÕWU®b³¤ù,¦¨£^2ÒQ²¼R î6»_y×´Nžæ÷þä! ç’pJ§CêeöSºÙªcsJ9¡NôŠfññïïh²ü÷þþ@W´œ¿¥8z•rÒ§a²¨ù$à€Û§µ õ¦… §½ìËúBËÉw¹h^]Šàö\ˆÜ‡\ˆ3!U‡I±¿W½íGJy ìÆ©Õ9Ûå„ú2গ4Æ4ÿô>…d”ÐjõŽFÏÏéÓeL]ÐÛõ9Dà•Aûr-ïÕœ†BxͲC„»Ír”WØp)Ä6>öþ@ËLˆåw_ÔQÚf]ê Zn¾Ð*9ͶSªŒfë´]Ñ|$ĹÑør-¤ùOšVÊ|pûá±à´Vv7­m¯Öq–szµœNn]ÖvAa¿îË7ôöé0·‡ú®|«°Y:þ m(Ñ~cJõ]ço4>§ÉBd§ë„"qmg¯h2~K‹ðŸìw=ŠSeÕúLl§âïyéÛUBƒŽò¡ì›0áôÉþå©X÷ÍÞéifoõù.im³Nm mëá\´b‰¥?Ðg!ôÅïùo$ºƒWé.¸ýðXpZ«}nÚízµn³œûÖ«åtrë²²L²CzUpÕö3Ä®1Ø5am¯b8ZwÀDùýçô.ë\©cÔ¶ô©<3z,îç¬Ú| ‰ìp5 a†w Û¿<eŸG=ê?Ubª;`…ýµÍjoæ7æ»ÆmüA†¼³UNi\Ñb2¨ú`…Û§µ²¿i·éÕ:Îrîa¯–ÓÉm˺NeÇGئÈTtP,m“ÒZçHJÓ6z¢"xêÍ1Œà©ÑÙ³̯–4OβÑbh9p¸ÝÞå64FŸêÃûÊfe&+Ñ~cˆ°?qG–ó/ZÎÑi7;áÀÜ~x,8­•ýM»E¯Öi–#Š¿‡½ZN'·+KÛϼÇuÛ¨c [Ir6‡õwff¬|ÈÞ;ǨΘ¼þlú`2£wéý ¬Ünßò´}Êv¨ÛoÙáj쀶6Ú´?˜ ùäu Ï(y—Òú¾8ÄÁí‡Ç‚ÓZYß´[ôjW–sO{µœNnW– n¦ýv²ecsX¿˜JhÙ03œ9=ÓÎÕcvGÉaåÑ£s&Ün¿òl¸ÓáÚ)‡˜M[[úƒöÉi$ÙIÓâ8À · Nke{ÓþºWë8˹§½ZN'·*KÍß–vdAQ|¿¦ÉøZmu‡)Ï‚³Ç@âW4›|/üã;:;Ohz!}¤.Ì»™QyÌ J~=£‰Ìª ÿÐS zQÝã`Ë™pºýÊkè@²—Âæ?e#Tù4„ŠÙË1ggôLúÒÙÏ”Lß‹x`é…? hò!·¶ðò±Z xP¸#¸ýðXpZ+»›v›^m½ñ8³œ{Ú«åtr›²òŽ™©èïd§§ nú‘¼3ôšÒõ•²¡øÿè<ï©Q‹;W:iÊΕ‘ cÕº¨Chã·4üù[ w Û«<Õù©Œ6è‘ùL´^Ü(íÕÒ4]Óµê|Ÿô^Ð\ν[ûƒ x²Aúƒ(#Ši6_ßùºK¸ýðXpZ+»›v›^íÿºÍrîi¯–ÓÉCm0¡Ãm7ø°!T¿qZ+«›vË^­Û,Gp{µœNjƒ n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶›_~ ß0'_vc¾šPã‡ÓZ!èú§½ö/KîGüƒ±Í"8ÜmÖ¿ E×ÜâšPµÃi­B½i¡Âi¯½Ë’;=6ß§ w›õ.è×ÈVÞåM¨Úá´V¡Þ´Pá´×^e©÷X›Û,‚ÃÀÝf½‹µ}·Áݪv8­U¨7-T8íeWÖWZÏ_POüVþ>ÿü'ý=~CÉdH=sÓ ½£ÌDVù–‹Ùñò˜Õ‚Îãˆää;›Rd\Ñrþ–âHnç(׿{ÝÞ;»ÝÌ~åéí5sÛæ"(l—Œ„t)J>©ã„ߤ¯Õ–Š(:{Mq‘¥še¨yÙlÏ\áOò»Þ˜Òb÷/s7±4ßÔD»<?8ò~‡ˆÓZ…zÓB…Ó^öeé §ö'VûËòª Yäïcñšk+v”úEÑó|W©Í%Å2W„ZíZqÃÞÊ÷î6ËR^–uJÛÿ“Ói2{I}µ5gÙIS¦b_ìª@æû*KŸbŸŠc?á¾aßíbþ6÷N4¦ó{²ò±Àí‡Ç‚ÓZ…zÓB…Ó^öe© WÀ¯´JN…›Y@ŠìÓi6×–T!ÊSJV_ÕjëÅ"€*‘î h²PÔÌ”«i𽄻Íî_žê€u¾Bû“Ú¯Z³¥M:bû€ÉGñ?‰ÎhÍΙö©4{;¤§Ù±M‹£ô¾ÛÒ®h1ùžã÷ùVŸà „ªNkêM N{Y—¥2Õúü­Ô2k‘ø<uVl^‰Þë8Ïp·«„õâK5|,ƒê@üNgK€»Íî_žû\vS4v–š„T•ñ¨Gý§ ­ä±M‹£ôüíðŒÞûB¾CBÕ§µ õ¦… §½¬Ëʆk™¬D -APò춨æÐ±DÐ\¼u –Cˆÿ¢å<¡‰ªÍs¼÷î6»wy×)ÅÝúÈENÞ 33Y‰òSH›ÊhXuÆÔ×{ÒyBÑß0êq—„ªNkêM N{Ù•U›¿5Qò$Jh _f¥Y±X½êáeQ†Ì–D“¼K1\Xƒ»Íî[^.ªêOµN‘²o­“¥GBL_Ðe”²ö³†açÌ÷>7– · NkêM N{Ù•µBÚk^À¤³”hFËôGŠŒáŦ ¼;|¬w§l9¬ü’¦u¿§p·ÙýÊÓó± 0Éšö,L™BÚTF“X›ó·:Û­gÏàP„ªNkêM N{Y•¥çÕ¤¨.ÞR<ý`ÌÙéùØGÔ¾Ëçá2ÊùÛh"ßÒf™dˆt¢)-ŠG>t£dÏû>ÙnBËâ¸û w›Ý¯¼Q-P35‚±]_Ò4~E³É÷ÙÉÙyBÓ )– CÌ…¸¾ÇÿDïä0s}ˆ9û¿ìÄýƒV—“š/ׄªNkêM N{Y•¥÷Ñî8${/h¾6çòT@ç+>ˆâ¤a¸X½PC׉bšÍ—¤ò¾p²Wy•9ø]¶ëseÏÞÊ)‚×”®¯T§JütžÛ_ùTe”ö³Þ(|L°›Ñj¿Â3Úw· NkêM N{ñÛ^ÀѳòqMãü-°…ÛnˆÀ†PýÆi­ÐØü‚Ó^¼¶—ó¬/hÜðèN>Û°ªXÁÝf€ ¡úÓZ¡±ù§½ö/+Òë gôÛä9=Ÿ¯j«T%úmSM‹j€ Üm1�تß8­›_pÚkï²ô<ÛMÏÉV^ù(?Èr9àn³ÜåûA¨~ã´Vhl~Ái/ØÞO¸í?�6„ê7NkÕþ¦é¥þfæ‚Ï·?|™, βÀáà¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ‹×ö굎¢Ì““Å)^´ç î6ë&è ò…ƒØ·6<ÜøÍÝã´V¡Þ´Pá´¿íÕ v«-Ó¶´I_ÑÏéþ%Üvsv߬;fææóGŽ~ž<ÛvòЙ»}®=TípZ«PoZ¨pÚ‹ÝöúEVI¾µê)ÞFu ¸íæ.èÝŸ<WpkBÕ§µ õ¦… §½Øm_l—V߈ü¯¸¢e2¢6¿ÜvsÔn>•m÷@(„ªNkêM N{í]ÖfIçqDQÎIç)É}Nëó·_i¾Îö¾Íö¹={M±Ì‚U.·oËçúä§ØUh»¦t:¤^Vþ€Îf/w6±¿pú€„¯<Ñq:SÔ‘v|@ƒ³Wô¬Ø¿Öœã×CÌz{=ù|×ö¿‹}’O:§”È=pugLÓ$ÆË áƒóY¬Î)>Ùv~ÿkÌ«s™¾ÔSZì­,üóòUqÍÑ$¥E"7á>l¾št§3(ýúgš[IŠßŽß«í&Íùë¿:âØË±nWšüñJN_Qz]/Ú‰Ú"Q_ü½²×´Üƒú‚fº½fÛ%–{Lo×ïi=(~÷ÇbF§ãoÏ»ËcCÄi­B½i¡Âi¯}ÊÊ…²«íZÏ_(a4“JÙ÷j¿ÒíGJy£®,¢iÊŒ·+šD0Sû¡nW ² ‚YÜm–¥¼º½ŠŽ”9«‡˜Í,Ôwý3Jÿ³ççôéRÎûÊùÉÒ*ùžÏtÙ°6@Ÿ£½¢K¹ÿ²í[ù.Uò\BìâSჄxKÁ2ί÷óÍÄü«8ß©$c\O“T²t¹3Ö@§÷á•ëÆÂÏ«>|«óï°—4e‹Kò‘¶ºÍÓ4y¹ú\òø«‡ÈߌbcOjÝu§@ŸC·%ÕñQœ¼­ýõü0· NkêM N{Y—µ¹¤X:3ãØYX¢ƒ Ùwº‡na@L!U; YŽDeHvfo³û—÷ {ý¥xåÇu¢g4¾™å#ÏÎÎh<ý M•ÕE–§~¦}ÐÈâr¡ÐB¤„¼û‚fo‡ô4óÁ†9e-¸:[¼N)~Xž§*n-Ê2–צ¿ë ÿ/êvËóï Å°l#ráÙ⃪˸I´…-Æ/Œ=©ËvX^¯®ƒ.C ®n[rñcô—ÛPµÃi­B½i¡Âi/»²š‚kºf`Ò=óJpm 8ê;CH«S±×‚¬°àn³û•×Ô±ì8rG¼Åpècàå^Êz˜ù!õG?纺(‚¡#Ø| ‰-†kU9zÔª:†‚¯·ìÓhg{ÉqSB¿3,¼SßÛž¿â/Œ,UñÍ2ä}‘#µlW¶Ãâz…½SŠDûêÅ—J€Ë ½7:WÃâM¨Úá´V¡Þ´Pá´—UY;ÁO¢ƒd™¥æÁµšÉÇU‚…Ê^ !ÝàŒì¼µ`}Oán³û•§lZ±—ÎÒÌ©ƒÝÌM’wÔj¦.CLócŒ!NSt®–4OβyßbhY¢Ë1;†Êwwž Ö¢$çK‹ÌPR¯›®Ã®æþÞPÛœ¿=…R‡4¶?‰ÍŸhhfÝ‚²“ó]-/(™Èyds¾YsCæþ BÕ§µ õ¦… §½Ú—Õ4‹ùÕ"05‹æNP’Ô…TÓj@Ñ™F]Àï'Ümv¯òš@ XÅ^M¼›A>RLW4d™•}–ûBdfô.­îǬ…ÆÌâš|·@g•fgp§núZêët–\–Ýúü;”Yg)î7—±]½£ÑózvZ]duÒÒ$ù…ÒzÖ\ ëqÓpun?<œÖ*Ô›*œöj_–nÀFÀ‘CyƒÇÔ{$‚U‘¥ªàjι5a½å5d»‚~¿án³{•§Ä¯´—\PtJýž°Ã\iuJ@n"×0Çß4„ºsN…ôÅÑqœ.ÇŽz'Pþÿ{C8µ˜êkÖâf.jÿBÍNÂmÎ߀¬ë“±ÑfTÝëíª>,: ãlþ»^nC{ÍÃʯi4]еè<1ÛZÖQ¸Ý 5BÕ§µ õ¦… §½Ú—¥ƒvÚ,(=§Éo³<K¢xôN½gr>,¸]_Ò4~E3àäB³ó„¦2 Anù»8æ-->‹LCÅesN_h¾¡xüš&ÏD é¿¢óä-]ÜsÑån³{•§³Àlèó3-“DÆyN‰†þ4‰_fCªåÿoôÇD>vó¹¡sÕëc^ÎèWáÙ<¤¢bXHö8ÑcµjX•Ó4uÑ)üð'z·ZeÇC¶z¸øöa!šé%M†?eç.2×l®SŸ·6œ}«ó7d™Y]õ®Å|®µÈp‹ybµ¢{,²gÙ‘­¬H- Ú>²õ˜U¶šüÿåí¹¸zõ52\g„zÓB…Ó^VeI‘UÏv¢1/ECÍ…B•çúôc!ò{(×¢¡g⪃•<J îCêߨ€ aEN/i}­lã–ûw›Ý¯¼ò9Ù“NDñù²<õˆPÙQ“)ýÝØÍf+ÃÓ*›­ Z)tòÚ³g`Egm®ÊÕåT2`-ÒúüâÿÓñ¯´(ž¯ŸCg“U¿Îü³xnWÕ9I«C¹·9Ûå[Ÿÿ£|^·>ת:Y»È:zX]Kñ1G‘ ûȼÞÙ…ªhÓ3:_üFSý<±øûø²:<òøqZ«PoZ¨pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­›_pÚ ¶÷n»Á€ ¡úÓZ¡±ù§½`{?á¶ü�تß8­•¼iøøõႳ,p8¸í?�6„ê7h À ´~ÁÇ�€ Ðú \�Z€@ë'\p @ph­Ÿ@pÁ1�Á ´~r¼‚»¥MúІ·Øiø€@pýäxW¾ðÿé­všþÁ \?9NÁU»Ò`Ïâ{€@pý䨷Üб|V¼ó÷˜fÉ {Œ­â¾Ò*9Uû­.óýa³ãåvrÿ¤åùXm{WÛ–.CnÉwA³8Ê·ùÛÙ6š}ýæXATNµÁ„·ÝXÊS{"盥«ÍÖ3aâ[ìo+çxÇÔ;éR”Íóêý{EƒÚ¯æž®zd-ÄzÝÅéFM¨ñQ8!Ô:Üvã(o»œP¿&€ÛUB™±F ­Õw¹È>Ïçyõ¦ìBHÉGµéù5­“§â;-ÊZ¤…ØN>A–˜™2æ‹ï .�-€àúÉñ ®ÊTëó·ZP»1¥×ê;‘ ž&´’‡eY±È€êÿZpU†»ýHÉàôÆ”fÃÇB€SŠD6Ý‹/•�ƒ»�‚ @ ¸~r|‚«†+™¬D}_®.ª¬T ›CǹÒùa!Þyæ,‡ªÿ «å%“¡1´¬~î.�-€àúÉÑ neþÖD‰çÉSJÖ_i“þHQ‘•6gÅZ`óìUg»ù\ðIOˆuò ¥¢,p÷„?Bm0¡Ãm·}Ë»Ncê6.`ÚˆŒ¶'Ê‚»|Oqô£èáæþ„–Zow†µàÖË–Ãʯi4­ <8$\�Z�Áõ“ã\½ÒXŠêï4ßÒ¢xT§\�Õë(Y™©ž¿¦ùñ›%þÈx4Yäkš%yÆk§Ÿ÷í‰ò–åqàð@ph×OŽSpRøÆ[‰Ü>æ+#Õó·j¨8û< (N†‹•Àêã:ų <{pûá±€¨œjƒ n»¹ó)¬?РxœGsêfà\�Z�Áõ?7ŸgŽÝÑó·;«šO@ph×OŽWpÕPqgHÉoS>?oxtG¿È¢iU3ð .�-hÝ`®SŠ»æ¼>ý‘Äè·>ð Ë儯<=Ÿ{Ós²ÕW>fd¹ÞÂí‡Ç8!Ô:Üvƒ� ¸�´�ÖO ¸à€àÐZ?à‚c�‚ @ hý‚ Ž.�-@ õ.8 ¸�´�ÖO ¸à€àÐZ?à‚c�‚ @ hýÄ[ÁÝ\R<|çÿs·¡ÔcO ¸�´�‚ë'~ ®| ÕszìýÛ¥B©Çþ@ph×OüÜ-m– {h8ÿS}ç#¡Ôƒ.�-€àúÉ1 îvýžÆÑƒ¬,¹w틎SºÞ®h>êgßc— í:¥w“a±ý^'zE—z‹¾uB‘þM7¦ôZ ^uãƒíú’¦r/]õûYüDüû;š,¿¨#®h9Ÿä¿ËÊ»éÕ“‚͒泘¢Ž:¯Þw·©'ÿAÿ¯Ÿjü•VÉ)u²óoÔö„ùñá9­–¿R\Ü'£®²~âú#µua‡zÃäh·"”uDEà„PLèpÛmÿòþ¤ùð¡ÒÓl“ùí*¡A§KQò©ú÷þ„–…vqYL…°¢"çF¥(VŽË›‰Õâ-Å“×÷»Ô‹ó]ˆ¶ësõÄÿ³2¾(±b• ´üý-&ñ])²ùo´ø–›(èï !T›äwcÑqEUêQ}/tg8g’ˆze›3”õÏ7ÑõŒ"вë¼Vǘ¿ûJëù ñ¾N½gpâtg¿¥£€ÛDEà„PLèpÛmÿò´àêÌuC©ÈÒ ¡PÛñ•Â%¾ÊDYfyScÓzù»ž¸#;ÍDï!=B;ž¤Õ­þ”@w ­t*+ÖB–‹ø¿yŒÞDÁÜW—e\O~Æ®FߨGu¹‰ÃsU½¡CítöžýN‹´Ûbï`3SÖ™úqÁ \?9>ÁÕ‚!²¸Ñî–|¹è=4†]? a},ÎûXˆògõ¤.¸:ËÂÔSZZm¤ü\evyÆÔ­o¨2×RpuYÆõl>ÐDýçÝ­‡@ïí[dÔQþè©×jö_`v ¶)˜ç2²•É#\�Z�Áõ“ã\‰-3K“\«yLc›B-x•¡c¯J¦,ø ’¥`JÔ±å¬D t)Â;™ôfAI6ßk”©Ï+¯çjIóä,›ï­Î±6Ô#CeË…àÊÎİ쨺6_g.Þzȹ?ùƒ®–”dsÚߘg> ¸�´�‚ë'Ç)¸¹šYçîü­æ5‡f¥íÌkšBXžof›æP±œ½|U.‚’åG1%©ÈU˜‹³Nú4œÌèù÷ŒÝzä¨ï3!þ*êð#EFVúÍëÌ2Zq}ÆÂª“žëäJ+‹©Žy½!‚¨œjƒ n»íSž”'æœf&0Æ‚©ë”ânU\ócjüzÁ”9ôš aí¸Œ¦E:ÃÞÍ&7reðð‡|µqJp«�V½É¶¡9: ‚»|Oqô£1ô­çoÍH}øZgÎõÅQrXù5¦õº\�Z�Áõ“ã\%|MRÌôŠ`cH·à´˜þHSy\‘á½ ¹Ìäô0o'¢ñ¥Î,›DµDÏÍfsœÛ5¥Ó1ggôL.r:û™’éûJ–܉Æt~“à™±®‡iùøÑc&‹,[m¬G†Ì.õú£ê<m1[ÞŸe2ª-ŽÒeÃÞú8ýHÒ‘Á \?9ÁÜôŒÎ¿ÏÁVES‹I‡õ‡†H‰ïçv³çbã¤6ŒªÅÊ60Ÿ‹í‰²Ó5]+á*„<;N‰iv}®7µ!c-°ú8yÌ[šbwS=JÁíÓh¾2Êè¹êâÜ ÃÙZˆÕqâƳ‹£}þV#¯5DBm0¡Ãm·0ý@‰hôC!¾ÙK6’MꋦöBfâ?Р²P,'éÚüm@@phl0øøùá„»¼£@Í ïιJòì¹ùomÈçY‡ã¦Gwôüm}Us8é7.�ÀAÎbž8n.2Y9ß›Äuõ¼j[ô¼õ’ߦ4|¾ûÜqFã[³Â‚ ��- 5pÖßÓœäc??ïñØÎ\ozNVÏéšç 3Ë•u .�À¡Nà.��´‚ l€à�@K ¸À.��´‚ l€à�@K ¸À.��´ÄMମÖÝÿ™Wpl@p� %.gþÎc›·-mi“¾¢¡Þ\��h‰»À¹ÏÛ–äÛ ž»ì€c‚ ��-q8Õ­ß¶¤^æÓÆà(€à�@Kø§Êó±Úìý Î^Ñ3ñïúüív}Yì.Ô‰^Ñ,~"þoé·]ŸÓ¨Øµ'ÿ”ûÛ~¥uúZíêó€¢³×Ë×7üúÄc†ÏoŽ .�À,So—§öp-…³:›ߥÞ0¡åæK±iüI7¦T«r¶­]}ãy!¶óÔ“¯f”{Ôn?R2È·÷¬»‚ ��-Ù?p~¦4~L'ScöO”D]Q¶1«^èß$´ÒJºN(ç/³X!ÊÙ¶væÆórÕ8Û¸½ÜRO¯‚wû»c‚ ��-Ù/p6‰¡à:¥¸+2×b¸÷«Êfó¡cM.®]ŠŠÕÈj¡•9«³ÙÊÐqøÛß;\��hÉ~S-Œª,pR[؉r‹á^µ]ž™É–Ç™"¬2ã(¡µú¦y#wÛY€ .��´d¯À™Í·V‡„‹ŒÔÉFÑÔ{Öšb½3Ûñ òòjç‚ ��-Ù+pª9ØráÒ-&§Ôï‰ì³îÕ™¬9/«‡˜«¢™¿(Ã<Ne²æ¢ªA‡‚ ��-aÉp£)-6Ÿi™ü@ÃÉ9%Ùpï4‰_f ©r!íP/¾¤ÍvMétLãÙ=“ÙìÙÏ”Lß Ñ5æe—¿Ó4~+ʼ¢4î‰ï þœ?R¿¢Ùäûl(úì<¡éD÷.€à�@Kö œê%¢Œ“NDñù’6:+Ueèdžäq½!MÓ5]«aá“Þ š¯åêf-¸©?|#Ä6B.1‚=|MéZœ3;NütNkÌáÞ \��hI¨¸‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��Ð.°‚ ��-à ¸��ÐûÀ¹¡4îe¿Ç'€O”ÐZYö6Èß„�àŒP'p ��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��ZÁ6@p� %\`��Z"'>øØ|B‚ ����.���p� ¸���À€à����‚ ����.���p� ¸���À€à����‚ ����.���p� ¸���À€à����‚ ����.���p� ¸���À€à����‚ ����.���p� ¸���À€à����‚ ����.���p� ¸���€sˆþ?EG0ñc@‡����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7h.png��������������������������������������������0000664�0000000�0000000�00000031706�15030617045�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��m�����CÄ`Z���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��3[IDATx^í݈#g~çñþ+óÝ2,IÄ6GO¼gv’Ìì‚! œ/‚0‡ƒ ·>lãeüÇ‚Á »°¬Ï,‚>›[Ÿ XÆÜPa`1ØÍ‰áîæètNØY‚iû‡7 ÁÌš¦YO&ñ½ï·ªžÒ£R©[­–Ôõ”Þ/(ºU*•êçSŸzžRÕš��� ôm��� ´��€Ð���B��@�m��� ´��€Ð���B��@�m��� ´��€Ð���B��@�m���6´­­­ÑÞMcÐß•­zMÖê?NÿIÚw’uÞ­ÎgéëjôÚÒ°e¸Þ’îIÚÓS´¬éèÎÛ(Ÿ CÂ5Ýú;–n«.ë­ŽìµÒhh,›$ÖpÖ[])È3•qÒmÉú)¡ ¸¶! œm¸Ó­¿‡5Ÿ•fôqÈš‘ôÓwŠ úd»yMjÍ·dÿÌZ¹°Ú°HlC@9Úp)ÚV ¡ ‹T¦mèÙÛttÓu«€Ð†K1Ýú;Oóèj!´a‘ÊÚ€³ÚJŽSئ]ƒÃH6jkÙ²°ò¸+­õº´ö:Éßîqú‰ê‹—.?[†Eµì¸(BBCh+9Lacý-ËEhChm%Ç)l¬¿ÅaÙâ¢m ¡­ä80…õ·8,[\¡ ¡!´•¦°±þ‡e‹‹"´!4„¶’ãÀ6Ößâ°lqQ„6„†ÐVr˜ÂÆú[–-.ŠÐ†ÐÚJ®š¦#9hoHmíšlDŸ¤÷${"ýî{r·Õ”õÍŽQ ‹ÅYÖ²ô÷eg³ßÚZC6Û?“nÿ±ø¿¥{d[ï‰ô£[éû¹®Ö”ÖÝ÷tøe=¹ÂíGr#»ß_Q¿E(Ú¯ËÍÖQYÚ0 B[É•©PÉ ú²ÿã¹°REý&/܇÷äzV6çñ ôsMÏ✵þ¾øâ ùàƒÒWðÙ²ùÑ~/Cûk¯}KÙ7Ž÷¥eò×°¶Õ9Ômu ǽH6­_îÞqÙ½öÖÒûé÷dWOBj¶]×6¤}°èS‘u¶’ï[»)íÞã ýæEÃàþŽ´ï»ý•Ðv„6LƒÐVr¥ mÇY­C£-=W*õ;¯Á´z ¬mIç¢AkÓ3'“ÖŸ(ŠäúõëòÒK/¥}áX½zõª\¹r%^†ö×^ûwñû†xFžÊ`ý¿?Vk5èµ¥aÃúÛðà‰6®ÅÓºœíñ±ôÚ7sÓ[Ô¤mI}îAp¹ÊT¾žç`|ÐÝ.uúë"»‘{=‘¨©¯×å|ëXÏ:š6žšè6›ö[¢~dë@çeÓ¶¨òˆ—¥Nצ.Û²!´•Ür ;s~KšZÔ6~,·_}V¿ßÝ…ßÒvÆnÕˆý¢ ŸuûM»rx°£ã}/joJÝ?ˆudÓ¾÷Õ¶¼¿ÔNÔš;rp<<Ê ú]¹w·%Íéç\ÐËEÓèÕÚ÷¤cŸkC®I³ý÷²èç äןÖ’i\£¦ÍÓëõäæM Ù:ïì}Îþ_,¿–ê†îŸ§ýÕÑžDY “6‘ÖFš÷ý¦Ó[õÏ8¢Ú6jûF<|Á6šûôý ˜î#ÓPÔ/¦ûKç]i5“P™ßߊ§Å«iŒû»ù°_›3¦yt¿¶ñüU<þÚF$‡þxÀ¦¿,¦=4 54¬ÅŲ.Ÿè•$¨iªå­­Õó±àäBS¢4°\èÙÇiŒ¦‰¤8ós‹tÒÕeYdmZ›ºŒ.¡­ä–W¨<‘CÝûkq3ÐCùܬFj jà ú4uîÞOƒÕºnìGM´Þêê!͸ƒcMê[»Z .ÝÖì3±4Ô|ÎõóEÓ˜hnÄM\OÜ4,áÁìný=zôHÞ|óÍ‘°æ:{oÕùM¡çéòM¦s—5ê÷ÚÄù™t6í$ÇÛfc~h;ý1dƒþ®lYXi¾%ûýcéw~ u¯vlø¾…«“tŸ=1IjûÎî—ÔFßHö·'ö¨4›¾a¨<}ZÒš;oœÅûõÓ¬GÇä»-üé ^wÛ;éš"ä^}OYÌÚ<ºšE‹BËqçÒÑÀ6ËçæBw§M Gm§Yé9lnèüÏqlYΫöO=²1ÇåKh+¹e*îzwvë aÿì<kþñÂNQ¿áª!¯¶"ù°¿'­Æw%:´‹±Ý{þA$=àeAkx �òŸÖ‚œ9ñc]ê­}9Î8Ë¹îÆæÁÂZr¢›w÷Ì3Ï,<ôºàç¤à–Tä› ÝöVôžÇ5£Ö·õ`¬[e|òá¶YïýlEûHú]#',ý‡ÒÙjdßåö™¬fëÌiIOŒFBUÁ~}žiÖϽzû-ÙÚŠ¤w¸;~2¶ 6-e1õÁX—Éþ¶ÈzSÿzgV Ôêh�Ò¿~s§…†ºÎæsôj$ÜÄAG_¯=§ï¥¡)k|_dz®ÿk×ù8ΘޮHS‡·á\ç.¿¹s·•üoÓéëÓ¦éþáçâAtC‹?£ý¬ 8¨^¿ºö³ yÔMÆþoóÕJç#—~&^6L:ï¾.¿ï{:¶<u˜¶[×ÏÅã¶þÿ/mFöÆá/‹¸¦Ðú¥óå¦G£É¸­ÙúóÓ§eZ„¶’[N¡âj¶ò¨¦;†»ngÚ~& aõ[²Ýyèõ7ù€¦ÜÙv´\Aî×Zä>—Õ€øá¯hzܼÙãÓæSW£°P¶þ<x /¼ðBüQ·ê¬¶ìå—_.\6guö¹…×¶©ÑàöJzâ O ƃ†«+zÏ™´9ÃñOPÜx½}Ä…)ÿj¬ß@ŽãÚ,û®å(®Ö÷ë?ЖÍÓYÓ¢Šj¸Çöë)§9ë÷¬4¶~¦¡qŠïŸ#[/eqÞƒq|]› 4º€­ÆÊ‚†]㦫<Hz.ž…;«Q[×ñù† Ûûú¿[K‡kðtqXód¾tÜ›;:]q�Òþ\,ŒhîדüäÿºÂ,ðèæ–5w6õ³þ4ÙtûÓÛÿ\´šúÝvNо¡ÃýR§k#í§áÇæ5þîôsšlšné0»:ÝVçõXÇ¥Åñu~öžÎc}KÇ©ãq5Ž'¶tü¶|érµïòkßl¹nèøtX }ö¾?_6l<Mé¸â°zÚ´œ¡­ä–R¨¸B8+p]Aê× LÛO¹ñ¹3u_úÞxí˜WHggòÞxG>§Al{CêÏå†)š7-vÐÔï¨oÞ–¨Ó³ýg)üõ7)¼}úé§é«Í®í{úé§³Lêì}Îþ_˜~G¢\ûÓðסù@á¶»ñ ‘ÕüžZ³;a?ʸ÷½”lŸȱý¨°ŸWº<ë›ÒŽîK/ÛOÏš– ¡jl¿žnšÇû¹ÏÞ”</ ݆Îišƒ±…€/(YаÀ_ƒ¥³bÿë"M®mKG\¦+Ê…û̆†[wV䂈 Wdø.ûß>gÐU¯Ë,éâ�•m� üì;m:tÕŽO“ÆH– M6î±Ï¥Óáøýü äÿO³M›Ž³­¡­cß¡Ž5ÄYøÌoM#ߣ Ù´Zï4œºšÈx9Ø<h?û.Ý}dG¿ëPCe¶¬=¶LÝò5“¦å<m%·”BEO«šú=îl<;8ùµaº%'…ëýtëŸ|¦ì®›ókÇ\­š;H¸a4`¹æ˜‘qîÉAôCÙºý–¼jßíŸíM›·‰µ‹U´þòáÍ~˜€Ä4×¶mooÇÃÙÿ‹aÛÛ÷¥‘mÎC-¸×õ{‹Ëh­¯:þ{iÇùûÛr7Þ ×p5Gí#ùýhR?÷]“BÙÓRÆŠö멦¹ ¬(,SgqÛÐùMs0ÖÅ#´fÈšö¶, hPðÃ…«1zbAΚå4 [sª.Vi¬AIûÅ5GZìXSž ;ÐñYhñÿ÷Jüã�íoãÙ²þøÁ/?Mˆâp™6º¦N7ýîsq-_ú¿…œí{ú½.­–ð‰NǶ†'ÿ;Ü',T¹é·p¹yW§UÿºïçÇã_k™ «ÿÛ4Ö­Æ.]q(Ó/³Dû?^:ŽŽÕ^¦ýìs;ºœu³wAÐ&â´i9B[É-¥PñC›ÿK¯æO¥Û݋ϳë^ìbáÞ^|³Ð¢~§ž©»‚Ü äùßíë–ö‹CÕ@wRû¥©Žsä—lnœv`´BOãÂÞ¾û®ìßÿ0)ÄŠ¦';¸3yûQÂ}‰îu—Ö<:‰ oÜòcœý:ôù矹å‡ûÕ¨³¸}ãXº­ºŽ¿!›;ûévò$¹_¿s´yÔݛ̶Ía@éw£ôW™¿ðã¶o/ÐØ~¹›òúûÔ¯Ò}D‡õ›øÝ~d?Ð#[÷gº}Ÿô¸qy5…ß5aZNÛ‡ý~ÓLsA¨^Kûž¤eÏ"-¥|Ò4cköëìiHkz65Ø:Ê‚€n~Êâ°” «yzWC‰ÕÄiÑ73ÆŸ}W»Ü°u» ÿ0¿Õ^¹<·Õ:Yðˆ¯…Ó~E5m6~îênšÕLyÓôË´æjdštÿs®vËŸ? «:­fKOº­%ÓצŸëë0ñõdú^KçóHûYíǾ/¾^ÍãB¯½oãÕÍ6Öß÷–¯.o›Çx9¤Ïv …ö~Mçq׊$íç–««gη-Ó u§MËyÚJn)…JvÁ°¤¢‡(þåXrprh­¾%QÏΊûe!)û¥™gä{’‚î9Ý4$ÆÝq¾“+¬Ýuiî êÎÐÏžF ô:¶tüÖtIÍ£“|ôÑGéÈ»s玼øâ‹ñß¼…탞D;]ÝFFo‰°V”†åNvŠºøI÷¤“m‡§ôȶûžø³~“eîý¢m8»ÆÓ ‰Eýâ“ÿ–ãûÛ©ÓâÚÈ>\°_[ﳦÙ{q­š»Þnt¿^$›¶²(õÁX7c xñµYîõ5 :ù2¾b,Ƶ’0ã·´ÿe"´•\™ œëoqX¶¸(BÛ”4S»Ú¥¸«'×Ö £~5YX³ùµ5ĵg%@h+9Lacý-ËEhChm%Ç)l¬¿ÅaÙâ¢m ¡­ä80…õ·8,[\¡ ¡!´•¦°±þ‡e‹‹"´anúßöÃý²Õ‰o-¢ýÝíO.ŠÐVr˜ÂÆú[–-.ŠÐ6_v›ø¾dÓHCN?/ÐÆÂYzë‹Ü›ÍGh+9Lacý-ËEh[.{6è¼î¾hvâiøn÷›‹oð›¾6þSæÐVr˜ÂÆú[–-.*ÄÐVôs÷`r»müÜÎ|m×±Œ?lÝîâŸÞDÖøÉ�6^íâ»ûkO»¡¯{º= !$Þølº:ìHÓ`Ñ÷u‡ãiê4Ú_W+56O“Ú©¢‡ÖMcÎÈCÛ÷ÒñètEéM‰­fÏÂãȃåõsq Ôïñ¢ï–küÀ÷“é?ç‹o¢ï7mýÜÖû"oØ4éÿñ°:=¶<ôÏTm%Ç)l¬¿ÅaÙ⢂ m†Šrîlng{d«Wô°õcính(ñïën&ëÄ¡E¿Ï‚aüT{*€~רݵ_N,|Lø>›ŽìñXéÿq¸œ0OöPvû֧ÓäO£¯è¡íñtÛxôµ-š¢ËÙS4HeÑOCÚÈsN >÷|ýÏ¥ÃfÜ|¦O°y³Çq¤ýÝr±Ç^ù; ¡­ä80…õ·8,[\Th¡- Nz ÷ƒ{ÌSQ˜ñ?“oª³³íFS=&*~:Œ.WsäBÙ? N:-¶~9áûÆþ×éµqOš' 8q-žN‹ýŸ]æO£/7½Ž?žìµ~·õs–·~®¶ÑæÓDÿÿIŸ+zø~ƦIC]¼¼u ³î{ì³nÝíä¦ù4„¶’ãÀ6Ößâ°lqQ¡…¶I9/ ){/ÿ°õýݤ©ÓöÄûk!bÝÆeÍvºx,ÙƒÛ­iÑB¡? îî'^+ú>6«‰Ó¯ÿOûΓN‡…·8¨Ù4êw[³æØ4Ú :ÞôZ°‹ÚþD§YçÏÿÀ؃åßO†‰ç-}î¨{ßȳ>7òðýdð˜?ñ0^x´åÔÔáÛÚåóçim%Ç)l¬¿Å iÙ~ñ…È£Gé ”Fh¡­ð!çi¸ðƒ‰/®ÉJ‡w[o½‘Œ#5KZ3§ŽÃõ‹¯]KÃIÜO¿Ó=¶jâÝµßÆÝ´¦ÍÆë}Ÿ­8XêxìáîVËäþ/œ' `é粇ÖkЛF›AG_äÚž¯Y4ùËÛô»Z´‘‡èë2±P?D_Ç=ö9ïûF>—|MÌæ-®é4¹‡Ò›¸Oß;8ObS„¶’³B….ì‹Q´¬—ßmÊ¿úòÿ‘§~ãp¤ûõ/è{Iaíº§~ã‰þ-Ç¢º?×~tù®,Vå`¼Ò4èÅ×�jð4ÄŽ5ñNÐ�3°š³¯=#ò•ë"ë2ì~÷OE¾þÃîwÒZ„¿ù›ôƒK`5{kkåæÍJû ìm+ÀB[cX8 B�Ìà/_ùò×DþðÛZ~§¸³÷®ü–ÈöM?´$ßûÞ?kh{$W®ü“ܹãÿ>eEhÃ4m�pN|ÔžýÞ‹£!-ßY-Ü?ŸÔ|-‹›6kº][{'þ¿gg£Ôm˜¡ @5¤MRŠn}0/Ÿ~š|‡5…5×Y3鲓5Ù^½j×Óýµv¿“zýŸ ƒã ×–† ³ÞŠïK…ËChÃ4m�ª#ýÅ×¢B›Ÿ¯aí74 å;«ûòWDî¼›~pI¾õ-k=ô›uß”§žz,ÛÛÿ’5ê¤Û’uBÛ¥›ö`ì~M™¿½„±ÛRè*ŸøKR„Р:Ú¬ëwDþíU‘§¾,òzp, k®³kݾõŸÓ/‰]»f×°­­}Ç l®û/Ú‰|ôQ:°‡ÐVSŒÓe·Ç÷9ÓíÑî&ºÜ-.P-„6�Õ1çÐf!çµ×’Ú‹çŸOþ~íÏFZ¾³_‹þî¿[î}Ùì»lÚ’kØòÍu»òÌ3ãµm„¶r˜ú`ìÝÃ,Ï¿ƒ?ª‰Ð :æÚ¬ Ô.æá…$½þºÈÏ.rí÷’4»‡]¯ænña?6°æRë~[Ú}æÁƒtdKbÓüôÓv-ÛÿMZQwXx B[9L{0ŽodÛЀ6È5‡ºÛIh¿ø&°zòð~”4¥ZÛKoæj5rù‡œÿDßó‡³qÆ]ú=V›çž €ËEhP i`s{ìÍyØ Þ|S了0ë"=H¹Ú²á/2“îÛ/‰|çVÒý·Ÿ$ÃZgaí²~©iµ‚Éô½¥]>°ýuü›G_ØÜ0zT>ç"ÃM{0¶»÷»ëÙÜ3<m[wwÿ·‡—»ÈÛÉ‹ oA®žÈÄO4Ðý$ÿpô±ál|é{öÿ6×É•¡ ÀJ³ åš@_Ò0¶ìZ²yzûmw]›= Á6»õG<Q^SŒÓÚ4÷Cÿžþs.Ý£¦ÚÌ,¼Õ[Ãç[ú¡/kNMCž?œ({æçvò¸|„6�+Çš­fÌ5Z [UîefM Ã_&¿µ›í¢Ü¦9<K3 p.€Y‹Ãœ¦®ÈjÍ4€}ÞÕ ç†7ÞåþÃÑŸä‡3é°mÝO\í.¡ Àʰ`fÍ‚š6 nE÷/ ™5&÷jÛÕnò=ÚP.ӌ݃Ùoxµcîæi³m{sG_k¿¢&X¸‹‡ñr¾_0œ …M}oÆ'.am�*Ïš<­éÓVÖrè4lþl^­ãia(ËÁØjónh€;Ô¿-[éÚ�T’ýˆÀjÒìG^¬†-!~•YM[§ó$}…²+Sh³7lê¾C`+B€J±š%»M‡5kµ ðW±yЮiC8Vå`Œ‹!´ž…2kt?,°&Т»ÿ¯B[Xm˜¡ @°Üã¥Ü½Õ¬ t™O"(3B[Xm˜¡ @p¬ÍoµZ6~!9ŠÐB¦Ah eùÇKñËÈÉma!´a„6�¥fÍþ㥬9”&гÚÂBhÃ4m�JÉš<«òx©Ë@h ¡ Ó ´( k­ê㥖ÐB¦Ahpé즷îñRÖjÁ&Ћ!´……ІiÚ�\kò\¥ÇK-¡-,„6LƒÐ`©¬m•/µ,„¶°ØÁ˜ŽnšnPz—Ì®MsM vÍš7î­¶8„6�¡¢ô.{¼”ߺê—ZB€PQzKdM <^êrÚ�„ŠÒ Xkõ/eO0  ôrÚ�„ŠÒ X/UN„6�¡¢ôæÌš;­ÙÓ5òx©r!´¥0'öC÷x)«]³ÐZ>„6�¡¢ô.ÀB— ¡ @¨(½€ðx©pÚ�„ŠÒ 8kòtM v5/B€PQzg°´|(— ¡ @¨(½€ x¼T5Ú�„ŠÒ ÈÉ?^Š&Ðj!´¥ ¬ ”ÇK­B€PQza¥ñx©ÕCh*J/¬ eÖäé~X`M vc\¬B€PQzaeXs§5{òx©ÕFh*J/T—‚Ð T”^¨$ ev}škµëÖx¼ ¡ @¨(½P)îñR® ”ÇK!Ð T”^¨kòäñR˜¡ @¨(½,kÍ?^Š&Pœ…Ð T”^—ÂEÚ�„ŠÒ Á°&O/…‹"´¥JÍ~D`5iî‡VÃf?6�fEh*J/”—¢Ú�„ŠÒ ¥a¡Ìš<Ý x¼Ð T”^¸tÖj”ò›@¹·…Ð T”^¸4V‹æ7Z-M X4B€PQza©,”ñx)\&B€PQza)¬¹Ó¼”5‡ÒŠË@h*J/,”5yòx)” ¡ @¨(½0wÖÊã¥PV„6�¡¢ôÂÜØMoó—¢ eCh*J¯KtÒY×5°Öé Òžú·­¯í¸õÓ~%gMž<^ ¡ ´¥×%ë¶’°ÓN›:"5}ÝŒ’×ee5hîñR6ý<^ ¡ ´¥×%ën‹ÔŸÓ ¶©M_ßWäÕõò†6»6-ßʽÕB€PQz]²îEÚ?ÑQé<Ô´+Ò*Yhs—ò›@y¼BEh*J¯Kf¡mÿc‘†®‰7Dî?*Oh³&P/…ª!´¥×%r?DXCä'¤‰ôv3©Í²î²~ˆ`M þã¥ì 4¢*m�BEé…—ª ´¥×гæNköäñRX„6�¡¢ôZQöC‚üã¥hÅ* ´¥× ±PÆã¥°êm�BEéµüÇKY(—Â*›Ú‡ÒÙjèû ÙêÚÃINwÔ‘­­N|E�XB[…Y“g¾ X5rg(E¡Í†9é¶d}½%{{ú·Ñ>Z®@<¬ŽÇƵ¦Ÿéž¤o�ÀÚ*ÆŽOù&P/…Uéñ’žµ¼óÎ;zâò Z½^/þßú½ ;˃ÿKúÑ-YkFò0d·$꟒Ä}ÙßnJ­Ö”íýþÙµr�0„¶�Øí7ÎÂ㥀b_èŽpýúõ¤V¬ {ͪ£åä|¡ �.¡­ä\›Äš<ýÇKÑ Œ³Ú¶¢ÀfÕº™ó4Àe ´•˜0=¦Ä_kfM <^ ˜Þ¤Ú¶¤–-5øD¢kÚ?ý!ÂIWZëuiuÿAº­º¬·:²ÿí up�.¡­¤ì>jÖ\gO+° /ÌÆ]Ïæw®– �B@h+!ûá€Õ Y8sÝÕ«É_ mè�œŸýèÀ¶‘Z6��¡­d¬™3Ø\÷·›`&~mµl�B£Q�eaMîGE…9nß\ŒÕ¶QË DÂàÎŽ«Ýíj7ÔÆ»ÇÚ}S»¢Ï‡Ñ¡¼ŠÖ]˜æ£hÙÒ…Û….˜9¨Âž…Õ¬Y+Žëìz¶[uVu=†‚õS ¬ÇùaYVGÖe0sÀŽS ¬ÇrcýTëq~X–ÕQ…ṵãTë±ÜX?ÕÀzœ–euTa]3ì8ÕÀz,7ÖO5°ç‡eYUX—ÁÌ;N5­ÇnËú‹Ô6DŸˆ´Ö“×Q?� z" ]VkºÌºE·é×~nyNÆÃ~V ç_¥×¾®ŠO|ôwe«^“µú¤Ó×BæTŸIgë é%Ï1cŸ¨Ž*¬Ë`性 ×£!¶oˆ<§omDVÀj`ë¦ïáL'º¬ÖO dº<›ºlõX|&ö³j˜m=§ëªZhsóe!kH£} +?ºÌýÒÐavÌ>Q!UX—ÁÌ;N5®G=BüøÇ¢ª½¯áBƒ¡mz„6äͶ«ÚJÔ|VšÑÇñü­5#Û%&x"ýý·¤Y»&ÍíÒ×tÇ>QUX—ÁÌ;N5®Ç4´hmØ0Ó $ÎÚŽ:";nÃ~V ³­GB[ö‰ê¨Âº fØqª¡p=ºÐ¦ÿE6j„¶ó8WhKƒñ¤ëÙϪa¶õHóhö‰ê¨Âº fØqª¡h=º"¸ Ö mS‰›.;[~kM]vz´µز´åºþC‘êëø}¯#´UÛù×clìskkëÒŒ¦ý«apéÉ Î[úC„Ý9Ö×[²·—üí>¶kÙ’kØòØ'ª£ ë2˜9`Ç©Öc¹±~ªõ8?,Ëê¨Âº fØqªõXn¬Ÿj`=Î˲:ª°.ƒ™ƒÅ/ì'Òï¾'w[r#»æáHÚR[»&Ñ'çºâr”z)�ËãÑ£ñçØVsý äø`Gšµ5©mDr8õŽáÊ„¦¬ovtï*RTn\¾¢õøÅ_èúîÅ1½ê–YEÇ‹i¶ùpUa]3‹]Ø9êléÆ;¼7O‚Ð6o§­G;–D‘ȃi,„-ç·ÿ»­‹¤ûÎ-‘O?MÞ«æj¶Ð_÷— ÏÊfç³´¯Ï/7nJ»÷8íùòëñ£>’?ú£?Šû_½zU>øàƒôÕöÚk¯É›o¾©'0z3Ai÷‰A_ö¼#÷Ó›�'ì–%;Ò¾_´½æ/ÎÞæÏë<Ó³xU(ß‚™ƒ…/ìÁ´5Y«mewÂÆü­GÖ®_·÷“×X Ä_{FäÊo‰<óE~ïE‘ßüýd¹'Aî›é˜®LHŸ$`³—è'—n?³0òòË/ǯóÝÍ›7ãš·Uf¡Í-IáÍÞ+ã‰6²ÖhK/Û4¤mIý"'s=Îaz欔ëòœ‚™ƒE,ìAÿl7¯é¸oÈíJC¿£–U 'ÕÄQ{SêþŽ¡g7Ý{?•VsC7Ä_Éq/’Íz-û\6Îú¶tó½nÄwõ³öú]Í9H‡ô»rïnKš7ì»ì»ÿ*ïHÍ€µØ­¹&ÍÖOåîNG~¿?azÍqO:Ö_¿3þ\zÓHgºïž=æÃšuZ†b¬&ÍjÔlÿN]ä¿-òìw†Ý×þ, r¿ö¯ÿyÉ5¶ODÒÞÜHk¸rÜÝÖmõ†¾þ<ÄX­Âv3©¸ý–¼jû@”’m?iÒٕøVmXSoßÑmݦ_=xœ:NuÔ‘M«{µ-ïÇÃî³±ô 7,7Þýxšâš¸š–Ëkl²ýìí·ßŽÿžÕýèG?Ò}q5Ï”üÐæº|x³~Ë–Gj·äöíïÆÛPr+„ÜôÚvþÙqÈÍC²=ž¶_L8^L±Í/¬Gô²pfÛ~Ñô8“ƒ‹fߺ`æ`Þ Ûý< &ŸIgóYýŽaA?¬&öŸÅçý,^ÏDv?¾›üŒÜ^ka¿ÿ0}¾]ü¹[ÙýœøÌè†Ô·v¥ÿÄ=*%Æ{tJÍv®ø •Ž×OºC%gWºÓu~ tg(ž^ÛÁ’iJv Ýåãæ¯ê{ÚïžoQXsõÇüزvM¡V£f5k~Xó; rèlØ¿|eØdº8'Òné÷Ù¶VKïŸåš½ÛN >‘hÃN„ìv ‡é¾:<Œ4éìÞO éç½í{$1N;ð$ÓQKöÙÁçºïߎ75èµõdÏÛŸbé5÷£´ÌXÞm4hê¶yyê©§’ù>£»råÊÊ6™…6×¹ðfÿ/SrlJ·»ÏÓ2ß߯ kÃܳc‹ŽaãûEññbŠmÞƒüÏ—â¡ÔøôÄN;.Á²×å"3s]Ø®À®½"‘=¡ÜÚ~5®; ä6ºô P{õ-¹½õÙïÞNjèâ×-éþÝø5ЃÂV#«}K zýLV“5ÜÀ_Õ3þ­­Hz‡»ã;‚Û9²³öGòa×]»V0½n>³ù$‡;ê”ß='kkï†5×½ðBRÛ6©;í³tãݯý›äïo?WÔŠ:k6µÏü‡FºÒê‰F¯$gô.0Å%W+æÞw×ݸ'¿tÛuC^mEòaOZï¦û¶êGÒôÇ?Õ8Ó2!ÛOÙwFžÉÉTVS˜`]Y³XÖÜiÓH7Ú]ׂÃZ¾ûÆ7¾Q8|¾;íš·¹Ê›ÜI‡·¹ãÇÈ“²Ú.?�¶_/¦ÚæóŸ^×9R›V4=gÏæ%tÁÌÁüvÁFæ6°‘’߀ɆV“çß—{‡ÓqÙëMÙÑ •mˆÞ{ÒÜc5 Ë‘«6Noò˜Öô5¶~¦ððŒgôîÝîÌÇvâüA ?½E;“ûÿ¬Úïž»fjR-›uzrÿ¢‘n>ÝÏ®aw3Y¶_ÑeþÍâ æºõ?ùòWDþâ?%Ÿ_Š4Te!Ýw¶ï'Ûìñ¾´lɶk·½ú'Xi¿ú-Ùî<Ìm³n{öNÓŒÓ,³£;¹ñöWnøO7n+KŽÒëŽô ¹Õ9œû¾4‰Õ˜Yñ¥/})þ;M÷Õ¯~U¶··u÷Vª{饗 —‡ë¬¶Íþ.‡;VxeöX-Ö„ò¹°¶ë´ý"}Ï?¾M³Íç?ç¶÷‘ð§ ¦ûìãàâ-o].N0s0¿…í èü™BñN0römÄî Ý˽ÖZ½èôÇ]}SÚÑ}éùmøY Z¾æ¯àÝîlÅß±ÍØôæçS}OQ¿S¾{ÜzœÔDúúëñÛ˜3=>Å5gÈ~÷OÇÃÚ×ÿBäÊWE~ýK'zÐO?´,nŒGrýL>Œ÷‚7¬prý ¯#M·çÓNf ÆéNβ2!«9»±a¼q'û{C6Û‘tzÃdYìûíZµd:Nïì‡ K«I*«m+Z&þumöz9òevÑ±É ãŸ´œ~ +Ü/Ò÷ücÈ4Ûüèç>—îö†ÔŸË sêt§Ë¸è8¸Ë[—‹ÌÌmag׸¤Õ¶cMˆÆ5ŸäÎÜFìv‚±Âm˜~µ=¬x=7~_ÁîÆëŸ zrï^otgò.Ä›Þl‡sÓ↩I½µ/I›ò»ç(¿-¼Ù…ïÖ,joYˆÃâÜy7YÎ_þZr}›]ÇfM§Öï{ß·¿ž¹DnŸl¼!wï¾+÷³3o×ãÎôÝ6ìl&°RÙµ«ÙðÓŒÓ|¹}¶hßÉcܸ‹§e™Ü~fµIÏ?ÿ||ÝZ|°L;»ÞÍnb·Ye~h³&ÔwÞyg,ÀÚ{ËáŽùcSщ·_>çÞ9m¿(8^LµÍûãÜÓ“«Ê–ûOQ ßÈøÏ:.ÇòÖåâ3s[Ø#aæ‘ô:í¤šVw‚݃®Ü·³b7Œí‡r¿Û7ú|ÓçXS¨Û¡oIg/=‹p°«SökÎè=鯧ñÂß]$ZÛ|OºéxlÜ-‰âéKvæì{ §×}¯÷Wé}ªÜ¦ñר)¿{ŽN[.¼-÷׋«ÇŽIöC[ö‹Ñ?~Þî㕼w)…šÛ~ÇšJü€õ‰î6iÇÍúúîžtï÷ô`âoçùƒÛ¾íàñ éÝÿP·ý)Æé¦'> †÷xó忆±§'}éþ¬«ãv56»NÇ~)wOî¥eȲä×ã;wâXëì—¥Üd7 mÖ¢(š¸<–·Oø¡Í;6éë»ÝýøØ4<æìÊaO·WÛ_Î,ÿsûEÑðÓlóÙ8m²0·'‡n{ß¼+ûñþ¥ƒ:=“ŽƒË±¼u¹8ÁÌÁü¶;ƒ°[f¼/½£Ó ¬)ÛûiÁšá4d3:ÈY»³‡ükåÚ÷ëi¸Šé0òógk2é ÿ§Í7Ùu Í·d?Ý ¿øPº{²`t‡ÙŒ¼qM¯öÎni¢ßkÕÑ;Èy¦üîyšf=®hKÍÒYP³¦PÿXu9…ÚC¹×úiáÏþ‡ú¶}êYÁŸÝ¶Æ(ù¿ ÍxµÞþræ8í¶>;›ñ~P¸ÏšìZžÜ-tÜý³âÏÙ÷¶/­y4Ïj,œ|ºøŸÃjÏ ¯ËÛ'rÛ«ûA˜wlr¡mäãÊq¿ü?m¿(:^L³Íg×Të{;û£')þñ¢hzÎ:.ÉòÖåâ3UXØ`=–ë§Xóò¬Ž*¬Ë`性XåÆú©Öãü°,«£ ë2˜9`Ç©Öc¹±~ªõ8?,Ëê¨Âº fØqªõXn¬Ÿj`=Î˲:ª°.ƒ™vœj`=–ë§Xóò¬Ž*¬Ë`性XåÆú©Öãü°,«£ ë2˜9`Ç©Öc¹±~ªõ8?,Ëê¨Âº fØqªõXn¬Ÿj`=Î˲:ª°.ƒ™vœj`=–ë§Xóò¬Ž*¬Ë`性XåÆú©Öãü°,«£ ë2˜9`Ç©Öc¹±~ªõ8?,Ëê¨Âº fØqªõXn«°~ìœUX:ûÙü°,«£ ë2˜9°…MWåU´¾èÂì0EË–.Ü.tìÙ�VÆ÷¾÷½¸à¾råŠÜ¹s'í �a ´X }ôÑØY÷§Ÿ~š¾ �åGhPyv Û׿þõ±ÐöòË/§C�@ùÚ�TÞÛo¿-O=õÔXh³îƒ>H‡€r#´¨´^¯WÖ\wõêÕø¥�Pv„6�•eÍ¢õz½0¬ùͤ�B@hPYöCƒ¢VÔ@ÙQRÐcéµoÆak½Õ•“´o»Í‡Ýâ#Ò\Çí?�„‚Ð PÇÒmÕÏ mÖDúôÓO6ënÞ¼™ �åFh¨éB›)ºG›ë¸W€PÚ�júÐfòͤ4‹ ¡ @ ÎÚòͤ4‹ ¡ @€’À–°uiFÓþ§³éºÐf÷o€Ú�¬ l4‹¡ ÀJ±Ð�!¢ô°Rm�BEé`¥Ú�„ŠÒ ÀJ!´¥€•Bh*J/�+…Ð T”^�V ¡ @¨(½�¬B€PQzX)„6�¡¢ô°Rm�BEé`¥Ú�„ŠÒ ÀJ!´¥€•Bh*J/�+…Ð T”^�V ¡ @¨(½�¬B€PQzX)„6�¡¢ô°Rm�BEé`¥Ú�„ŠÒ ÀJ!´¥€•Bh*J/�+…Ð T”^�V ¡ @¨(½�¬B€PQzX)„6�¡¢ô°Rm�BEé`¥Ú�„ŠÒ ÀJ!´¥€•Bh*J/�+…Ð T”^�V ¡ @¨(½�¬B€PQzX)„6�¡¢ô°Rm�BEé`¥Ú�„ŠÒ ÀJ!´¥€•Bh*J/�+…Ð T”^�V ¡ @¨(½�¬B€PQzX)„6�¡¢ô°Rm�BEé 4ý]Ùª×d­þéôŸ¤} ¤ÝÐáÖêÒê§=§Ch*J/�%q,ÝV]Ö[Ùk5¤Ñ>AúN¡“®´Ö m�V¥€’x(QóYiFÇám­I?}§Ð”¡íµ×^é,´åû½þúëéÐ�P^„6�%±˜Ðöæ›oÆAí´.Š¢th�(/B€’XLóè£G ƒšë®_¿._|ñE:4�”¡ @i #Ù¨i˜Šˆð( q]yÜmÉúzKöö’¿ÝÇØ\ðº%Qÿ$C±ÓjÛ¨e B€Ê›TÛö /PË „6�+¡¨¶íÁƒé»�P~„6�+ÁjÔìú5ج– �BBh°2ìú5jÙ�„ŠÐ`e¸Ú6jÙ�„ˆÐ`f®ÖŠîü�œ%€™>fÃr0 J�3#|̆å`”�fFø˜ Ë À,(9�ÌŒð1–€YPr�˜ác6,7�³ ä�03ÂÇlXn�fAÉ`f„Ù°Ü�Ì‚’À̳a¹˜%€™]Nøx"ýî{r·µ!7Ú2Hû†„Ð`”�f¶üð1£Î–Ôô{×ÖêÒê§ý§¥oGÚ÷?K__B€YPr�˜Ù¥„Á´5Y«mIçè<õlGÒ‹¶¤¾vSÚ½Çi¿ËAh0 J�3[VøôÈvóš~ß y£ýCiè÷Ö6;Ʋaj·äöíïÆµqë­®œÈ@Ž{‘lÖ5èi?ëüÏNþÜâÚ�Ì‚’ÀÌ–>‡‘lÔ4hmDr8øL:›Ïê÷>+›ag2LMê[»Òÿ¼#›:üè0¥×¾9ÃçƒÐ`”�f¶ðð1øD¢ «{E¢Ã'ÚÃ…6¯‰3?ÌIWZë¾üæSפºvK¢~Z‡6Íç„Ð`”�f¶Øð1üÑAÖœéÂW£-½8W 主-u˜£´Æ,¦¨ß”Ÿ[B€YPr�˜ÙbÃG¾)Ô…¸š4²[}L3̬Ÿ[B€YPr�˜ÙBÇk®tMš®9säן%j® ã_—VtÜ4Ÿ[B€YPr�˜ÙBÃÇÈuh¤×i'¿�­mÉîAWî÷¬QÓ_Þ0úúnw?Æ¿EÈáÜïöe0ÍçˆÐ`”�f¶ØðñD£W¤¶vMš­÷¥wôq¾š²½oÁ˦&õÍHz‡»Éuiþ0YøkÈft Éíx§øÜÚ�Ì‚’À̳a¹˜%€™>fÃr0 J�3#|̆å`”�fFø˜ Ë À,(9�ÌŒð1–€YPr�˜ác6,7�³ ä�03ÂÇlXn�fAÉ`f„Ù°Ü�Ì‚’ÀÌ,|ÐÍÖÀyQr���€Ð���B��@�m��� ´��€Ð���B��@�m��� ´��€Ð���B��@�m��� ´��€Ð���B��@�m��� ´��€Ð���B��@�m���¥'òÿï¯TAæþ����IEND®B`‚����������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7i.png��������������������������������������������0000664�0000000�0000000�00000037774�15030617045�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��é�����ÿ1Z ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��?‘IDATx^íÁkÜHú°óoô9×ÜrË©O¾Ìe/s™C|™C {hða` sh0 ,L`a>‚À0Œ¡i‹¡1C0 aƒiX†ùc–!„æýª¤’º¤–•–UÕ‘JÏ ±R]-÷ûè­W¥’üH����� UP¤����´ Št����€–A‘����Ð2(Ò����ZE:����@Ë H����hé�����-ƒ"���� eP¤����´ Št����€–QY¤?zôˆW^.)ëŸWØ/×”}¯°_®)û ^¼|½\RÖ?¯°^u¨l]·3è®cŒ3ýÂG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekﲬW²ˆ&2<Š?k0šÈÿ›Œdðè@Žf7²6Íän)³èß2=“Qô»Ù. ÁØÜÊõôpÛ?µ}9;“h:–áàHf·›ÿé;>âíÓ¡õj!gщŒ‡Ïd<û#Ùx÷«LGOäÑð[™­>$Û:Ç}î¶Ÿ®9ä—¦qÜ5W%í^êñvÉÊl…ú¸vÍ›»ºÞ:{)Óñ Æ3e�|êÆ·²µ×D·~'Ñ¡=‘ÑôW¹]Nå@}žþÌø•%Žß%=6Û¿”éò¯x+¸ÁuŒ½:S….´Žþ-Ëܘ¤¼ïätWg>.dò¸Ê?u"é4¹­åîú…^wª¨²ñoo­"™8>² ˜‹‰<Ž·?îî$@©»Ý Sù¦QwÍUÕ¡ðµi7ƒiwóOpíšëþl7žn&(jSsL…-êÆ·²µY4ïe1ùBõ?áäRîÔ–µ.Ò_È?þñåö,Bš¸¦…" šÒó â™Ð§…ÁÆÌHÕræžY¬Û™Œã«=M’[] ŸÊhÐíOñöçй‰ž«ø fÒ?+ÝrÈ7 ã¸s®ºScðPµcâ«)®]óåîú&’CíÆƒ¯?dL…"uã[ÙÚ,d5ûV†ªï]D\ÀsÆï…®$˜r”K‹2Ôçn¥õêRNÇñ¾4Ÿù^«qï(.ìžÜ èËŽ§ãäèøòñöæÐúZ¦yWàóÓ)‡ZM\• \qíšwÿ’åô˸‰nÇÔ~S7¾•­Ë’ ’º@7¯,™Ü·–.•k(“…žs·Ñï‰â5VIÝ›Eú܏ޱ»þìü ™\ühfˆ¾–hõQýÿ2??/} Æò{:H¥¯Ô¥x=^”¬ÁÔÓ­™=Í©ûüK?G$N^Êy|Ï„êwx$ÑÒNUeïß$Æìs²™®ôU,×r·œ'ýÄÿ?áÑ…¬ÒÝiúwp»>uL¦Æ¡Oþ±}bßïR\§ib¯]œL(.uì7WÿäîZ¢8÷<‘Ãè]IÞ©ÊO–/éd…Ú—‹Ø/ë3bôþœËDûªûŽeªöùÅì­è#¡Ü½”äw‰½÷Aõ=~! ûŠõ$žÚŸ§Ž½Å{ÓÐíuHç W½œÈè‹4O¨ïfq¬b¶óM!£ã§âç { •Õ_|í¿fÖ<¬ªŠã§ò¡f×\¥öÕ,/}<Y‡RŒûÉ?mÀµ¿núÓqœ™Ü£ùnMf¥T{kø¥¯œ›»x 6uã[ÙÚµ|1Ùš;[–|Á•;SK ûBÒZ¯^˱D£ärõ¿lgyõpc7ý¥—|uÒPÅÊÝ¥Lâ$ üÈÍüXƒRv•ÅJ*iÛÜÉ¡n;—‹Ô·ÇY|¬ð/+ªU‘]Ë]v/…Ýîž÷[Ÿ[ÞgáJRZFr|¹R?š5Ô[v{п›kÜôi9¤‹Œ%qË0mòÑfº‰Ñõ[™¥…¶zéµÂé{[üî„êü”.50ïÕž¦'é¶ØKÓYêÿðXwʃøäàof­pWýk©b+-´¬å>‡‘Üh¥ì5Ðñ±ñFnãeXé¶²BÎ-ú3\Ó¼O{ݶ~¥Çª•_²˜«‚(ýÎâýi–sÚï³NØõëàD./ÒâGO@ýVÇòáN¹J“îK¡`ë`þiúûuIóþlõ¾»ì¸ÏÇro“v[cjÌ®ã4ØÔoek×òiÒ3ø­%»±!Ÿ8Òö¹$S´²d´}–Õ¸Žqóþ6…DßÌ »W”»e…»&íão2™¦Ë­LrÉý¿íPYr² ,»*9ùܸþ©>5é}éÌå=ë§[†á¡lI]æP·ÂÍ¡÷"Y¡~ðƒ\D?È÷—¿˜;íÕkUÌ|›聆ʲ»ä§ìNõwr.ß|£úûoù%élU³õö,ަΗ¹[vYîYîÚ9ùdv&ߌ_ȵê?Ù?»O?´Ó!*bâYsýÝcg®°èÓµ¾Ù±kø¹c<Ý®b>ù—|—4[yîSq,ˇ5rUéÄW7óOpíoÓþÖ« 9ŠÝJciå3k2awoËÆÔã4ä¨ßÊÖ®å+½üŸ’\¹ÄQvÆŸ&}¹ñ7¹Í.é$O‰).ˆj\ǸqÙÙ¸u99+€ï9»· ¬p/,J¦ás'Û7–úW–œÊ¾¬ÐÉÞŸzz_Ÿva·)âÎÛ¥ÌÌåæÁèT®ãØN\û£ñâPV—;”/DÒíê$îßÈñ™êÚ¥üÇøHŽõ –m{@~²û;šÈ©.¾³},ÆÙví’U¨§”¹›õo/˰òoæ®u©cãhòcìÛ¶Ïþh¥C)Yî±s€:†Ž$ºÑ9dsœgW'²Q,VÒï_;4–oŠK3Ëâ¸s>¬Ÿ«6Îw7ÿ´×þ6ë¯ÌÇÔ;ÛÞf¹ÄSwöŠÔoek×òm›bòºg°ÌÚoÖ7mf}Ìk0’ÉËWù5–°3®cܬ?ëìܨ²˜—žÝÛÎXG¡¸È¦á×rbf6Üã_–œ¬¤cL›¶›â'ÙfÏÀÝ×gqf.é3y©‚nòo9[¬¬c¤èýuM³>âP±(¶– ĘåU6(YÛ¬>wËOeýYï-)Œ7³^ê•Í\Åÿ“õUæc®¯Rw7ÇÑ£ÁsSx}ö‹þ׸ë3LOªõ±ý/9Jc–Å¥ìx.+éöÁPF'‹Í [LYk¸\;WYW”:œÚ€;ךô·«»{kåªÌÁ:9ŠÔoek×òmÉ=³œ…Ár;èö:AnLpA›L®`È.Ë•Í)ÊŠÝÒÂ]cmÏf ,Jý++Âìâ{s)qk_î2ýnlÖõÞÓ§]<eÏïîÞsº]û£qåÐÆtÖ(ïÐ}Eñf{Z´–ùSæå®ù©¬¿OÆÊ½l­¸õ™¥în K»¯ì÷*uך»'ûBï§kÜõ¹™Ž‹t}lÏÌ”ÖñœÅ»,ohìc?õÊ¢ô;ßxRkäªìs¬B¬Ãù§ ¸ö÷áý•/––»{kåª,—ìê%”Q7¾•­ÝÊW&PÂfðÐÂü)ËÅ[•ÓA˺uù®Ð‡¬—ÙÙ/…Ù øncܰ¿ìr™5k•&úÄî,fzÉ@Á¥÷ïd>ÿÍZ’ º¹™¿–·Z‘l»5XY”ûW’t²›íµì…}¹ùEN'ÿ–ÿDãܶÙâOÕ6ŸðÞßüGæoÿR¿vz£b±(ú 7³s¹b¹ËîdEH™Cª0¹þM®®ô ¡5Û¬š»·²ˆŸ€QR,—fÛìY§óSY¹"í­qP±:—iæDêÚÆÉrw‹³¿ºazu Â]³¿›“íîÒ|/þÐûéw}Z>Œ&òòla=é¤d9‰uCñcõ=ÿ¹øÙ¿›|²ùþ7”Æqç|¸k®²>Ç*ĺœÚ€;×ÞŸ•Ó¶|Ônü"7W¿*kx[6¦~ØÕK(£n|+[×í¬š|²Iû–Xƒ‘|wr–È‘ Z:è·ñc¡Î7òé ¢/É™5žëÕäôôgõ�ÜÆ¸i…@U8]Fß™Áë@þ1‰Ì€aœßÉÉäE|ùS\Œdrò½Lã‚Ü*Dr3)÷øW,²Çí©A/÷H²×ñ+¾›þf³mð•MçÉliæ´¾œüƒL¦æ’wöYú÷1k@õ“Nÿ-ó–/ãÒûìšf}æo^ú¸º’Y™CV1?ýSN"S@çŠe]°”²Ö65È]þ¾Ÿâ¥Öö{óÓ' cý¾£©*ŽuÜMÛìzéeæôÄàwíã#εéSTßǯKÝÝäd»OË]èÏr»>Ó«#›xn°®œÄ±|/ËËH&±?*OüãX¢«â û¤.å¾8î˜wÎU›Ï‰‹+ýèM}ÒñÝÍ?m@o.yx…??®T±ü²ÄÇݽ-Sw§¡Œºñ­lýpYJÈfJÎÖÍú¦äqe&)ØëBGÇr‘ÎædÏ+Ö}©—~fðlYHž°+Nc¬hÖŸui.Žëµ¬ÌÏ9îq&[g§Jü±xkÉ,SŽ{úZ-ä,~ž±ñ,þÿ‰¼ÜrÍz UöüéÍòŠá8’eš°2§‹ÅÒY]þ`}ÖŒ§³ÍûZŒk42³::^‘*ž?/ÊóK>›A)- Ë YkæHyzj¯Ýýd~ÚÌbmúÓo3OdÈ=Óú/y;-××éͧ›ß)ù¼{r§&{æºÞíáÉöãÒœœ>§à®GšÅ»w}ª‚æì{+ŸÈn 3Ǭ:!‹ÖEÍEwëĬt¢à¾8î–wÏU›ÏÉï_wóOpío£þÒqßH€¥žÍ‰Š¼Un•Ž©»ŽÓPFÝøV¶v)ßöàm U :‡xãP¿À!è2®]Ãݰ©ßÊÖÍd1gíqQþ?s™Íº9 Z šà#Þ8Ô/pºŒk×p7lêÆ·²u3Y̺%U¤_\ŸÇ—rKŸ¬Ÿ 4ÁG¼q¨_àt×®ánØÔoeëf²XõO¯{:½´ÖàB[ Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ð!Á@|ćúA—qíî†MÝøV¶F–ðiO‚ùK–Ó/ã÷ójð:˜Êrm¾Ò= ?Ó5¿r0½–=*®kšö¹^Nå ÷½ðªÿúR¦Ë¿Ì7.úwuÉCûÃY¯=ŒŸúsêPÙºngÐ=\Çgú…xãP¿À!è2®]Ãݰ©ßÊÖ—…­æ¯ýÌhéÏr‰ëþ Ýøˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚ5Ü ›ºñ­l,áC‚&øˆ7õ ‚.ãÚµþ¸k?ª»øJS7¾•­ItáC‚&øˆ7õ ‚.ãÚµ~¹»–ÛÙ‘ öü—²?'uã[ÙšD>$h‚xãP¿À!è2®]ë—»ÈlüTã™Üš-õø 7g?Êü¶;~ÝøV¶&Ñ… šà#Þ8Ô/pºŒk×zåîúZ¦Ïd<ûÃl¨Çú&’¯ZàêÆ·²5‰.|H0ÐñÆ¡~CÐe\»Ö'w×Ë© ŽdV{&|-wËs™Œ\à.êÆ·²5‰.|Ú–`âƒVõ¡ûI/­W—r:>PÛžÈaôNžî–2›Že¨ß7üVfׯd<xš¼ñ™ú î/½9eÓß2Y¼»X¯^Ëñè‰<<—èæC¼Íf½ZH4É îg ã Yõd ]>rõ‹6:cÇ=-$Ö+Yœ&ž #¹ÙŠß­,gSõûähv%Ùå|ûF¹L¯eõ§|˜\ÊîBm»<ÖžÜãª~O4‘Ñ@÷£^Ú×Õ¶o°\ûÛ¨¿’\•ùT,†+sžrìì¥LÇ_mÁë›3ùæT¹ÿdœËânËÔº°ž©>“<<š^ÊB¿wk=ºÝNçÉs¹¾8²öÿ½,&_˜ßQ¿Ì±”¼YQu ~~êÆ·²u#Y ¸Ž±›þô:µ/Trø¯:X_Éôô?ª˜)_»¶^]ÈÑ𩌎_'ÏÝBNFÃBB2‰D'ƒÛ_$ŠÞÈÝíL%¤äàþ¨Š§³ÙRnãâ®xÀÕì[F2¹XƃhRöçnô*|äêíuH“ÜØöX;sw-gÓårõWr³[±èYßÈìè@£T]4«bâäkwSø6±_ÉUôJ®ïþ{»õQGs娛¤Ø*0™«“sYê¢(.Ê|ƒ}âÚßæýY7cjŸ~ºŒ‹ÜÇÖIeuÎ3>ªýØ.€u}fmÓu¤ â¯>‘Ë69ðør¥Þ¥>–Ñðɽ¹2i§ú_œ¨v yÛÊÇ›7«ÝÙíüœÔoe릲ԟѪ>ƒ²ûK‚£ºx‘œ1egrjÛåñ,CùL‡~O$=ã÷¥Ï´n ûњƸˆ‹þâ8'2»<•ñq:»T2Ý]ÊD'šé¯I™IÈÐé{O.ärnIêÀ~–™*®rÛ²ƒY'ˆcZ³¥Ù¶â�ÝS\û£Á¡~ÑV‡bâ¸ÿM&³¹—þeƘ²!™ÝŒNUÑn4írqNßûƒró?V¡­}{)—³Ÿ Û,cWofÜ5ñ¶‡¯é…æ¸ö·yi!ý¹ž_%E¸Í®9/ngoÓõ™^bò$ßNÞñ…Ùp›4ßÊôzó®$WÚUí Evšsþ®Çàç¥n|+[»‘o×­Ï ²à¼‘Û«Ÿ$º~Ÿœ5ÆÁ¾Uø¹Ì–ÿMSœ©ÊβŽåBµ½÷l¬G´/Á˜™«áP†ö™ÿÖmÈâ‰XÉÁ›¼÷@Ƨ—&a¥îWr4›÷—¸P2(f3v‚ë1®ýÑàP¿h§C}µäñ3ÿ¾Y´åGZ\—9•ø`Þ;¿…Y¢’¸õDFGS™™÷ßçjnYA6žÙE ì×þ6î/¾Â§rÕt–œðåØ=ç%µ›¹Â£7®U]õöm~›Þ|ó³œ]¥%˜˜ïÛ8¾•+ŸnMÞn eÛjƒŸ™ºñ­líB¾øËüäŒÖîgPipNf¯enÚƒ±D—sU ÛÛì³§’$— ›;Yè­K0ibÈl%Zœˆ g× }·÷áÀ>xS¬þbÿôÕk-g‰“›“¿ÿ©̹Dñú=•ü¢kŠ+ƒk48Ô/Úé&_þªïvP6é¤X¿“èði®8IÞk÷gÜÊ]ѽÏU³ô@¯%ŽNd¬OþÆQI!ûĵ¿Íú3Îþ&“Ë?Í6‹sž&Í{ºŽúKVW¿Êj]t󙟞ç þä&z¾½4lë˜I÷»ØÎ¼?Wd—5ŽÁÏMÝøV¶n._òÅrFkç3(œáXNz¶]aËÁè™Î~·¶•œä.9§3÷ùƒ¾Ñ®£0ƒQî’î}ÅÏÖmNÄ>qð&^å×ÚÝ7ðêß'^z5>‘(š3 pí‡úE+Š1ñËMìÜW@ Ÿṯ}(qÎŒ_¹þîs5öH½Ôø7ÎÌ„|n\ûÛ¬?ãl.¥ÔÉy«H¿ùM–ñd„µíö£Ü-ùD>ÛÎz?’cÃ>fÊÚ)Jgáu[{]¼bçcðóS7¾•­›Ëg„©œÑºOœ’3(“ÐìK5é`i?)áÞÁ2îKßù%ëÞ‡Gõ<ѵ+Á”»°Ï’RŸtÍ¿—ѳ½uð–}FY©»E/U«×r¶(™¥è!®ýÑàP¿hŸC†²«€.sKÇw.Ç£g¥>ä ‘’ÏØîÏøV\—«YßÈüì*_ØÀ^qío£þbŸîy*Pœ“湿Ëôò73áaúP9íâzaV3TÖlö‡¾É^_Q´óbÉq»}|(Ï ÇÖnÇŒþœ²cðóS7¾•­Ë™ŸšÑ*I\š²3¨­àa>5øÆï3³úRóô¥DæF¯¾Óªcb—waÏë›_å*w6oNþâÇEÉìòeâÇ…Jóß”7eÅT‰o™“ö6éY¸½4Aà]Ëáazç8¸öGƒCý¢}%Äá++®“««äjn²--ŒTѳx¥Æ—Ÿ%Šy%oæ¯å­n¸5~UìÈâú?Ùºõt<Ü,oQn雸Ÿ›{¸àsáÚ߇÷—žÌŠÚŒ]s^Šé/÷ˆÏô3v}à†É•ñĪvö•L£…yôâ2[è%4ªYZÌ› ظfrãããâÍk™¿Õ¿“u̼'³³_⼺ó1ØêÆ·²u3ùÊPúeZí|UÖ_Õ`Y,î7O˜Ù Ï"Ïeaí_ßhO‚Qı+>© ‰qn‰“æîW™ÆOèy"£I” fqœÕÏéc¥ÊüØ(ñ6½¡¸¾STÑ‘*²’¼Áh"/9¹ËáÚ õ‹Ö9Sv²·)P67knåzz/GÑñbÇŒ7Ù£àv¿2W‹Wyu£u7ˆ·Gúqž/Y:Õ\ûûðþŒ;U3Ç;å¼íìwª·s©Þöìü7”·×§É3ý³GК“…BñŸk§ ù•*ê“c&}˜HÒ.Ý–´‰7*v9ÛAÝøV¶n&_Y’Kg ¬­Ï JZÉ`™,~‘y6 §7Z‰ïn)“çr¸%f¿hO‚.â#Þ8Ô/pºŒk×p7lêÆ·²u#YvžÑÚñ j« OÛØ3f[îò²áîZ¢øùëzFKŸEþÈ7  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àt×®ánØÔoekd  4ÁG¼q¨_àÍ_²œ~ï¿~ Æ3áïb·×®u×]Ø…ºñ­l,áC‚&øˆ7õ *áv&ãÁ@¦×²6› ¸vü6uã[ÙYÂ§Ý æƒÜœý(ó[†©¶â#Gì+ﬗS9PŸÅlåç¥Ëùa­jô#<úR¦Ë¿Ì6h+®]ë¶»ð)êÆ·²5²„O›Ìú&’¯( ÚŒAÞé8T䙟ʣƒ©,™Ÿh=®]#ÿ…MÝøV¶F–ðig‚YËÝò\&£Ïþ0Û øÈä~CXêÒ)\»Fþ ›ºñ­l,áÓ¾ó^“/â~’—¬ÞÈír.Ñt,‡‘Üd#WÒvo3³Oñ{ôeâ[Y-^Èx8P??‘ÑôW¹3ïÚðAµ‰ÔÉÀó¾9šÝ00Ö y¼·qÒçz%—Ç#¨¾£ärõ_YœþÏL¦Ë\6®è%ä&z·O¶§¯'Tß‹h"£i3üVf«æ?¡.ú;t“>××2=ÐùCÇÙx’z58’™½ ïn)3•Ÿ†©ׯT¡ý4™d°ûIß§:MÚ'ùËô“[êò»•ÓÌ‹ÙõÖ¡ãâ×ýA»¨ßÊÖÈ>íL0æ ñ€”Zé@e¯Ó4…U6`š¶ƒ‘|7™È÷—+µ%-¾ì÷)Ö72;:Pܱ\¨‚>ÿ™Iø4>rDó>SžKt£Šç4Ö¹µçæd0÷ú7™½ÉŸÈÝý"Q”ß¶^]ÈÑð©Œ&ç²¼SoŒ °ÇÌz6 ¥—´'UaýÓ¥\_Éc«°Îœ8~-+½ín!'£a¡Oúy¬¼»–³éêÄñ/ã©Ý®°Ô%v÷kOg‰oÐ:\ûëãx€öP7¾•­‘%|Z™`J Ÿ{Šm5¨ÍOÏÍ€i¸Á¡L¯7åX2sjfµbL6<–E6ð™Yyn"¬…ѼOsÂe?ëå©|mûô©%woTþK¡h¿”Éð± '—›íñ¶g,Ëj@;JÑ9å™òä?r=¿JŠp›8þª@·¯Ô™™ó\.‰·ýM&³¹LÇÿ2y§dbÀöRèÇßKO"@[qí¯ãÚCÝøV¶F–ðic‚IŠêb1^Vlëm?Ééâ}òCiá•Îħý­ånq,ÃG_È$}Ÿ^ö2ûV†…â>á¤Ï´ >ºØ.¬¶œ( —"ü´(¼¯äÄ.»s*×Ìr>˜Ö:¤‰sÊÁ=3Ùör;³IS6É ûyüL†Ã¿'Ww4[í6^žÌ.äx¤òQ™ŸÐ*\ûëãx€öP7¾•­‘%|Ú—`î_v’éV¾~'gß¿2¤àr—Ž5¦¿¬¸²/'ßÊrÉt| þÿˆ«à#G¸êS?èP´åf¾c K r¼—«èÕvÑmŸ�êõÇщŒõIÀ8bBCÚëPšSþ&“Ë?Í6‹Ø‰ü¤&ñÎ>L‹ï'r½Kr—Þº5‘^úBÆÿú§ŒJú†öáÚ_Ç´‡ºñ­l,áÓ¾“^^¶gà ¹™rý õ©œ¥³Rf€ÛZ®¿ÇãŸÓõíz†ì¥D³e¡ˆƒ]ñ‘#ÜõYvÕ$-ŽÊ å”:i›oÝšYÆ›áX¦Ñ™Ì8©sB{ª:™»oR p¯CŒé'·¼®d2Â̬Ç'•eKf •¸ö×Çñ�í¡n|+[#Kø´.ÁÜ3;c l=p½¿™Ë‹¹õÔ²KÌérûr´ÕG~ðû «ù¹,r.| 9¢QŸ·s9>µ(z‘ÎV‹+ÿHfÙIŸMZ¤—x©›Ÿ]QH5 u¥Oðs”Ù±CßËèYÉR—bN+ÉWù™õ²þ¡¸ö×Çñ�í¡n|+[#Kø´+ÁX³SïßÉì¬pã^:»4ú§œnêK8k@½»–h¬× ëÇïÙ…Wº¶ØZÞr·”‹És9LŸÎ�;ã#G4é3ö {$âZip*£5“nÏPfOoÑÏåÿykf|}s.§sSX¥kܳå-æYþ‡Ïå8~Š<”¶9”ž˜ÝsßBv²—>Ah%‹³3™]¾L ò‹…Ìç¿Å^ÄNN ³‚üú7¹ºÒþl团]?Nö•œ-ð¬¸ö×Çñ�í¡n|+[#Kø´+Á¤EúH&QñÆ=EZ`oÔJ8õÙÙë¾>4¦€OÚ>‘ÑäG–.<fñ.çá}*®®äíÇÍ3Òc.¬åLæJн=y„^ú<lë•›ÅÔEydž»oÞÿrÎztèïÓ5Íû¬Zêb¸ûU¦ñßXÐ9$’…>14³ïÙãMnÊ_¹KO�d|z™´+™YON •oÜ/Ój\ûëãx€öP7¾•­‘%|º•`þùôåöM}eìñ&ïô ‚.ãÚ5Ü ›ºñ­l,áÓ£ŸÄòsùÌe<{ußeið‰x“wúA—qíî†MÝøV¶F–ðiu‚‰/÷~¯Û\œ½J.'oq+×ÓÃä/2¾w|äòN¿À!è2®]Ãݰ©ßÊÖÈ>mN0Éó†õzOó'Ø $7VÙëˆïy* xÃGŽðÑ'´‚.ãÚµ‡ö·=òªýÚÃdŸþœ:T¶®Ût×1Æ™~á#Þ8Ô/pºŒk×p7lêÆ·²õÃe)yÚ¯š¯âŸ·÷ƒþ,—¸îÚxãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>$h‚xãP¿À!è2®]Ãݰ©ßÊÖÈ>ÝI0öc=¿”éò/³>'>âMÞé]thó‡cöó¨\h/®]#ÿ…MÝøV¶F–ðéV‚YËíìH{ø«`°>âMÞéuèv&ã}ǵkä¿°©ßÊÖÈ>ÝJ0ÈlüTã™Üš-uYßœËéüó4ÅG¼É;ý¢›™ ƒÁ‘Ìn73é {“õ¹hó¾·yß\»Fþ ›ºñ­l,áÓ©³¾–éÁ3ÏXd¯ßIôõ?sƒ*4ÃG¼É;ý¢›%ËïºXŒƒ[\»Fþ ›ºñ­l,áÓ¥Ϧf®væn)“‘<fPuŠx“wúE'j:a�ÁàÚ5ò_ØÔoekd Ÿö&˜µª«g2¨>ŸÈhz) }ãèÖzt»Ý@†Gçr}a_†Vÿ¿8–¡Ú/½oñ+×Ç­,gSêÿähv% —Ôô 9ÂGŸÐ^:á:ÉŸMÇqŒNåÍâD¬Ø77’êW²=·-Î9dµx‘äšá±,îtRÛ.Ñ@õ{ÉÍÖüƒ~O$“ÑÓ·ÎQ7*«Ù7Ò?5' VÿƒçÝ|HºP¬W¯å8îCåÒãײº]Èi´Tý”ï{ëwsìø…,Vißõö£ŒÚû¦¯ˆ¦ß‡õ~+³l¿Ö«…D“‘ â6z|¸Uú¯Wryœüß`ôƒ\®þ+‹ÓŸjßï¤?Û%®ûƒvQ7¾•­‘%|Ú™`T’Ÿ}+ÃÁHŽ/W*YëŸe4|Rx’B±.ÈOT»Ç[Ev’ì ÐúFfG&Aëäþ^'_«þÒÁ>…AÞémwh½º£áÓ¤€TÉg½š©¢yXr»Ê“/ò“�ñŒûc•·ÞÈíÕO]¿OֲǹèV³ç2[þ׺÷å§c¹Pm³‚Øî_ß¼úXOH¼—åÙ©œê<ßÐjç0s/9 H~ŸâU€’}×ùôúT@˜âYo7òÖ ÅNûQFý}[¿ËÙu.»Ë]üÝÚÛ6cÃäb)wjK~ Hï)0'éwý€É×þ’ÿ¦n|+[#Kø´/Á˜™ïÁ¡L­¤»]dWµ+ %ƒ›IüzVì:žÑÒ˜v]RÓC|äòN¿hµCw—2Ñúô×¸Ð‹É ï£ã¢4ÿHÆ4oÌ^ËÜ.´c‰.çª@··ÙyǦٌûfÛ¦ÔïûJ†“s¹œ~+Ç‹÷ñÖ­\ïï ð¾oò'eû~É¡.Ðíß]ýïæ$#}ÿŽûQÆ÷mƒ>‘x%ÑUò™ flxô…L̾dÛ²ïxû;_/OåëÒϨƵ¿ä¿°©ßÊÖÈ>­K0ñ ¸=�Æ ß.²Íày½ÛnW¶Õ4a/ÅšÄ+æ¡ 9‚¼Ó/ÚëPÙì²"Î'_ŠÏûŠW•O†c9]è+}Š´(©Btö»µ­$?åŠÌtfØž”гÐC¬<X–ÃÒþÒ¥2EJö=]R’;IИþs¿ç®ûQÆöÍB/gù)ýnSÌ2œ\f'ÙÕû„#mg/y�®ý%ÿ…MÝøV¶F–ðiW‚ù 7Ñó­Çšm?z1½TYlgÞ_¶ ÷b†x`zzÏŒ ”á#GwúE[Jf’‹WåîË=INÉ¥iAn- IrQ~mô}ù)éKß3%÷Ü $ŠgÞ ñ sa-ûVÁŸbrc®ðOÙÞ÷t?·û1míß¿Ö~”Qoß2î~‘(zcÍòkì¢þr·œK¯§?qt]h«ZÇ1Vñ° úº¸ö—ü6uã[ÙY§] &IÈùâ9i)YcY,²KgáMÒ¶“|<¨l¾Éç”ÏØ@9>ry§_´Ó¡{Šñ8ÇØË3’¢¶S¶òLÙ,tÉŒ³)zõï oO_J4KÖUoH‹Ñ|a»]ðÛ”-¡)Ûw»ÐÍ÷³]Ô>d?ÊØuß ëßeöâç’pSÔÇß¾ÉõDòsYæ®Ø”]µ¨‡k}ÐêÆ·²5²„O«L:ód €úr晞 ±˲YšõÌåÙÖÀ°]З ëÕ\ŽGÏÊglà^|äòN¿h§C¦xÎå•,ÎNd¼uccIÛ´xÍm+™\(ËeéÌtqB/y™ŸË"î¯l¢¢Xðë}8‘S;Ïm徊}/æÒl Œý•]ö£Œ‡î›Bçúóü«¦H/¾G¡Ÿ"s¶øS}¿*ןÚcGYÿm\ûKþ ›ºñ­l,áÓ®c~|Ùt-wËW2æÑ‹?Èlñ«y€)æ³'¨B>šÉe4ŽÅ‹7¯eþÖ$úl6ëFnfçru·6ƒÁ³~R |‹WÍ~–(l^É›ùkyûlÝC|äòN¿h§Ci‘mî[¹»–³éOÙ£Of—r•ªöäB¶£¤x-¹‚—¦‹_dž­­Ng•­å-ñßyx.‡ÙSVôgN²bó¹¹Ò¹R¹_YKknåzz({¶ºtß枟l ·úý£²%7;í‡Ùžã¡û¦—ÿü\˜ÿ 7g?Ê<.Ê7kÜ7Ë[Ô{.Žåð0yŠWüg'ª}üfÒa?Ôoekd Ÿv%˜4a>’GÙ£³ÌlJnö¦ÐNò+UÔ'ƒjú8FC<0>‘Ñ$²žíkµ¯ƒÑD¢xp4ƒjö8FØ9‚¼Ó/ZëÐݯ2MŸß=9 ä¨.Üä˜.O±÷·]§ù©lƺd½tZ«ß#ùüÍ“`âý(ÎÇŸ©—x¤Ï1ÿS®ïäcörïÒÇ9Êö=FO’œožÏ®ÿÿåö²‘Ýö£Œ‡ì›¹y6þNìWqí¼*Ê££¬Îñ/³åBê;¿º’·7ÏHßþÝë¡?Ã%®ûƒvQ7¾•­‘%|H0ÐñÆ¡~CÐe\»†»aS7¾•­‘%|H0ÐñÆ¡~CÐe\»†»aS7¾•­‘%|H0ÐñÆ¡~CÐe\»†»aS7¾•­‘%|H0Ðñ~xŸæþõ~^}Ý÷—ý¡?×5>ú(õk¸6uã[ÙY‡Mðoê8]Ƶkº?^a¿êPÙº¬s^á½\âº?h7>âCý‡ Ëàø»À)$¬~AMÁ!è2¸>Á.p «_P`ASpº ®O° œBÂêXЂ.ƒkàì§°ú4‡ Ëàø»À)$¬~AMÁ!è2¸>Á.p «_P`ASpº ®O° œBÂêXЂ.ƒkàì§°ú4¥+­oÎåtþ‡ù |>Á.p «_t¥À‚öÒ ‡Öï$úúŸ2»]› � ä+ð vSHXý¢´šÖ;t·”‹ÉHgrk6¤¯À'ØN!aõ‹ÖXÐzÚëÐZîÇ2T}éþâ×ÁT–·K™E'2>ø»D7òmÏ“m·3¬÷|\Éâtœô58”éõv¹¿^-$R'ƒø³2<º÷­Ç‡¿�)ØN!aõ ñÆ¡~Ñv‡ÖË©<úR¦Ë¿òÅ·*¤¦×ª<7ín"9<•ñ,]·þ‡ÌÆOe0úV&“©\®Tñ®—Í>I ÷¬�ÿ «Ù·ªÀÉäb)wjKî3¡Õ¯À'ØN!aõ‹¶XÐ~ÚíÐ_²œ~Y(ªÓ‚<_¤«­r;ÿQÎÒÙuSÐF§r}—¶2ý ŽÌúöt¶þ ™,Þ'M²Yù´ ´òø»À)$¬~Ñî º@«Z_Ëôàq¡WÄÛ2°×©¯—.â™p]hßÎŽd°5žÌ®gEÿÝ¥L†e8¹4ïSï\]ÈÑ𩌦¿fÛ ½¯À'ØN!aõ‹VXÐ ÚìнËNL‘¾™aÿ 7gÓÍ,zºÔ¥x³©)ú“¢Ü.äÿ'w˹DS½ný@ÆÑ5zG _O° œBÂêm.° ´×!SD–º$ägÄ×7¯äû³w›Ùö¸f­OטþÒ›KÓ>Ô¾Æ7ŠŽO$Šæ²Ì–Æ@ _O° œBÂêí-° +´×¡{fÃcL­×¿'³?çžÄR6Ÿ.c9ŒÒbÞ꣰ö|½z-g‹?ÍOÐfÈWàì§°úE{ ,è ­u(¾ñS?­åFnfçr•›áNo�Éw'g÷ü_:c¾–»e$c½ÎüøµU̧7ÚË[neyq,‡‡?$OƒÖC¾Ÿ`8…„Õ/Z[`Agh­Cq‘þDF“H[s±·H׫«}H_ƒÑD¢Åj³&CåÑQö,vÝîå,y #t'®ÜvSHXýÂG¼q¨_tÓ!ý¸ÅrZöG‰xÆy¯ _O° œBÂêÝ,° MtÏ!½|åg™-· ô¸x¿÷fSòø»À)$¬~ѽ ÚF7z/‹Éßä`ú‹Ü,^ÉYéÒÅݯ2=Ý~®: ù |‚]à”‡',³ÆS½ŸWƒ×žgðôgºÆGŸÐ^:áùsþƒÑ±\”Π—ä/þbh/ðá/@ vSHXýÂG¼³"‡Wo^®ñÑ'@¸>Á.p «_oh#x û×À'ØN!aõ â m/a_àø»À)$¬~A¼¡à%ì \Ÿ`8…„Õ/ˆ7´¼„}kàì§°úñ†6‚—°/p |‚]àV¿ ÞÐFðö®O° œBÂêÄÚ^¾À5ð vSHXý‚xCÁKظ>Á.p «_oh#x û×À'ØN!aõ â mäsx¹¾9—Óùæ§ø 7g?Êüvm~†2Èàì§°úñ†6²w/×ï$úúŸ2 ¨ ]ßDòõÑLnÍÏP9|‚]àV¿ ÞÐFöêåÝR.&#y<¥ ]«_é\&£ÏBº2àr ø»À)$¬~A¼¡¸óòƒ¬.Ñà‘<ŒäøòFn/%Zþ¥þO³‹cªÏÒŸ¿¦²Ì&Óu±;“éøÀü¿*zO/eeþ½œÊAá}ëÕk9=‘A®à·ûÈðè\®/Žd08²f¥Ú#YÞ•Ïì¯W ‰Ô‰Å m{taöë½,&_˜>’ÿ;˜¾‘Ûå\¢éX#¹ÉºLÚâmk¹©}ÊÞs-W—rjög0:•ë­}Qßí"R'OÌgÈÑìFý&ÝBï;€/° œBÂêÄÚˆ3/og2<‘Ãè*UQ9ûV†¹â8-¶¿”i\¸§ÜÊõôPÒº°_Å…§^>r˜õ•ò‡ÌÆÏLQ»Ÿ¿È…*l7mÒÏLûÑ''2>¶ ùôdቌŽ_›bÛ|~\üªWvò°éor±”;ýî­ýÿK–Ó/Í{ìâ[¿ìvä&zž?Y0ß×軉L¾Oö%ù½“ÂÝ´Òevt Š÷c¹XêßÂþ̤IW ‚O° œBÂêÄÚˆ+/“öéfÙÇúZ¦_ŸZ…dYq™¯‡2½¶Àè‚üi¾m\ÔªÂWçóERÌo0Åw¡ŸÒ}:˜íd“~oR\[í²bþ ™,Þç·Ù…vÜßã|QþN['#ÈüôÜ|nú™ªHŸþŸ�Ĥû—T˜Ùúá±,²Ùu3+ßÁ%Cä@ð vSHXý‚xCqçeZP~+³Õ³Í¢¤ Mgއ“ËM¡ª1Åê¦H7Eíp,ÓY2«ãîR&ç…™wõ®ÂÌwòsa¦:=y°‹ê¸¿Ç¹ýZ¯.äH}†]ToϬ'l(ÖËŸä4+øKNB4ñ‰Hºe' éì~ñ¤¦Á'ØN!aõ â mÄ©—úÉ-‡O 3¿ ÛmIqœ«¬Ù⤨ËåÖSaL_XZ“ÍhÛ…p:S­û¾•åűŒô‰B¶Ö<åÖûõ?¹3k̇z|tm Ü¿ìdëd@}/gß¿ÚÌÞÇ¿_¾ˆ×$ïK‹r»Wû9‹’uôÃ#‰âe/݃>Á.p «_oh#ν,™…Î ß\A{Ïlr¶\ÄšAÎÍ01|qù‡Ùâ{ÒNõï¿ôìüÙ"»I5Û¯øÿõM¥'Eó’Ku»düÖ>åöWý>gS9»Ù\]ˆ‹ñ­“ ó{¤Kq̉J²êaúR¢²«¹k�ØN!aõ â m¤¹—ª¸<þÑ*´Ëf˜Ë iS Šôl Lqf{ð\"«ÐÍ([¾¾‘ùñ¡<+›¥×œžÊÙ½³Ñf¿¶ŠhÕ­*ðÏ&?Ü3c lýû¾¿™Ë‹¹ý$–òµùÉ2ëw´úÈï©j;?—ÅÖ…öCŸ`8…„Õ/ˆ7´‘Æ^ÆEò›GÞý*ÓÑÓüLzVÐÞÈÍì\®âYéâÍžêçe$c= Ÿ{$by1Ÿ‘.a13Ðú‘‰gÑL.£q¼æâÍk™¿M us²0šÈË{g¥Óµàöò–dYÌáár¯··–ؼ'³³_ò}eËjþ)'Ñ=ÿ—ݼªúŽŽÔ÷°yºMBºÆßZÞ?gþ¹fO¦éä@ð vSHXý‚xCiìåíY¼½Ý<#]?±drž_éz{$‹ÜM¥éšðdYGiñ¿÷¾¥.UT_ŸfÏgŸDzéJZD _Sð«ÏÊ^z¹ËÖrS8›6Ûûµé?ù<³9e«߬;·>?þ¾Šß‹áîZ¢ìyîºÝ2ëèztþ=�|]àV¿ ÞÐFúâ¥^ªò½*r³?´^Éâ,’èå$.ð·—•4á™O_–üQ¢ûo6íä@ð vSHXý‚xCé…—ñÌööM¤ e7µ6A?‰åç{þ‚©žÉ¿çfÓ@Ÿ`8…„Õ/ˆ7´‘~éÉ£!õ²•(÷‡>Èjñ“LÇ_7û3ûñ“d¾’éõo²8{U¾tEõž,Ë)¹™µ'Á'ØN!aõ â m¤7^Þ-ef–¶èß9yéGF×y'O¤)Y‹ŸbÖ¨o>×õòšn o�_`8ÅNؼúñhx û×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AAáû×À'Ø��AÑ´pZ/§r úÐýðÚÃkp$³Ûµùö»…Þ�_`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��…ì \Ÿ`��….œxñÚ× ÀØ����Ð2(Ò����ZE:����@Ë H����hé�����-ƒ"���� eP¤����´ Št����€–A‘����Ð2(Ò����ZE:����@Ë H����h"ÿ-7¨2­óÏ����IEND®B`‚����hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7j.png��������������������������������������������0000664�0000000�0000000�00000017006�15030617045�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯���}���ŒŠ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��›IDATx^íÏ‹ÛhšÇëßðÙ·%·0—9ùäKf/}ÉÁ‡b 9 ÆàCC=ÖPÐL !`ðAP04ÌkvY² fg¡ …/3M¦ð°4½MavšP˜gßGz_Yz-»ÊŽË~%}>ð’ØRIï½_}õè‘|$�����%ó ����¥ó ����¥ó ����¥ó ����¥ó ����¥ó ����¥ó ����¥ó �ð€!³��»d着BN¡P( …B ¿„ÈAjjg��ìô�ÊHÈÚ…y�x@Ð;�(#˜WÄ�êz�eóê˜@]@ï� Œ`^=s�¨ è�”Ì«b�u½€2‚yõ@Ì .TOïnd2H·Õ–þxf¿+$ê4¥ÙË­ýfÁ\f“‘ ºíË?…[™F§rÔìË8»áùT.Ï:Ò0ÇÇÑQ[ºÿòLZG­Íût6‘Ñ +-û[±® n_H¦ö+¨.˜Wûwˆôñä¶%;AoÇÒoºeMéDì�€0ø$½‹MB‘~!Ñï»´4¤Õ}%ç㩱dÊLÆýVÁz®œJ4½¿ë™OÒŽÿn £*™sÉîÍkå:z*Í“H®o¯eÔkËQ{ “dÀ6 3¶;1¯ëøI&ƒÏ’}a^kŽu¨n^-³Ké·rÔèÉèÆ›Ýº¬}*ƒ«û�@8lªw‰9lH{peͧåf$ÝFþûdÝì…ûG™Ž_KWõòè‘tß{“°¼®ò£1?§›ÐÛq_šÁ™W5„ÏålÛ:Y» ó:¿ŽäéÙºíÜáÜk`ȼæÛb÷…y­˜WÍ;dnt»'ÆS‰®?Úï,FÐ{½‘`] D6Ö»i$¢;I±¹ò¾_µ®»à?úL“Ÿ’ïV­»á™×¹Ì®†Òi|Bve^gßÊ óhývvh”Ô¼.µóZ'0¯[uHAÔ!¹Ò~a®´´Ÿ•™D=i™}è~ÒÒ|!£÷INS£óLžÅÂno—Í&rÑw¹GzËíµŒ§­@ëwÉzþçùt,‘þÝ“¾¼u¹KŽœ]ºÛu�»åoû›L&y÷îDQ—ßüæ7òë_ÿ:-¿øÅ/’c~EùÙÏ~–[_‹ÛÖÿøÇxûZ`7hŸoÄ.Ì«»àÏFpýuçßIôôåjÃ3ŸÊxصZºÐEeɼ®Z7ÍÇ|.Ñ»—Æ\êò¶ôF‘ëK÷Ù‹O/eht:9^ÛÒ^ÊtîrRÿY:oÿ´ÈmÉxvk«®oË’¹*ÎiOßÉ™1gqŸ=‹·‘.¿«M¯eœ¶áØô…9Y³—ÖCÏ“÷ùœÔxÜr-Ú×ËyÄkú_—-úà©tuŸKæ5ŸnÒìÿI>ä>›vZÔá&ßGEm™j¤^ÍkAÛ+Ê?üjb(e_踇Jy̫˷ɦ̯dp:Ìä Ÿ™Éî ‰æ}t“ôHšg”þNÆcch‡r5›M¸ž[+ŠÉ ÀšÜô„ Ÿÿ.£îãx{G“$mÁí¯(½`T Ô þîw¿ËRýW?ÿö·¿M çŸÿü眰©Ø®ãÿøGn}-n[º]Ýþ/ùËxÎèê÷ÎØêßÃýÙXï–ÌM¶Ü×¼µ²¹©®½3U´Ý•Ñ:›“éé¢ÛVÞ¼®Z÷÷rér$AUÃ|¢†È˜ÒèÊÖDSÍŒ—·¬™ý(ÓÑs£ç¥{ñï2hkÀÁl«Õ3†ð&¾}ÒX´}m485isG§Kçì1Çn_nù}ÚdÛàÚä s.ªº"'Õ‹¼.#wõ©ö¿;g½”KcfÓsVáXºsÖ"Ÿ¦OGßÛå/ÌÅ„ùQyõ4fÛ£ ×2÷Û^1TïT“ñ§h½öî+TJd^ݤ{$'ÑwfÊé硜æ"±öJ35îÊӚϥ‰hˆÝMdÅMöä»DTœyÕMd?'yKÙ‰›€»Q3¨Tª3jR5¢ª†R…J#®‡ÀEœ±uõÓõ³ì»ÌrÝÙXïVÒX¿>Õ¼fÖÕ‹íÓ‘W 8³˜-Ö åŒâÚuý[ÚV“ýÏVS]ýmÅší·ßÓóµæUÉ­ou>hÈ.¿O›RÝ÷ÚèÕki¹²´ŽWÿuûÿAïBfÏ1ÛÏ’»kéÎoî¸ø^F½Å}PôÙíËo{Í«j›ö¹êpHìZ'ÌkÉÌkrUn#©s3麧‹|.KrúØ\{Uïžâ¼K0‘Ï›U·þjóºîdàP3ª†Ð™Awë^E© ‘M­§FbUØ52¡f[Í·špȳ±Þíļ:“²&m`ñ¾ü4­9Ý\»®o¬Ö›×d»™<Ý,~û==/Ôò,¹õï0”÷iÓCš×5û_ngÁösè¹ò±­¯šÕžô_üsäù`ΗÙgFüz­jKÅÍ«^˜ë¼UM ­æµlæÕLã4*úöµt‹^-r#Wƒ“øÊR÷ãn­ÄFr¥Ÿ‰ä»D@¡ðÍ«×U‘×5 µE «<5zjøT ÕìUá6¼Š©ß¶} lèl¬w»0¯éZ2¹nl^ý«ËFkÕº¾±ºy]Ü]Ëá·ßÓóeSç‘[¿ -»ü>mzpóZ¼ÿä³AäÕ7M[/.ñÝÊÛx?—gÝS9Îd¿^«ÚRQóªZ¬Õ°P/Ä1¯ %3¯†ô)Úâ«Òxb¯šÄñ퓼`¤Ñ\—·:OÞ¹çD#+³+‰Ò Tlÿ’˜×  èí''ˆu0uY“®E#´U0èÛ²©Þ]PÇlüª,›—h—¬Ün!îžlN¨ùJÓ z_Ëdž "Äjݺ6ê—šDß4º¿µw»<}ðUß"ðZzCSg¿ýžž§Z}q)ç_~³¬ÁÞú®?ZÝH&³ŸÒœ×äÜò_ruW›Ò÷²ÚÏžymt¿‘÷ç9¿6ç…ìrÅÖ%Mé0-JúÔ™ï5}zkûÈåþºœW­ûªwÅÆûkJ«eïV¦i ^”Û룕mñÛ¾j¿%BuËÝE:TšÖ}ÐqƼ–Ѽ¦âWðÚ,C’ÄŸD]¥-Ý7¯¤k&¡û.g`s¦Ô‰™‰*ö‰K⾋žK³Õ•áX…ÕF^[O¤cÅ#é…Ú¢fMo99§¶ŽN£š¡'í:öêÂýpQÈ…N%­‚ï×þH1<ý722Æ&ÁFDz묌ÒeÈ>Ñë¢ÿ-Öl®ûC~¿~—ÚD_o�ÐïìÛ>&&*ùΘõ7oòŸÕ¼§ÑfLÈbM˜ÛW¢ÿÆègßxðÕKsŽ0ûŒý¿O›:‰rŸu¼lºšnsðŸ2Êõé÷·Ÿãr*o¢/î٧ɹ%ÛGΙ¼ê¶ÌòAfÌ}|“iÏ£YÓYØGkÚRØör¢ú¬¥ZºFi_c^Ki^סWéoäìܻ夢v|v·XoLAÎ+ÔB5¬*„Ü:OЇº4ê\Gò � îè]"£úoÀ¼&T˼ƷBÜ«Oìw¢ï}ýÂ\M/Þ#¸;¬y­À-øtÔ ©aUãʃKŨèº>ª‹±Ç¼„‡^@«éüÔ€CYÀ¼&T˼Æù^‘ôÓ[N¦´º2Mθºý}­5î¶“^½×ñÖø¦h¬ë¯ªópz�Û 9­î9„ó[‹P=Á¼Vμì5`*‚u‰$î Të $´÷(îô ô®˜êµjOuóš€yø4So—íê=ôä¡'-U½Í·×ù¨º]V0¯ ˜W€-q©üÂÔ§á l™O(ë@ï�¦*é\,S~k˜×Ì+À¨a-c¾T¨¨Õþ¬âƒnèÀáѨ«> Uv0¯ ˜W€-Ð(¡Š!ì5®š‚Q5Ð;€ÃƒyÝÌ«beF£„z —1Ù?tªøš±Ãë¾ Þþ²Òä~4ÀþªÓNˆ®vÍϹìÌëæ„ìÕ0¯�¢æª ""z‚©Úë³®wú“ŸÇ[¾‹:þùì–œDßÉmü3¤Í{þ¼,@X`^7óêy…2£"¨vŠrÕ. 6Ö;5ŒO_îèõ7ó?—ãm 'ÑQ¨˜×ÍÁ¼z`^¡Ì`^Ìë\ N¤¡¿¿óúi)·ã¾41¯P0¯›ƒyõÀ¼B™ÑW­è‹õa÷èëlªöʬûë5®f}ý›££¦t¢¿Êlò‡Ì¯6¤Õ»XüüõìJ¢nÛ.[”f,±÷ͦ Ì&2t¥Õx"Ýgú7ºý2Ÿ^Ê0ÝF[ºÃK³ý[™F§éöâ²d¨Ý/þ\žô‡i^l£óR.§ÍòùšºßÈd4n«m±ûüX:ݧÒÒõùÕBØ!˜×ÍÑ}… æ`CÜk²`÷èÉ¥ìïaôÙLïf2î·2FÑ~ŽÜG¹Žžsû™¤þh–ËQëLƳ[ãc‡Òi429©Ù”»5…§]«¹ÔU’œÖÎà[³†1££çÆ8>–îèûxñÚÈ«ãFbl¡\¥u0Ÿ»#cGW×=Ù®þm²íÅçGq~íV)�kÀ¼nNÈ^ ó °U4Y‡Fß™«U{‹Ãfzç›×<y3ùA¢NÓE%ù¼ˆXú)ËÛžOÒŽMc¾¸ÈíiqNlÁMøI&ƒÏŒAîÉè&oAýmÝõ`—`^7G÷*˜W€-Pñ¨¢Ñ:$ú+[UÌ%ÞLïŠÍë|:–ó·ý8ªé¢•ñm{”ºHêìRúÙ·,½e`yÛ‰at‘Üe67¯.ÝàT¢i²“âºc^a¿`^7óêy…* ¯tRÃ…ýt4ÏUû²Š|šyµµÕ•Aôoò~ô"oðfßÊ Í)}$³wi>ì|2”ÓÜ[V™×Õ·ê77¯6òïc}Ý1¯°O0¯›ƒyõÀ¼BUp¿ÉÝí¿*G±·2¯ž\¼ÿ½|ùökyÑt9¤.o´%/Þ¾–³óIlÓ‡³r¨‰üÜ‹¨jÁã|Tw~%ƒvÃì¯#g—Sc`ç2»z-½¡š^Í™í™ý-r`—ˆÍ«Ëy5¿ öqb†oÇÒ_Y÷¿Úm;³êö…y…‡óº9˜WÌ+T5\j`‰Àn‡WýU-Íw­*›é1ã³øiûÄþïâ ­® /ò¬ážÚw†0ÉSM‹þ ÖÕŸdp:\Npëd lî´Ö½m èéÿؼšútž$oÈE3oOðêþáR£¬nÛ-ù¢ßÍ}ÆÀ®Á¼nŽî+T0¯�;ÀE«öÓ¦…šÕº˜þ‡Ó;c‡_ɹ{s@Lb~ £±ÀRÚ�@˜`^7óêy…*¢ÆU ¬¾V_§˨QÕ“ˆj€þ[Jïâ7¤·û-úÞ×Þç2¸JÞ?ðàØÈ+? ¡ƒyÝ̫檊š3…U±$•`¾ZLSôRå4ŸÓ»ùTÆ‘{Š_KCZÝŒ&û4®nßD_!l0¯›²Wü<�jÎT(ÕÄê[ ê‰u‘V5­š"°/Ñ ôàð`^7óê˜C]PÓª‘X=æU85úX‡h¬¦P¸vkEM«½8<j^5˜ :\æ¢z‚yżì5¬ú»ý}TUcW5#ë «¶O#­z² ÷½½¦šTö¢ç‘}yõ@̡Ψ¡sFVç‚^M«(•-:©'m‡FVµÚM‘¨S>ë}@ï� Œ`^=s€¼jÄÒýZWÖª1 ÅЪ!ÕH±ÖËݺÒ誋 a] z�eó꘣fV «Fb5¢é ­ËÕR³¨ËÔ0êzZv‘zà¶¥FZ·ïLªTgTµ>ºL×Á¬Þô�ÊæÕ1Ø 5‹j.5«RM¬šKÍ5šnYQq†8[Ü2gPµèþHøt´�ÊFÈÚ…y¨Îè®*Òý‚Þ@Á¼z æ�PÐ;�(#˜WÄ�êz�eóê˜@]@ï� Œ`^=s�¨ è�”Ì«b�u½€2‚yõ@Ì . w�PF0¯´3( …B¡P(á—9H­Bí �€]ƒÞ@ Y»0¯��z�eóê˜@]@ï� Œ`^=s�¨ è�”Ì«b�u½€2‚yõ@Ì . w�PF0¯û뙌Òmµ¥?žÙï��öÇCéÝ|:–¨ß‘F'’©ýˆÙDFƒ®´š}ßÚïV±Éºwé­L£S9bÌa`^=îß!v¢šõÓ’„Û±ô›nYS:Ñ» ávÜ—f¼¬…y€ƒp½+àf$ÝFCÚƒ+™Û¯¾—Q÷q¢}¥22ezùR:D·3¹x!_~96j_ ÷iiH«ûJÎÇS¯öÁLÆýVR; éO2|vÏu}Ê:¦PUôX •ÀÍ«ev)ýVCŽ=ÝxÒ¥ËÚ§2¸º±_äI ìýÌëü:’§g*¢��»aûÀÜxמ4ÔÌ´Îd<ómÛ‰:Í­ŒÎÃiÝG¹ŽžËY¡ÞÎe6>“ÖQ[z£ë؄Χ—2ì¶¥Ù_Ôe>H;Œ0†wüZºz8z$Á·ÆNîk`ïeH7Y×gû1ÝÎwp˜WÍ;ÄŠxã©D×íw–›‘ôz#)¶®˜×Ù·2è<ʉ(À*ô¦„_B`ëz̯dpÜ“·o»ÆÀ>–îè{»À±¥Ñy0­3æôj(Æ*½µQI?a4ü󬉚FÒ)¸“–1Ž>“Áä'û徨˜y­éùÎׇ2—}°¯ýlÃAj¶U‡Þ>Ó«üæ*ÿGûYÉÞ–j˳î#üVLg¹Ð|"w�´žËhj̰Èî 8::•hò¾x]�ƒÏŸ?§\Ü­Ç6hò¸k.Ìcí;’†þß.K°FçI_ÞžY­jtäìÒÞZŸ_˨×6ûoH«7”Aï+ÿèk݉ þõ2è¶¥Ñy&ÏbshôoúƒL.ÎÒÛûª¥.Z›ÔɤŸn§-Ýè½ü=6®n}S– ˜‹$k Àk¯ÒÓUæ5ó÷ËiZ§QÜŽæ‹HÞ¹þPݾþN.Óþ1íMïÒÝäÛØêÊ0›–0Ÿ.þ®õTºÚÞÔf£ÁþßÞe^×í÷Ž1-ȧuÑë¤ßÍX /e¯\4NW2+:ßMëaaµ½egŸm¹¿R³í:¤àª]#§C™ØñdÕÛRn²§â˜×$ ›LT½er’5Ã6Ö]‰®]jÃ!#XM(c´Þýh ЯŒn酹ͅ\J›²Fǿ׻MŒ^{ëã|z!½ã³Äðdµ.óÜ@ã$’k·ùø{k çßItb¶ë¶ëá#9‰¾3z¨õ<NÚwº²†PS�úѲ‰]i^ÍŸÇ)F^Ïmk$­AMêi>·zMÌÚ6r›ü­;WX3›ž+ŽmŸ'íjt^Ê¥©_ÜjTm;ãm7½¿MÇgy½k¿ëÆôÿ–óiã±iÙT c¨GÏ¥e£ôëÆÉ?ßÕ…íæbXì³ !÷×Aj¶m‡$Âå&£~ÊiÎP&"Ÿ¶•bêOÞu“¹¦V£Ç0æ5lB£­ôN£­Ç‰YTÓDýÔå[̉Fêzÿ“ü¹ï_LŒ±É°‰öÅd͘ "X#ës¿4-ZF¹ˆà"ªkØÆ¼*KíHúÇÿœôWòÿÜv²îøÿÙþ.胸îÙâڽμޱߵcªuÉoÛõ‡_—fÿ?äýšqªë9Mû¦ìì³ !÷×Aj¶u‡ä"�jTOó¹OrILÍ•ÿøüëT8Óu‹&óªu¡öèñ€y ›PÆhs½Ót¨§6:™/yÓ¶ltrÆov%Qöv²Þ2Öu|­[idÔd~#o]úTl˜¬yZJ H¸Ÿyudn½gŸgØ*mÀ°ÔޤüÏqÝ Û¼Xþa©YÓhÿ¿Ê®3¯wì×™ê•cêm;éï¢àõã´z̫΅²³Ï6„Ü_©Ùö’‰@¼5¢—F&,öÖQVà³bšÜú9–î ’Ñû‹üäõ&óÚu¡öè1Œy ›PÆhc½‹ÔúÜKpѾ¬QY6:I$.ofÒw‡ºèo\ŠŒL|;û8~=U4Ë(5L+º²¬7¯ú*¬þ’ÑZú›Uæ5}ëLÁƒ»ÊR;’þñ?ÇýåÒ ²4þ®ãÛ\´S)0¯«ê±Î¼Þ±ßùcZd^w#¬§Â1¯!›±û²Ï6„Ü_©Ù'uHúÄiÑÕ·xeHó‰4òðXZ-# v2»|¨æ‹¯åÍÙ7é•x£û¼?ïËÉ“Z½®ÝÔ=¦0¯aÊm¦w7r58‘f.š˜}øêÂ>cŽ—érWoÇ/åôì]²nö6xNërþþ›ø¶uÖÈ$¦È®ïîx5ŸËÛ7ÆÌ^¾1z˜­‡^ÉИ«ôï..åüËo9´1ö=®Ù”œFg^–´3k^³Gy)Yr·ß Ö(úŸãè¢ÛîÕ[6_ÔR·®Í—Ms^õ\bþþêJëhöesb“q{÷ÁêeåŽýÞ1¦KÆØÕ3}¨k.³«×ÒŸ·ŠÇié(4áÕc³¹&ûlCÈýuš}Z‡¸+ÊW½Ù'òÕ«gÒ4b9]ež†Õ'2ÏeðÌŒ —ЋÊß±.Ô=†1¯aÊÝ_ï¬1Qí2%‹£‘É÷I±OˆçÞ ¢Zåž4Wòµ|eÞêŒlVë¾z)]cb–ö™>‘®oÊÅàWfÎ8Õù¡Ü»WÓèhö©~‡š×¯–Þä²0€ë~¤Àì£ÿFFúàUÖŒ¹õ›fÝ7jW|N"›72‰zÒrß¹»,óé;9³)cúc ¯º-Ó[¯RCžÃÂèëû]7¦é1’‰Üfë™_Í8åÎwî»ê£ýPvöÙ†ûë 5«ÂõFaÌkØ„2Fèìk^Wå²ÂZª0÷Ù†ûë 5CÌ¡ìè1Œy ›PƽƒÝ¡) ?çµ[R…¹¸Ï6„Ü_©beGaÌkØ„2Fè|*‹WbiG$“¥Ÿ †ûP…¹¸Ï6„Ü_©beGaÌkØ„2Fè@Ta.î³ !÷×Aj†˜CÙÑcó6¡ŒzU˜‹ûlCÈýuš!æPvôƼ†M(c„Þ„Aæâ>Ûr¤fˆ9”=†1¯aÊ¡w�aP…¹¸Ï6„Ü_©beGaÌkØ„2Fè@Ta.î³ !÷×Aj†˜CÙÑcó6¡ŒzU˜‹ûlCÈýuš!æPvôƼ†M(c„Þ„Aæâ>Ûr¤fˆ9”=†1¯aÊ¡w�aP…¹¸Ï6„Ü_©beGaÌkØ„2Fè@Ta.î³ !÷×Aj†˜CÙÑcó6¡ŒzU˜‹ûlCÈýuš!æPvôƼ†M(c„Þ„Aæâ>Ûr¤fˆ9”=†1¯aÊ¡w�aP…¹¸Ï6„Ü_©beGaÌkØ„2Fè@Ta.î³ !÷×Aj†˜CÙÑcó6¡ŒzU˜‹ûlCÈýuš!æPvôƼ†M(c„Þ„Aæâ>Ûr¤fˆ9”=†1¯aÊ¡w�aP…¹¸Ï6„Ü_©beGaÌkØ„2Fè@Ta.î³ !÷×Aj†˜CÙÑcó6¡ŒzU˜‹ûlCÈýuš!æPvôƼ†M(c„Þ„ÎÅ*”}±Ï}m æ` ²BB ·`^�¶#dí¼l‰#JøåРw�PF0¯ˆ9�Ôô�ÊæÕ1€º€Þ@Á¼z æ�PÐ;�(#˜WÄ�êz�eóê˜@]@ï� Œ`^=s�¨ è�”Ì«b�u½€2‚yÍ A¡P( …B ¿„!�€$Tñ�(+¨*����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”Ì+����”‘ÿè­ˆÖ ÑNJ����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7k.png��������������������������������������������0000664�0000000�0000000�00000021704�15030617045�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¹���i���>ÿ;²���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��#YIDATx^íÍ‹\ǹÆõOä’Þ$‹.Ú‰âU¯f£ ÖÆ-z1´ðÂĆY QÐâÀ€‰Àd a,0ˆsr1(Í€Q ìĘ¡Á £ }1ÁW C"Ä0¼·žªzÏ©S}úcfúóôóƒb¦OŸ:Õ§ê<õÖ[oÝB!„B*E.!„B©¹„B!¤rPäB!d-ù÷¿ÿ-ý~?K„„PäB!dnüãÿÈDè—_~)išféÓO?•ßþö·…tãÆ¹¥_üâ…kýþ÷¿/ä)Í?üðƒ¿ ²ŽPäB!äJ¨T¨âb²Ld"…")˜H¡Èœ&Áš«„‚º,MÙ¿þõ¯KóŒôî»ïòü—¿üÅž×$« E.!„BJ€Saø‡?üa¤Ä6|ш}Ÿ?ž Ëu¶†"ïzµ¡0†èËAE°–úßÿºC‘K!„LÈ©ˆ‹Å[8´¯Â/´¢n**„C+1Ê+ì ¨›ÊV;�dþPäB!DÄ„kh‘Ô!y|ÑÆ¡øëƒ2„°Uñºr@ã7P×2[f"rõÇbbbZ^"„2 ² ¢ànZñ?¶©À¢UvqhT_üaG#´øÒÕázÌLäB–ë !DQñ±¤Â ÖCu7  ]Mð›¨ËCüÛá3:#´¬_Š\B*�ë !› „O,Œ`¥¥5pýQW‡ÐÚ«þ¶“¡È%¤°²Y@ü@ĪðQQ K ­´Õ¢VE¯úöâ·§•·Š\B*�ë !ÕÂâ¼XÜК·¹Àõ$ììà/0žvv(r ©¬ƒ„TˆWˆX[Ôqˆ[0¶$–ÜðyAR·†M¼¹„T�ÖABª\ba‹m„LKhù×çßMsi È%¤°²ÞÀ2 1‹ºŒ„Id)„\^XxÉk˜¨¸ Ö]Š\B*�ë !ë |*ÕÚB_J2OЙ‚ÀUÁ‹ŽU•]_(r ©�¬ƒ„¬2†¸P¡A«-YxæôÔèU¼¹„T�ÖABVˆ[eËÈdUÀsYUë.E.!€uÕ‚V2ÔSˆ\¸(²Š„Ö]¸Ñ¬»Ø¥È%¤°²z@ èd2º$u1<³ë>I"— À:HÈê@qKª.„]Š\B*�ë !«ül!(nIU€°U±‹çzÜm(r ©�¬ƒ„,,Ö�€ºA@HÕ€ØÕpwð-_]Š\B*�ë !Ë!|ñWa¢!“€%ÑAÖ¡CG‘KÌ[t>’Æ›Òl-g~+¹¬ƒ„,žpr—Ý%›\sðîUwU}u)r/Å©ô;mi5jöžoÔš’<ý\zƒ·rqòB޾}c÷:ï%RÇ÷e©Ñ’vêŽY,F\ö>—´Ý’FmG:§nóÅ@zO¥ÝÚ’Z«cîpÖ@ÔîJÒù§ÿ|&½¤áÊ¢žHïÜo&×åIY°`¡ÞÁz»n“q íp–îI:0 òyO’z¾½žô„Í4bì®rG"wjN帽-5s¯µæ#éZ‘jDoº# 4¡pÇÒÞòbx«-}óÕÅ +ûFLºÆcKv:'1G.ä´³cóŽkçböŸÒiÝòù¹%­LˆÎ #p»¤Yˆ–Üy°uåA«‘`ÉZ_ô½P“­öqá]tÑoË–yGµÒc¶Ñd"aX5÷ŠÜi9íH«1X—fúÊo¯Mø¶Üh¦2ð[,™È‹ï$ݾiËìFí}IOeÑ=—Az¯$ÿ¯$mÖÍvß‹Ÿ°ï·\À‹|2?(r ™?«nµº,nÔ±!I/—²'©l×nÊvúÝ‚Œ0¤*¨û戴nPäNË •&›­¤[èÝ¢×{'ÒÉö-¤¡Uu¸]Šu)ØËÝ$I'rw¸ôä�®šÇV*ý³ðÌjµ}OÚ}çVaQñ^"D‡ÎÝ÷È|e‚<9ë1Ü=†]&<ïá¬/ô3Iš·|¹™óîJ³V’· eL™¸·˜p³~î eè»(x'œ}-mÓ¾ÚS´óibÚÙb›nÓV"í‡êö€wÝ÷¦™Ní;!ws¸0Û:Ö%ÎíwSš»Ïe`›v|çöÝåœ%Ù½;C÷¿Zë©tm›ïÏÃÑÀ•~ê«TO(r§%´ÀÆ•ëüé|1BÈ–ˆ¹°ÒNôw²Ž¹nm[Úǧ¦½9”F=Ǧ‘8Þ·•¾¶ÊÉÅ[9Iß·CP…†ªTÌŽ®R—ïR¡‚=ô¡”¯LäkZô+úÿNq¡û‡=ç÷™ûˆÝ¶áþ½(BÈ|Ð7,TÕáôÛïï(7*éÚ`·G6R™¹.˜¶º·kÞ á;ÿGj-I_|&Iû±$[·¼%8pO³ÂVwöâä@vîHgÏä#{7éù‚w§}ŸÔäFSv}—¼_Éò G<ðÿ2¡È½NȩР{£1¯k‰…tj‘› ëÛ’ô^› Ú(9aiw±CKæ\™ëC °ƒk»kÆbV…ghÝÍ%m¤†ç¤|•ç!/—¢ËÄåîû™Æôp_’ô9)½ÎæA‘KÈ|À‚¨_Õ¸À·Ç¶íôâ3%ôÆ‘a+k؆ûóÔÒÜë¹w„ǵí‘ÁÅOlËß}Îe.¿†/e.€ú>Ï£îw3v³#3V\D]X¶Ð¥È½$E¡U^%›ZæŽà¡?~ø{EÅelõ ÈÄf˜àüY#¡Û"× µŽ†½áÐâ{®~µæü™ëÀù òPØ'³Æ¢úÒ÷`ÎÙlÉÃ6ÓÜ:¼é3€Q„Ù‚—3êVõ®AÛc´±g]Iw¼Ñ"@E®·î^ žË.Fð»ÒSW2}ß YU}›Ï=ñVÙìÝg¯¼›l^ÂÑJß·×TaÍ=+ „.Ü–éº@‘;‰Ó’EQl%T¡ZA®§‹ï"Q Âa÷qϲýJÎáɯŠF=.hDt[Ôéñ¹ Ä¥M7¥™|&½A.ħÈר}²üVשï!› göÕÆnš¼l(BÈìÀ¢ÕsQð¶þð3y²Ý1ÑÌGÈá#{'¤…˜® /™¨¦ísaR¶I´ÍŽ]4ŠQ0Ξ'½›÷F&²R,[èRäNࢿ/÷ÂÊe †Ó‡¢Bq¨g«þH®±;{U-ª#‡ct¸Æìôf3Ñèa1 4Ÿ¡@Ì…äHËèÄ|²}Â@^.ù¹§¿‡üœy~óýârÞ<P†„Ù±l Ô¼qí'ü\²5F,Zëíö™‹\µÖ–´ÁCn o Êý~EÖ½›ð~4‚ºׇü|.Ÿá{Êû ³Ý_P‡ÐaDLéEC‘;/ Ã$ŽL`ÅVÄ̺h¾+ô`ÑX¨«ƒéîŽðçõ MÜò\ äåKXV˜]G}^Éq*.#׈,ŸÁùƒ àE‘kzßgòe01_A J*µºN{eçÌí6±9 !³ÖÛU˜43OtŽC­¹/ÇÑû-'¡eÄþ´!¾-÷ïÏÜÕ!ðûµï…wÌ;á{9;~"ÉþséXÜϤ{ðDŽNÏ}Ûïç˜÷Lw·)µ`^ Yrï©EÇѥȋ .4º�„A# `{a&ªNÚrB1¯øê ÛÇMX ÈDa ˆBë ç ¬Âvø?žÅŠ}°[(fÿeNq$i§/§*Òí±íõ?Òé›Ýoî`•ýÏä¨Ð(ËWn±Åý¿¼”£¾)…Ð|òJzG}#`§¼‡èœ®Lõ·x!Ç/¢i›ʆÍ&o¯m Ü¢.")àxü­.ÞH0ÎeΔ©]áóÀ¼'qiÛõÈ€ [û›lI«Ý)¶Óú>Á¹ñNÐÑD],)úMñÞiµ‹y kƒÆÑ…+Т ÈÇE_Ò}Lp2b â0‹áj–çÍ„!³p–§Z3‘§—ZÎ×|&‰6Y#¬¸æ¯‘†þ³ ›Øeö1yÞ÷ßg l£ñ8ËW±Q2b3y‰ÇIùÊ'¦…×Ëý˜MC·ß ì4÷ Â:t ÑÐ6Åüo*(»k“uDF¿¸Ye²Q¶+ˆ\ «"ôf…o<Ö˜s×OFóïÀÔÅE/wæˆ]d[T%]¿(r ©�³«ƒ#Ü[Y®#r?ýôSë¦PU?Üéñí@ärg±Å„îr¿eäGÖX‚Ð|‹€"— @‘Kˆãª"ÂõCªDÛ]Âq1èÊ~kkA–\?ZÇ0a•>ï°è.Š\B*�E.!Ž«Š\ˆ[Xq‰§l9_ë—{4ÿùÁ$h—¸èC•€O.~WLF›7¹„T€ÙÕAŠ\²Þ\Uä"\Ü!ó~¹‹)F‘KH È%Äq‘«–¥*‡ #d•€Oî"FN(r ©�¹„8®"réª@ÈbÑŽå¼CõQäR(r q\EäbØ´²Ë÷náRÄ5i|ø¡4ÿCÃOjÌw¢•JÉ2€‹Ð¼‡ È%¤ŒªƒþóŸ/x›"—¬+ñÂHn…EDN@] VÜE…4"óÅurvìÔ/.LZË&´ÅËñ“e€Žå¼ýr)r ©�qÄЯ~õ+»}êá Âb>q}xRt³ŸýìgÒétüV‡†«ö g›‚_~\Ø1ÛÎQä®°âÎ{aŠ\B*€ÖAXmó›ßÈ~ô#'Rùò&ÄÖ_þò—¶>Ôj5¹{÷nV/T�E—¡¿+ÉS¿}m[ÚÇXJÃý©]õ̵/ºü®á¬/‡ISjÍ=éè*–X~ð¤­-WöÍ}9öáÇ «kfç¿gÒK>_.Õ“çòª—JÒ¼#IÏGûµÖÜ@äbéú]“o{ÌMi¶¿ŽV-Aïõn"Oý±ù½*£ÀU¢ý¹/“š4’2Èö¯º]Ë®*PäB¦uðOú“üä'?±ÿ‡ CBhL˜˜65¡ÀŠÖ‹ÿøÇò»ßýNþö·¿ÙÏÄqÞK¤nËÈ .¿¬z­Õ1ò×¹„ØÿuÉxëû¬nNæ¸ZSv»9÷KÇך¤;x#g½]#|NlÚeÞo{ñç}5­ÅT;÷\é½|‰Ì=Á_×îŠ\\ûŽ4vepaD¨Í£sqM//΋„7¢ŒÎuyz-“3¿¾)çÝçæúáâ>/¤ƒ%ëý²øî7¨¨›¹ä ˜`ïqÖ3Ün?–‡[²~g”Àoí3ÈjãýáôóŸÿ¼t;Ó¦¥Ÿþô§CBé½÷œ8»œïz•ñCþ™ˆô¢nh‰ßHPê»E÷ó⸞ôÌž»°›¹S D¯Lœ'Cp]K(r3\LYžGÝklΈò¹J8q¬y ÷!ðÃûª�¹ä ho½ð¯ä¤s_n'Ÿ"×`+'U ÔÁQ–\¼Ä1‹•‰iSê@胤–\úäãDè(‘‹a÷#IÛ-ç’ ¯x¿W’6ë%"÷µsW1!ô²4…%Œ¹ö»2q:‰è^‡Dîˆ2Š÷+ä-Ì»+»¼,« E.¹<~Xcœ•6Ÿ}úÆo!ëŽÖAúä2Ì8Ÿ\€uô+—8F‹ÜS9noK­Ñ’vçéå´"W-¹“Ü®ÂÕ,¹—w'rÇ”ÑÔ"ן¿â!pç½Ê EnH0»ýkï_¬�ê ^“ÆÃO$Ùª;‹háØC99Þ7ûøJ|vlÌkÛ©œ„Ï«:¯›c¬ƒ~äTžÅ{,M% DꥩlÞO*ÛßûN*N4À~·M…{í·`ªr2ù׉¤ÜñÂ;p—@N¾’vv¬É&,ÔÞ—ôä­? ¸dþ6”g^à—Ž®@HEA@](‹®�ÆhKŒ®±»‚o³Ñ~¿…Hó£€'ÒÙÙ e°^-‘»BÁoU1êsj¯¹'û×6¼ ¿ßŠþ²+,u$ÓûÁ†èNdwÒ(g䮎ŽZ!;¢ŒÂýÌÇ¢»B˜÷s?"kt†õÆEÌ5wŸTÊÅKXsç En­Ü¦B¤_ÈQ÷Pöà(žUu€ÐxG{­<Åc;~˜¢öa[¾0"Â.·ž^ egëž´¿/WEÿ+­oh²ó&à{TÂ÷ìƒÓ¸1ɤr2ØF¬.¤ëÏô–½H®µžJ·Óv¾Ãµ¤}ø…tÓ–9oÞ\-›Ç¨:xù8¹„TIqrµÄè:Pð—­·$yÐpÿ#5ÿ(‡°RšÿkÍåYûó?\ãþ*X³ýH‚ávû¹.Í'O¬ÅÔ}†¨;Š@ÐÚïz1wU¼õSóPvÝ(F\z#”ÛfDeë±ô¬ðEñ:õ‰<ÈÎ +íß%×|.”Ñ'¤î—<0b[?ß“'郠Ü!нÑG·5Z²otÇuUª€÷îkÞKiSäP‘h*\z,g™SA ĸǨŸ›’~%={?kRgUf=\̸lÈvÚ—kF#1¶äҖܸ' â{°ŸõØ·vvg};•W'Þ;U˜’ å•MÜ“vŸÍ='Ï丷gïÑÍ65•ÚžWEúUó·yà™ „\ õËýòË/ýBÈ<YÔRÚ¹¼H´âì<·VZqX/íg·o,€Ý±ßûó„áEÔ:©çqbµÖL$UïÌŠÍÀ :”gýìE¤§V4Cœ§½){ÒãÊÉP½þšqgÀîÿ½?Ö‹|-CéWÎßæQ:HÈrÀ5.íKÈbXT}£È )ˆÄPÈAY?…ktl™Èˬ“*ò—‚[Lc‹jl麇i[N‘°Ž…k!ѱ…ó^#E.!×. ¨G£\ÈæPâL“úÐ’«”å¼]�EnF$F3qöPÒî·rй“cïs{K>lÊËÁ›Â±E±©¢î‘tz_Ë š­¨Óö™tún ÿêĂֹW|.Ç/͵­Û&Ê}%'½rÜû£‘ð›E•½ôä Ór›(2©œB‘û­ô½Ï-|“;/¾à…k–¿bg`¯Ó5eú6¹—ËßfR:HÈò€¸Åðé¼'²é`’',¹‹€"7#´0š*ÀÂ¥ú4þìî¡tö TuFfxll©õße³H!ÖeÇ;Üך»rxm Üur¿XƒZ”­¿«¹¶ÿœåEg~š|8_âiä¤r2èê,æº/:œPõ+Ê wÔR«ß³\¯”¿Í„"—닺´ !›üÞQÇõ‡"·*Xº*M‚uـ؋²2²IèhÉ"}ß)r×} ¶õHŸš¿%±vÉfÀ:HÈlÐÐF\‚Ù‚… ré÷N‘»Öx‘kÊ?sI¸&Î…@ì£úû’•¿!d6àeŒ:E·…�]¼hå–š=Íæ~¸wbî¾ãÃ]ÙÍ–ŽÞeHp{z$}kŠcìS¶jܳø¾å¡?s‚8·>ÒÒ&£;ñw‘PäRX ™-˜«S\)‘ëW,+ÌÙÐ2ó(ÅeŠ F°g 6óIÜ~Åè '©lo»{¶ÿ×ü¼;÷ä–l§ß¹9$¼ÊÎyãæó ­ä¹9h4…e„è£È%¤°2[0¤ ß\$†~ÒñʈÜ|2ø°ÐÄw¤•¾²Ÿ†D®EGBó0•e"7ÇO*ÏÂaÆŸì„l¿äÙç wÑ~¸!¹„T�ÖABf¾ 7Jè^ ¤·ï¬œÙªV™yk®ŠÜx9\A_äÃôˆ´wOzЖÙþ期<’û« ÀUñ¢{ 7ºr‘kЈC^¨Æ"÷¢ÿXv¼Py%i³¸.Œ9ï •fA,Ge·!¬Bý¡È%¤°26Kèê0;&1Ÿ{K©ŠµP¨ùV`¾ñQ6±î…çÙ×Ò¾÷Ȉ\·ÝÇD?;Þ—{»‘È=ïIR‡`‘b¨û—YR#FŠQ/\U(»ýÂëÖ¥©"×^¯¸8‘Û_Ã…æ o÷e7E^«ÂªÔŠ\B*�ë !ó/i¼¬+/tí°úÍ\Øc -—Ö:ŠÉ_Ý`v/Š-ÙŸÕ2ös¹*ê‹.îzè5Œ¹áõ6KäbrÙªt )r ©�¬ƒ„ÌX¦ðÒÆË{QìN‰Ë)¹˜À•îùh*ƒ¨ˆt›#±oàÞÐØ‘4^IE«=®$ ‰ë¢@ÇH‘;Á]¡Ý¦ATY–n E.!€uù«¢. ¾Urùß±¤B¡æ\𰨶;Fô?D!óí-n¿teb·ž8_Ý+£ÇÊ&ž™ëœ|.¸íåbtøøñ"—ÏÆºa‹º±è0aã È%¤°²8°Pê^êÕr_ðÂ-Œëzú…´`Ùõ–S+êÂá÷·2è|”‹ÙA*Û–ˆÙzGZÿ5›?ôqe}T„),°¹øNÒí›æ·Ý#L~zegç@Nüé‡DnBl;ö½r¨ !vÛÜçk¿<ÿ¤bðm~ãʧÂ!ÄÂQ,Û»JPäRX Y,pYP¿ÃJ¹/\ ¤»Û´‹ ¡]qqdO¨õÛêIW^[K®ù\kÊî³¶|hþ·ûöäa²/»MˆOÎpnDî®$O¿ÖÓ‘o.,ÆiâÎkóg®™<ó‹<àº#ƒh´Œxï#G߇n 9F@wùk®Àº>®a9–¹gTtøP°ö*Æ”¦È%¤°²xðRÇËõ«¤²)¬‹ëE.!€uåÎ&¯ì¤4B<j½}÷ÝwWþy§È%¤°²\`ÕUËÖªÝr h!lñŒÃz»þ蹄T�ÖABVXt×I2ް‡¿ëÔ[Q‘ë»·ó˜rƒçÞ‘NÜïK«ùŸy̹³¾&M©U"Ý©ô;mi™{нwIFÆðÃìÖþ3IšïŒˆ‡ƒýS Ñ-ÕxØ}*÷íŠ5~Æ-~—(Õš‰<íôsÇü˜±1gM8a \‚òº˜ûoÝŸ]€ó+‚ò&„¬:¤‹D±KÖˆY ¶® e¬ ÈõáHIgàÃm1æÎmØŽpE–`VdDîE¿-[¸—Rqz‚Õ[² ÛS L;kÔ”¹ ÿbÎäãæ³Oã@×Åië:åþ¸ëäÿ ¸rÅÊ4§>ÜͬÊW;�·e§s²4¡K‘KÈêa K±KÖ‰XÜ®RÜÛ˲r"ׯ¡«Gñä¬È üS:­[•YMd´öØx…Aç w2—ŸhéBs¼³ä‚Xäz²†ÃË^š8ÿ—Â/)yíàã£0Bátt½ö%@‘KÈêR&vé³KV*‰[eÅD® D]kuD#Ê9冿m2B¥ûª'iÒ”›£,‰…8ã,‰áòƒ5i´KÏZL:•¤y[Zm¸`˜¾xž‚ûD8Ûœïq�ïñ�ƒ Ú#ó¥Ö@w»Í;fŸ‘,{XO^È«,þŸ«v)Aóbî­xÓüÿúkik^‘PNê*Ð>ðß)'+ˆ½›Bi¬¿"WÅ¥)Ûá•^´ŒïøÎ˘²;+ÉÁý@c9š+¨ëJã®4myþ—4›¦¤Çšdc<îˆw˜[a‘¯ÇkÆ#éf# ãž+t´ÞYÚŠ6È+!dµQ±«“w (HŸe‚4þ®Ú‚×aµD®uK0â!¶ÖÖÎÝʇË_›ÿïxŸK qï[¶‚‰®HâÜ"Üê%5·úÉÿ9Q—ûnžÊq{Ûˆ·Ò‰³*êð4®wÛ²yvøÐ r/€ìý˜sZÑ>&_ö|·ü1'ÒÙÁ0ÿK®œ¹eÔÃg+Ç¡µóÐþŸuÔzû¿zÁìÄá¿ü*7£,‘¡ 4÷–¤¾3 Œ¹/¼ÃŽ‹%ìîwÍ;3ee§ûkþ}ù©K‹-?ìûßFàºgã†]iFïÅÏ,¹ÎòoÏ­Öf¿4c¸¢ž×=g“ž+²%ÀÌê !d!ÀJ¦Ôð>¼te ‹V[ÄvÆÈžAL(«bø»Õ¹10´ÝMv*¹™x*¦¡ÕK†Ö’V«£ñ5ýyqž7±uÙ&ì{êÏ¡uš|u刣ñî ¡ÅPóìÅ–¹Æî}“‘°+ˆÄáÏã¯éQ+)ò^X±æ "ÊX磻ì°o!¿þ» m²÷Z溋Üð;¿¤eÙ}Œüýòçjª2œÈ !dý€%7´î’y‚ΕZm1¢€ÎU•]gª'rí¾˜…-Åat'RüuF^SÝÊÅLQèL“¯a8^,y1hE1,·ÛÒ¼{ÓŠÈ×ý}¹—ÝÏD®'sÕȬ¥Ã÷àç®`ˆÊxdÙ¹/ƒüúˆC×ey)¹p9’Ô¯_î¾u†)ž«Ë”ᬡÈ%d½·ÌºKß]r]´#¥n2UµÚ–Q=‘ë-n¥–Ãx8ÜP)ñ5Ëï[»_™ Ä¡62_Þz¸ LK.R€ùþø™ììÊ++z?–tï~0Ák†"wp ;‘:Áꪨ+@-šH¨\YäúïJÝ+Êò‹\ï~‚µË;ßH?ûÎÿe.S<W“~·yB‘KHuˆ­»¼ð奅—L Dl(l7µÓ´Z"× ÉaŸ\'êQ9$P½eÏŠï#N&:=’ÝýØ’è}ru?ï ›Ó 0õÉ}ëÂN©Xó¾š7²0g}{²ßÿW$þüÐùØ|}#§Ö¿ÓÜ÷îs#†Õ'Ãá#“½ÿ[r·¹c®iD­õÓ½%-“ŸLôEâ9‰ßÊàå×2°~Ç*U´Žˆ‚€²¨5%9ô1oÏŽ%m™²‚ÿ²½\,,a%ÍCˆm§ßEeï(þ®±pËÎ|,äÿ+éwQfa¼[³ÿîgÝrW(+ o]Vh/€]ž¼_°=Öœ¯ýÌœkÒså…t™@^�¹„T“X¬@øÂ¥¡J“ƒÈlÀ3g#ìáÙÙäÎÑj‰Üi¢+4Û’BPùÏõ¤#/ Ÿ{rîE˜ÛFMˆ(Ì–Ç~©ôu²’¹éÀ|_ðA…ˆ+ÎÎoíwåU7Èk½%Ƀ<_VtÌWåá¶<H>z£5fØâè„ÝÈrƒ€{ëÅîãy*3ÿÒ†¹^«¸o¬«Ϥ}ø•ôöýÐ~!テ¡Çg ûìÉÁ¨{ð–Q·oœ‡’²S1šýa™™dË«/ÝøYP®ûY—ƒ¿û‰„7¤ÖüXžµ?0ÿ«°-Fm(DÇû\á7`tBÈü€Ö8õ©DÂÐ3ÜèÖ°y@¼âyÀ3 [<œÄèX1‘käcYœÜe»+2†e?·¹„lêÃZî`íÅgŠÞj¢œPÔò7Ïʉ\®Ê®x¶#iiLÖÅ0ä"AH)jÕçŠg„å·øí†V^  õF-µø CwZï§gE.ðù[_å±V\?\Mk.Ë+I·ï®,Ëaöu²Î„¢7¶úA8mÊìúuB³ÐR«¢¿'^ž™‰\&&¦å&BEè¿©VA$øpRø.¸š ¬ÕJ‹ß þ=h© |3B!† -µ†ÂÿÃŒï ¶(~¯F(få�e—3ÊåŒý8YlöPäB!¤T”é°9þÇ6f*€7Ùâ 9Ê�å„òAÒ2S1‹møžóÅB‘K!„±@˜!+„†Ó!ÚB«d(æð½Š>ÂHëäSªyF‚0ÕûÀÇ=†â nØŽÎöCYáX²\(r !„reÔš©bPEp™ “Šâ8…"yÖ©ìzHeùÓæSóF+öz@‘K!„¹£îš cŠŠäY§²ë!…ùB¢l5 È%„B!•ƒ"—B!„TŠ\B!„R9(r !„BHå È%„B!•ƒ"—B!„TŠ\B!„R9(r !„BHå È%„B!•ƒ"—B!„T ‘ÿ+É-üŽ_C����IEND®B`‚������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7l.png��������������������������������������������0000664�0000000�0000000�00000015032�15030617045�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ö���q���¾Ëçi���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¯IDATx^íÝMhIÞÇqŸö¼‡áµÇܲ—gN:i¹ä’ÃÎA_²Ã‚3;‚ð†õ"0a¦Á°„'caA‹È†'#¬„!kŒØ‚ÿ§ªºªUÝjùEí·®þ~ ˆ[/­V+û×¥êê���Pz{��� �{��� �{��� �{��� �{��–°²²B£Ñj! Ø�°„¼`@£ÑÊÛB@°�` !… Êö��Tœ?~L£ÑJÚ\-û·•Á�€%ìi´0Á�€ŠË ö�Ê'¤Z&Ø�°‚=‚=��G°Â@°� âö@ö��TÁÁ�€Š#Øa Øß ·ói4Zñ`y~ìò ©– ö4Z…€åùuD°Ê+¤Z&ØÓhn�–ç×Á(¯j¹´ÁÀò¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žö@y…TË{ ‚¨# 8¿Žöçq"ãè¡Ùgµv_Ží­ÀM ©– ö@QG@q~U-ØOG=iÚ÷oZ½#Ã݇©gnKûIúí{Òîÿd—›R-ì ¢Ž€âü:ªZ°7ŽûÒ®e{ßupÿ\íHF“©½ÍcžóP¢ñ\â_hzÉ£îPÎÿ àbBªe‚=PAÔPœ_GÕ öuiE?Ú>ÉaôHê«‘ædzÍôè7{2ZpÿœÉ[鵚ôðãJ…TË{ ‚¨# 8¿Žªìãá8 é 'zI&ÛÒj>–þøSü�ãXF{]iÕÔ¾j<–^ç4{êÑŽwí i¯5í7�j}î4ì>^ñ_gôB:­;ê¶;Òj?’Fm]úÇç=R�æ…TË{ ‚¨# 8¿ŽªìãñôvXÍd Æ}¾ì½Ú±ôV¥ÞÚ” ûéÙýµÆºD#åÍýw½ÞùŸeÔ{ +­HÆfÙ<ÔšÒŽd2=^³Æ‰¸(,¤Z&ØDÅùuT½`og¸1'Èɰó…¬F~xÛãÞðzðÇ‘ å®wÝÞ_{$Ñ¡½ß íy ½ÑÏñ²¯Ÿô𛃇»Þëdî–R-ì ¢Ž€,Û;lkceŘùü:ª^°Ÿ¨0ß•æ– ]iΫס»é…ðxÿÎz׳÷OU®_—š?þ>ôãûSã÷ç€å„TË{ ‚Š×ÑÅCP &,žïÿ´_GÕ ö?JÔªK­µ&k­'2Ì΀cö£›ýÆ ¡ñ†Ù¤îWLo|Ýë}·A?™2S4¼uõ·÷ÔÅNÄ©– öÁq¿@kÒXß“qò ïXFý]‰zmN4ÂåÕÑBP ûó9J§®ÞmUz9#ÜÍ~Ôûð_êoÒSi·×ÔߥûÒ‰^ÅÓ`êa9vOÇ/¥»v_ýmº+k½ç²?Òë‹¿¨µŸËÁë·êo™>¸ÿéXÝßKSÔÖz²·?R–R-ìo}"цl§þ˜è þTÖ·Ï;†Ð~=jö“ë ‰{Vܾ»ôôtdëßÒkR"—VG{„†`>&˜ßÉŒ«÷Ùõ•Z<§ýážÚ¯w¤Õ{‡ðé¡ô×›³ûê@á®4×ÿj‡ÚÄA¾ÑjK·¨^㓌ûãYrÌɶ‡jýMù¼ù•ìº1úÀ’Bªe‚ý­agH}­èzß/šôØ'¬ü.™cXý2æä¥R¹´:"Ø#4{ rBªe‚ý-0d»­{.¼ÞôéX†Ûí¸w¢ðÐ;VñRÖå|’ñð©´5µÝ—|°€+wiuD°Ghö@å„TËû«æôFGö¢v°Í¼¼^àvMïõW–ÞmIpÖaú¹D;Û‹ÿ!îåOþ�Me2Ú—(ÚRûs/l듎îªõÔ¤ÙÙ‘Vüšvîà™üçÇs ëíp¯ãÖ7ÛÆ¹á=“‘ôÍztðׯ•½h n’ûÜ #Ø#4{ rBªe‚ýU2ÃTôÕñîIgøÑ»Šž ØÙ3ÿõísÓ|éǺ?.™YHš[2Øsú‚Ç郿g>Y—»¨Ç{‰Võvù<s‘<ß{ÝTo¿w°†£>›êÀ㎴º/í Oz|?½ú·‰ù<U+Œ`ÐìÊ ©– öW% Ï5itñÉBæd£ìŒ¼€¼ ì» ‚˜ž÷od#é ïÚ©ÆÜý {².ïÛd*1mvûlHP|e¿ô:•Ü?~S{ð2{ÏÓÃHVõã.m.ƒùìU+Œ`ÐìÊ ©– öWÂ\µ­ÞUõâËo«Ûr{æýËlφºÔ;C××{Þ”µv[¾23øÜóüÞñ¼‡Á> ñîùÞûH­Ó;XðŸoæ!VÏ7ïù'õ{ñPœEÓ¡áÆ\ZìŒÙï]¿Í 3ô¸Çh{ ¼Bªe‚ýUÈêâBù‚žùÜ¡3™á+.x×ÒÚÆßøÜór×寽ðÉXz÷|Ô³ÛçýœúµâVkudgwèÍ¥ÛÂ}FË»xBãþßk{ ¼Bªe‚ýUHÂt}v•¼ÜžÍ¼€¼ ì§nŸ} 03 Ö¹ëJ¾%ð{áõØÿ#óÈùm9’aoCÚæL`Ë=ððæÊ7'ã63Ÿ“j�–ç×Á(¯j™`’!7Éð;G½¾M]ùøFú¯U NäC9Ü)?LÓûèð•ìÿ ÜíÞ˜}_Ò ¯&ÞËdôFF“És’o ’z3ëImËr°ýD¶_íx·äuÿz'™£÷²¿ÿ2uW!´Ûí÷ÚN¿—]ý~qk”¡Ž€Ûί#‚=P^!Õ2Áþ*$'Éê@üA…ìWuîÇÛÞø½t¢7ñ‰¥ÉЗ–t¶žHO÷ž'ýŽ´:›ÒéÙ!7¹=þ3³))Õó6¶$J8ØçL$2óåg.^å‡uÓš²ÞÿQŽ’ÛÔ:×{Ò7ßxß ´6d«óÔž¸ë ÍHÆÔëržÉö~ö\�Ü´øs&ØEøuD°Ê+¤Z&Ø_ ÿRÚ*ÞÛeÖ_ÈÈaÝ“ífŒiIw gµ×7ºñùnºHsã,x§fÉ™É[×t<”]3ç}¼Ït3ãÞû£LÿÔ^­V=¦Ñ–í¡~¾7d'5ßý'9Œ™m©µ6eàÍM?¿”®º3{ï~ß=n‹³êh4ÙŸ�øþýïËßÿþwó¯_G{ ¼Bªe‚=PA‹êHúF#ž1‰pÌÓu¡ëÃÕ‰«#‚=P^!Õ2Á¨ l}üøQþð‡?$·ëF°æ¹`ï·üã{ Ä\-kûkæï|�Ëñëè/ù‹üêW¿Jnsí»ï¾3!†F£Íš®‹l­èö›ßüF¾üòKSS¨*{‘H{}=6ê´¤ÆLq·ž«c`Íü`9®Ž~ûÛßÊ/ùËd™F£-×~ñ‹_ÈgŸ}f¾ýRJìo=WÇÁþšù;Àr\ýùÏN~¦ÑhÅÚ¯ýksR-¡'³x´é]=³|&{}—%ƒ½žãQ׿ú<®Š«a`Íü`9~é᤯¬Cqh´ù–7GŸHû»ßý®Ôa�Yöú3vXÍüòyööš3õÁþ:¸ZÖö×Ìßù�–“WG:°è±önhŽ1�Òt]èúð‡°é^ú²‡¥MFÒïµ¥ÑúV†ƒM;½²»ªùTÝýB:þ4Èæ*úö¾ôÚM©oDò²ÛЧsn<–þá{¸åäš(zUcn«×qëi?•¡7ݲ‘\CfA› å‹¶Ï»¨¤×fËuiõþ;~ßµ/¤½¦¯ãÝ–¼Ž ö_td'yOñ”ÔŸ’ Y>”h|â]ØR-^Û Iº×Óù—Œ‡O¥ÝÐ×¹Q·%SSŸÆíçûÒÚy5Û¯®½þÌ5>·˜Û×Áþšù;ÀrÕ‘(_ýµ¹`ÌÓ3àèúðg‘Òªìg,Ô6lG2q×b1½Ôvögw ”* ªàj.ĨžgÃar-wÝ”É@:*ÄÆW2Ÿ[omË ¤Óñž¬'÷±`ûÌE í}IH÷—íÏfûId.ÞèÝ– ö:ëë®ü®¯Ú~|b¯O{²SËöjî®ÇÞ쟺 ÒÓC鯫ƒ ³žS¢}rÁËÙ~÷³¾Býê Þÿ­ù|®y¯ªiûkæï|�Ë9«Ž' œÍ¯£j{͇Þò\ï¸ÎªºWº!ád.¸ºœ]6ëõªßr^£ˆÔöͽ³–µìmóCqâ«Äë«Òÿd_Ï{÷úyÁÞ?€ò›ÛÖS˜õ¸ ï–ýý>sÛ?Ÿ«ä¶Y#Ø_3çXuç×Á~q°O_}‰àh[“fïàô¡'ŠËݾ3ƒüüûœ¿m>ØÇÛíó{»ÞWž?•YÏéÁþÚ>Ÿ[ÌýÑö×Ìßù�–CÅùuD°Ï öŸdÜ,F[zѾ¼ëo,×#l[[äðR“ã)Û7ÒÏZÖ²·Íû¸Ç>î“ìíP Ôþ±ëM†ý\€YÏ¢`Û?ŸëR-ì ¢Ž€âü:ªn°·óµ'½ÉvY‡ÛŸmàóÆa×TpÜØy*ÝÞ7Ò®¹û;œ#»¯× E¹#­îKë×ÑãÕ׿½x¶ÏÒ¼íÛ}gÃôºì½û«<Ù}+ƒÔòßdϽÏ$Ø{ïÝö™1ö.�ÇA>–#“‰Úú$\ýJ…ý_Ùm{.ïv{íý—: PË­M˜“Rõ ¾²mÎ8Åq_íg¯7Ý,ÛÀ~Úû¿ ŸÏ5 ©– ö@QG@q~U3ØÛžd»VZ*€¦–ÿ${nv=‹Ë^OÖTÈl¬­Ië?ìcT«wžÉ3€,›^áéx6˥ͺâÍ~ãoŸ›fØ5³¼ÔÌI¡'ÞrW¶Úÿ9Û>ä3ûÂ…ûÉHöôÕgÍíMioâૹ“iÕ}:°¿ŒK]o‡™íæH­ïžºO…åÞ[µ§?É8™uHµäq§°Á=Þ¦º´ž=K/Gÿ›ÿþoÍçs}Ü{Ñö×Ìßù�–CÅùuTÍ`„!¤Z&ØDÅùuD°Ê+¤Z&Øã’Øñyîäú«³æÚŵ£Ž€âü:"Øãúe†ÿÌ5ï¤YœÊí3`Íü«£/0ñUg?>I&gy^&Ø+î‚ÉÉ6¦ÏØïJGŸX„KEÅùuD°Ê+¤Z&Ø#C_J:’vãóøLý¹åórWѳgü_رŒ¢uiÐÛ%¨# 8¿Žö@y…TËûssAU¿~<uÔÉø¥tõí©‹Fè üB:úöÆcéuîÛ¡(âi°Ìóõ<µìÙèvÎZwv|£+ÃÉ,Èê GDîŒú¹9lýmÊk‹.±hÿ9;C^µZ{G^¥–ûr<I__È¢Þ–èUOZµò§è‰™†+yŒy ;íW­%zûÝLêÕÍ<¾þãÝTY™}a3;08}_ä°Óz™õèÏèĵo_ÇIf-¸'½?ªmÓ¯ù!óy¿“ãƒmõ~Ý>u³)Ü“ÎðÈ®H™Že¹ }Ü‘Õè}Îþ¿yñ¾%ØEøuD°Ê+¤Z&Ø_ˆ@‡od°'[f¹ Š*0›ðOOulìü¼¯›ÒüUzfÎZ"÷ÞÈpÿ{‰LðϬ«©ç¿=NßBÎØF†s—½qóµÖš¬5ÔÏ&`ÿlCðü\¹ñ4aí´]nûmèOB»;p½óÙÞþå÷E|¡·ë•ì¿”þ–~®·n^a½Çïâ÷—lÇìóÞê/»½v<ÕYû¹ _Ê j§ß³Y×YïÊIòºyV7ïfëƒ_G{ ¼Bªe‚ý…Ìz¡;{#™¸a×cŸº`ƒ*ý°ëæw=œ­+Êø(½®x|ºî ~/£½®é)nt¢¯‡7³Dý©Û8¨ÓËŠywä‹ÕŽì&=æ™÷¹ç¹ûyÿàA¯.sÿùöE·ê ¦óBF÷­‰ÛÎÌvgöM²f¾àC9JÖÍ>¿ä¹ï%Z½«¶ë•Œ“oCÒß¾Ü&îÿ€åùuD°Ê+¤Z&Ø_„ ò&°ØÐ8 ÅñÅ+²!9víý§®ËNý^õÀ–ìžu!Šs9k³=çÙeµs b²(/ZO*ÈgC¿’{ÿ2û¾®.ãö¹ÛÎÉ@:ú[·lîwûÆ-»ÇŸ¾.x‘>èíªƒµómä¸Ñ:á×Á(¯j™`nÙ^hôôþfCc*Ü. ò®÷7”/ËÛ˜ ¾Ùå¹ÀËÿfbÖïî{ÙÓûq:ȶ’äöcæ�¨È¾HmGf½êîôv»«üe·Ã~Þ¹A~ÁçW7WG@8ü:"ØgMe2ê›!§õÎPôEXÛ*¤Z&ØŸ[&Ô&sSú÷2Nztu¸û`‡ŒèP¹#ƒáɰt/´ ‚ÙuØåäÑO2¾þ(¨²¼Ó·1o¯Ãê+9ÈYN¿Ç{/jÛ‡£Ú@¿7=Mæº>xH†¥xûñð`vžB²3ë;xµä¾ÈˆÍÖ»ÕÈë±^À;õ^íð™Z[¢ÁëÙ°ûy/ òñºÜ¸ÿÙ7úDßÝþèÃ…nÆÍÕ¿ŽöîïšÚ?·:Ø›¿kîwû%™º‰ÔÿZKºƒS¾e¾ÈcqeBªe‚ýyeC­íí®µ6e0Ös6̥юTÞ2APÿ<J†Úؙ텶˳u©ð:Ø4¡[¿×Z«+{…C½vú6ú÷å-§ƒ²ãzº›ÒŽL|<=fü ]‡Ýx|»ûUå‚}ú<…Ù{Ï®oÙ}‘9sëõqºo,ë¹ý³^ÿibnÙ[×Ôͤ߳{oú5n©ø³!ØEøuD°Ïq2”Ný6{פ>ÇçDés¼ugÛŸ]žÿ­‰'ްGÎâv‘Çâ*…TË{ ‚¨# 8¿Žö9n{°×j÷ÖegGÏp–í´Rì¬iÉög—ó˜N!]q'Sú›në"Å• ©– ö@QG@q~U:Ø'×ÑûÃ}Ë;Í{ým®òèg¯m_eü±èé„W_ÉNïÒNt÷¸ô×õ9Xú±ÛÒ[ÿF†©D}"ãè¡]_~;-„ë!–÷tˆÎ~#¯¥®§âšû&Z·UéýÏ sA2ý³ºíO½5µJ4v¯j¿á;OÌ}[pžÇ⪹ÏU#Ø_3磪ì0ûa¾¹!3XÄí+�Ëó먲ÁÞLõ{Gj«‘NÝpφtt0Oû‰ ; YiE2VAþ0z¤B­ý]m‚µýÙ„ùUõüã8øº ôùZ÷º™`_„óûx–³¹¡›VöÙþ¬?ÿø½›ÄõŽ·y·iy,®ZHµL°*ˆ:Šó먪Á>žX`AgJ6{N†©»�ì³çcÙí«:gI¿æ=×3žlÁ:-Øç-çs‚}„TË{ ‚¨# 8¿Žªìã€î'ñä{3cØNÇNˆ`ƒ½Ë(Z‡âøCy&™éõínBŸ ÂösÈkyzèOüÁüãSÃq.ìÝÁˆßóo¿©X4ç\ÅUsŸ¿F°¿fþΰê(ί£ªû¸Ç>çÄS-|í8z}¿h_Þõ7f=öÎt,Ã(ý~ÀÖ‘ÿàu.Êœ4ûUzØÍÜìgÊ…ƒ½Zµ¹Rº·fÖ»zîÕÒ/òX\­j™`Tuç×QUƒ½c¿Òx,}3e±r¼/Ýíƒä ë&¤Ûv×cÞ§ÒÝy&݇nÊãÙÌ0‡›ò°û2>ÁÖ¬ë2‚ý±ôV¥î÷Ì[îz%ÉI½É6?—w»=Ù}ÿ2½üî¹y~°OOaùs|0s®é.Ïz,®RHµL°*ˆ:Šó먲Á^I]ÇC5T&»Ûê=y«u<g|[¶÷z²V³!úÓkÙ~òLvì°w]““á·ò$zj¯‹rGZ.ä/ÍuI¶É äãHZöö¸éáE?™àm^»÷V=;âfù›Mi§ÞŸ·.‘~¯CwÑ)ûúþú…ÅurŸ£F°¿fþΰê(ί£*{ ìBªe‚=PAÔPœ_G{ ¼Bªe‚=PAÔPœ_G{ ¼Bªe‚=PAÔPœ_G{ ¼Bªe‚=PAÔPœ_G{ ¼Bªe‚=PAÔPœ_G{ ¼BªåÒ{V¼Xž_G{ ¼Bªe‚=Vá`y~ìò ©–ùË�Àö@ö��TÁÁ�€Š#Øa Ø�Pq. Ðh´0šF°� ‚ò‚F+oÓö��TP^0 ÑhålÁ�€Šsa€F£…ÑÊŠ`�@AyÁ€F£•·•Á�€‚ò‚F+o++‚=����‚=����‚=����‚=����‚=����‚=����‚=����‚=����‚=���Pz"ÿ¿÷]ca‰šÑ����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7m.png��������������������������������������������0000664�0000000�0000000�00000071601�15030617045�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ú�����-t:���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��sIDATx^í½ˆ$W~çYwkÏ‚u^ïØ«¥o¬ÞÙïªéãÔÖÀˆ›{ˆ²p¯<=Ç4†§–Â3 '›AÂJ¦X7H¢W›PƒÄ@ABI0Hl+ØFÃpꆤÏCïIÅæIfQ$gÖ:©6wM#7Ea7M“ü.¾/Þ/òEdä¿ÊˆÌøóýÀ£*##^Ä‹xùâû~ï÷~oM!„B!¥ƒBŸB!„B¡O!„BH ¡Ð'„B!¤„PèB!„RB(ô !„B)!ú„B!„” }B!„BJ…>!„B!%„BŸB!„B¡O!„BH YH语­11å.B!„„>!y‚u’B!$€BŸ” ÖIB!„� }R*X' !„B(ôI©`$„B  Ð'¥‚u’B!$€BŸ” ÖIB!„� }R*X' !„B(ôI©`$„B  Ð'¥‚u’B!$€BŸ” ÖIB!„� }R*X' !„B(ôI©`$„B  Ð'¥‚u’B!$€BŸ” ÖIB!„� }R*X' !„B(ôI©`$„B  Ð'¥‚u’B!$€BŸ” ÖIB!„� }R*X' !„B(ôI©`$„B  Ð'¥‚u’B!$€BŸ” ÖIB!„� }R*X' !$?ôz½¹ÓçŸn&„, …>)¬“„’÷wŠï«W¯Šçy&½ùæ›òüóÏGÒ·¾õ-Óþf™þðÿ0rΗ_~9¼&¤7n„×K  Ð'¥‚u’B¦óÅ_Dük¯½ hW\krE6öu6òPí&tŽ‹^_<¹çE‚Ø×ëJêl<úè£á÷è àí,r}„ }R*X' !$�.0®8†Ø…`w…° xW¼«¨†Ø.*Zö?þ8,—v âlÓÑí´¹ì„¸Pè/È M¶ê5Y«¿ þ]»uNŽzÒñ.K»¹!kmé ìöý®\ñv¤YLš[v+QX' !Uâ"U-óq!‹D!Åí©;’ÛÒÑ�|‡Q�Î E„B!îIß»`…uixŸÙísÐ÷¤a•µµšl´÷eœÎ¿×mÉz¸ï9i÷îØoˆÂ:I);œžõ®0Åÿj™¦˜_ Üc €ØwGTüã{Þc’w(ôdq‹þ@;[R3 ÈtñŠý)–ÿªÂ:I)ju†À„•í„§+êéož=õ®øwŸ:]-¡ÕŸä ý•sK:ÍÓæ^NïÚ)˜lù¯2¬“„¢±Ñ1iÞ ~‚µžVäü¡Ï B_­þè� †Q>+²jJ ôïJ¿ûS¿‡½#Í‹Ò9´òwð©x›'¥¶éÉA\úÒÝmJÝ¿þÚæeùäšµ¨»B;î7xSÚ“Î>—ëþy,-{­Ù‘Cs ‚ëzKš°öמJ³–`µ¿×•Ö:¶ûâ½uYÞo5‚kI!ÐNÁédÿ|”ë ü÷ýs"Ú¦´÷£WUvòQ' !dv`‡(„8T+±+ìi­/öêV¥Â_-þx–„,›‚ }×GÉÀ¡ïûñú÷‚màÈ v#‚oËaç’lÔ×ýý+ùˆßü Ùk >×¶ü΄/âÇ×p(ûíM_°Ÿ”Fû¦^—Kv&|½¶l˜<ì¾¶ƒ‚|G:‡ ³`®Áí½ Óáùÿ´Íc_ÚØ_ouý»TPfBÉ;*!îÑnAàC b…}yP‹ü9Sô“eQp¡0ËŽXW±ëŠâPDŸ”MïÓ˜¨‰uÕkçdÇ{5Ì¿ÞÚ“#³ƒÓɈï»rà=cDýp4á3ñèLÄÅûéµÏy„�'ßõ–tC•>ôåw�žlúמ/¼ö1–ÿ“—:I!q î!út-E_µpGnôù«‹;w$+J!ôCQÁ0^}6VuG˜‡“[cVò°ó°qQZ—¶Üh‘Þð¤o·&ŠìÐ='&¼Ãëv}îÇ }uÛ‰E÷ óP— ÛÒµ£µÆ®ì ËTrS' !Ä!¯ânpÉÁZR]âîZÚéãd^’6åúî„ÖPtCˆ_úÃ'vQíŠõp{Mê ²¥Ö—D‘ã0Î(Ü^—V7';9×aúøÇ¬üG=¹f}ü«(òî!„¬yzõÓ†ˆ£¸'ã€è×É×ña’%úGÒmÕÍõ¨8üT¶woZ7ÿsèÞãXÕCWW¬ƒ¡õ¼¾ùNħ^æçïÄÎÄЕ'꟟< G{Ò2“iÝkröä1t ÒIi´~,Wº}§,Õ"?u’RE ØTÜ«`£[™¸w¹DˆvÉ"”DèÇÜ]n"ÞîϤ?ET'Šu0ÕÇ=É·Þ'é¸DË?ZîãîFÁu>#Þº é¾±<B— c.ÖUBòS' !UA}ï!Îà‚¡†m„,>F‚ð^ƒà§/?9åúµsÒl»"$ø½¤³µ1Üvû/äJç3_D±´»ÄÄû½þMù>ü#®8w¥ßyÁ„ñ ¶}&]ùÙø ³¡5ß™, âûõä:¬ö„þ ÿ3yË”§Zä§NBÊDD=Úõ½ÏLà‡í½“¬ËitÕt×””üêËÁOȬ”L蟔Æö˜Èqñ~[zׯ‹wɺûÔÎËVûº“diâFù©7w†®2Aþ×¾ÿ@>ð^° °m[méX+ý°a¶~ûGûâ!f?öCˆL³WÀð|~'æÇÒG+œk }ò¿ÿ²´½O"yT…üÔIBHYÀÇê¨]øË^ÚæÇF¡u”¹¾%^/é­EÊÀêê)2%ú/HÓÛ/n5~¾ñc_zG_Øè4ëžÿÙö¦ºíÀZ~M¶ŒåÝÞ‘sjü|ïm¹Ö»-GÝíÀ¢i€íb[—[Ò0ç R­Ñ/Á¿~x¾ÑŽÌ C¶M¹G¬ãQA(ô !Y¢>ø[]Ëu¥°óÑ"Ùì<°ˆ»')35r]z8i—L¢$BŸ�ÖIBHÀ}B£¢ÀEg5¾Ò֢ΠÈÑþ®4jg¤Õ½mö�ƒ~W<]e=’j²ñ£¹¤.@:ÂímI=âòs(½NÛYe½!Û{j@ò¿3û»Æ0;¢€ü¾ØºÕšâíýÔ¬ÏU—üZ'!ü9/„$A¡OJë$!$M è5>þ®TLÙùa¡[©™×u::§Kçz…£Èº¶ŠëîtjÍËòÁî«Ò¾|I6tD@篅âÞo:wäÀ{I.^{_v6ÖàšŸº»ÚˆpmHc #æ8ÑçÆ”“ãe"Ä…BŸ” ÖIBHZ`¡+ˆ'„ÉÌEˆCãZªÑ× ÀÏJ}ëZB„¹k»»Ž‹uQ­Õ/ÈŽ30 !æ”9xÂ9‡™(ì…PØú¶tÕ‚oŽa„¸,Aä'ÔWºó }R*X' !‹+þêÝtF 3@,Ìÿr…´A…¾Fn»+ý½×¥áwê­½p>™ƒ 8¡#›ž N4Ø…ŽØs„Qév.ÚpÄ Èßí,èu1"PÖ@àkÝ¥uŸ� }R*X' !‹�¡¤QMòeŠåK—Û²¹>fòí /{ÛŽ~­!-¯ëXýÕŸ~ôøaG±ºëÂ’¡°¹éh ‹p‚°Í?²¸£[0Ò1!Y¡Ö}ŒF奣JV…>)¬“„ã÷u}ÈŸ8RœÓR¯Ÿ‹¸ÖD ¬ø››c&¾ÆýüF\tBk½³¶‹qËQ·ÛÒÝÞ”úcN~#ùkôÏ_6Úi…ØçDÝêB¡OJë$!ä8`B#ÚD/É'6´fÂZ+"B<¸½‹¸ù8n?Î<�cõ·Ñzöw_•Ý›×ÿüË×åÊî 9LÌcÊ5“Ì€À‡Ð‡à§ß~5¡Ð'¥‚u’2/*òáŸ_‚H6Qÿùt"¬_¬ÍrÙ»>\'&tÿ‰/¸¥¨0·n?õ¦´;½ˆ@׃µb‡+Â×_NÿŽÍß?&²\tÎ Å~5¡Ð'¥‚u’2*òñ·ØØ˜úêXøWÄk7£®7™bG"þù$/`´Šb¿zPè“RÁ:I™•òˆ|ã2!|¥šÓð¤o·d†¹7¾>ÉêÆÃ ºÕBŸ” ÖIBÈ,èDÅ|»ëÌ;\( Ü•~÷-iÆÕÊtËšyb‰T }R*X' );êg®~àãüÍ'SF±3èwÅk9¡5ýdüô3÷‘׉Âz^.Œ•g0A\ÆÙ¯ú¤T¤['Ó„ P ö1~—8: 9Hª âìã½–‹ŸI¦Pè“R‘I\@PB2☿Kˆ{´:„T™—_~Ù, GÊ …>)ú„T„cþ.f‰ª£ÞRLF'c¡Ð'¥‚BŸŠpŒß%&ࢠ»!¹É‰¹å†BŸ” }B*Â1~—p×o>!$@;¿Œ­_^(ôI© Ð'¤"ãw Ë%,˜„!ðÓ/M˜Y2…>)ú„T„9—êLËe1¹×mÉúÚñú÷ì–}éî6¥¾Þ’nân‡Ò»¶-Ú”|*Fº8)·¼Pè“RA¡OHE˜ówI1Svì Àþ;`mŒÐ: •L¡ïB÷rC¡OJ…>!e'¾¾EjÍŽèz°I v>£í”+öÇZôµîPèÇÁoˆ“ÔË …>)éÖÉã BHþ(¤Ð?êÉ5¬t{¾%—·ƒok]Ù?ø_ü¯=iÖa„@Û´![«s\cG:Þ–Ôñ}}[ºýOÄkníX˜Ï /{6ÿµµ“Òhß\p%]w¥\»Jî½®´Öñ¹.­îáôk¯Ÿ—†ùÞåŸI×kI㤠øCéi¹ê/H§×ß®Bÿ9ÙùÑfPžú–x½a‹wôoÈvãdOmSÚûÓZwuÿ9/­Ëø;îh?¼Çkk5©o]“¾)˜çïÛyÇ–ýŒ/>–%rþ»Òß{=Èßÿ.ò¼2�ç Ð/'ú¤T$ÕÉ¿û»¿ã$!aÜo½xBßËV�zmÙX;-ÍÎ-ÿû[Òiž ƒOÅÛôÅêF[zƒ;ÒkŸ³Ç5d{¯/÷<Ùôc­ñºìõïÈQwÛ–Üó·ý󜵂Ôï<˜ïôC†n/IÉŠy—Át¶|ÁÛð¤o7Ýóó>ÓÚóK6îÚ2£cb…mxnµÔv¤Y ®q`ÊV“ö¾ßQ°B_óÑMiCÄäe…þÑž´êgl'÷áŒì–tÇ êá}°";‬qÈäqG¼güÎF0<;{Üö éß³å¶Ïh`®¥&ë­®_ û´c¿ËÒÈ„{N¡_N(ôI©pë$þÛo¿-=ôœ;wÎn%„”´ßøÆ7¤Óé˜6@)¦ëN ˆC±l¬â ¢zÄe%vœ£ˆôé{ÒP¡ZÚ£)ÜwŒ¸ E6: ܧ\»a’KÎgâ5ÖíõŽîlíÔ ¸C¡ŸÜyî›LÜýÇvN"×kqïóÈq¶C^«[wDÄI‰åOäO¡_N(ôI©@ÄË¡Â|ðAyà̶³gÏÚ=!eÆ"?á·N>Ú´ Åú19"ôá¾s]¼v3pý…`\|º"ÒÇ æÿ¤ÎC”dQ¬iÌñ¦ƒñX0:€ÿ/ìJ/4–Ïzí IèJ¯ãIۺɌúQ±í ý;Á¾¡ðž·³x½G=éx;Ö='¹“1Z&÷ÿ'v2÷B¿œPè“Ò€—9ê$~ðò¦'N˜ÚLLLåNñß>Ú„­­-ó¿kåÏ?“„þ¡ì·7¥VoJ»ó‰ô"¢q¡o-úÙ¸…Vkä}»·+Œ{ ˜çÚAL—œÓRo¶¥Ó»é”mTèGÅuôsðÿ¨›Ò4Æ }¿ó²¿+Ú†4Û_8_ÓÉÀq“„¾ÍsŠQZ|üñÇümY¡Ð'¥á½÷Þ _ìLLLLñ´î‹ä7nØ£ÄÜXŒoºõG7Ýþ¯þð¡h´Ç¿wÿcÌu'êëo}ÓÝ ±‡×e{WEùb˜sÕÎJãüæÐmg–k}ëæb…o ˜­ï{ÿšl…¾íV<G|ôý™�ì÷AÍú¾'ó½fGvGÜ‹\â.8î½¶ÝüWúœ¹zœFo‹¹îÄ|ýƒ¹îd^ÿ<Ûï8#"éE䑪¼Pè“R: «žºìhzâ‰'̰$S¹“û»GB[€6ßAмüò˶µÈ;V4Úr¬¿Ô’—B_zXõXÅýϵƫò~ûûþÿ˜ úŸ¤ã·ÖxIZpÑãÞyÇXðƒÏV„Æ#Å4ß’®¾)°Šµèûç›tíÚ1 „½½fãÛv’­™ØzYÚÏùB[Ž.šeö·_­8Éç܇¢Ñš»{áþIDóhJë%÷^ÿ鋾ÿ?&پߖçÌ$è]¹Ù¹4<n­!­VÃ9®-ÞH¹ã‘…š²ÛŘAú ÿbu€É<Pè“R¡u/uWðÓGŸj`D‘ŸðÛöÙgM[ ¨‹!$�¿ ºí” }R*âuRÿÓO?m·BÊÌÃ?,/^”/¾øÂn1ó裚‰¹„1.;Åå"ÇBŸ” ÖIBÈ$ ò!öiÁ$ÉD]¦FR8— ø¨«›;êEÊ…>)¬“„I@àë[ߢ“Tþª…~!qÃyM@'%³@„ˤOɧ@°NB¦¡–LøìRE ð9²U (ôK‹†7Ôè ORèB*"ð@è|þùçvK‘@´˜÷¥ÕxlêBWËÁyßh ß+±ïŽõ¾q£ã :ÏM.3‰yö­&:—.;Õ€B¿ÔØv¬OaR¼âbÃ:I™X21Q©pVM»ÈÕØiW‚Æ~OZ|Ë.œµéÉÁ1âC<Ù¬Ù8ÿ&öýiÙô>M 59ϾUDE>:º¤Hè-ç[»²­1tÃÞz<æìpŒÐòÑþ©\“zëééõú7lþ~>›wÂFÉ]‘Ïÿ<&–o°p‰^ûi©7ÎeóEùA¿+^«!'mŒá‘Èá*ôŸ“1‹×ê[âõ´<q »Òß{=ˆìï‹Ø¿ûGSšGuÿ9ß’ËÛþßÈqãÊåר‘Ž>·ú¶tûŸ„e‰œЗ=›ÿ$+ Ž#„Y(´Ø7‹gåIèƒØB]!ú‡ fÍ…]X*Ì3þÙež}«‡†—¥È¯ÅúŽXàß?`]"Ú4zÁJA^WÝ ëŽ{]öúGrà=,ÎaÒ°«ªÕÛX�ÎXAj¿Y†zʬüpż!Áê}þ9ÃFy\V÷¶ÿÐ8+ÈàSñ6ýN¦»ZftLte¿á¹ƒE5ìj{æïزéÊ{VèGV ôó† 6Úú¾(‡5F;HvÅÀQËŒ‹sì9¢+.Ž)×À6¾æ¸†lïõåžyfúŒîXË®(ˆçpÖv`ìuŽY¶yBȬä[ìß•~÷­ÐX´v!+óNT¡?Á¨âÁjmÙ¹¸cßuj òßK?z].¾j G ¡«¿ž±ï6 Þ'›»ŽØg˜ó·_Û–F­.Þ-(ߟ‹×XÏ¡lô=+òÙûV ¸¨ÁU"¿zG胘cæ{ì¸@ŒªˆŒº·DV½ “燂 nçÄÜm­6£YHߓƘ²hÙ]¡ïˆv79Ç&sÿ‰¼|\â×;.¶D{¤‘‘aJ*?¶BÈ<¨ØÏ›Ï~`´²¢Ù_Âv/ÒÖŽ3ªø_á²nU0ö\xÝoƒA¾n 9~'aW.lÇÚÓ1ín˜Â‘à#F"œë¢œáÍ|öc˜»¾Ž‚¹k¸ ¶ø›°Ÿ´æÙ·BÐ]§ÚKèG6ý»BÿPzOÚÖõ#¹Aô+†íÿS{ÿcDq˜’7"ÛŽ z~Ãê6|þG½ëâµíÒÝ*ˆã×nHúG=éx;Ö¢3^èGËî ý ϱ÷XÜ<|F®wL¹âÇÅËä^§ù?~’Áý'„yØ×H$ùûväs\›œøn�±v߈ê iîîY—N`-ïõ¦ìv1ž›&öºkψw�+=:!&m·í×çšPÎÉBÆ}+›o¾iÞ‹\$®º”Gè·”ÓRo¶¥Ó»ñÿX¡¯y&»…,Œ±Z?æçý™ßºþЇ²ßÞ4n»ó‰ôÜF:±16Œ°Æ4з;Òë][6í¹bÛþ?â¦4IBB¹æú&ϵ)nDú„E€ÕíÈÕ«Wí–Uo#cŒ¼ÆU\7ÿ=áíû9û¸s»"s·,¶Ý5ß'¥q×åŒ[Ë::g’|ä“ sÑwˆ½|F÷QæÙ·Ü ãªu}R]Š%ô#n,ÚózêÁ9ø?ð‡w†8ÍqÃἨûŠZth3vt'óvvd7k@p®Úù†œw>Ó ÚëHgËoø´‘Ž”ÙbÝ\ák_f˜ö®ô;/ø zLèG|ôýÎPèï4ŠÁ±þKÂø¾»“yoIgû„Ú%æ‚ãÞëIåÒãtx9æº<#ípÙ¹®ßéáuÙÞ ž§ËÒë$!¤t@ä£-…u~ûöݤmdœˆÐŸdT±èº*áû!`Ðß“]ˆíøþ ¡íûëríò–ßnÇ g s£Â<~&Ý—yö-/›©®h ¡IŠ#ô#Ö…º¼Ôjú~ö…ÞGÁDS3Éö²´ŸóܛלãüF±õ’4œãÞñ^æc:XE¢“š¢Cž‹°Šm¤ýóÕ¯Êûíïûÿ¤šN™ƒÆÙ {{Íë¾h¿m,úþgLl}¿-Ï™I­6bMظc€ŒsÆóA#Ÿ 5mX7–ÇK-yɽ×ÞÏ“ËÕþOÒqŽ[k¼$-t8ô¸wÞ‰<kSîxd¡æ[ÒÕIiøžB +‡B,­ja­à}6S£Œùºý~`T1£ž3Uüý6õ}` YUþoþæçl¾ÖÈ3÷hî$Ôç·× ùŽ7Ì%¸îø¸s‚ý§…לmß²N©ºê<ÿüóòÅ_ØoH•)ŽÐ'dX' !iá 'X÷—/œ¢!ÃÑÙ˜á«Õ=cTñ…|ÿ'rÉ ImŒ=íÝ–ÖeD¸A¾Aô³TÅðȤ\�g®gh˜ûÑÎs1ÛÝ?r÷#02ê=aß“‡Ž)É'ú¤T°NBÒÆu…à¤F’'ÐùD'ï¾Õºš‘¼B¡O& ±Z ËHŠúzæ\!„dD>Ä>,§œàHV ½ÖGtBé‹OÆA¡OJë$!$K °4š ?Y&*ðÕM‡#Ldú˜lû¾´E#ÙR@¡OYp™PÁO ?Éׂ¯Ÿn:dª'ôÃILîäR(ô !Ë$.ø!À턤oCýr]Æ(ðÉ<TOèƒ9VZ%Å‚BŸ² \— ´CgùXa—DÎAˆLÔ%ºˆ‘E(ŽÐ?êɵVCjõóÒ01îg÷‹XÜw]äêPz×6ì¼>̆%®ÐwÔMX郥ÖIBI�¢ â í„?BtÒÊO¦ µj½GÝAN²%‹R¡ï,ÌTß–.þ�&~n°øT°HF°`ÈÝ0RŒ#YIÖ'ú)ýî[Òl¼d;¤èPèBòÄ=VÙU+?Ä?>Sô£>èjŸî9$M "ô]R{¬Õý3gíøêz¶£ ÇÚëó²¡+’R@¡OÉ#*è\k-]5A]pݼØ$YR ¡ë!‡ÒëxÒnn˜ë „¾ÆŸ,ô«?&µÚ3âК_(ô !yþ×®‹¬¸zôé//pÁq-÷té"Ë¢ØBß,£}ZêͶtz7‹þ,B]—¯‹·yRj´ê— }BH‘€è @t`í§,.è´¡ó†‘íÐÑrOVA„þ¨ëN æÏI»wGýk²U¯qݱÇn´¥=ïLÆUßþzkÏï¢C¡O)*€ø®8TË/:$¿À ÏΩqŸ]´Èª(ˆÐ·yÿ|Hjµ,ú'ým'¥±}YÚÏùb¾¶)?ÚyÎNÆõÓzSZ/ ];׆FÙY«KëƒÎ0êÎzKº&cRTð !¤ ¨UXÃ,"á´ ¯<ö:¯s/ølH^(ˆÐ'd6X' !eaˆ{Lât…?Ä¥ŠL†cLÜwÜSt¸ êÝ{aÏù$ÏPè“RÁ:I© —®øWË2üÁ!Bñ„*-ÌÓQ+½ÞOuÁáý$E†BŸ” ÖIBH•™dVë?¶C°ê@•¬Ñ(¯Þ܈÷¤{¤÷‡–zRt(ôI©`$„Q\ë¿v�`¥V« ÛðŠ]·CpœNÁý¯ÿՈ郃»%¸–4´^›+àáʤåpG:4éwØûãXN˜%e„BŸ” ÖIB™Ê꺂¤b8©C  "Z÷sÓÿñËw¾óùÅ_üE³ßW¾ò•0_|þò—¿ŠìiÉíHIÂ]“î£n6Hèà l´Î“*B¡OJë$!„hˆiÀAê´ÐN&׊þoÿí¿•S§NÙóÓ¯þꯆ"¼V«™mØO·MJêjîHï„L¦XBÿhOZÍ+±•q ²ô:I!ye°/í ˆêt…¾ &¥¾÷Þ{ò»¿û»¦ýuÓ/üÂ/„ÿ£ @¨ÿÃøåþûï7b’ú·¥Û:]—Ë­“„’c2ú°¢¿ñÆòÍo~3ònúÍßüMù½ßû=óÿ¯üʯ˜¿p r9þ¼ÙŽ¿„ì(ˆÐ?”ýö¦3 ù¯¥Ñ8mÿV¸•{]»ð•ÿù?üßÒõZÒ8ùœ´ßÙ’:ö«mJ{ÿÐæwWú{¯K£äWkìÊþ–Ì%Egyu’BrNŠBVø_|QyäÓÎjúÒ—¾þÿÛ¿ýÛÒétäí·ßŽì¸åŸaчe?Þ „¤GA„>°«ã†ý@ü¯ozr`4ú]9ðšrÁû/ò7¡oâ†lud +èÖ·¥{tOŽºÛR¯¿ þÝÀ¨^“Z³ãçHŠÎrë$!„䘄>"Ð@€ÿà?¯}ík¦mÕûßøß??ôÐCFÜxÝþÿã”xÀüŸÑF'ù~ãß°[à°#Mk¼[[«ÉF{_h¾#¤ÐBßÇü°m†íÌEéâ§}OúÞY[oI÷^°ë½nKÖ×êÒêþ· Ó8ÉÙ——åÖIBÉ1s }øÛÃ"ÿGôGÑ÷£Ÿà¦ógögò¯þÕ¿ ·=øàƒÆ÷^E<þj§�Öˆþ'N˜ÏIà|øî¾ûî3ç]œ;ÒkŸóó¤Ð'D)¶Ð·?jXão÷Úr&´Ê }ƒ4ŒÐÿD¼Æ:}ýKÊrë$!„䘄>üí1™ö©§ž2í§›ž|òI#äÿüÏÿ<ô©GŠ |åé§Ÿ6ß#/Àç³gÏÚ=FA‡�û`T Éê?ú„Ä)¸Ð÷Û1_àoÔÎKó9?unÙ­£Bßìg»[A>µ-ký'eb¹u’BrÌ¡?i2-=„?¬í°ÈÇcè¿òÊ+‰‚ùá{t4äåÎÎŽÙ†<ÆóàìçFæ9ú„Ä)¤Ð?èß”à_o¸%æië¯?k+ôÕGp ­ ©þAà£ï7õ­kÒ7‡øyl¿#=¶ …g¹u’BrŒ#ôÿìÊž±žÇýí‘àªë» xˆïgŸ}6²ÏÅ‹Íö$0QW÷s]p4þI@àc?þŬúú„Ä)п+ýÎ ¾@?)íV , rQÎD~ÔVè×ÎJãüIsµÆë²v¥çÙh<Hõ¦ìvûlJÀrë$!„ä‘ü÷ÿóyù5}ÇÅÄ>D?º „<½»ï$\‹<òt9w¢{Í,¨5 ˆ{¸î`_Œ }BâHè?ì‹1ÿÃ}R òQ' !dù@tÃíæ{ßûži Ý7þð‡#a.ŽƒÀv÷‡»MÒ¾qÔ·_ýò]°}ÖE±pݵ‰c&u,&C¡OHœÂ ýÁ'›gÚ1·ûc§~åÈC$„eøwß}wâdZõ™a®n3šà£?‹0:‘ý$qŽï^sÜùã Ì&ŽËÏñ Ð'$NA…>Üu‚XùQ— þù¶á¢U¿R¬®NBÈr˜u2í8Tà«Ë7«ÀðÅ×c?üðC»uòúú׿n¾Ÿä «>:ó\Ë }BâTè’ ë$!¤ŒèÊ´³L¦¾ÇÂVn?þøÜ+Ó¢£¡¸%¡tç] KG&Ðñ˜‹È‚Y6qTŸ }R.X' !e�¢<iñ*uL’…˜ž&îXËuÂ+xt‘*ÁNϳw‰ Àùà„}¾ýíoÛ­£ C}æì°äã8Xöã“… !óC¡OJë$!¤¨èdZˆc´en‚0‡õ|^ñ 1¯¾ïšOTàG Öœ/ôÕ/IîA½'Eg¶Î„Æî‡k!d1Ê!ôö¤Õ¼’£•n«ÿuizŸÙÏdYä¦NBÈ À þòj%w¶ÁÖɬ. p>¬ù°²O˜$ôÑ Ñü¦u8´³‚sƙ֙@yá§ã'uJ!Ó)п-ÝÖ™‘sW :õ“Ò Ð_:ù¨“„2¸§À:Ÿ4™>êÓ&ÓNyÃï^óƒ/=:³ºøŒáßš'ò›†v2’:Ó„>Ðä3ëµBF)ÐÈQÏ“f½&kµMùÑÎ%yµ{ ûíM}'h€.ˆ×¿ç í}ñšvÛ†4w÷ì[‡Ò»¶-Z]ºÿݺ/Æÿj˜¯Ý߬¦kÎyWú{¯ûûkþ6ÙNÅ C¶Á‚\¸¦öþ¡î›ÒÖmHçÒX·ÿÛë»×mɺ~>øLº^K'Ÿ“ö;[Á"^šôeo»aËèwÚ7å(ø†$€ûL!y‚wÑÉ´“€Àw]~æøJ’G*ÜŸ~úé`ã°ï©S§£çÌ"ôÑÑAðÕO „ÌF„>|ûÎH³sËÿÿÐø[²Ý…ä=’nËíjÑ|*Þæi©o]óÅýp5ÝMïS¹ ì3ÒêÞÆÞ>Ï`­Ù‘Cs¬/Òµñ1³øƒc*àõ;cµ?c;vTAgøßëJkkÑ7ÇÖƒ|ðç¹ÐôEþ0LhØÁÐóÔ·¥{ô…ŸïY[¸mûe9mïIb¹u’B’8Ns2í8 ¤!¾ÝüáÜ$ޏözݳ\/¬ÿ:ñ7‰Y„>@Gy Ó²è}"¤ªLè?&õæ[ÒÄÍ ý 9笔k'ÿ˜Eãï[Ëÿ±uûž4Öê~§�ŠèwC«¼›ì¾q¡ïË{s^Û¨áÏ ca¾]Å7ÈÛÏ냎ŸOük²ÞêúG‘$p!dd1™v8—NZÕ„ÎÃq¾á=)É:ŸöÓUn“˜UèCÜëæ*Bæ§@BßqÝY«ù‚ß“ÞZˆ¨ÐD²+ôí÷úÈûºxífà:£¢[GZ{~.ÕÞXþÃE¹ÆtF„¾Ï`_ÚI³ó™ôÚ«ü¨Ð;^ÛÿˇLd¹u’Ru`½†MšL üãN¦„¼ú¯k‚Å}Q¯¸"üê~êi÷™«W¯šcÎ;g·D™UèœW; i•‘*Q ¡¯Ü•~÷-#øËv’EßuoIê¸n@›R«7¥ÝùDzÑ­î2ACç®Âä3Æ&IèÛûjç之Î"£B?(ƒßYùägÆ¢t.È,¬¦NBª¬ò°Î»Qm4-:™vÈOC[j‚EV+û¬„"ü‰ÉW­5ç!²@Ut%Ú×^{ÍlG$‰y„>ÐûŒ!d> $ô?oó;IÕµ®…üAÿ¦|tÐ üìë/HÇåƒþ5٪ÒAžàºcD¹m¤ÒÙÚŠnÓ±ÚýZxž ïÙÅHB(ôÿRúÝ´}L~5;B èè€õÑ·×PÛôË3°¾ÿîáÃ벽˥½Ç±Ü:I©p!¸‡Ð7™a ³°8ãÜpÏ× ´þHŒ{›¾ü?OòË Xq¡¯.E;;;vK”y…>îí}÷ÝgBn¦_nBÊM±„þ¥Wå²@3´®'Ü6¶oQ‰†ƒ¨;Þ¾ÖÞ6`¡ÝZôMž¯ÊûíïûÿÛè6ñ:&©èv]‰‚íatí0Ô²½×wD9Ò Ž[°B¿vVçƒs¹#ÑBpYŠÏQ .¸O„²(·“&Óþà?X8RÎ$/&£b"ªž£ËºnÇb²ÛQ²Ðâ‰'̱¸?Q’:³˜Ð¡³Fý!„Hè/Œ\ܺ"®ÅVùMág^à§a7fÁHðÑ'Ǧìu’’°ÈÃí‚z(DƒôÈ#×™´&ÓŽ#IàÃ×T4gÇ~ž÷b2ÉBÇž8q"ÕN òÒë¢UŸÙ¡Ð \‚6œI¿àPzÞK²¥a2çâ®xß—3Nc`J ÍI¢Üu’’6ËžL; k K‰ßôe® ‹ŽŽv0Æù×Gúè¨àx¸Ù¤íʤaDÑ#„Ì…þXàšÓ‘vè6ã'3a·çø×Ï‚U]‹†¨¾ÍŸVý…)w$„¤;™öþûï¶Á~Êj2í$ æÝ‰½ûËø�]G2ÐÁ™Í%iTèÃÚŽ…²OÚ ot …gÙ÷‡¢B¡OJë$!$D+\_V1™vqkC8ÉÙDvº¸}fÁú¸ÏÈ~úY ¡Eqß!Ó¡Ð'¥‚u’ Ú!¤ã“ia ^ÆdÚI`DA'—"Á]~ù«¸€û¤÷fº_¾Ë¨Ð×Õl³š4‹çª×:OlBª …>)¬“„TˆÀq“i!î—1™vp=‰¯š‹9�«ø�Öû¯~õ«æZpæcTè«Åý•W^ vÉ� „gºÊ{GH Ð'¥‚u’j¡“iáW÷·_ödÚq$ |ˆêe» ÅHÖIÈø;—hŽ,˜eSmKþåÙï˜ÿ=ϳ;¦®S' c2 }R*X' )?°ÊC(#äeÒdÚwß}wåâàtñ(M°x¯Zà+ÍfÓ\,úiÝ/L$†[MÖ!0!ðq\^î'!y„BŸ” ÖIBÊ,¸ð§‡_=Ü5TàaµTüýÞ÷¾·ôH9“Àu¨ ‹&þ< RÜ/½iF°A~ûYw´P't"3î5!$ }R*X' )Åã&ÓÂmÛW5™vI“R³¶nÏ D8® ¥ùýòǃrê:�Ë@'g³Ÿ²@¡OJë$!Å4i2-Ä}&ÓŽ L>u¯>ùyøÀµ„ã>§ÙQBy‘/Äþ²À< œ#&„Q(ôI©`$¤X@Üç}2í8 ’á+®C‘63_Ñ9¸æ´ï+&à"otr–:~ê‚”çûNȪ Ð'¥‚u’ü£“i]{MyšL;Ž$+9\‰ò âÎ뼆?üÐnMÕX¶Ï¼F4Zfƒ¢@¡OJë$!ùÂ"~õÇ*îUtB åi2í8PˆeõCG‚ÀOs2kVÀÚ­#&?üáíÖtÁ|ä¿ì—(üôQ¯òÞÙ"dÙPè“òlI›ë$!ù�¢âqð»TQ¯ó8™vóêÛŽ±òÜcŒžàº1b’O<ñ„9Ç*æQ<ûì³æÜxF„!úK�Ö†¢¼Ì òñ\óî;ÖIBVÚ ¸Ým2í$Tàk#°X¥Mßþö·Íµãd9j‚sœ:uj%¾ò(ÎçT”!Ë€B?cðbÃ}J;ºAV`H׫ C½ýE ]Æ:IÈr¸OšL«mÚ”"N’Äh&ÖjyŠ(ðž Ä/žG–,¼#à>ƒ{µª{¤s0ÚR´çDHVPègD¾ûâ+‚ØÇ‹×ê^7…>!D7™+¬>ùä“FÕÜ© ²ˆÂnÑ–CèCðg îÛ‰'ÌýZxF:AzÙóÉ+ }&¦¼%BHº@@%M¦Õ¿E™L;‰$è1E-®[E/\w²æêÕ«æ\gÏžµ[V>®e/r}$$-¨Š2B'>!;wÎø-êç¼ZºÐP»Ö¹ ùÿà0Š!" â]ůú¨ëߢM¦¾Æ–×TdðLtžÞEËxF;;;æ|«^¸ eÕ¨Hu"¤êPègļ66høþù?ÿçÆÂ÷0l:$!Ø_ú¥_’/}éKú„T´[°ˆÂým—¦"O¦„<½[N´ÕEu9rÁsR¿üeÍШ7ü«ïYíÒªOª…~†À²ðÛ¿ýÛòÏþÙ?“_ù•_)Ü ä»ßý®i(1!RN 1a¶l“iÇ‘$ð1jQ–2Bä¢Lèœ-ÓO.;8/F†ó€†BE„*C¡Ÿ1X\ÍïüÎïØ-Å/D¢@«>!)rØ‘fM…fM6Úû2°_-ƒi“i‹ZwhÏ4*‹¦2 |€g†gˆ²-Û…ç\æÂ4ðÎBÝÆ;¬LϘy¡ÐÏÏóL¸ê JÇE-_´ê’6w¤×>çÿ¾²ú]„ð_=~ÏêÖ  þÜEŸL;”–m˜Š„ö¬,.H Ê©.W«/‰óBTç©éüü%¤ªPègLÑ…>m\?ÒâVý[Òižó[ÛhKo™fLBrE¶B¿]w2­ºå”m2í8âå†;GÞçI—f³iʹ 6Î÷õ¯Ýœ?OàºpM°ì—­cGȬPè§Ê¨}ír±…>HÛª?èµeÃÞ }R]ÒúîdZuá@ÒÉ´ø-Cð”UÜ” .“nä³éÿPzÞ–Ô±}K¼Þ¡Ý>9ìlIÍžsm휴{wìwÙ‚ž1:3ø<Ù\#ê”Þ缡•0ß„*B¡Ÿ®-ƒÐOתO¡OH@:B"+i2-"gAxỪX3!æ5Úþ‡èŸÜ±±â·¶%Ã{Áÿõméó‰ ö¥½QóÏŸÐwÝcйÓòÎ<ñ4åkÔ¹hO?ý´Ý’Ü÷WYGs™…~”Mèƒ4­úú„€ã }ˆVwü&ã“iá¶QÖÉ´“€€C§FïÜu0²1ÛÈ…‰µíQÐ>–fç–ý~N– ô1§‹`„”摚”¯QߘìœG0ñ׷й „¬ ý (£ÐOÓªO¡O˜]èCœTu2­’Ôî`F2ô>Ì'ð-)"ôפÖìÈqx–!ôµ¼n=˜«c—ò5ê<Xöó~¨è¢~R%(ô3 ŒB¤eÕ§Ð'¨Ðÿ5ó»ºé'ïºÂ©¦ªL¦uÁʬ®˜d¿/°&§£oò.ô!èÕŠÿOþÉ?‘¿ÿ÷ÿ¾üÞïýÞ|õ åkÄh®'Ï.bø¸F~ZõI• ÐÏ€² ý´¬úú„€;òæŸüKÿ÷ô?šßÔ®/D â já~£kX ¹“i«"îˆG{pêÔ)ùýßÿýˆ»îÉ"#Eú¸n½ÐÿQ?f¶ê§|8?žMžãÕã7£´ñ#¤*Pèg@Y…>HêO¡O*ÏaGžúr ÐÂô?|I¾ò'ÂϘLûÈ#ÿâªL¦ãгxZTà‡ÌuG-ÓnªÕjÆ}fBßaÈ;ךJÝ!¤�Pèg@™…~V} }Ru Þ]k,Ò¯þê¯Ê—¿üeãs^µÉ´ã@½?z¿~ù—YöööìiP¬É¸ñ{?·%=ÅkĹqûE@ÝŒÐQ$¤ Pèg@™…>8¾U?¶Î€I ¼P ) ùñÉ´šþäOþÄîE0±Ó ꦙÃHÎĤðšwåÀ{Fjkg¤Õ½íïú©x›'eÍ~?8ðd³V“zkOŽ‚Ì2ú*T!øí*“â5ê¢çγ[ò æy c²Š…ÅYú©’$d×Íß2 ý´|õ ©"XÁíþ†àÛ¬ÿ#q¢`€{Oâéᇶ{¥Å¸³æúñŨ‚tl 1Àýäø5ýk|íµ×Lév¾²E'rç1î?!iC¡Ÿ1jí(“ÐiøêRdÐÉ}þùçNX¹‚âãw~çwŒ`JÚï8 íOHò+Ï[ºzõª½Úå¹xFyNÓЕg‹¶%}î´ê“²C¡Ÿ1h(ј”Mè»V}®6Hª,îjÅ„¸‰ £¼$û«í„à£>j:FUyL¸Fܳe¢·c–·„ëÃý™ÄO<aö+Úè®vPh¬"e‡B?cðò@cR6¡ÔªŸQBª�&Ȫp&€VŠýUk5îîWÞ#œà>-K軟¼GSšEècLÄÍûï!~Ë–Æ*Rf(ô3¦ÌBŸV}R%Š$\Á*…¾Z«‹âα,¡_´:„g8IÀctKßE(O«H ÐϘ2 }€"l(IÙ)šp«úE²V»d-ô!ˆ‹X‡p½“„>¾+J ý$ÔX…(<ˆòDH¡ÐϘ² }m(‘hÕ'e£¨Â,[èÍZí’¥ÐwݽŠV‡Ð®OúðËÇ>ðÓ/*Ú{ðÁñŠ” ýŒ)»Ð¯¼òŠ)#­ú¤L@à¨p-ââUËúE´V»d%ô!„‹Úùx¦“„¾>÷"‡©„¸‡È/rý%dúS¡O«>)ú»Et¢Zù–!ô‹<âá’¶ÐGq#3\ÿ$¡P°ú;)2pÛÑ•—‹Ø!#dúS¡hÕ'e� ¢µháãd-ô‹ìª'M¡_dW8Ó„>VÃÅ>iv’VÞ]( &èR&(ô3¦*BŸV}Rt Рξõ­oÒU'N–B¿è®:qÒúꪃüÊ`Æ3ž$ô1–ðIû¼·P^„Ü,ÃB?cª"ô­ú¤¨`UTÔÝ—_~¹4ò²úeqÕ‰³¨Ðw]uÒè0ä”g’ˆÇ÷ûeÆX< eB'¤,PègL•„>­ú¤h@ AÜ£ÎBì§Å ×– û[X[«I½µ'Gö»€v¶¤îƒtZš[â!Íš»}\ªÉF{ßÏ)™´…~Ö®:ƒþžì67²՛méôEŽº²ëõl9ïH¯¸‹$¦zSÚÞO¥Û¿köž•E„¾ëªS˶ îé¸2aû©S§Ì>eeÒºT¶gIª …~ÆTIèZõI‘€È‡@ËÆ"9£ý]i@´×¶¤s˜ ÉûÒÞX—úÖ5雯ƒÀzc[®Aä+ükÍŽØ-¾øÝ“Vý¼´{wì†QÒú¸OYMºx²YÛæî^xŽzïK«qÒoOlÈ!ìHm´¥ÞÖ»ÒïþDÚè,Ô6¥½Þ­©Wè£Ãƒû‚ã ô¥»Û”º™¦ÃÒéùÃÛþöŸ„eŒv ãÉ¿íËr¥ÛÛù›÷xlŸ$ôñ=,úe„P®§žzÊn!¤ØPègLÕ„>­ú¤H,bÉ«3õº<– V ñën'àŽô¼ËÒ=ÒÏjùK:Ûï8"w”´…>~ÓÙX9ý²4OG;2ŠéäœéЂüÆàSñ6ýBíñf³ì·¨Ø]s½§¥Þ|k8qÔ“k­†ñ¹/¦sXóϽ/ƒ~W®´ÑY8)öÍØ’ÃÇOzæˆTƒïÏŸ?o·””~ú˜{Àw)úS5¡hÕ'E![¡7“ Ò¼v=Vë3°Ö{WÈù¢¯û‘룮*q±û…|Ôýt¬åFè[á™(ô;4Úùí�(; ¬NèÛ²$Žø ôØhT¨Ô'pW¼gü{sR6½1õcŽã'=smçË¥eâ;Œ” ýŒ©¢Ð§UŸ…L…>Õ™‹¾€ûÛ1bBîL²¥_™(Ê&S¡vf6d«s§·äº÷A¬Œ�Œu‡:ÏaÆû¶:¡oËžXtvd7Þ™1e›Ð‰™Vgæ8~Ò3WXöˆ¾Ã`Õï½÷ìVBŠ …~ÆTQèZõIÈTèCP±bËŠ«È¤Ü°#(· óZ¦]Š#ôýrö¯ÉVÝ—ð÷öÇ»�+â“G�,vŸ‰‡Õ ýá3ÎÓP|¡ý'r=rý:š1ÆÌ`;B‰#ó?陣mÇ÷eоäòÆo˜òaBY"q‘jB¡Ÿ1Uú´ê“"Ї º(gB>j…6o¢ÅyQ6ž" }0û'¥±}#&z•ïI„¾ ¤³…hCˆ4äI/œŸ‘Ä £¡POºGó?é™ã»¯ýë™Ö‰Uqÿàƒšr–e½RM(ô3¦ªBЪOòNvBbé‚cQÈQw[ê¡ø‚ËÆù)–úYDÙxŠ&ôÁPì'Y¸Á$Wú¹wݱ„bMj×eo\xÐYF3& ý9÷ÌaÈÁ„U|_fk7þ}÷Ýg?ÊLH¡ÐϘ* }×Ï‘V}’G2úTê¶£¸¾Ó÷ðÿä𘳉²ñQ胡ØOª3ÍYP«&ã:8b­þ‚tÄ~àæ3e4#꣮;ó?î™cÛ‰'Ò+{NA'®;(ç‹/¾h·R,(ô3¦ÊB¨Ÿ#­ú$d%ô!¨ÎŒt'‚ÎÞOF;1Ôwû8þù ÿBßä#>èAÙG;93Ý“0¼æì#!¹úÀµìOª?3tG;Có?î™ëJÒUx¯ÁH…²"ѪOŠ…~ÆT]諟#­ú$d#ô!¨.$[MˆªÉcõºã¿ŸÄŒ¢lùú·|Q{)YŒ'ŽfÌrOf/™ÀJ„þáâ]O¨#:jï¨Ì4š¡å?îhHôøqÏ|ggÇ|÷ì³ÏÚ-åæ›ßü¦)/V@&¤hPègLÕ…>€Ÿ#î­ú$od"ô!¨ÆFÓïVa&Q6™Ü }SƳÒêÞ¶†–û˜XŸzO¥çmM_0*å }¸]’­D[GbB–ÑŒ`…a¿ƒ´éÉAl§ã?î™Càã;þ*€ÈB0V¥þ d Pèg …>­ú$¿¤/ô­Et¬Ûˆ”;Ñ­äPöÛ›’¸*êä^è«‹H½)»Ý¾ŸþýéyÒ¬×¤ÖØ•ý0Í]éw^ðEüè=1+ºz?–Vãd,¯ÙY¾ÐÇèÄùh¸UÅvh¢b}ÚhƸû¦ïøqÏï3|žª€€Qæ²­LÊ…~ÆPèЪOòHšB_ýÊQσ4fÒ£/äv·¯'xDêæt<?ý| }øç¿#WîB½Ý4"Þ”·Ö–× #îŒÞ×x:)ÖÅ»2<f^–/ôudgCš»{Ãë>Ú¯¹á߃MiïkH8Ayħ/Ý+ž\n5üzËËá¸Ç£lIÏÛ17½úPVD‚Áª¬krB¡Ÿ1ú´ê“<’¦ÐÏùúùbéBÿð†ì^ùTFhïK:ò :-žt5⎺+™ï’S­Ñ’ËÞO‡Ç¸,x<¾?s´åØÑ[µÉ©ê²Ÿ}BŠ…~ÆPè¡UŸä ýÙI}eaéB¿ $=s|ÆBYe.÷84d4bëÓ`EŠ…~̵&kõ-ñzÇñŽ¿³õ)ôiÕ'ùƒBv’D_Y ÐO&é™ÃmÛ«j°Ñ… _ï4Bò…~ˆèƇñ^ð}[º—#Ÿ@8dJ¡ïB«>Éú³“$úÊ…~2IÏüí·ß6ÛŸ~úi»¥Z¨Á V}¼ÏÉ;ú!vr” ÝL�›¶‚à(ô¡UŸä ýÙ¡Ð¥ŠBÿâÅ‹f;,ÛUE Vx—ѪOò…¾[MP#=;¼…þXhÕ'yBvð›E8E¿²%,„D¡? ʆ2ºh˜IXö« Ä=\wpªÜá!Å€B߆p£ÐÏת_å—Y=Âø}–5½üò˶¤‹ƒ¼p¿ÊšnܸaK:;*ô“òK;!âËÿñ'~—UBÙâBš¤íUã½÷Þ3î;¸U‹>DŠ…¾…B¹¨UŸšHÙyã7L]?uê”ùë&ÆäNæOÿôOMÛ�ë1\E`À}Ê›¸DÛ…‘€e¤ï~÷»òþÑ?2«Ñ&}ŸEJZKërÕ…>ÐNê(!y…B_IÙuçóÿïÿ’—ÿÅ?öÿÕ4O<ñ„iÙ8¨UZõI™A]ê©§L;O?ü°Ý‹¸ Lº_ê.QÅvôÉ'Ÿ4eG]Z•qäóÏ?Ÿ3 „Î:Öà»äþZCÒŒ‹†ð«¿ü‹þßÿI~í×”Z­Æ!Ï´ê“ò³û¿Ëÿò¿±ÿéþûï7¿öµ¯ÉøC#¢ÈDuqï—&ݪöѽ˜S0;º ¯=Þ¾ãŽÞ]¶h³I€ÎYÀ_Bò…~ȤðšwåÀ{ÆiŸ‘V÷¶¿ë§âmž”5ûýàÀ“M_È×[{rd&ÿôÿÖ|b=´‚<þøãv¢V}ÜZõI) ]øÎÉ~þ7#–ý¯~õ«‘ÏXqóÝwߥϯD%,¥¸/ùûÍßüMù{ïïɵk×ì‹’ƺ)é‰èIÀmI;†HøÿÅ_´ßÎFÜ=õ8Àç?wîœÝBPOqOТä ýãþy„~Ðax�yÄÒþ>ôÇB«>)5ŽÐo÷î˜:®bÿþèÌg ÿã·­@Â~A[åß…†rDú…_ø…ðÿf³¹à}IwÝ”4Dô$0â£e×±?Oˆâ4®ñµ×^3çÆÄ`2#,¸/4ä‘<B¡Ÿ!*b5qho¼¬iÕ'¥%&ôê<ÜRâÖ?lG$×ê¯Q=Ш¢‘�#(?Dí¿ÿ÷ÿÞ*XN± ®Ç· ¦ëª™µÐWÿ|¤ßú­ß ÿGšuô'kTw*¼ÛÈ<}âú0$oPèg^Üð¿ÅŸÃzã¡UŸ”–¡? ˆÖWü64¡=ËF•üùÑ>¸~ùè ©Ë:�¸Os·)_ÈZ裬'Nœ0é—~ÉLâFDœyêA׈ ¸†ã„"-;:ú„(ßc$OTBèãÇWõ”gÐ(ÒªOJÉ1…¾ ÷j4ЄN�DpýùQæoûÛfÄ ïEDoÞ…>„5êŒF¨ ó’Æ5¢ÞÁ C£Õ(¨“\†ä‘ÊýU‚áæU6Œ«.ÿ,ЪOJI Bßî;ãüùaé®Úo‚ʽ³ ¬¢ }ÏåD;9ï¨Î¢×!«÷™mt2úƒàç="yB¿¡ühiÕ'¥#e¡¯à÷_`ן_:Ur­€à…E_­ûð#Ÿ:ÊQ0×õן÷/z0V¡ƒs“dð»Ô‘7¸”’(ô+@QÊO«>) }ˆZüvÆùóWÁÍí…®@Œ£ÁäI‘ÅšŒë¢¾àó®Æºè5¢cóÂOŸŒ†*0>µÃIȠЯ�E)?­ú¤<ÄÌ Òq-Ƴë6B1Æýù1AB¸ìÂ]˜b a “³¯› Ÿ µlY¦ÐWÁ ËþlÄbý›4§F 1ó-ÖUM´ÎÛ#$ (ô+@‘ÊO«>!é�~7½&õç/«èG»8ûZ^´%É¡Ig[7e²ÐOGDÏ:sg™m$:M8'bé“É`4 M„Üœw.!iC¡_ŠT~Zõ Iü¦`þÞ÷¾g~WnRþ2vª?üðÃÈÈF:ÊRN” Br™nYX ÷«ã’éèüŽ€UC¡_ŠV~Zõ ÉXñaÍw`BBçþüe[” 퇮ZŠ„y e°°bñE”må²@{¼ìÎE‘Á}ÒzÇ{FV …~(Zùñr¦UŸlà…ß¾úkzä‘GÌö2¹¸‹lÁb™9 Ô‚CËçƒØ§+Êìh'Ó]ðeC¡_ŠX~}‘AðÓªOH¶À’‹¾v°5Áò_~”‹liÙðQE+ž¬ëpáY°HŸ:uÊÜ72;¨_èXâYMŽEHvPèW€"–ßµêÝúFH‘€Ï~Ò¢\p)ƒ??F µL°ò£#S4ð pý‘Ëè„¡cóaô‡Ì‡Nˆç½#«‚B¿µü´ê²:ð›ƒNZ” â¥Èþü°´ºóàbQ´6F]®ÐùÊí¡³Gæ1Ü;XõéŠJV…~(jùñâ…O(®ŸV}BVÄ üö“åB4›"ºÀ }Áµ»eA¤ž¢ –b”!k^yås.Æ…?j´B£ÑŠ, ý Päò«%‰V}BòD=üù!ZðÛÔ„NÀ»ï¾[8~øŸ»’Q¶"´5W¯^5×;ûÂYÇ“~q.Z¤ê]Qɪ Ð¯�E.?HZõ É'pßIò燻&¥sŽëtÙ‚ðÏ{HDt¸î¿ÿ~s½Y£¡"»k­t’à¾Á_´Î0)6úi0èK÷Š'—[ ©-a ôyYÆ‹ KhÕ'$ßàw aŸäÏŽ@Qb|‘-¸+å\ã2bÛã<_ÿú×~ðÑFYú‹r¯+­u}©Õd£½/‹èüAÿšl5¯Hß~NƒLË¿Ð@ÒªOH1€µ.<Iþü8y÷çG{ã.²ט¼^³.œ•¥K ž'¢ûà<4´,:øˊ–D ÐOƒ£=iÕkþyêÒêÙó2£ž'ÍúúÂ…8™— ЪOHñ€@†U<ÉŸö<‹w‘-¤<†áÔIž5É Xñ—å"Tüqs/Ñ™$dPè/Ì@;[RóϱVÛ’Îá1$:\v›RGkç¤Ý»c¿H‡24дêRlྃ¨-:)QÜ} ¢óØGGÄ]d “RóÔ9Á=½ï¾ûLÛ˜:é÷ܹsv Ytœ´>ÑŠ, ý¹å½#íæ†ŸïIÙôöäZó´9G­Ù‘C»—2èïÉîÈ¾Ž‹Oß“†ýч)æç?5)¤[þÕA«>!Å¿]Ä~ÿÞ÷¾´wN‚ezqáçE-çHÈË*§¸—¸¦,]AvvvÌ9ž}öY»…,ŠF1âºdPèÏ…/ò÷w¥QóE}cWöþVzís&ÿµµÓÒìܲûø¾-Kç¤î±Ú‡b<&^ùW ­ú„” ˆÓ¤E¹ÔŸ?OO¸!¹ó |ó`pÈ:"ŽÎW€à'é€zÎ&Rç±cKÊ…þ <ÙŒ‰ì{Ý–¬›†ÿ‚xý{f÷­=#ÞÁ]Ë=_Ï_0×uñq\ŽÇdÒ* UŸr¢þünL{$|Æö<¸Ì ÍqÙ‚áaÕ‘¬Î:{ö¬É.<$=ô¹¡~’%ú3s[º­3&¯¡‹Î¡E?ânsK:#î<GþñõØ60Ü÷øyLû—Zõ )?ϰèóç_µèÇõi;„‘½*ÃúÐg傼Oœ8‘«Ñ•2€:Œ{‹9yq#å„BF½¶løùDÝkTŒGýå“÷ýL¼Æº¿m]Þgv›Ï`_ڈس@SH£üy‚V}Bª\’åRþUµ8¯»ÈÜzV†çÌ**ʈ|20R…û‹N#ße$+(ôg±Ü;.3I®<óí;NÐÏ—Ç4/¾@ƒH«>!Õ¿û$~tøaý_Õ¢\ñE¶²Œi?œb?m«;ò;uê”ÉŸ¤ê´ŽZñ]F²‚B&’Üh1¾Þ’nèZ?e߈{θМóä1S6ð2Å'­ú„TX—!Œâ‹r=òÈ#ÆJºlË:®Ç]d !9—i×…³ÒŽõÎò}â‰'ì’6¨Ç|—‘,¡ÐŸ u™Y“õVW éÍ ¶f‘,ˆñkrðÑϤk„úä}×[{rû£÷¥c&×½ï‡!W:Ÿùòž<¦ƒcÊ­ú„�Q‹~|Q.¬h»l~œOÙÂß´…÷8² ‰¶ù"$É÷]öÊ+¯Ø­„¤…þLÄ,ìG=¹þ'—ÖƒJ­qQÚF Ï¹oèŸí—¤½{]Ìóœo:8¦ŒÀªðd´„B�,ÐIþü°x/ËŸw‘­e„áÔ…³ÒŽà¢‘a(@³“qµ¾p.I ý -굆´®õähð©x›'ý¼7¤éíË‘ÝÏß3Œ}î{´'-cí;8ΪI½éIïH¥ûyÌ@åÏ+ŠV}Bˆa ñ¤.-n‚x]†?¿ZÑ0ÚÎ9Q`$ëÆ q¨ÛÒŠzÿ<ϳ[HV¨&#iC¡_Ê\~¼ÌiÕ'„ŒÂ.4q~ˆo„ÅÌÒŸy»ç…‹QíTÄÁ™¯£¬úivbÔ¥„¡5³Ï ï2Þo’6ú ìå§UŸ2 Þ˜¬‹I»h34AŒ¿ûî»™¸M@Ø»‹l¡½ZTÈ% }X‚‘š+Ø"?ˆ} Ïå #(øKHZPèW€²—ŸV}BȼÀ‚ 7´h#5!|'Ú”´Ûˆeµ#-b˜Húµ@¾i‰DtŠôzÉr@ÁýÆûlîe¤PèW€*”ŸV}BÈq€ Ÿ´(Wš‚ çrÙB§â8®CIB"1Í…³'Ä>Y:2ƒQ&BÒ€B¿T¡ü´êBEýùã‹rÁŸþõiùóÇÙš7 g’ÐÈ b?ëÄ\äwîÜ9»…,wb5Þk„, …~¨JùiÕ'„¤üùµ]ÑK+¶/êÏãÝE¶«~Ö<Ç }õñ¾zõªÝr|^{í5“Ü›ÈrA§÷u†+²(ú *å§UŸ’pcIZ” –Xãiop¼.²…üaíŸÆ8¡¯“~Ç‹sg5v“ÎI»wÇ~ìCÃÉòA}Â{ Q”°^ !‹@¡_ªT~Zõ !Y2ɟ߸ڸîBðãŸÔy'ô1Ÿ�Ç£œH¸Xãx¡ÿÄO˜¼Ž[&²x‡áþÓpE…B¿T©ü´êB–Ú´7q~´=°þc`^TÜ!A¬æ[0ˤÓÒìÜ2ߺþÝÛ¿„>ò8uêÔ±ÊAÏO£ÁUŒãR¡_õT%ÔªÏÆ‘² °!Òã‹r¡-B;4ÏäXìëæƒãç1ZàœSΚ"ôgî0¸v¤‰ÕÜÍq5Ùhï‹3Ø@Žܺð,qOg¿AHœj›ºI)Q«>GBȲPŸäÏ?K›qí.²õä“OÎÜYÐðŒÝ§}XñOœ8aò™;ÒkŸó£ÐO 5\qR49.ú¤”hãøÊ+¯Ø-„²\`UÿÁ~`Ú"7©?ÿ4k9·»ÈÖ,3Ñ™À¾Κ"ôqmÈ~úóA¡Ÿ6x0\=ðÀt£"Ç‚BŸ”XõõåH«>!d•@ÐC°iøKMð燥v’› ŽU+=Ò´0œƒˆ¥…±Lú;;;æ\ÿ9úY õÏžy¡Ð'¥…V}BHÞ€H‡Õî8*Þ‘y䑉þüî"[è q`X€ÇºûLúÚ±@,ýù ÐÏtÞ´žÐªOæ…BŸ”Zõ !yBâ"_Û*$LÆMòçÇgoAžäþƒÕlñýØÐ˜ Bß“×ÿ™gž1+äÎ..)ô³BWÃ\BæBŸ”Zõ !E�î;˜Ä k½ n$¸mÄýùÕ Vþ¸ëÏø…³â f©ÖìÈ÷ówÏíN&žèB?+ÐÉÃ( žŒX„Ì …>)5´êBrO$4åòüXžIX” {UÔc4Àáq¯ìƒmpšt 4?µêÃßÒ‚(úY¢Ï,Bf…BŸ”Zõ !ùgT$C¸Ãz_” v{ˆ}w‘-¸üÀÍÆµþ&¹öŒ‚¾VƒKODþ|ë‘Pèg ž+ž ¢ð̉@¡OJ­ú„ü3Y$£í‚èŽ/Ê…Ïÿîßý;yôÑGÃmÿ–sÞÉ›®ËÎ\þà‘Q ›j[Ò9¤ÜOíØá9ÍÓ‰#Õ…BŸTZõ !ùfvk8Ä{Ò¢\?üpøÿ?ý§ÿÔü¸pVêß}FòĽ>÷yŸ-©&ú¤ЪOÉ7Çs{» àÒö-žþàþÀî9pÂqœð™_à¶ÃÕßɬPè“Ê@«>!$¿ÌgÑþùç# ¡6ÿ÷_Ö××M;÷•¯|ňÁßýÝßÙwZB(Ǥíó¤ùcð“yÐ÷Ùhd%B¢Pè“Ê@«>!$¿Ì&ô×mØË/¿lþÏc‚ÈÇ5’ìÐ÷&]ó}F&Á_"©´êBòÉd¡ßlXÊÑ~]½zÕnÍ'q ÐÏÆ„BÆÁ_"©´êBòÉx¡ጨ:ßúÖ·Œ}Þ¡Ð_zŸ‘ð?!Ið—H*­ú„\1!4%\að®:E §H¡¿<`ÍÇ½Æ Ê„$Á_"©´êBòN‘\uâPè/ŒðÀO¯oܸa·2„¿DRI±€’W ”‹äª‡B¹à=†û÷!qøK$•„V}BH)¢«N ýå‚wî÷}÷Ý'ï½÷žÝJH�‰¤²èRò´êBVM‘]uâPè/Ÿ7ÞxÃÜó‡z¨°D’ ü%’ÊF4ŒH´êBVEÑ]uâPè/ˆû|ÐÜ÷7ß|Ón%„BŸTœÇÜ4Œ´êBVA\uâP识·ß~Û¸ï@ðÓxEþI¥¡UŸ² Ê䪇B5 Ni ‰_|Ñn%U‡¿DRyhÕ'„,Xðëª3èµeÃo³Ðna­zkOŽìw9ìlI-Üé´4;·bÇÆÓ†4Û—åJ·?²2o29ê]ïrKÎ:�÷Ÿmš¿GƒÏäúõÿ2c^$ h‚Ä¡Ð'•‡V}BȲ5n;ÇÇÙû»À¶‹k0Ø—öƺԷ®IßýÚl¯ùmÞ9i÷îØþæ~W®´›R_;)öÍXç!Ê ¿'»Í ÿÜ i]¾.½#=Á@>¾Ú¶mjй ËEWÏ>û¬ÝBª …>!>´êB–ÉâBß—Ô½¶œ©×å±q‚+î®'tTèo´¥7Ò?¸+Þ3RóÅþ¦÷i¢5~п&[õšÔ»² ü!êºÓªŸt$ÈrÀýÇZxøŸT }B|hÕ'„,“Å…þéµ/HóÚõ1¢=pßYoväÐn A V“ö~²[ͤŽÀÑž/àýïêÛÒMù@…~gëRòHÉœóçÏ›g€¿¤ÚPèb¡UŸ²,úãg.úBúo}ÁÎo»¢n8"·¤Ó<“`éWÿýIn58ötBž·¥Û:“°=Š ýëÞ£ ²ôÀ²ÿñÇÛ­¤ŠPèb¡UŸ²,ú°ÊŸ±wk¡LÊ ;q‹ºñãüú *ô£È[K%pP‘IV ŒVxX’Tþ q UŸ² ú°Ê_”3¡ëͨx7¢<ÉõÆt ¦‰õ$¡W!ŒLŸ`K¡Ÿ`°Âs@B4RMøK$ÄV}BÈ2XLèCˆ_pÜgrÔÝ–z(Â!ÊÏ'úàVùib]…¾ë¢“´Í!Œä´ŸaJœðK–Å+¯¼bžÃC=TšÙÈ|PèƒV}BHÖ,$ô]·Å@{ÿ'E¼Q«üd{µúGDz(ä§ûÝû‘ßÞ§‡þª¸ÇJ¹xo¾ù¦ÝJª…>!1ÔªÿÀЪOÉ„E„¾ «9âzãˆø½ŸŒv€Ûke×ðšq«ÿ‹¾×ö/üöm(e~>€ÀÇó€à§U¿zPè’�­ú„,9¾Ð·a5“\oì¤ÜÇêuÇHà¶3!¬¦ÏàÀ“MøðozrÙi–h=ÚÙxØ´Ÿ$@ÜÃuÏä7Þ°[IUà/‘`ÕGX2Zõ !Ypl¡?6š˜duŸæ¶3£ž'Í aM¡oÏÿ ýœÉ¸x&H|§U þ ƒ.8B«>!$mŽ'ô­[ÍØÐ˜vRnÂ÷ºšíHXÍA_ºW<¹ÜjHmmCš»{ÒOÊÚ2\·%^·°¾ý÷7p!ùa6ùN«ü%2„ˆ£UŸ’ó ýÀí&°ÈiŒ Í`_v·¯ýãÃI´î±ÑÑ~Ùû©tûwíAS0ƒcýäUoJÛ»"o^ýÌg’/°p–¾Óð~#Õ€¿DB&@«>!$ ™Œ›wG?¿è;íé§Ÿ¶[HÙá/‘ ЪOÉ }² ô٠Ѫ_ øK$d ´êBÒ†BŸ¬ŠgŸ}Ö<D—#凿DB¦@«>!$m(ôɪÀ{ Ï ÑxH¹á/‘ UŸ’&úd•¼øâ‹æ}ãß°[HYá/‘ UŸ’&/¿ürhU-czôÑGmIIÁ{ +åÞwß}òöÛoÛ­¤ŒPè2#´êBÒ«•€PÖDƒHþyóÍ`½~ÔGRN(ô ™¼¼hÕ'„R îzè!#ö!úI9¡Ð'dÔª¨„BH‘yï½÷ŒûÞk4`• }BæÀµêãB!¤È`B.ÝRË …>!s¢Vý?üÃ?´[!„brãÆ óNƒëóÏ?·[IY Ð'dN`ÉG£ˆD«>!„¢CVy¡Ð'ä°Q$„RhÀ*/ú„6Š„BÊ Wx§=õÔSv )ú„Zõ !„”DÝŸ>ÞkNÇn%E‡BŸcB«>!„2È;x§!)ú„,�­ú„Bʬúx§!Œ4bì“âC¡OÈЪO!¤L`•\¼Ó°j.VÏ%ņBŸ¡UŸBHY€¸ÿÚ×¾fÞký¤ØPè² ´êB)o¿ý¶Üwß}òàƒwžT8Ú¯¹á¿+kRozÒ;Ø/å–tšg¤Ù¹e? }BR€V}B!erñ^{ñÅí–E€?-µfGÍÿI½µ'GöÛÅÈáõŸÈõô:å‚BŸ UŸBH™@ˆM}¯-lÕ?ìH³V“ö¾/ËïH¯}NÖj[ÒYDœö¥½Q ¯1H§iÙA¡OHJЪO!¤L`ñ¬Åßk_çoIm-&ôSåw¥ß}K¶žû¾\Úö¤Û¿k·…BŸ” UŸBH™H罦Â>¡oF ÎI»×—nëŒu ".ú„¤­ú„BÊÄÓO?mÞkx¿ …>™ …>!)B«>!„2ñùçŸË<`ÑúøãíÖyÈÒu‡LƒBŸ”Q«þñ­„BH~¸xñ¢y¯}ó›ß´[æ$‹É¸d&(ô IZõ !„” DÝÁ; ±õg~&„×<º)íÆI©mzr`tÿ@ŽºÛRG¼ý0ç¡ì·7¥V{F¼N¸ }B2`qŸFB!$?¼ñÆæ½öÐC™ÕsçfÜ‚YG{Òª×(ô3‚BŸ Hת(=oËoôüüê[âõÒŠ)øM®3J!„)@Üc¥\¼×Þ|óM³ þû¹Î7ú„d"ï,nÕ·“˜Œ/ã½àÿú¶tÓZ:üðñ®s2!„é¼ýöÛæ½öë¿þëòoþÍ¿1ÿ3Ê\¾¡Ð'$#Ò±ê~kméùÚ~ÐkËÆÂ‘ 4âApmš˜BÈ$~þóŸË¯ýگɗ¾ô¥ðÝA¡Ÿo(ô É…­ú&RߘF„~:¢|ÐߓݭïËæ¥×Åëö%¥1B!%sÏjµZ(ðr“B?ÿPè’!IV}D/˜u"“ ûô…~õ`£ý‰bÒÜB™�üòõ}榳gÏÚ=H¡Ð'$cÔªÿï|'ŒEìyžýv2Ù }B!d>0ù±ô)ô‹…>!sõêÕH£ˆ4«ÐÏÒu‡B™ŒH¿øâ‹rÿý÷Sè� }B2.:?þxħqn¡ŸÉd\B!d1>üðCùÚ×¾F¡Ÿs(ô Éý'Ÿ|2œ°t<¡?)¼fÂ"vᑵpŸíïJ£vR6½O9á–R:âí+S‘SÚPè’!ñ!NM³ }0nÁ¬ÛÒm‘5 }BH…ÉB² (ô )(N'\Qp~¡O!d*Ž^xá&¦B'Ôeý?-(ô Ypåyê©§Ì™K†BH:¸BŸ"“E]¦Ð'© ÊÄ´ŒD!ж ú¤èdQ—ùÆ$©AF–ë!Ä…BŸ” }’k(ÀÈ2`=#„¸P蓲@¡Or Y¬g„ }R(ôI®¡�#Ë€õŒâB¡OÊ…>É5`d°žB\J'ôïu¥µ¨5;¢+§òC¡Or Y¬g„—\ }G¬‡©áIß|Õ’õp{]ZÝ£à—ÃŽ4këÒð>³HÈ¢.óIRC+(!YÂzFqÉB¥Ã-é4Oû×wNÚ½;v¸#½ö¹ØJçQ½¶lŒ7»rའÛIR(ôI®¡�#Ë€õŒâ’_¡$ÝV]ÖÖ[Ò½g71þŒÔjψwp×n‹c;mé 즩ܕþÞëÒXß’ÎáÌ‘œA¡Or Y¬g„—ü }kÑû@Žöw¥Q;#­îm³‡2èïÉnsÃ/KMê[¯KëüzÌ?ß ùÜ}ÎÈK­ïËúÚiivnù*ÞæIs‚ä¸ ú²·Ý¶×·¤Õ|LÖjì ä•,ê2ߘ$5(ÀÈ2`=#„¸d!ŽRa°/íÚP°íI«~Z6½O}ɯ¨ø?)íÒÜ–nëŒ_&+â ‡²ßÞ”Z­!Û{}˜|jQÁnε.íýaÞG7¥Ý8)µÆë²×¿#GÝm©û÷Š|ó …>É5`d°žB\r+ô̈́ښßðg¥¾uÍóö{`DûºÔ[{ØàïIß»à—é‚x}øûø#ÐÝQ€ÏÄk¬G\{F}úm‡¡¾-Ý#»Sߓƚ^É#ú$×P€‘eÀzFqÉ«ÐÄ7"ç|ˆuWt¬/~Ä•&æîcÝr"VøëýÀïSlIÍ™ 08ðd³æŽ èõÌ;Á—, }’k(ÀÈ2`=#„¸äSè[ñ½V—K—Û²¹ž0ùÖ†à\ouEçêb|hu>»‚]-üî¶ s0ì $u ¬…Ÿþù¹†BŸä 0² XÏ!.ùúVlû‚¼^?72ùÖ`\iœXùÖ§~蟯uãqöq»é0Œ Ûo:f�ýóó…>É5Õ`w¥ßyAê&J‚ëwé7ª½ëây;Ò¬Ç&G‘…¡Ð'„¸äSèÛКk'¥Ñ¾iýïcX~㟴/ÞÖ ²³ó}©Õ¾/íÎ_øïúþ C¶›¤‰¸—Äë|dÞ;ÆêáðÒÞú±ôVèW¡;Òßû‘47Ï›wÕFë²tº}¾“r …>É5Å`ç—¤9²Úà¸í“°¢ür'NéD* s–‘?äà@:þK!´òTˆbÔ3BȲÐ6!_B?x?Ô6=9«ªm4ÿúkm¹Öû¾?N#ó„V~¿CÐô¤wôioý‚ìØQ‚@蟕ÍKmÙëÃ=hhÁ_[ÛðßkûrdGêØ<’'²¨Ë|c’ÔÈ¿�;”ž·%õñ=nû4ÆYô­5Å¿ó-x2#°ü Þry� }BˆK>…>!óC¡OrMžØp1’¨ø·}!Ìp,,)i‡1ó;Ý·¤‰aÛÔó.y®g„å“…8"ddQ—ùÆ$©±æˆ_,)þÉO­ÈVë|Ü•FøM9HÜnÅóQO:Þei«åüП†Céu®ˆw¹%X³{Ý–¬›üÎJËó¤¥Ã®ñøÉ^5¾ü?6û„“¤ì"+¸¦áÄ)×MHÓèÄ ß•+í¦`Qs|cWöK6L‹rBˆ¢m…>):YÔe¾1Ij,_€©£ìtx].m<fü£ÖyGìGB‹Ùn|¡ˆÿ²gV*Ôýþ**º#yj¤lß”öþ¡gŒ}£!Ò‚IV6ç» œZ|0û£‘¬û‘ž3ÌÃY ½$ ü„¢h›@¡OŠNu™oL’Ë`wåÀ{&˜ÄNv'„Ÿù0Ü·Ý't¿9';Þ«V4Ûèf‡1ç ­ñ®kÍp_7^ò0*ƒŸwØYpG œj ¼&'›Aï…Nàr:‘NH9À½!„EÛ }Rt²¨Ë|c’ÔXª� E¯cõ¶‹ŒXÂÇùÌOð¥-â¥ui[:&’C(裢{hIwÝjÆ ýaGc趬‚ˆmÑQ w ê²3¼V»¿YR×6!¬[Yj=#„äm(ôIÑÉ¢.óIRcyÌuIr¹‰Z“Å÷øíC«zMê ²¥aÎ’u¬ñÎRäÓ;ÚYÐöuËé�hg›¿–£ÞûvN@9E>X^=#„m(ôIÑÉ¢.óIRci,q²êЕ'*„Çt Æn*ž×¥¾ùŽ“—2Mt»×åŠw·S`¡w­ùñQ‰Ä2ûDæø©ÖÖåŸJ7>Q"PNBQ´M Ð'E'‹ºÌ7&I¥ °$·Dßx$¾Á¸í>Iù»Œ;WâqÎy" § ·¿£råUÙzΆúŒw>Æ\Ó0ÂOÌŸ¿ÄàþBˆ¢m…~Ž0®´v´zЗînSêîH7I$‹ºÌ7&I¥ °ÐŠ­etá*Ýö™|tåg¨2Dù'røÑûÒ9¸;~»ki3‘5ê¶s(ýn:K•»Ç9Ö|„þ4ù["çÿ 9èìH{ïFhµÇäàƒƒäú_b nýï‡å/ôý{rݳe*ú„ ý¬¹-ÝÖKÎ;&þyc\ZçóΚW¢3JJu™oL’K`ë6üÒ?¼¬à=)­v(p‡¢ÜßÞÚ‘ÝÎgÆ?nûDK¿ÁqÛÁÒâíŸX7'‚މàƒùžï„¼â w{ &<¨–Ë?w£)—Ú]ëcïº5¤ÕþñPÀ‡Ç8>ù°ž¼µ+^äœå÷Bm(ô³@ VjLŠž+ö%ôÑ©83¯¤dQ—ùÆ$©±<¦ñó!ˆ·åZïöÐr^߯7¸ƒþ5Ù2h|Qî퇓SÇmv"ÜvÜуȹ‚´.·QßòýåÃØúî×zÁùÃh9þ5íî9‹k;'ð¿Û{]¶ƒí|”“åÕ3BHÈBÍŒ;†ð˜œoíÊöHP»Ö‰i§Ñ–¿`£¹ùÛ¯mûmø¦´;ïØ•ÏÏH«ûépÿˆ±(Úæ§¶(âѾxºJüš.ðè—i×y¿üc©?÷œó®9?·×_—FÆ.lû¥ßÅb‘gí¨» ýçdçGÁ»;|—ÅF裣Ô_„ïúà|AçbпaﯿmÄ–Ä”g“Xv|±ügƒã�…>É%ZA ÉÖ3BˆKâhnÂðÎ*ðþ6‰UWNcD H¡'˜ãuÏ]Þ¾!ý{6(C­!Û{}XPšÙZÓµ“`¿}v®%1XÇí(³¹Ö;6°Å0xD ¾‡|÷óP˜C�ß6ßϯîµVè«(>²+Í×·¥ë á`„]÷Õo=Ÿ-×k6e>#[Okíãf2ñÙÜ[öÈÈZÏf ¸F@¡Or‰VPB²„õŒâ’…8:FÌ×V‰ ä!ÁÚ**£ÂÖºj†n.‹¨›Òžäj¬ì*¼GËý¿~K$Q׈¸Ÿx¾¨Ðv,Ü4<v,³>›Èµ,ÿÙà@¡Or‰VPB²„õŒâ’…8:n¤ó1.&áâéIÛº‰1¾_\»bÒ.¾8Í_}n‹¾å¨'oǺ¨ŒÞÓ?¦ýÈ÷3 }›Oü\³0íÙÌTöžÍð|�…>É%ZA ÉÖ3BˆKâèXL“Æ]å´Ô›méôn:q1iEï4W•¹Q_|ÌñêH¯wy‚ðžþÙ0EèGŽ™YèëwãæÐM`ì³¹;GÙ³6ú$×P€‘eÀzFqÉи‡¨ÛGàïFëûmƒA1ºßˆ{ˆ]·%ðõ¶~à‘ £·¤³´°ã<X‘j×t ‚?$ˆÝƒÏä£úr7òù@þ&Áu'pÍQAnrÄGßïô´öü3û˜ûf×¥q'Æš{0úý›òQïÏïûp23îߎìÚùcûlnM(ûòŸ …>É5`d°žB\r!ô#î2uy©ÕôŰ~öEpï£`ª™ØyYÚÏ6Â÷G;Ï9û5¤ÕjØÿýÔh‹j?ƒxôž¦ìvÐyÔ¢ï燉¦ï·å9ÿ£“ZãuÙóŵûùFÚÚO*€c÷ˆf]4Ël³“[Ëv#éyžl´Ä3åRñ­Çø×ª¡«M^ñ(u L|6~çãÚNbÙov.-ýÙà8@¡Or‰VPB²„õŒâ’…8"dPè“\C–1ûÒï¾%ÍúF8¼ZXÏ!.ú¤,Pè“\C6‹,)îc&/axpèG9ˆñ[Ð%ÅYÏ!.úUÇúñ›wbB 'Ïæ\/ Ð'¹D+(™†NÚÑÉKñÏ3‹T0;Å^RœõŒâ’…8"dPè“\“¾�ä›ã,)><®Ñþ©Á_“zë釓xÜ|0OhÞ%µgàØKŠÿ•½þÓRoœÊ×ø±üçÈ’â>Fè?&Í,Ñc7¤éíûe²ñ|ýãÌ¡p"òþyâ’â˜(µ·Ý°Û£÷&™Õ=ü%„EÛ }Rt²¨Ë|c’ÔH]€93åçYR|`C^Ç!JÀ‘]ÖÚfÖ¾µhëpÞLKjO±ÆÛ°\ ËjƒhlÞØç°ÜÀ6üX¸Í±à¡¯¢X£ØeÈí="øDB‹ Õ}”ùì°#bF¦Ä)^å³ñM7†4!¤È M�¹úG=¹Öjøm^^GQãa$SÂ1viŸ±Ì³o‰É¢.Sè“ÔÐ š*:*‡¸ WøÄŽ‹,·­1}­˜ òTÁ®é˜¾ï㘸 HB¹b×oˆ»êÄ?GÄ}ì~a>Fè;¢ÝMá±ãXÙ³YK÷ÙB ÚO¡ï‰r+ôoI§yÚ¿Fk±[‡À�ôº4Ã÷QüsƒOÅÛ<m H‘¦¶éÉA’~Ÿgß’“E]¦Ð'©¡4U"5IL&/)?.*Š]1iÿO¨.óZô-Ç\R|äúÁ4¡Ôs}“Oì\³°¢gƒ¼!DÑ6!·}Òyú‡ÙÚzK.ãÍÂQv»bFVOÛìøçÎp„ þÙež}ËNu™oL’™°Ibr’ⳋIÍóKjOd`}ñ·¤øÈõƒiB?rÌüý`u¿9ˆ]㲞 …>!Ä%7Bì¢P±67qþ¾À&;WÉ,¦uI^5íâpÎS­±-;wLû˜wåÀÏ{«ó×¾ÞOpß1m¹#…TFžw?7þƒÿ~‹Ï){Gþ³ÓŽâí~H´Í6Û·üàž }’K´‚¦JÄÍ#êGˆÀàÿè’âzÜp2êb—±VrcðÖy—Ôžˆmص¤x_1÷”Á½F Ç|ôëÛÒ5¾Ö‚dÎïNŒÅ5ü·ð¥c–ïÿµÿ¾ïÖÞçðºlï& á:¬èÙ ž-öl!e" q4?ÌÏØ6øžë¤íš+ô'ÍßB»}ƶñhÓ·dÇ£Í\×6ÑÞ^úA›kÅ÷Hš šáòyæbw¬m‰ o÷³ùçpæ”EÞfƒÝ/É5hž}Ëž Ð'¹D+hj„ ÒìKŠ·o^sŽó£ÖK¾ ÷Ž÷Ò0cEp¬(fû KjOE-ú~~s.)¾÷ÙH¹Í‹"v/‚—‡.š\·æ;ÿ O.lHËëúåŠ/)îï·05ß’n˜W+|6ø»Ø³!„” ´ `¥BßÌ‘òÛ»DA³è»DF4!ôm�Oã½4 -gÂÑ\×@d6˜ö~ŒÐ£H(¯9f‚Пißò“E]¦Ð'©¡”,a=#„¸äBèÇÅo„1›8Ë5lÀàâIόк£²F9Êñ,úvuda°Lú#eŸÇ‡®;.¸ÿ€BŸä­ „d ë!Ä% q47Æ¢¿>Æ í }mMž¿0­ ]A8 ¾ÿ1Á5_ØZï“ÜwæúÁH'ãÎ…>É5`e¾˜ügš˜\ëË’Áù !DÑ6a¥B?œ_ä,¸xø3i_ø ‚#.1¶m5ÿÇçoùûm>c·a&áVÓ÷dScË›yK¥<s�.È™‘މuß çEù„Bþ/¥ÿÑMéß}þ›¸ëŽ†Ì„ßþà@:[ÓÃkβoÉÉ¢.óIRƒŒ,Ö3BˆK>„¾Od…q“u1š¬ûbööØù[%Þ¥Wå²Í#œwÕÿ‰\rW £ù×ã tëFc¯5t)²âÛ\ï^_îgÌÿ™?0\ÕÜuC¶3á¸2ß·Zà> }’K´‚’%¬g„—,Ä!«€BŸä 0² XÏ!.ú¤,Pè“\CF–ë!Ä…BŸ” }’k(ÀÈ2`=#„¸ M`b*Kú$—h%$KXÏ!IТOÊ…>É%n”‰)ËD!q Ž˜˜Ê’Ò‚oLB!„BJ…>!„B!%„BŸB!„B¡O!„BH ¡Ð'„B!¤„PèB!„RB(ô !„B)!ú„B!„” }B!„BJ…>!„B!%„BŸB!„B¡O!„BH ¡Ð'„B!¤„PèB!„R:Dþ„FNè«®,����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7n.png��������������������������������������������0000664�0000000�0000000�00000031355�15030617045�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ê�����|T³���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��2‚IDATx^íÝÍ‹Yzïñúf3xŒI/kc„ W«\ÕFk£1¸0h¡…qƒj!´17¡ ±`  ¡º¡qs‹�A3 $eAS—¤}±Er‡¹BS$ ¢EáB$Ï=Ïy‰<™YªŒz‰È¨ï•ò%2"òdÄ/ž8±&����f”��€9Ê���Àe���`‚2���0A���˜ƒ  ���ÌAP���æ (���s”�@e~úé'F3Cš¦K ßÿýÜñ„(ƒ  ��Î-¼ZC€ý×ý×lø‡øY[[ûä¿g™áŸþéŸæŽoÞ ¯ ï‹÷‹/²ùøÓŸþäç×A��|Òþð5L~õÕWYÈœBÃs_|ñE.„†� ×W-|¶â0]ÿöoÿ–Mó¼y ¡Zç;̇.4A��XþB€Ô«áðoÿöo³À¨ëc,õ5qw‡&V_ÃÎAq™Ä!:,“°S*Òh†•Êqƒd`hâ��W-ÀPë#í¡ÿ×ЧCÂÈÓ].ÿùŸÿi—SXŽq÷­D‡�­¯¥+ÇêY™  4íÀeÓ¦Õ_­ÇýxãPL»Xa™wDtùë÷ ÏÑ}£þÊ@Åhß�.š0 ¿‹š†8\½x‡%®<ë÷Dp®'‚2P1Ú7€óÒ“â´…æ}Š5k5“Jq}é÷¢]7ô{ •~ýþ4Hë÷YÅÉŽÈ#(£}XVXqeRÿ ‹`¼šÂ~a‡G¿W Òú}ãꔊѾœ…†(=<w§Ð 2‡ì›K¿Wý~õ{.~çT›¯A¨íÀ"!‡ÃòT¯·ÐM#EÐv¡}Ñ Í—‡  TŒö V¬‡pLÕ1mqhÖöB¿æ‹GP*Fû 4àhßTÂ1–¥'lÆýšõoóÅ (£}×›VCõXÿåÒm8mOq•™n:çCP*Fû®­öißÒh´Hõ)T™µ}i;£/s9e b´oàú(v¯Ð¾È\Ê —iÞNmîìÊ@Åhß@ói0Ѱ¢}H5°èáqઅnÚµ=˜?  TŒö 4›V5˜è@@F„6Úä§”¯Êd,ç©ìõimôe4 É`kÃÌã†l Ž$<¼Ú>ÈxðP:k-él=—q3fêÒ”fÒ>¢áúÇTïP7ÚõÊ*Ú>õ¤?ú/ÏGP¾ ‡Òk»;꬙ð¸Ñ?œâq*‰}Ü I*cÿðj{#iÒöó{OÒñGÿ8æYùö GG| êLO" í•þ˳ÊWåä@z–™—Žô†'þAƒŠòµGPšCcëál­$×ò2o¹ÂM¾HóqØ“vöxa[…ÆÓöú/sI¹)‚ò•˜Èñ`KZºòimÉà˜äˆ©Õoß�âÃØúo½½•A÷†™Ö;Ò½÷©÷2êß‘µÎ–¤£cÿ®›pUí.‚ò%™ÈÉh ý®VŠ×e3=çv¥´&­î@²ÕÏÉH¦!Ú~˹�},£ÁSIû]éøÇ'㲬› }_Ò£îe'‡’Úϸeöüß¹Çf|ñð;?-Z%X—¤ÿRB`2ÊÓtÏ>¦múY›Ò?,¬,µ¯õ®™.;®–tº;æÇô¤ÃphÑOû^O’Ö éÞúǧô3Sçl_ËpìçÉ[zºVØêµo�±Õ«ÄȰבµvO†Yϸr”Þ7Û¢hƒkKÛq82rݯïMP¾p&$îšhBq²+‡'ÿíöÐm(Œ‚cÜ7Ù Ó�÷ï5ƒžøwºmècmIÒ7f=÷RúgÞñAzf:ÂÊ17 ®ïôÇñsÙÊ>kMÚ½¡L{û© ÿ¯ÍœêA*ÝŽY±Ú~È…iŸ©ž»d„ñ™éßLå(¼tééZm:?�V“vµÐßð_|±B};}E9;±<l· E-Œ¤ZôëãhØèIÿ± Ûöÿºmû£ß´¢õ³Núö1ûºV"Ûcóiþ¹tËl₊¯hÛmDZ óaüéoåy(°4¬XRWÚ·^Ûµæë– Êlr”ʦ]©LiMû}NlËa±ò§†ÄrÐÿF†£½ékŸÿ(ƒí_Ë`ü»,˜ÎåÉkI7ã t8Ô–ídÔ— ;^3½Ã}Ùî~-‡Ç¯¤¿áVlù@¦+e5‘ãßîËÙ‹¦a9?M!$›ÏêlËðĽ{ѲYnºV›ÎÏr¦ßeØ‘û�®NÉz¨z¥Líº4[GÛshnDëuõÎÕ[fþ6LH=”óÌÉpÛ:¦ëß­°Õ•ô‡o¤×ÿZz~<áü›,ûñÙü^ŽÒGòàù3ÙÙhGãsë¶é¶ã£ÙLÞ3ÓpC:ÉCÛ$lcg¶y¸4¡+Æu½ŒAùB…Kü#ö{ÈjâËÂÓ0XÐÇéÚ°}[z»© ŽÞOû8›•Ög[=ÙÕ½éìuŰ>3<Vpæµ¹=ñxÚIÇr °Ùx‹Þ®óÓ1÷äC¿Î*ßÞt¢²³ùŠ—Á²ÓµÚt>—–A8³l¢C±îrBH^É~œv9„u‡n·nÏžxí—UHÝ6+^·ûöVG’aÖ¥ozô1_¡v…‘è$A[,ŠÖçöDÃ9ãÏÇcs•¨ÕpÃ2AùMƒoäÂ}Q˜Õ0˜ÐY•Õ¬|6÷Fæ=q@v{˜†Ì ?l ìžû;=ßv‡ÎЇ«²P«ã+¢h¼3]'̳Yàß3•«gÓÍknœQe4î+WbºV™ÎçòÊ@9a½S>(‡¼ª¡ax_»"Jt”/‚²ï—#¿6\A£¸Në¸K]VËݯò÷†‚Nô½Øñ·¤Ó;˜†p?]M:ª¸*V½Ý—EP¾0óÃ༮VO Ða<Qpœ®x¢™ Úae¤Ÿé†VÒ“½§ÃÙË´…@m¦aº"šŽwþ¡­Ð—Í?·‚]þãéÇ9÷óRÓµºtž–GPÊ9_P^ý°Öy¼×—Íö¢“÷>ÈøàIÔ?y]’^š;ñÚîø(¡3[y6²î€aû辇l}λ‰Š&n<ñ÷¦}¶Hƒ«¡GP´=\§ËÇ”/̼ ÇÜÙÅa +ŸOèék£Jõ UŸO=4V8æuñYÎÙ56 +¹œ¨¿q<ý‹¦)ë‹sÁçŸkºVS¹ö–AXNù ¬'4éïµþ—;MØ.ÝNçΩÓV‘7ÿyÁ‰s~<Åj²1ÓŬ¡\µ8 Õ¶ ¶iïd¸½)›Q¿éyã÷÷#hZ±dÕh7Œët‚AùÂLOb ‡„&Ñ•ZÝçrôãoehð…ÊëDZüø£;x6@ÇÁ1ªTǯ;Éàéÿñ•×S‚òäHö¿ÞŸ­HG¯+Žwÿ÷>„½‘§ýßF+§0¿ÓM~ÚeüãKWÅÎ*ÄÑŠ3»K±±ìt­>×å”rÊe½œÞÁlµ…mDþR¡³ÜrZJÝ6`îóvŽ†Ê´ùÔÚ®Óí6íî~)»/Ÿ»þÉ{ûòt÷…§ÿžüQËÐõÃ]ʼn5^Õô²q«ÿ[8‚ò…™<»â81aî‡Tû; µ’Ò¼q&ꊰÖéJ?ëQÐö±Âxõ¡\÷Š ù¬—ÊÙŠ#ÖÓ>É“ñ|Ýÿnº‚É*´qЊÆÛJäñÎÓéxíëÃÙÏFسϺ‚DÓ®gI›ÏÊÑ…Cn!Gw#ÌÆ,;]  óµ<‚2PN¹ 9¯þí¨}ÀÍõžgºíÑõnoï© â›ø0<ýSè¶¡Û¹Á(·®ÅV²-Ïu¼áÈcç¡ tÛ‘X ەŒɵŽ®|ÿý÷þ‘æ"(_ ¬‚¬+•çf¥ÄB Ì‚¢ÙÃî¦Ñ?Ti£•Oã§W±h%Oä p³3!r°nèa†\wòÕß°±X<ÞÉï^Èþ›×Ñ55‹+­øòo³wuÒ ¾ßô¤÷m~¥ë-;]MP®}”r–ÊޝK(°lá»Ù‰Ô'£}³£°c¯‡üé€}1\÷å«þ¸:ºó¨]0Vçúá唊-ݾã#a(\9À"Ëe½é‚v»¸üÑÁyç¸Øªoár¦—ÂOëµÚÓßÅÊ]G|Ie b‹Ú÷¿ÿû¿Ë/ùKÿ?�ç5=b†é=‹ÿîÝ»övÔ1ý¿¾¶øxs…ntù#¡á¨à•T”}×>.Wá*0«ß%i1‚2P±bû òw÷wò‹_ü‚¶\‘Ðùg?û™ÝA ÁX«ezâÒµ2ïÖÕ¶Ÿòþ¥÷žÞ­Õ§^½ u UåÕ¾ÌéÊ@ÅBûÖ=s Ⱥ¡Î6fÐ 6ÃåáÎcaÐÕù—‘¿ù›¿¹>}“4$7¹kA¨˜¶ïÏ?ÿ<·‘f``¨Ïðÿñþ×  (\£©Ý/Ê@Å Fïþüç?Ï6Îþçnÿ½}û6Ã%z4ç/ÿò/³ßŸög&õWÕø³úóÒßKSïÖGP*·o=¬'µZÓ«Z�¸|¡r~õ«_Ùj¯ËM€óÐBþ†šˆ  Tl^ûÖÀü÷ÿ÷´}àŠ„ üàÁƒì²>FP>M'å Ðd§µïër/} jÚ½¢ØÇ’  œ A¹be4í¨'‚2p6åŠ$Ðd´o žô²p×çŽ|@yz+k½Äi”¯#{R=a…ûè×í¨'=W€ßgÝMädôLzÉMIÒ7ö{Ó’vO†UÝÖïãPzíŽô†á¾†Í¦]–ôwÒÔ®‚åki"ǃ-ie÷Ñ#iÒ®îv¡6¸_Ÿ•Jí¨'í·¬¿Ï¦^öªÜökm­e\­pë¦"(¯¤°b˜^Êh:œ%pº{ù·º9ö :ú½¨§/¾øÂÞµ5f+¸åªhÿä&ÿFÊçq<®Þ £/‡G/d;Y—µÖ– Žý½ð'c9ØN¤µÖ’››Ò²‡‚ÞÊ {ÃÚÁ¤Ý óžû’½•Ãþ¦ym¾;Äd<”´§ã0Ÿc_÷Á?³¬2>xâîÝß¹+IgÝ®T²ûêÛió•fóÿvï¹¼J·¤³¶.›éïåøp×¼·%ýC wúŸ¶#?ofïçý†toõÕrbÇa^k_¯ËéX†½Žýÿ´š­‡ÑÒ×墯ëlI:2qþSËz®0?:ÝÿGŽüüÇ;“±—™ÎN'TÕ—ùŽÌr¦Ò³ã0ãÞLåè´Iš£¶í@V-kê]Ç,³­¦=IÖ?“þ·ºÞ×uï¶ OteV\wošõ»Yƒfïy(鳇þ=e0Jß®Í6¦ÿRlÙ&Ûê86¤›ºÇ#Ù¶hÞ¤2ö¯ËDãlÝMänËe®Ý®tü{Âvjýñž<ÛÒíJK:[ÏdôÊÏS˜ûÚ°=0‡mÏ©Ëfº]m%OdïËoÌvT· _K·c¶cŒ67ÿf¹l¿±y{6mÝùÖnóÌ´õf–M^ØæÜ’n¿o>G¯¹KzÃwæ¹ ø®â¬ ÓÓMedçu¾Ð=Iÿm*‚ò¹¸Êl»ûD~ÝíÉ`ø$k÷ÜcbBãÖ-ßÈþè‚Wø±kèkß•n÷ôŸï˜÷lÈgÝ®<x¶'Û!X'Ò똃]©h¹3}n)ä(½/-ûÃçÃc{'6¬Nã†Ä IÌôtûOí¨ó™ùûÁž¤£×-˜¶É¨/íÏdç×äÁà…ì%7ü^þ‚*¶­Lçyr”Êf+¬Hß™i»åßsʲ>ÍäPúfÚv¾4óðîÝ˾‡Éø¹l…y°A<ªHœé;2+¥á¶ Ø~…ª]H>ÞgÕ·}PzB_“+fÓº![ƒ#ù¨ëñìè¤+Ø"‚]Ÿ¶mÁäCñ=vÝ­qWOþÛ®¯]ÆmÚöñnyîócüö$7N·þÎæÅ®çÝöÍ_ Ç'n[‚¡Ÿ–Ÿ·×’nv|`tÛ-̼:8mÙè¶/qóròRú÷žÈð½nÓôõaû¤Ózׄóç&‡ «¨—r›¶ãh™Ù™œÏn3uüøÍ8?FópîïÊoƒÛ>`Ûí¼Ç¢­šV“›~e‚ò¹øÊ£¯ôNO *ìuêënfÍýõ‡òÚ7`·yl€áÇ¥?ÔÛæ=¯Ìãû²gö:ÛYµr¹®.|N÷8mPÎþ˜\uÙò?B[ýà:ǯ¢×-š¶PÁuó6)œÐ`ƒiòȬ¦Uq¬³yvËiºG‡ëEËÚ¾p1_‰v•^·Òt+7ÙgÙ×MWÞgúŽìJä®yÏe4øÖìáwÜ|Û1œ~o�ê+T•›{]óf?ÿÞ4¤ÖÝ®Šù]v¤Ï­Cç½'âçüº;ÛFé0ÛM" ¸ó†bEÙn·nN G¹ÏvÛé{ÜöÒMsøœ°Í‰žóÛŠügëëÞŸ²l| ît¥Ÿîg•×ÜvÍNëF´,ãíÚœi;Ëv-w^O¼]Sçù®¦G•sË¡¸ü½ëPMVåó°-tG(†ºi0v!,T!ý؆h¿'gCëG×@à vvÜ®‘¶’žì ^šÆøÚÈeÄÓeØp×Êþï~ÐÓ€èþïBµûÛOw$N›ß{÷ó`ß_¨°Úоv ü²ó\«nZoD¡{Þ²>[)úqÆ+×ÜgvÎøMWìf¢÷­ G2úݧ¦hVmÛ7€ŒÞ¢W‡f:-(»0¨ëútøƒìeÁî¬áË…Á³¬¯Ï,÷Y†]Ÿ>{Ù lÃgtD7sÚ²Q9ñ£–­ ðAÖ†}}<^7>·<.:(Ÿ÷»ò¶Ûó艮z¤å:\gœ |ù ¨ þ†$}³W9þ¿æïuê>Ž_È—ÝÛrsmSúû‡2žÄ!ºø÷ i?~*¯4lÙ†ì+³æç4ÒþÂ!P.ÅýˆìòäPÒ­D:7Û²ÑûNÍž² ~퇒¼´‡…¦ApÎßúºW&/š6{(ìåû\²#û£ßÉÁ¶y¯ö¯¶+´ðóœÊÁc™Øç|å[§Õì»CC“S–õi}¶ Ú®\ü÷`{bô±Œv¤»¡]ctZÿ8ç{™ÿÙ•Zè7n§÷–ÝrÊ@ýie½Vl3oªà‹!HÙu±wñúÞZ\øòï ëeûºP̈×{×Ý¡•ÈöYÏëÇÿ é~1.í‹s]lÑB·-oÝÿÃöÒH¦Å¡\ñÄUûœíz±n¶9OäÀnWÌÖmÿ;Ù?ÎwMÈ-}÷± ÇQ娙Âg„ª³ÑÚE#Ùpï÷Óæ–§ßΞ!¤ºñç·£vÎý]™m­=½žõ£Öñï§?¸mh䫯¾²¿ ÌMGP.Í7ê°×j^èóãW ¾#ü«Ác¨:’ì }Èô ÜþÿÁf?&=|2ðîmÅòÙ©ê‹:÷Û¾´/ýçhµÔŸLwó¶l=ÕÐï™êßù’ïß4Y4mvöÔ}uÙžLð_î3íë}¿*ÿc½¹ñ@žÚ“ÍóiËú´e¢+³Ü}ÕÁ­ Íxmß4·RÔyê¦2ЉÎ=ÙÑ~ÖïÈöCw‡·ÖÌF ÷|dæzye`5è Hô÷Ú´CÍnݨë]3ÜI$ñG ]ð|ゞݞ}éN\6Û’oûŸ-|Ï£^wúœÌñÉln»Xn{65=ñÎŒïÑcé®ë:ø•Œì¶ÊvÒ—T·Cöÿm¹“܉¦«+½Gá9×EáC|2ŸÝ6Ê»S—Í+yº³+{á$A¯ÑÿwŸüöÐ~âñfG`ícÅió¡|¿ýsï»%I2íÖÒ6ÛÌÎû]éɈÙÉ|fçàDôr‰úÜu¹l"A¨íXz¹8­¤5·¿2°˜¶{mÿ×é’‰e b´o`uè¡fí—IXÆusC²"(cµåC‡Ð ¤ÞtZ¬=±°ŒKQÃíÚu ÉŠ  TŒö ¬­,‡°¬—šJÛ·¶s=’rNÞ+"(£}«KÏþ×ß0aM®!ÞÌ«½œ A¨íXm!,ë¿Íª¸éÍ+ôvÌñ 3ªæ¯Ê°_Ñ"î’_M Éçò?»dwè/Mgä®òzã§CY4Ǿö´«P,ä/ªã/7C¯Ãœú[QÇ—e«–¶cíf¡Ëå:‡dEP¾,¹ ‚‹­dû£—ÊÒÃÓ:4æòqY_ÙºlËÂ]oÃ%Ë ×Îè%EÈ-{yÓDo›yлÓzör¦ÑMKNF2èwM°mM/aZšŸN{ý÷ÑßzÔ‚øÆZñßþé*„¶¬7iú]÷΂  TŒö 4C\…ÓQ]®SÑÇÉ»þºöÊ_ãNÅ÷ãðK¹Bp®öþ>‚Ú€(([ü=æÝ¡oÑM@ìÿõüî&dù�\¼ÉˆŸŸR7;?m¯zùCm¿Í;:RAù\Ì/ÜÌÃL£Û«õ7ñ0ÿ·7îðwÞ±ÏÛ×è 8ÜOg2Jª·½´/ØÛDãÕ·}(C«pZÓªÜÊÜ”!¾)FÜU ”‹Û¼°=›Þ¤Bïl·÷å76¸f71¯ÛÙÛ‘ÝBØ^ØB‡ìÔ±¹yÖ lØmq¸s¬17(v~Ãö{,ÃÝ®tì´h7”TzÉmyœîÉ–í*¡7áz%¯ú›v;žÝË~Öz4n×dœ_æÕ.“™ ù壊¼Aù\\#Ÿiüöè÷H÷e{×þ9Ü“~¸m§Ý3¾åïУ{›sîÁbUÕ·}(K«q¡ï²VéôØõ¥Л¾ËÁ±jð á-”]¥tZjû*©nÃWéÕ[4ß{b‚«†Øûþyç–lŸ«*}¶d© \ «‹‚²ïn¢Ÿó>y]þq{×;]NýÝ]ýÎBî¶Ò3ãöý¦gÂÿìãnçáê.§íR¯f¡í”*ò|åsšŒŸËVòÈßvÚq?˜|CŸýÆæ—æg¡ôÞï·Í ä•öe¯—H{3•£ µ ze ¹â겞UËÀlƒÝ‚î3]/´²úô}õÙWݦÝr'Ã¥ûþöÔ¾»ƒÞ²¹ŸÊ pdµTEy¦J«– Êþµa¼‹‚²ß–ø…ŠonYBnüÜ T”µ†nBz™C®¾AùLŽRÙÜ}Ÿ|ÃMÆÙÞLOÈöLõPMOö/ÍÊôµѸnêÞ¾œŸ^fK³þÞ5 Ô*0ÛmÒ‚~¹¹pè±n·Òá²—´£ ¯ ƾðÓê<œô$¹½ž$-í¦pd^UÒÜ \ìãèvø^a~Δýö{í–™_=ñ¯ðž³åbå\õ=VœþÙüpÑ‬í‘Ë~A¹4ó#Ù~èúÛ³gó?öãT~Ëäd(ý’Íß»éH&öºîÏlõ—©¨ó>ªGP®80ë¡îzf·ÝZË®Ù2í'û&¼Ív)ðÛ.Û}°åƒòI»Ý{m(ÔËɽ3Ùñ¡Ç.�æ»M,k^× óqZ¨jÅ—Uóý¥ÛÅó~ UÝ9W½xnÏjI§wà Wùàê–EØ¡ðA9l»mPÏùjz®z¡í,t" /‡ \šöÉjÛiËú,i˶+’–ÜÜx Oßü^[þä;„‘ù!ºë+êu{Ïü¡*\Gõlß�.S˜µhÕ'Pe'ÞÙíÒ†;ÆnÏÂöK»¾µe»Íë~)=}½½TÛÉÓ]Ù³Û;}.5Û4³{Ú—þÞ·­Ë.éV–¯¾Î•´+ˆ^ë9:i~ÞgÙ�ïNæ[ØåC»Ž F>$ûjrxîNbÂwxí-I³cáŸk?êÉ£ì¹P4[te—ò•øË»Ž²ž¤ú k òòÊ@ÅhßÀõ¥¹x(œª°×ÂõÏÄWxãËÃ5˜¶ŸxGLÛW²(  TŒö ôÕ“þB¸Y™KË]™x—©N‡Šm™€½:B8×AÖvTŸ®=«  TŒö V <„æ˜ïjÑ}š])âtÚ: ë&Ñvv°h+—ƒ  TŒö `žEUB.åu½…î:Ú´]hûÐv‚ËAP*Fûð)š¿ÿþ{{B–®3´ÿ)ÕÃë#®ë÷NÌ£?ûå#(£}X†ö;+Í:èߤ©67ƒ~zƒšpÅŠðޝA¨í@Yš´Ú¨]2BµY«Ž°4héaz‚U½…ï°ŒõûÔï•£Õ"(£}¸(ZmÁ¹ºôÐ=Uçêé΋~ú}„K¸évnôûcç¦>Ê@Åhß�.ÓiÁLµÎ'<_]®º|ÙqY]e b´o�WI«•žÃ¡þp‚XpÚ6tÛà:¼g*ùºÜtù…n0:èÎI¼L©¯‚2P1Ú7€ª…ð*ÏqõSý¿>®aO_£¯½n•Pç°ŒB ž·œ´z–¡xõ”ŠÑ¾Ô•VJ5ði0 Ýâji´jªÏé ¯ ÕÓU‹aCEX‡0/qW•0„çty„ù¤òÞ\e b´o�«J«ÊÅ*­q—Žâë8tÎþñÿQnß¾=÷¹O !܇a^ð C˜¦ÐMB/?ú__+”š<�@“…@§ÚxëÉyÏ}jˆxè`| [h��P[P%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔÖù‚ò[toøq´d£(ÿ pe��P[ç¯(Oäx°%-‚2J (�€Ú"(£Je��P[eT‰  ��j‹ Œ*”�@m”Q%‚2��¨-‚2ªDP��µEPF•Ê�� ¶Î”'‡Òßheã°ÃF_F¤eœA��ÔÖ¹‚2pN´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µEPF•hy�� ¶ʨ-��ÔAU¢å�€Ú"(£J´<��P[eT‰–��j‹ Œ*Ñò��@m”Q%Z��¨-‚2ªDË��µu1Ay"ǃ-iùq­môe4ñO§ (�€ÚºÐŠòñ@º-‚2ÎŽ  ��j‹ Œ*”�@m”Q%‚2��¨-‚2ªDP��µEPF•Ê�� Vþð‡?Èh4²CÊáÿú\ie,‰  ��jåóÏ?Ïrq¸{÷®U e,‰  ��jå§Ÿ~Ê‚ñÏ~ö3ùùÏžý­Uåå½—QÿN6N7Ü‘þ轘  ��jçW¿úU!Ø®É/ùKÿ,p5Ê�� vþô§?É_üÅ_d!ù¿øEÉj2PA��ÔÒW_}•åøG«CP��µ¤Uå¿þë¿¶AYû-W  �@ ¡ÒÉÀдS, ��J P ‰h×y, ��JâáÇ ´]‡¿AP� ”8(MA»Î#(�PMD»Î#(�PMD»Î#(�PMD»Î#(�PMD»Î#(�PMD»Î#(�PMD»Î#(�PªŠÃž´Í4¯­Ýîà­È#(ç”�(¡Š@1 »ahK’¾1ϜȰי>ÞîÉð£{ÏÔDŽ[ÒZ»'éxæIÀª¢]×A�€* Çé¶LÞèËhâS“Céo´¥ÓMet?¼—QÿÎìû>eòZÒûOæo4A9  �@ •ŠCéµ×¤ÝJ–]5Ìn®Kk3•£E!Øéþ¡œ9'OÆr°H»;cÿš œGP� „j+Ê­(ðËaSZmæ*Éd<üZº–™Ö Ùê?–»ÅþÉ>·Ì¼¬u¶¤×½)k­-Odr”ʦV®õ9¢î“ñ ÙNÖÍã-é<z,]Ü[„éF (ç”�(¡ª@1õe# ¼9nK§u_Ò£î–Ï­D¶Æ299žf‚­“—Ò7a·•<‘ƒñ{73OqàuŸuGú£÷á99Ü•¤µ.Éö OÞɰwË, Nl ‚rA�€ª á„<^m�¾%[ƒ£¨;…Ïk·¤7|ç{#iÒ–µ$•±ý¿¸qzœJ²Wªçôi¶Ÿ×–Nï@NìÍÛî™e‡i¬2‚rA�€ª >¼Ú+W¼5a÷vZ=Û¹•ï Qè®áºUä«À³Õã·2èÞˆúB£ô¾´âªtÙQ[å<‚2��%T(\x]k?”½oïK{ÎÉ{îré C|á:„`ÿÿ\àõæø1®£0=/€û.ôOn‚rA�€* >¬®ÝìHg£xòž ]!µ’CŸâµ(û°uؾ&¼6pÏçpÝfû€ëMÿäF!(ç”�(¡’@á/ ·ÖÚ”þá¼nèìý“’“Q*[[Odç³Òú¬/ƒÇæ>(ÛþÉïe|ðkénÞ•ŽöOîíÉ`¨¯qUçV÷¹~-[»‡2ñÝ7lW{µŒ®l&z““ÛÒK2Ç'bU”óÊ��”PI °'Ü­ËfúÚ„ÙüÕ,ÖÌë’Þ3¼v'òeWƈªÌkÒMåÄŽ·-dÇW©}P¾{_©W·Ð‡ ²y_gKÒÑO®zÝêH²3Ì÷“ÆÊ"(ç”�(@&¢]ç”�(@&¢]ç”�(@&¢]ç”�(@&¢]ç”�(@&¢]ç”�(@&¢]ç”�(@&¢]ç”�(@qÕŽeô|[’V¸ëà‰ {i÷†¢ÿ«‚½{a»'ê&àЮóÊ��”@ ¸bö¦(z“””qh×ye��J P\=[Á%(_*ÚuA�€V2PLÆ2L{’¬&ýo·¤£Úζ¿mut‹j3´’]94OÆCI{‰¬?Þ“g[æ¹–t¶žÉè•¿ vkSú‡Ç~ô/dÛÞ>;ÜæÚ=>åºKØçg†¶$éÿº©é8×ånrÛLŸ Ê“ñìvo»÷dóõPÒgý|=”Áh8½wÿ¥¿Íö<ñ·ð6óÒMeÏgwG¾íúùìØ÷dÓ`æugoGv‡æQýÌÝ®t’TÆ3ãÕå÷DÆzËpóø0•^rKºý¾t;-óü-é ßÙw-têwß†Ü á;Xf9˜×l'þûö·27ëøAÙ!(�PÂ* W‘uÁhkp$G}ÙXë˜Ðf"Òñ@º-÷÷Ä>~Gú£·Ó`«k|"Gé}®|àšJ£åú O^KºÙñAìyß-YÛèËHs]Yvü7òã´AYÿÖérázf¾ŽRÙ4!Ò…ýÿ–Qÿެù¾Ä}®íƒåÉô:mÙèÿo9ÈÍçqôž26ó¼Ñ?4ñTw&¶dÛ,£ì3}P¶Ë̾ׄ㓗6˜¶6S9ú0”^[§Mw0žËøc´ÌÜ\Îuêw%oeнᗻŽOçáP>œy9|°ßcÛ>þQN†Û&Të÷ýÞ.EPvÊ��”°šBCß½,4š4fB\_†V$Ÿîøªgxü¤I; vùîÑs6hkH‹‡b7‰å*Ê6|¶¶dpìÒvî³m@4ݾgÞ|…ñÅÏ™¨;ØÊªæÙ`ÃîœùôïqArCºýTY•ü½ žö½îï8üæ¦Ýö¯Ëó¬'!~⻲•êï¤o«ßk~|g].hç–_þú·"(;e��JXÍ@qJø²ÕÕ’ôR¿‰‚݃² ƒ7¤;xk¿ùÏ !7þl3½Keÿw¾§e÷¬œŒd°×“¤åªµ“0^”]ømu’u6ÑåqiAÙU×[IOÒá²—M÷Y—ƒ›×Üôzå<‚2��%¬f ðUФlØ…[ [÷%=zï+¨>”ùî!T¹ðêÓ‡piŸ³]/Ö£¾¹&Øî'û3t vúò]lõS§ÿôËÁ$ÌW¦6 ¶üsùpl»^´Ö%Ù~!c;ioe?ýÁL¿¿ œ>”Û÷|0ïèÃq\9öŸi»—L«Îîu®¿wÛ/3ו%„\WÍRóWnþÖe3}-»ƒ¦û¬Ëá½ëBÓJdû`lžÓñÿ éþ[‚rA�€V1P¸ëµßI$±}gu0!nðÜ.{b×ÎcI4 vûÒïþÿš¶ÜILH ïow¥÷hÚBƒÚ‡ød>?A¬¼ø¹[ò¨÷ϲžlËóÑÙ€>wº óõ¨×¦YCgþ¤;wÒáQÔ%¤8Ÿ$Ý3Ëaï?9N_ÿ“ á5¶ª|,£ÔŸt$誙‡$™vypáv¾S¿«ávŸó¥ôt™›éú¶ÿÙٗÇød¾éôêóŠ ì”�(@&¢]ç”�(@&¢]ç”�(@óÊu¯(þ²sWM?[Ñ®‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%4+Pè]Þ¾–ngÃ_ë·*‹îܧ—/Û‘§CÍ_Ïöñ ×>“âø§wŒû ŸvÙ6{÷ÂÝ®t²ÏÈÉ(õw3Œ¯Ï<ÇÉ¡¤þNzÓëMOMìåõ>Ën°r2Ú—½^"ëÙôèµJw÷`ñgœ“N›"(;e��JhT È®õnŠQ¥âø40ü­šÃ =ÎÃÝ ¤•Ý4%ÐÏ} zs“S> Ô!(û;Noþáÿv/ø»ém¦r4‰ÿöOÛ÷Þš^{Úß�e&¸Û°}K:½ƒs^£z>‚rA�€(r·Y®– £Ój¯åïü7ÿöÓKŠïr—Ñ»Ú=(„çyâ[AÇwðÓiòÏÙ»õ¹WgŠŸi—wëœoû;èÅò·ÕÎØP}Û|Wïü‡ œGP� „• Ñáÿµøƹ ª®®+B+Ù•C½ËÜ$ÜÍm]’¯åËÝM€›ÞéN»ì}ùM¡+Ä¢î:´%Ißø×MÍ Ê!„†i ] ìeÔ´ëH*½ä¶<N÷dËßapkðJ^ùùÈæÁšSÑÕ î½Ý(à.X¹ ìo]ÊÍNûœ0ïncÍ“­â»àìn«]¬p«AÙߪúÓ·Á^žÎ«"(;e��JXÍ@ñVÝ›Ò±Ý | !/ʶúéþvχ8}­–NLÞÞ•{Ûà4Ì%îù“—&l>)ååÍÊáq7]îobuú³®#-7oCõySú‡Ç~ÂN€“›/Ûíâ± ÖQ…yÑ2Èe¿P Ê §½”uGáÿ¹ªtÖç9¶((ûñ]Du½€ œGP� „• 6œåc¦ØõB+¶OwüIjþq{È¿mO¬K#ßGÖUg×:]é§û2ʪ¶ÁEW”C`-TssÓ_°ÅyS¾°«Êšˆ­Ç³¡sÞ2È勨(¿™ÇÔâ ìæi6Ÿ—~/Š ì”�(a%Et¸F&ýIiI/•áð›BÈ<–Ñà[é%7|eZ›^¡¡Õy(ƒÂÕ–57(‡“Û:Û2Œ»@” Ê¶Š¬ý‹ïKúê7²µUèÆ°pÄA¹ØGÙç3ôQžV©ß”kŒ  �@ «(´ëÅ 6C˜5Aoÿ;Ù7!/îžàª¢&@½—“á¶tBH?•®Çöõ6,š0×}ìÆgÃìy/1çÃg5„?3Á|Ý,ó[fÜá¶|(uÓ‚¨Ê!°ÚP9gÁ†W­lÏ>·p„Ï ]%| .Õ ?¿§t½˜×yQåú¼Êye��JXÕ@á®Õ«¡S↻YÖÇWPG/Làs'ÄuwKÒÒë§2ýFvú»ÙÉrîRfoäéήìmé ‚þu3Ý/ÎjQ7 o_£C7 ÿüD’lúoI’˜ÿ\ûQOeϫʾÛȼÀiCïì2x5xìúFë`«Àäç]G9®<Û1šq.¸Ž² ì¡KIàBr6¹ª² ëœÌwùÊ��”@ ÀÅÑÀ~ûì×F¶!žËÃ]‚2��%(p¡løn8²7¹Re��J Pà¢MƲÛ}xÊ zÚƒ[X_%‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%(ÐD´ë<‚2��%h ``hâ !™ ì”��€9Ê���Àe���`‚2���0A���˜ƒ  ���ÌAP���æ (���s”��€9Ê���Àe���`‚2���0A���˜ƒ  ���ÌAP���æ (���3Dþ?¯tøU~¬»†����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7o.png��������������������������������������������0000664�0000000�0000000�00000062772�15030617045�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����t���{o5N���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��eIDATx^í½ß‹$YvçÿÁ¼ ù¼‰hÄhÉÖK"J|™!”ª—|P>øŠ —$½E'ȇء U“bS¢˜|Èj(:附FCWBÐ+¨Ù&§º¥DŠV‘ŠñÙ¦¨I‚Øž$Iœ³ö½f×ýº¹¹‡ÿ´_þùÀ%<ÌÍÍÍ̯{¾çž{ïž����ÀN�����Ø1�����;"�����`Ç@�����ìˆ�����€�����°c �����v D����ÌåŸþéŸìüü|T>ýôSëõz™åÏþìÏ*YŸUùì³Ï&¾ë믿NÎ�6 "���`GI;õÿþßÿû‘“þ;¿ó;¶··çÊýÑM8ðÚ/í¼û:ðóJÖgUÂsPÑwûóÐ9¥ÏAçî �‹ƒ���¨1rŽ]—ÃüÝï~×9ÐÞ©þÖ·¾åþÿ裦êÿù?ÿgr„ò ^~iá¢k …‚®Uïÿìg?sûÀ$ˆ���€ Y¯_9Á>‚.çØ;Ä>Õ¦Œþ¦ðBÁ ŸP èž„â€T#Øe���CN|èð+úí#àÞÁU?L¢{Šƒ¬ûVg‚���(9ŠXËyUê‹ð‡Ž+íÕñ=(J‰Ò=õ½'º×ºçÜ[¨+ˆ���€’á#ýÞéW´Zi,>g¶‹î±ï-ðiD úM�ê"��� (â,'?ŒFËÅé/ý~ldô@•ÙI ˜B)ª��x¼ã/çÒGû•‚B^zyÑo¦ßH¿•lº~;T‘�E@Ý�9ø¡ã¯”ÒLª‰~Ë´ @ÄAUØiðàÁ %×¢ºç_Àn!Gß;‹Düë‡>KâŽT.(3;/�ò„º°[ø¨¿–ª(ÇŸ´‘ú£ßXcüïŽàƒ2‚�ÈêÀnà@?=é>»‹ïP]D @Y@�äu ÞÈùWˆžuý%ê¥Q7 L �r„ºPOÝÅÁƒE…"=P$ˆ�€¡îÔ9r~–œXÕŸ&¤q#�yƒ�Èê@}Pz‡}Ê‘cXÕM-ªºD=‚<A�äu ú(}CS|*‚«AŸ�›@½ªSPNŠä"� G¨{�ÕF‘Z9j8j°i|нˆ�€¡îTŸû_Žèÿôî:›âÊ~Çúo¢­ýŽíÿC5ñ½ªs�Û�#Ô=€ê¡ˆ¿¢³ÊÛþ§ú§dk žY÷ Ù•»Ö$ÿUߺݾ]ÅÿA…Q]S€œÓëÛ�°u^X¯µGj¢²ßéÛ›È<÷;ÍàÿÉýí»tÛ nä[÷�`]ä|Éù/eúÏ›¾uöƒ¨ÿÕ©·¿ggWÃø}¨<¡�EÀ¦AäÀð¼kÑwîµz6ˆ·ØUÿcëö_ºÿF zÖÚÛ·VïE²ê"� :„‘ØRŠ€×_ZïèCë'`8øÌŽ[7œÍ‰ËMkwßÚ˜èõÁ{Ö}x+úÛµóaÔÿÈ:ɾÖãHD\&*µG_ÚåÉ‘5ön[÷ü…´oÆûÝiÙFt¬Æ‘\":¶ê B�6 " |Žfõ—�ø02ÆÏSݵÃÀоJ¶epõܺ‡ïat+JÞu�VCÎV©€‰€ûöèÑûöøÌ÷!;ë{Ö»ø"îevA¨x{£y×%A¨áEÏ kvNí¥k«šÖé_íÑK;ïÞ÷6¸`Õ kEmØx’ò�!�›¡x}ñÔŽŽOpigÝÃÈØ&Ñ™IGqvÐý¹]ô¿gí¦ò?ãÞ‚é}Î")e�P~ädÉÙ*µ�^ìØÑÉE`ÿÐúÄÎûÇÖŒìŽK3MÆŒSN“ýšÇÖ¿úUìì»È~ò:rüO¿”HðiªI°Êíó&xMË“Ø$ˆ€‰€öö¨ó$È×|m½{‘�¸eþÏ]´&6Ô_Zï0rî#Ã|Úd¾wÀE`gÖ>Pj®«{ÃÁ3;’ÐkZwÕ[5ÔïÚ-D!ÀJ(ÿ_¥ô\žX;‰âOÆâ/íüÙ±µ”®#ÐúÀN¯“ÔÔ›Ö>ù*Ù/‹&±pö8Ú?9– ­Öi¿moÒTÑpе³ ÙªýŒï†m£1¥¨P 90š²­ùÀN"C<Âð8ÂòÒuÉÊ8ÿ2Ž®8C¼Nò6Çݳ¿š±Or\(-sëžv®võ:¿éåß[ÿ D!ì0£™s"ۻij¤©+iDíÆaÏ.Ò×–´-ê!n¶Yïä<rÔ_‘~ÿˆŠ{ÚOm ·|Û‰‡Ÿœ| ‡ÈÙo=²þËSëìß°;­·£ÏDÇ>zï¹âSÕTWÖ°u¼ó®hÿä@à8*³o­îS뺴Móö2u×>éÿµ‹ ÇݰãÌùÐÏ.”ÞÊÎܺçÞ8J×zwFR誇&´›É¦9h¡&=7¥štY†vrô¶µzÏíü¤gÝök+FSˆ®Al—6s,X¿hê,Àª ¶Žt¹o‡½/§S3¼ÃÖ¼gm‰€FÓZ>³3™iXóþý¸{¶udÝÓÿGµš-;êý½ÈÚ'=Û”Žyu/ìª_/Íp`§ï·íðáS;gª@Øi–J³¨üâLzþ[It_åÀÚ½³5Sv&&#èT>úè#Ò‚`-�9²}àÇ|ngÝ; ‡gqà#« ¸„ª ºª:[éž+(D�@ŽÌ­{›H€€ÅE€W¾�vÕYz`U�92¿îÉa¹5Þq¹:µNsÕwózïkþo 2öíg ØyЍêÙ¤�ª†ÇBÝ…U@�äÈuu/sŠPD�ÀŠ,&>ûì³jL Z‚1 Ö}»ßŒlÕàµÅd°"þ6ÐXÕa€eA�äu 'Â)BUæÌ”¥t ¦[Ü ¾óì…¦½S5«Ý-DÀPJ , "� GæÕ=r¢‘�ù£Hªú$³µz6H¶ŒAl Õ]Õa€eAÀ’ÈÈ¿ò_$SÆÑ½» YuOݸZøEïaÈòÇ?—ÕÁ¯sÃZí{֌οáR_Ûàäû_×Ôh=¶3·ÀWôÿþ}{ôá¡5ô™G?´Þ‘Öˆ^wŸ»éC‡ƒÏìØ­W“|.œ^øM?>FrÜq™\3`´0¦ÊþmkÝÞö D@8éÜÕÑs¾ÎŠ¢qš%`Y0´«þcëö™ ^ÏcÙÈÎKë¿ÿ=ëïð:3aÝ _�ùãŸËJáóĹu3‹¥ñ ¶Åι¬ü:ÎÍwŽ÷Ëøõ~'²É;ñ–5;§våÒ¨ÞZm’tOÀ g­)ðñ÷6­õ+·ŠñÜuJy壒u �1Ã/­wøvd<#Ç?|=—åD€ÐzC†8Ù°ƒ¨îýìg?³ñ/þ…{M¡PÊS*…sŽ›±v¯çx8°þÓGÖÖ‰îœcçk׬×/¬×RÔ~|/ö;ýÈ¥OX°' Úqà{‘ƒã$ç“Iž×Yat-�Ë‚Ø&Þp6îXû~Ü%¯¼jWfô¹Ó¬¥U†ƒîM3tÉ1'ÊD~fÆw_}íŒóÔçööívë¶;æþÃíÉaÜ…:N’Q?HV-޶»¨Ëß%FVFûï“ב>ÿÌ:ÎXëóÑÿ/ëžuÝÒøú_ÇKî…ß·ÄÝÁúNåoþþïÿ~rî“…ž�€üѳW¹)3ã¯"›ü¶5žÙàµß¶ˆsœDÈõ¹µÌá2=ìd ή¡”×Y.´X˜z•–°eœñ »$Ó¦–éÊüZûêý—ñ sf»Xˆ°kuÊÐ&¯ánFçý:ƒ­HÊÍI ®U¥úHHèúÂÏÀØkU[5‹uÏ¿‡É±’m×Þ»ƒÃºçsy ‚�È=wÕÛeg7F¹÷zýÀ>yrÏ{ k¶ß³vsßšï=´vF¿Õ²Ûþu§o¯ƒàÈ^£i‡Ÿœ»)‰—!¶¿Éw´þÜþºï¿g½'>úµ §çã Ð^tއOfLáZÎë, †UAl™±ã›¼öì*]™/äP‡Î;ê1n¿‰÷“’ß}x®w™¦EÀ8È}¿æã~}H¢Eá9&ךÅÔ½H®g8èÛÓn;îÕE@ú¾M¼.¶;Xß'ºŠ 9@þhzEV †ªÂ¡°*ˆ€-“íÀ*j¾BW¦ë 8°£“‹5"Ùß}ÉŠ" é pé9·â×îó7­}òK»êGNzúú|OÀbÝÁS÷B÷Ð- uËÝ‹×~[Ö¾S¯‹ížW÷4Ãs•äÆé|ë[ßJþƒüÉ ¹âÛ!˜‡ê®ê0À² ¶‰s†“hóD—ägöeo•®ÌÏìÅhLÀ^äD¿cŸŒbY”x…Ù‰ïvN¼ß°½Æ=ë½8½~òɃ¤wAÆøe`¨cã<ZáÖ¯gç.¿>I R~2­›V쌉Î[S¼½ ¦ˆ›×<ëŽÆ(X»s?úŽ[ÖùÉFû†¥LÝÁúN‘‡�€ÅÐx�M±(!P%˜Ö�#Ô=€r¢UƒI©€ªA½…u@@I˜ÎÕw%Iç© Ô=€râ#ªô@UP]U›B…UA�äu ¼(ªúÝï~7ù Ü¨®2 Ö�#Ô=€òâÇTse2áÂh—<ymƒ~Ï:~¬U³mÝî»Ö~ò$cœÖ kuzÖw“BS€N”dŠ«3뵓u^Ž?˘ÌahWç½x¦»FËŽO•ŸîsQüŠó•[ßJ"� G¨{�åF ºiA“Ó6çC䈻Yà¬Ý;‹Î Ùvö=;z|fÃ‰Ùæ§Ý­#—==Ý+;ïv"p¯!ã&’ÐÄÑñÓkº¸µ^nº$ßhEúý5×ΩZLu´Zk[@A�äu üh ¥¦]¬^”µ�àñÆì'D@ÌP{CÓHË©E€z3>¶§êpÇ=H>O!šþ·hæhܘƕ5s]ü±T'U7I‚M€È"»lcœáÜóx.í¼wä¦þ¯$²»]´×�¨Ê·.÷Úc;¬©’ãõcàÖnQ*Þ¿a­îóèÝK;ëFí¦o~`Ýþ¥]=vÓN7Z÷í¨ûy±s>,©¶Ë­<?§=Ë^8ÄŽú{µkn[7™{´FŒû/ÆmÓ•®)@�åŒ�»° …P¤±RWë;Öj5§#7W§öþ¨xiý÷¿—93ZOàâÊ­9°Ÿ>ÎŽvÑ.Bñu�!t¸ÊØ#àì°K©y¯ýâ䬶% <é}9Ö7d_Ùàóç6jÿÛ. 4<·ÏX¼q ·*üú" ~­ulÅ=îs‰ ¯!>‚cRh!ÈfmE€¯¬*›PŠ�ß»íì,j@F/"v#ÉËtݵ7²¦ç”ˆ¸=ÎßTИtòw±‹vQ�ÕÁ;^*åÙé1é¶e8èÛÓn;î-pÎò¥}Ñÿ±=ëu­ÓùØúƒWvõEßNžõ¬Û9¶Çý°×6vÎãè|XRâÐo&(À—t áë¡z§Ê(H¡º ¶ÍhvƒÈx6ØÉhF„ØPWÜÞoZ÷L&n‰.[g`Cí‹ L2<lw»g6töNÒÕêv%Ÿmþ±µü9ù²ÿÀ>y¢hS×z;Ð1tÀ‰hMÌ®uÑ.ƒî¥@�T9]ê V¦ÁÂq¬o3<½½:µNó–Kz=•J;ÕŽ·:+­ËâW¡?°öãÓdŸK;ö¡?ýr…ÁœîÄ+Ú_=·nkÖÀà·£c·‘5ìuÖ `ÍD lDÀV ŒØP³¼•8ÃYŽqЕ)£¹é.[‡ÎçÝÄñÏmä̧ ±sä“Á½åö§ÎÝåƒfˆ€é¢]D�@5Ñ`árMêƒE{¶×xÛ;Oíôw“ÀMätŸ>ÚMÙ9ÏûÖÜ»eŸüÈŽïÞ·ûn¼–Ä…õï[û~2 §7° rú] *þþd¦ Ì Uô=³¦M¥û˜sþu Ñgü¡iQ‘Èê8þLÓ€ªÎ1¶"`«Ìêž iͯüCëºÞßͺD—m¦‘UÉè Hºm'ö›ˆØÏ£é@ë {.�ÕÃO*A�°-|ïS¹D'ÔDÀV‰æFë±¹nOÿ§á¸4¡¯'#ìŽMvÙ*åç};Eþ#\w±ºR_êŸE@â仮ܗ.•=0¸Þ]´«‚�¨6J ò㔪°I4÷¿Ò4�¸škU@•@l›Qwæž5îܳÎÓ/ì"rìõ¿ºl~ÒµCue6ï[G½r®_žn¼ËÖ9òî;}A,0âóPÄ?$y7Ƴúh –Ýù5í³ˆ‘q7ôxŠÐPDÔ»‹vr­{�°5”¢á{¬ ëFÿ?ýôÓd+ÀvA�äu >(R«ˆ­7åo¬‚œ~Õ!ÍþCôò�#Ô=€ú¡¼m¥p(EHé�‹ á¨z£B½"@�äu ¾øÙ\Ô;€S³z H�9Bݨ7ÊíÖxß3€“œ(;+(”¢Š@�ÔŸÐé“0`�ñî¡?ˆQec'E€G Š‚º°;hÌ€}* `Hª?áo®¿üæPFv^P(E�Ø-|T8ì`6˜ú u#4e,¿/T…���E H±Ÿ^i"š&‡±zè7Óo§ßP¿%==P%���¡qÊWʈŠ ³qy‘“ï#þÞñ—¨¨ˆ���€’à{BS"^‚âн…š~‰�¨:ˆ���€¢Þ�¥šhÝ 0U/w>ÛÃ;ý¡“� e ê"���`#¼²óîíd:àÛÖ=•lß JCQªrP½sJúj(ËßWÝËÐé×6î+ÔD���ÀÆÚåÉ‘5¶ ÒøžE¬ÕKà{ ô¿w`‰\ѽH;üá=SôŸ±°K ���6F~" 9¹JR¢Úrt¿óïØŸÿùŸ;XéDÚ¯Ž‹—ùȾzïìûžÝ ½Ö½ÑûÚ`—A���lŒbE€P4Û;ÁrzoÞ¼éœà?ù“?m󎱄{çXïûô"•2õ$èºüyéu®ŠàëÜ}OˆŠþ÷é<ÞÙgµf€i���#?¦·„)A~¬€¶+êÿñ. >‹Y޵ŠO™ ì°øÔ£M”ð{} ¿[çâ·g �XD���ÀÆØŽ“«¨v:ÍÇ;ÄÞN#ÇZûn"×ݧڄÅ÷8l¢ø¨}X�`{ ���6Æz" =xuVt‘4 �}ŽÁ®�"���`#„S„ªÜ´öÉWÉ{ÓÈÙOG÷ÃÁ«³¢û‹  A.<�Ì���°EµWô>Ý×_Ý—³¿©A¸��XD���À†3¯¾îËÙ£û>ï}[\/�¶» �TD���À’¤£û~mE÷añ€â§1€âA���ÌÀψ3+º/g_Ñý¢ß.—„��D���€C޼îËÁ£ûr²}t¿l¹öË@��"���vŒ0º/º¬ÑýEX^�D�� �� ÆÌŠîëu™£û‹°š�ˆ��@��@ ðÑ}9õat_N¿îK Ôeá¬Õ€@��"���*†y¥ëøè¾ÒxÂè¾_d«ŠÑýEXO�,· �ÔD���”’tt_Žo£ûסû¡ë^]���ŒA��@áÈÙŸÝ×Ôœ>º¿«Èé—ó��€M��€ÜÐâY>º¯EµÂè¾_dKÑý<Ù*;��؈���Ø >ºïÙ"º¿<��؈���X‹YÑ}ý%º¿:^�H4!��`Ó ��`aäì+‚F÷ý"[Ú¦È?Ñýõñ@¢�¶"���¦PÔÞ/²¥h¾_d+ŒîËÙ'º¿y��ˆ��€'Ý—³Ot¿��ˆ��€AóéÏŠîËéôÑ}òÏ‹��y‚��¨r&}t_e:º/g_Ñý]Yd« �� o��&ŒîËÁ'º_=��Pˆ��€ 0+º/§Ÿè~uA��@Q ��J†y9ôéè¾^ËYô‹lݯ6��(D��@Aøè¾œ}9‚rÓÑ}¥úݯ��(D��@¤£û¤Kt7A��@@��l-ž5+ºïÙRtŸE¶v‰AÕ�� "��`Eäì+ºïÙ £ûÚæ£û�B@u��e���p at_Ñ|¢û°,��(ˆ��€€¬è¾ Ñ}X��”D��ì$ŠÚûE¶Âè¾þú辜}¢û°^�¨>�” D��Ô9óŠàû辜ý0º¯È?Ñ}Ø4^�¨~�” D��Ô†ttß/²Etò��e��•Ã/²5+º/g_Η1€¼A��@@�@©‘Cå£ûrðÃè¾Zúè>‹lA@��@U@�@)£ûrî‰îCÕ@��@•@�@îÌŠîë5Ñ}¨"��¨ˆ��Ø>º/§>ŒîËé÷Ñ}‰¢ûPe��PE�°äÉ òÑ}9Eatß/²Etê��ª "��–"Ý÷‹l݇]��U��3‘³?+º¯©9}t`×@��@ÕA�€[<ËG÷µ¨VÝ÷‹l)ºÏ"[�æ��TD�ÀŽá£û~‘-¢û�‹£gGÏ ��ª"� ¦ÌŠîë/Ñ}€åA��@@�Ô�9ûŠà‡Ñ}Ý—ÓBt`u��P7�BQ{¿È–¢ù~‘­0º/gŸè>Àæã/Q­g� . �JJ:º/gŸè>@¾xÀ”·�P7�#çbVt_óðûè>‹lä ��ê "�cxa'G‘szÃZÝçv•l^ž¯ì¤}׺篒ÿw¿È–¢ûrîÓÑ}9ûr:p8�Š��u� ðÚ.z÷l¿}b—Ã3ëÜYÉÚåçŸÛÃäßšF÷åàݨ��ذ�ŠÞß´ÆHìÛA÷,rç—!rþOެ9Âr†UÜñ’w«Ê¬è¾œ~¢û�Õ��»"�®Ç9þ@$¯“·—a8øÌÞo¿c{gk¤ƒœ9éè¾^K�øE¶ˆîT��ìˆ�¸ž‰€d<ÀÙçÑ1ÖI)Ú.>º/g_ν_d+Œî+ÕG > ��`×@Àl"¨œ¤£ûrˆîì��ØE°�q>ÿôÀà¡]õ­¹w;ù?@|س )„á—Ö;lÚaï˃ϚÝ÷‹l)ºÏ"[�»Å*`8xfG͆í5­{¶êÈ&ÙÕwíVM*�P=°™S„–SÈÙWÃîÙ £ûÚæ£û�°Û¬ÔàìÚµO¾²áy׺v¾ª»ü{ëQδH�¨?ˆ�¨,at_Ñ|¢û�E– P@`¥ Ëk7nŽEÀ(²îã™ÒöGvrI��ä "�*AVt_…è>�\‡²¥®$�"bÇ?ñë¥ìôý¶>|jçW��ÈD�” Eìü"[at_}t_Î>Ñ}�X9ú>â.!°Ž�›~<ÀçvÖ½S›‰� Z  0äÌ+‚ï£ûj¤Ãè¾l¢û�° x ò[¿õ[+ �Ç&Ò��J�"�f¢i1×j,ÒÑ}¿ÈÑ}�Ø6¾71,ajÐòhÊä[cà_Z§9ž>yxѳÃý{Ö»xý—š4�   9ÿj<Õu¾(~‘­YÑ}9ûj|7!,��®C…´�ðeÛ–&sŠPD��T D�L¡¨½w5”YÈ‘÷Ñ}9øat_«î³È�…¡ãï‹z ×ë ��¨>ˆ�˜@ütƒé£ûrî‰î@US¼ãO`� �5ŒÞÁO¢û�°m”º#ûâ‹ìMºÈ‘—Z¤|ç;ß±?øƒ?°;wî¸×Ú¦ Gú˜á÷�ì ˆ€š¡ˆ|Ø ¥<Ñ÷åÛßþ¶ýú¯ÿz¦�P¹}ûöh߬ã¥QD�x¼sïÓU¼=ñi„*zí·«d9ì:Fhk–-éã©„Â"ì9PñÛ}įGBÏ'�ÔD@Eðνn5F~à­ŠÏß_´!õ YXNOOíûßÿ¾‹˜}ó›ßœhß}÷]·O؈‡% ?«FUÛ´ßß'b èYÖ3-Û¢g\ϼw¨}ê`– (³3í¯)¼.@ñâÅ_› ²‘�¨ ˆ€á#fjL¼“ïïÜg5¤Û˜ZSÇÕ9¨!WYŽ^¼¨è:T¼P¯Ë÷*�@9‘“«çÔÛ(„ÐëÐÞ…çØÛìPüx›-»éï‡ö!è�eP�aÔÌG–Ôhø¨’ÞkŸ2D•¶!2<þ^x‘ 1à#ˆ^øx§‚@¾èÙ~ÿ\zÑ®gw›ö¡ÊxŸuï´]ï� " ä¼z‡ß;¸>Jä¢DÓè¾ù$5¢I^(yaÀ}ØÞé—m’Ã>oØ©õ ÛßcÞ_�€<Alsï¸úèOèðÃêÈI …Ax引X9õzžB§ßGªéyÛ>þþûÔK/ ¸ÿ�ˆ€ ÇSF['Niþd‰.5ªj\`o¯üó¢¿z~p:‹G¿ï‰‘ ÖÀ6A¬ˆOç0z†Ó_üoã#kü6°ëxÇ_ÏDh¯Hï)7fa;#q€ �€MXßmFhHï)7>²æ{iäÉB@Ý‘ƒ:þ8Õ&-ôšÞ�XDÀ5xÃ:þÞj"§(Jƒ  uC 9üa/u¼^¤Û%‰=~c�XD@ÞY #h8þõ‚ßꄯÏrU”ãOo×n ß] oÇøÝ`Q2ž2¢2¦>J õG¿»ªIð»CUó/‡›éö‹TU�¸D@„Œ%‘r¢|+ºØ¡Œx‡O)?ú‹Ãž´0¤n�À,vZ„Î?„P7 ŒxÏ;ÿ,`ª+ j �`;)pð`Q¨+P4øÓ;t8ÿ°(^8ªîh 8u�<;%|:,K(È»†<QÝSŠš Ñ\Xµwaû�°3"ÀGBdqþaU4Ϻf_‘ `6!Ø&²S~À:Nl Ù-/*±a�»MíE@hðˆ¢Á¦S¦¼lœ3ØÞn‘úÛ�µù¹76èÝußçÊ~Çúo¢­ýŽíÿC} ¢Û@éf²!°}^X¯µ?²[û~dÉ®¬ßiÿC] Å&=ä�»G-E€Œ™ŒZîÎÙð̺¨ñ¼k½AÒt^õ­ÛíGÍ*Ô‰LÆ À&ð9ÛyÚ­áy×$Z=Ä["³õ±uû/ÝPoüX¥9Ì�Ø-j'dÄdÌ ÉýÓ·Î~õ¿:µãö÷ììj¿µE©f~Ì À²„‹¼í–ï­Œ£þ�Z»ûœÀÅŽágŸ"m`w¨•�˧=ƒP¼þÒzGZß €áÀN[ÖHºÝUíí?¸®ø·­Ó}`ͽÛÖ=ÿ•]ÿÈ:­ñ>­ÇNDŒÒŠ­»<±v£aÝÿÛžµoÆûÝiÙFô~ãÈN.E Üm9qš†/w •Eu¥ÈzŠ€×Oíèøt$�†ƒÏì8±EqÙ·fów¢¿‘ýé|h›û‘:‹¤Ã¥?;¶–lÐÞ kIDx{èzFv"[uеóÿ!ûïw§õ¶³‰öIt(ŸŠF¯&ÀnPP ã5÷íÑ£÷íñ™oÖ¢&òä(jìnØaï »pcÔ0¾Ž·7šÖz§ /zv9øÍΩ½tsÓ:ýè‘ãfo\÷}²}гVÒèNì…àº""ºP=|})²i$ÚأΓ çò«ØqoܳÞÅñØQ"­GIãudÓîEöíVd{^Äã \ohòy9þoâTɸ·!?Õ8´îÙE°ü­P,¾-ÕLh�Poj!Ô}YŠèÅ(òu`G'‘ëïñ" rüÏ?³N³‘DìeçÝÛAô>i4›ÇQã:ù^œ·9ø§Ï­wx#Ùþ&é×ô‰;9u¸Eÿ•T$£^Ææ;¼N¶ŠÄµ>±óþ±5£}±ÿÎÝ´öÉWñnI€B‹«d\”‹ì'¯÷;ŸÙ—N$øÏÄÇ£ÿák( jKó›�ùSyàS€ �"l “M1ÉŸ½FËŽO6 L·_2S‡ݳÇÖëU"Zö°sßÞŠD„Ä7Ž´]<³£æ~ÆwC”! åFÊ‹Š>@¡(~z p˜â£ÔÄìtm›\D¸ÞÈ}kõžÛY÷pt¬8pqÃZZû ²S~„Q¯æÏíâDiYß Eã…� €úRi ã¤AÀ…H5†‡‡=»˜ Ä'κ‹¶µ­Ûû±_ùè~Qu«Ç½ íǧ6pÇJ>/ñð“göH¡y×ý$û>¯6 GÏ’ý¡ x!0=E­D]ËšMÕ ßkä1ýöò*Ù¶ÎhV¯èÞ+ueÁgh4«NR–‰fûäů ÔœûvØû2ª)œ³®k‹lKû‘õNÎ'#ýÉn6ü2îÔ}ˆìÛãþ ¨Ï‘8~f'$â´Ç—êyh¼m­;úLº×Ê„‚E÷TÀö¨´PWzù#­¯m h—¢ûç?¶^·mM5{‘¼¿:±LG ¥Ã÷TMϸ Ç÷¬©^—s­4ŒÈqúñíǤsÀ¸WmQàEµ58v1|ð¢Ô9×à ;9ŠõÞs;?éY·}9ì›°5I¯æh:R(3¾®–¢§�6NeE€P§òwUF"àôƒQ—zU빞€Õ™\˜Œ|Úr£žªéº*ðÈžýý'vÕx¨7ˆ€ÂÈO¨g¨ôÑÕ©Ù̬Ý;[3Õ0\˜,ì…2ã{­ÊßÖÀ²TRÈeGWʉœ¾É´ Xœ\¾JRÀ4þã'v(ˆ|D€·]ŧ,δý€:PIP‰H@€O GÓ¼ˆ\G—z¡t‹»ÔEB>"@½B ‡ªá{� ^TR(µ‚^�¨Ã2Ĉ�quL‹ÈŸMŠ€¯ìǽŸd¦èa» ªh’Ö�¨•2B2F�UÃc‰I‰€È…¼Ò´°ûˆ€bH‹€è÷ÐÜøÉã×_[¿sk<gJh"€÷ì0£gÀ÷Tz±�êGåD€ŒPi¦­ ~@žŸÝCÿ¿“Ó¬BÄüÎFfCªq>ø ž!E$'"ÿ¯íâéÒò&œ"tô›„޶ˆÍJ>3Q²Óƒp¢r@kÌšyÈ­gý>é÷ËØHÄŽƒ�P*'d„dŒ`IÜjÆL'Z4rÃéö4F@c\”*õæ£>bpeÁ¸Õ‘3œýYÛa‰\�¨•{¢1B+‚(rå zç_=ªÓ t¯?úP,ˆ€õP*.A8€úP)º¼Ý‘WÖï4#gÚ÷¬9u ·rp²P˜º µÍÍ™ìû–µÅKò7ZÚ³Þ»ñçÜ>C>³ãV¼ §ß6Â9ô>õ ,i'üý;-»ÓÐû¿Rƒ^.t.s†7­{v1ãz“¼vwœûvÔý©½pëøÅÑ¢÷Ï{ÖÖ�Xwüìt ôЬcÅWÆ5Öî³÷í¾H/´5<³£ä¸ñ9^ŽöÝo`ê^FÛ={ï—ì3¹ŽCtÝçkÎ…>Ÿ¿ýÛ¿uuØ;ÿ¾ êOéD€·#;Ö¾¯Ù©nÄ+f«?n•ß5Ÿ%ÿ<†õÞ•Ðùö);‰Íˆ?½þÁg³ÏéáÇöäð-ký»?§ûd\ƒÎůyÏÚ榶»óXÜøë¹Þy{¹¬-ßê/Y€zQ) ãSZgÉ5¨I£árLSy¸Íí«yáO“}ÃÏ5­Óÿ…´ßŠßwùÊQã±ÂÂ:Ëžî' S¸º°kh=—ËèÔ¬Ñ<¶þÕ¯\.»™y½·Ý¹ÏíóVÁÕøƒ›±p×r3q4¾´Þá9Ç ÅLH,¸â†ó—Ñ}j¦Æh€§ß–ˆ3wîÚ÷fð¹›¶ßéÛ÷}·¢ë|ߣ‰ýÍ¢œðo~ó›±s@ÙÙR&œ#ëΗñs> Ûr|–t?@~xnOŸžã+¦Ï)&ÈÖ$‹(μ†äzÝ5$ã<;8K]öhU;›©, �ê"`S8#/c~•¼NÙáÀúO%ÑïÐñ÷M¿þû`e͸¸F6ùªx¿IÇ".¡óœjÃsšóÎåe|œð{ö;Ö•ÞWÇ{mW_ôíäYϺc{ÜDMp Ü÷Þ¶îù«è„’Æyæ±FW›"nxãû¡×·’†÷µ ú?´n[Ñ?ßóÞ7ãõ(òèKr[@ D½ûî»ÁwKië5l ûǃ”çüêt¦ q„£íÃAßžvÛ.RÛõŸ%wü‰÷“âmÔ9Ï·â`Âù쩳ד˜´yÓûO^clkb{4Ú¾”=H߇9¶(Ó¶†¯gØÙYf° ≠Xè .TJÈø”vн)Ã.Gö«¨axÛšGÏlðÚo[ÄñNzô¹5‚Ò®aK¢|aÔk9à#TìÄEÛ¦öM9îú׈¥{öãh˜©× ™jñºcMÕðþc|}îãÙ[.w`G'A´q{hšÐûoÿ­ 6øˆ€ú£1 eìlDZ¸5+n¹gâõÈiÎóYJïZ§ó$ž²õÚsÈÜ?¹Fm§Jº×Ãñµ/u éû0ÇMÙ¸íl‰Ð8&Ù*�¨•{¢e„Æ«®–…¸1pÝþmkÝN¢øûì“'÷¬±×°fû=k7å�?³¿oX&>×±Óã1{¦~v‰/Hc HOÛ:ï].ý×A®ê^t ‡Z÷aÖõFÇû‹û£üâV÷s;E·â†nö˜€ô±²£`®±vÇ‹„EëV¼ot쇟tíP××¼oEà¢Æý''3"“Ÿëô¿r€£sj¾cŸ$‘Çm:‚µ^ ê`©~gç€Æõ~¿Õ²Ûî™ð9ö²=ÖîÜ·æÞ-{¯óN¾Ï’sƃ©V“ôÁìsJê ŠŸu жWçŽökYïüròsÏìłװ¸-ú?£¿¿—¼”kíl"€JBéê/�¬MåD€ŒŒ@ɪ¿Ôéúã#©å b�\eëÉ€õ¨œÒ‹Ps¦rsã2îú¯8PÆqp 5´E«Àx�€úQ9ÀÒûPUäü±(Øn£V]…ª!ÛE*@ý¨ä(#¢iP5äüQoz�UB=—ª³L P?*)dŒˆ¦A•ÓG!û¥ÞLÒ  (—^�€zRI d”¤UÀGÒü ¥…i %@™Qú­Æ?0� žTVx㤿å$™ëz´pUÎ\Y¯}hïuÚã©ýÂùÀý67}iÏεl}Ää{Ii´¬Óë×,Ð@¹dÞퟴóÞ‘[´g¼ºgÈp<uhô]ǧZd¬>ÈÙc,�„Hª7 |iAZ¨ëfôÜÏ[«cÓS,örl‹’)@¯e;r-^h¥s�¨'•B=ßúÖ·JÜ­îÉY¸9µo[»wAÒ˜¦öÈ‘¿ëf·¸´³î¡íöì"i1Ýþ£yú}£™,yïöXŽxùý{Ö»¸²‹Þ=ÛO/‡ï»i‡½/íÍEÏ÷ç-Õ_-ää‘úYø´ Ò2®]°o $ë�¸Å“Mf¯ì<²M² Yƒìȵ¶F¨·Þ*€zSi a-o”µ÷@„Û| ÆËô‹I ^»³ÑXÅ9WC~{<žzRÇq óèû´Âpst.UÆÏdÅ€:˜…‰¥Eˆ€g’|c"»tôpa›s½¹ÞAŒœÿrØ�`T^ÈHÉX±w3k•ÊxÙù@„+UºÕtŸGïÆQø†þo?°®º¼¯ž[W+7îXûèqàˆ‡]æaI§M7~׋€Iá0-’VÝò½n<g¶ŽçWÝ¿o>L®ãÑ­ç®Ó_£Îû`¼òg†ƒá¾ï ›¬ŽYPïɆñ€Y`à: .mЯ ûÀN”<£ÃÁ3;JVøÞkZ÷,²S6*ÃŽy¼Ù+_2D†‹ä¿5¶]—'vt”32ìçKÙèÿxuà·ìv+rðçÚ‘ëm ��v‰Ê‹�Q!0Žb½Š£æÎéÎjˆ’±Þ‰¾¡HÔ+|þÜåÜË!¾!g|8°Ï?_!7Þ5l“9´“Nv„HöIÿ¹" ÿ2úèÝXDÛݾnIþ¯ãërŽÂËøµ;FêD {»‘!F"E½ÍJ‹��,K1B@‘ñ;qšŸKÇy+~î2ãñs©çuÂFeرՈ#õqJìäC;šê ì§³¯ÍQnÿõväz[´Ë¨E��ìµ¢X!ðÆ9Æ“ù¬b²Ñúö´ÛŽ{ \cui_ôlÏz]ët>¶¾¢pW¿°þɬ×=¶ÎãÓ A¼éˆZª'`–H9õoúÇö¶ˆ¹ÿÇûL尿žŸ¿Þ­t �¬ŠêŒžéüêÎŒgmBDÏ{ÿ‡Öu½‰­™²QvÌ㎕¶Y*ÙÎ÷Ðåòß³Þ‹Ÿ[÷Ö»“vbÊ~Æ6ÑÛÒVÇ·Ÿ�€Ý¢6"@iÈ\ä»ËG"àêÔ:Í[.MèµäQÄJÄ"bÔ89Ôˆ)¾ìPÜÉü~‡‹xùô5¦ŸÙq뎋êÇÌKJ ŽÏuqÜ×Kò2„œK. àm×›puöØZ죹�X?Xø£>J¶l“$òÞzlg£<üˆ‘xmWýckº4¡¯'£èŽ´Ê²cË"ûõ–5[-; ‚ÙösR,bG®µE;ˆ¯sŧÔ@ÞÔJ9ÿ2fšÚ,ß®uŸ»g{·í°óÔN9Ë.êÕ´Îés7û…Æ ´;÷#§:j<ò#;¾{ßî»)íbñ¦ÿÝmßsÑ®©Æy!&ú˜×68ýÀZ …‹Î!™9(f,œóîö J8E¨¢gÉöý÷:ö^F”o?jÀoû׮ߛñ´|a>Œm_E§•Ó¦†”AÀ°.š“Ý3¶nÃ|~¿žÍ;÷¬óôÇöƒÖ~ü,G"þôËžê¹lÞ·Žz"ú''ïOÚ¨—§Svlu’tŸ½ÛÖ=•l‹Hf íç{wRSˆfÛ‘tPcÚí.šaÀÀîR;àÑÜÆjÈvrA1×`6G‘ÿùÄ‘þƒ`ŠPXœÐacAØ$ÞAcžvØ4—¹ M�(-µÂ:Íw¼sZ²XØuéDp+X, GÎY~©°‹¨g g 6…zÊ%.w6@�ÔZŒl9c–J9#ýòÀ÷ (Õ1ïñNPü˜¥ Š@&µžÐqûÙÏ~–lX?ÞD )‚òFŽ[Xÿ°¾7‰¶�ÒìŒð("c(A@Á÷&ùH,Q4(Ù-Ù/Ä�Ì#¬' ü€,vNˆÐ©C À,¨'PfÒb�q B¿ü#`;)<i'®Rr¦pþ¡*(ÕQ=T÷¤¿Ô×Ý÷erüUˆüÀ"ì´ðÈ€j¦o@õšèÉî!ç g ªJ(^±c»WÞf}÷»ßÅfÀR RȨú.vÁú#'ÉwŸë7×tŸ¤U@ÕQ–SèCz9ëƒz~d§|ÐJ›�«€˜Œª_ÖGÕ0´õ!Œ IôÑ}uD6K¶Ë‹\ÕyAõãŸþ PÀº  te„ÕÄÿŽ;ØET×5öޤz$~I*'rò}Ä�Û�°>uÄw³«1U£ª( ”ÿ{…Ž¿U~/Øu|zÁB[Ft¹8ô›øö%´W8þ�°-kà#Ëa¤FFœèrqȉñÑNŸêCÄ`6˲e>êìŸDÁvQ0Â)|"€½€¼@lŸ³é#k2ꈂíãþô}—SCšÀòøˆ´DÓú«ÿµž´å‘- m•þÐéçž@ ¶DÚàË9•Á÷Ñ5Ôåñ‘39#Þé—s‚ØØ¡+öèY”‹M#;¥ „·ÿéû…­€²€È ïÀÊaõѵP¨Ñ a#§BÎEèðKLé5B  XBa ›–~FµÍÛ5íW7dϽòÎ~h×½Òõ倲‚(5"ad[ ¨5&^è}íWG ëRÑuλu½~€º¡çTÏk–sìŸkmó"Á?ß¾?Ù^Ž:çÐ>yG¿îb�ê " „„ á¬ÆÇ;ÈaT–F(lH½3à|•´C ÷´öÇÙ¨/óìB(B[—.ÞŽõoþÍ¿É|OÅ÷X„%ý¾'C%ËÆbŸ� N *†ï†ÎŠR©ÌjÐ| ¶UJØhû2¯ñΊø‘Æ�×ÂÚ#_¾ÿýïÛ7¿ùMûßø™6Î÷ª¦ �À®‚¨1Y¨"ZéÆQŽ{zÛ¬¢^ú˜*�°c Ϭ{ЈÅÿA×·Éöœ‘ýùWÿê_Ù?ûgÿÌþù?ÿçöï|Ç@d¯8��Ì�®�Xž¯ì¤}³ È¾zÿàþÀ~ó7Óþê¯þÊîܹ㜠õDz1°±4ž’�€M€÷ˆ��X‘üE€wþUþóþÏÎ~)MRN¿z*µÝ£íJIÔ>ú»1Pœð�Ø$x€�€ÉÇ!VZ"ú~œ“ÒµM¿¡±IêÐ_ …9ÿú¼þ®—ˆ�€z€÷ˆ��X‘í:ÄrÞCç?tÞýÄoÇ$�$²H‹‰ÕÄ�"��êÞ �`E¶ãûȽOãI/¸%G^޾ø«¿¡SÁ<_ûûÔ!•tÏÁ|�Pðþ���+²Y‡x‘~¥)’ 9üŠì{$4Uè"„c ôÚ ‹Ù � àý"��–'œ)G¥qd'—«yÅÞ‰—s/~–#.Qð;ßü û]÷ ;èž™¾Q ú¼Ž•%"fáqÝ9 � .àý"�� A‘÷Åï¥�iÁB»<±vc,ôY•õ$¨„ Ï»viBA¢ïš>��Eƒ÷ˆ��È•t Î"È¡ øM‰�9ëiàz "G~JX¤>; }þºÔ$�€*ƒ÷ˆ��Ø:rÆý`ܬi<ç¡}'ú”#¯È}Ö@` H‹ƒEE€GοD†¾_Ç›7à� Jàý"��¶†w9âr¢g9ëóÐ�`}vâs)G^¢"ë¸Ú&Ñ1Á’"À“¾!��¨2x€�€ãÓiÖ‰ Ëñ–ï‘räçÙ°©^‡E€Gç´J:�@ÙÀûD��lŒMæÒK<dNõ8òÿ_ä”ϳarÒGc Äš" $*£t%�€ €÷ˆ��XEúå°+ò?5«Î (õFÎuÚ±Ïð—_ûß?²ÿãÏÆÓƒf¡ãŒz"6(<:ö2³�”¼?@�ÀÊlÃÖ1u¼ôJÁY¤×ÈBç%’ö‰]&ûl‚P1£�”¼?@�ÀÒø4›M§Âè8r¢͵—ƒ¯2̼œòM¦D�l ¼?@�À„yð×9ê‹,ΕFÂBŽó¢d­…޹Ìq7œ›È*3#�l¼?@�À\IÙE£ôŽ%rðåÐO â]€Ek9ä:ÿMõX,ÃZ÷�`Kàý"��2I;¯+E²rŒõ=˦ÎH4,z^Ê×_¤×`›,Ó“�°Mðþ���¤sÚ ;“D@æ‚` ²ŒýÒñõ=e@À©0)¢‡�v¼?@�€CÎxèüod@ë5"@ίœáU"ôúì²öKßU¦¼„‰zY$N�'x€�ØqÒŽèFœÏ5"@):*«àÏ{|:NÙеl\€�Ìï�;ŠŸc«Qè9"@S‹Ê!_õ{Y# }§œî2²ÑT,�€9àý"�`ÇÈkpê¼Å¹ä„kÛ:N®„Ë*iDúÌ*â!O$Œtžh:ײŠ�¨.x€�ØäTúÈû¶ÿëйȹ]÷]# ÿþ*¤Üx1 ß¬lã� Úàý"� Æ”1¢¬óPªËº¬s=úþMœCžäÕƒ�»Þ �jˆ¢ÜŠ”Ëù×ÀÛ²¤“øÁ$NÖEÇYõºtdû6qy# ¤ßV¯Š×��Ń÷ˆ�€‘XZ¦” äÝdκ¶« ‹‡­ƒP(Êô[@ùÁûD�@ C(§VaÙœá“ØŠ~¯k»tÏtNUg+ë;�@íÁûD�@…IGƒË˜¢sZuA°Yøë^—: ¶•ó/à… î�À,ðþ��PAä¸ÊÕ QÍúSæ¼p9¤›pØCV]# l['T$¸$t�Þ �*„wZ«2C̺ ‚ÍBNî¦zt~ut”uÏË2-,�”¼?@�”Ù•#§ÈnUœ9åªË¾lcÕÛU×ÈBÇÙtOEÙH‹Ç2÷@>àý"� ¤T9­Cç.‡S‘èm°Éû¡sÕ=Þ…µ>ªÌcH� ðþ��P2ü�O=›Uà)GSç¾-ÖY# ë6Ï·lèÞy1 ^fØ=ðþ��PÒÎU3E˜å¤o3ʼi»¥{­cîZd¼.u�–ï�Feå@WÙó ‚mc€GŽú6ìVÕ[Õ¹2®0 �Ûï�Q·ül9’º–M-6 /š6Ž«óßeTUut·ý[@qàý"� gê8S‹®A)@Š&o/ž¶A[ýžéz �õï�9Pw§JùäÛrÌÓ(R½­´ÿÁ˜°Þ–}a:�X¼?@�l9LazEs­å$êúòr7¹F@rvɉŸÆ§aé·ÖýG �T¼?@�lp e]áËóú¶}?åàæÕ«QEtï5xXu›…�ª Þ `7žY÷ áêÿÞA×·Éö5‘C´+S.*ìSDòdÓk¤ÑuÉÁ]ì·{mƒ“ÖŒ~ïFë±]-X‘¶Tÿòd—ê:@ÁûD�ì0_ÙIûæFœ09¥r„v):ªh°JÈð¼krl÷vÐ=³mø¶yØ,ý†*×1¼èÙáþ‘\þÊλw–¼æÍÕ¿"Q]¯{Ê@ÁûD�ì0×;aŠ ÏË}–ó‹yÒºÖ™ ‚]žX»± ïËÃfɱÕ÷èû4æA¿±®y’at©GÖhxp{I‡¾"À£{Šº ~¨x€€æz'L‘î¬i/åàÈ V:LÝ Ðá×ÿrôf.¶EàE׶ѵ޹sÇ~ï÷~ÏÙH•ið*vüCà^/zÕõ!áŒBˆ€r‚÷ˆ�Øaæ;arúô|Èáõð.:7Êù÷÷á§?ý©û;÷Ú·(¶¹F€ðyîºFïüû‚XÕ“]Ë�Uï\ã°›ÌvÂäl† O92rhv-²)§8}/æ²E GrÚßêÝÐï^¯/Ó¿;é@‹²«is�eï\ã°›d;arÓ‘àßþíßvŽÌ."áÞ ¥IÍtä¶(¶½F€Ðue]sæï¯küÒú[ÖhŸØeøúêÔ:Í·¬}òUòáÝÝC/*õ—…�Šïœ1Ø9Â)U’4ŽY Ê®õ�x²î…ÊÌ-Š�}g^b,Ý’ý½YS„. fÔ¿]Á§]éÚõwæø�ØxàŒ0@]‘S¯œvŸFr]™%�T~÷w7ó3Ë”¼çÔ_¿XXæ¥tŒ§Kìoý>yöÈHøùkÉó{wÕ!Õ%Õ©<�  B@‘+§Q©+¡#>«(ÕDŽHVÑq”+þèÑ£ÌÏ.ZÊð¼ÉÑZ´|ÿûß9Áÿò_þK÷Ö~«–e#ÀEÜ?§œTý…íàÅÀ®Ž»(¼?@@-ÑÀ^±.E>o>ÕIŽV–ÐÉ*ø‡hßøÆ7Üt™Yï¯[–¹:ÿMÜ? Yƒ‹*e«§E" ßG1�°=ðþÀ5@�uB•€„@Ù(êy“ã«{¢üë¬4žYl;ú½ÌýйH8¬ƒœJ݇2¥e©¾"¦Ño¥ßÛ‹ùeê-�\Þ  6ÈIPê¢Ý˦™äEÏ›œ)}o£ªËÜu×Pº—ʲ¥õ æãÅŸÌ(°ðþ��µÀ§x̺²äý¼)ò/ç©¢hUgYõAÂP¥Œ$"`1T‡Ã…�ë÷ˆ�¨<>Å£ ŽT^Ï[èøÖE­²FÀªiPy‚X?½¨ÿ]° °x€€JSÖYäñ¼é^x©ì,s?”²Ìï\æ4¨DÀjHÔ龩®/[7���ˆ�¨"r�Ôð—5ÅcÛ~Þ4àµ Ž¯g™û¡ßzQGÏGŠËš‚XÙÕ{fX¼?@@åðùÿeNñ˜Å¶ž7ÝÝÝ—*8¾žeîÇ"ûê>T! *°9$�B1P5û�'x€€J¡†]Þå§x|cƒÞ]Wß]9èÚù0y+bj¥Û;ÿ›ÝiŒÿÏ,#;¹ ²�úܦQOˆœ^õŒÔU麮Û7Ìÿ_†áàÔ·’ßµaÍö÷¬?¸°“ã'®Ž¼éwlß½—.7¬Õyb'çë­‰ŒØ<~&)ÕÝ[Ä�À4xà3€*àS<ÖÊýžY÷ Õû›Ö>ù*Ù˜pybíÆ-ëô_:Qp«ulÏœƒ÷•´oNÿЮúÇvÐ>±eÝ¿M?o>ÿ_c#®e8°þã¶5½ÛlÛãþ…½<ydÏ_ÉÛµÎ~èäŽK£Õ±ONÎí*9TÌ•õ;ÍÌý÷-ë|òc;¿š/’´ï"è:åÔÍbå4¨á—Ö;¼]ßc;sçúÚ§X+€à÷õ"q¼-گ߳NëFô½vtrÕŠÕ@l_oü3ÂŒB�cðþ`Fø•woÇ ûÞmëÊY�(�ÕÁµñAÏ[÷í~³1áäɱ¿<9²}·-ªó­wñ:~Ë;Ç­ž â-‘SøÄŽÓ"buzAޝœ›Åß×vÑ»gÆ¡uÏâ«>³c9±a†IÁ¶á o½NËŠ’=³Á„·ëíC ª$6zçHï5ØÉ ¹,z?f­ ïZùÿQ}hí5#áÊ]SËZ½ÉÿqÝhd Ç«SëDui¯ylýkÏ,ÛÇÏ(¤ú¦¿ˆ�D�D,ÖûF�ű¾­zü®Ýê~ngÎq ë³¢ý·¦¼ˆ8 ܰƒîÙÊÑ^Ï&E€Žµ¸ãûÂz­}ÛïôíM²E¸k ÄMÜ2yiýέè;ãž’1é^OÜ[Ò”p蜦zÆ,z?f9ÊBkåÿûë=ìÙÅèô•:Ö êF"t2Ó¿|oH†@XD@~Èù÷3ŠiM‘µzç0<³#‰Ã@t/·WëÛ€,°`#Œ€âYß–Ãz×ÕááEÏcïœÁ»Ö„.²ð‘îÍÔýM‹€ÅñÎú½q‡<µ£ÀɈO¶Cësã'BÒs0-"|J¦ó³è5ÌZ#`}úµ N¸©Fë;Í굘w#°ô," $uÏ%Ô䞦áRÌÜ3äž§Ôø£¥¸ü{ëA› Ûas­T E?|Q#þŸÝMŠ€âYÛ–Sú¶o'#سëY‘îÕ(NDOñ(:Ù²ãÓAFtq^Ä{,&Ó¢f‹†‘ØËW1‹^ƒ5Ù§4›q ÇB`¯yd½Ô@ßøg9ùôT‰ôŒB³Ð¾ õ8¹€B\⺳B»™ôPéùpeCö °£¨A—TÉjhPT?×A ò­Q4×§«Ü°ÃÞ™uïd§ûÌLYu¯!d•c„ÀÞµ£ëžHÓñãÂô €éž�ßK2ÃÉß`OÀ¬56ç@Gõáìq<Žaâ|¯é ÊC±,ˆ€rŠ¥™¥~ýFYãRÒ„Âx®H¾ŽáÀNßoÛáç×°XDÀŽ¢ÆToºÈøeƒ€âQ]9sw'cïÀ5ïX+*ÓuÛ×ûÕ£¼iÖ»†IV>ÖÕsëºYm&¯+vXf}ðÎpðÿf¤;ÄÇ›/ ½†Yû­î@ëz:)ñ’ ž£þs¯q±q×(jåì+UH¿‹ïÐÿª‡×Íĵ ÛãÇ/ÍP�¬ÉæZ#¨Y½³»BP<ª£«ó•=LEk½ÓÕÿL'/ ›Î£_ƒõ®a’E5<ÿž¥RYâ1Ñu¢þ×D¼3fÁ™/f $žd‘kPŠâ¬ýVw ÇãCÆL‹¾Ù×ô¬13@”‰?ó”z¢T}™;#×&Ò�r`s­TŽtoÀì^�ïø}W‰j�¬êßj$Û¬4×`g;²#Gy})V¿†i;–(¦®/æ4/â=ê9úy¢áÒꇑ3}}„|‘kð‘Ù,Vv “T¥Æh-ˆèøT©‘Sï…LxZ௭×Õz ZX¬·vª" Üü·ÿößìßø†««¾HÌž™K3žỉ�ÿL9!½?²5ξìû�CØŸ˜¥ `» vœ°7`nd ¨ž.wn“z¾·ß±þDúº½vÊ‘§Ó}Æ•ô\ò«¡cmŠÅŽ• \Õâ]ϒž†vr¤r½S?Nk ÅÖxÚ{dmç§ÌúžP4h}€§ŸX×­¾›1æ ƒE®A¶iÓ"`xþ±½Û;·‹Ñ‚_úµpÏúš!È­þþaÑ~ÛÓ~ÖàêåA”Õ¿¬z À٬™S„" d vß0»� <¨®VM^ÃBÇŠDÐãwŸÚ‹ ¿àWìÀhàžsb³ϸ¸•‚ŸöƒÂ4‡þÝÌ}]q+ÿuìH/€>sóœä:8Ðu¸†:£öqªž'EiB�U�.ÂF/�T5ºUg“×°+÷CyÙˆ�(¥ü¨ô¿Qºh}…¦ (!µjL(”" äCîõ&¯aW0õZfá±*SÔ5èÞS(E(žZý T*(ê]~Ôá^oòvå~(°y°]PÔ½rP«_A•êÁƒJ®%¬w°]êÐplòvå~ÌÛ°:þ¾†öŒBÉ£¨îù×PÕoA|¥È“°!…í2Ϭ ›¼†]¸óÖˆ€Õñ÷ÛyCÝ+ÕoAT©¨P7³ü˜ç V…M^Ã.ÜykDÀê`» (¨{å ú-H€* òc–×9ŒU`“×° ÷cÞ°:Ø.( ê^9¨~  JE…‚¼Á˜å‡Vé”CXårÓ» ›<V¥áäÁu×pƒ\”½IŠºlu¯l¯)�U**ä Æ,?ä˜*=d[åïþîïì?ý§ÿ俥O—ï|ç;na O?ý4ó³‹Í;¾)T÷¼¹éòíoÛÍÊóÑGe¾¿©âŸŸYèÞk¿Yè=‰«ð˜y•ïÿûöèÑ£Ì÷–)þüóÛEAÝ+ˆ�€5Á˜Õ‹ï~÷»î7Í*e[Y[‚$íPnªø^ •m:Ùº†yè»%žf!Q•uÜm–¿üË¿t‚ðßø†û›µÏ²eÞ5n ý¶ÛyCÝ+ˆ�€5Á˜Õ ­þ)ÇN¿kºÈYÛ䜇×>o®þmRÔ÷¦Ñʰê•PJZx_´½ªèüEî¶kгÖè6­Ó¿2{Ó·Î~ðÿÄ~7­}òU¼ jAau&@�¬ Ƭ~(ºœvöõý‡ø‡dú#Ç;¼~_ÔS"¡”úÎ"ѵJˆ¤ïƒ/yÞ‹M£óùÛ®WvÞ½}ÿ¾µz/’m/­ßýØúWÃäñ&Òw£ýîZoð&Ùu ¸º!ˆ�€5Á˜ÕExõÛú¢´?0¹ ‘ém3KèhÆž,†ç];pû5ì {f¡;· ×­Y¢PE‚¨Êø{›¿íº²~§}¿úGàøuÏ.ã·G|e'í›¶wеóy•éê¹uß³“ËukäEquB�k‚1«(Ã3ë4Üï7ËÉPúÞ—¨ˆ¯ŠÒdV™å ×e¡^€Ëk76#$D$ºÊ€„ÀoþæoNܪÿþºQ¬øÚ.zí¸ÿ2y/BN}ëFrŸÇui8øÌŽ'¶ÿÜ.úß³vSϱzþÁ§X«á£ÛÖ=JEquB óÂz­ýİìÙ~§ooF†ÌÿAãÎ1«2×GåøfèÅ€„A•ÓBfáíÝþế MºApÝy¢ñ�üÇl7oFõ%¹/yM£º-t ¢8ð–µ}hÇÏ£- Ã/­w9úÍc럵§I[l?í?²ïà»67®oo.zvÕ½fçÇÖWºÑu=PÅÕ=A,Á¨«»Õ³A¼Å®ú[7Œ`øs`̪Ìõ"À÷�ÌÂG«Õ[ ±PuÇ0Du[פë×T¡ 9äúî,–7�,®ûàSƒôÕ)^DûÑ3Œ*Ê0ª>GÖpŽÿ…]ôîY£qd'—o‚í¿Œ_»gÖï/Að"~–Ýþ¿Œ^¿µ‘:Ûv³ –àM¿cûÑwÄQ €­Ý "ŽEr£Ïž=¶Ã£Kg@BõÀ˜U™sŽ@ΡœEÕý­ƒÅ^Ëù½v<ÄE€îcÑ" �ýÖuH+Îv%Ï¢ýý€áCë>{§õ¸ › wí“þ_ÛQ³a¶ÚÏàù}Ì.ÔúØú'¬Io|©¡Ý,ˆ€%EÀë‹§vt|:�™9Œ¯§óÏ~aýÇíÈ@éõüŠÆŠƒ1«2›9ÿrå0+•¨Nƒˆ} Ô\6(Š„%�êDq¶ë…õï[ïâuò¿ÇGöּߵ‹æ]{ÔÿeÜ+0ÚýmY÷ô¿Æãzš-;úÁ_Û”.´w`÷Ûw¢}›Öj?N‰ ( ´›å�°#ÐþÀužØ™7.3r‡™ù‰>](vö³÷‰ Õ�cVe6/<rÅ–3[‡È±ÐµÌÎoPHp%�¯mà"Ï‘ÃÚz<n®céÛÛEAÝ+ˆ€%ð"`¯ùÀN>‚1+‡Q9‰‘s1•Ÿ:Ékr+ ƬÊlO„„ƒˆ«.|N|VºÓxŠÐ¸Ä)«ãŸ­¼Y¦ÀröeÃeçÝ;KÚð|êß,°]PÔ½r€Xïìß²ÎÄ@à9Œ~õÃt~b%›µT ŒYE #±*NŒoד�W5ÍDNò¶çÈ—ÈðÏVž,—”´ ®îH,Û›‹€Ý„ºW £4žûvØû2噑Ãxúyœ"”ÊO<íÿ;о­Ö;;Ë܇Æj1ƒeQŠ‹œh‰9UD,Yç¾ÍT{¡Ùˆ6Èr@$A P,%&°›P÷Ê"�`M0f°*~±êþ*Õ¦*hm9ÌÛÂ÷šäÅò@ �VºW�k‚1ƒu‘9#Î2Èi–غs oÕ€ `¨{å��°&3ØrBåTWe±ÄŠ„ËòÎóõÈ1ÏC¬.�4Îkj`ðKëwn%£ƒ×W§Öi¾ŒýBÔƒÖk½c½Á/¢¿ûÑ}e±Ðë î•D�Àš`Ì`„3 •y±œh•M³íÝϵ€#kŠÐD@ÓÓ`»®#úíÞÿžõ?¯B[·?¹<ènÂ%D@T'Þï~n»&¨{å��°&3Ø&~€¬ŸQ¨lƒˆu>Û$,ñ³- §_Îÿú Ú`»æã¦½Ñ‰E€[èmëlT¼vÓŠßèôPˆ�€5Á˜Ahа"תoú[&1 q²éA¼þ¹Ú4€1EØ.¿ÞN£ußî7¶×¸¯<¼°“£wN{{7¬Õ}n/ƒ:?ÔŠüC{ô쉹ÏZ÷L«P„+óÇŸ ÝôÑú>颩¼“}ÂÞ½çztþûÿc}Ûö¿Z«ÕÖ•¦=ü¤k‡£ÕþÇ߉�?ã_r¬óXKûìG‚âE/~Ýú÷Gß©ó¹|fǺNÿ¹3æ}·ÎQÐn " òøˆ÷­Õ{oDFfÂÀmŸ ¹kqŒ13È?£PÙor ƒ®Ñ?W›0I1¶ëÊúfâäj‘Ìæ¸ír$ƒ­]ïëVãwûÞ >wÓöAwkïÄë÷¸ÅêÖM«rÇ‹zçlËqWóæœûfÜà^GÎòñg6ÐW©ÍÉzB.ý+Ú/º¾ñ±’6;¸>wn|È[ÖìœÚ•K ÇŽ¤)ù=\�ÚÍr€¨zÈo¥Œ�äÆ Š@N¬"ð^ =ˆXbdSƒ„} Ô&A�LS¤ˆßɶk8èÛÓn;ŽŽO9É3^;<‰¦»’8ê ‹õD ÖúÈÚ.ú¿ˆ¾gJ$¯Ýy¸Á⯯ ¨iPñøãíY¤ïÅvïá6Ð÷ÚÍbAÔ‚I#�ù‚1ƒ¢ ëuQN®@û裒ÿVG×°I€�ȦÛ•vD“¶ËEÍoÙÑÉEì0/êÀº(öûÜê±k Þ~ÛšGÏlðzìį.’¨úà™55Žàe|,aÿÚ]óÌž�õ’¾e¸‡ËA»Y‹àêH7îXû¾òínÄ+šÃ(Å/£ã¾m­;oÅFÀ+úhß+ž‹¿†©|ëçÖuljîÃÑãÈ0úÈEbü®Î¬×NîG£eǧƒØe+“Ø(¹óhß‹gÛ8ìÙÅ0#_óedìô›ìß·GZCŸyôCë¹ßc|O‡ æX®ƒŽ-0fP4?ûÙÏœóìçíðú4žu=Ó¹«lÀlа]ãöí¦µZ‘3ì^GõéóÑ úíÎýÈÞß²÷:ïd´…©Ïõ¿Ú°ÈÎ7ß±OÎ_%ß¶(ñ�]·òû=k7÷]ZÎ¥GÇuíÐ Vû§öö‰¿ß „ ‚ïþÛ«èZzgqûîtµÞhØA÷çöÂ}oìS¼ Ú«½FÓ?9ÏtÊËy—Cß#h7‹° ±Š—ãü2ȵóçf*ˆŒ„#ÊŒ_×0ÝÕ¸ü¹\ºÏ÷ó unhš»áÀ>ÿ|§QäÊ-”ãvgPçk&Np%N¼;7ß­šl‹ ¡Îýëøþ‡¿3ÆËäX®Æ ʆÒi•—È{ñ& ëœ7!�óÁvAQP÷Ê"`AœÃ™t º×‰(,‡1ì~tÇöé@³ò —9—ÿžÚ×w5þÂú'?²^÷Ø:OS¢´HÊd¡œç¬Ï9Ö,¦º\“k¼&_3ûõ29–«£ã Œ” ?ˆXuTóD,g[iIê•X‰ˆuÏp=Ø®’3Õ>o¯Ëê^9@,È”“)'»Èü»0bÌ@½±œÈ<—ô¾iÇ]ε"ð‘£>qO@Üë}JSŸ=³•"S|}n~¾föëer,WceGN°"ë[™Q(\ô*YùV@B`Uç[Ÿ]ç�‹í‚¢ î•DÀ"8g4Qà­–ÝVc§×?¶'æ0ŽŽáruѱ{ÝÌÈÁ¸\.wßÍÌ7|¯óÙ]Ÿ«ïÒ{þq2òåì1Óß;îù‹øx·­uÛû}ò$•¯ùÞCk'¿IX&~ŸHx¼^0Çrtl1ƒ²#‡øÓO?D¼$¸oŽD€ØX5¥Ç?S«€�Xlu¯ �ÖcUD@޲Āœõõæià /;ÁN¸qJÑëxe’j8Àr`» (¨{å��¤,¹Æ=,³zÊÎ]P÷ Š(í&œQhµAÄÓ"@hºÐe ûóáR¯€åÁvAQP÷Ê"�`M0fP4­g8ˆx91-äŒK\,“ß?µFÀ"�°å±]IýMv‘3ɸ–†f¿K6-ÍhŠìã•„'¸´óÞQ’NûfM•½Ðn–D�Àš`Ì NÈùW¹AÄÙ"@È©WÊÑ¢¨7bb,Á5"�°:¥²]álp93<l‡­;Éda-ÚUÿ±u}õÕ©½ßýܦÏðÕxŠl·žÀÁÔtÔñÜZ'çÊM¡½¿Žà¨´›å��°&3¨#r¨åŒ{10ñl ôù Ç~SkÌ€õ@9ðïZ÷ìsëܱn8I‡[G+þJÄëßÜp3Ý¥p= É~qºëd¯B,âYò"4«Þ*ëÕÚÍr€X™"º/ƒÙs‚Òhu¬×OïrèùÓp¸é4ý±ü:álHYÏ5ÊÁþ‹tsÎì*ÚÕyÏÚ·Ž­ÿf<V`ô½:—[GÖ;/oÌDç+0fPW|4ßÏ(4áp‡S„ªd87J5’˜X$Åhª÷a†@�¬O1¶+±ùnÍ—Æx ç‘øÕô ñZé}jÅúK;ë&«Å·Œ£õ"hÃ&KF{­ú{÷q$^å¨ß êÙK7¥uü¹_³¦z RÇ‹g|ËZOžDßw{$ FÓˆ»ÿ„Úîƒñ± <åA÷OÐn "` yc!0r’GÎu¼êïò„«ûŽ›Xu]Þr«ÿ&R„FîúnÎÙ]¥C-Ë~:ù±‹¨Á8{l­}¿œ9”3Ø4ÿ¿œt?ˆxç[~­b|׉�Àf(Äv9ѨèúËØþûUá³ÚS÷ÛÇÛÔæL¬X¯ýo¨ÝzeƒÏŸ¯¼ŒRî&u˵eao–;'?aEØöƯGA¯‰sF§}½—Á9Áuí*´›å�°eÂuYÞX}PS`”“ ‘zhG©œÆ±X ›sfW©zSn¥r'Ó"@ÄFµ¬9”3Ø5ä¤Ë¡—Xt±œuíÝÿ<‰ñ¡q‘Ýø�£Û5+&lO3VˆŸ^±þÒ¾èÿØžõºÖé|lý°Úk2j—t{·_“ûŒ#úñqf‹€Q;5³ó”F÷ZÐn "`QF÷ÈH4ØÉ„úϳû2CxC¶ÿžõž(fßE|ªÏ~ûûÐÇ¡=zöÄŽdX£×Ý3o¢’HýÈhEÎùÑÃØ@ /¢×Éuë¼µBq´ÇXè|®éætÛ2ºJ3 a–ˆPäd¿œFS÷F`Ì`×óÎ(tƒï*›…ŽçŸ§,f÷�„Î\àÄÁ\ ±]Îa¾9jKFŒÚŽìâÇ+Ö;f´‹ Õö• ”üïR€¢ïîœÆçæÎiàêßøs®ÝŸ10Ø­¨ÿÒù ¦Ý,ˆ€…pu+îÖËrx·Þ}9Ot"¡!X×íï»ç Ï/݆X Ä¯ÃcÄ)=‰“]ÃÑQÚ@MvqNŠ€kº9'îÓø8/t wÎñn13 ú„1.3Øu䇃ˆç‰9ðYèsú|³€'±-ˆ€…)Æv%)žn•úvç°cO/þ!X}>c…ø¨í}Ùÿ`rÅú—§v|÷¾ÝŸ j-ˆkStqÐÌ¡À”ÎAEí[Ò˾¤»*ˆw§õ¶ýšÛ/h“|ÐOÁ2?îm¢ÝòAÀ9cçvÚÍr€X9ÖÍ)e?áÜæÖ}™!&Ò¦E@¼ï¬× îM;ìE†êîĵ}{ÚmÇ=S"  £c-‘ô5"� VÈ9÷Ñ~?ˆ8}‰ïÈK<è3Úþ_þËÉ× �Xlu¯ "vtGi>ž‘ȱû2íÀO ^Qø´yÇZa÷¨ºK›·ìèäÂ^]úøõõÝœ3ºJ3S|fÜÒ�rcœ‹?{~þë�Ó.1D¬Ô!ÿZÏPXô9‰‰/�üþ³A, ¶ Š‚ºW‹2êêÛ³Æ{ÖyúcûAÞÝ—‰óî¾3(ã)Bc:ÞÞ´÷:íñôŸ£ „Hø}&"ë.•'ÕèûîнÈqïÜ®%½G]¦±³žÕÍ™+]¥ƒ¸˜8¶ˆwäH–=XŸâãgRÞ¿Š$¬‡b{4]þöoÿvA Ë¢{,°]7Ô½r€€BqSÄíÏDÉœÒï0E(@žlHx´V€úë¯V%öν¶‡å?þÇÿ¸„�ˆ€eÑ}Ø.Èê^9@@Á„‹…%›B”rÅba�ù³aàQ/€@8ˆXÿë9òå_ÿëmò'²„�ˆ€eÁvAQP÷Ê"�`M0fPK¶$<Êõ÷3 ýéŸþ©{Ž|¹}ûö’ ™!mtŒ›Ó9ÀºWÛyCÝ+ˆ�€5Á˜A-Ù²Ñ âFô]z–¾ýío/)�`U°]PÔ½r€�XŒÔ’-Œ Ð*ÃJÊ*o¿ý¶ýöoÿvæ{Û*:§]ÛEAÝ+µJE`Ì .Œ§Ëx5ñÕÐ @JûQî¿Æ�d•Ÿþô§ö7ó7™ïm£hбþî2¡ £Pò.‚v³Xj% Š‚º0Ïû—(ê ØuàÁvAQP÷Š¥–"€B)ª�@Œþ*ýG÷2¦Ý ÆdÙ2 %¯ÅQ;���Å"§_οD@¸Rp™@�À®ƒ��€áóÿ•Tf�°ë ��`#øEÀÊ–ÿŸ"��vD���¬…R~äT—5ÿ? D��ì:ˆ���X9ýôGäø*kþˆ��Øu��°ZéWé?Ÿ~úi²¥: �`×A��ÀÒøüÿiGú zwÇ‹tí<Xr8k!²¯ûÛ¶Ë kužØÉùì¥Ê†ƒ¾=ý¤c­†ÿLÃší®œýÜzï~<ñÝ!ˆ��Øu��°�Êÿÿú믓- Ϭ{Јœò›Ö>ù*Ù˜pybíÆ-ëô_&Æâ`¼:ñkô{Öi݈Žq`G'6éÏ_ÚY÷ÐÞé …ès§8Q0o¥cD��ì:ˆ���XŠ…èAÏ[÷í~³‘rƇ‘8²ýŒm,Ápujè{Ícë_yðÒú[qOA÷¹]%[Ǽ²ónËZ½ÉÿÓ �`×A��ÀR\ï@Ë©×nu?·³îíÈY¿mÝóWÉ{_ÙIûVÊÙ—Óí×8²“ËtþÎUäð7ƒ…¡]õ­©€Îi†�úþGöxôÓ �`×A��ÀR\ï@ËÑ¿ëÿáEÏ ;èžE®y„Kºk½Á·§#IÊNßñ"`?Žìû4£Æ=ë]¼NöYD��ì:ˆ���XŠkè7}ë¼íKÜEù]îæ`áÄÉŸb²'`4°¸Õ³A²GÌ ëµö£ýü�á¨dö,Ä �`×A��ÀR\ç@ËQ¿5ŠêûôvØ;³³îq¯€#IšH Eþc‡þM2“Ð~§oA_B‚[аæÑ3dûÿD��ì:ˆ���XŠù´œú»“9ÿÞ‘oÞ±VT&œ}ÿ^ªw f:ÿvO€¸FP �`×A��ÀRÌw ¿²“£‡©4œ×vÑ»g 9@Á˜‘�8{ÏÿÎ 4wL@’”)(&A�À®ƒ��€¥˜í@'‘û¬(½œvöýTŸaä^ëüµõºí¸ Ý³óÑÔ "GÖ sß1+UhD��ì:ˆ���XŠLÚGèý ÜýŽõ'<q9üí±³?èYËï;U´RðÇö´?HõŒÑJÁ½N+î]•kw{sWö �`×A��ÀRÔÁF�À®ƒ��€¥@��TD���,"�� ú ��`)��Õ���K��¨:fÿ?`ƒv;˜£Mœ����IEND®B`‚������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7p.png��������������������������������������������0000664�0000000�0000000�00000174603�15030617045�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¬��G���”ÏÛ±���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ùIDATx^ìý}%ÇyÞ ÎþçÆÆu(Báî޽Ñá 34–W€eÚ°dwÈT¯¯Æc D6ZÚ×#{¤Kr,¶o+4Þ± ,.Ýv 4 iÂGša�+Xð10"© ÐÂ�l¢11¤›­Á—€ž!p85Dx4ÛÊÍ'+ßÓyòTSU§>²ªž_DF÷©S§>²²2ß'ß73(B!„B!$@(X !„B!„ +!„B!„ ¡`%„B!„$¬„B!„B‚„‚•B!„BHP°B!„B  VB!„B!ABÁJ!„B!$H(X !„B!„ +!„B!„ ¡`%„B!„$¬„B!xç]¥În(u×7•Ú³ÛöÞWê úóá J]ù3»±DÞ××pøI¥ÎíÚ MãO•ºï¥Ž¿¾Ÿ‡µ¢¯çžßJ}H§Ãúù^ÒÏ´- |>ô’¾Ç›v)œÛJÚÒõCï× `%„BH-@øÝ÷¥H Ô‚áŠÏis;hãú¤eò}\Âo¾ S•èÙ»®…ª=÷@°jõ¬ªæšÊ¬:ÎicØ¥ë‚uPFŠ@?¯sÏï_ËûúŸÔ×vÒËóB‰y¦eñþw”:¦Ëå9}_*<ÿýž¸ï,ÒmÃÏÏ}¯Lª¨ã§h®è2t—®Ó¶tù&ÅAÁJ!„Ê1‚K¦'µ'Ž,X…$cÖõh‚+ÚàÁ ÄnÄ^ˆÖ í«:NU$.šÀžéŸ|©8Á*ϳTêQÕ3E^×eò‚ç-®£Lmé÷å¶qùŒN }­gµÀn2ÈÛ?¯ÿ6Pp‡Jû«.,—ÞˆÀ³Ò³·­d.½¢_Ò^¿‡w¥·1ì„BH´ÀŒwqb$I°ôï/èýhÕmm%QœÖóë_OÒ=MƒñŽésU)¦‚F‹š³_íÔ˜„rŽRSÙ3Õåžcÿ<µ•)ûÞ$žW_ï´}>òŽ7 ›ïÁ„»·€ô‚Ugþ%ñ(àÆU±§ ÜûNH¼ðw¾Ÿð}Œ*Ǹa"Nã¶ òá9O¬…*XãBjâ®?‰!Áªïm¥·%X³\!„ í…´~Û4V°^š¦] CÖç¿ïmÝ–Ùï úXkh³ñ½NðÜ^ð©Û¤Ô‚öÓ–>Žs<ßJº&f»MÆØÇ1:ÞÎf-àûÇpú:·tÞ?„kÖûݦóâûÌtH¿¦¯ç¼¾Oý»söw°í†BMAŠ<Œ,sl»ª¿Çýá÷Ç.ëý‘§V¬šóÚ4I¸^Ñy9b»Úïä9ºÇCJ,g3Tî]§“ΘÅ4y›ôLqï’Wõÿ(/Ç^Ü/7æ8r¯ú|{K§¤2/6šk%–)˸üÊT06¸ÿŽX`ï=s‰¼À¹—kÞ>È÷sú¸?Ž|?¥÷umîqï„« $ÜmR²Þ»ÑD ÷I²“Z°Bp =ý�¤ö{JäA½@º`\Àƒ¶/T6q×{E óåÜ—‡+‡P‰ ©)àúMƒíU¹iP~BIÂæDиF«FÚõqû^Û2)¿¹Oo7h[Â÷˜Þnv¤Û´!a­Û¤T‚Uÿ…÷Wl½÷ãxÎ>“®).\ÕœGoCrí(R)âd`¼Ûë6¿Õç¼Ïæ» ¹Ÿz·Cú>}?CRoäOŠ<4Ƽ½~9§»í°¾Þ‡¾m—r2¸O{-i<¬ÆY Ï-ã %$Õ÷|ɹ}{ÖÏï”>žØÂïèkDþš{È·þ3õïýÂGå7pN}¼‘ûE>ë|ˆëðPNâò)®L±ù•¥ ŒAòc$¯õ±Î]rÞ‹)Óúœò>¼£7ñú8È+7ßï×ßÁ¯ÿ¿¤¯mâ;¡‘2æ^“l3Ï-ϽÛò0©L‘t¤¬ 3ÀõcàljAó²ëB„ï DÉHEà^Oܶ"0/·Î«à–}ÉüЬˆë/R°6&? !„d”¸$ß(d¬‰BFBÊ5 E@Ê6s m˜ÍÖ:®Ýæ_/XqÝ?á]Ï8JqMIâbÄÖ²FµM#bLŒo÷>ã¶Å×¾û‚,mÆ=ÓTÛìµ&>g‹üηóâîa$À½ùû /.c¶Å=Ó¸{Ìõés¸¢Û~"fßö¼qÇwþIù•¦ LÇð£qþ»u}àÿÞœÏÍOù½Nƒç“dž„<ðŸwÜó{™î=áÜ$©«<´ØVýÐüYÆF*Qé-)X>ú;7 9) `\è ‚è^OÜ6à† §æ!ýÙ/€I×$=Qr-R¨Ñø$Mu?6TE߇x¥Ñ34)ÒŸï·=‰à:eû›AØ“>®é’ït‹¿žpýqa*ÒÛ’$/ôš¾æAØŒÞGz$¥| Iåàn“—;)?ò4)$‡BHsðëó¸6.Îxô‘v$IÈ$ät3î÷#†ªþ›F°ºm›ŸðÛ[“®I#×íÓÀ·µ’ö‹ö>‡l°¸m1ÄìC¿Õ™‘6ãžiªmö|IÏY0ùã_«&NœÄmAîSï—ÌsˆËǘmqÏ*îÞØc¸c´‘ŸãÊMRqçO›_Ë€Ü÷|¯)€GÙ?7ˆ».ÿ=K:Ü}lÞHŠ{þqÏ#Ó½Ûí“Ê)IG:«Ît 6/eœˆóð+ÑäáŽÛGƒÐ„ú�!"¿Ñ燋¤qóƒ8q· aÇtÁ2‚WÿþÅË£ûLº¦‘˾&ï¼Â<)Tżø¶é}Íøý{ó,¼cù˜Pçºp®¡ü¶×î¿HþõK>á·~˜Ê ~ß=®F®{ö­¯Á™˜~a·ÅUT0nCr¢M„B: Ñ9jÚ§½�cy‹ØIûĵûCØö:ÎÀ±kì¾þ¹|CŸÇ¬¯I“dtû×$Ç1Îm{?¸.ÿ3ˆÛÃDƒý¿¥Ïøgšj›=ß$!{­š¸s$æ‹}æc÷‰ËǘmqÏ4îº\ŒdïûþDœÉaÜñâΟ6¿&–1×4ÀîŸÒ¶eÜó46Ÿ¶g%Ä\>M°–pþ´ïDÜ~qù—éÞ“¶“\¤ŸtI‹W ŒxF*vyˆ^áp1ê #L0ØÛì1ü1®ÐÉ6÷zF¶áxÏz…PÿïV¼¯Icî=Ea–ÁÏ#ÿeˆËˉù«Á>ne>’/öšü ?îúÇUzq×÷Bû!i+‡¸ëÁ6¿Ü$U´„BÂ$i͸ÎËqíAÛ(fÒ%Ý$£›xŒ˜¶Zi‹ôß4‚ÕüÎé<ö™xMÙÇo÷üö7ñX~{wŸqÛbg°›ã9ŽŸ‡q×›j›{>³G<~þqùg“Œ`Ï;v&ê¸ûÙw q÷>„-ãøŽ±× Ê(ˆ;ÚüšXì¦IÈ{/+Î=î~àPúwúØØ×8U“Ç 1O½ëMk“fº÷¤í$é«e(dV'xýYå’ ý�)X^áp1Çð žKÜËf°/¨[@FÄ©Æß&Ç“ûJö:&]0û$f÷·±ûiü—&./ã¶%¢+¸¡É®$¿ì5ù/RÜu%¾ðš¸k÷BK¤­F®GŽ£÷‹K©ò„BHí Z'N\ƵïãÚ!´ 8Ú€ÁD?qèvööó'~|YŸ maRûŠvmH¨Øcù×cÚ?§­—ëÒ¤Ûæ‡ô5¸õ$]S\~€‘kõÚÙöƒð˸ý’~ëÛ¾Ûã³[€Ÿ‡qÏ4Õ6{­“„@ܱ€±?¼N„8›$¹·cú>†f^Öyk¢¾RæmÜ3Mº^±‰Ì$]î3ˆÃž7îxYÎïçWš2 û¼¿ô¼“_ÈÛ»&<ëÄò›´Ýž[Þ‰´6i¦{·ç÷<Iz2 VãSL{a I•Õ�)@cöñ+}ŸÄÊEŽíüVöuÏåo3ŸýBè1隀T&Clj¹¦ØB¯ñ_¸¼œ˜¿@ŸÇŒaÕçÀlf[o{ùe¯©q‚UÿÍ\)B ÓVh;Ÿ»Ñ\îpÔÉ2(h‡KŸŒA¼:ØßM1§Ïi<µö¢Ì¬¤Îg`"®ôï†ìù­n£B\7Rå&gŸ‰×dÛ=sïúìvê㶇r]îÐ%3ŒG>{¼!{ƹï$o00ÏLÐ1`›NžÍCÇÛÀ}΃{rÄ®k‰°Cò“ƒâxN*ŸHV-&ÏH’Úš*ocžiܽàþÎnò)VØO(Sãò+UH‰ØãîGÎ7’ôõƺÇå»%Ë;!Ûpßfî{.ÉÃL÷nI{µÒ VéþÄJýp¤"Î"¨b+zIÇHQúx¾óÅ)ð·Éñ D “® Œ,`¯É}‘’Ž%×!<n¿4×a*§rˆ1ùâ®?1¯5q×b^è„<ó\&î<#×c36$‡BHð˜`]§Ëä}hK†&OÔu¿1Díw#IwßkºÓúŒìPcÕ Þ4wÝTi¿×€¶ÝŽÝlÓiÐ.âIG¼­šI×$‚JD¹oÄ»íæP$òGç³æÒÎ~«¿ZD¶¹í·ƒ´ïgužËýøÞF'Ïm:Ÿu‚½ð¶·ŸØƒ9Kt^Ž[;6.ïÏéüØ2 åkœ}wo¸ÿ¬yë>ÓgbîݵÍèû 4îú\Œ½íœÓÅ/S†Iù¥I[Ò y6î~âÖ$ßÔßä»w¿ãÞ a0c9¾×ïã \ÞE½]î-˽›2®?®ˆ¤'µ`=õåxq'pÆ *é­1ÜN–Ç 2ÓûÖ~úÁ›ž ûÒŽô¦èë@åà O9–{=#Ûäx¶ ºõ^^œcâ5iâò#îZ“D _Àãòr\þl¸ž\{]‚Uz%³†_Ä]œÓ¯$P1=B!„F\ûN*Dç{’=‹ÞŽ%×Öš–ªË�ë¹?´\ô½]¸TmYÌrïØw’Çž¤'µ`…�:¬3ßíÅÄŒ~è±ðÇŒÄ *ˆ:K©SšeYbÃh1—Êͯ‘·àÄmK Ëì“âš\!ü¾~Á.¡Pëï$LÈ-äYB/ܼ”ß%zƒõul¯Ëí D¥%á3æØVD˶¸ë—mq‚U®Å­ åùû³•)SÂ/â®gbH!„B §j±B´}7«ø46“¶õÜpìi¨² ˜k6²Sã^iï!ðwÑ&-”L!Á¾¨€ rÃVD\øBBB Ó"&uØ€ÞoM "9¦/˜Á$7¿>I]k1ÛDˆÏó¶N¼&+Îð[#ÊuÞ …ƒè4Ÿú:C/ôwFt:¿C%åßORÅå†P˜ÙÔl¸®Wò?6¤Æ»þoê¼qÏçzdãòVòÑãì—!MøÅH~ÚÍ®GÊŽB!„h»ÄtÚëö8i&fR<â@ÊÛ1oì=mSN…VqÇÔÐ0�ûù |òLRÞ;lÛ»´ÝêŽÁ'Ó“{Ò%2×>Ð^jü%„B –qï¤T$úÏu8äÁtô¿¤ò{Fk*p$ ÖgFÒ×€që•:)RÞ;w§à$ÊÑ©@ÆCÁZŸ×Ð?«Ôcú¥#„B!„2 kMlïF=4+/Û „B!ß½Ù „Òe(XkäG×¢D!„â±ú³•:ô{>Dé6¬5òk߈¼¬W8„B!ˆÕŸ!²Nk[Bº k¼°5F˜|‰B!Ä«èØ&„®CÁZ#ñAƒ„†‰B!ÝÆ«¿ü¢ÝX ¹gŠýSeÖ“w×®,uh×s':¶£mãÖ­/,q3qiý¬.èç„¥›2“sªûª÷u¾¹3›å!˼6ý>Þ§ßËJ—éi¬5sô¹èe@#E!„î"C… Z‹¶ ܵ8'­›/i x|Áª÷ÁZñ¬7O«¬Ïéç·F~ÁŠedîÃú÷ö²êà1K¼ø ¿ù‚>NÚ<˜F°"ߟËÚ3†½]]ÎÏﯵŠuUëûͽPJ ’Oêwé¬~OÉ(¬5óðVôrí=»B!£L±jŒpm _ð<8W´°À9G„(gµh+xD´R°ØÓùu—Îϲkx¶Ÿ|i_°‚Äç:÷µÈ<¬wR‹4)*°ðÖÞ¦…°{ޤ{…—Yï´kÇND—»s_.VLš¼«@ Æá‹e²kÍ@¨â¥†p%„BH÷(S¬£þy-:´ð'là¹zh‚à1Þ< Ö• VÛ±à‹É¼‚5éyƉâ±÷ªAïoDë+ûâ·h¶ô¹o+X\š<¨I°‚«¯+õá€Â£C‚µfÐ0á…Fh0!„BºE©bUc¼f x¬°Ñ†òÞ!ð²ÅÍŒ8úÿK[‘§Î½Oš±y‰Œ E5à˜úšð=„· Ó”ýo  ^As,ý÷!ýY®[<€¸—«Î~Ç.{ãÓ܇¾¾5„³Úó¬éc¬~(6òÝß& ƒÐ^ûìFÆ [±*¿Cáê>×A^éãÜÿ­øë2èc¹Þ/ÎÃ熃‰â\_ÂÈå:’ˆ ²ðòUoÛÒ×òÍ‹Ûôý¾hŸ«¸/IN7cµ%ÿtrÇ âØçìùpìSúŽü_ßöŽg“¹v¯,à\÷éýýâ0N³Ï¸ë ï!×ãò¬‹P°�&V@Áå:k„BHw([¬ß'Ä VÜãŽ76sD°ê¿ð¬‰ˆ„~? xwŸDTËø=3ÞV–qrHÇ´á(¢Å ê}½Çôu±«û¢¢Ø÷èÞËa}쇬€ƒWKö1¤¹ýžëÃz?#:ôù Fþg}œD§1aŸúÞ†öÑ¿ ¯Æñõ±/á>¬ˆ1yàíƒß%yXë¼2ÇÒ×:é9H>à·“&JãM–ëHÜ'î¾ÜmZLÞg¯#.ßÌñõ6·3Ïê”~V« ÞÑÏeÉüÎ;öýº<\Õé°þßä³&ÎÃjòÅÙcnq ÿ½Áq$ì^îý>½Œ½®hÓ€qïlW¡` �,kƒBen!„Ò~ª«"h’ƒ+ÝäïŸ$N|ÁŠý~Â3´E$Æ…$®Ñÿ]ìqôo‡„Žõì°Ø$ î^ümiîÈçÞAR>ùŒ}͈PÒï×bmpÜ›þÍÐïì¶$Áê ª¸mq¸Þk¤!O·Cš{•sŽ_cîkÒ6s|O\b›_Ö†ò6îØ#ÏAƒcº÷0RuþÀ›ìžW:9dÛÄër0÷•p}]…‚5�®è—/ôÊËv!„BZK%bhCb-ITÃX_ǧè;Jr…’&IœøÂKŽ—’®AŽíó¾ÐL¾î=ȱüs›d¯3î^ümïÊ_ˆ%å“ÜË ßí½âørØgh ±=çI¸Ž¸ç·- ˆ-7t¢Ê'Ns¯rÎÊ«ì#×í%sïqÇvH‘-L/¼yFq<yV’‰y›æºFî‹P°†Â®E‰B!íEÄ*ÚüRŪf’¨ˆ1Ú¸öǰ&Ǭø<VœÄ$D}a‘F°š}&úq÷âo›xV`æ¬â‘“ýà­=õvt¿rÌ —÷óÕàå‡»Í¿Ž¸çû¬'0´©¾_wlkš{•sŽÍ1÷5i›9¾û¼ís)K.qÇvˆ¬z?3†Uo¿O?«-;ÞÕí\ê€ðIs]yžUÛ¡` xWQ8·Ê€B!íCÐÖC¬VÒÞ[C9I0¤5ŒÓ Vs<g¬_…"ÆÆ V+0äX2n0ޏóùÛ&Þ‡Í×Ü‚UcμÓ;ž}>:×à^þØ qBËË#ÁG_GVÁêO¬$ÈØÖqy6‚å¾ÐaÌ}MÚ6È/—vŸ±3ÇÛ!N°š1«NyðËâļHs]#÷E(XCáé·táÔ…ãY !„Ò.*«ÀÊI†t’ r_°Ê~˜ÍuÍ=¦6ôÒöÍ8c~D@XQ(â3I°yCåXø7C+<d8~ܽøÛÒÜGœ°Iʧ8dßßÔÇû¤wÞëóžòî36Ÿì¶¢+&šŠ—r]nÞ½W}]²¬Í1ýýX‘6æ¾&m‹vrŸ˜œË{‹I‘Ì„GqÇvy®¶ºy<Rí>8¯?kõËzünâu9˜}®¯«P°fFAÆŒÁ„BiíźêIÔ"V-C‚Î#ˆfT½ßÐq´Ñ=âAÓ¶™Iï;”Ü}bãfÜÕ ‚gðY#""rËü˜ašî±Ý™nÝ$3 Ëq\¡58¿xÀR܇ÌZ;XjEÿæ¹ËÑ,ÁØ7)ÏèýpòòO¶xלüv¿s; D™mú\O³Ìl;Îûl~§ÏqVg ºôyÏéín¾ƒ$Á*Ëá\#KÅw_"�]Ñ&ûéä{:Q~ßÿC½]ÿNž‹y^N’§c-è㚥‚ô÷#ÏÄž×ß Á*yžTî³Oº.‡qïlW¡` ¬ÅŠÂK!„æ ãRG­>uŠU`Ę6”]‘#†¾Í&yû#ûÂÐÿoû%IÑ«owÍÊ/eCk§êcc¬ +vä:~I $¬9îØ#DzÞVè’ Þöîo RÜÆxÊyðýº>Ö]8ßkú\VT×ã “¸m®O’ä÷` }þuù2âÊÙ¢J¬»-Œû~ÃÉ?쯯ip?1×2”ìý_HñÌãŽõú „Ýã!Dzh?lCYu¦;)”?i”x5EdGûNXQ+yŒmf¹[þ±6¯ûœ¯èr&ûMÒu aód\ÇB¡` iðÆõÒB!$$BJÚr¡n±jÐ7¼…I"¥)ˆ hú}2”óÇx]»k@@¨¢a{xËn „BHÐ`(+X‘ Zƒ«ŽxA© ®»§aP°’¶ì)ýžŽ Ÿï*¬10hܰ.!„BÂFÖQKó|bU0a0†Ó„jˆŒ”±¨„´ ^®ßϳú=%£P°Ä*:„B!$\⼫núå »c ˜1t/íÛk þÌ4³ðÒôûxŸ~//58¢l(XáÀ¨ŒJD!„0ç]u“;¦•BHv(XC@6p„BH¸ÈÌþiÛtBÉk€ qCCH!„ð •²$ŠVBÉk€¬¼5n¡LÔ@!„}²xW%á7˜\‘BH6(Xäé·¢Æ  !„ÒF§M˜)˜óRBH~(XžU4rð´B!$ à!…�õEiRÂDŠôªBÈtP°Š4ˆ„B ƒs¯ŠÒ¸„ån¸<!„k `r4z˜5˜B!õOéG&xW1NõkïÙB) Ö@‘ND!„zç]ET¾'„R<¬‚P"4‚?ÿ‚Ý@!„Z69.!"ŠãT !¤<(Xb!BB!¤>d˜Ž›0N•Ãv!¤|(XáÀh9†B©ß»Šqª\¦†Bªƒ‚5` TÑ8¢g—B!ÕãzW1NuÚ¨'`xf%¡­Ï*€åzÆ%x€Ññkö!„4 ÖÀA£ƒÞ\ÒM°&/Œ™‡?úë9H_ÿöè6†BH1 NE; Ñ:i™ì+‚ð?ü×H0Jr…¤›Ð¾‹°ÌBܱüä TI8Η÷XO¿Å¶†R=¬# ݤ†’Tž‰F4â®Að©/+õ¿~%z~2YR`$áŸÔÇÃ_?ý”6vÜc» ßg¿¡B!ûˆ@KƒÔ×H¿¹¹ß&¸è„lhÜ{“uâ%¹¢Û½_B) ÖÀAå& y&H_7ÜÒX#­¼}ÿè•È+Š0/1TB7VäžÜ„{‚ø†±‚û’û¡¨%„´ tBBl¡®C‡úœ$ƒv�í›gh3Ð&JÂ1BHP°*}6œÅâ7´Y<ØØ¿m+’7H¨è5—02ß[ŒÏØÞæü „´ Ôq—¿u‹È’: ÞC|o!É´#„2-¬ � (ÉÎU-øÑ`ÂðÑå†3‰w•¤GD;-ò–F !$D N7Þê)tüºÞ? Û€`•°_ìKêE¢”Ð&£ý&„@ÁÚ�P£qmâØ—*qù|aŠÏÖ Ã$‹G•‹xmñ—ešR&"R ‚6€õNØøí7þâfKLi¬ � ,*nTä$¦hÜÐØI-…ixà¹øž<3ŠXB!Úoéà”á(ÿè™ý6ž–î@ÁÚ�Pi‹QOâáCšBð0Ó2ŒWÄböc%„Ô Ýí&Þí X×ËjBÚ kCC¾+ 5 •ng” ‰–Ò-РóJêΚO�Ú DìH[o,!¤P°6Œ½ACʹ­ Ôï9%ˆÁŠDi?hëÐîÉXF‰¸àBé¬ 7í6y˜Ð;ŠQ×(X¥QB!Ýíܯ~m¿=@¨'Úˆ®DB‰‡‚µ! ÁFŽÐà&ƒP_„s¡·÷#ãOh”¢Ayb™"$l=ávZ~æ«‘på»KÊvíBškƒPÙ"&8p ºG/"Õ õýum pŒ*)xêQÞ` ·9”ž&‚wòl› ã)HUÀ&àGžVjõÚ#„„kƒ û´@°2111111111I"$DX2z�ÅcไxÅgôPgé!¬²R*Â#LÈ4Àsãzùѳþ¹oÒ£C!$j `Oa¸ÒÇž†*uÍëJ±JB†¥³A Bý›ç•ú;Oï/sã¦P+!!!!êŸÐâáéèðá$_„B�Ú´ °«$\½ Ð.$!ÃÒ80¤a\Ë$Eã+!ÙÀ;ƒžt¼?xǺb˜BœŠ…ŽM8 `‹µ9*‡v! –Î@A*ɃOŽ Ó¤T•`ÅyhØ“6÷Í5Lèq%$˜DI†«É|÷»ßU[[[&}õ«_Uý~î¿ÿ~õéOz$ýàþ i»³¦üã#Ǻçž{†ÎyñâÅÁõ\»vÍ^%`ó m@ÑVPV –΀‘”´)KÏ_žŠ ¶ŒlÓz°„¸°3†ô SÚ Ö}|!*BÑ®€tÅã“O>9n‚ÈÍCܱ PÝsBÀÆ]£ˆ]ˆhì'¶«¢¶Í™yìBBª‚¥3` @Ñ›çŠÒq) Y*&·g^¨6‡ÄB™ „ª UPíâäzmorâõ…žBŠMzrÝÑ®°Q‹ûo­ˆYÒL(XIȰtÆLøÂ4)e!MÅD¡J!Ä´‹BUD›+L!ÚðÿÙ³g^Ѽ^Ц‚{o-„+¬/d»˜/M„‚•„ Kgp«I) ã*&ŒE¢P%„" ÀP´5¬m„" BTÄéG?úQ ° ˆõó‚âþí·ß¶{’P `%!ÃÒÙ�zå‹Ó¸”…¸Š ˆôœÃ0¡P%d<œœ‰tDÛüã QG&:4Û†Tˆ)ˆ*ñœRœ òR¼Ô’Ïèh«€mZô+ –Άf¦,¸“Ûs¾ü•î„x2 xO…Ðvoé.Ò‰)Ñ6m"Áûá„ö°ÍÂ)Tâ: ð?¶5½“�ïlª&½7¬$dX:D%ŒW ú) R1½úGJy¶½=ç„” D«¬ãú£H‹xôŠR?ôT$XÛЉ !a a„1–¬ðú‘0@g: $„ÏŸ›6Q•�› vÛ?ùR¶eë‚‚•„ Kgƒ˜4S¤b‚ýÐ7‹5´ql&¦ºRÀ¹«Å!“¤{ #湫öCCqE*ꆦ  .!ÏWé`hⳃmuïW#-ôå�ëj? IKgÃ7Sʬ˜äاNbbª4¡ìÉÿUÃDBëå¥b;!éA¸/„Ž+R9µÙÈ3ñÚ´°aŒ‡·õg/†;„„‚•„ KgÃ7Sª¬„TIeïè§×#ã„ÞVBªž7L’„±HøŸžÔö!žW †ˆmJX7Bë?óÕ¨m€€ V2, $i¦,P°’6RÙÃdx/C#¤É@¬ˆ7µIâ…L:$0Ùõº6ÞZÛ@ÁJB†¥³ Ô0n¦,P°’6ZÙƒ·ï*Bù"LHq@˜Â˱Bo*Xu½ë¡‡ #,m&5 ¥m `%!ÃÒÙPâ&`Ê+i#!–=#¬H\þ†é€P…7 „cS‰ß‘rù@ˆ°´ !ˆV V2, •\’`EåQ›+i#¡–=¼åG:!$;"D T›úIêîèØéÐDÛPw‡&+ –ÎãOÀ$¸`Òúy¬¤„^öèa%uƒŽ“'|I¡¾²vjB=IX¸yü*°ÙêÓJÁJB†¥³á¸0«Hã{§`%m„ed¤½hŠ`…@…PÅdJªdàeEYBçËR<¬$dX:*<©"X±Ø;Ä*¶ƒ‚•´–=BâHmŠX}ûí·W )d¯iª²–+ÃÊG¡`%!ÃÒÙ0VõèsûcäÆyV VÒFXöE†4A¬Š' ÞÕz¹¥vúÇLbÒìŠÚ¸¥·n¬¨Yç3iè¡·u”2íBB¦…¥³%|z=Û ý2+&ŠR,{„ #Ëg„¾°x¿‚k¸·©zó3º^9¦ú;Vîn¨^oCq8z³Ayƒ`EyƒGŸP°’°aélê…^ô´P°’6²GÈ>2§¢oBâῘÕ5(×­ µ2ëxSw×ÕêÒçÔæî^ô=i<âÑgˆ0+ –Άóõo+õ‘µñKØÄÑÁš6lËÙofY­Ý ÁÑFª-{„„MÚ9 êÞ-xWƒÃ¬7ßTýåÕ†ˆÕ½µ¾º f¤íÑiféAõë ³úÿ;ÕJ;pDõ¶þDín=¡VFû,œ1‚wÐF-ôÕÎ5µ43£æ{Ôù¥Û£ýŽ.¨£3l¯ªà«_ý*E«FÚOBB„¥³áÀùÅuû!eVLrìÊDCê°­·TÆ »…´‹ÊË!‚NÌ,ÃDê@Äj°ëdë uúôgÕ™Íö‹=ucmY‹Õƒj±ÿªÚ6¡hnFÛgæÔÂé¨ýÙÛî«E-FçVÖÕu#RçÔʆþf R7Õ­­žš—í;}µ »Ð»<¼?))‹]­¬$dX:̹×ÓO²äÓ*Áš6lË1’û«o¨ÍÞ µ¼öžýLšD“+Þã_~1ßûLˆ‹ÌŸ5ò¦J!¤m90¯Û„m§ÝÁªEêÖEµ27c=¡¢¶zG¯è{j Ó¹Uµ±;üÝžˆÔõ˪¿xÐn¿e¯ÿ?=¬UÐuÑJÁJB†¥³¡ ×üÿv!¿AÒZÁê‡miÃbwóŒZ@h•¾®&DK+?œk¾§6·×Õ™¥ùèóB_mï\T«6ŒëÀIB—„@åe¯`>ñ‚R¿øxC>÷_Ž¢oBEƬÖ?ðl''¼£Ã>NÝ®8a¾fÔêúŽÚ³Ñ>3Kk*òÅJTÏ£jË´Cr¬¬x]P÷®œPówhÁk"¬À5íÑyµ<7snR&"Z&˜4íÕ?²JBÚOBB„¥³¡Àƒ”—2+¦ÊECbØ–ŽuQm!lËôV ¶ûǵX=¤VÖ/jcÖŠQk\hcaë–¾èõž[Uë§Õ¼]4“ÊÞÞŒ@xCUÏ)'™!{H—“‚{0dù‘Ã8IØHÂü¡‚É•‚³ê³£ÛžÚyÏ­°„X[R½þ3jkW¼¦·«¥A„ÎMÛÖ Ós^-YW;æXö÷º/œW§!r玩Ó/h<{P]¸SÿF·[Ëçíþ¤JdL+Äk(`<ú‘g퇒 `%!ÃÒÙ@2˜7Xh¥` Û£@‹Ôë¯jz¾M¯9&Èÿ­„ C}Ç„{Áðx7 Ë‚ˆ¥á<cËÞ:!´Ñ¨IcXNõL¯©Ko–âq‡a‚eªÉ:2Q†ÊÇz Kß¡‡ñªð®5p&nªµSj^Ó­gT¿·¤æ̪…þôñבàuæb µï?Êi(H˜™k)S°’aél(ÓÎúØ*Áš¶%“1-œVç{‹Z€FFE4;£þÿÑ‹jmyÞz]íx!cx½§6Væô}Sn|ÑxäöC¼HÈŒ-{¦œDÞÈ0Ìã5w<+&¹Þ”b¸ª 1<dËJ²‚rSmÙ‘±œéÞ¥k×®ç¹Êެë8ÃLtÛ³Ô7Öü ÏvÏö& B [Ǽ%+ÑËŠ²GH¨°tv”2+&9ve‚ubØÖ¼:±tÔÖ9-^×7[-ÂØ˜;®–0inA-õžSÆ[0§–Vça\Ú9q"w´°¬zº%µ0®ì¹áz£¡{Y€ÁzZ--Þ«ú[嘕ð…¾v& ¬Õ‘M°" 8øq«„Xd<k(Ñ�ßѯ–1̲æ~(XIȰtv”V VB,•VxjõÔæ¦>FI¡â21äõ3 É"XÅ»ÚÜP`ÒEBëdAGfY!ÿ¬$dX:; +i#cË^!!ÁÕQöx%B¦'½`…áöìYû‰f -¡€ ùÊê̤`%!ÃÒÙQ(XI_ö"~h_°Šwtw]­ÌÉLÑÚÇÌÒ³ÇUû¦þÍò9r^.èIgX0 ›ô‚F?ŒBšƲ†´6kY™¬$dX:; +i#“Ê^ì²6 V$GŸ³ ’t‚ukk+¨W›3éÓÌQõéwª…þö93[13[‡´ SY™¬$dX:; +i#“Ê^“<<úEH˜¸ËÚ % Ç@†„™ýþ¨êmnªþâ탎6¥vÕÆÊ! ÖÀäKýèGí§ú)«3³L»iaéì(eVL“D!e‘Tö TÑCÞ´‚µ¬! ©Š{î¹'¨ÊF³ÓW ±kµR°–IHmGY™MkI·`éì(eVLI¢¤ÉB_íÃä€:€ÿíWd<~Ùs…ª¤&ñó/P°’æóéOÚ„7ˆ?¬Å}P-,WsºÞ˜±Ãà PŸ˜¡Ûvß;ÔÒéUª;³ð :ß?ýnáŒÚÄ­{;j}uAÍ ~ç,‰ukC­Ìî×QûɦCûݮۉ ÿJ°+Xݵbõ=ô.¯Qî­KŽë<¡N˜áÑpˆRî³ÁÀÃR„N™xÖ„„ KgG)³b’cS°ºì©Ý3ª·a͆ÝuõÙÞ%5i¢?cL¤¬Þ9:ˆ”½ñ/þňP•Ô$~ùE¥¾–g©XB¢y‚UcÄ¡{f†qß«‰IÜæ"höQs+ëv_÷wsjeãF4ÆtnUmìþ‰ ¥žYZS¹¤Ü‡õ-Õ_ÐÂլ漇ôy¯GÌÍ,«µIƒð#q Îw÷ïi@M÷¡•a„S°’.ÁÒÙ Š¬œÊ¬˜äج{oªþâºA‡˜Œ&ò9¸²Q¬`:G7AÙÃøÛ†4Ûû}õ—NþçØï˜˜š–…gaº>5ÿ‹H¼©v6>¯zKóúž¬wsd_ÿÿëZgÎÙµ! €ÙÏùnbBÓV‰Î${=±D‚uÖ´Gž—¶èûl0ð°b,k(”Ñ™‰çEH¨°t6„€`ìB”Y1ɱˬQC;¶¥ÚµSæ3®Åô__ ‚Ùêôƒ‹j¿9ýyÕ_Fcl{‰õ÷v.ªÕ…ƒû¿Cˆ“Ò¨ ¥zÓѾÿƒš[8:¸6I³÷>¬Y¼C-ü›=lëÜqµd® ×yImYƒ`våõ–ùÆÄËÎ9ôçß~>eXV†<ܽa÷66Kç‹‹‹fVÒ(?†!¤ZàúêW¿j?5„A†zþ¦ÚÝXUss§ÔÚÎ5Sç¦râyÄï0ûø¤ö°Î«åµm;!Ó8âëõßg`„Öv@°ž{Ý~(¶$dX:D‘cʬ˜äØ•xXMCi§i¤½ig[4VaR×¢FÕ¹ëÑÿ¦¡OwDáNf&F-Ìf½L‡Je÷áX¨uÓÀߊz¨‡+«ôž0 Œ¡rÝù½c°Œ )ò2äa´ï¸°× ÎÃløe!\0–±]!mÆkQ™e€Y‚‘šCT/›:cöˆZ82kÿ_QëoöÕ"ƆÎP+ð>Îý’þû·†ê˜¸ßmÜtÆv˜Us‹Dë@gÁÔ¿rŽŸVÿæßü´ý_ƳâÔÃל1¬t[ð õh²CQ»(ÇNÏ9uúî300v5¤Y‚f fH0é, cŠ )³b’cW'X­4ÿ[aµ·£6?­–Œ§Ó¬6<)þˆ?ÛðÚ‰B˱à&OàM ¥Š¬û牬lŽõß› X3†e¹×fþOÎÃÑ}ýÿ¿1>Kç~Ùs…+!m#ôÙ¤á]ÅûGHÁ טéºí°}$!ÃÒÙ Š )³bJ ¥+¶ èîTsËçÕÎMÙ–F°Z+~—»GM¥Ê*X§ôƒ(D×ü…æ¯éîºZ™;˜àaM–•!G÷õÿ·Ö©ò0?“Ê^ã&~!$¡Ï&ýÝï~×¼›øKêÀ¶+ú '[“±teY&” BB…¥³A<¬mí•—í‡))³b’c—/X“¶N©G9®f̨¹¥»ÕÒܬš»û^µã]XPGä-o:ã/ÌÌ©ÅG·RŒfoÛÓ"óÆëª¿¨k– Ø5“.aíÑ…;Õÿ`Îo g² #b÷¶Õšg‹ã-«þ{­(ÖÛK8¢¢…äí9Þz#eXV†<\9¯Öd_7y!aëoMŸ‡yÁ9A%%„:3Ÿ~Ë~ý˜&p`´+]èl‘ö“aél0H\eVL ¤.XöHAGfѰ ¢BHÈ$0öK¤u V2, âÚÅÍLÁÚ5ºƲGºÄ*¼¬¡ƒq¬ô²’¦�ïêþàš¿]@ÚOBB„¥³a`¬R¡_eVL ¤.XöHÁd|èÌ xY»$�H³AûÙ³gí§öCÁJB†¥³a '½ˆ°` VÒFXöHùî­ðg  �;c°Y¾ëÀ`R¼*ÙÛÙPý™—`^-õTKKgô¶ÑyfVTcÇÌ`&îó¾Ì^¯n¨­þ²A–VsÙS»[ýh¦ø™µº³ `’%„°wi¢0” BB…¥³aÀ0ùѵ闷)³b’cS4ªaÙ#]!Á˜˜/t �>þñ7l]Ö}Œ�¬Z°šÙàgÕÜR_míZɸ{Yõ–V[{ÞL󻛪o–TÚãQ†;+>ØÛúœZÖ‚uo«§æ‰�gýõºÍZÚ·«Åþ›ê&œ]Vk7Ú/Yß~ûm еYå)XIȰt6û/+õéuû!'í¬{Ñ’.ƒäê1FÀÛÕÒZÞ^…I½ÞšQrP-¬^¬e ™iƒ`ÅuŒW'$ /h…ÎÌ& ‚ ‰K…T/X?P[½#êÀL’Xô—FÓì½ifŒ7KŸéC‚õÆsª÷8ÚÆè¸ƒßa†zï¦-]¬ù=7E»Ö СÏjÇZS°’aél 2ùÒ4^Öö V€Ü®Z90>¡tÃ.ÆÂ€ÝuõÙÞ%kT\WŸýÜ ÇÛeb¯·54fûjû “ùÖiiƒ`…§ì×¾a?’V×&�ïÞ×p½Xû‡Á]^ÛÞ±…`u—CÇaï²nyöÔîæ-ü¢%Ç–QßÊe¾fŽª¥å3Nï,)6”üÎV¬~û˜0äÁ*"׊MsÍ#ÇÇïæÕ|o3 ó¬Á½ó»ùž]­ÎvµÄûß•Y}P> –Άƒvš±¬eVLrìN V„P;£67µè4ôট­QaÖj=¸¢µÏä^ï(LkÞÎîÍþ;"Ž;Jýeo: 6ÐE+ÉÃÿ¯Ô/¼`?4�xXCõ´šŽC¬¡½ûA´n¶Œ£VÕc¶¡í9b:÷v.«K;7ÍþQ?ïí¨K—òŒ…gsvzÁjÿßÛþ¼Z5V¯4ãscëà¼Îs­¬M«hÊœ\‚•„ KgCA{ø÷ò÷¦·G°Æõ‚; ql/ø µÙ[T3ø¼tJõ6nŒöŠÛ£‹1ýÞMñ!Ç{[gÔ1ôXQyTõ¶ <ôm¬ÚkÔiî'Õ&±0ŸÿZX¸]ÿS÷>ÚS‹3ø|ÇØ^ïhÛ{ì8ª» OA+Ƨÿݧ•úÜ7íB2"s4ÅË VñÞ†%Z“;Ýú!=Þ[Šêv³M×õ¯n¨µó}Õ[YUg0ñÑîëjcí Õï­ª•3ëÎð´m‹ŸE…˜Ü9Ú•`„¨7Á³Zvô Ê!¡ÂÒÙ``”ä²ÌŠIŽ]…hˆï÷zŽ N/8ßA4̨K—µý‡{Åóऒøÿè¾ðôŒŠ!ÂP‹ê]{L¯w´¿ls{÷I•e¯hV^Ž¢& :É‹Ì$ߤr$cZCZB$š±¨z›Ã’u XÍDH‡L'é͸NCÀ!‘Á‡‰²¯{m"rffÔÜÒçÔ†iŸ0{ïjuõ‹j;ǤKÂ~ûyÝtâÆOºt§>ε¨S·…“.ÉRK¡/_[¯ìè V2,¥‚5©|Xôö‚ßP¯n<£Î÷{jeåam�|0Ú+n~ "c�÷4œb<¬¦qÏ©MCãÆ Ö9kÈLîõfHp2ÈsÐ4Áú”.J0Fš°, ÕŸþ/J}ñM»¡!ˆ— KÞ„±”ˆDâèz|æNµ¸¢Å¡Ž ¶nŸ½÷aõÈâAýÿ¼ZZ9¡ÛÄ·ÔÆê µtÂNˆ×»¬®o< Ž-7íÏ̵)³üf"¨+ kÎñŠƒoĶOÉËÚxŸÎ=îOðç¶Uú¼6ú¨ËÚ`¦ê¦LþõÉ/+õï/Û%2BH¨°tv”2+&9veÖ‘^pG°ŽíÄÞ@‚‘^ñ´ ì÷³jqàQÕ˜s£w*$­`µ÷4®×ÛzoçVÖÕ®™Ðƒ“. U–½¢À¬Àã|ì5»)iêhU„eBD|õ«_µ[ )–k×®™Žt £$tžÖ¦ Úˆ²ßk V2,¥-‚u´üqµþÛÇÌ5`\èÊúe3–g¨ü…'Ôê±ê„Y bw{¤W<kÐÖ~/¶ô`Gb8ºxc¯D!Ëúøƒ5í0fv±§½×ö„ò¤^o|´3Oâz¹¬Í€jËÞôÀöó/pV`B\ V!Zï¹çž@¼­¤-`¹ nBÙ’qé­e#í'!!ÂÒÙQʬ˜š&H{hRÙ±ŠÔ¤ñ†„TÄkSB6IØÀ“ ¯*ÖX w)¥Q¤¨ V2,…‚•´‘¦”=«è9§X%$ˆ ˆ ˆ& ÿ•0sŒYmëâ^eAÁJB†¥³£P°’6Ò„²çŠUŒ_%„LF&Èpm¸CR/ðÐK™`…pm²&w•ñQ°’aéì(¬¤„^ö(V É+B.L+ñqËHS;7¾ö^$V«^O™‚•„ Kg‹AœTáQ°’6zÙ“µV)V É/J8£0‘Ð_´MîÌ€GšXO¹j(XIȰt¶Ì*‡^º¸Š¯lÁÊÄTW¡ VUŽY%¤ \1ë+Ƹ"ál#Ýè´@ÝßÄÐ_ ®kÖxi? –Ζ#½u¨�]C¹ŠŠ‰VR,{„$Su¨a`&aW¸0\¸½@”ÂÃÞ¦Ž tfÖ)V+ –΀ŠP¦F—PĪ+S]‰2ʵ¢NÌ_~±Þ~ˆ¬±)bÿs’¦æAŠN‰üã­í”¨»#‰‚•„ KgG€a‚ñs0TP)²b"„nÑ*˜mQG¸(„ ƺBèP¼6 ©“ ›ñ™aßå@»„ KgÇÀ¸Ö¹§£Š‰cé!¤› þ‡`íÊ$`®xÏ+'k t( ÄW<©©ÕAÁJB†¥³ƒ¼úGQÅC¥Ê5¾!„„ÆÌIäMW@()«+Š ’è}­„pC¢3 èPÀÿ©ÕCÁJB†¥³£ bzx+äÿÀåv‡…R60öÿãû†!3Ê£Mèq‚I,'n*t ¸ù [“e±Ã ~(XIȰtv©˜¾þm¥þÉ—¢v-„ô B“×ÀØÿÂv#! aÁ.ò³ÃÞÛê©yÝ~80£æ{›jÏn/ WÀŠ‚ Yl§¨JòaטÑyˆÎ�v„ + –ÎŽâWL«­]ìa'$+˜´‘ ª˜Ì Ÿ i:WíŒòÁw`ÞXSK3åV„¥BXAtAh¹^AˆZlÇ÷g]Eò"ÂÞ§øyáÚÕ<B[¢Ø(XIȰtv”¸Š©)•*!u÷ãÜë‘A¿x‘cÀI;AGgÌÉ@Û„ k¾@û¹Ÿû9õ¡}È´«?ó3?3iâElƒWb÷/3î b]„©xz øa¾öžR÷éfD°Q°’aéì(¬˜ɆD!`²².MPCº &ç“á"0ºƒ¢&Áêz[Ýax]9bÄ+¾—0Xuâ•a‡$ÞY$ˆ@üNRU@H»ç•ë/)’Rñ–Š(1Na¢nd¸ÈCß´‡v! –ΎŠ‰t@œB¤Âp‡ç‰.2™„ƒ¢Á*“Aœ¹ÂMĦ6ˆX¯ø"x‘ð{ˆ"‘p?¹ßçIrýn‚v÷‘ëA’ë¤ ÍÎS¶sáõMZ2 e‚Paéì(¬˜Iað¨B¨"á†Ë V u…Hó½¦âM7þ2­Xy…gù íESB€}h’aéì(ÓVL¨˜IÚzÄúKHÀä¬n𚺡-ÄÿØ&^Ó´T%VIظ³ÅcâʦvnR°’aéì(ÓVLîx>„Œq–TÒ&‚³G1ì/k¥™¥5uÃ~'¸^SxI³zMÓ@±J\¡Š°ù¦ÛA¬$dX:;JQ<P§!6gM%„Rq^S™ (×4 “ÄjÙkÅ’z0Årf°{ X›4Nu¬$dX:;JÑ*lÖ¬)õ±g#,½®„ÒPç—Fo¨Ì¾ /©Ì¼ á(^SÓ²Çj¦ö¬Ö¼ô)Ø6"TÛÖAOÁJB†¥³£”U1}Ç,âuE/äù? x%õ²ñ.Ë !eƒPz*2ÍDežðŒŠ×í•ë5•e`ª&S0k+Aç|[#É(XIȰtv”**&L@ðéõH¼BÄ6qæ<ÒL`<Ãëåï±×ì„RA§%D+Þ½qcûBñšNb9µX¬¤aP°’aéì(UWLè•„x…h%¤ àÍH]}E©yz¸“„ÞUBªõûùg¿«~õÉÍX¯)„)¼¦Xû44 P!T3‰U@ÁJ+ –ΎŠ‰´QR1Š‘ðÿ¼B‘JH@tŠ×b^ÓÿþŽ;Õþ‡—Õí¿û§ê#ÿûwÕƒë×ÔÕëá¿ ¹Å* `% ƒv! –ΎŠ‰4ˆP„"Ì!‡¨ø ï=—¢!¤: àd¬)Æv¦õšâý•¥@~þùp# ¦«€‚5xÐfüûËQèz[fúÚ…$dX:;J*&6hHà1ƒQÃ…ȘT” ”zQ )Ÿ8¯)Úü±*cM³;¼»}s¿ã)¤'«G›G¬¦Y+–ÔÊ™;·Á?ù’R¶í—‡‚•„ KgGiBÅ„1‰âM“Y‡ÑÈüâºRç^皯„R$gž 2#.Ú TñšB¸=Ö4¤ÎH«¸ÒD¤rnƒñP°’aéì(M¬˜dR_× „”IãƒP.]Ò<¾þm¥®ÒsNHå@t"dW¼¦åE» ^S„úfõš6ŠÕv�;�݈ÄOªDåä]j© P°’aéì(m©˜àe…·Ñ?|fß AKÂ:äYI ÆBÊ¡.¯i™ ã²èÎIŠÕæ#+ˆ�¯*Ê Ej:(XIȰtv”¶VL0bÐ@¡'•Tò·‚±àzÂ?~1ú ÑŠçÃ1É„ „i’×ËɈ״éH‡ÄIÃC(VÛÚÎw‘ V2,…Ó0RðüÁøAƒˆ^zw"L‘Ÿ0Ęd7!ÅqíÚµ×¹^S|¯)ök+]ãvŠå™ß€b•Ú…$dX:; +¦a RÅøq I¿òÒ°C‚'c0‹M«Üî†î ÷—ˆ{ SBŠG¼¦ð¶Ùk:-¨·’æ7¸x5¾’b5\О<Êõ´+…v! –ΎŠ)"Ä`ðˆP…7FŒ¡;/Œwpø½$ŒãüϯEÙM8¾FIÓ6Ô8†\³$o"¾e¬¤z*ú‹ï!Õ‘ä5Åß®xM‹Dê?Ô×{v¿ž“á"«á€ví :„ÝvéŸ>ÏH§*¡]HB†¥³£°b*_õSÎÄBnúˆµ0oJ 3Ÿ^kü…GBÄ1!¤: Lá¯)êcxNÅk *½¦Å"ãë!€(Vëy/<h“Dœþø…èƒÊ6©h’aéì(¬˜Òc œ ¡®â•-;<çøÜ7Ù¸*ð†Â+*^SŒ1EÝëzM!Lé5­Ž,bu+:ü™"BŠ!ªÙ@{èzMeˆVtª²ý Ú…$dX:; +¦x 2¿ò­¨1E£*,z…CÔâÅýkt{¨_û#»!¤è5 Ÿ¬žUˆ-ñºí"i° ãf±Ú6‹Ú<÷‡}E˜rŽƒ°¡]HB†¥³£°bÚ *Œ 1Hþñ³û=ÀªMhda àÜ1@0¨àQlÒT°^i’×BH¼¦G$ðÜÐPD0ê[ m}è›Q{ä®/ý÷/Ú/TÐîáú$ATÊp´q÷$IÆ“vA»„ KgGézńƳ/îB60² "žÜŸ,¢Cƒ½Ü„L‚S¼¦9¾×Â^S!6EŠÕ´`½,u-„¢+ Ý´ü•}é§O}9ú opZÐιÇo±LȇkA¯q[fÃ'ã¡`%!ÃÒÙQºX1Áx@,"õô_4ÊYú&‚û†PñŠD¯+!û¸^SˆQzMÛCbu|ϧF÷3Ú1•EÃŽH2-¬$dX:;J+&4òâil»HMBÄ+{ËIIòšB ÒkÚ>š&V © V2,¥‹{  é+Ÿâ5…pA½‡ÿ!` Zé5m/"Vñü !“¡`%!ÃÒÙQX1BÚ€xM!L DÆ‹úÍõš"Ü—^Óî b„tÐ.$!ÃÒÙQX1‘40t˜„½¦d«„äƒv! –ÎŽÒ–Š PPT•&¨Â ’˜Üƒ!Õ¤*®]»–è5ÅR2â5Å~„«„䇂•„ KgGizÅ¡Šé÷1ã-ׄ+ˆTˆULV…DáJŠÂãìÙ³#^Sl¯)!ã X%d:(XIȰtv”¦VLð¦by–=ÍöKïj5ÈìÂw>£Ô<ÍN’×k /)½¦¤((V ™ V2,¥i“xúàQͺH:)>’†8¯)½¦¤h(V ) V2,¥IEÇ8J„¤Ò³ðlKH6®g˜p77^QñšÂ[ŠºÞSñšB˜ÒkJÊ€b•â `%!ÃÒÙQšP1AýÊKE!ƒ±ÄèLøñ QÇi/žðŒŠ×uˆë5…h ×”TÅ*!ÅBÁJB†¥³£„^1=ýVäQÅ,µ¯þ‘ÝH‚åÑW£ŽŒ/æ¸âfC¯) ŠUBЇ‚•„ KgG µb’PSˆUˆVÒ0ž ­$|°Vé8¯)„)Ä!¡@±JH9P°’aéì(¡VLª¬ôÒ5>»ð€‘/^SˆQ×kŠuNÅk KHè@D$&]s:¨PgcøþÆ% H "5$áøj€ß#ýÇg¿nÊ-Å*!ÅCÁJB†¥³£„Z1Qì’×k !J¯)qA„D`ÖÏO¼°/B}áúè•ÑmH8_–zݬr.tdºÛ1n^þÊ>Hœ”üP°’aéì(¬˜i6I^SüO¯i7O¤ˆEˆ¸O~yXì!!tß5t² lã/&ßûú·÷ïÂ[î7‹`ÅqØAJÈ>´ IȰtvVL„4ñšB€Bˆ"Œï/ªxM!\é5íð˜BxþðSûbT¼Ž¿öHÄÿƒ}q×D\±Z$Èä×?zfì=ò Þg®/MºíB2,…!áÑ Ã\¼¦åÅ»*^S„úÒkJx!².»" ïÞtÈ”xká™E>BèK¸±x¢EÈBàri5Òfh’aéì(¬˜©zM‰Ä'„ÇaFˆX­ë@'�žÖ�‡u=Øð^Ò6h’aéì(¬˜HÀ„÷¢  Ó$¯)–“¯)é(÷=Ŭ»C2©þrY¨úÅjìT m†v! –ÎŽRuÅ„iˆB� v1Ô›:¶ÎçÚµk¯é=÷Ü3ä5Ågñšb?Ò-¾£…ªtÔˆ·îôÿ2n’�E„*VIøS¥î{F©ãúܳ›&±÷¾R_ø¦R‡ŸTêÂM»1†Á~t›÷gvc¼ó®R§^Qê†ý< iìÂKú\·=¯ÔÕ´÷ ÷»ô†R'u¾žÜ¶Ûâpö;Û› Lnè¼<¥Û“w ,K¡CÁÚQª¬&0Ð L8‘ñÿ·ŸjžÇB¼¦ðÒkJâ@}1*uîéÈ{ŠYmÛÒIS4m«xÞFŒzŽÐÆøY-ð¤ƒG’/|®h!è~—þœVp‘U°º×7N°ºû(X·ô}Þµ¡§¯»Ê¬î³'XÝý¦¬~Y@ºMç‘+è÷ôñïr÷)¸¡*®èrz×—t9(èù‡kG©B°ŠXíJè'ÉŒ84Y×…¬‚$¯)þÒkJ’€XE™FÝÑÊκɴճ*aĬ2¡ÓÇžUê3/Gžu’mŸÕ†ù8Qøþ»õï´ +XˆÖ‚ÄÑUˆ•—Šõ°•eÂx›.÷c=¬›ExX!æÇžúYœýŽýÜPP>œÅãÝ`(X;JÙ‚Å*I :xáëœÌžQñšâ-^SÔôš’´°ÞKO—€Ñ6>öZäm‡q.õÅëxŒè# á5ûBM‘ ©«ÆìW€`ÝÓeèøùÉçËJÝ‚Uö+$$XçÍIýLÏ©ŸÁÞÈé‰ }ç´`ÍÆÞT(X;J™‚ ²LB£¤EÊMÙ¢ÞPxEÅkŠ1¦x\¯)„)½¦„”O—ĪÚGtÖ‰x…ÿcÛNm˜ÃC™î{ᲂ:]ÚRê°ÎOä)„ä}ºh½í¦Þ×bèœ>Æ’né6çÔ3Z$YƃžÕ¢rèŽD°®}G©‡ð?öÓÇ=ç ¯XÁêÿ°Þç’{ðLX®Þoæªá‡N‹è‹ ÉÅ}b¬¨l?¦‡°bcê¿´ø1cIõý\xIï£ïíœÎ«¤q¸IÇ‚Uç›{¯'õyÜ[M¬CÇ×ÒŸÓˆ3sï~~[p®‡b„±{®Û¾¤Ÿ©·Ïý;)#Wõÿ¸W,^Ñ÷xLç—\ëY½Ücܳp·I¹Ã5<¦óðÃú<WõùåzP6â¿M¾%Üg› `í(e Öç®*õ‘š=e¤¹ˆhýÕ¯Ù SB¯))ˆŒ·æØÓbé²XõAûÊ·¢¶u TW²Â㼬ð8Þ­ßOûfmà_²†=ÄòÒˆ ëu3Aïs¿6ôèÐÿ¯áwØ®“+XÇÏb„¨Þ6`z_ a†ÐF«þ A(¿ƒ ¼¿'>’<‡öXþµˆ¢û´Æ;«/ŸJ Ñ…{þsŽ îéøe¥ÞÖûCÔC¤òι¾qÇ“<!ê . ÙuÅ^œ`}Go;&¿Óç|Q_Sœ¨C®-.¯Î]Íc¹v¹œ[Ä5ž%"#¤Œ~^ç÷Gy~X— <?Ó‘à„¥ÇÝ£)Oz›{M² yvKß—Œ¯Å±ÎékÁoßÿN$„cÇOò&· ÖŽR†`E㊗ =Ä$+7ÕÎÚ)5§ŸË̵¹+Õ[VÞSkKÇTo«¹3{¼úGÑ5˜E8­—o’×뜊×럒„iŠ÷ Ã(X‹ƒbu<œ9:k˜ûáW´XaqæzE Œymì'%•Éx\±5ñxñ°ºBZÄ’{,_°â|?áÄßE®1N°ÉwþoÞgÙǽV›§¸Çÿƒµ Åë7rŽ˜¼w¼qyfD£_î±F+Î÷ìp¾ÆÈs_äášïöÊéPИß;ç’<vŸ+í~žùe#./FŽ™p"l“ž‹Mmƒ‚µ£-XE¬Ò³š½í¾Zœ]Vk7þDmõŽªùÞfΊgOݸtI½ÚðZK<­þhNñšBˆú^SSÂ4‚I^®ê²o*Â3%Då‘Å*É‹ñp:O÷§^Š/úû ¯í‡g‚5îÓ ÖIÇÓø¢Äs_¹á ~J#¢ÎcD`éºë!çZ]Þz<ºúxøMÁêâO®!I„ûçñïMžöI ×àã{M¼¢CÏÊb®Ç{Žþ3K*#q¿þ½O#X˧}.þþmƒ‚µ£)X)V§E‹Ìµe53#‚õˆ:0ßS[q­U"öú¹âÙ"Í,­5ºòzñÊ·Ô?ùÿSýÝ?VŸú¥E¯))Ôcðê£.û—ºág8f9àÝ¥X%y£]¼¬�§ãÆ»'© þûô>[º˜ kÜÇ žXA0éxš¼‚Õ—iH“_ôÁûì‹(§‰±¦—¾³/Žò Ö¤ãM+XÍg?_³b¯yàeÕÇŠíàÐ $áÏÇôuIˆ6>KÈ/H±e@ãï—#ÇÔÇÈ#XãÊt› `í(E VŠÕ"ø ©®`5ÿUI©ØÛ¹¨>»ô uoS5Å)”ä5…@ýgw?¨~ò‹×ÔÚù2 \R8ð¦>úê¾7žU†a–Åj9 Ì^¼j?´m›PRxYµaúØ0Ƹ§'X]Ñá V#Øœc§Áu#èca-Ysú<]=#GGå¬ãŽ—J°:ùæß›<×;š ¥ÅqpNÿ:\0nõßékÇþȃ“ºMp—JIy&ûË9ãòbä˜1yüc °ÏÅß¿mP°v”¢ëëÆ‚buZЬvüêæ%Õ›?ä8Vª„wÂÆ+Ê"þ‡1 ÑJ¯))ŒEE½ã×éM­ŠÕòÀxW¬íŠŽ¬gÝö†ÅèÇd<Ç]áF,ň.!pˆq‚ÕŸŒø‚UÎ72­Y²ü&Q°jD_Ð×xÖ{#×êÜcÁ:îxc«þ=:\ï¥ì78¯œù¨« ÙÀëí?¿Däšt>ÿ’>gÒï ¾ïr®;Ž‘2bIÚnîiB‡GšrÌoݼl>ùçn¬¥(ÁJoDâ5…0…¡Š0^ñšÊXSL’Dã•Ô {ŽM­ŠÕòHEÇ‹-€‚V"BÆ7@¶[€NYfáenX1'XÅ[8 iާwçÏ,¡¥½ žOˆ¯ÁÌÁúøÆ[¬;”Ü}|ìõ‰?@q÷(×j„´þN–™Á=ÏÿãAãµ6"To¬Î=ˆhw¼«¨?ëýäzüY‚?¬óHfÔ2sܬº&_œäO¼5 ¹Îq¢Nî{$éû½ÿ[ÑïDpÆG®!êøNBŠå³Á>¿Ã/Ež[ìc– ²ç2eÏîƒóbi! ÇŠ½o»ÿ¸2Ñ(X;JQ‚•Ä5µ42éÒžÚÝXUsŽXoéMµÝ?®fûjÛÔ†oªþâœZì¿9ZU½¦„$¤Ã*‹XÝÛ9¯–çfÔ™EÕÛçï˜�êÕCÍîüË<®'­ñŽ™6v,':íò¸wÎùß"cbé›ð Ya`’Þ.ÂK„Èà;{ìqÇs×ÄÄ„CîZ¡îú›"(ÇÖÉõ"ŠÈÃö¸µ?} Œ|ïÛú˜±âL_³YrGŸ ÷€5_PÓ×ü—>öÙAG€¤Jº‡1ÇsסÅú·X¿T~{R_››¾Xt¯}hV} ¾·5 "šGD¸ƒû¬G’Ηs›ÃÛFžA̳”ei\®hÑiö±÷r׆2£·›<±y}ÛW”zL [s¾1÷í{qÛ UKG¡` ¸em¬׮]Kôšb)ñšb?B‘z"Sg•©×æÕÒÚ{jo«§æ§Š6¹¦.mÔÛ¡W'}—‰ÄÚ*\»ˆ 7>¿/¶‹¢ëv!ë¹?´\´½p©øüND«/ˆ€ØÏêqn"T-…‚•ŒÂ^Ó³gÏŽxM±M¼¦„A‘K¬xEgn߬ƒ»,`<ÿí¦ÎŠRt¼®â ×¶q핽ˆ•E—íBÓ ð¬~WòS¿+!ƒ`Å$Qw=¯ËCå T¨Z: +®×^RzM !YAG–+Ns‹UM$R]ÁšWlÞT;ë§ÕÒ⽪¿U™©4–1®ç´à¡pm6ŠI‚ÜÐÚiè²](ã—ýPeæûFê\2a×`)žZ|—7¸ÍPµt Öîç5E¢×”4„:®¼ÌI”ê�¢í Dêêêjn± ¬vüêæ¦>FÃ'±+™œ ÞVR¨—ÊîÀøÎS¯ãýëº]ˆ¼tÇÙšq£¯×!†¤±Ô>ØïÆTwÀ³*Pµt Ööo(¼¢â5…·TŒIñšB˜¶Åk ¯é&0á)BÃŽGŽÑ«t‚‰`Eúëý¯OW·L&w‡ÖòÀòBXöiMv! –ΎŠ©~0k&Äã4@xÂ3*^S<W×k c²í^S„·ÑSÐ=0.OÂÙiQè±* cù—°ÁøÓCû‚U¼£»ëjenÖΠ®ÔÞv_-ÎWýmÌ„âMHGHM Êãç_ˆ:ÑþÞÓJýÇ+ö‹€w—Paéì(i*&ô¾¢â…aHŠBRBrÓÐ5¯i` À8@˜i?¨—°Æ$ž9þÒKTn8°ŸP·å­b—µ¡`%ãÖKMøÀ{KH¨°tv”4Ó¿~I©Å‹4‹žO×°s:€ã¼¦¦»\€ˆÕÿÇ1ŒmG¼ªHìH«? h¨¿ºØyFº‰ÔKªMŽøÀûKH¨°tv”IÆ…¡â嘰â€cÎ5îþí¿ý·FŒº^S̲)^Ó¼“—t „Ãh`KûÀ3ýÍM¥~è)zUCBÂ)RIA=„1ªâUmú’Ax— –ÎŽ2®b’KŽ +xCaÌýÕ¿úWM¾û b•^Óé¡€ö&MrA&#cÂÐñõoÛ$èð’„0IèC½ã¦¸º)O’h7Iœ$¹&Öyáƒ÷ØdLª„N}ØJm‰øÀûKH¨°tv”¤Š F?*_x1ºŽ„ç"APб%¡º’⼦nÂ>ùÈGÔ_ü‹1öûqÉ=Î-×k’ë£6ÆŒ¤ùü—«ÑóD'½ªÃÀ›éÖM"B%R u“ÔRoøuGÑuˆ[oJB‡œÛ­?ã®UÄ­\#ë¶zÃ;¸ü¾ƒ�m ƧŠWµ1µ>µÍuß¶ý\xƒàO•º óõä3Ju:.½2ymÒàÐ÷rŸ¾ãú~Ú2¼~ï}¥¾ðM¥',¹Çýìzwº< `í(I Cx3º€|bL!¼ <bD‰a%!a×CJ ö…Áæjã&^òÏã~r½Hr,×½^¹Ö.…êa<+ ,¤¹ Óáù?°: ¼"Jñ^K™x2}×T¯¥_ÇIý&u›[¯a:zg«Cƒþùz·ëUˆuYB ©°I•´ 9û%-Îô±µˆ€€ÕŸ=iÏá¦Åìû7õ5XQ;²^§Ÿð}ŒKƒƒƒ5GïÓç•ýOjò½ßT=§SÄš®ÓpÁY •‚50tÞŸÕBÕ<Ÿ ‚ùpN?×cºœ%ɉP°v�>^Qê#ºAjÛ¸U6î »“ ¾ªÄÎã ×P”÷Š{W¼."Âqï]0ú0–èg9aX£g§kÃD°á½•z PòÎJÕ5Äk+õê4éô“:\:çHy ^…híÚŒìþ¤J…Ý¿6öÏivJ‹OWÌ@˜Apž±«‹öaKÏ {E �_Øåkû‚wH kÞ×bÕËÙ;ûØžºM‹Šº+ˆ½/"Z³V`Ë{^ñNÁÚQ|ÁŠ^ST¾j74”$ƒFM— >¡+F„êº2åxV*è°Â»èÖUøKñ•²¨Ïon}†HtÊu)º¤ $òá1-ˆÚÚ‘2'Uºª ÷ûñ¦’ZhÞ¥›oÔcˆ[—q¡›§´ðÅ÷÷iA*fŒØøsÿ×ÿ¬>ù+™LRšÄžÖÇÏkáš#Rƒ‚µ£ø‚aÀqi0D`À0¡Á—×èƒ''Îèkâ82ôŠ£ÁãxV®@Å;†¨ñœ²®*·>C†º ù|Gþ7±. „é‹€k+¥OªdCE}éž>Ï]úœ±¡¯NH°0I؉7u .t2Þ1-Š}ÑpàÀ‘t!ÁúÚמ‹ãêtX‹— Îùß×ÿŸÓ×…1Ž[úÍ“Byñ Q>¬Eó…ÍáûŠ7éžçŠÎ›Á5‰wÚ½N}¿÷ËëÐÇϵÜÇ „ÚñRŸý޳Ÿ}Œ/GçÀï¯èû½_ï+ßÃs}Vo÷; ÜûEBHö}Nß?†k·yø¢Þï6ý›]wy È«ûí±áE¿ªËÌC6¾?ç<¿cú÷ܸfŒ–k󿱂u\~:à·q2“ `í(®`mÊ604\ƒOD•|4DŠy)aÔbô¡3 i–Ë3‘:‘5W ¢3ã/«Å°R—±£ ?‹…QÚ6ÑZʤJ1˜1¨Zü\ÐBkmô#lÒœ_‹†IÕLôDêãɘCÙžZ+'õ+ðŽ®]˜ˆ.Úƒ±ˆú3Æà°õËõ߯ï‚é°þÿ’'zãuÓ¿‘Ðè÷µ@<é^³{LIÞyξ݇x•!ì~SD ä©+°ôß ZKXô@äÙ}Üq´Çµ`3"1æ8ÈÿA^ØcŠsÇ»Ít"èk‡6Ÿõ_ã¨÷îí>ûŒ$ŸÆŠ=½ßÙg÷-ù1(öùI^KÉa}&ì9Ä#/þ9G«½÷¤ütI,û `í(R1I(p¨cÅ`ØÁЪ+PIµˆÑçz³ñ9tã›KݪN5S £pñ;Ð Šm$m­¥Lª”€š1ƼA‹ LP#×b™6ò(òÈ"X]oî}¯â 3ßéã|ï÷ÏØo“‰½n+°ã_åœI÷碿‡ôÑÈ}Å3á<FLy‚È?„ÚOÈõZD`J>Åå­¿ ç“©ÏézXEîÏ^³¿þ¹³Üïx^È-Ž-V3q•{ßú8ðKhº¹^7ïügkñkšü$OËl¬EkˆÆ< 0$$”«I^½. X÷9‰÷54Ð)C+) _¤¢S ^TŽlèpÃóBçÅkvÚ ZýI•ªF2⡊ÁÍŒ UCˆÈÑûŒ}, 55éwß ›u±ÇŠ›˜iH$Ê9'Üñâ_[Ù‚U>Ç%“qy›t„ͺaÑ‚/X“î7•èO¸ß!d}¬û^Óû¹^mû/–“¸¢¯Q–' Ö4ù)$æÁ(X; +ñ¬!̤'~6×ð¬|Ÿi3Rg‰'¢‡jÍ xŽ¬Ç²!¢µ¬ðÙ²€í¡-†5:ï+±‡Ò®þXÐ8Q5„œkÌ>/‰q–&´ÐIœ'ÁÛ†®#Ãý%yáFî+î˜ çI#X±OÜ}¸ÄåmÜuÉVl7ãX‘è Ö¤û¹—¸{‹Ûà ×^Ó`6hûü& Vé(¿„ðì˜gî Ö4ù)¸y’ ÖŽ"Ö:q "‡"µ=¸â aÃô6……ObR¤(Ï,ÛíGê1WtHp¦ñˆhmÊ:­¸ÞR'Uš€oðТŸXÉ ÷“±­c”‡ŒAt…nÒÄJßsòM#¦þ}’`2×!"qÌ~>u VóY‹²¤qµ .o㶈D™ÈÈÍë$ëHÛ{ˆ¾¸{‹Û6Oñš°å¿—ò2˜UÚŠÜI‚5M~ ô°’LÔ)XÑð#lNz°9¾«½¸^(„L2ÔŽ�ŒCtGS€xa9î.n›ËNŠxšÐ …È2R¥:¢ÌŒ'´@8õåa/ª`~3Aˆ¹È„;øLÂ09NœõÏY›($’Î#÷dV ‚hä<qÇL8OÁ*¢ aÖkî½hÁõÄþ7î^ýmÏióÕ}VF€;ç¨ ×,ù0Šqû%ýÖEç¡7ì¹,ÈÉ_“7úz|Oðû¨Å¦þíHÞÙëš$XÓä§ ûúeh¬¥jÁê{&Ø[Ý-ð¬%Ô‰á“Ý!xM™¹i*Dp;..Ü<üI•êôûÂf€þR1&LS # -±R‹Y’â×jĆ>ÖÐDNú7©wÃŽ-GÈŒ ¿Ã,³øýûãwôq0 °|–{+¬dÖâc—íl¸ú8C!­Ðr^7Ïœkxöôï'ZïçŠrj® õPr~'¿qó“a›ûÈuƒ-ý<>ìxXn½Ÿ>Ù†å{ÌïtB'Âà3ˆËøûõÁïÎ;Ï\ï‡Yœeb(™xèžq-¶³AÊ“¹?}^Y¦×ÕŠZ÷Y òXï;)?…IJ? ÖŽR•`…‡† ?zS ¼S"ЉAáÚ09±ÐÃ]¡Ê2J|Ю¡\H»ÆŽŒ°©cR¥‰X£Ä›©x„C´™uGÅð×ûºSBiÂÀKži‘⯟ LH0ÄÈúüö7³ŸéÅîïƒks'k2cí…‰÷L¾˜cpg-†�Ä:¬æpÏažÈú ½ÿÐyt:«Eš¿<ËÆ+élä¹#Ȱ}àÔÛã~#Ö݆¼¼ª#ùèz.Gž‘#>‡&ÔÒ×|Ÿ>ŽˆÕØ<üc½¿{oØ—¯¶ü¸ù9Ãj»¬þk–)ÒÛeUéà0kÛÆ<‹ OÊOoàÏ�kG)[°ŠP•žh6èÄ¢@:3( Ú<ªÁ‹ ÀcF¡JÒ‚ò!•í\xÔ6©RJàY”åDB êÈ;ÒA x½ewÒÂÒÙQʪ˜Ø€“¬ Œ`\ EB»Á˜U„á…Ê;OH^ÜZ–ŸryxK¥+[÷¤J©ø3m¸?¯Ô©m5²[¬¤TtyGèóкµ`éì(eTL— ƒ Ží!Y‘0LŒqå¤6íBŒÇ¼ÆS£ÞB§ ;ØÈ4ˆ‡u‡¿¢3 @?ö¬Ýƒ?©nˆõÎ�‚é‡mÖ+) ]ÎÏm¨‘1ØY`éì(EVL0ò(4HQ¸e 6 Ú˜iÈ_x8B[£Ñ­·(.H‘H¯+½­Å ËæHŠ«O°M¼ªˆèhÊ;2öï¾mû¹&(XIY\xE©‡Þ.’€¥³£U1‰w‚aP¤HP–d D”±2UHµ‡?<ï*:ÖP¶PÆXo‘2@¹‚×"Œ8š„óºbé#ºN‘™Æñ=*¶‡>N>d(XIȰtv�äþš‡ÓVLhŒÅ;QYc¼ÓW úºqíÌ©•]¥nm¨•Yç3ið|¡ŒÁð+CXH¨j–Xi"©?ò´R_xÃn�é©&ä-Õ_˜µuÖ5»²¡n©]µ±2ç|&mnxÖeu¼µxI!N}ÁŠô‹ëQȯ|ƤJ¬ËóƒrJH¨°t¶Œq=ŽÓTL¨õ„;} ¶zGôµÏª…¾ÜÐuµÑ{Xmì†0e)ƒ²=èÌAh0)t–Á‹ÒÉöñ¼Ò±ª{[=5¯ëÛ }µmQ»«ÞFˆ³À2pÛÌ.‰z6k”~'!¾Iéožê,™E¦ƒ‚•„ KgËùÌËJýóuûÁ!oÅ„±9ø-þVx&Ä›ªÅêê)ÕÛ eRxR&~^tÙC8Ù?x†=óE#eðb× Ä*„jYžúqÜÚXQ³ºÎŒ¼©«ª¥Þe]›‘.!e&U—ÁÈ:üõ‡„ù&¥ƒ:ý§”úëîB `%!ÃÒÙb`€£R3óTL2‘D}ãq\ÁzMm÷ïU«/ÅMµ³þ€Z˜‘afN¨Þ¯/êÿgÔüʃêÞ¹Y5ßÛT{»[êüÊ‚š1û,Á+F¥ñ‚ÜXSK3ú7½o¨ï¬-ÛýîT GêcÝ®–ÖØ•[2ö°hÑŠY%ée-– Ûãgó¬  uy·\Ázsûqµ¼º>«{;Õêê[g¡~é}6ú0·êÝ{Hÿí©­=-t·žP+vß™…3js÷†­qò¦ºaêª#ª·õ–Z[º=Úïè‚:Š:qfY­Ý`JÝHYDêšhŰ€».ØH#VÝ„P`2=¨3 –Î<)/kÅT¿X"XïPK§T+g/…™Ú@[ì«ímŒuµaÃfû¬š[8… ゥú‹Úè›[U××ÍøWãùˆÔMuË„ð‰7ƒf Dwÿ謤$¼®HÑ*“zÐËZè¨{B«ºÅ*Ö¥Ôé•G´Ðáø^$,gŽ«þö«ÑXW6mŸ™;¦NÛ¹=]§-êúine]]7ÇCýtéףá³+j•“ïP-ô.;ûÓ§R&áiíq‘&t¶‹/J'¥ ×Ym¬$dX:[ TâIáxY*¦0Ä*Áª ·åójÇuXaºÐYïsHïyB£ñcâݳÞ!m¼]ú.ú_uë—#A+ s\û{÷R+eˆVzY‹uR@Ô=np½1wJ­íÜ´[¬ ª­U5§÷™YZS7ö6Uo~&úßÝl» SS?ÙÿµH]‚Öþ^ê9³Ï-çzXC!„Ž”:@ý:ÉšG¬"¡s¾îú¦éP°’aél)“&;I[1Ifýb¸†›g|¹a¾ð,¬^Ô‚ÖNÒ40Ön©þ1ýý1Õߺ¤z¯2Ô½+'Ôü3ÖÓ!÷ˆêm¾ªÖ–çãÏMjADkQkhÒËÚ.0pý¡—ÃdÃÜP[çWÃfPëZÐw²;Ó0„íæ½äiÝa»pJ­,Ý©îLFgëÉùžÚÜ>¯–çf£ý£ƒ‘@@¹ÄDr]š=øëßVꇞ²bÀä¾Í’0c0É+ –Î"¡7ã&;IS1a&M‚j–Hƒ6ÜO¨þ¶ë¥�bÂð›WK½¾ZÛº¡7ûž ­Ã~Úè[úœÚ0kàiÁºúÂyu¿1áxoî`؈‡„Ôxÿ}Q£ÿÐÜœ6âo¼ñGÏÞŒeŽv‚^Ö2Ù½‘÷_MÙ#`ßßèw:eð¢å¢ÊÙ€ãA'Ù µØs´¼9åqné´ê¯miQéw²›j»|¿~;³>Tž!t_X{@‹\;ôÁ ]8¨Ž.Ü©B‚A:ÝÂè®˸ð]Ø+¾�M“`ë ÎÆïéa V2,-ä?½:yrƒ4ÂéॽxŽ«þÖ7ÔZÿ´Zšé”ƒù ³„ ”Ѹñ`{[ŸS‹s·ë²~p_0ÜxAõŸIé†!ˆ†OÑ8Ñ i«aß[¸•AtÁsUd¸xáìm«µå;uÝrYm­õUoi^—Ócª¿3}Á‹<´Å‹”O¿ßïÔxÖ¸±íÝ’6aB&xS±F+) V2,-¡À㼫`RÅ„0%„Ó5‘™6ç–µxr©3i‰=Ç„Öùeoëµz~ÝŽIŽfƒž$XAÖåHª¬�{;j}U†0 Í«¥þæ”a»2ä!:¦YBÂ&ø–AÝ Ñ*@t~d-^˜º c_a×pÈFy Þ $TX:[*txˆ&1®b‚�(rl !eƒ² £ÏÅVL¨%aà¼}q¢`Mû‘,T#XYw‘&±ê×_m³Ëü«¨kã*ö5ͬ¤(XIȰt¶Œ´Þ¡q¼«] Q"í�eÖõRˆ`5kô®RsÏwâ”êM¬�FÔ¤(’…j+ž?ë.ÒD X»ÐÑ"á¿v᯵ Ï+&^b¨o=P°’aélYÆß«˜ºÒp’vÉÁ\/ž`ׇ–;šÞ%Žc-’"«>Ö3ŸWÏÄ„éßsÏ= ­$í¡ì]Yæâôgõk {…&…+ –Ί?í §If+ìJhi(»2ãæ°`Õì^V½…y®£[ 1‚uw]­ÌÝ¡ŸÇ»j뚱ⷜÿ!HG«™dmñ̈ÇáÀ¨×ü£ i]j{!X/^µH0P°’aéì(Izy›03pXÈd'²">¢ºÙ…1AT³"·�x(ÒÍ”ŠÉg"ª,Í´·ý„:“"$˜‰»¬Íþ3™(X¿óáemÜ"Œ¨†—̸ºF&ªó¿—å{XGM$Œ¥˜ÊžUD±°@ÝJH¨°tv”¤Š _8ë®6‰]rÊ%pêá  Dİ!®ŽºÂ©ÑQÑ•ÊP¹µ±¢fc„iÒv2 êª. ÇÁXUN¦l'IȰtv”¤Š !I]èá- Ö€±‡å˜\¡*‰TÂýêðž :‰Ôët Ã¥ c°9^5LØN’aéì(IS¨–1xôµÍ,œP'æfԙ㪿}3φÏú»h­Ím-çôç;ÔÒéUµ0ƒß<¨Î÷Oª9óû3jswáö×A”5:@|âûb'Jò»Ïàü3wª…£wèï_ –ëž]z@=ˆµbõ¹NŸÄþÆž7æZ’î7‡‰ãUKËgÔÆ[^Þî¦ê/ÍG×;³ V×wÔͤcÅqkC­Ìâ·úø'pœƒj±ÿ¦ÚÛÛVkËö¸zÛBï²Ú•}gO¨Ó.êë×ÛO^õÍ~vÌлþ€yûÛÊ-ÃÏl?‘j `µ$½KƒY«£riê¤ëë)Þ%TûkNê2AÎg»ŸŽ©þŽUƒõ¥Ýú ÿ_sM§Ô£ê'$S×Ä܃¾s¼¹ãjÉ\ãþu›í¶Ž{‰u`L]tÝî;¶ž­¸.Ê;]Hà"$TX:;JRÅn…‰ÈÈÀyW­-Íy⓳ØmÆp›Qs+ëj׌Ÿ²Æ‰ùN­l܈&€Áºœ»bÆ×åZdïMÕ_œ³‚nSõæõyÌ5½¥ú ·Ûÿ­ø5çÂußîÜÃíjV_ãµØk‰¿_qñ½¹—.íhã׎Ÿ5Æ`4Vpf±¯¶÷nªí¾62͸Àònc(#ïz”OCž;yŽÝ•‡tž^‹¶»¿›]Q×çøþz4®t0™Nñ ”=2b™êL¬ß{d)ö»*RHŒ—4¦NŠåÄwéê¸;¢zÍÔ7ÿ›#®眵ïáÞ–züñ-ýV;ø×d;¾†ëS—Ù±ÈV,›íæwYîaRïÖE“êÙ uË\g5uQ^d >!uZýIˆ KgGIª˜Â­°"ƒÄæ ¿½©v6>¯zÆ«h= F°B˜î&üÝzACׄљ"ÓýÞ$ÏÃj¼â½p¯iT°î_·ÿÿ ê­Økñ÷µÇÞ}]m¬=¡ú½Uµrf]íì¹F$Î{PÍ÷6#Ôh¸ßwâ•€1.m~ìšÚ<ÜÙP÷–"¯ŠÝ6²¯ÿ¿x€É>‹’@(ðP^:‰TÖV¬c [ú¡M—ô.!ªbãñÓj @WÔ{—náýž*ÓÑ;mIãa5@42Bqoë õ¸ÌÚ<ášô †kÒþò½¹žhVèýíîaˆ„:P3ZùûÆü?ð.K*·.ÊCWư’0Á{AH¨°tv”¤ŠÉ]$,⌗7¢^ü¹SjmçšÝ¦ š‰‚U<¬ø]BhlÌñ¬÷ÖÌxšìaM6¤ÄÃê_KÜýº"爼¾‡5ò2è_ f^<¬ÉÇfÄXƱÍýRËkÛQˆ±5JGöõÿ7Öyó»*|2v¡ÁðV짬êªbåe¥Î½n?Tˆ<ûˆ}—ÌšÀwª¹åójç&ê´‚Õz'ñ»©^&뙜?©VV±³-O¾&}%N]3fSÿ|… ›ÿm¨°ù]–{H¨cë"ߘÿM^uuQº2K0 ¶“$dX:;JRÅêÂûÆà1ÂC A-Ô"2§î}´§1&iî„Z—uî—ôß¿e¿wÒìµpÄöìÃ�»éŒ=0«æÅpË‚3&ÊŒaŸ,\ß?°çSw¯,ÙëvÓð=¬¬o\Ë7Öãï÷î•¥Ž-7žò¶õÛ¯1ÊÆŒa9oœwÁˆp{¼…uÄì«ÿ¿÷aõÈ"îo^-­œÐç×bù…'ûºièw+Õ[ƒqcúšç>¡N ø³»Â•TÄ*f­šàÖaMz—ô;ñ&Âǫ̃¹¥»ÕÒœ~çï¾W-M|—6ÔMgüç™9µø¨Λ#Þfö£1t]f†$\“©[eì=˜0_g|éܲêoÝpÆÍf»‡¤:eý²ê{uÑÝ+Ÿ˜\Ïn\sư–_e…k “ºÁ{AH¨°tv”¤Š‰KC&“4lZ¯Å5m×ÂsH&ƒå*°Îb„ÚáFÈ$Øö’º¡`%!ÃÒÙQ’*&ôò",‰´Ñ±d& ÂÿšIY!u¬˜LˆkNKV ¯¶cøe±ZX0™ÀÈØÒ(¯®Ý¥ À»Êñ«¤NðÞ*, †óÑç쇌«˜°Ž%½¤i”-VàaýµoØd,˜xééäaÒ¥p`tZÐð'MuÃIÝP°’aél(0œ§'6®b¢—‚4|ev´`æ[x¹èýd>÷ÍzƱ¬cÉú‹4‰²ë.BÒ@ÁJB†¥³¡`ŒØ4KGLª˜Ø€’&Q•‡bÚ÷®+H5þV ¼¬( X——ÐéRKõI+ –ÎR„§gRÅc¡uÁ̸‡™éòÀþº€•rCmõ—£u�%¹ËPØm³w¯¨»ÙÙ25îwƒ4³ VúÎ2_ú ³LD:ö¯efáµ·TÏ`öàƒjaõâ”Ëb„E•a ˆl@¸+™ <¬×™‹²PÖxæé°KÊøk:—ÌP½#õ¥;‹qÚñ¢ë‘=µ»ÕÖfµ³”·¨ª)Ìüs)¹b©sl;IÊ"!¡ÂÒÙ@0–î_nØ9IS1aÆMw‰1†Xå‚K@|BÍ/õÕÖЃ;}uÌÚ€Û<£f«þv$$ÍþƒÉDlÎDËB˜=²±·ÕSó38þ®YšbviMÕ%ZŸuf±¯¶o½©ú‹óji­=³¡ŒV5»&Œ­¿ý”RWitMä+ßRêcÏÖB}öìY3?<œ5E+Ã.[cÖeÞ—¨;¡^H¥*SÔ#{›ª7»Zì¿©nm÷ÕâìðùÈ> 7«yÁ0ÿûónò¡`%!ÃÒÙ@ÐK9íl¥i*¦&4¨µVxvCl¼`‘WE„ä°`ñÆd:"#rà!ÁŒ›þqŒ9o×]ÿŸµÍe¢¤ÊH�LvVÇ„BMyUg5ÊFxK…Ô!X5¦¸S××eƒ®—îUËi;¯RÔ#¦ólP·!Rd®UcEú*̲Yè´âpŠð¡`%!ÃÒÙ0 T!X§%mÅ$ËÜÔ?Ì 5ƒ7rù¼ GÛ‹7ÕÎÚ©Aˆî̵¹{+ònÎàó µÜ»¤ní^V=,Z?sT--ŸZÂÅËþ~( ‰ÑQCm²`Õ8"wT°ZCÏ,nÿ »ÜÌ1Õß¹® Û9ýÿjéôª½ÕùþIþ‹{¼¡÷™Wó½Í(ô΄ùá·C7¦·Q=»H~ìõ6Œ[EÙ¬:œa®uM(Ô4` Ö)îkƒZ]ÌRk&\߬{ÛjmÙ~0ÛÞeýí µÙ[T3ø¼tJõ6nŒÖcÑÑ58ê§¾2).äØzHu×{úÜ÷F[1×qÝÖ‡³÷>¬Y¼C-<òÈÄzÄl›ï©-SÕ$Ì�Êc˜Þÿr8÷út«jÀûOH¨°t6 Œ¡CHð´d©˜êC8Þ=„šÍD¢,V|™±­"øŽ˜þ½Ëê’6±ÿAl{;êÒ¥<ã«"Ñó5l¤Y|ÁjD#én´¢`ݼ¤F°êÌïl¸°¹/kÔšÿ±ÿ;ÃFáàÞƒ‰X;†®á‚ee¸ŽåK®\Ÿ~ 9©ŽúD+âÑèÝÝC­}æ=rÎ{‰÷õ :·>P;—.«=ì?\å%>`#0t]±¼ìGZ¸õCT× ÆÅ§¨G†ëc-ˆ—æ(XP1„å±Ê¨:A=ùSZ¬^ضH°P°’aélE…Õd­˜D´Öæi uÕ HZ„n<~ÚzaaXÝT»¯n¨µó}Õ[YUg6´@Ý}]m¬=¡ú½Uµrf}hÒs,/È›¡4d”%VO€ÞÚXUwŠ×Œ¬^Hðˆ`µB6öÿ÷:,bë‚ámÍÂ­Õ …¤ØaÁº·³¡ï-EÑ!¦®¹¡^ÝxFï÷ÔÊÊÃjcçƒÑzÌüDõÑH•4©“Îsj±¿©6{dž®mô:¼ºŽ!ÁS!e°Kb "…ÞÕf€ºƒPaél˜ð¥(ÏNžŠ©V¡`Œ¥ÛmÈÜ>û‚ÞÔ;£Pá›®'À!7$aL²ÆW"ÏÂÐÄF®çSÜÛ¹¨VŽêcËX1 ö‰ Ž™t)“`݌ĹUµ±{Ý„ÆOºd==&$º¹“.ÕÞqb)*ÒT‡+ª™=؆àšÐ}§ÉA+Xw×ÕÊÜ!µ¼¶­nê2!…nçØh=–ë;ªÏìG…Ä^‡ß9—¢DÂ\³“Ív2vD'a>ˆ®ŒYÄfAT  V2, =•E-©‘·b’1­˜³Zìl»XÆæÀAutqE=¾þ°v‘Gavå¢z^J¿¥»ÕÒܬ6¬Î«µÕjé„]†ÁŒËz@[:îŒÍaL9â3â¦ÚYÀ^’6äú›Ž°Þ¹×` Úk¤¡em ¤1†UoŸ]R+wÇxOf¨…#²ŒWó†{’em<cSÆî"º¬ Œ½ÚCÓ-K/+iRŽ* '¼wúÝ<z\­<þªÚÖ"4z—çÔÊúeÕ_Ä÷ºÎX9¡ë¥Cjå…'Ôê±ê„YfQõ6·Õ†Wí×-90l3ûãÞñ¼_ÇÝ+Ÿ°u•í$qõˆÛ‘æÖÓ\ÖÆ l]™ Øcý9Þ¿9 ^"$TX:Ä?{^©ß}Ó~˜’i*&x'à¥Àbç] mÚ' áM%xídQóŸ,kC²!å-¤P:D9Às°ñ®Ý@…ˆt¼u³#eƒr…ñª•uŽ&ZB§ÞµhŽ.Ò�(XIȰt61‹Zt{ÚŠ 1Œ=4ÆõÏ \Q(ï!7\/x-«þVSGŒÖ ¼",Bž.oÓ\ЂN7„jvQPò@›ˆz ‚µ‹" <íò{¤Z(XIȰt6„¢C‹ª˜ºÞ0“r ˜ U!"ÕNÈDÚˆÔ[ÝíÈ:×1Ɇ0‘fAÁJB†¥³!`FÒ"€"+&y2.¬‹ãtH±ôû}S–®IªBCÂ7QþXîHP^P_¡]ír½±Šy6ŠškƒT + –ÎŽRFÅOÆÒ+Fò€q…(;ðP°ü´D5Ä¡(Pîij_Ëlè¤Q@˜JÊ :>º :Öá]-b%R=¬$dX:;J™“LhBáAÒàvtP$tŒÆ0‡ÐD+@8'Ê#Ë$‰Ãªlçöá$KÍ…‚•„ KgG)»bbƒN&!@oVw‘ðÁg•2ÊPaàA•ÉÙ®‘¶AÁJB†¥³£TU1‰p¥·‚�””–Ü1o!‡B˜`Œ+êMŒ×a-`Rð¸»Ï¿ë¡¿¤P°’aéì(uTL'ýoýîà{&(T‰àŠÖÐà ÝrŒº “ÌÑëÚNð¬ÝÎVzØIÛ¡`%!ÃÒÙQ꬘à­@/5®½Ö/íD¼©RIÏI qLk(Ûâu“zŒ‚¦ÙH…Î<WÔY]]ž†t V2,%„Š Æ<âu¥qÐð ñ,Å ECž¤ADëÜÓÍ­�ž8©Ç(^›ž;¡`%aÃÒÙQB«˜$Ô¡W¯Í†/RaÀã™’ˆÖÏèמV,‘Ñ4âÄ+ß…ð@¤B|ÙÉ@È>¬$dX:;JÈŒ ˆW@bLÐè 1ÌÅ+Ñu‘ qÅåŠãé·”úÐJ{Ýnh ?â¹C=†Î8têPUê%ä»tªÉ³@GŸE:õðk߈:•H;¡`%!ÃÒÙQšR1Å #ˆYÕ‚¼/ªxÁÙ‘°Öm²¸ ‘¯½§Ôág”ú•—Úa$‹WcºQ—¹–ïP± ¯Ñnøõ¶q}vÐ!÷ã”Zy™‚µÍP°’aé ôh–e7µb„M®Ñ'–F_±À¨„„Í!Ï‘÷\{p”‡u–@´’b×ãZ>g7´©ËÄ‹$ï:‡XŸ¥uò í€Û@:=§ðª"ÚQ¤ÝP°’aé ˜G_-ÏnKÅä X}ù@!¯ü|„Á‡m¨“Ùx7ò’r¸rÝþÓb’ÞCü1ñ…w±«‘%È©ïÑ‘†|A;Æ:¿¾þm¥þéóQgQ“&A#ù¡`%!ÃÒ0èÙ„ç¦ ÚZ1ÁXgÐ5úp¯¾Ñ×E£†_yÀ ƒ‚ár¤H’ÞY©Ó¤SI굦{qH¸©Ã%ƒâ½:Ù…úìîK¬ÓºÞ3BB…¥3`à]-+ §KSœÑ'BÆ>ã;$1˜šŒ7¹~¹Ÿ$ƒOî•_qÀÀë‚'Ô¼ëÒ9'õBañ®#á3’ˆZ$z’ʸî¹ä:äú¤~rëc©£Ð†ß‘j@Ç›¬‡Œ1ä¤[à$$TX:¦L˜SŒ! Ñ$F”P0�e›QH0]C¬ £Ê?¾xük3RiðU =Žó"¡ õ†ˆZ¿Þ@rÅ¢ŸÜý~îç~N}ß÷}ßÈöqÇ*É­C¥nbýT?ð¢ŠW•+u¼³„„ Kg `²‘2C Y1¥1ª\Á( 7¹†ZÉ?>Î)çw=% á ze…ð“.òÚê±õÁÕÛªvÝ$©_ž{î9õ?ðêÏÿù?¯~æg~ÆÔE_ûÚ×ÌwœÔ¨ÙÀ“ŠqªHôªvÔ5„„ Kg À³Š°œ²`ÅT-Ìïög ®—öÜ{êÆÚ²š©A°t†Aœ¢þºãŽ;Ôm·Ý¦~ë·~Ët aˆ:Ï V°·©zó3æ|æ{jkÏn'¥€N6tŒ££^UB;…„ Kg ”mü²bªæwû)»“‰ŒG¢RPo¶g,q=‚žSªÇW?öc?f„ê¯üʯ˜!þ>ø[\¤Ç{jmév Ö €Á€‰@;…„ Kg  çóô7ì‡`ÅT-ÌïöÁô÷µ`¥§¢>ð dÝHW|n6Õ VˆP×{zåÊSw!ìW†#@°bü©àzañwúa VBê€v –Î@)s†`ÀŠ©Z˜ßÝ�B‰3×¼F¨Cñ< `›+\«¬˜˜ BbTÂ|‘ \ñÀ÷ª²¯„+~+³‘Cü惂•: BB†¥3PÊ6|Y1U ó»`¦àvìR;¨C›-\ˬŸ©H"LˆNxL¡"d“<©ø^<±øÜÉP°R´SHȰtB a`•i\±bªæw7€8¸0"\?ölô·9^ðâ«+(±ìLœ Äò3øû ¨Ãä3~ïŠÙ$Æ âd(X§ö‡%<ÐN!!ÃÒ 0¦ XË„Sµ0¿»Ä*ÆŸ“0‘1®˜ Ëx„í w—µAº]-­åŸY„ê¤]„ýb%·Ãwøœv¢%ˆUœÇÅ5¸Bx Ö<HÙ†íÀ(’Ú)$dX:cWá(VLÕÂüî0¹køÀ…Îx\‘ÚŒLбˆ¿ãÆ–"Ì÷ÿêÿ¤þ–®¯˜Qó½M͈ßÀãê‚cA|fÇq…ëˆàu—µAšYVk7¨ZÇ¥œ`/ e͉ ¡A;…„ Kg€Tá¥aÅT-ÌoB¤­ËzˆPE݃¿“¼¡ðzB”zcM-Í VM#nµðò–¦\G¿Írmdt¸ cQªè$kîÄb$h§aé xiÊéaÅT-ÌoBH¸^LŒEM+!¢Ô¬±8–ö›š>¤×Õ㼿]"v&vCT€„´s¼*) Ú)$dX:; +¦ja~BÊÄ·?Nt˜'Ÿ|ÒLŒ4øMŒ`5žWŒwÅï†É>çÅñqí¸ ×}ò‹ˆ+ŒM…7ãTöKÊ€v –ΎŠ©Z˜ß„4‡Ð¼ZþL¼Y„*@x.ê§¡ej<Á  qÎ;ü]þI“pí"ž“f0îð¢B¨J¹#¤Lh§aéì(¬˜ª…ùMHó‘†!"šùØkõŒ„°ó…jpx5G~#X“¼žø-¾ß§˜Y~ýûË*ÄÛ�¼« ù%UA;…„ KgGaÅT-ÌoBÚ&jzàr4–PÄ+&Á)[¼B´¹¡³I^Ï´à;:‚'XQ% F½û‚¶Øeip¸Î<¡Î„ôÐN!!ÃÒÙQX1U ó›vñŠYZ%|óÑ⟋ôŽar¢¢Çxb%„Ýúpo«§æu}…: ifimbý…k۾ŠVÁ£›e2©@Yál¾$Th§aéì(¬˜ª…ùMHûyòö'Éï+–*˃?‹nQ" ^K¿4ǃPô×`õÁqp×Þûré먖•'e€òðÜÕáPò¼e²Á;EH¨°tvVLÕÂü&¤{`6Wx\³Pæ:¥²~jÚpbñlN×·ôMYˆpŽÜsÏ=…x§T„†£ÃBê§×#ÁŠI“è]%!C;…„ KgGaÅT-ÌoBÈ$ܰ×4ã5÷Ãw÷Ç›Žǃ·4‹°Äu¤Ù_„pÕcLq¾¢Ã¥Ó€poéøå÷CÂñ—•4Ú)$dX:; +¦ja~w1d I‹Ì´ Ñõ{F-¯ï!ѯÝX¼ ’Ædo© Ä Rpl,KS®þÌÂe/ª„|C¬Âƒþ•oEï>!M…v –ΎŠ©Z˜ß݆,!“ˆX¨«+¯£Ï}3K舣”‚ÇÏã…M>Œýp/uãæ+tÑ^_xNÙ)EÚí2,™%«#bÅT-ÌïnAƒ–Äñ1…ðÜIž@ñØC¨b)W±'ùË/ü‘ú‡¿ú%õ·ý¶z+Á‹p]ÔAø›•¬a¶®ø®›¤kœð`?z%êÈ:Θ¶A;…„ Kg`À©bAVLÕÂüî¬Äb©È±–"ºÎý×7Õžþ†úßù®zðöKœW<y@Ý•ÅC ±Šû« ø&ot[Šô¯¿tCzômõ}ýï Ä>fp^þJ´:‹ é2´SHȰtk '+¦ja~w V"”>›í„`ˆGœßå!Çhs$‰Àƒ·ÞGìó½G–2•eˆ[ÜkU“¹àÚEŒï³s_¾ªÔs¯íªS½Ï«ÿî¯|ØäIÈKâR5´SHȰtÙ* ]VLÕÂüî0’)X»U¼û¥Š£1‚]„ÇyHÝPcW¨¢ì~êËÑß¿s~o �ý4œWD2<Á"ýôI{Iîñè©è/®+-¸§ÁØÞ1àY`æã¢¼Ý„´Ú)$dX: 4kû`~w ßY mÒ ~àI…‚(*Ó‹·¿¬M”f–ÖÔ û&@Â5ä·*à^Üð^WPŽ÷ŒëÁ_HÄ~zø÷÷'‘òÓ׿‰Ý2ñôÓN.EH¡BB†¥30(XÛ ó»[`\'qé"î ~Ü ~ê�B×1­�Ã}dY³ÕÖ¼¿­wfáP&"¤Jh§aé ŒI=×EÁŠ©Z˜ßÝ¡Ž3GÚ+tÊXB%+8?€‹‹¬Hy€g¢¹îüÈ ž'òϳîŽBª„v –ÎÀ `m'ÌïnÁàöªGžM7Œw¦ “ÅïóÎN\7!yÌ ©Ú)$dX:ƒ‚µ0¿»k;hx uÌ#„s‘^MÜã4! è› î¿’É³©Ú)$dX:ƒ‚µ0¿»ƯR°¶_¨N#âÊ!¸¨g¦™dÉÇ›Vü†æÎ „ª+\‹ÌgBB€v –ÎÀ `m'Ìïn!³ ’fÓ‘Q aXtømõÄ*D~[@™½ó‚<ÐN!!ÃÒÛ»¬m…ùÝ-(X› „©+TC…pÂu „&šˆiˆ»¶ ;ñº££�ùß/2é6´SHȰt–³¡`m'ÌïnAÁÚL ª > ° Fš0^× a9mè®äEà‹Ô!± áÚ–ðgÒMh§aé ˆU ÖvÂüî¬Í“¹BµhñW¸n\s¡Êȇ¢ÖQ…ðGØ„€ið禕#B�í2,AÁÚ^˜ß„„G“=cFeÍT Á…Tð°%€C§‰žzBh§aé  ÖöÂü&$ àõÂäDMáÄ= ¸LÁU¤†®K^Ǧ…&݆v –ΎŠ©Z˜ß„Ô „¼]McMžâ÷P&eäŽYôLÆM�BÕ®M.{¤½ÐN!!ÃÒÙQX1U ó›z€X€'Bõž{îi¼X€G¸ O%ꬢÏ-¼Ú]¥M&¤}ÐN!!ÃÒÙQX1U ó›jñ½ZmÇDˆ)î§ ¡SVÕÔ0ì"p•°t„vw=?HÐN!!ÃÒÙQX1U ó›j€˜ƒ'^¬¶U�‘SEH-ò°ˆ5Xã€8+;œ¹I ?ð\EÈ—í9'$ Ú)$dX:; +¦ja~R.YBª»l›á{ƒ¯ÉË2ÀsÁ3ªÂKÜ$šº´i´SHȰtvVLÕÂü&¤à•‚7P¼m4ô!`pUÝÎWæ Ä8>¼ßd·ãÏ -$|h§aéì(¬˜ª…ùMºÇj«wÄ”ýލÞÖv{1ø¡”mâãW«‚©, ÂP.ÒŠ±½ójynF˜YT½Ívëö6Uo^ÿåo¾§¶öìö†€¼iÛl6´SHȰtvVLÕÂü&ÝdOÝX[V3 Vx!¤ àà…j³P)¸×¡û¬@ˆ!o‹\ƒ5ˆ°T^ܽ7Uq^-­½§ö¶zj>Ó=¿§Ö–no¤`D¸¢´a–k.´SHȰtvVLÕÂü&ݤÁê Õ®íŽuå ±*òXĸ„9ãoì9o¬©¥™Û÷k¦²Ô|Á*tõ ÕA;…„ KgGaÅT-Ìïnñ¡'”ºrÝ~è4“+„KÒÌ·â]Âûƒ¿U†ÅVïÑÄý&ÏÔ[®C~‹,¯ÿôŸþÓ`\|ö‰Dª+X£ÿÓÑÁ*à¹t%žT í2,…Sµ0¿»«0^°Âø†(ƒXqñ…*>·äƒÜ+€q½£”/XËÂO}êSæ\’(X³á ×¶N8Fª£Š÷ž¼°tÆ/¿¨Ô¹×í‡aÅT-ÌïnAÁ*Œ¬"J‘`|CÄ@´@¬!ü±íBUÀ}K>üäOþ¤ºýöÛ'„|–'ÄpÞdÏîôà™âør¿nŠ fHðDü÷¦)Âõ»·¢zéëßÞÿßM¤:ð*,AÁÚN˜ßÝ‚•€dÁ *BéCúPã î¢À=»yñÃ?üßˬqžÎ"ñïW¶‚{=´/XÍ=ï©ÝU57³¬Ön\S+‡ÔÌÒšº¡®;ÿËoÛ/X<;LÌ„÷(”È„v"»æG×¢zñ§ž‹þŽKGõ>ø Ò×Ò:Ó5oþþS_Ž¶Ã®BÂñ „!É0x –ÎÀxø÷•úÍMû¡DX1U ó»;\ÝŒ2â.kƒ´Ê 1¶¿}?­­i«¶ƒ@døyÑ‘<>±<!јjöÞ)Á˜]Ü£{Ïñ‚UÅ,k“B°º³)#™}; Z5E‡Ô‹·SDß¶®ãÒ"¿•¡˜å÷YÀqå<ʸVØSø+ ¢öïÿÞ¾@–í]å…Paé ©XˆSµ0¿»Œ%A$xO}¡"©lÏ^¨` bR~Œx›KbI±hÐqáÞ{Uçí ªî„VãÃÌ£ºëé·"ä§×•ú‘§÷E<¤°MV^ÖÇM‘8"pqϰ½ºÞABB…¥30(XÛ ó»;À�BHZW€è€1œ6}ÿ÷ÿ@ Ä%ŒoŒû]–Ô¤Ù„!Hý<¨s½Mä_Ùk°ºàþqNÜwÒlÑd:Çè áúåK¯˜z öèǞݦ?ÿ‚R¿öè»2½¡Mya±‹¼lx –ÎÀ¨ÊØeÅT-ÌïîPU§SÈl¶XYÓ+¯¼b~릯|å+±û¦M¼ø["Ò&wâ)\;<bqûM“F¼´c€ )"ÿàÝsŸË¤tòäÉÜå(MjR'F™àýÑÿõ×8ýÙ§þ؈® Û¦YP…h…À±ÿÓÿ%±Gn¢šv –ÎÀ€`EÅW6¬˜ª…ùݺ"X%Ôb $Š\yWxHã„c\Âõ–%T‘p=YòuU‡ŒOŽ…ÄkOöpE¾ | œLûÌ»Îåo+õ»oFk™`ê® Jݹ9–v –ÎÀ@¥FÁÚ>˜ßÝ Dk[a+" „YH}pmuV×ÛYócÚº âùPeXñ$pÿm¬°òzH%oðÌ(\‹ÏäÉ?ˆ¼°"`=l¨!Ä´SHȰt*¶²+4VLÕÂüîð®¶U°Ša¬¡¶uÖP½Í K~`?tDäÁíÈ-üVDY›€@EXª„¤NÕ<*rfa2Œ</th†~M;…„ Kg€ 7Ž‚µ]0¿» È,k6xQŽCó úT)X!Ò ÐBõ6ƒ¬‚5° ½#£-‚B:xê RQ×às‘娮ûÛh§aé ýRJR&¬˜ª…ùÝ`L¶mQz®¡z}ª¬0ä‘'țɒ …·8 ¡†B»4Y°"´¢ôˆÉWÂJËöÒA¸JxwUï©Ú)$dX:¤Š1p¬˜ª…ùÝ d úwoÙ Çõ †ìS…q q†wb-t² V¤´4¥#£i‚õ&ê‘p_ˆÔ_ÿF=¡¤xïQ&àAG6¡Ì· Œ­*b‡v –Î�©b–QVLÕÂüîåGHhŠѧLÁ ãùã½)¡’Yòû¦™,©iM¬èðB‡õß~*ªG VBš be‰ÂµPþÞÓÑZ¹° QFÊ‚v –Î�‘žÕ2aÅT-Ìïn�c"Ô 5²�ce¶‰FiY‚!’h8~S¼Í «`´/¾oZGFS+€@ùÊ·ì‡@A½€üD9€÷µIïCùŽnW`‘!l=õ–ý²@h§aé ô¨¢R*VLÕÂü&M@<ˆ0D³{o©þ1SÖMšï©­=û•fo«§æå;fŽþ´::³ÿ96Í,«µÎARE ¥EÖÍ:¾3²äò|œø@(4ò!sGÆÞŽÚ8³¤æä¹Î-©3ÛêúÚiufëukcEÍÊwCé ZXyD­mݰÊG“k“|áÊ™…ËGÆ4~& ‡×µ¨!(xç –Î�AåÃY‚ÛŤüÞ7ægÔ|oSe3Ñ )†{î¹gú0ϽMÕ›ŸÑeùvµ´æ ¾º±¦–f©•ë¦ÌZXUçyO­-ÝîÔ=µ»±ªæ—ÖTV©R´`…!ƒ<ݺ¢7ÕÎÆçÔÒîïó¼Z:³®v®?£VÏà½ÞU+sö;/Í,¨•GŸQ[»Ãoÿ´b.«`åe#_(ôMµÝ?®ffUo3ºÖ½‹juáàP‡„Ô3ƒg޼ì«ì§óqym;w½HÁZ.(èèBùÁ_ ×j€×¢áã±Ó† '½ÿ„„�KgGaÅT-©òÛó¬¤> {;}µ¸pBТm_|€=]Ä—Õ¬ÙöÚ:³ªúÛ7£¯nm¨•Y-ÂúJÛ`†½­GÔª/xSP¤`…ñ ŸV¤ímë{ŸÑB²wYKSlØQë« jfH¼ë{ïÑu‚³ ÈþŠZ€Çyî”ZÛ±ùb™FÌ¥Íìƒ{õX.ú-Õ_˜U³+Êu™{<ï¨l ç“ew]­ `nUmxb>-¬Õà/‰SÔ{ÇÞÎyµŒrát„äíî¡áh¦I™$\!åy…+íB2,…SµP°’&0½Øƒð8©õ.©M#ÊŽ¨Þ–XOð¢$šHSö‹¬xoÓ‹4=»¢6†”<ÎÇUG6úÞd!ò*Ïé|˜[Y¯a:1—E°Æ‰:l²é‘ûÕy `çqµ<xÞVÄdž€‹W:æþS’toU€h©6®Ë<¼3™Päû8`ïMÕ_œ7åÁÔÞðƒl\S—6ÞœºÞ ”5®yVš ]HB†¥³£°bª VÒ¦7.!NŽ‘yòlÊ÷1G¸ âqtÅm~Š4³Õ“",ªÅ¾k�¿¥úËŸÛ7¨mÈô°÷Ù"žæ!á6˜K›qct‹{ûÞ°µº¾3Z¿Ë“Á=Ϊ…~¾™fЏ‡¬ÀËåz½º„+Æ=#”…Mâfê’¨ÌG]yêÛ‘¢ßñ(åï Lü—ÇËJ»„ KgGaÅT.‡‚$ ù-ÿÃ0Œ…‚•Ô ÊçTb‚ëNñv {“=!IÇ|L}™ëɽmµ¶<¯wP-¬^T;1·Ø ƱÖްŸRÌ¥ÍÔKquSQbo Z1®·¿éx%O’î¡YVT™Í5¤eiêbÕ]'.rAî$Üwhìû4‘›jgý´ZZ¼Wõ§œØ« Ð.$!ÃÒÙQX1• däq\J4)XIÍL+ö`<+ q…ÇqSmöŽÆ—mSîÝñ™ÓQ«`Ñ:£æ–úÞ$JâMŽó4kb<¬Óй´ùýâ&–*Tìí^V=3îÖ½Þ v™ÄkŠBïa ÃÄ8X–ŽB5”1< ™YØ®øŒwnÒg… VÔ=‡zjsScª°âv«¾#¤"X:; +¦òAO2òÙMØ–+©™´â&cÆ£ˆ¹£jA§QA2f|fN¦»‡aòד7´@_Ô÷å qÉã82¾ÝßL/æÒæGÒ~Óˆ½½­Ï©eOhG¡âº>” —ÆæIÒ¸ÞlLsi€8ýçë‘X}:_ÔrçgáŠPô«W¯šÿñÎáïØ‰ÎL[é Öb†tüõ!åÃÒÙQX1•Oœ—5i ª²_QÞ&B²VÜÄóžZ[¾×NvI”ëXAr]m¬Ò‚Ë›g ¦»‡að.¦¢kùñÁ Ç31 ¼‰ûÞÔè=Oꔲyq ZöÇP€˜K›¸×¸0ÍübO&àòîÕó¨'牾¿Í3væäü3ƒü÷0,A‡åDþû+/EŸI6Ü™…Ý„1¯qå1â ÜLù‘÷ÃLB6;(K¦sdVê–¨.š]ì«íüE©Õ ß –ΎŠ©\/ëXï*!_ìYñä,K3`LäÀÀÛ–àqÌC-‚Õ†߃?6wœ·T<²Ãâ³1—E°Æ‘_ìÙpe¬/{~+º§A¸´ˆrénž`Éž/ª~o)ã#aÕÙ)C°bb›».Dë`vmà2ø±û1SÝ„µ“ˆ]Ö†‚53¿úµ¨,ƒ¤:€`éì(¬˜ªÁõ²&yWIóAƒ VšN.±'^@[ÎG–u1¢dÉiÑÚœƒß˜4§EŒHµüÔ!Xom¬¨YL´´ò„WZt­ö~Ê4®8Çú«?ªzKqþdDň¹4ùï“–®É-öt¹8sòqõÖö†ê¯`-Úè9Ï,¬¨þÆŽ¾õ¾Z<{?!/Vc?{¸iÈ} ì^Õ™^Õ"7çCâ$…djPvÿåFT–Q¦‘ß„„ KgGaÅTð¬Ò»ÚnžÒý'^°L‘b¯.ª¬¨­3«ªÿÖ›j£¿y=alóØßP;{v}Vl‹KØïÑ/ªwÒâÄ\ZÁš$èŠ{uPä= cUéU-7).Mš„‰L‡tÀÌþæ«ì€!ÁBÕ0˜•Hžõ´&F +~#ÂÄTe ,c±ò²ýÐ`Š{ ÏâõÓRä=„^îÒ&?àÅŠ[ƒ„(X!ÑV4yYÖ¸ôë0&¦*SP®ÿòCÛ¦3FB„ ÖÀAåñÂÈ °éÉZ™<¿!¤B/{XÆ¢ ³ƒ)ö â듦`&­`M ½ Q°™ìcHÑFŽó Õul3I]äµñd á2ìNB¦µiàÀkƒ†¹hòVfàÔ©SLL•&”=ü ÊhàÛÐ+]”Ø£§Š`­Ã»GšüÀ>Ia—¡ V¼wè(B9CBç.ò<N¸Ö-XýúŒ‰©ì$m&RZ¤¼B¬âB=NH(äoI% F£\4y 1·ñ%¤J¤ñ „%¢qoEˆ=«Huˆø"îAÈSOÎiòcÜ>u‰½4 |IYsÊ ¶[×=°Í$u‘§ì¹õÞ-tQ´’PÈדÊÀ‚äh€‹&!ÆÆ—ÔÊ^¨åm˜!L+ö\±ŠPÍ:˜ö\òÔ“�ȃ¼îiò÷™´æeÈ‚H^Ç%D(¡ ¥`%]#OÙóë;W´r2&R7ùZcR)hxÑèICŒ/© ”½PËÄj(áŸÓ’WìÁ˜A>¸b¡®žù+Œ¼2êí<¤¬I„.X—~ú÷þ›ZøìçíÞÕÁ6“ÔEž²WˆhÅ;FÑJê$_kL*eñ¢R½f?DCŒ/© ”½PË âËß¶„É“O>iDJÚôÊæ«Fø"á·_úVìþe'¬'Š¿E§ž”ñ_H!tdL¬’gIàûÐkRh°ŸàõÇ¸êª o¶™¤.ò”½¤úέ„ÔEöÖ˜TB‹^2#!ÆÆ—ÔÊ^ˆå®¬ýºÀL±'iÓ§~é_©î¿7" þ—ÿ׿ýMéÚµköަ#O=ézûÆy™/^¼X˜°òc’`Å>I4A°‚q¡Á~‚ñýÝq®±E‡>²Í$u‘§ì«ïD´†5BºIöÖ˜T&uAEQ$y 16¾¤.PöB,wm¿šöI¡˜ãƯÞsÏ=F�}ô£5ÏÕOr¡tIé{, åÃlï÷c÷«:½ýöÛöŽF·+€`;fˆ ëHºùŸ&A¤B¸â/Ê-+iyÊžü&‰ª"‰#»j!•ƒJ +z¸ŠbRÅ_R({!–;¶¶Œ_Í ü$±Š4γñ„ç—~ðÐîÕLpß~^$á AÜw]B}ܬu€åuЩ!yƒÿÓ’648.ýðSŶ±�רf’ªÉSöä7„„KgC€qX䚆y*&6¾¤.PöB+wÒ‘Ôµ) ó ~7MZtâ ÏÔO! §¬Hyð“vê'Ü‹ gN Ι´kUàü÷ß¿î~ždòYBƒÝôõÆ¡ãúAõu×[ª¿0;ÈÃÙ• uKíª•9çóð~3Kkê†ÙFÚ@ž²'¿!$DX:BÑãXóTLy*@BŠ�e/´rWF¨~褫HiBÇ Pð\%ý…¿ðÔ§>õ©±ã-C&I(ëÐpï_D[•½ÈIªòâ—7åðã¼ÿ~ú«O*õè«ö‡ƒëuÔ]{[=5<\諨ÿhOín<¬z^Üé«…³j¡_`8©<eO~CHˆ°t6Çh\‹"OÅTgãKº Ê^h完ÉÐBbõ#)Ä*ÄBZ –ðl‘~ë·~Ë56xýBËšŒŒËq!ãrïn+ ÷6Uo~&Úw¾§¶öìö)À±’Ö`­’8Ñ:nöâq¤ þ-V?ùeû£À=€:ê®[+jVŸ?ò¦B¬>¨–z—ÕpÔ󞺱¶¬fQ½­„P�°{YõïVk7 (p¤ò”=ù !!ÂÒÙ$ܬ¨°¥<S/é6({!–»4žÄ6V¬"AÈG| ¶zG̳;`Ã{&a ®' b!áÿÕ8Ü¥lü4n<¯;©Ó÷|Ï÷¨ßù߱ߌã=µ¶t{!‚ùŠs‡�®åŽ;îä–XÊ˸ÐàïsþGÙ. ÉÛºëÍíÇÕòêº#Vo¨ÍÞ¢ª6¯mYÚÛ¹¨VÚüŸQó½—ÕöÆçÔÒ:I"/ìè>›Zö’ÐÈSöä7„„Kgƒø§Ï+õÅ7í‡)ÉS1å©�ÓÃ17$<ov”ÔÄXZ±Š„h}&{pàM„w-Œm„·UÂdC®˜):./ÆÍ"{CÙÆý#zÜl½û'X‘÷y½˜E‚çŠë@>¸žÖq³§aRhð?z¦‚uéuzåµ¹+…å¦Úî×ïä!µ²ñ²iOM[º÷¦ê/j!:·ªÖ7N«yygMȰ¦IûàÈSöä7„„KgGÉS1•ÝørÌ Ie‚µzÆy“Ò°×9eÈá ¬0[,„+MÕ“*Å僛’€—ð_ÜÊùd‘Vœ`•:qŪ�áïó´$…ÿø¥îÔbÿ—¹¶dÙmæ8D°˜;¥ÖvnÚ­škji&êð½¾ÝW‹3·«¥µwí{êüoÊ—ûþþIÂ>ö¸$(ò”=ù !!ÂÒÙQòTLe7¾sC’@Ù£`­ž¬ÞÕÑñ«ÅV¢N<pø›8Ö³Bâ–²ñSÒLÁ>°“dq‚çKçÕ-‡8±*Õ)á‡/eÿ™`æ}Ù>ifë<”Ýf&#HÃj<êžU ½ÇUÏ„öSýë6šé˜ztã‹jynÆF0¹eM"žü}Hˆä){ò›< £2m=GHò—NÒhòTLe7¾sC’À³£`­!˜\J ûqiüªP¬` tÜ šê®0ÒÒÌšœÖƒ‡û‚gqü23Å VˆUäcŒ«E#¡Áøû©/+µúŠýB#³}ãûÑò;e·™ÉÜR;ýj±ÿæh[g=¬掫%´‹3sjáôEµi„gÔ܉jaFÿ]XV½õ/E“|Í-¨åþ+ê­¸}ü(yÊžü&ŸÑmÄÝ—ìBJ é$&OÅTvãË17$ ”= Özè’™pÝIkÜ4<~”#XˆLÌãNÐT%®‡n\7S°Ä*î÷Oq‚b¼8.‡¬buoç¼ñè˜YT½Í”>=gFåïýù'ÕO?MZˆçá{‚:,e3EM¦Vv›IHyÊžü&x§âÞ-BŠ"é$&OÅTvãË17$ ”=}õAú7Î+õ:‰sÓ(å VˆUˆ ˆ=x “_q$-eã§q3Ç!ëùt—µAšYžjØò«jïtfϪétœ×uø{Q8k¦:|XÜCŒ&= ˆT×[„h-»Í$$‰<eO~“L0—µ®#$-Ó•NÒXòTLå6¾sC’AÙ£ÑW?"Ð^üÖh˜ð/®Û¸ËÚ ¡ãhÄ[8`|FÈkY4ÁãìÞÿ¸4n¦à80ñò¬ìÉ¥pŽ*„½Y¬Óa•¨-ÈÒù1,Xñ,Æy€ ReL2„§Aù Xw‘ªÉSöä7y¹x5zoŠŠP ÄeºÒIKžŠ©ÜÆ—cnH2({4úêE&¯q{Ð!Ú>öl´=KØk@ôA¡ìàoÑâ/í¸^IYØž<S~ §5P³K¬j"‘ê Ö,ù§¥¬Ãøžf2¦rÛLB’ÉSöЍðÎŒ !dzªk­HPä©˜Øø’º@Ùc¹«x¥`ˆ Åy¨`Ô—¹žå4@¨Bü9A“Œ×Ê’²Ží‚ÀÃ5—²‹ãB@VA^± ê¬À]Ò c•óÀ6“ÔEž²—Ç.ôvOÈ4L_:I#ÉS1±ñ%u²Ww¹C˜SK_4ñ&†æEÍD“Ì, ñ4ÍMŸÈ f÷•±ãRžµ>q“[U­Á:X5œt “Ï/Î6“ÔEž²—Ç.ôA‰w†¢™¾t’F’§bbãKêe¯îr×Õ†XÆjbüj[!(3 CT–Lq ¯D-–{ø¤Þž·³#q¦)Á1Ë^ƒuj±j€è<´/XøÄ:Ý«jÎL:uMm¬²ó`nù_~›_°tN䌉mfQ`ÈÐ'ÔBÿuý÷˜Î×hÉ:’Lž²—Ç.ô‘è“P#nHs™¾t’Ú@oÞJ!OÅÄÆ—ÔÊ^ÝåÆjCÄXÏã! ñ2ÂëZÄÌÂ"jŠ¡»¸¾¢Çà–½k1b5btY›‚µÀ•!RáIÇóEÇMÚv—mæ$ðϨÞ2Ôý˜LñPÁªËÄg?§6:6Pž²'¿™¼#yÃè I¢˜ÒIjazy:ÏS1±ñ%u²Wg¹“^ã6жqÈ:£¨kÚ Dá=÷ÜcÊV^qˆ¼Ê:#ppM¸¾"P/k Ö"ÅjH Ã Ï‘iê¶™0KÝ©V RÝÿÇ’M°îa)¼ƒ+¬)ßL Þ“¼¶)!IS:I- Älîiû!#y*¦Î6¾;}µ ïýÀB_™¨>|–ÿKç-Õ_ø„êït¬µõ@Ù«³Ü=öZ4n—€WIÆïe0¨©@¨Bd¡¼áo– àuC^•á…‡�,z&Ê"'´U¬ hwñœ‘&…y×ÒfÞÚP+³ð(UK'æõ5ŒfßßÛVkËø óAµÐ»¬veßÙêôƒ‹jÛO^õÍ~vuSí¬? 0Sÿ`Û>ƒõÓý4ÔFêc¬Rsö»™…3js7òŒüîÀ¬:²pÄsöÞ‡Õ#‹XÊ.Ú‰TÖy;ó¿Þn¼î¯èvrVï3§ï7ìÿÇTë¢ZgÞüþ˜úíŸQ«fi<¹†{ÅyX¸FP‡`ÅPˆ2:îH·)¦t’Úø-XóŒÊS1å©�Û‚i”+©Äe¯Îr‡Æ÷?^±:‚x“š<ÑR^ ºd‚¦´žHë[V~=ùä“FÞ)Üg‘´]¬ X¶#ÍdLuµ™¦½2Bîz´¾ùPÛe×<·Û"Á‰õϯEÛÝßÍ®¨k˜ô*ZÝŒ!ž"´Ú`&ÑÂZê·¬0„ÈÔòÍý߈Ò9}¨õ›ú3:no¬+ëú¿(܈c÷÷¦“9:‡¹?ÜÇ-Œg¾#ú ¿cìlÓAça ò”=ùÍ´ÈûAH‘S:Im ì"O¸^žŠ©®Æ7Lƒ4Ô`‘*AÙ««ÜI8pW¼Œ@¼…‹ÔåEà!Àü š’Ï[™c· !\§÷U”q*tE¬ xGð~à™£ Ž{Oêj3÷EÚpÛµ·³¡ï-EžNWl¹ûúÿ¿e#ŒIDe„Ùoè{›üöroGm<~Z-g:Á:»²¡¢lõë~H°9?&Õº9I°âð¼î_ãþñGÉ‹ó° pP‡`•Î;BФØ‹TN^c:OÅ”§L…i¨t%T“fpþƒêèÂQoªœêZÐÀ]Cº¾¿ê†ÚìÙã,R=7´É„ßP[ýeV¥÷Y½¨vL#w¬8"#Àüvé¸9ÎÌb_mïÅ…kݰûÞ¡–N¯š¼œYxP~géFî-)ÄjJpüº+:…ºÞ$Ìpø} V!È \ã&h‚gyVæ8g™€É?wVpœ"½µ]«Dª;ƒ°ß£ÞAÖ]ÝîÌRËkÛê¦l‹Û×ÿßxçÍïò×îð„Þ©æ–ÏÛ6kZÁj=¬¦>ýo~åÞ&äJò°âRÜÈH^Ôž‡ÙÈSöä7ÓBÁJÊ ˜ÒIj eÖ0´<S™¯©Øƒ ¿¹©¶ûÇÕ¬t¨­Þ+h1½þ±ážÕq×’†{¿hpâZ?P;—.GªÓSÝËqÕß¾M$a×&Ÿw¦Q·bÚ ÍFµf¢k7ÛÝßÁ°x=SˆÕ4 ìÕ%XÚ”'쾩ˆ§câØ“™…1Ó®LÐ„Ž²+€(œV¹kèb¢²Ìg‚㻓1¹3—Ùf&bêí¨óqvaAÑÍÿƒñ ójiå„tºÝzá‰Á¾núÝÊEõÖ ø€š™û„z4õ:¸BÔžÎÐíÉÒÝjinÖ¶˜hI_Úµ·¶ÿ?òè)Û©ŒvæzÔæ>ïªÁ¬Ñæx}µe:Jmx°Ó!‹åŒ6ßB[©¯[·åomïw°ÐmØâ£[ñ2È<ÌÎê¬âH!¤HŠ)¤V``f]#1OÅ”§L‹]n¯¤]õ…0¹=ºî5ÅÖq×’†ô¿¯9Þ õêÆ3ê|¿§VVV»3¬ZÄ⼃õ£õ“•€iˆm~˜ÿ­8Í®5ø_<ÀÃ÷¦Y88v‚ïV—ÆâÀø–±yi—îè*þMŸ~þV%FÎ;íLE­ÁÚÏjUÞñ°»\( ®Î6Ò]ò”=ù !!ÂÒÙÄÈ̾—§b*³ñ{]µ†ßD!IQ˜«ÍМ?«`CÙwHdFç0âÏ÷°o®¶ÀLÞ8ÞÚÄcyÄ Ö÷ôýe×üo=¬)C¬¦e¯£oš¥£šˆÝ\’ =ß÷ÿ½jò®Œ™w} 8§ñ±kS€« O”è$¼Ke¶™¤F;”M²íi“ÉSöä7„„KgKøŒ6¬¸l?¤ OÅ”§L…@ÖCPøÍþøL;†Õ?ÏÝ+êî‰×²¡n:ã<MÒÃ=uoÜýêãýoÇN¨ƒòeª~ý½i@ÇŒaõëé”1¬8ÞµpDŽ}J=úˆ®u^­É¾núÝŠZ+eˆÕ”àøU}kBGPÖñáME¸pÏè#Ù@Þý䯙1®rã&hÊ„ ··Ks ",ÔÄI Æ1í¬M³Zõx:D&H”ÂÿiõKf+©Ô€‚•´–Ζ ³z¦5®óTLy*@BŠ�e¯êr‡qi]Ç)-I8#ÉòNÊ‹?³0ÞtDC�\Á:ÍL›y=ÁM«žM•!îh‡Ýɘ~ùîû !Õ@ÁJÚKg‹€±”vÑz Ö6cÖõóN6¤·àú«,wâm,{PÀp1®IvÄ‹ç‡RËäF–q3 §gT°‚{î¹'×XT¼OæZ¼·I4Q¬ÌñPõŒ×ˆRøŸþ?/›rñ·~g—cÂI¥à¬¤-°t¶MiÃùòTLy*@BŠ�e¯Êr‡µ4»ä]•õ$»"ЋFkÒlíðfBä¡ã¯Ì,œžxÁŠãà˜o¿ý¶Ý2ˆÎáú?þØ>M«�ïrÖ™ô‹�ùìÎ \ßûeŸ±L¨W9v¦ý\3ö[v7UÉ.‡á0#‡ÙS»[ýhâÀ™µº¾SÊ𔦠ï8+i ,-†gš†9OÅ”§$¤PöXîÊA&ZJAFAòpR8µ?³pú°ÜdQ™u&œsxÿÉ‚×ÝT± PÆë耒6ó؃O˜ò‘¦Œ”Æ`’½+<ù‹ jÁN8ÄîºúlïR4ç‚ûÿ‘à5ë†ßÂR8ó£Ç1Ñ·›uÈoaÙ·Ù)Äq Èc¯Éo –Ζ°'O“ÈS1å©� )”=–»âAè3<?œhi:Dô§õ Á[ ¡‰Pát %‹J ceÓN¢4ºëxÁ ï-®³©bˆ¼jÜ6× “1ÕÒ9T£`ÝÛ:£Ži!ºÙ;ªæ{›Žç3ZŸõ ™$ÐýßÈÑy;¤%ò2³´¦nDßÌ,úƒÙ}1ûï\ië‚7<öZ»ª`éì(y*¦< !E€²ÇrW<X¶tá’mBÂ>ÓNz'@lú4Å3^TB„â÷8Þ$ ”‡—´I>vĪ€çSõ8V¿ÍÄ8V ¿‡Ç·´N¢Aøìu`î”ZÚގ`ÝÛ9¯–ÍšÛú{3#½–~»—U3¾ÏUKËg̬ô›½E5ƒÜ¥SªçÎàÌì?œâ1¼£'UoëƒHTÊÙžÚÝXµ³Þ{éÈ‚ZÀñe{óùˆ9ˆ[¾Íl3⬣ÞE€‚•´–ÎŽ’§bÊSæÇQ•޹q–}qÒÌŠêo8ãa°6긵NL#*Ç’ß¸ËøÄ.?ãß{б9‰ã{ìo­jd2¦Áyq-‡–UËí«\3k±ˆ× 4™ˆäå4@¬"ìÂsh‚&wb$¤„q€ðš ÑxF×`¬m«�3U{6ñ¼€[wA¤º3gíä˜ âQ5·²®v÷>{G$Üb=¬xösæ{´UáµÜÛQ—.é6ûDYû@í\ºœ­m”ßcg¢²eÊòÑð”67jÜÿmÛ)íÝеï©k˺]ެƒmû÷ÕUâÊÞ$ä7„„KgGÉS1å©�§"¶-›áFs_R+yf̈œf<#=͇0'Épï}âØœäñ={ØÞ¤‘hÝÊZÐnžQ ³ÇUû¦Ù"({¬Å"Fs}Á´ˆ~„{Œ1…X„¸L;A“LÀ4i{xìì¨`m›X;ZÔ3J˸6ÓŒ©Ø„Âa‡ÚÓ›jgãóªgÚ¶ÙHØí¾®6ÖžPýÞªZ9³®ê õêÆ3ê|¿§VVVðÒ æX¶e(¶×Æ«:´ÏŒ<A°Jˆ/C‚3ƒ¼¬¤-°tv”<Sž p*B¬ÀôRi ScÛ;Á‹â{Õò¸ÆÔ¹÷‰ qbcCô×hû‚D=Ö³yï¯Pö(X‹C& ‚׉Lò²èI}ü šÒWÜáñ©£À‹;¬¦îöÞ>ò_ÿ V¬î Wp4x6ÿñ…j'=šÔfÊØg¤â®Ëv`.œQ›»ÎS´)7£P\*|M·w~è,ÚtÐŠŠŽk3Òr]Éñ¨Ú0à¹Uµa®-¥`u½Æ&t9iÒ%´³×l',']U V)Ë„”Át¥“4–<Sž 05…Œ¹±Þ„ñžPËîlƒ©{„c«5� ñ|«¯ð»…¾z ªþvéõ ¹ŽEuúü#ÑuÊ5:¿ß¼ZH.ßkÓ›jgíÔ`ÏÀÈpîÝ4ÜãÆæ˜}cÆ÷ ty$|0Áø¸±¦–nà‘7¬Å�Ã]&)>±{ ?‘—eÍB ¡ ! 9êaÄØoÜ>x—’˜èYE=1ÓLÁ «\kXòz\Ý%ž_”¡ÂÆ’KÛˆ6åèqµòø3ê·fÍg´cëoöÕ¢n'ÌP+hwµ€|aí³êØÒqÓ™vèúºZ=vBiÏÒµ¥æœƒP]ˆa{¦íý“(éÀAµØßRoÉÿ<¬îõ‡Í îÉöâ¶×ûí?—µÉg¯Éoò‚H“4“~’‡éJ'i,y*¦<`:œÞÓiÆÜ˜ÆëˆéyÝÛ¹¬.¹!L©™ Xe¨i€mƒlz‹ß5au‘àŒþwa¼"µÑ·¼ãÍ4Æ ½__°Ž›3”Oûã{Œ ôP ‚ÕcÎéU ”= ÖbPDN´T 2¸ìü„ÅØSŒq…—4i‚&™Ä)#©îOÜpÁ* ¯Ú %“¶ÍDH°ˆV¼Ÿ¸NB¦!½–T7¤áwtý÷÷žfÙ%å‘¿t’F“§bÊS¦£¨17Z²¾º¡ÖÎ÷UoeUq'J2ÇŠzl‡“/ˆcëPHð¨`öMúßbŽ1§û›j³wÌ éÝQŸŽ&U’ëqî=oHð5 VâáN´DâòÖiÃký™…ýÙÝ ˜î¹ç#p±í3ŸùŒù <°¨Bê1« ¬àá­ê¼@¨·@šº ÑîdL|?É4d){‚ü&+(«èpùÍM»ÈW:IãÉS1å©�ÓaCf s£A8ìˆXKƒ'6G&]Ê)XÅó9wT-,Ú ãs§š[>¯vn:ÝëÇæ8jw|ŒË‘}kì¾á€²W–`ÅR] •Ùl«^Þ£Í@¨æÊÓÄŸ¬© ±éÎ,,áÄØïO\‚xM-VA k• AÚº †¿,5…N¥b'c"]"kÙò›¬ d'()›|¥“4ž<Sž 05EŒ¹Ù½¡6VO¨¥˜ÕBï²–ŽYˆ„¦9§“†–µö¾N·«-ž£ÿ=e¬±gg>0£æ–îVKs³Zx>¬óbÿÞݱ¹îØœ¡I)bÇ÷ŒNºd~c¯u_´vwÒ%é®r"–ºÀ=Â.k¬eWÁšy¶åÅ<¦œxOðW&l‚w@FuÒpúÊW¾’^¬ ÖL AÖºËA˜K$yÊžü& èìíJJê%{é$F9@׋”§bÊÛø’ú0ËÚÌŽ›0C‹a¬Ó:ÿ‰N.kƒð@ô ·æ0‚éµ)ñZgö.” þÜ™…WWWM0mn:}út6± (X3|yê.é`B¢ YÉSöä7Y@ýÇNPRÙK'i$¨PÜ%,òTLÓ4¾¤.¬ =´ÐãCî:­a‚²Wt¹CŒÁ.x0 Ìq¯øKŠEkfJ2A)B†Ÿxâ óIúÉŸüÉÌbuÜm”r/óÕ!O oݯ½t4¡Ó™´ä){ò›´`,8ÊgW†ÔzÉ®ZH#‘‰A$l-kŦm| É Ê^Ñå®+=Ã"ÌaXpŒQñ _syé+ðVB¸ÊM3ú\xþÚ_ûkÙ<«$E´™ˆˆÉ˜P_ñ&iÈSöä7i™­áa�©‚쪅4ôÐÊtY*&¡ˆÆ—< ìY á±â¤QQ"$2SRH0ƳƥO}êSæ=B˜ðoüÆoÄîStòg/îEµ™©î Âôh‘Iä){ò›I <¢“6%ÚP¶/¤ ²«ÒXÐÈýø³QGÚŠÉ¥¨Æ—¬ ìYî/*õÀeû¡Å ÜYŒ\R<â½v‡[¤¡ŒðZxR%8.ýÂ/ü‚úãoÄ~WF‚WW–Öé*E·™îdL‹NÆ‘§ìÉo&:´)âíGyD¹,{-jÒm²«ÒhP¡ rI[1¹à7LLu¥¢Œ>yÚZ'½à0$2Ï`KR!žúº µ³gϱŠ%lÆQ¥Çb•‚5¾.›&ý¿xÖ”9¤¿xüØ}˜˜@Ñ‚&h?]/¿t¤ áBÊ€‚µƒ g,MÅ”*@&¦:Ò´ ‘Ec‹(ƒ¶#˭Ѐ(ñ`×%X!@áÍüøÇ?nÂC¢‰‚õC“°ÅÕeÓ¤c>¡~à‹7MÙûØç^ŽÝ‡‰IRZ&Ù…ûEûé{÷±]«´9mï&ÕCÁÚAà@ÅD¯ éÝìÊDK0,ºàI®é¨£.}ûí·MØ-&O q¬h«<Ï&ŒÇ“Io(HQ¤qd¸žUeOĪ$7d˜" `í(¨˜º°þ$!‚xú0ö Â÷Zw¨jۑ傪¬2^õÉ'Ÿ´[£‰‚HxcD+„)‚i"鷺‰e’ kGAÅ„ÞY´¤  ÑDMÖ!•q•ì*™¹Jd¼*fá ™¦ V !ŽM­ÒA®IHZ¦¬à'–IR¬ÓÅ«JýðS¬LHû9³©Ô?{¾½½œh©:ª¬ûÅXÕÇ«ÆÑdÁ D´6e ¸xû!ʇKÚÏ4‚v$Ê_\úE+)� ÖŽ"“LONH[Á˜4š]0â0™î5ë2+$Èë*êOŒW…W5Ôñªq4]°Ù€M­"²‘º0±)–i+À»"å/.5!b„ kG‘ŠI&gah0i3qE´ xñ.#uá~C�FXÙ“xa¼ª‰ˆÑ›D+ÑÚ”ñxˆ¬áСMÂ`ZÁ*ã¿Ç%ŠV’ ÖŽâVL¨@X‰ÒlÄX`çS5H\™¢�UxVáab§¯tŽzüÀ#ª·åôPìmªÞüŒýN§™eõÄù{Õì`7T +¨µ­öÇ£ìíl¨Ç]Q 3ò›5·ÔSk›/«þɇÕÖžÝÑ£-‚@¨B°B6!´׈ëEùD‡J†BéÁû= ®‡\êÂ\¤x(X;Ê´!$܉–hœVƒäyîxÕäàÔVËg–ÖÔ°ä|O­-Ý¡æV֕諽­žšÚ÷¦ÚÙè«•…ƒúójym[ kÏj³·¨fD D­þÝúFÀŽžwŸ6 Vaõ¥þöSÍè‘2Š¿MÚ¤PVÐñöüŸ·[òãˆ(”èý'Y¡jé(¬„´™ü‡“­T‡xÊ+¡wÏ=÷ØOI¼¥ú‹‹jéļñ¢®Ýpäæ5µ4ënÛÓ›–µø¼]-­y…dw]­Ìͨs«jcWö¿®6Vévâ Zè]ˆÞ} –ÔB?ùæÛ(XŒÇ;ׄÐ{‰¼hŠw˜T‹x㑾çþÚ­ù‘N’4 s-°ƒ•¤…ª¥£P°ÒD8•=–’ #Ë8”1s*±Qz¨§67á9Qó½Më!Äéì÷Ózc}akØÕâtN· "f÷ÔîÆªšƒgÕñЃsœVgÜPd¶ V FþO5dé(ÙHþCÔa?~!êÔ€p,Â.”z1mÂ{DÑJÒ@ÕÒQ(X i>hèe‚N´T-â¹*Ãk5YìA0žT‡ R÷ÞTýŃêÀ|ÏŽ'E8ðܰ÷ÓŽkáÁ:ýFÆÀÎWýí›vŸì´Y° Wä±Dô…ÔCØm¤ÃåÁ)Â.ıEŒ¦MœÑš¤ª¥£P°Ò|díE Õ#aØe0YìAd~ÂN¶ä…ûÁyth"¦hüª¤# {Xe¬ë…¾vƽ¥ú ³¦í¤XmDkÓ€˜Ñ*^5Òð¼ÅŠp\¿“³(»PÊØ¤ÑüõoÛ2ª–ŽBÁJH³±FÆ ÏꑱZe0QìA”:¹/í8ԙžz !Âo+É™¼Ù„…G5Ÿ·6V̌³+j´X‰8žQsËçÕN¼V5P°† ê )» Çìð°cR>´ïÚEÙ…}2.5aâ2T-…‚•´2B3CF<|“VÈû²Æ O{ð‚Š£z`N-,Ì;ãY5"H‡D¬0:^5Ùà &ˆ_ ÖpHådLÝ�c쥭@$θŠ¢ìÂqËÛü_žTêµ?²;’ª–ŽBÁJÚÆÀú½îŒãDo9N´Teæÿx±/ç½jÙ›íwo»¯ÍZ©Ãb2 î¤L‚«›g¢õU݂ǎaµaÁ±âw Öð‘!­œa¼] -DدÔSi:%в !Šq^7}D—±ç\!Y¡jé(i+&4b"$TD¼uÅÓc�¡]¸ç2f¨%“‘5XË;<Vì™ð_-&w|W &[ºÝ“²<+b±þêU¿·yV—újk°œ p…ì²êÖ_Õ`fb½=>\x Ö}PNbø­ë ãä7í†YÚˆ"v.õ¤”}ÙÎÈ ’ ÖŽ’¶bB%ƒŠáC„„†L"Ò¥ñ02ißÉúÁZV¹‹{Ž /*ÒœZÙpÝ&ïý¬ZOêN_- öõÓAµ°ò°z|cÇóºî³·³¡ú+ jfèwój©×Wk®ˆM€‚uç0Ô¥- -ÄŸŒ‰4Ÿ<e ïxQ nŒóìâ3ÊÊ[ˆ8$\(X;J–ŠI*öˆ‘@c#°KŒ4ôlìëEÖµ,+Œ² b‚uw<!ê-ߘ¯\‹x¿ð—õK÷(R°ŽCBÑÙ9B²@ÁÚQ²VL6RKº ¿®V2&‰¡{õ"^î²B²)XÛ Ê Œu”¡¬a›e‚ºT5êV¶÷Ý¢*ÁŠrÆa-$+¬%OÅtZ7°ÿð6b¤~ÔÂéÎ$K� ;x4ô¤^¤ã ¬òGÁÚ P~ \?ölô^£#*„8ӈ䠠èU V sO°=#i¡`í(y+&4d G$u"e°k'ì‘ñB•E•b¢©Œúœ‚5=ȈUyÇW_‰¢šêlg%ì‰ÃêeàüD´h÷ʤJÁ ¤ã¯KsPüP°v”i*&„ qŒ ©Q]«b<¢'õaQ¦ñXµ`Åý`\Y‘c Ö| CJ ùº½Oð‚¡œãZÊš›ŒÛ Rð >óÕò;+«¬¸O)_eE«ö@ÁÚQ¦©˜PÉP´’ª‘qÔ]ëí—F‰z ÂËZU‹= Ï“û*b2) ÖéÀ{BÇ®ADÛür@¾ŠHý¡§¢<G4QY»ÅQµ`Ò[f}JÚkG™¶bBå ÁúOŸgFʧ«bÈx2†M…껲 ¬:Äžxs$Á»c2oýNÁÚ¤½G¹`Guq E¤Ê{‡ÿ/¼]O×!X ±èbûNÒCÁÚQЍ˜P¡~ü"0R.2ÙP3¹wˆ¾ca ϤÌ„:ÄÊ—xÒü„N“¬Þ> ÖjAôE™(Òy†rÒµaE‚Ž é�@^B¤¢}«»Ž¯K°¢,I^°#IP°v”¢*& ¢h%e†¼«ÞE1jª #ã‘ðÙ²ëG?úQõéOºÒôOþ·³æÞ’Ò÷ßS Ÿý|ìoý„ë§`­”G<#tnAX¢Þ,CÀÊyÐîÓ#–Ôë\ö˜Ô¬Ô%X”+”]Bâ `í(EVL"ZiTR0Ñ€slOXˆaU¦±yíÚ5µµµUKZ}ẹ¿qéïœß3û}å¯ÇCîƒT*ê xìÐ&ãYÝu¡x+u¼…¤Ô)Xáð@g ÊThBž„kG)ºb¢w•âÀû$g™a~$;UÖºÏ~šqD3L^ý£HPúŸQŽñÜòÖ/ÒQcvÕ+†zyˆ¼lu V€¼Dyª{vl&¬¥îЉ’ ÂÅÐps)‰ð BÚÜI'cʲ¤i'i"åqŠ5=Q¯ ‹àÌÅãIçFÛ‡á^Eqú/7”úسûeù‡w¦é„`¢3yÚ–N�RT-…‚•0±�c’Æxˆ`m;ŸbgIÑå–Æfs€›Fl¡Ž’w¢µÉ ×/Ê>Ê0ÄÓ'¿¼_¶Q'ã^ñÝ“Zø·A¤º„`¢<IGJ^ï?i'T-…‚•0ãš„ Œ©®„¬IYÌ’¾ÿI†·<g¼(~ôŠRÿÜ »¿û´R¯Ú„„£"á¾$lúwߌ¾ëBça(v¡t–á9"Pµt VBÂCf eC.]z>ðpÀc*†|šc“´8 Exñ¯¼½‡~/¾LÀóŠï‘²tÄA$â\îù åI˜ÿÚ^‡$lO £Y² ñüPvØqKª–ŽBÁJB¡‰½ñe�ƒ‰³$† žŒã® (i—¤ (/ÒyJ Hœf›¥nCÈ­+@%‰@FB™Ñúè«Ñ_œ çaHi6B² ñìQ†84†T-¥ŽŠ‰qA#„ž÷¹§í†ŽC‹FØÀÆ3³ê2ʸôOŸ·;“α!o(;Í 4GÛDâBÁÚAP)111…“þû;î4 ó_ùÔ÷W>»Sýé/À<§ÿñÏÆ~ßÖ„2ù~ôš¹÷Øô¿ÿ™ú˼kÊqÜ—PfþòCÛ¦|à/ËF3RH0ꈸP°’Ê@¯+<jMŸIL‡L¨À%[öÇÿ…ôøwÑxïr\ú7¶ü"|†% 8à“²Áv?lB¬@ê®LtG’¡`%•‚ Æ9&òxŽc;žý¯~-2\8‘Â>l›ƒ¬ÛUQ&÷ï&y—¥# ‰/ÄE:zX÷“<H‡n׆ba(XI-|î›QD/[7ïú]ØËîçæ€I^𬺠Þcä’?¶ e¢D¾ãØE"@¨J¹¡ð Y@="õ çBé.¬¤6ĸÄJ¨½ÀPÁsæä£ˆçyC‡‚5êpB ÞŽC:§d¾óD@Ùp;4I‹Dp &Ý„‚•Ô ŒT@hÄ0>ix¶2~‰!‚£H¯1;lšÁ8¡Ö%PW¢øNÂøP¾UAÔuìÐ yC†•w Vâibˆp;€÷ÆÂ]i¬Æ#bžáqÍÏ‹=üé‘zF&qq;4ØF´ œ Ì Œ݃‚•Œ™/¼UD:lÀš‹æÊF%z1ÖH3c‰jÙ€7õ:òŽa ÄE:íP>8†Ÿ¤Aì Ö%݃‚•ÔĪînÏ+ÃH› žñHHÃà›ƒt2Ð#žˆ}†’8Ðþ£\ Ñ O&ºƒv VR+0ØQñø“Î`;/ÒFÄ@chi³I?X/冦ŒAã¸VâáA/<I‹t2B©[P°’Ú€Á‚õXQñÐkAº�Œv1Ì8ÑR³P4öêO‡¬åŠ÷€âŸ°ÄsÆá$d‰GÛ±;P°’ZpÅ*@ÒÄXg#Û<d¼=ƒÓ¡*7LˆT7tœz$ ·ó—ur7 `%•ƒFH*IìM%m*Ê:Ê>Ë{ópVR ®G yËw‚îdL#$ ®ÍÚ-(XI¥¸=¨’Ð(‘°A''Áš< ƒl&Ro‘â@{ ïÄ+Å $Ÿu&‡Ô´OÚ+©Œ8±Š4mïzcÙ •„ªôvã9Ñ ’™\lÚ²NêƒÏ¯<\ër"¸¡ãFAâ`äRw `%•!=a~š¶!c=ôOþÝH¦BõîKQ¾â¹qŒq~ЈJè#=HÍEÞR'Èc$Š" ÎÑŠ¶ž¢„øˆ7Þ_m‚´ VR "*ãR=êX«¯(õ#OGâ�á!lزã@žÕòW(T‹@Sä+i&²Œ…T¹¸â„3Åí»;Ëqq;…i³´ VR:ãÄ*R‘^'T\À¨¼`ø`J4vd<Y8ž+ýb@ÙCž2\©ÙP°VÞWœ0*�” YÊí;Ëq‘:eƒmm;¡`%¥"Þ¥q©,D„ýÐSû^WŠ×}?§ÿøYŠû²‹B4©ÇðÎjŽNÔMÌw"°\$¤l°c±P°’ÒpÇ$%¥*Æ„½öG‘“ôÚãÚºÚ ç‡Ý]x›=’e =¾(o¤Ùˆ`eäAµp\+‰Ã-øŸ�;FlzàÛ+)…4b =bUƒçD¥Öe¯W—{UH ENóO9#ªï¡¨»Yoà— B€Øžœ ¯}P°’ÂAC‚ #Mb¨$i#⑃Ð!ÍGÆw“z@G;®•À‹&åï(;3úú)Ú—­‚‚• Ø^Ï4©)Þ§ $ä!Ç熃„%!ñ™´xËñ<I}དྷ1jxMi;H¹ \°3ƒ¸\Õvèß}šcœÛ+) wldÚÔ„QÜ®F+zîà=ƒ@„ÁTåõã:Pãü0ܤ 5¾'õ#F5Çܵ<O¼o¤~P÷J½Ç"¸l i¬¤0 àdÜ^š„}›@Œ€A˜§+Jß#¶¡ÑA+ßgAÎI¢p<$·�ÿc¾Ç~/~«¢¿+àÀsjRÙ&ãÇÏ”áÝá€÷LêEÔ¹¬ pÛ]´¥„ö@ÁJ  Eá áÕt`Ì~ýÛñBSî3 ò{¤âɽ¬ÏAÂGBÓŠÔ¤ï# t"º¡ ­ -–Î ¾³„´ VRh8nR©ƒºá@ãá'6&¤MHï~:bÈ>è|`}&©2ƒ3CA‰€r@<!í‚‚•”†„ÒýðSJ}ìÙè7Ñ EÚ "18éG»€PÅs…§•„‰<#$†‚€:™x¥ÞW©ÃOêw$CgÎ;ú7g7”ºM§v[²ß]ßTjÏn š?Uê¾g”:®ë \ïÞûJ}A_;òçÂÍh.¬¤4üÉgüPaö¤- „Û-ë¤=P°6t€º^5BBôÀ_Ñ ×ã&_îéºæ.wŸ úwf¿ÌHVÁêž{œ`u÷«J°ÞØVê9_XêÏçôöT¸‚UççY¯&‹¬Y®‡d‚‚•”‚xWÑHø=›¯rRÒ`%•uÒ|d<:Ÿmøp\+‰C:QG‡Ùµ¥EÞmúšN&‰ˆ+-¨Î~Ç~®-ºNj7ÉÃ*¢µÁªæ¹/ Ë«Z|žšB ^Ð÷X¤`özH2¬¤|ï*!mE CÛ‰<_Ò Rå™…âU#õƒúe)ˆå¬(L¬Z }áj<—#¤¬²_‚Õ|OX¾¯Åü±qy˜‚"k×C’¡`%…3λJH›#ˆ-µÔcŒi®WIøË!Õ N÷EøëCúzÆZ>a¥¯é¶/)µf¿Wô¾2–ôªþÿ°ÞGÂ^/iÑ{òý½³ÿ¤ã¹‚uëÝè÷Øï°þ|åOí> A°úÇ?©ßÅwbîÑãaå<HÇ^Ù?—x£å;ÌsïDâp°M'Å÷õ}œÓûÖùºµ«Ô)}ÌÛž×ù¢Ï7æVëš›ƒkÖ¿9'y¯ÿú!ÒC!Ûöù‰X•kAá:)?ðýýú˜ïôsÃ3”gOö¡`%…Cï*é茑1Ùôâ´<_vH4U(°„¸aãx¯ëìTßÓ×r\‹œœ3ç.Y!‹ÿµà:¬œÖ5ƒq˜"” lEÌÖû]øc^Šö?爤`p<ƒ¢®pA&âÏ#X!¾Niñ%¿{ç[ÑïÆya%îÓ‚˜q·úšÝßq¯÷q=¡"ù'×{Ö×~¿Þn¼þMÛ£’O#‚ÇÐßK~œ…xÔÇ‘q¿r}®ÇY¶¹ù6r=š‰ù¡{öYtþ³¿¾^·ƒDP°’B¡w•t™Œ‡¼´ŸÌgÜ\ð ¥c©nBÂ�eÀë\g‡#ÓÔ@øÜ­Û— Ñ¢ÈA~«¥8Q(“<¹‚uÒñ\«Œñ™}ƒcÙý|aé ð‘ã{˜ëŸpþT‚Øû‹ó\ÇåSܵ‰ìs=q牻ž‰ùcŸßÇÀõ®“}(XI¡Ð»Jº�;fºBYŸ5¼£2®â•ˆ½‚z¼®2!ÞDñ.xHãÄÂ]{%®ÈÊ$X’Ž—$XGÎc÷|‡ãŤ4^C„7ßgÃcë¬#Lj˘óŒ\죷Å%“²>þ}¯éc¹!×d VR4âIWã7ˆÉ;HiÈe>çvà Žk%�ï6ÊR-e –—U‹£SZ° Å÷£1kzN Û5Ode¬“Ž—[°ÚϾG1 2†cW/}gôü¬)óÏCư" “ɬ¤0è]%]@¼n%#íF¾¹k{N¶UD¨{¬³„ÚÂË:BjǘÆœj|‘•I°¦8Þ$Áê ²Áy­ˆs†/sÌù묃óÇåGÌyF®Çî“6? ÚÅ»l&ͲÛI+)zWIWñp1íGfšå³nÿ²ò2Û,2\&Ðù^i™A¤ÅÊ/=?,´dR%W”M#XÓ/I°a­Åî% [µû¹ç•ó¹³üˆR™xÈ'Íù«¬þ$P¹«fb~èc?ä-_„kòóžP°’‚ w•tñ¸ÁÈ%íGB¿Iû€ eâ~™¨R´Š°ñE§ˆ ñÒ –ÈÒeö‚þ,"4N°^Ò¿ÃqED¥9Þ@ŒéíC³Ÿ×Ûíl¶@<£î¤QƒÙsõv7ùK¹È½¨÷¹´e«EÛÕ?ÔŸµ¨“{„ð~ßnÌZ šk·Ûâëàz1(çög >¦·»^Q#lu~\ÀF\£].ÈÜò.áz&æ~£óõþoé}q"{~zXG¡`%SCï*é(ç(ãHøŸ´ ÖöãŽkýÚ{v#é,°aÜ2QUG†Iw¬©0X‡T ¤‡´ú#+Þ ².YÁ%ÉcFd9߉ w¼HƒàÒûAàá·Xƒõ‚sm" Çw=ú ¾wq+Òä<—ôïE ¼²²q§‘{9vY @-¦‘‡ƒk!©w½˜èi >õß³ú³+V&¨’}ÌýèãBÔŸÔçwóŽYkul~èãœÓ绢ó^òšcXã¡`%SCï*é,çÝÏ¢•´Žk%>2€„„+™ zWI‰–0~•t<s Ön€wíž9:§Øž·#ƒ3…R/¬d*èu"]@Æ5qòî uÌJê°îF†þ2&BH=P°’ÜлJº€¬ÓGO[·ÁÊθnáad'h­k2&BH+É ½«¤íÀ0‘Þuz[º…tT ,tyþH %h d6ˆVÎ*MHµP°’\лJº€L¼ÁN™î!Ïþò·íÒ98®•øÐûNH=P°’\лJÚzÐQÆ1Ñ ÕîcëíÒ“ÒmJ|\ï;#0© V’zWIð/$„t´sè¼vK݈÷³R>¬$3ô®’¶#Ëp¢¥âxÿ]¥?©ë†û—^Qê¶ç•ºj¯šwt¾ÝØ_ôŸÔÚ<Ô HìÈ"è¸ÑŠ vàR¬$ô®’¶ƒr0`”szR†¹ …“ìqé°þþÜZdň; Öìì]×BÕæ-k¸ž5tÞ’nƒö‚!ã„”+ɽ«¤íˆ…a^ hávö‚Î#®8"î}-®ƒ¸Óy÷¡gt>rB’BÑJÁ×J\ðüÝɘØÑIHñP°’ÔлJÚËx «ðζR‡uB´^úS»‘äç¦R'Ÿ¤` Ô2Î"…�™Yå!ã„ +I ½«¤íˆÊuÇ0A°„Ñ""Kïwé -¼´ˆ=+žW-f/èºD¶]y[©cZ˜áw'õö÷õ.î¶c—GC1¾¿Ç÷ÈéÏ"ê®há|ß—¢k¸êìçgOŸè~½Ÿœ÷ªþÝCöñÝôïÇÜ«{m8÷Yý;\³÷öZôýÙïè{׆¬ñúóýßžC÷€ëÓywÅú¬AC‘B\dþ$¶#„+I=O¤í`”q„ø‘1há6I°Æ^Ú}ܱ¯"XÝm'µ»µ‡}_ÒÛ´@ûw›Z,Ú}¯j!‰PãØÕÀ“{LÈ;ý»µ•}nèïLh²N‡Ÿ×ÔŠÄ‘ãà^žÕI‹J�z âß[¡h®Ñ»W3®U‹Ü-+,·ôõã¸Çõñq÷ÞŽë}_´÷vN_‹{¬½]ý½>Ç}Z´3ÎWÿfHœR°D ÚF<o% îdLçLH1P°’TлJÚŽL´ÄÅà'�‘—V°j¡uA .pE .ä¯+:㶉Ø<©ÿ #ã8q Zhʱ VØÝ¦Åâ ý1nìçÈ6ü漮לpNœ_<¬q÷*Çp¯‘šñ~ͱœßø÷`°Û(XÃ"EêDj°c·Û “Ÿãœ ) V2zWIÛ‘‰–Øž‚�ëàøqÉ^—ÿ0²MîE_ç}¯éß¹¡¸ æ^Í5»"Óâ_wÚû$„ßS°6w\+Ä+ǵv·<@´²<’ V2zWI›A‡ :cð?™@ŒˆóJ_èémEV³OŒhtI%X±íýý1¬H2~Ös¯¾'Uðö~e +Æ®^úN$N)X›´™¨S8®•¸å<„䃂•Œ…ÞUÒvØ!“‘‚U&]’1 HÁ*Ÿeìgi«�á(ÎÁuÇÜkÜ59v«ŒY܇§¬ÍÇ|‡u qË;1É+ yÒfd¢%„ï‘”L¬²¬;)(R°®A ¹ûÞv<¢ÌÈ‹ëJ%Xµ|èýï<¨Ás¯I¢×\÷3úüöžÓÜ–‚µU¸“לּÌNß®óµ÷öËl+BHz(XI"ô®’¶#“b0L+1"¼¯óð1Ìž«óbÕÌŒë ^WWˆÊ6×S*3ùºÞY±‡õþrXÙ¿w“üN~ã =ñhŽ1xÞYjF‹Í³úÚçÖŸïÃ’3®¨ÔÈuŸÒçÀ~2»°|2S°+Xýûk>ë¼”åo X¯þ¡þ¬Ï)×|Ûóz›“ߤ ít'ßá8ÆnãNÎÅN BÒCÁJ¡w•´¬‘‡òI1H:D„%%ŒÃ<§E›§UG~wצR¿ÑënÓâmÍßOoÃ’1î6×û8´†©ãm!èþæm+`Ým7´ Äõ^ÑuD!¶ưZϦì4ŸŽ¸4ÇÒ"÷œ¾#VEÐ;¿ƒH÷óÀw+ñù°þKû˜ýô=ÓçÑ=ø×I@šƒ;Žž6Ò]üN Î@Èd(XI,ô®’6ƒ2-¡Y4!UÀq­D@ävbÐóNÈx(XI,÷_VêÎg¸:i'Œ „Ô†Hgê!vw´A"Z9!ÉP°’XЈ"d’)ièɆ€qD,ß„ªATCB‰@Ï;!“¡`%„t YȽلºðCB9ñ[·qg”F¹ „ CÁJé ғ͉–!! “¿!áÒ]|Ï;#€Ù‡‚•°ÜBã–M°KN¸Ë_’éÁæ„Pà¸V"àÙK†­°­"$‚‚µ-Ä,Áà§“ßTê ²ô‚+i;2¹'#„„„‰x×~ö"ǵv†‹2 kËØÓÛ]º’sËW¶µ¸sÖû»¢Å!]ÆŸ4þô^BBuÓ¯¼¤Ô=ŵZÉðdLœst Ö–‘$X ¦ÔÝÑúÊèâþ„´ ±â1BHèP¬Á'¤«P°¶Œ±‚Ø0ZT~gm˜ÉžV®_Ðû¾ +Gü¾þîœl»©ÔB†õo>¤{¿ÓÇl{R©û¿åOçÒ–þ=¾× ^ÝK¢õo/¼¦Ô1ý»³ßqö‹9Î;ú3ö“ó^¸¼K¯ëß+®]¼ÉH…v=Êøþ1\»¾·­]¥ÒÇÀ~·éß¼Hß:döE„ÙB!MmƳÂNYy™QB¤›P°¶Œ‰‚UsE‡ŠÏìãŽ}ÁênÓBñìZêí¶§ôg»ß¨·Ÿ{Þù-ÐáÉ=ùzäÅÅï´û\°é¸ŽF$Æ÷òúw[Vl¾³½/ªoèÿXÖɽ×÷µˆ=l…°ù¬ÿBðÆçz÷vŸËæÞtƒp\o—o¤¹ÀcÁÉ+!„4ˆTãüÏ×9Æ™t Ö–‘E°Þ¦…ã lЂí¬‚¾èÙ¦1bS » Zø r¼ÇBSŽmyRÿþo€¿ ¿ù°7”ëa¹W{Íþ½ûçÎr¿„B!!ð€¶àe%¤kP°¶Œ«|ŽKr]i«Ü <ºi±éGëú÷*ŸÂT°^Õ<÷K!„B© Ö–‘E°öÉ àÒVì3‡ ¤¬`0†UoŒŸµø÷:âIü{‰»·¸m„B!„Z¡`mëŸÚI—´<'cú2¸ÔV}ŽKÎDG>i«AŸÿÒëV¸:×äa¹w{/ô°†Å`²/¯<R+ºÞº ë›“º©‹âÀþ(ǺîAý54Á!„B¦†‚µeŒ¬ZˆÉ²6Çô÷›*ƒ€K;†×€PÞ5×àÓ†ÝCÚÄu¥¬ð˜~Á(džöŠuä^®Y~wß»ösÜ~I¿m8’GÈW<7™Œj¹wÙÏÍÓ²pÏYƒ`EÙzŽ"™Ä`ê8ûL¬ºc²¸ã¶^à äº#Qdzt^cFùûjÎÛ*;ÚdýôÒëãÀµÆÍÚO!E@ÁÚ2’«4|0ÂŽ]ŽfÆàx] °ls=¥Ö8s½œ@ <Wšý¬Ñ7HÎïä7®Axé•h›ÇLº¤¯Y–š13þžß?†™Xïï†˶ÃZ˜›{Ô "}ðX;$Nãî·E\yÛz¨õý]Hðþ ìø“e•M\Hé |~¹âs’F‘íá!õ-jÉè:ù¬n ÌÌóRë|—JNºîøÿ·w6;zW¾oµÑ5dÑ+/|´ÐÆ7ЀnÀ@²œ í¼ÈÜ60ÄŠ„Ä4Å ; Ï(£…'ÌyOuê°XEV«¿–¿n>@td±X¬:U<oý﫣͗¸\Ù½ìë”Ö÷J‡­Úg÷>“ßò®yFç+lëMa­aÔ±£gzÀ–X弓S0ŽÊåíøûy8­+GæFÇMöøÖq´5>ðÃ9qTÃ÷¥†XâôÄIlùÖø€L[Ÿö}VåHûí¾u?.V'#Žùøé?Š{³}7íó½!Z·"XÏä ܺ‰e ;£W°z;„`½BÔvYè=åqtê[³†Õñ*ûwÅûj·Ü¾®ƒ\*­ÓÊ›8`K â÷â»°ºAç+l+À0Áú¥¶gçÖàß·u¢`õ¬=H};î;G\ï7Žä*Œ‡7î+G÷Ýñ{øã0<°ÿ-îÐ1áØ4¼ñ¸Å¿Ÿ›ˆiP<iڻ⌳�œ$VsiS¸£?…ßÚ\|”÷ûÅ÷Ãðé7Ãp[éx¡cÞ)Rs4Ó»5ÖÊGù;·jk@­Ê»Tf²©I]ã¡ÊÆËÖâ˜tέ¤Á¦òŽŽ£Žþåüÿ¦`•ƒXë Œi´{³écÙULsœBùBÿÛýûÔbxË å‰Õ¹²#­%*Ÿû²©«ÊË÷%XïqϸNi}ß,æÚ?_ªu 6¬hú¡ó¶‚` è¡h‚Õl.Ún߸µ‡ja}#gþ®†qʵïsÁGÆmjSþ�V¸Oäø¦x s<íºQøù.nMXØÔ¿(&LüÝÓ>±þæhøÇ4Ü• ~®óîI ŒSÔ Òè™Îù—Y0”#e6ÅüCåÓs‰¯&öOò®4M]qż\KïÖX,Ÿl+^þ–w÷­üÃŒ‰4Í_á}V€~Žå+›±éüãºüŠ -¥ÁmÚGð¬Lól„waµå ±SÈëœ Ò8Cä@¶c³<,.ê°ÞxrÙÖF°["àéwomgDñ,uhX‡Å‰â9P¹ŸeÛ(ÛÇH²'ÙÌbG›Î1~ÖÑ"–:cf÷¨6+v”|îÉ6³×rö‘çÝXt¾·}“ÙHÚî(¾±óM;šbž*ÌC]ÁZgUÌg;·2Ûœû©u¾¦rí´;€ë‚` è!æ‚Õð‡]\Û[ VwŽ&Ÿ(²xÌ™‚¢6}²æÈ×ÚîøEñèÂÃYü¥ÃZž×;…Ó¨ VÃâ,TÛ7ÆYËQ ñžônVùÌlNLl';r;’çe¢Ö÷¥¸ƒ=&*eUMƒÎ±é¦¥#ÙJoÉ’—ç–6°êÄÂyþ6êM5ÿÌ^Tž[È6ÔìÐȶbåmÂë¾®™F¼õë}©,­Ü:ÚR»âðw4D»X댙ݣîëÑŸ‡á7ß¿½ç²½L(\ÙN'[W{ïéñóüZþþÇïѶZG“Õ›ñù¡8M¸ÿ*¦Fz꺗½‡é±ŸtŽÊ0Öžó�®#V€-`L¬öÛ§!¹#gÕ}¬“k(à¸ö¶²ù5{†Q{Èž¾qäÎî_y6:|µü“ûò´çô•ÛV†VùøþÚfùù¯œ·Í|Ëù]–‰QÚV- ^vÑN^{ªÙy˾ʰµú�SR^Z;àu0àùm&mEøje]özÛ¸VI­Ýªu´E»œÙŠÅZgÌÄFÞ¦×Þ?ÒS¤}–FýÓ¤SÜÅñ®N‘DQq=ì¹MOÞx^{þ¯ÚHçvØsÀuÁ °Ì!‹‚ÕÐ>›³‰ÖWz¨î`ýé< kÛZZÔò‰œÑa˜¬)¬å‡˜ÜWƒs0¥U>Vþe~FÜŽšåÚ(£¼f- -g®•Þ’ÚùU›¥ýãà¯SbN5ÿLÔ=ás[R³I9Å6§r­’Õv+Æ¡4>S«ðfSn+žþ%ó06…9MÍm„Õ“\/âõ,̃Æùñå?1¯ªõ ‘§Øs›ž¼ñ¼žÙjÃ~ŒtNi‡ÎÂy�×+À0'£¬†9xÙQ9üFÔø°ÌNÏäZqÊz…@í¡½äø¥ëæÿ×Ööõ cé!ïÓâÒ°Ëüªå‡ðûJ÷Ú™Þ­Ñ*Ÿ´?L_+Yuô*öè”å\KÃUÖÖ¹; ¿qð,”­ÑÊ¿ÉÖF5&å´r­’.Áª-­%T8{SýÙó©­ÌDf¿Çƒ¯Ï…Gs]­êÖz^Øè=]ÏÒã÷~úíüÞ| «­]}bk·‹¼ªÚòJ;ˆ=ÏéÉÏë1ÌŠýé/ípí<€ë‚` è!V¬"½$HN‹=,'NHÍ1±x Ç®æÔ\F°–k«<þÉ A„‰KÉIÕ±jP}È;ùþl jD‡¬å¨¥{ ñõ¤wk´ÊÇmbüì•£|{`£Û9ÏíÜq½`æÊw+‡VÜf[±ã ®Q¦­8KzíÜHaƒ8ÇÁ_'µ¡­‰tå_¥½rR{½]Wcµ£M?ÓÚÁPÞ¥­ô¤?†y•;ÓÆµ¸é~,ýŠìXÂÖ®;Þã?¦Ó ,(êÂEê öÜf5oTVé¥KÊW_½f?ÆÄ†3=ç\G¬�[Àœ©†`5\$–NHrÌôðKë¦Ç“ïô೫€þ ô—:ŒŽHkœ´/N©õgMD”//‰N™§-]3lq´!¥SûÖ†áé°°¯ÿ®ôyOÈŽšÝ·À.öã}ö¤wk4ËGùáÓÒ'›òoòòšò¸¶ÑÞÜÙs;é­Ïá·ÑJƒÇïŸ\ßTœ¯³äè•oÿu¼Nø›‡ÝNâ·DÝÎpðÛŒ"¬RozRUt ³‡±-Rü—¬“޶ÜVÄöt&¼=±}Þþe¼3¦¼G··ØÖ:ö·ŠëãÞ÷ýZöl¶™ÝC%ÍKy7»ÿ"­ð–ż‘½•ï“è²1¬ç\G¬�7w:Æ­á”Ùç<îêÁé:Ã>÷à5êhŽ}ÂæÔ¦Íš“â¶òCsfŠ}æhÅ}§HÒQëoù½JÃþø]ÓqôÒͼ߶ÕsÅö ¿Þ¶é$碖Gî |= ŸfÃâ¨}2 ™Þ­ÑS> ?Ã0mkß4­å÷ø-׎4<•“ï×7ájßaµt|Z±ÅD¶…§m£c_¹'ÿ’QÖÉXà-ÉÙV>Gaät ¤ž /ÏZ½¯àå×ìhs›Ó5l¤+Ú§Ùž ÒµÎ?…õìó2Ž_3 ûÊ<ô{H×R8·W³Å¹#¯ÕÉ3vpêžYÂtþWª7ö–` =OiÙj\;<ùF¹—ÛŠý¸µòI¯?õpA°�Ì øXŽâÌ ÎN-ÎÀ{"‹ÍIƒ‹K9áq+;!"K.&Ƹ*â®ÆZG›£ÙŽJ ¾Ì/³¥±óªÕSíÔ(î}&€ô»lŸjûJƒ¿¿ÀÒdù‘ªÒpRéŒ,ó7vfšpý½ŽÛ[‡žMïoÓ4luÜr~Åo;]öãe¨ýÞùÚkw�× +�@ÆÛ{rÔªkv>¬�ïe¼M�Ø4V�Ø6ÿ<Åñ^ïr=¢3NƒÛðZT€÷Žêš­sŽë�`[ X`Ûd‡8M¡’XÓú_+䢶w­�ì€<õ±U?�àfƒ`��€ýæç!½è¨XK ��7+������ì%V������ØK¬������°— X�����`/A°�����À^‚`�����€½Á ��ÛàŸÃpôÅ0ÜýÛ0¼É»ÖxùÃ0ÿani{•÷Õðpþµ?n���XÁ ��Ûà‚‚õÍK€þn>ж$Xc8+��ÀnA°À…yú_Ãp(Çßôô÷Á¿€“~…£eo^Ãg§º×ŸóNØ&ÿ'[ÿ÷›É¢Á —¢l×Ôþ<ùî¼½=T»»H¥Mlµe¯ÕÈ®Oþ7ïxWT?Ž+º�ÀU`€ ñBÎÐíÿÔ_s~ä tÀ+áŠFËÌA<–s—Ä8‚:«‡C°ÂEøJí×Ä®Šví©ì)µEÚ.,XÚ²–`¥§ƒ×j[ÿñy�ÀŽA°@?ÙúEê.èîèN\ ±3aâ\{9Ø>•Û©ÊÏFŒ¨ü<ì­ÿ†‡:ß1çù$(É¿'þVî`©­3]‹/ÚÌ™Î÷™úýTa¤!XËøÏ”l ÄÙçÇ×ÛÒWª·ÌvÖk ¯CmYozjعw?ßÁˆ-�@+�ôÓ+øö• ¤ÿÔDF‡“»Á„‰ËYž›Ã-ÁùÄÄ¡þ?ÑÿßH˜Ú±<¢4ž“Ë7‰Cí¿/ÿ…¶ýÿðoçN¿EåZ|†Ç©ý'YȾþqî˜ùL£"XÓ=I�ûy/¿??QX0[;–mô´E—¬¢«-»@zZLfß��ì+�œ#‡å¡wwêmé4Œ4%§'·Št‘Ñ2Û÷äL×ò°Úô<‹qÑѲµø¢`]-U'¯ˆßÎcíÖîHÓÝ6ý_yîÓl(:â99Ì’mFÁº_°™èÈ›snuåØëHíÑî§³øáÂXGÀIh«îèÿ²þ>U½·ÎÔ¨ž«ƪª°§*?«ÿV~1ì¡ö[¸¸ïηoGÅíÚŸ=ӾχÚ$[á×ðŽ‰„Â7Û¢,Óþ¼¹}ÕÚµQ°êü§§Õi½©zÖ–YÚòºØd¿µô|= ŸX=ò}Áfã4åɵrë�ÀŽ@°@rXld鎜‰C%çc2ū἗t–‰äô+œÿ~"ÇÓœ äðäk%ÇHaVGËÄb|†Ç©0‹£e¢æä>ÖùÙI´{¼oyTÞ#¼;¹|¢È{!Çú+í/±ÎŒO]´èœw¬f|9M¥ÍÏâÊáÆßž‹¯²áÔ¿#¹­º'±|örGÉ…Õ{›Ú}–Û3•‰•«¯íLu;—Ã¡Ž¥N§\¿­ì?ù‹Di.ŸIÇD,S…;Ò±$du²½\m‹r\Ñ®\˜Z¸h£¾?v¬•÷Ô:×(Û²xÿKé‰yRv°ØýÔÞ`q¯=��. ‚�Î{̃C“¨9ê ç½Æêh™°05‡m,Ù‰ê«ñ5Ò?-¥“g×û¨8o?\šI¾k{ðí4Ï­£ÀÖ„š 9ùaZøhg´™Õø6³*Xóolc·$1ËBeüH6r;ïór);’]…rõQ®VŸk6SÆe¤5œ¡ü{Û¶U»ÕvFçÛtö²*Ï5ʶ̘Ý#=nÇqjû¾œÆç¤x+u�à2 X¶NËQ3Ç,;/µ°3rØèdµFËl„âÔ¦Ù)¼9Q¥S×+>FZñ5ÒßtJÃuÝÁ«mÕ4À;‘Þ^ª<5GÚÊÅFÖGT®6ºGÓf6z›é‰oÅfJÛãÎéˆqÃ%ÉyºTßR=å—)EßL°‰Ë֦ݭ´m=mQU°Šòjçe[fÌî¿‘#… £Å–žŠk8­ü�¸ V€­ÓpÈ™S³¶ÆÄQÒVŽ–Ù¾´&KqÚôº³ç…c–¨.ña¬Å×HÓ) ׵߽÷ — —¹ ½S•‡;ÉFÍqŸ‰‡ ØLW| ›)§|ΫðúS®±4Q>Yï}Tò¸dV~™²ìgm›Ø©`ÕÖÓ¶õ´E¿´`õÑãt} ÷åÛ©Ï%µ|�¸,V€­“•šƒŸœè˜e‡±W¸-Ž–‰´®«è¹¯9u=âÃX¯‘~+:„¥“—ò" ¸2Üé-o/'µ´—̤g™Ê>Õo/ãšÍ¸=zùwÅç6¨ý“uÏŸkøîäwX 펾ÝKÜÊõÒЉ—E¥l–`*ëx-Ü.«ÛVoÛÖj‹ºkHGí\㲂ÕH÷£ãg²ùriD¤L�À.@°@ÓÉ3Gg2¥±!øšd'¨6ZV‹ëR‚µ'¾Fúg£e¢tòüz³ïtêœ:?:ˆp9\è•öhøËfL <Hü/c•Á«\FfËiSî8»-ŒÇrÙ.Å7Ú½ÊØì×ßÎZ¾A»·ákdýXí¶ÐOª—ÊÇòÍÞ¯ÿ®ú«²n‰¶TF¡Žï\°æ¶%[igfqç¶­l‹j׫¥ËΟ|’I´î}‚Õã¶—ÞMÒQâ-®�pY¬�0®å3§ý4{?/唘sâ¿Öu—pǨt¢F1šÈèØ›CôGm¯²ãWs€ÊѲ®øB˜¥Ñ²1?tíqê›ÎM/9Q|“-†€+¥5j…[ Ô¾ñMÂ:`o-÷߆‡9²QôŒ¿|-¾`ÈÅbŒßEóøVuµ ö6ݱ]ìi‹<žÜ¶ù¾Y»&F±¨}ñ-Á·Ã›Ú¹Õ¶LøýGñYKO¤&|K,LKô�¼+V�HÔF‚â7FÝI‹ÛL„VX-slqžI$ÿt.PÍ1û«œ/sÒÆëiÿÚhÙR|ãhŒþ.–ùèÈ·¶8 ¿ƒ8m€+Ç>At¤ºçõÓ>M3µ®ÔS{tj«t,‰É|Ì6kÇÒÛ¡‹}& ã>b©-Tqüìí5fë”;Ú¢±Pé{¤¶¶Õ®¥°ºgûƪ+ï¹zn¾æ¸O›µee[îíx™žë|\lósÛ;��v‚��� ¬[[§i£ÈK³IL4ßf}6�\V���€N¶(Xm‰È‡ºïÖTß4íú”å�p5 X���zøY¢ÌÖ²K°ÞtqækbÓÔá…ûµéʇ«“÷���ì+���ÀKëÛo ã ®ÂKêf(OŽOßw��°k¬������°— X�����`/A°�����À^‚`�����€½Á ������{ ‚������ö+������ì%V������ØK¬������°‡ Ãÿö[—´eý����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7q.png��������������������������������������������0000664�0000000�0000000�00000073251�15030617045�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��û�� ���x¦¢���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��v>IDATx^íÝß×çýþt£›x @Ã@_Œ†.$}áFýÀ2¼ ®Ýð@24;Z˜B¬D@¤x' z X4£íFòŒ2JaôD“¬5GE¥3œH³ŠÐÃÛk)mæ‘5ŠÜ`En³¿O}«Î!O‹ìf7»›,¾_@Ajþ¬ââçœúžS#��� •û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a?Õ–d¡8%™‘]2å} us©ªWËrÁ;/Åü„Œä<©šË·W]j•+âyß“Bn—Œʲl®YÝC)&eddB¦K‹‘m�`¨Õ*Rò<9_ÈIf´ åµÿ¸ú÷—B6##ÙãRª>6böûØr¹ £##~€]û ÈmÂþrY £Îýú%ìW=ɵݖÕö`ÓÅöÓºd¦<Yìj§k÷×ÎãôM§SÝ/7Ú|­ ûC‡°?�êÕË2­_´‘QÉywÍ¥Qõê5™éª7¼.K¥i¿!Ðo;ÙGR)îvHÝ…ýíU¯\•+ÕAY[�؈ÇR?-¹Œ #û¥Xyd®[]}Ñ“©à¾ÉN_–*½3[¢^)ÊÄzÂþ¶ò3Aé: Á "섚” ÙŽa_éôðÌÚrãÈA_…ýe©z,ìß—R>/aÀЈögò%Y2×tæöêg¥P®™Ë±éìQ™A ûK%ÉOqÔg£ûama_ê Rœ¾°æ/a¿Kµt\²# û�†ˆ†ý ɦýýŸ÷5öîûámúà yãym(ö·Ô …ýú¢”¦ûi\áà"ì„5†ý.ö7Ê=”MØ0L4ìOJa~^ŠZfº–Þ}-ÓÌûÿ¦9*@ØßRƒöëU™ŸÉõa©ñ`"ì„õ„}?ˆ–$žwVòÙ]‰÷[5ìëèýó§.sBòÅ’Tj]Xú_Úò]ð!¨ÓÌŸ• åjÂ@Úhج³ù?aÏ‘ÿc’+ˆ×r?;‹Oûmµ· f"05’ÍK±Tñ_ݺΞ»íþã<)7'ÙÁÏözgq_Oÿ5¼ÜxNÿõ›—êò‚ÌÍþr�ŽZ�@;&ì——šã¿2‡Å[ì0€SK2&‹R©Û NaI*¥sÁÌlá¾U7ŠRª¸Í‰¤Üô·ÏkÞ/““Âe»Ÿ×Ç,6‹üëfæ“~‡”>ÎÅpƺàùýE3.”[Ç3Ý8³ÛéïǬùÝÊNKñ[Ï7Ã.‘ß]ûo¯_{çQ0³žóþN_t~«nØû]Ö×ÉKضà5» ^ðm֫ˬ ë칿Åñç®Ý’bã}w7é{©ù>ûïͬŸ –+žÿ/ È8Âþ@X%ì/]õw@îåÎàÛ–/HS§° ž”¼·î$Vv&7+ k üæK›É–y³ó±ƒ‰ƒ�]¼ ÛͰŸyþ°¼1sÉì0tÇ;gvLÑwƒŽÚn«_-µñwºžù¡è¸Á:gýpï<wPªã?~vFÊ‘m·?Z ;ÁúâMù3sÍìÄšÛ08ã� ‰ ûþÞSKHƒÞ}?æcûtK{õJ¾tßÿÿ*a?(ߘôý×ÜÛ£¨™)).˜ýxdß?"£oxrýÂÓ ðÃଠ ãþoÙ?ÏÉåÆo€ø"©üÈtæ¸v¿-³Û‘ Þüëš!}8ë’‘‰âBã÷«Éüö­yÆ»}þo˜û“ð:5ذŸyN¦Þ8ã¼ó24j⦛f„Këï\wYÁ¬ó¨Ó�³¥:IŸ»¾IEyûã¾?a‹£EIû¡Cد-ˆ—.¹ÐØ¡vöƒ:ž°CÒ¨ãÁ—2yggbe¦¥´»µÊ«å�NØo9$ìï(Ê3aènyÌö¯Q8óCÂ]{™‚¯s]°í~ã$>•\c‡ßööa?ü!Š_nÃ$aÀ@s¾¿_köî'ìïU£W_ÿèöË¢wX2ö¶–ó‘ëš½â­S€:×µOdãûtû;ã7‚†‰«9¸8þ\ßÓ¶cšëŸ\î¤KxÎ6ÌohçßÉØ‘–FØïô›œ°Ýß¿ØïY—Y!ü-n=ïOÛ×®mØ7ï]Ëåú$ì' ì„æ+yIóÍûuöíŽ"i‡å´ò[vÄ­l¯KòŽÍìÐ[kµš}»‰oS»m5;ç¤õuz£ÂR§¼íÝ×·‡æ2Õ>쇯oëŽMŸ—2�ƒÍ û¾FXLê Òýý´L7ö«Â~ð8£ ÑüM‰†ÂN¿ë¸Îþ.´i´4§ þF¶í<s5;¡ÜIC£mJ-ìoqÒo•ÏtZµ¼nOËP‡é¸Ã~·Y¡CçŸíÝ9oöÍï}ÂëX§Œ'a t íKRñŽK¾gaßù’vZÚõÞ4ØÇIÚñö‹¼æ·jw}›mmúØúÇ–°Ab×¹›Ã€íÃ~ó‡)©Ö�Y,ì»8ñß ðS³N‡Kû°/ÍI^ÜÛÛ°ßxþ¶ZvÝ£¿mk û×(þ»¨Aû˜L¶û­Œkü®%mÕܶÈvt û¾v×'†ý.³‚]çn· ûîs¯s,á!ì„Ρ]–oŠw±WaßÞ§5¼v§]¼£±qwøvÎÊÙ‰%®wìùìstÜ[v{öuŸÁ)\’À ‰‡}_£4Ò ³ñ^}Õ>쇿K~7ZtèCI×uèÝn°¿5ÑÇ\[Ø÷Ù×(Ò Òßžƒm‚{‚ÆëÜþwº±>n¸^kØ?nbØï2+ØuîIØ÷µ âO¢a tííu¾_ç°ß®Ç`­ìμ]h÷m0ìG¯o³­ö9ÚöÒ¸lØosh4Q§°¯êR«”¢3:$L€A’öÝW[’¡½ú¹Sm&6hö;nÑ˰߼¬}(µ¿5ÑÇ\sØo¼FN‰§áÆx†5h„òöS ûñë;†ý5f…ÄFÎ*:…ý@lv%]’&ƒ°?:‡öö:߯sØï´³­ËÒÕ+òˤEƒ³Óo÷EMÜtÚ9+û¸ñmj³­çè´Cº/WK·ýç²ÑnœŠoûjaߊ‡þ6¦�`;%…}_£×YÃìûò°tBÆÇ-­öýûwê Y*Ké—ö~½ ûþžºQFÔnŸžü[³ö°ï<G°ú›ö|_£Œ§}&H\ŸUÂ~c½âÛÐ1ì¯1+4£Sgšý-6V ûV,ô¯©so¸öB› »ªÎ÷KÞ99‡1Û¶ïKiæÜ*_&;xG§ÍÜËæG!:«Á*aß<jyÌvÛj{뵄¦Í”¡KWdfVwVζ· Ä5üç¿0{Íi´ûËås2×èílݾ—�ÐOÚ„ýHïþó’kéÕWíþÛXH>ªûé³2ÛØ·ö6ì7'L®0¿)±ß nÂ~ówɾ—¯HqòØÚ{»öw$þûiÙß²Ø6t ûv<AÂv'†ýn³Bó·¸u ëP}ñ’Ì^qmþÿ{?ëµfÆ{·ZçÛð!ì„­ û>wPküdÁ\¶Çe:q'ãÌÐ:÷²ÝQÄCusÜ~J±¤pûmu|Åkæƒù…§O4wÚñmoœŒÅÌ|Lfgãií©_ö×u2aÎéðuï¦T�úM»°ïï*3Ö´ ̾ÛXðï­ÃÏU2=}Á ¸ÍÛ¯7ìGkœÆI¡4hŒ´þ¦5~O×Ô«Üì Ëd³’m{$¹½ækœÔ1e‚u»Ùm’JiLPNl<$†}_—Y!ú[<Ó˜ç_ç¾ÉŸI^ß–×TïuŠÍøv›ÐM©Ð ì€æÉ?ô ÒÍ ­l+׿_˸Ù38}•óœÑ%~ÒU8½$­'þHê¹ñw‚Á‰Bô¹tGïœØªí}T§†63¾-ºDOÐ¥š;Ñø’´í¶·Âþ¨ù¯kñ{Á+ÜùëL<sÍ+{’±ÄÞ�v?Ô‘£:L³èkîcÛüž4N´ßûKü¤SN%½.n;^ç<Gˉ¬œžó„B¶þ;“1¬5h6‚òz;~Ü£ç 'ÿJêmwµºa»ýví¾¯»¬à4¤Z–Ößâ°aå_g3J­,ÅbÙÿ¼Ùß{sVúpÃ'Kn`7Â~kô$.S5{,ïc[˱%ÞóÑrîxË}­ZN¥­!þ\ç©(»¾O§°¯´G(zêóN3ãÄOç­·=_rzùͳñFƒ}XÆs/zÊ÷õ¾†�ÐÖúûQ™•ƒñZî6÷ ––#ÌU)_8ë ¾Ô߀èl+É¿‘úð~›ßÀð÷¡ýýÜß­wöÝþ’ø;б¥Ý Øst{C½Ð~À­\‘óÎoUðsþJ‡©(׸]®a_u—ô·Øsž¿Óo»íäÓÛ¹ÁÞÿ½×2ž¥hNèô›>ìûH‰ÕÂ>��ýBÃ~sëo§UÂ>úa)AØ� -íbnýíDØx„}¤„ ûLi �èoÁ¸…næÖßN6ì3¥åÀ"ì#%LØgg�ègÁ@Ùìà $ Â~7':C¿!ìc ÙÙ3 è¬?9s� ¿¸³K›YˆúBs¾ýp6¼å`ÖŸ‰nfDß!ìc 5gÀ1;Î|±óì>��lwšO©Æ=KßqgÀÑeBòÅR‡Ù}0û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØGÏüú׿–J¥ÒXÞ~ûmñ</²¼õÖ[òÚk¯õl‰?¾.×®]‹¬ÇƒÌ�� Â>:²þÆ0}òäÉFØi,/½ôR$ˆk°wC¸.Ú�pƒøFwÜÅ]?]vïÞÝXGý¿½üÍ7ßlÜÇ>æïÿ{³å���ƒ°?ä4ÜjÈÕÞp7(Û€¼oß¾ào½Üc Ùƒ޵—ß®»=òàmˆo·mØm��$„ý!¡!×ö„Û@ïötÛPkK`†½ôÅѰ }ôÈ…ûši#Á©àˆ���èG„ý²!ÕöX»Uƒ+ucìÑ}-µ‘”ôkʱ��`»öœJí×`o{žµÅ–Ýê·Ž{ôDC¿†ÿx€÷��l%Âþ€Ñòí™×0oÃ$Á¾Ù€{”EczD@iôþ�€ÍDØïsñpïE½ƒÇ–Y%½§4Ö��@/öûŒ†=í Öð§!ÐöÜÓ œ^Úh³¥?Úó¯åXz$€Æ��Ø(Â~Ѐ¯a^C½ {þ{ÃÉ–ýØÆž6üô2��€nö·‰öÒk)‡TKï=’Ø^ýœ¸Gy���Ö‚°¿…â=ø6¸Q§µpˆôø�€µ ìo©ÁLš5>6Jƒ¿öøk©.ZöÃQ!��GØß$æµ–0†Íæ6&u/e>��À"ì÷˜z7xQf­o`jÏ?G��n„ýÑÞU ÷¶–š^|l'ý<Ú±!|�^„ý rC>=©è7öH¡�€áDØ_'B> ¡�€áDØï’Î{NÈÇ Š‡~>¿��¤a4ÙDÈÇ ³¡ß6Z�@:ö×@g8ÑP¤)@šh9šžûAgïÑÿ�€t!ìw Á^KvBH;Û ¥´�€t!ì·aÞ ‹ðƒa [=zEã�€ô ìÇh°¬ÞüûRÊc Âe\ò¥ûáUK%Égô²ŒL¤^ t¤gൠ]��0Øûig Kê RœÈDƒ~à‘T¼32[®ôÑíå×Z~]8²�Àà"ìÚ›©=ãZ¾3pa¿+ì…R«\•ReÉü tÏÎØ£ a��0xû>-Wè@“öë‹WdîÊb£G¿^—ÙüDРi,™i)-ÕýëÊrá|Ar“§åòùÃ’™(J%¸ã’T.ÏH.(Ú%¹â-©fŸÏ¿<¸í#©÷›Ç»ç”MHþìþý3’-̇÷ÅÀ±e=ú/��,CöµçRKºç²Q›oÂ~­,Åb¹®m8Ïoñ‘óiÉØÛ:uýÙ#G‚`ŸÉ—ü˜ÿPÊ…IÉ—RÕý扺y ;ÀŒ°û|Ùiñ*÷œ†�ÅDƒJǯø�<CömÐøšdØ5P?|_.œú‘,:¹º^)ÊĈ ñ¦Þ©ï¯ÏÊÔLÉܯî·f$;²K¦¼ü¿ì}lØý<¿38ò·ÛëOØdvL �€Á1´a?5A_5Âþó’cNʵX¨zÚGÃð]›—BV{ÝgÌíl/ý¤ÊÃÛÛžúF@ým{îÝž–^Û˜ˆõúc ø�,Cöu®N­™šYFa_Ët› ]¥:ÿ=)LeýP>"™ÜŒ\n ÜMãæñÂ#~|zþ›=÷îßËv,@›†A}Ñ“©Œ=B€4°ÿÆæ��Я†.ìk@Ñ 2Ð5ú1aøv{æ]eÑ;,£¹Ó2_MhÄKp”é¹Â~ýñ¦vù „YYŽ8=ùå›reþ²œ zùßoþ]©¹½þË‹RšžÌ”)+ÂೃvÓô=� †*ìëÜái쑬W¾'ÇÚöœÛú{„«Ë„ägç¥ÜØ–ÜØKœ6³ð¸·Waã!£—{ po¶áñÆù32¥³ðä=©ÄËŠ žç1?RÌîí¾3¾Ÿ€Á0Ta_ÏŒ;lg­W¯ÉL¾ ¥Ê-)yß“Bn—ÿ£?ùV¯˜^êó‡Æš¾S¶Ì,L±£H@¿³G+ û�ÔЄ}-;Ð:ýáÖÏ7Kpüß­ †¾]ÉÏÙÁ¿„ý¡a–­^ÎcË¿û0„}�n(¾–h ѹ‡MËÉ´29)\®ôüWaù½·ÃHËy´‡¿3Â>Ôv…ýª'9»OÝñœœºi'U¸+^nÔìkÍ2Zò²¹Z>“Zåï¥phBFÍõ;ÆÈëÅ¿“¹ü-”¥qS�Ca(¾†‘“'Oš¿�ôš5ëܘ&ìc@mkÏ~MÊ…pµ¾+ï~ºb.WúÇ%çÝ5«eùè''åé{å…Ây¹Z¹/ËË÷¥òÓ¿“SŸ’þãöá“ú°o{õ™5Ø<Z&×¹wŸ°Õaÿóòš¼:¶W¾zéCiÆýÖ°¿òà9:ö´½t·5Я|$¥£» ûÀJ}Ø_=„�è…ÎjÂ>T„ýÑÂÏäŽ÷²ìÜóçr}é3s]<ì?–;ç¦$ó¢'º�ìcöa“ú°¯å;œíØ|:+Oû™yûP}öý€þém)îû‚ì+Þ–Oƒëâa_'dxJöÍý›Óû�)ûZ£µŽÌÞ¯Üùü3’=rDrÿaÔüxÕ¥V¹$…ÜÞXM*ú•öê·Ÿñെ°¯Gß|óÍ`vªÞr{ãWä“ò·eÏΗÅûPã~<ì'Õð@Êþ¤„§…3øèè’TKÇ%;rP¼ª9À¼\–¨6løÇ ÐRžäÀCØÇ ‰ŸT+\‚3‹›[Xú;c¯ïmè•ެܓÒѧdìè;ò`%îÈÕc_äû EªÃ¾Î£ ú‘ù!LœŒ‰°?H4ô´ÌÊ9©–Y2ÓRZ"’ ܰo—Þ„þxýŠ,ßù¾¼Ñ©8oÅÂþ²Ü»øŠdö¥™µÀ°KuØ×mºëõ—¤ryFr™ç¥p^ÿÕ5%ÅíwÒ2Oòz’«àÇgB¦K‹aO­"— 9ÉäÎJÉ›–¬^Ÿ‘rõ¶xfNþȉ¸ô,¼Á™wÝÇ߈ðÌþ(ê2Z¸&wËžrÏI¡lÎôî;a¿^•ù½ƒûì’\ñ–ÿH«°Ûú|AΛû6·Íýìöë’=.¥êãðòàuõ·µtμ†z"²š·¼n9Rôµ6Z³OÃ&)ìÛec¡?öÕ'R)>/™GåϾüd¤3då·ÿS¾¶{òÞwnß´R»'¿©Ù¾�†EªÃ~b/cŠ,— æ¤)&øšÚÒð0³9{®þ¿þxS~XÎlkË)üûer23_•å଺ROË|õ‘ÔÊ3~ Í†¡;8+î¤i(<ôx&ze[Ã{tqÊs–¥êlž ¦Q¶cž7¸‰öõ¹Ÿ“ìôe©Öý†L°Žã’/Ýo›ÈY/ÎÃÒ!s¿ Ç9üxfá°Äd¹q‚0ÿu¹&Õeóú™×«nÎþ�›u± s]Ò¡þa°‘£i­Ÿ–ô,ëû^$…}?´/ýLNîÙé?nüÈçgòÛë!ÏŽ>)_9ñ=y§|Gj+û•ŸÉçÞvË¡‹‹ à† a ÙšR¦M¸ÍyR o`Ä‚µi4ng ”àÌaèn6(ÜÅ äë_'Ÿó¼7ì7Ñ%þ#Ø*¶­ñ£ Zÿ:ÚðÑ×Õ4ëêÞ¶MC§SyRŠm$샪SϾŽcÑïD×E¸gÐ5Ks·,÷.•±Ä1MŸIí½·å”sÝ‘ãòìŸ~SÞú‡wýðon`hö\ÆÛ…}-å¹"^1–ž4hüvnxõ5B÷Ã0'öÌ»ÚÞÆ²†ž}Õ)ì×%ý°­&¶­-aI*%OЦ|ɾÑ×5¾®îëþ¿ùZ7Â>†QRØ_wÈ€#ì¸öaIŠS’Éæ¥Xº-•HX]kØ·=û«•ˬÇúzö»/éök·¤˜—l¾(¥Švk¾kûæñp ìcÅÃþæLà �ë“ê°ŸþÁ‚ñrS²¢µù5Ôšië‹Ršžpªs;ͧ±2žH]»©Ao^Õç<+³>¹Œ)qBräyUþíTf¼€;ÐxéŠÌÌ®6Í\¬Œ'¨Óóqèù³ëÕË2íÔᇯ«W;VÆaÇdÌx}ÿ9gÎ…¯íIÿ x • û„|�ý(Õaÿí·ßv¾iö>›Þ¤Ñ¼Nd=K#¹¿’ËÚ³ïÿ?“;%—Нøÿ×¼ÿKJÚÝ¸Ý )hJð÷¨äÎ zÐÿµ—}©eVŸüì¼ µëezÃí:$=ïõRl=jþݳ'áÊÏI9h€´}žÑ9ÑxLÿ9‹¤Ì2¤qÏKñˆß(ÈLÉ™³Gš¯ëHN …œù¿¿äŠâ¹4â³úäe¶\]¥’N/½ôRê¦qú[CÈЯRö;ŸÑ@/Ù3V�€þ‘ú_æögôÐKZ¾sòäIó��è©ûZÆÃ€ÁôŠ”2µ,Î`_l: úÔë�Ð_Röµ~˜R`séÑ3m`1Í ��ýe( lu¦zÍ£GÐÒ<�€A5aÿÆôî›Äöê36�€þ3a_iï>µû@ïi­¾žÓ��ôŸ¡ û: §ö>ê¿C¡V‘Ë…œdgÉíKR)cóö_—…Ë32S~ž©6¸<¶drR8E*5½>>Ot±' žËΟ™’âB‡sï:søgr³²<V£GÍtÆ+jõ�èOCö•öìëIÒÏ Ã}öÍYp5¸_®øk©ü@îý\¦9sN8ÃŽ=+°Ïo¸”Šù ´»A<¼]tÆú¢'SSºÍeÑ;,™à̿³Üf‹·˜p®úâM›3à†ë˜ñc‘¼ß‘–íhÐ×À��úÓP…}¥å<Ã1ð¾”òã}öëaàÙ%SÞ±³Ëêu§%ïÝ þj ûÞG22Q\îŸöê RœmܶåoG½R”‰‘ýR¬<JüÉ´áLù��ýmè¾–hodjfç©W¥<özøA:7sMªAš5½û6ì;e*#~`{±õŠf©K&7#g•²fìÆíýÇ<sZ޲¥1ëe™i)-ÅãvTrØ÷-•$Ÿñ×¢(ÿ!âa¿^™“iÓ`ª'¹HC öz4,‡¥C£…p»ƒ‹ÊR•œ},´Ðóp%�`° ]ØWZ·ŸŽÀoKUf¤\[6=ç6àºá¶îçäiÉAû‘é!7=× GM�¯Ý’âÁÓ~è o?š/ùMºŸûgåàL,ìXm–x¨¶·7A½“¶a_m4ÂÛ¹ÏÛ èáunï¼y=Zž?áò`]›Geƒ>uú��ô¿¡ ûÊØèÀ”¦ìjÓÝ®'Ûçöz½å:HvÞôô+Ó8Èæe¶¬M…Ø´°o7«•­öÝ׉°ß–}m(Í@w��ÜІ}¥A JÛ•›$„Xèê53áØìÌX£3ãx þ=õ¶NÙOvZ¼Jl&Þƒû%,-ŒhPï¤mØ_¥Œ'‚2žž#è�0x†:ì«.éé0è4nÃRœœöàKR©œa_£ö?zy½:/³úÝ0¼.v€mÒ�]ÿy$§.„—'‡ýÖûw û Ðí)[ºCÐ�`° }ØW6ðk ,¤RÜ/‘9ä—®Jñ‚öH›žô Ü-ay,ÕÒñf¨¯z2e§³¬ÍK!»Wò¥ßø‘\ñ–ßd0³è¬¡G~UÁ—»$œ[ß– ùëSž“éé ©.[¾;õ¦3%fx»q}ï‡D¸ã…Û¼ÚÔ›…y©Õ¥4=ÁÔ›†ÖåkȧF�€ÁDØ76ÔÔ«2?““Œ)Ÿ ç¡_ ý¹lÔ±ƒž}ÿïLNf.åˆÿÿà¶• òFaVfrÂíl>ZÚ2#…ó:ÿ½¹Ï|j÷õ‚W7X?ÿ9 —ÌɲLIYïÈ’Íû˜rt¦!çú扴îk)Ej–´^½f^ƒŒdóžYŸá¦à}ûö`‚>��ƒ‰°ïÐ@cë’+•й>o¿ývЈÒ�Àà"ì'Ðú} üz z41Lô¬¸zâ9íѧ>�€ÁGØoà =ôòch/>\��Ò…°¿ €¨[FZi> [��Ò‰°¿ÚËòäÉ ôSÃŒ´ÐÆ«öâkm¾çy4f�H!Â~´×SgëÑÐ7n˜KÁ£á^¯ÚˆÕÆ,��H'Âþ:è�^ üZú@Ù Ÿ]��† alï(Á ýΆ|ŽJ�0\û¤uÎZÇoƒ”†* ègÓmòÙ�`øö{Èí=eÀ#¶‹ÖàÛ“ÃqÔ �€áFØß®tà£Îr¢¡‹°…­ M ÷òõsÇÀ[��@ØßD¶tjC _ÚÛ¯å>0ô’Αo?c:S”~Ž(��‹°¿EtP¤íí× eX/m0jÃQýíÅ×Ð��GØßbv@¯5‚?ÖÊ øösì:��`5„ým”à4øS꥽õ4 �ÀFöû„| rè4ØiÀÓ}Ü;<4Äko½–åè[¢£—ð�Àzöû”<xiCŸ6´——ÚìtÑÆœ6êt·‘Çû ��z°?�Ü^ þnø§çphï|R¸×F½÷��`3ööújø·å5<ÚÐHÍpß'[wO¸��[‰°Ÿ¶ÖÛöÛÞý¿^¦“²Í¥=öz¤Eƒ½íµ×†˜Ñ÷€#0��`;öSJ{÷m@§= =Ë6€êõ„е³e8êmÃÊ}]5èÛ`O¯=��è„ý!£AT{úmXµå%öH€ ¬z½í°ÐmŽzÛS¯‹ûic‰#&�� ŸöÐ#nÈÕÞ ¶¶çÚ]7ìÚÀkr¿ŽÐ@n×Ñ6tÜm´ ]ôÿz™ÖÕ»ÛGO=��D„}¬‰-aÑÅ6t± �]ôè€ ÍºhCÁ½Þ.ö¾]4'=~|=l€×Åm¨Ø£º���¤a›ÆíQ·‹GЋEñÇ×…Ùˆ���B„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H©¡ û###,,,m��.Cö´â»�@ú mØ?~ü8 ‹³èwÃþ��¤ÃP‡}�M|7��HÂ>€�ß ��Ò‡° Àw�€ô!ìðÝ�� }û�|7��HÂ>€�ß ��Ò‡° Àw�€ô!ìðÝ�� }û�|7��HÂ>€�ß ÁRIò™‘àû12’‘‰â‚ÔÍU�0û�›þݨ-ˆ—ŸS6ïI¥Ö«Èt_JùIɗ^{$•â~Â>€DØØÜï†òqÉäK²ü¯d óR3×nL]–®\”+KD0lÂ>€ÁEØØÔïFP aƒ’ N™i)m$ ×¤8‘ Ö»¹ŒÓÃM@Ø0¸û�›÷ݨûYZ2 dƒS/‚ùc©–çdúÈ+òÆŒ'åêcs9ÐK„}�ƒ‹°¿ml�jöJ†%*,y.Ÿ(J¥ñËÒîr`ã6ï»J= ûÁƒýR¬T¥\˜t¾C@/ö .Âþ¶²? nÐÕ+dfv^ªñ_•H9ÄÔ?ïØ÷h`Uö-AØ0¸ûÛªÍH­"¥R%qðb½R”‰µ†¤`ö“I~œ°&›÷ÝØÌ2`+ö .Âþ¶Jø©ß•ÒÜÕH~½zMfr»$35'—Ïú·w6ÚëF²Ç¥XxΔ÷Ôýœ?+937tã¨A½*ó39?tMÊÅ~£AËlêwc3è[†°[©Ý’ïÝ'£þ¾V÷·áò„¼àÝ‘s`3ö·•­Á·? ¥\üž”ÝùÇkóRÈŽ†Óš“»4»sÝRÐãïûp¦’fyÿØ…I¿Q0#å¥Ûá,&„-86÷»ÑiêMÛ8Ý%SÞ&H™Ï«ß0-”—ˆÿCY ½ž,ò±ÅV1ûÝf8ó—MÝw.KÕ;Øx®Ï|Gn~b¢`Õ“œ»þ2Z(û÷°>“Zåï¥ph¢(wŒ׋'sù=±Û®UÍÿ.f#Ï922&/&Ôår!detŸýþ-©5î”ô¸vÙ!£“&ß¿ýqä9’狞|_‘øë4Zr°áÑ×vddTrÞÝà.›/l0îüÊ)y§r?|–ïK¥|KîÖ> nÑww<'§nÚBà»âåFmô—Æö«íýŒ$®_ârP¼ê£ØûÕn ßÇî>Ã…°¿­lØ×r†EY¼P” ‹îl"±ÐàGÇ–>D¯k)ï‰ÕöG®oi�[ðÝh{R-?ì—g$;BØ–ËRÕ ò„˜«È§æâ@ô4 ¹±lY>úÉIyzç^y¡p^®j Ô0ùÓ¿“SŸ’þ÷{}A®iåÎ99°s¿¼þºZŸ›“÷¿‡æÆ£!zù#¹ýã‚ìßù%ÿûü±¹ÐhÙ–?ÿJ~\8 ;÷|[ʶ¡ãZy_Ηý¯çýÇüO2÷ÞÌ®Oäݹ%³¯(•OÝÇøTª¿*cÏþ•üêÑV&¿0oô=ˆj†ì¾+ïF¶3á}è‹ÏH|½L,çIÕ\ÒüL˜°Ÿx]Ëøãuùù„ýmeÃþ.Éåߢ 5V¤'ßÖ=›Ò›¤ë½M±ÛÚçIl4�¡þún�C.û»åOò,ccGåÒ='‚%„ý•ïÈѱ§å襻­amå#)ݽÁ ÷;¹}æË²óÐE¹wï¢Ú9)§n&,K ™ê\=¶Wž<uS"ý؉ ßï®Ê±Ï}ÉŽß™ ¬ùôö_Ê3;_‘‹÷>‹‡ž”½§nH⤻Ÿü“œzf<ÒþN_’“×$ô:waåc©\œ‘CO?ì;uÙ1þÉŸ¹,ïEzê;Áð7Èv-|ìÏÿÉkòêØ^ùê¥mj}úã3² a?Ðæó7$ûÛªö›=šMI½ñ¶&? óI×é=ÍãÚ¿# [{J½>¢úë» ¹ ìg¥ð‹[â½øÙsòg²d“\Kày,wÎMI&©¤%Ѓ^åO~!…=OÊ¡‹‹²²ò¹ôê¸ì:ñ3ùÄ\ÝÔ&l÷Ù-O¹µ¦°¿òà’¼šÙ'gnÇŸác[¾Ê•ÏäÁ¥×$³ë›r=é€ÿL¿½ú Ù=öº”øÏºò@®Ÿü’Œ}Gl$éûÛò“¯ÿ‘ìÜ=%…üT*÷ÿà¿_÷¥rõÿ‘¯=»Kžxá»Ri9j°y=û£…ŸÉïeÙ¹çÏåú’}uãïC¿|F>”‹Ÿ’ƒ?4'„ý.ÊÁ*?zìÿ÷OeçÁ‹ò‘¹ªõó¼.?C‚°¿‚nêñÍEMn W*—g$§e9g/Kù—‹ò[÷ºRQòÙŒdŽ¥ô˪Ôe:çe¾ü®SëY+%)j)Eæ)–n¶N퉡EغwãÆ ùýïoþê!öË5ù´R”};Ÿ—bÅĦ–À£<Oɾ¹ÛXou[+òÉõoÊ®ÆÑcû÷krICtD<lýAîW~.—þú«’{Yν ïñmÑÐüóÿ.ýÊ„Œ½xNÞ‹”¦ø>ù™œØµ»yd:ø{\^½ô›äm_¹+_~Jž9U–¿ùyfì«r±)Šê’ÿÛ|õ¸Œ½&?l-Z©•å;Ï>)ν[ŸÍ ûþc~z[Šû¾ ûŠ·MÉWü}è§Ïˆ+!ìwÒ¦qØÔåçoHö·“Êg]h_ ÀõC{nV/û=#ÙéËa@o\wZ®—NË„ÖAÛël¸×ûuѦþ9““™ë—å¬È—g…ƒ°tïµ×^“Ý»w‹çy½ ýNØoôfÛ^Ù–ÀÓ¦7³WL/íØ±Ÿ4Çy=¾!§ö~!a¦®K|�fFÆ÷½eÀm Ø÷¶þ²c·ì?v^n· \5=ùcÇåj(UMnžšL¨X‘Oßý®øÜÉ>å‡ðøø‡®i9ÈSíK‡‚ðzHv웓÷#ë³Éa_ÃuùÛ²gçËâ}¨[ÿLôÓgĵa¿‹Ïß ìðÝ�º§aß†Šž†þHØ÷³TPoý”-Ý“•–À£ô‹›6-èJP•×Ýqea}öŽ–A˜n¨üL–þñ/ä™±WĻӦlÔÝ–•ò…çdì'w–bÙÊ¢\<ô…Xiˆ©áßÑn ®Zòûd¤Ý€ß®¬šƒYa"3à¨Íû¾•{R:ú”)SНg?}F\›Ù³¿†Ïß ìðÝ�ºç†}»ô$ôǾÎÀvçÜAÉèTœïþ x–åÞÅWfžé…°Ö[gj‰og¸ÄaÆB¦©“âåJ5iÕbámeégrrÏyùâÝ–^Ø`¦—Ië ËÎUzÛ»”­Þ³¯ïÅÎ-ïÙW+²|çûòBF§â¼ ûýôqmfØ÷­öù„}�¾@÷’¾]öíÛ'×®]3·ìRKØ÷uÙãràØkòåXàYùíÿ”¯íÞ#‡¼÷ÃäJížüf=ó¹cÀv%Ô ûLOr´§½µç;rTÂ\ÖÐÞ>“¥×e̪m'—ØqàœÜiysŸ¶u{ö×R³ÿynî_c=è[öÕ'þëô¼d•?ûò“Ñ÷¡o>#®Mû¾ŽŸ¿!AØØÎï†XXÒ´hà¯T*æ“Þ…¤°¯e ×ÿ\ö<ŸÉo¯ÿ…<;ú¤|åÄ÷äò©­èàÄŸÉçÞv‡³¤˜[¯ÍŠ<¾ùÙLs™Ã:ñÈ ÌÖ°¥îÞ¥£2–TF“ÞV>”K_}Jö~Ñ ˆAý·™éÅ\̳»Í@Ý^†}ßò¯å¯ÅgãùHn—¾''¾ò¤<ñ¬üª%4oUØ÷_¾àèÈNÿ3?iX¿|F\›ö;~þ†a@€ïнv=û¶”§{&üDÏ ýAÞã_–x>“Ú{oË)çì¨#;ÆåÙ?ý¦¼õïvyöÐ0Hºë •Ac¤y®ã‰B>zS·nýӊ̰sÒëºëÄíß ªÝÙ¼.²Dêá;­§¿¤³µÆQë°|Onzߎͳ¯g¢½"ïoÅ<ûAè>Vs»M¸M<Cðö~Fš¯{»÷&ésôÐ%º}-gÐíøù‹?Gºöøn�Ý‹‡ýM™™�6€° Àwèž û„|�ýаmv ©Õ«ó2›ŸˆÄ–á»tïäÉ“„|�}°ÒÌN-\üïNšõ{ë ûÝ<’ðÝ�� }û葺ÔÊ3’m |‰ÿ½aàï>ì¯ç¹ÇwH»vƒ"Û,½š½„ÏHö·…N+—¤Û+Ïfe&·Ë_¯]’+Þ’`œzmA¼ü„ù2e$;}Yª:ao­"— 9ÉäÎJÉ›öí}vFÊÕÛÛgr³²P3³ûÖ«2?ãß>xçñ7"qÝüíY˜•\F/Óå?HöÈço1ÿ¿¥ryÆ¿,+¹œŽÞ÷/ûÛŸIÙ+Hn—1oÂ~þ´œ ^ÿñóžTjÿ'Úëßá¯ûbÏmFçw½í«¼'²$ûšë’=.¥ªžRÅ¿<Ø®))–ÎI>›ñ¯Ÿ”BùƒæíõºsñÍxOzD·Kö�HÂþvp¦£ ùžc¿ §¥´´,K¥iÉÿ$‹Þa?î—båax› <ædf¾*Ë‹žLù!7“;-óÕG¦wÛNm¥e-Ï5ÃxpݸäK÷Ãu¬2%XKOy½Íº…§¡vëïã7§ÄÒ žN»qYcz¬0쇯ɲ ñ~à/ÌK-8iG¦Ùë¿T’|¦9íVô¹×²í1ß¿ñ<_øõàuϧ_®e"Ø.?¸Ï\“êòâMù óÕkóRð�áz¯c½¶n»"ì�„ýíÒ1¬:‚¹tm€¿/¥üxó°Y<�»·m™ß6\º/‘é ²n­ÛýÛ4"ÛhæÎ…ýæ:†gL ¯]l_›×o½Û¾Ö÷$²žñír×9vÛ­xO6@×Eö�HÂþvéVU­"%ï¬) ±ÚôÄ7jäbØ ßÁÿ›Ÿ¬Ûž}#qÝZ·aµ¿ýKV ûîõ]„ý5m{‚ÕÞ-Ù)yR4eLv]¢·ë°Më]¯-¢Û¤û��¤a»´ –MùÊ„ä‹%©TÎ;½ç]„}Ó‹œÉ—üˆÚ+¶6?iÝâ¡wõ¿ýKV ûîövö×»í³vKйqÉæ‹RªÜЬKt»:lÓ¦¼'½CØ� }ûÛ%R2bKA´þý~p'ŠR©?–jé¸S‡oÊx‚ëônÑ2žzP?nkÀµ>|ÒßÞ ™.-úÏà[º"3³ áÿ×Å„ïÄusBïâ]ùå/«ò8ò÷¢ü¶¥ŒÇ”¼ØºxŒ£5û¶ÆßÝvw°løüÑç¾-óëÙö¶ïÉ#óøáÿëÕË2ݨÃÞ®¥ŒÇ¼GaÀߌ÷¤wû��¤a;˜^] «' y?HÚ¿§¤xù¬rýÿë ÏKE9 ‘³ù=æ6þ’;!?‡ûõܹÈc<>sN~NÊÁ 2ëe{öýÇ‹¬[8 Áá€áÇ‘¿¯yÇ›Ûh‚p £—Ùk—ÙA®IÏ}Í“7vå¤à•ƒ™ŠâÏÝõ¶w|OüFDå—R´3ôÌœ—â¿á‘™’3g8·ó×§3ÿ÷—\Q<§L*hôü=é]'EØ� =û�|7��HÂ>€�ß ��Ò‡°¡)jYšc†•¾Šï��éAØà»�@úöøn��>„}�¾��¤a@€ï��éCØï7µŠ\.ä$Ó8KnŸ N<•‘‰b¯NU÷7Ù“|6ã¿7»$W¼%í‡É:'ÓÊLIq¡ÏC;¸û��¤a¿¯˜3Ôj˜í˰oÏ믟=‹o„Ü˧%œ6éïVõEO¦2挲µy)dÇeÊû ¡!ñX½Ã’É—Rõ‘ÿ¸3’Ío±?NH•„}��Ò‡°ßwîK)?Þ§aß_·érþ|Þüû¥Xyd.7‚°¾Kr6ÜÇÿnñH*ÅýNÃ!þ·£¾ Å‰Ñæ…øßØ0Â>��éCØß6¥Zž3å+#’É–ùªöR›ÞýFØwJWt z¶õvNùKfJΜ}CNé<ñµñòþmý}æ´;U–åàq6N{áN—d)©”§vKй]á:ëyX^sÿÎý­T*—¤—lîùp{rßoåFe´Ð\Çp.üƒâUck]õ$™ ?þ:a£ô}R„}��Òƒ°¿MÂò•I?¼>4=àzc!6Öã’/Ý7÷±![�L—kƒ`¡8-3奠Ìf4ïrm ,ÌÊÁ™xØwJ…—„ Ð^÷ƒæùÌчxürY ££Íž|÷ïàÿúøÉæýµ°×G aØo=jÐz¹ÙŽÄr"¬‡¾ÿа�@zö·…)WIì•îÔc}W¼FO¸î½’ÍÏI9èéW¦¦>›—ÙrµÙëÞ Z63yLJKú¨¶v?Ê;…}4\:\ïëö݆a¿×û��¤a[t ôI×-I¥äI1(Ï1aßÅ&ã‡~O*5?õ6ÊxFd$;-^%>cy|½>qIîÙ¯WŠ2ÑrÛX)Ïja¿%Ü»—e<ÛGßSEØ� =ûÛ¢Ã@Ôxˆ jáÇý0_”RåVK8vkÿÝËëÕy™ÕÐ?Zrkvï’®ï±Xo{B)O×a?þ:tx] »éû��¤a›„=åî¼ò~x.^ò~ØÛm¯[ÖR¯^–éF¨÷o7uØÌ5ÿÐo LJ&I¼#æ1uÚKžrÚ”Þ¬WXûŸ›Œp[Êc¦ÍÔ‹aþ]©þò–TÇþþm¬ŒÇçŽ]·oµ©7g¤\{$ÕÒq¦Þì1Â>��éCØß6¥:ZrSœ$j1Rb„úÆ,7~Ã`漌›ÛþoñÞ8%çgrÁ¼÷ál>ŸHÕ›‘Âù™ðq39™™ßXí~ØØ0ëè–Ìe5ær Öµ¾(¥é‰æóº_óä`€®.n9Žû:LHÞ[0_¼Æ¿^•y³½É%JØ}oa�€ô ìðÝ�� }û�|7��HÂ>€�ß ��Ò‡° Àw�€ô!ìðÝ�� }û�|7��HŸ¡ û,,,É‹"ì�Cö- Œï��é1ÔaŸ……%y��é0´a���H;Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥ûè™H¥R –7nˆçyå­·Þ’×^{­eÙ½{·ŒŒŒôdÙ·o_âs¸ë¡‹]G]~ÿûß›µ��HÂ>V¥8àOž<é—^z©¶5¸· Ùo¿ýv$dÛ¥—aÛml¸‹»º¸ëè66t[ô2Ý6{[û���ƒˆ°€ ÊÊm vƒ¼ Ç6kð×Ûÿú׿60øl°¿víZ°öhD»×Á6`8:���úaÈØP¯aõÍ7ß ‚«†XÛ+¯—¹aMñ#îëgöõ£���úa?Å4ØÛ^j ¢èm¨×^kz¦{Ç6ô5MjDÙ”¾'���[…°Ÿ6l&{‚æöÑ2'{$Àm�Øqúž��lÂþ€Òp¯!R{èmM¹þ«ko>Á¾i@ß#=`ß;Û(#ü�€^"ì ‚n¸' ¦CRÃ;·i� ��¶a¿Ùš{-ùÐÒG^¡CêìÓˆíù×÷\ß{ý¿~xß�@7û}F¾ò´=¼ôõoÊr†—öîëgÀÖüë¿|&��ÀZöû€ðm/.½÷H¢Ÿ {´Gƒ¿~fþ�� Âþ6ÑЖðµŠý—R��à"ìo1[‹M8C/Ùàï6¸ ��û[Àöâë`K]t–Ê.°Yô³¥¹í n”�� /Âþ&ÒÐåöâS¦ƒ­¦A_ôjð×�L��† ahù„ Xö XØn:£mxò™�`xö{È ùZªCéú[⣟Uêú�H7Â~ò1hô3ªŸUýÌj‰=ý��¤a4 iP"äcPÙÐoË{ø �.„ýu !m´áªŸeÛp��é@Øï’Ψ£ÓjÙŽzÒDKÒt®~ýŒSÏ�Àà#쯑öÞÛ’ÎH3=/„~Öu0/G®��\„ý5ÐN;‘àƒa¡¥=z‹^~��avšÂþ8!Ö})åǃ±á2.ùÒý𪥒ä3zYF&Š R/6ÌöòSË�Àà!ì·¡=øZ»¬K_MKX_âD&ô¤â‘Ùr• žÓñ)ú]àè��ƒ…°Ÿ@ƒödêì$}§ö÷K±òÈ^(µÊU)U–Ìß@ïÙq+úœ�À` ìÇØú|-]èK a¿¾xEæ®,6{ôëU)Ïæ%Û(÷i–üÔ«e¹p¾ ¹ÉÓrùüaÉL¥ÜQ —¤ÛÜ>“›•…š^ñH*Åýæ1Âç¬WŠ2<Þ=Y*MK&¸.#Ùü©ðþÙ)÷Ei9~GüNug¿×Ü/@¿"ì;t–Ýy÷õl;Ú|óS+K±X–š¹ºÎwÉ”÷ÔƒÛ›:~§®?{äˆäüÿgò%YÒ _žñ2]Z”å Ì;µÿö~AÃÀþÐÙ8û|’÷d©ÑpKŒ6ú!ðc¨%e€þCØ7&¼Øà™–ÒÃ÷å©É¢Û‰n€ôú¥ºé…·¡Þ¿:ø;+S3¥æýjóRÈf$3å—…·i†ýèßfpãˆ@ôïf¯?a?í6þÑ£IžäýÏžm,6­¥ŸËI>‡Ø<„}�‚°ïÓÒíшéaÿyÉ¿1—P.czÚƒðýPÊ…IÛ&¥P~è_g{åíßÊ^fzüoÛsþ Åv}ì‚h¯?ÒnC?øì˜ÏYð÷s¹QþgñÊE¹â7xMAØ0 †>ìkHѰÒ×¥;®FØ?,ÞâcsaT½z]f ÚýLN —+¦Ç4Þ+¯ÌeæH@ãÌÞÆý{ÙŽhÓ0¨ Þ郞 ø»›µ*Ö04Ÿ3{jÝÌÿì7ûyzˆ°`@ uØ×ÙEô„A};7Aس޾´¾èÉÔhNfæ¦à  N¯|ÀôÜaÿ‘,z‡%“™’âB¹š=ù×eáÊ5)Õ^þç¤à]—Jí§×Iª¥ã’íÐAzéù(t–žµOËi™±°ßhtnÈc©–çdúÈ+òÆŒ'å*ŸGlÂ>€1Ôa_§ÔeÔ+ß“c:ðÖüÝÂÔ߇=š:CΜ ;íKlêÕk2ÌÂãÞ>4üB6ï5ým ?v£’}cNŠS: Ï´xLÿ9´ôl»ú×$”zöƒF­>n5(cÛðÑ aÀ€Ú°¯gÄÕ^ýT ¨^•ù™i9Vº- ¥ r¾óÃ}spn¯…½þüÐ!¤ß%-çYÓÙ¦73ì[°`@ eØ·¡d ä®™é¹wJpÂúqÉæ{8ˉeÿòC‡¦µ7¢7³ŒØ„}�b(þžhÐÊwÖ¤ådZ»$W¸$•^Ÿàªñ#gž'2àÃNËyô;ÖÙ& Ð6ýìÚýl¸ðÙЯ†.ìk£î˜»›9ÀZÙ®VíÝï8õæ’,§$ãø¶ãQgh®KmaVrs¹ðV��À1ta_{ß|óMó€Í ½û«ÏrÕé¤Z¦LŒ°�À† ]Ø×zâ¾?K.0àlí>��k³"Þÿ©üÝßýTÞ´b.C/ UØ×¹`kа€v>“Úí¿•£“c‘±#;‰W]6·I‹»âåF›Û8Zrâ&.KÕ;èßæ` _ƒí5Ta_ç�_ó<àØ$KR)%Ÿ=Üø2/— 2Ú_î~Y´ÐïÚêutæ¥ÏÉ3§þI> .·ÁȨ`ÉJ¡Ü,†[©-ÈÅÂËòôèŽðú»eÿëEy{î¿ÈçÛ®U,—¥0ê>§¿ì|Y¼?57°jR.d£·k,;dtòÏäû·?Ûî“në/£ûäè÷oI-ÒÙ›ôøcò¢w§ñ˜¡Ö×i´Pö/U±º•ûÿ`R‚/ÈWN]–Êý?ø¬Èòý•ò?ßmçZ¬ÿ3"+KåâŒzú s}FÆ÷¿.Å·ß’üçc·íà}&ìo¹¡ ûZGœ®é6O87¿îPø2§–òèwÀÆ5ÂðÎeîÝ0Ê…L@ÊyR5—¨•®È×ý�·û…‚üàê¿Èýå?ÈýÊ5ùá©C²{‡ÿ8ë û åι)Ù¹?/¯ïRž›û×äq3UOr‘ý½†Ú_É dçžoKù7Ùjh—œw×üí[þHnÿ¸ ûw~Éž› £V;÷Ëë¯ï—ÏÍÉ{I+òiEæŒË¾âm‰4KVîÊÅ—¿(ÏžùgÙÒ TƒFSoÃt·ŸYùüäë$;wOIá? Ë÷ÿE~úÃSrp·Ž¥Úê°Í2Ta_[­«ÏÿÍîûi§3^é¬<À°ÐΤÍêT ö›ŸŸ’ü«OÉØW,÷9!È­Ü“ÒÑ/Êî£?–êr¼›ø3ù¸ôgò¹®OoÉ™gÆåÐÅäÞÅWdçÞïÈÍÇ ]Ò-aßøÝU9ö¹/É©›¿3¨„°x Wí•'OÝô×>îwrûÌ—eç¡‹rïÞE9´sÒ̤€º"ŸÜüŽ<“qB|&J¯ËØž?—ëK­¼vŸI­ò÷R84Ñ<:¡GQò)o¿·=Òtd¤±Œ&lûÚuõ±Û¾ûu¹TÕ# Q+—äèç6ö—?”ëÅ×eÿ¸™¦[_cß“ë?üzkØoyM’òÙ½þþ‹|ëÕgd‡!z¶ ?y·,ß}õKÁk¿ãéoÈ; Û3ì†&ìÛ)7×’T.ÏH.ó¼Îë¿þÞ=VmA¼ü„ù¢d$;}YªÚ»Q«Èe=“n¼ép~ͤz»qûLnVÌ\üõê5™Éí Ç}ü qg]Ù%Ïçž“Œý2ë¹¼‚äv™/OÖWŸï’r{åù¬¹~—䊷ÂÙ^¯•Ù™ÓrìTY–ãë¹¾¦’Ÿ_ÓÕÞ‹¶Öº^ú|ëÃ3)‡gOŽ<þ6Ðu†…†üðû;ÒóÐo{DqÇ“wNÈÉëLˆl rAOw$ÔFm¼wÕÎåoËž¯ÈÅ{˲òà’¼šÉʉëvê\G›°ÞgŸœ¹íö@· û+¿‘K¯î–§ÎÜj ûŸüB {žô‹²Ün\vø™)c‰YùH®~í;úŽ<ð_¼•¥ŸÉÉ=_”£¥{Ñ@Þ•eùè''åé{å…Ây¹Z¹ï_¢GQ®Ê¹¯}YFŸ8(s•„=ðfõì¯ñ3"+ï˹{ÊžŒ¬ßò¯å¯MÊÏ~]Î]ÿ@j+5¹[þ±üõ+ÐýïG§Ï^»ÆaÀþ/Ê«ßý'¹÷à†üåW´üèIyá/.÷~{KŠþïjÛ÷ˆ Í/±íqTÁ—Ø o‘“Ù³çêÙGÉ¢wØœ¬è¡TŠûßLNf櫲¼èÉ”N3¹Ó2_}$µòŒÍ:˜ÚpR¦K‹þ#Ú©ãg4íT‡©K—4x\¬÷¢”¦5 †·klWðåÔ›õ}à_nz ÂüIø¸Á¶,¯Õ¨yÝtêÆƒ3eyYíÙ‡ƒÀýXª¥ãþó†S<>îø^tàô^´[¯ ¿‡ÁëðœYoû‚ëÌ\öÛ`Móí)á†}»èTϽ8¯K3 ë~ãyÙ¹¯(•O5¦Åƒœù=Ø7'ï¯?Á®â¡\?‘uöyæïW/!:"Þ–ïKåçÿÝ~2öâ9y/Ø+ö54ÿ\.ýõW%;ö²œ{/áüFÇõoÊ®Æï”ýû5¹ô ¹§~¥úCyyìËrêæ]¹yêË2öò¥º‘×ié'rll¯¼zñŽÿNĬ<”›ßÙ/;œ“;ñçØÄ°¿úgÄœÛä?ÊÜû½î÷?WËØØëþoqì=øô¶÷}~ãaÿ+çänðz~*wϽ(#ÏzÂv"@Øö¬öK`BwÒ‡:ø²ØÈ})åÇ›·3Á´1@ɹm³Aá.Ý™õvβ>Ýóål|ù{´¾ÁެyH´ùœÃõÉæe¶\õ×Ί®G8¶À= ¾Y¯`;ºx/âÚ®W°uMë|ýl4(Ü¥9 mkmVIВ¾]6úƒ}…ÝO½Ù_0½²ñ€³ù'ì•JŽ]ýw{‰<¾ùÙ›4P7Ø?Å^ ¤ã¼Ü®Å¹;ÐÔ.:`ôë‘Á¼ ¦'ìØOš-oÈ©½öµIò‰¼;÷¢|î‹Yy*¯mïÖŠüîê×åsíJ˜|+þö¿°#!TojØ÷ÿèøñïKÂoφiÉÕS²÷Ô 1gHqüAÞŸûûm?ë›ÿÙT„ý † ³V‘’wÖ”ËØHüváδ5(> ¿$«~ù»íÙo]Ïèv˜/gãËߣõ v¤mBµ[.“¯¢?Ñõoï†}³^‘ëís·nc[ÖKmè=ôoücuŸ½¤=ûÝœÖÏ Kz ýë9Úì+ûISoôžþ!Üw5ö&€:,½µÖèïú¦\w×5üc­uÝð¶ò@þ±ðœŒòäNËXåöì&KÿøòÌØ+âÝI:»ÔèǡÂþíêªG¿”SO^ö~±Ár5„Ëv¡~³Ã~Çψ/3áþÆõŠûÆÅ︟—ñ×{µ¿a MØüš}óEN ˜a9J.3!ùbÉoØœo†¿.‚bøø½.ù0¥9ìñíˆù{´¾«…j_½:/³úƒçŽ®Gسï>vt½Ú¿«h»^{ò†?²zIÑôïÐN=ûºläHW°¯pCÒò»rî…qyæÔÏåÝXÀ Bpæy?ÈmBårPëï}w–x/w,¼…uò{äå‹wzÞcAÑo\?ù%y"±Ôæq0PPž¸´¨«:Òn¬¡g?hlCÏ~pAûψ¬,ÊÅC{Zg'Ú0=½‡žý>3T¿Äº\ñÒ·¬Ä„Áàÿ¶¾ÜîDÜÛéÃDK@"¡6¨ÏÈHö¸”üð>çY™ÝPËßÖï’ÜÌ5©.Ûš}Ýë¶Ôb­o¤\ƾvÚ‹QówGÌ U³nÁs»õóþ5û»]¯^–éì^þ;½þŸ´]¯û½yíØ…‘ 3–Á·tEffÂÿo!fãÁ°iöõs:íF´9?h~ê÷÷eȱ?ûr,È…QŸh׃¾R“ßü¦–¶WìovLɹ;­QnåÁ;rtìéhO{Kxs{œ“Êx¢!<|̧ZÑûÁ]ràÜû­ÛÌFôT‡š½ û¾µÔì'eØŠ°ßé3â¿¿½ú ÙýD»#'ŸIí7÷Ö1ç¿ÿþ^zM2»¿!W{ý³œy¶5û„ý® UØäúá°ØüxŒæ¥p†öïÜßJ%èöÿ¯ƒ8/åH0€sFÎú-ìæíNH!g{düÀyî\Ð þ­;%iΚ£—¹3ÐlÄ’Tì,2#“r¢ðŠŒššùæ`WiÙ®u®ïã°wÛÞîD!ß|Ž‘ÿ,ßúÖufÑ ½F×#ÜEfúÑÇöüÂjïE‡Œéuo_¯))^>Ûƒ÷Ð_Ãø¬>ù9)¡­Å<û6ñ°¯!ÿÚµkæÚi r¾ çÛ|×cûž•ßþL Ïî’'¾rBþæ_ÊÝÚgáê?ž“o½°W2‡.:S3®UMnžš §¹L¼ïÇR.|):P7)¼­|(—¾úTBMR_–{—ŽÊXdN~;F œ ¨•™-¨í@݆}ùƒTßùFël<·ÿAþæÄóòÄ,Å_%Œ7Ø’°ïëð‘•ûr½°_FŸx^NüÍÿò]¿¨¨ú#™ûÖ”ìδ{}W±ü¾x‡vûŸ½oʳñüHNù¯ùçG?/;û[n¨Â>gô¶ß7 ö{òÃ`+›qÂÒʽËWÇv$œ•Ú¿É¥S‡›gÐÕÁ®Ïþ‰œx늼ß28v‘Î ]¢A5Ò ¢K¼#Ä_¥‡ÚãüîwåÀNs¿îw[îïÂà„Xö ¯ÿ—äüÐØ¸¿4××i=ƒ é^g–NásMþ Ýü»Öyö_/Ê?¼¿óì¯ÿ3"+KòÞ¥ï8gБãÏÉŸžx«uÝ»ÐòÙÛ¡¡¿—_½óMóÙm5Ý<wëâ¾&ÎmƒmYíoXCöµ§ñ¥—^2ØLx~ýë_›¿€ôÓÏ{ïB>�ôÆP…}µžÙA€µ1c'=±eýGƒC{85ì�€í5ta_K tê3�›G¿c”ð��°ý†.ìk¯¾ö²Ò»l; gÎ�`û ]ØWÚëHï>°9Nž<I¯>0Ú XM\Ö;xÏH* eØ×GíyÔi8~¥ß)zõ�èCöÕÛo¿ÌÌ“ŽP²$•Ë:o|»¹i·O8Wý9çˆN«Ö˜+6eXîò­ü±`þÆôþm{vI®pNJ÷\±]œÍ6‰3G}&7+ µv'¨;süû뜤k¸éw©'��½3´a_é tÀî kÎoÜ_a?<ëì¤s&W={lF&Šñ³¹>’Jñys¹ ÑÎýT07±{ˆÐoà”ŠaØÎLIqÁ üëœ5w\²Ó—¥ZÏD›™òd1!ï×=™Ê˜³Ôgò—)ïƒØv -ßÑ��ô¡û¶œgðçE®û9zZ2ýöƒàœà–Àné‰0^q.÷¿žxtZJKæÞmî†n¿¡3Q”Ê“vpø‘ýR¬„§ÿݤ“ýÎsÆÿ>z¤L{õ)ß� ¿ uØWz-Ùˆ“ÿÔ«RžÍKÖ–°Ì\“j# kï¾ ûKRñ¦Ííü%{\JÕÇþåNéIfJΜ}CNglÞ>“›‘³ÇÎnx>ø (gœ°®ÖöÕ})å÷6´½¯ÞNϦ†òzµ,^!'»‚3*êö^’Bn¯äŠ?2å9É®Kµ¥ÇœyÏ ¿ís†¥GîY£¯ÿpÑÆ²6š9��ýgèþŒ°òX½Ã’ÉÎH¹¶,µòŒΛ§„Í \f\ò¥û¦çÛ–Îh0ž .×€¿Pœ–½¿ÞÞö¢×nIñàéXØ_ådQ-!×ôtÇëæ» û&|ÛÞòŽ÷ÕÓcëö¾ßXÏ ˆ×¤8¡^1§e¾Z _ÃFC),Õ ¾ÙF·w>x΄²£„ËÃ×?é(@ºéwF¿;Ôé�ПûFßþ ¸ú!µ%ì†Ú÷,»½Ðaoy6?'å §ß’Ÿo)ؘ֞ï@Wa?¶Mk ûÚˆ‰=w°mÍû…¥9¶‘dîë†}·Ò1ìG×eþ úƒ_�@zö}øÛ†ÝPkØ×¬žÍÌ2aøugÉø¡ß“J0ÛŒ[öã‡~o!6³L·=û[ö£e<-Ï¿_0³ORØwÿÞ´ýs¶n_ûÆV:iO>A�€þGر¿ïBLг?ÚÚËlD¦–âäÆý0_”RåVBð~,Õò\ú#—7Æ4˃֧MØ7e5-—}Ës®%ìÛºÍYsÖöm¯³wžºÉúö;��ZöØ^Ëþ: ¨ ”î4“KW¥xAC¬ ­&˜†!9ü8ý¥ Ø~ž:lîo¦–Ì—dÉÀSvNù`ɽ¦$f½ÚÔì7¶!'3óf}ÛÀÆ"¸IÙlSÛš}wêÍÃâ-š²$Ó ¶KÿŽM÷-ã±ëcÆ+Ø©7 óR«/Jizb•©7'ýÇyh^ãá˜zS§ªíÛ£_�� a¿ 3zÒ-7¼o¦ôƒñüLN2¦|Æžô) ÷¦¤F{©jÏþ.ÿoˆz^ŠGÆM#á‹÷Æ)9o#´ê‡äêEy£0+3û4gùY¯ÄÙxTdF!]´œ(6† Ž/BzÛ“jMH¾xѹo´ÜhôDANŒÚÛú … çqFOôe{÷ƒ“€éëà–9)S.ÔhÀ<–êüiÉé´Ÿ‰¥Oé¢ß=/…~'<x`.��ýްß û:x¥R1—bM’æÙïBÐs>êôØcÛØ#]o¾ù&óè�0`ûk ' 꿲žþgÏ Û]¯w›3èbËi°·e;L­ �À`"쯑-ë¡—¿;õê¼Ìæw1KŽ+8جéǶÐϸ~Öµt‡²��a¿K¶—Ÿ’¤‘{-]ÓÏ8³í��0øûëà" ÿÀ Ó†«–©Ñ� ]û ¥¶´‡^P *ýìÚ’¦Ô� ]û=`áƒÄýÜ2��€t"ì÷¡ƒ€Ï)��ð¿ âaŠúgl7[“¯ŸI-=#ä�0û›H•ÖAë G¯œ) ±Õ´_ÜêgP?‹L �Àp!ìo¸FFF‚Y|¨ÆfÒ^|·¡©Ÿ=š�� 'ÂþÒ¦Suj)…íígöôŠÛ‹oKu(!�`¸ö·I<˜i#€ÞWtK?GÚh´cDh@��a¿hY–÷h™Á«q¾-Ó¡4 ��$!ì÷[kíöøÓS ¥až€��ºEØïcæ4Ô¹Oôú§Ÿ¾Çz„Gøè{oKt˜M��tƒ°? ´w_ßΰbË}4üiƒ€A˜ƒOý=ªcwô)é��AØPÚë'IЇzþƒ6ÞÜp¯ï¡¾—úžR¶��z…°Ÿnø×^a]lxÔëèýß>ÚøÒ#0nãL¾í¹'Ü�€ÍBØO)[¢½ý6`º �½ŽÙ{Ú°r_÷xÃKC?G^��ÀV!ì ÷n³-Ñ ·À‘€Î4¬ëk¤½òI¯¥öØëåz‚=��ØN„}¡Ô64¨jxÕàê6´§Z¯×Û¥=Äj£H·Q>ºÍ¶—^_ ÷‰ÖÛÛׄ£$�� öÑ‘†^]4Ôê¢!W ¼¶A`/³=Úv±÷µËvÐ#î:ØF]ìºÛ ¯‹öÒÇ·GïK ��ƒ†° qÃt» m¦ÝÅë^,nÄ]ÜÛÄ$öH….���iCØÇ¶²õï½Xg���EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rаuûõ¯-•J¥±xžYÞzë-yíµ×:.»wï–‘‘‘Äeß¾}‰÷q}÷9ß~ûíÈ:=xðÀ¬-��Àð!죅 Êœ5@¿ùæ›pí†óxwCwRðNZ~ÿûß›gm¥A=é>îÎx£ÝúÚFµkׂÇц ��@Úö‡ Ñ6ÌÛ�lCñK/½ü­!_¯wCû ÷”»G"lãÀ6dt›íöëß'OžŒl{§F ��@¿"짘†Û7n¡Uë ´ÚÛí†y½ 6¤¯¾Úãï6܆€}Ýôv” �€~FØO žÚ mËXÜP¯ÁÔ–«`ýlCÀ}õ5¶¯³^¦¯3%A�� _öö&k¨tƒ½Ö£ÛÒ ¤ôÒo[¥¯½¾ú^Ø£�z™9áý���Û°?�´§X{“mt{ì öýI�¶„Êmi 6Ô(ÿ��[°ß‡lϽC[&¢A_?%"ƒË–�é{©ï©þi°�€Í@Øïµ,Ç¢%ܧŸ¾·nÏ¿¾÷ú7ï9��èÂþ6Ñž\-ó°½÷ÚË«a_/Ãðq?úY°½þ|��ÀFö·˜–lh¯½íÉ¥÷Iô3¡? ýÚ$ø�€õ ìo·ß|hb­’‚? D��°„ýM¢a^ë¯mI†þŸ€²Áß–~Ñp��ö{L{ñí€KíÕ·ÀfÐÏš- Óù¬�€8Â~èàJíaµ½øú¦RÄV‰Eb*O��`ö7@C–-©ÐÞ|Pb»iÐ×Ï¢~&µ@è�`¸ö×AC¾–èØRK¢ßhI¡��ö»ù ŒD¿³ŸYB?��ɰ¿4(i`"äcégÖíé��ð¿ ­Ö€¤A‰r :[Þ£yc�@úöÛÐ`O(BZ¹XŽT�^„ýZæ uùÔ8#Íô³mg“Òéb�@úöÚ›ÿÒK/ %;ZÚ£G°èå� }û†-k`ð"†‘ÛËOÙ��é1ôa_CŽšP{8·×})åǃ¢p—|é~xÕRIò½,#Å©‡—=¥A_¿ ü�Ààê°¯A_Kv´|¡ojóë RœÈDƒ~à‘T¼32[®ô±©´”Ç–³õÍ÷��¬ËІ}­É×LíÕï+°¿_Š•GöB©U®J©²dþ6—=âÅø��ÛP†}ôûr’„°__¼"sW=úõê¼Ìæ'üÛØrÉLKi©î_W– ç ’›<-—Ï–ÌDQ*Á—¤ryFrA)Ð.ÉoIM«R”‰à1LyyþL¾äßÃ-+šüÙ7üûg$[˜î‹ô³%n~��ÓÐ…}ôu@n_jÔæ›°_+K±Xn†kÛÈoñ‘óiÉØÛ:uýÙ#G‚`†ö‡R.LÊHö¸”ª~è/îo>~#лጠ°Ï—¯r/¼¯iX`8ØÁë~��ÏP…ý¾úÊv Ôß— §~$‹N®¶=ñaˆd‚{³¾?¼>+S3%s¿ºß^˜‘ìÈ.™ò>ðÿ²÷1áÞ†ùà@=ÚxP‘ðoîKØ:~��ÓЄ}­AÖ°Ò÷'j„ýç%ÿÆœ”k±P„óÑ0|׿¥Õ^÷s;Ö'¥P~ÞÞöÜ7zôï°q-á ƒ¿Þ×>žmL˜û6®Ç0Ñz´ �À`š°¯!¥ïã&i„}-Óyl.t=–êü÷¤0•­¥ÏäfärcànB7 ðã»î#½üKR-ÏIÞo<ØÛ¶4 =™ÊØ#FúÒÙ«��À`аo{$AÆÝžy×cYôËhî´ÌW‘’ÃôÖ¾þxS»ü¬,è‘€FOþY)/\—ùÒé°!Pðd^nOÿò¢”¦'$3åEÊŠ0\´W_¿Kœ|ÃÇt~ø G8 ˆÔ‡}=Q––ïèÜრ^ùžkÛsnëïÍÎ3;/ÕàÆ õö=pÚÌÂãÞÞgÂ8øvÉ44â3õLÊçÏȔΓ÷¤/+Âбc_¨ßÇ0 ÷‹„}�ƒ#õaß¾}ý= · õê5™É¤T¹%%ï{RÈùA½åä[½bJ|øACû²þ£eKRñ¦ÃF«ihöŒÝe�96aÀ IuØ×RƒôÔ‡‡%8¾°†¾]ÉÏÙÁ¿ü ¡ ûÝ7¤Í¨`ÈrøÿÆ�ó^¸/W¼ëfÌ Ð{„}�ƒ&µaßξ£e<iÑr2­LN —+=?ÁUãÇ,Xbc��C¿[zä¬;ÑAäágmãG§¢ŸY³0E,6aÀ ImØ×2f 6—~ǺêÝ·³MEÂ~s¶¨ ©W¥<{\ŽL—¯Ü›ôaÀ ImØ×Ç7n˜¿�l úÝÔîǃRï¾)ÒÇ]Ò´½›4–ÃŽ°`Ф2ìë,!Ý—�Xnf»Ú¼°l Â>€A“ʰ¯sun}�›OO´µæ3Sof°û�M*þÖSÂ3ˆjR.de$çIÕ\’(¨ÍÎKv´ åesYC]j•KRÈ한w×\†Í¤¥<'Ož4­fsè›/vR­`á³  ÿ¥2ìÒI´Ð­e©zÃÚ¤°¿\–¨þö·Hwes«L½Y»%ÅÜ.çLÍöDrÉæÍÌSK²Pœòã°x‹ g’�� © û‘f&ð'öìû‚RÂþVêî;×á¤Zæü„}��z#u©Xçþ^ÿ™=·“€.ÏH.ó¼Îë¿~ÊLIqAƒ–¦x’ד\‡Ž'dº´è_ꔬ$^0¿†¢ëRmÜ~—Ý­Æ\üÁYxƒ3ﺿ~Ë傌ëä/Aù)Åñÿ-”e¹¶`ÖKoã¯ÛôåpJÄZE.r’É>/¹`=ÊßþãuñüËvéýôÁÛÝ·öÈÙ3~èÓëÝÐôî;a¿^•ùÿ¹‚lj¾mÙõ{¾ çÍ}›'4sÂjðÜÇ¥TÕÐißCÿu-3¯¿žôìƒæí#¯ùc©ÎŸßëÈã=š¦ç¶���ý%•aç×o†fFë RœÈ˜‹æì¹úÿúâMùa]kž—ÃÛ„Añ´ÌWk²èöƒ©ÿ3×ü`üÐÞ“Íð ×tÒ4Ìu-'j†õäå xU·;ݬ¥ã~u.×°=©¥¦L#xŽGfÝöK±r¿ùŽX#Á_Ãäû>Ò'þ Φô£ñX‘°¯Ûùœi(Ø^âÕêl×À<G¤¶<8rþ?<‹qxâ±e;pϾþËæ½Êädf¾*uÓkm·/XÛP°=Ú:PU¿si:�l•ÿ7ìûG÷5;΂å yÁ»#+æ6ÀFöû† ·ÐÜn°j¬„%V²†Ò¬ÊÚw½m¤¾±ØÛn@Ð0yΜ‡áŸ•Y9˜tÖݪ'¹Æó™Án‘í»+^nÔ„á˜È}[Ëx"Ûí†ýF tI|ŽˆØúÅ4¸ëI¥¸ßYO÷¶mUÎ6 ­Ù×Ú}�›Åì÷̾bÇ3ß‘›Ÿ˜(ì£û’È>nåc©\œ‘CO?a®ÏÈøþ×¥øö[’ÿüz’öacòbB@Mþí1Ëè>9úý[R³wj³Ï—1™<ú·r»ö™¹±Zûz´¼NýmôµÝÚ1_áïÄίœ’w*÷Ã÷lù¾TÊ·änd;×¢ß>#è© ûZJ %ƒ(Ü!¶ ûZ²sE¼b>,±;©xmŠíN Þ3×&„6–¤û‡;«°WZÿÌôÀµŠ”¼³¦¬Å®[|ûTBØO¼¯»]áÍ"Ûí¾&ÁåëÙqÇÖ¯%ì/I¥äIÑ”Ùu޾‡ñõt·/ütû—¾@Zic¶«3Eo¦F~BÌUäSsq ØßÅöÑ+¿‘Ÿ|ýdçî))üà§R¹ÿ?Kþ‹üô‡§äànw¿º~+wÎÉûåõ×ýÐúÜœ¼—X¨û¼ñè¾xù#¹ýã‚ìßù%>6*³ïŒìÿ ÷oÿH ûwÉžÂ/äs©kmëñ‰¼;÷¢dö¥ò©ÛøTª¿*cÏþ•üêQK3a…¿5‘ß½êÃ϶W*¡5x´ûf@b6/ÅÒm©¸rÍaß>þæLô¬kÉÍÃÛR<8kæŸö( ³’ËLH¾X’Jå¼³n«…ýN÷m û‘×Î}MÌN¯ûò˜a?(—l¾(¥Ê­Heíaß<~KÕàÑ6aivtŒôGèöE»åOò,ccGåÒ=³T-Aî3yPz]Æv¿.—ª0—5­|\’£ŸÛhûÜ>óeÙyè¢Ü»wQ휔S7“/!ìÈÕc{åÉS7ýµµ’¾Z‘ß]ýº|îÉSr³¥Ó{­ëáûäŸäÔ3ã‘Þÿ•ïÈѱ/ÉÉë6T:³R[‹…—åéÑæs£=äGåÌÛÿÖ<z0¿æ³Õ²´l{úá3<»MÍÇ'ëy¦*ÿøýSr4÷´s}Fv¿ðùIlÝ¢a{ùÿ“òw§e2xí?'OýŠ|´•í¶>–Ê_h ;xõÃñg>òÇúÅ ëÂëõE)MO4¿A¹N%RÆcÊHl 4uáÍ¥úœgeÖí…_¯ ”g\žÏí—ÉF Ù™sªÛÚ~»n e<‘q îk~"5û~ø¶³µ;ûš˜± A;¥+23›Pf[?çu~ìdÂñõêe™vêðÃ÷ÐŽ-ˆ•ñD¶ÏŽpûÏ9snàNÔ3¸¥sÀÚ4B‰Y¶5ôAÎßþâ–x/~Aöœü™,Ù@r+ï˹{’KZ”},ÂÖå“_HaÏ“rè⢬¬üF.½:.»Nü,¡ç½MØî³[ž:sk aߦ—^“ÌSgäv<ì¯y=ÔgòÛ«ßÝc¯Kéÿ@+äúÉ/ÉØÑwäÁÂáÊGWäëO?á‡Ó‚üàê¿Èýå• ‡ü깯˳£ãòÂÜmÿW!.ü­ë}Ï~?|FVä“ò·eOæ5¹¤¯³c%©AæÿÎÝ{@^ÿËÿW®Þ¼ë7ŽôhÎåTîIÙÑîHY¿o½óS™;ôŒ<ýÊ“xÿ¡Ô~õßdÿÎCN£f¸¥2ìwuFÏ>i¥Žæ¥pÂiñçþJ.kϾÿÿLî”\*¾âÿ—äΜ–|£¶qTr…NKú œóN8©SK¢³úägçMÐܨXÃ"`{çýçÒAª—ŠrÄÿ&7#gó{Ì:ؘh/ǨÜ&Þ×ÌXcO¬ÜÞHöŸ2øâ‡ÑhíÇgõÉÏI9hì´[—9á¾ÎÅ á€ààyÏKñˆß(ðgÎqzrR(äÌÿý%W/²}ºÍñY}ò2[®®Òé?œ±i×øÇ–m ýNøú´R”};Ÿ—bÅDÚx :)þ£Ì½ßÚcÛ~˜»þMÙÕØïÛ¿[Ã]kØ÷ƒ\åçr鯿*Ù±—åÜ{n,‡} Íùù¥³òJv¯¼xî_£¥)]­‡±rW.¾ü”<sª,ÿ~ó;òÌØWåb5ú¨Ýùw¹zì‹2öêEùÐùQŸIíæÿ-Ïswâ¿=›öûá3òém)îÛkL<–;ç¦:”ZE}vûŒ<µãOåâG ïe°­;ett¯¼PüçØÑX© ûzöÜÁœ~<ú][íŒÕIA‰…%-Ë–Pw‚œÈÇ~Pü’ì|Ñ“5äă\üï^3=ècÇ~Ò,“||CNíýBBOqXÆ}í´ÄåëòýÛÇnkÂ~ä¶#²cü€sóZ]­‡µ"Ÿ¾û]9ð¹=’}êÉÖÚönýîªû\‡Ò¡•;â½ð¤ì›û·ØúlnØßöψÿª~è½,7Ø›J€à(Œ¹¨£Nëlë.?è'|.Ðʰoér]`séwlPÄkî²åe£‘ çgÈ Öü)9Zº'+ñPP[VØ{a)FVN\gb …µó­enÏþg²ô!ÏŒ½"Þ¤u‹öì¯,ý\ Ï<%‡¼÷qwëáZ’›§öÉÈžoKÙÎZ³^«†æv¡~³Ãþö~FÔʃKòjÆ6„VäñÍïÈÞ±ãr5>^MkîÏ”\0(8þ]ëö›ÛŠd©U§¥<Z^�$i YØq¬•~Ï(áAÚ%í'¶­n¿%Ü<’;çJF§Y|÷Ñ ·²(í‘}ÅÛëµN–bìHxmÂ%ÞË+ã1uòO¼üC©¶äìxß8¸þç²ç‰¤R›n×ÃÕnlÀ:¬Ú³¯ïÅîmèÙWÛõ±ÊõϘY”Üÿ»jò«3dì+ßlŒwè4¤od’°¿!© û¶Ç‘³z›ƒ#hnxÜöy’ÂMP=.޽&_Ž„"3õ‰v=èŸIí7÷ÖWþ”bì’çÞo-ÅX¹'¥£OÅȶÐô8›ËB !Ü<fË Ú®×ÃÕ𿦚ýÿ$sïÅkã·"ìû¶ã3Ò°â?ý_Ê3cÇå'ÿçGòjæËræöïÌuÆg7åÔ“_”×Ý)X}+˯Š,Oö7$µa_Ñ»lý~é¤]_„|+1ܘžï A E+÷åza¿Œ>ñ¼œø›ÿ!å»5YÑÞÒŸþHæ¾5%»3¯ÈEwjÆ51¥;ÛÝ7i–Ö°¯aûÞ¥£2ÖRF“ÂWîýX¾:öGþ¶Û@¸žõpõ2ì¯Èrõ²|­e6žÛRú›ò•'ÆÛ Ý¢°¿åŸ‘˜`ÖŸqùÒdV2ÎÉøë`fO¼pF®Þ1Ïõ¼^ÈÊžÉ y’°¿!©ûÚã¨;izÞÒÁˆôêcXôEÈ·Á4kvqBÎʇré«:ËYB(ZY’÷.}Ç9;ªv}NþôÄ[òï/ù1µa8u×#TƒðÕ¼N×ñD!-›lœ{Ä÷iEæØõò×ýîõ–û7ƒ\xB¬ë¢ËjëÑ|œ¤ÁÂñÛ¬‡î?º!^Ë<û¯KñÞýÖ×1²¬«Ò/Ÿ‘$~Ãîâ+þ{÷¤¼zé7‰·R»%ß?ºÏ|VvÈèÓ/Káâ‚Ô‚qá:Ù÷¸c)®ûùB Õa_iÏ>s€½¥ƒ9j�@ÿK}ØWLj¹\ÈI¦'‡7*¡ç ±^±ëÖ³¾Îœø9õ¹ç Ø%9vË\ƒÍ¥r™Ú�€Á0aß– ÞYu•s¨¯/¾²gõyp6XWxr­Ì”'‹m§;k£þxSãæŒ²á™oÛ=N}Ñ“©Œ9+npfàq™ò>¸R OŸò��ÇP„}¥5—R¶ìÄ'=u_Jùñ> ûʬÓDQ*‘„­aÿغæì­WŠ21Òœï7þw“9[oã¹ãc3ØFój'Ð��ých¾zûí·ƒ°Ò·ÓqÖ«RžÍ=æAiÊÌ5©áÕôî۰èàŸ°'\¯X’Š7ö¸çfäì±³R^vÊ]2SræìrjC¬º,•¦%32)…²s"íeŸš5¡Û-µÑu5=ñÁíLiRöyÉ×ÿgùÖ·þst`M0Àj46{ƒ W¹ƒ±ÂÁ:mFëcÃlÐïŠ�zÊ�¹ú’´OFúµÔÜfé«ÎI UØW:U Ö÷_à,‹Þa?üÎH¹¶lÊdì(z7ì›™–ÒÒ£ð>¶÷{©$ùQ½ÜÓµ[R<xÚÎÚ?)ùÒ}ÿq–d¡8-3ñ°ß2kAli÷¥ Êg2N)®Û1™,.„Þôþ×%:»Lï»Sšl¯ÞÚ\æöÎë•‘‰Æã —‡asÏ8¬lÐg@.��ƒgè¾ÒÀ¯s&÷UI91HrI¬gßôȘF†ýÌ„ägçMO¿ÒÀ½W²ù9)W›ËzÅ”Ïd‹·¨­Ïu°Mà6ƒw=÷¦ ¨±M ÛØ1ìG{—û›Ã}æÓ�`0 eØW:£ˆ†˜¾ ü ¶)!×*RòΚ{ YÆ£%3yoÁ¿§[J“ñC¿'•ø 7Ás;=ùñ¥]Ͼ/¬«7\“ñºy}þ+âMyR#ìÇ·)ÞЋڽ&”ñlÐNé��ƒmhþ²ƒvû"Ì=û£­½Ø7ûáyaVrÚƒ_,ùì|³gßjÔþ»—?–jy.ý‘l˜é¡Ÿ8-—ÏOËtP.diÙДd²y)–nû 7Ì·6` Û?ô;¡ =‚>��ƒm¨Ã¾²½—ÚÓ¿½lIÌ”Ìd–KW¥xA{µÍÀ·Þ=ø¿àKÇ›¡¾êÉ”›>¨§ß+ùRY¼©Ãæ1Ít–-Óen„¨;⯻/`¹e8õE)MOt(ãñÙ©7 óR3·ï<õf88¸^½,ÓL½Ù:–EKvúê¨��X·¡ûJç ×A»ºlëüáõªÌÏäÂàì/áI¥–Âpo.õƒðàg_ÃuNf.åˆÿÿà¶• òFaVfr»üÛÚÙ|ü†Â§ä¼yÜLî´Ì÷ºv¿e ®ezöƒç=%—Нøÿ×`ý/)E¶©y¤¡^½fÖ?VrŒGpKzü†Îüéðuh”,a#4Üëw@Ï8Ý·3V�€®ö¶Ž_§è†‰~æµáÅŒ;��¤ a?FËzt¦íÝä,¡H;íÍ×ÏzßÍN��z‚°Ÿ@Kl/?=H#ýŒëgÛöæS¶�@:ö;Ð^~­aÖ^Oý?:ÃŽ=zEo>��éFØ_;E§†#B?•~vmÉSj�0ûkdË4ôëÔ„ÔócPØOY��ǰߥxè§ ý*ò©Ë�`øö×É ý”÷ Ÿh‰!��(ÂþÙЯuжšp…­¦Ÿ9+ŸÏ!��pö{ÈíQ¥Ä[A?cúYÓ)4õ³wãÆ s ���aSØ�¦¡_§î¤—½¤ƒÃm/¾~Æôœ ��Iû›H¾ííמד'OÒóŠu±Ÿ%ý ñY��kEØß"¶7V{úm™a ľ~vô3ÄQ"��°V„ýmàÛKK©”ýlÄ>e:��`=ûÛ,)Üéì> î:m«ÖÝÓø��½FØï#î´´GK|ìàK ~Ú ü§‡¾—úžÚ±ò5ìSÖ��z°ßÇ´×ßÖlkðwÃ?'ñú^éÑ;-«6ä´A§ï-å9��`3öˆök@´=ÿÚ+¬R{…õrzÿ·Ÿ}ܲÛsO¸��[°?À´ì'Þko�p`sØ×^²èkmKr´¦G_ô=Ñë©»��Û‰°Ÿ2Úsl�:mﲆP ¤z¹mDWg_O7ÔÛF•¾¶z”…`��úaHhy‰�µ�Ûm؆€ ®Ã^m½}ml ·$ öú·ê)—��ƒ‚°?äÚ…]]lcÀÐE¯7 ú-�ëºØõ²Ûß6Û;oü.ñí��t„}¬Ê Ï6ëbC².vÀ°»¸×ǷѰڢ½êI¡‹íw½Ì^oëçu±³éÂ@Y��0 ûØ46X'-¼Ý@ßi±c ’Jj���Ú#ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���Rа���¤a���H)Â>���R„}��� ¥û���@Jö��€”"ì���)EØ���RIäÿr ¸+O‡0O����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7r.png��������������������������������������������0000664�0000000�0000000�00000303623�15030617045�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����D���-ø¹[���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýÍkK—èú¯8Pãš]<óljTMödŽõ‚&èÂÁI¨Áp‚.(0L  ƒAt‘/âlÌݧð{^ÜuM#Š·yžÕôÝìm„x0FëÆŠX+322ò£¤’T™µ~&±²ò+¾r}D¬Èx‚ ‚ ‚ wD AAAîŒ8‚ ‚ ‚ Üq,AAA¸3âX‚ ‚ ‚pgıAAáΈc!‚ ‚ ÂÇBAA„;#Ž… ‚ ‚ wF AAAîŒ8‚ ‚ ‚ Üq,A„Ge9¡ûä <Á­µ áù±XžCØm™sôÖ‚nxK:¬N€ëùˆÂ�:ñ9O¡7ˆ`¶øW~WÉÙ‚ ÂúÇBAØ�®`>B¯¥‚ÎK˜.¾ÓïiÐ Ù ¦êlumÔW;|-:Sƒ®r2~‚pþ~Aîƒf8©ž,¥XÂÏpM‡¾Á<ü‰Î¡­ÂÜîÀºžÃ4:† “ôеzˆf X^}‚èÃït¢ ‚°vlYžã\d‹ïpíCKÉþÝè7kÃby Óþ8‚ ÷LƒF,°gêWôž*¥Ô…þô2GÁ(ŵó¦©!q¼6ÒEìHÐílè¡uwØ]AX+Z>+`üB‡3µz#8¿NKÝŒcq5…�G9ÜŽ"‡åå¯0ªØ9” ÍÂïm;>­¾Ö#ËÅŒôˆˆ9·ÕÂdΩ³Â³Ô=Î/'ÐG=³Á¥(AHÃB¡ìQ‰çÂãX,/#ØUŠ)_؇ÅôvűA¸?bùüÎÃ]h¡¡îÈå´c±T~Eßœ— ºË…q2 ¦q÷ÌÐáYþÑî3è ÎÌ(ùõ ìkØéAÔÙƒáô?àrú:¡¹^¡a4б؃ƒpd‚o`Ʊø¦Á3%øKâo•9}\«âA,RòùŠœ‹túXÈN;,¿ïcD™:ªhd"æê Gô,Lo÷¦<B鱯ÑçxA„ÒHÇ"˜þ\ŸÌ$ÀÖ>D—Vœ®ëXp’«<A„‡Å•Ïzn†%sçαPhýðÌr¾Ãåé‰çëR&äi<èéÑq,AØVêX P‚ž {`Jq%Ãè"ôA×±@t¸Î3ÎÅUʱàð×ûšGŽ ë•¾ÑðCjäšçX˜ùyÿ±a‹i°cà܈—éI€âX‚ l&>ǹþ !}˜#@ךOO´¾¾„ëÙPé*»œŸÀ0Ö/ =§¢Ì±P(A¶œ†;Šœ‹«/)Åu¿JIA¨Lžc¡ˆ'S£,OMÔþ ³ÁŽÑÈýܬb¹˜Á/öÿª¢tÞÃ4|gMºæŽ);TJ A¶›-p,k`pA×R\,ôeñ$A„Ç¥À±@â/ø¥ …=cpÓøs¯ŠåfÑkŒ|ëU!?ÜÊtL)½¢G,¾ÃböÖ¬ƒ„ŽÅå¿ÁtöG2O A¶€-q,±âQÞîMЇº•²*ú¶8*§_fñ—IA„uÁÆ»’ϼy q3wn·ï8š+˜O#Ze›ïãq4nqh|OÜi¥žÕ `4»„¯z£ At®çƒ¤ÖÃHéA„æ±=Ž“�3ÂÝž‹1€ñtnõla/TC¥œÜ…šAAA04ƱˆçJÄ[NhNÜ=ôô™ÏêR­ûd AAA\6b!‚ ‚ Âc Ž… ‚°Äë°G·=›Ì…A¸âX‚ ‚ ‚pgıAAáΈc!‚ ‚ ÂÇBAA„;ÓÇÂ;O6Ùd“­a[ñåS6Ùd“­É[Si”c!‚Ðdš*çD~ ‚°MˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ€ÛWÒ̧!}ˆ7ôÛ&²„ëùÂàGèEô›ÃÍ íd¹øö`›œ#a³¹™  MméÉ“ f×tDx,šªŒš™¯ ˆzí{–Ãß`þOz,èA6Ÿ¦Êrdë‹å<„®6œö6Û±XžCØm©t¶K ë¸ãhd¶Þ ük´ç?fmYÅh¦ï\³©²ü×èÅû-è Î 1KÝë=e5… Õ‚nx®\*‹TžžA0ý8\ŸÁ ƒåE÷O¥Ç³UQÌ·}v¦]ýÓà<é†0Oeîfƒ]Çôn]¶0[Ws½žÃt<€^Ëï<C‹M�뾉ækÝN–,0;=† ~ŸBoð+œÏFÐÏ“¡µdHçŒÃؼ…ãÞSq0¡&ʼš³õŽb 'ŸøØ|‡Ëè% Ù sïqêÑró‡ÆïÎЧڈ­` WúàRýÔ‡V‘ñŸã–ÛWe&¿ÅqúÓKËI0×·ãgÚð½Õu•Æë”õ­Àgü?t~€VÆ8G°ÜöõõIžRÆ®òŲN+*äÛ>Û‚ÊûÉ“e¬¥™ŠÈz »ÑoTfê÷ó‘2þ•q4ü‹ÌsÓ`›~V©§ÔvfıØtšªŒ*åkYrýB4´[=Læäˆ|‡Å,‚úýΣËß Ú½>ç~ePN|€Hw˜2 Â1œÎV¹‚°©ˆcQšçX°!it·r,n`¡G% òG ÛV¶UʤR¹á½wö!ÐJ~ÂóÄÔÎ5~qtf§ãqãÜ`ž~†Þñe {Žëë;Ðù¡ådDß©Wï¶ÏfÐÑÛƒ`üÖqæÒ,/#ØEƒ¡µÑåwãütžA/ülõÖæ“[¶9˜ºÇbÓÙzÇ¢’,AçGÝÓ縛wkXýÝÈrçá.´Ö9j¸2âXBÇ¢”W â_uož«qt®4c8íÁxö†ú¸=Ü~óÉ„·¹.î-Ã’0€Në9]u,kô/3ˆ=h=Àx¨þÇ{´z0<# î1ÁãúÞj뼄éâ9üLµ¡1ÌŽÃøœñ½ìýŠŽEF±®Í±pFX¼÷^—l([éM ž¶ƒwf$…!ã>ú7m@´vÕýcmн—/`'|ãL|³Ç±X¹çñ¶Ï&´ãñ¦WÿeFOZ}õw| Õ^gCè¨:nõ^ÂQï™RL^ÙæaêR‹MeA©”¯ª²„G½#Š«ðÓ—ú4!G‡J¶]§ÓÊÛ§yzÊñöÍù½‚¹ž×%9€ú‡æÈåÉo}Vòýqó½{ 5€IÔwB¡ÊžåêB¥ïú3 Ê:­ý¢¯c§¥?ý+\žñþÓTÇrq#•Os/¥WGg¥#ª‚°íàûÒT¶Æ±0=ÀZB=ZÔãd '®ÊB³m¬£º«„±VXV ÷*g á¯Ï¡¶xˆÞ”æÙæY&ɼ‚ŒAG€q>¾Óù–#a§5† úÉ–2zé¾·s,Ò÷Í(A2´²cC™Œq¼>kübÝü¬î=T~ã›û š#cõLƆ»ª«<ÇÂMóJ=·}6‚eð zÚAàp¯¢p3+¬*åÀxà¶áæ-ÞŠƒL[³(:&<,X—M¤R¾*Êž7—ŠXí üáü›ºé%Lû»ôIé|ǬÐEë}Ôr�eƒž#§~ëô!š_eå·•lSŠ<¡ççâë,){–} Ë|ÎW ›5yÑÎ뼸#Žt'Ëd}¼CŽ;bE2M¤’Ì«)[âXÐ<ƒœ,£#ÚÝOH+”쾚\h ~£ø<Â×1ð3>^àH¸ûv,8?J)Ÿ`ïG,LÞY‰¥õU]Ÿq,P™ïp=å߉qÏΞ1"lÃÝ÷EŸV×ßjÄbÕg#è(í%†Bîˆ “Pyay`ÝȈEóhª2ª”¯Š²Ä´W§óä6è÷SÝð+ÌãQ$+÷½ïˆ+W]ùìדÔ-Y§÷]y^‘²gY¤Óîæô‡»OrŸ8ãŒ$ÛË^N%™WS¶Ä±ð”F°&²»¯‡ÄgïaÌ!Kwt,2 C½ä]<4ÍB9£¬¼Ê¢`_ã:<J'[Yªœ£ï Ýó‡Ãæ;p8øÙ1~“zVP¼¥o˸Ÿ <?‡h/ Ñ£ŠŽÅÊÜöÙ˜uì5Ìæ-/j¹˜@¿«‘³_ÍW¦RaÅ`݈cÑ<°½4‘Jùª*KÖ uó¨OŽ} :ADÆ=9”3 à e#9”=Kaº§ñÛ9&ß·L£ l1M•åÈ–84b‘cÀá˜È©}-ìw”R9†h:ƒiJèÞα0½<Fkã±³AÁôË$%ü3ÊÊ«,Ú±ø¦/Þèü枃=ù/Þ¥Ž÷¶Äú«ýÌ$”È®#þª•­¼lã^Á!½çÐÕ‹åå)¼9Ÿ¶õrÛgÓ¤mg”Ê´Ïgu)ÄÀ„V°‘á~j3¬q,š‡8Ud ‡ æŒò©k†ƒ9£„°ã'2¸éà¸'Çßs{n=oU ŸE!K�Âè|™Yi¿ca½N„*4U–#[âX áhæ/ēԔ¼šÃhþ÷¤×Y®V/´Ú7‚“†§)ôåIû%ŒOŽátñŸFUq,xŽEªWŠ„89<Ü£Ý>z'Ã÷pÁÏžœÁé«÷pù'öÄYF¨î™³ö]e¢ñæ™.GQ*‹ÍgÓå£ÏÙ…J“ÎS7ÛÓç5Vª&¦Ø÷ùY6¾“ºÃ<)C>6Æ=y¤8ãôHNOærñ†=U?yå“â6Ï&ƒ¡íql9šæÍèsõÄËŸœÏÊò—n|¡wG‹zÐTeT%_Õe‰úMwب÷ ?7Íb™¯'-z×JPòt¸÷Îô¹Fv¤ %·'_~W§…?}ò’äjœ.W^»Çµ,è®ç=+z9&/<JÜ£ñ[žÎŒŒŒ;áH¾¹û,ïX~ÅNʺ·Ð¯ÔI#Û‹85 ¼’¾Ã"þªnIln2yN¢ÃÔ~4ÿ‹™l­‡ÂG0 VB¿’qg¨\øÜ\ç‚‹ÎsèQÏZ«ÇÊÊî¡Â¯iœBx „:™Ü‡NÉg3šaž§œ‡““ô>:9½TqÕf+_uõ>¥Ï)ÞÐÉš™<yㆠö«so×05½f;:=¤¨éÜTS‹cy6}@ãb¯o ycÛç©z,[ ¯Ð9$Üò¬øìT›J=‡ÚFê|{ã2óÕ“o4é6¸÷vSΓ8›�ÖQ)ΗÛF‹d‰á(¾òfUœ äæ/0zucúâQJnóäñÞ>ë'mެhà°L~sÇ]c6;«"©gûžõïÉ—­:Œ&!èN·1DG¶N;„èÄ*wwŸdé˜átËW¡¡ ø¾4•-r, 2ï×_×±„5 ŽÅæÐTeÔd%[™ëÏ0¾w¾þ†#•{òî BÃÇ¢l¼cq牄ÇB¸ıØıh*&Ä(A0t+‚~ðÎ×ú(Âã"ŽE ØÌJrB]î{ÔÂ~wC„B²aLÎö£NDº<ıذ.šÈÃç+~™Ý¾ƒ&^L5NC‚pºöùT‚ <>øŽ7q,AjBSåœÈoA¶ q,j€(&AšŽ8‚ õG‹ ŠI„¦#Ž… BýÇ¢ˆb¡éˆc!‚Pı¨¢˜Ah:âX‚ Ôq,jÀ£U’^Àí¡¿˜sóiA§d•VZ);þÊHç9üeׂ°±ˆcñÀ<Š|_å<„îÚÌâ…«,šJ¤ ìÀ?ünµEW5´�dáùæ “ò¥ÇæÐTYŽˆcQC’Ï€)¼ïpíC{7‚Ë›K˜ü7r.䳡‚P[š*ç ó•Z}¿Á$Ì]½Þ2°— ˜CÐiÑ1\yûW8Ÿ _ûµ~–p5íCëIúãc8Ø9‚ñ1®¦-ÆÝ°>C\Õ1Ð+¦w`7ú nèwÚÐ ÏU B>ØÆšŠ85¥|Ѳl‡,t&õ¦©r®R¾âuz”1=½´ 7cd·ƒ)\Ñ/¸Šuˆ=È­ &srD¾ÃbÁ@ýÞˆž_ìYÞéüh‡+8†èt ±hï9U‹ûÕBgeÿuå¡~ˆcQıp %,Ž… 4‡­w,vö!ÐÃ.„籡eÛ³XÖ}U†áŽºçŽ’u_õ/6ËËö‡âXy¬æX¬_¯^Áy¸ ­Ê¡TBÇ¢VRÜÓE«©ºûñœ…}Ï>P¬¤=äþÓ—ÐQÏxÒyãð†Zˆøæ:¨ß¢¾9×ÞPH|¥ØÍÞ;˜½†^ ÙÊ{ÔÞ&C÷�F³õÌ©cñ5]8žC+O˜¥Bp3祠JçdH÷3÷Lõ^ŸCt­{˜M;*ËK˜öñ˜*£þÂþ€‚ð�à;ØD*å åö^—Ê1ØE¹ÕÂŒV¥N9WSðx7„ùŒlW¾/•-ÿ+ò(QþMÈçsŸA/Ø7ò¿÷ð¿2¿ý̽÷ 8{ý›ÚȨ42sCœ8JéÉ ™P¨"ùž£Ïr庛ï.£3ËqžÕéC4Oœ¾êXaH½™}Enót§¯^è^6ö|DehçÕ2ì—‹3ÅúóïÔn¶žçëyÎFžÞOÍé §"¾'Ú(S§L!TÏO: ê¤ìyÂF€õÖT¶Ã±@´²aG"½o&¿á˧„UÁüú›žŸ i}îOο‘`Ûµ u¼Žuõ²Ï†JxÑKÌÃñZÁ}ƒyø“N§Ñ9\ëØLuœö¤í¶©'Žh«Ó«sßV†gJXÆÂµ —¤lÄB§òàtÄŠ˜zü´âVÏ>)áÔ¢¸QRhtîcJwÔyüAî¦*£Jù"ÇÍE#gŸ@ ç)9d;,Ï[vhÔ-ÈÊw2tµ¼6sØZOŒ^HÎ}ªcíQŒú~+º‡JyZh~‡i°GÇý˜ç8ŽG‘|÷곫|¹~}4ÌÃÏ*õì”(]©;Þ(­}ˆ.¿Ó¹­;„ša~ŸYÆ¿½Ÿ¯{òt篓#O¸}×꽆³Åws_tPØ1 9éü?ƒ`ú»¾Ú”¿ÓFð™úú2½ïžw¤ßxŸt9ž—kn|€Y‰!lXGMe{ [Ðzö]áœZ›‰sê!cÒB…z0´3€çqß×V*ˆ-@ldoxï¿jáj+Êôs=0Êu,R8‚Œæg$Ï£ ’¶pOÅ. ‚ð”ʹšR)_(Ó´c°Q®ä²2®¾*ÙÆŽ…‘siÙw[Šä¬{ÌwnÑõHö¸1¤ÙaBƒy¯7)#ß½ú,O®»: !cûó „ÝuNVÎÑ‘…º§Hwº#õty$Ž‚[^IÇczãö•½¿«OsòäÏÝW¤ôyI\]•<Oذ 5q,ª88œ‡7ñ¨†y¡]¡bz;žQïõüÇ#E†þŽÏµXÉI *]ƒÃÇïa< !àXðPHªÊR©0)êÁßA¸WšªŒ*å eZìX(â‘Û8ü|¡P~9»\Ìàt< “ä˜ïÜ<9wuĵX(ƒyÏ2xW%O¾çè3¯\÷¥V‡Ùŧ´^- Ñõ MŽŽäý¢4æÔw™®ÌOçÙçQ¥,e×çæÉ=ž»¯HésÏq»Nhw=OØ*ɼš²åއ÷°pÈs,ü|ad”÷ægÏKÇHòðª^pï O³1o³<‡°ÛZVÊ;fÂßtSWðp—ÎÇSè ?Z1µTŽ‘VZvo ÷ES•Q¥|¹ŽB¡7x}"ë¨÷6/®\]3|ˆeii9K.�Âè|™b˜M"ƒ}29û[ñ=4,ïŽàhç…Õ+½eòñè3ó³-×/h4À6¬i„� ù›¬nº9:ÒqÒiük¾îT”éJ3"‘?ba®Ï¥ÊÞ?}}nžÜã¹ûŠ”>çšœ:Y–=OØš*Ë‘-s,X€Ú=6èlüÍ ±Z±®fŸ„…ºv¸Ç Uëû8çá•(¤r_`Rx±¤}:?Ž ŽtRŽ`4ÿJ‚„c&¹§ÓŸÓ“B½v‰Àç´j„! SŽÁl¿„ñÉ1œ.®õól§ÄæfööØÑÈ # ‚p_4UUÉ—Ž£ï&¶ý»’u¶¼Šãä1l&â/%Ñ„×`�Ó¸³§ˆ¬Ht‡buàhü†§¬Cl3«ŠïÁ½þ|]Òñµ*…òýâ“WŸý‘#×¹|[½œ«²OÊsìÉáêžÃ“[Ž‘¬CznT}EÉ„le(_ä¥1WwþÝS/äÈñ¤ó¸íà3-ç Û’žã¨þ]Ÿ¿…þÈšs˜rLÒz½Lïg÷“2˜|ù^ªr&}Îm¼¸NÊž'lM•åÈö8ZÐÐH ˆµ•¡>:ƒ‹3Âh¤ã¶'Ñaj?ºø½:1 Á²ð2›Ï3‚‹_xóoèü‹é5âßz!D©}ì]øn}ùImöW¡ì¯V´váÍñ´±×kê™çù*”›'•Öé?Óˆ…`þl)Vö=ÔF‚÷fö^Eüÿh† ëßÃ&Rœ/ó`Yä‰f`Çíá¯ãÄ×ἂf•œ 6Îíg^&:eó$„ƒ–’Ÿý‰£CLú|ú!¥‡œ{¤d¨‰yž~SJ<âì‘ï7ÉÑgyr2ËÀç.ý …­›ps>¼h´ãÇBð^˜†÷uUÞêzËO£_w~÷ÖA{åìVoÇAG=3„)}Ý*µ²6æ?ï«P®^o08,Òûîùhüs89_U[PÎ(Ÿcœ‹¼:!§„ÎõÛÂ&€õÑT¶È±xP(žÀ{è *‰Z}9I)¿Ñ8M +a—QÞ‚ <MUFMV²·{¨w¸ÇY„¦!ŽE ؈JÒCªÏœ| »:„@®èaåxØ—ÀIsýwè‰ᮈc± àˆq�{¹ŸG¡îˆcQ6£’¾ÃbY‹Ö¨-/\i“±&õ™|àpz2,,ÂãÐTeôðùrBF2[Å/­ŽõCmèwAÊ™¦"Ž… BMhªœù-Â6!ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85 ¶•¤'ì=½ÃDAüžõ ›»  Í@‹usQ¯ýÀ²³Lfo†L7‹ÎíA´(K§÷LJŸð^[h ŒxѺ+˜OC:Ýܵ6üTi+·iãöº øñ–æÎ”ÂÝÇ¢V­vŠçĽÐéEŒž@»×ƒŸ¬ýÔ†_x:åU\™…èxëBN‹_D½’&.Œ4‚ð`c|‰oñ%+o©„A¸ð=o"MÍ——2™ê1d:¯$Ý…þøvŽ`|Œ ú8qzáKZ W/ZÄÏË=é½Ðo{¢Ëk½ødçÉO‹5¢sS°€¢à¥É2o; ®'Ñ7«°¶ð…áÅßh%T{Ý”Ö*•ËÅŒâ•JÍ2úæ€s®µ i+˜ª»ç=§0Њ¥è´Dï+¯ ›‚„‹8‚ÐlšªŒš¬d½”ÉìÇ”é¸byôŽ>›Ž½ÕÇÙj>tzű¸ ¦“sEÇY{[qGSJÀNRí„ íÂ+Ë?ƒ`ú»9.xÇ¢T«$\xhßý»\.•§Kç·v…ßÌÐavùû¯0ìhaÛ Ïâ;—^ôâåóűa5ıhe2û1eº8Âæ8´ÆKUÇBw®Z!\Ò*!ŽE ¨^Iì<…ÞÑKèµvÔ ñ•Ž1yŽ…B‡0)G Â\ Zç\%”'ÚYx »E+§r(Ôà¢À…ú’Z¸©=˜Â§x?Ž^.>ÂÿÁŽ…4‚…c5ŸA/Ø7#4*m—‹ ôõP¥âîÅ „ºÑTeTœ/k1;-gÝ}+Æü)1~ÒÂ,Y¾„iGœ)ü´ÿFM¾øt7¬ƒ74ø.I¶îÃxö!‘¿ƒ³8ìÃÙvºË—Ù2Æ"¦ëWkñUëÞè„tzï`ÇÅ;zíú\éNW²eŸÏ¡PêúÉ n(”·ÕelLzËßM;^;1ic}®tàÒ®tóð£Unùeº:J?Nø9˜Æ>Dñ¯î±�F3Šbà2n¿„è#—±Ò¥Ó¿Âe\æ*ÝágÕx¡Üàù`DuŽ‘¯áŒ;ãû%Æ»ëX¬§-¹mœ÷óÞ²gô3Í–\—ÓþR¨ótg­"øÀrl*[èX(–¿A´‹/Hžñ_àXpèS«Ó+ß‹¨„Ëà¤ú*Õ^IpaŒ£-�¯Ï`€Žƒ¾JˆéH#�¾ÅsFì¼ýÓàe1çïx… ›LS•Qy¾P†=³d²µÇø+¹GrRLjÇsÖÈX¦Î %v²ì(Cê›1ÞñºØ(Ó²µMÎËa_žÄÁ+cNOfýF#àlt£^é$Æ¥–ËR ³½rØu,øúÔ½U:`þdòŽÆƶ³~‹ËŠ:Ó´ñx£|Œ‘2DíQw?ÆÐµçVä”#¦ô>鼄©2žÓåOŽ NG `™þœL;åN(MQ™® =›^]¦­Äp¶£b ´ÿ„y\Æ”ÎØ† 2ç2F»àbb:Õù&lšËœÃ£-Ç8ϱXW[âzáã¥ï â±Èm‰S­¡tvª ¬ƒ¦²ŽE<j/{ê6·p,Ô¹—úå0+súí±Óh„µ„{ü|…£„²CªF ·zC˜TuxAØ8šªŒÊóe§ž}·ƒ&%Yfö`0™§ !GvšrX†«ÞOîëÛ¶¬MôÖVÆ×%2;Cê8żÛ׳c¥»ò—Ml•Ìù+Ðo…”•£[þ¶±šÖO”7Û!‹éý3·LsÊ­}ßvŽCå–‘‚¢RÎ@\¦î<'N»øfœ“¸³Æûô%ÞÏ{Wœ¼æ¶¿¤4—óìºÎ†à볩l¡ca¼ín/„³éÀïu ÞÂP(î) ƒª ?+åXd’+²ŽcZÃû©á_AêBS•Qy¾Hî¹Æ3ï—K©P îeöœG=Õ©9xÖqŠ ó·ïë9å2;Cê¸çzõkbÈb'”§lâó©‡9ÕSŸg`—PXŽÅŽÅr1ƒÓ1†=ᵎ…¥S/rËÔ…ïƒ÷Æ-ýl'M1Þú°u»[¦ô<w?×±pó™­Ó‡iK¼ïÖ•}½û Ï33ùA”ó4:N9B>å2¯¾lc‘|F upçYä9|¾í88çòé]c µ‚û v÷p¤‚äKTnχ ¶€J£ŒŽýÄô¥{AØ|šªŒÊóEÆk<sO©±d@ã6ÒsàhT"sžr&(lE¨ö×F¶&ÆTÖôu*•Ëì ©ãt}ÊФßtþsÊÆ6¯?CÇǧç0Ü9ºåÏûäØè”|€/Ó#K?y T±À¼›ÐÞ5uÔY#!™n5ŽDˆ; ù7vÀÜ2]Õ± ú*0Ö¦-ñþ*ŽEYû£Ÿpcxbí E4U–#[äXФæînJQpœ%*xx—…ŒåX$©ZÉÄ3} +LÌ¢àöä¯U §ÂÄ3òý’çšaRµOq¾c‰ië†_àO*M9JP Ê·'”J„ZÐTeTž/2v´ÜºIÀ¢œ¦aĽð4ÚËÆÒÍì5ì±1­‘AìœgäyÞ"e$;c‹÷IÖ².ˆtRÞBt7…2Û3r@éb#˜u w0éù gdxRXJ¬ƒhß1 s Ï(.G·üiŸ W“ÕïÀÑø- OÿJ¹5ñÙ])(ÓL™•ÂÏÆ¹‹—t=ÃI´7™Ð×ÀwŒoíXäÕâÖ·%*Ï{hKqý{ëÊv,ܼ–µ?á6ˆcQ +‰›VB¸Å/36ðï%[«7€ñÔŠ-%ᑜý.,¤èw«W¢îùàëH¡ò½´³£„žý%Š7¯!hwõ¢|¦7ˆÎ uÑ1Dã¾@N/œ õ�ßë&Rž/{${ÜßCtÔUÆÕ[˜]|´ä{z''éýèB©€wð*zKÎõØOëmXÅ“r“ßy²vZ¶îÁIt˜ÚGÙŸ|­S29þrN¾ÌÎ,¤êè+cð©ü{!sõC‘G_¤ôo·‰-/G_ùÿ;MÈÆg0š„pw”±¾ë@¯GévôS~™Þk)ó,ûSóWÉZW¸Ååã”qû¢ÒѾ}l ÿz¢l•ÇÞsº••N·{¿|ú„#|½ÑÛ÷Ò–pXXWÿÛ±‰Ìû£ß¿’Eðì¡,Ǧ²Ž… BhªœÛ˜|]†‘rZÒßÀؽLWp>z§©Ð\e(Άðu@O(TÈ„B Bq,j€8‚ 4q,îÎ’Zo€zjûÁ[šãV?tè¬;J“°û/œ…av,|•kŒv,rB“A!ŽE ÇB„¦#ŽÅý’LJæPœ“:/BÇyÂЮ°úZK÷†ö«·†ŒZ¤B¤eÔBðƒí£©ˆc!‚Pš*çD~ ‚°MˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE (­¤ë9LÃ�:+­)±â‰s÷11Í¬Ã±Ž…¶=±î¿µúŽzö[àihQÇÎþÚÚNêÛèø‡ÿÑ]q•šóXr`Mˆc±nC†â—¦¦Ýœç–ÌB¬Ezk•tŠ®Ê%¥“îP÷¥²&˯(ûÒ:cõµO?M•åÈ–8¼*¦z1Ô àÕ4шlØwº…[`ªjïFpyƒ««+£ÞZ±ÝÅ(ö5¶½øWG¯–z£WNmßãçÍê­¼rðf`-LÅr@¯:K«ÝÖ€¦*£&+Ù Ö¢e^ã‘W]Î;~¯°ÎêB| ;G0>ÆÅí<2¨,Âêܺî=²m¬ª3ð3ÆÊ)Òé …%kýEµ{˨©l‰cЋ÷ ŽÒЀjÂò2‚ýá¦(½ ½v(È÷_ÇmÔ¬fº¦¶³îÑ'­iL^7˱@9 ËD‹Ç¦ÉJÖ å¹² ìø}‚=ßÑ;è^j4!:ùW»~Ìt6•[—é=Ø8+é ìLêj'd©þñJù›§6q,j€8B†ëÏ*å¸1J¯Ta\Áy¸ -«®Ó±0÷Z—c‘Mk|ߺ¸@”#tÔgq.q,B™,xLƒ]‹ÇåÖeº~g5a"C’tSzz,ô¾`#ŽE XݱÀXÆ_Ixâ°]‚Ñ™ž«Ø{³³×´°ÐŽz¹¾â…†Ô_²e…;Ïa0Ò½žBoø1ÔËÅŒâ{YéÐiŒ 蘡ÑdÃýJ³c196óGè?%qü!Ì* Er<ÿ3èûÐÁkQ à‘‘* ý\T2oaƫҪršÄ‹IÝeØó;,f‘ª‹àù`Çs¦WÀUé›pùa¾Íh%Ù%…aú#ûo`öÕ8I™¡qþå±k Ê‚ûVi) Ú”îù¡gèÍÖd¨ÇÇÍÂJìXŒg¨\Tgª5òÛŽ»•Úð=øêÄär~[Ï!8À{bþXL_šúï¼€qxÃÙ¥7­ið™ ðÞ÷¢¤Ý;åÏE©P_ÎsÔƒ¬÷a¼o,. Ú} Ó«L¡m$˜ç&Rœ/’ÝXÚHq÷+È>ŸŒ¸áëìxvü-Oæ^Æsžnó>&±êꚃ݆sÇŒqY [JåTQžl„p(”º~r'ª0ËÙÈ5;-¸ÑÈa®ÎQz"#‹ÜôWÅSž±Œ)(ëXOvá(zŸ”C——É\„Vo¤Wj\|>€1·ËÔ*èÉýâºpë¾HÊ6n'®¼÷¶›¡ë2¯l®Ï` ì 3‚!¸`ù5•íu,¨Ñ÷ÂÏê ,õÒ>ÀŒçc°°Ñq†êEŠ=ï¯ê^;¤¸nhÈ/où~~A»ÐŸ^ªãl@²51ŒétÐ1Æ6).¾ŽzWIø`:µ�²b3y‚†í¶|F_–DÐ?µÍ ˆ…$ÆX¶ÌÐ&•I ç ,•°™ Uº«öl8è8w“#¹Ly•îßÚ…ðüJ•+/‚EHstwT½í•ÐI9E÷ýÏd^Nn;pÈmSdx”öD¹Î/§Ù(®ÅÒÔG¬ä‹ÚŽs/λeœéçYû­}ˆ.Iq麡6§Ëg7}½•V?9÷-H»i·Üé]c¥–[_þçÐõì¤r.O÷f‚ùk"åù2sv’wÏÚ/•}d,»2â›#Cñ¶27™ó„Æv¢|«þ>²lÐJ|¬@¸²â.úªH`ä…3ZZ˜ªåŒ:ñP½³Æñ‰õŠÖ%:'W­N¾ŒQsËú ®â6ÀºŠÛ�· ¥»´.ÄzÿbÚ(žÏ2‹FÑŸ´úº3#«“©º/(•d›+ï­y§ú-­3e“® k>aÖ(XöMeK 2öéå6¢Ò¿]™sãÌ5¢Üøq³o¿ ìXXš!^ÿ§%¨ìM 7þ[ï[Ž‚«|ô~Áñ2BÄVØö¦Êáì ¦»\9UÆÍO¸×õñ·l¼>9#­`¨ÌZ=LæiáæÉ:žy�ñ}ñ7ª÷Üv`SÖ¦Ôo¥õ‘½¿«ÜíýÄÐIoy÷ÏÔoæyžüéòx ½Á¯ÎhTQY¸dÏÍOûÿ _°Þ½“Ú+ÖW&ý¶³µJº7,£&Rž/ª7÷]äýBÙGoQ"sýï£y§òÛôü¡ŸoɆ2Y:~G}U¦G*Ã嘗Ê™ac–G— tÎì<Y´*¤[¼2¦\Žgä¨.OwŸË7k˜v’ÔGæ~vY•–Ç*²Í=žóNY×§ÓVAÇ1˜îÝW£%¶¬Ç¦²¥Ž…ï´�ì (záÈSçžQê*±° KØ\è7Ç@§Ùô¨€u®+¬õ~žr-Ç/àü#1æ\;OypþY(æ(´Œ²³Êíâ“'–ÀN…¥Qï žâÉ*Þò±A¹àM(kSêÇÒúÈÞÃ-g{ßü]ݹKå]ã>Ï—‡+˜G}Ý+™ôÔbk(* —¼|ùÒNçÆenQµ¾2Ï)Ês½hª2ª,¿Ýw‘÷uÛ(}UeD‰Ìµß¿dß´¯Ò6m·¹2Y:îk³+è«2=R™ ùXAÇ#ÿÜ›èóòFÿód‘ƒÖ%xmYâ´eeÍr×’)+:éã˜eç~vY”Gæ:oÚmÜãn9d¯O?£¼l˜åü†±Ã#ø(—yõeK ´…«Ý‹QþÂÅCšZx¥çL¤ñ¼xºÂ8"ßõ‹k‡Ù(%@!Aú9©ØL…+¬õ~r-!OÀ…d~bÜ^—;“q,¨>°Ì¿S¯ÝÃd•aüdzrº<ùOå‘{ƒrï[¡Ä”µ)µ[ZÙû›ôº†Œ­àòÚN–LýfžW?ŒóÕ뱌䒗/_Ú©ÌÜ0¤j}YÏɶÓUÒ½y4UU–ßz·Êe_¹Œ(–¹þ÷ѼS+µé2Y:^&[rÊ&nã%z¤2ÕóQ^ÎFã”çÓ91Y´*2¦´¬1‰Ž]ѱ02)9?s?»¬ ÊcuÙæ/k7nÚÊËÆ€#WÇ0ŠÏ|4U–#[äX¤‡ìLŒ¥zaS±‹<шÎ_Ú_8ó2å*…ìX8s,x´ƒ¥XØ£x ý‘2”ô1{¢±…ÄéÐûVï†{¼ƶ\,H,Ç ªþ;˜ßðöK˜òD²«0Ät›½ÕÐÂ8¯>xnJ‡ÛIex3{ {œ>;ô……r𾜆pzùÍÉcñ}ãzÏmiŠÛ”‚ê#_’`WmtòåxuúWøS§—9×íµsC ¾ÖVDn~<ùSe8ÜãIôæxʱˆÓêS6žû¤ýF—c‹æ•è“UÚQQ]U«/ßs8öžãÑÀJ)ÃzÐTeTž¯¤½M¯n 5 £Ù—+#œóL{É“¹Îûï“<)jÓÚä^öodT£¡ŸÓ;ïÈŠ;é«Â<­†1fóóñ½b9›ü¨ûıùª¬ÔµA4Ï×9ßódÑêÄÏÏȘo%e•£®Ïedê• g^Xâ(8mIÕ}‘^U¶¹ò±¤ÝøòZX6Â*4U–#[âXRÒPmúÅQ‚,õ¥ ¶uÎí…¥öÑ»gƒ”~ã-wUJûK6(”­¯:(R+[b:ø+ šz õ¯gÚhæßÛ‡8Œ÷ÛÐ;9±ŽÛ#~LÏŸo 9û«NÚÓéN„Í­ÐŽ…ºï9)*KjìapµYe}3{¯¢·T—öu4ÔN†èWoóî[¥¸äµ)9NñõÎб•+†)˜²ü<=²Ò»'Ñaj¯Ïm;)عåkÕææ§ÀàÐÞ'åró½:1…7$_êJ§5¿Þ}ïž9’Ÿvå0Ä_)ÁÍÔŸi‘ë+ç9­ÞŽƒŽjÇ!L½ïêfƒyh"åùRí-îuÇwü=DG]#.>¦eGöyeÄwÓñ`Î#£·@æ~¹Óûh·iõü7ʈn«ãá4ÎC"ü|cŒßA_é‘•åuq>*•óÑ1¼Aƒ8•ÜHOåéœ\YtŠdL¾ÏèÉ(´äº»ùù߯±è<‡ÝÏNwæ~Ÿ¦ž6YMË6W>:ò>ÓnNà_3:u^~ÙÄØ#.ô“˯©l‰c±n®à|ôNu/)c ­u¾Lןa¤hzå½µô>m©ácA|4UmL¾š(s·Ilž9‚ Ç¢<d%é¡N7N'­õ_$“ÐîŒM÷ʘނ~ðöö#› XxÃAЈcqŸ4Qæn™Ù8ȱ¨aØ¥p¿ˆcQ´’¬Écø\3<¹þЊd?'gè¼g4³=òHA*LHF-!|GšÈ¦äk}2wshbžê9\î2j!XlŠÌ»ıA¨ M•s"¿AØ&ı¨¢˜Ah:âX‚ Ôq,j€(&AšŽ8‚ õG‹ ŠI„¦#Ž… BýÇ¢ˆb¡éˆc!‚Pı¨VIú‹FÖ‚rÂ̧!œÕT¯ç0 èX‹„5 óµ_€ç±Ê•Ÿ»Î¯Š¤]ò,r´qà'2§Ý­^xI‹m‡Vb–/ B­Ç¢l“bJVëô94¤xðxc‹Çà±ÊÕzîÚŒ ³r|{7‚Ë›K˜ö»éï¬_M!h=ƒ`ú;ý°X«óJÄWÓ>´Z}˜^mÏg3›*ç ó•úu :ƒ3Ë v>éi¯hŸ?=¶V ~ ½Á¯p>A¿vŸ´þ¦Á3xÒyãð�voáW\CjI¡Ì«9âXÔã\ä”кâX¬™‡+×åeûCî™§ç®Íˆ(ñц܆99&Ý7*™{ðD‹FP)_±sÙ…þôÒZHÓ8™í` ñJBן!DûՃÁdNŽÈwXÌ"¨ßë7ê…#v óúI¸ÅNgÖ"­¹`GÂKZº"-_Axhı¨âX؈cq?<P¹’Q”?kv,Rº}ü'çßè‡ ÁI·~¶lEÛ­w,vö!ÐÃ.„çÉ‚¤ØžÅíù«z_vÔ=w”|üª±©§Q}[ÇB]w>R×Xº"#_Axhı¨…•÷tѪÎî~<gaƳ0DÅ•rÿ‹éKè¨g˜¡èCêýñÍuP¿E}s®½µ`úcÄ„ÞøSßÞÂ,^{ÔÞ&C÷�F±âPÇÎ^ÇJå x®®_Á±¸žÃ$^}W  ³Åwu€c׋ҕ—'×ÀNâà[½8ÐùÀЄ¿äKÝ{2LV1ïô!¢Ì—‹ ôõ5]衯ä)ÓN—Þ¨ÇÃ!F¥ÝÎ÷mpË5¯¾ÊÚ“âú"•‡tš•Ѽ†7ú|þ Ë %t,ÞÁ,n~£É€eô«î™5÷PFÈè Xà©°Ü|mè¢Ý—0½ºYk}fñuyíFÕöâcR~úÚØ RyÙµ{©·�,·&R)_(·÷"¸TŽÁ.¶!KF¥ ʧŽßÙétÚ+Ê!)áyO­çà{¬tIøÿÍþý{Î=Ò!\¦M“|Áß2 5€‰’Å™P¨”|W[G½¿‹oäTÐoú÷}ø®|™ñ¤û"Gþ ‚°ðýk*ÛáX ZÙ°#‘Þ_ÎCèj!‹†góëo:½EÆ9—zp—“¾«±Ä eãLH³¡2bÉèãáxTp7çvÙ3ÆöœíZiÒûmê‰ÓÏQB^‡z(•ƒ÷mõ`x¦ 1>VÙ±0=x­ÞΕ"Ž*æ«/%é*È“«´c‡í ´0~ŸŽçç‹Ê¹µÑ¥2ö¯Ï` Òe”,*Ò ž«Çn·žaÎØC“6|åÍ<Ÿæ8ùnÝÚM—k^¾&gÿXÜž¸GUFªnµòoQ^”ÇØ€Ž 2J–¿)Ãß2*\t9>S†Îgu%;Å–c“¹k­OjGÜÓ·aÕ®>)'Èóœ8ÃÊ)â|THwƒÁ2j"•ò…íQ9芙”´Û±`y~û÷œÐíŸä ¿sZîY�·õøµ+º´å�5zÔ5;E=Çy÷."g\ËïDž˜c–®H½ÿ9éΓ¿tT„»ÑTYŽlca xϾ-˜“}ÆÚ±0ÿæq/¾!-´Ý¸oÚçûzÓÀÞš¤›ÚðÞÕ½U¶¢Ì(‹¤,رÈÄÌÓÄWþ­0]%yrI]‹äëì_”SÓN ꦇ®ÕÂ$îñ&2Ï Xq³¢^ZΜ½eFZªb—kQ}±Ó™Óž¨·2©Oê½dc!“?טð·¾êíäßòÊÏÇÚêÓͳB¿Wd�fžã™œ½Jº –u©”/¬íX ¦Ó …²•ýU½_ìX˜wmÝíÄ‘©™}Ä÷›ç8é–Ýè7mÀ_F}èßun“óždtEæ=ò¥»@þ ‚pgš*Ëq,ª8ÊJB¸Ú;®Ð6½âÏHQP÷PyÓÀž„{ÁH€­(3Ê"EZQxÏÕÎ¥¥0]%yrɤµ,_ÖsS`xLd…ÛX!5žòˆ{ÿìØk}ž5 ;Kl$ç¥É.ׂ|)ŠÛõ¾§zö-ƒ<¯ +9vé§8¶ƒë–_yiYµ>½Ï´ª¼çØùX%Ý ¥©Ê¨R¾°þcÇBaz~¾‡P(D½«³÷0æ0£¸=úÞ3ßoHÞ=kÔGw^X+¢¿‚õ.ä÷$#ÿ«¼kEòW„;ÓTYŽl¹cáç‚ îÈLžãž×ìyWpVï5œqL¿7 ,àI¸§†£ êy¿íˆ… HØæ7 ï*LR'—̵«å+ *eó%—üw2ÔŸpÏAç¥Âkî„]®ùR”¶')Óeú”Â}Ì¡Ü2¬äXðˆ‚=ùš~cC+sÿÖUŸ<zd{ú7r¨2Ï¡4ˈEЦ*£JùÂú· „Âíðú¤]Ð]Þ<$uÍpð¡@æÚqÙNp ÑtÓøÝǃ¶,Ðg+<¿ÞÃ`dñ38¼€BY˜éüÙ Œ`úe’zO2²'ïvÒeðÈ_AîLSe9²eŽ;öԣР6Æ8Tˆ„±ºv¸ÇÆ4 ëû8çᕨ$¼Z¡{Ò,ŸzÖXÀDZÁ±áŽýŒæ_ÉX¤…Ìâž:L¿ïë=Nè ‡9ñí±Á]%]yyrq®EòóuEá Ö¤HLûðDŸJÙ 3§„Ë™óã¦bŠ“ÉуýZ•ÕœÊÍ2ÜÑ ï¿»eOfº\óóõw“Þ¼öDF³]F)â¶ú¾œ†pz©ê Ÿ唎œYS˜.{n 8)¨üŠ:bmõ™]‰ç~°ƒ’ûœdž ϱÀQCÛIÞ&šªŒªäK·ë®5àöžj;4ŸJn6š‘ÓŽ½ð¿Â ÀT·ÛbŒAÎ Ú~ ã“c8]ü§ySr‘ÞKë·â{ð…tW–W}’K\Gïàdø.8 “38}õ.¿çÈ—T^ ä¯ wF‹P^IV¯;N‚þÁQÛ|-çâ /,¸íÁIt˜Ú.þF¯N`L_ñaƒÊ( >Ï,ÔÍo¼©ç(E(anö•3sr¢…{¼¯G ”±õGmö×vì•’•ƒðæø�Úêx8åo´3¤dô}ÕÆÊ"õ"+œ‹ŒØ8žtåæÉ]­9u/[ÑWÌnq(“ÊÇè¢qß“<qÝ}ÆÑ1¼ñÍ£à2MÝó}Û¯BùÊÕŸ¯ï©váiO‹¿“‘ͿчPx„6ÂÿÙôrò9½¢Ô¾oÔ c°ë*óU¨dT%ÃZë±z¼Žò[é9ª,Þ(gßÙpš™ë´-`ù4‘â|¹¡ŠVï»FµßäbþrS|jCƒ¨úû*¢ÜÁ$üYµktšÏá,# òänÞ=ØñF°#d[‡n©ëã¯?¡N;…ð@9 úËP*¯<ª¿‹ò%v.rä/áÎàûÖT¶È±xPÀŸÀðÔ ÇAP°ï I`×&æé±QNîè œ¦B‰Œq!_^Šhª2j²’-G^ÀΖŽÂ Â6"ŽE ؈JÒ1ãüyLúM÷ÒB Ã?jHóôÈè·G”ú/¬Þ}AÈ"ŽEÁ©½À;WK„f"ŽE ØŒJúžLtSéÑ›7\©N41OŒõ�S¦&ÂT¾º"”€í¥‰<|¾œÐ¥ÌÆá©÷ÏUJ… ‚° œi*âX‚ Ô„¦Ê9‘ß‚ lâXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQÊ+‰¾…§û1YÂõ| aÐM-êTHj}€.ÿp�Ì÷Ü™+˜OC:ݜ゠Ôq,„‡‡õÕëŸÐÎkÄzù¾ôôî«×�ÊÓ¹‚°âXÔ€ZU’µ X5ǬZÜÆ•²ohÕí‚Å”’…ûD B“ÇBxpô'Çq±Íu)Ëú2×Ftøm*èØå,x*Ô–&Ë<q, À§÷‡÷´`9Õ‹ ˆzíê£ ã\ˆc!M¢©Êèqó…7/aøà²ò±ž['mZ_ÝÇ'xɹÇ"EÊö¸šBÐÞ§uN®à<Ü…Ö“gLÇ£BMÇ¢¬½’®?CØ{º’1¿«8+9!q,¡yˆc±n–p}>‚^ë¡eåc=· ž´‰cñp¸¶‡1²Âšï­.„‡D‹PZIn,'ï÷ÞÁìì5-V¶£^Þ¯ñ‹÷4ÛD Gêñõ­çtÕ9æE_.Î`à> YŽÎâ«—‹0Ô÷mAçà@?3 ˜Ôýôu¸`Ú[˜-¾S\'§7ö—ž9ßaç£ Áshå:oêË—  Ê€&Rš¯"y­Áp‘_­…<«„‹°ͲÕÝH~RÇÊøÿþ' zÐz>€1ÏysVÑ/Ò†Çzn<iëE°`cvü)™ë×Âì:Vn~ýåÞ/ØÙ‡�ëÌÕ˱£¡ôÚô¥¹oçŒÃÃdE;Á2‰ŸÁüúFýlæ/¶zp Ã‡”ž›ñëÿöKˆ>&z³?ý+\Æíë)ôÂÏÔ†Üy‹¼¿ãÙ‡D¯Î’ó'C«ñÞ—¦®ŠÚr©í¡êg6Tv`uë·©l‰cáÆr~ƒyø½¸¤€–¿A´«^h¢x uÿ(u?û×÷è0bHC–×g0è<ƒÞð£ö‰°4÷§9½œ+A½\L ¯b+˜*ñ¤pÒ’CÁ†Í’æaä:‚ Ô‘¦*£â|•Ëk Ùm=…Ýè7% ¿*ù¼S¹<3º«euÛ2—p5};áÿ“à™IGkÂs%Ùlõaz¥ÌÆ"àðXÏ­B&mìät^ÂT9 ¦¼¹×¼D¥0uÓ꽆3¼kêÊ3çÀZ?A8ÿ†•¬ôÚ®IÕ ç.Iÿaz?MÉ{BÇð™EúŸœnOܾ¸ Qùº:7^5=vh¾é2h±#ÀŽ–ß[Ï‹¼£íAõlÚ¹Pg° 4•-q,wÈ•öùev:ˆ{?õÎÇÂ&½µ•¢øcÚ‡+ľ<9ι¶ -iÁÿ;L•â±yF1‚P{P.4‘ò|Ék2Ö >hQDVV¢Aòš:ИÛ;$Ùmæ»%é`¹oŒø|Õ#õÜ*dÒfÊî~™þ²ÑŽ‚íð¸zÔÙ×ç+ãð«2Þ“Ê5ù%‡ÃÅ«»Kž£ÎL5*;ªï–‰ÙÏ?žóì[ØËùvcÇS¨3øŽ4q,ÖèXÁâvÙsS÷×· žû{!<iI ±²ã‚ 4‚¦*£ÊòÛ+¯Ýc«á••ÖèÁ•2bwâN›¬oÂU‘¯²<Îsé>høëÍ µ1dÒ¦uLŽcQ¦¿,²yvu£»ó¨¯G÷“ÑAð§Ý¤ÇÕÝeϹÇâ;,fïaÌáZî³W¶=”=:N:'…ZÓTYŽˆc±òË͸÷cÁÂÃñ6Ô£–7bA'C·ž´¤„õɈ… 4›¦*£ÊòÛ+¯=òuü²’﹃£]«‡=oäÀ\Ÿ¯²<Ös«I›ÖAEŽEþ²°GY ®ÍêU Îáˆz>ê¹?3÷±ðèËòç¬Ù±Ða[;Ê:†h:ƒ©ïÙ+Û¿Ãtxr«Q9aóÇ¢”W’ J^nÚ‡Ïã,,ƒ÷ðå4„ÓÌD)÷~ Ž'ÕáD¸·ÐÄI<f<!MýÖ ÿç¨L0ÞSÏÁP÷ÂÚþ;“6=lªqhÈ<r¤Œâ˜Mžc÷¯Ö{&Âæ³½ŽE±¼61ÿJ¾ö'4aeä1Œ*(#ur§¯Þ'Æ1ÉÝtˆø<×dmlTè€øÄc=· ™´ý‰i²F%tyŸõOŽþ²átvúͯ’9¨«t~³zx¸gæcpk=Èóh·æê 1¿T~iÃÜÕ×´;£®sÊybýéê\Þ÷ËNkû%ŒOŽátñŸæÙ·¶=„&ÐTYŽl‰cA=(¼pk08´ö{!DöqÝ“@“·PXÆ_†`Üû%ÎEòå'<¦ ýøËß­¯6©{¾y A[§&v4µ²6: y_…Úƒ“èP -Þçëz¥|Þ@»@8;iG8ýÖ—*AØxðo"Åùrä­W^Ûò7ŸÜÎA‡¡QNF{ ê€2ð;Ï¡G1ODfòu€Ãc=· vÚ>O´¡kîÛ†ÞÉIzG-òô—;­ÞŽƒŽ:?„éü2«W¿ýF¯N`L_»²óœÎ/ÁùW•î8mì\”èÿö!D'8:‘³ïѹ‡ƒÀÚwï)§é/ôu',‹LŸUÙ ¾=‡³Ò¶ì·=R#"BíÁún*[âX>p"Ø^…¸XA6ƒ¦Ê¹ÍÌö$ï9#¾Ù¤õóXÏá¡Ç¢ˆc± ø îNôçA¨âX<^µ·çÎ ?¦´^빂 <âXÔ�q,Ah:âX¬† ¡0ß–àØz_8÷¹×Þ…Çz® ¾ËME A„šÐT9'ò[„mB‹ ŠI„¦#Ž… BýÇ¢ˆb¡éˆc!‚Pı¨¢˜Ah:âX‚ Ôq,j@õJr?åG“æŠ&ÄÅ«~&«lVæzÓ0€ŽµÖÅVr§rÀ¯X…tº%ßð.«Kßg¡>ˆc±nÜ—‚¥‡Sƒ®gueâÑôF…´Õ•²2}¬2ççÞë¤|ó€Êuª×ÏZÇšn{ºÇöåÖߣ½CÕÇ¢T®$\•sÇZá³óÆáì ÞÂ1.h“y¹yEMü"ǪŽéC]»¡ûa°(Ê-*çxåÓ„äË.y‚®b]ÆuOû‚P3šªŒš¬d3ÐÊʘg¿qõˆzƒWÆÎM[])+ÓÇ*së¹÷êX<n{º·öåÖß:ë¡Z˜R/>W[|³�¼WSÙ2Ç×°£…ÃÆò¢1ŽDPc Çp:[¨#.Ô«µ²cQýÐ b%¾Ãeô†÷º¢gY9P{ ¤xÕÑ*ui×½ Ô“¦*£&+Y/ä\äW¨7JÓv¿à:ûÃêÏ®~~Y™>\™§ÓLÏm¢c¸íéÞÚ—[kªOìlïCt‰Ÿ€¾‚ópZOžA0ýÝ¿%âXÔ€j•d‡ÂˆcaPåp>Re°ŽaÏ"ÊËA;9 @Ýݱ0(¡þˆcÑıðsýÂÞÓêÏ^éü²2} 2Ϥ™ž+ŽÅqëoMõ©GY¬0lþ6ô¢ ³Kı¨•*) Ãá3˜Dý‚P(„‹ç0Éx} ½áGXåº\œÁ(èêthÃvtFÇÜÆFð¯0Àg¥ÎågàoøÒ}‚‹Ô¾z é…Ì º>‡(NC²™ø;,fo“á¼N�£Ù%\i§Â:󿼄iïÓ‚NaÿMæÅL-<¥òöéï[/ÜrgÞ #ëìC€yÖå€e`â,[½8ÐiRNÛ¿žÀn0…+}±JïÙëØQ8ž«û”…BÔ¥„A �ß·&Rœ/’¡(Gô;íî³<ùzãO–ÌÂìštŽLóÅaçÊÑ |Ñs½öa<û�C-ÃÕýg*E†|=€Ç>&×hÙ–o\UÕxŒç å§«X78¸†Î1©2Òרûò~ñÜ€w0‹eõŽ’Ñ_õmV† î$}Ô‘§ž3P¦žï;ÿ˜OXGãÖ…þô’:˜Ê Íìq}VhoX'J™2³·§ÐùÉMóWóÜÊåX¥-<ƒ^°ožßû'˜gæ5à=ìðÞPÇ^:sËòë¦GÕQ·û|Ç"mãp¹'¶…§#7ÕÔÖy Óx1I·þVy‡UvvÛéô!šk$AÝc6„N‹G0n>£©l‘c‘ CÏëP0lô³r†Ã–¿A´Û^øYÝMÄÓ—ê…æ¡2§q_ŸÁ�_úÔ¹¬hžÁ“Ÿâžõå<„n|/<~¤Òà‚Cá´C/û B´ KùÅ¡×Ýö.„çêEa%KaGéÑ�J,èï¨{:ï7žÇÏ@!ry©ÎëìX±‡&=­Þk8S/¾¾ 1,‡oì =Ön—é QðËÛƒá™2b£ ϱ`òê2¯î¡^4U•ç‹:âwÛÚ·â¶ÙÐò®Åy2ä^ùrôFËb”[hÜF0¿þ—Ѿ’×d�é–ûº3Š­àX諲t•è† )CÃd÷¡ÝÁ¹2"YŽ·‚_àŒcØÑ@C¹¯ó¯Œ¶B]Z‚k„Æz$ýüبõ­TxÜ)Ó Îñ¼úœü_¥íMë/vØâtdòÈí싲r,h _c£ü)ìF¿™ú¥çazãgê{´Éî`{ÆØ‰aOú¶ôý¢ôëôšöbÛ0þ:â}§¬4ùÑ&m¦]›4ØíØ­_g¿Ðö¢t³Ã ÏmYuDP›ˆËö`y6•-r,òk9žP(zÙZÁþŒ{z3ÒnÜtŸÔ<Rüö¬Ç/ ;Ê�×=ùêÜþ‘wõÁœ—웗ݚȔڌàð:ʨLæ*õE°PÀ{Ù=C vˆç%ÏWS&I^X ”9yÜ¥îasÀ÷¶‰”çË6^<ûZžX£¥Žñ’/Ó¹T(GY%zÀ–K¦È•±˜†3øC?ß’û…òYMo¥«,Oì´ÙF¥½étåÔI\–·À-ýu"[°N¤ß ËÑMOYúÒÇóëS=K?7¯½¹õ娙4産·~ª¶GW–•«ÞOò“¹Ga~Óø¯µÎÍ\Kúž:ÑaØë'º?—Ì}Šê»¤Üþü¢Úy;ßÙ&–óìjGäî`[j*ÛãXÜ)Æ šD8_èÉòÐSØÛmøˆ{ojìZ¨¨¿û}ýhÿÅú¹/yà)›_znÕù ©asê2G<PzÇ"+Üœ¼&ß1¯°¬Š„A ¡©Ê¨<_$?òŒ/-3 Ÿ\™æÊä"9ÊrÈoÀ›¿}zÀ}†¢Hþiìk<×;z£(]eyÊ`§Mÿ7ºáÔ/Ÿ1œ^6Эº²qÊ%Â6‚½å¨ò;{c™‰ÓS”>$}<¿>ú¹ùíÍŒ¬<£žm1*±ÈkÛ)|yðµ§ÌÜgR€1湃0Ékæ%ùE–‹œÆóÝk­s3×Ú£ ˜‡{–#éCóNßÅ!M™rôÖwI¹]|JçÏË7˜Ž-Çän”˼ú²5Žzš{%Þh>®ñ¯Ð=9F8×/¡5ô˜ÂnÐ<r` +ú-6ú¹w­“³P§Ù Áÿ�Á^q8O*æÔžBiȉ ô " ŠH g»ÇÈÆ(¬îî)ÁÙ¢P+E:„ q^l`бFƒØ‰ÊKcîV÷‚°94U•ç‹ä‡k|¥ŒµbÃÉÊ4G.!¹r”å߀7ûô�Éx»·´Hþiìt•ë¢ti ò”ÁNýíYÍ©“”ñ¶"N¹=’vlÌoTn9jƒy:Á1DÓLSé)K_úx~}*ôs‹Ú‡ay«ò£`MæÜœrô:UÛ‚£+3ÏTƼ=¿’ÃŽõ1Ï= óKŽk'€0ú�_¦Gžk­ggÒ¢`pG;/rwã°í@F0ý2qîãÖ¯½_Rn7Y›#Ëï0žvwÊe^}ÙÇÐ «A­ ;Î 6Ôy¸8~9ñ¥} ý Ck¸M½,&.3Ê=„#j«•Âwâáhû¥p1/IêeµàaÝDÀaŽ`¤îg„ˆR´“38}õ~;{ {¬x2!M 9”8ž•'Sqš9&“ccQˆá‹ü'Þ×.1,8v—çX ,*w­{AØšªŒÊóEF‚–£7鉧h€i9e z?‘/7³<™Fò96FŠä(‡á° â}2¢ ô€éJæ@hCL˳¼Ñ€UôFIºJtC*;cd±,¶œtRúï”Eidç.S–·€ŒÎV𾜆pz17z…;­R=íÙóÇã—F—aݲNj¿„ñÉ1œ.þ3U¦YÒe^¨×KÚ›Ö·yåàæñRåÉWŽñ~šjmÁq,œô™¼å-8ë¹GQ~ãü`{á98¿…á©rDèÜØhw÷5ü̼÷±e€Ê)•Cûèœ ß+'Ì©¿•Þ!N·y¡®_£#áÒTYŽl‡c/ÑÞèŽ Äþb�*ú2‘|ñó×èEп©M %œJ[q ÷AcàƒžÅ[üeåÄ_œÀßñ«PÔCA•XxßÌÞÁ«ˆ¿ •Ó»¥‡£ñ^Føç„îM=gv™´zC8:ªÜ¸§ÓèUxö¥TºÞ@{D¦eó>ÖR÷‚°àûÒDÊóe÷°¢LzÑQ×Èá‹–<iCïä$½]äÈ4Ÿ|Η£'¡’Año{pʼD`úmù«žÿæ5mu<œ*GÃN«é WöfÓõ÷Ý`AF"Ÿ£e³-‹cÝ÷G:½¢Ô¾¯·½ 6„e¤'Ù*Ralìœq™9çÇ#3xÞ&áÏ*Ýh,žÃY¦Lé_™çèõïvùÛ±ñýøz]gvšÿÙŒªð9•ʱj[ ÇÀ[§ätÅçâfÊÖŒ8ðo꟦%ùý÷dtíŠIÊ Ñ_†J••zöá�Ý´˜L‘ò¼ ЖX§(;Iwf:í±ÀàЭÏÛ+ÕÎÕfE` ™Qœ;‚Ïh*ÛáXlWp>z§©P'õ"͆°ã3ÜA¨M•s›“¯&ÊQÑ  À'0<uB¨Ðpö~añPØH9çéð6txöÖf8¯ ŽdlÑ\Hq,jÀ¶;zèÕ‰“Ô==ý)¯[„ú"ŽÅýÒD9*ºáÑaFüiaú #¢CxæQ1©yè Í#èoMhóƒƒ#…ìùæ³4q,jÀ¶;8Œ7‹ø‹ ¸á°fSw¨[„Ú"ŽÅ=ÓD9*ºáù‹Yd-Ħ¶Û„ñÞ#ÉG ¸MtsÂòîžÇ¢C›ìÅêš–{SÇB¡&4UΉüa›Ç¢ˆb¡éˆc!‚Pı¨¢˜Ah:âX‚ Ôq,j€(&AšŽ8‚ õG‹ðh•¤×sXß·«qóiA'g›ë9LÃ�:™ou ~ycáÂNV-½©ï©û¾?¿q”´Ñ;_0™Bt“ï oz›_Súıðð(2øa¸¿÷ž}}€÷åAe¿g·^G£*÷)ß„m ©²Ç¢†$‹àø”)¯”ªŽ‹cñˆà"‡^4Ki;˜ ~¾ýêßz1£Ž^!ôF¯Ú¶V'5‹)¦W1}|ŠÛ¨…^…Õ·²{ñ—Dx¥MoóÖâ[âXxij¾îDá{_4–¸gÇBŸÓP‡V¸š,óı¨)Å«@’!#ŽÅã«>ãò¿PÊõ%L¯n©N {dÕ½{ís,J+•ê¼­èX ´šl²rëµy4”ö_ßâëIŸ8~gÿ% ÒˆlÂH̃çÞ³{±¨(ß!q,j€86âX<:J¡î²±ÇEË뺻‘=™•¯v~Z}4çQ‹+8w¡u«gˆcQÄfç WRA¯õ°Fd ׇσ8B=Ç¢V!Ož´Mœ»»ÇKîÃxöâA[М)1…|‡Åô%tÔ3žt^À8<¤ž+_œ¥ú-ê›sí­}Ó/þ#ôÆŸàlH‹Ót†0‹¥Á…uÞªû™0\Tg4ãÕRÕ±³×´ÈQ‚çêú<¡æ1b®ç0‰ÄÁ’ÞÂL¯ºÉñêEéÊË“k$•Ü«r=tá(zŸÔC——Iœn«72«ƒr<më9Ýø>ËÅŒÜÇ{Û ï`ú~µ.RÇ¢sSÇËK˜öñ|ÞÂþ›Û€º‡ïíÙòŒÊܺ¡8èÂ{à9õøsù=ƒ^°oê ,.5R唹¿"óìˆIò”U\Ž9Ï)l£yïPÁhN*mx:Ó]êX¥Qy˜ “EÃâØoçwu]z©îFN§…ÛlQÙªcÉ;°¦%¯ TŸÝDÊóUUS;Ðõam­¾ncù²!ÕŽ´SaÝËg´æÈc|Z×êGèÜ6Èò¾Ê{_‘<¹Æ²“ïËâôfFB ôÒd’wo÷ýÅôO’ºÊ•[ìX¼ƒY,‹vTÛøj®³IåÙ§“þ=GðåìXügÒætÛ°Ú`ÜV ÊPØJ°4•íp,ËÍlz?‰—dõ .£}%´öLŒ¼>—zUµ ÞÕJ,Ql<)a8*åG‚ìú3„(»!Ìo’¸p6b–—ìZiÒûí]ϕà A+ÄsßV†gJÅÊ¢ªcñUíïÄùRǺª´ Áõ¥$]yr¥¢ûž—ÇjõÀÎ×× •ƒVÌM„wk¢K6æLLo/ü¬J£ÈMZžêxß%•‰)#e6NûТ<éòÙQe“Q‚U±'nã½_ªgR~3ÔV”¶óÕuBÒ9†pìCÛ¹¿6tY=…Ön—K®gzÎõ ÐqH•£ªålõ>‡®Ïk£9ïP&?æ4u×JFfÊ‹‚ôã¾nWÜnô¹-s/}_jŸT>I[wß«‚²ëõ5œ)C+®W¯qUlïM¤4_•e°rTƒ×ôîp½S;- e¿ƒyòëCu1jãöa¿o-GÞ[FpÕ÷>Ÿ¼tY†/·ÇÅ)Ü‘Æi¡÷#_/ýqgÙ•ï+“Fê°0z€ë¿@nñ;ÊN�¿Ã>g±ß}úi9/°½Ê7of®[òœô~~>éfÂÖÑTYŽlca ϾäHÄû$4´R{ ½Á¯™%ïÓÂ…zibÁ½6t_o<PSÞû¯™ ºÅÛ1€2qì¤pø·Ât•äÉ¥ð^¼_VV¾Ü]½Ï细*…Ä9±·öàÿ†/X¾–bH òPFñ`27ÊõN RÙ£ðL£º¯·žeu£(®ë4™smgÏÞT™}Á²ò…!¹uŽ¢¤ß²iÊN"OSðUÂÛŽ¬ýT[(IÿŸèLW™Dê¶/g¿ lg`~ízͶÕÛ€÷o"¥ùª,ƒØå‘ç|ÙÀm(Ÿâw°‚ü`Ã46º=s£ty” ì™U(JW^{d#žœ½…w”]E:/}¾}S>¹…P¾bßÝw¡üÆzA¥itlÉ &[^é¼=·z>…íÛ@SÇ"eÐæ8JÌ'¡@Ü{n+8M¯Í³t¯8 -oX±‘ ò¾#*ûÜ4i!è=×6Ð ÓU’'—’{ù'û™´®èX˜ë}JÇü×çÙ!"•‰bð8W:}|ÜÙ<FeiÝ(Šë:Mæ\]¾VO¿…9×ç fËU­’•8”þçµÑüw¨ 5:}‡D¤Û‘ý<;Í%é¿ø”nƒ¾ÃböÆjßǹoiÙÚuæKÓê`4‘ò|U—ÁꉎÃ&æ¼<ƒ´ï3l åÉL@<ïK,_HF?“Û3>·œöœ›._{äÞåÀéQ„ÎóÈ{oúV’]ù÷f–‹œŽŽdîcîé“[ÝÓkàç :r†T»>$Î^®,póVôÜò| ÛG¹Ì«/[îX$F+¬¼œÈ¹ü^¥t,6‡Bh¼i`åBÂÇëa¨gô¶#¦‡'m�¥z} Ó…äÉ¥ì^Þãn=Xùº•ca‡è0Ôk”êÅ΂Š,ÒJÄî‰[L#+Ìßг¬nÅu&s.•¿ 0?1æ9¾|r›m„Ño¤3Ï©ÚF=ïPÆ¡Ý Œ`úeâiGvµÛBIú),Ñû|¦°£ ×cˆ¦3˜¦Ú—ÓÞV*Ûl[½ MUF•óUE;¡<Œ9Ï'Êñ¶eYùá„c™ÓÔ‰4Úe›ú·d$­ê3«MW¶=r(Sº=Óy½twÙ•ï¸Ü:„Ñø2=Šï“/·ºç*ŽE<Ú: õœ>ß·P¸yËy®®ß¢| ÛJSe9²eŽ+#»÷ Ô¿Ñ. DÒ%¡¡®î±1m‡|8çá•(ôòŒÝ3b búfãÈL•ÆØpGƒþFó¯d(Q+N~ÛxbÒa+ñ0¼Ï+*éªj•Ü«Z=$JÃU"fŸïOù´ÓÆ ›cýÕ¿ëó·Ðà ‡FÄ“�±þŽUù~SÉz {Ãæwæ<ÅUÎÍl?Rþ1½;>–)«Æt™ä“m‰“ðzœ?œ'Ó§ lϰ&E_}€a\VØíøiµ*zNNýòç¼Cy°26mØ„µ¨vtôN†ïaAí*¹GºÍóùþôs¸‡=S]?</gh,PYsÝ´_ÂøäNØólÒ4ùò ¼:=Wïg^ÙR;ä¹Fd´éò¸CÏeS•Qù]M»¡<ÖÛ¡2êTÝäȆ²ê0F¤j“38}õ>ãHæÉ7 ßÑkuný?”N C:6>WyïóÉ—kŽìÌ„j)pÔ'8…Ë<½t~~gÙ•«ó”¼Hô×iŽÆoa¨<¹ë„øs÷}$éìt“IÄuî•ß¼Ùòê®çQ2Q[9¹e˜ÑݶÐTYŽlc¡_dêuGÅò1‚£¶2‚Fgp¡ 4€pÛƒ“è0µ]ü Œ^À˜†”Y8ÁÃçÅÆù7õ%Œ%(;2¢ON´àŒ÷u¼R.ñ—,Ôf9ÂþÂŒäoŽ ½9ÓœØY}_µ±âH ‰[¡dèÇéð¤+7On¸P…{U¯Už:†7oßÙ,ç"µÒ+¦3þò‹S¾±RǤ¿ƒWµÃ2W l{âö Øa'+¼ºQ®X:ÜAm=o¾ö¨±Û޾òå¢tYaÛæÐe�ÙÊѪïJÏqÛèÍ_¼ïP>hôñ×x°O!<P­v…Në>eÚ|~ú5©2QGüq]N#˜„?«sØA£CE¬rªX¶­ÞŽƒŽ:ÂT}êvཚHi¾rÚÛÂ6à̾½™Ñè|ÙP…VÅíÄÁ+?ìv¤¶D&+j‹¿L¶Ú{_„_®¹:â„oÐA¶žÇ›~n^º³ìÊ»·¥'ð·IV§_nÑ„oúíI/„(µ_P†:gwvÈ‚ïxeÉ+,ç÷u-yPP†ÂV‚í ©l‘cñ 1tÃSg¨…Ö¾2ô˜41O‚POšªŒš¬dA\ı¨QI: ç™ÓÛ½R‡Ä“ájFó$5E A„ú#ŽE ØŒJú‹Yd-êc†<³áJu¢‰y„z²rný<f¾ÒáTží–aH‚ y li*âX‚ Ô„¦Ê9‘ß‚ lâXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QLÑŸ}J 4åp=‡i@Ç^ÑzAÏ^ M„g{‹+˜OC:Ý—AËÅ ¢AZ÷ñu¨:ÉUŸ^(„É«|¾ .p9…0èB{0SwzdR a:‹mÖ˜ÔBƒ´@£ï7aý4ÙfÝÇÂ]tG ñ¯tL¡;S›¥<P¡œ¢ åc­ &ÿ³p Wq­WSôÊ¥#va0ÆU@yXkUÖ[)Aî |/›HY¾–óVÔ~h#üw˜ÏŒ<ÜêÏÎ>°^¸™Å«ë?¾cñ.£}hïFpys Ó~žtC˜×}Ùìåoív`7ú nèwÚÐýÇ_àŸÜßÂóôâ¸ÂZhª,G¶À±Hˆ¿WÞy S½Ì>ƒÊc‚éï´«M›åù[½!LØc_.` Ôïuì¹Ç¿ScÏ›.ƒ�Âè=ÌRåÀÇB6Ц*£êòû1dïD½¶¬gñÐzœ‹Çw,Lý§ÒFùþëzëGßhÙÊ#hèt½„aíì¡ÇG‹PM1 açà€†œ_³Ž³—¼L×g0è´”ñ=„Y|S×I A¨;âXˆcñxl©c‘IÇœ‡»Ðª¹~ô½O«½cÜûïdýÇ¢TSL¯`/ú=¬ÙzÒ‚ÎàL‰JÄv,–p5íëãw¼žÃ„ yÜ⑎~½`ß„ZõþþWæ·‚ùüWkÕk ešÀbé„w‘€‹GdžìeCµ8jp Qà …²cH;ûà3cÁéÆ7'ûGÊ91ñ˜&m——I|fâ¼}‡Åô¥ÉSçŒÃCéá„[€ïU©’¯ŒÑ“’¯Jþo©£„ãó„Þø“%×ìŽ"%â~æÊ›×X$Çâù�Æ|¯V†g ÒJ¾ÍÞ*yØ2÷è0šñ±¢çäÉÕ}Ï>$r5ÖS·`I¡;Z> ì¿¡ü¤GæGl—«íX¤u×øwçdð~ïÌÎPÿàµéÐä$¾_=—:ã{{Óõ‡ISœŽ)|Š÷=zЋ*÷ÉÒ£6»,ÜPiµý ê+ÖéOH‡æ•Y…<'`»õé{<v‹¶‘û~¸áájkBtâþæ{˜$ª#>ëïÕÀ2k*[èX !ýU £uÍSK¨^˱øóð'uì™u;Œ"4ÂmyÁ®2ìÑYù;�ü|Û)H~‹¹~aMœgëÉOο©c*Õ³¡d¶Â®=:žƒî}qçV˜òhõ^Ù<K[© –$mF©'ñÎì<|Kœµ ‚ùõ ¥ÊP;5”n­è”c#Ž… ¬LS•Q5ùm;,³LçE,³Ðy¸úa— fšªå/Ë=Gv^† µÜ¸yr,¸cˆÏoõaz¥ž÷nïBx~EòMòúËAÿsòå*ËQ–«U dê$£çé2ÚQå£n•Ÿfó̶S®­`ªL[˱øŠFë>ì?’áëBçb~´a½Šù£ÉÏ:Æ_•¤:Ràôô=“Î(ãXÐ<oºhAÝ·?ý+\âu•'S[h9eaëṎ…í`á~^Ú~³²<§È×÷«·‚÷Cí#é÷Éàû­ˆUϪȼº²¥Ž…‚_p-P.ÕKÈŽ Ä5¿,ŽpºÍK=n&¶pR*¥,öú(hWDþ¶#å Îì³3iqc3õ>)r}ÿ§Ðüª¢W ‚P¦*£jòÛ’9Z¾Ø2‹Gšé7·%%©Ç–uzpóŒ´l(”1ôðY–Álo˜Î¯¥ÏñËÕüã«Ae¢?:2WR±|'Ígÿ’8eö¦ué…ÖÐ{Þ^øÙº§W؆³{œÓÊe¥°ëLÍ0/]x2wªß2s(‹0ukBë«'ÉoeŽEaÚŠò¬ÈåNm£ìýPø®_µ½­z¾€m¤©l¯c¡H¼ø> ‚çôr𠸆P(‡HOßÅÛ·q,ôשÆ8i–}Üîy[(e±g ’êdŸ›~î9™kŠ %ž“p�îqCV¥©Ê¨šüNdŽWVÚ2§Ð±`ÙÿŒF‡É(-±°{™ãg}1²2çÚ²çøåê*Æ£eÈÚéc®Ï! °ÏáϤ’|÷¥Y—Sžî£ëZ?@ç‡VÜ¡•«Ghßkd»ç*ì:+LAÁJŽ…Ó. N}gÎqÒZ¥ÌVp,òôý*mÃ{,¥“ýç¶7«ž/$4U–#[íX$†yúN”oò6^s ƒ ¼Q*;„L¿LR©ÚKMÃÁz¢õø2=ʾÄÔ[Ò:8‚£IoÏ $½oœ§¬ðsÓ–I«Zî¾¥Øt²ôWµ¬Þ A*ÓTeTM~'2ÇȬ´1g~£Kmìå;ØÙaÂgPöcH§ õ“7bÏúÝÈÊÖ>D—¾ë‹Ÿã—«ë±Hˆ×âÐrþ¯ùi¦rò; ‰^8û CËž–ŒZ¸z¤ÈȦQ”¼‹Ât)tÓO°¾…# C¢ Rx´Áv²ôoÖgV3mÇÉW•2«äXëûUÚFéû¡ð]¿j{[WûÜFš*Ë‘-r,0fñgèf&;q,£ýr$ñ­Þ�"žÈ…=ï“W¼à UE�!Aib|•p:z'Ãÿ çzTÄ~&”X¿±ÀÒFx’Σñ[ž²Á¾†®ñ94’ƒÊP \7mÙaU#´Ü}J“ÊÇp*…o‰c!+ÓTeTž/Gæ¤BY•$¡ØøØ¸ÓC–L¤Î"6µ|òw>ȱpæX𳌬C]Á2‰#ql|îsòä*îñÕ¹™½†=ž¡ËÀ”_~š¿R˜”rø:ÌoÿÒ´¦‡Îë#{ŽŸ‹}¾µñéã¬3xAüÁ­Gþ¢Ò—“.½¶ÄO±“ct­ºO<ñ¹Î;I¤ûm§‹ÚN¢³Ý>ùò ¼:=ÏO—YNžSêû¿­Ö6ÊÞøúDgû+Æ8êüÉœ¾zïwú/âXÔ€âJ"Å …”ÚÜ—Z¿tî„â%ðÊŸñu«Í*+D]5¡ ÁèÂ%P”rú5z©^Fº' ó‚¦3žz»ðK“|SOz{÷DÜ{µM\»ã8è(ÂT9nÚA:­Qh É»ûmèŒaôêÆT–Žƒ‚ äïO)Ë—W>¦Â|¬K2ÐÌï(NÒûÑEÜÑc~ã­`EåÔvPžŸY2X£ñÔf}U¨è9_ åêœD‡©}î©^…›Ù;xñן,÷ Í8²œ¬2åšýúRæ+BÖhŽŒïøü�‡Ö~/„È>®¯·Ó¤Òúæ5mUVáÔÔ«7]‡ø GZ¯;ÏU÷½ rÎíPz6õå.{â·n¦ëá{éŒT)3ožmòõýÅ™ÝV*¶¼÷C¹Öq™ñÖ;Íüæ¦ÏšŸ¡2XÆMeK‹†ƒ=*;žxYAESåÜÃæ ;}N`xÊ_ß#ÐH¢¯&­‡‡zŽPÎï0}ÁŸÚ„ÇG‹°½Ž™°¢V„¦"ŽÅСŸüYSúM÷ZBPú¥£x¨ç…èù%Ã!Œ¤G]Ø Ä±¨]Ié¡yÏVeñ.ð¼ˆÌ°¼ MeKyØ|}‡Å,²"SN˜ÚŸd]õAX?nã4,æ"Ž… BMhªœù-Â6!ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85@SEô¤ï§é±A¨âX‚ Ôq,j@~%¹‹Á8+…º àX_:ÀÏÔ†A²p.7ù7˜…ƒ[-Vô¨ÐJ´þƒ]Œq!"³X” õ�åPij¾A|4Yæmc‘>­ó¦©•Ÿq™ýÔÒö¼j6®B=áU8— ˜Eõ;¯Œ]'®`>=…1¯‹Ÿ=ŒÞÃ¬Ê ØËß Úm-.„kg¼„aíÊ@ê8Á7˜‡?ÝásšJ̧]hftAÙ+KÛ+!ß~Îëë J­ Ý…à Ã+çækTÉÓD½v…4ܵ|Ö™–‡‚?qüÃ-òŒ6BA§[Cû¦~ˆcQª9CØ98 ‡–â×\ÃLÜñËÄËÔw†0ËþºÕ·u,®à<Ü…V{@Ž…¶Ú骣s%õf+‹Ô¨²2ÈgÖ:ư3ÇpÛKF“±#èôXJ¸Þ{ ½Á¯p>AßktaÓ3%_À8<€Á[8Æ5(Vu0nf0h›ôØçò2‚Ýö>D—×°˜¾TûOοÑÑ[¯e´®‘gÔmûÐÞàòæ¦ý.<é†0g?/¯µ²Î<Ýõ^k/ß@G&`Û[=ÍËy]ýžˆnð=j*[æX¼‚½è?´ðl¥”íX,Õ»Ù×Ç»á¹Ú»×s˜°![<RÂ=Ï ì›P«Þ?ÂÿÊüöO0Ÿÿj-°„¡LX,ð.2ú“m,åÊp(Ôà¢À …Ré™ ©' ·.ô§—XÆ©àç<ùoÐ!Ç,~¶N£éÅjõà@+qõüËߌbÒiAØcx‚pðk"•òì,Ÿ#³ÛÁTI,âú3„(7uø*/H—,Xç7Œ±‡úDc•6Ï Â1œÎ«ëJkò’ÙqÍmq:¶ôsÖeøVè}ÏäëXgžV½—;:¿Öò} ´#~»4bËLÄD3hª,G¶Ð±À—í«r$vÔ5Oa7ú Õ‰åXÐ0ø“gVhÔí0/©1òuo•2ìÑYù;�ü|>7ý›qx:Ôcfz“Zq/—Jõl¨{Îö¸í÷‚ù¥ý¾Ä»J!Ç=U”K!¦„¾ÓýZØÓ¥¯!çŒî±\L ¿3ÇBîÈÖ;;ûh‡aÂóØÐ2éYlì²|wæÓ(‹÷‡íXdåèêxF‹}òü¶dÒì¡Ê9weíyªz/wt^±Î´<r,<uÒı¨«9 6 µ‚º´ R�ë~¹ì{Ë^êìq3tÏ=*̽¾Õkw+\XâX˜eCŽEª·P„»²õŽÅž’uº“FþV¨*ʤرàp;Œ§ 5€IÔ÷„B¡ãa +Ç#:åÛrñ†úX+Ù52Ñ ×ºaÎNEr.6|ÇŸ’¹v/†ƒø$*]Á[ø«û-ß/³1÷®¬¯rûÞ¨G.œýÖ¹tßÂ<a¸ó< ꥬ|bÜÑy2ÌWMË’BÈ Fêþä瘎Çä7Üÿ#'‚ y^*:ÀN Çâù`DíC¿_Ã×KAem 'š¡ÀH;Úœ– Êω¬PDÞðþP8 ^ƒ¡‡‡žðòœ:ÉMS½À´7•íu,º']Ï¥èà xN/ÓC¡çû.z,€²/°ÿ7D*îE³«7µXÀ<Ü»Ã( † ¼Oæ`ÜɱP\ŸC¤ i,Âíhª2ª”/”3ʱ@ÂȽd”e;+Þ²C£V‚dž3·ÂŒ:óˆ2а\ÔóòžAoøK%KÉhJdbVŽÞ†<ÙËa¶&l€Ñœ šOÈú.·\9nžåèœÔ9+ÜŸBqcJóâsÕñ>wŠå‰Ye[X/…åãâ©£•ÒRu¤žÛ¯­Ë¿Á|4„èRøú¾ô ;‚à{ò¼$:Àƒv,бÁ°iõ,þ.ëâ:K·/J'ÆN“²7Îþ9žoƒöS4¿Ê–­~'ÚrÎNE\èö@ëûîZeaãÖIAš<£“›L%™WS¶Ú±ˆ)¾öKÎ=^Þž ¼æ xóÒî@F0ý2ÑB!-´mÁâû”žhý¾L2×ÄúàŽv^Àô*OÚ _ÎèÇMg0M½È·t,tŠ"í¬Ü=´L¶¦*£JùB9£ „CCŸB/ü _•LbÇ‚ bŸ<º="ëáÚ~"32ñ> ˘K¥<ùØ£ñ–—/”õ+ÝŸFƒ¸üXÇê2»Q»GÐgýP”§xŸÓYT/в{¥Ès,ª¦e…‘zí0<K9Z£áãX¥pÒ”z^™P(*#,ë?¿ÖYº¾ÍH[ÊQ¤zÓ¿–…B§ÃÒûvºô}ÌÇŠ¿ŒæÖIIšè§:€åÞT¶È±@Eô3tS_AXAÙ{ÒãÔê Š‡Ùpî/°'@ÿP�½¤lŒ7¯^º£wp2üŸp®GEìgòHIVˆ›&IçÑø- OYhÜ}„Å�ÜCÒ~ ã“c8]`ÉÇäË/ðêô7š#¢ÎŸœÁé«÷pù§y±maw3{ {º÷Níè_ A¸+MUF•ò…ò0v,Voåáàç5„BAòÜû…¨<ƒÔ–‰žsR|ÝÊb%ÇBÿ½‚^Ȥ9ïytÎJ÷g=…ùú®þ>‚`ðºZï|Qõxä8e9yŠ÷9Eõ¢(»Wмz¬šEå‘zÛU¹ÈtVæD¸Ïó‘q,øc/ªì/>©ëóë,UßÞgQ;µÃðòÊ‚ÞO3ºÂ¸<GTÙRQŸ:u1+ïÓËN”¥‰~©M•åÈ–8ŽÐv…»~Ü¡8õ"P<c|öDD³ N¢®cb•€Bx€ñ»/á×è¥zyéžô›:ý¾|qŒ!ÆNB8ЋÜ9Žr|^<i»þ‚Š~ÁG0 VÏ´â:iT'þD/އ#?›‘.#~áofïàUô–â+ŸRˆ€yœ ·ß±&R)_hTØŽ²Ȓ=qïx^x„ºf8ðõaõúfF…=Ç2P™cQÕ %·‹Âfl2iÎ{³êý¹ƒiò½ÌöGû €Ÿw,'ÐÎCî>§³¨^e÷J±Ç‚¨4Rw¸9ŽUQAÎóRäXXáTyu–ªo‘²tý[Û8&¥eaÛ@jSöÓðÌ™ ¡âzm0î@uqê¤,MôShª,G¶Ä±h8( lÁ,B#iªœ«’/=êÛ͆§Æ£Á–±Å±ãéÎ ì,úÁ€>û½æ9vÇö:ÃhþæupÏë·dbj<’LÎNž\cø¡qn[=ÐÚXå}2(íŽìDê¿óë éI <Ï(zêœïÏét¡—JŸÓƒžÊCÞ~RßEõRz¯dĪ:âÑùåŠiYm¤žÚÄèZ]‰ëØApþkêy^´cÁåÁÆ=ÏA)ª3®oNs:Üðš#9Z¸‹zJÊÂü9‹í)'d¸ÇÊ©]9qÌá¢(M5B‹°½Ž¾üìÅŸ¨¡©l§cá¬Ûcºc\ì¸ÆÖõ¦!ý7eŒ ¢ ‹‚桞¯œM÷ÓÆ{Lýþæ5í.áT9sœòzÌ+;Z¬îyr’ÞÇg,í•´Ññ©úU¨=8‰•ËûªÌ?M­û“Yõþ6\“…C–ìs¯·y†'O©}6bsê¥ì^™:pF翪²^1-ßV©çç9ÎG^Á¯c8ržçw.Èæ¯d¹_MÊ©3ãÐðýù³C–ð^f¢vi=é¶GN_«7|žr¾¿Î`ôêÆ’újU §Nt§BNšj¦½©ˆcqKÒ/¡g»ïx?ÔaVgÂK„¦€²¥‰45_‚°µ(i4|ï„\áœÍ=ÿ(Æ–Ñd™'Ž… BMÇB„ÍÇ„\¥G"p$%‚~ð–F¶q,j€(&AšŽ8‚ Ôd;Grph 8ˆ85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQD1UÃ|…ÿø’ ›8‚ õG‹_Iî§ E“ÜÏìÅ_sú‹Ù/©òZ½!LÎ?AØ?­Õ 8iÊ|æ¯ ýñ1ìÁøÞCêÊ¡&ÒÔ| ‚ øh²ÌÛÇ"!þDl祳@.вc}KšW¼ÆïžÿO6Š'#ÝqõÔG¿é½£o[ã·¤!:­ºŠ¸ ›€8‚ õG‹PͱÂÎÁY>>^lÁÕ{ôme^E߃3ZüÈ}Ù-Ž… ÎV;ztÙ]¯¦æå æÓ‚NΪÅU¹÷gØ ÓÑÂg¹_üÁON! ~¼ýâ€÷Æ…^À0Á9£"¥CÈÉç±[á^¶#ŽE ¨æX¼‚½è?h™zÛq° Zfß^ ô¶(c~bn-)a¡þ zÁ¾YA²÷ð¿2¿ýÌí41Íz™~'¼‹FP’EûÜ'…ÚÁä‚T(.XÓIî¥CÁh}Þ_)\.&Ð×+šÐ«þP„¬ ¬|ÿšÈƒä+³â°c«ã³¯ÔÇ‹V‘¾?9~NÔ:ž±¼Œ`·½Ñåµ^ù¼S¤3ã]}+^ׄ«)Ú‰ÊÉCœÇ¢U± }/gÅma«hª,G¶Ð±@€ÆôŽºæ)ìF¿a?CâX°phõazu·î|#¼‘¯…p«Ýð¾ÇBŸo úä7ãð(_ûßÉ!báÍ#+öœtŠö ";M Tvˆ—*‡Ñ‹S½jæ*ù0iøA_bR8;Ò{#kA‹H.£ü<„~t®¤ª’ç#è‘3r ;_awøK>þZ»‘³rðÃ`dîýŽÎÜíÔ¹UŒeþ†|ÿ› Ú5v,= TÇ Ž…¾8ÛŒ85`5ÇBJg÷©r v!<¿L  Åó8Ç'ÔË}ö¸]aå‡Fÿ^ WttŒÃô8-ç'0ô ½Ò|Pšp¢ûü6)!q,ªBóäòä¸î@j[Ž…’[ØÇN„Y98;úû0ÜÍè¯ÆÝžA^¹z’3ëþâX$èóÖ!Ôq,jÀÊŽ…bÉ!;> ‚ç$�a¼–P(‡×OynÃí œ4~:P,«}ܵX(E¸w‡rtL¾Âlø:=bS9*Mó ¥Ò«Ê6CÖBS•Qy¾Ü9¼¿ãÙòÜ1ÞÊß@y‰›cRhg;5ÏÎ…z仡ål0V¨(n¾ðQL_Ô§°*kÓ†¸›Äž¯Ð…¥Z·6ú‘5<#k‡†™9 v¾Ò†t2⟃eÂŽÅøS’ÖÂŒë R(Z…²_)tÃy¹×+ȱx>Q›Ãùš¯áŒ»ŽEnžTîªûjkFöõ90“Q†î«ÓÃí9þÛw^›;‚é“ÇVï�´nF‡ù»ÊªjÝ…`t¦ç]½Ž¿ÇÚÝ×ùŠÐ&QvÓxHuýzzÄÏ$Y(˼©lµc¡ 6Ìñ¥`ËóXI¹xŒîŒã²A©{’8Õ 8�Âè|™e®áЭÖÁí¼¸CøåCÀ.Tº­‘UóaPi×Ý”ÐZCX™ ÛëX$†‘5f=ÜGc çJ|£PQaÈéQ׆¡}]ž\ÂŽ–®âéR>jwø|UIù !ÊArRܼ ìÕç·z0<[Àry Ó>~æÜ'W«q÷g˜üñGN’N8vrÊ×"£Ø&CÝŒ’³QlB}ÛÎóLG—ËCw-ƒ=­Ó²×ëóuûQmGÏuL¨8)Ç¢bžô| êÈÔõ²ë¯“ë3¨ëc§E±œ¿ƒ:/mî{’ÇThŸ¾Ÿr²ÂϪ6Ù¹a»‡í ~Ÿìýïô·)Ks=;óÞU•¦Êrd‹ |ɆnÆY0/ªç&ºø¹Ù(é5Ñ=}x1½4B¦¼dT¥ÎÑ;8þO8×/¦-ÔùÅÍ b#ˆ’tßÂð”¤ÄJ†õo‰p-ø¡ó#ôcá°j>ÔùÃÀ(/N›8‚°šªŒªäË5Tm0ÙçãE†ïÌ'¦—Õ?‡ÂiÝ’ùFúÂGi´#–{ü±¼´Ú£Å7¯·áNÏÈÌ`=ÿÝÖ±°Fì}ê ÃvÚrîŸ_ö)C?'ÏÎ9)Üc™P( ™ãº¶Ï¯š'­wÓŸ¶÷C6@<Цž=:N·±¼6—É£{>BÑô›)+·Íò~¶MÇœ®ã$xÁ¶ÐT¶Ä±p†nÝÛÛKÀæ‰`hõÍÐ`®BÒ›a†O!<P/mç%ü½T/(¥…„œyiÓ¿aâ!ýN�£IÊð7½%æ)Ýóð| ¡[Ô”6«åC+%ì¢1 Ér™¹™ w�ßµ&R%_®Qè7|,9Thø’Aè;Žò´÷* ÑÉ%?|ÔôN?£žq’«VXU*­ÃÖÍkŠxÔ…6”å.ÏðKÕkv,ôß«tŽå—½f…dóìtÙä]Ÿ.¤À€¯œ';„©d$Íþš”j§ÃÁuµ¡°Íeòè«¿t^LY¹ïï{ ¶³rÚ£¦ŠÌ«+[âX46;‰Ò¡™4UÎUÉ—kú >^føR¼eìk0„$$1õ…X#²NøhªSHm©8|E*­žž^7¯·á.Ï0¡fi£ØüÆ£÷áXä ùÈ/{c`¯ºëÝE×g rP}üªyŠç-¨kr{ýÙ¡šÀÅôÈŠ,@ Úœ“Çäãö\Òt^LY¹ïŸŸ?b‘<C(¢É6«8µ‡GØË¡)4UΕç‹CqØ(ä}6tÜãdø*Ãsòåxuš–ËÅGö:é98r=|c98Zûú£‚goø¨ºð2§&N+y]ðs¸q(.ˆ¶á· w|F꫉ÊÄ¥ó#96ãÃ¢Ï ˜œÁé«÷pù§)«ØY¡²3ûœ>k0:yýwùfÞ²OêÓUº«Ð÷a£»èú÷°ÐŽ…;Çš³A÷2ŽAÅ<)£¸ÇN€=ãƒëõtº<ùÛPØæRy4pÞÒóhxÄê?=:rQÀí‰oäX𠚣ÑÂuMª8åBSe9"ŽÅ-1/éðn÷=Ço&_r¡Ù li"eùJËÛkN¢ÃÔ¾þâžÌʆÓC˜ÏÁbLçÊ "x²k|ÞÊ {_øhb´¥ïeŒú¯N^´‘»´ïSÆü›ãh»i\·¼nõŒ”1i‡è¸_…²{ð-h²±vN>›žÿøü““ô>^o§O?¯lB_Ù¯ºK=ùœ—öà ¾æ\oNuûKJ¢ÌáÑ™{)#¾Jžnþ£W'0¦²vG·2P¹ºÎGn›;9†ÀM—¹BåÅú‚#µÏ¸-Xï¦é#–_œ_±è@O9èúz {^ ,³¦"Ž… BMhªœkV¾Ð¸=¡3J¢ Âanè Üž‡ns¾9Â*ˆcQı¡éˆcQôhò3ç›þ8A÷6"kæÁÛ;· Õı¨âX‚Ðtı¨Ö>*_z»CX“ ”ómŽ zŽŒZÜ ,»¦"Ž… BMhªœù-Â6!ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ€âJ¢˜À‚Å|^Ñ{¿b\"ŸßM{;õ;ç3q9˜o·ógòàþG×*üôÜ ›úÖµ ›ƒ8‚ õG‹pß•”2Ê=†ürq£ø›ßøýkÿÚfõÒêž’ï‘Û‹úà¢xûÐÆÅŠnh¡#wY½à‘YêF/„ÓN­ªš¬‹‘^DG„Í¡©ÊèîùÚ¤Î#—šuÚÜ¢Óêî|‡ÅÙkZ?Â^3£:鎳>Dsÿstâ­Œn“{Ê~ÁõRÌ:*nÙÕ§þ M•åˆ89àb3ûCj¸h”÷©¡ò²ùögÖ~WÆýÏ´8 ·Vãt0ÎBõ/)˜ómÇÂÿb¢W µïá!³ì¿ ›DS•ÑÆäëzÓñ@¸²2>à rÜZ8móeë-:­Ö€^Ü­«6_›œWýŒiYÇÙ:Ñ«XÓŠÔ·¡VíaЫ¾ÿä|J×á!ëM4U–#âXø 'ó^z3ê` ¾«0yzÿsVß¾³cq  ëœxÇB6š¦*£GÉ#û¯­Žk˜ háY¹ÔFK Z½D¼ârV’­hÜ¿„a‘¬¾7nÑiugÖ0ÚT¥ãl]ègÝÁ±@½=<f[ËÑ-zÙ²þׄ85 °’°‡)  Ã‚‹÷{ï`¿î¨Fù5v*ŒrÁÍv�p—óï@¯pÑÎOs=fv,Æ3åègµ 38³îg wá x-~iô Äiíìer¿9­6,‡¯N™èSa·\Àl¤ÎÑ×áðô[˜-¾ã‰tÏêΑ wßß&òðù¢‘e1›Û ƒ«wÚÐéOò{Nó¨lHâ Ê£â“ûäQ:—È¡»ƒcQ©ãl]è2ºãÂpÚ¹­‚*/ë­ÿ5ÑTYŽlcaõBiÁõ æáOfŸãGõ0š2ðy„ÁûÒÛzIÜ)¾ zXð,æ%P†ºVPÆ#oÅFºzégCè´z&´JâÜ ë¥¹…ðO¿xn™˜sÒ÷¥ž‚Þί—IO]0U*Y„Ç _ÎÕ›â|YòJËhwOY¡ó(WÅßpkCOÇnüF Ëéôzôì’8î$æ[Éúƒ#[¹ƒŠ;°X°ÁÇéRæOåe2à9j뼄©îà)ƒ?üñ zÁ¾é Âûåu­Üiåófæ´zp t†é€ú;,foUZÌ<>\¼m4Ã3B’<3O¯©¼L†IÙÄ×çtœÙ7 ½fŽS]Ç¿áþßrêC]Ëí¨õ‚ÔÃxþÿVö‚ªƒ+uB¬Ÿñš„ý7¹ÎÑc´ÖÛh³ôÇÇОÁWß=3i°ç‰úÚÑ?Á<¯Ì4ꚨOmÌÚtÝàb~¾¶à²T¦Tßqþ“öeÊ®Býo(˜Ö¦²ŽâöˆÐ>+%÷x‘á¿Ôys(¾ª{=Ï_Å•ôö§÷‡ið,eÀgÝ Ä-…}_k2wj«ÉK+M¤XÎÕ—ò|¹˜Èl{ßr4´|ªÐyä“„×±Ðò°L*æ‘íVߘ.ztCb:.\RzÞ�Ël[ÿ°Ã’ôʺϷõƒž‹ÐjUŠ7×aغª¤Ãèº%El°?–¾bæPìBx®žÂÆx\vùuaPƤîls®Ål™eÐõÑJåk9/t¹äÕÇïI»jù: Éð¥9(º,w†þ<<J{Àwä:fž¹CùÏ”§OGbpú”³0PŽˆ·¥™êËár*l 6ö3«}ÙuYZÿæ¡©ˆcá;^&\ÉèÎÇêôRaMYlÁÙ÷<;óÒÜBøg_<·Lö}õßÕ˜ CS•Qy¾rdvž ¯zÜ–„×HÑ!öÈ•^c†ŽÙÆRÌvŸç}>³¢ìÏÜ«¬Ãèº%Cæ¶£goœ®üº0˜QÔh¹®å¼Ðo…e¦!ã7žˆ®Ò4:ö:…é{¥ë¹ƒÉ\™Çcµê¤ì a⌬¥ïI½þ)ãžwú­¬|‹ïÇ£ hã\—´Ͳ Ä“ç²ôm"˜ï¦"Ž…ïx©pµ{åTœ¿…à…=èǼ9Ž þG± ¿í^'A—¦*£ò|åÈìGs,¹“x=÷öÈìåb§ñ×¥’çyŸáK§ïâГª²ß¯; :Œ u‹v┓¹•Gî×¥òëBãMSÚèô–™‹®Cª¯ë3>$ŽŠÂ_%i»>‡Èþ̼7Dú±Úƒ²Iæ‘r”„î¥ïéË£í Üä–o^šÍHØ3áÀ(Žªÿ²¶`#ŽE]ÙÇ‚¼ïøÅ¡ý¸q;ǩᶂ÷ðå4„ÓÔèw3±Ú™C±\La8œ¦b ÏÃ#e&qOW2l˜ÞçÞÂça_|qé§·¦~†­Ý2Q¤îËéxš|æ ‡4ûï*A*£ò|‘Aâ: ± w£œóÝã¶ü#ü†\¶Ã'óuÀ’¹=ÔjÒ Œ>À—éQêyîó‘¶AÁôËÄcdç“É ë¶¼#Ѷ2™{PY{ÉüºÐð(‹mŒêß’OŠV3,Îk¸PeÞuaQ}”¤@;Ò!Ò>Gó±Ûƒºÿ,2Nˆw‚u½Ý–é7*ólù§ÙØ?É<¦Vï5œéy emÁ†ÎÇ¢vlcA“ø“v�ƒCk¿*`ïc#&jŒ9$ƒÛœÓ‚NÂ4ZÄ‘ g2o¯Ü¼�|ΜD‡©}3ja-PÔÚ…7ÇÐÆx:‡ëÌ»däÃÛˤ67Ï(4¿™—•Ó/­oþ*—iW çK-ØA¸ðÝl"åùbƒ £›tO¬–Ù+vY÷›|ù^&sâüF Ç‘“Ì£Ÿ<Ý8(3qNÆ7ŠY7r´û掔¬5N ß·Gã·0<½ ç+ur§¯ÞÁøˆó½¤˜z%ŸÞÁÉð}ÚàÊÀJv^J:ŒVî´ò@÷° ?^610íŽ7ªÛðNÁeDú˜ÚØ8õuœùHÎëtiò5ÂΖ·>fN»Is3{ {\Ž:ßþ4<N{Pm|ÐúZ”wº.}Ï÷pqaîÓJͽáO;*,³ “ßœ2+n 6ô\÷>™öUµþ7‹¦Êrd  á¾XÎG°'s0áÁØ^ÇÂîÀA£ø=DG]êìøãG8'˜&ÆT¶Æ õ±¿tÃFbžôSÆoü5*•Þ7¯!hw!§êš?“ÞÜN�£I-u¿øKDf¢1v*…çZùÆ/õœBx  Ý _†JwbYFa^‡ÑÊVÈàä{$ÆŸ]jÃ|{¿ •^•*{¼žÃz|gN· •mÚq²z×Sõ1VmÌnWYCùfö^Eü…#ËYËðíA9£cˆÆTnü¥I}Ⱦ'–„6Åꈿå•™I3;<qÙéï™×<h'ÂIÉ´¯Op±Jýo˜Ö¦"Ž…p ðós'0œBá!hªœù-M;”}`jЙÉûjV.f4¤t¼"ŽE ØZÅäxðÙí½N‚ l$øN7‘¦æK¶=ÿ…?­K¿é§C ÎA‡Ö&Ë<q,Aj‚8‚ç¹ù:“pË )„ûæ{2YœÛc‡æˆÒ+£Ã÷ö`·AmË¥©ˆc!‚Pš*çD~ ‚°MˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE (®$úÖu΂-·&õ=ð.ÿp�ø;Ïø]è)„A7µP ÂmÇⱸ'ò(°núñ&xßµ/ ÚÝKÖc„š"ŽE xøJ²¾¯|cVaM­´­?¹f›ÇB„u ŽÅ6á,ª–»øÚŠÄº©Ž_Žâ…ÜvÌ èô« Ô q,jÀº+ WŽÜ9fÅÐB§Ö˜X‡cQžAšŽ8›Ïzdµ2 qep^Y¯”ü v#gѱÊ`GØKòêÛZ7Õ÷“´zeçö>D—Å« ¦"ŽE Xk%]†°÷ôîNú‹*é¡ñˆc±á¬MVÿÓà´‚)(·B±„«iZ­>L¯Vu-p%äôZ¦«¨¹cðfƒ«|¡^ˆcQ +ézÓ0€Çuò~ïÌâ¡æ%t¿ÆŠïg6ÏÊÕ‹zñqÜP`_Â|BÐé:ÂÛr,– ˜Ôsõ5-èoa¶(éqɤ'½™{[‹%ý÷€(¨<=‡ÁxèFÏMÅ¿ÊjÝ‚°‘à;ÞD,_^Ù÷Gj±¹ö` Ÿâ}’…®Á0¥éKsŸÎ ‡‡0œþ³Ww,èw0ô¨ ýñ1ô«Œf\M!h¥ ÿå<„ œ£_l0DèWkQ².£3%óÙ©à4©­Á‚‹ñ§dž`g3^Ù8OGp9(ýt“{ê õà=’Ÿì_+58€6îcÙ}­Pޤ?—‹3ü Î>¤¸‹£%¶ë¦²Ž…etkaö æáO‰°ŠÎázùD»J £ÀÅKn1 Ïxò¶{ÍÉèà\ oV6•z\2é1½5)E€Šhçál¢„­N‡r&ôòùWpîªßžA0ý]x‡t‚ð¨4U=L¾ŠdËIeüOÿ —hìvúÍQ*º:Dý¤ 2ò—8Çn×ÈýŒ¬Æ‘‡ ž+SØÑ;Ez…ÑW–.A|¿1*ed>ëÊ!œ©}ÖOYÝô¤ó¦ÊaСE±#“WNÿ'L¸Zv’]Iæ’Ž~u¼¤þ¾ª^ŽZ'wœü°#ŠÊC6œ¦Êrd  „CÜKBûìH¸Ç3ÊÁƒçœ<á­Ï±&s§¶8MøÒ£òSйEEÐW …®gÔž­è]Ò!£‚ïjy|•Ê>ê°ÁßÈàNptÉßÞàW˜sç’‘ÕÒÔÂD;)Yɱ ™Ÿê½'cŸ~óë&kDÄÞ/,'W—"4z¦Ð³ÙPeÕïsÇUµr4£3ÎóÕ–Òº<Ò£:‚P°=7q,|Ç}†¼‹çœBÇBÿÝ¢ž«ñ¦Çµ¸úáÎ R*¾p&3Ñ<¿e:AxTšªŒ$_UdŸ6t•[æX(3yõ­P¡ÈÆYÍ_1"C=)A§#ÝCoô‹/ÊM’Ö+9…åä{–B§—®GG"8‚#Ý™5‹éuz!ÕÊ1?¯âX5F‹PÇâ ´ðó´«Zô9é1½:Ïà`ðvâP¦ü‹;§C„GE‹;P&ût(ÎO°¾…# ý¡P CŽAsôœ6u_”Á9²ZÏ%˜EfD•yž›„¨Rx‘þÃá½¶!N¿QxÒêŽE^9å”Ì¿ÀYøB¥ã«y~{‚Ÿ÷¬tU+Ç?tzyD> …jŒ85 ¸’hh6f´Ç„:ÇY°ïáËi§¾OÚQÏV"øy8Øt©sXø[©qbvÿ]²öE¹éá!g[¡°cÁs,(>5މ½C:AxTı¸ ²O¯EôÉLô1pÎA :ý MÎêˆáÞk8Ó£æ˜íX$²ú˜ ZÐm• ÇéÏÍšyùŸ›5éUÏMÍ‹HÎ7ŽÅ3&gpúê=\þ‰ºÉ•кŠ÷‹t„S1œ· £Ò€º$g²×wªZŽŽÕêÅew}þú£dEç©RY Âæ!ŽE ȯ$ê!A‡[;€Á¡µß !²ëQ ޵eãÜA÷”ÐùzÛƒ“èP nÞWÎŧ©V0|ŽîÁZÚ+u[_Ú(%/=¤|R‚›‹ôz”¯X8¹éà²Â Œ²ø lø>7‘Ë—Wöýd¦úM¼ŽÎpužóí/0zucújQ«ÇƱ+«Õ½FÇ)Ü'–ÅüŒ¢^y;LÈý*’‹rÅ&¡£fr7êÊQù<±tSz''é}µð–SúëYç"åœ(´sжBª\]\TŽ˜„0Ì|åJRç'騄zíº©lcÑd°—èì¤ba}s,Vc9Á^êž‚ lM•sÛ)¿Ê! Ÿ®Œ,'Ôq,jÀV*&ŒÃÝ áÊŽEÉÄ7/W0ŸžÀppbÅ ‚°)ˆcÑÌœ ‘µ«Â#3;2ª.Ôq,j@m+‰br1ýþ-;òÇ®vͬ§Ø©È¿V„ú‚ïuij¾„usÑî^:´WjH“ež8‚ 5A A„ú#ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4q,Aê85 ¸’hR³ûÝíZR’—ë9LÃ�:È« 6âXä±É2¿d4…0èzVäîÔZκ…´•Ñu»»zåø ˆzíLÙ¥ÖAéô!šoÖŠ'M•åÈ–8w'³XOJHá§ß&‹e¾ÖôPX ‰c!£©Êhcò…3ãôZÌrÌÐøÔ¾¼g}ùO LJâ;\FûÐÞàR¯ªÞuV�_'ÖŠáôËJHûX%­’Ï«ÂûÀOñïvôâ“7zz{¡ÆÍ ©²Ç"\€gŸ.ÂFÚ?$÷ ÎÃ]hÙëD\M¡¿K+†^†Öc-ÞCÎ…8‚Ð8šªŒ%_(×÷_[rÒ^ÚïX,µ‘Ò‚Vo�Ñ*Gd<V3Ñ(~ Ã<Çf%Öy¯ÕIéÑÅß‹}?˜gÝiðGkÌã¶“êXcÑË·ˆ —óo âXÔ€µV9y/¹YG‚ \ýúFÖbtæxzz˜î¡ÇBšŠ8ë‚:ˆ<ròf6€¶Ï(¹>ƒA§ þ$¿§4ʆã®ÏGÅ#&•Yç½nA‰½WV2Ôï êÜîÝzÄ¥}0ÜNVáj A«|ñßÜwxƒÇ¢V’;ï€÷{ï`vöš†´wT#ü C¼ŸÙì¡nŒ…ü½ôÂÏJœä ½eã7 >}ïä7zÖõ9DA—ÎI6-t|s(ìXÒÎ>˜þø¸éMyÒ‹`¡O¡® h"Åù²F´s÷ñ”d|<êläê§Èo”˜žÒ–ú½§ä¿¾®$n; ŸmAçà@§ÁެGXϨãÚYaÓ¥6ÌŸÊËdÀsÔÖy S/ä6÷º‚yÔ‡ãÍã|•âÕ£À|2´ÒÔM¯ž]¤÷蔕Vû^vø±Ö¿ö=œº$#Þ£ºÃý¿åÔ^¬ž; !è<ƒ^°oʪwÿLWÇ¿ÃbúÒüÞyãð0wà1Ú¸é²Cx_}÷̤¡ Á謠 þ æ¹e†µ­ª¡ä؉Ûw:0öüw‘`~¾A`ÚšÊ8–Ò ìÌߨÑÑ\ §^VRÞÞ»ÁM3?¨N½³¡zÁla§Ò4RèÔW•Þõr av}C‚¤E½!n^ðZs~«gB±bÁ±¡/“ ·'_ÎÕ›ò|™8öXF§öo!ãùœô:Ës»mè̯•`C^û0½òz=º¡ /ž›F§Ð³uZØaI:¢Üç›}Óé„¡E»±>(§ú½X/9lw™—àêQ½O†<×G|ÿ"½çBimíBx®;s ;Ž ¯·ÐõÓJ_ÎßÁ‹è7¼{ný˜òÃvõTÇïgÒf÷¨ëtí¦Ûó(íß™è˜yæåß½gœ>ÝÊéSÎÂ@9"Þ2(JsqÛÒin;ué}¯ìg±C˜®ëL~6¦Êrd  „d¬DÜê/Jqï@Ž`Á²ûsñü -TŸ%/¿RZ£áåÓ#n¼¦;âà¤U ²gÔ[‚¸y¡)4U•ç+GfçÉŪÇ=rÒk”h9klPï©×x¡c¶qT Sü†bŽQTf0;T¿uœÅiæŽ4E¿ …iuË¿LïÙ¸ç*tý<I~+-'2~cÇ;÷޽NâJõ£Óñzƒ_êå±ÚM2ï a⌴¥ïé¶„yú­0 ŠâûÙmëÚê°7ß½sÚ„'ÏeéÛÊe^}ÇÂw¼L(éÞ«to‡{]~V™zMr±Ëòæa;Ô;À“¿uÏýEƒtZ³/›WAšBS•Qy¾rdv™ãPvÜ#'½FIƱPè»S‡ñÜÛ£S–‹œÆ_—Jžç}þr³Ówq¨I®nrXå^f´ûu˜Ñ‚wÄ‚ C6ra¼zTé·Ù{sèN\FezÏÂ{_Çè,ÓáˆÝ)§ž7pçža¥ú‰±C~ZÉWŠÇjK¸žGVÈQÊ—¾§ïÝH;šye—æü¶EÏò¶3q,ê‚8¾ã¥BÉRd0n÷¼°cF‹ˆ…Ú˜ö¬žE*>õ©óYµtZÍDq±„m ©Ê¨<_92;6H\¹—s¾{Ü#'ý†›éL²{ÉÓñ°¡P¬Üi2¢;„Ñø2=J=Ï}¾1Êv #˜~™”Ì«Ý+=÷„Ãko«Gu˜ËŽ2¶!šÎ`ê–¡Þ³ ºH£ªëäRŽP~0 U}·s¯býxAC?2vjdEóØí»È8!Þ%´Û6ýFež-ƒâ4ç·-z+}EÓ}§ O]Wª£G¦©²ÙÇ‚†ñb!Fû±`rŽSCmïáËi§©¯^ œ ض_|©ÞÀ05M Éþ»/œžùCº}[ð˜8_08ie!K½FÈPD¥^�AêBS•Qy¾Ø�¡Q^»çU+Êxë~“/¿À«Ó$¬Õo”pÜ8M8¦XðVÎ\:ãtpõ7ctaZÕoÝ7Çp¤õ Ê}¾oŽÆoaxzAÏÁä N_½ƒñç{I1ôʈ:z'Ã÷iËÃ*÷ºÄ4Çå³=:¿4iAžçX´_ÂøäN)$¦Ø f¸Ì”óaϰS74Ê ‡³=ƒN÷eÆÈ÷×Ïß蚣U];Üc£Ù´9_§}¨6? `x†£ÓáXé{¾‡‹ sŸVoç×êìÔˆ—›U…evaò›Ó¶LY೸ÜÐ 9J}iÓ@ÏuïCu´¤^³£‰›CSe9²Ž)ýÒª­ÀàÐÚï…Ùǵ’¢¡:\ÔpÍ9( B˜Æ1ŠîF’ó¼Ã¸1<¡ÉmüüR:÷ÓŽÃ¥“ó‚Ù‹÷aüäqÐIÒH/|µ/‰‚°Éà;ÞDÊó¥äeüõìÍ~ÑQWɹ·0[üq Ïò71ž”°, ñ©æÂP§÷ÍkÚ]©ºæÏDgàp&!´Ôýø+:: H9MzròŸV¾ñË<§(©ª<_á^l”&ù§ón½bµ£Gã ,»LŸUð—¡ŠôžÏ5p¾2dŸ—ù*TÁ<*Ÿ´ñoét§~.ÎÐ�çûzœ‹›¿ÀèÕ ŒéëVù£>Ñ>”-4:†hLåÖê‘“‡ì{bI8aSV;0Nþ†—A~™aš‹Û–]jÃë½_…Rh[ÌIaû†îÙ|‚‹Ô;¬6w„cCÀ´5•-p,ê†zAGoœQ£ù «ƒ£ /<Cö‚ Ô‰¦*£&+Ùz€ŽÛ ­‘ œ;ÃõbärzOØ ÖÙ¶ŒZº@^ Ç¢4¥’ô° Ý“€à÷½ûÊ1Ð= +‚ßs¿†Á¨`Ý Aj8½ Cjùó§ô›2öçÑ!Ek6­‰µë=asXwÛŠçên>âXÔ€ÆT’5é ó” ½a[ÇB08!¾™-çKM¹|O&ôò=:„ÓùÃtH‰Þk0÷жT{9îÁîJm|³Àrh*âX‚ Ô„¦Ê9‘ß‚ lâXÔ�QL‚ 4q,Aê85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQŠ+‰¾O¾®ÅðKKa�JßGÆïAO! ºÎâ?ö·›q¢Úc}á /}uà æÓ‚N׿XѦ±R»)¢b¾õ·}þ.ߣ6q,Aê85àá*‰—»WÆZÑZÀÅ6Üõ‚1zõîkZuÓ^>ÿÉI_HêÉYu£X±ÝP-ßÖ÷¾oÌ*Á²{ýy89÷°l~¾ÖÜ9µPò?wñ4AšNSe9"ŽEhøïó múÔ_U‘Œ÷Äp_³’º+™ôÕcd¯Û±@£ü% ­{·‡ª¬Øn (Ï÷D½v-ëTÈG‹¦@+GW]A[„F!ŽE Xk%]†°÷´À(»«cA׋cqgÖïXà*¡#赬{–¶‡ª< cQã:òÇbó©Þ ÑœU„AX q,j@a%ql;òq¬û;˜Åóv”‘ö56"ñ~fÛƒháª6=×ËÅGêû´ sp Ï1FžéINî_Áø‹Óÿ¢ü¼.ô§…ËøùO¡g¯b©®™ 8¾çp¼…™Õ3–Ÿ>}f#õ¼œkWbå´ãœ_­ÅtºŒÎ¬;í¹)]8ž«<&örq£ ›s­Eª|Ô¦{¿‘SA¿éß÷ádÚÃ0Ÿ ­ó0?—ÖŠ±nÙóü™²vƒ ½… Ó2÷í0šñJ´ÅùN±ˆ §7:/·MðœgÐ öM½¯ÁùÖÖgiL¾V털>ƒA禿ӂ lM•åÈ8dÌ¡±¤ +Ö OœÐºü ¢]e<²1UÚÛË÷$ƒÒ½^+ ^Â^„z…}?º¾Òˆ…^2Àùyœ~øªî·OZ}˜^¡jö[½œ+ƒv¹˜@ÕÎfhà¦zÑœk[ÁT™Ÿ«r‹´sÚ´£ÁiSFðàLí+§c6„N«Ã3epë¥ýщ ÃYß»ã\ûÌ«´M¿qõ|—V ºá¹6â3£n{Ðû´²-ç‡ç/Ð~K÷BRzã{·3ïfÂsUÒœ7].7Åùö‘iÃùmâÓôHå×ÔÑnô[â G¾œ«7–/o§Éô^âoøÎLáS¼OKq ËìDn>é¼€qxÃé?{;¥âw ßûñ1ôS£¿Ã4xvKù*B]AÑT¶À±@\Cžöã^YçxUǽ^ï/ájÚ‡Vlä+2÷sÓS†{¾;GƒöY êkÛ ¦4éßþ«8}Ës»Ôcno•Óê²JÚ¿™¿í´‘â5¿ýWF ÛNÀrB×M·Úòë‘pê§Ô±H‘ΟICÞD|»¸û¶fo˜Ž¿æÛ‹›æÂ6ñ{ùý„�ÛDy˜|uš\Áy¸«ÞME§¡Ó‡hŽo½§ø>²ÜºšBТ÷\;ú»æÝÉÈ ”_?P§…qFvRrdÃæÛ ‚ð 4U–#âXøŽ’HÎõzß}–"s?Ï9…¸ç;^#Q–ØËþ¥8}úï¤÷¾7ä&.›UÒŽ½ên¹XÇ/>eêÅΫù{…¯kaïåé»8ìŠï›)?o{PFÂì=Œ9´ˆÒl®%/ƒÝNÜ}úÛ÷å&Ïó½ulã\ã=?nå÷6‚¦*£ÉWi§ žâo™IÕŽÓŽÅSè ~M&<ó®ÒˆDoí¤¸¤e· ÛÊ™¦"Ž…ï¸×´É¹^ïSÏó#ŽX˜^ó´sô¤-NýmByÌá»±JÚ¯©×Þv¨<Ñà¾1†A^Ͻù»Z8é­Ü Œ`úe’ªŸŒ‘íÖŸî¡ÜNp ÑtS+¦œýáWÅí†þná'ˆù,dÝeÄ¢¸M|+¿Ÿ°4U=H¾ô;QÒi¢† Ž…zõWÐ Ñ!U4Ê•êI×óÈš7Å£ Œ8‚°ˆcQŠ+‰Âib¥@ûqï°sœëà=|9 áÔ5ôò®§}6⌲ù–ÄâÆ†Ÿ ù)Â=ßu^8Œ†‡æ)v¿•Ž×gg¡8}s}¯§4CÝ'$öße{Ò+±ZÚÍ|Uö©p…gä,ð¹<7†ç`ÚÕõç1=’<•úù[è\C‚x“~fûèœ ßÃ…6²•s09ƒÓWïáò{º=ŒÇ/Íqt¸¬Û/a|r¬Úʘ}Û0¹ú�C†*íóÎß·ÇðŒ#±3˜—oß H±3RØ&8,J‹M§©ÊèAòÅr=¯ÓD¿?ÁnøŽ0DŠdÁu,õŒú£ ú]Ë8 ŽpFft4–}ˆÛÑ"Â6ÐTYŽlcA Aajk08´ö{!DöqÝ{ÌCâö׊ç~Þ땱¿xôæ5me†SeÈÿÍù*MÎÅMÿ!D'ØÃ•³Ï=_×çÅ_G²zÔ4EéC ×^±™'8ºÎUn“öïé>6¦éŽ©´)#ùÍñ´;„Ó¹>'ùÚ]ëý*:üõ'<çÂeà³3 '£ƒBF¸Ûâ/‡aÙŒ`þL±ÙæËPé4 £€ÊÕŠíFmöW¡Jò Q+if´‚Ïçb“Á:j"“/î˜ðtšèE$Šå=Сӟü N�«ói¸Ç�æ˜íX$RÀlÄ™ùm$#íÑHAšOSe9²Ž… B3ÇâŽx;MþNáHê7í8”tá9ßþ£W'0&G=et;¥Ô½FÇ)l*M%t˜£|nV¶ ”ME A„šÐT9·ò[È„mE‹PßJrzÇ2[Y¨” ÛÊ„&ÒÔ|åC“¿3“ÄAØš,óıA¨ âX4„E»qø” Û†85@ AšŽ8‚ õG‹ ŠI„¦#Ž… BýÇ¢ˆb¡éˆc!‚Pı¨¢˜Ah:âX‚ Ôq,j@~%-áz>…0ø±âו®`> !ètÓ …¥¾î,Ú–‡{Í?@'^€ŒÓÕõ¬Òúˆ\ÏaÐqV‚M-úÖéC4/[ÎÉ^ì-YŒmíÔ±ŒoÓ–êBë£Fˆc‘GW°Þ„÷âäµÃêzÅeéÎÑ}+qß²Ó¨Tõ±Ž÷@äôCÐTYŽ4߱Рá*ÎÕ>Ûš¬Bl¯@l}o\¯ÐÚ…'Ýæ…ò«äš8]O6èåµ>}k ¦åoív`7ú nèwÚÐ Ï•øÉG¯\ÛÞ‡èòӗʸü Âù7:º.êXÆ·iKÕX.fpŠJG·_µµz0˜üÌÂD‹¿:+¾Û›R€á/Éêê´z°ÿ\µå*µ:ÖG½À²k"“/4ÜÆe¨¬@Ÿƒï­j¬÷í±Þ‹‡‘×·Ð+.ëKwŽî[‰û“í^9¾H¯ hÛÀÆÈ¼{ ùŽ¢_”êëAçÂV,Ú([í%«p ½ÀëxyQÀî×!HÀÚÂuA/Ue<TïáÖ±ËíÊü6m©Œ%\Ÿ´¡Óê a½~ËÌ"ÛHbÅdCxΈœ‘Ö.„çÜcè9¹>ƒÁÎ0§^·>¶¦*£Gɶû¯­¶l¯)ä—wKm�·Ô{¦œõ™µ‚ö]yÔ÷â‘F{VÖ+.ëN·G÷­Ä}ÈvÕæRz†ÒxŸŽ²b{\Ÿýá¶—0¼u;ÙLı¨÷êXÜFèW¹f]Êäú3„½§khYášu´Ê¸«€®ÈC–±ËmËü>҃ƾ2vžt”ÁŸ °…2)âL/«rLfCã\Ä=lyçð˜õ±%ˆc±.®à<Ü…–GFåÊ;ýžµ¡ÓŸÀbmñ¨ïÅÉk‡ÕõŠËºÓ}ÇûÝ‹lwõ ¥q“‹µÚ.Üiv—v²™ˆcQ*9ãOIücʳã4»p<WçPCÖ½*ø;o¸÷šËìÜ ÷åµ{u¼èÛ$<%z©“gå‚×s˜ 8öÓ‰EµãB;ûàý´peã’ï­¶R¡kzmìkÚƒp1‹`ÐûžFqLmë. DݶŒ±®goÕ9&$çI'€‘§çÊ",¯çsÙ´z0<SçúÊ|þÅľ¶žCpÐU¿yÙ¼¶”©®÷$ÖµÕ;€æ¬Sp5í«k[Šœ…ßa<SÇ8” {na¯ÔÚÛ¼ª'Ú ~ï¼€qxظ«Û€eÛDŠóEƶmP¹ûxŠÏû½w0‹eûŽj‡_ÕAr*ðz½¥ßU¿ÁkÂ\P/ôzôìÜ9üÞþX s°éóüÕît9E+sÇi¤­TþæÉŒ¿çÈ=Ÿ¼ÎyÇ‹àòväßrq#•sï.£3å”UÕ+˜—_•Þ`YË×ã± é.lD®îÓÕ-¢¤ÌâÍmŠûí^Ýþ•‹œ<¹ïÁ r´°=¦ò÷¢ã½iüæ“!¥ ·.ô§—*Çø ÃgôGöß$éÌ´ÏK¸¢‘øøþ÷íP= ˜Ÿ¦²EŽ6Vó2 ´Ûbe¢^pì­e£1nø–ðȧp®1Ê _޼ûR|foçJùÄCîÁT©˜ÊÒ§cYŸB c?—”ß8(¨vb#ŸŸk ú;X\M! áÐÒù»IBwªä/•ËåÆäRÈ×u«Ó+Û$g#[݋ÃX€ò¹©ûZ†N ã} œ¥L]qù§ë]!_Ïô¹ºÜtÝé 8déÓßé·<Š ÷>寶Ü6†¬\m^·rrt=í®Ðþš ÖA)Ͻ“±aaï[9V,:£8–d`r½#£,¼òNÏj'2®<°±æ±ó‘Ö9 =úñ zÃÊPNŒ?ó^°Œ&ƒ‘ŸU%^ŸÞ/|¶-3Šå^~YT#GþÑŠ^øYÁyLäT©^á2J]¯ ÒÁ™Ú×'¤»J(Ñ}<B¥ŸÇÎhÁ޵ËvEæž\Öd¬§òdÕ硪-l\WFo˜¶lud¹iÔûÔÖ9}ºíR'µc]V[Ô>KÛIMÁzj*[äXXB=µo”màfræå®€çšÂûÚÊÈÞªû’ô-ç!tó¢<¶QšÖ«¿Ø¯{t¬:`ÁïSÌUYµŒSÊÆÞ|y£±X q9RYež]¤ä,Üët¹ØåÏ#yÏqaeR¥~nãXð¹ÊØQÎà^QíªõQÔæÿÀvùzƒ_äë4u˧‰”ç‹Ú¹ëä: {ÞW¯¼ÓrÒ–_üžæ¼wº»:‡ß ºÖ–}©ãôîÅÇ‹Þ[™÷°Lîå—Eu²÷0òÒ}f’®b½â–BÎdü[Yºéx^(Ó}®lÎè0·Üï,Û™sròT˜Ç29ZÖÜc…ù°ÓÃÏÁŠÌÕ¦¸}®nÔÌcSÇÂóR§Yõ¾úï*á,JÒgžëWJÙ—ÖLŠÕ_ìì=²B¹@Yês- M‡U˘ÓUéKYÇ"•‡Ì³=yöá\ç-ÛÂ縰²ºÿP¨RV­ýw^ºíP !x˜Ï_n:MUFåù¢÷«ªAUõ¸ç}õ¾“ÇB‘1-tÛ¶ÎO½žg;ïŽéÝ~¦¿˜´¤žïÊ_rîç5÷úü²0¸aG>™½‡)Çü~o9ÇøÒäʤ²tÓñœ6}¾s?ê9OôW±ðæo%ٮȫËÊïA9ê^£ð¥ ÃVOßÅ¡iñ1o>0´é=Œ9|Šï}}‘§?ÇKÏÏiŸÅí¤¾”˼ú"Žõš>úˆý]8,šGIúR=íÙcY!³ú‹íT¶@ÕP/…}Ϊ¬ZÆœ®²p%MÞˆÝ;ólOž}8×™{¦kó)°’ºÕh£G jïämTˆÇ0Ðõ›ç,°Ò´ÛßC9%m•™þ²•:ï.as ¡©Ê¨<_ô~¹TlŒ¸ï_ÎùîqÏûê•w=‘zO]tÛÎs,Höö§ç¬4-s/Êk®ÜË/‹êdïaÊñ)9GYŠõ ÷bÛåK¿åÖ¹ ÏiåºÏŒÒÆ1þ.­Ïõà”ûZd{^]ºyÊmçD¡-oÆÑÝ Œ`úe’N“›Fíí('æ¢é ¦žôÄsuùÿÕ¤9§}·“úÒTYŽl‡c¡ /ëOí³�ã8LŠïÓ�n+6™k¸gÙzARçp:žRœ£:ޱµýwå½Tôb·‚÷ðå4„S÷åä8Gžp…\}€áHåŸÃQ8˜ã@1ÿZ€;÷•p‡¬Ú±PiLÅ›rÜ-Y¹ŒÕZ°c:XQ£?‚QÆ8 Ç‚çX¤z¯ÔáL™«ã˜ç\%G¸iæºÉ{_¨|âøcÌ—ýÌ+˜O^Að‚¿bÃmÌrìÉÓvûˆÏÍ1œ|¬\mþû †{\GÙpÅm¥©Ê¨<_d0i™r“žT«*’9ñûGû±êOî7ùò ¼:MäßáÉÛÛî¼§.º»:Ç2ÔÈè4=Èßâ÷{•ñš<^&KòðÈŒb¹ç‘×+ã–¯‚uKl£¡þú¨wÔ¿2½bbù1Íy:£,Ý%m L÷Ýàqg¡Ü"\ù·Ùž§gÜ<ååQ]_EŽ·Ç³øÝSõ@õÒ>z'Ã÷°pÒ8¿TïÕ+—Aû%ŒOŽa ae½Î¿9¯¨}š÷Q79ƒÓWïó;¡jFSe9Ò|Ç‚½Øc~r’Þ×£Ö—!”xs|�íN�át×d›óq«Ðƒë¹æ$:T/ï+¥õij¥ƒ„‹ý’Wø*”††ÊÑ@Óݲ¤V8U k÷®ƒptÔ³C˜Îÿ ^ë$IÏHî°9•±.•§ÞsX–1yn[Æh„Ç_ÓP[ÎW¡â|tžC”Mº×Ð.ó6½2ôœ”rµÉkK©áak¸:ÕvK*múÊH|ŒefTÆn½Xž7þ ‘;ÏÅ­øÙŠu·ù›¿ÀèÕ Œ)?+õØ6,‹&Rž/»÷eÇ{ˆŽºÔ^þ0N‚nCjk08´ö{!Döq-ìQºXò(—aE*†çUÑ9)9¤òóæ5í.áTß“·$-¸qèH¹2#OîåÈë• 'ïaÉ¿´ÞQéÏû*”W¯ L³¿Êdç¿,ÝNš¼m H÷¡#@F1_£·œz¿7Ù^ g2yrö±¾U•£EíQ9òñ»‡ux ár^âŽ(Çþà èüŽ`þ;äßgïàUÄ_Â÷˜m€½¬'–«óÙAk˜Ï¦Ò|ÇBØ ´à½Òz,Hq•:R‚ðp4UΉü¶A'ê†Ö(Š ¬ÜÅ)…µ£ ä‘r`Ó=ähDïUÅ„ı¨¢˜6íXX¡9ñ³ <>âXl:D‡?ýI¿éÑ’CrF¤…ucÂ4Ó=üf¥¼GûᶈcQ¬’<a"ém…É®Uxèç•`â}é Í×ß&®Ã¨…3Ì.£†€í±‰45_·ã;,ô‚¢V‡æn˜>h2Éc.[ §B¸;ئšŠ8‚ 5¡©rNä· Û„85@“ MG A„ú#ŽE Å$BÓÇB¡þˆcQD1 ‚ÐtıA¨?âXÔ�QL‚ 4­v,ôG Ü…ëˆë9LÃ�:ykÔ<*ö�¼VÂ7Ïo2éx5®`> !èX‹ä•¶AZ£ãÞÛ ~¡Ê¬[TºÆÆ“áQÇ¢ˆc!BÓÙjÇâѰ[Û@ÇB/¦×Þ‡èòšVLþ þqò6ó[åôMòÄGrf‹àUÃUúª8—-¥É6«8‚ 5¡©rî^ò…+'ï¿^“#@ÎEEÇýýa•žä»âë!_S¯ùZËïXsšA^dŒ‡Ëè% ÃX§OW±¨’‹:ÖýxøzÇ¢ˆc!BÓÇ¢*WpîBkm# +8ן!ì=­lðÝ _ºVs‚ü¬»ü‚õ§¹ØÇÒGÐk=Ò(À½9u¬û»ð8õ(ŽE ÇB„¦³½Ž…#Îûû0ž}€¡^L®Á™2«É0R÷ÄûšE9ÿ½àü– 8Òiêº�¯‰-õüÉæ0àÖ…þô–äT˜ßpÃëþðŸ«RÆÒÿj-–×…`tF+r; yª­=8“Ìo3ø¾˜@¿ƒ¡3êÙãcèóhŠÊãl@GŸ‹s1ÞÂlñÿó”ß-5åy)½w0‹ç{ì¨úûJ'å­¨~}Õù3èû&½‚yê™êžý‰µÂ¹=_¥ ÁsuO68í6xEÆ(?ïÁÂ7Gý6‰Úã2ÆÕ¼yžÄвÚÚfz>Œ[>NZK‹’¼xÛ¤¯ÿVœ›8ÿ/!ú˜<»?ý+\Æiy ½xùœt¤Õ¥4Ç‹CzÚã­ÛšúÝWtÕ}‚Ïj*âX‚ Ô„¦Ê¹²|¹1âËy]½†š™¬|í+ƒˆWžN÷Ú—ŸïòU]¿­Þk8SFà’ s6µ‘C†ì*ƒ¥Â-×à+:·Œë3 a¬ 1e(êù*±]eÄâw˜?@7<W敹ǎN†ìC»7‚seÈr[ÁT™{wõøóð']¯Úˆ‹ÎášóΆ[AÞ®V®/$æ¤Í<…Ýè7•wë“ÿV<ÿD™³!tZ=ž-`¹¼„i¿«®7mÎmƒHz€îçÄåÆí(]ÆÚy¸úÏ“xÒéC4¿2óeZl8¥UQèX祸Mºu_’Ž»ÎÉyà{s òxÒêÃôJ=¬(º}´­¶®Üžé ØÑíØænm ï]}4g}`z›Š8‚ 5¡©r®J¾\åoöCÓkäY†qñùWSZÏ ˜þN?dï—à+4øŠîãBs%ØÓ “ðÌúÍw?÷7sM«7„‰2^c¬ À©M_·J:ó {°q—JWyÞVª/M6ÍeפS9iÇÊà^_¶ŸIƒîy·ÛÇ}e˜Óo¶a´Ì³ ÛYy^ÜrË–£Mþ}÷Zw¾í{D÷Z*«~„à»q<ö­öbC×Þ©­ååé~¨"óêŠ8‚ 5¡©r®J¾\åoöïDZÈËÞO‡šÌÞØÃ\ø˜×àË9·ß3]ÃÌwŽû†DèP(õlê7élÑH†‹ï¾©PµÅ ÝÃkìùîŸÎ[a}yŸŸ½g^/38(†Ž{êͽ¾lß-7ïóuÚÉ™ÐÏ,v,¼iE¼íŒ¨—ü6é«›‚t¤p¯­âX¼Ö¨ŽbíXŽRzîÚZ^žîl·ME A„šÐT9W%_~£.ÇðôGÅç§1¡S#:´d:Á1DÓLíc®QWtn!âa‡Ðo¹a+ˆï7 ¸ÈÄ™cOíÊhSélíFp™ñ,òî± t¯±Wž·UêËMsöUÓ Œ>À—éQrœFpÖ9baÚQÚy3¿Q¾ ‹‚´fÎu(ËKa›t˱$)ÜkK‹ÒwƒÚDkG»ÖûèBϽS[ËËÓý ŽE ÀJ’M6ÙdkúÖDÊóÅ!$¬üyŸ÷8Ê€ž|ù^þþ,<ßÄ8ö=žü¬ê@#_ÎÐ!ǃã¹Û/a|r §ŸŒÁ¼‡/§!ŒÇ/óÏ%£9s¯î•ŠÑfÍH‡tÜßTY kÏùÖÇþN×Sè ?šÉ¸8ù¼ÿN[nùñóVÒ;A´O†cqÞÊê×G^[×1n nž/Уñ[žÎ©<8NŸç%à{‡éø{& Æ Uu;9ƒÓW–Îc\ß­]Ï•‰O÷Œ9rg9zŸœ…´*G„ε‡6¦ýyy¾(h“8Â*Çñ;8*JG ·í±càìS½ÆåWônP>“väã.mÍWxû¥©²inÎA„ZP¦dâ7ކakN¢ÃÔ~´øn&¯ª}4&>ë^Ö¢ó³þrñ‘¾F„÷ÂqÐNÂÈâ¯?áäâLŸ•±Å_Ö¡ ª<µðÜ2œ0&6õ1÷«PØóý¿=¿}Ùè¢qß|‰'ôêÛ[_¾Òé³¾Xd•c«AF>§£B”ÚÇžåü¼¥ë»Z}¹iN×9;ÖW:Œ&!(Ã>þÊ‘]Êxs|�m쩟Îá«Óõýt¨ŽJ¿v.Óyfçâú¢€z,cZ󻪧““ô~ôïùiýn_›7j‘Ÿ—â6éÖýŸÅeãÔyû¢ÈÙÇzœÿ¥Â»ïÓ9!{ÈÝÚš&UY7í>Àt4q,A„G¥ÉJV„»€£{4rÕıA„{B A|`ÓÞžoP½ÇBAt,R¡0¾-/äGšÏÅÀ)ÏkøŽ7q,A„G¥ÉJVÁE AA¸'ıa›ÇBAî q,AØ&ıA„{B A¶ q,Aážx%»\À,@¯u“¢ÍšÞõAıA„{âþ•,¯ÜÜ̯-¥ó{ g üŠŽ 4 q,Aážx%{‹Wþ­›cñ.£—0Ô+G{Ы?3«|Óªß­Ýæ}÷_š„8‚ ‚pOˆc‘Ç®ÏGÐku`àu,h$¦Õ‡éyWSZÏ ˜þnöAØ8ıA„{âa‹ç0•±ŽaQO¡7ü ²É—‹3]ž'OºŒÎè˜2ðçã þ+ul ¡ºÎ̱ÀsqÿGè?ÁÙ°gB°:C˜]û†ðü_a@¡LzQ°þD=— ëy½t•áw˜ÏÒ¿/Ï!ì¶¡ž«; ‚°‰àûÜTıA•‡Q²ìXt¡?½Ä¾~8w•ÑO½ûËß ÚíPHÑwXL_B‡ép£6tgê_÷„óo©´µc¡ {r@:}ˆæW°¼Œ`·Õ†^tAi±¹†Ù CΆ=í'÷VÜÌÐÖŒoÄÂ7i\&’ ¦#Ž… ‚ ÜëXX¡Pä´‚)ü9¡‹Î€³i}A Dï[Ž9±1¯÷ Žà:âXBóx™÷8ˆc!‚ <*£d}s,ŒŽ£Ú€OF R,/aÚïÒ¤è%\φбÏ]ƒc±\ÌàtŒŸÃE‡¦ªcaB¡Ð1º¢_̳Z %Œ8‚ ‚pO<šcaÍGø® ø§°ýæ1Èù­ ÏÉywr,(ìª@}€/Ó£F,(tÊš¼½Ô#/;êü¯z_„ÍC AA¸'Ö±pæX´ö!ºüNNFËrЙx ýÑ9,õ±nŽq¯Ð_b²½o¸ÇmÈé0£<Ç¢Gã·0<½ Çâ“38}õ>ûYûs³©‘:.ÂÆ!Ž… ‚ ܧd¯`>á/Bµ ¼…™µ˜œ½Ð\ê«Pzb7ÿÎ^Áü«2ì•cÀ¿·pï·¡wrb·F1bx2¸:Þ `4 á@9%æËPê°vÐáÙ…ð<x²À¯Jñ«²yaó@yÐTıA•W²×Ÿa4tG p1º½üQ A„ıA„{b³•ì7˜‡?A«÷Îâ‘�3JÐÞ¹wm A„|ıA„{bÓ•,~±)ÐBwzëBNa.N… ·@ AA¸'š¬dA\ıA„{B A¶ q,AážÇB„mB AA¸'ıa›ÇBAî q,AØ&ıA„{¢’’]DÐ{ÒÙÀu#¾ÃbÁ ÷ƒgñ;âzÓ0€N{�³ÌÒÛ+°®ûd UÉ×~ß;ðXõ½\ÀÙ¿�Ö… :‡Üp}ô"XÐO·B=s  ×Úƒhá«€+˜OC:«¿W?“<…0èúW_ÕöÏ^[ NFò¥´Šˆc!‚ ÷ă(Ù”Áè1‚и)#1>^që«)Ú°ò­ª˜u00w3ܯa6è¬á>B>ßá2Ú‡ön—7—0íwáI7„¹×V¶êõNŽÅR5¡>µK¿c±œ‡ÐÕÇïèhÝÌâUà×áX,/#ØmïCty ‹éKõîüáüŠx™÷Hˆc!‚ <*÷¢d—¿A´ÿš p4¡¯{Ÿ—p}>‚^«Ýð\íé“•qw»Ã°Xòñ'ÐB³J¬î]Ïs,r îì¬ë>‚Ÿ ˆzíB£éý!§ú¸ëˆå8ÈÍl�íuŒàsqwÇbG¹j„8‚ ‚pO¬_É^Áy¸ ­<£gya·m9¿ÃtxbõLsot¾¡—B‹fPft_†°÷Ô:¾ÍŽ…´Å» Ž… ‚ ÜåJÖ1çý}Ï>ÀP{:|ip¦Ìr*Ô=ñ¾™¥ë9L=h÷FpžN†^nŒ9Ï#JËhõ^ÃYJåaëþ+ è\Ë?:ƒEü,•¿Éb×ÕÖéC4¿R¿Û÷acÔœSÉP\Rx–UaÿI;wà ™±·V0U)Ã9%oUÙ·Ìï�F³9h«¢î¥Chð>/`Â0U¿\ß”o+-zkõazµ„åâ Fæ wËÒÆ-W+íºéw½9F<9Éqt¾’cñfñ\ƒuÝWºHy¥´q]>‡Á˜Ó÷zzÎÈ8yñµ/ž+’r,Ì9ÇÜ{¹˜@_×múãcèÇ£36öuf3÷+H·±Ös°<ŠñæƒåÓTıA•2%kŒ*Ëø‰cÎy®Ä7ߊ{|szScãÑ3Ç"Åï0UÆànô[5ƒYßõI:”J∓žë3tžA/ü¬Ž°qÍŽ‘‰óoµ0v]9&úÜnÖ}¾¢ƒ´Oá[ú!%P,?9KڀܪôXF;§oq N ^FÎ¥ÇÄÕïBx®r3þÊèù)—¯ïµ«ë×­omȯa¦ë‹Ëë©© yÛí8eù ‚éïú ª^fCeØ:i·²ÞüÌq.;e„O/)-ʘçŒÊicÇ‚î£ZqŽ“sÓŽEq^tµ¨|�Ÿ¤nã<œÁWt>v÷axÆ ¶ûh$Ϥw'¯,춨O(JÓEÒÆ¸]o9âX‚ Â=QEɺ=¶f? Iw›¤WÕ?‡ÂHݪó+L(…RÅ·2"SÆ8tÏÌo~q´lè>­¡÷œ ÖªcÑêÁ`2w®Ë+/rrbãÛš°œÚ’zY íX<…Þà׌“çÖ7cŒfvÂÔ~ìd¦·¬s`zÙgOAïãßnëXÄ¡PéýêicÇ …Òáz­8méò(ÊË/p†u”7ÚFyh=ïÁsvcL;lõ†0Ñ#dE¸m¦¬|óÚØv‚í ©ˆc!‚ <*U”ìú „ dßq!è½¢ÞñŠd ×P´ÓãK›uþÅ'eøå…‰Ðµ­ óƒ2:Wq~ësˆì°œøSª¾4Q4†äÄ W%DÌ -òÎCPN^ÔWÏÀsÒ£H^Ç‚FoZV›9¯Â׈¼N…ôpÚÖìXTN[¦½ 鴥ʣ0/!D©49°cÑéÀ<êC‡tÏ#+ÌCð|8m¦´|}ml{©"óêŠ8‚ £REɺ†¦Ù¿­c‘ ŠÁ8ú`�Ó*Ÿ™µÉ±ˆïo§‡{ýmƒÓ:ÿ&ÝS&¹ÏÙo&ÜeµQ Ãr1SÆ'~z—Cm²åűöiç…Î[w8K¼ŽC2zàÖwZã<ÛœçÈh 幓øïű¨6Ÿcá¤-U…yù œc[Ê O‹óð~Ó!wî¨òÖfyš·Í”–o¶m3âXl:Ü u¯Gž õ áÚ/�‚“‹¢ãÄ[W[«7€']}‚èƒ)‚ Ü”µÅ#š¼Ïƹ{œ à>L¾ü¯NÓ†Ýrñ†½NÚàCÃuøÆr*”)tþú#_H’ƒwŽ…mPZ¡NÊH3á<¨_LÏ»1âŸÑù~Äñöt½þjÝGgn˜R97³×°Çs2t˜ ;ö}Õ.Ïè “‘-Ná’Â{’Éé8àF¥½ò”‘;ÜãûPŽv,Üúôåç*'C9ƒ¨ÿ[=š+Wo|¶hÎƒí¨¸¡Q.d”·‚÷ðå4„ÓKÕf°Üb[‚Ê‘÷Ù6)M;΋8m\\_Åy‰ÃÅt{ÄûãõǦŽ(Ú9ÊÔ³zo†AœVýÌ\Ç‚ò/+_§m9å2¯¾4(gê…¿‚` d|Ñw^8/ ^k†ÿbG‚ŽÄ_2PJÃó*‚ Ü…2%kzk¹S¨‡ƒÀÚ߃“è0µ)CÕ„ñ°ñþ_ƨás:„SkžAæ‹?¼U cAlýcîŸ|¡‡œ¾§6¬c~·Ã’©ÅüÔ¦{•/û(£úQÚÏ }±¸™½ƒWÑI€ÚÉpÓ÷Â7N'oúÊ`Œ¿€¤¶T^Wäæ/0zuc ÏbgÅ­ï£pà«À=üÆQäú+ù*Tz¥6;ÔÇ Ý²Gbh"´6žÿ¦v¹qR¼oêc¥´Å_T°°dF·<Œ³U·ŽØØ'ÇÈü†ÎÅ œ`¨’ÞÇ·/0C4¦ûÆ‘ …8Ñ}’/<å¥É÷èm-XM¥a9³G%rœ c÷寫¢ç}»âX‚ ¬&+YAq,j:{pŽÌw˜}±ƒÇ‚†çÊz¦–¿Áéè£òÇ«“þ~5öÆØ_ZÀ«áhH7„óK+žõŠC²ž«ôÿG:®cQG8‚Bž¿õ…÷ ñpn*T¬jœ ÂÀ²Ia[h²Ìk¤cLÿ‹b\Ñð¶â'×± xÃü J·DÇ.>‹?‰Ç_³ˆc/ù¹hìwö`8ý¸ÄxÄÎÿ‚ÿãÿEN@v‡S¸ÐNÇ0˜ý—‰aŒã!yX6qâ wnŒ(>¿ûsº,A6�q,Ö€æ’Ý|¡=‚ <øN6•†:8¹i™8—É„¼”cÁ¢Ô9îDG ~ ´ îD'$džÍ!]îè‚ù=qÜ ]Öo)‡ {;Ê%ÂÒd%+‚à"ŽEm° „¾J *0þîõC91&äi¬?í§žs'ÇÂ'•Íçùž¸+yêû¶“ÑíÔìI” ‰8‚ lâXÔ×±@øhä\\}I…BÅóîÁ±à9æKSÿ“;X(xŽέˆÎà|âŽX ”gzæqgÕ…”Aq,AØ&ı¨ >Ç¡oBëO¸BеæX°q¿îIÍzN…;jpWÇ‚æTÄs,|¡P=ß,–ã+A„Í@ A¶ q,jCžc¡àU;qtÂ6î1T‰¿w^Ô«#¿Ìr¾?íâ3ø×àXdï)p,ø­ Ó±)A„ £Jö æÓ‚N—ÖPèµx]Û`ÖÈ]é¹2r;…0èV¼×}äex}(YÏ@ØRı¨ Ž«L¦ Äž‹1€±½p›E0œ˜91!V-±À{ТDøì˃éìäËPÇ"ç¸ìˆÐˆEò9[t,æð—é¿‘ÃAèûËÂ~‚ l6uP²Éç¼Èø^ë‹PU‹dÁµÇÈ‹µXš8–"ŽE p×pÈ mÂVw==øÖºÖ}²ŽFU8üJÝG¯Lz _õè‚YaõÊM/;;qh³G#¬/]ñ ž_óÐ "˜»Ž¾×óõ†x ‚ ¬”uuÀä÷kŒã‚­ûÃ[Œ`sQuôã!ò’9‹[—I%pNâKnš³(4šºÈ¼ÛÐÜœ zÄ¢¿'“¶AØlı °ã«÷ôv¡QMu,îR&¥pgÝc•ƒ°­ˆc!Ô=§äy~X˜ †ðJ6 ÿ1 ŹûqÜïÌÎ^ÓÈðŽ28¿Ò\cܧìEïa¨Œá'ÛŸÀååGÚ§¯ÒÇ7Ró"È€ÆsÌfÒ•„¼âo4RMEËßW=çà@§9ß�ÿ‹8_]8žCkmy©ÀrgCúìzg¼;ªì'üIv}œÖžò–É0Ÿ )¸u¡?½¤pß$¬ùIçŒÃC‰°Â‘õ1EpG�ÐÖ‹TÙò|LÌïÂþ ×Ö¶·¦"ŽE£à•¸,œŒ.‚°!<Œ’å]ð Ôöþ5}0e§ W½æ9yhlš¤‹Ä11ûv8®1¸¿Ñ§Î9Tõ†>Bá­¾yNCzág3WOÍt½þòß3è ?*c81¨ýŽ…rbðÙ­ ϰŒç5奣›Z½×p¦†åb}4òɱ0Ï'Gê2‚]{n [&z¿ ½è‚ÊGÕÏSÔó ) Zçq×äïÙÞ…ðüŠ~Wy§ðã´³Hm‚î§Ó¹3ÇBX;#óq,V‚¿ÖdnþVUØ®^³ƒ…¿x‚ l>(7Û€ÍîSxNìHdÃuÒFhù~æKKzŸŒbÄk4'ûÙ¹ƒfkÎà4€í‘¸÷Ja>’|Q°<í+ç¥mðÛz± ª¤LÒ8÷ÑÏy ½Á¯–þËÓÛ&/é|’cëDMn3·Rªm°©ˆc!‚ <*¥dYÇÂÜÏ÷!a^d€{Ž­=/dîåK?~Òýô (ô)¯L ÚôÆ>ßç æQß„BÅlWæY™¯/2i»>‡È=ÃÑ+sDÖ†85ÀÙd“M¶Çß„Õx¨23F¤ëX°á¾©ŽÅSØ~3aA1¼NQÅ úÚàcX˜‘—ü µAÁôˤ°LL(ÓŽrŽ!šÎ`ê:(:)Ñ@ÏŸhÿ'LðœÖ>D—ßé„„L>‰åb‘v\+Ah2MÖr,A‘E«ó°ŽŠ©žit6þÓ¬÷lÓzB±Ñê.HÊûl”ºÇÕ/ŽAmö­ù:t'kD·‚÷ðå4„Ó‹3Ÿç¹êßõù[èÎá†îezå¿%“–íûÇp8Ïá9x>:V¿{^Šˆ×`êC4¿"G‚&Rw¡áoœ$3ÇB•ÉÑ;8¾‡…S&ãñˤyŽEû%ŒOŽUy}‚áž™Ça‡ý©ÓŠóEø~þFÊ¡ŒÛÄä N_½‡ßÎ^Þž·‚§¹!\‚°š¬'ıAX#"‹VçÁÊÌúÊ™#e¤ê/Íá {µÕïzë…¥ö#¸Ð(í+üpî¢z¹ûmèœhƒÙì³sÁàxJ¶•íù ϳ¿ õÝúÊ“:ÿÍkÚêx8õϯ³¿ÊÔÚ…7Ç:ïát_KòVš—è"·çŸ±óÑê á8è(§(„éüOg}¦S”CÇ_†rË$®CtªF0 Vy¢/CÝüF¯N`LcâHØe¥6]çè¨)ô$xtÞÌäî›Ù;xñ¤Ô3ÙÉ„5‚í°©ˆc!‚°FD­Ž”™ Û„85@“ ›€È¢Õ‘2a›Ç¢ˆbaY´:Rf‚ lâXÔ�QL‚ l"‹VGÊL„mB‹ ŠI„M@dÑêH™ ‚°MˆcQD1 ‚° ˆ,Z)3A¶ q,j€(&A6‘E«#e&Â6!ŽE Å$Â& ²hu¤ÌAØ&ı¨¢˜AØD­N¥2[DÐ+X€M¸%¸*öÎ ½ê5ÀD½Ÿ!ZèuÀo½¯ ¾‰«Ë]Á|BÐéÞ­=]ÏaÐéE° Ÿ2ܦÝV¹ï]X.` T=áŠó·­ëuá¶™ÿüÎKV£ç²àðÝýʬ©Îׄ85@”¹ ›€È¢Õ‘2{D®¦ì’{3ƒÁ!Ìoé ,/#ØmïCty ‹éKè<ù Âù7:º9˜UÂѽ‹£ú æáOºíâÊìës�îë¾ÌRUy߬Àþäñ‹â6c•…v$Ü}:­ë©óõÑd™'ŽÅ:XþÑþë½ç»ƒ/äþ¼zA6‚&+Œûâ^Êì‘ärÝ@ƒë÷/”‘LáJY•uùÞÊßca ÍÕÌ´Þ½†Ù sÀ}Ý—¡ºztÇ¢J›¡²ˆÏq÷«sÛ:¿ı¨WIWpîBë¡…éõg{O“áBA6q,VgýeöHr¹v a@0ý]ý=Ù/`'<W݆Û|Á­ŒÌŒÞÇânTi3î9·ogâX< [âX,áz>…0øzãOp6ì™aÀÎfqüçÌ'CŠóÃc}ˆæeý6¤¼ð|ßF ß4füí9üCtƒÞð|0‚¡Px^«÷ÎßÍ-1öq@GŸñ†oaÆÇn™çÑf„½|øÛÿˆt<åsŒ9O¡7ü Î~•ç ‚P ¾sÂj”—™Íûû0ž} YªäÖàLI>W.·¡]˜ÛÄ]oÉNmعû¬OºÐ>Šàc¬O^Âôò·D¿´v!<G’œßêÀA§¥îe ºåâ Fêw“Î.£3’Éùúh¹˜@_ߣ ýñ1ôo5j͆%ÝßÙüV˜_•þbÝc§çf´‹ïÁ±ñJ˜gS/ùeày^t®j#ç˜]vºnŸA/Ø7:M×›Ëß…ƒà¹ª'62Õ1†£Žu^À8<„¡k|fô.Öá×ÿ{ÿóDzíû¢þ7ª­®{îÍVµÔÑkÌÎl\7ê:j¸1A‚j W Ë)(0̃îyob®)NásÞLt(‹=¢x›µ'FÔf¿É\Fˆ1¢/FĈ̈ÈÈ%•¤úñý˜ge*3"2~ŒoĈ“7Zïiœ>{G=ó«üQ˜oë~?ÉsEÏUi9ìJ>ÓaVy/µ!.iÔáôTù¹3 ~çmÄ�·ßÿv6Aü›Ù|^fg¹ÄòÌ}µe+o…ÂB}»ñ;•Æœ¦ü¾6 Æ\JåZá7\8¬ëÊf žœ¶m3© µ__Ã68ßé2yAûù©‚s}F]•Iã•kH˜ÉUá÷Tat+—?hÔÞ£þÙ/ÔÖœÅÄ€.®•ù1Й¾¡‡ŸM8¶ôµYZ™kì »åVÞ\Áíø…˜}gwþBgCëO©*Žþo*Ķá}&=Us¼�PÊ:7÷EUše3Æ(˜Mú´­ÏÙàá ÂßLžöÀ†õ²OõßsýL RÆ9wÛ¦=QçV�H¢ëP©«u½¿›Ðej¸ýNÉnSêdkØr|YÒq8~ m=ª`þf§V;U€7q›ŸÝ.îÁÖáPƺ^+Æô %i.×tšI¼˜Â4øCÒô)í&¿«¸JûfŸ]–¯i^±«_dÚåF‹zgÊèLo12¹­lˆo¿¾¶7>sí®— ê»Ít|”ø|æ[“Æu¾_çŠ8ÕéÔgÊü‰m3OF·å;Ê&ȽÀ yþ<6AÑ7þ ;+Fgœ²RWXèwl‰ˆ·ßµÑQyZÙWeßü‘á8®+›!,a îVº¡Ø’‚9/a¦gL#dÎø{1Òõ nA“ÉH\þyžL÷ðž-ä*8…®meÊCGU\ID†=¥q4…ÓPV½�P —0uÒ,tcp«ìÜ^ÕË>µþ>Áy®þ5½¯áyñýª NÅlÑÛÂöHÚ–V†•#ê5ÐO2Y›Ãø¬(½¤ Ñ› • Kö[Ušç¯¦A÷Ò9·‹b ûT‡%Ì+iº9eÞ=Òv¶ºËW±Ê}ÇŠ|¢ðÃR÷ûU?7Å “ eLw‡õWEÜÞ&8;/úfêý:,v–ù% Ÿ' Ó8½Ç=w&s{§÷?Ê¿ù#Ãá\W ,b…a."CîlÔbª2þžô(rÂÂ)à_~Uá°=D ¬3jq¥DJÚ©D܆O?«æ{�¥¬sƒq_ÔI³Ð(0ç«+,Ìû"«&•¶Gìn’8nE.»ò~¾GnÝÏØ6Á^÷¿]abé¶+Uiž¿^˜¹ôw©‹ÿ-ùrQúÛ{®h’tT›Íñ·£X‘Ö0÷œ0œùpûï©ûýªŸKìªtú>uKÃt}A‰ë¦”º¹ÜÞ&(þfŠ0ïFÒÝ'ò-‹Ò8½Ç=—ÿÇhäݹ|ñˆð÷YW ,8Ó¹JÝ\ƒHÁ`ì3÷é05ðE#ü÷ßL˜¼áò" ¬ézFûÝ—´“Æ'R‰Høôß˳j½�PÊ:7÷E4 sžÕiþõ‚zÙ¡Ö߇†5`rõïm……ë®#Ôj¾Ótœ£Ò빟n~NÛ¢›q~,ì\²=Ñ¥@S£®*Íó× ÓÀÉÏÅ­:,þ·TDÒ4w“îï`Ý“rß± Ÿ8 úžÊïWþ\ãš´Cí~B£óaܘŽ)Ñó0¬{“K‘M #e%6Añ7Sè¿{aáº×Yê~óGÂb¨üHz¨ÓQàúÜf^™c‘ú2Шw† ±»CÃó_èõiæÓiÖŠT¿ªÀz¾‹Ï¤Ú Ó™DÅÆ:ï Õx£ýÎOûtš*ö*][‰Ø9â™Æ9Þ �(Âb~ªÓÌÖ§Ö(°ç¶ž ¯ÕË–ú¯}µÝ^f6î¤ýH–Ј‘óÔèöÚÁÞc}ÀÕ¿ë‹wÔü¾¶G*\½vz¿sÔ0­Çñg‰?·ÎÈzã/_Ôv1Òö†G®»Fda\ÐÌhv†2¡˜ã{DÞò°„ß’±mœôà§þöÜ«¯òÀùÿ¤Þž]DÅ„³LXdí®zÇ)WÇô<’¯j}¿ð9î¹›7ÕS$-¶ßÓqï}¿¡=ÛŽë|W&,‚9ul‚›âo6+µ³bH¼Ü4ÈýMxnÝé²Ep8.‡*Ÿ|-ÿæ©}ô8¬s;±ÂB*“¡”š>>öÏY]ϦÙ*|¤+zT¡ •v{Ê*¹=Á칟µ°P•eë¹ »:—ñÂÁC²E«3‰ÛS*,ž´Bbl%Ò¤VKUH:~¶Rj¿�PFi]¢T¥™éi争&tÛÎù'Þy¢ê®ÂzYá?¯àïea SG äpÛÔ‹_>;í@Çt츅çO~jQË»?3²fÓÏéê€Ú�²+¶GʨQr"n;a=>lÔ{·÷*Œ-Õ¶¸ËlúZèzåŽÊ3b Û뎸(Lî�KWôáÃmëŠÃæ•T\¸iªÒóíÑ>m5ÛÔMèúæo4x}L'âBä­Ôèá¶»ÿB#7N­>%Þy¢Œü0,ÿQãûi•{î_i’æMN¯Sêï+C[V†º¿§×‰]%)°/<Ü•Ç"m~‰MýfßkØY‘<ãý —•ýêå›6uÜsÎGA>qW…*ûæ: ‡u]Ù añX°ò¶ã,9W¨Eý áZä‘aO�À½°Î Æ}4�l+Àò}$v¯jÓ^è‡(#±IQ —‚Ûkþ†VX<þð�ëŒäùAš�6 ‹à^>’çB;"#�ÖgÔÒd~…ùÛÅŽZ¤Ëöy›Ã0VT”„�°0¸œù@š�6‰u®ó ,��` .š¤�`“€°XÐ0�–ÔEóƒ4�l+�&�À2€ºh~f�€MÂb@Ã�XPÍÒ �°I@X¬�·ÿHᎩÁMF}j7· }Ö^k|DýövAúV]¿/ì{¼Çez²¾»ISóÞ_Äõ„Fý65Óµâï+…Ï}¬ïY—‡ Œäù©•f‹*÷Ž,˜ánç’+Ÿ‹f1ï÷ö*hv(™ÔÙ× <÷žÀ}a±¬òGJWtZ‰FsÒ²üM¡Rª®ßé{ïs?‘ÇÂò“48÷•¿rÏ}¬ïYg•7‹åâAÒ,·áWBwã<u}<P†Zzý>6 u6?{ƒ°æûyÙòݦÞÉúFïj½u‡%ÒÕ ݃ÓùˆNÇv%Ã`s¸Ü±GÉ—_+VkŒÕëîÎÕòSÛQbê0¶>·ôúuýúÂdu‡c½î«´ž'ªxì|î »uÂâàm÷_ôŠ+'³[èc Þsãõj¿{ŽûŘ+4䪮/Œ Ìú½ë(,itœç¾òWî¹ô=«ÊS!¾un0î‹{I36Ž_¼‘2Àåÿ€:zwæ™ìªíî'Ä‹ЮޥØ^BÝ„.ogM—/ŸK÷ßÃèéˆpëÜï4;;D§»jÇîex×ë=êþ:¢îŽÙeZè`tF=sôŠvÂòÍ›Õê™wTœ¾Ê³Ku¶EØ]™y„ó#u•Hh´GJvÔàúŒºJ„5;Ãtu-V´ž'Ê™'ÍÛÆƒûÂbXêtýõUåTfÌ<ž°°hÝwÏyÿR‹H˜!,£‹å©‹¥dñivEý]j]ztÍí…ÿƒF½c§7ÛŽüÝǾ?Ë/,Ðb%Rçjcœjg×¢{e¬ÿío¶g?âöå]gø[îQûDï,s"îÔ(¾ö)Må´ #žQ{ô‡ü¨¼õòm¾yÒ¡”ºùhÞ6<+@åG²=<äØP¿Ã{$|ŸkS¡ºC”|HEq›¡r1‚²gŪ°"ŸMÏh ÂeþÆn¶gÃû#µN~͆õ›=»Cúµ±Ž ›:Z‰ª@ù=¦§&÷þØý×v­‹:š¶7I1·°p{oøYvÃ?;Lý‚NÆŸd¨Y}ƒî™ª^…ë JÒ4s޶é§0ÌVXÔNGõþa/‹»»¡õum<§ö>¿ŸÌkPÏH:’œC7 á|…ªøáQߨ3º4á‰48Yþ:×sŠì»MºËýü›þþ.a^àò#½qŠjaQ’nŒ—w¸L‰{JQž*(Oñòb^‘¹&¨çïïë°æÇÀa�óQfó”i Œ8É[[­]–w1X‹\gÊê<[ÆnVϼ 6‡·Ò ,áÞÞq×Ñ÷µ êOìû¼ú/" ÅuTØœ¤ð^oôÉ%",BXDÑÕw¨FGýßù¨v4£ÔMª&öY¹jæI‡²ïÍßæo³ÁƒÀé¾®lˆ°+ÇŒ}Fw”ùÍAü·ÆÐàJê@5\¦×Bß§ \3nz5lc”^«3DZ£—Ô3ÐÄ¿Õ ‰š¡Ý&‹›áÿH}Øíd:v ÙmTä5ɇºçäYðþ̨ ï7çbàéð8ãœÂBÿýÖ.õ/Tª¦ÃÓžý…Œ?¿5>¿I/“j<L¾£Ò…Å2•ueš…£È�¶jy:ªFuÜS g.ÝÃõ%3Ê/(¹4•³y‡×¾Sža{Ŭ,y2¼?›¿P_~ ¯Î/Ù³ÔÃK„‡ÅM+ý¦A܉5¬ò,-8lÏ^Ö£V”®æ{–¥›J ·)_6}̳Ìskæ©¢òÂ6/k{­¼,Þ•un04›»|DÊ€Fuîßå2¼À>ùÛzŽAìŽâüéˆôôݦ¼5ZoèŒëi;Já îûý¹r]Ø& idßçÔQ jU„å{¦íiúœ#Þ*aÁõÊkjé¶Ëîþˆ‚Í[µÝJQisö&5ä­.%¡À˜'<Ê¿cqžÈϲ{ÁÃÀùc]Ù,aáùO ¡‘b±Æš5¾œ‰©ÞQR9§½ÃÁ-øY£éúï]ƒÒüa峫ð+©¨½^™ø&¿…•”Gžªðy׉ÇÞaÞåV†æOÝp˜Õ½² ÙœÛø\˜£é¯ìóÏVHÏ”ù-nÄ”§«œÆÇž_ÏߟOîouøŸŠáÄ‚¡Coø>N<ŒÎs½ïYžnÿÔù¼Æ°˜‡‚óâòrFêrïäåðY÷�¿ÌG4‹ç½¢ò/“†l->‡ÂˆÜíºó+ry*x·Îó®1[¶[pï÷Ó²ªM¸ªŸ¹……s/wÄìÝfĂù—Õ1^½m0qõÓäÄM–ת˜MÇ”¤#J€9£¼s¥ƒË<ß1ÈaÙñx€:äYçvbC„…Âs“Ù¦¶žÄ§ˆ*éѵ=­Œ¾ï–ª¾FÁu ¾ùÁ¥ŸÄEÏãZǹ¸bô+XeåÁÑJŠÝÄNß§Cåixªâî]—w I›÷Ò‹f{Ít[æC s4㕽¹ÆÁ.ñ >|§éaz&Ƽä1'®áýåñeTœÇèÄ6`éûóáÉÿ­¼Ÿ…óÕ¹¸ çln(OOºÒ†Ñy®›Véö%ˆ_ŽšyÊ„!V^"ß%¦ÅÂaóQ'ͼf΋ÊG¼LfH'Fì:×­×Õî¥Eù3xw®Œ”†ÍÖµ¶Î.¨“˜{y¿¡:-Ý6ë’òçi ê®P…” ÓoÓÒ9\‘$bÃN¿Sm^2MÛ‰£˜'j}Ç‚<‘ÿ[Eaþ§ùº²9ÂBÈzDùç ;ÌëTŒÜw«UBj3nÁ7ÿÞoÑÏr*¥J~¥cG \CM~óÜv²JÊÌ;Ôî'zi>/<Uáó®KEY0¤nÞ[bh{þ÷OÅýÅ\ÊÝMÇ‚†ÌŽV¹‚Ç›üo¨sï$ß÷Ûi[ÂûKã«ÝŠvˆ—(LFc㎾?ž|XÔ#tïØ3ÚᄂX™FÊC³Mýä#atžë~ÏŠt»‘÷»n –yò” C¬¼H¾u‚àoïƒun0î‹:iæ5s~[aá»Ç¦pÒîVú›—æÏàݶœ-rÄâ¾ßï§eU›P3>EµîRõ„[ï/DXp÷rõ‹I×x—Nn3r+2Íù­¦§Ô EAXçÌ“Uß±,O„e§<ÿ€‡`Û‰7ã7´g MwHQz+l¡²þ†Ù$YCíd"•«c°r#Ôyï7L1¤bi´?ÐùiŸNs•Fàûi ²F‹zg쟩ÂpñŽ:Uaéð:•bþÛ`*õîá¾þ@_¾˜^ž†7ŸÄö´‡÷¿§“CU¹‰ñf{ˆ¶ßÓqïM%|Ñ¡]&¸n*O×èfcü“ÿ’4²›M3¿ñ+J‡0Ž—ÿŒ¥c¼§ˆkã¿mž`tÄöjyO>‰[aÞoÏãñMã£ó‹¸ím½¢“ã#:þGÐËfÿVîO‘pG{û…4ïò÷±éФÓwÔ;ý÷üs½ïY‘n©»¡3qðêõÿ‹Î¸Á,ÊSayúò÷ÂòbÄKæ‡o: XØ}ë»a1?Õi6_ùH.•‡†ç¿ÐëS_tš ýfŸ†ôwë½·Ž¨pê]ùÅ=;š?ÃúÀÖçv^œ®OÕ9çÃPØÔâ¾ßŸ¯/ì;âmB¬þËcêv× æW»P‡»ø„½·NµÞ¶®³ð·Pk+ü]‘¦‡;áÝvJ©ºªûÑ™{S/n)Z4¸‹GØŽÊlÅ©yÒÁ£ô;v©_Ò›ÑaÛþU´Ùò:p¿¬s;±AÂâ=½Nœµ¢Y|7Š.˜êØ:<¢·\på<;¤˜…,ÕÝ@©¬GĽö]¦aô6Ù±•^¦ãcÿ¼²w§€´§Äº~©Jy’HZÉû­ëãÝÿOS«ŠÉ„ó”úûª"æJûËg?}C£_ DÿºªdÉovuï^íÑqrà'Óÿ#Öþ&‡Ý1Ö óo¦‡ÆÜS7¯üìsm#o—(úM¥OïÕ‡IÛ¯ÁýÝvy|'“†óဆýŸUܹQº0F¹½W…ç×_óa1¨ï̦Kg”…¿Å°Oû,¼;Cúr<—×—Ï}Ï¢t3øùÜ.vò=ÿä)]Þòå)Z^lÞæ'uÿÛ7ÔÞR×û£’‰»wƒÃ�æ£*ÍÂòTY>T>1‹Ø<%+Ù{xnäÌ·óF;Ý#&ºÅhæÏ?£õ›?­µ›ªÜöiä”…úÜçûCW,uhwÏ¢6!^ÿùDž™lÈ;ážÇGô™Š ýpën/¿xº;õ½v :râhž€}r:NG¿K™þBÝä7%¼´ÃcžtˆSüKÚa®3ë¶Ùµì°ø®+#,Àº£ àÁÛ`4Èι͒6Ž©ôœê ŸW({”�rÏäKÚ¹§žûMuÑü Í��›„Å €†i³ÑÃËiÏÀö;/³ ø‰ƶ˞Êoº7ÿ€Ú‘Q¬]‘öÚQ^p{PÍÒ �°I@X¬�ö‘rñá‘M.÷c'vÕ">ØEè¶®÷ûÑ&é úÝ1ããkÞ_¸‰¸5ümÁ| ÍÀ²ã»ãEYÚ€:pžYW ,��` .š¤�`“€°XÐ0�–ÔEóƒ4�l+�&�À2€ºh~f�€MÂb@Ã�XPÍÒ �°I@X¬�h˜��Ë�ê¢ù©•fzó1w�êâîgc7Ì,Z¶‚÷ìQ¿ýcÉÞPf?Œ»lL æàzB£~›š…äËv`±ßwûQ¿„Å pû´Æ„·¡ŸÝÐhA<V#ŸqÊqE“QŸÚÍ÷¼²×rTt`1@XÌσ¤YnƒÓÀ¸ä•åÊxI¯m€Z´ÉZø;oyLÇÁoÙ¡ê¯þ/Î;"›ÃyV¼-zsÒ-ÞñÿZvÂŽm|(Ø® 7K]St›Éo¹ß¹Ý?ÏåõìòuÕÊ™•«i}£Iÿ§š÷ÖÀ „Åý�a±¶|×;Qoí&tysI£Î6=)ÝayxØ8¥Ë²Þwƒž6d[ÑÅ€ºh~î%ÍxŸ–o¤“ëŽêèŽÞ¬’wnÐvº9$oy@»zŸ{ý 5¸®‰Ö/ÖØ T~NG‰÷w{¯S¸"F-‹mêШåÝæ÷LGޝ%c)ÃV§7›óÇ+êÙŽ2m|n˜°`l[”kWÿ0;×{¿Ï“¯#÷2%IJ|Ñ³í¡ˆîE-é+âÂâ~€°x(¼Â]Ç‘˜‡“Y»üž…³X ó³ø4»¢‹þ.5ŠŒIm@m9ÂBN½ãr£ÉCŒÕÈõ|Qt¯0ãž1Â\ƒM÷µñzT–5lb”†Ë Ig~S……uËð1Ã~ž|]\^¢\ÿFýÖS§=„°X% ,„G¨p×ÑP}„8AX€y°˜Ÿê4³n‰ÛbüenŠ'ãOÔÓO6¨Ù=S&ˆÔ·lØè#0¯'4ì¶h«5 ‹B?{1„ GD!,é vG8Ba‘vJ…ñ i_²ÜžÓKŽ©Ûúžw’FO¨ÑzCgÖM¥¶ûW6eÈN>:›nS{pFSýÝbîin›N¥÷°ñj…Åɯ™û\³Gc_ø}ëêLFÐ9œõ;osm}w>L^È~ãó?i2ì9aÙ¦ÎèR½-{_£µOûMÝŽä%É×é7h¾¢Qš–Õá3,BX0a¾ÎßëH8ˆ¨H¿‡þ±ã÷¿§q:WfGÕ_åod†µ±Ò9÷{í­›GD\ÖN¯ÛÃï[W6GXD3J¾‚ð ¿=žQ{ô‡zÆm*áŠFNó]ü>ÕõæK:é˜!YÉü~XTåÛ©§–T¦QŸH鉙‹‚p¥ºmä¥ÒñÞ©ŽF‡FWªZœžÑ@¥±ùÝ­ôCî§Âw•Uº·Bov(‘»M~Ø‹/!Aè Øù­õWšxqã|8ÌÒÁ©è¾yMØøH¥\;MÁCÃßÌGUšeeÀ”ûÌM‘ëaž+ñM»I6Ò2"e/ìÌIëûwE…† £mÚM~WµR k(ñ³bGVV³{Ýß,vdDÚ&Wש#G/UgêÞaÇhÒaߣþÙ/Ô–:­¡EÔMæâ¥Ûq-5›©£ŒVsí6<RØØ¦ùŒZýßTl›åÖÓyÁÁä¯pÄB…OÚ =G£!m·Ó.»AÜßD„ê°FÝ{lz¸m—úþƒ%—ª-ÒÏ•w°˜ÜUm?ó{ö¾b×<“ÇLx­«_Ýð1y!æµ…E˜¯ãå%f!N{h®Û¶TÄ–MŸ°Õߨ¾›ß¡ÚFvôîwŸF_¹]Þ}A½³©J)fžôº=¾ueC„EAFùVœùÒJ0­Ìta¾K%\Q±]T%+Ê^  ]SñLO©m+G+Œ<MUBU•i®`Þ‚‚p…¼®ŒÚo¤7džå©i”unátQ—»Æ©ä]Å•®ù® /]é;Ìß©0h ÷F+R†{Uvüï<» ÁËS•$èŠÍ>Çé¥ôâfý´í{‚óyÒ<8ëÜ`ÜuÒ,4þÜ2ÛëeunÖ‘7ÔŒ¸]bÄ©·Ua¸Êî-N÷àîY7ÚX¼Lï° ×o{i—ÂgÙ÷q§Ï?ÏÓ¹]ÞQÔNUòa“´•N,ƒygö[Eû«ó–úAÕÇNØ¢çA}ÝhQw8Qo+A×ÝÏ2<nzŸ"6D檶/ä¶á[؈E‘°°÷ª2¦„ä^lÄ‚ÉÅ7|Áyú+®ËóÏ[ô|ËŸãÄa«Ÿ^·‡óóº²YÂ"–QŠ ¬U¸vøÓ™`ë%•UF˜é´ÿ”ZÝ=hÖµ=?5*Óy+¢%áÊUÄ‚5Ú­Èzý#®»Ç©ö»Üçä|­}âÆK¬"5˜øg‚a69¦^Äà7dYXËÞ[?MÁcÀßÌG4 ËL¼ŒÔŒ>±ëܹÐz-%EUa¸ÊîMë¸2W(X¼Ü‘©Š×^±HqÃòåWUç¸ØKÐÏqꛜáÉ<FØbï Ó»*/Øov[a¡¸¾ ÄA.\­ÐÚ"ܦݨ´9¢®×>|§éøØÑuæð}E°WÅéûtd|þð=œ+T)¹ø†ï/8O¿qÅuy~£Ù¤l'¨¾O¨^·‡Ÿ½®lˆ°Pe”h•žgwU}_ÍJ8G˜éC®h’tTåËaSF¹7Do+feàëj&ö¼ àVUDµŠâpå*bFzûÍж{ŸÓhr÷8U¾+Véêg5âö™Yežç1ªÉRù¨÷ÆJ„1žtÅíêv¢2žàQ©¬‹@Ž:ifòý¢„…x2ŠÂ£í®ã&YD±¡†«ø^[·#'s …t|5öépçeVçäžå*±Ú܆Ç›íwëCù-ý¶Uy!Ì;ú¿]ˆžçÛ"®ß- JFu‡_?§Qç0Kí°£ÚÙ#JFc¹a.xŸ‹ñ¢Ø¡v?¡Ñùð–á[„°ˆåëâò%ßðýçé7®¸ž>ÿ3ý®=ÂQ C­ïyKÖ¹Øa!ä2J.[×’@ÅÊ}·«„ÃL_�¾‰1:­‹•ïŽen«U™Ö¨ˆj W®"]µs_¤G ÇÝãTö®ÂJ×6z.m¡‘žçqz¤¾¨wÚa›¯šmê'Ÿè|tè§_·ø{MÚ”Å<>óSfR®Ò2cÏm}^—:W•Ãáù/ôúÔ/+³ég굚~â:¬÷ÖÊ@ºxGA¬3)V_1a¸{¯So¸óõ¼ù^ê’‘,êÄ*Š—}oðwÒd;{L=øLâmÃõ”Zz™]u? «Î{_lÕæqÂfF‰‹žÃ#ßLªl‚á¾þ@—ÿdãß ¯á¹[_¿¡=ÎT8¢žš´¶Nøï¬ÇÄÖ+:9>¢Ó‹ÞûòdiÏq´i²uøžŽ{èKÝðYÏŒPpÛ0{¿Ï“¯‹ÊKÖÞj óÓ>^ª²é½? œ§6VÅu÷û…Þ)Šù¾ç퀰Xª>RaFq3˜ººò¨_”ú~Cídr‡J¸¼‘ãBÔÛ³«a˜  ÝH†×£íSº¬ªL%^Es-ŠÂ¥Þà7â¡«ã>Jd¨4⊪ђÉQÅueQ'[)æÞõ¿è¬°ÒMèL‡Ý®ÀÁ¨¸ê¥'C#!f4DÐálÐÍÕ3¥2J+J»M¯&ž¼£Þé—\ܼFÆmS•øi ‹ù©®¿¹<pþ7#}ݶs¾GÇÉwž¨:+í5ÕõÉÃÂÞÃä¸År]ž.¬à±²Npµ=ÙáïÜ®”lÇ®¹'ŸœÑii'Ü{rQܹñrJ¼1~î‡Wïª=k=7ÆžÛ~1Êô7 ¼íªPÌc…M½w’P»i]•]ו¢o £íÚKá7Óñ”Þ|\rnl‡oã÷ô:y'aâ‘æS`¬¦yã: aÿgwÕ.}<¡Ãà}^–Ðp`W·RñœR_åw1îoê„O„ž}O*r¿s»_²A^˜¯¥ísï)Hñá°öÿÅŒÞØ¿oõ));ßjS÷ äúO-jyéé–Q“?j¥×á÷­+$,"廟á·è-lržRݺ.©p™›¿Ñàõ1ˆñh–Ü»!†Ezx¯¤2-ª æ%.®¤üFþ°ßúüÛ÷šÞAÛhs¥W¶*ÔÝâWy¥ëWuȰ¨ϘñR”¦Ö•Îí!sVSFÍ`ا}°<)<̇\é:†§ûçämñßÍÊõÓ<4üMÀ| Í�wNì=ͺÞ,0¦’e�À:×y#,��à!@]4?H³»Â£ mÚKÝm¼¹U=Ë6�‹� �`@]4?H³[bÝ?c£–Þ(ï#Œ ,sØ�xdֹ΃°¸+ÿAÿ¸¥�`%áræi�Ø$ֹ΃°��€‚ºh~f�€MÂb@Ã�XPÍÒ �°I@X¬�h˜��Ë�ê¢ùAš�6 ‹� �`@]4?µÒLOøu6•>K—>f‰ê= Íwšž½‘åÅyYøÄÙ+$„—8Q¿ýcÉòNJdžr=¡Q¿MMo—oÙÅ»jÃaý¾ÛK÷ý ,V€GûHR™_ÑdÔ§vs{ ÙÇŠ›}ï‹…N¶÷ö›hv(™mWX§«�„Åü<Hšåö! Nu=Ý5¸tŸ¢mÇ«%õqÞÙ Ï;°Hô¨[ª¿¼¦éè•úž%š¦+WmØÊTÞª\NÞÊý^±^˜‡«³) »Cw{kà„ÂâူXA²ÛÖ¯÷n6éËf{·ì½ l¼õÎéM½søÞE|«xÍöMmàÖMª‹ޤ—¿o¤W“÷R8 ŽÞpÓn˜éî¡À»êЮÞa7ÛP³±›Ðe´ÀZ(4Zc»óÛ{ºÅ1²!§ÅÔEa=À›nî­aGÒ¢©Ó›ÍyáõlZjãsë]ÛælÒf—zï÷yòpä^†w7ßéE¿ ‹Á=kø‹À^„°`D\@X<+ŠK(,¼Æüv<XÜ‚°š÷.PXTŽf¡[G ,ægñi&;ݘڨr…¾2¦zÇ冔‡°‘ëùz¤è^%`Æ=c˜¹Fœ®7PÜ1J ……N½¼±õ®Œ°å ø˜a?O..Q®£~ë©cøCX¬:+Êr ‹ŠÆ¼&·|X-,Êãn]°˜Ÿê4 ]$3×Å“ñ'q7lP³{¦Ì)Ûlìè#(S×v[´ÕÐE¡ï½G¹Þ\Ë"„#½ÃîG(,‚‘ãÞ£âÕ|I'ýé˜Ó§À­ªÑ¡ÑÕŒfÓ3´·å÷Èvs0Ó£±f#¼ÎÉutϳªßßv“.Axž<£öè~HM74~îGêZ÷R/ì1W4ט´unv]¯¶Þ=ù5s•köh¬óF>4»¤Q‡ÓN…³3 ~çm®½óãj¾{öŸÿI“aÏ ‹J»Ñ¥z[ö¾FkŸöuºFòäá47_ÑȦWð!,˜0çïõG$DT¤ßCÿ ÎñûßÓ8+³£òõWù™ƒaÛîtNFÁýž°póˆ´½µÓk±pÖ•Í’±Ò&</m¤˜º•9£~K:RA:ÇÖ!ÎŇ>Z1ê=ãwêy\™ðµ6 ÆSUÕȵ´ÐlÓ~û¹úû£5¬|µ @Á5©˜ýŠ/¬UI+-Àù˜÷fq‹7‚¶.KÏ¢o±OGoóa5ïÝ+ȼÊ]Ý›6†¶bµÏW‡'¶TØçnàøÏê6¾*ÞÑFKa¿aã9µ÷9MÕûúÿwþ·ä_ãÏð|pååÊÓfÃiæ£*ͲºÈä¹Ìu‘ËÏ•øF—É Uf¬1SÐsæ_ûw¶®aci[»1Æïˆ”qïÈŒªì^÷7‹›ñʘ6W#j7Ä€ÓÑ®N0}´ÑØVbDÇ϶_OM|ÄE³ÕÿM¥’½æ¼.8~‘ó¬6àÒ:Átœ*lÆØ³bĸšñÈí‹Tè¥×Ú#U“°;MóYv·ž.øîaû’Ö_bœë9 ©ËrñW7œ:¬Q÷UÇëž|ç=ü­=J.Umëz~‡þª½ág~ÏÞWì†gã`ò“ ¯uë«>&/°óp¼lø"ÏAÒ8»nE±´96}txÁ¬¿±}7¿Cìï~÷ùgô•mŸÝÔ;³vÕ<éµX8ÌëÊf FWÈŽáãœW6Rµ+s[™ˆ±mÕ8gÚëC¯î—I¼^ÆÍç[â«hU´îaº1Ïm´LH¶[ie˜çJ#¢}sw²Š¶´b¶þÁ¶òpϯ« pJ½^Å_ÔÿGEz–| ]£äÃjÞ«M ¥g��‡wIDATÒ¢3TÂÅ4vYZ„˜tm¡+r X@îzY§â^»ñ-j´fN¥ÜàÉ,Jb¿•=ƒÿ„óЖӘs>yI;EóG6 NK0uÒ,,/æ<+Ÿþõ²º(ÞqãÍÔÛ%†z[¡¡†«ìÞba‘µ ºîÚ“ Ý=¥V÷cNåêÁÔ#™ñµwþQhø•bz«­ Ã…)r£`ë[W¦óË‚0徤£Œº¤·<ý­º Ê¥“[מÛxH›¨Úâîp"õ_:žÏ2w;ÏAïS¾¾Ã\”nEÜ6| ±(ö^Ó‘¶±`rñ ß_pž~ãŠëòüÆó=·öUÊ<éµX8¯+›#,tæ*®<J©Ú•yXñ,[ \åíüì˜ÊÛ1"‹‘´§´KuÅO{^³€—TêupãVÚ–¦gÅ·ˆ„µ<îºñw{ù¬Ë~sã#w=9¯Ýø†ÔùFUß-¼n+c"Ü€î8yj³áïæ£Nš…å%^^íõª<-õdì: çÖkgä3FXŸd„á*»7­Ë\¡<ÜQXÛf™«OÝ ÐH;@sŸó¾BÂíXø•Ñ8IœQvgå;¯>¶HG—;ÙWßçN¤/"öM«ëõ\:•Õ»é¹ë JÜôÔ ÄÖ“ÜqçàuÓö‚ùNÓñ:±£Þ6ÌÑt‹À#اïSïƒù÷(aæá²{#ä⾿à<ýÆ×åùf“~°£vú>¡vz-~ߺa!çacàW>õ+sÓ“üÌ-°F~4 ¶@Iaˆ ï>ûSP9¦„…Ì%,Œ_ ÄÓÁžWàèóÂ!þhý¸™ÿ4‚¥éYñ-"a-»Æ”À ˆÞ㻜ëÿ×i|-Vô}·¢g(œQ‹+%þvb#'Ê:7÷E4 ËKX>ýëu‘5úÂú–GÚÝÌ_½bã) Wñ½vT59)•I׌ºHÙËÕ'騷3©0÷E ¬;ÁuEbŒ\Û™ÔÇú=â¼[î+sý1ØÎ7·=;Òª¾{$ÊêÝôÜo™ÙtL‰®Ý¦�Ý)É×ÏÕ·8Ì:_ô·ÙQ¶Ä%£1Ü0¼ÏÅ´m;Ôî'4:Þ2|‹±<¼œÂb«û™~g/„`6K­ï¹@Ö¹Øpa‘jac«|˜:•¹úÕkÐh½¡3ÛHEÃ` ”† ÐHoõ\#Þ¨„¥ºbާƒ½¿f/©ÔëàÆÍü¿ ,MO¦ä[DÂ{¼r4#)¾¡o~ËÒÖGŒÜõh|ä\âVÝø*Ê­è7ŠüVú Ææ³Ô=Ü}ŠxUXç㾨N3;"hË‹=·å-¼.yZÕƒÃó_èõ©_˜ýeÌRÐéïœç{oQÁ.ï¨3ˆ‰ùX]Ê„ábì½N]âΗr'Þ*buKŠªz{¶7$Ý.„ñ·®œÎ$Vݹr Ú%žxôÓºÖªÅñ¬B¥s¯>G‡Á¶=Ú¨ÎêãÐ%K§ïø µ“‰¤ÏSjéå~ù±*Œ÷¹N6ó ®Ë]—PÛyÄ„®QyL½«ŒÇá¾þ@—ÿäp:é­Ãžgñ¸QaÞ³áL…CQý'áù¡IÛ°ý–¿³®a[¯èäøˆN/>zïË“åmŽ£M“­Ã÷tÜû@_ê†ÏŽ‚ç:3%ÌÞïóäᢲQ€mÛÚèü´O§—ªzïÃ#çi{TqÝý~¡žb¾ï¹8Ö¹Ø0aÁ™— ·;Á†Û¿«üTÒHÕ®ÌÕ_r£à`:ÓWXÖí'3€Ù0>¤Áä«T;·>;t—/¼i®ç è_Ô«ŽÔs¾UVÌ^…ç r…ò¼¼1¯‡MS[éJåkë¤gÑ·È…õôÏh(¨me{?ä›d†ó5p¶²®n|K-û ½t ¿cÕ3ä&Io¿ëÜ`ÜUifò#×C|4é ÛvÎ÷è89ðÎU¦=©º®ûO“Çí=Í6õGŽOµƒ•>ñòºÙ΀ðw®‹J6Èc¿î“OŽ{­ÔIî=aýuó7¼>¦©—m[¦Ïa¿«ÛïYú0†¡·q'·+·^J…ypDɉ´§¶ž–öÖ¾wëðˆÞÆ\9mÚ)#Õß¼°lU(ÇõÊs])ú.â¦ëîßLozÿñqɹi[¾ßÓëÄ.²âÔÇQX<q> Ú4¿q\4ìÿ¬â¾M't¼/ß|qhÿàowJý}•·Å¸¿©¾Ð{À †ÜïlÛ”læáà»óƒ‹xpXûÿb:±ìß·ú””oµ©{Prý§µ¼ôtˣɵÒëà0¬+›#,´‘.½×\ù}NT6ê—3·RŽ4R_þW­ÊœÅ…5ÜÍoöPïQY»°Â²àwgå'u¸«B¹¯ªßíÓVØ8¦ÏÑ–'?3e³Âi`9žŸ“Wú=ƒñ„ÎJ <bØJ4.óMÓX#øÝ­ÀâéYø-t|ý°þ6:,ÏÖ˜vñ„—ë"g‡‚íß«#åq˜§›§ñ-j´Fþ7ÔFK`ÌXC¦ð²º”†„3!4œŽ`>f�€Mbë¼ ÷$S/ì©gò–0|‹û‡G:öâ#: ŒäùAš�6 ‹`)>’vÛy ¥±ÛÕµÓð à[Ü;<"´·WcÎdž#y~f�€MÂbXŽä¬Œ¡Â£Bw%p¿à[Üv®G‰+Ö†³uÑj4�lë\çAX��ÀA]4?H3�À&a± a�,¨‹æi�Ø$ ,V�4L�€e�uÑü Í��›„Å €† �°  .š¤�`“€°Xô#éMd²Mñ|®h2êS»¹]pÝ"“`cûÜŠºï}LxõÛ?Æ7.Z)l\¶kl�ĬÂ÷‹�FòüÔJ³ÒzwÙ½l îÖ‚û¨Ëì3_Ä÷ bnûýW*ß,ŠyÛ'ðÐ@X¬�¥)º›¤­d‚ Âîhèg¼Ud²Ëqó%ô÷i§ûŽŽxå¢;¾×îÚ]üÞ%Àî¢n¸Â¤q©³³h|ÖÎ`>$ÍrLÚ -u}<h›¤±êY!÷Q—eíWÁf¤`>œ°!,–“un'6CXhì¶ñÁÖú¾öÜÙún˜Š·¨Òåž„O”œt³-ùû'tjwؾåï},¾ÓeòŠz6LºÂ{\aÁû/¼è- ²•Ê»nÅ=×÷™ýNÉ‹7ØÈo°˜Ÿ{I3¯ q=t@»ëþÅ@Õ¿ g×ø]hWï{c¯?¡Æ.öi‰±ˆ¶&¬‡Í3!,ÆœíxX ,V€ZéjDíÆSÚM‚ݘy¡sH£«Å´ Û@;azlaqýõ[OSÙÞ›°¸¢‹þ.5ÖÒbý°˜ŸÅ§YEÒ#Ž[ްPm@ï˜&i%l÷k¡ãÎmM¤†°X0K „Å Pï#‰Òvßi@¸çä”:½3g´âŠ&Þþêh¶iþ1ÿÒï4={“ …ýösjVºÖªKäã¹B}Ñ«¼S*XSÙÚó?ýp©wuF—© É*ûÿÈÜ»´‹•ã\ñrïT<Œ;ÇÙtHý»zþÉ‘J›ÛTLY¯Ÿ «¼Û ‹“_3·„fÆÖ%¡®;Âõ„†]ëÖÀÏxE£ô>oÍñ”xãžJiÌÒð<ùQ«¥¾ÿ¿(ÊÞSYq—å‹0Œ*®!MgbÙ÷i·±/¸×¼,üÀ|T§YXïf>ù'ãOÔÓeC•‹.×ã±2ätdH™Þj èÂu…ò9A[QõŽQ_Õc©°QuÁè•©×´ìA6Š[ׯO¾ÑÚ§}]'«v`r^Q÷%Y½žRï\_P¢žç_³uXq›0_WA®vÛº½È÷dòín½vê¶WT?Ëeû­Ï©½ÏiËùí_KÛêòï Â¬lÓ:‡ä¥ÙôŒéߪ¶mp–†k6ýœ¥Ýþ¾~¼}*‰_Q|t:>£Vû… [ë¯4‰>ã %­-ù;?fƒl6œëʆ Uœ´/§ëÅ=S/©?ù&çªÀ{ªPíRÿâJ^ҨÅkGUL_Cß1õý-ê©J8½¿ªÒ•‚æ2y–÷·*|ƒ%—ªáp{ûy˜Wh§áË„ÿ­˜ôùþ9CïnqlthtõŸê¾¤'Ï4†;…†s5~˜ôÚ·¡GÃ6üì®ð"mðmÐhTUëc!nÌ32·snG¦ÄÎ6ð91PžNeïÉ?Ë¥*_¸ßßÄ»ñä'ɇr-5JÊîËÆ:7÷EUš…õn擯Œ=Wâ›” SVóeHHçÛÙ¿“Ê3×Û‘Ñí:È»ù=öýz´\ʬ® v:¾�[Wªç¸.Y¥uÒõu›[À²u…Ô…º#G™z;˜~V´MP÷Þª+!RwšxYãÔÖs®èȾ¿ù>ÕíÔmÿ®~ë|ëÆ ÓN3:~EmuÙw°6€±7RfÿV?«)nÛ&üMkÏèo¯ íÎg¯µOEñû#Ÿ,]²4rãhîÖe`ç–B} ©ªóV™vÒmZQóùÞÀÉìFm{ƬnTå.¿™BæVTϼûýës¢+ŽgYC¡Â7è}ÊÖi¡vNÿ½n¡gÜs;ÌÏ…{ðßþÃħգá$ÿÖyÉ¥…[á†ç΄h‘’¸õ4æ´²t ÿ6÷,—ùòEôÛÄûNù Ü;œgÁ|ÔI³0ß›s+$æ)CWior|…1î¶ï4¿"x¿¸á¶ºKÄL„Ò:F^×ÂÉé8Óç¶¾ Û6éY®Û&,ªc"ñŠÏ¢ï+õkvê¶çRßòú:½ì;ÈH™tœOäÜ ÉTPûÇ–’Ž:ÔHÿŽÿ´"ï8øñ‹Ç§< "×=×sêäæ·n.üÝÖ•Íž²þ/•÷_ÒŽ5â™hat ~P€ +ÈâXO"´÷Q×+Œßi:þ@'v(Ü)üÑÊ!j0Ëÿ£Æ·jTÝ¡ôf‡’h,iÂ÷è#k�\ri¡Ó«@Xèÿ;½oU°ÛÔéût(Ö|ƒ0Þ¹ïU–NBô=ŠÈ·O‰\‹å‹ÙtL§é|›àÛ{ü^°lpóQ'ÍÂòcÎo#,1¤c×¹ç·õ:ëi½áû]÷–ªÑ‡¢:¦¨N’Ñ#˜lï·íE–^lÛ-£¦¾•ðÆÚ„šuYJ¸ c¬..|f]aQ·ºýß1õêÜ¢¼VÔV—}~'Ô?óGÜ廘¸”Œœ¸a(kŸ„yÚ?3ŠÓȵ¸:§þÎËLô�ÿÖ• Štâ´÷üBj{ÍÝ Vÿ–|¯€Éý íÍÑáã^§sÕH8“Êu£±£¥#JFc…߯T¡Á¬ã%ÿw‡nsp¥˜˜†Ë홓\ZèÊ®LXÔ[‰ÅT¾;Ôî'4::¨ EaÎU¶eéTöEYÅ]™/¤qi¶©Ÿ|¢óÑaþÛ… Qô^°l¬sƒq_ÔI³°.1ç·ÒÒìzÒî:snKÁûY$Æsë†B"uLió;·Íº/ék o~ÃSq›ÑLxcmÂ}´q‘xÅ¿gÑ÷µT·S·û»yêÜÈ·®h«‹¿ãÏj´ÞЙäG—Ø4‘v¯¬}š«ý1äÓ±:¬ëù~÷%íÔÉïD:oUÙLaa•4ܰaQ…ÅŒh¨Âîú1¦®4Hi²CÈ2A8õ?åJ!Ö³P3\ûä‡&mwÂÊ\†¹­ßæÖ+:9>¢SUñ˜pÙapÛPpEsã÷Ò(#úR†T³J‹+³C°e¯-‘;zV¼õHÃ<<£Ó×èòŸ,šœQ -¢ì¹MK§¢å ¸ó>øFnÜT(µŸ±ª@ßÓqO½Cü޳Év#7õ-¤²m´?ÐùiŸN/ÿ,I§>%%5VaVä‹óÿ)á࿵y®I‡'ï¨wzž†ixþ ½>yO‡…÷Š@Kc0ÕiÖ»öÜÖ±áõ¬ŽÐeèÔ7ÄÌ$צo qí½õ'B_¼£Î@ꪹ:ÜgªÞéíÙº6ï&YˆÔ1™qX^÷Mµ(Ú¸ÎÔIqCSŶ°Møºø6.W+øž%ß·V;uË¿KÃW§Î ¾µ¢¼­¾®þQŸ""/ŒY½Ñß/›s¤íý"^�¥ñSB(ˆO>µÒHÒæ¶ùdYçvbC……Þ¨òg‚UœáRSaÈï¶Íœ—»ôöhŸ¶XÅ&ª» ª²ÐCØV$i/WöVï4«M|Ï…ëÊé¹bCý%‡Ûêïì*KJ0¥«|¨C…׬�¢*ÞÁ%'ÿ°Çk^ô0/W„»ÔÿÍô®™0nQëøØ?çQ 7-u<c«B¹½r¼*Æ)õ÷Uå•®ŽÄ-‰Œ•ö7÷Ya:}+~Ï—ÏNØ z…Jó…Ó+Åi?ìÓ~*†ì÷çFž'²ÿ³ä^yX8?€ù¨J³°Þ=è¶ó=:N¼óDÕ~âE)ØÀ‘{ÂúÙëAvÛDbüÛg°öío4x}L'²šÛ ]ˆnö9¦Ž©¨û¬kß­ÌØ4ÆŸ{MiûVÔ&(ÞÆùõðWïûæ¿§ÎíÛÔj§òíu½¿3¢ªNùÖÜ”´Õf¾Añw°bÑ»ÆßZïÁŸ®ü$¿§«B¹ßO¥ëÛ7ÔÞR×û£ˆÛ]QüNTû—OÔî©•FÒ–å:p§åº²±Â��îÔEóƒ4[Ê ð¨­gı¿§ŒÁKº¼¥SÏÕÉ~wYùÌ‹2È ¿Ã}½8¦^0¦;èvzñQŒ¥†G:‚y¬@a± a�,¨‹æi¶Œ«“?¢ ÖIBö;:ÿ…¶ss..(é¼4KÌ‚A{K}‡ó_©¿m—Œ•kJˆL’j§£î+ íµKærn.+�&�À2€ºh~62ÍW§ü‘M\® ¯Ð“¸›ç±«Œu…q&Ž›kì¦Ó§QɪHà(ýß³IåöÞÉåìq°óu<w:àÁßv]°��€‚ºh~f�€MÂb@Ã�XPÍÒ �°I@X¬�h˜��Ë�ê¢ùAš�6 ‹� �`@]4?H3�À&a± a�,¨‹æ§VšMj¥kè/ ²fºsÿp=¡Q¿MÍtƒ³•t{Á†gÀc}?oo¤l?ˆå…WòQ¿½]¸‰Þò ëJZ[+öÇÂb@c�XPÍσ¤™g`òJ<¼iœ³^ ¯Ö3Pyz=¶9§Evn¾¤“þ>ítßѯäóèÃîø¯âðØBb)0›Ñmí&ty#;†/ûfmÎjaKoœÛÀW!¬KÆ:·��°@PÍϽ¤¯¡ÿâ×l`PG÷VÏd÷êm§wñF^´«÷°×ŸPƒ Ò¨Ê=µŸ(9±Ë†ò²®'tºKkÊnз^š­+Ú{.âb%½Ja]" ,V�4æ�€e�uÑü,>ͮ袿K"ãZ÷´n9ÂâõŽžlÛó_´—Ä: ‹Š4[EVÕè…°X{ ,V�4æ�€e�uÑüT§ÙMF}j7·ÅGßž¿ “ñ'êé ÅÔìž)³Z dõL~î“'[ÔJ¾˜Ç0×v[´ÕÐ…ë å!ó Ýf¬+T—†I§ÂʆõµÚ/Œ«Uë¯4™|t6BSaï ƒÝ–;â–嵌þ@Xäæ\|§éè•y¶vå: Þø²<Íj{¶û½ì÷“0¦ï“£Ñ¡ÑÕŒfÓ3´·åw%ÚgNÚ¸°ÀsÓѹWÏépž›ßaÓ¦ñœÚûü>Ž÷¿ÒdØs6°Û¦Îè2Œ¼Kv¶ì0†uùw+‹×lú9ËÇûûúýqc=Œ³“wbñéÿßsÄÑŒðØp›÷;ß*–¿=aÁasç\Øó©uòkæŠØìÑØ–½BÄ¢¼´pz®+��°@PÍOUšÝŒ»´Å†‡éξÚá¹ß´/}#a(èµOMûw©¹ÀÂa›v“ß3ƒ2м§dnEö§ÎóÜ¿3ó�O~¢þ䛺¦Œ±qOT;*®_Õ­¿QŸÈÚsܸ;F¡M‹«µò®Ï;Øõý0Íæ¡àÙá÷Ó.Jí7b\ZR҇ݱv›Ê þM…È^{FíÑú×gÔeÁæÝ«¾­˜ŠÒÞt'm/(¹”ù4úoDXé°¸iÿUýÍŽÆÊäö\ê*¾[Y¼l<´+^fP—†;—wþˆÄç®q” Çßu§ ÿ¹i,ÿç÷ésgÆ“f‡’É•Ê í6äÝ~+ògÓ!uš j´GtU˜O×N“uÂ��ê¢ù©“fÆ8ÍzÍyæªä_/3’¯ÒÞÚø c nί˜Ÿ0ì!þu-‘Þûô¼Ð-+$Œ{p® ¶§Ôê~ „UYšÕ¤ðÙÅi` ÍL d¢Ñ?òFv˜NŒŒ$ÙßJ…SçðºéÑ׆¯¾.=üÚÈ/ÿnÅñ:£?Gj¸ñ¨ wFu¾Ÿ7Ž ùŽF³ñß¡NLØ1aX£çVHØs¹î ÷à°üYœ—ÖŽçºa�� uÑüÔI³Ð05緌̡ˆ]çÞãÖ묷vÕÓ1¦ó4²ë¦çö™vÒƒ|«‹Ø¹ë®ãŽÜT¥™ï&:EÏ.HÝSß †ã–fî³£7eĈ°J½(Îßi:þ@']qÝI¯Ëh‚íý×áÏæê”}·âxEÂP‹Ï¼qdœQ‹«sêï¼tÄ[@THÔúÿî" .ÅyiXçvÂ��ê¢ù©“f¡ajÎo+,x¨5BcÝWÚ].3{;°§j³Mýäƒëþ<‘Fë ÕS÷‚´`ßöĦ¦¾*Íæ ÷ìHh÷–mßEGaîsÝÆŠ°ì]c]~³ß54rsDâ¬Ãµ£ Ù#JFc…×­‹“þ6OÅ}I®•|·âxI˜kX”åØ7¼Ef„åíw_ÒN:B! kô¼LX ‘¼´¬s;a�� uÑüT§™Ô€²çÖ¨ ¯‹1¥Œµáù/ôúÔ7æÌDÙ¦oä±±Õ{눊]_¼£Î Ö›:aØÖ Ò†’õ“oÒáÉ;ê~1F]`èÕ'p²çöyêݽ=kðškž°(H³Z>;Lg™ á^ò%2”áÎî1õÎx•­âï`ܨ؀w}ôíˆB»ô”¤AÚ(Œ�¹vþÁÖ+:9>¢ÓéµEB¥ô»Y·ŸH¼n´o{å¿¥s,¸§>×›_šw”Hâ3íÊßU…i,çiés'Þu+ÆÂ­óž&ß‹òÒz�a±ðGÂŽe8À|T¥™1„lú6é ÛvÎ÷è89ðÎeŒ˜‰´ÖèüO1’äîíM”)-x½ÐîQÇ%§œ0ìÆ°vz¶UXÃ>íó<YÝÇÌ~X¶kì-âÀþÍV›ºî¹2.¿ý¯éDV'ÊzÕíäc›fž9[›ø³Ã48ìw•!mÏÝÃŒ@e+$ñoU«B%ÔnZ?}'r«B…®[aZ‰áæ6ô4ìÿ¬¾“]5ÉòîsÕáML®9a*Ž×wšž½·&ed¿}Cí-u½?ЏÿåJÃøÜ&ŽÉe.x"rìó·ºtPx¾E­ãcç~Ř…WʪPyi]à8­+h��<*ëÜÈÎ÷dS/1`þžÓ eÔÞÒ©ãºe ðî}]«ïÆ£L/i':ÿÜ ���àž€°pÐ.3véQùM´“ä€Úz©RðXhW§Ô•Ià}-:/©þëz}7v‘Úk{ó_À‰����î  ^­'q6@S‡uÝ \OòGèîŠ3‘ؤ7»îôi4aÏÿ’ïfþz%H—Åe7«ñ2ì$¿žpþXWP›��xTÖ¹‘�€ ���àž€°��l���À=a�Ø$ ,���€{Â�°I@X����÷D­FVïKàl2|¼ý�¶©ýßö©™¦ï÷0¢~{[6& ÏoÃ"žQEì7*+ìe{2,”/”´¶î1>‹"–.Ëv;ý‡l§mÂ���¸'¤‘ÍmÄÅ»;kÞðŠ?ƒvºãqºQ×J`6nÛÚMèòæ’Fmzânlfw}VqÓ†gx.·ÍÅ"žQÅC¼cYÖt‘]µÓÍï@!üíÖ ���ʽ4²¼ÿ‹7ҫ͆÷uôÈ3º¾P«Ñ ító/Þ ì€võöúj°¡¾ëmÖè­–¥jÓ{ÂóÛ°ˆgèoóŠzE#Q yÇr‡táÂ_ôJþÎ+;s¢GOXTÆmI€°����î‰Å7²WtÑߥF‘»ŒîñÝr„Å4êg=üô&ýŸT¸Vd_ˆ:FfxÏ" ö;?ʸ·E„s¹mº\ÿFýÖÓ’¿«(;U<¦°¨ŒÛò�a���ÜÕìMF}j7·Å�µç/èdü‰zzS²5»gtm #õL~nÎ-ãzBÃn‹¶Zºp]¡<Äßu'ªMæÿÞhíÓ~“]V”@™œë÷¦áj¾¢QêjÅ“¨ø÷–ì¨1§Dráß\饸waÁqøèl§¾Gg˜îB=›©£ã·M“#êôÎ諌 ¥ao%45·g„áTßoÔoSÓ¾ö¼õžÆgoäy;*Þ_ùnûý¿ËÒ¶pã·ì»eñáó©uòkæF×ìÑ8šolž|F­ö ãR×ú ý÷aω£Šûè2{7ïÚ­Þ—Æ_ŽZß$—öÁœ‹™¸Äéï0 ~ç-¿Ã;{W(œ‹ÊŽŠ›²ÍóDX<ï¤\>Qåà ¥y½î÷P÷^™tl¾¤“þA:ª5›žÑ M·mjÎhzU·å‚ø®@X���xTªÙ›q—¶´±` ítwàt®Ä7=Ç ‘×4î6ó|S#Üþ]Ô4RüA#e¸ì&¿Ç§2Äàã8¹®T&&|ì®±ëºb]ŸQ·¹£Ÿ¨?ù¦ÿ¶’ÀøÓ+vOîü6xÏ4×âÀÌùÈâÀéùƒÄ׌;^XëŽXÈ;8núÛÚ‘%Ž«20ÙÕÝxv•)"E§õÖ.õ/®2c»Ñ¡ÑUðeå=ü,ý.gÓfG Ã+ùnñÞø,ÍŸfùF?Sî·áJÅêW—**f9÷¼ Üt îžp5êPCÞ¥EÝŽzIp'=c„eG‰–qš =ñæ Ë˜•êo­[a{¤r6ÿyÍï¡çkHþÑ÷íš<¢Ó±I­þo*¤V|<£öèq[ø[­+���•:lh€º†zvn¯ MÖûŸCa ©í»Ì¯¨2pÂëÚã(=ŸÃ$ò¾œÁÞ³#¬äþûYX<£F«GCe »äÂ’{Gøm]A^w…‡{¼/šFÎw¨H³ò¸„á6ób¬ÁmÏ££61¢aµç",-ê'êÍq¨§B&i{¿YryW¾ÿUÿ{èw<¥V÷£×u*ø‡ŽOeÜ–óºa��àQ©ÓȆF›9¿°`ÄØ‰]çуÖëw—š8¼òÔéûÔ](½.=·FèHñF,ÌO‘ÞSj„‰‘+F[¡[Iä³é˜NOºâ6cßÏ®:Ž«—Œ�0寏"÷ŽðÛÊyTXÈÿ뺴EÓè®Â‚]>ЉuƒKÃ-½í”\~7ù®éÎû© VçÜs³’ÑœØ}9‚ôÞ_"‚rÂBÜ uâQšºßãŠ&IÇY¥ÍŒ0š4.(•q[ø»¬+���•:lh´™óÛ ßU$…'¶»Î܇[1p̃j÷ƒë™Ëˆ6-êø°Çˆ¼/gä†÷,Âóž!†r³Mýäý÷kØÈæ}”°÷—\8Crá ¿­œ— k¼WM£; -w”Q|DÉhL£0OÊdccü?¥–^•L®U k>l,ô-jêº ék]Âܲ’[üÀ¡hÄBÿýœßƒa1ž¡Ê#$ê4vÜÍ\*ã¶<@X����÷Du#+B 5Úì¹í¹ ¯[¦CÃó_èõ©o„̦Ÿ©×júÆ ½·þ„ê‹wÔÔìAvW‘ÌÀÉÂÃÆ´ñÕW×ßÓqïƒ2&ÙPs&ZÏKÎ5%LExO™;K]ÜgˆQgžgçX4éðäõNÏiÜk‹X’°yÂB½Ã3:}ý!ï~– §q«Ê t9O _ÿºuÉ&ó–CÄz¼å]éwÓçμ‡ðºG>ÍÓ¸±AoçXl½¢“ã#:^kƒûÖFp˜.AØnÆohÏ }Íö:?íÓiÎÀË΄¾èo©„;¯¡HhaαȄ@íï¡ÂÙÛ³÷ˆ+ÇÕ T|;å´2nË„���pOT5²Æ@“Þ|e¸tÛÎù'Þy¢ŒãNÄ ¯þôŸÆØ´÷p¯úÈñ=÷zŽÝcw$‹7öÆÐsG$x›Sêï«ðØ•¡¬Ñé½»j‚¹  9÷ïÂôP†î¯#?L]:È…qNrñÒovE!^égا}e”S«ƒ#JNĵÅ‘Ñ.@l(Ê„^—Ü;Fô+½rþd«MÝç¼Õ§Ä½®G1”!œ®¥Ž¢UˆÂwyi´E­ãcçºÛ#oó¨i¾âo9 aÿg•>ve(+¾ìßÈḉRVó=¿ßÓëÄ®¾äŽ†È¤ñT(„¨¼ê•þ#×-I¥aTï®–Kïºßão4x}L'âÎå®,e:ly‘U¡jÅmyà°¯+���•undk¡ ÐA/ì­g#iïö£`ɹ¢‹ÁÛ WÝõvÅ,°¾@X����÷Äf ãƒî¯õϽ¾ uÚïJöÚ�«Œv çÒð„ëÎËüÈ X; ,���€{bÓG,² ¶âÂîýM®¯Œ¿{ú{xä]rÀŠàLJ6ß’Ý¥ú4š\nU‘£î’´`iá︮@X���xTÖ¹‘�€ ���àž€°��l���À=a�Ø$ ,���€{Â�°I@X����÷„�`“€°����7²74MöœÝ˜³‹0oÈw——>NØks=¡Q¿MÍ[‡—ÎQ¿½ílÄ÷°qö6T«³PľÛ<¸áÕÜìqƒ€°����î‰Õjdgt5ꘔOŽhçNŽxÇé» ŒDvÙÖïÌý.;?ß™ël¹ÛÛŠ€Ùõ·y÷g³#ô轫y“v“ßéf:¤Ns‹¶ûê+ЏqÓÍ£·»õýÔú)·¬‰“FúPiŸôƒïa»Œð ØNüoóÝf— ín½ äòš¦£WÔ¼Í.ök §ëºa��àQY¾Fö;]&¯¨Wdœs/~òžººœ{c(9Óô!ìEk¨o÷iâ½ïµŸE~¿+b8ßetAŒÔÛ¨/zw$Zt•­ë3ê6Uz6:4º ޝmïeÖñvím_»I¶SúõoÔWyÁÛäÐ~'»çÄlJg=³WI£=¢•3¹õw[òQ¸%�Â���¸'–«‘)ûq@­F™1úˆÂ‚¾PÒÚŠl’&`á›§=¢°ƒý6‚Äb6›+Á‘¨÷®ÛÏ…«u:Ð# üÝŸêQ}Ué³£DÅ Ø%=òì(Àªlpwka±€<³æ@X����÷Dy#¸šh£ÌùϽy�þý[ÝýšžW¹+YQ!ï²Ï—«ë µCÝá1µK]¡î#ìs ÞÝy ž­ÿžÐ;ëõ+š {N<·©3ºT1œÞõ'ÍÔfµHa‘›·ñ]Üeø}/é¤@½Ñ¿hQaÓ¢ðÛ©g Ó]ËÝ8V¸:¹(Ñn4ÄEÊ£V‡Ô•s‡t”£E‡‡êÝÍsîMÁwJÃiIŒl^C£µOûüŽ÷å—‚ïÈßÒCR˜6ïQé›ÍGQ÷ïïëçÚï6Ó®d|¯qìDG’$Þ6ÍÕaþ> g›ã© IqXÖNƒuÂ��À£RÝÈš^aÏ0œ]Ðàå)]Îc<½~E}6öÙ`þ]²Ñ:ǤÝê^nƒ¹¯ÊZtØó†›w¤Â‚ ã´%=éÖ(Ôn8ÚÐߢVòE…EzàS*ÛoÜzRc²È(¯ƒ',"qÖ†½øàÏ.iÔÙ5i_Ùcî¤au ýzßòMú?ùîPìÊ´7(t+ÓsØHŽthÂïô”ZÝc•åA‰/ߟ¹Z•|G¹–޶ˆà1éU’6_Õ}¹÷(ôß?£Vï3Mg™Ø3ÏcW»D|™k;…ßE¾qšg”x÷¨ÙØ5neú³K™ç¿~Œ‡eÍáø®+���•:¬1ä²  ³É1õFèÿç F zõì'ÍW4J{x«©+,ê²Ø°×±°>þü ÷È „àýÚÈFíÒðÍIN ÄÞɆ÷Gbs•°Ðó'ܰÚѤ췺ßÒ¬ð•&Ì&ÚóF0ì¨÷ìwÏTŒB²ït)"¤–áƹì;~çkv2z@UÚäÒÖº„9âÊ»ÇÌái´z4¬èaž1iáÍ-Ñß\æ›T}ç5„¿áºa��àQ©×ÈŠa£ex÷Þ8“m Œ_1^[X,6ì5……6ÖB÷—ï4 ë*#ïÏǽ |šÐÝHFABr†cøÌ+š$ÇÕG–&­08£ßIÔY8jKo䆿×^ñ*FºÇý'jõ?ÑH ÀõüÐeÊýN2²Pê%„q.ûŽúZ<Í+Ó¦ò›(¼{Øe)¡¶Sœ/ËF�ƒgåÞÅ8é½¾Þ@X����÷D½FÖéQý2 &ÕFŒ"1þvûïè]Gr“k‹Y¼°XdØç½äúù;Ê€?¢d4VÆqö~ÓsÿÀ#ž’tµ~žlVßè6¿e£Cõ¿¥Ó£òŽÚ;E«k‰k’MW;r‘›g|'+\ ]§„0Î¥ßÑŒfx#BeÚäÒ6âM¤‰Y¸À½×#ø¾vÔÅ]±Lÿ&£-ßy°����î‰Ú¬îÅoÐÍ©“¾ŒÈ Û£ü›2qø”]QÔì k­ÜdŒQe`Ïèôõ‡Åø}/*ì1#M#ÏIC‘}ûµÏ¼ú‰WYê¼§ó3‰‡Ã¼[¯èäøˆN/Õ=ü|é‘N}ó¹—:÷Κ¸n/ú‡ ÎʰìíÙ¥ZÍ5WX4Úèü´¯Â䩱îûîgFxàþS…ãÞ!IçÛî²²ê.=@¥ç&ùN鼌târI«œÁùŽ“™ q'ß«ôëÓä¦"mrïQ·ˆ1#Fß² õ:=þõÚÔ;3®snSò}ÓëÙˆÉ×2ʬHXÖ ���àž¨ßÈÊÜÏ ‘ÞQm�©c뀒cqÏцkp=×ÓÁ˜Ö([ {î‰ãÚÅÅý]zèÝÕ´Á(«É2®æ· û?{Æ©»S5ËGí¦º¯_>ñ¸6lþJWêàx~û ^Ó‰Ý#"5Üí\kFpö–ðܨ”‰š[ªòÛÛ^ûü¨‚›Ù³R#8—ö[Ôúoÿ{ð›ào lùÝ +K.­äEß1wMnž-J›¢÷°ÁŸî–­ÒüíjoÙMý®h<8¢ä¤cÄF£%"#DFjäÙ™{œëî¦ëJU–õ†ãº®@X���xTÖ¹‘�€ ���àž€°��l���À=ñpl•kQ|…��X$\߬+���•und� Â,^Q"9¢vó¹³>¶Ý‘²b :��XS ,��›„Ųc—uSªxõ»d›3ì.—þöY¼:E—^îêWJ>ÕX®®Y~M?7[cÂ�°ép½��›Â:×yk3Þò£Ù´Å[Ó9€EÈÎË`íålGÉTHÈ»nuóIÁºÖsaÅ+,��`³°��l+ƒ;*Q ."ÂÂnZÝÙRÛ¹Ð.„��,œ¶ó*ÜÓ��°¶@X¬ l¸ïÑ~`v mn”ÖE©ÂØŸýN§ƒÏ¹móËqGQÔìœÒè(³)OƒyÞ\Œÿ¤É°'ÖlS;¹ kÞh&ýÍÙ��V‡md¿Ótü õÓÃdÇä‹_©¯êèinƒ/÷àÍÂ~É6' 6÷Ê•²9«TAX�°1p™_WÖRX´GÿI×cx‡sBa![Éû»¡.3bGN”ȸxOímWÄÄæ]¸¿9˜lÇÏ»] èTï€jwñÄ�`uy¸FöŠ.ú»ªÎ|J­îGÙ¡™ûwÆ”t[ÔH{;ºlwLVp'ЀÝb¹½p;­"÷2¼{÷N¯†XqQKXpÿŠz¼«ö¸g�Ê€°X¬°àIÖlÈ‹¸h¾¢Qºý½+,fJWtÌVøáDî»2û’ÝgÁ¼ Û�¹B îo6¬Ï$~†Ù¤OÛ ™ÿ��ÃÃ4²ªMà…2xô¸{–_àƒëìoĸ¿¡i²§Âˆ…ôn›Qto]ê Û¦5©»0pÏ�Ta±2¸Â‚ṯt#Ðh è‚{§HXƒß��çaÙšn¯š2±>'/V¿èÕ•fS:ëµLÛÓ|Amv—µÂâzBC=ákú:wŒ}Ë:Êìïìf½7¾ºàl:4.Â<ÿðäˆ:½3ú{&‹Ô…—ߦöàLÜm¯h2êS»ùŒZíF`µþJï~vû:î¹êo’޹×=t|Ù-í]¶c³Mwñ�ÖÎïëÊš ƺ ‰¸¸:÷\¡Œa®*´… ‹¸€°��€<ÒÈr§/K^ËíµLXØúÙÖÅö^ÇhVÇV·HX|¥qwGµGoèL‰€Ôàaq3îÒ–¼×¸Ófõ»¹–.”ÝëÃbè¹f:Üv$|á3µ  ½l»íœ3£<_õ½¿§´›ü.ï‘-JB÷\;³£žÿUÝúõY€H{«Ã¼%ne©»ïâÝ’X6¤Î{$6@X0Ö¯VUŽíjo;s,lcãñwÂ��êò ¬h]k.Ãm„…½×¸íXèy}n=^â %a¶"%'\‚{}Ì(‹ž¤®ççeøÏ”¸xƽŒÐÈo¥aP”?ÏM«kIG_=)y6�ëƒÔyĆ …í áŠË«4mJÙr³ ž¸÷˸þêK2)¼Ñ)Yc°��€‡idΪŒ¼azµÀ÷©{Q©°(¸×‡Ý›Ì^Mº lv(á?3&rüø ž�zÒת캑y&#f´ÆŒXÈ»ì† À*ð0uÞã°9‚ѪUå›juçbtéd4QÕ«…}@êuÍÚØ!ál9ØÙôõZ?˜Š=RÑz‚Áþ&ÃÇšìyÙ´“�`x˜F¶ª¾TõnïM¤gÝ5ÓcQó ÓT<ba ñj÷KG,ÊîcÚ3-B¢#%]"�òÂBÚÏf›úÉ':×­Ç�·{ÜÆ°4ÞáÊ�l�+@:W"= z¥ØÇs÷  ÷è|¢Dï²='/4æÁ´Æc¨÷±Èži{¾ìû´ý—ÿ“þ¢]³œßúŸhÞ×ÿ›ª¬¹°¿…£#��°pýõ ¤#×¼Ül’íG¡'Awèeº©ª5°±à.7ëM’Žã%X÷[5È&U«çnw©Èƶ1úͼ %ßÓqï}ÑF½%Ã3:}ýžNJîõ÷ÏPF|¯M½3ž-Ëö™ê_Ìsì‚'þˆƒgŽp,Óþذ&ž¼£ÞéÓ6¸ŸÙv;,BiP'Xa¬Î{Ö7f���V‚‡mdíÊFYwö$éjD%ä5ZÔ=ù”îaj÷žòÃlú™zâºÄóŽÚMj¶û4šüÓYý‰Wc:¥þþ³LÈè‰Õ*ÜzŠ{=”°Qr"]*Fdð%÷™Ü5¸Mñ³õƬv´ÂÄ3swrF$xU§aŸöÙÊPVðØôñŸù¦go²•©°*Ø8¿¯+���•und7%R.Ž©wjÝw…Ú›°ž@X����÷„Åš¢Ý¾ž¥ó ì"|@m½œ-�› „¬/­;¤;܉y���Êàz¬#ÎdqÛ>ò$ï[Ï[`=Xç:µ9��€GÂ�°I@X����÷„�`“€°����î  �À&a���Ü�€MÂbà„ërl›_�Àf³ÎuÞZ ��X ,��`}°XÐ0�Ö ��X_ ,V�4L�€uÂ��Ö‹� �`]€°��€õÂb@Ã�X ,��`}°XÐ0�Ö ��X_ ,V�4L�€uÂ��Ö‹� �`]€°��€õÂb@Ã�X6QXàÀÇ&ë „��,¨Ï���¬"KË M“=z²Õ¥ñütÌ&}Ú~²GÉô_�˜  ���«È 1ÐÕusìPwüU®)¦ µÒkêh%4Õ¾Ótü õÛÛéµF«GË_©ß9•{V•]:Ôx²M“#Úß9¤“£]uÀ2Àõ ���°jl€°È¸wi‹EBó¦ßåWæµw¨=úCίè¢Ï†öSju?Òäz¦MÇ”t[Ô¸ó(ÂwºL^Qo|-çÀõ„FÉ{ê¶žª´kP³}DÉ阦&ª�€GÂ��À*²a¢G;ûûÔjðèÀ.D0(+›ÆJ0tµ¡?£ku_“í0û’oî ,Ôó/* Myß#aÀÒa��`Ù0añšö’£Ëä5<áà ½x¦ž÷õ'ßôÕÛ2›©Ól¨g—£NjQáº^ý•&“‘v¹j´öi_ß¿GÉäœFý65íè >o½§ñÙyFàÖu}A‰ãºe­î˜|d]¡Ôß©ºBU½K]òÈ}G:¤D“Äeë0¡Ï=¹‡¯_þNgö¼±Ký‹+ó¬Ù”Æõ.ý,8ïhì&°yp¹���V _Ôÿ¾*!±£þæ)í&¿³9œ ‹Ùõ·•qßèÐèê.Ý÷,P~ íþ…zþwšŽ^ÑŽøÆ%KF,nÆÔÝ2zc7¡KýJOSÿf&o£Iÿ's®DJ;¹ k9Ù}êÌ ‘85{4¾¾‘Q‘†¼¿wnEõ»Ü¿™]&´kßcÓŽÿVă¹®Î›%–”˜¸>£®Oöˆ®´KØ Ú’Ñ#+ÄÌ5�6.C���Àª±¡ÂBaem�_fÂÂúwžGaF>ô„o6¨<aa~ÐïôGD\¤áóTH„׿PÒÚrŒrsžÝ?UïrÞ‹‹ Gx®Ÿí ÷¸sÚ°ÚÔ©Ï���€ecs……"uUjv¨Û~.†þ¢\¡Ø-(¡¶vmRƲí±Wܰ0£"ÍÆ J.¿«Ë<2°U9b§†°`¦S;Gã–ÂBß[=ªÀ¦a��`Ùha¡=Q›{Ê­¡oçLÞf—£Þ›9ܤxÙÚÄàâ^u?‚úúbè³›W«÷ù–“±ËßeÙµû ·~Øç® �€°���°Šl°`þŸi;'ŒŸÃ5ôg—4êð$h^n6É&ëIËz9º¬ÑîŒñ^›zgSu¯ˆOX<£öðŒN_ ËލÝ……Œœ¤ÂAηû4Ñ/¯›¹þ3nKÙ»DdH\슭Ã÷tÜû@Ó+—Ô%KÜÂsól;ŸÃA,Ž:ïå½�l&���V‘ ÒK®{ò#>üZHìfÂBsE“Q?seRG£Õ¥dÌB¡Ê�QrÒ1#"–ˆ ¾d&0ëù¿™û# Äx—ßžlµ©{àœ·ú”¸×õÈ‚Hò›=¬zïνë¯4IW¶Ú¦öà”úûJtðÊO_>q9¦c'ÝÃsîÙ4[- «B áò���¬",6+º¼¥Sž_‘b\½ìjT�€Õ�õ��€UÂbM˜Mú´íŽŠ0¼¯Eçe¶g�`%€°���°Š@XÜ3OB\zbG:ñùàUš’®³ù»õi4—�`à2 ���¬��°d >��°Š@X��À’ú ��À*a��Kê3���«„��,¨Ï���¬"›#,®'4ê·©îañ¨„»R��„��€ÕdC„…ÝáùI~s<��X2 ,���¬"",ÙQÂ�°ä@X���XE ,��`É€°Xft=îQ³ñ‚’Ëïò��€26XX¨Fcò‘º­§úoŸ<Ù¦öàŒ¦¼mµÑzOã³7²éÜuÇ_ù ¼«u{[þ6;bó%fÓ!uš u}›:'GÔéñ=üþõÕ3ìßÄ7Ý{FíÑf¼ “þ7¿{Gã);�Ö.û›ÄlÒ§m[ç5v©ÙØsvAým®GmÝØ íþ…ªI-\§~¢„ëîôž§Ôê&ª®üFWŸ~¡OWÙÝÕ@X��À¼l®°¸>£nóµú¿©+ßi:z¥#e°w?ÑØÎÇ`±‘\ÐõìwJv•�IwÓþªžµCOš=_ß(1Pâ#lä,Шýƒ\3ïÙa!q3¦î–iüŒ°¸¡irŠ+F» ]ξÓeò‚¶Zº¸že×Ú#¾Ú�¬ÕõÙ:rE“aÏtä4_Ѩ ã„EÈN®îS›tTn…„ýÛ¬çÉ“Ÿ¨?ù&¿��¸6TX°¿GO¥=X,�žÉoWæÞTH„£f5§Ì°7çÙý.æ¹V†“@ˆ¸ÈrX!£…‹ _®§N¸u°–T×gkŠ[׈‹¼°0/ %*v“ß#;ŠÙ%:û��pÏl¨°…#bãÉ%S‘(2Âa‡ÈõèÇVÁˆ÷˜%ÔÖ®PÜXv(±#*,d4ÄuÐ÷ˆ��Ö;J�œ¼ÔîL ¥uÉ ‹«µy”c»O“’ rvù‘Ÿþ³°ûé鑪»Ÿ{‚d6=£ãëw]Ñd”P¿½£êë¿Ó¥ gÁóº²nZ*œ—ú3ÏÕUu‡Õò˜ø¦nbü>w¯Ã £1�€å`C……]~Ö­Œå7Ý8ɽ…‚úúéüŒ§Ôê}6ó3 Qbdœ˜9v¤$',¬KVÐó&÷¥�`­©®ÏÖ-,^ªúñ+]ôw©Á†tPïùÂb¦tEÇÜçbÜÁÖõ»ÓNèÑägÔìži£ßt*)ã^·YXô<¸Ý×4úòuv¨¹¿Oÿo=WOÍ=êþ͈=*ýÍŒ¸Øj۹伷Ðý•ß¿ý3æ€��–† ®«ÓŒf— íªŠÞöˆ™Šû™ôroÚ&ç©°0"$çÂE‰’^›zgSõ\ix¬°ž6û&žç!–ºÿzü†ÚÉD„#`XØtÞ—öÐ�V ®Ø®D\¨:±3L;n|aaÀ}ŒèF: ô(ÁfA ß®0f„!;ÂY1ïÉDƒ(²p‡û›7‘œ{I;É�,",dÄA÷$©C „ÀEÉNÔïmõ)ñÎyÃúôÊoöpÝœRÔóG”œðÄBuO£eD†ŒBØ¿Ý:<¢·±yO¶¨•|QmÈ”Îz­¬7 «B°¶pÙßH<aÁç<7‚ÝŽžÊBê§Ç)Ü~|¢“®ÔÉw¼"áIWV"t……Bÿý–ÓñÄqß‹„ �� ‹æŠ.oéÔ~æÑ…žYñI~�€Û�aáXÞv1 Wž°°Æÿà ;Ç¢ÑêR2þ; ï<b¡°s,xnErFÃpÄ‚‘-;êÎé�÷X�À’aq tÃaGä7½¯Eçe|ýu��˜‹ÀZNç´mS»»OÛÎ\cÈ?) ¸a! uø£wîòå|!æ %¤ …ü.ú{ùë��ðÈ@XÜî]JìpµuMêÓ(ç��óa‘WÙF£áDm;Ù¹d¹YÅl:¦_ÆNgP%¡°ˆü 2×®|Ž…EÂÔøšÍx:�Àca��K„EÜ`NÝð„…‹Ñ=ö;ytGÐêÌúXÁ’øV4˜ ^éï™§ÇÂâòï4ÿÿDD„EѲ¸VpȈE¶œ-¿wBýÝ«~Î}¸~�Àݰ��€%cóê3;:`G#¸fF×ÚíÂBc÷Èö˜ˆ ZØIáö9Ö·+U©ßšmŒ/髼øÇßhÄÁ  Ô]Ë·“WÏœÑô«ÍvB“`#Dü½5��`Y€°��€%õ(äjD=LÚ�,'��°dlZ}¦{ñqàÀ±²� ��X26­>Cý]†ëa ¸p'r�”_àa��KƦÕg_;QZ½¯ôðæ@<6vCÖ‚9�<2\f�°@X��À’±iõêo�V”_à²!Â↦É=ÙêÒxé¶Åæ•LúÔnnSwlCüBIk‹¶°‹7˜—iB­'M“—ÒýVö(™ÆrR,ïÝ#¼LæÎ]71[æ²¼8 ,��«Ê/pÙaqwfÓÏÔÓ;¿òP9/-xᬉî¬gÎ×õ2„õ6bºwiK?SŒÁᆷÑzCgÓïrÅPu¬:v“-Î[qa‘-¹Ø¼‡Ãó’vrkïmÊUx¨rÖÿ…Æ Ï›ª¼ž½‘å=ŸR«÷™¦e…U ´³^ˤe¸ãþ=Áñß$6-¾�¬(¿À¢�ÞˆéEOF f¿SÒ9 D¯…n×1·»±òO#êìŠq~ýõÙ`o¼ ä²žAdÄÅ»ë3ê6ŸQ«ÏB™‰Þ„¿ªëk€÷ýÖ˜òxJï~°`ž÷ á}ö ÖÞ·{8áäÑ–A›šÚ˜ß¥þżû1£ëqšö™RŠwl–òÑÐÅõümý²}[ ,��«Ê/p°ˆ!â ÈÉôôZaÁ=±G4p &s}‹ZÉù¥œÅwÒSíN>Ô;µÚÝc«®¯ßom¨Œç ‹R7¨¢pŠ`qÝ,í6˜Ï²›#åÁ%W6¿¿ ,��«Ê/pÙ aq=¡Q¿MMë—mÏ[ïiœºDì(ãêkj¬ñóÌá;ÊЙ|¤n«)½ýh?wgD#‡ëбMûíçÔH;~ÇHïk Fçü0¡ÏÖ%£ùŠF—¿;.¶WWvŒm%4ÕïRè•P¶dçØªëUØ4ˆ¹…E®ñ.²ú¡™?ÿaòAܰÔì éòÒuËâžáͦcJº*nÏ»tsCQßpÈ×õ{ÔÁéáŽÙßKŒêr–$žü¼aOòŠyWgtI³h<ÿ æLXƒý9uOì3|ןœ°pG ô*4ïò®H:Ë{¹L} Îo®iÜmês›‡ãnP–2$ùÕ–§°,Ï™ÞF(ø¢ßï(pÑá…KFW&tâp˜7‰M‹/�ëÊ/pÙ�a‘9Æè±nl‰±È®N»Ê�±Æö͘º[Ö(²XãÇù;¹âcŒ‘­B×"e”jw 1g—4êl«gŠq'ïæ÷è÷»Ë#Šx`÷—]6›㞥Ý9Ò‹›øíþVu½óî§â:"ë«§‚Íu±RâiôJ¨ÊÈëžÑUêÏo¼oÁŠâfò„{‡ÏŘÌ✠éY6±1øL˜™0Š~¿ùX–xš¸ˆ!ló©5jƒxš4áw[¡`󬈕;Œ_Öï ³¬åV*z†ÔIóU€6Ð4—|šÞ«®w:öïX¹A1e–Wó?‚²¬^;Wz«8»“Û-±ß4®TÄ0±ßÇg“Ø´ø°N ü— Œˆ‹Ôó´×>¸^f˜¦=åÖè `£sûçì¼+E®×8|.<¡0ç&>U¡êze½µbpy.%ÒÛì‰'ž¡A§Ïmo²'ƒ1"3£8¥2½æeIãY#ŸúïŽì�ðîwE¬{Dh‰³M#-4Ô½: nÔé¡3~¾VºT$œ)®°àç…e9Œ³¢,½ÃkLì7MLDÄ~[<åõÙú±iñ`@ù.±ëU†©`ùëܳý³2P¾Êy„JcPÿPa(‡BÀ5NóÂÅü½í]®º^F˜n.yƒO=Øab0ÞÕàö¯+Ømçô}ê’Tœ^ú9Žáœ‹Ï’Å“GEÆèĺ~•äSÿÝ1ƒÝŸwí|À¸nBßµhw_Š :§QçP„W• §ELꪔOÿ¹Ò[ _´™¿/q…òD¤¼®P ežøšíö#yeȹò­:®[¯%t FX°¬±üs«4VíÀîÞÂV¸Û´ú ”a»^e˜jcç‡À�c7“—ôR»œ”ºŒ(r†Qøþ\xŒqž›øÈ.­Ž1dzÀeIåõ2¤÷Ø3´,¶gÙ5Ðüžÿ¹ ÀˆÁmÂiî7n:;Ôî'4:V¤×¼,O<I»Êí¨Fòˆ’јFùÔwÄ`×ù/›OãÝ/Ï«½B˜5Ò‡Ÿ¨¿7 Éîý6ýœŽPpÚ¼,qƒbŠ„…¸ ª²…éŽÂBÜɲò'߮٣qÄ1.qŽ‘ôc·7yú½�aG—ûíÝYòwñHÞUquóï*£Ëǯ’v-.¡1þ0,SXîÛö,"ÿð<Á„Úª 5n²wcÓê+PΆ éõL £œ§½ŽÁuk`µ?ÐùiŸN=·&éјýýìßRÏ- ì+ßyéÕ´•ƒßaçXp/‹T„âV’ŒržC¡8‘ó4>î�y~ár³±ë%Øù <9ÖL�æ^]³*–¹f}Ý­¾]ÊÓöpgFZèòcÎm¹ÜvîNi Åð·ïÝ:|Oǽ4-ý~õXŽxZ£YþÖαØzE'ÇGtúå× žßäÝ¡°æX¤Ë¥†aµyÓ™à]˜SnÍm•—8.öïQΛ,:¢o±ç g¹˜¯ Ëò¼émç8É|%ïÛÅp—›ýf ,7»pjÅWçÿfÉ·z@8,/ÞÜÂ¸Ë ãÕEê—…Æ…;¾^QÏv Ôæ>²ŒÜ%ÿäÓV·ež-s; ,€Ë §—ˆ­6uœóVŸ÷ºî9–ɺl`±ñ-†½¹‡‡Xû4Ò{Z0vB¬½žÝ—W!Þ†[»ôöhŸ¶šmê&t-F±}ÎÖA—Üóî1³!ZpnÂo{#Ø_žÃ®ìSu½ w¸™I#}Í}._Ë&¹Ùþ2|“>eîHá9÷.ÿ?Æàn>§–</ÛÈO½çb aà™N©¿¯ŒÍÔ� ¾mn–!žŠtõ'þNöVùÆ ?ž_ÃwëÄ]UÊÿÖ¹°òýnÞ¬ÌÖ¨Ïzïžh¯¨hDX¥ápŽF‹º'Ÿw†°,wé×_çMo%Ri’tŒhÑùǮ襈Œ©ÌFI[Äÿ›_Þ~×&Q_Ék÷ì‚V©óoeÜ­“°Xt\l½në®yX§t-ã¶ñ,J[é8q<(næÕW œ `5É»­'›O0!f¤*çÞè-;ÍBØñ«Ï]3"9Ôf„,<×ÂS/aü‚NÆŸ²%Œµû[Ø‘d]ìJ–ivźzf›ŸWdzaæûmg wf˜eÇ­}Ú×»ÔÿïƒßT&ç‘gü—Œ^Êoòþ|Ü]øEËjç;ò®§ÙRÐi'GaºZÃ7{ž®Ó}u_g@ýÎÛHº…ÅíTQ‡Û)`ç*4žS{ŸŸo;\‚¿O;tEá* oIX˜²|ì ‹09»ñ(,çÞ“#êôÎèk,mÍÝF°GÝ~ëÃÏÀa–i,–¢‡ò>Ù”x‚yØ´ú¬2¾z$)0þì|í6¨ S=ÇöȺ.lÖ]Q[z. ¯ZÆ#mÖ˜¶#oæÜŒº¹ž]ÂØÞweË4Ûp˜QÈ4ÂÂúqÇÔ#ßÎHvê¶û­ìêŸI#w> ¶‚¥ K–Õ6&lyïy&ZÌ7©NWû7öú£T:ívÔ÷‹¼+‰kàbjö«úbîå°”¹5ºyκ¡ê°…«ø÷â°¨ïPšCüx†il¾§ÿi¾ÙŽ>?mÂ9i·`Óê+P„Èpªø‘5�÷Kе¶½ù›O0/œ6‰Êøz B·;}6ÏFÝ-âÁüæßL½sk|F¬ãf˱=øúŸá*d寏‡ÔÇéH@xÎÄ~sÉ]—yQ"DXxì¥û͸Ȝ¯'[æ7¥¿UÇ%4fËÓ5<—oÆ.‘Éz[aXLÝê¹øxsçø÷þ¢pý^––åãùpûi&ß·Õ£aê®mÓ:%R¶æ¥²ü‚Â��–ŒM«Ï*ã1~B#Õ%jD9Ïÿ¶Þ¹}^`Üiã=>§.Ž-»UÕ]F»HX=C…0µ˜Ò¤¿çˆ—X8ÃÕÛªãÆ¿<]óçÞü&vÅ*ܘ6öMÂt‘ŽÝSã;h¾Ç—ú. Wì÷а| Ò¤œ|¸ý4Sß×ÿg7ÑÍÝç�a „��,›VŸUÆWg± w4 Ã\ó}w„#nàf½ÆñëÖ(‹±®;’%ÆrƒÖ¸JͱŒvä·Òg0vUÁýC:ÜyYà[oWjs{Òå·Ôm³Ú8ÙòtÍŸ[fÓ1%Ú¸ï\X•ý›]j»:ìÆe©`©o¡(\ÞïÃÿQ–›’|œ'îxš± JŒ°”¦¢´5Â"òûÀþ.��°d@X„ß@¿ww9â«OÔ(ÃÑ^«³Œ³×ËÌF/oøÈnSÖ¨¶nTÖøãNlÃó_èõé]-Ó,{»ØžccôKo²khj²ç²!h—µN—Ñ—!gr¿U<CßcãS²r¡Âþm|Ym&t ÓÍž¥«ó]†gtúúý~ö†ölšê¸àaXd¿¦t5?™#’Ωû+E‘¼Ïæ'Yêû$éEÃu3Ž…÷²<,eùØœ9„ñŒäÍ^[öy‘kro˜¶ÞœœÂoXØ_ÀÂ��–ŒM«Ïªã+FR`Œ›]¸•QƆº:¬¬ñC°ÒNºŒ3ÿÍúœ¼ÒK~óJ=ßµfžÇBã89ðÎYxw"ç}%Ë4»adß÷£vS]w—,·ÌT –ÑþòY<˜0ˆÑ ï·²gX£•ѳŸ;£1·Ï)˜q¥1†¬½Þ¤ƒn»"]•…¯Ã¥Þ'‚ðfüž^'ï$ Žpó( Ë•³¬´:R· _ö÷"qQ²Ô÷÷‚p‡·(,†Ò|œ’wn¹íñÐxpDɉ¼«ÑÊ6“ ÒÖ`F¡¼ù·€ß€eC„Å:mžS»ŒÞ*ÅÕk”ÝÆ+†]^ïE:œžcC»Ñt\Äs¨Á¦5Ôµâ«{v—dƒ¼U‡{ÓÓÝñÁ¦¢G¥°AX0",îŽß£¿ìÏh{)ÔõÚD+Ó£±2ÂB–jd…Y†/ç"a|–ùd~º‹gÓ¬÷]Ÿ-uã›Î(í|�åpÛ¦=´ ÆŽFíd{sÜM«¯@9°’Ñ¿Uî)ëÈÐ¥Ý É™Ôv5¢Î®ì–l‡OËÖǾWÄ(^ƒØ c{~Ã!œþ/Þ¤ñ1Cì÷),˜UKG°N@Xc:yöï¹ü¯!鲸ì"åì66ÕîîîenRw¸@XÄqPd캫‹¨3¥+Žhàøªšëw[¾íö¬˜A[éÄC„œ °î@X��V”_à²Â"ô—·ç­÷4>{#ÝdLgRŸ9\–‡?R·Õ”Õ оøî2}þ„6óìì7y—7é0;´ñóýwç(4_P›Ã[ƒØ›(â(ýMÎËÂ'ɰi渑ÙÞ2Nî3Âù vtÈ^7ï·ÂâdüIÜÓÜÝ`íŒíôYÙJ,ÛÔ99¢Ž‰ )MÇð¹Ùùaò! GgH——îdÍØ$<�Êá¼³IlZ|X'P~Ë‹Ð_Þ®Ï͆ªÌ•°Ë½Ù£½èvs çïäŠY½DψړÊÐÎmÙ¯Â4è‰ëÔWÞeØöh|}#+|ØeøðßšûyevÅJèÛ FVpã?›¼§—Ú'·,|ô³žùËì¹B rÄ"?r`„…1â§3»¬`(Òlúòò|?HøÌûw¢ï*OÇð¹Ù\+¾I8x^}F¥þÎEË#P ç«MbÓâ À:ò \6@X0¡q*çVH„×ËŒÝë õÆ7Oã«“°!½ýsùü -džeÆøì‚½Od–{3s²åßd)½¢°æÖöÎâó#Æz:‰š…Ï‘¬s]>cÞÙÁ:Ü·ÙHRüÜÏ”ñߣanyG‡éè?7ž[5JŸ?–KXe ,��«Ê/p°ˆ]¯2ve\þ:÷zÿ¬ ˯r^„»q ÷lQ75hƒÍst¿Ý-”ñÚ3n#q†;êÂG‰ÑëÚ* ½®>Uás‰…ņA„À½ »ú…]±Ë_?ÜR'Ã{raĦ5Ô_Ó1R\ÿÜ\'¨ßÞ~à÷p?lZ}ʰˆ]¯4v]÷ ÏxI/ë.Ý–îç4êú»^zó<ÂMü°—œEX0ÒÓßÒ—Ñ!uÒç+JÃçbÝÎÜù&ò› ¹waaá%3×#²Ëht„°�Ŧ5Ô_©ó8Î`Ø´ú ”³!ÂBÜoR#QÎSWŸàºTüö:?íÓ©çÖ¤ Tžðím*ýøo©çŠ 6¾;ïK6 ’wþФ펻ë¥1¼ËEV»„ ôÄg•UÃU²D52ª¢Œíæö+ǯ ŸÞ€§‘Mb6á{–¹‘iÅi]´ó§øJ ϡקÿ êp¹«rÅέ¯þ¾×–eõÜ‘¢ a*Ó1|n–>VŒ„âÄœ—Ì? €Mk¨7Î0©ìPy,Ø öõlç�5ظò JÙ�a!†)ˆ|lµ©{àœ·ú”¸×õ(†LPæÞxžt,Ư¹‡'çöi”ºÓ„+e÷•”v·ÛKÎØÉÈÁó´Á{Äň wó>žKpÔna¼%ÚÍ©ýeዽ/pEr'¾ë}÷9Ù¨C†M'#N~’»ªÖqrPrÎ"à?h<8¢ä¤£Ÿñ¤Ñ*\»»,ÍèDö܃nÛOÒwâžcÔÌç›MbÓ⻜ÂBÕµz1Ûy@=6®ü‚R6@X¬J¨ Þ£$Æ¸Ž¯fôÐ,{ø�X} ,\œÎ!ÝñžsçÏYø‘Z'¿:KFóÊuÒ…0“]ýõjrêwÞÒøÆþ;×s;BìÁÆö¥,1ý¢`©kõ×Ó3¤KqûÑeêoö÷õ2çÅÂâŠ&Þ,…®¯ã&¼Ö¦ÁX§ÂÒÉ®ð'ÏLÿ€j8¿�`°X2´ûLØ«ÎûFt^RÿâŽ# `ÙÃÀ:°i uu|Å45vótGi6’Å•Q»`Ú‘Bq[×Píæ¸£Œéo‘¹²… v4Ú¸Y×F¾ß.)m—˜–‘V½ÚŸÝãH¹°#Òú¹Ïd>š½V$,dTØ[ Ã.¢Äà6vM}› &Ù‡éNéÄ)±ùi�”³iõ(ÂbÙ˜Miœtž£Ðõê‘Yöð°lZC]_é}O æà\»9.‡ž«‘[Õ¢îp¢þÒ!tIÒ{j°�ƒ1¼ã EdÂÃ?¶”Hù3œÛUæ ¥@ÑJ{árß ožÚ]ÒÉ�u©.¿`“€°��€%cÓê³êøÞÍ`Ö£ª®‹’çÞ'#� ½Á©Œ8«Ú• ów<‹„ÕYa.÷^—0..Ñ¿s÷‚°�ì/àa��K„EHÁì-[]",„ÙtL‰ÞàTF%r÷)1áÎ5Ü>«…ElãTYb{®‹pÑ Áº3¹+þy#wK' p` ��X2 ,BÄ@ÖÆù?Ášhíä¬Ä'îA™Áü†öì~;úš‹à>c¤oÖv‰é‚¥­­ÑŸŠ)ï¨3¸ YzÚÎͰs,Ø•4ïòdWÞÛ¦Nº„ù4ê+q`¯ÉŠ…v.‡qçtba¡ÒfxF§¯?Ð¥0�¢Àþ.��°dlZ}V_w$7åü@Éá¶2ÔßÑøËgÝë®gžq|ìŸ'_”Áüž^'ïÄÈ–M=¿›ÞzsŸ×z¶Yr:;Œ 8¯XêšG1Ü%«ýU¡dÿ#þ·o¨½¥®÷GJhD¬÷Ù4[µ‰;Y[sE“D–ÏæÃ[1ênéd'Šûï ÎC�X ,��`ÉØ´úliâ{ý ”1î÷Ôó¾F{p �Ø_ÀeC„Å M“=ò¸¼ÊŽõæ•SRŸÞùñzù 7Ú»%zU—5÷¾žÐ¨ß¦fá7XDþŸÉøîšÿ(W÷„Åc`æB4Zoèlj÷éá|ŸP§ýŽ.b# �� à±!Ââî䆸íª"šï4Ûav6Ží†Eë û¿¢]™�x3îÑÑ¥k k¿ó„Ç^_¾Y´Ì"ˆ#C9ßÝAÜU"“<ù=™°�÷Å}×gËÆ²Ä7›Ümòº®ë‹Ü•��šM«¯@9ðÆA/zvBŸ2~;Ò“îoš¤¹QgWz¹®£> t2Ý2Áÿ^Qïν÷<A°%£�ÜkÝÎÖ}Ÿ—eQàoýâͽ÷À{ùëø®sO”­d „�`U@ù.1DPf#$we#8k—›ëÎ’~KÔ·#þ %»¯déDÞÙu/²v{=–kyC÷íÚS‘¿*Éý=„źa�XP~Ëf ëƒn ÆÔ'ý=Ó•:v”qû55ÚøyæÈÖ,ׯùä#u[MYê¯�Ý Û(ÉrE“aOÞ«o^AxMܪRW,á¹ûÀÿH­“_³Eš=_ßøk³óq+#T6b²ÏðŽ"qPešjÿ|÷9ƒž]Ì•Þ?Ðóî uEó} ‹ž/×F}j7íò‘öüŒ?ÉóÔìž©oiG¢lx$]y§ñÊ+ú7^æõÈ”ä¡ÆsjïóÆ[|ÿÿ7[F²ù’NúùÑ¡¢ü¥ž7L]0œ÷„Dÿž'—²°ˆägý7Aþ·KTòß…SÈ\�U˜ö÷õ³SaQT®¶^QòÙ†ƒ—Ìü]º+┕ áo»IlZ|X'P~Ë éÍe#J@ŽOº+a—´Æv´gÖ5„Ã9.fmó-½s«üä!ë[W)YÞϼK‰ÞéÕ.õ'»À¦F¢^sÜ qÏíê>*ì.³ëÜ¿¨Ñoâ6‡AÅ5.R*â£( “¬±Îqj´tá$³yTùóͳùïÍóÍHŸ›å#y=y³&¼’Wœ¯oéwÏ”‘Ís@xãªÿK‰�ÉS®Ë›¯J–Ýx¼rù‹…ÁŽÄ1{…‘L”û{›ÇeÝ{/?‡ù_Ý^7œ:o>3KsÎ21bÞ[V®D<Øp¤åÅÄÓÛ( DátÜ$6-¾�¬(¿Àe„ŒržöÚ×£ÂBH{–c;¬*ØÛþ¹x~…·Kjˆðv\ãZÿ¦Ãå‹ZçY<#,X8½¤ ??óY,4ñQ§•aÒ£?Nœ¼]lÿ}îç›ólÊ¿äW¬¹‡¾æ)…~·2ª»Ë'{†ùKÇQ6ìÒØ·Üß¿/ÊÏEù»V8% ¥»‡iž‡«FYqåõÙúQ+¾÷4Ët8,*OÚ‘cwõ4�Ö›M«¯@9±ë9*@ Îüuî‘ýY5|â‚C?Û5”¢ï÷#kø·µÎ³ç•ñ¡kR,ŒsºBUÅGÍ/,ãô˯s?.a¡ÃÛ— ósål\eGE"†{ï’‹·C.] òsQþ®ÎHüŠÞ›ÞžCXÜ.S›ÄÃÇ׊÷mêœÑþÎ!±+äó¦Óá×K�¬/›V_r ,b×£± OXþ!08ÙGÿ%½dWù%Š4<^/»Å6JÛ}šØ‡èßd„C‡+Žá½^aÀÎ î?KãËéösñ\’ªø¨ÓÊ0Xð·ú>ÿóÍù<Ââ 5¢nmažràyI×qÙ ¾‹é1õŒù­`žNð÷…ù¹PX¥átG†$TEïMŸžCXÜ‹PµÂÏ JÞS×Î!jQr:–²ï@®œ�°Þ@X�— ,ž9Žœ§ipÝ”ít~Ú§SÏ­é;My"ê–»œ,ûŸ¿¥ž+*x’mç}fð¦È ë¯Sïï«{í5;ÁUüÚ­.6Ý^g1¼µ‹‹c Š[/,žQ{xF§¯ÃÝekÂaøQÒø—%þòñQ¡,uùa´°Pqöæ<7´ºÏ·ÂÁž»+z¹×Å0VÆôðüz}z¡Ä"ÏPÏ×ó øû]Ã<¥PiÓÛ³ËÍõ2a‘æ¯/3!˜+4Š\þT÷ÇòsIþ®N+xì|”tÂw*‚Â4óTŒ„âÄÎÃ([Ø�0w¥Æ o�, à²ÂBŒEm©c«MÝç¼Õ§Ä½®{ye’©5XÅ@7÷pÔ§‘³Š“¿šPvŸÛí1›f«6ña J+Ô¬•¾«Ñ¢Þç„·¶©=8£éwÓ˜™w+¡q|쟳ð‰âþûæƒMoâöŽ3Z¥(>¶÷Ú†Qi»ƒ*Í[Ï厑¯)N/#¤äw%ºmç|Ž“ï<Q†¶ž ®Î­ñ¿{^­éÏ OYƒýo4x}L'mž@ÎÏpW¯r òÿt}A‰üyO•Æýû¡‘—ÃüœsX¿Õ §ˆh÷Õ»Þ¾¡6ç7½aØUy¹Ú: äØù¾á9F-Já4Ú$ªã«Êù]Wxó° ;Ô«zÌu…âòå–!®—œv¤õWšèÕù|zog˜ÕIްø–ÖA&¿gu’“ÿ‹Vž³%ü{Åêm�<&\�°l€°�+MÙ\�Ö”M«Ïªâ›äftÑŒ¦YC¼Î oŘg‡BWÄ»û÷³ ¼<¥Ë™<[ ;jêŒÂy#VÀØç‡çæï·r+ÏèJwhÕX½ €Göp°�ËŒXŽþ�°†@Xä1à–ó¥nY®; ³É1õ".›a¸|aQN9·óдHr÷Ÿ,,žV¯2À#S§ü‚ÍÂ,/2¿Â4¶µ�›Ã¦Õguâðqƒ}qŸô•ƽ7Þ|²ÙtL§'fñoU¼y„…¾·¨ãÄuó¬ràñ€ý\ ,��`É€°ÈóðÂBÜ–xñ/Cêtì2÷¡Ù¦~ò‰ÎG‡^¸ŒX¨2"÷.ÔÀT­2À#û ¸@X��À’a®àfÏ­«Rx]„EºÂ[d3Ó:ÈJ{?4¤Žuƒ²b@ùvŽE“OÞQïԮΗ‰�#$då;o‘ײRš³(…]yî{ÍUæ�xd` ��X2 ,|ŒqnÝ"o¹ÂÛ­IÜé’ÉŒ³êT³MƒaŸö•øÐ+C)1À¢Ã„CF-X(È R¼Ûçämñß§FìDWžSb¢ö*s�<.œ?°@X��À’±iõêo�V”_àa��K„�`U@ù.��°d@X��V”_àa��K„�`U@ù.��°d@X��V”_àa��K„�`U@ù.��°d@X��V”_àa��K„�`U@ù.k%,pàÀc]ŽMbÓâ À:ò \���<*0L�X]P~ r��€G† �« Ê/pAn���ð¨À0`uAù.È ���&�¬.(¿À¹��À£Â† 8V÷�À‚Ü�������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a������¸3������€;a���Ü+3º÷¨ÙxAÉåwù ��Ö ���ÊlÒ§í'Oè ]ê_\ɇÙõ·æ}4h»¡Lv‹2Þ'Ÿ(é·©™Þó”ZÝ„ÆÓotõéút•Ý}wfs<Â�°@X���X®h2ìQ«¡Aó¦qœEÈN{¤îvQ›t” °BÂþ-‹õÛÛJdüDýÉ7ù}Ì~§dï€F +��°Ú@X���XÜQ‰q‘ßé2yA %*v“ß ‡Ù%:û WtÑߥF£a�����–;J�œ¼ÔîLÖ€.®}Ã=',®FÔæQŽí>MJlüÙåG|úCÎêð¦god¥CÉäßhÔ;VïQ‘º[©C ŒÒd”P¿½CÛý¿Óåè•AÑbg6¥ñéµ›Ï3qs=¡ÑIW=ÿ'ê_üƒÆqáj´¨w6õÒlzF=êb®w‡º–k��°L@X���X´°x©Œô¯©ñÞØMèÒ±²}a1Sº¢cî˹GÝ ýžTØ(‘ÁB!/ßhÒÿIÿ…ƒç~4w_ÓèË?hÔÙ¡f÷”þ¯ö3!Ö륿5i·ûžÎxt†Ý«vŸú"éúŒºÍ-õœ3-&fÓ!ušv®É3jæK��p¿@X���XRaÁVµP†zgHS1´}aa ôp"÷]1BaË5ê]zÄ‚ÿ ‡m;¹ß›çQç7+XÜ{ä7¸a�– ���Ë',øœçF° ÐSjõ3=ö",Ì{x¥ªF«K'£Ðõè¡„…}¦;2��°@X���XBaÁX÷ Wž°°†øâ……7ǂݎô< ëlõpŠ«t¾‰[̓ù'��ðØ@X���Xb‚¹þú-ÛÔîîÓ¶3ŸÂŽ,TMÞ¾5<ñ:áIÖêé>(,³éˆz‡m9 j¶ß9Kê�Àò�a��`9( wÒ²?Qû+»;ê÷’åf³é˜~û«-3£«OÇtênf§WŸ².I(,xòöv<M��`Ù€°���°” fv™Ðn#²”;£{L£ÔeI¡GÞPw`æhÔC&o·Þ˜ÕšÔùõÅ€Z[vÄÂçð_tý·ÿIã«ù-&,¬øqçJØù!®°°÷íPwüUÛ÷ˆ;–w¨¸ö>§“Ú�`Xaa{yL…[ûœI‡ÌÓíЙ+Y‡\Ö çƒ× Oƪòþƒ>%¿úÙBàž±_è“ׯ~�€uůÃõum2þn'šHýµ:øòœû<oŽ…Âºgé}'þAAø3ñã.-ˇù?é/v#@}°à8î’ºÙßÝ#lÃ��àqY¯‹ë »-Ýcä.Oèà ؞Ók$\_˜$ò»n¬úÔæ!øûðá剉{~]ì7���›Çµ7Éß#£-¼·Fºa[��ÈÚ¹Be£Eâ"",ìª#éļ<Ú¿ww°`a!ë´{~º±ß���lºmÚ-•˜‰ Ú �Àò°–ÂbgÿˆN‚µÏ3Baa}Xc~±.ßéòôx>÷$öí´©i‡­y4dh×C·›?Ù!msýÿ8ä÷7ÿ”!þÆ¿Ó%ï�[1Q��ÀŠcwÝn÷w®ï4 ÓÚ“Ñ�àaXOaÁ¾­©_jh€‡ÂÂú¿º“ê"É j¤kÛIy®O¬ø{£áoîä½5w_ÓèË?hÔÙ¡f÷lŽÉˆ��°áðäponCÁ±D#ƼšÕißé ºõ¼��¸ÖWXð‰³öygt)â"z A®¬= ΄lŸ®€©#, ÆÅ«jT�����€Ça½…ŸÛµÏ»Ô¿à_JX8\Oht",AX�����€5dí…c×>7ââ?}a‘߃°°s,ôJSgt1Ĉ�����XO6BX¨_ÍæF,.šûÔm?Ï÷ 7ÚeNE:Ç®P��#7ǵ�–  ¯ùÍ«)qa &jë•7Ø]ªx¹Y³ LjÆzÖˆ‹æX��@90�˜”°Œl°`d¥¦PX(²¹-êž|¢‰³s7¯Ê‘ôz4Ðs4jb]¬dÄb6=£ÞÁ•ß=¡¿þ®ÂhÅ»aý—¬I~Sò„�`ý€Àü Ü€ed}renÁ"#œ÷اN ,4<É:92»lÛçD„F=÷«'ÛÔœÑô+b4¨ÙN²çÙ•«Ô{zg²&¹÷Û?TxÙUËÆË�€Õ‡ë5�À| Ü€e¹��À£ €ùA¹Ër%��€G�óƒr–äJ��� $�æå,#È•sa—¦Íæ;Äüäp���q¸Þ�ÌÊ XF+��<*0�˜”°Œ¬M®4#8p¬Æ�È@™�`~PnÀ2²V€U�y�” �æå,#�<0È«�ø<^™øBIk‹¶ºcº‘_îŸ]OFÔoo?ð{Áº¶,#�<0È«�ølT™¸Sw˸DBX€»€¶,#�<0È«�øl\™q±|Ââ;]&¯¨7¾–s°Ì -Ë„� ò*�>ËÀŒ®/Ôj4© a± -Ë„� ò*�>åeâšÆÝ¦¾çI+¡iîÜÎYø‘Z'¿ÒY¯E ¾ÖìÑøzf1»¤Qg[ýMƒšõ;oi|›ëÀ¿%Ôn6ÌóÓƒíKšŒúêÚ :¢^ë©y^÷L…È0›žÑ@=ÏüÍ6µg4µA˜~Îþf_ðeÂâŠ&Þ¾G?«Ù¡drUp­Mƒ±N…;¤Óˆ yfú7`™áïÀ²aÀƒ¼ €Ou™øƒFígޱëœÏ.¨¿-B@ ðÙeB»-j%_Ô½3ºu¨±Ý§‰2ògÓ!uv”1ý-2×áúŒºÍ- WtÑßUÆ÷OÔŸ|£Ù¤OÛüí„&×ßè2y¡®ïQ2U=û’Ý&µú¿©¿ýNÓÑ+jÚÍRõsŸQ«÷Y…×^+쎤žÛxAÉåwùۆܫÄÁ¸GÍÆ.õ/”ÐHÓŽ>_ÕßÞ%x ¥K[ZDaÄb@[– �äU�|ªË„ô¾§sp®]‹2Ùw5aÑhQw8Qéº$MjY1ž‡†·‰ôÜâ™ðð-%RþÔïïÐèJ†/Ê\¡´�Ø¢íþ… yˆYŪÑ)Ù#\¨Ýx"¿Ý%üø€å§ºÜ�ðð@X�ðÀ ¯àS]&îf0Óõ%®‹RraFxŸŒ�4vºœÉ而X˜Û‹……ùvo†„u«Kc«"Â÷º„qq‰þ&- ,6 ´%`°�àA^ÀçÖÂBÜ›ª fËl:¦¤Ës dT"wŸî\ƒF‹zg<;ÁP-,žÒnò{0Òð&ýŸÔ³æ±hø£ëÎdãþfG8î–N«Ú°Œ@X,3zþ~+y3|Ÿ5”àþAc�€Oma¡ó‚5ÑÚ¨‘¹‰{Pf0¿¡==¿Á^aÜgŒôí‚:W\ªÒQ {.u´5úS1Â"åut£ëÙln†cÁó5ò.O2ÇâÉ6uF—ríõŽ•8°×žús9ì|Œ;§ •6Ã3:}ý.ý€%m XF6@XÜ(û|ÏT¬ú°“Üm¼ÛkRùÊ%îÝ:í·¥P‡öÑý;ûÝ7Ämƒ¨®“#Úß9¤“#ž¤ñp^�dT— w$AÕ½”n+Cý¿|Ö½î¦ߢÖñ±ž|Qó{z¼#›ÿ^‰Œï¦·ÞÜ'Ƶž€Í+7e¿ÛÉÚç£CetÛßöè89ðιîÌV~âßÜU¡”�8{“…ÿíjo©ëý‘ë}6ÍVmâÃNÖÖ\Ñ$édí’·bÔÝÒÉN÷ß–þv�, ,2LoŒªD›¯h4åÞ ¯œ±“MØs*çF«GC[i«Ê~œtÕïwEàÕ8^ô¤—ì1¸žÐ(yO]»üaûˆ’Ó±4‚à>Ac�€ÏÒ”‰ëßh Œq¿§þ+»{÷:r Àm@[–‘ =Ú‘õí]¤=E<|ÜÊÛk㮃ž²€IUãÕW}:üþ@X<h �ðYŽ2aæB4Zoè,íxšiw¢NûÓ^�° -ËȆ ‹×´—ü›ø¨*c:ÝØÈÖM(æû:'±M™¾QÁá5Ç%“s±ËUã9µ÷ù~–þWÙŒÉúû^UnÎDÞÊ'Ù‘06Ž;ÔS;t…bÑÁái½§q:|ïº4¥¾À܈S‡ }N7`zE£Ëß³¡}o˜ý;MÇÖEïµ›=­/O�@Ʋ”‰lrwV·º+ðÈ -ËÈ ^ ƒ‡¶wÔߨ<\a!+x¸k™ß 1ÞÃM™ØÂ÷VâÉv܈¥ð·-™X¹9““·‹jµ82ïqçVØøK£ÊË2Z¿c;ÿÄ]YÄ^ãxÞÈäE#ÌLêÜúËh]ñD_ß 6{rWOYCÐ�àƒ2Àü Ü€edC……ÂÄÚ�¾t„…5ôï:B„EM™ì;ÝuÎáÒ¡ð¯‡'¹k›Ï‹„'ýÛxø Áµ\ÜL8ÂsólWĸÇÝç°,3uò*�›Ê�óƒr–‘Í =Š çRt¨Û~.Æì]¡ênÊ´a,;¨GŠvo­¢Ž°`¦tbÝn%,ä¹îšì��|P&�˜”°Œl´°`avV zÉemïøämþ›#êÎá&U½)Ó"„…B&…!#K*ÞÊ`¯ÚeiÇLøiä^»°p\À64�ø L�0?(7`Ù aÁ«9ýLÛîdgÝpÈ1Ðmï¿zf£Õ¥$LÌ“–_Sûå°–Á^¸)“ßö:?íÓé¥2ÔÛÏaaGNl¸ìyÁæLâV”ðw—ßUáIGä\ÂgÄź”m½¢“ã#:½ø¨EYê’î"ìkçŽd+±\ÑEÿ:Žë �|¯L„³ÈEÑ{íAg�.hKÀ2²!ÂBzÉÕ=ú+kÝ¿ë &«üÓ¿ãùIý%Y£›2é¿Í&·úÿbzüƒ°ã]~Sâá ÛvÎc›3ý—$û›ÞæIuQû÷­>%ÞyBÓtd„'’hØÿY½w›:OèP &{ïV÷˜ŽtÏͨ…»q”:°*�ÇF• éXâ8Ç……3÷ ”€¶,#",6+º¼¥Sϥȸzí<ho¨y�Ÿ+9—Ѹ{,�.hKÀ2a±&h—¢F‹zgNo?Oï¼töŒ�Ë��| ,B ,@5hKÀ2aq[œáìøáî ñ�̦4NºÎ¦uì¦Ô§Ñ\nPà!àï�È(/Ž{¦»èCznÝV¤ÖɯÙFœîâ±ÍJo æ:n4:¤óŠMJgÓ3¸+ÎR×ÙÙôsö7ûûº®®/,Š6­±q*X[8/�°l@X�ðÀ ¯àS]&d -$‚s» „6¸Íœ2³1§lâÉæ7/tnVú-6סx£Ñ›ªMJõBMjõSF½]�D¹ÐË?“yvÙâ u…EÑF¢Ã³¿Tlœ Ö´%`°�àA^À§ºLˆ¡ ‹à\ [!aÏ­á.¢Öf¥f¡¢FË–ü¶+Üq\Üc«{Fê÷wht%Ãs¹B•o$Z&°Þp>�`Ù€°�àA^À§ºLÜEX(joV*£ –ñæÿv9pW$ÈOs ùÁF¢› Ú°Œ@X�ðÀ ¯àskaaí*a!ToVª(Ùh´ZX<¥Ýäw-B2dÄáÖ#òÿ‚D!,6´%`°Ø4´?²j,½ÈCì„Àm4N÷�ò*�>µ……6Îoèz’d™Ylè HÍ\mºëóÌp/ܬ4¸¯|£ÑŠMJí\tu¾]_¼£ÎÀÎÏÈæAØ9<7" ³‡Ì!1R¼‘蕇 ¬5hKÀ2²Â↦ɞi€ô±£*ܯrM1M¨•^SGÚ#¦ªèé˜Ny÷S{MûèþÆýnÚ;´2HëWDÙߥî oJçôð9˜/Ž3§û€ó� £ºL°‘Ω¹^âQ„”n+Cý¿|Ö½ÿ¦WuÚñ±®ê¸èf¥ßͨ¹ÏŠ‹ï…÷÷¥^ä#¶Ié³òÿæ® ånªÞÿö µ·ÔõþH PVˆˆ²ÏÖ£îß«CV…úžÖÕ|ÄÃÖþÎ�, ,2Rƒ¹ùŠFº×ǽC;¦K“5bV†vÉÖtI×U4¸yâ”N´�§A›úÉ{é1×p:¯†òâMæ? JAc�€Ïò” l4 V´%`Ù0a¡Y?¼ÑÐEÚSÄ=D­ÌˆÖö²ä`Ø›Ä=Z¯¨a!ðü.5܉‰ 4�ø,K™ÀF£`•@[–‘ ¯i/ù7êv7r……õQ-ò}ƒë ­!ÏG:R’mÌÔhíÓ¾žß¥þÿü¶GÉä<þ Ï…K€L´ÃÿÖª{JI;æ åµoÓ~û¹z§J” {rÍ\ïŒ.9¥Œ¨HÃÁÏûw·ÔMÝØýj˜N~h �Yš2FÁ ¶,#(,Ø–MÒ<\aa× —É}wÀôú‹ï­Þ°IÄJ*�žPc7¡K6ºc¿•=ƒ/ÊRˆ™@bQô’vÊ‘~O(<ÌPÓöÔ¥»Ôº‚EþFo¥DCºô¡ø§#r®çªXåØŒ› �|P&�˜”°Œl¨°PX¹Á»™^:ÂB ãºó ê"Â!]m$<gb¿¹ä®ËèŠ]†ã´w-iX³I¶)¿ªÈª@H¸BÍ5WcC@c�€Ê�óƒr–‘ÍŠÙtH=—¢CÝös1~è ÅðÐúéûÔ5èV¢èŒ3jq5éÓŽ#jyo^|§éøC6G£BXèµN¬K„… �|P&�˜”°Œl´°`¡]€ØPv_YÛ<>y›ÿ戺5ܤŒpÙ¡v?¡ÑùÐ7Þk ‹ÒghìæK/¨{¸{;÷-Y½pÄB»FíP³}DÉhL£Ò Ù¹VOÿDç£CŒX 1�Àe€ùA¹ËÈ ö÷ÿ™¶Óù; è— Œ­.%c»BOb~Mí—u&#‹Ám78Òó#”(8|Oǽ²¡S r¿U<Cߣ°B(÷0/v^É6µ“ ºNçX°àú‰Þö_*q sN¬ ÙÖ+:9>¢Ó)ÏW1ažÿB¯OÞÓ¡?F¤di{xòŽz§®¨Û\Ð�àƒ2Àü Ü€edC„ÅJZ[ú}„ó´!½ôªg+7¥Çä%ãš+©¿O7tâ’N©¿ÿ̬êämè$BBF+¼ßÊžá-ËÆýwsÝšMé¬'nN]z{´O[<ê0šÐõõoÔ×nX¼BÊ€†ýŸÕ}ve¨lÔÇ,áûÏl¥(ÞÄiا}½1V†²ð÷�dÜ­LÈ&¨a½þ(ØvãÇüÊ|·†— ïS»ùÞ´%`Ùa±îðäë=¬¼´" 1�Àç±ËDnÇl¹•kÌlzFƒ´“‰;yìŽÚâV]òû–è½5ô{±“6ðA[–‹5€]¤öö²%jÁrƒÆ��Ÿ‡.\g¾è‰Ë)»wv(Ñ{UؽyÜ%²ÿ QçgÙ4Ï^·K•GУϋŒ»ì8�´%`°¸-ëRþ¸ïFÀ΋`÷¤w…;hƒåƒó� ãAË„¸vú‹`d˜GX\}¢ÞÀq3µ£z¯žà@[– �äU�|ŠË„,`¡®C><ç[&4ê·©içXØóÖ{Ÿ½‘9j;ÔME…þ{}¸Æ:ÏøHÝV“Zýß<W(ž³÷´xN›'¿fóÖÒí;lüùgéè<‡íäˆ:2ªb…ÅÉX‰ý·êïr ‘€Mƒó�Ë„� ò*�>åeÂlà™¸çŽÐÐÂÂŽä²ÑnW¹“•ììßËh³?b!ÀÝ¿“+9x¾-Ù”4†Í–E6Ìj~vC«ÃbWͳ£#¯D°˜• w$ŒFXXbÿ#›Ú°Œ@X�ðÀ ¯àS^&\c¼ä<]ªâzTX×êM@‹æPð |Ï‹çW0¡+Txîàí$‚©ÑêÑPÏ÷È]¡à´%`°�àA^Àgi„#s(ò×yií×ÔªrAª!,fÓ1žtÅMË v“J¨­]¡xÄ£#Ê!,@´%`°�àA^ÀçVÂ"ÝtÁÂÂsI²(£ÿâ]½ÍQK……l¾Ê{%Ÿè|tèŒXXÔ=ãÄÌÃÍQ!,@ ´%`Ùa±L(M�>µ„…6²oü^}-dÎEZ¿Ëy*<‚ë",ít~Ú§So®„2êyÂw0‡b6Q¯7rD/;{HƒØÞA<£ÑÈ„‰{ž¾{¤ž`çJ4éðäõNÏiÜk˲¶3õgjHœõÿÓ¹rÍ[l"hKÀ2²!Ââî”o Ä=Lïœ!ì6 ÆÜ8D˜&ÔÒϰ‡ô:å~oR7é¿9÷xf»€›¬È}úˆû÷‚Ç¿ � £¼LðhÁ@܆žR«÷’ÃmYfûO#:l]·Õ¦îsÞêSâ^×B„çIì¨sõ,^ýIþr]/ßݧQ:ÇÁ}wp¤ÂÅA„ƒ¹GÕ»ÇÇþyò¯²†:çvbا}%:̤l% G”œt¨É×--2¾{uû'Þ9F-6Î�,̵’j˜:»oèŒ÷’°Ë6JV ±ë ç¦°§MY3ÝݶÑÐ…^Æ/ÄÖWg¿à^ººˆ/ð( 1�Àe€ùA¹Ë„EŒ¹6Pâaé#oHÜ\/%àuзÀ„¾ÁLѽ¶×Ír/¼W¨ˆxÐ�àƒ2Àü Ü€ed3„ÅCo ¤ÝšÊü_!,v?áïeÞWÔ㉹xù‡ò~þíûo”$¼jÉsêžô7„Ï©û•;r¢ÝÃgÕN/�@Ê�óƒr–‘ ޱ¬…Å}o d&Ömí&tYhd‹�ÐÏŠu……u}’•CâÏuVÉÅKF=Ò]a,VvþBgCžÈ/~È© Ø3jþPïæ4³KV:±×@)ü]��(�ÌÊ XF6@X0".ÒUC‘àzTXU(]ŸQwûçâùš"±†‹¹…°Hïe1Ð1#L,^zÔÃÆ…G8:ÔÑâÀ )gÄFÞÇ+šüS»{¹ÆÑ4åy€Íe€ùA¹Ë„Eìz™°`ÄÀÎ_瀟KU) •®PÑx9£WçÔßy)"%",œçÑ+•`¹ÃÛ€Æ��” �æå,#±ëUÂ"º¼¤—£Ëü(FŽE‹lÉÄlää6ÂBé$=úðŒö»/iG¯¯ÎXðßÓ¢`Ô”‚Æ��” �æå,#",î{%žcð–z®¨àÉÒ÷Ár²‚uaºór³výs{¡è¹Ba¼ä½Þ„vŽ…Ì£°ËèÚwÉZ뼡ïLÛ¸b Ä@c�€Ê�óƒr–‘ 2  ®ëcá(ÙIÍözvŸ?¢!,hƒ¼F«K'£‰Š!¿Až3i;%ˆ—üªT‚Þë¢é +,šÔjIú¤"ÂÛ4«BÕ‚Ó �2Àü Ü€ed„¨†W²zI;žŠÍ±�‹�y�Ÿ;•‰tùðÐa\FUòÒå#ê··K\n(m XF ,€jã~§d¯¬de…&h/äU�|n_&œåÃïEX˜åÃO¶©srDû;‡trÄ#ÔwÖ•T…ÂÜ´%`°Ø`Lœj›mŒ3§LT°‹µX$È«�øÜ­LĽX <"’¼§®vûdWØ#JNÇwwû¬\$€rЖ€e€y� �æm XF ,�x`Wð©U&ÒÍIy• ü„&×lÝ[añžÆ¼bŸ^hc'ÛOÈû;u4_ÑhÊnŸW4õ©Ý|F­ö jòµœ8±®PêyÃcj{®P¼F¸ð‡³XHë¯4™|AÂ÷«ø¹ÂBþÿäɵ’/éµôœ™Mi<h›pêø¿£±Ž‡¬ØÇ¿7_ÒIÿ Û¬5œ¯�X6 ,�x`Wð©,<l÷)5vºœÉ*véÊw֘ߦ/ù-÷Z‘`VÌ3˄vfžïéJzõöãqŸ“!+í¥K™+f4xyªÂ鎤|§Ëä…$ΜµpÄB¯>è ïÜüýVk@JLͦCê4Ôà}‡ô}òÜÙ%:»‘Á:‚¶,#�<0È«�øT• 3¬h!‰Ð*<wŒy#bKs×Lj•,l³É1õFèÿ»äÞ }î ÷Ü™ìí,hþdañ”ZÝ2‚6…ªrÀc�aÀƒ¼ €OU™ˆXj v#:µó$+,ì£zô€G0zoht•ø³é˜NOºâ¢uKa¡ÿ_°7»t%ÇEʺˆum XF ,�x`Wð©*fÄâµ##U¸ íP»ŸÐè|èó‹2£Ñ¡Ñõ® Fæ>4ÛÔO>Ñùèð#"&ä^ã f.ç`ñ”cDXwЖ€e€y�ŸÊ2açM¤¯WŸ¨7à|3bðd»Omt»ç"2Øè¿š‰Û’2æßÓqïÿCzbö]……BÏshÐÍ©cÅÚÈ·s,štxòŽz§J<è¿qD€w¿; Ábc"ûu<¥Vï³™�~ýõ;ïiò}L½½7t¦ÓÅ=ëÚ°Œ@X�ðÀ ¯àS§L̦Ÿ©—®°¤ p=‘ùÊùíI«O‰wþWš\ Ä i›ÚƒSêï+Ñ¡ÊÇä™ÉÛ|ÜU\È$n0†+ºèó Rêù¼WаOûJ|è•¡”`aÃiF-œû-ê}Nèp‹Ã|f„ÄlJg=wU,Yêæo4x}L'ímý¬FËŠ °îð÷`Ù€°�àA^Àe€ùA¹ËÈZ 8Vå��d L�0?(7`A®��ð¨À@`~PnÀ2‚\ ��àQÀü Ü€e¹��À£ €ùA¹Ër%��€G�óƒr–äJ��� $�æå,#È•���H�ÌÊ XF+��<*0�˜”°Œ W��xT` 0?(7`A®��𨰄Žù�– äJ������À°�������Ü ������À°�������Ü ������À°�������Ü ������À°�������Ü ������À°�������Ü ������À!úÿæ²Bãd����IEND®B`‚�������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7s.png��������������������������������������������0000664�0000000�0000000�00000075627�15030617045�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��c�����ÚÊs4���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��{,IDATx^íÝßk$Wžç}ýs!tUº©‹Z3`êBsSƒÓ? òE5k=¦ÖP0BÚꩆA·=»“¨(ÿÌ#RØmz{Š'IÆÞF¬\;rÏ#’ªÑ”ÅÚM9Û.äDËbLSlL!¾O|#ãdFf„23B'#ωz¿àK•2S‘©oœŠ"2rF�����…#Œ���ÀÆ����` c����0„1����˜Â����La ����¦€0����S@���€) Œ���ÀÆ����` c����0¹ÂØÌÌ •R����0®Üa ýè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =M{DM§���à˜%ôd4íÑÉÉ Up16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³„žŒF›N16��ÜD³dò=9“ÓÖï¤^]‘¹ùª<‰n;¸-‹3WäFãQð•ÛcÓ)æ+��€›c–L¼'÷d}n&|žGÂØwß}Ö¸²†±ãÝŠ\ÒŸWkö©=x4ð˜c9¬½Ü¹ßÔrM»÷·¤Y¯ÉæêµÞý³ËRÙjHóÁ]ymcWŽû–WÎÒŸ���î!ŒYRHOžHu>Ý06]­VK®^½*Fc¬P¦=J C«}(;Ë2«AjaCvÚÉÇíHeáy©ì~»m_ja»&«›uišï;jJ}sU‚å]ªÆ���0=„1KžÖ0¦?·Ö8¡L—FÖñ®T.užgözM´s µåW¥vx}ý¥ìVž Y®×þ í¾Çj=’µWd¶ï(Zy«± ��€Ìc–҇Ø©a¡LïO #KÃØåËêM=Ò5+ kwå°/õ‡±vsS®éë¹¶)ÍDp‹ª½/›kïÆ���05„1K&Ó“ÇÒºw[VÂ÷ŠÍÉâßþmçÿ&ŒÈÁG[²¾xEVÇáwœÁä£íuYœ¹)ÖçÒX_ _ÛÌÜ Ù~øg9míJuåJç¶Å Ù;ù!ü>]ÖýÛ+2Þ¾.Ûõ·¤úQg™çI c¦ÒB™ÞžF–†±g*²ûå§²¹|9XÎeYÞüTŽº‰‡±#Ù­,„Ïeõ4Ä£¦Ü­D§KjÍ.ËÆÎaxÔ­}¸+>^—Íú{²º0+3 ?•»ÿýãÔÛ뇟Kóî†,Ïš~?ÏÆÇAÀÔŸãRt›Ö‚Tv‚çïýL33—d¹v|}CJ¿���î!ŒYb¿'åáö ™ CÔãÞ׺C†±'rÒ¸í ÏGaìX+óÑmAx[oHëôLÎÚ ¹¡!î¯þ/Y«)'ggrúðƒ0ØÍ­ïK>“Ç{·dnñ¶ï\ä]YÞy†…1SñP¦_§……‘eÂØ±Ÿ»²¦¡f暬ÕD§ ÆÃ˜ 4ÙCËùõ…ÔWŸé¾g­û.¯éѾl^Ó×£?ï¬,TþYöõÈXúnŸýòÕÿÜÿ\ç=níR_Ó#~&xµdózpÿ3²Zÿ¢÷Â÷Å=û™Ç/} ���paÌíÉ믿~á2:jN–¶ö®’˜ršâ“ƒªÌwØúFöÖŸ ^ÏMiœ˜s£?½Ñ,k¥!'r*ÕÅα½VðUºÁ×ú_þË îqJC™þ›FV,Œœ´åhÿNç¨ÒìuÙÜo·ƺ§=F_k _“yÎd³ùUìûÒnoK«¾„-s›ùÚ„±à1z ¥¼îóEvÚåÒ¾��À=„1K´'z¤è¢ÕaŽz-Jõ Æ cQ°ÊÆÌ%ò58éµ-ùè@oí7øZßyçðç§4¼é¿iaadõ…1­GrXÿixEÄÎ%ï cQPš™•k›û™" ¯Kå'ÂØËÝ÷­uê¼Ûµ‚PÙlH-º²cïȘÞ]`¤{tL¦«¹}­���paÌ»=):Œ© ™•ÃAʪ÷Ï=J¦4…¡dHiÓÇ)ý:-,Œ¬DÓ2§óϳðcY^BYxÌ‘¦àöœG’’¥Á©&« —daµ*µú®Ôõ=\yعìþªlÖò¯õŸË¥¾0¦ÑÓ;GÇö÷7åÚìšÔ[)—õ£´ï���paÌ»=‰ÞâøiŠg­mYÒ1‘0sú0ºðG|IÃÂX<„z{ZXY©aLË\Â^Ÿ3xÌi~ç^Ú>¨£OåÎÆ¯S.“ŸR­º¬ÎÎÈìj]ZámÑ5r…±èÈ],\u>Üz ŒuŽpá™Øsg/í���ÜC³ÄzONïKuq.Xî’¬7ÊéY[önEWFÔš»%{Ÿ¤„6óž±—d»õ}x‹œ=”í¥`Yá÷DÑîñž¬ëE=–¶¥u¦G⪽ÇËŸƒ@÷£þǧH ci!ÌÐûÓ¨j?¨ÉõÙÁ÷cEÕþƒÔ®ëûƒPïB—e¹R“ÝÃGÑ}äp·&•ÕŠÔ»·¨Ãš,¯½ógz”ì7R ¯êx]6koJ¥¾›!ŒE·…§WÏß½Jã%YÞüGÙ¨4z¡Ë3ûè.7[iß��à˜%“èÉÙÉ}ùÀ\š>e·vëò÷óWd¥zWöZ߯®¦Ø©ù_Vå—z´«{Û¢Tÿm¯s¬{ÛMiÜ••î×Zÿ·üÃfUªõÿÚ½ìýÜÊm¹×Ò«8ž/Ɔ…0C—ίø%Ý;•z¹ú0´˜Óã·7¥¾U‰]B>¨Ùe©l5¤y”唿Ø)‘3×dõNCêÕ‚ÿAïç?•忈-ßáÒ£yÑU÷Ý®§<š èUWß–ú›áç¢Í.¿);}ñ+inÏsÁÓ-õù��à˜%OcO4| íQZX Î«‹]¸Ãó��ÀM„1KèÉh„±,Õ–£Ý Y¸À…;L16��ÜD³„žŒF]÷Ç™Sõâwä(åqYб ��à&˜%ôd4çÂXâ}]é•ú>µIU÷¢úÞ´9´pi~ý���à˜%ôd4íQZX &[ŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒM���7Æ,¡'£ƦSŒÍòÑuJ_˜œ´~S“/�Ó—k&2“èÉhÚ£´°@M¶›åÃ\*¾˜G“Ř.¾Ó€rÍD&p=_¶Ó)Æfù0—Š/æÑd1¦‹/Æ4à†\3‘ œDOFã—ítбY>Ì¥â‹y4YŒéâ‹1 ¸!×Ld'Ñ“Ñøe;bl–s©øbMcºøbLnÈ5™ÀIôd4~ÙN§›åÃ\*¾˜G“Ř.¾Ó€rÍD&p=_¶Ó)Æfù0—Š/æÑd1¦‹/Æ4à†\3‘ œDOFÓQÓ)”‹®Ó´+jrÅ<š,ÆtñŘÜk&2“èI¹±~áv\‹/¶“Ř.¾Ó€rÍD&p=)7Ö/\ÂŽkñÅ6`²ÓÅcpC®™ÈN¢'åÆú…KØq-¾ØLcºøbLnÈ5™ÀIô¤ÜX¿p ;®ÅÛ€ÉbL_ŒiÀ ¹f"8‰ž”ë.aǵøb0YŒéâ‹1 ¸!×Ld'Ñ“rcýÂ%ì¸_l&‹1]|1¦7䚉Là$zRn¬_¸„×â‹mÀd1¦‹/Æ4à†\3‘ œDOÊõ›öÌçr™¾¾´+jråú˜ðcºøbLnÈ5™ÀIô¤ÜX¿Ùù¼såúúö¹·¾Û€ÉbL_ŒiÀ ¹f"8‰ž”ë7;Ÿw®\_ß>÷Ö×b0YŒéâ‹1 ¸!×Ld'Ñ“rcýfçóΕëëÛçÞúZl&‹1]|1¦7䚉Là$zRn¬ßì|Þ¹r}}ûÜ[_‹mÀd1¦‹/Æ4à†\3‘ œDOÊõ›Ï;W®¯oŸ{ëk± ˜,ÆtñŘÜk&2“èI¹±~³óyçÊõõíso}-¶“Ř.¾Ó€rÍD&p=)7Öov>ï\¹¾¾}î­¯Å6`²ÓÅcpC®™ÈN¢'åÆúÍÎç+×׷ϽõµØLcºøbLnÈ5™ÀIô¤ÜX¿Ùù¼såúúö¹·#ë¨)õ­Š,Ï.He÷(¸­-G»²0sY®×þ í´ï) ØLV©Çô¹5ݱ͘Ük&2“èI¹±~³óyçÊõõ}ÑÞïVäR° ]ÎÌì+R{ðhà1ÇrX{¹s¿©åššû50Õª²º0Û½v¹"[õ}yPß0DÅ—7n}!õÕg¢eÆ|Öl6£ÿGû›Ö÷¾:Þ•Ê%3&χ5Yï7õ²Ô£û[Ò¬×dsõZïþÙe©l5¤ù஼¶±+ǃ˛hÆ�Û¿èßL˜ÀIô¤ÜX¿ÙiÏÒv�|(××·•Þ¶egcYfƒeÍ,lÈîQ;ù˜£©,<„¢/£Û‚Çf­ÂVe³Þ”£îíõh'ׄ¨Ør2Õ‘ìV,,Çn± ÈFûõâ‹/ŽÊÆÓäpçMYžÕ0õ\llÆëË` =/ •h|u´/µp|^“Õͺ4Íx×?,l®hF.Ul…1 YwdÓ¡ñ›VŒiÀ ¹f"8‰ž”ë7»ñw®Ü+××·µÞÆŽ4Ì^¯Éƒöàc¤¶üjïÈB΂ –z4-¨ö¤výª,×’÷]„±2Ð~™'”éãÒúž^fŒË?÷Èq¨áì¹àñçz$j¯ÈlüèïE*œúG €ÑrÍD&p=)7ÖovÚ³´�ªÈõÝh4ÂÕwÞyG>ûì3ùî»ï¢{Îg­·Æ.ÿXVoêƒYYX»+‡},ƾ’ææ áã®mîŸ{JU»ù¶¬ÆžzÚ¯ÁÊôþ´¾§—Ž‘çeyõ•ðˆÖÌÂO¥~dýa¬ÝÜ”kú¸k›ÒLüÁ!ªö¾l®½o!ŒEÁαñ›VÚs�Ó—k&2“èI¹±~³Ë¶såV¹¾[­Vø|ñzýõ×Ãöõ×_Gê§I{Ý™KÃØ3ÙýòSÙ\¾,÷²,o~Ú;µ+ƺGÑlïdê)Ž¿‘JøüÁò^‘ÕðÿÑó´e÷}}ZðÚÌÎõᮼžZö²ÔšŸF§Ÿß;{]6÷¿XÞàŽz¾ÒeMÞrrð[Ù^_’ùjSŽï¿++sÚó9Y¼uON΢‡¶ä^uEæôçÓš[‘Û÷O$¼ûìD>Ú’õÅ+²Òø\Z[²>.øzûs9íûÞ%¹µ×î|ŸÒïý`=z|P‹ëòÁA´ÜŒÂï?§ÒB™ÞžÖ÷ôÒ0¶Œ²¿y=<ÕvvùŽìwOµ‡±ÞQ4{§!êüX6Â16+ «UÙªüBÞ?ü_Q‹ÿ¼Áý÷ƒÞÞüu÷tɵ»;²sÞØ¾T‘óÁrDZ΋;Ó+õþÙå7e'ã8×ï0}¹f"8‰ž”ë7;íYÚ€UäúÖ#aú|çÕÕ«WãfºójŽšéíi¯;s™0v¬;we-¼ G°“XùŠ…±î…âD¸hAlÿŽ,Ïšh¾ÖçÑ0öeìB"—¢V}M—¢ÛtG¸¾ÿ§ý &×õû®>/«¿øXÛ½e֥ͮ•úüã—>ßÄ4d%ü¹´–d½ñPNå{im¿|ý¬¬ï}<èÙ[6J·åàô,ÈO÷äÖâœÌÌWåàÉ“`7£ïjñ–4ZƒõH7®„ËXZß’û'?îsÙ^ n›»%{ƒ¸>æ¥è9gmÙ»µ|ÏK²Ýú^oɤû†T<”é×i}O/Æ4¬?úÚà‘Ýx3ãÅŒŸÁeå)½ÐÌÕØ{Òô4ÈŸuçEç9ææˆrôs/lÈÎþV0Vgå/Ìm£Ævtd¯7Ž£e†|hÅz-oÌÓ-õ±�¦/×Ld'Ñ“rcýf§=KÛð¡Š^ߺSªÏ9N½úê«á¿i¯;sÅÂX/Ïcvò&ÆÂ÷Ö\8},yšbgç6¾3m®º-ÑŽì%óóeŽæYx/Ðàz°Y}¢@6_='ÑMOª2?3/+ãà«(Œ-mK+<d}†1ýúLïÝ’¹îã• i‹R=£VàTª‹Ám7¥qòDÎZÛ²4ðº:5'KÛ»GÇ’÷_¼ÌøOë{zŘ~}4xdwÂa,W–6¥ÞÔyÒÓÛôõè’§ø&ÇöãXO©¼6Û7®;-ÛUµç�¦/×Ld'Ñ“rcýf—mçÊ­*z}¿ñÆásŽS“ cZä°þÓΩOá…~ß c­º¬†G¬^ÍæWýËÉ[QÀë?}lœ0fSl+ÄÈ0f<–Ö^#<¥1Ý0–öøQaìûÎýæ(™f¼Ž*=%לª›Ö÷ôcAõŽìj ù½<è†1܇¿×1[™ ‚èÏ WgüPvc§žÆ’ðBa,þGŒÔ¹4¼ôõ˜¾\3‘ œDOÊõ›ö,mÀ‡*r}ûí·c‡±_ýêWá÷èÿÓ^wæJ„1­V÷}83 ?–å… ”…g;µ„±¤‘aìLN[ Y_œ—Åõ-iìÈž†*a¬{*äÅÅÇmZ™fèmi}O¯dë;²Œååç¢ñÒ–V}­3ž‡]À#ség–½×{obì2ûcú³†ŸOfN)6söY­-gtéë0}¹f"8‰ž”ë7;íYÚ€5©õ­ÁK¯˜¨çÐQ}?˜–9Úu^écôû ½-íug®Ô0¦ÿË/ðt¯JwÞ¥íÃâ÷dãý1O•2GÛâ;Éæ¯þ„±ô0öxOÖçfdn}O‡÷F¡êBa,všâÜŠT﵂{;ÎÚIåƒÞiŠã2cw°C˜¡÷¥õ=½Ò˜– )ú\±ñÒSCNã;úTîlü:åãFUðœæ³÷¢q6ù0Tø>±ËÂBðXýyõëïšÏý¯ôû�L_®™ÈN¢'åÆúÍN{–¶àCÙXßz± ÝéÔà¥G¾4PérÍ•5\i83ÕûÒJƒšyœ¡·§½î¬Õ¹èÅ9§š÷sõžøiŒÁÎ_m·w)|½º[mCV_¼<þ°2¡Ï\¬à«ÞòÃÒ¿ôÿÏèÈFüˆœ9J{íf‡{vMê­èªzia/géë)‚ E½°eÞ½w+ ks7Ò>Ó£d»RÕ qÌÜíÆ»RÝû?ý—1x½×Ì\ £{‘Óû¨æV¥Ñþ!úžñ .ç¼fècÒúžZáØ|æœ#´æÒòýÁ'~ãr¥;­0Ó»5©¬V2\u3Lko÷ÆTôù{急ãõ_ä ösÙØýâœ0fŽÚÅÆöXã¸ó3^¾àÕ!µç�¦/×Ld'Ñ“rcýf—içʱʳ¾ãÁË\@w@õÔB½bÜy—©7Ò.âaNK¤÷¥½îñËYê=Wê{MÂLsš¢¹]4d«²Ü9õ+ªÙåŠlÕ³ýe>¬¾Ktëñ¶¤öó…hyÿ*Íp'6ö:V‘ŸéQ‚îm Rùm½sä {[ wß‹.8»­ïçÈVºŒIëÑŠ½æ•»rÑêÝ6_½'Ÿoßè^š~ýƒßÉÞ–­+²r{G¯G»âß“ €™ÛôˆÙ¾4Væn;–Ä%ó-\Ú~T3ô±i}¬NÐ1¯;¨ø¤niÈ!qêä¨)õ­Jt*cTúG…­Fxվǭy¿ò Ùê.KÞozËè» È“zê\3GËb·'ÆvÊ8ÞèèYüö¨²\â^`úrÍD&p=)7'Öoßç™ÓÜ¥=KÛð¡F­oݹüä“OÂKΛS õ_ýZo¼ÒÄß76xZâ Ÿ{ëkè§ãyœf0¦³TìuJ{},€éË5™ÀIô¤Ü¦¿~ãŸ/HqO•E_kÚ€_߬ôÈ–¥2ÁKb™à•e‡s=ª¦ËN;-qϽõµâcö1¦3”¾_ìµ×¢Ÿˆß§ï™û…\ó;ŒiÀ ¹f"8‰ž”›+ë7ùÆüâèéFãžr¤|ܹúãÿ(üqøÚõgÕ5xé_ù5,éÏn>xÙ6]öy§%ò±·¾—+Û€²bL[染ìhîÈÊÛ²;æ)—ŒiÀ ¹f"8‰ž”›+ëwÚaLû 5N(ÓÇ¥í�¸R¼þÇÿøR«Õäoþæoä/ÿò/ÃÒÿëk×Ó'¼.ÊõÞv¯þ—ó*Ëg"M»ôõbr´¿i}/¶’ï¥L­Ô÷©Xç½÷-~A1J¿Àô嚉Là$zRn®¬_W˜©a¡LïOÛ˜FýéO O5Ôàõw÷waèÒ×§ÁKoÓP¦áÌ<^ïs™K½}ZÊõ1á;ÆtñŘÜk&2“èI¹]tý&¯’Ö“Ûç«÷åÏÝËTwn›[yWîŸô.+cýß«ŸItþûÊÎNîËëKÑ}s²¸þ¡DË=;iÊíð9õö-©Wß’NÌ'õ¤…1Si¡LoOÛ(¢âÁë¯ÿú¯Ã×¢Áë­·Þ OCü÷ÿ÷Ôï3¥wÙ4{û´–ëcÂwŒéâ‹1 ¸!×Ld'Ñ“r³²~OïKuq®Ä:ô3„~)7ä,ü0× ¡ìT~“½ Y ž÷Ü ˜Ï$ê=Æ|&Qì1í†ÜXº%Vô©E'÷䖾ޥmiég ýUôœêÏrPýeø!°ƒ†…1SñP¦_§í�Ø. ^ÿôOÿ¾¯ë'?ùIø¼ú¯~­· ^i¥ËpYQ½¥zåú˜ðcºøbLnÈ5™ÀIô¤Ütýæ©~ѯÆ?DU?hõæ/eïñ™)* cÝj ¿Æ$ú�Øóc>ì5íõ½$ÛÜ—ê¼Û–½(¬ JÿÞáe‚[Ú€Òe‚—ù2ÁKƒYÚã³–.×e“ì-•^® ß1¦‹/Æ4à†\3‘ œDO0–¾£_grzð–Ü0áË8mÉ^C?Ol.W cÇᇻέïIzÔÒ#a? Ÿ'ü�ÙíßvO_4Α1-ýŒ,s™ö´�¥ïñÒà¥ïK»ÿ¢¥¯Ýe“ì-•^® ß1¦‹/Æ4à†\3‘ œDO0=-ðÙ`¼üHª÷›²½ôÙn}Ý÷XZ[²†¢†ìýñžTç턱™¹[£o©‚çÝ»{¯ZðÚþÝ×3*Œ™f®@¨·¥í�øPúÚ]æso}-×Ç„ïÓÅcpC®™ÈN¢' »¾LÇLç}[Û;ïõzVÖ÷¾ ¤* a¬wšâÜÊm¹×=ñi7nËÝ ¨‚×ÖjtŽÈõ½¯­ã¼06 ½/mÀ‡Ò×î2Ÿ{ëk¹>&|ǘ.¾Ó€rÍD&p=ÁØÎÊö’ž‚{X¥:WB¼"7ôbz´êÞmY™ ÏÊ{Ò¸ý®ì=~¶äûÊfoËÁé“ Lõ_QCÚz}Lt›©¹ iŸKãÖ‡Q DI;­q0Œ }LÚ€¥¯Ýe>÷Ö×r}LøŽ1]|1¦7䚉Là$z‚ñ™ y œ:xú¹l› µ¸.Ü¿'[ÚæVäöýciw/[ß©ÎѰÞU5È­ÜnÊñýªÌßS­ÿNZ§º|=âiñKÛËGÕ·¤^¯v‚Ÿ.£º}_?ÆF…0C›¶àCékw™Ï½õµ\¾cL_ŒiÀ ¹f"8‰ž ìôŠ…ã„0Ãç+×ç³Ï½õµØÆOcºøbLnÈ5™ÀIôèçóΕëóÙçÞúZlã'‹1]|1¦7䚉Là$zôóyçÊõùìso}-¶ñ“Ř.¾Ó€rÍD&p=úù¼såú|ö¹·¾ÛøÉbL_ŒiÀ ¹f"8‰ž�ý|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3‘ œDO€~>ï\¹>Ÿ}î­¯Å6~²ÓÅcpC®™ÈN¢'@?Ÿw®\ŸÏ>÷Ö×b?YŒéâ‹1 ¸!×Ld'Ñ ŸÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&2“è ÐÏç+×ç³Ï½õµØÆOcºøbLnÈ5™ÀIôèçóΕëóÙçÞúZlã'‹1]|1¦7䚉Là$zôóyçÊõùìso}-¶ñ“Ř.¾Ó€rÍD&p=úù¼såú|ö¹·¾ÛøÉbL_ŒiÀ ¹f"8‰ž�ý|Þ¹r}>ë룊/LNZ¿©É€éË5™ÀIôè§s"-èøPÌg��P˜%ôèG��Ž0f =úÆ���†#ŒYBO€~„1��€ác–Рa ��`8˜%ôèG��Ž0f =úÆ���†#ŒYBO€~„1��€ác–Рa ��`8˜%ôèG��Ž0f =úÆ���†#ŒYBO€~:'|.��€I#ŒYBO€~:'ÒŽ:ùPÌg��P˜%ôèG��Ž0f =úÆ���†#ŒYBO€~„1��€ác–Рa ��`8˜%ôèG��Ž0f =úÆ&G_U|�`aÌzôÓ9‘t|(×ç³Ï½õµØÆO–ö—*¾�L_®™ÈN¢'@?i;µ>”ëóÙçÞúZlã'‹1]|1¦7䚉Là$zôóyçÊõùìso}-¶ñ“Ř.¾Ó€rÍD&p=úù¼såú|ö¹·¾ÛøÉbL_ŒiÀ ¹f"8‰ž�ý|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3‘ œDO€~>ï\¹>Ÿ}î­¯Å6~²ÓÅcpC®™ÈN¢'@?Ÿw®\ŸÏ>÷Ö×b?YŒéâ‹1 ¸!×Ld'Ñ ŸÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&2“è ÐÏç+×ç³Ï½õµØÆOcºøbLnÈ5™ÀIôèçóΕëóÙçÞúZlã'‹1]|1¦7䚉Là$zôóyçÊõùìso}-¶ñ“Ř.¾Ó€rÍD&p=úù¼såú|ö¹·¾ÛøÉbL_ŒiÀ ¹f"8‰ž�ý|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3‘ œDO€~>ï\¹>Ÿ}î­¯Å6~²ÓÅcpC®™ÈN¢'@?Ÿw®\ŸÏ>÷Ö×b?YŒéâ‹1 ¸!×Ld'Ñ ŸÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&2“è ÐÏç+×ç³Ï½õµØÆOcºøbLnÈ5™ÀIôèçóΕëóÙçÞúZlã'‹1]|1¦7䚉Là$zôóyçÊõùìso}-¶ñ“Ř.¾Ó€rÍD&p=úù¼såú|ö¹·¾ÛøÉbL_ŒiÀ ¹f"8‰ž�ý|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3‘ œDO€~“ܹªÕjaýÓ?ý“4›Mùãÿ˜ú¸¼åú|ždo©ôb?YŒéâ‹1 ¸!×Ld'Ñ ß$w®4€i{ã7äoþæoä/ÿò/Ãçûë¿þëðë·Þz+¼_§•¶Œaåú|ždo©ôb?YŒéâ‹1 ¸!×Ld'Ñ ß4v®LøÒ ¦Lƒ™4}-Øôk pzÿÇ>öOúSb9Ó˜Ïúº>ûì³è«á¦ÑÛÂê¨)õ­Š,Ï.He÷(¸­-G»²0sY®×þ í´ï) ØÆOV©Ç´£Å˜Ük&2“è Ðϵ+=•QמڨaLƒ™–¾N-ýÿßýÝß…÷é×­VK¾ýöÛè§™¼«W¯†Ï«¡ì»ï¾‹nMwÑÞïVäRôsÏ̾"µs,‡µ—;÷›Z®É¡¹_S­*« ³Ýûg—+²Uß—õ ÙCT|yãÖR_}&Z&aìi¢ýMë{¹kºc›1 ¸0f =úù´s¥GÇ4¨éÑ2Æ^ýõn@zõÕWïõ«_I£ÑƒÚ×_ý¤vèó˜ÒçÕç8>&íçÈTíCÙÙX–Y}Î… Ù=j's´#•…çƒPôet[°óجuBØÂªlÖ›rÔ½½.›«×‚×fBTl9™êHv+ –c·´çß'Ÿ|2ò qcéã]©\2óäœ�sX“åð~S/Kíð8º¿%Íz-§Ñý³ËRÙjHóÁ]ymcWŽ—7Ñ"Œ¶Ñ¿™0“è ÐOçDÚ€58Ÿ5é)„Ä4i0{ñÅÃÇipÒ¯ßyçð~}ܰ •F¯Ë,}®´Z½/íug®ØÎíìõš<h>æ@j˯övfÃp±Ô£iAµÿ µëWe¹v¼oì"Œ•öKç†Î‰qBÙøcú‘î¼)˳:nŸ‹ý¡ ^_cèyY¨ìD,êh_ja»&«›uiš?>èQÞÍÕ ÍÈ¥Š­0¦!ëŽl:4~ÓŠ1 ¸!×Ld'Ñ ßø;WîU–ù¬GÈ4Lé‘�ÝñÔ`¦GÒtZúµžz¨÷éÑ7}ìàéç…1- }ƒáNoO{Ý™KÃØåËêMÝI•…µ»rØÈâaì+in¾>îÚæþ¹Åo7ß–5ÂØS/>†Ç eÙÆ´#ÁòÏ=ÍöÕØ4œ=<þ¼#PäA홟Š{‘ ÿ(¡G” c�FË5™ÀIôè—mçÊ­²5ŸuçSƒ”†0ÝÕP¦áL—¯eNŒßv^Å’é×i¯;si{¦"»_~*›Ë—ƒå^–åÍO{Gâa¬{ÍvHÒS#•ðùƒå/¼"«áÿ£çiÊîûúþ´àµE;×íÃ]y?<šñ²ÔšŸFG<‚ï½.›û_,ï§R?L9Š—±tY_ØûÊôþ´¾§—†±çeyõ•ðˆVr÷‡±vsS®éã®mJ3qô7ªö¾l®½o!ŒEÁα?&¤•öÀô嚉Là$zô˶såV5Ÿ5¨éikkkásŽ*s”LÿŸöº3— cÇpîÊZxAŽk²V=ˆ…±î{qâïÁ¹hAlÿŽ,Ïšh¾ÖçÑÙ/c¹í\ëkºÝ6+ «µð”³öƒš\×ï»ú¼¬þâc9l÷–5»Z—Vêó_ú|“÷ƒœüV¶×—d¾Ú”ãûïÊÊœþœs²xëžœœE;mɽêŠÌ…=jnEnß?‘ðî³9øhKÖ¯ÈJãsi5nÉbø¸àëíÏå´ï{—äÖ^»ó}J¿÷ƒõèñA-®ËÑr3꬟ôJ ez{ZßÓKÃØr0>Èþæõð}³Ëwd¿û¾ÇxëE³w¢Î—e# ü:«²Uù…¼ø¿¢ ÿyƒùòï½?(lþº{ºäÚÝÙ9ï —*²s`ž#XÎ`àÔ?RÜéœ^©÷Ï.¿);ÿè ß`úrÍD&p=úéœHÛ𡊞Ï㬴׹ba¬Œ‚å‡G˜ZÁmcáé\ÁÎfß‹äiŠ«?š0¦1W]Œ¿–(¤;±Ÿ'(s4ÏÂégÚsssœ2ï!§ºN²Ò]ÇK²Þx(§ò½´¶_ ¾~VÖ÷¾ ôì­?¥Ûrpzä§{rkqNfæ«rðäI°ˆ›Ñ÷µxK­ÇAÈz$WÂe,­oÉý“‚@÷¹l¯·ÍÝ’½ÇAÜ óRôœ³¶ìÝZ ¾ç%Ùn}¯·dÒ} C*Êôë´¾§— czäôÔ×O³‡1Þãã碥ãïjì=izäϺc±3^Íø5§÷F?÷†ììoÉõÙYù sÛ¨?4DGözTˆ–iæi·ÑòÆïúX�ÓG³„ž�ýtN¤í�øPEÏçø{ÌÎ+ÝqÕ|=’¦_§½îÌÕÆ´Éaý§¿¶‡ïÅù}/Œµê²±zA6›_õ/'oE¯ÿˆÅ8aÌ<¦Ø0¦G%Ç-óÂqªOÈæ«ò$ºéÉAUægæe¥q|…±¥mi…‡¬¢¯Ã0¦_ŸÉã½[2×}¼2!mQªaÔ œÊAu1¸í¦4NžÈYk[–t½'jN–¶vŽ%ï¿xéØÖÓúž^±0¦_ žf;á0Ž+ K›Roê-úïïcz›¾=›|¿erl1Žõ”Êk³}ãºز]•Q{`úc–Р_¶+·ªèù¬Ï—Vñ�§÷¥½îÌ•cZ­î©_3 ?–å… ”…Ç~LåY+ÄÈ0f<–Ö^#<¥1/Ý0–öøQaìûÎýæ(™f *ßzAýZßÓk ŒÕ;ÍVÉïåA7ŒM`Üv/¢?ƒ^ñCÙ"x~K …±øåÔ¹4¼ôõ˜¾\3‘ œDO€~Ùv®Üª"ç³Ù5u^�‹³ÖÛÔ0¦ßÙìžî…λ´}xªã{²ñþ˜7GÛâ;•fG“0vN;“ÓVCÖçeq}K{²§¡ÊFëž yqf<ŸW&„z[ZßÓ+ÆúN³ ÆÎòòsÑxiK«¾Öùã° xd.ý̲÷zЉ]fâaLÖðóÉÌû;ÍPž‘ÕúÑrF—¾n�Ó—k&2“è Ð/ÛΕ[Uä|ÖSÚôÂzµÄq?HÚVo;½8ç´Có~®¾À?1Ø®íö.…¯¨mÈêkƒ—ÇV&ô™÷Ç|Õ[~Xºsù?£éø‘ s´#öÚMˆ›]“z+ºCZØËY…‰Qaìñž¬ÏÍÈÜúž<ïBÕ…ÂXì4Ź©Þk÷vœµ?’ʽÓÇÕYÉ a†Þ—Ö÷ôJ cZ&¤èsÅN7à9ïèS¹³ñë”ÏÚUÁsšBÂÒäÃXPáûÄ~, ÁcõçÕùx×|ûx¥ß`úrÍD&p=úeÛ¹r«\ŸÏï­9²ÔÛIN=½)ügsš¢¹]w>²ì ǯ7»\‘­z¶Á°ú® §aØ’ÚÏ¢åý«4»WSŒ^çÏ*ò3Ý1íÞìôþ¶ÞÙYíÞÈÝ÷¢ ŽÄnëû9²•.£&õ–yXôÞ­(¬ÍÝhHûL’íJU/Ä1sC¶ïJuïÿô?>\ÆàE@Tô^3sŽîE>â= jnUí¢ïßàrÎ a†>&­ï©þ¡à™sN;4—–ï>ñÓ—+µØi…äp·&•ÕJ†@ÓÚÛ½€}º¹ÀF'`éþEj?—Ý/Î cæ¨]ì cýQ¡ó3^¾àÕ!µç�¦/×Ld'Ñ _¦+ÇÊõùìso}­"ÆDçˆV,ĬܕƒðˆVï¶ùê=ù|ûF÷ÒôëüNö¶4h]‘•Û;Òø{=Úüžü[xÌܦGÌö¥±2?pÛ±$.™oáÒö£B˜¡Mëû`u‚ŽyÝAÅ uK¸¾8 urÔ”úV%:•1*=¢´Õ¯ZØ÷Ø¡u ïW~![ÝeiÀûMo}ùoROýÇ9Z»=ñ‡†”?*„?otô,~{TY.q¯0}¹f"8‰ž�ýtN¤í�øP®ÏgŸ{ëk±ÏfÜf0¦³Tìtá”÷"úX�Ó—k&2“è ÐOçDÚ€åú|ö¹·¾ÛøÉbLg(}¿Øk¯EŸ¿Oß3÷ ¹>æU#Ó€rÍD&p=úù¼såú|v¾·æ‚ÁëVY.Ã=íÒ׋ÉÑþ¦õ,óÏÉ v´wäNåmÙó”KÆ4à†\3‘ œDO€~>ï\¹>Ÿ}î­¯Å6~²ÜÓÉ Û¤VêûÔ ¬óÞû¿ºé¥ß`úrÍD&p=úéœHÛð¡\ŸÏ>÷Ö×b?YŒéâ‹1 ¸!×Ld'Ñ ŸÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&Nf› ìrï|†JtW×qúåxÓ–ì5¶d}q®·œ•ªÔ÷J{ï¶Üî~Ø¥}ú\�ztN¤í�øP®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&NrŸ4åvø–s²X½D´Agrzp[oËÁ©IkúÁ—N[\—í½Vô}zûžl¯/Ë[”*a (ŒÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&Nz÷>øòŠÜh<J~àäICVVr})§÷¥ªAlnUí¢cÎIãÆ_õE³ŒÐÏç+×ç³Ï½õµØÆOcºøbLnÈ5'=5Œ]Yù[ùÛðtÃ%¹µ×îd}aì{im¿<nN–¶&ƒ[ä¬õ¡Ü"Œ…ñyçÊõùìso}-¶ñ“Ř.¾Ó€rÍÄIO` cÏVïËŸ~ +s323wC¶>Žî ÄÃØ“©ÎëQ´Éž†8 5 ŸÏ;W®ÏgŸ{ëk±Ÿ,ÆtñŘÜk&NzwÂØ<‘ädoCƒç›Yܽ“èÄxÓÿëý37¥qò$¼{بý|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3qÒ¸ÆÔcy¸}Cæ‚çœ[ù@êE;c€ó|Þ¹r}>ûÜ[_‹müd1¦‹/Æ4à†\3qÒ¸?ŒÎÚ²wK¯ˆ]ò¾ c÷d]OeœyI¶[߇Ÿ6j@?Ÿw®\ŸÏ>÷Ö×b?YŒéâ‹1 ¸!×LœôN„1uú¹l›KÞ¯ü$(sodoýÙðöað˜46j@?>—Ëôõ¥í\Q“+×Ç„ïÓÅcpC®™8é œÆ”¹„}ðü3Ý0¦WJÜ–%½í¼KÛëç=¼+·?J¹L¾%lÔ�…×â‹müd1¦‹/Æ4àÃØÒn¬ÊÜÒ¶´R’ÓY»!7ô´ÄXÓïé^ècnEª91ß{v"Û²^¹×»mب( ;®ÅÛøÉbL_ŒiÀ n…±îeêM¥]®þLNnÇNS4‚Û[¿“zu%¼Ø‡YÆÜJUê{-™ôEï'Ö� Û›´+jrÅ6~²ÓÅcpƒ[aÌcô@QØq-¾ØÆOcºøbLn ŒYBO�…×â‹müd1¦‹/Æ4à˜%ô@QØq-¾ØÆOcºøbLn ŒYBO�…×â‹müd1¦‹/Æ4à˜%ô@QØq-¾ØÆOcºøbLn ŒYBO�…×â‹müd1¦‹/Æ4à˜%ô@QØq-¾ØÆOcºøbLn ŒYBO�E·7Tñ…ÉÑþ¦jrŘÜ@³„ž��þ¥Š/�ÓG³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ôÄ­V«¯���€I"ŒYBOŠóÝwßuÓgŸ}&F#¬wÞyG^ýõ°®^½®“,õꫯv¿ÿÅ_LܯË4÷›Òç4ÏoJ_“¾6}îx,­½»R]¹"óÕyÝ:}(õ¥èç¼"+·›rrÝ��€‰!ŒYBOìøöÛoà óÉ'Ÿ„Á&|L(ÒŠßnB~ i_ýu´D{Ìk‹—yñ|½&ä™àÖl6ÃïÕåãLïÝ’¹èõô…±³GÒ¸±(7äì¬-{·4”½$Û­ï£���`Rc–ГñiPÒ0/X´‡æèÓ`pÑrëHÓøÌëÿ¼Zæè…‹ÿÌ“úYŸTe~ Œun#|��LaÌz’¤¡BýêW¿ Æ9õo0|˜ÓúžV&œÆ{eúôÆotÚE¤%ÃØ9iÜ žë¦4NúN\��@c–<í=Ñ  G±ÃDühÏ$N,3í×`O/"ƾ—ÖöK„1��€)!ŒYò4õÄ\@Ür§§Û™Ó 'yšúÜ—ºÞ˜“Åõ ÷§±+oœ¶ä^u%z¯Ø’üíúOÂÿ‡aì¤!+áíñZ”êÁiôÍ���˜4˜%eî‰õÒSèô(—9ÕPƒ—±Ñ#7Å]ˆÆY»!7æ®ÈÊöçr*grzp[ƒõ2·¾'õ§ŸËöÊ™[ù@j@‹¾Öu×;2v*ÕÅà6ŽŒ��LaÌ’²õDßÇ¥aK×õÒ f®Vˆi‹N/\Ú––9]ž~îFCÚg?H»±*sæHž¦H��˜&˜%¾÷ÄýÒ FèÏ¢W7Ô0Førѱ4Væef¥!'Ñ-ý¢ûç«rËX„1���·Æ,ñ±'´4piðÒ£_Ä8íÐQØš[•Fû‡è¶8Â��€c–øÐ½¨††- ]¾ôD czJ"|òì­?޹¹•wåþ‰ dzzâ–|tò¿£ûã§)š+'ŽÆ���“G³Äåžè޵9ýPÿÕÓ9úå·Î<¯†„³ð=c½ zÌ,Þ’F뱜ܓ[‹s½Ç…ú0¡.ù¡Ïñ÷ Ì���&ƒ0f‰k=ÑϨÒiÝ¡ÖÓ5€q¹ù2 WkWªÑgf®ÈJµ!±£d'ʺ `‹²ÛØù¹©Ö'­Öÿ›¼´ýÀi:†ô£ Ìi¬3���»c–¸ÐssTCOA䃖aƒ[3���{c–L«'ñ÷ék`'“6Ìôè§½��dG³¤èžè•ã§!j ã4DÍŒCÿú> ��`|„1KŠè‰†-s¢¹"G$à›z„ÌŒMÞ£��0aÌ’IöD—/= öúë¯s"œ¦ãSÇ©yoï[��HG³dXO4Lå9‚¥§|Åß ÆQ0ø$þGs*-���zc– ë‰%Зî´êΫžî¥§~qº|gÆ´¹àc��€0fÍy=Ñ÷Îè}ZÃ.n`ÞsÃQ”Yüóï8Ú ��žv„1KÒz¢;žºÓi˜†¬AfçTïçjtxZh3ãžP��žV„1KÒz¢áKo—9⥡Ë\䀫"âiE(��O3˜%ƒ=ÑSM�‹×øÿA^{í5Þ;ÄÊ��ÀÓˆ0fI¼'zê¡ _i¥GÄa@¡ ��<Mc–˜žhÈÒ« šà•VzTŒLà|:?Ìeñ e�� ¬c–˜žèd<xWºƒ `¸øUF e�� lc–hOô¢ñÀ5ªôtF�£i(Ó0fÞk ��P„1K´'£NO¬,  wRkŸ}öYt+��€Ÿc–˜p5¬ôFý«~¼¸~D„2Wa��¾"ŒYBO€b™÷“éÜÓ?tð‡ ��à˜%ô˜½¨Ço¼¾Ÿì“O>‰n��paÌzL—¾ŸLO]|õÕWÃÿ��¸Ž0f =Ü GÇô(™-ãRø��Àe„1Kè à}ÿ˜ùÐhN]��®"ŒYBO�÷˜Sõª‹%��®!ŒYBO�7q” ��¸Š0f =ÜÆQ2��à˜%ôpGÉ��€Kc–ÐÀ_ýux |=J¦ÿ��˜˜%ôðO£Ñç®þ ��P4˜%ôð“9J¦ÅQ2��P$˜%ôð›9JÖl6£[���&‹0f =ü§GÆôâï¼óNt €"èïPªø0}„1Kè PzÅEsڢ˗ÀïPQÓ-\œöñää„*°»€c–Р\Ì%ðõóÉ\ÄΫŶ߯sñÅØÜ@³„ž�å£ïsõ3ÉØyu£ØöÛÁx.¾»€c–Рœô}d/¾ø¢¼ñÆá)Œ®`çÕbÛoã¹øbìn ŒYBO€òÒ¦íÒåïÙyu£ØöÛÁx.¾»€c–Рüôò÷zÚâgŸ}Ý2=켺Qlûí`<_Œ]À „1Kè ðtÐ ¦LƒÙ4±óêF±í·ƒñ\|1v7Æ,¡'ÀÓCOUÔSõÔÅi½ŒW7Šm¿Œç⋱ ¸0f =ž.Âô¢ʦÈØyu£ØöÛÁx.¾»€c–ÐàéôÎ;ï„W[,úÂ켺Qlûí`<_Œ]À „1Kè ðô2ö(2±óêF±í·ƒñ\|1v7Æ,¡'ÀÓM? Z·úoØyu£ØöÛÁx.¾»€c–Ð�­V+<BVD cçÕbÛoã¹øbìn ŒYBO�(=UQ™¾—l’Øyu£ØöÛÁx.¾»€c–Ð�Æ·ß~^eq’ŒW7Šm¿Œç⋱ ¸0f =§—»×@6©Kß³óêF±í·ƒñ\|1v7Æ,¡'�iÓ£cÈôh™M켺Qlûí`<_Œ]À „1Kè €óh ³}é{v^Ý(¶ýv0ž‹/Æ.à˜%ôÀ0¶?‹ŒW7Šm¿Œç⋱ ¸0f =0ŠÍ#d켺Qlûí`<_Œ]À „1Kè €qh {ñÅ/|Qv^Ý(¶ýv0ž‹/Æ.à˜%ôÀ¸ÌE=.ÈØyu£ØöÛÁx.¾»€c–Ð�Y\4±óêF±í·Ã»ñ|´#•…Y™½^“í”û=¨Rݳ9øhKÖ¯ÈJã8ºpaÌz «‹2ïv^KZlûíg<ïVäRð8}ìÌì+R{ðhà1ÇrX{¹s¿©åšvïoI³^“ÍÕk½ûg—¥²Õ惻òÚÆ®÷-oHÆöDN7£u<Oƒóc–Ð�yä dºÍIÛÁ¢Š-¶ýéôB5zÑqÇõØã¹}(;Ë2<~faCvÚÉÇ„Aéy©ì~»m_ja»&«›uišï;jJ}sU‚å]ªdc%¨²Ý'U™'ŒÁ„1Kè €¼ò²±w^©‰ÛþtÚ­qCY¦ñ|¼+•Kå§™:Úò«R;<޾þRv+Ï¿,×kvßcµɃÚ+2Ûw­üUö±Kƒ/c–Ð�‘5eÚy¥&VlûÓi_â5*”écÒú›ZÆ.ÿXVoê‘®YYX»+‡}¬?Œµ››rM_ǵMižwJa{_6×Þ'Œ•a ¾ ŒYBO�\T–@–i畚XMtÛÚ’{Õ™ žCŸgfnEnß?‘³è¦Ü^¹Ü7'‹ë[R¯¾%< îùANî¿++sú}K²¾ý¡T«;rÒù¶ÎÅ Õèþè1Ü—³àÀÙÉ}ù`})º_—ßÖiì#t¾/Yç…2½/­¿©¥a왊ì~ù©l._¾÷²,o~*GÝÇÄÃØ‘ìVÂåÛ; ñ‘î~ØyïYühÚQSîV¢S(µf—ecç0<×>Ü•÷ÃÓ!¯Ëfý=Y]˜•™…ŸÊÝÿþqêíõÃÏ¥ywC–gMqãã têÏv)ºMkA*»GÁó÷~Ι™K²\;ˆ½ÞôÒǺ¨¢ÌÏÔJ#»ñÛç«÷åÏ­]©†ã¿sÛÜÊ»rÿä‡ÎBñ0Öÿ½òdÈûÊ’cÿC9ˆ–{þœò#ŒYBO�ØðÆoÈ믿}u>Ýæ¤í`QÅÖä¶ýßÈÞú³2³x[‚tvrOn-ÎÉÌ|UÂ}?½ÿ¯d1Ø)= ÿg9¨þRºcøxOÖç~$Õƒ?‡÷Èé}©®…1}Ü‚ånÈžî`Áìþm |ÁÎå­{a ;k7äÆÜYÙþ<Xö™œÜ–Åàçœ[ß“Çá2FëìÈž_ƒ¡LoKëoj™0v¬!箬i€™¹&kõÑ)ˆñ0fÂËxe¬:¬É²ùYºaì ©¯>Ó}[÷u] ^ç£}Ù¼¦¯Q¿gV*ÿ,ûzZ¤YÆàí³ÿQþ¡úŸ‚ûŸë¼ï­ý@êkzЯ–ìo^îFVë_ô^Wø^¹çb}^ú¼ÎÒ1«ã= bgÁÐþ¥Ül<’³pŒc6ÿ?ÈÉÞF8F;A«cðÈØYk[–ú£Ë»ŒýØctì/Ý’F«3Ò»óni[ZgCæp„1Kè �tçTŽéQ²at›“¶ƒE[“ÛöGa,Ü Œ}mÂØ“©Îë_ç·e/Úq4:;¡zDl/q4«³C:'KÛ»GØäì‘4nè_û_’íÖŸ¥µýRìy§¥±¾$s7Òî_ܹ´/ã” eúÿ´þ¦V,Œœ´åhÿNçÒìuÙÜo·M8Œi™÷­ †±î©ÑׯÂ×i^Ç ²Ùüª·œÔÛÛÒª¯aËÜf¾6a,xŒžV©¯û|Ñc†Š9PÚsw}߇s«ÒhGG»tœÞü¥ì=aƺã8üzx““†¬?óù‰ž3›ýÌ?îŸ;瀋 ŒYBO�Ø¢LwR›ÍftK’nsÒv°¨b«·³f§’Kk¯!Ûæ´©î‘±èWø}¼~Û=•ª{TAï[\—í‚S³¥zÐùÛ~‡¹]wJÿ?i¬Ì‘H2¯×Féôß´þ¦V_Óz$‡õŸ†WDì\òþ÷±0…¢™Y¹¶¹?Ö£±*ÆL \>?Æ^î¾—­SçÝ®ÍfCjÑÕ{GÆô¾è¢#Ý£cús^Íô3Æ× •ÐwôKо%7âDP§-Ùkèç‰uÆûÅÂØq8öÏ?<dÎEâ? ?äZS¬à$zÀ¦¯¿þ: dŸ}öYtK?Ýæ¤í`QÅÖä¶ýÁÎg«ìd·ïMiìÈ^u1Æ”µ»±÷ÍÄOM vRë±÷……§;þ ]Ñj(%ŒÅHäÐy=ÃKCØ·ß~Û}|ZS+Æ´Ì©{Á²~,Ë A( Ã9ªÜžá¨ÑÈJ„1 N5Y]¸$ «U©Õw¥®ïáÊÆÌ¥øVe³Ö­ÿ\.õ…1}Lç³ÎôçÚßß”k³kRo¥\êÿœÒž»-:¬ãú~S¶—~"Û­ï£û‚±ß¸%‹a(jÈÞïIuÞN›™»Õ9ú–jÈœsŒûëF®5Å N¢'�lÓ#cÈ4˜ ÒmNÚUlMlÛvÕû+ý©$˜a‚Ûà{l”Ùiíìpš÷ÍôŸrhNÏÒÓ£àÁ "ü íÆÖØ+Ðï?¯â!ÌÐÛÓú›Z©aLË\Â^Ÿ'nÌ)}ç^Ú>¨£OåÎÆ¯Çÿ�çÁ0ÖªËêìŒÌ®Ö¥>&º F®0Í‹…«Î^„±îѱ �.<{îñJûä¶ÞûÃuÚ=uÖ¼×ëYYßû&|dª,„±ÞiŠs+·å^÷TDû·åƒnTÃæœÜ_¿0r­)Vp=0 ú~š_|ñbWŸ£&VÛöG;ŽÐ¤;~æÊq7d»ñ®T÷¤qëÃØûº:§&†áíä#¹Õ=ËìÐF;®gmÙ»¥§<^‘•ÛÍÎ;‹Ìw/Lй€G´«‹¾g,-„zZÓªý &×gß{UûR»®WXì=½ }\–åJMvE÷é•kRY­H½{Û…¯îѶè¢Ï=Ó£d¿‘Jx¥Çë²Y{S*õÝ a,º-<å2xMÝ«4^’åÍ”J£ºÌÑ1s±îrG—öÜyge{IOAŒ¿ÏÑɽ"7ôbú‡{·;GWÞ“Æíweïñ“(°%ßWÖ9Jü$6§:ãSCÚCÇþñùs.ºÉ%úºá‡\kŠœDO�LŠîÄêE=ât›“¶ƒE[“Ûö?–‡Û7¢ËÚë¥ç'{[úW{¢Žå£ê[RÜ^Ýí\°ãdGªÕÿ*usYü¹©ÞkEW€ è¥í?XïqÐûæ}e*þ̲‰÷Ç Óù¾N a†>.­¿ý¿|{§R/Wsšbüö¦Ô·*±ËÅ5»,•­†4Æ?½¯ïjŠZáѯØi’3×dõN#èÿ Áÿƒð÷óŸÊò_ÄoŽp™£kƒ·ë)æ¢$z•ÅÕ·e§þføYi³ËoÊN_hüJš›Áóä8SŸÓ}æB§ž~.Ûf|.®Ë÷ïÉ–†¶ð㎥†µ^o;GÃzW]4óèø~Uæuü×]ìfpìë;Ì¥í‡Ì9éë‡r­)Vp=0IƒWXÔmNÚUl±íO§}'„Œç¼•ý¦»åÆúõG®5Å N¢'�&IOSÔÓ?ùä“ðkv^Ý(¶ýéÆ aã9OµåhwC2^¸Ãc·ÜX¿þȵ¦XÁIôÀ¤™+,ê…=Øyu£ØöÛÁx¿:ï™3§àé‡EïÈQÊãFc·ÜX¿þȵ¦XÁIô@ôR÷Èt›“¶ƒE[lûípb<'ÞÕ^©ïS+²ºíÐ÷¦íÈaÎËõëÏ‚òbýú#ךb'Ñ�EÑSu›“¶ƒE[lûí`<_ŒÝrcýú#ךb'Ñ“á´?Tñ…òÒõ›¶ƒE[Ì3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·ÜX¿þȵ¦XÁIôd8~Ñ_ŒÉrcN¹QÌ3;ÏÅc·¾ýö[yýõ×¥ë7íö7Þx#úN¸"×Ld'Ñ“áøE[|1&Ë9åF1Ïì`<_ŒÝòÐ¥ësœj4ÑwÁ¹f¢®Lô£'ÃiÒ~P“+Æd¹1§Ü(晌ç⋱[­V+\Ÿ£êêÕ«òÝwßEßW䚉ºBÑž §ýIûe@M®“åÆœr£˜gv0ž‹/Æn¹ŒstŒ£bnÊ5u…¢=Nû“öË€š\1&Ë9åF1ÏìÐ>RÅÊcÔÑ1ŽŠ¹+×LÔ•Š~ôd8íOÚŽ 5¹bL–sÊbžpŰ£csaÌz2œö'mG†š\1&Ë9åF1Ï�¸â¼£csaÌ’§­'Y'µö'mG&­Žw+r)Ú€Ì̾"µs,‡µ—;÷›Z®Éa÷þ–4ë5Ù\½Ö»vY*[ i>¸+¯mìÊqßòÊYús£¼tý¦­wªØbžpIÚÑ1ŽŠ¹0fÉÓÖý+‹NîqC™ö'mGæÜjÊÎÆ²Ìê†daCvÚÉÇíHeáy©ì~»m_ja»&«›uišï;jJ}sU‚å]ªÆà¿ÌsŠšH1Ï�¸dðèGÅÜG³äiëI|’Êô±i;2CëxW*—:Ï3{½&Úƒ9Úò«R;<޾þRv+Ï¿,×kvßcµɃÚ+2Ûw­¼õ´É§M®9EY/æ™ÚGªøB9ÅŽqTÌ}¹f"8éi뉙ä¦4”}òÉ'ѽIú˜´™¡¥aìòeõ¦éš•…µ»rØÈúÃX»¹)×ôõ\Û”f"¸EÕޗ͵÷ cð^®9EY/晌ç⋱[^æèGÅük&2“&Ñ“'U™–«Ëk¥!'·ÏWäÉiKîUWdÎ<nnEnß?‘3]ÈÙ‰|´%ë‹Wde{GëKÁc–äÖÞŸ¤}ÿ]Y™ÓïY’õí¥ZÝ —?Žîk¨_|QšÍfô¨½/í—ÁÐÒ0öLEv¿üT6—/˸,Ë›ŸÊQ÷1ñ0v$»•…ðy¬ž†xÔ”»•ètI­ÙeÙØ9ìukÊîûUY]Ð×õëî鑳¹%µð”Èë²Y/¸Vf~*õÃÏ¥ywC–gM¿‚ïÛø8˜É÷À™Ÿ¡ïýsèé÷ ¼tý¦­wªØbžÙÁx.¾»å¦GÇ8*æ‡\3‘ œ4±žœÞ—êâ\7ˆuœÉã½_ÊÍÆ£àßÈÞú³2³x[NÏ‚ìuOnéãç«rðä{im¿¾¶°‚ÇÜX—sWäÆÿó®üíܤzðçÎ"õyÖ?ºp35Êô¶´_CË„±ãiÞ•5 5AØY«?ˆNAŒ‡1ýÿ¥àþK²\;è_NîúBê«Ïtß³Ö} —ô5}%Íͺ?¯>fgK®›¯Ãš•…Ê?˾ž9ûåªÿ)uÏuÞãÖ~ õ5 o Á×GÁsµåhÿNÔfWëÒê¾=õòù”£‚£K_ÊK×oÚz§Š-晌çâË—±«¯“¢\-r-ÅÖ“—‰öDÿa«z¢@5·*ö›ÎIãæ/eï±ûŠÂØÒ¶´ÂCaÑ×aÓ¯ŸÈIãfðúædiûaçh™Þ]Ó#b{Ò B\=Ì}^Åâ°ÒPfŸöË`hÅÂX<¬ÌÌ^—ÍýVp[Aa¬{ÚcôuÆôksDkV®mîÇÞ£f^Ë ²Ùü*º­-­úZÆÌmækÆô1&àž¯U—ÕÙørÆ/í9Ê+ל¢¬óÌÆsñåËØelØ+zi·lÍ¡\KñeI{’ªòVŸÇ{²>7'‹ÕûrĩӃ·äF,Xu<–Ö^C¶ÃÓƒÀ’có²Ò82GÜô±‹ë²ýQ`2™â>¯Âï³Þyçðß´<´ú˜Ö#9¬ÿ4¼"bç’÷¿…±((%‚‘¸T~"Œ @Æ^­WA¨l6¢Óµ?ñ0v"í5¹Þ=:¶aïRúZQ^¹æe½˜gv0ž‹/_Æ.cÃ^ÑK»ekåZŠ/¸H“íIt´kæGR½ß”í¥ŸÈvëûè¾ œµ²¾8/‹ë[ÒØ;½êâè0¦N[²W¯Fï *:ÕqáãG”†°o¿ý¶ûø´<´aL«%û›×£KÞÿX–‚Ps¤)¸=gxI–§š¬.\’…ÕªÔê»R×÷¥å cæ²û «²YkÈ¿Ö.—ÂXïŠ/Èæþ=Ù¼vUVë_Äî¿´ç(¯\sв^Ì3;ÏÅ—/c—±a¯è¥Ý²5‡r-Å— \¤ÉöD†Ý–Åà9ôyz§$£f32·¾'ÃNå`Ü0ÖõXZ[Áò‡=¦_ø:Ωx3ôö´<´RØ– ,ú|±À£WJ¼¦ï+;ïÒöA}*w6~r™ü” OŒ¿‡+ºHH®0¹›]“z«óÙg‹s †±ØÑ±…¹{|ÖÒþ ¼rÍ)Êz1Ïì`<_¾Œ]Ɔ½¢—vËÖʵ_&p‘&Þ“³‡²½¤§ö¿÷+HZ²<÷܆´Ïô(Ù®TW®»!Ûw¥º÷¿ÓÃØÉGr«»öž•õ½oÂ[FÑŸ7^£>oL“6‡U'”œó~©ö¤v]¯°Øô©w¡Ë²\©Éîá£è¾Gr¸[“ÊjEêÝÛFÔaM–ƒ×ÝùŒ3=Jö©„Wu¼.›µ7¥R?ÌÆ¢ÛÂÓ+ƒçï^¥1øÞÍ”Jcà¢6õ ;±«Gf+í9Ê+Ïœ¢ìóÌÆsñåËØelØ+zi·lÍ¡\Kñeiò=1ò¸]¸Ãx,·oD—µ_’õ~'{[zÅ+²r{G¿¾6Sá¥ðõÛNv¤Zý¯R7—ÄŸ[‘ê½–œ†ËÍ,o2úÜ»L½©ÔËÕíH¥{šbüö¦Ô·*±KÈ5»,•­†4²eŠ9sMVï4‚~é6ô’ô¿–ÚÏS^£Í‹>¨ºSÉ«%†!kõmÙ©¿~.Úìò›²3;Ÿ™–ï¦ôùQ^º~ÓÖ;Ul1Ïì`<_¾Œ]Ɔ½¢—vËÖʵ_&p‘ž¶žèUÇ a€,u± w˜bž–sÊbžÙÁx.¾|»Œ {E/í–­9”k)¾Là"Ñ“áØ�d¨ðˆ_þ w˜bL–sÊbžÙÁx.¾|»Œ {E/í–­9”k)¾Là"Ñ“áØ�Œ¨î{à¢Ó£šN}ì˜Å˜,7æ”Å<³ƒñ\|ù2vöŠ^Ú-[s(×R|™ÀE¢'ùµH¾'-µºWM,¢bíX};vá‘ü¥?ÊK×oÚz§Š-晌çâË—±ËذWôÒnÙšC¹–âË.=Ž @ñŘ,7æ”Å<³ƒñ\|ù2vöŠ^Ú-[s(×R|™ÀE¢'ñ(¾“åÆœr£˜gv0ž‹/_Æ.cÃ^ÑK»ekåZŠ/¸Hôd86�Åc²Ü&2§ú>šáœO>¯ó­øç鵤Y¯ÉæêµÞýæc%Ü•×6R>¢ÂóÒŸ§}Lë/5¹òeì26ì½´[¶æP®¥ø2‹DO†cP|1&Ëmrsê‘î¼}&ÞsRÙý2å1úÇçû?”üh_ja»&«›õÞgúéçþm®ÊBðzS?/ÐóbžÙÁïˆâË—±ËذWôÒnÙšC¹–âË.=Ž @ñŘ,·ÉΩØEnf_‘ÚƒÁ ÊËaíUY®D_› Мs4-xj¯ÈìrM÷ù]Ì3;øQ|ù2vöŠ^Ú-[s(×R|™ÀE¢'ñ(¾“å6Ù9¥aìyY^}%<¢5³ðS©÷]á³?Œµ››rM7ìƒÊÛû²¹ö>a ©øQ|ù2v”«ekåZ ¿|’èÉplL‹/Æd¹MvNi[–ÊîÙß¼.³ÁsÍ.ß‘ýîgßÅÃXï(šÓ?zâRâyff‚×Ö’£æo¤²Üû|¾Ùå7e' íÃ]y?<=òºlÖߓՅٔPyñÒçÅÅiÓúKM®|»Œ ÊÕ²5‡r-…_>Iôd86¦Åc²Ü&;§L;’“ö©¯é{Áfeaí®†G¾âaì@jË—‚ûMh\VžjËÑîF¤—ùEðZÖ:§M¶ê²:¼¦ð}kä°þÓÞûÒô(ܵ |_‡¯»òϲ¯§I¦žry±bžÙÁïˆâË—±ËØ \-[s(×Røå“DO†ccZ|1&Ëm²s*Æôë£Oe3<uY–7? ÂϤÃXPQ š½^“Ñ©í5yy­.-½? c×6÷;ïQ ¿Ž3¯ëÙl~Õ¿l‹Å<³ƒßÅ—/c—±A¹Z¶æP®¥ðË'‰ž ÇÆ´øbL–ÛdçÔ@ ª}xWÖôT¿ð"¿—Ý0ö…ÔWŸ n#+Õ–V}Mf»WtÔ‹„¬&ƒ•^­±V휆ô$Æâ—Þ·_Ì3;øQ|ù2v”«ekåZ ¿|’èÉplL‹/Æd¹MvN%ÃXxêàþè’÷ ²¼ü\ÆLh nv<íšYØÝª\ë[~Kšµ5Y/¥_“ú¿Þ ?#0æ§§ów„9÷¼«N¶|»OçØ |([s(×Røå“DO†ccZ|1&Ëm²s*-Œi™G d±Ó»ïѲSyô©ÜÙøu÷”ÃñÊ\2¿óÞ¯Þ‘7�Ÿ‘ÕúÇFXM›¾o¿ýV>ûì³è«ñŒ5žK÷¡ä„±qèëL{ýùë‘î~ØÝۘ¿Yëá×q¹±s8üuèY[YžÕ ™SÊw¤,#~z·µ²²lý9²ü~™½T‘Ýãè¶©ö>ÙšC¹–âË.=ÎþÆ”UŒÉr›èœjÿAjן9ç´Ãè3ÃÞ#?q¹R“ÝîU uǧ&•ÕJ®+v/›ß÷Þ/}ÏÚËásu~y;Ùw7:Gí–ÿ³Ô6Þ”z+øcSñõ×_‡}yñÅ¥ÙlF·7þxöáCÉuçòŽl&þ˜áVù2v­oëâÝ‘0¦ï‡½~©s¡î¶tè™æôpý9< cæl}Ý„±®\K±õäeBO†Óþ¤ djrŘ,·IÍ©ãÝŠ\ –­Ë«û 3^º³ûBò‚Ý¿ÔÆ¾ßyè^?c™ y¬Fî0Õ½¨Hð «rgç®TõèœþEùãšü¼{E+¶³b¹tùHêõ~¼P¦Këozé‘[‡?”<ücÆós¶JûçƒlccÌ2GY/´Îƒqõ‹·S¶Y+Ï™Oó6ó`rÛ·‰”é}êï¿ÊÖʵ_&p‘èÉpÙ˜RC‹1YnÌ)7Šy–Nû2X&”}÷ÝwÑ£zôþ´þ¦—ú¡äæÈ±û;ÈÚsdc–…0ͺl#PD§Tg~-„±i—­9”k)¾Là"Ñ“á&²1¥†c²Ü˜Snó,ö强zõª4¾P¦·§õ7½t'TßÓ8%ïTûðcÙÌÎÊÂjU¶*¿÷ÿWÄâ?ïËRû÷Ù}_¯ø© ñëîé’kwwdÇÜn‚£ù°ò`GuçÀ<G°œÁÀÙ>”Ý;Ó+õþøž[ú}>Ð×™öú/T cáÑÏ`ÝØæ=·„1ïÊÖʵ_&p‘èÉpÙ˜RC‹1YnÌ)7jbóììD>Ú’õÅ%©ÞoÉýÛ+2<×ÌÌ’ÜÚkËYô09mɽª¹/¨¹¹}ÿ¤swWd¥ñ¹´·d1|\ðõöçrÚ÷½ýË=;¹/¬/u–93'‹ëÊÁÉѽ£u¾oxÅC™~Ößô2a,Øʇ’ëûu®ÆÞ“¦§Aþ¬ûÞÄΩ¾fù+in¾Ðý™Ã+ƒîoÉõÙYù s[÷µ™×ª·iÈ«…§÷š#{½Su£eÎ^—ÍýV¬ÑòÆÜ©×Çú@_gÚë¿P †1 ·Á¸ÿý‰ú^÷¥Rùu0Æ¢ fú=´çÑ{fM¨×ëÛÑ{jÍ{_cËÑ:7¤èÅ/~Ó[ÖÂ+²þߌµä…Iºá^ÿ(Ðü4úC@ð½áØùr`yƒG˜ã•\v¯gפ²Ó”åè×d­þ v:pì=½úóß¼Ùù¿ù9S{ÝûƒÃÌÂZð3ã=º¿}¸#wÌÏÓ××óþXbÿ½ÃúÜ6äZŠ­'/z2œö'm S“+Æd¹ù9§zG)†–G1Õ×kß9iÜìõcñ–4Zƒ„ôP¶—æ‚ÀuKöklúFöÖŸ î¿-§gA€º'·ƒûç«rðä¼e<’Æ+ÁmÏÊÒú–Ü×€uú¹l¯·EË=k7äÆRôø@w¹KÛÒŠÒš†¨xýêW¿’×_½[Ýç£4”é¿iýM¯XÓ¯‹þPòpG^wò6¥Û94ÕÆô6³Óü,¾Îcã¯-z½ñ9É#)À–íÚsdcV_Oã¡(¶.‹MÄ.£°X5§²FÛ²¡Û*sa Nbá.|×ojË ?ZÄŒq󵾿h¬%.LrN¸×Ó+õû®>/«¿ø8—½e%Þ›k*±ì i‚’›³kRoé‘êVçèµùÃùZ¿'ìÝ9½o÷ˆwtñ³Üðg¸Ö gý=þÇ›¥¯Û†\K±õäeBO†Óþ¤ djrŘ,7攥ëa0˜ «ÁÐ2X=&L-Jõà4ºíTª‹Ám7¥qò$ø: cÝ}†1ýúLïÝ’¹™yYië QË=•ÖöKáÏ•¬—d»õ}øi?[«ÕêVú÷'ëwÞ /…¯ÿOëoz „± ŠýPrsAýôˆÉ‡±«‡ cÉ@x¡0\´³œåTL}ý>È66Ƭ”�4¸.:_\}³[c„±´õ²Î©¬±ñ8N3Gãú–eþ¸k‰e™ñ¿ªìc,­1ã:>ÖÍkê<_'ø Ì=³œØóö¾óÇ…øt£Ï• /Øü?~´¹¯‚ïù×–þKl–>§ ¹–bëÉË„ž §ýIÈÔäŠ1YnÌ)7J×CZ0VñÐ2X=ã„1ã±´ö²mN+솱`)U™ÏÆþ$•y™[ß –š_ø:†”O a†Þ–ÖßôJ†±Þ‘]~J®ŸYö^ìô³Þ”‰‡±Äs´!ö¹{c”¾ndcVJøH¬ s4F×ïªl¾¿«5F;/ ›£Læ¹Ç B©Ë'Œõ‡£Î÷ƾJ¹?¶œØó÷÷Þ,7þšãÕyýçÅñÇ›ekåZŠ/¸Hôd8íOÚ@¦&WŒÉrcN¹Q“›gㄱ39m5d}q^×·¤±w {z¿…0Ö;2íKZiëz_ZÓ+-Œi™¢ÏÛ©6G(†Æ—ëCɵ‚ç4Öí¤N>Œ¾OìDz°<V^ý‰»ÍÞçªQú}>È66Ƭ”ž&×EPƒ×±°!»áQ²ñÃX"àÆ:ˉ=z;o¾F¯¿{*äàýZçÿ±ÄfÙšC¹–âË.=Nû“6©Éc²Ü˜SnÔäæÙaìñž¬ÏÍÄŽbE÷_(ŒõNSœ[¹-÷¢÷‰ü íÆmù :Mqýþx }LZS+<ekšJì ®½Ý;ÊA1©ïìXê©Yÿ"µŸËÆîç„1sÔ.vWâ=7Ámæƒr»Gö:?ãå ^R{îƒLccÜJ ©a¬[ÑirÝûÇcÝuÙÿYxSð2ž¦˜AuÿÈàj{”ßAu?j"öüý½ÍÖÏÜ9ì}ïƒeãýf÷4ÅÙå ¹Û=QçņÜéžÚ¨•ücIヒ—­9”k)¾Là"Ñ“á´?Tñ…òÒõ›öË*¶&7ϾBѳ²¾÷Mt[ôž0óÞ­“†¬Ï?w£!í3=J¶+U½ÇÌ Ùn¼+Õ½ÿ½glN–¶FWJ½ÜðAÈ‹oK´:Ï}Ëæ{ô³Å†…0C›ÖßÁêì´Å^Wêΰž¦4É%?÷+¿­î²4àý¦·Œ¾ Šü7©‡;§½çìÝ0;²±ÛV‘ŸéÎn÷¶`‡v÷½ÎQSáÏíLÇo*Ë%îõñ>Ð×™öú/T‰p“Œß—µnˆ0G]Í© &t¼ ›ûûA8ÿÏѳhùaA¿þÓðHmw½˜+_v°K Z‰2§Þ™ q|Õ]vgÝG¯+±,óž±Øû¯Æ ü)•xŒ¹RhüôØçëžêyMVkûr4xåÏð5§üQ"劕áã;Á¶{’ûg¯×äA{øKú~¦ –>§ ¹–bëÉË„ž”ë®Ò±™öËa:ÕŠ]º8(ÝÁ­íʃýšÜÑ¿˜šÓrΫp‡ø×)çõë_5c—^6G5ü‹¼}çÞ…Ž Ø*}]ö™#U¦Gzdk¿sú`÷6=²Õ–‡Û7º—¦_ÿàw²·¥A늬ÜÞ‘ÆßÇ—1#óÕ=ù·‘ËÕÛ¾Š;½-û¥íÍ<KŸ'­¿TZõvò{ë­Wã^ÄCë}i¯?w n.ýLjï cíáᯥRùGÙªD—lï;4Ø6™÷(v¯8ð<aé‘×·;GfÂeÇÌ&y÷¹Ó–Õw©÷ ”­mIíç AЫÈV=x]£¶³zë·õÎÑ­îm)¿ï(ZT‰ž­Jågñ?2èQ­ø#AçˆYÿ%è¯ÉÚo¶äç—´ïI½ùÇä%ÌÏÔ”»¦÷AéÏYÛ5GÉ7hH5—¶ñÇ‹¥ÏmC®¥Øzò2¡'åÄz…«tl¦ýr(¾Ìia±Ï–éþŸ¾bþŠ¿MOÛ•Z÷nÿçÓ˜+qõ>?ªúÆÝáœt±°ÃñìAéÑ…×^K �zôær=vJذòeì26(WËÖʵ~ù$Ñ“rb½ÂUÎì œû^=­æåXðJ{©Ø_ú»ï¯H{¯ƒVçt¡çc¥âÌxv¾Ì>'/ب¼rº\zù2v”«ekåZ ¿|’èI9±^á*gvPLx“ºV»¦~=,Œiõ.GÜ9·ß„±”+jµ÷K~šâÓÇñlÆœ¥R©ïS+°Î{ï[-~éõÑ¥ßç}i¯Ÿ¢¦]¶æP®¥ø2‹DOʉõ W¹³ƒûL—¡;„£ÂXìâ áÎnçXçýñ÷Y$¿ošÅ6ÂwÆóÓS¾Œ]ÆåjÙšC¹–Â/Ÿ$zRN¬×ü´w>—ëô5¦ýr˜Jµeg£÷Fë´S¨Æ c½7‰›SÉáΛ±#�“{#vÞòa¬øÀ©ñü””/c—±A¹Z¶æP®¥ðË'‰ž”ë5?Ÿú°ÞÝë¯^5¬»ºÕàe¶ó„±Îíýù*{ñÏž™fù0V|àÞx.ù2v”«ekåZ ¿|’èI9±^óóù¨ëÝÝþö_ʹó¹/z{ÖÓ“÷÷]"9å=jÓ(ÆŠÜÏå-_Æ.cƒrµlÍ¡\Ká—O=)'Ök~>ÿõa½;Óßã]Ùx-åÃ4͇}v?XtÜ xÌÊBeGŽôb ½%M<.þA£Ó+¶vø¼½ðµ|»Œ {E/í–­9”k)¾Là"Ñ“rb½æçóF߇õîLõjŠ—ÓŽR}!õÕgÆ cç]Úþùä•OÚÒª¯É,a¬T|Þ^øZ¾Œ]Ɔ½¢—vËÖʵ_&p‘èI9±^óóy£ïÃzw¦¿æÒö «²Y7í0Î|Y–7?nãCŸg¯Ç>ÈÖ\füš¬nÖ£‹v´å¨ù›ð}i³Ëwdß y°°Ãçí…¯åËØelØ+zi·lÍ¡\Kñe‰ž”ë5?Ÿ7ú>¬wgú¦øeÊE6ºWTì^˜ãœÒ Wk \%1:Mñ˲[‹¦’[WTÔׄ‹Ó>¦õ—š\ù2vöŠ^Ú-[s(×R|™ÀE¢'åÄzÍÏç¾ëÝçþ–©ØFØÁx.¾|»Œ {E/í–­9”k)¾Là"Ñ“rb½æçóF߇õîsËTl#ì`<_¾Œ]Ɔ½¢—vËÖʵ_&p‘èI9±^óóy£ïÃz÷¹¿e*¶v0ž‹/_Æ.cÃ^ÑK»ekåZŠ/¸Hô¤œX¯ùù¼Ñ÷a½ûÜß2Û;ÏÅ—/cW_'E¹Z6äZŠ­'/zRN¬×ü´wi;�>”ëÝçþ–©ØFØÁx.¾»€rÍD&p=)'Ök~>ï\ù°Þ}îo™Šm„Œç⋱ ¸!×Ld'Ñ“rb½æçóΕëÝçþ–©ØFØÁx.¾»€rÍD&p=)'Ök~>ï\ù°Þ}îo™Šm„Œç⋱ ¸!×Ld'Ñ“rb½æçóΕëÝçþ–©ØFØÁx.¾»€rÍD&p=)'Ök~>ï\ù°Þ}îo™Šm„Œç⋱ ¸!×Ld'Ñ“rb½æçóΕëÝçþ–©ØFØÁx.¾»€rÍD&p=)'Ök~>ï\ù°Þ}îo™Šm„Œç⋱ ¸!×Ld'Ñ“rb½æçóΕëÝçþ–©ØFØÁx.¾»€rÍD&p=)'Ök~>ï\ù°Þ}îo™Šm„ÚGªø0}¹f"8‰ž”ë5?í]ÚΫåÃz÷¹¿e*¶�€‹Èõ[„_>Iô¤œX¯ùù|Xï>÷·LÅ6�p¹~‹ðË'‰ž”“;ëõ99ø­l¯/ÉÌJCN¢[]æsXða>ûÜß2Û~�ÀEäú-Â/Ÿ$zRNάד†¬¯E_Ï´ÂX£ÑV«}5š¾Ö´Wjë½Ùl†5.Ÿû[¦rf�ðR®ß"üòI¢'åäÔz}r Õùé…±×_=ì‡þ;N(ÓǦí¼úPÓXïvõy_|ñűB™Ïý-SMc¬��Ê#×o~ù$Ñ“rrj½:ÆL eú˜´WjëÝ„1S£B™Ïý-SMc¬��Ê#×o~ù$Ñ“rrj½:ÆLÊô¾´WJ_{ÑØ©óB™Þ—öÚ©bK×��yåú-Â/Ÿ$zRN6Ö듃ªÌËÑe……©øíóÕyrÚ’{Õ™3›[‘Û÷O䬳˜þ0fþ¯›¯ÊÁ“àþóÞWvv"¬Ë¢¹oq]>8è,÷ì¤)·W®·ÏÉâú–Ô«oÉG'º°¤ó˜©ÁP¦·¥í¼úPúÚ‹v^35Êô¶´×N[º��È+×o~ù$Ñ“r²¶^OïKuqnà¨Ö™<Þû¥Ül< þ÷ì­?¥Ûrpz„¤{rKo‚–<2vöP¶—óxOÖçây$/Éz㡜†_·eïÖRðs½$Û­ãà9ÿJ«÷;÷ÉŸå úKiä c¦L(Óÿ§í¼úPúÚ‹6*Œ™2¡LÿŸöÚ©bK×��yåú-Â/Ÿ$zRNº^/R=ßKkû%™™[•Fû‡ÎM”nþRöë1ª(Œ-mK+<}=,ŒÉ±4Væ‡>欵-K)¯K„-½·%?¯GĶe¯õ¸óý’ß7^]½z5ü7mçÕF >ßÓZi½¡Š-]��äE³„ž`¤ð¨U~Â#Qgrzð–ÜØ~Ø; 1ôXZ{Îç‰é÷…ÂØ9iÜ à­(ð Ò#a?ê<ÏÌ’¬oÿVN¢ ˜bœ#cÂôÏwß}~¶óêCék/Ú¸GÆÞyçùöÛoÃÿ§½vªØÒõ��@^„1Kè F‹ŽvÍüHª÷›²½ôÙn}Ý„³VCÖçÃ÷n5öd¯ºh'ŒÍ<+ë{ßD¤áï®TÃ÷éÎ~ðÚþÝ×oX‹‡0CoOÛyõ¡ôµmT3!ÌÐÛÒ^;Uléz�� /˜%ô£éѰ۽ itOI Dïõš[ß â‘:•ƒ ‡±ØiŠs+R½×ŠÞÜÞþH*ÄÊ™08ø¾¶ž´0– ½?mçÕ‡Ò×^´óÂØ`3ô¾´×N[º��È‹0f =ÁXÌE7ô=[ñS£+!ÎÝhHûLƒÑnt´ê†l7Þ•ªÙ2ç|_™9š5x5F i?è<ÌQ¯X…ï];’Æ­{0ºÈH/ö‹‡±a!ÌÐÇ¥í¼úPúÚ‹6ÆÎ a†Ïý-SMc¬��ʃ0f =ÁxÌ…<ßÇõXn߈‚Ô’¬ð;ÙÛ 7sEVn7夻l½Vt4¬{ÕÅà¶¹•wåþqSªóÁ÷Tïö.Ê1Òº—¶?–ªoI½^• yú\Õ]iÆ_W†±qB˜¡Ï•¶óêCék/š c£B˜ásËTÓ+�€ò ŒYBOPvŸ}öÙX!Ìð9,Lc>ëÇŒ Ÿû[¦bÛ�¸˜%ôèçsXða>ûÜß2Û~�ÀEÆ,¡'@?ŸÃ‚óÙçþ–©Øö�.‚0f =úù|˜Ï>÷·LŶ�p„1Kè ÐÏç°àÃ|ö¹¿e*¶ý�€‹ ŒYBO€~>‡æ³Ïý-S±í�\aÌzôó9,ø0Ÿ}îo™Šm?�à"c–РŸÏaÁ‡ùìsËTlû�A³„ž�ý| >ÌgŸû[¦bÛ�¸˜%ôèçsXða>ûÜß2Û~�ÀEÆ,¡'@?ŸÃ‚óÙçþ–©Øö�.‚0f =úù|˜Ï>÷·LŶ�p„1Kè ÐÏç°àÃ|ö¹¿e*¶ý�€‹ ŒYBO€~>‡æ³Ïý-S±í�\aÌzôó9,ø0Ÿ}îo™Šm?�à"c–РŸÏaÁ‡ùìsËTlû�A³„ž�ý| >ÌgŸû[¦bÛ�¸˜%ôèçsXða>ûÜß2Û~�ÀEÆ,¡'@?ŸÃ‚óÙçþ–©Øö�.‚0f =úù|˜Ï>÷·LŶ�p„1Kè ÐÏç°àÃ|ö¹¿e*¶ý�€‹ ŒYBO€~>‡æ³Ïý-S±í�\aÌzôó9,ø0Ÿ}îo™Šm?�à"c–РŸÎ ŸËuúÓÂUlù0V��î"ŒYBO�‰0æF±í�\aÌz H„17Šm?�à"c–Ð�E"Œ¹Qlû�A³„ž�(aÌbÛ�¸˜%ô@‘cnÛ~�ÀEÆ,¡'�ŠDs£Øö�.‚0f =P$˜Ŷ�p„1Kè €"ÆÜ(¶ý�€‹ ŒYBO�‰0æF±í�\aÌz H„17Šm?�à"c–Ð�E"Œ¹Qlû�A³„ž�(aÌbÛ�¸˜%ô@‘cnÛ~�ÀEÆ,¡'�ŠDs£Øö�.‚0f =P$˜Ŷ�p„1Kè €"ÆÜ(¶ý�€‹ ŒYBO�‰0æF±í�\aÌz H„17Šm?�à"c–Ð�E"Œ¹Qlû�A³„ž�(aÌbÛ�¸˜%ô@‘cnÛ~�ÀEÆ,¡'�ŠDs£Øö�.‚0f =P$˜Ŷ�p„1Kè €"ÆÜ(¶ý�€‹ ŒYBO�‰0æF±í�\aÌz H„17Šm?�à"c–Ð�E"Œ¹Qlû�A³„ž�(aÌbÛ�¸˜%ô@‘cnÛ~�ÀEÆ,¡'�ФÛÊ� /˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����² ŒYBO����dA³„ž����È‚0f =���aÌz��� ˜%ô���@„1Kè ���€,c–Ð����YÆ,¡'����²Èƨd���À¸H����0„1����˜Â����La ����¦€0����S@���€) Œ���ÀÆ����` c����0„1����˜Â����La ����¦€0����S@���€) Œ���ÀÆ����` c����0„1����(œÈÿÝ.’à2"����IEND®B`‚���������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7t.png��������������������������������������������0000664�0000000�0000000�00000161236�15030617045�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��*��—���DÑ«[���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��â3IDATx^ìýmˆ$ç•ï‹Ö÷óqnQŸúCæ¹h‹±Ô|8Ý‹ÌÊÚ•ÚB PM³­·¶Ú섲lk†]TŸ–l¡;M- ÕãTž‘ލ«’´Kö){Nû–ZÅØ¢•ÔÝvSJêËàkDÃ6B4ëÆ?"žÈÈÈÈÌÈÊ·ˆÈßÝ/O<ñ¬¬µž9�������È �������*������� 7 T�������@n@¨�������€Ü€P��0R>·£½·mãÒY›[®ÛQ¸tœÜ;Ú³77.Ù™¹Ç­~ôE¸��� ˜ T��˜/öÖìäÜœÍÅ­Í9þÂŽê·}~rmÏ[ZV­¾|²íxÓ팭íÝ ¿3bŽê¶ì~g"BEü˜*��� ø T��»¿µåû<'uÁάݴN÷ûs;Ú^µ3sgíRývÊç%âÞmÛ8{Î.o7íž¿À9ñ-þÞÑ®]Yþëñ â‹=[;9)¡Bܵ½µ3���P *��JÀ½Æ†›³…KÛöY¸¬Å=ûlû²Lý¬d|±gW*ñãì*Ä{ö"B���@.A¨��(÷îXýÑûlnaÅêÍÏÃ…Ž³íKçìÒö¿…ÏéBÅØA¨����86��¥ ˆšX˜[°³·Ã´‡�?ÚâÌÛ»_ª‚¯Ù¥3 žsë9Ô ËvåæQô½VqÆGmcûF°Þ™UÛ>úÜÿ¬¾¶ìý–j"xvæ’½º§ï:gYË] ˆ”ú w¶][³å…3öwõM»â§­û°ö^cÄ©)ý„ ‡º­¹}PúÌ¥×lÏ;NÓ»_ZMÇzrÕê»?ñöYëÌÙÂò{¯Ñ#>%M¨¸wd{¯êœÛpçíód‘ð;ñú#A]‘Ä5S*Ï«7íÈ¿h���P*��Ê‚_ŸÁsb.ÛögNrø³56¾™.^ÌÝgË¿õ\\WÃ"æ,G¦º;v»¾b ŠÖ¸ýÙÚ™“væò{¾ƒÔ{“6¬ ¡ßû†÷w¼X¥":¾â-“ý§˜˜!‡ÿU»-%ª³qÎûÞŸÂï‚^BÅ=»»wůÝì»wn†b„D™ÃÝ@lð÷Õ+ï;·_ ×IŠ?1’B…ñòV{MÛ¾|ÖÛî7l£ñgïøozçÕ»vmŸ~h×ïøûÖ¬ÿG;{©n ÿ7Ý5sÂB���”„ �€ÒàD‚ûìQß¹õðàoÎp„[/æÔ†"Ç£ukú_t~èHû¸ïÅ—Éç®Û£rÜÏnXãž›e$.T$è41ÃÛNÏ:Ç¥‡Pá„¿Ãe¾ °ÒŠLqëœ\³½èënÿ¿Ò=&!T¸ck @ΜÐn3žº#qãñ¢“Û´møûP���å¡� L|¶m—¢·ý_é mޏHB‡>rÈÓüä:ŽøºÎ T¤‰=ë:¸ßˆ9虜ò´ã §혮ÕM/êïGú1i'm¹~.IÐv,áñ¶Eº¤à_;7s‹¢=^´G]$Œ¿O=„"*��� D T��” ¥VœóV9µw/¢éGZ¸ŽV:C+š!ÍÁïæôÇ—O¨èø½q =…áRdÎÙÚÍ]Û8‹„ ÷©{´ B���”„ �€’Ñ–fÐõ-¾jüоyæ/â˜÷ÙòÚVXÿ@¤9ø.#–Z"ÚR(²¤~¤ Á~wŽB…ÛïÄL)íû‘&T¤E¤$è–ú‘(z¯ù¦U^uÇëjf„×. ¥~$®“ÒC*ÿHê���” „ �€²á¦*õœÝnoàýº÷%S8â¤;ø÷ŽÞ³Ë*úÍâŠ:º"˜­ÙG‚†Ï¬ñÞ•h¶Œ@œøS(Th†°8äÝÛV¿t¶wÊã9øi¢B«ˆèÂòOì¦fúpE.£ýpçálXóžÝmÔí’¢Qüãë‚KÁqbCìš´Yr:Ùh“‚«‘ø~$¹hŒâ ���@A@¨��(N,è–jà"’N¯g vëöwŠˆ–'"ŽnÚ«ÂÏ–׬îOOÍhnïfÃn®ñ׫m+šÀýþ}¶|i%Œ ˆO : ºcGZÉç‰)?±PíG(T,|Ó.=åŽ9>-h .uÄ™‹Æ¸Û°÷R§uãŠj¦EÂ$E·NLqË)5����¡�`‰"#"ç6fÅ2GMzêG>IKý����€q‚P�0s(åaÍ.mü¶3uAE6}51KȨA¨����€î T��ÌAaÇdñL{G¶÷ê‹¶áך'®e¿Y0r@Tp³ÏÔ¢����02*��fŽÏ¬±}ÃÖ–ãÅ“µÆE²žB)>§M²Ö3j����L„ �������È �������*������� 7 T�������@n@¨�������€Ü€P�������¹¡�������rB�������ä„ �������È �������*������� 7 T�������@n@¨�������€Ü€P�cæææ0lâ���0M��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@ŽÁi„IC›��€iÃh� Çà4¤¡Í��À´a4�cpaÒÐæ���`Ú0�È180ihs���0m��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@ŽÁi„IC›��€iÃh� Çà4¤¡Í��À´a4�cpaÒÐæ���`Ú0�È180ihs���0m��äœF˜4´9���˜6ŒF��r Nc’ϬQ¿lg¼ó¢s³°ü=û»åE›[X±zós{G{öæÆ%oÇ­~ô…¿ ²C›��€iÃh� Çà4ÆùÜšõ;ùhÝš÷>·£íÕH°h ‡V_>,C¨8´9���˜6ŒF��rÌì:÷ìnã—V[[¶ûÖöÌ—¾Ø³µ“ vvã¶÷i/îÚÞÚ™‚ ‡Vôq[«ýÒw{í¨A¨���€iÃh� ÇÌžÓø™5¶oØÚò}6wæ’m¼¹gGÎO?ªÛòÜI[®† ºQ¡"žÂ²`g.]³7÷Žú4£¡���¦ £�€33Nã݆m×Öly¡»S~¯±aggH¨ˆ¸wd{o^³Kg:Å›1€P���Ó†Ñ�@Žéï4~nG{oÛÆ¥³vrm×oþÄsöUŸÁsø/¿sh?³Æ{WÂÏd÷Ùò•ÝàóÈö–Õ+Véý½ñ[»{·aï­-Û‚¿ì¬]Þn¶D}÷U½õ·ë9Ò¯:‘áÞ«?z_[¡ËvZé Þv/m¼m{GiëÅëN´ìäÚž}žZ83M¨Ðyz-pöýï{¿÷êMÿø£È…“kvóp×®(šCëœYµíhzœ¿Ø5˜[®Y£Q~gaùU»}÷O±ï&¯K÷ýê$ëùí���À4a4�cú:~:„sž=çµ~ÛsÓÿloxÅ.mÿ›·Ò=ûlû²çÜž³µ½?y6mû²çTÏñÿ>ª?~ß³3—­ÞøÌ['¼mœ½tÍnÊ!¾û[Û¿pÙ¶?“‡¯u¾þ¦~Æm÷¶ÑøskÝ„ ·ï'×l/CàÃ{kv²-¢¢[á̤P¡"œÿÑ;ŽzXïÁâT½‹MûE´ EsëÑs¶piÛ>ëyþ¼#O½AáÏo›yö){ñ¦Ä›ÏìöÆ£Þ2w]zíWŸ:î7—ëv.:���€iÂh� ÇdrC§UÎUowê£ Ñß¡£ý¾ ·Žh�œ38èqËRðR !Ð)Tˆ´è‰Ä²{·m㬋XHØÙ kÜ ¸`âîô>÷…€~çÏã³m»¤ˆ‰¸pÐïºôݯðKDT���ÀlÀh� Çdrû ŽÀÑ­û©rˆ[Žvçúý„Š?Ÿ»èŠaÉP£âØB…~\Cý„ G÷ó—º~¿ëÒw¿= ŒŽ„ ���˜6ŒF��rÌÈ„Š»·­® rtë¿´·ÿÎû|BE&G{º;åà .# BEŸó×±¾È$Ttß/fý���€Y…Ñ�@ŽPño¶}é+mÑÁçñԅe[{¯á}p¯ù¦U^Í’úÑ‹VšÃ}áq[¨ˆR,î³åµ­°„‡jhTþ1CêGÿó×¾~H¿ëÒs¿.Û³ËÛZí—­å¡���¦ £�€“Åil/üè/ k(¸Z¡#îŠZF³xxóÆ?Ú•µÿb‡më‹dAN:ìÉb™+âæ~§_1ÍH“#±O©Ë\aËÄ~ÎÝgÖïØ='ÄÓX\͉x ‹®çï—öYÛúÁ&ú_—>ûågòh����¦ £�€ÓÏi ÞÐÇœÜå¶çGB´–\»iºýjkzÌK¯ÙÍíŸNôò÷íï–ÿŸ‰õ·í_üˆ·L�;³Þ¶ì0洇˚ž4+¡Pý¶LÑ '–w[¦¨‡äô¢gƒi@?#!¢õ·úÞ ?"Zvòïlû·ÝÎßOl·¾Ú~ N®Ù¿üKÿëD_tÙ¯i©Ú���€iÂh� Çà4¤¡Í��À´a4�cpaÒÐæ���`Ú0�È180ihs���0m��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@ŽÁi„IC›��€iÃh� ÇŒÂi¼w´gon\²3s[ýè‹p)@:���0m��ä˜áÆC«/Ÿô·3— ¡âßlûÒWlîì†5îýÉöÖÎyûõ Ûhü9ü\ܳ»_ZÝW´ß²ûlyí†m7þ¿¶]yÅöë¶}–b ˶VÛ´½£ÏÃm~aGõÇÓ×ÙÂ¥mûÌ_ÿ3k¼wÅ–´|ÁÎ\ª[ãî=ÿ“îh¿·lmù¾`{g.[½l- ˱Oí;���À4a4�cFã4Þõœâ3Þ¶ò T„‰ï¬;匭íÝ ?ÿÌõËvÆ6l;rô½åÛvéÌ‚Í\³=ÿ0þlo$¾DÔ×–mÁÎÚåí¦Eý۶qÖÛFǹøÌno<j Ëu;²Ï­Y_±……Gmã¶÷ûwkË÷Ù£uköÐ*î5ëöèÂ}¶¼ñ[Û[X±zÓ‰%ýŽ= T���À´a4�cÊ'TQAä‚Ü~ݳ»{Wü(Šn¢@ ¸õ]”Dš³ÿ¹m¯ibAÚ¹øbÏÖ¯ÛÑgÛviaÁÎnÜŽŽ{ ;;÷»´ýoá’$ñh‰pQ(Š´¢4z{~@¨���€iÃh� Ç”O¨ô“k{ö…ݳ϶/Û‚‹ˆ¢z¥Cèûk„ áÒ+â)iB…öãíMÿïpŸ’ÛìøâÆ\x\ŽPŒX¸lÛŸI½èqì9¡���¦ £�€“Õi¼wtÓ^½tÖ_¿³¦BŠPq·aïEéŠ:X¶+7‚ÏíèæOÂú gíÒÆk¶¶¶iGý>»wÇêÞ—ˆ`H"qá?ÚrýÐÿK‘ çBçÿ‹½5;©}Éì¼÷*Ò¶™"TøûýTøw7Q'ü^—} ~çdt\Éýë~ìy¡���¦ £�€“Åil¯KŸˆœà¤ó¦)œ¹b{wïÙ½£÷ìr¼öƒpÎs®ÿäÛîÞ´µKobD¯Ï2 ÝpNýœÍùu"²Ð_¨ðV‹nºcwB…–Å-ñyáè¶\¸ýH¦†t[žot>����¦ £�€Óßi Ó âµîÞ¶ú¥³±:]„Šè;áß¡PD(Zb»c¦‹^Ÿ Ǥ… ÷·Ç½¦m_^mÿ¼#r"‹P‘Ü„ ���€ãÀh� ÇôwCº§sß-A3iÔmÃ¥Œ8ç\QŠ°Ð²3—lãÍ=;r¾y¯Ï†ÂÕ†ð¶]zÒ_¨È”úáñÅÞÛö¶ÿ÷8S?ŠB���LF#��9&³PÑ3Ý"é|ß³»º]:sÒÎ\ºfõí=ÛÖçq'ünökka- ‰AšHßφ!,HÙ»˜fœ~B€+¦¹`gÖnzgA¤ -œ`’ØÍr2žN“ e¦è¼§Faä„ ���˜6ŒF��rL§1LÛðÖ[Xþ‰Ý<rbÅçÖ¬_ g²H¡ ÐQÃ"5Zà3kÔ/Û™ŽhÑë³ã¦±èXºLOªß¼ýê+ö¦/Êô*Ž1=©#EtÍô¤Å�¡���¦ £�€“Åi Ši†Ñ 1k9ûNÌ£º Á犮زµåû¼ÏµúOlmã'v9rÒ]qÎÐI?z³ûgCÓ ñëE©( ËkVßs3‘xíY}í²U¶›á2'l´ ÁzáŒ& Þ1ÝŽÉ™¦@•ȳb î»wkÞùiO˜ø²ö¢¦ŸÙíG½m q.¦„Î=���À4a4�c²9q±A"…ç,¯ÕmÏ®pNÀSß œhÿï³véÕ_Úö59üÞ÷®ìÚQsÓÖÖþÑj‘³¿lkï5‚Ô‰£ŸB¨ðQ팱ã‘é˜nØv#¢"™]Lõ3꿌ütщõºÖöpÑ"ZO¿½Õ^<4E¨®ƒRj‚ ËWì=·¿Bû���0M��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@ŽÁi„IC›��€iÃh� Çà4¤¡Í��À´a4�cpaÒÐæ���`Ú0�È180ihs���0m��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@ŽÁi„IC›��€iÃh� Çà4¤¡Í��À´a4�cpaÒÐæ���`Ú0�È180ihs���0m��äœF˜4´9���˜6ŒF��r N#LÚ���LF#��9§& m���¦ £�€ƒÓ“†6���Ó†Ñ�@Ž‘Óˆa“6���€iÂh��JÁÿøG{öÙgí«_ýªïlúé§öÓŸþÔþê¯þÊ_öãÿØvwwí¿ÿ÷ÿ~����òB��žz½î‹&$D$£$b¼û¡Ïô¯þÖr����È��PX†1!áAŽ^é 2Y¡ EZèû8´-����˜>��P8 ñ£ýÈ$:$é%T$ùè£:RD´Œ���€é€P��…Bi\šGƒq•¡”Ç{Ì߆ÄRD����& B��‚niiW¨ˆãRD\ä†Ä ‰#ý~����†¡��rM¿44F!T$Q:ˆÒB$–È\Š����Œ„ ��È-.ÍC¢À 5#Æ!TÄQT…ö-ž""…���€áA¨��€ÜáÒ<$g6Žq q$N¸ý®öYu-H���8��âiröË$…Š8Šúp)":‰-ªkAŠ���@v*�� H˜8NšGÓ*’(ªBB…¢,tl.EdØã���(3��0U”Ú!Gþ¸iiäE¨ˆ£h‰1šµ$ž"B] ���€v*��`*(ªÀ¥H “æ‘F…Š8:vEV$SDF%Ô����„ ��˜8£LóH#ïBE *$X¸óBŠ���Ì*��01Æ‘æ‘FÑ„Š8.EDçHÇ¡º¤ˆ���À,P��c'žæQ¯×Ã¥ã£ÈBE—"âfB‘x¡È ¦>��€2ƒP��cÅ¥yÈÙžTT@Y„Š$šæ4™"¢e¤ˆ���@™@¨��€±àÒ<äTOºHdY…Š8ŠªPtJ<EDѤˆ���@ÑA¨��€‘2é44fA¨ˆ#qÂ¥ˆèØ%^èÜ“"���E¡��F†œåI§y¤1kBE¥ƒ8±H-.E���  T��ÀÐèÍý³Ï>;•44f]¨ˆ£k£ºвp"SŸ��@ža$��ÇFήœài¦y¤P‘Ž¢\TÜ4ž"¢¿I��€<ÁH��ŽE^Ò<Ò@¨èD¦dŠˆD§<DÄ���ÀlÃH��"oii T Ž®erêSRD���`0’�€L¸4‰�Jóȳ‹P1.ED‚”Î¥þÕßy‹œ��€rÂH��úâÒ<ä°ÁYE¨¤tý•âO¡®���Œ Fr��ЕxšG‘¦·D¨jÉ-#E���F#9��è@N§Ò;Šæ‘BÅd¥”Í¢s®¨ RD���`XÉ�@z;®·åEIóH¡bò¨­¸‰¹H��€Aa$��>r4‹˜æ‘BÅôQRZˆÚ“Ì¥ˆ����ôƒ‘�ÀŒSô44*ò…¢*Ô¶â)"L} ���Ý`$�0Ô!Í# „Šü¢v¦:ñýMŠ���8É�Ì .ÍC³6”1¡¢(¢Â¥ˆÄ§>%E��`¶a$�0CÄÓ<ä–5ô¡¢˜(ª">õ))"���³ #9�€!žæQö0{„ŠâãRDÔ^u=õ/SŸ��ÌŒä��JN<ÍCo§g„Šr¡ˆ µÝdŠH£Ñ×���€2ÁH� Ä(ÍCŽ]™Ó<Ò@¨(7(â)"nêSRD���Ê#9�€"GnVÒ<Ò@¨˜Ô¾•Ÿú”��€bÃH� DÈ9“£6Kii TÌ&.EÄÝ/yÁÔ§���Å‚‘�@I˜Õ44*@¸©O“)"���oÉ�œYOóH¡’èÞ˜OQô)"���ùƒ‘�@A‰§y('Z T@/t︵‰1ú���ò#9�€âÒ<ÊÎL T@Vtÿ¸ÝSnêSRD���¦#9�€áÒ<ôXÿ‡t*à¸(ªBB…î1 .EA��`r0’�(�r’HóÈBŒ¥ˆè~‹§ˆ0õ)��Àøa$�s䑿10jtï)²"™"Bd��Àèa$�Sä�é .iƒƒPãF÷¤„ŠøÔ§¤ˆ���ŒFr��9CŽŽ{kKšÇñ@¨€IâRD$*ªíiª`RD���Ž#9�€AšÇh@¨€iáRD\M‰м`êS��€ì0’�È.ÍCaä¤y BäMsšLÑ2„H��€î0’�˜"ñ4z½.…aA¨€<¢¨ Ýç.EÄM}JŠ��@;Œä��¦„K󳂣2Z* ïèžw)"j¯/$b"��€P�0qHó?P4”¢è*õ 2—"��0‹0’�˜JóP®:i㡊Œ¢*ÔWHÐtQWL} ��³#9�€ 'ƒ4ÉPeAý…ÒÄâ)"ú›��(3Œä��ƈœ‰gŸ}–4 ƒPeD.ED§úE^"��eƒ‘�À Ícº TÀ, ñ39õ))"��PÉ�ŒÒ<¦BÌ.ED\jÿúWÓ�@a$�0"âi„bO„ ˜eQ!Á4™"B] ��( Œä��†Ä¥yÈ9Vša×Ó¡ …„ÓdŠˆ–ÑW�@^a$�0.ÍC‘„Xç„ €tU¡”Í¢ûD)j¤ˆ��@Þ`$�p 4¨'Í#¿ T�ôÇ¥ˆÄ§>%E��ò�#9�€ÐÀ^éÔ“æ‘_*�G¢«ÒB$ÀÊ\Š��À¤a$� Ø5x'Í#ÿ T� ‡¢*$ÆÆSD}Aß��“€‘�@Hó(�£C} êXÄSDô7)"��0.É�t4â‚P0Ôº‘øÔ§ˆ¸��0JÉ�¤@šG±A¨�˜ ŠªP¡( .Ea��†‘�@ —æ¡·ÛPL*�&KQª{PÿŽrêSõɤ›��ÌŒä��<âiz;ÈÛÀbƒP0]Ô‡JXH¦ˆ4pÁq"2b�@ùa$�3O<̓p9@¨�È($T¨¯•Ø c­§ûZ†X�P~ÉÀÌ¢pdåS“æQ>*�ò‹D¥„ħ>í—""AÙ ˆ��凑�Ì$JóÐ@—4r‚PP \Šˆ%^¨_NŠŠÀˆ ˆ��冑�Ì ?&Í£ü T�7õi<EDËôÿ¤P!C¬��('Œä�`& Íc¶�ÅF„¢ßΟ?ß!PÄ ±� |0’€ÒCšÇì!ç�Ê›‘©—!V��” Fr�PZ\š‡ržÀÎr\� ¸¢›ý ±� <0’€ÒOóP%y˜=ä´�@ñQž$z™ú}Õ´��€bÃH�J…KóP6Ò<f9,�P|TS()FÄMѦÕ÷k]EÒ�@ña$�¥ žæÁ@äÀ�@ñ‘¡ûY35I€– ¡ˆ R<��Ê #9�(4ŠšÐà•4ˆƒP���P\É@a‘0Aš¤P���P\É@áPj‡R<Hó€n T����Fr�PHó€¬ T����Fr�P\š‡ «‘æý@¨����(.Œä� ׸4ÍèAšd¡��� ¸0’€\OóÐtt�ƒ€P���P\É@yüñ —d¡��� ¸0’€Üðé§Ÿ’æ#¡��� ¸0’€©£4Ÿþô§¤yÀÈ@¨����(.Œä�`ªìîî’æ#¡�òÁ=»»wÅÎÌÝgÖïx Š÷ýFÝ.Yðûµ¹…e»róèÛ�(Œä�`*(ÍãÙgŸ%ÍÆB”Ÿ»¶·v&p^#;iËõÃðsqhõ哱ÏÏØÚÞÝð³s·aï­-ÛBxÜ ËkVßû½Ý~í†í}ñ…Õ“NÓúµ7÷ì¨C øÌï]±å…pÝ…e[«ïYóvÝ^íz^‡*î5ëöèÉ«7?·{GïÙe g7¬R�%‡‘�LÒ<`ȉ�(?ž|ûÕÐq>gk{ —Ǹ״íËgmîÌe«7> –˜{w¬þè}Þñ®ÚöÑçZ`w[¶¶ì-;¹f{_«Ù½Û¶qÖsúãËìs;Ú«ëJˆˆ¶|Ö¬¯ØÂÜY»¼Ý ‡H—�ŠQ�0ƒ0’€‰áÒ<IAšŒ„ ˜þloxmþ+viûßÂeqþͶ/ëòYùøboÍNvD–xܽikç®ÄD‰0Ú¤M¨q⎢+­[S"Á{¶vrÎæ–ëv¬ò'Û[{|LBE¸¿ �P~ÉÀ؉§y|ôÑGáR€ñP³„Ÿ°sªã|¶m—N^¶íÏfã•| T¤‹?[ÃOýÿì%T ~]ˆP�rBÅB†ç^£WêǸ¨„ �˜AÉÀØpir•æ¡¿&BÌŠšøŠ×î¿a?‡Ë„¢-¾igÖnZ›}ïÈö^½dg¼ûÄXþ‰ÝŒ¥8í½m—Îzò5Û®_öÖ[°3—ßók6Ü;Ú³z¬þÃÜ™Kž“®âŽñš."^#ãq«{¿q·ñK«éû'W­¾û“¨ÞÃÂò{o©)‘À mª6E·Â“}„ŠØñœ\Û³/üȉsÁ±„µ):kX¤ sýæ5»tæ¾(ÊCçðÍ ïü{¿}óp×®t¤št©£îk÷k��PÉÀXPäi0-4x˜%î56ì¬×î.m[äîûoä¿™"^|Ãs¶µÛÞš±4‡N;gk7où5ü…Ï$œŒ‰ÎÉvu\J¼fƒQ·úá¿Q þ¶=Ç}ã·vW‡«³qæŠíÝÞÝníWð[é"H?¡"&¸ˆ†{GvóJL `ñ^£]j#.8¸t”¸x³`g.Õ­ásêõKK7ñ…˜^×�� 0’€‘"Q‚4˜6r�f —&¥&„³M$ 1¦¤NrlVŠ£º-Ë‘nû®!Ú£6\ÚI°®sÌãB…‹LPD…ÂÒŠXºmw«³q ÉP_kÍÐ!aäÊn, âB…O¢à¦gí)tÖÍHùí4Q¢cY–k.�(8Œä�`$(­Cé´‘æÓFí`¶¸gŸm_¶½¥÷S=Éð—vvãvû[v'ÄÚP˜RZ·;èÝ{! !âÏý…Š.ÛéZS¸ý‰[Û¾õ -Í%>Eh?¡"™ú‘D‚ÅkvÉ¥™¤Õ P‘å¤ �@á`$�C£È EPæyAŽÀÌáê3,\¶íÃ÷ºÑ #-¢TÏìöÆ£¶fè%Tt8ÃñåÓ*¾Ø{Å*Qî˜ã©Ýœþ¨ÖE8íë{v¥KËpÄÏy—‚¥#*z^ƒ´ƒ�(Œä�àØæy¡f—8ómõâøu)¾igÎȹõÖMÖZH*ܶãQ mR?R‚ô”†ã Qà¾n³Ÿ,d*ºMOz_çŒQ މY®A¸ � à0’€!ÍòŽÚ&À,Õ+èZïáskÖWì¾Ôt†T¡ÂÛöÑ{vÙX¶+75ËÄçv´½jg\Ôâ3ÚÒO>³Æ{Wbu"$`|¾ý?k—ê·½uîÙÝFÝ.©@drv’cˆ*R¹aÛ®€æÝ†½§Y2\Q‘Z+£½þÄÂò«vÛ÷t¢Á™K¶±íDw|®0h­s¥á¸ßŽ‹¡Ò&6¤,ë ��Ê#9�ˆxšÇ§Ÿ~.È0»ô{ÃïÒœxÐ2…Ü­¯zŽ~ly"âàÞÑM{US—FßILŸEÄw¦vs팿^ÍwðÃß_ø¦]zÊmç¬]zõf¶é>û¤~4S ^º™?â3q¤™DŽkVĈ/‚Ô?%§í9óGçoüášýP‚G´ìqïüÝhOm9ùC«ßèÜGW+£ï5��(Œä� .ÍCSŽîîî†Kò‰ï�†{ßî;K/9Jz¤\���„0’€žÄÓ<~úÓŸ’æ…@í�RPÄC¥ÒJˆPÁÉíÑä,!#¡��úÃH�ºÒh4Hó€B‚PFXŒ1%]ÁO'X{Íö\M†q‘VŸ�� #9�è@i?úÑHó€Â‚PÐ…» Û®­Å \z&ᢾ7’=é˜f”é4� Fr�ІÒ<$PæE¡��� ¸0’�Ò< L T����Fr�3iPF*����Š #9€†4(+����Å…‘À âÒ<{ì1ÿÿ�e¡��� ¸0’˜!âiï¾ûn¸ | T�”EJl¥]�ÉÌ.ÍãÇ?þ11(=�Å }ô‘ÿ¼ªÕjöOÿôOöüóÏÛÓO?mßùÎwì‘Gñïí¸]¼x±ÃVVVì‰'žèkißMnÿܹsþo?õÔSþ~hŸ~ñ‹_øû¨ºN��ã‘@ÉÑ�J)¤yÀ,!�¦säÅ÷ÆoøŽ¾$8Aàoþæo"¡Z­FöÖ[où‚€³£££‰Ú‡~ýöûï¿ß¶oÏ=÷\$x¸ãøò—¿ì›Žqcc#5Üy@Ð��È#9€’¢Á¢'Hó€Y¡`28\Îx\„pŽûƒ>è;órêƒ/‡_Ž¿D€4q ÈöñÇG†;Þ_|Ñ?û·E‡(JCb†E’ d��´`$PB$Læ³L„ŠO?ý4rã&HNá0¦m¤m;i�µGµEÈÁVä@\ˆPý#9å.B{š#¦s$sbFRÈØsõêUÿy®{‘g9�Ì�%BƒÒ<�¦#T¨X­sð%‰‡Ï>ûl›9Ç$iš™'¹®Lar»ƒš¶‘¶í¸©éµ?ñíñ6¸<èêZ¾óÎ;¾£ìêB8ABNµ"""Æg¿ÿýï}ãõ×_÷ïÕo}ë[þ5PªŒD"ÕïÐ=§>� ¬ T�”� ,Ió�h¡Aý(qƒî/9æ?ýéO#‡]÷~OÿÆy™Ö‹;ôîíhÜŠâÜÇ#<\ÁCgîxud9ô·ûÜ}ò‡ÚŸ®§Rœ(!ÇX²e9ÌrœÓjl²¦TE¬¸Œ/}éK~d‹ ŽJXÒ= �P*� ŽKóР’·+�Y… ÷ö8îx;§[IÇ[‚`Òùæ¾k'yN¨ãΧΥΣm`²¨½J|ˆGK¨ˆ¥œ_-Os±üšÄ Jª¢¨ ßÿþ÷.� ð T� ð5à×àŸÁ>@;N¨Ð½!sâ‚Kyˆ‹N˜pëÈÁÖwä[‰+\z âÅøˆ n– „‰òšRru¡¾á�Š B@Áˆ§yÈ©˜Uä€É©•³¥{A÷…çü:XËô™ÖѺˆù#.^8IŽ––q­#-•abv-M¸h¥¶@4�ä„ €¡A;i0+t"zECh}™>ƒââ¢�œpáú=„‹t&°¬OQ EÙH¸P�ÈŒä� €æÎA“PÔ¶Õ¦"úPQ.œp!±B¢…"e$Z̲`«{Gâ„Þík_³_|aØÔf$j©€ªÚÒÿþ¿ÿïˆ� Éä…ðªiPd\d„Úp²°¢þÕßnvŒ¬BD?*Ê) [NÌ’³¥þ²ìHœ¸~ýºÿ܉zCžæ€bØ ¦4E[ Z�@`$S4ð&ÍŠ‚#ô–[‚ƒœGW+BíX˱tbĸÃ÷*f‰.ÒB×\ÿŽBèʺ·jµš=ôÐC~¨>â6 KŠJ)Û½�ù†‘@Î ÍòŒCµK .UC¢{³íĽ…›fûE¨˜=äЫí9a¬èý§ö_Ρ`ÞÿýT‡ÃÆm-”¢(ž .øâ �À¸a$\š‡¥lL'H(BÂ¥kÈL Z'!÷³‹Úc‘ 9r=!çPNbšóˆaÓ0Í "ÁBéGo¼ñF.û�(Œä�r€KóРš4˜4räÔåÜÅ ¥nĉ"µM„ (’`¡}Uz‡œ?…ÚËLs1,/¦gÆO<á§…¨n c�5Œä�¦H<̓‚U0n4T;“ó¦PrWÐR‚„þÖr}>îú“�¡qÁBí<O•ö套^ò=M)ç/Í)ݼš"~t_©ÏUª‚�Œ Fr�S@çxš¡“0j$6È鉧m¸7ËZ¦ÏÊ Ht¡’¨ŸU„îõ»ÓDÎ\¼þéXÑMmX…^•²¤¶]æç �LFr�Fo¬Ý”Œ¼y€a‘ó¥vÕ’æfÚP‹GIÌZ[C¨€nè~q‘l“NA ÀÊn¿ÿýïýÚ*,ž~úé\§\@¾a$0!4@%͆AmÈ¥n¸¶$‡Gÿ—H!±BƒB"t* ?Š*Rt…îqã 7½(Vv‹ O=õ�00Œä�ÆŒœF9–rœHó€¬¸Ô 'JÄS7´¬ì©ÂPYP¬($Ù¸úfÍŒ (ä¼¥9uVV‹ ë@VÉŒÒ< N”põ$ädÇE‰YLÝ„Šl(Ç bÎÔþË™›Æ™¾_tÁLŽ“ŽKÇ:Êcѹy衇üY<tŽÓœ8 ›S‘ ÆJ´{çw»� ;Œä�Æ�iÐ 9/®ž„ÚˆjµWO‚ÔÑ€PÑN<mHm-^ËDí0.>È©V;L3µ]·žÖ´ mKÛtB†Ö-š¸¦ý–@8lŸ­û×¥y¼þúë©N†Íª©‘x'Oý�@7ÉŒ P5ØÕ ]ƒxÎÙÆ9vrÞœc¨%ÆÏ¬ jWr¸]¤€‹Ðq3¾ŒÚAÐï¹ö Òoë:7:Wú÷8|øá‡þcÝã¤y`Xw“ˆG:�ô¡`Dh îÞNR;`öÐ5O%ô·–óæh²Ì¢PáÚ  Ôþ$ˆM³?R»—Páî 9ðÚÇ<G[hŸµ¯ƒÜ³r´\Åû￟ê˜aÖnóVVVìÂ… Œ›� „ €!qiü…ƒb¡•®uòÍq<R¦Ë¬êÔæ\Ô„„1µÍ<¾¡Ô¾jßtŸh_µÏy-´ŸÚÇ,ΓÖQûO<A†ÃTlS‘H¿þõ¯Ã» ��¡`(Hó(?r¢\n¿¤dú¿%¸öù£ÌB…Ú›i'’Iœ(¢8¦ûJ¢…ŽAÿæ-=$‹X¡=´ÿÔ¢À°áL÷© �¡àÈ) Í£|hp¤k+BŽ“®±œ'JÈ‘ÊãÛ_褌B…ú‰rž•J¡}ô:EVè˜tl~óÒ¯:±"í<Ë¡RQ@Õ¥Hs¼0 Ì‘¤{J© ˆ�€P0�rR]ز°Plä ÉA’ó%ä(éú"B—2 ÏÔ.ÕFÕ6Ë,–ÅŘ¼ÁêóuÞr œHAª†ÖtOéžC¬��„ €Œèº{ÛÇó˜¸h 9@º–rü4 ’XQÄÐyèN„ ®­ªÝÎêc]Ÿ+ábšâŒ~[íIÿj¿¾ýío#R`ÃÛÁŽUWNûmknî”-­¾eûÍ”õfÔ+��¡ ¤y9JÕ°äfп.ZbšŽŒŸ" j›.ª@Îú,ÔݹÐõœ¦H¬ëðä“OúŽÓsÏ=‡H gÍßXõü¢¯þÆšÍ[V»(Áâ![ßýCûz»v£²dó¾˜1góK«nýß¶óÒ+¶uè}¾_µ¥ð³T›_²ÊµŸÙÖþöí5l÷ƪ-ÍÇÖ«nÙ­ª]Ý:H¬;=sbc/€Ù¡   ë!)g4ü£Œ"#tÍ’µ%$6ñVf¶Ðõ/j£rƵïÓŽ"ÈÓoô{ÿãÿø?Úßþíߦ:T6ˆnUìDš07_Ì8es‹ÏXÍšv°ûs«,yËNT¡Â_÷¶»þ×o,Z%&24÷·¬‰§íbí–5ýÏîØ­êoylY$ˆ´o#¦gúW¾òžá�3B@ ñcŽùC×$žÆ!ÇNâ„®—Ä Þ¾@Ñ„ µ[õ9”#PtG÷½îyÝ%D5)Ξ=ëOAšæLaXv;´ýêÃ^õ°U÷S>,3NØRu¯ý³ƒM«<°*ÜöÒD†;¶_{Æ%VÌ_°ê­;vt¸e•ÞßKUÛo[÷Ûª<œ;¡Bæ"+�`¶@¨�ˆáÒ<”" ÿC>㦨 É4fâ€4Š"THTS[V¿CŸ“Ý÷:g-Æ}ÿÿú׿ö§M$ݹˆ,BŜ͟¯Ú­¶ÚÞ÷]ê‡ÿw/¡B&â¿Oœ_©Yà N¸ˆ­ÛÜÍWêGÜTF‚!�Ì�èº4½Ù„éâ¢%Ü5qoš]@?ò.T(*HB›Ú¶Ú5 Ž;‡ºÖ:‡ãˆ~“ôå/ÙJÓœ§ÂXsß¶®¯ÙÊâi«lîÚæjZJ@,µÀÿL5^°Í°¾R ®¯¯Ø¢ìÝZ… çÏÛúÎ'íßÒ‚ßoîoÚÕ¨pä¼-®¼ÕMhÞªÚùù4‡<´LûîY¢žƒê.¬nîûŸkßÓ¬=åBÛ[ñœÿ`?ÒkJt9±8ï¯Ô¦·Ñaý„Š–è¤Œ´„ W›¢E<%~ík_³wÞy'¼; ì TÀÌãB®Ió˜‰\ÑK—Æ¡7̺L ÇEí(¯¨];ñh áQ1Žt=yä«V«©ŽSqÌ9²¡c¼xÑsÖvÔܱõÓž#<Ñj¦5j¶2ï9â•M;ˆ¥ œ¨lÙáÑžU—N„Û³^µÝƒf$2Ì}õA[ùf­hÚÁÎU¿H£ÿöÞû}ÓáoêïývQøéuÛõäÞBEÆ}?úÕVî÷>_µ-í—û ß1ß¾·ï«g¾¸pÂ/Þðÿæþ[¶ê qQåÀ¶*‹Þ²Þ²Ö÷ƒãŸ_Zµá¾´¬¿PÑHÂßlîÇÏ$XÜØõ®{Êwsd~ø¡Ý4É´/�˜0³èͼboé'‡œ ‰C"äXh$'CoD5ø@,‚Q v•7$J8‡š>gôÄ Qô#µšç¸¯¬¤:Lų4g6á0‡BÅéõÀ¡öÿvB…ÖÅ€6;âÅÛj ¸4‡Ð!n³>Å$#˰ïnß"!ü;Ú¯Iì»[¿ý³H‰ö-»Pá›"Jª•Ö S™C¨ð—ß±ý­jך¼Ú믿nçÎ ïR�(30sh�+'YZÒ<ƋεKãpÑrÒäHèÜ-ãBm-OH„SŸ£È!ĸñ¡s«þEýÌ0ý‹D%µ!½ÁMs–ŠgYœýp݃]«U•j1–P‘¶~?g?øÜE(D¿1 °ïšv³Vµu—ªí×$ö=e{ñåÑo(T8“`qUé+NS›úŸõ*ÚS?’ŸK°x)ºÞ]SprdJQí�(70Sæ1^4¸§è%äµ½¼àjQ®<9Ô׫ WŒ~þùçíÅ_Lu’ŠiYœ}Ïɯ^ôáÓ¶²^µÚ¯nøNû(„ŠVŠF¸Î@–eßU_£ê9Û'lqeͪµ-«éóÙ÷=)Ht[žM¨8Üú{{²ö»Ärï8·V}±¢% ô*\MŠ0­Ç;ÆÕ'SÄWc¨k5Ó8CQŒã�Ê B̤yŒ‡¸0‘Lãà<Ã4ɃP¡ûÃõ;ˆt“G.‚k‡F}×_üÅ_”l–~ÎþkÔ.ÚüÜý¶âœãÐiN¨h¥O´×W¸c·ª«vuT©ašJËy?J¨tßÝúñhÏ\=S?q*-º¡ãX{ ]¦'=Õ9ãG”S�¡B¦´¬7Þx#¼k Œ T@©ÑàÔ¥yPYx’„Î+iG¦-TÄS=`z'äÂ… öÖ[o¥:GÅ5çDÇ„ˆ¨nƒj*„ήs²¶{c5¨‹°ô÷V]}Ás^ÿ5¶~è¤wµô–…Žt²X¦îɸ¹ƒÞÅ4eýöÝÛ—°C°øì%çm½ú‚Uj¿˾·ö1°¨Øf4㈠°ÊÖ'áz‰}OlÃY®¡âŸëVs"‰›ÙÄŸ­Ä 'îü´ m³Ä×wbÌ⊭×\Mw½OÙÒú¹/ª)ÓXD3ò�@yA¨€ÒâÒ<4HåmæñÐÀ^çQçPçaŠ‚œ‰iAªGþPŸ¥6¡{¡g…fHsŒŠkî ¾s´OØRõŸÃt·Ìsrkÿ§­GSt®ØÕͶæ;òžÓýVÕ¾'ç6¾þÛµÀá–=lÕ­WÓo*jàNbÚS9ßY§'͸ï[·lgý|8‹Åi[¹Z·ÚZݰô½gléß¹uÃõG´ïiÖ>©w\ñ©EÓ¦'GtÄ,Hý¸•Rð2Ý‘:ÝiÌ$FTëþ,'ѶƒÔO’Ó¨d温Vý,@yA¨€ÒáÒ<ôôƒÁ@˜€² ÷¤ÑÛ{¥>‘ê‘Oԇ鹠ˆ°nh¦õyiN†aù2Í�rõêÕðP¥4Á‘&Ü ^!•8ZPd&-Tè~‘@¡ûgz0Ytm\Ý´ëôÐCÙû￟êa–/ûøãýôú\€r‚P¥@޵{ûƒÝ½QLNŠ0ed’B…î+õ?Ô£(ê÷$VÄ#Åôÿò¥}`X¹í[ßú–?†€òP…FK9ݤy¤£óCÄÌ"“*œHÊ@¹xH´Õµsb…®ásÏ=—ê a–O«V«~Ê�”„ ($ ósëHóh00 ¡B÷šî3DÒ⢾QmEÿÊÙ‘Ó“æ a–O£N@yA¨€Â¡¥œÒ<‚¼ø¸0!C˜€YBí\QUYM÷Ê(Ð}&!н‡â¢k¨¾óÑGE¨À°‚™Æ;O>ùdx7@™@¨€Â Á¤YNóS¦‡²s’œ`#±‡ fõ z+žÅŽ¥{KßsV©Tìý_ÿWÿM^|¹3ÝP,tÿÃøþ5Ms†0 ˧}øá‡vîܹðN€2P¹AsaËOâÒ<œ“1KÕ&�ú#á2)H¤™îŸãôú޾›¶Í4S?Åã;ßùŽßߦ9C†å×Ôï@ùàΆ\ Á¡4râh¹–éé,¤2È!r‚„ „ €þd‰ªF@ÐwÓ¶™´ãŠ!0}ž~úéÙš´¹o[××leñ”-U÷Ò×Á°šÆ‰<òHx@™@¨€©ãD gz;*§Ü¥yÈq/3:^9Aš*OǯãÖßèÈN¿¨Ša„¬QDS—­QqhûÕ‡Ã6|"BE£f+óóvz}Çš›VYœ·¹Óëö«ÍŠHÜssKUÛ¾?–ÀNT¶ì0¾í¬a»7Vmi^Ûš·Å•ªí4SÖ‹[Óvn•¥SÁ>,^´ên#öùזּr¿<»ÍOl«ò€·ÞC¶¾û‡Ø:XVÓò©§ž ïb�(0U9PÈÜ›Q ø§ýfR¿ŸœkX/€)1F©-dx p|zEUŒB@Ð6Ò¶íŒhŠbóÆoÌt1ÍÃ-‰�9*ö«¶4 þÿ½{ìDŶ½Ï>°u_˜·Åʦt|ÿŽíמ±Å¹Ó¶RÝIù<«Ý±[Õ 6?ÞÖwÑïΟ¯Ú­fÚú5oUíüü)[ZÿÀûí†í¬Ÿ÷¶qÁª·î„ëìYuéD(T„ÿŸ[´ÊÖAÛv°l¦{V"#�”„ ˜i"…ìúŸþ§\¤yHœpéÃÇ“ãOç3#‘Bof!`Rt‹ª•€ môŠª 𢨍Ÿ~â‰'R¡Y°\ ~DÅý¶Rû5wlýô|[äDswÝN{÷ÜüJÍñïùÖ´Fí¢Hýl�‹Gu„Ë‚ß ÷+¾ndñh‰pY¸ÿ­} Ö þþƒí®?äõ[uÿ0¶,«½øâ‹þÔÂ�P>*`âh°/G=m ïlÚo%%RÄíï tKç ÎÀxI‹ª¥€Ð-ª‚hŠâ#áøK_ú’ýþ÷¿OuˆÊn¹*|çþte8öm)ÍßXõü)›k‹Tp¦õè!&d±@ì˜OF:tˆ óÅdºI(FÌ_´ZCi#ÁßÁ:áï¸h‘ø¶°Löµ¯}­ô)Â�³ BL äóÞ˦ùБÈöÖ´¤s�äƒdTŨm+­PÄŸ .Ø[o½•êßîØþÖK¶¢z~»mOè*âõd§liõ-Û"ömsuÉsæ½ÏWlýÚ¬r=ønsÿ-[ué+kv­ò»F ©s}R(”ñXe Çþá„ðà„„öˆ™õ°¸j[ñZ»v£î«l~ÉV7÷ýï5÷·ìúúŠ-ηõÚ+ÁùY¼`+KÿÞ[7é¦jtÒÅW7Éúû±híïÃF̨ijÒ/ùËáÝ �e¡&FV‘B&'$ {ÆMCÇB:@>‰GUŒ##-ª‚û¾¼óÎ;öÜsÏ¥:EŶD½…#Wı•ÆÐîd;!àϹþÄŽš·¬vñ´·¾s¶ÃÏ#A i[/ØŠÿ]E4|5V?B¿õÝÈáÏ&Td0—E*h¹D¯'Ä‹0#Ü׿þ »(1BbÃpþ}¬šÿl;þyúwÁ²¶mËB¡¢c¹Ì ÉÔn˱aMiW¯^ ï^�(0’©ýLÎÿ¤é%RÈ$žè8œØ¢Iç�È.ªbÔÑŽdTÑåA‚“®iéÒ?|§þDÌ×ÌU[Y¼ßÎWã/K*Ülîo'TØVe1ˆ¤¨í¶¬<Ü²Ê ER¬[­m¶‹Q›«ïp*:†#†¯'fÐ…ЍnDøwá ZÆgÞè9‘E¨HÆD¨—)íƒ1@yA¨€‰àj6èMgVÁb’o(%B¤íCÜ$LhŸHç�È?®.̸ˆGUMQ.ž|òÉòÍþáϜѻþDzÚ‚ºUýÔµ÷VDÅÁÖj¸,H︾¤R´¢5ôÙi[YͶö“u$FdaMˆ Zâ0Sâ…,Û¬a»µª­¯(2ÄûN‡PO󅘱¤~´;žéåÒ¹sç»�ÊBLçð÷/ôšÝfI3 €b ·lã¼_]TÑåCÂzéŠj†S|öJ·èp²v¬*§^QÕºýªö=ï󸳈עÚñéB% ¼b¿N…> SHÂßÅSX~Õ¥ˆ¦‹9á *ÕÚ–Õ$Bô*’%á¶üh‘n³x–2SH$z¤Fa`Ç5ESüú׿ïZ�(#’âŸëTÈÑD¤iÿ��„ú*¢)ʉòÞUw(ÍA*¤¹ÈƒŽ‚˜¿±êêÏüi?Û…Š0="æ\Ÿw‰ p¢FG‚ æÛ¦¥¹©Jýçtš{K\…ƒžB…ûÞ8¦'ņ5¼%š ü TÀÌ"¡¢_TGÒx{ �P~ô|ÐlŠìKs”Šga1ÍŽçš«ïà"œcîj1„ÓF³fœ°¥õ—mµrÃvª•X´AÙà ¿±êÅ—ZŽº_7¢å¨¬˜¦37U©w<©b@[4‰„“Ÿ‡‘çm½ú‚Uj[éBE²�éÁ¶î}¯m¿Ý±Å–ÇwÊ;OØÁQÃvÖÏ{ÛH›F;®)šbRQ·�0=*�bôKI™F‘O��˜<o¼ñ†}ë[ßJu”Ši‰éFç—¬Rݲý¦«¡ÐzÖ¨lÚ';WÃuUƒâ%Û¬½àG.Ì/½`›ûÿÍö¯ÿÀ*×^ŽÒ;æ—Ví†_<sÏ®W~`×®UÂï{N{åç¶N:r¡"YºE:„bl§måjÝjkAÎ¥ï=cKÿ®uÜu$¼sV½Öâh?ßR„ж(’¶óâ>dž±×_ÝŸF�ÊB@’âÅ8óÞ� ?È!Òˆi†a“µ?üИé`6@¨����HABµR@ÞÿýTÇ Ã°ÉØÇì¹¥€&Àì€P���ÐEÔÉAÒÛÜ4 ðñšfàQÖÆÆFxWÀ,€P���ЃZ­æ;J¥š²à bÏ=÷œ=ýôÓáÝ�³B���@žzê)Ä ›°iš`ÕŠ¡>ÀìP���Ð9JÏ?ÿ<b†MÈ)�f„ ���€Œ\½z±ÃÆhº·¾ùÍo"R�Ì8П»7míÌ‚-<Z·æ½pY)Ê~Š»·­~él8oû}¶|e׎ò¾Ï��àãÄ ÍDæhav<“H¡{K5))�f›R _ì­ÙIߌÙrÝŽÂϽ5ì¨þxÛç'×ö¼¥%å¨n˱cí°…e[«mÚÞÑçáB*bt¶ßN®Ù^Ö†sïŽÕ=cÖïØ½{MÛ¾,Áâ¶Ñøs¸�trÏîî]±3s÷÷N¸4e?…·¯º]òúM÷ ¸ró(çûœ$VüÅ_ü…íîî¦:\† fšYG"…î-�€òGTÜý­m,ßç ÂìÌÚM».nñ¹m¯zƒÊ³v©~;åó²ñgkl|Ã;glm¯u´÷Žö¬¾¶l ¾ã}Ö.o7¬öäßlûÒW¼sõ»´ýoá²lÂÄìp×öÖÎŽ`d'm¹~~.­¾|2öyûýY:Ž%š"T´“l3 "¶ßkÖíÑ“+Vo~î=Þ³Ë,ÎnXƒÎ?3¿þõ¯íË_þ²½øâ‹©Ž†aÙì­·Þò§~ã7» �f™Hý¸×ذ³Þ�náÒ¶}.kqÏ>Û¾l'S?+#." Ír¢…`ð ÝpÎç ¥;ÿ[ý¨´±;Ðç¼Þ~Õ–äLžóÚÌŸÂå1\tÍ™ËVoÌBo„h:>Û¶KjW —mû³AÎT؇!L ÍÿøGûö·¿í¿ Öá4' ðtSª‡ŠfJðk4á]�0+5*üPûûº8ßz3~nà·âÅ¥—P!þä ^ÏyŸwv à¸B…sÎ*fwí»Eáе@4ÍÌ{¶vÒ;Oƒ¤Ÿù„mé0 µZÍ#üú믧:d†µ›Kõ �¤1#Å4ƒ¨‰…¹;»q»ííœmqæŠíÝ/õÉ{¯uÍÛÕ¿77.yƒèGmcûF°Þ™UÛ>Rølüm gg.Ù«{ún<üÛ Ìã¡»¡ãz·aÛµ5[^8cWß´+~ÚJ°kï5¼­ K?¡BãÞ°¶‡?ðÕ¹xÛ6TøÑ hïÙÞ›×¼ã¾Ï–뿵FýràP¨(äÆoí®w ïu{#ªï¾ªs§Ï<‹ÎOëwN®íÚáÍŸ„oŸìÌå÷Z…&½ïß¼nÛûîFíE[{S!ô)ûé£åu[sçQÛ»ôZR]KïXoî¶Îwx=»“*2ìj¸{üûÝ÷Êj﵋Ô:*z3~rзâEÑt$W¨¸wÛ6ÎzÏ.„Š‘¢7Âçγ•• mbXSEµZõûwR=� 3"Tx¸AY[x¬Þp~3]¼pN·H÷f¯ÃT÷bÇn×WlAoýnÿ_¶vædä˜Þ;rޝsÖÓB]­ ˜;1Ü/¿j·% Du6º„ŒD¡¢åP{ûôÿ¹Ñr®ý­û~¸Ì…©»¨•¹¯ØÙK×ì¦l·ßîœûë|£U $^Hò¿¼sâ]½äèPpŠ„%å‚ÿÄ[÷°]ˆÞ.WÜïZ:Á"bB‘„º5¼íöNr$„Š6¢ÛþÇ¿¨è·ŸˆåÁÝïÉ%A_ÔQG'!ì-,ÿ$¸·|ZâØÜò5ÛöC'Œõ¾œc«åιí¸¼6Ùø¥Õ$8ž\µú®Þ´W콑¤¦ (š~Hƒú-ÑØ»Ÿ¿mͤ³ð¨mÜþ“w [­s¸—îÝ´WÝúñó ±gmíf£%ŒF÷§û¾ëßõÝkÞ¹zÑÞÔ=Ý&äÆêhy]"´¶lïÒ«7C¶u-{ µi$…оûŸèÃÅ¿ßu?! z3¬è ?9cLcŠa-S-Н}íköÔSOÙ§Ÿ~Þ5��ÌŽP9±gþ,ßLq´^Ì‘ EŽÖ[P w6Ü÷Ú÷5ÈN˜'W·öÁ{6ç9  Ú'7Ž �A„J¼ `ÿcsÇÐ68ö-Œt 7^ .pTÜï„ÛS$ÅvJtIr?8Õ–ƒý¹5%,¹ßt×2þ6²ãxÓH¢ïþ‹¡"Ó~BYH½—ý6Ð¥/òn‰NØ‹ß;ÎÎyNé-_,\xôvûfá˵¹x»wµÔîãbF$ÚÞkÕÙèˆB;ƒôEØþÏ„ûãî§xDšÄ‚Pht}î_þµ]zQÓþ¶öÛs³­Z ­B’¯ØùẺ„Øð|EB·§¿Œ K™èÝÓ)¾Ÿîós±óï"ÃB!ÂÛŸH(’0ÐUèL¡M¨Hˆ]÷?ö½¶~®Ï~Ò „œ09crÊÞÿýT§ ÃfÅ”æ¡H#E}ôÑGá]�Ð*<Ü@Üd8Û…ÄÒ‡¤3ëÈ1g3Íáõ‰¯ë±Ýù®ƒ÷žÎs|Àî,¾oqú;í©þ‚ŽßîtÀû á±÷*øÖ×Ñw‘:¾à-æ›~ÚHHr?S¶ç㜽”ëÖó\;F(TdÚO( ‘Óèj/„í:Ù¹õb×ßE{Eb«k#ñïºï +йí´õiçL "T÷KçýHs;ÙïØÜ1h»IS¿7e¿÷­¿=õA¶]’ÜÏàº%DÇ( -|Ödê?RpÇo¿¾8ÜzJ?—i?a`ÜÌ Ï=÷é ØÌ™Ú¼+–©H#jQ�@VfK¨ˆrž5Èþ¸{á:?ÒÂ¥pt¾ë)T´-ñåE*Ü9òáîmaÊow 3 ½œLuïz¸tÿ8{ìg7G¿my?§¦îØbÇ›iÿS†Lû å¡U3'h»ÁÛùŽÈ™4Á!ÙÆÒÚHJ;ôi[7K»OYÇ£§óì~#n]Ûo¡"ø-oá>dºŸú[ðy÷è´,޾ë'uŒgíÒÆÛmõdÚ÷³Ûqºåáz)×­ç¹v¸c‹Ž7Ëþ{t\ïŒû ÇBÎÙõë×½ó8ç;mXÙÍ jóW¯^õgÇ�„*Ü# .=ëúvÿs;Úþ¡}óÌ_†Îð}¶¼¶å‡„á¶Á±{K—˜;¿ÍÙÈ2€L,¦¾é:Ý£BÇRi?Åqï@÷?¶èÜ' ƒÞk¾i•W½ãt ~÷v˜“ž»ä~ºsŸ˜5 ý\fqØÒpÇ;ÞLûŸâ0dÚO(¾ªkîõA‡ïu)¢é"ˆ\ Çgv{ãQ¯OЉ}mâCHÚ2Ѷ<K»OYÇ£ç=é~#n]ï£^}‘èM3ÝO}-ü¼kÿŸ¥ŸŸYcûF¬H«†Pû~ºí%ÏYby¦þ#wl#*úì' …«_¡·ËO<ñ„íîî¦:yVTC �€Q1sBE+Œµ{½?ù¾öÁy;á@·mÐê}Ïå9G³„8Çß `“oR½î{WbEË4°üS8(ôÖ s®#‡|$yáNPiwÚf+q9ñ—2½ÙmGˉN OŒû6 t'd´®Kòw4`^‹…‡ŽŒs8:ö³%¼DE]ž¿;—‘HsZ:¶“†;¶Öñöß‘8'>öJF{úA×·û~;ø¦9£þF÷JböŸ4Qbd]šPáö{i�iµ#]4PÑ:÷í…A•sÅ^Í’úц¢¼êæÏþž»ä~F}CÛl/‰s9u¡"ã~ÂHˆ ÊÛG°ÀŠnq⥗^B �€¡™=¡"r»¥ ¸Až7€KšˆÝºýwÑò¤Ã¯$¯ðšÕãuâñ|A£a7½¤Ö«ù"ÝïßgË—V‚º/ZŒ`ªÊ´·qS‘Êú/c‘#Édk?Ô€·µìäÚ¶ý‹?vË4°Þ Åœø2o°Ý6u©gáô¤Ÿûr·®gË7l/qN®ý‹¾ù¢­Õþ1z‹9ûéížÃŸjÖŽ©wÎ~à›7ˆß‹Ír"ksÒDö·´ý_^¶oÄþö-Ë~B)‰Š>ví‹‚º÷Å×Ò„Š˜“ß]ør‚Y(¢&ïK¿]:AÖwtùÉVºÕP88«hšQøË >¶Î}»ºÛ¯¢«Ä˯µ„Ì0B&œRö3ê÷½ûúŠ |ê8%l·Îe6¡3wlÑñfÙ4A6Ã~Âh‘`¡é`AÑM¬h&‘MÑAÔ �€Q3ƒBE¢ÈˆÄ Ö·ÇuÔôzË�å!t»¦ 8¡ ³’�±[_m÷Úú¦þÂW¼ŸóÃ][;©õn„"Ãß_ø¦]zʉ¯#šªr`Ñ´S <ùÃ5ûaR4þ—íþâ£Uð¹µM]‰Á #ܺi¢«úæí͵½A¹›ÆSçMéÞyïXC¡IÓ~Ʀšõ£cê{þ¹ "'ZßIj“‚U÷öѲ´ýÿŠ-/?û;°,û ãCΊnjFÍ¢)ÓœB Ë‹I ¸†@�ã¡¢½\³Kþt| ôÖìÑW{¤Œ„ �­Èˆ¤S)ët\GMè]œ€8r�zè!_°xýõ×í÷¿ÿ}ª£ˆaÓ°¸@¡h  � ‚ð[÷v,¦Høo™^´°XÚøH Û€™Caø•J{½Ù|Ñí•0*�¦I£Ñ°'Ÿ|Ò¾ô¥/YµZe¦lª¦( ŠúQô�Œ„Š’•ÜeaÓã!ÊÛ§ˆ�””P°LÏôðëଽ6þ"«iµ�`âH°xþùçýqÁ·¾õ-ßa$Ê›„©fŠ dJ,{ä‘G|�`R T��ä‘» ÛŽj „6©z5$Òf»�€I¢7Ø »ÿþ÷¿ïß——/_F´ÀFnIqâwÞa�˜ ����Âß\]]õE‹çž{Î-HÁ5 ]qqâë_ÿºý/ÿËÿb?ýéOÃÖ�0*���� ŠÞvë­·‹´PN9r>‰¶ÀÒL‘9/¾ø¢ŸJ¤6£Z(ñȉO?ýÔ{ì1߈¦�€iP襜ظé¡V¯×}û§ú§È”7ûôÓO·™xßùÎwúZò{²ø¶UMZ¿÷î»ïvì �Ê}Àð¨jºHÝrBåŒÊ)E¸˜]ûðÃý‚¬*†©6¡”Ž ûè£zÅTTÅW¿úU¿�˜43‚s�ôPÒ�ü¿ø…]½zÕžzê)à®—³|Ð.^¼hû·kO<ñ„o +ÕC.i 5Õl¦ATÚoèÍÛ=dµoó7Ó¶Ï:‹œ9:F«ŽYÇ�Ó!.>Ð÷�LµE„‹Ù2õkêÃÔ*C3u¨ßÕòAgëPû‘Xñãÿ˜™>�`¢ T”„¸# Á²ÞÆ�9�hkÀ­Š`šŸÝ Ô‹<XѾ»ãó✠ç\èØãN…{{ªsåÎ�xß#"Ù÷h섇2÷=:&ú(jwIáB¢5.ŠkêƒÔ÷¨ßÑ5 £HÝ@ñì³ÏÚ_ýÕ_!ÀÀÄ@¨(zØèMz{wô–/îèMIÑ€Q›s*ÜÛS+³øRS[ckr3‚¾GÎR"’}Aåèè¾r‘8<-£ï<ã„ E¹{ÚÝÏŒ#ògº&êgÕ8a"žÊ1ξCépú=‰­��ã¡"§hà ‡‘<zëñå/Ù3©‡’NÎ`�1:sÎD|� s®‡²®®…>ç-(”½-S;Wt„ë{t¸¾ÇEC DŒÎºõ=:÷ô=0iÔÎäªÝ9QRíQâš#Uó ­-c£3×/èœK8r¦¢%œ¨©k5ét =#TdSª�0N*r€2RÁ5(*®‘Þh¸Ülœ‚éšÎ½,蚸Á‚{ƒ¡ÏxXCé×÷(€¾gz–ì{\*ɤޞ8䜪½¹È 9Ëj‹.­KmÔWdiíë4 >:_.uL÷yÚKWØ7/èÙá mª]��Œ„Š) ¥LÊ|衇ü‡‘Lî!Ÿö0ÃògºVºfºvº†£Î 5ñ¾Ç9ñ¾‡­bX²ïÑs„¾&Úžœg9ªJ “C-Éž²¤á¢Aeim»LæD—ò%K ê‡%Fèþ•¤õuN‹rëÚSh�ÆBÅPç­‡sâ!”³ð°žÓµt]c„ ˜6jw¿þõ¯ý0a×÷¸h úžò˜ë{ô\Iö=80.äh÷BmÏ ®Ð·ú"9æq1Cm6YpWæjmÉòjâ"œœ¹ýt÷žõäD¥Î¸"ºsô½" YÐuVˆÒA(´ �£¡bL¨³~çwìÂ… þK0…ö‘×9;¦k­k.ÇPm@³ëׯç*|ʇúµ3ç¨ýÑ÷Ì–¹¾çòåË~ÐsHokq"`”¨mµK=enö 7{™›ÆXN¿~Ï™¦ Ö¸JAÜœ;ˆé;Éí<þøãþoÄS5c´/Z´oŠ q³øHŒqÇ0«è<è<)M�` TŒ=¨âQ*~¤7„Sc2µ½-úÚ×¾æx¾ÿýïûoWˆ¶€aˆGl©]©}©©½¥µClöÌõ=zÛ«6B´Œ9¥ÓÀEj¤™Úµæ¤IPpQ ÉÏ\”ƒ39Úÿá?üû×ýWî‘‘è¤)LaÁ¹€aA¨ç ÈáÔ[s‘KçÍ%ÖÏB¶ÐOEà Z@Ô÷(¥cuuÕo?DlaYÍõ=ñh ú8Ó*&m‰08z>©f…6`X*$MœÐ ÊøØ0¦cqÑBN(o# NRœP{Q»!b ;®©íÄû…´Ó÷@VÊ,T(²BŽ6÷Âñq…65;ç�ŽBEÔÁ"N`“°¤ã §Tm‡ül¢ëŽ8MÂ’}KM£ïn”Y¨DU "µ(´ �Ç¡¢RÔ•Ë‹8MÜãàB´ÕÕ&¡üè:;aq›´¹¾G)Eô=в DUŒ >:—Ú€A@¨H ’òu5/½ŠÒ©æâ6mST[T›TÛTeðT.ÒúÄ lÚFßÝ(»P!ˆª~ThS…æéC� !ê@]ô„Þ`R1Ë«©mºðlÞt…ÃÒ÷`E0úˆ3 BQ£EçQB…Î)ý�ôcæ… åà=Ñ’o:UË�Šƒi*^¨©Œ5u$}VKö=zŽÂì1 B… ªbô¨Ïp…6�º1³B…œºsçÎù-å⦠Æ0¬(¦6¬¶¬6`‘oââ(}Vts}béì1+B…‹ª€Ñ¢B›*²I¡M�èÆÌ X™MmZðÔÆÉ%Ïê{(°²š,Kg‡Y*„¢*ˆ®Ð&ç�’ÌÌSæ7Þ°/ù˾§Î0m …åÉšv°[µ•Åy047¿d«›ûÖL]W¦õëv­²dó'*¶u.ÛZµÅ¹Sv¾ú›ß¶~?ÕÆÕÖÕæÕöaz Žb³d³Ã, ŠªP!H.j…B›�§ôOu~<òˆ?½(Eq¬y«jçO\°ê­;ÖÜ¿a%Xœ^·ÝfúúGš­ÌÏ¢BEdjójûº­œ,:ßO=õ”ï´Q ³ v°cÕ•ÓA?âÝK«oÙ~·>Ç·†íÖ^±ÊÒ);QÙ²C-;Ø´Š×_ÍŸ¯Ú­žß²y?ÕæÕöuÐ÷”“Y*QãÅÚ” ¤±;�@iŸ2êð666üBu¯¿þzê@ Ë«ØVe±·0‘f‡[V9*0g*|§{¡V«ñ¶bÌèüê<k¯óžv=°Zó7V=¿ˆ…Í[V»(Áâ![ßýCúúGMkÔ.Ú¼/jÌ!T¤˜¦×Õ= óCßS>fM¨ ªb2¼ûî»~tL ”O™?üÐy×4jTÒ/¢íYué„Í-Um?õó.†PÑÓt/(Dux[1t^ò®óLßS,;ܪ؉žÂDºß‹ X‡é™ìjçÐ÷”‡Y*Q“AQX®Ð¦ŠnÀlRª§ŒÞÖ<ýôÓ„ZÝš;¶~z¡bL¦#EW(âˆ7œ£AçñùçŸ÷Ï+u(Šh‡¶_}Øs¼¶êþaÊçÝ ¡"»¹¾G÷ }Oñ™E¡B"Q“CÓ—Rh`v)ÍSFoiE¡ü6…›¦ ’ºÛÛßzÍÖWN{ƒÍ·loó[òëÌÛâÅ­åƒ]»¡bÞÃYè¶Í}Ûº¾f+‹§l©úíV/Ú¢¿ž÷÷úvÐöÝÓv±v«U‹@ß½º®ïÙâŠ]ÝrÛU8ò)ï·‚z íû-˸ïÊ¥¾±~&‹ç_·¶1·tÍ{ ´ŠXÎ/]µƒObßMnWß}©UôÒ;¶•«›=òºµ~ÕÏéÖ÷¶·ò’míëØœ³àö1´®ÂCü˜¼í<þxð·~Û5Ùó¿ÓÜß²ëë:מC²ûA+}þ¼­ï|b»?oíÛâ3Vó÷+ø½æþ¦]ò×cûýÎi«lîÚæjÚuöŽ;º6Þ9ZÉ*•ŸBLÊ~ú¦åÕJìšÅÏmÖëžn.º‚ÚÃãúEp Þ÷`ù°?ØîúCÞýƒP1nÓ=¢{…èŠâ£çÒ,"¡Çyr¨ŸXñãÿ`Æ(ÅSF¹¯C½Éܯڒï†Î`uÇ¢ëý¶Rû·Þזּr¿ç¼®ÚÖA³UàÑwŠöâEÏ n´Do§WÖlSNíÁ¶.Gxþ¢ÕÍp‡Âßôö%™ÝO¨È´ï.—ú«l}ûEïïƒ.Û¸c·ª¼ïÌÛWO?n?ð™†í¬Ÿ÷–¹íjǼc«Ú®wN|ç¹öŒ-zß9½¾Ób"sE#sÞ㢀‹ŒèQî‹/0xç:Ú7ï{×äD(�„)%þ2 Á~û…;µ_}ÐV~ ñÆÛÏ«þ~ͯԬáýž¿Îéðºêï¨ÀçßÛ/þ!íÚ‡Q!î:ûÅ>Ãó¯ýW~øÊuïøÒöSÇ÷‰mUh—æ~(€„BćY®{ü|¥›Ë×T¦08ׯ_?v߉f^{ÝÜ{ËVS2¯-ÆÅ3Ïæ—^ú’ø6Þ$tuݽߣ¸k&qn\û®ïv ÃÏ“¦ßªÆEæ¸ÜÖÿ9 ûÆÄv|KˆÎ¯|Ýÿ T´Ĩÿj"?‘ˆQ¨Œúà»ë×~`•ëêcRöÓ7-ï&$gm³ÙL÷Œî=¿¡˜èÚÏ"DUL J»Ñyçå ÀìPè§Œ:.U׬ÊM e¶p°+¼)sÎc(TDÿÝÛûH ˆ;›Î zÃB‘á›»æîºö„Iëæì§Xß}wûæò¯Ýß±ýr³fÄ­ý¶ëœñ¶ý-­¦[¿í³– o¡"ç(%õ£ý<hYxÝÚÞœ†Fì{íûà€ðØÚLçô ïuöÃs×k¡¨þNhÉý ÚEâø"á+¼Ž}¯{kû½L÷ŽÒ¥”6ÅÛŠlh tá¿ï9^-Š.¢YØ8,¸/½Ï+›¾xîšWxë'0ö*º ³iâܨ÷=¼÷SEÃ.Åwý¢‘'"¾¹ïì¸(Ð~¿vlÃY(4‘fÞ1:áÙW\ôðûŽ1‰Ø¿x©õ;êWz Ô¡¸î G[/xëz}CÇ~êøôy/!ù¿fk³˜îÝCßþö·ÉC/ j ³ QÓA…6Õî(´ 0ö)#Gáø©)–ÙéÓttÕàM”l=â~BÅ‚ÏÝÀ4ú-ó¾ë gݪþ[L 6cû•&ôÛ®ÿyö·÷iÛ‹/~»¯P‘v^=Ë$T¤9$ý„Šàóîñþ‚”«°ï·½Ù¼¾ÕzëéYû~v9¾hyüüg¹îýM÷î%ÝS¼­èͯýkÿMðð3zôkwÞß¡³ V¡ ØºæÇÞS-C›Ǿ÷ “…0ÝúíŸE‚Ht¼Y„ 'à´o+¸çbÇ•¼†‘0¿/ûŸ¿¾"vßû?Üžú›Ún vÄ-¹Ÿ™„ä mö¦{I}î-(j³ QÓCcÙT„'@¹)äSæ£>ò5#-Z×wÐ''_µNØâÊšUk[VÓ 06`ëtû FC¡bg?Ͳ8¬;Ahµ­Õºýªö=ïóØ~¥ 6ûm7ü<ó›´pýŽmryßoGÞ}¯ç5IsHú ¾ÃÏ» Jœ6-;صڵX͉èMgr?Ýöâûÿöóßóºhº§´o8 é8‘BƒÔ´ó7˜ àô©íT•> ­k~Œöì·›!ûœ¬m^6Ê}?Ïþö>e{ñåÑowÙ÷6KßVpÏÅŽ+åvÞ—ýÎ_»ïýï"$¼}ñ# ÖìºKw‘%÷3e{ñ߉ŸÿLmv@Ó=¥{‹¾§8̲P!ˆª˜Šþt…6å�@9)ÜSFƒ=G*RÈú ú·­r8¨Œ ØŒÆÞšÍ/YåFë­WóÖu{òjø&²Ÿõ°†o.cƒÞàóØ~¥ 6ûm7z3{Ê–*?ÃȽõ²üäËof£Ððözi}¾î eì;žEç²ç59ŽsÔz‹;¿´j7Âóàmãª]Íú,sÖóÔ[û•ÜÏ(œú|ÕnEç1ñv¸ïuwßÌ\î8C;N¤:Í,²,NŸk+JªZíW7üÏ[×üí9l7Ç ÕoY¡b ûî>Ï…®ßq&—÷º_߉ï›gÁ=;®”þ«ó¾Ì(Tô”2ÝÿAݵ¨†KÅñ>Kîg¸½ø~ǧíü÷l³Ç7Ý[ô=ÅaÖ… ¢*¦D m”—B=eœ£0š·™í9†Ñà=á »Á½ï8jðç ½·õê V©ýkŠóœÌÖ2î:›Q®²‘1sμû¼ë¬ö=Ü‡ÛˆŠ·yÚõ—mµR·F(ÄÄÃ~ûo×…'ö½kn{+O=*ªçò®cÑNꆥR„ùÙQþv¸¾#s˜rMç_Ë’¹õZ–؇(T<:ÆÀ‚öá:ï_·‹Ñ>¸7nýá%:žSÑì,A.þ‰ÈÑè}´ìx†ÃÐÎèE Y?§Ï]ÏX» ?ÊÙT`Lµ~Žöñì{_Ѱ•’˜[?Ñ'u¤9d*RúŽØþŒV¨È bg*bæ¢êÜ1&÷3“<^¡Bæúª…|£v?ëU1}\¡M¥ƒº P. 󔣘{#æœÏ¹¥WlËD¶–¨Ü°ܬrޝ֭¶ €—VfÕïi€_¿foûƒN·LƒÇym˼e[ÕwÏ¢ÊîÞþõ*²íû¦}¤ B€_²ÍÚ “»ô‚½U}¦}Þ ôí·ûo7˜Æ§•éÜô›ž4>Û€œ¥jÏéIãñ¸µWþ?m~;wBÛ{Åj»wlëÄw+ö] ¨£ež“ðv-dG˼AüÖ+ÁÄø2oÿÚg0ÎãÖþÇ¡sáÖM»ÎÞïT_¶JååÖ›ÍÈùè<æèx“ÿõjPÛ"ÛuO?oY ±"`l}O_̵ çdÇîµ¥¿·êê Þ÷þõÂ[?Ñ}ÞMp”õç\”Ѩ÷]Žz/ÑÐí_Ë¢b›ÑtÒN0Í“*B$-–JÅŒ¶íöA¢a‡Ðš& f7ûˆØý…JµŸJìx™„ܹíØÏ Br†ëÓ:_Ç7ÝkñaW¯^ ïBÈ#j³QùA6Õ&Up�ÊA!ž2ã)0 ën³.VŒ­ïqo¡åxú–"é­õ'­Y%|só†­ùŽ¢çt¿Uµï[xû¸‡ÀØO¨poþÝw»ˆsµÿsLûÞM4ìrµ‹šrÄ+Þ¶{LOh³„кøŒý\B¯DÄkuÏiù‡Ä5\±ÊwG/bßÉ$T¾m{×àí×ËÑ¹Š¢P’Ço!9k›M=oƒ› üj6"¦NÎ/ºæ@TEžPD…®‡",H(>¹ʨÓÑÃpé†õ7Ý{³8H£ÑðûR ›Ž9¡T÷"䄊�¢*ò… Õ¬ Ð&@ñÉõSFŽÑÈg÷À0l`{ýõ×íܹs3󆂾Ãòaºu/2 aþ@¨hATEþp…65;Ñ�Å$·Ou*=ô?¿zÚàðÉÚ~ô#ûö·¿Þ¡åE}#‰3içðÉÚ‹/¾h.\ÀÙÈ-$R¨˜#ä œÚ(.¹}ʨˆÖsÏ=—:hÁ0lò¦œño}ë[öÆo„wi9yþùç}Q&í`6{â‰'˜ $g T´£¨ Ò”ò‰ m*º‚B›�Å"—O©žÊK•c”6`Á0l:æêU”õͦ™ô=–?ûøã}ǘ·¢ù¡¢=õöò‰žï“ô"‚è,€b˧ÌÓO?MʆåÔô/ë´O=õ}†åÔtoê…|€PÑ QùF…Æ0Š®à:äŸÜ=ex£‰aù6Ý›e¬Ä¯ãù‹¿ø ú Ë©éÞÔ”¥TòÏUQ t\¡M�È/¹{Ê<ùä“9|£©¹å_³uÍÿTµýÔuŠlŸØVå››¿`Õ[wR>ǰvÓ=ª{µLèx( ‰aù6Í¢BÛ0}*Ò!ª¢¨Ð¦ŠlRh ¿äê)£NC¾Ü½Ñܯڒ·_Ú·\š­ÌÏÛéõklZeqÞæN¯ÛnsϪK'‚ýLµS¶TyÙ®oí[³m›#*víFeÉæýß<m+Õ;H[¯Í¶{cÕ–æõy[\©ÚîA3ü¬iÚEo{Ùú­U[ôÖñ¿c;ؤLmª,Sê8rÉÕÜ·­ëk¶²èÝ·Õ½ôu kÍð>>eç«¿á>Ʋ|Ç"è�¨p#QÅÁÚT”�ä‹\=eÞyçüVÛ?Ü²Ê Ï‰ÎƒPá '¡£îD”Û: >oî®ÛioىʖºïÈé©VZBÀÅ¶ß ?¥5cÕó§l~éªíÚÁÎUï7û9#wìVõ‚ÍÏŸ·õ†|`ëKÞ6ÎWí–¿‡¶_}ØÛo áÿLJMÜ4+OYìùë{\›×ýz"BE±0.ä¦Ùü’U®ý̶öã"訅Š^Bg7óöa÷çVñú?/Zu×ëÜç]áø6°i˜îÕZ­Þ½0-tß@'ªƒ@ „b¡k¥k¦¾…B›�ù!WO™GyÄÞÿýÔÉÔ-OB…?€¾ßVj¿³£æŽ­ŸöÐñý ‡4G¾¹Ã.jÀ=–7™qgæá²?ØîúCž³rÑj.ŽCÜ!—bKxŒn»á6‚Ïòà¼Í¶)Mâûßÿ~x÷…’ç±ï9ܪ؉\´õ~baxŸÏ-Zeë ú^s˪±èª‹µ[cˆžè't¦[óVÕÎÏŸ²¥õìà¨a;ëç½mÄ¢ÊúÂØôL÷ê… »¦BEwˆª(®Ð&©;�ù!7O7%iÚ $–'¡Â'N‡Áזּr»(ÑC¨h½ÉôŽ¥—xp, ö%9˜oâëËœ¸Ñîà8f~¥f ïon»¾°‘X›¸iº@MUZtòÜ÷äG¨è':!#í¾¼cûµgÂ>g upú ‰õ} ûªx„D¢Ïé+cS3¥hÉIæÍçtA¨èQÅåÝwßõ¯Ä&�˜.¹yʨc˜vèusÓ®ª`¦ÔÉðá¡"6ìÙüÒ ¶…7{ƒóÍÂPäÓ¶²þ’U*? ¿Ûã³0u¢÷€^µ(³êþ¡÷½É|¸}@ÞS¨ðÌKèTè­çõõÏ‘x8Üf¼xè5ÛÝ­ÚŠ…¡cTJÇ'íaÖ.¤›˜Ósl«²èmÇý¶[ÖÛpâ„¶á¶+§á'G,²`DZ¿ù›¿)ü@Lƒ‘|¥}´,?BE?±°—P! ëà¨qBÀH,›ÐÙþÏüýOöI‰è/=alª¶²²‚8et?Cwˆª(.zá m–¥@ÉÍSFù¦Óœí£= ¸u t“Nxøo±²é­ßzc dýÏ𹟿¡ç•ë±ïvù,“PÑÇú Nð ÿ#V€3 ÂïË\1Ì0¼znÞ¾zúqûÁ¦ r†áÒîÍeø½ç ÛrßÂ}éˆîè¶Ë“•ÁYøÅ/~1½¾Gµc®J$ ï·D„N¡"^‹AæõY«oµêÍxÛÛ\ S-WlýÚ¬r=ønsÿ-[õ…U‰°kv­ò»ŠƒAÿçÝ£½Ò%zŠ…ý„ w,Þ~Iì¸ÓY(´M0ÝýÀªN4öS:>IÔ“xÆj¾(œQ茖–.�%AÛè!cS5‰‹zÁÓC÷"t‡¨Šâ£éKu )´ 0ró”¹zõê§ ߤÅÀvür4pï"TDáÆ‰7tÁ@XÑµŽ¢n½>‰ $Th ž2ا-:"e»mþn¿›E¨èp(*Š`epžþyÊô㫵žõÚ¸+Økóíµ‹EÎæ-«]”3ïëðóÅUÛòû ®/ØŠÿ]E|5VõûŠpønt¿g*zZ¡Âõssÿ›ý§ÿô¿yÿêÿîØ\Ÿ¤e­h6·_s_}ÐV~ AÆ;&¿@¯ëOºõ½ú·¯ÉÔn˱<šÄE jN„ŠþUQ|$4I¬øñLºÀ„ÉÍSæÉ'ŸôË´Éø-ÔÆò¤uKk8صZUoƒÔˆÈIwN‡Þz³y}«õÖ³×g£°~BE"õ#U¨H;Þ~BE·sÔsŽ÷Fˇ•ÁYøÎw¾3•¾'¨£/<Û°ÝêE[ŒES¥ î;É´‡ð^RŸRÛ ‰Ðü{SÀºÕâ3[ŒÌ*‚{½ýØ´NX7¢­/HéÚú™nýD¡"¹¯E2½ØÐ ˜ý!ª¢è:JpR¡M¦F˜¹yÊLËYÌ j{¤[t8á¡SáGFxÎÚ¯nøŸ·9ã1®¹)A=‹ÞtöùlXë) ÄŠiF¿9"¡"­@]´N·ÁÒù —‡¿Ÿ…åÅ$TÝY8wîÜúç'ºvëtæeªS·ªŸ&¡þÃ9ܱ{;L︾¥-}§U#"¨‹óZbºÐa­¿P‹÷û¡¨Ðyli¢e?¡âxBgúyÍ ¶`¹1ݳO?ýtxÃ4@¨ÈQåA¤j÷Ú˜ ¾¹7yžcœ(ˆy«ê ö5�n;ç:æ|‡Ÿ§‹NÔHŒû}vLë!T¤OO:*¡"MtH¨sÛŠ[2ƳþUû±<˜„Šú§ ïâb2¾Ç9ާ îp¨Ã”4?j¢Z·_Õ¾ç}w¬ãZ4%¨«££Ï¼¾¦öJ¬�p¬NÎÐÖÏÉwBIkF#TSèLés¢ßïÕWa¹1MQŠP1]*²ATE¹p…6%>Qh`¼äæ)£‡i’IX” íà[ål»š ~´@ÒÉð�Wànéï­ºú‚Õvªv1»7¡ã½½ûg#(¦8ù ¡BEûª.‚à ußqBMl°ßv¼Ázn»­Á¿sbþ¶¼ûÃ0Ÿ<KÛñ……:ý¢y ÏûÀÖ=gêøùòؤLBÅo¼ÞÅÅä©§žš‚Páîï›_²U¿8mðYóÖk¶ÀlwæÃû4æHŸwœ¨Ñm 1#œÉ'.De½„ŠôéIG#TxKèL‰þê7S–++ƒHZt*²CTE¹øä m~ôÑGáR�5¹yÊhÀ¡GÚ€d2¦Á{|ºQÏ™¯Tƒðè(·:4 š? œiÿïÅ»ºyÃÖ4Ͼs:öf•ÊË­7›ÞòÊ0o¼×gC á Þíg‡…i*m9êÉï,Úw++žûžw¼o¿-§"¶léÛò“ø²Ðqˆ$oYüØ|K*d.²DÛÒ¹ÿùx b#µ'žx¢ðééô=î^ßCþ=ãî¤Þ«îóƒ]»á÷!ž³¿þ²­VnØNµ‹,p÷š„ ï·.¾+ÔÉqNùðÅ4ÃÈ©„P¡™<ªQ? ‘þg)"gš`ŠmQ"j¡ÓolYpÌN´ g0:V¿‹MÃÊ ’õW UA}ƒr¡ñ…6ÆGnž2pLW¨À0lP+Ãô¤S9‘b~©bU¿®„‹PÅ ÏNT6í“pÆ‹ ÅK¶Y{!ˆròSÖþ›í_ÿU®½ ®óK«vÃ&÷ìzåv-ª‹Ó.%T$…ܤ…i*-á1娾[±ï*J"Z¶h•·kAäD´ìaïܼ’ø-}ÑGèL*Ú"K¼ïµÎ•û˳•A$-:ºo ;ŠªC åÂÚT:BÀhÉÍSF9=i Ãòi_úÒ— Ÿ£©´çž{.õø0 ˧}ë[ß"çÊ T †‹ª ®A9‘¥{¢èS¶ä‰Ü<eÔëÿøãS%†åË>üðC{衇Â;¸¸¸¾ç÷¿ÿ}êqb–/Ó8áË_þrxô@¨¢*Ê"*4…©",Hž\=e¾ÿýïûs£§ L0 Ë—½øâ‹~}‡2 ¾ç­·ÞJ=N Ãòe'èž…é‚P18DU”]c‰QÚž\=e‚­pδ †aù2Ý«eyÓ÷`XqL©Zºgaº T¢*fWhS³ƒ]p<r÷”Q8'é–oÓ=Z¦AªKÿ ïÁ°|›R´t¯òFzú T÷¼¡ —]c mŸÜ=e^zé%ûÑ~”:@Á0,¦7šW¯^ ïÚr ã¡ïÁ°|›RΞ~úéð®…i‚Pq|QATÅì (EWPh`0r÷”‘ÒLT†å×r­{´l¡ŒzóAT†å×\$o¢óBÅñqÏÚòì YŠThS/DHÈF.Ÿ2µZÍŸ#=m ‚MÓšv°µj‹s§ì|õ7ÖL]+»©–Ã;ï¼Þ­åB}S•bX>MãÝ£*†ƒ¨ŠÙC…„ EW0½2@rù”qQzs›6X™YkÔle~ÞN¯ïXó`Ó*‹ó6wzÝ~µY±Þ€Aƒ†È–ª¶}wϪK'Ú?ïcóK»v}Ëö›±ß¹PѰÝ«¶4¯ßœ·Å•ªí4SÖ‹›·»?·ÊÒ©`_/Zu·Ñú¼Ë9Úm;츦jû<òHx§–úžZxÏŸ¯Ú-î㙵÷ß¿”‘\EFÏ`8>DUÌ.c¸B›�ÐÜ>eÞxã ÿÍ­ g¥ ZfÒö«¶ä9ô¾îÿßsÔOTlëPŸÿÎj+÷{½¬²õIçw=kî®Ûéù‹Vk„b@sÇÖO{Ž|´ ÙÛߪƄ€g¬¶'ÚÆèìŽÝª^°ùùó¶¾Óðœ‘lÝûÍ~ÎHóVÕÎÏŸ²¥õìà¨a;ëç½m\°ê­p{ž#lûðÃíK_úRéßè-}³¦5jm~î![ßýo¡P©ûëÿm›•Å ˆì„-U÷Zßu÷_fóîëÊËv}k¿]©PÑGèìf»v£²äíçi[©îxýû¼Û9òú ø6°c›îEõ=êƒ ?è‚á ªbv‘@¥"›ÚèN®Ÿ2*nÇ”1ó£î·•ÚïZ"C9q`[¾ãð°U÷;¿+“ãÐæ´‡‘iŽ|ó–Õ.žö"cy“|—ùBÊ\x|ñu# Řx„DxæWjÖÐß=Ïv\“£ {Qâ,@ßãìÐö«{ý€œðƒðÿsv¢²e‡úÜ¿ßäð¯ÚVj4Ôlwý¡ÖýéYpŸÇ¶!kîÛVµÒŠ®ºx#Í5ë+t¦Yó7V=Êæ—®ÚÎÁ¡ì\õö3UÖçaC™ë{ÊV¼· T Qà m2å2@'¹Ê\¸pJüÎ|Çû´U¶¼¿§½5±P!s©=Ńã˜{¹K¸<):$-tŠÚ€Àšs‘"=Ïv\SnøóÏ?Þ•åGáåô=²ð^ ï¯@dˆENnYåÄ\10pâÛîÁ0Ò"í¾lîß°‹~Ÿ3Ž:8„΋GKü!\–èsú#l(Ó=øío;¼3!O TŒ¢*@‘ª+(´ ÐNîŸ2ÎaДdiƒ˜"Xs˪QذÞ>®ØUÞ¬7‰××leQoù~fÕE1œ¶‹µ[)ƒt …B„ËÇ„1Ñ6C§"¾¯á \Çv}}Åõ»»„ûÒñI"ÌÚ¥‘tÛ×Þûs¸¥ZIÀ½Ít¢G¯s„Çtï霵‡gúžQ˜ïx»{Ò c㈅ 9ýAê„úXšÚ(,‹Ð_ß·PÜHôIÉ诞ç;¶©&ιsç¸ç„ŠÑ@Tõs*43…6 ñ”Qç­"Z´¤ frm~T‰(”¹¹ÿ–­úŽ»Äˆÿj;$kP.[\µÍk~hòàoÇ!T8@ŽÈ+öŽû$„ß÷—µŠaáÕÞ²¯>h+?xË;nÏùðÃ¥çÂ7—á÷:œƒnËãû’Œîè¶…½õÖ[þ½7«(åêøuÒÎO~-QkÆ¿?_²­°ÞLK`<oëµWlEQ ÝêѨßpB„"x²uŽ\¨ðÌmÓ?öŽã5[—�íC\0ýÀv«aC5.”Ò‘¨'áDßlB§[Z·ãKC¯s„Ë\ßCîv~Qߣ¨ p¼ûî»~t…RB�fÂ<eœÃP¬Pìðm][ذç$8GÞAvåa‹¯[¨áƒýðcÛï¦l·mÀßíw³I‡Â-G¨µU«Uâ‰.*Á9éwló… þƒÄˆÿKP»Åwäçm±ò϶ã¶íS«!ÍÆ!T¸~@ý̺ä¯Ûêƒb}’Ìà ëH¨8½²f›\½AâƒÔ~¢OÿîkGjH·åØH ‘¢è„Ñ@TÄQßç mÒ&`–)ÔSF7n±òÆû8ä¾sÿ‡p œ|Ó7¨9¡¢]i³…ŠDꇷ¬S¨HHR¶ÛæÐtUzïϱވbÇ2Ýc8 -œXQˆ4°îBû´¼á,;‘ êú ýE·P¡{½ã7\݈x_ÖÄû×Ï(tvÛW„б"Eq@¨-DU@M_J¡M˜e ÷”qyãÅ+Ü€»‹C>R¡¢¿Ãî;úmEoa UL³5åéh„Š´u­uºþýÜïdäIøû]s̱AM÷–î1TüvœX‘û¾§s܃Ýú¦ÍÝ×m¢HÜŽ!T¸mº¾¬C¨Hë‡ú ‡Ç:S~Û·~Ç€Ë$"R„ŠÑâ¢*¨Éq\¡M‰X´ ˜5 ù”qbÅsÏ=çO]–6àɇ¹ÔD͉¶7žn <¬Pá ¼uK!ùÄ´?˜ø¬‡PÑezÒÑÞß)¢C²@]§§j?–Õt/éžÒ½ÅÃ09P_ùÊW|±"·}O› Ñmùˆ„Š^}ˆoêhïÛz:ù±bšnÊÓ Ç:SúÏ‚ß'ÝlT¦{I÷”î-DŠâ€P1zäŒR›�’hLöì³Ïú…6é#a–(ìSF7­¦KüÚ×¾f~øaêà'M·7¿d«›šéãŽíמñâ.JatBEK\8m+W7ýâZÍ:’,–ç“6'£½ßüÒUÛ‘³àæ"!âƒ}W£"á¶ü‡÷[þ0ÝŸ¤å“ÇEÑ_Ô÷‹æ5lgýüñrë±6SX¡î%ÝSˆ½Ñùyê©§ì[ßúV>ûžèþk¿/Ú…ÌQ éux"óï᯷ÖC¨HžtTBű„Î,Ó“&¿ƒ bº‡t/鞢ï)£GQz{ν�i¨Ð¦î;Ä,˜ ÿ”yçwü›6Ï3‚4÷7íª›¶Ó³ù¥ŠUýéIÝ@:X.:”Xñ«• p^´ÝÓ¶²þZTñ¿5¨¯7ͰfÕÚ®DÛîüΉïVì»r ¢ež“ðv-p*¢ež“°õJð&7¾Ìwíû+?÷g ‰Ž%E¨ð߸îVƒY ¼ïÍ/­Ú Ó‹öÔT4óK_ú’ýú׿ï*ÈÂo¼á·Áüõ=N ÕýñBPXÒ‰˜.JadBEL\ˆO» ž÷G3Eëû‚I¢¯kë·œ~Ö!r¦ ¦N0‰G9tЍý…NEž=Ð.ò„…:Ñö0œÁè833aIÓ½£{H÷];=DU@/Q¡"›Š° EÊN)ž2ºiz衤‚`X~ìã?ößdRâø¸¾ç‰'žÈYß#¡à¥HÐ „Àj Vº¹¬K}†,ŠÚжéÙ⊭_ߊ‰N‰­ÓfT«V‹ .]ÅÙ‰«|7)îÖìí6ÁW‘ÿœø-}ÑOèL*d;Vubóü’UnÄE\lPÓ½¢{F÷aÌÅE÷Œ¢* j®ÐæG}.(¥yÊè¦u© ï¿ÿ~êàðÀô&SQµZ-¼ƒà¸¨ï¹zõª>‹3…)†MÇtè^Ñ=ƒ#Vl*ÆQ‰Ú„2Sº§ŒÂ×Ï;g+++þ㴆ͪ©…¢(yä¿’4ŒO½!Vߣóœvþ1lVÍõ=ºGè{ÊBÅøP¤Qµ¥(„5(¥|Êè¦Õ›b=D5Ýé Ø¬›«ª¯©ÿT×ƇòíÝ4¦ô=ج›^¸¾‡Zå¡b¼Èù$ª²¢¶¢{R7ÊB©Ÿ2ÊóS:!ÙØ,›Kóн@-ŠÉ ±Ô¥ƒ¨XiÚuÁ°²›+ÔKšG9A¨/Š<"ªAšÂT"íÊÀL<e\H¶êW X`³bªÕ¢6O¨õôÐyòÉ'é{°™2µuµyµ}úžò‚P1~ˆª€A‘@¡šÚ„20SOW¿By²äce5µmÕIP[gÊÑ| Áb)Vvs…Ú:äòƒP1~ˆª€ãâ mjvÚ•™|ÊÄ n"X`e1'P("Ÿ¸¾Gγae1ÄÑÙ¡b2UÇEé¾Ú„"3ÓOWôÁ+²©í>ñÄQ±:”óüK,°¢Z\¥HïìP1ˆª€a‘Ð¥6D¡M(3ÿ”QǯBÜ[N¤R?–wSU[U›UÛUfS<$X¸”¤ïÁònô=à@¨˜DUÀ°HðR¡MÍÂDŸ E§L ås}ÿûß÷¾º‘‰²Àòfj“j›j£j«ä— 4+ }–W£ï$“ƒ¨ j?êÇÕ–Ô¦�òO™”Ó•Œ²Ð\ðiƒ7 ·©í%ß`2Íh9Iö=*NH”6-£ï^ TL¢*`THxv…6ò O™>Ä£,4[¢6 “s*'Uùß¼ÁœM4X]]õ¯ÿsÏ=‡hMÄ\ߣç}ô¡b²U£D¢³ŠlRhò O™ŒèÁ ÇÑ—9AN©sÔæ”Ì6ºþªehËè{à8 TL¢*`Ô¸B›êóòO™c€hÊ’Â… |§Òè&ZÐ÷`ƒZ²ïyòÉ'é{` *&+ˆ0J\´ŽêWð €<ÁSfH⢅¦hS.ï‹/¾È”ƒXWûðÃý\hµMíGî7 ‚-â‚©Ú•ÚWZ»Ã0ú%ÓAQ¼ý†Q£1…„ aÚ„¼ÀSfÄèæ¾~ýº?åà—¾ô%ÞxbÑ›K=�Ô&T”îêÕ«~Þ7Ê5Œ µ'µ+µ/µ3µ7 ¦¤ˆÌ®Ñ÷À8A¨˜DUÀ8y÷Ýwýè RŒ ð”#zK¥·Uñ7žŠ¶@¸(·éÚêëZ'ß\R°&Ú™Ú›R‰ÔþT”ÕEzÑ÷”×è{`’ TL¢*`œèyá mqÓ„§Ì„ÐÛ+©àšÞÍ¥‰è ×O<á‡âêÛÏâ™®™®®¡®¥®©®íSO=å_k]sÞ\Â4QûÓtµGµKúžrX·¾GÏú˜Óƒ¨ ˜š¾”B›0MxÊL©”ºù766ü·^zè?øàƒ~ºDþ,î(”úoþæoüköï|Ç¿†ú åŠ@–¾‡È‹üX¼ïÑ5Òµ¢ïiƒP1]ˆª€I QLbÅücÄo˜8<er†:å‡ÅˆøÛO…õR,oü¦s¬s­sîÞVÆ]#]+€² Pϸxá"/\Úˆî}žv¿`£³n}® }ä „Šé¢þ˜¨ ˜($Œ©½‘F“„§LЛ²xè¶ ¢i€ 7úî ¨s"ˆÀÌtΜS sù·û·þ¹Õ9vé:÷tÌ0‹ÄûžçŸ¾­ï‰‹§ô=ƒ™‹ˆ÷=.B+Ù÷)y¡búÈqT_0 $”ë¾§Ð&L ž2Eê¦Þªé圈GyÄï@Ü[P¥'h¬zZoC¹uÌ:v™Î…ΉÎ{K©s¦s÷‹_üÂ_Gç”Ð6€Þè>‰ Š4Òý$Kë{f1 Ìõ=:ô=PFÔŽaº¨ï ª&‰+´© „t7<eJˆ: z] ÉÓO?í; åv΄ÞÞiÐì"2âN…³< îM¤3çÈt,zË{ñâÅè8uÌ:vƒxØ4+Àèqªî39àô=ô=P^ÔÎaúU“FÏzWhS/-�ÆO™Ä92=ÜÞxã û§ú'@­c ®“Î…3½ Ô`\&gCƒó¸Å~¦¼÷ä÷eJ¿Ðö]Á¸¤¹ýSζöYû®cpŽ€Œ7“�ù„¾ 螀飾”¨ ˜)(´ ã„§ „‹Öèfz`*w-nÈÿÏÿóÿܱ\–¶ gÔ…��ÇqûEv$—Ëäd¥mGFßЄŠü@TL JQ:ÏN5<e`"0 €<AŸ0ÜCù¨ ˜6î€" FO˜ h� OÐ' ÷P¾ ª¦"*ÔaA*Œž20Ð�@ž Oî¡|ATä ªYA¡M<e`"0 €<AŸ0ÜCùƒ¨ È ®Ð¦f!ºŽ O˜ h� OÐ' ÷Pþ ªò„Š`Sh†§ L4�'è“�†ƒ{(ŸUyC…6]A¡Mž20Ð�@ž Oî¡|"‘Bo±ò„¦þ–ˆö£ýˆTÈ O˜ h� OÐ' ÷P~‘C(Ç OH P¡è Ú'd§ L4�'è“�†ƒ{(¿UyFíÓÚì‡Ä Õº€Ù„§ L4�'è“�†ƒ{(ßt‹ªãGaC˜6Td³_¡MMuª0›ð”‰À€�ò‚ETÆžëù&U!Â5$ìò‚k“i`5Å©ú™,‘PNxÊÀD`@�yAƒt¢†ƒçzþ‘xóæMÿ­´®—LË�ò„žÉj—ñB›úWËÔfy^Ï.<e`"0 €¼€P0<<×ó ­w…3‰�yC„„ —²¤g´k³ˆk³ O˜êh��ò�BÀðð\Ï'(âIS8=@^y÷ÝwíßÿûßÑna6áÊÃD “€¼€P0<<×óE?BÆ›iÈ;ª!•Övõ܆ك§ Lu2��y�¡`xx®ç z­Ðù¸ƒ7Ò> Ï(ý#-]I–VlÊO˜êd��ò�BÀðð\Ï/z+­™’¢igÔfãí5nLQ:›ð”‰ N�  T� OžëqG+—õ#í;†ÎFÞ#L„Q5X�€aA¨�ž2<×u GGGXÉ,KÛäÚcØølTϼG˜eÐ�@9@¨�ž2<×qVËiYÚ&×ÃÆg£z>à=ÂD(À�ÊBÀð”Ṏ³ZNËÒ6¹ö6>Õóï&B4�P*�†§ ÏuœÕrZ–¶ÉµÇ°ñÙ¨žx0Ê0 €r€P0<ex®ã¬–Ó²´M®=†ÏFõ|À{„‰P† �”„ €á)Ãsgµœ–¥mrí1l|6ªçÞ#L„2 h�  T� Ožë8«å´,m“kaã³Q=ða"”a@�å�¡`xÊð\ÇY-§ei›\{ Ÿêù€÷¡ �(�ÃS†ç:Îj9-KÛäÚcØølTϼG˜eÐ�@9@¨�ž2<×qVËiYÚ&×ÃÆg£z>à=ÂD(À�ÊBÀð”Ṏ³ZNËÒ6¹ö6>Õóï&B4�P*�†§ ÏuœÕrZ–¶ÉµÇ°ñÙ¨žx0Ê0 €r€P0<ex®ã¬–Ó²´M®=†ÏFõ|À{„‰P† �”„ €á)Ãsgµœ–¥mrí1l|6ªçÞ#L„2 h�  T� Ožë8«å´,m“kaã³Q=ða"”a@�å�¡`xÊð\ÇY-§ei›\{ Ÿêù€÷¡ �(�ÃS†ç:Îj9-KÛäÚcØølTϼG˜eÐ�@9@¨�ž2<×qVËiYÚæD¯ýÁ¦Uçmþ|Õn5S>™5í`kÕçNÙùêo¬™ül·j+Þ~èØçæï·yÿß V½u'¶Þ0¦ß¨ÛµÊ’ÍŸ¨ØÖaÚ:²ƒ]«]«ØÒü¢U¶¼e½ÎMž¬(ûÙÛFõ|À{„‰0ª �0,�ÃS†çúDÕQX‡ó•²–©mf¿ö Û½±êsÏ©÷¾37¿d•ê–ÝÚ©ÚÕ¬× BEóVÕΟD‰æþ »¸ÏÜ…ŠFÍVÜyšªPñ;«­ÜBÅ4Lç~à=ÂDUƒ�„ €á)Ãs]Ç6ÈŽìpË*'œC×Åqدڒÿ¹³‡­ºؾÎH,ÍùJ[Ó9ê‡ÖIûn»Ý±[Õ 6?wÚ.Ön×þ`×n(b ×àÛúÁKÛª,ÚÜéuÛ«Pâ™»g*6íëïÙaÚgǶð˜¹W¦bYîÁ,à=ÂDUƒ�„ €á)Ãs=«³º¿ùBøFýÏéù$eÏa¬<h‹•M;èøl”6içKow¯ÚzÁ½,m3ÓµwN÷RÕöÛ>Óõ~xê°%q*‹ °gÕ¥)Ç1X¨Ä S•-„ŠÙ¨žx0Ê0 €r€P0<ex®grV}sN瀥æôÚ~õ1[ªî%–Ú&ì|5cÕóÎÑËÒ63]{çt§\óæî�©ã0ÿÚœÊ&4wlýô|.… _l™Ÿ³¥²Q=ða"ŒªÁ� BÀð”ṞÉYõMNσ¶´rÁ½ïÌ->cµý¸ãZF¡Â¥=ÏÑËÒ6³]{EN<à¯ëjSìwIhîoÚÕ•ÓÁºsó¶¸RµÝƒ¦÷ÙÛßzÍÖõY›P å/µŠ[ζ•«›þö›û[v}}Å=gsï-[]:¬ãÚ)üï…¦m7÷mëúš·ÍSa[T»|¸}=™¿Ýð7©JÝ£u¬í¯áá­ÿøãÁÿ#¡¢i»?·Š;Ïæ—^°Mï8œHí×܉p¿uAæ¼ãY}«ë¹,ñ;‹lÅÿØ~;ÎMì<ëì~`UwÜóçm}ç“ÄöÚïùÎóô’mùׯýÎi«lîÚæªÒ„´N,}¨-JË»îë/Y¥ò³ m¤ì§oZ^U}}'ü^Ø^âmìDå-Û‹¶íí×Å}ÎÛxLû8 ða"ŒªÁ� BÀð”á¹®cHdwšÏQݺe;ëç}Çc~éªíD\L¨po”½u"g-^Ç"tVç$9¡â«žsóJësω^ÝÜÕÏÈàÏy¿S{%X§Cxq"…¾ÛÍœ€áö)\¾ø¿N|¯joENšçtU~Þæðvuô¢}8¾i›ýÐ:ißí0ÏAl9›žI°¸±Û–â8ÜÞ1®à-wŽ6²R³FʵÎïcv:.fÔžñ¾3o§×fÿ 4 ÿ;-¡ ¹»n§Ý6ým„ç=⢄søÃ}ìHa SAüu[BEÏãpÛj³Fp?øm¶Ñú[ÛuûåØôŽÃO‹rÇ‹ ÷­QÑ´Fí¢·0ͪyËjÕNz fÞ¾î\õœóؾûëøô½ORÎMüÄγO¾ú ­ü@âHk[î<øëœ¾èÝ·:fµe'õî£Óo¿ø‡˜0´®ã"Zæ/Z­á]oÿœÄÒÈ6­²rÝ»6Ý®a(˜EB•k“¡ña¼NŽw¯Ww¼sðÛ]Èûû~[©ý.ÜÎäLû2 ða"ŒªÁ� BÀð”á¹®cHdwš*ôfÖ9N¡“à¿­LDT8Ç$r"=s3"øÎâq$' ´ÿæ¾{ãîŸNðþÙÖ~¹ß­ü³íHè2EåáVÅN´9ˆÎM8?r´°ÇW¾nÿÎß¶gΫ~/¨áÑÝÑM±Ç,m3ûµ—Iø©¶„!Ï\TÀ‘sãû~°ã OÑ,I¡Àµp[mæo'lñöÓ!6$…ŠÀ‚kÖO¨¹¶ä„Š Ç}7° ½J\Ùi‰dî·BE´Nxô*²õÝ?Äþî!T¸“¶ö㎯õ½Îsã ÔÆ£Jú{'�xw˜öù âûÛ~®ƒýP$E-¼GÃß -¹ŸH•8ÏQTMxžBA,žB“Ú&d:£�ï&¨,�À° T� Ožë:†´Av§ÉÑ… ý}ð­ûN«{ƒ›*ú:;Zv'©Óù’µ½mÏêGŽ`ø;)8: Ñm?r CG2üÛíKÜaj£üßú8z½÷)‹i[ýÐ:ißímí‘*žÏ6 aÉkï;•½Þtgi?a[ˆ¯ãYªsÚñ]Y»óýf¯ãh3÷ö?Ñ>Üo%öËŸZ·ª”†àÜu*œ5í`·nU?úGm#ñ;qKqÒ³ És eýÎ}ðy÷(“´ó’ø_Ø ïÑÅ[¿ÞžRÔ¾Ÿ]Îs´<\¡àøŒªÁ� BÀð”á¹®cHdwš˜PáYàO[ú_ý(†–C0€£9¡¢m¬NpÛï¦[ªPáGl(-Äý†—¯¶Þöötõ›ÿwGoxËÒ63]{ï¼®>™²ŸÎÑô…—ßç³KTŠoÉkž£îç`€ö“†*zG›e*¶[½h‹~AÕj¿ºáÞS¨#9|'¾Z·_Õ¾—Òc6¡"Jãð¿· B…–I¸¹«9±¸j[atEºP‘*�Fƨ,�À° T� Ožë™œUßäh´ ­¼x9‹¶´ô@Ì!ÀÑÈIêt¾:ÖÉê·ýnº¥ ž9Gýôºíì¬Ûé¸Ó–Q¨èîè oYÚf¦k¯óz*Íq£aücø×02&ž¢u$è¬Ùuãäµ¢^Z)<þwÎÿäË­¨—,í'¾ŽgÇ*\„O㈾+s)í) .¢&Ø/·NL8 ÷¥»P?·qǽ‡PáÒªâ©Ñ9µPÑJý˜_ZµaúRpžVíj†Ô`™3'ä´ö+¹ŸQÄT[ ŽÛR?�†fT �`X*�†§ ÏuCÚ »Óäh$… Y3*8ØþÆs²BEàÈ(²ã7ÖÌê§:MíÖÝAtQ'lqñþvQ$M¨hKéçèå(õÃ{½Ù¯¹šnF —öãW[Äo-‹ËGÚ¿äw×0.ætlõÏQÝÙ±êÅ¿·­ƒÃTñ Õ‘„‰VºMßãpÛs¥0„£ú-áwç·õÿ|Þûx\ѹó>[ú{«®¾`µ½mè{û¶³wÝ.®þÄÖÕ>]dÇÁ®Ýðî=µµ¥õ—mµROàÜì,®ÞË¢¢Á¾H(ù×”sÓyÚÓ”ÒÏ}ïóäÚw<ª)ñ;ûÞqFûàú·~Š�W¯Í…³Ÿ]Þýçê¾ÄÓ¿Âí¦¶… ™ÎÇ(À{„‰0ª �0,�ÃS†çºŽ!mÝa~áºû» ø[N{K¨pŽIXà2r¶B§Æ"Žã$9'¨%B¸bš­YHú8ÁGTÈÑù/¶Wýž­ºY d‘“›½@ ÑŒÑãÖz;Äš¶Õ­“öÝ6; R?>Ùß²jüúuÌü¡z ñ)8u}ªÁ,&î|8‹D¨˜ÓîÎÌr'G¢ïx×ië•”mÄ"züÂ¥‡oò[먼í]·öeÁòWì¿ ¸eNŒêqñó³öÙ[NÛÅŸ_³ïÐ÷^±š®TÏÅû|qÅ®nÞ°5¿»™jZ3…mø0©$áá%Û¬½8ám‘ ÓôW]= ï{¯Yõ{‹Þw*v­ö+¯ &ÎÍw+öݶó샷kýϽßÜIœ§`?·ö?Å#·®ú„ï7·ÌûêËV©¼l×\›ŠÚ“KçpëÆ¿¶ã ¿N—ܧ­ïÌ-½b[ݶ3!Óo޼G˜£j°��ÂP0<ex®ëÒÙqëpâÑ‘éîCm!Ö­¡ƒµ÷–ç…\˜§ms 'écÛ­­§N=ÚÚŸ¬NpZ´DÌ:ІÆ?E“¶·ôž…ŽùüÒãö¸ÛG9¨[ñéS“±sôº;ă˜¶Ù­“ö] Æ·,÷`ða"ŒªÁ� BÀð”Ṏ³:Œ)"$VDÓYZêÇ„-KÛäÚcØølTϼG˜eÐ�@9@¨�ž2<×qVka^}<EÅB†Í¼êù€÷¡ �(�ÃS†ç:Îê`Ö^[b>*ä×¶NGQ¿É[–¶ÉµÇ°ñÙ¨žx0FÕ`�†¡`xÊð\ÇYÐâ³<tÔÅè,Ø>æä,KÛäÚcØø,Ë=˜¼G˜£j°��ÂP0<ex®ã¬–Ó²´M®=†ÏFõ|À{„‰P† �”„ €á)Ãsgµœ–¥mrí1l|6ªçÞ#L„2 h�  T� Ožë8«å´,m“kaã³Q=ða"”a@�å�¡`xÊð\ÇY-§ei›å¸ö Û­½b•¥SgYñÖ¿±jKç§S;$Õö«v~éÛÜ¿“þ9VHÕóï&B4�PvwwíG?úQø�‡2<×wV›v°ûsÏ1|ܪû‡)ŸÂT”òq[Z}+Q¬ËjYÚæà×>oÖ´Fí¢Í{Ç¡cé/T4lgý¼ˆ‹»v£²mc~©bÕ­ÿÛv^zŶSŠ£&Lë_»¾k§{V]:‘ºn`§l©ò²]ßÚ·fl¿v«mqþ¼­ï4ÂeXÑM×{à=ÂDUƒ�–z½î�Ÿ2<×u iƒìtkÚÁÎU[:±dßûÞ’ý;ßñòlþ‚Uo%ß§Í€qÉþSO'ÎÙ¢Ujÿo«®œöÁ«¶sÐLlëg:ýÐ:iß-šnUì„w,½…Š;v«zÁæWm˵§æo¬zþ”Í->c5_¸p"œ·ìDŶÃï6wlýô|û2o{û[Õ`]µÙhÁçnŠÚ¶}jîÛVµbKþô¶ó¶xñFLàð¶W{ÆÛÁŠkYîÁ,à=ÂDUƒ�„ €á)Ãs}gµy«jçç°ÊÖ'Á2ÏñÚ\ ßFÇÀ¸ùÓy>|Çwø°‹µ[áÛd÷öùá(:£¹ÿ–­.iýoý[V»ø@¡òX–¶9ȵϳe*5[™¿ßVj¿‹–ß;aKÕ½öuÕfðÚs$J„í´M¨Ío£§ýs9¾j·\;ݯÚR—}jîß°‹þ·§ì|õ7±ÈŠßYmå~›_©Y#¶>VLÕóï&¨,�À° T� OžëÙÕ.NÔá–UN‘mŽZdrò „oÝÕ'ãßï*d‡[ëö ú;ÅÁÄú[–¶™ýÚçÛú °Ýõ‡:„÷½Îvë­ï§~¸¿{2_Œ“ðk§=„ ?rckÕ½Ïçæ/Z­á>—Êò­ïþ!¶>VDÕóï&¨,�À° T� OžëYÕ ”}1ˆtˆ&¡âÔ×måq½UN†³ËbBEü{ÑgBE»ÉÜéuÛ%ª"³ei›Y®}sË®¯¯xNõy[¯½b+rÈÃô„æþ¦]] ¢ ük¿ò’mEi Jx)Xßÿü´­TwìÀm»- "üüêfØvôÝ×l]Û^Z³šê7ÄÛV[]‰ÓöøÊ×ýÿw*ÂÔ‘-\mŠx݈¸õ*Žl«²èo'Ú‡žB…g‘À—¸§|anÞN¯ïtÙ¬(¦ö0 ða"ŒªÁ� BÀð”á¹®cHd·[øFºííohr¸î÷¸O>°u?_ÿ”-­ÐrH‡*xË|ËÒ6û^{W›Á[Ï"*ÿl;ªó0ÁþáíŸØùÓ­ºŒÒ|A)¬‡üÄsäð¶á"¿]=†(…(#>Ü ê;¿û€U6ßókIø‘ EµK\»ë! ø¢Aºó¤…u&<›_Zµá1µ¬ŸP«Ç²Î&ÒO¨ˆÚ~"õ$0Hÿ(¾©=Œ¼G˜£j°��ÂP0<ex®ëÒÙí:UiQ N¨ð¸VîýéDŠa„ ¢OúÇ –¥mtíÛ„¢P¸ò¾ßiÞz;ïÙúé1a@E*«¶²x¿_“áÐÎI®°¥ûÐÑoos¡�’­ú¥~t­Eá¬#ºãTbÆ™ðLB¨pˉ *¼©=Œ¼G˜£j°��ÂP0<ex®ëÒÙmæÂÔ–ü,*|‡T³‚Èá‹Þ¦ËñN¨èõFK·,m3ÓµO½FÁ²®oýýëÕMpN}2È-¿ç„ж6îK—ZÇ*œI°¸ª4—@¬hºLÿÝ–0õ£ïoaE±Q=ða"ŒªÁ� BÀð”ṞÉYÍ,TÈÂi½íÓ–þWÏñ…PÑëí4–´,m3ÓµO½Fá²´T Yx½Ò‹«&‰nË' Tný½=Ù¥Ó*tÙbúˆQ­‹ØŒ8=Ûl¬˜fÇl9áoQQxÕóï&B4�P*�†§ ÏõLÎê@B…¬a;ëçƒb‡‹_·¥Å #*ˆ¨IJ´ÍL×>õµR?Úk:(5cÕ®n¾f+~E"…Bé«?³ýԤᶙHýhksaaÕ.i(]…¬.íGÆ©41Å/h™Q¨éô¤žu+ü‰β܃YÀ{„‰0ª �0,�ÃS†çºŽ!mÝn=Þò¦ 2W@Qk7!"›PÌ8BŠA,KÛèÚ'®QóVÕÎG5Z8ë®–DòóÐ1œû–8ï'l±²bM*â‘A!Ï–ÓüFªƒßÅù"-4[ɺ՜Øâf‰R—Zßo*43IÕ*a!Ψ¸g¸í Í&„жZÉ¢³¡1ëGiLíbà=ÂDUƒ�„ €á)Ãs]Ç6Èn·î³~k{qÃÈ¢‰]„ˆhV‰.ß÷Y?ŽcYÚfßkï"i¼õ‹×SPÌŸGŽzçô¤ Û½±Ú*P9¿d•êV,º"^¢ýs—Êýn‡@›ötñûyõ;¡ï_«Ûn[…³ôö¤~Üjd­(‘X‘ÌTÓ1¯Yµ¶›˜åFÂNÚú²Ó¶²^m #mF[/“éz¼G˜£j°��ÂP0<ex®ëÒÙIëŒjht–zïçï'S?º8€i©%.ÜŸœýLç³Z'í»¥4?R!ïQ9A['í£–åÌÞ#L„Q5X�€aA¨�ž2<׳;«Sr¢ á`æÏ²´Íì×¾ ¦£,>cµ(ê#O¦µøh󏨠6ªçÞ#L„2 h�  T� Ožëƒ8«AšÇi»X»5¡üù ÎEúìX/ËÒ6¹öå°°ÈkîÄŠ;¶¿ù‚-ˆÕÅÀ o£z>à=ÂD(À�ÊBÀð”á¹>˜³Ú´ƒ«¶4 ±¢¹o›«Kv"Q¤ËfYÚæ`×¾,ŠçÓÒŒ¦dûU;ß6{ VÕóï&B4�P*�†§ Ïõã8«Íý·luéñž3u gªañ¸-U~Þ¥8"Öϲ´Íã\{ ò٨žx0Ê0 €r€P0<ex®ã¬–Ó²´M®=†ÏFõ|À{„‰P† �”„ €á)Ãsgµœ–¥mrí1l|6ªçÞ#L„2 h�  T� Ožë8«å´,m“kaã³Q=ða"”a@�å�¡`xÊð\ÇY-§ei›\{ Ÿêù€÷¡ �(�ÃS†ç:Îj9-KÛäÚcØølTϼG˜eÐ�@9@¨�ž2<×qVËiYÚ&×ÃÆg£z>à=ÂD(À�ÊBÀð”Ṏ³ZNËÒ6¹ö6>Õóï&B4�P*�†§ ÏuœÕrZ–¶ÉµÇ°ñÙ¨žx0R>ýôSk4¦›¶\ë�L„ €áÕ@tšà¬–Ó²´M®=†ÏFõ|@¨€‘¢Á¿gVÛÝÝ ¿ �0*�†GÏð¢£cHdcŶ,m“kaã³Q=*`¤ü÷ÿþßí«_ýªß@ûÙ_ýÕ_…ß�=êž}öÙûë¿þkß’Ëô£…߀~è9^tt iƒl¬Ø–¥mrí1l|6ªçBŒœ¬QDS�À¸ùñœÚÿ¤Q�ÙÑ=Stt iƒl¬Ø–¥mrí1l|6ªçBŒœ,QDS�À$øãÿ˜Ú%M}–ú.�Ȇ£cHdcŶ,m“kaã³Q=*`,ô‹ª š�&E–¨ ¢)�C÷MÑÑ1¤ ²±b[–¶ÉµÇ°ñÙ¨ž0zEUM�“¤_TÑ�ƒ£{§èèÒÙX±-KÛäÚcØølTÏ„ Ý¢*ˆ¦�€IÓ+ª‚h €ÁѽStt iƒl¬Ø–¥mºþðñØ(@¨€±‘UA4�LƒnQDS�Ý?E'Ù`å1(F#õZÊxÉ9›p'ÃXIFUÐÑ�À´H‹ª šàxèþbàú> ³Ÿ~úi¸ hšðø3Ú™^6ÀìÁSÆJ<ª‚h �˜&ɨ ¢)�Žî!È?I±òŠžÑ/^´ÿáøÚÚ,þÃìÂSÆŽ‹ª š�¦M|ÐN4ÀñÑ=ù¦[mÄ Èzaà|ýûú믷µWµc˜MxÊÀØQôØc…�LUA4Àpè>‚üÒM¤p†Xy@/1ÕŸ}öÙ¶ôEQ¸¶Ê‹ÎÙ…§ L�È ÀM0r Ÿô)œ!VÀ´PáL‰$ôÿ$ñšԧ˜]xÊ��ÀL¡Aâ)ÀpÈ€ü!áABlÒt½Ò–ó¶&‰ž½Ò$’©ýõB…5©O1Ûð”���€@¨(\/˜6&$PH¨Èò²@/~úÓŸ†Á,B¯����ã[,¸^0-”ơȥz¤¥y�tƒ^ ����Ç·Xp½`Ò("Bâ„¢(H1‚ã@¯����ã[,¸^0)”Ö¡4µ9ýKM(8.ôZ����08¾Å‚ë“ Ût£�Ç^ ����Ç·Xp½`œô›nà8Ðk���À@àø ®ŒƒA¦z-����ßbÁõ‚Q3èt£�ƒB¯����ã[,¸^0*>úè#¦…‰@¯����ã[,¸^0,L7 “†^«/ŸYcû†­-ßg'×öì‹pi¡¹{ÓÖÎ,ØÂ£ukÞ —å’?ÙÞÚ9›[X±zóóp���LßbÁõ‚ã¢´ŽŸþô§~bºQ˜$åíµ¾Ø³µ“sþMղǭ~“Žê¶ÿüäšíµ)÷ì³í˶~ž?¡âÐêË'[ûßa÷ÙòÚ?Ú›{GÞ‘Ä@¨�(÷ìnã—V[[¶…Ž~ª¨åþ¦HCã (\/8L7 Ó¤ä½Ögv{ãÑ@h8sÅöîvzå÷ŽÞ³ËgNÚ™Kuk¤|.¾Ø[³“Þ6² žS±÷ªmìÝ ÿ/÷v6¹÷Žl¯¾fË ,ìÌå÷ì(×¢@¹ë9¹gBáÐÙI[®†Ÿ‹¤àxÆÖ’}ÇgÛvÉ¿—=ËPqLÁ¡ Ðèþ†âÀõ‚APí‰Ç{ŒéFaª”¿×ºwÛ6Î.xƒÌ˶ýYЧ.àd—ÏB*îݱú£ÝélŒ‹02$mÿ!Æ;~ÏYx´~'á(�Àø¹gwo¿Іç¼~áOáò÷š¶}ù¬Í¹lõÆgáÂ.Jl¡âîM{qãÖD"ÁLf ßbÁõ‚,(j‚éF!/Ì@¯õ¹5ë+¶ê¨©'/m[×Àg0¡Âý^Ê[ÑqÑC¨ð¤½+vÆû¼«X�cæÏÖØø†7PüŠ]Úþ·pYœ³íKçº|2°PôE÷eX‡Á`¦Àñ-\/èÓBÞ˜^Ë…MŸÝ°F|„ìG[(ò!ñ†ónÃÞS.¸œû¹³öÔ¥oúÿo À?³Æ{W·„²ûlùÊ®Ýs"…[. ëb´mÓ³…e»r3 }Lz Q½‰'´£½·mãÒY›[®Û‘¿Âç±e5k4êvÉw*ælaùU»}÷O±ãM¾Õw_‹Ö×ùºôêMÿ\¸mž\۵Û?Iÿþ½#»y%</g.ÙFíE[{3‹¿w´gon\²3‰Ú"Z^ŸKï{¯º°r½Á}óš·?gmíf£µmo¿.o7q`jÜkÖíQïH­ “!²kP¡Âý^6u ˜ÌzþBqàzA7˜nòÊŒôZéo3ýPå¤xq÷·¶±|_è {„«ƒà®ÀfÂíB¶cAF<¢BoK¿ÕɈÞ.Ž*×¼ŸP埴åÿü]ßÁwBEø}™„†úm»E†,Ø_ž}Ê^ôEWóÃG­óílTßãs;Ú^õœ‘;ûìSv¾c›ÉëžË¨~ˆœ™ŸxëJ¨ˆç½Ç„ ¿èÉHì¸w´kWüë#!⎷?‡ßñÌ…Ñ÷Kÿ˜a?0÷ Ûhü9\&t_|ÓάÝôî‘8qAtÁÎ<õTðÿ¨ßè&˜ª[ DŠè^ˆêbtÿÎÐ $˜ÞM"Ç!˜ªÇ;o7]á­sfնš¦�£vÅëI˜nòÎÌôZ.ºõ6SÒþÚÎnÜŽ sÞîH´§~8¡Â­ãþÎ TD¢Hø÷4„ 9+Îaˆ"*<\ÔI|YÊvƒc ·ã�oÓ±zÎRÏï»Bƒr ¶ 'M¸B„ÎApBGûõ‰œ2ÿü~áí¶ÄŠøùOn`:DýP<ÝÌ¿¾™/BQpáQÛ¸­5c…ý~£¿`êîóÖý—á;Ã0P?ôu ‘ãL76íÑï,DE“Û¯Cx^LBíŠ× L7 Ea†z-÷63¤ûŽyòÍf8(MíB…ÃÌ6~iuÿM›¤½„ ÇgÖØ®o õ®BE|p쬇“=à›Ìèï¸(‘¶¬ŸPáÞ-çÞ£ß÷}‡ ÷ˆk‰™’Cúõi/­÷gïg* §DΪ›A"¼‘]ø&G;&¤º{´M¨è.˜ºõ[÷_†ï C¿~(ºOBeü¾‡`z/¥ßhëïÂý@0ÝcP¸^ ˜nŠÄ õZ-§xáÒ{vè Ð;‹h¦;ÂBÅÝÛV—Ø mý—öñößµ B…D …1kÔkVßÞ³m X'"TÄÄ�÷Æp¤BEâípœ~ß÷ѹù¥Õ¢ê…X|r`$âG_ŽPyƉ®K@ýËDdWš“ëÑ&T„ËÂû'M0uëwö =¾Ó†Û­ã,~ï&èÙy¸ý~/å¾<v?ÔC0Më×Û~'ÖG"˜dF}®×lÃt£PDf«×j{ó–6°MË!woÏÜ@9\'¾›&:„Šð-aË¡¬]…Šéá ¤VÛOsŽã Dçó>[^Û Ã®=4=kå3¤~$pP4OìݵHÌàöƒ7™Pü´¯½ª9|/¥ˆfF¡¢`êÖoëú}§Q )‚iÚ}yœ~(ü¼«`ÚW¨¦�ƒ¢>Š×k6aºQ(23Ök¹|go šš'LyÅ-G_ƒW †_±Ð`Ô…nG³yxƒæ´+k¿´?úƒh…mïÛaýïìJý•` í×ÇЀxËÖü|æG=gá'¶ÖõM`6\¾u›ƒ bnõµ°ðÜ}Þ¾ý6t{¸ðêx¸yʲÎ|úÖÛàà pì|¶Y $|Ñ÷ûr„Öb¢ê†œ‹]›Ná(ºѬ).=Lé‰ÄŒ¸•&@L‹–øô)I;yŸ„KÃû)p¸û ¦BE†ï à‚騄Š~‚ißÔ¦�™PÿÅë5{0Ý(Ùëµ:¢’$ªÇŸYµ­úªôãµÚ/½AðÞ8öÕVåùK¯ÙÍíŸùòO즪ÈG3…8 VϯFÿKÛ¾ t‡«¸ïÞài»iæýÖFݶUÈÍú£u¼Áû¿ü‹ý}–-ß°½äÛUŸœE ¨¶x³ÿ÷O®ý‹¾ù¢w^ÿ1nt¯Ø{þþ&­5à¿wtÓ^õ‰à³…å5«û¡ÚÎpß‘#³Óu;�Ó¢5+G—”uáŠJF…/Ãv¼°hgÿÞ¿ÝÓÏœ3î9ηß´ËWþÑë—z‹¬é}b6LÓÄ1¦÷œ€§Û~Áà8è>ƒâÀõš˜nʽ�ÀÄéŒnHÒ.ȵË[5û»“ЏaÛÿ_Á4&Ó{fYÅ1Ó!ò‡k—F.˜}Š5Ñú[}ïFB¬ý¡Õ5)‚)À@¨-Cqàz•¦…²A¯����ã[,¸^å…éF¡¬Ðk���À@àø ®W9aºQ(3ôZ����08¾Å‚ëU.˜nfz-����ßbÁõ*L7 ³½���� Žo±àz¦…Yƒ^ ����Ç·Xp½Š Ó¬B¯����ã[,¸^ŃéFaÖ¡×���€Àñ-\¯âÀt£�ôZ����08¾Å‚ëU ˜n ½���� Žo±àzå¦è„^ ����Ç·Xp½ò Ót‡^ ����Ç·Xp½òÓô†^ ����Ç·Xp½òÓdƒ^ ����Ç·Xp½¦Ó ½���� Žo±àzM¦8ôZ����08¾Å‚ë5˜nàøÐk���À@àø ®×daºQ€áÉm¯¥ðÑ��À¨à¹R,¸^“éFFG®…Š££# ÃF` P��`”ð\)\¯ñÃt£�£¡ÃfÀ 7 ÃFcP.¸¦Å‚ë5>˜n`< T`Ø ”ãA?„a£1ú òÁ5-\¯ÑÃt£�ã¡ÃfÀ ú! Ñ•®i±àz¦˜ 6¦û©—A::7içðÁŒ~¦|pM‹×k40Ý(Àä@¨À°°^÷ƒ—îÐaØhŒ~¦|pM‹×k8˜n`ò T`Ø X¯û‰ÁKwè‡0l4¦{©ŸA±àš ®×ñ`ºQ€éPMКv°[µ•Åù``:¿d«›ûÖL]W¦õëv­²dó'*¶u.ÛZµÅ¹Sv¾ú›ß¶åk?{ÝO ^ºC?„a£±~÷ýPñàš ®×à0Ý(ÀtA¨À&fÍ[U;â‚Uoݱæþ »(Áâôºí6Ó×?jÔle>|Û†P1”õºŸ¼t‡~¨¬Ö°ÝêEïþ ú—ù¥lsÿNÊzμõk¯Xe锨lÙ¡¿ìÛª<`sóAŸ–þ½<X>ö³ß½D?T<¸fÅ‚ë•¦ÈØ„ìÀ,/ö&ÒìpË*'âBvëu?1xéýPíŽÝª^°ç«v«yÇökÏØâܼ^ßé"(6­Q»hó^[P{@¨8žõ»—臊׬Xp½úÃt£�ù¡›íYué„Í-Um?õó.†P1ëu?1xéýP ÍïSz év¸U±^{h Ø Öï^¢*\³bÁõêÓä„ l2ÖܱõÓóS²^÷ƒ—îЕÐö«¶4w–ª{éŸw1„Šá¬ß½D?T<¸fÅ‚ë•Óä— wlë5[_9í ,ß²½Ílɯw0o‹oؾK?8ص*Öèýž~³­Àcsß¶®¯ÙÊâ)oPûA,§Ùû{ý;hûîi»X»ÕzC§ï^]‰r çWìê–Ûîo¬zþTPÜŒû®¼é«ág2o¿Vß >fßýß©UôÒû|åêfìw“¦õ«~þv°¾·Ÿ+/Ù–Ÿó}hûÕ‡Ãå1ë*<ÄÉÛÎãÿwë·Wàh4÷·ìúºÎõÃVÝýÀªÞyócþ¼­ï|b»?oíÛâ3V‹å¢7÷7íª[?¾ßÑïœ¶Êæ®m®¦+︣kã£õ—¬RùY Ĥì§oZ^­Ä®YüÜf½îƒ›~+m¹LŸA:½ÎVLkî®Ûi„Љ[¿{‰~¨xpÍŠ׫¦È?å*ü·f1g°ºcG°Ýõ‡¼¿ï·•Úï¼õ~gµ•û=çuÕ¶š­¾Sœp°/zNpÃs4C‘ÁÛÆé•µ �ÛÁ¶.Gxþ¢ÕÍp‡Âßôö¥yËjå ?dë»hm£›P‘iß]ÞôVÙú$ö‹þßÇÞwÏY¾U}Ìû¼j»Þ9ñçž9Ü®h¤sàcÎ{\p‘=#*¶³~Þæ}ÁÛ_÷·Ž¡ãš8G#L)ñ—IhöÛ/Ü©}øêƒ¶ò‰7Þ~î\õ÷k~¥f ï÷üuN‡çFG>ÿÞ~ñiç/Œ qçÊ/öžíÿÁ¦UV®{Ç—¶Ÿ:¾0WÜ—æ~(€„BćY®{ü|e7m3m¹LŸA:½Î[fË$zyÖC4‹§ÏÂûdÞ¯×îGÜF°ïí¢Ý£|ÓLëwã}E˺ ‰ýz|åëþÿÝúm×dÿÐûNKhœ[ºf»±Žæ—®ÚÎÁ'í"l›ø¨ï¦‹ÃÑïx}àæÞ[¶šv½ãŽ®wŽÖ¯ýÀ*×S„\?ƒßÔòjüšµ‰é¯û�¦ßH[îLŸC±àš ®W�Ó‡ò ²ÐáDƒ·bÎy …ЍÀcøwô¶ß‰qgÓ9¡Âea¡Èp ¼± m6@^tß}wûŠÑßn¿Ž·ï‘3ޱÂtë·}«“o¡"pšç(%õ£ý<hYxÝÚâ¡Sû^û>8 <¶6Ó9=è{®‚ýðŠõZ(ê„¿Zr?ƒv‘8¾H< ¯cßëÞÚþ ¦ãJ[.ÓgN¯ó–ͺ ž Ñ«§h:1.¸_{ £Ø÷nÛàÛ¶¯²>B`x|™î§p_ÁÛ·oÞ1÷füš„ýNªÀÜê ¿zúqû/Þ8Ö‰½ÄáŸÙ?¤]ûð\ç°¯Ï ¿àý¾Ž/e?ýãÛ´Êâ‰è¼4÷�"!â7öa¦ëž8g}LÛJ[îLŸC±àš ®Ó*ܺšz®¼ óÖïí÷söÿ|~ÌÁ\d™÷Ý”îÖ­ê¿1ÓÀ²µ_ƒï»lðö>e?ãË#a¢¯P‘¶ože*Çà/ë'TŸ;‡.øNÜ2œ+°ï Üuœz‹y}+ö†4¹Ÿ]Ž/Z®—ùºf½î'/ÝI?”¥-õMÇ!Æ¥9ûIžOFðÍ$zËúßON\h?GÁ÷â÷fJ¿ã¦TŽ÷sýîé¾âp¿ëî‡ú Ún ê´Yr?]»h?¾Høò3ËuÿFÓñ¤-w¦Ï¡XpÍŠÅ,_/¦(&3.TÈÉWxî [\Y³jmËjˆÅ„ƒÚ~¸P¨2T?“Ãz°„€k€Z­Û¯jßó>oí×àûî >ÃßíîÀ',\¿C€H.Ï©PÑ]PÊ8P?صڵX¨yôV3¹Ÿn{ñýŽÿN¸<Ëu?†õºŸlvg$ýPÖ¶ä[7Ñôøm<ó½œj£Ø÷ãôEƒ ¾iÛ‹/oývÿû)å¼z|¯P‘ÖÏõ»§ýÏ{=/ú]gEP(ýÎûÛºX³ëmé1ÉýL?¾hyüügºî٬߽D?T<¸fÅb¯—›nT"ÓÙ*·_­|8j€{8¿d•­7\Í[×íÉ«oS­¯Ã¾µŒ äƒÏ[ûuœ}o½Ý;eK•Ÿ·RôfòÉ—Ã7¦1‹ÂÛëmt¼ÝLÀ·™{ëÚþF4:—=¯IÚ�ºßà¾õ¶y~iÕn„¡ñÁÛÔU»š!õ#XæÌsÒüÜûÖ~%÷ÓK{˜}âí&BE®I?”å¾ë+š§‡ŸÝ5Š}?N_4¨àë¶—¼O:—÷¿ŸÒùà{ã*z‰Ãý®³–‘u×¢šó¶XÙ Ÿ=Éý ·×Ö–dñåЮY±˜¥ëÅt£�å ÔBEäFÀ„3숾㨞+HwÞÖ«/X¥ö¯)γs,ãh–:›Q¸±Œ1sμû¼ë¬ö=rBÂmD…ß¼Áïú˶Zù…ígߣ°çľϲóÕßDBË\>µ·¯K/¹æ.—<]…DGáá)¥R„ùÝQNz¸¾Ãu˜rM’Çà-K˧NìCêc`A{Èp®ö¯ÛÅhÜ[M·~ŠðÏ©hv– ŸßsðB§¢ÿuײÁMÇ•¶\¦Ï ^ç-»epöûЦiNb?¶ŸÞ+=mû~¡bpÁ7“è-ë/T¤ô'±s9r¡¢¯8œE¨ˆ™‹´‹ö+¹ŸîX}ºÛR? #\³b1+×ËM7ú£ýˆéF Ni… ÷öKÛñméÛò^­e'*7ì7«„œã«u«­¸¥ÕŸYõ{”ÅׯÙÛþ@Í-Ó@óŸÃ·PñeÞà3Y¿­¢zo¡"Û¾oÚ'aá¼ Ü÷%Û¬½ Ô—žµï-ýûÄú컢Ú¦=mU Oîk`ÉŠõpW{NO´Ç­}†‚Óvñç×ì{'´½W¬¶ûqǶN|·bßÕ€=Zæ ¬ß®ƒøh™7°ÞzÅwÚ–yû×6[Bx·ö?änÝ´såýNõe«T^n½ÅŒªÎcŽŽ79‹¾S j[d»îéç­Ÿé»iËeú ÒéuÞ²[Ñ«Ÿhú«1ˆq­ÏÛû¸bßÇ$øFûZ!0›ðçDGï·ÂB’QÐpQ&EÐHdû‹}Äá¾×YýM¥µ®¨h´~ç~FÇÍÎâg7‹Q†ëã/Ën:¦´åÎô9 ®Y±(ûõbºQ€òQZ¡ð–õºŸlvgø~Ƚ…vÎgÑkëVk*Þ¤hú½gléß¹uÃõ‡ãG¿·P1‚}§à›f=„ÀVjCø™oÚ1·„øºøŒý¼úŒÐö®Õm÷à7çổ•v¡ñDÅÞ~»¿øDEt‡ï„‘Ñú)×ùÄw­ªéH¯½]çVMò˜[ÇÛ. ë;oÛ:·Y¯{Úyënú^ÚrgúŠ׬X”õzŧ}÷ÝwÃ¥�P*0l¬×ýÄ`³;ôC6ëw/Ñ®Y±(ãõbºQ€rƒPa3`½î'›Ý¡°ÑX¿{‰~¨xpÍŠE™®W|ºÑO?ý4\ �e¡ÃfÀzÝO 6»C?„a£±~÷ýP~Q¾šéš¥-çÍv>)Ã=Æt£�³B†Í€õºŸpºC?„a£±~÷ýP~QX½®OS1C„Š|¢ëST˜n`6A¨À°°^÷S‘/ã†~ÃFcýî%ú¡|“E¬@¤È7ºFE„éFf„ ›ëu?uð2 è‡0l4Öï^¢Ê?½Ä DŠü£ëT$”FÄt£�³ B†Í€õºŸŠ6x™$ôC6ëw/у4±‘¢åcºQ�p̰P¡yò_³uÍ#ïÏcŸ¶N‘íÛª<`só¬zëNÊçÓ³æþ–]__±Å¹‡­º˜º6Zëu?eð2 ÆßaØlX¿{‰~¨8ÄÅ DŠâP„{ŒéF Îì ûU[ ´ù*~gµ•ûmîôºí6C‘aî![ßݵêÒ‰`?Sí”-U^¶ë[ûÖlÛÞ(„Šo‹‰ß;aKÕ½Ø:{‰ý[´ÊÖAìó¤Å×O»v£²dóþg§m¥ºcmßM³†íÞXµ¥y}gÞWª¶{Ðl}Þ¨ÙÊü¼^ß±æÁ¦UçÃsßFùMç;m¹LŸA:½ÎÛȬ¹o[××leÑ»—Ûî­’XxßÍŸ¯Ú­\Ýwe«óeýî%ú¡b!G‘¢XäùÓ£L7 �IfW¨nYå„çàæb:ð¾íœù–ÓßÜ]·ÓÞ99QÙ²C÷98ÕJËI¿xÃöGî4í`çjøxûóIç:Í[V»è ö/Zu·Ñùy‡9$&T4cÕó§l~éªí†¿yÊÎW“`âvÇnU/Øüüy[ßñ~÷à[_ò¶wˆ|A**œ8u¢b[‡ñí”ßzÝO8Ý?thûÕ‡ýßé§dÝĽcânšÍ/YåÚÏlk?!ŒŽB¨p}uÛo&„θø,ëwŸw«½>o÷çVñúÿ³¬ýZO¡µiÚEï3‰ÏÿͶVmÑõKñm”Øt.Ó–;Óç0^üöŒa7�˜*r#Tó+5kýÁv×òÎAl ªÛ„ŠÐšû7좜‰¹~ŽýqÍíÏý¶Rû]ÊçÚ÷º|–fI¡">ˆÿC¸Nø›ó­ÖˆEHÄ-îP…ËA'¶Ÿþ:áßÍ[?í§|{Úë~âÁ߉ôCžnUìD^„Šžâžë Ú#§”ÎU9ék·ÆÐ5lgý|ð‹«¶œ -è OtFVu³”g@óVÕÎÏŸ²¥õìÀýf¿È´¾B«¤ÔÇDâTZ^Vëw/ÑŸIõg6.£Ÿ�˜-*r#T@0p ÷øÁB…ÿÐCçK/Ç~ ïséoE%œäw“BE˜ö’xÚ!:´™7©&¡>îïÓá:ÁïÌ’sà¬×ýă¿;“ØçJ¨è)î9‡;-ÅëŽíמ û¡1ÕÆqûÓ­Ÿ´/êxÄSðÂu’}J‡eZÃu¿ƒ¾-'×{BÖï^¢?“êÏ0l\F?0[”^¨hîoÚUå {Ûë¨aÐ1HM„üz6¿ô‚mF¡ÌÞ@|ó…0 â´­¬¿d•ÊÏÂïöø,|ÛÖ{ð.à±hàªìñqO¡Â3w,¡ÑQ°²-þÛ­^  ոЛÃDØrçÑp�ß6—i@þu[¬lÆÂœãu#ÂßX}+––’*º F=9%}Ä·0m&=ô÷cá:Úׇˆü(õºŸô¤Óë¼Òr%Tô÷z 2W_Çë;»:öÃX˜î•=ˆ'ùÝdßã‹4É>'):¸åβ ­þßnÿwºÃrZ¿{‰~hüLª?ðqýÀlQj¡¢=„·u  S©ó¡ÓÝz; ZýÏcu”{½r=öÝ.Ÿe*úX?¡"*R)gçÿÿ/‘@Žü¢Pcß\εÛ/o0}ze-dÂ:iƒò`àp@|§æë1ñ½] Ï…«_ÑæØ$D†ðØ:›nË} ·c?»-Ÿmëu?é3H§×yÌT¸ñ%[ñS´t¶×0è*úˆ¦Í}Û\ …ÅÅ[¿ö«\¿Ûó³,}Q/q¯ŸPáŽÅûmß)×q' V+š†bBGQ\¿/z°ÕËÚ¶åÙü’­nÆ 'žé‚QŸcÎ*´êïèxûúÀ“3ÕGõ»—ô9Œ—~×�Ãònô�³E‰…Šð-X|0{°cUoÀ¥/t*¢šá€Ø 4ƒA¬¢%jùϽ>‰ $ThÝ­D|ž6�ï©àYÝrrBñ§ÍaH†A»¿û Ç–E¨H¼ÅD¨H·^÷þîŒf`Ÿ(úE´Þ¶w8Èa_”.š†÷TT§A÷á ¶â·×gÞv‡Mû î¾õïïw^ ÿïúY÷ýpÙ±DÓ°oO¤…ùBj[_F:„ç"ªåï3Úžnß’éfÝ–‡Ö­ŸêÙÍžõ»—ô9Œ—~×�Ãònô�³E‰…ŠÐaM¾åŠ[·7a»V«ê_ðö3r %áÞˆêMåõ­V:C¯ÏFaÝœygîX"¢Spè|[8 P‰Î’#ðÕ.•ëõF¸nU?ý$¾_ú,ñYßH¶Y·ýì&`̶õºŸô¤Óë¼e6_à;»OtoT½þåþ(}¡›P‘.š†m_ýLm7ŠÊ¬×g£°…ŠÔûÛõ#Ç讨fŽÄŸ}Q(TDâEJŠFªP‘<¶lBEG?…PÑfýî%ú¡ñ3’þ æhô�³Eù…Š^o;Ð0 Y‘U«ýê†ÿyÛ�T"Æ57%¨gñêó½>Öz:íadCÛovò‡*<s‚ŒÞrîÝH/\F®øÎRµn¿ª}ÏûÝ^¿‘t( ö·‹s9;‰šá5Å9h·^÷þî ßyæß»ñû®Ó:ïÍÐREÓØýî×ÝY³ë[.¡×g£°þBEp,Þï;A Eˆ¾/ û —bæ 9Éú9μ~½V ÒOâû¥Ïû–~úsÊñùֳϞ=ëw/ÑŸ‘ôg6E£Ÿ�˜-J,T¸¬ç´& bÞòþ×5ðm`:Ç7懟§4¨‘æ€ôúì˜ÖcЛ>=阄Š(ìÚ;o:·‚@xÞcáÚÁïöú4Ñ¡_;Ï’o=K°Ãëu?é3H§×yËlîÍzÚŒ9¡uÞ›ýDÓ béZTÁE9õûlXë'T¸´–ØoŽE¨h 2ó+7lÏë?:‹hê<(rEÓ•®Yµ¶e5m¯‡P‘Ö§Dûѵ/:ŽÐ:{Öï^¢?#éÏ0lŠF?0[”X¨ðœÖpJMm+n‘ÆSL7Pvξç(¸™+–þÞª«/Xm§jãáÛþ@9ˆî_ïþÙŠiºPç6¡BEéª.‚à ußqBM²VD|ž–ëüžÛ^ËZç5mžˆd‰ŠÙyNÉú˶Z©{ÎDÊo„çh~éªíÚÁÎUï¸â‹;§ñe‰Üÿ0§½—C8«Öë~ÒgN¯ó–Ù\?£{4>ûÚüj03P»ã> hê"˜Òú^ŸËz ­Zm}ÝX„ Ï\Íý^Z_ž÷–˜n¯—P‘&:„¿Ó=Jë˜BëŒY¿{‰~hüŒ¤?ð)ýÀlQj¡ÂwnÛ*ç{ŽB¥j[Š®ßrË=Óàõ“°x›þ^\±«›7lÍ/VŠßÿ™U*/·ÞTzË+7Â<ð^Ÿ %T„Ž¿ÛÏ ߸ª ]æïÈá©ÙÛ¾ðÿoï Z#9Ò4ìÿ0‡:êÚ'Ýö “}2ôÅ thðÁ0‡BƒÁ`¦@`h†i ³fØ&¡YcŒ èŒ.–Å ¢0ËÒb郅X,1ãÛø2#²"3#2«¤JwVÅóÀ ­ÌĘ̂¬Ž/"ÞŒüÂmÓAÃßkÇù _¶3ì„›{ž› z¼N=ÿJÎgÏŠ÷Éó™-?×®á LÊA•Ùîß?wÞ†Q¡rOžõ\úû~×O2Ó-—ÞÓÐv•îƒ0m÷mu¹%5Ýÿy'÷¹n"v™¦§2ýëÞ ØÎbÈëã­9vÙgêŃMSgnV ]9+cŸKj©ºmS¦©w_C±¨2“Åo Lù²g2Ñë4ÊæŒXgü^ËÅôXF•ûåî©·­ÓhE]uI÷C¿tý ]Ä €´Øq£!¤j«O4üq6‡<³Áœ37â2M¸ëL »Ý(Ÿ5áV¼Ðm ÓôüòêK™¼üº4aGG§r–›•æ|Ñ}¦1*êæn]6'MÅ(lÂc™|î¤4M³&|Y“!?þPÆ/^Ë칚!vfË/³:Ÿi¡¦†¾2RÌ֨ܿ\£BÕj´"½/¡íNºú¥ë7@hè"N�¤FB ¨­>ÑðÇ!!´uÕ%âPÿÏж‹8% ¶úDÇ8„ÐfÔU—ˆCýC<CÛ.â@Z`T ”€Úê âB›QW]"õOòñì¦X^„ÛÛ+â@Z`T ”€Úê âB›QW]"õÏ}ãY±JÍåÌoÓ̵ã¯ò3=Ô¨èÊÓ£¹i^~[$lÿ{HWƒ{õ¼Ì±³,×kY,^É$˜ }{¤ß�Ò£¡ÔVŸhøã‡ÚŒºêq¨ÏÌ�øüÔ®ìsp*óÐêZ¹ð¡Læ¿6÷íŒVXùèƒC9™]®±â®jöB¦%Ÿ×ÓÝÕ™œ¨AQ&kvÛ]Ùb+¹mˆ�iQPj«O4üqˆCmF]u‰8Ô?Žgïæ2Ù+žÒ‡g%èÒèŸHvõ®¶}—äfTŠB·r5û¬X.}••òÕ˜Ôày€Qag‹Ä¯[¬V”¯*ÕØ·="N�¤FB ¨­>ÑðÇ!!´uÕ%âPÿ<8ž©Qñè#ÿI—áÉÁÉYùÔ¾PêF…Ê._lîuxÙäºnå2ûXFÑó­"7Ëc$‡Ó‹øLŽë™|zŠQ�ÛFÅ®i°É¢nåjþLǦƒ3ÄwWw\mõ‰†?q¡Í¨«.‡úçÁñLŠý‰ÌýI¦GÌùÉÑô'¹)?㌠¬ä×[èußžÝö´03Ê| æ<ÙO²ÈNŠÙî¼7 9‹½N¡Ç¾ÛÏŒåÅüÊì÷ûÏe–ŸSM•—ÏC}ýüW^N‡CgÞwª«Ë¨ðrzì™{õÎl«|£Ñ‘œže-L »=—½7Ñcš×ûçÝ…LµüOdºø­¹¿¡Ø=*Œ§êk,Få½½Yáw½•›Åky©Çï}&Ù÷ÏähTœgtt*g‹ëZYÖ“ž�Ò£â}ëz&ã‘uÁÝԽé,~¹gÒ¦MÞôÎ¥lãé>SO*ådÿ<¾üÏW: w¦QûN&y§Çì;8‘l¥†LÚo%›jG¥V6sÎëÙ‰idµÑþ?¹™Ÿæp듆—ÞÛÐv•îƒ0m÷ µIß¹Öz÷H޳ÿV½« ޶û}ímRW]"õσã™3*L[_æC¨þŒŠP.‡·2ï›mÚfÿVMÀéÚþü5íìËáø¹œkçÆ#£™]ßÙÏ<Y w—2;ÑYOä¯Ù—rèÎùÁc™œÿg~¾ÑÜ6£²b‚ѱL/´ßáfCìËxöÖ–¹®n£bÙßÑïyU|g›×£¼o^Ÿ©06÷©å˜Š*×óûB*ß\É»GÚo¼Ö>äžgZ|/§yÿÌýο뛼þ£3²L{pñ¢0,bùMV”ž�Ò£â}+o`ì Ú56ecÔGÒ¦Uu-Óã⑆¥h<Mƒ6Îd±JÃã Ϩ¸»Ìäxä3{ÍÞí¬d!o4ή#¡FÅMÙÚöw3¢¶úDÃ'™8Ôfîù&cHAÓt3FEµž[UŒNW×—ûÛë¹ÿùzb¹kYœÚ§£ÕãZn|¼ŒÌ³x5ŸïÜ hÕ§ž»%½ç¡íNºú¥ë7è”gTäuÜ >˾oT„ônÐìÚlwüºØ}ÜÝb꙾j1+¯wz¼U½’ÏDØób胓LÆû-q+T¾š*Æ5*ʲؘ°ŠQÑrLE•ëÕŠBE_Ë»'Á{äúœÕU=v…ßÕÍð¨”×»Íê–þÎ�ï[ùŒ ¸]p/;»m âíý’6­#W÷£¾_˾ÙRè¨7ÆFöš«½ÛYïô¸í¶ócË]tj¶?ÛõCÔVŸhøã$‡ÊX3÷Þ£iꞦªy09LÉv±°kÊöRÅÀÀ µ'«öšÝ3ÓjO+F…Ç87Eºe€³ÃêªKºú¥ë7èTŨPÕû!?¯iT„êb×qv&F¬_¢rƒðz}¬÷AòÏ­Û7hë—* ÖÊ@ýZ³¬04kûšFE÷1åýH³¿Í~wïï\6F5®ãb—wÿ[×ðyš¿õú"N�¤FÅûV>0?´¿¸/] âºI›Ö•{2ôT´0öÖ¹n½¡´kõ ¨µuBJÅŒ 3€RsÂ5’ùuâŠÔVŸhøã$‡:ͽ¶XÔ¿iêž †ãÜú±¨ÑaÎcDõõ°âš+>ýk˜°NEL/ÊíÌžf¼JA]u‰8Ô?Žg £BåϾüHŽL ø=ŒŠ¶º¹–Q[Á$¦UûeÎXu³4töésÉfs™éwi5*º©Ê>ôiû.ë…Q�{*žlÈì÷ßž~+Yî†Çž6j@÷ßé|ê5¾] ¢ üæúyƒ yjÉ¢’¬JåœúÊô@£Ü`©¯—îO¶×8ý~™¼ÖP†­îï¼TܨÈáò˜²>þtõ™;¨¶úDÃgèqh“j7÷Víœ÷dšº÷ÖƒFˆvÒ¯f(XUc›~^ûnëÌ9Q˜±ö:ÑÁÆn««.‡úçÁñ,hT¨–õÙwE›ÝìtçŒËüµ³³E9‹êîò•|úÂ{õ£^ëõÔõoê}7§ßÖê²S[, ˜¶öË8b¿‹Š{ào…cê*_ψ½n·’QáÌÔÚ9l,\ùÕ QáÎý°W߈�iQqå +cɆ~–‹<kƒatp*ç/ó< ë¿«Ý580r6?þÍþÛ5>îxW–5’U•×pKõéEÞQ¨˜®³ÿØ”õWs —ÜÊ+{¥¡te«?‰m©ÙéAaéïÚ®Ò}¦í¾ E3M[ͽîXT1Mo› +µœ¯\òÛÅO¶,æóùë¿Ö’ê~&³Z΋"¾4“âæ±¨žG§#c~up‹#á§‚AE ½oŸ,ï)ëã>Œœ-PW]ÒýÐ/]¿A—ŠÁpd Yö+\=ZÖÙbfAýA†Æ’ë@½õ9ÜŒ{íòZî\VΈ/¡U7Tmý5W¾j,¬Äá2g‡ÙgËRÌtЙ.ΙÏdÏdb¾côü—¼É¾Óì/Ç,Ëãd>çr†¨ñ2É–yƒ´È&Å>wO"÷¨LÜYÆLg¾Ø¾ÝJ¿ë?ì ÷:ž7C$øúÞêÒk�@:`T¬­°+N6ÔìT¯§îÁAŨÐÎA£Ãì•õžXø×pO/–S õéɇµïæ®ãî‹ûÛ»FШ¨7·£b“j«O4üq†‡¬išþQþüç?Ú뺸ã¦ë¶e¢Ê2nþˇ2þRŸh.;Û™ î©^ÅLÕxüQ-ÙA5/âYökek˜´±íE äÔU—t?ôK×o—kkµþ &­Íã‘{õÃü]>°0Çäß…œ›óŒŽ&òÒ½ÎP9çL~¨lÓ:úw/v¸m¦ÞÖÍHkÐÞ:ÃÔÉÕû2>Õ¶×Ú:K#›/gWøªŸ£.S†iöº–„×{5Fî/^Ëì¹ÆeoG™‡G e/±xÛ1~¹|™û2ËÔ$61/R¶ÒTvª™±wWçòÂÉFú{eÎüVµþ®:ÃÅÅÎdü'wýçíe_Az.�HŒŠµ{Êæ:â:hvïðùæÀ}Ô=8¨<ÅÔò:ÌÕN¹n[ϨX>ͰŽzþT"6}Oó×vÙPmœbFE¨\ªD¥0*VU[}¢á3Ü8¤¶iÚ¬ß.Žøõ5O£ƒ~÷}=£%}T‹Eö:åSSû·wjÙ:b:FÅFÔU—ˆCý3ìx†vG±˜úp'�Ò£bmù†„?8ö·ÿ^FE=i“ÙÖ‹Qqg—Ô§œgòfI\wsQLç¶Îý?f_˜ëÆŠÂð¨ l9V`T¬¬¶úDÃgØûŽö¦i3î„êkà;´ úÝÔí|¶Ä»bÖVå4_ñŒùÕ²ÅâHìþ„QÑ©®ºDêŸaÇ3´;Z#v®)â@Z`T¬­ÀS=U0ÙPŸƒƒH¦ý^Œ #÷ýôzÁ×2ìSKÏ`(®ÛbT4ž|Ù묖£bUµÕ'þ8ÃC*ß °óíïÏ4íŨ(¯£1è&~„’hzïC·fÙwe«¿¶fÏcËñ°dšÈ©«.‡úgØñ 팂¯émFÄ €´À¨¸‡º“ mʨp¦HupMÚ¤j$‹Z&>ZÎ\pçmIVåÎWÊK:l|ì€Ã™&åû£æL¿–ÓÉk¹n”ÍMS¯½—YÉìo&•mN]eFNmõ‰†?ΰ;öÃ6Mû1*LÌpÿóëb‘3ÝYö½²fw×Y%WŽFE§ºêq¨†ÏÐN¨‘Çc³’ˆ�iQqOÅ“ ¹Îø2P“Nué>I›É¢Æ2ù¼^–5’UùåQ5�¾–IðŠdy_ÉùìY‘„ó虜ÿø¯µ²¹Aƒ{úYÌÖÊ™®LRž7bTîϽîs"ÒûÚ®Ò}¦í¾ AÃ5MCiÀX =y šyÿƒ±ÈƆxÆüÿ ”ͱî;ØävËÂFy>ŒQu›SW™Qþ{…¶;‡úgèñ ¡.'�Ò£¡ÔVŸhøãlCžiêÌ‘ågö>ŸÈç:ã Üv “fÅ,„rÛSSno‰e·­ñ4Ι ±Ùmó_ËÿV+[yO®e‘3Cô³“ïªFpШh~×øë1iKïMh»“î‡~éú ºˆ�iQPj«O4üqˆCmF]u‰8Ô?Ä3´í"N�¤FB ¨­>ÑðÇ!!´uÕ%âPÿÏж‹8% ¶úDÇ8„ÐfÔU—ˆCýC<«)OúýTŽ”¿§/½‘ìø©Í=ÚŸ¦ˆ�iQPj«O4üqˆCmF]u‰8Ô?Ä3OyÂÜ9úâ39úƒË/S[AÉ©+OOCšãæky•ç ª+×­\Í¿‘©—[¨8æo2[ü$Ùä¹*ïÛUÑBçIOz¯� 0*J@mõ‰†?q¡Í¨«.‡ú‡xf•¯´/“sk�ÜÊÕù3»j™[1©vL¾Ù‡Þ1n ãZ’â»+™g“å h'grå¯tw)³5(Ô˜Èd~eW3óó–9.Vvz,'³KfV'�Ò£¡ÔVŸhøã‡ÚŒºêq¨ˆg*»j¿$r.o•¤úrè¹t…ŸOªË<Û™¡Õ”Ê¥£+³4ìrë±™:‹b~*åòíŶpyÓq -0*J@mõ‰†?q¡Í¨«.‡ú‡xftw!ÓÃQÀ\P£âC9\,Q|ð™ÌÜl‡\ë¥é ç²&ƒ›ñÁáTþ,‹ŠÞÊìÓ¿xF…ÑõLÆ£‘N/’ŸUAœ�H Œ „P[}¢áCBh3êªKÄ¡þ!ž¹×5öe<{[Û§FÅ‘Læ—r1=–‘¹W££rqãf1¬kT½›ËdïsßÌyßÊbúÄüû>†Ã[™÷; Ž4Dœ�H Œ „P[}¢áCBh3êªKÄ¡þ!ž©ÙðÔ܇'2]üVÛ猊/„ŸcâF…®Üq´gγgŽûïßÍUFÞÍ'²gÎ¥¿‘Óò¼öµ^ÿÈï �¤Ã  „ÐæjôUº´Ý7„ÐêêªKÄ¡þ!ž¹<O%»zØg ý;_ä‘ùì#»êF¿FE®<ɧ^³n¤´,i‰8[[ãipÚŒhøãè½AmF¡øã¤û¡_º~ƒÝ×F…Q5!æÏrù W?þ»x}Ã|~4žÉuèóÑò9£Bϳ,_Š"N�¤FB‰‹†ÿ~ƒÚœˆCýCÌZϨÈb^¼°KÈÑÑã5Œ /™æÁ©ÌoÞ«wèßÁUET]F3*ˆ�iQPâ¢á¿Ä „6'âPÿ³Úü!£Båõ×6ZŒŠàò¤å«Èè8“ËFb̘Qñ[‘ˆ“ù½€tØj£!´Áúè} u¤Bë‹8Ô?Ĭ–U?ra?²"Ç­\f˨fT¸åF+FÅݕ̳‰…áò[¸ó•¹/tU‘‰dó+{½[¹šg2É÷Õ Výp"N�¤5�àÐéGhsb�Ò?Ä,£» ™Ž*y"+nìMdþ®vÜ?•ùä‰5*\’Le<Íd¶¸®ÃéZ³L¦c]Yd…ã®g2ÝgYÓÝ“Þ'�Hj<�À=¨v0Bô‹ÞãÐà/-ݹ"¶æ5Šm+o¿"N�¤5���`ÇÁ¨°²¯yœœÉÕÐ_¥¸9—ÉÁþ2ÏEâ¨�H j<���ÀŽƒQá)Ï1l³âîê{9=:hæ¹HX�iA���Øq0*jº»’óÓ§rì¯ä1½‘ìø©LΘž0*�Ò‚���°ã`T mF@ZPã���vŒ ´í¨�H j<���ÀŽƒQ¶]�iA���Øq0*ж £ -¨ñ����;FÚvaT�¤5���`ÇÁ¨@Û.Œ €´ Æ���ì8hÛ…QÔx���€£m»0*�Ò‚���°ã`T mF@ZPã���vŒ ´í¨�H j<���ÀŽƒQ¶]�iA���Øq0*ж £ -¨ñ����;ŽòÚv@:Pã������`0`T�������À`À¨�������€Á€Q�������ƒ£�������F������� Œ ������� �������00*�������`0`T�������À`À¨�������€Á€Q�������ƒ£�������F������� Œ ������� �������00*�������`0`T�������À`À¨�������€ òÿZDFf����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7u.png��������������������������������������������0000664�0000000�0000000�00000170607�15030617045�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��<��¦���¡GŽü���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ñIDATx^ìýï‹$WžçùÆŸ0O¶…òÅ0Ô^’~"úA – n<Éér¡ ÚgÄÕƒ¤¶1åK,$äeT£¦­‘–¢…œÎ·f’ r(©d|´+t£Ç)ioŽˆqtéY1~„6 ‚‘$Î÷ÚÇìs3sóaînfþ~‘þÓÜ~³ó±sŽí�����@Ãx�����€Æ!ð������Cà�����‡À�����4�����h�����Ð8����� q<�����@ãx�����€Æ!ð������Cà�����‡À�����4�����h�����Ð8����� q<��h¬ç6üÎz}Ûi6r®ÔxdƒZgƒ§îA��€õ#ð��”âÅ k»;;¶“ž2•ì6 ÞÌ<¿Û„6ÕS Ú»™ß[<íYwpáÞS²Q`mÿ=k <Òëx—À��l� <O¬×¾Vv[¶×=±éjüsõïÚÞξu‚Ó‚çd|j½ý›vØ?³qô€@Þ´`Ç<ãÑc;j¿¶ºÀC^ ¬»»®À#‡_��`³<��¥{¶¿³c­NßÎÝcc;ïÚnás ób`GwÒ¿s:ðƒž½Gà��P:�@¹ÆßZppÃvZ·-8{îô¾³~ç¦uúß¹¿·Iqà±r��`Kx��J·âhí´l¿wêºsÄ¢Ö{G6¸H=ªA.ïulÏ5Ñj`'#”¤ÝüÐúÁaøº–í>²QøãÑÀ‚n;ü®ø½;{»7…ßyaƒî^üX2FFzL …Ïíbø™ëý»w-xüµ[~ŽìѰì6(‹ýÖÀºQ— ÍGø;;Û Zç6ìßžÛ}'°ÇGþ7ß°v÷¡ ÓË3¯(ðÈ-s¿ÜžçÇaqïIÏ»2ãý~.<��@x��Ê_Ѳ֡õÏ}5øö~ž AôØ­ðuÖ;=ßwfýÃýI…;3Ý´îÉï£Ö#­ƒÀÎÎO¬»·› ?4†Â‚}7n†ûìÌ  jaòrøØ›<ý"¢Ï¾aíÞ»PTrz/>òÁÌµÍ <ÂïEc›ÄóþÜF'.€Ù»kƒ»“ Â/+;·ÓÞA,—âä¨έÉ*É2¿e½áfZ®áºË´Qˆõ¶½|kãEïx��€* ð��¬€nØ*Éz(ªHÿ<©G|0’ª\Çc€¤Þçï4²ß³a’?øÏŸT²e|ØB‚èµþŽ!éÀ÷üp¡ƒÿþÝ® ’ ÂöË%w½™xøùÈüÆçvÜNZʼpc£dîlS,åä?ÆJ6LÒä[äø*Õ%I!Ç›oGß±øý�� <��«qÞ·NÒRâEÜÍ%S¡Uô]À‘Tì}à‘iqàƒLP!éPá‡Ånjϙ[aOßêÕO™y›eNà‘ÿÍ^ú·¾&ÿ{ dÍ H$Zw¾åˆZŸ¼gQ˜±Üû <��@x��VäYX¿VÆÕRâ냕æ»røn©Öó©Š~½©ÏYUà±°õŠïú£nD­·ï[æ,÷~��P�€•Ét˜Õ* âç¶·§0@¯k[÷Ñ0¬Ê;…a@A—É´Y¢KKaàQÜ]æúæI×”ìmâå纊…]arfuiÉ-çñÙ»sϯ⃨ðušRŸ¿Ìû <��@x��VÇߢ6¬ ·:}›¾ïI<NÅ|WŽ´­Æ£Gv¨Á5Ê÷щîòÜFý»a%ý¦uÏôŠän1q׌s>:JîÄ!_»bß ÂVô‡u4ê¼@¯Â‡…AŠŸ÷Ô]jü` ~ðT¿ö-ˆî þžè®5þ÷Îà»ùÐ"µN2Sþ6ÂÉüæî¶³ðý³ïÒ��°N�€ò•ßY] |«‡\å9œTñœ¾;‰¦\דñèÄîé–µÉ{º¤nš„z> F†vÒÝ‹^wÜWë÷ý­Ÿ[ç-ÿ9ûÖ¹wÝù¥¾¥‰û ~Ê8ñmi?¶ŽBœè5ºålànKrG«ý–½å_“»ì’øÉ/¿‹¡=*¼oš¼´ eÎÌ÷OÿÖ©qI���Ö„À�°A“– éJòú*ËE]Z*ª¨K ���f"ð��lŽZ`ܹc½Ó|g—ôAV‰À�� ©<��â»Lä) E]UºÇcW¬R2Xè‚Û´V€,´x,���äx��6çbhýãnj ÑpR� JCc†üøóníºQc€Lÿ��€<�����Ð8����� q<�����@ãx��P’ápx©éøƒ{'���ÊFà�ØJ |ððå—_Z™é—¿üåÔô'ò'ÙÁCsÓo¼Qø¾YÓ«¯¾Zø9~*ú¼÷ßj^Ó!Ê÷ßï~!��Àv#ð��4Æý¯ÿ5`üæ7¿I‚…é0AaC:HȇúŒt°‰0!ÿýš>ýôÓÌ|¦£¦t(£ÿûÇõ«_E¯×ûõ9´.��MGà�¨UÔóF:Ìð|¤Ã‚m£€ÆÿöÇGËC-D´||ëŠäZŠ��€º#ð��TRº’ž5|Ë …é@WãC‘| ’|7M´ ��uAà�Ø(U¸}‹ U®}— ¾Õ*ã„ë绩ՇoMã[†¤×^£×��T �`mŠÂ ߥ‚õ⃵þH·¾!��UAà�Xj¡J±o pC­ô8áF³Ì Aô·Ö7ã‚��€u"ð��”FWôÕJC†*ºj½¡+þªnl'… ¾E��X'�Àµ(ÈPÀá¯èûî)ªèy³et��e"ð��\ŠoÅ¡JªZp¨ÂªÀƒ +®Â >0S‹ µþ`[��×Eà�XH]Ô-E•QUJU9¥› Ê6k;£ë ��¸ �@!_ùäÊ;6AÛ™¶7mwjIDø��.‹À�P%3r¨« °iénT„��`�°åÒWÒiÉ: ü���Ë ð�€-¥ ¢U¥QwÌ ä@ùðCaþe\��àx�À–Ñ]1¨ ¢iàén/>Àã¶È��€À�¶„Zp¨"¨ ¡*†t@©•’¶oÝ.YÝ]´Ý�€íDà� § Ÿ*šè¶‚m’ßö�Àv!ð�€†¢²ÄØ��ØN�Ð0Tî€bì��l�h >ª1 ¨ÌóùàCû ƒö�Ð\�Ð�Ÿ~úi2)€åhÑÝŠØo��h&�¨1 @ª;¯èj5Wª+àâÔ‚Î~T‰ÞÙÙµ½–þ½aÁ·6Öóã‘ |h½ÖžFoÁfù–Q´ö�� y<� ¦¾üò˨UÇo~óî¼Rão-8Ø‹Ãñ™õ÷\ð±ã6 ÞLÂj¡µ��ÍCà�5¤Ca‡Bl¹ û÷­Û~ͺƒ‹è‘ƒ®íîܲÞð‡èïYâ×Õ9ðPpó–µ»÷­?<w5CºµÇ÷ßï��uEà�5¢J² ºZÿ¸kíVËö:ÚƒÁ(´ÞxÓ‚Ñ‹è‘Yêx„’®9-ÛÙëXïÁÀFñ‚h(‡C÷��¨#�¨‰t¬ÓØ.†ŸÙq·m­}ëô~gƒÑs÷œ÷ƒ {·¶'ðH<·ÑàwÖ‹Æ-™µlêIwra `��êÀ�jÀW¾j×…%i °oÝ“¡)4ÐûvØ?s­#BC{ ñ˜;­¶Ä­'Æ£=èulOaÂðÉdPÐÖõNŸ…o}hÝöø±½»ÖOU¸Ç£»— "ªV'òñY`­kvVØ:Áw[ ?{^+†Q`m?ßÉ´ýÞ¢J -§{úîýá÷ÝSë‘–ßdh>žØ08tßþÝ{b™÷æ>wÖ|¹§3f¶~©/ßÅåý÷ßw��€:!ð�€ŠóaGýî ‘¤S•åC 4æÃøÔzû­°R~hýsU‰¿³~çåðù#\ŒÃ:ö#;TW‰Ý® ^<µ ½ë>CéÀ†z +v^yÍ:ï=¶Ñxl§÷ÂÊö޵:}ÓÈÑköÝwêoÿ¹û=†_;?ð˜ÌûnwþµÈ… º¤Ô·ð˜=@éTà vzË:Áiø)ú[ž*¤¹i¿üåÿä>ãªËoÖ:Ðw*$zÙö;Ú‰B ‹'ÖS¸ã?wæ|-§Ä¯³Å­]ê@z��PO�Pa ;TQ­ïí2}…{/Üs:pvD$GöÔß™ ´«T'¯ ½Xw7¬Ô·%]L\E?3-X4¶d Hþ7ÅŠZsä{¶_8Ÿ-Ûï=±³k/¿±÷­•™Åëeþ|N·Þh` Oãå(tÔþ��êƒÀ�*J!Gý+YËž†ÀV¬“ {Ñëñó¾µÇõ,3†ÇU·|’Öye,¿¢ùXô¹?,˜/o™eÓ ~äÎH��Ô�TPs®(/SaW¥9°ÎÞnÔ2 謯çK<WØ/if+†k;/[§ÿ]ü‚Œ2–_Ñ|,xÌš¯d\Ö­_šÃw/ãI��Ô�TЯ~õ«†Üe‰ ûyß:©±7’ç¯xLº´´ÚGöÈã¡»ŠœGvo©.-óøî.¯¹ßU4EAÃôcIבVÛº†á'ÅÆgìν%º´,\~Eó±x½Ìž¯c»>þ³î}ë'Ëu{è®-Ó��T�TŒ¿ý¬K¬?<¤[ ø19ÜXî.'ñà¡j­àïºr`½àëö¿Î¾^¦î ¹Š~PÒÉØñä)]|—–ËÈý¦ˆ;#=æEÁcÉ�¢¹ymݶà켄å÷Ÿ æc‰õ2w¾šÙmeY <¸]-��ÕGà�¢£9ãø¾²¬ŸÇ-3’ÇÔÂàÌN{a…\ï[çÞgÖÿP•ñÖþó»Öþ#ÿZ÷ú/úqKŽä±7-ÜÏÝV­ž§*ÿzì²·¥]RÑmiwß¶à¾ZPLÛí~aO£VéÇÜ`ò·•nÿ:´“ë.¿£O,x'ýúξ}±ðs]kÂùjÎ`¤W廜 ‡C÷��¨"�¨O?ýÔ~ùË_º¿�T•öUu=��ÕEà�òꫯr ÔK­^šÑõ �€f"ð�€ŠPóx�êA-<ê'%��š‹À�*âý÷ßg D FvЭ�€ê"ð�€ŠÐ ˆ @=øn-�� š8J@EPqê‡q<��¨.ή 4~Ço¼áþPº«·§� š<� Taâv´@ýh¿åÎJ��T�TÀöÏm4øõ:û¶Óläê‚;µ��P]�P[Û¥eX{g'¡Çyß:­–í÷Nm|qbݽ–íì÷l8vÏGÎmØâÆÏ{«mÝãÏlxöÈî}aOƒ7'ÏL­v׎ l”|îS Ú»…¯L/[§ÿ]üò‹¡=ê¶­=¾oàÔ.âgæçûÑ‘µ[zOËö: /R?l©ßŽ<º´��P]�PªÔn¥ëð*Q�ã*ý>ŒÙíÚà…{þâÔ‚(èØ·N¯? .†Öïul/|ýnw`ÑËǧÖÛoeßµh ¬Û¾­ï½»Ö=wÏ…oöl_ç—ÅÅëµ_±vð4|Ñ·ܰVûž^¼géžµ[7ì øÖfgÏí,¸m­ÖõNÏÝç…ŸqØ™ӢߎBZ Z �@5x�@E¨â´•·¥­Ràµrp-)|`‘Ì×3to†ëiV¸àB…äõ®ÕFQh0>³þaÜBd:t(^/ïÙ›Á gñÐZ;·¬7üÁ=óƒ {·l§uhýó‘Gºõ†{(WR­Fæþvá¶´��TGi�¨ðé§Ÿº¿¶H•¨¢¿oÝ:ˆ|gýÎËI‹¤õżnzÿáƒÅ‡øn#éС0ðç£÷ÐýÏSþ3§Â‹Œ± IöÜïr\¨Ñêôí<ù»ø·£˜ÆîàîJ��T�T„îôðꫯº¿šDÝ8>¶NT¹+óù1'¦±] Nº}„S«ýø®ã‘¹ñ+ö:Ö;~Ϻž.|n|ØA+×¢bŠBŠ?³`¤j¾ZN¼éB„ t÷¢yY>Xx}fAàÍw8ÏÑß³Â!÷¾âyóßó¦û]^~þfýv̲µ!%��5Aà�¢À£Y æÆŽHº…¤Z#ä+ñ®ûÅ^÷$¬ª?·Qÿnjl ×ZaïÈÑøc»|`m1÷¹eY\8°³£±”EÇ ùÁMýo÷G~Ê=Ÿ´Êðf=qó1ÕåeÖãX†ïβ•ÝÐ��¨ �¨ ìý÷ßw5@ÔMb75v„ZoÖÙ{y2ÆŒÀ#yOô·<\kµÞèÃ¿Òæ=w]k<üß¡ñè‘v\7™Y-9– <¦æƒÀã:èÎ�@õx�@…èjñŸüÉŸ4§•GT_Ìꦡ;Ÿ&]a| ‹ÁQÔâ#¾µê‡ö`0š„)3Ÿ».7v†¿‹‰{t¾EÇr]Z¢×ýøï•viÁ²ÔºCû©º¡�€ê"ð�€ŠQ+Æ\9ö-æu#™ªÄŸÛ08´½èÖ¯õ¿~=?©Ì«•ÈgvÜucu(܈º¿,zî:üÀŸágδ4cA  ZzÓºƒgñc…Gš ^róðbе݅ƒ–¦ïìr˽¸UæÑØš��@µx�@i,F †èº£èV®í£Ç6ò•ôñ·}RÐjÁWÎ§Çø(l½pqjAG·wÍ·^Í{î*Ü]Mfß–6tñÄî…¿+wæW¸-m¬(¼(é¶´XŠZu¨u‡Zy��€j#ð�€ R—Uªþð‡?¸GêÊ Zµ¶HO©ÐÀ‡"Q«?®…þ܆ެ­çÛ¿¶àèÈzõNª²ïA*ûÏÃ÷vg<7¾æ ¥±h<¨UÆ kwø;ÇDw¢ ¬ÛéZ?¹›Œ H2‡{»M«}ÏN£VcËÝúö[ n¸÷¾°‹Ó{áòI‡0¾kOú±Üà±O¬ÎÃu–Å6¢+ ��õBà�¥ÁK›z¤B Uæ[m냸µ‡oÑà'…ÏâÊxô÷^Çî<²„ï;:yjgÞ³îñoS¡Á‘=ªSÆ Í|ÎJ <"[ä¸;ù=šô›Ž?³a^¤#-œâñE‚ÌÀª®5HæusÆ>IZ¯„¯Ów?JVQà!¾«>[ÍC7¿X†Âu5kÔ Â��4�TXsB ¾;��¨'�¨8B`³v0H)��õCà�5@謟Zvüò—¿Œ)� ~<� &?~…úÀj)\ôÝX;��¨'�¨÷–ßüæ7î�eó·ž ‚À=��êˆÀ�jÆ_yÖ˜\yÊõé§ŸÒ’ �€† ð�€RСÀãÕW_Z}�¸žï¿ÿ>¯Cûcå��Ð �Pcþj4Mï«óû‘ºŠÑj �€æ ð�€šÓ•iuqÑÄ•i`yéV´”� y<� !ÔÊ÷öà*50Ÿß_hÕ�@sx�@ƒ¨…‡¿bÍ ‹À4íÚ?´ŸÐª�€f#ð�€Òm5U©£©>Ó~ n_Ú'´��€æ#ð�€ãj6¶¶{mÿÜj�€íCà� §ñ üxºÂ­Jc é´û ƒqm��ØN�°EÒ•À÷ߟ»º Qtו|¸��¶�l!U uw U €P1D©Ûмè_ºo��!ð�€-¦fþ ;t5\á‡B…!@ÕiÛýôÓO“ÁyÕ²ƒm��¤x��"êÞ⯒ÿêW¿âN¨¤tk¶S��0� ƒ+稶I��p�€™t5]WÑu5]Ý^T餢‰uÐv¦íÍo´æ���—Eà�XÈõ¡®þºÊÎ]^P&rhûò!‡¶;m���—Eà�¸4]i÷ᇺh°S=FÅ—¥VD„��`<��×¢ «_aÕ¿ú[•Vº¿ MÛƒ‚1mº²ß^žr��€²x��J¥�DÝ]|…V-@T¡ÕU|ºÀlßzC­6´¨E¶ mzŽ€��¬�`¥r¤+½ A|¥WWûiÒ ZÏj¥‘oíã[ov�€u#ð��¬•ïÖo¢@„+ÿõ ð‚u��ªŽÀ�°q¾u€Zø ´ïþ Ç|%šÖ ë¥e®õ¢å¯0÷ÜHwM¡•��¨*�@%©­ ·ºÃøA.UÑö]%|…Û‡!šp9j…¡åæ[køå컥—³‚–1��¨�@íUÒ}ëMú»(Ñ´-­ÔjÆÿfßJcÙeÅx��  <��2«Õ‚Ÿ|+‘|…_“^ë+þ~ò-ÒÓªü÷iRK—ü¼©›‰Ÿ÷tˆ¡I­4üs~l Mþó���šŽÀ�°µ|·?¥Ã?¥C…_üâöÚk¯%]>MzÝÏþóäýù°eÖä»’¤'?–Izʇ1���˜ ð��` Xèße}óÍ7Q€á‰yÝiô¹ H4)Èà.'���×Cà�À *|÷ËveÑ{ÕZã2vè»®¨Uãi���\ ��ÔÂBÝY<hüŒ«Px¡Ï¸ µј"ú~…&´ú���¸��rpø× üXוoõ±-wš��¸��uQk ua)cPµîPXQ <|(�)ó³��š†À�°õÔŠÃw)£E†§ð¤Œà$Oó«°CŸ¯yÖ¼Óê�� ‹À�°Õ(4PkŒ²CÝ¡eÕãn¨U ­>���¦x��¶’ ê¾òå—_ºGË£ÏW±.¾Õ‡¿µ­ZªÐê��l3�ÀVQ0 0@­/ôïªZ`¨+‹•MÐw«Õ‡~£Z®¬"Ð��¨:�ÀÖP Ö "Ôd•t§…›¤0GóA«��°<��§J¾Z:¨‹ÉºÆ¸Ð@¢e€z]éVúwƒ©��T � ÑÔÂAA‡*ù«@4M­HªØ•Dá‚ßêCËgË��`]<��¤ ºmëªn »ˆÂ„Uw›¹.2jùB«��ÐD�€FQkUÞÕªC­6E!B]ä[}¨Û­>��@Ýx��Cujµ°ÉÁ9Õ²CÁAiª;ŽïTõV*���³x��jO•rUÒ2T¡[†ºŠlê–´eQ`¤W|¨[­>��@Ýx��jKpuÅP÷ý[• ¹æESSä[}l²õ ��À²<��µ¤VjÑ¡ŠxÕ*à 69~Ȫh9ûñQ´Ü„���T� VTéÖªtWµÂ­0 Éw<QK-{uuÑzP×Z}��€ª!ð��Ô†º‰ø v•Ç“Ð<nK� ñShõ��ªˆÀ�Pyj-¡î+jQPõ»†(ˆ©Ó-iˢ߭n<ZOšNÑê��l� ²T‰ö­ê2&†ÂµtØfZZo ~ÔýHã­���¬� ’p(èP…¹ÊÝWòÔ¥Có Z}��€Í"ð��TŠº¬¨…„*Èuø³i·¤-‹Ö¥‚ µúPë:®[��P/�€JPk� FªVu ¸s>µðÐúõ­>Ô¤N-x��@}x��6Nc<ø»|Խ˃V¥õÂr´Þiõ��V…À�°1 7|÷•¦ l¹wh¹.ßêC¡—¶µ¡Õ��¸.ÎÊ��¡ ®ÂuciJåVwUÚqu ;‚i9ªÕGÕoC ��ª‹À�°Vê¶ «øªÔ6­2«ß¦ß…ëSxäÇtQ7!Z}��€Ë"ð��¬…*«¯AX TÙDjµ¢V (W¾ÕGÝÇy��ëAà�X9¾²Úä«ôj‘Pç;ÌTZiÒ¶¤�„»á��€y<��+£.ꎰ-w.Q%œ;¬žB3…Ú®~(h¢Õ��È#ð��”NR?þÂ6µxÐØ$ ²¹^´ú���³x��J¥ §*Ÿ¯cÛ®ºsKÚÍQȦ®S 4)h£Õ��Û33�@)T¹ÔvU6¿üòK÷èöðwŸÁæi]¨Õ‡(oÛ¸=���À5éʺ®¦«r©›<(é<ªT+ðAuÐê�€íFà�¸2ߪAým»B•iM¨&m«jí¡`N­?\�€æ#ð��\š®’«ò¨±:$2¦J´Z Ú´í*˜ò­>´Î¶µU��MGà�¸Uý­@©(NpKÚúQ7$Z}��Ð\�€¥¨2øÆoDÃiª43>D=ùV òÔêC­–ó��¨?�À\ªøéê·*ƒtÙ(¦e¤Àõ§°C­u´½k»ßö±i��¨3ÎÎ��3©ò§ŠŸšýÓza6µxá-Í¢í]ݶ´ý«U­>��¨�À]ÕV^Íûé¾²˜*à …ÐLùV„��Ô� ¡+غª­îÜbuyZV,¯æSè»w)�Q��ª‹À�Ñ+Ô¢C9®`_Ž–™–¶ƒ‚A…êê¢ðC!!û ��ÕCà�[N5ß\ŸJûÕpçšíE«��ª‹À�¶˜¿§®P3 ãÕq‡hÿÑ]ŒÔJJ“ö-Z}��°Yœ¡ÀRkUÊÔ2Ûn^*µ �Oû—Z}(Ó`¶´œ�`3<�`‹è*´o~¯«Ñ¸>nI‹Yhõ�Àfx�À–PÅKA‡º¯”G•Xu æQ0¦Öjõ¡}1_��X=�h8uYQ×]a¦’U>…Ü’ËR m/¾Õ‡‚HH��VƒÀ�J•(UÆÕªƒ ùê¨; A®Bc{Ðê�€Õ!ð�€REJA‡*㌰ZZÎ üŠëð­>´-©Õ‡nmK«��®À�D'…ª4qgˆõà–´(“ÂíÃ~¼Â4��®Ž³4�h]!Vå[ÝX¸:¼ê‚ ñQ€²)¼ô]Ò´Ñê�€Ë#ð�€šS¥[-:tU˜«Áë¥V4ZîÀ*å[}ÐM �€åx�@M©Ò£U R…ë§V5 ‹uQ ©ÀCû¼ö{��æ#ð�€Ò­,ýÕ^š¹oŽ'­ `´Ï+ìPW•êúB«��¦x�@ø1#4q ËÍÓUvÖ6‰V��ÌFà�5 +º~�CºPT‡‰¥… ª@Û¡Zi<M*'hõ�Øv�Pqºb« CÝ'¨ÀT‡*˜Ü’U¤VGjõ¡íSå·¨�l+ÎÔ� ¢n¨‰º®ÖÒm¢z´N´~€ª¢Õ�`Ûx�@Ũ’¢Š‰®Îê_ºLT“*’ºzÔ:m¯*WÔúƒ�° <� BÔô\WbÕr€+±Õ¦0JP'*W´ÝúV îU�MEà� Jˆ®¾j¬î²P ¥u¦í—V�€&#ð�€ ÓÕVº WZëƒ[£)|«•Cjõ¡Ð•²�Ð�°!ª,«ÒLŹž¸C šHa‡Z/)üP«?üáî��ꇳ5�X3]9UEB õŸGý¨¨õ4•Z}¨Õ™¶s…²´ú��Ô�¬‘U ÔožÊC}©E·¤Å¶È·ú`@e�@]x�À¨E€* êO÷•úÓxºú l•c¾ušÊ3X�T�¬Zq¨b¬ñ¸…ish²>±­T®)ìPW…Úhõ�¨"�XÝòQ-:t%”Ê@³hÒR Õ� Ú<� d 7t⯠€B4Ö-!0¡V£H!¯&µ€b�l�”H'ù¾‰7ƒ’6·¤fSë'µúÐ~¢š¯üê}Ü�pœ±@ t‚ﻯp‚ÞlZ×»�À|×mõá[ÊQ¦�®ŠÀ�®A'ôº‚©“rØ£ùtÕY1�ËSP¨²R­>ÔúcÑ8 FôZM Kh1�¸ �¸" :tòÎÉøöÐUjîÐ\‚ í?¾Õ‡ÊÑ¢òS¯ñ‡&µª¢œ�\�\’šWëä['ë‹®R¢yt•š;Q�×§ÖR³Z}¨|M>ô��à2<�`Iºº¨ÁHÕªƒ+üÛKÝYº€òøV*[tüõ_ÿõTØá'#��,‹À�– +‘:×ÕHnµ¸ÝTé¢i=°j=õ?þÿãTБž=��Ë"ð�€9n芾®:^õÖŠh?"€ÕðûØ¢‰ne�€epÖ�tßš§¹¢QWîЬN~°Òy¡�`�ÈQ¥V-:T±Õ�¥€§;JМX¢ÁJçMŒ§�˜‡À�5¥Ö«ƒ+‡(¢«Ïš�”OÝ‹Bü¤0Z“ÂG…��ÌBà�!4+èÐ 4ÝW0‹*YŒå¬†ÂDícº–Õ‚CƒE�®‚ÀÀVÓ‰ôo¼M4Æ"jnÏv�Ø^Ïm4øõ:û¶Ólä6¶‹Á‘ííܰƒàÛð¯"ák†ŸÙq·m­Ý® ^¸Ç¾¯ 65ŸË.x�¶’Zq¨5‡ZuÐ$ËRsz��ªé©íÝI°Ö¡õÏçTÅÏûÖiMº‹íveóŒkûÏ¿nà‘þ~å,½üáqæ`ëh|¯ƒfÒX–°U ��ªËWÄU)žWÿÁ†½[qÅyQ0’÷b`ÝÝ|…[ß{Ïzƒ ÷÷’üg%*\þ˜…ÀÀÖP…UýÃé–€«Ð6£í�€JK·Ø;²ÁEA˜qqbݽV®uÅ’Š*Üão-8xͺ«Gàq)�OÝW4øêú—AIqÚv4˜"��•¦Àc÷ϬûöÍðÜçeëô¿sOxÏí,¸m»oÛ;?ß-!ðˆ?¯µ³Gà±—Bà ÑtG µèЕyº¯à:4æ‹B��*- <ºvòuÏöÕ‚c¿gÃt#¨u‡Zc|ùᆃ®íº–!ñx/Âz3n²³kíàiüþL…Û‡ñûâéM ΞÚàÁ‡ÖÙ»1y_ä܆ެÝѲ½·ÞŠÿïñhê}ãÑÀô:¶§Ï>±@vê{ZÖ;}fÇÖm߈Û»kýÑóè}2Ø=ÿz}_çcèùä{ö­{2´“£¶û ûvØ?KºGí(úl½÷C;î¾gFáŒÌgD]÷ûâÏëÜ;±Qô“Gw»íéÉ“åpøÈ½FÒËHSøG'Ïx\ €FR¸¡1:4V‡Æì�®K¡]¡��•çÁ‹ï¬ßy9¬0§[yŒí¼h»Ý §©Öãa’L0_ßšxø‡–ø3‚’°"Ú;°VTœOþÖë¢y(z_z V… /Æ6> ì@À+¯Yç=…c»8½…­N?üäpÎõšýC †úKYÄ#;T7žý_Û¿ùÿ=á´ç^3>µÞ~ø|2¦‰–ß+¶×=±¸ÝÊ3tß¶`ôÌߧçoNB—ñÈ).Ðç'éj¤ $8 ?×¥âב_Þ7ÃeùL?Âú‡ lR­g<.…À@ãè*¼‚u? û Ê¢mŠVB�€ÊK°¾ìŒVp„ÏE•úW\åz:ðˆÞ¾>}Ç–8̸LàË¿/)Z¶ß;MZP$Ÿ•š‡©ï‹‚7oZ Ö‘‚yÏÌWjPÖ©é–õ†.´HÏó… º{ácî{¢ÏSÈÒ³¾ MÒ¦~_´¬s¿/ÛD-Dô?,±|}àá^ŸüMàqU�CWßÕ}å7Þˆ(ʤ“$��*/xd+Üÿ%®<']\ÖxøÖÙ×$Ÿ57ðÈ‘EGü¼oí1­h~òßãZlD!ɾuz¿‹»Ã8Ký¾äq÷ºe–odlÃÏ,ˆºòèû <®Š³7�µ§V_AWà?ýôS÷(P…i Ò��¨¼tࡊ³»Mmë­wì¤u‡4?ð˜}ËÝe9·aÿþdŒßÕ$TüûòÁÅ‹Óxœ’½Žõ‚Ïìëþ;ÙeKàq)�jM‡‚×A÷¬ŠÆá–´�r·úLº\–¯èD«Ü@…À²2GÈM¡í*3€é:ß5#ÛåÃw¹)?ð˜tiiµìQÒ%Eƒ¬Ù½eº´d¨ÅE`â~w~>§ºEü|,Û¥ÅußI5SË–ÀãR<�Ô’º¬¨ª., $‰UÓ¸0Ü¡åOpU1H¦ÜI¹;‘NžOW+w7ƒVÛºÁÀÎN»§ÊA~™ä'½þø“L3õ˜*7©;?(|è68ûÊ>¾÷û¤¢2å:GÔõ`Ï‚omœ TèûñËr-:2-|Øp#޾ܣӃt†ÎûÖÑþ´wdƒ‹¹ýÀUÔýkRáI\)W˜ñ•= Þ±£Á÷Ó‡Û?’;“í<þìx>^#~ Ôþ0oÞÝ|%›úÏwS¼æ •ü÷<µàðãI@ä÷福LA€“üžIX”º› |š„"IW›üçø–)·-8 Ë¥‹¡=êjàÓ]k÷~kGÝÏì¼`ùc6�µ¢VŒT­:¨€b]Ô‚ˆ»ý`óRw4ˆ*#ÓgºÉɵ»“A³ùÛa¦n#™TÒWm}Å&{õY·º ¢×ª”»¥\qr«ÈI°’¾2[¦¸ÂHÀëp•eW±Ït¯Pe½ýž+7|7 ÿºxŠ·íç6êßuãFÄ÷§'á¶…ƒŸÙpø7ÅÁêÅëEÁHøžÞïm˜û|¿ßdoîwí]Š÷­?ü~j¾vßîÚÛ™°7Ü¿èçà7-ÜÏ…› „Ÿç @ªÛÒ~ïZrø×j9}ž[v*/¾¶Ý÷ìøØßfVóù0,[Ãe4ã÷éÎ,ƒ{~Üpr!¬Ê‘xŸ¼g§}ßSŸsbÏÜÝfüüžô?ˆC’övòï~»…Áöõx�¨/¿ü2jÑ¡–Ü-ëÄ-iQEW5ÓtåowÆsM3³Y·|3nÌ; ’ªÜù+ª3›µÇWÎo®$ððóXÔ”�pU�*Oá†ï¾¢ÐX7]EaŒTƒoÕkš‰›Fïμ+AÃøÀ# *&ÆC×¥%2/ðÉâfæ>ð(XÆãÓù]Z®Ì·B!ð�€2x�¨4u[ÑI¨º±PáÄ&(pS* 2fõߎZ¼Vêã;ÄžÛhðq<Ð^ÔŠ¡mG'£I×ÑÀD·=<°^ÿ~üº½»Öטjšø¦Üšö­sïdªivÜ”;ÝDÞ5£¿Z?j ¾gïŸØ‘oV®&Þ†QöëIÝ22Õl|Ú¢À#õ{¢æá“»ZÄM؃‚1>ŠhYÿÎzj®ï[h>ø0\®ûÖ=ÚÉQAšÂqFܼÎY�€Å<�T’ºøî+ Øm‹Úê(l/¬k0¼\§>õOì"Ó7??µl¯û¹ªõHÔbâ?ÇaB*üˆ+ë“q-üà{“1-üà{ <¾v­$âÏoµïÙ©ÆHúùOníx-É|¹ßQ¦,<&¡ƒoa.«“RAƒï»?'iHQà‘ÂiïÐÝ)¢°[RQ7èÌY�€ù<�TŠZqh€H]Q×-gMÓvøþû€j˜¾ý¡*ǯ¥îj Ý$\e{ò>?Èav°ÌøóÓwIEwQXá^ë*ø“À÷”ð%Î,ÔÏ{i]oÔ²"ÈÜI"Ü/i•q•À#–Ø4œr-d¦L+RôÝEáÆôcK­�À\�*CKª\Ò}UÁ-iQMþö‰®¥DÔÍ%_ öCúqp$#ûûÀ#]ùžøÇ] ±0ð˜ñ93•ü]&4eCˆÙ²Ýw&¡ÎâÀ#Û¥Å=˜’¹³DÁ˜!‰Ò%×�`.�§.o¼ñF4q' Tº³0X.ªg2ÎD«óȞάT·¢Ômj£.á{Üí'­+æùJuîñMáçÝ™õ›Ó]Ff…ž DÝzNìBáÃÑQÁnüë²]‰2J<¬�À\�6F­84©ZupU¥±dG•äÇ‚ˆBY•pÛñ¶ý|ï×-#?EQàá»S¤[IH®ÅÈ®W¡páFQk ×úe©À#5®Iæ¶´¯Í¼ Nk-Ç’ë��0€xüøqth¼Ý¨*U&jò·¨Ue==�æÄø,°ƒÅÝ4bÅGøFëª Ç k=Ž)=²Cµ‰ZA„üÝböŽlpñÂ.†3ãhìv¿°§Qe¿e{ Y.N-P×è=Óó{)>\ØëX¯ï*=·á£#k·ü@­2c,‘ôø­ëú¶">|Ø·N¯ï¡qòû’X‹LÝAÇw:$ñݑҡEÁcˬ�–7ýûQ¹~Q-œÅX+…ê" «æt@Õ©e‡¶U ²\»x�Pߺ  2“ß|Ø; ’Çs- tKÔ{ºeíä=Ù[¿¦ZG¸JùÓ“®íêuÇŸÙð"|>úþð¹Îm÷:…/y›×\—–g‹&wjI#1), 4¯é�ã"îÒòì,wKØðwÌ»SKþ»v;Ö}[Á‰L-_>ÏuÙ —yЛžG?–ÈÂu�4™0³ÛÿÙi`÷¢²ª¨ \zÒ>û[{0(høbhRåF«Ýµ`ðwvúñý9qšoñ¿ŸÀ£º<�¬…º¯¨ÛŠ ú—AIQÜ’u·ðÝ^rÓŒ:Ë3¯+ �Ìã[°íÛaÿ,,’"×ZËuÿÊ„ “À2w+g·#ËçT ®Ë–‹~Àãå¿tÏz”‰kCà`åTiÔUrU u¢pNãÌ�õ¤]ë$];R4°çÁ=×íbU<�\ÑÔx8ž~3[¦Œ'äMBßɸ<Ù±†RT.Þ<Zmà…-¯Q&®€•Q÷Ñ¡±:4fP7ºE²n— ÔQ|Õ³ FÔMâ=ëév¶+U4~�,Á·}—gNà¾:¹£•ëȇÙ%,³–îÒ»\àá[­¯€•Еqº:N÷Ô•Z%q«dÔ×d@½IW A9chÌ•ï[ÏmTõHuÏpû_«ýDûüs ~g= ÜþÐúÁ¡í©»Ç/ÿ*<oûÐ:{aùÐû$XØw%Éuÿs2²ñÔ˜5®+ˆ*¢Çsƒ!_Š¿ tø9‹Æ®™x„’yrAƒ¿uuøžx쎂1>fÉ,}{«óóèÿ“ïÎ;¢27t85Èt2¹å3kGŸ‡ë"ð�P*Ußxãh¢¢ˆºShÇ]„��µ dÜrwò™ ,¬ ùs7ÖE\Ù¾iÝ“ß[pàÿvÓÞ‘œÛAK]@þÖéîAî®JI÷n\<±ž‚•Ì]¢\‹Šd|Œkìä($§- <’�v¼ŽGí( Ù£áôÐÏî÷&wjò¿?ùn?i¸lÕ‚.¹ÓÒ¤EGÜ"$ÝÂÃÝ¡iÖ2Ƶx�(…Zq¨ù¿*ˆt@h›ÖI ��µáýÞiÜBÀÝÉ) |ËŒäÖÉâÇÛI½/â*ãÉkÝß©ÊxÜu.ý>½æ•Üç\‡Z¥3Z¬8W<"™M5ùÖîù ßB#};é|—xø×ø¿—<æ,c\gr�®Mãs(èÐx\ GSøÖJ��ÔÎÅÐúQ7•¸ëÆTà‘ Ô³ºž©{\w…Ñ{Ó•qÇßÊ# X²¡ÀDÑ­²—íî¦àããä÷dÆß¸l—–¼ÌíŸ'ƒ›f¹Ð$Dá¡nEŸYÐóŸ9/ððæ,c\ €+ÓW4ÆîÀB÷4‚<…x��ÔGXqŽÆæØ·N/°þ×¢ÊþÕUÜëìíÚ^çC úëw÷r•q?(¨ZyüÞN{·¬Õé‡sQäÇ‹Ý)ø?þFºÍÜÀÃÏ_ø]®ÛÈ‹Á¯íÎÔ@Ê“×Ïÿ’ÇÅi<Ê^ÇzÁgöuÿLÀ1x,³Œq�.MMý5(©Tú—AIÑDÚ¶5�P¾ EêÎH®uÕ×f�\Ø ¨2ž´òxÅö^y¥œ»2i¾oLß¡%éò±dà1ë¶´7¦îКú½iî{3]Zü¨üwOÏ[>à˜ <–]Ƹ2�—òå—_F-:Ô²ƒî+h2µîàvÊ�€úðÁ…¯Ü§îÒþµGXÿôo–<\wQK÷—ëX7 6¦[Q\›ï†¢–}?P©ÿ=º›Ì“dðÒx‘\à‘Ÿ#ûú8thÙ^§g}?P©¿SJ+üm§ÓqGö7Z¾o¦è;ZüÚþJ­@ü­t“»¯„˵÷[;ê~fß»ïÞï}eOƒwì(øõ’ËWEà`) 7rh¬…@Óq§!�@í¤î¢°àÞÉ#ûp_]@Úöçï´í\å<š¢V®EAêñIppn§½ƒ°Â®Ç÷­sï3ë¨ ƒ{ŽO­·¿[Þ`¥®K˳ÑÀ‚Ü-['wjÉßþ:?¹n=¹»¯Ä]ZÎ C]t§–ì8";{wíap×v5OÇŸÙðâ…]œÞs!‹•í¤ÿAÆ$­&ëLJ0—XƸ� ©Y¿‚Žßüæ7t_ÁÖÐÉ Û;��K˜;X)°9�fÒÕmu_Ñ•n P l µhRÈ��yfƒîÍc_�›Eà`Š®j¿ÿþûQ…ïÓO?uÛCaŸºpØ<îÚ'Ó“Æ×ñ ûI­µß.3)Ì×1®è¹¢IŸÿ>ÍC~¾Û Ûã¹·']MvnZwðÌ=T€ : TàAs~l+íÚ�”K€‚•4H°ÔªÐ÷©×äÊNOz}úý~ʳ&…(~^–™Š¾+=Ï~Òñ3=ïú-þ9•)é÷ûÏæX‹zJâÙ±{ƒQ9cw�%#ð�ÑÉŸNÌtb©0`›ù«¹�.LJ¾†*ùªìëØ¢� ݪ"Ýj"ßZ¢)Ò¿IAªÿ½éÖ(>ñÁŽFü2¡Õ�\°åteI'^: Õ �‹*uºQºR¥ÉWª®;iä?;=1¶ÏöÒú÷¡†Z:øV>Ðð-0TÉg[YŽß¯üþç[øV#ZÆ~¹ú0�0°ÅT™ñ'§\A&t¥uÝ4…¾Â“oî¯}4=ù+Â~J7›×T4ÞÀU¦ôgMþª}zJ_Á÷“>ËW|)kêEëLëηHðëœÊ÷úiûIë‡L¾eˆÖ‘ßÏ��1` ©ÂáO\ëtXU"®+`øJŠ&Õ6]yô“\S:´È·´¨rŸߥÁO>¼ñ]üÕêt%MÏWýw5ß^ý6ê+Óú×w±Ðó´Ô¨­“ô~–^w>”bÿj¬`bš7!‹%lø¨0T%ƒ“`š*ªŒÏâ+†³BŒôI‡ÌW:4ù«áÛ^yôË@ËÄ·Ð2ó-Dü²¢‚½~ÙkYûJÿ§•@sh¦[çä÷/ÖqýhŽF#&¦™“¶d±D€-¡E• 0›®”þâ¿H* ¾R诚úŠá¬ƒ ñzÔBÄ_­Ö2ö­`´üUqÓ²¦[Ìå©Ü×ö¬eªJ¯–«ZhYsLØZ×ZçÚ—|™F�RZ_E•\&&?iAKh8U ü ®* �b:ñŸjü÷ÿýý¿[aÆæhùûõä+ì*Û´þ¨°OSÙ¯íVÛ°–—&ýŸÀi*Ó@êƒÀƒiÑDà1%4˜*þ$—жïzâ[ h?Љ¼o1 }#jèuz½þÖ¾ƒjó-´¾´N}Y§õ¸­´L´-ûŠ+.+€°_UÓ¢‰ÀcKh UÚt«‰+4h2ßJC•<M 0|eO“þöW+UñÓkUþôzö›úQ«­c­ÿmª¤Q9Å*ù`1¢©•Q6ƒÀƒiÑDà1%4ˆN@tâ«“^Uð€¦ÐI·*qÚ®uÂíO¾UÉS@¡í^Ïé5× +´ÿÐä¿ÞŠÂ&­SU8}WEýFmÿ´âÀªùýJÛž”õ7ååúx0-š<¦±D€†Ð °N~u"ÂÉêJÛ®o±¡Jj>ØÐãÚÖWÕC¡!' Í¢mÊÁun½£0Oû„9¨hb“TVúàMe&Ûäzx0-š8‡™ÆjN':‰W…f̨ ,«â©dUâ´ ë í+¥ª ê9½fM§õ}ú~4¶#f*+U9Se­ê9P„ëCàÁ´h"ð˜ÆjÊŸ¼«`ӿ묗¡mSA‚¶S«Â©íVÁ‚*sz|ÝÁÆ,þ¤ͦõ¬í°ªAqzþ讂:ɇ*ã >ÊCàÁ´h"ð˜ÆjH'è:V…‘ TɬpCWütâ««~U®¼i¾5a;¨b¦Ö ª¸ù²]ûPgÚ§Tî|”‡ÀƒiÑDà1%ÔˆNT‰Ô ºNŒMS¥ÌwK) 7êViÓþžµ]T)SÀ íwSÛ+AšLç.é࣠áb]x0-š<¦±D€šÐUç*]‰ÄvÑ6—7jÔ=Ü(¢ßC…s;iV»Î>Ø&>øðûç2—GàÁ´h"ð˜Æ*N'Áª„QúøpC'¤³º¥4u[äDa»©BæËÛUVÆ:°Í>®ŽÀƒiÑÄyÌ4–PQ:ð'ª`«0+ÜPE¬éáFžNµ¿¾ì-{¼‚`‚àãò<˜MÓX"@ù¦Õª€r€²Ì 7ÔUJ•±m¾„–– Ú´èßë"è�f#øXÓ¢‰ÀcK¨U6uB¬cNŠq„—§e¥“nÀÓ>¤J˜ö™«PENû]Å´¿øãûK1¦EÇ4–Pªœê„Z…”*]Àen\Ÿ–ûòT óã×\†nîîXËcß™ÀƒiÑDà1%l˜쾩³N¬En¨Û“*`ªˆéàæ+dÛ4æFÙ´²ìPD•.•Óª€-¢×*xT…í ¸¿ÑÚ#‹ÀƒiÑDà1%lˆoꬓb…@µÌP ÂÕÓ‰5-a0‹¶ •×óÆôÐþ¨íH5®LcblÃÀ:{­¨ ßiµíèd>ŠEh푵ÖÀã›OìÎO^²—~ö‘ýþ¬àùÒ¦3ûæá]ûÉÎígý­ežÚã~>î7áôÒëÿ³ý¯¯¿l;/ýcûè÷ߦ^w)üþÇ}xçu{éGwìáÓ¢×Ôg"ð˜Æ6@Íæ9€#OÛ‚Nî´}( ÓAËWžô˜*Sl/«ÃIB–¶7M Ö´ý-3ù÷hjbx4/ôðƒMÏ D°ÆgìÞ¶àì¹GìPÁÇ~φ™ÄC¡ÈCë¶oDeÑÎÎ kwœ}eßû½½°§´wÝsE“^ÿ[{0(R.†ö¨Û¶–{m«Ýµ`ðwvúñ}¼p¯©0÷tLTØ¿í¡´Ö_Q%wzÚãûwíõ—ÜöñÒëv磇öûÏ?²¿|øMÁë ¦ßÚï?úÇö£èû¿µ¯Žÿi|”x í¶_NÄÖH•�U`uàæJ2´ ø®)Ú.tÒ¶¡ LÁ]œÖÇï›ÛHÛa:hóÛ¢*ú[Ûg>Ø(š´Ýêõ~òŸ£@ëyß*©ÎÁ=ô;D¿Å7½§\Ç´ t÷ ެ(iµlïð‘¢×ÛðÑ‘µ[;¶Û˜Ï%ÆÃží‡ûUú1lt£×îì¤?CÏ}kÁÁ ÛÙ»kýÑs=0 Vv»µ<<•!Ú÷¶¹U¬ÊÔ¢JnvŠƒ‚—v~j¿8þ} |óØî«ÃÎOìβÇʦÿ`ÿÙ¿X,<}hw~ô’ýôÝÏs­>V0EßuÉÀã›O쟽ûÈž=·Á‰ÀcKXB¬µNø±}´ ¨‚¤Š¡*: ©‚¤íÂW±9:ÖzÙ>hÓ¶ç·Cývm›«à6¨è;}×,„h^êhžµÜ¾ùæ›d?®sˆƒUr-3ÚÜ#Ó\(²ó¦£t1¶‹Á‘ÝL‡£ÀÚáþ“ <œ¤õÈÎ ;¾Zz¼tmwg×ÚÁÓøEÞʼnuoÕ*ð•%*;~l£¥_yý#û*óܰ‡wþtãÇÙï?²Ÿýx‰`á«ìõÙë ŠŸ/sºtà‡J?¾óÀ£X"ÀŠéÄXg]%å„x{¨—{Ã_åÖ ­7ªÅ·Rh"•;Úæ|K"_iûÜäv˜ÞGü|ù�°H§Ó±ÿö¿ýo£ùfŸZo¿µdà1 *áûã.-ΜÀÃ${áó;­CëŸ]à±c­ƒÀÎ2üƒ kÒ¥%Oå–ËjÛ\*ð(èöqöø]ZV1ý­}ô³/,œ=~×~ZÑÀ# m^Ú±xÔKX°ë€¬y®Þ7_ºõ†*nþª¯*C¬ÿêÓ‰sÓ*® ´=ú°MÛg•ƒUb|�¢}È3 kªFËñå—_¶ÿáø*8Ïm4øõ:ûa¥ø±==ù ¸«CªË„¶‘h ˆ£ÇîùÉgì´Ã2l2àf«}ÏN/ž¥Þ›ïB1²Á½N\éÖ´×±{~\ ß½¢gQd<؃^øþÝ®<}lG~L‹¤K†¬hÞ£÷~œ¼~ggß:÷NRÏçéõAjÜðó:Û šÏ6 Þt§¦Ân$© "‹#pŸQ`nàz1°î®>gϺƒ‹¸%Gòû5vG3KU«2bÛG­Ç¢JnvRKŽoon쎯fŒÁqöÕ'ö—·¿vç%ûÉíìñ7gásßÚW?¶wõ\¦¥ˆÿvû'/¹÷üÔnÿå'ÑçŸ}õÐþúÝÛö“ݱOÿÚî¾þãø5?ù§vüÕ·“°#zŸ›ôÙg_Ùÿùcn ì£×”}]8)\øÖÇΟÚG_=uó4ïwL~kvJq¾þÍ7ãÿ'‡2ý—vÇÿ†pzéõnŸ„¿Ã‡þñ$”É›²þž»ÿzæ²_Õ¤ïFK(™¾ŸiS¯o;ÅÜ:¸(ÜÒzßôUs\Öc‚)UÄ}` mRÛc][–é·hSx¨Iÿ¯Â¾å+Z¾µ–þ_)®BŸp‡öàÔ.t5¿w+üûeëô¿ _4¶óþ¡µvn†•âgáŸgÖ?ÜŸw•äÂÏxngÁíð=-{eÿ-{/ºËȹöÂÇÜçFÆ-÷z}ÿÜ[ÖþàžŸx¤æTxØðbœŒ[ÑêôÃo\ѼG¯ù3Ûwß…ý»¶¾g¿wZøbßûgá_áë}¸”g|�1·…‡¤ÞÍ»‚‡n^RÉ2œtcRÁQ8µÚGöhx=Wg*#´ÿ©œÛZE•Ü©éì+û䮯ìpÛ“‚ûí›ÔkâŠ{X)÷߆ûCÊýícFÝIÜ{“ÀCÝ8Þ°Ÿ¦C‘h Q³ñÿ²¿JBŠIà·ÒpŸ}Æ7öðÎORÁÂSûê£?uï˶æxúðŽý(óX:™s‡û¬ì4´Ïßý™½ôÒÏìÝχ“¿õ¹~¾¢LÃßqç“ð3'¦&-:\‹I 3ÿ"üŒ`wþ‡pùÿÞŽ¡�fýc¦hù ‹%”ÈŸüªòD¥·9´.µnUÁñÝS|À¡ÇëZ¡Ä„Öi]÷YÍ·®rún!Ú.›Vþ(ŒR£õ¤–S›ªàh_×¾¯yñ*Ùj¦ RœËÁ‡.ˆHþv¡œ÷­£Êwº¢¾às}0WHÒӬРˆ«°§[BdBƒÕÌ{ÒõdjÞéhÀQÿúÌs“`%ù½K1µp RwT™º…íHf`SMéV1õ¥²Aå^%÷Ãк+ªäOjñQa+…Ñè?Úãwÿ¡íüô]{ì[ |ó¹}tû§“»²äÇ9ûÜÞý©oÙ‘›¢ÏqDº[Hþ3¦xš7ŠKÞŸKüŽä½ñ$¹ÁPó]Z\à‘¼ÆÝÉeqàñíÝÇÿ1õ7G°D€¨r¡CU€QoZŸ¾i½Ö©¾K�ÝSšG•Ø:ž h;M‡�ÛPöh])ÜQè°‰pGËYSå- <<ݱã3 Ô…$|}ÒJBŠ*ês?÷ï§ßLÆŽ¸ºE‡W漇Ë$zÞ·öX¬àÁ=ž|÷%o<:±{ê–£ÏJ·ˆ™õ½žÿ¾ôòHËt9*3¤†t¼Ö±z.>h{(ªäΟ²ÝPâ À…™î*¹)VD­>þØnÿûâ×ûk <–ø™É·(ÉùÀÃ?þÍc;þHÝmâe7;ðð“ºÂöQÔíFûG°D€kÐÁU•`.úw¶M¤+CªD©"㯒ëÿzŒ€£ù´ŽhÕE:èпë¬ðW‰öÛu.ß‚¯åü¢Ê½\œZ  õ^ÇzÁgöuÿðùË„…–<JŸwxøn3Kp¯Ÿ 2ò/x\Øàè¨ (zfƒîÍì2-ø©±@öŽlp¡AKmw¦ÖÇäuKÿÞŠ«MyM*ïŠ*¹™)¬Œßý'Ý9¾ùÄî¨âþÒ/ìxø·qPP0°i2óºŠl0ð˜÷;2Ó²ÇÐô û‰Æ(y÷#;þßïgŽ¢Àõ,ÙùÉm{÷£Àþ÷ãÿ5œ*`‰�W¤J’*Ǫ(mKSʦкó‡*0Zª0é1ÖåöÑÕÁ:œ(t[ÇrQÈ¡r¢6­hUîí;ëw^δƈŸ¿^htiiµ­ûhãŸ=°;÷ÊêÒ²šyŸtiÉ¡qGîüvv—–Üx$ñ2¸l—ݥ嵂Ö¾»ÎrǬÛÒÞ˜ºCKÈuûiJàá÷Ѧç±làqçÇEÀ¿·ãÛìÿOüÿðó&Ý\ôÓѵ¿V˜+’.-?¶×ïüËÉ  ŒôŸüoêÒâ~Ӽߑ¼W“ïj’íÒâljçË¿&Õš%pLée/—xþ <ª€%\’N¦}E¹éÖ¦PÀ¡8 §t ð‡Ö•FhÛÐTU:‘'èXLËE]\T6k9•^êsëÔ (;Ègôˆ«8ûЏ |eýbh¢q#ÂÊï·vÔýÌÎý8©1*~®”4|Mfòß³Ä]Z&ABªkLf^V4ïÉø©ùަYÝ>ü ¦ág¶?° RêPu­+"ó2Íß–vß:½¾ [Ôeçat˜øî2ñ›ýïÈ™ñ9n„ËáI6šހíYßTê—YëÀz§Mˆ;b:Ökÿor©m²¨’›™|È –Ç~ R?¸§ËÂoç“)ûÂ[1C!Â?¶d Ôdú±ý죿µ3ˆ¤*ýÓŸá‹hï~þ¹}ô‹?·‡ß<-!Šƒ‰IÀáÇÊXâw$ïu“oé¢Ö}nß$Œº÷¾ô¦½û? ÿï~Wúî+¯ÿ¹}t÷ŸÛñ×ágh‡¿ëóÁ_Û/î~`ï¦[š|óØîßÑ ±? —÷ÿfwï3ZÅ”?é7 ‹%\‚Z�ø“iº¯TW>àðŒp ˆ¶“ª†—é2‡mw9*›µÿk¹•ÑOŸW§JT\Áu'îšÚ÷ÃÊpöö¨»Ý{vzorkÖÎÇvÒÿ ÂÊûãànö3v»öÅ‹?7jÅî±ËÜ–Ö·†H>óM ÷£ Éc»ïXÿÉŠæÝò·»]æ¶´éÛØ¦o)[|[Ú¢–Qà¡.-ÏΦMZ›¸ '÷y“IaI0 5œ¸KKXùÌÜ>W˪wjÉÓ)•›u§ó–¢óL­»¢Jnfzwiù_=´¢J·ÛF¦îÔ’¿õªZn|dÕJ"}—Mé®™[¯ºÛÒ~ëB–ä=j=üuÁg„ßùù_Æïî’òuê.-ñô£;¿¶_+<H=wAùßã$™ÇÔzbÎïH/—Ô”½íOíÿòCû_¤÷ýÚŽmôÍ¿µw“ÛêÞ¶¿üä¾u£0çu»ûÉWQâïìòÒëiŸótò»¢»Ôü ûäøŸÇw¨É´<Yý¤yFKX‚*Ð:øhÒÿQ:!P3sV½8ô8Á©â~M™s}éàã:‘°:µî�¶™öW•›uçÏeòç0z¼¨’ËÄä'i,`ht¢¬æ&\1h‚tÀ¡“\W•N(sÊç—©ÖóU‚•/Um Kû»öõº·ˆÓoðç7éó=VTÉebò“¶d±D€t‚«J‡šGÒ”|st ÏºÚª+·\ùÆuißÖ~^¾û eÎjh™ú0IåGº1‹ºÃTeû�°œ&tkñ‡¦tè¡¿‹*¹LL~Ò6‚,–£\U¨5°%êõ#àÀ:i›Útwmó”9ë£àCË{™àCeѦ·�—£ýZçuæÃ?ùÐCÿ/ªä21ùIÛ²X"€£‰’*(–½ú‡r¨’§eîý«“*XµMŸkWÅ[-(sÖˇ]*of lªíC€úðûvé\(?ùs¤¢J.“Ÿ´ ‹%„tOWWu€¤)ùêù€CËÛÄUéd ¬›¶»MUhõ½ ;b³Ôô]åPÑv  бT€zQ€©}ºi“Žú·¨’ËÄä'm#Èb‰`«)ÜP_O*«¥“U´¬U+\RE‚€›¦ÐmÝ-‰´Í/jY€õÒzÐúȇޛØ>�\_Ý+}šÿô¤óTäUr™˜ü¤mY,l-uUWx©t—+phû€C¡-hP%Ú6×:¨ò¬}‚.,Õ£õ¡ãÖÂXQàAÔ‹Î3ê^éóA‡&vøÇ‹*¹LL~ªû¶¿ ,lU8TÉáêjytr¡J*qZ¶:8ûQÒ 8Peë<1  K=(ìð¡Ô¿úWÿjc]žVi<؃^ÇövÞ´`ôÂ= 4ƒÎóVÖYQØ!—<†öøþ]{ýgÙW…Ï_wØG?ûS»ûÉWvVø<Óº'i,l ]½Ó ¬ôɾ>U t5Ô¢åB$Ô…Nеý®šÊ턬õ¡u¦ ÓO~òûó?ÿs÷hS<µ ½ë*TU<ÆvÞ?´ÖÎ-ë ÿ‹] Žlo§eû½¿µ“îž›O?íZ;xêÞ'éߢiϺƒ ÷Ü\ íQ·΋>kß:Á©-þ´s>:²vKïiÙ^'°áÅØ=:ï[§¥ßsjã‹ëîµlg¿gÃÔKP.…Ê*sëLÛs>ì=^TÉ-ž†öù»?³½þÏ퓯¾ûæ±Ý¿óº½äö™—^¿c=üÛçÿâ×öðéSûê£?Ÿ5éõþõCûêÌÇ™}óø#»ý“?¶×ßý·öMæû™61i=!‹%‚­ Š¸:�ÒŒüjtÐÕ•NUT˜ªò¦Àƒþí¨+…v«¾ ¨òFûо‡²§~ÔÂãÖ­[î¯&¹°A&T!ðxa£àÍp^x\¸ÿïØnw>3¶‹Ó{.L¸iÝÁ3÷ž”ñ™õ÷mgïЂá¹{ð ÆßZppÃZí{vzñÂ}ï ;¾ çb–çvܶVëÀz§áw_<±^;üŒƒÀÎü›Fµ£�çÔÆÑÿÃß²Ûµ kVf“ƒQ—¥(ìíE•Üéé[ûýGÿØ^úÉ]{øÍYüØÙßÚG?û±íüäŸÚq€(¬ø—vçõð±ݱ‡OÝ{Ï>·wúRö±ðó¾zøQüZmÃÉgÄÏŸ}uß~ñ“`¿8þ=-=6<xLc‰ Ñt°PECÝ,¨˜_Žï¦¢H^?¢)tB¼Ê“b•?Úw´ß ¾fU<ê­J‡káÑ:´þùØÆÃžígZrü`ÃÞ­p^_¶Nÿ;÷XÚwÖïÜœñܲҭL~p¹ïuóU(ÝzÃ=Ïj^£×¸¿Ç§ÖÛoÙN;°Qü,V@ç+~žºšÕxéÀcxl·_úc»}üï“Çž>¼c?Úù‘½þÑ ûÚo>±;ÿàn*ÜØG¯ÿ(x¸éì÷vü‹ŸFóñÒÏ>²ß§Zz a/½ô ;º€…i#Ç4–Ir%üÚ雨ÿz´Ìt‚À8Ø~û^íKÚ‡è>W:–4/´ªRàáBßê! ²]SÆg´v²-'<½~wN(±…&/Oµ¼˜ /2|H’ëFãBV§oQ{“èï}÷šø{âÖ+X47ÕrÇ´ÇïþéÀ"<òA…{}Ô¥Åÿ='ðФ€ä'/…ó’ Tâå%û黟ÓÊcƒÇ4–G UØÕ²ƒŠú|jõ¢@Èáe¦¿i ƒm í}ÛºZFé„›ÁI›AǭϺµlNì^g?*Û§Ç–(<2ãW„S«mG'£IË…Ñc;jßpŸõ¡wß³Ñ{ŸÛèä×ídß:½­Ûýĵ`p]>vt QWßêAÁÍ;¹�Ù¢V?·½îIj¬ô˜šnXûè±¢ çuð;ëi¹´?´~p²÷Ö[Öþ£ðµù–® Jq@1+4rãŠ$á‰þþ3÷Íï›×l‚yšPNh›.ªäf&×%å¥ÛÇ6L?ž~ìŽY.<FߨÃ;?‰>çGwÚÓäñoÇ·ÿØv~ú®=Î*L뜴^ÅAcè¤Ôw_©{SÆUÑ•]qÖ•mˆZV:9Ðò¢› ¶ö²·{h«rܼ.ÛMÇ–:µÖ‰[D„ýÞ“°Z>vîLZLUÖ] °wdƒ‹±GìPƒk&•v=ÿJ*Xx¾ÿíø½Q‹ŒÔø˜³óàrÇâÖéߊZOü<‚øVn~üø®†ÿ íûј '¿ÇíPØ‘ÿlqÇÔãlLuy™õ8VMåyÓϵUr3ÓWÙë;Å--ξú×v×ÃN/½~×î?f^³8ðH núzúî/.¡[ËF'­d±DÐj• \•w*îZºÊœî¦¢ÿë1Z¿`›iß(û¤@û–ZKQ5ZÕ§•‡{"}'‹S :û©.!3ä=îox¼XwW-;zÖÏ úbеݨeG?{w’²ùñ/Z·-8{®â 'sÇ“üXÝNüÀ¡é÷ÍjɱLà‘ëCà±9:T8Ùd:nUrÓÓ̱:ütö•=ü莽þRzììüØ^¿û¯Sw^¹jàáÿ‡öîãÿ˜z=Ó:§²Ïmš€%‚ZÓI¨ï¾ÂÕØ¬n*,`BûI™'Æ„ͧu¬©ú\…{îÀ˜³ºcœÛ°Ä]>T™I*ójÑq3~, 7~gƒ‘B‡¿ÕªžÛëXïAXÉZI=߇-×Ò$nu’0tblÃÏ,èu¢–-™ÛÕúÀ#½|¢@'÷˜Ì B"ËviÁ:øP²és´ŸUrÓÓÂÀÃO >þò¶ý$ÚG~l?ûèo]‹«viñÇOìÎÃoR¯gZç¤õ‚,–jI• ÷mPwßME˃n*Àb~Ÿ)aÇvÐúU«ŠUµù¾%D‘|e]A`½Ýh|Ž ?°¾žÏTچܷn4އ*Hén,Cëw'ãf¸®1¥óáŠZO<}T<X©kÍ…/ÁgöuÿÛ]xLµp‰Å­W ZšWÄ…'Å­B° Ú7uî³ çƒ× <ž>üsû'éAF£é̾yx7 =&c~,;hé?°;ÿCê9ZxTa"ð˜ÆAí耦“NU2¶±‚¡ß¬0C¿ßwSQÅn*ÀòÔêIÓuvlª¿¾]å=<émµ?°ß#OãC7Ðh.ðˆÆáHWÒÝó…­|8Rt{ÕsF¦o+[&‹Ú8X™ÜoOu'‰C‹EGQxQÒmi±r*‡›Þ•Å[&ð˜5†‡‚OÝ¡%œ¢»«,x̼-­&wwÆðØè¤uƒ,–jCWÕt¢©©úWØÊ¥î(ªœé€®‚LË@oÛr�Ê¢}é2Ûi_ËOwîܱ[·nÙÿùþŸSÏ€4WB.W/ÒÓd Џ ¾«"z^ÆC×’ãÀzÁÖí,8ü85&HÜÒ" Fì0©ð»q5’ yƒ–z“ßV*äZ·$wžÙµvï·vÔý,œß¢À#4þ6À´}ÏN/^ØÅé=k·Òóí[ú1÷ûZár:=¿ï‰õÂåVxû\¬Ä¶…ÎÚ‹*¹™iÆ]Zâ–/ÙOn¿kÇ~ ÒoÛý;¯ÛK/ýÌÞýÜ=æÞŸ <¾µ¯~dwÜ€§/½þ—öù7ùPƒ»´TaÒúAK•§ƒ˜ºh¨%CWdë@-5Ôb#ÝMEuº©�—§ý(n\68õaã2“öYöÓf«~%+Zh»¼aínàÆÝp¡@²ÍªõÙö,¾%í¾uî}fýÕ’ÂßÒõ©=è¾gÇI·}ÞÃxÒÑ'ÖíþÖŽý-m[më>ZÜž¢üÀ£¨ÇDø»£ Bó¨AV?¶“þñÝ]ÚØãà®í&¿;œò-X|w˜©ß!E‡øV-úÌÔrÁÊm[Ø!Ú6‹*¹Ù©¸¥EÜ¥å÷™àBÓäN-©ÁH '…%]ûèø±}“ù>7E-EŠïô¾Ië Y,Tš*ý¾ËFÓ»k¨B¦`'ÝMEͧé¦\?YÓ~¥}L-¦.{B pÄ΢i[‚Ùmç+[”ÑÀúùîÍÛ¶ÿéSTÉš¢ðáíöÔ˜«šÎlxü {‰î,Ÿ´ ‹%‚JÒLWTUù¿L³óUXÕ•ýFߊC…“NœU»ÌUg�‹©ña„Ÿþ›ÿ濉N˜/³/ÓʃÖÛE¡‡Ö9wÁÖg›÷;gŠ*¹ÓÓ·öûþ±½ô“jÇ_}[ð|ÉS4é§îô´©IÛ²X"بüÁJ]ÕΪ7]qÐ÷+ˆ(+tQ˜¡PCŸ©ƒµÂVkQPQÔå¥È2­<hݱ}T†kÝë_�«ãÏÉ4mk°¬²¦¨’[< íów¶òÐãì«mw_ÿ‰½þî¿-îê´ÖIÛ²X"ØŸÐ{ªLèJ¬*'UHí5þʰBŠ«H·âÐoÕçÑŠX¯eÇßÐ>º(ø˜÷Yzÿ¶ž„o;/´þ¯z¬�0Ÿ?'Ó¹ã6—³:ÖUrgOßÚWŸüs{ýgÙW…Ï_wØG?ûS»sƸLkŸ´ ‹%‚µÓ*]ixòäITå ™?yõó¨« ËJ·âÐ{õÛ‹ØßjlÑ´Leu^+Zwl7•ñ*÷u|£¼Ê£sC“é\jÛéXSTÉebò“¶d±D°Vþ„0]IøûÿïGª$öþÀšžGM³N`õxQ+ŽM= ¶Làq™°µ¨•‡ö}Zw@Û€Ê*gÀõéâ“Ê[WÑ26¦ãMQ%—‰ÉOÚFÅÁÚä[MøéŸü“â^±yªôäçÏOé ­8€ú˜·_kºLØ!E­<hÝ4m#ª¤ÑÚ¸<‡>¨Ö¿„ÉZ&E•\&&?iAKk1¯Â¡¤ ]V¿QÚЊ¨YÝP´/_uN·òÐçpBŽ<Z{�—GX8ŸŽ9E•\&&?iAK+·Lsr ›¤0£h¾Ò“f8�õRxh¾N¹“þLZw`mgj ¨JÜe[ÛBeªB•Íì'³é˜STÉebò“¶d±D°2ººµL iSW¿4êŽR4OEÓ¦ƒ�—§ý<½_7ìðüÉ9­;° Uâü•kUî�Ä‘ü]ûè¾²˜ŽaE•\&&?iAK+¡V~pÒy“B‡M¸Ì<j¢Y2PO~Ö>_Vp©J+­;pYÚfT¹£É>¶™ÎÕåKåò¶ßjö2´¼Š*¹LL~Ò6‚,–VBW²t2ç+‹&üm‚N6Õ‡_' þjmÑüùI¯P?Ú·vpR*ÐvèƒUöhñm¡ó.?¶¶}B¿ËѹhQ%—‰ÉOÚFÅÁÊéDN-#ÔŠCÍyÓBzªJw‘E!€úÑþLتÑñFÛ¦Žšt¬d;Eé¼Êß¾_A]„¯Fç¡E•\&&?QW™ÆÁÚå$T¹»Hzž¹�(›¯êxH«4Â;Û蕇ÀƒiÑDà1%‚JPÒOÚ�Øv¾Õ‡ï†¥.¢TQ':ŸSh§mX¶æ¡L‹&i,��€ òãa1ÞªN¡œ¶W…tÚ^5NÛkù<˜MÓX"���¦Šcúй*–@ä[s°m®Ó¢‰ÀcK�� üUt?&‚*štÀº)äP·+Zs¬Ó¢‰ÀcK�� fTéTEÓW:5à©ÂÆûÀ*h]mo Ú´½¶mÓ¢‰ÀcK�� ÆtuÝßþ]'» Aô7ƒãªœ)ÐðÝUt(ð`›Ú,¦EÇ4–��@Cøn/¾¢ê[¨ ·ºÅ, 2üv£ÀL•&ÉApV-Z/LL‹&d±D���J­?|EVWéu2¬Š¬]Á§ ÌöÑ:Wø¥mÀßHÛ†‚1c�š„À��`Kø® ~ü úWWó›IëTë6ßzCÛ€¶ÐdÈyfƒîMÛiݶàì¹{¬Šê2ŸrnÃàÐö\3³Vû;U}ž�ÛBWôU!Öþt+*Äõ£uå-­C­Ë|ë ý­ç·�lƒæ/ÖÝÍ÷azÓ‚Ñ ÷‚Ð(°vúùÝ® RO7Ë‹ðç¾™ZÓS«ÝµãÝ["ùm&šö¬;¸p/Xä¹·m÷ °³ñsõïÚÞNËö{§–Yì��T„oâ»<èØ§nú¿Z øñ@B6GËÞwKÑ:Ѻñc¶èÿ‹º,éy­Wý �MÖ°çvÚ;°–*¥{G6¸˜®RŽGìpo×ö:áÁºàùÆŸZo¿• wŠ÷ °nûF\ß»k}ZÌ1¶óþa´]µ:ýp+»„(ˆ#à�.íâĺ{-kEa¡{¬Šê2ŸrqjAgß·7¬}ô8xÅ´Íø ¶Z øÖª\ë9u“ð£j¼Ârøe®eªe«e커ø`Cë·ܸì2W }ž&½�š¨y]Z|¿uhýó‚3¹ó¾uvg<×HO-hï·fŸYÿ0>ù­ÅÉú½tm7\N»Ý]ªQPÔBd×ÚÁS÷�šÎo+q¥ÒMíÀFîù¢ÖW—ޮꤰ•Tjjµ­{ü‰ ò¡+GÊŒ{—i¥8þÖ‚ƒ=;¾µqRöß²Þð÷`6moóä+åé0ÄwŸð-CD&8¤—o©á»ùP#&•M‰¾Ká ƒØhšŽáw!hí܈OìÜ£±øJýîe¯Ò×ÚœÀCÜÉúÎÎËÖéçDÞUñ°gûÛçâ‰õ¢T-ÛëžØt(ß½iß:ÁiÁóMóƒ {·Âå‘í6 ,è¶ãVyá²8ìŸÑj®ï¬ßyùJåu\†pàjóøJ½*ÕEˆŸô˜Ÿ|8¢É·^ÈOWUö¸Eóæç]“14ùÖ~òa4üoÝÄØ  4/š'Í�4EZq´ÂƒÉ~φé³ç¨õÇká ÷3÷@l<:±{3šùê„üA¯VL¬×¿o…¾ Èxdƒ km}WôÞ°òrï$zoú*o\IN_¡sà‹¡õõþ={'øÄŽ|]ñ|4,©´ ð¿eÐÝKæóyò{ýø'êþò;ëiù´Ãƒ`/ƒðõ­ö=;½xfÃGGn„•»ÃG©&ÒzïÇÉëÓË'Y®á|<}<ùí™î5áûO>pŸ¾·÷±u»ŸDWÊ'ë%;NK¶¥ÏëØ½Á(®Di}=ø0œŸ}ëž íähùŠV>ðX<ÿn¹ûùpSúý3ç‡]³ºAm[øêË¿¢ño|øîµ„x“|y}™q„Ä/ÿܸVÀ’tœZ%›T?ùp$ø)øIç_›ž~ñ‹_D¯SKÿùš|³hÊŸ¦¢ïL~>°©z µ"Q¥eBk�MÐÌÀ#¹š˜½ U@ C–«¼ÃŠ¨Æøðôô¤+µŸÛ©ZD'åÿ943~ÄèI¥ßWx&­üX <¾N‚Mþû'W†oN3W³(ðH1íf‘TÒ݉q¦9º¿í[Ñ´ì•ý·ì½UÔýø)~™ë5fûÉX)¾R£ñ,>±¿I¾'\^î5SÄ(¸J-µFé<°Q&LHÀG­Uv'Ëäƒ߆ó“j¾whÁ0ü–E] œlà‘þþ9óŸ¼/×Âcî|r…»1¢.áz-¬ÄëJýÍ-jU5/ð7qnÿAÞUL$ðÀÕh߬ƒt°0kú_þ—ÿ% )Ò‡ï*²hÚ–�@¿S‡‚ | �uÖÐÀ#¬køÊgÒ¯Z'Ô¯M ¿.]!u'†I%ÅWn³Mã÷å£ôÿZL|xF3óÕ]&ðÐ8þ„:ubì[̤Ç!XôÛ| ÏÍOQèT0_þN;î{âÏSËŽ~Á�³ùùôË2·žÎ;HZûUº ~olà!‹ç?~(x,3ŸîAÔœ8§­öñ©•s-¢Zm;ŠÂÄØ¤UÓtk³Ù-†üö­ÇývŸìÜv¿òÖf‹É>ïSZ¾e™ÛŸ’Z7ÂýéIêVÏáß½'vþ†G³ºÇè½÷´ìô\8%Ëgò=»ÝÇö4iQ–m­6 %p~hÇÝ÷ìAT^ÌgD§†ŽÞ÷q2NÉâb³ä%æ¿p •ôûgÏ'àiûh uÝÐïa ‘Åvøn7,/�uÕØÀcÒ×Ùµˆ*íÓý—§ƒ‹ü‰¹¯¤+ijNÞý㮂»0ð˜ñ9ç‰teÅOó*ëóŒI…(žÏ‚� h~ý¶èùyýÌ— ’ñEÂÇ J/s Ýü|Îúéõ÷CÁò.ø½Ê <–™ÏÙóš)lA¤Ðëç3ÂWWyWEÔwó˜šÂJiºµÙéÿ± ÅPQ°êËGmo ƒã2@ÓjZ›-<|™ÍÓ¿»?©¤Gû“¿{,i¡åCæ—m¿ó¡¨¢îçÛ/óè5·&c¥¤ìü7O¾Gájô¿¼|ù¥eõJj,-¯·ãý4&$ûýØ.GáºóË?\—>ˆˆoܾ®÷)`˜ÝBlZ.ðHÿÌùO¿/]¾,šOBLhku“Ñ„ÅÔÚC]tÔÚCÝs� nxø“9@>²§3ûË»¦Ôþ/²\X͉I¨à+5eóNÞ æ«è{’+Ïî·&WÅgSË"ýx…¹ó9{>P7¾ò™D9Úç~ž _ýëRëßw·KZ©ùm$Üú÷]·e“ÿœlYT^k³e]ZRywó4µ?¥»úýiñoó¿![fjrA÷¢²,š=ë+dÉËϧ¹2­µ&Ý�ã k¹òcšÿm©ß»ð8#åÜRó Ä´Ï4 ­<.O]z|kM ª �WÕàÀ#”éV1»µA4nÇÏ÷mÏUª[í#{”œØWD“Š@æV„¹ÊÇÂÑâJ@üÙepœX{…·¥-81.:_ôÛ’eÃÚ݇“.)ºÚzç·á öeOøÏ]v¿ìfUØrwçÉœÔ/Sñ+ÿ¶2eæÓ=†fð]¢°îE\iŸZÏEÁE~+*‹fíßé×.ôÍ$æî“þ;Âç“iÖ~´8ððûXò[–ÚŸíÓî·Ï£ga9=_$jEÑû]¶ËG~> >/â_W°Þæ.kÏÿ¶Ôï]8ÿRPÎ-5Ÿ@LÛÓÐÊãj4扶ý �uÐìÀ#¹Zž¼Í:áš;ëÎ-Å'áÅ•ŒPLîêxº;iúœ«è\ ¦úJëDó {¬Oš5ÛÅ©ê>Õ¿ÿŠ|E:S!ÊöÛNš°G|S÷TÅËÿŽT%múÊo~¼‚Ô²ÏL®¢ïç+½^òß3z`‡Ièã[줛™gç3p6ûÀw ð­W|¥2~üÞ)þ·¥~ï2óŸ¼/^-žO4‹¯0k»û:ÜÞf VšÌ6ÜÞOïE-›&ûXQY4£|Ê<^‡ÀÃ/#u×qåg™ÇœÀ;|ÁÁ¹ û÷Såwj_xL-³ÌãnÙU ð˜?Ÿ@LÛ}ÓÐÊãêÔÂC¿jRË�¨²†!W Ù$ÛŸÜMM7¬ýçw­ýGéÇr'ëùð4À_gÂWdõ|Œ<= ODõºãÏlx>Œ‡Ïun»×)ü(cÐ8_pó65é{>´ Ÿ0_Ù³·»ðÄ9õ¾ðý‹/t2z¬}ßùïŠN–ÃJBrËZMûñmiŸ»ûäõáIø Õg_“*O?±n÷·vì"LPœžO¿^²·V˜Ó ?;?x£&U>Ÿù9‰™ÛGz*šÿ[Ö¾•¯ .3Ÿh¢L·Š™­ T^¼m?ß{Å…¹ÖQ™ÃWmËjÙTH”×Úl^à‘*'Ów´)%ðHuiIÊØøìݹþ®¥/,Iü­¹ý|åç3 C³wçÉ.Ë KÍ'SÙÕDj¥@+«Ó˜ÛCc|p [�UÕüÀc‘T·Žé©èä¼Ló*�#\svø»q#Ý+¯(ðß·°ÅФ¥QÜz"DªüyæÊ¢Uµ6óÁL¶¬ËÜ]¦u`½ÓÔ’YªÅÔ­¶RË>3¹Š¾Df·V —ûáÇIë6?îQòú©ùœ8­öñ@ªþ8ã—åR-ÄŠøß6ù½‹ç_ŠZ²-1Ÿ€£}¦‰TIW…VW§e§q=4¾­=�TÑÖª,Üé|œêÒᩉugN7‡2x�ÛÁWBgu­ðeAªBî'{'Ó**,h1”v£`dh'ݽèuÇQ+/ÿý+hm¶¨•”îÀ¨Å[ª οg·cÝ·Ó-´Ô¢¡o_D­ücE­¶\+‡Ì-kÃÉÝ–öyÔ¿6œ Z«ívïG·¡=NONµ¼™šOX=·Ì-†£÷ñ²ô-9’÷½YÜÂ-|ÍÙ>ÒSÑü·Ûv+õw4-3Ÿ@ж¦¢•G9?~…G¿úÕ¯hí R¶;ðpWÙ²ƒ”ŠNkÝÞ iþ¼EW'l£¤¥Fºbê§© pÙ_̦r¨©håQ-KZž_~ù¥{�6kË[x¨?ög“1"Ü´žñòãPõ°Ô½ kÞ“éU](îÍéæP�³59ðµòP· ”Ca‡¿…-A€MÛòÀ�6/‡!?Hi(ù=ë­üî=´60[Óßʃ1(Ê£eªÁLµ\5¸)�l �l\þ¶§šÖ5ž­Í�Ì×ôÀChå± ‘|kÝÎ�ÖÀ���3mCàA+ÕR ¤íHÿÀ:x���`¦m<„V«¥o¼ñF4,X���Ì´-­<ÖCczh9kŒ-s�X%†Qz®uzÒEW-Ò“î9¯««št[²üwj>òóFN��ªm[ÑùŠÎc°Zº{‹–³Æ÷Ðù �¬ G (ýöA:¼ðá‚:Ñä†JO 7ü{üT>”9=~üxê;‹B–ô¼«‰£K‡%úÿ™�¶CQp{‰Û"׳M­<ÖKçyZÞ:÷£µ€U ð¨�hè¾åªä«‰Ÿ*þ �|à‚t ×ë}Mi%á+'é°D¿wÖ²ð¯ñï°Yé Â—g~Zx¦§¢àö:“N¦‹¾Ç‡¬é)ûrV-Ò°­´¿líû*°:ÖùžÊj•¹�P&5ñ¡†¯Ìë@J%þò– ‡|0ä++�®N-$Òå—/Òû¦|PáË3MUìÒ–ŸMù.€éß“h|`âCß"%hmïÛDç´òX?³ùãå(€²x”ÌW tòë+ãþê¢NŽ©ˆ¯VQ°ä+)þ ªÇ}åK¯Wþó†ßwT†éo_~¥Ã‹m݇|Y£É‡$¾Eš/ó}™“D€ºÙ¶ÀC´ÏjÿÅz©lÕù³ÊQ•­�p]× «“¾¥Aú$7}‚«“[RêjH¯/ULüÕiUJÒAë Mµl ë ºp\–_:ÑòN—;ú[ëÁ/oXTÕ6ÚµŸjßÄúi¹ûr’c€ë ðX’* :)õ•üýUO*Êõ¦©®¼¦+€éu«çX·¨ßú@e–ÂW_ÉöÛµ¶umÛz Ûöf¤XߢFëH“_G*{8ÑGlcà!Úµ?bsTFjûÓ¿�p3¨Â ND•0«¢à¯~r%®ùT L·ÞÑÁV•FUBô8ëU¡mUe’¶U•Q*¯üöªò‹ÖõÂúDmkà!´òØ<¿*5¸,G'ªÈªB«UwUturIá ñ•l’*Äé0Ö—U´h.•/*ò-vô¯áUÚæÀƒVÕ¡2P u¼ã¼ À²¶:ð˜UåäË Ã:Ì cUv±­m/Bz¬Ó6¢pYÁ6O¡¿Ê:ZÞ�XÖVÁt¨“A5VB¬ÂR'‹\¡ÇuiûÉwÒÿõÛ.KeUQÀÁÉfÉ·üñÝ0)ƒP†m<´i¿Buhøs-Ê8�ó4þ¦0C…¡ Åt%T'‡ÀªøpMU(ªâª¿Ùî0‹¿Z¯“jM*«ôp*kÒeoýA„«ØöÀCT.ëüÕ¡ Ã_Ääx `–FÁtB§«¡¾â@Óol’È:ë ¬“F®ºBüváY•U <(«P6mk*sòÛ-†°,ZyT™Ž¥Z7:¿"Ôט#˜?¡ÓU,ß’ƒ“9TßNÕâƒítûøõïÃ/Zþ`T9H·&"hÃ"1í/*ÃQ=:¾ª,Ó¹•Ž«�àÕþ¦Š‚¿j¥ÊƒD*ô€ª+j‰Ä¶Û<„¨2?^ áæ!ðˆ©,×~‚êÒE$­#]�å8 @j{S¦ „¿JN¡†:Óöì[')ø`{®¿t7&BÔÊ¡t·Ê"xÚ7håQmºÐ òKÛ­þ°ÝjwÓAF•2Æq4‰®¬ªÂ¡ƒ4A^ýøÖ*Ÿ4r ®üø2¾,¢ÕÇv#𘠕G}¨ÜRAe°½jqóI­0*´HÖÑtª$û+­j%À8Õ¦õ¥2JëK-uTYš@Û¶ï϶½½<²t>ʹh}øã³Ê2.”Û§ÒG0tø-*}5tqjAg?:YÚÙ¹aí£Ç6»çŠ\ ­ܵvkϺƒ ÷؉u÷ZÖ:ìlÞ{7móÉ>Pm>˜â*8šNe‘Z,ùÖKTö¶ G­<êGÇkGi½q.l—JÁ¨ä5Äø[ öì øÖÆã3ë*ø¸e½áîyßY¿ó² G<ÒØ'ª%ÝGëE£ÊÆv1 ¬îŸQùÒjÛÑÉ(|tŽ©ð5üŒÁ‘íí܈˴øU´úùTeÏW>¶Ç4¶ÿzRp«c·Žá:·Ð|•;‚Q©kŽƒ®íÎ 8Š\Ø »— <È´(X¯t‹šÆÖÇø,°ƒÝÛœ=·ñè‘*øØïÙpfP¾xäéMð±<¦iû§•G=éØío|@7= ù*sK,DÐÑ/l¼ž$½iÁè…{lËðÁ‡NBõ/ïÕÒòMw]¡EG¸2enÀQ„²hYÍGàQLÛ=Û|})ìPè¡ðƒã:Ð\•8‚¥+nhŠlØ»®WUÒÚW4 WßtÔÕS Ú»¶ÓläYeÑe© âŽÍDàQŒVõ§ ~`fuwÐ<=‚•}r4 ìA¯c{»];yúØŽÚ7¢ƒôÎÞ]ëžûWÙÅð¡uýsáÔj`'ÑóÏm4øõ4Èfû8œ¿IŸïVûž^<³á£#k·ô¾–í>J À©÷~<é#¾³o{'îùçvܶ֜&Æ×Ÿ÷Ôg(d>™ Ú:°Þé³ì{3Ÿ«÷žØ½dpÑð·u>¶Aêù<}WÐm‡¿)ž½ŽÝ¸>ñ£ÀÚþñdšUiÈý¦½ÛÖ‰þï_Ÿ^'®Â2ÙàÁ‡á²¾aíà‰ ƒÃð7ë;¿{Oìâbh’yÛ·ÃþÙd™ë½÷´ŒÜ|%ó=ùžÝîc{zòAázüºÑ2úÐŽ»ïÙƒ(Ð)˜ÏˆRë,»l—[ï‹é W)Ê囼&ÕÜøÔzûa¹Là±6\Äh­O£•G3øðJë“ó( Y6v󃕗¦º«xI¥2°áÅØÆÃží‡µ:};×ËÎûÖi…ÏwOÂÓÙ°2Ú¿U~w»{‘©¨ï['8^‡-{eÿ-{/èîÜN{ác/[§ÿ]ø¡zÍŸÙ¾ûΨ’}nËö{§Qez~àQ¼Ïú õ]WÅý•׬óžî2¶‹Ó{QeÞnôšýC †Ñ·„•ð}Ü£Á9w“ `¤Ã_Y˜×ÂÃÏ‹ *’¿õ\%#½N¢ ‹ï*ãÛsó ªyx9\Æ!ÐÅëi¾Z‡Ö?׌ê5·ÜzÕ×§Rý7¬{ßJůgõëÅ-yþÆ·ãß75Ÿþž¨/½_.á:óAJh|³Üz_’ïv¡ýŠ úõøVW§C!×âð,Ü¡Sª¦Ô]ŒVêé9·Ÿ´âñ,Š,ÂÍ™÷Ôï/78.¢×Ï se…ŸÂß5(,’„¯™uò4~Ç*Bæä{ö­{2´“£âõ<3|-˜Ïˆ4«>+þ¼t(¿Ü6»¼t7U*õ§mÅt¼ÕñâòÇ TÖ!-Ð<9‚ùJYùM^]¥?}Bûb`ÝÝðÄÍWB]hþoLþÎ\ t•Ùä5¡x@ÎÝø„Ò_AŒN"sÓÒýÆK˜÷d ½tȰès}¥>5ÏÉT4à¨}ö¹$XI~|e–QÁUÕürýyÿ0¬¸åñ•›ôÕØì<ø aúwºeºh=Gó¡ÊEÏú.ÊÈϧß.2¿o Åëq‰õ~IºÒ¤ßŧË+¥UGapšÏü6|3Ü^Ÿirá›¶ßgÙŠzY¡žö×…ÇŒà4ÂÍ›÷ð[ ÁqÞ¢@Ñý¾¥ö§EákzørgƲºVÈükû7S´î]Yâ×óÌðõ‡‚ùôÏßœ,—ñÈ).Ðçgñ6{5ª4”{q› m³©U�äæH¶tÏêo­G0U&|²š$ü•GÝr0ÐU°8¨H*¹E¯_TŽž¿ÞIa)óž¢N‡ ‹>7~~ùÖŸq'ß½DàQ°\'ï›xä–üˆ;ÑŸx¸Š@Ra(°h=ûJCøš¨RÐû]¶ÛO~> _È=ž^þe¢´* ±•NËìÚåÓÂmɇ>8ôûí×ÿ}™m|‰PϽk¾EÛä¢y­#8^*P -³?-¾N—;«™/®çøóf‡¯ùùŒ·‹Ü6hn=.Üf¯Î7/eßÂFhûÄl´òh&ØrW6 ÞÖvSÌŸð¬Î2•Çs×<\ÖÀú_?ŠžONòŠNŽºç/Û!«„yÏŸG}®{~^á^ŸùÉ?^4/9˵¨’Q´N¦OÄ— <æSKð‡ë ?Õ„Þ]å–ü|ºÏËlK’y|™õ~5:8+\Ô•'Ôóù“šÒZÅ,µ-‰ºQ|fAÔ-BÛÓ¼Êu ¡ÞR–Ý&gÏ{áë-“èùKÇŸÉì_¡eö§ÂÏš.‹¦×IQ9·hùÅÏÏ>^,¶…¯Ùù,ú<ñ§—ÿ2ÛìÕ¨ RYÄÓz"ðXŒVÍÄàð@ý­åæ¯6¯¾Ië¢M%2uRížONò®r¢ž\™¼aíîC×;¤+hw~;}e²P ó~¥“ïÉÕÆVûÈ%W u¥ôÈ­Äüësã‘L]m-š—8}U5Y–ó+OÓ'â‹+ ÉÕïVÛº†á³±ñÙ»sïtq—– UöÜØ~¾òóéK®û@öjë¢õs=ªd(d\]«ªz[Y%l™méâ4óa¯c½à3ûºÿNøü¼Êõ’Ç:Z›-˜÷ÂmxÑ2qÏ/»×Oí'ùÇ—ÙŸ æm²lç­“«”¹îù™ÁÔ2‡Ì_³ó™ 6ë <¼ÒÃE¬Çb´òh6?ö -Õ€úYù̇k9¹I*˜©ÉL¥ÚŸàùÊzjà½ö¯-8úÀúOMU³ý×£G\øà+­¾µN:Ó“ÿÿüì»´”2ïçÿÙ5¯öMÍC ?7|‰ïsž›ÿÖA`g3›ô7oµí(ê‹ïûÚ§Z;$M½Só2Å_¥ôýßà ›ˆ5žWq› FòË_Šú›çæ!iÂ=ùÑä‰Åë9¬¨~œlñà­­Éë§æÓ/…Iîn:~¼ƒ½#([bý\—̪Ðkl Løå²’“—…•G·m¦Ö{üüu%B=÷÷|‹*ì‹ç=ûzgÑ2ñûBXÆ-'ûμ@1´LàQ´Ï%óSvà±(d^¢KKÆtøšŸÏ¤lË”é~>Vߥ%ÏW =êCÛ+£•G³é\AçR*¿4¸9€zXél­a‡?¡ ÊñžîG'pÉc:}æùÓߺ{ÁÉ#û0:inÛŸ¿Ó¶?ʽþ‹/t—z¬}ßÑÉhú1d¦ˆèñýåoK[¼=ìÌg„'Ë_ôntý<<aNßîVÄ¢ÛÒ¦ï0 ÷nøÙ ?BîÄyòá”>ùOÓ’;Jh�½c ÞÙ‹>ï¸VØòŸµÛ±îÛ:ñŸ<¶ÛíÛQeÀ?¦ôÏãJGæ±ð¤=sw‹prw°xØû׆SÁzÞíÞî„p|ìïtª˜Mͧÿ½ºûAú®zO/Ûe×{Ñr»¤tå«_K…gÑU~WYO¶Ëp;íýÖŽºÿÆž® ÔKžÏ… C¸Eóþ™‹—É¢à8o‰@Q– — _ÿsn~¥ Ø]"Äœ2/±žç†¯p2°lXþ¸»éÄÁõn2ðéâõS®µžàÚ´}b1Zyl'7…Ü… ¨¾•ÁT�p2T‡¯äkð­mç»ù¬B|U<U‘- ÏNìYr8`<éW8ÛÿO{§ý˽þú¡^\ñ]x,½cý'³æý{ÜÍþþÒ‚ã"sŤEŒÿ¬xÊv[I™¾~mÃü:|»ko—2ïZrø×­gµüøÚ†¯áò˜ÚÖÜïÍü¾pR+ `-Ûå¶ÙËí=êCÛ�–C+í s*O© ã.T@µ­ì¦Ô“«É@µø r›ÞÒ ŠÂ®À›§°C•éRÇÐAé<–G+í¢õ­MtÑÚ¨¦•Á(ìêÒ•œ·qÿôÍP©\աЃs†j#ð¸Zyl•]ZßÚOXï@õ¬ä¦ÊÍ»€êÒÉØ¶umÑ ‰*U 4TZ…2°rux\þ¶“.¦¨©&.¬�ÕQúLWjVÕ7@9|×–m: ocÈÔ…$·¹»]•x\ž<®öo'­w•g:ç ô6¯ô#˜Zw0�P}cg[�µ8cÜ Útî°­ÝíªŽÀãòü…¶çí¤õ¯ -*ÓrÍ*õæ›ð¨>uíÐxèwÒ•¨>“\4©«Ñ…Zyl7]pQÝHÛá°¥Á¶éŠ1Ð:7½[‹~A,Pt‹­&«¡•Dë_]œ´-pñX¿R`: Vú–Lã‘ |h½Öžº›blƒ#ÛÛ¹aÁ·á_ÀbÛpõI!¬~'€êSÅ`‚غ!ð¸:8Aüâ~Tº¾4LiG0ŸbW× oFíÝ c;ïZkç–õ†ÿÅ…-Ûï=±³d>‹§V»kÇ6ʤeç6|tdí–¾³e{À†‹>5œ‡áCë¶oÄóºwhÁðÜ=:ï[§¥ßxjã‹ëîµlg¿gCÒ™QS˦ŸˆU±;Ëx4°½N¸¿¾iÁè…{´)žÙ {ÓvZ·-8{î–G±ztLÇÕèüXË .D¡®.ĨÎÄ-õ(í¦ñ;48OÕ½tm·‡`x\$aÌnw>ŸZo¿e;»]$õ¡ç6©@á®õG«¨P<·³à¶µZÖ;=7»xb½ð;[Í 'Æg´nX»÷Ä.ìÜN{ág¤*=£ÀÚQ¨sVøôÿð7d~Ö­.ûíuTïDý©íÝx®Dàñõ;/»ðÑ…Q¹4LÍgÑîëÝßÚƒÁ(°–x\ íQ·m­è;÷­œ†åË"óÛYasX.¹W`³¶¡\ªíó¸:B<䩜Ó•u„aÀj•vSJY‡{èW'ðp'Ý­CëŸm<ìÙ~f¾\¥¨(ŸYÿp?:YB\Iº%†{(ž¿—­ÓÿÎ=’—®4¹‡\hÓêôÃêG(ú\÷>Ði6Š^ŒMP³ñ&\ZÝßwaƒî^¸W!ðpeM´ïú0fϺƒ8Vˆ÷ýT+êt'Âá£\‹³’Œ¿µàà†µÚ÷ìôâ…]œÞ ¿sQ+¶Eí‚°×ôr©Ž<®‡V(¢ÖêV¬mƒÁmÕ)í¦µ;kuW‘ðFL*sñ]Bæ†Wá¯~¦ç%”/ò¢ùÏW~°aï–í¸P'þŒ}÷¹q@B%cóš|"[Ý+ÅU <â}1Þ·Ý>›ž/׫h_ÙaT­bì tKŒÜc¹2¥ÈÂÀvQØŒ* ‚]-¬ë£•fQÈ«Áš51~P¾ÒŽ`• @Wï©o¼kvGb:ðH7}ÖtÃÚG“«•ãÑc;Šº¨Yô‡vÜ}ϸŠÀìçÜÆE•�U$| …7ï¤NâI…ÉUD dÍŒ0|bA'n²]ù|–oÃw™U›??ÅA’¿’êÃ}ÆŸ¹ÏUÅåÍ’Ã\–¬Õ{çzÂVóÎQU <â!4\ÞÏça)㺄¨\™B\‰k5–+sæ·6[.°6£ ÔƒÿêÐy®‡VXDç,:'Óy wöÊSÚ¬WR3ÍŸÃoß "u"ž­˜û“ã›áÉî³ðOßUÄŸüê„ûÛëž„ÕQßô·]eÞsKs- <Rƒ°¶ïÛ¿óÿO~›{ôؤ{<ÎFøØ+¯Yç=;a…%j&¾ã*î}S•—Y‹Ÿ—|%dÖ㨊¦÷•ßdW»ñèÄîù1µÆ ÌXáÔjÛÑÉd|ŒyëèäÚî[§÷±u»Ÿ¸ 5.ç§¡ýôÏ&Aé°g7Ó-¹æ¡ëîê»ãrsz@V=ô;ëiY´Ãm.°NÔ*D0«¬~–oÃwñŸ›ïö6w~– lç†Í¨mT «Cë×G+,¢rOçe }uŽàúJ;‚iÝô•âøÊ_ºùó¹ ƒCÛKìþ=¹«ƒÑ ·*=ë§ï6"óž+ÅeøÄ}º•…»Bš9ù/øÜLÅbÖ÷.x䯒xT]ÓïÒ²©@';€ï¤ĤKX¾bîöÕ½#(˜ô]E’ýpNÀµPp¡­(èí<¸Dà±À¢À× QÙó¸ÿ+¼p¿Í½?~Ì:êCá–½²ÿ–½;n c_^¸÷Mu£›õxdV95¯üBQÁ®ÖG9håeéüLõ*£ÑÚ¸žR`›-Ä}å:e/«¸ë…n§ú™ÑUI”ûŠ»¿c;QïýÎÉ]Qæ=W†YÁƒç+L“ŠÈôo+ºÚYð¹™ÀcÉ+¤9ÅËuV‚ªÐ´Éem&ˆuãL¤ð½8º”MΜx$ïqûýmNÀï{*ƒúKÜ:ú .xhÿ/(CÜ?™ÖŸ›)Gf}ï2ÇT9å'ð¨•êËŽêйÊA+,KA‡Z©ê<¦j·×ê¤Ô#Øf+O¾r=¿ÉTÅÜUDvö:Ö >³¯ûï„ϧ+èç6ìߟŒuỿ,|îºæ “AK'ßYNà‘oõâ¸×W2B&ßO%£²tmz?yí›ë½:âö±tå~ʬ`QeJwÿP™’ì§sÖ¤,ŸS9ö`PîS¾üHÊ͂ߖ)cœEGÑ{dîüÌZ® ÊSTŠNì›ÜÕ®ŽT¾ ´òÀe©LÔùšÂ¶àòJ=‚éªÌæn%ç+êá r¾ïûÙïìèAdCw5U!Ÿ/j‘ V ®ïùTEfÞsW5ç}ÆmiË <B ïrP$…:´èÎ.Ø(@·áÖºRüøñc÷×:¸}ln7’ü¾éËÝh|Ž ?°¾žÏìÿsÖ‹¡õýmbÃÉu)ÅÜ€aÒ]gò%EeJ(~ͬ²èŠ-*E'õjÎê ð(­<pYºp£ÁL|P>—SúL¨5»òýÕuòž’Ї?ö•ù\Å$40<áîýÖŽºeuøqªYz|%5>iß;ó¹-uaA¶Â£Áÿ‚¤Â“ ÎÉÿ6q†ôÉ¿ÿÜt« ßÜ<©X¸ùîæV.žX/üÎI¸â+9Ùß—·ÀõÇ¿ÎØX)lUó&åZÿÀ¥~¿Ó>ú$]Ý´_}èÍ…nœTÈÝó…-æ¬nÜ¢LðyMsâÛÒ–x…eÜ–Uæ¯~Óg½Z´NPmߪ¸rµ—å/.«Û°œÒ`ª\l´)jîN­vׂZ{ø./. §Ýî‰=sw(‰ï|ð±ô?OŒ}Eå{Ð}ÏŽ“+§ae¾ûÐõ“:ç¹ëÓó™4Ÿº< «^Áo{»ko«‚‘<¶gÝ/úq¥#y,¬ îG•ŽÌcQ%ÅWœôXú·Iqà‘©ˆ…ïkµìÑJtÅué ¹ ÝYd¨änHÉ~O“Ð0FºÊü¼ö#ËèëX·?˜°ŽØaR¹÷û¦«Ü—0hiäÝ;H•}QÈé­S¡êäs'!OAh›¹óÖ wG©t¹ãºúd~ߢÀU¦n±\ù®•_(Û:®Jç3Ú~´_6y6 ,+9‚)y\or�—¡PrZwxêÖ²Þ& éÐÂ…ÝÀ»áZ–EkRº3w‡ý½o{ŸYÿÃ[ñûŽtûè9ëèëvkÇ>èmµ­ûÈ¢× <òó™Ÿ4–HDuú·½ÝíØnú}»]ûâ µäH=Ö¾oƒ|Ðë[ƒøq–ôXú·EŠ™Ø¢ªt¯ónÅX=ÚÿP.ZyàºtÑJç7š¶ápU+9‚édE…ø:¯¨XŽ*þªTlÓþéË$N,êÒ•J+­&Õ •Ê íHç8ºEÝ ˜¶²#˜úÌoÓd |W–m¼‚ªòˆÊPM¾ë¡d5x¬†oåA«&\—ÊNãÐJ˜¶²#˜¯Xѵ¨X©Ùã¶‘úý:`ts zt¢N_ôê"ðXZ6¡L:ÇQýK-‡híÄVzS2B tBµÞ»•TïÚB_W :tްmÝìê†Àcuhå²i›Òùž¶«Ý9¨•Á=€ÍSÒ¯ÖT(&W?h:lžÎ !«ÀcµhåUPØ¡òUáç<Øfk9‚éDFKB`ý;¦±L€Í#ì¨Õ¢•VEÛ–º2kû¢K/¶ÕÚŽ`þĆ XäT±WSq’ýi„ÀævÔ ÇêÑÊ«¤0MçƒÚÆ8'ĶYëL'6ÚÙTÑÀ]œXw¯e­ƒÀÎÆî14Š*ñªÌëÀF…~6-#B`½v¨ÍÕìú ðX=‡håUÒ6¦`Mû3ƒDc›¬ýæ+bÛ[ÉøÎú—mg¿gÃñ3to†Ï-ë}ý¹uww¢Bh2½iÁè…{ß ofŸß½eí[»ÙÇ2Ó kwk#Ëä¥c»>´nûFü{‡ ÏÝss\ íQ·m­h>÷­œÚ…{JŸyÞ? Ÿ —Ëð¿ØÅàÈövZ¶ß;ÍþR°¨“&‚Ååh9q¥y²#Ú·oØAð-ûö–`«'ß±z´òÀ:¨üõu1ÊblƒÁüIÏö%ÙO-hïºÀÃýgϺU÷}E¿e{Ý“T�2>µÞþ+Öéçöl?<ÙíÌÇ#6Ù èZ»¥@!ü¼ÃG6ZAb|ØA놵{OÂù=·ÓÞµZ·-8{î^Q`ü­7¬Õ¾g§/ìâô^8ŸéJwx\$AOæ÷¡ºŒiY1^Îåø+ÎÛµÜJ _L­v׎ rePÙǹ MʼN`ËEŸº(°±Œ†?¸ç±,.vÔ›ö¬žö Zy`]°i{Ó”Ëh²ÁüݶkG‹O [~xzþƒ {·Â‰IeâÅ k»;»ÖžFOSHrÓ$Î(°vx2RŒGìp¯~Ç*®¢¦+î¡(i¹ßW$ÝzÃWÜrhZÿ\ä^ãþŽyËé´ž¥«Ñ2Ty¤0v;Ê£’ÃW·ïïìvmDÏm4RÂ]ëæ„¡WöÜ΂Ûa™q`½Ó°ä¹xb½ð;µb[ØÎ[FX–ö-ß•“êz"ðXZy`4ž‡¶7•Ñœ?¢©6~ÓÉÏvÝ+:®ÜÇá„«T¤*eª¸ÄWQÃÊF(”ä¼oVþ{óáEž I2•¢p.£Pãå¤òýí_}•Œ"ÚüèÛôǼ>-Ïí9𗾺@ ·oGÆgÖ?Ü*M+;(*#²ÝÞòeÊ´eÛùË‹©\Òz§|ª7õÑqHÇt*ŸX'š`MT™#Xõï»R5™þØîjåx4°½ŽííX¯ß:jUQx5SÍÁÿ,©Dè¤üfª5DùGèÅÀ5QWhð}ø;~g½NXùh6ÒóêþòàÃpžo„ßûĆÁah ]ùÌ·qØ?‹*Åóê›»Ï(ü¼øïöò¿A'óVBnÞ)7¬i�—UÐq»\ÛÑú¬ìðuNà!nì ¹!ÄUøÖ(¹2gQk³¥Ûù˳©Lò­Îè#^ë¥ã;­<°n:ßÙ®‹ÐØ•:‚iGóc{èjPu*¾•„¯ì?·ÑÉq_q…g_ÅM¹£@@MÀ?·Ó¨yõ‚±, ¬$ðð}î_ü³èµÑ¼FB®?¾ïÃîÆÙPåd¿ó¡(¸qÍÄãÊ@¸ ¢÷å+/þófTjܼNUBf=Ž)ºêã[!p@ZÊ6ó̌ϣiß:÷NÜø f} ù¡õ£ðrÖ>e‡¯ »°Aw/šç¨¬Ê­n’àøÍ°zb~‡~cÔUåYn¼ (ûÏÍ·¼˜??˶ó—ŠùÀVÍ¡}ëElJõ/B—SÉ#˜®©¢¡M'Nçû¦§›>û>ãae"nFíC…ë h·òÀCŸ;ÕÊÂ_!MoþÄ_Ò‹ ž—å©y%ðXÈWÀ©H¬WµZ{¸3}e<²“#µ¾ŠC³Óx�ã8 ˉ“ßÇ_¡Iù‡/TöÜ·çÿŸ|‡/§ô˜ZÐÅƒŽÆãl„½òšuÞ{l£ñØ tìË ÷¾©nt³—YåÔ‚ò s¥ÃX*jÍBà±~´òÀ&é|Çw™®D] ¸†JÁÒ'O½{‚Jzø“õëõïŽ+ónÁªï¹dà‘éÒ¾¯ [ÉtåfQàñbF…¨è})ËviABAG5[>m­ßÌs“aS<.E®|HZc¹°Õ—K™€öòVxÄûÿôw¸q52åhÁçfÊ‘YßëŸx\2°E!ʨæ#ðØ ÂClš¶?m‡ªÑÚuU‹#˜Âíl >2ÁFÊ ÿ™óËÜwÌ}OjÐÒ½#è6%qø|8ã^SXÉ‚Cñ÷SÉHó•hê_4›§¿Æ$PY´þîD‹*énÿU^]R¼O^&|<x¾ü˜”UÓåN®Œ‰|n¦ +zÌŸŸéï–YËEü@_Ft4Çføó_`“T¶+ÌV9@ cÔQ­Ž`*øUÙXûU$ߥ%7&GöjkIGa÷Ï…ùçæ…·¥-+ðXê.y¾û̼ÛÒn7Uª :ªÍŸ„êŠÇú®¾å‚ÄjyåJd*|]x$ƒ–*$y=TNàQT¦„Ükf–EW l!þäWÇbʨí@à±9»ØähÈ£FÕò¦ †š—¯¯BøÜFý»Q+‰Vûƒx�O›Eßj¢¬À#ù®ì]`&Nî’âÅÁK®b’ØÐÝmÅ=Ÿè‡'A…¯0¤Oþý-Ó­.|sóIÅ"î_ï?ÿÜN{¹ÁZݘéÇ\üVûž^¼pýñSÌ–Òv­ 4ÍÂë!]éÓÁ_'¤«^g~_ÏŽÉá÷Õ\—–ë—_ç3nK[NàZÙmi‘¦\Æê¼¾°›Fà±9´ò@ÕøsŸfßÉMRë#˜oò¯NÅÕ&àºûÁÇñífU™PˆÐ â@Ÿ|Gkºnsh}Wú¸š€|hºžéù%ýÝéiß:½ÀúºëŠç+C~ÚíX÷mU0&ívûöETéð©Bòyî»|%%¬ø ƒd¹´ÚGö(ý}E‡\œ¦îÀжî£á$Ù":Ph0(ÌhÒÿ9xÔÊV©LZÙ•$8ËŸ# à>µâÚµ½îI¼•x\6|õI&ðÈ–eqÈ™¤ Aët¨š|nºÕÅThë‘Žîæ–?îŽR™`ȵ0I?¶8°…Ê#mß¾u¥Npiѱ}´ÿbshåªÑq@ç=Ú6 ¿Qu8‚ùJcú„Œ¦V¨2¸øVJú—™fÐ €Õ܇°¥X îéÖ­.|T` ¢ð#n1á×4«{ÉÒ– _}—šÔ÷f¦øõA?jN¿g÷í®½Ž¿èçÂä7-Üφ¶IksF·áÕc ¤FwyI ]æ¶ÛË·æXÏTölŽö?Zy Šüìt¼à‚ªªqG0¤ù ‡®˜£*Ò¶ÍfÓzÕ ªaµÞ×?È)p9ÚnóhÍ!ðØ<Zy ªtìðw²ã\UÔè#˜ þ*º®PéDŽ–X�Tð«Ò MT ¶Ö·ú»¦·Ê!T‰Ê)ZœaÍ£•ªNÇ…:Žp®‹*ÙŠ#˜¿Úª«¬:XøQ;$Ê¤Š¬¶+l:AÔ•RUv©àBŠZùPaÔçÚ·†Ôq‘móxTƒöUIT™ê\þØ¢ã P[yÓIvB…þdO•D´£ËÒ¶”ÓØ–° ¿Ýøðƒ–X%ßâÌos*¯Øæ°,jÐqCû.Pu Õµ­ê a:6#X¨èª¼NurH¥i¾Ò íCÛ‰¶ºKáº|ET'¾"ªÇ€ëH‡ûþØFY…« ð¨#|�U§sfµrVù¡MáVÀ7õMWhµ£rÛ¥í3+à`{Àª¨2ªíM'µºŸÞÞ`1OQ‹3?&Û®ƒÀ£:håºÑyΡ5¸c8‚-PTáÕ¿:¡¤Ò,ª,h]k½ª’  phýp`Ý|6_þèo=N3Ñí¦Çt÷LpÈ¢lÕ¢ó€:ѱIÇ)ÃPwÂ:q»Hê$S¡‡::PåØ_‰U¥™³Ú´}ERëÍW|¸¡çX‡¨"m»*güv«²‡Jnóùðݯ{ÜÑqˆn*X5jQYO+Ô‘.Ôè¦í—s¬ G°’èdS•d2ªÙ_Õßz\ϳs¯*ZÞª ø`#½^|%Q•®”£®|Ù£ŠoQ+*ÂõäË®¢Öf”YX7êQy 2¨#ßtÑFç.´öÀªq[1´ú D'®¾Bâ[ø®1> á$örT™ó¿Œµ\µŒ}Á/cZÞ`[hŸðûC¾õ’öÊšêðe˜Ö—Ê*_~éX¡¿µ¾(·°iÕ£rCa(•EÔ•¶]ž¢st`U8‚mÈ¬ŠºvzXè –®¬ûJЦm9¸©Bæ³–Á2ˉà˜æ÷%í#¾Rí÷!ý_û•žÓ ‡^‡òi¹Î ¿ÓaT G5©ìP™Ô™Î=t,Ô±‘ów¬G°ŠÊ"¾’¢I'éeM¾Â¯ÉWúÓÓ¦¯¦Ã ?ù“ÿe~Ÿ*éßF\Ÿ*Öé}Qûš¯ˆkòûŸßOý¾‹i~Ùøeå—_–Z®~Yúr ¨ mè•#:W"$EÝiÖ¹¾¶gÕ}€2q«±tˆàƒM¾DzRâO¼71¥Ã ?ù«Êš¶± Pe> Ñ•í£:Ñ~›D|%^S:tÕä÷gMu (ómúw¥ÃÙ¢eáÃYßZ†ò M mÕ¤rGeÐ:núÖÛ\ÜDY8‚áR8é >ñS:tõሟ|(žÒa‰Ÿò¡IÑ”GýäC™ESQìMOù€Ö‡šòßlí¨&•C´ò@“h[ÖñVåŽþ®‹#.…“�eH‡~J‡&³¦t ‹Y¡Ä¬©ŠÝý€:àØ_m*UÆQ9Ô‘ŽÏº8¢i™cµ¶uZ… G0\ '=�ª„2 X=ö³jSE/ßÊC¯Z°)$êLaž¶o]ؘՒIk{×väqÃ¥pÒ J(“€Õc?«>ßÊÃZgšÔå¨;µÜÐ6®m»¨Õ’¶}mï E€<Ž`¸Nz�T e°zìgÕ§.ïïý½h]ùIWÅ&Ñv®íZ-—|kuwñÛ¼º¿�yÁp)*L� *(“€Õc?«.]íÖ•o_áKOtgA)èÐ ä >Ô‚I!Gz»òØ*p)$�ª„2 X=ö³ê™tø‰î,h2mßÿïÿý©í¾¨Ë ¶G0\Š �¨ Ê$`õØÏªEW¸5VAÑmµýDw4Æõxùå—§¶ýYw,Âöâ†KQA�UA™¬ûYuiü‚¢ðƒî,hºY-œÔÝHã†KQA�UA™¬^ö3_bjæT–¢ÏfbbÚÌTÎq)en|�p]”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?£¬h®R+Fl'@%”º_»¥p �P%”IÀê5a?«ßoÛÅð3;î¶­µÛµÁ ÷0¦”Z1Zëv®ãÁ‘ííܰƒàÛð¯UzfƒîMÛiݶàì¹{Ì;·apÎÇNôû[{»ñ¿•6Sáwôï[·}Ãv»ÛÜæ\4ó–M•Ôe>ËQê~íþ–²Þ�ÌG™¬^ö³Å¿á"¬LìE¯ÓT\Ù{jA;® ÆÓ®µƒ§î¹’÷­ÓrßCà1—–QY.õYC{¤@Êm­vׂÁßÙéÇ÷—\_U<žÛYpÛv£íý¹úw“àc§´Àcn·ÉrÚ\à1k><ªèRûâõ?‚a­ÊÜø�àº(“€ÕkÂ~¶ìoÛQûFøú–íuOìÂ=>á*©{G6¸XmÕ^ ¬»VÎÖx\œØ{½ßoðêûÕ”Z1Zö³ÆßZpn'{w­?RåS-rF-*P-».£m¬eû½Ó.úª®í†ËwùÀCûÚ=ë ¦÷Âë¸ü|`JݯݿÀRšpÒ 9(“€ÕkÂ~v™ßà+D;³®¼k·¹?Wf­G|¥ÿF +¥VŒ–ü¬x)hásqbÝ›G<.±.µ-¯²¥RÊ¥ƒ†(Tzͺ[©ÔýÚý ,¥ '=�šƒ2 X½&ìg—ù ªÝh¿eoíµÂ÷íÛaÿ,z40ðŸvЪg%°ÔŠÑ’Ÿå+ÍÓ]Ÿ~°áÒ]ZVã2ër<ìÙ~%8´iíìxl©R÷k÷/°”&œô�hÊ$`õš°Ÿ]æ7¨Bôr÷ÄžÞ³¶ÆÑhXïôÜ=Jô¸¾b–çãM F/l<؃^Çöô÷ð‰ýøùèsŸMºB豤‹D( <Þ²Þ'Gñ¼„¯iµ?°ÿšÐxtb÷ügª+NçcèùñÈ>´ÎÞ k÷>qß;àø rüþâÉW}e1~üÿnïDƒªÞµàñ©ù;²GÃÔòÒ|ÜÓïwïÛëØ½Á¨´.ú̲,ýYjÉb~ìŽY¿ç¹‡ë ~­–'8»J¥×O:p˜¹¼ôY¿³^¸w»íé‰_æá:?|d£p¦×efd¶Áp›œ&ž¢Ïuß±“ õæüŽY2cœìÛ[ŸGÿO‚†Ü(;­¶Ä¿3;ÜãÑäæ{æ{æX0ÓËf²œwÚÇ6ÉïnµïÙéÅ3>òûãdÙÇ –Ó½“xÝøïÙíÚÉSßu.|MzŸ×ýÉ‘›×p½÷Žß³îƒxÛ˜žÏ˜ÒË$½%ÛØ¾uO†“Ïçk*È­ý–²Ôÿ†µ*sã€ë¢LV¯ ûÙe~Cx¨2V^ü ŽéJI¦…Ç6ìÝ ??}%ú;ëw^SÅäïRK… /Æ“Šé+¯Yç½Ça…hl.`iuúÅ>ð+uÝGðrίäº1D¢ÏÙ?´À ãÑ#;Tekÿ= þJó¥ï_rz~çŒn:î»&W½ æ'¢_³½·Þ²ö¹ÏÞQ ò$œ¿É{üüÅÝn¥*ùgÖ?TðrËzâO¼®Ë¬ÛE.óY“ñ^âå0ôøŠ{˜¹A'w^¶NÿÿnFoº÷¦ZXÌ[^ÿæck»ïš~ûÓg~}Äôºœá¼8ÀJ}ÔÅÅ}G²Ïûî;ó.žX/\6q@nîo}n<_nñÛ±ßnS­™ây+دæ¼gÊÂù(X6ée,g´ì•ý·ì½(d9·ÓÞAø˜_zÍŸÙ¾ÛÇ£ð#*?4FÊ'ö7Eå@ÔÂÆïcnPU¿ïh|~¿ÖÍŒuo»“À+Ù&h|Î߯ÂiÏ•ãSëí‡Ë­uhýs}O5ižËRÿ#ÖªÌ�®‹2 X½&ìg—ù “ÀC|¥Æ_Ý +™Àã…«¸¦+f¾å‡¯˜¤_3s˜teÍþ³“é ]º‚ûÔýßUh2“… 7oK J9UIÿ]©p"º{ŒûÛWœfÎßwI…nzþÊ(SŸW–K–® ]wµ_Ó k)ÀÒsZ>»©ßV`£Ö/'¡S>pX¸¼\e<½ž¦B‹Âu™ß&cSï•üv¸ÄïÈòá@6ÔŠ¿+xì÷l}€û{™ÀcÎ{²–™)X6þ.IÉ~Z´ìýþ­¯ÜÍó¢}Þ͇Zvôpæåç³`ÿ %ajôË”OÕ¤åV–úÁ°Ven|�p]”IÀê5a?»ÌoP%fx„’«ì;ñ˜ a…ârGQãªG<q%ëÿˆ>#Û#ÍÏ[®B[¤°’<©<e®@'΂ßšÌßßÅß¿â+ÉenŸWþ¬L7׊&ª Ï_ö™ ³__ó–×&%~GÖ¼í"?_ç6ìq÷-»Ô{â×§÷+oö{²–‚e“_²hÙGÏÏiõ²pŸW‹ݦ8ü;jò¡=ð]S"ùù,þ}ÉãÑë~ˆ·)`yen|�p]”IÀê5a?»ÌoP%&xHÒ>¬ˆ´NÕ <fW¯xLº/ܲÞéï­·ÿJªB7¯B©ïtÇÜJàõ•Z1Zò³^ ~mw¦~Ó¤ÂD®‚<=°éD¦Âœ¬¯9ËkcÇüß‘5o»ðóå[‰ìFû ?°¾æ/õžøõéýjñ{²–™)X6ùe K>,²Ä>ýÆÏì8“#,o’ÛcççÓ}^nf'ðúÁ°VM8éДIÀê5a?»ÌoP%f*ðÔ@•“ ʺ׌½uÛ‚³ó¤KKvü5å?²{I—–\…¶ˆû®l%9–´òØÛ³W2áJQ…2ÛÌ>频ŒCŸ=°;÷êÛ¥EÛÈ¢�Àu…ˆ*½¾[Dº›‹hœŽ£O¢uœ©0ë©EËkÇ¿#ËwáJwµðÛ…›¯ôrŠžwó—Ú–âyKíWK¼'k‰ùˆ+X6ùe ‹–}Ò¥%\N݇n–Óß.Ñ¥%çâÔ 4<«ñ¿%7.Ÿº´$êÃZ•¹ñÀuQ&«×„ýlùßàúý'Ý6²’þñIÅuóH®Äž§îà I¿›®xùJI:@ðKÿÝÉkòƒ–úABSó}×dНÆ_¾…‡¾ûôé;<òW•Å·òH_m%Ù옺ï_ Â9Ø3™¢Àfr§™ëÐç•eÙÏŠ+ºêvг¾šüÝ@’Á=ý¹ßžTP'ÛN2>Æ‚å•ä2zÃôg®Ë¢ÊÁ{%¿.üy“–.~ Ìd€Q÷^…g?Ñ¿ÑvªíÆß©(\vÁÖí—,ãýÞWö4xÇŽ‚_§Zš¿'k‰ùˆ–cÁ²™Zá§-\ö –ÓÂ}^ûk7µ~Ü~—¼~z>“ߓܭÆ”z3,wž…¯ð¡HºÕPѶP=Zve©ÿ kUæÆ�×E™¬^ö³¥~ƒ¯(†¯§ôUQÏU¢ÒWdSc|Ä¡t÷L·+=~سNþ3¿èç¾çM ÷£Ê\æ1]} +ÑýèV”îñ©[º¦+~z*áº-í÷î*®ÿ¼üÿ¼‚ÁYSâÊ^¾‚äÖÏ­ó–ûý ?Üm8ù[‰Ný†ëÑg–eÙÏŠ»´œÙh¤–½–]þN-¹�LáU0—£ÜãᔬŸËëy�L^¿Ó¾oƒÂÏȯËÿè‚)ÿ:m×_çs½ìv˜´F˜õ;ô\‘°â¾=ëÞ]{ܵ]½ïø3^ü_É<ÆÛÌgÖÿ0n­´"Iº‘ù€oò»f¾gÊ¢ù˜^6ow;Ùå.ƒ/¾X¼ìã4xºýáy¾l)Øçwß¶@·¡=þm²MM¶'.ú×Oʦìm©õ›dߒÿGÁçç3?§j4e©ÿ kUæÆ�×E™¬^ö3ÊŠëpW²SW»cE]ZÖ¯ÔŠÛ P ¥î×î_`)�T e°zMØÏ(+®!»$=X©Gà`5JݯݿÀR8�¨Ê$`õš°ŸQV\R~,‰½#亹ŽC²e®[¶ JݯݿÀR8�¨Ê$`õš°ŸQV\Vj ÒhLÜ�£îŽZ®ñ´¹;>”¹nÙN€j(u¿vÿKá@� J(“€ÕkÂ~FYÑ\¥VŒØN€J(u¿vÿKá@� J(“€ÕkÂ~FYÑ\¥VŒØN€J(u¿vÿKá@� J(“€ÕkÂ~FYÑ\¥VŒØN€J(u¿vÿKá@� J(“€ÕkÂ~FYÑ\¥VŒØN€J(u¿vÿKá@� J(“€ÕkÂ~FYÑ\¥VŒØN€J(u¿vÿKá@� J(“€ÕkÂ~v¥ßp1´GÝ7í xê(Û oYûè±6wW×Ú+µbTÉí䲞Zpð¦ŒŒÍ uUê~íþ–Ò„“�ÍA™¬^ö³Kÿ†‹'ÖkïYûÏïZûü­Wo„•Úo§+‘S·hýGöñRÏžv;ÚýξµÚ÷ìô‚êéUh9–åÒŸå·“$´ÛÅð¡uÛ7Ü:¾aín`ƒ³¯ìã{¿· #ڻI¯ÿ­=¤ÂŠ©í+7µÚÖ=þ$uë`ÍC`½—­Ý{bîQ N´m—¥þG0¬U™�\e°zMØÏ.õÆßZpð²íuO\eñ¹N>°vKÌ›Ö<‹Ízfƒîkî=?ذ÷sÛ;|ä*ÁjÉñføÞ]kûV�㑵íFw`/ÆgÖ?¼™z=.£ÔŠÑµ¶“ð¡³ÀZ­Ôº<·á££hÛÙÕºŽ^¾nسýð»Òi›]·¥?C´MÝ ß ·¿I„1 ,è¶­~ÖÎξöÏ’ d<zd‡{73uQê~íþ–Ò„“�ÍA™¬^ö³åÃØÎû‡ÖjZÿ<]M¼°Aw/úœÖm ÎüÕtO¡ÆŸ¹@#|íÑQêý‡¼Ø{ï¹ ïyß:­—­Óÿ.z Ë+sû¼Þvâ·‘7-%1Fhlƒ#»™7\«LàáÄAE+üœt‹"¿ eØsõïÚÞÔ¶9k[ª¯ÔýÚý ,¥Ì�®‹2 X½&ìgKÿ†ñ©õö[QUf_³vçv\±Ü»ký¤ ¤¼GÆwÖï¼l;û=R7½”R+F×ÚN|àQÐõ)|}ܥřx(¨P@>¬˜xˆZÝŒæ¿ÕéÛ¹{4ÒZ¶ß;ÍÎPq¥î×î_`)en|�p]”IÀê5a?[ö7Ä] ŠZZ¨2Û+›gvÚ;ˆºdÇݸnàá®ÆïܲÞð÷–QjÅèZÛI*¨ðcwdB±”¹GèÅÀº»úp, <ô–®íê»w»6H>” õTê~íþ–Ò„“�ÍA™¬^ö³å~ƒ¯T…>ð+›Ñ˜ûáëÒã,\7ððVºµ\V©£ko'éñ^|ðñІùiÉà¦~›YxøÏÌv©q­NèÖ‚š)u¿vÿK)sã€ë¢LV¯ ûÙr¿ÁwIÈÁ ©À#úSwçÐ8 mt'Œëq…•î—UjÅèÚÛI,;˜h8µÚÙÛÄ®-ð˜Î�ÕUê~íþ–RæÆ�×E™¬^ö³å~Ã%PvpÉÿ¯•xÌ«£H©£ko'YãщÝë¨5BÔ€¢‹Öui]Z–J€ *u¿vÿK)sã€ë¢LV¯ ûÙr¿árG4fÃé=×}aÏÚí›´ðØ€R+F×ÚNÂÇ3wçñü€¢©îJsÔX {G6ˆºÃ, .üw´2·É¼¨—R÷k÷/°”&œô�hÊ$`õš°Ÿ-÷æU‹IT9+ÐX.ð˜=`*æ)µbt­íDÛÈkÓwh ÿФ].ð(ï¶´òƒ {·ÃµSê~íþ–Ò„“�ÍA™¬^ö³eÃÌÐaü­/Ïh}ñÜ΂Ûa…vV á*s[op—–«*µbt­íÄ·üØ·N¯ï*ÛÅð¡uÛ72wõ‰ßŸ <Æ#]×bÈ ãùm(xdÆ iXï4¹!­Ã]ZPO¥î×î_`)M8éДIÀê5a?[ú7ŒO­·ß²V§o¾ê˜Œà§Ì žºÜš<Ü•üä½ÑTÔe†ŠéUi™–eéÏ*ØN’.-ÏÎRÁ…¦ôZü`¤éí!=), ¬?L…ÛPjÚëX/ølúN0rÞ·N‹nR¨mÛe©ÿ kUæÆ�×E™¬^ö³åƒki±î.�QÅ”î,WQjŨêÛÉ¥Ôab¥î×î_`)M8éДIÀê5a?»ÔopÝWöÙh-õÄxÀÉÖA`gÔK/­ÔŠQ¥·“Kº8±îÞËcŠ�ÕWê~íþ–Ò„“�ÍA™¬^ö³Kÿ†‹'Ök¯¡2;ÙÉQÛvSã;àrJ­Uu;¹¤ñè±µ÷rã€�õQê~íþ–Ò„“�ÍA™¬^ö³+ý†(ŒxÓæÝJöZtç·Rã;à*ÊÜ>«¹\ÖS Þ´î£!aj«ÔýÚý ,¥Ì�®‹2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìg”ÍUjňí¨„R÷k÷/°�ª„2 X½&ìgú LÍÊRôÙLLL›™Ê™".¥Ì�®‹2 X=ö³úxüøqRYxÿý÷Ý£@óAlëé‰íyÁPh8FI~RARô¸°�°n*“�¬ûY=¤Ã?QùCSý§ÿôŸì¿ûïþ»©mþË/¿t¯�bÁPèû￟*@æM =�`UT&)ˆÍO*ŠÿÃþàÞ àº´Ÿ¡ÚŠÂ?z It> mZÛö/ùË̶þ'ò'îUÀG0Ìä “E“ —ÿú_ÿ«{�”O!FQù3kâ(ö)T×¼°ÃO”‰¨»tСõ·êª‡°cŽ`˜iÙV´î�°ù+9ó&•_�Ê¡} Õ´LØá'*ƒ¨#…ªk(ØðAGšžóÛ8ÝYP„#æòIꬉÖ�ÖeÙVœÔåÒ~…jRe¯hÒ:+zœ0u±(èð|+M@Ž`˜kQ+D�°.Ë´òà„(—ö+Ô ë u•:tÌ×ÅŽEôz.v`JC,4«•­;�¬Û¢Vœð�åÓ¾…za¡Ž>ýôÓKi VŽY( ±Ð¬V´î�° óZyк(Ÿö-Ô ë u¢±h^}õÕ+À"”†XJ¾•­;�lʬV´î�VCûê…u†:ðA‡&ŪPb)ùV´î�°IE­<hݬ†ö/Ô ë U¦pà =€U¢4ÄÒ|+Zw�Ø´|+Zw�«Cå¹~Xg¨"»uÁ‚ ëDiˆ¥ùV´î�PéV´î�V‡Êsý°ÎP%>èÐES‚¬¥!.Ea­;�ToåAë`µ¨<×ë U:¨C`S( �µ¥)Zw�«Eå¹~XgØ$—u1‚ U@i��€™¨<×ë ›@Ð*¢4��ÀLTžë‡u†uòA‡¶;ýKËKT ¥!���f¢ò\?¬3¬ƒZpüæ7¿!è@¥Q��`&*ÏõÃ:Ã*)èP—u]!è@ÕQ��`&*ÏõÃ:Ã*¤ƒ þ‡?üÁ=T¥!���f¢ò\?¬3”-tèv³@]P��`&*ÏõÃ:CY?~l¯¾ú*Aj‹Ò���3Qy®Ö®Ëo¼ñAjÒ���3Qy®Ö®Êšô î( ��0•çúaá²ÔŠCÝV:Ð4”†���˜‰Êsý°Î°,‚4Ýö”†Cëw­ÝÚ³îàÂ=Xgc»ÙÞÎ ;¾ ÿª°‹ëuØY¥g��äQy®ÖñA‡î¼¢;°è–³@U¾4|1èÚnXh«àN¦v`#÷|ø ofžßíÂGÓ¾³~çe÷|Q`íÔüOM­¶u?±Áè¹{ƒx�õî·ÃÏì¸Û¶Ön×Ù‚ª¦êRÕ¨Ì*Fç"¨Öfùþûï :°UêQ^<±^ûFXx·l¯{bÓqÅsõï†'²ûÖ N ž— t÷ÂϸLàñÌï}¼¦JÉ6ìÝšš¿ñh`*GQø±o‡ý3NÔ (%|=ï[§åž¯\à1=ÿù©ÕîÚñƒ2…ÐtÚÿQ/¬3ä)èxÿý÷ :°ujSއ=Û× w§oçqX8´ÝÂç¼Ëã³Àn¬«Râ+Eóç°ÒѺmÁYº¥€µ)#|}1°în¸/_*ðXcø:>µÞ~+7áïÖ~{8ï{w­Ÿiq É¨<×ë ž:´Mè_‚l›ú”†ão-8O¶ +üê²rÓ:ýïÜßE.xøï[ÛUØy‡„žîͨ°*}�¬ÃµÃ×+ë _ŸZÐÞ-ž¿ñ™õ÷ãrˆ.jÀÖ ò\?¬3(ØH >€mT£Ò0®H´vZ¶ß;Í4GŽ* {G6¸È<jÇ©+’·­ý?(\ íQÒ]$œZm;:ÙØ‡þqMQÓõÜg†S«ý”r¥sQà¡z’kR¯ŠÈó‘ |h½ÖžÆ/§{bÃà0n²þÝ{b™ß›ë£÷Þë¸×‡Ó^Çî ´,ügî[÷dh'GÅïÛ‘¿òÝùÐŽ»ïÙƒ‘jKº2ü;ëuÂJR¦ùîŠqô¾“qJÔ•çA/œŸð·ž<õŸ­ùâÊ26ìºáëeµ‡¯sqcòìì¼¼ dÐ:þ¢^XgÛKA‡º¬¨ë AP«À#ä›Z·­î«Úûâç¹dl§÷¬ÝrýäoU¬} à2uAÉxôÈuŸœä»!é“þ¨ÿ½oÊ>éf2=HêU,<¸ÁMÿ‘ýÅ_ü£è`¶³³ë\ÿû½C †ç“ÊRX9Ùï|‡3¾Y¾_ŽÑknMšà'WqoÚ/ù?|f~=hY¾’jâ¯Ö(o[ À#= kxø¾ô>4 —åÉñú‰oâ Wô>! µŽæ^YÖå²áë¹ ¹ò'Üžßz+þR¶Ì Rg†¯éÏÔ–uGsck\Õ‚À×á÷Fe_&hÃ×$°Üy3,3žX ÀSóÙ:°Þé³\ 1Ç£»ç_Ÿ B— ASe‰ºõ>¶n÷“¸Ü)˜Ïˆt/½Ç½ïÞI¼,— |¦Ó¾zamŸtÐñ«_ýŠ pjVú=SƒÎEWn½áÑ+"¾’°ß³arFšïÒâä5îï%¤’ã \àV"F/\‹xˆ¯ˆ¥+ú\¿,âÏñAB|²Ÿžô[ŸØÙ‚÷ÇW¬U1éY_Hž¿¢í˜dÖÏóð{n§*‘•®üç�›²tøzn§½kE}íîoí_~Û^¤æË"¿Ÿß ÷ÉgáŸ> œSv\Ê¢À#®¶ïÛ¿K‚V_î¸÷»2$ ,Õ-G¡Â+¯Yç=…3“ Ú‡˜Ñkö]°ª¿}½ÿ?Û/¶D-K·\DLJ΃°¼HÂéòÑuô¡ÉxäBð;?±÷7þ=á43ðšOû�ê…u¶=ÒA‡î¾¢Û͘¨_ièB†¸eÆ‹øÄ?Sq¹` Däï܆ý îr¡“Úä$¿ ðð.†ÖtÕ/<éúž”¢ÛÍά¬/<2]ZÂ/œ<Š[xü??óä}q`’_$¾ªú»ì-tóAEáú ù彎ÀU¶\øWòs-Aüvì·í…Aê¬Àã–û.ÿ÷&x_œ.w\€œ”²hŸöË4ü{jÒo.,âùPÔ‘¼ü|ÆIný$­jôK”@ói?D½°Î¶ÃãÇíÕW_%è�æ¨aiè+×ê?þuxR]Ð_~©ÀCÍÈëìíšÆœúëg*ùJ†œ»q1tBXÿëGÑÉözÿ»ý•àé“w¹rà1³?þ2‡(8ºŸj–ŸºÊ:#ð˜Z¨“…áëŒ}:xx3ƒÔ¢²HT†}fAÔu$ü¼™eG* H¦l¹‘µ(ððûÿd§Ë¢2bÑ>??»ËÚeB2¾HøØ^Çz¹[èfçsV™ë×ëþ®à5E¿ h6íS¨ÖY³t�Ë«ei˜é‚QÔ2ÁWDÒ•ß ÙŸ¸º×LN®ó•Šüßþ*j*p'Û3K™uò-“fîéË <R]ZZmë>†ÏÆÆgìν%º´dø )\Ö¾’¯”$M³ƒ>f¯¶x ê…¯3öi¿'Ûö¢ 5_é¡Óx\ UêƒÏìëþ;á~_TvˆŸð;“)[nd-<’Paj–xÌnm¶d™ àè85&GjL•âÀ#¿,Òx�¢} õÂ:k&thÒÿ,VÏÒ05_ñÕÀTkˆ¨¯÷“À šÂ Jィ5A|kÅô aâëöÿÎÔÞ²ÞiX¹8|Ï‚ÞAø·ož4°ýk Ž>¸fnßœ;[iÑ@}¿³J2@ôŒ `Òͱ‹óŸ›nÁá››»&ñE#Fß§@"ü‹Þ¯ŠÈáÇ“pÉUˆ²ýêÃÏK¨I€3œÑCà+'Eýä‹‚,`ƒæ‡¯Eûcê=QÅ}™ 5x¸ý/õ}qE~VàqYs·¥-'ð˜tiiµìQ2Æ÷9²{KtiÉòAÒd¾òóé×Eö»~>èÒxÚ/Q/¬³fQ+‚àjjZTò4º~r›U @wlÁ;{á‰t׎ûjÅ<PWVï}fýu’ëïv0P/ üÝMôݶõä‘}UÊÝílÝW_ZQ×—ôä®âNú¤O_±Ýíöí‹è$|Þc:Ñÿ<®4d Oþó·ènK;´“…ïWEàk{Ð}ÏŽ“«ªá2ì>Œç7ÿÛ’ÊÊs >NšïÇï â±?|%&y_X±ÜŸñ9À- _“Öa£» ¥ƒhj½e½¿Z¤žçÂ×ÿ‡µ÷þ(|¯k!•ì»áþÙû­u?›žËðacfÓþ:¹t«}ÏN“ò¨(ØÉ‡¢¡%BÌd`S¿|Ü/–AGì0�Çwƒòlj‚ùLÖ‡/÷Ç¢Rw]×Á%c` h?D½°ÎšAA‡º­t�WGi�W¶8|ÍÞfußÛ;» øîÇw5Z¤æÃ×ÿ+u›mµbûØNúÄ-|‹©+)êú’žô]ïhÒí­0|}»kogË=ë~Ñ_bF-&ž§ZÛé±ø÷ ž>^.}ú‰u»¿µã¤Uœï¦W»4™pܽ'ÐØ¾%‡ϬÀ·ŒV5@µi{G½°ÎêͺóŠîÀàê( ��0•çúaÕÓþð‡LС[θJC���ÌDå¹~Xgõòý÷ßÛûï¿OЬ�¥!���f¢ò\?¬³zðA‡ÖA°”†���˜‰Êsý°Îª-tè_ý `5( ��0•çúaU“Zp¨%‡º®t�ëAi��€™¨<×ë¬Z:€Í¡4��ÀLTžë‡uV é Cw_Ñíf¬¥!���f¢ò\?¬³ÍûôÓO :€  4��ÀLTžë‡u¶9?¶W_}• ¨JC���ÌDå¹~XgëçƒM_~ù¥{À¦Q��`&*ÏõÃ:[…>èPè Z( ��0•çúa­žº«¨Û APm+) UÈ211•7áꊖ'ÓÕ&l'Ö}ý°ÎVÇ” ¨¾•�ÊÁþt=,? ìKÛ‹u_?¬³ò¥ƒÝjV·œP}+) )dò°?]Ë(ûÒöbÝ×ë¬<ßÿ½½ÿþû@M­¤4¤ÊÃþt=,? ìKÛ‹u_?¬³ë#è�ša%¥!…,Pö§ëaùå`_Ú^¬ûúa]:´ õ¯þP_+) ²zž‰‰©œ óÍ[FùeÉÄÄtõ ÍÅú­ÖÙå©Ço~ó›hÙt�ͱ’ÒpQ!K! ,oÞþ¾´Ë(ûÒöbýÖëly :ÔeE]W:€æYIi¸¨¥–7oa_ZŒå”ƒ}i{±~ë‡u¶X:èÐÝWþð‡?¸g�4ÉJJÃE…,…0°¼yû ûÒb,? ìKÛ‹õ[?¬³ùÒA‡n7  ¹VR.*d)„åÍÛ_Ø—cùå`_Ú^¬ßúa{üø±½úê«ÀYIi¸¨¥–7oa_ZŒå”ƒ}i{±~ë‡u–僎7Þxƒ Ø2+) ²ÂÀòæí/ìK‹±ü€r°/m/Öoý°Îb>èФÿØ>+) ²ÂÀòæí/ìK‹±ü€r°/m/Öoýlû:S+u[!è�°’ÒpQ!˳îÎmÚ^¸µ.[íìdôÜ=W$|}ÿ¾uÛ7l·;°ÑcÏlнi;­ÛœÍ{ï¦m~>çí/ìK‹±ü€r°/m/Öoýlë:#è�·’ÒpQ!˳ΞÛYpÛv;?·Qÿ®íí´l¿wjc÷Ь±÷­®s­wË›·¿°/-Æòk°‹S :ûÑzÜÙ¹aí£Ç6*.ˆbCëw­ÝÚ³îàÂ=vbݽ–µ¢2-~¨’*0ŸìKÛ‹õ[?Û¶Î|С;¯è,ºå,�ÈJJÃE…,Î{1°îî¼€£Ø‹A×vÃõ> <°¬yû ûÒb,¿†kÁÁžßÚx|fýC·¬7üÁ½ ï;ëw^ŽÖùÎÇU°/m/ÖoýlË:ûþûï :�̵’ÒpQ!˳ÆFµwv­<u,‡Àãêæí/ìK‹±üš).SæE.lÐÝ ×{*ðÀÒØ—¶ë·~š¾Ît¼ÿþû�ZIi¸¨åÀY_ãÿ{gð"7’åÿy®«o¾ù”§ºø0}éKòà‹>4Ì!¡ †Ÿ‡6¡À`hÆPÓÐàß‚‚f )~‰Ù¡wMÑyX0¦HvÙL‘0 ‹)Š¡)Lñ~ñ"âI¡P(BY)•3•ß»$¥ŠÐ{ŠøFċŔö!xÜ)1{-¥Aþõ‘O´Ìž¨ò{BÙrÁc`K» Êwûèk™‰ÐÁÏÇÿBè��¤èĦœìJNøfIó“W4îÓälAg‡#bŸfvZÅ ]-~ÒA1ùÚ¼¹4o–s:™ŽiÈ•ãÅ»bÎ÷à1MÏ?–;|F3'�çÍòŒŽò9⎿§¹\÷"£Çu¯º!ÆÒ®¸ZÐéDŽqºFtx¶ÔÇ×I»¾ÿÿÖ^w8¦£¹¹n>?ãùíö|•ÎñÑ™ÿ²ÑžÝ_lµFé™öéwã¯ôÿåüÒséË5-ç?Ò”ŸotL‹E¦òm ï1ÑùÕGZœÚ´©r88uæêóo¿ÏÏwÓßgoBg~¦ÃP^©çÎËFåÑôøMNŒ SM§÷gn™¹yÛ´ÜÂׯ#v }äWZL¿TåÁã.-í.(ßí£oeÆÂ†+t°ð��MèĦœls',½xÒ¨<PþKÕ <§é¾jÜhv©š—3T#xr¦ª³HS×nC‹ŒW7¹Xqïá4~ÁînèêüH7¨ã©»˜söí=ùïå)p£zJ nLG†i—yåÃCšsºäª>ÿtû´›ùí_Ò8;Wy§æ¸Ûàœ"ä"@Y\0#5#<®ÞÑttß ê‡öo~Žj™Ø‹ž*cóŠ n •ÓðpÿwôB‹@—t>}¬ö= ñìêf|Î×´oóF‹y տПCù§G©H^Ù ª6ÿÕƒÓÕü¥º??_ ŒžK¿—çËÍR„4þ¦ÒӤܛÃש#v ÚÊ¿Fâ¿?µâk7¢ž±¶“û&ž…>¿Ìúiw®Á¶Ð¢p"*(–|…lu†÷Lç4Öÿ—óÝ2Éh©"‚å}åçÞ9+R©¿§ïèÊsK"&ÿ6(2÷Ù›üLÎ^˹ð%œG¯èxò‚N*‚°M§†÷gN™•ó¶Y¹7‡[GìØ~P¾ÛG_ÊŒ…ž²ÂSW t��nC'Þ0ådWsÂ"¸Z饳P+xä4õßîè VçöÚÆ¬ì.SUu…Rz¹éoMç7H»¤ÍŠ(ùßyºn“vUѵújÚÃGÍùÞ1-šp¹xÞ´à!¯rU§´øù °åVªÐÛÆMñ;/ "$”žÑn:OSyeÓÁ#;f õ—ŸNy/ÊÏ—‹PúžMʽ9ü,uÄŽC;ùçŠ_ܨ ‰gŠ˜øÚ‰¨Çöš<ZH{Ý5ZŽ+DE𨓤Šùßü Ö6Ý2Ñþ N¨_ø@•Ã+#‰+"fLdþßÊ^|‰”3ûú‡6ÿ¡Ÿ›ç«¤“QÏ3?Te$ù¢ÊL„-hüg³r_¾V±c`{øÓŸþdß™f–ýÜ\¸|¶Wèøýï¡�pk:ñ†)'»š^¡ñÈKfÜ3gÀÑÆuR40ÇoS),X¥á{I‹YfzðTÚ‹tÝ&íö¾G„ÒÉÈþBàH ´) žh£I ú¸4B¤òJ êoÝ(xE'Ò“¬ñÓ~¾|¿>ï×@~Ö•{š˜½¬fK»I{ù—z—)ñµQÏþ(J i¿ḉ È{Ø“ˆ¥<’ß9¶Yñ;²”¶ëçÒ¾<)2§ÊY§ƒ}ДfV*á§SÞ‹Òóš)Çå¾ü<uÄŽíB¦ ¤6ˆ› —Ñ6â ¼ú /7 ��ëЉ7L9ÙÕœpÑàÒ;Þ§ñ4£ÙûS]¡+*–¡Êqª"hßb BA“´«·Ú¾§ÛÙlN3>ž§ë6i—ûÆ„�—ª°a¨îßLÁ#Ö[Ù¤ÂÏeð†ŽóaêÒËÍøé´×+•ãî‡à±I´—MÞ%Køzëw¼©-×ÑBÚoå‹ÌñæÂqàz»?¿w{ äkñ»˜àáå¿Ù“°ikó±ïEªœeZ¡:G™þXžöã§3ø| »ßÍÿFåÞ€öl l:)ÑbÇæÃå´mð{õÛßþB� U:ñ†)'»šNU4¯moœÓ °ºõ*êEÏä`tH§y÷ ÒQ¥g2D*íêÆ¶µhØãyºn“vÕ„—ÞÆÁˆ&§ÅT›‹úæÈöà:äÜKñHª½­Õ†€ô»=´E^FË$TO5òÞïû4šüd‡ü+¸w÷›(=¥ÅãêÜÆ&tùé”gñ¦”z[”û Äìe5[ÚMÚË¿&ïRB|½Í;n¯7Ú¬…´ßÊÙã…c{~ÅNüý ì)(Èï:<bÂTªœ5<Òﵓ㑺ßGsÈO§½^é]bJû›”{sà‹v‹:ÑbÇvÀeµ-@è��tI'Þ0ådWsÂÒÀt+’n£úÊV4¥ª*Œøoôe‡/UEûïÕF¸4PÝŠ¸ 7·C„óaÔö#/›ˆr¼v•–dÚUZ¤1£¯Á# $ÀÞcšf/i2{«´sνôžRvV—Ï7¿O£Cž‹¯vé¹ö{Îhêí {¯àL±óßó9û6 ¦áFügPTç›ûi!Üöùò;ɼâ†Ì¤Hƒô²æçWÓ™?O¾šŽÄ;ÆIƒr_~ž:bÇ€¡½üK5åÝŒˆ¯¡Æfª!œõÌŸqZHû­Bìl&7yGÁ#àOмl[ðp¦´Ô‰ÌAFþ©´Jºütæ¾­ìÓM:0¥´ƒ/z@ìØ¶Á&Eèà ï� +:ñ†)'ÛÜ K…R>¶\1ü«©ÀåûTtöoù* :*þÙ)½ÒAÕ ý9£o¹rçžÿvf*|ù>Ua¿6½bî¾åµ#@ð>ž_ÝtYÚ†iŸ_Ø�…ü÷>ÞÐì•©ðþðŒF¿‘síùÓ®j·¥ÕÔæ®tÂ_a€+îÙÜ® `+ÎrLonåß庼¢Äðý”=£=¾ÞñÕ`ûŸJ><ŸŒUÅ_þV›ª ¿}Ëgßè5Íu£ÃÝÇ•vGäÒû9Ïhym+öùù¼Ú{N/C{üC^ÎEÃÌæâyË«Nðo&êÚœ·MË=”oaø7uÄŽCkù×H<Kˆ¯NÛõòãžHàÒFÚ;Ž}Ò‚"ÓD@”)"°ó×<«Iƒw*ˆŸÿL3!2§ËYù›ƒïó÷ÂoçWÒY–ÍWÓáZVjP>«ÀÏSGìØnDô@ƒt»Ød›äQ:��wE'Þ0ådQ1 91{-¥i%ÿ¤W\o¶x6¡ùÇb f_|ý÷#úwþÚ¢žmøFÒÞ¥p¢^PTÈ” wsG0¸”D\u߃cʾêëóªLþµöÆ4yî –<"cFo“"¦¥Q#2_ë‘r®Úå¼7y­—¡=>žØrvFôTÒ)Ïë‰Ëú7™ÉÛ¦åÊ·ø7uÄŽ»'/clض|�€uéÄ“¤�͉٠l) ò€v€-m(Ðð�Ú O’rPp`�4'f/°¥4È?�Ú¶´= <@À{ �hƒN<IÊAÁМ˜½À–Ò ÿ�hØÒö€ò�}�ï1�  :ñ$)@sbö[Jƒü `KÛÊô¼Ç�€6èÄ“¤�͉٠l) ò€v€-m(Ðð�Ú O’rPp`�4'f/°¥4È?�Ú¶´= <@À{ �hƒN<IÊAÁМ˜½À–Ò ÿ�hØÒö€ò�}�ï1�  :ñ$)Õª»YÒüä‡÷i”}°;{ÄÕM†<ÎèâÆîÛ®i9ÿ‘¦ã}º7Êhi÷‚ö‰Ù *i�´li{@y€>€÷�Ðx’”ƒjÏ}¢eöD_ïÞ½½Í<.g4 hzN7V¬¸·?¥ÅEF#Κm0¢Éñ_h¾¼¶²´!x|šÓdÏ¿çÊ–Ÿì Š¥—¾½ ÍÃÜóK‚Ç ]-~¢Éè¾96< lqiE¸ZÐédD}Í}gçteñ5/gêØ—4]ü“®æ‡4¼góØžÑg8눆»Ê¿›åœN¦cõnz¶Õ ”]k»»O³¿m–Ýõ]ôÞ à‹¶”èx�mЉ'I9¨¶اù„ö6EðÐB€mŒ‹(‹¿Òbú¥zþ!MæNs^5”2§±0»è AqIçÓÇæÃCš_Uïp³<¥ƒá Ç-Ç+ˆâ7=¨†Çô]É=O)»ð„—›¿Qöø> FGt~õ‰®Îh¤®Q4¬DØbÁã*¹ö&su¤ÿÄì•4w“(íéëUÄÄÏBHøŽ.r‘8¼ F:>™Ó²äÚ<Œ¯öîYL]Ûlq;‰Þ—´8=T¾„ úµ”`ûšûæ#Í'ÔyœÇ¿Úãý†ó¤ŽØ1p÷ <@À{ �hƒN<IÊAµíÀ6JðÐ#<ÐxöUw>§éþÀ©ÐKå¼,x®i9{¦ª’n‹¤gp@³Ë@ÅŸÓ¾Ws,DEðpzG~ÏÁx¦š!܆™4¬0”§Óžcÿ¾YLiSÊûˆÙ *iî.ÿ®Tx¨®¹ ‚GB$_PÉÅÓÔ2§±ÿŒfþˆ³6¸zGS} 'gÎH.A|¡?Ò«žê7àš.²§Êg<¦é¹ò<öž©‘riÁÖ [ÚljÈòçýäîl ¬ Êô¼Ç�€6èÄ“¤TÛl£ÝØ·`#�=”1Áƒ‘Ã{`l# ØKkD…½Uîë Zìñ{d}ñÂÇŠ$Þ#jXáHþ–sô}ÐÈ`PHswù·I‚GJ$´õÐÔµ› šìë¼é*vIOŸ[ÝU¾îÔB³§âSª4lÍ9æo±×Ç)Laà‹¶”èx�mЉ'I9¨Õ÷<~Ocއ¡~ëÇx¨ îPfÞîÓèðçbˆöÍ’Îí’ᘦÇ/hrb9fzÿR�nH|m+À\!~âT°S‚‡<‹º·nˆTƒ–â,ÞQÆÇø|Ý“ùÑŽ衵¢D©RÏèŠý*]íE)®ßcD‡gËB(ñ°ð”xæÀ´”‹'ü·œÃi}ôMó‘([ç}±cÀpwù·I‚‡2“¨H<‰?ÖÀNc fcQáÑJ÷-û5æùœŠxáÑH°5›sì}êò°‡Àm(Ðð�Ú O’rP«90ohr> ¢¨ˆ‡+»Lã=ﭔʯ=žÇ±à¹é/iìþ6xŒ/ÕDðˆ‘<¤¡¯M¿¼öƒÊjÞWÌI—tÝ{ø_°°£Ò­ã`„zP¥W²ÜÑ£’b{;m^˜øÞø’X!Ïæ7êö[ìóVÒY·‰ÙËj¶´›´š óˆGk—¥!Á#.¾Þ,¦C™Þ1~EÇ“tb=ÖÄEE„à‘?‹�A×_ÅOWƒk_TŠ3äÅÕPÛ`ô’Μ땿uÂSü™› ¶ü÷×E¨´>Ú!Åy_Gì¸{P¶®ØÕap'à=�´A'ž$å Vr`ºWnÏ©så7Sïù´Œ°à!1!äo©°ÚÊ0Þ˜-Ô_.±cm°¢àÁ•õº8¥Ê| "_7rBa†v»%®|á5<üáÝöï¤àá?[3Á£Ü«ª€à‘³TÒ´–¥àºÊ(dDÞûï7´Å÷Ô‰¯lS8l‡ÏíocÇøR늯)ÁCì–íû5ý"ÿÏýl â«qQžîÆ‚ìWe_d§§˜¼(b¹>£ü °i«L£«ÛÏÔù©„ÿÚ1Z³%Ð9·.ù®kÛ® Rœ×SdóÅÅM`]ÁÃõq¡í>&?ÐÉÜõú(„ç"m:ðôì=-²ï6°\VƒŸ��Ö¥O’rP+90ýaõ{ÝÊ„{æXyCYþ!F†Ú¯Wà}¦ç´ø`ÅŽµA(P`žEÝ_"á"Ô{h¼DB4± 1Ý ¨[ià’³ÌL«qÓÅx÷hÖCêQ—Î:!d‰Ù *iÚÊ?#ºv¢l#; a^¡®<jÄWý™ÒÌ_º9v¬>£„+xÔÙ·ø‘Ûú"mæ4ª´ˆôUÙYÁ#ASO‚‚GåÙìþ¨àáû).ðEÛÃzåqM˳—vdš­'T0%áÀÃýA:ˆJuñ–Mlþ(?}pê­jƒë™G4­©6§YàÈòº*O…–àÓ›(D­ü �  :ñ$)µ’“žþHOf¥"~un†WóHì ½Ÿ}«Ž»Y#†çñ)Ô+ÿhÇŽ­KJð°=î=+…6BØŒOéƒj„Ur>ðH^¦öe³9Íø¾±{ø Mo°‘ÁØF“SÄ”)LÌ^PHÓNþ‰íÆ*!ÛdŒO©Š¯bï¼oŸÆÓižOÓˆkƒ”à!ÏRTô«‚G ¾ÈŠfêÜ'#ùñ…„«Í2žVcb9Õ uåæêó1)Ÿ½[Äì%v Ü=ë—Gá£$Ø6Šé]½%Òù’Oõ­ Bäxiëø§WW7Öâ±Ðß^àW��mЉ'I9¨•˜Tˆ½¹ïú£qø].WTmÚi`›ã5VGB ™Ø±[«<j}©rщà¡áä|¿°`ó½†nï½G@¼H Tîr/8ã Ümbö‚Ê@švòOl7V± ØfR|åT¯ønojìØº$<hiqÏN\Øaô^ùP°R;’F ?ÍÞŸêëÕ !Ÿ¢°é¨õE·lw‹vl Üë—¿û_ÐhüÔÔK*qx x°¯ÉG7ò²RÞšj^«™Ë°<¤C��°EAKùƒRÚ¤á!•[©¨Ú ·ˆùJ#ª2<ý'§tžMœ„­pëÕµú¶Õ+æ§ß~Þ¼ á.ìxf&#Jòà¬|üXî‡.4¾ò;'_CêÒÈî¡– *}ÙKšp£$p“G÷U^¿SÕ¥K:Ÿ>¦A©wHòÔÙWŠðÉÎù_¡Ç¤çÄìe5[ÚMÚÉ?ñ3l/åÕŠn.~¤C½’“/�¬"¾Êˆ*eÇa vì¶Dšei»<Ôíìq¾_ÕI¾;¢¬½^½à¡ˆæ>±Qc·lw‹vl Üë—Û÷Hùª óW×Ëãi ÁÃØŸ±ac—"ó>±Kžj!«ÎÓB|Z~ÝN€gšÿÖ[©ïèL/bX¨ºÉìµ9gøŒNù¹ªœû'>ÿŒŽtG–½?TKjz­ø·Ü¯_ÖªÕemÚR+âyä>³¶~W¦.´€UšžÃ[‘·Ê•GÞóï‡ômöh[WÏ09]?_ ��Ö¥O’rP«;0ïÂŽ4›+‡ì:_³íMÎè£ ’g>fßÓÙì¥þ8˜Èþÿ¤åÉ šÿ÷œF‡tªçÉ«ëÕSß…uûÑtÓZÚlpéÛú `ßÎìÇV6õ;«»È>烟c‹peÞŠú÷ü|C³Wf¾½þx«¼(Ý#oà83µßÍ?C@ð`òÑ4êZ-}(ûçI±cÀÐZþÉRªüŽº[þ.ûbdJ|ý#ýñàû¢ÂjGU{T¿­=¶¦/bD$- îÜo¶]·qã ËLKâ«“¯U_$>^Pç[0úŽ²Ã—ê>v*L)mÞê^Wïhªž«”_’§Î¾´`»ÛpÕ;îžõËCõ%ÎEPWˆ`Û,¯XTŽu!>Ã6ŒKõU§ÈÎÕDÐÃýßÑ ÝÈ—º‡ˆ“|Î×´Ÿ 2VÙûÿ/ýQtàkòTà¿Ò¹¶ûߨ}¼õŸ²}£3¢‚fJð?¯Ÿóì3Û‘q•@Õ""¸¢·õ£±ñJ8õÞˆœ 0¡ÍÍ#ök7õ1Gü8;äoTQÎñr}oEosý" ·ñ·mŒJäë�ÀºtâIR  €æÄì¶”¦ÕüózâŠ`qR镊%Wh/íh%[Ѭˆ¯ÿI'“t¬{ÇøUŸüd+õ"Ǥ⮮³²àQ‰Ë§“cö¸‚cõ7{Ï'ô¼T©^G|• tÍ苼ò¬~?ÓÑÙ)½Ò¢ ÷‚~P!_ô–йL…áýåüÓNK\°Ým8OêˆwÏúåáúO±C Ê‚GH¼Röè6ÔS¿Ë§o6žoZDßëOïðG Ù¶®ðj;Z¢~ôV‚‡¤E|[Á#O—ýû¶‚‡¦’J#Ÿ½<2bFy$\!@Ûs“åZ3rÙ %Q1©üœ��°.x’”ƒ‚ 91{-¥Aþа¥íaýòðE9Hçé‘+ ¡ém©ßé㱩hÒ˜÷ÅT_ð°çÕŠ5¤Ê”†…ÓP jy¶²8`¸¬_¯„ˆ(êœÐtdK9ïCy$‰ŸÙïæ¬\k®*ë[�¿�hƒN<IÊAÁМ˜½À–Ò ÿ�hØÒö°~yTÝÏG­ i4zTˆ ±‘+ «NQ‹ Å´™’’OÏ­ T]<dTYdE<)£…§p¬³æ‚‡S>�€þщ'I9(80�š³ØRä�í�[ÚÖ/àÁ8|·±Ü•à‘Oiñ¦¥ñÔ‹o~p¦´¤‰9$S Eôàé¯è¤ô[‡ˆàQ]–ÖÞ#¨Úÿ[Ä‹BÐ±éŽ ù”•—5N9ïÃy”O;)Mé‘)*M§´„àt™[�¿�hƒN<IÊAÁМ˜½À–Ò ÿ�hØÒö°vyèXj¬ÒàvÄ u G:|¢be7Flƒ9À¸ëA¦lHcÙiÜ—6ê8Џû¨|¿Á_FÒW<J+›HLÆER Tý†þW‹ülÿA²oé0ûN & <Ú#°"^'°|Èß)Vþ‹ EPUõ z%þ-‹8{4œœ™gJ–ë[õ,xpü'X6åbG½¬ß��Ö¥O’rPp`�4'f/°¥4È?�Ú¶´=¬S¦ß4hõmÀ+®}Y$«§ðoLúÙº7ÆejGùšoßz÷½¦¹n<»ûx4ˆ¿Ô«]:õZâgÈ&£ ¤ïïwÞÏ£F2šç£=\ükø›JÃ4£Y)¨±º~4P5‹ ~ð×ÄŠxQ½€ŸÇ"›|:1"[y$†oŽœß{âIª\Wê¸.3ulüÔžgž=œ¯«Ái�€uéÄ“¤�͉٠l) ò€v€-m(p7ÔÄðh ¼Ç�€6èÄ“¤�͉٠l) ò€v€-m(p7@ð��l>x’”ƒ‚K!AÁê#p6xøãÉ+ï;CYA—Äì¶”ù@;À–¶”¸$ÈiléàÛƒ÷�Ðx’”ƒêŸ“ [ëŸV¬à TïèŸêmƒÑ„ŽOÜù’L;‚Ge.o¥%ÂD™/އ"‘¸ç;ÁÊ4ÞÜØáe¥¹­5h娬=_Y¾ÌÓÎx¾ð#uí"�Ù®ÀùYGì0 ÿÖÁÚݪK9Þ˜ïDÏ]÷ƒ‚®€-m(Ð=~œ¿^¸>x�mЉ'I9¨þ90¸1~•‹¹x ˪•]Órž9Á3šµà©B kPDÝ.!©öiœŽW)/If0ÑϽ \ÉF’,g?–ÁÃ~Lµà!Ön†Mn21{‰†ÝÊ¿:‘°ðKu[X|mCððì\o~Ÿ.È`îùžà‘¯ŒÀÇšû5- d5£×ôJvÕˆ«3šðR”ÎJ»çw±càîAy€>€÷�Ðx’”ƒêŸ³#<ìÚëf3·Bo+ç¡Hçù²`ñ¥ÑÖ¡ºì›‹Iû^ðX˜ªàá6²ì.+ò„ïéZ›_c®k®!Ã&w¯77f/¨ ¤Ù­üKˆ„ŸM|uW/x¤ÒóÑîw_ØttX.¤8>A/¥yŸ£#:ç%õ=Œ”+­dè¥\f4Ò£öÎéFÿ_\¹¢ßì–-m7(Ðð�Ú O’rP}t`ZT °î t{(#‚#=†Í”F@¸—–E…G+Ý·"xØuÚËÓa¬@aE (µ‚‡¹†¹®•ÐÈ(Ê@šÝÊ¿”Hø9Å×Ô\ïU}‘/x¸S eÚÛ ~H½¦Ñ>Φ[D£Š¿ê?ðEÛÊô¼Ç�€6èÄ“¤Ôæ80¯gÓ[;¼˜#þ˜¦³×4fQ¢®÷“{ý¤ÌâGß8ì„àá ùÖû@`ÐÒ|õÅ;Ê8æ§y ÒvþÑ‹Ÿá§Q¶‡Òîe´P3<¤ù•³·4$œï1¢Ã³eþ;¿Qn$¬¹»Vðàk|]äJë£F¢ô.ƒ:bÇ€a·ò/%~^ñÕL}«TXTØk&L|ÁÃŽ4óžÍŒpkö<µ‚‡9ö­/3÷) ¼»|Ñö€ò�}�ï1�  :ñ$)µLƒîÓÁìBýuM˳—fÈ5 ÿazñTZMü‹¿Òyö´A\Š)Áà :zM¿äsí¥âm/ig´¸ºÉ÷~Aã?Óò¦6^™J"½’¥žNn}å‰ ¶Ñ`E›å)pÈI{¹Q i÷uûÔ €‰ÙKì0lGþµ%¾¦DÂÕÄ×ëJ`PNç6Èð1-™I‹:ßL#ùH‹ÓC;uE=ÃÁ©Äú—Jðaã‹Êq†¼@Èú/é,fOð¨ó#v J¢VðÐùöµÍNë“N¡M‡Ë ŽØ1p÷ <<tGÎz\±íM@ù—ÇOJKÀ€÷�Ðx’”ƒÚ&@)ðÜ5]°¨‘„¡aÝ•AR Wð0•õjÅ[ Òð`×ML¹ç®ü¢{s¿òžÍÞ'ÏûwRððGr@ðh‹˜½ 2fóóoSÅ×ÿCÿ¢ýß×ú‰_¡7 ZøÍ‡û¿£ºÒnìߌ¸ðDYí=_d…Då‰®ì žàaÓV{ëö¨<�³—Ø1p÷ <tðö!þðŒF¿ÿUÛ§äãšl÷i4ùNæub…#—~óšf<Zwò£ª÷°¸Ëâñøœ_��°.x’”ƒÚV×ë';ÝøÁÃnCª‘áMiQ{ªoø6³Šà¡°±6ÌèOf¸{íJ—´˜eÅGºVð¨k$Ô ! xD‰ÙËFØÒ†³ñù·ÑâkÀïˆqí5àOkŃ|´™6Vðñ}‘<òhö¾)Á£Î§CðXø¢íåaÑ1Ì8£ÇA¹.€²^ê‹Òˆ3jKþ…§g“úmy\$8²|Ä^éwŽ5#jYá0x�mЉ'I9¨p`%aÃásù¼ùâãÛ‰à!KLê^×÷(= {4¿¢l6§ß7"xT&›Þµ‚–&f/¨ ¤ÙøüK4ÔïÔå~FÒð;!{ <C½xPÄ2 EöÐóW šéåbÍ(—â^ÚêüH]þ€àgãm ä <ëk*õÂÏ…ƒ¹³ð[L ÔDüH>õ·4jDê[u«DY¡·ä‹ëÒ»»à=�´A'ž$å 6ÂUz FÅ÷{U;ldÔ¬ŒÐà!ϧŽóú¨Ú^Ô¢7ÔÞ7&xT¦Á(lþ6éUM¥y׉ÙËFØÒ†³ñùW6>‡àQ_»<röANk‚•^Ò";ÐS}ÆÓŒfïOõ}kR˜t4˜Z§€à¾h{@y(l=¤*R°ïø‚Fã§zš\5Òj‚‡º‘–¨®eëUy]«v-£|Ö7ß•}q°iwÁ{ �hƒN<IÊAm†+æ„çðD|ÈW-i©‘!âJ©‘Áó:‹ …&àŸ|ÞŠÐâ£g+óîö\´q V°¨ýÈʵ|Ïa?êF|áÑ4ð1M³—4™ý=6Î: zßÎ?µó÷]1É6pjWgˆ¥yljÙËfØÒf³ñù·ÑâkG‚GSH]‡ïWñEâ¡ÂÞ·^ðßt°,-Ðl¼-”‡øÐØÉ¾cD“ù…5ä×ÁV<âõ4ÞXÿvá",Üî*x�mЉ'I9¨Íq`,:|Ÿ•.ͳÌ?^²5ˆEQÁ™ÜvÚÈB}~…êoöžO蹟–·3/}ªÒ?­?È¥}•ÆQ !QB‚ òï÷i|ô†f¯L°ÓÑáúåÏ^Úò¿L…1y9ÒéÂiÂPþÜ&Ÿû çK±cÀ°ùù·Éâk@h ”Ò›Y!ѶL¾ÊTЉoáà—Åê/£ï(;|I³Ë¿D`#èšgødW­r‡”KOlh˜y:Í»|Ñö€òŠ{$‚‡ªkäB¯ƒƒ»¢à‘ûhLÿÕùU<5ªÔyÌVrŠ´}ï1�  :ñ$)@sbö[J³ù·‰â«Tàåœ!=ŸŒËõ½ ½}ëUÞG¯iîß+8]ÍŠ)u{½²‚]’v8¦£³Sz¥GÂŒèðìßéÏ^Úò<¹:§L‚-«s'§î3Õ þ³ª­nÚÏÃùRGì¸{PÑi9Žà¡ÿ_#£T»<4ùh[_‰ 5»Þc�@tâIR  €æÄì¶”ù@;À–¶”Ç ‚‡¢xô¿èb­)-ÿmGŸ¹£Þ|êÒ'‚F»2x�mЉ'I9(80�š³ØRä�í�[ÚP« zô—žgD‹ÑèÑ ‚‡ŒS¿u—ý翃«À0)Á#<¼Ç�€6èÄ“¤�͉٠l) ò€v€-m(˜p<G¸ð§£D಴n€øP°öZÁcµ@Ë}ï1�  :ñ$)@sbö[Jƒü `KÛʃêWiÑbăšàÄ×t‘=¥'xH`æ’àq³¤y6±£B$þ‡ƒ‡h0šP6_Úû¹¢}Á«´¸à=�´A'ž„6lØÚÛêˆ?/±aÃvû­ŽØ1p÷ <vU*7ŽFe…”`pâ4Ÿ|i@@ãÒ¶OãiF3wUº—´˜e4•@Ê©ßéU°°R”Ày��ëòY< �í�[Zä�í�[Ú,PŒ]jzk¦‡l[z»ï1�  >‹' `Këü `K›ÊÃb§¯ Ni¹éÂÕM†¼%³w¼Ç�€6ø,ž €v€-­ò€v€-m(Kc³E›åÏt8Vã€ì8x�mðY< ;0lذµ³ÛÊOlذÝn›ÊÃãfIg‡Oè±»òÊÆð²ÇOhrº€Øá÷�Ðð$�����= EÐð�Ú�ž���� G ¡ú�Þc�@À“�����ô4AÀ{ �hx����€†"èx�m�O����Ð#ÐP}�ï1�  àI�����zŠ à=�´< ����@@Cô¼Ç�€6€'����èh(‚>€÷�Ðð$�����= EÐð�Ú�ž���� G ¡ú�Þc�@À“�����ô4AÀ{ �hx����€†"èx�m�O����Ð#¸¡ˆ [6��Xx���������ô���������è<���������Ð; x��������� w@ð���������@ï€à��������€ÞÁ���������½‚���������z���������ô���������è<���������Ð; x��������� w@ð���������@ï€à��������€ÞÁ���������½‚���������z���������ô ¢ÿå²òÆtä����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7v.png��������������������������������������������0000664�0000000�0000000�00000125374�15030617045�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��k��Ã���‹˜§���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ª‘IDATx^íýÑ‹#W¾àûæa6#è·ì—ÍóRÇÐ×ìf“÷B=”að†15$Š‹JC¶1Ü6=sƒ›ãbìS C¹pž].N÷u%ˆÚ×szg[n×4‰8 cʉ`c|L’ŒMQ$¿¿ˆXR(B!…¤X+–”ßU©¹ú­X¡øåŠX±#�����ï¬���€‡HÖ����ÀC$k����à!’5����ðÉ����xˆd ����<D²����"Y����‘¬���€‡HÖ����ÀC$k����à!’5����ðÉ����xˆd ����<D²����"Y����‘¬���€‡¬$k;;;,3,6+n,ö���øÇZ²†iĤš²8}ùå—ñR¦j¹/u”1å.ë`ß��ðÉš#Ĥ§e’Y•+êXT®l×Á¾ ��à'’5GˆI5$kE¶ë`ß��ðÉš#Ĥš²8-JHª–ûRGSî²öM���?‘¬9BLª!Y«ï=ªÖÁ¾ ��à'’5GˆI5$kõ½GÕ:Ø7��üD²æ1©ÆÄi™dc–Eåʇ:•+Ûu°o��ø‰dÍbR ÉZ‘í:Ø7��üD²æ1©¦,N‹’ªå¾ÔQÆ”»¬ƒ}��ÀO$kŽ“jHÖê{ªu°o��ø‰dÍbR‰Ó2ÉÆ,‹Ê•u,*W¶ë`ß��ðÉš#Ĥš²8-JHª–ûRGSî²öM���?‘¬9BLª!Y«ï=ªÖÁ¾ ��à'’5GˆI5$kõ½GÕ:Ø7��üD²æ1©ÆÄi™dc–Eåʇ:•+Ûu°o��ø‰dÍbR ÉZ‘í:Ø7��üD²æ1©¦,N‹’ªå¾ÔQÆ”»¬ƒ}��ÀO$kŽ“jHÖê{ªu°o��ø‰dÍbR‰Ó2ÉÆ,‹Ê•u,*W¶ë`ß��ðÉš#Ĥš²8-JHª–ûRGSî²öM���?‘¬9BLª!Y«ï=ªÖÁ¾ ��à'’5GˆI5$kõ½GÕ:Ø7��üD²æ1©ÆÄi™dc–Eåʇ:•+Ûu°o��ø‰dÍbR ÉZ‘í:Ø7��üD²æÈUÉp8LÿWMYœf&ÏìîÄ¿³³ós¹üg¹L‹ÆF¡târ³ü+ GÏÓÂK¹>‘°×•ö¸üçÒ >–þðÏÒó}˜U#fÊ’UW¹Ë:Êb�Mš·Y\.�üb¥WÒÙ‹Éʼn¼Ûû£dòŽÙ¯Y ŸûÎ;•“¶²8•'ÏdtrWn¼ _2%Áà‡ôõ¬ä£Ûÿ£\¿ý@~7®ã\†áA”¤µ¤ÝíEÉÙyúŸË°ß“n»%;»É�4${lZö¸6KÕr_ê(cÊë¨#ïƒúh,¯Ò{¬D—F+j.&Ïä,|]®ƒLb6ë5;²¹JÒfâ´ÜÍ… ‚vò>­×%<{–+.£ð¶t§éÏ—r18”ëÑú/Ü ä¬0­qÊÍþ•ÿ¾2Ûôû­[®l×ab�>YtlZtì[·\ùPÇ¢rµn¦œïƒú\¥ý—ýÆ.+ѥъšŠ‰&û­ÙÍ$f³^³E?w~™—´i¹ªrp˜”k²ö²tº¯'—3¶ß–ÿc¦<—¬]žJo¯½×_Ë[Ÿü>y­à'ùä­Û$k�ÐEǦEǾuË•u,*WëÖaÊù>¨ÏUÚÙoì²]­È^Lô¾«Ï$è\‹ßC—V箜Œž“2óúÎήüë_ÿ? ¯uÂÿCFƒßJ¯»';{Ò7—ÉÙÙ±Æuëå‚÷äað®<ßóµØä}ŠË¬¤M_ŸeþÁâB>º}Cnô™œöö¥ÕÑêÜ—Ó 3dö\ÿZn×ñ|È®nCÉeŽeLùìuÎext˜^Ž©Ë5éË(Þ„g“øÞø[ù ØOâ{ç‘0¼'Ýv´nïS µ|ç²ÿÁgòÅï>‘£ –¸¾VGOFr9 å†yMó¦îßKF«|¥¿�¾É›Ì1«êqm–ªå¾ÔQÆ”×QGßõ¹Jû/û]V¢K£Y‹Éy_º­èÄ?8‰R–()è¿.GÍÒ“ø©Q´Ük—ÞìE¿£Û¸³sC‚“?J¸MZûïʽ7^JëV?È øUf‚ŽÅ’:ç/Ù¤MžeþÁÃ$k¿ÓaCéhÒ“$›I²”MÖþ £ðVòÞPFñï'æ¿Ç¼ƒØeÔ Qb¥Ûðò埥ÛЖ`p‘‹ï_Éíÿ1ŠïäóÇKûPNNÊÍt¢”ò~ù—ñkƒ(á¼ÉAæº/÷Ÿä­?¸韛„4¹´³U¬òY”¾?�ø&{l2ǬªÇµYª–ûRGS^Gy|Ôç*í¿ì7vY‰.V¤1©sK“µ½Þitºn~^.Y‹™Y÷z24çÿñz:¢–LÀ1ˬm[uѤMÿeþÁ#“¬Å?~-½x4PG¬¾ŽJ]%k¯Ä—U~ùåéÏI²3ñýÅ[òÉæ÷õòLÝ–Iû%õ÷åMÖÆmñô»×'ÉZ´ÎŸ¼%€™v×y)þù‹ÒíœÈ–—Å�š”=6™cVÕãÚ,UË}©£Œ)¯£Ž<¾ês•ö_ö»¬D—F+²“‹¡ôãKêô^¬5’µ©FGÒnÄõíììI·÷[Œž¥eÕ$¿»xyï½÷äûï¿ÿ¯–;Xè=kIbùâñýë/Dõ]“ýðÏr6¾gÍ$VÑûN%NE‹¶AM¯“@;N ãò™ñÕ$ò_Eëý,3ùIÖ¹ û¡¼õË_Äq™ºlóò›xôSG×>øü ùòó¢$ýé JW˜6ﳘ˜€O›æ×Ôºåʇ:•«uë0å|Ôç*í¿ì7vY‰.Vd/&f zM¦Béÿéh:[+YSš0|œ¹'îFÉôø³%¿S¾˜$ÍÐ×T•ƒÃ¤¼˜¬éèÖï·¥ߟזNçÆ$!JGçO0²xÔx‹Óäž³vWzáùSÿײ»r²¦I_%Þ»ñ}‚ÁÉ·'#k‰ô²Ç–üâ­ÿ(á[-­n?j­Ùæ}s�ðÉ¢cÓ¼ãšZ·\ùPÇ¢rµn¦œïƒú\¥ý—ýÆ.+ѥъìÄÄŒ]—nÿ»ä¥|"¶v²f˜¢5g"ýܳ–|’fhÙ,ó¹Ë ÇLB£ïù³ñ#:Óã°÷Jü^­ýp<uÿô{œËéý÷åÑÙd$Ñ”OÖ1ÒËÍ(WTžLb2ã2È<ÿ¾¹ R'yI’µ¸þÏ?_¾mÛ8ùJM¹ 2Þ†ñèÚKÒ~é¥ñ>`ÊãuJdËËb�MÊ›–=®ÍRµÜ—:ʘò:êÈãû >Wiÿe¿±ËJti´";11'ûz©ß7šºÅ3Æ£I÷%<¼+ýïOâÄLï:}úHOä"MÖ¦^›™¬=•ðàÁä¶‹¨®(Y›7‚“§Ÿ;»”%iFYœæ<¢¤%¸ù—ò‹·Â(yÉ3å^˜JÖ"ã‰HtæÈ@ÂÁh|¯×åh ap oöϦê3ÛPÜŽ(NÝ(iz]‚ÏþQ¾Ïä%a½ßÈaðDΗIÖñŒI"©I²™ís_zá]¹ýA?݆L2šNF2®#]ÊdËËb�MÊ›–=®ÍRµÜ—:ʘò:êÈãû >Wiÿe¿±ËJti´"k1O¦¡'ì]¹r$÷ôbfªw!*Lg?ýÚ×ñ%{“„jr¹ÝSy¼+éå„פ|&Ãñ”ø‹™:%i†®«ª,ÆÓð›%?úÓ{ï^)Üöå—ŸË'üzê±Égü8žPeºŽÙ’u¾‹ÓûiŒtB–rÒ¿Ï�ùÂ+ÿkpkÆ6fä.“‘ÎIû轂¿|ûž|ð·ý?û8€Ô婼õ‹Ÿ•$ªó>‹¾7�øfѱiÑ1zÝråC‹ÊÕºu˜r¾ês•ö_ö»¬D—F+ºª1©š¤eqªr°¨RîKeLyå:âûï¦'Y¶ú+�eMË×f©ZîKeLyuäñ}PŸ«´ÿ²ßØe%º4Z1©¦,N«<²L¹/u”1åÕêHfëÌ_–º\ì›�ü”=6-{\›¥j¹/u”1åuÔ‘Ç÷A}®ÒþË~c—•èÒhEĤš²8­rðÈ2å¾ÔQÆ”—¯óL> þF^ˆâ¤±š5;çâ:¦·ƒ}€²Ç¦ek³T-÷¥Ž2¦¼Ž:òø>¨ÏUÚÙoì²]­ˆ˜Tcâ´ÊÁ"kQ¹ªRÇ>º=}¿ÙÌåúÔc²ª¼Ç¼r5½NvR‘®ÜÏLŒ2ϼ÷ÑÏ��¾Ytlšw\Së–+êXT®Ö­Ã”ó}PŸ«´ÿ²ßØe%º4Z1©ÆÄ©ÊÁaråC‹Ê•í:Ø7øhѱiѱoÝråC‹ÊÕºu˜r¾ês•ö_ö»¬D—F+"&ՔũÊÁ¢J¹/u”1å.ë`ßà£ì±iÙãÚ,UË}©£Œ)¯£Ž<¾ês•ö_ö»¬D—F+"&Õ”Åi•ƒG–)÷¥Ž2¦Üeì›�|”=6-{\›¥j¹/u”1åuÔ‘Ç÷A}®ÒþË~c—•èÒhEĤ§UY‹Ê•u,*W¶ë`ßà£EǦEǾuË•u,*WëÖaÊù>¨ÏUÚÙoì²]­ˆ˜TS§*‹*å¾ÔQÆ”»¬ƒ}€²Ç¦ek³T-÷¥Ž2¦¼Ž:òø>¨ÏUÚÙoì²]­ˆ˜TS§UY¦Ü—:ʘr—u°oðQöØ´ìqm–ªå¾ÔQÆ”×QGßõ¹Jû/û]V¢K£“jÊâ´ÊÁ#Ë”ûRGSî²öM�>Ê›–=®ÍRµÜ—:ʘò:êÈãû >Wiÿe¿±ËJti´"bR‰Ó*‹¬Eåʇ:•+Ûu°oðÑ¢cÓ¢cߺåʇ:•«uë0å|Ôç*í¿ì7vY‰.VDLª1qªrpX§\ùPÇ¢re»öM�>ZtlZtì[·\ùPÇ¢rµn¦ÜÇïƒËÑ@õºÒÞ¹%áèyúªÿ®ÒþËy„]V¢K£“jÊâTå`Q¥Ü—:ʘr—u°oðQöØ´ð¸ö| ·¶ÿÎÎÎ5Ù¿‘Ë´Èøòq 7âr³LŸüù»Oäƒàoå—×_¯Óêò°*gýC9\Ì߆ÈÂíŒÔU^Gyú™ýòTÂÎîÌöríÛo¿•÷Þ{O¾ÿþûô•ù²±4ñ^¥MŒùåÏäñƒ+7^0ûö5éŸÉðbºT}*ëdù·ßl+ѥъˆI5eqZåà‘eÊ}©£Œ)wYû&�eMÕŽkÿŸ°vZz²zC‚ÁiI"ùýAð²´ƒ¹H_—(­»†I’vý—òÖŸ¤eúz_zݽ¨¾vTÉZ3.¢6kGÛÖl²6ãøèR%i[~ÿ]µ<ÚO‡rýú-ùàñ?Fë|.Ãð@Ú;­Ü~^ý=ª¬“åç~³=¬D—F+"&Õ˜8­r°ÈZT®|¨cQ¹²]û&�-:6Í>®™ûè¤ú…¿‘à³L_7žË(¼-ðéä÷/N$h·d§õº„gÏÒõñ:_üg ÷_Š'oö6L[´ÎºåjÝ:L¹Ÿßþ%kf™—´-ŠeÕ6)3)OâÓÚål<–ŽHþì¶|ô‡ÕßC-ZGË}V¬ÇJti´"bR‰S•ƒÃ:åʇ:•+Ûu°o°MOj?~_JVÕ¢cÓìãšž¸¾,îër=úýë·¤?Ê&`ùdí÷2ì½½WKöz§ÅK'Ó÷¸>’µ†ø›¬™eVÒ¦¯ÏSµMÊLÊ/å¼ ­ÖôÏÍœ&k¿xK>ùbõ÷P‹ÖѲEŸë±]­ˆ˜TS§*‹*å¾ÔQÆ”»¬ƒ}€m¯½öZ|¬1Ë;w$ CùꫯäÇLך–=6U?®ý.:±ïH08“ÓÞ¾´¢:Zûrzq™–ÿaœ¬Åž$ØÕmjËí~—®³îñ÷sùä?¼‘^Ž©Ë5éË(>~&?úŸå­_þBv:÷¤o.W;øßä‹“ß&—\Þø[ù ØO_?’ÑùPŽ¢Ï¤Ÿ%®ï…òƃÇòÅ—Ÿ¹ŸK—äRMMn>º}=}mw©AýÚŒck–4Ùʾ¾Èà¹^nú™kãu[»r2N²§“µçƒ@vÓõvƒA”~k~+ýÝìç}&£Áéê¨i\¶'Ýû'i;èÄ%Çr¿gçî=y¼+æ$ƒó’5³d“6ýÙ0ñžs£®òxó¾t[Å{7—ª£Ä¬òìgEý¬D—F+"&Õ”Åi•ƒG–)÷¥Ž2¦Üeì›�lûðÃãcMÙróæÍñ蛞+}ݨ~\3ÉZ”´\žIÿ@ï7K’žÇ_hy.Y…Ò‰·á–ÿPñ=æ•!Ÿ°//ìüUrÏÜx’DêrØ“_Œ?÷ Nþ(áþ$II–¿’Ûþcüzkÿ]¹÷F”xµe%œ—£#Ù×{ëÆ—·§Iéuéö¿K6"òåïÈíë%ý³Âh¡*ûÙ˜×㇨=nDõæFÅ¢dâàVzÙ^œX˜û«¢«ÿv”¨šDLGÖ4Ž{S뤣Kãd활Eí¼× ÓI6L½fõ;éw_ÊÜÓ¥Ûù«¹#wU’5³è¾¬ÿ&Þó÷zÊÇ÷ej¢Ÿküêu,·ÙÏŠúY‰.VDLª)‹Ó*,SîKeL¹Ë:Ø7ئ#hz¬©º¼øâ‹ñ¿FõãZ&YS_K/=¹&7ÞúOò;gÉÚ_KoøSôŠI"̨W´Ž™•r¯'ÃìÉ´Ù–©K×4©ˆ’µñºßÉ¿üËé{‘.O¥·×ʬs™lCTÏTýeŸ#ß«.YIb•åÑDê J$Óä2MÖÆ—¡Æ?ÏOÖL¬&ë耎¸¥Éš‰In»âEãôLG÷tD­'ýáyZô™¿»äb˜xÏßwê)ÿâ“·äF:šœWµŽ*ëde?+êg%º4Z1©ÆÄi•ƒEÖ¢råC‹Ê•í:Ø7ئ—:걦ʢ‰šÞÛ¦ÿŸgöqMOì“dÍ”ëhÔA|)œ& ŽG\ô„>.ÿüƒ81ØÙy%M®¦Í~‰òr½´ï‰„½nrïÜÎõIi’²N(£èÇq¹×¤üsöÃtfÊhøòÁt…(ùù,ø›(AüËtt-5ÊÞƒW¾ S¾(æ«IÎtt0žÐeÿ~1‘¼J?¼7¾lq­d-.ŸmœfFü´mö¤Ûû­ ¦îm,ª:²¦—øšuç©Ú&ef—ÿ$Ãû‡ã‰rV«cZ•:}V¬ÇJti´"bR‰S•ƒÃ:åʇ:•+Ûu°opá•Wt"Ù'¸fÑ{ÛÌ=lúó<³kÅd-NœNï§÷µ¥Ó¹1IÖ¾ì'‰Äøò¸i³ßcbfùÅ©„šTµ»Ò ŸÈÃþ'ùÙÊÉÚ¥üî“@~yýgñ}Ua }M\¦’µ¨Žø²ÇâQ£ÓÓžìMM6Qýs,ŠùjÌè¢^êøD½Ws±>O§š×¤)”þŸŽâ{ÚÖOÖv¤ÕíGµ—‰Þ·ÿqæ^¹âã²%k&I3ôµyª¶I™ÙåO%<x0N„W«cZ•:}V¬ÇJti´"bRMYœª,ª”ûRGSî²öM`[LN>³'±MÑWDDObõ8ó/þÅ¿ˆÿ-[t½ìd#úšQý¸–» r,Jz>z#åÊNB•¤÷?™©þ‹ï¡ÉÞÇrøèùbá6ô“Ë_Ø'KI1ã2ÈÜÚ8Y»Ècóé%“¤#<¤0%»^Zøz|ÏV»}]^øåòùÜíœý9²1¯•y<Bÿì(¦Iä2£`é$k%kãË s‡¾üFÂ7“ÕÓQÐ0ÑË·IFY²–OÒ -3L¼çï;õ”7QGö³¢~V¢K£“jÊâ´ÊÁ#Ë”ûRGSî²öM`˜“Þ䲉dM/]Ô BÞyçøRF3iÈññq<Cžþ«Û6kÑõòôu£òq-~&Úõ’Q²Œ/œLBa$“OÄ‰Ü 7ävðÑdb†Ë‘ ÂCé¾™LÖ°xþ^‚?‹¿øR´ 3“côž½ßÈaðD>_&Y3#Dñ3´’Yoßøy››òVðo%È^æ7Nˆ¢ÏðÑ?,ØÎÙŸ#ózý”>"!ú|S÷ê™™Í=mç2<:LFA;ïKxx7Jzÿ)ýÌ$yi›\Zù<ŽKv6ÉÝàX¾‰“×äçÉbÞgzÊÄnÞH\>Y+KÒ ]Ç0ñ^¥MŒÅåæ~ÉŸf4ª¾G•u²²Ÿõ³]­ˆ˜Tcâ´ÊÁ"kQ¹ò¡ŽEåÊvì›ÀöHF–IÖ¢`p_z…‘¨Å%gyúšoò‹Ž¾Í¢eóäkæ³ëžù@`½Wé•Ìe¦\¡'ò0N¬&u¼pã¶üû>‘²èä·!®g|É¥N`ñ@|ðoã u:úãðíémÜ âmüÃG· ¯'—9žKøÖÍè\_שçŸHÿž&=ÙǘíHŸ7• %ŠÛ9Í”ë{Û’Œ`θl< LôÛ]¹r$÷tT¬Õ‘Óÿ]þnæã &³FšX<=‰Ú?úàá“t$-“øÅëe§î*‚wåáà -ÏÀÍ`’µEIš¡ëÎSµMÊËÍl&“¹,_GQ•:}V¬ÇJti´"bRƉÅý`;,¬éeaû/ϸlp¾*ÉÙ,ú;Ùcþn™ì±Éœ0.:i¬£Ü—:ʘòâ:“‰E_®9»œïƒrºWIÒŒ«´ÿ²ßØe%º4Z1Ùn´/�,—¬™ûœ&÷SUU59Ë3ÏŸÒdoщoö¸ºêIdVÕr_ê(cʧ×ÑÒCi§‹T­#ï²ú\¥ý—ýÆ.+ѥъˆÉv£}4b|O”ŽTíÉÝWãÿ“µ©òh‰/-E§ö&Q›Œr%8<+Üÿ£—ï,˜Ö¼*IÓÑ5½„r}ocՓȬªå¾ÔQÆ”ëryÊþø2?ó`éÕß#s¬ç*í¿ì7vY‰.VDL¶í À¹ô^Ÿ–y�næÞŸ$Y›~¾Õøyc™iß“‘¸ÌÈZú€âä¤r_Põ{àæÓÙ³3>γ踺ÊIeÖ¢r•]§pOÜÌ¥8J¹è}Ö*O*ò ùåÛ&£äT}ý ¨Ç¢XVm“2‹Ê•«:Øoì²]­ˆ˜l7Ú€[fdlúaÎÓ—A¦ÉÚx‰ôç ÉÚx6ÅtÖ½º’µe\¥“ÝuÊÕºu˜r¾Ëês•ö_ö»¬D—F+"&Ûö…otŸdq¿¸óTB%/÷päÙ÷¬éó×Bé郚u;ç%kÆÅPúá½äÙS…úÜÈÆÓœ0.:i¬£Ü—:ʘò:êÈs»o·«´ÿ²ßØe%º4Z1Ùn´/|“ß'WýΪZîKeLyud¹=TIÖt:z}Øï®´»÷$줯ž›¬E‰]x mæ¼JÿOG¹»“§‰÷²m’UµÜ—:ʘò:êÈ㻬>Wiÿe¿±ËJti´"b²Ýh_»4¾›¼4AßwÞ®ZåK9kQ¹ò¡ŽEåjÝ:´Ìm[§—4N]9yðpœ\¥—0Nô{!ƒ¹ÉšyNSæYXÏ^$k³ÔÑfóÊ•u,*WëÖaÊ›:^m£«´ÿ²ßØe%º4Z1Ùn´¯]&¾U¾4æ•«uëXT®²ë4µoèû.³³¬[®|¨cQ¹Z·-sÑÖ_}õUú¿tªöè=wÚÏ'ˆèkÑÒj·åÿ¢ÿî‡rv©£lf–Ç}é…w%ˆ²$YÓ{Ôþ«< ß–ýÎÿ•›‡êf*Üy_Âûñ´ð®,Šgm6¯\ùPÇ¢rµn¦ÜÅ>|U\¥ý—ýÆ.+ѥъˆÉv£}í*‹o•/‘ªë”©Z^¶NSûFþ}m§ª«Ü—:ʘò:êȲÑÖú,²0 åÎ;qý¯½öZZ¢žÉhð`|_ÙNûmù,J¸v[ >‘áÅÿ)§½ýtzþ=éÞ"ý{:òvM:‡ÇÉÌã$£×z_ËEfFÉvWîŸɽ½¨þñ”ÿîdãiâ½l›dU-÷¥Ž2¦¼Ž:òlìÃWÕUÚÙoì²]­ˆ˜l7Ú×®²øVýR©²N™ªåeë4µoäßwÑvªºÊ}©£Œ)¯£Ž¬:ÚzVröá‡Æ#jU§¼ßÙxšx/Û&YUË}©£Œ)¯£Ž¼¦ŽWÛè*í¿ì7vY‰.VDL¶íkWY|«~©TY§LÕò²ušÚ7òï»h;U]å¾ÔQÆ”×QGÖ*mMrV.OïeÛ$«j¹/u”1åuÔ‘×Ôñj]¥ý—ýÆ.+ѥъˆÉv£}í2ñ]åK$oÝ:•«ì:Míú¾Ëlç,ë–+êXT®Ö­C˪´õ·ß~+?–wÞy'^ÿæÍ›òÞ{ïÉññ±|ÿý÷éZP‹âYG›Í+W>Ô±¨\­[‡)oêxµ®ÒþË~c—•èÒhEÄd»Ñ¾v™øVùÒ˜W®Ö­cQ¹Ê®ÓÔ¾¡ï»Ìvβn¹ò¡ŽEåjÝ:´lV[g“³_|‘äl ‹úNm6¯\ùPÇ¢rµn¦¼©ãÕ6ºJû/û]V¢K£“íFûÚUß*_"U×)Sµ¼l¦öüû.ÚNUW¹/u”1åuÔ‘¥1'9«Ov6ñ^¶M²ª–ûRGS^GyM¯¶ÑUÚÙoì²]­ˆ˜l7Ú×®²øVýR©²N™ªåeë4µoäßwÑvªºÊ}©£Œ)¯£Ž,¹&hš¨‘œ­/»›x/Û&YUË}©£Œ)¯£Ž¼¦ŽWÛè*í¿ì7vY‰.VDL¶ík—‰ï*_"yëÖ±¨\e×ijßÐ÷]f;gY·\ùPÇ¢rµnZÆq ^‹âYG›Í+W>Ô±¨\­[‡)g®ÏUÚÙoì²]­ˆ˜l7Ú×®²øVù©ºN™ªåeë4µoäßwÑvªºÊ}©£Œ)¯£Ž,ŽõÊÆÓÄ{Ù6ɪZîKeLyuä±×ç*í¿ì7vY‰.VDL¶íkWY|«~©TY§LÕò²ušÚ7òï»h;U]å¾ÔQÆ”×QGÇzeãiâ½l›dU-÷¥Ž2¦¼Ž:ò؇ës•ö_ö»¬D—F+"&Ûöµ«,¾U¿Tª¬S¦jyÙ:Míù÷]´ª®r_ê(cÊë¨#‹ã@½²ñ4ñ^¶M²ª–ûRGS^GyìÃõ¹Jû/û]V¢K£“íFûÚeâ»Ê—HÞºu,*WÙušÚ7ô}—ÙÎYÖ-W>Ô±¨\­[‡–q¨×¢xÖÑfóÊ•u,*WëÖaÊÙ‡ës•ö_ö»¬D—F+"&ÛöµËķʗƼrµn‹ÊUv¦ö }ße¶s–uË•u,*WëÖ¡eêµ(žu´Ù¼råC‹ÊÕºu˜röáú\¥ý—ýÆ.+ѥъˆÉv£}í*‹o•/‘ªë”©Z^¶NSûFþ}m§ª«Ü—:ʘò:êÈâ8P¯l<M¼—m“¬ªå¾ÔQÆ”×QGûp}®ÒþË~c—•èÒhEÄd»Ñ¾v•Å·ê—J•uÊT-/[§©}#ÿ¾‹¶SÕUîKeLyudq¨W6ž&Þ˶IVÕr_ê(cÊë¨#}¸>Ë«´À+ѥъˆÉv£}í2ñ]õ$kÝ:•«ì:Míú¾Ëlç,ë–+êXT®Ö­CË8ÔkQ<ëh³yåʇ:•«uë0åìÀ¬ôJ:{1Ùn´¯]eñ­zRe2UËËÖijßÈ¿ï¢íTu•ûRGS^GYê¥ñdq¿�ð‹•^Ig/"&Ûöµ«,¾UO¨«¬S¦jyÙ:Míù÷]´ª®r_ê(cÊë¨#‹ã�� nV¾YøÂ*"&Ûöµ«,¾UO¨«¬S¦jyÙ:Míù÷]´ª®r_ê(cÊë¨#‹ã�� nV¾YøÂ*"&ÛöµËÄw•è¼uëXT®²ë4µoèû.³³¬[®|¨cQ¹Z·-ã8��¨›•o¾°ŠˆÉvóº}/G2xtOºíkÒ Ÿ¦/nßuO¨Õºu,*WÙušÚ7ô}—ÙÎYÖ-W>Ô±¨\­[‡–qœ�ÔÍÊ7 _XEÄd»ùÛ¾ÏeÞŠ·ogg×›dm8¦ÿ«¦,¾UO°«¬S¦jyÙ:uíëÆlÑvªbù… ‚vºÿìÈ 7ùì‹üï?•°³;^ggçgr#øû´,r1”~¨,hMê¹q[öOå¬(‡ƒ‹tÅÄjÛ9­jyudég� NV¾YøÂ*"&ÛÍ÷ö}>d×£díÎ;róæM9>>N_™¯,¾UO¨«¬S¦jyÙ:uíZÆ­jÒ–ßEÛ©ÊÊ/GÇrعÕù‚\¿ý Jáò.åbp(ׯ¿!ýî‹´Žèµa˜$ií®ôúÃø÷¾üò ùÝ'H¯»Õ×– ÎdíâDÞíýQþ-O_{žü3¿?³ŽÔ*å¾��›ÇÊ7 _XEÄd»ùÞ¾>&k3]ª$m&¾«œ@ç­[Ç¢r•]§®}ÃÄK—*I›®·ÌvÎ’-Oö!}ÿk²~¥b¹ß…Òé„2J~Š“¤@µþF‚Ïþ1}1ãò ÷_ŠGáæmƒšzŸ’ò”³ðu¹ 2‰Ù³øµŸßþ(Nàæ©öóËëjk�� +ß,|a“íæ{ûúœ¬™e^Òfâ»î µZ·ŽEå*»ŽÙöuece–yI›–/³³dËuºÖyCÞˆ/gÜ“ƒþ™|‘ýý©dí'ö^‰ÖkÉ/Þ ãõf¹>ýš’µ/> d¿µ#»™díò,Œ_ûÉ�`CYùfá «ˆ˜l7;í;}¿Ðäž³ìëéedC9 :Ò2ë¶:rx2ŠG?ÔT²ö| ÁnºÞn =³Õmó»ÙÑœä~WÚ¦¬Ý•ûƒ´Þ¨ìä0}O½Ìíá»<ª– ÎJÖÌ2+iÓ×g©z‚]e2UËËÖ)Ûöeec”_f%múzÖ¢íTóÊuúËÛä·¥%@;­}éž§¥‘hºq#ÇZÇ>J÷±òˢòâ:zYågÄ—c&Ÿ»Õ¹+'£gã¤Ì¼®÷Íý_ÿ§ÿGî5Ýÿÿ ~+oýò²sãoåƒ`?Ú·[Ò>8’‘é,©ªÛ™¥ï�@¬|³ð…UDL¶›½öMîjFž“þÁ„gÏ’ÿw¯G Ó¡ ..£êHtôÃ$b‘ÂÈÚå©ôö¦×‘ó¾tõäÖ$kñej¯H7<MîQº<‹ÞSï3zEzÃÿ­~ ­ô=“í¼­»~²f–lÒ¦?ÏRõ„ºÊ:eª–—­S¶íËÊÆ¦lÉ&músÖ¢íTóÊ“dMG¨þQFý·“¾ý¶ô£d)–MÖiòKÂÑä¢DUu ëÄûg”X'ò»hp+Þ†ñHZúGýy|ÏZæ5]çrØ“½x»tù+¹ýà?Fûø5ií‡rF²�ð•o¾°ŠˆÉvKNþê[¦¤‰Uö„RGnô%×H“µ½ž ãòôçyÉš™Á/›¬™·4Y›>±Í.-ÙëýANtt/3qD^ñ÷V[4iÓg©zB=oüûmÃb’á¬*±˜W>IÖ´ü\N{ûñ¨j«s_N5aw”¬íõN“Ë/?ÿ þãÂ2ÉZL·S·íoÉ'…™-'fnCƬò|Ì�X—•o¾°Šˆ Vw™ŒbíÜ`ðCôó2¢$iøSR<v.Ã~˜Î²Œ®•¬¥Sþ·¤žrˆ™?=!oI»{O™Ë#+¨2²¦‹]Óÿ«UN óÖ­cQ¹Ê®c¶}]Ù¸Ì[Ìèšþ™íœ%[®ûÐõlÒsy&ìÿ"~Ÿø g™{ÖÌ(íÎ+òÖ'¿¯üe¦ÖÉ= `œœ¥—^N%fé>=uÏš¹ä7{¹odÑvT)×í� NV¾YøÂ*"&X‹9ùmÊÉàžìGÑ”™"}7NšÂþ@ú:êUG²¶s]ºýïÒòô}ŸÈÃñ½rÉ%j³FÙò%kùûÖô5µî µZ·ŽEå*»ŽÙöueã3kÉ^©ôµe¶s–ly!Y‹|ù»ÿ$oÝøyô^QÛw^“�¥£»Ñëó&Q‹¶A%ë|.Ãð@Ú;{Òí…ÒÿÓÑ89#Y�l++ß,|a¬GGÓnÄûQrâéd+MäZ]sYd:ÉZÉZ”Š™Ë [ Ž&—:^ž=’7ïgÞ_]œJè/{›¥,Y›5¹ˆÒ²Yªž`WY§LÕò²uʶ}YÙ8e—|’fhYÖ¢íTóÊuš\™a¦è×í1—AFËdÿy=½·21y(Ù?ýX%0Ly²ŽaF—“?Äåùä,ÝÇÉ›þ~æµñ^i.ƒL·µLq¦Í*ÏÇ�€uYùfá «ˆ˜`]“{Èt‚Ì%éHArO›Žv™óö¥Þ• ÿOé‰n6É3#饕ùÙ$5‰{¦ŒLfÞ/ñÉ÷Þ6ÈlGšL–^69-Ÿ¬•%i†®3KÕê*딩Z^¶NÙ¶/+/]Ê’4#ÿ¾‹¶S•—'Ï+{¡ä>¯ñlŒ™dMg<‰&üá žq1~/Ë <”î›å³0No‡éMžñöÅ—ŸË'ÿádVÊÎûÞ•þ÷QÒ¨lØëIø÷‡²ÿƹ0€ˆ^;}úHOä‚d �°A¬|³ð…UDL°63ÑÈx͘Lö Ï¿êÞ"ý{úŒ«kÒ9|"_üžäjY²˜Q†ñ¬‘ÑkñèO£Ûèw‚¥?Lß!ŸÄ§îNž½+ÁÃߌ§RouåÈüÞ&Y[”¤º®Zå:oÝ:•«ì:fÛ×Ç?Z%i†®»ÌvΗ§á7Ëd:þÉï§÷0æ.-Ô×÷É=ù÷·oLö¡hiuy˜NL³hT¼Îïþ“ôÌ´ýºžÉ=Ñ4Jßxð8Nà “ž¤}ã…èµn¼-_÷-Ƀ½Ó%3²¼h;ª”k��ÔÉÊ7 _XEĘxï½÷*%iFYÿ©z‚]e2UËËÖ©«ïWMÒŒüû.ÚNUW¹/u”1åuÔ‘Åq�P7+ß,|a`ueý§ê u•uÊT-/[§©¾ŸßEÛ©ê*÷¥Ž2¦¼Ž:²8Î�êfå›…/¬"b¬®¬ÿT=¡®²N™ªåeë4Õ÷óï»h;U]å¾ÔQÆ”×QGÇy�@ݬ|³ð…UDL€Õ™þ³Ê tÞºu,*WÙušêûú¾Ëlç,ë–«Eëüá£Ûò³h[u{Ë—ërû£ß¥¿Q´è=•«uëÐ2ÝV��êdå›…/¬"b¬ÎôŸuO¨Õºu,*WÙušêûú¾Ëlç,ë–+êXT®Ö­CË8Î�êfå›…/¬"b¬®¬ÿT=Á®²N™ªåeë4Õ÷óï»h;U]å¾ÔQÆ”×QGÇy�@ݬ|³ð…UDL€Õ•õŸª'ÔUÖ)Sµ¼l¦ú~þ}m§ª«Ü—:ʘò:êÈâ8�¨›•o¾°Šˆ °:ÓV9Î[·ŽEå*»NS}_ßw™íœeÝråC‹ÊÕºuhÇy�@ݬ|³ð…UDL€Õ™þ³î µZ·ŽEå*»NS}_ßw™íœeÝråC‹ÊÕºuhÇy�@ݬ|³ð…UDL€Õ•õŸª'ØUÖ)Sµ¼l¦ú~þ}m§ª«Ü—:ʘò:êÈâ8�¨›•o¾°Šˆ °º²þSõ„ºÊ:eª–—­ÓTßÏ¿ï¢íTu•ûRGS^GYç�u³òÍÂV1VWÖªžPWY§LÕò²ušêûù÷]´ª®r_ê(cÊë¨#‹ã|½4ž,î�~±Ò+éìEÄXé?«œ@ç­[Ç¢r•]§©¾¯ï»Ìvβn¹ò¡ŽEåjÝ:´Lcþá‡Ê÷ߟ¾Šu,ê;u´Ù¼råC‹ÊÕºu˜ò¦ŽW�ÊYé•tö"b¬ÎôŸª'ó¬[Ç¢r•]§©¾¯ï»Ìvβn¹ò¡ŽEåjÝ:´LcþÞ{ïÉ‹/¾(¯½öš<~ü˜Äm ‹úNm6¯\ùPÇ¢rµn¦¼©ã€rVz%½ˆ˜�«+ë?UO@ª¬S¦jyÙ:Mõýüû.ÚNUW¹/u”1åuÔ‘•ùW_}%ï¼óNüšþ{||,?þøcZŠ*²ñ4ñ^¶M²ª–ûRGS^GyM¯�”³Ò+éìEÄX]Yÿ©zBRe2UËËÖiªïçßwÑvªºÊ}©£Œ)¯£Ž¬Ym­ š&jwî܉ËuäM9,–§‰÷²m’UµÜ—:ʘò:êÈkêx œ•^Ig/"&ÀêLÿYõ$kÝ:•«ì:Mõ}}ße¶s–uË•u,*WëÖ¡e‹ÚZ/‰ÔK#õI½TR·o¿ý6-EÞ¢xÖÑfóÊ•u,*WëÖaÊ›:^(g¥WÒÙ‹ˆ °º²þSõ¤Ê:eª–—­ÓTßÏ¿ï¢íTu•ûRGS^GYË´µ&i:ÉÍ›7ã…‰Iвñ4ñ^¶M²ª–ûRGS^GyM¯�”³Ò+éìEÄX]Yÿ©zBRe2UËËÖiªïçßwÑvªºÊ}©£Œ)¯£Ž¬UÛz821É Ùxšx/Û&YUË}©£Œ)¯£Ž¼¦ŽW�ÊYé•tö"b¬®¬ÿT=!©²N™ªåeë4Õ÷óï»h;U]å¾ÔQÆ”×QGVmŸ˜ä*ËÆÓÄ{Ù6ɪZîKeLyuä5u¼PÎJ¯¤³`u¦ÿ¬z’µn‹ÊUv¦ú¾¾ï2Û9˺åʇ:•«uëв:ÛÚLLr•-Šgm6¯\ùPÇ¢rµn¦¼©ã€rVz%½ˆ˜�«3ý§ê Ç<ëÖ±¨\e×iªïëû.³³¬[®|¨cQ¹Z·-ã8_¯Eñ¬£Íæ•+êXT®Ö­Ã”³þ±Ò+éìEÄX]Yÿ©zRe2UËËÖiªïçßwÑvªºÊ}©£Œ)¯£Ž,ŽóõÊÆÓÄ{Ù6ɪZîKeLyuä±þ±Ò+éìEÄX]Yÿ©zBRe2UËËÖiªïçßwÑvªºÊ}©£Œ)¯£Ž,ŽóõÊÆÓÄ{Ù6ɪZîKeLyuä±þ±Ò+éìEÄXöŸM^š ï;ïdM­zBg,*W>Ô±¨\­[‡–5ÕÖÛjQ<ëh³yåʇ:•«uë0åìÀ¬ôJ:{1à’sXÜ/Ö\ŽdðèžtÛ{œ åä°#­ø=÷ä &—éjr1”£À”EK«#‡'£¸ür4G½®´wnI8üZÂî^ºÎ¾ôNˆ~õ3 :×’×ÚoKô,©3r9:‘ûfý–´»d)·!O“LTI8ÊT-÷¥Ž2¦¼Ž:ò²1à+½’Î^DL��«y.£ðVü=/íƒ(Ù:2¨Séíµ¢dë@ú皎}'ýîõ¨üP—Q‚u$í¨|7Áó§vvÓ:4Ù e¨ëœ…²ßŠ^{éeé¾{,£ËK¹8½/èµV·/Ñ»$ëì¥ï©?›z÷z2g‰õË~ošäb•ĨZîKeLyuäq®ø‡dÍb�XIØÚ .Ò×.d´£×nI8zýœ&kã$*ý9NÖ2?×Wi7^'ò| Án”ÀuBÉO2콇—W¤7ü)ý¥úé{&¹X%1ª–ûRGS^GyÙ˜ðÉš#Ä�°º*Éšq.Ã~(=sÙâ8›µþ¢d-)7£l.-úÞ\5!1•+êXT®Ö­Ã”s®ø‡dÍb�X]•díR.†¡tÛ»ÒîÞ“°?¾–׬M.µt‡d-±¨\­[‡)ç\ðÉš#Ä�°º ÉÚy_º™{ÍÆåk%k“Ë [C9Jï[y&gá¡Üç2È)uÖQÆ”×QGç*€HÖ!&�€Õ™¤éºtûߥ¯™{ÐÒ{ÇF¡t4©ÚåL' Ïî¸/½ð®ý?M¯¯ “”DÒ¤ÏÜû6ž„$ª;»$ï“üŠ ÙïM“\¬’€UË}©£Œ)¯£Ž¼lÌødÍb�X3‰Ò®tÂÏ“±ñk:âv&§½ýñ”þÝûO¤O¼kÒùwoKç/̺éú¿ï'#hã×nI8ø8Nø¦^=›žÖÍ©û¿ÿþ{ùöÛoÓŸÊé{ͳjBb,*W>Ô±¨\­[‡)_s�9BL��yüø±¼öÚkòã?¦¯ÌF²–XT®Ö­Ã”s®ø‡dÍb�ØVÇÇÇ “/C5ýN\”°e¿7M2Q%á(SµÜ—:ʘò:êÈã\ðÉš#Ä�°­îܹϽ÷Þ{òÕW_¥¯é庞Yæ%lÙïM“\¬’€UË›­ãR~÷Ñr}çç²~ýT´þ{”—gcÀ$kŽ�À6Ó{ÑÌ%Ž/¾øbœ¸åïMûðÃãïÃìR–°e¿7Mr‘O0žÙ5u½ð7|öi‰afÑ̼g<Ë¥¡±<‘°×$³ÎÏ¥|,ý៥ÿæû“Y2#eIŽQ¶YóËIÖ�L#Ys„˜��® MÒ41»yóf¼èÿ5™Ó$.Iˆ¦MØòôõyÆ ÇåHN;ÉÄ*íC\$)ÎTBrq"Aûe ?$?G¾üòsù$Ø—v<aJ/JÎÌc ô¡â=é¶[²ó³ÛòÑVOŠT²Îr1¸/½ñc&ÕQý=V¯Ã”/Š9�÷HÖ!&�€«h8Æ£lÿüŸÿóø»°lÑu²ôµy¦ól¸èwÌ#¦ÊãçÉÝÎ<_ÎŒ`•?‚@Ypó…%Áã?¤¯M¿Çlñ:_üg ÷5Y$Y°’5Gˆ �à*{çwâïÂyK6aÓŸ “L”&Q²vûçÿ7ùåÿýÑﵤ}p$£©ì©7þõ$ñ2Ï—Ë<s®øúl» “àUOz¦×ш¿.­ôæUë(cÊë¨#/s�~ Ys„˜��®*½'M¿«,&aÓÿ&¹(M@4YûËÛòÑ?ü'éÅσ»&Þ×2ÇšNÖÆ÷ºíã{Ò¾Gd^ùåèXÞ¸ñóè½_ë¿ü[y¼+Fÿ=MÔ²Ÿñ_Iðÿù{<º'ݶnç§v÷¢×÷äàèDþ­üòúÏ¥>MëÈ£^WÚѶž<5ïÕsý–ô³Ïº»Éà~´^ú>/Üø·rRò,¼²Ï‘9�?¬9BL��W•N<'MØôßy¦½ òz’x]ŽŽä@ï7Ûù…ìðY:IGö2È̤#7‚Ìd#EeI1)ÿNúÝ—¤œ¤ â2~¿Ÿ–ÿá£ÛQr˜Œ¬%#vú°òôó^C„ÿ^ö[-ù óZüàsMÖ4ÉüYúšÞ[ÊðâR.‡=Ù‹^kuû¢wÚ}ùåïå“·þZvZûÒ;^¹<“þ&€i}Ñç|\ásèº�üB²æ1�\U:È8q˜³èd$ú�sɤa’ ]f2#kñd —rqz_:­¨N“¼L¬e’µÌÌ ß#RZß3×’ë¿|K>øäóÂ:ÉH^ö2È?¤ÛÐ’½ÞéÔ¬šØýlçg㑵$ÑÜÆ¿ÿ‡äöÏ2Ûo.ëLÖu¾øä­(¡»6sVÉdŠŸ#s�~ Ys„˜��®¢ì³Õ4ÓEg‡ Ã0~&›N@¢3Eæe¿7Mr1+ÁˆM%kꙌúo'—¶^—ðìÏ™díRÎûÉ¥‰{=¦™ÌÂ÷ˆ”—ëHÚôsþB~ùÖÿ,ƒÌ%ˆåÉšA›X+YK?O¼Îã@:Ñöìƒ(=Vö98WüC²æ1� ºõ’5u.§½ýtJÿWåÆõ¿™L0rÞ—®Ž¼Í`¤h~ù¹|òÁ¯å¶¹§lçF”œ% °ž¬éhâà0JN÷ä &_|ù¹„oÝŒ>ûuéö¿‹×È*ûœ«�þ!Ys„˜��PÝ¢ïÍ©„#sÏš‘”ÿCfÄëVffÇŸ’{¼¢×˦î×ä+|û@ Úž˜ô胶Ãä9mQ2¥÷ŠMß³¦Ì¥˜»r#øû©:’Än’Ä}ùåß'÷­e&C‰?¯>ª sÙã—_|&ýƒW¥ÝŽ;ý¼­ŽGÃøºÙÛ9aÊ9WüC²æ1� ºEß›ÙDŸ‰¶ßšŒ’©qùå7îë ‘Ùd-*’›öuªÿ(aëFã{»tÆ08óÁgòEú³L¶á©„Æ—T&ánÅ€|•'ÉšÞŸö_åiøk9|W’¬™K4'÷²}ùE(oýâ…(ù:þyúfdp|Ùã?ÊgÁßȵ—<ªÉvÎfÊ9WüC²æ1� ºì÷¦I&Š Ç… ‚v¼®YfÝ£¥ÉÓíìecç2ì,A<Ý¿©ãçÒ >–þP'&™6{ÔSy¼+ÿþßß–/˜:>‹gnŒ]|=~¤À·þWùàöõÌû™mÎL|b^ÿU ¿Jö,·$øè×r#³N2â–^*™}=]Z»…)üË>‡®À/$kŽ��ªË~ošäbv¢”¨«Ü—:ʘòéu2ªÌXò lÙ{èº�üB²æ1� ºEß›e ‡±n¹ò¡ŽEåêK½¤óßü›ô1Y:ñÈ»ró­°Ò圜«�þ!Ys„˜��P]ö{Ó$ó’–ºÊ}©£Œ)Ÿ¬“>d{Æ„"—£¹<¹35ýûœ«�þ!Ys„˜��PÉZñž¸™KvZýBÓê*ŸZçb(ý‡Aò p³M/Ü Èh:O‹•½‡þ�¿¬9BL��¨.û½93AÉ©«Ü—:ʘò:êÈã\ðÉš#Ä�€ê}o®š‹Ê•u,*WëÖaÊ9WüC²æ1� :’µÄ¢rµn¦œsÀ?$kŽ��ªË~ošd¢JÂQ¦j¹/u”1åuԑǹ à’5Gˆ ��Õ‘¬ÍfÊë¨#sÀ?$kŽ��ª[ô½¹jBb,*W>Ô±¨\­[‡)ç\ðÉš#Ä�€êHÖ‹ÊÕºu˜rÎU�ÿ¬9BL��¨.û½i’‰* G™ªå¾ÔQÆ”×QGç*€HÖ!&��TG²6›)¯£Ž<ÎU�ÿ¬9BL��¨Ždm6S^Gyœ«�þ!Ys„˜��PÝ¢ïÍUcQ¹ò¡ŽEåjÝ:L9ç*€HÖ!&��TG²–XT®Ö­Ã”s®ø‡dÍb�@uÙïM“LTI8ÊT-÷¥Ž2¦¼Ž:ò8WüC²æ1� :’µÙLyuäq®ø‡dÍb�@u‹¾7WMHŒEåʇ:•«uë0圫�þ!Ys„˜��P]ö{Ó$UŽ2UË}©£Œ)¯£Ž<ÎU�ÿ¬9BL��¨Ždm6S^Gyœ«�þ!Ys„˜��PÉÚl¦¼Ž:ò8WüC²æ1� ºEß›«&$Æ¢råC‹ÊÕºu˜rÎU�ÿ¬9BLªÑ8±¸_�À7‹ŽMU2‹Ê•u,*WëÖaÊù>�üc¥WÒÙ‹ˆI5ÄÉ=bÀGÙc“I&ª$eª–ûRGS^Gy|�þ±Ò+éìEĤâä1à#=6±¸_�øÅJ¯¤³“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽ“jˆ“{Ä��ÀO$kŽØÉ¥\ ŸÈà#­Ý@ÏÓׇÒÞ¹&ûá7ÑOþcßq˜��ø‰dÍë19ïK·µ¿ÏŽGÉÚ?þ˜þ¯š¥âô| Ánú™Ë>ã(”N\n–[ŽâàD’7ìu£MêéKøgé¿ù~Çí¶TÌ��à Éš#Nbb’—q²Ö¼_|QÂ0¬œ´-§g2:¹+8Q½!Áà‡ôõ¬d¼,íàD.ÒW¢ìV†áA”¤µ¤ÝíEÉÙùäõ~Oºí–Wq´‰þ ��à'’5G®j²¦Ÿ[—ªIÛjqºˆ’±vò^­×%<{–¾n<—Qx[:áÓôg3â¸#­ýPÎf 9^ž…²ßÊŽÂm/'û&���–F²æˆ“˜xœ¬™eQÒ¶Zœ4Y{Y:ÝדËÛoK”MØrÉÚå©ôöZÑ{½"½áOÉk?ɰ¬�� 1$kŽØ‰É¹ ÓK�[Ò~ãäÿ&Y»ÉàÑ=鶯•ËÑ@Å÷hÝ’pøµ„ݽxÛvZûÒ;ýA.†ŸIй–¼–Mz¢ºN;ÒŠ_ïJïá»<2#Uåâzf,eI›–-O“µŽƒ39ííÇÛØêÜ—Ó 3d6¬=²«ÛQkR›m ]¢˜Ë(Þ„g2üVzëÎ=é›Ë/ïü/Q Òöé}š¶ÅžôÏäòb(G:YL\W´´:rx2Šš!wžù S÷ï-7"¨¿���ÿ¬9RLΓÄ$N²ô~«ôçñ ¼&(·Ò“÷Ý4Qy*ag7}MïÕ e%4É%Ñk/½,Ýw5Á¸”‹ÓûqâÑêö£š/å¼ ­ö¡ âH/#¼+Ýñe…å’÷*_òI›¾¶<“¬]D›v&ýMz¢Ïwp”&KÙd-—N(#-^[sÏÜxÚñ6]{²7þÌÑ:'”pƒx‰b{rú0j(årÔ½¿¦ñ¾ÉAöº‹¯¥§ uë@úç&!M/í,Œ*.¦ï���ÿ¬92ub¾Æb$ VKöz§ÑizjÆeÉ(’IÖÔwÒ×D`jô%Mâ²#M¦®8¡Iï Óµþ0úi¶YÛ[u1I›þy™d-þ1Mftt«÷uTê*Y3—UšŸ“d-fFÄöz2œ4Xº-¹v4m4^7ý9Ó>I˜ý=]ç¥\=Õ¬s���ØF²æH½11'ù™d@UJÖÒÄk©dm2!G2"wO ôÕÅ⤨ÂróæM9>>Žÿ¿¼\²FÅSúÿYÎÆÉšI¤¢÷JœêÅiêQ�3’µ©Ñ´c¶}²tfÊ0¹|R7Û>—ßH¸Ÿ]‹Ý0ï¼r«Å���¶‘¬9RoL\'k*IDâ‡nkâ IÛÔTø³ÅIÆœÅ$i†¾¶¼b²ooz)§Æ©Ó¹1‰Áø™t«%73]œ&÷œéècøDþÔÿu÷U“5u(Ýönœ‡ýôµÍ²í£ëÄ ´Ž®ýQN{¯¤—¬.oµ˜��À6’5Gꉚ¾|n|o”•d-Ã$&&²ÐÏ=kÉ'i†–-oV²¦LB£ï™ÎôøJü^eS÷Ç÷�Þ_0Kz™bæ²$î+&ki29I¾Ò6›JÖ"ãѵ—¤ýÒKÒí—,gµ˜��À6’5GjÉʼnñe~{Ò Oåb<©EšʼnÃóI¹g-3ªd¦²ÏNXaFŸâK5©2£PúéÓë—oOº”%i†®³´8i¹^r¿Ö39 _bKˆ2ñju 3—uꌙap oꬌékó¥É®yÆÛx&Çè={¿‘Ãà‰œ/“¬¥ë&‰¤Ž²™:÷¥Þ•`œ”e’Ññä/Ë[)æ���°ŽdÍ1¹È}s?“NùþÙCùõî5éKø}šL¥Ý_ò+-¿Ö–à÷ýdmüÚ­(qù8I,ÆË/åÿõÿ$xø›ñ´þ­Î¡ _tgêX”¤ºî2’¬Ì¶æGŸbš\¾2Åôž°'*ˆ¿e.(Œ’¦ñ%—zOß9éßG9[»r¾=cÍçäõÝ`¥o*3³§&ã÷ŸHÿžŽfŠíÝ•&1ô½��à’5G®jLª&iûÎ’Ö˜XÄ æ���~"Ys„˜TCœ–‘\ŽºêÄ"1��ðÉš#Ĥâ´ˆ¹Ï\>™>ˆ{ Ä��ÀO$kŽ“j|‹Sី™Kî Ve'éÊýŠÏ»›G?���üC²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ��üD²æ1©†8¹GÌ·¶)‹ûvÌŠ5‹›@ó¬ôD:x1©†8¹GÌ·mê1·‡Ø6ƒ¸~°ÒéàEĤâä1ß>´©{ÄÜbÛ âøÁJO¤ƒ“jˆ“{Ä|ûЦîs{ˆm3ˆ;à+=‘^DLª!NîóíC›ºGÌí!¶Í ôD:x1©FãÄâ~Áv¡MÝ#æöÛfwÀVz"¼ˆ˜l7Ú>at˜ÛCl›AÜ?Xé‰tð"b²Ýh_ø„ýÑ=bn±mqü`¥'ÒÁ‹ˆÉv£}áöG÷ˆ¹=ĶÄðƒ•žH/"&Ûö…OØÝ#æöÛfwÀVz"¼ˆ˜l7Ú>at˜ÛCl›AÜ?Xé‰tð"b²Ýh_ø„ýÑ=bn±mqü`¥'ÒÁ‹ˆÉv£}áöG÷ˆ¹=ĶÄðƒ•žH/"&Ûö…OØÝ#æöÛfwÀVz"¼ˆ˜l7Ú×í&/Mhê}¯2bn±mqü`¥'ÒÁ‹ˆÉv£}íÙäØ6µíìîs{ˆm3ˆ;à+=‘^DL¶íkÏ&Ƕ©mgt˜ÛCl›AÜ?Xé‰tð"b²Ýh_{69¶Mm;û£{ÄÜbÛ âøÁJO¤ƒ“íFûڳɱmjÛÙÝ#æöÛfwÀVz"¼ˆ˜l7ÚמMŽmSÛÎþè1·‡Ø6ƒ¸~°ÒéàEÄd»Ñ¾ölrl›ÚvöG÷ˆ¹=ĶÄðƒ•žH/"&Ûöµg“cÛÔ¶³?ºGÌí!¶Í ôD:x1Ùn´¯=›Û¦¶ýÑ=bn±mqü`¥'ÒÁ‹ˆÉv£}íÙäØ6µíìîs{ˆm3ˆ;à+=‘^DL¶íkÏ&Ƕ©mßÞýñ\†ý%è\“Ý` Ïã×~ApCvZ¯Kxö,~¥ 칺±mvßfŸü`¥'ÒÁ‹ˆÉv£}íÙäØ6µík½ïó»;q;;×d?üF.Ó¢±Q(¸Ü,·$%©“Dk_ ŸHØëJ{\~M:ÁÇÒþYúo¾/³êR.å¼ ­´N’µÍu||,aÊ?þ˜¾2_µØ^DûA;Ýßv¤µÊYaÇ}*agw¼ÎÎήt§iYäb(ýðžtÛ­I=@öOå¬(‡ƒ‹tEWHÖ�D}1ý·Vtð"b²Ýh_{69¶MmûúïûLF'w¥ÓÒÖ ~H_ÏÒÉ—¥œD§Éƹ Ã(IkI»Û‹’³óÉëý^r¼¬˜¬%žÙ>ß$YóÇ€ê4QÓx½øâ‹•’¶eb{9:–Ãεèw¢}pjß4.åbp(íö¡ .L6§`“ý³Ý•^˜þž¾Þ—^w/ª¯õƒº’µ¨ï¼û`­~àû4à+=‘^DL¶íkÏ&Ƕ©m¯ç}3#3ÿ²ÿ\FáíÌÈDz­?{T#Zã,”ýVvny$k›Ï$kfY”´-[³Ìî„2J”‹ 4Q+ÁºüFÂý—¦GáÖ÷ƒkëýÑÂöiÀVz"¼ˆ˜l7ÚמMŽmÛ~óæMyï½÷äñãÇòí·ß¦¯ÎWOÌ4Y{Y:ÝדËÛoK”=‘Í%k—§ÒÛÓËÇ^‘Þð§äµ‚ŸdØ HÖ®¸|²f–²¤MË–¡ûȵÎòF|9ãžôϦ¶©dM÷ÉW¢õZ²×;-&v©Ëá9¨#Y‹¿kk0»°lÜØa¥'ÒÁ‹ˆÉv£}íÙäØÖ±íwî܉ë1‹žÐ¾óÎ;s“·zb¦ÉZG‚Á™œööã{ÅZûr:¾tl:YfÔ}z1”£h;’{Õöäî«ñÿM²v9È£øþ¸tÄîr$ƒGzßѵhÛ¾N/ËÔß~î}-¹ú 'ò+ª'æ Œ?Ûž'C99œõ9ôÒ½ÏâIXÌ>ÓêÜ•“4ÑžŠ×ðk ãKü¢õZûÒ;ýaúws úåèDî›õãK]È`*¯¦,Y3K>iÓ×–¡ûâõàD~8½Ÿ\Ê6sIn$›¬ïѬó2ÇìeÄ{Òí= øTF&QË~Þh;ÎÆmmgÿãôrÌ·åè‹ãé}[ëü6¾,s78–§ã÷ˆÚâà(ª?y÷d½I=ú­ŽžŒ–ÞÏ—;�;¬ôD:x1Ùn´¯=›Û:¶ýÃ?Œë™·hB§'·Ãá0þ}m}&Y‹N`/Ϥ 'éÙ“Âl²¦ÿ¿•lOöò²u]|-½(q'‰éÏú>I²–0BOhšl‡.íƒ(!‰NÒÇ'É×e¯{/I\L]­éŸ/{[¤ïgW&ÆSŸ-Ñ4Ÿã¼/Ý–¹_+:iï¿'«Åxi²í3Q\“ËS£×^zYºïGí%|i¢ÓêöEÓœx½ô=õçÑ‘h2°×“á’á[”¬™Å$múÿe$Éš~ÞÉçŸJ<³ÉÚx²œõ.Ï·Aæ^O½Ì²û(íéåÅæãiÝm·Ïå4|]Z­¿H_ËlÛx[u‰’Àð4ªÍŒ ^—nÿ»ø.‡=Ù3œÈÆ [Wº>€æYé‰tð"b²Ýh_{69¶ulûW_}×SuÑ\ýw}™d-þÑ$Jæ$Ðv²öLÎô¤5wYeñ2Èôäw|jfÌÎôg¶/;z’ÿ½õdÛ îe¢ÂçH“µñ%}ñÏÙx}'ýîõÉú±4‰ËŽŠš§¸=MBPܶìe¯³ËëY–1IÖÔyqdØr²–ì£:¢Ö“ái¹d-f’èü%Ä3öÑt{'íiÞÏì玲2¿“&„e÷’–Y6î�ì°ÒéàEÄd»Ñ¾ölrlëØöï¿ÿ>®§ÊòÚk¯Å—Fêÿ×§'Š™d-2M‰'nøs”L™d-3­þ #-³ÍH "‹“µüÉküŠ“d;%>GnúyñZœ¬%åf”m]UGÖô^M³ÿ/c:Y‹ŒG†ÓÉoÎ2ÉZšÌο×rIfÂý:»ä£AæÅ4þ3“µü¾8£­*'kÙÏ3»/-²lÜØa¥'ÒÁ‹ˆÉv£}íÙäØÖµíÿò_þ˸®y‹^ ¹ê=>³é‰ât²¦I™¹<N†NçÆ$!ªý¤—d­¨Êç0OБPú:Š“®:’µº.]”¬™$ÍÐ×–QHÖÔxd¸%íΫђ&kã‘ÆùŒ,M“å‡AÚW¢eü¨€4þÖ’µHœ,,/i­jÙ¸°ÃJO¤ƒ“íFûڳɱ]eÛ5áÒKõ^53¹Èÿð?üñ¿e‹®›¥¯­OOóÉššLÑ?ýPáÉ¥rå—[Ëéý÷åQ¥üš“èlò7y’µYŸãY:Â9¹É$]ë%k™¶íÊÑøùyz©ê¡Ü_29/KÖòIš¡e˘™¬©ìˆ×8Y‹öèø¯èµÒ‡OkÂó±>šñ€…LòlöÇ4þ6“µø>µ_ɫ헒Ñn½t9ølÆ%™ó-w�vXé‰tð"b²Ýh_{69¶U¶=›œéeŒú;ú¯þ¬¯k¹Îü¨¯ÏZŽÓš&ôõµÅ“r\/m0÷“eO#ÙËÍ:„ƒÉ t: aÈ›•g_Ì$…éd“Ë0“ÏžŒä“:sIfv¤Ä$™$ff2¸ºZb¾Ð¢Ïq‘&sæùbQ¢pt˜ŒîtÞ—ðð®ôÏÿ©ø¹ó“”(3Rš^Ö:ž„$ý¸ –¼J哵²$ÍÐuªK÷Í’ËqÇŸ#“¬%ÉM: G«#A˜¹lQgàŒÒî›ÙÙ=’ƒñ¾göcÓf&‹âz*áÁû2¸øo%ÉZq5‰åd”¬¸¿×õ·åâÀ+=‘^DL¶íkÏ&ÇvÖ¶ëI©&Xz‚j’³ülŽyúº®—]t"[S÷'©Ï¼_îRÄÄÑIç+ÓÉZ,JúOMŸüeÿcéGdªŠN¢³S·ß–Ï·eWO¨>‘áø$×¼OqÙ úòûøäؼ¦ æç¹ßË%+Ðzì2'ùó>G[‚þϘ©÷KÝ?9’{q"Ö‘ÃãP~­£eÙõßOFÐÆ¯E ÃàãtÒÌk£g¹Gèl’ëMÝ¿(I3tÝJÌhàx»³#Fš<M%k*z}øDæqÉ¢txØFÑ_ÂèS ‚ßLêÒýõÈÔ¡£t™G |\¦ZÜf3Ú6yýWAwº_v>ŽIMÎ'¯í¿—§¹×ÆË’Søëï�hž•žH/"&ÛÍßöÕ“Ýä¹<ÓIÞ›Üwt۳ə>àZ_[”œÍ¢¿gMòê‰@ˆyuºßWIÒ b»œüôÔ2ó/³éú�šg¥'ÒÁ‹ˆÉvó¶}ÇÓRG‹'ÉÚ*IÊ&ÑÑ.½lQ\­Û^å!ÖU˜û×´.3‘H™M‹Ù6 æöÛeè%tãÇkäè={û÷+ÏÖJÜ?Xé‰tð"b²Ý¼nß©‰šg’ý·JÒæ{ßÉ&gš˜e“³:·]ïaÓD· Ž7îs{ˆmuãbç'Ñ{ïî¿+=ó î ˆ;à+=‘^DL¶›×íëi²f–EI›o±ÕmÕ¤I·[3½´Q/qÔKó—v5µí¾Å,¯pOÜÌeÖýFþÒm†ÞĶpOÜì%;S£{e÷Œ†Kß_¨¿  yVz"¼ˆ˜l7¯Û×ódÍ,eI›–5)›œé¶ÌKÎòšÚö¦cvs{ˆm3ˆ;à+=‘^DL¶›ö-Œ>¤ÉVöõø/¸C9ÊÎ`–Ÿñk*YËÎ(7kÖ±ÌÔÑñe3ÝôyZÑ¢3˧b&£“»é_õá»$>­” –%kfÉ'múš+³žq–ŸF.·=«©÷½Êˆ¹=ĶÄðƒ•žH/"&ÛÍZûš‡¸NŠésu~%·âç(¥ÏáiÊàâr2 XéÃm•yVSö23ó<Ÿ4Y‹Ÿ±õŠtÃÓä&õñó³ÒçýÄÏ`ºý~zÿƒng÷Q-ÉšYLÒ¦ÿ·¥Ê3ÎÖasÛçiê}¯2bn±mqü`¥'ÒÁ‹ˆÉvÓö­s™H«Ö랥÷h"uëWéÃkÓ$kü�Øôç¹ÉÚóôÁ¹ÙdÍŒ¸%ÉšyðjqÛ’¯>‹G÷tD­?}{ªø{«-zO˜þk‹A[v†Êªlnû<M½ïUFÌí!¶Í ôD:x1ÁÊâQ¬–´ƒ“(¥Òº¾+ûQÂ4"éMåaò<µh_[/Yû))o¤ á fÄO߫ݕޣŒJVÍ«2²¦Iš&P:²¥?oª¦¶}“c¶©ˆ¹=ĶÄðƒ•žH/"&X¹Dñ†'ÇÒÛ{5¹1%oÃPºí]iwïIØH_“®:’µëÒí—–Ïp1”þà ½o-ZÒK1™—¬e“4C_ßTMmû&ÇlSs{ˆm3ˆ;à+=‘^DL°:M;œLô1¾ä1ºíH«Û—óø…4éªë2ÈVG‚£aTš¸<{$oÞŸ1ªDÛ·+ðiúZ¹YÉÚ¬$ÍÐòMÕÔ¶orÌ61·‡Ø6ƒ¸~°ÒéàEÄk¹<•Þž^v˜Ü36N–F¡t¢}«µÊÙ¥Ž²}–>_g_zá] td,Mè&IžNPr ­¨®äÒÊ(Ù::œŒiwòµ„ûÙçô¤‹¹wnôHÆÛa’É#q©l²6/I3t½MÕÔ¶orÌ61·‡Ø6ƒ¸~°ÒéàEÄë1äï#;—ÓÞ~:mÿžtï?‘þ=éñštet–$sºÿÅ‹qÏî½Oõ?”“ -­N ûéHZþ‘�Ù©ûGŸJüFšòÜÜ<š¬UIÒŒMî;Mmû&ÇlSs{ˆm3ˆ;à+=‘^DL€Ä²SâorßijÛ9Þ¸GÌí!¶Í ôD:x1V³É}§©mçxã1·‡Ø6ƒ¸~°ÒéàEÄXÍ&÷¦¶ã{ÄÜbÛ âøÁJO¤ƒ`5›ÜwšÚvŽ7îs{ˆm3ˆ;à+=‘^DL€ÕlrßijÛ9Þ¸GÌí!¶Í ôD:x1V³É}§©mçxã1·‡Ø6ƒ¸~°ÒéàEÄXÍ&÷¦¶ã{ÄÜbÛ âøÁJO¤ƒ`5›ÜwšÚvŽ7îs{ˆm3ˆ;à+=‘^DL€ÕlrßijÛ9Þ¸GÌí!¶Í ôD:x1V³É}§©mçxã1·‡Ø6ƒ¸~°ÒéàEÄXÍ&÷¦¶ã{ÄÜbÛ âøÁJO¤ƒ`5›ÜwšÚvŽ7îs{ˆm3ˆ;à+=‘^DL€ÕlrßijÛõ}YÜ/°cV¬YÜ,�šg¥'ÒÁ‹ˆ °šMî;ô{��°’5Gˆ °’5��pU‘¬9BL€Õ¬�€«ŠdÍb¬†d ��\U$kŽ`5$k��àª"Ys„˜�«!Y��WÉš#ÄX É��¸ªHÖ!&ÀjHÖ��ÀUE²æ1VC²��®*’5Gˆ °’5��pU‘¬9BL€ÕhßÙä��`U$kŽ`5›Üwè÷��`$kŽ`5$k��àª"Ys„˜�«!Y��WÉš#ÄX É��¸ªHÖ!&ÀjHÖ��ÀUE²æ1VC²��®*’5Gˆ °’5��pU‘¬9BL€Õ¬-Oß—Åý;fÅšÅÍ yVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj6¹ï4µíoÜ#æöÛfwÀVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj6¹ï4µíoÜ#æöÛfwÀVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj6¹ï4µíoÜ#æöÛfwÀVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?X鉶:øóA »QÝZÿNëu Ïž¥%Æs…·’r³tB¥¥"ç2ì‡ÒëîMÊ[ >‘áÙ‘¼y8ˆj°Cß Àò6¹ï4µíoÜ#æöÛfwÀVz¢Õ~9’“ÃŽ´¢÷ØiÊàâ2-ȸ8‘ ý²ƒÒ"§ÆIÚžt{}šß»J¿×•vTßn@²øf“ûNSÛÎñÆ=bn±mqü`¥'ZïàÏì&#c­ýPÎ ùÚS ;·%™Ôë7¢õ¯É~øÓ»gr¾.­©Q¸zqÐV³É}§©mçxã1·‡Ø6ƒ¸~°Ò­wpMÖ®½*Ý7t¤¬%íƒ#Me`ÓÉÚå°'{Ñ6íìõd8c .vy*½ƒG$k€g6¹ï4µíoÜ#æöÛfwÀVz¢õ®ÉÚõ@?|-½Îµèý®I§÷µ\¤ÅÓÉÚ… ‚v¼M6/s\„ƒ°šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žh½ƒ›d-ʼ.GGrÐnEï¹'ý³ôÇl²¦ÿßÊw¥>K›ÀAXÍ&÷¦¶ã{ÄÜbÛ âøÁJO´ÞÁ3ÉZ”®ÉÅé}é´tfÇ}éžG¯‘¬Ûb“ûNSÛÎñÆ=bn±mqü`¥'ZïàSÉšz&£þÛñŒŽÉ”þÎ$kßI¿{=Ú¦–ìõNgL.â=`56ûÎ?þ˜þÏŽ¦ú=Ç÷ˆ¹=ĶÄðƒ•žh½ƒ’5u.§½ýtJÿW¥ÓŽ’¶8Y»”óþAòú¼ F,ã ¬ÆfßùðÃãúoÞ¼)wîÜ‘0 åñãÇ2kIäšê÷oÜ#æöÛfwÀVz¢õ>3YSfŠþ(1Û¹•&kéqOïk+›º?rñµÜ?ütÆc�êÁAX‹¾óí·ßÊW_}'kï¼ó޼öÚkñû¾øâ‹q§IÝ*I\Û®ÛPõ½·÷xs.ÃþÇt®e&ŒJûñUÏâWšÀ1Þž«Ûf÷möiÀVz¢í~yÊ~ëé J_ɸüFÂ}!2“¬E&‘\“NÊ`d|Ïd4%èÒ¿V?zÀjšì;šÄi‚¦IÜ{ï½'nº=U“¸º¶]·CëÒ$Rÿ¿ÈZï« KŸcYú®Q(¸Ü,Ùãí¥\ ŸHØë&—¦§õt‚¥?ü³ôß|ÆÚªÈ\%-$kWGµØNf~Ö¥ü¬z»Ù/s÷²_ ¥Þ“n|®ÖÓ äaÿTÎú‡r8˜Ì9íÉ€¨/¦ÿÖÊ^Ÿ>ë2s:þ‹ Æ—AfèøaLFbêhu$xøD†v¯Ô÷°<ûÎ÷ß_)‰Ó×tÝué{ÅÇ«tѺçÑuÖóLF'wÓcå ?¤¯gé‰äËÒN2M9—ax%i-iw{Qr¦>¥¯÷{ÉIð"ª{>d7ú|M>Še–õc~u˜~Sµo,ÛËѱÆô‰öÁ©}Ó¸”‹Á¡´Û‡2ïëÂdÿlw¥×¦¿§¯÷¥×Õgº¶£~PW²õw¬Õ\`Ÿü`¥'ÒÁ‹ˆ °šMê;ù$N·Ý,šÄékZ¦ë,“Äéïdë2õ•]©åëËüqlæ_öŸË(¼™HO‚£õgjDkÄWEL_õ°,’µÍ—ÝŸ«$mËÆÖì#sG†;¡ŒÒ“?ðF‰ZÙV|ÅÎKµÍ(÷ƒkëýÑÂöiÀVz"¼ˆ˜�«Ùä¾c¶=ŸÄi¢¥£pZ^%‰Ë'~fÑ:ô^»<-[Ÿ&k/K§ûzr9cûíÜ¥â¹dm|opÉ%걟dØ HÖ®¸Y|˜—´-[ÝG®uÞ7â˳Ï`MM%kºO¾­7ÆèËá9¨#Y3·j¬9Âì²q`‡•žH/"&Àj6¹ï,ÚvÓM/kÔK'Ë’83áIÙ’Ÿ|D_[Ÿ&k gã™v[ûr:¾tl:YfÔ}z1”£h;’{Õöäî«ñÿM²v9È£øþ¸tÄîr$ƒGzßѵhÛ¾N/ËÔß~î}-¹ú 'ò+ª'æ Œ?Ûž'C99œõ9ôÒ½ÏâIXÌþÑêÜ•“4ÑžŠ×ðk ãKü¢õâç”þ0ý»¹ýrt"÷Íúñ¥®2÷W7+Y3ˬ¤M__†î‹×ƒù¡ð ÖT6YߣYçeŽÙˈ÷¤Û{ Að©ŒÆ÷ÔO>ïN´gã6‰¶³ÿqz9æÛrôÅñô¾ßcÿÛø²ÌÝàXžŽß#j‹ƒ£¨þäÝ“õ$õè{´:rx2Zz?_6î�ì°ÒéàEÄXÍ&÷U·=ŸÄý³öÏâºæ-ÙÉGôçõ™d-:½<“þž¤gO ³ÉšþÿV²-ÙËËÖuñµô¢Äaœ$¦?ëû$ÉZvÂ=¡ýi²º´¢„$:IŸ$_—½î½$q1uµ¤¾ìil‘¾Ÿ]™O}¶tDÓ|Žó¾t[æ~­è¤=}i1^šl…ñýÚÉå©Ñk/½,Ýw£ö¾4Ñiuû¢iN¼Î^úžú³™´k…GâÌKÖÌ’MÚôçe$Éš~ÞÉçŸJ<³ÉÚx²œõ.Ï·Aæ^O½Ì²û(íéåÅæãiÝm·Ïå4|]Z­¿H_ËlÛx[u‰’Àð4ªÍŒ ^—nÿ»ø.‡=Ù3œÈÆ [Wº>€æYé‰tð"b¬f“ûNÛ®‰›ÖSu1›¬/“¬Å?šDÉœÚN֞əž´æ.«,^™žüŽOBͬ‘Ù™þÌöeGOò¿·žzb¾H…Ï‘&kãKú⟳ñúNúÝë¹Ï&qÙQQ3â·§I¦÷µd™wÙëlU’5³˜K€—1IÖÔä¬ã¤ßr²–ì£:¢ÖŸ1yY.Y‹™$:Ëûhº½“ö4ïgöwÓV™ßI²{IË,w�vXé‰tð"b¬f“ûNÛ®#lZO•E/¡\åäv6=QÌ$k‘ì#PöÃ?GÉ”IÖ2Óê¯0Ò2ÛŒ"²8YËŸ¼Æ¯8IÖl-K|ŽÜ4ôóâµ8YKÊÍ([™üv×¹,c:Y‹ŒG†ÓÉoÎ2ÉZšÌ®’t–2–è¶ëì’™KÓøÏLÖòû⌶ªœ¬e?Ï쾴Ȳq`‡•žH/"&Àj6¹ïÔ±íÇÇÇq=eËÍ›7ãK%³Ï_Ó××§'ŠÓÉš&eæò8M:“„¨ö“ÞÍKÖì«ò9Ìãtd'”þŸŽâ¤«Žd­®KF«Ž¬™K!õÿË($kj<2Ü’vçÕhI“µñHãü F––TÐøQiü­%k‘8YÜM/Y.^ÒZÕ²q`‡•žH/"&Àj6¹ïÔ±í³Nlõþ4½Ü±®ÙófÓÅ|²¦&SôO?Txr©\ùåVçrzÿ}yTé¿æ$:›üMÞƒdmÖçx–ŽpNî_2I×zÉZ¦m;‡r4~~ž^ªz(÷—LÎ%kùIFôµeÌLÖTvÄkœ¬E{t|WôZéç5áùXÍx ÀB&y6ûc›ÉZ|ŸÚ¯äÕöKÉh·^º|¶ôód—;�;¬ôD:x1V³É}§Žm73D¾óÎ;ñ([Ù³Õ²j‰Y<)Çõ’Ñs?Yö1’½Ü¬H8˜Ì@§³†Á¼YyöÅLR˜N¦1¹ 39©OF òI¹$3;Rb’L33\]-1_hÑç¸H“9ó|±(Q8:LFw:ïKxxWúçÿTüÜùIJ”)M/kOB’Æ~ÜKޥʒµ|’fhYué¾Yr9îøsd’µ$¹I'áhu$3—-ê œQBÚ}3;Ûâ£Gr0Þ÷Ì~lÚÌ$`QüOO%<x_ÿ­$Y+î£&±œŒ’÷÷ºžã¶\ÜØb¥'ÒÁ‹ˆ °šMî;ul{öòƪÖ}ßä/õ™éÜ¥ˆ‰¢“ÎW¦“µX” ô?žš:>ùËþÇÒÈTDg§ o¿-Ÿ…oË®žP?|"ÃñI®yŸâ²ôå÷ñɱyMÌÏs¿—K:W õØeNòç}޶ýÿ2ž1Sï—ºr$÷âD¬#‡Ç¡üZG˲ëÿ¾ŸŒ _‹†ÁÇ餙×FÏrÐÙ$뙺¿,I3tJÌhà¸î중&OSÉšŠ^>‘‡yB²èö‡Qô—0úT‚à7“ºt=2uè(]æ‘_'—©·ÙŒ¶M^ÿUÐî—£DR“óÉk»Áïåiîµñ²äþú;�šg¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆyu&Y[”¤Äv9ùè©eæ^fÓõ4ÏJO¤ƒ`5›ÜwšÚvŽ7îóêt†Ó*IšAl—¡—tÒ¯‘£÷ìí߯<[+qü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=Ķºñ±óŠè½w÷ß•žyPwÄðƒ•žH/"&Àj6¹ï4µí¾Ç¬pOÜÌeÖýFþÒm†ÞĶpOÜì%;S£{e÷Œ†Kß_¨¿  yVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj6¹ï4µíoÜ#æöÛfwÀVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj6¹ï4µíoÜ#æöÛfwÀVz"¼ˆ˜�«Ùä¾ÓÔ¶s¼q˜ÛCl›AÜ?Xé‰tð"b¬f“ûNSÛÎñÆ=bn±mqü`¥'ÒÁ‹ˆ °šMî;Mm;Ç÷ˆ¹=ĶÄðƒ•žH/"&Àj´ïlòÒ„¦Þ÷*#æöÛfwÀVz"¼ˆ˜�p…ã{ÄÜbÛ âøÁJO¤ƒ�®p¼q˜ÛCl›AÜ?Xé‰tð"bÀŽ7îs{ˆm3ˆ;à+=‘^DL�¸ÂñÆ=bn±mqü`¥'ÒÁ‹ˆ �W8Þ¸GÌí!¶Í ôD:x1à Ç÷ˆ¹=ĶÄðƒ•žH/"&�\áxã1·‡Ø6ƒ¸~°ÒéàEÄ€+oÜ#æöÛfwÀVz"¼ˆ˜�p…ã{ÄÜbÛ âøÁJO¤ƒ�®p¼q˜ÛCl›AÜ?Xé‰tð"bÀ=Þ°¸_`ǬX³¸Y�4dÍb���`$kŽ����Ë Ys„˜����XÉš#Ä���À2HÖ!&����–A²æ1���° ’5GˆI5ßÿ½ ‡Ã©åñãdžáÔrçÎëˇ~Xxßü¶}ûí·é–���õ"Ys„˜$~üñÇ8É9>>Ž“ŸwÞy'NŒ^|ñÅ8Fúo>izï½÷ IÓW_}UHœê\´þü{jò–ß¶›7oÆÛ­‹yM×ÕSëÑä���XÉš#W)&ftÌŒˆ™$&›Ôh’¶MIM> ÕS?§IB_{íµøg3Z§ë2*��€yHÖÙÖ˜h¡ ŠuÒÏiFÇ̈˜–kr¢ ÍU¥ŸßŒÖ™X™Q9Mä4V&q���Éš#Ûý2 ‡5ÒÅŒ’]õ„lU7MÔ4Ž&3£pšè2��p5‘¬9²i11—õi–O"ô5Mڸˎlì³I±»Ø_ÊÅð‰< :ÒÚ dð<}9¦e¡tÛ­xØiuäðd½ ��€º‘¬9â{L4AÐ$@Gsô²<Ý^ý—Ñ?˜QÍì妚@ëå“Ú>µ&oç}é¶’û wrÉÚåY(û»¯KxöL.GGr IÛ^O†dk���µ#YsÄǘdGoLr¦?ëëðŸ&Ðzùd¶ý4™Ó¤níËQŸ$ØÍ'k2Ú$g���ެ9âCLÌɽ^Ö¨—ÕéÈLm'÷hœ&ÙّѵÌLÖžJØÙ•N(£ô���ØC²æH1ÑL/‘ÓKå413“Ô~Ù¼cedíòTz{-’5���GHÖqMÂtôÌŒ®è%rú3÷œ]uÏd4x0™dgOºá©\¤¥"ç2<:”N|¯ZKÚo¼‘ü?NÖžË(¼•þ^fÉÝÏ��€z‘¬9²(&šPéýb«ÐQ”l‚¦£gzi#x&gáëÒjíKïô<úù7¢}åºtûßE?ŸËio?SžþœOÈÌh#k���N¬92/&šXi¹^ªX•¹ÄQ3“ éÏÜ{†‚øòÅ]Ùë¦Sì›é÷¯Ë~ø<×[­LydÖe$k���N‘¬9R½<Qï%Ór]4á*“OÐôG4,4 ¥³³+ðiúB–¹Ä±-Á`rQ$É��@óHÖ™M²²‰šIÀòtäM' ÑuõRG½ä‘ BPYœ¬íHk?”³Â”û$k���¾"Ys$MÔÌ=fùEGÛ4ÓiØIа¶ñC®¯IçðXF&a»üFÂÃÿMNûÒÚ™¾ òrØ“=ÝIÖ���C²æH>&:R–MвË_ÿõ_ÇIš®Ã,ŽX_:ÁHa_»ß³vyq"A<Kd:Cäå™ôö&뵤¥q&éã¡Ø���N¬9’‰Ž˜O„KFÑP¯ìÔüÑÒêHÆ£l—£¹ß5 Úž|öP~½{M:ÁÇÒ~?sêþÝ` fÐMg2eŸ��¨Éš#&&:!Hö„·lYu  f¤Xÿ‡é«���XÉš#½¤Ñ$c‹–e¦ñ| #kúGsŸå¼™M��°Éš#“üÌ‹Nv±©tßÕ™MuŸ×Ë~¹D��`y$kŽhLtÔA½TLOdÍR6+ä¬iüM¢£ÉÙK$IÚ���ª#YsdÙ˜è}?Üûƒm¡II��ÀrHÖ!&�I��À2HÖ!&ÀI��Àb$kŽ ˆ¤ �� Éš#Ä(GÒ��PD²æ1#i��˜ Ys„˜�Õe“6}NÛ?þ˜–���\$kŽ`yš´½óÎ;ñõ?~œ¾ ��p5¬9BL€Õé3õáñ7oÞäùƒ��àÊ Ys„˜�ëÓÑ5eÓÑ6îg��ÛŽdÍbÔCï_ÓûØ´O…aÈýl��`k‘¬9BL€z}ûí·rçÎøÒÈãããôU��€íA²æ1ìøê«¯â„M7îg��Û„dÍbØ¥—Dêýl:å?—F�€m@²æ1ìËNõÏ(��Øt$kŽÀ½4R6¨ ��6Éš#ÄpKGÙÌ$Œ²�€MD²æ1šažÍ¦÷´��l’5Gˆ Ðe{íµ×âE§ü��Ø$kŽ y:º¦}‘Q6��° HÖ!&€tdMGØô~6q��ðÉš#Äð‹Î©÷²é=m���>"Ys„˜�þÑY"u¶H}6Sü��߬9BL�?i’¦Éš&mL>��|B²æ1ü¦“Žèe‘ÇÇÇé+���Í"Ys„˜�þÓË"5aÓûÙ���šF²æ16Cö™lÜÇ��šD²æ16Ë{ï½²éh��@HÖ!&ÀæÑû×´ï2½?��hÉš#ÄØL:C¤Î©#m\ ��\"Ys„˜�›K“´;wîÄ÷±1½?��p…dÍbl>3½ÿW_}•¾��`Éš#ÄØš¨iÂÆ}l��À6’5Gˆ °=ôRHMØô>6���[HÖ!&ÀvÑûØô¶wÞy‡‰G��€$kŽ`ûd'!aìÓïR÷ €æ¬9BL€íe ÍL‘€]|—ºGÌf‘¬9BL€í¦Žø4S¤sXüXPâé1še¥Ò±‹ˆ °ýŽã„MÿmÇ?Ðõ"žîs YVz »ˆ˜�Wƒ™)òÃ?L_iÇ?Ðõ"žîs YVz »ˆ˜�W‡&l:éˆÞËÖÔÄ#sü@;Ô‹xºGÌfYétì"b\-fjÿ¦fŠä˜ãÚ¡^ÄÓ=b4ËJ¤càjÒѵ&6Ž9~ êE<Ý#æ@³¬ô@:v1®®&6Ž9~ êE<Ý#æ@³¬ô@:v1®6× Ç?Ðõ"žîs YVz »ˆ˜�¸s玳„cŽh‡zO÷ˆ9Ð,+=Ž]DL�h’¦Éš‹„cŽh‡zO÷ˆ9Ð,+=Ž]DL�(“°½óÎ;é+vpÌñíP/âé1še¥Ò±‹ˆ �Ã$lz›-sü@;Ô‹xºGÌfYétì"b ËvÂÆ1Ç´C½ˆ§{Äh–•HÇ."&�òl&lsü@;Ô‹xºGÌfYétì"b`[ Ç?Ðõ"žîs YVz »ˆ˜�(c#aã˜ãÚ¡^ÄÓ=b4ËJ¤c�óhÂvóæM Ã0}e=sü@;Ô‹xºGÌfYétì"b`‘o¿ýV^|ñE9>>N_YÇ?Ðõ"žîs YVz »ˆ˜�¨â«¯¾Š6MÜÖÁ1Ç´C½ˆ§{Äh–•HÇ."&�ªÒ‘5MØôÒÈUqÌñíP/âé1še¥Ò±‹ˆ €eèd#:éȪ Ç?Ðõ"žîs YVz »ˆ˜�XÖ;wVž!’cŽh‡zO÷ˆ9Ð,+=Ž]DL�,ËLéÿᇦ¯TÇ1Ç´C½6.ž'´[ÒÚåì2}mÃlë>|9È£^WÚ;·$=O_üc¥òåTDL�¬bÕ"9æøv˜ïûï¿OÿWM•x>²­§ëî´^—ðìYZb<—Qx+)7K'”QZ*r.Ã~(½îÞ¤¼Õ‘àážÉ›‡ƒ¨†ŠHÖ<õTÂÎnÚ¾$k𛕸{=ÄÀª4aÓcÈ23DrÌñí0ŸÆG/õ­š´UŽçåHN;ÒŠÖßiÊàbF¦'R/K0ø!}!rq*aœ¤íI·×—¡ù½‹¡ôãQ˜Ù –HÖ¶ÀöîÃ2ÚÑç#Yƒß¬ô@¾œŠˆ €u˜"k?©…U´Ã|³TIÚ–Šçó»IݳG¶ttåvæDý‡èäýF´þ5Ù¿‘bz÷LÎÂ×¥55 ·ý–ŠùF!YÃf°Ò··c¯Ž˜�X—Þ»Vu†HŽ9~ æÓøä—yI›–W¦ÉÚµW¥û†Ž”µ¤}p$£© l:Y»ödO·a¯'Ãq±ËSé<"YÛ $kØ VzàövìÕ�uxçwâeŽ9~°ÞC9 ÒËýtiuäðd4ºËaçZT%+Ý{ò0xWÅ'¦ÏdtrW:-ý=½äïÁ§“$är$ƒ0HËÓuîŸL%;—£¹?¾¯Kë'— V”üîìeVÒ¦¯W¦ÉÚõ@?|-½8פÓû::E7²Éš9q¯ó2Ç(ƃß&÷¾Gã.£&ûL‚x{’ÏÙêÜ•“Qr_ÝdÒ‹}éõ?–n»%;í;Ò ¦õÜ“~x•›äó\†G‡™vŠ>ãáqôzñ¾<ó¹¦îé«0J¨ëy%3bš,i²•}}7j÷çócOÖ²qIb•á®t§éïi»>HÚ&.›îå}X•¨;/¦�uÐQµ›7oÊãÇÓWfã˜ã»íðô»×Ç÷d]ŽŽä@O ãUSþ’´ƒ“4AÑËü~•œØž÷¥Ûº1¹_KïßꚣôrÀöÛÒ×Ûñý_“ѩ˳Pö[&ù‰NЇñý\­n_Îã:ªINvç/Ù¤M®Ì$kÑÇÇ&:±>蟥Él6Y3NdOÊ×4 ¥c>‡IŠâ¸GqŒÛ$:éï¿=¹NGíöL ë|.§áëéÏf‰Úìäî_“ÖþßÉŸŽ¢vIÛñòLúš<·£ŸµÅ£v9½'rÓí¢íûòŒ‘ÆÙô}ýc.YÍŠEñ=¸•^ò:/ÖñÊÅ‘53º:Yç2ªFclö ½ö¶ìÿ0aêmÉ^ï4Z{NŸVd¥úÙ±›EL�ԥʄ#sü íP÷2‘&kãËöÒŸM²4è_÷{ÒN§PÉ(BnTrÂjN>S—ßÄ ÂÎÎ+Òþ ÃÞ+Ó— ¦sdï ›µíë,š´é¿•e’µlâ²ÓÚ—Þ©ÆÃr²¦ÌhO.YÇ6þ9›˜íÐ8ÿ¿3‰ßÔ%š&‘0뚟M²¦~JÚ*[_üž¹úçÈ·C“KV²Ÿfï/ÔDê JÆ¿‹Zë—A¦qž¬cúJº_L%Ô¹EÛæYyŸ3fþnC 6ƒ•–b("&�ê¤#k:ÂVvÿÇ?¸i‡ÜTóã‘53ú 'fš˜ýVæ°tJù¸¬Ý•Þ£A:Êb.ýÊžð+󺞴þ“„¢†‰6’m[¼è¾®“ìèÿ+›JÖÔdt%™ÒÿÏ™d-MtóIêºòÉš¡³K†÷Æ—Ò“µÜˆ‘IÖfÆ\/÷{"a:[e¾í’QP3º–&tóîËËY*æN¥mffûÔ}zÿ~ñs•Æz…d-.¿.]“Ìésžñ·]‘g¥¥ØŠˆ €ºÍ»cŽ춃ž¤‡ÑIèn|oLØH_O>ÇÉšÒDîãÌ};ÙK£“؇™ûÒâ“Þ(¡'eÙ¦ÉÚÌg˜-'Ù¦òÅ$i†¾VY!YSçrÚÛ—dJÿW¥ÓŽ>C|¢nF¥¢×—Hd*$kQ{Ä÷œé‰|(ý?Åå+'kæQšp‡OäOý_G‰E>Ñ6 Ä+Ò;ý£ôö^š“l-s§L›é¥ŽOdÐ{5—h/ŠõªÉÚ¢Ë}çô9øÛ®È³ÒRì�EÄ@ÝæÝ¿Æ1ÇVÛ!½¬kr☞|N%k†IìZ3FgÌImrBjîÛ™žî>{9ÝÓt*Zgj½ íÞR“)h³–|’fhYe3“5•ýÈœ¨/q+›º?rñµÜ?ü´ú®§’5“\dFfÒòÕ’µtd©u ýódƒ’Ä"Ÿ¬EÍŒ®µÛòRfý*–йkÙâ©KG«ÄzË ¯I'ølr ±^&üæorIþ¼>×<¯ÛS¬´;@1`CÙýksü`µÌ_ùã¤JO ÍÌwûÒ ïJÐHxð`r™žØÆÉÝ葌G!¢ß'IOlÇU˜™£—â :vÇ'˜“ý|ÙeöóÌÊå¿,I3tª’m,¹7k|ÞtR4™ˆDOÆÃÌ%lÏd4%èɤ+U¥ u2ZgF'M2%Éf&ÇÎûÞ’¨ÿ¶D²–&vf„s<3h”Xô~#‡Á“ÌèIPÍ„Õ-s÷ÌLŒÓ—£Tkq¬ÿ)ý£Cf1í2?Ïô©èµhÙ Žå}Ö^úód1ïµIYŸK_ò…n76ƒ•–b("&�l™uÿÇ?Øm‡Ì%}z©×ý'Ò¿§'®&Éz*‚wåáøRÇÌhÀèS ‚ßÈC3í«#ÁÑpr¯S÷ß7÷@¥å¡¹¯Me“CSw6¹©&ùÝÅIšQ-žfÄ$ÝöhÉŽ”ŒÅ'Òæ2ÈŒü塺èçød¹G˜Ë,:â9~Œ@ôs»+÷OŽäžŽÔè#ŽCùµŽÂ'!KFv2¯GN£60“¦hÖ} 'ý»É¨èÔˆg"1-I^çÐ÷ôYò¹fÜGv1'Ö'ÿ»ü]œ›¸šÑÈÌ}i?zzŪý3‰_¼žö=3uÿœ>çßÛVZŠ ˆ˜�°)ÿÇ?ÐóUMÒ â¹ªô²ÀîÇ#æÛ‰vÝVZŠ ˆ˜�°)ÿÇ?Ðõ"ž+ŠG—›XÄ æÛ‰vÝVZŠ ˆ˜�°m8Ê‹/¾8¾ Í£êE<—0¾//½\ÏLq¿$b¾h×Ía¥¥ØŠˆ �Â0”×^{cŽ'h‡zyO3Ãc´-ó–™÷É9•™T¤û`åç}égÁö¡]7‡•–b("&å46,îl¯;wîÐÆž êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóí¦÷¯ÑÆ~ êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóíGûv¨ñt˜o'ÚusXi)v€"bRŽØ¸GÌ·mìÚ¡^ÄÓ=b¾h×Ía¥¥ØŠˆI9bã1ß~´±h‡zO÷ˆùv¢]7‡•–b("&åˆ{Ä|ûÑÆ~ êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóíGûv¨ñt˜o'ÚusXi)v€"bRŽØ¸GÌ·mìÚ¡^ÄÓ=b¾h×Ía¥¥ØŠˆI9bã1ß~´±h‡zO÷ˆùv¢]7‡•–b("&åˆ{Ä|ûÑÆ~ êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóíGûv¨ñt˜o'ÚusXi)v€"bRŽØ¸GÌ·mìÚ¡^ÄÓ=b¾h×Ía¥¥ØŠˆI9bã1ß~´±h‡zO÷ˆùv¢]7‡•–b("&åˆ{Ä|ûÑÆ~ êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóíGûv¨ñt˜o'ÚusXi)v€"bRŽØ¸GÌ·mìÚ¡^ÄÓ=b¾h×Ía¥¥ØŠˆI9bã1ß~´±h‡zO÷ˆùv¢]7‡•–b("&åˆ{Ä|ûÑÆ~ êE<Ý#æÛ‰vÝVZŠ ˆ˜”#6îóíGûv¨ñt˜o¶wÞy'nêËññqú›ð…•¨iĤ±q˜o?ÚØ´C½ˆ§{Ä|³ ‡Ã¸ «,7oÞL >±ÒµÁ1˜”#6îóíGûv¨ñt˜o¾;wîÄí¸haTÍOVz 68¦“rÄÆ=b¾ýhc?Ðõ"žîóÍWetQ5YéÚè˜FLÊ÷ˆùö£ý@;ÔKãÉâ~Áæ[4ºÆ¨š¿¬ô@mtL#&åˆ{Ä|ûÑÆ~ �ø`Þè£j~³ò-¢ iĤ±q˜o?ÚØ´�_”®1ªæ7+ß"Úð˜FLÊ-› íñ¦µÊÙeZ4öTÂÎîx]é„OÓ2u.Ã~(½îÞdVG‚‡Odxv$oäyºæ¶ÒÏŒíFûv�à‹Y£kŒªùÏÊ·_NEW)&ú—›÷Þ{O¾ÿþûô•ùV‰ÍåèX;×¢ßmI;8‰R¸¼K¹J»}(ƒ‹L6wq*aœ¤íI·×—¡)»J¿×•v´-»É6mìÚ€Oò£kŒªùÏÊ·_NEW)&ÙA•¤mÕØ<²¿Ï5Ù¿‰Ò³œQ(N(£ôG‘dÜ(__žÉYøº´¦~g;ÑG·mìÚ€O²£kŒªm+ß"|9]¥˜Ìº&ZŸ ¯ˆYV&k×:oÈíVTÇžôϦ°\²v9ìÉžnÏ^O†ÅL-qy*½ƒG$kØx´±h‡zi<YÜ/Ø.æ<QµÍ`¥Ò±‹®RLf%kfѲ|Ò¦¯¯B“µëÁ‰üpz_:­¨þÖ¾ôNÏÓÒÈT²6¹×­¾Ë/åbø™ñå˜ÉçkuîÊÉèYR:È£øÒÊh»úKW“Êöé…“ûå:÷¤Då-iÉèò\†G‡Ég‰ë»&ÃãèõçÑG¹5~]Ìg˜Œ.FË#‚º>¶mìÚ¡^ÄÓ=b¾}ô<ŒQµÍa¥Ò±‹êÉôD“I4²¯·%\Ä÷ci™u[9<Å£P³Š·¥?ºÑÉÝ4qÐû»H|Z)Ã0}ÿò%›´éÏ«H’5MZžÉ¨ÿv|¿Y²íI²4¬™IGò“¬á¼/Ý–¹gn² q"¥#t{:â§ŸW×ù\NÃ×ÓŸÍrC‚“?J¸MZû'::ˆÚ(zmðCÔ0gÒ?Ð{ëÒ6ÔÄ0MJ[ݾLRR½´óå4ÙK_ª`Õ˜csÐÆ~ êE<Ýó9æºm,,¾.u±ÒëÜÀma'&é$…ä»èDÿ@Â3MZ¢ÿw¯GIL2ÑÆåèH4!Û dðlvBÑj½.áŸ>‘4qP't§/ÔdëñãÇqr–]æ¬å³î*&Éš:—ÓÞ~œ¶:÷åT'q”¬íõN“Ë/㟳#wæ=_‘Þð§ø•˜n—~þ©Ë1/£_×dͬk~6ÉšúI†½W¦ë‹ß3W«Æ›ƒ6öíP/âéžÏ1·±mÔY¯M¨Ó÷m¬ë"6>ô¦Ó˜hb²Ê¢CÕúûf™’Žàd§°¿< åÖ}I“µqbþ¬ÉZœQÌN(’Ëër3&æè¶é"ë$kæ³­b:Y‹ŒG£Ò)ý£8L’µôsGIé8¹ª‹Î$ÞKF%£÷.&k·$·r’¬Í¼lQ/­|"a:3ådd-¡m»?]Kºy÷à•X5æØ´±h‡zO÷|޹m£ÎzmB¾ocý[±ñ¡7ÆDG¢VY¾ýöÛ´–YÌŒÓËâº3FZrÏ+$k¹„BGÒÒäc§Õ÷hPù2;MØâß›³h’fnlÕŸWQHÖÔÅ×Ò3Súw^“™8Eï¿Br3[Óøž3MjCéÿéH‚Ý5’5óXwøDþÔÿu”0O'k“-£äúôQ¢þ’tûߥeÕ­slÚØ´C½ˆ§{>ÇÜÆ¶Qg½6¡Nß·±þ­‹ØøÐ›ÎjLÒËïôRÇ“Á=ÙË]^w1 ¥ÛÞ•v÷ž„ýôõž¶EÉšÒ£‡Ád‹ü3ËJÌKÖ²I𡝝bf²¦²‰f6!ßGV6u$Jöî~:ãAÛy&ù»>I–žÖHÖÒ‘¿ÖôÏ“7OF7óÉZôÎft­Ý–—2ë/cÕ˜csÐÆ~ êE<Ýó9æ6¶:ëµ uú¾õo]ÄÆ‡ÞtvcbF[4!Ê]æ—&r“I)Ò Hª$kcf©Úý^³’µYIš¡åËKŸ‰V2JfšüèÕøž=i1e`&#Ñ B¡Ý`2AÉ\f†F“øefrì¼/ááÝ(‰úoK$ki;èý‚z¯áxR˜(æ½ßÈað$m?eÚÛLn²¼ÕbŽMBûv¨ñtÏç˜ÛØ6ê¬×&Ôéû6Ö¿uzÓÙŽÉøb%“Y$÷´e§šß—^xW‚þ $¡x$ã¤ÏLd’Eš#›¬ÍKÒŒ¥c“Ž`™÷ÈßוH·9©¡ÊêÒêHððIéýy3/¹Œ~¿Ý•û'GrOGît¶ÍãP~=c“ѲÌëã¤9Ú^óMºä¤7nÓìã�Œ¤½—ŸXÄÐ÷Æv£ý@;Ô‹xºçsÌmluÖkêô}ëߺˆ½é¬ÇÄL425­»šÌ’OÁÿ‰ôï錂פóïÞ–Î_d‡lÒ3úT‚à7òÐLù¯ÉÌѰÒ(Ž&kU’4ƒýeY«O,bóíGûv¨ñtÏç˜ÛØ6ê¬×&Ôéû6Ö¿uzÓ]¥˜|ÿý÷éÿªaYR|OÞj‹Ä|ûÑÆ~ êE<Ýó9æ6¶:ëµ uú¾õo]ÄÆ‡ÞtĤ±©àò›øáÙ«x©8ÙKb¾ýhc?Ðõ"žîùsÛFõÚ„:}߯ú·.bãCo:bRλØ½Lf}t!3©H÷Afb”Õèöc»ÑÆ~ êE<Ýó9æ6¶:ëµ uú¾õo]ÄÆ‡ÞtĤ±q˜o?ÚØ´C½ˆ§{>ÇÜÆ¶Qg½6¡Nß·±þ­‹ØøÐ›Ž˜”#6îóíGûv¨ñtÏç˜ÛØ6ê¬×&Ôéû6Ö¿uzÓ“rÄÆ=b¾ýêoãôQ½º$I‹ÆÌsÍå¹g3êc3Â{Ò5­×z:<ìŸÊYÿP àØ|úQâéžÏ1·±mÔY¯M¨Ó÷m¬ë"6>ô¦#&åˆ{Ä|ûÙjãËѱÆÏ,{({úŒÃ©Ipôa’¤µ»Òë›Ç€èë}éu÷¢úf=/qóÑ×êE<Ýó9æ6¶:ëµ uú¾õo]ÄÆ‡ÞtĤ±q˜o?›m<y¸û5Ù¿‰R®}öôñã&ôñ¯Kx6crœx¶Ó—¦Gá¶}­^ÄÓ=ŸcncÛ¨³^›P§ïÛXÿÖEl|èMGLÊ÷ˆùö³ÙÆš¬]ë¼!oÄ—3îÉAÿl:a›JÖ~’aOÄß’½Þi1±K]ÈÉ žîùsöøªÎ}ÓÊ^Nç)"&åˆ{Ä|ûÙlcMÖ®'òÃé}é´vd§µ/½Óó´4’MÖÆÂ¨é2Ç£5nI8z>ýún ƒçz‰ågÄ—l&¯·:wå$~ìÅ3 ~›\~Ù¹'ýð@ÚzYçÁ‘ŒÊ²Ééû¢>ÄÓ=ŸcÎþ�_Õ¹oZÙËé<EĤ±q˜o?›mœ$kúœÁ(éé¿%:Q2Ô~[úæùÙdMÿ¯å&©ª…yî`®Îó¾ÜJ'>‰þßm™ûê&Û©ÏG|6ìÉ^¼MºÜàäñCçgOš²úZ½ˆ§{>Çœý¾ªsß´²—ÓyŠˆI9bã1ß~6Ûx’¬©s9ííK+z¿V羜ê¤"Ö“5½lR®ì=sÏä,<ƒþwñO&Y_zÿœy˜½Ù®½ž kNвèkõ"žîùsöøªÎ}ÓÊ^Nç)"&åˆ{Ä|ûÙlãéd-ry&ýÑ1Òÿ,“¬¥IÒÎÎ+Òþ¯^ï¤ß½.;fÖIÄdÿ~1ñÊ=. ¬ï­³ƒ¾V/âéžÏ1g€¯êÜ7­ìåtž"bRŽØ¸GÌ·ŸÍ6.$kêâké™)ý;¯F‹I‚Ò¤jÁ#Ë»ŒòÀiÅx"ƒÞ«¹úÏeß‹¶'Ý^(ý?Å÷´‘¬m6âéžÏ1·²m—#<Ò?ð\ËÌP›^z]6£­uæx¦øÊÞ[FïÙ}"ƒŽ´â{xõ5›Ÿ!}dKÙ Á•EŸ³ÿq|¯ñøXÎ&lã2u›êÜ7­ô@¦EĤ±q˜o?›m<3YSfŠþè½³IPrÉbôZéIBôEú±>ZòK>û~S#w&‘».]sYd: ÉÚf»šñ¬ëDx5>Ǽþm{nÅõN?Ô¿ÉdM/ñ~]vãdÅÜ»à_ã+¢ec’5sÜN¶›dmÂJ¬¿ól>bRŽØ¸GÌ·Ÿ½6NNZ%÷z]ž…²¯' SIPf"’VG‚p0™uQÿŠJ÷ÍUfb4ˆêÚsÂeNÎext˜Ì\Ùy_ÂûÒ?ý;’5|ûí·éÿª©OýcBò@Ýßf˜fOÈÓej?HF%Â^7Ùgãåšt‚¥?ü³ôß|?=ùu…d­Œ­mKö¡l²¶‚(Éx·÷Ç$áXGü‡¦®L03䎓µÍ`úï8YÛPuî›VörŸ;vSˆI9bã1ß~VÚ¸0mþ¬éøÓËB”œ�Ç—åŒ_/ç äa(«NꟌÚeFÐŒñe™Ñû´»rÿäHîí郹;òï~Ý‘¿ÈlƒÍ“­å4>wîÜ‘áp˜¾2_åx^Žää0Ý×Ì}yñ_ì_ŽöáÒ”¹Ü¬%ín/JÎÌ#)ôò¬^rïcmû‹ö•ûÒ«ã‘ù¼ÛÚ¶õ“µäZ×êH8â«�VØ’µFÕ¹oZÙË}îØM!&åˆ{Ä|ûÑÆ~ æÓø˜¥JÒ¶T<3\˜} ÕS ;·3³”š¬²õ£5â‘ãšf6½üFÂ}MIÖVekÛÖMÖÌu$ɤHÖ6Mû¦•½ÜçŽÝbRŽØ¸GÌ·mìÚa>O~™—´iyez²zíU龡3•Îzèy.Y»<•žŽ¾Î¹T/½ jHÖÒˉëzX¼EKÅÜ1[Û–OÖ.Gy_›IÔ§Fo»Ò{ø®žN.××ãeN¢_$—hÇëîI÷þIºŸêþ¹›©'YÊ“˜ÌåÞº¿¿ñFòÿ4Y+~†g2üVzݨtF}.Ïš›<†å‡éú ý'£0)ˤîÝàXžžÜ-¯çb(Gã+.öäî«ñÿ“Ï™ÝÆÜ¥õƒãíãžN®ÐÐí¹Ÿ¹ŒY¯®ŒÒËH£ßoN@õ@‚àÓÚ/‡×÷­‹•½¼Î ÜĤ±q˜o?ÚØVÛa|‚´'ÁÉprâ€ôÏÒ“ÈÔÉP´´:rx’œ¸LÀ ¿–POŠâuö¥wúCô«ŸÅ3³Å¯e|¹È}³~|ÙàÌ¡®(ùÝÙˬ¤M_¯L“µëщêæ’ØèD²÷uæ’ÛédÍüE¿Î‘ˆËѱšYR»÷äað®<ý÷4QË~Þ(þgO''¼½OÓ¶ˆÚòèDNr³ŽÛ-ÚÖ“§æ=¢zæ¶Qôû‡ÇKߺT̳µmÓÉZ6i2‰N:Æø[•½% iR–ŽjÍJ'ü0m6Nþ¦šj£|éó.ã~«—îNž™ìÏ3>ƒ™d)^L²cþˆÐ’—öÞwãã„©kÆå汓²Ì¬ÛÜcœ©'½\}üŒÎÌåëqì²õŒ“µtÇŸ5£©7±~e’¼-“þ&ž|åÆäòg½ºûˆd Ädbã1ß~ÙÆ™ËÖæ-›tyŒn¯¹I2ÚQ²¸˜Ñ¡ÖôÏõloúyt—£#9ßw•=Ód"”¡®cF^zYºïêÉ}t"zz?þKt«ÛNÝôü'Zg/}OýÙÔ»äCÆÇÛ?gÉ&múse&Y‹v–ñöM%²Ùd-ÏÚ&ÑØ¿$íà$Mõ¤òW¹äÐŒ¬e&ËÑ%j¯“Ó‡Q;´2÷WÎJ2í–κjÚÈì æDxƒl]‹éú¾²µmÅé"j»vô~&YKÖµY÷ÜVHÖ’öÊM'š¬LFw«$kIŸÍÕeާã?>ä?CÄÌ™ÝçÓ)»íU¶¡°ÎÂzLb8=’¬“ù=ó9Ì6Æûõnæ³êýÐ:*x=ž€ç¹™}¸°$ñyׯ#jý¸ßØRç¾ie/¯s·1)GlÜ#æÛ6öƒ¶CÝË„I0²—ÒåOÈÒdmœD¥?OàÌsð2'p&¯™:aÊ%SËäÄkvùê‹&múoe™d->¡KÎdÔPÓËÉZ3M¦²•L$'¥Ù¶3ÛPœù¯x²¼¨¢O\¸×)m·%§n_*æŽÙÚ¶b¼óýjr£5}4¾Ì.’¶Ey²6«ï*óú佋ےWR—Ùæ%k¹}&æ,Y›±G’uæ$kq½eÛ’ÆbüǪ²|ÑdûQfvâÕ¹oZÙË}îØM!&åˆ{Ä|ûÑÆ~°Û³NÒfœÅt6Ã0¹÷#Ú¦¹'p ¤|<‚³†x[*,7oÞ”ãããøÿ•é6“5õ,ó MXþœIÖ2ÏxZrt°œ¹<K?ƒþ%ÿ·S—‰&'¥³’µâ‰hñd¹j²–MüJNêX*æŽÙÚ¶b¼gõÑÉÎp%mf5m‹ÅÉZ¾­‹¯·%¯¤]Íþ°•ÉZÙ$@&e—l¦.†Ò˜¹W°lÆØ5Ô¹oZÙË}îØM!&åˆ{Ä|ûÑÆ~°Û³NÒò'dæ¡Ýø¯ÿa }-¯!Y›û×ëŠ4>ó“¤úZeºÍSÉšÊÜËÓ~U:í(i3Ÿ{ü áyŒ,K“ä'÷ýíLî•INJí%k…{¢Ìý@K¶ÛR1wÌÖ¶ã=«Ÿd\œ¦÷¦åi[”'k&™Î'fÔz™Ë ͦGdMýþ&kfT?Ûß&£ö¥ÉÚ¸ŸæîÁÔKH?•3ó¹õ™žG“KT/ÏÉ›÷§G¬ãþ?ªcþg[Eû¦•½ÜçŽÝbRNcÃâ~Áv£ý`·*$ké‰Íd,-_+Y›œPµ:‡r4¾ÄOïA9”ûK$:æx”_òIš¡e•é6’5•ñÊ~îÌç*™º_OîNï¿/–¸Œ0a’æÖø¤39qµ™¬Eïª÷©½º'ítaº½ªY*æŽÙÙ¶YÉO>±Ð¶ 2IFºO™DØ´Å^ONŸ>’ƒCsßbÆxâ‹IÒ‘ÜW¸›¹Ïqv"V0¾´/Ìc\wÒîÉvýS192‰Of4yœDŽU¶¡¸Îâz2—’¦÷ÜNßW™þnaͽnÉ:“%}hüø¾¿\¹¹üwµÇøs˜mX0·}ϺXéunà¶ &Û‰v…¯Ø7ý`·Lr‘=ÑÈTN]2¤ ƒ™Ýq_zá] ú*žÀ&)‰äN˜ŠÓ“'Ky’3[þ÷Ë’4Cש*ÙÆì_í3Æ'tÙd-’9ÉÕ¶‡™ûtÆ087³3mÎ%T&—T¦'Ôæä5IÀôÄõ¿ÊÓð×r8ø®$Y›q²\¡êzŽÛ21w­þm3 ódŸÜ >–51¿¦ öÑ9ÿ»<üÍxÔt:žŒàŽg:œ%?żŽ…æª4!7eñ’Mî§MÏü¹'Ÿ=”_ïF‰`´ýýáÿ/WW[~t£ýÏü-Qâÿûßë>™y­ó± rñ˜…‹cVXfÔ“Œœå¦ào¿-Ÿ…oË®Æááÿ.>~oüljìc ¢e*n‘ü ¸Ù©ûGŸJüfrùjn®.ú¾u±ÒëÜÀmAL¶í _ù³ofýâÔ“‡PgÿUÜÿcôe½ø‹^Ošμ |ööÙi}1×ýÕ»Ý.;̈˜‰“žà^8! g“Ëþô¯î÷ŸHÿž&xQ;ü»·¥ófÝtýß÷“ñkQ23øxú„)NpžåÚU'YX}êþEIš¡ë.–Íô¥Xcqò”¹ r,é¢.æ¤w™Q©§ò(xWŽïÑ:>›Ì@7ž¦<z½÷_’ËS Û<#yøU ¿ZÔFzRû4IÔ'ë™%z¿%¦ð×ßñ•ÏÛ†«­Î}ÓÊ^Nç)"&Û‰v…¯|Ù7͔ғçM¬©h3R½¬+þ«k89ižz†”¹&3ûø¯©å}vcÄ|U“4ƒx.!)ÜÔR½èú¾òyÛpµÕ¹oZÙËé<EÄd;Ñ®ð•ûæ¬û¡TrŸÀ©ÑŽ÷àÙKÓÌev3îÏIè½#·HÖ¶ñ¬Nïÿy³û`Æ%xÚGº³/Á瘳?ÀWuî›Vör:O1ÙN´+|åǾi’µôÆïôÕØåiz¤1'YSãèÓû³L²6ã™Q—ëpäÕD<+JGª‹Šèhõo$è *ߣãsÌÙà«:÷M+{9§ˆ˜l'Ú¾òcßÌÌö߯ι§iA²–¹)¹|23£_þærpŒ¨—ñ,Þ7s)Ý—]Ð{E³Ï�K–ü¤)UèïùÊçmÃÕVç¾ie/§ó“íD»Ú§1Þä¥)M¾÷´g2:¹;™$?ÉÂØ¢d-3Ñ‚¹ôñr$'‡™“QK³z­ÃŸvØÄÓ=ŸcÎþ�_Õ¹oZÙËé<EÄd;Ñ®ömrŒ›Üvßâ–L{>Xždÿ¿B²ËMB-­Î]9YrVB[|k‡MG<Ýó9æìðUû¦•½œÎSDL¶íjß&ǸÉm÷5nSÏšºßlÙË ó¦Ÿ×³ìó¾lñµ6ñtÏ瘳?ÀWuî›Vör:O1ÙN´«}›ã&·Ý¸E Öáá䡽cæ~³ìÜ«N0rCô´:ÁÈá›ÉÃ…§˜õ² nLjzO÷|޹m£ÎzmB¾ocý[±ñ¡71ÙN´«}›ã&·Ý¸éhØËÅ™ £ŸÎûÒªš¬•MÝ­8¤ÈwÒï^'YÛRÄÓ=ŸcncÛ¨³^›P§ïÛXÿÖEl|èMGL¶íjß&ǸÉm÷#næÒÅ=éöúé¤":KÝgñ=f­ÎýÉ3 *<{j}3u»+½¾™TÄ<pûštz_§¯5‹cD½ˆ§{>ÇÜÆ¶Qg½6¡Nß·±þ­‹ØøÐ›Ž˜l'ÚÕ¾MŽq“ÛîGÜÒË 8“A”Ì™™8dæÒ’v÷ž„ã„,•^ùÃŒ‰K|šR· õ!žîùsÛFõÚ„:}߯ú·.bãCo:b²hWû69ÆMn;û¦h‡zO÷|޹m£ÎzmB¾ocý[±ñ¡71ÙN´«}›ã&·}Ó´C½ˆ§{>ÇÜÆ¶Qg½6¡Nß·±þ­‹ØøÐ›Ž˜l'ÚÕ¾MŽq“ÛξéÚ¡^ÄÓ=ŸcncÛ¨³^›P§ïÛXÿÖEl|èMGL¶íjß&ǸÉmgßôíP/âéžÏ1×mcañu©‹•Xçn b²hWû69ÆMn;û¦h‡zO÷ˆ9Ð,+=Ž]DL¶íjß&ǸÉmgßôíP/âé1še¥Ò±‹ˆÉv¢]íÛä7¹íì›~ êE<Ý#æ@³¬ô@:v1ÙN´«}›ã&·}Ó´C½ˆ§{Äh–•HÇ."&Û‰vµo“cÜä¶³oúv¨ñt˜ͲÒéØEÄd;Ñ®ömrŒ›ÜvöM?Ðõ"žîs YVz »ˆ˜l'ÚÕ¾MŽq“ÛξéÚ¡^ÄÓ=b4ËJ¤c“íD»Ú·É1nrÛÙ7ý@;Ô‹xºGÌfYétì"b²hWû69ÆMn;û¦h‡zO÷ˆ9Ð,+=Ž]DL¶íjß&ǸÉmgßôíP/âé1še¥Ò±‹ˆÉv¢]íÛä7¹íì›~ ê¥ñdq¿�hŽ•HÇ."&ÛÉïv}&£Áo¥×Ý“N(£ôÕM³É}§Émç˜ãÚ�°+ß"|9“íäu»ŽBéDÛ§ÛH²ÖŒ&·cŽh�À:¬|‹ðåTDL¶“÷íú| Á®_ÉÚ;ï¼#aÊ?þ˜¾2ß&÷:·ýÅ_¼2qÛ&´�`V¾Eør*"&ÛÉûvõ0Y»sçN·ªÉÇ&÷:·]ëº*qÛ&´�`V¾Eør*"&ÛÉûvõ8Y3Ë¢äc“ûNÛž™.Û·mB;��Öaå[„/§"b²lµëóA »QÝZ¼¤ÉVöõÝ` Ï/†rt¤eÖkuäðd$—I5¹díBA;­³-Áà"Zá©„Ýôµ[Žž'¿w9’Áý®´M½í®Ü˜zŸÉèä®tZZ¶'ÝÞ ‚O+'ƒùdÍ,eɇ–mª:·=«ì²qÛ&´�`V¾Eør*"&ÛÉj»^œHÐnåFÅ.å¼ÿ+¹~ýï;éw¯G‰Ô¡ ..£üêHtýÝ@iÎUYûI†½W¢í6ÉšJë1ÉÚå7î¿"Ýð4Jï"—gÒ?Ø‹Ê_‘Þð'‰6@º­Ñïÿÿv¼ÝGk'kfÉ'úÚ¦ªsÛ³1šµlSܶ í��X‡•o¾œŠˆÉv²Û®ibÕz]³gÉKšHÝú•ôÏuŒ+M²öz2Œ‡¼ÒŸç&kÏeÞŠ¶;›¬™·$Y»öd/ú\úÙ¦—–ìõNåY<º§#j}FIâ²%kf1ɇþSÕ¹íÙØÌ[¶!nÛ„v��¬ÃÊ·_NEÄd;i»Ö½L‰G±ZÒN¢”êR.ïÊ~”0M§Hç2ì‡ÉóÔ´Žµ’µŸ’òÖAšÎ`Füô½Ú]é=È(³jö³¬»˜ÄΖüûmËòÞ{ïÅÿ¢y´�`V¾Eør*"&X¹Dñ†'ÇÒÛ{5¹1%oÃPºí]iwïIØH_“®:’µëÒí—–Ïp1”þà ½o-ZÒK1«¨2²¦ë ‡Ãx}ýySÕ¹íÙø”-š¤}ÿý÷ãõÑ<Ú�°+ß"|9¬FGÓ'}Œ/yŒÄ£n;Òêöå<~!Mºêº ²Õ‘àh•&.ÏÉ›÷gŒê…ÑöíJ'|š¾6ß¼d-›¤úú¦ªsÛ³qÊ/Ù$ÍÐ×Ñ<Ú�°+ß"|9¬ìòTz{zÙarÏØ8Y…Ò‰ö«Ö~(g—:Êö™kÑzûÒ ïJ #ciB7Iòt‚’iEu%—VFÉÖÑád„L“¸“¯%Ü×z&É@¼˜{çFä`¼&™\0—1+Y›•¤Z¾©êÜöl¼Ì2+I3´Í£��ë°ò-—S1ÁêÌD#ùûÈÎå´·ŸNÛ¿'ÝûO¤Ogz¼&Ãc%Éœî{ñbFÜÆ³;F¯ÅSýå$hK«ÈÃ~:’–$@vêþѧ¿‘‡¦<7·H6Y›—¤ºÞ¦ªsÛMÌt™—¤›·mB;��Öaå[„/§"b$4A«’¤›ÜwêÜv­«J’fpÌñí��X‡•o¾œŠˆ ¨šl›ÜwêÜö«·mB;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬f“ûN“ÛÎ1Ç´�`V¾Eør*"&Àj6¹ï4¹ísü@;��Öaå[„/§"b¬FûÎ&/Miò½1A;��Öaå[„/§"bÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�p‰cŽh�À:HÖ!&�\â˜ãÚ�°’5Gˆ �—8æøv��¬ƒdÍbÀ%Ž9~ ��ë Ys„˜�pI9,~,��¬ŠdÍb���`$kŽ����Ë Ys„˜����XÉš#Ä���À2HÖ!&����–A²æ1���° ’5Gˆ ���€e¬9BL����,ƒdÍb���`$kŽ����Ë Ys„˜����XÉš#Ä���À2HÖ!&����–A²æ1���° ’5Gˆ ���€e¬9BL����,ƒdÍb���`$kŽ����Ë Ys„˜����XÉš#Ä���À2HÖ!&����–A²æ1���° ’5Gˆ ���€e¬9BL����,ƒdÍb���`$kŽ����Ë Ys„˜����XÉš#Ä���À2¬%k,Å����ª"ƒ�����‘¬���€‡HÖ����ÀC$k����à!’5����ðÉ����xˆd ����<D²����"Y����‘¬���€‡HÖ����ÀC$k����à!’5����ðÉ����xˆd ����<D²����"Y����‘¬���€‡HÖ����ÀC$k����à‘ÿ?Fy]�êÍdÔ����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7w.png��������������������������������������������0000664�0000000�0000000�00000170400�15030617045�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��z�����Ê“t���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ð•IDATx^ìýï‹ךàûÖ¡iHØïj¿é™‚óBöÙÌ‹hŠ z!s5wÌ% …ÏÑ€çA9wl<‡-<3Á-®±èíÑL²Ž}ÇÓ"°8»ÝXb Ûâì®­t»¹ÂÉÙœ1R‘—>F#Šdl„HžOD¬Ìˆ¬ˆŒÈŒ‘‘‘ßVåŠ\ù¬øùxÅŠ�����@#è�����h=������ A¢����� !Hô������4‰�����€† Ñ�����Ð$z������‚D�����@Cè�����h=������ A¢����� !Hô������4‰�����€† Ñ�����Ð…=;;;Ls²%Å©ü ����Ð|…=˜!ù$Åé›o¾™Niò–Û¨#)¯KiL¹™‡m����¶‰‹ˆG>§¬D…Êš§Š:²ÊUêÈ*gÛ���€í@¢Ç"⑉žóŠÖ‘Uζ ����ÛDEÄ#Ÿ¤8™DE‘d†Í:Ò˜òºÔ‘Æ”›yØ6���`;豈xäC¢Ç^iL¹™‡m����¶‰‹ˆG>§¬D…Êš§Š:²ÊUêÈ*gÛ���€í@¢Ç"⑉žóŠÖ‘Uζ ����ÛDEÄ#Ÿ¤8™DE‘d†Í:Ò˜òºÔ‘Æ”›yØ6���`;豈xäC¢Ç^iL¹™‡m����¶‰‹ˆG>$zìÕ‘Æ”›yØ6���`;豈xä£qÊJT¨¬yª¨#«\աެr¶M����Ø$z,"ùè9¯hYål›����°HôXD<òIŠ“ITIfج#)¯KiL¹™‡m����¶‰‹ˆG>$zìÕ‘Æ”›yØ6���`;豈xä£qÊJT¨¬yª¨#«\աެr¶M����Ø$z,"ù$ÅÉ$*Š$3lÖ‘Æ”×¥Ž4¦ÜÌö ����ÛDEÄ#=öêHcÊÍ<l›����°HôXD<ò!Ñc¯Ž4¦ÜÌö ����ÛDEÄ#SV¢BeÍSEYåªud•³m���Àv ÑcñȇDÏyEëÈ*gÛ���€í@¢Ç"â‘ORœL¢¢H2ÃfiLy]êHcÊÍ<l›����°HôXD<ò!Ñc¯Ž4¦ÜÌö ����ÛDEÄ#SV¢BeÍSEYåªud•³m���Àv ÑcñȇDÏyEëÈ*gÛ���€í@¢Ç¢mdzgÏÂå“'“¨HJV¼8²ë}G¿·sáÏÄ=}–¯dä^ ÊÍÔqe–ŠœÉ°ïJ¯»?+ouĹûP†§äÝ£WC +a²h=*ëHcÊÍ<ú› n¦Çd¦Ê'��Ð\…Îô\(Ä­7nKo0ÿV/dðá˜,FI®_¿.—/_–G…Ÿ,–§ùÄÄ9“‘Üyç’\Ð Ôö‘ Æ“°`曯ïȵ‹ÿH®}úŸÃO<ãqýϾt{}ùâëÇÁ2ÆCé÷ºÒöêÛuHô�À:DMË×’TYGS^—:’pN°Gc¹M�`3:bsÀ[k<&ß‹{ðº8‘DÏäÔ•ƒ=§’D¹�È“ðIŠ“¹ ]xÑúûOåÚÏ‚å´\9Ëõ|óÍ_‰sé‹sÿ÷á'/dà\òæß“÷{ÑÙãËx)§îÛÒŠôþÉ\‡°<Ï<ilÖ‘Æ”›yÖºm@Šè±iÙãZ’*ëHcÊëRGÎ ö˜Xæm<ó¤±YGSž4Û �lŽBGløqë‹G˜°ØiÏ=~âgOvv«Mô˜iQÂG˳.4Ô¹y^ ÄÙ{Cºïh–\<øs¹ÿ8ZÇSq;×Ä?x2ìÉ/t}~ñž Ïw�ò}óØ•÷Ž"yÅ­´žsª¨#«\c�u³èØ”u\SYóTQGV¹ªCÑrÎ ö¤Å2«=TÖ<UÔ‘U®Ì<l7�°9 ±9àÇ•ñP8iyËÐåè3GÇ#™L“<³$‹?ýQ+þwÇ•ÓÑ@îù+H¯ÿ¹tÛÞ<í÷¥?Ëèø¦tZ:¯>âtGçËÔäǼ¤D™’>úù2Sšè¹èÈàÅéuö¼z~.—Þû2ëÃMôŒeà´ýeýìÚ§ÓG³æe­Ç¹ò„vxçÎ}yìÍ3I‰ïŸÿ/ÿ^ŽÞ{3!îÿ§ …q×éçÒ9z$£Éù1‡ô7üÞ[Fl¼¢%z"éü�P7‹ŽMYÇ5•5Oud•«:Ô-çœ`OZ,³ÚCeÍSEYåÊÌÃv�›£Ð›~\yñøAú݋ӱi&£r¨É‚Ho éÑcfžÉ‰ôöMò§%mç·r¢ ¢ÖÛâ~÷¥t[—¼ï¾¿z,N÷ž•D™¢ ý{ž¹ˆXt±á?ºõÇ×üß3ÁξöOÃDz¢niÒg×+ß•ŽûÔÿ¾Ê\ÆÂòäã7ÿXv.¾#Ÿ~ý8Þ/£ñ½ ¯ý» ¾‘˜¸»ÎŸÉ… ÿWùþóÿ›WÆ}r*ýCí©´á7ß<–¯Ý÷ý$P«Û—³p ‚ÇÑ^OèÍg~‡ù-I1€u‹›Ï×’TYGS^—:’pN°ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀÓxØœfÂDÏ~/|)ü{™DÏ$?®HoøSø™ùn0Xñ0ac•´~«LšðÑÿÎ[taaD=¢ƒOŸÜzô¤wræ}·¢DÏ/Þ“/ü$Ë|;˜eþ‰¼÷ÅïôƒP<îÁ2Ëo?>Ö´-&rÖ?ôþ6‰çw2ì]™~ÏwÖ—nëŠ_žßaæIŠ9�¬[ôØ=f%™?®%©²Ž4¦¼.u$áœ`‰eÞöÈ3O›u¤1åIó°Ý�Àæ(tÄæ€W~<æ^¾r¢çêtŸöàñ{Çxu¶»Ò»7Qʘ6IòôèÑéµ×^×uýg]h¨só˜G·ÂUÿ替–û_õßœµ£=“Nÿàý>óèV˜„Ù¹ ¿xÏõ{ü$ÉZäò¹vøÙ5ùô÷:Or|ƒÔÏÎ}˜ÈxøPœ÷Þ”‹~œ¢m¨}\9híÈ…7?–ß~ó8HM~3Y¿C×�êfѱ)븦²æ©¢Ž¬rU‡:¢åœìI‹eV{¨¬yª¨#«\™yØn�`s:bsÀ+/š p¥ÛÞ•v÷–¸ýôç’8…=J_7~×™“ò ó$Y‰“àùñÇýùõ³yæ"bÑÅF¼Gq&'=íã-ëâÿE.]ü³°Gé!ã}IŒd.caùD¾þ‘7/þL.¾ùÏÚÁÄ÷O#oþRñ¸›e|óµ¼ú]“kîCù®ÿÁ´ gëaÞvEz'#½ý_J·ÿC¤<™)7ó$Å�Ö-zlZö¸–¤Ê:Ò˜òºÔ‘„s‚=&–yÛ#Ï<ilÖ‘Æ”'ÍÃv�›£Ð›~\iñð׉ŽÕr>‰S8Ñ3u&C÷PÚs<-’–è™OðZ6oÑ……‘œèQ&¢Ë$Y¦ã¥½^Ý3~"·¾œ¾ª}á:xíðæÓ»Fç™ñ2‰ž~ðXëPúgÁ£m]Ó«§ÕnË/Ãù®§Ç”›y’b�ë=6-{\KReiLy]êHÂ9Á˼í‘gž46ëHcÊ“æa»€ÍQèˆÍ?®´xŒ\éxu·\9hÄñß:u =÷¦8ýÂ$AKö{+OÝähð4HBø=ANÄ=üµ Æÿ%9Ñ3º'‡½?â÷I{ç¢ßs$ùDOZ‚ÇHŠÓ¢ ãñWŽ\¾ð'±ñ…¦&ß‹sùç^Ýñ$ËlÐæ=é8®|zÿ¯Ãe¼”ÑÀ§ëHô2˜Ù³p¼v¸ä­û…ËŽ|õøqB; –Hô„sùœyËŸ¾ÍkW:½Ïäk·Âd’2‰,ÌùX4•·p==¦ÜÌSÚ¶ �DMË×’TYGS^—:’pN°ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ+/‘Ç“tÐäÛ¥KéÝ _ÇíÍ26¯÷>ë=‘±&l¢ƒ?y Îî, fô¥8Îgr×¼6¼ÕçÁÐO(äa=Y CçͺÐP³yž3Óuß‘]gà¿n<V‡?ÖÐÛ±$–_Ç×_ÄKÓIã݇òÅ×®ÇlTZ;ü\.ý?®Jç"õ›ø¾ȵŸ%|mŸ–\|ó–;ÿ3Ù÷æiunÊq$ù¤ñžüb'%É副çyºl�¨›EǦ¬ãšÊš§Š:²ÊUꈖsN°'-–Yí¡²æ©¢Ž¬reæa»€ÍQèˆÍ?n[ãqãÆ\ Cã´Ì…Eš*êÈ*Wå×1ñßÐuáï„ÙÈZû*€:ZtlÊ:®©¬yª¨#«\Õ¡Žh9ç{Òb™Õ*kž*êÈ*Wf¶�Ø…ŽØðãˆG>Iq2‹.6ò–Û¨#)¯´¿§R0³‘÷ûf¶M�u=6-{\KReiLy]êHÂ9Á˼í‘gž46ëHcÊ“æa»€ÍQèˆÍ?Žxä“§EFÞru¤1å¥×ñø/Ã1‡ÂG¾æÞ‚¶ì2Ø6ÔQôØ´ìq-I•u¤1åu©# ç{L,ó¶GžyÒØ¬#)Oš‡í�6G¡#6ü8â‘Æ)ëBCeÍc­Žß:7~Qò¤ã%½«,×2”«óóD`îÞ‰ ",kºþ�P7‹ŽMYÇ5•5Oud•«:Ô-çœ`OZ,³ÚCeÍSEYåÊÌÃv�›£Ð›~ñÈ')Næ"bÑÅFÞru¤1åu©#)7ó°m¨£è±iÙãZ’*ëHcÊëRGÎ ö˜Xæm<ó¤±YGSž4Û �lŽBGløqÄ#Ÿ¤8-º°0ò–Û¨#)¯KiL¹™‡m@EMË×’TYGS^—:’pN°ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ#ù$ÅiÑ……‘·ÜFiLy]êHcÊÍ<l›�ê(zlZö¸–¤Ê:Ò˜òºÔ‘„s‚=&–yÛ#Ï<ilÖ‘Æ”'ÍÃv�›£Ð›~ñÈGã”u¡¡²æ©¢Ž¬rU‡:²ÊÙ6ÔÑ¢cSÖqMeÍSEYåªuDË9'Ø“ˬöPYóTQGV¹2ó°Ý�Àæ(tÄæ€G<òÑ8-sa‘¦Š:²ÊUêÈ*gÛPG‹ŽMYÇ5•5Oud•«:Ô-çœ`OZ,³ÚCeÍSEYåÊÌÃv�›£Ð›~ñÈ')Næ"bÑÅFÞru¤1åu©#)7ó°m¨£è±iÙãZ’*ëHcÊëRGÎ ö˜Xæm<ó¤±YGSž4Û �lŽBGløqÄ#Ÿ¤8-º°0ò–Û¨#)¯KiL¹™‡m@EMË×’TYGS^—:’pN°ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ#ùhœ².4TÖ<UÔ‘U®êPGV9Û&€:ZtlÊ:®©¬yª¨#«\Õ¡Žh9ç{Òb™Õ*kž*êÈ*Wf¶�Ø…ŽØðãˆG>§e.,ÒTQGV¹ªCYål›�êhѱ)븦²æ©¢Ž¬rU‡:¢åµ;'LF2¸wKºí=é¸OÃ7CZ,³ÚCeÍSEYåÊÌõ�lŽBGløqÄ#Ÿ¤8™‹ˆEyËmÔ‘Æ”×¥Ž4¦ÜÌö  Ž¢Ç¦ìãÚ×ò鵋þwtj¸r: Cß|óWâ\úÙtžÝXâà›o~+_|ìÈ{oþb6O«#Î݇2<} ï ä÷™ë±Üñ7I•u$Ñß]¯dä^Ml¯u¸ÿ¾<þ<ü+›‰eÞöÈ3OšÇ÷ÿ½¼séça¬¼} s$†gai è2LyÒ<õÚn��‹:bsÀ#ù$ÅiÑ……‘·ÜFiLy]êHcÊÍ<l›�ê(zlÊ{\ӛݣΞ÷Ý–´c‡å*˜ç±ŒGÒnÉ`ÉOÄñ<¿7ßûX†¦l<”~¯+mo]v=ëòjàÈn =ׯ_÷ãóÑGåJø˜Xæm<ó$˵‹ÿP>þJë6>t¥ÛnÉÎÜv^hSž4×�°9 ±9àÇ|’â´èÂÂÈ[n£Ž4¦¼.u¤1åf¶M�u=6-s\ ’Ú«aOÜïÅÜæNë¹Òé¸2 ?y!ç’7ÿÏå²ó—Þòür^Ê©û¶´¼ïÜ7u¤˜.#…)¯KIêxN¨[¢ÇLY ˼í‘gž$ŸŸ]ø3q¾úëpÓª-Î`–î,² eÊ“æ©ãv�HVèˆÍ?Žxä£qʺÐPYóTQGV¹ªCYål›�ÊöèÑ#Zå±—$‹ŽkzÓ»×yGþï/xuüBû§Ód/Lô˜¤ÍdØ“}oY;û=ÆfŒ,gr"½Ã{‘äP`Ñz¨¬rU‡:¢åu<'Ô5Ñc¦´„–%Éj•5O¬ü¬/ÝÖEéöþž&zþDÞûâwágç-µŒfž´ß �¨ŸBGløqÄ#Ó2iª¨#«\աެr¶M�eûä“OücN¯½öšÜ¸qC\וápÎqÞ¢cÓ¢ãš&.:ÇòŸÝ÷åÒo™­éDÆ*‰%z¾–Óö—¥f½ g1²ŽŸÉå¿Ç„,øÍ­ÎM9½ JG¹ç?æ­WÿsySR¯ÊƒÇbŸÞ¼/ßÿOòÅŸ¿#–I,ìIç葌&Ññk‚Éü† 1~¾dO$ýŽãilƒÉ$j¢Ÿ‡=NÆCyàt¤eæmuäèx4MÐÅ=¯âì†óí:2Ьmj¾é­5Ëíî~¸¬–´»wd¶ƒò||.³Ý•ÞÝŹ·8‘”–è1Ó|ÂG?K’¼ÝÄeͳ¸üéw/Ê…ËŽ|õxÕ:–[Ï´ß �¨ŸBGløqÄ#Ÿ¤8™‹ˆEyËmÔ‘Æ”×¥Ž4¦ÜÌö  lß~û­¬I›Þzë-?íõ£ŸËׂD&<^ʨÿ¾?¾N0 k‰=ºõTÜή·¬]¹äüÕ´Ž4¹Êû±t[fŒ Ù:øcü<vå½_hO#ýÝ:ÏoåD óÿ6Ó¹xíߟ·þGù7·þ'¯ü’8ƒ"“Sùø@Ǻ(×>ýÚ[âDÆ'·ý$P«Û“Îúæ›ÿ,Ÿ^ûGÒ>| £¹^JjÑïˆÆ½8oýtL¤s½q~þᡸ§št ’f<™Éèj’Ë$q<çzôh«ýø<A¯/~aÛNN]9Ø÷–H<­×ï¹5ñf?”Öt ]Ï›ÒÍè1”•è1“Iøè¿U®í&ç<ifu˜q¨Þ—¾Ij…òÖ‘Æ”'Íc~+� þ ±9àÇ|’â´èÂÂÈ[n£Ž4¦¼.u¤1åf¶M�eûñÇýcMÞI{ýèeŽk³D:““ÞŸH¹pé}q¿~\Y¢g¿wôH ³ÁœÍÛ¿®Hoø“ÿ½€Y—èã6aBb:ïD~ûñ\˜&zÔO2ì]‰Õ§ëðæ…?™«fÑï˜o‹U¦˜0)}š&a®šÄT˜è™>:þ½(ÑcbMô˜ž>~Ûš˜œ_· N?½Š´'O´ÛHþnþ)º çÚnrΓfZÇcWz—®Æ{±…òÖ‘Æ”'Íc~+� þ ±9àÇ|4NY*kž*êÈ*Wu¨#«œm@´×ŽoòLæQ¯4‹Žk&Ñ3}CÖäTú‡Áã;~²á4úèV?H*ìD3YÇÏ…åã¡|ìüóàÑ,oÙ³GÃLB窸£W‘:âŸA¹¾I顸áÀæÙ}ü•#—/˜^=ar(2æÐÂõôDËÅ}5&YöJò¿î&$¡ÎdØw¥gµ*”è Ê£½œâLO#¥>ÒuKî fŠ¥ÉÓ£G<úX¢In&Éj•5OZùdø™¼B¾jFV¹2ó¤ýV�@ý:bsÀ#ù$ÅÉ\D,ºØÈ[n£Ž4¦¼.u¤1åf¶M�Uø·ÿößúÇ›¬IßRúoc™ãZ¼GOhüDÞ»ôs¯Î Òî¼áM¦GIBxËþÅ{òÅã|ËI”ÿV†î¡´wö¥Ûs¥ÿÝ?q¾GO<¡3Kôü©8÷~柈«Éí}â>”»ÿSùY¬G2o»"½“¿‘÷~ñßÉ›÷òóýŽhÜ­1UµäxpKöc_ë˜Fú:ð]?áâöÒ×Þ6=;­C韥¥ot¹^<§c%ÿ¼E‰žh‚ÇÐÏU¾í&ß<i‚òßË}çÚJ=¹TÞò¤yÌo�Ô_¡#6ü8â‘ORœ]XyËmÔ‘Æ”×¥Ž4¦ÜÌö 4EäÆ5z¼F:زÞüæí ¡cùú™±Ìq-1Ñãùæë;r-ì]°w:ÞKêëÕ=ã'rûèK`ÛÅëñØ´ªµyR˜€X-Ñ>ÆIXüþÓk ‰ïgè˜4:VO»-ÿÝ…ùø·Ã’óL¬’DãnIDi[Ïõž “@³Þ7á`Í…=³G·Z#yŽÓ¼*ÿHnÏ'BL2í\›Ä%mÇI CËÕ¢x+Sžgž46ëHcÊ“æ1¿�P…ŽØðãˆG>IqZtaaä-·QGS^—:Ò˜r3Û&Цׄ·OÇn€+4ŸØ1ƒ,kÇ N›4éÍò³gÏÂZú¹‘ÿ¸ö×Þü۱ǖ -×Gœ4Kôxt Þ? ôs¹tÍ‹ÝtÛ—2¸ât`ÛìõÐêÕ³'þã3g2|p¼1«ókqÞùgòñoÿr‰Dé™òv0pñx(~í’\Øù™\zï†9#&™dJK.^»#_/\Ïôß»MÓרÏM¾1+ÃG“•æeÒsoŠÓÿ»°×U4A&ÀÌã`óoíò¶ÿãïƒÄ—ÙÆÌ,GßXæDÖ#ŒÝÂ@ñDÏ¢¡ó©ìíÆl¿«µ™òËý±™Ìo "¬,#eó[�õWèˆÍ?Žxä£qʺÐPYóTQGV¹ªCYål›@ƒ˜^ Ë$zÆÇòaïoÎõ€ÉcQb'é8iœý,úJjCËÒ$×ÌoŸÖ}¾×‹ßëIÇfé$¼r|<”þ]'òsoºpI®ý«[2ôßÌt^âzŒŸHϼZýâ›òþ?—[ÚcH_þÈ•bëØö×ñ›ß:·îf ž‰|m^ï%sGŽû7ý„Iô•íf=‚dÊ\"Å“¸žÑr]~)Ì ÌçÆÍ™ ˜½£»Ý~(ý[ÚG_#ÿPÿEò+ä§oÑò>ócñô‘Cï;ÎçÒ÷{ðD“F³øI¼W2º÷¡8w?›–Ç{þ$Óí<O‚ÇÐz“dµ‡Êš'±ÜôŽ =+Õ‘U®Ì<i¿�P?…ŽØðãˆG>'¦ê'� ±t¢Gey[öuʢǎ˗/û¯’ÖquòÜøšA–ͤIž´ï-:6-sš¦Š:²Ê•½:=_Rz3å]Æ¢¸o»´fš´Xfµ‡Êš§Š:²Ê•™‡í�6G¡#6ü8âÑ|´1€µ[2ÑcÆu™½*¿¤^8YôFY•:i‚h‘è15ë†Ó”ç™'Í:Ò˜òRê‹Óþ¥?6PÞ:’p.³ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ#ÍG¨^d }4åw‚O=Ñrôq˜G2šÌ’<Áç:…ƒÝÎw¢g¿z:í ¡uê£/Yt>£È ¨QeiL¹µ:&ß‹{`Mò¦ö‘ Æ“Üu$‰ÆŘXæm<ó¤±YGSž4Û �lŽBGløqÄ£ùhc�Õ Ç6iHïDljŒuâ'zÌ«ÃÃk'§Ò?Ô7 ™ñ_<a YžpÛ0a0e™12D߬µÈ¢cjÖ ©Êšgé:Δ<E{G-½Œ‹ËÍ�Ìäâ›ÿsdé¸e–¡¿v¤Å2«=TÖ<UÔ‘U®Ì<l7�°9 ±9àÇæ£T)è‘3÷ªêØ£[&Ñcç5çHôLÇy ÿ¶˜èÉkÑ1u™Ð4UÔ‘U®êPG´œs™=i±Ìj•5Oud•+3Û �lŽBGløqÄ£ùhcÔ‰nL뙪¡¯‡Ö·E’6*qŒ}ûÐCq{]iûë¸(ÑcœÉ°ïJ¯«=€æë«F4–Y7œ¦<Ï<ilÖ‘Æ”×¥Ž$ÕmÃÍgb™·=òÌ“ÆfiLyÒ<l7�°9 ±9àÇæ£Q'óÛc‘ x£Ê:Ò˜ru¤1å«ÔQÝq g¢g|"®&kÚ]é¹å»þ²»0Ñ£I!Wºí]iwo‰ÛHßi“è Ù*¯KI8—Ùcb™·=òÌ“ÆfiLyÒ<l7�°9 ±9àÇæ£Ë£±Ýäiæ—[äÞ¨²Ž4¦ÜFiLù*uT×Þæ1¬ø£[“aOöu»ó3ácW­CéŸs¼8‹=g}é¶v¤Õ틎ú#2–‰ž)[åu©#ɺŽYMdb™·=òÌ“ÆfiLyÒ<l7�°9 ±9àÇæ£Ë³ìÅrš¬re»Žumº\›¿#Iud•«¢ud•«¼u”ÝÞúÖª)ÿuÚ-o™ûÒuOd<l9L2¶þ{iÿ÷äý÷mqO_FÞ¦µ+Þgrä<”3Óh¿''OïÉáÁ?öïj¸r:ÑÞ=_‰ÓÑ·:HϽ)Nÿ‡páå[ˬöPYóTQGV¹ªCÑò²·ám’ˬöPYóTQGV¹2ó°Ý�Àæ(tÄæ€G<š6.‰mÖEgÑre»Žumº\›¿#Iud•«¢ud•«¼uØnoMìè[ª>ùäyë­·ÎÕ?Ëm3ŽÎξ~uW>ØÝ“Žó¹ô‡ÿUÆ'·g¯^ïÞ‘ãþM¿ÇO«sSŽý74ÍÞÔÕêÜ–“ñ½¹KH·JÿÖï߳ײWeQ,³ÚCeÍSEYåªuDËmoÃÛ,-–Yí¡²æ©¢Ž¬reæa»€ÍQèˆÍ?Žx4m\žU/–ó–—YǺ¶‹ùåýªÊ:Ò˜ru¤1å«ÔQ´½“;ú_×ue8†sm‡h,ó¶GžyÒØ¬#)¯KIÖuÌj"˼í‘gž46ëHcÊ“æa»€ÍQèˆÍ?Žx4m\ž´Øæ½(McÊˬc]ÛÅür‹þUeiL¹:Ò˜òUêX¥½5£‰œhbG=šð‰=ªµe¢±ÌÛyæIc³Ž4¦¼.u$Y×1«‰L,ó¶GžyÒØ¬#)Oš‡í�6G¡#6ü8âÑ|´qy–½XN“U®l×±®íB—ków$©¢Ž¬rU´Ž¬r•·Ž<ím;ׯ_÷ç'±“lQ,³ÚCeÍSEYåªuDË×uÌj¢´Xfµ‡Êš§Š:²Ê•™‡í�6G¡#6ü8âÑ|´qyV½XÎ[^fëÚ.æ—[ôw¨*ëHcÊmÔ‘Æ”¯RGR{“ØYM4–yÛ#Ï<ilÖ‘Æ”×¥Ž$ë:f5‘‰eÞöÈ3O›u¤1åIó°Ý�Àæ(tÄæ€G<š6.OZló^”¦1åeÖ±®íb~¹E‡ª²Ž4¦ÜFiLù*uhÜŸ={Kì\¾|Y>úè#;KŠnÃyÛ#Ï<ilÖ‘Æ”×¥Ž$ë:f5‘‰eÞöÈ3O›u¤1åIó°Ý�Àæ(tÄæ€G<š6.OZló^”¦1åeÖ±®íb~¹E‡ª²Ž4¦ÜFiLù*uhÜMbçÑ£Gòüùó°ËŠnÃyÛ#Ï<ilÖ‘Æ”×¥Ž$ë:f5‘‰eÞöÈ3O›u¤1åIó°Ý�Àæ(tÄæ€G<š6.ϲËi²Ê•í:Öµ]èrmþŽ$UÔ‘U®ŠÖ‘U®òÖÁqÀžE±Ìj•5Oud•«:Ô-g¶'-–Yí¡²æ©¢Ž¬reæa»€ÍQèˆÍ?Žx4m\Û¬‹Î¢åÊvëÚ.t¹6G’*êÈ*WEëÈ*Wyëà8`Ï¢Xfµ‡Êš§Š:²ÊUꈖ³ Û“ˬöPYóTQGV¹2ó°Ý�Àæ(tÄæ€G<š6.ϪËyËˬc]ÛÅür‹þUeiL¹:Ò˜òUêà8`O4–yÛ#Ï<ilÖ‘Æ”×¥Ž$lÃö˜Xæm<ó¤±YGSž4Û �lŽBGløqÄ£ùhãò¤Å6ïEiS^fëÚ.æ—[ôw¨*ëHcÊmÔ‘Æ”¯RÇ{¢±ÌÛyæIc³Ž4¦¼.u$a¶ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ#ÍG—gÙ‹å4YåÊvëÚ.t¹6G’*êÈ*WEëÈ*Wyëà8`Ï¢Xfµ‡Êš§Š:²ÊUꈖ³ Û“ˬöPYóTQGV¹2ó°Ý�Àæ(tÄæ€G<š6.ϪËyËˬc]ÛÅür‹þUeiL¹:Ò˜òUêà8`O4–yÛ#Ï<ilÖ‘Æ”×¥Ž$lÃö˜Xæm<ó¤±YGSž4Û �lŽBGløqÄ£ùhãò¤Å6ïEiS^fëÚ.æ—[ôw¨*ëHcÊmÔ‘Æ”¯RÇ{¢±ÌÛyæIc³Ž4¦¼.u$a¶ÇÄ2o{ä™'Í:Ò˜ò¤yØn�`s:bsÀ#ÍG—'-¶y/JÓ˜ò2ëX×v1¿Ü¢¿CUYGSn£Ž4¦|•:8ØeÞöÈ3O›u¤1åu©# Û°=Ëmš��›¡Ð›~ñh>Ú¸<&¶En^TV¹²]Ǻ¶ ]®Íß‘¤Š:²ÊUÑ:²ÊUÞ:8س(–Yí¡²æ©¢Ž¬rU‡:¢ålÃ��4[¡3= qÄ£ùhãò˜Ø.s³’$«\Ù®c]Û….׿ïHREYåªhYå*oìÑX2­g��ÍUèLÏ…Bñh>Ú¸<i±Í{óÆ”—YǺ¶‹ùåýªÊ:Ò˜ru¤1å«ÔÁq����uVèj•‹Ý8âÑ|´qyÒb»ê͸aÊˬc]ÛÅür‹þUeiL¹:Ò˜òUêà8���€:+tµÊÅnñh>Ú¸<&¶«Þ|YåÊvëÚ.t¹6G’*êÈ*WEëÈ*Wyëà8���€:+tµÊÅnñh¾:·ñd4{½®´w®Š;z~º9LlóÞl§É*W¶ëX×v¡Ëµù;’TQGV¹*ZGV¹Ê[Çz���ÔY¡«U.vãˆGóÕ·ŸŠÛÙõ×o§&‰žüÑŸòJ‹mÞ›ï4¦¼Ì:lmÏŸ?ÿ•ÏürWý¯ŽìúÛŽ7]ø3q¾úë°Äx%#÷jPn¦KŽŒÂR‘3ö]éu÷gå.‰s÷¡ OÈ»G¯†™U×3ÊVù*uèï���êªÐÕ*»qÄ£ùêÝÆc8moë‘è‡òÚk¯‰ëº¹>i±]õfÜ0åeÖak»ÐX]¾|Y=z~²Øür ýŽÉHŽ:rÁ«sçâ;2O‚ˆñ±\»øäÚ§ÿyVÇøD\?Á³/Ý^_†Þ÷üe|ý…ôýf;²ëØLôLd<¸-ï}úu¤ü… >¼#ƒÈBÒ¿0åyæ™Ç±���uVèj•‹Ý8âÑ|õnãú%z4^:åIø¤ÅvÕ›qÔ—Y‡­íBcdb–'á3¿Ü¢¿C^ äÚÏ‚å·\9=—ëy*Î¥,Îý߇u¼ð¶¹KÞü{rà~/föÙ2^Ê©û¶´:n¤÷OÁõœ|/îÁër-’虜ºr°çè���<…®V¹Ø#ÍWï6®o¢ÇL‹>&¶«Þ|YåÊvfÝ‹Š&zÌ´(á£å6‡&zœ½7¤ûŽöÐiIûðÜ­C¼6ݾ&Þìëzþâ=ù›/ÑäDÞ;8’û Ö#ÿzþu8Úi‹3~âgOv~vM>ý½edסq���êªÐÕ*»qÄ£ùJic½¹ÞÞ܇‰šèç»Ú[áL†ޤÓ2óíIç葌¦½.¢‰íi¡ÿÖùÌMqÚ8>/e4¸#Ýv+,Û—îíã°^¯ìøf¸L}4çŽ8Η±Þi’=fJJøèç*ïÍvš¬re»³îE%%zÌ””ðÑÏmþ›»èmk/žH¯³çÕ¿'—Þûòõ´Žh¢Çlo;ò³kŸÊï,'k=båã¡<p:Ò2¿½Õ‘£ã‘<þæ¯å+çÏfŸ›éÌvNWN§“H¯ÿy°m_¼*ߟ{(.ïzêr���€º*tµÊÅnñh¾òÚØ<3×ç¬/‡Wõš‰÷ÏCï&÷’8ƒú¬Šôµ×E¤gù=?ɰwenž¤ß½™G­¹&û]×[ÅOìôß÷n[²ß;‘‰·ün+\¦‹Ó½W8Ñc¦hÂGÿN’÷æ;)/³Ž´u_Ö¢D™¢ ý;ªèïðÝúã gÌdô@ýäß¾öOÃDz¢nýU˜8Ü•ŽûÔ/5ò®ÇyáöyñùôëÇòøþŸëà':ƒ9‚£Û‘G·ÂíÞÌ39‘Þ¾Iþ\¶ó[9Ñ^@­·Å=}éסÌ:$¯G ­|>î���@ºZåb7Žx4_póhoŠ ƒ‰Žu¢I˜Cï&û- =W¤7ü)ò÷¢DySÒ‚yb7ÅsÓ~O¾;Ö›êÙ »I¿»ä¤ ýo’UoÆ S>¿ÌMŸ4á£ÿÊ‹Ôy"‰ÝÆÆ'·ƒÞ\­éœyŸU”è ûæ›~ð÷2‰Ÿ®çϼuû“p9ϬCòzÒÊçã���ÔI¡«U.v㈊ orÛGÁ´÷ÌÁmÆò+ÞÍ÷ð¡¸áÛŒ÷èÉ‘è¹ÒÙ¹(]?™”@×Á<ÒÕîJïÞ ò¨Øbyzô˜éúõëþÕª7ßFV¹²]‡Y÷¢òôè1ÓG}äÿ׿ï˜>º5M˜¼”û_•‹ºL¿GÌ"n™Þa-ùÅ{®<.°çËç^×¾ëøÉ'Ç$zÎmÓ±1zÌcŠf_X! L¹®���PW…®V¹Ø#(ÆôÒiIÛy(ƒÞÁãSaéô5ÖšpqÊwý’ox—NôìH«Û÷n­SŒ‡Ò¿ëÌÆ2‰¨ y=šàÑù”þ$ïÍwS^fi뾬<‰Mð<þÜŸ_ÿŽ*ú;â=zŒ39écã´ßKÿ,ìÑó8Ü^½Ï÷{±„dÞõ8O™®¼yñgrñÍ.ÎÇŸJ_·×•{ôüé4Ñ3ϬCòzÒÊçã���ÔI¡«U.v㈠‹ö ™>¦¥ÂÞ­CéŸwÔ©=–IôLÝÚ“ŽóÕìñ,}“Ñ»ŸÍõ&:“¡{(í„Gu’,JôD<†~ždÕ›qÔ—YGÚº/kQ¢'šà1ô󨢿#9Ñ£ÌRº.:{½zdûI~½ºgüDn}{U{ê:øcBíÈ…7?–ßúó|}.‰C¢���X¬ÐÕ*»qÄÅ™”½êX/‰ðQ3 ìôÍD»Òé}&GÎC9›>J3?Žö:ön‡çßÚ¥  çáëªÍgf oÜG÷äpÚ«h"ãÁ‘´=ê‘”èIJðZždÕ›qÔ—YGÚº/+)Ñ“”à1æ—[ôwLN]¹|áOä½/~~a^cMôèÇÓA›5YèÊ`ô2\Æ_ËhàŠÓu¤ï}•ºa³ —ùêñcùú‹›âøoÿ:žëýÛÛî‚D>.ö䯜*Gƒ§aòÒÛîONÄ=üµ Æÿ…D���¶V¡«U.vãˆležO¦DÆÕÄM÷Ž÷ozóíH«sSŽGÿ{8&‰I„½x¦oçò>ó_S=”c隸Õqän(A?ŸùPäõê£/Åq>“»æu×^Îó½Å¢‰žE CçS«Þ|YåÊvfÝ‹Š&z%x ÏÎï{΄ËÖi׈¦Hbuø=ÎÞ>—<ùæë/äãu-² y“n+wú½Ä²ÖcVyLÌßJÿ–&>÷äÒ;ÿ^î?öæÏ^ýÞé=ñ¶Å`߸tÁûÎ…ËÒ{ò@œÝÈz„ûBÖ:¨¬yL¹Ö ���ÔU¡«U.vãˆ0£‰< Ãì?yo¶Ód•+ÛuØÚ÷5Ñ“'ÁcèrmþŽ$UÔ‘U®ŠÖ‘U®òÖÁ±���uVèj•‹Ý8â¬.mÿÉ{óÆ”—YǺöýùåýªÊ:Ò˜ru¤1å«ÔÁ±���uVèj•‹Ý8â¬.mÿYõfÜ0åeÖ±®}~¹E‡ª²Ž4¦ÜFiLù*up¬��@ºZåb7Žx�«3ûϪ7ßFV¹²]Ǻö}]®Íß‘ÄN_˧×t ðèØ9 SìÍYqÙ˨âw庮���@]ºZåb7Žx�«KÛòÞ|§1åeÖ±®}~¹E‡ª²Ž4¦ÜFiLù*up¬��@ºZåb7Žx�«KÛV½7Ly™u¬kߟ_nÑß¡ª¬#)·QGS¾Jë��Pg…®V¹Ø#ÀêÒöŸUoÆ S^fëÚ÷ç—[ôw¨*ëHcÊmÔ‘Æ”¯RÇz���ÔY¡«U.v㈰:³ÿ¬zómd•+Ûu¬kß×åÚüIª¨#«\­#«\å­ƒc=���ê¬ÐÕ*»qÄXÙòÞl§É*W¶ëX×¾¯Ëµù;’TQGV¹*ZGV¹Ê[Çz���ÔY¡«U.v㈰º´ý'ïÍwS^fëÚ÷ç—[ôw¨*ëHcÊmÔ‘Æ”¯RÇz���ÔY¡«U.v㈰º´ýgÕ›qÔ—YǺöýùåýªÊ:Ò˜ru¤1å«ÔÁ±���uVèj•‹Ý8â¬Îì?«Þ|YåÊvëÚ÷u¹6G’*êÈ*WEëÈ*WyëàXoÆ’i=��h®Bgz.∰:³ÿä½ÙN“U®l×±®}_—ków$©¢Ž¬rU´Ž¬r•·ûóçÏÃOQÄ¢}'«=TÖ<UÔ‘U®êPG´|]Ç,��PBgz.∰º´ýg™›—$¦¼Ì:ÖµïÏ/·èïPU֑Ɣۨ#)_¥ûk¯½&o½õ–Ü¿_~üñǰËŠnÃyÛ#Ï<ilÖ‘Æ”×¥Ž$ë:f�€j:Ós¡G<€Õ¥í?Enf”)/³ŽuíûóË-ú;T•u¤1å6êHcÊW©ÃÄýÑ£GrãÆ ÿoý¯þMÒg9Ñm8o{ä™'Í:Ò˜òºÔ‘d]Ç,��PBgz.∰º´ý§ÈÍŒ2åeÖ±®}~¹E‡ª²Ž4¦ÜFiLù*uÌÇ]“;šäÑ>ÚÓç£>’o¿ý6,Å"ÑXæm<ó¤±YGS^—:’¬ë˜��ªQèLÏ…Bñ�VgöŸ"7/*«\Ù®c]û¾.׿ïHREYåªhYå*o‹Ú[ÇîÑǹ._¾ì'}>ùäyöìYXŠy‹b™Õ*kž*êÈ*Wu¨#Z¾®c��¨F¡3= qÄXÙ–¹YI’U®l×±®}_—ków$©¢Ž¬rU´Ž¬r•·Ž¼í­ MôhÒG'×uÄy΢Xfµ‡Êš§Š:²ÊUꈖ¯ë˜��ªQèLÏ…Bñ�V—¶ÿ,só’Ä”—YǺöýùåýªÊ:Ò˜ru¤1å«Ô±J{ë£\úHƒ8ÇEc™·=òÌ“ÆfiLy]êH²®c��¨F¡3= qÄX]ÚþSäfF™ò2ëX×¾?¿Ü¢¿CUYGSn£Ž4¦|•:жwÒ ÎÛ*˼í‘gž46ëHcÊëRG’u³��@5 é¹Pˆ#ÀêÌþSäæEe•+Ûu¬kß×åÚüIª¨#«\­#«\å­ÃV{GqÞV‹b™Õ*kž*êÈ*Wu¨#Z¾®c��¨F¡3= qÄX]Úþ³ÌÍKS^fëÚ÷ç—[ôw¨*ëHcÊmÔ‘Æ”¯RÇz{¢±ÌÛyæIc³Ž4¦¼.u$a� Ù é¹Pˆ#ÀêÒöŸ"73Ê”—YǺöýùåýªÊ:Ò˜ru¤1å«ÔÁ±Þžh,ó¶GžyÒØ¬#)¯KI؆�h¶Bgz.∰º´ý§ÈÍŒ2åeÖ±®}~¹E‡ª²Ž4¦ÜFiLù*up¬·'˼í‘gž46ëHcÊëRG¶a��š­Ð™ž …8â¬N÷ŸMžÖA—[äFPeÍSEYåªhYå*oëjï&ZˬöPYóTQGV¹ªCÑr¶a��š­Ð™ž …8â JzÌ)rã§²æ©¢Ž¬rU´Ž¬r•·ŽòŽõ/e4øôºû²ë<’§Ç7¥ÓÒDbKÚ‡d4 g“3>8 ËtÚ“ÎÑ£ |2’Á½[Òm{Ÿ¹OdèJÛÌÓ{"ãñP8iùŸíËaÿT¦ÕêwowÃù½©Ý•ۃѬ¼‹b™Õ*kž*êÈ*Wu¨#Z^Þ6 ��ê Ð™ž …8â JþÍ8ÓZ¦RŒ\éL—±/]÷DÆò“ {W¼¿/J·ÿƒ7ÓDÎú‡ÒÚ¹$Îà…÷ç©ô÷½ò¶ÿ÷Ƚ~ߛڇâϼy¾÷`ϯc¿{KŽG/EÆO¤×ñ>kJÿlÎs%\¦.ÆÔ{Ezßô“RDc™7Q‘gž46ëHcÊëRG’Ò¶a��P …Îô\(Ä�@!a²g×È«ð£WGvwv¥ã>õþ2‰“€1k¢GS4æo3¿z&€Ì<j,§í}vUÜÑ+™ {²ï-×OŦ–ì÷NJëÕ=oæM\ä™'Í:Ò˜òºÔ‘$w��Ð<$z,"�€B2=ÆDÆÃ‡âöÌ£V³$Îùù³=?å¦wO…7³*kž*êÈ*Wu¨#ZÎõ ��ÍF¢Ç"â�($O¢g|"nwßC§ç>”ïúxå=ÓÇêC¢'PEÑr®W��h6=�@!™‰ž¤ß½ë}”IôDÝjuÄy0 ÆéñLNïÉ»·yt+*oy]êHÂõ ��ÍF¢Ç"â�(Â$\ZݾœŸ„cržŠÛÙ•ÖÛâžê Êæ-Z»Òé}&GÎ’§±ùÕü€Î*L™±~¦6GÇçÑÄO¸œ’DÏ›yyæIc³Ž4¦¼.u$‰Æ��4‰‹ˆ�`UAOœH’¥ó¹ üž8³Ïvcyqr{öÚõî9îß ’C!tþþÜü}ùßsÇ|¦=}~$‹bŸ=$ÂÏ ¾^ýÇ ÿ•N—cäM\ä™'Í:Ò˜òºÔ‘$w��Ð<$z,"��ˆ<þ\^{í5yöìYøI²EçͬD†Êš§Š:²ÊUꈖs½�@³‘豈x��š,O/uÿþ}ÿœ˜•ì!Ѩ¢Žh9×+��4‰‹ˆ� É4qóÑGÉ·ß~~’ìòåËþ9Q§EÉžèy3o¢"Ï<ilÖ‘Æ”/œçë;ríâi¸ršðl\®: ”s½�@³‘豈x��šLÉÒÞ:šÈÑÎ'Ÿ|r.‰£ëù0:é¼I½¢çÍÔÄÄ«8»¦®ŸËeç/Ͼ­l¶ÌàmbSã¡ôÝ[òæÅ ÓyZGîöOä´$GÓ·‘K (S¾p=�� D$z,"�€m¡ MôhÒG'×uýD~f’)Ñé­·Þ:—ìÑÏÓÄ/et|3„ú’8ƒþ§ñy^ÈÀy]ÚÎñôõðß|óX¾þ‘n»å.Ýë›WÇOd<ìK¯»ïÕwQ®}úµÿi’ø2΋•åÃÞßL_o,UGŠ¢uDËÅ��l>=�À6ÒG¹ô‘.í¹ó÷þÞßóχIÓ|²G?3²_˧×ô•ð^]‰¯}%÷,—œ¿ ÿöŒÅÑ$O8¿YÆt9þkå¼u,”½iå/åÔ}[~~íSùýÊuL¹:’Dã��š‡DEÄ�°Í4áã'bLÑdþmd'.4ÑóäÒ›&m­«ý¾ôGÑdÏ|¢ç'ö®xËhÉ~ïÄÜË,#ºœÉðŽZHôLN]9híÈÏHô��€5#Ñcñ��l³7nøç¬É${ôßFvâB=—äÚ§_ÉIï@ZÞw[Ûr26ƒÜÌ%z¦cû´Å Çà1ËX¼œå“‘Üyç’\Ðß¡‚ÝýPœ{O§IžÙoü™·÷d4øMðxXç–ôÝCiï´¤}ø¿Êÿrçÿ-ï½ù ïsWFa½ƒ{·¤ÛÞçx8[ÆÎ/ä°:“Hç»Ý ]ÞtáÒ?“ãX²kfÑïˆÆ��4‰‹ˆ�`[™ÄMÞÉ$…ÒœOTŒeàt‚¤ÍäTú‡:¾Î¹xðç2ò3!¯dä^›=†5rå’¿¬?Ì<gQBDÍÊ'rÖ?”VûH~ri"ãÁMyÓù« <L,í:ŒžÉ°'ûÓßûåÚÿ¸{Òú£Y ‚D&¨þtöYûPÜá™WÁ‰ôöõ±³CéŸM¼eüN¾xïO¼¿¤w¢å&á÷.9r?×ïàz�€¦#Ñcñ��l+}×4écº~ýºÿß4ÑÄD ’èñÿ|"ï]ú¹WÇÏ¥Ó{â•–èÑå·çuŽ”Ï%z|æm`¿xO¾xY†émöèùæ›ß‡ÉžYï£éòÂ7ˆ}óØ•÷~qaÖ È$“öäÀý^O×3Ùìwp½�@ӑ豈x��¶•>Ž¥çAô-\šÈÑšõm\š‡ç^Å=oFIfnÍÞ5=ClÙOvüA¾Š>ºuÖ—®ÿ8Õé ò?2ËX¼œ´ríÁs$ýßxAÚÝ[ro0š=V&obcô˜DO$9£¾ùý§rígÑÏ5IuÕ«7Hôë`Ÿ_ozøì÷dè-ÔŸç¾ã×K.…Ò×+��4‰‹ˆ�`[i"gþõéYŠ&züäËÉíðµëm¹téFcþAú]M”,ŒyÞâò‰|ýÅ-ùWÞzèAZ÷ôuîe'zÂDS{gß·çñ7¿÷½ËÞz\”nÿ¿–¨E¿ƒë��šDEÄ�€ü7Ï'*æÝòó< šxÙ½*ýñïÉ/ôóÄ×±«‰|í~ ïý¥ŸJ’š0Ÿˆ«-ïü©8÷?Mô$>º5?~Î*néz<þJú‡oH»½ëÇn§åÅãAðYêz†¢å\¯��Ðl$z,"��ä=of&*ÿ¥8—ÿX~ñž›”y)§îÛrÁÛ•éÑ£^ʨÿ~juäšó©Ü.Gß`åI÷Ýá`ÎôõÐ^7޼÷ÅïÂò2p.MKž&o~ñž¸u$ïÜ‘qZžß~,o^ð>Ú½ >è¬C_>~ó½ÏÌ£gÁoÜ IéëXTÎõ ��ÍF¢Ç"â�@~y=¯ŽüL&fÚud0?(¼O¯ýÉ\¢GMd<|(wNøÊò`ju¹TÙH_W2º÷¡\ûW7äš?´Öq$ô Y¾3ÿµïºŒ —Þ—ÿøñ?•ÝÈò¦ë<2ƒD›Ï»âüJ{î˜Ïv½ßðïĹô³ÈgÚÓç;q;aOž¹©Õ¹yî5ë‹â©ß��ÍE¢Ç"â�@~Ñóæ¢Ä„2åyæIc³Ž4¦Ü~‘ÞI Óü€Ì‹–¡ó�€æ"Ñcñ�� ¿EçÍE‰ #kž*êÈ*WVêxü•|ü?üÒ;1=ˆ ¤ùC¹üžë¿b=Mt\¯��Ðl$z,"��äG¢']ÇOòÅ{";.M_6&£c¹íÜ‘O¿~œ{\¯��Ðl$z,"��ä=of%;LyžyÒ¤Õ¡c�ÅÆÓIœ¢¯>_ÃzŽ‡Ò¿ë„¯’'Mü¸ƒØ`ÒÆ¢eèw�@s‘豈x��_ô¼¹(1¡LyžyÒØ¬#)¯KI¸^� ÙHôXD<��ÈoÑy3+‘¡²æ©¢Ž¬rU‡:¢å\¯��Ðl$z,"��äG¢'PEÑr®W��h6=��ò‹ž7ó&*òÌ“ÆfiLy]êHÂõ ��ÍF¢Ç"â�@~$z’Ù¬# ×+��4‰‹ˆ��ù‘èIf³Ž$\¯��Ðl$z,"��ä·è¼™•ÈPYóTQGV¹ªCÑr®W��h6=��ò#Ѩ¢Žh9×+��4‰‹ˆ��ùEÏ›yyæIc³Ž4¦¼.u$áz�€f#Ñcñ�� ?=ÉlÖ‘„ë��šDEÄ�€ü7³*kž*êÈ*Wu¨#ZÎõ ��ÍF¢Ç"â�@~ÑófÞDEžyÒØ¬#)¯KI¸^� ÙHôXD<��ÈDO2›u$áz�€f#Ñcñ�� ?=ÉlÖ‘„ë��šDEÄ�€ü7³*kž*êÈ*Wu¨#ZÎõ ��ÍF¢Ç"â�@~$zUÔ-çz�€f#Ñcñ�� ¿èy3o¢"Ï<ilÖ‘Æ”×¥Ž$\¯��Ðl$z,"��äG¢'™Í:’p½�@³‘豈x��ߢófV"CeÍSEYåªuD˹^� ÙHôXD<òÑ81U?@Ý,:6e%.TÖ<UÔ‘U®êPG´œs��ÍVèLÏ…Bñȇ8U˜¨£è±)o¢"Ï<ilÖ‘Æ”×¥Ž$œ��h¶Bgz.âˆG>Ä©zÄ@鱉i=��h®Bgz.âˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ˆG>Ä©zÄ����¶‰‹ª‰Ç™ ûŸ‹ÓÙ“]g ¯ô£ñ±8í–´\9ø3ÕÛMõˆ9����l=•‰œõ¥å-G—µ-‰žWGvÃß¼Óz[ÜÓ—a‰ñJFîÕ ÜLWFais¥×ÝŸ•·:âÜ}(ÃÓòîQÇÓß ����h>=U“ø˜&zÖìúõëòÑGÉóçÏÃO[)N“‘u‚$WûHㄌ–Ÿðz]œÁ‹ðÏøD\?Á³/Ý^_†æ{ã¡ô{]i×(Žeb_���€í@¢Ç¢mNôèo×)OÂgå8½ˆ³,'¹÷ÒSq;×Ä™¨¼sÉ›OÜïå|j襜ºoK+Öû§™ªÚ6����ëE¢Ç¢ªâQçD™%|VŽ“&zöÞî;ÚC§%íÃ2Šeo≞ɰ'ûº>û=&t�òMN¤wxD���� HôXTZ<ÆCyà„-íìË;Ý7ü‰ž—2ü&ÆôL™Œdpï–tÛ{ÒqŸÈÐ=ôQÒž-ÞÏÕwØ? {»xuß”N+ø¼Û»#Žóef$)Ñc¦¤„~¾Mô\tdðâ‰ô:{^=áï ‹ã‰ž± œ¶¿,« ±X켩Ց£ã‘¿Éh ÷üÇÁ¤×ÿÜ‹KvÚï˃Ç?ïþO>8 ã­“÷{ŽÉhr~Ì!óbã-ÑIç����4‰‹J‰Ç8Hj´:·åDÇ— ÿžÞü\éèM¿Nþÿ\’ }(îðLdò½¸ú½‹²ß½%Ç£—³ºZ‡Ò?óê>ëK·ui6ÆŽyÓÍîí²(Ñc¦hÂGÿ^‰Iô¼Ò¤Ê9Ô„I,QMôè¿w½ò]é¸OýÒâ~~÷âtŒ é:ìzëôòDzûº>ú{[Òv~+'úXX$±Ï[ÿ£ü›[ÿ“WÆ{r*ýCí©ÔöþÖÔÕDÆ'·ý$P«Û¯Cú8Úë ½™[9æ����€B¢Ç"ûñÇÙ¹"½áOág n™±k¦=<ÌÛ¹¢I“�2‰ez½\õ“#A½sƒç'Ñc&MøèWIôD!;­éh*¤¢DÏôQ°ðoMôøëd–o¯äÏM™ÏÌßÑöùI†½+ñïùɸùú³­s����ÀF!Ñc‘IffÂÁ4‘ÈNô˜y–Kô˜×´ûëÑîJïÞà\¯‘ùu]v2I¡•Ä=ꥌúï¥ù¯]ÿC$Ñ&avZ²ß;‘%:¿ä0÷ºös‰ž0žSiŸ«‰Œ‡Å ß�o¯ôÔ•ƒi¯ž0´hÌ¡+Ç����°QHôXd?'zü†Ò¿ëÌÆI{•yDž=:Ïp8ôç׿Wr.Ñ£Îä¤w þ#Rí7¤Ó~;ü-¦‡Œ÷ù ‰‘dš”q¥ÛÞ•v÷–¸ýô5~«&zÌ«ß5©æ>”ïúxmOôÌÞvEz'#½ý_J·ÿCX–ßÊ1����l=Ù‡é•}TÇ<ÎSR¢gê,Ä9ûѧE‰žh‚ÇÐÏW’˜èQ&¢ËŒü}£–?nNÚëÕ=ã'rûèË„Wµ'𛊎™Æo¥DOضf|$OÐfó‰žH¯žv[~™+Ç����°QHôXd?Ž‚GzÂA•gƒ‰?é& f=WLo–ècK&At1Ò#d.‘4º'‡ÓùͲ£ó'KJô$%x -_EðHŸf:Øt<É2‹×žtW:µOßVæŠÓu¤?ý,C8ðuëÀ•Ó‰öîùJ`ìé¹7Åé–Hô„ŸùœéÀØæm^»Òé}&GÎÃ0™¤L"Ks>–x(ŸUc����Ø,$z,*'š¸¼’Û«__Ëý•û¾ì¶:âÜ}(Ãá_ÌÞº¥ÓnWœ_i/Ùg»N_~ç÷Ü1Ÿi/߆ɇÈgÿúÿ%Žó™Ü5¯×e<f&¢‰žE Cç[ŽéydÖ5Ò›)ÊcÈ<º1ÿ8šN&~K :{LL­¾ýPú·4y¶'ù¾tþ(R¿é™cz[Í®‰43˜´&pºwä¸Sö½yZ›Á[Ñ"&ÞW¶ü ̆.����Ð|$z,ÚÖxhr'O‚Ç`»YÖêƒ0Ä����¶‰‹¶5ÏŸ?ÿ•ÛÍ’üžJ« Âls����Ø$z,"ù§¦c…|åxûÙ"Ä����¶‰‹ˆG>µ‹Ó¹qt’§ÄqJ€¹{'2ˆôjtý����ÍG¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1���€í@¢Ç"â‘qª1omS¦ê'”')ÞLåO�� y á¹@ˆ#ù§êóæ¡M«GÌËE|«GÌ�h¦Bgx.âˆG>Ä©zļyhÓêórßês��š©Ðž „8â‘qª1oÚ´zļ\Ä·zÄ�€f*t†ç!ŽxäCœªGÌ›‡6­1/ñ­1� ™ á¹@ˆ#ùhœ˜ªŸÐ,´iõˆy¹ˆoõˆ9��ÍTè ÏBñh>ÚuÁ¶X=b^.â[=b�@3:ÃsG<š6F]°-V˜—‹øV˜�ÐL…Îð\ Äæ£Ql‹Õ#æå"¾Õ#æ��4S¡3<qÄ£ùhcÔÛbõˆy¹ˆoõˆ9��ÍTè ÏBñh>ÚuÁ¶X=b^.â[=b�@3:ÃsG<š6F]°-V˜—‹øV˜�ÐL…Îð\ Äæ£Ql‹Õ#æå"¾Õ#æ��4S¡3<qÄ£ùhcÔÛbõˆy¹ˆoõˆ9��ÍTè ÏBñh>Ú¸×MžÖa]ËÝfļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖm±zļ\Ä·zÄ�€f*t†ç!Žx4m\ŽMŽëºÖ½ÑÛâx(ý»ŽtZmqcŒGÒÞÙ“÷{ï¯õ`ÿ/×vÆw½Û6Û4��ÍTè ÏBñh>Ú¸›×u­{Ñå¾8²ëÕ¡õì´Þ÷ôeXb¼’‘{5(7SÇ•QX*r&þ+½îþ¬¼ÕçîCž>w^ «øAúÝ‹a$z6™ëºòã?†eËßún·«"Ñ��ì+t†ç!Žx4m\ŽMŽëºÖÝÊr'#9>êHË«k§}$ƒqÂmæøXœöëâ ^„xÆ'âú7ÊûÒíõeh¾§=qz]ï¦uGv"7Ìc8m¯~“è©öÿåh¼^{íµÜ ŸÜñ­ív¥ œÛÒ«Ñö›„m�€f*t†ç!Žx4m\ŽMŽëºÖÝÚr_ ÄÙ z6´\9=wÏüTÜÎ5qGæö÷… œKÞüi=^Ê©û¶´b½(–E¢§ 4^fÊ“ðY*¾µÜn#&ß‹{ ‰&=�� z…Îð\ Äæ£Ë±Éqµ±î=’>úÈÿïóçÏÃO³3½aÞ{CºïhO‡–´È(v¿až {²ï-{g¿'ÃówËɉôï‘èÙr¯ùiQÂGËs«åvk„I£šm¿I–Š9��Ø…Îð\ Äæ£Ë±Éqµ±îšàÑz̤7Ã7nÜû÷ï˳gϹâ¬ÅLo˜/:2xñDz=¯Þ=éôžÈìö4zÃl06qQ¿Ç_¾ƒöÛÒõÿÞ(OF2¸wKºmoÝܧÁ7F¹ç?nsUÜá“ð‘ï»­鼘«ï}éæÇrYžµ˜/ôRFƒßøcÈì:äéñMé´t»˜KfŒ‡òÀ _òwGŽŽG~O•B±ÑXßc Ê»r{Ô»,ÿû)SRÂG?Ï­ÛídôHŽüe{mÓ½%wåÞè¿…Ižèï½*ñøwa›xmÐÿÜÛ–[AìOÿKú¶½ëÈñS³ ¯ž¹¶šŒŽå¶i[ýýGæ’]Ùô»�� y á¹@ˆ#ÍG—c“ãjcݵÖ“6™ÄÞ‡Cÿ;ú¹æ†Ù»ûŒȡހîìËaÿ4¼¹Þ0ë¿w½òÝéMiqŸÜ–NËܨ›¿õ·k¢çEdp]³\³ú™Þd{qOdrêÊ~ï—¯K÷C½éÕÕêöå,XàʬÅ|‘‘+ÿwé´/]÷Ä‹ÉO2ì]ñþ¾(ÝþÞLá€Õáø4ÓvÛÕv,ÿq£+á2õïSéj"áŠô†?é'K ÖañMøèß¹­}»Õ6ø¥´ã0¹¤†ýjÚƒ(4Ú$*O¤·¯ë§¿Ùkç·r¢É ÖüëÞ?ÏØ¶ÃI³¶ êlunËItˆÕ•m©˜�€Qè ÏBñh>Ú¸›W[ë®7¼Z×2“‘fïîq–dñ{è-eÉ7Ì~raoón7ÎÑåš·s]Þ\O×ÏOx„éïÓ±\,Œ½’Ô¶¦˜0Ùí}ÿýáoŸÆ,ü{ú»W‹Íôñ¦sSKö{'a¥œ8¼õÖ[þs[÷vëÇN1=éϧc‰ŸY‡óI³óÛvÞ¶Š~'L&¾‰,ÝR1��£Ðž „8âÑ|´q969®¶Ö]{ìh]y&ÏGÿkEì†Y½”QÿýàÑÿ¦ñ‘f“@ˆßø’ÔÈ—è1óT›è©Df¢Ç˜{Uøôw¯›ðµä­CéŸYiÙ`2¦Ë—/û.šùs[÷v;ÜY‡¾Åë72ˆ<V•žè‰¶I`õDOô÷˜×ÊG—™m©˜�€Qè ÏBñh>Ú¸›W[뮯h]YÓJ7Å‹œ»aVgrÒ;__ý†tÚÞ³s:‘³þaðù¢Am—A¢ç¼ÌDÏDÆCWºí]l·?¾ÆÂF¢gúxXqÑív~Š&x ý<·uo·>M´}>ïhç’·½¯s/;Ñ3M4™q{ÆáXEK&ê–Š9��Ø…Îð\ Äæ£Ë±Éq]uÝuL’o¿ýV>ùä¹~ýº_Ï¢Ií2ãó(ýÌŠÄfí±¹9Ž7’öšjwÓyûèË„W^'8ëKW¹‰Þ€O—A¢gö3"¿?ŒÙlÜ¡0…=^ØÍ£[­Ž8†^-Éé=y÷öò=a̶’<†–ç¶îí6Æ$Þ¼úÃX–Ÿèñ–ªãò¼±/mݼßÛêɃ„ÇÈY*æ��`c:ÃsG<š6.Ç&Ç5ïºG;f<ý¯þ­Ÿ›Áh“&oþµëú¹ Á ½)ƒíšñsænNg¿îIÇq#¬è£\qºÎo¹27æfàÙŸfàø“ö0ù»°GFôQó8NdÝÍÍ|´WCR"iE¶bžåÜÀ»Þ/Žýþ0Ô:påTUž¾Eë@zîMqúß­›i{›Ø‡Ó’ã¾Ñ:%x /¯õo·OÅ=¼3Û¦ÆÇâxu›6 ’7Ú^+OÝähð·)‰ž¹¶õ?ÊÛV¯GI«Y&æ��`s:ÃsG<š6.Ç&Ç5mÝ51£7¶:žŽIìhÏ蛳æ™ù¢“ŽÝ}µ¡eŘ^³eÅŸ ù7°æ˜ˆñPúwðíXá¤=Aî>ôß´”Ø+½[Ò>¼+îmiu¹ÛÿN†Ó·nÓî¯ù•ön˜~Öçwý ÇÃô3ï†z𹟉}6ÿ;– u”-HDÖ¹ó¹ æ¿ó@ž˜G”t|˜Û¥Kßʵ'ù¾tþh6ïÒ±™m{Á׫çIð:¶ºl·Oåžó¡Ü֥ɣ¯fu˜G©ôó_ß”îüöê'hÌãr³²óÛvB[iOŸ§A²o6Ÿ™¼å-ñšuý��hžBgx.âˆGóÕµ'£Üëér±ÙuÙä}Ǭ{4±£7·úyVbgžöîÑï™IÿNc–‹êóåäMðÄw ÓWßG“<fŠ>2¶˜Î��š§Ðž „8âÑ|õlc3öƒ^à×#Ñc’ymâ¾óìÙ3¹ÿ¾¿îšØÑ1t´÷~¦e«Ð˜í8t9Í&ÆlÓórßüô1´w»wää\/$}²›üH[b�@3:ÃsG<š¯¾mœ4øêúhUÞÇ66aß1‰MæhRÇ$vtÝWMìÌÓ™Ö›§>Ž7Õ#æå"¾9…cøœ|YÇúLœÞ`:vb�@3:ÃsG<š¯¾m\ÏD™²>uŒ«þ}ìJ¿Òä‹þ},KGt`dÛëž4O’:Æ,Ƽ%(ÜÒ¦ÄñUjJ×å©G|Ï”8E߈U9€û¡ÜŽ¥äM:¦•»äxJú=��Ð<…Îð\ Äæ«o×;Ñc¦´„–­[4±cÖ5)±3o]ë^‡˜mb^.â[=b�@3:ÃsG<šÏzŸëõ&j¢Ÿûÿç8ú åàóVç¦O_OôDßÜô˜ˆ¾ÝeW:îÓð{ÚÕÿŽtýWk™¾ÁçxúÆ–Éè‘ùËÔW_ß’»Î‡r/G")-Ñc¦ù„~V¥è«ÎMbgþUçyU½îƺ–»Íˆy¹ˆoõˆ9��ÍTè ÏBñh¾rÚXϼäÕ=×ç¬/‡W]9Õ¤‹÷ïn«%mçXÆšœé¿ï¿ŠzöØËù=“aOöcóL¼j¥5Mô¼”S÷šìwÝð•À¦Þ–ì÷N¼¹~÷—á2•®ç¯rõÊJô˜É$|ôßeŠ&vÌ+ÌWMìÌ+{ÝÓ¬k¹ÛŒ˜—‹øV˜�ÐL…Îð\ ÄæÓ6¶5EI™=9p¿ÇWÐ$Ì¡öðÿ2‰ž cþ^œè‘‘+o9Ñ1P‚ž>a¢'Ð3iÝvö{2|©½Š´'OOú±?g¿»âT}ìJë_öUçy•¹î‹¬k¹ÛŒ˜—‹øV˜�ÐL…Îð\ ĬN{Ï\”ö‘ ´wÍøXœƒÛ2 ²>3ã¡ôÝ[ÓG­ %züò‹Ò5ɤsLO#MÄìK·÷L[¬n=zÊ´®ußä˜m*b^.â[=b�@3:ÃsG<°:óX•>žõP½7f½w|g2t¥í'\\é÷Àçx¢gGZݾW{o¹ýÏ#c]gð",KW÷1zlZ׺orÌ61/ñ­1� ™ á¹@ˆ#(D{ñLE¾"½áOaIEzß„ƒ5JôLÝÚ“ŽóU8Ngò½¸ï~6×›HƒvƒžDWFá§iÒ=ó CË6ÕºÖ}“c¶©ˆy¹ˆoõˆ9��ÍTè ÏBñ@1?ɰwÅߎü1r¦‰óÆ,3†Ï™ I§åÍ×ùµ¸G7¥öwÁ£_ÑQ8ŽOð8Ø«soíÚuÉ÷îÛÒ ÿžMf9OÅ=¼3[0µ¸P`>Ñ“–à1tžMµ®ußä˜m*b^.â[=b�@3:ÃsG<PT0(s¸9ã'Ò3IšvWn?[Ú§Õ‘£ãÿMþ¢³”ùS[œ¾'köv.¿×ÎÑ#yzìÈ®÷çîðO$iäÏ}½úS¹ç|(wï:aù\ÏŸL¢'+Ácè¼›j]ë¾É1ÛTļ\Ä·zÄ�€f*t†ç!Žx�gÏžåJð›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øV˜�ÐL…Îð\ Ä`5›¼ï¬kÝu¹LÕO(OR¼™ÊŸ��@ó:ÃsG<€Õlò¾Ã~��� NHôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè����;HôXD<€Õè¾³É����Ô‰‹ˆ°šMÞwØï���Ô ‰‹ˆ°=����`‰‹ˆ°=����`‰‹ˆ°=����`‰‹ˆ°=����`‰‹ˆ°=����`‰‹ˆ°=����`‰‹ˆ°=ËÓå2U?¡<Iñf*��ÍSè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè ÏBñ�V³ÉûκÖãMõˆy¹ˆoõˆ9��ÍTè _Ê«8»;~Ý;;{rà~/“°hjäJÇ/7ÓUqG¯Â‰Œ‡Åíu¥=-ß“Žó¹ô‡þ»¿–™Õ²RâlMÞwÖµîoªGÌËE|«GÌ�h¦Bgøò.^Êèø¦tZš¤¹$ÎàEøyÔ 8¯KÛ9–qø‰È™ ÝCiï´¤ÝíIx6û¼ß“n»%;»‰ f6yßY׺s¼©1/ñ­1� ™ á˽@ËÀiûËØi½-îéËðs㕌ÜkÒqŸ†Od<8ò{ñ´\9=× È›ãÔ•ƒV´÷]\0«Ùä}g]ëÎñ¦zļ\Ä·zÄ�€f*t†/÷A=¯K§ûvðVû}é¢Éž¹DÏäDzû-o®HoøSðÙ9?ɰçèjf“÷u­;Ç›êórßês��š©Ð¾Ü MôtÄœÊIï@ZÞ²ZÛr26]u≞WGv½yÊ|4+ LÀj6yßY׺s¼©1/ñ­1� ™ á˽@0‰ž±>s%ýÃ}oy-i>‘Ÿë‰&zôßWýõÙé¸2Òâ5à‚ XÍ&ï;ëZwŽ7Õ#æå"¾Õ#æ��4S¡3|¹‘Dÿçéuö¼eîI§÷Ä+%Ñ4Å&ï;ëZwŽ7Õ#æå"¾Õ#æ��4S¡3|¹s‰Ïdô@õÍYþk×ÿ §ÓDÏDÎú‡þã];û=& Ä\.˜€Õlò¾³®uçxS=b^.â[=b�@3:×{p>Ñ£ ñÉíðµëmét.Íc>ëK×ÿ|Ñ`Ìåâ‚ XM™ûÎóçÏýúßzë-¹qㆸ®+ß~û­<{ö,œ£˜uí÷oªGÌËE|«GÌ�h¦Bgør/’=jöõÝY¢Ç£ÖÒ^¯.r&'·-÷νªÝ.˜€ÕT±ï ‡Cyô葟è¹~ýº\¾|Ù_î|Hç[†Íu×ekb*Ž7Õ#æå"¾Õ#æ��4S¡3|©“ïÅ=¸(û½9Ÿ³y)§îÛÒŠ%z<ÓA›õ ]ޏƒÑô»“Ñ@\çPÞíŸ&ÔgLÀjÖ¹ï¤%€ô¿ú·~®åi ›ë® §×^{ÍO8eiôñf<”þ]G:­v˜ì7 ~}l÷ûÒŽáY8Æ—k;ã»Þm›m�€f*t†/ëaúªt3%¾2ý… œ+ñDïL†ýÏÅñn6uìIÇù\úópžr” éê¸ïD@š€Ñž?ºžó ›ën–¡ÓG}$?þøcXr^ÑåÆŽ³­·Å=×Ó12Ƚ™bƒÝë±Ö•^7H®õtĹûP†§äÝ£WÃ*~~÷bX'‰žM¦ÛpÞj*O|ë»Ý®ŠD��°¯Ðž „8â¬f“öÛG{ܘ£èMy{�-bêŠÖ™6––6ÉñQ'Ⱦ}$ƒqÂmæøXœöëâ ^„xÆ'âú7ÊûÒíõeh¾§=qz]ÿÑÚ]§È ³>ºÛöê7‰žz°ó-b¶ã¼ ŸÜñ­ív¥ œÛÒ«Ñö›„m�€f*t†ç!Žx�«Ùä}Ǭû|ÈôÎÑG±4ôÉ'ŸÈýû÷ýPROý¾ÎŸ4ióôs+^ ÄÙ –“<¾ÙSq;×Ä™Û_íMyÉ›?­Bøhm¬ŲHô4Ù~Í”•ðY*¾µÜn#üÇÏ5ÑD¢��T¯Ðž „8â¬f“÷¬uÏ›�ÒI?O›tÞèM²~f…Þ0ï½!Ýw´§CKÚ‡d» Žß0O†=Ù×uÚïÉðüÝr`r"½Ã{$z¶\tûNi -Ë­–Û­aƬ×ö›d©˜�€Qè ÏBñ�V³ÉûΪë®7ºÚ»G@zãk^4EjÖ¿­Ð拎 ^<‘ž?¶ÙžtzOdv{½a6 ›¸¨‰Œ‡_ÍÆVk¿-]ÿßáòd$ƒ{·¤ÛöÖ-—MØ¿ç?nsUÜá“ð‘ï»­鼘«ï}銿mÑZÌz)£Áoü1dvGòôø¦tZÚþsÉŒñP8áãKþïîÈÑqð‚B±ÑXßc Ê»r{0{±Á2üï/˜æ>úYn5Øn'£Grä/Ûk›î-¹ë|(÷Fÿ-LòDëUù‹Ç¿ ÛÄkƒþçÞ¶Ü bú_Ò·í]GŽŸšexõ̵Õdt,·MÛêï?z4—ìʦß��ÍSè ÏBñ�V³ÉûŽ­u×›^­+ÏdæµÂÜ0{w¿“Ñ9ÔÐ}9œ¾¡0zìÿÞõÊçÞxXÈDÆ'·¥Ó27êæoý­šèy\×,׬‡~¦7Ù®?ÞÊäÔ•ýÞ/_—î‡zÓ;««ÕíKÑáø­Å|‘‘+ÿwé´/]÷Ä‹ÉO2ì]ñþ¾(ÝþÞLá€Õáø4Óvó_\P 6þãFWÂeêßæM–W¤7üI?YJ°Ù“Iøè¿s[ûv«mðKi;ÇarI ûÕ´Q0h´ITžHo_×O¯×&ÎoåD“A­ù×¼~ž±m‡=’fmÔÙêÜ–“è6«+ÛR1��£Ðž „8â¬f“÷[ë®fi]y&ÓûÇŠÈ ³w÷8K²ø½?ô–²äf?¹°7÷HÍùG·‚çèrÍÛ¹®No®§ë}S£þ>ËÅÂØ+óí`sŠ “=ÑÞ'ñßþöiÌ¿§¿{µØLo:7µd¿w&PʉÃÒÛôº·[?všˆé%¾Ñ3–èñ™u8Ÿ4;¿mçm«èwÂd`â›ÈÒ-s��°1 á¹@ˆ#Àj6yß±µîúX–Ö•6éØ>ú˜—y —~fEì†Y½”QÿýàÑÿ¦ñ‘f“@ˆßø’ÔÈ—è1óT›è©Df¢Ç˜{Uøôw¯›ðµä­CéŸYiÙ`2&Mðè[êÌü¹­{»CßâõD«JOôDÛ$°z¢'ú{Ìkå£Ë̶TÌ�ÀÆ(t†ç!Žx�«Ùä}ÇÆºë[¸´žùIoÖAš \»È¹fu&'½ƒðõÕoH§íÝ8û7§9ëŸ/Ôv$zÎËLôLd<t¥ÛÞõdžqûék,l$z¦‡Ý–ç§h‚ÇÐÏs[÷vëÓDÛç³ñŽv.yÛkð:÷²=ÓD“·gŽU´d¢n©˜�€Qè ÏBñ�V³ÉûŽu×A™µíÕ£ã•è€ËI¯`²³Äfí±¹9Ž7’öšjwÓyûèË„W^'8ëKW¹‰Þ€O—A¢gö3"¿?ŒÙlÜ¡0…=^ØÍ£[­Ž8†^-Éé=y÷öò=a‚m'>%%x -ÏmÝÛmŒI¼yõ‡±,?Ñã-UÇåyc_Úºÿx¿·Õ9’ ‘-²TÌ�ÀÆ(t†ç!Žx�«Ùä}ÇÆº›7p-ÃVÌ‚AzSÛ5ãçÌÝœÎ~Ý“ŽãFYÑ7F¹ât%ÞrenÌÍÀ³?ÍÁñ'íaòwaŒè£*æqœÈº››ùh¯†¤DÒŠªÚNÏ ¼ëýâØïA­WNuPåé[´¤çÞ§ÿÝj±™¶·‰}8-9î‹­cQ‚ÇÐùòZÿvûTÜÃ;³mj|,ŽW·i³ y£íõ·òÔý@Ž›’è™k[ÿ£¼mõz$‘´šeb��6G¡3<qÄXÍ&ï;ëZ÷âË5½>f7ãñǧBþ ¬y&b<”þ]'|;V8iO»ý·-%öJï–´ïŠûA[ZGîö¿“áô­[Á´û+G~¥½¦ŸµÅù]?èñ0ýÌ»¡|î'DbŸÍÿŽ%he ‘uî|.ƒùßï<'æ%æöCéßÒ·ríIç_¾/?šÍ»tlæ_Û^ðõêy<†ÎŸ­.ÛíS¹ç|(w§uiòè«YæQ*ýü×7¥;¿½ú ó¸Ü¬ìü¶ÐVÚÓçiì›Íg&oyK¼f]¿��š§Ðž „8â¬f“÷u­;Ç›êóåäMðÄw ÓWß'%{¢Œ-¦ó�€æ)t†ç!Žx�«Ùä}g]ëÎñ¦zļ\Ä7?} íÝî99× I…ì&?Ò–€˜�ÐL…Îð\ Ä`5›¼ï¬kÝ9ÞT˜—‹øæŽás~ðekè3qzƒé@ÚYˆ9��ÍTè ÏBñ�V³Éûκֽö13o òÖsÑ”8¾JMéú¢<õˆïù1€§è±*§p?”»Ñ±”¼IÇ´r—OI¿��š§Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬f“÷u­;Ç›êórßês��š©Ðž „8â¬F÷MžÖa]ËÝfļ\Ä·zÄ�€f*t†ç!Žx�¨ Ç›êórßês��š©Ðž „8â *oªGÌËE|«GÌ�h¦Bgx.∀ªp¼©1/ñ­1� ™ á¹@ˆ#�ªÂñ¦zļ\Ä·zÄ�€f*t†ç!Žx�¨ Ç›êórßês��š©Ðž „8â *oªGÌËE|«GÌ�h¦Bgx.∀ªp¼©1/ñ­1� ™ á¹@ˆ#�ªÂñ¦zļ\Ä·zÄ�€f*t†ç!Žx�¨ Ç›êórßês��š©Ðž „8â *oªGÌËE|«GÌ�h¦Bgx.∀ªèñ†©ú åIŠ7Sù��h=�����°N$z,"�����`HôXD<�����À:‘豈x�����€u"Ñcñ������ëD¢Ç"â�����Ö‰DEÄ£˜áp›¾ýö[q]·ÔI—1¿Üü1\#�����6 ‰‹ˆÇyÑ„Í'Ÿ|"ׯ_÷'ÕüôÖ[oMËÍ4Ÿ˜±=Í/O§¤u3e}ô‘ÿ=“ ���� NHôX´ñÐÞ/šðxô葟�ÑDˆ&D^{í5?&y£I-ßÄ^3æ7êtÿþýi‚H[4tãÆ ¿Lc±i¿����Ð $z,jz<L¢Ã$s¢I4É¡å:ßóçÏÃo5ŸþVýÍ&Ù¥ Ÿh|4!d’@:�����e!ÑcQ“âñìÙ3?q¡=qLÏý¯&yL2‡+Ù¢=ž4vI±ÔX����`‰‹65Ú#ÅŒ£cz¢\¾|9Ö …¤Ž]SMòhŒ5Ös½&Ö4)TI¨ñPúwé´Úâ Æá‡¡ñ‰¸Ý}½vvö¤sôHF“° ����P[$z,Ú”xh“dбtt2^iÂg›»ª ÓóÇ$ÛæÛÅ~¯Ÿ¤ß½&ræ=“ïÅ=hËû½L&§Ò?Ô„Ïé  g�����Ô‰‹êMܘG‡4y =Hôßú Õ—éi¥m¥m¦m§É9MÒÙIÆeà´Ï%z^ Ù%±����‰DEu‰‡öÑ>4Ÿ ±³¹LÂÎôÄ2 »Õ%%z^ÉȽê}vUÜÑ«ð3����À¦ ÑcÑ:ãaû‰ökÆ×A3iÒNÛxuI‰žŸdØ»B¢����6‰‹ªŒ‡öÚ1½;t¹Ú»C{ðhONÞ^“ѱܞ¢Ü’v×•áØŒ¢<‘ñð+q:{Ayûméúÿ=#W:þ÷¢ÓÜø=����€Z#ÑcQžxh2fUóÉý¯þÍàÉP“SWZ{Òé=‘±&uGÒö¶“V·/gú÷ÉméDËý¿ç“9¦—=z����`‘è±(+:žŠÎ³ìãTf@^—Eɲ7/š#|äj¿'CÓ'|EzëÀ•ÓWú&­½xyâ£[$z����`“‘è±hQ<49£å:å@—ä–óTÜήìt\…ŸÄ„eí:™¥oHô����@Óè±(-úx•Iò˜))i£ƒëšäŽs‡äò =­·Å=}~A¢����¶‰‹’â¡ÉMÜD“<:™·%i"Gÿ­‰“ÜáèXÞÒï^ô·­Vç¦L²ç¥œº·äÞÉWÒÕñx¢nMN¤·ßò¾C¢����š‚DEóñÐÁ““’<:ýƒð¦ƒ*k/^ƒŽ¢‚Á˜Ïokþ=“2p.y›7qý$£þûþ`ÍÁ|¥ÛÿÁ«Å$Œ®HoøSP1����`cè±(MòèØ:æf;i:::âUè°hîõé;{Òq\˜Þ=“‘ nwÃäNKÚ‡wÅý -­Ž#wûC'½^}בAرGljb{���€z#ÑcQ4¦·Î¢IAÀ¦¸~ýºßCM{ 1v����Ô‰‹L<tœhBgÑÄ#[Ø$šà1†kâGß����¨=i<’Þ°µhÒ›f`Óè#\ú(—DœÇº���� HôX¤ñÐ^:eÏx ›L{¥Eg{���€õ!ÑcQV<ô†8:i/}µ:¯SG˜ÇºHø����Àú豈x�$|����`HôXD<€>����P==à<>����P=  ����(‰‹ˆ„����”‡DEÄÈ/šðùä“OäÇ K�����«"Ñcñ�–§ Ÿ7nÈk¯½&÷ïß?����¬‚DEÄXÝp8”·ÞzËŸôß����€å‘豈x�Åi¯íÝ£½|¿����–C¢Ç"âØ¡ãõè¸=ºO¹®Ëø=����‰‹ˆ`׳gÏäúõërùòeyôèQø)���� ‰‹ˆPŽo¿ýÖOöhÒ‡ñ{���� ‰‹ˆP.}ŒKÇïÑײó8����œG¢Ç"â”/ú:víé����˜!Ñcñ�ª£Ióv.z÷����@€DEĨ–&x4Ñ£ã÷0v����豊x�ë¡oäÒÞ=úJvz÷����Øf$z,"ÀúèØ=æUìúZv����ØF$z,"ÀúÝ¿ßïÝ£oè���€mC¢Ç"âÔƒöèyë­·ü‰Þ=����¶ ‰‹ˆP/Ú«G÷Kíå����Û€DEĨӻGÇïa f����MG¢Ç"âÔ“&x>úè#ì^Ã��� ÉHôXD<€z3¯açQ.����ME¢Ç"âÔŸ>Ê¥¯`×><Ê��� iHôXD<€Í  ³‡·r���h=`³è[¹ôQ®o¿ý6ü����6‰‹ˆ°y4ɣɞO>ù$ü����6‰‹ˆ°™ž?Î+Ø���4‰‹ˆ°¹Ì+Øu fÆí���°©HôXD<€Í§¯^×}Y_Å����›†DEÄhíÑ£ãöh����Ø$$z,"@s˜q{nܸÁ¸=����6‰‹ˆÐ,šàÑš5áC²���À& Ñcñ�š‰Aš���l = ¹tf·g8†Ÿ�(ƒžK™ªŸ��@s豈x�ͦoâÒý¼.oä27hLëŸ`ñ¬1� Y Ù¹0ˆ#@ó™7r}òÉ'á'ëÃ1§h»ˆgõˆ9��ÍRèÌÎ…Añ�¶ƒ&{t€æu¿~cN=ÐvÏês��š¥Ð™ ƒ8âl} —&{ÖùF.Ž9õ@;ØE<«GÌ�h–Bgv. ∰}´W&{ÖñF.Ž9õ@;ØE<«GÌ�h–Bgv. ∰t¼·§êdÇœz ì"žÕ#æ��4K¡3;qÄØ^Ú³§êdÇœz ì"žÕ#æ��4K¡3;qÄØn&Ùóüùóð“rqÌ©ÚÁ.âY=b�@³:³saG<�˜1{ª ™cN=ÐvÏês��š¥Ð™ ƒ8â@U•ìá˜S´ƒ]ijzÄ�€f)tfç Žx�0ªHöpÌ©ÚÁ.âY=b�@³:³saG<�D•ìá˜S´ƒ]ijzÄ�€f)tfç Žx�˜Wf²‡cN=ÐvÏês��š¥Ð™ ƒ8â IYÉŽ9õ@;ØE<«GÌ�h–Bgv. ∀4e${8æÔí`ñ¬1� Y Ù¹0ˆ#�±ìá˜S´ƒ]ijzÄ�€f)tfç Žx�Èrýúu¹qãFøW1sêv°‹xV˜�Ð,…Îì\Ä�Y´7öêùä“OÂOVÇ1§h»ˆgõˆ9��ÍRèÌÎ…Añ�ÇóçÏåµ×^“G…Ÿ¬†cN=ÐvÏês��š¥Ð™ ƒ8â ¯gÏžùÇŒáp~²<Ž9õ@;ØE<«GÌ�h–Bgv. ∀ehíÙ£IŸUpÌ©ÚÁ.âY=b�@³:³saG<�,KÇêYõM\sêv°‹xV˜�Ð,…Îì\Ä�«Ð×®ëÛ¸–Å1§h»6.žãcqÚ-i¸r: ?Û0݆'#Ü»%Ýöžtܧá‡��4_¡3;·qÄÀ*Ì›¸4á³ Ž9õ@;Ø•'ž¯Žìzóé¼;­·Å=}–¯dä^ ÊÍÔqe–ŠLd<|(n¯+íé<{Òq>—þðÒ÷×2xΚ…DOME·]=�€­RèÌÞÌ ƒÕ�«Òdϲoââ˜S´Ãb7nÜ×us?ž˜;ž“‘u¤åÍ¿Ó>’Á8!Ëâ'a^gð"ü@ÉÐ=”öNKÚÝžô‡g³Ïû=é¶[²³ëäOô4@“·á )H¢�°] Ù¹¸#�ŠÐA™5Ùóí·ß†Ÿ,Æ1§h‡Åô±D‘nÛy>KÅóÕ@œÝ GNrš§âv®‰;2Y›‰ŒG~/ž´8“SWZW#ßi¾&oÃ$z��ۨЙ‹Û8â ¨eÞÄÅ1§h‡ÅL¢ÇLY Ÿ¥â©‰ž½7¤ûξ÷½–´È(–¼™KôLN¤·ßòæ½"½áOÁgçü$ÞC¢§!Hô��¶Q¡3{“/ VA<�Ø 7Á—/_¶Ûó¥)¿ÎdøàH:-“,Ù“ÎÑ£YB#öSWzw?ç^pS;=’£Îž÷}Lé–Üu>”{ÓÆK \qür­Wç¹#ƒQd¼Ìövd›ö¡¸ÓGò™Oô˜)-á£e¹i¢ç¢#ƒO¤çÿ/6½'2‹ç=Ó±}¬=š¥1üôºûñ1€ÆCyà„m¢S«#GÇ#ñ›,:@pïKqõ»;ûr½w73è@zýσGÈÚïKô“WÝW‘vÚ‘Vç¦þÛ¹qˆvèÏŠa›(™ÎW/c8íÈo3‰šèçmq^K/е'–è‰ô�›n#W:滑XMFÇrÛo-›Û7ìs��ÔA¡3»žü0C<�Ø¢ãšè´Çœz(·&rÖ?ôn(/ãÌLN¥¨7ŸáM®)ŸŽQ£&Ý”®Süƒô»¿”¶s&>^x7É¿ “æ¦}9ìŸz½”ÑñÍ ™ä'¼ÚÉ÷âìI«s[N´îpÐáÖ¡ôÏÌmt¶´D™æ>úYn&Ñãý¤ÉèêúM“Š&z"ƒóæH~ä’˜$и_ôâ´Ét½üÄ‚öº̯“7ÏñÉ]90ûSËk³ßʉû¶´t éï¾”nK?ÓvôÚ©ÿ¾Ÿx ’:^;žÜöÛ­ÕíË,§mýzB§dºÜú1Ûè|o/¾‡‡á�Ü‹bÌ}®GéÕMöõ½{±ÛÐ|o–ԜֻߓádÑ>�@=:³×óÂ`}ˆ�[ô¦W{õÜ¿?üä<Ž9õPn;˜DyÔÈüm=aíUІ ß{A{"D™›]ÿÆ5üL^Ê©&vZ²ß;‘WÞìÇq 1N|ËUº¬D™LÂGÿ[$Ñãßp‡IÖôNô7—œèQ¦—È|¢gÛðïibÁ¬GçYF×u×û|î±2? ™7LJ˜Þ;Á£fš<Š|ÏŸgÑãiqKżJávOI“0WMR++ÖÚ<ón…qŽ&zbm8—Œ‹MÓÒ÷9��j¢Ð™]Oz˜!�lÒqzô¸’6^Çœzn�íOq“¹×Ïzô˜Á…ÍãY÷æ±íÕq)¬o_º½ßÌ= {¢Ì’!ÓC¥ó¹<ö“Ùƒϯw‘I“›úßÜb‰5ëñ¼vý‘DI’ye±WAç=†¾ÅË ëÒežKôÌ÷T1‰ž”˜‡Òwõ‘¯–__´í‚¤M¯žðw.ñMüë0Å™6 {´ùÛt7!•ëU=Ay¼‡TÔ¢}.0ÿ›Ö9�¶S¡3�'8âÀ6íÑ“6^Çœz(½Æ'Á8.ÚƒÀ}(ßõ?ðn\M¢GI »ÓqJÌc>Jo€?ŒïÞ0O:sɉs‰ž=9p¿ÝÄ.+OÝÆu r¥çv.Ñ£Îä¤wÄ¢ý†tÚoÏ'æù^3EœKôh{¸ÒmïúI�·?¾ö�Y9Ñö¤ò“u®ô¿{à//ž¤3I=ïwüôö)ÝþaY¶¥b^5Ófú˜Ûà–ìÇXY±^=ѳøÅEû\}Ôº]�¥*tàG<�”!m¼Ž9õPn;„¢Dn:ƒ×h¢'Â$…Î% Ì q+¸™5nÍ=†5ñ×ÒÇ„¾“ÿjz¿Ì n;9ý-1ðì¢DO4Ácèç¹%&zT´7S4³ÇrÒ^¯î'ŠnÿZîå}<m>Ñ&&f=BÂÇëVJô˜-g‰›py󽱦½zÚmùå’ã(-óÊEÛrîq·ÌX›ýe™DOdéɃécúhã‘ÜžO¦îsëWïv�”©Ð€Hñ�P†´ñz8æÔC¹í`z„ ™é†¼×Þgrä<׉ôN oŠýýÿ"îáYï‡p0åà¦xöˆSð'¯n3гd6ŒY_l²0FOR‚ÇÐò¼‚äFJïœéúÏÝ€O´Ößîˆyìf2ˆëÊ»ÓÁœs0=NLO“°WTHÒ›ycÖôÜ›âôÿK$zLRÈô¬:›½­ókqnF:&!²|ï’eb¾AR·¹¶ÎŒõß…‰²h‚(LžšÞmóoíÚuäøû iæÿ™‚åh›¤ís¹·šJè:�¶S¡3�'8â ,IãõpÌ©‡rÛÁ»y5 ë |÷Ž÷oú7½ÓWlßûPœ»ŸMÏšõBx*÷œåî]'üþžtœ¯dè¿)Hé«ÁïLÇ| ÊÝøëÕçn‚ç#yD=‹<†Î—mþõÛ ã )?¹ytkjþ‘6ô÷~~àêEÌ£nfò{‰DÓÇ­n?”þ-í!âÕô¥¸$¬·éQ2ý<Òckl^ï}ÞîÊíãrËïïi¥‚„Èò¥iݵfe>7n΢X?”Ç¡I²Y\Í62{C[¸=}äÅ?ÚþѤ‘~7Ø÷‚}ãÕ‚}®^tÝ��۩ЀHñ�P¦ùñz8æÔí°˜&zò$x ⹪åa6ˆy3Ñ®�°½ 8Ä�e‹Ž×Ã1§h‡ÅÒÞ—†x®Èï½´Ü Ì1o&Ú�¶W¡3�'8â lÚ›çµ×^ó{GpÌ©ÚÁ.⹄ùq”ÌøJK"æÍD»Àö*tàG<�Ta8úÉŽ9õ@;ØUxž(qо¹i-"0OÇYžþ4í �۫ЀHñ�P×u9æÔí`ñ¬1o&Ú�¶W¡3�'8ⱘƇ©ú ÍEûÖí`ñ¬1o&Ú�¶W¡3�'8â±ñ©1o6Ú·h»ˆgõˆy3Ñ®�°½ 8ÄňOõˆy³Ñ¾õ@;ØE<«GÌ›‰v€íUè À $Žx,F|ªGÌ›ö­ÚÁ.âY=bÞL´+�l¯Bg�N qÄc1âS=bÞl´o=ÐvÏêóf¢]`{:p‰#‹Ÿêóf£}ëv°‹xV˜7í �۫ЀHñXŒøT˜7í[´ƒ]ijzļ™hW�Ø^…Î�œ@âˆÇbħzļÙhßz ì"žÕ#æÍD»Àö*tàG<#>Õ#æÍFûÖí`ñ¬1o&Ú�¶W¡3�'8â±ñ©1o6Ú·h»ˆgõˆy3Ñ®�°½ 8ÄňOõˆy³Ñ¾õ@;ØE<«GÌ›‰v€íUè À $Žx,F|ªGÌ›ö­ÚÁ.âY=bÞL´+�l¯Bg�N qÄc1âS=bÞl´o=ÐvÏêóf¢]`{:p‰#‹Ÿêóf£}ëv°‹xV˜7í �۫ЀHñXŒøT˜7í[´ƒ]ijzļ™hW�Ø^…Î�œ@âˆÇbħzļÙhßz ì"žÕ#æÍD»Àö*tàG<#>Õ#æÍFûÖí`ñ¬1o&Ú�¶W¡3�'8â±ñ©1o6Ú·h»ˆgõˆùf{ôè‘\¿~ýܤíšô¹ëºá7�MUèÌÎ…AñXŒøT˜7í[´ƒ]ijzÄ|³=þÜoüÓp8 ¿ �hªBgv=Y`†x,F|ªGÌ›ö­ÚÁ.âY=b¾ù>úè#¿³&íÑ�h¾Bgv=a`†x,F|ªGÌ›ö­ÚÁ.âY=b¾ùòöê¡7�l‡Bgv=a`†x,F|ªGÌ›ö­ÚÁ.'Sõ6_V¯zó�Àö(tfדfˆÇbħzļÙhßz �ÔAV¯zó�Àö(tuª' ÌňOõˆy³Ñ¾õ@;�¨‹´^=ôæ€íRèêTO˜!‹Ÿêóf£}ëv�Pi½zèÍ�Û¥ÐÕ©ž80³Mñxöì™ÿô‚"¯¥âój ή¹@Ù“÷{™„ES#W:~¹™®Š;zNd<|(n¯+íiùžtœÏ¥?üƒôßýµ ̬ ¶Ṯqhßz �ÔÉ|¯zó�Àö)tuÊÅmÜ6ÅCÿϹ€È›ðY>>/et|S:-]Î%q/ÂÏ£^ÈÀy]ÚαŒÃODÎdèJ{§%ínOúóÙçýžtÛ-ÙÙuHô`ãѾõ@;�¨“ù^=ôæ€íSèꔋ۸mŠG4Ñc¦¬„ÏjñËÀiËh½-îéËðs㕌ÜkÒqŸ†Od<8ò{ñ´\9=× È›ãÔ•ƒV´÷Os­sl Ú·h»üã=SåšÅôê¡7�l§Bgv. â¶)I‰3¥%|´lyšèy]:Ý·ƒG°ÚïKMöÌ%z&'ÒÛoy˺"½áOÁgçü$ÞC¢ö­ÚÁ.âY=bÞ<¦W½y�`;:³saWJ<bcÕèöD‰~î?†t&ÃGácN:íIç葌ü-/e4øôºû²Ó¹%}óXÓá9=}$G=o~}Ìé–Üu>”{9 ‹=fºqãFìC?[ž&z:â Nå¤w -¯ŽVç¶œŒMWx¢çÕÀ‘]]¾ÕG³Äv2’Á½[Òm{Ÿõ¾Wc¼³/‡Žå8éóþS9~%Žó ¾Vç¦kòj~Ì!óbÛÀr=‘ô;h.Ú·h»ˆgõês]?&¦ºN�ª“´6y*¢Ð·‹.¼iÊ‹‡ŽCsÉ«î&ÿ¬/‡Wõñ¤‰÷ÏCi™ql&§Ò?ÔÄBÛû{,“aOö§Œ7Ïñ߈{°'­ƒåÖ;¿ŒŒo£ËùUb"AÿÏ&mÌtÿþý°¾ìI» ›ÄÐòL¢Ç[Ãéï ’TA+šèÑ_ –Ûqe¤Å…-Ší2ì] –§SûHŽOîÊÁ4!4ÿùžü››òNË[?æ/eÔßï©´ë ¼µ÷ŒŸHO“@­C韙dVø8Ú¹ÞLÙtùh.Ú·h»ˆgõêsÛëWÆï¥N»¶¹N�é’ö¹o¾ùf:¥±Un£Ž4¦ÜÌSôøRèÛÜâ4®ë®<}òÉ'~RÄLQA²&úö©—rêÊaÿ- “æq%ówèñ™Þ"û=N;ÃhO‘ù‹ãô7éôÚk¯ÅÖíŸü“2-Ë3]¾|Ùÿïò"‰ÿÏ0¢½jzO¼Òª=i±5ËlÉ~ï$l•òùY_º­Ègþß‘D'hëè÷~~÷—sõç³Ẕ)hßz ì"žÕ«{Ìm¯_¿—:íÚæ:¤KÚçæ$Il•Û¨#)7ó=¾ú6·8GRg™)Úk&Noö/ú½CúØÒøXœƒÛ³¤oþ•â ‰žXÄôÒy÷¥Ûû –è1|oñ¤ žGMç_Þ\¢Ç3=C}s–ŸøúƒœN=& ã-;šÐ²"-¶&¡³;'È—öyh<”¾«véïˆ'zdò½ßãjÚ«ÇO-s(Ýj1Ǧ }ëv°‹xV¯î1·½~eü^ê´k›ëN÷¹¬„‰Êš§h¹*ZGVyÑãK¡osp‹+7&‰¡ý<”AïxñI0L»+=÷¡|×ÿ@v3=J_9þyd̘´×˜ŸÌŸ<E<†~¾¼ó‰?érr;3§-Î¥Y2%ì!³x0æ%-Œí²‰óêwM¬¹Òÿî?þN,Ñ£¿Ïs˜öêù9é]‘V·ï}sy«Å›‚ö­ÚÁ.âY½ºÇÜöú•ñ{©Ó®m®@:Ýç²$*kž¢åªhYåE/…¾ÍÁ-®ôxh/ž°H<‘öö‰Œë Jœ'Ñch7èa’ó±§`=âSR‚ÇÐòå%%z”I†èr£É}£V0nNÚëÕ5Ùrrû×rïܫړdÅv™DIÖ]”®ÿÈ'h9žèñL{õüRÚ¿üålþ%­sl Ú·h»ˆgõêsÛëWÆï¥N»¶¹N�é’ö9“0)’TÉ[n£Ž4¦ÜÌSôøRèÛÜâÊÇ,‰4驸]Ùi½-®&/ÆCyàt¤¥I†Þgrä<”³ÄD÷½Ã;³zÂDRÞÞ#þz„Ó¢±R|ü„ÇÅ”ñitœ¢·ƒßM²LLÖ7Z9âFÓïNFqCy·šP_’¬Ø>“܉ó™k)ò6¯Î¯Å=ºy~�f¯y\o+Ńö­ÚÁ.âY½ºÇÜöú•ñ{©Ó®m®@º¤}n>A’ÄV¹:Ò˜r3OÑãK¡osp‹«"Á@½‘!¾è£L:¸ò9îßôß´¥¯î~ä¾¼rÜLÓW?•{·r÷®~wO:ÎW2Ì™Tкò$xŒeã3}Uú¹õŽÒq†®Ì%YÔü#iæ÷}ž:ðt²E±ýòAçïGê7=s´R;ásÏt0iïóvWn?[û-Ùiuäèx–òMN¤·¿»Ò ̆.ÍEûÖí`ñ¬^Ýcn{ýÊø½Ôi×6× îsY •5OÑrU´Ž¬ò¢Ç—Bßæà·mñÈ›à1Ø^–T`fƒ˜7í[´ƒ]ijzu¹íõ+ã÷R§]Û\'€tIûœI˜Iªä-·QGSnæ)z|)ômnqÄc1Ⳍàh«Âlóf£}ëv°‹xV¯î1·½~eü^ê´k›ë.iŸ›O$±Un£Ž4¦ÜÌSôøRèÛÜâˆÇbÄ'‹sÈ<ò•ÿ hiˆy³Ñ¾õ@;ØE<«W÷˜Û^¿2~/uÚµÍuH—´ÏÍ'H’Ø*·QGSnæ)z|)ômnqÄc±zÅçü8:‰Sâ¸@e‰ÀܕۑA¤W¥¿ÍEûÖí`ñ¬^Ýcn{ýÊø½Ôi×6× îsY •5OÑrU´Ž¬ò¢Ç—BßæàG<#>Õ#æÍFûÖí`ñ¬^Ýcn{ýÊø½Ôi×6× îsY •5OÑrU´Ž¬ò¢Ç—BßæàG<#>Õ#æÍVFûÆÞv×z[ÜÓ—a‰ñJFîÕ ÜLWFa©ß3møPÜ^7èæOæwþ»¿®°—\5ô7ÂâY½ºÇÜöú•ñ{©Ó®m®@º¤}Î$LŠ$Uò–Û¨#)7ó=¾ú6·8â±ñ©1o¶ÒÚw2’ã£N0^TûHㄇÇÇâ´_ŸGêL†î¡´wZÒîö¤?4C‰{Ÿ÷{Òm·*~²ìgvÏêÕ=æ¶×¯ŒßKvms�Ò%ísó ’$¶ÊmÔ‘Æ”›yŠ_ }›ƒ[ñXŒøT˜7[©íûj ÎnÐ#§uàÊé¹\ÏSq;×Ä™¬ÍlŒ©äù½9N]9h]|§ØÏì"žÕ«{Ìm¯_¿—:íÚæ:¤Ó}.+a¢²æ)Z®ŠÖ‘U^ôøRèÛÜâˆÇbħzļÙJm_Môì½!Ýwö½å´¤}ø@F±äÍ\¢gr"½ý–7ïé  >;ç'ö=XˆxV¯î1g›@]±mÕÒ}.+A¢²æ)Z®ŠÖ‘U^ôøRèÛÜâˆÇbħzļÙJm_Mô\tdðâ‰ô:{Þ²ö¤Ó{"ã°x>Ñ3ÛÇÊ£YóoÅÛ•Žûtîó¶8omÆCyà„™éÔêÈÑqðƺÉh ÷ü±‚¤×ÿ<xt¬ý¾ôGóãSj;l!âY½ºÇœmuŶ T+iŸ3 “"I•¼å6êHcÊÍ<E/…¾ÍÁ-Žx,F|ªGÌ›­Ôö5‰žWš0y ‡š$ÙÙ—ÃþiøÚÿh¢'2@sl`æ"Ì£`&Écü ýÃÃphïßÝ‹Óq„¦ë©É¦—¦‡‘&€ZÒv~+'îÛÒJ`ºö3»ˆgõês¶ ÔÛ&P­¤}n>A’ÄV¹:Ò˜r3OÑãK¡osp‹#‹Ÿêóf+µ}#‰?érr[:-í1s ½d¹ìD'|,:æŽósõ°/Á0Ïa¢g¿'C¿<ü{Ú«H×q×[¯E“Ç~fñ¬^ÝcÎ6ºbÛª•´ÏÍ'H’Ø*·QGSnæ)z|)ômnqÄc1âS=bÞl¥¶o,Ñ£^ʨÿ~ðÊt¿WÌ"‰ž‰œõƒÇ§¦IL½—·{½ÓMHÚè[½\éuu<!oÎ%zÊ�šýÌ.âY½ºÇœmuŶ TK÷¹¬„‰Êš§h¹*ZGVyÑãK¡osp‹#‹Ÿêóf+µ}Ï%zÔ™œôÂ×®¿!öÛ³ÊY_ºÚãÇvïSoûHŽ·d?–HšÈxèJ·½+íî-qûéë>$z6ñ¬^ÝcÎ6ºbÛª¥û\V‚DeÍS´\­#«¼èñ¥Ð·9¸ÅňOõˆy³•Ú¾‰‰¥½j.ùËŽ'PôZWüÏÓ^¯î'ŠnÿZî-5FNty-ÙïÈ´ê0 ÔêšG¹ÂÁšIôl´­çøXœvüQŪÔ=æö×樓¿ zN75ã‚íÉûýì8S“¸Ç‹ ,Ÿj<”þ]G:­ppúRƒ­ºõw>”»:ˆþôXçKC­lÿj%ís&aR$©’·ÜFiL¹™§èñ¥Ð·9¸ÅňOõˆy³•Ù¾:ÎA+¥wÎä{qôM\s ”É©ôƒÇ§ZGÜÁì&E߀å:‡òît0çü&Þì{užë-4r¥£ËòoŒõæá+qü7„HϽ)Nß[&‰ž“+žšˆÜÕmB§”ÏpûæÑ)º7›®ÿV¶Y=çséÿ ýwä,‰žTÖ×/ºmÔ$ÑãswƒDÇt`ù…†c’ù¿cƒ=ÓÞŸÞD¢À’’ö¹ùI’åË_Êèøf0>¥œý¹\ºvS¾øúqX~Þòˈ3åfž¢Ç—BßæàG<#>Õ#æÍVNûοÚ|Gvœ»çõoJ#nMéx9Ÿ‡ S‡¹úÝ,Í Ê<í¹cD%ÛÙ—îí‡Ò¿¥½Š¼åýË÷¥óG³ß0»²OëGºëׯËG}$ÏŸ??Y,<£af§yzùº´coË6¼mÔ=ônX[Òîö"Û¥n»½ GÅôÔo_ù°÷7ç÷¡©û6\Êú™da¡ä½íëÃ;¶•ð¸»ôgæx]Þñ­&ö6÷³5áøTK÷¹¬„‰ÊšgqùD¾þô¹xñªôGš|Ž\7D®'Š-#»¼èñ¥Ð·9¸ÅňOõˆy³Ñ¾õ@;,¦‰‘Ny>ËÅ3’˜Lì  o„»yE¿é•þˆaЛÍV/°—rê¾-{IÉÒ©û6\ÊúYHôøÛÊždEø˜éÒëB¢gÝê¾ï�M“´Ï™„I‘¤J¼<8¶F¯¾ùæ¯Ä¹ô3ÙùÙµÔãÖrË8Ï”›yŠ_ }›ƒ[ñXŒøT˜7í[´ÃbÑD™%|–‹§^Œ½.îÛ~òf§ý~øߌ¹DOØ;lñ á:Þ”c%Ñ$RzÅÕÈr1¯^)ëW4Ñcaµ‘¬0Û%‰žS÷}hš¤}n>A’d¹òð­¯­C韙ži¢çï¥ö¼\nç™r3OÑãK¡osp‹#‹Ÿêóf£}ë¡Üv˜ »ë<’§ÓG•ZÒ>| £éÅÆ™ Ež%ß“ÎÑ£ |2’Á½[Òm{Ÿ¹OÂîÇá<½'2åŒê¶/‡Ñq”ô»·#ãØ´»r;2öRI‰3%%|ôóüôF·ãÝäžNãkunËÉØ¬a<ÑójàÈ®.Ûæ ¦£ã£0~^|zw?çÞÓi’gö{w½õøß#ƒ�ß’¾é ~ø¿Êãã¹Á§í¶/Îñp¶ŒŒ6junÊq,Ù•m¹˜W¯”õ›OôÄöÓ,úxà¾t{wÄq¾ôö+3NYsJMÒè>ìFgÕGïÈÀo#Ý>¯ÆëÑ)uûÔ±¥ÌXdÞ|í·¥ëÿ;Lô$üíž?ÕUq‡OÄÕmL¿Û:ÞÉ‹¹ú楋êöÖ÷øé#9J­'z|ò~ÿ;ïÿgl# ÖÉèXn›õõãæÊpºok\ïxë^í?¾{<=&NFf}ô{·ä®ó¡Ü³ÒK/N—  :IûÜ|‚$Iáòß~,o^ø¹\vþ2õ¨ð2Âr3OÑãK¡osp‹#‹ŸêófÛÌö5ÿZ/ÌLôzu}KPØ»‘qO¼š7œ]”nÿo¦ðÿ<™qj¦ƒbëÍß‹ødûлÙ;óæ17ªeß» òã'ÒÓ#ó°üy®„ËÔŘz—{…þ¢D™¢ ý;?“èÑ›\³~š81I°h¢'rS½j/ŽsÂØ·dà߀ê£a7½˜…‰‚0™`zôÌ×Ék¯ã¿ñÛ¡OÊ_·¹À´ÝžÓÿËn þM»–ÏDŸÕ•Mç­³RÖ/–è‰Æ[raûùGÆұɺ÷˜†Ç²…Ç*ó¨ IÎEGÑdH®ÞE^]'·½ï† ÚéߺÎóûºù æÍƒúÙ,Q2MBþòué~¨ áY]çÇBSIñI©;ÜÆgõ„c©™mÔü­ßóc­g–è Ö1ò[Í#—~½úHä5ïØe?^\ûï{åæÍŒ:Põ/#cièX]¿²ô8fœ®7€êè>—•0QYó,WŽ÷ûl¶—q^ÑãK¡osp‹#‹Ÿêóf£}ë¡ôv“=ÑÇ‚ž)æ†Ë$zLÆümç0Gn`§7nÑG>L.¸ÙŠ'%¢ÓÜkî3äIô˜I>úßü"‰ÿÏ0Yez+ù¿³ÌDO3íÉÓ†7•s‰ŸIÞͼ{îf?»’ù Úm¹7#-óꕲ~ É•ø~eþÖž<ýHO#G¢Ç´O¬­ƒq›ZÑý(O¢Ç$gcu™ía¶Ìÿ†ÙÛ¹¢½eÂäJtÝs¬Ãùº³ë 6sÇ 3Ïô{sÛµI`FëøÄïä™ñÊ<‚éÕ1?éw^jýš|ж^]&€êè>—• QYó,S®çÕK±ÞÂeêH’U^ôøRèÛÜâˆÇbħzļÙhßzÐv(cšÊLô“¹W†/ºùËJ"ü”GžOO“´î«N&)”Ÿ®s$Ñ㙾šÚOvüÁÿ?ÿÁï6 /oYóI–•Íz˜GDî "¶…7´‰‰žùês7ÚK$z¢¿'a{ɲ\Ì«WÊú%$6Îí'á+ïýíS“y÷‘ÿ›¶Å¢DOZ[Ìo ërNb]f{X´¯Ïm3¾ª=IÛ°ÇÌ“šè ëM[?¦Gc’ðuíc?Q÷›ðQ9ûê¾ï�MòèÑ£Ä}Î$LŠ$UÒË’áí#q¾úëuò–›yŠ_ }›ƒ[ñXŒøT˜7í[¥·C ÞùÒàÿvû7£îCù®ÿWn!ѳðf*Ÿ<=ztžápèϯç§ëOôøÉ—È#-Î¥ÙïöÅÑÏ—{ül± Áv×[` Öì‘‘ð†¶´DÏ4Ñd 2Å,×nËżz¥¬_Bbãü~â¥× ·'oš>¦¶EŽDϹ¶žÿ<a]ÎI8̶‡†&zߤç c‘ü˜™q&Ãþ瑱‘"àYT÷}hŠû÷ï‡ûòù}n>A’dõrïxtxG¾x\æ2¦ÜÌSôøRèÛÜâˆÇbħzļÙhßz(½nðâ7\ᣑÞ7Ay‘DOäÑ­VGœ³Ç’&§÷äÝÛvÝŠ&x ý<?]çùDŠö´‰þn3¾‘w“˜òzu ‘Û¿–{I7˜YLÂÍܰ†7´å%z<þ¸<oH»íÝk½sí•Çr1¯^)ë—Ø8¿ŸD…™›ò°-%z¦c*ÅÁ¾µä£[&Ií½eê¯m¢Çô¢‹?º5=¶¤&zÌãfÞ~\\{»åí›OÂß½'ç«ÙcuúxÛ»ŸÍõÖÓD¬ Ú¼(¾+ªû¾4y¬ÛLY •5OÑrU´Ž¬ò¢Ç—BßæàG<3;'Sµš‹ö­‡²ÛÁÜÍþïõüÍÓÜÿýž¾EË»!ë}&GÎ’§çn¶ætVææ*ìí’ôf!Òþ/{ФDOR‚ÇÐòÜüu¼ÿcÊŒ…2wã°¸ÕqÄ<j¥oÿqCy7úV«…4ãDz…Œ˜¤›¹éõnÎOžÞ“ãc§%zÎÝÈçh£ð7îÅzy,o©˜¯A)ëw.Þ I‰‘×fÓmË$M{˜ä„×''âþ:ìée Ž$,Ìö7íäIJâœcG2ÿ4­[ãl'wþ7œÛf<ÓTäÑÌÌuHˆOžz¦¿…ƒÉÏî÷ïέãù·ÖS 5ûö|¹›*ø?ðÓß®Ãâ@«Ñå(Ï|’'iŸ3 “"I•ärsÜÛóß¶õx¥:fò–›yŠ_ }»è›†x4튺ª×¶9÷zoíUàäôÄ•ÛúšÍÍmÚ¤óßý2aý¿±‘×ÿúÿוÁéßÊÛSèæÖ]¯²ÿ=§Îç2ð{yÌ>ÛuŽåÅôQ%½ ¼#Çý›Ar¨ó/äƒÎߟ›¿/¿óoPÍgšùm,Š}ö4’4 ?/øzõE CçËã\l{VèÍñ•x¢Ç7ÿX‡Nºm}¾äà­¯dtïCoÛýlZW«s$¦uÌÞ0¤¯}â?R—°ÎóûÇnWœ_eµ‘öâønî³Ù´ÌkÖuþ:³¾~çâý+q?Ÿß¯òjô¥8Îg³Çòb½¥¼c“Ùï¦o”J2ÿððæ·éµ5[îtÙÁ—ãb¯Ò÷öõûâ~ÐöÚÚ‘»ýïd8lø•#¿ÒDãô3o›ù]?H>N?»*îàó¹ãs´÷:¿žçëN¨'ܾã¯IߗïîÊ»fûÿ&l×á”cÿt›ž;çh"iúzõ§rÏùPîN¹ÓïFzþX¤ËPޤ$OÒ>7Ÿ I²Z9‰„ˆG3Ñ®¨«úl›æÿ®šqB<ÓAô±ÓC!ú™Þh/ “LˆÔ¡e᯴œ]Ü§Þ UŒcÄbšÜÉ“à1ˆç2f=F4nóSÞ}Dç­³º¯¶Û&PŽ´$Nóæ$Il•Û¨#)7ó$ýÖeúvÑ…7 ñh&ÚuU›m3ulíMq5’ÔIsĈܰN J[BP\"ѳž?þ+â¹} æÝwz“è>ò¡$>Òv^ÝcÎ6ºbÛì[”äÑ)+a¢²æ)Z®ŠÖ‘U®¿µˆBß.ºð¦!ÍD»¢®j³mšDOÂØ-“aøè–oQ¢GÍ^‰Œ¥`=fÜ…ˆÉÉV<ºµˆg^a¹„Á—ýGeœ; cÆ$«{ÌÙ&PWl›€]YI²$*kž¢åªhYåú[‹(ôí¢ oâÑL´+êª>Ûæ,AcÆæ ³š—•èÑœQ8îŠ?¶CÐs'x,e~|†úàaW]âyn  Ä)}[®Äü«¿uZ¸&ÓïÕYÝ×Û‹m°'O’G§y&aR$©’·ÜFiL¹™'é·.£Ð·‹.¼iˆG3Ñ®åÓoò´.ë\ö9“‘EíMèe'ÑãÍæi×z)£ã›‘ÙòÕ\U­Ú¡ˆgõês¶ ÔÛ&`Ç·ß~+¯½öš¿OeMóæ$Il•Û¨#)7ó$ýÖeúvÑ…7 ñh&Úµ|›ãu®{ýâ¦o—qco2Š¿ùg•DO >`³7µ:rt¼ÜÛŸÊR¿vØlijzu9ÛêŠm°çÇ”GÉ7ü}+mÊJ˜¨¬yŠ–«¢ud•ëo-¢Ð·‹.¼iˆG3Ñ®åÛä¯sÝë·øë„[®œú™eÝ ?Œˆ½¦7aL uØäí·Žˆgõês¶ ÔÛ&PMúü‡ÿðäÿøýý,:e%HTÖ<EËUÑ:²Ê‹_ }»è›†x4íZ¾MŽñ:×½6q{5£wuðä9ãcq4ÙÓ:”þ™fzòÆÜ’¶s,cŒùè(ün”™ï¢tû?„Ÿ­Ç»ˆgõêsÛëWÆï¥N»¶¹N�³ç“O>ñßÞyÿþ}yë­·÷9“0)’TÉ[n£Ž4¦ÜÌSôøRèÛÜâˆG3Ñ®åÛä¯sÝk7}ëÖ^R߽˜3Ñ“özõ×Ï¿qËûë¬(-=D<«W÷˜Û^¿2~/uÚµÍuè˜=Ïž= ÿ $ísó ’$¶ÊmÔ‘Æ”›yŠ_ }›ƒ[ñh&Úµ|›ãu®{mâf^¯ÞîJ¯o`>“áƒ#é´ö¤Ó{~¾z.ѧu ½Ó7ȼ^}_º½~8�óDÆÃ¯üq€ZÛrRƒA™9FØE<«W÷˜Û^¿2~/uÚµÍugÖ<ó’ö¹ùI[å6êHcÊÍ<E/…¾ÍÁ-Žx4íZ¾MŽñ:×½6q Ýz‘0`òôÍ[ÓA–S&M¹çÞ¦>ºõâTnôÒõzó–®ì!žÕ«{Ìm¯_¿—:íÚæ:méãZótŸËJ˜¨¬yŠ–«¢ud•=¾ú6·8âÑL´kù69Æë\w¶Íz ì"žÕ«{Ìm¯_¿—:íÚæ:m§1ë¾¥cóÌÓϳ$*kž¢åªhYåE/…¾ÍÁ-Žx4íZ¾MŽñ:×m³h»ˆgõêsÛëWÆï¥N»¶¹N`Ûé+Ö“ÛRIûœI˜Iªä-·QGSnæ)z|)ômnqÄ£™h×òmrŒ×¹îl›õ@;ØE<«W÷˜Û^¿2~/uÚµÍuÛîÆ~²'IÒ>7Ÿ Ib«ÜFiL¹™§èñ¥Ð·9¸Åf¢]Ë·É1^纳mÖí`ñ¬^Ýc®ëÇÄT× €=æ±-ýo-ËJ˜¨¬yŠ–«¢ud•=¾ú6·8âÑL´kù69Æë\w¶Íz ì"žÕ#æ�€:ИµGOš¤ó•I˜Iªä-·QGSnæ)zn.ôm. âˆG3Ñ®åÛä¯sÝÙ6ëv°‹xV˜�ê@ÇæI{lK%¯æ$Il•Û¨#)7ó=7ú6qÄ£™h×òmrŒ×¹îl›õ@;ØE<«GÌ�ë¦oÙzíµ×RÛRIç«ùI[å6êHcÊÍ<EÏÍ…¾Í…Añh&Úµ|›ãu®;Ûf=ÐvÏês�Àº¹®+}ôQøW2=_e%LTÖ<EËUÑ:²Ê‹ž› }› ƒ8âÑL´kù69Æë\w¶Íz ì"žÕ#æ�€u»|ù²|ûí·á_Éô|•• QYó-WEëÈ*/zn.ôm. âˆG3Ñ®åÛä¯sÝÙ6ëv°‹xV˜�ÖéÙ³gþc[Y’ÎW&aR$©’·ÜFiL¹™§è¹¹Ð·¹0ˆ#ÍD»–o“c¼ÎugÛ¬ÚÁ.âY=b�X§O>ù$ó±-•t¾šO$±Un£Ž4¦ÜÌSôÜ\èÛ\Äf¢]Ë·É1^纳mÖí`ñ¬1�¬“>¶¥½z²èù*+a¢²æ)Z®ŠÖ‘U^ôÜ\èÛ\Äf¢]Ë·É1^纳mÖí`ñ¬1�¬‹ŽË£‰ž<’ÎW&aR$©’·ÜFiL¹™§è¹¹Ð·¹0ˆ#ÍD»–o“c¼ÎugÛ¬ÚÁ.âY=b�X}dKÝÊCÏWÛ4QèÛEÞ4Ä£™h×òmrŒ×¹îl›õ@;ØE<«GÌ�뢃0çyl Ë)tfç Žx4íZ¾MŽñ:×m³h»4žLÕO��TMÛz뭷¿`S¡3;qÄ£™êÞ®“Ñ@îõºÒÞ¹*îèUøéfÙä}gëÎ1§h��€åݸqCîß¿þ› ]rqG<š©ÞíúTÜή¿Ž;5Jôh÷K×uåÇ ?Yl“÷›ëþèÑ#Ê‹cN=Ð���ËÑû½†zþüyø l*tuÊÅmñh¦ú·ëXNÛ[Ïú$z†Ã¡7}æ6OÂg“÷›ë®±ÒúôÍy>›·&¡���–£×º×¯_ÿ‚m…®N¹¸#ÍTÿv­o¢ÇLY ŸMÞwl®»Iô˜)+á³ÉqkÚ��`9úØÖ2=Ù±œBW§\ÜÆfª»Ö?Ñc¦´„–m*›ë>Ÿè1SZÂG˰~´���ê¤ÐÕ)·qÄ£™Jk×Wqv£7ôa¢&úù®#ƒW¿§³7·Õ¹)Ç£—aEñDÏ«#»á|»Î@¼Odä^ ¿»+÷iø½—2Ü‘n»–íK÷ö±Œ&AédôHŽüe¶¤Ý½%wå^ÎDRZ¢ÇLó ýlSÙ\÷´D™æ>úÖv°+ºÍ3U7�€æ(tfç Žx4S¹íúBÎ%os½qÎúrxÕ•SMºxÿî¶ZÒvŽe¬É™þûÒöÖ)Hâ¨ó=z&ÞìÇæ™xÕJkšèy)§î5Ùïº2ëBL½-Ùïxsÿ ýî/Ãe*]Ï_åî1”•è1“Iøè¿7•ÍuÏJô˜É$|ôßX?ÚÁ®´x~óÍ7Ó)MÞru¤1åu©#)׉m�€f)tfç Žx4“¶«í)*HÊìÉû½i4 s(‡ýü¿L¢'HÀ˜¿'zdäJÇ[Îlí(¤=}ÂDÏäDzû¦'ÏÜ´ß“áKíU¤=yzÒž…5Ä%~·ÀT¦¤å5eÂúÑv¥Å3š˜H“·ÜFiLy]êHcÊub� Y Ù¹0ˆ#Xöž¹(;í#hïšñ±8·ed}fÆCé»·¦ZJôøå¥k’I瘞FšLØ—nï72˜>*–-oißÌ»©l®{Þ=}ô‘ÿ*Jý7Öv°ËÄ3+Q¡²æ©¢Ž¬rU‡:•³ �Ð,…Îì\ĬÆ<V¥g=”AïYïß™ ÝCiû Wúß=ðÇð)žèÙ‘V·ïÕžÆ[nÿóÈØ@—ļËËJô˜¡Ÿm*›ëž•è1 C?ÃúÑv™xf%.TÖ<UÔ‘U®êPÇ¢r¶a�€=:èo¤×Ý—Ž+£ðST«Ð™ ƒ8â•i/žé ÈW¤7ü),0I Hï›p°æB‰žé£[{Òq¾ ÇéñL¾÷ÝÏæzé`ÐnГ(çÁ:-Ñ3Ÿà1´lSÙ\÷´DÏ|‚ÇÐ2¬í`WZ<M¢bÕd†²YGS^—:Ò˜r؆�Ö„÷!zn!ѳ>…Îì\Ĭî'ö®D#gšh1oÌ2cøœÉðÁ‘tZzàüµ¸G7¥öwÁ£_ÑQ8ŽOð8Ø«soíÚuÉ÷îÛÒ ÿžMf9OÅ=¼3[0µ¸ÐÌ|¢'-Ácè<›ÊæºÏ'zÒ<Æ&Ç­Ih»ÒâML¤É[n£Ž4¦¼.u¤1å:± �¬2o&ѳ6…Îì\Ä Êœ0nÎø‰ôL’¦Ý•ÛÇä–öÆiuäèø“¿èìeþÔg ïÉš½ËïµsôHž;²ë}ǹû0ìÁIùóE_¯þTî9ÊÝ»NX>×ó'ƒIôd%x wSÙ\w“èÉJð›·&¡ì2ñÌJT¨¬yª¨#«\Õ¡ŽEålÃ��«Hô¬]¡3;qÄh’"O‚ÇØä}ÇæºkÌò$x Ž9õ@;Ø•O“¨X5™¡lÖ‘Æ”×¥Ž4¦\'¶a�€U$z֮Й ƒ8â¬f“÷u®;Çœz ìJ‹g41‘&o¹:Ò˜òºÔ‘Æ”ëÄ6 �PÁ˜ž¦·ÿ,Qý<tþÉ€à ‚àÉ�ÿ ‘DOTç3O<wúTBdœÑÉH·»áS Þ¤O3 FáKj^Êèøf¸L}IÍqœ/I$¥(tf×àc†x�«Ùä}gëÎ1§h»ÒâML¤É[n£Ž4¦¼.u¤1å:± �¦ÌKbb½qô1¿’«þXžæe1áy'§Ò?Ü÷Î%&‰ã9ףnjG™G~Ç =úR˜ƒ+ÒuOÄŸcZo8©?iä-ÀºžÝ{$zR:³saG<€Õlò¾³Îuç˜SÚ=Zê±;¤3ÛuV¢BeÍSEYåªu,*çX�˜ “2­·Å=}|¤I˜«¿’þ™ö­1‰ó"ó÷¢DyÁL4Ñsp0^iØ“'6µd¿w"/ý^EÚ“§Ÿ{ÜÐmVèÌÎ…Añ�V³ÉûÎ:×cN=h;èÀãúßË—/ûƒiß¿_ž={Îe˜í:+q¡²æ©¢Ž¬rU‡:•s,�Äø½gZÒvŽe,>”ƒÞ‰÷¯(ïóáCq{æQ«"‰žŸ‚òÖa˜LJ`zé²Ú]éÝÌÃ9…Îì\Ä`5›¼ï¬sÝ9æÔC´4¹£Iž7nÈk¯½æOúo}£Ú2”o³´íÚ$*VMf(›u¤1åu©#)׉c � Î<VuIœãGÒÛ#콟ˆÛÝ.îCù®ÿìÚHô$½8j<”þô­Àšð9’½{:³saG<€Õlò¾³Îuç˜S‹ÚAçÒǺ´—ööÑyµ÷Iüüøãáœ0ÒâML¤É[n£Ž4¦¼.u¤1å:q,�Äi/ž£Ù Èû=Nó)a(Òû&¬¹H¢'òèV«#΃¡W˜œÞ“woÏ÷&:“¡{è­ß®tܧágˆ*tfç Žx�«Ùä}gëÎ1§–iMì|ûí·òÉ'ŸÈ[o½åWÿ«ëçŒó3‹gV¢BeÍSEYåªu,*çX�8gr"½}}T*#g–h ߘeÆðåÓ‘–&]zŸÉ‘óPÎüG¿¢ "3Žylþ­]mqŽŸˆ{°þ™ÌrF÷äpº&•Ñh‹:³kà1C<€Õlò¾³Îuç˜SEÛA{öhŸùq~´'ÐjãüèÅÏméMÿ™Jú¬žL<³*kž*êÈ*Wu¨cQ9Ç�ÀyfPæùqs¼kŠ“Ûa’¦%íî9îßô{ã´:7åøñgÒñþ­çÚud oOŸ¾EK“79:ʱÓö¾ãÈÝ~؃gš4 ¿}½úèKqœÏä®)Ÿëùƒ¸Bgv. ∰šMÞwÖ¹îsêÁv;¤ó“›ÿzÒ×#]£=IŸÕTZ<M¢bÕd†²YGS^—:Ò˜r8–��Ð,…Îì\Ä`5›¼ï¬sÝ9æÔCÙí`ÆùÉ祜ºoÇ_qšøY}¥Å3š˜H“·ÜFiLy]êHcÊuâX�@³:³saG<€Õlò¾³Îuç˜SÕ·Ãüsí{Ò9z$£‰Iè˜ÏuzC>ø×sŸ]÷ô© îÝ’nÛûnïËàÍ;ûrØÿ?äôøfX÷¾t{wÄq¾ R¬†®c’hb"MÞru¤1åu©#)×)-æ��`3:³saG<€Õlò¾³Îuç˜SÕ¶ƒÌð’8ƒ‘çÝg½uνùÂÿ,|æÞ[ojÉñÉ]9híÉÁ¿¹)ï´ÂºÕøXœî½µ$z²*kž*êÈ*Wu¨cQ9Ç��š¥Ð™ ƒ8â¬f“÷u®;Çœz¨¶L¢çŠô†?Eþ^&Ñã¾æ4þ&`>íÉÓ—á8:ðbuL<³*kž*êÈ*Wu¨cQ9Ç��š¥Ð™ ƒ8â¬f“÷u®;ÇœzXO;Ld<|(n¯+moùËõèñ? =»ÒqŸ†Ÿy´O[_¥ª=}ºÒ»7QÅùž´xšDÅªÉ e³Ž4¦¼.u¤1å:q,� Y Ù¹0ˆ#Àj6yßYçºsÌ©‡ÊÛa|Œ©£‰÷¡|×ÿ –Ä)”èQã¡ôï:³1€ÚG2°Ð»G_ŸçuñiñŒ&&Òä-·QGS^—:Ò˜r8–��Ð,…Îì\Ä`5›¼ï¬sÝ9æÔCµíðƒô»e§u(ý³ ù2ŸÄ)œè™:“¡{(í…óä3ý8é«â¿ýöÛðÓd&žY‰ •5Oud•«:Ô±¨œc ��ÿÿöîïÅtMì¸þˆ& ð]Ï͆°4çp.tqè\ô…–9°çB“Ì‚ÁÄZvÌ0 “‚&ƒÍ9ÆDñ„³k ìÙ‰Û ¼ØgÚÝ>È’ ã¦! ÎÐ4x0F<ÑSªG*©õV•U%ù-÷÷…-=¥GUï[~Uõ¸~¼] ý²³c0Žö�fSå;orÙsü°Ø~ø^Âæ²ÔêHxð2:ûæ~ДºcÚ_ÈVð@žGE½÷Îÿ”ïÃOdkïǸГ|ï‡é…žÃ/esxÏžžïmI£¶*­ÎÑ;j{{;×™9IaFídSÚãâ]íi…ŠñbűìaÞ¥óÜÛ,fÄmÏS«‘õà«8¦Ž¤Û ¥=y,žgi]‚;¤{p_>ÜÚ“Wñœ*­`¢¦/ç¸Eæp±¸NºÎ��”AÿCGÏâÅ›Uè—ƒq´0›*ÿÛy“ËΘã‡ÅöCOŽ÷oÆ—UեѺ%;k²Ö_†zóšìjñç[i7Wúq}tú·Ã3öÞÿN¢8¢Ór3ÿQ‚à ¹ú±zS‚ûÝAŽØÕ«W£8ýÜåË—£"Žž±“FçK~ŸNšgM“,LLê>–­hý–dõâ­±å­VW/ÉíG»£v\âÔÑw<º+øþGö‰¹–ÁX<Ï<.eæp±¸N®6�àuéïû矿›Rè—ƒq´0›*ÿÛy“ËΘã‡ÓÚÏŸ?þ×Nwæ.\¸µƒþ©¯õý/^ÄsÚhÚ¤ ä|Jߟ&Y˜˜FÏZ:å}G6Âïâ³’CY_d{˜ãGÙ Öûó¯ŒÍ?úŽ—r~ õf8öxù´ePÏ3K™9\,®“«Í�x]z™¶î#àÍ*ôËÎŽÁ8Ú˜M•ÿí¼ÉegÌñý0 -ðè>vžùóá‡FwMZJîê{*«P¡’óh¡g¥yI.EO [“ÍÎì&s†ÒLmzÝvt&Tíܹ{âr¯Xo_®llEÅ!—×]Îi‘#-nm�@º ¿ëxó ý²³c0Žö�fSå;orÙsü@?¸é%]Ó.Ûšœôÿì¾?úZe.Tr-ô¬;ò£]ÚVß+áÃQޱBÏèÞ>g.Þ–')ß“µ£¸>òþžÑ%dƒõ²Ëé4¾»}[¾Œ.ÛvçwÒÒ‚Tã²´Ã;rå½sR[ÿéD7¿®Kcó¾öޤ{kôô³Ú;²~éoûïÛ´íýÁåeºOn_”e{ÿ5ÎDÒù�(êã?Žîå‡7¯Ð/;;ãh`6Uþ·ó&—1ÇôCº<…›ô&Íúç4V¨p+´Ðó³¨hóµv>Šî¯Sk|$½o‘»të«øÍ'Ÿ(–öÊ?êH«^îô¨¿ Û×ßÝã§·/í5=ÓH×Sçù/¿Š_Û´.ÁÎ%ÜX‘¥óŸÊßlÈRíìý(Ò;ΦÞKÈžœÖ“GáG²¾T“z«#Gƒ%èÓËÑþ<*mïæ[\m�¾7™5å¡göê¼\¶å‡B¿ìy;ý´ =€ÙØHU§7åM~7Fè‡tÉ+y§i’…‰iF…É~{#º¡t½ySö{ +ôœ».{x½ÿ:y3g{ú×»råîF9ôL#]ïµ¶tã=}º+¯k¡ç—ÒîþÔ§×O¿Ù_ŸÑ#òŸ>ýƒÜ½òË(ß`ž¾h¯ó®‡N®6�ߤWÉqÍ%o¼Œ.÷%‡‹ÅóþFèÖèîÀ…~ÙÙ1G{�X$Æ?Ðnz9–¶OÚ4yg}Oe퀪ä<ƒK·OÈêÈõsQ¾úF(ÉK·~Nkµf\²–ãDü¸+ðÆàÒ¬þwÛeU£âÒû&žã¥(m‹õ`ìR«½ì„í–¬ê<µÕa¡Gõúë´QœÕó0.Õ£¤´õ°6�ß%Ç«´qÍdͳˆYqåCW<ïo„^¶¥Åø¡Ð/;;ãh�‹Ä˜ãúÁM¯Ó×öINú¿}öHöÉ'n)W{Ú¨k'uüŒžØð±òui4-«Ã3zvã3dúË4QIûåŽI7Ü”ÕÚ9yïJ ×ïüF‚åigô¼/Áö“Q;£'qOè;…è½{-i‡äOOdyìŒ]ŽŠŸö®´÷ÿ(íµŸK«óC"ž½:¹Ú�|“6^%Ç5—¼ñ2r¸XÜ—.Ïó¡—ké|Ó~×ñfúegÇ`í`‘sü@?¸]½zu¬°“‡«=m‡ÓµS:µÐ£Žw$ˆÏ®Ñ³f†WÞ7Çõxõ¾ãoåæÖ?ÊAf!È.­Z•÷®wó<¹] ÐÓ‘ëïýLjKÒ9|¹®ßÉBÏÓÑY=†ü¼¾9œßâ.׉m@U¤WÉqÍ%o¼Œ.÷%‡‹ÅóüFèìè=ðG¡_vv ÆÑ�‰1ÇôC¹\íi;œÓwJ_ÊAø,9•nűB¾x_6£"Њ4ƒPöâ'd=Õ:ï…´‚ÑÍœcÓ—Áž„µ"çƒßËîÓ‡r÷7—OÌjþV­kÒ9ú?¯QèùJ‚õ3R[ú•„ýï?îÊý )u½§Pû Ù ÈÃárè ˜õ¬žº4‚± »¦/çˆÅubPiãUr\sÉ/#‡‹Å}Éábñ<¿z6—mù¥Ð/;;ãh�‹Ä˜ãú¡\ÖžY; *š'>sF?7˜Nžõ¢gÜïmIcâ‘ãê飻rýÓ‹‰Ç˜÷§zS‚;¤{ÜË\Ža|x™Xÿó–Üܹ/7ôŒ¡~®KÈ_Iä—qp–Nâýå@ö¢ÓúËk‰×Në–ܺþ×r®?=²=©×m÷c¿Œnòì’¶úÝ�PÉñ*m\3Yó,"GV\ùÃÏúÐ˶Ξ=¿‚/ ý²³c0Žö�°HŒ9~ Êe홵Cª²æYDެ¸šoŽÁec®³™LÚw° ¨Šäx•6®™¬y‘#+®|ÈáŠgýFèåÙz©6üRè—ƒq´€EbÌñýP.W{Úè,;©¦Ì._XŽèD£›0›¼Ÿ×‰m@U¤WÉqÍ%o¼Œ.÷%‡‹Å³~#Ο?=9~)ôËÎŽÁ8ÚÀ"1æø~(—«=m‡3ÏN©K™9\,>×½ï$8ÿNÔVÑÔØ’½ãÄ£û^ç;؆TEÚx•×\òÆËÈábq_r¸X<­ÍŸ={Æe[ž*ôËÎŽÁ8ÚÀ"1æø~(—µg֨ʚ§”OnËűûëLŸFO×:)ó;2âj|žÄ ˜[·7‘ží;tù  ’ãUÖ¸§²æYDެ¸ò!‡+žöñùçŸGüSè—ƒq´€EbÌñýP.kϬR•5Ï"rdÅ•9ÒâlÃ�ª"9^e{*kžEäÈŠ+r¸âi¿zÙ–žÕÿúegÇ`í`‘sü@?”ËÕž¶:ËNª)3‡‹Å}Éábq؆TEÚx•×\òÆËÈábq_r¸XÜÕæz_-ôÀO…~ÙÙ1G{�X$Æ?Ðårµ§ípæÙ)u)3‡‹Å}Éábq؆TEÚx•×\òÆËÈábq_r¸XÜÕæú¤-.ÛòW¡_vv ÆÑ�‰1ÇôC¹\íi;œyvJ]ÊÌábq_r¸X\'¶a�U‘6^%Ç5—¼ñ2r¸XÜ—.wµ¹Þ„ùùóçñ+ø¦Ð/;;ãh�‹Ä˜ãú¡\ÖžY; *kžEäÈŠ+r¤ÅÙ†TEr¼Ê÷TÖ<‹È‘W>äpŧýFèe[.\ˆ_ÁG…~ÙÙ1G{�X$Æ?Ðå²öÌÚ!UYó,"GV\ù#-Î6  *’ãUÖ¸§²æYDެ¸ò!‡+>í7âã?–íííø|Tè—ƒq´€EbÌñýP.W{Úè,;©¦Ì.÷%‡‹ÅubPiãUr\sÉ/#‡‹Å}ÉábñÉ6ñâEô—mù­Ð/;;ãh�‹Ä˜ãú¡\®ö´Î<;¥.eæp±¸/9\,®Û0€ªH¯’ãšKÞx9\,îK‹O¶ùãÇåòåËñ+øªÐ/;;ãh�‹Ä˜ãú¡\ÖžY; *kžEäÈŠ+r¤ÅÙ†TEr¼Ê÷TÖ<‹È‘W>äpÅ'#ô²--öÀo…~ÙÙ1G{�X$Æ?Ðårµ§í€Î²“jÊÌábq_r¸X\'¶a�U‘6^%Ç5—¼ñ2r¸XÜ—.O¶¹^®¥¯õò-ø­Ð/;;ãh�‹Ä˜ãú¡\®ö´Î<;¥.eæp±¸/9\,®Û0€ªH¯’ãšKÞx9\,îK‹'Û\oÀ¬gôÀ…~ÙÙ1G{�X$Æ?Ðårµ§ípæÙ)u)3‡‹Å}Éábq؆TEÚx•×\òÆËÈábq_r¸X<ÙæúHu.Ûª†B¿ì쌣=�,cŽè‡rY{f퀪¬y‘#+®|È‘gPÉñ*kÜSYó,"GV\ù÷6×˶Ξ=ýþ+ôËÎŽÁ8ÚÀ"1æø~(—µgÖ©Êšg9²âʇiq¶a�U‘¯²Æ=•5Ï"rdÅ•9\qkó0 åêÕ«Ñßá¿B¿ì쌣=�,cŽè‡r¹ÚÓv@gÙI5eæp±¸/9\,®Û0€ªH¯’ãÚÀ±ìè3:Õ7B¹·;96~/asy8O­vFÖƒ¯Fów¥ÞV£>œgiý¢|z=”ƒÎ–líæK_†“,žg—2s¸X\×Y?^¾ùæ›èïð_¡_vët Ð�‰1ÇôC¹\íi;œyvJ]ÊÌábq_r¸X\'¶a�U‘6^%ǵ¤ÞácÙj®ô?[—Õ‹·äÑD¼?‡ïmI£±%·íÆ9vå¸ <–´;]”tzòèîu¹òÞ¹~¾†§¤ÐóìÙ3.Ûª˜B¿ì쌣=�,cŽè‡rY{f퀪¬y‘#+®|È‘gPÉñ*kÜS6Ï«½@–ûŸ­ÕVd#üNzq9 ¥Ù å0~_Žw$Ð"Oý î}}ò{zßI¸ñsi†ßr8dÅ•9\qmóÏ?ÿ<šP…~ÙÙ1G{�X$Æ?Ðå²öÌÚ!UYó,"GV\ù#-Î6  *’ãUÖ¸§l-ô¬4/É¥è¬5ÙìDÅžaޱBÏOÒm¿ÛŸ¯.kí}Ùµy&ôº·dó”zô²-=«ÕQè—ƒq´€EbÌñýP.W{Úè,;©¦Ì.÷%‡‹Åubð&ècº»Ýnô4§¼ÒÆ«ä¸6I =«ÁŽüSø‘¬/Õ¤VßöþQí‹ =Ûúù'·åâ=û§Ø¥Yãzrܽ'At ™Ýëç¯eçðå z¸'_¶[Ò¨õ—«ó;youIj«Mi‡w¤ÝZ“Zó†tÂÍ~¼.Íû²½ûPîþæÒ`]¢|+ÒÜz,‡½É{­Æë¼_Ñòk‰¤ŸÑBª¥Ð/»v:Fh�‹Ä˜ãú¡\®ö´Î<;¥.eæp±¸/9\,®Û0€7A‹:þؤ÷€¹|ù²|üñÇÑžtÒBN&m¼JŽk“…ž=yòôkÙ¾þ¾4ô;I'.´Œz¶Y–é} _ â ®ï0SãGiÕëÒväQ¼ «ýïXî/Ó«Þ¾´×ìfÏ:ÏC ƒ_ůmZ—`çn¬H}ãïåÎo6d©ö ¹xûŸDzÒÙ\ëÏc…©#ÙokügòÞõÎàûUt9Úúɳ™,®ßÏe[ÕSè—];#´€Eýø3½é åqµ§ípæÙ)u)3‡‹Å}Éábq؆¼ Z<Hþ–æ\’ãÚ¤Q¡Gã£BH½Ÿ«Þ¼)ûǽ…z†—‚=¼.ï-Å…žh;ç]iwåÐåÒeYkK×n,$=yx] 9¿”+wÿ½>êlö×'qRo_®œ[’Ú¹+ñçâyy¦.g‚ŵÍ_ç¬+ø¡Ð/{Ú?´Óˆö�� Û‘gZì�‹¦Åƒiã‘kÒK½ôO“U¨P6z†e›áY05Y:ÈÁAâ=QQF¿s¢èâðZñ‰Çµ[¡çéÓ¯$X?Óo¢¸d…žõ *BÓËÁH]ò¥Ë»*o?Šc/å ü@êý÷Zú¯ëïýK9w%ŒÎæ™ÆµÉ6Guê5:}í�ÀéÅ~��¼ž .DcgÖd—éß«0‘dóœ(ô¨ãoåÊú;ýœKÒhþº?Ù͘Nkµÿ~ú͘MÖr â¥ÝcgMZíP:º/ÁrBÏñ¾„zï}ô{ø@þÔùDÎŒzúìÉakmÙßo˹¥ ¹þp7žäZd›£: õ>Žö��àôb?��^Ï_|iÓÕ«Wã¹ÓÇY+TL+VŒ_º•,˜ÄÅý.»t«?íÞ½"kú^ý âûøÄß±+Çû¿“­/Gj7'—Á.­œ]Åã>Ÿ¼tkPèæ°Bϰ¥ô윟I-Q¸Ñõ[ž¸yôÓ§_˽àWýï]–FcUê­Ž$n?=ú‹§µ9üU¨×èôq´��§û�M/ÙÚÞÞŽÎæù³?û³hìtMÉ"Ò÷\¬0q²x_Æ´Ö–»»'㽃P6ôR­D¡G‹$‡—DÕ›„{rh÷¶ÙÝ–ÛÁ%i}xø^ÒÉex%‡áûýe_‘ð;Ù}šxbVó·n]“ÎÑÿyBÏ÷ƒ³–~%Á½¯£ËÁîͨ Ól![Áƒ¨ åxt+.d­K°÷ãà㱓Ë9Îâimê5:}í�ÀéÅ~��L÷âÅ‹è;úT-+õÉZß|óMs]¾5YäQú¾É*T¨Ñ£Òmš<ëEsìÊñÞVâÒ-3¸Χ×eiøy½s w:]±,YËÅý´íÑê–Üܹ/7ôI[õ¦l=實,ãà,Äûg.Ê^túO¹öoJ3ºP]­[²Ó¹&çúó$Ù>ð“tÛïF—oM+r%¹ÖC¿ÕS¨×èôq´��§û�¼¦7¾H³>^ì˜'-îhQGÇGýS_kÑ'Én²œœ¦y”Æ\¬P1K1Ô™ÃÅâ‹ÉÑ‘Nëçѽ†²/1gñ´6‡¿ õ>Žö��àôb?�€¿ìÃZH™¡G 5gÏžÎÖÑË´ÒÏ­…ŸÁr¥yTÚ8k…‰<Å —2s¸X|þ9våÑíKÒ¨oJçèä5fy¿#­Íá¯B½F§£=��8½Ø�à·cÙ ý±êu =?ÊÞg·âK†òÓ§d¥w&ÙY?iE•6ÎZa"OñÂ¥Ì.ŸWŽá=‡úm=Q,Ø^f–”÷;øm«¦B½F§£=��8½Ø�à·×/ôDEƒ•ൠ=¯K/ßÊ*ò¨ä8›U¨PYóÎñjoâ@Ó§3o?Ú}BÖrdÅÕpžá“ÄÖ¤usgt錮¸.?ª§P¯Ñéãh��N/ö�øí5 =½ï$ÜX‘Úòü =y%Ç٬…ʚg9²âʇ®8¿mÕT¨×èôq´��§û�ü¢Oº'ÁðiOH+ú»z&âý©Þ¼6xj“yâ÷£)z*Õ‘tïoÅO|ÒiEš[§>f|ô;]¬P1K1Ô™ÃÅâ¾äp±xZ›Ã_…zNG{��pz±�Àöîi¶¿•ã±GrÇ…ž£Ž´êõø./å°ó‘4úãØr°_fŸ4<£§×ÿȦÔkëýÏÿØy ͵Q¾ Ð3Pf‹óÛVM…zNG{��pz±�ÀvFÎZ[ºÃ³m&.ÝŠ =ÃGoG¯ózÞ•v÷§Äë7SèÉ*T¨¬y‘#+®|ÈáŠóÛVM…zNG{��pz±�À‡¡4ûcÒ¨h£÷è9îJ'¼!­è¾i…£—|=°ÝŠÎ�⌞qyã¾äp±8¿mÕT¨×èôq´��§û�¼‘«Ðs$ÝpSút¦v(?Ý—`9£Ðs¼/akMj–´Ãò§Î'²L¡gLÞ¸/9\,Îo[5ê5:}í�ÀéÅ~��oÄ—a]ºÕÛ—öšžµ£…™£ø²«Uiu~Ä_íez~NkUjõMé ’¾Ú (ôLÈ÷%‡‹Åùm«¦B½F§£=��8½Ø�àe/XïKui´Béÿ4¼Ù²ŽUµÚ²4gû®ÈFøÞmgô4­æo%ܺ&££ø  w¥½¿/áæ¿•fã_H­þ„/E/ùº4¥ÞÏÕl![Áƒ~–ùJ޳Y… •5Ï"rdÅ•9\q~Ûª©P¯Ñéãh��N/öPEºÝ2-~ZˆÞ¡ìÝ´ûèÔ¥±yGÂORor§Ó•ãão¥=|ôzKnîÜ—zÆO½)[;‡ÒÓ{ñØ“ºêÒÞÿ‰'wié–ìt®ÉZÿóÃDzÏY²í² *kžEäÈŠ+r¸â Û^QªB½F§£=��8½ØX mç*O¾I.“èÍr0hÊÌábñ2r¸X|9æµ<{ö,þÛÛ+­í\í”7^F‹û’ÃÅâ>Ž[ÈV¨×èôq´��§û‹1ÙÎyV\,^F‹û¸$—É–3Ϻ¸”™ÃÅâeäp±ø<r”¹<þ\¶··åüùóröìÙøÝ·WZÛ¹Ú;)o¼Œ.÷%‡‹Å}·­P¯Ñéãh��N/öCÛ¹Œƒ—4Es¸â>n#YË4ëº&Í‘WEsdÅUY9Šn/^¼ˆŠ;.\ˆŠ;W¯^•o¾ù&Ž¾Ý’m—·½ÓæYDެ¸ò!‡+î㸅l…zNG{��pz±°ÚÎó8˜I*šÃ÷qÉZ¦Y×5©hެ¸*š#+®ÊÊ1Ëv ÅÇËÇ}^ÿÔ×úþi’l»¼í6Ï"rdÅ•9\qÇ-d+Ôktú8Ú�€Ó‹ý€Å˜lçY^ŒÅËÈábq·‘ä2ÙræY—2s¸X¼Œ.ŸGŽ×ÙôL=cGÏÜÑ3xôLžÓVÜIJk;W{'å—‘ÃÅâ¾äp±¸ã²ê5:}í�ÀéÅ~ÀbL¶sÞƒ‹—‘ÃÅâ>n#Ée²å̳..eæp±x9\,>YÛÞTÙŠ;zï-îè½xÞv®öNÊ/#‡‹Å}ÉábqÇ-d+Ôktú8Ú�€Ó‹ý€Å˜lç¼+./#‡‹Å}ÜF’ËdË™g]\ÊÌábñ2r¸X|9¦mZÈùüóϣŽNú÷Óð­×•öoÈÕÞIyãeäp±¸/9\,î㸅l…zNG{��pz±°ÚÎe¼¤)šÃ÷qÉZ¦Y×5©hެ¸*š#+®ÊÊamnOÌ:7UžUr{ÍÛÞió,"GV\ùÃ÷qÜB¶B½F§£=��8½ØX mçyÌ$ÍáŠû¸d-Ó¬ëšT4GV\Í‘WeåÐ6¿|ùrô§ÞT™âN~Éí5o{§Í³ˆYqåCWÜÇq Ù õ>Žö��àôb?`1&ÛyÖƒcñ2r¸XÜÇm$¹L¶œyÖÅ¥Ì./#‡‹Åç‘CÛü4>1« iÿ†\í”7^F‹û’ÃÅâ>Ž[ÈV¨×´Ó™Æ'��p:±°“íœ÷`ÅÅâeäp±¸ÛHr™l9ó¬‹K™9\,^F‹Ï#cÅìÒÚÎÕÞIyãeäp±¸/9\,ÎöZMô��@ Ø^ mç2^ÒÍáŠû¸d-Ó¬ëšT4GV\Í‘Weå`¬˜]²íò¶wÚ<‹È‘W>äpÅÙ^«‰^��(;Ë1Ùγ¼‹—‘ÃÅâ>n#Óœó¬‹K™9\,^F‹Ï#cÅì´í˜?¡zè5��€°3¼“íœ÷`ÛÅâeäp±¸ÛHr™l9ó¬‹K™9\,^F‹Ï#c€yc”��(o‹A¡§\z¦³ø<r0V�˜7F��€pð¶ÚÎy®]²âªhWÜ÷BÏ4³®kRÑYqU4GV\••ƒ±À¼1Ê���”€ƒ·Å ÐS. =YqUVÆ �óÆ(��PÞc²‹|[¼Œ.÷½ÐcË™g]\ÊÌábñ2r¸X|9+�Ì£ ��@ 8x[ =å¢Ð3Å瑃±À¼1Ê���”€ƒ·ÅÐvÎspí’WEs¸â¾z¦™u]“ŠæÈŠ«¢9²âª¬Œ�æQ�� ¼-Æd;=ø¶x9\,î{¡Ç–3Ϻ¸”™ÃÅâeäp±ø<r0V�˜7F��€pð¶zÊE¡g:‹Ï#c€yc”��(o‹A¡§\z¦³ø<r0V�˜7F��€xðÖ;”½/oH«±"ÍðûøÍêÑvÎspí’WEs¸â¾z¦™u]“ŠæÈŠ«¢9²âª¬z�Ì£ ��@ ü>x{%‡áûÑ2ÖjË^zž={&W¯^•çÏŸÇï¤Óu(r°WEs¸â‹ØF?~Mye-S¾u}${A#Þ¾jRßå ÏÐ7˜ç+ ›ËÃy’ÛatW:¡"ë£<Í@îtöåÞõKréö£h^—|Ë9{\••C× �æ‰Q�� U8x{µȲg…žn·;<°ÏSð™lç¢ß/#‡‹Å±„a}Ïùóçs|’ËdË™g]¦é>–Këïôs.ÉêÅ[r¿?Ò“ã½-Y]½$·íŽÞ놃O£%íNWEß±Û¿#íÖZ?_C‚½Q¶¢Ë)Ç;òï¯ü7y’Œ÷ßû¬ýGy¿,ü}®‹Ø�œnŒ2���%¨ÂÁ›ï…›Ò >“íœ÷`ÛÅâeäp±øä²ÏƒzlÊ*ø$—É–3Ϻ¸<¹}QÎDßýŽl„ßIâÄžÃPÖ×Ù¶Ç;h‘§þ„/£·Æ¾£÷„?Ûf-ž¶îøK9?w.ÞNzï­{z�¼e���JP…ƒ·ªzlšVðÑ÷ó\»dÅUÑ®¸.û¼Mzlr|4–æu×U·±•æ%¹]‚µ&›ÙMÎsJ³Êaôâ'é¶ßíÏ·$箄'‹B±Ý»ÿA6‚¯âWÓå]ÎÞA(õš,'Š:úÞù¥šœ¹x{øÞ4y¿#ƳÚ�Šb”��(ÁüÞŽÇî2º·IòýøÒ–ã®ÜšR·yëMÙÚ9@z^íI°Ï·ÈžáêA¸}vx0®—äìÈÍèեѺ%{‡ƒ³/ô&Ï;[ñwê¥7w>“àËü…¤´BMÉ‚¾.r°WEs¸âºìóæ*ôØ4YðÑ÷Ò¼îºê6¶ìÈû7¥Yïg}C®„Gó$ =ÃmpU.¦Üƒ'kÔh½ìžÍ•á:×›×äÖöײ{/ˆŠ<ö¾þ[úËOþã‰÷šáÿ’ý\6Ö¼!pSýí~uã7²½›¿-¦Ñ¸~�Ì£ ��@ æ{ð6¸·IãÄÙ8?Hgs3¾ä¥ÿ÷ÖªÔ[²wÜ“Þá}ÙÔ³*¬ˆÓw⌞޾´×Æç‘£Ž´ôÀ7>΀XëG÷( ó®µ¥Ûëõgß”züƒå¼&­×8c(O¡Ç&-øèŸIY×yãeäp±øä²ÏCV¡Ç&+øèß-gžuqÑK·~]õµv>êo³ýïk|$+ &/Ýß—ðpt.MÞe˜:O´ýÖ£{=J,Ã𠞸¸¤gï /ÝŠß³yzݶœ‹–K§_H°óG 7V7™~ýåL¶9�Ì£ ��@ ì�ºÌiL\”IljæýÍŽ J0q¡'*À$^§zäûÁ“’…;Ë"*ôØ¥5'—­V{WÚÝgÅ7Ñ=yóÝù·KÞƒm‹Û<Ó¾ïmΞ=ýi&Ûbš¬ø¨Ð£óÉ~{#:Û«Þ¼)ûZ \P¡G/ÓKƬpù:…õt;u]¶sWâO'ͺœÉ6€y`”��¨„øì™Úº{?ö_ÿ({AKÚÝŸá¡#évÂøiEýÕB…žA¼Þ²bÒ$;ÓHÖõ’®òåÞèR±<òžÑsùòåá¼Iy¶],^F‹O.û<ä9£G <:ß‹/¢×Æ–3Ϻ¸ŒzúzÒÙl‹Q‘ò Q豳Ǣ¢áh;λ ©ó<º+׃¿>®}æBOYíÆI³.g²Í`e���ªÂŒ[²³wCÖ†gï({LõrTp ;{ÒѳmJ(ôÔê›Ò9r•oô{Èá½êÒv¦žÝ3MV¡Ç <FßËspí’WEs¸âºìó–VèIxŒ¾Ÿæu×upžQÁD=}ôwr%zìzÛhþº?Å÷è±³Î2nÆœµ j4Ï‘t£{ê¬I«JçO÷Ç ;SŠ:úÞÅ37c¶³†Ëúúm1ƳÚ�Šb”��¨ =‹g=:PÔƒæµöþèà8.ξ‰oÖ\¨Ð3ºt«ÞÜ’ûñ}z£Þ’›“gïKI4~)NW¡g²Àc4Vä`;+®ŠæpÅuÙçmZ¡gZÇd-Óë®ëÔBÎóèÖà1êºL‰âÉð~8K¿>^}\O…ŸÈ¥­ß; Aj°»ñYo«Òêü0ÄÛ3…�§ £ ��@…èñš€N\îb¦ƒ{øèY6öä¡ i‡×$èüßø 8Y ²3*âËÁ&ŸÚµÈÎwƒÇQG¯Óà{^õ¿6H,G\ˆJ=hÜd¡ÇUà1:ORуo‹—‘ÃÅâ“Ë>ÉBOZÇ$—É–3ϺL÷Rî¿’¥sWäî”§SÙ£Íõr¨èÒ­ÈËÑM›ëM ½èÉVÑwôe/Ü’Ö‡÷å0±9Ù2œ\Ýßï¯ÓŠœ~/»OJ÷þÖàé_ÍßJ¸uM:Ïw…Ìþ2†_mÉæÖŽ[qs­-ûß½÷ˆK·�T£ ��@•ØM™OÜ7gtãÛš^¶rótnèÙ8+ÒÜz »¯ÀLvFÃð)Zý÷ô1Ô;ß?îôö?üN:Ñ<É¢‘~6ùxõþõ—ŸIpç‹a|üÌŸlVèÉ*ð7)ïÁ¶‹ÅËÈábñÉeŸ-ìä)ð˜ä2ÙræY—¬XÒÏ7˜Vü3¸§ÓêX¡GM^þ7˜êÍ@îL¹Éwêr+mÛVWß“›;÷å†>Y®Þ”­½ÔàßÉR?¾´þÑàщ;zÓèo;ŸÈ™x¢)yÆ[‚sb®åÔœ�0OŒ2���xcž?ž«Àcô 9ÏÁµKV\ÍáŠ/â�ÿÙ³g¹ <&k™f]פ¢9²âªhެ¸*+…žÙiÛ1-~BõÐk���¨ŒÉƒŽ¢ß/#‡‹Å}<`J.“-gžuq)3‡‹ÅËÈábñyäàÀyvimçj祿ñ2r¸XÜ—.g{­&z ���•1yБ÷`ÅÅâeäp±¸LÉe²å̳..eæp±x9\,>8Ï.­í\í”7^F‹û’ÃÅâl¯ÕD¯�� 2&:ò¬¸X¼Œ.÷ñ€)¹L¶œyÖÅ¥ÌIƒ'ÆM¿¬d45†÷šå;’,>º¬˜MZÛ¹Ú;)o¼Œ.÷%‡‹ÅÙ^«‰^��@eèAG/iŠæpÅ}<`ÊZ¦Y×5©hެ¸*š#+®ÊÊÁóì’m—·½ÓæYDެ¸ò!‡+ÎöZMô���*C:æq0“T4‡+îãSÖ2ͺ®IEsdÅUÑYqUVœg—l»¼í6Ï"rdÅ•9\q¶×j¢×���P“³¼‹—‘ÃÅâ>0M;pγ..eæp±x9\,>8Ï.­í\í”7^F‹û’ÃÅâl¯ÕD¯�� 2&:ò¬¸X¼Œ.÷ñ€)¹L¶œyÖÅ¥Ì./#‡‹Å瑃çÙ¥µ«½“òÆËÈábq_r¸Xœíµšè5���T†t”qð’¦hWÜǦ¬ešu]“ŠæÈŠ«¢9²âª¬8Ï.ÙvyÛ;mžEäÈŠ+r¸âl¯ÕD¯�� 2ô c3IEs¸â>0e-Ó¬ëšT4GV\Í‘WeåàÀyvɶËÛÞió,"GV\ùÃg{­&z ���•1yÐ1ëÁ‹±x9\,îãÓ´ç<ëâRf‹—‘ÃÅâóÈÁóìÒÚÎÕÞIyãeäp±¸/9\,ÎöZMô���*cò #ïÁŠ‹ÅËÈábq˜’ËdË™g]\ÊÌábñ2r¸X|98pž]ZÛ¹Ú;)o¼Œ.÷%‡‹ÅÙ^«‰^��@eLtä=Xq±x9\,îãSr™l9ó¬‹K™9\,^F‹Ï#‡¶¹N—/_–0 ¥ÛíÆdIû7äj祿ñ2r¸XÜ—.÷qÜB6z ���•¡e¼¤)šÃ÷ñ€)k™f]פ¢9²âªhެ¸*+‡¶ù‹/ä›o¾‘Ï?ÿ\.\¸½Gá'[r{ÍÛÞió,"GV\ùÃ÷qÜB6z ���•¡ó8˜I*šÃ÷ñ€)k™f]פ¢9²âªhެ¸*+Ç´6§ð“O²íò¶wÚ<‹È‘W>äpÅ}·^��@eLtÌzðb,^F‹ûxÀ4íÀ9Ϻ¸”™ÃÅâeäp±ø<räÙ(üL—Öv®öNÊ/#‡‹Å}ÉábqÇ-d£×���P“yV\,^F‹ûxÀ”\&[Î<ëâRf‹—‘ÃÅâóÈ1Ëvà*üœ6imçj祿ñ2r¸XÜ—.÷qÜB6z ���•¡e¼¤)šÃ÷ñ€)k™f]פ¢9²âªhެ¸*+GÛ~N›dÛåmï´y‘#+®|ÈáŠû8n!½��€Ê˜<è˜õàÅX¼Œ.÷ñ€iÚsžuq)3‡‹ÅËÈábñyäàÀyvimçj祿ñ2r¸XÜ—.g{­&z ���•1yБ÷`ÅÅâeäp±¸LÉe²å̳..eæp±x9\,>8Ï.­í\í”7^F‹û’ÃÅâl¯ÕD¯�� 2&:ò¬¸X¼Œ.÷ñ€)¹L¶œyÖÅ¥Ì./#‡‹Åç‘cÛAïpO¾l·¤±ÈÎ÷e«¹}O­ñ‘t_ÆsI÷þ–4ëý÷5V[‘æÖc9ìiì¥îýƒ´[kRkÞ‘n7”V£ÍWoÞ”ý㟭Kcó~ü9¥Ÿ½5œ¿V[“ÖÍD¼<imçj祿ñ2r¸XÜ—.Oksø‹^��@eèAG/iŠæpÅ}<`ÊZ¦Y×5©hެ¸*š#+®ÊÊQþvð½„Íå(oT„i…Ò=îI¯Û–µþ{õVGޤ'GM©×Ö%ØûQ¤w ͵þüþëc‘ÃPšÑçãBM¸/ÇòRÂúŸ©ËÏ×.Ég;‡šEöÛý÷V¥Õù¡ÿÝ:ÏEY‹¿3*út>’Fÿ3kíýþüåJ¶]ÞöN›g9²âʇ®xùÛ+^��@eèAÇ<f’ŠæpÅ}<`ÊZ¦Y×5©hެ¸*š#+®ÊÊ1Ÿí .ö,²÷*~ëÕžË5©5C‰J4Q¡ç]iwêíu\èQGié;Ñü±¸�´ìÉ(m ˵ei†ß÷ÓìK{ÍÎ䙘ÖÚÒ-¹Ò£yMÞöN›g9²âʇ®x²ÍQô���*cì@²‚“o’Ëdz³ š2s¸X¼Œ.ŸGŽùlY…Ó“ãî õ2¯h›Lz¦ÍŸUè‰âvvÏìô±ñy¤µ«½“òÆËÈábq_r¸XÜÇq Ùè5���à”¢Ð3Åç‘ãzŽ÷%Ô{ð4ZÒÈŸ:ŸÈr)…»<l6Ýn7j“Ë—/GOsj =Ç;4êRßå ·Øå¤ÐSMô���pJéAÓâ§òez~NkUjõMé ®§l z†—n­H3¸ß§§¯÷„~‘ëÒ­0 ‡íráÂyöìY9)ÙvÎB…­G”ó9üþ佂âõ²ï­ÕÞ—ðÐÖpò¬§Ažfð;étÿY:þvÔÆ}ÎåˆeÅUfŽG·äâêÒ°Ð3MfŽãÉ6GuÐk����PeVpIr†÷܉î•‚êHxðRä¸+÷ƒ¦Ôµ`ÓþB¶‚r46ÿ Åø £wâ{ûØÍ–í†ÍV±iE6Â´3uôLžägÏž=ë,öhÜÅ ƒbÅK9ܹ?%,¾ubže/øsi;—ºú±‡r7ØÕÚ’4Zmétí<¥#évÚƒ'‹¹(·Ÿ/¨DóïÈgí?‹hæµr8”Oksø‹^���€ª;ƒE§÷%ÜûÝø+ËŸHçÛ›£Ç£·nÉNçÚ ˆÓ¼&Ãdylþ@þð=s'ñ^ów²¾?z½§gÿL>¶ýäãÕõ}=[GïÅóÍ7ߌ~Æò%¦ÇÇsŒèû.V˜/Že/h òÅ®ñø+9 /ÎLŠôäÑíK²ÚŸé|0õÌ™ÞA(ç—þB‚í'ñ;'ÇIúôë¨H¶’8[ÊäÏ‘=KÞxZ›Ã_ô����`®ô^<z™–Á£…ŸO?ýtPˆqL“7iÖ÷\¬01*^h¡çÏ¥Ùú`p Vã#¹¾ýu">QèéíË•sKýïø¥\¹û‡Á{'ü$w¯\,¥Ð³{/úøeq&oŽ<ó¸ä§µ9üE¯����J ?“—mM›®^½:<H_›¬B…zn_\—‹·ïÉ~{#º¼¬Þ¼)ûv!y%ÛÁ_ÊzðÕàUtï¡þw&ïsÔ—õ=©ñޡܺ´.KšWo‚}ç3 ¾ü>:3H‹<£õ<#ëŸþWÙûò†´+ÒlÿãàÆÙµ5Ùìüoùï·ÿ³\yïÜèþIý¼ƒy×$ØéÊÎVsðµsýù†—ÌEóÝÝkhiý¯eçðeçZd›£:è5����ÀÂå)ôè¤gÿh±GÿnR ,+ô<Òk®¤³©…“º46ïÇ—•% =zvO|YZòfÔ}YßãŽîg´´zIn?Ú^ï]“–A_r§gô<yú¹{å—Ãõ­5¶dgÿŽlÔWdã?}$ÿÚÞ–-±¬Ñ¼›väén88#ixŸ¦Ÿ¤Û~·ÿzCÚû¿'×7Î>—s=u^T½����X¸aÑ!Ǥ7iÖ?]¬P1*Vè¥[ÍÑSÅŽ¿•+ëïôs¼#Íö·ýhòÒ­Dñd=í)ã*ˆ˜Q<¾GžÉÓéö_ Xüé“ÛÃBÏà"[†ºœ»Ênò;&žˆöôéÙþ¢?ïêhýìûâ'ˆ ?‰‚ÎàæÚƒekþ<ë‘Öæð½����X(½tËŠ8i“ÝÄYoά¯]†”añb¢ÐÓ·»ýÙXÕûðh±ãŸå`Xè‰Ï¾Ñï<wEîîæ)äL7Šë<[ñeSzìòåÞá°Àâ.ô,Gg}G‘BOâ)jý/>.ÿÉp9§³õHksø‹^����,”Þ˜9YÐÑéüùóòñÇËöövTš”,:X!Â-qéÖPOŽ÷íéc Y_ÿÅð=ÃÇÑ×Þ•v÷§Á{}Yß“ïÉ£»7äÓþr A_=Î}ìÒ-ÍñdXè= l@‹BÏô??<;ÇŠBa¡çéÓGýõ]í¿7(ôŒ MzŸŸÙ}úPÂ+çû˱*­ÎÑg’\ë‘lsT½����X(½?NöÈõçÏŸÇ·â…•<ÓæÌ¨Ðc÷´é¿_߇Wÿž#Ù¿ù[ùò`tCã¬åÆ÷ã,Ç…˜¹zú¢{ýZåh½jKëÜ]F–äZ =ÕD¯����¼—Vt°BŰXÑûNÂUYkï‹]¹4Š¿”ƒð©OU’7,®7 ÷‡ŸíîIlÊ¿¹~oüþ9FߡŘ qvв¬KmiC®?Ü^º¥—Víÿ¥ln=–®ëÒ-;Û(¾ ëéðæÍ?KœóƒtZZ蜑ôôé×r/ø•¬ / 7ZÎé,N¡§šè5����€÷òz†J·)~dºÅ´ðòîx¡'Š?”»×?‘ ¹2ú|mEšÁ藍O·ËqÒ(þJ¿üL‚;_ sÕ›[ò›»ãy&û¾%7Zÿ*ñ}59sñö @ßWg[nÉŧ{O‹U%lÆgíDSC.Þ¾#Áú™Ä{£©Þ¼&·¶¿Îµ:?ª‡^����x/­è`…‰<Å —2s¸X|þ9¾–íëïÇ—¨œ´¤—Œ¹X~ÕC¯����¼—,:d:TÖ<‹È‘WsÉ¡÷çùðCiïE/Gq½GÑg²‘¸¤Mø|ŒBO5Ñk�����ïQèqŸ'¾±t½9¼ù²Å{‡;r3¸%{ÇÉ2û;(ôT½����ð^ZÑÁ ÓŠ&o<kž'·/Žßhê4z"VRÞïÈOçÑ]¹þéÅøQòñ¤…ŸpO£:çûýª‡^����x/­è`…‰<Å —2s¸XÜ—.§ÐSMô����À{É¢CV¡BeͳˆYqåCWœBO5Ñk�����ïqFÏ@™9\,N¡§šè5����€÷(ô ”™ÃÅâzª‰^����xBÏ@™9\,N¡§šè5����€÷’E‡¬B…Êšg9²âʇ®8…žj¢×�����Þ£ÐãV4‡+N¡§šè5����€÷ÒŠV¨˜¥˜aÊÌábq_r¸XœBO5Ñk�����ïQè(3‡‹Å)ôT½����ð^²èU¨PYó,"GV\ùçÐSMô����À{zÜŠæpÅ)ôT½����ð^ZÑÁ ³3L™9\,îK‹Sè©&z ����à= =eæp±8…žj¢×�����Þ£Ð3Pf‹Sè©&z ����à½dÑ!«P¡²æYDެ¸ò!‡+N¡§šè5����€÷(ô¸ÍáŠSè©&z ����ུ¢ƒ*f)f˜2s¸XÜ—.§ÐSMô����À{zÊÌábq =ÕD¯����¼—,:d*TÖ<‹È‘W>äpÅ)ôT½����ðgô ”™ÃÅâzª‰^����xBÏ@™9\,N¡§šè5����€÷(ô ”™ÃÅâzª‰^����xO‹L‹ŸP=ô�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[‚B�����À[Aäÿ»¯óà1©����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7x.png��������������������������������������������0000664�0000000�0000000�00000230401�15030617045�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��í�����¾{ B���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýpW¾'üûßT©¾U©ÚªgóÔænª\Þ‡ºµyR”ë>É“šÅµK6Yï…ì0ùR$\¡`p.É×¹ØËY‚Éq“Ø“‰Í$~&xLp&hL0NìÄ c“‹ ˆ‹½à‡!&6Fl ¸dËÖû«#©ÔÖo–úÇû5ÕµŽ[è>ÝŸ>§O€ˆˆˆˆˆˆˆt‰A;‘N1h'""""""Ò)íDDDDDDD:Å ˆL«  € .\¸páÂ… Ý.©`ÐND¦•jCHDDDD”k Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´iÌ7Ïí™ð ¥ƒA;Yƒv"¢,ÜéGïÕéðJ,~Ì4b»c8¼NDDé`ÐND–Ç ˆ( žOP]uÇ8b.Ͱ—ýe Ú‰ˆ2 ˆ,A;Qâí¿ÇûUOÃhc Š6¡Éí o@DDé`ÐND–Ç ˆ( 1‡ÇÏÀÓýV=ˆÂoÀéáýìDD™bÐND–Ç ˆH"ÿ= ´lÃ2ÛC(®hÆeï\8ˆˆ2Á ˆ,A;‘$¾pÖ¬BaÁ£Xm?ÏN "¢L1h'"ËcÐND”=¿·å¡Àö4ªWàŒ×ýS¸{ï‡ð ¥ƒA;Yƒv"¢lÌczè3ì.yEÐpþ{øÂ) ÿ½4~ÂÙ㉈2Á ˆ,A;Qæüžx±ÈlKã/…|äQ†D;š žÑ‘i¥ÚQfØÓND”9íDdy Ú‰ˆd˜Å]÷i8ë`·ÛQÛèÀ—ýL‹{ÛyO;QÆ´‘å1h'"Ê’oÝöPhOE›zy%Õ¸ùØ7"¢Œ1h'"ËcÐND” /.ׯ†ÍöÊ^{ç¸\.¸z»àx/ÊŠÆ’­ŸáŸþFD”íDdy Ú‰ˆ²0áDÕC%Øåô,š5^ðO_Cë–2Ø]÷ÂïQ:´‘å1h'"ÊÜ\_-–®iÁPÜžt?~è{«ë/ƒä‰ˆÒÇ ˆ,A;Qæ|.;–Ú]1{ÙxØ”ìoˆˆ(&íDdy Ú‰ˆ²0ÞW¶;1^]Ì©^;Ö6}xEDDébÐND–Ç ˆ(è«{ M‡×#Íczø Ô”®E£;V:%àˆ,A;Q–|7ðå¡FtEîÓêªÃ–u•Øuàm4»n³§ˆ( Ú‰Èò´IàŸƒoŽa9‘l Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"ËcÐNDDDDzÅ ˆ,A;éƒv"²<íDDDD¤W Ú‰Èò´‘^1h'"Ë !.\¸páÂ… .z]RÁ ˆÈbjjjb4"—LJÿšòAü”n·›û�‘É8ŽàB‹޹<+ "²7n`ÿþý Áy¬å«¯¾ ÿ5勸(?” ],6lÀøøx8…ˆŒŠA;%b„c.Ï ˆˆLì/ùK0½ëÅÅÅX¹r%þçÿüŸ AIä"ÒEPOù'~ÊÈ ]Ù/.^¼N%"#bÐN‰á˜Ë³""“‰ ÔÅHüW¬GöŠà=20=Š ØõÃ'f¥Ú•åW¿úUpß""ãaÐN‰ˆ6^ïxV@Dd" ¨Ç 2D�¢#Û¶mc0¢3F80«xA»Xxq‹È˜´S"¢}×;ž”Ô;;;ƒ„8à$ Ô#‰á¾b¼“þá¬íbÃåÅ~FDÆÁ m»Þñ¬€ˆÈ`DÀI Iü½øIŸŒpaVÉ‚vq¡‹“Ó ƒvJD´ízdz""A‚x•èå{&:‡N Ì*^Ð.n#iDd<bÿå„’hãõŽgDD:&‚sq²!‚uÑÃÇûi­Á'f¥Ú_~ùåàÙ»Nd\¼èF‰á˜Ë³""ÁÆ'fx‹ÆÎ^uk1 „Y)A{äI¾¸`ÆùˆŒ‹A;% ˆˆR&N(”ÙßE€À ëbО?⢙zßï‰ß„½íDÆÄ aÐNDDI‰!ðJ¯ºèag¯:1h×q!YƒvJ„A;ŤÌÞ.ueb9"ƒvý'übn "2픃v""Š"‚uÑ['NþyAñ0h×'^`#2&o)íDD$î…UÙÆ“J†A»>)Os ""ó`ÐNDdq"X÷Š‚ø/'²¢T0h×'1RF\x㣉ˆÌƒA;‘E1X§l0h×/1bFìÓD¤cþ öüõv;ìõGÐáÁ´?œF¤Â ˆÈb”`]ôÆq&xʃvýû¸Ø¿¹oé” gjJa+°¡pÙ*”•=Ò¥aEM<>FîdL<+ "’ r‚9ö¬S¶´ë›¸¯]<ýˆôgÞ݈§lÏ`wÇõû½ë¾Û¸X¿;œ·À°ŒˆgDDY'ïÊs ÖIíúvñâÅàã‰Hæêñäê «£s›ì.øÄë9ØénU3ðôE­ý=œt߃_¬»>Ggß­PÝÐ)žeHÌ$­<g³Á“L ÚõOìûÜï‰thz�M› ÇŸFàñxBËð%|a›[ú‚ë#=ïáÍžÛá ÈJæ¿m³¶‡°´t%–oãú�ëCm5ê/{Ã¥?<+ "J“8Q½êâ¤Ïl&²&q; '¤#ÒŸPPV¼ø™hyp7ÙÛn9Á‘+›0è÷cöÚ¼tð¦à‡Ïý6Ö_Â\øïô†A;QŠÄÐw¬+“Ì‘u‰ö@œøsB:"ñ mÇëpœsÁåJ°ôÃË Ýzü8÷¾ ç¸ÏÇà ÔçÄ îôÄ åö bÐND”¤‹tÎO9ã¿Óuc4¼Jú#náh"ñ^Cßÿº…ɨ€|î¿‚Qé–7?t›‹ŠuZžÄ.ß2Á ˆ(1^ ƒ=ì7nÜ¿K¤ÿô- tÅò'`+sÀ~ŸôGLBYSS^#"]ðÇ–²8 žÑ¾°ìGÕsëP?0hdoà³­ËñøÖvxÄ[Žÿ¦ë–W¡ÑávÄ„–ãè8ý'ŒéxvBíDD1ˆÞtåyë|´iÏï '^ÅsKE@J6mÁƪO´ë‡ÈéÇò¥¥X[V†²¨e^q\Ã<ƒv‹›çôp݉¾{ÝçªCEË5'"2 1ÜUë¢'㤹ùëh{åiŠáy…+°¥®ç‡&'s˜¼+þKz&Ú ‘'Ò‘;ýè½:^!R™¾‚£OÂ54>¼ØžFuËyx¦çì Ú‰ˆÂ”‰æø('Ê­YÜuw£¥vÊÊv¢á¤ C^ªû1ç› ü?陨9DžHGFO£õìUÛ9«­­è›b‹jus}µx¬¸õÇ"‡Ç;ð±}=žªúMàu+:ÆuwìeÐND lq•Uü—½ë”/þiú;c_E6½V‹}öv×9Ñ^ˆ¶ƒí‘Nx(‹ì=]Xž@µó/„ZïºÖãËÑèqls®7ñó?Œ„×ô‡A;Y'š#}÷¸÷ ®æ$ƒv=íœû‚H'<mؽ«Ç"zQGí¨¨°£µo”A;þ9øæ¢kïi'"Ò)q çDs”~ø<½h®} '¯Àëë.´wöÁ3íã ¦ˆ!òâñoD¤S#ü~6¼¢˜Ä@C5jû&ÂëdY¼§ˆÈĽëâ[,ì]§¼›¿Š¦gmé3Xµ¬Ž+¸æx E`E}?8’þ)CäEÛBDyæé@ƒc�çþ2| m»–£ÐîâäžÇ{Ú‰ˆ @™þðáÃáwˆòlîêŸ,CÓà 0ëFÓKïÀ%&Kò]AãÆ÷0ýTÒ)ñˆHŽÚ!Òx÷´ÛVÀ~þNøÈ²âÝÓÞwÛÚn†×ô‡A;Y‚è ÷Š€3Ó¾ø0ê| ûƒ$ÍcÂù:v8Gá»söoÂÅn!C¸xñbpn "Ê3ϧ¨m<—Ëu9s{ö´ã¦7YÞh7>êù^uO»þŸ.À ˆLO™lŽÏ]']š¿Ž›cÝ_gÃ’]Ýà˜ÆÀYä‰t"æ=í3lª@EÛç ±:ƒ>]€A;™'›#ÝóÁ±nª?Žº¿®µã†¼o$bž ÑãNDy«§ý|+Çcµ}`«jqžOPUY‡–…ãí1´¼»%˫Ѭ㧠0h'"Sâdsd¡ÙãÛ]·ÙdpâóeåYœžTÛ²í818þ#²¬é?cø¶ê¾3ßu8*žÆ‹mà ډˆrE ‡çdsd|þÑYL¨Î毶ãOd(Ê­8D”GžOQ×Ò={¼ç6¼¼Ÿâ˜:†õKJ±§ûÏ Ú‰ˆrA ƒ»˜%žÈ†á(+\Ô+¼§½º ã<Ï4ÑþðÑoDùã¿Ó“ƒ£õ,†gýðÝu£§­_ŒòqoÿÝtŠañ« Ú‰È4Ä#—Ä 3‡Ã“± £µªï¶N2•{ìZêPY²UÍ0Æ ÝPÄ„—¼hH”GNT?½C“ð‹Çh®Y‚ÂÒ—°³âE>ò [?´‘á‰Ùš•û×9s3Ï$F†ÇUCòf0â¨Ä£/ž€‡A»¡ˆÑ>"p'¢ü˜ëû5Ê›¾ ´©swîÄ’7¡ehþá”Û]ìm·8£ÖíDdh¢W]ÜC*zÙ°“!ùÇ1ÐÙ ‡ã$z‡§ß8ܧÞ@¡"_ý%F´Š/FüQ~Ì{k¾ÀwîOP]üPø6£I µîÆ+|ä›åµ~0h'"ÃV'Çb81‘qÁY½»;®cÚ?…kMëð`á TîÜŒrûYxÃEÆ!.$ò6¢<ñßÃåÆ(*(€­¤Ý£r6ÂnÍ|J´~0h'"CR&œã3‘ÉðæúP[ÞŒÁÀ™‚¼ ÕKþå-×àó_GKùÛpq,§áˆ‘?¼˜H”O>xÇ8c<Åc¼úÁ ˆ Gœ³'‹Lcþ*š6Úáüî2Úª—¡`ÉN8Çg1=ÔŠW^9‰[<ç4q1qÛ¶má5""¢ì0h'"Ãà„sdNsð^þ�åE6ØžÁžnf†¾Ä!»öfî0h7Ñ>‰ÇöQþ)Oå ŠÇí5(DdJÀ.zÙ‰ÌÇŸ÷6Ƽ o D¤ Ú)íDDDÎODd|^;‘>0h§d´eIìœ!žˆŒF´Y‡¯Q¾0h§d´eÁívvöV‘Õð~hãí'£#Ê=ñt±ÿ)‹¥'–È÷ÄB¤`ÐND”!¨‹F”;YƒvãçïH”âb™Ø÷-¼ F‘DÐ;MˆHwD .zØ9‰Y•N (9¶cD¹'zÑ#ôX {Ú)’¨zdz"Òq(OtÉêŒpAɉÞ<Ž"ʽD½íœÔÖÚÄùeämÊEõ{z{´0Ï ˆH7Ä”I"bÐnœŒŽ(?”@,Ö"n]!ëçš±êEä"ÎEõ†gD¤ ¢Ïa×Û•M¢|' d|/^ä½³Dy"Î)ÔÁ{ÙI™o$Ñ¢ÇR<+ ¢¼cÀNMœ4ñ‰“Cq»åž2¡­²ˆ}‘½ì$$êm×c/»À³"Ê+ìD‹‰2 Dù#0%ã³ÚI‘¨·]¯ó𬀈òF™tŽ'´DÑĉ™ƒ/î¯%¢ÜSzÛŹ;(R¬Þv½ö² <+ ¢¼Rqå¤sD‹‰“2qbØÙÙ^#¢\{ÙI-Vo»^{ÙžQÎ1`'JŒA»yˆ`Qlê ÉÈ Odo»ž{ÙÖ0"Ê)ìDÑÄÍÈgÃ**R¿Ç}Ƙ8ƒ<Q|f v´Sdo»ž{ÙÖ0"ÊìD‹‰ ]ìʉC¼Eï'›¸à"&Û$¢ÅDÛffɇ‰Þv½÷² ¬aD”"à5ìD‹‰áÓJpk1 Å'~C"ZÌ,û÷qm(Ç@³,Ù` #"͉@]4Vì)$Š-Yo;÷c¿-Ÿ’A´˜hßÌÀ,ùÐ3•k¶ya #"M‰€]œ°2è J,^o;{Ù}#ŠM´qf`–|è™Ê5Û¼°†‘fD—S<ˆ‹×ÛÎ ^ÆÇǾÅ–m £fɇޘ©\³Í kiFô.‰“U"Jº·½ìæÀǾÅf– Ì,ùÐ3•k¶ya #"Mˆ`]ô²‹ÞC"Jº·½ìæÀǾÅf– ÌLÁ¥ž˜©\³Í kI'†ŠÀƒ;Qú”Þvö²›‡¸ŸA;Ñbù ÊüðÝþ·}þðzö´kƒAû}¬aD$•è;íF”¥·½ìæ!~SžÔ-&¿˜Ãsçpu.¼Ó$ê߀Ãã ¯gû·6´ßÇFDÒ(3Å‹¡ Df%¼fY(wXÞD‹Éß/|ð´îEÕû¿_˜KbÑrô�ÊŠ*´€™Ê5Û¼°†‘ì$«0ËIO2s‹åM´˜üý"AÐ~ìªJü›6•7Ã=Íáñz—·rõÃs{&¼"G¶ya #¢¬‰€]L:Ç™âÉ ÌrrÆ“ÌÜåÍy>ˆ¢Éo‡â ÷ ÛþŠ –`EM<ïgØžjC“r½ÓÞ«Óá•Xü˜hÄvÇpx]ŽlóÂFDY«©©á$Kdf99ãIfn‰6RLHGD÷å¢ò{/¡eËrØlO¢¢©^¹ñzÛSmhR®žOP]uÇÔ#1–fØË~Œ2íDd&b¦x1Ë5{È*ÌrrÆ“ÌÜbÐN´˜¶í>OjV,AAÑ °w@Þ]ìÑØžjC“r´ÿïW= [àß,(Ú„&·7¼Ùæ…5Œˆ2&&žgŠ'+1ËÉO2s‹A;ÑbÚµCsð^þ�åE6ØJ^…Ã}/Âß矼‡{|ä›îiR®1‡ÇÏÀÓýV=ˆÂoÀé‘{?»m^XȈˆÒ`–“3ždæ–˜óCŒL"¢û4i‡ü“êØ‹›˜pî78?ªÀæpÏù!>áìñº—“rõßÃ@Ë6,³=„âŠf\ö&|^`Æ²Í kQÌrrÆ“ÌÜR†`Ñ}òÛ¡YxÚ¶¢(ð¹â³ã/›øÈ7м\}7à¬Y…‚G±Ú~Jú…‘²Í kEóOÁãê@sý›°ÛÐÒíÆ] 1"£1ËÉO2s‹A;Ñbùi‡ØÓnZ–«ßÛÆòÇP`{ÕŽ+ÑÎ…ïÞû!¼"G¶ya #¢ûü÷p¹qcè µm)J×®ÅsËCÉîÏ5½úHd$ù99›ÁmϸÔI”x’™[ Ú‰ËW;Ä{ÚA›rÇôÐgØ-žÙ_´ ç¿_tlõßëAã'œ=žˆtÊ?Ô‚5¶‡Q²ë¸ïΆߜÄPën¼Ò65‰ ‘UÉ?‰ùÞA$¼‹nöê·‡'¼*O2sëâÅ‹|4&‘ЦíoîžV4ÖÚa·×¡Ñq ýž)MÎeØžjC‹rõ{NàÅ"[ð³ã/…|äé×\_-+X‡–ápÀænA¹Ý¥Ù£RˆŒ$ÛïbÃh­Þ…÷)Q/ÇpÔ^Ž¢2ƒv3Ç3h'ЦM;$õv öÕ??j‰5ZmòAù*Wö´‘¾M]@íò5¨˜ ¿!ñ.*W,Ãó-ƒìi' ?h?ö~Jlâdó1”7 @ýšlð$3·´-¦I;4ÝúÀV\Ž×ÞwÀÙ{.×yô:xÿµrÛÇÖŽ›RÏiØžj#oåÊ{Ú‰HßÄÕénÔï~¿í½ îà¼ý'x\ÃG`ü“ˆXÃã#zŠ W¡ÆyCúHždæƒv¢Åä·Có˜pîÀCÅ¿„s4VÐ%îgnÅ–§ß„kJ^ØÎöTÚ–ë,îºOÃÑX»ÝŽÚF¾ì÷`Z£ªlóÂFDÑüìiFMõnØë Ã5¢YFdDÚŸœÍÁ;Ђ-ˆ­øe4]¾§É(ždæƒv¢Åä·C“è«ý Ö$è üÍVÔL…׳ÇöTš•«oÝöb<ða”T;àÖ £*Û¼°†Ñ}þ1œ©)…­À†Âe«PVö<J—>†5]œ=ž(L³“ˆ xœo`Eáƒ(Zýº=3á÷åÓ6¤&nw8|øpxˆùí.{ì.ox=<Ž]Iþ&=lOµ¡M¹zq¹~5l¶'PöÚ{p8ÏÀårÁÕÛÇû{QVü0–lý ·$Ÿöf›Ö0"Z0ïnÄS¶g°»ãúýÞußm\¬ßŠÎ[šôöf'g \Œu¥“w'¤‘çIfn)óÑ}òÛ¡9ŒwìÅvçXx=–»èÝ÷ 4 Ê»(ÊöTš”ë„U•`—Óó˜êŸ¾†Ö-âÂϽð;rd›Ö0"Z07P'W·`X{ؤÌ?ç;ÝÉÊ´8‰ðO_GÇîg`Î5œÅ¨z'óÂÙØÉÙã ŒA;Ñbš´CSP·ã†b¬ø'1ì|¥O7Â=~O¶§ÚТ\Å“’–®iÁPÜsY?~è{«ë/%~kš²Í kÝ7=€¦Í¿„ãO#ðx<¡eø¾°¿ˆÍ-}Áõ‘ž÷ðfÏíðDÖ#ý$Â?Œ¶—?7áÂG¾ƒv¢Åä´C~øÆ†pcatRh"ÏCïtah6"2›ý]_ÁºÊ]8`? ×y!ÛSmhQ®>—K“=Æ8²³J’lóÂFD æ¿m³ÁÇK%^\çÀMö¶“E‰} çØÓnx Ú‰“ÓžGÝïóIí)M„í©64)×ñ¼²Ý‰‰ðêb~LõÚ±¶é©·…f›Ö0"ºÏ?‚¶¯ÃqΚ”#ÞÒ? /ƒv²¨üœœñžv£cÐN´˜œvHþÄréb{ª mÊu}u¯ã£¡éðz¤yLšÒµhtÇJÏ\¶ya #¢û¦ÿŒo¿ä* ÷]ÆÙÁÉð‘µiwræ‡ï®=ŽFÔÚí°×6Âñe?<Óo¼ŒÀ“ÌÜbÐN´˜œvˆA»YI+Wßm\¿á½ßsî»/5¢+*pŸÆPW¶¬«Ä®o£Ùu›=íD¤Sž“Øg?^UÏúÙ¦_à'öv¸nÀËYèÈâ´99›§û-¬.²??r±•¼ ‡[þ³ÚµÉÅàh19íƒv³’V®±îQ÷ÏÁ7—»sÚlóÂFD÷µ²@£"–Ø‹ …+Þ€SÃgGéØäòcúò!¬°=„â²½xßѾpvNÇ{x­ì Ø–T£ã–ÌÁñ<ÉÌ5íD‹Éi‡´›•´rÕ`b¹te›Ö0"ºÏó)j›.`X™9>¼Üèx k]Á×ÃîÏ`ßÿ9FÙáN%ÿäl ΪÇQ¼«kñ£Þÿ$†Z«ð´ý¦ÂoÉÀ“ÌÜúÕ¯~…ÎÎÎð rÚ!íf%­\´‘©x¯aàÆâ^ô9w+~Ý3xå‡o¼û–„+Ÿ-QI?9›ëCíÒ hú!üF ?\DíêC82O2skÛ¶mp»Ýá5"ä´C ÚÍJZ¹2h'"K™¿Š¦g Q´å3ö´“eI?9ó¹`_jOr!lŽMµR/–ñ$3·´-&§òczð_Ð?n }7ÑÛ\{çp‹g·û<pµw¡oT»[ûØžjCZ¹2h'"k™Çõuè HdQòOξGÇ+5pN$˜%~ê ö­mÆ Ä‹e<ÉÌ-í¤g¢=È×"× ¾mZ ›m)JW• ¸Âë׎a}‘ ¶‡pyZ›ùù AZ¹2h'"£#‰“I"Jü“3?¦úÞÃŽ®Å<¡ðOgÍsxºñ d>ü'™¹U\\Œñññð‘¾ä«=ÿïNa þ9¬lúF´¬¸Ö´ ]÷‚ï»_Eý€Ì™Aîc{ª iåÊ ˆŒLœ@ŠIöþ¥NÎIÄ Æ®ß„w¡Ógž/‹wº¾ÃløÌÏ}ƒ[6¡r×ë°7»p‡=í†Åò&=ËWýÔâßõvaïþ/1.ÚË 'vìpbÂ7Š^{…f÷½sÿÖ†´r¾Ž³ý££ª8ÞöE­ý=œ >NUŒ"ý}·4 ê³Í k‘…‰ÙŒÅBD©“sëu?|¾ÜÝz“ÌÜby“žå«~Êÿwg0tâ(¶ÅŠ¿ä—èItRäçC_•eÙæ¿m³¶‡°´t%–oãú�ëCm5ê/k7™a¶y1w #¢¸nܸÁášDs!b¹tiq2D±ýå/ay“®å«~ÊÿwgqÓñ2–Wý&xûßÂÒÚ‰³CÞpO«|fß¿ÍS?€¹z<¹² ƒ~?f¯ÁKÅãTýð¹?ÀÆúKÐêÒy¶y1w #¢¸Ä}ìâ@FDé‘sÁ ÝJÄ-Hœ;„ôÌLA|#8Ý~QêíDɘ½=5Uýð{àÜû6œã"<ƒsÇëpNÌàNïA¬Ðð¾÷lóbîFD1]¼x+W® öþQzäœD0h·í¤wæ Êæ0úùqœžPõ—Î_Eë‘>h3 ùÛSóÔ@U:ŽÍÅ?;zy»zn‡ÿJ¾lóbîFD1‰€ý«¯¾ ¯Q:²=ð†0h·í¤wùjäÿ»>x›‚Ÿ»hY²3Ü»*Ÿø|3ËWþ´øwý7X·¼ ‘·O8Ž£ãìw“ÃÊ—m^Ì]ÈhÑ8ñä‘(srN"´[‰¸HZSS^#Òóe ½u*ßý0" ûïV–byÕôiÓèš½=5Oýfà9ý\wr7ñ«m^Ì]È(ŠÏG¼eGÎIƒv+Q‚"½2OPæÇôÈnGõ˜úáiEÅ£[Ñæ¹ÿPM™ÌÞžš§~Œvã£Ó·U“Nãjk+ú¦´ëjÏ6/æ®aD…½ìDÙ“s1‰Á³—1<?œPzzÑ\ûN^×/Ö]hïìǨO¿'”:ñhÍÎÎÎð‘þ˜'(‹uOû †~"ß>ÊžöL˜§~x( |®øìèå T;o©‚yy²Í‹¹k-`/;™Éâƒmn©æ¯¢éÙG`[ú V-+A…ã ®9^BQÁ#XQßéðŸÉ&=—¸Xʶ—ô,_íü—÷´k!_ùÓäßõ|‚ªÊ:´,Ü>q -ïnAÉòj4÷2h'¢üb/;™I>O¤ÿÛs—Pÿdšg€Y7š^z.1DÏwßÀF·Ýå³ ­FLþyãÆð‘þä«=ÿïòžv-˜§~Lÿ÷UõÀwŽŠ§ñbÛ0ƒv"Êö²“ÙäóIþ¿íèó-ì˛DŽóuìpŽÂwç ì+ÞÔì¾÷|–¡Õ°¬IïòUGåÿ»¼§] æ©1îiŸ:ü· Ú= Ú‰(ØËNf“Ï$éÿöüuœØü$lâ„!j±aÉ®nL„ÿL¶|–¡•Œ/šéY¾ÚƒÜü»3r¼„%%5èæ=í1Uýà=íD¤Gìe'3Êöà— éÿ¶Žu«PÕøqÄpNZ;ÎaÈ«Ý#iòY†V"Ú^^4%ŠM“vÈw½Íu°7| ·hC}¸Ú»Ð7:þùÌÞžæ+šü»¼§ˆôˆ½ìdFù<A’ÿo‡fow©A£­|–¡•ðíDñÉo‡fðmÓZØlKQºªÅ\¿v ë‹l°­8„ËÓÚ´²lOµ¡I¹òžv"Òö²“YåóIþ¿íÁçÅ„êLaþj;Žôi58>¿eh%ÊÈ "}›ÃÄéãø|T»Ñ=±Èo‡¦0PÿV6}¾¦p­iºîßw7¾Šú©ÐŸIÆöT¹*×ù¡cX¿¤{ºÿÌ ˆr½ìdVù<A’ÿoÃQVüÜèņ%Õ]×è B~>(>£tÍ?±?âèõ(¶m‚ãÑÌ—qhÑùG»°wÿ—¡¶s‰;œ˜ð¢×^»Ëú#É,ÑžúoãôGÝ ¯æ‚6å:OïQÔÚßÃI÷½@Xw}ŽÎ¾[вög›±‰LŒ½ìdVù<A’ÿo£µªï¶[è•u´Ô¡²d%ªš/`ŒA»¡‰ §l‡I_üðy‡à:y;Ÿ+†­À†Â’ ضq7Z ´Ï`èÄ/PlS_ ,K~‰ž‰ùðßÉ%?ú៾…î£8PþlexÂïç‚å:ÿmžµ=„¥¥+±¬x ×àXÿ l«QY›‹:B¶yá›È¤Ä}”ìe'’OþIÄ$F†ÇUCòf0â¨Ä£/ž€‡A»¡ñí¤/ ¶mJ m6` J·Ô¡õü¼>?ü“÷p/ðß\’ßÍâ¦ãe,¯úÍý‹ biíÄÙ!¯n‡>ëÞ!N6¼Šç–>È_J6mÁƪO ´Ï ÔãÉ•Môû1{í^:xSâB–ûl¬¿­nÉ6/<b™Ô† ‚;É%ÿ$"Æ=íó×ñûÀ¿SPp £ Ú KÌ+Âr&} 'wÝèny[Ë6`gÃI¸†&BÂç|ÈqÌ®ÍþáÁéö‹¸£Î‹†ù3Õ~8þ´½ò4 Å1¨p¶Ôµâ|°ŽÌaòn¸®äˆ&åê÷À¹÷m8ÇEx>çŽ×᜘ÁÞƒXawi–¿lóÂ# ‘ ‰¡˜¢w‡ÈÜÌ2qïi7«‹/rÄé— žþÏqxßf¬Ùôí{Ç 9<^<à û‹»ÑâŽ3¼ÙwëßÖlø¿¹ÚÓYÜuw£¥vÊÊv¢á¤ C^Qn~Ìùæ4­‹å:?t›‹Åèõ1÷Iìê¹þ+ù²Í ØD&$&>ÃÁˆLÉt'ñžv³¿åáÇÃkDz%îqÿgêÞ2è=ísïø,x•ß‡ß óÃílDUé’À¿¥Ýñ¬í©ÚƒþÎÃØWQ†M¯ÕbŸ½ÝðÃãý7X·¼ Êñ6¸GÇÙïàÕðŠD¶yá›ÈdÆÇǃ ƒ–Idfž8‰÷´›•èe½íDºâ»‰Þæ:Ø>…Û;X÷ÀÕÞ…>Ϥq‡ÇO ©¼e}¸+2¬/AiÕ¯qÄ^«ÙHó·§â÷ÔÕœ4|М=þôpÝQÒ›ƒOà ۼðˆMd2⊡èi'2³OœÃüu8Ö?’=§xO»‰'xˆ ©Dú1ƒo›ÖÂf[ŠÒU%(®pàúµcX_dƒmÅ!\ž6n{êŸËñ&¶¬Û€²g”`½N÷¸æ÷웫=·ô¢¹ö-4œ¼¯_¬»ÐÞÙϴϘÃã}7à´¿‚ê–+˜¿mw.þ5­Ãáuù²Í ØD&#N9S1™Kà„ÁÔ'Å;AêÇ¨Ž¯úSb¢í1‘¾La þ9¬lú&ÐòLáZÓ.tÝ ¾ïn|õS¡?ËMÚ!ß|{ƺ­Pqà(º´§gþ*šž}¶¥Ï`Õ²T8®àšã%<‚õýq‚^mH+×ñT>X€+;}UÜ¿ïDcÕJ¢ÌÁ ˆr€y#Ó3ÍÄIòt‚dª“L"J™´ {÷šär‰;œ˜ð¢×^»K»çTÇ¢m;$†tŸCkÝ6”k|¼0U{:w õO–¡ip&ÓºÑôÒ;pM*‹ï 7¾‡Îý*¯\½p7mÂ_—ý—îÎÖ#ƒu K«PämØ3h'¢àcÞÈ:üŸ8)BžNLu’™gÁa¹GPo·Ã^ÿûû={Dº3ƒ¡¿@±M=sv`YòKôL̇ÿ.7rÓi¼ÈM>rŇQç[Øï¼(¹yL8_Çç(|wÎÀ¾âM¸rظI-WqÑßå€}ËFl*´Áz5îÐ<¼§ˆry#S3ãÄI òs‚d®“Ìüñ{ûÑXþX°<mKK±¶l–•bw× î¤C³¸éxË«~1sv`iíÄÙ!o  Ê­œ¶CŸšùë8±ùIØyùº¿Ø°dW7&– Ú”ë,î~{1£â�Žv3h'¢âcÞȼÌ;qRPžN¤çÃ’~ÀPËú@Ý|»N\ Ÿø‰ž÷kh}eÚn1l'½™‡÷}†ßž¸ˆ;q›ÎYü¹ÿŠf“`F2K;dªöÔ?ǺU¨jü8êÂNkÇ9 ‰‹æ9¤m¹ŠC8ßZ‡­å›ñÚ¡ODÚâcÞÈÜL>qR‚¤Á»?hÖóeª“̼™D_íÓ(XÝ‚á¨jÃ-Ûs~0Qr>xZw lçë°‹Û9b.ûQõܺ@Û:ÞF;fi‡ÌÕž†&GmwÝÎùÈ µœ•«oCg~ÃÙã‰H[|Ì™šù&NšÇù6^¬þ=ÜÓó1N'Mw\¨×ð™¸æ:ÉÌ?¦úê°ü© ̆=ߺë¶`Eñ&´ ýzH7A»c3––>²²²Ë:¼â¸­ïp7K;d®öô® xÿöþïÑß/néÒVnË•Ãã‰Hcbº‹/†×ˆÌÆŒ'}ŽÊGQðà/Ð19Ü0¬ßuÃÙXRñ\ú2ƒvÝ›§û=ì®iB¯gðž…}ùrT4õëõ-QÚæpçÜ9\Íí(ç¸ÌÒ™«=Fë–MØy Ö(Œðr`ž{öÐý‹•1S¹f›±‰ ŽÏ&ó3ãÄI~L»›Qþ×ÐxIÌ4® Ö W¢ª¾1prÔΠÝ(|SðNçö‘<~̸:ðŨ™îYÎsµ§Ãp”/CéÚX#0"—pˆ§žhÈLåšm^xÄ&2¸Ã‡sh<™Ÿo§ÛMœ”;òN"æ1íqÁaë6­Å3J°Þè„;øY?æ|sš]”0×If~ù½ß¢§¥vû›¨oî€Ë3¥ÙïF”-ÿØYª¼R^ڇѡ™'æjOÇp®wzŒa¦rÍ6/<bœẋƓ¹ÍÃ{å n$ìÄ4òlÇ¢—ýÎ8Ä ¶/ãÀÑníâ¿s5%ʳËž[‹²µ¥XZ´ 5N>òôHL칮؅ÃÇ"F.G/Æ ÑŸÆ‘'ÖhO'àj;ÑðZ.˜©\³Í ØD&†ÆóÙìd~šíXÌ`{¾u[7`ÓkµØÇáñ:7 wãs°•ìEÇÐdøKxÁõûàŒš¯€HÄc _Äš–ë‹/jøóxÌÒ™«=õaì|#*KŠ‚ùŠZ4œg%3•k¶yá›ÈÀÄÐx±™›g;öÁ;Ôƒ:ίs¢×r5V/ €DÝ~²¶#&ˆÒã‡oü+Ø7¿‹3Cx<Êr׿Åñ< 7Ëbs—Pÿä¬ØÕˆc‘#1KkÏ ¦Ã– f*×lóÂ#6‘‰ èDo;‘¹Yu¶c×?1¡àlÞîÀŸ‚†:`/¯BËåõëè©;”ó§Å6ƒo›ÖÂØÿE½äþžvÒ!ÿ ZÖ¼ˆ–aq›V¤Ü_€4Óq*Û¼ðˆMdPâ>v'kãlÇÙ0ÓÉPþ$ €"—%XçÊéÉ.Q<þ[íØ±çι\pE-W1–ëññ¤C³?S‡Íu§1q1Ò〣þ3ÏP¶yá›È ÄŒñb¨‘p¶cùÌ’|‹�E/ýù<!Ql?à®Ç ×ÉP+æ©?‚×r<éÕüU4=ûHÄq6bÉÃ=ífZ²Á#6‘A‰¡ñãããá5"3ãlÇZ0K>òËé‘oñÍõ#Þ|ëÿ—œ×M¢Tø½ýh,,СdÓ6¼\Z‚çÊ^@EÓ@NïW&½òáVÛ~ìqœY|Ò=H¥|à›È€ÄÐø 6„׈̎³kA» âÉaÿT}rÛƒ¦Ê °wœÇÀðOrIGD{º6ÛJØÏÜ ÔM/\ö]pxnÃuð ´Ýbm¥�ß]xÜçp²±vû›¨oî€Ë£¾8I¹Ä#6‘‰¡ñá5"³ÓßlÇfÀ ]1Kü¦`YÆ_–`EM<¼W˜tAéËP°² ƒÁ*©í÷0PÿRø‰dmsð^þ�åE6>…M¯nFéã?AÙê­hr³~ä ØD$& ã¬ñdúšíXü»f`–|äW h?~M—†".&‰å:vmEcŸ˜=~îŽ:ìïð°—Št`ÞÞ×QüT#ÜÁˆ } Ö¾üŠªdO;!4{|!lËâÌøl ™sÁ¾ÉÏÔ9ÜÑŽ[lÈò‚Gl"ƒÁº¸ŸÈJô4Û1ƒvº/�]¹‚‹žæ6 ÷G‡ÑsG<Ù`ã=û±Üîâ0yÒÿ= |´Õö“p{ï…zÞ‹^€½{„u”BAzáÃXÙôMèB£´Ï^BýÊ7áb%É ±‰ F ‹Ã㉬E?³3h§tÌÛ„gmÅØÂžvÒÿô$&}~ø¼ã¸;½èÊYÖ8z÷=ƒ§¯ X+Dоìy¼\öªhcO{žðˆMd0Û¶mÃW_}^#²=Ív,‚]³,”=Ñ'œÔçëôUxy¢Kº0‡»]Á§o´öc6ð¿»îÓhkû#ÆfÂCVç÷^ÂG{vÂÞvÞ`Ï» E«ßB·‡u$_xÄ&2q¢ÍG½‘µp¶cÒ¯ššN J2 çn<½û3 MÏaöZ3Ö<¸¥•U¨(¯Ãy/{Ü-Ï?ŽÎV8ŸÀ9p>ß-¸>:Œœ9¿îcÐNd |ÔYg;&}úË_þ ©d0“è«ÝަÁ™@pv Îê'ð`ùGòý€á–ílO)`,P/ÖbwÇuLû§p­i,\Ê›Qn?8S>0h'2Ç"kálǤObh¼èi'2ñ4Ží¨qºán{ÅO Úy þékh}eÛSæúP[Þ¼HîïBõ’¿FyË5øü×ÑRþ6'¢ËíD"zÙÝnwxÈB8Û1éç!#º?GÈÃ(Ùs £3ßÁyèMØíGá >ñ€,mþ*š6Úáüî2ÚªÇÚ%;áŸÅôP+^yå$'¢ËíD!†_râ(²¦ˆ‰“œ¸ãûc.?rrâ$Ê¥MCä‰ ÇçÅØ˜—=)†9x/€ò" lÏ`O·3C_âxrK³ w´ç#�"ƒà0L².NœDú#&Ÿc›LfÁNŠ&xc^^ÖÑ î¡DÁŠÉº8qé¸]ILJd Ú‰ô{(‘AãÆá5"+áÄI¤/bnÑ&™ƒvJ„õ#ÿø €¸w’'ˆdeœ8‰ôäW¿úUpŽ"³`PF‰°~ä"C0Å,ÅD–Ɖ“Hølv2#e”ëGþñ 2�ñlvöêåŸh‹9™¨¿¢# rA™ú=²&1ñ±º.ĪœÓ#·´€hù|v²21Yœ4$Zxa‹raåÊ•lÉÐD[« \D›KÖ¤<Î2Ñ"nÙäã.s‹A;‘ˆ’#YY²“ž@P.ˆž%´™h+E›«-UÞþamÉ.”ó"yî1h'Ò9ѣÓD¢Ä'< \£žøèM2ƒD½íìe§DÊy‘<?´éœ8Aä”(þIO (Dýc]#³HÔÛÎ^vâ](çEòü`ÐN¤s¢ÑdÏQH¬“ž@P.ˆ Ay•Ì$Vo;ë8)b](ç…ËüaÐN¤sœôˆè>õIO (WD]»qãFxÈøbõ¶³—"©/”ó"yþ0h'Ò1q@$ÝyÁÊñ¤ 6„׈Ì#²·½ì¤y¡œÉó‹Ñ�‘މ™ŠÅÄGDtŸrÁÊ1âIîDfÙÛÎ^vŠE¹P΋äùÅ HÇD)î£$¢hâ$‚'” "Xç<ÈÌD[Ê^vŠG\ÌáEòücÐN¤c¢—½;Ö¥ Iã’Ÿ…H`/»9ÄÚǹän!mÅ*s£-”KˆHÇ8 µý fäïÏD°Î[”Ìíiþ°=Õë·ù±„ˆtŒ˜µ‰ßÿÂ… á5_+둯…lÓ⽯~-¤šfäúË}^85£ïÓlO)Öoóc é”8Qä}”ÖÆƒpþð‚ØËn.lOó‡í©öX¿Í%D¤S<a$å «7[!+M‘Î6ÉÒx’IF¥Ì¨Í^vó`P“?lOµÇúm~,!"³¹rvlkSb±b…¬4E:Û$KãI&•h{yÑÔ\ÔäÛSí±~›KˆH§8s<ñ œ?<°.ö²›ÛÓüa{ª=Öoóc é'@"„ó‡'ÖÅ^vsb{š?lOµÇúm~,!"bF¢Ä‚ùZÈ6-Þûê×BªiF®ÃÜÿ¬‰½ìæeô}ší)%Âúm~,!"âÌñ$ˆƒX¼€8òµmZ¼÷Õ¯…TÓx’IFó«_ý 555á525ùÃöT{¬ßæÇ"Ò!ÎOÂùÃëKE/ûøøxø2¶§ùÃöT{¬ßæÇ"Ò!ÎO‚r‹Õ›­•¦Hg›di<É$#Ù°aÛ]cP“?lOµÇúm~,!"âÌñ$(±X±BVš"m’¥ñ$“Œ¢³³3´“y1¨É¶§Úcý6?–‘‰ !ÂùÃëÃá9ùœù±=Ͷ§Úcý6?–‘‰ž@ÂùÃëω èÈÜØžæÛSí±~›KˆH‡Øx‘ êA¼!葯…lÓ⽯~-¤šfäzÌ}ДÉçÄ£ÞÈÜŒ¾O³=¥DX¿Í%D¤Cl¼Hõ ^@ùZÈ6-Þûê×BªiF®ÇÜ­A<Z“ó‡XƒÑ÷i¶§”ë·ù±„ˆtFôø°ñ"áüá>h~b¦x>ZÓ:ØžæÛSí±~›KˆHgÄpMžH’ Äbõf+2MûòË/ÑÚÚ^»/Ñ6é¦iy“‡Ý¸q#¼&O ÌMÔñkY‡H_´Þ§/^¼~¥ ¶§”ˆÖe¬õˆ$Ö‘äXBD:àÊA,V@¬È$Mô0þèG?‚Ýn®GŠ·nš–aq‚,>_« ž@˜›˜ìóðáÃá5²-÷iðŠ[-´¤å÷í¨˜Q+lOµ§uýóÍ€%D¤3"aÐN‚샘¸ $N,EýÊE£Öa‘1‰˜3ó¼ÄE+>“Ýz´Ü§sqÜÖòû+=Ô ÛSíi]ÆFÿ|3` éŒ8¡ ‘¬ƒ˜8!½(â¤,—“nåâ ,怘XdÎ�ÎszÄo›‹‹V¤/ZîÓ¹8nkÝ&‰ ºZílOµ§e‹zaä‘$fÁ"Òí¤±xCÐ#_ ñÒD]CáÿÇÿøÁ 62MPÖ㽯~-¤š–˃°èm%dtòÂ|Dý'žáwÈJ´Ü§ÅEQ£ßó+ÚP­ö ¶§ÚÓ²ŒsqÛ&ëHr,!"÷Y2h'AÄâÄ‘¯uš˜dN(¢ú³Ï>‹JS^ Êz¼÷Õ¯…TÓr}'Íâß”qòÌóm+o=².-÷iÑΊÀFKZ·I"`×ê¾v¶§ÚÓ²Œ´ëKˆHgDèõÁŸŒ!“ƒXäPø|÷(æã ,zÚeÜçÎs÷‹z!ó 2-÷é\´ZÿZf{ª=-˘A»>°„ˆt†A;)”ƒX¬ÞlEdš2^¬ñ†Â+ÔiŠt¶I––¯ƒ°È{¶÷¹óÂ<D»Öä"}ÓjŸÎÅý¾B.Ú$±Ÿˆ ¿²±=Õž–eÌ ]XBD:àÊA,V@¬¯#‡ÂG>{=Ùv‘ëŠt¶I––ïƒp6÷¹óÂ<ÄÈ“lG^ñiµOçê‰/¹h“´º7Ÿí©ö´,cíúÀ"Òí¤HvÓÓPøXôpÎô>wž@˜ƒØ/Ä-‹'­öé\M›‹6Iì/Z\àb{ª=-˘A»>°„ˆt&Ú1$:ˆ‰“D¬+CáõH/áLîsç „ñ)¿;ÛS´Ú§Å…Ó\\4ÍE›$ö-†ú³=Õž–eÌ ]XBD:Æ‹¢.¨‡œ+CáŸ}öÙ¸Cá#_ ©¤Å{_ýZH5MOu9Ýûܹ›ò{óI¤ÐjŸÎÕ…ö\µIâß‘}!˜í©ö´,ã\ÜÂ:’KˆHgØp‘"².è}(|,z¬Ë©ÞçÎýÐØÄ¾""…Vû´øÜ\ŒvÊU›$‚3Ù“6²=Õž–eœ‹[@XG’c é .R(uÁn·/š^«§[‘Nš"m’¥éµ.§rŸ;÷Cã'—©Ž¨ ëÐbŸSÅEÀ\ÈU›$öŸÃ‡‡×ä`{ª=-˘A»>°„ˆt† )D]ˆ7^+XV¤“¦Hg›diz®ËÉîsç~hLÊóØ3yb�™›ût.îõUäªMy½db{ª=-˘A»>°„ˆt† )CáE]0ÊPøXô^—•ûžcõÊr?4åB ŸÇN±h±OkÑ+O.Û$ñoÉ©ÂöT{Z–1ƒv}` é .kAºÒlôº`”ïë>wî‡Æ¢\€ÑúÄ’ŒK‹}Z´¹º°šË6IìK2/~±=Õž–eÌ ]XBD:Æ˚”!‰bQf"u!ÞôÈ×B¶iñÞW¿RM3R]VßçÎýÐX8ñ%£Å>-†Æçbæx!—m’= 3Hc{ª=-˘A»>°„ˆtDôôiñŒTÒ/ÑC¨ôôª{lÄA,^@ùZÈ6-Þûê×BªiF;GÞçÎã'“±nq ФÅ>->3Wõ.—m’ìG|±=Õž–eÌ ]XBD:’ËIm(ÿ"‡ÂÇ:ñ3úÄß_f-¾;ƒ@ýãÄs”*ÙíQ.gŽrÙžŠ¶Oæ¿gÄcÑhYÆ Úõ%D¤# Ú­!ÖPøXÄAŒKþƒú¦ŒŒàÄs”ŠXû8—Ü-¤­Xen´…c éˆÌ‘9‰Þ‹xCáIÄo$N$=ÏòC ØùÛP¾ˆžÇ\ÍŸâX¥uï*C.çn ø´é ¯6šS²¡ð¤OâDEùÝH”[ø›P>‰úg拯â‚Gþ‘À ]é ƒvsQFO$ Oú%î]U~C^pÉ/ì¤fdr}Ï>éƒv}`t@¤3 ÚÍCáÍ%ò÷ä}îù#v>Úô@«E`kfâi6lïˆA»>0: ÒíÆÇ¡ðæ¥ü¶¼—:÷ÄþÄѤ"X·Â±Zìs¼èL ÚõÑ‘Î0h7.qPS†Qó�g^â·»™'¡Òì¤'¢ ŒÙ‰€#[ˆA»>0: ÒíÆÃ¡ðÖ£Üç.NfHjKÝÀr&½³ª‹6ßì”§4µ1h×FD:àÝX”€BœÀ1¨°åb ïûÔŽ¸ Aì_,_Ò1ÊÆ*CûŸÙïݧÄ8zPé Æ `â@&6̬M¹pÃûÜåbÀNze¥žG1<žm›µ±3Iø+é ‡!é[äPx«ô´PrbŸu‚÷¹ËÁ€ôLÔM«\\%­p+�ÅÇ ]ø+é ƒvýRzTEÏGCïs—ƒ;陨·­Ĉó1¢Œ¬‹A»>ðW Òíú#~…§Tð>÷ì0`'½Ç�qœ¶´ñBµu1h×þ D:à]?8ž2ÅûÜÓÇ€ŒÀŠÃÅÅyÉÅ‹Ãkd5 Úõ¿‘ÎpÒ}àPxÊ–¸ø&êïsOŽ;…•fŽWˆü²³.íúÀ_HgÄÁ‘½ºùáð$Sª÷¹[ùxì¤gbßÇdÑÓ,ê¨GÃ)ÇEÑž‰ýUðbÇHó‰u,bЮüˆt†A»6Ä(QPÀ¡ð¤¥nÅ»Ï]¤YutØ×°“ž‰àT-‘ËßýÝß÷[QEàjÖÑXJ.òª.±ùˆß;Öo­^xÁ&÷¸Çé ¯¢ 1Ì=Þ ¸ O¹ë>wñž8ŠW7ÍL´s ØIï”}4Ñ"þÆLĨÑ&ÅÊ«²ˆd>â"³h—cýæÊÂß>?´錸zÉQ.Q¦ÊÁ&òäJ¼Ï¡ð”K¢ž‰"1¼TœGžY¥·=ÙÈ"=r#÷SõbÖ㵸ˆ+¿ÊÂ{ÜÍKŒ ‰õ›+ Ï—òƒA;‘ΈÆA»<"@ˆì1“8 Szù8žrMÔ¿5kÖà_ÿëu"d…Þv‘÷Tîñ'Ò“x½ÎâbÖz,òëÖ�eálòæ%~ûx½íâbåƒv"=OV8yÏÑ >èüÛûo9žòFœý·ÿößÕK±˜¹·]´mâD·ÿÑÄ:ŽˆÅì=މ‚7³^¬ x½í<oÊíD:$FÊž8¡Rp”…û(_õ^™õ‚2¹‘Un s‰u,±Êðpåb[dÞEFæë‚ /¸æ#"#eGpâ i oA |'=±êcäb¶ JÊ­(¼Œ,2€±ZЪ\tSÞÏn ê&ìeÏ/FD:$NØ8f'ÙD*ba¯å’اÅmêÞ õb– Jâ™ȋpØž‘Ñ)ܬz|ŽœEŸ÷³[ƒ¨çÊoÎùòA;‘‰]ßΜèÑS4‰qòÅûò(ÄÉ8ñ=bW×M£ïÿÊÜ"Ðá>Ff <íÁÊ«rá‚á¬C)Åv<ÿ´“iEž�sá’Ë…("P½Yʉ1.ùZŒ(V>Œºd*Ögu¡äb•›‘JŒ%D¦Å€òõŽd`=¢|1jÝ3Ë>“M>XÖb¦râožKˆL+²¸páBpQ¨_§š¦Hg-Òél“iš"m´HS¤³M¦iŠt¶Q^óÀC2°Q¾µî™eŸÉ&,k1S9ñ7OŽ%D¦Ù�Ä °„tÒél£Eš"m2MS¤³iŠt¶É4M‘Î6ÊkxHÖ#Ê£Ö=³ì3Ùäƒe`-f*'þæÉ±„È´Ø�P>°Þ‘ ¬G”/F­{fÙg²ÉËÀZÌTNüÍ“c ‘i± |`½#X(_ŒZ÷̲Ïd“–µ˜©œø›'Ç"Ó @¬!ÌÊz&iñÞW¿´L‹÷¾úµmZ¼÷Õ¯-Ó⽯~-d›ï}õkAÆÉÀzDùbÔºg–}&›|° ¬ÅLåÄß<9–™–h�’Xé¦Å{_ýZÐ2-Þûê×B¶iñÞW¿´L‹÷¾úµmZ¼÷Õ¯u<$ëå‹QëžYö™lòÁ2°3•óäXBdZl�(XïHÖ#Ê£Ö=³ì3Ùäƒe`-f*'þæÉ±„È´"€X½£ŠtÒél£Eš"m2MS¤³iŠt¶É4M‘Î6ÊkxHÖ#Ê£Ö=³ì3Ùäƒe`-f*'þæÉ±„È´"€x–Nš"m´HS¤³M¦iŠt¶Ñ"M‘Î6™¦)ÒÙFyÍÉÀzDùbÔºg–}&›|° ¬ÅLåÄß<9–™€þ öüõv;ìõGÐáÁ´?œFR±Þ‘ ¬G”/F­{fÙg²ÉËÀZÌTNüÍ“c ‘i±óáLM)l6.[…²²çQºô1¬¨é‚ÇÇÈ]6Ö;’õˆòŨuÏ,ûL6ù`X‹™Ê‰¿yr,!2-Ñ�Ĭ¬g’ï}õkAË´xï«_ ç[wãÿzàÿÆîŽë8£¤ùnãbýV¬oø"îvÊz¼÷Õ¯-Ó⽯~-d›ï}õkAÆÉÀzDùbÔº——ïí‡çöLxEŽlò‘Ÿßn·=ãð…×d`û—3•óäXBdZ¢H`¥›ï}õkAË´xï«_ ç?Þÿó©×1ìW¥yXUÙŒsb}ÎüoävÊßFm¹žË´xï«_ Ù¦Å{_ýZP§ñÀC2°Q¾µîIÿÞwúÑ{u:¼‹³Øî¯Ë‘M>äÿvc8×;ˆ¹ðZL³—P¿ý8<áUØþ¥ÆLåÄß<9–™€°é4mþ%Çã -×ð…ýElné ®ô¼‡7{n‡7 l°Þ‘ ¬G”/F­{Ò¿·çTWÂ1‡Ž˜K3ìe?F™©ƒöa´VïÂûÇbå_,ÇpÔ^Ž¢2ƒö<È[9él„‰U°„È´"€X½£ŠtÒél£Eš"•mæ¿m³¶‚`y$Z\çÀMuo|õûê×Z§)ÒÙ&Ó4E:Û(¯EYe‹õˆòŨuOú÷Ž´ÿïW= [àß+(Ú„&·7¼ÙäCþo?h?ö~J‚硼i�‰Æ$¤‹í_j4)'Ž0± –™Vd/ÀÒIS¤³iŠ”¶ñ mÇë°ÿ®.—+¸477—ÈuWÿ0¼Yí_;?ÇíðÄvê´DÛ¥š¦Hg›LÓél£¼æ‡d`=Ê5ù÷å•Qëžôï3x™§û-¬.z…+Þ€Ó#··QÈ&ò»XÃãýðyNÁ¾úQ®Bó†ôý†í_j4)'Ž0± –™€0ï5ôý¯[˜Œš(~Ѩ÷â™Ãsçp5áMm“¨OyYïHÖ#™òs_®Qµîiþ½ý÷0в Ël¡¸¢—½ kTƲɇö¿Ý¼-زìaØŠ_FÓå{^>¶©Ñ¤œ 8ÂÄ*XBdZl�Â<DZ¥lˆg´/,ûQõÜ:ÔLNDnà³­ËñøÖvxb}}ð´îEÕû¿W5àËÑ(+ª`ÐÀzG2°É”ŸûrʨuOÓïí»gÍ*<ŠÕöSš>.5›|hûÛÍÀã|+ DÑê·Ð­Á(Û¿ÔhRNab,!2-Ñ�Ĭ¬g’ï}õkAË´xï«_ :íøÛÿ$Ö–•¡´´4¸”^—•­ÃZû'8ïú,´ÿ‡êÐéŠõoCçÁ‚v%ð½þGü¬ø ”µ EåÍøÃ׿½è{D¬g’ï}õk!Û´xï«_ ê4xHÖ#™òs_®Qµîiõ½ýÞ~4–?†ÛÓ¨v\ ÞF¶À?…»÷~¯È‘M>4ûíü÷p¹q#Š FIµî¨Qs˜¼;ÁG¾åANÊÉ�#L¬‚%D¦%€dVºiñÞW¿´L‹÷¾úµpáT >h=z­N‹X—váÂyœúÝï†Ç/üoïmyUðVÔt{Ò"ÿ.,Û´xï«_ Ù¦Å{_ýZP§ñÀC2°É”ŸûrʨuOþ÷žÇôÐgØ]ò0 Š6 áü÷‹êˆÿ^?1óìñ<N_GÇîg`¶ÎbT=ÊÀ? gc'gÏÍËÉ #L¬‚%D¦Å lô4ZÏÞQÝw6«­­è›Ê¬ö{/¡eËrØlO¢¢©?ºçÁâXïHÖ#-åæ¾\£2jÝ“ý½ýžx±ÈüÜøK¡¹ùæFÛ‹K#ògá#ßòBËr2Ò«` ‘iE6�±zGé¤)ÒÙF‹4EJÛx(ÕEË£¨vÞ ž¬ÆÜNEyßçéBÍŠ%(ø«g`ï ö<¨·Q¿–‘¦Hg›LÓél£¼Ž¬wD™b=ÒJîîË5*£Ö½||o+ô´'Åžö¼Ñ¦œŒ7ÂÄ*XBdZ‘ @¼�KH'M‘Î6Z¤)RÚÆÓ†Ý»îC‹}%~úÓ-híM#h?Ó¿ÿ%Ê‹l°•¼ ûºz§‚Û|Õ{á¡S‰>/Ó4E:Ûdš¦Hgå5<$ë‘r|_®Qµîi÷½gq×}ŽÆºàq´¶Ñ/û=˜‡;«ÜÓ8ÚûîºÑãhD­˜×¦¶Ž/ûᙞ¤ñžö|Ñ¢œŒ8ÂÄ*XBdZl�¦F0øýlxE1‰†jÔöM„דðOb¨c/Jlb¹ßàü¨ºwj÷œâÎÏzGR°É•ûrʨuO“ïíA·ý>[|þý%Ö…9²É‡&e°0søâ@N\Àw¸åß^¢M>Ì'_åÄžöü` ‘i±ót Á1�Çs¾„¶]ËQhw¥pu|ž¶­1NZÔË&>ò-@”Q¶X$ÊÓ}¹F%ʈäo/.ׯ†ÍöÊ^{ç¸\.¸z»àx/ÊŠÆ’­Ÿá–äˆ5›|È/?¦/ 1sxÙ^¼ïèB¯(×8ïáµ²'`[RŽ[rýF­ƒ¹¦m9g„‰U°„È´Dk³²žIZ¼÷Õ¯-Ó⽯~-ˆG¾•ÊB”GÔb[Êߊ¿]x=ÞûѯC=íovž‹‘¹žIZ¼÷Õ¯…lÓ⽯~-¨ÓDÙe‹õ(ÇØÓ¾À¨uOú÷žp¢ê¡ìrzb^ÜöO_Cë–2Ø]÷ÂïÈ‘M>äÿvcpV=Žâ]]‹G§b^kž¶ŸÃTø-Øþ¥F³r2Ø«` ‘i±ó|ŠÚÆS¡e9s{ö´ãfºïðÃÝÓŠÆZñ¬ö:4:N¡ß3矼·pO»•±Þ‘ ¬G ¼cº…»Á{h…yL{®Ú³+áûjS‘ÛûrʨuOö÷žë«ÅÒ5-Š{Xóㇾw°ºþR öÈ“M>¤ÿvs}¨]º-C zU¸ˆÚÕ‡0 ±Øþ¥F›r2Þ«` ‘iE6�±zGé¤)ÒÙF‹4EJÛ„ïiN;‹{ŠŠ¶‘`Às»(~|ÝùlyêßË5j±=r»§UŸ¡P^¦iŠt¶É4M‘Î6ÊëÈzG”)Ö£0ÿ=ôÕ­‚­x=4u¢/8ŸÆ <]¯¡Äjƒl%¯¡+é,ð¹¿/רD™‘ìïísÙ±4Ù-d6¥t›Yê²É‡ôßÎç‚}©®„†cSm’¿IQë`®iRNab,!2­È ^€%¤“¦Hg-Ò)mîionn^èioþ]vÿô?à±Ú¾`AÌí"M÷cÇÿw<ð£¿Åkï;àì=ø¼ß¡×éÀû¯•ãGü¼ðNÇÂIo¢ÏË4M‘Î6™¦)ÒÙFyÍÉÀz¤GÏî—ÑèVßú1ënÄJ°o‡ãòu|{æ<¿¹-AÏO~îË5*£Ö=éß{¼¯lw"þt­~LõÚ±¶é©|²É‡üßî{t¼RçD‚Ñ,Sg°om3%Û¿ÔhQNFab,!2-6�aqžÓn[¶'S¹ mÎx¨ø—pŽÆ"'žéÙŠ-O¿ ×”ÌScb½#XÂÄðÜòˆ€À?Ǻ%òyÕÎ[¡`É-åo'èéËÏ}¹FeÔº'ÿ{O ¯îu|44^8î šÒµhtÇJÏ\6ù_~Lõ½‡]‹Óëúœ5ÏáéÆ+‘‡í_j´('#Ž0± –™€0ϧ¨ké¿?s|p¹ oÊ÷ŸO¢¯ö'XÓ2˜ 7Áø›­¨à)/ëÉÀz&†ç–·`8cÊuÊæÁuÜT$qOmÙoáŽ5äé¾\£2jÝÓä{ûnàËCèŠ Ü§1ÔU‡-ë*±ëÀÛhvÝNplL_6ùÐæ·›çËßâ®ïpÿá±~Ì}ƒ[6¡r×ë°7»pGb!°ýK&ådÀ&VÁ"Ó @¬!ÌÊz&iñÞW¿´L‹÷¾úµpáÂ9œ;÷<®vìù‡-¨Ü²Íÿœ|)ñv¡õ N£¹²v—7êýè×>x»PÙ|:FZHäz&iñÞW¿²M‹÷¾úµ Nã‡d`=RÜFÏîͰw»1tù8v•<ŒÛ³¨í Rú§GÐÛPŸ$êéËÓ}¹FeÔº'å{ûnãú ot0⟃oNfx’X6ùóÛÍ`ìúMx£ >_î®h±ýK6åd¼&VÁ"Ó @²�+Ý´xï«_ Z¦Å{_ýZ¸p¡¿ßóßQT`ÿ)þïX¿z8‚?œq%ØNùwÎãÔ;/b»s,êýè×wÑ»ïØ{âlŒ´ÈõLÒ⽯~-d›ï}õkAÆÉÀz¤ žÏ±[ë2)(x åý€ÂÙáü6ø$ ;j?êÃݸqU~îË5*£Ö=)ß[ƒa¿éÊ&r~»ü_À2jÌ5i夾Xe°&VÁ"ÓbâjÁÛÃXnÿ ã¾À °«›C˜r½‹áÙ㓚º€ºÇ0ç~Ðaç(}º1þðT a½#X¢ù§Gqµï"†3y,[~îË5*£Ö=)ß›A{�ƒv£VN±ê½F˜XKˆL+²ˆÕ;ªH'M‘Î6Z¤)RÙFL*RXðB°\Aû*{;¾þøU¬ 7Ò±¶‹zäÛ?V7`h6Ôˆÿfö;t|+ÖlDå–ýpÝ ŸKôy™¦)ÒÙ&Ó4E:Û(¯yà!Xtu $™¥xýg0^‹-÷÷å•Qëž”ïÍ =€A»QH+'ƒ×{«` ‘iE6�ñ,!4E:Ûh‘¦Hiïì+^ƒÝ­½Á÷}®ƒXú_ŠÒýû„Ïi÷ á†÷þ©rðýsçNžcm£Ð"M‘Î6™¦)ÒÙFyÍÉÀz¤e¨:s9° ÏU´ÂûHù¿/רŒZ÷¤|oí ÚBZ91h7–™�żcOõÛhsß ÷¼?ŠÕöSðÄA>4±œ2ù¥ŽõŽd`=Rˆ²Â`y$\ʪ =ÿ‡Q‰ò4")ß›A{�ƒv£VN Ú %D¦Å lô4ZÏÞß?ïd Iöyqûî]¸[[Ñ÷¹ê Ú3ÅzG2°)Ćýè™L0n}²»60h—ŨuOÊ÷fÐÀ Ý(¤•ƒvC` ‘i‰ Öfe=“´xï«_ Z¦Å{_ýZ¸ÐiGi ,DyD/O ¼á‹8ÛùÐi߸ð·¨Ï‹XÏeZ¼÷Õ¯…lÓ⽯~-¨ÓDÙe‹õH‘B�!鶉A»,F­{R¾7ƒö�íF!­œ´KˆLK4�ɬtÓ⽯~-h™ï}õkáBg-þþï÷Âáp,Üê8z�å+·cßÑ.¸bnÇ =Öûêׂ:’õHñ=:¶lƒÃÿtÒ8á\¿¥ãáõí™2jÝ“ò½§¯ãlÿhp®— ÿ{~zqì¬?‚צ ú!›|Èùí&1xö2Æò9ïài´Ô¿8¨GsÇ¿À3­ísØþ¥FZ91h7–™€°© ~¾äI 4lƒýüðº‡ÇgŠõŽd`=RLÃݸ+ê\ªIåÂüwÑW·?®¿¤šažA{¦ŒZ÷¤oÿÎÔ”ÂV`Cá²U(+{¥KÊš®óÁd/›|ÈÿíæpçÌ”Ø PP¸ Ï••ami1ŠV¼§g&ü7ò±ýK´rR_¬ÊþæÉ±„È´"€X½£ŠtÒél£Eš"¥m<hp  ³³'¸t~ú1Þùû'Q¾²ºx»s‹‚ö…Ï [¼¶iŠt¶É4M‘Î6ÊkxHÖ£ûæ‡ZðüƒbuÍ1œõtú§qgðk8jžG‘íy4º§B¼€A{¦ŒZ÷dïyw#ž²=ƒÝ×ï÷®ûnãbýVìpÞÒ,ÀÉ&Ò»ù+h|ª%»?ÃÐBïú,î\ü Öïè¸F…Àö/5Ú”Ó <½GQk'Ý÷õ<°îú}·4í‰çožKˆL+²ˆ` é¤)ÒÙF‹4EJÛx( ”…(¨åß<ú¾‰…¿U„¶cÐ.¤³ò:²ÞeŠõ(RऱëµPo_d\CycŒ^xí™2jÝ“ý½çêñäê «ëVäPâ9dwºg“é¿ÝÜ%Ô?¹-ÃêÑz‘û×|’ Á¨u0×´(§ùo›ð¬í!,-]‰eÅ[à¸>�ÇúÇP`[úËÚ¾äožKˆL‹ @˜§öúÏqÞå‚kaéÇÕ±é=~Lþ úÇñÎaâôq|>ÊçGb½#XÔf0ÚwuU«±Tï¶¥Xñò~4Šs±ú¾Üü·qú£nŒ†W)ĨuOú÷ž@Óæ_Âñ§‘…QjžáKøÂþ"6·ô×GzÞÛ=·ÃÈ‘M>äÿv^¸›¶c»ãÒý2ð aà‹7Q¾ù(.‹õ‘nÔ½y¡.�9Øþ¥F‹r ^¬ZÙ„A¿³×Žà¥ƒç08'ô¹?ÀÆE·!ÉÃß<9–™€0ßîNJlfýÓø#ŽXbÛ¦„DYëÉÀz¤ðÁ;öçp°p w†èÎcÚs.ו´'ÅòOßÂ@÷Q(¶EÏw'£Ö=Ùß;Ôã¨Ù±xyp7%v4‹ÏÌT6ÛÆ4MÏ>•ߘ˃/ÂqSÝŸ9ñ™”œ&åä÷À¹÷m8ÇÅyãœ;^‡sbwzb…†“Õñ7OŽ%D¦%€XC˜•õLÒ⽯~-h™ï}õkáÂ?ƯŌñ­gñé×.œûc+zÚÚñåÀ(¾N´]x]Y|Þ!¸N†ÿü#<Pð� K6 ì¿ÿ;Ï…·Hò=²L‹÷¾úµmZ¼÷Õ¯u<$ëQ˜ÿúêVÁV¼š:Ñ7*&¿Š.o+y ]I'Å ÿC.œlxÏ-}(°]J6mÁƪO´«µîIÿÞþ´ǹÈQj1–þáØ“$f(›|Èÿí|¸Õ¶{gbç}a¹„a¯¼Î£ÖÁ\Ó¢œæ‡Žcs±h#Uf žÄ.É£J"i‘³a ‘i‰ Y€•nZ¼÷Õ¯-Ó⽯~-\èi@ù/¢ch¾þöþ—GPXúvV¼ˆ-¿;»ðú… gÑþöz”ÚeºO>¿ ×¯Ï _u£ûë¿G–iñÞW¿²M‹÷¾úµ Nã‡d`=RŒ£g÷ËÍù1ënÄJ°o‡ãòu|{æ<¿¹ ·âNó×ÑöÊÓ('ž…+°¥®ç‡&áÈ&ïŠÿR$£Ö=éßÛ{ }ÿë&£êÕ,þÜ£ƒtµlò!ÿ·»‡+}W0®­çÿó�úGµÛsØþ¥F‹ròßt`Ýò*4:ÁG‡–ãè8ý'Œéô© VÁ"Ób2×÷k”7}8Õøs'–<¸ -CÓð· <¥¡N~øîºÑÝò6¶–mÀΆ“pOx4˜„ÇèXïHÖ£°¹>Ô–7cPigüCp¬[(Ÿ'P­Ìàí¿Ž–ò·L:7‹»în´ÔnCYÙN4œtaÈ+þ8Ð*úæBŸA ŒZ÷¤oÏql)Ûâí Ë~T=·õ“êsŸm]ŽÇ·¶Ã#±e“ù¿Ý0Z·lÂΑe`Ǫçñlý¥Àž5 ÏgÛñøãÛñ™‡ÃãsM›ršçôp݉¾PãsÕ¡¢åšf9ù›'Ç"ÓŠl�bõŽ*ÒIS¤³iŠT¶™ÿö6Ö|“xÕÅaIuN¹¾BûÁŸã•¶‘à k¬íÔBïÿ3<ýŸãð¾Íø/«^Ä¡}oã¸Ç·hõkiŠt¶É4M‘Î6ÊkxHÖ£0Ÿ öreo?¦\ñx l¢î#þá"jË~ w ·¶û§=èï<Œ}eØôZ-öÙW8BŒZ÷¤oåKK±¶¬ eQË:¼â¸†y‹íŽòe(]«.ƒÀòŠƒó ÚóI“r𾂣OÂølñùQ‹íiT·œO{‘Th’“a ‘iE6�ñ,!4E:Ûh‘¦Hiÿ=\n܈¿ ”‡­¤Ý£ho؃-•ÿ€f×í4ƒvå}?Î>‰3uo¡•A{òš’õHq=»7ÃÞíÆÐåãØUòpàÄñYÔ†WéŸAoC~ÒxéFŠ{Ü{PWs’A»ŠQëžôï}§½W§Ã+¹“M>äÿvc8×;¨ÙŒáñ°ýKå4×W‹ÇŠ+Q,rx¼Û×㩪ß^·¢s`\ú%þæÉ±„È´Ø�„y¯aàÆ$¼c·ƒ÷¡‡¤y_žï&z›ë`oøn1ÙŒÏW{ú<“¯ÂzG2°)üææsìÁz Lî?—ÝÙáü¶64\·ö£>ÜÛ‰ÏèEsí[h8y%¸­ÏãB{g<Ó>é'ŸFgÔº'ý{žFëÙ;ªú1«­­è›Ò®Öd“ù¿_´ºT÷õ‹IåÛq$|áL F­ƒ¹¦I9ùn ë`=¾TÍY0çz?ÿÃHxM>þæÉ±„È´Ø�„e}_Þ ¾mZ ›m)JW• ¸Âë׎a}‘ ¶‡p9öC’-‹õŽd`=ŠæŸÅÕ¾‹Î`â¸ðc«lKŸÁªe%¨p\Á5ÇK(*x+êûaE2jÝ“þ½=”>S|nô1Ÿ‚²ÉG6ÛÆ6 GYaDޕżÕn\£BŸsÒ¬œüsðÍEÿ¸¼§=ÿXBdZ¢ˆ5„YYÏ$-Þûêׂ–iñÞW¿.tÚñ·ÿþÉà}y¥¥¥ÁE¹/o­ýœw} Úÿà uètÅú·þïøÏXœÌn Ÿì݈­ÍÝ¿˜BëîõØññ?‡6ˆü·#_ Ù¦Å{_ýZÈ6-Þûêׂ:’õH¢¹K¨² Mƒ3À¬M/½—è)õ]AãÆ÷0뱿:gÔº'ý{{Ú°{W#ŽE vµ£¢ÂŽÖ¾QËí­»÷ápÔPéfØ+*aoíÃö¼Ò¤œxO»n±„È´Ø�„I¸/Ï?Ú…½û¿ ]UŸpbÇ'&|£èµWÀîò†þˆ‚XïHÖ#™|u¾…ýÁÞÑù@ö:v8Gá»söo&˜uÞšŒZ÷¤ï© ~¯ž\m Õ s*h!›|Èÿí¼¸>8¦º@áÇìÀûØP{ʃecû—-ʉ÷´ëKˆL+²ˆÕ;ªH'M‘Î6Z¤)Rßfl}-õoÂ^ûÞþàüñ\*Û 3:ñ üèW]—ü=ó‹¶Iôy™¦)ÒÙ&Ó4E:Û(¯#ëQ¦X$š¿Ž›cõÙ°dW7´ ¿ŒÉ¨uOú÷öt Á1�Çs¾„¶]ËQ˜ÒãR3“M>äÿvÃø¤¡ ßD–gjÛÇ íš]ð2jÌ5MÊ)Þ=í}‡°­ífxM>þæÉ±„È´"€x–Nš"m´HS¤¶Á Û||ÍZüç¥ÿŠþ.<áYäbo§˜ÅMÇËø›Ÿí Þ¯\uµü5ÎyƒW[ÕÛ$ú¼LÓél“iš"m”×<ð ¬GŸí¾ U/´_bií8‡!1±&E1jÝ“þ½ãÝÓn[ûù;á?’/›|d³mlñîi%ö³³ mÈχ9iRN£Ýø¨ç{Õ=íúž€Ñ*XBdZl�Bü·ÚPñøKh<;‚…9ãü“jݽðœö¤|#8Ý~w´k¯MƒõŽd`=’)4{|{ø—”˜Qëžôïíùµ§àr¹î/gŽbÏžvÜÔð±)ÙäCþo7ŒãµMø*² \=hÙs�m7gÂ#Û¿ÔhRNœ€Ñ*XBdZl�B|®·°&8‰\4ÿp ÊSâ7‡ÑÏãô„ªGjþ*ZôivO›Q±Þ‘ ¬G2yðùGg1¡jµ~l•QµîIÿÞ1ïiŸÁ`S*R½àlò!ÿ·‹uO{àüa° ?©hÃ- í_j4)'Ï'¨ª¬C˨¤chyw J–W£Y§0ZKˆLK4�±†0+뙤Å{_ýZÐ2-Þûêׂ«ý ¬~é·ÁÖ…4ß÷8W·ϼ~®8Û)ë.œC§}U°<-l@ésá-lÓ⽯~-d›ï}õkA&Ê…([¬G2åç±UFeÔº'ý{Çêi?ß…ÆŠÇñXm´º±"›|Èÿíbõ´?6nÆ’ÇjѧQ!µæš&å4ýg ßVuçø®ÃQñ4^lfОG,!2-Ñ�$ °ÒM‹÷¾úµ eZ¼÷Õ¯… Nã{ŸÇвmøûÊJTnüÿbÅÒ‡`[þ~×s>ÁvÊ¿Úþ•ï~¼êª<çýÝÊRüÍÏjpÔùux‹dß#»´xï«_ Ù¦Å{_ýZP§ñÀC2°É4ŒÖªj¼Ûrlá~vGK*KV¢ªù‚f­2*£Ö=éß;Î0aÛ²í81¨Ý³lò‘Ͷ±Å¹àe[Ž­'®A=Aùù0§\•ÓüÐ1¬_RŠ=ÝfОG,!2-6�ü“îýµÕ(+¯Äîúv\¾“êáÖé‘ÜŽj©ýð´¢âÑ­hóhuØ6&Ö;’õH¦IŒ «Q4ƒG%}ñ< Ú£µîIÿÞžOQ×Ò1kºXnëáýìB6ùÿÛ ãxW¢ÊàÏój5w~Û¿Ô˜©œø›'Ç"ÓŠl�bõŽ*ÒIS¤³iŠ”¶=Ö³wTi½hý§Z˜ 4æv*ÑïϠݾKJjÐ=ê[´úµŒ4E:Ûdš¦Hgå5<$ë‘Ææ¯Ã±þ ”ì9…QíQŒZ÷¤oÿœjíÜÈ&ò;?|¾Ü?aí_jÌTNüÍ“c ‘iE6�ñ,!4E:Ûh‘¦Hi›¸3>º0hÌíTÔï'ÚF‹4E:Ûdš¦Hgåud½#Êëå‹QëžYö™lòÁ2°3•óäXBdZl�Â<'±oßáû÷rŠå蔯ܮéL VÅzG2°Q¾µî™eŸÉ&,k1S9ñ7OŽ%D¦Å ,æck&1а öówÂë$ ëÉÀzDùbÔºg–}&›|° ¬ÅLåÄß<9–™–h�b aVÖ3I‹÷¾úµ eZ¼÷Õ¯… ïàUûÇÁ d:;;ƒ‹gx�ûJño*›q.Þváõxï«_ Z¦Å{_ýZÈ6-Þûêׂ:’õˆòŨuÏ,ûL6ù`X‹™Ê‰¿yr,!2-Ñ�$ °ÒM‹÷¾úµ eZ¼÷Õ¯… v”ÊB”GÔRø<v퉿]x=Þûêׂ–iñÞW¿²M‹÷¾úµ NeK”-Ö#Ê£Ö=³ì3Ùäƒe`-f*'þæÉ±„È´Ø�„yÚa¯ÿç].¸–~\›æýì`½#X(_ŒZ÷̲Ïd“–µ˜©œø›'Ç"ÓŠl�bõŽ*ÒIS¤³iŠ”¶ñMàîä\ì´°DiŠt¶Ñ"M‘Î6™¦)ÒÙFyÍÉÀzDùbÔºg–}&›|° ¬ÅLåÄß<9–™Vd/ÀÒIS¤³iŠt¶É4M‘Î6Z¤)ÒÙ&Ó4E:Û(¯yà!X(_ŒZ÷̲Ïd“–µ˜©œø›'Ç"Ób@ùÀzG2°Q¾µî™eŸÉ&,k1S9ñ7OŽ%D¦Å€òõŽd`=¢|1jÝ3Ë>“M>XÖb¦râožKˆLK4�±†0+뙤Å{_ýZÐ2-Þûê×B¶iñÞW¿´L‹÷¾úµmZ¼÷Õ¯u<$ëå‹QëžYö™lòÁ2°3•óäXBdZ¢H`¥›ï}õkAË´xï«_ Ù¦Å{_ýZÐ2-Þûê×B¶iñÞW¿Ôi<ð ¬G”/F­{fÙg²ÉËÀZÌTNüÍ“c ‘i± |`½#X(_ŒZ÷Ä÷6Ë’©XŸeÔ…’‹UnF^(1–™Vd«wT‘Nš"m´HS¤³M¦iŠt¶Ñ"M‘Î6™¦)ÒÙFyÍÉÀzDùº›ÛíÆ¶mÛÂkÖ%Ê@”ÇW_}…šššðZ~ãÆá5Ê[f2-íÆû·¥)ÒÙ&Ó4E:Û(¯yÂK2°Q¾°îÅÆ =„A»ñlذ!¸ç“¸hÐÙÙ^£L°e&ÓÒó‰Çøø8þò—¿„×ôÇìWCEùk…'¼$ëå ë^l ÚC´‹8ßût¾Ï9EÀžïÞ~£cËL¦%).\ò±e+V½âÂ%W -&.f¯\¹2¼f] ÚEË¿úÕ¯Âkù#ö1Dž2Ç–™(ÄP%=ôDêeot>±·„(;‡†Ãá¯éîßÔ’ÞfÆ ¡ ýâÅ‹á5Ò;q¡I/¿ïkÏ[¢<ÐûßÌWÒÅ1žxeNïA£Ù/̱§3xì@ð‚ž/ÚÑ}zëÝ=þ¼¯=sl}ˆrLœlé}ˆÙO yâE”#\ôbÐNZ᱃A»‘ˆQQz¯0û((­±õ!Ê1#4Z Ú‰(Ñ.ˆžv=cÐNZ᱃A»‘ˆ"= G·]ò¾ö̱õ!Ê1½ß*0h'¢XDÛ%Ú0=3{ÐÎ!¦ùÃcƒv£í GuêíB‚‘°õ!Ê1#ÄfÚ9‘QfDÛ ÷I¨Ì´3hÊí¬F!.îéñ+/:fŽ­Qމƒ¾ÞgfÃ÷Å0~³2ûE "­áÉbßÖûþl0hÊ3?Y%U¬Æ ×™Úy_{æ´åQîç1ûA™A;QúÄ  Þ'ÑT˜¹G”ASþðØÁ ËÄh(½^¸ä}í™cÐN”C¢!5°MíD¤&†4ådÝÌA;ƒ¦üá±Ãü·Ÿ˜Þ‡ ó¾öÌ0h'Ê!£ÃfÚ0 ‘Þé^D3í šò‡A;ëŸÞ)åÔóm¼¯=3 Ú‰rHèŒp¯¸Ùƒv³çH FêaÐNZ`ÐÎú§wâSïszˆïÈ:”>íD9d”“^íDIôÚ)fÐNZ`ÐÎú§wF˜HØhǽ`‰åˆ2dÉÌ~Ï$ƒv¢ôe>…™O9‘èIJú°t1h'Ê#]6û•t³_” ’Íhó@˜}¢#öR‘‘‰ûÚÙy’¶úD9"'qâKDd4âIöŠõxðE« “þðjØüÕv雯YÀèi´ž½ƒèb˜ÆÕÖVôM© ‡4`¾zÈûÚÓÇ (G8[&•èÙ·øYË0e…Áú½Ø°¤º ãV‰W=”-*±<jç-U0Oò±ƒv¢œÑwOÕF¿hÇÙÉùðzØüU´éÃTxÕØfàé=ŠZû{8é¾8ɬ»>Ggß-øÂAD‹‰vKï³›¿'П§͵o¡áäxýbÝ…öÎ~ŒúxÆ®a´î³ãÃð<(¡¥öòçQÕ|cV)zÏIìÛºEfa9z�å+·£¹o”A»æX‰A;ùàqlŠq7°,Ù çø\øïŒkþÛ&<k{KKWbYñ8®À±þ1ØV£þ²7üWDdHfï œ¿Š¦gmé3Xµ¬Ž+¸æx E`E}?¦ÃF²yq}pLUü˜xëíg©15‚ÁïgÃ+ŠI 4lƒýüð:iÇœõÐïý=- °ÛßD}s\ž)ã·ÕbÐND ½ÕŽ}‹¸Š{ Gí±²êúÆŒß=7P'W6aÐ8Ð];‚—žƒ8<øÜ`cý%ÿ²‘…™½'pîêŸ,CÓà 0ëFÓKïÀ%Fø® qã{`¦‘a|ÒІo<x–!¸;jPRh‡Ë*ô<hp D”A`@ǾRÚ]­¦9óÕCÿÓ¨)yEXöÜZ”­-ÅÒ¢U¨qÞ`}ŠƒA;‘L¾›èm®ƒ½áS¸½³(Ÿ®ö.ôN´tÍ©ë×ñ½úÌvöÖ×â¼W5lÞˆü8÷¾50çŽ×᜘ÁÞƒXÁ“²:ö]a¦ï ôaÔùöG ÌcÂù:v8Gá»söoZ'x̹x÷/ÁÊú‹&¹u,ñF²>z+MÈ—7f«‡Óp7>[É^t M†/ªúí™ õë÷™bt§´I3ƒo›ÖÂf[ŠÒU%(®pàúµcX_dƒmÅ!\žÖs_žO>€ã›‘ˆ«¸ »?ž’§`wàüÐql.~(ÆAïIìê¹þ+"+2rÛföžÀùë8±ùIص_6,ÙÕ †MZÆq{#NwÁ庿ô]…v i<í°×ŽóeàrõãêØ´ñG±‚ÙêáêWcuËuUý·jî Ÿsú1ç›cýŠÀ HÑ=‡•Mß™)\kÚ…ƒ®{Á÷ݯ¢~@Ï×BãÝÓnCáÊSLää¿éÀºåUhŒ>ë8ŽŽ³ßÁË£Yš‘Û®0³÷ú‡àX· UG´_´vœÃA™ÁØÀçøÕ'�ôb ówœÈ5oÌVý˜vÁæíü)âBëð@ìåUh¹|#°~=u‡Ð3a‚‘ž’0h'’È?Ú…½û¿ =~c‰;œ˜ìzí:ï­íÇßAý©¯£®âºú®alÚ ¦ÿ® õÿí ü¬á4†g¼»nô´µãËQžtå·í 3{O }õk°äg‡pfx:ÐdÃÝÓŽ¶/0ÆÙãµÃ �ƒ8‘kž™®†GwźÐµ,Á:Ç9Úp ´I3ƒ¡¿@±-Fóä—:¿ZbÇ.£ów¾§5™@ Rýtøþ)1‘Óš%(,} ;+^äì·dqFn»ÂLß8gõZìi¿ ±®@åÎÍ(·Ò,æ¹Æ �ƒ8‘kž™°úoµcÇžc8u¡uñÒ?ìeÐÆ HšYÜt¼ŒåU¿‰¾èhíÀi÷˜ÎOMpOks}¿FypøïÆ;±äÁMhš†¸%pÒˉèÈÊŒÜv…˜¾'p®µåÍ Itºw¡zÉ_£¼å|þëh)›Ñi†�q"×<3a=ô âäÁ½æí(Ò�ƒv"™|#8Ý~w¢b\/\wDý2Á=­IÌ{k¾ÀwîOP]ü–TwaÜ?‰¡ÖÝx¥m„WrÉÚ Ûv…˜¾'P Ýh‡ó»Ëh«^†‚%;Ô,¦‡ZñÊ+'q‹ ˜68`'rÍ3ÓÕCówiA;‘4bb£¨ˆy`+€­dZ\#ºéÓð÷´&㿇ËQü-jÐ=:!g#ìö·ÑìºÍ ,ÌØmWé{çà½üÊ'µ¶g°§Ûƒ™¡/qÈn‡½Ù¥ºØBÒpÀ Näšg¦«‡æï(Òƒv"i&ÑW[ŠâÊ_ãXD£êp½ì¹pcÛ…»zl`MpOkJ|ðŽÝ†—7E0rÛbž@?|ÞÛór0rîÜD»½ª.ìÎ_mÇ+=Ÿ|ôsØ·ëNd0«­­¦xºŒþ™¯š¾£H Ú‰¤ œPyºpðÍS:†MÂUó*þ0ªç«¡ñîiíÄÙ!sLâ¿;€Î`žÎröx¢(Fn»BLßèÇ@gk O'ÑËÙãsh޲ƒlá[¬Âfvñ©Xðªƒ÷Y“¶ÌV­ÒQ$ƒv"Éü>ŸêþI#Ü:‡Ñö·°ýCÕ0Ëù«h=ÒS TâìñD ³í 3}O gÏa´îÞ‡ÃÇ"/5Ã^Q {kÆ,´·a÷®Æè‘8Gí¨¨°£µo”A»æÌV?ùi>0h'’ÆÈ÷…úàqlŠù½Cé¿§-ÎO îi7{O gÏ/®Ž©ê³ïcCís\ÐNÅÔ¿Ÿ ¯(&1ÐPZ+Ý&7&¬‡Ÿü4´IcäûBA{ëëØu8r’“c8j¯D…½}cÆ?#äìñDñÿžvÓ÷röø<Æ' møÆãgaŸÚvãñB»u.–x:Ðàˆ(ƒÀ2| m»–£½sÀlõЊó€A;‘4ñï í«{mº¾/Ô©ë×ñ½ºœ½„† ïšcx)g'ŠÃÈmW˜é{9{|~Ä»—øa”Xé¶„x#Yl+x{YN˜­šàBq0h'’f£ŸGÏøLô}¡†¸/ÜÏ'ÀñÍHÄU\†ÿt»_n¢™<§0Üóêkÿ öÚÐÖ{ w9‰Yž‘Û®0Kôú1=|-õµ°ÛëÐØvßÞU_¨ ¹†q¼¶ _¹\p-,=hÙs�m7gÂcžOQÛx*¢ Ë™£Ø³§7y ͳÕC\(ÎíDÒù¾ðøßÝVò&Î{Í0“§ÁÙJmKK±¶l-ž[öJvO:ÈÒŒÜv…™¾'0b8©m)J×–¡ì¹e(*y ] 9ë^âÀ¯1Ø„ŸT´Yç¶„˜#Yf0ØT Þ^–&¬‡¾›8óÿÄþ†OáÏš÷yàjïBß(Û³x´I8ñm݃Êw?Œêó!Þ­,Åòª#:¿/<ðÝ7 ñ«óWqÏãLËëØÓ6H5>ÿ­6T<þÏFÜ'Å{Ú‰ŒÜv…™½'Ð?‚¶ŠRT4öÂ3­\Dç=íš‹ÕÃù5þظK«EŸU:cí_ç»ÐXñ8«í‹¡C0[=œÁ·Mka W• ¸Âë׎a}‘ ¶‡p™7³ÇÄ H?¦GFp;ª­ñÃ7ÒŠŠG·¢Í£çaŒqîi÷ƒ¦Ÿüm·Œ¶û\oaMpöøhœ=žÈÈmW˜Ù{}.Ø×4gÂÙã5ç^bÛrl=q –¹9!ÎHÛ²í81h™9ôóÈlõp õÏaeðœL<Ârºîßw7¾ŠúÖ©X´ijCŽ—°$8ñ™žÏªbõ´»pþï£bÉ3¨í› ÿqù‡~—öŸÁDäI¯ï{œ«Û€ZRO$•QÚ®0³÷úÑòÒ[èˆÌÉ FÏýk^hÁ0 ãxW"çJðüc^‹]% ì_u-ýe –ÛðòÖ²1_=ôvaïþ/1.ªÐ„;v81áE¯½ÂDó(ÉÅ Hš9Üè -míÆlàwݧÑÖöG Œéý@ÐóžÖ‡±lëq ΚáÀì…»i V”mÃ>»vmÆŠ¥Á¶ü-œ:&²#·]a¦ï ÷´AÅŠrTí;�û]xyÅRØl+a??Î‹ŽšñÃç›Å´çN6ÖÁnõÍpy¦¬Uæþ¹@9LÂãjGc­=Põhîø—ˆ[5H[f«‡3:ñ‹àCê6»`É/Ñ3Áz ƒv"iæ1áܧw†¡é9Ì^kÆš— ´² åu:ŸÌMô´¿‡–+ѳÇ{Ƽæ6îŸÄpïǨ­®@Yy%v×·ãòË p$ŠÃÈmW˜%zç1=Ü‹jw`SÙzTîn@ÛåÛ¼µGSÚ+| ›^ÝŒÒÇ‚²Õ[Ñä¶PoàÂ#Sm(,ÙˆW_^‰ÇŸ{«+ŽÀÍûsÀlõp7/cyÕo"æQ ,­8;äåEÈ8´I#ž;¹Mƒ3Ü-8«ŸÀƒåaÈ÷†[¶ë~¸ßçƒoz®“ V<û·þ:\“¶™ Wšëß„ÝÞ€–n7ùFdð¶+È= Ýó/èh®õ´µtÃÍG¾iKÜ–°¦¶åqf<PÖbnMx¦ÎáàŽvËL�èjÁÛÃXnÿ ãc¦ÏU‹MŽ!L¹ÞÅNäª=3ÖCßN·_ÄVž”1h'’F̆¹5N7Üm¯¢¸à T;oÁ?} ­¯ìÑýdn~o?ËCAAJ6mÃË¥%x®ìT4 `:ü7†¶ÐSP€Ð#“øÈ7¢c·]A¦ï Œèi+xKKŸç#ßrAG…‡'Ì ¯‹`iöêW¾i™ �}.; ^]Ø ®‡‚öÙ¬äD®Úc=¤�íDÝ|FÉžSùÎC¢W÷(\wô|ßôjYº?òÌ­ÀØ —}žÛp|óÇ+=%»>¹ß;ÅG¾·í 1}O ÒÓV²'Üãá ‰|ÓÞ8z÷=ƒ§¯J;@KËžÇËeOà!+=§Ý{ûŠ× Ñº„ïsIJµ(+^Êç´çë!1h'’ÏçŘáîAú2¬T)¤í÷0Pÿ’)fòœë«ÅcëÐ2=œ”|# 3dÛbúžÀ¹>Ô>VˆÕ-×£$>òMs~ï%|´g'ìmWà öxÚP´ú-t[j„ücOõÛhsß ïobµýGªåˆÕêaqq1ÆÇÇÃk$0h'¢€yx{_GñSp/㊠} Ö¾üŠª4EO;¦. vùÔ(¯›§û]T®X†çùÈ7"c3}OàújŸÃSõ—ºìè‡ÏóGÔU>‹âçùÈ7íÍcÚ;_àÞÛ÷Ì5×K:ü3ðNÎ|^ܾ;ÍãfÎY§ÖÔÔ૯¾ ¯‘À H2·ÛmÛ¶…× ÄíGµý$ÜÞ{¡ž÷¢`ï1~/U8ÉíFýî7ðÛÞ›<ÝÁyûOðxE3.{ùÈ7"c÷lX 'Ð7‚îú}¨ùí™@žù=ÿ&–?þ2š.ßcðDD¦ÒÙÙ‰_ýêWá5´I&[qøðáðšñø§'1)î õŽã®)ŸÁêäw†'¹Dnܸ Ú Ïô=¶yrÒº=½: <žÊêDç„è¤ íˆ‹¨âÙåùË_ÂïX‡8&­\¹2¼Fƒv"É8¤‡ˆŒF´Y¢í"¢Ä´‡0hמèm¶r»ÌûÚ£1h'’L\WÍÀìeÃÞÊ@$™†h¶@Ä Á•U{áò‰¸B´koÆ ¸xñbxÍzØ A;‘DâäIœD™…‚vqP$²:±˜m_·BÐÎÀ)÷Dyób/ëžÖD³)nYÊïkÆ H"³V8(›é" Q&Ìv±QÁ ´À =„uO[bn$«¬¼¯=ÏV‰$2ÛUAíDæ'†_š1aÐNZ`Ð"ÎuÄ9e/Ö}Û"XµòÐx…m`–[N³Å³U¢ ‰FV¸ÅÕPqÏ8›é &I1j@äGäMYÌv,‚öÈü‰ƒ¤ø/‘Y‰“ Ñv‰}YÙ§üÄ‹XÄè£GbëÖ­Qû·h«Í4±‘ø¿þúë¨<2Ò–(c%huI)w3Õ«T(Åľ¦”X(}¢>‰ ]´Ã¢±‡ù>q_»r*ê›RVVÄ ( ¢áA_äòŸþÓ 62¢q ‘äâd^õbä‘â@(üdù´ÚÉY‹hŸÔuþg?ûY°Í2òI·h›ÔùR/F?Ù¿¸˜+oÊb¦Ñ^z .ôÄ*gõbö ³bï¨åb¥G´½‘åøÿã –¥•'™T‚ôçž{.ªlÄbÕ6ŽA;QR9I4Òð&q53V"£´â@+_Ê“2»Tösq²d4¢mŠ•—ÈÅè½Ðê“ûX {;åKvܰBÏŸ8—‰•÷È…3}g&Q›lµÔS¹Hfôv<S Ú‰²ì fÄ!§‰®¦‹ƒ‡Ñ‰ÚXyS#]d!ÊD²}@´Fíámn¬<‰EŒ°1CÏU¢6šOÃÐF²}Æ*AU¢‹V¸p¡•dõK,f»…)ÑF'MdÕ{Ü´eA4.±±õä)Ñ…³ôàÄ!Á“²ŠXõ_,FŸôG´Éñn1ËIo¢|ötj'^Àj¥ãëž6D›«L•ÅjÃÁµãb±*íDYŠu 7zN¬<™©G £u@°ê+²žxˆ.ÌÅBn¦¹*bÍK Ú4ÒN¼€ÕjÁj¬‹Þ¬{ÙS—©²Xõþmq!#Öyš8vYƒv¢,źÉè'¾±NNÌvb¢>±7ú…¢tÄ lÍ´«‡›íÄ7Ö…G« ŸÍ'uÀjÅ`5ÖÜFœCobÝöbõ}:ÖÈO+— ƒv¢,©‡5™åàyrbÆá"@<HZõj6Y“úœÙ꿸�™?3Œ PS_x1ÓH½R¬V V#ë/xË¡ýÄÛ BÔcVžwˆA;‘Jðg¦a;‘''f=1‰<±ç /YR÷Í0Ád,ÊI°Y‡SF^x4ëo¨GÊm+«"ßÊH^ð–Cô ‹ò öh‘HV>WcÐN$hPÌx�ÁºÙOLÄ ½YOê‰õ^ÌUaÖý[M`æ`eø¨Gè•ÄqѪ½ì ¥”¼åPF/0`M¯Ì8ê3 ÚÉôD#h¦%R¬t£.ñÄú[£.D©ŠUŒºÄëoºÄëoºE¬ïnÔ%±>ϨK¾ÅúNF]´ëß2ê¢WÆi…‰2¤ç0]꼘%o‰òa…<©qß6«çQoXæ!,yX–ɱŒ´gŽ&J@ì€.\. õëTÓél#3Mݘ(ySÄÚF‘iš"mÒMKÔHªÓRù<E¦iŠt¶I––(Djf©/éìÛFeõ<ê Ë<„å Ë29–‘öÌQÂD ˆ0V¥H'M‘Î62ÓÔ‰’7E¬m™¦)ÒÙ&Ý´D¤:-•ÏSdš¦Hg›di‰òH¤f–ú’ξmTVÏ£Þ°ÌCXò°,“ciÏ%L”€YA+4’VÈ#‘÷mã°zõ†eÂr‡e™ËH{æ(a¢ÌÒê¼X¡‘´B‰Ô¸o‡Õó¨7,ó–ƒ<,ËäXFÚ3G %¹F[Ž5„9YZ¼÷Õ¯-ÒÔ‰²žh›lÓ⽯~-d𖍑iÊßGn¹.;-Þûê×Bªi‰òH¤f–ú’lß6«çQoXæ!,yX–ɱŒ´gŽ&JÀ, ‰ Î‹I+ä‘Hû¶qX=zÃ2a9ÈòLŽe¤=s”0QbŒÕªH'M‘Î62ÓÔ‰’7E¬m™¦)Þ÷Ãs{&á6é¦%j$Õi©|ž"³4?|·¿ÇmŸ?m’§%Ê#‘šYêK:ûvnÌà¶g¾ðš VÏ£Þäç»Þ?nÈ’m>X÷äaJN¿“ z·9J˜(±Æ ¢é¤)ÒÙFfšº1Qò¦ˆµ"¥´;ýø õLTšBÙfv Û˶W¯+RIKÔHªÓRù<Åâ´ó¸sî®Î%ÚnõoÀáñ©ÞO´Mò´Dy$R3K}IgßÎÞÎõ"°{Ç7{ õÛÃ^•ÁêyÔùßuná¸ßýã†,ÙæƒuOÖ©äôð;É ç|˜£„‰ÈÏ(ÿ © Î‹ô¼y>AuÕ!s8àˆ¹4Ã^öc”‚v™åCn}ð´îEÕû¿‘·ðrô�ÊŠ*¤(…üÔC2ªüÔ£÷B£µzÞ?c¿.ÇpÔ^Ž¢2‡ƒvýåQoä×ü7²Íëž<¬SÉåçw²Ö¨"ý~3"Iäï€ù¹B*¨ó"=oqƒößãýª§a ü{E›Ðäö†7#Q>äæ1ÁòØ!T•<ø÷l(*o†{ZÛ .D‰È¯/Vè…ŽT{¿ %¶@ûUðÊ›0ÞB«çQoä×ü7²Íëž<¬SÉÉÿlŽ*RÓï7#’$rŒ¶ks²´Ðrn¡±µÛíÁE4´‘¯ÅÒÒ¿ú)ì碶WD®§“¦nL”õDÛ¤•vª½WC‡[%íÂ…^t¾÷ ¬.z…+Þ@Cgoô6á×Bäz:i‰I‘¦ü}ä6‘ë©§ÍáÔï~‡Öóª4ߺí/௠Á77 óëT?/õ´Dy$R“__ô×K&?±NòüðyNÁ¾úQ®Bó†Ô^ÁêyÔùß5Î…úðq£¨` VÔtÁ£ñȺt±îÉÃ:•œü϶îÈŽxôû͈$‰Ü#ƒ¨È×B*i¡%QÐþ WHÿêo÷ág\QÛ+"×ÓIS7&Êz¢m²KëÆÇ¯—aéÿ Å͸ì‹ú»ØÛ¤Ÿ–¨‘iÊßGn¹žUÚéߣeËrØlOâ§{[p:œžp› Òå‘HM~}±B/´Ú¼-زìaØŠ_FÓå{C>«çQorñ]ýÞK ÇŠ¦~x5(ôlóÁº'ëTrò?›£ŠÔôû͈$‘¿æç © Î‹¦‹ïœ5«PXð(VÛOi’E¢|h—GÑCÐ…šKPPôìÝ#Ò{"iú[‘éȯ/Vè…Ž4ó ¬(|E«ßB·g&ü¾|VÏ£Þhû]swÜÈ6¬{ò°N%'ÿ³9ªHM¿ßŒH±ÆêU¤“¦X´MŒÞZE¢ÏK7Mݘ(ySÄÚF‘VÚé4–?†ÛÓ¨v\ ^ñ]ØÆ?…»÷~X¼j]‘JZ¢FR–Êç)â§Íáôï‰ò"l%¯Âþ‡î¨¿õOÞÃ=ùFù£}}1q/´ÿ.7nDQÁÃ(©vÀí<í›ÃäÝ ©'zVÏ£Þh÷]ûÌåŽwô>£7dÉ6¬{ò°N%§ýïÄQEúýfD’ˆ0V¥H'MqÿýÐÒÍ?~dá éתmÔ¯³IS7&JÞ±¶Q¤–63í¿ÂÏ‹ÿ·@~6 áü÷ _eÿ½4~bÔG¾Öý“êØ‹â@Qùop~4ôÌùû;‡{Îñ‰‡|£üѶ¾˜·Ú?}»ŸM ›l8‹Qõ ¯ÎÆNß·¯¿<ê&ß5|Ü(±‰ÉÁBÇh÷²d›Ö=yX§’Óöwâ¨"A¿ßŒHívÀÜ^!Ôy‘7¿ç^ äG|nü¥ÐÀ|›…§m+Š¢òkÙÄG¾Q^iV_ÌÜ íFÛ‹KƒŸ›p1òd{:Ì£ÞÈÿ®ù9nˆÏÌF¶Û/báº'ÿ;³N%¢ÙgsTÑý~3"I4Ùóp…TPç%‹ÒÓ.S¢|ä>¹ùíˆÑ¢¾X¡:)æ1#yÉG†òó]­ÑÓž{Ú%bO;GEÓï7#’$rŒ¶ks²´ÐòuŠWHWï‘o i³øck#ì»·¡²r þa·_ö{ záÂ?ãÝgƒ½M¢ÏKœ¦ÎW$‘¦ü}ä6‘ë¥ùÆÑúþAìþ‡-°ÛëÐè8…–Î¥Õî¯Óü<Õk!r=Q‰Ô¤×+ôB/ðÃw×G#jÅS=jáø²žéù@šIîi×QõFÓï8n¸{ZÑX+ž:nô{¦‚£ì,sO»ëëTrÒ?›£ŠÑï7#’$rŒ ¢"_ ©¤Å{_ýZ¸ºöãM#í Ï,W7Ž¡¡I8}~ñ6a‘ë餩óI¤)¹Mäzºi_wþ&4ûhTþËO ÜîXxì›"ò3"_ ©¦‰Ï'JU^ê‹)z¡gàé~ «cÜæë6&å#QZæô•G½Ñæ»FÌZQÞÁ%bÂV™²ÍG¶ÛÇfͺ§Íw0^JDËÏŽ‹=íDæ¢é˜Ã+¤‚:/òóæÅåúÕ°Ùž@ÙkïÁá<—ËWoïïEYñÃX²õ3ÜÊáDz§ûQ¿âØŠËñÚû8{Ïòx½NÞ­ŶDZµã¦¥Oz)ÿ´«/fî…öcúò!¬°=„â²½xßÑ…^Ñ~¹ÎÀéx¯•=Û’jtÜ’™CæQo4ù®y8nd›Ö=yX§’Óî³9ªH¡ßoF$‰Øcõ€*ÒISˆ÷’õÖ*WH}^ºiâó#‰õdÛ(RJ›pâgÿª:5‚ÁmÎ|‚Ö-e°»î¥öy©¤©óI–Êç)§dq*þ%ºBCü…ûÛÍcz¨[ž~®)>òòG›úbö^è18«Gñ®®Å÷> b.’Ö*<m?‡©ð[2X=z#ÿ»Î/7œ£?„ß‹}Ü%Û|°îÉÃ:•œ6ŸÍQE‘ôû͈$;`¬ J‘Nšâ™ìøñÿ¾p…´áƒß-\!ÝõâßâGü‡…+¤‰>/Ý4uc¢äMkE*is}µø÷ÿåu´»î§)”m~è{«ë/á¼jûXŸ'¤’–¨‘T§¥òyŠÅi_¡¯ö'XÓ2WÜí¼¿ÙŠú)Õûéþ[Ñë‰òH¤&¿¾X z®µK7 e(ÖIpØQ»ú"' Î’Õó¨7ò¿ëäÂq#~€pÿ¸!K¶ù`Ý“‡u*9ùŸÍQEjúýfD’Èßós…TPçEvÞ|.;–Ú]‰‡yØ”ìoÒ”(róè…Ë.F xÃë±øYÜ•äoÒ'¿’™É¯/è…ö¹`_j‡+aã4 ǦÚ$“«çQoä×ü7²Íëž<¬SÉÉÿlŽ*RÓï7#’Dþ˜Ÿ+¤‚:/Òó6ÞW¶;1^]Ì©^;Ö6}“ ïéK”¹yœ dq/¶;ÇÂë±ÜEï¾_ iPý¿ìȯ‡dfÒë‹z¡ñ=:^©sBÜëÇÔì[ÛŒA‰ ˜Õó¨7ò¿k~ŽÙæƒuOÖ©ä¤6G-¢ßoF$Iä9l9Öædi¡åôÂÒÈ¿‹|-®vÚ7¢²ùtp-:-µKýZP7&Êz¢mÒKëA_Ýëøhhz!íþßÌczø l~ò¿bwkoÄ6™þ[÷Ó5’"MùûÈm"×ÓJûç#¨ZoÇ/Ö=ë_áÓ†ÿž|b7Zϧøy)¦%Ê#‘šôúb…^hqQ±ï=ìøèZÌ‘@þéïà¬yO7^ ´fòX=z£Éwº€ºÇ‚ÇEü“v¾Ò§á–XèÙæƒuOÖ©ä¤6G-¢ßoF$IäDE¾RI -ç®Fþ]äkq…ôƒ¿ÿ;ì=¡íóÌ•õDÛ¤æ»/5¢¡ýÌÂ{.œÁPW¶¬«ÄÆÊÀ¾fg°§}a›°ÈõtÒ5’"MùûÈm"ד¥}ílÇ oèRlp½ó78ôNÚ¿ŽØnö;4l]‹k6¢rË~4Ÿ =®OPÞÂ6©¦%Ê#‘šüúb…^haž/‹wº¾ÃlølÌ}ƒ[6¡r×ë°7»pÇPyœÁØõ›ÒWõF›ïz<—8n ÍFlà¸Ñuð¬«Ü…ö£pÝ‘×å—m>´)kÖ=Ö©ää6G©é÷›I¢É˜‡+¤‚:/Ròæ»ë7¼ÃGÿ|s[Á$å#û<ƾ/ÌïóA∪¤4©‡dZòë‹Y{¡Õ­8öånïÖ>±z“ô“G½‘ó]å;6´p±W‘ËãF¶ùSúÞ¿r…u*9ùŸÍQEjúýfD’ˆ0V¨"µ´èÆV¼§ôÖŠ+¤ ÛDôÖ*WHc^HºiêÆDÉ›"Ö6ЏiVU6/4Šêíê÷Õ¯³IKÔHªÓRù<Eèu(h·*¤ºBý~¢m’¥%Ê#‘šœú¢ïZ9y”?<2]VÏ£ÞÈù®ÚLHšŽlóÁº'ëTrr>›£ŠÑï7#’D쀱‚(EjiÑ­ò¾r…4ö6!2ÓÔ‰’7E¬mqÓ´/ÚN¡~?Ñ6ÉÒå‘HMN}Ñw­vyÌ-«çQoä|Wí!¬{ëTrÚÕ7ëìˆG¿ßŒH³4¶‚:/Rò¦Á#ÜÒ•(ÙçQŸ¿Q"rê Ú\°zõFÎweк'°N%Çú¦=ý~3"IÌÒØ ê¼HɃöœSÉ*äÔ´¹`õ<êœïÊ =„uO`JŽõM{úýfD’DÖc aŽŸvnán©o#?Mݘ(뉶IšÖiíçb¥E,ŠÈuYi‰I‘¦ü}ä6‘ë‰ÓB¿r ŒN‹½]¼÷Õ¯…TÓå‘HMN}a@› VÏ£ÞÈù® ÚCX÷Ö©äXß´§ßoF$‰Y[A)ycO{NÈ©‡drê Ú\°zõFÎweк'°N%Çú¦=ý~3"IÄ«T‘ZZtc›Ú6!2ÓÔ‰’7E¬mqÓL?Óƒÿ‚ç×õóð^¹‚óªí\Ÿ£¥å‹À_F‹ýy!é¦%Ê#‘šœú€6´Ïã$Ï^ÆX°º‡+žE8òÿy�ý£Ú‚œ|䆜ïÊ =„A”À:•ë›öôû͈$;`¬ J‘Zš‰ƒöéë8ÜÒ Xýwðk»öú�ó~øîºÑÓÖŽ/FñuªŸnZ¢FR–Êç)§ƒ§uÊv¾ŽÊÊJØE^KeeþsÉ?b g¿§[_Ž­ŸÝ€+é神–(Djrê‹ÅZÿ8:[ápœDïðt Ù‡»§m_`Ì'ñ™@*Úç1Ò0Z·lÂΡ¶KYT=gë/a6ð?ÏgÛñøãÛñ™çþC’²%?Ú‘ó]C{ûÇÄÎ3‡»]zå@kïp°ŒïºO£­í› ý¹²Í‡œrÐ÷þ•+¬SÉÉùlí‰è÷›I"¿±Íu^¤7.NT?½C“ðϺѴf K_ÂΊa?'üGò%ʇÜ<Š‹/›±´ôy”••©–p ÎDí2OC¤ÿVdjrêKdm~än߯à¬^‹Ý×1íŸÂµ¦ux°p*wnF¹ý,´êßÊm'µåËPºVÝ~–WœgÐ.ÿ»Î»ñôîÏ04=‡ÙkÍXóà”VV¡¢¼ç½êqrd›ùå ¿ý+WX§’“óÙú>få›~¿Ѝäz^¤óÝDosì ŸÂí ¬{àjïBߨvWHu^dçm®ï×(oú&¬ÎaܹKÜ„–¡iø‡[eíî{O”¹yœÃsçp5wü\ I=¤Œ‰ßCï‹\þ@3Õ‹æÚ·Ðpò ¼~±îB{g?FÍÒ =ׇÚòf ²ãïBõ’¿FyË5øü×ÑRþ¶f½79Íc p:×;hÉrK~>´#ÿ»N¢¯v;šÇwÿ­@àú,ÿC¾0ܲ]³áÎÙæCz9èpÿÊÖ©ää¶þŽYù¦ßoF†¢ëJñÝ"‡-Çœ,-´ôâÛ¦µ°Ù–âÉÿTŒýÔŽë׎aå_=€~ü¸<jL"?#òµišºœ•õDÛ¤“vþÄ>l¬ùß¹?Aùþ)oÀ)×Wh?øs¼Ò6ìyVo£¼2MKTDšò÷‘ÛD®§•öu>ØW¼àò‡Óçë \”¿]´MÄz¦i‰òH¹§÷ßCú÷›¿Š¦gmé3Xµ¬Ž+¸æx E`E}?¦Ã&[²}[*‘Çv8¿»Œ¶êe(X²ÎñYLµâ•WNâ–Fçy9Í#Od“’ÿ]gÇüí¨qºán{ÅO Úy þékh}eÚni­f›éå Ãý+WX§’Ó¤¾é옕oúýfd(º®äß-2ˆŠ|-¤’ZþõÏaeÓ7p^²w#ºîßoݽõSQÛ¨_ ™¦©ËYYO´Mziݸܸ1Ð(àâÍx¯«í {°åïÿ ½c&ÚgpbïÅü{”®* ^p9ùɬ/²Á¶â~Ƶð÷÷·Éôߊ^O”GÊ=½ÿÒ¿ßÜ%Ô?YêÙ·¾¼ô\S=ÚwßÀF]·Éöm¹æà½üÊûsíìéö`fèK²ïÃî†^Ü1CÐÎÙ¤´ø®~o?Ë |öÃ(Ùs £3ßÁy蟰ow#zïh³ód›ùå ¿ý+WX§’“þÙ:<få›~¿Š®+¹íhöîÿãâ 5áÄŽNLøFÑk¯ÐtfPu^´)w¼c·áèµñ¹êP!†Á…×eK”¹yœZ¸àâ¼¾Ö´+xÁE¼ïn|uá‚‹´ù­(Szÿ=ä?Foa¿èÍ ÞOù:v8Gá»söošdè¸à‡Ï{cÞˆ ù\8X!†žjUä4<‘MJ³ïêóblÌqôÂupWð2-d›mÊA_ûW®°N%'ÿ³õwÌÊ7ý~32]WòÀw‹ÕªH'-díoý~ô@ŒûP—üï÷œOùóÒMÿF$±žlEJiÓW°ÿ§ÿ'ˆÌ“²<ðÊ_ÿ<Ó¡ RRú¼€TÒÄçÇ£NKåó±Ò” .§DZø‚KϹ.|PùÓE\Rù<E²´Dy¤ÜÓûï!ýûÍ_ljÍOÂø\ñÙ÷–ìêÆDøÏdK”éy œðºV¢Ø¦Î£XFIõQ¸<S@¹å#QZfx"›ŒüïêÇ´û(*Š ~¶z±•ì@‹ká;㤟l·_LûW®ÈÿƬS‰Hÿl³òM¿ßŒ Eו<ðÝbQŠtÒBfÑa_¿ùÙÎàã:Ä"¹ãhíÄÙ!oZŸ—nšºœ•¼)bm£H%m®¯ÿÇÖ`‡ÈO8obùؾÿW ¿vû?¡s`<xPNåó„TÒÕuZ*Ÿ§XœvC'~û¤ã‘M虈ž±5ù神¦Îå—ÞéßÏ?ǺU¨jü8jßní8‡!1™¦FåCzÅDY-CeýGQyt|lGÙSUh¯;p7‡'ÂÒóÈÙ¤äW1iX)Š+c‘õÊqö²çÂûTîÊݲ͇ôrÐáþ•+¬SÉIÿl³òM¿ßŒ Eו\úw›Ãhûl=슾‡kþ*ZôA»Ö‹ó"=o¾è:X/G£»kæúa[ÛÍðš|‰ò!7³¸éxË«~uP.¸H>׈"¿R6ôþ{Èÿ~7Ѿo7»nGÕóù«í8Ò§U¨—Ë}[˜§ë]¼ù¥'z_uÛNb4¼*[NóÈÙ¤äW1Ù_¾y £Q+xս޶QmÊ=Û|È/ýí_¹Â:•œüÏÖß1+ßôûÍÈPt]É¥7ñ¬ïMÁÏ]´gSÍ݉“z=k£Ýø¨ç{øæ"›Èi\mmEŸ¸oR#‰ò!=¾œn¿¨Ù¤9ñHÏeEᅦüï7 GYaðs£–Tw…æçÐ@¢|$JËŒŸtã¾è6Ø\&ÄÉ~/ÚU'²Z“ŸíÈÿ®sýü8zÆg¢µ§ñ…úló!¿ô·å ëTrò?[Ǭ|Óï7#CÑu%øn‘Öc aN–ZÎÁÓº•ï~ïø;Ö<‰¿ùY úÆB½Ô‘ŸùZÈ4M]ÎÊz¢mÒJë´£,ð™âs£—GC#‰µMøµiš’XDšò÷‘ÛD®§ž6‡®wßDcÏùàÚBZø@ùÏáõèm2ý·¢×å‘rOᅦüï7ŒÖªj¼Ûrì~mK*KV¢ªùÆL´[åÂÄYL¨òbåÞ'5ùß5?êÅçg#Ûí³n%ÿ;³N%"ÿ³õwÌÊ7ý~32]WòˆïDE¾RI -.LŒàv Á¸ÿw~|Ýq?ýw/ Í3µúµišºœ•õDÛ¤•Öù&ª*ëÐh• ¯ïxÅSŽæ¾Qí>tÚW?sÑ8P6œ:·ð÷÷·Éôߊ^ÿé‡Þùßo#áù(î›Áˆ£¾xž<œ�ÉÏ#/LX±÷IMþw Xá õ õÊñ!Þ­,Åòª# êeË6òËÁºAëTrò?[Ǭ|Óï7#CÑu%ÏÉw›Áã%,)©A·ê~p™Ôy‘ž·é?cø¶êûû®ÃQñ4^lV5žò$ʇÜ<æç@)ä¦Rªôþ{ääûÍöíõO„žœ‡ ùyä… +ö>©Éÿ®þ… õ÷ùáiEÅ£[.ÔË–m>ä—ƒuƒ(Ö©ärò;åù˜•oúýfd(º®äï«T‘NZHôk!ø7ª!ÖŠDŸ—nšºœ•¼)bm£È4m~èÖ/)ÅÏßû®·I7-QýQ§¥òyŠÅiÑ£$B’P$ÿ¼ÔÓå‘rOᅦüï§¿aÕ9ù xaBŠœüV’äæ»j¡>Û|ä¤,D±N%'ÿ³y+š~¿Š®+yà»Å ¢餅¤6ÄZ‘èóÒMÿF$±žlEJiÞkøø³³QibÆõ?÷_A—+»ï®ˆ•¦ÎW$uZ*Ÿ§H-míöÕx¤xó¢eümÒOK”GÊ=½ÿò¿Ÿî÷¾‡+D?¸ðÿy�ý9I~c°xüï:ï•+¸±¨b}þþÐ\/ZÈ6òËAûW®°N%'ÿ³y+š~¿Š®+¹ô烈!ÖÒóæ9Ž-e;p |?{hÙªçÖ¡~`2p@¹Ï¶.Çã[Û¥öè$ʇÜ<†fl==¡šä%ë£üÒûï!ÿûYã~ïÖ-›°ó@dûeǪçñlý%Ìþçùl;|;>“8ü4·ydïS2ò¿«8æï@ÙÎ×£ê•ýÀ6<÷ì! Ìúá÷´cëã˱õ³Ò®ló!¿ô·å ëTršÔ7Þ E¿ßŒ Eו\úwËϽH‚:/Òóæq |i)Ö–•¡,jY‡W×0oø =p ÔÉãú(¿ôþ{Èÿ~Ö¸ßÛQ¾ ¥kÕíW`yÅÁy3íì}JFþwÇÍXZúüâzU¶ŽÁËízÛ¿r…u*9ùŸÍ[ÔôûÍÈPt]É#¾[ä°åXC˜“¥-¼ï»‰Þæ:lyµ8}>°>ˆýˆ§õ C¬þVõZÈ4M]ÎÊz¢mÒJ;Õ‚Þ«Ó÷×#E京´DõG¤)¹Mäzêi>tü9ÖìØ¼jºº½a”ÄQç× ›Lÿ­èõDy¤ÜÓûï!ÿû…žïÝ\ûN^×/.4Á’À¿SPý¥Iî÷ùÞÁèçç@nóÈÞ§dä×9Ü9wWs\±²Í‡ürÐßþ•+¬SÉÉÿlý³òM¿ßŒ Eו<â»EQ‘¯…TÒBK/¾mZ ›m)žüOÅøÑOí¸~íVþÕxàÇÿˆËÓ¡–$ò3"_ ™¦©ËYYO´MZi]h={'xeSIùmý§BßTîòI¤)¹Mäzêi~œùì38]ÑiÊ(‰·;´[…Þéßoþ*šž}¶¥Ï`Õ²T8®àšã%<‚õý]ª“/Ù¾-—_´º0©:™3×d{ì}JFþwÃèí8;©ºYãÛª²Í‡ürÐßþ•+¬SÉIÿl³òM¿ßŒ Eו\úw›Â@ýsXÙôMàÄi ךvá ë^ð}w㫨ÐîÎhu^¤çÍã@Yà3ÅçF/O Ú™ŸÉQ¥e$<JÂÞð)ÜÞ¹à(‰£KDwäôq}D‰H¯/s—Pÿdšg€Y7š^z.q!ÎwßÀF=>9Ý·u8t<QZfØû”Œü۪Äçg#Ûí³î­ò¿ƒ1ëT"Ò?[‡Ç¬|Óï7#’D쀱z@é¤)\] xñ¥C¡ƒÔ„ë×7`Â7Š^{*›O§üy馩%oŠXÛ(RJóœÄßÿýÞà°ñ…¡—G |åvì;Úe‚G¾E’(®pÄ%¡Hþy©§%Ê#‘šüúâèó-ì^|›4[¯c‡s¾;g`_ñ&\]¯JgßÎÞ0Z÷Ùñ¡Òv—fØËŸ7Ïd{ì}JJþw X­vìû0â–Ç1µoÄJ 'ŸÍ6òËAûW®°N%§Eé형oúýfD’ˆ0V¥H'-díoý~ô@¬+¤¿Äû=çSþ¼tÓÄ¿I¬'ÛF‘RÚÔN|"~ß$¶¡òw§bo ^g“¦ÎW$uZ*Ÿ§XœöÏ £$\×Ê( ñ~ëîõ‹FI$ÿ¼ÔÓå‘òe§ãóQ.ÙgAz}™¿Ž›Ÿ„-ð¹â³ï/6,ÙÕ ­·&ʇô<‹ëƒcªA~̼õö³Tmä4ì}JJþwõcêúu|¯Jg/¡a}-Î{ÕÏí’#Û|È/ýí_¹Â:•œôÏÖá1+ßôûÍÈpügñÑçžðš~ÈßgqÓñ2–Wý&â i`iíÄÙ!¯ê€&—:/Òóæé@ƒc�çþ2<€Ž}¥(´» ÕàñDùGÿhöîÿra”ÄŽÎ…Qv—V§ZÔCʘcÄÑëQlÛ‡G«š9éõÅ?ǺU¨jü8ªÝjí8‡!q›ˆFr¹o‹žÀOÚðMdûå‚»£%…v“Œ&`ïS2Z”¹ç“àøf$¢^y0ìþûJžÒ츑m>ä—ƒþö¯\aJNúgëð˜•oúýfd󘻂î£o ¼ø¯Q濯šì€¾œn¿ˆ;ê}Ο†Q»:/ÒóïžöÂçQoЉœf0tâ@-F—ü=Ú\ÝäæƒÒç‡Ï;×ÉCØù\1l6–lÀ¶»Ñj… ]äßÓ‹v×mÕ…E ÙšS½'O¢|ÈÏc¼{n—`eýżLî”(-#ì}JJþwwÿq  YÙ°0I«lÙæ#ÛíÓßþ•+ò¿ƒ1ëT"ò?[Ǭ|Óï7#}óM`Èu ;×`©€ ŸÂ¦m›QÕªï =rØr¬!̉ҾîlÀ–ç~Ž×ÿp:ü®j›sN|¸ã€¨´ˆ×B¦iêÆDYO´MZiu°×Žó.š››ÃK ZgÈEÛ„_ ™¦%j$Ešò÷‘ÛD®§ž6‹ûjüÍÏv¯Ø†ùf_%¡ümô6™þ[Ñë‰òHZ›ÁP۔ڿÔn©Cëù!x}~ø'ïáž–WÚ2$§¾ÌÀã|/VÿnÕ| !“¢;.Ôל„Vc¤’íÛr 㸽§Î»à ´aÊÒwu1³/INóÈÞ§¤ä×@€uüÔŸú:ª^¹ú®alZ¿zå—ƒþö¯\aJNÎgëû˜•oúýf¤[óC'ðJIQ bÛPXºu­âd!¨ú§p÷Þá¿ÒÈ02ˆŠ|-$N;Sïüþ?ÿkÞù<ünøï΂ÛÙˆŸ=ùHàßZµ0Ô6ñçe–¦nL”õDÛ$O;ïå±î…x¯½ÃÂpàäïÂ…¯ñÇ-h>Ú†?žKçóÒOKÔHŠ4åï#·‰\O+íëÏÐXûap”DTÚœçÂë‹¶‰XÏ4-QIký]7º[ÞÆÖ² ØÙp®¡‰ÀiS€Æ£c2%§¾|ŽÊGQðà/Ð5q¨<œÕ(2ʆÚýÞ~4oߎºîo1:ü'ü¿Ãâ6%‘Çëèsõcðîlø/µ‘‹<ÞÈ{Ÿ’ö]ý÷p¹y¶ÖÂÐèþßðŠöÝÁ`ßô Þ µ!É6²ÊAÏûW®°N%'ç³õ}ÌÊ7ý~3Ò/ß8ÜÝ¡vë:”í<„“®P•˜ÔÉgÚ«€é4•— ¬±wE>E9‚õªÒ%c J«~#öZ×p¨­:/RòœøQ”îz ¶`U‘ ¶åûðá{›Pø|qq¦¨ü\6ì}¯â$× û‹»ÑâŽsŸ˜ï6.Ö¿­é0iiõ²ãŸ‚§ÿsÞ·k6½†CûÞÖtŸÍ”œúâÇ´»å½—Æ'ƒªŸÂ•¨ªo„ÝÞnà }&øDˆKwâý†×Q¹*pÂg[‰7>|ëm™ø7 Š6¢ñò½@‹<²÷)u²¾ëü·MxöÁ•Øõ~=Tþ$p<|Ëßø�ï­{,T¯ Cyc(èÒ@¶ùU÷ô¼劬ï`ô:•ˆœÏÖ÷1+ßôûÍÈ�æ1íéGçáT¬y¯:�ûq}ÕªH'Í?=—ãM<¿âY”þߢg]ëhh=µÐk§ôÖ*}^ºiêÆDÉ›"Ö6Џi£mXõ¯Ö íV yl²‚U°hÇæ5v|Ö÷mh¢™®:¬ÿŸ' úÈ·9Œwü"æ( å‹z”„"öç…¤›–(”“ïw8S÷–Éïií´ û+X·i-žQN|p{ÈŒ~OûM´mú1*ÚFà÷ƒ¦•¢ìØWhÛ¼öÏ.b08¹Óç°ï8†¡<œËÉ#{ŸÒ!ç»Î/㡊6ÜòÏ`°é…@ù¶àb[5Ö†¾Á‘à$­]öýøhH›†ÙæCN9è{ÿÊÖ©ää}¶~Yù¦ßoFÆ"îq?óÔèôžöXA”"4…â·vÔmÝ€ŠGñž‘ƒv¥ÿ¦28ó«ÏeÇ¿A{³5-×ï7Š“=øû_4ó¦ˆûyé¦%j$Õi©|žbáõô�öþm1Jw]%ÑÚ°{a”Ä“?ÛŽšÊXÔã÷óÒMK”GÊßMô6×ÁÞð)ÜbÔˆÏW{ú<“&Ix×pÆQ‡­å/ãÀÑn“íbr¬ÒÐlË>ì……(sôÀQãÀðB¦ÆÑ³ïggïS:ä|×ÐDa¡§¦xá²/ X®ÀþÓ2¬ ÷uxËÔ³Çë{ÿÊÖ©ää¶þŽYù¦ßoF:6OïQÔÚßÃI·Xw}ŽÎ>¦Í<<>¦@Ó;t­uÛPžƒ¡¶ê¼HÉÛÌyØŸØÞ™@Ú Þƒž»—ÑøâV¼Ýô1-¿Áke«±»çvxùåCÖï§Œ’زnÊžQnih„Ó-N‚r<ó?åRhˆ§Í¶¥«JP\áÀõkǰ^Ü ²â.k9‹R†4­/â"ëùÖàEÇM¯ÕbŸ¡‡ÇON~˰¯÷^8¨x»znÀÝø ¼øöasÅû¯­ÃS»þ,zö>¥JÎw œÙއOìë ´¡�ëá]ݸë>Œ_<ˆ¦cÇÐòþ^”=µO³§Žd›9å ïý+WX§’ÓôwÒÉ1+ßôûÍH·‚÷äØÂÒÒ•XV¼Žëp¬ ¶Õ¨¿¬ÍÕÁläf ¼9j«Î‹œ¼MÀÕ°»îb²g~¬}ssðºcßêbØ ŸÀ²¥›5}–u¢|Hÿý|wðíÇÂ(‰ní0…úç°²é›Àž:…kM»pÐ8 ÖýWQ? ÕÊ2—›ú".:ö ÎгÇû1ëþ�ìç05Ùƒ]?Ú¾Iø½Wкï,µáÇË~Œr Gª}#±÷)ißuv�êàšºž]Oà±Ú>ÌùïÁÝZƒÕKFጥåú½%AN9è{ÿÊÖ©äró;å÷˜•oúýf¤[sõxreýÆüÚ¼t0И‹‰@þ±þ´›®,3‘;`ä°åXC˜“¥Å{áõ¹s ߢ´ðk!Ó4uc¢¬'Ú&¥4ß üÿÛûÿØ(®<_ø÷¿Ñm­é‘V‘&«H–ŸË¬V›o.²žoò ¾ß ›¬5Àl."áé5Qœ²føá\~D„7K0“‰a?“xœÁjL0;q'kÈ`bš‰½à/Û„˜ØÎ`cƒ¿ iÛ®÷·O»Ë”‹j»«»ª]Uý~E'TÕé*wŸ:}êsºNUøåÿ…ÒŸ”bGàz¢«æ]¸p ÿkNŽïÙ‰utÓB¦yS5’"O}½ví|fy1œ9ù;ìYçŸ%±·¹}"ßxLÿÖÔŸ‘ì§ôµ`ÛÎÏ0 ¾ŸCTV0ëC›T>>ôÓarW_Ü><^7j{ «ý?Ãâ-ë~} 5à×§û’sÖËÍg4À³O†¬{¯ñ¸&üªVû±`ñnÂÃÉåI£!þõ &g­–íç°®œûýÊÖ©éån?qx<Qú”0Ûö!¸!N?•»Æ`Û,H\«ã,Nþš¥ÿ,^ùlS}û?ãÌŒ’ \FÏñ_ Ø'îΫK³^³m(b6¼R_¦úüŒVÉï³OzùP¯ÒÁr°Ërz,#ûy£„)§ÆzŽaeñ#‰Š=9ÍÁf¯{ΔxoFg@UfòTfÖ±2O|-õ³©ŒÖQeš§2³ŽÙ<ýçÒÒ祳=•©<Í( Õ´ë˜È›ê3’ÝFðü æ­ÿ dY¾Ÿšq®G<sØy¼R_Ì|·ÝÊŸ‘ÃãUùP¯ÒÁr°Ërz,#ûy£„)§”ïd,›·5ÚàW>†¦sßÚölÉlˆ/ Q'Je&Oef+óô‰úÙTFë¨2ÍS™YÇlÞT¤>/í©2ÍS™Ygº¼©>#å@ìΜü ƒNì¡ðJ}1óÝv«|ÿŒNÃ2Çr°Ërz,#ûy£„)·"—pê·ÇL^ãlDù¾ }Î(DЖ|h$óá3’ÝÆ¹|×§?‚ï;/£Ï!z~·Ý#ß?£Ó°ÌDZ¬Ã²œËÈ~Þ(aÊ­ð1¬öWb·$AJ‘v¯‹ª/ÆÃà™ç•†DЖ|h$óá3’Ýb7T¿i—a{5žvbýsËPÝu7¹ÎÌâwÛ=òý3: Ë|ËÁ:,Ë鱌ìç¦Ü Ë(›]Š¥~?üS¥µ2ºp'íP;lÙhóty©–ë§;òô‰:?Õ:Ùæ¥Z®Ÿ2Í›ª‘yêëµëhç­ÎKµ\?-¤›7Õg$»Å;íòJÌ.}Þ¸­šH˰V¾ 'Ü–Î+õeºï¶äûgt–ù8–ƒuX–ÓcÙÏ%L¹5؉¶+ÑäŒói¿€ÚN”vZH'/Õrý´`Gž¾1Qç§Z'Û¼TËõÓB¦yS5’"O}½ví¼Õy©–ë§…tó¦úŒd·Q ¶·ãŠÓžG9¯Ô—é¾Û^ïŸÑiXæãXÖaYNed?o”09Ãp'?µë3™óJC"è?K>4’ùði¦(6áÓ>çõæùÝv|ÿŒNÃ2Çr°Ërz,#ûy£„)·”›8p5J }‰Ê}?Â/÷&_ä“ߣû“–Q¾[S*F¯uk¢™£ôŸÃÁЧQøÀ~YÙÆçógjò{twJÅèµnM©½Ö­É-ŒÞ»[S6Œ¶çÖ4ӌޓ[“]Œþ–[“S¹§&ÇíªÆœ‡aóûG4|é8Nw;ã&NDf8¹‘&+ÜCWõB<¼`3Þ?ªm³â©á º£.y‘¶_D”ò½­cKO¦)=õX²¤½Ĺ£ˆÅü’û0èõº¿ §þe,©¿†›­Øl‘›±ý"¢|ÀN;‘Y±›8+mÄþ³Ý‡Ã÷ÓÕFTsÞðx¢é0èõ:±/ ­|g{4mVø;\•‹cO”.¶_D”Øi'2iì›Z,ò]âÌkÚ‰¦“ïïÆ7µKá{ ÍÉ™×´¥‹íåƒ|oëØÒ“yÊ 4Vî‚ÜD0¨M_!Ô?œ|‘{0èõ>åæITn=ŠöIm–HWÐÏññäbl¿ˆ(°ÓNdš‚Øíï žDM•IªF]ÓŸŽŽ%ó‰Ü…Ao>ø n‡CžxUR¼Ýªþ�MÁà=èÈíØ~Q>`§È,å.Õ,GQ…%Ëñê+ ñäs/`qù1&bÐë}J¤5eOÄ÷uJV¬Ã+¥%xÎÿÊk»M¾†ÈØ~Q>`§È¤ÄÝã}bžôb bÁ*¬{p/ø6*o<xwf"‡cÐëuâîñ/Âç[éìMÄAPÚ 9| Á=o ñ&¯i'÷bûEDù€v"“bA …/ ¶{üúuµÓ>Òu� ¥`< &r½^':ésQ°°݉_ÕNûtU¯‚Œ$^EäFl¿ˆ(°ÓNdVä,¶/AMh|Pi,¸s—–Ã_<å<ÓN.Ä ×ëÆiÛ…âù5%n½!:íK°ô•PüHÏ´“«±ý"¢|ÀN;‘i£ˆtÁÖ ûк“<óþ8KŸ#Ì»0“ 1èÍÊtÞ‰ Ò „"wÆÏ¼½�©õG‘«±ý"¢|ÀN;Q¦”aDîÆÃÝX·nGy†\‹A¯×âvW dYFC  ƒ±¿ ?(£æp�]|L%¹Û/"Êì´™¤ÜîBs<ø•ΡwD<þ-„Ó'ñYWÏX‘+1èõº1 ¶àé-§ÐÅÈÕ:,yxJ+Ö£¼l?ÎGø¸Jr/¶_D”Øi'2k(€ OoCSÏ](#!Ô.™…ÂÒUØTþ2¤óƒÉ¹ƒ^¯»‹Žªã7ÏTn"°á)<\v=±¿ ·~#oDG®Æö‹ˆÈûØÒ“i£¿FYí×P0ŠÀ&Ìzxê{¢PzëQƻǓ 1èõºa|S»;!„_EqÁSظ %z k·òFtäjl¿ˆˆ¼-=™6öÍX¾ãS|úŠÁ¬ -Pa ÖòîñäB z½O‰t¢¦ì‰ø¾~%[?Gßð·Ü I:„ààhòUDîÃö‹ˆò†r g·¢/9›OØÒ“yÊ\ªYŽ¢x à+ÙÖ¾!ôjâÁï>Ôo±ÓN®Ã 7OÄ"èïp4y Û/"ò:%z]­‡°»ì)øü2ÂÉåù„-=e(†Hÿ-Døˆ7ò�½DäVl¿ˆÈ›â}ž NxÏÍ~$ÞÖ¡dÅj,_ÿ;íD™bÐ@nÆú›¸ÏÉ+X—‰ÈsÆ®¡qíÓ(Œ·o… °zÎ÷ Å»ñ£¸{[ü›ØÒ“%4›±þæîsò Öe"òžÜµ¢¾jüþM8p"ˆžˆèª+æå¥¸léÉ ÈÍXó÷9yë2y™ £³ù}l/÷cÅëUØ.äðx¢L1h 7cýÍ?Üçä¬ËD”Ä5î§±Ç vÚ‰2Å ÜŒõ7ÿpŸ“W°.‘÷(ˆ…ÛPWõ&œ¸Œˆ"æƒ8ÙÜp4ÆáñD™bÐ@nÆú›¸ÏÉ+X—‰ÈsÆ® vÑcðÍ~ÏÎ-A¹|WåU(*x ª;M¾,Ÿ°¥'K0h 7cýÍ?Üçä¬ËDä9£Q=ÇÚîa`$„ÚUo!xOb—Q³üt&_—GØÒ“%4›±þzÛ?ü€âââÄ~ž*íØ±#¹‘{ˆºKDä-1ôÞÄÎÀM(ÃP`*}ˆ ž…´`/‚yøÌ7¶ôdÚºuëvõIÈDn!ê,y›,Ë´Sú …’¯&rQw‰ˆ<eìޝœŸî8]PàìͭJ¾,Ÿ°¥'ÓD`;ù ô`2‘[ˆ:KÞ6ÝÙvñc$‘‰úKDä)JäeÏb}Í‘DŸBM Míè‰äáØø8¶ô”‘©Î¶‹ÀXÈDn!ê-yßTgÛy–ÜJÔ_""o¹?uǃ·Rß)^ù3:;ÅðùüÀ–ž22ÕÙvže'·õ–¼/ÕÙvže'""r’^4¬^M»%HRŠ´{ž[t]#ùÑmg¤J3:ÛγìäF¢îR~0:ÛγìDDDNÒ ¹l.J—úá÷O•6Aw˜ÏŒT)cFgÛy–ÜHÔ]Êú³í<ËNž Ü™íèKι[?ÚÛº‘ŸW¯c¤JYÑžmçYvr+vÚó‹öl;ϲ“›)Ñ›èj=„ÝeOÁç—N.'"ò¦!Ïä唌T)+Ú³í<ËNnÅN{~Q϶ó,;¹S ‘ž NxÏÍ~$Þ~¡dÅj,_ÿ;íDä1ôŸ¯AEIÑD?c"å锌T)k"ðåYvr3vÚéµËÍ£ýᤔ±±kh\û4 Åv `õþœïЇ·£¸{[üKDä£Q=gl®ÁQùþ#ßDj8Ýhòeù„QEž0 Ü–ˆìÂúåLnÞ/¬S3ËÉåŸÝ{ÁíP+ê«Ö%nÀtàD=ÑUW0Í›G‘Ç)ݨ_ò2ê{G’ TùÛÖ1ªÈn �“X¿œÉÍû…ujf9¹ü­zoJ4ŒÎæ÷±½Ü¯Wa»t’Ãã‰È#F0pv?Vî?ƒžpá‰Ô¹ú‡Ç“w‰ áÂ… ‰¤ÒÎg’—j¹~ZÈ60Ù‰õ˙ܼ_X§f–“Ëßú÷&®q?ý;N°ÓNDÞ0vµ‹K´—$^ÓN^&*yª±~ZH'/Õrý´mžxÿDvaýr&7ïÖ©™åäòÏî½)ˆ…ÛPWõ&œ¸Œˆ"æƒ8ÙÜp4ÆáñDä1Ül܉­òYƒÁÉ)ÔŸ—÷ï`T‘'Ü@2�&;±~9“›÷ ëÔÌrrùgõÞ’gŸ|³ŸÁ³sKP._ÆUyŠ Âêμ¼9yTl·ïòIí*FyB$ÍV™ÉS™Y'Ó<Àd'Ö/gró~ašYN.ÿ¬Þ[âŽÊ~Ôv#!Ô®z Á{J<¸½Œšåï ‹ñ-yÆ¢á 8Q³’´ÕuM†ïåíˆ"FyB$˜é,O•§2³N¦y €ÉN¬_ÎäæýÂ:5³œ\þÙ½·úobgàf<pÃP`*}ˆ ž…´`/‚|æyÂ("—ÞCY‘…ó±âÕ•(}ògð/^ƒÚP$ùšü¨"O¸=€d�Lvbýr&7ïÖ©™åäòÏê½]Ãñ•sà‹oClç~òaÖæV %_FDäj‰G¾Â7oÎŒ�± ¤2Â÷Ú±§ò$næáévFyÂÉL:ÜþþÉÙX¿œÉÍû…ujf9¹ü³zoJäeÏb}ÍȲ<‘šÚÑáØx"òÑI/| k¿¯vÚG.¢za~Ž*bT‘'D`4]Ï$/Õrý´m`²ë—3¹y¿°NÍ,'—vïí6þýÔ!ÞJ}]§ògtvŠáóDDn5€¶íÏ`~ÍeŒ‰YÑiŸû<^ñ?…GÊy¦¼K ©:Äúi!¼TËõÓB¶y €ÉN¬_ÎäæýÂ:5³œ\þÙ½·^4¬^M»%HRŠ´{ž[t]#ì¶‘{)‘‹8¼u¤ÆËˆ$μûP´øM´†‡“¯È/Œ*ò„ÛHÀd'Ö/gró~ašYN.ÿìÞ[/ä²¹(]ê‡ß?UÚYÜažˆÈ”t57@–?B ëb±›~‡]èåç’Œ*ò„6H0:›­2“§2³N¦y €ÉN¬_ÎäæýÂ:5³œ\þÙ½·~´·uƒW¯‘·õ#°a)¶4]CT¹‡«µËðpáTlZ‰2éòñþñŒ*ò„6H0ÓYž*OefLó�“X¿œÉÍû…ujf9¹üíyoC6žA_rŽˆÈÕF;PUV‡nEœtoÁ†Y‡²ú«ˆ)×P_¶7¢#ïr{�É�˜ìÄúåLnÞ/¬S3ËÉåŸÝ{‹¡ÿ| *JŠÛ™”ü2ÂÉW¹ÚØÔ.—øö7ÌEÁ¬M Œ ÚÓ€µkOðFtä]Ù 3Ïíõ˙ܼ_X§f–“Ë?«÷6zÕsfaÁæÕ<ò-ñØ·Ó݈&_FDän£ˆ\zeE>øžÁÖÖ0†{>ÃAq³Íº Ùi'¯A‚Ñptu>“¼TËõÓB¶y €ÉN¬_ÎäæýÂ:5³Dù%cwp¹+<þX¡T¦xŒšÑß™.eLéFý’—Qß;’\ R0åcÞˆÈCÄ"·ÐÉñðU䉬‚pûû'gcýr&7ïÖ©™e®üsûµìêÆÎîÇÊýgÐ#<‘º WŸâðx""bT‘'´A‚ÑÙl•™<•™u2Íc�Lvbýr&;÷‹Ýûœujf™+ÿÜ>F-«º!®ó\ôXb$^ÓND&Ú¹|ƨ"Oh+º™ÎòTy*±L¿}•~Lóòý‹Jöbýr&;÷‹Ýûœujf™+ÿÜ>F-»ºÃÍÆØ*ŸE0œœBýñ\""oÊ÷ã*£Š<áö�5ß¿¨d/Ö/g²s¿°Íò6såo|M»ò}:û¬ïg]7b·µãDÍ~HÒ^T×5!¾ÇëÙ‰ÈÓòý¸Ê¨"O¸=@Í÷/*Ù‹õË™ìÜ/l³¼Í\ù_Ó¾{ýóXT}#ñÿ§6âÉ'7âTX8󲫚;*ÎÇŠWW¢ôÉŸÁ¿x jC‘äkˆˆÜm``�¡PhRm§~™x]¾`T‘'DE7Ž®Îg’§]®ß¾vZÈ6/» ‡hj¬_Îdç~±{Ÿ³NÍ,så?Å5íket9¨Óž¸{|!|óöàì@ü½Ä‚VÈßkǞʓyùìb"òµ“>]¯ËŒ*ò„¨Ø©:Äúi!<írýöµÓB¶ybûDvaýr&;÷‹Ýûœujf™+]Ó.:é…baí×ãÃáÕNûÈET/Ü‹ /j'"X·n]¢½L•D~>aT‘'Då¶“Û·OùõË™ìÜ/l³¼ÍTù+èjn€,Ÿ@[o4Þ@èôI4~Ö…þ˜õ§®³«hÛþ æ×\¿_tÚç>WüOá‘òFži'"Ϙîl{>eUä Q¹UFg³UfòTb™~û*ý:™æi·Od5Ö/g²s¿Ø½ÏY§f–¹òïG`ÃRliº†¨rWk—áá¨شeÒ9X}¥x¶uC‰\Äá­› 5^F$qæÝ‡¢Åo¢5œýã興œ$ÕÙö|;Ë.0ªÈ¢‚«Ìt–§ÊS‰eúí«ôëdš§Ý>‘ÕX¿œÉÎýb÷>gšY¦Ê´UeuèVÄI÷l˜õw(«¿Š˜r õeû,rnMÝC4r±ø‘[wåv"ò TgÛóí,»À¨"Oˆ n'·oŸòë—3Ù¹_Øfy›©ò»‚Úåß^Bㆹ(˜µ D{°ví ˇœgU7r<”Ÿˆh¦é϶çãYvQEžÈ*HHƒÛ·OùõË™ìÜ/l³¼Í\ùk£æ{[[Ãîù Å£ßê‚tR§=ÇCù‰ˆfšþl{>žeUä QɆ£«ó™äi—ë·¯²ÍÛ'² ë—3Ù¹_ìÞç¬S3Ë|ù+ˆEn¡?¢ C4jýíØ³ª9ÊODäêÙö|=Ë.0ªÈ¢¢§êë§…tò´ËõÛ×N ÙæeäMƒõË™ìÜ/vïsÖ©™eIùÇ‚ØS~=;Ïê½åx(?‘¨gÛóõ,»À¨"O¸=@µ{û”ßX¿œÉÎýÂ6ËÛÌ•¡C(öÝ~y?=Š’ ‡ ß.º̽7½Üå'"J׃í§û’“1ªÈÚŠht6[e&O%–é·¯Ò¯“ižÓ¿Hän¬_Îdç~±{Ÿ³NÍ,Så/†œ?1Õ‡!ËòýtD‚þzÔˆéæ.ܶ¨Cœ}Ý0ÊOD4³Ü~ÜsúûgT‘'´ÑLgyª<•X¦ß¾J¿N¦ynoÈÙX¿œÉÎýb÷>gšY¢ü’±a„[ÞÆÞÏ“ϦÇ;óû×@_r6£¿3]""ò··mNÿ<rä »+¢Û·OùõË™ìÜ/l³¼Í|ù+ˆÅF“Óö²ºn°®‘¸½-rúûgKŸ'쮈nß>å7Ö/g²s¿°Íò6'—¿ÕïuˆœÀím‘Óß?[ú<!*¢Ñptu>“<írýöµÓB¶y JÈN¬_Îdç~±{Ÿ³NÍ,'—¿ÕïuˆœÀím‘Óß?[ú<!*bª±~ZH'O»\¿}í´mƒ²ë—3‰ýâæD3Ç|ù+ˆÝ¡µþ�$i?jÏá›Û#É<kY]7X×ˆÈ ÜÞ9ýý³¥Ï¢"º=Y…mŠ·™Û¿ ¢¡C(/~¾Ù(]ê‡ÿ¹¹(*y-ááäk¬cuÝc]&"'p{[äô÷Ï–ž,Á ÜmCgŽá“¾Ü܈ŠfÛ,o3µ•h,/EyMÂѱäÂ1D{°ví Ü´øÙçV×=Öe"r··ENÿléÉ È•”(ú»þ ‡v¿ˆbß Èa>÷8_°Íò6Sû7„´¤Ýúιr õeû´¸Y°ºî±.‘¸½-rúûgKO–`Ð@î¡ éAðÄAlz®¾ K^ºå[ÐÀN{Þ`›åm¦ö¯ÒúUo¢mH;Òf}í¿Æ’êÑÃ3íDDÓr{[äô÷Ï–ž,Á Üa=•()ôÅëì,”®Þ†ó=ˆÄ(wïàNü_Êl³¼ÍÜþ×´€òeX¿}7¤Ý›ñÊ‚ÙðùB:?ϵ–Õuu™ˆœÀím‘Óß?[z²ƒrõÑû°Æÿ68`Ïç×Gc`Ÿ=°Íò6óûw ÑÞ6®ªÄ ÿ‹¨Ør�—n· ³ºî±.‘¸½-rúûgKO–`Ð@®£ÜC¸ó¼¿}%–¬x·ïÃ1Ïl³¼ÍÜþ½‹½gÔ•>tž»†hrÖ*V×=Öe"r··ENÿléÉ ȽÄ5îßâìþ7yM{a›åmæöo/¶ïÇÇmç ï§sµ¨ø™„¦`z#Öµ V×=Öe"r··ENÿléÉ Èõ8<>¯°Íò6sû·²¿0±NÊTø,v®[2\^lÏJVoˆ(no‹œþþÙÒ“%4kľC[Ý~H>F(2Ÿ#x²}ÃÉP>`›åmæöo/ŽUÆÅÞ0ÂaMºÞ„ÍKkÐ!¦{»Ð$U¡©/ûn»Õuu™ˆœÀím‘Óß?[z²ƒr‡a|S»>ßl”>[‚âr׮ŋE>øÄ¥(Oµç ¶YÞfnÿÞÁå®0Æ’sFC8üë3Ó±›8½ýEHÁH"+V×=Öe"r··ENÿléÉ Èî¡«ú9,¬ýJ|újífì ÞI,Õ¼Šê®{ã/#Ïc›åmÖîßä}Eëy¦ˆ(··ENÿléÉ È-”¾lÛùÄIõ¡�*+Šõ¡M*·ä,¹Û,oû×(eFA,Ü3¡;Þa>ÎèïL—¬dõöˆˆ2áö¶ÈéïŸ-=Y‚A¹Ã0zŽÿÅ>ƒ@zÖk8=ôÀ�Yò(¶YÞæäýkõ{c]&"'p{[äô÷Ï–ž,Á Üaßɯ`Þúß@–åû©¡çz"†gÑÈ›Øfy›“÷¯Õïu™ˆœ gm‘¸ð‰Ð¼+oEäô¶”-=Y‚A¹Ã"ÿ~ ¿=þS6ô#ø¾ó2ú؃÷4¶YÞf~ÿŽ"Ò}õÕ{!IÕ¨kúÂQ{FÞX]÷X—‰È rÓaèôk˜U8~ÿ XÓØkÙ §·¥léÉ Èb7T¿iW<0—R¤XÿÜ2TwÝM®C^Ä6ËÛÌíßQ žÝqÙLá\<ç÷cii1м@ØúGAZ]÷X—‰È ,m‹”[8`#ÖøÑ;¸ÑÜTFän|^ùµ¯¼E¿¯:½-eKO–`Ð@îï´Ë+1»ôyøãyê´ kå«>Š<ƒm–·™Ú¿c—Q3¿%[N¡gâìú¿ú ^¬l¿i¥…¬®{¬ËDä–¶EcWP»è1ø½‹W[QWõ**¶|€`Ÿæ‡TÑi_ò&‚Ù?Ô#Áém)[z²ƒr‡Q ¶·ãÊhr–òÛ,o3µG/¢zÎK¨ïI.PõB^Q• G‹YÓ{·ºî±.‘XÝ)Ñ!Ü™ø!u‘®z¬Y\ŽÝ‡>AÛùV—Êðwå¸iÑ«NoKÙÒ“%4»)6áÓ>öæ½è‡~˜|ãÁxm–~Ù_|‘\ƒÜÎÜ1)‚PíFl”/"'Sº>Ý‹²•‡pIÌßhÅþ½g0”\#V/yü%"'°¿-ßlÁ޳ËWò:Z,¼„Éém)[z2MèŠ$*º~‘)ýçp°âiÆë¬¨·÷Ó Èa‹ÆX‘ã¬[·N·¿Ll·¼CìÏ´%‡aêëÃéá—!§?ožØÖtB¡P"¥#íÙ-gm‘Åíïo!bÑè'•ÓÛR¶ôdÚ¯~õ«ñ�fŠ$d"繇®ê…xxÁf¼tòLrÃt[ùìrÑ2j«ÔT\\œ8#OÞ öiúb¸Ù¸[峃S¤‹èd?gª÷&ê©úSº?"™û¬DDöp{[äô÷Ï–žLHTì©Rºgˆrë/è©Kê¯=øˆÑ,þÑ–fª³í<Ëî-bŸ¦ï.w\ÆÀÝÉråû.töY?úÆè½i;ëf뤹ÏJDd··ENÿlé)#SmçYvr.±/ ­|g{ÔkWEúWåßâ‡Ç{Zª³í<Ëî=b¿¦¯ «W`ÓîÉܽþy,ª¾ˆ‘øáSñä“q*líðx£ÎºšØi'"7q{[äô÷Ï–ž22ÕÙvže'çÆ7µKá3¨·¼¦=?ux–Ý{Ä~M_/ä²¹(]jðøÇµ2ºÇ¬ï´OÕYW;íDä&no‹œþþÙÒSƌζó,;9ró$*·Eû׫^A?ÇÇ{žþl;ϲ{“Ø·éëG{[7rõìµÞiëa¶‰ˆh¦¹½-rúûgKO3:Ûγìä|ÁípÁï¡J ƒ­þ�MÁà=èò‡ö 'ϲ{“Ø·é ãÓ† îêÚ€±+'ñA‡y›L¼7õ1„SuÞY7‰ÈMD»åfNÿì´SV´gÛy–Ü@‰t¢¦ì‰x-BÉŠux¥´Ïù_@ym¢É×·©gÛy–Ý»Ì_½ý…DzûɇYZ0`ñzÚ÷6Uçv"rmÛæFNÿì´SV´gÛy–œOÜ=þEø| !½‰"J›!‡o!¸ç 4Þä5íùBüÈÈN‘w™ ¾zѰe»î1uÊ+ 5t ßÆN»Ê¨óÎúIDnb®Ýu§¿vÚ)kâl;ϲ“;ˆNú\,¬Ew"W;íwÐU½ R0’xÍ,µÓâ•D¹g´D2Áµî~Ýc Œt½‹—ª.à^rI*Fgº”жóÎN;¹ÉTm›8ýý3šð8mà…D”1DÚv¡x~ Bcb^tÚ—`é+/ ø‘ žiw/}×ÙnÍ såÞ‹4âë‰G@ŠÔƒÿhÜ‚' %-nÒyo¢ó~ýúõä‘ó¹ýxçô÷ÏhÂã¼0zé³Ð Rî ëðNlN ¹3~æ½èH­7À.»3°Ý¢l™+÷T×´?Šé¬cî½¹ƒÛÛ6§¿9<NTÀ .$¦Å¿ê´ Ï$/Õrý´`EÊÞ(nwµ$†6º0û úƒ2jÐÕ?œ| Í4/}×ÙnÍ såÞ‹cUµøbÒ# O£~ën4~g}»À:AD^äö¶ÍéïŸG0q&y©–ë§+òèPöÆ0Ø‚§·œBOt#Wë°äáY(­Xò²ý8IŒ™§æ¥ï:Û­™a®Ü®i”îZü¬¼7sp#:""·s{Ûæô÷Ï#‡Çy)8` CÙ»‹Žª¨íŽGä7Øð.;ŒžØ_Ð[¿‘7¢s¶[”-sånt¦ýKü[ÍJÌz¢ £É—Y„u‚ˆ¼Èím›Óß?§VÀTg¯…LóTfÖÉ&eoßÔnÄŽ@¡ÆWQ\ð6nB‰^EÃÚ­¼Cxé»Îvkf˜+÷×´ûæaÍñ«I¾Ê*æÞ‘;¸½msúûç‘ÃãÔ 8]‡Xe&Oeflòè”H'jÊžˆ×§GQ²õsô ‹ÀÁ½¤CZ|J2â¥ï:Û­™a®Ü{ql¿ŒË“îÿ=ú#öüˆÇ:AD^äö¶ÍéïŸGóRpÀ@‡,‹ ¿?»Å;Û-Ê–¹rW‹åî;Ö "ò"··mNÿ<rxœ—‚:DùíeËÉåÎ:AD^äö¶ÍéïŸGPfn4ä<›¼TËõÓ‚y tÈ.¬[Îâ¥ýÁº53œ\î¬DäEnoÛœþþyäð8/ tÈ.¬[ÎÂv‹²e®ÜïàrWú>*ßw¡³Ïú‹hX'ˆÈ‹ÜÞ¶9ýýóÈáqjLuöZÈ4Oeflòè]X·œÅKûƒukf˜+÷^4¬^M»%HÒý´{ýóXT}#ñÿ§6âÉ'7âT8û{ɳN‘‰¶ÍíÉÉxäð8µN×!V™ÉS™Y'›<§™È½X·œÅKûƒukf˜+÷^ÈesQºÔ¿_—ÖÊèc§ˆˆfÇà—hz¬[Î23ûCAìÖŸq+¦$ç­Áº53Ì•{?ÚÛº‘«ûdzN‘Y<rxÜŒ±„o 'g¬Á@‡ìºå,ÖïQ ¶·ãÊ”½²»èª~rØÚk˜Y·f†¹rãÓ† îê~¯»rt %ç¬Ã:ADDfñÈáq"8P‡™ 9Ï(ïóz¼×pöÁåó ¾<²ˤÇ3â´¯ÕN éæ1Ð!»°n9‹õû#†pÃ6¬÷CȲlœ톿¨œv0Wî½ý…‰u&'fmhÁ€µƒ/Û&""2ƒGÁA:bSyÍ{QöÏÿsâf=jÐ{¾¥ÿ¥ì´“K°n9‹õûcŠNûуX_òhüoúPTV‡P”Ãã½@”»Q2Ö‹†í~?©nÔA*{ëë. š*aôw¦KDDDfðÈáq¶á°aýAàˆô!Þ]ÿ4|"()ZÚP$¹‚5è]X·œÅúý‘bx|ìZ¥PT0 v´ lñõìëÖÌ0Wî\ëîÇ佯`¤ë]¼(‹çZ‹u‚ˆˆÌâ‘ÃãÔà ÕÙkÁtÞ`'Ú®D“KÕåm·¾‰ÅEãG?ùÂã׳O¬“¤Ÿ6“Ç@‡ìºå,¹ØJä"êWσÏ7嵈Xß_O`ÝšæÊ½hÄ×á0©¡¦()”´øQí¬DDd§ÓuˆUfòT.´âÈ.?æúAqy><s>™cn{Óå1ÐÉQÖNOV²z{”{÷‡‚X¸;ÌBAÑ ZoÀâ>Ù$¬[3Ã\¹§º¦}V…{ÉWYÅÜ{#""Š;’ÿ’GÙÄ®#°ãY<ŽÅÒç¶ /U1Ðɧ—µÕïuËYìÛ£ˆ\zeE>øJ^…º3iH´r÷îð‘ož`®Ü{qLªÁççƒï§Ž+}°ø ¬DDdggp D:QSö |Ocƒ|yòðRånßùKrÆ trÇéemõûcÝr[ö‡r=MÛPâ7œû Î÷éI9Š;ßã#Þ=ÞÌ•û_pçöÿ‘î3¨¯Þ IªF]ÓŸŽŽ%ó­Å:ADDfñÈáq"8P‡™ 9Ï,ï<Ξü~^ü×(ø›E8pþωᥓÖi}[÷òîñn¥ÖmRiçs™§]nu]`Ýrë÷ÇÂkPß®Øvê´‚|óså>ŠÁ³»Qâ‹×¹xÎïÇÒÒb-xcâþ,Vb ""³xäð8¨m§GÐÎ›É 6¿‰çþæ¡Ä¶S§ñ‘o.&ÊZ-{í>´ó¹ÌÓ.·º.°n9ËÌìži÷Så>v5ó‹P²åz&ή`ð«ßàÅJ>§ˆˆf7SÁrç4j>êMÎYƒNî8½¬­~¬[Î2cí¯i÷ Så>zÕs^B}ïHrªòŠªäÝãG³¨n°N‘Y<rxœ¹Teš'ÎDÜ´e**V£ªFÆgaœ¯I^Ónf{Óå1ÐÉ£²6Ú'ª\ä©Ä2«ë떳غ?bn@M•IÚùst†ïéžÑmÖ­™a®Ü#ÕnÄFùâ¤G¾u}ºe+á’˜¿ÑŠý{Ï`(¹F6X'ˆˆÈ,9<N ¦ê e”»VéƒkDEq™„Pd4ñ²´·7]Ü1*k£}¢ÊEžJ,³º.°n9‹=ûC<êísH‹OlR2º™¦Eìù,4Så>vµ‹›\'ŒÒÃ/CþN6Þ<±-"""3xäð8{‚ƒ.U/†Ï÷ü¯¿9pvü9m-ßÝñ£˜µænò:@×rzY[ýþX·œÅ–ýíDõ‚Çà+.ÃëïÊ´·[çÑñîëe(ö=‰5MßY~Æukf˜+÷n6îÄV9y,K™.¢7ùƒt6X'ˆˆÈ,9<Ζà`(€õ”`s œ¸k¼ž½Š†Õ~HÁ;É%Ö` “;N/k«ßë–³X¿?ÆâÍV%)~ >£GQŽ!ÚÓ€ÕOïEðžµÝvÖ­™aºÜcC¸}7ûy:X'ˆˆÈ,9<Nêcýpcí¼™¼öC¿ÄÿaNS­£àÜ¡ ˜_ù!ÔH» í´nÜQë6©´ó¹ÌÓ.·º.°n9‹õûã.:ª~†%õÝSœIÄ_³Õ]÷’óÖ`ÝšæÊý.w…¡*»ò}:û¬}š€À:ADDfñÈáq"8P;:ÚN 7“×^WWÔ¡]·|Ò:Íž¿F w&åi¦…tóèäŽZo´I¥Ïežv¹ÕuuËY¬ß%1ú'’œ7CXÞ<ÍkÌcÝšæÊ½ «W`ÓnqsÂûi÷ú籨ú"FÄsþOmÄ“OnÄ©0¯i'"¢Üã‘Ããl š°vc`Š»è*¸×&aií×–^Ê@'wœ^ÖV¿?Ö-g±~ŒÆ›­mØèOι¶í¿@m÷prÞ¬[3Ã\¹÷B.›‹Ò¥~øýº´VF÷;íDD4³xäð8580:s©2Ÿ7„Žý»p¸'ª[.ŒáìÇocGéRÔ„¢º¼LþÖ81Í@'wŒÊÚhŸ¨r‘§ˬ® ¬[ÎbËþ¸wû+¢ÇèYÛÊ]ôÞ@éÓ5éÇHg‰ukf˜+÷~´·uO\Îe7Ö ""2‹GSƒƒ©:CåŮ㳃5h‰wÜï/¢§e?ž_°›wïC]ðÖäuâôÓfòèäŽQYíU.òTb™ÕuuËY¬Ù bý=¸>q·ïñG¾|«=#šŽûÈ·hÙ³Ë*6c·tÁAk»n¬[3C”»QJm ÑðŸÐTW IÚ‹êúV„n§wVÝèïL—ˆˆˆÌà‘Ãã, b·pízdòpwe±Q+ÀONî8½¬­~¬[ÎbÍþ0¾F]‰ÅrvFU`ÝšæÊ}‘KÈ_ïÌ.}þçæ¢¨äu´„­½\B` ""³xäð8Ë‚ƒ°ŒRÐðo¹Â@'wL—uä*º®OÜZy'f«ëë–³X³?ì¹±œY¬[3ÃT¹+ݨ_R_ÉV $sã\»önZüÛ4ë™Å#‡Ç‰à@b¬n¬Ÿ6¯Yšè´«yÚ×Úy;òèäŽ(ëTI»O&¦ÃǰÚ_‰ŠŠŠDw^ÖN'æÿùi”T†pªÝ†`ôw¦KV²z{”kö;íùÌT¹v ê‰B,®¿¦Mv õeû´ø×jÖ ""2‹G³,8à™ö¼bº¬ãõ£lv)–êLO‰;1'×É‚ÕuuËY¬Ùì´ç3så>„Žªç0?ñx7AÜÿàß°¿bŠŸ¯GÏ´Ñ ã‘ÃãÔà@{VS–3­¼x§L<w]<›]/å:qVæ1ÐÉ£²6Ú'ª Ÿ×㽆³É9]ÞTë™ÈS‰eV×Ö-g±f°ÓžÏL—{ìZ«·cÇoÏ"Eäü^Ì{òÔ^º3ùì»X'ˆˆÈ,9<N ¦ê ¥•ÇN{^1*k£}¢ºpæ#9u.9§æàûÎËh ZSTb™ÕuuËY¬Ùì´ç3óå.îDޭؼ{/ªëš ß³¼Ã.°N‘Y<rxœeÁ‡ÇçÓe¼¦}wòúõñ´ëŸ[†ê®»€r§ÖÌÓkN"lAlu]`Ýrkö;íùÌ\¹kî_8+^]‰Ò'ÿâ5¨ Y_X'ˆˆÈ,9<βà€ö¼bº¬S^Ó¾ kå«c§L°f(ˆvÿ ýÉV+öÚêöC:ð1BâÙí±0‚'[ÐÑgý#½´X·f†©rWï?oÎŒÄëFÒ á{íØSy’w'"¢Ç#‡Ç‰à@b¬n¬Ÿ6ïl#Îuö%† ^¸Ð†æ÷vâ—«7£ê­ñeÃ?Á¯}Š/µë$§…¶—AÜQë6©´óÓƒh»5ÎKÊ6O»ÜêºÀºå,Öïa|S»>ßl”>[‚âr׮ŋE>øÄ¥¨ƒ Ç±nÍ Så.:é…baí×ãÃáÕNûÈET/ÜË»ÇÑŒã‘ÃãDp vt´A;o&ïüñm(yèÃçÌÅì¿}òµ.È/>‚‡æ£òÃ3‰×è×ÑÎgšÇ@'wÔz£M*í¼:­ÜîB³,Cú×÷ðñ—AÄn‡ðî¾*<Ò21:Ãh=U:yÚåV×Ö-g±~ÜCWõsÉNÙ=\­ÝŒ=Á;‰å¡šWQÝuoüe6`ÝšæÊ}�mÛŸÁüšËH<ÜBtÚç>WüOá‘òFži'"¢Ç#‡ÇÙŒvUcÎÂZt+ F®~€U{Ú㡯‚Xè=,¯¾ˆÑäë¬Æ@'wL—õP�žÞ†¦ž»PFB¨]2 …¥«°©üeHç“/²ŽÕuuËYìØJ_ ¶íü ¢¯¯•• ÅúÐ&•ÛzÝ;ëÖÌ0[îJä"oÝ©ñ2"‰3ï>-~­aë/Ÿ` ""³xäð8580:s©2§„ضÑ=ïÇWáÀé6 ¶íÁ)8éóim/iº<:¹cTÖFûDÕ~h#~ºíŒb ° ýÕ³¨ï‰Bé­ÇOuOÐo#Õ6õy*±ÌêºÀºå,ÖïaôÿŠ}‰mOJ³^Ãé¡ÄùU[XÿY(¦Ê]@Wsdù#ºn!»‰àá÷q8Ð…þ˜õ—N°N‘Y<rxœLÕ2›7Ös +‹x'¥9Ø|ú–á:ªlòÔÏBö3*k£}¢:|;þûÊ·ñmè#lˆ×ÇÊ`@¹‹ž†-Xº¯)åzSmSŸ§ˬ® ¬[ÎbýþÁwò+˜·þ7ñŽ™|?54ã\Odü:f›°nÍ såÞÀ†¥ØÒt QE\>± .@Ŧ•(“ÎÁêq¬DDdgGp |'cÙ¼õ¨Ñ¿ò14ù[ÎJ¨èäŽé²VîàRÍrÅ×ó•ì@kßz5¤}¨ Þ²¼Sdu]`Ýr[öGìΜü ƒ“*£‚XtØÖ§b°nÍ Så>Úª²:tÇë†2Ђ ³þeõWS®¡¾loDGDD3ŽG³'8FøÌ§N¾z=Ürè$ç­Æ@'w2+ë"ý·ÑþpFÔÃKY·œ%wû#‚àžÍ‰K9ìº53L•ûØÔ.—øö7ÌEÁ¬M Œ ÚÓ€µkOðFtDD4ãxäð8¨CŒõõó¦òÎÊØùOÿ/<ß¶Øþ¤ôÐSØPÍgϧ¿½4óÄö)7DY«e¯Ý‚v~º¼öºõ?äèóÔi!<ír«ëë–³X¿?DC‡PnxYR‰úà Øñä7±}Ê=så>ŠÈ¥÷PVäCïlm c¸ç3”$HuAÝèŒì±N‘Y<rxœÔŽŽ¶Ó#hçÍäµú%þóß.A¥hâI"ÿFÅBü¿ÿyS|º¿>òyÚÛK7Nî¨õF›TÚù‰éèe*ŸcüCŽïé~ÈÑnCÐΧÊÓ.Ûµ’ÕÛ£ìX¿?ªÅ¿ÆÑI—õ|€í¥%¨¨9ŸnA×mëŸ}Áº53mAJMA,r ýócÅŒþÎt‰ˆˆÈ 9<Ζà v-{ªñYßäàf4¸?ÿÃäœõèäŽÙ²í¨ÂŨ>ªíÉ8"½ˆù‰›5 ¹kÀ²kÛ­® ¬[ÎbýþˆwÈÂ-س÷sôMª„FUüo|y79o=Ö­™áärg ""³xäð8580:s©Ê(OElt<úU—«×´™j8ý´™<:¹#Ê:URMÚ?_žÂ5•?ä¨y£áOãîñFgºd%«·GÙ±~Œ_Qd\—8<Þ{œ\î¬DDd§F%•é¼äPh_|Ûbû“’ïi”íúÂÑñç§µ½¤éòÔÏBö3*k£}¢ÏkŸôCŽjúõÒËS‰eV×Ö-g±~¤/ùŸÃz÷'—;ë™Å#‡ÇÙäz(´ŠNî8½¬­~¬[ÎbýþH5<>ޙ߿ }ÖwÖU¬[3ÃÉåÎ:ADDfñÈáq¶©®iï8ˆuß%ç¬Ç@'wœ^ÖV¿?Ö-g±~Œ¢ï“c8=0ŸÒ»‚†:p/9kÖ­™áärg ""³xäð8¨CŒõõó¦òZÞÁÿz÷|Ù®]Eÿþ+ý1˜˜{`Í|¦y trG­7Ú¤ÒÎOÎÁ¿5¼ƒ]•k!U½‡}ï}„‹×UêõÒËÓ.·º.°n9‹õû#†°¼"±ÝRâ™Ü<Óî5N.wÖ ""2‹GÁÚÑÑvzí¼©¼f ¥"Ø} =޲Ÿ&†Å?°Žf>Ó<ñ7(7DY«e¯Ý‚vþþt¡CøÛ‡ ðÐç`©)þÛìÿŒâŸ¿pìþuî®7.<ír«ëë–³X¿?âö†­¨xû÷šKz~·+J1oýèè7ÿ˜¯t±nÍ '—;ë™Å#‡ÇÙ„?ÂúŠý¨Ÿ~¢þíÕ(™·u}–_Ë®b “;fËZ¹Ùˆò'W¡æœæÜÊ]ô4lÁÚÆŽ¿¿ë–³X¿?DoÜÀ­IQAìFÊ_ƒÆðHr™õX·f†“Ëu‚ˆˆÌâ‘ÃãÔàÀèÌ¥Êt^ô{ôÞºf*±üËËŸÆË½­“¤Ÿ6“Ç@'wŒÊÚhŸ¨Úë~Øvl¢s®æ)½õøiEÚS¬7Õ6õy*±ÌêºÀºå,¹ÙÃè‘WaVÉ´êîÏa%Ö­™áärg ""³xäð858˜ª3”ižJ,;R‹³J±µõ{vÚ=À¨¬ö‰*xò ,^õ[ %{퉼؟Ѿÿ%<³ëøuB5Õ6õy*±ÌêºÀºå,^Ú¬[3ÃÉåÎ:ADDfñÈáq ~)æË:‚Píj,ð¯ÃvIÂîÍ+±`ö#ðÍ{燜ÿìkÖ-ga»EÙrr¹³N‘Y<rxƒ_ÊDFe­ÜEoÛTm(‡¿¬[ªOâÒ =× []X·œ…íeËÉåÎ:ADDfñÈáq"8P‡ë‡kç3ÉKµ\?-X‘Ç@'wÔz£M*í|.ó´Ë­® ¬[Îâ¥ýÁº53œ\î¬DDd'‚µ££íôÚùLòR-×O Vä1ÐɵÞh“J;?1¼9¡>/øçºïNÌkóÔi!<ír«ëë–³xi°nÍ '—;ë™Å#‡Ç1ø¥L˜.ëð l—Ž£-DP“ÎÕþ?“N"Øu‘äóÚ­`u]`Ýr¶[”-'—;ë™Å#‡Ç©ÁÑ™KU¦y*3ëd“Ç@'wŒÊÚhŸ¨.4K(¯#Ö3N¡pÁ„‡ØFÊmêòTb™Ø¦•¬ÞeÇKûƒukfŒ·;ÎMDDDfðÈáqjp0Ug(Ó<•™u²Éc “;Fem´OTš÷ã—Û>@o8Œp<577'þ½Þô:þqK]b¾7t ÒÎOТÛFÊmêòTb™ÕuuËY¼´?X·ˆˆˆ([Œ&<ŽÁ/eÂtYG®¢ëúpræ¾ÑP~}º/>¥ 6Њíóö ψÕuuËYØnÝÇhÂãüR&DY§J»‚ÚE…(Z} }—¶ýé’•¬ÞeÇKûƒu‹ˆˆˆ²ÅhÂãDÀ¨1Ö7ÖÎg’—j¹~Z°"Áoî¨õF›TÚùôó†Ñ\W‹†3çs“óÒÛ¦v¹ÕuuËY¼´?X·ˆˆˆ([Œ&<ŽÁ/eÂéemõûcÝr¶[DDDD÷1šð85`4:s©Ê4OeflòüæŽQYíÕxÞitŸþÕ’„Õ•;м¨’Îzéå©Ä2«ëë–³xi°nQ¶Mxœ0NÕÊ4OeflòüæŽQYíÕ… üvåø |(œû,JKŸFéì'°`G š¿´¦¨Ä2«ëë–³xi°nQ¶Mxƒ_ʄٲ Õ`¾ïliº–8»ž»…¯ª× 2p÷žËŠÕuuËYÄþðR""""Ê£ 3 Ýœ(7Ì–õhW5æ,®G¯¾w–±B "ñ”·ÑbõÞ­® ¬[î$Ë2~õ«_%çr﫯¾ÂK/½”œ#"""²#UJ…BX¸par.÷§~ø!¹„f’Øêðtý0uíüÄt´ µ+_ƒô‡ShnnF8FóÇâíŠç°²¾#1ßôîf¬}÷³Éë%içSåi—³ÓNºuëðÅ_$çfFqq1®_¿žœ#"""²#UJ˜é3VÂŽ;f<�§qf;ícßÔb‘Ïxt„6ýÕ ߥ¸9:Ÿ*O»\l+éþ”îöÈYÄ~?øÍ$Ñn¾ÿþûÉ9""""ë1R¥'œ±_¼šy¦;±Ê 4Vî‚ÜD08EêìEÄ‚!òÓ½?Q—ÄÈ1‚$ì´»ÏLR9å}‘w1R¥'œ±gEð>ȸ«=Ó-Lš>óþw“òñ¼|ßy-Á)Ö‹O§›§ËRu²ÕκȉvïrÂè •™ˆˆˆˆˆÌb¤J‰ë1r¦H ‘×DÓÌ2ÝioÞ‹çK_ÄnI‚OñwbýsËPyä \žÂ©5óðäš“hŽwâUSnS—§ËôïOßYW;íÞå„ÑA*1<Þ)? ‘÷0R¥D'Ù)'ïÆì ¦;±ae³K±Ôï‡RZ†µòUŒ)×':ía ‡Ç§ê¬«‰vï7€sʨñçx?DDDDv`¤JŽ»ïÆ<óLwb;Ñv%šœ±ŸxSuÖ3IäN¤?6Љˆˆˆ¬ÆH•uÆJàݘgžèĪÃÓõÃÔµóÓ}gÐpnP—׆†ýWtÜ?µ>9/m&©óÚåâý‰z¢ít%^gìMN¤râ{""""o`§=Ï9ñŒ•èh9í=åÑá5ê, Úù‰é° ¿®Ã<ždžÀMˆn»ázIéäi—‹m âǦ©:ïì´{“)ꢨsé>fˆˆˆ(]ì´ç9§žv‘Ÿ9¢óaJ¸[6×à¨,'îêH‡$”—KhèèKtÚ­¤©:ïì´{“ÓF©Äy§ý˜@DDDîÇN{žsâ+wcžYúί6©& ÿã)ÿäË䜚w]6à—‡NO~­nZ$£¿3]2¢ï¼³Óî=N¤m©hS‰ˆˆˆ¬ÄN{žsê+˜ónÌ3ǨS¬v°U“¦›ß«Ò„ÃáD#8½Ѹy~TQ‡öTëMµM]žJ,KÕiW©wŽÖð'_;.†Æ‹ºéÄ6•ˆˆˆÜ‹ö<æä3V‚xo¼ó̘®Sü€T×´û@:?˜|‘uL¿?ò §ŽR‰÷'~X """² #ß<æô»;ýýy™éNqøcTÕ|Ž`0x?=„­[O⻘ÕW´³ÓžÏœ::H%~P×¶Y…‘/9–ÌEçŒwcÎ=Qîêðtý0uíüÄô½èþóˆ.ïŽoû'”7Þ°íîñDNäôˆˆˆÈ]ù’£ñnÌ3Ãt§=y¦½®®.‘Ä™öºßÀ–ú{<QÕÑTë%¥“§]ÎN»W…ñiCwuƒ3Æ®œÄCÉ9ç#„Ĉˆˆˆ¬ÀÈ׳¼üònÌ3Ãt§8Å5í¾¹q¼û^òEÖ1ýþÈ%z!û ¨G>ÌÚЂ믴°…¸‡“ïBDDDîÂÈ׳¼üªwcæùÜe®§=Ó-LšnÞu»ê'ß=>| ‘˜2õz&òTb™Ñû#/èEÃv ¿×>ï_®ƒTö<Ö×]@¿KÚ-""""+1òõ,¿”9Óö íhoO¯óižJ,c§Ý«"¸ÖÝŸ¸Â} FºÞŋҹx.QþaäëY ~)sNï³ÓîU½øè@#¾NŽØO=5í@I¡„`,ù2·P†Ð}úCTK¤êм(0%"""“ùz–Ç‚_Œ"Ò}õÕ{!IÕ¨kúÂѱdYvš©.ë™……Õ_Áú»#ØHéÇÙ¥ðøP8÷YøýÏ£töX°£aƒHDDDÞÅÈ׳<üÆ;ìƒgw£Äÿ…sñœß¥¥Å(ZðááäkÈJ¢®¨ÃÓõÃÔµó¹ÌÓ.HǤ|~^ó¼ÿxê¸Òçº3Ôc¡Ì÷=ƒ-M×î¿÷Ø-|U½•›ºQPDDDD©1òõ,ï¿»ŒšùE(Ùr =g×G0øÕoðb¥{nªç&¦;Å‘«èº®ÿeßw^FŸ û‡v¯F×'ø]Õ›8pâ2"Š‚X8ˆ“ÍèsÙÙéÑ®jÌY\^ýÛËX!‘ì4OºÑtùz–w‚_Œ^Dõœ—Pß;’\ ê…¼¢*9Ô1F¿–1êkÏt “¦›÷âùÒ±[\»OñwbýsËPyä \žÂ©5óðäš“h>x]¥ŸÖΫÄ2vÚ=jì j=ßìgðìܔ˗qU^…¢‚ǰ ºÑäË\!Ú…Ú•¯Aþ÷/Q꽈O¥—±²¾#1ãô;Ø{úVr""""cŒ|½ÊKÁ/"ÕnÄFùâýà7܃®O÷¢lå!\ó7Z±ï¸ç ôÎf¾Ó.á§?žƒ¥~?üñTZZšø×ï_†¥ÒG8ÏN;¥#ñµÝÃÀHµ«ÞBðžÄ.£fù;èM¾Îƾ©Å"qIO¼®N•^&ã;þÞHDDDS`äëU ~Õ ŒÞIéá—!§?O™åiÊ`'Ú®äî§ Óï\"†¾À›Ø™¸æ{ C]¨ ô!6xÒ‚½îº¦r•» ·O¾DéÔÙ‹;íDDD4F¾žå¡à7þYn6îÄVù¬qÐ;‘.¢7â¦_#œËt§¸ï Î ên®Å•†tˆ‹,ÆN»G]Ãñ•sà?ÂMJ>ÌÚÜ겑4Qôœ¨Âéœ݉7†~‚掛ã׳¥‰‘¯Wy*øUëù{¶Hî¿>ß%&×™ÉI;l}b:,ÃoðÚ‚‚DZ!y§lÃõ’\oúD¤ô@^ö,Ö×,Ë©¡©=.ûAn|xü#˜]ºs‹WC¾ÖùÅ'Pà[ŒêK‘䫈ˆˆˆ¦ÇÈ׫<üzëú|wbµc­ï`kç'¦Ã'°}ûû‰›Ð‰$êš´³?» u}ÓvÚÓÉÓ.g§Ý«Ärm8¼•¨3n–¸{üÂZt+ F®~€U{ÚqO|¾Ð{X^}DDDDébäëYÞ ~=u}¾K˜îß»î?ëï'p]ÖA:?˜œ·;í^Ƨ AÜÕ5ZcWN⃗ÝfR #°m¢êG rCÃlÛƒê#߈ˆˆˆÒÀÈ׳<üzêú|w0êkÏt “¦›ß«ґ‰»û777#ÜÛ…¦í¥øQEÚS­7Õ6uy*±Œv¯ê…ì/LìßÉɇYZ0à¢_ ÇzŽaeñ#Ÿe6ó1oDDDd#_ÏòNðë­ëóÝA”¯ž¾=iºYBéû'ž ŸGå¡Ó©×›j›º<•XfôþÈ zѰe;Þ?zÿ’Y®ƒT^©¡ý.j·”ïd,›·5ŸC¤ch:óèç½8ˆˆˆÈF¾žåà7õõùgêN¾ˆ¬dºS> ©úœŸt7ÿN\éÚry;í^Áµî~]Q0Òõ.^ªº€{É%î0Œð™Oœ|ýN,¸åõW9<žˆˆˆÒÆÈ׳¼ü¦¸>?ÄžòÃèáY+Ë™îdžp;2ˆîÓ¢ZÜŒ®ú4o jÓ®a§Ý«zñÑF|¼Ìb<õà?·àÉBÉ]—ÂD/ãP¹Ñ¡xò= õ玎%_LDDD”#_ÏòPð‹B‡*Pì3~ EɆC†Å}™É*¢lÕáéúaêÚù‰i¥gw”â¡‚‡ð£ÙÿøýÏcÎÿ3~²ò�ÂÉU ×KJ'O»\¼?ò¢T—õÄ¿çÒ¹xKà£Ux¢¸Õ“F;É8"½ˆùëŸn@s×�Û-"""š#_ÏòNð~QõÄ\TTžüÊG$øç'¯mîÂmF¿–uŨ³,hçÕé±P æûžÁÏßjÄY5¯=€ßW¾€Ê4žÓžNžv¹xäE½8VU‹/&]fqõ[w£ñ;—] »Ž–=Õø¬oò/¤£±®ñ»äÑôùz–‡‚_qmhËÛØûYxòY©xg~ÿºèKÎ’uÌvŠϤ^\^ý'a+ÔÇ[Æ`Õ• ì´{•Ñe=€Ò]‹Ÿ•7â¦Eõ'7âíÖÙZH;ƒ¡;ñÏŸ~‚掛¼žˆˆˆLaäëY^ ~Å5ígñÿHœ¸Œˆ"æƒ8Ù܉>^Ïn £N±öL·0iúìQlû+ ÿÇÄ¥ã|»ˆO¥—ñ?vJÌß8ýöž¾õÀ6RnS—§ËØi÷*£¿Ä¿Õ¬Ä¬'ªÐ1ùžnŽ6öM-ùÁìÒ…˜[¼òµ.È/>ßbT_rÕX'"""šaŒ|=Ë;Á/Æ® vÑcðÍ~ÏÎ-A¹|WåU(*x ª;M¾Œ¬c¶Ó~þø6”<¤¿ãÁôð2MÁÔsý´v^%–‰m‘¥¸¬Ç7kŽ_ÅHòUn}²°ÝŠ‚‘«`Õžvˆ;oÄBïayõE¸© &""¢™ÅÈ׳¼übô"ªçøQÛ= Œ„P»ê-ï)@ì2j–¿ƒ.F¿–uÅå+wAn×þHd:{±`p„é÷G.Ñ‹cûe\žtÍïÑqá€r%ŒÀ¶} ˆªø÷#04ŒÁ¶=X ^2BDDD”F¾žå¡à7ÞöÞÄÎÄ ÍÆ0Ø…Ê@bƒg!-Øë²;ểéNqä*:þý&îNêàûÎËè³á vÚ½JA,6‚høNÔì‡$íEu]“+Ÿ1Ös +‹ÿ±tRšƒÍ§o%_EDDD4=F¾žåàc×p|¥ÑóŽ}˜µ¹CÉ—‘uDùªÃÓõÃÔµóÓácXí¯DEEE"I’ÿwþù¿-@u×Ýxu¼Ž_½ðàï_Øp¼j·!hçSåi—‹÷G^4ŠÈ¥÷PVäCAá|¬xu%JŸüü‹× 6ä®ëÀ•ïd,›—|ºÅD:†¦sßZ2Ú„ˆˆˆò#_ÏòNð ¥ò²g±¾æˆ&ø•ÑÐÔŽžÇÆÛÁ|§]FÙìRüci)JãÉï÷'þ--]€µòUŒ±ÓNéPºQ¿¤¾y{pv`ˆ!­¾×Ž=•'Ýw÷ø3Ÿ"8È6Šˆˆˆ²ÃÈ׫<üлŷádð–ûF ¸”éNñ`'Ú®äî–€ì´{”h§ ÅÂگǿëj»5rÕ y) å'F¾^Åà—² :Å©’êÁ³áD8Ø„ºê½¨Xý*ê[C¸S&!\oünðfyÑ�Ú¶?ƒù5—1&fE»5÷y¼â ¸îQ•Óûâ‹/ðÒK/%爈ˆˆŒ1òõ¬ü ~¹~ø!¹„²aÔ)žºóÝŠ·þw‰µo6æüã?â¹¹O dË'hþrúN»jª<•XÆN»w)‘‹8¼u¤ÆËˆ$~|ô¡hñ›h '_á-ÅÅʼnö‹ˆˆˆ(F¾–oÁ¯8c%Î\QöÌvŠ•žz,ñ=Š’Í!t;ù@Aå.z¶`mã Ë/k`§ÝëÆÜC,þ_äÖD=ö#£Ö¯~õ+¼ÿþûÉ9"""¢1òõ¼ü ~E‡}ÇŽÉ9ʆÙNñhGž(X†úÞd‡=Ié­G™ Ϥf§¼â«¯¾ÂÂ… “sDDDDbäKž!†Æ‹Î‡ÈgO”£:<]?L];?1}ïªæ-Aå‘/’yÃh~§K~2Ï×w'δ®—”Nžv9;íÞ$~tknnNÎåÑi¿~ýzrŽˆˆˆh2F¾%ß|<뜯A¿ÕLwÚãÝòX¸•?ÿ¼ö^bÄï*þ+þþŸ¶ãRò±|ÆëK'O»œvo×wçcçU çy"""J…‘¯Gåkç•wc¶FFbåÂÁìÙ¼»¥jÔ5ý áhâ6ˆ–c§Ý{Dg]tÚóQ>v"""š#_Ê×3VïÆœ=£N±öL·0yZ½{¼…%Ëñââ¹xò¹°¸üüálpŠõ¦Úæä<•XÆN»û‰k¹µ—²äëè •"/ÊD%Ú0Ž""""‘¯ˆÎ¹6øÍ÷³6ân̲,'çÆ¯ug…cúf��0åIDATàÙ‘OŸÙN{ðä.üÃCyR¼œc Úë~‰rî߯‹ûšR®7Õ6õy*±Œv÷m”ØbdŒ¾jÕ*?~<™›D›µwïÞD[µnݺDÙ°ž‘ÀˆÀÔ�O ~ß~ûm¼öÚkÉÜü£ÞYü+:ðjç  %_AÓ1ÛYˆ%¼€ÚîñÇ Æ‚U‰NûH×,äÝãÉ€¶cªMj;–O?´‰¶é7ÞÀúOÿé² """bäëâ 6ÐÓ|ùüªu}ð+ï*Ÿ>Q^¦DÎb{ñÔ„¢‰ÙXpæ.-‡¿x6Êùœv2ªÝÒ&Ñvy•hDˆ>»H⇠""""F¾ ÎÒ|ÚäõkEÅS¿"QúDy©ÃÓõÃÔµó÷§Gé:‚Ÿ—ýûþК8óþ£‚ÿóWÿáØx—Ýx½qéäi—sºŸøMûýÔ'ñö2Ñi?¬}v5y½ ˆˆˆ(=Œ|=@FŸšD`èõ³Ì⌜ÑgW‡™š#ÊÌ åvšerÃçèü býA®ù®>Ë‡Æ fß9ÏTí–-“DˆTÊ@$í½9ˆˆˆ(1òõˆTg™År¯wØUSuÜ9ÌÔQfzÚ3ݤéÓPöÔËhê¹ e$„mÿð KWaSùËXý»ÏS¯7Õ6uy*±Ìèý‘ûµ[ùð#£žø‘B_"yùò�"""J#_0 úòñ±o©:îùræÎ*¢Ìôôhítû¡øé¶cP0ŠÀ&<öWÏ¢¾' ¥·?­¨C{Šõ¦Ú¦>O%–½?r}»•v•QΛg‘ÀÈ×#Äó|õ_¾>§Ý¨ãÎa¦æˆ23cì›°|ǧø6ô6?‚YZ0 ÜEOìåè(m»•?2êé;î|L% Œ|=B»Ú`/߇Uê;îfjŽ(3S”;¸T³Eñõ|%;ÐÚ7„ž@ $iê‚·Øi'Cj»Åû}âæsj»EDDD$0*ð5Ðg¯hrÇÃLÍQËÍ(i‡­OÂÙÀg8Ón”7y^Ÿgôw¦Kä b_òGµÉDyˆ2ˆˆˆˆF¾"n¶Æk·'Sƒ_žÅ3Gt¤Ô޵¾ƒ­Ïežv9;í¹¡þ@â…d%£í»5‘óñˆ#FÁ’[“•Œ¶ïÖä%Nÿ<^+o§òJ9[ý9X.DDD”K<b爎´g ý´y*3ë˜É³3ø5ó>´ó*3ëdš§Ò/÷ZðkôyôŸY?mwžJ,óZy;•WÊÙêÏÁr!""¢\â;GDp¤ï„è§­ÈS™YÇLžÁ¯™÷¡W™Y'Ó<•~¹×‚_£Ï£ÿÌúi»óTb™×ÊÛ©¼RÎV– åØ9 ÏËÅ™œþy¼VÞNÅï§1– åØ9 ÏËÅ™œþy¼VÞNÅï§1– åØ9¢ Ž´Ã~õC€³ÍKµ\?-d’gGð›êo éä¥Z®Ÿ²ÍKµÜkÁ¯v¿¨I¥Ïežv¹×ÊÛ©¼RÎV– åØ9¢ Ž´í´m^ªåúi!“<;‚ßTKH'/Õrý´m^ªå^ ~µûEM*í|.ó´Ë½VÞN5#å@øÖprÆV¯Ô?~ˆˆˆÜGì™™àh·Âˆ%ç¬Ààטׂ_§¯•·SY^΃h»MÎQ0ÒUƒrorÞV¯Ô?~ˆˆˆÜGìÁ‘öL¡ Ÿ6—×ö¶nœ×å©ë|yÕ!œœW%òtóªéòì ~ͼí¼ÊÌ:™æ©ô˽ü}ýgÖOÛ§˼VÞNey9‡?†õqT–!¦:HþŸÀÏN»çÿKDDDöà;GDp¤ï„è§Íåõ¢aÃfl–$Hñ¤~Ų?E‘_f§=nrž‚/ŸàVLIÌ¥¿Þ}úå^ ~>þ3ë§íÎS‰e^+o§²¼œSvÚ?Ļ럆/þ÷ ŠV 6I®` «?‡õõoüGØÑ䜡‘‹?ÂZ…ß#"""wà;G¬ŽÆ;íïÕ¿2޾»%¾xð[ðÊj»0Õ`T³œüŽb°½W¦Œ~ú ÈaëÎYy-øuúçñZy;•åål8<~áÖ7±¸èa.x°µ×³ Vëë_êö|<Å!©lâGX«ð{DDDä<bçˆõÁ‘Ñ™±ðç?Ž‚Âg±#pÝÒ¡”‚óƒß ۰þÝ ßd:´þ¢rvÚ§àôÏãµòv*ÛËY¹ƒ®úu˜ë{Ååu¸™ò×¶ŒYý9¬/oüKDDDöà;G´Á‘vد~pæyçqæÈ.<?û¯ñÐß.Fí¥;ñ.|6Û3γ#øMõ·„tò&/¡yÏËøçÍo$^q™ÀÄåG⟋ÿ:þ7BQYþp6h¸=ý´ Î§ZîµàW»_Ô¤ÒÎç2O»ÜkåíT¶–sì:;žEaÁãX,}Žpòr;Xý9¬/oüKDDDöà;G´Á‘¶ó¡2ËFóÁO~ôWø›ù¿À;ÍmÉå™n/užÁoª¿%¤“7yù(>ÿÝïÐp^·NìZ¥ð7á'+$:“×ËäoÝ_îµàW»_Ô¤ÒÎç2O»ÜkåíTv•³éDMÙ(ð= òeD´ýuånßùKrÆVûëß("]õX=÷QøŠ_™øÖjü¹Ø9b[p¤ÜÁ¥šå(*x%d„& /ÅÝÛC޾Ûp.‚F%rõ«çÁ盃òÚÎÉ‹x-øuúçñZy;•õå<†hÏ)l)yE/áÀù??Ð>)wN£æ£|¾{ü0Â7° ða-~­6\ã¯â÷ˆˆˆÈxÄÎiÏ úi³yJôÞúùÿ‰‡ þ3ÊœCŸfxéø:-Ô4çõÝãcáìX0 ó V¿sj¢ƒ ~^¥ÏSé—{-øŸÇé‰ìgu9+áãx¹È÷À¾œœ ó÷‘o.ÿ–ˆˆˆìÁ#vŽˆàHßÑÓO›ÊSzÑøòìÄv§LyûÈ·Qœùð5”Å;¾’W!ý¡uò6¾hÅ>òhJ3Q¯óõL»ø¶iË3ð‰Îé~„MPú&~„µ Û-"""wà;Gf$8rAgK¹(wÑÓ´ %>ŠÊ~ƒó}úᥣ¸ø=>âÝ㉦43íV^ÓnòGX«ˆm‘óñˆ#3åã5í#7®A‘p§L+øÈ7¢iØW¯Gp;trÍþÄÓªjd|ÖFÔŽ»­ÅYý9fäûÎ3íDDDy‹GìÑGÚ¡ÕúaÖæóÄn‡ð®´¿¬¨@Å/·B:XptL÷ºt·7.UžÁoª¿%¤“—j¹~ZŸ?Ÿ8Ó¾·¹Ý oªõî'•:Ïà—¼È–z|’Ã?¬]Çm «?‡-å2-^ÓNDD”¯xÄÎ{‚£a„[ßÄbƒ;‰ë¸åõ ²úsX½½t)wïL\Ón…™úDv²¾^Gp©z1|¾§àýȳƒ¶µ@~wüÅbÖšS¸iqÃåžvküGØÓr ª$ RU äÏ:'~„µÛ-"""wà;GDpdt–Ve>OAôÒAüä¡ÿ [ú2Þ•[Ð&‚ßàYäwðréãxè±24Ý?/3ýöÆM—ggðkæ}hçU¬Óþ9B§PS%¡¢b¶HѾ—ø!cªíM•§Ò/gðK^dy½ `ý#%Øž1V¢WѰÚ)x'¹Äv¶[Öqÿ°DDDd±sDGúŽž~Ú\^?ëŸÄß.?€–öûyª ¾ÀÉ=ÿŒ§¥vÜKÌO·½qÓåYäi·gæ}hçU÷—+ˆ…?Çêùÿ{bû“’ïil/ãÌÛÓOkçUúåÚÏAäV×ëÑŽ*Ì^Rž”½Oéx ‹«/ÂÊAòVë¿ïã?Â.ð=‚bÿ¶~„}Ýÿ|³6Lük¶[DDDîÀ#vŽXv jöK¨ï™â.Ëù U‹¢ËÂè×ùÁo\´Õ ƒ¯¸ ¯¿+#Ðv>üžG[@Æ»¯—¡Ø÷$Ö4}géY+¿äEV×ëXPÂl)8õuÙa+¦{IÎo·Æ„-ÞÜòà£ÞñDŒ†õ?ÂZ…í‘;ðˆ#–G± ¤Ù‚SF¶½WTMósœüŽa(P‰GŠ_C Ïè1D{°úé½Þ³®ÛÎà—¼Èòz=ЄµJÎ>HÁ½6 Kk¿vôj–—‹G~„%"""{ðˆ#ÚàH;´Z?Ì:ý¼OðÖÒ• M¾K¼ö5¸wÿ÷?nÇñ`:ÛK/ÏŽà7ÕßÒÉ›¼ü.ýò¿âvOý“óÔù3è¨ZƒÊ#4È3ó·î/gðK^d}½BÇþ]8ÜMÎk!Úû)v”.EMÈ(?sv´[–òȰDDDd±sDi;~Úi!ý¼ þxh3*_M #UóÔ¤D¿E`Çsxj‹ŒóëLµ½ôòì~Sý-!¼ÉË#¨«(EEÝ™ÄÜä<u¾aysâ5æ™ù[÷—3ø%/²¤^ÇnáÚõÈý3ç±ëøì` Z&uÜ£èiÙÕË*°y÷>Ôoå×™vüMkwLükèÞYl_Z‡n †í‘;ðˆ#ÖGÃè¿ö"AÛ0Ÿýoµ|‹‘ä1¼t¤çSìY½›wAª bÐÁAžõAã(š¶ac ?9oä6Ú¶ÿµÝÃÉùì1ø%/²¤^]£®Œ"6je·|jÎo·ÜëxgâGX=õGاk.Ãʇ¿±Ý"""r±sDGFgiUéå¬ÓÜ-^œqoo?Ÿœ»/½í3“ggðkæ}hçUËï]ÀþÊ£8ù¥Á:Ê]ôÞÀœ§¶ ”Œ~'ò’ôÓÚy•~9ƒ_ò"Kêµ 7–3ËÎv+sÞû–ˆˆˆìÁ#vŽˆàHßÑÓOOŸgÔiO¯S©ŸÎ4ÏÎà×ÌûÐ΋À6Ö߃SgÎ'—?òín8€ž‘ñ7±Î—'вg-–UlFÅêŽßÑI¿=ý´v^¥_Îà—¼È’zÍN{ FרÇÛ®˜•»›Û-"""wà;Gì òrË™Áo,qºŒ$çÇ)±˜¥Ïzž ƒ_ò"Kê5;í)x¯='"""{ðˆ# òŒY³=ãN{.1ø%/²¤^³Óž;íDDD”±sDi‡Vë‡YO÷1¤g™òÌŸOµ\?-d’gGð›êo é䉻Á7KË':íÚ×i§…lóR-gðK^dI½f§=vÚ‰ˆˆ(=<bçˆ68Òvü´ÓÂÔyì´å±ÓNdKê5;í)°ÓNDDDéá;Gä³f{OdKêuôÎuöAÜR¹Ý…fY†Üp½# b·C8ÝxŸuõÙÚ©wf»ÅN;¥‡GìÁ‘ÑYZUzywÑ}îÁø´2€®æHRÞûøl¼ß:€Ðé“hü¬ ý1%Íí3“ggðkæ}hçÕN{EÝ™´×É4O¥_Îà—¼Èòz=À†§·¡©ç.”‘j—ÌBaé*l*ÒùÁ䋬gg»•9vÚ‰ˆˆ(=<b爎ô=ý´¹¼~6,ÅÏßjÄÙ ÄÕÚex¸p*6­D™tg ×g¼½qÓåÙüšyÚyvÚ‰ìau½íø5Êj¿†‚Q 6aÖÃ+Pß…Ò[o·ìBog»•¹ñaûO¥©lC]Õ›8pâ2"Š˜âds'úb>˜]‡í‘;ðˆ#–G£¨*«Cw<žSZ°aÖß¡¬þ*bÊ5Ô—í³íì3ƒ_Ñî?¡³?ù¡cß¡­n?¤#χ<Ù‚Ž¾áñ|0ø%/²º^}ó–ïø߆>†âG0kC ”»èiØ‚µ7CèíàÌvKcì j=ßìgðìܔ˗qU^…¢‚ǰ ºÑäˬÆv‹ˆˆÈxÄÎ[‚¼åß^Bㆹ(˜µ D{°ví Ü´)úu|ð‹a|S»>ßl”>[‚âr׮ŋE>øÄ¥¨=Ãà—¼Èòz­ÜÁ¥šåñÎh|%;ÐÚ7„ž@ $iê‚·ò·Ó>zÕsü¨íÄe«ÞBð^¼4b—Q³üt&_g1¶[DDDîÀ#vŽhƒ#íÐjý0ëôóÎã̇¯¡,Þ-ð=ƒŸ¿ÓŒs'â®®ÀêíuLF¿“×ÉôoÝŸ¶#øMõ·„tò&/¿‡#•ÿ s·‹w�îá£m˱¦®5±<Tó**üqⵓ×ËäoÝ_Îà—¼ÈžzC¤ÿ"Úaß±aD]4 Üúr‰¡/ð&vnÆÛ­1 v¡2ЇØàYH öºfäÙƒGìÑGÚŽŸvZ0›‹ÜB$61/ÖÖÖžx .×O ™äÙü¦ú[B:yúåÁ–xyÕA Äû�NÀ‹/ÀP¬mRù¤ëÞõëiçSå¥ZÎà—¼(Wõ:ÜrqyOrÞjv´[–»†ã+çÀß®ØöýäìͭJ¾Ìj–"""²Ø9’³à(ÄžòÃè±é¬•ÕŸÃúrFÏñ_ Ø§~ãiÖk8=4–|µ¬ÿD3Ïòz½ŒCåFÓxò= õçŽZÿµúsX½=(=—=‹õ5G ‹Gâ%SCS;zÄ}9lbùç """[ðˆ#"82:K«2ŸAèPþö!ƒà·àQ—íD]ó'®~{ã¦ËÛ·’v{fÞ‡v^5¾üK|'¿‚yëI’&‚_iϯñÞÉ3Y—‡J¿Üêr!r«ëõhGž(®@õÑûS‘ŽH/b~ü;+Ë hî°üÚv;Û-kŒß=þ¤×õa»EDDä<b爎ô=ý´©<q÷ø'æbIåÿšÔ9•HðÏ_-ñeÒ¯àv2œv{IÓåÙüšyÚyÕÄòØ œ9ù>Ÿbýtºy*ýr¿äE–×ëØu´ì©Æg}“ÂvĺÆï’sÖ³³Ý²FŸ>‡!]}ìÊI|Ða×àx¶[DDDnÁ#vŽX #Üò6ö~ž|f&ޙ߿îú’³Vs~ð;оOŽáÌnHéØ4|Ð{ÉY«1ø%/²¼^÷µâðé?#6ªmµ¢¸ÒЀq·t›8¿Ýê…ì/Llwrò%‹—|™Å¬ÿDDDd±sÄúàHœ™9‹ØäΩÛÎÌX_.1„å‰í>ųçúP±}"¯±¼^‡eøµßɉô6$îœn«?‡ÕÛö†õðvýÑû£¦ê÷£¢d!Ö×]@?;íDDDyGìÑGÚ¡ÕúaÖéç} ©ôG‰íNNá±²gf&¯“éߺ?­ýVÛKõ·„tò&/¡yÏϱ¤rg"ð—HÒN¼]QŠyë?À¡À—¯¼^&ëþr«Ë…È ,¯×á°¾b?êÕŽ©|õo¯Fɼ ¨ëèËãNû]ÜèÕ_Ë?Œrù8Âì´å5±sÄúàÈgf¬/Ñ7pkÒçW»Ñ€òÇ× 1<’\f-¿äE–×ëè÷è½¥{°[ìäò§ñrcowÚ ®i»†ã§ à(úØi'""Êk<b爎ŒÎÒªÌ矙 NÊ»f¦9håß'¦í ~ͼí¼j|yûÄ5í÷_3Œ“oŒD8™¼ÖTÛ›*O¥_Îà—¼(õz¬ç(^œUŠ­­ßçq§×´Qj<b爎ô=ýtÖyc× ¿øJ¶~Ž–<î´§¼¦ý±—&®iŸj{Så©ôËÅö‰¼Æòz¹Š®ëÃÉÕ¾ï¼lÛÙdÁêÏaý÷×´Qj<bçˆõÁÑ\î c,9§R¾ïB§îqJVr~ðC¸a+*ÞþýýàWþýÄ5íýö” ƒ_ò"ËëuøVû+±;q¯ 5íÄúç–¡ºën¼»ŽSkæáÉ5'-½ŽÛùí¯i'""¢ÔxÄÎ냣^4¬^M»µÁ¯„ÝëŸÇ¢ê‹‰ÿ>µO>¹§,¼ŽÛùÁ/¯i'²Šåõ:,£lv)–úýðOJ˰V¾Š±¼í´ÐŒœâ5íDDDùGìÑGÚ¡ÕúaÖéç} é§³Qºt<è---½Ÿ–Jèï´ÿýß/ïš¿L®“éߺ?mGð›êo éä¥Z~úzäU˜U²ï´ðîñDé²¼^v¢íJ49“;v´[ÖR ·¡®êM8qEÌq²¹}1›zìql·ˆˆˆÜGìÑGÚŽŸvZH?/€ß½wêSÇÕ<íkí¼yv¿©þ–NÞË¿lÂ{Û×C:ð1þpæ||¾Á“-èèžôÚÖK#/Õr¿äE–×ë¾3h87¨Å•†tÜsOçÔòr»‚ÚEÁ7û<;·åòe\•W¡¨à1,¨îŒ—=Øn¹Ø9b}pƧ AÜÕŹcWN⃎¡äœõübßÔ.…Ï7¥Ï– ¸\Ƶ«Gñb‘¾q)jOÇ€Á/y‘åõ:,ÃߦØîäô6nê:óÖ±úsX½=Œ^Dõ?j»‡‘jW½… ø#v5ËßA—úë¬Å,ÿDDDd ±sDGFgiUæó¦~DÐç†ëŒ3ÞÞ¸éòÄß°’v{fÞ‡v^5¾üèª~ k¿F0>}µv3öï$–7lyÕ]÷&^«Òooª<•~¹ÕåBä–×ëð lßþ¾æ&‘ñth7ÊnD]G_þvÚC_àMìLüp1†¡À.Tú< iÁ^mº·(Û-"""wà;GDp¤ïèé§Íåõ¢a»„ÉÐÀuÊžO<"(·|»�¥¯Ûv~–øá"ý¢²2€Óí-x¯âŸ #¯Ué·7UžJ¿œÁ/y‘åõúÞ tÿY3È»è:°ÒùÁä¼õìl·,1v ÇWÎ/¾]±íûɇY›[aר)Ë?Ù‚Gì±>8ŠàZw¿îÌ”‚‘®wñ¢t.žk«?‡õå2Œžã¿@±OüÆÓ¬×pzHÿ<kXÿ9ˆfžåõ:Ü„rÂáðýÔÛ…¦í¥(”‚°ëa•VËËEé¼ìY¬¯92iBCS;ºoÿÅ5#ˆˆˆÈ<bçˆõÁQ/>:Ј¯µÁo¸¡¦()”\3œÒúrÁwò+˜·þ7“‚_¹¡çºaטü’Y^¯S]Ó^ø<ªóî^Ãöáå "KÜ=þd𖦃® 6DõŽ'—XÍêr!"""{ðˆ#ÚàH;´Z?Ì:ý¼!•þh<à”ÃÜÊßcüÊm3ÛK/Oû9¬ ¶—êo éä‰ôeóH/oA}(‚ _žBMÕï1~'Ö‰ÝÂWÕûð¯ÍíãóšõUÚùTy©–[].DN`y½Ÿ„Tý ΃N¤N\éÚv6Y°£ÝÊÞŸÑTñ8 þš´wš‹wÖo‡¨Ù€ÒB ü2;íDDDyŽGìÑGÚŽŸvZH?ïcì]½ŸŸ|ëêêéPC ÚR®“éߺ?mGð›êo éä]¸pŸ¿õáá‚ÇQÑôçI¯»Ðþ9lÁúÒYñ¿µ;íDi³¦^"ré÷ظæm´ö|Þ®ÿ@oDtRGp»»ÁŽk¸mã³È;Ú­ì)ˆ†êPöw/¡æâ�búÎzáB¬¯®$d§ˆˆ(Ïñˆ#VGJ¤u7bë7èëýü{#ñPO{×ÐìD÷mýMž¬åÌà7.Ú…Ú²øk:Æ;�±„5ÉÎú,”®ÿ5>ªp,lÏu ~É‹,©×‰g?ŽÒÍoãÀîÕxV<~qÞvüþ(Šo_Ül­¨ì=\JtäíáØv cˆ†ƒ¥µX¶b)žQ;ë5„m¹‚ÑØhüÿö`»EDDä<b爎ŒÎÒªÒËù_Íy ïØ…ŠgGÁCsñ/;7`Y<£ h9j.‰Gœeû·Æé§í ~ͼí¼êÂÙ&ÔŃßÕË^‚ÿÑY,ÞY¯A 4€v±N{ûÄ5íSmoª<•~9ƒ_ò"Kêu_#V<RÆ›1(ݵXX°G¿’±r‰„Sߌߋ£e?*w»¦sjý÷]üðzgåýXSö vje§ˆˆˆ&ðˆ#"8ÒwôôÓÓç}‡Æ?Á?ík‚¢|Ú…£Tú°ïüwH§¾Bw8ŒÞÐ'*âd?ò ±A|sVƺ¡|÷!´²ÓN”K굸ù\ò昱 „Âx§]ÅŽúk÷;£wOcû›y|÷x­ØzÎ7`ÿš—°âõ*lçðx""¢¼Ç#vŽXõBö—Ž?k<„TX¿|ò½Ñï�No?˜Çw׊!ÒÓŽ†ýëP¶âuܾÃã‰L°¤^Ÿ‡ôÔN´ +ãöG·âôíK¨yy öÕ\ÿ¼î_Œ-§o%W°ž»Ú-•h¿Nc?ïODD”÷xÄÎk‚£!%?¶·ÝIvÚŸÄæÓתù^Þ÷>ŽÊ‡ðîëË0Kkü•öpgðï,D¾ÅÙýo¢v¢´YS¯ïÅÛ¨ ‚·q÷ôV<úD:FG ÃöÅÅð>…¹³WB¶é»)¸³Ý8<žˆˆˆâÇìä¿d3mp¤Z­f=]Þ—x /Iíøãïbù_?…ªŽ»P"—±çÿ~?~èoð_fÿüTú8¹FvË(ÏŽà7ÕßÒÉKµ\?~LJÉåÅiçSå¥ZÎà—¼È²z»Ž@Õ/à_àÇŽÀuÝ0ø(B‡ßÇéÁ|¼ÝÌb»EDDä<bçˆ68Òvü´ÓÂôymÞÂó¥ÿóW@8y‘¶úÚó {°ñÝ–Ä2A» í´IžÁoª¿%¤“—j¹~ZÈ6/Õr¿äE^©×v´[^Àv‹ˆˆÈxÄÎyÆX.DÎÅï§1– åØ9"‚#£³´*«òTfÖ1“ggðkæ}hçUfÖÉ4O¥_Îà—¼È+õÚÎvËÍØn¹Ø9"‚#}GO?mEžÊÌ:fòì ~ͼí¼ÊÌ:™æ©ôËü’y¥^ÛÙn¹Û-"""wà;Gäc¹9¿ŸÆX.㔡s8ü‰]¤#"""{9 ÏË%I¹…3‡[Ñ—œ%r~?åw¹Œ!Ú­‡Þ@YñßÁ/÷&—‘]¼y¸€68Ò­Ö³Î6/Õrý´IžÁoª¿%¤“—j¹~ZÈ6/ÕòLËE‰ÞDWë!ì.{ >¿ ž³"'±úû>Sìh·¼ÀÔçˆ ¡'x6-Ál_ çcź•XßÀN;‘ݼy¸€68Òvü´ÓB¶y©–ë§…Lòì~Sý-!¼TËõÓB¶y©–›+—"=Aœ8ð*ž›ýH|Ý"”¬Xåë?b§EÔk¯$+mß­)c=DZ¶¤(þz K×`C;z"1@¹‡Ûwþ’|ÙÅÚH†R2 –Üš¬d´}·¦´Œ]CãÚ§Q(Ö)\€Õûp¾g(ÞÅÝÛâ_""૯¾ÂK/½„ââbüêW¿JÌϘØ�B­‡Qµfü›âD°‘˜ÏE,ñ/Ù‰vò¼¼ÿþûX¸pa"‰éëׯ'ssm·C­¨¯Z¿œŽŸ±‚‚ÑØhüÿDD÷‰ö«¹¹9Ñv©øP(”Ì͵1DÃh~Ê—¼Œ×î†tŒÃ㉈ˆìÆN;å슠W¿â,–†EP<”hÍïc{¹+^¯Âvé$‡ÇQJâÇFÇü�)®q?ûìà5íDDD¶c§ò–n*:ðbh»èÀñÅøá‡’¹¹$®q?ý;N°ÓNDiuõHÑ—eÙÆ ‡n;„*éœÝ"惟 ¹#Œ(‡ÇÙŽvÊ{¢£.:ì;vìHtàÅ¿öuàÄÂm¨«zN\FDóAœlî@8ãðx"2MýÒ®DcßÔb‘ïÌ.]ˆ¹Å«!_ë‚üâ(ð-Fõ¥HòUDDDdvÚ‰4DG]¼¶Ý�jì j=ßìgðìܔ˗qU^…¢‚ǰ ºÑäˈˆ2¡ýrݺu–ü�9ÚU9 kÑ­(¹úVíiÇ=ñdè=,¯¾ˆÑä눈ˆÈì´¥`t¨¬¯½ˆê9~Ôv#!Ô®z Á{ »Œšåï ‹Ñ/YÀÒDJmû T?•»Æ`Û,‚|ê‘ÍØi'Jƒu7€Š¡/ð&vnBÁ†»PèClð,¤{dôKDS€ÌtÑXÏ1¬,~$ÑùŸœæ`óé[ÉW‘]Øi'2)«ëGÇ®áøÊ9ð=üú0ks+†’/#"²ƒÑ¢é!§|'cÙ¼õ¨‘åÄ ïÆÓ14ûÞˆƒˆˆÈvì´eAtàM]?ªô@^ö,Ö×Ñ¿2šÚÑáØx"Ê£D†"—pê·ÇLÝF)ßw¡³C…ˆˆˆìÀN;‘Œ®5vÿ~êŽo¥¾S¼ògtvŠáóDD¹¡>BÎPøVû+±[’ ¥H»×?EÕ1’\…ˆˆˆ¬ÃN;‘ÅÔá§ÆzѰz6í6|i÷:<·è ºFØm'"Ë(›]Š¥~?üS¥µ2ºÇ’ë‘eØi'Ê©^ÈesQºÔ à”6Aw˜'"šiƒh»ÂRÍvÚ‰rªímÝ|®1¹ßp'? 'gˆˆˆÈ.ì´9‚gЗœ#"r å&Î\’BŸæ‰"Â/÷&_DDDDva§(§bè?_ƒŠ’"]ðO~<gEDN3ÚU9/Âæ÷'?õB–ãt÷Ý䫈ˆˆÈ.ì´åÒèETÏ™…›kptRð+£át7xÕ(9ÒS%KêÑûÀ½1G‹ñ†™DDDvc§(—”nÔ/yõ½ú#)ò1oDä<±›8+mÄþ³Ý‡Ã÷ÓÕFT›~x¼x¼x¢†x²™ÇN;QN`àì~¬Ü=Úà7ܹúÔ´Ãã‹‹‹ñþûï'ž©LD” cßÔb‘Ow9O"¥wMûW_}•x¼h¿^zé%và‰ˆˆLb§(—Æ® vÑcÁo<¥qM»è¬‹N»8s%’˜fðKD¶Rn ±räö ‚Amú ¡~s¦üâ‹/°cÇŽD›'þó?üðC27}l÷ˆˆ(Ÿ°ÓN”S1Ül܉­òY]ðO¡þxnú¬:{Åà—ˆ¦¦ vû;„‚'QS%A’ªQ×ô'„£cÉ|óDGݨŸ.Ñî™y=‘›±ÓN”k±Û‡Úq¢f<øÝ‹êº&Ã÷²ºž]tàÕàwݺu¦Î^‰õD矈Èr—j–£¨À‡Â’åxõ•…xò¹°¸ü„¢Ù߉Cüp(~t?>ŠÎ¸hD›–ŠÈSG(±ãNDDù€v¢œEäÒ{(+ò¡ p>V¼º¥Oþ þÅkPŠ$_“9³g¯ÄëÕàW µ'"ÒKÜ=Þ÷(æI_` ¦ ¬Â ¹÷‚o£²ñ†¥7ÐT;ðâòµ¯¿‡‡X¦¶["±ãNDD^ÇN;Q.%î_ß¼=8;0‚xô i…Œð½vì©<‰›F¿éœ½Á.ƒ_"šJ,(¡°àÔv_¿®vÚGº`¡4uYF÷ðøúë¯í™¶ÝbÛEDD^ÇN;Q.‰Nzá£XXûõøÙ)µÓ>rÕ ÷"hSô+:ðâYðêÙ+üŠ€X=#Ïà—ˆRŠœÅöâ%¨ E³±àÌ]Zñl”[|¦=Ñ^‰üã?Ðf©IFžˆˆÈ+Øi'Ê©´mók.#q 'ÑiŸû<^ñ?…GÊ-=ÓžŠzöê™gž1 |EbLjîE¤ë¶n؇ÆÐx³%μ?ŽÅÒçÇrÑe¿Ïè‡F5‰$Ùq'""/b§(Ç”ÈEÞº RãeDgÞ}(Zü&ZÃæ”-1tÞ(ðU;îD4‰2ŒÈÝ‹àÖíhNΰkiïÁ‘*±ãNDD^ÄN;ÑŒC4r±ø‘[w`Á ˜M׺½ÚÄŽ;)·»Ð,ËΡwD<þ-„Ó'ñYW_Æ×³µ7nJDDD¹Ä#Q.)èjn€,Ÿ@[oˆ tú$?ëB†ÃLJ·%"r°¡�6<½ M=w¡Œ„P»d KWaSùËÎ&_dŽ›¿÷l³ˆˆ(×xä!Ê©~6,Å–¦kˆ*÷pµv.\€ŠM+Q&C&}Ó.\HNOëçUfòTfÖ1“Ç�˜ÈÙF;~²ÄÍ3G1Ø„Y¯@}OJo}¼ÝÊìîñì´¥G¢\í@UYºqÒ½fýÊê¯"¦\C}Ù¾Œîïö�’0‘³}ó–ïø߆>†âG0kC ”»èiØ‚µÞ=žv""¢ôñÈC”KcWP»\BàÛKhÜ0³6!00‚hOÖ®=‘ÑÝãÙi'"[)wp©f9ŠâßU_É´ö ¡'PIÚ‡ºà-vÚ‰ˆˆlÆ#QN"ré=”ùPà{[[Ãîù % R]ƒvÚµCеÓB¶y©–ë§…Lò�¹A ‘þ[ˆXôˆ7vÚ‰ˆˆÒÇ#QÎ)ˆEn¡?’é}—'s{�É�˜(ÿ°ÓNDD”>yˆ\N@¦:³-dš§2³Ž™<ÀDù‡v""¢ôñÈCärì´‘Û°ÓNDD”>yˆ\Îí$`¢üÃN;Qúxä!r9vÚ‰ÈmØi'""J<D.'Hítí´m^ªåúi!“<ÀDù‡v""¢ôñÈCärì´‘Û°ÓNDD”>yˆ\Îí$`¢üÃN;Qúxä!r9m�™ê̶ižÊÌ:fò�åvÚ‰ˆˆÒÇ#‘˱ÓNDnÃN;Qúxä!r9· €‰ò;íDDDé㑇ÈåØi'"·a§ˆˆ(}<ò¹œ µCеÓB¶y©–ë§…Lò�åvÚ‰ˆˆÒÇ#‘˱ÓNDnÃN;Qúxä!r9· €‰ò;íDDDé㑇Èå´dª3ÛB¦y*3ë˜Éc�L”ró½W q¢áÃ÷âsÖ`›EDD¹Æ#‘Ëå¦Ó®àËæ:Tíy{"øj3y €‰òOn¾÷·pzóOPXò<üÏ½ŠÆðHryvØfQ®ñÈCärn~ÀDùÇÊï½2ø%¬Ùˆço"z{�‘ØýsêJô.îÆç•îðJÍeŒ%—gƒmå<D.çæàW`�L”¬üÞ}S‹E¾Ç°¨ö®¶þUÖbKÝyôiÛ¯îZ,‘‚ˆ%ç³Á6‹ˆˆrG"—¤vºvZ0“wþø¶‰à÷£wvâ—eKñóí¿CË—÷× Æ_óu‰àwºí¥“Ç�˜(ÿXû½Cô΢j]¹ƒ®úX¼ì j9‹ó§ ù硼ñ†%×µ³Í""¢\㑇Èå¬ì´_¸p~"øŸoÅ‘]Ë0Á¿L¿«KÿüÓ¾¦‰ëÚÕõí|ºy €‰òýßûa„o`A¡/þ·EÉ–OÖœyÏÛ,""Ê5yˆ\ÎÍÁ¯À�˜(ÿäê{¯Doãûþˆ%ÃâUl³ˆˆ(×xä!r9m�™ê̶ižêBÛ¿á“À™‰àwªuÌä1�&Ê?nþÞ³Í""¢\㑇ÈårÖi7±Ž™<ÀDù‡v""¢ôñÈCärn �åvÚ‰ˆˆÒÇ#‘˱ÓNDnÃN;Qúxä!r9@j‡ k§…lóR-×O ™ä1�&Ê?ì´¥G"—c§ˆÜ†v""¢ôñÈCärn �åvÚ‰ˆˆÒÇ#‘ËiÈTg¶…LóTfÖ1“Ç�˜(ÿ°ÓNDD”>yˆ\Žv"rvÚ‰ˆˆÒÇ#‘˹=€d�L”Øi'""J<D.ÇN;¹ ;íDDDé㑇ÈåD�©‚®²ÍKµ\?-d’Ç�˜(ÿ°ÓNDD”>yˆ\Îí$`¢üÃN;Qúxä!r9m�™ê̶ižÊÌ:fò�åvÚ‰ˆˆÒÇ#‘˱ÓNDnÃN;Qúxä!r9· €‰ò;íDDDé㑇ÈåØi'"·a§ˆˆ(}<ò¹œ µCеÓB¶y©–ë§…Lò�åvÚ‰ˆˆÒÇ#‘˱ÓNDnÃN;Qúxä!r9· €‰ò;íDDDé㑇Èå´dª3ÛB¦y*3ë˜Éc�L”Ä÷Þ͉ˆˆ(—xä!r9£€Òm‰ˆˆˆˆˆŒ1Z&""""""r(vÚ‰ˆˆˆˆˆˆŠv"""""""‡b§ˆˆˆˆˆˆÈ¡Øi'""""""r(vÚ‰ˆˆˆˆˆˆŠv"""""""Gþÿ‘ë‚n4����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7x2.png�������������������������������������������0000664�0000000�0000000�00000245136�15030617045�0022661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��.��Ú���X‹'���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìý}lTWž/zûß–¬‘"=ÒQ5}Zòã{8£ÖÉq¬ç¦ÁKÎd¬ y†‡‹H¸ˆÈ˜œN®I2ÈI0ÜPÜfìtÚt:¾§1ê¸òbœ4±I\l1 dl 6ÆX†6M™ý}êWUÛ”ËU{×Ë^»ö^ûû‘¶ðbUÙµÖ^µöÚ¿½öÚ """""""ò(.ˆˆˆˆˆˆˆÈ³¸ """""""Ïbà‚ˆˆˆˆˆˆˆ<‹ """""""ò,.ˆˆˆˆˆˆˆÈ³¸ """""""Ïbà‚ˆ¯¢¢‚7nܸqãÆ7n.n…`à‚ˆ¯ÐŽ“ˆˆˆˆˆŠÇÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆHÆèœ¥RDDäE \ˆ ""éFgÿõT"—[¸ÞŠ]‘ÉTšˆˆ¼ˆ "¢1pADäÑ4ÔïF{8Œp®mÿNÔU/Fˆ ""Ocà‚ˆ¨@ \ù€Uàâ௰añ¼D^¹¸GGx«‘—1pADT .ˆˆ| ×­"±óèj\†ªŠJT¯nEßÕ[© ""ò*.ˆˆ ÄÀ‘?“ýh]}o¼Ÿ 3R9DDäe \ˆ ""¿¹©¡±En©\‚õí§0ɘ‘o0pADT .ˆˆüä&Fz_ÇêêJTT¯As÷EpE ""aà‚ˆ¨@ \ù„q ƒá籸RáÜŠCg'0g¢E^M%"¢rbà‚ˆ¨@ \ù@ìކAu¼Ï–ÛC~ùÛ¹O ¿½›†]|*‘§1pADT .ˆˆ¼ÏíÃûs™DD~ÀÀQ¸ "Òo!"ò<.ˆˆ ÄÀ‘ŸÜÆT´Ÿ„[Ñ !jAÛ‡'pvüV*Ÿˆˆ¼Ž "¢1pADä²8gÇ‹x°ª2ÑwÏÚª–¡±ë<Ÿ0BDä…Ž¿9Z'¢À+´ã$"¢rˆárçF̯¸5«w`ï»]è‰D‰t£ëP;Þxy5jîz�[^šû¤""ò.ˆˆ ÄÀ‘Üø¡ûîC}Û�&³F&¦1ùíÛhXøŽMÜNýyDDbà‚ˆÈû¦Z°pÉ ܲšOñ' µ?‹-ÇÆRi""ò".ˆˆ ÄÀ‘÷Å"!,El×°ˆEšPN¥ˆˆÈ‹¸ "*DDÞgœÛ‡å›ÁúA§·1ѵ›ºFSi""ò".ˆˆ ÄÀ‘C?Ó„ž‰éÔÌeÜø ­«6£s,÷kˆˆ¨ü¸ "*DD~` ýÍÍah*cñÍØþÛV܃ŠÅ¯àØÈÍTyDDbà‚ˆÈ/ ÄFúðiÿ•Y<5&‡Ñ/F8‡hô2Æ3DDä) \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDDbà‚ˆˆˆˆÈ= \ˆ """""÷0pADT .ˆˆˆˆˆÜÃÀQ¸ """"rDD’Ž“7nܸqãÆ7nîm…`à‚ˆˆò¶téÒ¬žÌíðáéw×Èþ!o ‡ÃxöÙg166–ú"¢;^}õU_©d~pôBDDyûõ¯=+@‘¹ÕÔÔà³Ï>K½š¼Höy“.ÌïÑÉ“'SÿKD”$ÍÁÁÁTЍ8~pôBDD9ýñLœ@íÝ»k×® PdÛädëüùó©w’Wɾ"o2æ&ß;""俎8z!"¢Y$X!³&7 XÈ • –$/ýÄÊÜä5’GÞ'û‹¼)3pa~·$"ÁÀ9Á¯ã�Ž^ˆˆ(k°Bî£Ív¯½ œÒO¬ä= Zø‡_,A-p!oÁ""ÁÀ9AŽ+~ÄÑ Q@e+d@”+X‘.ýäŠSÙýǯ– ȸ07Y˜AB¢àbà‚œ Ç?âè…ˆ(@2ƒò¯¤ 9’iëò^^ö'¿X‚À.p!›Ì†"¢`bà‚œ Ç?âè…ˆ(�dÍR‚™8pò/¿X‚À*p!·‹H>g\ä9¦øG/DDš’¹õcéÒ¥‰M~æIùuÀ¹rK¿»DÄÀ9AŽ+~ÄÑ ‘fdP#÷ÂËIfWÈl "“_,A¸xå•WÿÚ­;CDÁÀÀ9Á¯ã�Ž^ˆˆ4 Wcåö™YaN)çÉeã×K˜ <šß_ùY6"".È \‘ëd¡L9©‘`… h¸`&Ùaà»ä„$3à(iÙg Dä.ˆˆÈ5rû‡ `$`!÷¿ó¤†òÅÀ…ÿHp’&"™UÉÀ•Š ""RμD¶RŸ BÁÄÀ…ÿÈÌ* RQ°±ÿ&'0pADDÊd,ˆŠÅ¯?­]»–ß}¢€cÿMN`à‚ˆˆ%³)d±>sý >„œÀ¯?IÐB‚DDD¥`à‚ˆˆ‘°àý¬ä$.üKú¹m„ˆˆ¨X \QIdMY„O(ò/OPH.üKèä£Q‰‚غ€Hç[h …jy ‘ ˜2R™DEbà‚ˆˆŠ’°àBH%.üKúÙ\”—HÆd?ZWß›øÎßÙæañ–1zAÅóë8€£"¢2I¿%„ r‹_,”$·>|8•""=ý Cí¢²z šŽ `têvüÿncjtG[~†Gö‰§ˆ‚…£"¢2s ,ÈM \ø›,Ò+O""]G_ÓR,Ý÷ æÌ­¸Ùƒm…M%‰‚‚£""™5•§pÑM*.üOúöD:305øžÞÕ‰ôÈElCx¤éKÜHüÇ?p#¼s„rº‰‘¾w°'ÔŒ¶ž‹ˆÅÿǘFÿ@Ôwë¥pôBDä9ÉÙrÂ!Á ¢raàÂÿä³ÆÆÆTŠˆô3…ÁÖå‰þÚv«\…}go¦ÞG4›1ÔŽ••f[©Ec÷¾jYOß‹Õûâ-Í?8z!"RHn‘€…Ü"'DD¥’õqdÊÛ̈teàÖàoððŠg±Sž(b¹5¡½o<õ>¢Ù¦Z°pñnD&c˜zÏ=ú&¾Bï‡hzä%tMøgµ.ˆˆ óI!°àS�ÈsŒiĦ9¿Ø¯dÆé$Ò˜qýýßÏ]エ±soz =ÓñÄ-\ oÅöžñxûAׯGåæ`à‚ˆÈaæÂ›|Ry×-Œû~™L¥Éoä–3Y+‡ˆtd`êÂ\™µˆÿÿùÃ%>•òd\=æ5XPû0êêê°ª¶Õ‹–Åÿ]€Ê{BˆÜôO[bà‚ˆÈ!çÏŸŸYÇ‚ ç‘S—1pt?v®þ)*+!ÄÀ…oÉ,. 28J¤£¢;°yïÛ‰Y›w¶ƒøí¶g±+r-ñ*c´oµü‘Qÿ\5'w%n©Z„åuu‰ÀÅÌV¿¿‰\öÕŒ.ˆˆJ$'2 0o !ò–Û˜ŠöãðÞ—QWsw¢VÖÔá…6 … _“Y]¼]„HG1DÃõ‰þ:Ûv÷†.L`cÏஊ{ÐÐù}ê}DŒQt7¿ãWåV‘tÃ?µ;u ‰?0pADT™Y!3,d¦¯|’çÜBçÖ•XXQünÔ¬~ûžÆèÔm`ꆯð*Ÿ<y’·‹i)†è;o"üÍD£Ñ9Û¥ñ©ä•òØUœøã¼u„r™:öõ…ª,°ŠŠJT¯þz¢7|1ó‚ "¢"È, YO¦jóñ¦ä]òüö÷±ç…‡±hÅvtD†0É®Vx»‘ަqùƒ¿žùćۘ8þ{|4 3å' ¡ªêA4lÛ™ñ4šçQwßR4¼"?ïGdÎŒ ïaà‚ˆ¨@é‹oòi!ä·15zG÷‡°~ÍÓíÿúÞÇ¡þë©|ò+é‡öîÝ›J‘¬nù1Úw&Þ«åaòB¾[™-†®oBÄG10.ˆˆòÄÅ7I ± EÞCKÃ.Ω¹]Dú$"Ò‰,ι u/ì˜}•|ç³Xñà:lkï{oÊØÈ783çÖÐ?âü¿žÃ¤&a2pAD”‡ôÅ79Ë‚´À5.´!3À$°JDº¸ÉÓ§q~δŠ[¸Ø±;ºG}õ4ò".ÎID¤¹w\fYÈx<1 ÿ‘+-'ѱg7šÚz•õ-ŒI ÷¨,ÐIZàí"Dº™ÆÈÇïãDæÆuüÛ'0¯þFRÿEd‰‹séO¦`Ë•L9!à, ò%ãÚWV¥(ó°¸ñ8®|Õ‚…‰ÁJ§xÍNTåí"D:±Zãâ.Üú7R¯$²ÂÅ9‰ˆ4&A ¹‚)A ^ùÖô)´,|¡ÈUSçðÞsO£õëï1Üÿ9>nzÏu¦^H~' Î #Ò…¬q±õ/gœlÊ+‰¾IÿLï§2ãâœDDz2¯\Êí!œeAþ7…¡ðìêKL5.vàÉíݸi\ëz kÃÃÉ—‘ïÉÌ0Þ.B¤ ‹5.Â[ñ|W”k\P~FŽâŸÚÿƒ™kZM|Š]»?çâœDD~d.À);%Ò‚q½Í«0A-VÕÕ¡nU-T/Ârù·r B‘‰Ô Éïdv˜¬ÅCD:5.:¹™qViÜÀ…ާ¸Æå/Fݜے[åÊv 1pADä\€“´•¸Uä'X´|ê$p1³=Ž-NùêJ Ù“(gŠéÀj‹yXÒô%׸ üD;P_û$¶¥ßr´íIÔV/DÝævôMúg¡n.ˆ(и�'émW»[Ñ||„ÓŠ@°Ÿ}öY*EDþ%‹g°|ÃöÙk\„šÑú^Fä QDù˜üço¦&7"?ÇýkÚqvÎÚÞÅÀà$ýEñј˜3.¹‚ãŽb„c_­ÈmnÒ¯‘ßåZã‚È WplóBTT?.<MÄÄÀŽÌ¬0o á, ÒÛ0ÂuæãP3¶ÊGÑ>ô§ÔëH|,*‘.¦19| ‘H‘þáÄm}ÆÔÎôÄ@ôgÐQÞŒÉaôK;ŠœÂ°<ƘÂè™>ô|ò)N Múª-1pADbìåª$ƒ¤?yÜÙŠŒç·¿„†Ú{QS÷"ö÷§^GºYd\«‡Èïnc¢ëyÜS׌#ƒcˆÝ:ƒö5÷¢¢j–-͑䓢ˆlMtaÃ=kÐtdã±8Ûþ8ª+ª±hÙ ¬iþ"ËŒLïbà‚ˆÃ\ÏBžB ×pz g¸ñB÷?ö³\ÞM7”å“‘ˆüîZ6 eàzüçiŒu½€ù÷£Qm}ý¶>Ó‰±ä ‰,M¼Žº–S¸ÿÙ;‚óïÆ}ݘ0Æplë6tŽñV""O‘¼-¸pÑmL{1>¾º.§þt!}\ccc*EDþt}MÏaß¹›0&N ´dîZÆE¹ed¬ÏlêfMù˜î{ «÷}ÃCoh)*ïzá‹·â é:ŸÙŽ® >U„ˆÈ3ÌE89}šǘÄp¿ÜÛAÿ°ÜËzS£ß¢¯ç8râ;>UCòxgYĈüÌÀÔW¿ÂÒš°lQ5**—"ÔÅ径V/Âý©+èD¶¦úѲô/P»lªäQº¡»|áУ¨¹øT"¢ò“5,dN.ÂIÁ5Š®  ®é# Žÿ ·Î¶cMõ]¨Zô–¯iAdÂ?SD)Òç ¦RDäO71Ò÷ö„šÑÖs1 <_F4Å¥ñ)®qAy29‰Ž=»ÑÔÖƒhÌ€15ŽKñv½4Ž)®qADT^é‹pÖô)´Ô½ž¼¢b\FׯŸ¢â¾WÐ3Ãõc!<Óù}ê…¤“½{÷&6"""]0pADÚ1áäuxÓ}hZ݆sÆ4&zwcIå|¬ ÁÅÞ:_Ʀ®ÑÔ I'ÒÊ#Ÿ‰ˆˆtÁÀiE¦“ … ܉h_µ<‚šÚ¥XTU‰Ê%»Ñ;E_8„Õ5+R+Ö“näÖ8®sA¤ FrlCNðëñG5"Ò†Læ"œDb—Ñ×ñ:BMûѽ S¿E4zãSþYMœ #·Ê±/$Ò‡.¸v 9 "¢2’µ,8P'"J’G¢òñÏDú`à‚œÂÀQÈ”h ZðÉ!DDw„Ãa.ÐI¤.È) \¹Œ;%*×>9ÁáDþ$³Gå;œ¾ñ1Çä.ˆˆ\d-d¶ƒDùcà"¤_ä¾&ò'¹ÍK¾¿v›¬ëÅ1JÚŽñˆFD¾#W"Ì Ư*×ý!ò/ùþ¦)²mrKQ¡¤íøG/Dä+2—+ ¼w›¨8~°Pá¸@'‘>|xV"s“ÀQ1¤ýøG/DäfЂq¢âùuÀB…ãDþ%·€È˜'=X‘¾q,Dù〬w”¾IûÉü??Ìbæè…ˆ|Á¼ß“j¢ÒÈ÷ˆ‚Aò“)ù“œtšŠô³-(_rÈÖ†27?Œ¯9z!"Ï;yò¤o:U"¯“ïÃØØ÷7‘åšu!ã"¢|I�;³ ¥o~ „ñhFDžÆÛCˆœ%ƒ é?¹@'‘eκà,**”ݬ ¿Œ±9z!"ÏbЂÈy2H¡à“^%ò¯ÌYrJT¨\³.ütÛG/DäI Z©! ¹Z+ù—,œ(}7g[P±rͺðÓ8›£"ò-ˆÔ‘ ‡<RÑ«ÅQnæz5¼í‹J‘9ëÂo‹¼rôBDžb-d°MDÎcà"Xød"uÒOuÛH?™³.üv­’ˆ<Cîã”è/¯9C®ÒÉ@%}“ÁJæÿÉ&ß?Ò &"çéz‚¯k¹èά ?>R—­’ˆ<ANšÖ®]Ë ‘ƒ$ !»ÍÊŸìc"rž®ß-öú2Ç~¼›­’ˆÊŽA "ur­$ž¾q=½I`J«Dä,é?u¤k¹¼,ý˜¬Ûæ¶J"*+-ˆÔ²›uÁÙú“àDΓ>TGº–ËËØ–ì±UQY566rá8"Ŭf]p¶…þöîÝËG¢) }¨Žt-——±-Ùc«$¢²‘Á´Ì¶à¢€DjåšuÁÙÁ A éo‰ÈYÒêH×ryÛ’=¶J"* ¹Ê++ÝËSˆH½l³.8Û"$pÅ™mDÎsò¤ÌKt-——±-Ùc«$"×™Wå1}DäŽÌYœmÒ×r9ÏÉ“2/ѵ\^ƶd­’ˆ\%h™iÁ+½DîKŸuÁï`°ðD„Èy<Ù$§°-Ùc«$"×ÈZrÕ‹Ä•‡9ë‚W߃Gö9g¹9«Ü'›Æèœ¥RÎaàÂ} \Øc«$"×ð±§Då'³.8Û"xd¿KàŠˆœ£ìds¤ý×S‰\nábx+vE&Siç0pá>.ì±U‘+$`! "šKìºnä \9OYí@Cýn´‡Ã‰YªY·ý;QW½!.´ k;Y.¶J"RN°2M™=%ÊŽRM'OžL¥ˆÈ Êú8«ÀÅÁ_aÃây‰¿]¹¸GGx«ˆÊ]ç~¸íˆ­’ˆ”2{Ê{«‰rÓuÈÁ¯w˜'=Däe}\®[EbçÑÕ¸ U•¨^ÝŠ¾«·RÎbßí>×ÛÒ,þ¸íˆ­’ˆ”1Ÿ ÂéÉDÖt$rðë \9ÏÍ>ΘìGëê{ãs>l<‚hÌHå8}·û”Õ¹F·±U‘r[ˆ¬i!"YÓuÈÁ¯w˜T"rŽ;}ÜmL }ˆ-r{Hå¬o?…Iu1‹öÝîSVçÝvÄVIDJÈbœrO5ÙÓuÈÁ¯w>|˜Ou"r˜ú>î&Fz_ÇêêJTT¯As÷E8j9ûn÷)«sn;b«$""*3]‰üz‡Ü²Ç`2‘³”öqÆ5 †ŸÇâJ¹¾‡ÎN`ÎD‹¼Ö/(ûn÷¹Yç~½íˆ­’ˆˆ¨Ìt$rðë \9OY»€£¡GPÿýr{HÃ/;wšømìÝü3Ï/¨Hùq§Îý}Û[%å'6†Áchm !Úƒö®Œ*ŒÐ‰®ƒD~½ƒ "ç©êãŒÑ>¼?'P‘¹1p¡õuîÿÛŽØ*‰È^ì<Žly�•ñΧ¢rjWÕaUm æ¯~_MN§^DDÅÒuÈÁ¯wÈ‚ÉÜDÎ*ûwŠ·ŠhCikrÛ[%Ùˆáò¡ÜUQå¡.œ›4ã³71rìçxbßÜNý§ìƒDc§OÎÈ”ˆƒ_oáþ r–úïÔmLEûñI¸M!™ñÚ‚¶Oà츚…Mì+ܧ¬Î5ºíˆ­’ˆlL"Z„Šy[qìzÆiM,‚P}ÑT’ˆŠ£nÅ‘ÎØÍ‹2.†ñø®ˆãÓF9øõî"g)ýNÉUòŽñ`UeâïÌÚª–¡±ë¼²©þJËEY©ªsn;b«$"Óëzóg.¦19ð{„–â¾ÍG1‘ú_"*ŽºAâ0 ëÑÔ~0Ë@ÅÜÚª»U!.tÇýAä,uß©.wnÄüŠ»Q³zö¾Û…žH‘H7ºµã—W£æ®°õè%ÇgÊ öî+{óV"Ò‚q Ƕ¯Åº=݈NÉ!—ѵá>T.~G¢7“¯!¢¢©°X.~‡76üUjí5`~½…ûƒÈYʾS7¾@è¾ûPß6ã©Ó˜üöm4,| Ç&œ¿a—}…ûÔ×¹ÿo;b«$¢<ÝÂøÙ/p|`,qrcLMàZ"ˆAD¥R7`Éu«ÈMD»^INA®~ ­}W”L9æà×[¸?ˆœ¥ê;5=Ђ…Kö`à–U8ùOj[Ž¥ÒÎa_á>¥u®ÉmGl•D”cê"o¡E¢´-o¡3rS*æ'“v[ñÌW­¡º¢U¾‚.…³¦\-Ùâþ r–ªïT,‚<nß‹EšPN¥œÃ¾Â}êê\ŸÛŽØ*‰È–1ÙÖÕ÷&:Ÿ;Û<,Þò¢1F/ˆJ¥nÀ2›1õ:6ž‡EëÛ1 øqÆn•‹òÃýAä,Uß)ãÜ>,ß| Ö+ÜÆD×lêM¥Ã¾Â}Êê\£ÛŽØ*‰È†LE|•ÕkÐtd�£‰ÛCncjtG[~†Gø8T¢’©$ˆœÀžD�ò^Ô5w%èÈÁ¯·p9KÙwÊBø™&ôLä.7¾BëªÍès>�;Â}ªê\§ÛŽØ*‰ÈÆuô5-ÅÒ}ßÌBv³ÛããP‰J¥v8ÉÁ06.ž—X„só¡3Y®ºä÷ØÔBqðë-ÜDÎR÷2‹~‚ææ0”¹žXl ƒG‹m+îAÅâWplÄùÛýØW¸OUëtÛ[%Ù005øžÞÕ‰ô“؆:ñHÓ—¸‘ø+8~à(FÔ_Ä%ÒŽºAâMDîÆŠjYk54£}ÎÓEÂ8¸w3VìâãPuÇýAä,ç¾Sb£gqf4=!3åúðiÿ•YŽŒÉaôËç^Ƹ‚…ÒÙW¸OUëtÛ[%Ù˜Â`ëòDÇc»U®Â¾³|<*Q¡äû£„1‚¾÷;æ*27.‚ûƒÈYÎ}§bˆ†P§àŠw1ØW¸OÝ8@ŸÛŽØ*‰È†[ƒ¿ÁÃ+žÅÎÄsŸ­¶&´÷§ÞGDù*ÿ ‘·ŠèîüùóXºti*EDNp®cà"èÔÕ¹>·±U‘=ã2úû¿Ÿ5U‘ˆœãÆ Ñ˜Š¢ÿ“0Z›$Èøs´´}€ž³WŸe‘Žƒ_ïijÏ>›J‘œëã¸:µu®ÇmGl•Ddã6&OŸÆùl}Ùd?~ÿÉŸ*BT"µYœ³[œŸø;³·ùx°ñˆ²'Œ¨-‚ "ç9×Ç1ptÎÕy¶õRÊÇɶÄVID6âÓŽØöîgˆHT6}ë áoöáDßD'U^·%Ò›ÊA¢qùC<5¿•5bçÞwÐÕÓÿþö¢§ëÚßx u5ÕX¼õS% ërðë \9Ϲ>Ž‹ c[²ÇVID6¤¬Ot<–[Õ24v¿šˆ %ß!5®!z�Õõoap2û Æä×8а›]IýsÔ•‹ ÅÀ‘óœëã¸:¶%{l•Dd#ÞvìBèƒîÜ3.äçÞ?ààÖ-hãSEˆ ¦l8} - —£eÀúAhÆP;ê¶Ø=.­püzDÎãÉ&9…mÉ[%Ù˜ÆÕ/¾À™lk£aÔ‡ÌG(NãZ×KX둎’ÈO” c„„±› %¯«#šJ:…ƒ_ï8|ø0^}õÕTŠˆœà\7‘C±îÐÅTº¼Øw»Ï¹:gà‚ˆh.ã&&¯ËÑ4®öìÆƒU‹±­‡C%*”²A¢ñ ö-߆c×m°˜è¦M]˜H%ÂÁ¯w„ÃáÄFDÎQ×ÇÝÄHß;ØjF[ÏÅÄ¢Ä ¢˜ráoì»Ýç\3pADd!†‘cÍx*Ô¥ìéD:S7H¼…‹á—±£g,÷ãŒI|ÝÚ€§;/9þÈc~½ƒ Òô/^ØTÛ÷VV¦þFe-»‡ðUËÒxú^¬Þ7€©ÔëTQU.Ê͹:gà‚ˆääÉ“Xºt)þøÇ?¦þ‡ˆTR:HŒGWóë8<t=#0q ãƒG±Û讈ŒEWõœÄÁ¯w0pAºñBÿ¢ê3L´`áâ݈LÆ05ôž{ôM|=6„þÞÑôÈKèšPû zöÝîs®Î¸ ¢�‘ ÅgŸ}–J‘jŽc£8sftv"ö="ŸžÂÕôÈ…1‰á~Yhw�ç¢Q\ŸâŒ Éœ”&Ò…úeŸ!váM¯¡gB“™s[±]nÅ5Fеq#ÂQ§Ã̳±ïvŸsuž¹^Š>·±UÑ,rEŽ+ϹËÑAb4Œº:çÚ,¿Þ!ýº<Y„H^è_T}ãê 4¯¨Á‚Ú‡ãýyVÕÖ zѲø¿ PyO‘›jÏ8ƒÖwKy½°© ÓmGÁj•DdIn ©©©áà–ÈeŽX¸ ,¸ Ýx¡Qõ·ŠT-ÂòººDàbf«®9>;.SÐúníÛ’&·«U‘¥½{÷¢±±1•""·8:`aà‚²[�ÏŸ?ŸJùŸÎ'›0FÑÝüŽ_Íö,zõ‚ÖwkÝ–4ºí(X­’ˆrKt.ò/¹ËÑ ”÷éÆ mZÙg9ŠǯÌY1q>ŠrÆ…ÃtnK:Ýv¬VID9É4b®8OTŽX¸ ,¸/H7^hÓÊ>ƒôãñß-¿?s«\ÙŽ!Å‘ ù;Aâ…òªú :Ýv¬VIDYÉ}ϲ¶JTŽX¸ ,¸/H7^hÓÊ>C´õµOb[(„¹m{µÕ Q·¹}“|ª“´nKÝv¬VIDYÉl >þ”¨|°0pA$8½víÚTŠHZŸlN~‹ó7S “‘Ÿãþ5í8{Ë?Óûý@붤ÑmGÁj•D4‡ heÑ6"*G,#‡°nÝ!Œ¤’å´Á¯WI?ÏÇ\“n´>ÙÌê Žm^ˆŠêçÑ¥øêyÐún­Û’F·«UÑœmAA—y /צ†ØÈItìÙ¦¶DcñŠ1‰áþ¯R;ÕX¨+BÖ/’§FéÄ ý‹²Ïõ*y¼?ÿöu<úê×¾ºJîZ·%n; V«$¢Y8Û‚Hó‹qí+«¿¿¢b7Ç•¯Z°°¢Õ«Û08¥vøë…º¥dà‚‹/“n´î»¹8§«¼P^eŸA£ÛŽ‚Õ*‰hζ Ò|À2} - B(rÆÔ9¼÷ÜÓhýú{ ÷Ž›žÀs]£©ªá…º%öõ¤'­ûn.Îé*­ÛRVþ¼í(X­’ˆfp¶Q’Þ–) …w`WÏXbj±q±OnïÆ LãZ×KXN¾L/Ô-%ÒçéDë¾›‹sºJ붤ÑmGÁj•D4ƒWàˆ’´°WÐÛ¼ óÔb•<·}U-T/Ârù·r B‘‰Ô ÕðBÝRr?Œ¥RDzкïΊ‹sª¢u[ââœDägœmAt‡“Õb)û ‰[E~‚EËW¡N3ÛãØrà&}4`¡âq?©¡î»u#}ï`O¨m=‹ÿ19„È'ŸâÄФ¯®’ûÊ«ì3pqN"ò3ζ ºCë ¦qµ»ÍÇG”t³ñBÝÝùóç¨&­±X¼§+U}œ1ÔŽ••©+㕵hìÂW-Kãé{±zß�¦R¯S%h}·Ê«ì3pqN"ò+ζ šMë ¢øèÀ LÌ—\ÁñG1ÂÚ“>_‚ÕDZŠ]ƱЛˆÈ”„2PÕÇM´`áâ݈LÆ05ôž{ôM|=6„þÞÑôÈKèšàâœ*èËŽ‹s‘p¶Ñl^ ©û Ã×™CÍØ*EûПR¯SCþ•×áÇñꫯ¦RD:¸©ÑÓ8ºÿ¬®¹U!íˆCxÓk虓Ê[¸ÞŠí=ãñ3ëtm܈pTmÙwkÓé¶#Ž(ˆ„³-ˆæòÂ�MÝgF¸~¶í¼sokè%4ÔÞ‹šº±¿/>V(ƒ_ ‡Ã‰È÷Œˆö„½/¯FMâ6Š»ãýØF¼Pÿ+íN6«'м¢ jN¬K´ª¶Õ‹–Åÿ]€Ê{BˆÜôÏô~oÓ?¦ÓmGQg[Íå…šºÏp §¢ñ¡Y†_ tÿh?{#õjx¡nƒ®±±‘ý>ùÞíá±uy *'_?Åêûqtà2¦ S.àŠêËÆ9¨êã·ŠT-ÂòY‹*Ç·ú—q`àç,U€‚`:ÝvÄQ@Èm555©y‰»ƒÄÛ˜8ö"æW܇ ]—Sÿ§†öƒ_Yv2ÛŽÈ×b—Ñ÷Þ¯ðÂò¿ÂŠÆ0"C‰)ï妬3FÑÝüŽÏYÀ@ìÚ5\çúDE ZL§ÛŽ8¢ ¹Ç™Ó…‰,ÓˆM—gÄ¢n˜cqÎØ¿¢ùÑ7p–ƒ_­ýñä> ½Søö‡žÆšõ!ì?Ú¾ƒ ¿L+*:÷ý2pël;ÖÌ_ŠPïÕÔÿe2»Ú‡}ë÷(Ÿ u¿° ˜N·ñhF�æàull,õ?D4Û-Œû~™L¥Ý¥nÈÅ9ƒŒO!}ÅOâeÁ÷~‰†ÚÝLïŸÆXç3¸«b!6»’ú?S¼¬ãƒèj݈ڪJWÖaDß­ml6n;∂(�d¦W•'šË˜ºŒ£û±sõOQY±!\œ3°¤ïß»wo*E¤#}¦÷“4?¸¡ž‘Ô €Œ€EÅ|Ô6lÅfÖaVß­[,ƒF·qDA�¼Ç™(ÝmLEûqxï˨“UÄãÕÊš:¼ð´h¸àâœAÆ™IÙé8Œþxÿ6U¦ …pº3&OãPè¬Ûüöµl¸°ØÐŠ®Á±x¹Ý Ô³ïÖ%¦ïmGQiN­k×®M¥ˆîö:·®ÄsñÕ¯`ÿÑÓŠŸÚO]Âð•ò\jqwÈÅ9ƒBdæ-‚¤ƒr?Ò15}œÌ´øÝwaÝâ{±xËû8;éî±Iï¾[÷ ˜¾·qDA¤9^q#J'–÷±ç…‡±hÅvtD†0+ãH%EÝ 1>H9‰Ž=»ÑÔÖƒ¨”Õ˜Äpä(Žœø“¼j§- XðIR¤‹r?Ò1å}\ì*Îv‡Ñ¼ñ)llî@ïÐ8®ž>óŠ‹«sß„ ˜®·qDA¤1>•(—Û˜=£ûCX¿æi„öÿ}ïãPÿõT¾»” sh_i.Î9‹ãÊWñ€ŠJT¯nàâËKÊÊEDÁRæG:æâ^ÃäÐèh~ µ ¸8g)‚Óñ¶#Ž(ˆ4ÆG å!6¡È{hiX£ßâœÓ§Ð²ð¡x¹®Â˜:‡÷ž{­_áþÏñqÓx®k4õB5tüzÇ-ŒG¸µ¡ÐÏÑÒþ Fo¦òˆôPîG:æâ~7«§¾âŒ‹R*¦×mGQiŠ@%Ê&Ç­ý_#zõ¢†k\La(¼»zÆâ%õbžÜÞñÁïµ®—°6<œ|™"Z~=á&¢G^ÆâÔš-‰“ºUµX0ÿ1´~¥þ1wDn)÷#sѵӹïlLƒÛŽ8¢ ÒJ”E™oÈEـŸ‚ÞæU˜¿ «d/'µÕñÁ¿ü[¹¡ÈDê…jè<øõãò!¬»«w-ß?œ»vç^æ‘?`ûoályf<9ïýØûôkYé˜ÎÀÔùÃ%×-ÒµÓ¹ïfÌ¿·qDA¤)>•(‹2ß:‘‹²K¢¼?Á¢å«fÐêÇ–§¸8§ÏÅ"!TU܇ÍÇ2gÖM"Ú\¶)ÏDŽ‹–ͭ8'.Ìdßâ·ÛžÅ®ÈµÔ›ÔÓµÓºï6FÑÝü†MÌ}î×¹ÿn;∂HC'Ožä#P‰²*ï­¹¨°Ä&Ý­h>>2÷*Rlã×ÕÜ´üz€1vçÿtVà˜ü ¡ÔÞ÷Ž•i‘9"ÇEè‹÷'Ò§Ømwoè‚Ú¹dwÈßÓ‘®åJÈëÑ眽ã'ËÅ‘†qøðáTŠˆf”ùÖ‰\°Ü:ƒö5?ÅâÐ ä\j4v§ö½„fÅ‹‘j=øõ„FŽ…°rÝëè‰Þˆµ§qµëyTW>€-GΧn!Ò@´{ˆF£¶Û¥ñ)צûódÓ‡8{ÇUN–‹# "ÍpQN" e¾u"G,ch¸«ó7{Õ16†Á®Vl¨ÿ›‹”?EEëÁ¯g$Wï9~ã‰iDS¸vͽ7"WÓˆM{¯UódÓ‡8{ÇUN–‹# "Í|öÙg¼M„('‹['ÊÈÑ‹1Ž¾æ‡±$Ô«æ4×Y‹JTÕ>‰m›7 … ÿ3n éD[ËÏ µ ­ó_â-"71ôî‡è/Ór<Ùô!ÎÞq•“å∂H3r›ˆ/ˆ(›ë¸0œ\ßÂÒTç.ÝL%Ôs|Àb\Ãà¡ÝX¿n Zöý"-`±­]ƒ—€F^÷ù–FëÁ¯Ä÷óW­¡:^ÏR׿V¹øe‰º×~‰”‹·õ[±|ÁݳÚzb«Rÿd„\äïëH×r%䜽à ˜ N–‹# "˜·‰È¿D”Í0:¶lÃÞƒÙîiMÛ~»ïú7RïRMÙ€%ñÜöƒ­»Õ‹_‡gÍGfºCëÁ¯CíXYy/êš>ÂÀhòÊ 15‚Á£-XóH‡JÚH<²ò§¨{aB¡Ðìí].S[çɦ1æ*'ËÅ‘FdAN™qAD¹ #\W5{ ’k»{º\z*ƒü=µnaül7ÂÍÏ£ac3:z‡0yõ[ œW{U^}¹‚mº¯ ÷.݇ss.^C϶çù8TÒÆí³ûðÐÊv ÛN—s׬c†f›®s—“å∂H#²¶o!²2ŒwöÂ7Yîe³]Ç”Kƒd÷,b“CèíhÆúÚ¥\œÓ聆ïé_ g"}ns “Cbë#¯¡ï†4àÛ˜8þ{|4 ù˜Üõf3|›9n g¾W¶éýä?^‚éˆ "šCž"RSSÃÛDˆ,ÅOÜcÞá–cÀb\ýýœqák·[q¼Ž¥ž­·ã¡}gÀ;Gȯ,Ûz§÷“y4&mYGN–‹# "MÈm"¯¾új*ED…1:‚Cý×SiwqÀBE¹5€Ö‡WaÃÎŒéÎÙ¶ö>¨_C¤U[/ãô~ò¯ÁäïëÈÉrqDA¤ ¹MääÉ“©e7É·±yy *Ó+‰m‘ò['rစŠÃHÿ�.ylÊ3‘ó¤­÷á_¿>Šöģޖ¶ND¢7ìŸE”ΣA°Ùã½6§pDA¤óçÏ'n!"ӧвðǨ©Û„™–ЯÑ5\žGH:y`÷]Ë哹XGßïñ*4iäÎ| 5•r"t7<p?Tß‹5õhýêƒT�|ýŠ# " ìÝ»—·‰åãöì{hÚ‡o¥þø ¢DßÅæmè‰D™µ½Ðß>ƒ}'ú1tõ¸D*—aÝ]¨\ü:‡®ÃˆEª?ˆá«'Ðüä^ rqN*È-ŒröŽßpDA¤¥K—ò6¢¼Lcò«ßbÇÁø°%ØÙÑÁ5.ÅÀ…bÑ0êâu,õœ{› ãœü+ ¡ªâ^¬ï¼”<¹L.ˆòÑ¿T0ÎÞñ+Ž(ˆ|Î|šåáöi´ÞwƉ¹q §éZ.ψ¾‡m¡w-f\ÈÏŸãØÁíxºO!ÿJθXˆm=×’ÿ!‹å;~wêî@OâÑ¿Dö8{Ç¿8¢ ò¹Ï>û ©Y»ÁÖuX±a{Æú\ãB.»Úž3S©Dºa„ë›fVÇ7®uaãZ¹:MäW7íÚ‰‡×·¡od*y²YUŠÊ°åÈyÞEyãìÿ∂Èç$h!B%¢ü#ÿŠ/ÿõ޶ïI,ZÞBgä¦ÊxÁŽ rÖmLMÞHœÌW»zð'øÉ¶nÜHfùT¼]GûñÉ'¿=‚¾÷?BÏÙ« ZPA8{Ç¿8¢ ò9¹MDn!¢|¸uö ¯IÞ.R¹à~<°à'X°à/°ºµ“e¯0pAª#G±ë©&tEË3›ˆÈ Æä0ú·AÂðätü?¦0z¦‘hYƒÎäGœ½ãWQù˜<Uæ$¢<phÝO’”ÎïâÞIDB›Ž¢·y Z³M»WONðuÝH-9ȱ€Hk]ØpÏ4Äxìζ?ŽêŠj,Z¶kš¿ÀƒTÎÞñ#Ž(ˆ|,ó1¨D…H]Y¹{}'ÆÝTà"ÃÍž '^Fäò4)¯)¦^G]Ë©ÄÓ Œ±#Ø8ÿnÜר c ǶnCçWT¤üpöŽ1pAäck×®åcP‰ ‘šqñãm=HNœ—ÀÅØ~¡ºeØÖ3žø_"?ÀõÞ½{S)"}M÷½†Õû¾aŒ¡7´•w=ŽðÅ[ñ>ý:ŸÙŽ® >3‡òÄÙ;¾ÅÀ‘OýñLLÖ‰(_bÑ#h|xöõ}ŸºUdQü»4‹·|„hŒ#òY㈷‰P Lõ£eé_ vÙ"TÅûë%¡»|áУ¨¹n±ï¦üpöŽ1pAäS2ÓâÙgŸM¥ˆ¨ÆTýŸÃÀøFû>FgÏ·gЂ|DŽ2ëŽ( ÄFN¢cÏn4µõ$‚ÌÆÔ8.E£ˆ^çÊgïøD>%S„e "*€1‰á~¹·5‚þáÉøPø6¦F¿E_ä4¢S¬È1€Â&"*gïøD>ŕ䉊1Š®  ®é# Žÿ ·Î¶cMõ]¨Zô–¯iAd‚SDÉûÌ[ù(l"¢BqöŽ_1pAäC2X•{›‰¨@Ó§ÐR÷zòŠŠq]ŠŠû^AÏD ×…ðLç÷©y×gŸ}ÆÛD(ðø¸e¢`á7žÈ‡dzpccc*EDy›îCÓê6œ3¦1Ñ»K*çcMx¦1Öù26u¦^Hä]²¾‘/ˆ‚Œ r Û’?p/ùïm&*Ö$¾jy5µK±¨ª•Kv£w,оp«kV eàzêuDÞ$·ÊŒ;>QŠ‚Ž'›ä¶%à^"ò!Yßbpp0•"¢‚Ä.£¯ãu„šö£'z0¦0~)Šhô2ƹ@'yœ®÷îÝ›JO6É)lKþÀ½Dä3æ¢lDD,ÒÿËl .ÊIA#k27 eþ-';ÒF2ÛM¶¶$y Ï~ˆ|F:R¹¿™ˆ 'ëÈ�Ån“YMD^#·²ÿ§ ’vŸ­¯ÎÜdF‘i#ÙÚNæÆ¶ä= \ùL8æ4a¢HP"Û %}ã‡äEÒvOž<™J‡\´ÉÖWgnœDv¤dk;™Û’÷0pAä3\Mž¨4v³.8Û‚¼HNÜØ6)Èìf]ð 9åËnÖÛ’71pAä3¼¿™¨tV³.$/’G`ËŒ;¢ ²›uÁ±åËnÖÛ’71pAä#æcðˆ¨4¹f]ðŠ6y‘9Èæ#P)èrͺàr*T®YlKÞÅÀ‘ÈÉ–\u#¢Òe›uÁÙäE2Ó‚ƒi¢Ü³.x…œ •kÖÛ’w1pAä#²('§ 9#sÖg[WÉL;9a#¢¹³.Ô£beκ`[ò6.ˆ|díÚµ¼9(}Ög[I»”¾Ÿˆ’2g]ð 9+sÖÛ’·1pAä#Ò©òg"瘳.8Û‚¼JÚ&ƒjD³™³.x…œJeκ`[ò>.ˆ|B®0ðª‘óxbH^%í’A5¢¹ÌY¼BN¥2g]°-yD>qøðaFƒÉ–|¹yw#*ƒjÁ‘­¿àæÊ#Û¾ðûFÅcíùæ¤|èvPÔ©<°P!8Û"XØ×yûîòa[¢t¬="Ÿû9¹0'Ù‘ƒâ—_~™ØLéiyÂ*]lžÐé Ï ‚³-‚…}w±ï.¶%JÇÚ#ò yï¿#;<È{,”/ζöuÞž»|Ø–(kÈäI"ìì(<È{¿Ã”/ζöuÞž»|Ø–(kÈä¹U„ÈNúA1Ûm&'óìÒ¦BódÓé Ï åC|‚Tð°¯ó.öÝåöDéX{D>À'ŠP¾ÒŠÙ‚&'óìÒ¦BódÓé Ï åCf[p=£àa_ç]ì»Ë‡m‰Ò±öˆ|€O¡|ñ ï]°™mÁÙuÁľλØw—Û¥cíù�Ÿ(BùâAÞ»8`!+²–g[û:ïbß]>lK”޵Gä|¢åKйn»ÈüY8‘'¬ÒÅæ ò°™UÇÙÁžλØw—Û¥cíyŸ(B…¶b P‘'¬ÒÅæ Ú>¿Ç”‹¦%@ÍÙÁžλØw—Û¥cíyŸ(B…àAÞ»8`¡\kQp±¯ó.öÝåöDéX{DÇ'ŠP!ÒŠÙf3˜œÌ³K› Í“M§ƒ<,”ÍÉ“'³-dvû:ïbß]>lK”޵Gäq|¢"ý ˜-`r2Ï.m*4O6ò°P&sANyšû:ïbß]>lK”޵Gäq|¢‚yï 2qAN2±¯ó.öÝåöDéX{DÇÀ‚yï ÒÉ‚œÒ&øÄ(ì뼋}wù°-Q:Ö‘ÇÉ4âóçϧRDÖ䠘붋̟…yÂ*]lžÐé Ï ¥“ 4o$û:ïbß]>lK”޵Gäqìä¨Ò^¬‚*ò„UºØ<¡Sûçw™L²¦…¥¹ '™Ø×yûîòa[¢t¬="c'G…àAÞ»ø]&!Á yŠˆ<M„ÈľλØw—Û¥cíy˜Üû,\¢|ñ ï]°'E566¦RDIì뼋}wù°-Q:Ö‘‡É¢œ\qž ‘~PÌv†©”¼ßþö·3÷æg{mfÚThžlnä>ìÊã(9`!éÓ%Í9)“ýƒ´?7fú¸Õ×½úê«©ŸÔbß]>lK”޵Gäa \P¡ÒŠÙ‚¦bòäd«®®þç>3øÍöÚlï…æÉæÆAÞ<™”+á*qÀlr‹ˆ¬k!2¢LnôpvcAX·ú:·/gß]>nÕ½nGW¬="“«ÀœRL…PqP”.ìÊï–“{7të /ƒßµk×&…ªÊÇK°Éw‡hÊÅþAÚŸN3.d|äF }wù¸U÷ºý]±öˆ<Ì­«#¤§Š2È•«Z2à-ÇcyÝ<ÈKÀBª®âqÀ\ò=’Y=nýÈ_Üèt›¡ A 7.î°ï.·ê^·¿£+Ö‘‡1pA…’ƒb®Û.2¹òÒo ‘™?éy¢t±y¢yùΩxê,Á$Á í‰ôâFÿàVäÖß‘ ŒcTcß]>ºµY¶¥Ò°öˆ<L âýÐTˆRŠr’%'îò{ܾ-$›räÍ+äN9` &™­äÖÂoä_ªûYËGn‡sƒ›}ôÓª»eß]>nÔ½›Oðc[* kÈÃdÀ+ƒ ¢|•rP,÷m!Ù”ó /u }™ŠìD�‡–à‘À³|§x‹ÙQÝ?¸¹f–›}”IõS¡Øw—uïæBølK¥aíyT¨ôƒb¶Û0Léyrµág?ûYâŠC®ÛBLÙòìÒ¦Bód+÷A^N8e`,ŒRƒ9°‹´ùN±§|¨îܼõÔ;NʤzFûîòq£î¸ðÖ‘‡1pA…J?(f ˜Ì<ôÉÉÕÿïÿ}æªp>ï3å“6š'›Wòf=•²N,Á"Á.·NÉÿT÷2žP=3Áäf_'c$Õë\°ï.7êž ÿ`íyT¨|Šæ`OÚ˜Wn ÉÆKùR×½à€%8¤¸µž�éAuÿ ý½[ã ·û:ù{*oÇbß]>nÔ=þÁÚ#ò0ÕcÒÝAQn ‘[ÌÛB¼ÎkùRÖ½à€%d,ß//É{T÷nö?n÷urÒ©ò©=ì»ËǺgàÂ?X{DÆŽ %m&×mrXošë¶ôŸE¾yÂ*]lžðâw@ꮘu/ø}ÖŸ´ ¹²Í§AQ¡TöÒO©¾"Û}Ûä)Xª°ï.7êž ÿ`íy;8*”´™Ì“ÿŽŽ,Z´(q`þðÃs 2ß—ož°J›'¼üÁr!ë^ðû¬?ùŽñѧT •ýƒôQn˜ ·û:9ñTykûîòq£î¸ðÖ‘‡±ƒ£B¥·¿Ý’׿…¬{Áï³Þ䊯œ<ñö>*†ÊþAú§|ú(§¸Ý×ÉwNþ¦ªïûîòq£î¸ðÖ‘‡±ƒ£B™mF©Ùn 1e›é`*4Ï.m*4O6?|ò]÷‚ßg}I`PX,$*†ÊþAú&7ƒ×åè뤖PØw—u/ã%•·¥c[* kÈÃØÁQ¡¤Í˜O Év[ˆÉ ˜JɳK› Í“Í/ß XØ­{ÁﳞdKÐBÕIƒÊþAåI}6åèëäÄSÕ¬öÝåãFÝ»9#‰m©4¬="cGù2o ‘6ã×ÛB²ñÛw@?¹Ö½à÷Y?°âbœä•ýƒÛ}O9ú:•ëx°ï.7êž ÿ`íy”œˆÊ ‘ódY®8évPôcyr­{Á‹~äD‰‹q’Tõn?QD”£¯“ ¢ª¿Ë¾»|ܨ{.üƒµGäQn.Dþ$mļ-ļ=Aйn»ÈüY8‘'¬ÒÅæ ¿ä³­{Á‹^¸'9IUÿàöED¹ú:9ª¸%†}wù¸Q÷ \økÈ£¸ \¬ž"E«`€Š<a•.6Oøù Ÿ¹î,úàbœä4Uýƒ›'e¦rõu2ûIEYÙw—uÏÀ…°öˆ<Š ÊF®rÂ$´lWzu;(êPsŸqÀ¢.ÆI*¨ê$xêöºGåê뤜R^§±ï.7êž ÿ`íy”NÚƒLƒµ[^ŠÜ¼»¹58"5$XÈÅ8I…lý7ïlTÙö…ß7*kÈ£¸ ‘~[O–ü-Ûºä²Ïdÿq1Nò9Q R#EsÍ'¢|HŸÎñ•?0pAäQ \Ým!ä?²å{m®{AþÁ ùy[SH`˜'¡T9&[Íd%ï`à‚È£¸.Ù÷ùÜBþ%O¤ YñŸ¼Oò}d�‘ü$ˆã Z¨Xç‚ôÅÀ…0pAäQ2@æ½pÁÂÛB‚Å|2×½ð6-ȯ¤o‘ iÈ, üå‹ ÿàY‘‡1p¼-$˜ÌA6×½ð&ù^Êþá¾!?’ãIƒàr,壊)_ \øÏŠˆ<Œ ýÉÁ’·…›œËÀIÚ�ÛÞaΈáZ$äWA=!“@°Û€%ÿbàÂ?xVDäa \è‹·…P&sÝ  ÊA ÒAО(b’c*Ò¥|1pá<+"ò0.ôÄÛB(ó„™Á¬ò‘`…ô½\8•üL‚ãÒ—‘œ„r ÊþÁ³""càB/æ`Š·…sÝ ¶Ü'u/'{œfN~'Ç9! ª Î6¡Â1pá<+"ò0.ô ƒ'9 å•tÊ—´LqÝ ÷0hA: âEÒIÿÉYS”é÷yœõžy;Sÿ“@…ìG^=§bpÝ w0hAº‘cNåAÜPþx‘Ð?¸§ˆ<ŒÓ×üKö›\-çm!T*®{¡ƒ¤£ Ìc0‘.üƒ{ŠÈøðÞB*pÝ 5´ ]qÖå‡ ÿàž"ò0.ü…·…JÒ¦¤OàºÎ`Ђt%ýOÆÀ”~Wüƒ{ŠÈøðsJ*Iä®{Q:-HgÒ7Èø!褯”µ.ˆ¬0páÜSDƃ®·ÉpÞBåÀu/ŠÇ éDŽC¨HŸå'ã96<U$=€#u$ÿÇï>¥càÂ?¸§ˆ<L \xo ¡rËgÝ  ³}Þ!'x ZNäû-'^²IÛ6o'kll ü¬¬ .$êEúH©³žø´‘à’ï…|GÌñµlÒ&ÒÓ²ñáM \y˜Ù’{d@c5Ø“<ÞB^!'-æ‰JæºreÑQ2ˆ#õÁ)éFNÆÌ“òl›ÈÐ}m)Ÿ|¿%P!AÝlu!›ôLÒ6²µ‰ÌÇ obà‚ÈÃ2§9’Zˆ– x2É ¢ð8=Ÿ¼(sÝ óviÏòoÐg]0hA:“c’y•k ÂXB‚´ÙÊž¹qZp™ ×ZmÙÆ€ä \y˜œ„0pážô+4éW©y[ùœ”K;}÷Ýwç\m ò {fP‡H7v'cA ^Ú]Q—Ù'lvm„3r¼‹ "càÂ=™Wjd ×ßßÏÛBÈWd¦Å¿ÿ÷ÿ~V[–-ˆWäDM¦Çg»†H7ÒÎ3¿÷æ¤ã—|ï­ê‚ë[U cnocà‚ÈÃä�,)©%'{™/ÙäëŸX]I Ò¬ ùNËÉ‹.8KŠ‚ ×mA<Q—ï|æ¬3sãíb$r+y‘ÊÛxFDäqÒ‘’Z¼RE:°»Ï=(³.ä;+3¦t¤ É€—c[P¥¯ó“¾qö‰l³.8ÛÂûxFDäqÒ™’:¹®R™[~är²ž­ýfnº_m4×£áUU ¢ôYò=úIºùd%s â-s”›*ÒÛ‡»ÈÛxFDäqrâÌ«þjXÝ瘾ñ)"äu2í5×ÔèôMç»Y|RPÉm!æwÁ»$©³N¤ 2¥üÙ6ü "“ˆ0jdFÛsmråŠ÷É“H0N®2ÊL¢\í[·þÄ\ŒO6~O)ÈÌ< ›MêCê…ÁÊd'y ‘?0pAZ2èܸùa#RIf È€]ïrrŸ­ rãæåÍﲕI—­Ù~ŸN'[]ê´QñX{¤%v äl«ä6¶9òÚ«®ß¹RË¥s_Ä~¶xl” k´ÄŽü‚m•ÜÆ6G~¢C{Õõ;Wj¹tî‹ØÏí‚raí‘–¤cøòË/S)$~ÎL› ͳK›œÌ³K› ͳK› ͳK› ͳK›œÌ³K› Í3Ó<ˆ‘ÛØæÈOth¯º~çJ-—Î}ûÙâ±]P.¬=Ò’t v'ަBóìÒ&'óìÒ¦BóìÒ¦BóìÒ¦BóìÒ&'óìÒ¦BóÌ4bä6¶9òÚ«®ß¹RË¥s_Ä~¶xl” k´ÄŽü‚m•ÜÆ6G~¢C{Õõ;Wj¹tî‹ØÏí‚raí‘–Ø1_°­’ÛØæÈOth¯º~çJ-—Î}ûÙâ±]P.¬=Ò’Ù1XMÑ/6OX¥Uä «t±yÂ*]lž°J›'¬Ò*ò„UºØ<!?ó Fnc›#?Ñ¡½êú+µ\:÷Eìg‹ÇvA¹°öHKìÈ/ØVÉmlsä':´W]¿s¥–K羈ýlñØ.(Öi‰ùÛ*¹mŽüD‡öªëw®ÔréܱŸ-ÛåÂÚ#-IÇ`7EßThž]Úädž]ÚThž]ÚThž]ÚThž]Úädž]ÚThž™æAŒÜÆ6G~¢C{Õõ;Wj¹tî‹ØÏí‚raí‘–¤c°;q4šg—69™g—6šg—6šg—6šg—69™g—6šg¦y#·±Í‘ŸèÐ^uýΕZ.û"ö³Åc» \X{¤%v vnc*ú/èlkA(ôs´´u"½#•Kîa[%·±Í‘ŸèÐ^uýΕZ.û"ö³Åc» \X{¤%v V¦1ùÕ›X]]™¨§™­òl9r±Ô«Èl«ä6¶9òÚ«®ß¹RË¥s_Ä~¶xl” k´dv VSô‹ÍViyÂ*]P^ä]ìø¯?Bu]3Ž \FO"¿£ƒŸ¢eÍxéÝžÜïMK[å «t±yÂ*­"OX¥‹Íò3bä6¶9òÚkyËÃèé3U0¥²Ôr•}ߣ8}zTÉlSö³ÅÓ¹îØ.JÃÚ#-™ƒÕ‰c±yÂ*­"OX¥ Êûb?þá?ü5ö»™LÏä¸ÙÂÿ7ôAî÷¦¥­ò„UºØ<a•V‘'¬ÒÅæ ù™1rÛù‰íUM¦1räú§SÉ\Œ!„oFDÁtÊRË¥nßFq¤s ^CÖŒ‹a<¾+¢d¦)ûÙâé\wl¥aí‘–Ø1X™Äྱ«g,í*ƒØäYtn}M}Éÿš8E¹î…bl«ä6¶9òÚ«š2Ä oB}Ó[‡Ã9¶ƒØZêªPÀÃ7¬GSûÁ,ubnmÕÝ‹ª^Sþºóî,¥ cí‘–¤c°»Òm*4Ï.mr2Ï.mÊ+ïöi´Þw¢Žì¶Ê‡öáìíÂÿ¦]ÚThž]Úädž]ÚThž™–z&rÛù‰íUM¬ߨ€Å•r,Ÿ‡Å[?ÅH n± \üolø+TÆÿ¶¬íµõè%Þ*â1êêÎÿ³”‚޵GZ’ŽÁîÄÑThž]Úädž]Ú”_Þ ¶®Ãý÷ …›üœ™…ÞFßäí<oR>iS¡yvi““yviS¡yfš1rÛù‰íUMr„ˆE ñÁùñ¿{/V·~‰«15s'K-—º}›ëV‘›ˆv½‚«*QQýZû®(™m!ØÏO]Ýù–RбöHKì¬#§ÑéV*¥šº)w:`[%·±Íy‹1z§GU>ùŸíÕ½2¤=5¬j»Ô>)¬Ôr¹ºokøªõ1TWT¢êÁWÐM®ó¥ ûÙâ©«;ÿÏR :Öi‰ƒ•ë¸0œ¾¾…é:Ο»\À §üSîtÀ¶Jnc›sÉH7:û¯§¹ÜÂÅðVìŠL¦Ò”I‡öêJŒëê|)qâU¹èY´\S¾FU©årkßSß¡s˨ŒŸ.ZߎI»KéØÏO]Ýù–RбöHKfÇ`5E¿Ø<a•V‘'¬Ò…å}€ÿëïÿöLF˜Í[CÂá½Øöø/ÐöÏ‘øk>ÇhäwØ´íŸÐÉõ{¿ÀáУ3‘ë;¿göï5§Üµ}QìçÍ?­"OX¥‹Íò3bä6¶9—D;ÐP¿í©>1ë¶'êª#ÄÀEN:´Wåeˆ}Þ=k³ ªë^C·âÙ¦RË¥~߯OHGN`Ïê{ãë^Ô5GTÑ i&ö³Ås·îü5K)èX{¤%³c°:q,6OX¥Uä «tay TûÃDÍÝàïötÅ_ó:îAÅŸýïøÅ§½©wfþ^›ÀÅæ¿CÍäw&§Ü‰ûyóO«ÈVébó„ü,õNä&¶9—X.þ ÏKì‹ÊÅ8:Â)i¹èÐ^U–Á˜<ðFYl2~¬Ý|gçÌ&ÈsvdJ-—Ú}?! c£|Ï*ÀæCg09'f‘ßcS‹¡C»-×ê·³”‚޵GZbÇ`eïì9„o¢QDçl—1>u;þ±ñï0pîªEä¹üSîtÀ¶Jnc›sI®[EbçÑÕ¸ Uru|u+ú®ºµÞ?éÐ^Õ”A޵Ÿ"´âžÄï¯\´¿Ìöƒ­Ø¼¢)`C½‰èÑÝX!WÑåö†æ¬ă{7cÅ.>Õk\©;ŸÎR :Öi‰ƒ• øàÀç¸>'–pÇ-q1"w§Üé€m•ÜÆ6W>Æd?ZÓÖçãÁÆ#®M[÷3Ú«š2Ä0ÚwxÎÉøœ-ˆ c}ïwd¯´ oR]w~ž¥t¬=Ò’t vSôM…æÙ¥MNæÙ¥Mùå #\W•¨£9ÛþûÎ&£ÎÙß›”5/5åNnùÁ‚º™)wy½7Å.Ï.mr2Ï.m*4ÏLK½¹‰m®ncjèClIL[_‚õí§²L[§lth¯å-CPoÉoñ"uuçÿYJAÇÚ#-IÇ`wâh*4Ï.mr2Ï.mÊ/oëë±¶¡ ñÍ\›¢áïÀ_,{í}ã3¯7ÝyoÒœ¼Ï?š™r÷£Úçð›Ã=©Ü<Þ[@ž]Úädž]ÚThž™æAŒÜÆ6ç¶›é}=9­z š»/r&Zth¯ÊË`Ü@´ÿS„[›“Çô–·ðaÏ·W<£§Ôr¹±o©(ú? £µIÆ:?GKÛè9ku¬3ØÏO]Ýù–RбöHKì¬\Ãé(d%‹YŒ!tljF÷Õ®=”sÊØVÉmls.2®a0ü|rñ·Å[qèìDb&Ú,y=65¸th¯*Ë ÇàŽ-‹ªøß¿sg«DÕƒ¯ Ká½û¥–Ke½$n]ìÀ–Äz[™u£þV-µeÓ[ù뎷Šxk´ÄŽÁJwDæ¬qaL}ƒë¡þÐÅÔÿØ)ÿ”;°­’ÛØæ\»€£¡GP¯o¹=¤á—¿Û?†ßÆÞÍ?Ã.>5'Ú«²2ÑùÔ}ñöõS¬Þ¹ïvu#‰ ÒÓ…Cí¯ã废â.…O­)µ\*÷­qùC<5¿•5bçÞwÐÕÓ¯›^ôtBû/¡®¦:ñijÒÖõÊýlñ\©;ŸÎR :ÖiÉ쬦è›'¬Ò*ò„Uº°<«Ç¡þÚŽZ¼7ý÷~Ž®ý¯Í ÀÍ[Næ¤S‹¶/¬>S~yÂ*­"OX¥‹Íò³Ô;‘›ØæÜaŒöáýT˜{càÂŽíUM ܈ìÂ}Õ?CÛ`–™<˜À·žÆÂÍG1‘ú/'•Z.uûö"¡P]ÿçÌM2&¿Æ†åØ|ìJêœÅ~¶xªëÎϳ”‚޵GZbÇ`eðr*°`n;7¬ÂÊæˆ‚ãx«ˆ¶UrÛ\ñŒ©q\º4Ž)'ûIÞ*bI‡öª¦ 70в KZNÁòºÆ9´×mDZ¹+Y©åR¶o§O¡eár´ X¯Œ¡vÔm9ß>ö³ÅSZw>Ÿ¥t¬=Ò;+¹×¸?½]ÅtÖešr§¶UrÛœ•iŒŸü%–ßU‰ªÅõØÖz ÷¤“G=·a]ÍÝñú«DõŠÝ8š÷U¹Û˜Šöã“p+šâ´}xgÇ-O7)E‡öª¦ “ˆ„ê²­#¯ÛŒpÔù±RË¥l߯"-Ùߢ*¯«#šJ:‰ýlñÔÕÿg)k´$ƒÝ}S¡yvi““yviS~yQ||¨'2_Ûs»VÖ̬q‘ý½I³~>Æ®¿ÿ_rN¹Ûs¸'÷{­~o–<»´ÉÉ<»´©Ð<3̓¹mΚ1t�kŸ:„‹3W±¡0ÖÉSAkU´aïεXò³wµ‹ÍÊâœ/âÁªø{gõñ­j»Îó #6th¯jÊpçö5`ó±±T:—QtmÚ®‰9—+JVj¹”í[ãì[¾Í~–ÉD6mê⠪Ǩ«;ÿÏR :ÖiI:»GS¡yvi““yviS~yÃ×U%êhÎöƒÅhêK³¿7iægã"~ñÈŠ¿ïž™)wmmmh{sÏÌ”»?«ù~}äóäëãòú½qÙòìÒ&'óìÒ¦BóÌ´Ô;‘›Øæ¬ü Cí/¢¹/í*¶9µ¸bÖ…Ï% Æ¥øÿ=C#V÷ÀÅp¹s#æWÜšÕ;°÷Ý.ôÈ”äH7ºµã—W£æ®°õè¥ìWþ(A‡öªª ÆÅ<³£9ÐmÜøúM¬zºc Y©åR·ooábøeìèËýÝ2&ñukžîTóýc?[<uuçÿYJAÇÚ#-±c°2Œðº:lØ9{‹PÓ›x¯ïrWÿÊ?åNl«ä6¶9+™ÖiLô¼‚ûâuv×Ê6|›¸mDŒáØÖmè³\Üø¡ûîC}Û@޵ƒ¦1ùíÛhXøŽ)¸® Ú«º2ÜD´ë×h>ü]ƺ+bãƒ8ºVTÏÃâÆ?`DÁ­›¥–Ké¾GWóë8<t=c|r ãƒG±Û讨E㱨’YOìg‹§òûâ÷YJAÇÚ#-±c°’c‹‚•ÊØVÉmlsVdÆÅz<þ.~2?ùû ¡%óPQ¹-_™Wéâÿñž~¢-ºµé,\²3ÁŽläï=‹-¶éàÒ¡½:W†›=s£³‚71ù ýWÓƒhÓ˜>…Hä_0pî¢N/(›Rj¹Ý·±Qœ93:;û‘OOájzÙI ÷Ȩ̈œ‹Fqi|*û…—±Ÿ-žÊºóû,¥ cí‘–ÌŽÁjŠ~±yÂ*­"OX¥‹ÉK\i߃õ X¿©‘ ‰MúëÓ³óŽ£­¡vfÊ]î×&¯`†1“ŸûµÖyÂ*­"OX¥‹Íò3bä6¶9kÆÕãh\|/-ÿ[,J¬Mñc<˜xâRüdpè |¸oV×TÙ^ÅŽEBXŠØ^ÍEšPN¥(“íÕ¹2È­ž J¦°£Ôr9ºo£aÔÕ©Yh³ìg‹§¶îü=K)èX{¤%³c°:q,6OX¥Uä «t¡yŸ¿»'VǯÀþãÿŒÿòÿ_X°à/°ºµÇmÞ{'ïÞ}iåÌ”»Ü¯MN¹Ûs¬w&?÷k­ó„UZEž°J›'ägÄÈmlsvâØhöm[Õ«ŸF(|25€ÿÿäD£ÑäfsÛ8·Ë7Û=jñ6&ºv`S×h*M™th¯Î•‹œ¸Ð†³u§×,¥ cí‘–Ø1X0.àкŸ ¢òl锈sêžîá(z›· up*õB{åžr§¶UrÛœKäÓÏ4¡g"÷:Ưкj³õZ§C{u® \äÄÀ…6œ­;½¾3AÇÚ#-IÇ`w¥ÛThž]Úädž]Ú”Wž<·¼ªÿ‡Oùæ­Ÿ£çÍõx,5e9ë{Sîü|‡÷lƆ×ÍD¦ÍךSîîÿÑ¿CÍÏ^Ÿ™r—ù{2Ó¦lyvi““yviS¡yfš1rÛœ•iŒ9‚~Û8B>¯“™Ÿ ¹ù# Me¬*ÃàÑßbÛŠ{P±ø¹™Ê L:´WçÊÀÀEN \hÃÙºcàB'¬=Ò’t v'ަBóìÒ&'óìÒ¦¼òR3.þŸÿíMô$ò%pñB¯`}í_b[ÏøÌëM3ïMM¹ëú<=ýß3Sî’¯í™r÷ö»8üÑf6Lw~o’]ž]Úädž]ÚThž™æAŒÜÆ6g%?ÿÙ„ú¦·‡so[±yE"³ÆÂb£gqf4=ÿ¿‘>|Ú%þÓÆä0úåѨç^Æxf`ƒfèÐ^+91p¡ gëŽ °öHKì¬ÈUÀ#h|xöõ}ŸºUdQ¼Îæañ–µ\ŒÈ[�°­’ÛØæ¬Hà¢>QG¶[U(#p!ïm@Út”Ôµß9W.rbàBÎÖ:aí‘–Ø1Ø3¦¢èÿäƧ0Ú÷1:{¾Å¸í Ê \8m•ÜÆ6g%|XÞÔ‰ˆÌˆÈµ}¾~ÊÀ…th¯Î•‹œ¸Ð†³uÇÀ…NX{¤%³c°š¢_lž°J«ÈVéÂòã—»Úp=íÖdþ?pGÒ^?÷½ T»2q�˜›—ºØ<a•V‘'¬ÒÅæ ù™1rÛœ >lžyÌsnñÁp}æ­" \¨ C{u® qhÝFñÆb®¥–ËÑ};rëÖÂH*Ynìg‹çlÝ1p¡ÖiÉì¬N‹ÍViyÂ*]Xž~˜¨£9[å*¼ônÍ{¸HO›'äg©w"7±ÍY‘àÃs3yÎÉøûVîfàÂ:´W•e0¦. ÒùZB!„ZÞBgä‚’Ç8fSj¹ÔîÛÛ˜Šþ :ÛZ ý-mˆDoÌZkF%ö³Ås¶î¸Ð k´ÄŽÁÊ0:64àeä¤m;7<‚ë·£½/¹8gvÞ:�è€m•ÜÆ6gmº¯K¶µx̳ØÙ6¬X9- th¯ªÊ`Lö£uõ½‰ßgËg½*g”Z.Uõ"Oý™üêM¬®®L«—ø&?r>þMUO]ÙôçlÝé5K)èX{¤%v V®áô@sÖ°7†Ð±©Ý©§ƒdÇÀ…ÓØVÉmls6ntcÛ=µ9Op’'‹5XØr*~z”Ž th¯jÊð' µ?ŠÊê5h:2€ÑÄ“incjtG[~†Gö™{œwX©åR¶osh_Yêºf¸œœbLatðS´¬yûΪü0ûÙâ)­»Øeôu¼ŽPÓ~ôD¥Lcrx�.ÍÆa»( k´$ƒÝ}S¡yvi““yviS~yQ|ÜÁg™¯í9„]+kPèb2õ½ÉÀEèðÉŒ¸;yIù¤M…æÙ¥MNæÙ¥M…æ™iÄÈmlsv¦0n@uÅ|Ԯ߶¡Wäì9‚ð/¡®ænTÌ߈ÎË™a .TС½ª)Ãuô5-ÅÒ}ßÌ=áºÙƒm©_¨²Ôr)Û·Ó}hºwöË Pñª á1¾£ìg‹§®îRÁ¾øï—¿Q¹x'º¯ô¡eá]¨¨®Ç¾A»µJÇvQÖiI:»GS¡yvi““yviS~y|¨JÔÑœí‹ÑÔ71ózÓ÷&§Üýã»ÀE±XòZd¶|S¡yvi““yviS¡yfZêÈMlsy0®á«}O¢¦rn?Y¹èY´\Ërun#‡6b]*økňÅ2fkP.:´W5e005øžÞÕ=û¶¦Ø†:ñHÓ—¸‘øäÂÛ# .'—Z.uûvƒû^Ä®ž±´ï©ØäYtn}rfœƒ‰8ðQ4Ëw¹t:´ÛrQWw70в ‹CŸcÒ¸Ž¡÷^Ä£­§06| ½7á‘çºjʰ]”†µGZbÇ`eëëñÂÎÙk\„šÞÄ{}—¸÷3>8;ŠÐ¯¾tå>R¿c[%·±Íå+¹¸ßá­hJô‘­ÒhbJ~ b—q,ôfÆÂž”‹íUM¦0غ<ñ»m·ÊUJnß]ŠRߟÓíÓh½ÿîÙuc«|hÎ*¸§F~7G]ÝÅǧCØdûŒ!„ŸÜžŒk]ظÖû³”‚޵GZbÇ`ÁÆû­a|‰ x2ÞË=±ß¢/rº´¹Ü?:ðìßùhâ*eU(ÂÀEØVÉmlsÅ3¦ÆqéÒxOm~ö4Žî«åV“ªyÒ¡½ª)ƒ[ƒ¿ÁÃ+žÅÎô‹Y·&›…·‹Sj¹ÔíÛl]‡¶g©‹ÌímôM:¹`?[<uu7«½¯aÅüÔ®ªC]Ýè]p-_ÿwî õBõê'l¥aí‘–ÌŽÁjŠ~±yÂ*­"OX¥ Ëëž¿û/¨kúƒãÂçïîÀƒ?ú3T-zË×´ íX¯Å{çþ^c*ŠþÃ{ñxí=øA¼Þ+*Šº6bÙ¦·ð…Í{Mùæ «´Š<a•.6OÈÏ<ˆ‘ÛØæ¬Lcüä/±ü®JT-®Ç¶Öc¾%Q yJAÖIС¢Õ+vãhba7Æ Dû?ÂÞ—W§n;¹5uñBý¯¸È“íUYŒËèïÿ^É­ù(µ\*÷­1rý—n¥Rîc?[<uu'·Š<ï.C].Ìm5ê·¼Iõ7ð±]”†µGZbÇ`aúZê^Ç€ Æãƒž®?EÅ}¯ g"†ëÇBx¦óûÔ íÜÄpg#–/HNǬ¬y;÷ÿ£SñAÔu\N¿·”ra[%·±ÍY3†`íS‡pqæq’2½8ŒuòhÅÊ%høeöî\‹%?{Q‹Nîöð‡Øº¼&¹\åO±zç~M<áÀÀÔ… ¸Â2/:´W5eÈÕŽâÿþßp)ÐCÍ5¹Žó眸%ÖûÙ⩬;ãj7š›ãjfã0þ„©›ªŸÃÃvQ*Öi‰ƒYm{uÎÓ˜èÝ%•ó±&<?ÀOc¬óelêM½ÐN|0?Ò‡÷ö<å‹V¡±£C“¼„X(¶UrÛœYuþE4÷¥­.o\DçS÷ÅëmÖ…Ï%OzŒKñÿ{‡F,®ÐÉc÷Þû^XþWXÑFdh‚·ÏA‡öª¦ 1D;v`óÞ·‡Ó¶ƒøí¶g±+r-ñ*c´oµü‘Qç[_©åR·o‡Ñ±eöL¯ÙöbÛã¿@䆜µÆ0ùZÞêŨ‚ûÙâ•¥î¢xª1c¡[Ø.JÃÚ#-IÇ`7EßThž]Úädž]Ú”_Þ$¾jy¾püð¨\²½cQì5àoþü~´ \Ÿy½éÎ{“æäõ|Œ£ûZ_‡¶ã×oÿH¬šoûÞòìÒ&'óìÒ¦BóÌ4bä6¶9+“ˆ„6#5Oò¦1Ñó î‹×Ù]+Ûðmâ¶1†c[·¡s,©Åæú?¡§±f}ûö£ïàèçcEò¢C{US†¢áúÄïζݽAž $žÁ]÷ !ïÙ”ù“¿SŠRߟ›ÅÓÓ*`CâÍ÷èl¸w=“ß÷¸@ò·¨8êêNžÄs�ëW§µ‡ôí^¬ÞÓ]úÌäïPñX{¤%éìNM…æÙ¥MNæÙ¥MyçÅ.cÿ®°þ¶£GîÓŽ¬ÿðÑa>ü1ÆSvÎ÷Æå΋áøûmhÚô0jS‹sæÿ^û<»´ÉÉ<»´©Ð<3̓¹mΊ̸XÇÃßÅû/yBÒg-™‡ŠÊhùÊœ…ÿÿ‹‡ðô¸XÐÕ¹øû&‡yï—h¨ÝÍ5.ò¤C{US†¢ï¼‰ð7Fçl—Æå¶MyÙUœøã n)µ\êöí0ÞÙsßd©—hôrjœÿ>އsWc§±Ÿ-žºº“ÀôbTÕ>‰m™‹´n®Ã}µ xE~n‹Ì½•Ä!l¥aí‘–Ø1XqðÞO™ Ýñ:BMû“YÀnx�Ñœçya[%·±ÍY3®Gãâ{±hùßbQUe¼¾~Œ›#˜4âýÛÐøp߬®©ÂâÆ?`Äòdð&FúÞÁžP3Úz.&úVcrýqõ<׸ȗíUM¦qùƒ¿žyuø6&Žÿ¨Œ•Z.uûö>8ð9®ÏùŽ]ÁñG1âÂwýlñÔÕÝmLö6áÑ=§0gÙÖè[øß¶|®$ˆ•Ží¢4¬=Ò;+NÝû)W&M.<ß*ïD÷•>´,¼ ÕõØ7˜v8åĶJnc›³c íÁ¾më±zõÓ…O¦2câÊ+·6E5†Ú±2ñ$‘øVY‹Æî!|Õ²4ž¾«÷ `*õ:²¦C{US«[E~Œ‡ö‰Ÿ¦©%«¥¾?7‹[E*WaßYÕ½d?[ µuw#§¿8úî^ú׸ð8ÖiÉ쬦è›'¬Ò*ò„Uº°¼ªýaò�>g[€¿ÛÓÍGÉ{?ÿìÇ/>íM½3ó÷þ3ÞÞô—Xú“Æu¼ßT¥[`løz?nÂköàØ¬¿[ìçÍ?­"OX¥‹Íò³Ô;‘›ØæÜ1=Ђ…‹w#2ÃÔÐ{xîÑ7ñõØú{?DÓ#/¡kBõi¥th¯jÊC´cê^Ø1{ÊûÎg±âÁuØÖÞÕ—J-—º};ŒŽõõxagZ½Ä·ÁƒõÛÑÞ7žz:ìg‹§®î¸Æ…ß±öHKì¬8uïgü5CØ´+µ ³1„ð“»ÑsÀq­ ׆M¾,°­’ÛØæ\;‡ð¦×Ð3! ÿÝÂÅðVl0#èÚ¸1mP²¢C{US†Û˜<}ççœcÅÛZÇvìè¥Õ*µ\êöí5œˆÎq§tljF÷Uõ+㲟-žººã~ÇÚ#-±c°b sâ =«½¯aÅüÔ®ªC]Ýè]p-_ÿwî õBýdLÿc[%·±Í¹Ã¸zÍ+j° öáxÿX‡Uµ5¨^´,þïTÞBä¦êÓJ=èÐ^Õ”a#¿™k\×ñožÀ¼úCIý—*¥–KݾâãŽÈœ5.Œ©op`Ý"Ôº˜úuØÏO]ÝY­qF}jQy•Ø.JÃÚ#-IÇ`7EßThž]Úädž]ÚTP^w'Úš^DS(„¦ÖCxóýãù¿7ñó ´<„.øKÔÖÖ&æ²ÕÖþ –ýý+˜LG²¿7©Ð<»´ÉÉ<»´©Ð<3̓¹mΉ[EªayªoœÙê_Ækʯ†ëB‡öª¦ Vk\Ü…ûB_ÄÒjÉß*E©ïÏÍêq¨…PäZêuêÈߢ⨫»iŒ|´í݃k\ÜÆD×kعêùYJAÇÚ#-IÇ`wâh*4Ï.mr2Ï.mÊ/Ož;‚ŸýÅõ4³ýà¿àï÷|8mÎþÞ$ógãj76lhŧ6¯Íö^Qhž]Úädž]ÚThž™æAŒÜÆ6çcÝÍoภÓÒu¦C{USYãb ê_Þ9{Ê»¬q±ò—èK]<P©Ôr©Û·ÃèØÐ€—Óë%¾íܰ +OJ½L!ö³ÅSWwVÁ¾*¬l?ÇÀ…DZöHKì¬\Á±ÍK°¨á×è8ŸZÓ"†Éh?Â7¡}èOÉ—Ù’Èõïq<qÿv:÷Ŧ¶UrÛœKFŽâÀñ+sÂ'pà£(g\äI‡öª¦ k\„·âù.õm¬Ôr©Û·¹×¸?½]>xTl©«; \<…Ú†—ÒZ;±­áAT×Ôaó~ï/ht¬=Ò; ±BK÷`àVæÆÀÍžŸãɼïý,äZR_Dnb›sI4ŒºYýâ­re;†ØAæEêËïÔ”Aָ蜻VŠq:žâ‡ú笳eL}‡Ž†Å\ãÂãÔÕ]®`ß5DBcMû™¹k_8Œí¢4¬=Ò’Ù1XMÑ/6OX¥Uä «tAy½alYшs©±ÎL¾1޾æµxøå~oZúË/¿ÀáÐ#3‘놆†ÄfF®Û¾Çs¾×ê÷æÎViyÂ*]lžŸy#·±Í¹$ÚúÌÕë·=‰Úê…¨ÛÜŽ¾É9£gÊB‡öª¦ VæaIÓ—\ãbV¤¶Ê‡ÐÔ7‘z:ò·¨8®×ÝÄQlžª7ÁÕÔ©ÂvQÖiÉì¬N‹ÍViyÂ*]XÞç8üaͶ·p¤§mmûðÆ«ÛдþATÕ¼Œ7>ýÂâ½é¿·ÇÃá™Èõ¼däúÁø<ç{­~oî<a•V‘'¬ÒÅæ ù™1rÛœK&¿ÅÀù9×|q#òsÜ¿¦gçÌz£lth¯jÊ ‹g°|Ãö;±ÄÖŒÖ÷ú0Sß¾J-—º};Œðº:lØ™^/ñ­éM¼×w9^s걟-žûuw£ƒ§1ìƒua‚޵GZbÇ`ø†Ï£¶ª2QW•¨ª}Þ™•î]Œ\ë€m•ÜÆ6WN²ÆÐBTT?..Ú™Ú«š2äšöîžRË¥nßæXãÂEìg‹§sݱ]”†µGZbÇ`Å|¾¹Ødƒ}DÎc26ŠãŽb¤äÈ…{‘k°­’ÛØæÊ)ÞïŽ~ƒþáI®”'Ú«®ß¹RË¥s_Ä~¶xl” k´$ƒÝ}S¡yvi““yviS~y÷~þ௱ïlrjsö÷&ÙåÙ¥M…æÙ¥MNæÙ¥M…æ™i©w"7±Í‘ŸèÐ^uýΕZ.û"ö³Åc» \X{¤%éìNM…æÙ¥MNæÙ¥Mùå%Ÿoþxj1MóÞφ¿{�±ì ´÷ϼÞtç½IvyviS¡yvi““yviS¡yfš1rÛù‰íU×ï\©åÒ¹/b?[<¶ Ê…µGZbÇ`%÷óÍ;65£›÷]»Šm•ÜÆ6G~¢C{Õõ;Wj¹tî‹ØÏí‚raí‘–Ø1X1׸H%SÜ|¾9ÝÁ¶Jnc›#?Ñ¡½êú+µ\:÷Eìg‹ÇvA¹°öHKfÇ`5E¿Ø<a•V‘'¬Ò…å}€Píu4g«|ÿ°ÿ˜Å{óû›Â*]lž°J«ÈVébó„ü,õNä&¶9òÚ«®ß¹RË¥s_Ä~¶xl” k´ÄŽÁÊ0:Ö×ã…2>ßœî`[%·±Í‘ŸèÐ^uýΕZ.û"ö³Åc» \X{¤%v VÊÿ|sºƒm•ÜÆ6G~¢C{Õõ;Wj¹tî‹ØÏí‚raí‘–¤c°›¢o*4Ï.mr2Ï.m*4Ï.m*4Ï.m*4Ï.mr2Ï.m*4ÏLó Fnc›#?Ñ¡½êú+µ\:÷Eìg‹ÇvA¹°öHKÒ1Ø8š ͳK›œÌ³K› ͳK› ͳK› ͳK›œÌ³K› Í3Ó<ˆ‘ÛØæÈOth¯º~çJ-—Î}ûÙâ±]P.¬=Ò;ò ¶UrÛù‰íU×ï\©åÒ¹/b?[<¶ Ê…µGZbÇ@~Á¶Jnc›#?Ñ¡½êú+µ\:÷Eìg‹ÇvA¹°öHKfÇ`5E¿Ø<a•V‘'¬ÒÅæ «t±yÂ*]lž°J«ÈVébó„ü̃¹mŽüD‡öªëw®ÔréܱŸ-ÛåÂÚ#-±c ¿`[%·±Í‘ŸèÐ^uýΕZ.û"ö³Åc» \X{¤%v äl«ä6¶9òÚ«”A×­Ù~ŸN'[]ê´QñX{¤%éì¦è› ͳK›œÌ³K› ͳK› ͳK› ͳK›œÌ³K› Í3Ó<ˆ‘ÛØæÈOØ^ówþüy,]º4•¢táp8±‘^öîÝ‹W_}5•*/ù‡N¥H HK \$ÙåÙ¥M…æÙ¥M…æÙ¥MNæÙ¥M…æ™iÊÉmlsä'l¯…a}eÇÀ…ž$P788˜J•×gŸ}†ÆÆÆTŠT`ïFZâ›ü‚m•ÜÆ6G~ÂöZÖWv \èG^ša466†šššTŠT`ïFZ’77n~وܔ­ rãæåòÇúÊŽ ýÈ­r«ˆ—H EnÙ"5Ø»•‘D‹Ÿ}öÙTÊÛNž<é›Ïê?í"yíjš 0²ô..²càB?2»ÁkA®s¡{7¢2’ƒ¨×¢Å¹m Ê9QyÉàÏ+‹®å#H'Œœí] \dÇõô"ÓÖ®]›JyÛ™Zì݈ÊH:7éäü€ "r“ŸúG´Fž {÷Kv<¦ëÅ«3$¨Ëï :¬Y¢2òÒjÈv‚vÐÿãÿȃQyq°.È ä{#'O4ú0Çg^mç~Ûû :Deä§_ú˜•‡oEÚ¢lì½IŽÓ<iš‹ }ÈL</Þ&b’Ù \OE uˆÊD¢^îx31pADnñã}ÂA;aäêùÞÄÀEv \èÃë·Êgc[Sƒ£r¢2ñÛÂsA¼u‚ ¢òðã« 0òÙ›¸_²càBæXTþõ*®s¡k•¨L¼º°• uļO‘¨<d6šß¾{ \p¿d'uâ§Y®”Œ›ý0ãG5¸ *?̃¸à�È}~ÝÅÀy÷Kn¼ î2vöÃÓ¦öîÝËu.à7˜¨Lä�êå©nÙ0pADªÉóùå»ç7Aë/ü8k0xÜÊ 3möÃØÙ¯Ç1¯ã7˜¨ dA3™Fæ7 \‘jr•J®Vùô2X ÙO¼¢è=^_¸°œ¸ð7?­ ç×™ƒ^Ç%*?®˜/¤öÛ,‘RðŠ"‘ûü�Ú‰<ÞÄý’O$ýM.øùéØàÇ[½Žß`¢2ðë½oA›À ‘ûü ZÁþÑ›¸_rcà¿d¦²Ü&â'\çÂyü•_¯(2pAD*IÿâÇÛèDÐú ?MÛ&"r×¹pDe QcYdÈo¸ "•ü|2´þBŽ”eÇu.œÇÚ$r™¹*²-pá×µHˆüÊÏ 2pAe1r'®ÂH%gLœÀ¢sÿ?HX7Þ€ý#ë\iÑfÕ¸ r§Že'A]¹—™ˆò £®¢"qe7s«|hÎÞN½.ˆX7Þ€ý#ë\øñ)Y^ÅÀ‘Ë䊜o:± ^­ˆ]F_Çë5íGOôfü?¦19<€è ^!RȳѢø¸#‚ës:†+8~à(Ftì0Ø?zOôl¨ßŠP(”¶mdžËP¿íwè› ðÙ9ëÆÛ¸¨@ \¹ÌWS¡wµâOj•fïD÷•>´,¼ ÕõØ78™z9Í·f #\W5§oLl•«°ï¬œØë„ý£'M~‹ósÛšqñlÚqWƒQbÝx÷ˆ "Ê-pÑðhY†Å¡Ï1i\ÇÐ{/âÑÖS>…Þ›ðÈs]˜H½’ˆ‚nðò¬þ1„ÁƒõÛÑÞ7žz.Ø?zRÖ™‘·1uá÷h˜÷$L§þ/€X7Þˆý/Oô_ÐÙÖ?>ü-mˆp†ZѸ ¢Ü 7êÀ¦]ݘ²C?¹=7 ׺°qmÑä ‰(ð®áô@4>,Íï7:65£ûªn'Eì=Éjfä’fôÅ÷O`±n¼Mûý3ɯÞÄêêÊÙå«|�[ŽœG,õ*ÊDŽ‹îFN¢cÏn4µõ ‹w¼Æ$†û¿FtÊg3wµbW{_Êù5¨]U‡ºº‡Q»à,Z¾2þï<Üê…n“¿‰Ü£Qߘ} cê;t4,Fý¡‹©ÿÑûGOŠþëë6agÆÌŸ¦Ö÷Ñ7ð=ºñ6Ý÷qí+«Q]׌#—1%Ç c £ƒŸ¢eÍÞN¨DNKtTæ}Ïó°¸ñ8®|Õ‚…•¨^݆ÁDÏå»Z!S¡BÕ¢eñA¹ ÌÍm5ê·¼IN+%*šN}c‚Õ¡©O·'Ø?zRŽ™‘Ǻñ6Ý÷Ïtšî]…}ç2ËhàfO…‡SiÊDN›>…–…!¹ cêÞ{îi´~ý=†û?ÇÇMO๮ÑÔ } €W+Œ«Ýhnæ¢PDŽÓ©oLFÇúz¼°svÿjzïõ]Ör0ûG/º‰‘¾w°'ÔŒ¶ž‹‰vgL£ š¼Âh¬oÓ}ÿLbpß‹ØÕ3–6sÙ@lò,:·>y'¸­ó“úÆÀ‘ã¦0Þ1ÓQ;ðäönÜÀ4®u½„µ~аîj…<Úï"‘"ýØŒï@cjgúNòqD%Ó¨oLȱƅ¶Ø?z‘1ÔŽ••æLŸZ4vá«–¥ñô½X½o þ­ .Ö·i¿nŸFëýw'Ëg³éù¤>ç1pAä4ã z›Waþ‚Z¬’i´«j± z–Ë¿•KŠøiúpЮVÜÆD×ó¸GîGCìÖ´¯¹U‹°lùãhޤG͉¨ ZõB·5;ì°ô¢é,\¼‘ɦ†ÞÃs¾‰¯Ç†Ðßû!šy ]Á=bÝx›þûç[×aņí³gåeÝÞÖðI}Îcà‚Èi‰éÐ?Á¢å«2î~›óF}4² ÞÕ ¹‡{Z®ÇžÆX× ˜_q?å ñõcØúL'Æ’/$¢BiÔ7&h·f‡öž;‡ð¦×Ð3!kŒÜÂÅðVlï·Ïtm܈pTÇ›–òĺñ6í÷?jÅÏžÚà¶z \9nW»[Ñ||$ãêS Ñð‹ÉA^ê¼.xW+®£¯é¹ÄBJÆÄ „–ÌÃ]k¸(Çš±N<³© º-·Gä}úÆíÖì°ÃþÑ‹Œ«'м¢ jNWÕÖ zѲø¿ PyO‘›¾úV9ŠuãmÚïŸÀ·Õcà‚Èq“l‹«2žÛlnÕk±§ç‚?nµÜÕ S_ý KkÀ²EÕ¨¨\ŠPo—û:Z½÷·œŠ×G£¾1A·5;ì°ô¢Ä†ªEX>3ƒ)µÕ¿Œ×ü tëÆÛ´ß? n«ÇÀ‘Ób„ªæ£¶á¥Œû×^Áæº%ñÿßÿùѹâùN9˜W+2×õ¸©ñˈF£¸4>ÅQ±4ê´[³#ì=ÇEwó8~•£ƒuãmÚ·Õcà‚ÈqWÑz{÷§“éЛãƒÙÉTÚû‚wµ‚«æ©£Oߘ`±fÇ–§ý‡^Ø?zÒÈqtœ¸:·þùˆEÖ×é¾ÜV‹ "b—qúLæUC·Îâ›IE–wµ‚«æ)¥KߘkÍ]±ô¤huÙn½ŠoÄ"ëÆÛtß? n«ÇÀ‘k|¸�]à®VpÕ|"÷ù°oLˆâ㎮ÏùÐWpüÀQŒh×A²ô¤èï±¾nvκýj;6¬X†úm¿ ö#Y7Þ¦ýþÉÜ6nNkÃŽ "Çi´�]à®VpÕ|"ut[œsá:sÅøŒ­rö½™z.Ø?zÒä·8?·­ßÁ¦Çq5È'G¬o ìþñk°¾ü¸ ršN ÐîjWÍ'RF·Å91ŒŽõõxagzYBعá<X¿í}ã©×é‚ý£'eySÿö6ÖÍ{‡F¼0%ëÆÛ´ß?ºëË "Çi´�] £á\5ŸH ÍçÄ5œˆÆ{ˆ Æ:65£[˵Ø?zŽÅÌÈŠûv!r#À{…uãmºïí‚õåÇÀ‘ã¢øèŸ¢{0³#E×®_#â§è‚zµÂ¸hä}´6Å0MoâЉã"JD%Ó¨oLȾƅ1õ ¬[„úCSÿ£öÞ}ê·fœÉÌȵhîö ëÆÛ´ß?ºëË "ÇYÝ÷ü(Ú‡þ”zñjEì<º—¡jVyçañ–q˜CT<úÆ‹òTüU|Pz-õ:°ôžœ3#;ðôók¸HlX7Þ„ý“ãIZ±Ñ!œ÷]°¾ü¸ r\|0[¿ Ûv¦E_BCí½¨©{ûýtßsà®Vܯıñ“EOá®S8Ÿ˜ú?ÀLFñUx+~Ö~NÃ2¹E£¾1aðò¬þQÖ¸X…•Í g!°ô¤‘ã8É\õ6¦.ü \ã‚uãeÚïŸxÿ8r{v£©­'Ü5&1Üÿ5¢S|¢M1¸ r\Žûžo|ÐýO ýìÔø@à®VL"z"õ¸¿ 7{Ðøä!Œ¤’DT(úÆ„Ük\„ŸÞ®‘Xê?tÁþÑ“¬žþµ¤}\ã‚uãUºïãÚWš³òæaqãq\ùª +*Q½º ƒ\•³` \¹"y¥j~Å}ØÐu9õ>¸«Sl})ñ¸¿Ù¦1Ù÷Z߉±Ôÿ‘|Ú7&Dññ¡~döÆÔwèhX¬áì=)ÚuËŸÍxúWM­ï£odî…‡@aÝx›îûgúZ>„Päjü¸pï=÷4Z¿þÃýŸãã¦'ð\×hê…”/.ˆœ–˜A$Aÿð$ 9Ñý}=À‘ßùkúp�¯VÑCxzM#öéNìÃÞcé)ÔV-Á–c#œ MT,úÆ«5;BS_fÐ×ÿØ?zPŽ™‘Ǻñ6í÷φÂ;°«g,Ñ7Êlå'·wã¦q­ë%¬ '_Fycà‚Èq£èÚð�êš>ÂàøŸpël;ÖTß…ªEaùšD&|4K!W+¦19ð;l¬ç$¤j)68Å•ó‰J¢Qߘ0Œðº:lØ9»”'m¼×wºÝ(’ÄþÑ›na|ð(Ú[~oƒ?GK['"Ñ $%°n¼Mãýc\Aoó*Ì_P‹Uuu¨[U‹Õ‹°\þ­\‚МÍd‡ "§ÉÔ°º×1p+Þí—ѵñ§¨¸ïôLÄpýXÏt~Ÿz¡ùjElÑÁ~D"žÔó„ÈU:õ 9Ö¸örg>…šJ $ÝÜ?9º jêÑúÕµ€Ÿ ³n¼Móý“¸Uä'X´|ê$p1³=Ž- ö… "§M÷¡iuÎÓ˜èÝ%•ó±&<1Öù26ùîž¶�^­ˆaðXZ›ä ê´w `”ú#*v}£0ÄÑö=ñ¾"Þ_´¼…ÎÈh½æûGO1.º»*P¹ø%t]‡‹ TÃWO ùɽ ðƒ3X7Þ¦ÿþ™ÆÕîV4çmtNaà‚Èq“øªåÔÔ.Å¢ªJT.ÙÞ±(úÂ!¬®Y‘}EvÏ àÕŠØyÙò�*÷©/@íª:¬ª­ÁüÕoâ+>s›¨:õÂÀ­³ñxÍ݉[&*Üü üV·öëy5ý£çÄ"!TUÜ‹õ—’ÇäÄÉ_Q\C϶çŽwF ëÆÛ¸¨P \©»Œ¾Ž×jÚžèÍøøv ã—¢ˆF/cÜGÏnÞÕŠ.jÀ]ÕXê¹™)Ð71rìçxbß™`N 'rŠ&}c‚q‡Öý$~ÿ�¶t~‡)Cºáá(z›· up*õB]°ô¢äqz!¶õ\Kþ‡§—ï@øÝ]¨[¸=~ä'ëÆÛ¸€ššœ?>•"; \QNÁ‹†Ë‰Ç"TÌÛŠc×3˜3e'"Š“>¡ªwËc@ÝE*pïoö„ð˜v+Ƴô¦›ˆvíÄÃëÛÐ72•¼Ào—‰€Ú‘óš.›/Ö·qÿ466âðáéÙaà‚ˆr ^4|c]/`þ¬¹¬¢ÿ{„–â¾ÍGÁ5 ‰(!5ãâÇÛzâÃo!'öO`gøm„ê–ÅûÍñÄÿêƒý£wÝÆT´Ÿ|2€ñÛ#è{ÿ#ôœ½ÊóÖ·{ÿHÐB‚”.ˆ ‡Ã‰Íß 7.áØöµX·§ÑÄÔõËèÚp*¿Œ#2µˆŠ&}âÞ½{S)¿3‹Aãð¯ïûÔ­"‹PQ1‹·|„¨Ž V²$"rÌØØXâvÊDŠ<ûì³8yòd*ågAŒ†ßÂøÙ/p|`,q‹Œ15k~»ÿžÈƒ¤_üì³ÏR)=SQôr ãSíû=ßb\ë§l°ôºÁÁÁÄwæÒ㢒¿½úê«Üi–.]Êu.òÄÀ‘"\p‡ˆh6éå ©ÃÀEn \”³I ‡ë\ä‡ "þøÇ?&§£ ˆtÝŸDn‘@®\YÒ]û öÞÂéç¹ÉLXuÊGfÜ­]»6•"!uÂu.òÃ# ‘:ŸÜu@Ä9Qi‚²äÜ'Ùq6Jyñ)s1И?öjD È4D} ›‹s"*TP¦Ã±¯+¨rBHÞÁcVv \”9™·‰ÌÅu.òÃ^H‰(ë¶�]º .ä KDÅ ÊÀ,ˆý£œ2pá- \dÇÀEùð–ˆÜ¸ÎE~Ø«•(Û`M÷«OAñŠ"Qþd€š~UM~J¿Ä+g \xÙ1pá™uœÙ'H½ë|Q¯Ù‚:rÑãé„Îa¯FT"9¡•‚ü+ŽÜ&"i]¦Â™§¹·Y>ùW"Är ’M·(ºpÍMÊ/'#æ#¼ÌróÊQvr¿®ôæ÷æ7¿ù ž|òÉT®>²õf™ÓûGÙt"åNï#ÓûG9a1Ë´�N¹ÈxÃÜr$ûÁ<NgnA›¦ŸÞN¥üÒN¥½fÖ O¨%ßó }·ß~›Hsæjvò½¼çž{fÖ‚2¡Ò^é.ˆJ$<é\rmÒyg‹<û…]ùÌM^§ Àd+cæ¦S™‰œ$¯lßóWg:œÔæÛWè4ø”cY¶2fn²¯ÉÜ'¹åê‹27.œ%}^fÿçÿüŸ}?ƒIr Ì Tdnl—³1pAT"éx²u6é›tH~¤Ë`'[¹Ò7Ý®â˜3i¬¶ ]¹"Ê— Ʋ}g27¿tÓ™W­6Ýfäs2(m€Ü“O; âI§³ÕEú&c4žL;Ëô!A>)—™zÙê%sÓíØQ*.ˆ+Rjn~ïœåóg+—¹é8•Íî §ïå–O@W—A«]_!'”º‘“A«ãOÝgw‚ä02ë5[˜gO:ÏnÜ(›ß/ê•Ê.¸#õC³1pAä€lSâÌM˜:°ºš£ëÇꪢWЉTÊö½17ÝV}…®‹«Y ºØ-«±H¯nK-W A65ìºAZ˜¬¾³:½KÅÀ‘rE–åv]ä:éܱ溂¥Ó~%R%W°SNòu“«¯Ðý*w®Û¥>È}Am‡ùÈhcM e«oÙd Å>"Iê)×­Éœ 4DÈÖAK4Y·Ž9ÛUE]¯&š² v‚|åŠ(_Ù¾;2@Óõêf¶éèº÷ÙîÓæUÂòÊÖy””-ÐÆhu2ëZ6Å’úÈÖ6u_ƒ "‡dFLuìp2¯æá*ŽPÒ§˜rZ)Q~2giéÌMÔ¾"sf ÛåÅcVn™³c9ÛB­Ì¾A‹Üä¶™ôï­l¬«¹¸ rHúÕE]ÖµÈ&ýjNPf¤vtÞ·DN3¿72 ÂýÌéÇ \åNhó–ob;ÌWúÉ4תR+½®´°—>ƒ}iv \9Dåfç¬3ójNЮâ˜3j8­”(æÀ5H·W™S~ƒÔW˜'Ê|ª7õ8s&˜ôM¤–Ù/ÈmÆl‡ù1/”q6Pv \9H¬A¬ÊÁ(hWqd°£ã¢‚D*±¯gÐrRÂ+ªÞ"A¤ }÷ò%ÇrÞÒ¤ž´Až€NêŒAàì¸ íIäR×-]¶|¶\²½V—H…lmM—ÍJ¶×ë²å’íµºl~•­,ºl¥ÈöûtÚ¼"ÛgÓeS-ÛßÔeó ÿöüDy’/ä—_~™ØL™?’g—69™—-ÙÑSN»´©Ð<»´)ß<«NÕÌËõ^QJž]ÚThž]ÚªÌD¥ÐµmÙ•+ˆåê¾ö2î“ìt­ᥲ±ýuW~zî¢4ò…Ìvbh*4Ï.mr2/[:³£)¦œviS¡yviS¾yVª™—ë½¢”<»´©Ð<»´U™‰J¡kÛ²+WËÔ}íeÜ'ÙéZ/ÂKecû+ë®üôÜDi‚ÒÑèZNaU¶ ì_"§õ;Äru_{÷IvºÖ‹ðRÙØþŠÇº+?=÷�Qš t4º–SX•-(û—È)AýαÜAÝ×^Æ}’®õ"¼T6¶¿â±îÊOÏ=@”&ý ™>%?Ûôü|ò„UZEžÈLgv4Å”SX¥‹ÍVéBó¬:Uɳzo©yÂ*]lž°J[•™¨º¶-»r±ÜAÝ×^Æ}’®õ"¼T6¶¿â±îÊOÏ=@”&ý ™~b˜þ³È7OX¥Uä‰ÌtfGSL9…UºØ<a•.4ϪS•<«÷–š'¬ÒÅæ «´U™‰J¡kÛ²+WËÔ}íeÜ'ÙéZ/ÂKecû+ë®üôÜDi‚ÒÑèZNaU¶ ì_"§õ;Äru_{÷IvºÖ‹ðRÙØþŠÇº+?=÷�Qš t4å/g £§Ï`ÔH%dU¶ò–»<e&*…®mË®\Aì+ʽ¯Ñ38=K¥œãç6Äv˜²ïSc§OBAÕxª½êZÏn”ËKûÑI~*—ž{€(|!³MÉ7šg—69™—-ÙÑSN»tÒ4ŽìÙƒö/²å¥½ÏBøñf´Å_—5?¥˜<«NÕÌËõ^QxÞ4FŽI”9{~Ò—‘÷eŽÄÇåsò¬Þ—GÚªÌD¥ÐµmÙ•KM¹“}Eÿt*™Kª”¾ÂiVåR¶¯GºÑÙ=•Èå.†·bWd2•vŽŸÛpÛa>ÔíÓ(ŽtÄkÈšq1ŒÇwE  j<Õ^u­g7êØKûÑI~*—ž{€(|!³š ͳK›’yŸÏ\Ý(ì}öéÌŽ¦˜rÚ¥“b8zËþ¡áp8±…B¡Y?˶?´ÕU!M1DÛeÎVÖdú ¶7üM¢Ì \Ÿ”½m•銛šr'ûŠú¦·fú‰¹ÛÁ™þQ›ÀE´ õ»Ñžµ¼©mÿNÔU/Fˆ‹Y‚Øó¡nŸ#ܰMí³Ô‰¹µ!Tw/ªB \¯¼õìF—w?r†¯ðÏ'%*’š/¤÷®n¨ëx¬Dߨ€Å•ñ¿?‹·~Š—;U5åöv™‰J¡®myûŠ[û eûÚ*pqðWذx^âoW.nÄÑç€ÊÊå‚ ¶Ã|¨Û§V'Ô¿Ãþ •ñ¿]Qù�¶½Ä[EŠVÞzv£ŽÕü ÿÏ–r“>)Q‘Ô|!­ ÉÍÝ«ê:ž\ªXôœÿÛ÷buë—¸SqÈ·.›šr{»ÌD¥P×¶¼}Å-ˆ}…²}ëV‘Øyt5.CUE%ªW·¢ïê­T†³Ôµaõ‚Øó¡nŸæ ¨ÞD´ë<XU‰ŠêÇÐÚwÅñ>Éä¥öªk=»QÇjþ†÷Î'¼Ì?Ÿ”¨Hé_Èô)ùÙ¦çç“'¾üò‹ÄífG“~ AâçÍ7su£æï…#'þæìtfGSL9…U:wÞ4ŽÿîEüÍ~€Šªehì:Ïs¾6)=]hžU§*yVï-5O$Ó½˜üêM¬®Ž|ø—øÙž_«÷Zå «´U™‰J¡®myûŠ›{ß©é;}EªTuB$¬Êåf?bLö£uõ½ñ¿96ATÑ ²p³\N b;̇«ûÔ¸†¯ZCuE%ª|]Ñ›© 5¼Ô^u­g7Ê¥æoX.8Ãw6ÿ|R¢"©ùBzïê†kqC/%:ÒÊEÏ¢}àšã' ™¬ÊæJ¹=Vf¢R¨k[Þ¾âľÂ~ä6¦†>Ĺ=¤r Ö·ŸÂ¤âB»S.5‚ØóáÖ>5¦¾Cç–P?\´¾“s{,§y©½êZÏn”KÍßà ßBøç“ɽ/dy¯n¸RÎØ÷èݳ6=¯®{ ÝŠ¯R˜¬Ê¦¼Ü,3Q)\m[ºâľBý¾¾‰‘Þדǽê5hô¸grµ ;,ˆí0ê÷iüDpäö$fÝ‹ºæãJg¥óR{ÕµžÝ¨c÷ö£¿fK¹É?Ÿ”¨Hò…Ì6%ßTh^ÖtêêFÍî\ÝÈöZS¡yÙÒ™M1å´K›yÇÃo”©ÞóPóØ?âl*z~ç}ɨ±í#D‹È³êTͼ\ïEçÅËZýÓD™o>„w÷f¼þ‹™Hùœ÷fü\hÚªÌD¥p«my튛Êr“§gúGé+ÌþñŽ\WÕJgU.¥ûÚ¸†ÁðóÉ«ú‹·âÐÙ‰¹WõózljáÜjÃ*±æCí>Ÿ†±11+èl>t&ˬ ü.†—Ú«®õìF»²9Ã×’>)Q‘ä ™íÄÐThÞœôçÍ\ÝøQís3W7²½ÖTh^¶tfGSL9íÒI>?ü:Ößÿ?%þFå¢õØ´#Ë#B¶bóŠ&M‡*Sô>Uæ_¶œµ–I²ì[e–Å’òû½Iù¤­ÊLT õmË›WÜÔ”;ÙW„VÜ“øýf_aö3[ªt{a5eû:vGCÄ{²fÉ4üò·sË~{7ÿ »ø8ÔY‚Øó¡nŸÞDôèn¬«×DmhÎú4œƒ{7c…‚§ /µW]ëÙ:Vþ78Ã×–>)Q‘T~!½tuC]9cí;<çà3gÓj`îí2•BmÛòî· öªöµ1Ú‡÷³•sÖÆÀE6Al‡ùP¶Oô½ß‘½>Ò6.JTæzv£ŽUþ ?Ï–r“>)Q‘Ô|!½wu£ü†S¡mñ@Bþ£®myûŠ[ûв÷#¼UdŽ ¶Ã|”ŸòVwðV‘Ùü?[ÊMþù¤DEJÿB¦OÉÏ6=?Ÿ<ñå—Ÿ£kÿk3Jú-³n'ˆw4Ýÿ‰Û'’ï+åoÎNgv4Å”SX¥çæý3·ÿ áÖf444`ý¦F|Øó-ÆcF–×ò{­ó¬:Uɳzo©y0n$ÊÚòlrß¶¼…Wß|P°OÓÓVe&*…²¶åñ+nÊ¿Sñ¾"Úÿi¢4û ³Tɪ\êû‘Û˜Šöã“p+šǾ´}xgÇo¥òÕP_.u‚ØóáÆ>5¦¢èÿ$ŒÖ&i«?GKÛè9{UÉ,‹t^j¯ºÖ³åRó78÷þù¤DE*ïÒ½«ªË)ÓØ:¶ü-ªâGþÖ­¼O PYn¯–™¨åo[:Ý*’Äþ1±8gÇ‹ÉÇÜÎ*s|S¼¾Òr)¦ò³ûù˜¥²^d,69Ø-‰GKfÖÍ|<ØxDé:<jËVµŸ¥|õ¬¶\InüÜ8ÃWøç“IùÒ#W7”–Ó¸ˆÎ§îCEåO±zç^¼ÛÕH$‚HOµ¿Ž—ë~Š»7â舚aªUÙ”•ÛÃe&*…mË‹WÜ‚ØW¨Û×1\î܈ùw£fõì}· =RæH7ºµã—W£æ®°õè%¨8ºÑ†U b;̇Ê}j\þOͯDeͣع÷tõôÆë¦=]‡ÐþÆK¨«©Æâ­ŸbDѰÍKíU×zv£Ž•ÿ ŸÎ–r“>)Q‘ä ™mJ¾©Ð¼Yéãaìúûÿ%ëÕþÅÿ=‡{R¯´ÿ½¦lyÙÒ™M1å´K'øç¶§ðŸ~ô¿¡m0ù¸»¹ï;†o<…›âX–ß“™6å›—YÖtf^®÷ŠÂó ܈ìJ”yÛÿ863ðžõ^cïüŸ«ežÈÌ‹Ëü¹Ð´U™‰J¡¶my÷Š›]~q’}Å}Õ?›éçˆ÷fÿ(}…Ӭʥ¦Ìq7¾@è¾ûPß6eñUoß¾†…/áØÄíÔÿ9GY¹\Äv˜uûô"¡P]ÿs<’Ù˜ü–có±+©ÿq–—Ú«®õìF«üœá›ÿ|R¢"É2Û‰¡©Ð¼™´q¿xä?¡â÷Ì\Ýhkk›¹ºñxí=ø³šŸÍ\ݰû½¦lyÙÒ™M1å´K'ÝÀÛ›þÿŸM`Þµœõ}Æ9´×mÇŸE²ç§“gÕ©šy¹Þ+ Ï»–e‰2ž5?éËÈ»‰2»ž}S¶<»´U™‰J¡²myùŠ›šr'ûŠ%-§fúǬRý£ôN³*—ª}==Ђ…Kö`à–Uyþ„¡ög±åØX*í•mXµ ¶Ã|(ۧӧвp9Z¬‰5†ÚQ·åœ_JÖ[íU×zv£Ž•ý ÎðÍ›>)Q‘Ô|!½wuC]Ç3‰H¨!ÛGÚÉë6#u¾cµ*›šr{»ÌD¥P×¶¼}Å-ˆ}…ª}‹„° d¿Àj,Ò„úðp*åumX½ ¶Ã|(Û§±B Bö‹ÊëêȦ’NòR{ÕµžÝ¨c5Ãÿ³¥ÜäŸOJT$5_Hï]ÝP×ñÜĹ} ñ »«f£èÚ´].O VSno—™¨Êږǯ¸±¯Pµ¯sû°|³Ý>¼‰®ØÔ5šJ;GYvAÛa>”íSãì[¾Í~6Ñ…M›º´?1ÔµžÝ¨c5Ãÿ³¥ÜäŸOJT¤ô/dú”ülÓóóÉ_~ym µ3W7Òóg¿v2þºÇ:üE"5;Ïê}öéÌŽ¦˜r «´ù³q±Ïìèžµ~Eúëd€úÏÿãEüõª_`,Õ§ÎÎÏþ{MvyVªäY½·Ø¼Hçÿ•(óD¼<Ùò¿ü²7¾~3QæOæäåþ½ù¦­ÊLT emËãWÜT•Û쥯Èîv¢¯XõtçLÿè$«r)ÛׯÂÏ4¡g"÷÷Ưкj3:Çœ__Y¹\Äv˜uûô.†_ÆŽž±ìW³…1‰¯[ðt§þ‹ÉêZÏnÔ±š¿áÿÙRnòÏ'%*Rú2ýÄ0ýg‘ožøòËx÷¥•3W7Òóg¿v{}{Žõ&R³ó¬ÞgŸÎìhŠ)§°Jßùù&¢]¿Æ†×¡;#/6>ˆ£û·áþý;ÔüìuŒ¤Þ»óÞ¤ôt¡yVªäY½·ø¼žD™›—(ó|_ü¡¿Þþß°¢z^¢ÌG>/ä÷æ—¶*3Q)”µ-_qS÷JöÒWLÍ*º1Ó?J_±¸ñ3ý£“¬Ê¥®Ìñ²E?AsóGšÊ¸zÃàÑßbÛŠ{P±øq~Q9uåR/ˆí0J÷iì<ºš_Çá¡ë'Ì·0>xû·=ŒêŠZ4‹*yò‘—Ú«®õìF«ùœá[ÿ|R¢"©úBzíꆳ弉Ñ3g1:kps#‘ÏÐ5ýêÙ4&‡O!ù œ»€è¥ñŒ“3¬Êæ\¹ýSf¢R¨k[Þ¾âľ¹2ÇO~GÏâÌhz"þ#}ø´ÿʬ}iL£_–8‡hô2Æ3P×†Õ b;̇£û46Š3gFgŸǾGäÓS¸:»±b¸_ã;€sÑ(.O9Þ/ /µW]ëÙ:Võ7ü>[ÊMþù¤DE’/d¶+Û¦Bóî¤oâðžÍ‰Yæ ™—¼º!Wäe‚yu#÷ï)äoÞIgv4Å”3wz¡Ú•3SÒ²½Ö”-Ï.mÊ7ϪS5ór½Wä——,³y[ÈöÚìï-<Ï.mUf¢R(m[¾âæ\¹‡®kP2e·Vår®Ì1Dà ¨S°Ðf1”¶aÅ‚Øóáè>†QW§f¡Íbx©½êZÏnÔ±º¿áïÙRnòÏ'%*’|!³šòÏ»‰®ŽwÑ5ë¶€8ÒöÏ\ÝH¾6yu£­í·xûÝΙ«¹¯}^¶tfGSL9s§¸Ù^›ý½…çÙ¥­ÊLT GÛ–®¸9Wn.ÊÍÑ6ì² ¶Ã|8ºO¸ÈI×zv£Žûœá[,ÿ|R¢"9÷…ôö ÁÙŽ'ˆs½D¹8Ú¶|4p b_á\™¸pJÛa>ݧ \ä¤k=»QÇÎý Ž7‹åŸOJT¤ t4Îv<A˜ó@BÁàhÛbà¢ì¬Êå\™¸pJÛa>ݧ \ä¤k=»QÇÎý Ž7‹åŸOJT¤ô/dú”ülÓó­ó>˜éh²çû{íóDf:³£)¦œ"{:YV¹m"×kÓ…¤ ͳêT%Ïê½ùçå·EzºØ<a•¶*3Q)m[ \”U¹œ+3N b;̇£û”‹œt­g7êØ¹¿ÁÀE±üóI‰Š”þ…L?1LÿYØç1p‘þÚôŸE!éBó¬:Uɳzoþy \P08Ú¶¸(;«r9Wf.œÄv˜G÷)9éZÏnÔ±sƒ‹bùç“)(³Oæ<P08Ú¶¸(;«r9Wf.œÄv˜G÷)9éZÏnÔ±sƒãÍbùç“)(³ÏEZ·‡FÒW7.«²9Wnÿ”™¨޶­@.‚Ø?NcäÐF¬;t1•./GÛ°Ë‚Øóáè>9„uëa$•,7/µW]ëÙ:vîo0pQ,ÿ|R¢"É2Û”|Sþyù=.Óäd^¶tfGSL9íÒIÓ8þÁïÐÖÖ†Hÿ0&åÑ®=Gp¦ï$¢7òú=™iS¾yVª™—ë½¢ð<S. +’ùÚº?|—R°ÊþÞ$»<»´U™‰JáhÛ dà"ù¸ºÈLÿhLÌô ž\7‡U¹”õ#S—0|%Ë {*Šs—n¦ê(+— ‚Øó¡lŸÎ<Š9‚þáÉx]ÜÆÔè·è‹œFtêvêEjy©½êZÏnÔ±sƒ‹bùç“I¾ÙN Mùç]Ä?þÿVã-pqÇö<Šÿ©öYCìÖìxð? ¢j–-Ú>µý=™iS¾yVª™—ë½¢ð¼¢;ðØ¡Páp8±ÉÏÛÿ[vE®%^éú'¼Õò;DF³¯‹aÊ–g—¶*3Q)m[>ºâ¦æ;u]Ï㞺æ™þ±}ͽ3ýcsdLùI£U¹”õ#ÑCز¹S}ãÌöÛíx|׸!¯1.#òÖ¯ñVä²ãu ¬\.b;̇º}:Š®  ®é# Žÿ ·Î¶cMõ]¨Zô–¯iAdBýŒ/µW]ëÙ:vîop†o±üóIÉS¤‘ûiS"v}¯#Ô´=Q¹Â$W<ÊvuCY9ãCЖ h¸ÿyc]/`~Åýh쉄®ÃÖg:1–|¡2VeSSn¹Ÿ»>ñ»³mwoè„ÔEç3¸«â4t~ŸzŸsäïd¶¯ojˆœDÇžÝhjëATf&%®Â}í‰+njÊÄþ1NfÚÄ·üþ9ÛÝ›Ð5ßßch¸«w58_òwüJÍg÷v;̇²}:} -u¯cà–ôG—ѵñ§¨¸ïôLÄpýXÏ(8~gòR{ÕµžÝ¨ceÃcç^æŸOJžâ«F®ä³þ Cí¢2þ»å÷W.Þ‰î+}hYx*ªë±op2õ:u2Ë¥nŸ\G_ÓsØwî&Œ‰-™‡»Ö„qQŽMñé3›ä$^-«²©)w ÑwÞDø› ˆF£s¶KãSɃIì*Î |‡ñÔ­#NR·?I?í/eŸÕ8‡ö•U‰ß_Q1‹ãÊW-XXQ‰êÕmœR;³+—šr±Œ‹vbOx kÿ½4Žä®¾…ñs_ãÜø­Ä[œ¤¬\.b;̇²}:݇¦xÿsΘÆDïn,©œ5á¡ø1\.>¼ŒM]£©ªã¥öªk=»QÇjþ†÷Î'¼Ì?Ÿ”<ÅW<í³¦OÉÏ6=?Ÿ<ñå—ÿŒ·7ý%‡>Ǥqï7Õcé–>…úå?à5{f éïû{ ù›³Ó™û ˜r «tò禾ú–Ö<€¿\ð#Tü`B½Q|¼þfîo9žó{óϳjo’gõÞ¢óº;IEÀß<Üÿ¿Þ™¸í{óÈVi«2“÷øi)û¬rÅmáCE®Â˜:‡÷ž{­_áþÏñqÓx®ÌW5å6fúÇe‹ªQQ¹4Ñ?^îë@hõ¢™þQ%«r)Ûׯ D#¿ÇžP3Úz.BîÔ6&‡Ñ?M-ÔRV.±æCÝ>ÄW- ¦v)UU¢rÉnôŽEÑauÍŠÔ,µ¼Ô^u­g7êXÍßÙRËfÎ'†Þ{¶žJœOô~Ü„Gžó~ÐÑMþù¤ä)¾jäJ>«ØP6íêÆ„ ÒŒ!„ŸÜžŒk]ظVýbu™åR»Onb¤ï´AêmL_F4ú¾»¤~*›UÙÔ”›p*ŒŸö—ºÏ:…¡ðì’ééñ”q±OnïŽ˦q­ë%¬Uü(M»r©+wÐúG9äµcee²¬¨¬Ec÷Pü¤ei<}/VµÔíKõ‚Øó¡tŸfNÅ7¦0~)Šè¹Ã%MŽÌ—®õìF«ùÞ;Ÿð2ÿ|Rò_5r%ŸuW{_Êù5¨]U‡ºº‡Q»à,Z¾2þï<Üê!ÔÊ,WYöI´O5¦:[…¬Ê¦¦ÜŒ€Saü´¿”}Vã z›Waþ‚Z¬ª‹÷‹«j± z–Ë¿•KЍýÖØ•Ëõ}¤mÿ?´`áâ݈LÆ05ôž{ôM|=6„þÞÑôÈKÉ5.r}_:(ˆí0îïSYËêÅä: ©ÿQÅKíU×zv£\jþ†÷Î'¼Ì?Ÿ”<ÅW<þY³MÉ7š—LˉíCøá‚¿Dmmm¼£‘Φ.þóß ~ËÛ˜œÎú^S¡yÙÒ™û ˜rÚ¥“ tÿÿ×ü(ñ7ænÿóüofßËÿ÷æŸ''3/×{EáyÉø£OýÇ$Š€¿ùÏ|ytÏL<û{“ìòìÒVe&ïñÓþRöY·Šü$>àZ5Ó'&·Ç±åÀ©Ä#U²+—šr˜<€õ‹«¿îv/VïéVº8©ü\¬òJ;‡ð¦×ГxRÀ-\ oÅöžñxuŒ kãFåùSV.¨ùìÞn‡ù(õý¹Mb°ýY,®ªL«´­z-öô\Pz‹“ü¯P÷YÊ[Ïò7TSó7’çU‹–e7WÏœO¨æFÝ9Å?Ÿ”<ÅW<þY³š Í3ÓÆÕnlØÐŠO3òMÙÞk*4/[:sSN»tÒ$ÚjðÃ…+°-J<´¡¡!ñohsþÓ•ø?$ÝÁÕø)ÿß›žU{3ór½Wž—Œ€ßÿã?Ç¿–ÀT2¾àý¯XøÿÝL<û{“ìòìÒVe&ïñÓþR÷Yãß›îV4Qze-»r©)÷$"¡Å¨ª}r¦œÙâýã}µ xE~Nõ*X•KÕ¾6®ž@óŠ,¨}81È^U[ƒêøÀ{UíTÞBä¦Ú ® «Äv˜eû4A¨j>j^š]/¡W°¹nIüÿ·ÅþG´E®(ë·¼Ô^u­g7êXÕß󉿿ãʾ›v¼Ô>íøç“’§øª‘+ù¬Óùè÷8>ç¹Ô·1qü÷øhDíÕ&‘Y.uûä6&{›ðèž,‹{EèE º´VeSSnFÀ©0~Ú_ê>k8‘eJú?p#ŠevåRSî öñ# Ü*RµËgõñ­þe¸¦<p¥® «Äv˜uûô*zCÏbÏœÅ!å†ÍE‚µf•®õìF«ùÞ;Ÿð2ÿ|Rò_5r%ŸU:âúÄïž»Uaeû9×n™içH§ºí݃¸2«PñNµë5ì–'¤þG«²©*7#àT?í/uŸuá:óq¨[å£húSêujÈß±b—_œ`ö0FÑÝüŽ_UÄÍFY¹\Äv˜uû4Šþé º3¯ô¢kׯ Ø…]ëÙ:Vó7¼w>áeþù¤ä)¾jäiŸ5}J~¶éùùä‰/¿ü‡CÌL‰“['dÛÖð ~ôçµxlû~˜±åô÷Îý=…üÍÙéÌ}PL9…U:ùóêg:U«ß#ÒÓ…æÉßÊEò¬Þ[\Þ8òËŸÏDÀïä'#à¿<òÅÌëç¾×ê÷柶*3yŸö—ºÏ:Œpý 4lÛ™6Mø%4ÔÞ‹šº±¿o<õ:5ìÊ¥¦ÜÞtZå•dä(Ï2å{â|å@Û‚šÏîÿ“ŸRߟ[yªBþ–W¨û,Þ\;AÍßïîS·ØìLœOT×Ôaóþ¾™ó Uܨ;§øç“’§øª‘§}ÖôÃôŸE¾yâË/{q<ÆùÔ:Wwò¯¡­á¯ðàŽŽ™éšéïMÿYä›'2Ó™û ˜r «tòg \$;U3@#ê[ù‰ Ù©Zý‘ž.4Ϫ½IžÕ{‹Ë“ÀÔ²Äïž»Uá¿îx‘œïÍïo «´ü-ò?í/uŸõND1gù¿_ tÿh?{#õjØ•KM¹½=èT¶¯£aÔÅ·üþÌ­re;†Ÿ%Ëßñ+5ŸÝÿ'?êöiyªÂKíU×zv£ŽÕüÛ˜<}zæ|âŽkˆ„Æšö3soÿr˜—Ú§ÿ|Rò_5r7?ëÄQlžª7ÁÕÔ©’Y.uåôv§ª¦ÜŒ€Saü´¿Üý¬·1qìE̯¸º.§þO »r©)wûǸhê3‚Üö$j«¢ns;ú&çTˆ£ÜmÃÎ b;̇º}ZÞ€ªðR{ÕµžÝ¨cW÷cÏ'¼Ì?Ÿ”<ÅW<þY³]Ù6š—L'Ói=Ö›‘ßo›ŸÅ«go¦½6)óçBò²¥3÷A1å´K›²æ¥:ÕýÝž9OV±}oJ¾yVíÍÌËõ^Qx^røaoæk&fÔ˜ƒÀìïM²Ë³K[•™¼ÇOûKÝgͱ8gì_Ñüè8[æ«ð®î# :••yò[ œ—g+¥3p#òsÜ¿¦go©ÝÙ®îK‡±æÃÝ}ê^@Ux©½êZÏn”KÍßȵ8çgÎ'TóRû´ãŸOJžâ«Fÿ¬ÙN M…æ%ÓrEÞú~R¹• ó½¦;¿'É./[ZþV:Ig{­)[ž]:É@÷‡¢+’™7…áÃïâÍ?ÜYïAdû=™iS¾y™eMgæåz¯(%oVúدñØÿlfh÷^S¶<»´U™É{ü´¿Ô}Voßãl—_S.d,ˆ(’ýã ¯´*—š2çrÇ6/DEõóèR\nwËå¬ ¶Ã|¨Û§×qaxlî±ïpøÀ®,Àí¥öªk=»QÇjþ†ýù„ê&*Ë/üóIÉS|ÕÈ•|VïÝJ nŸÄËÚ±›÷¾p8œ¶Äo·=‹]‘k‰W£½x«åwˆŒ:ÿè&«²©)7#àT?í/uŸÕÛ÷8«)wûǸ¬‹sˆ}û:}õk´-±æCÝ>FÇ–mØ{0½^dÛ‹mÿ‘ÒZcü-oõbTAãõR{ÕµžÝ¨c5Ã{ç^æŸOJžâ«F®ä³zï~RuûD:Õ\Ñà ܽ¡ ñý±ÎgpWÅ=hèü>õ>çÈßÉÅ*¯xVefœæòÓþR÷Yƒº8gÐúÇ8.ÎY45ŸÝÛí0¥¾?7‹™` °¡k4þšïÑÙp*îzcÎÏN‘¿åê>KyëYþŽjjþ†ÿ×§q“>)yНyÚgMŸ’Ÿmz~>y"gzâhâVY÷Á¼Ÿ4ýµé?‹|óDf:sSNa•Nþü¢ï¼‰ð7pøðáÄFg~¾4>•8‰ÿò‹OñîÛïa<–±ÚÿÞüó¬Ú›äY½·¸¼Ü»•¸<îöxÎ÷æ÷7…UÚªÌä=~Ú_î~VÝ猟0¦úGé37³Dì*Î |7Ó?:ɪ\Êö5ç,ZÛa>ÔíÓa¼³ç¾ÉR/ÑèeŒOI[5ÿç®ÆkÒy^j¯ºÖ³uìê~äâœYùç“’§øª‘§}ÖôÃôŸE¾y"‘þücôu¼ŽPÓ~¼y¸'þ½˜þüjÏ?áý㽩Wæÿ{­òDf:sSNa•Nþü.Ðã×ogäõâXëÏñÑHòð“ž'¬Ò…æYµ7ɳzoqy¹w+pyÜíç9ßkõ{óO[•™¼ÇOûKÝgJGN¢cÏn4µõ *'GÆ$†#GqäÄw˜tþ\i»r©)÷ôLÿ8ÛmLÿýLÿ¨’U¹”ík.ÎY´ ¶Ã|¨Û§ðÁÏq}N“¼‚ãŽbDq¿$¼Ô^u­g7êXÙ߈]ž9Ÿè‰J¿:8ŸøäH/†&½¿>›üóIÉS|ÕÈ•|Ö?a¨ýQTÆ·üþÊÅ;Ñ}¥- ïBEu=ö ª¾#mn¹Ôí«)¨?ÆCûÎÌî0ù[¹Xå9ŽpÊÁOûKÙg5Ρ}¥9Ux7Ç•¯Z°°¢Õ«Û08UÞ“Y5åfÿxç̇šÏîív˜Rߟ›Õ¢Á«°/`kV©û,å­gù;ª©ùÞ;Ÿð2ÿ|Rò_5r%ŸõZ–aqèsL×1ôÞ‹x´õƆO¡÷ã&<òœÜOªVf¹Ôí“ø€¨c ê_N_p/¾í|+\‡míå]8HY¹'M)k[ӧ⃭‡Š\…1uï=÷4Z¿þÃýŸãã¦'ð\âguìÊ¥¦Üíq#}ï`O¨m=ãµ “k†ùäSœšLÞ– ºr©Äv˜uûtðrz½Ä·ÁƒõÛÑ®xÑ`á¥öªk=»QÇjþ†÷Î'¼Ì?Ÿ”¨Hò…Ì6%ßTh^2m 6ÔGŸú ŽIÚBøÉÝxóŸ#0®uaãÚ0gy¯éÎïI²ËË–ÎìhŠ)§]:évⶉ{3ónábÇv<ñ›.Ûß“™6å›gÕ©šy¹Þ+ ÏKFÀÿÝòûÍø¦ÿ÷Ÿ¡âGËf"àÙß›d—g—¶*3y˜1Ø´ sK ®mMa(¼»z’Ä3.vàÉíÝñaÙ4®u½„µááä˱+—šrçZX-Ù?îè-ëI¼ª}m µce¥y5µÝCøªei<}/VµT•Ë Al‡ùP·Os,·uljF·ë$]ëÙ:Vó7’ç›vuc"qàLžOôÜ0fÎ'¢É*ã¥öiÇ?Ÿ”<ɈÅâCRo“/d¶CS¡yÉô4®ö¾†ûüçXø×µ¨«{µ îÁ‚ÿõ¿Æÿ‡{B½8‘彦;¿'É./[:³£)¦œvé¤iùeÞülöº0nàBÇSøwËþGl~OfÚ”ožU§jæåz¯(</¯Y¿Ç#ŸÍDÀ?ýàwø§_þÃL<û{“ìòìÒVe&¯º…±c¿Â¯"ê§v–BYÛ2® ·yæ/¨Åªº:Ô­ªÅ‚êEX.ÿV.A(¢öº‘]¹Ô”{#¿™k ¤úÇyõ‡0’ú/U¬Ê¥j_O´`áâ݈LÆ05ôž{ôM|=6„þÞÑôÈK蚘súâ(emØAl‡ùP·O£ø¸#2gícê;t4,Fý¡‹©ÿQÇKíU×zv£ŽÕüäùÄŠù5¨]?n¦Î'-_9s>¡úf&/µO;þù¤ä=±Ë8zõk>•DÍRNlBÕ¢eñNF:s[ú-oc  ·¨ëxb÷ÎÎÃ’¦/㵡–ü­\¬òŠÇ8åϘºŒ£û±sõOQY±(~‚ÐÀEâV‘ŸÄ\«2úÅDZåÀ)Mç bÿ;‡ð¦×Ð3!Ǻ[¸ÞŠí=ãñ/ú6nD8ªv` ¬\.PóÙ½ÝóQêûs³Z{á!4õ©žˆï­öªî³”·žå都æoxï|ÂËüóIÉ#ncjô4Žî«kîFEU( ‹øøìj7š›ãêœÁøŸpmü†ëÓ2Õu<ñQÇ&Ô½°cÖ}‹¡P3ZßëÈ<9@1«²©)7#àd'ÞFûqxï˨“¾0¾¿*kêð ÐÔÀ…|oº[Ñ||dnÿ›ÀøõòNVSî örü;æ5XPûpb½ª¶Õñ÷ªÚ¨¼'>.¸©¶ÜêÚ°zAl‡ùP·O‡Ñ±¾þÿßÞÿÇ6uç{âþÉúHH«Ï]¤av¤|r—{5Ú^EwÛE£ ½e‡ÍçBuÙ,¢åf�µ“r§ÝÀt¥ß½4-fK“¶:Óh “¡àÉ”%PÜèM€˜!øKC: `š„$DNÆiœœçÇoÇ'qœãÇ9oçœãçC:ŠßyÛÇ>~¿ý>/¿ý~¿^Ýý¾„¶ªC8ÕÖzçä3S}µëûœ‰÷XÖs˜íû„™Yç•ÒüRFàk?‡Ã¯¯GAx^ëB”lë¥ïYªã"zH¾ÖðüÄyÿ†Î†MX¼ìMüîR«F¾Há³+ðtyýT#=o¿Éó„ØtlC“Îq ‰Ò“·[§æÎÎΛË~SÏKÔ¨Š¼DM/ïßplû²©𢢢ð¦ö€‹*ÿÙMí9…DéDÇLól¢ M»Ö"_m ׿#n¡O\§>ð�ÝÍÝ(Z·Æn£aÃXæ¼ñ¿àCܨÛjÉ:ÉŽKÎg*ÞÚ™“è¸dµ#á©"¹…(žñ ah+}G½h'õ0òÊ4ÎÚ d¦új×÷9ï±qÏ12õ}¢ÕïÃÀzl®öØ¢ÓÇ(Öy¥4o&ºÏ`WqÁä¥zO`ý¾#¸àíA@Q¸wåwäωqÈoÑTör¿†‹³æïŽa°ÃÚòUÈ =_®3ó á ÒÏ¿‰¬?€$rL ‚þ‡ðõù¥£*ѱÉjpÙNñ‰+*œÆÁWŸFáš=hôtÁŸ_4bhÝêoBÙï¸0{åó`?:ܵ(/ZzNùSh’—¡Çåí#”>4W¿K³Ü ÿ£G³æ¹MÚqe@6ÖÃT]¦J_+>¨i˜¼*˜2 ÿ°úNáïû}þL½3檯v}Ÿ3ñ÷æþ>afÖy¥4‚=h;õ^-þ ÖTºàéÊØ‰ÐÆ} Çáo{+ŸÜ–±Èÿf609¹+QV±¥5×2ÞÐÛðŒ£ßý*çcë+/bóŽÍ(r,ÁúÚËøòüX™ë=ß",Ûö:ò¿°%:6㎛=ग:uΉÍ~ç‘Ïám;“íÑ|s2´n)ƒh«~O:›1 vÞÌè°p ·èETì?…&ÙqwÜÙØ>*ëlÀ†Å«àlˆü/VèËò@ê6”>ÓÐ:œaÙXSah™*=po[мâ-xåù-رu%yÏ¡öz;ÎW®žŒ×?Á¶_I¿Ž`¦új×÷9ï±qÏaîïffWJóO  Ïû9Ž8 ›8r¡mÇ?F»üucæD| µ†ä«ôåµâÒªàÜü"vÔüÛZˆï‡˜U(¯u£ñó+¡{ ã^w?<ºö›8O+ÛФsœñÓ}8øÓǰ¼öVè«Ù>Þ»9õS?]ÇCAÒúí»qÜu ‡÷mÂShMy¿“iUªy‰U5/Þc…Ôò¾Å;kÿ9?,ꟾïä eg¤¼ÕðØýĦUZyÉÒ‰Ž™L(8„.Ï)Ô”mȾÅ9•Gè8y�›Ÿß‰šºw¢:,¶¡ÖÝAÑ¡‘)4Ɏ˸ãü‰©ö±»ar•OµÛ~U7Õ>>[;t¹—qÇú’Üôä,ÅŽ‹#ÿS)vÀ]» EâËrÖ¾2¼gP6ÖÃTZ¦Cn”/,FmGèë²ò Öü‹Ê?À銟„¾d¿Œ_Õƒëø!ìÛ°õ²W¬2W}µëûœ‰÷ØØç‡¿ãÔÔ÷‰š©‹ÉCcòû„ìnG3ÕÏd¬óJÉDÄÄ.xNý eE,±Æ…ÖC•Þ¼Étè‹lgs¨Á)FÁ–b癯ÂCÅ“=V¥7O+ÛФsœñÓÝp-|Æ‘_>œï—¡¥å=T\쟾_èDµ÷çp6î~´ÓªTó5ªj^¼Ç ©åãÒ‘—ñã¿ß2Õ~íÚ|Þxpºüû?ÆÚÙ8ÕžÚ~µó’¥3™X¶­q-8€Îæãp>¿yËvãLç#é¿EKv\Æ·X=¿hª}l«úIøËºÚ>N|å‰y½‘‘e­ø=¨^Y gKo¤\c:,r£¨lvd`í+iu8²±¦ÂÐ2õ¹P¢v ·¡j‰¹N7ZTãbÔ<&¥Û…JWw$%™ê«]ßçL¼ÇržcòûÄqç&,Ë+šú>‘IfªŸÉXç•Ò<ó¹?ÂAgud¥`ºÑî½»Ù´Æ…¸}fW5¶•½‚êÆ«èò÷ed¢Øã2ö8Å/9¡�5ùáq"gy-nÝ:ŒœçÐÑ탯ûš¿†zÙ={n»Á›±ÇÍpJEèsß{ ª¾>d(~t· ŸX Óää×­É@ÌUý ʶU£±µ þ¯á½;¿¿¸wÜÙÚ>Šj~ '/áù¦|ºÃ¢¼îŽþP|™µ¯ä×ay²±¦ÂÐ2#~ùBôÀ™»Ëkÿ„[µ¯ÂyÞ‹nŸÝ¡/‹;7âewßäc$2S}µëûœ‰÷Xîs˜çû„™Yç•Ò¼Qº°6¼z~hs¡²¹ 7kV…ÒK°¾Î›‘ùs‘±¤*ÞÚˆêÍ+‘oùÅ9ÅÜÙ×ñlÃPS ˆJ\ð‰Ù*‹&j ocGô/;’$:69åËpJ@¹ƒ†µêõêaYå%<¼Yƒ¥9ä­¯GGæ“ÏEæêÖäè¼ÖÆjl.Zù‚%O²ã2½}ŒØÇ÷ãùeK°lçitfp¡CAÎqeF6ÖÃTZ¦bí…—ËÑÐõ]ä u.J\ÝP.¡rÙ¢ÈûÚíš12@CmŽìú>gâ=ÎX9Îó÷ 3³Î+¥y¾ìÙ²ð„“@×)¼¼ñ¾ìïB{ëT=³îY+âšKô2zH¾ÖðüTò„Dék×>Åц¦©Ò™y‰?OˆMÇ64é§7¼‹ƒ[¶ â×NT,[ŒUµ^\yW?CgËYìß_·~ùÌÔ—‘¸û‰ˆNëÍKÔ¨Š¼D[Þd€þ[g9Ö¯Ý8Õî:vvj]øMœ'$J':fšgã7P³ô©PÝ€¸ƒS/ÿµ_~‹îö+ø¤ê…Œü‚7óQ·”/Ñn›!¡öñüþý¨ÿÜ5Õ>†'˜‰é2¡ö±±ñcœ|k‹ôÎ!ÑqI/ëðô ª·mÁ¶êF´v b —åœ:l”l¬‡©0¶LCçnßyìßó>?QeާQÛ12ùÿÐ9½¥éh<Ûˆ·Ö½%}Z“`¦új×÷9ïqÆËQyˆí÷9â"Šu^)͟ึ¿‹–!± çî»vaOË`èÕ ÷¶mpù2ûK‹^ÑÈè/†Ñ·…Tó„DiyBl:¶¡Iç8…DiÑIÑø~UèÄÓŽÞÈSy×<h>ñ{´÷M–tž(­7/Q£*ò=v®yB8}õâTøß”Õãj$?Ñcå ‰Ò‰Ž™æ[�]®½Øß29eH¹ßˆ÷4cãxäÞg30gz.ìZ·’—áÇ-®žrñôTû8“‚À?Mµ2%:®Ì•uþ®«h¬Þ‚¢|.ΙH6ÖÃT_¦âËs.žügÛz4~µÆË7Ñ'À…©ê«]ßçL¼Çf*G#Yé¸ìYd(eà2ª× ¿èi”””`]Qò W‡þæÃñX(@Í@«?ÙÒÐØõ8…DÇ–ñãf8…ê@kõ:,Î/ºP›X²®ùy…(OÂé‘=›|nìZ·’W6wæy7nrÄEÙXSa×÷E0Ó±±þ¥ïÝü³g ¡ÂSErCA¹У·Ò×qÔû(ü‹£™‰¤Ö/Û*½yÉÒ*#ó´Ò± M:Ç™,­Ò›—,­J5/Q£ªæÅ{¬0—¼di•Þ¼déDÇLó,<UäG(,^7³M,Ù„GoÀoòFÑ®u+ÙqeãqgkY›ËD›]ßÁLÇÆú—>¾wóÏž%@Æ =U¿Kbªˆõˆ¤ÖC•Þ¼di•‘yZ騆&ãL–VéÍK–V¥š—¨QUóâ=V˜K^²´Jo^²t¢c¦ù6ŽæZT_ê5}Ç­»Ö­dǕǭemf,mv}_3ë_úøÞÍ?{–�+ð�Ý“ÍT¸ûg<Èð•R‘- ]SHtlÙR¾d&)^7àÃr¤LG¶~f²ñ¸³µ¬ÍŒe¢Í®ï‹`¦ccýKß»ùgÏ cùNbçŽZw¹àŠ»Çï+¶b¿çQäAæ‘- ]SHtlÙR¾d&ÝhÜYÃǵÚ¨í÷{°iÿUˆ5ÖÍ$[?3ÙxÜÙZÖfÆ2Ñf×÷E0Ó±±þ¥ïÝü³g ±|.”„*µ¨ØÉ¶…ån˜mY:ñºTÑCòµ†ç§’'$JËÈbÓÑÇ%¤sœB¢tºyB¢´Þ¼Øc&ò=v®yB¢tºyB¢t¢c¦ùÖ WIn¸Œ’n ·›î’ÑâuÙQ²ãÊÆãÎÖ²63–‰6»¾/‚™Žõ/}|ïæŸ=K€ŒåkÂA—>Ÿ/éö`0`º9ßÑÈè/†Ñ·…Tó„DiyBl:¶¡Iç8…Détó„Di½y‰U‘—è±sÍ¥ÓÍ¥3Í·n|tð$¾Òhgm0Y£h׺•츲ñ¸³µ¬ÍŒe¢Í®ï‹`¦ccýKß»ùgÏ c)ãŽkEÞ£è:qí&_³3[»§èز¥|ÉLƒZ _èÿ]çq²}8’6§lýÌdãqgkY›ËD›]ßÁLÇÆú—>¾wóÏž%@ÆRÁ{tŠó†+÷Œ-× O²u;çÙ¬×l£-šV¾¶x´îk—Ìj~ï1ì(.€cV¹ÂéñGîgN3_¯½¶D´îo—-­ûÚe³*­c±Ë6Zû³ÓfZ¯Í.›lZÏi—Í*¬ÛòSÆŒ{k°ÔñJ^Ý §Ó9s{ÇnsMß&’ÆJ;I4~5Kˆ‚’íØÛ&:w·ù®$B$ÛG""c°=ÕÆw…’šè¬ÃSkÐm¾+eO$6quO=†î±È?ˆˆí#‘1Øžjã»BÉ)póP5Ž~{Q¿�:Ÿ2ýDFቄ&Ãó÷Ø{´3».;Ï Ñäk\ÉÀö‘ˆÈlOµñ]¡¤&:j±<ô¢Y›Ö¸ 2ЍóD˜¸…Úåkþ„7ó¯qA$ƒ¨ÿDD4wlOµñ]¡äƼ¨}zÊ÷ÅÎåm\ゲO$4iµÏcMùžÙm"׸ ,Åö‘ˆÈlOµñ]¡ÑÛîÅ®qAYŽ'R)½·Ðþ€k\©Ø>ƒí©6¾+”¢1 v\@CÍ›p:ßDM}<¾°/ƒ² O$4MAp°NŽ´¨ù�Mž{°Q¤,Åö‘ˆÈlOµñ]¡Œ óø8Äüí…È_±ùyK_PŠÚ›ØyAYƒ'š¤`¬ó86L®sáÈ_Žù?B~þ±¾¶~6Š”…Ø>ƒí©6¾+””ÒsÏ/çËv£©kJÐgéqt\Fõ‹‡ÑÁ«ŠP–à‰„Â”{8ùüãXMß  øáqۇÖê¨íDîH”=Ø>ƒí©6¾+”TÐãDnÎlnz09º"Üqá‚ÐRñ \>^V„²O$&ÚÀÜ,ÜÜ„þp£é¸µ…£-N<çêß(›°}$"2ÛSm|W(©ÉKQÑòhò"h/Þ ×‰ý(Yº-#MÙ' ‹Œ¸øaE &¯":.^À>×18KV‡ÚÊÁð‰² ÛG""c°=ÕÆw…R0 Ÿ{žÞ\¶ÞÀäT‘ÜœÉaÒçï‚ã-([ðDB“}çQùt9êÚ¾L) ÕEX¶ó|AvæRöaûHDd ¶§Úø®PŠ&ðµãÓO½œèEÛéshé`§ežH(Lñ£»ÝƒÖ .<x7GÐÝäDye#¼~.úCÙ‰í#‘1Øžjã»BI)þn´{<ðxn [åJ�}·Ûáñúxé?Ê*<‘Ф>¸ËW ¤ê:¿ÃXg6ä-@náS(ÞPÏ;/(û°}$"2ÛSm|W(¹!7ÊÛ€ªó Ž ³aòròP¸z 6T_Å;/(KðDBaã7PSòkxÇBŸÒ÷¶'óøh bø¢/5}¹#Qö`ûHDd ¶§Úø®PRãÞ_£¤æÆB·•þóضx!¯lÆÒ‹»*ÐÔÏ_);ðDBaãm¨Z_;Ê8†ZàIÇblpuAÁ8ú›^Çvw_äŽDÙƒí#Éij %5Þö.Ö×}EéG«s 6Áu P é¥=pMDîIdo Ìi’7kžAAÑ*æ:àxò�Zû}hs9±¾` j¼Ã‘ûe¶DDFR òÇáh<ËPrvÔ¬ú1ŠV"7gžt^FÏu¸œQ°üàäpi¢,ÀÀœ¦{ÐÖøk8«Ž Å7^ûgð>_ìÌ¥ìÃö‘ˆÈ( ‚ýà|ï/„…gJAèÃÓ{ ª¾%|©?%0ˆ¾Pþ` tRÖ``ND¤í#щ x?Ç‘}QàÈA®ÓÃŽ‹(<Ë¥ˆ9‘6¶DDéQ>´Ÿ=Œ×Kž€#Ô–æ8ž@É«ÛPZÃÑx–¡´0@¡lÄzOñ°nP¶ãg€ˆH¯Qt7U¢8a¸ ulľ#ŸÃÛ€‚aÜëîý%Ï2”(”Xï)Ö Êvü é%¦ã·áÔÁWP\¸•­èòsŒE<<ËPZ P6b½§xX7(Ûñ3@D”>%Ðï…#pn.Åfç\ð^Åñ“^ðº"Óx–¡´0@¡lÄzOñ°nP¶ãg€ˆÈAø»<8U³E\œsže(- P(±ÞS<¬”íø "JCìåÕ1·^_/îr‹x–¡´0@¡lÄzOñ°nP¶ãg€ˆH¯ïÐÕ°qòJ"¡Í±lš¶¡féää•¢®Ã¹ <ËPZ P6b½§xX7(Ûñ3@D¤×¼5«±Ìy~e]§^ÃÆÚèï¾ÖOªðÌËn EîI츠41@¡lÄzOÂõë×±uëÖ›¨±ÿ[äQDöÆö‘ˆH/Á®Flßߌ!1'Dé‚ëÅhQ <rcÛ³.ø&ïH!<ËPR_|ñ\.׌M(±ÿ;{öläDöÄÀœ„¿üå/(((ׇD›è¸ ʢΑãh}k h] JJžFQþc(,^ú»9[!V½ I<ËPRjGE²MÜÈÎD='Ri;::"÷&²?Q版H1Uä)ä®FI‰è¸P·õ(Ýy ^?/†gJ*•_E¾¸‘‰ºN$$k9Ú‚²¨÷DD¤2ÐŒêêKàåC’âY†R’ì×E޶ l ê:‘*Q»ÈÑ”mD½'""=îÝÃäø{§ÁH*[ñ,C)Iôë"G[P¶õH¯]äh """J._ã^ì8|,ücHüí0*6½ÏHvË`N)œØ�]lâÿDÙ@Ôw¢hZí"G[P6S‚ApV6Q*‚ð¹JgÅÚ[>ÊÝ}‘Çe'Fá”2­_9Ú‚²‰¨óDÑbÛE޶ ¬ìÁEç!x²}<3QJ‚ð}t®¯îÁçó%Ùz0˜ˆ<.;1 ']b]äh Ê&¢ÎÅŠn9Ú‚²Ï}·páÈX_°9¹Nv\¥(î(µàœ8éå¶(ŒÂI—è_9Ú‚² ;.H‹Ú.r´ee¾ös8üúz8DÇÝB”lë¥ï±ã‚ˆ(EŠÿŽîX‹üp;:sËuz²~AÎhŒÂI7õ×E޶ l#ê=YOt`‡ÌI«¬Ì¼ÍÅD÷ì*.€CìËñÖï;‚ Þ”TWÈ'""`ÞšUp”àÕ}N83·wÜ]ÈîÉ!31"Ýį‹«V­âh Ê:s öi~Ø©ÜXÍËJe3ç×ìAÛ©÷ðjñO°¦ÒO×$"ÒmuÏbmÃ7`orŒ€lF#vۈ̂õÑšìTn¬ƒæe¥²1ìµ*ôy?Çç/°a³G.´£íøÇhç¤l"¢”(þvÚëÂ×c1]ÁÛ8Þx“k\Dad3j0ríÚµð¦ŠN§›'$J§›'ÄK3H'3a}´&;•ë yY©lŒ­ ‚þ.xNý eE¸ÆQJè¨-·ÉZ׸˜‰͈J.Ä눽-¤š'$J§›'ÄK«ÇCd¬Öd§rc4/+•ÍÜ_ë(zÛ>ÂAg5ê[î‡kÅßvï} ÜåDD©Q0Öñ[<½f+öŬoÁ5.fcd3v j¤“™°>Z“Êuм¬T6s}­JWÖª+à;ŠPÙÜ…›5«Bé%X_çE r?""JBéA{û·\ã"Œ€lFÉF2¨ôæ%K«ôæ%J3H'3a}´&;•ë yY©læúZǽ5Xºì�<þ ]§ðòÆCø²¿ í­gPõÌn¸‡ø!QÊ‚ýè¸ð!jÂ#-jPßô'ølGc1²Œ$ëPéÍK–VéÍK”fNfÂúhMv*7ÖAó²RÙÌùµïÀµý]´ ‰eãÆpßµ {Z¥îmÛàòqV6QJƾÂñMK#——ÎÇŠÈËÏGÁúC¸éçÒœÑٌ݂Zéd&¬Öd§rc4/+•Í\_«2pÕk _ô4JJJ°®(h®ý͇ã1'<£ôLD”\='˰ g–í<ƒ®À‚ž*”º¾Æ@k ^¬½Å«ŠDad3v j¤“™°>Z“Êuм¬T6s}­á©"¹…(.) w\Lm¥¯ã¨÷çj¥Ä³9 ·¢©²‹b²ã¢mAÅs.øÂÿ%ͨÁH¢)éæ ‰Òéæ ñÒ ÒÉLX­ÉNåÆ:h^V*›9¿V¥ÍÕïãÒ� $"J_dÄÅ+Ñ©ô@ñ¾£8áÜ€¥Í ÿ—F@6£#ñ:bo ©æ ‰Òéæ ñÒ ÒÉLX­ÉNåÆ:h^V*›9¿ÖÀt?L¶Ž…‚ÀÝ?ãAã/ˆˆâ Þ…»²›ë®¡7<UĉÜPíXö:ÎûF#w"ÍØ-¨eNfÂúhMv*7ÖAó²RÙÌùµúNbçŽZw¹àŠ»Çï+¶b¿çQäADD¤I¯ý>õöc¢¯ §›.£sp,’I*F@6c· –A:™ ë£5Ù©ÜXÍËJe3ç×ês¡$´±ŸdÛÂr7†"#"¢hãðw߀Çã§½~P½¸Ýv^ß× ŠÁÈfDl †Jo^²´Jo^¢´8"³`}´&;•ë yY©læüZ}M8èòÂçó%Ý |išÀû<VRóýŽÝFÆ%ÈÉ-ÄêâM¨öô³ýŒÂÈfD0’¬c@¥7/YZ¥7/QšA:™ ë£5Ù©ÜXÍËJe3çתŒ#8®N¢ëÄ´sÍN"¢ŒÀ[SŽïpèö8úݯbqÎrT¶ôC¾ˆ]/5¡òŽÂÈfìÔ2H'3a}´&;•ë yY©læüZ•GðÝ…âü…á}ÍØrð$[·“ˆˆB†ÑVõ2êîŒBº ç“‹°`ƒ ÷Å”‘þ&¼´Sí¢1²™9#&c·ã!kc}´&;•ë yY©læúZǽ5Xêx%¯î…Ó霹½ãF÷DäŽDD”€‚ÀÍ÷°ª`Væ!DZ ÎVzÚá\_ˆå57À%:§1²5I4#Ý<!Q:Ý<!^šA:™ ë£5Ù©ÜXÍËJe3××:ÑY‡§Ö6 ›“¯‰ˆæh½má ³õ-÷ă=\#H# ›±[PË Ì„õÑšìTn¬ƒæ%Ê&Þ¦MAàÞ=<L•ãîžP0;›Ös¥ºÍ‰ò7Uãè×#‘¨è<~Šk\‘áÙÌœƒ“±Ûñµ±>Z“Êuмô—M¾Æ½Øqø\.W‚í0*6½ψq¿»ÍµMtÔbyhb?³6®qAD4'¢-¥Ùø®ØŒ¨èɦ`¨ôæ%K«ôæ%JóƒKfÂúhM™(·LÕ ÖAóÒ_6Aø\¥áÇ%ßòQîî‹<nîÄ>çd̋ڧס|_Ìú\よhÎæÜFÛß›=YÇ€Jo^tZëyT±÷M–—(Í.™ ë£5e¢Ü2U7XÍKÙáûè\_Ý ÏeN¼õ`0`\oÀÜëQ½í^<àäk""Ãñ\¯ïŠÍØ-xæ—Ì„õÑš2QnlIÙ(øË7ßàÛY_þîþ‚òzŒ©Gc츀†š7át¾‰šú&x|#\HŽˆhŽx®×ÆwÅfì<óƒKfÂúhM™(7¶‰¤¿lâ­qq¿¯ØŠýžGá{)}­ø æCxúŒ[8bîõhÇ· À!¦±,DþŠåÈÏ[‚ü‚RÔÞ|ÄÎ "¢ô÷÷Ç´ÿ“›h£cÿ×ÑÑyTöbd3j0’h Fºy‚šÖzžèÛBªyB¼ô܃+"ã°>ZS&Ê-Suƒuмô—Mâ5.–»1„qô7½„9¡¬éÛÈãæNì.”ž“x~AËv£©kJÐgéqt\Fõ‹‡ÑÁ«Š¥dÕªU³Ú­Mtrd;F@6#*¶¯# ö¶jž ¦µž'ú¶jž/­>‘°>ZS&Ê-Suƒuмô—Mâ5.¦®ßÀï74pêÈ\ëQÐãDnÎlnzy¢ã¡¥â¸|¼¬Q*¾øâ‹p›œh{ûí·#÷ÎnŒ€lFTîL°Ûó¥‚õÑš2QnlIÙŒÃç:.{<ð´wï�J ·Û®Ã+y­ˆ¹Ö£ÉKQÑ29%ÜqQ¼®ûQ²t/Z ¼t+‘Ý%uÁѓٌ¨ÜÉF2¨ôæE§µžG{ßdy‰ÒâyˆÌ‚õÑš2Qn™ª¬ƒæ¥¿l&0ä~•Tã|G?‚c·Ñ°a rr ±ºxª=ýÒ:/æ^FásïÃÓ›ëÑÖ˜œ*’ °+°óü]p¼Qêºàh‹iŒ€lFTðd*½yÑi­çQÅÞ7Y^¢´x"³`}´¦L”[¦êë yé/›xkÊQãÝG¿ûU,ÎYŽÊ–~(ñë¥&Èú͘z4€¯Ÿ~êÅàD/ÚNŸCKç�;-ˆˆÒoÔG[Lcd3¢‚g‚Ýž‡(¬Ö”‰rc›HúËfmU/£îÎ(”¡Ëp>¹ 6¸p_LéoÂKÛÅâœr̵)þn´‹).žèö‹9.è»Ýׇ�g‰é¦5ê‚£-fbd3s FRe·ç!Jë£5e¢ÜØ&’þ²Q¸ùV¬ÀêÂ<ä8VÁÙêCO[#œë ±¼æÆ"÷4ÚœëÑåm@Õù GÐÙ° y9y(\½ª¯bˆDDºÅŽºàh‹™ÙŒŒ$š‚‘nž ¦µž'ú¶jž/­>‘°>ZS&Ê-SuƒuмÒ+›Qô¶}„ƒÎjÔ·ÜGPL¿ìÏ÷ ¾y oι֣qï¯QéXQúÏcÛâ…x¼²CJ?.îª@S?¯‡JD¤Wô¨ ޶˜ͨÁH¼Ž€ØÛBªy‚šÖzžèÛBªyB¼ô\ƒ+"#±>ZS&Ê-Suƒuм -_#¶„;"iƒÍõµŽ·½‹õu_AQúÑê\Ç‚MpÝ”hziÜC‘{‘ê¨ Ž¶˜ÍØ-xÎÔó¥‚õÑš2QnlIÙ(tÅæeyáÇÎÞ–`ýÁføÆwˆýÏI 5«~Œ¢Õ…ÈÍY„'—Ñßs.çF,?ï犥CŒºàh mŒ€lfÎÁHŠìö<D©`}´¦L”ÛDÒ_6~xœË[ô"*œN8£·%x¼¨ oˆÛõ Ü0÷z¤ Ø{ ª¾¾ %0ˆ>|¹@'Ù’h;í´Y # ›•0Ù •Þ¼è´Öó¨bï›,/QÚŠ*²/ÖGkÊD¹eªn°š—þ²™€¿µ j,Âés¡Ôé‘viQÖ#""ýìÔvZñXxæ²Q “u ¨ôæE§µžG{ßdy‰Ò ®ÈLX­)å–©ºÁ:h^¢lâmñ¢÷Ö×x;B!øßÜõ']œSë¹RÝŒ&cŸDDfb§vΊÇ³ŒÍdªÚíyˆRÁúhM™(7¶‰d¥²‘ñZY7‰ÈîìÔÎYñXx–±™LUB»=Q*X­)åÆ6‘¬T62^+ë&ÙÚ9+ Ï26£VÂDS0ÒÍÔ´ÖóDßRÍ⥑™°>ZS&Ê-Suƒuм¬T62^+ë&ÙÚ9+ Ï26“©Jh·ç!Jë£5‰r³ÓFæ”vÙ(#ðyN£¶Ê gÕ!œ¼ügø%_•CF=bÝ$"»³S;gÅcáYÆfD%´ÛFDdvl«(­:¼ wåjäFórraÙÎsáKŒÊ"£¾ò3@Dvg§vΊÇ³ ¥… e/Áàxä6Ñ$¶‰¤¿L`èâkøQá¼ï¾»ƒPëj_ü>ÜtíÂÏî$½ªHºdÔW~ˆÈîìÔÎYñXx–¡´0@¡ìúRÑÎ÷®!ù‘À6‘ô×?<ÎPãޤ£Œ¶ òÅ“è$&£¾ò3@Dvg§vΊÇ³ ¥… e%€>ïç8²o# 9ÈuzØqA3°M$ýu €ŽÚݨ»3I«Æáo{OmnBä?F“Q_ù "»³S;gÅcáY†ÒÂ�…²ð¡ýìa¼^ò¡:Ÿãx%¯nCi G\ÐLl): øNâ*qä|3<Z/žF}Õå>‰{9U„ˆÈDìÔÎYñXx–¡´0@!{EwS%Šó†ëº£`#öùÞ>1}÷ºû¥}¡ kb›HéÕqø½b[ÑâðãÃ[î*l;zCê•EdÔW~ˆÈîìÔÎYñXx–¡´0@!{Sìm郯 ¸p*[Ñåç Šm"Í©ýðu´Ããñ¢;mŒúÊÏ�ÙÚ9+ Ï2”(”-”@¼ŽÀ¹¹›GpÁ{ÇOzÁëŠP4¶‰¤¿LÀëîND’Ñüíøã§]¡{È!£¾ò3@Dvg§vΊÇ³ ¥… eŸ ü]œªÙŒ".ÎI1Ø&’þ:„¯q/*N|^ßbÆÖäÄ?•ÕárÛmø$ŒÀQ_ù "»³S;gÅcáY†ÒÂ�…l/؃¶Æ_ÃYu->±êÿ8üÝ^x}½¸Ë5.(ÛDÒ_‚ð¹JÃK¸å®F¥û®¡¥b¿F“±O""3±S;gÅcáY†ÒÂ�…ìí;t5lœ¼’Hhs,Û‡æ‡m¨Yº�9y¥¨ëðGîG4‰m"é¯bÄÅ~8?ž¼¢ˆæˆ q»õsßµõ±—MMŸŒúÊÏ�ÙÚ9+ Ï2”(do#ðÖ¬Æ2çø•atz ko ¿ûZ?©Â3/»1¹'‘À6‘ô×q \½ŠÛZ æø\(š’6ŽGîÝxÖÕNAF}åg€ˆìÎN휅gJ ²7Á®Flßߌ!1'Dé‚ëÅhQ <rcÛ³.ø&ïHÆ6‘ ­Ê(üâÛb-°2w*Z'ó £¾ò3@Dvg§vΊÇ³ ¥… Ù[èËBë»X³¸�EëJPRò4ŠòCañÚÐßExÌÙ ãm“°M$Qâmé ¢÷b5¶8Ýðg¯¬£õ\©nF“±O""3±S;gÅcáY†ÒÂ�…ìMLy ¹…«QR":.Ôm=Jwƒ×Ï‹¡ÒLlÉJu@Ækåg€ˆìÎN휅gJ ²;e ÕÕ—0ÀˇP Ø&’•ꀌ×ÊÏ�ÙÚ9+ Ï2”(do ÷îáaÒN‹aܽÓcèe ÉšØ&Rºu@ ܃§éÔ8pÖ|€&Ï=$w˜Ê¨¯ü ‘ÝeºSü¸tò#œ•p^°b›Í³ ¥… Ù›¸Lá^ì8| .—+Áv›Þg„Ã2²ÛDJ§(þvÔ®_~ìô¶ËvžÓ\ÓÂ(2꫌}™IfÛ91myUè9óPXôOØÔpc‘#X±ÍæY†ÒÂ�…ì-Ÿ«4\Ï“où(w÷EGÙJÔÊnúëÀwèjØGÞT÷¢/0úß}¸Pós<Sw;”’CF}åg€ˆìÎøvNA óÞ{ï:5†T(þ»ðÞ@Py€¦WªÃW·3ŠÛlže(- PÈÞ‚ð}t®¯îÁçó%Ùz0þÂAÙŒm"é¯Ãh«Z…Uu_…B×£-¨xNÞe—eÔW~ˆÈîŒoçÔQ«Psõ*Ž¿¶[vTÁÕ; ¹w¼ —ϸÉÉVl³y–¡´0@!»S‚Ah^;$x'Nzµó(k±M$ýu@A ãüb3†¢{.‚CèjªÄ3U×B!­ð—Ž^@¯3GdÔW~ˆÈîd´sJÀ‡[·|SkX(þÛ8¹c V–¿³mðùºàýd?Š—ìላÈ_"] Ý)þ8ºc-ò³§‡ä:=\3‹]¿~[·n±‰zû?±õ÷÷GEv'ê€>tÔÏh[ânŽu¨ë<nîÄ>&cŸDDf’±v.xœÏ O=ä,Á®qÁŽ Jîðáó‚qQÙcÿ÷öÛoGAdu“C÷%xuŸN±ÚÔöŽ»KÚÜs2¿¿üå/(((ˆñ7Ñ.Röe®‚±Žßâé5[±/¦™½U¡¡m0ò¸¹Kåµ~ñźÎëúŸˆÈZ2ÚÎ)#𵆓®SøÔÛkøfVl³y–¡¤Dð"*w²MÜÈFÑY÷,Ö6|3{î9Qˆ¸ªŒV;½uttDîMÙ@”¹nJÚÛ¿Íx;“赊sùªUbε¾Î·´ŽŸˆÈBìÔÎYñXx–¡”¨AL¼MäÙ‰¸L᡽.|=ó•"xÇor‹,—lÔG[dQîú(Ü»‡‡³z-Bÿ¿ûg<ÈðåP£;,Ò©ÇúŸˆÈZìÔÎYñXx–¡”$uÁÑd/‰çžs ºàh‹ì#Ê]Ÿ |{±ãð±p]šÞŽã÷[±ßó(|/¥¯Ô|OŸœÕäµ:,ÔDDÓìÔÎYñXx–¡”Å l8Ú‚ì'ñÜs®qAB¼Qm‘DÙë„ÏU:«þ¨ÛÂr7†0Žþ¦—° ç1”5}yÜ܉ý'ê°P7v\M³S;gÅcáY†RoÔG[-ÍÓÜs²­Qm‘DÙë„ï£Cp}u>ŸoÖö`00ÙþpÇû  œ:[gÚˆˆìÌN휅gÒ%ö×޶ [ ö£ã‡¨ ´¨A}ÓŸà p¬M‹uÁÑÙK”¿>ãèù¸—†cÛ” ]ú#ÎõÊ›&^«Ñ#.ˆˆìN´‹vaÅcaÇé;ê‚£-ȶƾÂñMKáuÝ‘+ —Ÿ‚õ‡pÓÏ¥9iZô¨ ޶È^¢üõI4Uä‡xªî¶´)iâ9T‰:0ØqAD4M´‹vaÅcaÇé¦8mAöDÏÉ2,ÈY„e;Ï +0 § ¥®¯1ÐZƒkoñª"4EuÁ/yÙM(çÜŽ’W÷Î\GgßV¬Yù<*ÚàÜÓhZ¯U«ƒušˆhšþvÞ¼¬x,ì¸ ÝÔQmAöå‡ÇYˆœ…[ÑÔ?ÙE1ÙqÑ Œ¶ â9|áÿ’™©_¾ìº‘¹h•‘ºi›€ÿÖ-Ü5¬b ÷÷`os_Ò5v´ž+Õ-žè v\MKÔvZ…‘¨Áˆ7¢ÌŠŒ¸øa%ZF'¿:=P¼ï(N87`iE3FÂÿ%3³sÛÁvÑ|ô—É8z?9˱k\(ÃøóѰ¨ô$z#ÿ2Z*¯Ut`>|8’""";{­x,Œ|lÄ®¬]‹L.xîÊRl®»†ÞðT'rCuѱìuœ÷FîDff綃í¢ùè/“Dk\,ÀãΫÒ:HÅs‘>vj;­x,<sÙˆ¨€×®] ßÕÛBt:Ý<!Q:Ý<!QšÍe¾ö øÔÛ‰¾6œnºŒÎÁ±H&™Û¶‹æ£¿LÄ;Qúú¾Ùk\¬ýÚ$.ÌúCD¤ŸÚN+ Ï\6"* úe?QG@ºyB¢tºyB¢4,ʼqø»oÀãñÀÓÞ ¿(^Ün»¯o$é¼s2;·lÍG™$Xãµ ¯¸}ÒÚÖ""ýìÔvZñXxæ²»" °(ó&0ä~•Tã|G?‚c·Ñ°a rr ±ºxª=ýì¼°�;·lÍG™ˆ5.šà‰¬£3EÁ½Æ-ó¾ÆÍd§¶ÓŠÇÂ3—Ø5a€E™7oM9j¼Ã¡Ûãèw¿ŠÅ9ËQÙÒeø"v½Ô„þÉ;’‰Ù¹í`»h>úË$Ñ‹ðdÕ5®qADd"vj;­x,<sÙˆZ“MÁPéÍK–VéÍK–f€E™7Œ¶ª—QwgÊÐe8Ÿ\„\¸/¦Œô7á¥ín EîIæe綃í¢ùè/ÑqñŠË÷Ì\ãÂYÚSmè Ê×ÅúCD¤ŸÚN+ Ï\6¢VÀd*½yÉÒ*½yÉÒ °(ón¾‡U+°º09ŽUp¶úÐÓÖçúB,¯¹.Ñi~vn;Ø.šþ2‰·Æ…|¬?DDúÙ©í´â±ðÌe#v D`ÑüEoÛG8è¬F}Ë}C_2ƒ=ðù|x0à`綃í¢ùX©LXˆˆô³SÛiÅcá™ËFìˆ0À"¢tعí`»h>V*Ö""ýìÔvZñXxæ²QÕiZS.æš'$J§›'$J3À"³`]´;—ë¢ùX©LXˆˆô³SÛiÅcá™ËFìˆ0À"³`]´;—ë¢ùX©LXˆˆô³SÛiÅcá™ËFìˆ0À"³`]´;—ë¢ùè/{÷ðpÖ‚9¡ÿßý3ðª"DD¦"ÚN;mVÃ3—¨0Ù •Þ¼di•Þ¼di+~°ÈžX­ÅÎåźh>úË$_ã^ì8| .—+j;ŽßWlÅ~ϣ𽔾V|Pó!<}ÁpÚ¬?DDd5<sÙˆˆ$ëPéÍK–VéÍK–f€EfÁºh-v./ÖEóÑ_&Aø\¥áÇim ËÝÂ8ú›^‚œÇPÖômäqs'öODDd%<sÙˆ]Xd¬‹Ö2ïå¥ôáÖ­>)—Îe]4ýe„ï£Cp}u/|™åØmê²ËÁÜñ~ƒA§Ž°þ‘ÕðÌe#óˆ(}·qËÀ¡¬*Xd¬‹Ö"¯¼|8ßäÅx$rß…Mû=¡¯§Æc]4ýe2Žžqix"’VM`èÒq®WFÍ™ÄúCDDVÃ3—ˆ@Df¡5å"í¼ó¿ESûðt:6?œC“ógØRi2#$ú¾Ñ·=iXd¬‹Ö"¯¼ºá*ÛŒª†ã1kDoõp–,A®“ÙB™$š*òC<Uw±]FÏADDd%<sÙˆ´@Ä׈²ÒhÐ Î#Û‘}(É[§Çyq`‘Y°.Z‹¼òJÔqñ!Þ/ÿ ¡çÎq¬À® 8U$Kˆ2‰·i‹sîDéëûàt:§·}[±fåó¨hhC²3ªÖs¥ºY Ï\6"-IÔqqü=”/[~nDzJ\0´•™뢵È+¯xSEFás¿•¹ää=‡Ú¶‡RF[¬‹æ£¿L&à¿u wg «ÃýÆ=ØÛ,g}õ‡ˆˆ¬†g.Q‘dS0T)çõ6ã†/fç_9wåjäæ8ðƒÜ…¶±é¼˜ûª´ò’¥`‘Y°.ZKFËKy„›µÏ!/Ôæ®|nßh$CÖEóÑ_&ãèýä4.Ç®q¡Œà^ã,*=‰ÞÈ¿ŒÆúCDDVÃ3—¨H²Ž�•Þ¼éK Øõÿ1ôœ‹±²ò<Î^1h¿iXæ!ÊÂJ›Ñdì“äÉTy)oдs9‹P¸¹^²e;çŽuÑ|ô—I¢5.áɪk‰ÜÓhâ9ˆˆˆ¬„g.ÉL 2@×ìÓCObsà øee`€eV* ¯•uÑZä——‚`ïe\¿$ô\KPR} >/Y™ë¢ùè/±ÆÅv”¼ºwæÎjÔžjC¯ÄºÄúCDDVÃ3—ÈDFÑÛúk¬Ïó·7 ºù¾´ùÛÑ`™‡•ÊBÆke]´¹å5‡ Û¸+°ãämNÜÔ.›šÖEóÑ_&ñÖ¸õ‡ˆˆ¬†g.ˆ:ÍBkÊÅœò”Gèp½‚‚ïåà{?ÃÉΡð¢aÑ÷—Mka¨fäEÝô¤`™GªuLH”N7OH”޾-£Þ°.Z‹¼ò…טּbzHYµæâÅÇïÀšý¼j¶H·L”À=xš>@mQóš<÷àHF""¢x沈h}¢Óºó®œÁç3È í?ç{µÛ÷LæêÐV—ëþõ¹ÿ‰-õ—"Lý9…DiXæ‘j¥ÓÍ¥£o˨7¬‹Ö"­¼”^´nœjãmì¸È.锉âoGmxªÑÌõ-–í<'uÚëY Ï\6"+QúÚpZ#(Ÿ¹Ãá?Ç~O²«ÎëÇ�Ë<¬T2^+뢵ÌyqªH6Ñ_&ß¡«a#yPuÞ‹¾€˜32@_.ÔüÏÔÝ¥ä`ý!""«á™ËFÔ@$Þ¯ÑÂ\ò’¥ÅeS›Ú‡µó"´ò’¥`™Gªu,YZ¥7/YZ%n˨7¬‹Ö’‰òR>´êBm•}ö&jê?FKç€ôõXÍG™ £­jVÕ}žz9Ãh *žsÁIõ‡ˆˆ¬†g.Q=_îôä]»ÖŠ€¯Ÿºjñ˲2”mÞŽú3—Ñ98–ô±*­¼diXæ‘jK–VéÍK–V‰Û2ê 뢵È-/±8g#v®\~ž™Ûäe¢9Ô?»è/Žð‹ýÍŠ®*Á!t5U♩ˡ>Ä¥£Ðk`ubý!""«á™ËF¤"bqÎÆ×°2W,F¤ç®F¥û®´_¥éb¥²ñZY­Efy)=g°e±Ž‚Øwø#¸[Záñ´¢Å} ïïFIA–íúÌÐ/›ÑXÍG™ÐQ[~\Òͱu£‘ÇÍØ'‘•ðÌe#ò‘ zš¶aqÎB¬ß‹Ã'ÜhñxBAz3Ü'ðþëëQ°`v]x0{¸«`™‡•ÊBÆke]´yåõç ä•~€¿ö ŠÿK-+ÆŽ‹#ÿ1ë¢ùè/c¿ÅÓk¶b_d¡ëø[Ú#›;Ö""²ž¹lD"êpy­aôiçýÛïà|üq”Ö{qI+ÿZ+ü_ÃÚ¿Û„÷/¶FrRØoŠiXæ‘j¥ÓÍ¥£o˨7¬‹Ö"­¼Æo fi1j¼Ã‘hSºP²ó"ß+=¬‹æ£¿Lº=8×ömL§èÿwÿŒœjDDD4…g.ˆÖ8!:­7¯õØv,}ò ¼cŠfþdú;œÞ[‚Ÿ½ÿÙdFHô}£o zÒ °Ì#Õ:&$J§›'$JGß–QoX­EZy=pæ;áI6?NܯT΋¬‹æ£¿L‚ð5îÅŽÃÇb®Òu¿¯ØŠýžGá{)}­ø æCxúŒ›ÉúCDDVÃ3—È D‚'òž¤kX=U(uuGRÆa€eV* ¯•uÑZ¤•—òêŠ+pq8É/âCnlßîÆP$i$ÖEóÑ_&Aø\¥áÇim ËEÝGÓKXóÊš¾<nîÄþ‰ˆˆ¬„g.‘ˆ(wêP¼#Ùpç‰PŒ¾ÛÝ}‘´q`™‡•ÊBÆke]´yå5†û®×±·¥?þº>Š_Ö–áM\û'[è/“ |‚ë«{ðù|³¶ƒÉºÀï74pêëY Ï\6¢"ñ†Ñ iå)]pþó/q(Îúµûµëv ©|v^Ìm½iXæ‘jK–VéÍK–V‰Û2ê 뢵H-¯à]¸«³]Ã1c츀#O#/§•}IG«¥ƒuÑ|Ò)%„öò®r±þ‘ÕðÌe#j ¢çË]jy ®œ}åå¿BW`"üŸ©ü`?:.üÿ²ü¯‘³ì \ìylòçL–f€e©Ö±di•Þ¼di•¸-£Þ°.Z‹¡åìÃíÛ}3;!‚ßÂóÙ D÷\(~t·‹«.yq'úWsƒ±.š(“x[Bâ<z±µUâê!Ñàö¢/ÅÑZÏ•êFDDd%<sÙˆqˆŠÑ;q»/úšñ¡ÿõ¶á³ö‡3‚pÅßvqiTïø|=Œtl‰–yX©,d¼VÖEk1´¼|.””ÈYh3¬‹æ“V™ïâüÎp„›ãÈGѺ¬+*Àâõ‡p3Î¥vÀúCDDVÃ3—ˆˆÃÊP"a¡Ít0À2+•…Œ×ʺh-†–;.( ýeDÏÉ2,ÈÉC±Ó;~u<Ï(z/¾‰ênÃøŸ&±þ‘ÕðÌe#"Q‡Ëk £O=ïêTÇE¢û Ñétó„DiXæ!Ê"Þ¦]†_à^÷ä†Ñù³îÛ|'εLÞŽÉÓz®T7£ÉØ'Échy±ã‚’Ð_&~xœ…ÈY´köj$^JW`ý!""«á™ËFŒ D8â‚´é/‹n4î¬Àáã.¸\ ¶ßïÁ¦ýW1y”dÔÖEk1´¼ØqAIè/“qô»_Åâãð{ÿgÙ*<¾ã‚”Ké ¬?DDd5<sÙˆq;.H›þ²è†«$7ü¸¤ÛÂíp70ZìÓh2öIòZ^츠$Ò*å.îyÏl†/¼FTÜåñìuœ÷E¯3e,Ö""²ž¹lD Df Á’ŸR^gkQäü8’Ö¾¯öcõç%K3À2TëØtºo¾òþxö,|>_x;s{*ý`-)ïW;­·eÔÖEk1´¼ØqAI¤]&ÁoÑòîÿ„ãï_À>g ~÷7¼2.¢;õ‡ˆˆ¬†g.Q=_î´óØqAÚR­cÓi?N8OL>0Œ»wzpeÆ}õìW;­·eÔÖEk1´¼ØqAI¤U&c_áø¦¥SWY±¢�yùù(àUEˆˆˆfà™ËFŒ D8U„´é/‹xk\FŦwàóºƒèó|ˆšZѳ>Ý\Ȩ7¬‹ÖbhyõžÄóÏŸDo$9ßXÍG™¨WY„e;Ï +0 § ¥®¯1ÐZƒkoAV×ëY Ï\6b\ 2ŠÑ·áù“÷#éùÅ�Ë<ô—E¢5.òQîî Ýç[4•=†œ/¡©ß¸0]<‡Ñdì“ä‘W^ ‚½×Ñxð�ªê[à *¡ùÑÝþedùXÍG™D®*²pëTÛ7ÙqÑ Œ¶ â9^U„ˆˆHÅ3—ˆ@D.¯5Œ>ý¼ËèmûÕ¨8ÔÞ¯ø»Ñîõ¡9êþÚMž'$J3À2Të˜0™þ<‰¯bÖ³˜¼ý Ã_ò\ýüŽø bVwjûÕNGß–QoX­EZy)wаVí[„e•—ððf –æ8·¾‡ÅÁºh>úË$2â⇕h¬3AÏï;ŠÎ XZÑlè•–¢±þ‘ÕðÌe#"Ñú'D§õæyNïÅZGäWòï-ÅÏ{7kV…ÒKð»‡;/ÔûÆ>VM'Ê¥`™GªuL˜L_ÄÏx<4||)”nE ïk©wálskäž3«½ŸÔÒÑ·eÔÖEk‘V^ã7P³ô)8=Pwpêå_ öËoÑÝ~ŸT½€—Ã#‰äb]4Ÿ´Ê$xîÊRl®»†ÞðT'rCûáUEˆˆˆfâ™ËFd"ãÞ,]v�®Sxyã!|Ùß…öÖ3¨zf·¡—°ÔÂ�Ë<ô—EÜå+PRuƒßa¬³ò ·ð)o¨gÈZ‹Ï±.Z‹¼ò  Ëµû[ú!~'Wî7âÅ=â×ñq<rïÆ³XˆuÑ|Ò.e¾ö øÔÛ‰¾6œnºŒÎÁ±H¦¬?DDd5<sÙˆˆÄû5ZH+/xÎ/ãÐEñ ùî»vá…CŸ‡òÏým\¾`üdž$ËK–f€e©Ö±©ôø l/zÇ®„ÒJO¨¾<œÿô¿Ð2ÄðE'þùs³«š±ŸTÒ*q[F½a]´iå¥<Dkõ:,Î/º’”¬+B~^!ŠÅ_Ç“pz†"w”‡uÑ|ô—É8üÝ7Â#Ò<íÝð‹¥R½¸Ýv^ßH¸SLÖ""²ž¹lD Dô|¹K%O¸Œ­Ëÿ³ô'( éëŠ ðƒüÿŠÿ¾ôoàxÌ Ï¨÷±B²¼diXæ‘j›J·á—ÿXžV µÀ“ŽÅXé< ÈÇÑßô:6tÏz¬jÆ~BRI«Ämõ†uÑZ¤•WxªÈPX¼.Ü&No›°óèðPÙXÍG™L`Èý +©ÆùŽ~Çn£aÃääbuñ&T{&GôÈÀúCDDVÃ3—È DÂSEBTñŒ�=´•¾Ž£ÞGR`™‡þ²ðãfÍ3((Z…Â\O@k¿m.'Ö¬Aw8r?ãɨ7¬‹Ö"¯¼Æ1Ð\‹êK½³Ú?e4€È:‹R±.šþ2·¦<ÒŽ£ßý*ç,G¥˜‚4|»^jBÿä ÇúCDDVÃ3—H D”>4W¿K±ëL`4ð;.²HZeìA[ã¯á¬:‚±ØœÀà|wþŒ/)£Þ°.ZKæË+ŸëµÉ/ž‘ÿȺh>úËdmU/£îÎ(”¡Ëp>¹ 6¸p?Ty”þ&¼´Ý Y“ŽXˆˆÈjx沈¨Ã嵆ÑÏ5O˜™î†ó™—"k_¹ß™iXæ‘j¥¯]»Š³ÎÒ©/x3óæ²ßéÛ2ê 뢵È+/?:¶bY®#ü³¶¼gq°åd^U<™‹þ2Q¸ùV¬ÀêÂ<ä8VÁÙêCO[#œë ±¼æd-ÑÉúCDDVÃ3—ˆ@Dë œÖ×ìBÃæŸ„/ÑÊglßÃþñÿ‡߈öc#éDyB¢´x2Qj¹$*3a2})¥/xâ’ºêcµ÷“Z:ú¶Ø¿Ñdì“ä‘V^Aœ¹‹QT¶N§3j{;Jž ý¿"tû-Ô{JyÁºh>á6-Îß(zÛ>ÂAg5ê[î#ˆ {àóùð`0´þh=Wª‘•ðÌe#²‘ðuåsW¢¬b_Lþ J_…²7Äí#ðÌšJb Xæ¡»,æñ žŒzúh-òÊk�­Î­88k– |¿+ÃÎV$-ë¢ùX©LXˆˆÈjxæ²iˆÿ2œ߇w,ö«å7øÝÿÜ‹Ö`$) ,óÐ_ ¾à¹vÀé‘÷OF½a]´©åìÁ­Û±nAtUýW¬jš½h§ÑXÍÇJeÂúCDDVÃ3—¨H¼aôBzy ®œÿ#ÝW"i5ÿ¨Z¸MCã ›h¿©¥`™‡(‹x›jV^ù®ÆO§¾ÈMæ)öuáÌ¥ÖYå­R÷£õ\©nF“±O’G^yq šÍJeÂúCDDVÃ3—¨ˆÖ—?UZy[Øûôø¾Ègmä­‡ÎþÛŒ/¦)í7$•´z\4ÿÔ²HVfÉÒ*½yÉÒ*q[F½a]´iåÅ5.Hƒ•Ê„õ‡ˆˆ¬†g.‘ˆp Re{`κh-òÊkþ¦@©XÍ'ÛÛG"""™xæ²iHÜ5.ºá*­‚‡k\dlÌY­E^yùpîwÇÑÜ;¢¢îý¿Ç/§7ë¢ùd{ûHDD$Ï\6"u¸¼Ö0ú´óÎÿ¿kø7t< ÎÌú [^ªÃ¥HZó±)ä ‰Ò °Ì#Õ:&D§•À=ÔW½†_–mFUíI:})î}£o zÒÑ·eÔÖEk‘W^Ýp•ä†÷?kslDC×w‘ûÉ#ž‹ÌÅJeÂúCDDVÃ3—H D|.”ˆ€\cs¬m@—Äèñ<dúËBAÐw•+Ϩ79ŽØyþ.dÖ‘Qodì“ä‘W^b´Ùš˜és»QV´%¯áHÛ`ä~ò°.š•Ê„õ‡ˆˆ¬†g.‘ˆøQZô"*¢×·¨xEyKQ²£mþ‰Èå`€eúËâ!.îx…e¿Û{ƒQW‚ðûÚáÚ¶]ê/Ó2ê 뢵È+¯G¸åõaVË7rÎå/ ¡s$òyXÍÇJeÂúCDDVÃ3—¨H¼aôBZyþ¯qìÌå˜|þ­þX¾¡cJüdž$ËK–f€e©Ö±©tЃ²ÂWpìÊÌ|1c´åM¬y«iÖcU3ö’JZ%n˨7¬‹Ö’ÙòšÀÐÅ×°8çq”»{"ÿ“‡uÑ|¬T&¬?DDd5<sÙˆˆèùr§'ofúS¼ÿÜß!'ï¸Æ“ÜWÏ~g§`™Gªul*=q ;×Tâ„gf>”A´U?‹§ß97뱪û I%­·eÔÖEkÉxyûÐÑÞ ¿äésë¢ùX©LXˆˆÈjx沑Ì"J(Fÿ íÝþ˜UõÇ�Ë<ô—Å|'w`CÅ8ßÒ ç .žù�U›W"·àu\”t ]AF½a]´;—ë¢ùX©LXˆˆÈjxæ²»" °Ì#­²PÁ{ôå:ÂÏÉq ·èõ>’Úé%£Þ°.Z‹Ë‹uÑ|¬T&¬?DDd5<sÙˆDÔáòZÃèçš'$J§›'$J3À2Të˜03­àꥳh<R÷..]ߙӗ޾-£Þ°.Z‹Ë‹uÑ|¬T&¬?DDd5<sÙˆD´¾À Ñétó„Détó„DiXæ‘j&Ó¦®¾íZ+.yŸvFÒÑy©ìW;}[F½a]´;—ë¢ùX©LXˆˆÈjxæ²»" °ÌCYt£q‡'Âë[x¢¶Ëhr>‹²ºKhëðÁ4~ÒˆŒzúh-v./ÖEó±R™°þ‘ÕðÌe#j ï×ha.yÉÒ*½yÉÒ °Ì#Õ:6èûáÇÅß¾‡Ü•oÀíÕ±_í´JÜû6šŒ}’<v./ÖEó±R™°þ‘ÕðÌe#j ¢çËž¼di•Þ¼diXæ‘j›NwãÿüËVTúÝÔh‹úúú©kw¿N·^<Š]¿8‚­©îW;­·eÔÖEk±sy±.š(+mDDDVÂ3—Ø5a€eúË¢W[î`öEOƒð¹vÀéñO&•^¸·mƒËœL@F½a]´;—ë"eF>6b×@–ºyYJ`Ãbm ¥-ÎbäþhZFŒ[ëBF½a]´;—ë"eF>6"Yu¸¼Ö0ú¹æ ‰Òéæ ‰Ò ÐÍC”E¼-Q Ñéyʼ¿e#6<1ÞbF^ˆÖs¥ºMÆ>I;—ë"eF>6"YÍ/†!Ñétó„Détó„Dièæ‘j¥ÓÍ¥£o˨7¬‹Öbçòb]$""¢lÂÈÇFìÈ2@7+•…Œ×ʺh-v./ÖE"""Ê&Œ|lÄ®,tóH¯,&ðý Mõ5p:ßDM}<¾·š…6õ†uÑZì\^¬‹DDD”Mù؈ÈÆF/Ì%/YZ¥7/Yšºy¤ZǦÓã¸ôákøÇ|/üةͱ;ÏßÅǪfî'µ´JÜ–Qodì“ä±sy±.Q6aäc#j «çËž¼di•Þ¼dièæ‘j›J+w°÷¿ý�?(ÚŠóÞ‘ߌ¾ŽÏP³áì>Ñ2뱪û I%­·eÔÖEk±sy±.Q6aäc#v d ›‡î²oCÕ’u¨»3ù‡JÁh‹Ϲº#iãɨ7¬‹Ö"ÊËÎQ¶`äc#Z­]62ýeáGGÝkØßÒµ¦…‚ ¿M»^DUÛÐ俆.ãè9Ÿ¡ë^Ȩ7¬‹öµuëV\¿~=’š_•••8{öl$EDDDDŒÂ³P¿i¾€©¯å/ùKä?df¢¬Ô)ZS5f¥[]¨]¾0ü¸dÛ÷–íFçD½¥þ��JBIDATŠû“޾-öi4û$sek–vHt <û쳑1 ÏB"(¿.š…x-_|ñE$Ef¦ÿ‹û:jŸÇšò=p:I¶chóOD7w©¼VÑq¦§î±ãž:::L×QPPP®ŸDDDDÄŽ‹¬tøða¸\®Hjþ‰/ŽfêH¡øÒùâ®ôÞBûƒ±H*s½Vñ…ðí·ßßGOÝcÇ…=‰öP´‹f"ê§Ù^Ñ|až…Ä/‹âF³óÅBþºh~ê÷xS5„™éaœùø3xbòÅÿïÞéÉøåP£;,Ô$ê€YÖ·P‰×³jÕªHŠˆˆˆ(»1 Ï2j'Ùp1:kPëN²„ét7þÏÏþÿêt†Õ›˜ârFŦwPÿožÐ}¯ Ïó!j>h…Û“ê~µÓ*q;ºžkuX¨;.H”«×ÙwïÞ¤ˆˆˆˆ²£ð,c¶õ-T\ŒÎôq$wª“`æ–rw_è>ߢ©ì1ä,x Mýã“3€xŽDêÆŽ‹ìfÆõ-Tbªˆ¨¿DDDDÙŽQx–1ÛúѸùéÿâÞžÄW>|³¶ Äbœ ‚ƒßÀ{g�ÁÉ"ºsÂÈìÅŒë[¨Äh Ñ.e;FáYÆlë[Dãbtæ'¾¸«S2´¦jÌN7áã£W0¬ÌÌ¿vÍÚÿýô†þ?™ŽÎKe¿ÚéèÛⵊÑÑZ›G Qæˆò7ÛúÑÄt3¿>"""¢L`ÇE1ëú*.Fg~úëO‚©"Žu¨ëÜÏxâ9ÑQ—¨ƒÙMÔ3®o¡kÿpºe;v\d³®o‹Ñ™›ø’§O77—âÕ}Îð¢œê¶¯ü¬,݃†¶ÁÈýŒûZãu`°ã"{™y} •˜>'¦‹˜¹s…ˆˆˆH6v\d3¯o¡âbtæ¦vÄ›ª!ÌL?‚ëØY´ÆäCéBãöjüö³«³«š¹ŸÔÒ*q[}­±b;0Øq‘½Ì¼¾E4ѹòÅ_DRDDDDÙ‡YÄÌë[¨¸¹©_öµ6ÕÌ~µ¿_Ät*(¯pôùB¬~«iV‡ƒJÝÖs¥º%¢v`°ã"{‰²·Âú¢ÓB\2šˆˆˆ([±ã"K˜}}‹h\ŒÎ¼ôסD—Cý œžG‘ûO<G*x%›ì%ꈦ`¨í7§‹Q¶bÇE–°Âú*.Fg^©vLëFcy^Zßbr‹uX[í?rUô¿VÊ&VXß"šq!ÚF"""¢lÄÈ>KXa} £3/Ñ NçP§r¨´ÓpËëÃÄT:òXÏi8×½�wop2u[Ð“Ž¾ÍŽ ²1]ÄJ-DDDDFbdO¦ÄÅèÌIÇÅY|r²⢧Ñù×ZNbÿÚ”ž¼?™ŽÎ‹º-èIGßfÇÙ‰èȺœÚDDDDÙˆ‘=™’ÍÅèÌGg@‚5.O¡ªm(r?ã‰ç ,Õ{ —0k&ÒÐe=ç›ý‹Sè8]„ˆˆˆ²#{ËGï'§qyX Æ6¡KĹÈP|«ábtæ¤vÄñ ÌLwÃù?ŠðÓ²²©õ-ÊÄíªC8ÕÖƒ+UÍÜOji•¸ÍŽ‹,æs¡DtŽilާêÐÛ\Z„X«H,^LDDD”mÙ[^0£—jè99?ÄSu·Ãë X£3Q¯„dÓéGp;‹Ö˜|•ÖcUZyÉÒ*q[}­”…|¡¼t׌aÎ=(_³¥¢ÍoÕV‘ˆˆˆ(;1²·¼ |;Qúú¾™Aú¾­X³òyT4´Á¹'Ñ\Y©3€YÌÿ5¼wÅÊ*3)÷?Âö½—0`Õ¹"DDDDYŠ‘½åMÀëîÎúq ÷÷`osŸeçs«”À=xš>@è©ù�Mž{ð‹Ç¼`ÇY‚æÜû#ʽˆ“½ã‘ÿY”2Ÿ§ õ5oÂé¬A}ÓŸà p Ù#{Ë‹³ÆE(°½×¸‹JO¢7ò/+Rüí¨]¿$ü%tz[„e;ÏÁdïE¦‰÷_’¡5U#ÕtºyB¢tômv\d±Dk\<Y¶ ·Ê#ܬ}y±Çµìuœ÷ÍeBDDDdŒì-/Ñ‹ðdÕ5ŒDîi=ß¡«a#yPuÞ‹¾ð/ŠôuàBÍÏñŒ…×ï°*Q¯´: =étó„DéèÛâµR–òý›K¶c_ôô¹ÐVU{m½Öþr¯t5`­c JªÎÁÛ*Q½è¸Pƒ ÏÔ[váQ"""¢DÙ[žXãb;J^Ý;#@w:«Q{ª ½–•0Œ¶ªUXU÷Õìé.£-¨xÎ_$I™¡¿3`÷ºû5¦+ ãîžP핇Y,Îv0ÞV…%«êpgÖ‡êZ*^ËgÍ+I%ÂÈÞòâ­qa àû›1¤‡ÐÕT‰g¦F“<Ä¥£Ðkå>‹ÐßÐÆ8|Ü—+z;ŒŠMïÀ²DŸçCÔ|Њ>ËÙl½má ³õ-÷ÃdŠ¿í^Ÿõ×Ç xQ÷‹wÐ2½NGþ®3ØõÌ»‘i0Ö¾6Q,FövìA[ã¯á¬:‚–ðçqø»½ðúF4~é¶’�:j‹Ã_@“nŽu¨ëäünÙÄ{-Ä›ª!ÌLwÃYôýÙåÞòñÓƒîÐ}Ï¡©ì1ä,x ï|Öy\²ýj§Uâ¶xÊN“Ó)"õÌQ„Êæ.ܬYJ/Áú:o¨e±®‰ŽZ,Ÿñ9Š·YûrØDDDDÑÙ[^dˆH°êX¶ÍÛP³tròJQ×aå‹¡*ëø-ž^³uÖ\õÙ[Ú##YD’u L§»ñæ+oágÏÂçó…·³S·{ðyKkø¾ÁÁoà½3€«q÷“ZZ%n«¯•²Ï¸·K—€ÇD ë^Þx_öw¡½õ ªžÙ ÷…¿ÎyQûô:”ïÓjc6^›ˆˆˆl‚‘½åÀ[³ËœWàW†Ñuê5l¬½þîhý¤ ϼìÆPäž–¤ô ½ý[‹±ý÷ðñÑ+žU€ò§÷°ã"‹ïÀµýÝÈtŠ1Üwíž–ÁP{Ò ÷¶m_b7þ[öÙp QŒì-OA°«ÛÕu ”.¸^<€–Ê#7¶=kñ,m; ÆšôwtÃU’~ܬMòôñ””˨^S€ü¢§QRR‚uEÈ+\ú›ÇcNxF­ÛzØy Q<Œì-o­ïbÍâ­+ éO£(ÿ1¯ ý]„Çœ­°îÊvžcMS›ÖÔk×>Fcy^w:QVVÞÄö²Ÿ®ÀW¿05½'ú±±ûÑz®T7ÊNá©"¹…(.mbÔVú:ŽzYºÓÓÖÓ`ˆˆˆˆâ`doybªÈSÈ-\=3@/YÒÇàõG¯<o56ŸcAú;á–×7{@¥ Û«Ñ< ¯~²ã"‹õÅÿü¿ÿcë×Ðe=ç³öh-[Oƒ!"""ÒÆÈÞòÆÑóÁOñÿë ̈Æíp9<›Oƒ± ý>|Ò虵ƅøeËPzò~ä?ÆcÇEó¹P*Qb7ÇSuè´ð ;Oƒ!"""Ї‘½åC1z©f€nýËáÙyŒ5‰z%DOåˆÚ13àr¨Ž§ðË#g=V5s?©¥Uâ¶xÊR¾?bsÉö˜«íAùšÕ(­øm~ ·Š6žCDDD#{Ë Â׸%¯î ÐCÛ¾­X³òyTXúrxvžcMjg@²„ét7ö?½ÏFÖ¶[x‹ªC8ÕÖƒ+UÍÜOji•¸ÍŽ‹,æÿÞ»³»5•ûaûÞK1£Ó,FéCsõû¸4kšÕF߱よˆˆl‰‘½åMÀëîÎúq ÷÷`osŸ¥Ye ÕÕ_4”ïµðxo‹Òßg‹ `ÇE뽄ÆË1mß>†ç½ˆ“½vìôì†kËÈÚDDDDöÂÈÞòÆÑûÉi\Žùj¨ ãÏG_À¢Ò“èüËV|ØRYû‚2&½Î€ÐFߟÐT_§óMÔÔ7Á“ËÙ²ã"‹%Xã"çñýðŒX¸áÜBÃæŸ WëØrÈ[ÿZx¹h"""²Fö–—h‹xÜy#‘{Z‚@ÇQl^–§qlb[‚õ›á päE¦ˆ÷]’¡5Ucvºþ›‡°>Ï1³ì¾÷_ð³ƒgBµ7ú¾zö«Ž¾-ž‡²”ï#”—îšž:ÞÄÏ¢ºmÐÒ_êƒ'rsW¢¬b_Ìñ½‚’ÇW¡ì qû<¯ØCDDD”iŒì-O¬q±¥¯Ç±b‹µ¿B›¥×ðÃã\†Ü¢Q}lbÛQ‚Ç‹Êð†¸]ï±öœu Z‚fÚs kóWRƒÇ?A‹ÈWp7¾‡í+× ®sr‚èÇjî'Åtômv\d±¸k\4â¯|‚^+·þËpn|ޱ؃膫´ ^ •ˆˆˆlˆ‘½å%Xãµ ¯¸}þu1tl­UØxðFèhbø\(uz¦~±§ÌÐÝ0Þ†ª%ëPw'öK¤‚Ñ'žsuGÒÆcÇE뽄“ž¡HB5À½?¢Ìòk\ŒâþÇ;°f“õ-÷Ãm âïF»÷tß¹?;q‰ˆˆÈ†Ù[žXã¢iöµû•ÜkÜbý5.‚]øø¥õØtàZ|âËï8üÝ^x»ºp箟ó¸3Lí ˆ7âA˜™öã»K±åЧSe%ò‚þN4ízqúr¨C—qôœ/Á~RK«Ämv\d±k\8ž¬F›…׸Pº°Ö9G*›»p³fU(½ëë¼DîGDDDd'Œì-/Ñ‹ðdÕ5 ¯qñº6Â9Dz}h~Ø†š¥ “WŠºë^èÕªD9É:¦Ò·°ó?ÿ»¨:s<U‡­)î7D+­·Å>)Kùñ|ñVì‹™bVU{m½³§Xɸ·K—€ÇD ë^Þx_öw¡½õ ªžÙ ÷×ü!"""ûadoy¢ãâ%—ï™ ;Õ¨=Õ†Þ •Ç$ŒÀ[³ËœWàW†Ñuê5l¬½þîhý¤ ϼìFì`p’KgÀ:jŸÇšYõSk;†6¿q_ºØq‘Åâ¬qa Á;pm7rÙÓÉ){Z¥îmÛàòqÙ#{Ë‹·Æ…(v5bûþÈeO•.¸^<€–Ê#7¶=ë‚oòŽ”!ú;†Ñ}õ"ÚÄ®R2Œ»wz¤®QÂŽ‹l7†ÁŽ h¨y™¼ ¯lÊÀeT¯)@~ÑÓ())Áº¢ä®ý͇ã1çìiƒDDDD6ÀÈÞ.‚ýè¸ð!j¿\× ¾éO6¸Lè8ZßÅšÅ(ZW ÒŸFQþc(,^ú»9[aÓßTMKt¨S2´¦jÌNŒÆ8|Ü55²Âå·wã_Š·Á^k wýØ^ñ;ô…’©íW;}›ÙlÇ·  ¼ÄBä¯XŽü¼%È/(EíÍG–î¼OÉ-Dq‰h£¶Ò×qÔkíc#"""Ї‘½Œ}…ã›–N®áÈÇŠÈËÏGÁúC¸iéË¡Š©"O!·põÌ�½d=Jwƒ×ÒÇfMét\¸JrÛ½ý ÊÝ}¡{~‹wÖþ5rþ¯FSÿxœý¤–޾-žƒ²“ÒsÏ/ëâìFS×0” ÎÒãè£^<Œ+7Jš«ßÇ¥¶DDD”=Ù[^='˰ g–í<ƒ®À‚ž*”º¾Æ@k ^¬½KÇèͨ®¾„þŒh ú;ºñÑÁ“øÊçƒoÖÖƒÁð¨ ÁÁoà½3`èÔv\d¯ Ç‰Üœ%ØÜô`rB¸ãBL-{„–ŠW¸‘Å0²·<?<ÎBä,ÜþµZ˜ì¸èF[Pñ× ãèï P ÎO×;.²×䈋¥¨hy4ùÑqQ¼®ûQ²tox""""²Fö–qñÃJ´De z xßQœpnÀÒŠf _•ÌFtÄÛTÑÓ5qûêç¸èªE•Ó‰ÍÛÿ7ÜÞÞðè ­ûªÔ<­çJu£l5 Ÿ{žÞ\¶ÞÀäT‘ÜPp¬ÀÎów ÙcVo¿ývx="""";`doÁ»pW–bsÝ5ô†§ŠˆaÒb~÷ë8ï³ÿò•ùË_Â_RÅ_’Kí Ðê`PÍL+¸röWøYÁ_…ëÈ/Â/ú ŠòÇúÚv\Òx¬jæ~RK«Ämv\d» |íøôS/'zÑvúZ:Ždfׯ_ǪU«")""""kcdoÊ|íð©·}m8Ýtƒ±— ´¯ÊÊJœ={6’"Ytw(÷pòù!gÁZ8?ï„?¢ôáâžWQ×)¯c”í p÷îÝHŠˆˆˆÈºÙ“-|ñÅxöÙg#)’Ewg@dˆþ¢1ù—jj-IØqAÙîðáÃለˆÈêÙ“-ˆi"â×ÅþþþÈHÑ NÉКª1;ý ÜÛžw\|¡æ+plÿ/°véRì¸ø0ê¾zö«Ž¾ÍŽ‹ì%F`‰ÎÌl'F[pºÙ#{‹ãúÓÄbtœ."W:JïçØ³¶ [î! fŠ œGyÞ±lç9øÔ©#°ã"{±sšè¸ë]Y#{‹)§HLâbtò¥×  Ø×Œw‹òð÷e•pÖÔáç¼|EJv\d'Ž2˜ILºDDDDVÆÈÞâ8‡y&.F'—Úoª†03­àʉ}(þÛ~¬#9þËßü?ÈÏÿ1¯*BRˆQWü¢>MŒ<í¢ŽÔ#"""«`doqb´‡OcGŽ\º;.”{xëü?ÈùÞÁΦoPü¨/{®nZ«wbךg=V5c?!©¤Uâ6;.ìÏåraëÖ­á¿áÿq}‹ÙÄyB}ODÇ®èØê{FDDDdvŒì-$6@çú³Å:"HçÐqcèî ˆ\Udáæ&ô‡§†øáqî€ËÄh‹Ïñª"4â˸(çèíßÿûî¼ä—òiÇÇúõëÃí`ô{ÅÑiDDDdŒì-Dt\D?ýéOñÿðá/ç켘¶|ùrìÞ½;ü‹¢ú^‰÷ŽæN¼—º(÷pòùá‡- ÿCt\¼€}®cp–¬FEË`ø¿2è~­d9b„ú·‰Ñ¢Ã7Ûˆs‚èØ‰=oDoDDDDVÁÈÅBįˆZÁ§º‰�]Ü'EÇ,Ž=öEucÇ…1Ä{©NÉКª¡•úΣòérì>r-×.Áã, íç¯Pð³_M]U$ú±Ñ·=éèÛâµ’ýEwPÆÛ²m:Xç#ÙûoÝ """"3bdo!"øÖ @£7ŒfÓe�ůŠñ:+¢·lüÅUñ^ju‰ÒJÀ‡†÷ÞDZÏ[Ð×ö Þ9ô>¿ª}ßèÛ‚žtômñZÉþĚџõØ-×»í¢èÈÖz?Ô¹DDDd%Œì-$Ù°hÑi‘­£-’ýºÈŽ cˆ÷RÅîv<Ú»ýP0@ß×hóÜ‚/0¹“º_+Y’ølGÖ£·l¾ºH²Î v\‘•0²·˜D£ ²y%ýd\¨Ïâ½âxf¦ûpð§ÿE¿ü:¿ÃXgVþàÿBnáS(ÞPƒú‹­³«š¹ŸÔÒ*q[}­doâ³ýYW7^5qç;s‰ˆˆÈJÙ[L¼aÑÙÜi¡JÔyÁŽ cˆ÷RHÖ0•¿íE¯âØ•PZé{ÛÈùOÿ -CA _tâŸß97뱪û I%­·Õ×JöýY›ø².¾´Ódç…Öì¸ """+ado1bѵØ�”¿,N‹×yÁ/1Æï¥.ãm¨Z_;Ê8†ZàIÇblpuAÁ8ú›^Çvw_äŽÆÓýZɲ¢G°ÓB›8O¨ï‘ØØ™KDDDVÂÈÞbb‡E³Ób6­Î 2†þ÷Ò›5Ï  h sp<y�­ý>´¹œX_°5ÞáÈýŒÇrÏê—rñ¹ŸÒÝyÁŽ """²Fö¤žüe1¾èÎ ñ>‘1Ôº§µiMݧƒ=hkü56ÿrm—ÁççÎâìÙO0Y 3ú±Ñ·­çJu£ì ¦Ê±Ó"5jçÏDDDd%Œì-HÌWf§ErjçWÏ7ŽøÂ¯ƒAO:Ý<!Q:ú6;.æŸÚdÇÍhZÏa—ˆˆˆh®QD+X³Ë&ƒÖóØe³3+ŸÝË ìZ2Ž‹ïQ|Œ(  S¾_Öd¥ã³{YX?ç©ã{EDDD# ƒˆà,z˜ºJZ¥7/YZ5×<YA§º_­×›VéÍK–VéÍK”¶{]nªdï‰VZ¥7/YZ%nÛ½,¬À®e ã¸ø^ÅLj "8Óú"•,­Ò›—,­škž¬ SݯÖkˆM«ôæ%K«ôæ%JÛ=H.7U²÷D+­Ò›—,­·í^V`×2q\|¯ˆˆˆˆâcDaúðý²&+ŸÝË ø9Oß+"""¢øQ„A§>|¿¬ÉJÇg÷²°~ÎSÇ÷Šˆˆˆ(>F‰δ†°ÇK§›'$J•'+èû÷„ètºyB¢tºyB¼´Ýƒôèr‹÷¨¥ÓÍ¥£oÛ½,¬À®e ã¸ø^ÅLj :õáûeMV:>»—…Ìk(}¸u«J$i$Çe×úÊÏ!…Aæ;8SúnãV_0’2ެãbnMV:>»—…È)Î7y1IÅ£ÜwaÓ~Œoå—]ë+?‡DDDdFÁYô0u!•´*n^o3Þiø"É}¯ Éù3ì÷ø#éö’Jž¬ SݯÖkˆM«ôæ%K«ôæ%JÛ=H.7U²÷D+­Ò›—,­·í^V § ºá*ÛŒª†ãp¹\q¶z8K– ×ÉŽ‹”I¡ÂÏ!…ADp¦õE*YZ7Ï׈µ«_Â^§s*(w†n‹m*½§ E?(€“‘Tò´ÇÝ85BEë¾*­¼Di»éÑå¦Jöžh¥Uzó’¥Uâ¶ÝË ä”A¢Ž‹ñ~ùOà=oŽcv]xÀ©"ó<B…ŸC"""2# ƒH Î|(+=€†Yzh;þÊ—- ?·cY%.ôrªˆ¡ÒÔ>IÄ3†û®]S#TŒd÷ ÝJÇg÷²°9eï‹ø(|î7°2ל¼çPÛöPÊh AÆqÉ«¯ó;B…ŸC"""2# ƒH Îâ}Þ…»r5rsÈ[_‹¶±H†±d—´÷+QGºÙ‡’¼eS#TŒd÷ ÝJÇg÷²°‚Œ•ò7kŸC^¨=Ì]ùܾÑH†2ŽKÞ{5¿#Tø9$"""#0¢0Htp¦5„=^:<ÅߎÚõKBÏùCüøçá N†šÑ÷¾-¤›'+èû÷„è´®¼³ÿ'<µFí¸˜1­æø{øiÁ_…Ÿ[ŒPùÍù+©ï7Ŵ݃ôèr‹÷¨¥ÓÍ¥£oÛ½,¬ e ¾AÓΡ/ß‹P¸¹^²Is'ã¸ä½Wó;B…ŸC"""2# ƒDgÑ_ž„Di}y­h>ý6vŠé!Ž'ñôÞq)åǦ—'+èû÷„è´®¼ó¿ /fªšÊŒPù~Î÷ðƒÜ¡2ë±QéDyB¼´Ýƒôèr‹÷¨¥ÓÍ¥£oÛ½,¬@n(ö^ÆÁp'î”T_šêÄ•MÆqe´¾fp„ ?‡DDDdF‘œ¢·õ×XŸ'~Û€êæûÒæoG“u\™ f§G¨,ÆÊÊóR¿ÜØ=H·ÒñÙ½,¬@^ŒÃßá¶p'î ì8yþYëÔ¥L‡ŒãÊT}Íô~‰ˆˆÈŒ( "‚³è_{…TÒªÄyðçF,sˆ)»ðÖ‰‹³{þ·SkaÌÊ‹I«RÉ“tªûÕz ±i•Þ<1B%Ðufr„Ê÷þ><BEýr“ì±*­¼Di»éâø¬´Ñü’S£ð]8€5¢W|ù.«Ö\ÓæøáX#á*‚Œã’__çg„ ?‡DDDdFÁY²/µZiUܼà=üfó ü ´1=¤ìW¿Ÿ}9Tçø×çþçÔU2RÚoH*y²‚Nu¿Z¯!6­Ò—wç÷êÔ•­¿m•”›8/QšA:Ñ4)Ÿ¥m§gtRhm츈6#TØ&‘QDVp¦ôµá´FP>s;†Ã;~n©Ë{J f•Gèp½25BådçÐì•òSºlª~ Ò‰¦ÍïçSE&ÍﶉDDDdF™÷àÌb_Ä¥½_Á{¸à|y¡ý«#Tbt+vôY‘ìσð¡ýSj«Ä(´7QSÿ1Z:¤¯ÿ#㸤½Wó<B…m"…A¢ƒ³dÓ ¢Óéæ ‰ÒFåÉ :Å~ã½!:­'Ïã>‚ªÓhb§Õˆôᎋ-õ—RÞoªiéDÓä}ÄÔ‡Fì\¹8ü37k.Â+cŸúpª™# ƒDgñ¾Ôª¢Ó©çM ùlÞsî 1w:kPñöaœøüJ$?Ýý&ΓtŠýÆ{ Bt:Ý<!nº·9|ÙÔx÷¾-¤šfN4MÖçAé9ƒ-‹plľÃÁÝÒ §-î“hx7J ò°l×gè•Ôw!ã¸2ÑvÌǶ‰DDDdF‘œ‰5_ÃÊ\1G9æ×ÅÜÕ¨tß•xÊ:.Yûov=.¢tÈù<<‚ǹy¥ #Î¥<ÿ—8ZVŒFþc,Ç%·í˜¿*r‹ˆˆˆ²# ƒÈ ΂èiÚ†Å9 Q°~/Ÿp£ÅãÇÓ ÷ɼÿúz,X]Ì^€Ò�²ŽK~0;€¯Ÿºj§F¨ÔŸ¹ŒÎÁ±H¾ Ò‰¦Iù<Œß@ÍÒbÔx¯é£t5 dçE¿òœã’ÙvÌ綉DDDdFÁY¼é*­´*nÞÈU”ý§ÿ„ÕǦ._7ó¾ã¸ôÑXûw›pqh"üŸØýĦU©äÉ :Õýj½†Ø´*å<åþ°¿?þþ÷ÂÏ3c‹ŒP‰½4jJû I–V‹ˆ$}‚8óð$f&îWê‚/’4’Œã’×vÌﶉDDDdFÁY²/µZiU¼¼qo þîï_Á±+‰î{§÷–`çÅþH:ù~…Tòdê~µ^ClZ•ZÞ䕿ü;üí?¾05B¥¾þ·8øÖÞ©*?û͹©*©íwR²4ƒt¢iR>ÊW¨+®ÀÅá$ÆÜؾݡHÒH2ŽKZÛ1Ï#TØ&‘QDVpô8‘ïL~‰º § ¥®îHÊ8²ŽKZ0;rÎÇGi½wj„ÊLãð} eKwOP1ƒt¢ir>c¸ïz{[úãOSüø²¶ ¿h²Î:imÇ<Pa›HDDDF`DaYÁ™r§Å;’ý 6!÷^lw÷EÒÆ‘u\²ö+F¨,}ò ¼c‰¾®|‡®†­S#TŒÄ hš´ÏCð.ÜÕ¿ÆÙ®á˜Ž‰1 v\À‘Ч‘—S„Ê‹>) Ë8.iïÕ<Pa›HDDDF`Daèà,Ùt‚ètÒ<Ïi¸^ªBËÐxÜû*#7Q»nÞùôêT~¼ûÆÞåÉ :Å~ã½!:­'ïj}þ¦¬~êËJl¾š#TV;?ÖÌ‹½-¤šfN4Mêç!ø-<ŸÝÀ@ô÷qÅîv±x±w|>< pÄÅ<Pa›HDDDF`DayÁ™‚ ïSTWŸCW fjC°~Š5!gÙ¸Ø;É0Ž¬ã’µ_»ŽP!²"Ã>Á>ܾÝ'eôD:d|Î¥¶ó8B…m"…AŒ ΔPŒÞ‰Û}Ñ¡ÿõ¶á³ö‡3‚NÅßvqiTïø|=ŒíØ0€¬ SZ0«tMP‰G¡ÒÔÿ>ébN4Ͱσυ’9WI‡ŒÏ¹ô¶cžF¨°M$"""#0¢0ˆÎâMPi¥UÓyÁPŒ^†"çÇ“!ZK–VÍ5OVЩîWë5ĦU©åMŽP)/ÿN7·Nf†„ó¯~6=B¥àMP™~ì¤ØÛzÒ Ò‰¦öy`Ç…>&¡Â6‘ˆˆˆŒÀˆÂ "8Kö¥V+­šÎcÇElZ¥79B¥Ñ}9*OÁ•óGð^çS¿†{éã©*gÏ~25BE{¿“´ò¥¤M3ìóÀŽ }Lô~±M$"""#0¢0ˆqÁÙdÇE‰„K›¦CVÐÉ÷‹Èþ û<°ãBv\‘Í0¢0ˆqÁ;.ôaÇ‘Yöy`Ç…>ì¸ """›aDaèà,Ùt‚èô켫8ë\þ">;o.ûM/OVÐ)öï5ÑéÄyÓï×d:þ}…ètºyB¼4ƒt¢i†}Øq¡;.ˆˆˆÈfQĸàŒ#.ôሠ"³2ìóÀŽ }ØqADDD6È Ægì¸Ð‡DfeØç¡÷$žþ$zÅí©KxzÐÞ퇂 ú¾F›ç|. ­EÆçÜÐ}²ã‚ˆˆˆl†…ADpoú€J+­šÎÅèÛð?Þj ÿ_ñw£¡¾õõ¢Û?úG�îÆÔ?‹@ä’©íw’Þ<YA§º_­×›ViçMv\ˆ«°$»olZ¥7/QšA:Ñ49Ÿ‡>¸ËW ¤ê:¿ÃXg6ä-@náS(ÞPÏP¨”LÆqºOv\‘Í0¢0ˆÎ’}©ÕJ«âæ ¹ñÓ¿^‰_üƒ#èlØ„äü�ùÿu96T_Å’æ~CRÉ“tªûÕz ±i•v;.ˆÌJÊçaüjJ~ ïX¨ñSzàÞör-CA _t⥦o#w”GÆqºÏè*â’ѽ×Ñxð�ªê[à Š÷MŒZù2##TØ&‘QDVp6îý5Jjn`,t[é?m‹âñÊf )ý¸¸«Mýr]”u\Æíwr„Êó'ïGÒó‹A:Ñ4)Ÿ‡ñ6T­¯ÇeC­ð¤c16¸ºB_ÏÇÑßô:¶»û"w”GÆqIk;”;hX›ÞNÎ",«¼„‡7k°4ǼÐûءݓ„m"…Adgãmïb}ÝWP”~´:WÁ±`\÷ÇBÁè4½´î!¹¿˜É:.yÁì(zÛ>ÂAg5ê[î#ú˜nÓîõMM­‘‰A:Ñ49Ÿ?nÖ<ƒ‚¢U(ÌuÀñä´öûÐærb}ÁÔx‡#÷“GÆqIk;Ä•¥OÁ逸ƒS/ÿµ_~‹îö+ø¤ê¼,¹£‡m"…A¢ƒ³dÓ ¢ÓIóšP³êÇ(Z]ˆïçüþ~ó!ô÷\‡Ë¹ûŸ_Á±+iî7Å<YA§Øo¼× D§õäyNïÅûžøe1´9ŠðóßžÆ‡Û Cé%X_çEs‚ÇF§å ñÒ Ò‰¦Iû<{ÐÖøk8«Ž Å7 ±öÏà|wþŒþ ¯í Ëµû[ú!ún•ûxqO3F0ŽGîÝxVòÂÆl‰ˆˆÈŒ( œÅûR«ŠN§’§ÎOþeÅ!œ½r-£âïNžü$üE\¥õXUºy²‚N±ßx¯AˆNëÉk=¶Wð<þ ]§°aÕkøÃg§ÑÞzUÏìÆÁ‹­qN”'ÄK3H'š–ÙσXïæ5TF¾ Ë$㸤½WÊC´V¯Ãâü"¬+)Aɺ"äç¢Xüu< §g(rG9Ø&‘Q$óÁY7\[ Eò ú²ŽKÚû¼×öw#ïËî»vaOË`(xï…{Û6¸|bòˆ< Ò‰¦Éù<øÑѰËráýÏÚòžÅÁ–{R§†‰ç1šŒ}†…§Šü…ÅëP":.¦¶MØyôü’{y¤eFÁY¼_áUZiUܼÀ-ì}ú |_ä³6±¸Ú{8tößôï7$•<ñ<2¨ûÕz ±iU*yÊÀeT¯)Àß,ý ŠŠŠ°®¨�y…«ñß—þ ¾÷×›áŒÒµ«J–—(-ëý"²")Ÿ‡ ÎÜÅ(*Û §Óµ½%O†þ_ºýê=¥¼q\òÚŽq 4×¢úR¯ô‘(ZØ&‘QDgɾÔj¥Uñò‚'¾ÿýcí¿”Mèeee¡m#J_…²7BéÍ{PÿÙÕðý…Tö+¤’'+èT÷«õbÓªTòƽ5Xš[ˆ(* w\¨¿.­Þ„ÿ}ìÂTà®õXU²¼DiéDÓä|ÐêÜŠƒ³áSEvÀéñGÒòÈ8.ym‡çŽ^_:{¦‡¸tôz%÷f°M$"""#0¢0ˆ´àÌÎïÃ;]vÃUZܙҎKÚûÕÓ€ÿ7g.ÄL¡ºŒ£ç|–œûNdUÒ>Áܺ;¢BA°¯ wýr§Ï 2ŽK^Û:W”¨—CÙÑÐõ]ä~rˆç!"""š+F‘œ…‚ñÞ¯pûalÅ(ú¾¹oÙùÉÒÞ/Ÿ %" רkÐÅ_‰2FÎça~G2ŽK^Û!:¹× ¬bßÔ¨=§s7ÊŠ–  ä5iŒÜO¶‰DDDdF‰Î’M'ˆN'Í;ÿ½4ùËâŒû]ÆÿþÕÙétHtþŒû†¤›'+èû÷„è´®¼³û±zéTDO«ù—5(Ê[Š’ 8r‰W!Ê9Ÿ‡ùA ˆç2šŒ}Nz„[^f]$vä*œË_@CçHärÈ;."""Ê&Œ( œÅûR«ŠN'Í;ëŒ;‚à{ÿm/N{ÒÜoŠyâydû÷„è´®¼KáØ™Ë‘”šïÁˆçM,ßЀWÒÜoŠiYï‘Éù<ÌïAÆqe¶í˜ÀÐÅ×°8çq”»{"ÿ“ƒm"…A¤g¾F”½85‚ ¼U¼85‚ Í?ëw4CÉ:®Ì³qqÇRää½wìÚcN4MÎça~G2ŽK^ÛgjMðÿêÓ爈ˆÈQDZpæÿÞ»£‘„J™AÐ9kÑNcÉ:.iïWï…©©5Ó¿þ56¾ýeÌÿÇ hZæ>™A È8.yïç$"""ëcDaœÅ›> ÒJ«ôå}Š÷Ÿû»©ú«/OVЩîWë5ĦU)å%XœSL­QçÔ|lD²¼Diñ<D4IÎça÷ºûgwB¿ÁÙ£W1 »w2DÆqÉk;¸8'Y# ƒˆà,Ù—Z­´*n^à>v_™•wåã÷pôr_8xûعæÉ :Õýj½†Ø´*¥¼ÈÔš‹r†6ujÍÒüŠžÛ;5µFó±Éò¥¤M“óyèFãÎ >î‚˽FŦwà­b}žQóA+ú$tdÈ8.ymç$"""ëcDaiÁ™ï$vî¨ÅñzhûýlÚáSéçƒßàOáS!d—´÷˦Skˆ¬HÎç!ÁÔ‡œ|”»ûB÷ùMe!gÁKhê7~]ñ\F“±Ïø¸8'Y # ƒH ÎL}ÈY¸î¡  ¿ e r° ¬ ý‘‡E< ²ö«‹sÍ9Ÿ‡n|tð$¾òùà›µõ`0 Æ(~ï'd(Ç%¯í½½×Ñxð�ªê[à *¡ùÑí¹€ó—¿_n_.ÛD"""2# ƒDgɦD§“æ}]ÞpP~öìÙð¦égÏ}Ž–ð}Ç0xçKœø|zJIô~„è´ž<YA§Øo¼× D§ÓÍÔt°ï+´wûgäGßRÍ⥤M“óy¸‡^Áð¬/ÜqéèôJþ".È8.im‡r kÕ*‹°¬òÞ¬ÁÒòÖ×£#ÀQhDDDd~Œ( "-8ëù G/i,D7tGÏù ŸKÖqÉ fGÑÛö:«Qßr?ük«âïF»×Éñyƒt¢ir>‰®’±u±SÅŒ'žËh2ö6~5KŸ‚Ó3�%p§^þj¿üÝíWðIÕ x9<µFiÇEDDDY……A¤g ¦Š8žªCç¬׌%žGYûUº°ÖyE¨lîÂÍšU¡ô¬¯ó"¹Ÿ,²Ž‹ÈŠä|ºÑX^†×§®1¹í++K÷ AòU2Ç%¯í Ëµû[&;À•ûxqO3F0ŽGîÝxÖÕ=y7IØ&‘QDgñ¦¨´Òª¸y¾ðÓÕ?›¾BFh++{?]þ_QZñaø*q2×<YA§º_­×›V¥’7î­ÁÒePé šOWáå‡ðe~÷6~¹bÓäš ‘û«ÔǪ’å%J3H'š&çóç*J·W£Yò:6‚Œã’Öv(ÑZ½‹ó‹°®¤%늟Wˆbñ×ñ$œž¡Èå`›HDDDF`Daœ%ûR«•VÅÍócg.ÏÊó4½‰í{/a@Is¿!©äÉ :Õýj½†Ø´*¥¼à¸¶¿‹C[Cé+¸ïÚ…=-ƒ¡Ûçqpýz¸|“Kõi>6"Y^¢4ƒt¢ir>>|Ò虵ƅøeËPzò~ä?òÈ8.imGxªÈPX¼%¢ãbjÛ„GopqN"""²F‘œõ^Bã嘵,&¸÷G”-z'{­y• YûU.£zMò‹žçëŠ W¸:ô7ŽÇœðŒÊÒ¤M“óyH´ÆÅS¨j“;‚@Ïe4ûœ4ŽæZT_ê½&RpƒÃ¼Ò™# ƒH έqñd5ÚF¬ùE\Ö~ÃSEr Q<ã—ÅÐVº¿»ÄKÿe’œÏC77—âÕ}3׸pV©¶)—?%㸠ÝçØm4lxËœ—áük–àCܨÛjOÜ{‚m"…A¢ƒ³dÓ ¢ÓIóξ‰Í%Û±/¼¶EÙÔZUµ§qäüì)$3k@ž¬ Sì7Þk¢ÓÉò®œØ‹ ‹WÁÙ:J»ñÛò¸™ç®Þ78ІºÍQ5õýÆË⥤M“óyˆ³ÆEÉ8.C÷Ùß„²,Þq³ÆŸûÑá®EyÑâÐsÂÉŽ """²�F‰Îâ}©UE§“æ]úÞ»“—÷Kt_!:mTž¬ Sì7Þk¢Ó‰óZñÙ;ÿŒ9K±ãâØû*¸úùppçzå:“ëdÇQùyPúZñAMZ|¡öP…X[„¿ï[ôù31Öb’ŒÏ¹¡ûTÑVý4žt6c f6£ÃÂÜ¢Q±£5ì¸ """ `Dacƒ³ ú<¢¦¾¾PЩ†1<|úÑç{¿š–LVÐiä~¿Õ+‹álé W쀻vÛd‡EÎb•íÂŽÒ÷à‘ü݆A:Ñ4Ã>JÜÛ–"¯x ^y~ vl] GÞs¨½ÞŽó•«‘zžÇO°íÄWÒ/y,Èøœ¾Oå:NÀæçw¢¦î¨‹m¨uw`PœCÐýPn£È6‘ˆˆˆŒÀˆÂ "8‹÷+¼J+­ŠÎSúÏcýÿ#Š·–ãùÍÛQ²ôûøÁ?¾†ë_žEåJ|æà{ÏâDçpøþ©îWЛ'+èT÷«õbÓª„y—\xkó?ãù¦K¿ÿ½ÐsüEåµpwôãê5šÏœÁÃHOÊûÕÈK”fN4ͰÏÃå ‹QÛ5ß aͱ¨üœ®ø òŠ_ƯêŽÁuüömØ‚úÎÉj2ÉøœKk;‚èl>çóË‘·l7Ît>ÊÈ: *¶‰DDDdFÁY²/µZiÕtÞD(Fߎ÷Ÿw¢c"£w7`yÎßâ§ûÞ@Åãù(ÞVÝb!ºÝ/`ó 3tŸÔö;Iož¬ SݯÖkˆM«RÉ ~æãûñ? þ# ~VÎÈðñT«J–—(Í hšaŸ±Hq®srÄÔxª–8ët£å@5.F]Uév¡ÒÕIÉ#ãs.¿íÃ`g3\Õ¯ ,tilí‚àë©©ˆ²°M$"""#0¢0ˆqÁY0£—†‚rOøW±ñ¶*, ¨µ¸q â"&ÇXcèn¨†ËgÍa¾ÒƒÙð¯Œ.ToÛ‚mÕhíÄÀ­[¸+yE?éDÓ û<ˆ?Št\=pæ.ÄòÚ?áVí«pž÷¢ÛçCwG3Žï܈—Ý}“‘HÆç<sm‡‚ ¿ ­ÕØ\´Š‹s‘%0¢0ˆqÁÙ䈋E:.‚'rsŠQ{ëO¨}á�ÎwtÁçëBGóQìü§×à’ûM\VЙ¹`6×U4VoAQ~ä‹D Ò‰¦öyk\¼\ކ®ï"¹(quC¸„Êe‹ÂÏÞíš1CŸóùh;”/ÑÎDDDdŒ( œ%›NÖÌûì ^~ö(N{®áj}rsJáòâ³ß–¡à{‘�=´ýÕsïã‹ØÇFÒšûM#OVÐ)öï5Ñétó„éô8nÜÄ™ÖÔ›(Oˆ—–õ~Y‘qŸAßyìßó>?QeާQÛ12ùÿÁ¯ÑÒôG4žmÄ[ëÞ’Þ9)ÈøœÛµí`›HDDDF`Daèà,Þ—ZUtZ;¯¾óïâ…Šwqà_–±ªcJèÿWBAûa45þgO¾‰ÿ^V«³›h¿úódb¿ñ^ƒN7OH”N7Oˆ—fN4ÍØÏÃäÕ‚.žügÛz4˜ÆË7Ñ— .ÉøœÛµí`›HDDDF`Daン1 v\ÂÉÆOÐÖ«1”7ð .·÷†By¹d Ò‰ìŸóÔñ½""""Š…AtêÃ÷‹Èþø9Oß+"""¢øQDgñ¦¨´Ò*½yÉÒª¹æÉ :Õýj½†Ø´Jo^²´Jo^¢4ƒt¢ivý<È8.¾WDDDDñ1¢0ˆÎ’}©ÕJ«ôæ%K«æš'+èT÷«õbÓ*½yÉÒ*½y‰Ò Ò‰¦Ùõó ã¸ø^%¦ƒÜ&""¢ìÃoYaЩ߯Dƒ ÑÉúø9Oß«‚=¸è<”‘+Æ‘9Ù3Rš :õáû‚`ÿ8ß»¦qÕ"káç<u|¯bM Ðw ޼õ ‘“ëdÇQ³g¤4¢ƒ³dÓ ¢Óéæ ‰ÒFåÉ ¦Å~ã½!:nž(nž/öû¥ÐçýGömD#¹N;.ÈòdµóMÆqñ½ŠPFàk?‡Ã¯¯·…99 QP² ¯–¾ÇŽ ""¢,fÏHi0èÔ‡ï×$%àCûÙÃx½ä 8BÍq<’W·¡´†#.Èúø9Oß+`¢û vLµ…ë÷ÁoŠ‚À½{x(ûúßDDDdZöŒ”æƒN}ø~¢»©Åù Ãqlľ#ŸÃÛ€‚aÜëîý%²6Q·íºMë9ì²¥,؃¶SïáÕâŸ`M¥ ž®!vàQ˜=¿=έ`Í.› ZÏc—-5 ‚½m8uð®Cec+ºü щ(s®_¿Ž·ß~xöÙgqöìYô÷÷Grç‘:uÎù lØìÄ‘ íh;þ1Ú¹f1QÖbÇe 5H "Hÿâ‹/ð—¿ü%’;”@¼ŽÀ¹¹›bhôU?éå¥ÿˆ(cbÛGщ1ÿí£‚ ¿ žS¿BYÑ®qADD”ÅØqAYGã¢Ó¢²²2¤‹¿æèÄÂßåÁ©šÍ(ââœD4æ·}EoÛG8è¬F}Ëýp¨ø»Ñî½»\よˆ(›±ã‚²šÆÅ/‹âF1\Züâ(~yÌ1Ÿ»ñ×pVA‹o4ôqø»½ðúzq—k\Ñ<S;1Dû¨vbÈl•®¬ _I$´9ŠPÙÜ…›5«Bé%X_çE r?"""Ê>ì¸ Šs»E'ƪU«¦:1îÞ½É5ÚwèjØ8¹z~hs,Û‡æ‡m¨Yº�9y¥¨ëðGîGD4ÿÔöQf'︷K—€ÇD ë^Þx_öw¡½õ ªžÙ ÷ÐDäžDDD”mØqA¤AtX>|8܉!6qÛØNŒxkVc™ó üÊ0ºN½†µ7Ðß}­ŸTá™—ÝŠÜ“ˆÈLD'†Ú>ŠN ÃÚÇึ¿‹–!±ÂÏî»vaOË  ô½m\>N #""ÊVì¸ J¢££#ü뢱+ï+v5bûþf ‰9!J\/@ˈå‘ÛžuÁ7yG""Ó2²“W¸Œê5È/z%%%XWT€¼ÂÕ¡¿ùp<æ„g”興ˆ²;.ˆt0îÊ$ãh}k h]I(HEù¡°xmèï"<æl…Xõ‚ˆÈ*Ôö1ÝNÞðT‘ÜB—ˆ61j+}G½¸îQcÇQæ¾ò¾˜*òr WÏ ÐKÖ£tç1xý¼*YWl'¯èÄHÚ>*}h®~—ØþÑLì¸ š#Œ§³h2ÐŒêêKàψDdSñ:y5 ûa²u,îþ‚l8‰ˆˆ² ;.ˆ ¤uem¡àûÞ=<L{ãîpI:"²:µCtòjòÄε8îrÁw;ŽßWlÅ~ϣȃˆˆˆ(°ã‚HuÑ:mAø÷bÇácyôv›Þg„¿.‘Íù\(É™¼Dt²ma9¯¼DDD”MØqA4/‚¡½T3 Ÿ½å£ÜÝy‘MùšpÐå…ÏçKº= p±N""¢,ÂŽ ¢y„ï£Cp}uO3(Ÿ¹õ`00y‘M)ãŽkuGŒ¢ëÄ´sÍN""¢¬ÅŽ ¢y¢ƒÐŒÃƒwpâ¤W;ˆÈ®”GðÝ…âü…³Gžå:ááb?DDDY‹DóDñßÀÑk‘ïˆ ÐC[®ÓÃ9‰(«Œ{k°ÔñJ^Ý §Ó9s{Çn<#""ÊZì¸ š#ðÖ¬‚£ ¯î‹ ÐCÛ;î.0F'¢l2ÑY‡§Ö6 ›‹WQ v\Í‹QtÖ=‹µ ßp9""Ay„›‡ªqôë‘È?Tt?•Òׯ_Ü"""";aÇÑ<Qüí8´×…¯Çbº.‚·q¼ñfÒ5.Ξ=‹þþþHŠˆÈÚ&:j±<fÚÜÔ–âÏ>û, ðöÛo³ƒˆˆÈFØqA4/è¨-ÖÐC[*k\TVV†ï»uëV|ñÅøË_þÉ!"² 1/jŸ^‡részÖ¸º‡ƪU«Â›¸}÷îÝH.Y;.ˆæ…‚±Žßâé5[±/6@m©®q!:+D§…Ú‰!þŠ4‘õÑÛîÅçω‹ØNŒtGªqÑüaÇÑ|QzÐÞþ­ak\ˆ`\L1b¨´ö9‚ƒˆ2o ƒÐPó&œÎ7QSßoÄvR´‡¢]í£h'õL·Ãì&""šì¸ šOÁ~t\ø5á‘5¨oú|¹_ODã.—+ü £Òõ•Á½ìÙyAD™3‚Îã[P¾DôBä¯XŽü¼%È/(EíÍG†.d¬vbˆÎÑÖ%›n§Þ—DDDóƒDóeì+ß´ ;ò±bEòòóQ°þnúSX>?Eé •j@ÏÎ "Ê¥ç$ž_DzÝhê†ôÀYzÝ—Qýâat×,N‰7Ý.¶ÝSÛDv^Ív\Í‹ zN–aAÎ",Ûy] =U(u}Ö¼X{+éUEÒ‘ÊPiuH´º±ó‚ˆ2!èq"7g 67=˜]î¸pÁ‡Gh©x._ —™µC´y¢ím¥hcÛDucçQæ°ã‚h^øáq"gáV4õOvQLv\t£-¨xNër‰`\ëÊ$ÑC¢ÕD$Û䈋¥¨hy4ùÑqQ¼®ûQ²t/ZFŒœ,’XôšAÿá?ü‡Ym¢º±ó‚ˆˆ(3ØqA4/"#.~X‰–ÑÉ`<è9€â}Gq¹K+š1þ¯|ꯌj'Æ÷¿ÿýYÁ¹ØD�OD$Ï(|î}xzs=Úz“SErCícvž¿›ôÑ2ˆöQ«=ŒÞx©U"""ùØqA4_‚wá®,Åæºkè OäÅüî×qÞ7¹Sf}üñÇš¹º‰ÑDDòL àkǧŸz18Ñ‹¶ÓçÐÒ90/‚èÔÕj £71õŽDDDr±ã‚h>)#ðµ_À§Þ~LôµátÓetŽE23Ou‘hcçÉ ø»ÑîñÀã¹n±@±@ßívx¼>27Kd†TÚD±±ó‚ˆˆH.v\Í‹qø»o„ôPÞÞ ((W½¸Ýv^߈¡—ýKU*C¢ÕDd¸!7ÊÛ€ªó Ž ³aòròP¸z 6T_ÅPš £Vfõˆˆ(ÛðìG4/&B1ú+x¬¤ç;ú»† K“[ˆÕÅ›PíéO»óB+ȵòFDÙaÜûk”ÔÜ€s¦ôŸÇ¶Å ñxe3†”~\ÜU1µ±^vkGØ.Q6âÙh^ŒÀ[SŽïpèö8úݯbqÎrT¶ôC¾ˆ]/5aæEJSg§ –:Qöo{ë뾂¢ô£Õ¹ Ž›àº?(ÐôÒ¸‡&"÷Ô‡DDDÖdzѼF[Õ˨»3 eè2œO.‚ .ÜSFú›ðÒv7†"÷Ô‹DdIvÔ¬ú1ŠV"7gžt^FÏu¸œQ°ü ¼céCcÇ‘õñìG4/n¾‡U+°º09ŽUp¶úÐÓÖçúB, —N‡j¯]»Þ„èÛ‚žtºyB¢tªy Љ²‰‚`ïu4<€ªúø‚ ”À ø|ð=L{Nv\YÏ~Dóf½má ³õ-÷—ì/¤? Ìi‹x‚žtºyB¢tªy Љh®ØqADDd}<ûÙŒ‚ZèD4Wì¸ ""²>žýˆl†DDÓØqADDd}<ûÙLtPo:†JZ¥7/YZ•,:Í;.ˆˆˆ¬g?"›aÇÑ4v\YÏ~D6c§ –:Í;.ˆˆˆ¬g?"›aÇÑ4v\YÏ~D6#‚Úè)Ñ·=étó„DéTó Ñ\±ã‚ˆˆÈúxö#²;µ Љh®ØqADDd}<ûÙ ;.ˆˆ¦±ã‚ˆˆÈúxö#²™è 6Þt !•´Jo^²´*Yt"š+v\YÏ~D6ÃŽ "¢iì¸ ""²>žýˆlÆNA-t"š+v\YÏ~D6ÃŽ "¢iì¸ ""²>žýˆlFµÑS0¢o zÒéæ ‰Ò©æ1@'¢¹bÇ‘õñìGd3v j Ñ\±ã‚ˆˆÈúxö#²v\McÇ‘õñìGd3ÑAm¼éB*i•Þ¼diU²<èD4WoG”!ܹtgÿ_`"òOã°]$"¢lij‘Íd¼ãâÒ Ô¾õ&Îzî! hß7îc“ä1@'¢¹Êt;2î­ÁÒr W`妣è 5Œb»HDDÙˆg?"›ÉlP;oͪÐs桰蟰©á6Æ"9F`€NDs%¥ |¦÷~‹¦ÎáÈ?¢(~t{¿Á`0ˆþ¦}ØÛ2É0ÛE""ÊF<ûÙŒñA­‚@ç9¼÷Þ9tŠ!1ÿ]xï ¨<@Ó+Õh1î×EèD4W2Ú‘ÉQ °´æÚïë[v`¿ë:zƒÑퟂá‹{ð¬«;’6ÛE""ÊF<ûÙŒj£§`Dßô¤'oÿ[dTÅ*lÿÝïà,݈-;ªà<ò ®ÌxÜgxÿ¹ pù‚‘t²ý&Ïc€NDs%¥QFà»Õ1½†…2„Γ¯aåÊm¨={w|>t{›à,^‰ ޏ ""š3žýˆlÆøŽ‹kP>ܺåC³šö߯[Ï-ǺgÛ:áóuáØ¯¶àþã S#.¢÷#D§SÍc€NDs•¹vd¾ °&Ï~Μò64p """ðìGd3 jƒ÷pÁù òºؖ`׸ "“Él;2€¯ŸžlÄÉO½è›1uÄl‰ˆ(ñìGd3ÑAm¼Q B*iUÜ<eg~·œUøÔÛ 1ID뾚 I–Ç�ˆæÊníÛE""ÊF<ûÙLF;.B´ò’¥UÉò Ñ\±ã‚ˆˆÈúxö#²;µ Љh®ØqADDd}<ûÙ ;.ˆˆ¦±ã‚ˆˆÈúxö#²ÔFOÁˆ¾-èI§›'$J§šÇ�ˆæŠDDDÖdz‘Ͱよh;.ˆˆˆ¬g?"›±SPË�ˆæŠDDDÖdz‘Ͱよh;.ˆˆˆ¬g?"›‰jãMÇRI«ôæ%K«’å1@'¢¹bÇ‘õñìGd3ì¸ "šÆŽ """ëãÙÈfìÔ2@'¢¹bÇ‘õñìGd3ì¸ "šÆŽ """ëãÙÈfDP=#ú¶ 'nž(jt"š+v\YÏ~D6c§ –:Í;.ˆˆˆ¬g?"›aÇÑ4v\YÏ~D6ÔÆ›Ž!¤’VéÍK–V%Ëc€NDsÅŽ """ëãÙÈfØqAD4DDDÖdz‘ÍØ)¨e€NDsÅŽ """ëãÙÈfØqAD4DDDÖdz‘͈ 6z FômAO:Ý<!Q:Õ<èD4Wì¸ ""²>žýˆl†DDÓØqADDd}<ûÙŒ‚ZèD4Wì¸ ""²>žýˆl&:¨7ªAH%­Ò›—,­J–Ç�ˆæJ´#vÛˆˆˆ² Ï~D6£äZy#""""¢ìÆoDDDDDDDdZì¸ """""""ÓbÇ™;.ˆˆˆˆˆˆˆÈ´ØqADDDDDDD¦ÅŽ """""""2-v\‘i±ã‚ˆˆˆˆˆˆˆL‹DDDDDDDdRÀÿ`~`Ÿ*����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7x3.png�������������������������������������������0000664�0000000�0000000�00000243306�15030617045�0022657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ý��å���çŽF���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìý}lW¾/zûß‘¬-Ez¤£<æŒäÇçp¶F'Oĵž›9h î¾äL¶µCžÍÃE$\‰È69“\“dB 'ÁpCs‡mg2&™øN`;ƒ™ÐÇ“Cp2@¶MâÎÆñ&&lh‚1VØ¡M}Ÿþuw™v»»ú­VuÕªïG*ÙË«ÛÝkÕªUõ«ZµªDDDDDDD¤ƒn"""""""Et) ›ˆˆˆˆˆˆHÝDDDDDDDŠ0è&""""""R„A7‘" º‰ˆˆˆˆˆˆaÐMDDDDDD¤ƒn"""""""Et) ›ˆˆˆˆˆˆHÝDš¨¨¨àÂ… .\¸páÂ…‹ƒK>ti"ßžˆˆˆˆˆJÇ ›Ègt9‡A7‘Ï0è&""""rƒn"ŸaÐMDDDDäÝD>à›ˆˆˆˆÈ9 º‰|†A7‘stù ƒn"""""ç0è&òÝDDDDDÎaÐMä3 º‰ˆˆˆˆœÃ ›Ègt9‡A7‘Ï0è&""""rƒn"ŸaÐMDDDDäÝD>à›ˆˆˆˆÈ9 º‰|†A7‘stù ƒn"""""ç0è&òÝDDDDDÎaÐMä3 º‰ˆˆˆˆœÃ ›Ègt9‡A7‘Ï0è&"Ò‡1v§Ç¢É¹ƒn"ŸaÐMDä£=踞Lds ƒ[°3I¦‰ˆÈtù ƒn""w¢±a:‚A³-ûv ®z1 º‰ˆ\A7‘Ï0è&"ò�« ûÀëX¿x^¼?¯\Ü„££^NDäf º‰|†A7‘d^=î¦e¨ª¨Du}ú¯ÞJf‘[1è&òÝDDÞdDÐVo¬Ÿ›Ž 5’9DDäf º‰|†A7‘×ÜÆÔðGØ,CÊ+—`]Ç)Doyƒn"ŸaÐMDä%71Ú÷ê«+QQ½-=Á;¸‰ˆ¼…A7‘Ï0è&"òㆂÏcq¥L˜¶ÏNbÎî¼-FDDåÄ ›Ègty@ôŽAu¬Ï–!å¿þÝÜỸï`Ϧ_ð9ÝDD.Ç ›Ègt¹Ÿ1ÖæÙé ƒn""/`ÐMä3 º‰ˆ4ÂáåDD®Ç ›ÈgtyÉmL…ðI° Í�V´tg'ø|n""¯`ÐMä3 º‰ˆ<B&Rë|VUÆûîYKÕ24uŸçLæDDïñ7Ò‰4‘ïFODDåÅå® ˜_q7jê·cÏ{Ýè … õ û`Þ|¹5w=€-G/ÍÑœˆˆ\…A7‘Ï0è&"ò€_ pß}hhD$cT=È·ï qáK86y;ù7""r#ÝD>à›ˆÈý¦[±pÉn Þ²ºŽýg w<‹ÍÇÆ“i""r#ÝD>à›ˆÈý¢¡�B9ïÙŽ†šÑI¦ˆˆÈtù ƒn""÷3ÎíÅòMÇ`ý0°Û˜ìÞŽÝcÉ4¹ƒn"ŸaÐMDäÆ0‚Ï4£wr:ù‡¹Œ_¡mÕ&tg •ƒn"ŸaÐMDä¢áOÐÒrÃSi¥EÇ1tôwغâT,~ÇFo&3ˆˆÈtù ƒn""¯ˆÞ£ýøtàʬǂ‘ ÈãÃÏ!¾Œ‰ô œˆˆ\…A7‘Ï0è&""""rƒn"ŸaÐMDDDDäÝD>à›ˆˆˆˆÈ9 º‰|†A7‘stù ƒn"""""ç0è&òÝDDDDDÎaÐMä3 º‰ˆˆˆˆœÃ ›Ègt9‡A7‘Ï0è&""""rƒn"ŸaÐMDDDDäÝD>à›ˆˆˆˆÈ9 º‰|†A7‘stù ƒn"""""ç0è&òÝDDDDDÎaÐMä3 º‰ˆˆˆˆœÃ ›Ègt9‡A7‘Ï0è&""""rƒn"ŸaÐMDDDDäÝD>à›ˆˆˆˆÈ9 º‰|F6z.\¸páÂ… .\¸8·äƒA7ùÎÒ¥K3všéË¡C‡’ï ·‘õCî ñì³Ïb||<ù"¢;^}õUî_©d^;àQ ùÎo~ó›YÁuúRSSƒÏ>û,ùjr#YOäNt›ÛÑÉ“'“%"J“rCCCÉQq¼vÀ£"ÒÞŸþô§øÁÿž={°fÍš™à:Ó"Âùóç“ï$·’uEîdÝæ"Û‘‰A7ÙÁkÇ<j!"-I -W«›ššâ³Û ÈŽ^òRƒs‘×H¹Ÿ¬/r§ô Ûܶx2‹ˆƒn²ƒ×ŽxÔBDÚÈhË}c™î-•~jP ïaÀí^ÛÙúI¦ [Þ¶AD‚A7ÙAö+^£"ò´ô@[væÙíT©‡¿z×v¶~’-è6™D‰'¸ˆü‹A7ÙAö'^£"òœô@[~Jºyê*ïå•7oòÚÎÖOrݲÈ("ò'ÝdÙ—x ZˆÈ3d2´RítÜé{—×v¶~btËsÉç•n"ÿbÐMv}Š—ð¨…ˆ\MÎe¸¸<[[ùìäµ­Ÿd ºå6n»DÄ ›ì û/áQ ¹’ìåÞOéTåª6Ÿ÷K©¼¶³õ“ô û•W^‰ÿÌ5Ïùƒn²ƒ×ŽxÔBD®!WÁdȸ\Ñ6‡¡ò@2ñÚÎÖOÌ [Nš™Û¯ü. ƒn²ƒn"¢ɤfr@.¶ìŒ9¹å ۽ä`:ýd™¤eñ$1è&;0è&"Ê“ —¯Ûr¿'È)_ º½GN¬ññ|D$£ÙtS©tå`!—¥ÔÈÉŸt{Œh‘lDäoì¿É º‰ˆ²H¶‰ŠÅƒ6o’çssÛ'ò7ößdÝDD)ä*¶L¬dÞ¯ÍYÈÉ<hó& ¸%ð&""*ƒn"¢˜ô`›÷o‘t{—ô 2Ôœˆˆ¨X º‰È×d24™0I:CùɃkRA·wÉdj||‘Sêz­�­o£+tSF2“¨H º‰È—ÒƒmÎDN*1èö.édýqE"ý‘´Õßßæï,ó°xóa„£Œ¼©x^;àQ •$u9ƒmrŠ×v¶4›ÜrrèСdŠˆôôg w<ŠÊêÕh>2ˆ±©Û±¿ÝÆÔØ޶þì=KùZˆ¨hrÐlÞ³Í`›œÄ ÛÛdBEyŠéì:ú›—béÞo0çšöÍ^l},ˆp2I¤;µQÁÌGÉ,Äœ ÊA·÷IÂþƒHg¦†ÞÆÓ;{0™uG'1ÜÕ„Gš¿Äø®àøþ£åhsÊê&FûßÅî@ Ú{/"û‹ÁÀ`Ø3ó𨅈ò&ÈrU›ÏÙ¦rcÐí}r[JSSS2EDú™ÂPÛòxs©\…½go&ßG4›1Ü••f[©ESÏ0¾j]Kß‹ú½ƒ±–æ~<j!¢œdè¸Û2”\”‰ˆJ%óAÈoM!Ò•[C¿ÅÃ+žÅ™¹ÜriFGÿDò}D³M¶báâ]E¢˜~Ï=ú¾Æ@ßGh~ä%tOºv�ÝD”•›3’K°ÍÙ†ÉuŒiD§9&Ñ«äJ7'T#Ò˜qßϽ§›¨Ñsn| ½“Ó±Ä-\ nÁ¶Þ‰XûE÷† †eÀ¹»1è&¢ŒÌIÒ8#9¹×-Œ{¯‡"É4yܦ"sC‘Ž L]¸€+s"îØßÏÿ.ñ‘a”'ãê ´¬¨Á‚Ú‡QWW‡Uµ5¨^´,ös*ï tÓým‰A7Írþüù™û¶9ɹ‘1uƒG÷aGýOQY±Ýž%£gääOìé(ŠpçvlÚóN|´Üå�~·õYì ]‹¿ÊëÃÛ­¿GhÌýW+©<âÃË«ay,à– {fi؂߆.{b$ƒn"Š3Ÿ·m%'r—Û˜ àО—QWsw¼VÖÔá…Ö£•A·§Éh1'ÒQ,è6ÄûëLËÝë»1‰iŒw=ƒ»*îAc×÷É÷¥1ÆÐÓò&Ž_•áå©F|jWrع»1è&¢øm¹²Íçm“+ÝF×–•XŸ¹ônÔÔ¿‚}GOclê60u #WxuÄËä™ÝbN¤£XÐýî[~sápxÎrib*q…2zç¿Ã‡›S6S§Ñ±îg¨Êpò¦¢¢Õõ¯£7|ÃÕW¼tù˜\Ý–‰Œdx'Fî%Ïçü�»_x‹VlCghœi…C̉t4Ëvâøõô™¥ocòøpx”'L)?ÑP�UU¢q뎴YïŸGÝ}KÑøŠü¾¡9WÂ݃A7‘O¥N”ÆYÉÉncjì4Žî `Ýê§Ø÷G Æ‚ñƒדùäUÒíÙ³'™""=X /ÿ1Ú{&Ö«å!rGßÄà­ôî#64#äó7 º‰|†¥‘¢“½ÖÆÕœHM2Ä\ú$"Ò‰L¤¶u/lŸ}urdzXñàZlíè{oÊèè783çv²?áü¿žCăßtùHêDi¼ºMZà=ÝÚ‘7rRˆtq‘Ó§q~Îåì[¸Ø¹ Û{Æ<1ë4¹'R#"‘{%åê¶LVăZò9Ã}»w¡¹½a¹ŸÛˆ`dàk„e25Ò‡˜éf£€é÷t×ñoûŸÀ¼†ƒMþ‰È'R#"·“a›rIfyu›<É8‡Ž•UÉë<,n:Ž+_µba|GÛŽ¡)^+Ñœäs"XÝÓ}î |ÉWYáDjDäZ`Ë•# ¸%ð&ò¬éSh]ø¡«0¦ÎáýçžFÛ×ßcdàs|ÜüžëK¾¼N‚nŽÆ!Ò…ÜÓ½ /§JrO÷Ê_£?âþ!ÁäœHˆÜȼb$CÊyu›¼o ÃÁíØÙ;:f\ìÄ“ÛzpÓ¸ÖýÖG/#Ï“9bN¤ ‹{ºƒ[ð|w˜÷tS~FâŸ:þCés¸L~Š»>çDjDä<s²4y$‘Œ+èkY…ù j±ª®u«j± z–ËÏÊ%„&“/$¯“Q92÷é@îéîBèfZDdÜÀ…ΧxO7å/DÝœ[KåÊ 3è&"§p²4ÒV|xùO°hù*ÔIÐ=³<ŽÍûOyâ 7åO¢8B‡HV÷tÏÃ’æ/yO7å'܉†Ú'±5õ6…­O¢¶z!ê6u ?âþIUti€“¥‘Þ¦qµ§ -ÇG9ÑääágŸ}–L‘wIÐý –¯ß6ûžî@ ÚÞïǨ<‰‚(‘o1xþf2a2p#ôKÜ¿ºgçÜëí> º‰<Ž“¥‘þÂ8¼ÿ&çìS¯àøþ£åq›VäÖé׈Èë²ÝÓMd‡+8¶i!*ªŸG·‹g-71è&ò(¹¢m'çÕmÒÛ‚uæ#ÃÒ–ÊGÑ1üçäëH|t‘.¦9…P(„ÐÀHüV cjgúObÐåÏT&w1"#v:…™õÞ˜ÂØ™~ô~ò)N G<Ñ–tyyP*Wƒp“þä‘ +ÒžÏùkïEMÝ‹Ø×?‘|éBFïpn "¯»ÉîçqO] Ž #zë :Vß‹ŠªEX¶üq´„O¤ Êi²ëïYæ#C˜ˆÞÀÙŽÇQ]QEËV`uËF¹ƒn"1ïß–YʉüáN†c‡oin|ÀýO ã,§âÑœP䈼î[×£uðzì÷iŒw¿€ù÷£Iÿxý¶<Ó…ñÄ ‰,M¾ºÖS¸ûÝ?‚ óïÆ}M=±`{ǶlE×8‡—‘ä TnN2Dt“Ç^ŒÀ݇õÝ—“#]H×ÔÔ”L‘7]GósØ{î&ŒÉ,™‡»VqQ†™wá™Ýà)Óý¯¡~ï70bAv_`)*ïzÁ‹±ܸ„®g¶¡{’³—‘MÌ Ó8ä’|Lj`d@îå a`Dîݺ©±oÑßûG9ñ¦!y¢Ü³OD^f`ê«×±´æ,[TŠÊ¥ô…q¹¿úE¸?yå’(§©´.ý+Ô.[„*yÜ\àÆ/ŸD0ð(jîßAÎ^ND¥’{¶e²4N˜Fþ5†îõ ®ù0†&þŒ[g;°ºú.T-zËW·"4éþaeT8é󆆆’)"ò¦›í»-hh¨œ4¸Œp8ŒKS¼§›òd :z»w¡¹½á¨cj—bí(|iS¼§›ˆJ‘:a‘oMŸBk݉3ÙÆetoø)*î{½“Q\?À3]ß'_H:Ù³gO|!""ò:ÝD.eN˜ÆÉ„È÷¦ûÑ\ߎsÆ4&ûvaIå|¬Éyº^ÆÆî±ä I'ÒÊc‰ˆˆ¼ŽA7‘ É$BpËA'EðUë#¨©]ŠEU•¨\² }ãaô¨¯Y‘œ—t#·Óð¾n"½È‰4Û¼¶àÞŒÈed8%'L#J½ŒþÎ7hÞ‡ÞðMÀ˜ÂÄ¥0Âá˘˜rÿ¬¥T¹½†}!‘>$èæ\ dÝDT4¹w›™DD òØ0>"‘H ºÉ. º‰¨`2ŒRnÎPNDtG0ädjDaÐMvaÐMDá#Áˆ Ç{}ýAÎ9™‘7ɨ=Ù†S> ì ›ˆòfÜr•›7Qþtûƒô‹\×DÞ$·†Èö›k‘ylx D…’¶ã%Ü“•‰œ6n"*Œ×v¶T<ÎsAä]²ý¦Ø™¹„¨PÒv¼„G-De rf—÷*Çk;[*'S#ò®C‡Í °Ó ʉŠ!íÇKxÔBä03àæA$Qñ¼¶³¥âq25"ï’aãrÌ“h§.<¢|È~@æ÷H]¤ý¤ÿÍÍ£GyÔBä óþ&îdˆJ#ÛùƒLº$SDäM0™Avê«ܔ/ÙdjCé‹›¯yÔBä“'Oº¾C ò Ù–ÈÆÇǹ¾‰<,ÛÕn9."Ê—œ|MoC©‹ÛOâp/Fä�)'²—ì`É?¤ÿädjDÞ•~µ›£W¨P¹®v»ý›G-DŠ1à&²Ÿì`É?ä�Wň¼+ýj7ŸÕMÅÈvµÛ ·*ð¨…H!ÜDjÈN–üC®’ÉBDÞ%“\IßÍ«ÜT¬lW»½pœÍ£"Ep©#;Yòyì›g¥%¢ÜÌùx«•"ýj·W&äãQ ‘fÀ-ŠDd?ÝþẨÔI `t[H?éW»½rq‹­‘Èfrß’œuãU"{ÈÕÙɦ.²£Mÿ›,²ý‘~Ì™Dd?]ƒS]ËEw®v{é±slD6’þ5kÖ0à&²‘Ó²s͵xiçK…“uLDöÓuÛbŸ¡/ó¸ÀK·p²5Ù„7‘:Ùf,M]8‚Þ䤊h‘½¤ÿÔ‘®år³Ô}²nK©Ø‰lÀ€›H­\W»y•[râ…A7‘ý¤Õ‘®år3¶¥ì؉lÐÔÔÄI~ˆ³ºÚÍ«ÜúÛ³gF¤€ô¡:Òµ\nƶ”[#Q‰ä@P®rs'"µ²]íæUn€[ú["²—ô£:Òµ\nƶ”[#Q äêšÌ¨+³+‘z™®vó*·?ÈIŽ("²Ÿ…éZ.7c[ÊŽ­‘¨HæU7y” 9#ýj7¯rû‡ôµ\ßDö³# p#]ËåflKÙ±5Á|f,¯°9/õj7·AáA4‘ý(‘]Ø–²ck$*Ü»-W[8¡Qy˜W»yÕÓdst‘½Ê(cgpz,šLÙ‡A·ótgÇÖHT >Œ¨üäj7¯rû¬w9éBDöQ(ö kàz2‘Í-\ nÁÎP$™¶ƒnç1èÎŽ­‘¨�lKÐMDsÉNI×…ÜA7‘ý”õqáN46ìBG0˜qÙ·uÕ‹`Э]ëÜŽr±5åIv2´‘#ÊŒ;[RM‚î“'O&SDde}œUÐ}àu¬_</þÙ•‹›pt”ÃËuPî:wó­ lDy0 Æ{ ‰²Óõ�‡nîa°‘}”õqÙ†—GÏ£»iª**Q]߆þ«·’öbßí<ÇÛÒ,î¾U­‘(s¦ri$²¦ëÜ܃A7‘ýœìãŒÈ�Úêï}æ|<Øtᨑ̱ûnç)«s nU`k$² CÉånÙ˜‰Èš®8<psóàŠˆìãLwSÃa³ )¯\‚u§QoDZïvž²:×àV¶F" 2qšÜCHD¹éz€Ã7÷8tèŸAd3õ}ÜMŒö½úêJTT¯FKÏEØÍžÛyÊê\ƒ[؉ˆÈºàðÀÍ=ä6ž%²—Ò>θ†¡àóX\)W!·ààÙI̹À×ýº…cßí<'ëÜk·*°5‘-t=Àá›{0è&²Ÿ²>.zG :öÿeHyã¯7whpðìÙô >§[ÎÔ¹7oU`k$‰ŽcèX'Úšv££{c ÏŒù‰®8<psÝDöSÕÇcýø`N¾0èÖ‰ú:÷î­ läÑó8²ùTÆ6œŠÊ¨]U‡Uµ5˜_ÿ¾ŠL'_DDÅÒõ�‡nî!“[r}Ù«ìÛ‡—kCi{üV¶Fò‰(.lÄ]ÕXèÆ¹ˆy^ì&FýOì=ƒÛÉ¿QqÊ~€cŒáôé±¹;áñÀÍ]¸>ˆì¥~›º©ð�> ¶¡9 # [ÑþÑ œP3镉}…ó”Õ¹·*°5’OD ,Bż-8v=í<B !ˆp2IDÅQw€Æ‘®Aäb\ âñ!Û‡šñÀÍ]¸>ˆì¥t›’«“/âÁªÊøçÌZª–¡©û¼²áÁJËE©ªsnU`k$Ÿ˜Æx÷ ˜?+èžFdð4.Å}›Žb2ùW"*Žºœס¹ã@†¬¹´#Pw/ª ºuÇõAd/uÛT—»6`~Åݨ©ßŽ=ïu£7B(ÔƒîƒxóåzÔÜõ�¶½dû%Á¾Âye¯s/'rãŽm[ƒµ»{ž’Áä—ѽþ>T.~GÂ7¯!¢¢©ÛÙZݿǛë–œ«AÍÁÜÜ…ëƒÈ^ʶ©_ pß}hhÌ2»ô4"ß¾ƒÆ…/áØ¤ý7ù±¯pžú:÷î­ lä3·0qö ˜S“¸À‰¨Têv¶Ù†—ßD¸û•İÅêÇÐÖEÉ0E¸¹ ב½TmSÓƒ­X¸d7oY ý3†;žÅæcãÉ´}ØW8Oi{üV¶FòcêB]o£UÎŽµ¾®ÐL©ÓDäCvì”òÛù~Õöª+*Qõà+èV8ZÅÑrQN\DöRµMEC,Èã–Ÿh¨ Á‘dÊ>ì+œ§®Î½«[#ù†@[ý½ñ çÎ2‹7F˜Ïê&*™ºílÆÔwèŠ?þo­ëÀ âGþ9U.Êב½TmSƹ½X¾é¬ï°½ÉîíØØ=–LÛ‡}…ó”Õ¹·*°5’OÈð¥GQY½ÍG1R~ScC8Úú <ÂG†•LýŽèè 쎟<»u-Ç9aÆ7wáú ²—²mÊFð™fôNf?1jÜø m«6¡kÜþ“§ì+œ§ªÎu¸U­‘|â:ú›—béÞoæ;¹Ù‹­ñ‘aD¥R{€3ÈPÏ‹O˜¶éà™ g»ó{´X¡xàæ.\DöR·Mˆ†?AKËa §ÏŸÇÐÑßaëŠ{P±øµÿ!öÎSUç:ܪÀÖH>a`jèm<½³“©êÑI w5á‘æ/q#þ‡+8¾ÿ(FÕ_<#ÒŽºœ›Ý…Õ2yÊ<,jlAÇœỸ8°gVð9ÝÚãú ²—}ÛT,È;‹3c©´ŒPêǧWf]ô0"#{rÏ!¾Œ “Ú²¯pžª:×áV¶Fò‰) µ-o49—ÊUØ{–#*”l?J£èÿ sN¾0èö®"{Ù·ME6¢NÁ•Æb°¯pžºã�ïߪÀÖH>aàÖÐoñðŠg±#þ\?«¥ýÉ÷Q¾Ê€Ãáåº;þ<–.]šL‘ìëãtûº:÷þ­ läÆe |?kxÙljc*ŒO‚hk–d¿Dkû‡è={Õö«Û©xàæCCCxöÙg“)"²ƒ}}ƒn¿S[çÞ¾U­‘|â6"§Oã|¦í02€?|2ÌÙˉJ¤vg+©ubóƒóãŸ3{™›Ž(›É\m¹¨ º‰ìg_Ç Ûïì«óLó”åbk$Ÿˆí:·cë{Ÿ!˜~ÊÒÀß5îʼnþ3GT^/#Ò›ÊãòGxj~%*kÅŽ=·/¶ýö¡·û :Þ| u5ÕX¼åS%“ òÀÍ=tÙϾ>ŽA·ß±-eÇÖH>!oC|£±\ª–¡©û|ìÕDT(Ù†Ô¸†PàT7¼¡Hæ;¶Èרߏ›Ž]IþÅ>êÊE…bÐMd?ûú8Ý~Ƕ”[#ùDlãí܉À‡=Ù¯tËï}Ä-›ÑÎÙˉ ¦ì�gúZ.Gë õÃBŒáÔmÎõH‘ÂñÀÍ=tÙÙ…m);¶Fò‰i\ýâ œÉt‘,DÃÌ÷§q­û%¬qÉFNä%Êp¢!Ê5E^×D8™´ ÜÜãСCxõÕW“)"²ƒ}}Ü4FnÀÚƒ“éòbßí<ûêœA7‘~Œ›ˆ\—£ùX`Þ» V-ÆÖ^>2Œ¨PÊpŒo°wùV»žã†íÉnlÜØÉdÒ.<psó™ìDdu}ÜMŒö¿‹Ý´÷^Œ_܈Ï4=Æ”’aßí<ûêœA7‘Æ¢=Ö‚§ÝÊfA&Ò™ºœ[¸|Û{dz?òψàë¶F<ÝuÉöÇòÀÍ=t“n¤qâ‚Üò³²2ù•µhêÆW­Kcé{Q¿wSÉש¢ª\”}uΠ›È3Nž<‰¥K—âOúSò/D¤’Òœèyt·¼CÃ×Ó‚ê[˜:Š}[FuEì îX8~5ÅN<psݤ7ô/ª¾Ãô`+.Þ…P$Š©á÷ñÜ£oáëña ô}„æG^B÷¤Ú‡µ²ïvž}uΠ›È3$àþì³Ï’)"RÍÖœèΜ›@G¿GèÓS¸šuŒ Ȥˆƒ8ãÒįtkL&Q“ªDºpCÿ¢ì;DÏ!¸ñ5ôNÊ„:2bi ¶Éí{Æ(º7l@0l÷)ÒÙØw;Ͼ:OŸÀû·*°5’–äJg¸%r–­8á êê쟭<psé×es"]¸¡QõŒ«'в¢ jŽõçuXU[ƒêEËb? òž�B7ÕFK~뻥¼nXTÐáVµFòN^SSÃ3"‡Ùº³eÐM0è&ݸ¡QõâÃË«ay,à– {fixû¯Ù>*)ßúníÛ’ÇoUðWk$_سgššš’)"rŠ­;[Ý”Ü6tþüùdŠÈût”`Œ¡§åM¿šéy­êù­ïÖº-ip«‚¿Z#io||<¾aÈO"r–­;[Ý”×éÆ mZÙw=Šýǯ̽¢=yû‡y¥Ûf:·%nUðWk$íÉÐCÎlKT¶îltS\¤7´ießAúñØÿ–ÿŸ¾T®ìÀ°â¨[>ÇOÜP^UßA‡[üÕIkrŸŸÜËÍG„•‡­;[Ý”×éÆ mZÙww¢¡öIl 0—­O¢¶z!ê6u ?ÂG†ÙI붤Á­ þj¤5¹ÊÍG„•­;[Ý”FN¬®Y³&™"ÒƒÖRä[ ž¿™L˜ Üý÷¯îÀÙ[îì%Z·% nUðWk$mÉÁ˜L°CDåcëÎvô Ö®=ˆÑd²œüvàæVÒÏóQ¤­¥Œ®àئ…¨¨~ÝŠ¯Zú­ïÖº-ip«‚¿Z#i‹W¹ÉïÒwBåZÔ0=‰ÎÝ»ÐÜÞ‹p4¶w5"øá)µÃ…ºrQ!d¾y:‘NÜп(û¯NÆúóoßÀ£¯~퉫“^¢u[ÒàVµFÒ¯ri¾³5ΡceUüÿWTÌÃâ¦ã¸òU+VT¢º¾CSjÝÜP·”º9Q&éFë¾›©9Ê åUö4¸UÁ_­‘´Ä«ÜDšïl§O¡uáC„®Â˜:‡÷Ÿ{m_‘Ïñqóx®{,ùB5ÜP·Ä¾žô¤uß͉Ô¥u[ÊÈ[·*ø«5’vx•›(Aï톃۱³w<>Ѹ؉'·õà¦q­û%¬ Ž$^¦ˆê–A·ôùD:ѺïæDjŽÒº-ip«‚¿Z#i‡W>ˆ´ÞÙWÐײ óÔb•<—sU-T/ÂrùY¹Ðdò…j¸¡n)±ÆÇÇ“)"=hÝwgĉÔTѺ-q"5¢òáUn¢;ìØ!”JÙwˆ/ÿ -_…: ºg–DZyÿ)D<°³¥Òq=©¡nÛº‰Ñþw±;ЂöÞ‹ˆÆþbD†úäSœŽxâꤗ¸¡¼Ê¾'R#*^å&ºCë-¦qµ§ -ÇG•¤e↺õ»óçÏó$+i͈Fc=]y¨êãŒá¬¬L^‘¬¬ESÏ0¾j]Kß‹ú½ƒ˜J¾N¿õÝn(¯²ïÀ‰ÔˆÊƒW¹‰fÓzg‹0ï?É9ûÔ+8¾ÿ(Fy¥[{ÒçˉV"-E/ãXà-„äRp¨êã¦[±pñ.„"QL ¿ç} _c ï#4?òº'9‘š :žÀÉŒ©)Ç«ÜD³¹áàBÝwA°Î|dXÚRù(:†ÿœ|ò9T^‡«¯¾šLéà6¦ÆNãè¾WP_s7*ªÚ݈žCpãk蔀è.·`[ïD,*E÷† †ÕØ—}·¦'pt¸UGä9¼ÊM4—.Ô}‡XÐݰ[wܹ—+ðkïEMÝ‹Ø×;ˆSÈ—n.Ãgt“6ŒÆž—ëQz}w¬Û€^×.P2®ž@ËŠ,¨}8>ǪÚT/Zû¹�•÷ºéþ!ÁÞ ÿ nUà‘y¯rÍ冃 ußáN†c‡in|ÀýO ãìäÔpCÝú]SSû}ò¼Û#aËòTƇŸ¢~Ç>¼Œ)ÃÀÔ… ¸¢úr]ªú¸øðòªEX>kÌØÒð2ö^ãDj¥òÑ nUà‘yŠL¦SSS“L‘›8{€s“Ç^ÄüŠû°¾ûròojhàæ2º‰Ïè&Ï‹^Fÿû¯ã…å?ʦ BÓña²å¦¬3ÆÐÓò&ŽÏ¹ßÖ@ôÚ5\ç|EóÛ nUà‘yŠÜÓÇ!†DŒiD§Ë³·Uw€“e"µè¿¢åÑ7q–nZûÓŸþÄu@z1¦06øGì <ÕëØwt�ý>Ä@™f¿²oû2pëlVÏ_Š@ßÕäßÒÅî«ýØ»n·ò«±Z÷>;£Ã­ Ü‹‘g˜^ãããÉ¿Ñl·0~ìu¼Š$ÓÎRw€Ã‰ÔüŒ3—“¾b¨Lõþ¯ÑX»Kƒ!ÁÓïzwU,ĦcW’3ÅÊ:1„î¶ ¨­ªtä¾c_ôÝÚžÀ™M‡[x$Až!W¸9{-Ñ\ÆÔe ݇õ?EeÅ"t º9‘šoIß¿gÏždŠHGú 6"!´<¸ÞÑä•×´`»b>j·`“÷û«ïÖíN nUà‘yïé#JuSáÚó2êd¶ÒØ¡²¦/¼°­ÚÝœHÍÏ8y&é#ÓcF0ëߦÊp »û8#rÏ`í¦×°·uý`{}º‡Æcåvæ$ƒ?ûn]Nàèw«$Èä€kÍš5É‘ÏÝF×–•X`ÎVZÿ ö=±©XX:u #WÊsŠÛÙN¤æ2y&o+"”û±GÙ¨éãä ÷·è9°kߋś?ÀÙˆ³û&½ûnÝOàèw«$Èx¥ƒ(•ìl?ÀîÆ¢ÛÐF$Zƽl’ºœØvô$:wïBs{/ÂRV#‚‘ÐQ9ñ"¼Z¢- ¶ùÄ ÒE¹{”ò>.zg{‚hÙð6´t¢oxWOŸÆyÅÅÕ¹ïöà ÝnUà‘¹F”ÍmLÆÑ}¬[ý4ûþˆÁX0~pàz2ßYÊpŒsèXiN¤6‹›ŽãÊW±ƒ×ŠJT×·cHñi}eå"")óc²q®‹"2ü:[žBíN¤V ¿œÀÑéVIëñ1aDyˆNb8ô>ZWë7‘Úô)´.|(V®«0¦ÎáýçžFÛ×ßcdàs|ÜüžëK¾P ÜÜã&†Ž#ØÖ‚@à—híøƒc7“yDz(÷c²q¾›ÆÕS_ñJw)|uG[x$A®ÆÇ„e’e¸õÀ×_½¨á=ÝSnÇÎÞñXÉcE½Ø‰'·õàFìÀíZ÷KXI¼L­Ü\á&ÂG^Æâäñ€dU-Ì m_© ‘SÊýØ£ltíãtî»}{Ç÷*ðH‚\ #Ê Ìí³Q¶³5® ¯eæ/¨Å*9@•€¬:và*?+— šL¾P ÜÜÀ¸|kïªÀ]Ëwáç®Ý¹woôØöÄÛ8[žQ’DöûÓ�ö<ýZ†Ç¥20uþßpÉÁy:tíãtî»yÇ{·*ðH‚\ #Ê Ìí³Q¶³—÷'X´|Õ샋ºÇ±yÿ)N¤æqÑP�U÷aÓ±ôM„›Ê6L’ÈváƒØ¼© ‚ÁøE…ÌËünë³Øº–|“zºöqZ÷ÝYŸ[]^Î×¹wnUà‘¹ÖÉ“'ù˜0¢ŒÊ;Ü:u;ÛØNµ§ -ÇGçž½NbâºÚƒ­Ü\À?‚ ó:+è6"_¡3ЈÚû^±2MDd»pu±þDú”\ËÝ뻡v Ïòy:Òµ\qy=”£&ìbG¹x$A®ÕÔÔ„C‡%SD4£Ìí³±ug{ë :Vÿ‹'uZ¸èœÚûZO§õ›+D1z,€•kß@oøFì0qW»ŸGuåØ|ä|r¸9‘Â]ØD8ι\š˜rlˆ0%⨠GÙQ.I+q5" en­;Ûñ.4ÞU‰ù›ŽÎ½ÚÇPwÖ×Î}æ"å³µk}àæ‰Ùi{ŸÆD|øÆ®]s.è r„1è´ûZ5%⨠GÙQ.I+}öÙgZN”•Åpë2²ugkL ¿åa, ôàª94nV°]‰ªÚ'±uÓz´2èö>ã¡.´·þ@+Ú»þá)+'¿¸‰á÷>Â@™nÏe äA5á(;ÊÅ# r%Z.7erF÷s[š ãÜ%çžulûÎÖ¸†¡ƒ»°níf´îýUJ°½mÝC˜`<¯ûÚJ£õ›ÄÖóWm¡:VÏR׿R¹øe óYݤ‘X[Ü¿ËÜ=«­Ç—*õ30g#Ÿ¯#]Ë—uÔOà¨`G¹x$A®c-—ŸD”É:7oÅž™îáJY~· ïü7’ïRMÙÎ6þ\ά½Õ‹_ÂGgÍÇJ9Cë70†;°²ò^Ô5ÆàX⊌15Š¡£­XýH;FÚˆ?æ©ò§¨{a;ÀìåWÝ)S[g äA<ã(;ÊÅ# r™<M®tQ6#Ö™ÏéαܽÝÍþ,Ÿ§Ö-LœíA°åy4nhAgß0"W¿ÅàyµWCÕ—Ëߦû›qïÒ½87ç¢Í5ôn}ž #mÜ>»­ìÀHÎaJΚµÏÐlÑOà8ËŽrñH‚\GîåæÐr"+#xw÷A|“áÞ­9Ë¥ L9t€çÜÎÖ@42Œ¾Î¬«]ʉԼnj{Ÿþz'SÇCFþ[y ý7¤߯äñ?àð(pò0¹•â­ìÿ6}üÑÎx¿lC‚É{Ü|GG ºI;2[yMM ‡–YŠQ÷•cgk\ý¼Òíi·‡Úp¬Ž¥ž­—㡽gbá7‘7Y¶õ2 &ré iË:²£\<’ W‘¡å¯¾új2ED…‰ãÃGppàz2í,îl©(·Ñöð*¬ß‘6D2ÓÒÑŸý¹íDngÕÖË8$˜¼Ç­'päóudG¹x$A®"CËOž<™LQfÓˆ ¾ƒMËkP™º£/êŸ[ w¶Tœ(FqÉeÃ$‰ì'm½ÿúõQtÄ÷K´¶w!¾‘ûiD©\zgöñˆ^K©x$A®qþüùøÐr"ÊaúZþ5u±#}gø ºGÊó˜%;vJn¤k¹\#’m2¼ ôÿá¯þ‘Fnàì§PS)ñwcÁ÷cAõ½XPÓ€¶¯®1ð¦ðd¥×ðH‚\cÏž=ZN”Ûg°÷¡µè¹•üƒ;0覢„ßæ­è …šµ|€Àß=ƒ½'0Ž8ú˜8"ŒË±ö.yýKè¾#B á�F®ž@Ë“{0ĉԨ ·01ÄQ^Á# r¥K—rh9Q^¦ùêwؾ(¶ËMe zö#tòžn[1èV,D]¬Ž¥ž³/óñ`Ó„£<œ$¨ª¸ëº.%£xÐD˜Ç£‚qÔ„×ðH‚\Áœµœˆòpû4Úî¿;-(1ÞÓm7]Ëåá÷±5ðžÅ•nùýs;° O·sörò®Ä•î…ØÚ{-ñ º—oGð½¨[¸½ñÇãåÆQÞÃ# ry.wSSS2EDÖn`¨m-V¬ß–v?7ïéVA·bWÐ{f*™H5‚`CóÌ,¼ÆµnlX#W‰¼ê&ÂÝ;ððºvôN%¥ª TT>€ÍGÎó ÊGMx$È$à–Ç…Q~ŒÑÅ—ÿz G;v'‚íַѺ€©2^(aÐMöº©Èx b\íAàÁŸà'[{þTZ"o‰µëð�>ùd·GÑÿÁaôž½Ê€› ÂQÞÃ# rZ.C̉(n=€ÇkCÌ+Üü üêÛ)Ó¾–A7©bŒÅΧšÑ.Ï(";‘ Äo8…‘ÈtìS;3€Ð`¸¬'LÉ‹8jÂkx$Ae' “IÔˆ(OÆ\û“Ä뵑ȯÁZ¡À&GÂèkÙŒ¶¡LCuÕ“àT×…Ô’}€ì ˆ´6Ùõ÷¬Fó‘!LDoàlÇ㨮¨Æ¢e+°ºå L2ð¦‚pÔ„—ðH‚Ê. òQaD…HžÑ¾{]ÆãiÉ ;ÅÍÞ� ŽÄ_FäòÔ žx%?˜|u­§âO0Æ`Ãü»q_SO,ØDZ-[Ñ5ÎÙ¯(?5á= º©ìÖ¬YÃG…"y¥ûÇ[{‘l+A÷Ø|ºeØÚ;ÿ+‘ÈI×={ö$SDúšî õ{¿ ²ûKQy×ã^Œ…àÆ%t=³ Ý“œ›ŸòÄQžÃ ›ÊêOúS|è¦ü$¢|ˆ† éáõØÛÿ}rxù¢Ø¶4‹7泌ÉSdN-'_˜@ëÒ¿Bí²E¨Šõ×K'0~ù$‚GQsÿn ÞbßMùᨠïaÐMe%W¸Ÿ}öÙdŠˆ aL…1ðÉ1 NLa¬ÿctõ~‹ Üä!²ÑNDþ` :z»w¡¹½7~‚Ô˜šÀ¥páKLy㨠ïaÐMe%à åžn"*€ÁÈ€ÜËÂÀH$vwScߢ?tá)îhÉ;dÀÇEˆ£&<‡A7•g¬%*ƺ×?€ºæÃšø3níÀêê»Pµè!,_ÝŠÐ$‡•‘û™·ñq‘DD…⨠¯aÐMe#Zr/húZëÞHœÉ6.£{ÃOQqß+èŒâú±�žéú>ùB"÷úì³Ï8´œ|$$ònéT62¤°©©)™"¢¼M÷£¹¾çŒiLöíÂ’ÊùX†iŒw½ŒÝcɹ—Ìç!7‘Ÿ1è&»°-¹×• ïå#*V_µ>‚šÚ¥XTU‰Ê%»Ð7F0€úšh¼ž|‘;ÉmE2Ò‰O® ¿c Dva[r7®*¹Ÿ{hh(™"¢‚D/£¿ó š÷¡7|0¦0q)Œpø2&8™¹ŸÍM”À@‰ì¶än\;Tæ:DDä/ÒÿËUnN F~#Ò9Jÿ'˜¥\¤¤·›LmIrF=TÒ ðùÜDÅ‘û`eçšk‘Ñ$Dn#·±ÿ'?’vŸ©¯N_d$‘i#™ÚNú¶ä º©,äÙÜZHT< ¨3í`SNREn$m÷äɓɑȇL}uúÂQ ”‹´‘Lm'}a[rÝTœµ–¨4¹®vó*7¹‘l›äg¹®vóÊ$å+×Õn¶%waÐMeÁûùˆJguµ›'µÈä1‘2҉ȯr]íæ±å+×Õn¶%waÐMŽ3CD¥Évµ›WÉÌD>&Œü.ÛÕn^™¤Be»ÚͶä> ºÉq(ÈÕ"*]¦«Ý¼ÊMn$W¸y H”ýj7¯LR¡²]íf[rÝä8™@à ‰ì‘~µ›W¹É­d„“D4÷j7OHQ±Ò¯v³-¹ƒnrÜš5kxàEd£Ô«Ý¼ÊMn$íRú~"JH¿ÚÍ+“T¬ô«ÝlKîÄ ›'ïé#²yµ›W¹É­¤mò„ÑlæÕn^™¤R™W»Ù–Ü‹A79JÎìòj‘ýÔ[I»ä !¢¹Ì«Ý¼2I¥2¯v³-¹ƒnrÔ¡C‡xŽr’÷.D…à !ÿÈÔ_pqÏBå‘i]x}¡Â±ÖÈQœDò¡[‡®Sy¸³¥Bð*·¿°¯s/öÝåöD‚µFŽ’û—8‰å"ú—_~_L©iyÂ*]lžÐiÅ-‚W¹ý…}{±ï.¶%¬5r”<2†÷›P.ÜA¹w¶”/^åööuîž»|Ø–H°ÖÈ12c97TÊwPîÅm˜òÅ«ÜþþνØw—Û Ö9F†•Ëðr¢\R;ôLC·MvæåJ› Í“E§w¶” ¶ù¤ ÿa_ç^ì»Ë‡m‰kÙË)_©z¦@Ödg^®´©Ð<YtÚAqgKù«Üœ¿ÃØ×¹ûîòa["ÁZ#ÇpærÊwPîÅ-å"W¹9ªÉŸØ×¹ûîòa["ÁZ#ÇpærÊwPîÅ-Y‘¹;x•Û¿Ø×¹ûîòa["ÁZ#ÇpærÊ—tèÙ†j§ÿ.ìÈVébó„N;(îlÉŠŒfâUnÿb_ç^ì»Ë‡m‰kÁ™Ë©ÒV¬YyÂ*]lžÐ©ís;¦l䤪œ\åUnÿb_ç^ì»Ë‡m‰kÁ™Ë©ÜA¹w¶”MSSS|îò/öuîž»|Ø–H°ÖÈœ¹œ ‘Ú¡gºŠl²3/WÚThž,:í ¸³¥LNž<¿Ê-£šÈ¿Ø×¹ûîòa["ÁZ#Gpær*Dj‡ž)5Ù™—+m*4OvPÜÙR:sò4™µœü}{±ï.¶%¬5rg.§Bpå^ÜÙR:NžF&öuîž»|Ø–H°ÖÈ º©ÜA¹w¶”J&O“6Á'S`_ç^ì»Ë‡m‰k!CÏŸ?ŸLY“=ÛPíôß…yÂ*]lžÐiÅ-¥’ª¼uˆLìëÜ‹}wù°-‘`­‘#¸R!¤½X²*ò„UºØ<¡Sûç¶L&¹‡[N¨rò42±¯s/öÝåöD‚µFŽàJ…àʽ¸-“@[f+—YˉLìëÜ‹}wù°-‘`­‘rr¯Ÿœå‹;(÷âΖ„<‘BžËM”Š}{±ï.¶%¬5RN&Pã̶TˆÔ=ÓÐmS)y¿ûÝïfîEÍôÚô´©Ð<YœØAɳðxdw¶$}ºœHåäi”ΉþAÚŸ#,œêë^}õÕäoj±ï.¶%¬5RŽA7*µCÏÈšŠÉ“@¡®®ù—9sà–éµ™Þ+ ͓ʼn”ÉH•¸³õ7ó™Ür’‡(ýƒœ,ubò>§ú:§&šeß]>NÕ½nŸ£Ö)'Wß8 ‘ ¡¢C—`AÔäK`êääONí äÀmÍš5ñ“\ªÊÇ­¿É¶Ã“¨”ýƒ´?®tËñ‘'±Øw—Su¯Ûç膵FÊ9uVšôaw‡.hr5AÖÊñè:'wPlËAœª«'ÜÙú—lG2šÂÉVä-Nôº]–€Û‰ ì»ËÇ©º×ístÃZ#åtS¡¤CÏ6T;ýw‘-/u(¹Œ¸HÍ…¤‹ÍåØAÉ6§bviîlýImí‰ôâDÿàTäÔçÈ 9‘ ûîòѭͲ-‡µFÊÉļÿ Qj‡.‚òœJžI¹vPæ•I;OzqgëO2JÄ©IzÈ»T÷2w…ÜBã'û:é§UOLȾ»|œ¨{'ŸĶTÖ)'k²£$ÊW)z¹‡’gRΔԤÊðE;N>pgë?rÒT¶)+§\T÷NÎãd_'eRýô öÝåãDÝ;9i1ÛRqXk¤ƒn*Tj‡žiè¶)5OÎòþ⿈ŸéÍ6”Ü”)/WÚThž,åÞAI°$u|—z"‚;[‘ö"ÛûpʇêþÁÉÛÕœìë¤LªG’°ï.'êžA·û±ÖH9ÝT¨Ô=S k2óä€EƒÿþßÿûÌÕ¸|ÞgÊ'm*4O·ì Ìz*å¾\îlýENÔ8ä÷©îäxBõa““}#©¾¯›}wù8Q÷ ºÝµFÊ1è¦BåÛ¡›*ÒÆÜ2”<7í J½Ï›;[ÿ6âÔý³¤Õýƒô÷NO8Ý×É穼…ƒ}wù8Q÷ ºÝµFʩޑ~ruè2”\†K›CÉÝÎm;¨RîóæÎÖä�N¶/7ŸÌ"÷QÝ?8Ùÿ8Ý×IÀ¤òé�ì»ËljºgÐí~¬5RŽ'JÚL¶¡ÚrõM–m(yêï"ß<a•.6O¸qº+æ>onÏú“¶!WùÔ *”ÊþAú)ÕC°S9Ý×ɾMž¶¡ ûîòq¢ît»k”ãÆI…’6“¸vvvbÑ¢EñÊG}”5ÈM_¾yÂ*]lžpó6 z…ÜçÍíY²ññ`T •ýƒôQNÂé¾N‚&•·s°ï.'êžA·û±ÖH9nœT¨Ô6㵡䙸}(ä>onÏz“+mràÏ[‚¨*ûéŸòé£ìât_'Ûœ|¦ªm}wù8Q÷ ºÝµFÊqã¤B™mF°2 %7eºÂl*4/WÚThž,^Øò½Ï›Û³¾ä¤–œ|‘]DÅPÙ?Hßää‰×rôuÒKð¤ûîòq¢îåxIåí ©Ø–ŠÃZ#å¸qR¡¤Í˜³’gJn2ƒZS)y¹Ò¦BódñÊ6 Áv®û¼¹=ëIÖ·ܪøÉTö*ÒLÊÑ×IФêj>ûîòq¢î ¶TÖ)Ç“òe%—6ãÕ¡ä™xmw¶û¼¹=ëGN¶pâ4²ƒÊþÁé¾§}ÊûÖÙw—uÏ ÛýXk¤”QrðN”‹èÉ™~Ý:t/–'Û}ÞÜÙêGò9qÙAUÿàôÌå¢}œ�Sõ¹ì»ËljºgÐí~¬5RÊɉÈ›¤˜CÉÍ!ÍÒ¡gªþ»°#OX¥‹Í^ÝAeºÏ›;[½pâ4²“ªþÁé™ËE¹ú:ÙªFϾ»|œ¨{ÝîÇZ#¥tS6V³’K‡nȪÈVébó„—wPé÷ysg«NœFvSÕ?8P˜ÊÕ×ɨeeß]>NÔ=ƒn÷c­‘R º)Ù1ÈÁ¾\dºÂ¦[‡®CyÌuÆ­8q© ªNÏóQ®¾NÊ)åµûîòq¢ît»k”bÐM©¤=Èй\³ÐJ‡ÎŽ‹S;vRCNtqâ4R!SÁÅ= •G¦uáõ… ÇZ#¥t“HJÎ}oËtŸ7y‡¬3Yœ8¼DòýÔßÈI1sŽ¢|HŸÎã+wcÐMJ1è¦\CÉÉ{d=ÊvmÞçMÞÁ€›¼Æ¼ÂOä¤&(*„ì“­FRù1è&¥tû—¬û|†’“wÉÌ×r0œéyÞä>lËöÈ“_ä%~<Ž€[Å}ݤ/ÝîÇ ›”’ƒ;Þûá/Jî/æ Ø¼ÏÛÝp“WIß"'øüD®îËIk¢|1èv?FC¤ƒnÿàPr2yŸ·;Év)ë‡ë†¼Hö'~<+ûR>ÎòÅ Ûý ‘r ºõ'=‡’û›t²Ó—6ÀE÷0G"ðÞ{ò*¿rÓéǤ‘w1èv?FC¤ƒn}q(9¥3ïóæÎ¿üp“ü6s¹Iö©œôòÅ Ûý ‘r ºõÄ¡ä”ìñDLùH -}/'¹#/“»Ò—ø‘P¼¯›òÅ Ûý ‘r ºõbp(9Y1ïóæIçIÝK Â¡©äu²‘`¯üz•Ÿ Ç Ûý ‘r ºõ ;~  x“ò%mFxŸ·sp“Nü8sy*é?9Z…ò!ý>÷³îÆhˆ”cGà}dËzäUK*ïóvnÒìsü|’×ï'(¼Àå~\C¤‡¼x—¬7¹JÉ¡äT*Þç­nÒ‘ßÌ}0Q. ºÝkˆ”cÐí=JN*ð>o5p“®xO3ë€òàÛý¸†H9ÝÞ¡䤒´)éxŸ·=p“®¤` Ž4£¼p[q?®!RŽA·7˜Ãظƒ''ð>ïÒ1à&Iß Ç~'}¥ÜÛMd…A·ûq ‘rÜa¸›\yäPr*Þç]<ܤÙI:ºJŽdßäw2{yêÉ©#ù·}JÅ Ûý¸†H9Ùq2èv'%§rËç>o9¸dû¼C‚ܤÙ¾%hEÚ¶y JSS“ïGÃ\¸p!^/ÒGJ˜õÄYÍýK¶ ÙFÌãkY¤M¤¦eá>Â]t“ræÆOΑ±ÕŠäq(9¹…p›Ùé÷yËó`‚' ¤>x0Eº‘@ (3-f®û\R>Ù¾%È–’™êB>¿Û¿¤mdjé ÷î ›”KEjI-­ì¬ÓIp#5‡ô’¥ßçm¡–ö,?ý~µ›7éLöIf°mññ„œ`ÌTöô…£üËœdÐjÉt HåÅ ›”“hÝÎI=3žzuCÉÉ $ ”vúÞ{ï͹Êãç`3ý„‘nr~:ñ–ëJ¦\õ'ËÕF8Â}t“r º“~†\R8”œ<E®pÿûÿïgµeYüxæ^‚ R›iè=‘n¤§o÷æâ§ý—l÷VuÁû¹Éê$¹Ý‰A7)';éH- TÒ;^Y$xáý°ä%Vgðýtµ[¶i9ð– ›£SȲ ­öc)Û|úhsá-&$²í+yÅ ‘#¤ µx…€të¾N¿\í–mVFªð„ùI¦“Dzoó«Ôy-RŽz!‘éj7¯r»#!r„t¤N¶«æâçƒò 43µßôE÷«<æü ¼šE~”zuW¶¿˜æÌÅ·ÙPvd§¶9QCîÄHˆ!A¯¶ªau_OêÂÙÊÉíd¨\¶á”©‹ÎfðÀ‰üJ†’›Û:O<%H=˜u"}‘)õd5Û†»1è&GÈ™8Ýj¤Ÿå̶ÈÞJ^ '’äꎌàÈÖ¾uëỎ“dávJ~f^Ùe�1›Ô‡Ô ODP:s?ÉÛÜA·‹™—\¸xa!RI®üÊÁ¦xJ`š© ráâæÅë2•I—¥™þŸN 'S]ê´PáXk.ÆFM^Á¶JNc›#/Ñ¡½êºÍ•Z.û"ö³Åc» t¬5c£&¯`[%§±Í‘—èÐ^uÝæJ-—Î}ûÙâ±]P:Öš‹I£þòË/“)ÄOO› ÍË•6Ù™—+m*4/WÚTh^®´©Ð¼\i“y¹Ò¦BóÌ4;`rÛy‰íU×m®ÔréܱŸ-Û¥c­¹˜4ê\A©Ð¼\i“y¹Ò¦Bór¥M…æåJ› ÍË•6Ù™—+m*4ÏL³&§±Í‘—èÐ^uÝæJ-—Î}ûÙâ±]P:Öš‹±Q“W°­’ÓØæÈKth¯ºns¥–K羈ýlñØ.(kÍÅØ¨É+ØVÉilsä%:´W]·¹RË¥s_Ä~¶xl”޵æbf£¶Ö[lž°J«ÈVébó„UºØ<a•.6OX¥Uä «t±yB~gLNc›#/Ñ¡½êºÍ•Z.û"ö³Åc» t¬5c£&¯`[%§±Í‘—èÐ^uÝæJ-—Î}ûÙâ±]P:Öš‹±Q“W°­’ÓØæÈKth¯ºns¥–K羈ýlñØ.(kÍŤQçÖk*4/WÚdg^®´©Ð¼\iS¡y¹Ò¦Bór¥MvæåJ› Í3Óì€Éilsä%:´W]·¹RË¥s_Ä~¶xl”޵æbÒ¨s=¦Bór¥MvæåJ› ÍË•6š—+m*4/WÚdg^®´©Ð<3͘œÆ6G^¢C{Õu›+µ\:÷Eìg‹ÇvAéXk.ÆFËmL…ÿ]í­~‰Öö.„Â7`$sÉ9l«ä4¶9òÚ«®Û\©åÒ¹/b?[<¶ JÇZs16j+Óˆ|õê«+ãõ4³T>€ÍGÎ#š|9ƒm•œÆ6G^¢C{Õu›+µ\:÷Eìg‹ÇvAéXk.f6j«a½Åæ «´Š<a•.(/ô¶ÿסº®G/£7žßƒ±¡OѺú ¼ô^oö÷¦¤­ò„UºØ<a•V‘'¬ÒÅæ ù09m޼D‡öZÞ2D1vú Æ e+µ\e_·ÆNŸS2Êýlñt®;¶‹â°Ö\ÌlÔVAO±yÂ*­"OX¥ Êûbþá?þ öž»™HÏä¸ÙÀÿ7ðaö÷¦¤­ò„UºØ<a•V‘'¬ÒÅæ ù09m޼D‡öª¦ Ó=rÓÉd6Æ0‚· ¤`[©åR·nÃ8Ò5«!kÆÅ ßR2Âýlñt®;¶‹â°Ö\ŒÚJC{_ÄÎÞñ”³»¢‘³èÚò$šû'š<ý‡Ã¼Ï[1¶UrÛy‰íUM¢7¢¡ùmƒÁ,Ëì Ô£º*à³ {ÁÆuhî8¡NÌ¥º{Q`Ðí6å¯;÷Žñ+Öš‹I£Îu…ÑTh^®´Éμ\iS^y·O£íþ»ãu”k©|h/ÎÞ.ü3s¥M…æåJ›ìÌË•6šg¦¥ž‰œÄ6G^¢C{USë ûÀ›ë±¸Röåó°x˧õÕðr« û÷xsýÏPûl™ËfËÑK^î2êêÎû£CüеæbÒ¨s=¦Bór¥MvæåJ›òË»¡¶µ¸ÿçO ±±@ ¾Èïéé@àôGnçùòI› ÍË•6Ù™—+m*4ÏL³&§±Í‘—èÐ^Õ”![�a >‚¦çÇ>÷^Ô·}‰«Q5cÖJ-—ºu›mxùM„»_ÁƒU•¨¨~ mýW”\åìg‹§®î¼?:įXk.ÆFmÍ=K·’)ÕÔ ÓÑÛ*9mÎ]Œ±38=¦êÐßûth¯Î•!åé$UËÐÔ­ö‰$¥–ËÑuk\ÃWm¡º¢U¾‚îpb^UØÏO]Ýytˆ_±Ö\ŒÚÊu\I½ŸÛtçÏ].`]þa::`[%§±Í9d´]ד‰lnábp v†"É4¥Ó¡½:Rã:†»^Š •‹žEÇà5ås²”Z.§Ö­1õº6?€ÊX0µh]#¹\JÇ~¶xêêÎû£Cüеæbf£¶Ö[lž°J«ÈVéÂò>Äÿõ÷ÿ {$Îì™ÃɃÁ=Øúø¯ÐþÏ¡Øk>ÇXè÷ظõŸÐÊö¿À¡À£3g ïüŸÙÿצÓþE±ß7ÿ´Š<a•.6OÈïì€Éils w¢±a:’}bÆeßÔU/F€AwV:´Wåeˆ~¾ÝkâWq«ë^C⫸¦RË¥~ÝÆ‚©ÑØ]oì³îE]Ëq„SéØÏÏÙºóÖè¿b­¹˜Ù¨­‚žbó„UZEž°J–÷!µ?Œ×ÑÜe~¾»;öšÃèj¼ñ¿ãWŸö%ß™þsÝ›~ŽšÈÿL Ó9 Þ³§üò„UZEž°J›'äw©w"'±Í9Ä*è>ð:Ö/ž_•‹›pt”C²Ñ¡½ª,ƒ9à™,¶¯Ýtgç\ÅÍsTZJ-—Úu ¦†‚Ø ÛYåØtð "sâíü-V Úm¹8VwâW¬5c£¶2‚wwÄ7á0Âs–˘˜º{èÄw<wÕâŒ_ù‡éè€m•œÆ6çlÃË£çÑÝ´ UrU²¾ ýWš_Ûth¯jÊ ûÚOXqOüÿW.Z‡_gš­û@6­höÙ#Ãn"|tVÈÕKRÞØ’ñä×=›°‚ÏévGêΣ£CüеæblÔV.àÃýŸãúœ8ø Žï?ZâÄÎÓÑÛ*9m®|ŒÈ�ÚâC]çãÁ¦#Ž uõ2Ú«š2D1ÖhN 9gñcÐmŒ¢ÿƒÎÌõ‘²0èv'ÕuçåÑ!~ÅZs1iÔ¹†õš ÍË•6Ù™—+mÊ/oÁºªxÍY~ð7Ø{6q¶/ó{2æ%‡éÈò,¨›¦“×{“rååJ›ìÌË•6šg¦¥Þ‰œÄ6W·15ü6LJº.ÁºŽS†ºR&:´×ò–Á¯ÃËóÁáån¤®î¼?:įXk.&:WÐc*4/WÚdg^®´)¿¼t®kÀšôçrÿüüÕ²'ÐÑ?1ózÓ÷&ÌÉûüðÌ0Õ>‡ßêMææñÞòr¥MvæåJ› Í3Óì€ÉilsN»‰Ñ¾7#€ªW£¥ç"G�@‡öª¼ Æ „>E°­%±Oo}õ~‹ Å#)J-—ëÖ˜ cà“ ÚšåXç—hmÿ½g­n³ûÙâ©«;ïñ+Öš‹±Q[¹†ÓƒaÈÛ³ÃèÜØ‚ž«…ó-ç0°­’ÓØæd\ÃPðùÄD=‹·ààÙÉø Yòz´˜éÐ^U–AöÁ›ÿU±ÏϹ³¨u©åRY/ñÛ݆:±9>¿Lzݨ¿½CmÙôVþºãðr·a­¹µ•0>î ͹§Û˜úû×.BÃÁ‹É¿äRþa::`[%§±Í9$zG :Vß2¤¼ñ׿›Û?ßÁžM¿àsº-èÐ^••Á¸ˆ®§î‹µ¯Ÿ¢~Ǽ×݃P(„Po7v¼—ë~Š»ÎŽ_j¹T®[ãòGxj~%*kÅŽ=·/V7}èí>ˆŽ7_B]MuüÉ*¥Íc“ûÙâ9RwâW¬53µÕ°Þbó„UZEž°J–gõȰŸ¡±ý¨Å{SÿïçèÞ÷ÚÌÁ£9L}N:tó9Ý™ÓRïDNb›s†1Ö’ýaö…Aw.:´W5e0p#´÷UÿíCFPcßî 7ÅdòOv*µ\êÖí5„ ºám Í}—`D¾ÆþÆåØtìJò/öb?[<ÕuçåÑ!~ÅZs16j+#è\߈—“A±¹ìX¿ +[B &÷áðr+l«ä4¶¹âS¸tiSvö“^nI‡öª¦ 70غ KZOÁò¡sÆ9tÔmñ¹,)Y©åR¶n§O¡uár´ZoWÆpê6ƒŠ­ýlñ”ÖÇG‡økÍÅØ¨­d¿§;øôvtÓÑ”i˜ŽØVÉilsV¦1qò×X~W%ª7`kÛ1ŒÜ’~L‡ØŽµ5wÇê¯Õ+váhÞWCnc*<€O‚mhŽŸälEûG'pv‚Ïç·íUM"êÈ9JB^· Á°ýAD©åR¶n£!rßÖ&¯k"œLÚ‰ýlñÔÕ÷G‡økÍŤQçÖk*4/WÚdg^®´)¿¼0>>8€é¯í=ˆ+kfîéÎüÞ„Y¿bçßÿ/Y‡éì>Ô›ý½Vÿ7C^®´Éμ\iS¡yfš09mΚ1¼kž:ˆ‹3' D‡ƒX+³ÇïÍnÇžk°äï!œë¼¢L¤Öù"¬Š½wVÿ[ª–¡©û<g2ÏA‡öª¦ 7qno#6O¦³C÷Æíèžœsª½d¥–KÙº5¾ÁÞå[s_ÝŸìÆÆÝ ®\F]Ýytˆ_±Ö\Lu® ÇTh^®´Éμ\iS~yVÏé^ŒæþÄî'ó{f~7.âWüçØûÓÞÞŽö·vÏ Óù‹š_à7G>O¼>&¯ÿ“)/WÚdg^®´©Ð<3-õNä$¶9+ÆpÇ‹héO¹zhG¬X€µÁs‰ Ù¸ûÛó88jußL—»6`~Åݨ©ßŽ=ïu£W†1†zÐ}°o¾\š»À–£—2_q¡8Ú«ª2;ñÌöLfm@·qãë·°êé.Œ+hd¥–Kݺ½…‹Á—±½w<û¶eDðu[#žîR³ý±Ÿ-žººóþè¿b­¹µ•Xн¶ëw̾§;ÐüÞï¿\ÀU—òÓÑÛ*9mÎJúÁÖ4&{_Á}±:»ke;¾5ã8¶e+ºÆ-‚î_ pß}hhÌ2WÆ4"ß¾ƒÆ…/ᘂ«ºÐ¡½ª+ÃM„»ƒ–CߥÍ3` :1„£û¶bEõ<,nú#FÜîUj¹”®Ûèyt·¼CÃ×ÓŽOnabè(öm}Õµh:V2Ú„ýlñTn/^âW¬5c£¶’åžî‚•˜ŽØVÉilsVäJ÷:<ü.v  \Æ?C`É<TT®@ëWæÕ‘Øß/ÄÓOtâ¢E·6=ØŠ…Kvcp&PÏD>ïYlÎyè_:´WûÊpcgÎblV�}£¡Ï0p5õÐ4"#§ ý Ï]@ØîÉÿ’J-—­ë6:†3gÆfÐÑïúô®¦–݈`d@Fœ â\8ŒKS™/”ˆýlñTÖ×G‡økÍÅÌFm5¬·Ø<a•V‘'¬ÒÅäÅÏ‚wìÆºÆF¬ÛØ„®Ð…øN9õõ©¿‹ÙyÇÑÞX;3L'ûkWއ¾˜ÉÏþZë<a•V‘'¬ÒÅæ ù09mΚqõ8šß‹EËÿ‹â÷bÿÆŸì d†¿ÀG{·£¾¦*çÕÃh(€PΫhÑP3‚#É¥Ó¡½ÚW¹=¬Qɰ×b”Z.[×m8ˆº:5“¢ƒýlñÔÖ·G‡økÍÅÌFmô›'¬Ò*ò„UºÐ¼ÏßÛÇã³ðVàÿéÆùOÿ/,XðW¨oÀñswï½´rf˜Nö×&†éì>Ö7“ŸýµÖyÂ*­"OX¥‹Íò;;`rÛ\.±ƒ¯p/ön]‡úú§žL|Åþ¹‚p8œXr\=4ÎíÅòM¹Gt“ÝÛ±±{,™¦t:´WûÊÀ ;+ÝÚ°·îôâW¬5c£¶`\ÀÁµ?AEåØÜ%gú’÷0Ž„ÑײmCSÉæVîa::`[%§±Í9DÃøL3z'³ß÷mÜø m«6Yßîs:´WûÊÀ ;+ÝÚ°·îôÚfüеæbÒ¨s]a4š—+m²3/WÚ”Wž<—²ªÿ‡…OâùæðïÏÑûÖ:<–æ˜ñ½Iw~¿‰C»7aýkgΚ¯5‡éÜÿ£‡š_¼13L'ýÿ¤§M™òr¥MvæåJ› Í3Óì€ÉilsV¦1zärÆÀù¼N®˜‚––ÞJ›E#:Ž¡£¿ÃÖ÷ bñ+86šï3¿ýG‡öj_tgÅ [öÖƒn°Ö\Lu® ÇTh^®´Éμ\iS^yÉ+ÝÿÏÿözãùt?ÆÀ+XWûרÚ;1ózÓÌ{“Ãtº?OÍ;#íÿ÷Ì0Äkûf†é¼ó^þ㬠Ütçÿ&äÊË•6Ù™—+m*4ÏL³&§±ÍY‰ÆŽÝ7¢¡ùmƒÁìË6lZьЬã¸X=vgÆRèØßFûñéÀ•Øow‘ ÈãÃÏ!¾Œ‰ô œfèÐ^í+ƒî¬tkÃÞºcЭÖš‹±Q[‘«/GÐôðzìíÿ>9¼|Q¬ÎæañæÃ[Ná®ÎKl«ä4¶9+t7Äë(çRH ºå½¨ã¤h¶’ºö:ûÊÀ ;+ÝÚ°·ît뀵æblÔ¹Sa |r ƒSëÿ]½ßb"çL ºíƶJNc›³’œ—7w!$W¢³-ŸïÃúŸ2èv‚íÕ¾20èΊA·6ì­;Ý:`­¹˜Ù¨­†õ›'¬Ò*ò„Uº°¼CøõÎv˜Í¾“Ç÷Å‘”×Ï}ï‡Ô®Œw^sóòO›'¬Ò*ò„UºØ<!¿³&§±ÍY‘ÀyÓÌ£³‹È5¤/gЭ‚íÕ¾2\ÄÁµppÔï•Z.[×íèA¬]{£Éd¹±Ÿ-ž½uÇ [¬53µUÐSlž°J«ÈVéÂò$pþa¼Žæ,•«ðÒ{½9ÞË ;5]lžß¥Þ‰œÄ6gEççf…˜•ñ ö®ÜÅ Û:´W•e0¦. Ôõ6ZZßFWè‚’GeRj¹Ô®ÛÛ˜ ÿ ºÚ[ü­í]…oÌš[A%ö³Å³·ît뀵æblÔVFй¾/Ë:eÙ±þ<ذ ý‰‰Ô2sW祶UrÛœµéþ,Ù|ÔâQˆ¢gÛ±¢>}(+ƒnth¯ªÊ`DÐVoüÿßYò™ŸÅ¥–KU½ÄŸ¹üÕ[¨¯®L©—Ø"J=r>¶¥ª§®lú³·îôâW¬5c£¶r §Ø3W®1ŒÎ-èIÎBžƒn»±­’ÓØær¸Ñƒ­÷Ôf=8O:5XØz*vhŸŠA· :´W5eø3†;Eeõj4ÄX|üÛ˜ÂÑÖ_à‘½gæîçmVj¹”­[ã:VV£º®G/'®üSú­«ŸÀÞ³êÑÇ~¶xJë.zýo м½aiÓˆŒ bСQlÅa­¹˜4ê\ÃzM…æåJ›ìÌË•6å—ÆÇ!|–þÚރع² /&Òß›º‡¾HdÄÜÉKÈ'm*4/WÚdg^®´©Ð<3͘œÆ6—ˆcÁsuÅ|Ô®Û…öŽ¡O&Oë=‚à›/¡®ænTÌ߀®Ëé!9ƒnth¯jÊpýÍK±tï7sƒ…›½Øú˜úIÅJ-—²u;Ýæ{Waï¹ôàÚˆUM�9°²Ÿ-žººKž¨ŠýùŒÊÅ;Ðs¥­ ïBEuöåšË£tlÅa­¹˜4ê\A©Ð¼\i“y¹Ò¦üò$p®Š×Ñœå‹ÑÜ?9ózÓ÷&†éüã‘\AwÑhês»gç› ÍË•6Ù™—+m*4ÏLK½9‰m.Æ5|µ÷IÔTÎí'+=‹ŽÁk®ŠLcôà¬Mž¸´bD£iWÉ)Ú«š2˜zOïì™}+DtÃ]Mx¤ùK܈ÿ!1IꨂËx¥–Kݺ`hï‹ØÙ;ž²ˆF΢kË“3Ç9˜<ý‡Ã¶åÒéÐnËE]ÝÝÀ`ë2,|ŽˆqÃ￈GÛNa|äú>nÆ#Ïu#Ù2”a»(kÍÅØ¨­Œ s]^Ø1ûžî@ó[x¿ÿ² ÷:ÅvlãGxýKGî›ò:¶UrÛ\¾1Ú߆æxÙ†à'LJñ– zÇo¥MÂFÙèÐ^Õ”a CmËãÿ;çR¹JÉjùߥ(õýYÝ>¶ûïž]Y–ʇö⬂qøò¿©8êê.v|:܉æ‰*cÁ'w¡÷†ãZ76¬qÿè¿b­¹µc´ñy(„‘H¬ ’{À¾Eèti“r¿Ôà±oÇ£ñ«CUƒî<°­’ÓØæŠgLMàÒ¥‰"f‡–~ö4Žî{õ2<½*ýß”íUM Üú-^ñ,v¤ž@ϸ4ç˜$µ8¥–Kݺ½¡¶µX±~[†ºH_ÞAÄþ¨›ýlñÔÕÝ4®ö½†ókP»ªuu£vÁ=X´|eìç<Üèƒê»ýÙ.ŠÃZs1³Q[ ë-6OX¥Uä «tayÝØýóÿ‚ºæÃšø3>o;üÑ_ jÑCX¾ºíÇú,Þ;÷ÿSa ÚƒÇkïÁbõ^QùSÔ½°Ë6¾/r¼×”ož°J«ÈVébó„üΘœÆ6ge'åwU¢jq¶¶ÃÈ-‰°e6äv¬•€¹¢Õ+váh|žŒÆž—ë“CÕïFMݼÐð:ƒî<éÐ^••Á¸Œï• ÎG©åR¹nÑÓ¸t+™rûÙâ©«;^þPìxwY,à– Û\êѰù FÔßôÃvQÖš‹±Q[˜>…Öº70(’±v÷†Ÿ¢â¾WÐ;Åõc<Óõ}ò…¹ÜÄHW–/H ᪬y;öýƒcS±€ë¸0’z/eöJNc›³f ïÇš§ââÌ#—dHbkåñC•KÐøëvìÙ±K~ñÂÜí‘°eyMbҞʟ¢~Ç>Ϥl`êÂ\a™Ú«š2dkG±¿Ÿÿ7\òõ#òƒ\ÇùsvÜF—ûÙ⩬;ãjZZŽãjzã0þŒ©›ªçûg»(kÍÅØ¨-Ȭžõí8gLc²o–TÎÇêàplç4ñ®—±±{,ùÂ\b¢£ýx÷óX¾hš:û0ᥛB±­’ÓØæ¬Èì¶/¢¥?e[ã"ºžº/Vo °6x.qÀn\Šýíyëg¿Ê£iÞ/,ÿV4žä-7EС½ª)CáÎíØ´çƒÁ”å�~·õYì ]‹¿ÊëÃÛ­¿GhÌþÖWj¹Ô­ÛtnÞŠ=RëE–=Øúø¯º!Wc¡ß£õí>Œ)8?Á~¶xe©»p'žjJ›”P¶‹â°Ö\Lu®a½¦Bór¥MvæåJ›òË‹à«ÖGð— aÁ€Ê%»Ð7ƾ@#þö/ïGëàõ™×›î¼7aN^ïÇ<ºu x¸q~óÎ?áÀÁÁøì¼9ß[@^®´Éμ\iS¡yfš09mÎJ¡À&Ãf€2ÉÞWp_¬ÎîZÙŽoãCÍÅ8ŽmÙŠ®ñ<†#šó]žÆêuì;:€þb€Ó—çE‡öª¦ ± ;Øÿß™–»×ËLÌr2ýÜUqóÅ–?ùœR”úþì,žÒR±�ëã¾GWã=¨¸ë™ü¶ãÉgQqÔÕÌø¿ëW§´‡Ôå^Ôïî)}²L ò9T8Öš‹I£Îô˜ ÍË•6Ù™—+mÊ;/zûv¾€uÿ° ½r_bì ð‡áС1‘ìl²¾7&{^Ç?hGóƇQ›œH-ÿ÷æÎË•6Ù™—+m*4ÏL³&§±ÍY‘+Ýëðxð»Xÿ%Obø %óPQ¹­_™W¿c¿xO?щ‹]‰½/2ŒÐû¿Fcí.ÞÓ'Ú«š2Ä‚îwßBð› ‡Ãs–Kr«—¼ì*Î ~‡ ÃÍK-—ºu;‚wwÄ7ê%¾œ<ΉmßaðÜÕø±ŠÝØÏO]ÝÉIÕŨª}[Ó'ÔÛT‡ûjñŠüÞš;üÜ&lÅa­¹µïu’á“o м/¼ËdC#ƒ â<ïéÎ Û*9mΚqõ8šß‹EËÿ‹ª*cõõc<ØBĈõoÃ_ࣽÛQ_S…ÅMĨe s£ýïbw í½ã}«ÁÀàE\=Ï{ºó¥C{US†i\þ°ǯ§_•»ÉãÀáQõguJ-—ºu{îÿ×çlcêžYžŽýlñÔÕÝmDúšñèîS˜3Å^ømüo›?Wr&ÛEqXk.ÆFmÅ®{äŠÐ£‰I‚bKåâè¹ÒÖ…w¡¢º{‡R¬ØVÉils¹ˆ†{±wë:Ô×?@ðd2¸–+ÕWî\1Ëñè0c¸+ã3–Ç–ÊZ4õ ã«Ö¥±ô½¨ß;ˆ©äëÈšíUM¬†—ÿí= 1Ô’Ï*E©ïÏÎbx¹¢g–§“Ϣ⨭»›=ýíÜ“žÃ¿ÂÝK?ä=Ý.ÅZs1³Q[ ë-6OX¥Uä «tay"PûÃÄÎgβ�?ßÝ{ÍáĽNñ¿ãWŸö%ß™þÿïlük,|Žˆq47`éæý9…¾›ñÀêÝ86ës‹ý¾ù§Uä «t±yB~—z'rÛœ3¦[±pñ.„"QL ¿ç} _c ï#4?òº'U‡DzС½ª)C,èî܈º¶Ï&»ãY¬xp-¶vôCõ©ïRË¥nÝŽ s]^Ø‘R/±eÇúGð`Ã6%Ï,OÇ~¶xêêŽ÷t{kÍÅØ¨­Øu¯Sì5ÃØ¸39Û£1Œà“»Ð{Àq­ÖN¼,°­’ÓØæ=‡àÆ×Ð;)“4ÝÂÅàlëì£èÞ°!e²6²¢C{US†Ûˆœ>ósâƒX[ë܆í=c±½´Z¥–Kݺ½†Óƒá¹WúcÇ)[ÐsUý,†ìg‹§®îxO·W±Ö\ŒÚJ,XŽÚ±Ã™ÆÕ¾×°b~ jWÕ¡®îaÔ.¸‹–¯Œýœ‡{}P?€ËûØVÉilsÎ0®ž@ËŠ,¨}8Ö?ÖaUm ª-‹ý\€Ê{ÝTéA‡öª¦ ÓýøœH¿§Û¸ŽÛÿæ5ÄhòOª”Z.uë6Œ;Csîé6¦¾Áþµ‹Ðpðbò/ê°Ÿ-žºº³º§;ˆ†äÀ*±]‡µæbÒ¨s ë5š—+m²3/WÚTP^OÚ›_Ds €æ¶ƒxëƒãù¿7þû ¶>„.økÔÖÖÆ*e©­ý[,ûûW0Iö™ß›Ph^®´Éμ\iS¡yfš09mÎñáåU‹°<Ù7Î, /cÿà5åW!u¡C{US«{ºïÂ}/b{iµä³JQêû³³zdØÏH>Ã\%ù,*Žºº›Æèá}èèJ»§û6&»_îÐU×ñ+Öš‹I£Îô˜ ÍË•6Ù™—+mÊ/O& :‚_üÕãõ4³üà¿àïw4s–/ó{Ìß«=X¿¾ Ÿæxm¦÷ŠBór¥MvæåJ› Í3Óì€Éils1ÆÐÓò&Ž;0”Ug:´W5e{º7£á峇ÉÊ=Ý+þä‰o•J-—ºu;‚Îõx9µ^bËŽõ«°2þ$‚äËb?[<uugu¢ª +;Î1èv)Öš‹±Q[¹‚c›–`QãoÐ=x>yw‘ð�‚6¢cøÏ‰—å$g ÿ€ãñûS9÷¸°­’ÓØæ2zû_™{7yû‡y¥;O:´W5e°¸§;¸Ïw«oc¥–KݺÍ~OwðéíèöÀãÔüL]ÝIÐýj_J9³[DuM6ísÿäƒ~ÅZs16j ÑKwcðVúîØÀÍÞ_âɼïu*ÿCH}9‰mÎ!á êfõ‹w–Ê•f™©/¯SS¹§»kîÜ�Æ \è|Š÷t˜3¯Œ1õ:óžn—SWwÙNT]C(ð0Vwœ™{¯·ÍØ.ŠÃZs1³Q[ ë-6OX¥Uä «tAy}Al^Ñ„sÉýôL¾1þ–5xøW‡³¿7%ýå—_àPà‘™3†ñÅ<cøØ¶}8žõ½Vÿ7{ž°J«ÈVébó„üΘœÆ6çp'ÒgÉÝú$j«¢nSú#sŽü(Ú«š2Xøž‡%Í_òžîYu’\*BsÿdòuêÈgQq¯»É£Ø4ÿ.T¯?‚«É?©ÂvQÖš‹™Ú*è)6OX¥Uä «tayŸãÐ?>†Õ[߯‘Þ>´·ïÅ›¯nEóºQUó2Þüô ‹÷¦þß>gÎÞÉKœ1|p{'>Ïú^«ÿ›=OX¥Uä «t±yB~gLNc›sHä[ žŸs­ 7B¿Äý«;pvÎh#ÊD‡öª¦ t?ƒåë·Ý9©_ZÐö~?F£êÛW©åR·ncA÷Ú:¬O{Nw ù-¼ß9Vs걟-žóuwcC§1âyüеæblÔ9×0¸ÿyÔVUÆëª¢¢UµÏÛ3£®ƒg uÀ¶JNc›+'™Sc!*ªŸG7'XË‹íUM² •uN©åR·n³ÜÓí ö³ÅÓ¹îØ.ŠÃZs16j+æó+ D#a õ‡<Ht Ç÷ÅhÉQ·sg uÀ¶JNc›+§X¿;ö F"œó"O:´W]·¹RË¥s_Ä~¶xl”޵æbÒ¨s ë5š—+m²3/WÚ”_žÅ½N?øì=›™ù½ ¹òr¥M…æåJ›ìÌË•6šg¦¥Þ‰œÄ6G^¢C{Õu›+µ\:÷Eìg‹ÇvAéXk.&:WÐc*4/WÚdg^®´)¿¼Äó+ON|fÞëÔøóðWËž@GÿÄÌëMwÞ›+/WÚTh^®´Éμ\iS¡yfš09m޼D‡öªë6Wj¹tî‹ØÏí‚Ò±Ö\ŒÚJöçWvnlAï3tÛ*9m޼D‡öªë6Wj¹tî‹ØÏí‚Ò±Ö\ŒÚŠyOw2™ääó+é¶UrÛy‰íU×m®ÔréܱŸ-Û¥c­¹˜Ù¨­†õ›'¬Ò*ò„Uº°¼¨ýa¼Žæ,•áö³xo~Ÿ)¬ÒÅæ «´Š<a•.6OÈïRïDNb›#/Ñ¡½êºÍ•Z.û"ö³Åc» t¬5c£¶2‚Îu x¡ŒÏ¯¤;ØVÉilsä%:´W]·¹RË¥s_Ä~¶xl”޵æblÔVÊÿüJºƒm•œÆ6G^¢C{Õu›+µ\:÷Eìg‹ÇvAéXk.&:×°^S¡y¹Ò&;ór¥M…æåJ› ÍË•6š—+m²3/WÚThž™fLNc›#/Ñ¡½êºÍ•Z.û"ö³Åc» t¬5“F+è1š—+m²3/WÚTh^®´©Ð¼\iS¡y¹Ò&;ór¥M…æ™ivÀä4¶9òÚ«®Û\©åÒ¹/b?[<¶ JÇZs16jò ¶UrÛy‰íU×m®ÔréܱŸ-Û¥c­¹5yÛ*9m޼D‡öªë6Wj¹tî‹ØÏí‚Ò±Ö\ÌlÔVÃz‹ÍViyÂ*]lž°J›'¬ÒÅæ «´Š<a•.6OÈïì€Éilsä%:´W]·¹RË¥s_Ä~¶xl”޵æblÔäl«ä4¶9òÚ«®Û\©åÒ¹/b?[<¶ JÇZs16jò ¶UrÛy‰íUÊ ëRŠLÿO§…Š“©.uZ¨p¬5“FkX¯©Ð¼\i“y¹Ò¦Bór¥M…æåJ› ÍË•6Ù™—+m*4ÏL³&§±Í‘—°½æïüùóXºti2E©‚Á`|!½ìÙ³¯¾új2U^ò=:”L‘¸p1Ý ¹òr¥M…æåJ› ÍË•6Ù™—+m*4ÏLó€’œÆ6G^ÂöZÖWf ºõ$'™†††’©òúì³ÏÐÔÔ”L‘Ø«¹w:äl«ä4¶9ò¶×°¾2cЭ ¶Ý4²c||555ÉÙ‰½š‹ÉN‡ ¯,DNÊÔ¹pqóBùc}eÆ [?2œ[†—»‰œÛ<È^ìÕ¨dr–îÙgŸM¦ÜíäÉ“žù®vðÒº!Ò‘Û®bäâ§`‡ý£{1èÎŒA·~䪲Û\Þ×­{5*™ì�Üv–.¿dñ ’¨¼äÀÅ-ääÃOÁ‡QºƒîÌx¿­^äBК5k’)÷`;Sƒ½•L6LÙ@½€A79ÉKý£ð[°Ãàθ^2ã>]/n½¢,'$¹ Ú5J%sÓ¬‹¹øm‡õ§?ý‰'Q¹qè Ýä²ÝÈ?ÍÆ [æñ™[Û¹—Ží½‚{*™—Zü¸ÃâA%Qyxqø²ß&ÐaÿèN²Ÿæÿ\ ºõ!# Ü8´Ü$Wá9€½¸·¡’ÈÀÍF:ÝDä/Þç·`‡³ôºƒîÌtëÃí·Éwc[³Æ©$^›$Èít•‡¯ø-ØapçN\/™1èÖƒy,*?ÝŠ÷uÛµI%që$VüÖ‰ð¾¢òQ@^Ûöt“p½d&uâ¥Ñ…”™7{aíÅ ›JâŃJ¿Ý<x!ržWGÕ0è&7àzÉŽW½O޽ðT y0ïë¶·\*‰tþn“ ƒn"RMž¿*Ûž×ø­¿ðâh-?à~+;ÝÞfN°é…cg¯îÇÜŠ[.M&Ÿ‘¡'^à›ˆT“«r•Àk¤¿-¿õÄ+9îãµçÛ;‰A··yi.$¯ŽØr+Ö$Í‹3ó é@¼vu¾¼’Cä<¯¯~ Bt»×Kv ‚¼M.VyißàÅÛHÝŠ[.Í«÷zøíÊ/^ˆœçÕ“{~ë/Ø?º×Kv º½KFˆÊÐr/á}Ýöá–KEóê•ÝD¤’ô/^¼õFø­¿ðÒPO""§ñ¾nû0覢ÉÙ:™Âkt‘J^äüÖ_Ⱦ€”DD™ñ¾nû°©(æì‹^ä· Û«÷Þy•—'bÐMe1z'®ÂH&gLžÀþÃá¹÷Ö»ù`ýÈ}Ý~š`SÝT7!"ÊLNHʽ{D”§puñ+jéKåC{qövòu~ĺq7¬¹¯Û‹OãpÝT¹â™ Ðg‰£—ÑßùÍûоûÃ4"#ƒ ßàYq"…¼7 (Œ;C¸>§c¸‚ãûbTǃý£û„ßÅú†-)Ë6¬_± [þˆ#KÖ»qýPžtSQ<5|Òwg‰ÿŒáŽGQi–qñô\éGë»PQÝ€½C‘äëˆÈnÞ»cÁºª9}c|©\…½g%(Õ ûGWŠ|‹ÁósÛšqñ]lÜ~Wý|6„uãn\?”'ݤ?ß…¼ÁÖeXøã:†ß¶ÂøÈ)ô}ÜŒGžëÆdò•Däw#è\߈—gõìXÿl؆Žþ‰äëtÁþÑ•2ŽH»© @ã¼'qpt:ù7bݸ›/ÖO¬<áAW{klÿðK´¶w!Ä‘AcÐMúóÝYHÑáNlÜÙƒI)›1Œà“»Ð{Àq­ÖN¼ˆ|ïN†c‡TibýFçÆô\Õ퀞ý£+YH[Ò‚þØúñ-Ö»i¿~¦ùê-ÔWWÎ._åØ|ä<¢ÉWQn º)‹ØÉèItîÞ…æö^„£±NÈ`dàk„§<veØwg‰§qµï5¬˜_ƒÚUu¨«{µ îÁ¢å+c?çáž@t0JäúƸÌ÷tSß¡³q1^LþEì])ü¬«Ûˆi#.šÛ>@ÿ¨Ï×ëÆÝt_?Æ9t¬¬Fu] Ž ^Æ”ì+Œ)Œ }ŠÖÕOhx ’: º)³øFfÞç7‹›ŽãÊW­XXQ‰êúv Å·:ðÝYb>ùª-‹PÊA¥¹Ô£aó;Œp(QÑtêã¬îé~Íýº ¶fÿèJYF¤Q ëÆÝt_?Óýh¾wöžK/£›½<I¦)Ý”Ùô)´.|ÐUSçðþsO£íëï12ð9>n~Ïu%_è><Kl\íAK 'ð ²N}cÜ:×5à…³ûÇ@ó[x¿ÿ²–CÙ?ºÑMŒö¿‹Ý´÷^Œ·;#2‚ÁpâÊš¯±nÜM÷õÁÐÞ±³w<eĨhä,º¶<yçÄ,ŸŸƒnÊb ÃÁí3™q±OnëÁ LãZ÷KXã¥3[¾;K,¿9…P(„ÐÀ"±hLâLÿI>‡¨dõqYîéÖûG72†;°²ÒaQ‹¦ža|Õº4–¾õ{c[±nÜMûõsû4Úî¿;Q¾ ŸoA7ef\A_Ë*Ì_P‹U2ônU-T/ÂrùY¹—†úí,ñmLv?{äþ›¡qDoAÇê{QQµË–?Ž–PêÙJ"*ˆV}£Ðíõ\Ø?ºÑô`+.Þ…P$Š©á÷ñÜ£oáëña ô}„æG^B÷¤äY7î¦ÿú¹¡¶µX±~ÛìÑP—wø\r º)³øÊŸ`ÑòUi÷½=ŽM¿ýc:*ñßYb¹gq=Z¯Ç~ŸÆx÷ ˜_q?šäÊÜõcØòLÆ/$¢BiÔ7Æiwz.ì])zÁ¯¡wRî©¿…‹Á-ØÖ;kŸ£èÞ°Á°Ž7:ä‰uãnÚ¯>Õ†_<µÝ''fÕaÐMYLãjOZަõ"|1q€’ü‹Ûùï,ñuô7?Ÿô˜<À’y¸ku¥ŸïÂ3ùZ¢âéÓ7Æiwz.ìÝȸz-+j° öáøI¬Uµ5¨^´,ös*ï tÓS[•­X7î¦ýúñ݉YutS u<‹ÅUiÏå3—ê5ØÝ{Áó}w–ØÀÔW¯ciÍX¶¨•Kè ãr'õ‹pë©X-Qq4êãt»G=ön?9^µËgFŽ$—†—±ðš·NdÙŒuãnÚ¯ߘU‡A7e !P5µ/¥Ý¯ñ 6Õ-‰ý}kì÷D{èŠë;ž%N¿ý6¦&.#ãÒÄwÒDÅÒ¨oŒÓîõ|°tc =-oâøU>²mÖ»i¿~üvbVÝ”ÅUôžÅîø}o©d妨X$™v?ÿ%æì¼DêèÓ7ÆYÜ£¾yÿ©xÿ¡ö®4z'®Î­>†ˆuãvº¯_ž˜UƒA7e½ŒÓgÒ¯Ö¸u~ßD<tFÏwg‰9;/‘RºôqÙîQ×ûGW Q—évØâûDZnÜM÷õ㻳ê0è¦yp² ß%æì¼DÎó`߯Ç!\Ÿó¥¯àøþ£Õ®ƒdÿèJá?`]ÝFì˜uËÆ6¬_± [ïïDZnÜMûõ“ýĬqs œÇ/ º) & òÝYbÎÎK¤Žn© XgÎL›¶T®ÂÞ³7“¯ÓûGWŠ|‹ÁósÛšqñ]lÜ~Wý|`Ϻq7ß®¯žh.Ý”™N“ùî,1gç%RF·‰ÔbAw纼°#µ,ìXÿl؆Žþ‰äëtÁþÑ•2ŽH»©{kç=‰ƒ£>žDŒuãnÚ¯ÝN4—ƒnÊB£É‚|y’³ó©¡ÙDj¸†ÓƒáX‘ÆFçÆôh9ûG×±‘VqßN„nøx­°nÜM÷õ£Ý‰æòaÐMY„qøŸ g(}#C÷Îß ä¥É‚üz–ظpè´5Ç:Çæ·pðÄ¿q ¢’iÔ7Æe¾§Û˜úû×.BÃÁ‹É¿h†ý£»„ßÅú†-iõ2"m Zú'ü}0Ϻq7í×n'šË‡A7eauŸß£èþsòuàdzÄÑóènZ†ªYå‡Å›#å.š¨xõq婸Yì€êZòuaÿè>YG¤uâéç?ÖpB¿°nÜÍë'Ë;¢cÃ8ï¹Íåà›²ˆˆ5¬@ãÖ)gî^Bcí½¨©{û¼tŸŸïÎ߯ä±ñ“EOáÍîS8.ë#a|Ü‚_tœÓ°ÌDNѨoŒAçúF¼<«”{ºWaeKHë¿ì]iô8ÎyÞïmL]øyO7ëÆÍ´_?±þqô$:wïBs{oâĤÁÈÀ×OqæüB0è¦,²Üçwã îgo$ÿà¾;KA(ðDò‘8inö¢éɃM&‰¨PõqÙïé>½Ý£ÑätÁþÑ•¬ž2²¤ý¼§›uãVº¯ã:V𣡿aqÓq\ùª +*Q]ߎ!Π–7ÝT€Ä‚ù÷a}÷åäß<Àwg‰§0ÔöRü‘8³M#ÒÿZÇçÐÙË£}c\@zoaL}‡ÎÆÅÞÓÍþÑ•ÂX»üÙ´§ŒÐÜöúGçž4÷Ö»é¾~¦O¡uáC„®Æö çðþsO£íëï12ð9>n~Ïu%_H¹0è¦ÌâCGB…B‰À uì[ô÷þGN|ç­!‡><Kl„âéÕMØw¤'¾ûŽ}€öæ§P[µ›rø$Q±têã¬îQÍýú=µšý£ e‘F1¬wÓ~ýLa8¸;“Ïã–Q¢OnëÁ LãZ÷KXI¼ŒrbÐMYŒ¡{ý¨k>Œ¡‰?ãÖÙ¬®¾ U‹ÂòÕ­Mzèê°/ÏO#2ø{l¨ç�ºj)6ì?Åz‰J¢Qß º×Öa}ÚsºeFï÷û/C·Áå ìÝé&†Ž¢£õ—±6øK´¶w!¾Á“ q¬wÓxýWÐײ óÔbU]êVÕbAõ",—Ÿ•K˜3’”²aÐM™Ép’º70x+Öe—ѽ᧨¸ïôNFqýX�Ït}Ÿ|¡øù,q4‚ðÐ�B¡AŒDô<|&r”N}c\–{ºý€ý£‹ÜÀÙO¡¦RN‚ÜÜ;°¿ jÐöÕ5Ÿ—¬wÓ|ýć—ÿ‹–¯BÝ3ËãØÌ•aÐM™M÷£¹¾çŒiLöíÂ’ÊùXŽuÓïz=w‡ÏGÇ1t¬3ñÚÀnttbŒÃ!*v}£0Âюݱ¾"Ö_´¾®Ðh=?ûGW1.ÄÚ»*P¹ø%t _‡ !Ðp�#WO åÉ=òñݬwÓýLãjOZŽóÖ›R1è¦,"øªõÔÔ.Å¢ªJT.Ù…¾ñ0úƒÔ׬È<ó«kùð,qô<Žl~�•ñû2 vUVÕÖ`~ý[øŠÏT$*N}£0pëì<^sw|˜uå‚ûñÀ‚Ÿ`Á‚¿B}Û€žW1Ø?ºN4@UŽX×u)±OŽ.A„q ½[ŸG0ìß‘¬wãú¡|1è¦ì¢—ÑßùÍûо;6›ÂÄ¥0Âá˘ðгùüw–8ŠËqWE5–ºqnfØäMŒû%žØ{ÆŸCI‰ì¢Ißg\ÀÁµ?‰Ÿ`s×w˜2ä‘Z› £¯e3Ú†¦’/ÔûG7Jì§bkïµÄd?½|;‚ïíDÝÂíèõñc±X7îÆõÔÔÔàüùóÉeà›´ç¿³rмó¶àØõ´Î~¦ìDD1Ò'TUànyTV¼»Hݱ~ñfo�i73-ûGwº‰p÷<¼®ý£S‰“ã±v?t伦úå‹uãn\?MMM8tèP2EÙ0è&íùï,ä4Æ»_ÀüY•2[ïh\Šû6çš$¢¸ä•îoí: JŸÀŽà;Ô-‹õ›ñ¿êƒý£{ÝÆTx�Ÿ|2ˆ‰Û£èÿà0zÏ^ePǺq7¯ ¸%ð&k ºÉR0Œ/ÞæÃ³Æ%Û¶kw÷ îzÝëïCåâ—qD†ÃQѤOܳgO2åu¢á#hzx=ööŸ^¾ó°xóa„uœ\Œý#‘mÆÇÇãCÌɃn²ôì³Ïâäɓɔ—ùñ,ä-LœýÇÇãÃê©I\óÚý¦D.$ýâgŸ}–LéÁ˜ cà“cœ˜ÂXÿÇèêýZÏæÍþÑ톆†âÛÍ¥Ço{õÕW¹R,]º”÷uçÀ ›,qr"¢Ù¤_”3ûD¤ƒîìt—÷³ÉIÞ×mA7eõ§?ý)þùug®ëú$rŠœ„”3úºóc_ÁþÑ]8d5;Èå##Ö¬Y“L‘:á}ÝÖ¸‡¡¬tLýº3çA%Qiü2a ƒnr®“Ì8  ¼8[÷\<I–{3ÊJ†.é3YÐ\<¨$¢Bùeû ¹r%Á ¹÷Y™1è.s(‡–ÏÅûº­±7£¬äLžn“¥òkÐ-; "*Ž_*üØ?JàÛ]tgÆ »|8Œ:;Þ×m½Åe:ÐÐý¬¿wæ¼’C”?9¸J½š!¿û¥ßðã Ýîà;3ÝÎÑžé}‚ԻΤJ‘é„„ìGôx R騛Qœc²s“Ÿ²ÁÈÐrIë2|ÆÜèÍ?ÍòÉO93'¨,º½”…¹Hùå@Ú|Ì…Ynž±%ÊLîO“~ÂÜn~ûÛßâÉ'ŸLæê#Sÿh–9µ”E'RîÔ>2µ”ƒm³Ì~;ùP.r¼a® 9x—õ`î§Ó¿ íMm§R~i§Ò^Óë…Á ½dû7÷Ò'|ûí·ñ4G f&Ûå=÷Ü33÷‰¹•öJ º)I:kÙ0²-Òñd:ãç¹Êg.ò:]ÈÎ7SÓÊLd'9hȴ͘Á™XèåÛWètà$û²LeL_d]“3¸N²ËÖ¥/ ºí%}^zÿOÿÓÿïûx'È>0=ÈN_Ø.tSœl4™6”ÔE6&/`ÊŽ:S¹RÝΞ›#¬¿]1 Ê—HdÚfÒ¯žŒLe^ѱZt»â›O #m€œ“O;ôã¼ì§3ÕEê"Çh í•ë‚ô!~(e„T¦zI_tÛw‹A7ÍÈv†Ê\¼Þ±È÷ÏT.sÑqøK®+òC”]>'#u9àÊÕWH0¤ d¬ö{ bœ—+¸ôóÈm˜©NÌ…£Öì—ë¸Q¯_*U®R?”À ›fdFc.ÒÙëÀê,º®¦ÕծЩ”i»1ÝNZYõºN„cuÀÈ“’åau,â竊r(ÛI"ž R#×ÉH¿Ü&«mVǶÅbÐM3²Ñ“!ʺÈÖêÜ)d»r Óz%R%Û‰: Pu“­¯Ðýêb¶[¤>Èy~m‡ùÈv’ˆ'ˆÔ™ê[9†b‘ õ”ívFŽÀ¸ƒA7ÍÈÔ¹ÈY<Ý:•LWst½ŠcÊ´£öó¢|eÚväàB׫J™†°êÞWdº/‘WgÊ+S;äÁ{B¦“D þÔI¯kYtÞKê#SÛÔýøº ºi–ô3U:n,égÑýpö\:ÃÔaiŠF”ŸôÑ1:žˆLå×¾"}DË‹û¬ìÒG%ò*·Zé}îìd¨}êv+ ëêÝ4KêU]îãÎ$õ,º_®ø¦î¨u^·Dv3·9˜ðÃý{©û¿\]L=ËaÌîàÇv˜¯Ô@s³¨•Z× ¸sK9ľt6Ý4‹Pš‹Î̳è~;{nŽdàP4¢ü™]~º%Ã&觾 òø˜0wðë~:æé›H-³_[Ùóc^äá(ŒÙtÓr°å‡-éHývö\vÔ:N�E¤’û 9hòÛ“PóJ–»È ¿m{ù’}9oƒPOÚ ƒÇÂIñæl º=BÎ麤ʔ¯Ó’M¦×격©­é²XÉôz]–l2½V—Å«2•E—¥™þŸN‹[dúnº,ªeúL]·ónï3Ò˜¾üòËøbJÿ½¼\i“y™ÒéI1åÌ•6š—+mÊ7ϪC0ó²½W”’—+m*4/WÚªÌD¥Ðµmå*—Ëí×uíf\'™éZ/ÂMecû+ë®|ô¬y IcÊÔ˜ ÍË•6Ù™—)¾‘SÎ\iS¡y¹Ò¦|ó¬:3/Û{E)y¹Ò¦Bór¥­ÊLT ]ÛV®rù±Ü~]×nÆu’™®õ"ÜT6¶¿â±îÊGÏš×_6]Ë)¬Êæ—õKd¿n3~,·_×µ›qd¦k½7•í¯x¬»òѳæ5ä—D×r «²ùeýÙůیËí×uíf\'™éZ/ÂMecû+ë®|ô¬y ¥6¦Ôa¼™†ôæ“'¬Ò*òDz:}#)¦œÂ*]lž°JšgÕ!HžÕ{KÍVébó„UÚªÌD¥Ðµmå*—Ëí×uíf\'™éZ/ÂMecû+ë®|ô¬y ¥6¦Ô &õw‘ož°J«Èééô¤˜r «t±yÂ*]hžU‡ yVï-5OX¥‹ÍVi«2•B×¶•«\~,·_×µ›qd¦k½7•í¯x¬»òѳæ5ä—D×r «²ùeýÙůیËí×uíf\'™éZ/ÂMecû+ë®|ô¬y ùe#)9£;}cF2i#«²•·Üå)3Q)tm[¹ÊåǾ¢ÜëÚ;ƒÓcÑdÊ>^nÃ~l‡ù(û:5ÆpúôT«Ú«®õìD¹Ü´íä…réYó’Æ”i¯©Ð¼\i“y™ÒéI1åÌ•N˜Æ‘Ý»ÑñE¦¼”÷Ã>Þ‚öØë2æ'“gÕ!˜yÙÞ+ Ï›Æè‘#ñ2gÎOø2ôA¼Ì¡Ø1åœ<«÷å‘¶*3Q)tm[¹Ê¥¦Ü‰¾b`:™Ì&Ù?J_a7«r)[×£=踞Lds ƒ[°3I¦íãå6ìÇv˜uë4Œ#]ƒ±²f\ âñ!(¨WµW]ëÙ‰:vÓz´“Ê¥gÍkHS¦ ÆTh^®´)‘÷ùÌYåÂÞ—;¾‘SÎ\é„(ŲhB0Œ/@`Öï²ì Ô£º* IÐE8¸1^æLeM¤`[ã߯ËÌ ›¼¤ìm«LW:Ô”;ÑW44¿=ÓOÌ]ÌôÚÝáN46ìBGÆò&—};PW½ݳø±æCÝ:A°qš;d¨siG î^Tt¯¼õìD—w=ú{d¥û¿!Å©iLî;«¬n£±Þ™xs=WVÄ>où£wjÊíî2•B]Ûr÷•?öÊÖµUÐ}àu¬_</þÙ•‹›ptÔþ ²r9Àí0êÖ©U0ø{¼¹þg¨Œ}vEåØrô‡—­¼õìD«ù ïRq‚û¿!Å©iLÖ;¸ÄâìYeuM¶Á@4|MÎ}ö½¨oûW£*vWÖeSSnw—™¨êÚ–»¯tø±¯P¶®³ /žGwÓ2TUT¢º¾ ýWo%3쥮 «çÇv˜uë4ÛÉÀ›w¿‚«*QQýÚú¯ØÞ'™ÜÔ^u­g'êXÍg¸/žp#÷CŠKmL©Ãx3 éÍ'O|ùåñ!׿F’:ì8þû¦ŸÏœU®ùû×q$dÇgÎN§o$Å”SX¥³çMãøï_Äßþ訨Z†¦îóø<ëkRÓ…æYu’gõÞRóD"݇ÈWo¡¾:¶ãøá_ã»?Šï8¬Þk•'¬ÒVe&*…º¶åî+ÎmSÓwúŠdÿ¨ê`^X•ËÉ~Ĉ  ­þÞØgÎǃMGVÜ 'Ëe7?¶Ã|8ºNkøªí1TWT¢êÁWо™ÌPÃMíU×zv¢\j>Ã:èæÈÊ÷CŠSÓ˜ÜwVٱƸŽá®—â@å¢gÑ1xÍöƒçtVes¤Ü.+3Q)Ôµ-w_éðc_áL?rSÃa³ )¯\‚u§Q\hgÊ¥†Ûa>œZ§ÆÔwèÚü�*cAÌ¢uŒÌí±ìæ¦öªk=;Q.5ŸÁ‘•ùpÿ7¤8çSyÏ*;RÎè÷èÛ½&~Ö²ºî5ô(>;l²*›òr»°ÌD¥p´m¹èJ‡û õëú&FûÞHì÷ªW£¥ç¢ÒýžÉÑ6l3?¶Ã|¨_§± fôvÇGcÜ‹º–ãJGc¤rS{Õµž¨cçÖ£·F©8Áýßâ¤1eÆk*4/c:yV¹æwÎ*gz­©Ð¼Léô¤˜ræJ›âyǃná¡óPóØ?âlò¬å÷%ÎÖå|ÌVyV‚™—í½¢è¼X™õ?—yñ¦ƒxïx_Ú뿘9C9ç½i¿š¶*3Q)œj[n»Ò¡²ÜFäôLÿ(}…Ù?Þ‘íjFé¬Ê¥t]×0|>q5uñ<;9÷jj^+œSmX?¶Ã|¨]§± f(ˆ ñÑ`ÓÁ3Fcä7d1ÜÔ^u­g'êØ‘õÈ‘•¹ÿRœ4¦LA©Ð¼9éÏÏœUþQís3g•3½ÖTh^¦túFRL9s¥ |~è ¬»ÿ?Ä?£rÑ:lÜžá1ZÚ°iE³& “a=ŸÎ*ó¯;̺w?QöÍñ2ËÄùýß„|ÒVe&*…ú¶åÎ+jÊè++î‰ÿ³¯0ûˆ™%Ù?:= ޲u½€£Gbû=¹G ý»¹e¾ƒ=›~Áçt§ñc;̇ºuz᣻°B®Ê ÀÆ–Œ³îس +øœî”·ž¨cåŸÁ‘•Y¹ÿRœÊÆä¦³ÊêÊÅXÿ¡9çœE«ƒJw—™¨jÛ–{¯tø±¯Pµ®±~|©œ³Ý™ø±æCÙ:5FÑÿAgæúHYt—¨ÌõìD«ü /Rq‚û¿!Å©iLî;«\þFÃá“9ù»$oR×¶Ü}¥Ã}EÙû/ŸÃí0å_§^î /ŸÍû£TœàþoHq©)uo¦!½ùä‰/¿üÝû^›ÙR‡Ï‚ÛH»ÿâC®ï+å3g§Ó7’bÊ)¬Òsóþ‡:^G°­X·± õ~‹‰¨‘áµ…ü_ë<«Aò¬Þ[jŒñ26?›X·­oãÕ·ÞŬÓÔ´U™‰J¡¬m¹üJ‡òm*ÖW„>÷f_aö*Y•K}?rSá|lCs|ß׊öNà섚çs›Ô—K?¶Ã|8±N©0> ¢­YÚê/ÑÚþ!zÏ^Uru;•›Ú«®õìD¹Ô|GVæÃýßâÊÛ˜œ;«¬ºœ2ô¥sóß¡*ö9òYw–òÎJ¬²Ün-3Q)Êß¶t^žàÇþ1>‘Z狉GÁÍ*slQ<ã®Òr)¦ò»{yŸ¥²^äX,2Ô‰ÍñÇ/¥×¿ž+¯ö»”¯žÕ–+Á‰ÏÈÎß#+Ýÿ )NycrÉYe¥å4.¢ë©ûPQùSÔïØƒ÷º{ …êíÆÁŽ7ðrÝOq×â&UsˆeU6eåvq™‰JáDÛrã•?öêÖu—»6`~Åݨ©ßŽ=ïu£WÊêA÷Á¼ùr=jîz�[Ž^‚Š=¡mX?¶Ã|¨\§ÆåðÔüJTÖ<Š{ÞEwo_¬núÐÛ}o¾„ºšj,Þò)F¶¹©½êZÏNÔ±òÏðè('¸ÿRœ4¦LÃxM…æÍJbçßÿ/Ï*ÿð¯þì>Ô›|eîÿkÊ”—)¾‘SÎ\éÿÜþþóþ7´% 3÷}Çðíþ§±pÓQËðÒÓ¦|óÒËšÊÌËö^Qxž¡ñ2oýÇfg½×˜Ä»ÿçªx™'ÓóbÒ/4mUf¢R¨m[î½Ò‘+¿8‰¾â¾ê_ÌôsÄú ³”¾ÂnVåRSæ˜_ pß}hhÌ0QžˆµƒoßAã—plòvòoöQV.ø±æCÝ:½†PàT7¼¡,-4"_cãrl:v%ù{¹©½êZÏNÔ±ÊÏàÈJkîÿ†')SPc*4o&m\įùϨøÁ=3g•ÛÛÛgÎ*?^{þ¢æ3g•sý_S¦¼Léô¤˜ræJ'ÜÀ;ÿÿŸûaÞ¥—ñ}Æ9tÔmÛŸ…2ç'“gÕ!˜yÙÞ+ Ï»ÁÖeñ2ž1?áËÐ{ñ2»žùžvS¦¼\i«2•BeÛró•5åNôKZOÍô%ûGé+ìfU.Uëzz° —ìÆà-«òüÃÏbó±ñdÚ>*Û°j~l‡ùP¶N§O¡uár´ZOèg w nó1Ø?ퟻګ®õìD+û ެÌÉýßâÔ4&÷UV·ÑD Ô!ó±/òºM†íï¬Ê¦¦Üî.3Q)Ôµ-w_éðc_¡j]GC,äž /jFCp$™²º6¬žÛa>”­ÓhÜPÉë‚'“vrS{Õµž¨c5ŸáýQ*Npÿ7¤85É}g•Õm47qnocì 9×ÕŠ1toÜŽn‡‡ª)·»ËLT emËåW:üØW¨Zׯ¹½X¾)×:¼ÉîíØØ=–LÛGYv€Ûa>”­Sãì]¾5÷qØd76nìÖ>¨Ñµž¨c5ŸáýQ*Npÿ7¤¸ÔÆ”:Œ7ÓÞ|òÄ—_G{cíÌYåÔüÙ¯Ä^÷‡¾ˆ§fçY½/w:}#)¦œÂ*mþn\ìÄ3Û{fݯú:9¸úçÿñ"þfÕ¯0žìfçgþ¿¦\yV‚äY½·Ø¼P×ÿ/ód¬<™ò¿ü²7¾~+^æOæäeÿ¿ù¦­ÊLT emËåW:T•Û쥯Èìv¼¯Xõt×Lÿh'«r)[ׯ0‚Ï4£w2ûTºÆ¯Ð¶jºÆíŸnWY¹àÇv˜uëô._ÆöÞñÌW…Á×mxºKÿ‰ÿt­g'êXÍgx”ŠÜÿ ).µ1¥5©¿‹|óÄ—_žÀ{/­œ9«œš?ûµcØýèØ}¬/žšgõ¾Üéô¤˜r «ôßo"Üý¬í zÒò¢C8ºo+îÿÑ¿CÍ/ÞÀhr’¤;ïMHMšgÕ!HžÕ{‹Ïë—¹åÐwñ2ßÉ7ðÅ;ñ›mÿ +ªçÅË|äóBþo~i«2•BYÛrù•uÛT¢”¾bjVÑ™þQúŠÅMœéídU.ueŽ•-ü ZZcx*íªitCG‡­+îAÅâWplÔþ €Ô•K=?¶Ã|(]§Ñóèny‡†¯§{·01tû¶>ŒêŠZ4 +y‚›Ú«®õìD«ù Ž¬Ì‡û¿!Å©jLn;«lo9obìÌYŒÍÚ1ßÄhè3 \M½j1ÈÈ)„Bÿ‚Ás¾4‘¶³·‡UÙì+·wÊLT umËÝW:üØWØWæXà6vgÆRèØßFûñéÀ•YëÒˆŒ`@&<‡pø2&Òƒr¨kÃêù±æÃÖuÙ3c³»è÷}z Wg7VŒ È£îq.Æ¥‰)Ûû%á¦öªk=;QǪ>Ãë£TœàþoHqÒ˜2]Q4šw'}‡voŠ_ý5w`‰¼ÄYe¹*WͳÊÙÿO!Ÿy'¾‘SÎìéjWÎ cÉôZS¦¼\iS¾yV‚™—í½"¿¼D™Í[D¦×f~oáy¹ÒVe&*…Ò¶åâ+ö•{ÁºF%ÃüŠaU.ûÊE8؈:“¢CiVÌí0¶®Ópuuj&E+†›Ú«®õìD«û oRq‚û¿!ÅIcÊÔ˜òÏ»‰îÎ÷Ð=k(ñ iÿ¿gÎ*'^›8«ÜÞþ;¼ó^×ÌYåìÿ7w^¦túFRL9³§t‹L¯ÍüÞÂór¥­ÊLT [Û–‡®tØWnÝåfkv˜Ûa>l]§ º³Òµž¨cû>ƒ#+ åþoHqö5&wïàìÝhüxP©× Q6¶¶-tù±¯°¯Ì ºíâÇv˜[×)ƒî¬t­g'êØ¾Ïàñf¡Üÿ )Î/‰½*Ù ’?ØÚ¶t—U¹ì+3ƒn»ø±æÃÖuÊ ;+]ëÙ‰:¶ï3x¼Y(÷CŠKmL©Ãx3 éµÎûpf#Éœ_ìÿÍ'ÒÓéI1å™Ó‰²ÊPël¯Mý]’.4ϪC<«÷柗ßú©ébó„UÚªÌD¥°µm1è.;«rÙWfÝvñc;̇­ë”AwVºÖ³ulßg0è.”û¿!Å¥6¦Ô &õw‘;AwêkS…¤ ͳê$Ïê½ùç1è&°µm1è.;«rÙWfÝvñc;̇­ë”AwVºÖ³ulßg0è.”û¿!Åùe#±w£ñãA%;Aò[ۃ*—}efÐm?¶Ã|غNtg¥k=;QÇö}7 åþoHq~ÙHìÝh.âàÚ 88š:‹bùX•;r{§ÌD¥°µmù2èöcÿ8у°öàÅdº¼lmÃóc;̇­ëtô Ö®=ˆÑd²ÜÜÔ^u­g'êØ¾Ï`Ð](÷CŠ“Æ”i¯)ÿ¼ü)e²3/S:}#)¦œ¹Ò Ó8þáïÑÞÞŽÐÀ"òø³Þ#8ÓƒáyýŸô´)ß<«ÁÌËö^Qxž© ÐJm=½KÉÇ<d~oB®¼\i«2•ÂÖ¶åË ;•ùH—ÐLÿhLÎô žî2‡U¹”õ#S—0r%ÃãTç.ÝL&ÔQV.ø±æCÙ:y\a#‘X]ÜÆÔØ·èFxêvòEj¹©½êZÏNÔ±}ŸÁ »Pîÿ†')SPcÊ?ï"þñÿW<â· û6Ží~ÿ¡öYGôÖlð?¢¢j–-ëÛ?ÍùÒÓ¦|ó¬:3/Û{EáyQ„;·ã±ÿþ �‚Á`|‘ß·ý·:ì ]‹¿>ÔýOx»õ÷e¾Ü”)/WÚªÌD¥°µmyèJ‡šmê6&»ŸÇ=u-3ýcÇê{gúǖиò€Çª\Êú‘ðAlÞÔ†ɾqfùÝ6<¾ó Ü×—zû7x;tÙö:PV.ø±æCÝ:C÷úP×|CÆ­³X]}ª=„å«[šT?RÀMíU×zv¢Žíû ެ,”û¿¡B²‚¼´(½ŒþÎ7hÞ‡Þ°œÙ—3̓e;«¬¬œ±Ã§ÁÖõh¼û}ãÝ/`~ÅýhêíįÖgº0žx¡2VeSSn¹±!þ¿3-w¯ïƤÔE×3¸«â4v}Ÿ|Ÿ}äsÈ;ÒÛˆÛ5 DGO¢s÷.4·÷",#BâW?¾vÅ•5åöcÿ##bÿ[þÿœåî螌­ïñ.4ÞU»í¯ù¯RóÝÝÝó¡lNŸBkݼ%ýÑetoø)*î{½“Q\?À3 ößéÜÔ^u­g'êXÙg¸,žp#÷C…¼°‚Lj¾ëŸ1Üñ(*cÿ[þåâè¹ÒÖ…w¡¢º{‡"Éש“^.uëä:ú›ŸÃÞs7aLž@`É<ܵ:ˆ‹Ò¯ÆªžÙ(¨ZVeSSîXÐýî[~sápxÎrib*ÑF¯âÜàw˜H7·“ºõI*xi})û®Æ9t¬¬ŠÿÿŠŠyXÜtW¾jÅŠJT×·chJíáC®r©)·ûǘpv3öáKH¬ê[˜8÷5ÎMÜŠ¿ÅNÊÊå�?¶Ã|([§ÓýhŽõ?çŒiLöíÂ’ÊùXŽíÃåÄùËØØ=–|¡:nj¯ºÖ³u¬æ3ÜO¸‘û¿¡B^XA¦Ôïš:Œ7ÓÞ|òÄ—_þ3ÞÙø×Xøã:>hnÀÒÍû1>r ÿôëÀ«wÏìàRß;÷ÿò™³Óéë ˜r «tâ÷¦¾zKkÀ_/ø*~°¾0>Þ·»�÷·žŠZóóϳjo’gõÞ¢ózºJžy|ëPoìo}3gs¾7<a•¶*3¹—Ö—²ï*W:>„@è*Œ©sxÿ¹§Ñöõ÷ø7?çÊ|Ð¥¦ÜÆLÿ¸lQ5**—ÆûÇËýÔ/šéU²*—²umÜ@8ôì´ ½÷"äÎD#2‚Áp2àVKY¹àÇv˜uë4‚¯ZAMíR,ªªDå’]è£?@}ÍŠäè�µÜÔ^u­g'êXÍgÈ(•e3ñÄðû/âѶSñx¢ïãf<òœûO˜9ÁýßP!/¬ “šïj :܉;{0)Æ0‚OîBï ƵnlX£~b¡ôr©]'71ÚÿnÊÖmLM\F8ü¾»¤~ø‹UÙÔ”›g©0^Z_ê¾ë†ƒÛ±S†´ÆRÆÅN<¹­'vH1kÝ/aâÇMå*—ºrû­”]^VV&úÇŠÊZ4õ Ǹ—ÆÒ÷¢~ï`¬%¨¥n]ªçÇv˜¥ë4}ø®1…‰Ka„Ïý.i2ÉW¾t­g'êXÍg¸/žp#÷C…¼°‚Lj¾ë4®ö½†ókP»ªuu£vÁ=X´|eìç<Üè‹íþÔJ/WYÖI¸O5%; …¬Ê¦¦Ü<óH…ñÒúRö]+èkY…ù j±ª.Ö/®ªÅ‚êEX.?+— R»Õä*—ãëHÛþ1¶lÅÂÅ»ŠD15ü>ž{ô-|=>Œ¾ÐüÈK‰{ºr|]ÚÈí0ίS™»åÅÄ}ïÉ¿¨â¦öªk=;Q.5Ÿá¾xÂÜÿ ò 2ÉwÍ4Œ×Th^"-AÙCøá‚¿Fmmml#‘ ¥.öûߢaó;ŒLg|¯©Ð¼LéôuPL9s¥ ôüÿ×ü(þs—ÿˆ¿}þ·3%åÿóÏ“ÏÉÆÌËö^Qx^âÌã£OýÇ$<óøÖ?‡ðåÑÝ3g3¿7!W^®´U™É}¼´¾”}×øðòŸÄVÍô‰‰åqlÞ*þ#•r•KM¹ L íǺÅÕñÿ?w¹õ»{”N$'Ÿ“U^I¢çÜøzã3ßÂÅàlëˆUÇ(º7lPþ(eår€šïîîv˜Rߟ]CÏbqUeJ}¤,Õk°»÷‚ÒÛ"äsÜBÝw)o=Ëg¨¦æ3ñDÕ¢eiûÍú™xB5'ê®Tîÿ† ya™ä»f jL…æ™iãjÖ¯oçiù¦Lï5š—)¾Š)g®tBí5øáÂØÄ›ÕØØÿØT‡ÿ¼p%þI·‡p5Ö™æÿóϳjof^¶÷ŠÂógïÿñ_báßÈI•Ä™ÇÿëÅÂÿôïfÎ<f~oB®¼\i«2“ûxi}©û®±í¦§ -ÇG•^ÑÈ&W¹Ô”;‚P`1ªjŸœég–Xÿx_m#^‘ß“ý£ VåRµ®«'в¢ jŽ ®ª­Auì qUíTÞ@è¦Ú ® «çÇv˜eë4B j>j_š]/W°©nIìï[c¿ÿ#ÚCW”õ[nj¯ºÖ³u¬ê3$žhi9®lÛÌÅMí3÷C…¼°‚Lj¾ë4FÿÇç<wð6&ÿ‡GÕ?ð>½\êÖÉmDúšñèî ±„ƒh„ º´VeSSnžy¤Âxi}©û®aÞ"Ã0Ö+8¾ÿ(FPä*—šrû±ŒíexyÕ",ŸÕ?Æ–†—±ðšò“.êÚ°z~l‡ùP·N¯¢/ð,vÏ™ÈK†=oB ä¯9Zt­g'êXÍg¸/žp#÷C…¼°‚Lj¾«t"Ùžã\…•ç?èHOÛG:„}èè•Y…Šuݯa—ÌTœü‹*VeSUnžy¤Bxi}©û®#Ö™ K[*EÇ📯SC>ÇJ®üâø³„1†ž–7qüªú™(+—üØó¡n†qøŸ g(ý ëºwþ!ŸD×µž¨c5Ÿá¾xÂÜÿ ò 2¥~×Ôa¼™†ôæ“'¾üò  <23ŒF†[˲µñAüè/kñض}0Ï饾wîÿ)ä3g§Ó×A1åVéÄï_Xt?œé¬þHMš'Ÿ•äY½·¸¼/pä׿œ9óx'?qæñ×G¾˜yýÜ÷ZýßüÓVe&÷ñÒúR÷]cAwà 4nÝ‘2´ð%4ÖÞ‹šº±¯"ù:5r•KM¹Ý}Àd•W’Ñ£Ø<Ã0ÑÉØ8̃D j¾»÷ÜK}vå=(ä³ÜBÝwq÷IW;¨ù ÙvŸJ–¿#OT×ÔaÓ¾þ™xB'ê®Tîÿ† ya™R¿kjP“ú»È7OÈ3›ƒ8Ÿœ“äNþ5´7þ nïœâ•úÞÔßE¾y"=¾Š)§°J'~— ;Ñ!˜'¤Cøo+ÿ*~‚Áì¬þHMšgÕÞ$Ïê½ÅåÉI•eñÿ=w©ÂÝþBYß›ßg «´|y‡—Ö—ºïz §Ø3UÓ/¸ÿ tœ½‘üƒ¹Ê¥¦Üî>`R¶®ÃAÔÅþ·üÿô¥re†Gxò9^¥æ»{ÿÀ]Ý:-ïÉ@á¦öªk=;QÇj>ã6"§OÏÄw\C(ð0Vwœ™{ˈÍÜÔ>³qÿ7TÈ +Èäèw<ŠMóïBõú#¸šü“*éåRWNwwjÊÍ3T/­/g¿ëmL{ó+îÃúîËÉ¿©‘«\jÊíÇþ1&܉†ôI»¶>‰Úê…¨ÛÔþÈœ ±•³mØ^~l‡ùP·NË{2P¸©½êZÏNÔ±£ë±Œñ„¹ÿ*ä…d’ïšéŠ¢©Ð¼D:1ñAÛ±¾´ü|Ûò,^={3åµ é¿’—)¾Š)g®´)c^²CøÑÏwÏ™Á=ç{“òͳjof^¶÷ŠÂó0õ¥¿öh|$ƒy�“ù½ ¹òr¥­ÊLîã¥õ¥î»f™H-ú¯hyôMœ-óÕOGבK˜”•9ò-ϧ?=ÖÀÐ/qÿꜽ¥ve;º.mæÇv˜gשs'…›Ú«®õìD¹Ô|F¶‰Ôþ4O¨æ¦ö™û¿¡B^XA&ù®™‚S¡y‰´\ µ¾J†§¿×tçÿ$äÊË”–ÏJ%éL¯5eÊË•N0ÐóÑGè¥çMaäÐ{xëwîo™þOzÚ”o^zYS™yÙÞ+JÉ›•>ö<ö㿘9€Éõ^S¦¼\i«2“ûxi}©û®î¾§/W~q L]¸6y•Hô'˜h̪\jÊœÍÛ´ÕÏ£[q¹-—½üØó¡n^Ç…‘ñ¹÷´G¿Ã¡ý_82Yª›Ú«®õìD«ùŒÜñ„ê&*Ÿåvîÿ† ya™Ô|W÷ ?V·NbeíÜŽM{ÞA0LYàw[ŸÅÎеø«Œ±>¼Ýú{„Æì¼UÙÔ”›g©0^Z_꾫»ïéSSn?ö1'R3ýö <úê×<H´àÇv˜uët›·bÏÔz‘e¶>þ+„nHkb,ô{´¾Ý‡1×MíU×zv¢ŽÕ|†ûâ 7rÿ7TÈ +Ȥ滺ïþ)uëD:„lgá*p÷únLÆ‚Ôñ®gpWÅ=hìú>ù>ûÈçdc•W<«2óÌ#Íå¥õ¥î»úu"5¿õ1œH­hj¾»»Ûa>J}v#p*`}÷Xì5ߣ«ñTÜõ ºÆí Ÿåê¾KyëY>G55Ÿáýùœàþo¨V)õ»¦ãÍ4¤7Ÿ<‘5=y4>üXîs6ïŸJ}mêï"ß<‘žN_Å”SX¥¿ð»o!øÍ:t(¾„Ãá™ß/MLÅÐ/¿øï½ó>&¢‰£­Üÿ7ÿ<«ö&yVï-./û#áäÌ£<îxÖ÷æ÷™Â*mUfr/­/g¿«î©Å‚dÿ(ýbúböˆ^ŹÁïfúG;Y•KÙºæDjEóc;̇ºu:‚wwÄ7ê%¾Œ‰)i«¢ßaðÜÕXMÚÏMíU×zv¢Ž]œHm÷C…¼°‚L©ß55¨Iý]ä›'âéÏ?Fç4ïÃ[‡zcëCdä_ðúîÂÇû’¯ÌÿÿZå‰ôtú:(¦œÂ*øý \þ°ǯßNËëñ¶_âðh¢ëLÍVéBó¬Ú›äY½·¸¼ì„“3òH¸Ï³¾×êÿ柶*3¹—Ö—ºï; =‰ÎÝ»ÐÜÞ‹°ØŒ„Žâȉï±ÿ8–\åRSîé™þq¶Ä3ýÍþQ%«r)[לH­h~l‡ùP·N/àÃýŸãúœ&yÇ÷Ũâ~I¸©½êZÏNÔ±²Ïˆ^ž‰'zÃÒ¯NÇã‰OŽôa8âþùœàþo¨VIÍwý3†;EeìËÿ¯\¼=WúѺð.TT7`ïê;0æ–KÝ:±¶öc<´÷ÌÜá¤6“ÏÊÆ*Ïv<óHYxi})û®Æ9t¬4‡ÎÃâ¦ã¸òU+VT¢º¾CSå ÄÔ”›ýãœH-j¾»»Ûa>J}vV<®Â^ŸÍѢ·žåsTSóî‹'ÜÈýßP!/¬ “šïzƒ­Ë°8ð9"Æu ¿ÿ"m;…ñ‘Sèû¸<'÷O©•^.uë$¶3ïÜŒ†—S'GŠ-;žÅŠ×bkGy'yPVnžy$M)k[Ó§b !º cêÞîi´}ý=F>ÇÇÍOà¹ø=}êä*—šrû´ÄMŒö¿‹Ý´÷^ŒÕ‚ jFè“Oqb8’ʬºr©çÇv˜uëtëñrj½Ä–ëÁƒ ÛСx‚Gá¦öªk=;QÇj>Ã}ñ„¹ÿRœ4¦LÃxM…æ%Ò¢Ãxô©ß☤aŸÜ…·þ9ãZ76¬ âP†÷šîüŸ„\y™ÒéI1åÌ•N¸j-Ϭ6%ònábç6<ñÛîœÿ'=mÊ7ϪC0ó²½Wž—8óøƒØÿ–ÿožyÜøÿþ TühÙÌ™ÇÌïMÈ•—+mUfr1cÑiÆ+–@]ÛšÂpp;vö&c\ìÄ“Ûzb‡Ó¸ÖýÖG/S$W¹Ô”;Û$8‰þq{ÏXYPUëÚîÀÊJó*V-šz†ñUëÒXú^ÔµT•Ë ~l‡ùP·N³Lð;nëÜØ‚<NÍNºÖ³u¬æ3ñÄÆ=˜Œï8ñDï c&ž'^¨Œ›Úg6îÿ†0¢ÑØá”»IcÊÔ˜ ÍK¤§qµï5Üÿã¿Ä¿©E]Ýè]pü¯ÿ5ösî ôáD†÷šîüŸ„\y™ÒéI1åÌ•N˜Æ‘_7ã­Ïfß§ã.t>…·ìq$ÇÿIO›òͳê̼lï…ç%Î<Ö¬Û‹ã¡ÏfÎ<~úáïñO¿þ‡™3™ß›+/WÚªÌäV·0~ìu¼R?¬ÊÚ–q}-«0A-VÕÕ¡nU-T/ÂrùY¹Úóõ¹Ê¥¦ÜÓýøœH¿—6Ù?Îk8ˆÑäŸT±*—ªu==ØŠ…‹w!‰bjø}<÷è[øz|}¡ù‘—Ð=9çÐÛVÊÚ°üØó¡n†ñqghÎ½ÆÆÔwèl\Œ†ƒ“QÇMíU×zv¢ŽÕ|F"žX1¿µ«bûÍd<±hùÊ™xBõ njŸÙ¸ÿª½Œc·R??GIÔ4& ÊBÕ¢e± D6s©GÃæw0X†áÇê6š¨Å½bó°¤ùËXm¨%Ÿ•U^ñxæ‘ògL]ÆàÑ}ØQÿSTV,Š—> ºãÃË;XX•Ö/>ŽÍûOi:‘šûǘè97¾†ÞIÙ×ÝÂÅàlëˆm £èÞ°Á°Úeår€šïîîv˜RߟսÆ¡¹_õà]wµWuߥ¼õ,Ÿ£ššÏp_<áFîÿ†JÜÆÔØiÝ÷ êkîFEUÀ§AwìØâjZZŽãêœÉ?ãÚÄ Ç‡r©Ûhb;óΨ{aû¬ût´½ßQ™¡X1«²©)7Ï<R.±¾0<€C{^Fô…±õUYS‡^XV¿ݲÝô´¡åøèÜþ/:‰‰ëå^¨¦Ü~ìeÿw-+j° öáøâªÚTÇWÕ.@å=±ã‚›jË­® «çÇv˜uëtëðÂŽÔz‰-Íoáýþ˱šSÏMíU×zv¢ŽU}†Ûâ 7rÿ7´“qáÃØór=jâ÷qÝšº x¡áuOÝ©Ãx3 éµÎûgœíxóÿÿt¼/C¾¤oáÓßoÅÃëÛg:˜;yÙþoî<‘žNßHŠ)§°J'~Wln^)ÿ7ÿ<«Aò¬Þ[\Þ?ã‹gÎ<ÖÖÖÆóÌã;)ëî{óûLa•¶*3•ÙíatmY‰f_Xÿ ö=1yéÔ%Œ\qw§hkÛºu«ŠÅÙ'jŠ^Á©½/¡EñɈ\åR³Me»—Ö9VåRÕć—W-ÂòYWfbKÃËØ?x‰üØó¡nf¹×ØAnj¯ºÖ³ulßgܘ‰'ú"Ùj쮞jǺ–',Jåþoh“Û#aËòšÄtö•?EýŽ}8:xS†© pEý Ô’Ø×˜¾GWã=¨˜ÿ"ŽÍ¹_í&†ºÑ¶~)ªbŸWp~#±}£1.#ôöo’3ÓÞÆTäF²L¢‘+E”—ÑdU6UÏ<Rv2sóØýÂÃX´b:CÈ8p%É.¶¶­ñ.4ÞU‰ù›ŽÎa5:Ž¡î6¬¯ûLõÃîs•ËÖrû¼„1†ž–7q|ÎäH±ò_»6ç¾N»)+—üØóa÷:5ÆúðvkGâé#ÆMD®›5Edì{ŒEœªwµW]ëÙ‰:¶ï3ÜO¸‘û¿¡]¢—Ñÿþëxaùϰ¢)ˆÐð¤c¸ìkLÓˆô¿†—ìDïÕ[É¿ÍÞ8*ªDãÖhhýÒñÄÞfãÝ/`~õr<ûü“X·ij+ïE}Û |}ä<XUû¼yX¼á]œUüì]aU6ûÊÍ3T(óv›�Ö­~}Ä`,?8p=™ïN¶¶-cý-cI Wͳ‚íJTÕ>‰­›Ô»ÏU.ûÊíÇþÑÀ­³X=)}W“K ô®öcïºÝÊGÀÙÚ†æÇv˜[שqÝ¢zùSx~íSØô샨¬~ m'p¤iYâx­ògØðÞ7ÊgÚnj¯ºÖ³ulßg¸;žp#÷C»Sü#öžÆêuì;:€þb@ý=þ%‘Æ”i¯©°¼>ÿͬ{›Z‹?_„Æ7Ž¥XßÖÎ?~{Õu\G¨ ÿk—)¾‘SÎìé1ìþù=¸¿ít,¬¸…·?ˆŠ÷sø`+î‹íàë7¾„Áw°gÇãxhk'úòþ¿‰´)ß<«ÁÌËö^‘_Þ÷øÕÊÿ€Š7Ìœy¼óÚDg¸9¹¾Í3éÿ'=mÊ”—+mUfr¡è$†Cqµÿ&R3®aèà.üÿÛûÿب®<Oø÷¿‘¬GBZ=³HMoK~¼ËŒZ›A–5›,jí„mÖÏ„hX"aÜ€’v˜NÖÐi ä ClØPlˆ¤MÒ±h§1jwø ¡’�pÑØ‚ú“˜´ ±m¬²»—}ßOr]»ª|ëÇ­ªS¾?Þ/éÊu|ê×­sêÜϧî¹÷nx~;꽑loA½«C"ÏÁ´ûd땽õî‡kóãÓãcOãZä-Ø<=>nùõ¡éññÙ†[ÁûÈ•h½²·ÎÁ¯ù%ÌË[Œm„ÿ§ &ÛCpÕoA©Hôrp®—¬÷á²c?LEVÛtØ…ÍóËPßLõ”oѸòGX°ùCœªúi0A|¿>tÎc°gíF4tÉ>C‹±ú«U?ç\|ÆÙ}`âÝyr:Ÿ¨›N¶§ò‰Î!‘ŒOå²23RÿŒÇøïP1m©î“¿Feé>SÓ­•Ô¨ôÖM•ƒIXWKðËR†â.ÆöÓ_‡¦—&{¬JoV9öK’ÎzÆ/÷ÀQº8œ<Œàð¯GÞ*ÑÚúª. ÌÜ/8ÈîþžÐ5ÉU‰Ÿwª¬Jµ.Ñ€ ÖÅ{¬ZÝ.~?ù»Ó¿<^½z_4íŸùåñ?ÁªY7ýËcjÏ«]—¬œhÉÀìvLw¤À ºZŽÁñüR.Ù‰Ó]¥ÿB)Ùzeo½ÅYzK§ÇÇöšŸ†Mu|œ&‚Ðêãsz¥ƒl¶µâs£öÉ28ZûÂí“lç-DiålËÁ¹^¤õá°c?LEVÛÔëD¹úãÏD;jå£ÀáBë¾Z\ˆ8öAéq¢ÚÙ.Éc¤þjÕÏ9Ÿ±œ×˜Ê'Ž9ÖcIaét>‘KFêŸñÿf8~ñcìwÔ†ßtxîaðŽŽéÖ"‚ŽoÐâ¬Å–ÊWPÛtݾþœœL"v½²»žâô`pÚ˜ûàv” oi=nÞ<ˆgÑÙã…·ç&Z޽† _³Z¦Dë–Ýõæ/”Šà÷¾ïšöïCMC+¼b©øÐÓñ¼âdj'¿oMÎÚWP¹¥MmÝð ~ϹÝÓ‘½õ¶ëø(ºùMœp¼„ç·½‹Cu›g’íÍõpuãƒÜœëE~–ÇŽý0YmS±öÇád0à†£`>–Öÿ 7ë_…ãœ=^/z:ƒ‰ÎöuxÙÕ?õ‰ŒÔ_­ú9çâ3–ûÆÉ'ŒÈøï0K”îF¬ ¥7¸ä—¢º¥7ê–Ë‹°æ''ÇÃd"gIL/mkBí†'Qdú©‰cÅ^dz·ƒÃ@xc^î„Wœ<§ºtê¤z¡å1l‹üE]’Dë&§}ùË#% ÜFã*õz¤ °¤ú"ܨÃâ¼|®i@gŽŸÌDîúÖÔ¬¨¶¦Zl(]NäI¶^Ù[o»áàðØ^<¿d–l?…®ž”J³^¹aÇ~˜Š¬¶©8ÖøåÍhìþ>œ  ÜÙeð"ª—,.ÁeÁލ=²²duÝ2dÕÏ9ŸqÎÚqŽó #2þ;Ì’Ð¥A–ìƒ;¸QõwŸÄËëà«nt´FÍ3;ášuæ=c‰ìL‘Óxµ¦ô¦R'$*_½úŽ46Oÿ2]—èqñë„Ørì—$õâ–w°ãFT½ï@Õ’…X^ïÁeQwåstµžÁÞ½µxëWÏLÒqŸ',²¬·.Ñ€ ê=6³º©àò·ŽÍX³jÝô/Σg¦cÿØÄuB¢r¢u¦96qu‹Ÿ öýA(þÛ8ùò/QÿÕwè鸌Ok^ÈÉž“LÌEßR¿B‡eötÇÇs{÷¢á çôø:(EL±ŽMMŸàÄ[¥ÿÐ $Z/ém:¤À‰Ú-±¥¶ mÝCÌÁ¥«æ¢g‹ûa*²Û¦Ám·÷öîú_¯Â’ü§Qß9:õÿà6½µùh:Ó„·V¿%ýPÁHýÕªŸs.>㜷£ò�×;îqOwñßa¶nùõ]´‹3¦ãžsvµ;C\[¶ÀéÍí/ÜzEv¦È¤&ò¶j¨,£Nˆ-Ç~IÒYO!QY$ØMÔÍô…YŸ®»êFËñߣ£ªý#ë„De½u‰Q—è±™Ö ¡ò• Ó¿<þue®„ë=6Q¨œhi®ùÑíܽ­S‡(÷šð⮌b];ñlŽÌ„UûV²õÊúz‹³´_85=>FSà¿ý§éñQ¦Dë•»¶À×}MµQZÄ©%bÇ~˜Šì·©Hü:qáÄÇ8ÓÞ«±·p·/Ý@¿ü݆ê¯Výœsñ©³É ëeÍO^ƒ2x µ+‹QTú4ÊË˱º´…%+‚‹ÿhpã:–ƒ+vù’Xu=…Dë–óõæ/ìmµ«±°¨«ƒcbùêR– LüÍ·ì£'3cÕ¾•l½ì¸Þ¹_ç ^¿Á=Ý Ø±¦ÂªŸ‹`¤ucÿK?»¹cÍO^ChzyA0 ÁeäRñ:Žx†öô™èLZ{Uzë’•UÙ¬Ó*Ç~IÒYÏde•ÞºdeUªu‰µ.Þc…Lê’•Uzë’•­3ͱÐôò£¤luô˜X¾Û\‡Ïàƒ¢UûV²õ²ãzÛµ­Œm¢ÍªŸ‹`¤ucÿK?»¹cÍO^‹8)Gí¸8hð rÇ!:“VR£Ò[—¬¬ÊfV9öK’Îz&+«ôÖ%+«R­K4 ¨uñ+dR—¬¬Ò[—¬œhi®M`°¥µû ÿ££«ö­dëeÇõ¶k[ÛD›U?ÁHëÆþ—>~vsÇšŸ¼–”®;«ÀçϸŸã3<§Â._«®§hÝìÒ¾d$)^6ÎïÅíûrO–»~gì¸Þvmk#c›h³êç"iÝØÿÒÇÏnîXó“×â=íÛêqÌé„3îr ¿¯Ú„½î‡á‡]¾$V]O!Ѻ٥}ÉHzд½ i…ËïwaýÞ+çr5»~gì¸Þvmk#c›h³êç"iÝØÿÒÇÏnîXó“×âu¢<Ø ¢Q’-ó7»`´S‰÷¥ŠœÆ«5¥7•:!QYF[Ž\/!õ•Ó­•õÖÅ®k$Q—è±™Ö ‰ÊéÖ ‰Ê‰Ö™æZœåêuº“,ó·â}YQ²õ²ãzÛµ­Œm¢ÍªŸ‹`¤ucÿK?»¹cÍO^‹·ûx½Þ¤Ëý!¿áŽqŒìL‘IMäm!Õ:!QYF[Žý’¤³žB¢rºuB¢²ÞºD‚¨KôØLë„Dåtë„DåDëLs­ï?¯5ÆÀYËý!ø 6(Zµo%[/;®·]ÛÚÈØ&Ú¬ú¹FZ7ö¿ôñ³›;Öüäµ(LhEcè>~?¿š]¾$V]O!Ѻ٥}ÉHZ_ðÿÝçp¢c$\6&»~gì¸Þvmk#c›h³êç"iÝØÿÒÇÏnîXó“×¢<„çÈ”Í5LÔRà€;Ù9ÖæØ¬÷l¡%’V½•–x´îk•…Œj>ÏQl++Fþ¬v+Ãí ßϘ¢ß¯µ–D´îo•%­ûZe1+­u±Ê’ ­ç³ÒbZïÍ*‹lZ¯i•ÅèÌ;âëºNwþã(u7GôòŽ =Æ:\‘H3 L”¡ëtÿÅå[±'vLtü®㱜H6ŽDDÙÁñ4šm>É®CxjU#zŒw50¢œâ H!“·pè©çÑØ3þq|$"ÊާÑìói(qã@-Ž|{á?ºŽ4ü1ÝDÙÂA¦LÀwã÷Ø}¤Ñi·‚@×i4ü˜n"8>eÇÓh¶ù4&;ë±4Øø¢ÌZLpL7Q¶ˆ>O„É›¨_ªqŽ‹Ðbücº‰dýŸˆˆ2Çñ4š}>qêŸ^Í{b] .<¦›l„ƒ MEgýóX¹y×ì1‘Çt“Mq|$"ÊާÑlôiÐ×áÁ}ÓM6ÇATJßMtÜç1ÝD*ŽDDÙÁñ4šÍ>q užGcÝ›p8ÞD]C3ÜÞQ0';á H3†:q¾qÿÔîºÑì¾ ?E²)ŽDDÙÁñ4š>QtÛˆâ|q¼â|-[Š¢ÂE(*®@ý‡L¼É68Òã]ǰ¾xê¸îü¢¥XVôcýkê;àã H6Äñ‘ˆ(;8žF³Í§¡ôžÀóó‚å’hîpÃQq =ƒ—PûâAtòìåd)D¹‹Ïÿyù˰½ù[øÜŽmpöxÑV»õþð‰ìƒã#Qvp<f›O#àv  o64ߟګJºðâ!Z«^ÓËÓ—“=p¤1äaþ†f „ÅpÒ ÇZxÎÙº‘p|$"ÊާÑlóiLíé^ŒªÖ‡SÿgÙn8ïEùâÝhå\J²‚ÞÓý£ªVL§\$Ý/`ó(å+‚cåPè¿DvÂñ‘ˆ(;8žF³Ñ§1¯kžÞЀö>ÿÔôò‚¼©©•çî€û¹É.8Òï9T?½‡Ú¿ O// öX²ý,¼þIöÃñ‘ˆ(;8žF³Ù§1 ¿·Ÿ}æÁÐdÚOEk× n²‚L²{:Üh;ïÄþýÇqch=Íl®n‚ÇÇ“\=q|$"ÊާÑlói(¾t¸Ýp»¯£G”Šý·:àöxyy²‚4¥®ÍËP^sCßc¼«k ç¡ ä)”­­ƒ{˜‰7ÙÇG"¢ìàxÍ>ŸÆ° ›]‹šs Œ¢«q= ó Q²b%ÖÖ^Á0o² ‚2quåïÃ3ü”^¸¶<޼ÇÞ@ëp�#x©ù»ð‰ìƒã#Qvp<f›OcÂó>Êë®c<x[8‡- çã±ê–`²=€ ;ªÐ<À½:d)d¢5kp[™ÀpÛ><‘¿kÝP0æ×±ÕÕ¾#‘}p|$""ì“t·¿‹5‡¾†L²ÛË‘?o=œ÷‚)¸rÍ/í‚kx2|O"kcPIS|¸Q÷ ŠK—£¤ ùOìCÛ€íNÖ¯Dg$|?"ûàøHD”M îØì³uñw nùOPº¢y ð„ãz¯ÁéX‡â¥û§¦XÙ�ƒJšèE{ÓûpÔF«w,t®‹¡û^x½½òó‡H²ŽDDÙL¸ÎÃñÞUž´:ÈF[—`Ã÷]CÓþ}¨ih ]Gñá¾7`ÞâÉÔÈ6TiãøHD”!q²jÏ8¼gŠóóPàp3éâÖ…ÈfTiãøHD”ÅïEÇ™ƒx½üqäÇÒ¼üÇQþêTÔqO·`ë­ 7®dGì÷ûÙ¿DDz¡§¹eEóCch~ñ:ì9ü<ý~(ÁÝžà_bÒMd3ì÷ûÙ¿DDz‰CxÛqrÿ+(+Yê¦6tû¸o;“n"›a¿§xØ7Èîø "JŸâï…çüa86T`ƒã0Î{®àØ xþr&Ýá[DöÁ~Oñ°oÝñ;@D” øºÝ8Y·¥<‘Z“n"›a¿§xØ7Èîø "JCì%H1_oîð˜î&ÝD6Ã~Oñ°oÝñ;@D¤×÷èn\7uÆòà’¿dZ´£nñ<äVàP§/|?{cÒMd3ì÷ûÙ¿DDzÂS·K—áSFÐ}ò5¬«¿Žžëhû´ϼìÂpøžvƤ›ÈfØïI¸ví6mÚµˆ¾û?± „Edm‰ˆôRènÂÖ½-óÈ•n8_܇ÖQÊC¶<ë„wꎶf›­Ë—_~ §ÓµˆkìÿΜ9~‘51¨$á/ù Š‹‹Cý!Ñ"’n"»}žˆˆô˜À`Û»X¹°¥«ËQ^þ4J‹EIÙªàßxÔÑq”·ÝÙfë¢&ÙÉq?"+ýœHHe\ììì ß›ÈúDŸ'""=Äôò§PP²"˜p‹¤[]Ö bûQx|¼`˜`›­K*{uD½¸‘•‰¾N$$¹—›ìFô{""ÒGlAmíE ò4åqÙjë’l¯÷r“ˆ¾N¤J4.r/7Ùè÷DD¤‡ÿÝ»x4áÁÛ½¶½f·­¶.‰öêp/7Ù…èïDªxã"÷rQrx›vcÛÁ£¡òã/Qµþ¸Gí¹;ÜvÑ·hôØàR,âÿDv ú;Q$­q‘{¹ÉΔ@�< ‘ˆ(Á¤ÛY1+ŽÐ^аÙÕ~œ½Ø.úÖګýÜd'¢ÏEй—›l-Ћ ŽpÛu$‘.Á¤ûãp~}^¯7ÉÒ‹!ÿdøqöbËè;v¯÷r“ˆ>O+r\ä^n²ŸIøûoâüá7°¦x>ò Lº‰ˆRwvPà6ŽŸðpæP-£ïȽ:ÜËMvä›´¨ã"÷r“­(£ðvœÅÁ×× 8_üè4Åå[ðjÅ{Lº‰ˆR¤ø®ãȶU( £ÑKÃmÛ“§E²mô­îÕá^n²ÑïÉ|"7`VXȘ´ÚÊÈK&&{NcGY1òÅså?Ž5{ã¼§~%Õ3ñÑÔuº—#¿¸¯îqÀáˆ^ÞquÞÊ£Ù6ò{u–/_νÜd;™ª47¬ÔnìƒÆe¦¶Éø½zÑ~ò=¼ZöS¬¬vÂÝ=̽1DDº¡ëгXÕø-ø[e|†ÜºŠ ©Õ"£`4'+µû q™©m²ö^?ú=_à°ã—X»ÁÃç;Ð~ìtð D"¢”(¾ØíÄ7ã1iwàŽ5Ýà1ÝA†ÜºªÒ«W¯†Ud9Ý:!Q9Ý:!^™& û£9Y©ÝØËLm“ý÷ª àë†ûä¯QYºÇt¥ÄÎú²Ð˜¬µð˜î)†ÜºŠâ%±±·…Të„Dåtë„xeu}ˆŒ€ýÑœ¬ÔnìƒÆe¦¶Éü½Ž¡¯ýcìwÔ¢¡õ^((T|=èðÜÃàÓMD”ã¿ÅÓ+7aOÌñÜ<¦{†!·®V È`’‘°?š“•Ú}иÌÔ6™¾W¥»«Ô3íæ—¢º¥7ê–Ë‹°æþðýˆˆ( ¥ßñ˜î ¹uÀd{Uzë’•Uzë•`’‘°?š“•Ú}иÌÔ6™¾× O/Ù·/�÷I¼¼î�¾èFGÛiÔ<³®aî›!"JY`�ç?B]hwšÿ¯Ÿã¨Ê[W±!M–ÔªôÖ%+«ôÖ%*3À$#a4'+µû q™©m2~¯Ûpn}­Ãâ?ã¸çÜ]­C€Ò×–-pzy"QJƿƱõ‹Ã—`,²eÅ(,*Bñš¸áãiÔCn]­1À$#a4'+µû q™©m2}¯Êà%Ô®,FQéÓ(//ÇêÒ`X²"ø·ù:àãDI"¢äè=Q‰yy °dûitû'p× Âù ÛêðbýMž½<È[W«d 0ÉHØÍÉJíÆ>h\fj›LßkhzyA Ê‚ ·Hº§—Š×qÄóÇ&¥Ä·£yó7¡y`*½žJº{€±VT=ç„7ô_{3äÖUÝ&š¶n¨œn¯Ì�“Œ„ýÑœ¬ÔnìƒÆe¦¶Éø½*ýh©ý�¹†ˆ(}á=Ý?ªFkx†PÀ½e{Žà¸c-Wµ`4ô_{3äÖUÝÆKbco ©Ö ‰ÊéÖ ñÊ 0ÉHØÍÉJíÆ>h\fj›Œß«ÿ>z$;n[ÿΟq?ÀýÞDDqîÀU] ‡®¢/4½Ü‚à¿äuœóŽ…ïdo†ÜºZ- c€IFÂþhNVj7öAã2SÛdü^½'°}[=Ž9pÆ]Žá÷U›°×ý0ü ""Ò¤ŒÂÛqŸy0ÙߎSÍ—Ð54®$Cn]­1À$#a4'+µû q™©m2~¯^'ʃÏ!ž'Ù2³ Ãá‡Q¤ øz®ÃívÃÝÑŸÌ¿ý}¸Õ~ ï(ÏfÈ­«ØÀ%›¶­Ò[—¬¬Ò[—¨,Ö‡È(ØÍÉJíÆ>h\fj›Œß«·ûx½Þ¤Ëý!?G""M“v½‚GËkq®s�ñ[h\»y%XQ¶µîŽŸA†ÜºŠ i²¤V¥·.YY¥·.Q™& û£9Y©ÝØËLm“ñ{U&˜Ð ÇÐ}ü4:x~5"¢ŒÂS·už‘àí ¸^ż¥¨n &Û#°ã¥f LÝÑÖ ¹uµZ@Æ�“Œ„ýÑœ¬ÔnìƒÆe¦¶Éø½*á9²eEóCϵ8àNvŽ5"" A{ÍË8t{ Êð%8žX€yk¸'¦™4㥭<<G0äÖ5ã ©ÁXm}ÈÜØÍÉJíÆ>h\fj›Lßkè:Ýù£üÕÝp8ÑË;.ôL†ïHDD (ðßxË‹—aEI!òò—ÃÑæEo{kJ°´î:x:µà6+ü×PÔ i¢iÛéÖ ‰ÊéÖ ñÊ 0ÉHØÍÉJíÆ>h\fj›Lßëd×!<µª=<؈(Ccèkÿûµhh½‡�&áêå91"rëjµ€Œ& û£9Y©ÝØK´M¼E›ÿÝ»x4¢ÁÛ½Á@l6­×JuɈò7ÔâÈ7£á¨üè:v’ÇtQÖ2òÉxCj0V[27öGs²R»±—þ¶ ÀÛ´ÛÕ¸ÆuärUëß{4{û;2íG“õX|ñ<³ÓMD”1–Ò C~¢‘’MÛVé­KVVé­KTf§##a4§\´[®úû qéo›`Òí¬=.ùR„Í®þðã2'ž3#ãÔ?½›÷ÄÏÍcº‰ˆ2–ñm1†ü4D#%KjUzë"ËZ¯£Š½o²ºDev:2öGsÊE»åªo°—þ¶ &Ý€ó뻳®m={éÅ?{™læý(€¾îó`C"¢¬ã¶>š!? «~ìtd$ìæ”‹vã˜HúÛFÁ_¾ýßÍJ\øïü÷ò2Úìô£q užGcÝ›p8ÞD]C3ÜÞQžô‡ˆ(CÜÖG3ä§aµÀŽŒ„ýÑœrÑnIÛÄ;¦û~_µ {ÝC÷RúÛðaÝGp÷gï@éÌûÑ(ºŽmDq¾˜ú>EË–¢¨pŠŠ+Pã!o"¢ ÄŒÿS‹£cÿ×ÙÙ~”ý2òQ7¤‰¦m§['¨e­×‰¼-¤Z'Ä+geû£9å¢ÝrÕ7ØKÛ$>¦{þf†1æ—0/ïQT6~\æÄógBé=ççå!ÉN4w@ ¸á¨8†žÁK¨}ñ :yör"¢”,_¾|Öø¯µˆÝ® ùˆFâ%±±·…T뵬õ:‘·…Të„xeõuˆŒ€ýÑœrÑn¹êìƒÆ¥¿mÓ=}}ÖÀ n{¾ÅP§›gÚn òaCóýð{I·^<DkÕ+pzyúr"¢T|ùå—¡19ÑòöÛo‡ïmO†Œ|DÃä‚Õ^‡(ìæ”‹vã˜HúÛf¾Û×pÉ톻£¾`öªøûp«ý<’δMíé^ŒªÖ©)𡤻l7œÇ÷¢|ñn´fñòfDDV—lo·÷r †Œ|DÃ$Ûƒ¬Ò[YÖzUì}“Õ%*‹×!2 öGsÊE»åªo°—þ¶™Ä°ë<Z^‹sŒßBãÚEÈ+(Áвõ¨uHK¼3ïGcðºöàé hïóOM//‡ù˰ýÜp?7Qêíí¶û^nÁ‘hœdI­Jo]dYëuT±÷MV—¨,^‡È(ØÍ)í–«¾Á>h\úÛfžºÍ¨óŒoO`Àõ*æ-Euk0Ù¹€/5CÖ¾ìô£Iø½øì3†&ûÐ~ê,Z»™p¥!ÞÞn»ïå ùˆÆÉ«½Q*ØÍ)íÆ1‘ô·ÍÚk^Æ¡ÛcP†/ÁñÄÌ[ëÄ=1Í| /m'R“#Ó~¤øzÐ!¦Å»¯£Ç7!æÅ£ÿVÜ/üœYND¤›ÖÞnîåžbÈÈ'Ó iª¬ö:D©`4§\´ÇDÒß6 ü7ÞÃòâeXQRˆ¼üåp´yÑÛÞÇš,­»Žñð=³-ã~4ìÂæG×¢æ\'†£èj\¼B”¬X‰µµW0ÌÄ›ˆH·Ø½ÝÜË=Å‘º!M4m;Ý:A-k½Näm!Õ:!^Y}"#`4§\´[®úû q¥×6cèkÿûµhh½‡€˜²=Ô ¯÷[|{_ÞÉÔ2íGž÷QþQ@8‡- çã±ê–`²=€ ;ªÐ<Àk†é¹·›{¹g2òQ7¤ñ’ØØÛBªu‚ZÖzÈÛBªuB¼r¦Q6±?šS.Ú-W}ƒ}и²Ú6Þ&l %±ár–eú^'ÚßÅšC_C &ÙmŽåÈŸ·Î{Á\¹æ—vÁ5<¾'é¡îíæ^|¬øåêuˆRÁþhN¹h7މ¤¿mø;`Ã’ÂÐcg/‹°f ¼þì'°âù3âï@ÝòŸ tE òà Ç% ô^ƒÓ±ÅK÷Ã3ÎùåDDé{»¹—;š!#ŸŒ7¤)²Ú륂ýÑœrÑnIÛøàv,AA鋨r8àˆ\¶•ã±ÒJ¼!n7¸1˜å6ó~¤ Ðw Mû÷¡¦¡Þ€Å?„û^/¼÷‡x25"²$1vZi1 C¾Sñ&›¶­Ò[YÖzUì}“Õ%*›©Cõ±?šS.Ú-W}ƒ}иô·Í$|m5X·_ã„i^'*ni—ßb?""ÒÏJc§™ÖÅïT|€É’Z•޺ȲÖë¨b.Q™ û£9å¢ÝrÕ7ØK´M¼%¾1ôÝüb÷ àÛ;¾¤'RÓz­T—l“ñœDDFb¥qÎLëbÈwš«Ðj¯C” öGsÊE»qL$3µŒ÷ʾIDVg¥qÎTÛ¬ð_CÉÕhµ×!Jû£9å¢Ý8&’™ÚFÆ{eß$"«³Ò8gªmVø¯¡¨`¢iÛéÖ jYëu"o ©Ö ñÊ܈“‘°?šS.Ú-W}ƒ}иÌÔ62Þ+û&Y•Æ9Sm³Â %W Õ^‡(ìæ$ÚÍJ SÚm£ŒÂë>…ú5pâÒŸá“|öoýˆ}“ˆ¬ÎJ㜙ÖÅïT|€V[ˆˆŒŽc¥Õwàª^‚ˆm^^Þ,Ù~6t.YdôW~ˆÈê¬4Ιi]l½uáÆ•ìKA 0¾M4…c"éð~\²¸®ãÎ?8ºÇŸ7œ;ð‹ÆÛIÏ^ž.ý•ß"²:+sfZ[o]¸q%{ Äçáx華ëç’9qL$ý}À·ãÔyFÂåc­¨~ñúÂÅl“Ñ_ù "«³Ò8g¦u±õÖ…W²Å~Ï8¼gŠóóPàp3é¦(Ið£³~'Ý —U𵿋§64c üŸl“Ñ_ù "«³Ò8g¦u±õÖ…W²ÅïEÇ™ƒx½üqäû|^þã(u *긧›¢qL¤tú€â=_®­Æás-p»Ýh»p 5QZð¶_èãôr""±Ò8g¦u±õÖ…W²¶1ô4W£¬h~¨¯ç¯ÃžÃ_ÀÓ/޹ÁÝžiÁ0™ÇDJ¯LÀçù[J†Z –cË‘ëRÏ`.£¿ò;@DVg¥qÎLëbë­ 7®dm }í8¹ÿ”•¬FuSº}Ü·MñqL¤Œú@ÀogÜnzr0ÖÈè¯ü‘ÕYiœ3ÓºØzëÂ+Ù…âï…çüa86T`ƒã0Î{®àØ xþrŠÄ1‘ô÷IønÞÄÉp1’¯ü¬;x9dôW~ˆÈê¬4Ιi]l½uáÆ•ì'�_·'ë6 ”'R£IÀÛ´UÇ¿ ϵ4;ð•‡p©ý¼ö|Ëè¯ü‘ÕYiœ3ÓºØzëÂ+Y^ íMïÃQs­^qvá øz<ðxûp‡ÇtS މ¤¿“ngEèq —‚¨vÝÉê}ây³MÆs‰•Æ93­‹­·.ܸ’µ}îÆuSg,.ùKö åA;êÏC^auúÂ÷#šÂ1‘ô÷±§{/ŸL¹\sO·¸ÝöŽíØŽ†®ØK‹¥OFåw€ˆ¬ÎJ㜙ÖÅÖ[n\ÉÚFá©[%ŽËð)#è>ùÖÕ_Ç@Ïu´}Zƒg^va8|O"c"éï¼r·´Náu¢bú0– <tíijΞP)dôW~ˆÈê¬4Ιi]l½uáÆ•¬MA » [÷¶`XÌ#Wºá|qZG(]Øò¬Þ©;…pL¤¬öe ¾‘róÖ}x²` ªZ‡¦ê²@Fåw€ˆ¬ÎJ㜙ÖÅÖ[n\ÉÚ‚nÛ»X¹°¥«ËQ^þ4J‹EIÙªàßxÔцìMô$+à˜H¢Ä[Ò@ß…Zlt¸à Ì>“„Ök¥ºd›Œç$"2+sfZ[o]¸q%kÓËŸBAÉŠ`Â-’nuYƒŠíGáññ‚ac"™*€‘ð^ù "«³Ò8gªmVø¯-qãJV§ ¶ ¶ö"yšrJÇD2U�#á½ò;@DVg¥qÎTÛ¬ð_[âÆ•¬Mÿî]<HšpàÎíÞ¬^ʇ̉c"¥Ûÿ]¸›?DÃG݇hvß…_ò}2ú+¿Ddu¹ç_.žøg$lÌ4fÛzëÂ+Y›¸”Ïnl;xN§3ÁrUëß{”»ÃíŽc"¥Ó_ê×, =vfY€%ÛÏjÃ-2ú«Œç$"2’ÜŽsâPÇåÁ×,DIé?b}ã-Œ‡k²ÁLc¶­·.ܸ’µ“ngE¨Ÿ'_аÙÕ~Ù•è doúûÀ÷èn\‡üµ¨9çA¿2ø¿Iøû;q¾îxæÐ­`Iý•ß"²ºìs ü]gñÞ{gÑ¥±+[ñÝçö Ê}4¿RºŠN¶˜i̶õÖ…W²¶`Òýñ8¿¾ ¯×›déÅP(X&;ã˜HúûÀÚk–cù¡¯ƒaWŒ±VT='ïÒ„2ú+¿DduÙçÔ½ÙËQwå Ž½¶·ÕÀÙ{èâ�.l{Noöh4Ó˜më­ 7®duJ �Ís”nãø vÙÇDÒßø;?Ä/÷¶`82ë £»¹ÏÔ\ †cÂ\<r}Yœm.£¿ò;@DV'cœSü^ܼé>f[ñ݉m+ñäæp¦½ ^o7<ŸîEÙ¢]ÜÓmGܸ’Õ)¾ë8²mŠògO)/p¸yò4»ví6mÚµˆ~û?± „EV'ú€>~tÖ—E-q—üÕ8Ô5~\æÄsf›Œç$"2’œs»8ïx…ê6 oÖò˜në;xðà¬@R4TìÿÞ~ûíð#ˆÌnjºO~q9^Ýã€CœU8byÇÕ-íXK2¾¿üå/(..oã/b\$ûm®‚ñÎßâé•›°'fŒ™½Ô ±}(ü¸Ì¥ò^¿üòK]ÛuýëODd.9ç”Qx;>Ç çI|æéËúÎ3Ù¶Ùºˆ ¯h˜d‹¸‘5Œ¡ëгXÕøíìc-‰‚ÄÙëµÆÁÈ¥³³3|o²Ñæº)½èèø.çãL¢÷*¶åË—‹c õýp”Öú™ˆ•Æ93­‹­¶.ê8Þ"ꉬD\ÊçÀn'¾ ‡·p¬éé¶¹d{»¹—Û~D»ë£À÷.Ìʸƒÿ¿ógÜÏñ%Ã"“ítú±þõ'"2+sfZ[m]’ííæ^n²–ÄÇZò˜nííæ^nûí®O�Þ¦ÝØvðhĵÿÅr ¿¯Ú„½î‡¡{)ýmø°î#¸û圵V+ÙV&ÝDD3¬4Ιi]l·u‰·Qæ^n²žÄÇZò˜nâííæ^n{m¯O0évVÌê?ê2³ ØÀ@óK˜—÷(*›¿ ?.sâù%Ûꤛˆh†•Æ93­‹í¶.ñövs/7YÒkI梵·›{¹íI´½>Á¤ûãp~}7æÚÿSËý!ÿÔøÄmÏ·ÊâtóØ>›­…ˆÈʬ4Ιi]l¹u‰ýUœ{¹ÉÒè<ÿêB{¸ëÐÐü'xýÜÇM3b÷vs/·}‰ö×g½Ÿ4áâHì˜2‰á‹ÄÙ>y±ˆ÷ší=ÝDDV'ÆE«0ÓºØ2éŽÝÛͽÜdYã_ãØúÅÈ}=¿Ë–£°¨Åkà†§Q£‘{»¹—Û¾Dûë“hzùðÔ¡[Òc¯¡J”|3é&"š!ÆE«0ÓºØ2éÔ3÷r“uÐ{¢óò`ÉöÓèöO"à®A…ó ¶ÕáÅú›<{9MS÷v3A±7ýŒ8‘ÚV”¿º;ú¼{6aå“Ï£ª±¾ð=³Më½j%ßìÓDD3ôóÆe¦u±mÒ­îíæ^n².ÜŽäÍß„æ©ôz*éîÆZQõœÞÐÉÈÔÄÁª ‹V©‹¶IønÞÄY»³Çq¯iv·ô'=§„Ök¥ºÄ™|3é&"š‘hì43­‹áÞ©º!µâB”[á=Ý?ªFëØTØpïCÙž#8îX‹ÅU- ý—ŒÌÊcÇEãÑß&èûô.ÅÓ­ŒàÏG^À‚Šè ÿ+ÛRy¯"ù>xð`¸DDDVÚöši] ÷N­„Yu½ÈàwમÀ†CWÑš^î@A°/æ/yç¼cá;‘‘Yyìà¸h<úÛ$Ñ1Ýóð˜ãŠ´÷Äk‘>V;Í´.†{§âûzõjè¶ø«Þ"ËéÖ ‰ÊéÖ ‰Ê hÎ(£ðvœÇgžLö·ãTó%t ‡+Éè¬<vp\4ým"ŽéÞŽŠ×÷Ì>¦{Õ¯Ñ.ñ„ì?DDúYiì4ÓºîŠOMT%±éÖ ‰ÊéÖ ‰Ê (÷&àë¹·Û wG|J0ÿö÷áVû5x¼£¼v·IXyìà¸h<úÛ$Á1ÝÎxÅå•6Ö°ÿég¥±ÓLëb¸wjÕ(ƒʽI »^Á£åµ8×9€Àø-4®]„¼‚¬([Z÷�o°òØÁqÑxô·‰8¦»îðy#¦)£¸Û´qÎé&"¢hV;Í´.†{§V݈28 Ü…§n3ê<#ÁÛp½Š…yKQÝL¶G.`ÇK͘º#˜•ÇŽ‹Æ£¿MÓ½�OÔ\å1ÝDDb¥±ÓLëb¸wª~xɦm«ôÖ%+«ôÖ%+38 ÜA{ÍË8t{ Êð%8žX€yk¸'¦™4㥭. ‡ïIÆe屃ã¢ñèo‘t¿„²Í»¢évÔ¢þd;úòæÓ°ÿég¥±ÓLëb¸wª~xÉ’X•Þºde•Þºde”{ ü7ÞÃòâeXQRˆ¼üåp´yÑÛÞÇš,­»žNÍø¬<vp\4ýmï˜nù؈ˆô³ÒØi¦u1Ü;µêF”ÁÍ1ôµŒýŽZ4´ÞC  û‡záõzqÈÏcºMÀÊcÇEã1U�ÃþCD¤›•ÆNSm³Â êQD”+ÇT û‘nV;MµÍ ÿ5 ñá©S³µ¦igZ'$*§['$*38 £`_4+·û¢ñ˜©M؈ˆô³ÒØiªmVø¯aXu#Êà€Œ‚}Ñ\¬Ü^ì‹Æc¦6aÿ!"ÒÏJc§©¶YῆaÕ(ƒ2 öEs±r{±/þ6Qà¿{f "øÿ;Æ}ž½œˆÈPÄØi¥Å, ÷NÕ/Ù´m•Þºde•Þºde3u ²6öEs±r{±/þ6 ÀÛ´Û…ÓéŒXŽá÷U›°×ý0t/¥¿ Ö}w TÎö""2 Ãm±Ôh²$V¥·.YY¥·.Y™Áû¢¹X¹½ØG›ˆëtW„§µÌßìÂ0&0Ðüæå=ŠÊæïÂËœx~"""30Ü˪Qdì‹æ2çí¥ôãæÍ~)——c_4ýmLº?>�ç×wC—"Œ]¦/MÄmÏ·Êâtsö""2 Ãm±æz#ªôßÂÍ,NS18 £`_4yíåŹf&Â¥x”{N¬ßë¦VÙǾh<úÛd½Ÿ4áâÈd¸¬šÄðÅ?âlŸŒž3…ý‡ˆˆÌÂp[,±U§fkMÓN»îÜoÑÜ12SŽ­•ÇÑìø966\œªмoämAO™Áû¢¹Èk¯8+7 ¦ñX̱¸‘Kå‹Pà`ÒmúÛ$Ñôòá©C·‚é·â5ˆˆˆÌÀp[,iQo*+ö¡Q3° /‡÷ ¼p n_øAÙÃà€Œ‚}Ñ\äµW¢¤û#|°ù§È¾v^þ2ì8ŸÓËmB´I¼E›8‘ÚvT¼¾‡cfÙ³ +Ÿ|UíH¶EÕz­T"""30ÜKÚF4QÒ}ì=l^² ôÚùKªq^Ât8dì‹æ"¯½âM/ƒ×õž,ÈG^ás¨o e/·À¾h<úÛd¾›7qgÖîìqÜkÚ…Ý-rÎ °ÿ‘Yn‹¥nD“MÛV¥\×ׂw¿œ]ù4\Õ+P—þôŽÏÔÅÜW¥U—¬Ìà€Œ‚}Ñ\rÚ^ÊCܨ…Áñ°àÉ7àòŽ…+ä`_4ým2¾OOáRì1ÝÊ(î6mÄ‚Šè ÿ+ÛØˆˆÈ, ·ÅR7¢É’X•Þº¨òÅFìø‡ÿ|Í…x²úÎ\ÎÒój”‡h 3-Ù&ã9Iž\µ—âÿÍÛ—!?oJ64ÂãKvŠµÌ±/þ6ItL÷<Qs£á{f›x """30Ü+7ÑIø»Oc»˜Ržÿ64^‡OÖü·0Æa¦¶ñ^ÙÍE~{)ô]Âþ5‹‚¯µåµáÍâea_4ým"ŽéÞŠòWwGÓí¨EýÉvôIìKì?DDd†ÛbÉßˆŽ¡¯í}¬)Ç+®EmË=iÇ+Fbp`fj ï•}Ñ\ä¶×|Nl ý�¹ ÛNÜÒø2µK‹¥ƒ}Ñxô·I¼cºåcÿ!""³0ÜKlDÕ©ÙZÓ´3ªS¢Óù ŠÉÃ#Å?lj®áÐ ^"ï/.-&ŽýVEÕEÜô”Gª}LHTN·NHT޼-£ß°/š‹¼öƒ÷ü>¬?@Š)啵š'š<vpVò:ݶ‘n›(þ»p7ˆ:±—»îC4»ïÂÏdDDD!†Ûb‰¨Vò!D–u×]>óŽgP|þ¼Gþ«¶îš*ÕépNçQüësÿÄët[\ª}LHTN·NHT޼-£ß°/š‹´öRúÐ~ªizŒ·0é¶—tÚDñu >txBôñÜK¶Ÿ•z¨û™…á¶X²6¢J;Ni”ÑËQÜö ìåuº-ÍLm!ã½²/šËÜ·§—Û‰þ6ùÝë_¸5ç<è÷‹yæ“ð÷wâ|Ý/ðÌ¡[Á’ì?DDd†Ûb©Ñx{…L꒕ťŚ;F´ë´꒕Gª},YY¥·.YY%nËè7ì‹æ’‹öRü^t|æD}˜õó&ê>Ak× ôó]°/þ6A{Ír,?ôõìëqµ¢ê9'¼áb¶±ÿ‘Yn‹¥nDõ$&zê®^mƒßÛÏœõøUe%*7lEÃéKèOúX•V]²2ƒãHµ%+«ôÖ%+«Ämý†}Ñ\ä¶—8‘Z¶?¹0ô:ÑËÔ¥9=Ø^ô·‰ç‡øåÞ Gv•À0º›«ñÌô%Ãàâ‘óèËbwbÿ!""³0ÜKêFTœH­é5<Y N`¬@µëŽ´=;R׋t1S[Èx¯ì‹æ"³½”ÞÓØ¸0ùÅë°çàÇpµ¶ÁínC«ë?؉òâB,ÙñyV¥Hì‹Æ£¿Müè¬/ =.é’¿‡ºÆÂËœxN"""30ÜKÞF4€Þæ-X˜7ÅkvãàqZÝî`€Ù׉F|ðúÏ[†çïÏž"— ŒÃLm!ã½²/š‹¼öz·c +>D§OûˆmÅ÷ŽT–aÛ…áÿdû¢ñèoã¿ÅÓ+7aÏô5ºã-5hl ?.sì?DDd†Ûb‰¨:ÅVkêmÚuÿö;8{  \Ôª¿Úß7G±êo×ムmášž7Å2ƒãHµ ‰ÊéÖ ‰Ê‘·eôöEs‘Ö^×Q·¸ už‘ð?´)Ý(ß~‰ï•öEãÑß& ü=nœmÿ.æëàÿïü÷yx‘}’î¶£[±ø‰ýðŒ+šõSåïqjw9~þÁçSA‘÷¼-è)380ŽTû˜¨œn¨y[F¿a_4iípÃQä€;Ù15â~rN†Å¾h<úÛ$�oÓnl;x4æj ÇðûªMØë~º—Ò߆ë>‚»?{q±ÿ‘Yn‹%k#p;PäH~­Ù€»Ξp){‡™ÚBÆ{e_4ií¥|CeU¸0’dOä° [·º0.fû¢ñèo“`Òí¬=Nk™¿Yô 4¿„yy¢²ù»ðã2'žŸˆˆÈ ·Å’µUnBÙ¶dS$'ƒñånluõ‡ËÙÃàÀ8ÌÔ2Þ+û¢¹Èk¯qÜs¾ŽÝ­ñÏc¡øðU}%~ÙÌs]Ø…þ6 &Ý€óë»ðz½³–ûCþ©¾ÄmÏ·Êâtsö""2 Ãm±Ôh¼©·BZuJ7ÿü+ˆs¼¶põß>Býêmh˜˜]s[o™Áq¤ÚÇ’•Uzë’•Uâ¶Œ~þh.RÛ+p®Ú÷q¦{$&©ÇPçy®z…y¥¨¾àM:K(ì‹Æ“N›(�´OÅ'û™…á¶XêFTOb’Z‚ËgÞÃæÍ¿F·2ôŸéúÀ�:Ïÿÿ²ô?"oɸÐ7óØä¯™¬ÌàÀ8RícÉÊ*½uÉÊ*q[F¿a_4—¬¶W ·nõG'Ðïàþü:#³nŇžqunGî­Ì2öEãmoIHlG/4¡¾Fœ¥|?]ô§¸W[ëµR]ˆˆˆÌÀp[¬ìmD•`|Ù…[ý‘× þ¯¯Ÿw<ˆ _:ÄåÃ<·áõöb(œ”gƒã0S[Èx¯ì‹æ’Õöò:Q^.ç¤hé`_4ž´Ú$pç¶/C~ð±yùE(]]ŽÕ¥ÅX¸æ�nĹ]6°ÿ‘Yn‹•½¨8¹K%Ê%œ- ŒÃLm!ã½²/šKVÛ‹I7%¡¿Mè=Q‰yy…(s¸pۧΣCß…7ñ¡[ÈþÏØS؈ˆÈ, ·ÅQuŠ­ÖÔÛÔë®L'݉î+D–Ó­•‡h‹x‹v~‰»=S'›Š¬Ÿuß–38~¶uêvLÖk¥ºd›Œç$y²Ú^Lº) ýmâƒÛQ‚¼;fŸ _âåæö""2 Ãm±²·åžnÒ¦¿-zд½ E^ƒVcùý.¬ß{£áGeƒŒ~þh.Ym/&Ý”„þ6™À€ëU,ŒJº'àóüŽÊåxlÛy)—›ØˆˆÈ, ·ÅÊÞF”I7iÓß=p–„—t™¿®áìM¦Ï™m2ž“äÉj{1é¦$Òjå>.ìzÏïo7tN”^¸6?†ü%¯ãœ7ò¼*ÙÅþCDDfa¸-–ºš¶;7¥º�Î8V¡ÔñI¸¬}_íÇê¯KVfp`©ö±™rÞ|å-üñÌ™ékÏž‰¹=]¾?„Ö”ŸW»¬·eôöEsÉj{1é¦$Òn“Àwh}÷Ÿÿw/`£¿ûƒ žAš›ÁþCDDfa¸-–ºÕ“˜h×1é&m©ö±™²'Ÿƒ;¦ÁÛ½¸u_=Ï«]V‰Û2ú û¢¹dµ½˜tSiµÉø×8¶~ñôÙË—-+FaQŠyör""¢Ãm±²·åôrÒ¦¿-âÓ}Uëß{TÇ@¿û#Ô}؆þ˜s eBF¿a_4—¬¶Wß <ÿü ô…‹s}Ñxô·‰zöòX²ý4ºý“¸kPáüƒmux±þ&d¥Ýì?DDd†Ûbeo#:Œ/·àù÷Âå¹ÅàÀ8ô·E¢cº‹°ÙÕ¼Ïwh®|yó^Bó@öBLñÙ&ã9Iyí¥ Ðw Mû÷¡¦¡Þ€ü—=_…Ë•}Ñxô·Iøìåó7M}SIw0ÖŠªçxör"""Ãm±ÄFTb«5õ6ýºKèkÿûµ¨:К¬øzÐáñ¢%âþÚM^'$*380ŽTû˜0Uþï?¯cŽßžºý)†B Š‚+_œÄÑãŸCŘÚój—#oËè7ì‹æ"­½”Ûh\¥þ˜´�Kª/âÁ:,ÎËGáštú³8e#öEãÑß&á=Ý?ªFëØTŸ ¸÷¡lÏw¬Å⪖¬^Ñ!û™…á¶Xb#ª•|‘e½uîS»±*?¼wò‘ÅøÅoOáFÝò`yþaç±Pâ­Þ7ö±j9Q¨ÌàÀ8RícÂTùn»/Ãív£ñ“‹ÁrüýßàpƒgZÚÂ÷Œ~¬öó¤V޼-£ß°/š‹´öš¸ŽºÅOÁá„â¿“/ÿõ_}‡žŽËø´æ¼šÁ!û¢ñ¤Õ&;pUW`á«è M/w  ø<<{9ÑÃm±dmD'<uX¼dܾ�üÝ'ñòºøj m§QóÌά^æI ƒãÐßýpm^†òš³èúã]X[8%O¡lmÜÃæ:Qû¢¹Èk/?º»±·u�bÿ¤r¯ /î{%'ðеÏæà|ì‹Æ“v›(£ðvœÇgžLö·ãTó%t ‡+å`ÿ!""³0ÜK݈ÆÛ (¤U¸ Ǻ—qà‚Ø39Ž{ÎxáÀÁúspmÙ§7ÿ±AÉê’•Gª}lº<q[K_ÅÑËÁ²Òì/#ï?ÿ/´0rÁ~çì¬Çª¢ž'(•²JÜ–ÑoØÍEZ{)ÐV» ‹J±º¼å«KQTX‚2ñ7ÿ 8ÜÃá;Êþh<úÛd¾žë¡™@îŽøÄ©ü}¸Õ~ ïhèY؈ˆÈ, ·ÅR7¢z“Tê”ÁKØ´ôoð׋Šò`€¹º´?,úoø‹ÿù:àSâ>VHV—¬ÌàÀ8RícÓå‰vüêªpÜ݆á¶}x"!žtœ “h~ëö»f=Võ<A©”Uâ¶Œ~þh.ÒÚ+4½üÇ()[g–õØ~äz(y’}Ñxô·É$†]¯àÑòZœë@`ü×.B^A V”­G­{j&… ì?DDd†ÛbÉÚˆ†¦—ƒ€²¨à2¸T¼Ž#ž‡R‡þ¶ðáFÝ3(.]Ž’‚|ä?±m^´;XS¼už‘ðý²OF¿a_4yí5Á–zÔ^ì›5þ)c~„ω%û¢ñèo“Qxê6‡ÇÁ ¸^ż¥¨‡-Œ\ÀŽ—š10uǬcÿ!""³0ÜKÚFTéGKí¸8{üí$Æüß3é¶‘´Ú"Ћö¦÷á¨9ŒVqb Å¡û^xoÿ÷%^^IF¿a_4—Ü·W�^çkSISø?²°/þ6A{ÍË8t{ Êð%8žX€yk¸ì<Ê@3^Úꂬ؈ˆÈ, ·ÅQuŠ­ÖÔÛLë„èrϼ>Ö;›Ï]fp`©ö1!QùêÕ+8㨘NN¢ë2yÞ™Û2ú û¢¹Èk/:7aIA~è5f-…Ïbë]ȼr˜x2ým¢Àã=,/^†%…ÈË_G›½íMp¬)ÁÒºëu:5ö""2 Ãm±ÄFT+ù"˺ëZœhÜðÓÐeLBeÔò~øÿ?´zGµ.'ª•Åë1ˆ¶PÛ%Q› Så‹)%'©^ï]HT޼-ž?Ûd<'É#­½n8 ¢´r'GÄò¶•?üUðö[hp?¶Ç›}ÑxBcZœ%¾1ôµŒýŽZ4´ÞC�“ðõÂëõâþ?iÿÑz­T"""30ÜKÖF4tÝЂ'QYµ'&À|å-Gåâöa¸gM?ÏÆ¡»-æ09‘ÑoØÍE^{ ¢Í± ûg“ �ïï*±½Í.Ëþh<fjö""2 Ãm±¤mD}—àX÷<ã±iÑ·øÝ?íF[ \”„Áqèo‹ɉsnyɉŒ~þh.RÛ+Ћ›·b,  »æ¿ayóì¬eû¢ñ˜©M؈ˆÈ, ·ÅR7¢ñ¦Þ éÕ)¸|îhr]—Õú?¢fþZ4O$xl¢çM­ÌàÀ8D[Ä[T³Úðò§p6}6„LÕ)ôwãôŶYí­RŸGëµR]²MÆs’<òÚ‹ÇtÓlfjö""2 Ãm±Ô¨Vâ¢J«Î»Ÿ~?Áä¬%…kÞÃ3ÿ•T¥ô¼A©”Õõ¢¹§¶E²6KVVé­KVV‰Û2ú û¢¹Hk/ÓMÌÔ&ì?DDd†ÛbÉÚˆò˜nRÙ=¨d_4yí5w‡M¨ØÇîã#‘ †ÛbIÛˆÆ=¦»Ί¸yL·mØ=¨d_4yíåÅÙßCKgìžì~¸öþnŸœ #±/ÝÇG""" ·ÅQuŠ­ÖÔÛ´ëÎý¿kü7t>D׎/ÂÅpYó±)Ô ‰Ê Œ#Õ>&D–ÿ]4Ô¼†_Un@Mý 8u1î}#o zÊ‘·eôöEs‘×^=p–„žÖ’¿Ý߇ï'x-23µ û™…á¶XÒ6¢^'ÊE0©±ä¯jD·Ä“ âuÈô·…‚€÷ªŸ\Õoòò—aû¹;9IBF¿‘ñœ$¼ö³|VÆr³•¥‹P\þ·…ï'û¢ñ˜©M؈ˆÈ, ·Å’¶õ6¡¢ôETEÏ]õ"J £|[#Ú}“á;ÊÁàÀ8ô·Å\ØöJ*—ç†ü¢¯àóvÀ¹e«Ô=‚2ú û¢¹Èk¯‡¸éñbÖÈ7zŽ¥/ ±k4üyØÇLmÂþCDDfa¸-–º7õVH«Î÷ Žž¾SïÆ¿5üK×6¢k\‰ÿØ duÉÊ Œ#Õ>6]¸QYò Ž^Ž®{ÀÇZßÄÊ·šg=Võ<A©”Uâ¶Œ~þh.¹m¯I _x óÃfWoøò°/™Ú„ý‡ˆˆÌÂp[,u#ª'1ÑS]þ <÷·È+|®A^§Û.RícÓåɛؾ²ÇÝÑõP†Ð^û,ž~çì¬Çª¢ž'(•²JÜ–ÑoØÍ%çíèGgG|’¹ØÇLmÂþCDDfa¸-Vn7¢J0¾ü=>iסU180ým1ï‰mX[õ!ε¶Áí¾Œ §?D͆'QPü:.HºÌœ £ß°/š‹•Û‹}ÑxÌÔ&ì?DDd†ÛbYu#ÊàÀ8Òj å!<G^AiA~èñyyù((}G<¥þ`#£ß°/š‹•Û‹}ÑxÌÔ&ì?DDd†Ûb‰¨:ÅVkêm¦uB¢rºuB¢2ƒãHµ ÑeW.žAÓá¸=wpñJüûF?N_9ò¶Œ~þh.Vn/öEã1S›°ÿ‘Yn‹%6¢ZɇYN·NHTN·NHTfp`©ö1aª|~ú,Ï‘õW¯¶áâáwñYÏX¸Y—Êój—#oËè7ì‹æbåöb_43µ û™…á¶XV݈280ýmу¦mÏíŽX.¡Ùñ,*]D{§¾@ö'šËè7ì‹æbåöb_43µ û™…á¶XêF4Þ^@!“ºde•ÞºdeÆ‘j›)÷ÀQúƒÐãâ/ àÉ7àòŽéx^í²JÜÏm2ž“ä±r{±/™Ú„ý‡ˆˆÌÂp[,u#ª'1ÑS—¬¬Ò[—¬ÌàÀ8Ríc3åüŸÙ„Ú¿›ÞËÝÐÐ0½§{ÕÎBå¶ G°ã—‡q¼-ÕçÕ.«Ämý†}Ñ\¬Ü^ì‹Æ#ÚÄL ‘n‹eÕ(ƒãÐßý¸Òz³/ €×¹ ·oª¨ôÁµe œÞÀT9 dôöEs±r{±/‘.â±jÆàÒ8²ÙŠ#âXn¥­Ž2üxZG³wl·Œ~þh.Vn/öE"""²ÃE<"S§ØjM½Í´NHTN·NHTfpi¢-â-‰ÚPˆ,GÕ)÷ñÁÆuذÿ4Ä~ ­×JuÉ6ÏIòX¹½Ø‰ˆˆÈ ñˆ L3© Š,§['$*§['$*3¸4ŽTû˜¨œn¨y[F¿a_4+·û"Ùá"«a .ÃLm!ã½²/š‹•Û‹}‘ˆˆˆìÀpUƒ0—Æ‘^[LÂïýšêàp¼‰º†f¸½£Èþ•¹£Éè7ì‹æbåöb_$""";0\Ä£añ¦Þ ™Ô%+«ôÖ%+3¸4ŽTûØLy?z ÿðÃGB^ò—aû¹;¸¬ñXUôó¤VV‰Û2úŒç$y¬Ü^ì‹DDDd†‹xÔ LOb¢§.YY¥·.Y™Á¥q¤ÚǦËÊmìþï?ÄK7ᜧ~EÔ· ¿ósÔ­};·Îz¬*êy‚R)«Ämý†}Ñ\¬Ü^ì‹DDDd†‹x¬„1¸4Ým1ÑŽšE«qèöXø*c­<çì —³OF¿a_4Ñ^V^ˆˆˆˆ¬ÎpVPf•…ŒA[øÐyè5ìmˆ8†[AÀ×…æ/¢¦}xê_×pä¬7«ÇyËè7ì‹ÖµiÓ&\»v-\š[ÕÕÕ8sæL¸DDDDd_¦¾ “<¨ïå/ùKø?dd¢­ÔiÜZÓ»g•Ûœ¨_:?ô¸dË#Kv¢k2ÅçS޼-ž3Ûd<'ƒh[£ŒC"ùöÙgÃ%""""û2mô-:±WÇ(Ä{ùòË/Ã%22ýIç(:ëŸÇÊÍ»àp8’,GÑî fÝY’Ê{?úèé{Lº­©³³ÓpInqqq¨Ù™i£ïƒÂét†KsO$=Fú€âK'éTún¢ãþx¸”;‰Þ«HfÞ~ûíÐ}ôô=&ÝÖ$ÆC1.‰èŸF{ODDDD¹fÚè[ìÑ{vŒBLéÉ ÷ꟚtÆ›Þ-D—Gpú“ÏᎩÿ¿s»7ç— ‹L¶Õ…I7‰>`”ã¹Uâý,_¾<\""""²'SFßj‚k4<q9¨}'Yò;SîÁÿùù¿à_ŽÐÞD±ˆ©äNçAT­ ÿæÞ÷2úÝ¡îÃ6¸Ü©>¯vY%nGös­d[]˜t“hW#žWB$ÝwîÜ —ˆˆˆˆìǔѷюçVñÄAæ ?éì³¼`:Á^аÙÕ¼Ïwh®|yó^BóÀÄÔò@¼F¢d[]˜tÛ›çV‰éå¢ÿÙ•)£o£Ï‰'2>ýIg>Þ_{½ðÎZz1ä'NSúžÛƒL=(+"ël.d-F<ž[%ör‹q‘ˆˆˆÈ®L}íxîH<qñ‰¤SÆ­5½{v¹Ÿ¹Œ%ºþêUêÿ÷oо0wt]*Ï«]޼-Þ«Ø‹™0k-FœùA¹#ÚßhÇsGSÌüþˆˆˆˆd2]ÒmÔã¹U<qñéï? ¦—ç¯Æ¡®±ðý²O¼† ~dJ”|3é¶7ÑŒx<·Jœë‚S̉ˆˆÈ®L—tõxîH<q±‰EŸ4m¨À«{¢¯É½gó3x²bÛ‡Â÷˾Ø÷/ùfÒm_F>ž[%¹SÌüÃ�‘,¦Kº|<·Š'265‘7½[ˆ.?„óè´ÅÔa×áš��FªIDATCéFÓÖZüöó+³«Š~žÔÊ*q[}¯±b“o&Ýöeäã¹#‰¾üòËp‰ˆˆˆÈ>L—tùxnOdlj¢ªµ¨¢“a/~½·_Æ$ÄŠÿky¾+Þjž•,«ÔçÑz­T—DÔä›I·}‰¶7ÃñÒ"á—U$"""²S%ÝF?ž;Od\úûP¢K†ý÷Ãðý²O¼F*xÆ|û}Ä Ó¶Õñ›S̉ˆˆÈnL•t›áxnOd\©&²3zд¹¯GÏ=uL÷j¬ªuÃ>{¹ úß+Ù‰ŽçŽ$öt‹±‘ˆˆˆÈNLÑ›áxnOd\"‘U§€«Ó¿UÚåó¸éñB\;²þªû«_€«oêÊÜQu·=åÈÛLºÉJÄs3ýH@DDD” Œè%≃ŒIÒ}Ÿžè€¸0XdýÕÖØ»ª'îM•#ë"n zÊ‘·™t“•ˆ!Å‘<‚ˆˆˆì„½Db%Od<úÙD×é~ 5íÃáûeŸx ²©¾‹hº4ˆYG/ _‘³ÞÙÿ7 qØ §˜‘$¢Ÿ@ß§§piDLà4‰á‹ÄÙðô]³á‰ƒŒIMdãíi¢Ë=püÏRü¬²rúxîJq»æ�N¶÷â²ÆcUÑÏ“ZY%n3é¶1¯åâ‡%ÿ©CèŠ.MBœ›Cœh’ˆˆˆÈ. Ñ‚ñe…fp™—÷#<uèVèxZ3≃ŒGô+!Yò;SŽsî0­Çª´ê’•Uâ¶ú^Ɇ¼csÅŽ¨“÷9»°yå TT}„vŸYGE""""{1NÒÝ´¯ï‰0÷lÂÊ'ŸGUc;|á{eÊL‰,“nó}Ïq&hʽ±u÷E šu~9‘Í$¢Ÿ„ïæMÜ™µãf÷švawK¿i_T)þ»p7ˆ:ñcB݇hvß…ŸAóœ`ÒM¦ yL÷$üwÿˆÊ/âDßDø&¥ŒÂënFCÝ›p8êÐÐü'xýÜ{ODDDÖcˆ>Î1ÝÁ ìnÓF,¨8¾ð¿ÌHñu ~Í¢P5³,À’ígá 0óÎ5ñù«Ó¸µ¦w§ZN·NHTŽ¼Í¤ÛÆÓýD-ÚGM<v(q£þ9Æ®×’×qÎ;{ï>‘™$¢OtL÷<Qs£á{šÏ÷èn\‡üµ¨9çAhOÎ$üý8_÷ <câãÕÍJô+­WÐSN·NHT޼-Þ+Ù”÷ØP¾{"¹ .5õ§ÐÞgîÄTénĪüE(¯9 O¿?´7_ñ÷¡ó|Ö>Ó`Ú“Äi1NÒÝ´å¯îŽ .ŽZÔŸlGŸ©÷ ½f9–úzöù±VT=ç„7\¤ÜПȎànÏ€Æ!#¸s»7Ø{åaÒmcqŽé¶‚‰ö,Z~·g}©¢µê8½æ¼b‘ƒDôñŽé¶þÎñ˽-Ž 0Ãèn®Æ3Ó{ñàâ‘óè3óï &¡?‘íAÓö*<æ„Ó¹DÕúwàMó  ßýê>lCÛI·¡¯ýcìwÔ¢¡õ^èÇÅ׃×üçƒð{pè—ï u8ò¸ô�|ݧ±ã™wÃSçÍ}ÉH""""•q"ú@/Ú›Þ‡£æ0ZCÇôMÀ×ãÇ;ª±‡ÑLüè¬/ %OI—üÕ8ÔÅãeŸµoz·]î£ô³Û+´ágû]ÁûžEså£È›÷Þù¼-ü¸dÏ«]V‰Ûâ5Èž¦¦`‡ûY~)ª[ºq£ny°¼ky‚#‹yMvÖciÔ÷(ÞbîKF ‰èÃÇ=‡­ü%{Ðò u‹ç!¯°‡:Í|Á0ã¿ÅÓ+7Í:6söRƒÆö¡ðãHÑÇ„dÉïL¹o¾òþxæ ¼^oh×^ŸºÝ‹/ZÛB÷ } ÏíA\‰û<©•Uâ¶ú^É~&<uX¼dܾ�üÝ'ñòºøj m§QóÌN¸†MœŠŽ{PÿôjlÞ£5Æ,¼d$™œA"úQxêV`‰ã2|ʺO¾†uõ×1ÐsmŸÖà™—]ßÓ””^tt|gò=öÖ¡?‘½‹OŽ\ÆÈ¬”H�“n ܆së»á)Øã¸çÜ]­CÁñ¤®-[L~Üó®ïÿ6î±àÔy"""¢‰èº›°U=îYé†óÅ}hU <ta˳&?Ù˜e§Î›“þD¶Îò‚Ðãf-’ ¯Aö¤ ^BíÊb•>òòr¬.-FaÉŠàß"ä?ê€{̼£‡•§ÎÅ2HD?Á¶w±ra1JW—̧QZô(JÊVÿ.À£Ž6˜÷Hg+O7§é„YcÑšî}õê'hÚ\‰×TVV†1íµògËð“/LùØØçÑz­T²§Ðôò‚”n‘tO/¯ãˆç¡©°³ôÔy"""¢‰èÅôò§PP²":¸,_ƒŠíGáñEžáÖl,>uÞ„ô'²qÓã}2'¥M[kÑ2(¯2é¶±Þ#ø§ÿû_q!¶ _‘³^sÏ’±ôÔy"""¢h†ÙÓÝûáÏðÿëy FE’V¸dŒÅ§Î›þDÖ‹O›Ü³ŽéVüߢ©r *NÜ ÿ'û˜tۘ׉ò`û‹>»ä?u]&Þlå©óDDDD± Ñ‚ñe…fpiþKÆXyê¼9‰~%DNÿŽ]Npɰü§ð«Ãf=Vý<©•Uâ¶x ²)ﱡ|kÌUvaóʨ¨úí>Šž:ODDDË8IwÓV”¿º;"¸ .{6aå“Ï£ÊÔ—Œ±òÔysRÙdÉïL¹{Ÿ^gÃÇr‹%t\wÍœlïÅeǪ¢Ÿ'µ²JÜfÒmc¾oà¹3û'9åÞÇØºûb̬ “QúÑRû.Î:4ccþï™t‘¥$¢Ÿ„ïæMÜ™µãf÷švawK¿©ƒ0e°µµA²ò=üc&ž#jRúÙ8Çtç�“n뻈¦Kƒ1cß$ü>Šç¼ˆ}VüÁ®ÎûÂÇzYƒA"ú ô}z —FbÒe>òTœ@_ø_–âmÂÆêð±Þ”3é%²ÁdÇû'47ÔÁáxu Ípçà’oLºm,Á1Ýyí…{Ôćÿ&7üZë–—Â5ï¡•—T$"""‹0HDŸè˜îyxÌq£á{šçlXR¨±nbY„5û[àõsw®ˆÏ]Æ­5½{v¹ ¾°¦0?ºíù¯øùþÓÁÞy_=Ï«]޼-^‡lÊû16Wì˜9Ü&´ˆcºŸEmû©Ò€Û‚‚'QYµ'fý^AùcËQù†¸}n‰W """Êã$ÝMÛQñzL�&Žé^õk´›ú¸gÜŽ%((}U‘ë&–måx¬´oˆÛ ns£i""‘ÕJpͲû8W¢°¼û}ŠVQ¯øájz[Ÿ\‰C]SÇÝF>VóyR,GÞfÒmcqénÂ/_ù}f/|—àX÷<ã±+ÑgE ܼbYˆA"úÇt;wà—™¯I\·¶¬Û=¸61¼NT8ÜÓ{J)7t'²í¨Y´‡nÇ&@ ÆZxÎÙ.g“n뻈îØ«øOÂ÷¨4ý1Ýc¸÷É6¬\ï@Cë½Ð¨øzÐáù=·ïÁÇ ‰ˆˆÈB Ñ‹cº›g_›UÅݦæ?¦;ÐO^Zƒõû£Õ+· øz<ðtwãö[Ì15‘·§Yˆ.ûð‡Øxà³é¶u_šw¼8sɰáK8rÖ›àyR+«Äm&Ý6–è:ÝOÔ¢ÝÄÇt+ÝX•^ŸüRT·tãFÝò`yÖòÀ¾‘$¢OtL÷<QsÕÄÇtîÆuȯOþ’=hyÐŽºÅóWXC潚Y‰v’%¿ÓåÉ›Øþ_þ]DŸŒ¿ä?uÇÛR|Þ ­²JÜÏI6åmÂóe›b®Óí@Mý)´÷Ížvn&¡ët/Ù·/�÷I¼¼î�¾èFGÛiÔ<³®ažã‚ˆˆˆ¬Ã@I÷K(Û¼+*¸t8jQ²}3ï ×é^%ŽËð)#è>ùÖÕ_Ç@Ïu´}Zƒg^v!v)É¥?‘EgýóX9«j-GÑîË^ÂÀ¤ÛÆâÓm Ûpn}7|i°©ÃˆvµJ\[¶ÀéåA7DDDd‰èãÓm ÝMغ7|i0¥Î÷¡uTòÐ…-Ï:áº#åˆþDv=W. ý~ìQù#¸s»Wê1ùLºínCçÑX÷&ry©:Ù”ÁK¨]YŒ¢Ò§Q^^ŽÕ¥Å(,Yü[„üG³5""""21cEôtžÿu¡=†uhhþ“.¥5Á¶w±ra1JW—̧QZô(JÊVÿ.À£Ž6Xt_–a‰DVÆ­5½{vù4m¯ÂÁcÎé=ÚN§¸½ÿR¶%|½ä�\ o`kÕïÐ,¦ö¼ÚåÈÛLºíl]Ç6¢8tìó|-[Š¢ÂE(*®@ý‡¦N¼CÓË JPL¸EÒ=½T¼Ž#s¯Q,ãDôã_ãØúÅSÇ>çaÙ²b¡xÍÜ0õ%ÃÄôò§PP²":¸,_ƒŠíGá1õº™S:I·³¼ ô¸ÙË_c³«?xÏïðΪÿˆ¼ÿëŸÑ<0çyR+GÞ¯Aö¤ôžÀóóÄy v¢¹{JÀ GÅ1ôˆ½Ä/D§™‡¥-µà"¯ÃMDDD6`ˆ>€Þ•˜—·�K¶ŸF·w *œß`°­/Öß„©ãËÁÔÖ^äu¸ B"Ûƒ÷ŸÀ×^/¼³–^ …fc( } ÏíÁ¬N7gÒm_·y‹°¡ùþÔžßPÒ-GyˆÖªWxÜ3‘I$¢÷Áí(AÞüM¡½„ÂTÒÝŒµ¢ê9÷LÙ£?‘ &Ô¹ùÙ‡I·}Míé^ŒªÖ‡SÿIwÙn8ïEùâÝ¡óB‘ñ$¢ïéþQ5ZÃ'Ð ¸÷¡lÏw¬Åâª_2ŒŒF$²ñUäoAܾòE.8ëQãp`ÃÖÿ —§/´W[ë¾*µNëµR]È®ÆàuíÁÓÐÞ矚^^ìù˰ýܬΨ0ª·ß~;tþ""""33ND¸Wu6ºŠ¾Ðôr1µRÏø:Îy­ª±¿üå/¡Kü%¹ÔDV+9VE—\>ókü¼ø¯BÍ/*Åÿ(ý)J‹Úú\Ôx¬*úyR+«Äm&Ýv7 ¿·Ÿ}æÁÐdÚOEkWva0²k×®aùòåá‘9+¢WFáí8Ï<˜ìoÇ©æKèнL“uUWWãÌ™3áÉ¢;‘UîâÄó?FÞ¼Up|ÑŸzÝø€v½ŠC]ò~bÒMvW\\Œ;wî„KDDDDæÃˆÞ@¾üòK<ûì³áÉ¢;‘ Oë]°íFÂÿRMŸ{@&Ýdw -DDDDfňÞ@ÄÔr±Wg`` ü’A$²ê4n­éݳ˟µåñPÒý¥Z¯<Äѽ¿ÄªÅ‹±íƒˆûêy^íräm&Ýö%f¾ˆâìNìåæs"""23CDô<žy†8q§˜Ë•N"«ô}]«*±¿õ.übvùà9l.ü–l? ¯:Ý\&ÝöÅàfˆ¤[ßMDDDdF†ˆèE0ÅiÕSxâ ùÒKdú[ðni!þ®²ŽºCøÃYôk¯3é¶'îÝ&¦—‹$‰ˆˆˆÌÈ=Ù‹ÆÉ¥&²ñ¦w Ñe—ïAÙßü»Ðcó‹–â¿þõÿƒ¢¢Ÿðìå$…˜íÂ$s†Øã/ÆE-œ!EDDDFgˆˆ^ìåæÔÁüB.ÝI·roýÏÿyüWloþ~҆Êçàìñ¢­v;vü¡eÖcUQÏ”JY%n3é¶>qêM›6…þvvv†þÇã¹gÛ õ3?JŠ%D"®~fDDDDF•óˆ>6¸äñܳÅN-?Hˆ�“ÓM³Cw">{ùü ÍM'÷ÁíØ§7€±VžãÙË)"‘í¹üûÿïC?¼1¡œqìØ1¬Y³&4F~VœDDDDF7'IwdÀô³Ÿý ÿ÷J,™xÏXºt)vîÜÚ“£~Vⳣ̉ÏR—ðuºTÕŠ©+r‹¤ûìq…£|ªZ‡Bÿ•A÷{%ÓS§Õïx¼Eìå?VÚØ&ˆ%b·‘ ‘Ñå<b{o´'uÁ¥¸÷^ˆuë»'G]˜tg‡ø,ÕiÜZÓ»µÊï9T?½;ŸEëÕ‹Á¤»$ø<…âŸÿzúì呼-è)GÞ/òǵx‹ÝÁǵ'û\âçMDDDd$9èEà¨<E."²Ó¥rÄÞœx‰väbÇ=]2ˆÏR+Á•¿ï}€£_´¢¿ýS¼sàc|qEû¾‘·=åÈÛâ½’õ‰c¸#¿ë±‹ïã¢øVëóPþIDDDfóˆ>ÙTJ‘pÛu/w²½:Lº³C|–º(>ôt¸áv»ÑÑヂIøû¿A»û&¼þÉðäÐý^É”Äw;ò»¹Øù,æÉo&ÝDDDdsÑ'Ú«kç3ö&K¼yR¥ìŸ¥oO³]îÇþŸýW”þê×èúã]xò‡ÿ JžBÙÚ:4\h›õXUôó¤VV‰Ûê{%kßíÈﺺð²a‰oþIDDDf0'}¼©”vN¸U‰o&ÝÙ!>K!Yò;]ž¸Ž­¥¯âèå`Yé…kËãÈûÏÿ ­ÃŒ\pàŸß9;뱪¨ç J¥¬·Õ÷JÖù]‹H4EÂIS‰·ÖÉÔ˜t‘ÌID/N<qÎŒx‰7ð쟥.í¨YÓ€ÛʆÛöá‰ü…Xë솂 4¿Ž­®þð³O÷{%ӊܛ˄[›ØN¨Ÿ‘XøC$™ÁœDô±S)™pϦ•xSvèÿ,}¸Q÷ ŠK—£¤ ùOìCÛ€íNÖ¯Dg$|¿ìc»Û‡šPŠï½øþ“¶ÈÄ›I7™ÁœEôjÐÄ=:ñE&Þâs¢ìPûžÖ¢5Ý;Tô¢½é}løÕ.8Ó*NeŽ/ΞÁ™3Ÿb(|2µÈÇFÞ´^+Õ…ìA^Ä;5jâÍm™ÁœEôâø<&ÜÉ©‰7ÏÒ›="X—ë)§['$*GÞfÒ=÷Ô?¬¸d›ÖkXe!"""JWT$¡hXe‘Aëu¬²X™™ÖÏêmaVmëÅÏŠˆˆˆh¶¨H‚“>ü¼ÌÉLëgõ¶0~ÏSÇÏŠˆˆˆh¶¨HB‘S[…TÊ*½uÉʪLëdLêój½‡Ø²Jo]²²Jo]¢²ÕÌÈvS%ûL´Ê*½uÉÊ*qÛêmaVmëÅÏŠˆˆˆh¶¨HBZI@²²Jo]²²*Ó:Y“ú¼Zï!¶¬Ò[—¬¬Ò[—¨lõ�3²ÝTÉ>­²Jo]²²Jܶz[˜UÛ@Æzñ³""""š-*’`À¤?/s2ÓúY½-Ì€ßóÔñ³""""š-*’`À¤?/s2ÓúY½-Ì€ßóÔñ³""""š-*’ˆ ,´¦½Æ+§['$*g«NVÀ$ž7Þ{"ËéÖ ‰ÊéÖ ñÊV0#Û-Þg JTN·NHT޼mõ¶0«¶ŒõâgEDDD4[T$Á€I~^æd¦õ³z[˜Áœ¶Ò›7û¡„‹Ù$c½¬Ú_ù=$""¢LDEsX(ý·p³?.e¬õb€iNfZ?«·…Èi/Î5{0.Å£Üsbý^7²?*ÊY/«öW~‰ˆˆ(Q‘„,"§¶ ©”UqëúZðNã—Iî{ÍŽŸc¯Û.§ð¼A©ÔÉ ˜ÔçÕz±e•Þºde•ÞºDe«˜‘í¦Jö™h•Uzë’•Uâ¶ÕÛ ä´Aœ•PÓx N§3ÎÒ�Gù"8˜t§LÒÌ�~‰ˆˆ(Q‘„,´’€deUÜ:oV­x »Žé€Ò¼-–éò®J”þ°&ÝáRò²ÛÕ4=3@ë¾*­ºDe«˜‘í¦Jö™h•Uzë’•Uâ¶ÕÛ ä´A¢¤û#|°ù§È¾n^þ2ì8ŸÓËçxf�¿‡DDD”‰¨HBZ`Lº++ö¡qVp\޽‡ÍK„^;I5Î÷qz¹˜ÐÜ1.Ä3Ž{ÎÓ3²ÉꦙÖÏêmarÚ ^9¯ë <Y¼ÂçPßþ@Ê^nAÆzÉë¯s;3€ßC"""ÊDT$!-°ˆ—DîÀU½yù(\SöÁñpEvÉZ/iŸW¢)Ôåð”.™žMV0Í´~Vo 3ÈY(q£þ9ÇÂ'߀Ë;®CÆzÉû¬ævf�¿‡DDD”‰¨H"2°Ðšö¯œNâë@ýšEÁ×ü~ò‹ýð¦Â¤ÈûGÞÒ­“0‰ç÷„Ȳ®º3ÿ'4_Mº£¦â{?+þ«Ðk‹™¿9w9õçM±lõ�3²Ýâ}ªDåtë„DåÈÛVo 3ÈE(þoѼ}Y0q\€’ ðø’M¤ÎœŒõ’÷YÍíÌ�~‰ˆˆ(Q‘Dd`ø ‰ÊúêÚÐrêmlSÊóŸÀÓ»?ÂÅ”›^¬€I<o¼÷ D–uÕûmèÄsªéúðÌ€ä=‚þÃŽÐÌ€Y('ªâ•­`F¶[¼Ï@•¨œn¨yÛêmarÛ@A ïö‡~€\„òÚ‹Ó?@Ê&c½rÚ_s83€ßC"""ÊDT$!?°C_ÛûXS(öJ¬EmË=iÇ+F’µ^¹ Äff,Ä“Õç¤æV0Í´~Vo 3×ðu:±%ôä2l;q ¾Y_ëÔN –ë•«þšë™üQ&¢" XDîeR)«×Çë°$_L‹Þ·Ž_˜ýØs¿>ö{V]LY•J¬€I}^­÷[Vé­3üݧ§f<òw¡™j`žì±*­ºDe«˜býÌ´ÐÜ’Ócðžß‡•âH‘8VÖjžÃáØÁmXÉëtG˜›™üQ&¢" X$Kȴʪ¸u»øÍ†eøaðùÅ”òÊ_ÿ~ö%Ãoà_Ÿû'^§;ª| ç~÷êôÌ€M¿mÆå”›¸.Q™&Ñ )ß¥í§š¢l­…Iw¤¹›À1‘ˆˆˆ2IÈ ,”þvœÒ(£—£8¸í¦º–Ô@LyˆNç+Ó3Nt Ï>#oJ—Ó&ÑŒ¹ý>pzù”¹À1‘ˆˆˆ2IÌy`a²$RÚ縋óŽgP|~uf@lpiÆ)ˆÌHö÷Añ{Ññ™õ5böÏ›¨kø­]ƒÒÏw!c½¤}Vs<3€c"e"*’ˆ ,’MAŽ,§['$*g«NVÀ$ž7Þ{"Ëzêܮ艚z;_”ß%Ý.¦ü¼©–`Í÷}Ó¥›°ýÉ…¡×ˆ^ÌyÂDÏ©§—‘ñDE‘E¼„LYN½n-gñžcG(©t8êPõöAÿâr¸>ÝçM\'+`Ïï=‘åt넸徖ХÅâÝ7ò¶j™&Ñ Yߥ÷46.ÌG~ñ:ì9ø1\­mp»ÛÐê:Æv¢¼¸Kv|Ž>Iy·ŒõÊÅØ138&Q&¢" ©…8F¹é5<Y ŽÉ‹Ù«S°Õ®;Ò‚&Yë%ëyçšU׋(r¾áv,CaŇèŒs¹+Å÷ŽT–aÛ…áÿd—Œõ’;vÌÝÌ�¹ëEDDDVIÈ ,èmÞ‚…yóQ¼f7w¡Õí†ÛÝ׉F|ðúÏ[†çïÏ>YXÈZ/ùØ$üÞ|欟žÐpúº†ÆÃõr0À$š!åû0qu‹ËPçI| ¥»åÛ/ ûgº³^2ÇŽ¹œÀ1‘ˆˆˆ2IˆÀ"Þ”c•VY·nô *ÿóÆŠª£Qטž¹ï.~üVýíz\ž ý'öyb˪TêdLêój½‡Ø²*å:å!þ°·?ùÁ#¡×‰ZÂ3b/–Òó%+«ëED’¾7E¸“Mï÷«pÂ.f“Œõ’7vÌíÌ�މDDD”‰¨HBÉ2­²*^Ý„§ûw¯àèåD÷½„S»Ë±ýÂ@¸œüy…TêdLêój½‡Ø²*µº©™?Êûwø›xazf@CÃo±ÿ­ÝÓ3~þ›³Ó3R{Þ)ÉÊ 0‰fHù>(_ãPY.Œ$Ù-;ìÂÖ­. ‡‹Ù$c½¤s<3€c"e"*’XÜ9’_Æ%à®A…³'\ÊYë%-½Çc¡¢Á3=3 Ú|ßEåâÓ3²‰&Ñ 9߇qÜs¾ŽÝ­ñ©Q|øª¾¿l6Ïa7ÒÆŽ9žÀ1‘ˆˆˆ2IÈ ,”Û‡P¶-ÙÞ‡I »vc««?\ÎYë%ëyÅÌ€ÅOì‡g<Q¨ý=º7MÏ È&˜D3¤}wàª}gºGb’êq užÇᪧQ˜WŠê ^)'™”±^Ò>«9žÀ1‘ˆˆˆ2IDɦ G–“Ö¹OÁùR Z‡'âÞW½úÕÛðÎgW¦ëãÝ7ö¶¨NVÀ$ž7Þ{"Ëzê®4Tâ¯+¦íØzµ,f¬p|¢Y{[HµÌ�“h†ÔïCà;¸?¿ŽÁÈ\Rñ¡§CœhÒƒÛ^/îù¹§{ŽgpL$""¢LDEò ïg¨­=‹nÌtèÀ�:ÏÿU+EÞ’7p¡o,\‘=²ÖKÖóZuf�‘eíûèÇ­[ýRöZ§CÆ÷\êØ1‡38&Q&¢"‰ìÁ$»¿ ·ú#èàÿúÚñyǃ¨€Iñõ C\>Ìs^o/†b“ò,0I Ä”îé™ñ¨3šâß'] 0‰fdíûàu¢¼\ΙÈÓ!ã{.}옣™‰ˆˆ(Q‘„,âM9Vi•U3u`|Y‰RÇ'SAZKVVeZ'+`RŸWë=Ä–U©ÕMÍ Ø¼ù×8ÕÒ6Uª¿òùÌÌ€âÿ5=3`æ±Sboë)3À$š‘µï“n} 43€c"e"*’E²„L«¬š©cÒ[Vi×MÍ hr]ЍSpùÜa¼×øÙô^›Ðc/~2=3àÌ™O§gh?ï­ºDe˜D3²ö}`Ò­>/މDDD”‰¨H"{ÅTÒ].áò_é0ñó"²¾¬}˜të䛈ˆˆ,"*’È^`Á¤[&ÝDF•µï“n}˜t‘EDE‘E²)È‘åÙuWpƱ*”DήËäyÓ«“0‰ç÷„Èr⺙Ïkªÿ¾Bd9Ý:!^™&ÑŒ¬}˜të䛈ˆˆ,"*’È^`Á=ÝúpO7‘QeíûÀ¤[&ÝDDDdQ‘Dö &Ýú0é&2ª¬}úNàùçO OÜž¾Ì•=>(˜„¿ÿ´»oÂ+ᲉZd|ϳúœLº‰ˆˆÈ"¢" XÄ›r¬Ò*«fê&‚ñåüÏ·šCÿ×ânlh@CÃGèñMÿᇫ© ÇÎÀ>5wjÏ;Eo¬€I}^­÷[Vi×M%ÝâlïÉîé­KTf€I4CÎ÷¡®ÍËP^sCßc¼«k ç¡ ä)”­­ƒ;Á5ú³EÆzeõ9™t‘EDE"°H–i•Uqë†]øÙ|¿Úÿ FÑÕ¸?Ìû!ŠþÛR¬­½‚á`â÷±A™ÖÉ ˜ÔçÕz±e•v“n"£’ò}˜¸Žºò÷á~J/\[GÞco u8€‘ ¼Ôü]øŽòÈX¯¬>gäÌ�qYžkhÚ¿5 ­ðÄç&f |•“™‰ˆˆ(Q‘„¬ÀbÂó>Êë®c<x[8‡- çã±ê–`²=€ ;ªÐ< w¯Ž¬õÊÞóNÍ xþĽpyn1À$š!åû0ÑŽš5 ¸­L`¸mžÈ_ˆµÎî`j9æ×±ÕÕ¾£<2ÖKÚØ¡ÜF㪂Ðóçå-À’ê‹xp£‹óòQü;Õ)S’pL$""¢LDE²‹‰öw±æÐ×P‚Iv›c9òç­‡ó^0Wî£ù¥]p ËÝS!k½äbcèkÿûµhh½‡@ð?bŠ~‡Ç;=_&˜D3ä||¸Q÷ ŠK—£¤ ùOìCÛ€íNÖ¯Dg$|?yd¬—´±CÌ XüîA(þÛ8ùò/QÿÕwè鸌Ok^ÀË’¤à˜HDDD™ˆŠ$"‹dS#ËIëZQ·ü'(]Q‚äýþnà ô^ƒÓ±ó_^ÁÑËi>oŠu²&ñ¼ñÞƒYÖSç>µÿý±G'¸ä—â¿=…¶–Ë‹°æ- YNT'Ä+3À$š!íûèE{ÓûpÔF«w â\C÷½ðÞþ3î›tÊ´¼±Ãnçnìm€øÝQ¹×„wµ`xèÚ‰g%Ÿ„’c"e"*’ˆ ,â%dªÈr*uêñx¿ª:€3Á$[ñá¾÷.Nœø4”Dª´«J·NVÀ$ž7Þ{"ËzêÚŽnÅß¿·/�÷I¬]þþðù)t´FÍ3;±ÿB[ÜÇF–Õ ñÊ 0‰fäöû ÎïðªÃÉ¥L2ÖKÚg¥<@[íj,,*Åêòr”¯.EQa ÊÄßü'àp‡ï(ÇD"""ÊDT$‘ûÀ¢ÎûÐ*ùL½²ÖKÚç¸ çÖwßË8î9w`WëP0ðìƒkË8½b¹< 0‰fÈù>øÐÙ¸ K òCÏ?k)|û[ïJ=œD¼N¶ÉxÎÐôò£¤l5ÊEÒ=½¬Çö#×á“ü …´õ""""[ˆŠ$D`oï§J«¬Š[翉ÝO?Žˆ`rÖ"N„óœù7ýÏ”JxÔçÕz±eU*uÊà%Ô®,Æ_/þ)JKK±º´…%+ð?ÿ5ùà›Š0µ«JV—¨,ëó"2#)߇€Ž‚…(­Ü ‡Ã±¼måOÿ_¼ýܤíñ–±^òÆŽ ¶Ô£öbŸô�Z8&Q&¢" X$Kȴʪxu·?øÁO°ê_*§ƒËÊÊÊà²å-GåÁò†]høüJèþB*Ï+¤R'+`RŸWë=Ä–U©ÔMxê°¸ L¸EÒ­îÕ)]±ÿûèùé S뱪du‰Ê 0‰fÈù> ¢Í± ûg0ML/߇Û.Ë#c½ä^œ=r)tyÉhpñÈyôIÎÄ9&Q&¢" i…ïë>˜º&m”8+jà–;[ZÚzIû¼zñÿæmÃ…Á˜i÷×pä¬×”Çz™•´ïC 7oÅîÉVèïÆŸÜCnë%oìn+ÊÕK†Å,ùëÐØý}ø~rˆ×!"""JWT$!/°’}_ãÖƒØìz ýßÞ3íñxÒ>/¯å"˜ÔXòW5¢›{uˆrFÎ÷an÷Ü 2ÖKÞØ!~ ]‰Êª=Ó³¥ލ,]„âò×p¸}(|?98&Q&¢"‰ÈÀ"ÙäÈrÒºs¿Á‘‹S{t¢î;| ÿû×gfÊA‘õQ÷ J·NVÀ$ž7Þ{"˺êÎìÅŠÅ+Q9ÿ_V¢´p1Ê·5âðEž½œ(Wä|ævÏ­ ^+Ûd<甇¸éñbÖ…ÔF¯À±ô4v†ÿ!‡¼õ"""";ˆŠ$"‹x ™*²œ´îŒ#îžÛGþûnœr§ù¼)։בA<o¼÷ D–uÕ]üGO_ —Ôz7FÝobéÚF¿œæó¦X–õy™‘œïÃÜî¹d¬WnÇŽI _x óÃfWoørpL$""¢LDEÒ o*J_œÞsZª^œÞsÛÿ"«d­Wn±¸°m1ò _+öXï,c€I4CÎ÷an÷Ü 2ÖKÞØg:~àÿÚu ‹‡Ü‘EEÒ ß7ðÜ TÊôžÛ®Y'XË.Yë%íóê;?=†‚À7ïcÝÛ_Åü?û`ÍÈÝ÷!w{në%ï³â‰ÔˆˆˆÈ¼¢" XÄ›r¬Ò*«ôÕ}†žûÛé=·ú«¯NVÀ¤>¯Ö{ˆ-«RªKp"51_=‘šæcÃ’Õ%*‹×!¢)r¾#¸Û30û´À·8sä eÿ²$c½ä<‘™WT$!‹d ™VY·ÎŸ¸.Ϫ»üÉ{8r©?xÆ}lP¦u²&õyµÞClY•R]x:þ¿„®e¾¶yÕ‹XüÿEés»§§ãk>6,Y]¢2L¢r¾=hÚ^…ƒÇœp:#—ƒ¨ZÿÜ£bT  ßýê>lC¿„$\ÆzÉ;x"5"""2¯¨HBZ`á=íÛêq,*¸ .¿ß…õ{¯ .)½pø|èîÍúôiYë%íó²èt|"3’ó}H0]:¯›]ýÁû|‡æÊG‘7ï%4dÿ<âµ²MÆsÆÇ©‘9DEÒ‹Ó¥óæo…kxhFå¼<Ì«lÆ@øaÙ"^GYÏ«'R#š r¾=øxÿ |íõÂ;kéÅ_ìÓUúžÛƒL=(«d¬—¼±#øYô]CÓþ}¨ih…7 ÿåCû<Î]ú>¹¿CrL$""¢ŒDE‘E²)È‘å¤ugÞÁ~§'Pž9s&´¨晳_ 5tßq Ýþ Ç¿˜™†ù<BdYO¬€I<o¼÷ D–Ó­Ôr ÿktôø¢ê#o ©Ö ñÊ 0‰fÈù>ÜÅ'G.cdV²ø�œGŸä$R±^ÒÆå6W©3`IõE<¸Q‡Åyù(\Ó€N?gÿ‘qEEÒ‹ÞÏq䢯Iƒ†/áÈYoÖ§“Ç’µ^ò±1ôµŒýŽZ4´Þ íåR|=èðx!9¶ a€I4CÎ÷!ÑÙ¸WãPWìá%Ù'^+Ûd<gÈÄuÔ-~ ÷ ÿmœ|ù—¨ÿê;ôt\Ƨ5/àåÐt|y¤­ÙBT$!-°H0½<ÿ©Cèšuvœì¯#ƒ¬çUº±*?üå—¢º¥7ê–Ë‹°æþðýd‘µ^Df$çûЃ¦Í•x}úLÜSËžÍÏàÉŠ]h”|6nAÆzÉ;üèvîÆÞÖ©o•{MxqW F1‡®xÖÙ3u7I8&Q&¢" XÄ›r¬Ò*«âÖy?ÆÏVü|æLÜÁ¥²òüléCEÕG¡³qÇ}lP¦u²&õyµÞClY•JÝ„§‹—ìCÃÅËh9Uƒ—×ÀWÝhüÝÛøÕ²õSÇÀ‡ï¯R«JV—¨Ì�“h†œïCœ³q+ÝhÚZ‹Éçmd¬—´±Cy€¶ÚÕXXTŠÕåå(_]Š¢Â”‰¿ùOÀáßQމDDD”‰¨HBÉ2­²*nï=}iV»ùMlÝ}1tMÚ¸ Ê´NVÀ¤>¯Ö{ˆ-«Rª ܆së»8p¡-X¾Œ{ÎØÕ:¼}û׬Ó;uZ%Ídž%«KTf€I4CÎ÷Á‹O›Ü³ŽéVüߢ©r *NÜ ÿGë%mìM/ÿ1JÊV£\$ÝÓËzl?r'R#"""C‹Š$¤}Ñti0æØíIøïþ• ^ĉ>sž[Öó*ƒ—P»²E¥O‡ËÕ¥Å(,Yü[„üGpÉ0`Íó}HtL÷S¨i—»çV¯•m2žsÊ[êQ{±oö9@ÃለˆÈ¸¢" iE¢cºŸ¨Eû¨9“HYÏš^^P‚²¨=:Á¥b'~w‘—Ç!Ê%9߇4m¨À«{¢évÔÀÉö^)—‹%c½²úœã·Ð¸öq,q\‚/ü¯YpýÐNÔºãÞ#+8&Q&¢"‰ÈÀ"ÙäÈrÒº3obCùVì Ë]9}lwMý)>7{ÚyÔc³P'+`Ïï=‘ådu—ïÆÚ…Ëáh –]øíæm¸>®S½o`°‡6ìGÕԟ7^¯Ì�“h†œïCœcºsHÆzeõ9šQ9/ ·Ç¬ýþtºê±¹tað5Kà`ÒMDDDIDñ2Ud9iÝÅá¹3u œD÷"ËÙª“0‰ç÷„Èrâº6|þÎ?c^Þbl»ð æ¾ ®|ñìß¾¥ùÈ+p0é&Ê¡l~”þ6|X׈Vop<TÆàQ÷iàëÿý¾\ìãž"ã{žÕçT†Ð^û4žp´`0žÞ•l磠ôETmÛŒ:&ÝDDDd`Q‘Dv‹�úÝ¡®¡Þ`À¤øG028ùÐï}�ŸZ–LVÀ”ÍçU|nÔ>YGk_xj©‚ÀP'\õ[¦’í¼…(­ÜmïÁ-9.g€I4#kߥ®-‹QX¶¯<¿Û6=‰üÂçP­çªW  ø:yù?Å–ã_K¿,  ã{žõçT¢óÄ>lx~;꽑loA½«Cb⿞rEމDDD”‰¨HBñö~ª´ÊªÈ:eàÖüè?¡lÓf<¿a+Êÿ�?ü‡×pí«3¨~RNyx¤øYï Ý?ÕçôÖÉ ˜ÔçÕz±eUº‹N¼µáŸñü¶wq¨n3ÿà‘àkü¥›ëáêÀ•«n´œ>áß*R~^ºDe˜D3²ö}vaóü2ÔwSjå[4®ülþ§ª~LÄ_Ư…óØìY» ]S3ƒd’ñ=—6vÑÕr Žç—¢pÉNœîz˜“ãÞU‰ˆˆ(Q‘„,’%dZeÕLÝd0¾ÜŠ÷_¶£s2_ö4biÞßàg{Þ@ÕcE(ÛR‹â¤A;_ÀÚg?DWð>©=ï½u²&õyµÞClY•J]`è´Û‹ÿYüŸPüóZt…§œ¦òXU²ºDe˜D3²ö}'”,pLÍT™hGÍ¢|8\hÝW‹ ×Szœ¨vö„KòÈøžË;Æ1ÔÕgí+¨ nGšÚºáüfúð%Y8&Q&¢"‰ì`|Y (Ý¡½í5X$NvÓ꾪 ˜Ú·-Œ£§±vúºÓ²È ˜¤b¡½;NÔnÙˆ-µMhëÂàÍ›¸#ùìK 0‰fdíû ötÿ8œtÜpÌÇÒú?áfý«pœó ÇëEOg Žm_‡—]ýS‘HÆ÷<wc‡‚€¯mMµØPºœ'R#"""C‹Š$²XLíéþq8é¸(È+CýÍ?¡þ…}8×Ù ¯·-G°ý_ƒkXn)+`Ê] €¯û šj7¢´(´KÄ�“hFÖ¾â˜î—7£±ûûpÒ]€rg”Á‹¨^² ô:¡eÁލ=ß²ÈøžÏÅØ¡ ~…îé&"""‹Š$"‹dS#ËšuŸïÇËÏÁ)÷U\i¨ &ÝpzÇðùo+QüÈÌuºÿê¹ðeìcÃeÍçM£NVÀ$ž7Þ{"ËéÖ 3å ^¿Óm©=6Q¯,ëó"2£ì}¼ç°wׇøâx–ä?úÎÑ©ÿ}ƒÖæ?¢éLÞZý–ôÖßs«Ž‰ˆˆ(Q‘Dd`/!SE–µëZá=÷.^¨zûþe1ò—×£s\ þÿr0à<ˆæ¦?ẩ7ñ?*peÖc=¯þ:Y“xÞxïAˆ,§['$*§['Ä+3À$š‘ÝïÃÔU .œøgÚ{5N6‚Û—n ?vñ=·êØÁ1‘ˆˆˆ2Id?°ÇPçEœhúí}ÓÿüßâRG_0 •KVÀÄ�“Èúø=O?+"""¢Ù¢" Lúðó"²>~ÏSÇÏŠˆˆˆh¶¨HBñ¦«´Ê*½uÉʪLëdLêój½‡Ø²Jo]²²Jo]¢2L¢Vý>ÈX/~VDDDD³EE"°H–i•Uzë’•U™ÖÉ ˜ÔçÕz±e•Þºde•ÞºDe˜D3¬ú}±^ü¬SL„o‘}DE ˜ôá畈‚@€á%™¿ç©ãg•@ rrfz"""2–¨H‚“>ü¼â &ÜçáxïªÆÙ™‰Ì…ßóÔñ³Š5 ÿMœ?üÖÏG^ƒI7‘ EE‘E²)È‘åtë„DålÕÉ ÅóÆ{Bd9Ý:!Q9Ý:!^9íÏKñ£ßóïY‡âü<8ÜLºÉôdsMÆzñ³ SFáí8‹ƒ¯¯ …yyóQ\¾¯V¼Ç¤›ˆˆÈ†¢" Lúðóš¢ø½è8s¯—?ŽüàcóòGù«[PQÇ=Ýd~üž§ŽŸ0Ùs;ÊŠ§ÇÂ5{ã¼§~Eÿî]<ÈÁ5؉ˆˆÈX¢" LúðóCOs5ʊ懓_¼{O¿ Fp·g@ú5؉d}ÛªK¶i½†U–”zÑ~ò=¼ZöS¬¬vÂÝ=̉ˆˆl.*’Ð 4¬²È õ:VYR£ Ð׎“û_AYÉjT7µ¡ÛÇð’ˆrçÚµkxûí·Q\\ŒgŸ}gΜÁÀÀ@¸v©‡Û8~‰µ8|¾íÇ>AÏ/IDDd;r²Q’F 0Eb,Ì/¿üùË_µsGñ÷Âsþ0*°Á!¦S^Á±^‡ˆr&v| øÜ ¾n¸Oþ•¥ûxL7‘ 1é6)HŠ„»ºº:`Š¿ÆHÀðu»q²nJy"5"šs;>Ž¡¯ýcìwÔ¢¡õ^h T|=èðÜÃàÓMDDdGLº-@’bŽØ³#¦XŠ==bONˆã›Þ‡£æ0Z½cÁLÀ×ãÇÛ‡;<¦›ˆæ˜š€‹ñQMÀeŽJw#V…ÎX\òKQÝÒu˃åEXsÈø~DDDdLº-FË(ðåË—O'àwîÜ ×fÛ÷èn\7u–Þà’¿dZ´£nñ<äVàP§/|?"¢¹§Ž2 œðÔañ’}pûðwŸÄËëà«nt´FÍ3;áž ß“ˆˆˆì‚I·…‰dûàÁƒ¡\,âvvðQxêV`‰ã2|ʺO¾†uõ×1ÐsmŸÖà™—]ß“ˆÈHD®Ž"ÏÚø¸ çÖwÑ:,Îh1Ž{ÎØÕ:(}pmÙ§—ÝÙ “n›èìì íÕÉî~º›°uo †Å<r¥Î÷¡uTòÐ…-Ï:áº#‘aeóJeðjW£¨ôi”——cui1 KVÿ!ÿQÜc<膈ˆÈn˜tÛPö΀>Á¶w±ra1JW—̧QZô(JÊVÿ.À£Ž6ˆ£¼‰ˆÌBÓý24½¼ eÁ„[$ÝÓKÅë8âyÈó\Ù“nËü ¿bzùS((Y\–¯AÅö£ðøxÁ0"2¯Ø(Ežt|TúÑRû.rü#""¢)Lº)D’éœ`HlAmíE r÷ YT¼(5ùï£çA²ã¶øïü÷8‰ˆˆì€I7Í¢utmÁÀñn*×ÁÛ½¼f7™žš€‹(5yO`û¶zs:ጻÃï«6a¯ûaøADDDdeLº)!õCÚð6íÆ¶ƒG5‚ÊÈå ªÖ¿÷(÷ê‘Åy(Ï _§;É23¯ð@DDdLº)Á¤ÛY¡LÎ^аÙÕ~‘Ey›±ßé×ëMºÜòóÄjDDD6À¤›2Lº?>�ç×w5Êè¥CþÉð㈈,J™@`B+•C÷ñÓèàùÕˆˆˆl‡I7eD  Cnãø v‘U)á9²eEógÏø)pÀÍ“[Ù“nʈ⻎#ÛV¡(?&¸ .7OžFD¶ºNwþã(u7GôòŽ =œðCDDd;Lº)â:ÝË‘_\ŽW÷Ä—ÁåW7_‘LvÂS«Ñõ‰ˆˆ(ŒI7e` ]‡žÅªÆoy2 ""Ayˆjqä›Ñð?T~t;™Ò1Ý×®] ß""""+`ÒMQ|8°Û‰oÆcÒîÀ-kº‘ô˜nq=pq]p""+˜ì¬ÇÒ˜Cm¦—é×�/..ÆÛo¿ÍœˆˆÈ˜tSüè¬/Ó.ƒK*ÇtWWW‡î»iÓ&|ùå—øË_þ®!"2¡qêŸ^͇Üè9¦[üyðàA,_¾<´ˆÛwîÜ ×‘™0é¦ (ïü-ž^¹ {bƒËà’ê1Ý"Ñ ·š€‹¿¢LDd>ôuxp?‹Ç܈d;6Ow†÷œå“nÊŒÒ‹ŽŽï²vL·$Å”ólL¯*÷œQîc¨ó<ëÞ„Ãñ&êšáöŽfeœã¡Åø(ÆI=‡èˆÇŠ6ù£&Qn1é¦ÌÐyþ#Ô…öpס¡ùOðú3?o¹$NghÏŽ0õN¯©J™xQëØF‡.£8EË–¢¨pŠŠ+PãaVO:©&à"‘c]²CtÔû2ñ&""Ê-&Ý”™ñ¯qlýbä‹@.¿Ë–£°¨Åkà†/…Óô¦(é•"QWƒQ&ÞD” Jï <?/ùKv¢¹{JÀ GÅ1ô ^Bí‹Ñ™½aqZ¼CtbÇ=uLdâMDD”[Lº)ôž¨Ä¼¼X²ý4ºý“¸kPáüƒmux±þfÒ³—§#•é•ê4JuaâMD¹p;P·šïOíÕ%ÝNxñ­U¯ÀéMáôåPp1扱OŒ•b<ŒÕ…‰7‘|Lº)>¸%È›¿ ÍSéõTÒÝŒµ¢ê9hÊ%I­3 GN£T&ÞD$ÛÔžîŨj}8õ‘t—í†óø^”/ÞÖÑlN0O,òÿá?ü‡Yc¢º0ñ&""’‹I7e ¼§ûGÕh› $î}(ÛsÇk±¸ª£¡ÿʧîÝQðüà³K±ˆà“ˆHž1x]{ðô†´÷ù§¦—ÇŸüeØ~îNÒË(Ê ÆG­ñ0ráåȈˆˆäaÒM™ Ü«º]E_hz¹˜Z)Žg|ç¼cá;åÖ'Ÿ|¢Tª‹Ø ND$Ï$üÞ|ö™C“}h?u­]ƒs’p âI­±0r‡ë0ñ&""’ƒI7eN…·ã<>ó `²¿§š/¡kh<\™{êÞîD o"’Añõ Ãí†Û}=âd’Šý·:àöxáÏÝÌò(©Œ‰baâMDD$“nÊÀ|=׃Áe0Àìè/P*þ>Üj¿O–®I«W*Ó(Õ…‰7eݰ ›]‹šs Œ¢«q= ó Q²b%ÖÖ^Ápš£Öfö…ˆˆÈ.¸Õ£ LãËWðhy-Îu 0~ k!¯ +ÊÖ£Ö=vâ­ ™y!"{˜ð¼òºës}”sزp>«n &Û¸°£jú¤“zYmá¸HDDv­e`žºÍ¨óŒoO`Àõ*æ-Euk0Ù¹€/5#ñ•´ã³R@Æà’È>&ÚßÅšC_C &ÙmŽåÈŸ·Î{Á\¹æ—vÁ5<¾§>Lº‰ˆˆÌ‹[=ÊÀÚk^Æ¡ÛcP†/ÁñÄÌ[ëÄ=1Í| /mua8|O½˜t‘)ù;P·ü'(]Q‚‚¼xÂq ½×àt¬CñÒýðŒ§7ÿ‡I7‘yq«GPà¿ñ–/Ê’Bäå/‡£Í‹Þö&8Ö”`ixŠe:D@võêÕÐ"DÞô”Ó­•S­cpId' }×дjZá (PüC¸ïõÂ{(í“©1é&""2/nõ(Ccèkÿûµhh½‡€¸TÎP/¼Á�óþ?£cºã%±‚žrºuB¢rªu .‰(SLº‰ˆˆÌ‹[=2$+d .‰(SLº‰ˆˆÌ‹[=2$&ÝDD3˜t™·zdH‘Y¼)ÜB*e•ÞºdeU²:—D”)&ÝDDDæÅ­“n"¢Lº‰ˆˆÌ‹[=2$+d .‰(SLº‰ˆˆÌ‹[=2$&ÝDD3˜t™·zdH" ‹œ¶y[ÐSN·NHTNµŽÁ%eŠI7‘yq«G†d¥€ŒÁ%eŠI7‘yq«G†Ä¤›ˆh“n"""óâV )2 ‹7…[H¥¬Ò[—¬¬JVÇà’ˆ2Ť›ˆˆÈ¼¸Õ#CbÒMD4ƒI7‘yq«G†d¥€ŒÁ%eŠI7‘yq«G†Ä¤›ˆh“n"""óâV Id‘Ó¶#o zÊéÖ ‰Ê©Ö1¸$¢L1é&""2/nõȬ1¸$¢L1é&""2/nõȘtÍ`ÒMDDd^Üê‘!Edñ¦p ©”Uzë’•UÉê\Q¦r>Ž(ø}ñšÎü ^ÿdøŸÙÃq‘ˆˆì„[=2¤œ'Ý£þ­7qÆ}~Eû¾q›¤ŽÁ%e*×ãÈ„§‹óòQP² O®?‚®ñàÀ˜E‰ˆÈN¸Õ#CÊm@6 OÝòàk¢¤ô±¾ñÆÃ5ÙÀà’ˆ2%eñƒæ÷~‹æ®‘ð?"(>ôx¾ÅP €æ=ØÝ:®ÈŽ‹DDd'Üê‘!e? Sàï:‹÷Þ;‹.±+;†â»ÏíA”ûh~¥­£ÙÛ«Ãà’ˆ2%c™Ú›=‹ë.¢ãؼºqö:¯¡/9þ)¹° Ï:{Âåìà¸HDDv­’È"§mGÞô”§nÿ[xoörlýÝïà¨X‡Ûjà8ü).G=îs|ðÜZ8½p9Ùó&¯cpID™’2Ž(£ðÞìœ9f[F׉×ðä“[Pæn{½èñ4ÃQö$ª¸§›ˆˆ(mÜê‘!e?é¾ ÅïÅÍ›^´¨eß-¼õÜRüägÛp¦½ ^o7Žþz#þþ?½0½§;òy„Èrªu .‰(S¹GÆà=¿+ óC¯™——µ<¦›ˆˆ(Üê‘!å, ÜÅyÇ3( —bY„µ<¦›ˆ &·ãÈ$üÞ|v¢ '>ó ?jºyvp\$"";áV )2 ‹·7YH¥¬Š[§ŒâLãûxËQƒÏ<}˵î«ùØ du .‰(SVG8.‘p«G†”Ó¤;H«.YY•¬ŽÁ%eŠI7‘yq«G†d¥€ŒÁ%eŠI7‘yq«G†Ä¤›ˆh“n"""óâV Id‘Ó¶#o zÊéÖ ‰Ê©Ö1¸$¢L1é&""2/nõȘtÍ`ÒMDDd^Üê‘!Y) cpID™bÒMDDd^Üê‘!1é&"šÁ¤›ˆˆÈ¼¸Õ#CŠ ÈâMáR)«ôÖ%+«’Õ1¸$¢L1é&""2/nõȘtÍ`ÒMDDd^Üê‘!Y) cpID™bÒMDDd^Üê‘!1é&"šÁ¤›ˆˆÈ¼¸Õ#CYä´íÈÛ‚žrºuB¢rªu .‰(SLº‰ˆˆÌ‹[=2$+d .‰(SLº‰ˆˆÌ‹[=2$&ÝDD3˜t™·zdH‘Y¼)ÜB*e•ÞºdeU²:—D”)&ÝDDDæÅ­“n"¢Lº‰ˆˆÌ‹[=2$+d .‰(SLº‰ˆˆÌ‹[=2$&ÝDD3˜t™·zdH" ‹œ¶y[ÐSN·NHTNµŽÁ%eŠI7‘yq«G†Ä¤›ˆh“n"""óâV ÉJƒK"Ê“n"""óâV )2 ‹·7YH¥¬Ò[—¬¬JVÇà’ˆ2%Æ«-DDDvÁ­’V€fæ…ˆˆˆˆˆì‰Ù�‘$Lº‰ˆˆˆˆˆˆ$aÒMDDDDDD$ “n"""""""I˜tI¤›ˆˆˆˆˆˆH&ÝDDDDDDD’0é&""""""’„I7‘$Lº‰ˆˆˆˆˆˆ$aÒMDDDDDD$ “n"""""""I˜tI¤›ˆˆˆˆˆˆH&ÝDDDDDDDR�ÿ©ª‰^¥µQ=����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7y.png��������������������������������������������0000664�0000000�0000000�00000314203�15030617045�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��§��ª���`‚#®���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýTU¶ç ó¯¯7â†m 3vÇÄíÛÃ[sGÇèGž;úè­œñú0­>Õà+Ž:€6¿¼‚=z»Ó±-Ô.ì¶FAl¡%/-ˆV)¥6UE[\áµK¥ìâGڀŷÀÂÊ"¿o®ÌÜÅÉSçœÌ“¹Ož³O~?Ä rŸ•'³öε×Þkÿ:“@!„B!„„ ƒSB!„B!¡Ãà”B!„BHè08%„B!„: N !„B!„„ƒSB!„B!¡Ãà”B!„BHè08%„B!„: N !„B!„„ƒSB!„B!¡Ãà´Àg§—>^ííîØ |§½Xäºì÷û•rqº×øÁé~?R.N÷ú‘rqº×¯”‹Ó½~¤\œîõ+åât¯)§{ýJ¹8ÝëGÊÅé^¿R.N÷ú‘rqº×øÁé~?R.N÷ú?8ÝïGÊÅé^?â§ûýH¹8ÝëGüàt¿)§{ýˆœî÷#åât¯ñƒÓý~¤\œîõ#~pºß”‹Ó½~¤\œîõ+åât¯)§{ýJ¹8ÝëG¢JݧG‡óÁè]—~¤û€57€ý'ó«ÈÐHá&B!„B!PwÁ©¥* ýo;€W?Í „B!„B.±ýp~eé±l U ê.8•YP)` R !„B!„8#«I²7?±'+LƒŽ¡¸ç”B!„Bˆ+²ÒT‚Sµ2¨ •Á)!„B!„’Èò^9$V‚TYúuº ÐƒSB!„B!e#Ë}åé&r–ÎYT§„B!„B|!³¦j©¯œ¤ƒØ§R8º§• !„B!„¸Ó•ºt`RµÄ"8• T¦”eÝ3!„B!„Ú!K{oè¬>@Ep*©gNIœ™4i…B¡P( …IùÝ<WoÁ·–ýÓø5¿œJt.Q:Sw*©à„B!„ÔŠ¡‘KqYݧ²ŒWÓ KH`pJ!„BL¡®‚S9¾X6Þj L3À€¹ùÏþNöÿg²é/³×A€7~_йÈ-½Ù÷dß{.ÿ‰å#ßýEöû¬Ÿ/ßøàtVÿMöÿù·–×ٿÛúw½‘ýƒœ®éæbö÷x6›+øçü÷ÍýcåBÆapJ!„BL¡n‚S™.–S]G+rAÔûÙ M‚AÁ¬þMV7¾r8(.S¬%Èûòxözö~¹öï³AfO™‘عì÷©û$¸Í£D·6{MtÏd?ßî³þN×´1šý[³ùž›-³q²eøÁ¾ü÷18­§„B!Äê&8•Ãí)$4q1Þ–  Š‚Ðç²AáLëõ‹Ù@ñç OÞ{Káú¿ß Ëg^ÈLãý…@÷–l'³´(x~ƒS5ciý®i!˜¾Q|‹‚S¢ §„B!Äê"8}#øq�R:øýmÙ@ñÙ?çâÏ"Ô²ÞÁ©’k?¸¤[–½Ï•ì{ßȰê½k-3¦°-뽘ýÎ7²æ¿/ÜkŸqü§öÏ[Ö?1P–™aë²ã¹çß#÷þ´0ók•¹Ÿ—Ów²÷~Yø,ÁþyËþ|– rsØÊøoö{³“ ü—eíÀòç× N !„Bˆ)Ä>8UËyåA¯ÚÉEÏX,Y–»Ùmï¨Wpšå³l5þ9Ù ñláº5[›{o6 ýÌ º¢þÖl ý†ì¹µ§ ”œªû³ò‡ìk5û{Kö½ê-êšš V˃oËæ5Ègß8·ð¹E3§Ö%ЖàÔþyö´PT>Ù¿íƒìwË~¶  =ƒùÂà”B!„˜BìƒÓŸõé_ÎkåÜ©l`¥)KP´Ö¤–N‹²ÍZ±¾Ï+ˆµ3üZ>[]³~N¹Á©ºw|I³Ê_¶,>È—ÖÙ`5¬‚Äû³ÿ{§Ö²R¯åóÆßëðÖÏTÛø wVü.s6§„B!ÄbœÊ¬©$Ÿ<[f_ÞªÄ:‹Dpêõ¾",Aœ5ÿ¬ìßõ‡\´Xfpjù<'‘ÙIë ¦k@˜ý¬rƒSëçY—=«“ǃdËg:§õ¶·•Á)!„B1{ßUâ¹RÓÛ]s0ØYÓô à÷2K¨>8” €,3©ãËHK§å.ë=› ÌÆƒàl€XÖ²^Ëw[o²º®¨Ó5—ϳRÖl¥%,œº}ÞøczT nùL§ N !„Bˆ9Øû®wì,ý´cz»¹ %+A!AÏJË,žÂzØÏx U"8µ>®Åó@$ë~Lµ„¶–™Nk09[>Çopê [g:Ç÷˜Ú±’~fNÇËÔiFØò™ NœB!„s°÷]7~Ü’«¼`o·@.è)ºcG›åÌœZ SΣd¬ü-¶Ñÿ)ÐWˆ öœª ³’=§Ö`Úñ!kí6Ûý¬rƒSk :þ^ËûÊÝsÊà”B!„hbï»ÊÓV¤¿ÿdá‚ìíz²êúìëBˆ/ÿœ ‚²YQàh Ö²¢‚¼sÙÀnYa–UNûí¿Á›Ï²A–zDÊÜì÷Œ?N%‹<nem6xüi6`SS¹§õZƒN§@T]+ ¨³wáû?Ë~§ú[¬A´z„Œ|¯<Ú'÷1–2‘ÙÕ³Ù²øƒ(¬ee ¦Ë9­×œª ÛºšÁ)!„B!ÑÄ©ïšèËo×tƒ½Ý²çô­l6á@¤lÐg=­w|_¤‹Hpù†åýå"ßû¦m«ˆ<û3äÙ÷¯·šö眶$òNöïú|â5ux’ÖEÏ0µÉÂgG,Ÿ­\„/³é\}OîY±ÖYÓ‚X—"Kà­‚y¯çœŠÈߤ‚U%®{`cƒSB!„b N}׎AàÖlÿß öv 1§„B!Äœú®ji¯ÛXØÛ%ÄœB!„Spë»>Еßè{»„ƒSB© ™áãørx¬"„R n}×WûÝÊÞ.!†Àà”Bªe §º»ñ©gÜ9†¡öŸãé^Ë ƒ„B|ãÖw•Ózå™§N°·Kˆ!08%„jI#µy½ø[$“IgÙôM» §„Rn}×£Y÷*ûNeÿ©öv 1§„R-^Áéz$š¿Ÿõµ ˜<='zM„BÊÆ«ïêv({»„ƒSB©—e½é¯Ð·öA46\‰i‹“èç~SB©¯¾«Šd\pÚ•r?ɉzƒÁ)!„è'3ü)¶.» “¾YköàD:SÐB©¯¾«ˆ$±žH÷v%0epJH§„¢“ Ò©]X-Ky'߆UGÀ…¼„¢RÁ©SœéÞn¢Á)! §„¢‹1 Ü€ù×_‰†i Ù&ªZHŸÅés\ÚK!ÕàÕw•ÇÉ7sêQR08%„\@ªóg˜>ùrL™õ+ôœ¸P¸®È Ý¿ëyZ/!„TE%}W§„ƒSB©–Q¤¶.À”¬?Ÿê.×óQ2„R%âOýÂà”C¨¤‚Bñ gN !D N ‰1 N !D#éS8ÔõÖ·>Dâi´®oGïàÙü¡HÜsJ!UÃà”Ãà”Bt §ô¾ÄÌïåüj‘4\‡¹­"ÅÇÉBHÕTÒwto÷;íy!„08%„-ŒìGëô«ÐÐ8 ¿˜DgWz{{ÐÕùÖµ,@Óä«1³í�F o'„R N ‰1 N !¤Z.âlçR\Ñø(ÚSöSz… ÒÇßǪ›ÆÖã|ê)!„TƒSBb ƒSB©–sèkù¯øá†âçš‘Æñ­`AûŸ iB!•Àà”Ãà”Bªe½‰æ’‰I÷¶`nòp!E!¤œcœBHµŒa¨}–tž,¤øƒbùΡBšBH%08%$Æ08%„ œß‡ÕK7aÐñDÞQœêkìï=‚γ ×!„TBì‚SyŒ %CH§„¢ƒü£d^xn;G-ê蟰ý©‡0{Þ2ü<ñÚ΄B*Á«ïêöÈÐH÷v»R N Q08%„}dÒiŒ^BÑOì‚SBÈ%œB!„S(œ~vº°ÀÞ.!†Àà”B!„˜‚WßõúíÀ¯ ìíb N !„Bˆ)¸õ]¿Nç½)\°ÀÞ.!†Àà”B!„˜‚[ßU–óº=‘…½]B Á)!„B1·¾ë¦ÏÇ÷6ØÛ%ÄœB!„Spë»&ú€Wû ìíb N !„Bˆ)¸õ]oèÌ?2Ô öv 1§„B!Äœú®G‡ÝCØÛ%ÄœB!„Spê»ÊrÞ;v°·Kˆ!08%„B!¦àÔw•ÀôBÂcz»eË40!õ ƒSB!„b ö¾«z„ŒÛ’^Á˜Þn©(›¸Ãà”B!„˜‚½ïúhOþ¤^/ŒéíʉNr²Ó×éÂBê §„B!Ĭ}W‰ád²ÑkÖT0ª·ËÙSRÏ08%„B!¦PIßÕ¨Þîþ“¥×)WœB!„Sˆ}p*ÈZeBê §„B!Äê"8•YS™=•YTBê §„B!Äê"8dß©ŽÄ彤ž N¡P( …B¡˜"~1v*F–ö>ÐUHBê–ŽŽGgh•… â믿.ÜAÂ@~Rî¹ç9r¤p…Ä·ö÷÷R„cbÛkloAŽ#nzøÕÁÂBH]144„?üÿøÿ8„:ɳÏ>[¸ƒ„‰ü$<$8•ß ±±17 C‰R¯œ7Ll{î-Î/ïåãe©dÖgíÚµ˜1cFÎáŠH§û?ü‡ÿ0ž¶ ;áÑA~*8U²jÕ*®& $H}fpJÜ0±í5¾· /óæ… „XaHåI[—'JZuºEdvè£>*hI0±ŒöàTÕvj 1i¥.ËJ"Bœû¨%²²õõÏ ‰ ‰EoáÝÃ<Á—8QN@jEQk‡Ûí}$<jÝ@’bœ‚S%R·!æ!ƒKR‡ q£–ö!©œôßv�dž + 6ýÙé|¡BÌÄo@jGî‘_¸T1š°.^Á©ˆÔξb NI)jeò•ÿχùà´ÚxŒM $e_h¥©ù¦Ñ…¨pñ N¥ÞÉáb„³`pJJQ û B9hy¯ž‰BZ4!¤æHƒ*§èŠÓ”e¸•¤ÄØ §àôïþîï”b0 NI)‚¶9”V¶V¾ªñøZ4!¤&ØgI¥³ÌŽqýÀT¸XƒS©ƒ·ÜrKî!Ä\œ’ReòÄ”G{ò3¦]©ÂEMТ !bŸ%•×ÜÛV°.ˆZ—ïªN­üO1§¤ºíCö–®9˜Ÿ-MôåÓº©;‹–uÑ"„àYRéË!+âåIsOhýÂT¸8¡°ÊóN !fÂà””B—}H줂R™1 2–ª;‹V{ÇÎüúh™–&„èAfD“Édn†TÍ’r/)ØŠêL\É@ˆ™08%¥¨Ö>ä€#‰™$v’ªqS]Z´LAË^UØò¿¸¬™æ¬*!þ‘έZº+Kyr.±ÃT4‘úÊçœb& NI)tØÇöÃzNá-—º·h T%(•uÓ²©W‚Uy€¬L[+Q×ËE½¿RñƒÓý~¤\œîõ#~pºß”‹Ó½~¤\œîõ+åât¯)§{ýJ¹8ÝëGÊÅé^¿R.N÷ú‘rqº×øÁé~?R.N÷ú?8ÝïGÊÅé^?â§ûýH¹8ÝëGüàt¿)§{ýˆœî÷#åât¯ñƒÓý~¤\œîõ#~pºß”‹Ó½~ÄN÷û‘rqº×”‹Ó½~¥\œîõ#åât¯_‰*nq@¦¬|ì?™ŸaUÇ$ûù!­?~%â§ûýH¹8ÝëGüàt¿)§{ýH¹8ÝëWÊÅé^?R2Zët¯_)§{ýH¹8ÝëWÊÅé^?R.N÷ú?8ÝïGÊÅé^?â§ûýH¹8ÝëGüàt¿)§{ýˆœî÷#åât¯ñƒÓý~¤\œîõ#~pºß”‹Ó½~ÄN÷û‘rqº×øÁé~?R.N÷ú‘rqº×¯”‹Ó½~¤\œîõ+Q…Á)!¤läP#ë£`œY!Ä .=‹.²$_-#„/Ll{Ù[ „”Ä”òQ0¤œFµo‡—}2ǰ+Ù†–D-m[Ñuèj¸ƒSBH¬Ó<”0862s*uœ]2g»±zÆÕYz¦6ÝææÛpý”1ÃÇÎÞDˆá°·@™€Ì¤È²]¥D N£¬Žßˆ§l›ÓÞ2?â§ûýH¹8ÝëWÊÅé^?â§ûýˆÀ›KB[ÿùü2ŽS™ù?8ÝïGüàt¿‰:ì-BÆ‘ TÊ/Tî)%:apm$(•gËsЉÙ8uFýˆœî÷#åât¯_)§{ýˆœî÷#y2¸Ð•Àœäá|*ÆXîU<G<ÊÁ¤êÉ~ùh//¿â§ûýˆœî÷#Q‡½BH®c*3¤@È2^¥D7 N£<ïTê?‰òä�y»<殾'Q'ƒ‘þWqÿ’$þ˜J!¥äЬ_p/;>ϦâWãÕC ÷äûy5Û¬›bGVÛ—`JSùûå)µ|Þ¦i\<´·6È’ïÛÑÔx'Z ¢'1 “®Á‚öcY ò‡”·üò-ao:F‚R™)‘é”ÊÒ>BH}"+'dAöš“ðç¯K‡P:åtÕþø$ª\À¡uweI¹zê.—ãšD7¬‹|ŦĖ$Ø“@ÏÏìc-¡íWÇØÁV\7c²Qhfh;–>°Çäõ™N,}¸~7h‰ˆ½Üò^mí†Á)!uŠ¢”ª¥|ÜkFáÁHáaí˜G9€ á‘9¾ KÛ„îÞ^ôzIÿIÇ|­6¶`OtlLþ®hûÕ“I¡sÅ3è’…Ýçp°õ‘Ü^ä‘?½Ž{ïN"•—o¬v³poð¿ƒSBê y\„:ìH–ñ1(%µc‡6½‰ýqÚ3:::rV¤vÈÌì©cÇœxsßôះÎÛ–gãÓ¾/²Þµ|$ØHôåmN‚ްf'­¶ÿX/m¿Z2©mXÐx…m&]ä*ܺîÓ¬U‡ØÍsç/±Ÿ ì†Á)!u‚ZÂ+ŽJ‚S>ÓÔŒô)ÚÄêùÓ1yr½!u„HiÄOˆàÒÞÚ {¹~üûürË®J§5HFjóR4?ú$‰„EÃÜ—¢]fË΄Ö×aFëGEËzÝ`ðŽyû«õ¾BùnÚ¾^2Ç’˜}Ã"´eûzÒßËËflÝñÏøòœ¾QaùíÔ2ñ ì†Á)!u€z^©ÌˆÈÌ!Ás#©ýèXû8šs#¹W`êíb^óó N#ŽœØ-B‚Ex‘ˆ×? o折D68MÞ_x¾i³MîGK×ïàT¡f/Å&ka‹òØÐöus©]ï¢÷”-MmÆ‚U»qVó³peOp³ï N ‰1ÖGÃÈÿ\ÂKjÂÅA´/ɲœhò¸7ñv<Ž‘Lé3gpNsIôÂgž‹tâ~²¸~;—1?ŒáTw7> h[„œ+³¨2#V‹€Q–ˆÍŒ|‚×î½ÎåЬåôŸ-¼YAØ ƒSBbŠÚ;ÆGÃÚ3ŠÓ‡ö`ëšGÑ<óA$^û�OŽäöIÅí|qD-íåéÝú‘¹tâj�81†ïnÞsöƒ_a׫ۑÒ0è'6©–kšòØr‰±¾|¿qZ7Y—õf¥mnlNàõìëÍ]‡³-´^”݈è°§„Ä ÙK*'nJçRœg?H˜dFN _ö›.˜æEO¡åÑ—¹¬×�¸´7ÔA4 L‰dYï\ËL˜EîÈʪk€J #}ÛŸjÅ{'læø&üø‰} ‹Ýˆo“YÔjapJHL TNß•†J<’%½„D‡‹9ù1’ËÚœ�—ö5ä@¤'±líëE³b›^|³·aÇÀ¹ÂûªGZD4‘CzÌ6ОS'tØ ƒSBb€š-åG$dNucck Z7v#•Î 3Ü÷ÞÜC§/pY¯!ˆ?áÒ^B¢Bç¿ø¶™/Ѿd9¶¦t/Ö$ÆÂžÓ `pJˆáH0*އ³¥$2\üën½ S›pgÓr'GïyÓpõ‚·q¼£·¤zž}öÙœ_!„D4Ro¼ŒägG‘J¥.ÉÀn¬i¾ÍÉÃ…÷‘z%¬=§ºapJˆ¡H *G LÅùÆ>FëuÍX7pÈGçÒG‘<–m3'²¯Ï?Dy•øz<öœNy�ÉÁ¬¿%õÛžÓobáê>cV-18%Ä@¤Ó(Kîd)¯,é%$Z¤q¢óx¢ó82Ù£9mŸ`lä3l¼÷a$SÜtj \ÚKHTȧ¿[ƒ¶{ÐÛÛ;.=ïþKžëÅp„V¤ÈžU>*&NìÀƶí9½ˆ³»6a›A˾œbr8‰zn©~ÄÃJH$ÉÁÛ ~à¸ï¥áÖu8d‰,<µ—¨à²çCعü^´Ðw RµÈ©­ö¤v¤’hvhw'Mº 3ÚF~9¯‚Á)!† Ï*•g–ÊL†ÌœY2ƒHξ ‹ÚŠO•LnÝeÄa äêyÉ„°qž9ííÚŒ•M˜»õXá}á"§µ~§ÏI …ÔX4o56XÚÝMkÇÌkf#±ýL™ÌfpJˆˆƒ‘Ñ/™Áàl)‰>ǰmår¬íý Eƒüg»ðê¶ÃÅ×H¤‘ý¦â{¸}€°qÛsÚ€)³^Æáhì(”ç\¾Ú_HÚ2ò%eÛ6“Bת鸡eô< 7xœa$•Cd悈!æpɿɍIh˜Ñ†þQ†§&!+6d€Œ”‡Ì½1PH¢ ™9ý56|b;­÷ËÓ‰ˆKíJ7tæ÷œ’ˆ0¼‰i×bÖºƒœ9%„T‡õÙ¥œµ fq›-Æ/7l_Z”ÜôVμ͉w0•ž) >RÆt18%A0†S}occÖŸær#©? csö ×lEŠ ¾ˆ;!ûLiûá‘9}ÒÞnރãdFŽ¢·c+Ú÷ü)ô³d™·Ìª—3pÁà”"ûK%(•à”Ëx‰yœÃÑÃC¶ÎÒÎvý ×Þ°}眚„z¤ }Qi>;ßoÇ™#¢Ÿ‹8Û¹7-ƒ#‘9õ–7^…Ææ…X8kIÍ%#¶ýlz.P¶ÏSzCäl'ß´íƒçÉœÀÎåÓÐÐØŒGÎÁÉ/².·ï�Ö—±ä›Á)!C–ïJGPf+Ø$ñáz3põ¬õèçÌ©QˆŸÄƒØJ³æ`^ÑÏ9ôµ,É??gЛ¸ “®y ½ç/âBWs’‡óo«bãr"¯¹æ6£JjÃXßó˜µî3È#ÜÎ÷>…k&Ý„Dïd +ç$‘*¼/,¶gMTfOKÁà”!©t¹¿”Mf;6#™|]‡G²éóHõ¾ƒÍí݌ȡIJŠC_EÜ‘%™9’$Bôs‡Ö-ÆcíŸ`°{ f^~5f'‘IŸDOË"¬î«Ýñ¸²DÓ>K*{MeÏ) ‹‡^ÅœÇÞÂ烻Ñ:s .ŸÄ±Ì(Nõ<{V„o ï ±±YîƒSB"€ÌL¨ý¥œ æs‹ïÂòö/0’飱áZ4?òf=Ä Ÿsj²oXF"î”;+@H¥d†÷£mÖ÷1iÒ•˜¶ü¤F¿B߯çH¼€öÚžÅ*³¤?Ë¿ÞuŒËÙ#Aæ ´ÍÁ9|pÚãØž:‡Ó}›Ð’H`uû¡H<çTfÜf›u·Ãà”‘ÃŽ¤Ó'ƒH,ëCˬõջ绑¸æJ\“èÆyœA×ÊGL±câ›dU‡<Z†8#.>BƒNz'#pBï;ƒÀÛ‘-KzWìË¿&a“ÆðÉã8=ÍQ`«Ý¸Áà”‘YR|DbÇÅO±nÎhÿüst·Þ…Ë/¿Écß }jZîiEß7Üsj"â«>üðÃBŠØ‘e¥–«ÔMùŸKzI¹XíÆ §„„„tòÔÁG„Ä‹1 x³¦4`RÃÍX¾ýFO÷acK‰ÕàsND'CåŒÚƒÇe¤–HBN÷ Yƾe t°AÂCl$jˆÝx f08%$ä`q|°=‰/¤‡¿Â—§Gjöü=,â¯d•™ÈGûv„Ôˆ°ƒSYʾ¼—¶e¢œÊ2p¯- N ©1êD^.#„˜„zÞ)™È­AHЄœŠÝß¹“¶e¢è³Åní)$`+CH=¥˜rß©GÔ˜†vg8ªHGK:\„Ô’°ë£ì±þ?¶óñIQ&Šm¯Ø‹ìSvƒ½Bj€õQ1<‘—Ô# Nãø0>‡y"²çN„ • ²ï[D–Ø‹ˆ_•Ao•©åãèÔ^k]¢ØöªC‘Ü`o€a`JƒÓ¸°jÕ*Šä�ƒS4Ò—~„øR/©õL*í>ÚˆMD±Üp‚½BD‚QiL$8åóI=Õ’øCffx(ÒDœ’Z fKÝDfUkØ=O©Ž.bQDìÆm98{ „„50å3LI½Õ’øCfeø[N„Á)©¥fOÃ÷ 2Hm‘%ÝÖ%Þj0Ã~- «øœRcÄAH"Kà˜Âà4.ˆ?“ß’‡"*à°KXËí%ÀàÌi4Pƒ‡^"}Ó(ôKeI¯›Ý°·@ˆf”sà¾,B.!u‚ă3fðP$BBBšmn"‚,ív²%2¸uØ[ D#j)/SBŠ‘F‘ÄŠDH¸Hý3-à µÁkö4*³¦¥`oM00%ÄiI<Ž0E"$<¬³§¦¤v¸Ížš2ˆÁÞ!``Jˆ7Ò0’x {êù{.jö”³¦ÄŽÓì©Iƒl]©¦„”FGTLJ{Ü ©²ÿ›'ì³§& b°·@H¨À”KÜñ†Ái¼ßS‚TBÈD¬AAÄ >F)šXgOM[úÍÞ!b L¹ßƒK|øá‡¹Q[«Hi¿&ËC‰™ˆï㉽„8S* 3 §æ¢Ú^Ó–~38%¤˜âŽÛ£¬bÚH.)F:=ÜëFˆ3âãâB©¼08.2{jb[Ëà”Ÿ00%¤4öGØ…ÙÈï+”!„LD|\\(•§•amã :apJˆ$•˜â×ì)gMÍGdö”äaX?Jå…¶_õd#~apJˆ$(•à”kBJã6{ÊYSóáãdŠaX‰SÝ(•Ú~eÔ“8áe7lY)éhËŒ,ë%„”Æiö”³¦ñ@Éß2;èÄŠÔ¸P*/´ýʨ'qÂËnœR2Ó#•§‹âûì)gMãƒüž|œLvЉ©q¡T^hû•QO6â„—Ý08%¤òX ©xò?!ÄÖÙSÎšÆ ù=éó°ƒN¬ÔSàAÛ¯Œz²'¼ì†Á)!¨“yeö‡Rjö”³¦ñ‚“¹;èÄJhGf_~9ŒL!©§ÁÀàÔÝnœâ‚ÌøH`ÊÇ%RR—ä01/œ^‚tb%ÀãÔ~t}:RH8“jÇâ§{‘.¤uÀà4œºÛ ƒSB¥‡Ò™æ#cH= K\„Ô™çà]vЉ•@|Qê ,^ô6%“¹A¡‰ò[¼¸è&LI0858µW•äÅËnØ’â€ÌȬ©ÌøwâÒHÆ©±7éóY§yØA'VñE®Áé&¼–˜…)Ùïœ4ù6<±óK.ë5€ÐÚ«–~;áe7lÉ ±ÁGÆz#.A]\òa N/Á:±ˆ/r\Ö;ŠS}kqoãh˜ö’ýg´B©¼Ðö+£v6RLK¿ð²¶ä„Xàɼ¤ ¤‘ ¸äÜ^‚tb¥&¾(s‡¶>†i ˜2ëWè9q¡ ÐK©¼Ðö+#‰èÒo'¼ì†-9!Ôɼk×®-\!¤>ˆKP—|˜‚<÷™ež‡tb%ðz‘>†Ý«gcʤ«1}Õv¤ÒºçK/Q*/´ýÊÄF"ºôÛ /»a«BHëH„Ôq 0â’Sèïïg™`X ²^d†?Ɔù7 ¡á&,N~‚á¢(ãœ9}ž{N ‰èÒo'¼ì†­ !„Ô9q 0â’S`pz vЉ•`êEéÔv¬š~5&M¹kzþ<qifú¬[ÿOë5€šøÎˆ,ývÂËnتX“9ŠÞöWÑšH Ñò2Þì=Š‘àV¿b$q 0â’SPÁ)·Å:)&_”ImÁ}SrŸí%“ù(#(U®U¡¥ßNxÙ [r[2ÃûÑ6ëû¹JÓ0µ w5ߦ©×`VÛ~Û2Bê›ÀÉ—|˜„”¹©õ;èÄJh¾ˆ3§Æ¤Dmé·^v֜Ĕo0¸áîlż˶|‚ÓjÄ(}=-‹°ºo8Ÿ&„„Ô‘Ãð—ǵ…Ö!¬c¤ÌœRL°¾h§íÁÛë[‘Ua­¯¢½wù~÷œšB06Í¥ßN08%uÈ9ôµÜ„I37àp‘—ÎàBWs’‡ iBˆþFò$º»²á§™/Ѿø—èÕØBÛ!$NH™38%¤˜À|Qú(v$îÌŸºZ$W qî ØÒ¿§0°¼Ô9A”kT—~û…GbJçûVã†×ààh!:ÍœÁÁ+Ð|ýt¬ì:¿FÑÞ°�‡±yñ2¼¸É~œý%Ùôâ"L›’`pj8Ræ N )&_4Œ­3ÑÐp-šÿ5’»ÑÛÛ‹Þ®NlY÷ Ìoº—Ï| Ô|°ýj0„V®™9õ‚Gb̤vüËW­C—Œ&^üÉ»§¾1œÓÐßHz§¯ý͹‘Ý«1ý‰pBcUd'ªöH™38%¤˜@|ÑÙN,ºâz,n?ìX¤SرêNÜ·õhèû Ii‚-×h-ýö -ŽÄŸôy \,$!vô7’NËz3HŸúÖÞ{Ë! ÕÃNTí‘2gpJH1Aø¢±¾Lýá zøÍÌñ­¸A;† iЯC`僥ߴ8k2ǰ+Ù†–D-m[Ñuè”Ö¥ „ÄÀÉqÆ0|h+–M»Òý ŸbGÊœÁ)!Åá‹Ò½ L-µW0Ý‹ÄÜ$R…¤èWƒ!˜rÇÒoZ‰-™³ÝX=ãêl¥¹S›î@sóm¸~ʘ¿ác>J† Áv>. µûy4O¹“§ÿ ŒÚ*؉ª=Ræ N )&_4ÔŽ‡–tâl!éDfpš—ïĹBZô«ÁH¹Ædé7-ŽÄ”ô·Ýކi+Ð>xn¼fFðæ’‡ÐÖ¾p…XçC!Û°×7\‰i‹“è¶.ôÍ }æ Îil!Ù‰ª=Ræ N )&_t}«ŸÄÆÁ‘BÚŠl›Ø‡¶Y7cQçÉÂ5=”Ê %SAØH\–~³%'1å<¶ÎÄÌ _ØF‡Š%“I§½wAHHG*}«nÃäIßǬ5{pbÂ!dçÑ¿î·<­×p¤ÌœRL`¾(ëWß{¡ Û‹Ô n_ù³çaÙÏXÝ~£Jå…Áiea#qYúÍ–œÄ” Fú_ÅýK’øc*…”’C{°~Á½Hìø<›>Š?n\W·ÌÐÞHfcë}SsŸë)“ù(Ó‘2gpJH1Ú|Qú+|qd¸x=3†ô˜Æ%'%(•§•H{“¥ßlÉIL¹€CëîBC¶ÂH¥q—ËqM¢\äKê© µ‡3§q@ÊœÁ)!ÅhóE©$æ–š ˜RyapZÁ´WÑ\úí¶ä$¶dŽoÃÒÇ6¡[N*ó’þ“¡:~BÂ&˜FRÈ6†§?G×Û¯¢Užµ–hÅúö^ KãžSÓ‘ TÊü믿.\©_ØA'V´ù"§±%°ö*‚K¿ý–œÄ” FŽÂg§ìÎ^øöŸd8Jˆ"˜FòR;~™SrŸo•†Æûкû˜öW0ù n¨à”°ƒNŠÑV/œÆm6bÀÒo'¼ì†­ ‰)i¤6?…Ä[…g<Ë´'îÁ¼u»Ð÷é h~Ô!F¢?ÀÈ`äÀ ˜Þp›WàÅävtåêßntnY‡–ùÓ1ùòf´ýq¸ð~=èÏñ‚Áé%ØA'V´Õ §±¥žlÄ /»a«BbJ68MÎÍUwÉvœï]E· ¤þú —“è\t ¿Ô„Sz… 8¾ãg¸é¾­8®q€H>ˆ N/Á:±¢­^08-õd#NxÙ [S²Áéï^Àº/Ô›“#èk[€eíùÓzþ°?ýÕ~|S¸‹zD{€1Ö‡–©÷`àGÍÊÅÖû—£}Hßàö|Oœ^‚tb¥žÚ~eÔ“8áe7lUHL¹ˆáO>Á‘‹…ä8c8µs-6öËFñ‹ùüUÌš­÷yO„˜†ö�Cž£6µÔcb†Ñ›X†dJ_“ª=Ä“>úˆe^€tb¥žÚ~eÔ“8áe7lUHýrv–]}nlåÌ)©oôFûC«ÐyvÂèÐ%2ØÐüvj<®W>ˆÉd .,¤êvУ‰ø„°D #_`Ïþ…Ãn. Õ³ ­O­ÁÆžT6Ãpÿ¼¹ë†<?£T^hû•¡ÍFœm¤£4cÆŒBª™3èßÕç²'ŽúA[#9Nçû~¥?wn0Ó_¡¯m¾·Èûaá~ÑŸâƒÓK°ƒMÂò A|ïÅCëpkØÚt;šïDëAô$¦£aÒ5XÐ~¬ø´V”Ê m¿2´ÙƒSB¢‹Úÿ$ÿBÊGO#y'¿8fÁ¿€Ô{/á¹í²<O-ƒÑÁwñÔü¹˜·ìI$Vw``T_—J[cOÊ‚Áé%ØA&aù„ ¾wì`+®›±Y—™ÚŽ¥lÆ1y}¦KnÇPá}º)•Ú~eh³§„D™1eG‰ÿèi$#9·Å¶Ï4ƒtºv§aÑ!$î<ûì³XµjU!Uß°ƒMÂò |o&…ÎÏ 3wˆÜ9l}mýç1ò§×qïÝÁQ*/¦Û¾ä/,Ñ‚K¿ð²›pj-!šéèèÈUŽ¡¡ Æ ‰/zI§à´¶hkìIYÈ` Ìžó;èq%,ŸÄ÷fRÛ° ñŠÜgËU¸uݧðØá_¥òbºí—Ê_Pñ½Q]ú턗݄󋢑¯¿þX»vmá !ÄzI§õƒÓK˜ÞA+q <2Ç’˜}Ã"´eëœÔ»¼lÆÖý8àÙ¥òbºíÇÉF¢ºôÛ /» ç!D#”Jp*A*!Ä?zI§õƒÓK˜ÞA+q <p¢+¬Eï)ëV‰‹8»k¶¥.íì×M©¼˜nû±²‘ˆ.ývÂËnÂùEÑ„,ã•J!Ëz !•¡§‘dpZoÈ à‡~XHÕ7¦wÐãJX>!ïM%Ñœý\ùìb¹ 3ÚZžÓK©¼˜nû¥òA|oT—~;áe7áü"„hBFîË~t !Ä‘J–‰08­7¤¼y:zÓ;èq%,ŸÈ÷¦ÞÀ¢y«±Á²¬wÓÚÇ1óšÙHl?„‘ÂÛtS*/¦Û~œl$ªK¿ð²›p~B4ÀGÇ¢=$ƒÓzƒþ÷¦wÐãJX>!ïù‡¿²9ØÌºVMÇ -ûp¾pI7¥òbºíÇÊF"ºôÛ /» ç!D2k*B©=ä9 ì9€“Á Ζ$¬NF=¢¹×ŸD™°|B;wxӮŬu9sZ!±²‘ˆ.ýv‚Á)‰œ5%q£¸!©½è%ƒtª[[걩t™á~¼÷æn ÷ÜSýù n(LH” ËFùÞ;°q×W¶ÇDsVÌ$be#]úí—x[‰-œ5%q#Ì€öï¾ø)ÖÝz¦6áΦ`FëG8Þó4¦54àêoãx@³«a–a½!ž{î¹§"$š„åù^ƒfÅL"¬üò½]úí—x[‰%œ5%q$Ì€öïû­×5cÝÀ…lÃxKEòX¶ë”9‘}ý8ÚsÇÜë'Ì2¬7$8å�!‰:aù„@¾7&³bQ#V6âD–~û%ÞGb gMI ³ ÿ»Ó8Ñù <Ñy™ì¿Ñƒ¿Æœ¶O06ò6Þû0’©`NM ³ ë ñÁòŒiB¢LX>!ïɬXÔˆ•Ädéw¼-ŽÄΚ’¸f@ûwgŽàí?@Cöså³­Òpë: èakÚóA\‘àTfn! Æ]@ªgZŸZƒ=)¤1†ážÅ¹ïúÛµæÌŠE°òÈ÷Ædéw¼-ŽÄΚ’¸¢Û¹ûAûwg‘œ}µ½>¾ü,'[w¡ÿ4îˆRÖ~øa!E±„/ºxhnm¸S›nGSãh=0ˆžÄt4Lº ÚÙfËôw¿Vþù^ˆDHmá¬)‰3av�ô÷1l[¹k{mË‹ÎváÕm‡Ù‰ŠôÅÄÒŸbÓæîœð‰á‹Æ¶âºë0u ™¡íXúÀf“×g:±ôáv Þ§›Ry1ýQ2aH{Å‘©-œ5%q&†ªLô÷a$›'ç>×. 3ÚÐ?Lx*ŸO‚G  Õ&¤Z2HŸþ»“«1¿éjLNô"˜îÎâ‹2)t®x¹åÎá`ë#hë?‘?½Ž{ïN"•—vJå…ÁieÓ^Åcé7[rbœ5%q'˜†ª<ô÷al^´¿Ü°éÒ’ÞM/aåÌÑœx# NMFùcB"Gæ<RûßÁÚÇg¡±a&54âö‡@ójóƒÓLj4^‘ûìb¹ ·®ûmåÏ}‡ñNGphÓ›Ø_ÃéõRåZ qYúÍÖ…ÁªU«8kJbM U¹èÿîs8zxÈÖŽál×Ïpí «ÑwžÁ©ÉÈ`ÃŒ3 )B¢ÁÅÃoaiÓÕY?ЀÉÓîCâµpðäHÖ}ƒ3§ÏÖ1w"_”9–Äì¡M øåd3¶îìÇétp¹+•£ƒÓô)ÚÄêùÓ1yr½5ÁÂF¢ºôÛ/lÉIä‘¥cbø}ôQá !D'A4’9…žÄ \=k=ú9sj4Ï>ûlnÀ\"³G†#F׬yôn̼/×v|‚“#2Ÿ˜A:]˧Aù¢ Híz½§ìy 6¥òbží_ÄHj?:Ö>ŽæÜLô˜zûƒ˜×ü¼ñÁiT—~û…-9‰<Òâ(=!Á¡¿‘Lá{pÖƒò@¤XpÏ=÷äfmÈ%œF‰lðq²?·ßtAóÝXÔòmûƒ™ËzÓGЙx‹7|â²_0›×Á7±|;ÀòW*/FÙþÅA´/ÉÙ<Mš|#îM¼†c$“ ðÏœÁ¹ '‚h¯¢ºôÛ /»aKN"Í×_ÆÆFttt®cB8UR¨¤añ†"ÅñÉRÎÜÿ_ŒQôz"3‚“7aY€Á›Ú|ÑP;æ]> —ϳ/ɔٿ^$wçöÖyàS©¼˜eû£8}h¶®yÍ3´,ýΚJZŽªA´WQ]ú턗ݰ%'‘F‚R N¥CDH< ÷TIA#É‘â CrƬz\q8©´ÞÜõy¶c^Û!?}udýëæâß5¿„sψ¶¥ ˜Ü´­^À²�g†KåÅTÛÏŒœ@¿ì7]0Í‹žBË£/›¿¬7¢K¿ð²¶0$ÒÈrÞµk×R„Ĉˆœ*)èo$y R\‘YÖKŠ1µƒ'Â:©Ô ½¾èNômÚeâÁï(¥‹ÑÖ©føç´:døÇH.k3385`é·^vÖœD–?ü0gð|–‰Q:URÐÛ‘²¥T76¶¶ uc7RÙTfx7e¿gÒ߾̑ FNM—s�H1æwÐÍ'¬“JÆɬ©äóæÏk;ö#UƒŸJåÅ,Ûwj›úñÞ›»qèô3—õ°ôÛ /»aKN"‹t‚x"$‰%:URÐÞ‘ºø)ÖÝz¦6áΦ`FëG8Þó4¦54àêoãx@Ñw0BBJcV=¦„tR©Aû¢ÌÈqÜñóÀâ€|*•£l?¤¶É }6ý¥ßNxÙ [rIŽ9’3vºAâ,' ÷TIA{Gjìc´^׌u²½¨ãè\ú(’DzfæDöõãhÏuõ£=„”‰Qô˜ÖI¥NÔÎât2ПJåÅ(Û©mrB¯D{é·^vÖœDY6Æ}M¤®éTIAG*¿ÀdzMb£9mŸ`lä3l¼÷a$SÁä°vÂ:@öD÷¶c}ëÓH$V£íÍ}…%„Ä £:è1%¬“J¨­/â²Þò §mr"‰æÒo'¼ì†-9‰²ÇT ]öœO¢sª¤ ½‘ÌÁÛ ~€†ìçÊg[¥áÖu8PŒ£=õJæ ´ÍÁùͦ¢é®fÜÕÔˆ«g½Œõ·O0«ƒS†àí—¶8œTjáü�ú>.$‚#N¾¨T^Œ²ýÚ&'J•kµDié·^vÖœDí”ÇÇW¢tª¤ ½‘Ì "9û6,j{Ý2ƒ‘•­»ÐŸÛ A7öõBfp~Øp%¦-{Ãò{âTÏó¸gõGø¦p…\¨z\Iýó›—âç‰nòø\ܸ C;Ù8ù¢Ry1ÊöCj›œ¨„¿ôÛ /»aKN"‡<>Fœ!q%J§J úI9± Ûz¿šhù ó8uÃd¬¯ߟ4Û:kº°rNm–1£:èq%•Ĭ©M¸«¹Í^2û9t vŠ,N¾¨T^̲ýÓøç·_ǶéÃø´ï —Dz裶6Âe½„TÌG}”3r>>†Äš*)èi$/ Õù î[ü[×GÅdFðæòàž%WÛÆ>Ɯ߇–~ˆÖƒç Æ0|ðu,o¾×®Üó…«äfuÐcÊ©ýèú4è¢<âä‹JåÅ,Û?ŒÍóçâÑŸ;̪Ëc˜{ãÒÀGª'qÂËnØ’“HÁƒH=¥S%…J–‰üíó¾‡I—?<¡QÏŒEo2Y’çÉ §‘Gf¾w uùÏðR×1¤qƒÉÑ8ýgèL](¼‡X1«ƒ^gdãí7šù ËP*/fÙþa$g]ŸÛGï8«>.÷£¥+ØI’z²'¼ì†-9‰²×´£££"$žDéTIAO#™ÁHÿzÌúw÷ íã¡ÜÞ–â tµ®GÛ²—œš@æ,vmDbÙcøyËËØÚ%‡uÕÞ6MÁ¬zL‘ƒ¼Ö/Áô©þ&'zÛoçDœ|Q©¼˜eû'ÑÝ5PÓ 7êÉFœð²¶ä$2¨%½_ýuá !1%B§J úÉ Ò'úðæšå¸÷Áûq— JÛ:Ç›àžSÈ ¡wõ19[žò°ú»šïÂí××Ï߀ƒ<­×³:èñ$·—ÿò[±l­í°›äflë;á±ÇP?õxÄÃöÓH½Ýý5toõd#NxÙ [rV­Z•BbO„N•‚h$3#)ìïX‹•óÆÊµï`ê|®sÈà4ú\ìoà 7cyûß>œ9‡Á7Š»Û¢¶gZR¹S¦¸‡'øÌ`ƒq¢ž³‚Ó1 ø MŸ:ñq2n9q¢žlÄ §$òÈl©7ŸmJê‚*)ÚHfFpòàx-ñ0î]üZå²Þ¨“›šéÐÉ·žÖ›Cz¬#'„”Kú$zV/ÃêÝH¥R—䨇h})¸g<:!¾(NÆ>FëuWcú²6l*š]Ïʶ>œ¬¡K‹S¹êÎ [r $(ãæ’^RDèTI¡6déÓ‘Ìv œFœ‘ƒXwÿO‘üãQK'ÿsô¬_Œ;ïcPÒÜ„'_­ýá]„¸‘~´spUë=§$¢d°á‡÷M|LV– Wõ8!vtç…-9‰²œWNê%¤® áTI¡–$—õF¯N~‘\ózÏsö”D„ÌQl]ú$’ݽèí-–ý‡‡kºç”D•QœêYƒ«wåÙÆåOèj}•Ëz+Dw^Ø’“ÐQKzå@$Bê‚*)È÷Ƹä#t<:ùÅò)Nò_duÆ1ô÷¶c}ëÓH$V£më^ ò/¢¸ø)ÖÝzUQ›;.!ì9“è„-9 ytŒ<B†z!J§J º–°ˆK>BgäKúì$ÎÙ qä ìÙ_{û$¤,dЯm¦LjÀäë›±hÑ]¸ææ;p׆'¸¨—ißúKîž8ضÿ0†éÜ"[r:÷Üs—ô’º"J§J NI©7±2±]öÎ[{ÿuÞ:ìéû'G¸Û”D‹œ_m¸Ó–¿ƒ”Ìè§’˜›èÅè±ÍX¸ú#|Sx©sÒ§‘êïAûúÖÜÉø-m[±g˾£[r*CCC¹%—ô’º"B§J NIÙN}s¶,¥<ݤ¡ñA¬;p†:Ò½ Lžt'Ö \È_(§é¡vÌ¿»pÊ4ÑŽy’y³¦4`Òäih^ôš¯¹wÝ5?Ýñ%ýYD`KNBENéå’^RoDíTIùÞ8—|„Nê-´¬Û‡ÃÖ‘¾6ܵ¬GäõÀ¼ôÓµ8ð »s$" ïÆÊÆ¢­¿pz68Ýthú®máÌiPœæN댆ic{J1#9·½£ƒH.üúèÏ"[r*rJ¯!uEÄN•dpJŠþfŸ¬œÚ…ç7öçN[ÎŒüëg-@2Ž|$*Œaøàëxlñ3ØÚ™Ü €+qýü 8ÈC‘èà4Ý‹Ää+1cÝg…v¶œ¦¿Dûü…ôg-9 ™5•‘©/¢uª$ƒS⯰sÙuh¸q gN ÕA;™ >— 22#8ýÕ0Ÿo0fÙþºVÞŒÛ>)<£9œÎ¾ s˜ŽÉ×®æÌiD`KNBãÈ‘#¹Î¤ì;%¤®ˆØ©’ N‰?Æ0Ü¿½¹eqD`p>™ÓÑ!§žoރã™llz½[ѾçO<…5@L³ýÌðÇØøØ£Hlý$kÙà´y2®_ˆ ¹‡>*°%'¡!Θ1cF!EHýµS%%¨‹‹êéïïÏ•%ˇÁi8Û‰Å7­@ûà9d2'°sù4446ã‘…sð@ò‹ÂLÑQ¶ŸÂÁŽÍÙþçè<øÒ™aêx/míæópkŒ—ݰ%'¡!Y»vm!EHýÀS%I”‘G{‰&åcT=¦Œõ=Y¹½„œï} ×Lº ‰Þ3À….¬œC¿fÙþIt.¾ ËÛ¿ÀHf §v>ŽÆ†kÑüÈC˜õ@ƒÁ¨^vÃà”„Â×_™ç#dH]ÂS%I„áY�þ1«ƒO.zs{ ŸîFëÌ)¸|vÇ2£8Õó<îásNÃ(ÛëCˬõõ»ç»‘¸æJ\“èÆyœA×ÊGx R ñ²§$ä2\‚Gêž*I¢‰ Šo–DR>FuÐãÊø^þI…G…œÃé¾MhI$°ºýF o#z1Êö/~Šusž@û矣»õ.\~ù}HûéS{ÐrO+Dª!^vÃ耄‚,ã#dH½réàŽ÷qðÔ(2_ŽŽ—^ÁVÜAB†÷ª £:è±&á“Çqz„ë3k…Y¶?†á/cÖ”Lj¸Ë·Áèé>llI ±º£l€k…—Ý08%¡ !qÙ©[xp‰ j»…¬l!þ0«ƒNˆ>̳ý ÒÃ_áËÓ#<7D¼ì†Á)©9ê2ò?!õî QD‚RÙoÊ%½þ1¯ƒ^pûPðÐöI%xÙ k-©92cÊGÈz†w("'ôÊ– âvУ ƒÓà1Ýöi#áàe7üEHÍáž&R÷ðà1Ô³M¹¢¥2Lï ÇÁcºíÓFÂÁËnø‹šÃý¦„<¸ƒD>Û´:Lï ÇÁcºíÓFÂÁËnø‹š244”s2JO!$|”_æAH•cz=H¿")§ [DìÚ~ý½˜dû´‘èàe7 NIMQÏÐ#¤ž‘†OêA)aIjtÆä $R9&uÐãJ¹~Ucˆ>L²}ÚHtð²F ¤¦H'háÂ……!õ‹Ô§FQ ë ©²ÕB|3©“:èq¦”_å_ú1Íöi#ÑÀËnœ’š"NaíÚµ…!õK©\Κ’Z KyÅÞ8SP¦uÐãJ)¿J;×i¶O‰^vÃà”Ô©øÜ×DH·\Κ’Z!¶ÆÓÓ«Ç´zœqó«œ mŸ6>^vÃà”Ô yDT~ŽJ’Çm—u„Ô±3±7ÎÒ“8A¿Z[L Ni#áÃà”Dy| Ý ¤™µ²6޹%µBlMö›7ì3cô«Äm$º08%5C*¾8BÈ%Ô앎ܒZðõ×_ç ùÌiGì3cô«Äm$º08%5CðÎ! ™ˆ ÜHãÈ‘[R+Ôãc$H%$ލ™1úUâm$š08%5A:@â�¸·‰‰¨ÙSŽÜ’Z fM9XH⌚£_%nÐF¢ ƒSR”à(}ý"¿?%\!Dà¬i|pªç”Ú §27Mˆ?Xb¤&Ⱦ&¼Qß(½oß¾œØ_ ~ҕ꯴›Îô† $8k/è—Â…~5xh#õKŒÔ„µk×ò0¤:G´ ô”(ìו(têD~tl Ià¬i¼ _ úÕà%C©?Xb¤&H`Ê‘úúF´=àSد+QèÔ‰(üèØ@Óá¬iü _ úU§¥ ø‡%Fj‚tˆ>üðÃBŠÔ#ÊA«`ÏþZð“®T'x¥Ýtl ‰épÖ4~Ð/… ý*ƒÓRÐFüÃ##!©œ<©·¾QÚüY_ ~ҕ꯴›Ž $1ΚKÐt7è—Â…~•Ái)h#þa‰‘ÀQ'õ’úFlÀ)賊ÂI'¢Ð©QxéØ@“‘}ÿ<”.8œVÿ~óapê mÄ/»a‰‘À‘‘zvŠˆ8hk°gKéD:u" /Hb*ê9ºÜZAwÐÝ _ úÕàmŸ6O¼ì†%FçÙgŸåI½dÜA[ƒ>{�è']©NðJ»éØ@SÌÂ` ºƒîýR¸Ð¯oû´‘xâe7,18<©—ÊA[ƒ?ëkÁOºRà•vÓ±$&¢¶UpÖ4X‚î »A¿.ô«ÁÛ>m$žxÙ KŒŽTÌ>ú¨"õŠØ ô”(ìו(têD~tl ‰‰ÜsÏ=\¹R‚î »A¿.ô«ÁÛ>m$žxÙ KŒŠÚëtäÈ‘ÂR¯ˆØ>…ýº…NˆÂŽ $1ŽŽŽÜï.~˜KÐt7è—Â…~5xÛ§Ä/»a‰‘@áI½D¡ì@{öׂŸt¥:Á+í¦cILBR>:¦vÝAwƒ~)\èWƒ·}ÚH<ñ²– ¹çADíôYEá¤QèÔ‰(¼tl ‰I¬ZµŠ¾·†ÝAwƒ~)\èWƒ·}ÚH<ñ²– µç~'"(m úì Ÿt¥:Á+í¦cILAöøËï-+WHmºƒîýR¸Ð¯oû´‘xâe7,1( N‰B9hkðg}-øIWª¼Òn:6ľþúëÜŒ©<>†ÔŽ ;ènÐ/… ýjð¶O‰'^vÃ#"KËØI"‚8hè)Qد+QèÔ‰(üèØ@X»vmn¯©©¤vÝAwƒ~)\èWƒ·}ÚH<ñ²– >ã”(ÄAÛ>…ýº…NˆÂŽ $‰:r*ºüβןԖ ;ènÐ/… ýjð¶O‰'^vÃ#Âà”(”ƒVÁžýµà'm}-³DÿûÿoGà'í¦ º‘ýAÎv±Œ?|¦ixÝAw#èzýá‡^ÿ~ó ÚökÑö mÄ/»a‰‘@‘½OÅ'‚rÐÖàÏúZð“V¯Å¾dãw¿ûÝ :…Ÿ´›.èFò ÁEPÏfodP~c>S:‚î »d½®Å£à‚ü|µ’ Èçü]>&´íÓÆã‰—Ý°ÄH H¥ä‰‘D[p ú¬¢pÒ‰(äõæÍ›që­·æ>÷þÏÿ9>ëh¿GDá¤Qxé‚n`¤%Á©©rÚªnØ@Æ.ç Ÿ ;ènY¯kñ(¸ ý’|~³§ô«ÁÛ~eÌà4<¼ì†%FE*%ƒS"ˆ-Xƒ={XJ'"HºhÑ¢Üç577ã½÷Þ× ö{JéD^ºZ40’79@L¾K÷røZüý¤öˆÍH�Áå¼õIõZ× Ú®‚öKò÷y(#ý*ƒÓRÐFœapJBAf‚¤Rr™”ƒ¶}ö�°TúùçŸÏ-ß•Îøo~ó×÷Úïó“vÓÕ²‘ ù>9íZ×>T6ñD:Þ<·~ ²^×â̈ ý’üýAÎþÒ¯OeÌà4<œ’P¨E¥'æ lÁüY_ ni±%Yò*Ÿ‘H$rq·÷Ú_ ~ÒnºZÛ²äYç>TÖÅø!Ë¿åw b81ƒ ëµøÓRý oèWƒ'È2û;ÚˆXb$0œ+b *ÐS¢°_W" µÌÕº„WDa}9:…]¶¬s*ëb¼Û»¥—¤~ ª^‹ï•Ï–v<Hjá—ä;‚À¡_ ž ËXfÖM_ºGXb$0Ô¨>!‚Ø‚=àSد‹È^é|[—ðZEa¿^J'¢ð£ Ë–­z5KìXã…t¨dà"¨!bAÕëZ .×â;¤®5ˆC¿<A–1ƒÓhÂ#Q‹JOÌA9hìÙ_ òZNá•€TÞ/KxwïÞ]Ж¾·à•vÓ…ÝÀÈò#ù*݇Ê2>ˆo•ß“ûùIPõº'õ µðKR_d 'èWƒ'È2fpMXb$0œ+â ‚>%²dW/yŸ} ¯…ýz5:…—. Œ#2›\É>T6ñ@~wù-ùØ"U¯kqR¯P ¿¤Vq±Ê€~5x‚,c§Ñ„%FƒÁ)±"ÚìY@™!U§ðÊr2«Î* :…—.* Œt°*Ù‡ÊÒ|ä·—:B¿JAÕk±1iæ~Iê|OûgéW½O]ÕAeÌà4š°ÄH`08%V”ƒ¶}²„÷úë¯ÏZb/ö€Ð+]©NðJ»é¢ÖÀøÝ‡ÊÒ|deÔ• f€ˆ™U¯Å΂>©W¨•_’½ ‚múU§¥ ø‡%FƒÁ)±¢´zÖ%¼÷ßîäQ¥s Öt¥:Á+í¦‹bãg*H³*¿aЧ§³¢^9Óh§V~)¨eÊô« NKAñKŒƒSbE´yj ¯Ì˜ªÎ �í¢Ð©QøÑEµQûPe¹§×>T6æ¢öÌÕb&‹˜EõZür­üE­¾'¨§Ôêï2 N½¡ø‡%FC–ÊŒ!‚8h H%0•�Õ+T¢Ð©QøÑE¹‘™µÕ-€ai&jðAü)‰.AwÐÝ¢^×ê¤^¡V~IVçÈwéž ¦_5;8•>jо•6â– ’Q)RßH§@lA´4ê^A~ ?éJu‚WÚMgB£ö¡:=Ó ¤y¨AmâœÖê¤^¡–~InÝ}úU³ƒÓZôSi#ÎxÙ KŒƒÓúF:Öòû‹c–NrÐÖàÏúZð“®T'x¥Ýt¦40jªÔ?ë>T6æ!¿!@2ƒ ;ènQ¯Å‚ –~Iï$o:¡_ Þöƒ,ãZôSi#ÎxÙ KŒF-*=‰&²¿GRéX+íôYEá¤QèÔ‰(¼t&50NûPÙ@š…ò›yí#&Ñ!èºAÔkñµzŽn-ý’ ÜIÞtB¿¼íYÆ NÃÃËnXb$0œÖÖ%¼2JmŸ¹³{ö °”ND¡S'¢ðÒ™ÖÀHÙËo!15›JÌ@ý^nû‡Iôºƒî†îz-~C>³V§B×Ò/©}§:|jù÷G• m?È2fp^vÃ#Áà´~üÖâ„eœSÇF9hkÐg�ý¤+Õ ^i7© Œšci<�ÉL‚î »¡»^«“zkµ”¼Ö~IV“蜦_ Þöƒ,c§ááe7,1 Nëë^¯F_4%\‘:Y«N'ñü6Räw"ftÝ §zN©­Ô;AÛ¾S™›&d"^vÃ#Áà4Þx-á%ÑCfädÁº•D©?êd^Ö%óºƒ^+¤ÍŽóàˆ  êÞwZï˜lû짆‡—Ý08%ÁJO¤ã,¿«¥nKxI4‘ßNê¥Ú‡J¢ Låwa`j&&wЭˆ¨ÕI½a sÒvÉà*уɶÏ~jxxÙ ƒS¬ôñCv(R«Ó‰~Ô>Ô8wBMB pFÛ\Lî [ѽ'3ŠppN/&Û¾´ƒ²5‰Ô/»apJƒÁi|N³üž\ÂÔ@—‘†‹Ô'¦æcrÝŠøø¸¯†Yµjӈɶ_öU¼ì†Á) 6�æ#A‹še“à”èx!¿§:ÌŠ¿míÿÈ‘ûx`r]Që“zÃBÍÅï=˜lû NÃÃËnœ’À@b&Ö%¼\_¤#ªfÅù;×Y:É2&wÐÊçÇ„sß©L¶}§ááe7 NI`085ë^™5å’Ïú@ÍsµCðHÀÀ4^˜ÜAWÔS›Íú§“mŸÁixxÙ ƒS NÍ‚Kx‰š9á>ÔàP)£Š&wÐâ÷ëÅ.ë)¯Ac²í38 /»apJƒÁ©9¨ „Kx‰ J¨Çšp€B/²·TÊ•³ÓñÃ亢NêUHÿDü©“mŸÁixxÙ ƒS N£8ei ÕLgˈ v š‰]p°BjÆ”)‰*õÔQ—|J~ÙæUƒSR NI(08.Ò «“Bå7â qBê0ªêa`J¢N½k’OÉ/OÊ®_” 08 §$dykò»ÈÒBùm8+FJ¡–¢rje00%& v*õ¼žŸÆ}§õ gÏ£ ƒSªâ“h ¿‡ZÂ+3btȤ\¸µ2˜S¨Ç•N˜ruWýÂ>jtá¯Bƒ?Hj]ÂËg»‘J;RûPëåДjP)ËŠ˜€´ õ6‹(«BØG©_ØG.üUH`¨ŠÏºð°.áåÞ¢ë>T·º]ï ªŒ¸lžDŒJ!mµ´b·õ„ø/©§’5{Ì¥¾ñDVýXÛ,§ÑŘ_å㯀ÏNçåwñƒÚŒ[©”‹Ó½~ÄN÷û‘rqº×øÁé~?â§ûýH¹8ÝëG¤óïµ¼Rœ®ZÂët¹rt¸ðuÊçg€ý'ó¾%ѬØ<Ú<Ðå\^"~üÓý~ÄN÷û+Ö}¨ö@Ôé^¿R.N÷ú‘rqº×¯”‹Ó½~ÄN÷û‘rqº×ý¨UVùÛ¿ýÛ\p&AšÔñ¸.á—�Eò'ùü«¿ú« åÀA¥x¢ K ·®„O$ƒS€J'ðŽÅ”\ó?X?·)§{ýˆœî÷#åât¯ñƒÓý~ÄN÷û‘rqº×HB;(Ø—ð:Ý_®Ôkp*è ù2¸íƒ¼oŸôá±Kƒdn24Rø2°—·_ñƒÓý~ÄŽ4àjª †(œîõ+åât¯)§{ýJ¹8ÝëGüàt¿)§{ýÑZvî%q›I•öP Úz‰}ÀxcJ=•A i¯œ~s%Òo"á¹àtûἑËÌįÿ¿@W*ßá#f"•ÝÚq%Õ#˰”#µîg“ŽD˜Kx¿N^Ä�ñ;"~ÍzD{ë>TY§lS¤^:yRÒ©‘úÇY—ð´æ °óXáqEꦵ®ÚÅið3” Ê¥˜4ˆTjö”Ñ rÁ©4.qêäÖ;ÒÀÅmô5LÄqZGþäõþýûs©¼–²¶î©¨%²ÊáöÀ[b®7Üüz8¥Vf¥þ‰p9X¸È`’§·~÷G2ÀDÜq›E”¶$Îtû šUd°øÃ¤àÔkö”§ªGî&¢ö¯=Hy:9UiPÃîLH@ºe ß)”%±² –Aj} A™“]ŠÄ¹“+³0ÒÑ‘zÖ ™ˆ R¥Ãü`W_¹a]…c•z8<Om±‹u5)“‚SÁm0•³¦ÑÁ) §úðZ޵™±¸+¤þŸÛ9{wì³ùv‰ëh´š}áÉžÑE‚Ô§ÿ9ßq–}äA.Ó7­ƒ.8 *Õ“=;ÍsõƒL³}§ÙSΚF §$P¤¡“�•T‡×R‘¨–±ÌžÊ,ª(öáJrê.Ñ‹Øe½0"y–ú&õ‘ûKÍ@fNå ñEAùƒSA–£«z×}¦nØý—Ôiâmߺ´[~w±R[¼ì¦&Á©:y—Ô2kÊà´zœŽý·KT;Ê2[¡N¿ cU–¿ÚŸw‚œÅÕ‹v&õÛÉ­—Ù™UáþRsQ.Ê’_Ý[¼:ZQFuÒ¥ƒ^6-yV¿ì«T†‰¶/¦ª}âê¾pð²›@ƒSqþªSÊY‹ú„ÁiõÈþåD½$ꣾ֎a­ôŒ É#< ‘ή}65#ÓÜ_d‡ì‹¿ 3@5±ƒ.È�“ÔÑz^ ¾KÊ€AJe˜jû²”7m“©xÙM`Á©Ì–ˆó rŸG=`íäQ(aˆ.¤c(¢îŽ¡ò]Êý]ÄéøÊ#n‡P(µ…´Òé‚è ;åÁd©§Ï2Yâm¿´‰xÙM %¦: ²”—ÂêÃÞ·o_‘(ì׫щ(têDµÒ‰(têD:u" :E¥:ÝŽ5ˆŽ¡ù\™‘•ôAÑ€ 4 »ý)?$}>"¨z\¨&/,‡hCÛ÷&Ž¿¹¼ìF{‰)‡/B¢1l·ÀÁ~½ˆB§NDQ+ˆB§ND¡S'¢Ð©QTª Â±ŠŸÄ#”!Ñ 4 7ûÓåƒØA÷¦š¼°¢ mß›8þæ:ð²í%¦:…:F"I1l{À`MWª¼Ò•ê¯t:Á+]©NðJWª¼Ò•ê¯t%:ÓëOöÒE6Ð$L‚¶?vн©&/,‡hCÛ÷&Ž¿¹¼ìFk‰ÉLˆ<×B½ˆa»ö×B¹:Á+]©NðJ¡¼Ò•ê¯t¥:Á+]©NðJW¢3ɱÊÉàÓßç>÷(š„IÐöǺ7Õä…åmhûÞÄñ7×—Ýh+1yDƒ|Éçg ˆ6¬†­«(üêD:u"ŠZéD:u" :…NˆB—ÎÇ*ËóıT˜Th&AÛŸWG«RâTgªÉ Ë!ÚÐö½‰ão®/»ÑRbê�$yTÑհ탈¯ND¡S'¢¨•ND¡S'¢Ð©QèÔ‰(téLp¬2Sú÷;òÏ3%Ñ„ 4 “ ítoªÉ Ë!ÚÐö½‰ão®/»©ºÄd ïm�«?.\ ÚÃV‚š®T'x¥+Õ ^é t‚WºRà•®T'x¥+Õ ^éJt&8VÙR°´» ‘„ 4 “ ítoªÉ Ë!ÚÐö½‰ão®/»©ºÄd—®£Ø‰3bØ*PP¢°_¯F'¢Ð©QÔJ'¢Ð©QèÔ‰(têD•ê¢îXÕr^YÁA¢ h&AÛ;èÞT“–C´¡í{Çß\^vSu‰É³÷Ÿ,$H ˆa»öëÕèD:u"ŠZéD:u" :…Nˆ¢R]Ô«¥²çD6Ð$L‚¶?vн©&/,‡hCÛ÷&Ž¿¹¼ì†%f�bØö€Áš®T'x¥+Õ ^é t‚WºRà•®T'x¥+Õ ^éJtt¬D´#&•ØŸŸaì {SM^Xц¶ïMsxÙ KÌ�İÝûk¡\à•®T'x¥«Óõ`xàC$ÛVcÞ¼…xì™—qèô¨E_éç:ë¯t¥:Á+]©NðJW¢ ñÊájÜ*/Ø@“0ñk²CV†• ;èÞT“–C´¡í{Çß\^vÃ3�«a«€Á* ¿:…NˆB¯n g{ŸÃõߺ “.û®û»&4ýç©øöÔf<ùúdò·ºÜ›Ç¯ND¡S'¢Ð©QèÒ…áX¥SÈ“wãh&~íOÇþþ`ױ…ˆS©&/,‡hÃàÔ›8þæ:`pj8Vö" ¿:…NˆB«îâ'h»q ü,¶íî)\ïÁîm-˜=ã§è͇§öûD~u" :…NˆB—. Ç*3§â´8{Ø@“0©ÄþÖí)$B ´:“Æ—_øê š¼„U™áãørx¬Òý`yÄ©œø›û‡%f�bØ*PPXÓ•ê¯t¥:Á+]±®ç·Xú×·bÃaû2Þ3èZùÝÙt/Òé|cRt¯åµP®NðJWª¼Ò•ê¯t%º0«¥r 8:Šl I˜TbrØ£ ’És”à :sj?º>õÎPf¨‹ŸÎ¶¥…´ªÉ‹þréîn|êwŽa¨ýçxºWï1ðôƒåV9q@"°Ä @ Û-p°¿ÊÕ ^éJu‚WºrÝ.üÓŠÙX’ü©T YiÇ¡žõXpÇÓøõ6IoÄÆ'_Ç¡‹~>×]'x¥+Õ ^éJu‚Wº]XŽ5ìY ¢6Ð$L*µ?yŽûëŸ5&:“z‹½€MÉ$’Žò[¼¸è&LIÄ98M#µy½ø[‡üdÓ X4í&$œ†‚þr I°Ä @ [ JöëÕèD:u"Šªt=›±bÚ¿Ì•‡·\‹yëwî¬ò;D¡S'¢Ð©QTª“2 ƒ_׽˥½q!,;"D¨Ôþdï{¢¯¨1Ô×àt^KÌÂiC'߆'v~ãe½^Áéz$š¿ŸýÎLžžÀÎz úÁò¨ío^HD–˜ˆa»öëÕèD:u"ŠêtÝx÷™ðãÄKX¿~=z{{s"¯‹å7ØÜ¹§pg%ß9†á/c—ƒ.¯Ï£S'¢Ð©QTª ӱʒ:>G9°®=A,Q3•JíOül1ƒ@êŒã²ÞQœê[‹{¯@ôGì?£50ªÉ‹þrp™EK…¾µ¢±áJL[œD�u‡~°<ô—$L‚%f�bØö€Áš®T'x¥+Õ ^éÊu;|-‰¡sùc\w~�}Ÿ ½W°¦/½>‰î®ô8êòìÛ÷ž›µ½ÿ4Qïuoy:Á+]©NðJW¢ ӱʲ^žÚØ@ë$¼%j¦R©ýÉÊ $;B1Ö¤ÎdÎâÐÖÇ0­¡Sfý ='.z©&/µ(‡Ìð§Øºìf4Lú>f­ÙƒiÝáyúÁòÐ_N0 –˜ˆa»ö×B¹:Á+]©NðJW®{ OÝqýy‰DóæÍËIâñ¹¸qA;ÞÛ׋߿öfL½­}gm÷ª×‡±yñ2,ËÞ/Ÿ!£fò¿zK/û¿=Ái!¦c}c`â¾S9œ$ŒŽ"©6Ð: o‰š©Tct…s8[àu&} »WÏÆ”IWcúªíH Õä%ØrÈ Ú…Õ2s6ù6¬ê<’­]ÁG?(ƒ7":©E9q@"ºø.1Ù{ÖÉuõŠÕ°UÀ`…_ˆB§ND¡WwÉY×çŸoÚd“é‹Ñuv çûÖàúïÜŒ¥¯í´Ý›'àΚ3œ¥OÌCÓ·/Ë–÷UøÁ¿Âö^û½—>O‰Â¯ND¡S'¢Ð¥ Ó±~vzâ’:§€•D6Ð: o‰š©TcÒï¿Sk‚¬3™á±aþ hh¸ ‹“Ÿ`¸¨_þ Μ>_’ÃðÁ ˜ý•ÎË™Ógqº°RKqôƒæ§ˆ:¾JL-oapZ[¬†mD~u" :…^]ñ’܉ú<ÞºN¼òò–¢ÏÈ9ªSÀŠ¿ÿk\vÙµ˜•Hí7U¨´U~u" :….]˜ŽU|øë¡HauIu°ÖIxKÔL¥û k@,˜:#óíX5ýjLšrÖôüybÇ<ý Ö­ÿHk‡½š¼Sêü¦O¾Üe9s¶œú7c=Ç)‰YÁ)$LÀW‰É険 ”F [ kºRà•®T'x¥+×uà—O­Ç¹‚'×í«Û£×ò^¡ø^7Ývmysÿr¼¡ÞëúÞ<Öt¥:Á+]©NðJW¢ Û±ŠÏ‘TÅãÙ?1¬G;Êa,µZ¢f*ÕØŸŠT*85¥ƒžImÁ}SrŸí%“cý(™Q¤¶.ÈŸLì)×óäÖ20Åö9 a¾JL:ˆ·¾_Hš!†­% ûõjt" :Euº·húV®<ìrÙõáŸözÝ뤻€Ž—– éÛÿßúÁÿÀšŽ.‹.è¼øÓ+üêD•ê¤|ÃD:…ÖàTÒÛĶ£øRÛ%j¦Rý‰ÿ¹cg!á‚9ô2¨‹™ÓR0P)3lŸ&á«Ää@�îõª=bØnƒýz5:…Nˆ¢:Ý[ø_?þïøŸE{E‹e³nǬå¿Â–ݽ÷ 2gppÃBL½ì/Ñ8+ÚÕsI'Ò™3øÐò~«(têD:u"ŠJua;V§àÔš&fÀ:j¿DÍTª±?ñ7¥:ßæ§£8}hÞ^ßš?¡õU´÷b87ã^/{N³¤OáP×[Xßút¶žFëúvôžÍæ\âYæÙ¾¨%^vã«ÄxI8ˆaÛkºRà•®T'x¥+×í›[:ÇL¥Ë u`Ƀ[Ðár€‘ý5ÒG°æþ¿Å·&ýÛÜò·í…Wž}¿Çæ?ãi½…tØŽU|Žui ! 6к g‰š©Tc± NÓG±#q§Ã,Òhœûv§ô?N¦š¼S²âà}$f~Ï’ÿ‚4\‡¹­rzq0y £l¿¨^vã«Ä‚0@R1l·ÀÁþZ(W'x¥+Õ ^éÊuoáéGžÁg©RYéèèÈJ;º…æËç"ÑÑíqoáuæ0¶Þ75ß�yÉ·ø(•–òY±a)¥2“°í(^„·DÍT¤<‚$¿Ìß<Œ­3ÑÐp-šÿ5’»ÑÛÛ‹Þ®NlY÷ Ìoº—Ï| јU“—@Êad?Z§_…†ÆYxüÅ$:»z²åЃ®Î7°®eš&_™m ûüÏ í0 ̱ý^³åÇß\^vã«Ä‚0@R«a«€Á* ¿:…NˆB¯î0’Í“såQ,—áÛ3¼èuožòtù™ÓõÝnúK¢ð«QèÔ‰(té¬öè‡Ì$jv¤‡¿Ê °åääðx§(3rŸöíCßÀ) %ΜZ Úþ‚ðKüÍg;±èŠë±¸ý°³¥SرêNÜ·õèø*%T“ýåp1[ KqEã£hwœ%ÎÖãïcÕMcëq½!Ký 1¶ÏÙòHáe7¾J,$¥±¶=pQøÕ‰(têDzu‡ñ»–uøßë×cý¸¬Å/އů}0Þ:ß›Çz­ûƒ7ðò³«ÐšÛÃÚŠ•ϭǶ]{sº½;vŒï9UXïU¢ð«QèÔ‰(t颿Xé‡Ì„ ´b Ã}Ï£iÒ÷pû²±uÏŸrϘ̜ø�OÈã=¤£$'î¶í·={Ò…ï™3• í/¿Äß<Öׂ©?Ü€AÛÊߊû´c¨ÖA5yÑ_çÐ×ò_ñà xÇ·>‚í.¤õ´†)¶ÏÙòháe7¾J,$¥ÃV‚š®T'x¥+Õ ^éÊuÎ{Nqn'–O_ƒßî)÷s/ ã×ãÆo_–+[«44Þ‡¥/µç'£(¾×ësË× ^éJu‚Wº”K” 2“¨ÙQxd².knkÝ©4¾Ý@³ ‡û\4-}^³žá̘JÐö„_ âoN÷&0µÔcbÒ½HÌM"UHê š¼è/‡aô&šK.yO÷¶`nRïÑðAÛa˜aûœ-^vã«Ä‚0@R1l·ÀÁþZ(W'x¥+Õ ^éÊuoá韬À‡²?&+ù™ÓWеeš.Ïl/cÏiÖx?¸ì/ðݦûðbr;^Î}ÎKèܲ-ó§ã[ÿ¢ ËÿiWî>Áú9‚5]©NðJWª¼Ò•è¢æXé‡Ì„ ´Bfm–`Ý€ê áÔÎÇј-ŸËgmÄ`. ÌàBWs¼:Æ!͘JÐö„_ äojÇCK:q¶t"3¸ÍËwf-UÕäE9Œe‹a–tž,¤øƒbùNóÇñôƒfØ>gË£†—Ýø*± ”F [ JöëÕèD:u"ŠêtnÏ9ý·¸å± Øåy¯’N¬ùÑ_¡qñÛ¹Y…bÈßñ3ÜtßV¼;A—…NˆB§NDQ©NÊ8JЙIÔì(<dÖf 6Í'G¢mÆU˜Ô0­ÔLŽt’–ytžÃ›0• í/¿Ìß|}«ŸÄÆA§a‹¬ÝœÚ‡¶Y7c‘gàæŸjòH9œß‡ÕK7ƒìŒâT_f}ïtž-f¡‰8úA3lŸ³åQÃËn|•XHJ#†í8دW£QèÔ‰(ªÓ½…§&ÌÒÛ1~ È;tÝ£DQt½û5üä;·bÃà7uAæ(¶Þ¿ϽéÙ§Eú:u" :E¥º¨9Vú!3a­È–;ŸÀ‰÷pèØgؽúN\>ér4.ÿ�§rýäQœîObÑuztŒÃ›0• í/¿¤íoN…/Ž _²•ô¼÷B¶¨#ܾógÏòŸ'°ºýPÖõQM^ô”C6ð>9ˆ#Ãjv~Yü ÏmÇਥþ ÛŸz³ç-ÃÏ/ }à|A¡‡8úÁHÛþ8œ-^vã«Ä‚0@R1l{À`MWª¼Ò•ê¯tåº^twïÅHêh_ߊùóæã'=ƒ=ƒùF×ûÞÂkÙK35Qt¯õ}‚ìm]?o’©üŒÃD½×½åé¯t¥:Á+]‰.jŽ•~ÈLØ@[È«nÃäl™LšÔ€)³^Æé4bçK«‘ÈÒÖ†NÇÙ-!¼Y�S Úþ‚ðKÚþæTsíûL3cH¹m覚¼è)‡t¶–M¨3™t:¶ÔŽ8úÁHÛ¾ΖG /»ñUbA )¶[à`-”«¼Ò•ê¯tåºìúíO1kJ&Mž†¦Ý…¦¿úO¸ë®ÙøéŽ/Ñëy¯zýg´?´ kvægE‹uyöõnÁ“M`ç¹¼› ·¤+Õ ^éJu‚Wº]Ô+ý™°¶‘ÁÉO÷£·ï œö}pQx³�¦´ýá—´ýÍNÁi©&/zÊÁ98­5qôƒÑµ}ΖG/»ñUbA )Õ°UÀ`…_ˆB§ND¡U—À†NÆe÷aM‡,å} ‰Û~‚õ{·!Ñü(ú¾)&‹î- ³¯¿mîþÇ7r'òë²éîN¼¶ü¿àßüh v:ém¢ð«QèÔ‰(t颿Xé‡Ì„ ´b '¶oÇþRÓ5'v£}¿Ç‘4!͘JÐö„_Òö738ÍÂà4(¢kûœ-2^vÃ3�«aÛ…_ˆB§ND¡U'Kr'_‰ëWü®0Kª‚ÓwðÜÍ–áÝ[ ŸîBÇ ?Åâ5oZ“ÁÞm¿Ä‚;nÃç<€y‹žÇ–½N÷‹Â¯ND¡S'¢Ð¥£c%: )¤Ãô0n_ôDaù®“üÏU¢#Î,€©mÑí gapš…ÁiPD×öù›G/»a‰€¶=`PدW£QèÔ‰(ªÓ½—ÿûÂ\žDONwÉÙ·á¶™?À·¾·¯žs:ñÞ=èÜÚ^tšo®c—O[Eá¤QèÔ‰(têD•êÂv¬A4|¤ö°VH‡in®<¼åz[§Ê¾D-O­gLEÊ´RÊñAAø©jþæ"œfa ѵ}þæQÆËnXb †í8دW£QèÔ‰(ªÖíú-þñÇ÷`þ3I g²Áiód\6µO¾¾£è>Åø ká¤b]ñ=¥t" :…Nˆ¢R]ØŽ5ˆ†Ô6Ð é0-*ñ¨Ž X÷°­SŽ–©Tcåø  ü”¶:Ãà4 • ˆ®íó72^vÃ3�1l{À`MWª¼Ò•ê¯tåºüò©õ8—¹ˆ‘áóèÞ׃®ÞÇðÐn¼ºí°ÇH‡ÇƒSEñçº§à•®T'x¥+Õ ^éJta;Ö >R{Ø@+Êé09½‡Ái5Tcaù mu†Ái*ADýào¼ì†%f�bØnƒýµP®NðJWª¼Ò•ëÞB¢é[¹ò°KÃŒ6ü“ËQ§åÝ릓ò “ >R{¶£è 'í>Š»“ƒp?£÷,z õ u¿(ƒÓj¨ÆþÂòAÚêÌÈسÿ„‡½O5yÑSŒ üûO†¢Ó–‹žrbpj*,1°¶ ¬¢ð«QèÔ‰(ôêcóÊž(:8ägXö£›pËü_b`Äí´Þ·œÛ‚Þl›4QN^D:u" ]º°+ƒÓxÀúûÛpÓ ¿@ÏY§Ý¢¤“¸÷ß-DûUÏà´ª±?ãƒS;™³صm-Ù6´åelíú¼‚Çù£š¼U™áCØ•lCK¶/ÑÒ¶]‡NekY°Ð–‡žrbpj*,1°¶=pQøÕ‰(têDzuÃøbàäøòÝqyïyÌžù ¤ mk‘.' N«Ñ…íXœÆ6Ð2ƒHÎþw˜2ó ${pjD÷’ J‡S8ØùkÌ»þ*\½x;†Šâ§ÕPýÅ*8Í ¡wõ19ûÙ S›pWó]¸ýúïãúùpÐvØ–NªÉKå9ÛÕ3®Î~ö˜Útš›oÃõSnÄü c8À8~°<ô”“m¶<BÏÆ5xªuzR²ê3读ꪀ¿¹Xb †­…5]©NðJWª¼Ò•ëÞÂÓ<ƒÏR)¤²ÒÑÑ‘•v üáe̽b.Ý.÷rY¯JW¢ Û±28l ­Èc`ÞÁòiWæÊÅ. ÓÇvé<Áà´¤\+%NÁ©ÌÚߨp3–·Âb£¬9žÃà›?ÅÝm1Z¸¤›jò¢¿FÐßv{¶ž­@ûà¹ñÀ$32€7—<„¶þà¿ÄoGô—ÓZw¦¢éÎ&4ÎxŽw!!>øêÅh?Üœ9sÿ°Ä @ Û-p°¿ÊÕ ^éJu‚WºrÛžÓ+и`:zÝîepªÒ•褌ÄÁi<ÛŽ¢G6@=õ1¶®^‚æë§d˧“¯Ÿ…emè?í"08­†jì/NÁéØÁV\7sÛ§Š.taåœ$Rò:3†ô˜Þ¹¤jò¢¿Îã`ëLÌÜð…mÆ,“-†æ$çS<¦‰~°<‚ùÍoÇŒuŸeå1 u®Â¹}ÿc8Óùnÿsá}úáoî–˜ˆa«@A‰Â~½ˆB§NDQî-<=9~õÊz¬_¿½½½9YÿúÛØeyLÌÄ{?Ä–µ¿Eg!x-Ö©k»±%Ñ‚ ¬]:u" :E¥º°+ƒÓxÀZ!Ëw¿Ê­þÈÉÉáñ}n™‘ø´oúœö¾•s Kö³½ÍûÏÒDQýÅ)8ÅÈA¬»ÿ§Hþñè%L}Žžõ‹qGâ} Jú›ð䫟B›ë¢š¼è/‡l]ê÷/Iâãe•C{°~Á½Hìø<›>Š?n\WÙW0Tý`yQN™Û±â‰÷òÛ%F?F뜗Ñ?vÚø0î. Hsÿø*1vÃA Û-p°_¯F'¢Ð©QT§ë@ÛÊHdƒÈ—ßÚõ4ç‘ê}ÿë¹W°mWOÑ}ïuÑu¿-/%°ðŽà[ßšç8»j…NˆB§NDQ©.lÇj÷;ôCfÂZ1†á¾çÑ4é{¸}ًغçO¹=n™à‰é²NVƒ|³ÚöûØû6ŠÓ‡v#¹zš&OãìªÕØ_X>'ˆ:sñÐ:ÜÚ`_}ä ×<…ÞóúfOå3+¥š{),ñ´æ×Q.Ç5‰nè\ä+Ÿ7‚¨úËi©·— ÑÉöîÂ:̓Vôç%þø*±°t½#†m¬éJu‚WºRà•®\׉5³þ®°Wf ï¿x¾{Ù÷ÐüÈC˜õ@ÛzÊýÜ‹ØÝ±ϯ¸ÍWdË÷/ðÿ<óšŸ/:4Iá•®T'x¥+Õ ^éJta;V»ß¡26Њ Îí\…ÛZ÷c¤p™ÃØzßÔleƒÒ5»ph°ÉEsÑÒçdfFRØß±7_›ëh7L‰‡ç=ˆÕ N'Pý…ås©3™£ØºôI$»ó+ÜåSœÔx‚o5y ¢2Ç·aéc›Ðí˜w‹ôŸtXÅP9qôƒAÔýå4ŠcÉqâ_!™LZdvöiýíÄñ7_%–ƒ®wİÝûk¡\à•®T'x¥+Öu¿†ŸÜ²Ò^žïƼ¿úKüÕ¼Wpgеò‘,¯/¢}é |+[¦“¾õqoâ5üzÓ»èÊêÒgÎà\ö³­÷ ^éJu‚WºRà•®D¶cµûú!3a­8‡¾–%X7 FêÇpjçãhÌ–Ïå³6b0ï}›Ènÿ)š&7dËu ¦Ý›Àk;>ÁI9õ7}§ÏwꪩTcaùœ@êÌðçèûçã¹¶îœÿôc|6~B’~ªÉ‹þr¸ˆáOúðÏCç³9·2ŒOû¾¸4h�qôƒAÔ@Ê)}»¶}„S63Ï\Á…àL?–¿yÐø*±°t½c5l0XEáW'¢Ð©QhÕ]üëæ<çÞx¯,ý;ü‹q;í{ÐýþZüäÖ¥èû&ï]ï-°oß^|°åe<óÈ=hºq&æ=ñ+<9’k öuw£Ûó^}:…NˆB—.lÇj÷;ôCfÂZ1ŒÞÄl8\8ôhô Úf\…I 3Ñz@Íx¦q|ë2,é<YHÛÉ }ústm}6߉û¯aÇÁãùÓW8Ì&Tcåøœ üR u&õ;Ìo^ŠŸ=/üçx|îíXÐþeֲ΢¯õNL±}±]Ö›FjóR4?ú¤¥ DÃÜ—æŸ/|þ#´Î¸3Z?â²ÞcûŽÈAs?Ū®!Û@…>âø›¯ Â�Ii¬†mD~u" :…^݆¼Œ[¾}&]öŸðã5ocï¯á2ó=Ѽkq¾7OÑõ®íØüR«ÌFó¢§ð“{~šÛsZôž¬(ì׫щ(têDºta;V»ß¡26Њ‹8»ó Ü‘x‡Ž}†Ý«ïÄå“.Gãò #ú£8ÝŸÄ¢ëEçÙ2Ž¤ÉŒàd¿ì7]ˆææÅhiym\Ö;j쯟„_ ¤Î¤’˜•{¾isÖ^ŠevKW64­“à4yáù¦ör¸-Ù@…Áiù˜aûrÖk¸7·•˶çTdÊl´lïÇiKÙòùľJ,$¥ÃV‚š®T'x¥+Õ ^éjurÒå—§GŠt‚WÚ[׃®ÎH.kãžS]ØŽÕîwè‡Ì„ ´…ôt®º “¥S4©Sf½ŒÃcÙ¸t;_Z]˜ÅiCç ¿†™‘ã8˜| kœN û+Ççá—©3§ö£ëÓ ®:SM^ô—ÃNuwãÓV¿ÇÑšaû²¢ óžÇ¦¢=§¯£mÑíhN¼š}ý&ºë¯qüÍuàe7¾J,$¥ÃV‚…ýz5:…Nˆ¢:Ý$_ï@]÷û-xíw»ÆïQ¢°_ßÛñ 6¶¶ uc7:öf¯íÚŒZ^–öä–õ*ì÷)QèÔ‰(têD•êÂv¬v¿C?d&l mÈŒç§ûÑÛ÷Ee£õéz6®ÁS­›Ð“ºý¼3读â²^ª±¿r|N~):sb6ï9e[Âxgwm¶”ÓóuõPM^ô—ÃN¼» {ÎÙW&|…]¯nG*ÀêG?h†íg².s;žzú}œ(ú}Çp|ãR<ÑÜã·âø›ëÀËn|•XHJ#†í8دW£QèÔ‰(ªÓ½…§î¸ ÷Ì›‡yYQûDæÝwþãÏá½}½øýkàúïÜŒ¥¯í,ÜiûÜžÍX1í_¢ajîlú®_ú¼ûÊCh¼ì2\uç³x··Vyñ§WøÕ‰(*ÕEͱÒ™ h…Ñ0Mw6¡qÆ 8p¼ ‰iWbÒÕ‹Ñ~<ȳ'Í$hû Â/ò7§’hÎ~®|v±\…mTxZM^ª¹×YÖ;×’w‹4ܶ~ y‹‘ïˆÆØ~–L: G­pÏiXxÙ¯ Â�Iiİíƒ5]©NðJWª¼Ò•ëÞBâ–lgì®üÞ¦¦¦œäö‰Ì~/ïìΧ3¦Þ‰Ö¾³¶{ ¯Ç>FëuÍX±eO6ý.:—>ŠDûÞìëíÙ×çB°Þ'x¥+Õ ^éJu‚Wº]Ô+ý™°ÖÉyl½3Ö}–íPa¨sHæ^Ÿé|·ÿ¹ð>¢Úþ‚ðKüÍ©­X¾¬­xi㦰xö#hÛ1ØIµÕäE9d’ÍObÙÚ×/•AV6½øf/nÃŽ΢ùÁ ÛçžÓ¨áe7¾J,$¥Ãv 쯅ru‚WºRà•®\׉W^Þ2>êåõ^Áš¾ô:¿ÀkÞÍ¥Gþÿey=»‡÷>Œd*]tŸà•®T'x¥+Õ ^éJtQs¬ôCfÂZ/™Û±â‰÷0$}©ÑÑ:çeôß6>Œ»]AS¿mAø¥@þæóG1ðgûüè†Úǃ[GröH9dpþ‹/ðg{f3_¢}Érlèòæ¨b†ísÏiÔð²_%„’ÒX [ VQøÕ‰(têDúut°¿~òÌŸ÷–>ùklþ@f>ËüÜÞ·ñìÿ—eËTÊÕ*—M[-=÷Ú®W£QèÔ‰(té¬öè‡Ì$jvd6£H½½ ýؤ†»°îz†*QmAø¥@þæT;Ö$"•JYäst¯™Ë›“HÞ¦›jò¢¿ÒH½ñ2’Ÿ-.‡ÝXÓ| šÜ ÚÃÀ Ûwßszbë“XÍ=§5ÇËn|•XHJc5l{à ¢ð«QèÔ‰(ôê2=´ ·÷/re2.ßþ/xì·;ÆG|ïͳ¯wÓÿ?Zþ³ñ=«¹Ñ³­»Æƒ\×{5êD:u" ]º¨9Vú!3‰š™Í(Ž%Ä ‹~e™Ù†ýCÙ®7±´ýá—ù›]÷œ~w'¿@/ªˆjòRͽÎÈ>C—=§S@r0¸Áùޏa†ígƒÐw~‡CÆWßåá!Xaáe7¾J,$¥ÃV‚š®T'x¥+Õ ^éÊuíxæïÿÍ-o¡ï‹!tåt{1|h –Üù+üvO9Ÿ{ ÛV.ÇŠõź/ãÕmù%M—Þ›Ç+]©NðJWª¼Ò•è¢æXé‡Ì„ ´N²­m?Ç‚µ½…g£*‚ïh™JÐö„_ äoN½…–¶÷ÑÛÛ{IzÞÆê%/¢OgÕäE9dƒÓß­AÛ‡=EåÐóî/±ä¹^ 3Pñ…¶ï1 ÁC°BÁËn|•XHJ#†í8Ø_ åê¯t¥:Á+]±®{=æý_+0Ph8.éΠkå#Htt»ß;þú0’Í“‹SAf´¡4StŸà•®T'x¥+Õ ^éJtR6Q‚~ÈL¢fGf^GËT¤l‚$¿Èßì¸ç4ƒs;Wbzë~|S¸¢›jò¢¿\öœb;—ß‹Ö\âé3l?ë37?†y¿üe¥ÉëX»òN\Óü lç!X5ÇËn|•XHJ#†­% ûõjt" :Euºv<s÷Oðâû–=¦™óèxùpË_?€—ß;~ßÄ{•¼…§~4 ¿Ü°)çœòK{Šÿ~ãDÓü_bËîÞÂ]AçÅŸ^áW'¢¨T5ÇJ?d&l u^GËT‚¶¿ üR ³ÓÌiï‡Ø²òV\>w+NÞ¦›jò¢¿²õÇaæ´·k3V65bîÖc…÷é'Ž~Ð ÛÏ`äèQ|eÈœÝU×Þ†–¾³…+ú‰ão®/»ñUbA )¶[à`¿^ND¡S'¢¨N׋Ýÿ´·\õ]\÷wò™;Ð4UŽÿþ>±{=ïUò!Þ~ë}ÛþÔì|ùà{³¯e\Eñ}—D¡S'¢Ð©QTª‹šc¥26Ð: ¯£e*AÛ_~)¿ÙmÏé”9h;pf¼mÔM5y©æ^gÜV4`ʬ—q ¢Ë›£Š1¶?‹îyÓ®ž‹uýÃ…kú‰ão®/»ñUbA )¶=`°¦+Õ ^éJu‚Wº:]FR½ØÜúSüð–[pÛ¬EØÜw<ÛÔTó¹ïã•y×ãêYëÑ?Âe½ •¦c%: Mm:Z¦´ýÑ? äoN½…ÕöŸR›:ŽÓ#A…”§š¼è/™9ý56|b;­÷ËÓÈv%Ž~ÐÛ‰8þæ:ð²–˜ˆa»ö×B¹:Á+]©NðJW®ëÀ/ŸZs…Æc\w¶+w˜Q¯å½Bñ½•é¯t¥:Á+]©NðJW¢£c%: ‘0©ÆþÊé|—ó¿Rg2cH9PM^‚(‡L:m;µµ6ÄÑcû!Çß\^vÃ3�«a«€Á* ¿:…NˆB¯Îý0£Ë®,w˜‘û½yüêD:u" :….”o˜Ñð‘Ú¶‘ú¦û+Çá§âTgªÉ Ë!ÚÐö½‰ão®/»a‰€Õ°íƒˆÂ¯ND¡S'¢Ð«;ŒÍ+x¢ð|Ò¼ü Ë~tn™ÿK Öã8ߛǯND¡S'¢Ð©QèÒ…íXƒhøHíaM¤û ËÅ©ÎT“–C´ ¢~ð7?^vÃ3�1l((¬éJu‚WºRà•®\· oné´f´™¡,yp :z+ý\wà•®T'x¥+Õ ^éJta;Ö >R{Ø@“0©ÆþÂòAqª3Õä…åPð7?^~•%f�bØ*PP¢°_¯F'¢Ð©QT§{ O?ò ~×ÑŽ¬ä18Š-¿ù)nû‹ÛÆŸsê|o±(üêD:u" :E¥º°kXC¢6Ð$Lª±¿°|PœêL5ya9ÔüÍë–˜ˆaÛkºRà•®T'x¥+×½…DÓ·råQ,W qÁ6ΜðJW¢“2§ñ l;"õM5öÇà´zªÉ Ë¡þào^ß°Ä @ Û-p°¿ÊÕ ^éJu‚WºrÝ[xzþr¼ß“`öúõësÒ{ð†ÓÞ€©T'x¥+Õ ^éJu‚Wº]ØŽ•Ái<`M¤ûcpZ=Õä…åPð7¯oXb`5l0XEáW'¢Ð©QèÕ}ƒ3§Ï;êD:u" :…NˆB—.lÇÊà4°&aRý18­žjòÂr¨?ø›×7,1°¶=pQøÕ‰(têDµÒ‰(têD:u" :….]ØŽ•Ái<`M¤ûcpZ=Õä…åPð7¯oXb †­…5]©NðJWª¼ÒAè¯t¥:Á+]©NðJWª¼Ò•èÂv¬öŽaXERl I˜Tcaùœ8Õ™jòÂr¨?ø›×7¾JŒÂpÃv 쯅ru‚WºRà•B'x¥+Õ ^éJu‚WºRà•®D¶cµûú!3aM¤û ËçÄ©ÎT“–C´ ¢~ð7¯o|•XXºÞÃV‚…ýz5:…Nˆ¢V:…NˆB§ND¡S'¢¨T¶cµûú!3aM¤û ËçÄ©ÎT“–C´ ¢~ð7¯o|•XXºÞÃv ì׫щ(têDµÒ‰(têD:u" :E¥º°«ÝïЙ h&ÕØ_X>Gþæ8I¥8}–É7‚¨Nåf²ø*±°t½#†m¬éJu‚WºRà•B'x¥+Õ ^éJu‚WºRà•®D¶cµûú!3aM¤û+Çç˜ê—>úè#ÖÍ,Éd .,¤ˆLµ}+CCC8räH!•G®566bíÚµ…+¤V085�§¥u‚WºRà•®T'x¥+Õ ^éJt N‰Ø&aÂàÔ™þþ~ÖÍ, N+ÇTÛ·²jÕªœØéèèÈÕ©'D/^vÃàÔ�¬ ‡ ¬¢ð«QèÔ‰(j¥QèÔ‰(têD:u" ]º°;.v¿C?d&ì�“0©ÆþÊñ9¦ú%§yœVŽ©¶oEfH%uBìbÆŒøúë¯ Wˆ¼ìÆ—GŠƒšˆ4J˜&v¿C?d&NvE¡ÔR*¥Ÿcª_bpš‡Áiå˜jû YÎ+uÀ¾¬W!A)—÷êÇËnœ’ª‘&©´Q%î ¯”¿ŒèÕôCD7Ò)}öÙg ©èw?‡ÀÀT¿Äà4ƒÓÊ1½M.§¥öfK}!z𲧤*d$)Ê=î o=v,臈nd€íÃ?,¤¢‡Ì!õÜmdßt¤ì£<ÈY¦ú%§yœVŽém²ì5-gpRÞÇå½ú𲧤*Ä™‹S* NãýÑI©%]QAþF©ïq$~ÌT¿¤Ê¾Þ;Üq ÓÛär'Õò^§ƒ“ˆ¼ì†Á)© iÔd¹CTap?臈N¢¾5A!õœÁit1Ù/ÅÙ¶Ê¥ÛR]˜lûjpRV§”ƒZÞå~¯)xÙ ƒSR1&Ì8ĽÁñëXã�ýщ,ç2a$\ê9ƒÓèb²_гm• ƒÓÊ1ÙöeåŸßs;¤ÍM.ï­/»apJ*Æ„‡w×CðVo ú!¢é˜Dyk‚"Îõ<{jMöKõÖ†8Áà´rL¶}Ùšæ÷0< J¥ÝàòÞê𲧤bL9@ î o½u,臈.TPdBý¡‹6&û¥zkCœüK9ÿ˜nû•†§ì…Ë{+ÇËnœ’Š‘ÀÔ„ç>Ž᭷ŽýÑ… «?ôcÑÆd¿Tomˆ’S|AÔ0ÕöÕo^éò\éÿÊòÞzÚV¥/»apJ*¦ÜÎÂ&î ¯)¿ƒ.臈.¢þ(,+÷ÜsË+…Áix08­Ïótaªí‹?¿Z)jy¯)mHÔ𲑊àr¸è Ž1ÎVB‚”ÕBÜë¹tòäädS1µƒ.ÔÛ�§ Ò+ÃTÛ×áÿÅ^ÄnLö]aáe7 NIE¨ i NÍÆÔ†Dñ ¦ìŠ{=rþÊñA&û©¸ÛV¹08­ m_f=uù.ï­ /»apJ*B²j–CÔ’¸ 38%Ä?j€Í”Ç08 r|É~ŠÁi§•a¢í«ótùéK="åãe7 NIEÈÚ~ß‹¸7¼&ý•`bÃG¢ø¿Ï· §áADˆ;¬—ö,syoùxÙ ƒSR¦<Pˆ{§Nòç;6|$LÔ‰»“ß"ªÏ ¤"„”Bü³¬Ô3ùy͵Ä˯28%Áå/¤V°cH‚€‡Àr‰ŸJáÝͽ8—)$g»ðê¶Ã°_Ž/,¢YÞkÊ–·(Ãà”øÆ´½ZÄlœݨ%Xá&å?tɿɹ:`—†mè­—°Œå@ô¢Ú–8¯r© N‰odM}´÷jÕÁhh:…žkðTë&ô¤.�™3è¯»ÎÆn´—Á)Ñ̘ÊÌi´¡‹ q N7¯Là7Ù´t¢óò[¼¸èÌJ¼ƒ‘¸µ"n°blj]ؼç”Í\ÄÙ]›°-5ZH‹ô‘%@åàgå08%1$phÝ]hh˜Š¦;›Ð8ã8Þ…Ä´+1éêÅh?ž.¼/08%õ ýXTˆŸÆ'' �d†:°äÁ-HÕMLÆrˆ©$š|æ¤IWaFÛAÔ&<ÍŸÀ录Ãà”ĸ†žÇÁÖÛ1cÝgÙFu C«ð@r0÷úLçx¸ýÏ…÷ŧ¤>¡‹ ñóA‡ñÆš­ø,•Bj\Žbà/cîs‘LÅk€Ó–CìH½‰•+×Z|fV6½€E3æ ±ýF o y橬Αï'þapJ\¸€TÏ&´>µ{RHg; Ãý;ðæ®CŽ|Ÿ(þ£¡™Û±â‰÷0$yý­s^FÿØ9üiãø;y8ÿ¦˜`ïƯ£HÁø¥ïôcQ!~>ÇmVþ 4.ØVG3†,‡Øqþ(þlŸÃPûãxpkm·C¨å½<<Ô?¾‚Sv 뇋‡ÖáÖ†+0µév45Þ‰ÖƒèILGäk° ýXÄ;wq Eêí%hl°7¨Yi¸ ëe;â1Âîwè‡Hiâ°ô~,*ÄÏçÆïmx¿§½½9xÃézŠÈX:ˆTýHµcMò ÅgŠÂÚîÅÍI¤ o«²¼WÎhá¢þ`pJ;ØŠëf¬Ã@Ö?g†¶cé›qL^ŸéÄÒ‡Û1Tx_4‰ûhè(Ž%Ä ‹~U¼t%¹ ;û‡·…Hv¿C?DJ‡¥ïôcQ!~>çN|[[걩l –îÇ{oîÆÀðXá=õ�ËA‘ªn{N~€o©ùÄŠZÞ»víÚÂR N‰3™:W<ƒÎ!qÐç²½GÐÖ#z÷Þ]ûÑ'ÔÁhhú(vmû§b’/ì~‡~ˆ”ƒùKßéÇ¢Bì|ÎÅO±îÖ«Ð0µ w6ý�3Z?Âñž§1­¡W/xÇë ]ÉÁrÐB¤êGj­ï Çê3{ÿ€ƒ‡Ï†6àõÑGåd.ï-§Ä‘L¶‚/h¼bâèÓ¤«pëºOq±ð¾h÷ÑÐ1œ>¸=7˰¹ë0F³¿ÆHêèØÜ=ƒÃ_rí»ß¡"¥‰ÃÒwú±¨PŽÏ1Ê/}ŒÖëš±n@öbGçÒG‘<6*#:Ù×£=7(]°´)ÛOŸÀÁΑ;/eÕªU\Þë§Ä‘̱$fß°mEË­6cëŽÆ—ç"î°c?zg;—ã¦åocpä"2§>ÀòÆ«ÐØ¼ g-Ar{NI½ã¾dtÇþc˜ðìÐ(B?Vx_ø”ãsÌòKiœèüžè<ŽLößèÁ_cNÛ'ù ï}¸ŽN©e9è J¶ÕóR$(•å½Ï>ûlá ñ²§Ä… Híz½§lhj3¬Ú³QîÅ~4ôúZ–äó‡3èMÜ„I×<…Þóq¡+9<­——%£i¤’?Ū®¡Ð:)eC?–[(Ççå—2Gðö‚d;ìW4ܺ‡¢½4J,-DÉö£|^ŠZÞ+ÿÛÉ ®dZ ´´mEסS¡-C®^vÃà”83ò ^»÷:G§=iÒ÷ÑÜòúOÛëŽ q •“Hã±öO0ؽ3/¿³å°—ôIô´,Âê¾áÂûâÝïБÒd0ÒÿîuÜš•)³Ñ²½§#½w“~Ì$ŒòK™A$g߆Em¯¯,غ+Âíz�°´)Ûøy)²¼WfP­Ë{3g»±zÆÕÙ¶If|ï@sóm¸~ʘ¿ácÝX9^vÃà”82Öׂï7ÎCë&‹Ãi[„›x=û:¿O(‚ÔÁhhfx?Úf}?›§+1mù;H~…¾Ï!‘xíç ïŠ'ôC¤42+ׄÆyÏc“Õ%_GÛ¢ÛÑœx5ûúMt®Õ#Ù+€~¬ð.30Ë/eNua[ïWÙWõ ËAQ²ý¨Ÿ—"A©ì=• 5ÏúÛnGôh<7n‡™‘¼¹ä¡\`W¼ì†Á)q&}ÛŸjÅ{'l£óÇ7áÇOìC¤”Å~4´pȆ6<»±ÿ¿L¼D²C?DJ#Îíxêé÷q¢¨BŒáøÆ¥x¢ï\!aèÇŒÂ,¿”»›{'î½>Û…W·®£@å ƒ(Ù¾ëy);£³RFNí•€9¿¼W{637|a³·LÑö†LZŽvŠ^vÃà”¸“CzÌV™MØsš­Ôñ ­¯‘ìБr™Ø ´ç”~¬ð>30Ë/¹=Cwf´¡4ž7–ƒ"eû'ÞAbÉ«¶óR²¾f×&lKEgPOž{*Ë{ÅÏô¿Šû—$ñÇT )%‡ö`ý‚{‘Øñy6}ܸ¯qÊ|ùxÙ ƒSâŒÑ{Nã>Z_"Ù¡"¥‰ÃžSú1“0Ë/Ææå+±¶hÛÎoñââû°¸í Œ˜o]åÁrÐA¤l?•D³“ÏŸtf´ŒÌV4µ¼7¿÷þ.—¾¶U.Ç5‰nÄi‘¯—Ý08%޽ç4ö£¡õu ’ú!Ršì9¥+¼Ï ÌòKÃøbà䄎ÌP–<¸©º‰ÉX:ˆ”í§¶bù²¶b¿¿é,žýÚv J_–÷ ™ãÛ°ô±MèîíE¯—ôŸŒÕ ¾^vÃà”8ã¶çôÄ›X¸º/âkßã?Ê‘ Bqßszbë“ÙÀÇ€=§ôc…w™Y~é0ÞX³ŸY—¦Žb ûWh¾|n N‚.–ƒ"eû糿ߟíÓ&cjn芓ôh_ýH´nBOêBÖ1žAÿ{íØ5p6+dÜñ²§Ä™;°qçŸm{N£·nß™: ÄÎWžÍväY§ö[ìèŠýs±ú!RšlúÎï°sè‚m í+ìzu»!>€~Ì$ÌòKn³ò ˜r÷& ÖÍó=Y:ˆ”í§Ú±&yÐ2Ø ò9º×ÌÆåÍá?Jf"…e½ SÑtgg¼€Ç»˜v%&]½íÇãÛ«ó²§ÄCÖí;S£¡£ŸaÓ}ö=ÁßǬ¶ý±~.–@?DJ#ÍµÔ ‹4ÜaÈñüôc&a–_:Œßµ¬Ã‡EË÷àÝÕ+ð\ßéXÏÖÃrÐA¤lßµïú}Üü"ôGÉLDNë½3Ö}–µ·1 u®Â²½!ûúLçx¸ýÏ…÷Å/»apJœI½EóVcÃør²$6­}3¯™ÄöC‘Z·?‘¸†¦q|ë|ü»æ´÷}S#’¡ Òßbë’ÑzÀ„%‹„I68Ýüæýò7–%±¯cíÊ;qMó/°}ÀŒe½ôcæ`VÿÈyVçvbùô58ðM½„e,DÊöSo¡¥í}Ë`CVzÞÆê%/¢o8šÒ2'¶cÅïaHÌmôc´Îyýcçð§gêøpée7¾‚SRGŒ|‰Ã_ÙFæ3CèZ57´ì‹ø‰aq FoâáÂ)—VŠŸ‹EHý’ÁÈÑ£øÊVÙ3gwcÕµ·¡¥ïláJ”¡3‰HuÐKâd[=èÚ² M—?ˆ­'¢}ª„>X:ˆ”í;î9ÍàÜΕ˜Þºß®D‡Q¤Þ^‚Æû dV=>ÆŠ—Ý08%å3¼‰i×bÖºƒŸ9ûh¨Ì8<‰'vϾRÈìwcͬ۰²ëtáZ<ˆTÃG æ"†{žÆ´«çb]¿ 'ÁÒE…r|Y~ÊmV¾>¶†\‚å ƒHÙ¾ÓÌiï‡Ø²òV\>w+NÞFq,ù nXô+Ë*‘mرÿØÄG‰Å/»apJÉœ>ˆ© ›÷àðh™‘£èíØŠö=2Àa×ÁhèÈA¬›u ¦6ÝææfÜÕ4 ²ÜïÞ$#ýìFÿDªá#†0†Ó·çùü#¯$èù:6w`Ïà°!³ŽôcQ¡d–ŸÊÚÖê$>)ÚϜ—§G ©º`9è R¶ï¶çtÊ´8Íß5}»¶}„SEœœ›ðS¬êŠ­-zÙ ƒSâÌÙN,¾iÚÏ!“9˧¡¡±,œƒ"¹©ÜJ}Œ†æ 6·bù¼»Ñ<w)Voþ'b˜ ‘jøˆ!\̺°å¸iùÛ¹ˆÌ©°¼ñ*46/ÄÂYK4a©ýXTˆŸÊ Í Ø´¯oÍ”ÜÒ¶Õ ]°t©ú‘z «7ì/lH¥ŽãtnO{É`¤ÿ5ÜÛx…ƒ¯ÏÊ”ÙhÙÞÓuÖ·cpJë{³r§‡ep¾÷)\3é&$zÏ�º°rNã¶R£¡¹N]û«h•G0´¼Œ7{">œ@¤>bçÐײ¤°Ÿñ z7aÒ5O¡÷üEƒö3ÒE…øù 1 x³¦4`Òäih^ôš¯¹wÝ5?Ýñe¬ìË–CìÈŒ!>‡To;Ö·>Db5Ú¶îÅ`DCÊ·UMhœ÷<6-ë}m‹nGsâÕìë7Ñu8Ú›é*Á˯28%Ž\<ô*æ<ö>ÜÖ™Spùì$ŽeFqªçyܳú£n*·ÿÑÐK¯Ÿ„†©M¸«ù4M½&–ûdâ×1$Á#ÏŽ[ŒÇÚ?Á`÷̼üjÌ–ãùÓ'ÑÓ²«ûLØsJ?bçƒ2ØðÃÉh˜ö8¶ËCÿe–~n zG‘\ø+ôÕË)µ,‡ø‘9ƒms0eR&_ߌE‹îÂ57ß»~ø3ì8ÅÇoeý|j;žzú}œ(2·1œØúd¶­ªÏ§/08%ÎŒWðl§!ç¸Ïátß&´d;H«ÛEü9§q ýƒîFCÃÍX¶å“KË=Œêx—ƒSR —Ÿ+1mù;H~…¾Ïeƒ¼Ð>`ÂsNéÇ¢Bì|Pº‰ÉWž­(‚²ô—hŸ¿0ÏÐ-–CìÈ nÀ >_|J*‰¹‰^ŒÛŒ…QXI§Ð½~5žlÝ„$Éö¿ûßkÇ®³1ðó•Áà”xÆðÉ(¯Õw!ö£¡² ä&L𹇋²ÏGÉ08%“ÆÉ/O›¹Ü~¬Ÿøù !t­¼7¶}R8?"k[³oÃܦcòµ«ëhÆå7Ò½ Lžtç¥GT‚ÓôP;æßÅ-i²Êç.44LEÓMhœñïBbÚ•˜4eþÍ_ÿ¿±víÚÂ{ë§$~Ä~44ƒó}«qÃkpp´ÐxfÎààÆh¾~:%CH Ë_‹�qôA™á±ñ±G‘Øú †3YÛjžŒ†ëbÃÁˆžh,‡˜1¼+ˆ¶þÂÍlp:»é<Ðô=\ÛÅ™Óó8Øz{ÁÏa¨s-(Ù×g:ŸÀŸÞ’ÛöÐßß_x}Àà”xÒØØˆ?ü°2…z ½€ÔŽ_cùªuè’Y•‹_ y÷4L_µ=¿”%F08%•ðõ×_Þ¨ÓE…øú ‹>´üzÃ1k;ʇåÆ0|ðu<¶ølí?ƒLîÑ2Wâúùp0¢‡"eNlÇŠ'ÞØÝèÇhó2úÇÎáOÆÝÉÃXµjf̘‘kÓê_Á);‰õÅÐÐP®swäÈ‘Âs¨›ÑÐôy ›¶ìÚ'v¿C?DÊá£>Êù/“¡‹õàsä„Ð… Rõ‹””)Ÿ¨Õ™Pß?|.u¢#8ýÕ0¢»Îd©·— ±Áá12 waÝ¡ ¹ T&Šêiy/ƒSâŠù;ކƻߡ"å Ì{î¹§2ú±°©ŸÃà4�,D­~<ûì³ý†£8–|7,úU®^’mØÙ?4T«þ¸ü_08%®Ä§s‡ÜÒ>³íÒtttä–~Ä »ß¡"å “¸4Ça6¸Q ’êÁçD±ÜÀåàŸ¨ÕéÉïh 飨µí#œ*1î(Ë{eµ–÷28%®HE¨8PÁi\óh÷;ôC¤â8Ê\~L–äI,J”ãsL÷K Êò°ü%Û7y;Z)Ôò^é›Ç§Ä}’Ù¸8ÀàÔ\ì~‡~ˆ”BÕé¨Ä ú±p(Çç˜î—êaV¾œú'J¶ÅÁ-(ÿ÷å½¾<‘éΗ”ù']ÃN¹Øýý)E\—¸Ó…C9>Çt¿T¶U Ný%Û—Õ~qŸY”í*qXÞëe7¾<Q” èEF›¤qR3 ª¡ŠËÚözhxe‹ä1n³Ev¿C?D¬ˆ½Kc-#ÉÊöã´%ÁJ=ø±(江cº_ªÛ*§þ Ëö¥Ï#¿•ô_U_5N+þܼJ>­A¸´}R&µ{^vÃà”äÎ4LJn½õVüÕ_ýUÎQK£eZÀ#UqZJî½÷Þ¢ü)‘Êl*â˜å÷'%ù”<Ý~ûíEy”ß/NÐ;2Ьì]íõ¯þž~úiãjì~L¨³Öm%&û1ñOV?öàƒæòd÷Ù¢2¦ù%Õ±·Û–ýZÜ;úbWÖ<Kûù¯ÿõ¿.º&>%Ž{u¦í[}Äã?žû¿~«½{÷æòzÿý÷çìS•I‡˜zÙ ƒS’Cí7ñ“ÖñËÈ’µÃê$¦/‹('â´âý±#A“ý‹H½‰{tÊõc&SNE¢î«MôKÖN­“ÈïbrYjÆØKâØŽê$LÛw²a±[™p‰[*¶*m™—¿4é„z/»apJÆq2t«˜6'³ NùPõ‘ørQm§¼)1yFÅ ú!b§T=ÆÜÔŽJ©¼Õƒ3a©š‰~©TÇ¥ñNH>ò¯$Ží¨N´}™ÙvúÍ”Hð— UV•È3ÉV½ì†Á)ÇköÁÔ¥=nËàDL_ò§pýŽë¨7ý±#§: Äô¥í^3\q©ã¦ûjSýR=´‘¥ðêôsÖ´4aÚ¾}Kš]â6À"mW€jRõ²§d·QT ZMÅmÉNœ–Û’ì8̨8A?Dœpk°ã0ëQ~Ì-23b¦ú¥z°­röÒ©âÚŽê$LÛwûÝDâjÃn}uiMÂËnœ’qdÄÅnì2jhúȼӲ¸íEpÊc\G½é‡ˆN+?LÚSŠz¨ãN¿¡){…MöKõÔ~¸!ýû …¸®>ÒM˜¶ï6¸bêj¿rqÚ aÚD’—Ý08%EØ—øÄ!ˆ³ݦŒÄûÁ¾¬1ΣÞôCÄ {cmòŠ'ìu<nùÄW[gÀMZRi²_²wðëmÖTaŸ‘â¬iy„iûNÁiVË”ƒÔSk¾M Ƚì†Á))º~?NÜš/qfqÄê¨âšG~ˆ8a Þd-Ž3õPÇ­ËôLjƒL÷KÖÙÓz›5µÂrðOض¯~/‘z LÖ %ÓÚ/»apJŠP£Pq9•ŽªŒÈÇùp•GqVq†~ˆ¸!öç¥xõRÇÅO›ö;šî—Ô £z5Uĵ$aÛ¾òû&>.¬ZÄGª�Õ4¼ìƼÜÔ9b€q+Nz“Å §÷™,„øÁɆL7œÞk²8áô>“EAwÐþv“¥Rœ>Ëd‰žA†CžM•Jqú,SE'žvSøŸ‚Ǿ}ûŠDa¿^J'¢Ð©Q¸éìF®ò¥°ßSJ'¢Ð©Q”«s«ÀößNa½V­ND¤Î-„¸›ñÊGœê…[^ê!v¼:QŠrÞS õXîN°¢‡—íÇ%´Yýùð´›ÂÿÄÄ8¬AƒˆÂ~½”ND¡S'¢pÓÙ\åKa¿§”ND¡S'¢(WçVí¿Âz­Zˆ"H[ƒÀËs¨¥Í‰W>â’GÁ-/õG;åø  ýT=–»,‡èáeûqÉ#mV><í¦ð?1eÖ ÁúZ(W'x¥+Õ ^iùßnäNùì÷¹é¯t¥:Á+í¤s«ÀrÝþ^·t¥:Á+­Kç–Ç ðr`Äji3A╸äQpËK=äÑN9>(h?UåîË!zxÙ~\òH›ÕŸO»)üO A‡WàP®NðJWª¼Òò¿ÝÈò%ØïsÓ ^éJu‚WÚIçVåºý½néJu‚WZ—Î-AàåÀˆ9ÔÒf‚Ä+qÉ£à–—zÈ£(ø z,w'XÑë~Ä%´Yýùð´›ÂÿÄÄ8œ«(üêD:u" •¶¹Ê—]~u" :…›Î­«ëN÷‰(têD:uny /FÌ¡–6$^ùˆK·¼ÔCíDÁÕc¹;Ár0‹¸ä‘6«?^~5þ5#fˆqHp ° ÕèD:u" •¶¹Ê—]~u" :…›Î­«ëN÷‰(têD:uny ‚(t IõÔÒf‚Ä+qÉ£à–—zÈ£(ø z,w'Xf—<Òfk›ø×Œ˜¡ŒC ö×B¹:Á+]©NðJËÿv#wÊ—`¿ÏM'x¥+Õ ^i'[–ëö÷º¥+Õ ^i]:·<ƒÓxPK› ¯|Ä%‚[^ê!vœê¥š¼°Ì".y¤ÍÖ6ñ¯1C‡WàP®NðJWª¼Òò¿ÝÈò%ØïsÓ ^i7]fø8ÞÙÕã¨Sx¥tnX®Ûßë–®T'LHïz7—ÇÜk÷úѹå1œÆƒZÚLxå#¬<Šûrx¬Òƒ[^Bû3ÃøòËad I”›—zNki[åÀr0‹pò8†á/cX£³0ÑfuSË|Ä¿fÄ 1(ØûõR:…NˆÂMg7r•/…ýžR:E>݃÷_y›{œtJºñÞsóðtï°ƒî’(ÊÕ¹U`ûo§°^ó§+ÎãD½¤óy|hý.×}Þ:·<ƒÓxPK› ¯|èÏãNuwãSÏ>ñ†Ú>îÇtá–—@~ÇSûÑõéH!áLf¨‹ŸîEºÖA¹y‰gp=Û*–ƒYèÏãItw d2_¢}ñ/Ñ«ÑYDËfá–ùˆ͈bÖ ADa¿^J'¢ðÖíÂ;ï䃛‰ºâ{”(Ütv#WùRØï)¥QäÓÝèxê>ühÙÏH$L&s"¯/É?àG×"alpZœG%ÅyÍçq^Œ‚Ó(t‰ji3—¨íºþ<¦‘Ú¼‹^üíx½ž ›^À¢i7û1]¸å%ß1õ/z›œò—“ßâÅE7aJ‚Á©>¢g[åÀr0 ýy<ŒÍ‹—áÅM¿SA6½¸Ó¦$ê<8Öì±_|};…ᣌÃ4X_ åê„}ïoÀË›wRÎ÷ªënÂOZþ·¹S¾û}n:¡8ÜÄYnë1¯éßf¿ó2LžžÀ‹Û÷úøÜⴓέËuû{ÝÒåéòªs�¾‰æïg¿³ßúÁ¼\‹ïÍcMûѹå1ì~‡~ÈLôÛLôFÐõçÑ«ã¼~¼Ž‹ÛyBgØæž—@ê¾kpº ¯%faJö;'M¾ Oìü’Ëzµ=Û*–Côðªúó蜾ös4OiÈ~çÕ˜þÄ8Ûe½æÍûÅ×7EÁA×;bN„Ueé:žÆ¬ýƒ-x³Î0þ Ë~t-¾=o}Ö…ÛÂI'¢Pi»‘«|ÙEáW'K^ÕR¢ëÝxmÅL46\‰i‹“ø§Â~S«(ìו(ÜtnX]wºODQ¾.¿¬W-G¿^Èãw/ûK4ÎJ ¿°O¦øÞ¼(üêÜòv¿C?d&úm&z#èúóè²ä0ýúÖ>8îÇT׉[^©ûŽËzGqªo-îm¼ ÓA²ÿŒÖÀT(7/Qð9õ`[åÀrˆ^õC³ Ò§þ€µ÷^‡††›°8ù‰ÖC!Z6kÞì±_|}St½#Æ!ÁÂ4øÖy§OÌ»ßÎ~ߤoý-xññŽõó”(œt" •¶¹Ê—]~u"Šñk»6ã™9ÿ —Mú·˜µfN¤3EïW¢pÒ‰(ÜtnX]wºODQ•Î’Ç[Y‹í{5}®MÜòv¿C?d&úm&z#赨™áO±uÙÍh˜ôýq?ny©IÝϜš­aZC¦ÌúzN\((ôRn^¢àsêÁ¶Êå=¼êGðyÃð¡­X6íJLšrÖôüy|"E'ѲYófýâ뛢à ëe*H°¿ÊÕ ÎËz÷æF¬ÿþ»Ëï±¶Þ;ás|¤å»‘;åK°ßç¦ÜÓìíhÃBYÊ;ù6¬ê<‚½–÷ºß—Ç+í¤s«ÀrÝþ^·t%ºtjVˤoý-î_óö„™nûk¡R[ƒÀîwè‡ÌD¿ÍDo=Øz‘Í›ªã?D'Lá–—Àë~úv¯ž)Ò¹Zµ©€¡Ü¼”ãs‚öKõ`[åÀrˆ^¶l/ µûùl0v9&Oÿ:SÁ b ѲYófýâ뛂v¾¤4Ê8¼‡ruÂÄôNlyæÇ¹ëoßò(^Ù¾§ ©ös‹ïµ¹S¾û}n:Á9݃áƒpÇÔ¿t´ÓgñÁ‡¦?J¦»^ó¯¿2·ü-ñO;Šõ{wæò˜{=áÞʾÓ-A`÷;ôCf¼Í„?‚\³yËú1UÇ',qÍú±Óçô.;tËK¿cføcl˜ƒKçêœ9}¾8ßURn^Êñ9Aû¥z°­r`9D/Û,™38¸a!®w\v ÔΜÁ9Î"š6«ˆþì±_|}SÐΗ”FŒC ö€Á~½”ND‘KïmÇK §ãÛ“®Âî_3>bm¿GDá¤Q¸éìF®ò¥°ßSJ'¢¸t­ kþ~ð­1¾4Ìú~‘½›ŸÂzcOë•ô¥<º &HWò´^2ÁÚL4FЃÉc6o?ÃôÉ—»,qÍvÄú7û1]¸å%˜<ÊŒÕv¬š~µ{ç*ý Ö­ÿHk§«Ü¼”ãs‚öKõ`[åÀrˆ^¶HÓGйê6Lv]v}ýë~['§õš1{ì„§Ýþ/ ¯"µAŒÃ4ˆ(ì×KéDûvýOÞñ7¸ì²k1+‘Ä.«nßìøà÷Î÷Y®YEᦳ¹Ê—Â~O)ˆ"ŸÞ‹ŽgîÌï™õ”©?J¦ü<òQ2$l³™ ëÏã(R[äO«õ”ë~”L&µ÷åöI9åí’LéQ2å´_Òù·æ‰žm•C5÷:cf9D /ÛמÇÌal½oªåwq‘Éuð(ƒfð´›ÂÿeáõA¤6(ã° Ö×B¹:A^ïíX3>býÈ+ïäöc*]î½…k³%SÞ½2ê6«¨ðJ;éÜ*°\·¿×-]©N(NgÆgN¯÷úѹå±Ð™I 6±ôpêEmguB«û!Μ–CÐ~©l«XÑÃËöÃÉcÌœ6{ì„§Ýþ/ ¯"µA‡WàP®Nèíønÿöe¹Ïõ±668MŸÂ–—WcåÒ‡H<ÖõíX¿mg.?ñØsšMw¿C]oa}ëÓ˜7ï!,]ùzÏæ:r¦ï9µC?d&Úm&‚#è^ºªÉú1UÇ•Su<.{Neëô¡=x{}kþùÖWÑÞ;ˆá\Ç+¼=§å´_ªÛ*–Côð²ýàò˜AúôçèzûU´æž6ÑŠõí½–_+Z³†ÚËÀÀÙc'<í¦ðYx}© bN„U~u"Š¢ë{“X±ò7ã#ÖEº‚(œt" •¶¹Ê—]~u"9•zóoü7ùŠj•†ë0·õCtìuº/ýº…›N>ß uÝé>…_ä11ó{Åù¹ì¯qÛÒÿ]ñÞa…“Nå% è‡Ì$›‰ÃÌiÞ9Öñ‚ âD[·¼¸]¯šôQìHÜé°¼ò 4Î}»ØK¥3/Aû¥`Ê=Z¶UÕÜëŽyå%¼l?˜<^@jÇ/0Óa+@Cã}hÝ}l¼¿ª‹jòQͽ•ÙSRCÄ8$8P؃†Êu{ñÁ–µã#Öó—®Âsë·aW·èò{N•kžx¯÷wŠ(TÚnä*_vQøÕ‰`d?Z§_…˾{ î[–Àš—_Áúõ¯àå5Oc]Ë4M¾7.ÿ-vÛï+`½f…›Î­«ëN÷‰(|évoÈ屡qÖ„<®øÉ¸î[WafÛÈãí'Ü›…_[ký™g3ÙŽeDFÐÉcÁIüÅ$:»zÐÛÛƒ®Î7Æý˜ªã:qËK0¿ã0´ÎDCõh~ü×HvîÎæ±½]زî˜ßt5.Ÿùþ8¢7@Й— ýR=ØV9°¢‡—íëÏc#^Àô†+ÐØ¼/&·£K|EïntnY‡–ùÓ1ùòf´ý±–¢G§í«O»)ü_^Djƒ2$Ø_ åê„\zïÛ.#ÖïÞöã#ÖÖ{?§Ì´üo7r§| öûÜtBqú"v®¹ñÝ{ОýûÞ»÷Ý_aÕMã™w»'èÊM;éìySÈuû{ÝÒåé.âlçÒ\ŸëèÊé„Kú¬s:þ>î¿öÿÉå±X—Çšö£sËc- 2“`l&Z#è^ºÊÈ×ñ+Íù±‰äë¸ø±­ÇõæÔ-/úó˜ål']q=·vþ½Ò)ìXu'îÛz4›c}èÌKÐ~©l«XÑÃËöõçñ$:]ƒÆÅo»Ìf_Àñ?ÃM÷mÅñˆfÁüÎfÍ;ái7…ÿËÂëƒHmPÆá8”«öíÛ…ß.½q|Ä:±æ%¬_¿>7bý‹ãŽë®±¶Þ;ñsÊOËÿv#wÊ—`¿ÏM'§ÏᵟüŸø¿žÜ’ëÌ8¿·Ç·>‚;Ÿ{ÇAW^ÚIçVåºý½néòtçÐ×ò_syìuyo¶W‡wŸ¹;—G¡Xçö¹y¼tny¬ôCf¢ßf¢7‚®?ù:þà AY:çÇ´ÿ¹Öƒ[^‚¨ûc}-˜úà ôèLfŽoÅý Ú1THë@g^‚öKõ`[åÀrˆ^¶¯=c}h™z6 ~S¸à@æ(¶Þ¿íCúöGËfÍ›=vÂÓn ÿ—…×‘Ú Æ¡{À`¿^J'¢F¬g=÷Vî”Þ"Ná×÷ߌ۟iŸ¨Ëb½f…›Înä*_ û=¥t"Š|zÖÏk*ù•îõ?ÁÜäaGE¹:· lÿíÖkþtÅyœ¨Ï§%·%ÞrÔYEQŽÎ-µ€~ÈLôÛLôFÐõçq½‰æ’°H÷¶Œû1]¸å%ˆºŸîM`j©ÇĤ{‘˜›DªÔμí—êÁ¶Êå=¼l_{ÅL-uÐü¦ËLé›;Œ–Íš7{ì„§Ýþ/ ¯"µAŒÃ4ˆ(ì×KéDÔˆõ¶Þ‰:žwŸÁÿ}çsxßIg¹f…›Înä*_ û=¥t"Š|ºï?wf¯étÐ)ÙƒmO6cùÎüX|±î’(ÊÕ¹U`ûo§°^ó§+ÎãD½¤óyüñ‹ï;èŠEQŽÎ-µ€~ÈL´ÛLGÐõ׋1 µ¯À’Γ…´ß`pÃÂq?¦ ·¼R÷‡ÚñÐ’Nœ-$È n@óò8WHë@g^‚öKõ`[åÀrˆ^¶¯?FûC«Ðyöb!í@f�šŸÀN.#e³Î;ái7…ÿËÂëƒHmPÆa ¬¯…ruB÷úyøÎ¼õã#ÖVýøëˆu‡“®€Ÿ´üo7r§| öûÜt„ôï_Å¢»L/Iä�¨÷_{ ³¾÷Öì4øQ2ç÷åò¸m¯Ó{Gqª¯ ·ü›»sy,Ö屦ýèÜòHˆÚm&‚#èÔ‹l_½tSÎM$_ÇÅyvÖ*À-/ÁÔý³è[ý$6:9“AúÔ>´Íº‹<ÿèÌKÐý£z°­r`9D/Û×ŸÇ Î÷ýK7~î¼Ò"ýúÚæà{‹¼»ü)›5pöØ O»)üO AŒÃ)€°Š¢,ÝûÏá®Ùk°ÓMŸ•ÞmO¢éÇ/ŽX[uJN:…JÛ\åË. ¿:‘\§&õ>þañš\ð6®Ûû&¶?õfÏ[†yóþÏmù½í¾<ÖkVQ¸éÜ*°ºîtŸˆ¢”noç6¼½+P‹H_xnû„<®Yp¦ÿp~žxíç/é,¢ð«sË#!nè·™è S/ò~Lêøà¨%£÷cªŽëÄ-/Úò˜íD~qd8›»é#xï…6l/ PG0¸}5æÏž‡e?O`uû¡l¨ ¿—WGKõ`[åÀrˆžAF y¼€Ô{/á¹í²øƒ FßÅSóçbÞ²'‘XÝëoY%ѲYófð´›ÂÿÄÄ8$8P؃ÿºxmÑøÇm]Žúî÷_Åò[þ~´¦³ ñÿ" •¶¹Ê—]å꬛b_w7º-ï)ÒÙ®—Ò‰(ÜtnX]wºODá­ëFGbNÑ>S!“NOÈ£U/èÔ¹å1¼1ý6½t=yÌv”OâÈpñr,©ãúh•Æ-/Ú~ÇTsíûL3cHéëL•¢Ü¼”ヂöSõ`[åÀrˆ^¶¯'pò‹c.r Ùß0]»_+|›µbÞ챞vSøŸ‚2$Ø_ åê„\zïÛã#Ö—ô#ضf!î˜þÃñku`Òø}…ׂŸ´üo7r§| öûÜt‚ ÜÔÁVýÄ÷úù\÷ºU`¹n¯[Ú]—NîïÍcMëÒ¹å1¼1‡`l&Z#èzò˜ÎÆmËJÐ4nyÑö;:§5¦Ü¼”ヂöSõ`[åÀrˆ^¶¯'‡‘œÛRbk°„o³vÌš=vÂÓn ÿCPÆá8”Ôíí_N5®/ŒX[ßo}-”«¼Òò¿ÝÈò%ØïsÓ Nóx¥uéÜò^Œ˜ƒ›‰öºž<28­åæ% >¨l«XÑë~èÉ#ƒSÓgð´›ÂÿÄÄ8T `ì×]u Ü6o}n¨¢H_…_ˆÂMg7r•/…ýžR:ÕàØ­’×å±_/¥Q”«s«ÀößNa½VZ×=Þ¨NÔåE¤Î-AàåÀˆ9è±™hwRôä‘Ái­(7/QðAõ`[åÀr0 =ydpjz8áåWã_3b†‡5hQد»êœ–­Q”«s«ÀößNa½VZÇà”˜‰›apZ+Üò¢­î38õE=ØV9°ÌBOœÆ18õ"þ5#f(ã° Ö×BI]68UG}!]©NðJËÿv#wÊ—`¿ÏM'pYo¯´.[ƒ€Ái<Ðc3 Nk…[^´Õ}§¾¨Û*–ƒYèÉ#ƒS§$Ò(ãð J꜖­¼ÒN:· ,×íïuK»ëœ3Ñc3 Nk…[^´Õ}§¾¨Û*–ƒYèÉ#ƒS§$Òˆq8VQ¸ê²µ¬×QŸÅ~½ˆB¥íF®òeEyºâǬ(.é/‰Â¯NDá¦s«ÀêºÓ}" o]/voù 6tîuÐM¼OD¡Sç–Ç `pôØ ƒÓZá–muä ìÙ"w0_X”›§z©&/,³Ð“G§ NI¤ãà@aÊÒÅ68µnÝ8}p;’É$þ×Ëoaï¾ìîø žÿ_Ïãåm»Æ;DÖÏS¢pÒ‰(ÜtnX]wºODQ¾®»²ù;Rxó¥ë»°ùµ­Ø]H+.é/‰Â¯Î-AÀà4è±™zN3øöŸ”LŽû±Í]‡1Š‹Iý›;°g0âzP¸å%º?ü9¹PH(28ÿéÇøl$¸\–›—ø§Ñ¶­r`9˜…ž<žÃÀž8)?Ff;6g¯7Ñux$›>Tï;ØÜÞAÛsku¾Í28u…ÄðQÆ¡‚ûk¡¤.¶Ëz­é‹Ø¹æÇ¸öÇÏbpä"ö½ÿ+üø»ÿÍ ±pÖ$¶í¯÷çx§tnX®Ûßë–.O—FjóR4Ýó�æÍ›‡D"‘“yó~ŒÛþãÝhÊ:êóaéõë—þçmŸ#XÓ~tny »ß¡2=6SÁ©•‹8Û¹7-;çÇ2§>ÀòÆ«ÆýXrÐÐéÃ-/ÔýÔï0¿y)~^ðayù9Ÿ{;´™ ΢¯õNL±}çõ… åæ% >§l«Xf¡?'ѹø.,oÿ#™1œÚù8®Eó#aÖI ëu¾Í28u¥:…RøQÁ+p(©Û½u|9Õ¾}]èx%Ö§Ö`cO*7økó¯ñæ®CØåto!m}-øIËÿ* §| öûÜtBqú^ûÉl¬Ø²'ûú ÖÏ»“þjzÏ_Ä…®þKâ­ñ÷zŽwÚIgÏ›B®Ûßë–.O'K“îÇw®» MMMhnnΉ¼njú¿ÑÒ5Äà´Žß$êR=–ô¬K§º±±µ­»‘JgîÇ{oîÆ@H#èzòhåúZ–`Ý€tÏ 7q&]óÔ¸›“<œ[�¸åE³¤’˜5µ w|˜Uf·teCS§õ`[åÀrˆ^õC{ÇúÐ2k=Ä œïFâš+qM¢;Û¿9ƒ®• ™ &z ßf£ÝöéÆ×7EÁAMÔ…ü}*P° öë¥t"­Ã­ WdœÿŒë¾{3–þv^™÷\6鯰 ýX!€xŸÂI'¢pÓÙËYåKa¿§”ND‘OwaËŠYøñsIl{å̼üjÌN¢·»¯üäGXøÚ¥ÇÍ(TÚ.Šrun6dÿíÖkþt=xÿ•W°¹ÇM_|]§Î-A`÷;õà‡*¡–¿I%hÿû.~Šu·^…†lPsgÓ0£õ#ïyÓpõ‚·q\_ S„W>ôÿphÝb<Öþ »×Œû±Lú$zZau_p{æÜòˆÚ®OG ‰ÚQn^¢àsêÁ¶Êå=¼ê‡ö<ŠßŸóÚ?ÿÝ­wáòËïCòØ7HŸÚƒ–{ZÑ÷M0Ž?R6Á¶O7¾¾) :h¢î,äï³ " ûõR:‘±ƒ­¸nÆ:léͦß_ƒ»g>…vy½c –>ÜŽ!—{N:…›Î^Î*_ û=¥t"Šñk»6à±[þmö³ÿÓ–¿ƒÔèWxícÞÂS[~ï~ŸMåêÜlÈþÛ)¬×|ëövà•| –&ðJGWöÚô¿×Ž]g‹îQ¢¨Vç–Ç °ûzðC•PËߤ´ÿ}c£õºæüŒGæ8:—>ší¤Œf_ŸÈ¾~<¿¬=�¼òÄoÞ¶YßÏ~ö•ã~¬oãsøùòÿ…͇d=D0¸å%;»€TϦñ<iŒa¸GnÏp@-¡Ü¼DÁçÔƒm•Ë!zxÕýyÌú†/cÖ”Lj¸Ë·Áèé>llùG,â ­ƒà4‚mŸn|}StÐDÝY¨¿Ï4X_ åê„}½XsßOЙ3æsx}éÝX¾ù÷ùÓëøû t¸Ü;ás|¤å{9;åK°ßç¦ÓÝ»pòËÓè×ÉRØŸâþ—߯ã}e¦tn6$×íïuK—§“ß»pÙeßÁu7_‡Æ/àÀñ.ÌküKLºjÚç—·8ß›§R[ƒÀîwêÁUB-“JÐÿ÷¥q¢óx¢ó82Ù£9mŸ`lä3l¼÷áP–wö¤‡s~ìÒÙ@y?¶ªk(·º%ÜòDÕ ž©M·£©ñN´DOb:&]3¾‚'ÊÍK9>'h¿T¶U,‡èáeûÁä1“ý¹¾Â—§G,¿Ía$ü]g£˜é/ƒèµ}ºñõMA;ß(ug!ŸS�aE9ºÞŽÕ¸ó»‘ûÜbù—˜¶b3z<ÂI'¢Più+’¶¾_‰Â¯NNîé ÷6^aÉ“E¦ÌFËö~|Ð=ñ^…ýº…›N>ß uÝé>Eùºßãõ¥ÿ3Ö}–uOcxÍý˜™øÿ³÷ÿÁQÔÙþ?οV¥n•U÷]ïòÖÝ-«øú½®¾ïîÝ7Eyq) ¾{õ«›·à¾]/%z#pEte/ òË+èAwV ‹&®ä+D~.Ì"D D~H†�AH€É†€ƒ™0ÏïëÌôkÒÓéîLOºgº{ÎN¥_}º{º_}æ¼Î™~õ뵡#õØW<ÿ±b—ɾq‘XÕ]£hýN.ø¡tÈä=IÛÏ/z;g=$˜ßï¼'JÑ’…1ÌtéMÉuEìŸéøz­ ²½Gí¬Äüé[p‘–¯U%zð8Aª×’ŠÏqÚ/Ù_ïî³­Tʾúx³Ü„™íÛÝh^?#ótîÕ°<ÜS°•Í"}³—¡\ÇPöÕÅ…mŸÝXú$§¯Èd姃<?™$h—‰TuD¨<€q<‡’`06”z|”Ä¥(Ûߟ¸IÔûjc¥Lµõ¬w]„v?#‘\¦‘Fã¾§çasâºâ7¡dÎSÈŸ±D” cC‘›Ǽ¬§3²!Z¯ÝÖ¨œª.z¹/Mÿ{¨ÜûЦ®Â–úøâ÷ÿ)Ê@FûéêŒ®Ñ ´~'üP:dòž¤ƒíçmCpò“˜S²)æ»RVæ®^e#û1»ûï Ö’‘3>Œù±þëŒû±‚ÀZ±¬L©`3F×âˆEèZ´,у§©èu”4ߌõàyqJáøV¶“굤âsœöK¹`[©Àõà>Ìlßök¤‘~>3Š6ªîÉŸ1ç‘)lË[¡Ýæî½®²Y¶}é`j7Êß”0;_p»³çg–8¤ª#ŽT®ÀoŸY„ÐÕxWˆ¸¾׫7cyÍšæqMÊôW[Ïz×Eh÷3ÒÉå(WcÖ+ã²ðQýº>\.{³×Hl›¼Ÿµ²žÎȆh½v[£rjº^„wÎÃ}w üõlØ¿Bi >˜Îqã˜éè3²E.ø¡tÈæ=IûÏï"¶/^ˆÕ¡oÅ·]ÅõZ¬ÝÞž¼ÎFÌ®Ãþk¤Q+±ôý=1?ÖOÜ-o¼¡”íÇèZœ°³hx;fé>¹ºO”žCbŸaNû%;Ï5Žûl+¸܇™íÛ·®üïÖøø‹(›ý1éÕë2›u_Û—¦v£üM ³ù·; :?™(híúÁt$4„8&7YþãKšDú“æqŒtôj¨,u„vŸÁt$’x¹•½•_B]’® %‹‹QAƒ>éî7P$©ê´×&‘×(E¢^gMwå xà¹7O†ãO‡·csgìº÷šÎè3A.ø¡tÈæ=IûϯÁ‚á±ãj%o| š³00†™.=D€¼ësìï¼%–Ô|‹êµ•;…Œ®ÅþkéÁÅ &?<'у'.[b=xœèN)±óZœöK¹`[©Àõà>Ìlßþk cׯtF4Y¨‹3ûëÀ}m_:˜Úò7%Ìäì®|»¡óS' $íúÁt$oÅœËñ®*¹ ,z üt•- Ž,ºû)èéH$F:m=Ëë’h÷LG"‰—ëPx2vÜrÇ£XøW?ŒÖ+ðÂxfÑšX·Þ~}¼QU'àýº8ÚõVuFט rÁ¥C6ïI*Ø~íØ2g.>Ú°¹?¡Ùü)Ox]híÙÄVÌ®Ãþk¤AY¦ÅŽ;@ò&ƺ¾:}†Fë‡Äår,žµ:у'ÎíXžíaotSsÚ/Ù_ïî³­Tʾúx³Ü„™íÛÞK̆²¯>îkûÒÁÔn”¿)av ¿`¿Ù‹<?uÒ ^&RÕGjvaGÕa¥$õ_¢vÉ8<ðÚZ4ØwÀq,”鯶žõ®‹Ðîg¤#’ËT,}OÏ'öÅ'ÞÀêÅÏ`TÁ(Þæ‡n½&ªHÀe£ª¿oœtuôÙ"üP:d󞤂ýçwÚµ#iöázíðàÃËÑxÓ'Éé–71ã£uýAHpSÂU¶ú£[¯qž»=xœÀÎkqÚ/Ùy®qÜg[©Àõà>Ìlßþkô^bf¸¯íKS»Qþ¦„Ùü‚Û…<?³Ä!U¡[®^ÀØñø¢Í¨1ØVw¿ËôW[Ïz×Eh÷3ÒÉå(jvîDU(yßèõ,yðI¼¶~bÛäý¬•õtF6DëµÛ•SÓÅUJÀãÝyãê¢ß>†Ÿæ¿šhTõ÷“®Îè3A.ø¡tÈæ=I…ÌœßUÔÆãÞIkÐì‹'§Qô\¸€o5—"ýXaãueý]‹#÷QéÁ³!‘±yõÛ˜0jr¢Øy-Nû¥\°­Tàzpf¶oÿ5z/1ËÌ}ÎnÛ—¦v£üM ³ù·; :?½B-’”t•Ÿà÷%Uýmì/ $DJÖYÿL‰,këY^—V$Vu$’þuõ¨þ쌼ûI”6wktý"ÑÓ‘HŒtF6$×ëíG"I]Š%à²QM¬ßÿ)^þÙ/“p¢¿~‘XÕ]c&È?”Ù¼'©`ÿùÑ»G‡p]Ûûj@$=n£»þ}Œ½wZÂ9ѵ8r=hÿV3ùC´3ÖƒçáÂ#pªc¥×â´_ÊÛJ®÷afû™¹Fw'fö×ûÚ¾t0µåoJ˜È/¸ÝYÐùQr Ñ& –uä‹cÒq“å0fáf6Û7E‰D–é3ÔPY½½‰U%¢Ý§Náüm­¾[Ö—%~‰OÖÅE¢§#‘é´×&‘ëõö#‘¤®‹úT­L:_G ø„Øgýg°:¶N’¼o\$VuFט rÁ¥C6ïI*Ø~¹0 ’’?–L7Î4žuì‰"at-ö_£àò>l¬ÖŒ<Ù]ƒWÄg ûïF~r*ÈÛJ®÷afûö_ã5œj ‹»¦áf+¿Î•Tx@¤$Ìäì®|»‘ç'“í2‘ªŽ8Rñ>ž{zN¢;•‰ºSÍ,Þæán½ôÎéä??=vM3f̈I ð&¦=2+¾¬Ã‘ƒëP4~4ÆÌ_gøn-aVÖÓÙ­×nkTNMÇïœ2ýd󞤂ýç—#"m™‚7Þûæ„ÄýX9Í zóhÌ/:jëF£kqÄÎøÓA±ó\ã¸Ï¶RëÁ}˜Ù¾ý×(üþÌixã=õ½òö4<2«Ñ(n6cüˆgPdc—lwÙ,ˆ”„Ùü‚Û…<?³Ä!Uáë‘ÿŽŸŒ~ÈÏÏ -¼Œ×V}éä”ß9e²yORÁþóË‘‘‚/cDþDÅw©åeÖvú$9åwN#l+¸܇™íÛíNƒügµ÷JÈ䨽ޗÉ)ˆ”s¸ÝYÐùÉDA›0hצ#‰Mh\¿óg½ŽßVñn¡“bŸóËÕM± @¿8z:‰‘N[Ïòº$Ú}Ó‘Hâåzìùì3l©×Ó%‹DOG"IUgdCÚ{'Q¯³¦‹¿sJƒ>©õÚAŸÔ"Ñ®·ª3ºF&{¸ýžØ~4y~6¢hc‘(¢Ý5˜#>gØ/Wùd@¤>\­«Ãõ +ÂèZ±3~çtPrÁ¶RëÁ}˜&¶_ãÔÕ¶Š»–YÜe³îkûÒÁÔn”¿Œ‚ÛŸ:i ‘hצ#¹ÝRŠ'òîÂOFÿFß÷æÿe;>›ñîöSÌ*¿ûeFo?‰žŽDb¤ÓÖ³¼.‰vŸÁt$’x™ÞÇ,Īõ]J'Í*‘e­HRÕÙöÞIÔ놪‹½k« ä°è¯ñwNÕ"Ñ®·ª3ºF&{¸ýžØ~~·Ï ô‰»‘7"Ïä?{ªq‰l?/÷ÎÚ‰KδϦ×aÿ=èÃåÝÛqè†ö «ø\Æa‡®‘0º–ŒÙY÷¡Ø¨ñ“Jã?’:Aª×bDIRÙf(ä‚m¥׃û0³}û¯1ŒÝ[B¸¡½/. Èö:paÛ—¦v£üeÜî,äù©“õ2‘ªŽ¨ß4ÿ2fZ…1G;+1eÂR”‹Ä-z­ Sþcöì«=Ž•2ýÕÖ³ÞuÚýŒtDr™ºõ>;î�É›ˆ…=˜ØÖü8æe=}†´^»­Q9e]$ŒÏ~ÿ:fÍ >|KÜÄkØòñ ”lÛŸpÒ†û ÒÕ]£˜90¦ŸLÞ“t°ýüú¾BÑè”¶’Ý_BÕü7¼Ø+–/‹å·ãïŠ9€ÙuبˡÁ{åÂÉ÷Ê€>C£õC#Þƒ§hi16Ö‡ÅU÷¡»y¾¨nA·SѦ ÕkIÅ9í§ì¯w÷ÙV* e_}¼YnÂÌöí¿Fï 4”}uqaÛ—¦v£üe<‡^¡IJºPŠ_z Å{êDù�šŠ^9ãš/þ€ßŒ Âlßu$YÖ¹¼.­H¬êèÉixK�‹×mN~i~Á$Œy|àû˜j‘èéH$F:£/°\¯·‰$u]-¶-úòòF ÿ™|Ü7æ¿ñ—Ý«0cäÿİ»'aÅîøT@’ä}ã"±ª3ºF'0s`Œw°ßf"¸\õÞ©º„¨ø×Ûô ¦–œB_Ïרøâ«†5ÝDmÂì:œ¸FéÇ_Ðû˜+çbü¤~Ì Œ®Å‰ï¾ìÁ3"ÿ)ä|E'ÚP‡¼a£=xœ ÕkIÅ9í§rÁ¶RëÁ}˜Ù¾ýרŽ-‹X§ºWÁà_°rÎDLré`@NجÛÚ¾t0µå/ãÈ8(9h“«ºPÅr<sßßÇŽ›,ÿ€±‹¶ Þd_µHôt$Y¦ÏPCeõöR$Vuô>æÍ³gñ7á§’×ïŠÉ/ ,ÿ1Y‰žŽDb¤Ó^›D®×ÛD’ºî 6Íÿ7Œ/ýZ¸§>ì)~Û:R}ÅÓñ+v™ì‰UÑ5:™c4DÎ`ó–Â܇í6=³ ŒÖw CÞ¥h0×€=˜]‡™.=¢ ?–D´åó&ü˜]‹ý×ô5aôøÒDžùÓ·à"-_«ÂüWËÑ©lg7©^‹|P.ØV*p=¸³ï‡ýר³­WÄ]K&ÚYy¿ÛæX7lWÙ¬ Û¾t0µå/£ÆžL´ËDª:"TÀ¸žC‰ò Tü ãR”íoÆÞºôkV¦¿Z#×».B»Ÿ‘ŽH.GPñþ[|^Žp8ŒŠŠŠ˜„[¡dÚhäv$¶5?ŽyYOgô¦õÚmʩꢗ+ñÒôãݯ{¿BÑÔUØR�_üþ?0%ØÛÆh_"]Ñ5:™cˆ("]ß &¸3óïÅð@HX¿û°Ýf¢mN~sJ6©~ARVæ®ì”ö/"o]…à×b~,!Š+P¾ãN`t-Ž|÷£aT-Z†ªXw´‰<=ç6áÅ)A„ã[ÙNª×â” ¶• \ÞÂþklÇÖâ2|­¾Wá hmX…iwMsåSCÛëÀ…m_:˜ùUÿ3RÆ[žY⪎ ®¡%!t5žŠ÷루«Ó&d可eú«5r½ë"´ûéˆä²ñ;§y#çáOý]^Íc^ÖÓÑgèAëµÛ•SÓõ"¼sî»cà5»ãW(m¹¥Ù>ÕãÆ1ÓÑgd 7†®$zác»°úíI™'îyÞH<õêt,Ï‘ä”|v¸ÛCßü=Bo-:ƒÙuØ"p6xŽüØNŸ<9†·cÖÈ»’®/.wã‰Ò3'Ü·‰T¯Å >(ÕsM÷ÙV* e_}¼Y^Áþk4zçô.Œœµ=7žœº°í³ÿ3ÞL´ ƒv½¡îðNÏ|“Þ &FALÒ©GÍöB,,>«ƒd]\$z:‰‘Nkäòº$Ú}Ó‘Hâå:T¼?óÿ\Š5kÖ  ÅdÍšÍØQOLõ÷(’TuF_`í½“¨×YÓFy`xî¤÷jƒÁíØß|µÊ“oý}‡¦3ºF'àät ·Ûw`~þ½â>äaøØ—X¿MWzDCõ®uÝÐ`¹{læÂUËðÒÜ¿—íiÅ KrÈ›]‡ýß 8¾E{'|X\šÐÞíl et-N|÷£ƒ˜üðœDž¸lAÙþÓ¸Òã\¦T¯Å·É©Ël+¸¼…ýרŽÏ%ØS¯¾WBšÎ£;â\Ë—}›uwÛg7þÿf˜àÕ�O4H´ë u{Và鿆¿{zEâ]ž¸N$¥k˜1>ö4N>=NÚW‰žŽDb¤Ó¹¼.‰vŸÁt$1¢×ð—Å/à™ÙÆöÊíØ¼é‹X÷äØM X³¹5zû ÔëÔ"IUgôÖÞ;‰z]*ºH¸ —â]š*æðN”®‹uë•zDo í‹ðúL%ÃÉ©‘«h©Ý†â7¦`ÂK¬ßwJñô|)ŠHĹ`~(Øc3CùŒŸaد‘0Ús¡`�“è Üð€·“SáÇN¬y³–ïAÛå645E^Š 5…áи Œ®Å¶kŒœGUàÌÝp =xUïNôà‰s=m_$~$u‚T¯ÅWÉ©‹m+¸¼…]×í>†5óæaù¾\n?¦Ö«1¿í £)Ô€¦°³1{ömÖÝmŸÝøÿ›a†‡<uÒ ^&×U£¹tþWÁ§øË^zŠXžpÁÀ‘”ÞýŠ6|Œ© סnÀ¾ƒ&aV¦¿Z#×».B»Ÿ‘Ž åúm‹ðÄã±`ef<÷~2ìbìµxï¥Ñ¸C|ưa?å]¨8lí¸Fe=јÖk·5*ëú°gÅàï†ý¿1£üoÉ:jTCAÌxügâZG êNÖk–‰tuF×蜜š!ø+ͱ×fLÁœÂ¥x£¤Á±`~(Øc3Qô4¯Á¤ÿõ<J¾êT‚uÃ<sŠÖ dÁ*O'§±Ñk?˜ó FÄüÖZl~;_#îÇhòu§0ºÛ¾ûå˜qç0Ü9C;à‘°i¥=¢ÞLN¾b“êµø)9u³m¥׃·°ço¡¥ôYÜ™ÿV¿‡9ώ°¼Ç°póZ¼=öG±Ïˆ•+ÏgÝWèaO¸»í³ÿ3RÂ{žYâšî.7nÇëS'`„GE‡áùs±°ø¯ñ'â‹à½wNëP¹lîz± —¢·°mÑcöÈœª_†ÿÏÄEøô¯Û·àèš%˜µjobßÁk\ÖÓ}i½v[£²©®f3=>%±_ziÔÞŠ5&=(Õ{1ú¹yxwá ”ø49uC èJ¢=¸Ò´ |Ò4ì³™("—ñEñB¼ø»—ñ¬l˜KªƒAxûÓ>\.û]µ–>ƒaÖÆüØÿ¹5Ím ?¶´¶KÙÇ~Œ®Å¾ûØø‘ô«Ø}S'¥Ô͉ýHºÀÁ¶8ÕkqƒÏÉÛJ®oaÏ5^DÙ´‡ðbÙD£_£tüÿ„õGPx3K«ÑÜNXÕaÍüQ{Ó™²o³„{Û>»±ôI9z ÀÓK Ô"IMG]y7àÃEÓ1qât¬®8†pÏm±>”HN÷MMG"‘e­‘ËëÒŠ$5]]l¤œ±uGª ŒÁ°‚ v¬Y€«ö%¶ m{ojF²U‹DOG"1Ò}åz½ýH$)éïÆúÂÿÆÔßLÀïž•IéBoÙ{ÚMuQg0Ú²Z$VuF×èZ¿“~hPn!\¿EK‹±±>,|Uº›÷á‹êoÐåën½ÉP—®c«±xæ«X¼zŽ)]»¼œFb´ÄŸv'üX{èj¯)ÛˆklÝðcN`t-öÞÇø¤Å ~‡ßýnbâGÒ’ªæxK Æ´çT¯Å >'l+¸¼…=×Hƒ åÇ{ƒEB Ž‚`BËŠQ{K&£ô#ù1Z¯ÀmmŸÝXú$ÿ…Þ ð(9h“†¡èŽÔîFÓ¾õÌœŽI¯ÍÂóJ·^©—$í“‚ŽD"ËZ#—×¥IªºCkfâg¿]…Z%9ýÑ‚ý8°§/Œ{ Þ °èUL|è7F²U‹DOG"1Ò}åz½ýH$Ötãz-×õÛÿnïÔrrêgb]Òòîˆü§?òhC}`ò†Â¬ò‹±FÊm8j3±÷b}àU¼8w) ßðr·Þ(n…xpq­h¡â3ù±UxsòB¬Ü°›E6sÜ‹ ?æF×âÌ}¤§¦ÇP±úÌœùNâGRª NNãä‚m¥׃û0û~Øs×Å=*Àbúá –œŽÂ‚ý—ÑYõ.&/ø‚›PZ8 ã&®q城Þg—´}vcé“Üà íÄËžL´ËDª:B¿|]ÍAL}}­çÞ9=rx3Jž_ŽÐÍo±rêÏðO¯­GŸh~*>]€§Gþy#ÂC#X£JÜt“bYOgô¦õÚmÊÖuõè¹r ûÖ0ñ7SðÚkÓ¹[¯ék*Âèñ¥hN*ÚY‰ùÓ·à"-_«ÂüWµïð¹ƒÌØŒHfºš\àñÑz{›~lÿ‚ñóÂÆ˜ ×|‚cïIø1§®‘0º§ïc´çRâGÒ¹¿b“굸Áçä‚m¥׃û0û~ØsQô6¯Âó:ܼ± ~ô( oˆDõ"jŠgbìðaĘ1"ö$Ü\a³¦d·í³KŸäm'^ð̇Tu„qÙ»óœFÂ_¢pfzdŠ+j“tÀeìÿp ¶Ô[?®D]ÖÓ}i½v[£rº:âHÝü50 Åœœú—hU‹–¡*6jß 4½Ž’æ›è9· /N "ßÊUdÒf¼Ý­—†âÇÆMxUaíÓ›¸kv°ƒÑµdî>öÆ~$uò›T¯Å >'l+¸܇Ù÷þk¼…pÕ Ì,ø¿˜°¤rà@UW«ñáÆæ¬øýÁÈä}æn½~À£žL´ ƒvý`:‰:‰‘Nkäòº$Ú}Ó‘HìÔ‘HRÕ}µ÷N¢^7TIŒh_¢[ï�@»ÞªÎè@ëw|ç‡Ò ÞŽY4‚¸Ér7ž(=‡z6 ‰LÚŒ“˜]‡_®‘0º–Ì^£H <Ò­×i¿” ¶• \îÃÌöýrl³™½KŸä´óÍ4^ ðÔI‰D»~0‰ÄN‰ÄHGסF^—D»Ï`:‰:Iª:íµI´÷N¢^7T‰ÄIÑ5:ÖïøÍ¥Côb“žƒ’`Á„lAÙ~9ŒûȤÍ8‰Ùuøå £kÉ…kÔ’ŠÏqÚ/åb½ëÁõà>Ìlß/×È6›Ùë°ôIN;ßLãå�O4¨—‰Tu„Y9]aV¦¿Z#×».B»Ÿ‘Ž0+§«#ÌÊz:£/0­×nkTNWG˜•íÒ]£hýŽßüPzÜB¸z7BWìsf3™´'1»¿\#at-¹péà´_âzÃõà>Ìlß/×È6kÿu˜Úò7%ÌäIºO`ç§Û̼›­hü:þîž ãÐK Ô"±ª#‘Ø©#‘ȲÖÈåuiEbUG"±SG"1Ò}åz½ýH$vêH$vꌮ1øÎ¥C÷7h:?È(’.ô]~Àì:ür„ѵäÂ5¦ƒÓ~‰ë=׃û0³}¿\#Û¬ý×aj7Êß”0;' Ž™óñ^ €€‘¼= Ì*G§K¤’qPr Ñ& CÑ‘HìÔ‘HdYkäòº´"±ª#‘Ø©#‘錾Àr½Þ~$;u$;uFט |ç‡ÒÁ£¾Ë˜]‡_®‘0º–\¸ÆtpÚ/q½Çázpf¶ï—kd›µÿ:LíFù›fò$á &Èdz(0“É+P{Ýo JãI‚v™HUG˜•ÓÕfeú«5r½ë"´ûé³rº:¬¬§3úÓzí¶Fåtu„YÙ.Ñ5fßù¡tð°ïò:f×á—k$Œ®%®1œöK\ïq¸܇™íûåÙfí¿S»Qþ¦„Ù<ÉÕc¨=Ó£¼4³Ä!UaVNWG˜•é¯ÖÈõ®‹Ðîg¤#ÌÊéê³²žÎè LëµÛ•ÓÕfe»tFט |ç‡ÒÁþËë˜]‡_®‘0º–\¸ÆtpÚ/q½Çázpf¶ï—kd›µÿ:LíFù›fòÑvìü¢É±¹‚†‡L´ ƒvý`:‰:‰‘Nkäòº$Ú}Ó‘HìÔ‘HRÕ}µ÷N¢^7T‰ÄIÑ5f‚œñCéàrßåÌ®Ã/×H]K.\c:8í—¸Þãp=¸3Û÷Ë5²ÍÚ¦v£üM ³y’è5œX3ãF œNfx äØÄßCA{ž^5zz/‹zÛyY²…ïüP:°ïʪ¡·­—E½í¼,vá´_Ò;w/KºèËËâÌl_ïš½*é¢w,¯Š˜Úò7%ÌäEúšŠ0úÎ'°`õ&ÕT2ñéd¶7^†;'“acìvnÄo~(Øw1~Çk¾Œý“«°íg/Æ~fv“ÓÉi´mž~zÚDrQD"Þ™?a$œœæì»¿ÃÉ)Ãx¶ýìÃÉ©Ÿ 0rõË`yM+Âáp¿\<€¢O\Ù5ŽaÌÈ…ä”°ïb|'§ ã Øö³ON'§~ãvK)žÈÓïWíÖ÷¶Æ ²]Æÿ°ïbüÙ²—à�ÉUØö³×ü%af7¹ÉF/ lþ»Ö… %˱ön~o‹ñ^tPƒÁ Ÿì»Ÿã&_–Šb?Åä*lûÙ‡“S_E¤ë"šCåXSô>å();Œ¶n~g‹ñ&œœæ ì»ÃÉ)Ãx¶ýìÃÉ©Ÿ éJ¦âžay>¦�sæ<‹QMijOÿû.sÇ8Æ{prš#°ïb|'§ ã Øö³'§>"6âeÞ0vá.„#Q Ä´@½·`öò£øAÙŽa¼'§¹û.Æïx-9e˜\…¿Ù‡“S 0|Ø3(m½_¡x‘ÎrÌœD8¾–a<'§¹û.ÆïprÊ0 “œœú‰î,ù4Jš{âeàMÎÓó† ùéã=89ÍØw1>‡“S†a˜Ôð[ì—ÛÉ)úÐÝ´ oÎ]†²ækˆŠ�¯`Ø0fæ4ñÀ"Œáä4W`ßÅøNN†aRƒ“SíjBE0ˆà–=hºÚ‹è÷ß âÓÏPvèºy.ƃprš°ïbü'§ Ã0©ÁÉ©Ÿ¸^…¹.ByÛ D£—±áXä,Àë³§bzð,n+›1ŒWàä4G`ßÅøNN†aR#§“S¿9è¾Æ1©ôkDÅ¿›¡¥5ìQB×€[µX<•a¼G.$§~óCéÀ¾‹ñ;œœ2 Ãä&9œÞnY‹©oîÀ7m5(špîœÄÅh/®Öˆçy:ƃprš°ïbü'§ Ã0¹IN'§ýÙCÞØ·Q¾®ÆÍ( °¼¼½Êf ã89ÍØw1>‡“S†ñV¾§;€ï”eÆnzвù óÁ˜ˆ¹œÆˆ ûÊ%tõð[ZŒ÷áä4—`ßÅøNNÆXù~4Ÿn(eÆ"WÑRÄò™ã0|x�¡ˆ²ÞÃprÊ0>‚“S†aü€×’SöKL®bÅö)9}¼˜|Øt¸Æ¿­¦Émô„¡bõÛ(y—ð—waÄS¿ÃŒ‚99eÆ]prš»øñÞ3¹ '§ ã ¬ØþÑsÀeñ7Ò ÔŸÚ¶>H¨2Æí6”ÏáÂGþ^ ¬Ç¾¦Kè‰F¹v 7|0'§8Àc¼ '§¹ û.ÆOprÊ0éÓ÷Ðn%I¹œ’VlÿÒ zæ'r ˜ù ðõà‡€…§¯„ž§êŒ^tµBYñ(˜ð;ÖïEÓ•žX½E#øà•SNNµp€Çx™\°ß\ðCéÀ¾‹ñ^³göKŒ›ˆ\vßT )ð½H«Ò|4]Û%§­JAÐqX)’ÔiG½]B¯¬gŒ‰ö\F3½o:k2 æ,Eá«<Ó­×Ìn89ÕÀãe89Í]Øw1~‚“S†IJüFU/É^ òø.`k“Óîï€m'€ â<äñÆ‹Du«Ø¦'¾ cÊmô\ù Á%œœúð/ÃÉiñœœ2LúPâ÷€b“©J&’Sm·Þ‚`eHÿ\ù ªQDÂuØXTˆ¢uG¢ˆv7ãË/jÐÒuË3Ýzå}Öƒ“S à1^†“ÓÜ…}ã'89e˜ôqkrÚØtŠló+ñwÁ¾äÏ'¹¿xû4pê{~÷ÔÛgPúÄÝÈ‘gòÂø¢£¸Tÿ>ÆæåáÞY;qÉ#'﹜œjà�ñ2œœæ.ì»?ÁÉ)ä%§³Î�"áLEŽ‹„0É)M%#·WË"Q]-Vµ7ú¾BÑè”¶Þü%TÍÁ‹½bù²X~åÞxv*|œjà�ñ2œœæˆÝëÁ¤¹¹YÙƒa¼Ù¯—`¿Ä¸ JN?’*gE"›ätBØy™ß+µF—«>À;U—ÿz›>ÁÔ’Sèëù_|Á°72|3»ÉéätÉ’%‚9=9þ¼²ø²W¿ã7?”.ãÇà«Ô2{öleK†ñdÃ^‚ýã&ú:i'^¥lÊm`s-°÷¥l+¶/“Ó—Äß#ßñû¤i=³Bž¦Í'É{¢-ò¥^—cf79œÒSíÕ xŒ— ›õ;~óCé2ØÓS~jÊx²a/Á~‰q"+]\ …ÍŸJFEvxð0j/ðušï*Z±ý‘0ïI)¿O:¢mN~sJ6! öKY5š»Rú9˜ÙMN'§%ŸÚ N-à1^‚lÖïøÑ¥‹ÑÓSþQñ:dÇ^‚ýã66ÄmòáƒÀ'g€Ý"Qm¸—ƒíÀ:‘”>'XÚfâ韲ê`ÅöÕ£õ2éÒ…ã;×c[è[“$¿gϺº»´™Ýä|rjöô”<ÆkÝ2¹ýZªõ[$ü£Ãd?ÆGŒ·é½üvw¿mÉý{€Ã·”Ò@gȈL«N$ÎüTu0Ú±eæ4¼ñ^�€‘¼‰iÌwõàHfvѬÀèÝSð¯AvËäßÿ=Fޙ䷸G5†±—T‚ïT¶a˜LÓq˜l’ Rbº¹sh ¡<Vªt\¶µ[µÒL«ç#’jÆŒv'Aþ³((0“—QX+n®K1³ŽdIÁ %¬ ã5Èvý†Õ†/×Ð>=åÕß9ƒÍ[Nd}RùT|û)Æ­D¾vžæèŸûtB-P$Âv^Q´bûç€QÊöFB ó‘ òT#® ®¶5ë~q¨Èû­'§ úÓŸ’<JXÆkíú 3Æ$?=姦Œ÷‰"Òõ j‚Ë13ÿ^ „²>¢g*>ˆý“«X±ý­û·7•ÝÀ²v ÍÙmr”Â;+pÌ#Y«¼×zprª ~zJ‰*ÃxNNsùô”Ÿš2ž%zác»°úíI™'Ú⼑xêÕé(XÎÉ)ÃX%úp]YÖE$0×lJb¬ØþáF pèYç�é‹äõ¸,ßäùOõéC÷‰u˜3nÄÀéd†òÈü<fvÃÉ© ùô”Ÿš2^…ì×oXiøÜLRâQa²‡Þýp›¤Ëíö˜Ÿ¯8F†} õ{Ñt¥Qü€k]7³Þ½Ï/>ˆÉ"—€¹'4ïtªdmP&@âlØ!D):J”º·‹ÄX)'qXvH$¥J‘1 ï+¾ã”`³œFFÊöF\ñHh3¿ê¹hC¯Aôš0ŒSøÑ¾üzýÞ°ïÊ.n¯ÿ!_ä*Zj·¡ø)˜ðR�ë÷•šp"ŠH$û}Ôü⃘ܒSù~©‘lÙh_'ð+¥¼2ÛÏeDRÅ£õ¦@´ž~ t^ŽF"žyUÚ¡ž‹6¨<räHL$²¬I¦t$#xŒ“øÑ¾Ì˜—ðú½aß•]Ü^ÿöœßmô\i޽o:«` æ.Å% žèÖË0n"Õä4*äÍWÈŽL<:ðh½C¥Wë‹1ky5ÚÂa„rµEk=Ó­× ÏEÔ�ÊDOôVÊNè³2ýå�q?Ú—lH½Ž×ï û®ìâöú·ýü¢=¸Ò´ ŠprÊ0‰ˆpÝåÝM¹AhÛ^à[FíM­×nŸAéwÇ|î�ñÐ;§fx.Ú Ê'dÒ§‰žŽD’)‰D–åù3ŒøÑ¾dƒåu¼~oØwe·×ÿÐÎïÂõ›Q´´ëÃ"íCwó>|Qý º¸[/ÃX&“"YG뵃.•½ƒ7ƒ5…BÉr¬Ý>Èê=mP(“>£PbVvBG˜•é/xŒ“øÑ¾dc%Ñ–½‚×ï û®ìâöúÊùÝn)ÅywaDþSÈù ŠN´¡>0yÃFaVùE‰a,BONŸÖt›UɦãÀÎ,d~<Z¯MDºn®Gùš"–”áP[·ož6[jMÜà ©T'{r™°RvBG˜•é/xŒ“øÑ¾´~Ç ~(¼~oØwe·×ÿPί¯©£Ç—¢UDVÑÎJÌŸ¾iùZæ¿ZŽlÓâUŸÃä.©¾sšix´^; ©dVaÒ=y6|, 漂‚QáÙg'ã­}¾HP-µ&Ò ³ 5€F  V$™Ò‘HŒtà1NâGûÒú7ø¡tðú½aß•]Ü^ÿC:¿hU‹–¡ª“úÞ@SÑë(i¾‰žs›ðâ” Âñ­²†W}“»d29•Çc2Dl´ÞáÈû6*÷Ċv§"ÔÛ†àì?£ñï§§–Z7 5€êdP'€j‘dJG"1Òq€Ç8‰íKëwÜà‡ÒÁë÷†}Wvq{ýåü¢áí˜5ò®Ø1’ån<Qz†¨d¯ú&w¡n½+Ï_§t‘•"ÊÛR‘¼Ê‘†Š•ïÇÑVà˜öœT²ûŒø«lË !0üG_úµò”TIN#(Ÿ9Á°÷GD²Ôš¸ÁASƒ%=uÒGX);¡#ÌÊô—ΟaœÂö¥õ;nðCéàõ{þ+»¸½þ‡r~Ñ‹AL~xJ’&”ß‚²ýÍèŠdÿ)€W}“»˜ˆÔ ,Ù'’D›r+߆ãýÛëÊANN§µ‹Ã#%§”îDr:ùIL›>Ã\ÎON³5€êdO.VÊNè³2ýå�q?Ú—Öï¸Á¥ƒ×ï û®ìâöúÒùuŸÀÎO·!tÕdøÐ›­hüº[)d–T|ŽWýãOÌDÚ|ø¥°Õ®(+¶ÏÉ©=D»¿ÂÆ7ß@ ìº£"9-޼1³±¡é¿sš d(“>µHôt$’LéH$²Ìã$~´/­ßqƒJ¯ßö]ÙÅíõ?¤ó Ž™óñ^ yRWÞž†Gf•£3 ‘W*>Ç«~‰ñ'©¼sººKÙxˆÈã¥BƒH˜Wµ$'ËëN3÷ IóÖ <}Ì D;ÑT±ÁàVT5}‹H´-ŸáÓ²:´ugê-;°ÔšX1@§  :”"ÑÓ‘H2¥#‘È2xŒ“øÑ¾´~Ç ~(¼~oØwe·×ÿÎ/Ĥùx¶ �f2yj¯gû T}¼ê—2Xr:S$‰º#æ¦<f*\¿%r+e9 ñµÞ|(í4Ð3*® jî³XX~=Ñ>\Ýÿ6Fæ=ˆ‚×_Á¤éA´¹ÓEÀÌn,µ&V Ð)¨”IŸQ(1+;¡#ÌÊô—<ÆIrÁ¾Üà‡ÒÁë÷†}Wvq{ýéü®CíoÏhèU¿Äø9 ÒYÍ€C4 ÒŽÀ^OÚaûߊdzîàþýˆM)ŘÐ׈ÂIkâõt³Q?¨@nâj¿î™‘ÌìÆRkb‡j�ÕÉž\&¬”ÐfeúËã$¹`_nðCéàõ{þ+»¸½þ9¿h;v~Ñ/tTóª_büÉ "Ug²0Z¯­gDb*ŽÁÉi Ü>ƒÒ©ï ü›oPWô,î¼ó%/þ€ÈÕC(|¾È3"™Ù¥ÖÄ*Ô�%€Z‘dJG"1Òq€Ç8I.Ø—üP:xýÞ°ïÊ.n¯ÿ!_ôN¬™‡q#N'3<‚žxÕ/1þ„ºõ.8™ün§”ÏOã…­fc@$CD¢|VœÏYš¶“„>tŸX…I÷äaXÞcXXy½]ØX@`yZ{99Í8ÔX©“=B�ªE’)‰ÄHGçÏ0N‘ öå?”^¿7컲‹Ûë(ç××T„Ñw>«7©¦’‰O'³½ñ²'ÞAóª_büI*"­ìT6"òx©`øÎ©BÐ{»ƒ¦ˆ"Òý-:ºz<ûŽ®™ÝXjM¬ SP(=uÒGX);¡#ÌÊô—<ÆIrÁ¾Üà‡ÒÁë÷†}Wv¡ú×}n£ûÔ)œ7í¶ÅÍ3_áëýÐFﳓt‰¶mÀÓOo@û€SXÄ£OzÕ/1þd°äôéFVÇä1S¡á$ðÑ7úOt·¶�‹âSÉD{ƒç„\'/Àø3»±ÔšX1@§  LúÔ"ÑÓ‘H2¥#‘ÈòPp†Œ\°/7ø¡tðú½aß•]¬Õá-óQðÆ»úÓ²Ää=¼=í)Ì*ï°%ø’}D® ~ù,¯iE8î—‹Pôiwëe‹ˆ$äoƒ<½´ŠÛOužÓ“"‰•¿ËœúyÏõ°Ôš˜(SÈP�J‘èéH$™Ò‘Hd™<ÆIrÁ¾Üà‡ÒÁé{ãõã3æX«‘œ_ƈü‰úS²¨dra­ñÀ)Š}Ün)ÅyúOcùS†q7Vl?Õä´ã0J”GŠ—sÈWz yÏõ°t5fÊtdÒg”�JÌÊF:y|=v™°R¦¿^4 Æ;ä‚}¹Á¥ƒÓ÷ÆëÇg̱Vÿ}¸ZW‡3ì;$ûˆ^@Ùüw¬ !J–cíÝžèÖçU¿ÄøŸ®ë")¼$äŠHôz••6bÅö¶Ǿç¡óD7&ßÓOkqnˆå™³3Ûx±}6³KWcÅ�‚n€:Ù“Ë„•²‘N_O§]&¬”é¯ ˆñ¹`_nðCéàô½ñúñs¬Õ¿Ñ;§Ý8ÓxÖ‘G†fQDº.¢9TŽ5Eï#XŽ’²ÃhëöÆû¦„Wýã_n\>¬‰OÑ"í“dæI‘Ú˜ô9iû<@Rjx±}6³Ï] Ý�£P++:õ ÖêH$z:‰‘΋Äx¶/÷âô½ñúñs¬Õ¿Ñ;§obÚ#óQÞ)’¾›GQ4~4ÆÅMe¯¡0$û ©dJ¦âžay>¦�sæ<‹QMijOÿû.{By†É8âkóÑÞ~»Ôʯß)›yÌTøú‚Î@HFÒ¼×(ie_&Nss³fTó`Ìÿj×ÑvnÆÌn<mÐ P'{„:T‹ÄŠNÝÀju$=‰ÄH7¤œaÁöe¥ás3N߯Ÿ1ÇZý›½sú2 k;]•œÆFëÍûÆ.Ü…p$ qò˜¡÷âÌ^~?(Ûe‹T|_ü㮋$ð+6ù\ƒHôDyY°û°ç`–H\wØñÅX±ýËíÀ/”íSåT¦ŸÎÎΘ¿L89Í Tá2ÑS'}„•²‘N_O§]&¬”é/ŸaœÂöeæÀ¼„Ó÷ÆëÇg̱VÿÞzç4 `ø°gPÚªÌÀ¯$§‘ÎrÌœD8¾6k¤âƒüâ§ÐÑ·ÇyçúßáÜz¼?Ñ»%>‰ªX±ýè à·ýû *œœêò§?ý)æsdöìÙÊ–îEÞc=<mP¥«“=¹LX)éäñõtÚeÂJ™þÒñÆ)üh_fÌK8}o¼~|Ækõ߇®¦ÊX×®-µíèÅmô„P±¥‡Úœ`hHöÑ]ƒÅ#ŸFI³òv™HN'ç?éù?Ã…üä”a¬òÃà±]ÀaÕT[âON¶ï�6Ûԯ׊í?!>[|þyí@HBŽœŠ.jÖ«Hbúìé©ÛŸšfvã¹hƒ*IŸZ$z:‰™ŽŽo¤Ó®LG"‘eyþ ã~´/+ Ÿ›qúÞxýøŒ9Öêÿ6®W-Ä£ w¢­ç6¢W÷báÈ»1²`6fOš‡`›ò„ÒF†f}ènÚ„7ç.CYó5DErZ0ìG3sš\0(’_|“[8 U èÖƒý¶<¾èRÖ+ßõÓÛˆ¯úÒ:à²RdÌ1zzê…§¦„™Ýx.Ú Š'Ô  ‰žŽDb¦£ãé´ëÓ‘HdYž?Ã8íËJÃçfœ¾7^?>c޵ú¿ÆÂyJ7ÙkŰQKºy·j˜lof#C±hW*h-{ÐtµÑï¿AŧŸ¡ìÐ9t»`¿ø &Ǹ 4œñçxqk 0¡(뺲4EËÞø|‘êÀÛžÞ-Ι§I £§§^xjJ˜ùUÏETñ2é3J�%fe#<¾žN»LX)Ó_:>Ã8…íË/¡Ó÷ÆëÇg̱Vÿ·ÐR:o–ŸB[]1&Üy/&Û\A}á,oìV¶³!ÙÇõ*Ì}tÊÛn ½Œý Ç"od^Ÿ=Óƒg)ÆÎ*~ñALîýA|­”e]ú€kYè”põ‚2 Ò.ใÀ4EeúŽýó!~rjíÓS*{3¿ê¹hƒ*_ìÉeÂJÙH'¯§Ó.VÊô—ŽÏ0NáGûòK`èô½ñúñs¬Ö´ûJ&ý\ì§Œ‚Ûû-7®À{ ÿˆ--6 Ó©b(öÑ×ø!&•~¨øw3´£†=Š@èšÈ±k±xª7Db7¹Ì=ý)Z„¬m�Ê”'ª™æäi`”òJ’ÝÀ:»úçÚ§§Töž‹6¨ò@­H¬èÔ ¬VG"ÑÓ‘HŒtêã3ŒÝøÑ¾dÃåuœ¾7^?>cNZõ鯕Ž.ô$ºÆÒ3oaIm§íƒ" Å>n·¬ÅÔ7wà›¶M¸wNâb´Wë?Äó™J†aÜ%§(vk$[³”œߊjÝq`&=9­–œÄù¸ ¿çOO½ôÔt0<mÐ P'{„:T‹ÄŠNÝÀju$=‰ÄH7”œaÃö%R¯ãô½ñúñs¬Õ=ÍëñâÈ»bû {&£°²]4§¨MÐqÓ&z 'J¦âqŒ¼±o£2|]›Q`yy z•Ͳ…_|“;¸=9eìC>=õËSSÂRk" :›Ð ‰ž:é#¬”tòøz:í2a¥L‡Ô€3Ì øÑ¾´~Ç ~(œ¾7^?>c޵ú§‘ò1rƇØL %dJæ<…‚ÀZ±üjÛõ†%I¡ÛGÝW.¡«Ç}£¡xÕç0¹Kä2°îŠjJ)ßÛ€ù­@· ê¹¥?X’×!ÿèuÉ$–>Í ZVLúÔ"ÑÓ‘HÌtt|#vý`:‰,gú3¹…íKëwÜà‡ÒÁé{ãõã3æX«ÿ("áJ,}.'=íÃå²w±¼ÑþG&~¶¯ú&w¹}¸h”|ö‹¿g©KµëÀÞsÉïÀƤEœ—Hœ §šñ0^÷™>KŸæ-+H�J‘èéH$f::¾‘N»~0‰D–ýÜ€3ÙÇö¥õ;nðCéàô½ñúñs¨þõÄŒh$Bƒr¦…Þg &vb÷ñ†‚W}“»P·Þ ‡€eÇÊ{uñ.¿ËÄ6v`åûqå"0^Ù^WrrêF2}þ–>MO6¡ ’IŸQ(1+éäñõtÚeÂJ™þzÝ@wãGûÒú7ø¡tpúÞxýøŒ9n¯»ÏÏM×ëUŸÃä.©¼sºù;eã!"— ;D¬>‡ÂÉ©+Éôù[ú4i<Ù„*HìÉeÂJÙH'¯§Ó.VÊô×ëʸ?Ú—Öï¸Á¥ƒÓ÷ÆëÇgÌq{ýÛ}~nº^¯ú&w1KNضÙ÷n§<n*ì KÚ•÷_õä{zûÜx½ýÌôù[ú4+èTAF  V$Vtê Õ‘Hôt$#× ”q7~´/­ßqƒJ§ï×Ϙãöú·ûüÜt½©ø¯ú%ÆŸô]Ø?±.Vl¿§( ' ×¾£áÜü‡×ÛÏLŸ¿¥Osƒó¥ R'{„:T‹ÄŠN}´:‰žŽDb¤óº2îÆö¥õ;nðCé@÷ÆëÂd´ê?Ò‰æ}AQ €@Ñ_°¯¹Ó±§vÛ‡›ì-ŸãU¿Ä0CÅŠíŸmfîrtà»°$ÓêÀÝz]H¦ÏßÒ§¹ÁùRy]†I­ßqƒr#ì[üåûÛû56¿4yª¶gذŸcRÉ1t;0Ó½Ýöç5{f¿Ä¸‰ž@Ã¥¸œ”"o‹äð püº½]g­Ø~ƒH@åöºÂ'Î_Þs=,}šÙü‚× ˆabÓH´ìÄ–c~ì“~(Øwùk÷7‚Ke3ñ¿ QÞxWcs‡ ¿Ð}eó~‡¢öû»íÏköÌ~‰qÑ`Þ.`á7"Ù™hô`å~;|èR¶*VlŸ“SoâÄùË{®‡¥O3;_ðº1¹L/ºZj\> ùÃÇ"êVÖû‹\ðCéÀ¾ËßX»¿Ý^Eië-¥,‰âVm�SƒíJÙ>ì¶?¯Ù3û%ÆMôu3OSTgw]¿N£.´5Ù­÷t¸l4ÿªñzûìÄù›Ù¥O³b€^ÅëÄäÑž0ŽU¬ÆÛƺð嘀WgüË99Í)Øwùk÷—žœ¾‹wö_Ruß»žp Š'=‰Åµv=3éÇnûóš=³_bÜDGkòyõð Å>nˆ?1¥Ñ|?b¶Ù~¨çäÀ[YÇëí³çof7–>Í6t1^7 &—¸…öò·?<OØí=ûb�ë÷ÂêÂ¹Ž®éN¿ï<À5eÙ*¹à‡Ò}—¿±|{šP:iFäODAAžÍ¼ay¸çÅ Ú"ö‡vÛŸ×ì™ýã&®‹„ô¿E‚Úþ-0w·bŸUÀAêL!B„½"IÝaÓh¾Vm¿ã2°MœÛV­´�Ó*ERnpàb¼Þ>;qþfvcéÓ¬ ñº1¹D‘®oP[ö1Þ(x/Öc_Ó%ôPÜíC¤Ï…¿?ŠFñkÑhÎ ¥ÿ^I.ø¡t`ßåoÒ¹¿Ñž m)ÂÂSP0m>–o9ŠË$¦„Ýöç5{f¿Ä¸Š°r_¿]’D£Û}XUÜ¿h}~‡ˆÛï8ŒR“žÐ¹í ªŸž z½}vâüåýÖÃÒ§™È/xÝ€˜%Úƒ+Íô¾élÌEaá»(qQ·Þ¨h(D£´@6–Cô üP:°ïò7Öîo=.àÛÑXßÚ€cWì«3ŽÝöç5{f¿Ä¸È-àÀ7@á `ç•X¾Š±®ãF\®ÙԹʊíom¿ÜÞTvËÚý3ç©×Ûg'Î_Þk=,}šÙü‚× ˆa¢=—Ð\Šb$§4œ}åi`®~ÿNNm‡}—¿±v#oYŠÀŽ„B!•ByàyÌ(­Fã™Ëñ^6a·ýyÍžÙ/1n‚Fç½®,ë"Ól$§‡À…þ9IDȲXÄÇeù¦ˆ!”ý¼Ž×Ûg'ÎßÌn,}šô*^7 &Lj„Q¿±K‹6£>|K´H×Ðüe9ª[®fµ[oÇ`õà—ŠÏPË„:`&wëµö]þÆÚýÉipZlc¹ #_\ƒÝöD¨tL;±ûxNÃ~‰q4àÑÜšw:U²¶( q6 ì¢-cÅö£ß;Û Æœ¸ ,;”~làf¼æÏ´8qþfvcéÓ¬ Wñº1¹Ä-´”>‹¼¼È&#ÇŒ—jû# »w.Ê/ÙßuÏŒ¨ˆqO]�þp¸_ñ Ù,8 4ˆÖRæó¢õñc”MØwùk÷W$§ŸŒÒ¯Ú‡Ur%³° ü±|­ kðÖŸáe¯¡`·ýyÍžs!>b¼%§¨Û`Ù*ÚcšræWJy¥XNy<Ư·ÏNœ¿™Ýx»¶ÀëÄän¦^k��˜gIDAT7ÑTôÆ—~-¾>tV-Áô`[lùZÕ;xµüoÊvÎs’FÙ«êw6RصŠDT“'GD"›ÙÔÙÿ°ïò7ÖîïmtŸ:…óæìÃÕý«±±™:ËÝFÏ7k1irá¸rHØmn²géÏÌHe†É©&§Q!¯Ðh¾Bv¤ùèTÏ ôcö9‘ 7ˆó<ÞÜà«ü…×Ûg'ÎßÌn¼][àubr‹èåJ,zçKtÒãÈÞ¯P4ušûnàÜÆW1ʼnöèþN4tÇñÊ»¥Ôuw›htºmhpÒiørö]þÆöû{}Ü{7)â'§ƒ‘Šb?Ÿ‰Èe`Ý |¯S%2!Œôßaä^«¶ß*B“—4?fß/Ê+;üû£µ×Ûg'ÎßÌn¼][àubr‰^„wÎÃÈ<÷ÉòžEi Mh–YhtÀ½ÍÀÌ`µh€´OLÓÁÌ1ý°ïò7¾ãФ ½Ÿ^݈°ÁÔ2zŸ5˜Ø‰ÝÇ ©ø öSL®bÅö¿ ó¯•íõ¤ðRüÕ¿á&–Nœ¿¼çzx»¶ÀëÄ佸üžógƒA•lÇþæÎ¬þISÇ|%’Ó…"IýƒHV¿ÖäÉ×® ˆ ƒ™cúaßåoÜ~í>?7]o*>ˆýãVhú˜“—z’jÓܦj¬ØþÞ²ýn`ñiQ>Ì=.έØ|B$®‡�qª¾Ãëí³çof7Þ®-ðº19F䪷ÅU·þÔxh¿ÖóDtä»x·ƒgD#ßbP¬4|¹ û.“Îýv· :X‚Â@�…%e¨¥Q¼ÝØmn²göAŒ‰ŠD4(’Aí»§3OŠöׯw<­|?bóœªßo—µ*˂Ô¨úðýÓŒù³ØŒ ÛP¶¿]½bÒÁ‰ó7³÷x—঑aÌ1ôDM7Ï|…¯íœÐ0M®uë€Qä,Ìsj¥áËeØwù«÷7z½ËÇß+ö» #ò'¢ àIŒ¹çÌÜðºpvÛŸ›ì™}ã9D\°¹¦ßvµ2¾MrÆ9~)>;Ñ™J$§‹)!½ì:ü§8çÌ–‘92åÏn·”â‰;GâÉç'bâò#¸©¬*Nœ¿´E=Üãý]‚›D†1‡&ÚŸ‚7ÞE 0÷ðö´§0«¼Ãñ÷8::“Ê“QÉïN¢Ýõ-0ËÂ\ffŒé‡}—¿±v{Ð\òòÆ.ByÛÄw?ÚÓŠ/潂’f»B–~ì¶?7Ù3û Ækü ’½ÿs�Xw8,–)ù#9¶Š$pÖžøh½™†æ9ý}H$ òGuqÓ”ïI@Ùÿ)Ý~lõgÑoQ_<³Š£³§ ëêQÕY7ºo‰r'ö¿õª®ÛóÚ læWÝãý]‚›D†1‡&ÚYy*R`*“ kq]ÙË ÎœîŸÛtÉùx‚Úq.þ”ôa‘ˆžÑô%¤D–ß9µö]þÆÚý¥i¦&`†³š@/Š[µLUFòŽF"è‹- »íÏMöÌ>ˆñ­"15iôoŠ$u…HV³AD$¨å"iŽu-ÉéK•À‰„u‡ˆ œzí ÛØêÏnŸAéw#ï‰Õøê›}XSø:f,X…êöþ"AÉé‚y†í©ÑLûc÷x—঑aÌéÃÕº:œÑ‰.£á½øâXæ~½G¢p?©ˆÿ"{òd¼ü˽À|ÑP¦ûk(†©Á¾ËßX»¿Qô4¯ÅËó‚8#,¥åÖÌz}߈òœÞ¸kmÕÛnûs“=³b¼ÆÕvàuÑîj{.ÅIá1Ñ>–~½9ŠÝþ,Ús×zäSÑ("á]X8î)Ì)ÞŠýõ5¨\=cG/Gãö<‡Î´?v÷w njf0¢ÝǰfÎÿňÓÉŒA Ô­lå<­g€Þ|Þì:<Ö�\ïj.�W„ÿ¬<•z7^-äèÑ£˜={v’Ð}×®knnVö`¼Žµ¶éZJŸE^’OГ;1*PgË{It<;±ûxC}ã5¢7€ßVÄívÂA`šJßÜ¿8cOO&œ÷g"A½|%/ŽŽûý{¦¢äĵ´ hÉ´?¶ôi~sЫW¯ÌÑ Ð®;þ¼²ø êº7wŽ[€Õ›ÕSÉT ñJæ:ÈD�>üJ$¤J¹I$£eª·»CéÀ§õ;~óCéðý÷ßcäÈ‘1e$ãÇW¶fü�ÝS+D/mÇü77£.BÈLš¯ØÒ•n°ó£Jþô§?¥üƒ‰Õëuö9Œé¡ëxÅv“d7PÚIé “)2çÏ"è¾r ]‰§ªöiléÓ¤aû…Ä*ÜL8ÀcÜËhÛðžð^™ Ú‡H_æšžˆHDW׳ŽËŽ Ÿ«‰/ ÓQ•Àñ4OGëwüæ‡Ò…~„ÐóYRÈ¿1þîiêÐHÞ8ÞySãºq¦ñ¬~W¿!bt~”ŒÊ~I89e˜Ì%_´Ã3é©é!Ñ&ŸD{͉ifq“?K‡LŸ¿¥O󣃦äS6šzÂã^¢ˆ\=„峊PÓ¦z¯LÈÅÚR|šÁn½»Eb*ýƒžü¢øNÙÖ*òm9W1{zÊ?ªùº¯©c4’÷›˜öÈ|”wö7¢hühŒ/:êH·^mR*…“S†qêÍd:¢p×l ¿ƒã&–™>KŸæG4{zÊãnÌÞ+Ëì;§{CýþA+ãEâzlc®ÈãH´å\†^MxïùG5?B÷5uÌFò~…µŽ%§FI©NNÆy"—€¹'€­­ú²¶!ùÕ›¡ÀßÁq“?K‡LŸ¿¥Oó«5¤à1nÇø½²¯ÐÞm×$ƒCÝzW‹ h;Z¿ãW?”üÿ¨æOèÞ¦ŽñHÞNAçg–”Jáä”aœ‡’Ó»5»æ9•ÇcŒq“?K‡LŸ?'§j,eÃ)…Y†q??àZ—ö½2¡õ;~õCéBƒÌ¨}ÿ¨æOèÞ¦N.ïÞŽC7´?}‹êµ•;à0èü{Mƪ¸…T|û%ÆMprê.ÜäÏÒ!ÓçÏÉ©‚ößTÝe˜lí¹€PùZÑ;e…«Pvèº}”­jýŽŸýP:¨ŸžòSSÿB÷7u¨[ï´„]$IÞD”4ÛÑ‘7:6A?Ž˜%©^l[Sñ9ì—7¹ ¬»tˆ4I¾¶7Äçï¶©«Ûþàïó2™>NNÔOOù©)ãhžÓ’I?v{Ƽ‚9ã±gŸÁÓoíÁå &¨GECwL4zBEvŸ•m‡ 7„‘OOù©©±ЀHïbÁêMISLm^ù:&Ï-Á¾Vñ¥´íù%©~ýá—ýã&nß.%Ÿ½Àâ/Ã⯰íŽÖ?z 'ÎßÌn89U!ŸžòSSÆÐT2S—÷Vžá(=-Y€@¨ƒï`ycæDj8Þïtå '§NBOOù©©¿±DqóìYüMûU´åó¢,lSTªÂèü´I*'§ ã<Ô­wMCS»i佺x—ßeb;`ÛkþÛ}8qþfvÃÉ© j4ù©)㺠ŒÁ°ñ¥h¡29½†Îò70%ØÛ*prjŽ Ìý Lvл$ú_°u‚__Hšb*ÜZƒâ‚Q(HÁ7è}Ö`b†LR99eçIåÓÍéÎï¦A1f0ÿèvœ83»±ôiÙ4@uèa˜¡sݵïbä#%hŽuß¡ätò§MEþðq(Ìä“ÓÓÀª–ä¡ê×fîBÃÙ_�ìêH˜M?”.~ùγïÊÖêž|Á;§÷LG°ms;@ÇÎe¼è—ÿb–œ>°(lz”m‡Š<.cŒ×ý£çof7–>-›HsäÈ¥„زV$z:I¦t$õº\oĉ^CÓÆw07ðš»oÅÒ¼‡1sÃW麈uu?N$Í›¥ú4ȦJ¿|çÙweku/’ÓÏ‹Qr >iŠ©úÝaÞŠ#¾!×mË~‰ñ/}Wö{¦ ÛþàxÝ?:qþfvcéÓ²i€T1FÉž‰žŽD’)‰D½.×qÆ.úÐÕTèdKU®Fúð}K%>ý´ ‡Úº]1½Ì·—€¹{€û÷Céz<t²é‡ÒÅ/ßyö]ÙÃZݼsŠNì_ø"ŠN8? R®áE¿Ä0vÀ¶?8^÷Nœ¿™ÝXú´l ¬uÒ§^&¬”Ðfe¹œë8c·q½j!]¸m=·½º GÞ‘³1{Ò<GºîY¥õŒHL…ÏàäÔßyö]ÙÃZÝë?9 ÕnÁâü‘˜VvQÙÎ>rÝ6¼è—ÆØöÇëþщó7³KŸ–M”£—ìI¬”Ðfe¹œë8c7ÐX8¥­”„^C(ð(†ZŠÐÍÛ¸UÀÔ ˆdÖ­÷ìàäõÜ~¿Å/ßyö]ÙÃZݽsš‡{&­Â‰î>e;û°v~þË~‰aì€mp¼î83»±ôiÙ4@ª™ÜI‘h×K‘dJG"1Óåz#ÎØÅ-´”ÎÅ›å§ÐVWŒ wÞ‹ÉÁ6D#WP_8'³SÉœ>ú&y@¤„´�‹â£õF{ƒç„ˆd5Ý©ÙôCéâ—ï<û®ìa­îéÉé'ØpJ3ZoGzlêÁ %×mË~‰aì€mp¼î83»ñLmQÅ%{ÚõR$™Ò‘HÌt¹Þˆ3öí>†’I?6õ#Œ]¸ áÞoѸqQÞš¡Ñ©N%sR$±±ò—bÙ¡ Ùøå;Ͼ+{X­ûh$ûŸ“ë¶!}ÃälûƒãuÿèÄù›ÙgjKVŒ:ÑÓ&}VÊNè³²\ÎõFœ±™H7®8øD$RMN;ΣDyÔ!ûæ=õ~ùγïÊn¯{?Û†ôcf¤² Ãø¶ýÁñºtâüÉf¾îR <S[T1zIŸZ$z:I¦t$õ:?7âLnr´8öH8oÈ÷ÔÑ0Î ±|#6/kjø¡áóËwž}Wöp{ÝûÙ6RñA~ðS “lûƒãuÿèÄù“Íø"9%ÔIŸz™°RvBG˜•岟q&»øÑ¶üÐðùå¾°ïÊn¯{?ÛF*>È~ŠaÒmp¼îí>ÿï#À3û•‚ž©-Y1zÉžÄJÙ aV–Ë~nÄ™ì’MÛêèN~×ÿ„” §¤C¥× Ÿ_¾ó컲‡µº¿îS§p~@…nœi<kÛÈÙjül©ø ?ø)†I¶ýÁ!ÿèu±zbjf3žiM¨bdr'E¢]/E’)‰ÄLg÷MfI¶lëÌéø|¦äl–œ'¨òýÒ‡ ½:cµˆ>¿|çÙwekuAxË|¼ñ.€JÞÄ´G棼³¸yEãGc|ÑQØ1tšŸmÃ>ˆaœ‚¿ŒUjÃÀôZ¥ ƒgZjøŒ’=íz)’LéH$f:ð§È–mm=Øß@ý¤B”oôÌû˽ÀüÖÜš:F‹_¾ó컲‡µº§yN_ƈü‰(((ÐÈË(¬íääÔ~ðA Ã0n¦|£^)èà™ÖD6|êDO›ôY);¡#ÌÊr™<Æ)²e[­g€Þ|Þì:<Ö�\ïj.�Wn•§ö輜œ¦I´Ýiÿ( û®ìa­îûpµ®g28—ŒŸmƒ“S†a˜Ìá™ÖD6|zÉžÄJ9eðvíªÖ× ¬”å2xŒSd˶¢?�~%R¥Ü$’ѲJA°;4X¡W '§:\=†Ú3æoF;Ë1÷ýPÒ;ÀC…}Wö°V÷}¸¼{; û[T¯­DØi§ülœœ2 ÃdÏ´&Ôðé%}j‘èéH$‰u{6`Õ–}”/W$¼:!=‰D½Ž<Æ)²e[‘ˆ®®f–"þ>W_þ@$¦£*ãiÄœœêÞŠ¹s>Ææ`A]ù VÎy÷89õ T÷z¢u릻ý°¼‰(i¼#¯î¾ƒˆ_áä”a&sx¦5¡†Ï(Ù“"ÑÓ‘Hë*ÞǤçþ;6P„ ê’ø<÷`"ÀSKŠDOG"Q¯ós#Îd—lÙÖn‘˜Ê�NO~Ñ�|§lky ‰¶ìl¿/†Ééf¬LÂ=âó† ïìïàn½>ÁZÝÓ€H,^·9É>6¯œ‹ñ“>@e«ª[ƒMøÙ6¼ès†a¼Š¥Ö$›Z6|ê¤O½LX)Ç–Er*<™RNß™ñx"À›¾rBêý”eÂJY.s€Ç8E¶lko¨ß?he¼H\ÝR6Ly‰¶ìl¿/ºÝz{qµq5^yòƾŽ`ó5[S‚}Wö°V÷QÜ<{Ó@´åó¢,Ü«¬°?Û†}Ã0ŒW±ÔšdÓAˆO/Ù“X)Ç–÷lHxýº^ìY¿¿¹ïïÞ€ý”eÂJY.s€—Y¨¾Ý.va籬@ÝzW£ÙíGëw²é‡ÒÅñû½Ž–²716/÷Lú3ê/á×�²e_ŒÕº ¼u‚__@8î—ÖC(™6Áve;ûð³mxÑç0L6ètbe&ç°ÔšdÓASÃ'“;)íz)’Ôuû±mÙ ‰�ï³ÊC½=ŸÉ^fQ×·Ù}ÑÓ‘HìÔ‘Hì´¯ØVÈRmô~'›~(]½/‘‹¨Y>÷ »ã–T"q`´ö]ÙÃZÝ¿sš7rvò“SKxÑç0L¦ùº x¸ øÞΘœÄRk’MM ŸQp¯]/E’’îp9>=?vw"ÀSo/E¢§#‘˜éü܈»u}›Ý=‰ÄN‰ÄN{È–m}}!>oUJҼטúÔ2Z¿“M?”.NÝ—h÷WØ0óaäå=йÁSèNÊKÀµ®›üΩO°V÷"9ý|ŠöF(RIÚ»‰ýl^ô9 “ &îjÃJaÒÄRk’M->u`¯ ò­”ÕËà½;ñÜqǃ±�¯Z¥£�oßÞƒºûVÊr™¼ÌBõ­¾„ºl¦#ÌÊéêY¶Ó²e[—Û_(þ!%9ÈÉéЈ"®Ä’q÷bØ=Ï£¸þo±AÛ’ˆœB隣×ö]ÙÃZÝ û¸v ÝÝ-¨– 0@aIj[®Újjül©ø/ú%†±JL)Ae˜¡`©5ɦó¥†O/°W‹DOG"Q¯;\QŒ—º;àVébr8˜ð’Ö+"ÑÓ‘HÔë8ÀË,ÒvÔ"Ñ®LG"±Kg§=d˶¢7€ßVôûˆA…“Ó! oÃK÷äÅŽk&Ãy*ß`µî£×ë°|ü½b¿»0"" žÄ˜{ÁÌ _iž°ÛƒŸm#ŸãE¿Ä0v ¶}êÒK]{©—ä‹¥Ö$›Î—>³�0‰D–Cà©ß;¶™È�O},)=‰D½ŽŽÉdªouý“H´ëÓ‘HìÒÙiÙ²­ã'€÷Ú€ó"IíÐÈ‘Ó@ÑEÍúï©ãajhýN6ýPºdå¾ð“S_a­î{Ð\òòÆ.ByÛD×îhO+¾˜÷JJóœZ%×mË~‰aì@kûôô”T‰!è‹7ê ÝÊŠ°ÔšdÓùʆOôÚeÂJ9eð-^‡:=ÀJY.s€—Y¨¾Õ÷P—Ít„Y9]!ËvÚC¶lkëq‘p*Ëè–Ö—•âPɦJçîK/ºZa皢øtXEkQjCwlP$~çÔOX«û›h*š€ Îjî·j˜ªŒÖDèëi ¹n^ôK cz¶OÉH Q)09ͧ§â]½­ ”e©5É¦ó• Ÿ:ÀW/VÊɺ^ìݶZ<?àÍœ¿+ÖlOxüΩ·¡úVßB]6Ófåtu„,ÛiÙ²-šç´Hd§z?”v„§w 6Í3“M?”.ŽÜ—Èì <Ÿ9IîÂÈi£&lÿt2Ù²/ÆjÝGÑÓ¼/Ï â´z*™–CX3ëEö}#Êpzãr¬m±ÇNrÝ6¼è—ÆôlŸž’Ñ:)·‘vpâ[eEŠXjMô 0SPÃ'ƒy)íz)SÝáødæcøq,¨Kðî{ò¿ñiE­þ~ªuj‘˜ér½Ï4êú6»/z:‰:‰ö-ÛºzAiðÜA`š"‹2ùŒ>ÄONí¥'Š& /ïA¼ý ‚U5ñÑXk«°­ôÌÌ¿wNø§{ì|nʾ+›X«û[h)}ybÚÏXîĨ@ìèäKÇËe¼è—ÆŒlŸSZo¥;'ãèI)=1-nRVXÀRk’MçK ŸQp¯]/Eb¬ëÆ_æ?‚;îøò_Z€@ñ§X³fM"À›8únüÝ#oá¯5!Í~CùLnÄ3º¾ÍŽDb§ŽDb§=dÓ¶NžF)>"Iv뺔l@×KØ~_®WaÎ]c0·¼]ÿÒHû–<ƒ—Ê.p·^Ÿ`µî£—¶cþ››Q—4•ŒŽ4_±å½ä\· /ú%†±3Û§Ää‹]:@ݺ_ªIïÞ[jM²é|eçìµA¾•rlyq"À“£ô&t´¬xO-+¨S°R–Ëàeªoõ} Ôe3aVNWGȲömÛú¶S$¢Ç™ôäT8¥%'†ÔÉÐ>²é‡ÒÅîûÒ×XˆOo@›IÅF/•áåYå·Ä6Øwekuݧq¼SûÎq7Î4žÕí~?TrÝ6¼è—ƳýD<0½–Ô\bms|P¬–kÊ ‹XjM²é|eçðÕË„•2ý­[ÿZ"ÀÓêä2xÿþÌ ìÑÑVÊr™¼ÌBõ­¾„ºl¦#ÌÊéêY¶ÓrÁ¶²é‡ÒÅîû 0b°ib"!¦aç+?컲‡µº ¼e> Þx7>PVBÞÄ´G棼³¸yEãGc|ÑQîÖk^ôK cƒÙ>%¥”œþé+eãkdwÐcÎRk’MçK Ÿ^`¯‰žŽD"Ëukfà'3Ö$Fâ%ÔÛǤnM"À "ÑÓ‘HÔë8ÀË,ÒvÔ"Ñ®LG"±Kg§=d˶®ß²öt´GlŸîÓ›lú¡t±ý¾t–ã•yU¸®õˆ¶m@ÁÂý¸¡”í€}Wö°V÷"9 ¾¬ÌoZ ‘—QXÛÉÉ©ÍxÑ/1Œ¤bûôÞiAu¼«'?Aõ/ôÄ”la¨aYjM²é|©á3 ðÓ‘Hëö¬À³“‹±_O§Hhû»‰�O«#‘èéH$êuàei;j‘hצ#‘Ø¥³Ó²e[ '¾‰O¼=¨´�‹L¦ž„lú¡t±ÿ¾\Gãòw±±M/Å"rõJ&=†9UW”uöÀ¾+{X«û>\­«Ã»æ‰I\· /ú%†±ƒTmŸTšb†ç?õôƒ½_L]y‡òÄTb©5É¦ó• Ÿ èµË„•r|y"À¨;’ðž+® “X)Ëeð2 Õ·ú>ê²™Ž0+§«#dÙN{È–m5ï÷)ÉÁô“S/bË}‰|‹³ç»ûŸPGÎãËKP™” ö ­r9fNžï°¼¼½ŠÆØweª{=1#Ús¡òµ(¢.½…«ðEèRÀYﳓ\Fú6†É5Øösú±ºmÓȼvÌì™ÖD6|ê�_½L¤T>\ ð:%À+Þ^“ØöÈ‘l/žðæ¬Ø0)®Kã3•²\ÎõF<ÓP}«ï¡.›é³rº:B–í´‡lÙ'§æØr_ÂALÓ¾gíC¤ÏJ‡ê¡Á¾+{X­ûh÷1”Lúyl¿¼ùx¶`"òGŒÂ¤’cèvÀdrÝ6¤oc˜\ƒm?w¡î»ô´ÔîîÚžiM¨á“Á¼‰v½IÒúŠ�žœ±&àÅ×ס®®Ib•Hôt$3x™E]ßf÷EOG"±SG"±Ó²e[G[c߉„óFŠò=½—~høl¹/zÉi†aß•=¬ÕýhÛ0yyaÁ¶SèŠ(Ùhä ê ç`y£ýúÙ6RñA~ðS “lû¹ =1­lW 6â™Ö„>£à^»^Š$i½nrš,«:‰™Ž¼ÌBõ­'Úû/×£:ÄÎú÷M– áà–¿àóš¢é×é}N*bv+¢}À¹N áp¼ ¸q[Q ?4|¶ÜNNsku…bØ„ hOzJÅ­Ú�¦í&ül©ø ?ø)†I¶}Æn<ӚȆO&Úe"¥²HN)À£z¶U/©ê³²\æ�/³P}«ï¡.'ë"¨X:ùÏOOL¿0cÆŒ˜¨Ë/=ùo˜UÞ¡Ù×ì¸Æe;í!›¶Õ*âÝ—ªú*’ûEyeGêOIõðCÃgË}áä4§±V÷QÜl\އ)FS¯’F¯¡iã"Œ‡Åµ6ŒX¡Á϶‘ŠòƒŸb˜t`ÛgìÆ3­ 5|z½Z$z:’"À£'§29MÒ Ô놪#‘¨×q€—Y¤í¨E¢]O]¼å ùùùº"§d÷ÚªØHÏêý%êuƒéì´‡lÙÖ÷W€_+ ”ž^¢p9=ä1¼Œ-÷…“ÓœÆzÝßBxß'X¸¤µá[Àí³N‹qK*–Ý|mÄ϶‘ŠòƒŸb˜tpÂöiäWzq¨S’0ÞÄ3­ 5|fþ`:’œœæÒvÔ"Ñ®§n½r †º¸HìÒÙiÙ²­½!¥Ú ,>-Ê瀹dž`ó ‘¸.+ÛZÅAŸ-÷…“Óœ&íºÜDw ýëÁ϶áÄ0^‚¦#¡ä”¾wrÀz·Ñ®Ñ`}hP#;¦‚*žiMdÃ'zí2‘R™»õæTßêû@¨ËɺۉwN%q}5Î4žMÚa¼oê:B–í´‡lÙÖÖƒ¢‰éŽÊ ñwY«²,8L‰jšñ1'§ œœæ4éÔ½v*™²Cç©—ð³mprÊ0Ù’%zzJORiªù]¤ùR×6›”ùÕi©³ú]Uï—Ž¤ŠÞ¾V%UhzJ2䨕x½­=¯GªOúàQåÕ¬lÿà™ÖD6|ê�_½L¤Tæä4ç úVßB]NÖ½sú¦=2å}8rpæùŒ/:ŠƒIûš׸l§=dË¶ŽŸ�F6RGB‘œ.¦„ô°K8¿ÿ¬Ò‚ŪSv#¶Ü—ž³8tìrÚÝ£í€}Wö°Z÷ýSÉ܃1¯`NÁÃxìÙgðô[{pÙ#ò³møÁ1ŒOö(±¢„õmRQbE"¿§V¿«êýÒ‘TÑÛת¤ %ë²^Ìdæ¡x=R}R½¶\Se<ÓšPÃ'ƒy)íz)’¤õ5eX½¡R ðn¡â³�æÏz¿ÿ¬‡i¤Ö-Ÿà‹ê–دËIû)"ÑÓ‘HÌtàeu}›Ý—x¹ÇOF?:àÓüüÇk«¾L$§cæ¯Ãͤ}ÍŽk¬·Ó²e[Ñï߇D*ŸŽŠätšÊ¡:øS{¹…pýf--ÆÆú0"èCwó¾„ïr ö]ÙÃZÝ÷O%³°ò¼°ÂÁ„:q1øO%c?ø †a¯à™Ö„>£à^»^ŠÄHw»¥cïø{‘ˆüFß÷æÿe;>›ñò†Â¬ò‹ìGh×K‘˜é8ÀË,êú6»/ñr=ö|ö¶˜N%3t‰ÄN{ȦmED‚Z~è U$§/Uÿ%Ö<Z¯Ý÷…|×ywaDþSÈù ŠN´¡>0.ỜÊOÙwekußP` †/EkÌdrz åo` O%c NN†a2‡¥Ö$›Z6|êÀ^ä[)ÓßúMó1Zi¼ì)Æ” Kq‘–÷‰åÿXS'¶Uï'— +e¹Ì^f¡úVßB]NÖõaï¦âXwÞ-µíèÅmÔT¬Ã‡ü‡ÚºcA¿ñ¾©ëY¶Óüh[Z¿“M?”.vß—¾¦¢„ïŠvVbþô-1ß½V…ù¯–'|—ݰïÊÖêþ6ºkßÅÈGJÐëÍ@Éé äO›ŠüáãPÈON-áEŸÃ0 ãU,µ&ÙtвáSøêeÂJ9¶ª@Õ¢e¨¢÷À¦ùSPÒ|5_ü¿€ÁzÀ~Ê2a¥,—9ÀË,Tßêû@¨ËÉºÛØ_ü|áOhë¹èÕ½xá¾À}ù˜=i‚m·Lö5;®qÙN{ð£miýN6ýPºØ~_¢á„ï¢ÇÔME¯Ç|WϹMxqJ0á»ì†}Wö°\÷±yMßÁÜÀhî¾%’Ói–÷0fnøÊ‘®ß~¶ /ú†a¯b©5ɦƒ¦†O/°W‹DOG"‘åPÅr<sßßÇŽ,ÿ€±‹¶ Þ`?µHôt$õ:ú &sP}«ëŸD¢]O?R4ÎCi+%¡û°fƃöÓYXs°µ«fâ×ÊžÖíA¢]o§=øÑ¶´~'›~(]ì¾/ÑðvÌyWì¸Ér7ž(=§&±û:˜Ô±V÷}èjªD0Ä–ª&\ôáû–J|úiY¢ˆÝøÙ6¼ès†a¼Š¥Ö$›š>³�0‰D–CåŒ{à9, b8I °ËVnÁÞ:ãýÔ"ÑÓ‘HÔë8ÀË,ÒvÔ"Ñ®?r¤-¥sñfù)lÿìu<òwwc\`;BuUøìµç0{}µ²§u{h×Ûi~´-­ßɦJ»ïKôb“žƒÅoÅe ÊöGÇ zšê 컲‡µº¿ëU ñè‰ GÞ‘³=@ìÆÏ¶áEŸÃ0 ãU,µ&Ùtвᓽv™°RŽ/×"\½¡«Ô­W­;„ÚÚúØ21p¿Ô>ƒP—å2x™…ê[}uy€®zÞ|üŸÄ~?ÂØ…»PqøK¬ÿý\¼·ðØÒrÓ|ßu„,Ûi~´-­ßɦJûïË­„ïJ"¼³–ÔàºÆ컲‡µº¿‘è\C(ð(†ZŠÐÍÛ¸UÀTÉ^ô9 Ã0^ÅRk’M->u€¯^&¬”MuÄ3/šð’tªeÂJY.s€—Y¨¾Õ÷P—uuuÕ¸ÒÑ…aq}ÂÁ·°¤¶3i{õ2‘ªŽe;íÁ ¶Õ#âáŽBnŠeeÝPÐúlú¡t±ý¾ôœÂúG#O—Ž,?GAá.4wõ*Û‡í×Á¤Œµº¿•èÒVWŒ wÞ‹ÉÁ6D#WP_8‡§’±H*>gzmö'®g†ñ–Z“l…ÔðÉ`^ŠD»^ŠÄP'¼w~ó/¸#Ð ðò_û[ö¸Ÿ@½N-3ŸÉêú6»/ñr5}¿Ñ}YÈÇáµâ¿&º}KÔÇ“"ÑÓ‘Hè¸va籬ÐqXÝ<]Ùï'¤<6_®¥ù"¤<ŽD[övß—¾ÆBü|ä mVwëR2°I,ÇG›¶—lÙ¯{=1"Ú} %“~.¶‰÷� ÷~‹Æ+|ŒòV9C³1zŸ5˜ø•T|éi{†É5Þ¨çf{±Ôšd3(¤†Ï(¸×®—"1ÒQ€÷O÷=ù@lê)2ÀûƒXþãª8¬ÙPK-3Ÿq7¢®o³û/Àú×Fã¾§çõÛC,ðß„…Ïýòg,ë ±jGξfÇ5ÖÛi™¶-šÛt]p¿âÌdÔ`÷54+û¦‹<ž—°ý¾DΣri¾¼¬™AöÒf¼ðÎ8õÖ)û®ì‘VÝGº=@œ&×mƒ|'§L.B¶ßiG7)†Q°Ôšd3(” Ÿ:°×ùVʱåÃ;^’n÷{ø¿Ó×&¼û)Ë„•²\æ�/³P}«ï¡.'ë¢8\QŒY¯|ŒËIݺëp¹ì],o¼‘´}ò¾fÇ5.Ûi™´­È `Éà! Ž›[Eò.©¤Ø!Ö¯; ¼Q-’ØÝ@içÐÔlú¡tqä¾DûéÓÔ$¿sê[Ü^÷¹nä“89er¯µÇŒû±Ôšd3(¤†O/°W‹DOG"I^_‡º:Nyçt¿²$y¿Áu$õ:ð2 Õ·žêû"…ˆF"¨ÓÑI=¡§ÓûœTÄ.ì<–Ñ€¢C@P$ Ýºë^ÁÛ'uÀ¶ï”iM?”.¶ß~ç4çp{ÝçºmÐ;§µNM0Ì0.…~áä”±K­I¶“SB&ÚeÂJ9¶\4 ðþ)à ØOY&¬”å²¼&3P}«ï¡.›é³rº:B–í´‡LÙÖÙvàxº¹HfË¿ÒÍO99åwNs·×}®ÛF ØÚª&G d臆±K­‰ß’Óºõ¯%<õû……Ïá_óg$<ùΩÜO.VÊr™¼ÌBõ­¾„ºl¦#ÌÊéêY¶Ó2e[=C|©1*öOw¦ENNFïœ^þ³—7ò;§>ÄíuŸë¶A‰) Ã0¹Ù=ý0Ã0vb©5Évr*ƒy)íz)CðŠgÍÇÇ•šy•�O¯[§D»^ŠÄLÇ^fQ×·Ù}ÑÓ‘HìÔ‘Hì´‡lÛ%ç:ãï›ïn¤9B¯œœ .ïÃÆýÓ¼sz׫7c{Øþî¼ö]ÙÃíuŸë¶qì ðp•R`˜~ÙôR`›°Ôšø.9ÞïWîÂaeZ¸Ô'<õöR$z:‰™Ž¼Ì¢®o³û’´¾n¶|òÌŸ9¢¿`_s§å+$z:‰öMÛ:Ó <½«ßOÜ/‚µeç�;G™Ï¦JÛïK8ˆqL:n²Üñ%M¶wç•Ø~Lʸ½îsÝ6h´RòK<¥“KÍó@`ŒÝXjM²ʆOØkƒ|+åØrEÀ ÀûŒY¸9à ØOY&¬”å²¼&3P}«ï¡.Ðþ§þEó.ò?aRÉ1tGÙ7E!ËvÚC¶lëêàŠГWD‚j×�²ò˜^ÂöûÞŠ93–cƒ|×TÈæÕoc¨ÉT¶À©Qý³e_Œûëžm˜¸¨lW ãsä`HßkÞ.a˜¡b©5ÉfP(>u€¯^&¬”cËï'<ùÎ)xütfoKxöS– +e¹Ìxf¡úVßB]NÖE°{ÙDü¿ò_CyãY\í¹ÓÕUoAټߡèO%£Çnšë´ øÃéäéd‹¤uÕQàá½¢!³);åäTÐÓöo5A´µKÆááÂ#¸©¬²ö]ÙÃíu϶¼Xþ•R`Ÿ³¶™CbœÁ3­ 5|z½Z$z:Ib]Í.쨊¿o*9räK¬zù!<ðÚZ4ÚO%=‰D½ŽñÌ"mG-íú#Gª ¼ŠÒÖ[tµ«fâ×ÊžÖíA¢]o§=d˶(9]mÒµç ÚŽ;4÷¦ÈÈ}é>„ÀØ1©´‰Ÿœú·×=ÛF|äR~ï”ɨ§�OŸÄ8gZjøÌüÁt$S]õjÌù3<¾h3j´:ÕöR$z:‰z7â™EÚŽZ$Úõ4ïí¥²wñÎþKªwLëQSñ)^ü—øíª½ÊžÖíA¢]o§=d˶¾»üñ=wHÏw@ññW)ç;�ñ?gðËwž}Wöp{ÝûÙ6¬ôÖ ä”vÆïÈÀ¸K/ãžiMdÃ'zí2a¥ì„Ž0+Ëeð2 Õ·ú>êò�]Íf,zü§‘?øÕèŸàŽawàžƒh‹DÍ÷MQGȲö-Û:þ 0w0ó(°ìx¿|Ð�Œß=pý´ºÔ“S/vãÕâ—ï<û®ìáöº÷³mXñAÔÕñµÃJa| MSܤÆf<ӚȆOà«— +e't„YY.s€—Y¨¾Õ÷P—uu5åm)ÂÂSÿäÌ^º—EbšÐ›í›‚Že;í![¶uòd�—’ääÔ‹°ïÊn¯{?Û†t±;¾-`Êø925ýe'ðLkB Ÿ æ¥H´ë¥H2¥#‘˜é8ÀË,êú6»/ñr5;w¢*¤ÕGQ³m6(ï('ë†f+vÚC¶lëúà+\JÂÉ©'aß•=Ü^÷~¶ «>ˆFìå)e¿BOLi~S†q Ï´&Ôð÷ÚõR$™Ò‘HÌtàeu}›Ý—x¹œ…Ë?Åš5kb …„ŠOàéE%X¿¥µºû&‹DOG"±Ó²e[Ñï€}ו‚ÍprêØwe·×½ŸmÃ>ˆaì‚zð/Œ“x¦5‘ Ÿ:°×ùVÊNè³²\æ�/³P}«ï¡.'ë"¨<ÛÇXþ÷ýf1Nt÷iö5;®q™ŽivË ×o™ÏcÚ#ôéö�âäÔ=øå:¼ˆÛëÞ϶ÁÉ)Ã0LæðLkB Ÿ^`¯‰žŽD’)‰D½Ž¼Ì"mG-ízzrþüc”~Õ†ŠŠ •ìÄú…Ï`ꊭ‡/ µa ¦½±‡4ûKÔëÓÙiÙ²­†“ÀGß�[[u¤XÜïÆížrÝ<™UÃÉ©{`ß•=¨îÝ.~…“S†a˜Ìá™Ö„>³�0‰$S:‰zŸq7"mG-ízš6¦ûÔ)œ¿­ÕÕcÏÊEøý–±×mô|³  "i›ôlÅN{È–m5ïàtEyÇ41pÒ—b9ÅìTÃËøå;Ͼ‹ÉEüàƒ†a¼‚g" É€^»LX);¡#ÌÊr™¼ÌBõ­¾„ºl¦#”÷‚©wÿ):–xr*Qo;`?ƒ²ö-ÛJ59í8ŒåQ‡x@$/¾‹ÉEüàƒ†a¼‚g" ©|õ2a¥ì„Ž0+Ëeð2 Õ·žhï‹dðò>l)Y°fÎSBïsR»°óXV8Ú ûN$œ7 ä{z›7Î ±|ã¶RHm`èÅ@1[÷Ånür c/ú†a¯b)ÒȦƒ¦ H&Ú„@»^Š$S:‰™Ž¼Ì¢®o³û¢§#‘Ø©#‘ØiÙ²­Lˆ”M?”.~ùγïbr/ú†a¯b)ÒȦƒ¦ È(¸×®—"É”ŽDb¦ã�/³¨ëÛì¾$­¯Þ†’À›xmÆL–”¡¶å*êÔzE$ÚõƒéH$vÚC¶l«á4°ªEg0$E–GÊÝxµhýN6ýPºøå;Ͼ‹ÉE¼ès†a¼Š¥H#›ZEêÀ^ä[);¡#ÌÊr™¼ÌBõ­¾„º<@·ÿ3Ìs·Øï.ŒÈŸˆüü_bÄÿ37|…îè û¦¨#dÙN{È–m¥úÎi:ÈcH´e/à—ï<û.&±Óç7µa¥À0.å{ùÃdK‘F6ƒB©|õ2a¥ì„Ž0+Ëeð2 Õ·ú>êr²®[þîùÊÛnĺªÆô5ÛðżWPÒ|Ód_³ã—í´‡lÙ'§æøå;Ͼ‹ÉEìô9”˜Ò±8AeÜ ÙæÃUÀ…neÃdK‘F6ƒB™`Hd`¯‰žŽD’)‰D½Ž¼Ì"mG-íú#G¢©h&l8;@W»j&~ØÛ/‰ØÖÍ×N{È–mýøò p^3ÒùN ×,–Óý!Vëw²é‡Ò…î‹_„ar »}ŽLP+Û• ãv ›dÛd²§’S? “9¨¾µ ¡D»þÈ‘zš×âåyAüµ¢R¶­Ââg~ƒŸlE8|§7.Çâmµö—h×›éì´‡lٖـH7E 6áð½R¶ŠÖïdÓ9ÉÑ£Gc÷ïûïÓ­©¡ó§?ý ³gÏVJ ÃNøùt*ÐÈ](™ìC6H]ÎÉο8«¬d˜,á™ä4U‚Á Ư”²wä1î@œJÔådÝ-l[ô+Ü!ö¡ýŒåï0*P‡ƒIûš׸Ldz ;e³‘>:$üF%pÜl8_´~Ç ~(V¯^çŸ^)e™ wvv*k†q ê69½˜¸øºKYÉ0†ì𥚸rW^Æ ø.9uCbxàÀŒ92«O@˜~(Ø6J µËđ݅˜òÂ{¨ …²fÍš˜ÐrR¹ù k÷U•× <XBI‰Ùtss³²Æ˜¬%§ƒ½sºW_i&§Zä1ý%¦” fò]Ô[€aç¡'Vk…k'ŸFOQ;Ós‹a,¢¶½÷EÎOð·à»ä”‚sJ³ %¥n8&Ž:a“ ¡Z$ñr=ªƒë±ñ˃}7¶¬/C².Y—ÊqõF ¥LJIOâÕäôþ*`õóyP­ ë'¤Ï '—Ù†äl÷>a˜\ƒžœÒSÔçEØ@=N8Q`œ‚l‹lŒº•ÓÓÒc¢}f7á«ä”‚w ðÜÐ%mÉ’%1a²:a3Kãå:T,‚üç§cÆŒ1 BÞÄ“ÿ:+¾¬Ã‘ƒë0Ì¿`Ìüu¸™´¯ÙqõÚ„R›”JqsrJ"í_;õ`Hr@¤¢bù¶²¡ ø19uÃû¦’óçÏÇÎ…þ2 “Yö_Œ' ”8”žæn–Œ}-Ñ“R²-þ„q+¾JNÝð¾©ÄMÁf®C÷A›ªËɺ*ÿŽŸŒ~1ÉÏÏIAÁË(¬íL$§ã‹ŽÚúΩQR*ÅÍÉé`"='‚¬^¥<Tü˜œºá}S5äGÝÐŘar0éUz__ø:J"&]()¥<È–èé<'¥ŒÛñUr궈øÝ-w@ ›L¥H´ë©[ïÕº:œéÓÓÅEb—ŽÎÏ,)•âên½'•"­ ÷a@$-n÷Céà–÷M%ä·¸k/ÃdJ"8‘`† µÅüžñ ¾JN)0wÓ{ž”p¸éiH®Bv!A‰ºœ¬ëCåG…Xu ^)K}ª×V",,ã}SײLçG?dÐ_;$ : Ò—ÀINNuqÓû¦zŠï¶sbfp’ünb½ý­ˆôö·"©¢·¯UI½}­Ãøß$§nzßTâÆsÊEè%†Úåx·Þ'cû ¼‰(i¾i²¯ÙqËtlJP¨[ºY’šÊ“Ólašœî–†y@$#Üú �ý°æ¦ž( à N’ïMC¬ ·¿±‚ÞþV$Uôöµ*©¢·¯a¿â›äÔM¡s¢sc²þ™ªE/סâÓ1õÿùƒ2R vÿ6¯|ã&½‰O¶0Ù7Y$z:‰úüzúOv#“R)nNND"¹Ö§ld~k˜Ýö¾©„§Äb†a&Óø&9uÛû¦ž–!û¨“?³$1^áà_`WH£v`Åä°¬âpb}B'P¯KEG"QŸŸm’êæä”I·½o*‘ÝyJ,†a†a2…¥äÔÍPåÆ÷£xZ†ì#“;­È19YŒ âý·ø¼áp8&48LŶOQ\0 Áö¤í“÷5þ¬ÁÄ ™¤z!9öç:†KÀñ.à†SÈø7¾oª†§Äb†a&“ø"9•ïvºµû™[ŸŒä dÚ$R]NÖ™¼szÏtÛn™ìkv\ã2Û´¶/Uõ÷° ¹_”WvP­¦›{l ·¾o*¡FÜ|~ “ ü샆a܆/¢bz'ÐÍ£âÒ“7zw‹É\ËDPŠD»žÞ9 ^Œ’õX³fMB>ûh>&Ï]ƒjÓ}ÓÓù!9ýþ ðk%€Ó“ÂKéˆ$áGÜú¾©ž‹Éuü샆a܆/’SzßÔÍO&yZ†ìb-9 áæÙ³ø›jʘ¸ìÁÊ~ƒùéÿ.Y‰’Ó½!%€Û ,>-Ê瀹dž`ó ‘¸.+ÛZ…ÃìÂSb1¹û †a˜Ìáþ„À­6åêäT¢.'ëèÓ×±ðÿ÷B¡PLbOOW-Åâü‘˜VvÑd_³ã—ýœn=OLwÜPVˆ¿ËZ•eÁaJTÓ|ÿ”Ãì"_›à)±˜\…}Ã0Læð@TÆî-!ÜÐö ¼^‹µÛÛm›;ÑixZ†ìa99Õ}çôÜ3iNt÷™ìkv\ã2ßë?Œln)eJNSBz ØuøÏ ]QYÅ»a.ïÞŽCF…úÕk+öŠóð”XL.ÃÉ)Ã0Læð@TÜŽ`ÁpM¢—¼ñ%hîõF„'Gåäi2Õ»D&„j‘ÄËu¨xÞ îŒÒ+$6joGj5û Ü7u‰D}~^%ú=ðûø¶Ê<L$§Ó”€Ž$Б‹ïœFNKø«$É›ˆ’æ›Êv øïú †aïá‰ätËâ�Öƒ±_îãò¬œ3“»ÐÚã¡ÇLV d@b–$&ÖÕÕ¡ÎLoƒŽD¢>?/ jùY ƒT‘œ¾T ü—HXwtæêh½"9ÝÀâu›U¾+ˆÍ+çbü¤PÙ*û@3 ãf89e†ÉˆŠ»q¶õÊ€§.ÑÎ ÌûÝ6Ouc²%Ú„P]6Ófåtu„,û%9u ï†ÑÄàZID;P>o!ÊÂ½Ê ïínAu°…� KÊPÛruH?<0Œàä”a&sxâÉéÖâ2|M]+r­ «0í®i†½õ¡»õ�‚%Ë,GIÙ!´ty/HõêäTŠD»~0‰Ä.’Óë·Ì»íö}²l·®Bðë *ß%¤õJ¦FA0Ý·p³Côz–¿WØë]‘?ObÌ=`憯ÐÍ?2>†“S†a˜Ìa)*ÎŽƒ6zçô.ŒœµÝcONûp=´ã‡çaXÞä?[€‚§Æàž1³±¡éšgwòd/Ú„P¢]?˜ŽDb—ŽÎÏë4œ>úØÚª#-Àâ CÙÖ*Z¿“?”Æïœæœ‡žzrڃ撧7vÊÛn$|U´§_Ì{…ߟe|w|Ã0Œ÷ñDrúy {êãÓz$¤é<º#KçnŸBÉ#÷`ìÂhë‘#ÇÜFOÛ˜7e•gwò” ÈDP¢.'ën£:ÄÎzí¶Õ8Óx6öôÏxßÔu„,Óùy†ãýþAWæhrúù í9œì»BMhïöZ›h*š€ Îj~D‹âVm�S•§ÀÑH}±%†ñÞñ9 Ã0ÞÇÉé¸ÖuÓOû¾BÑè籡]ûÄäj¿®tQŽ"áðÎN¬%§T,‚üç§#ÄdÆŒB^À´G棼³G®Ãü1ÿ‚ñEGq0i_³ã—995GC¢-»ñ]¾Ò„ªÅXZ´õaêû| Í_–£ºõºÇ|Z=Íkñò¼ N«»(·šY/"°ïQ¾€Ó—cmKbB!†ñÞñ9 Ã0ÞÇÉ©ðÂuØXTˆ¢uG¢ˆv7ãË/jÐÚíµ$®Í¥ó0/øUp'º–ú5˜5ñ}ìk£òWØøî&´h§FdÒFüÉ„P-’x¹ÇOF?Šüüü˜Ä$?ÿßñÚª/Éé˜ùë ;3jI"ÑÓ‘HüœmŽ}'ÐÉr¾X¼ØzÒþôÐúìø¡t¸…–Òg‘G]øŸÉÇÈñãÄ¥ZÆþÃî‹òK^zzª\‹°U²Wc¹£u‰ïÃøïø†aïãþäôö”>q7òFäã™ü‡bO«.Õ¿±yy¸wÖN\òÒãåZôƒ:µ<Š@HDóŒ-PJÌ’Äx¹{>û [êôÉ"±ª#‘¨ÏÏ«\‰©Ñ”7ÃÀÿi¤ŸfÒCëw²â‡Ò‚ºÂ>…ñ¥_#Š>tV-Áô`[lùZÕ;xµüoÊvÞ zi;濹uI]”u¤ùJÚ?D0ŒñŽÏa†ñ>îONc]a PÚJ]â.¡jþ^apô²X~;ÖÍÒ;Dp©ì¼¬ÑêrÍW¸kœ]Pò§MÕåd]*?*ĪõJYê«P½¶26�—ñ¾©ëYöCrJÝzg–‰¿Z™»Oø]b›4{hýNVüPšD/WbÑ;_¢“~Dë¾lê*4÷ÝÀ¹¯bŠÇFëEä,Ê—ÿÏwQfkxÉç0 Ãx÷'§"¡»\õÞ©º$ (z›>ÁÔ’Sèëù_|ÕcSÉDiÛ…åK–ú ‹²wˆ?(2QLN#¨<©»ý°¼‰±QIÕÛ'ïküYƒ‰×ìÓûÐÐfé!!Ñ–ÝK/Â;çadžÎ=Ï{¥žz7ÓO]”™\$z8æWÎ;>‡aÆû¸?9žÇÎYé¾ë”÷D©·ÞÍôSeA¶"“Hm2©]O·°xÝæÄ€H1Y0 cÅÛD–¥0p_³ãëèü¼ŽYr:þ°ËÆ^êò¸î§ƒ¿ÃÃsþŒ`0¨’íØßÜé±®¯þê¢Ìä׺€UuÀ6‘ 2 Ã0îÆÉi‚“ŸÄœ’MÉ^Y5š»¼4O ÀW]”½ƒµä4„›gÏâoªî»qÙ…“_À²ŠÃÊžœœª9.gè‡"ï$§}¸¼ýÌ[ÂÕ¤ž¾Mt÷¾ê¢Ìä—•!àÅglåä”aÆõ¸?9ÅEl,ÁºÐ·HŠå®×bíööäu®ÇO]”½ƒ:9•¨Ëɺ*Þ ÏË#*WTT bÛj”L„ïkv\ã²’ÓŽN áR\:”ßX"·€ã¢|ÖæÞ«ÞIN#§Åîï�Qºˆ{?uQfüLT4£_µ è]wÅWHáä”aÆýx 9mG°`øÀ€HHÞø4÷z(=õSeAõk”j—ÍÞ9Í9;ý&ûš׸LÇö:"±Ø,’ÑQþî 🻟!þ‰õv}S³ã‡ÒA$§[ÞÅ‚Õɽ>6¯|“ç–`_«—"eã.ÊûŽ]Ä oýJÈøñuª< <WÙï#¤< Õ·q·^†a/à‰ätËÂÅX½Yý+羄¹%{ÑÚã¥äÔ¨‹ò>ë¸á±§ÀÞAüÉ„P-’x¹ïÏÅü?—bÍš51‰ Ü„Õ‡“ö¸oê:‰’Ó“'Õ]ñåèM`¾*1]Ö ¼T“þ€HZ²ã‡Ò!šè"žD´åó¢,ì±×"P½ý¨¦‹2=~ Kj;Ù1YáÛN`ÝQàaÅ/¨eBØy9þƒYô; Ž“S†a×ãä´g[¯ |¢˜÷»m{o+ŠH¸Ûµ]”ééð¬P{ß9ukÉéÞ·ÕÕÛPx¯Í˜‰Â’2Ô¶\Ej)íúÁt$?$§[óÊò^J_±$LV4œbSÏ€ìø¡t‰ÛÖU~}!ÑE<&­5(.ë"î¢èi^GÞ³×rÏdV6£+Â)*“nˆ¤ôû]À<ò7"M²Fáz¸wÃ0Œëñ@rÚŽ­ÅeøZÜ…/ µîÏ(¸sšÇÞÓìFóúúïm ËÃ=ËQé¹Q<ÝÕ¯6!T—èö†ÙcîûÝ…ù‘ŸÿKŒøñ¿b憯Ð-¢Ó}SÔ²Lççuö6ˆõ*Ðô ð ÅO<,ÖÑÃÔÈ÷À;"a½ßtÈdÇ¥=U4xçôžé¶yé=Íh,ÌÇÈb³º×GpJæ<…‚ÀZ±üjÛéÃ8O¤WøÐV`Öž¸? ®»E¢Üî± Ã0L2žHNõß9ÉÜ”ÍhóÒ/¡}(üùÌ(Ú¨ îHþŒ9LA`“XÞrH4®üôÁNÈ^d"(E¢]äH-šKžBÞØEX±ý@ÿúšm(œü,þõ ²§Þ¾fÇ5ÖÑùyžNàiÅ?Ü/ÆÃ"O9{˜+–ǧŸfì!;~(Drúy1JÔ+]ÃãR¿û#Ì[ŠýÐá¨×G%–¾¿—“λ—ËÞÅòFî/Éd |-üÌ O_iŸ˜2 Ã0žÂÉéç…¥8  îB¡Cؽ\$]k„n!\ùÞÿ2¬9ï‹(›ý1¹W¯#XKN¢©h&l8;@W»j&~ØÛ/‰ØÖÍ×É)As n> |$Äãß+ën"Xìíz¦æäÔàStbÿÂQtÂc ]$Œº5ËñnÑfÔ‡i:¬khþ²Õ­×9`\AÇ`u˜yØ+üQR/$a²vÎ0 ÃØ¢býwNqc?Ž+Ɖ¼ÑÓ‡ÃXS¸EëŽDínÆ—_Ô µ›3S§P'§u9YEÍ_ãß'pZéFŸJfÖÌz}߈r9þúû9XÛrK³¯ÙqË~IN-úONCµ[°8$¦•]T¶ó·ÐRú,òòF ÿ™|Œÿ1N\ªE`ì0ìÞ¹(¿Ä/#0î¡û;`ëqà·uâï%Q¾ \åü€ŸaÆõx *Ö{rZÚmKçïPvÙCIÝí3(}ânäÈÇ3ùa|ÑQ\ªcóòpטּÄÁZrz Ûý wˆ}h?cù;Œ Ôá`Ò¾fÇ5.Óñ¼Îuz¦,ëÑ#ô¹÷6¢Ñ;§y¸gÒ*œðÔR7ÑTôÆ—~-îs:«–`z°-¶|­ê¼Zþ7e;†q4×òÞfà9eôðtç9õNo †aïã‰äTÿÓŸcRÉ1o½·Õ÷ŠF ´•"ùK¨šÿ‚{Åòe±ü6Ê;ù驽HdB¨IbÝîBLyá=|–4•L(1µLB¶T%º©'E¢§#‘¨ÏÏ«4PwÞoDðת#-Àâ Clæ~ðœëæÉ¬ï†ôäôl8¥­·£ ^šK½\‰Eï|‰N:÷^á˦®Bsß œÛø*¦xjäaÆ/ÐܦG;ãOF%4PÒ5MSJIêºCÂqrÊ0 ãz¼ñäty§ÔÁŽ®ž”ƒ[÷ÁåªðNÕ%qîQô6}‚©%§Ð×ó56¾øªÇFöÖ’ÓzT×cã—5únlY_†e]²Ž“Ó†ãýœ®Œ'§4j¬ü¥XNñ ,áEèÝäHÏ„Ê×¢(@ pÊóØ`HD/Â;çé4ž÷,J[DôÏ0¤· ˜¨ø†ñôã—HP£"ù|e7p°I™wYBºÓiš©—}Ã0Œ×ð@TE$Ò‹žpÊ×! <šwòP[·÷’Óèyìœõò´Á¼'JÑ⥑‡=Õ¯6!T—“uT,‚üç§ÇldÆŒB^À´GæÇžn9¸óÇüK¬[6wë“jrÚq%Ê£ÅË© áE¢ÝÇP2éçâ߃1¯`NÁÃxìÙgðô[ÚQoÝN/.‡‡çüY3Òøvìç鯘,ÐѪò/B~+Ê‘NàWbùþJàé: ¬l;T¼ìƒ†a¼†¢â>tŸX…I÷äaØð±(˜ó F=†gŸŒ·öux+A¶!8ùIÌ)Ù”à•U£¹‹'gs ËÉiàßñ“Ñ¢   &ùùù1)(x…µœœêpT†Ç¾ã ùžj6Î ±|ÃÂ1Þ @Û†)ÈË{ +Ï‹ë§wP ê‰Þ;XÞh×ä:"rÕÛâªç~düÈíkÀ³Àâàp0íKààÀY‘‘ÒháíÀÂ÷Ø'§ Ã0™ÃýQq´ž޼±o£’¦/ wP§"Ô+½ÙF£çFë­ÅöзÞ{êëaÔÉ©‰v=uë½ZW‡3}zº¸HìÒù!9UÓuh¸$Ä.kI¨Þ » ŒÁ°ñ¥h}áerz åoð{š 3DŽœ�ö‰„”èþøc+µ²q(9ý“ðCvÀÉ)Ã0LæpT !0üGÊ(‘„’œF:P>s6¿§É %zBhE"ÚskV,Áü™30ãµ·P¸¦<ñ¾©D»‰Þç¤"~ »X¸¯?#¡w¿Vvô?5MÑ]û.F>R‚æX’NÉé äO›ŠüáãPèµ'§ ã&Äwêði`Ú!`Ùñ¸Ì¬+Ë4BïGW”m‡ˆw}Ã0Œ÷ð@T܉ÚÅá‘’SÔ Dr:ùIL›>Ã\î±'§ƒóý÷ßÇ’•(k˜¡Bõ)“G‰º<@W½o>þO±ýhÚŸ_å?ŠÑ?ùibthÓ}SÔ²ì‡ä´÷ð[eº= ˆ5Ýoª<†'‰^CÓÆw07ðš»oŧ–É{37|åÁA‘‡æ9r¤Rbç¸Úü³ÊÇ ᨛ¯Èc2 Ã0Î㉨8Úý6¾ùe§D@ŸZ&oÌllhºæËî±K–,‰ cÖ’Ó°ýÝñ¸ãŽ_`Á¶SèŠDãúº*ÔΉ½'h¼¯ÙqË~HNi@¤ÉÀö ñ.½RŠ�rÝ `| R�I‹ÃhÏ Ü¶í¹†o»ýÛÛ£³³3fÏGUÖ0Œ3\¾æ+¾A+ìJ¯¤ÿƒ˜y\†aÆy<ßFO÷MDèoW'ºE çW(°£�=f訓?™ªE/Àú×İGÞÅŽ$}µ«fâ׉ýî›,=‰ÄÉéÖଲ¬ÇA‘¸6¤ùþ©60ä@ÑÝÌž=úÓŸ”Ã8„ð'{O ¿“P€}Ã0Læ°³ƒÎÔ5ŽºÈ1CÇZrÂÁõsðÀ¿¾ŽM‡}¬kæ"äx¿]µ7±ßÀ}“E¢§#‘ø!9ݶ}§ÿ¤‚&À_Y|f©õ;^ñCòG¦\ƒ^I ë¦WÆxÅç0 Ãø×'§«W¯ÆóÏ?¯”rzò‹×í(kBuy ®Ÿ,ÀÂ%¥¨ ß‘ú2ÆÄ¸%•Ën¾†û¦¦#dÙ L¸5þþÍ/øÂA`š”jà±~âiš)3=´~'~(ÈwÑSÄ\ƒß›gü†W|Ã0Œp}rJ y¹Fsss,À㮽CGœJ‘h×K]l´ÞeóñÛ¦ÇFë]¶ê T«ô„v¿tu~HN©‹Ýž‘œ*>B-£j€“C˜ÆWG¢-»ò]4q.ÂïÍ3N¹ ¬»¢™OY%­í@•øk^ñ9 Ã0~ÀÕÉ©ü>W×?~|N&æv£NN%êò�]b´Þ{0¦à<—ÿ�~ñ«Çðô[{p9:Ⱦ)êYöErJˆõë À²Pü©éLñ·ôœ‡8þÖïdÚ¥Âùóç“~H’¾‹~dÊEôÞ›§:á’»ˆ\Š÷Êþ@O¶rrÊ0 ã9\•œjŸÊ�'Wß]¢Ä”T5TG3©c-9í­waåyDÄ¿ŠÀTÌX³ƒïðh½\¿e>2fÐ÷(ËVÑú§ýP:ÐRºô}¥.ùŸ~ú©/îëPïÍS÷^zŠJõ‘‹Ýœgàä”aÆŸ¸*9¥À… d(¨ùàƒrú½KJB) ûꫯbõAuAå\í*˜.ê$A&„j‘ÄËÕX3c†Y„m!*×!\€@è¾\ñ<Æóh½º4œ>úFƒ­:Ò,n€mSÉ8í‡ÒAþ¦ùZéséG6zbüÔSOáüÿ‘T<Š/cÔ­wñéd_óù`É!`¼M¢üõ^'PãFŸÃ0 ãW\•œR§d¤PÒJ Y.u‘£'¤”þÓ?Q÷ÒäúàQ|­Au&1KãåzT¯šŽûþu!¶ÔS™’ÓÈŸ6£ÿñ!¼¶¾:±ßÀ}“E¢§#‘¨ÏÏ«Ð<§Ò?èÊA'§²¯™øý‡6òY²·‡Þõ“ðkŒ]D�®+ËZÚ¿^‰k·Rf†a¼ƒ«’S£§jñ{€G]àäR#ÉÕ÷ØÒ…êL›ªËuû°é÷Ó17ðš»o¡"ð$†Ýñ�fnø ÝüΩ.N&§Zä1݆YRF=BüÞŸ®®Sïú¥ð¾ŒÓD¿Jë⃳­»¦¬d†a<ƒ«’Súå]/ ‘BI›ß»Æ¥àñ;§Ö :3J µË@ön*F À–ª&\ô¡f[ÞzkµuÇÞ«4Þ7u!Ët~^çh+pì»ø(™j9ß ,ÞlAâÇEJàÖäT¾W©•\HL%ƒù/þaqšÛÂ×<«øNN†a¼‡«’SÂèéxýÂXƒêL&‚R$ÚõÔ­÷zÕB<ºp'¶×ÔãÈž?ã…ûþ÷å àñÉl?¤ì©·¯Ùqu~¸§—Dbjôz×Í0ðíëbçÖ䔺۫¿§Rríi¡™ÿÊÎ8Y·ÞkBq¼ø¶OYÁ0 Ãx×%§zOr)1•˜xŒ5¨Î´ ¡D»þÈ‘h,œ‡ÒÖ[byÖÌxÃ~: kÖ£vÕLü:°CÙ““S5Ô­wæQ`™ø«•¹û„ߨ%¶¹­l<DÜšœÒSAõ÷”$W»±R½×Æ.h´Þ¹'’DRËÚ L­÷lØ!D)2 Ã0.ÆuÉ©œ’A-¹:7ž^‚ÊS1X‡êM&‚u9Yw ÛM +‚h«+Æ„;ïŸÀv„êªP_8‡§’1`°wNï9Z»²íP‘Çt#êïj®L«MPÉ—1Œ]¤:•L_'ð+¥¼2y¶:†aÆ…¸.9Õ>}Èõ4´ *'§Ö¡z3J µËÄ‘ê xóq%ùG»p*‰õ¿Ÿ‹@àc”·Þ4ß7E!Ët~^Ç,9¥ivÙøî—<®‘ÉO™G ²ïbì$Õä4*ä•Ý¢,d?:e†q=®KN dHxÚ8ê•ëÄ:Òž´b”,Ƥ®U»ö¢ÖH¯ˆD–õ>'ñ:§ÃÀe›ºíF¦üP:ÐT*¹0p›d‚ÊÉ)c'4Ïéº+aSË Å'Ezomšó”a†qW&§Èð“‡d(A¥Á¢89µŽ:ùS'–R$z:‰:‰’ÓL’®Rÿà±½ã{U†a†ñ.i%§zÅNôŽïeñt=Ú„P]6Ófåtu„,û­¾ÝŠŸêÙîkñKÝðw)·è¹íºU½6è)é5¥—aƳXnÉ©ñ7 ²Õ"±ª#‘Ø©#‘вÁöóH$vêH$vêH¿xz÷F¢]?˜ŽDb—ÎoõíVüTÏv_‹_ꆿK¹Co0QùÁ||Ð!Tù~éýUÀ&¡g†a¼‡å–œTKÔöPu$;u$Zv"¸Ó~‰ÄN‰ÄN á·�OïÞH´ëÓ‘HìÒù­¾í&Ýn¼ZüTÏv_‹_ꆿK¹CGk¿o ù­(G”‘yﯞ®ÂʶCÅ.Ä0 à Žå–\ÝøËàZ»L¤ª#ÌÊéê³²SÁÙg¦«#ÌÊéê½²ß<º³ë6Ófåtu„,û­¾íÆ®ÀÐOõl÷µø¥nø»”;ܾ<[,n·Ó¾þŸÓôø÷@g;ðÅ eã!ÂÉ)Ã0Læ°Ü’«u°­^&RÕfåtu„YÙ©àÎì3ÓÕfåtu„^Ùo]Ùu›é³rº:B–ýVßvÃÉé@ì¾¿Ô —r‹#'€}"!%º¿þØ DãÅXrú§KJaˆprÊ0 “9,·äÔøË Z-«:‰:‰žÎ‰àŽŽ+Ñ~ÞPt$;u$õ:¿xêëQ_§‰žŽDb§ŽDâ‡úîèD HÒ¡ F¹å³âïPàät v_‹_êÆO÷˜„ÛÀáÓÀ´CÀ²ãq™Y ,V–ŸÛ |tEÙvˆprÊ0 “9,·äÔø›ÚVu$;u$=ÁW¢ý¼¡èH$vêH$êu~ ðÔ×£¾N)=‰ÄN‰ÄõMO)Fì6‹d´G”¿AáÒÄ÷Ô‰¿Eb½|¢a¯'§ÑîKèè¶wøP»¯Å/ßy¿\38W…ÏùgÅ7èŠð;ÔÍ×ä1†aç±Ü’«u­ ¸SÕfåør=º;.¡[D·uéשàÎì3ÓÕfåtu„^Ùo]Ùu›é³rº:B–ýPß'O«•Ñ1£7ùªÄtY3ðR bÉ´°+0´¿žûpµ®gLóÎ>t–¿‡÷CÝJÙ쾿|çýrÌà\¿�üoÅ7hå=@é•ôÓ"Ë0 Ã8å–\Ýø«ƒmõ2‘ª¸‚ÏVmC½>¾¼ ås?B(b叿e§‚;³ÏLWG˜•ÓÕze¿xt=f×m¦#ÌÊéêYöC}omÎ+Ë{CýÁÜ’p<@l8!D5¡ì í¯çÂ[aÎÊ¿  êËæ1gì£prªC_âGG»ðÃw‰IáOöžÎÚh?FØåƒ†a˜Á±Ü’Sãod«E2¸n–NšŠ�ŠÈÀN– žÃÈÏÀšºô?“DBËNwÚÏ#‘Ø©#‘9R]»ª tÉû ¦#!üàé݉vý`:‰]:?Ô÷Þ‘ ^š¾~¡r‹uô05ò=ðŽHX/Ç7µŒ7“Ó5ü\|f† `ÿ刲=Ø}-ö×ÍÔÕ¶ŠôÓ„hGâGG»ðÃw‰qaŒ×Òì]ÏÉ)Ã0Læ°Ü’Sã/ƒj‰:ж®3INß™üß!>ón<4ýϨ ¥ÿ™$Zv"¸Ó~‰$-ÝÕcXµ¥ÆX/8òå Lze êôtªu©èH¿xz÷F¢]?˜ŽDb—ÎõÝÓ <­p$÷ï÷�g/�sÅòøã@ºÏí í¯gƒn½‘oѸúw™÷#ŒD³Íï›v_‹ýuÓŽ-s`åfmÒÞ/›WÎÁØ{œœ2iq£ ØÚšº¬kv¦9µŒ]>ˆa†K-¹ÖAËàZ»L¤ª3êÖ[·gV¿8wÜñ &‚‰®_ê}“c­ìTpgö™–uïcYr÷XùX9çQüxF<9• zÜAÊ~ ðèzÌ®ÛLG˜•ÓÕ²ì—ú¾&‚ÅÍ'NÇ猭» tˆ€°Cü¥’ÒAëw´åTÉD=G»Ï lÁcÈösL*>„ËgúÚ}-ö×Irºþ=Ü“'>ó^Œ{g/.s·^& ’ÞmOQ¶rrÊ0 ãz,µäZ­¶ÕËDª:"¹Ü‡êmË0uäÿİ{žÇëŸíÂaƒm“÷³Vv*¸3ûLË:Ãät3Þ™ñ8~,>sØð'1}å.„´û*eÝãRö[€G×cvÝf:¬œ®Že_Õ÷m‘ˆŠ$•¦”9y=ý„TÖïhË©âl=G Wc9uåßÉ%UçaoGÞdì¾ûëF¯[¯¨£« ±óòÅÜà)[ß7%|õ]bekM¿?HE89e†q?–Zré eP­‰U‰äÈ‘ZT|:ù?þ;üãCÿ…âŠZE3ÔãÔ9ÜÑq%ÚÏKK·gC¢[¯äÈ‘ÃØ³~~sßß㎑Søë¾Äˆ„Iû*"ÑÓ‘HÔëü੯G}R$z:‰:‰_êûŠHHîë÷$ˆò±~(‰š<–D[Nçê¹ÝM0sÌ7öu›¯%¹Ž®övíµûZœ·AQG-eX0öG±‹ëÿæHòî—ï38?\^nN~§ôÎPI»ð9o5ëodyP6†afp,µäÒA›ÚVu$1¢×°éÝŒ¸ãbä¤�þZ]߯¡Þá}ûp@o?zZ$z:'‚;:®DûyCёĈ^Ƕe/`äwàÇ¿Ï*õëÚ}Ó‘HÔëü੯G}R$z:‰:‰ê[ûΩVV }ºÈcH´åTq¦žo!\õŒ~'î™ôgÔ_¾¥¬—DiÞ‚59=Z¯¨£šQpÏ>î¨ këÈ>üð]bR£ƒÞ% §‡Eâºã¦R"éú†aÆ:–Zr­ƒVÙÚ€;UqäðN¿üK WÞÓª<¬Ý÷ šKÿ’ÛSÉ.ǧ³ÇázOkI%*ÔQšÇÕ)û-À£ëq»x ¥˜P¬;+Ö]:D�yøµXwUÙÖ*Z¿£-§ŠýõÜ‹pÙ,ñÔ¿§ý2&w§’‰^CÓ†Ù£;8”Hܯ]à ~ç”Išçtê ‘¤ê<‚ïIká>`™ðAv®Ïa†a¬c©%—Ú(ÁQ‹dP]h–=õ%ˆ3‘Ìá©dªÿ‚w'>ª:Iûö4ÞW#= awÝ0þgëAá*€•Wô»ðÉ«]óœjË©’»Îá'§‘ó¨ZòdâGǃCÝLüèhì»r‡h°Péñj`šðA$ÏíQ|„ðGüä”aÆ{XjÉ¥ƒV'2„:¹ªŽDÒ¿î ¶,úC&§Q®(ÆËÝa?~"18T¿^ì{8ˆE‹×ñT2LV¡'§#(ÝP!’Ñã瀄nÂ^àdšOÈ´¡¶œ*ŽÚuä*Zjw`MÑûÞGÑšr„Ú®Çõ\|ç4ÚŽ²—FÄŽk*Ãy*&}º;— Fì}éŒ=²ò˜ Ã0ŒóXjɵZШ—‰Tu„YY.Ëî_z:‰•²ÝAŒ<žÙgZÕ…*>ÀK±)t‚:•ü#O%Ãd™Þ.  P¿ZÚw«øŒ_Ÿ�”Ùe,£õ;Úrª8c×4Jï&ü,é;“¼Ñ˜Vt�a¦“±ûZì>^jð“SfèD„c©‰è‚Cñ'§s€m—ìKL†a˜Ìb©%×…êÄF/ÉIEGÈr¤ëÔî\‹ù3g`ÆÌùXSÂöêÆûª— +e§‚;³ÏLWG–#§ON%êmÕËD*eð˜tèA‘J¢·€•"aw8Ó«¬´W%§=ÇP4în䜄·WQU[P¨µU[QZ8 ùÃïÅ„’¶ÊNù/ûÉ»â׋bÓaÅüz[7e¤üÎ)Ã0 Ã0ÉXjÉeP(µH¬êHb£9îû�üøŽXp¡–¼‘/¡¨æb¢;kò~q´ë¥Hôtv1t<:®DûyCÑÑô1]-‡°sMfΘ™ó—`Åší¨®#Ý!\ëº)¼tŽ«¯·»nÆNÜ“œÞÆõªù¸kä(×V$_—ö`É£¯¢ì’Nø/û‰ûõ :½?¤_··VœºÆD�®+Ë)Ñ\³·w=Ã0 ã�–Zrg’ÓzN|Œqywá¾ü—° PŒUkÖ`ÍšOQüÁ"·áw`á_«ì+Ñ®—"ÑÓÙÄÐñè¸í祭;¼ŸÌ|LgDпÇ}Oþ7>u`.X»ë†É ::ãsªŽßÛß½Î=Éé 4þ_<½¡5öã>\*{³Êÿ¦”íÁîk±¿n¢ ¿>²`V+Q !ªAÕ¶Ò„_/9íî¢÷¹Ì=l¥)eRµ @™ÉÔ3 Ã0Œ;°Ô’kƒBu‚£^&RÕWPüÜOqߤ?%ÞÍRëéÉàîOþ ¾T†KB¬3;®yÙ©àÎì3­ëªq¢hòòDþK (þTw"À«­Â‹^ÅÄÑwãÎ Ÿâ¯5!}ÿLB¯Ìc•3§ûÿ°ä|<Aí8Œå‡ ½ÈÜ“œv#(tš˜H¨Ó‚íJÉœò_öqUsFaäÜïÜÞÂ¥}Høu»`ß•;Prú€â R³yQ†aw`©%—^¢Nlô’œTtèkÄk?yïn¬‚Z_.GÙË QÞÙ§£38®À¬ìTpgö™–uû‹1ç®1˜[Þ>p”^*®À¾%Ïà©eåuJY½L¤Ræ�±Jl*VăÀ“'ãå_îæ·Ò³4{Ðú¡T±ß®ûÐY¾óªT/Úà´m˜…ûÕCE §ü—m¿^8âylhûAY¡CôB¯Ûû®Ü“S†ab©%—Þ(ÁQ‹dP]ÝÌøI|S]}Lª±fÆT*êõÏ$‘вÁöóH$éèú ñ“ÿï»ØÒ×Gv/ÿ?³{ôtªu©èHð«´žþyðy°ëðXp½¨¹�\¹ Tž„ʤ²Š#v}ó–Ïߌ6ݧƒ½¸ÚX‚I?{U×ÓœäÕ�'ü—­DBŒlšzò¼�Á°}ÕÙwå‘ËÀº+¯ˆ„3U¹aï×a†q�K-¹#Éé‘]XñìË(Þ_o Ú†wó§c墱þ™$Zv"¸Ó~‰$]$ÀO”ibôôD,¹2€ =j]*:‚<Æ*48ɇ_õPÒ$’Qõû]»ÅW·Á¦ÀÐUÉ) zÞƒWT¢­W• öžCåÒW0yƼøå­I3À'ü—½ü å¯,1OÊ£­ØPðöÛ8\/û®Ü¤K8ž†KB(Yµqdp†a&óXjɵA¡:¡Q/©ê(¸;¸~¦ü~kb µþH]Ö/ü5~6§*ø&éTË„•²SÁÙgZÖíYWæ ¼nB–£mÿÂJÐÑi—‰TÊà1V‰ˆDtu0ë(°ì¸ñ÷¹šøò"1U ·)Énr*’Ñ+m8ßÜ5‰Ð` Ã)ÿeQÜlüó7~£?"oä[4–LMøu»`ß•[ܸ|(üŒ|ß]ÊÌ“"I姤 Ã0žÄRK® Õ‰^’c¬;„ª²rt+Áê‘#µ¨øø-¬¨<úÑSnßÛ¶³&>‰§§NG`yZ{£ ]|?ãÏ$ÌÊNwfŸi]·ËßÅÆ¶]}Ýžµ(™ôž+® “eõ2‘J™<Æ*»Ebªµò‹à;eÛla]G.t$§qÊÙË-„¿ü4á×ãDc~}éÌi˜±àÝ„_· ö]9Døh¯¾¿!ùõñìû†aÆ:–[rjüeB£Ijº<ùZâ=Ó8QÔÕõwí•"Ñ®LG"ÑÓ9ÜÑq%ÚÏK[wx'>þï…¨ j¿¾Û‹gc⸧1uÆL,/oIJêÕ"ÑÓ‘HÔë8Àc¬²7¤ ’Œ‰ë1½i@3Œ=vÍÉ©1·påìÅÄŽq¢ˆD2÷L™}Wîpýð¿ó\°U”— _³û°ç`–H\wØÔ›^ú2†aÆy,·äÔø«)’ÔtzÉ©õäJ¢§#‘èéœîè¸í祬;\…²Ú9]ëé‹G|Éëã"±ª#‘¨×q€ÇX…ºõ®:8ѓήÀлæäÔ˜v§2’³°ïÊ:Zã~ažð;Òä¶ë•å[báC‘¨Ú'§ Ã0™ÃrKN¿Yb“š.ĨGèMÖDZSG"¡e'‚;íç‘HRÖUðäŒ5‰Æ6I§‰:‚<Æ*×oÑ3²ÔéÛÇû '§q NN™ÌñÃà±]ÀaÕƒù­ ñ'§Û€÷�›mê×ËÉ)Ã0Læ°Ü’Sã¯Ndur“šŽ“SC'§Œi8 |ô[S`±"SZ†“Ó8ῆ'§Lf9pªPõ|Ëã.eýP±Ë1 Ã0ƒc¹%W7þê„F½L˜ëâÝze3PŸîqS/;Ü™}fJºpÓ¡Äô1õ¶„ºœ®ŽÐ+s€ÇX¥áx�—’ˆ ’“ÓôqÊ NN™ s[øžs¢ÝR¦­ÚZL¨ŠÄº.ß1°Ë1 Ã0ƒc¹%W7þêÄF/É1ÖqrJèê89e<'§™Å)ÿ5489eü‰]>ˆa†Ë-95þ2¡Q‹$5ˆd¨SºõÊät€^³~(:‰zxŒU޶Ǿ çåûþALÃ]Éi=­ 8v…ξ]M•ƒØRÛŽ^ÜFO¸[*p¨­ÛÒ;¸Vq NNÂÉ)Ã0Læ°Ü’Sã¯Nd¤HRÓÀ¶ÕAUˆ–÷ ©b‹ð¾Àª5¢|k>ÂW|†íÕõÊžö%^Rœîè¸í祬ãä”ñ0Ñ>à\'Ðp 8Þܰ¡k»’S5·q½j!]¸m=·½º GÞ‘³1{Ò<Ûœ›?Ç ÿ5t89eü '§ Ã0™ÃrK®nüÕ Žz™HU\Añ¤_á…eè‘íÕýoã¾;~†ü)ÏbÒô ¶×§{\ó²SÁÙg¦¤ãn½ŒGim^ªêäHîå•©?%ÕîÀÐ~»¾ÆÂy(m¥$ôBG1lÔR„nÞÆ­Ú�¦E…8„SþkhÜ@롸{dE$\‡E…(ÚX‡p$Šhw3¾ü¢­ÝÎÍ{ʾ‹q»|Ã0 38–[ruã¯Nlô’œTtèkÄk/ƶ(߬C`ÔðÓŸáà‘}¨]ü:u†û&G`¥ìTpgö™)ézÎâбËÅʵ×oFÑÒbüþ³ >Rîæ}ø¢ºÕzû*¨Ëf:B¯Ìc•ï¯�¿V8=)¼dmª5òm9Uì·ë[h)‹7ËO¡­®î¼“ƒmˆF® ¾p–7:÷^ªSþË6nŸAéw#oD>žÉ㋎âRýû›—‡{gíÄ%‡ú<³ïbœ ]ŸÃ0 ÃXÇRK.´Q‚£É ºú-XôëéX±u+>›ÿ+üÝß=…àŹz¯=1ë™ì«‰žŽDBËNwÚÏ#‘¤£»ÝRбwü=~2úß0ú¾Ç0ÿ/ÛñÙŒ‡pǰŸbVùÅX°o´/aUGBp€ÇXeoHñ»Å§Eù0÷8ÐÐl>!×CÀee[«hCm9Uœ°ëh÷1”Lú¹8ö0vá.„{¿EãÆ>FyëMe+ûqÂÙJßW(]ª½„ªùo¿Þ+–/‹å·QÞéÌÓSö]¹ ½Nð7å}ök˜Vº>‡a†±Ž¥–\:hu"C¨“ëºzTÿå-<þã;0ìŽ_à…âèíjÄÆÂ�fÌùۛ훺ŽDBËNwÚÏ#‘¤£ëk*¿ŒY{ª|dO1¦LXŠrZÞWŒù¯–£Ód_ÂªŽ„à�±Jl~A‘˜îÁa ñwY«²,8L‰jšïŸjCm9U³ëH7®tt¡Gõ40z«·z:H8á¿ì%‚ËUàªKˆŠ½MŸ`jÉ)ôõ|/¾Š`Ø™SÙwå=ÂÇì< ÌÞܯø)¿¬ŽÏ»üµM¯}§ës†aëXjɵZШ—‰Tu-×UW¡£«Gõ4°·z~ÐÝV–Ít„YÙ©àÎì3-ëB¨Z´ U}¢|�›æOAIóMôœÛ„ߌ Âlßt„^™<Æ*ÇO�#©£«‚SBz ØuøÏ.'=´~G[N•ÌÙ5M7ó–Ôv¦Ý•y0œò_¶=³Bž8.[-yO”¢ÅÆ9(ÕØ~Œû ¹M…Oy\ñ¦²X&üÍ,]äñ†aç±Ô’k´:±ÑKrRÑúåÎú�«ö×n«^&¬”íbäñÌ>Óª.T±³FÞ•êúånŒ]´õ&ûʲ™ŽÐ+Ëka˜T‰~ü>$P™tˆhpšâ/HbEe­ßÑ–SÅ~»Ž¢§y=^ÔýŽ ¹g2 +›Ñ±?E¥ãÛ‰ÝÇC´ ÁÉObNɦØT; )«FsW¯²‘ýØ~Œ»þeOpÿ.á_„¿Yý °M$ŸG.Å“B¯|.Ø@=ðKá+^: å ðt}Ã0 cK-¹tÐ2¡Q‹ÄªîȬ¬Ÿ‘y:Áݰ;pOÁrT6w˜Z…D¢]/E¢§³;ˆ¡ãÑq%ÚÏKG*`ÜÏaa î¥X¶r ö*sÄ훊ŽD¢^gwÝ0¹AD$¨ågJPErúR%ð_"€ÜÑiïh½ÚrªØo×4Zo>FÎø›Õ XpJæ<…‚ÀZ±üjÛ{”ííà ÿe/±}ñB¬}›ü£ÄõZ¬ÝÞî™'ÊŒ»8rxG$¤í~߈Ü íIàÍÖôýPº>‡a†±Ž¥–\:hu"#EbUw¤n= >3Š6ŠÄ+ ’7ðÜ¿ŽG`“ö¶ÂÍ»§$íz)=ÁW¢ý¼ôtµ¨(ùköÔ)Z»Žk®ç�qÚÀP[Nû횦K©ÄÒ÷÷àrR¶Õ‡ËeïbyãP;ã„ÿ²—v †ÇŽ«•¼ñ%hîu&=¥ã3þäöu`Ë•ô{`´Ÿê~P I×ç0 Ã0Ö±Ô’k´:ÁQ/©êè-µŠâùxåãŠD£×—£löÇX¯<!”¨÷U/VÊv1òxfŸiYWù 6VÇŸ<ôëoãzõf,¯8œØ¾_G]6Ózeð˜Áø:L3§ÏÙ¿ß*˃¡õ;ÚrªØo×" Ýõ9öwÞKj¾EõÚJ„É¿b8å¿ì£[æÌÅG6÷?QÞü)Ox]hUe#ì»üKD|Ɇ:ŒVOš#ù¦ës†aëXjÉ¥ƒ6JpÔ"\W~ÿ)¾<·4¡¿^‹ÅËw(ó}훺ŽDBËNwÚÏ#‘¤¥ ‘/ŽKÇN–Àø’&PÏ&Ã}Vu$}ØÑ{ XÚœ·-ÞN¶�Å"¹M7=I7P´ß®ià£iªï¥Jò&Æ/s ú ;±ûxÔåùB»v@¨>áÖÿ€^ŽÆ›œœ2C£Gø yUq_ðÀ¾øè¼ç•ä“^1ØÐßô=À¡ë’ïÃ3 Ã0®ÆRKîLrºüìêTrǘ7ñמJá­xîé9xWÝÝyÑKxä§ã¨l½Éf¸¯ÀªŽ„°»nÒqøµÿp8xE†7ôç¼&r´³ñQ{ç‰ 2[ƒ“Øo×"9Ýò&f|´®ÿé`pV/~£ >@ek.wëÕã*êãqï¤5hæ'§Œ  èK'+ªÄ3úP¸·ßOH™,üŽýo3 Ã0vc©%—N^¢NhÔËDª:êþµô¹I˜ÿ®zП·ðÛGþ5Öýk[MÈpßäãX+;Ü™}¦e]Í.´4•ÐG;Q»dxm-*ÛëŽÐ+s€Ç¤JÇEôíNÍdÞ7CKL y,«Øo×Qô\¸€o5yVôz –<ø$ ¯+kìÇ)ÿeaìÚx×µ9(ˆÄØ…HB—Цë²R”;Ñ?ïé?å[ˆ Š´R,ïMóS†a&sXjɵA¡:±ÑKrRÑQ÷¯;öĺïJhŽÓý«þ+ÖýkýÁNNõÞ9í®Á+ⳆýçzÔ(ÛëŽÐ+s€ÇXºÐm=ŒßÕï#´2í(°Oäjv$%ò˜V±ß®o£ûÔ)œOê.(ÖÕÏ}ÖGÍCMÃqÊÙˆÄ8Ëõ ÀÇšߣ7€ßVôûˆÕ]ŠBp3 ¬¸¤†a×b©%—_&4j‘XÕ9²§šÂô*šjÝ|6…™9‰î_ÉûÄE¢§#‘èéìbèxt\‰öóÒÒU ß9³p3›í›‚ŽD¢^GŸÁ0V‰ö_‹`‘æÜÚ*Dü=,Ê6Ok)ýUì·kêÖ;o¼Ûßí>&obÚ#óQÞùÿoïþc¤ªïó¯Éæ&&M¾éÍפ _sûãÞoÓKH¯–X¹½6¶Å´·!Šw ~¡h«ª¢x þj;Ü~µK«›ÊŠ¿*[¾°Ê ²Ê® Õ­® ¡@—Å.¸È,óºóÞœ=œ3sÎì™Ùç£y§ó9Ÿ93ayŸ÷{ίÜäøÛjœ6EÓßV”g Fýo‰þoѯ–c|Gοõç3ùá[v ù'H—s7�@E„Ú’»¤ïmd\8açìœÓµóçêö_¥4oÞ¼3qÝõ?f<¨žlVÇw¬ÔÅ_ùž=¹yغŽw™7œ ¹8Š;{]Çÿ~%͵þúô9§§yΟs:峃{NG\·ˆ9 Ç»ŒIæòPXÑ®í‚H?Ó¤ú«ÔÐÐà‹Ÿiy{Ï8nN¹ âe{Nðì ÍüCºn„½¦æ­w8¬�ªA¨-¹¿(ô68ÞǦØ9û…=uÙ$Mù~ý鮾¾~0f=¨G7o×kOÞ¦i“f¨qǧÃÖþ:áÆqw…Þ3ôçœgñç¡bEÿ¹БíÛõA‰·§(G\ù+^\ ÑÉöKwl–žï‘öåâþ­grƒ¯é‘RÃEú� ¡¶äþ¢ÐÛØ59ÅÌÙÝ{ôYuŒ0?ü¹a^·ð8®â®Ð{–:gNû^Wjê…ºléÎ9ŸäÏCÅŠþs= C/?¯×ùïQÁ}NíìâLz»žn\®Æ§·+É*Û×­WžÛ¦Ý}ñuóä®ñÅ®>-Ÿ\|m£´õ³¡ù£ŸJ/¿/]–[>-ל(÷F©�€Ø…Ú’»ä?Rƒã gô¹VýfÙjmõÏsŸÓœj},¥E nÓ/kÕovhËÚ‡µ¼éYõå ß‘× ?ga(ðd.…ýçšûœŽèÔj¾âKª›T¯õ Ö|°ãךZW§//xQcjÜ#ÿw ñ–;¥¹Û¤{þ"íÌ7¦æXîñcg"èVW�€d ½%·¿·‘1Þæ&ü÷9iîÔ®fM=ç úÊ”ÿ¥)_ýžýáy=6ï"3á_µ`ýþaWñõ¯kÂÎY˜¨ÿ6@Dÿ¹¶ "¥t÷ž‹þäbÍ#·hÚÌq~ŸÓwÔ8¥AÍ»OHÙƒj[t»ZöŸÌ=>”{|×ÐÅ¢b@î� º…Þ’{7þÞ†ÆûØ;gçœþ¿ŸÎÓ½Þ‹þ¤~©Å?¾T3Çù}N;žY¤)Óšµ;×…¾¹q¥®™¾Lûs³GÛtÍÿyP ¬ëÆ…æLИIRêžR¿è?×YÿøcýÍ¿0{@ëo]¢uéˆ/SìWþŠNF‡Úþ]÷¶Ìý•²:Ùõ°æ4½§þõôµ7ª%Ïñ•ä®ñcà¹ê!ÌøÒǹ(ET9�0ºÐ[rïÆßÛØ59ÅÌÙ-ùŸ{¶ÍwŸÓÜü+éÖžUkg©¯[xWqWè=CÏu¶ªméýjëÈ·ê™E× *Øÿ×gô¿§¥ÔZhÝ"æLИI’Üæ4£ôŸUˇŸ(NŸ‰Ý¯«iî5´ìÍ?/zqå¯Èd÷éÅ©.÷ºöÚÞ¨»¢Y»ü§éF$ò+sHz9Ä‘óŸ”ÚJ<˜æ�*'ô–Ü6þ®¡ñ†vÎëýÓÊuú0WÔµ¶¶æc½ž}âNýð ?<ý {кNМ…4uãþ.ŽÿýJ™ël]¡_ýÂàkÿ¬©K×^Dj¤u]8AsŽw™½‰nNG8ç´nò­zq<ï9ÍîQˬjaÓ3ÃynY·E݇?S\§þEþï@berÍæ¤Ÿ¼&Í-".{éìû¢‹æ�*'ô–Ü6þÞFÆ…vΚӖ†‰ƒ¯;<¾ ¯ÎXqúŠ—Aë:AsNМ½G”ìõìuÿû•2×¹>¥Ë¿ùc-vÈó2ÝÿÈÕÖ¾½àºÅÌY8ÞeQÿm€r$º9ýÕ¸ñ uvvz¢K{ûâ½,hù«|'”n»_×Ýòu÷ŸR&Ý®ç;ÿ>xn¼“íß­ç–4©3¦?¹kü°æô›ùÜPlМ@ò…Þ’{7þÞÇûØ;gçœþzþýî±Õ§‹»Õ«Wkõ3/ª/“-¸n¡9ShWqWè=‹šËìS[êçšy_‹¶½Ù®ô–—ÕyÄëuÏ=¥þ=Ïé'·=®íþuó¼ãBs&hL‡$‰ª0Œìs=ªwWß¡+6jÏ¡=êêúX½¹\¥ìq¥»ÞRgWZ1ÝÆó´¸òWyþ¦õó¾® çÞxÖ²ýŸ¨³%¥™“¿¨ S4§(Í)�Ô¦Ð[rÛøÔàxÃi.Û·SwÏš¥›~V^ø£žyvã`³õæ¶Vuu¾¥®ôñ×5aç,{Gqç? §è¹êÊÿ4AçÎ[¯žasÚÖºZ©yÓôÕs&hbªSVß [7NØ9 C‡$‰ª0ŒêsmWѾâÜiZüH£R ghÒ„ó4uÉãZsW}þK¿4xoϸđ¿Ê—U÷jÍü¯³ÕôNÏ`~Þ”NÓÂÆÕjZü(Í)ÊfÍ邆ß*¦Püù}šS�¨¡·äÞ¿·¡ñ>6…çÚõìÒïëÜúÛõÈÊ_éÇßÿWM8ç[Z²æqÝ5õ¼Á÷oا7ÎZ·¸÷4…Æqw…Þ³¸¹>u7ÏÕ¿Ôß©?lz#7>¥þtg¾)=Gëªñ©ßjÎ’'ØsŠq!YÍ逭»A_¼vfOhwó M˜þ¸Þë¸_?˜¿JÛº÷(Þ¥·Wߣeí½ùu¢Wþ*_V™C;ôÜÊ%ºö†Ÿéj×”6µ©»wèÜl&Ã9§(›5§¿ÉE±>Î5²4§�|¡·äÞ¿·± jrFž[¯ûøßuíºO”Í~¨¥ÿ‹¾{ïãêHÍÖüæ-úã ­j}ö1­^ô}m<ÞJæ„6<¹\·Í™®n¸J“ëêôÏSfjÉÊ?>˜+�·oïaÝâßÓ)ð$ÉjN‡.‚4täBŸ:SkBC‹öv>¬TûÑüsrßÐÝOéŽñ|µÞœlZ;[Wéîù7êîU/igúøàù§4§ˆÂ@4÷/RQ—;%­i—6}ž‡Ds �•zKn×ÐxÃ)nî¥ê§hÞê-zsûj¥&NTCK—Vßt›mwÏy]Ï.=s?¼3ëž 'hÎÂ š‹£¸³×uüïWÚœÊû”Zz½æÏ¿W«Zwªu›5¥§›Ó‘×}ÎÂñ.£ÀC’$«9ÍêDgJÞÝ®ùæô¼Å›u¬§MwÌZ¢GžZ£5Íÿ®ù—_«æ]%ÞT±q䝨dûu¸k“žLݨkoY¦å·sX/"ëJïÞ 5¦¥þü¢ ÙÜgíµw¥ 6I–x¤=Í)�TNè-¹mü½Œ §¸¹ÍZ=¯^?}ôÕ|szo>¤+¯×åsþ¯îKýRKoš¡‹.½ûôýð¼¯ç š³p‚æâ(îìuÿû•3g‘í?¨®WŸÔ¼«¦kæM 4;X¯Í9þuF›³p¼Ë(ð$þ°ÔB1²ÏõÉ.5Í^¡Îã׿ÅêËwhÀ®T»íaÍ›z¾ê&]¤‹&ÅwÑGþŠ_V™Þ.µ,æj½ˆÆko å‚K^“þ@z9ר¾up(^Û+=‘kJœk`í9W½_ä^Ö�¥æ�@x¡¶äþímp¼ÍhsoüñNÍNm×ñc›5çŸ.ÔMOn•2ûµmå|MþçÒW&}]“R#6`þÇ&Ì8®â®Ð{–:gÎŒOª·»Es¸Z/Æ Þñ‹Ýç:×d¥_Ñòù º|ú¯Ô–öï!=¤Í­Uw\Ç®æÄ•¿*Ãz•“G¥Ÿ¾|&'Œ_Û(½QÆ îu��ñ µ%÷'hocÔäžkWºíAÍoø¾û³•j}Ã7¿±I=Ý­ŽÀu ½nq㸊»BïYêœ>æœSŒþ¼ã«–>×qå¯jGîì—fhP­1]Óc[ÍÒ¹×�Ä/Ô–Ü%è‘o8aç,œ(ç,{Gqç? 'Ê9 'Ê9 C‡$ñ†þq±jésGþªä®ñ)ó™ôâûÒ-[ÏÜûtz»Ô¸[Ú[ê±¼¥æ�@x¡¶ä.A{ãmnʳp¢œ³pìqÅÿý,œ(ç,œ(ç, ’Ä_úÇŪ¥Ïuù«»‡Rs� ¼P[r‚ö64ÞǦØ9Sh\êœ)4Ž«¸+ôž¥Î™BãRçLИIâÏ;þq±jésWþªvä.ġԜ�/Ô–ÜŸ ½MP“SÌœ)4.uÎÇUÜzÏRçL¡q©s&hL‡$ñçÿ¸Xµô¹Ž+U»²ÿ™´fí»±]° Ñé?*ÝÚ6” ¾ùªô›¤}ùÿpv˜ïSoIß±¹Ò=¹¹Þü•ÿKQjÎ�„jKî´kh¼á„³p¢œ³p‚æâ(îìuÿû•3gáD9gáx—•÷·É*³ëE­Ýy,?Êã/ ýãbÕJfâÈ_µ ´‡Ýâæ#mkY¡ùõ_ÖÄT§b¼ "d·’¹î/ÒaOã™ý\Z¾éLžp1ëýÂ÷C�$C¨-¹KòÞFÆ…vΉrÎÂ š‹£¸³×uüïWΜ…圅ã]VÚßæ¤zwmSËŠªŸ8U©Î¾ür Z.…U+ ˜‰#Õ‚PÿŽìq¥w¾¤UwÍÔäº šP7Y?ºñz5¬ 9­ ¹&tYnv(?tv¾+}-Ÿ#þÛÖÜø„”ÉÅ#¹Ç›rë��’-TEâ/ ½ Ž÷±)vΗ:g ã*î ½g©s¦Ð¸Ô94ó·Éö§µ³u•îj¸Pu¹õê&M×ónÐ šSÄ„æ4¾üUíŠýwœÚû‚Õ9÷ü:MœzROnR×á~esÏÑÞãeÝv•ñé'ÒoçyÙcÒO[ÏäˆU½ù‰œãiéÁƒù� ±BU$.áÔàxà ;gáD9gáØã8Š;ÿûY8QÎY8QÎY˜âþ6'´wýªŸX—{þùšzmJO¾úž÷Ÿ’2Ÿª÷gm!.…eŸëZŠ(½~µFQ2G´«ýY­¼ýM¿Î“»ìß ¹«Ø-ýÉwöÈ[>“¾Õ)É/7'HûšY�@ò”ÔœÕQ zýjŽÑ §Õ¾î·º½a†®K=©W»ªßv9d”`ßâáòªËÖ­[uÏ=÷ æ—É“'ëÐÛo¿Ÿ+§Ô¸{ð|Ó ×háòeº½é-ë­¶çôÏžÐÌ?¤ëFØkjÞz‡Ãz ”ÔœbìtwwuVÜY‘gÅž}Ÿ}öYþc Û¯ÃÝv¾éÍjh¸EË—ß§&ëELÈCÕÍr•å¬Ù³gkT÷íۗƱ<ÖµF‹W¾IsZrÿ¹tÇféùi_.îßz&7ø÷š9 5ìŽçÇ�€ä¢9­b¶×!¨QKÙþƒêjY¦•4§ˆ y¨vôôô¨µµõt£:mÚ4­Zµªê ¥;Ö¨qÙJ=Ý‘Î5£êë~UÏmùH½Ö[5ä>&ÓòùÀÅ×6J[ó¿ÕýTzù}é²Üòi¹æô�¿:�@âÑœÖ�·'¢â‡ÌeÒêxz¥–5®QGúD®3=ªîWÖkË®#֋؇j“kT­Aõ6ª¶<j§v5늺/jRýT?y†ßÝ£ŽÔ媛p¬ßÏ‘ªÈáÃRc§4w›tÏ_¤žƒˆŽå8v&Žò»�$ÍiqêÍ7ßó!s'´«ùjÕÕMRýŒzMžö[½{°]©©çi—oÑúƒüDx‡jŸå+kL]£j{V­qªQèjÔ”iÍÚëB³=´èúµÚo¶iÑë};Œr}Þ+u”qöÊÉO¥·Çðì�@qhNkX¼‡ÌWWã4­ùCe5 ž¶{t}ËžÁÇGÛîÕëÿ–�”.–F5›VÛÒûÕÖc»ÒŽårÙmjê>®þ¿>£k¯iQzèYH’SRËéµäþóå«7÷QYönîÿóc�@r…jNQ½¬kiivÈ\¹^öÐ-½÷õX¥pò5ÎyTÝÇô×§oÔ5-{‡ž�é<û°„˦Ÿ×‚É_|áñ%]ÑüõAH Ì1éžMÒÜ·¥ÒÒ‡¹FõovFI~ÞéÏ-;ði®‘Ý#ýf»tÉ6é/'ó“%à‡y�¨šÓqh¤=á ¼“J¿x«&×ù‹»\Ô]­æ]¹ê�ˆ�…!‚”Ó¨f÷·hÖ% ÕÔÒ2ø£ÝP¬ÕºÍÝêÍ„Ý/‡J²u¹çʼ£Åe¹æ´œÆÔ¸×�Äætœ+ýÖ4'µ¿å]²ðwžâÎâymîîáV ˆ …!Fã½ œËc…/wBé-/«óWÈ©J§¤»¥Ïä\òšôÄ'vÐvùÜk�âGsŠÓÜžˆ¢ ¼Ì'ÚòüÛ:ÂŽĈÂÅr„sªýè¨ï#uíåèŽã»µãCn‰•tï•ÞÈ5¡Ê5«›Hæ:Ò( %@åМâ,Åx§Ô÷Þ{ÚWð䬬ŽðŽ>ì§{Eé( Q —Ç¥ÿCóéW©”R#Å]sõÝë‡Î©Ç¸F€Ê¡9EA#x¥×.RÃí÷vƒñ+Ý5÷GZ°þ@è«+…!"—nÑÌIõºº¡A …bÖƒjÿ”Ë#wä �¨šS”(ל¶üL“ê¯ .ê<1ky»>ͯ„EaˆÈÙ©öúóì^½ø\—8^ä �¨šS”h@G¶o×Tqˆ…!"—=ªwWߪË'};™‰©N.è†aÈA�P94§ˆ\6½IÏíŒâ‰�…!¢7ÐÕ¨)ç^¡Å«žñ]m|­žßqˆÓ0 9�*‡æ%ËöíÔê…?Ф³îuz±R\åÑ 0DÔ²{žÒ•W>¥½gu¡Ye2‚áÈA�P9¡šS4Î8®®Æi:÷òÅZµÆ»çÁ¢U;s`¢áÏ;ä!”-sX+kŶÝJ§ÓgbÿV5þþ­‚‡õÚUÌí"q£ß µ‚œ�•CsŠ}®=O]§+ŸúøìCà²Ê >0Îî§Zø&ùÀÞ!¡\§v5ëŠ³ŽøŠÑÎ9u·Ø²õ^Ш ä�¨šS”(«Ì‘×µbA£¶íñìyÈÅþöfý~”ÃzgÏž=XÜÙ=TW­Z¥}ûöåg€áüy‡<„²e?ѺE÷©e{§:;‡Çν}£žst/h~p«]ä�¨šS”è„v5_­ºü„áQÜ9§===jmm=ݨN›6FgñçòÊ—UæèQ‹àÊG®Q½ùæ›ó˜kT»»»óÏ(Ž5¶ä¾d"ç�@åМ¢dÙƒÏkÑk´Ý·ç¡³óíí wQkT­1µÕ <kX­qµåaX‘ˆÚâÏ;ä!D"{\éÎõZÝøk¥R+Ô´î í ™·üÊùÁÍöÂZcKƒš<ä�¨šS”ásõ¦»Õ¹þq5¦RJ-Të^ÿ«úÊÜaÅ™tV¨¹Fµ˜ XahÏ·½¨þ¼CBÙì>§Mstþ„:M¼¸A ^­ ¾w•®¾ò—zõP4s Ó¨ºÜeAƒš<ä�¨šS”Ìn%Ó4ó¹‚ê|]Üðs-l¸Dß»z†®¼s£Ep¸œ±CݬÙtj¡+eÚ•‚]GƒZ;üy‡<„r ÞJ¦î<M]ò’Ò™\²J·hnªS'÷¯ÕÍ+ÞÖçùçEÅýà6Ò‘!öØå. Ôd!ç�@åМ¢DvµÞkTW÷=-Ù°O™ÜÿÒ-‹•êìÑþ–{µbGô÷9µFÕ{¥LÿH\áçGí!¡\™Î”&N˜¡æÝ'†ä›ÓLÏzÍ¿¦Eé¡¥±jT/½ôÒa¹Ë‚�0Ñœ¢D}êL]¬ Óšµ{p/©kNªgýíº¦eïà³ât¥Ì»îºë¬â΂µö‡P¶¾mº{ò•jêîçšÓYõ³u}ý×uáòè÷œŽÄ.šô‹_ü"0wYР�ÆšS”è”úÚïÓäï6©û”­9§ú¹sT?ñr-aÏikTí¸oûÛÅ…î‹ÚABùÔ×õŒî¸å~­ë>ªl®9m˜pž.žÿ”ºÊ¼(RXþCzýa{XG;ß�€ZAsŠÒeªëé{uKê9u÷È5§s5¡îÍê²/Š–ÿ^pßÚAB¹²½]jmiQËÚê:rRÙÏ>Rëï‹ä‚na–»,ìÐ_T�Àx@sŠ ¨·kÃà^ɵm]:’Ðg»6è÷¿_§×÷Œ~û(Ùy§A?hPkyeû´M·\ºTë÷S6{H›—LUÝäÝvó]ßò± )(çT[��0ÖhNQ¢S¹ún‰.]ò¢öôŸRöÈ&-™ü%Mn¸Y7ϼU-{ò !¨Xª¶@üÈC(×Àއ4³ùCesÿ;Þ¹LL¸tð|yh×ÝsJ» RµÿÉ_�€$ 9E‰ŽiÇò[óW»<ªÎÔ¥špÁ2u?•«ïRšS‘¬8zóÍ7‡…ã_>Úœ…圅ã_NqWä!”ëÔ®Ç5çŽôÑžmjœ~¾ÎÕ¢ýÙ“:Òñf—x+šS��ÊGsŠЮæ[tÇú÷´gûJM?÷ËšÕ²GÙÌau,_XÒ­d¼Í©ãš3…ƥΙBcïcŠ»Ê ¡lÙ£z·iŽÎÏ}gë¦Þ¥ écêݱFËS)­X¿K'óO ƒæ�€òÑœ¢dÙ¾jšù\Q“¿™ýÉ¿kÇÓ*•ú­Öï>žVñhNQ ò¢‘Qßáƒêí/å ӳќ�P>¶F(O¦O‡ôª?‚+ y‹#×ôyà š³p¢œ³pF›£¸Æ/šS��ÊÇÖ‰As  ZÑœÖ.ŽÖ�€Êak„İâ(¨ésãBs¦Ð¸Ô9Shì}Lq CTšÓÚE€Êak„Ä 9E CTšÓÚE€Êak„Äð6§Þ¦Ïø—6gáD9gáø—SÜŃÂÕ€æ´v‘ƒ� rØ!1hN„ÂÕ€æ´v‘ƒ� rØ!1¼Í©ãš3…ƥΙBcïcŠ»xP¢МÖ.r�T[#$Í)‚P¢МÖ.r�T[#$†·8rMŸ7œ 9 'Ê9 g´9Š»xP¢МÖ.r�T[#$Í)‚P¢МÖ.r�T[#$†GAMŸš3…ƥΙBcïcŠ»xø C E$Íií"ç�@å„Ú‘ 'osêmúŒùhsN”sŽ9Å]<üy‡<„$¢9­]ä�¨šS$Í)‚øóyIDsZ»È9�P94§H osêxÇ…æL¡q©s¦ÐØû˜â.þ¼CBÑœÖ.r�TÍ)ƒæAüy‡<„$¢9­]ä�¨šS$†·8rMŸ7œ 9 'Ê9 g´9Š»xøóyIDsZ»È9�P94§H šSñçò’¨Rßÿl_·^Yû¼6w÷(“_ò×ÈÈ9�P94§H +Ž‚š>7.4g ‡Ï hËÚßiÙýMêî=é›+ýu)îâáÏ;ä!$Qe¾ÿ'´«ùj;éš=}ŽVìø4¿¼|ä/�@М"1*Öœžú@K§~I_ùN½¦_õ=ùZçˆë™BcïcŠ»Ê !‰¢üþg¼¡• nÕÊŽƒêï=¬ÞþSù™œÌqõÙøØfÝy[›¢jOÉ_�€$ 9Ebx›SoÓgüËG›{óÍí:Òñˆ,xDmܪM/mR»g>sì˜ú³Ym}d®YÙæYo´×yžâ®2ÈCH¢(¿ÿ§v5늺/éŠæ7õÑ«Ohù-?×â¦-ÚëmRsÍéâÙ-Jç‡å"�’€æ‰msÚ>xø[]ÝÕZú‡5zøî›4óʹº£éymËͱæôz]‘zaغŽw™7ÿrŠ»Ê !‰¢ýþŸRÿÑOÕŸÍuBé wëòËjåºWÕÑþ’V-¬×”åoëóü3ÊEþ�$Í)ÃÛœ:Þq¡9sö¸]¯¾ÚžkAóso¼¨ K¦ëò…+uÿ#«ôèÊ;µpêtÓ“[Fy‘ÇÞÇw•ABÅÿý?¡CMºvòsïU§óg>ªwûòså#�’€æ‰}s°næoêhº^_=gBîýþ‹f6íÔÏóŒw=Shì}LqWä!$Qžÿ™>>ÐëÙ« ò� hN‘ÞâÈ5}Þp‚æ,œbæ¶oiÓK›ÚçüáŒ6GqWä!$QµÿÉ_�€$ 9EbT²9-vÎÂmŽâ®2ÈCH"šS��ÊGsŠÄ°â(¨ésãBs¦Ð¸Ô9Shì}LqWä!$Í)��å£9Ebx›SoÓgüËG›³p¢œ³püË)î€ñ‹æ�€ò±5Bbx›SÇ;.4g K3…ÆÞÇwÀøEs �@ùØ!1hNäO»¥žþü�H(šÓÚe9(µ#?��ÄŠ­Ã[¹¦ÏNМ…圅3ÚÅ]ô¬)µS >Ëä� EsZ»nïjP�ñck„Ä 9…߇½Ò%mù`4§µëŠÒ¦Oò�@¬Ø!1¬8 júܸМ)4.uÎ{SÜE¯ù}ié™?=X4§µÉ½ñÑÑü�@¬Ø!1hNáÇát¨4§µ©=ÍÑ�PIlÞæÔÛôÿòÑæ,œ(ç,ÿrŠ»èÙ ;´H:šÓÚôë\ �*‰­ƒæ^¥KÙc*AsZ›þçií®ü��;¶FH osêxÇ…æL¡q©s¦ÐØû˜â.Z+»†ëªÍiíÙyxèè ne�•ÃÖ‰As ÇncçyÙù^…|Ò—�Œ1šÓÚc?qH/�TVÉ[#»H‰ýªDÅ[¹¦ÏNМ…圅3ÚÅ]t¬)íþ¦Ö˜²WIAsZ[ÜUz©s� ²JÞqÈ¢Fs çªÍÅ]¥×rå"`¬ÑœÖj�%oܯŠ\IQ±â(¨ésãBs¦Ð¸Ô9Shì}Lq wë†B{MË?ì=EМÖê�;emøeQò6§Þ¦Ïø—6gáD9gáø—SÜE£Ø½¦Žå Î ÃX£9­Ô6�0vÊÚÙ¯‹¶‡cÃÞü  4§°¦´Ø½¦ŽÛ{Ê^Œ%šÓÚ@>€±UöÖÈÓ°Å$ÄÛœ:Þq¡9Sh\êœ)4ö>¦¸+Ÿå’R.@b{:l+0Vìû_í¡ ­…9r�­H¶F×·sXÊT,U[`l¸[Ï<Þ_���€ªI5íƒáð^�cÅå!ný���P"ÛÕãÎ㪙�ÆŠå¡úW†Í��@u‰ô8Ä›Þþm+çŸ;¼3tªy�� ºDÚœZ1hE!…!€±âòÐO^#��T“ȯàbÅàuÛ¤y4¨�ƈå;’ÚTN5���¨‘7§fßPQÈ’�ŒkP¹%��@õˆ¥95ì5àÇ^L�cÉ~4ç‡s�H®ØšS�ð²{Ú­^hPTšý`¾²kè®íéüB�@âМˆ•5£vq"+ í^¤�PI–wìZ [¸Í�$Í)€ØØásÖ”ÞºCýT–ý0öËCGlØ^Sr�$Í)€ÈÙas×¾&}gçw¨,kJ­µ¦tÑvŽØ�€j2æÍ©mD¬xå<4 ºÙwØ®Ž{Õæ¡½¥öØ®Ü] Üý™­©fï P}ì{kµ„}­)½½ƒ¦�ªÑ˜7§;³¶1qÅ!*Pì»jßYWÚwÙ Äjkðì<4w±WØZsMq $—åûžÚ÷Õ¾·öýµï1ç•@õJÌa½VÚFÅ5ªöÿvuO+tmކHwØœ}Wk© ´̼¯û7zÇþ(Vкa"Œ õÃD±‚Ö a­&Š´nØ(Vкa¢XAë†b­&Šeu}/­V°ï-� ú%òœS+r­)Mí.ÝÞ ‹0¼¯QJ+hÝ0FÐúa¢XA놉0‚ÖÅ Z7L„´~˜(Vкa£Xö={(ìÇ1Û;l kÐßË¢XA놉0‚ÖÅ Z7L„´~˜(Vкa£XA놉b­6Š´n˜��Œ_UuA$+]”²ónüJ‰b­&ÂZ?L+hÝ0FÐúa¢XA놉0‚ÖÅ Z7l����c¡ªšS����@m¢9����Œ9šS����À˜£9����Œ9šS����À˜£9����Œ9šS����À“þ?æw:ÿ£Ó3����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-7z.png��������������������������������������������0000664�0000000�0000000�00000177647�15030617045�0022614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ó��˜���?¸¨Ž���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ<IDATx^ìýß‹IšçæÿpàM†WÙ +úF[š$œUCMƒê¢ :Þ")а‰FtÅ’ ]ÕZ&Ȥª§šbD•]C²ïª§'+y£«_‘KOö T¹S-rqºDvKS¨‹$™Bϱ¯»™‡¹‡Ço÷wïG)ÿîææfîöµç±Ç—„B!„B!™‚bžB!„BÉó„B!„BHÆ ˜'„B!„B2Å<!„B!„’1(æ !„B!„ŒA1O!„B!„d ŠyB!„B!$cPÌB!dv\4¥^-Kq¥"Wz]ÜÌâ„BÈœ¡˜'„B|ÎÄ)­ÈÒÒ’ŸV* 1zðU£"+þ¶›â´3®_5¤²Ò½ÖÞ´"%çLï/¤Y}Ó;vbB{ç „BæÅ<!„ #)*1X(×å\¯õð¶­–öäô¢£×eˆùë[Ro¿Ä‚´›–�~)íú–\·3âáB•bÂB{ç „Bæ Å<!„ÒÃ7R/_‘š#­€fïÈyýŽlÔ¿Ñ˧ӖÇÛêª@XÌ+Ûã‚bžB‰ŠyB!¤ˆö ),½)Õæ ½NÑy&ÎÆ'Ò°­ò§â”W-×t/­TŽåÛf]ªj[¡t[n j=\ó_ÊEó@*¥ËzßU)ïK»£(Ö•iAê/¿”vÃQ¿ûKy»²';ú÷…ÒÇrìZÖ§%BÌûtúäz¿!N¥$…·+RÛQ±½P’ã~ƒ�a¡ëº/e·|Ôo‹eÙk¨«˜ÒÐæà-wÚDzç—}7Oó„BŠyB!$ŠÎ©TW WûNsOnVO-‘ú­ו�ÝQÿ•Òõ{R*dûXóÑþ‹c©¯H©ú•’œž+{q© E%þ/´G€'Þµ|^—rAÏuó7狚0 Ä|ß<?ÿŽüALÖ¤zªrqñ•T!ú R?’óA¡Ýi9²¶¢ÛiI}C‰s÷·êúÜéE©4.ôo_HsoGœÖKµï3qÖŠ¡<]‘²ë5A1O!$ÿPÌB!‘è@j…uO<ºË›AK½˜×Ó:€žãZÐwƒèiÁºZ°»ëÎ=ê‹y-JÍrÛ‘R (Éc?á<ýÄü°<¼fE§Y•U_X‡±…¶¬.´€wûop?íœÊÞÎnY{çÿΔ5Å<!„üC1O!„ôÁµK;,ã×«Ò hfm6‚ßµ`¯tÅg˜™Z,»®ã°ô#æí߆Uk82Ô>6ýÄü°<ÿ¡GÌ÷æÓÆ>žþÿj¸\ zºƒ;h�Ký]©èÏå>4 Â'*Ï„BH¾ ˜'„Búb,Ðe©Õ6äzÀÅ^cÜÊ]Á|YJ;GzÞ¶¢GÌK´-Bõ:WІĻ¥Fìö³ÌÇ"Zû‰ùayy#(<«¹ío!æ}ï‡Üé°ò?‘úÆß;Àó—eÍyÖ{O(æ !„,�ó„BH_ºŸ© ŠYƒ'jíoÑÐóÜíížµßÌ{ïH§}(Å+Z”q«-ÑM§bÙóý~;-zþ„Ëþà<k1oæÌëyï½_0Ø.úêXÚ]¾Èï\N«wdÏ/k½ÿ_euÊ  ctƒí©Ò;½/{p žƒBÉ#ó„BÈ L ¼HqúRZκÁÝNÅ qžú𺂑á-‘Ž(ìΩ’ñz›jçYùŠsgUŠåûÒ€ÐuÅ|AŠ¥·õ�CÈ`R¬`}^ »ÈʳóÅ·¥¤·÷°¯+Ìy\ËùKi¬¯Y%;{IêÜî€JïüNûÈêùU�ÿú„BHŽ ˜'„B&æ\N÷>‘qO|^ïg­Ÿ†sÑçE¯›=!„B’‡bžB™×E<üMu|w~cÓs9m™÷ì¥-æû±#„BHPÌB!“ÒiKét]Äá_®J½™”7çI‹u^ y“/Zç !„™A1O!„B!„d ŠyB!„B!$cPÌB!„B!ƒbžBÉ!ÿþïÿ.Íf3ÑD!„ùA1O!„¤[”‰ã8nzï½÷üôÆotƒÐYÉÞ'îôî»ïFžëÍ>|ðŸß/¿üÒ½†?þñúÊ!„2 ó„BȰEúçŸî Þ{÷îùBøµ×^óò qœ6lòd_’¹{àÁŠ~B!d|(æ !„„0‚ÝXÔÃbÖÜ¿ÿû¿÷ŬÂÏŸ?×GÉ/æZ£<Âåd?Ä>…>!„B1O!„L „7D)Ħ±®Ë:…èt˜cå·…>þbë1 €ý°?!„²PÌB!#b‹vXÓ!$!*!ÜñcaÇ>‹`YŸ7(g  Ì1`bæñ›ûs?(ò !„ä ŠyB!¤€‹…F(‘K1Eb:é7è‚{ˆ{‡{ÊûF!$ëPÌB!FñŽ¿ÆºK²MÔÀ ï-!„¬B1O!d¡Áv:Zo‹~^ð¸`\B!Y€bžBÈB¡Á†9Ö˜[ jpÅF�5Îs_\pïQPP'P7PGX/!„¤ŠyB!¹b Þˆ4Šw2 Sg èÇ–Yg!„¤ŠyB!¹Äˆ1ˆ0#àáVMȸÀ%ƒ?ö„BÒÅ<!„\`ffþ;Ä<‰“°°G]c�=B!ó€bžBH.€À‚=Ú1xIÔ13} uB™ó„B2 Ä„;ÜèáúL1Eæ…=˜ÏÁ$B!IC1O!$s`®2æÀWzº9“´`¦y`€‰"„B’„bžBHf€P2"€Œ¤ÖUB!IC1O!$õàÛð´v’,b{‘PÔB‰ŠyB!©¢ýÞ½{ñ$ó˜º QϺL!$(æ !„¤ƒˆÇœxZ3I^@]6^& ØH!d(æ !„¤ X,!vœíH^AÝFÇW8XE!d(æ !„¤X,1·˜nÈd0ÓH¾üòK½†B ŠyB!©À|/ž®ÇdÑ€GÝG „BF…bžBÈÜ%îÆˆZOÈ"‚º6€¶@!„ŒÅ<!„¹aæÇCÄЭž,:hô„BF…bžBÈ\0Â…Bž.ô„BF…bžBÈ\€Ež‚% ¼”öñÇR*,ÉÒRAŠåŸÈ{ÅÿCV* y…ÍM©WËR\©HÃ]A’†‚žBÈ(PÌB™9Ÿþ¹ûY.ZäçO§åÈÚʺ8­ i×·¤¸ô¦T›/ôÖÒ¬¾©D¾úó3mƒQî !„ ‚bžBÈL1"…ߟ¶4|&•µ²ï/ÕŠWÒvnêÒ¨3!æ10qs­"µ iwôÊ c¢Üó;ô„B¢ ˜'„2Sà:L÷áYÒ‘‹æâT7¤T¾+mµÆ0ŠPÏŽ˜÷8—fÝ‘jùM)Uö¥Þ<×ë³ ¾CÿÁè%B!¤ Å<!„™«<\¶³mi„X¬J¹¸.µÆ²SºìÍ5¯+Ù ž¤â®×óÐ7=K±?ÿ|Kœ#3O}U6ê–?oý²”ª_écÁ˜~,{åU}¬U)ïk«ó™8¥•þ"ÛµÂß•riCªÎÒ¼›ªõïÝãziE]÷ͺ«Ý9ó=bþ¥´÷Õõ¼ß˲ç +µýpG_£w-õ–7°k¹Xà¸µŠ”VË}Ê ý˜6Ã))„BÂPÌB™˜+Ÿu+c§Y•UW@"Xœ£â i9ëRXº)NjW‹ß’#m%|½m˜‡þmwþ¹¦gâ¬Aô*1Ꜫ_~«~{]– R?WÂÓÝ^Ô"V‰hwNû)׿ñ2Ó/]AÞPÕÊ òa-æ½9ökR==Ç‚Ô7” Vù=<þ‡Áåâ{EJΙ¾.uÝ«Uiv¬yù‰•‹>‡{O²ÚÌÑÑ‘^"„B<(æ !„Ì ½ËC@¯WЬøâÝ,¥Ò0vã.Áma+wxκ^ÖÇîÓp‘®0–ùÕ5©ÔJ£9òaÂùQhA-æmám'ïúF/—ðy*XæAÞ Ù�Bž®ö„BÂPÌB™ Æ]8Œ"Z;í†<€‹·ë">™˜÷ŽkG—Ÿ„àœy§ÞT¹0Œ+æõÿ]‹º»1Àðr‹þC©UJR€�÷Ïg¹˜s¬ËZæÌLKÉKÛ!„|3B™ ˆ^oËçÁ¢U»}½yÚOêw¬m“ˆÖ˲æ<³‚ÖM‰f_ZÓBxB1_À§ìz-ýËÅuÉ¿.Ew@¡!õÀyã)—NûP6Ë;¹‰fo1Ïyó„Bl(æÉäø‹¬N`¦0ÁšV-«Q?`éqTø/½ùžc«X8 Ôi;Rò;תcïÀrØí|g~¦)›`¾|>¢Øwä¼¾¡çÁC›eÝ®´.”ëê)cæÌåNí¾ì(‘Y/_éÎý6s¹ÃËæØS©®Ôö’ì#ÈœzžœÞ—½Sõ¿8ø&”Åy]Ê[Ì÷1.î…ÒÇrìºîŸËiõŽì5ÿm`¹x\Ïk7sâW¶¤¶W´ÿwÊÊ%}` ŒŸs$„bC1¿È¸¢Îžoh,G@[I̶ž AÖö¹‹yÝat;}ò:„#9êι´¯»ºs»´¤ƒ7ƒétªsùc÷xèÔþIwvç!¦MGו 1o,»y±î.Žã¸ŸÙÊ:ž(E»ñÚξó~`Ùi?WâvÍk[ˆô~X•ÛD´¯‰sÇz®®¼/Î>¬Í}–u»ì´tdx¬#šýPÂÑìÕóm߈0ëV*uù­ý.pÏõRÚ~„y•t4û—ÃÊ¥ùXª&Â}yO«£ÊëOå8pŽiË%ŸPÌB C1¿ðèÁ‘Q€±ííÀ§€‚„Ý"ëÔ–ì Í1™˜Ða¸ƒˆyv[EÌ÷–)¢L¯ïŒcýº®N,lë': cD¼éÌSÌg“<¹Ù2k^{í5z%B @1O´°Œš“ùÔ7îhÇ(FópÜ“RaDÑ<®(·>q4ª;ûÜļ»ì¹‹ºc[Ö"Êôâ+×ê5êµ{L+æá^»&…‰-ƒƒ ‹xŠùlóÇ?þÑfO<û!„¾ˆBχ E'î´ÈÆÎqÐ*ßiËñŽŽB\\—2\»hÊ¡‰Pìnß’zû…]!æZÍ#÷úlÒˆ(¡½æÎO…•~KÖ|Áùꎔ‹ž›{7y"¸WÌŸKóp§Ç}Ô--æß®ìù®Ý9£ŠA×ÔPêLœ5µ%LYëãI0j™ª{ñžïnŠ—Ö'^LƒÂÛR¾½ªÖa â_BqŒ˜[*5sÝ—¥´s享v݉=±\¶\‰Ý¤:0O×]wÚû}>‰ÕŸ~"Þ$ŠùìBë"!ãƒÏ9¾ûî»z‰Bñ ˜'.ÞüqÛÕîMÄÈà¹ä‹¨ÁÉZÌ{BÏ}p÷^+dµê# ‹æAûÆÊűTŠ+R¬`PB[‘­Ïó¥„cG‰ß5©žž«ED^†¾®¶«Å<æ½*¡k,ã&ÈÕkêó£1N™ÏaÅ4°¢N{¿ 6¿3bóV[긦ŒL]0óê½<ô.‡½3¼`_+¥=9½èøuÄ”Ñ0†‰x“(æ³ àå#!³m$ !„Šy⡃´ÖiA)bùæ^ð;Âþ<o#ø¸Ù‡Äkð´™P莄+À­<‡\åƒùò‚A„§{ÍZ°‡~ÛmÙ"|Mq\ã°2í9Gôý þ.ÂÍÞÔ…ˆA \à öHQu$Hƒå¶ç÷L¹H�VyÜc~b‹Ñ@[Aû¡G !„0óDc>Ÿ«5>/´)×C–òñ%ýo{.ß}…'è³o#6 sκ¶®{ƒÚòÞÏ2)¸u´gL èóQB¸Ï5M#æG-Ӹļ}ÍjÉÛD1ïæa:/ t\‡‰zZæ³ îî1!d8h+|æB‰‚bžtñ­Ð÷¥V¾r±Wš²Ç?(ä<—êëR®:Rr–aá9hßxéºÃ»BÐÿ&±G _ƪlÇp×­xâ´Ÿe^ï?ðš&óã”iï9&óö5c€x7Ëf@$JÌ«:d<<¦`¨gÇ6Û î#þBúöB!dóÄÂ|¦N ¦P0<#v‹â4ϵÐÔ.Õ«©âûÉÚåܛ߭„åÏd硜¹ðŠ”åÁGŸImÀ¾£|RndÜ<›`oaÌüo3@a¼.ëÏñ½”v}KŠfι+æÃsæÍW�´¨íwM¶»¾wò|Ì`™>”ÖK-¤ËåɃª<hµ¼À†1o®9,æCsæ{æÙë2º8§Œ8Õø¨3^ŸüJ>zpª~ÿ¦ÚÖ ¢çFÙßø¬·>H”¨§˜Ï>¸§ù 襞ͺTU;If€’, xöáëœ+O!¤ó$€g}úLG§}dErß‘»å¢ËU©7ÿlYÀW¥¼÷@ª·•4ÝÝ@tJø»Áå†ì'øúš—ßnB„uGžÔï(‘jÖq{.MgCGbWI\x “~à»»"Ýc[¿k:;rE¶9ÿèüÇì)SäÑ Æ`0âJ"Û\‡ôž07y±®Ùà}^ò¿AðÃ#gKVükWyt§.`›ôNU’î&Œf…-ê)æóÄ|î‚á™AOUÿg/æõ`;�ø'o0OO—ñx)íÆ¯ÜólÀsüðô·RÝx öÓSlô¶`RϠ꯺mY{áDï«’9¯ý<yFE|ÇX_ Ñ_]qDÝÁÑ1§\e´ >ë!„ ‚bžä%D÷v†\¾!zoö±Ö“´QÏ4‘ìc¾;Ÿ;A?á´šé$æÍ—*.K©r M ¼):í†8øü¥ïÁ£§¦ÞXŸ›ôAľ�×wÔñÌP0Ð÷J-¤ëõÓƒ;@yE{FéßúSvKÌ£M`° Ï;B!¤ó$ÇxÍ uÖuG6Ê÷=+2!d®@¬äÎB?71¯½oÜiRÞóÏ˃ñ )èÏt†€ÓúÇZÌGÅ]/œî4¬~ûj\ÑmÇY±¹^ÓňÐÏæÀï1íhÕ‹å1púTö¡'„2*ó$×øV't@ÝWѺo•"„Ì#èáRœcOOQÉž’ó@´¦çøq7¼]»±GVe£vW6v¼€~ë½Ø Ôö5W,CoÉšk½öDô’õ%þ èáãôî‹Øën^µ8'44ˆ>¶=- Œç*ka}ËÑuÿƒ> '„22ó„BæÄ ,’ˆ‰Ðl6õÚ´¢ƒe—q¿ÂØ1¯Yº"Õþ(Ä0Dé_j±êܼîþ¦ßú 1óøm«w_‰yãVo¬åf_3Xê%ïºõ¶@�Ψuo¾~p"j]>1SN æ)ä !„Œ Å<!„Ôpttä ÂTGðXŒ#àfï¡4Á'=k´„δ ú­ŸŸhf1oöí¸A;oº–yŠùQA]O}'„’J(æ !„¤ c¥„ÛýóçÏõÚáŠãØ"Ä<¦ü<¨U´[¾ó^ ²ëN¯Öû®úýÖOŠ780 7û.sà—Â�7ûÀ|z· ýM2ê6,ñðFáwä !„LÅ<!„ÔWã{÷î¹bŸ$L•ë±v[䦈yÏM¾X,KÕùBÓˆy>çxóêâ·ßúq1ó×ûÀCäøõñû ôn�¼n„ùAb^ý¢åÈš�O{4DçÁL]è^§÷©Ô몬¾u—óê2ê4ê6ê8Ýê !„L Å<!„Ô‹%,ô°Ô§ç“„fîûªlÔ[ÚjüÔwö=‹³…]‰^ˆ}-ì=áo~W”;µû²óà‰ÑeýíuÛ’}Þg½w¦‰è´¤¾ïËãÓtN÷{ñM9¬lȦÆ•Þèö§éŠ[R÷¿böígñ·?M÷ÂÔõÓt:¿Ýƒ|€i$°Ä§Öë„BH¦ ˜'„’z ‚ èéÿŸ;JàïX_Ê0ß_×âÝ]§ÒJåP¾r¿ï!\–½ÃªÜ.˜ˆöJ$ß§¶¡¿á^Ò¾ßzŰhö9—f½ÚußW©PªˆÓÐÇÖsÔͶ@Ry¨Ô¾è~ $tH‘yº8§ŒAµ®ß?—"àÁ�ì验Ê÷»ƒ–ẇGýEJ€GB!YbžBHf0¢ ‰.Ê$­wzc‰Og !„¼@1O!$sÀº ¡„yÇtY&iSCð™Ex#à/-ñ„B’‚bžBHf±…"ƒÓúIæ¼F8ÀD!d–PÌBÉ<áyÉpo¦˜"Ic\éM½ƒ çÔB!³‚b>˜àBLLyN„ÄÜšmk}*æ‘\:…ºeê]é !„Ìö 3�: ív›‰)·‰bž$±Ö#¾q}†[>!“`¦t .¡N1�#!„yÃt ˜gÊ{¢˜'I!1o„\£iM%ƒ€PG ÔãFÏ!B!i‚=è @1Ï”÷D1Of‰hõ¨{ZfÄ=-­‹‹-ÞMÝÀ_,3°"!„4Ât ˜gÊ{¢˜'ób˜€£¸Ï/È{O!$˰(æ™òžPÇ£!³zXêa±G=„{5æJ#è#äg¸Çcž;î%î)î­ñÊ x'„’EØ[Î�èpD &¦¼¤¨:N1OÒÄ=D ¢–cÎ=’øœC>Ì=ƒ•Ý”Á=ÄzÞ3B!y€½å @1Ï”÷D1O²„qÏ6Ö{ÛÊ ñ±1I+~ò œ'„ºí.e¬ç½ „’WØ[Î�óLyOó$ëØîù‘ö°à£Cì¡íÀ¾tëD8Ê $Qe ÑnÊ^Ø—BYØ[Î�óLyOó$ÏÀ¥Û}$ˆO$Ôñ° ½{÷®ü‡ÿðFì±!޲Á|v”…ñv0SŒ•ÝvZÚ !„ŠùL%t˜˜ò”¢ê8Ö²@œ"AÈç;ß‘·ß~; ö 5‚¢Ö¸ò#¥mþ·ñR@2ÓŒU=êÚŒX7×Å9í„BÈpØ[Î�èð„…SžRTÇ:BˆW[XžÃë5’ÆÆ‚d¬Øád¶'™Ìõ~çÆöííí€PGâB!dzØ[Î�è……SžRTÇ:BAB~RlëxÒiI\!„B<Ø[Î�óLyOódQ1bVëy×ý$ÝÚÍ5Â:O!„ø`o9PÌ3å=QÌ“EÖs¸ÈÃe~žÀ~˜…}ZŒ Ÿ÷µB!y‚½å @1Ï”÷D1O yÌ'Oƒ¸…˜ô„BH¼°·œ(æ™òž(æÉ"‘&!f%æAÚ®BÉ2ì-g�Šy¦¼'Šy²(¤QÌÎRÌ zB!$Ø[Î�óYMÏääáOåÆ2>Õ´,W×wåèi+b¿ÓÉ®ÜXº*›O¥Ý:‘ƒÝMuþÊîÉYôþ)IódH«ˆµ˜ô„BÈô°·œ(æ³™Zwå­KïÈîã§rRû‘\]ú¾l}¹oü©%ÍÚ-YVugi‰bž4�ñŠ”6æ!æ=!„2ì-g�Šù,¦39Ùý¡,]Ú”ƒ³¨íÃÒ3y¼û#Ù‚…]¯ÃàÀ;[rØoPÒy˜BÌÎÉÅ<É;¬®°iùš‡˜FÐc@!eC!„¤ö–3�Å|ÓS9ؼ:¡˜oÉÓGÊeí.uO-Û7¾+—6g(æ':çd‰bžä™4 y0ï¶f}šËˆBI#ì-g€äļG5Ù^ÿË»¿’‡[7<·ì«[r`æv?=’ýM½ÞÝö#©<SÛšrTÛ–õ«×äÇ»¿-%úÜyá·öåñã_êå%Y¾ñ¡<2ÇÂî×åª{,Ì!ÿ™¸Ç2¢Ó¯vRy¨m«ßÝø¹øsÐ_Wûþ«¿=:æú®É¥ïÊ/ýëSÛÿ®{½ËoÉö£¦w¬¾y´òcRà¼ö¾ Ù½qÉË‹N½‚yûGÙÔådÊî¤e„|÷·KWß‘ÿìÄùÑo¼2Yþ¬ß¼¦Ö]’»¿öï‰Wަ\ ›w·ô1¿+7¶~©Î£p¼»rb̲òsžœIëä¡|¨ÊÓ[wMÖ?|¨Že_×d Ç‹ZGHÖI»ihk(Ÿ>ø€‚žBö–3@”Љ%µÉöµe÷øKWo)Øôæy/C6Ü}Î6å’rî¶e¹¶ýHÎŽ¶å~§’'Ø¿–Ç»ï(a Q‹@ogòô`K‰âïÉzí÷êXpG.iqß:Ù—[W—ey½&Íp¾ék9Úþ¾—GˆÇÝGò´õ;Ù}K MW„öÏc˾>-ؽíÝëm?}(›~>ÆÉã¿*ñûº?Xaöí„ ³Ìëíî5xç]¶æÔ{×d nœÈæ%3(` ïeÌÉ÷¼ß œÌ¿&·j¥ÕnÊ£í·ÔyÌ=ù½ÔÖ¿ç—cÏràœjÙ-÷«rcû×òÁýÜ8�æXøýä ×µŽ,“!ÒÔÖ²Rf„BH`o9D Ø’+غâ½GÀõìÛÝÖ#8íHêþ²>¶-¬í4’º-|­å¨ß†óßs=žÕ<¼ì{œ<º×f Ypά&æƒ)\–ƒÅ<~}üàï"Üìõ5z}ʵ˜oY8vêæiò„ãD­#$«@”¾ñÆ™¥ikkô„BÈh°·œ¢„NlÉlCÄ<\Ï?ý¹ïn¶%æÝãj‹¹9îȩ贅lŸ<ö^Ï�1?F{®ɾÞ>b;œZ'òé]|>¸{¼Äļ}½ýʵ˜÷ŽLDþ¨:ž6AȨ8Ž#¯½öšüñÔkÒMÛ=!„2ö–3@”Љ-¹‚­¿˜÷ÜÇ_—õí]©ýf?BÜ…Å{xÙóK²üÖ®<{ŽuÑ©…ì <öŠàab~´<zVê ð÷Ö±-¶»I»©_]—í]G~Sûq ,ó®eþ’ÎwŸr½¶-G¸þÐ9½cWÞÚýÝ2ƒÅ<É GGG™ò ­mÍúçÏŸë5„B±ao9$*æ›5Y7sÌýe#à´¸[¾%µfËŸo~éÇ?—O¶îÉ£€[¹³áesl3÷Ý`SçBµ[?÷„£ÉOdÒs¹È4Ë®”Ç_ȉ¾Þ{Àͼ»ì{Œ<šyû&x^ë±Ôn]³tu¾¿E2Ö\ýe%Â|÷g²õiC gU–ûåÓŸüB?3ûÿB~óé¶|úXÏ/s\ãêó¡9óþ<{»ìÎäéÑ®¬cÞ¿ªoÁ sÎÆÿí•Õò Ùzx¢Ž‡`}?“[÷d–(æIÈ¢inkôY,SB!d°·œóZ¬¹â ôO> .ïþΊ¬ŽÈåŸÊöM% ¯þHþq÷GJlš}•xÜÝ–}—µu¾uÒ ˆþnD§e‰ö“œæX7¶e7°ürÔ'µÆ/­ëÁ�Å'ò ¬ð}–]Û7vžtzúHvýÈî&ð„»¶ö›ãú®÷öïM0:µýêº|¸¿-7—MD{Û Ì×´ïÜs¶ÿIjvhAï �˜sš²lÊѾ‰d¾;r>0~!»?¾fícŸAïàÑýRWÞŒfOȪ‡{ÚÛ=!„ {Ë Jè01å)QÌ“,“U!šÍ¦¼÷Þ{z)½|þùçô„BHö–3�Å<SÞÅ<É*ò¨«ÅY$+bdyЄBIö–3�Å<SÞÅ<É"•—™Y%KbPÐB!]Ø[Î�óLyOó$käAȃ¬‰y@AO™ŒsiÖ«R.®J¥q¡×Ž\4ëR-¯ÊJ¥!¯ôÚ¹Ñv¤´TôîS§- §"¥ÂMqÚsÏYê`o9PÌ3å=QÌ“,‘!²(æôy¸„Qy¥4ÞM·à§•Š4Œ¾{ÕÊŠÙ¶"%çLoðxըȊ»M‹Äyr^—rኔëRÿÝ„ê‹Á×—$S©®Üszb¾ãå«°!õó?I½|E–JŽ´õî³CçÃ-Šù(Ø[Î�hXa¡ÃÄ”§UÇ±Ž´‘'!²*æîžô„,ÇR)*áé ÍŽ^©Á¶Õ›R==×+‚x‚~41ßi9²¾“•:RÌë3¹Û–¤P®KôU$„ ‰WÌ¿”–³%;Vy_®fgr1Ÿè½œ3ì-g�Šy¦¼'Šy’ò&äA–Å<À½ …žEÃÍuqZ/õ:ÂýEðÈbþâ+©–.'çrî ç7¥Ú|!fUV{< z= ' æuY­V¥Ùy!Íê›”EG.N÷¤T°Ê{¢rRÌ'}/ç {Ë`nbþé‘Ô¶×åªþŽyä>LL1$Šy’vð=vˆF|ó<O@ðÁz)›äq…2×z]Õê©’ŒXïÈNã[½ ^Jûøc%(ᦽ*·ËoKÁóçÒ<ÜÑÛ¼íõ–t´øóÖ÷îçÑûz'™€3qÖ¶<Ï\ËšeõEÌ_4å°RÒîç)–ïK£m60ÿý@*þ5¬JÙ9•‹žõêw‡Ò6ó˜·¾æz`ðdKÖ"óÓï˜FÈcNÅuy/\®Í'R¯–¥Xx[Ê·WÕ:\÷¿„b1ÿ¶Tjæ\–ÒΑ:Ï…4*Eïx®ç@h9ò^¾’NûXöÊ8Ö©òÙ;î–CÆ`o9 ¢……Nòék9Úþ¾WÉç!æ›5Y_þž¬×Tƒ®Ý’å¥ÊîÉYh¿–Þö}Ù>ú:´mšôLNþTn,£WnlýRNZQûéÔ:‘‡[7T>ÔþË7dëቴ̶‘®ƒ)ªŽc!i�BþÝwßÍŽã¸)ëPвhxÖ‫=æ}ßÜ“¦/Ê” lì(¡X’ã¶t:-©o@Ài1o‹æÎ3%®•ès-Ñê§aa;h߸*æ¿U‚õºJ{rzÑQÂôP60í ¸# ,·”/\Vâû™*o_o®èÅÀǺ–<ï�—ð5ÄàcöxBÎa oËË¢7¶óf�å\N«kê<˜¦ðÚþMh@h9|]îý+J©ú•ÊÁKi×·¤è+{°·œæ#摞ÊÁæÕ‹ùßKmý{ª|–åêæCy؆ôLïþH¶žúëZwå­9 ìg§–<=Ø’«ËoÉö£¦´Ÿ>”ͫߓ·v×èô¯ªŒ^—åÊ£§gú·ïÈîãgÞvŠù‘Å<I+yò /bPвX¸îéKF´byOn,õž¨³çž÷w³×ÂÒ¸»¶¡}ãf˜˜w#½ÛâӉú3oc„†ÁB{2ÂÇ~Žè² þ.ÂÍ^ìóî­= �BË¡szõƒÁ4ÍuÏö–3�*XXèÌ&ÍQÌŸÈæ%ÏâÞ:Ú–kyÀú××&w!è—oI­Ù²¶+QþèC¹±|U6˜úkÙ¾ñ]¹´9HÌ{Ëë5iºËÚúßs||±þ{½.ôû®ƒ‰bž¤“¼ y'1(è Y r÷›]+3ˆ§½bþ¥´¥f\ÖŠù>û†qŶ%}‘9"î¹û‹ùÞkP¸çÄož„„m/vCÔð©7äoÐ~ÇLLÌcšBiE_çxbÞ;¶å‘qØ[Î�ÉŠy%zþQ6•Èõ:×d}÷‘¶r‡ÄüÓ#ÙßÔîäHW$µmn=–Ú­kjý²\½õ¡lßú¯Þoú­W~÷Æ¥jû[êøÐÌoíÊI`;¦üвxÛ‚ÚyO7¯ïÈö¯釲{ô/&Àòdý&òxInüÝUâ\ýÝmøçrEx¤+¿qó·­ízzµm9r]ó‡]îIÔ:BæÅ"y71Œ Ïû½#„XéÚ})_Y£Ö[€HtÝî¯K±|WœzC궨 ‹ÎAûÆM_1ëÝ‘Jµ"«KÁxžµõÛÞé>Ú¥¼X–ªó…<©ß"´Gað1óî½]ÑeÐGÌ÷™2á»ëÑ‘uØ[Î�QB'®·ó·–¿«ÝÈ=—ñ®ÀŠù³ƒM¹¤…«÷»e¹¶ýHýN‹Z-`['ûrëõ-õ›~ë{ó1v‚ûûŸÈÁS-’•pïZÓ½äåײ̻Vò%m™××ao»ÅŸìÊ û7ýÖ¹éLNvˆZÇ4,QÌ“4a„|–£¼JÅ<  'dA0Ÿ© ‰[=¯Þ€óçÌèó¦|RÝT¢N»«+ÿÊ–Ôöïʃ³ßº°P~(OT¥VÛê¿ï$Ö¡?MÕJ4#ߊéþƒwþš÷ >}]…5GZª�¼9óvp; Ü•½'ô5apÃÌo/ÊÚ}ÙypæŸw¬Oâi¡ÜpVåvx,>z(­—f¯\´TÞ1¿= æÍ MẊæÌûóìµxw0^ÉEÓ‘²['Ô}†À÷ó¨Ïyvâ}SßÄRPÿ.NïËÆ^¸þdö–3@”Љ'…­Èá4ÀÍ> Œ+ú ÙÜ?²æ®÷[?mÂqÿV^w°¬ç·\á‹yìq}ósIó$M@�BÌCÔ缊yðüùó…ð® d±1ð">S:m9ÞÑnñJü~r÷¶¬ÀŠ\oÊ…éÑà÷ä°ú7j?#uà8DMG ´ûÆ…­lˆN¾Ð¾8ÇÆŽ<9Ò¼09ÑÂßuyGÒ×`D0Ö©2Ø;¬Êm#úµÈ6çÝ:?à˜ÈŽl1rýŸž‡ƒ>§ôÞ�€É‹ôö—p½¡èý~ä|D¹(ÎUkŸÐ½Ä/ÚG²ãG¹g4{’0¨ha¡OÒböF?×ï±Û:‘ƒOî»åûÂøé#Ù]‡«:…åªßoý4©õ;Ù}Ëv™7ÉvµŸPÌ÷Ì7ÇàfDÐÇì;@•pÿ¢Ö2kIȃ<‹y°(Ó%!„,&ì-g€(¡OÒ–ù~ÁÝBb×u“¿úº¬oïJí7û!aì¥ÖÉìºóꃂ¸ßúI’ø.èRßn=’íkË=‘˜×]—}]FW·<—~w]7yÓ ¬króq©Ot}¦~‰bž¤Eò�ߘÏ{°8 zB!y…½å œ˜7bÁéöõ·Ôam®È‡®Úv_ozÂW ïwJÿøçòÉÖ/¤qðSù¡ù»eÝ>ë³>*/#%7"ýµˆchѽtMnÕ»î÷ž˜WçÛ(Ÿþäòø™'æ—×!¿ùt[>}üØ»>[Ì«ë·?Mç `Œúiº¯å¤ö£à§é˜FJódÞ,¢ˆ ÐTÏ÷¼CAO!$°·œ’óøûÉßZ‘ß¿+7¶-OÕÚ]§Ò¥Kí×&B¼Ó~*Û7•ÖíÏ~.?Ùý™¬_]öŽ¡|¿õãÙG$mY÷òdÏa×óÔM^‘0uÀýF¼:¯ùf¼ ðç^ã?I-p}v>šr´{K®ºÛp­už‘"¬ùöT‚«ëòáÁIáÏÔ/¡ì¢Ö2 UȃEóÀzx#,â½&„’?Ø[Î�QB‡‰)O‰bžÌ‹{÷î¹QÏý|Y$1Œ _ÔÁB!ù‚½å @1Ï”÷D1OææŠ/²‹&æ=!„¼ÀÞr ˜gÊ{¢˜'³†BÞcża‘§WBÉì-g�Šy¦¼'Šy2K(ä»,²˜ô„B² {Ë€bž)ï‰bžÌ ù ‹.æ=!„¬ÂÞr ˜gÊ{¢˜'³�BõŠB¾ 6ž?®— zB!Y„½å @1Ï”÷D1O’u ‚žta;ëAÿÆop°‡BHfà[<PÌ3å=QÌ“$8ƒšB¾¶³ ôœ†A!$+ð-ž(æ™òž(æIRPȆí¬Çq(è !„d¾Å3�Å<SÞÅ<I ùá°Eƒ:CAOÈüÀ³‰‰iÒ´ð-žp£ÃB‡‰)O)ªŽÇñ€#‹ …üh°õ‡‚žùÁ¾/Ó"¤8ÞÁ|‹g�>Иòž¢ê8E™Dg‡»wïž^CúÁv6 zBæû¾L‹âxó-žø@cÊ{Šªãdði1|b ÌÈpØÎ†cý¢ŸY¾/Ó"¤8ÞÁ|‹g�>Иòž¢ê8E ùñ€8Ey‘á@Ðã™Äi„Ìö}™!ÅÑ×eo9ðÆ”÷UÇãxÀ‘ÅB~| æß{ï=½D†AAOÈì`ß—iêy8 {Ë�76ª01å%EÕñIhd1¡Ÿ Šùña`EBfû¾L‹Âõ|’¾/{Ë�7–‰)ïÉ~˜Mú@#‹‡ò|ð^CF…b~2(è Iž¨~SÞR¸žOÒ÷eo9£ð!Ç”÷D1OFbb¢žŒÅüäPÐ’,ìç2-B¢˜_`øcÊ{¢˜'À[=…üäPÌO=!ÉÁ~.Ó"$Šù†9¦¼'Šy2 ù願Ÿ#èïÝ»§×Bâ€ý\¦EHó rLyOó¤òñðå—_RÌÇ€ô ÀHH|°ŸË´‰b~ÁÍfbÊ{"$ …||8Žã&2=ôo¼ñ=!1>€-r˜˜ò˜Âõ|’¾/{Ë„B2„, òñ@1/¨—h¢ 'dz(æ™!QÌBYd BPóñCAOH<PÌ3-B¢˜'„’{(ä“b>(è ™Šù9¥Ö‰<ܺ!˪ü—–®Éúî#yµ_l©!»7.É¥Í9k?““ƒ]Ù¼ñšÜØmD웿D1O!$×PÈ'Å|rPÐ2óóHÏäñî;ré­]y|öXj·®ÉÒµm9jEí›@jÖd}ƒ—(æÇ€bžBH*¡OŠùd1‚ ÿ'„ŒÅü<’m%Ú>8µïÊ;[Öo[¿“Ýw~*gÁý¦“]¹1•˜Ç€ÄdëàiĶô%ŠyB!¹„B>y(擇‚žÉ ˜ŸC:;ÍKK“‰ù§¿–íßµ~Û”GÛoÉò¥ÍŠù–<}ô¡ÜX¾*›ó„BÈ|h6›î ‚ž$ǽ{÷(æg�D<Üí)è þb¾)GµmY¿úŽÜ=pdK È¥¥e¹ºùPÏíVÛ÷·” 3Ÿ¹½&·j¥…mO¤¶½.W/ýHvùS½¶ÿ³<~h–¿+7¶­…9Ü?SçZöŽuu]><8ñŽåŠÎ~Âw–ylKëä¡|¸~Í?Öú‡å$Ò5>tÞˆëñŽ!ˆUÞö7Í|züþGR;yæ ùîo¯ÉÍÿüƒî~®8ÿµ.“ïÉõwä*Ößøõž¯É¶Ê»_ŽZÌÿ`óC]nK²|ã§òPçì`S.¹Çû¡ìžœ…–Ÿi!oΉãïÊÉ {˜‚„<…—Ç…bžBHj€%y ùäyï½÷Ü2(è °È1©u´-× Ê Ž×wåèé×î<ïe-ð<ë²¶ìÂÍû-%Ýyß_ËÑö÷=AgİÙìzûW9Ø|]––oI­ÙrÝÆßºô–l?jªcé9äz[TÞLše½ß_Õâ^ ×Ú”Pþž¬×~ÊWKžlÉÕåÐõ,½®Dû¿zû ±Ì{âÙ»·l–—åÚö#O÷üö©ÊçUYÒ–ù®ðþ®¼µû»Àop½A1¯ÊíÖ¾œ´Œ¥] úõš4Õ54k·ºåسlÎÓˆ˜ôÎ*…ë9–Ç…bžBH* Ÿ-󳇂žÑ‹;Ù¢²»åZ”½Ëgr²ûÃÞe÷ØO-am§Ñ\¸g“G%ªýƒ`êäÞ|xOëu:àœ¿nˆ˜¤ð¾CÄ<~Yáßõ¸Ùë-À£Ëµ_9Ûƒ#víÎ"!?áåq¡˜'„2w(ägÅü|  'd8a‘c§ÁûÀµúr׸„O$”aWûNÍ}6y4®æß—í£¯õqû¤H¡î |Ͻß>¡Ô:‘ƒO.›Ú>y1u½áríWÎ:³ŒÈ?f¢˜'„’y(äçÅüü0‚ž ‰fb1ïºR¿.W×+²[;Z@PN æ—ß‘ÝÇÏÜóŒ“f“G#n-×õ~©õH¶¯-…­»îÒ�Wù`jìË­«¯Ëúö®Ô~³Ü711¯­ë:ßÑåÚÌžCçaÂ{8‹D1O!$Ó!Ï@l³‡b~¾@УîSÐÒK1oæIg–=ç‰9=gÜÌ7¿ô#¹ûIE>=9‘Úú÷¬9ÓAî®[¶wlãÂn°!€Ü£íˇìà3Ì£/Ò—oÈÖCvÃ<óŸÉ­µ@÷“÷ ùe?xžž_o ݰÛ} aìåÛ3¯Dø.ŸlýBN´(_^ÿ…üæÓmùôñÿýßÜ—Ÿ|úÏrj•\}Π˜Ï™ïVÊîé#ÙõÿÙƒjûþCùô'¿Æ£IïálÅ<!„Ì7cX'!jÈ졘Ÿ?ô„DÓOÌ{bÍÌ}þ¡|²û_Ë»G‡:²:‚Ï}(ûÛï*‰hðä!Ä¥Ù÷Ò‘ÝO`áî³ìŠÃÿŸœøäU1šýlóx&­“_ú‘߇F³ß½åE’GºzKå¥émÓ×>v÷·Ý`tÞ9>•í›ßëF´7ùüÁpOkùƇòëÚ­2Ђ^�˜sze©~wô¾Oôy+r>ú/w$—ì}ž>”MD®7þ0hÑï¦ !Oáåq¡˜'„2s(äçÅ|:Àô zB‚„ESÅ<!„ÌA!ŸÞxã È”@AOHŠy¦EHó„B2…|z˜¤Ó@’ƒ‚ž.óL‹(æ !„d ùtA1Ÿ>(è ñ ˜gZ„D1O!$3@È#AÔ“ùC1ŸN èqoð—Eï$Šy¦EHó„B2¬ñòé‚b>½PГEÄxo!0'Å<Ó"$ŠyB!©‡B>P̧›/¿üÒu¹§ '‹�¦–à=a±(æ™!QÌBI5òé…b>ý@àPГ¼cê9žIHŽãôˆ&¦<¦p=Ÿä½Ì79!„D O7“tÈì¡ 'y&,ä‘>øà÷¯-rFKM9ªmËúÕk²yð4b;SºR¸žcy\ø&'„;òøŽ9…|:1h’ (èI‰òHï½÷žû×9£¤ÖѶ\squbþ÷R[ÿž,¯×¤Ù¬Éúò%¹±ÛèÝÏݶ,×¶I+¼mšÔ:‘‡[7d׿|C¶ž <~ëä—²uã»n9/ßø©<<y¦·xL±¤p=Çò¸PÌB‰•Ï?ÿÜí ¡£FÒ L¡ÃL²ƒ>h_„d~BÞN¶È5lÊ¥ÔŠù–4k·<Á}uKž¶BÛUjýNvßù©œ™uÏäñîdkàõü«l¾®Dù‡òèé™<=Ø’«ËïÈîc#ÐCééCÙ¼ú=¹±ýkyj~ûÖ®<na;Åü,S¸žcy\(æ !„Ä,‡òé‡b>›ÏB²Ê(BÉ9£¦ù‰ù§J_ó,î­G²}-ÂÕë_¿%wï®+Aÿ=Y¯ý>¸½Ý”GÛoÉò¥M-æ[òôчrcyÈõ¸¢Û>ž%ÈÃûš…å[RkêÁ„ÀïG¸¦ØR¸žcy\(æ !„Ä…|v ˜Ï.ô$ËŒ*ä‘l‘LM9ÚßR"Wï{õ–ì5ÝmA1¯ÄðÑ?ʦv'_ZZ–«·öåĵ@?““Úäªûû¿•»ÛÿE[¿û­?““ݪcôÖØ¾®1ÄôºìžœöÁ4€×}‹÷RHlk!ïæéÿ%WoÞì^#ÒPïÙšl¯_“å7åæÕeµþ-ù»í›êw?´Î÷µm_–®mË‘{­vò„þÒ]91ë\Ñ~I»þ¿¦øîkxy\(æ !„L …|¶ ˜Ï6æ{Üô$k<þ\îÝ»çÆTñEjŸd‹œn‚Ûù;²lÜÈ]—ñe¹´y gj{PÌÃÊ|U Wý»¥ïËöÑ×Ú­ÿßz,µ[oy¿é·¾'ã&¸³¿«Žõ¯êÿZPÛÖq7éüú–ùÐõœÈæ%¯lºnñzÁúMô:“²{ã’_^ý×1Í"…ë9–Ç…bžBÈTPÈgŠùìCAO²Þöñá x;Ù"ÇO+rïöAnöm®hÿ®ÜØüG9²ç®÷[?mÂq_7–r3w>ìj?DÌc-è»Â›b>Ë)\ϱ<.ó„B&æË/¿t_>øK²Å|>  'y�ƒÁn=¶]ðm‘ã'WÌöÊ%æ['òéÝMí²n¶5åh÷–çN÷ûõ]-Þû­ï=×èÉxx×e§ «ý$b>b¼9Î�7ûÀyÝc&aŸih ×s, Å<!„‰0sù¹¬ìA1Ÿ(èI–Û=Þ#6fØ9~r-óË}‚»…ůžÿ~u]¶wùMíÇ=BŸt;Øõ„~à˜ýÖO’ÜÀwr©×óÚÛ¿»n1ß–Öã]yË€§½®n>”§zŸn2Óºâßû¤ßëê˜ÞŸ)ÉD1O!d.PÈg|ÞŒâ/?AüŸ¬�á5°ØWÌûVîkr«öX[’/µ­Oä¨r_×Â×ãæwWåÇw&[w?‘­šï«[Öjõ›Èõ=ù5yí.EÃÑvP>-æ•ÐÞÿÍ}ùɧ¿“g®˜W׳ÿP>ýÉ/äñ)¦Å|ðÓt_{£~šÎ pÍšƒÏ4ËD1O!dæPÈgÇqÜDòƒôHô$+`Î|Ô³¨¿˜W©u"·ntÝÖ—ß’íGMmÅ6.ì°f?îFˆ¿º.îoËÍe-žŸʇ?ùDî®_s÷_¾¡üYŸõfzز?0iq®óà'»rC¯÷¢Ñ?󾯖=aÞòü¹×øë}wp"òxOɮγ{­'¾Ë|ïÔDùß•u7>¦üLÜkÔÇbšYÂý / Å<!„‘¡Ïóù"VN z’P_£b®„ESÅ<!„™a„<\´I¶¡˜Ï7˜BAAO²�ÄKT=¥˜gZ„D1O!d& ³!ÏyÖù€b>ÿPГ´ƒb|o> Šy¦EHó„Bb�¢€B>?PÌ/ô$ÍÀËëƒ>ÐKA(æ™!QÌBI ù|B1¿8AO€’&P7ûMÛ¢˜gZ„D1O!$1(äó Åüb6Œi2pk&$-ÀžÙlê¥ óL‹(æ !„$…|¾éAšä z’&ðŽ$\(æ™!QÌB‰#ä‘H>˜ïg#ù.Íô$ àùƒçP?(æ™!QÌB‰Xð ä!êI>¡˜_\ŽŽŽ(èÉÜÁ4Ÿ{÷îé¥^(æ™!QÌB‰ ùÅ€b~±¡ 'óÏ ÔÃ~PÌ3-B¢˜'„ò‹Å<¡ 'óuoÐ(æ™!QÌB‰ ùÅ‚bž�#è ‘ÌˆxÔ»APÌ3-B¢˜'„25ò‹Å<1@У9Èå™8A]Ã3hóL‹(æ !„L‚ÑÕvñÀà Å<1 ==™|‡wÏ (æ™!QÌB™Ó§_<Ða '±Ás€‚žÌ‚Q)æ™!QÌB™ ùÅf’É?ôdŒ2˜H1Ï´‰bžBÈØPÈŠyÒ z’$°ÈÃ2? Šy¦EHó„BÆ‚Bž�Šy2 z’Ÿþ¹tuóL‹(æ !„Œ :æxQ0ð¡˜'Ã0‚~áEȨ|ðÁ® žQLL‹(æ !„ …–6b3I‡,ô$nÞxã‰=lj)o‰bžBHò$ Å<<?0Ç™‚žL ‚ÞMó졘gÊ{¢˜'„€Bž„™¶CMÔ z2-_~ù¥¼÷Þ{zi|(æ™òž(æ !„øPÈ“(3aš5YL(èÉ´8Ž#÷îÝÓKãC1Ï”÷D1O!Ä…BžôƒbžL =™<w`Ÿ&¦¼§q¡˜'„œñüùs­"}¡˜'Ó` züŸQÁ{ ï'BH|PÌBHŽ åŒ ƒbžL‹yÎ QГQ€·"ÙBâ…bžBr…<Šyôd0å ߘ'„Ä Å<!„ä� y2*ó$NðÌ¡ 'Ã@=A�<BH¼PÌBHÆ¡'ã@1Oↂž õÏBH¼PÌBH†1Bžî‹dTèîJ’€‚ž b’(Ý„á°eBH†(cšŒ\]éîJ’€‚žD‹<ê!$~(æ !$£°ãL&bž$ žKˆZŽèå„�<oP/!ñC1O!„BžL Å<I<ŸðMq zàA†é=„ø¡˜'„ŒA!O¦bžÌÔ1 zè©AHrPÌBH† 'ÓB1Of¬±ô‹ÍóçÏüŽaë"„ŒpïÞ=·cŒÎ!“B1Of ýbóå—_òS˜„$Å<!„d�vˆI\PÌ“YÃç×â‚Ah>oIŠyBI9ì“8ÁTÏ?ÿ\/2Ìs Ÿ)#‹¬ò°ÎB’bžBR …<‰t®)¨È<Àó ó§ñ—,¸ßŒñBHrPÌBHJ¡'I@1Oæ ýâ€w"ÙB’ƒbžBRˆéðRÈ“¸¡˜'óõ•ôùÓyðyBHrPÌBHÊ€€§åŠ$Å<IxÎQÐçÆç $y(æ !$E°ƒK’†bž¤>ïòÍ»ï¾Ëg ! C1O!)[2 (æIšàs/Ÿ è<Ì!ÉÂVF!)€Z2+(æIÚ0Ï?~<?àË<!$Y(æ !dÎPÈ“Y‚ºöüùs½DH:0ÏA̳&Ù3÷îÝÓK„¤ ˜'„9b:°ìôYA×W’Vð<ħÌ(è³¢Øs€šäáBææ ‘W2K(æIšás1ЈÙÀ7:!„ÌvXɼ ˜'i‡ÏÇl1OI¾Ñ !dư£Jæ Å<É|Nf¸×#Ð&!$yøF'„Â*™7ó$+ðy™M†_& d6ðN!3‚S’(æI–0ÏM$üŸ¤~þ’ÙÁ7:!„ÌtpØ!%ó†bžd úlg ï!³otB™°Æ³#Jæ ¬e¨‡„d <;ùM?xÆàó‚„Ù@1O! Ã(I èh30É2|ž¦›Ï?ÿœSÉ™!ó„’ ìx’4A1Oò�Ÿ«é÷‚ž2(æ !$!Øá$iƒbžä>_Ó \ìÿøÇ?ê%BHÒPÌBH £ùÚk¯±£IRÅ<ÉFÐS<¦¼ï`“ÙÂG!1sttä yv0IÚ ˜'yà œòy;¾üòK>_™1ó„#ò$ÍPÌ“<2HÐÃZüÁè%’$ŽãȽ{÷ô!dPÌBHLPÈ“´C1OòJ¿ç/ÜðáúÍçròàÙë<!dvPÌBH PÈ“,@ËÉ3áç0,öòHø?I”ýóçÏõ!dPÌBÈ”PÈ“¬�1DH^1Ïãÿñ?þ‡/äM¢ÐL¼ÿPî„ÙB1O!S�—BtÑ$$íPÌ“E JÈ#±î'ÞŒM@È졘'„ 1– y’(æIÞAÀ;|ë<JÌÓrœ˜¾Ãg !³‡bžB&€BždŠy’w„-JÈ›Ägv2 Ð lBf Å<!„Œ …<É*ó$ÏÀ:%àíÑIâe ¯BÈl¡˜'„1 'Y†bžä·ëç^N´ Ç Ê“ƒ$„ÌŠyB#ä?ÿüs½†lÁy­$ïÀ:ŒÀ¤¨ëæóáÄÏÔÅ ž),SBæÅ<!„Œ€ ªÄ É2˜OL«$Y$Œ¸‡à´çÓó3uñ(öôV#d>PÌBÈЄ…‡BždŠyB<·pxZ‘xÀ@7Ë“ù@1O! 'y‚bž'ðp€§!d>°õBH(äIÞ ˜'„Ä ¦0à¹B2ÆESêÕ²W*Òx¥×…i;RZ*J¥q¡WØœK³^•rqµ»}àþóà•ÊÒMYt±ÐQÅY—jyUV* uÖÙB1O!PÈ“<B1O‰~!#I.¤Q)úq 庒ÐQ|«ö»®÷[‘’s¦×÷ã…4«ozûO(t_5*²âž/Mâ}NtN¥ºZpË“bžBR„<!y‚bž'x¦À:O’¢#)þeQŠ…7¥Ú|¡×wé´Y+(a]ØúyG¯†(°Ä<޳¾3ºõ=ż˫†TV(æ !$À!ë<!y‚bž'°FòË� ÷õÒGR-_‰°ÎÃÊ^’bñʘVö˜¿øJª¥Ëc‰QŠy ŠyBIò$Ï0ê4!$.ð,Á3…$Œ+ækÒ„…¾°.Në¥Þ 8¯Kùú'R¯ÙsÃ-÷ü’#ížeküæ[OÈ»ÛÝtSœöóÞ9ñòRÚÇK ^�K«r»ü¶|1žCß]¾ã<”÷ø)nJ«u¤——¤PÚ“Ó íMÐiKc¯,E7jßò}i´Õµšùý¥Ï¤áŸÿº:Ï·úw-©o¬êãïIuã=@@­;¬”T¾Cçðç½ÿ•”j¿•ã½OqGnþ°ý@*~9y×Ò6Žó„2(äIÞA'„Bâ�ß–Ç7æI¸b^‰pwnöŠ+ÇJŠXåoJ¹ÞŽôöÔËW,ñ^YæCb´wN¼v÷/”dç¸-_@{ÛÃûwšUYu—`!-g] dhGš¯¼ã-]QùÿFÿ¥»}E‹ûNûP6Š)”%Çf~ÿÒª”S¹è<gM‰j÷Z:r^ßÂjUšJX»¿»®ø+k�Ã//¶€@0çpûùÞûRqCœæ¹ž¾`bèã¹çôòZX²¦=PÌBÈ|¡'‹�Å<!$.ðÞüüóÏõI #æˆ4sã/Ž¥RúH/#ļ->,÷ó èFï Ønþa7ûaËîuô,k±l‘ $7ƒò®Å|¡$•æÚbºF÷|fð�èßšunXôžk£˜'„ù \)äIÞ¡˜'„ÄÀƒcøb^·úBAV«'ræ”å¦óLIÒ¨O°õÀ“Šù¡bøò@1ï×uª®'̼_œŠS†—��´õ>b¿žü€ž< óvCÔ*ÚÕß:Vľ³‚ouBÈB«Âk¯½ÆyÄd! ˜'„Ä¿ù<™¶˜7Ÿ¡+¾-¥ÕM½~ 1¯ÝÑ{ñ0±®-ç‰Yæõù kŽ´zÔ|Ÿk \¯'´w>¼±¾÷ó\ÿƒÞ:í.?PÌ¿”v}KŠÅ²T/äIýNðÚ(æ !dö`¾…<Y$ÒÒùF›ƒEÏNæ{ÕáÏDá+aŽoÔyð<°óCO’nÎÄ)­Œ)ì�ffîr¯tÐF`™'Éã N_„G‰RýÝøÀ§é´u×½’‹¦#ėõÚÅz½ùÓå‡òäAU´^ht#XÍ·éͼu3gu bøßBû‡\رÆÍwxÙ\‡9þe)íyåaã3uÝ:¯~èeßâþ±Ü4¿q=Ì9‚û‰™k_X“êé¹Zö®Á@ð½t¹ºËZ ûåƒÁ 3g¾(wj÷eçÿzßÞ¯ $Å<!d!¡'‹H\bÞ½hK¶(†X¶Å3:ü^‡¯›0­ÅÞéÞ½{ã˜ïû|Ó¦p~M çÛÎ/žö6ósLâ K»Ìz-|f"eÏÚv• v7*÷’;g·!õªJ8hK©Ív‚ˆ¾+ÝeÑiw#hCÐTäIý®|d,1àôZA4ô ÏÊhðÔ´Y’$ZûuG·ˆÒ›ïDxwcYîÈÅ鞸@~(ÎU½ýyð¸®ØÕì[ýJ¾ ´Y-Ðí:ªñ'woË ,ÕõfÏþïWÊÁß;U)õ]Öy´i>”×RUœÀ²#gÏä#羬0ƒ¡²3‚>à’o hÊQåg?¸ìü‹œV×¼¼©kÞ;¬Êm%ü݈ö/ƒ÷`ÖÖyŠyBÈÂA!Ot4¢0¢ôË/¿Œ·h/¦£‚n¶…-Ýa 7RÖÁw´Íµ˜Á�ã1€ S.¦L°Ý B,Ž…_G»VåÐkò¶­ÚŸ¡Ê:>V\é~žÊ|Vˈ¬r-–Û.,ã Kt(ÑäIuã:½%u÷3Yf?û³`ÓåŠ=9h÷h „ùB1OY((äÉ"a(„%¬hßùÎw|Ái‹P[œG‰rˆY2#øØ‡Ø1^ Ʋ{`D~>ѯ{æ½ÂåöŽlh÷Ú<vöP׿©¿q ì9Á6î@�½¶ŒGÌGöÊlGvbóÑóŒ'…ïQBÒÅ<!da@'kX É:FhCÚ–bۭ݈tKóÕÔüŽñÙ²6^¶ÈÇ_ÜÜÃ|Ü3O6ä¾ ·à %rm«|Àݵ›V*Çòm³.Uµ­Pº-·]Ñ ÷â—rÑ<ŠqkÇÜݽc×*Þuã÷ÜÃË~`¬·+RóÝ„õ÷²uvÆFÏ‘u]nÃ.ó†~bÞ/'3?WÏíµ®i0U^y.½fù¯¤Tûm×UßÏv˼ß4ˆsiîhWì!×b+ˆyBÈü¡˜'„,è(£óA·@’àš Ám`”K·ê؆}ŒÅ) ¬Çþ$=àžoî-î,øýîcꉰ2wš{rÓŠ Ýu+‡Ø|¥çöjakÍ] Xø]köíš®#KcΫÿêÈž86óñíåÿ­…²:¦ |…ÀZ ;˜œÊk©"NX÷ó(Xö»Szæß;þ¢Þ*#W”Ûßè.nˆÓ<÷æÇìs‡-ózZD(ØÒÒu©4¾uÑ<—ø,!$PÌBr…<I#¨—lƲŽÎ1’Û!WÉ,cöFàá·ì€§ â@(AÌCÜã¹…Á¬Ë&²6­aþ7–7CÖ<KqWðk˱ùô”«Ý@Rz¾w@|kk¶^çYã˜7Öz³:¾"ÚM~|ºŸÃB»Õ±LÇó.˜wï˜oXC˜›9ô„ËÈ]¶ÎÕS†a1¾Š#r£~â™D™?ó„\C!Oæ tغŽúˆŽ:Ä–eûaÿ¤¦QÌg<¿0ØcÜò³t̳ kK;âõîgµ<´eÝ~LÎÿ$ÔP! LÄxO°+æû íp$úh1¦Ó>–=wÚÀeYsžy×1²›}LO?ú»ÛŠiÅ|ÏvQNà92ÍÀ"!$>(æ !¹…Bž$M?wx#Ø+<¶7xÔËy@1?s/GIóˆsaúëhz«yYjµ ¹%X«»+˜Íç¤ô¶¡i¾AmÏÅ×ëô·§£Å¼Ù¿ŸeÞ|{Úd#|]á|÷ó&�žï½ ò·q?4à1$`]ø\îòbÞ¸æ[ß/÷ÖYƒ*}À=KjБ2ó„\B!Oâu ¢ÖQˆbc¹‹ìiYÈ×"‹y#Öq „QfÐÅ$¬%…kŒÛñ¬î=žo8B>pþô=纟© pƒ'ăVa íîmo÷¬ý˜›î}Þ®Ó>”âß î‰wí6®ÿȮæ‡÷µz‚+Ôí€ufwι7``‹yóÉ9Ìo_•zK‹f 6\ÖßÕöÜê½ë[Ñ1"—‘»lYú{Ê08-yi9ëRð?‘ò–èê8¼ŠI?á@‘ù„bž’;ÐiG']BÆU#Ú!’LP2ãõØ>+Ñ'È3®aQ0.ê|±Å7–qáM1­—ÊÔxeب/Xƶ$-˜86꣱ÖãzSƒ „)˜ì¤¸ ÁÛžºe³®Û GÇÜÑBÛ”vN»BײôJË‘³%+~tvm™/¾-%ý{ìsÜo>ú(´%ç«`4x?B~ØUßNJ<Wö¥Þ´g¥«üU¨údGëy+Øh«»9æÊûyß_^‘Òþ¾µƒ ÿwýzÿîÔsi:zÐE%<o¨c|·’tÚÝ/*¸õý@žÔïÊGð‚qÁL= %Õ^«ÂÃ&wäP=#>úhqnµŠyBÉèÜ¢cËÎéÇ mÜb/Mä½n„-®bÚ èaݬï#ê—2õ ËIæÃ ÖàÚqÍéæ\N÷>‘ °gÍ¿žH§»×ÍžLÚTªHÊ0_ª0Á7ÊjwJ‹™âaO{ñcNt½oÌ3¡hy±˜ýFç=ÓMAÆ-Ù™têÍœ ˜'„ä yb3H´ãÿ¨'yíýÀµ"å W#šñ÷;M÷õu uÐXí‘Ǥ<;PçqŽ4‹z×ý<üw¸Æolznð±£Å¼=?œLêê!‘œÀðqÇÉý×ô@€Ò|#ô ÉóºlîÄ-æ;ú™SÄјó„\@!¿¸Œ*Ú±OÖ\ãã$Ob÷шc´{ˆVÔƒ,�a:iêgRyÇq!¼pŽÔÕûð'ØðI·r5äzZ8¸çQ‰Öù‰A=E’YrœÊaÇZ¸hJ½Z–bám)߆U{EJÕÿOï:ç_ú#Ø6<Á«%bÝDmEÇfÀ4?žD˜ž2:Öƒ7ðÖýêƒObö‘ì¸ÓUÔïnßv¯Û»6LÕ±§²˜OI!íª|ýÏNª4èS‘s„-’’y(äŠöéȃ˜7VxÜwÜï,{T >›ëAÆõÄ]oqÜs±LȤàÙŠúJfˆkYÖ1:ÏÄYSBÔº–èöƒF­t l4nñ;Òp]ÛÔ=Ÿ“®˜F>JRqÂóàˆyã‚o¬ñ=óïÁ¢ÞýRÄoÂ¥ T¸ç5q;º:½ š]˼ý…ŒÀç6Ý­ébž’iŒg#_@¤Á‚ ‚{ #:¸×öœvŠöÑA™!ece6®ãy¥¨ÇÆZŸÄ ŽgÚ!“€çRɼ}^°gD­³‰ØîZÃ/ë/C@änȾ 1 aU{ 1ï‚y÷ŽeQ·¿a£-ùöo¸ÙG‹÷>nöcͽŸ-ó„LƒŽ/-NÙ%lmÇËڸўe lZÈ¢˜‹ø¼Q{ÏÔÿ¸…7ÊÇ^„²$ñƒ:ɺ3 fJ͸|O$æûXÖùó'R½¾œ£nG¢ãa ê÷Ê®u¼ûe‹QÝìõ:Lb?êŠ×!Â;í†<¨™†!bùð™?@1O!1B!Ÿ-pŸ N V`]ǽÃËq/±Ûy?“!KbõÀX’Q<  $%ê10f¦)2¨7ô†š1–Ô7®K±|WœzCê±:¢˜x 7(åÒ¹]Ù”ëàu㢄úÆý穟˜7ðŒ—�>ñXñÝà ý-èób^»ÝãxÎò¤~g e¾Ó>”âu)W©ëOfRÌBHLPȧ›°›<:îø?,ðhq[É`² æmwpZ�=àµbD}\B Ç1ƒh¤ êžK³HYó62ƒ@d¶xóŠ”áön滯lImÿ®<hÿo/Ø\@˜ë�tÖºÁÇ0?4ëºsÈ'Býr `'ŠW¤X9V²+}šÎ¥ÃZˆù›‚ïÏï5ô—/Ü µŸ=Çß”@À<Gš/ü9ón„üOîÊ%ȽHûfÎ|QîÔîË΃³n9˃>“Ú¢?0àÍ™WbþÎg²¿óp¸G ¡˜'„d ùtŽiØMÞˆˆGÎmO¸¸imõõu†m;ˆ±Ô£máùGùàxŽ¢^ä#ÌÍ "<‚p½æ9NfzÏ,Ε³ÝÄAÂ5Ì{��ƒkÈ™1_IÕuñ†@Ý“Ãêß(Š9ã§r k·©;®x×ðÀºAǰçëoºOýùF%æ+T}µ£Æ_ÖéÔæ°«¾• ¥ŠÔêMOð»@Ì"NóI ª|¡ô±÷ ‚÷RÚÇkzuÞO>–òʪ”«u%îÿ,§Õ5ï8 8¬Êí‚5xàσ ÿšTOÿlE¸GdþR½}%4÷?PÌB2…üü@™£C‰Î¥¹x±¢Sj:žØÎ{“N pÒDD<ê}ƒòAÛ‹kÐÃz3+ #¡Þ±%manö3Ai}N™gì(×gbf%ú1؆s¼‚àq›r=…ÑÚÉ`(æ !™ tb³æž˜E ŒE EÓ‰4XâÑi$Ùÿ4Ý3´c#PX—ÆåWÙ¡­ã¹ ñ˜'\ž?xÞàZ‘ÇQDú¢`®wèG™aeˆíØÒ3<û©|¸ßß,G•#i‡bž’ Ða¡O[¸£ãg:Íø¿™ßÎrÏ>¸ŸièŒÃúh»Ô“É1ÏE”ç4 }£ÍϺã|ö ¡ñö1"ÔXƒ§¡‹Œ=(‚²´Ÿï(kcÕÇ=vïñ›4z3éðæ˜k·s3/d ŠyBHê¡tÆÂÂÝtœM§Žæ|’16l܃YÏâåˆòD¹NóŒ4ÏÙ$òˆã›çŽíÆÊŽõØŽúIÁ˜<(c”µ}OŒ5ßùØŽ{‡z…}!éƒbž’jL“B~|L‡ 2ÛU2ZÜÜ÷yŠy•õ‘ÄÊíå<)FXO‹ïpïÆs÷݈óT"ý ‹|Ü;ÜCÜK¬ç !é‚bž’ZÐq tÂБ§p'QÌKÌcPÉÔIЏdAŸÆó¿Ç3wÜßâëÏcuGð<âs'ûàšw Å=!é‚bž’JÐI@‡ÿhŒpG‡ÊtžñËXÏr#aæ!æq>tü!è>=PÎÕ]Øã‚gÒ lË»-Þq^>{òî±±ÜãÞSÜOÊ)ÿ)I(æ !©V�<üÐ1 ÝŽ3:Êvç ‰ÂŒ êÍ,5ê&%þ’ÙƒgÊ\·y<oð;¬Ã}4–Y$üÇæó‡ô÷“ &-I =2’¾Ç¬A„TaÜ<UÈwU{¾"þo:δp’I˜e§ytèéb=_Pþ“zFË;žAÆòÊ{J†aĽ]w(죡˜Ï?ó„…a…¼éô ³N7úî°Â£óC—E2)¨;¨_¦Í¢ÓÁˆ<Òîž)¸'ĸ-àQ_(ÂÈ´D ±Nu¡˜Ï?ó„Ü€N%„k‹ äqèÔ 3c:ËøK‹IÔ)Ô±~ u")ŽA#Ô_ã^KÒÇ yôôÁ}C½ÀÀ"êcHÜ„…=êdÏž,ƒ6GòMÒ÷˜5ˆ23 äñPCÇÑ&Bacu‡XÂuwWtfÂe@HoA)ñ ˆ6ŒºMÒ ž±FÐã…û…:‚„gÕ¢ +2;ðÞ·õˆë'ù&é{ÌD™ è$ñ€Ž£±ú`½¡Ï2蘠£ŒÎ‰±ºÓ]žÌˆ5Óîú¥ië&Îa"I?¿ûÝïä'?ù‰{ï!¢xßÈ<1{fPiѼBÐI¾Iú³Bf‚7 Ëxa7ó¬a¬îè CÈ áÿXG«;I hc¨›vÛ³ê븠~G+*qêHzÀ}Ã�£<å�#IX2uϦEõxN’|“ô=f "„$N¿Îÿ~ðƒLytza-@ØXÝñËXÏN1I3¨§á¶‡„ó¤e3udPÂ>dþà…ç•q¥_$«'É&è3˜rôòüŽÅ³’䛤ï1k!$qúuüÿÏÿóÿLeÇ ¸£30:¸cugg˜d t„£Úß4óÛû ÐÙ ûù¯#â!è Éxv¯¾¼DáÚH¾Iú³Bns¦s• ˜ÇÁtPãäÖK3è€Î/:è�ÓM˜äÓ!6 u|ZYçi•Ÿ/>¸øKHÖ¨Ç3Ï­¼ ¢’|“ô=f "„$ ^¾¦ƒß/€ /qXÉñ›IE6~‹$ÄÉ›±º#´º“<¶¤Úæ1È:O«ü|@¹ã¹†g"óÀKi,¥ÚUAŠeGš½mñÀ�;ú�0äÅõÏK’o’¾Ç¬A„Ä%’6^ÎÃ^Ìx‰Û¿ÅEÂ[utnqttÑÀï)8È"6€¶ƒ¿qaŽi§8OFÏ9<㦙>AÒE§åÈÚʺ8­ i×·¤¸ô¦T›/ôVE§-Ç;%)¸mï²”*ò¤~W>j\¨gâ”VzÚ§—V¥\ý•4Ú/½ã¸ØKR(íÈá“Cù裆¼Ò{¤¼×1ºÇ ä¼AY“|“ô=f "„$^¸xÙv;Ý7ytøÑùD‚¨dˆrÏÇ€�DT :¼ôó2’OÈ$   MÄ9ˆ…cÙí2îã“áàÙ‰ç)žu´Æç‰WÒvnÊÒJE‘jú[iT®ËRqKê®(Wb¼q_ÊÅU©¸b¼fõMÕ.oŠÓÖé´¥±W–"ÚkaMª§çX)µnU6ê-µ„ÝŽe¯¼*+•t‰yžgèc ‘eðÌ$ù&é{ÌDI¼h!¸ñ¢…ÀF1žëk^â�BçÁ2’9'!½$aµµ­ó´Êψwãm4h@”d‘ %Ö‹ýÅ|çTª«)”ë9îÑ‘óúŽìøb^ØbÞňwÕnW«ÒìhÑ_Øú¹åÆ^—ÍtŠy€úoŒY­ÿxn’|“ô=f "„¤–~BÞ¤ÿõ¿þ—?X@‹!óÁ¶Îsmv˜©Góu«W¢°Y—jù¯¤Tûm×廸# wn7¶H¥tYב‚7¥íêÅsiÖ«®%ùŽóPvÜ}¼í­Ö‘^†»÷žœêyâÆZìkUÊ{ÇúXÚ¥<Rø¦%aÂç¸w½—z-äßH½|%ô»0ýÄ<0¿‡ëþ¿)ݾ¡Êóòï‡ÜïÓ D<ú õYô¸·$ß$}Yƒ!©/dã&?(eÝ½Ž¼�Ë­ò³BžHsŸ3¬­Ãî3¹¸!NóÜ›ç]X‘’s¦vÐÖå’#my)-g] FoÞw§Y•Uý,÷Ä𠽂Þ^iëñ)׿Qçz&ÎZQJÕ¯ÔQ_ê9äzÛ ÒšÇ‹c©¯„öUÇ­«ew‡Á–yE§ÝPX*”¤â4B¢~˜7.ø&ïáù÷N¦D}V=îÉ7IßcÖ BHªUÈ#Q<’`‘§U~6 „|j¼‘^5¤²b„±Y޲$cSEV–Šþœîð²RžRêYöŽm k;4§;uyÔ";àÖ®-åþºábÞsàŠ¸®;‡Œ!æ]0ïÞ x ˜9ôY ‹‚åœ,ž—ÇHídl¢dÂ�ÚÿýÁ63)M©WËRÖ&RFÒ÷˜bž’:0·'ûÛïýRÝê!d`‘ÇùTM+A(wÚ yP3‚s2¡ìíŠæ>*©Ëc”P ïżÁ lWXs¤å*ðQÝìÃù5Áô ²T@4ýìYè³ú1CøÕ‚”¡½SÖœgòª}(ÅY­žÆ0 ¤ÛÊ€b>�Å<!$Àêg‚Ý™ïÃ#ÍÝÍ”Bf�.a‘OÄ@¡¬ÝÇ‹e©:_(r' ŒÇÊ—]‘0¶0H]UÜÒzËÃÄü™8÷õ¾†ðoú‰ùŽ�ÏþدÒ#ê{®=#@ÌgeÞp¡7ÊW f„úúǃ…t¸}ÄÊx\˜N³ž‚�Žó„±ÞÓµ—²` )uœ×¥\(t­oî²ÊZ4{×Í|ô¢Ü©Ý—_ë k]7oÏM=¼¬mæ¾J²sÜVçR‚ôô¾lì`õKa½yûf.¾ÚÓµb^±Ân÷aàâ|9°Î;ÆŠ5ïÞ XbÞþ4/µè/–e¯|c¿–Ô7VÕ:(0;Às%•_ z#}µ`œËiuM C„t²@cˆù‹¯¤ªÚ‡í}3/(æ !„Bˆˆ“ÔM+ÒBÕ%X§÷÷ƒËοxÀŽJ(Vå¶ÕˆvŒN¿ÙWuþª”ú.{–ïÀ\ÜQ£Ù§&aÍÞñ\Ù;ΩáúzBÇ¢ö©<PuÃŽˆYJ;G}#âû Áòj_HÓéóŸˆÓ|"‡ãΆå8CAðlàÉ/¾´ƒrÌ(_-ˆø2‚[—°_rXµD­5…ûú8æË ëRk|¡ë° Ȩ…¼®^}ü:tlãböQÉmÝ/Bt¾Zw¸cÅyðSFbO1Py+#_¦_4õÕœÒB¾› f=žS•ѬâAà|IB1O!„’b0˜_ï d<R(²£½a_-ð¼<Ìôí–Áû¢;eļ»ïÊšTO•x6Þ… 9<þ¼Ñ|©Á|¹¡O k̶~‡-óÞ2ö3ë´÷‹‰Åà~Õ¡ÐÇ‚î]‹Tò<O ~¼c{ùóÊÀò¾Ñùóë.ëA1w^¿*OJK²PÌB!„,(˜R„Î þBFAt‘ÒÌÈB¯ïW ±BD­™v¡á'OhÛâØû©-Ì#\ÜÂÙ]ó °Î60bP<w:Œýµ…nö‘â=˜·.ãͽŸ”q’PÌB!„¤¸ Ã2OXåÓîj?¶Ðëùj¦%GÚz—�Q«÷í#üg"æÝßDMé¥÷Xy@y<øÌŸb0XÌcŠÁC©×|ŠyB!„’$z‡OÒBÆ'i!5-Ãów6ä«ÚÚÞ/Pb”˜ïó¹Á™ˆùÈ€~Ñ„ƒM†óà¹Ý_—rÕ‘ú“Ã`^Âys§\—bù®8õ†ÔÃ×’ ó„ù‘è'F&AX™Ñx4^Jûøcíúfæš u#d¼€VAKÃ<Ic{DÏš_:(°RFxï½÷øÕB&Ÿ©KsûIÌ«çÙ ¯˜ùâÚèÍ¥G´û»²‡O Ú_nÀW ÛÁ ÜîŽÚ÷ßô—Ìçq ,‡Ä<æ×?ù•|ôà™tBÇîþÆàáã˜/FØ辑úÎ~¯·€ù:„~Žûsæñl_­HõŽ— b˜¯C¬ÜùLöwJ[‹ùBù¡<yP•ZmKVL¾Ìœù•-©íß•zð")(æ IW¬B„™d Wýà2Ûú¹0e†ˆH£~‚U4óIš…#ªlº£Óƒð‚É`”ûÂûVqà»Ád<z£/ÛÂÕÝïþ¤šžç•ðÍëÁ G EOÙŒæ–éuÒŠn ¨WºÃ;ÒÜ̃ëO]{B2BšÃð9Ýp[FûŒz/üj° z{õ+¹Ð‚Ö[gÞ§¡}u4û—¡÷ë¾ó~è}ûR.;ž{?>§øíqèØ¿•³p?Jõ›ÏÇ5Öy+B=RAä‹Àœ-”vän¹¨ú«U©7ÿ,§{ú:éÿTo_±b è@€¦,ü÷èïîÉaõoB ɼ' Å<!~ƒ·G Øö¶÷ Ðk²Ž7*kwŒíϔ臞޲pèQæQÜ¿<Òi™Ì6n‡¡ç>xÛVõw™s±<Xƒ…ö±ì•WÝ€ùõb2ì;ۤΛhz‘›Á4‰y|‘ž¶ OZè‘ùC1OÈ,pEœù¬‡êLnܽ#™ÜÎn„•Kdi‘-Ëó¿1‡ŒÄ€'â¼à>z• ÜõîÈFÏ [–ÑÞ=ž?fÑúÔÎÂ1~ûŠš¯™uèfOÈä �^Z>O1ag zŠùüC1OÈLРP„ÏNëlìxs’<:rÑt´Û¸ !¡óØ’f½ª¶]‘Ryݵ,zôsiîô¸4u|÷'-¬ÃË®ÅÜ‘Jé/åíÊžåfdæ9MH?1ï %Ìk2âAåÛ½žUÝ1î.ßqêüxs´Z-Û Ê²$ZQW=×&=çë¢)õªZ_úL¾»×uužoõïô·OÝãïIuã¯3o~gwîÕºC™Ô>‡Ÿßu©5¾èæWÏ1‹$ æq¯ëR-ÿ•”j¿íº„w¤á^_?—ð>÷Û; SCKp¡F]°-Õ§âh+vð^Ê“qÚ£Žþ~áå„Úc_1¯Ðž"ÞsÉÔÇÕPýTËw9òëç–Ô[ϺõÕv_œk{Öž¢‰ùùŒ˜*ãþçµÝSáŽyœ©é ˆdˆöÙ#\g ™=h÷iÁˆy$#èÓ”?’ IßcÖ B4½Q3!t3(&\ëµ :‚ !k¾àèÎçµ-üª3—aÓ¡ö;źêvÖ-am/›Ž¼:¦'_ùóƒFw ¯˜7eàÿ¹=ž•Ëlëæç…b‚;‚¾©ü¹îѦ ½ '+ZÜ›À%…ò¯äØÿΩêX;§ra‚‘¸‚F 9=°âþîºêð¿²Ä•/<ë¥@ðƒ£(pÜø_“?“ßs­m1oÜŸq |Å °b—]Ør8ä~“щˆxÛiîÉÍ€•Z[¯]AhÚ‡7Õÿ7F{4ƒz¾°¶–“jƒÄ¼©ƒp3ÞŸØS?õõ˜�@~Ð7ímãåo¾í±qþd„öÆn_ö÷‘£òéÑc™wËàŠž>ôRǵPÏ„Aƒz)BÖùÌaÕÑÙ‹y]oÝ)ê¶ãžX ¶‡U§‘¢Úäçøì³ç/‡æA»Ï¼Oÿä]Kâ„ÌÌQOÓ§él1A¿$ß$}Yƒ1ñ`\{±|s/]ÓíX‚?$Œ{]<½Žz ³¯E»ÎVg6¼Ü#¼‡|‚dFóÈoøzz®Ï=VxYÛvr;æºÓäw–ìN»é„•¤rØ u¸íýÔ¢{>{�ÆXt½u^~» Þû"`™7ËáûcwLCùv¿õ*2 ¦®›OèD ®õ”wPÝÍý ×K³œD{ å9€iCæø‘õÓ®Þ±ÂËî±SЇ·§0¡ã‡ïGÏöð=×ÖúÀýÑ4SݳÙë]fçͽÇIÑGÌ»ÛÌ»®°mŠ89Á#=¸Õ3]È\Ô¿õ)槦çy—ÒDòMÒ÷˜5ˆó¹ XÚñ‰ŽM¹ž«ª-yÞËY¿ˆ-WàñÙ‘±:Ø‘[k¹G<WÒˆ—º»¯õ‚ð;.!zŽi0ïîÝðõô\Ÿ{¬ð²>¶{-ýæûé”\§µ.b¿^±¦°òàmŸ¡˜ïÙˆ52Ïr«ë:¶×ƒÓ`\«,­FðkÏ™~õwøýéS/ÍrOÛÐÍqý6Ù¯#> ~èúOdý´¯Ç;VxÙ=¶»ï|Û£—ßAí)L(Ãò©æ¡w»ÚcÀ=K/pµ¿wïž^ÊCïqr¸uÁm;Þ [ nÛŠ;NŽ=€ ï òð ð–ºƒ‹¡ß»eçõ/Üö@=&£¶A°°eÞ$’o’¾Ç¬A„ØèÎs¡|_jå›!+ PÞÿ†J…’ìwçC÷tf5ÌtÆýuZpDvn­wxЖÀi^ê=ÇÔh—Ü®%´÷zz®Ï=VxÙ²Œ´J N»!Ž;ÿÖt†‚ûyžAâ­³§>ÌPÌ»ßzcE-K­¶Ñ;¸üÏÍ MÝTÇnýê¥Ù?‰öØWÌë¡%8"ë§]‡‰ùù¶Çáí)L8Ãó¼çúþX®þ:»d�ðJ¯u^µœp\3à¾Ç˜ *ùŸ‘BýÒÓ2Ôï7jwecÇûM¿õ^{PÔö5W(C$o©vd¿óô³%Tzâäôͯ‰ÉbÇäøHª�Å ç¿Ûß¾‹ííwMÂûª¶|FA@8§mzJX̹I¾Iú³Àt Õƒ6ª³ç¾˜M@¸0Ʋm‹Ecí7Ÿ| YMÛíp¨Î³¡ƒSé¼î¬ç Znxàuì{™OÓÙßÜ _YîZ¼c…—MgÞt¤-áµñ™*×pGJ/ëNù«ÆÇrÓü&`Ùîç}SZu Cs ç„—_Ó1Šº?!üÁm)q—-q¢·w;FlKÌûMÆÄx¿ MØ‚ÌàÕ±èÎüíQ­qÅ¡{?_©~¼ìôÚ£?À` €î§épî04‡Öªáúª^öÚÙ¼Û£ùí ö&ܾçSP2ôŒÒqb½gs–ù4Î÷ÊØ :éw¨¹'!1o°<oÜ{ù—úÿ^»¼îþ¦ßúé ¿¿¼çIp*O¿üFÇ䦨u÷yzE­#cƒÁ/<·ÓÅÞ`‹yy€ÿ“|“ô=f "$„÷‚r¿S˜Îª~{É °ö¤~G¿Ü‘ì—±-ÒU2Á©ô6/ˆžZ+ÿ‘#wVV»Ñ–Ý»:~émý{«#>6Ñžý¤Ž[Ù—ºŸ/Ó‰1Û‹ò~¥¼>§ê ›èe=XÐiw£V»å„ÈÖÏ=Ádö-UÅ ,;rÖøL>r¬o߻׬…–ÙÏt.ÀÞ½hªN{0ÿ7eßy?°t±T6Hêzö÷ÝN©¿ìü?žÕÓÞÇ t¿ÉØiQ6âÜ܃n™ïWoOÐmÏÔ»‡âÜYÕõV‰ýXÛ£Bò®S¡T‘ZÝš£®E‘Ù¾ò~EÞ·—UûÝ·êcxÙ,˜c{ æ?ª=u­“.ÊÆM=ùÜ—ÿo¸ »$°Û_ ±§ d ÌG0/õJC<–y›À6o`¦PÚ‘ÃÀó²ßú?[°Ž“c90a?[(æÓ€i'iü„óFÈ,Š\ñvÌS„àr3àeJâeœ{< ó„ŒÃÅW²§:øAQKÄÍd^¾î‹=¢£KQœËéÞ'ò àõàYóã²Þ`{$sBîöé±8†§>„ˆóøDâƒÏ|·|o[hÐÅdë·>Fˆ“"ó%æõÀƒñŒîõ[Þ(6/ï˜Q^HdT_"­_€˜·…<Uè¹^E«k]Ñœ…Aæ@žÔïÊGn}ô‘Ü6Ó“V¥\ý•þd(0mìºå™Iâåž$󄌌g~jÆ{n”ï».œ±ãЇ>B׋&·Âµ olznÞqÃöHR�Ä�}:,ôÚ2o}³ ‰yošÃu%&©?9ìúp¥o8žp³ßú)ñ§ªDÇÉ”ß^1¯¬üyž~}>Mª=ýºâ_—¥û©M>a&BÞ|¿=Dåk$¡çÖ•¢å1ª§³ø1Ð>à=eOÕõÉöDÄÀÔ^Ùó,3Ó¡4î4’N LŠyBRD7�”=ÂY÷ÜHãÆæ<´Ò:&N¥Òu뮦‹ÄÛ#I&pVØÊ7Ì\òn|Ä.¸+{ƾX†`µcRtôï”8¾ó™ìï|&ÎNYÌéØî~çÒˆ\×;wPœœAùý'9ŠÁbš.3¢Ï‹È|š.ËñÒ@Ú…|?P÷£ë½]?ÃñQ\°ßŽìøõ±ß—;t½ë©ó^[“ÄÁð{<ó„B!ÃD¸‡ëî|y)íã­AµËž˜ÕVyo,ÚÇò­“±aHõöm]|.½»âÔt< ßãF êÈõ =À´ìOÿ89êì}ò{àlõ‰ÉáyëyÓL\ céÔƒ~ÀF`ÇðÀ9t¼22ïp«Ï¢Ã…ž7}#XϽuƒëÌ ÏpšßÛS:’,#`ø=žŠyB!„ A1“E!CÈ4 þ#جòY­ÿC…ž;(Öë æÃÓ™ %©8¨$æ ~0fƒ7@Æ�ŒqC1O!„B"ˆ˜•¾Ùl굄äD«‡HJcÔúq*ô\ÝgjWxª™?‡L*æ9,n(æ !„BÈ@L`<|žVz’Wž?îz¢À"Ÿ¶ïÈOÂTbÞ`¶ëÆh×Í^A1Ÿó„‰A‡–;!2æXÎ2¡“Î^È„,2舆ÛÚJTJ2…ó€D²‰:õiŽGH\ ?ƒ*#<·ò2`5TèEºÙŸ‰³q?:`£“ax�¼žàŒt³OŠyBHè°™N·é›o«"áÁa’Yg'ó›Y¥>ø 'QyÄ5˜ß˜ë£è'YÃÔ]{àÌ´Ìo6õ–%S÷MÂ~æ7³Hè‡óÐ/Ø¿[«¹FZ€Ó êž¹wy°^’ÅÏ Páù˜·>ž³ƒ‰ €‡ïÈ_Xô¾†°"Åʱ’õ`ȧé.ùîç�/v†ßãé ˜'$ekélG‰t¼Ôu°³ô²³½p ak5×mÖE‰~B’ÆÔUÛznê$„“©§¶�6ûÙÞ)YÂ<ì‰qŸI›¨¯¸æÞd­î‘ÅÆÔ_ó<ÍkýÅós0Ÿ¦ƒ˜¯<Per _‘Ø9ÒAð öWüçs !X^틈O*{⟟¦‹”{’PÌ2¢�/*#Ì‹‹V° ¦Ì¢ßXMÙÙå¶ÈeF&Ãx¾ áj•ðSDz*ÒãÆ”™)·¨²C;5žXô2›FQO÷{’fð,Á»}Q¡Fzgâ¬#>Ÿ–#k+ëâ´‚Öz2=#Ýã) ˜'$ALÂÒO[Ø[ºBNÊÐX@Y›N±èãžÐZHìú‚¶h…L}1j¬/Ó3Ê�&Ö›Á’ (_”7ÞKì$iíïh<ðwQž¹¸ÞQðÜè¯KÙ9ÕnôqÑ‘‹¦#euìz+±Á‚EfÔ{<)ó„Ä^<è(Ù"‰"rþ ÌQö¸æþ؃*X‡Ž-Tò î-î¿-ÚéÉ‘FTÁvÞ›ø@y¢¬QÎxþq�…Ì ô›ÐæÑÞñ X´>Úà¨xß–¿~ÎÄY»);Çm ù„çOÅ<!‚Ž%:DèAàE„ÎEAvÀ=½Â=ýÃ=ĽÄ=Eƒ/Ù±ß}¥pɸ‡¸WèàCÔ£C„N?Å}|àg\šQ¶h,W’4¨wh×v½[T’zdþPÌ’ŒxGÇÇXŽŒUâ ? ÷é÷÷(<¸Æû–/(î“m劶ƒvÄ÷‰´OSÇÐvYÇ<(æóÅ<!s"J¼ÛG²÷lÓ¡¸OfÐ%,Þ±ÛÈb@q?ÆjŠv…„ÿóYG&mÏi´O´S¼;Ù6»$-ôÈüIú³b@Ë;DX<qÏžd1Vã1AñN¢è'îYG&Ãb(K¾É0lC„†“´Ð#ó'é{ÌD#àÍKÿgg…Œ ꊩ?Æ=•Â>>Œ˜@ÙBL@¼³SHFÅnŸæùNa?>f0 mÑìFy¢ÒÒº¸Øâ=la[Å|þ¡˜'$l7B#À(àÉ´ØC¬W“ƒ2£€'q5pËz5FÀÙ^(S´[ˆ~Џü‚65°C¯É ˜Ï?ó„Ä:pÍEËË„$F¢óCúq�ÑN¡EfÚ§0‚aûœ9´áðTмlƒ{‡{Èûš óù‡bž)HÀKLjt6èHf „=:A¨‹©]Œ¨ÂËD°‘Y‚wÚ§y? }òýQ\üÅ2ÞÂ,ëô€{a„{Ô=ýä»+~(æóÅ<!‚—’-8‚Læ-\ñw‘ë¤=ÀA+<IhxW˜öÉ:?(cy”¯‹D1–^ æaŠüä0¢ÝL“@Ùãà^ÀK÷Æ ¶äA¹“|“ô=f "¹"/$ZAÓÀKi,¥Â’z˜¤Xv¤yÑÑÛœK³^•rqU* oUÛ‘ÒR±»<w^©,Ý”¥•Š4^éU€Îê&ê(êê¢tšpݶÿ'³¥Ó>’Òe·s±Tܧy®·„‰hr&NiEV* ÕÒ@<í1 Þ4Ƙ¢&^Â[ râY€g"ž‡Fä#a ÛŒÀÄþd0(#”Ê é¯ÿú¯å?ý§ÿY®({–éü·’?’¾Ç¬A$7àEo‹ŽìÏŸNË‘µ•uqZÒ®oIqéM©6_è­A^5*²âv4Ò$Þ“u4\oóHxð‚®ôs¢óLœµ¢¬9ÏäUûP6Š+²Z=•¨áµElaXo“aÔŽ-Ê‚ÔX1À‚û€g%Ža걿ƒ/æ:q͸v”Êe‚²Aae†íÿüÏÿ,o¾ù¦¼óÎ;ì¥ ŠùüC1OÈ0¢Œ‘|¤Ex‰g‡ñ­fž€XLñ�!XÞê1®Åt,Ù>ç̘ž.‹Üà}K=½½¦#®Ž-îž)¸7QbßµHØ ûãwá4ëtT>Ì5!™üÛ×…÷Ö±n®iXÝÄþ8-ñé!®ö@ÒKÒ÷˜5ˆdŒ.›há&iãB•"Åü˜ .çA4 }âp-èh’ù3nûb{ b¿s  ÈdÌR¼wscÝG2Vìp²Åò¬’åá„<šü"︆¸¸yÇð¹œPH60íq\’¾Ç¬A$“àÅfFܧ<¹hÖ¥Zþ+)Õ~+Ç;%)à%[Ü‘†;·Û¤bæ˜bÞ÷Æ¡´]¿ÔîœÒ;ÎC=ÕÛÞjuç¥J{rjæ‰wÚÒØ+KÑ«|_í—jƒ75ZøË£â¢)‡½Þݶ%u÷¸qæ1L¸lV¥¼w¬ËF_ÉJÑólí9õ«r»ü¶º#Âsvc¼U^õªZ_úLþù¯«ó|«×’úƪ>þžT7>ñî‹ù}Ÿeo——ÉïºÔ_tó[9–aÒȈ\þfÍ-/;3 1vއݛ¾uÝ´“UY¹ãÈ‘ßNÔöÖ³n»)¬IõTÏï[×µWI?!;Ë<¢4î«zTÐÇ*Ë^£­ŽAߺh®ëuŠ|Ö jVÞݶcy+ÏXÚ£Éï€çèˆàýc¼ÁháÔ¿4ƒû›µgg4Ä ™/ioÄZü?Ñvà傱QžIßcÖ ’9ðòACŠÅß9•êªé${Á ÜyÞ…)9gjm].9ÒVÝ–³®:€Þ¼ïN³*«ºa{ò…ÞŽ$½½’‹ÆŽê¸^‘rýu,ï÷+ZlvÜ9«)”ëJö `hí¦8mÕÅv·ܹ°¯’ÌãűTŠW¤TýJ•’îœxu\_¬³Ì«Î5Î](Éα'~‡ÝÞ5!ïÞr|åý+9®¾é•' œS¹pç+±íÞ玜×7¤°Z•¦ê㻿»®:ü¯ôõàwþ5}«Ö]÷Ì9 Žÿ ókògòëݧQÀËVY Ær9ÉèµÈ i¼7ýëzÇn'Z@zÛÕ² ôæÖYSŸ'l3Í£ªؾ¢±i#… ©Ÿ‡hÿºhÄê`Kûàö¨~,•\³˜‹­¼gÓçO†>GÇï žaã2K3Æ*žwðNQ¢$ïƒiÆ{ö1å=% Å<É xÙà%û|/·“juèt§5Ê’î ÷tŽÃsRÝe}l»ók§¾b×bŒ<†·%“Gmé ˆŠo¤^¾b­&æ½ýmñ4¬|ã»{ØyÕâA‰šÊaSLB×äžÏ �ý[½ÎËoW¼÷äDÌ�VšÝ"1ð`¬•ÓyË º7îŠ.ávÐÓ.ÂÑ׵ǎ=M{œUvЍCCê"\ÿ†·Ç©®%íÑËïˆÏÑ¡ Ü÷4Ë<ž·‹p?qfÀ˜õ—þ ô¼¿TŠÍ¸8ó$˜ÓDn»Ã¡ƒ×i7äA­¢Ý?»Û±Ä¥{\m¡ó¶ŽÎ(P¸°>øÌw{7Û’Éc”x1®¼F¼8 âÂy¶<ùµ X<§ «$î·¶Fìד`åÁÛ>½˜Æ-–ï´a:¿ñämȽ}êºwÏí:5@\Ž\×£˜QÍqµUzÃê"XÿFh=ûÄVÞCÊ3¦öèå·[½ùŸ [eŃfžà>¦ÜÏErAÇ`žá¬¿„ôb»Ø›tåÊ÷‘†A0Šy’zðrItäk`O»ËRu¾'õ;ÎbOçq¨¸\’š#­qÕÃN¨çNz]ÊUGêOÛ’É£±ÚŸšÓë|á!pl´¥.1ËüÀk"4ÄqÜù·ÆÚÜÏsý oW.^~ãóÀX¿ÑñJ ðÀ‹->¯Á÷fP]7÷¼+Ά‰Ë Ûã¬òhŽ[Àç1ï»?Ãê"XÿFh=y­¼—§aÚöèå·ÿstZ(ˆFÏ‹´³HÖyžá¸æ4{€2Ì”*$´‘·ß~[þéŸþIo?ó$ÕÌäår^—²™Óê/ëžé€Zs>êNí¾ì<øºÇÕë8†—ͱ�¾,¥#/PÜÅWRÝøl¨Õm`ý¿çÞnæ­®ÜùLöwþINÊ£9Op~ê÷ÖÞ®a·û0æ\fž¬™£‹&:ßÿ¦Ë׈‰^·áɯEçÍxÐËZ¼j|,7Íoܲ6çîç}·û²ºÆàœfO°˜ü1e–'ó�Ë´zÓ>ÑñA÷fP](mÝ.|A¨ÆÕÛ=öíqfyT‹nF;ûXŽÝ@nçrZ½#{þ šf`]twèi?A†µGu¾ÀsG[y*ϸڣùm¿çh<PÐ' b,šuÄëeEH>@Ÿ íÂXâÑNà-œ(æIjPÀK?Q!¯Åº×a]‘Òþ~pÙùÕq^S`µŒ(Ò‡U¹­:ƒˆ ~v «•ÙW 4§*¥¾ËÚÔiw£(+ÑÙ´¬-X¦Sj34_ËÅ鞺¼÷@ª·U·¸%ÎVŒy ƒèÐN7ÊvÀýU_OøØaìs©ø'woË ¼ êMùÖµ šßåýJ9¦kyî‰-³o©*N`Ù‘³Ægò‘c"ˆñ¡EšÙÏÜ«€ ° v×Q·ÍÎÿMÙwÞ,ký$¤AÐ!¯h •qϽùoÒìS×ëgGV»€@Û—}«†—]+pߺ>(šýŒóï ?»J£ÙG×ÅîõècøÇ1 =^žC*¯ïWäýXÊ{6íqøs4âù4!ôƒA™gE´ÎÔ[¼_™ÖHH‰r§‡˜OTŸŒÅ<I%p'ÆK4^‹!ù/¼LæxÅtr)V‰‚‚ˆb¨—¬ˆy°ˆÖy€zkâ@LД|!ö‘(æI*ÁK„n^„ bãYŠêy"’%ðKÃt˜´‘%1¿¨ÖyƒùÔ(n é}¡4)æIêÀ(xZF»I;ÆÝ}VMtî R!ƒA›DÛÄ—(H—,‰y°¨ÖyÞ1¸giq)&$-ๆþÅ<IèüнžÑÁËd-óyº]2òi ””²&æÝ:`™GÐc’.fÀvÞž+ó$U¤i !YaVí£Ðt&d<ÒÐÙKYó`Ñ­óÀ|e±È„ؤ¡_D1OR^tå"d<ÌèpÒsœƒ^3„Œ:z´hvÉ¢˜7–éE±¸~D¹G_T„¤Ãc‘bž¤¼$²ø’'$  ƒ•ä@D<½f´4Ì«L Y}ÏcPfѭ󃻄xφyZ穜Hj`‡‡ÉA'3ÉŽ&æþ²}2>ÆrC<²Z¸´ÎwÁà1ʃޔdÑ™÷³o’ðB€u1U\4¥^-Kq¥"Wz]¦x%mç¦,e6ÿdT’n?IŒÛ#É(°YØ u>ˆ™~0O«$!i�ý¯y}²—bž¤†Tˆ…�/¤Y}Óíx̾óÝ‘óú† R?ÿ“ÔËWd©äH[ÎÄ)­xyêI«R®þJí—ú1ÑiËñNI 8G¡$;Çm•»þtÚG²Sºìæ©PúXŽýü|ã^G¡\—óóº” +RrÎô62-I{¶Ì¿}γ=*Ü:{EÊõ?ymsé¦8í?̾=ÊKi,¥ÎqYJ;GÒÜ û´ß~Ï’tIî‚ö‘UhïeÁÀxdÑ÷⼦"RÌ“ÔN7Þ iTŠ)óÀˆˆ )Õaoì•¥èvØ×¤zzî­ŸšoÕõ_W¢|ON/^ÉEcGŠ…uqZ}ÊűTŠW¤TýJ•œþíš#-W=PÌ' F„“´Ž@ÈÏ?ˆ×¼Ú£"RÌ#³lÝõ1u{[sžõ`Ô~)ægI–lÜd½,hï"åÂÀxd‘Á@ß<ê?ß.$5Àj‘¾�[ó¯YY­J³ã‰…•JC¼,hW][<¸èŽ>„û;½z|ó^a r½¦‹-ôÉ¿GY®ÊjõT:S©®®J¥qáíG¦&iËy:bZÌQÌ¿jHeåM©6_H§Y•U?3l=í/¢ÍÙ i¿ýŸ1$NŒ+2ñȺ˜§u¾?x¡l`œ!dÑÀ€Ö<Œó$Uà%?û¤êt7¤¢]Ã]÷XçTÉM9¬h—U¤â–Ôm§%õUµ¾ Å=©n|âþ¦Ó>”bÁ=îFí®lìèsÛ‘’:Fß´Ú¾ævºÑaß’5ߊÝO<�¯³¾´ä‰Žž9Æþò–8GÆUWå«þiÙ®»®e] …Ày´2RœèsÛÖ=W´¯xÞÍwY ì[ŽÈ?™í$;P$o¼ñ†^J˜@;Sí©ìHó.,æÏ¥y¸£ë­©Ë-U×}Úcßõf Kßµ}Mµwˆfˆä5SÏgÕ®8z´¸ æøFh¿}Ÿ1$N<2HÖÅ<˜W§= ˜Àxóš?LȼÀ³~fý$ Šy’*@bÖîk–êÐ.kWUÏ-µÛ¡Š×’¥;ÇÞï Z¨ê޳î$»þúŽú :ó©÷y)mÕa¾>µõkx0.¿°ÆýÁË;DŽ›³ÍgJ `à `èëw-}*¿8O@ÜèsÖ<1œˆZGâÆDËNz /©Ä#ë:éMÏ0Öí¢öâ‰y×Z®Å­©Ënì×û­wÏ<!³j*Ãî� ) MÔ:—¨¶:¨ý’¤˜g`¤4‚:ŸuÌ3I/fð7É©_„¤ÔûY»ÚSÌ“TWÞÙŽj…,U= pëu…„±¬k‘P(Iå°©~eð,s…ÒŽ6ãš7;ªx0®ívþÃËáν}ìcŠŠùy¡0‹/A@È'maìoiÚc`[¿öØoý4̪=ªó™l}Aò æ„*ÅjP÷1u‰SÈ¢�Y?(æIꘉõÏGw¦û~Šnõà3ß-ߪ§â”á¾ K›±¬Á…ß‘²ëf¯Ö7Ä™ZÔ!·Þ©ÄÃK-|ìù¸ú÷‘ƒzàžOïxï’³j3èÁ}2ɨܶ÷K/í/‡R3nùf[d{°~bfÕÕŠž9𦼸ÙÜ~I` .öAÐöò�­ó£a3k%!ó`1R(æIêÀœ“Ù—Ñ–³~¤Bmoþûu)W©?9´,ó]:í†8®°°;ÝŽ7�Ð÷\£ÒO<tnu#ÈO'¼©Öuè9ðÅʱ:R˜—ÒrÖâÁ³²^—Jã[w™Ä¦¥Ì2pdÒçóêLP°v Õ_wþûu)–ïŠSoH=P·=¢Ûcÿõã3»öèOAðÌôó«¸# 7¦@ñÚ/‰Ó©ã'é‚äEÌZçGƒZh ŒG ^Ͳ®SÌ“T—áY—1sß‹‡ú{ͰhÝ•=×Ò¥-k®@=÷:ÞZ¬z¿SbþÎg²¿óPÎËMóÍgß‚öiì”õ·£,e“`\w-ñ` ËÊgòï‹ûz‡ð`†9¶±ôÙŸ¶záÎùùÓt:ÐXWȸH@iÖˆùÄb[˜yãv=>ÿBvöàݬ¿žUZ‹Uó»•-©íß•š³Ñ¿Q¿‰j§ÓˆùY¶G=@ ?Mç .ŽúiºÚ/‰•DÛI†É“˜§u~tŒ¡†m‚äÔñYòQÌ“T‚ãì,/¥íGŽF2Ñ£µÕÌ]§ÒÊ©µçGœ.ï=êmÕ×õWÏä#ç¾v©WÇpƒ:ÆÞ]qj^ǾPÒÂ^áÎuÍ>oºŸ';apí õ„ó_–ÊûöòûâìÃê×gÙˆÛ-¹X–½†Î¿ÂSö|]{Z¢ß—†/dHœÀs£¿ó¬…ÁÔ‡¤:í#Ùñ¿.±¤Å¨LÓë\AüíWRu÷C]Û“ÃêßHAµMD´ÙQg£×ûmËÚ£0‡öˆþŽ~ž¸Ï¡cE އf@û%ÉŽÜ,=f²êbž u~tðÎÀ{ åÅyô$¯ 3«:N1OR æ�ã¥?»ùó„d¼ æÙD»œ‡W�!iímƒÖÚhò&æi¼¿Gï0 z’WP¿g¥_(æIª1nYô„x¤AÈŒ çœ`B<Œç Wò&æî{žÉY‚m…ä™Y}eP̓ԃ=øóp'&$MÀò“!o€ § !'£’G1Oëüd˜a¾?HÞÀ³�u{PÌ“L€ÎæYa”‹nYd1^*³ 9&_óFHÒØnÃòÃÉ£˜´ÎO†y00Éx'Ì"ª=Å<É è0AÌó{¥dÑ@'Y~êd\Œ×�­SdQ0Íqh¼ŠyZç'íïlHž€c|ó$s˜ï•·{Î×%y¬YüðòJûÀ!q€A6ˆ7N¼Šy@ëüäØ.!yÀ ö& Å<É$ðßÿþ÷å?þÇÿ(o¾ù¦^KH>@GBãz˜5K„<^`蘱SFò†]¿é%6>yóxÞÑ:?æÝǶEòÀ,¼‰)æI&¸Áè-É•+W܇?]³&å•´›c~_›$ñè âo–;„hÆr™Å‰ùÁö˜VÐ!ƒ€Ç{‡»&'ÏbàÙD&‡UI^À³ éxBó$s C…Q[ó²„àÁ<+cÅÌüˆøy]Ê…+R®ÿIýwC K7Å9û­TV–Ü—›—V¤äœyû¿j·•~"WZ±öµÓª”«¿’Fû¥÷Û¸è´åx§¤òªÎQ(ÉÎq[:zSö‘ì”.»y*”>–c??ïš R?ÿ“ÔËWÔõ8ÒÖ[óJžD|\‹@™õQí±ý­4*E«]©ä×ӋжÿKþîïþ/kÙN)–ïʃÆàö2>/¥}ü±” 8Çe)íI{pƒìÓ~³=†Á;í2«ž2iu?Ïà™‡kÌÓs|˜¾«’,O.“„bžd õ4jŽ"¶Ù‚(i·–Ĉ0Ñ}ãu¦ÝŽu¸gþBšÕ5YsžéN8–ßTea~«PöÆ^YŠn‡}Mª§çÞú©°¹®Dùžœ^¼’‹ÆŽ ëâ´ú \K¥xEJÕ¯”ìÑ¿]s¤åf|±ÄC¸Îæ¹ó‡k…¨ÏÜ [ßö¨ëê¶}ãíkÑiVåº_¯½åU{‚»q_ÊÅ‚ºÿJp»í!:º ê6®Û[÷ÙfPû]l1ŸÙ:›rò.æžçHd:Ðæd¼C’|PÌ“Ì0ªÛ :^h<èˆeÎM˵´¿)Õæ O�øî¶Úâé~ ×ÜM©4ŒЮº¶˜wÑ}úÕª4£{÷ãá‹#h¼A‡B¹.½Ã¶8Ð'ýþU£"+nÞ¼‰•JC]M¾ÀH­-©“b¬œ™tëÛu]]*Zí΢íÈM»îªåR@Ìk\± AïczÂí/¢ÍÙ i¿‹ÐÃàa¦qÑ?‹ æÑÁur�hzÐþ æÑ&3k¤! êo’R)æI&0²Çyã€N:d¦S6“ëES+ÚeÕu£½¯ÝÚ•nÖ¥Z^•Bé¶Üv;ða± ÎÄYÛò:Þèh¯…Üw§ó@[øxPù­WËR4Çõ—·Ä92®º«²Qÿƒ´l×]×’h¬“öy´W@ä`>·mÝëœJuuEV«§êh %zÖ\!coÉZXüdÔG<ÌM}ÄÿY$ -BÌ'?èv.ÍÃ]oU*–eϸµ›º^x[Ê·WÕö±Ý·=Æ$æý6TðÚ@¸="ÿõª”‹«rÇy¨§§¨çÊÆ¡´ZötXÖu Áóx^Qƒ#´ßœ¶Ç0fm¢!sƒÀbÄ<˜Õg©Ó„Ç !Yïôs’‚bž¤¼ §‘µÝ™1B–Üg³l—ÕŽtÚ‡²Ñ^ܑƷÇþÜö®[ù8Ä%æ >¬qðŽ ‘ã×l³{ç™3 «RvNU.¼kôÜý_zç äIŸ;2ŸJ•VBÖ½¨uùÁX¢hM®îe3è†6Ž2B‡-¾A·Ëy§%õ ˆö몭œuëþ i!ˆG̱­ž åÿ.‡öØÝæ>7ÜçÊ i9ë®ø/–i×xãîïž'”§¨u.QmuPûÍá©. Ƀ²^ðlÃ3ÖùøÀ»õ‡ƒm$KàY€z›”‡bž¤Tztð‘âj�8ŽmÝZïvšm—UcùÒët°ºÉ„kbù 7¼îÜÛÇ~Ú‰Åó¨gf$6~š_ÂÓwؼº˜òáZ®!œ±nP›Nüb>:O=ç ‹sûØám jKT[Ô~óy˜¤™ym—Eó�u Ï4xO Ý²\I–@Ÿ&©ÁbŠy’JбBG 븄|XHa¥GÇ".k}dçÞîhO%æu²!ÐÿÆ:¯-¸Ã;‡Üì§ó/½ÁŠÀ|\ýûnöqå–‰v1Ö«²Š-FQ!F“ª¿yÆ †±5ñ`Hd{ó¾7Õc:1ïµí(‘ì ô¿İÜì§ó=sàÍï¸ÙÜ~³ žñhŸæ™OëÞ|X$1gža,Š”+ÞH|Ç’,€~ ÷’€bž¤3ꊊ? ð"ˆËZïYØ‚ÂÔ[§;ÒqˆùÈN9DòMk}?1ß €×uõ‹‡ðò 1ÿJ:-GÖlñ çÀ+ÇêHa^z.–xðÊnÏߺËYuÅ®?´ÂÇK”µ~äΛ[ AaˆÑ‡˜ˆ‚HÞ”ëöú~bÞÀó]ý§ózZLwÀL{â`ªæÔ‡¯ýf´E<Óãx¾“xX$1hO¼P®õxO’fÐwÁ rPÌ“TÊŽNû¼,&fþ$ò€Žþ¡6ò‹ÂÌ/ÍÑõ…³vñÔ¥Üëxcî¬õmvpo%0߸Ò[bÞþ4]qKêþ·Ýµ¥ÞzÙÜúXáePÁŽðBÚõ­Ñ?M.Ÿ �!€ú‰º:§gé:n(wtÜPæø‹”{q¯ü€/Cõ3\÷ÇÄoïö·ÙuÀ½•`ð­l1oš&[ú÷á<…¦ê`{¬ð²TÆ ðâvŒúiºÚoÊ ·O<ËñÎ…O‹&æñ|B=ä R2`°åËw0I3ÆP™ó$5!Ÿ–2„<„ò…„ÿ÷§â”d A«L*ÕÖVyoý¤‚^uÔuD|s7P]åÀ;‡‹v#ö·[I‰ŽJí k_m4ÛWÊRyß^~_œ}Xáû,›Áûšíhá Ç×àhcGûO'Qâbt (æ:Ç({ÜÜ Ü#îq¯‚f%® oË­Ÿâ4a³×ý ½‰>oŽ£R¡´#‡î9€ñdénï&´Ý}©ûûöæé·¿…UÞì_”ŠS•Rße3X`_óª”÷Ž¥md”wРö›rð,‹÷‘žÓdn ž-´Î'‹é?¢Ý’VðìKbPbž¤¼äð Nsç+ÜiD£¤¨Ë¸—áAÞçô÷h£h«uù!<ˆƒ¶‰ûLñž-QÌë<ß!Éö2æ  I+xo%a°¤˜'s/8tÄ`UËš š±ØÂvýÅzv,Óî¬Q"÷0ÛàÞ…eð3(“µçÍ"‚û„{ˆöhž±h§fzïa6YD1Ì{†$ú”xV áÿ„¤ <â†bžÌ óÐÅË-]\ƒ- më½±rT~~a�!€{‚{‡ÿãžáÞñåŸ_ìÁ·~÷Ÿƒ7óíí÷Á îâþà/ŸùcQÅ<ê9ž9¬ËɃçú`|¦“4~úqC1Oæ°ÆšgìNªm]µ£AcØbrrLY›#ÚÌ  Ê޶̲¬ ¾©/¨+èh›ºbD¾©/ìNÊ刔)Ú¢]æø?Ú,…{þYT1̳†$ž%x¾àOHÀ{u2n(æÉÌAG •/µEÂ�å`Ä^îHè䘎-’ÙŽ}ÙÁõêΠr£#Ó2lPÏ.,›!#>½ž…Å:*•öÃþøY,P<_ÐP÷Iòà9¾èýM’.Pã~ïQÌ“™‚^äøK¢é'&ŒU ËHØf ¤´XœÇyX™kFµàšÌušë6bÝ\7Ê(M×Lòϸ¢ÉW¤y3I[1׌d®)|ÝösÉì“–k&éue‘AÛ@;!³Áöe_Ì´ý¸½E(æÉÌÀ ]ZJ§Ã¾¦Ól:ÖH¦cmDETÂþæ·I%äÍ`DTBM~Í:;oë$k„Å>’©Ûö€:—f}8™Áª$Òw¾óÀ²qw';¯ö³$j�‘q@Zdð>C›bÛ™(s<ÓØŸ óïO¼Gã„bžÌ4t^)äg‡mM 'ÛúTB‡Íü?*HãXï ÉxFµ ã‘“T²Û%’í5Nìô’$Xt1Ðö08Ff ú¢4*‘y‚w|ÜmŸOT’(è +;†‹;l„¤¶K2oXiŸ'ÀDÙã/!³I¨qÂ'*I X]!â1J!¿x°ÃFHú`»$ó†uЃÖùùA*ÜBf žqê">QI"˜‘'y²˜°ÃFHú`»$ó†uЃÖùù‚~* NˆBƒ™%¨wq¶{>QIì`>]˜;l„¤¶K2oX»Ð:?_ âÍTPÆð!³Hˆ]|¢’Xá\$b`‡ôÁvIæ ë`ZçÓã‘Y‚A¼8#Úó‰JbƒCbÃ!éƒí’ÌÖÁ ´Î§¡P7iŒ"IwD{>QÉÔ`dBžnJĆ6BÒÛ%™7¬ƒAhO&ÞSÜß'ÄÆÔ³¸à•L^BñHø?!vØIl—dÞ°öBë|z0_bb`<’$xÆU¿øD%c"2b=‰‚6BÒÛ%™7¬ƒ½Ð:Ÿ.p? æÑÇåÔQ’¨[qµw>QÉD~£“ôƒ6BÒÛ%™7¬ƒÑÐ:Ÿ>ànÏA’qF´ç•ô€‡× × !£À!éƒí’ÌÖÁhÐïzã7(Sû¼$ âŒhÏ'* €¹Bxhá…åZ„Q$ŽR’Q`‡ôÁvIæ ë` iOÆ•ÓJI\ÄÑžOT�"/Z“l7z<Äú‰|B°ÃFHú`»$ó†up0´Î§xN`ž3Ø ïUBFmœbž$Ä»ò&ýíßþ­ÜºuË}ˆñFF…6BÒÛ%™7¬ƒƒ¡u>½ l>ÅLÃ™Ô ÜÅŸ¨$�æoo§¿ø‹¿þçÖ{2ÔBHº`»$ó†up8´Î§¾àvWiB&%®g!Ÿ¨$�FƒQ¹ú%ŒHÒ:OFõ…’.Ø.ɼa­óé÷‚>®ˆädñˆëYÈ'* €*× Ä ÔBHº`»$ó†up4hO? ŒG¦!®g!Ÿ¨ÄwT¬~ /~šƒŒ ê !$]°]’yÃ:8èoÅ5§–$úΘCϸRd\Pgâ°ã•ø Bán'Šx2 ¨;„tÁvIæ ëàè°ÿ•øÅ'2.ðt¦˜'±‚y?FÀ#ñ%B¦6BÒÛ%™7¬ƒ£Cë|¶@?šñȨPÌ“Ø1Ÿ¥£ˆ'qÀ!éƒí’ÌÖÁñ`Ÿ,[@ÈCУOMÈ àÍG�E>Q‰*_$.Øa#$}°]’yÃ:8´Îgó q~Š >q úð‰JIvØIl—dÞ°Ž­óÙƒñÈ0(æ !©†6BÒÛ%™7¬ƒãCë|vun÷ ŒGÂ@Èß»wO/MNöŸ¨M©WËR\©Hã•^— ^IÛ¹)KiÊwÛ‘ÒRQ* ½"cØùï´¥áT¤T¸)N;S#7°ÃFHú`»$ó†up2hÏ.¸oô¼ÄÁïoZRðD=§´â>ÜMZ©4”ÔõxըȊ¿-,Ì.¤Q)zÛæ.Š{¯£›V¥\ý•4Ú/õ¾‹NGÎëRXzSªÍz]œ˜ã£ì)æçê>!$]°]’yÃ:8´Îg7Æ#69ó #)ª|¡\—s½ÖÃÛ¶ZÚ“Ó‹Ž^g£ýˆb¾Órd}§;X//¤Y}3( a!Þ+»×¶TX“êiðê“o¤^¾¢Ê© Åʱºƒa^JËÙ’ËC`üû¦=¦óg⬜1ôÀ!éƒí’ÌÖÁÉ¡u>ÛÀÕsè?øàΣ'yóÀx…5GZÍ+ëÙ¨£—ÃŒ!æ/¾’jérÀò/ýdw°biµ*ͨ1‰¢Ó¬Êõò}©AÐ6¤~nˆ*«Ó=),wÿ‰îÛ´bþ\N«kRÈÜôôÀ!éƒí’ÌÖÁÉ¡u>û@ÄCÀAÔ?þ\¯%‹HÅ|×kXG7>‘†m•ï´åx§ä¹Q×¥¬„ž/æ/šrXÑÛÜí[R‡{»„î:7Aä=—æáŽŽfݪlÔ[*'“2H@k´¾¾ð\yKœ£užŸ?HëØ,_–Rõ+mÉ~)íÆ}) j½ÚV,Ë^£R”f½ªÖ¯K­ñ…ì¸×l[ÀÕïê[ÞÀBqSjÕ÷µÜünÕš3¯„uó@*~¹­JyïXÚ( “ßÒgÒðów]ýö[ï§}÷ÂM)×ÿ¤ï÷õ3Pc„<Ž¥“ºŽ÷Â÷­ùÄ;wám)ß^UëV¤äüK(ÿæ^¼-•š¹ÇªüvŽÜüw§ox÷*¸üÜòþ9qü3·Þù^(Óò}N�ÊŽ’.Ø.ɼaœZçó㑊yEçTª«…€«}§¹'7«§–ÀþV•ëR(},ÇJHuÚ‡²A«E±'Ê<×ìµBAVÍï_5¤²bÍÉw—P{&ΚSYΉyã‚ñú‡Ð\³ "Q v“hçT qïº%Û½¶í¶ßiI}C‰ZµíðødÕ=Ħ#Í‹ÒrÖ•0Õy:¯K¹ Üß­¹â·+fm‹ø±TŠWô�‚ÀÀÀÒðó«ógò[r¤íý:³ô‘78ãæ¥wj…—+ûfÅI(¬‹ÓòÄtoþͽ04ÚÒî˜Á#s¯ÂËa¸þ¯ËŠžîaê]ï´b`‡ôÁvIæ ëàtÐ:Ÿp/Ñ88³˜äSÌÁë‹4,o-õ®�´­¹Üì#Å{0À^—ñæÞG3ª˜GÞÃç /ëc…—Ýc_XâßNžµ4Ü_ÚâØ-¿ËRª(¡µŠh}¾€¼ö.p×{ùõÅû(åÁ¼)×ýÁûxݼ ó ú\‘ù·ïEh°(ºœÌrèú·=e>ðzt68âLHºÀs‹yÂ:8=´Îçô“`¡ãe$[äTÌ+Íd[Ó!<¯-å=B/JØÁúÁg¾{ø`1wõ‡R3®ù‘âÌC#â´5¿‡ér³ïÉwxY+¼ìVzµo/‚h‘jÊì\šÎ†å*ë½wà~Q‚9"ãˆyßÛÀ”£IöàL8îŠxļùâ€Îst9™åÐ9Ü<X^d(x@áAEIxæ2OX§‡Öù|¹ó Œ·xäVÌw­µe©Õ6,+®‚§­Ä_PtyîÏ×¥\u¤þä0(âÐu3¿®í]qê ©£Cé'æ»ðºþ‚4¼<‚˜·ÜÌm¢Eª=�¢ð¿ÃÞusîg< ìz;ˆ ó;†˜÷ß…ÜÒÅÛ˜èÉo¬–ù_G—SŸÁ‡Þ�¤ó„¤ )2oXãÖù|1QO¯ÆÅ ÇbÞŠü†Œø+nˆÓ<ïΙÇþ«©Þȵæ•+±ºrç3Ùßy(m#ÈÊåɃªÔj[J¼éc5^Ù’Úþ]yã£b°- ­ i&Ÿ‹´ðiØå\+¼¬ËÄÔP×¢cÀâ~Z½#{ÍÓs¿MÙ™¹àZäª2عi~ãÓó¡ýðK]~…À<ñ+²æ<S{ëüú"<|=!Ü�„« ¼‡¹®nðAOT«ûrx,>z(­—Áûö ÕŠ8W8ÿḞæÌ÷̳×÷ÿâTœ2‚é¡ÞÙ&røäWòуSõ{ä³DϽ¦Ï"½#Å<!i„BŠÌÖÁx u>ŸÀÝn÷ì?埋y…™ÛÜÇ Úié(íš;r·\”b¹*õ柭h舼þ@ª·•èóE´"g‚Ìùîán¾'‡Õ¿QbpÒˆöÚ…Ûƒ¡T(I¥ö…5G][}Íö•²TÞ·—ßgB´Ï²+6ÿMÚ~y•t4û—®@íî·ï¼XvÎ~'{íKM W3à [³ŸĈfït#æ£LÝ`|¡ü—ªâ–CAðô Š·½;XÐÜf›þ­xOÓÿ.¿}ßþ§çAaöׂ>:ÿçÖ× "¢Ï[_8@99[²âÀò¦Ðƒ˜ñ¿¢u<€bžôç!ó„u0>hÏ'¸§h'¼·ù&ßbž’y(æ IRdÞ°ÆÞ±´Î矰#ù„bž’j(æ IRdÞ°Æ Þµ´àæÌ£ÇzÜcÆËŸþy,ƒ5|¢BbžôA!Eæ ë`¼Ð:Ÿo â!ø/8Žã¦iá•’ó„¤ )2oXã‡ÖùüÑ·û/¿üR¯!Y‡bž’j(æ IRdÞ°Æ­ó‹l èážM²Å<!$ÕPÌ’>(¤È¼aLZçÆËø !Å<!$µPÌ’>(¤È¼aLZç‰ñ²K\ýäô?Q/šR¯–¥¨¿'ž839ß¹4ëU)W­o®Ï ý­w}½vCœJI áoÅ2&ó„¤ )2oX“ïÝ8,}$À:ÆË& "æ_H³ú¦ûà7b3:r^ßBaCêç’zùŠ,¹â5©óé4«²Šs,µ˜ÿÆÍC¡\—óóº” +RrμgŠ—÷ú)æÉ”PÌ’>(¤È¼aL¼sá‚Mkíâ€ùó Œ—MÇ2/Ò¨g$æAçëåU£"+q‹ùÎ3qÖ?¶òýRZΖìŒeý?§´2…˜Ÿäœ$PÌ’>(¤È¼aLZçyzÞ÷lA1?%®˜^­J³ãYãW* ñ?1s®ÊjõT:S©®Nâ~.§Õ5)øùîÈÅéž” æ£2˜Ÿôœ$PÌ’>(¤È¼aLZç¸ÚÃå®÷¼÷Ù�íôùóçzirRòD=—æáŽp=GZ•zKIC×/¥]ß’"ö+nJ­ú~× |Ñ”CÌ÷vQbù¾4Ú/½maÚŽ¬ÁîZé·dÍ·„‡Ï§jó@*¥Ë~ÞÊ{ÇÒö2§彸!Nó¼w}àšÂbóÖËR®£þ+}YœvÔHB¿cj!ï®Cú?¤xû¶µŸJ¥ÿ¦ðu©–W¥Pº-·‹µþ¦Êë“PŒ�-æß®HmG—e¡$;Çmé¼jHeÇÓž寵×çsωu¿÷¥ìžO­+–e¯¡Žå^É3ó„¤<‡ ™'¬ƒÉCëübÂÀxÙ"®ga:ž¨®(Ô®âkJ8»Vsl ‰k× ýM©6_¨}[RßXÓ‚ø[µßu%T÷äô¢#ö¡l@@w¤¡–G't¾‹c©¯H©ú•Úb R¬»Ë-g] …uqZ/õ¾ÏÊ?ðšÂb~DÆ)'Eà¾ð^’š#-û7Ùa1_Ü’:B.¾’*2Ü) êGái�¡åðuuZެ­¬Iõô\߯Õî±H®¡˜'$}PH‘yÃ:˜<ƒ¬óqXIºu÷¿_`<Ô Öƒù“/1 ,J£Äüe)U¤i‹ô¶#¥¥+Úº ô¼øÀºQ°Ï§#½ħ‡u~"ÕÕÏ=^ofˆÐžˆ!å¤è9‡ôÝ) ü»^7{/`Ÿ.G{@„–ƒç´ Ò4×M²Å<!é#®Î!“Â:8ÂÖy|ƒnØ ”¶à~CÐãozn¤ƒ¸ž…)z¢Âû¡ÔŒ›|_‘z.MgÃs³w]éWÔGŠcWà[Âs$ìóõ d%W=õ³ß…mý®),zÇaÔrŠ8Ç„b>PŽc‰y}lË#,ó„¤ )2oXgƒ±Î×ëuWÄ£ÜYö‹…©¶p‡Õõ€b~¾˜qŽVíº__WÂü®8õ†Ôâ2JP+:mi8wŽ6¢ÀÿÙµVrÏ¢¬]òGÆ>Ÿ±,ÛÇÐë P_!X]Á‹B¯·ú ¼¦¡= c–S\b>PŽ‘b¾[î‘bÞLC Å<!éƒy2oXg,²ßùÎwÜò6éƒ>Ð[É¢�ш9ô¸÷Ø1u}42?Ð?Žë¤â‰ê @íÆm悯lImÿ®<hÿï®[;\Ý•xܹù±»í¬Oº™ß‚ó³»óÃGÅr£Wçsç|cÀ 0ÿЬ9Ï”xÕsæÁíÔïwöåÉñ kz9Ñ€Á儘ÎrøäWòуgòÒìx,>z(­?cŠBXÌëë ‹ùМy¿õ€€7€a{IxßÏ£>çÙ©÷MýBÉÜ3ë»#{c °,B1OHú@'ŽyÂ:˜,ÆÞˆ6;E¹\“üƒ9òýר óóž÷îÝÓKÓ‘Ž'ª ²æºÍïÉaõo´@>•cTSù 8_<–½ö¥V^u×uE"Žs*Ž^o»à޶$Ûç{…höN7;¢Ù;§jOM§-Ç&ê;’Lè{M--²õþãXç³£þ]4v\amL@>7O_º"Ü\›'裮籿 нߜ(÷GŽÜY±ö±Ï‰rÀ´€ã»QîÍ~a ˜'$}à9LÈ<aLX_ý>]Db„óÅ÷îöáú@æÄ|\Sx' !‰@1OHú`ŽÌÖÁdA€;ÍÜnt±_\àfoדÈü@9®`”¼“„D ˜'$}°GæMVê -z˜Ò—¦%ê˜L‹—æXâê#ó­NIŠyBÒÇ<;/„€¬ÔA¶•ôǽáý%ó¬qž›5™’ó„¤v`ɼÉJd[I/qÜÞ_2¯:€qž;¶#!SLLyOdt(æ I|Ž‘y“•:ȶ’^â¸7¼¿d^u�}cô‘ã"¶«@´Ûm&¦Ü&>øÇƒbžôÁç™7Y©ƒl+é%Ž{ÃûKæUð‰HŠy&¦9$>øÇƒbžôÁç™7Y©ƒl+é%Ž{ÃûKæUâü,ˆí*P Qˆ‰)/‰þñ ˜'$}ð9FæMVê ÛJz‰ãÞðþ’yÕ|:òóÏ?×KÓÛU @¢S^üãA1OHúàsŒÌ›¬ÔA¶•ôǽáý%óªq÷c» H”�bbÊKBJ$ŠyBÒŸYdÞd¥²­¤—8î ï/™WÀyÑ>.b» d,J�11å%EÕq¾ úC1OHúà3‹Ì›¬ÔA¶•ôǽáý%ó¨üãå7ÞÐKñÛU @ÂB‡‰)O)ªŽóeЊyBÒŸYdÞd¥²­¤—8î ï/™GøòË/ÝþqœÄv(°ÐabÊSŠªã|ô‡bžôÁg™7Y©ƒl+é%Ž{ÃûKæQâŽdb» HXè01å)EÕq¾ úC1OHúà3‹Ì›¬ÔA¶•ôǽáý%ó¨èÃ:'±] $,t˜˜ò”¢ê8_ý¡˜'$}ð™EæMVê ÛJz‰ãÞðþ’yÔ×^{Í7'±] $,t˜˜ò”¢ê8_ý¡˜'$}ð™EæMVê ÛJz‰ãÞðþ’Y×D°O✱™ &¦<¥¨:ΗA(æ I|f‘y“•:ȶ’^â¸7¼¿dÖu�}bôã&¶«@„…SžRTçË ?ó„¤>³È¼ÉJd[I/qÜÞ_2ë:€Àwÿ÷¯—â#¶«@„…SžRTçË ?ó„¤>³È¼ÉJLm>;mi8)nŠÓ~¥W.qÜ›ÄïoÛ‘ÒRQ* ½"NÎÄ)­ÈJ¥!v è´d§tÙ½¶¥âmù»÷Vei¥"©ªIG.šu©–W{ΗufÝÆ!ä?ÿüs½±] $,t˜Ò‘Z'¿”­ßõ÷Õ[²{ÔŒÜ/¶t²+7–®ÊæÁSi·Nä`wSn,ÿPvO΢÷ÏHŠªã³~d ŠyBÒŸYdÞd¥̧+ÔTŸÊM)VŽ¥+Ù<¡åmCŠStwä¼¾!…Ø›-â¨C£# Ž %©6¤þQuJqœgâ¬eÍy&¯Ú‡²Q\‘Õꩪ1Sòª!•¯.SÌOǻロH¿8¶«@„…S Rëw²ûÖUyk÷wrv²/·®^’kÛ¤µoì©%ÍÚ-YÆCp‰b~Ñ ˜'$}ð™EæMVêàHùô…ΪlÔ[–pòD÷J¹.çzM|¼’¶sS3A1a¸þq:E«"Ž:4ôÇRQ‚¸¸q(mÜXxDì•¥8µ¥{F¹Izèz>š˜)-gKvñHˆ—Y>‹’ ~b;*2:L)H¶•<jûÀôLïþH¶¬ß¶ïÊ;[rØoP:““ݪú1…˜Ç€Ä;?•ƒ³ˆm3LQu|–‚¬A1OHúà3‹Ì›¬ÔÁ‘ò ‘s}]ʰÞÖ¤zڕ’ˆ%3i1.§Õ5)ÌC´ŽHuhØ1:ͪ¬.]‘rý½|#õÍOf\.£ÝÔ·•¹‹ùŽ\œîI©Ôô‚x™å³ß–‡e> b» HXè0Í?lÊ¥‰Ä|Kž>úPn,[¿}úkÙ¾ñ]¹´9K1ß”GÛoÉò¥MŠùŒA1OHúà3‹Ì›¬ÔÁ‘ò ‘sÓ‘VË‘µÂ’,w¤qáÙç»bþB•¢{¼¥’#ížekNòGŽvJž}qKê­grl–ýÁ#æß–JmG 'µmé²”vŽ< 20VdüÓ�Ê÷¥Ñ~)êDR¯ªõ…·¥|{Um[‘’s¦´pt‘´ ô„#Ö©ßÿÝû*äe —izŒóº”Ý{Z–½îRçÒ<4×}7Äiâ©õõª”‹«]Q;ìž”>“ÆñÇúX×Õï¾u¼¸__‡æ°›ú`öQ ÷é[}\{@밢듛Gšº¾†éN1PûݾíæË;êëTÌôlw½Œ·òú8§J¨×SÞÿ¸@~fERóåAlW ‘ÓÓ#©m¯ËÕ?—ƒ‡?U7üu%"ÿÕß¾¿yC»k«tõGR;y¦¶)ÁyT“íõkréÇ»òË-½¶?þ<4ËËoÉö#=Os¸?Tçrµ,W×&èì#|‡åQ‰Î£ý-½éšÜª=–Ö$yl?““ƒŸÉúÕeïXW×åÓh×ø@ÙD]Öë%ˆ#ËöZÈ[¿½úŽüg3ïÞMJœýÆ+“åÈúÍkjÝ%¹±ûk9ªm«¼_ÓåhòñÙ¼kÊç»rcë—rÒ2ƒ úxJì—ŸxBÞ?'ŽßpC×sB¢Ö‘h(æ I|f‘y“•:8R>µ˜wycÇj…5%î•> Zæ¿‘zùŠï¡åΩTW îùŒ`ïøƒZº.ß)¸nûF¼×~#øŒnÎë²RÚ“S%Ô:îüiüö¿+Q¥ ëâ´ú *=Øà‹@smF`äMîTÖµHS¾ú•úå¨y™núAuhø1^JÛ×ê¾–*âD½wmS–úAð¾ð;Œ…º_9üJŽ«oºÇÇý,;§ráÎ}WBÙ¯+¡û¡­äøm)Zæ­#ó;}\¯~š{ÚÇ‚î^Ë=(£Ê¡¾åÖmï|úØnþt,½)Õæ ÷§aoÙó"ñêu!ž¹ü10¼ÄÇk¯½&üãõR¼Äv(°Ð-}-GÛß÷*œÀë»ä©;Ï[ Ç»r¢öñž'öàæýÖò²7ï»õH¶¯iÁ«Å°·]-›@oOʦÅËë5iºnãïȥʣ§-i¹sÈͶ¨¼™4<í³Ù¼dĦÞvm[ŽÎÆÍ£çÊþÖ%-î[¥vK åå[Rk¶BùúW9Ø|]–C׳tuKÔ2öf™ï[¶þ6ë·î5.iËüSuî«úºÞ‘ÝÇž˜îŠqó;#æÍà†¶´/}OÖk¿WÛͼz/½Ëú<—Ì@Ĥ÷pú„kZG¢¡˜'$}ð™EæMVêàHùôÅ<0ÂÆ¶ßļ-€"–{ܘÃÑÊuP=wÿ7{= àŠd{pÀN®¨ ÃH¢öñÌ@DÙÍ {`a’¼x»OŽ1-££Ónˆc[³ý9ô¸¶þAæ¢v”{®~EÜžú:ŸKðwÞ´®èî²XØú¹¾²ˆó¢Å{ŸA‚Ç™£Öiˆã7ôRüÄv(°Ð=iÁf„q€³R@PF,«F·{ãRϲ{l[üÛ)ê<=iŒ<†·“ÇÀÀ"¹;Þˆb¬3B¸»n˜˜¤P>‹yü&º ‚¿‹p³×÷ÁpoÿîöàrèSÝÃéεŽDC1OHúà3‹Ì›¬ÔÁ‘òóŠNKêp_¿.ïWþfvbÞÞõ3BöµmoK³zS[Þ§ÉËäÄQ‡Æ=F§},{eÜÛËnÄøŽ{mái ]¢v”{®1‹yo»}Ÿú1Úù0Èñ †O$¢>DÌcŠÁƒÏ|×üEóI}_ÞÛU @ÂBgô4‚P†kõ§?—Míêí Êq„²»o×òÜ›Ai„<ºîñ¿»ÆmÝlKÌëãªß2ÇN‘BÝøÚC ß>áÔ§l{~—˜\oX¼‡—Cç˜êN—¢êø¬Y„bžôÁg™7Y©ƒ#å"Çó@»[ã÷]ÑÒG°­V¥ u×#–Æó¶•XËXуDµúìc,î·ïÈë›ÚjÛß2ïæ}`^&'Ž:4ôí²ßö}2åÑgÊ@¯˜rOóÑý¢x!M¸þ÷µÌk·ûbYªÎò¤~'pÞp>¼)×¥\u¤þä°'ßódVÏ"¾C�¼¤ˆí*P a¡3z,”=Wê×e}{Wj¿Ù ʱÅü’,¿µ+‡åÞ48ž;üëru½"»µ©õÐ1żåºÞ/µŽ¶åÚRPØzë¾/ÛG_»ËÃÄü ²MLÌ»Öõî'ò¢Å¼¹†Ð9¦º‡Ó¥¨:>«A¡˜'$}ð™EæMVêà(ùtç�¯vƒÞÌœ÷®hÑÂÊH¯ä¢éHY ~WÄé`k¾0 E½ì‰# CsæýyðZŒÙè.¾’êÆgê·z®þ(b^åõðɯä£Ï´ 5߸·-Ì&/fμz#åÅ=ÀDÄQ‡†ÃýÔÛª”÷޽|›kóc˜iög Uùîì«k3eeDí÷Ä ì˜x a1oß]_ºõËœÏë¡ã˜¹øv�ºó/dg¯×[Àþ&@Þ Î<¦¬~rWî``­›¦ Šr§v_vœi1¯òqx,>úLjwL½ïtÛÅÏdçaplÌâYd>I‡¿IÛU £a¡3zú½ÔÖ¿gY£õ²+àŒ¸õ挛ùæ—~üsùdërҬɺZöçL‡\¸}·l÷ØÆ…½€ÍÐ~ëçC­àƒóh¨vo7sæ/ýHî~R‘Oýãy4‚\íã§òÐ ì†yæ?–µ@÷“9 ž§ç×w…n¯Û}0 .Û†¹¦ý‡òéO~!Ÿi!½þ ùͧÛòécu>« ¼cšs†Å|hÎ|Ï<{ǧdwÁôðЀÀG\�/û¿¹/?ùô‘úý¤÷pºUÇgñ È*ó„¤>³È¼ÉJœO#bÑWA²-¢À~×-±Õô A÷Pœ;«^Dó³#×Zi޵RÙ—}Xáû,{\;Š:DW(B|§Ý‚ïoî‰Bsœ¾‚Þ æ§¶ù¸^o[ó®M9¥TÒÇ.”dçØ ™+¯€óLËÐc´%ç«`´ú׆í^�COÐêu¦nŒrOJUq˸סûñ­ºúò[9 ÔEü.tc÷#Ô{ë{¿~ð?U_?ùXÊ+«R®Ö•¸ÿs7Â>"ýVåvA]‰%`<Sܲø³Uï10ò@ª·¯¤&¢=Ê iŽŽŽÜþp’Äv(°Ð-iA©+ÖÒmÙ ,ÿƒù‘Õ¯Éú‡ŸÊöM% u½ñKW\š}/m~"ŸÀÂÝgÙµ|·NºäGŽf?,ê¸ú³mÞ1?”ýíwÕ9”€ýÇ»òãqów}?b¾J£ÙÛâçÞ•#7ø¹} ÿØöïÍçç°=T¶(˜¯iß ¸ç éíò¼̱/Ùƒz_–v¤ÿˆèó~Ùy¿Üý‘\ò¯Yåñ`Ë\oýaZ@ô=´¯-þ„üE­#ÑPÌ’>øÌ"ó&+um%X„¯ 2ˆp³ŸqÜÞ_2‹:ä'é ±] $,t˜˜ò”¢ê8_ý¡˜'$}ð™EæMVê ÛJ¸T—å&‚¿é5]1?J”ôøˆãÞðþ’YÔ$?Igˆí*P a¡ÃÄ”§UÇù2èÅ<!éƒÏ,2o²RÙV4f¾~`þ8O5˜u>Ž{ÃûK’®I’ÎÛU @ÂB‡‰)O)ªŽóeЊyBÒŸYdÞd¥²­¤—8î ï/IºÜ»w/ÑOÒb» HXè01å)EÕq¾ úC1OHúà3‹Ì›¬ÔA¶•ôǽáý%I×Xå“v±±] $,t˜˜ò”¢ê8_ý¡˜'$}ð™EæMVê ÛJz‰ãÞðþ’$ë�ú¿³p±±] $,t˜˜ò”¢ê8_ý¡˜'$}ð™EæMVê ÛJz‰ãÞðþ’$ë�Üëáf? b» HXè01å)EÕq¾ úC1OHúà3‹Ì›¬ÔÁqòé}¿ûvÌà`î¶”vެ sÄQ‡Æ;FG.šu©–We¥ÒPwè�€}¿×?ÎÄ)­XyLý ú5|Ä×.’|Í"н!¶«@„…SžRTOòAu(æ I|f‘y“•:8j>;íCÙX]“ÿöwò–ú ~·´TbåX.ô>FdyÛ¼ÈïûÎû²â/G¥›â4¿§|]Їô(Ÿië¯RYñîK²B9í(!_ß’ÕÒÇrÜ~é®ñ².{u¶P’ÊaCêU½޶#%·.G¤bYªº^‡¿Œ`'Õ–ÊwåA£Ýý$âÅi,íÇO‚/¿üRÞ}÷]½”<±] $,tâIM9ªmËúÕk²yð4b;ÓlRTOêA(æ I|f‘y“•:8R>;ÏÄY+Êšýíu_ø­ÊF½e}“½#çõ Y)×å\-½jìÈu_Œ„,ª–Ô7Ö¤Ò¸ˆ>Ç‚Gûú¾.²˜ï´Y[Y§å y¹8–Jq¥+ª;miì•¥h{+˜O–º–üNûXöÊ«î=(”öäô«ÙfUV—V¤äœ¹ËîàAã¾”‹ø4âe)U¿êÅÐ.’zÁÅþóÏ?×KÉÛU @ÂB'ŽÔ:Ú–kêØKKWg/æ›5Y_þž¬×þEšµ[²¼ôCÙ=9ë³ß²\Û~$­ð¶)Rëä—²uã»nÙ.ßø©<<y¹Ÿ—žÉÉßÊe”ÕwåÆÖ/夥·zLSTOêA(æ I|f‘y“•:8<Ÿž8/¬V¥i« ˆ¾ëëR†µ²°&ÕSHwWŠ\Ñb°ÓþJkëf”{tw{G.”ð/6¤~N9â¨CccáÅü7R/ÿ¥¬VO}ñì‰ï+R®£×�µßæ'ÖÔí•b‰yo¥Q¹®îC¡{L×’o‹y;h�Aÿ¦T›/ôÊéÛEÏ¢ÿ÷wûüùs½&yb» d<,tâJg›r)µb¾¥·)}uKž¶BÛ•(¼+ïlÈ™Y×úì¾óS98 îHOÊæÕïÉí_ËÓö¿ÊÁæë²üÖ®<6=Zòô`K®.¿%ÛšþoßÚý7¸@1KŠªãI<òÅ<!éƒÏ,2o²R‡çâæJ¯¸ƒè»éH VÌ‚êw¤¡-¶˜2d®óy]Ê…°hZ\â¨C££ëB^âíÛRR÷Ó¿GM©W-+´¿¼%ÎÑÇwƤ…9æîrкl[¨±oyïXÚ3?ÿ¯¤Tû­€íV=r§v¸âV¿vW6v§¨yýXw ãïŸCm2ù-}& ?×¥ÒøÖýen,zÞ"wòV–=Û >@?1¯0¿7býļ:²;pf 0e»ˆ£…9::š©‹=ˆí*P a¡Wš›˜?;ÍKß—í£¯=K›½¼õH¶_¿%wï®+‘ Áüûàö§¿–íß•K›FÌ7åÑö[²u,?é‚å[RkêÁ_‡Žï¦ßKmý{²¼^“¦»úý(×Á44EÕñ$ybžôÁg™7Y©ƒCóéZj#„‡ó6®åP§°¦Ä½R ‹ù¡Û‹8êÐÐc¸Öà+:К7W÷Ò»Ò¨Ýcxð^H³ú¦·l»ë­´sª~¡-ÑÆ’¬ÝÄ=qoޝ„éáo<·t«¸!NóÜso/˜ºf[Ƚß]Gž´ç�~×pÐ×8â9|! ?¿:&¿Q¢[º»‚8 ê˜þ@�\æ+âôˆúbÞ¸à›2é+æÕ®®€:‡ž¦â1]»@žãæƒ>pý,‰í*P a¡3Vzz$û›7< ÷Ò²\]ß•#måŠù¦íoiwr¤kr«öX»·?““Úä*Ö_ý[¹»ý_d ¿i=–Ú­kÞqo}(Û·þ«³ Ù½qI–úŠ[µý­y‚bú­]9 íqü:D´+¶—,A­’ò^>½¼ÞüÏ?Ð׈tInìþZÇøžÜXÇËûŸÈ¶çK7¬óaÐàÚ¥hW~÷Ü8VÃ_çMOðü(×Á4<EÕq¬#ÑPÌ’>øÌ"ó&+uph>û _̃—ÒrÖ¥ Þ·SŠù~Bkш£ >†¶Û.ÜZ,wï‘ôþüððr8Ú½ òæ b#N‘;¹ÇÎíy„J;r¨„~€À~ú|7tï·Þºs/¿~ çß&˜÷0¥3œŠö À`A 0]òb~Òv1¸Œq±ÇßYÛU óa¡3r‚Ûù[ßÕnäÚe|©k‰ˆy×ʬ…«þÝÒµm9‚û¹+jµ€uü[ê7MÏJ­÷iìË­×·b²LÃýý]uŽUÿ÷¬ãK¶5ÉÍï’e™ª~sÕ@ð® •ÿ»]·x=ÈÐýM¿u:ìÊ «¼ú®cš*EÕñ¸y‚bžôÁg™7Y©ƒCó9’˜W¸ÁìàJ}]Þ¯ü Å| ÄQ‡#BØÆ,æ=K·=Üb ˜‡ë¼£ƒÂ)ý ­÷½ûE‰s;ðPÛcó†î´ËV`ºuwZ7û”‰y½ƒe~ÖÄv(°Ð5­È½Ûû»Ù…±'æ¿+76ÿÑ·êw]ÎoÈæþ‘< ü~Ê„ó½®ü¹ó!Wø!bûô^Å|STûA'(æ I|f‘y“•:84ŸaÁeÀz[Ì?€—-mFóý·/qÔ¡ÁÇÐnó Zæ=1o‹^‹pÝê97x)í†ã͇7ù ìg\ÿí½ÎÏ:¿#‰y:Â;ý@6âZÑ“×~‚ÛÀ³Ê Ÿ˜7í§`EÒw™®]Äý,zã7fîbb» HX茚<1Û?([¯Ø}&'¿»Æ-߯M9ڽ幪ۮúOÉî:Üì±þš¬ï>ŠAÔ?“Ç»ïX.óÝpµŸḢçÀ›ãô‰˜ïb¼cö a?áÞF­#ÑPÌ’>øÌ"ó&+upx>£à¹ó›W»ÁÊ Þ¼ç>b^‹•  ±…+�ÏGv Ï­ß8w¤yñŸ3ß¾®]Ö}ñk»°ãÞ‡BâÚw1/ÉÎ1æ™wäâô¾lì©c»kË ­-Ø^ÝQ¢{§ìÿ&0 °_·Î™Ï¿yó®hñ¬óë!|=!Üc‡à¹âÛ ªçÏË·é ü4]Ð%ß+s[ÌcÀÂ|š.ü©GÅ”í"Îgú»óó ¶«@„…ΨɳÌ÷ î»®ûüëJ¨Wd·v µ0vSëDv7Ýyõ¶ nÈ®;�Ðÿ\#'7ðÝß]êÛ_ËÑö÷UYX"z"1¯ ,—}¯Œ^WûÀ¥ßûŸÌ4ÿZu>úD×gš,EÕñ8yƒbžôÁg™7Y©ƒÃóþ4±¼ãNHøh¡ã+Ók€gñì„¢\™]‘c[‰œá÷f8Ãaw»,¥O>–òŠ®Õº÷z¾¹¹g+e©¼o/¿/ξUÂËúw£åcÅ/=˶·N Ûýýà²óD{wÅ©mxƒ f0@[ÄÍ9<ArÉ÷ƒñi+¼Þw©T'°å¶±ü4´%ç+ùÿ·w>/’YžÏÿ¢‰Óò²‡ºj˜Ó,ä%šCëЂ‰C"¨CŠé€\tis™`’ÖH‹X1A§Ä$“8ÔlS %Äö0ä2›Œ´Eì²#JI,ƒP‹$Š" Þús7‹p·ôøíînþù€Q呿æï¹¿¯Û3³Áùñx¼ÉË ý\žÙï,ï¬7k¢¸¾“,aÛwN¥çβ®_èñóBÓëƒ 0[Û%·³Ðq…ÎÂÅŽ}ÿÓ¿3»–zh|O«½ÐéôõXø1nÿîOþB>ÿ¬#¿ëÿ^žþ¹]}Ò»ýê«ÿ n×]ÏèÅ^¾Ä3ÒÿI²çÜ”XtëD{§ñï1ÿ³ÇÿEþþw%¿û§W±˜…úéß)¿ùÝÿ«èüœ”øäÒtf¿E—¦‹æH.MGÉ¥dÙxž7ß@Ì”îYP4U±Á…êif$ÏL•΋müFÅÈÆ¸.OÔӿ릺D~‘— èšòz¬mO|gÉÍ’õ$\¡³L¹þŸ'O3¿ÿì¿•øß×F¼Û·3¡à=û¯f†xM£ÿ­œþÕ¡63Ú¿>—ßþæ3ùܤÔÿì±°ýÕ’ßüÍ_Ëã?ýY¸ÿßÈ/¬°7ãÐïõìÏ,¦gÝÔ)5†=§nëªE‡ü¯ðûÿ.üø»Ñšñv‚¿øÿÛÙ¿OŸßXЇ߻øSg=׿–¯ì‹ŽŒÞýôƒ+ûÒœ#%¯¢×(kdƒ˜(ܳ hªbƒ‹Ö3N]Þ7=ž9s{%A{ß™ò°!î…«`Òè““îAN~‘— hü'Ÿ|b¶¶On–¬ â  ŧ’eã< ¦ƒ˜(ܳ hªbƒËÔ3N—~2s¦ïåÑÔã'fs³ "ò°!î…«b†d¥âoƒüü"/xçw ws³dmWèP(>•,ça0Ä<@ùàžESÄWÊK׆ë yØ€Î^ÿÁ˜­bÈÍ’µA\¡C¡øT²lœ‡Átó�åƒ{MUl_)/y\®/äa*ä‹XŽ.In–¬ â  ŧ’eã< ¦ƒ˜(ܳ hªbƒøJyÉãÚp}a]øþûï£û¢ÉÍ’µA\¡C¡øT²lœ‡Átó�åƒ{MUl_)/y\®/¬k:éÝ_|a¶Š#7KÖq……âSɲqÓAÌ”îYP4U±A|¥¼äqm¸¾°Ž è2tú÷º,]ÑäfÉzB®Ð¡P|*Y6ÎÃ`:ˆy€òÁ= Ц*6ˆ¯”—<® ×Ö±]Žî£>2[Å’›%kƒ¸B‡Bñ©dÙ8ƒé æÊ÷,(šªØ ¾R^ò¸6\_XÕ´W¾èåè’äfÉÚ ®Ð¡P|*Y6ÎÃ`:ˆy€òÁ= Ц*6ˆ¯”—<® ×Vµ2õÊ+¹Y²6ˆ+t(ŸJ–ó0˜b |pÏ‚¢©Š â+å%kÃõ…UlÀöÊ—a¬¼%7KÖq……âSɲqÓAÌ”îYP4U±A|¥¼äqm¸¾°Š h¯¼Îb_&r³dmWèP(>•,ça0Ä<@ùàžESÄWÊK׆ë ËÚ€öÆ—­W^ÉÍ’µA\¡C¡øT²lœ‡Átó�åƒ{MUl_)/y\®/,kÚ#_¶^y%7KÖq……âSɲq1*Ú5õ(YÞ}÷Ýè¦çî×ñF�°y...îùŸÞ³Ü}Z�¶EUž›<ßËK׆ë ËØ€öÆë÷ËÖ+¯äfÉz‚®Ð¡P|*Y6Îà ÆÞäæí­€í b>ËÝRÆžðµ¹*P•zÖ‘<® ×–±²öÊ+¹Y²6ˆ+t(ŸJ–ó0˜ 79mY…´{€í¢2Y¾˜,eìi�Q›«U©gÉãÚp}aQ(s¯¼’›%ëIºB‡Bñ©dÙ8ƒ ózç镨>ózç镇m£vW\_¡”«¬KÖ1)õ+‹Pæ^y1O¡,X²l|ÑA]˜Õ;O¯<@1Ìê§W¶Úläsùƒ>`ÞšòÅ_Œm Y`>ßÿ}ÔVe~Væ*æ)ß b~6Ózçé•(Ži½óôÊC¨íÁvÈzÁŽ ¯z½þóŸ§ì€¸l1´Ê>IìÆî¨j(®ð¡P|+jç&+x W X²zç镇"PÛƒÍ3+SA_´gY¯÷/ùË” ho=ÌF_„볳쾂˜§PÖ(jçÆíçí/@ñ¸½óôÊCQ¨ýÁf™%ämAÐûÏ×_-ï¼óθgYÿµ×_?ƒé¨ohÛU¡3 1O¡¬QÔÎá>É@‚^y€rì§WŠ‚çæfQßVÑæmwwÏg?Q!ª)zÏמù$ú‡Øl>š¹ðÑG™­rƒ˜§PÖ(%ÙØÞyzåʃí§WŠ„çf1Ðîõà›o¾‰z”UŒfe^h|¦ŸÃtôE‡¶QU^zoTÌS(u( Þü” í©¡WŠ„çf1Ðî~£Â]ã.¡*ègAl6Í^ÐÌ•ª€gÀF`,@ùÀ/¡h•Å@»û‹Šs}Q«iáÜã×Cçж¬x6����lDe1Ðî~¢éôÚÏ„vë£/B´-«–¹€g���ÀV@TíîvÉ9- ʦPÅ9eðl����Ø ˆÊb ÝýA{áõzVi\wÙ±“ÞUq˜ž ����[QY ´{õÑøiKÎÁꨀ×6­êP<����¶¢²h÷j3oÉ9XmÓ*/¥Œg���ÀV@Tí^MT¸ë,õ‹,9ËcÓë«<ï�ž ����[QY ´{õ`ɹ͢mêÃK<����¶¢²h÷ja—œ»¸¸0{ oô%‰–ªƒg���ÀV@Tí^ ì’s:†›%ç6‡ƒÀ‡Œ<����¶¢²h÷ò£KÍéubɹÍâKz½ÏX™ôºÒnîI§köU„a ­f‰ê}Vé‘ììv¤gv,ÅHn=é¶÷d·Ó-ªJ¼– µ[¢zã°9•Å@»—»äœöȳäÜæñ%½Þ‚gC1kø€—dðzחήýlWZÁkóAÌ]¿#»ÑgE‹âŒó—†4ÛŸË‹þ0”:�%'zÉ”´ß¤oÝJ¿Óœ|Ö dh>‰Høká¢øÞy$J³-Ý}âPSÔ`ûÐîåDÇÄk/1KÎmmoTЧ¶Æ³n/¥ÓlÈNãPz7N„­Ÿí=’îÕÙ‘&ô ŠùÑw<þtc=]£AWöR/Þʰÿ¥´õÜvH«ûm(‡�ÊÎO¡hßmö¡´{?˜}ýìýé¶lýbbþ­\OåxS/âFWÒÝ }/ñÒa4¼”“ö^T7Z'ru‹¢‡ú¨,Ú½\¨˜ÔÞaò:k=lÍ€ð±½ñl�ÉMïPÇ\¿5û 7=9<ìI¶”_FÌßÈU÷@›L[zïgŒ_Vì¼'ÝÁ³ Ä„~×n<ƒà;'£äéÝéfYXÌäöêDZMfÕÄ©ó÷2Æ/+²×½"cj¢²h÷ò`×6W1OoüöÐa šáx6€‰7¸Öž»#9îÿd¶•·2¼ü4š2»'OÚïKc,æuÌîWÒi=ˆšQŠûá¹ GFÈGû´¨àþç)ße%¦‰ù°^ÑËŠ±xpÇúO¶‚—rÕ)®Ïõõ…ÙvzGC韴¥iëÞþRúÃ7fÌòŸIëìåò¸ŸsóXúã¿»ŘöLêñO¤{øYürãv ½nx¼äËŽpßyÇcüú²ÅÖ÷±œõÿ0©oç’ÌoE{û¡ììueð‰Ñõ 9<N_çÑÐÚhhOžD¾‹ùiþh…¼î3EwÊÞÂÒ|*½ÈÞVeš˜‰î7áoDççŽõOlr1ö£°>×ßMüªq0ÉÊôǰîÖ¯ZÏ¥?¾oí‡~oîi¹ø£­ï ¿H þÛ‡v/î,9W Ÿ|òI$æ}ψx#ƒî{éT{M“}t’aÐÚ?–f£%Ç—Ca+æÍ˜Þ(x×àÖö†›ÏÆÁñ¬ï®ÈT1Ö<JÁy»'?:cýígú ûS ØÜÞÅç=N{Žë»kÄýhx.‡Í†4žüG9Ò´b=VóP‚ÁM¨9hØ:™— F E·üw‰±Ðãö‰{/í û*.ûÿÙÔ×ÖÏÖ÷‘C«< êÄv™LµWý0í#QÖÉCi_„"ý­ {O#A‹âÙ>æfÕÄÛ± Åv»nÏù 1oSðõ~ócxɱþö3µq#ØãúLüÊfÛ¨?ßLóÇöïåRïi‘¯ìI;¸’[êsðÀÔ)ìß¼šÔ7ÓïÒ¨­Àö¡Ý‹…%çŠÃÎKàkž `ˆÅÃ$µw48‘G©`>î-Œè˜YiöéÏ\1Ÿfñtý,(æµîÙB&ñûѱÜmsì¤ØH=·7šæœ¨C*íÙghIç|¶H§}¢ßK 9›]ï‹ë;ï¹´” cgƒ@®#‡¼ÿr-¶§Ä ¸iösm>ÉRcï§± ˜×º»¿wï÷ÝÙîÇžåV˜ëô³üü1®ï4¿H£ö Û‡v/»äÜ×_möÀ¶Ð! Úö>¯€gXl¯UÔS¥ÂýQº0#@Í£a_^œuLJ«ý,[Ìg×! ¤Az–8P’‚;… ¼'=s…Mt,wÛ;j‡)½–ó‚úÛ+ Ì`ãÞÂè‹éöÉZ‰:ÄŸ#æý&Ù›þ¯¡ (û)›Ëð© æc™6£éê/žSó³Å¨ÒcŸœ–2ÇÒìÃm·Þ÷Îc†˜¾;-‹À´Q¦˜×Í|ü1®ï ¿H öÛ‡vß>,9W,vÂ;߇4àÙ�c½Mg_J{ßÚÛS8µgÞ¤ùêÒSÁäUï(ñ™+<f}wE¦‰ùñlý“ þÜàü^°>WÌïLzL“,Ô«À ¢ñ·¶·/Ý>q&AZ Äûâ4鸾ˆyï1¢·ÑþRÎÜ—kYCcRö6ÛÇ\›‰SÇ÷¥Ý ¤÷ê<1:MÌÛ ðü¹~rÏoæ‰ù)þhýjš˜7¬ëq}ó°ˆÊb Ý·‹ö«ôqµ* )õ¾Nxç‚g$ÏüžÕÓeÄÃxü©3¯½ZaPûêâ :1ŽU'Ç;:ûRŽ_¼ŠƒãPxœ¿ú½||ö\ަ~×ã ×I1Š™ñÒt{rØ»6çc_ZX!ã¤ÌêžèXî¶mÛÌXåð ·ßJ÷ð¹ þèL$hĘ êïúŸÊ#û7Ñgö7Ì„gVdØ, ;É—iëX°ØúÚñÏîù€?Xá›èÅN`íÒÎ`ÇÌGþûÙç3},ó¡ý_Ê‹ŸËÙQìŸúbÀŽQß=z.§Ç/³3aæaÓßb~²4N8—˜ðÒñ»=~qè¾H´ÇŽÚd†?FFɉÓ~–?Ú¿î÷�I•Å@»o»äœ®eÎ’sÅ¡ÞiVDÀ³RØÞ¾Œeê”Ñ05›ôgŸ?‘]íùëé˜ÓĬõᾓó®< Üñ ÚÑ$ra€M"õÇß5¿µ0w2 Eêû% ð;§ÒÓI³ ±ˆ±Ÿ7åY§Úî]™¤õ»ÛæeA²"1õ¥ô__D/3Æß;=Mo‡w×.‰µï#!azíoX‘J¶‚mäÔÿ‘œÏRÛÙ)ÏPUbÁžµLò6±ºDhOŸ}*íÝ=iw{¡­Ìñ±qÆŠ Ô?&f¸ÿþä…tŸ„bvÕí£Lk“éÒhuä,º_L/¶ý|÷YGž%·Cÿ=Õ^ø)ÛÑË‚,þ˜ö«VW‚Ôv ¯sðÇtý³ý ‰ÚlÚ}ó|óÍ7,9W4+B_¦ÔåàÙ����°•Å@»ovÉ9ôPö…Jæ(À³���`+ *‹vß *µ˜%çŠG¯E&¼sÁ³���`+ *‹vÏ–œ+væú:^ <����¶¢²h÷üPá¨3¥³ä\9°3×ë¤wuÏ���€­€¨,Ú=ì’sÚ+ÅSw!¯àÙ����°•Å@»¯‡ŠF–œ+ù<����¶¢²h÷Õ±3¤«hT å@¯‡Šùº_<����¶¢²h÷åQ‘È’så!?Ï���€­€¨,Ú}94•Þ.9‡`,ù4x6����lDe1Ðî‹£“ÛÕu™³²c' dMÿ x6����lDe1ÐîóÑeæ´ÇW KΕ‹‹‹HÈsmÒàÙ����°•Å@»Ï†%çʽ>ùûàÙ����°•Å@»g£ã®u\<KΕ#Ÿž ����[QY ´û}Xr®üØÉîòÓÁ³Á ô!E¡Ô¡”™¬úR(¾XÚ°h÷ *Ümo/KΕf­_ <¼€‡Ô²Û9~¾ƒ¯mX ´{Œ]rî£>B$–½.v"B®Ñ|ðlðRPÊnçø!ø6¾>´a1Ðî,9W¬çeËâàÙà<¤ ”ÝÎñCðl|}hÃb¨s»ëxkÛÓËúäåÅ yM¯‡ÅᎠ^@p�u ìvŽ‚ï`ãëCC]Û]{áõÜYr®Üè ;!,wTð‚¬‡”î£P|/e"«>n}) ,íU ukwí·KÎ1z¹Ñy TÈóÂe5¸£‚d=¤À7\›.›ã‡à;ØøúÐ^ÅP§v·KÎ}ñÅŒ».9š9¡×êââÂìeᎠ^@€uÀµé²Ù8~¾ƒ¯íU uhwî:qšŠC–œ+?vy@2'Öƒ;*xÔצËfãø!ø6¾>´W1øÞî,9WìDwZ¸Vëü€�«œŒ†rÜz]‹æ¡ƒó‰ËHn=é¶÷d·Ó—»hßk Z»‰í¢¹“aðHvv;Ò/¨B®M—ÍÆñÃrƒ?®6¾>´W1øÜîšN¯=¼,9W~˜è.¸£‚`•Ñw4å øNî†çrØÜ•½îU(2¸ëKg7žHª<b¡|¸6]6ÇK þ˜ ØøúÐ^Åàc»Û%çt¢;–œ+?:.^íññù¼€�«„ ií4¥Ó¿5;æ`âa:®M—ÍÆñÃ?æ6¾>´W1øÖî,9W-¿9¸£‚`•»~Gv¹âÚtÙl?,/øc>`ãëC{ƒ/ín—œÓy„aùÑ1ñöz‘=±¸£‚¬`ݤ×mK³õ\ú—ŸJ«¡©¥ûaÀûÓøóóNKá±ôx;ͧÒ¾ ?HŒ)= äâØ|G?¿þN.ívã@ºWv\ê[ö¿”v³aŽÕ–“þ0<’û9-ОWG¹‘Áù±Ù¯eO{×áqó¬c©¶iH³ý¥ô£¶±ç£ûM™2®u2†7üû'O¢sˆÅƒ;f7Çs™ÛžáßõžJ3ú›å¬ûLŽõºØ¿KžËÔ6°õý3iýã¤~Ícéßf¶æBèy$q·‹&«>KÕqÞµIµ·¶çþ8Jÿ$ü­èXYö‹?â÷Ѻ»díƒéÐ^ÅàC»kz¶öî²ä\5°ëÇk¯<×kspG/X-Àz#ƒî{Ñ÷4ànWr+ ƒÙV ÃðqoÖ# †aøzÈA£3]IwÏ¥&`?×�ÑL,u{)0pm´{ax†“úù® nG×Ò;Ü ÿöPz7³‚ÉùuŒ{Ðv¥¼k>ÛëÊàn“uüIú}i´Nä* †GÑÜð·ÁñÜžÀè·JëøB†£IÀ‰Ó+¨u¶skïÇÒ9zwv{Þô¤ÝxOºƒ7æïÂsøáù6ã¿‹‡mpójR_S¿¸¾æ:­ˆ/‰»]4YõY¼ŽÛôÇ·r<–]çÚYÛ™þXwÔc¸díƒéÐ^ÅPåvW!h—œSåG‡?èõb|üæáŽ ^°z€u…6p´ÛY=WnÚ©»}o¶çx;>vR$Ë"i¯KÔÑýlSuŒÆß>”vï³cÆÜ‡ÒHì›-Ì÷“Âd^ûæv.FLkÏH<<Vç+!ã|o^DõMˆ…{õ_=‡$îvÑdÕg¹:.aëëØGRŒ&K¦O¹,QG÷³Ül¼÷½-ù£ÖÛ%kL‡ö*†ª¶»íÝeɹj ©ôvÙ9†Alî¨à«X 暎ûâ¹tÌ’N«³æ¸ÚC—ŒGb:F)¬/å̦˜®$¯c¦0ˆ‚éI°<[<dœƒ[×yÛ+ŸË¼ö¼‘Ap˜H¿ŒˆHonDõEÌ/WÇy×&$Œ¾kzõ£Ï–a:âãíùç2¯=ËåëÛ8Ð^ÅPµvWán—œ£w·|óÍ7ÑõÒëÛƒ;*xÁêÖì@2NÕÜ—v7Þ«óõƒÙÆc ®u ç2Ì®cœzº¹ŸKÐëK/ùÙ†ê8te/ ¬“b(ÞgÒaCf‹ÓS·±žÀYç2§=-*ƒN4†7NNonDõEÌ/WÇÙ×&74ßmr}O\ÎcŽýàKžËœö´”Ä×·q ½Š¡JíÎ’sÕB_¼ØÙêUÐÃvᎠ^°z€õƒôÚ=Ff; m�¸vLèîÑs9=~)Ã(ýÓ–!&u×ݶǎËðû­Oå2š”éF®ºGrb‚íé̪£Æ¤¤›TR;Þt÷©œ~./®¾ÚLíï˜ñ²±€ÙKˆ£ûi¾.6øŽ{ÚÞL&¹²¹ißq°[{¿žÙžä?²ÿ†ó½ymÕ7!.ÜóYצËœ­î‡–Y¶ž§?Ú´ïfŒxøùí·Ò=|n~w³êˆ?..ÕòÇõmh¯b¨J»ëXk­+KÎUƒä‹†AwTð‚Õ,#ÂïE¥Õ• µý·2¸:1³+ïIûä…tŸ„Á£ÎØüú"êÕ±ßÝíœÊ©öBMÙŽ{ÞÊp<[sXšÍ~^Ã㪱3P·Oä¼û«0hߓïÎä(·:fp{%A{Ïü}2ý5cöìq¯[’äo…¢ê³O¥½¶s·'ƒŸ.Óíû¬#Ïr9—\ÎkÏ»’“OåÌœ[,>~L_+ ¦µéõ‹÷ïJëô4½m{—Dÿ>‰»]4YõY¼Ž[öÇÑp2«ytí™ÍÔRgÔ¿qÉÚñØYdnÑör÷1¶vó”ÝNYr®z°Ö9à ^@€uÀµé²Ù8~¾ƒ/‡¦ÞjûÌ*úØ<ÚÖe%¹ä”ûâåÝwßåÅK à ^õ*óƒ `\›.›ã‡à;ØøòÌôùí¡í]6ì’s* Yr®üèõÒ^xµ%ý—´úrÀ¼ ë!UÆÀ:¸6]6ÇÁw°ñÕÈôùíR6;µ3Ÿ³ä\5°ÙLJX>xd=¤ÊöàXצËfãø!ø6¾:IAß>e±SîvÉ9f>/?šFoSê¹^å„'xÔצËfãø!øNm\Ï“BÙVb±/]ôZR_nðð‚¬?ð צËfãø!øNm_†<Xdl<¶V,¤ÔW ¼¼ ÎÔצËfãø!øNm_†m­ƒ¾h±)õLHXðð‚ÍX72èu¥ÝÜËXoº" ie®—½M<hÇ’àÚtÙžÍø¡Ìüq6kãå¦.ç Ń­m;.^{ãY3¾zà-à›°Fƒ®ì…ÇØ)"ø¾éI»ñPÚ½ ÿ{(G ß„ZàQt^÷KCšíÏåE(#sˆõx-Ak7õ»¾Ü™OïúÙ¦u³ŸÜ'»ßÊðòSi5tÿi_ÈpVÅGC¹<n…í~¿Ñ’ãK{ž£¸}‡Ò»ùéµÊN+aô™h{'q·‹&«>yÕÄË€¶±KÖ>©ËyBñ`kÛASèu2J+â_Mðð‚MXq\ñèq0¾+­àu´âý/¥Ýl„çâÝo%ŸÚŽä¶,ͰížÜ˜½1ñg{­¹º/WÒíhŽÛ8îUxÔÛKé4ÊAð.?I¿³/è·îÌß>–àúmøb¾LlÊ-ø#þX4›¶ñ2S—ó„âÁÖ6‹ñÚÎ:É"¾Úà-à› ° w}éì¾'ÝÁ›X,ìv¤o;Û¢Tݤx0DA¸ ˆøïòá‡( orŠì5h?’ÃÞf{6év4Ç ’¤�Èc!e+ý÷ѱ÷º2½‘A÷½T¥o¸6]¶€gS~hÁñÇ¢Ù´—™ºœ'¶¶’"^ÿer;?À[À Ö °nrÞ1)£Qzl Ó»•zodp~lRQµì…Áóuú†Œ®¥w¸ÿýá‰t?‹ƒýiûmÚlR¤??xÓ<‡Áû¸wkšx°Axø[{Ý+ÝrÆÆN¶‚—rÜz`êu.××f{Çô¸Ù ÞÓ$£ï$ÐsoFÛ„¤Ú1éúǽ›Y¢Çþ~2u8 ;‘`7Ãö8ˆ„„~÷©ÜkpmzaßYõYºŽø#þXbr±ñŠR—ó„âÁÖòE{Þ5^Óéñþ·€¬`i|ðÀôtÙ4V+œ 7ê3A¯ù»8€5® fGÃs9Ü?EÁ´ýÑ¡Wgªx# Âã4Ü£ºk ×ß~¦í „7r<ŽÄF,˜LÊìN²×-dt%ݽF¢çNçDEÅ0µmìljvŒê?i㈬}wáG‘•µ¯¸6]¶€ge?´àøcÉYÛÆ+L]Ί[ËíšF¯"þ£>BÄ{ Þ^°j€5½*&ô¦¸•~§iX#-éœãc§í_“ÅÃ8å5Qÿ{çãí™Ç6=oãq±ºýáÔ6K·M¼ñ®M—-àYÕ-ø#þXvÖµñ*S—ó„âÁÖÖã›o¾ÏN¯=ñ:[=ø Þ^°j€µÓg¾/tr«—rfÓ€m�{{%A[Ówµ§mOÚÁU,¦í_‡©âÁˆ•qZïýú¯&Â#_rÐ0ÇÕ´ÜýI/ß„)m’úÝ(­7ÝÛ>#­75~׈“DOc]pmzß&YõY¦Ž±àøcyYׯ«L]Ί[[M¥ÿú믣5âµèÿ™Ø®à-à«XqÏ™“Æš ôFãm÷£%§‚^_zNo—2ö%ˆ‚çô1§í_‰iâÁN¸5î±ËO<ØI®vm9;;”ýdJ¯2§mÒíhR©Çi¦§±yœó;!.‰v‹ÒŒw¥Ù¹\_ˆU צËð¬ê‡ü,;ëÚx•©ËyBñ`k‹£½îvR;M¥×^y¨x xÁÊ–OÚ|*½apËÍäøDƒcÛ³®q�l‚Xûw»Oåìôs9 Žå‘]›9ÑÓu×ÿ4sÿ:Ä‚'à'—ÂJNteëoÅAú|¢o8â)Þžô$N˜,‹•5;÷¬¶y¶kúwÓKaEc—^ ë {OKaÕ ×¦Ëð¬ì‡ü,9kÛx…©ËyBñ`k󹸸§Òë¸xÆÃ×¼¼`�k4œÌ­ÅÎÄñ¾hÒªÞ—®qº}"çÝ_…q¬¿í?—ƒÄÚÒF0ÜMÙ?öì,ÌØÔq’%<vçTz;%– èíçMyÖi§Ï'èJkêvFo xëÞ²X!·ßÎh§#!s#ƒàЈ‘=iŸ\šv ‰&ïÚI/i•Ln¶å¤?œ"4üFÏ?‰»]4YõY¶ŽøcÖ6þXôœ]²öùˆÿçß|^Þ´*Ôŧ–e0D½ð*à?øàƒHГJx xA,¨®M—ÍÆñCð:ÛøÒç ±/ŽÎP ómüùô¹2JOê<ÒlK÷EòrlãŒävГîxnSnóqw‰—•Å¢õ†M£×žw;^ÿÏ„vo/Ⱥñó0�ßpmºl6Ž‚ïÔÙÆW>O“Ý‘v¢ÄCMvË,V“)³Ó dhw /åĈj›a4Ÿ·r<•ã(cfYÞÆÃ^¢Ì ¯d`ïv ç:GHjâÊrS÷ç†]RNÅ»M£GÀÃ4ˆ²À ê`A}pmºl6Ž‚ïÔÙÆW>Oóû¥­C?ÌÜ ~òЋ´v“ió1ñš™pî —‘Ü^H«a‡¿,‡]å"{2J­Ç³Êd?Ôñ¹¡^g ×ôy»¤“ÙÁ"eÔ9À‚úàÚtÙl?ß©³¯|ž*ær‰MMûž¬”0óf‰Ãð7bAìnOÒÇw¹8ÖÕ(ôXO¥wý\ÚíÔË‚äd”ú];¿Ã zÝpÿCiµÇsE´þVöøã— ú›_Ig<‡Ç¬å,§‰ùh²Íðï£åÝc†âûð\†º?òºÏ=–íU·û’“ƒ¦0+\d.)é³×mK³ñ¾´Ÿh怙“#õ[:߯—Ò×ßgV˜ï¹Û£¡ôƒNX÷÷¥svlÎ!9'Éòè¹Öím·^Ï™Ùèaˆ²À ²nüuy@}pmºl6Ž‚ïÔÙÆW>O#æ#AnVa°7¦{æ  âĶMcÿÖ ö¸':ÜnJ “Mšå í2‹Ñç»FÜGË5†Âµq(_™I LVm ÔÉdññíwLûÔI2gˆy[÷(Íý&~I}OSê‡ây"Àã‰2'=óñv<Ÿ€íyÏìá·õŸ›JŸxI’Z…"¹JÅȬjÖÙ¾x‰^H$&âoÿ³Y#nÏV÷Ûðnäª{î[}µŸ}JźöºÛzÛÏDv°*DYàY7~ŸPO\›.›ã‡à;u¶ñ•Ïs,æ+`cá÷SJÌ¡9Ä欓žswöù¤ ~#ƒî{QÓ%Ê®hŽHßü}Ô›n>ŸÉ¢b>}°lñ>%ÍþÞù'˜*æM½Æç¯üUÜ®ÉÑ$~Iñí,?!æSÛveÄ$†vµçCкú‚¦Ïë¬óÚë®ç¥½ðŒ‡<!Ê/Ⱥñûô0�P\›.›ã‡à;u¶ñ•ÏS…ßẊØ^ò}yÖùՆļùÛ)b|¾˜wë2b>•fï ûòâLSÓ'/”Ìziû‹çãÔüL1?N³Ïê w„¹=·„˜ÏüÝHàÁ¾¬˜ŸÕ PeŸÒv]B.‚Tú¼ zÖ‚‡M@”^uã¯òÃ� צËfãø!øNm|åótżbRâõ˜q:EÌ[¼Š˜O¥’O˜/æMÏüÜ´uË4ñj'À³éúfÆy]..øƒ¼êiÊÿt1§»ïK»HïÕ¹sþIC2fÎO÷¾˜ º²çLÒï3C�2żýþôžùìºÎ§J>¥Â]ǽ«`×Ôy­»í}gü;l¢,ð‚¬•¹½Qw•­c'Ú+¸þàÚtÙl?œþè u¶ñUÏ3ë½7™ôÎbǼOŸà* ïävL&¯S‘lz¸Ç©Ûn*·Mg7â?£*n?•ËhÒ8Ë}$'ƒ5=ÕŽOšãÛúØ1êñuúíáþ<üûŒ æìo'ÄüdiºÄ1Ì ƒ¸ÎvÈASŽÎ¾”ã¯è~(íóKyññs9;²í1š´×Ñs9=~é¼4PìXu=çc9×y"lϼ=_Ó‹ŸL³}'ÁAbµ“=aç6H×;¼—‡ñÄQÏýÿ5bÞŽ™7/,¦¼HY„²ú”î:ÎÝöºë¿º­ûõs€mC”^uã/ëÃ`6ñC6z`Ž'˜±J}pºEgœý\^D3ôæé]HüFòÍzhØÏ’)u÷±T2…0š]øòÓ%f»Ur¥¦ßð›à$ rþÅ™4É_´Ý“¸ÛE“UŸ²Õq9ðÇ4ø£¶µKÖ>Yþ<m­µQ÷…V,úöǶ”œÑ]íñ¥G{ñ¬ê¯/"1iµÛ9•Ó„o¸Û±ý%í;,f6û·)¿1u2bÕþ}lßÎßŪCô²nò·ÉÒhuä¬7HüÍDpGõ9ïÊ“ä ›±‰ê?&ÚcOÚ'/¤û$ô­©3Ú+aû¿fåOեђÎÙKéŒ_˜ØýIA{%Áøïô^LÖªOÖ;<ÖñE G»Z§Ë°Þö:7¥Õ2ÇÖï\®~Ôc… r›&¯½ë¿þõ¯îPjêñïɺñù0X,ñ§µÅÁx"Í-zhÛew¦+‘H׋ÞÂ'‰?ÛËHãË"ÚgŽkßüGAËÃÉlÂ$Å bþ¾M—ÍÆýñC þ˜ôÑÆ§.ç Ë’5f~=6akv,»-:†]»¦Ç«`×™åõwU°ë¶ yý\SåîPf¸3ƒø`išá^<-JÛK¤Ä&'£I2{¸Àú² cDŒM±£Aû‘.¸ÜLZ<$„QôiR�Ì"¦Ç$-̱£tÊxl£û¹¸6]6÷Ç-øã=jîþÙøâÔå<aY¬˜Ïçž§³¼«­©^´ho¹ ðd±â<Y’Ÿ«ˆ×¿UQ¯bÉé ªpg/Л´KÖ¾Ís#ƒóã{i}Qh|;^·-ÍÆûÒ~¢©lB z(¶ÍŒ³l·'oº§‰„'¯qÇÆN¶‚—r͈§õ]__˜mMLöîÙc:gWwøYbì£s¾;{¡°¸ŽÏ7$%œžM%îÝœ�LÚ‘Ѻ>•ƒ{íâ®McãÓɪO±uÄñÇ|)Ÿoºœ',ƒòöž³~ïü*bÞ¦½' âêwfð‚¬ cû‡“¶šX~§Ó=§¶ê¤0SŃ Âã4Ü£€]ªqÐn?ÓߎÂ3éŽwgÒx%mÜÉ…t×àDEÅö¦NvÄò;)ñÕßö ²ö¹L5ĵéíÛøl²êS\ñGü1ÊeãÛ¥.ç Ń­,Þ^PŽ�+ž¬*lǽ_qP¥ì†"9áÌ2,(ô·SA{Æö½ =óØvi+vtûýv÷Ïñ/®M—-à)‡ZðGü1ÊeãÛ¥.ç Ń­,Þ^PŠ�+3ÈM®=»)ñà¦õæ%Â#›¥y¢ãªÚŸôòMЉ¿^ÊY§Öagºxˆ„Tº·1þ|Å´ÞâÚtÙžRø¡Ä7@©l|ËÔå<¡x°5€ÅÁ[À J`Ùufi­ñ¾]ÔoH<Œ—²™¤ ç%ì$Y;¶œʾ'c¢Ôåýh9® ×—Þ¬ž@“ö;é)5=Íûë§@ÌqmºlO)üЂ?â T6¾eêržP<ØÀâà-àå°Þš±¯vYª·ÑºÍqPoñÅCœº› ð“Ka%'º²=ƒVØíI/\|,w{Ò“8ÁŒ;Û2k¦ÚX˜ãØ1º»Oåìôsy1|ëünz óhx.‡s–Š@ÌqmºlO9üЂ?âùS.ß.u9O(l `qðð‚òX72M°–æ¡í÷2½€vÿRÂ-6YB¡Ò9•^ô1q@o?oʳN;µÝ ºÒšºÑh'Þº·,VÈí·Òµ³q·Oä¼û«P,ÄBæ­SXÈ$ÛgOÚ'—23£§4ê¡´ÇK Ö’Ÿ…¶Aw»h²êSlñGü1_ô¼]²öùH]Î3b4”ËãG%X•Aï7O¤u|‘ðMÿ©•­¬ Þ^Pç� êƒkÓe³qü|§Î6^_ކ«¼ èßÉ_þr7:﨤† ¸/õv¥õ—¿I¿ìJ–f[º/ú‚|$·ƒžtÛºÒFâ»:Læãnü"íöJ‚ö~´|e]½¶�,Þ^uãça�¾áÚtÙl?ß©³×ã<ãá9»©Ì›ÉÓ¸/¨u"ÉÝCéݘv®ŽDÖÊhx)'F¬ÇËQÚ˜¡?QFÏW2°ûor®X6’ÇÕa3ÍùÃ`<çÀâà-àu° >¸6]6ÇÁwêlãµ8Ïh•w> óò¤ý¾Læà0è“Ãt’+f$ù)<Æ~؆“¹0ìêÍÎåäxcôûÏ$ÚÛ9.ßcxn�,Þ^Pç� êƒkÓe³qü|§Î6îÿyšÉ)ïÍ¡¡bþC ®ÿO<©äξtú?Å-,æC¢;f… 3ç¼¥ “d,'é+<7�o/¨s€õÁµé²Ù8~¾Sg÷ÿ<M:ý=!nļö’»KO.#æm ¾ö®ÿg7öKõ´ÇÇ®ÃJ<7�o/¨s€õÁµé²Ù8~¾Sg÷ÿ<§ ñ„˜‰ÓãÍø÷ŸBQž«˜7¶u\’+ZÌ8¶gÔŧ�ò�o/˜<ø(¿Kw»hܺR(>—¬}>âÿy.&æ'×5¤ùìHÚk¥Ùg¥Í›tÿ{Ÿ!æà>x x ð*Ø8~¾S÷ÿ<H³c'´ ÅyjŒý4Ám¿ÿÀÌHo&´ ÿ>=Ã}Ì]¿#»;Méô“SãÅÇ&Í�’à-à-< Àwª`ãø!øN]lÜÿóœ2^´,Üû“Iï,Ñþi1?si:wi»¹êH#l×FëXÎ7f¿í™wļŽÏße<�Hƒ·€·ð0�ß©‚ã‡à;u±ñZœ§»4Ý0VxÞzîZÜ^ñÑð\÷c1ï|7Y­Žœõr º·2ìÿ^ºfúqi´¤söRú÷æ{áo º²ÇÒt�à€·€·ð0�ß©‚ã‡à;u±ñzœç[¹ËîA ×eÒÌQ@Ó¤èûÏ €ÅÁ[À[ôa@¡ø^ÊNV)ßJ¨ËyÊèZz‡ûÒl2pƲÂí•í°>©}¿©­ä�Þ����3©•À åòø‘Œ—…+Š;O¤u|Q!¯ æo���€™ °`[`k�‹ƒ·����ÀLX°-°5€ÅÁ[����`&,ØØÀâà-����0l l `qð����˜  ¶¶°8x ����ÌÛ[X¼����f‚À‚m­,Þ����3A`Á¶ÀÖ�o���€™ °`[`k�‹ƒ·����ÀLX°-°5€ÅÁ[����`&*°(”m�X ¼������ b æ������*b������ b æ������*b������ b æ������*b������ b æ������*b������ b æ������*b������ b æ������*b������ b æ������*…Èÿô‹6 +ÜíE����IEND®B`‚�����������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8a.png��������������������������������������������0000664�0000000�0000000�00000067755�15030617045�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��z��Š���›Ðìˆ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��o‚IDATx^í½{Œ$×uæÙùA?h¸�[Q  í ¹ð€‚‰- ¼µ‚¨ÞáJÛXwœ´Ú´azÀ¡¼¨ÝZm sL7-"dzí)l·,š‚Û)5)Ñ¢J›êVO“­ÓMŠ-«\"ERd©(Ф©Ú¢LÑ=å³÷‹Œy#òfÆÌˆÌx|?à »"ã}ïûÅ9çÞØ'„B!¤–PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BB!¤¦PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„dbß¾}´š!¤~°eB2AAPOX®„Ô¶lBH&(ê Ë•z–MÉA=a¹ROز !™  ¨',WBê [6!$õ„åJH=aË&„d‚‚ ž°\ ©'lÙ„LPÔ–+!õ„-›’ ‚zÂr%¤ž°eB2AAPOX®„Ô¶lBH&(ê Ë•z–MÉA=a¹ROز !™  ¨',WBê [6!$õ„åJH=aË&„d‚‚ ž°\ ©'lÙ„LÌU\éI{q_p1kud{oCÖ–†[lKïÊ«Ò]¹vø7ØBKÚ§NKws'<ˆÅNWVÛ$maUº;{áF6;²±vH–×dÓõs’ÝMYo·d!Øï~iÝuTZ ²Ô¾(»Á ;²Ù=-§Ì:‹+]óW~à:!õƒ-›’‰ù K´-’µ [î¼%›kû¿í[–Õî– ôÕžÑm«¡ˆ:(k›o%„Ur}Å:^R°…Û»E×Û²Ý=*Kûdymñß8{Û벺d„êÒªt6Ÿ5ÇÜ^‡±@¬Ú׿·Ï,`¿„úÁ–MÉÄüÁ@x- ¬q¿YB/æ³…ã­ÒÙz;\®ŒÛ§a眬~1üCQ‘QŠÊqì½ Cv7H»÷F¸Ð,ÞêÈ¡˜GoWzí%¿}fdþåJ)¶lBH&æ.¢pêµ²Ò}5\ýæòx©HJ 6ÛÓçØÎy¼·eëÌyyÖéRƒÈûwÒjÝÔz#úŠÙWçÖàø ‡:²5nU O¾pYNPèROز !™˜· ØÛ\“å@” {µ®ôÚ²8â·H$9ÄÜ`»}²ØîÉ@CÙ"ð°t¶ñËŽlvV冨zJß“·Ü:!Ó;œ§Ó ¨8ò ûë›ýô‘ÎÚŠ,Ù¢.ÃûÄú_”µ•åþ~†BÚé`;BHý`Ë&„db¾‚ÀÎScŽÁ~1)ôFÏáM4¢pwã„:tB6vnçZ/Aä1Ôó²Å¥-êtybŸ»ÒÀ rû^—íÎa³Ý¢´:Épòxp,BHý`Ë&„db®‚Àò€ {µ^”NkqÄo–x {^ Å„UÂÛçòîmIwõ ±Øy­å£ÒÝ~{°]jØÖ™±óÒs²Eæ ZB58xñÂܾ(×ÏáÑLBz–MÉÄ\W~žË‹æ7€cH Øç•§zò”%ƒA*òðwè=>V’Ç0¾®ž“†‹ z.‘·r ^ƒmÕ³7rôðx(ô©'lÙ„LÌOX^¹!O™î´Ä‘Í¿7Ò„tíÑ­`ÜñlÆ…“]ƒBlÔ ™§cDÝ ´l Tز¬¬}Qz¡ØÌ öA©lÙ„LÌOŒ5 ,±•%?o÷¢´1wö94âuÜñÆá±Ž"òÚ모³E¢^Ÿ%G‰×ÝM9ÓÛ#.Ý̯\ !E–MÉÄ|A˜ˆ¢aáM6ìlQ›Ù6òÌa”êgd%ØfA–V:²¹—Fý9ìÜÇË7n–Ç0¶® EˆºgeóÌ%Ù¾¢¹‚ðVþÄœû£ÒݸåFžH#òº§{²=ö¸næS®„¢aË&„dbö‚ ¢ -¼0î7;œë°‘Ÿ> êˆÙÐ .oÜ(ÔK—\W¯i¿´Úöh4ȈÎÖ1YÎÙˆßÍN(VÃëéL&ò�öA©lÙ„LPäD4¢7ûÙ"`¹ROز !™  ȇhdnÚ×0fË•z–MÉÁ„ƒ?ÛÊ…ö âþ¶î|`¹ROز !™  ˜{”o”kWX®„Ô¶lBH&(ê Ë•z–MH“ÙîHËtðY¾JAPO²—«ýé8Ç$Õ„RÀ'6!M'{ã…ÞßÿýßËÍ7ß,÷ß?…^MA¹ž?>üË{z„”>± i:B ï¹éÛÕW_-O>ùdøkq¼þúëáÿšÉK/½þ¯ž~úiùƒ?øƒ <µl³Ýs =BÊ…!MÇCè}øÃ–ŸýÙŸ•«®º*´zÚ_ýÕ_…¥î…!e‡B¦3FèÁk÷ë¿þëòŽw¼CΞ=+KKýo¿ÂTIáQ䱯oÚ{ßû^yÏ{Þ#wÜqG¸tv|êSŸº›››á¯ù�ïÝ/ýÒ/û¾ýöÛåw~çwäÝï~·œ<y2×§C¡GHÙ¡Ð#¤é8„DròúS¨'ïï|gð/Â}EqÓM7ÇPÃ9Ì"Ll£"OÏ×?k±wÝu×ÇV!+yìï×~í×¢2~ßûÞ'Ýn7\kz„” =BšL òTT-Éç_ -. ´8 ßúÖ·‚\=üž·gÉæ _øBpÜN§#?ÿó?üÿøñã᯳á–[n‰®ß¶¢sæxÚô˜¿ýÛ¿-ø‡(û÷ïÍ °Aù¶ÛmùýßÿýXÙCàBºi¨È ï×·€ !³†BðàƒƼXèðÑɧ{uòeuu58¾z˜ Df=(‚îýïpø?þÅý™›>üðÃò{¿÷{ò3?ó3Ñý(R`+¸×ºYã¸0ˆ}xZgq|BH¾PèÒp4Ïöä@ðùçieáEé´ûÇiud;\ªØž¬_ù•_)àøþ¨ÀCÿÎ íw½ë]Á9Àó6+ ê î4|ƒ‡"pÖ›29z„4;±wäÈ‘‚;òPì9„Ž­ç1KÚ(ô¾Àæ Îe5k+¶ÉBø|„” =B¼d®<¼Ù…æÜBÏöæÁ‹6Oož¢çI”ç8~Šši@¹è€ˆ®ô{3Þs: %«wS­8Ï/!$/(ôiåÈÃs ½²yó€Þ'ØX<æ"œL¢÷â*ÑžÓI Ã±í:ƒ�„$„” =BÀlóðÒ ðæé¹ùy¬fƒÞ+ØXf ôl'Ê.=lš¿ÐSplx…íû3~„.!d^PèRcæ—‡7Žab{«fƒ6½g°±Ì@èýÖ0 e8žâ„ž‚:„ÁV†Í6 €’…!5±ùæá"á9-¶{òs>¶7¯LèyÂÆ2#¡‡rÕïÒâž/Ëâ…ž‚óà]BÊ …!5B ,óáù¢“cÞ¶²£ÞCØXf$ô�ráÔƒoíhf'ô¡k{øPÿ8B—ùA¡GHMpMƒ1¿<<?à *«7è}„$yºÞ’´{»áÅ¡ŸGƒÍýy¸aÏé,?ZÁº„” =B*Ž+lV/ Îç[FoÐû +(sýrE2€ sÐEè™#t ™z„Tˆ8$äÛ<ˆ=„óÆçn•ƒ*ˆ½¯°²¡!o”Y¦£qzš¡‹sF™—5€:A¡GHÅpyJ´ãt‡ñʉzó NË:%‡Þ_XÙÐO´ÁPÊ…àÃèêä]|õ£ /&„T =B*< t¶|™=:.loÞõ×_.-zaeÄö”áÿU�eŸL5@]€‡â•’/z„T�W籇νŠÉíUðæ½×°2‚²·=»UJð>cPIr„î|çx$¤~PèRbÆåáUÕûѪ‚a»2£÷VVàÍÕú¯XÕ€—#tí:ã]BòBR—<<w¸ˆ½²çf齇•Ô œ#B e¿§.\õ†ºUKK ¤lPèR2ê’‡çaZõæ!|[vôþÃÊ Ä¿ÞW„C« ßÝwß»ïú‚ú„L…!%¡nyx.0ð×UÏ“–¬ìhÞ#rÞª>OŽÐµ_vÐ.8B—ìPè2gꘇç¢jÞ< å+;@Z‡ò¬ÃËëå‡#t É…!s¢Îyx.ª˜G¦å«xaÐó½ÿþûÃ¥ÕGGè¢îèõ¡­p„.!éPè5‰9ûœÈ=‰\ÓÙ ƒg¶D¾ð´Yþ³ÎÛáÂYcÎïž3"ï7vÉü¿ÎÔ9Ï®W;éñâ/Z6°*�Ñc¿8ÔMq„.!Ù¡Ðs�Ñs‚ãѾ0¢èK¯ˆìôéMó/VúG‘“g댲kŒ¨ú‚Wgßv=?çk ½gþÖ:ç=͚ܳ =W( †ô:wTêÍC]¥+»ŒªD !ä¹Õ —'Vç%B¦BÏÆˆ¡³Ý;Ÿþa(è /‘/„ÐÇŒ(Òå`ïM‘£¡(¼Ç¬gó¦w™õ„"êðe³/sŒy²cDì5æ\’=1âîY =œÇ¹y Ê9àÊÃÓ\£º‡žlo^ÕæyÓ²‚U!Ö˜Q%a\'Gè’…žÅ›F¨A”1"d#Ðz|Xè³F4AÈᵃàSá#$ç)öÊ ôq|vŽžÃâò> óE¾Q];à$Uõæ-3X•€ÐQ¯qÙ'¥ž–Q/QáÝ”6FÈ8(ô,4„éz†=#ØþíBìíŠÜ !5fÿ³`ÞB"ïÓðŽÎ@PÎt¶É<<Œ†¬úÔYÀ=Ðë¯bQË V5tbjˆž&x¸ ê\#t‘JÁGš …ž… =äˆ=aÉÿ(ò¥ç'zàÒÓýõÞÖËÓ«—Ì<bÎñGþÖÓð2ì°9Ö%Ç5L$ô̹^zÎì¿cÿæß{^qÝ"x/O†÷†üFÍO|óï¬}X¦^Ò´!>×!ù%s®¸gÔøû!ìÛ˜ýÚ!ù¢@§‚N6™‡‡QuÎÃKb‡!öª¢¶Ë¯j êwd1€¡)u× ož¦ ÀPÿ8B—4 = Ûë6NÌ$ñz*²|ÖÕ|A%v?0&i›ÿ[BÒ§Q¨Ø\ÃI#®l2 ½ð<¢üBs.…×{«9[4½lö}À÷¡ðÚ¢ûiì!óÿ�³`PHâ8iB¼®Q¯!ÜÏáo™ß¾;8ö¹ä :x­ì´£³iBž û¬èd«ˆ–#¬Š >êù#… I¸<ê°¦½pB¡—àå&¼NFLœ4fœàózý~,ÜoZø6uæØ±iFTdYÁ ¯Ð!^"‘•ðfz8––®uõxÉ)Ϙí‘÷Ý›B/`Ä9d½FI!ššŸÍó;“¦åá%Á=IïGU…®]¦U÷ݾ†¦½p â…cÔ] >Ò(ô Ü÷ÙP¼©Á›Ô!ärz¡c‚c'„Ž¢çe+“Ð Ïch�ŠŠ5k߈J4'º­k]×9²^ã(A§×îP3)ð؂ִ<<uðæ»\«ŠýR岘:xòìòDýä]Ò(ôÆ`O«¢vÔˆ…¤HÈ[èéz©BO…Ѥ‚Ç6™„ž. ÏÙeÁ¾Ç‰·$Y…ž.Ëp³zš‡gçÁêwª¶¥Ê^$»l« ÊC_F nšêe¨‹¡Kš…ž|Ñ€#:’!D_¡§B#m]_¡ Ç"È%ê²=ݪ0*PèMrE =tÌÃO<Hz0o^ùñ?Äíû?^6Êf<ÌúRR•ï  DFãÚ/jø?Gè’:B¡gñŒiß#…Šy(Ÿçr_¡ç;ê6MÜ(¾"È>ß,BO—¥ N;”›vŠzö5!ôàIæá¡chrž‹ºxó~ú_D^3uðN|>°ö_¬ËS¦.ªùQ1öŸ_íïbQ 籓ƒ(D]E™`48Õ}Ðv9B—Ô = „q!UW˜ø={j‘䀅!,áä<óÐ?‹}¤,6öo™„ž%Êœ#UÍï:݌ޛQ¢ð)sÜ`¹µO¡7É5æ-ô\yxø»éyx.l1Œ¯”xÕ~ð÷}AÕ3íÔ%ÀÊb*4q¾ð&f¢F rÓšžb`ú¤ÎPèY@ ŒûÎj ¢'MèÙ_Æ8löá3e‹Š/9Í˦ùí³á±¢)W 畜Š%“Ð3øžGäy3†ùíì¹þ rn†â*«Ð3d½Æ¼„:FæáùSfož†X«"è²Ø·M£PÏ<‘ã@ŠÊ‚¢œ @ý5B÷ŠmžT =‹HÔ$§T1"â’*˜&$9eGð9¯PÄ¥}ëöˆÙÖGä˜N)˜÷-ÜÖ¶FHÙç|Ÿ×,·¿¥LkbÎëlâ€zIq 5#²bBÖ÷< ~RCëšó°§‰QaŒû…û÷çæ^㞎<‡,×h~çê°nòü4tž¼ö$®<<üËÎí̓ž'¶¨s‰£:„¼”WuõWˆâeÜÔ_½O0cŽÐ%U…BÏBsôö½A¨5 Fœ| Â$\7òL…¿2l÷$®¯Y¤b¶9k Ex¿` PÅœKìËƆ¾ 1â|á…Œ®e1¯ö Ýàwsœ{Ìñ\ßì}Éë™û˜¼v[«øõ:‡´kT µÀ;øÿXny ð®<<xõ˜‡7õ„ÌZ@À[a³iʹNžº<ÌæµEÌwÜ.%IP§]#t™—Kª…!†Qyx|ƒ÷ùxzߊ ÂSõÊ["ßÛùÆënS';ÿª{yVƒèÃ}ƒWQóÒK/…w–¸ÀýIŽÐÅ€Œ^¦à#U€B4šQyxÌÉñgá@x¤à™j¢Ç.o1‹‘½_|bCþù0(3ˆ’ŽëY¡Ì”Rv(ôH#Áƒ™yxùP„7O½vÈ7ƒ89—“W+OÓ©P’A:Î’ëc?®ý«éµÄ´1ÿü_”'Ÿ|2¼ó$Q#tÑørHÊ…ix3/?òôæaÄ(„ËkwaÆ!Zˆ+ˆ0!Ì£·zßÉ`€GÚ¨ÖiÀÅq0‚V…á%18­ýù7ŸÍ<]KÓÁ]|îÐ~–  0@Ê…i ÌÃË$«ã>»1‰7 )ÒB²Eyôp\:*¬¤Ø±ëʼ„�Ä œ³ëz¦5ÜâëÅmÏR&(ôHí§.9û=ŒoÞÓa{óбùÞK_q—·Aa�BÂu>Øõ¥l¨÷×ñçºæI ÞLJâÚ¨º ‹“yC¡Gj ¾˜ ÖxÌÃËÛ›‡0Ö8’9w“Øù×ÜË]†P'Ž…cN’Ôz+;êñËËÛ‡û‡}0B7ùÌá]2o(ôHí€g)9á)óðòBY½ã¼yYð6å‘c6.OÞAxë|¾‘»U óºî—¯¡ÜèÝËŽŽÐ…ÈÓúƒö—L2(ôH­À÷gíiæËƒíÍK~óWÅ]Þ£Eí<=»"Hh=‚Uxå{7My@D“ìp„.)z¤à ù0öt)W ¸×Úq¡S ºŠÌ»{241ËÑ¡Z—`u�9}“–¶+zÔq]á]2O(ôH¥qåáA„ÀãÄI1ØÆïž=ˆ¯"¦ÿP¯Ý<C‡Z§`u÷tÁÇPîä@Ðq„.™z¤’à¡™ÌÃcÒsñ¨7ï–OÞ)ÿϹËN10!¼ˆ0á,½vã°ëWv’.¶#“Ðä]D"àç]Rz¤r¸òððä[q± ×ëO>#_yñ-gç?©•MÜÙhƒÕ”ë$ƒ6(ö¦ÃàË*) =R˜‡7—!ðõWöœþ¤†}úÎg7/´žÁêÊ"«wbozð\ƒ¸³GèâÈô’z¤ô0o> ãŸÄÓ3Î0Ç[•r¼´¾Áš�¼{—^ýgÙ2н|5B÷Ž;îàsŽL…^ƒAG>ÊÊ0ºŽyxówžŸØBÒ?öYÅ›vÝk_8ÿ¤³,GÅ^~ 54ìºÇÈ™ ½ ‚b žŒxTƒ÷´m®‡ò´†Ž;yû<ðy+Œ“Â<¼ÙO:ëiæZ³ £3Ëšw—»³mÿã-)“£qó÷ÂÏ®ƒ€Éy+ IƒB¯„¨HRá¤bªˆ),fe*!FqM¸F æáÍÜ”G^u Be›,תbw²M/UÿÍG>&§¾µå,뤡U]Ø— „lºµë¡ŽÐ=þ|¸!ã¡Ð›è!tàýBG‹ïJN2¯U į^ FtÞqâ ÁÔ¿ñᙇW0¨{y <Ôß:zt춉à3^ï¿æŸy‹=ýºˆü2¡yÊö 0ÓXˆ/z3BEÝÓ?î{¶\IZÜÎýðJ „qÿ8+>ä¢Å>P§ëܱ7]èAD`Ä^çòœõ ih³¤8B—L…^Ahè•¢._ƒ¸@øb…Â/¨“y <Üÿ&Ðt¡ "pýÿôºëeý¹;ë„mø&ñ–yö‘â@Øá[ÛÇGèz9Ü_agœ6!ܽ ?†ŒÜ@àåñÂ}`_MB;QXSpÐ{ð_ÿÆ’<ö£Ñó)ž·žm|+ŽÐ%>PèMb[!L‘5Ï)¯ m`^ü£=›&H\ä%ðî{ä1ùö³ß÷Ú,ì´ÉÜoMsÔþÿÉùÌ{Ìj‡0´ER<¡KÒ ÐË€Š»iMØÂd–‰Ž¼ýT¾zù9gÎQ—•}Èãcîg] Œ#÷Ãÿ"ÿשõ`P r‚šŠÝq6ˆ î!§^øaTW¾nDߨ(ESBüe�ž×ä]NKE�…^ wÉæé…›6t‹·ia87Ä :øÀ~ú¢|ö¹MZžtW®•…•®øäG_éµe1zH\++]s à¾DÇ "ç¢óù•I âžá¼ê,úºÆ5º®ß×pŸP†ÿí ÿ"¨Èjò¨>»Ól:ðiNÄ?R&Χ¼´â¹É”ŠÙ2ÿº;²±vHö-ÈÒêºlï…‹=ØÛ:-«Ç.Ênø7É>½àÁ„7Ñy õ¼%EœwÎËNWV Ôž“^{Iö-¯É¦WcÛ“ÝÒZlɱ‹Ûæ¯ÉyòÉ'cŸóù—ÿfEZ·ÿïòð…oÅÄ ëú‹6ˆ„w½ïgÀ=u…Ó²„:ÀÛ¿~nF“ÑŽ6ž°í,˜u—ŽJw;ÃÅÞ ÒYýéíNÓâfÚ4î„Ãù ßðzF¢n’Ùã¡‹v6ýÒK/…kåÏÞæš,ï;,GÃ~h´Ã`Àn¿¯ ÏsߪtwÊߪ…ž:~i;L_S/„èd!æryûÝîHkß’´{ÛýƳؖž×D¦/J§µ$Ÿh‘eïmâàróÍ7Ç.:lTr0î;Ä,îX=mǪrx ç>­·uнڙ£ÜšìÍQÇcl,{²¶¼¿P/zÀ œ¶mÔ BsÕ©¤Õ饪jèKwr„n1s”îÉNwÕÔ#Ô^¿(íÅY^Ûðtô=‹­ûäb–%’ …ž"¹\®T^QgÏ ·c¬0ž%ô¼=z“1§<:ˆ¾IÞ!x5 !2JüËÏËbK8VUÂL¸7Ózœ“À›§eØtoк K ¼è³m÷õäÁ ^Î\õË6¬Cæ Ú6hØÏhX¾#t¯Èvçpß¹ðVϽ}²Øî™¥ÀA±p«´ïºÑâE£…^ž¹w¶AØ!4 ñ0óÏÞ…Eó&uFÖ3x&{{Ä$xƒÄ›dž@„¡Ì PŠ,7ˆñ² >³iCÞ.§ØÞ¼"Ã;UAë4l,sô¢ÏÔ  h÷»?y+5 ‚ß«òUgFÐÅ@<ǧ'ôèEB/‹GE#…¼!EÍ«›ÿ÷ùBWÐè¥Õy1þÿ £Yœè *™‡§þ|é¼iÄ B—E ?ì·Lê–ë<}mœÀ(7-K„uHVÞl½èóÄ݉ÿã…ÖUçlÃ:¤@ðÝ}÷ݱú­/èÓŽÐíç蔵‹_Ì£GФQB/Ï�xKEçÙ´y»òð`ãòðfD „_žax”ñ¼;¨i_LÒ@¹éÄ«xàsvý>výËŒ½èóõE½B¨/x&¤yõP‡I¹@;¿ýöÛc/ëx®ãÇ“çç:FÝàh þ4BèÁ+ã“GâcxXa_!6<À5‹‡{2£¸&ÍÃ+´ióØÔ°®Y‚z;hE]õ=gzóâ >££Ózßñ¹F݆# [ÙŽýßÊcªpïf×äsúxœ›öR\æ5B—Ì†Ú =xxÒÞ4} ^‘¦ˆ;›}èCÁ›{2¯#¸®»îºÜóðŠ�¢PáÝY…s!R'­·Y½¶7Fo^ÿû®zOn¼ñÆèÞ°Ó€z£9ßyæ9g}´ 퇔<Ïñ\×é•`ó:B/úðö‘jQ[¡‡Î}Ú0-¼8è0›šD q÷ ¿ð ò®w½+0møHÜ­ê§ut0‡«¼} Bª¨)Yàñ˜Æ osÖúŠrÖ²¥7¯>ŸLMhòBF|.½O>m‹”ŸQ#t!�Ñ'à™AªC-…Þ4Þâ¬Ãtež mä¿ø‹¿(?÷s?üÿþûïÞä«^Ð)M[OÒrß|8›f°®e’s±s­`ôæ €çBï ÄLÓç0î¼ü|휳~ÚÖÄÈHÁ³ÁŽä |!òðô lÕ¡vBooͤeÝ@ÇÛ¹vrj¿õ[¿®Q/ðb0iXBqÚ¼£i[dÉÃsa{ó0 @G¦Þªë¯¿>\J’à>éK!¼ý¿úꪆç,©èn»í¶ |ßýîwGÏ „íëðÒßj#ôà™4T;ÀÓJO«†cš¯LLÊEf<€Ó¤íͳï;­ü6 ùë~Nýç§œõU m¬éØ÷V~«:µzð¨LÒACNë©C%H€·ôº%žû–Ô$!Ý, ¦ñâå2.Ú›W‡¶vpðàÁð¯ú2mYá%AëÒo|øFg½µ­é‘“ªµ ´rW;NdUŒ7-uxŽUþ Ô²vÊÓ†»lêP šB–²‚§l’4€´°Ô4^<Ôó¼ØÞ<ü[DnÛFuÈ£¬ì‡¿úÞŽ³«ey)ª#lÕ¡eUé+@§™UäÁ[“'l°Õa’²šÄó6JìMêy†M2švTƒû+jÛFuÈ£¬ðò SÒÜ÷ÈãÎz¬Öô<=¶êP‡²ªìÀõŸEäaÊŠiô.Ø`«Ã¤e5‰ëÛÀƒ1I8¸ˆzk‡ÙàÍ+*¡šm£:äUV˜–#˜h÷“w:ë³êu“aÛ¨u(«J^:Þ,s%;Ý<aƒ­Ó–¼{YÄÖÇ É$ƒ„pœ¢Â[ö7.‹òæ¶êgYé´4®zm[“aÛ¨u(«J^AïJÞ¡Ú$l°Õ!²Êò’ñõ <x°<ççK2+o`Û¨y–’ö1çÚW^|ËY¿ÕòÊ“®"lÕ¡eU¹+ÀÃÁõÐH<"E}½À† ¶:äUVY=ʾV¤O±§Á(Ò›Ø6ªCÞe…å·ÿbÝYÏÕ(ôH¨CYUî |“Ùgõaƒ­y—Õ$£rG¼xy¶pa{ó0±m‘Þ<À¶Qò.+Ôµ?:ñyg]W+:ÚRfØ6ªCʪRW�o‡ë‘´Yxò6ØêPDYMëÙ›…OQo¾bðàƒ†K‹ƒm£:QVþ•ñŸC+2wºì°mT‡:”Ue®�ÞŸDøYuš lu(¢¬P/ÏM˜‹‘XÄHp¶7S`íÍlÕ¡ˆ²ze÷§Îz¯/vSaÛ¨u(«Ê\7o6ØêPDY!E`¡7ë°Õ¬½y€m£:UV®º¯F¡Gª@ʪ2W€‡‚ëa¡oß<>«Ã[ò.+ˆ5W]g³ôâ)ðæéGçgù!r¶êPTY¹Ú€žÙM…m£:Ô¡¬*qáÁpaÌ@Œy%ö²ÁV‡¼Ê õ1íÅÃeOäÿ•1/n¹å–àÚ!ö0¡í¬`Û¨E•UÚ๦¶QêPV•¸ ®°çÍ› LÿÆ›aÑ#GÁ[ò(+„j}rE]6Pæ4³½y³džmco«#‡d©}Qª’óß?çýr¨ó‚ì…ˆØ{A:‡öË¡Žl\);E•UÚ QSa¿QêPV•¸‚q!²Ç_¹üãpÅ9PÙJ°·-½N[Z ýý…V[Nu7e×t$§Oœ—ÓÕìtWeÁü†ßã¶_Zí¤ƒõÃÝÅHÝ÷|À¹LÃ$¡ZÛæªRo>K5Ko˜ö~OÎÙo±-½‡Ê'eosM–÷-ÈòÚÆ¡·!kË ²oyM6k ôæ‘nSæ×6Üìm÷ät縬,Ý$k›3œ¶"•·e»÷ˆtÖVdidߓݦ¿)æÅ®le5 •¸‚oeàzH¨Ír:•$•¬{[Ò]]6çnÆêºl£ñì^–µÖ~³lQZû뮬‚M; Ù\?Š8k{%˾g̤eoqZôµYæçÍÓ›æÙ6ªãÑ{K6×ʾ…–»ø”¬¯Þ%ëçäÚËÒ1éíöW_š¬cçdcý.Y]J.k™±¤Ý›ÞU\TY¥ ½¦Nš\ª~c»#-s>8§r½Å +ÝN‚b_ìJUVR‰+(óÃ¢Š• ßi ñ–Îö Uô;ǃñ7ºHè]++]uIÙ 0jÊ´ï3IYA˜åùŒYÖÕ›nº)¸æyxó@Åó¶lunuzÎíðl¿ý ¯³oáVél½Ý_i °¯" ÐsSÔýö°ÏÈê õžç£ÅÔ¼xUº+ךûe÷?I ôèí^Ê*Oïù<¨Ä“˜B/_®ôÚ²hÎ{¸ñ˜Fµz—twµ:Zwa5¶| �Y.õ,ûž5YËê5ÓfÍÇC*ArÙy³ IéLôwÓ÷É^À›‡kž‡7̧mX¡žØÛýŽlv;²¶rS¿^înHgžg}ù0¿wVe žèdgT„fæzÝ+Ç?ŽÇ~iÁ1;Ò¼Ö¨û˲ÒÙÖp!²…`Ý…Ö Ù¼výÎwåЊ´Gm à_¹UVÚ§e3ôöåAQeE¡çf>mh=·ëï®ôÚKæœæqq¢© ÇAñ˜ö¸Ù1ít1(«ùõZùP •B¡—3¶H[:*ÝmUoÉæéG­·—0¬„õ’ùWzÒ^ ÷aw¨Þûž=YÊj’|<¤<iêê¸yõfUWÕ›·`ÞrÏŸ?.-Yîw>Œ õX¡t[Ïú/I»÷zÜ«ÖêÈv°!JE@ˆôõÁþ£:oD^÷h ÷-’µ sD» D/HƒŽci¥cDÚ Òi¡Aöºl¬2ûŹ!g:¶�TÔkÎx3 ÷†ÇËœk¤=»ŸøÎ³ášÍ¢¨û|‘Ø·´*MÔ­?a½ ,O‘˜ Å_ôäN òùð"ìc¿´Ö.÷_Lv7¥{ª-­EÔù7úu:é H2ò|ûD¢¥YÓciÛ¡øB»:#g~!^À¾h^Œp-Ø.Ù^/hºß(ÕÈ, ­t8#•P)zycuN°˜ ³ˆ�ŽñQBÏwßsÀ§¬—õ¶ðÖiî]êªíÍ»þúëÃ¥³Çç~犺„GYëëò¿“µöQYû› ýº½°"õûdeí)Ù Dœ]×aU걎D¤«hΓÕÉím¯Ë*:³0ï. Å/PýðT?TÓÊÏëŠØ0TÛß>Ÿü<PTY¥µ‡ÿá_ ×l…Üo(Î׎è%}ðân‡h#1…çø¶ÈIzøÔz¬µž/F/†/.Ø÷ºlõŽ…}À˜tÔóµBÊÁ‹ÏÙÕýê:£ò U¬Âñõð™`_ÏNør^‹¾Ð…/yÑ=1m¸²š1•¸‚´Ž—ƒ1&A+zØH\‚,òLÀë‘&Ù ,éíóÙ÷H++ˆµ´y¿’†AöÔ>®ul›Å`Œ2xó@Úý.ÍéI„zÂúº°tHÚÝ-#¼TŒ-I«Ý•í= _Yq÷¢´Oƒ *‘V‡ =m#–W1zvžÑ+¡g¢¯Z/A“&ôfù¥–2‘ûý§Ý‰åLGÏè¤çÎ~ ²óó>'ëk÷at9m‰ô„à^Sô%(ù‚cþ>þ99ÇìsÔ4@>çëÊÏZÇõòe{áMŒŽ¥×38wMÓè ;=—¸ žÏs,_*qia4ÁyQ©J°Ó“î%[°ÅÁí·<û0”Ÿgÿ¦ =Ó¾çø²‚§-k>^ò»Êq®õÔf1½ ¼yx¸Ö„KçÃ\ÚÆW�Øê¡UÕs¦`T×­uÔS0Ôa�­ça§‰C+×ÏåÇ\‘µÓ½øhõ9STY¹Úm8î{ßûÞ™}­¥,ä{¿­ºêð†EË´Æžç*¦öKkuMºNÏš!¶íƒ|ÖhÖ=ÞrW{Ei8׉çùµI³Èö>:OE™ŠÁÁ~‚¶…¡—e/xØÄyl⳨¶1K*qHŠw=$l›×|LUªWzÇäÆd6ªÔvãêá0Ëíœ%½šßÂŽ2Û¾çè²JNÈfl®lšçÞ¢¸ÃuBìAôÍ“Q÷»8ô!o‡_ÖChñ9ÐdðBbå§õo62uùâ ä̳}±··}QN˜Î­¥yF -iwBn0@Éö2"·è‚ôjîÑsµÛ‚ûeìþûï·hùÞo­Ïv½O.s‰+Cô,WoVB(õWl˜x+ÇåtOóä@Ø^>(Ë+§S&óö9ßñm2Z²më¹.ËÊÚ­v溾Ñ‹YŸù–Õ|¨Ä 4æzHØ6/¯^u*AvÊý±Õ€d§ù†€7ôצvȸï9á*«ï™×NW}e˜jÅõ?×ú¶áXE‚0­zó¾7®û],ú‡€{V6Ï\ê‹­¤‡"ªÛ*¼´A]¿ Áv‰NewSÖÛ˜·õþ ¬œzʼ ©øCgrJ:3Α°‘" ÷Èãå|)¢¬ÒžÛýh/ðæáØ0|“¹)ä{¿5?nbÕ¹è™ìWÖzÑóÙnC‚õÒ¿3hcÚ¦¼¦ûñ9_í;,á§y­Ö1†Î?ÊOäšö{&hoƒ>i±Ý3)oËö¥ËæZ†q¾e5*siÖÂË2‹ü§$Õ©ƒ†¾´ò™ð N˜/dçJ ÒG*,¯<:‚)6:*˾ç‡]V脲N‚œÌdzyúÇîml+Ú댸F Ę·7̾mh=Ä—[ E×ðüpçfåì#bû55êXjínDƒ5ë˜:>4’ëÇGbêêÿŽ/ÅtJ$ò@e•öò÷É“'£I½ñ—¦ïýNˆ3ä`×Ãèåâj+hïV$”ÌKÐæß„âÈònGBÌÔé§LÛÔH/Y óÖ =uÑHX+ëm–ƒ"JÀhà(UB_Î̵D£pík\ë¢ÙþÍ Áÿ«Ne®À'¼oˬ©L%ØÛ”Ήž©øFÄõ‘Sê0ëx"·µËF|úÌwßsç Ö²N‚<Χ©˜//¹yIÙ¼y@ïw]Á4öª¬v.H¯{:Vï"²QViÏl=äæažG¿,/(³ ïû½·}¾ÿ5• þÁÃÜ{—­Áƒ— „àšcŠôƒuë9åºi?б¡*Ž’£tG“~¾‰iW‚¬5éÆ^ ç!9Ìv‰4Š>ö‹WòZ¹å ­c²nއýTJ]ψÈY‡pëP šÊj’‘µãFucÉA®AEO«RÆÎ²Þm#ìd’‚N;Êä¤f¡ˆ²zþMóâh júò„¯¶èt@×]w]aÍ©wÛ˜©ƒ*ò¡eU©+ðMšOކ,6Øêð‘ßþ×N6ÊÒÒàµ?Lšüõð·¢aØåÍ7ß.?õnêÅçá —öçË[þºFÉ)¢¬’³%à«1ø:ŒŠ¿-󻢃ˆ®ºê*yøá‡Ã¥õ…ýÆ„/R×Ê¡Îsò†¦RÜÖêPV•»ßÛ¬Äl5@xõ+/¾å¬+.C=Ky>uÚ¬¼yÈu*Sè«ömá¥N;ž£äó%R*@e•6‡Þë-3 ÞBäá<Þ÷¾÷Õ~º•Ú·¢æÑ»VVÖ/öCÑ3˜‹²eU¹+@çëzh¸l\È-/Ø`˯'X nÔ  €ß|ÿÀQ$¶7¯lÉìlÕ¡ˆ²rµÛ’ƒ“n¿ýöà<`¤QgØ6&$Ê5DΞü+–:”U%¯ ËwH±n‘°Á–›¬"/-Ç3KŽºãc”Õ›Ø6ªCÞeçj¶%Áô*8µ:O·Â¶QêPV•½‚´ÉimC¡¨— ¶¼d©#°´pј–ß—ðæéÔð†” ¶êwY¥µ•Qy«ðäá\ÊZ§ó‚m£:Ô¡¬*{¾9Rjèx‘§•7l°å$«ÈæG]Ë:çÞ¸ýår˜Ë„ú±WFïÛFuÈ»¬Ò&"å9G½¾ú꫃óAÎ^]§[aÛ¨u(«J_AV±Ã&OïlùÈ"òÒ<ol£FÖŽ²¢EÀ‡àÕ›wäÈ‘pi¹`Û¨y—UÚsy\Á¨[˜1ïï5®V«:•¿‚IÄr¬ò 骴ùÙ§yÌYæ.7è9FY½x°Yˆ<Û›+k.“].´ò[ž¸Ú†mi_‰Á|z8' 4BŠ!drjñÊ=‰Øƒ!O¤è©/Èl@ÈâÉ%ò° x²zñ`E¤¸¨‚74—´OŸ¡m¥­Ž&oÂt+„I-„@6oÓ(ƒç†‚¯ºdú.‘‡¿‘W4‰ÀK ÿæ :¼¦~žTƒ´Y|§ÂtA¨ãx©©ût+„Im„ž’eꕤÑÃW=l‘7îsKjÉMüR Çž•Èö¨DzóHIKyðòÊžn/7|©!d2j'ô�ÄZÖï™ÚÁ‡\«¤×‡” [ä©{öH?Ôü=©ÀƒÁ8Ë:Bo);h®¶b[–‡»ï¾;ªï|±!d2j)ô�8iCüÓ "�û˜¥Ç†ø3*\ë{êɃ€µ¯å9˜' ¶7 !eíËÕflËòrd¿Ü „[×éV)’Ú =ò4^5ˆL¨;KMÚÀ [ì}ëÇéëû„ÿ< 7T´v曟gc>ºé¦›Â¥„_j/ô@Þ=Û(ú拯h;gìë9ˆ|ÂùóôìÚÞ¼ûï¿?\JH¹H{©NûúÌ(ôS rþüùp)!ćF=õ¤#sGóùfK^ž9_CÇ5iç”ðÞ©7ÿrª RF=qµ!Û&}YzòÉ'‘‡6�ÑGñ§QBOÁiRÁwþ5÷r<}ðÎ#« ÌRä!¯,^[;!ÓL²’5Áóqn¾ùæ  Œ‹p.!ÄF =eÁ÷Ø¡—4ìS à8i3Á“ñÌJä©À+ É)&èÍ#e%m¦ßiUFñÒK/E¹zl „øÓh¡§@ˆMò¹«¬¦? “áÞÑ Äƒ8:‡Ç3ˆëIMó.˽y¤ `ÊW»²-/Ç`ŠmwÜqG¸”2 = /tö£ÞLÏ唨orÀÔóaÓ´°/î9®×¯—ë>e8fY½­ô摪æqÇs.ì|Ux÷àå#„Œ‡BoxxÙ£È.¤„&ò4@œƒ†«:ŸŸŠ9õÐáº`i#ôŠ2ÜÛ*  Qï:4zóH™IkËyNK„¶ !\äíBÆC¡çDÁ,B»YLÅ O¶GP­HO•}˜ž ÷ ç––³3Kùàܪ’+i{óøQwRf|¶y¶;´nå=ïyO0"—2 ½ À1•ôôUÉÔS˜Åªz­wUm{ó8”™´—`<sò¦ÛíFÓ­\wÝuáRBˆ ½)¨ºè«£¡S©’çμyš¢7”´3W;´­¨ANøJÚÈUW]%?üp¸”’„B/'?‡Þn)üfgvðÚ!|Töœ;_lo;0RfðRåj—¶õÒ…ïÞBä¡­\}õÕ|!"dzp!„DH™rÕÊbÓL™‚m_¯‘°³Aç¥Þ<~€”´g^|‹äöÛoÚ ì~~'z3oµ:há^x¢\Ʀؤâ÷­ŽO¹å–["oò)+H]qµQÛ°N‘؃–`ø›‡BoÎ ä‹°# >4ÅûgaÄ×»‡xU§˜ñÞ<R%ð¼rµS5<Ëf¦[Q¡‡%BH ½’¢Ó–hÞ_ÕE ŽàE(où?úißËéãP+Ú;0oÔ›‡)#èÍ#eÆg^^gró0h m9{xa"„  Ð« ]ªÔp°š *µ¼Å!¼jÉcè¤Î0ˆ1=¯4ï~÷¸‚}×tNxôæ‘*€6ïj§¶5Ã^Œ´ý8p \Jz$ÀG˜å Ν-jz†2¡SEЛGÊŽ7BpÖ\ýõlC„8 Ð#sÁw0Ê<:ŒYc{óÐYRf|¼yxqœ5v;âü“„  Ð#3ǧ£€5Aäõæa¦ÿóçχK )ðħ¥[ c^hž+Œß‡&¤…™)¾ƒ/ê>Š/„~ʉÞ<Rv+ëj¯¶ÍÛ§pºB†¡Ð#39€®Ž!iuŸFÅÆöæñãì¤ÌøäæÍÓ›§`âdz˜P™¦C¡GfB–ÁuŸFE°So!eÆ'å¢ m¹yø$Úæ¥ät+¤éPè‘™à›—W÷iTlt” Ä;#Rf|¼y³š Ù‡|0ú._¢HÓ¡Ð#…ã“×kÊà €Aô摪Pož æ£Ô)N·Bš …)|ÞÍÕ)$ Þ€& ¾Pì9¿èÍ#e¦jÞ<ÅN€èãt+¤©Pè‘ÂðÍËkÒà `ÏâOo);`áj·¶Ís¤í8n¾ùæ !WÓ­¦B¡G Ã7/¯N_¾@‡—f‡WÿHþå¿Y‘ÿù¶ÿM¾ýì÷Ã- )¨¯®6k[½yÊK/½ˆ<ˆ½÷¾÷½œn…4 =Ro®N!ieÏËSq†<C˜~ßWÍuMÓXò[ÂßÞé÷çÑ$Ï'™?>_°)û(ù;î¸#z°#GŽ„K iz$wÓ“6{>¬,“"Ûbª—·© „P¦$Eà3¹9ÚpÙAn¼yÂ…—&A¡GrÂÍÇ �¡2‘AaäsžU4Àïíö;jŠ?2 h›>/kU©_ÈÏÓ.òöiz$WÊ–—÷êO!WŸŽ«Ž†* Søð¢àªK¶•=íÂ^={º~…†4 =’ð–¹:„¤ÙA l  aÓTa—f~(L}S†Ð9)xpÕ›¤¡­U Œv·§[!¤)Pè‘\€`ð™J¥ˆzè˜àð9>mØàí„8®ZÇMŠÁ'¥Þá*¢ß–F_Ï ¤ Pè‘\€ÍÕ!$ ^¿<À~ î|:¥ ¯¹—Ó†í #–)úš‹Ï� ¼PUÕŒÉÉíéV8‰2izdj|¿~1m^:ì#ë Šó3 á~õò+rΈJxÈÔ.½¾'\|Fþìß ì‰W¯Ä~‡•uPÄ{Ù§Î ùá;�#¯—µy)V ô`wß}w¸”úB¡G¦Â·s€ ™IßAyÚÃÏÿTzæ¼ql„ª zÐÉ©)WzmY ;Ž}û®••®¹!!í§Šï^¸§öq ní©_ŠÊ=¼0"ô ¼§ôòÕ¯<Ö©:˜4YÛ$Œ“(“ºC¡G¦ÄÕ!$m‘�a•WÞݹ1âÇ@öý¿{Aîÿ?ÿ“´/¾,½ö’ì[^“ͽðdƲ'»'¤µØ’c·Í_}ìù»òîPT BB„A�º®-oƒèåÈÝúºä*oÛð‚zWì°[n¹%\šÂîeYkí7Û,Ëjw+jçé¼-[»äÞ ™zdb|:X–ð:ˆÇ¼½V¶· ¡Rç븶;ÒÚ·$íÞv_è-¶¥ç%j^”NkI>Ñ>"ËÖ6vg2«DîwÖÁ)ã„°Ë ,qÿHõAð©+h3u/aï{ßû‚¶‰ïN#wo<oÉæÚAÙ×:%ÝUYXX•ԻғöâÀ{¸°Ò•8EIÅ Ð#ããEÊ2• JaIœçóoz“®¬,XBÏÛ£7L‘Þ¼,¨çô¸òzlÂ+Ø'=|Õ/®²µ /GuÓ­@ä¡}^wÝuáÒQ¼*Ý•k¡özªqPÖ6=ß`Oà’´Ž—í Ÿ'„L…™„ ]‚m¾¡‘¼B´0õØe {²¶¼(Ëkgd=|¨Oúö=ož(ÍyÌóžcÌá«h{®òLZ]Åü‚6zÕUWÉÃ?.u¯ý¢,¶{òV ôðBhr*Wd»sX>q—ܵ¼ì¹ !ùB¡G2±àãyKe aàãô1ˆ»éóÇÂ\»#ЖŽJwÛ("Ùí{÷ZÙŽý¿ÿ�O†wñMÛ›‡Ëœì /êÓ?ÎOôA`ûˆ{2PNßô(÷,^ùª-DÚêÕW_=fº•¾Go ô2xô™3z$3xð»:ÛÆuè`|ö‘f›Ó‹»ü@§a ü ƒg¯*@ôùŒ¼L3”K–¼L2´ Ž›~eYwO-ch{½ÿþûƒ³á—³0Goù¸\\Ï£GH  Ð#™ð õŒê6ôñŽ3ˆ‰²yŽTèÁà%xç;ß)O?ýtøkuÀ}Í:˜Ãe('z÷ʉ«»Ú%Ö«;uÚna¿üË¿ì‰ëuÛŸZé°t¶¯Äþ?ØÅP-™?z$“ŽÎˡíËì]°…Þ»ßýîèÿé#úÊ :úiÂëi!|2[ІF½l·åÔaÎ<_>þñË;ÞñùÕ_ýÕ Í<x0ü…êC¡G¼ñ€!˜¡ÕI¿þ€©*y_¶ÐSŸà] ø¦êô´¶ˆ©v øê²Un¿ýö@äÁ¯íöÆo %¤úPè/ÆylChÖfš)Sª–دBßÒüЇ> ̨í“zø 0ê:z³*øL¥kBÈVAèöæ›oŽeÀ0Ç!uBxáãÍI†z|<€.+{ˆv*ô>õ©O½W &Éáƒè§Ø›¸ï®2IZ“B¶6>ø`$ô`„ÔÖf’ D—«CHšŠ³Ióñà)Ò}Ø\Zyí¶Ÿ<üÝ×å9Î8*w¶ MúxÖ±ŽïK–«>ÐÊk¤¹°ôI*>¢M` CÉš‡Î%ò僩: ¬Pþ®²g{³Ã7ÜžÅÛZç6ZåT.ø<m6,}2Ÿp„æÒ!ìãZg”JÒ烩:hY!œ›UäSì¯Ï::šm´:°¬š KŸŒÅ§ãVo\–p-¼xã:y>˜ªC²¬|þÕ(öŠâÛuÏ“_VØF«˪ٰôÉH à\‚m‚ ‹ÈÃ6iy@|0UWYA¼ùä„©%C÷dz²äåM2@†m´:°¬š KŸŒÄ'¯tê®ß\f‡yÇÁSuUV¾#s!6|t²äÊN*²ÙF«˪ٰô‰Ÿòë|§l€!¤ç LÕa\Ye¾/$_{–6™„m´:°¬š KŸ8ññÄüĈ<ßNœ‰Þõ%­¬²ˆ½IrÅH_û´÷šm´:°¬š KŸ áã¥C'áë5ÀzYჩ:ø”Õ,B‰ÄðBåÓzOÙF«˪ٰôÉ>îeO¯Á$"ðÁT|Ë ÂÂÇSŒuÂÍ^Ð|À@N Ûhu`Y5–>‰„xWÇ`¼y>5àÁ™>˜ªC–²òÍéÌêo:Y<¦:¹ù´°V–U³aé“>Þ¼Wê^ž4tê“ÂSuÈZV>9dðê|ç.œÔÃî‚m´:°¬š KŸD`p…«s°Í×›7í$¸|0U‡IÊÊç…bÚ:ÔàýtÝ¿¤Áã—gHœm´:°¬š KŸDè§’{m¸“Pû‘‡7oš­ÂSu˜¤¬"–O–G=ª;¾#l'yl£ÕeÕlXú$�oúÉŽ7)øàÉóùnfÊìL;²Ù=-§Ú-Y0ÇÄq÷í[¥•ãÒé< ÇÖΛ5 ÛiE¿'l¡%íNO¶÷‚ú³»)]sŒvëƒÒê¼.¬¸“àS—ò4PW|óaEÜÇIËÌ–U³aé“€qž|X'mÔd^9@Å?˜Þ–íÞgdei!8ÖB«-Þ¶ôµšùíâ}ÒZXŒ °+=i/BÜ-ÈòÚ†YwOv7N˜õúË–ÚÅþÙ¥ÓZ ޽oßAYÛ¬nœrÒ²r½\$mš }ëŒÏ½S+*NñPXV͆¥OÒFì=nÄ:×o¶å5Z±¦ÙX;zðŒ@[]wxãޒ͵#1¶·¹&ËÁ6¶0³[«#ÛáRö¶:r"qyM63{/ËÚêÙ·Ës¸öIÏ#-WáÛaÐÓÚ«Z‘B™â¡:°¬š KŸxM² ¯�FÛ^x]äüˆ>xò¢¸ÓÛ²Õ¹5 Ó.êÈÖ‘råÒ9·£?îÉNwµ¿ÝªtuùNWV&òè]‘íÎáàÛ=ó—/{²»Ù‘•¥ÅЫ8/çk˜ô<|¦ó!²ˆ¼¢Er5ÄàÙks±´Œ%i÷’­ØJïÈø2Wpm¤¹°ôIðÍZWG¡¦S]$sªÎag ¿JLݰ{QÚa¸6[ÈôUé®\l·°Ò5~G¥ÝÚß_Ö:!»)rgo[z'Vd Ç^ºUV‚m¯••®¥­uÝ+Ç?c†ç /^x¼¾Ù¡e+½pXŽ¿ÍˆR 1»P¡6]Ÿ:µ&KñNno»'§×ÂsÞ·_Zk—ewè<öM•c˜‚džÞ�ŸÑÊ0ˆ<ˆÂ"A¹Wxç†u5ÑÞB®ôÚ²¿uLÖ7ƒŒ\ [(ŽkOå¦:eEŠ€¥ßp|<**àÒ¦UÙÊi"VP̃ÉòÊÁ²„L÷6dmYâÀâ¹}cØÛ’îê²ÙfYV»[rEÃÀ¶w0Zçi÷^œëb[z¡û! ÛÛAäu1z#/£Ë;¢×Þƒ½íuY5â³³­~ŽÙ쬚}.ËJgCvÕëz4ìóÀ}˜†4ñ’׿UÇWäA8ç=ÂÖÅ´å>;l±vتã}ö¶Ï˽íÏ~QÛ{A:‡ðb3I.-òx?#«'æ+«SV¤Xú Çgzí4Ò</yQ̃)Ɖ…o¢¶ :…x~Þ—X„‹ûÞ@ƒ §hûáuàeX´·±<ƒeæÜ4×OÅŸ^KL &ˆÖ9$kØ“Á—.ɳá¹Ä„ctnêшŸþ†´:sÓñy°Yˆ<0m¹ÏŽ1BþÖ½Òç×¶j½pù¡/K“Ä|©NY‘"`é7œ´Q´ðâ)®ßmË“bLö?1¢X^»xî^2?ïŠåö yØà©Ã ÕýY¡ (¤¬ëè¹Úç©ác;üô†ôÚ7˜eVŽ`ÂûæÆÎUì{£ËÕó ®ÕˆÚ ³²­ÄÏcÚ²J˵ë`ñyS+j„­‹êˆ«ÝÛb )+mén'GÙ#ò—å+7íÄ~¹Š­3”*/žŽÆW³^·/ʉxî÷Ë¡ã÷É'°Þ$²2P²"EÀÒo0>ópÙ£h]¿Û–'E=˜ÔKæÌ·‰YR&óó Ѻ–HŒæº? ­ZëhGä EÇt-Ó}%½oã°FGÞ?ë\3o帜¶ÃӉ󘶬Òêa“…^YE¨ŽxØ5/CKýúµ¯-é9z³m,o6^l®èËŸÝÎ}R%Fx߃ ³¿¥cÒÛ}%z®d•ê”)–~ƒñù>¦Ðíúݶ<)ìÁdçÚÅÞ¢m“µDÛØâÉ!þœ :™þzæm¿wÌtæ8W/^–Þ³V(8ðÂY똎éâ ä̳?œŸuÞƒrè1ˆ<ƒ¦Ó¹ø7ræÌs¦ìmÊéÓ›árõj'euŠ1àŽlž¹$Û{ÃÂëNê<Ë£ìé‡+6Œ,"ŸA›5Ó–ûì°êtPgQço =çq†Ò ¢é“ϯT‰è™a ÄèåM—éy¥½,NOuÊŠK¿Á uuj:Cq­c[ž÷`²Ã*û¥Õ~T6ƒüÇ[€ât¿±òÜ\Ä…ÞÛ—d}í}¯âÂAY9õ”Y#ñö¿»)ëú¥Ç:‹í‹òÆæém¿œaãú±èÚnZùœ\råÁ±Ø’c!)Ãë‹:)뺯–az‰GƒãÙ¿ëyàÿÓÀÐí0YD^²ÎŠiË}vØ//ÇMû;"GìT…}y³Ò Ô[½\y¦JèvQ»²^Þ¢v¥"Ò#ýcJªSV¤Xú Å'l›Lêv­c[žý`ŠO¢ÖSvº›ý¸¾©ÇÖ„YÞ4˜#ç/$ò�,­È‰Þ–ì|«ŠÌø:kÝ Ù ¼fö:Á¹`Oy –ee­+›[ëýfiU:CSEôÙ{ö¼œÙ¸‰ÉØþÀî†t‚"\Äp'y`ø<°Þ4¤ ½¦ ƨ‚ÈÓ–ûìxߣ)‚Â_b$RLK‰¼×Qhu(LëJ•özÛç=?´Í[ú¢¨NY‘"`é7”´°-¼}IÒ&jÍs¾3>˜ªÃ´e•öÍÛ&}-‹È›·�®NUÏ™å…såïª.Jƒ@huC.õ^L‹46UbàŒÄ_ÊÕBõ Bø—ΜG¼Ÿ§Í†¥ßPÒ¦Jqu®iS<ä™'ÄSu˜¶¬Ò&ì†øiYDÞ,&DN£jBoÜWp@Lè½±%½õ5Y <úƒ4¯T‰HÔÁë·ÕÏm êx%>ÙúMGäÔ¥bóø<m6,ý’*ƒ¹æâ‚s­«–ç'—ø`ªÓ”ÄŠ«.Ù–§§¸¬TMä* ½Óí<¾\c¥Aœ¸(Û;¡·ÎNƒðI•ˆÖ±s€!Þ¥•5én>zý Éû[Ÿ§Í†¥ß@Ò›+l |òúòš4™¦ê0MY¥ÕEXDM‘TQä¶ÑêÀ²j6,ý’*÷É)×ú¶å¾åƒ©:LSViyŸuˆQU‘ØF«˪ٰô:Ši>"Ÿ&Gy³ÂSu˜´¬vL=K«‹uÎÏ«²Èl£ÕeÕlXú Ã'?oøR†kÛòø=LÕaÒ²Âüx¨/çŒØs >,«kضê"°V–U³aé7Œ´©,ÒBe>AØ´¹z|0U‡IÊÊ%t’‚ožsĉÏiÔÊ*ò�Ûhu`Y5–~ÃP/Ê(óɱK‹0tPÓ€­:–¼Œ{YPÁ—×Àž2‘6E‘mey k¹“ùÁ²j6,ý†áêPló™ÊÂ׫—G—ÔW}±­ŽŸ=«“ȶЧ•ßHsaé7ˆióól|¼z0×||¤¹ø†-ë4w[š'ݶ*ˆ<BHu Ðki àY½(aëÚmðüQìà;�¡NŸ<ƒ`óñ`ªQäBò†B¯A¤yᲆZ}<„0Š=â+òPWê"tPç)ò!ó†B¯A¤…0uJV|C¸{Í%ËT"u Ù¢®û䱪Õu„1!dþPè5ˆ´Pë$B,Kh _r¯H:Y Ôeð„-E!¤,Pè52W'cÛ¤dõ^äõ™4Rn²Ž2­>ßîµ­Nùˆ„rB¡×Òòé¦íh' U1©ž`þ»¬¹iu ‹°…ÁóG!EC¡×Òò¤òe{èà' “ò‚Ьu ê‚?Kú‚E!dVPè5„´Ay…S³Š=¬ËN¯ú@ìdù´¬"õ"Rf(ô¾aëêtÔò$‘UìÁÐYr F5pÉZÞ^u‘—õº±.ë8!dÖPè5„´©Uòî€&{0x…ª.�fÅ3["_xZ䚯ˆœµ¦ÆyÓ”õCß9l–1ëêÌ8oÖŸ~SäýŠÜöÝøò:Œ2Ä{YÇo÷BÊ…^CH /[–O?©A æ2Õ†"gŸ¹ç±¾àP;Ð3Bèy‘—Íù3¿ï„«?ó·ñõ\vØ«³æšæMì\-¡·gÎícÖù!ô X|BÏœÛ'Í=ÖeUy¨ÓiÞñ¤a}¾¼Bæ…^Cpu@¶IÖшj˜÷‚o’Nòåö=Zב÷#vÞ —x¼N±ˆ¡³F4%öɈ9üö1#¦öÂebÖ¹´iDb( Žš}F¿Í #k´…žr6¼¾<…<xβüÈŽå «ú´:ðRû|ö϶:x/ !Õ†B¯!¸:!5xûŠf’<.5l‡P™oèëe#n Èüußk7Š@Ð9„ÞŽÙþš¤Ð ùÁsýß\âjæÌHèAàŒ믈Üû¸ÈÇ¿ãø-4”öQe&©¿tA)z ÁÕ©!¼: ÐÙ§…ÇÙù×úa°qù„{FÞ ñsƹ´¼C#ðN~}X$zvh´Èü7/ zð¢Â7ÖƒeDÞÿý„ÈÌqF ½:„-³æãANò9AB) ½�åêÔf%ôßïã&Íö¨@€@ˆ$½|*p\"ÍDݹ …ÞÉŒ÷ ƒ'ŽŠmföÿŒCŒb=;¯y—ìØ³2¡Ð{Ù´äþõ<4<‹{ýåçD>i­·dþ¯æÛm›ßŒHÖß"ëŠ<`öæû"~wô€„σ$áv±?d¶³ï÷ž¹æ/™ãážaøû!ÝÆì÷Ó?.Ÿ<@ÍšcŠzYuï%!¤^Pè5€² =�–5©}”a?ð L#ÂlÆ =Íßs…|GbÖ;û×ýA *¨4|ÍãæÿÖ~°ˆž'BaAˆC#lN&Cì=„µ?fíÿs1ëý³ìQË{÷ùïagDÛ¡°ë¾(r0<ÖæÿºÞ—úDZ=zÏü`P®sxÓºf?‘P3÷ä¡ð|›{œš^[¸Ãß2×o„cŠ7ëŸ4ç‹syh+çÚLÖ|<x«9è‚R6(ô�¼4®ŽImBOA“O‡zÁcGŒØø¯ Œ�øê‰ÿ.¡gà°…˜¨K†’UÜX‚QPR¼Dá褸Ì(ô‚ý¬÷÷!Ï*ÄɽMf]k*ê’Ó¢<`Dè’YÏEk =Ô#Û›å›æºï1÷âV³˜ˆ6×õ½Xßé:º8¹¾.OŠÈ<ÀKCÖ|<º „” ½&ôæÝIÁ Ñ‘µsMšŠŸ{Ð1ȯ²sú’ÓDf‰%zÉu\áÅT̵4í#zvÂE£„ÑO¡S4ez¸Çßø¶Yö5‘ϸo0×÷ˆþÞC{=—é¶ÿë ýãØ¸ÎYï­Ë㪿Ù÷j” çu†¬ùx0º „” ½PfžÍ(Á÷Økñ¿GY$ôŒÙ^'5„x±Ü¿ÞÏúž–Øô+Iñ¦ŒÁºÆ²† UX¦ =m#„ž ž˜°#ô¾úDýû½Až™zîFZ˜_÷Ió¯ÐÃ~ñh¶uyÖ\BO—¹„^$­{0+¡OdÖB¨§¶“BÊ…^¨ŠÐ³±Cºç<=}]#î~BÁظé>3‚æè×úëB ái~•KDD9uF,mZÂ4|…žK䨏¼]¶Ð{ØPˆX”%H2‹ë œ–HÞ5¡‡rQ/é¸êÐ3×ï&–9s(ÂuBƒz\×9ΘG© z  ŠBOyÙ>ïA*RŒ�Ð0¤s=˜µ®- !bÛù'fùG.‹üÈŽ@5¡9dIà8Òœ’¶Þ«/ŠüSûÛ"ÏA‡pûSæ|7FIQ6$ôtÙ˜u_l¯(Äc2  zÖ=(RèA¨©·3‹á>BHU Ðk�/¹:,µ2 =× Ó~¸®AíËßí€8H&ˆÙ¡àÌ ÷›—DºÖrL)²nó¼Ð÷ ©Á+4dF¼üÇpJä± ýn¶}Äì÷ûF9~*\ïS/÷˦^M=§XHÚ¶gzÚ>h„jìºôw#láí³sö¾þwýk³½WO‘¥^ÅLBÏ ë;Z(ôìߊz“ ¸ÀúÌÇ#„T ½†àê¸Ô†ªèlÇybþ̈"„)ﵦ‰Ù$BÏX$$ qåº,Ê4ÛÜföýeë7œë‘p?iŽëòFB¸}àœYÇœw´ÜzÿÁˆÃäúÉk³CÛý¦9/#0õ7Ì™÷»Oö¯÷ëÏ‹|8\Ïžc _ñèfº.¡ 6–Ì+ Ä›YnçA!ô&p6Â|<BH¡Ðk®Î˶*‚¹øàmryút*ˆ„1õ§¶à3béO/›å#„^ð1~³ü_7BÌCj‘ ÷m &§™ß“ [2ÇŠ„Ÿ9/|N Ë?ú„ÈçCQ\‹C´FÂ͈£¶>Ño–ˆMzïìs™Yÿ´3ÑðÞm!5´^bš\A8ÛlwÎá`^@c¦MN¢Ÿ¨sÍû†°ÙǨp¹Îg˜œ‡p¨/“„jëðuBHs¡Ðk®̶:td…Â[ž4ë^#nsˆ,ˆ¸?6¿Ùе[7éa3BêÎsñu\Þ¿˜á\Ì:*>ƒã'¼{A„šóú(¼^áº.1é:WœÃÿkyí"3"΀ñy#ÆTäÂþõ·Œpr$ƾäaÎçžïŽ{¦Þ`2h¬£BGù†¶%r“_çÀ¶gÍvš¯gïÃü}Öˆzçò„w0 Âë“„jñ"A!U†B¯!¤MJ ‘T'ÔÛNÖ¾®†û�!ܤï°NêÅÃ6Ø–Bª…^CH¹Z÷ÎùUæÍ:_ZU bÂáØº yPÞ“ˆ|xÿ!¤.Pè5t^®NM­‰ÄO]ÄDÝf(êš>h`R/Da1!¤ÞPè5�Wç¦†Ž‘ôsÑÙÃà ñ îͼ… Άs‚á)J†Á½™Ä‹‡{Ë„:B¡×FÍ¥wþ5‘ ¯‹|ÓIÞ"YÏ*¼`* ³š½˜îFñáê÷¤b÷œBê …^ƒPQ÷øˆoÇRT*¡æªÏiaȹñ!u‡B¯AÀ{äêðÔà¡"¤*LãŃ÷•Bš�…^ƒHy‹ß );ð<OêÅÃ4C‰BHS ÐkaêêüÔÄNH™Á ™´9!G¼xLO „4 ½®Ð6æ,‘2/\ZêÁ(£Òd(ôFZNæ”#¤,ÀOœ«®úGÔBš…^Ã`ø–TÔÕs̉ãˆZBéC¡×0|·Mú*)³jÞù „½x„2€B¯¤%³sô-™x q ÷ýÒ½x„2 …^ñ™š.!³�yxÈ uÕCƒä„â†B¯ cuu˜¶qP)ÏÇc‡¯º¸–c{N™B!£¡Ðk(>†ÁHQ` …oHV͘©Vèu&„t(ô ÞíNÔeèL É„X'ð3ð­f"„(ôŒÏ´ìTIL3á±æÓûé^¸CB!^Pè5¯¼/Ì"“’‡Àc˜–B&‡B¯áøt˜A²’‡ÀÃK=Ê„2z Çge§¯ > žL+ð8] !„ä…ñú–(:_ŽÂ%£˜f…êFã2U€BòƒB«ÏTøò�;ab“—Àã|x„R z$�¹P®N8iÌ×#dð¼M+ð`¨OhA!ÅA¡G"|&Q†!ÔKšžï—,Ò y|°A!¤X(ôH:r„g]sÒ˜,ß›‰—€<=x„2[(ôH tê¾:Å^½AùN;‚VBæ…¼«³vÅ^½€Ch>ü;¼0PàBÈ|¡Ð#N|óõ`ÌÙ«>yzï8Š–BÊ…q‚N:KÇÏ©Wª‡zïòȽƒQàBHù Ð#cñœúœT¹ÜäšU£À#„òB¡GÆ‚Î;‹ØƒaŽ5RP†y†fÕ )ð!¤ÜPè‘T&{XŸIøóCÅÝ·wÜå3aŸ˜`›BHù¡Ð#^L"ö`ÔAÏl(RÜ!<‹/Å;!„T =â „Ä$"‚9\ÅQ¤¸ƒAÜcÿ„Bª …É D›K¤rºž“‚oZðé0”AÞ9wjæðÄr` !„T =2ðò@¸„Â8;g¶a0\ȉËs*—©÷.³7Âóž3"ï7v‰ß¯%„RA¡G&$KÞÞc¯ /«tb¿D'ÏóèûŠAßy&ƒ�‚ÐRa7I^dS$ ½k3û¢Ð#„RA¡G¦fÒP®mëBp@àT.´ »“o„Ë {oŠ|¶ >óûYó·‹¼=vŸ~ZäÇrÛô^B©7z$ VÆMÂû¸Ã›7Î z DªÞ= :[èÑúÐãýß®1ë¼j®Þ3„H‹È±ûüwD~ó1·Ðƒ÷t¢Ð,!„ÊB¡GrÅ•»‡¼<ûï¬Yváçz*è¾ötèÕûŠÈ½?p_cöùïŠ|Ôã–У¸#„fC¡Gr¢á\|E €7 áG|…‚jª³ è|݈ϗÍ9üÅž˜û㇯÷K¡Ðëšÿ¿ÿ vÛ×ÃuŒ}ÀüÿN³¬›Xï#—Âu>þ¤ÙΈÆ;7ú¿ý™9ÆÂßl³…çËæØ÷¨¿6û³sñûC+rÀˆÅ³?¹´iþoÖ»æqsŸÇÅg¶D¾`öu ¶Óp°YÿÒóáò³fó7Ö;†¸‘Ï÷DÊÆqíå]‡WôÒsæ|Íþís¿ä …'×5ÿÞó’Ȉ¨yê= 0?d…à?k¶ù±¹–s }B*�…) ¡çL;­G/«©„Ø´Í…>fo‹ýa¿0WˆúÞP,|ÒˆŒØoÛFćß~Óˆ±¤xû²to¿ûþo]#ër§ù¿®÷—F€ $û€ÙþVïÝÇÍv–ðܽüC³Ìì !bógŒ—0ù˜%®ž1çi‹¸óû5æï@̘ýž4âè#dÎþµùÛˆ›Q£iŸ1Â0Ø&ÜN…žz83ÛÚ¬§ÇÞ4ÿDZ®ù¦ÈW˜üs#œöÌò7ÿ.h¡0T.™k·sq-Njþ¯çûP(£}ê¹Xç˜vOÌ¿½1¿«™¿Ÿ¸lÖ±öC!e†B<|EO 2os ½Œûx(ò>ú„gFÐØÛÀ‚íŒh°Cºê„ˆ –™í>iöc EˆÍ "«/„7Ù°gÄÍÇ TBoÏÜû[×`1ÿÚ¨;bO€)'E|9¦7Fð˜Jˆ=Ÿ¤p³×uN‘'2\7vMzž#Ž÷1#$!£ö5ùÞÝg,÷Òÿ¡oÄM!e…BÌäÙõ‡yD— ½¤}ô›"jyæ’ö§æ÷dH×%ôŽ~­¿^çµþÀ—�s/R‘f%ô¡“[@Ñú#T*fÝLBoÌq†Äç?v&!ÞFl¯×“zê­´—ûÞ½†-ò²µ.öÉÐ-!¤ P葹€°.¼|ãFêVÅ.XBO=zš3÷s"i‰¸q†°í¿7ÛiÞ‡¾%òÒß÷ïÕÌ~5´Š<²³¶‡)d”Ћ…Q]¦‚gŒ�‹Y·0¡—�9u'­ë±=m£®ß%ô²Ü5óÍ:'"!„Ì =2wà¡B\Ñ“e¶G/ ÝAr§yXöQ#Þ¾œØÆ¶/›mþø‚Y·+rßófßéo7‚4ë!‡,Ʊb‹§ÐQQ•[.ư±Ì@èé@\óYSO‚íÍz±ªAóÿŽšõƒ{gîÏI”Ù6Ê3ÌrO€Ù.ŒZ”³G!%‡B” x¯0?TÉÛçÊу‡î Y~ÛwËíÃß}¡/Þ¢ÂaT2ÀˆŽ³f¹ >[Ôõèùˆ·2 =³n0À¬{Ò<]6Jèë_6Û[¡t×]ï{bñ¦9–íMåu$„2A¡GJM¶4‚¨ìaÞ¤ÐÃÀº'ûï ¾&ò˜¹Ž*BhHè™ß>kÄ‹-ÞðÕ£gÌz–X%ôt·šsކgž¯*£�*Rè¹Â®ã„Fèú $ñ½'¸†O']4ê7qŸ !¤ŒPè‘ʡӟ@�"ä‹Á£¦=)ÒjÖ)WüF_8üG#ð’Óƒ@1h 6M˜ÙBïäׇGˆëy½HpK·éGŽnZÇ)™ÐÓ{óžéöf¹+GoÈËçÀ÷ž`½ÿÉ1 ŽO¡G©z¤v çÏ5ž- Ǽ‡Éít°¡¯L˜eú­[;a~òÄ ,Ìz'h Ö±†%ŸyɈšPÄ@èí¼bžù-XÏl«óéGï€)ÑñTp™åÈGƒçél(5w-8ÛÂuA0å¶7Ë}Ä’‰&³­-F£$‰åöqbÞ7ë>ª§M÷‰dcÝËfF!›å8OLì !› ÐaÉœF¯{ßÞV=z™¦ !„9A¡GȤ¨P³EBhÉü-[ܨA¤ ï+ùUˆh]³<væ8ÝþÀü?Ê3¿ßcÄ=åPb‹BÅþÌÎ]SÏYÌ̵Å<q\ÛA võ<=–ã8O;$ºÂãÛƒPÔû¦"2&Þ̺A>Ÿnï°¤nÜ=zÝ&¿êñÙÎò%„²A¡G©zFúоrx}8\L!u†BR 9v$¬‚ÉA-„Rw(ô!•GséÆå"$þ¥…BHC Ð#„TŸr;ùüpî"rì¾Ä¼:BH¡Ð#„Ô#î.‘g®€ùÛø� Biz„B!5…BB!¤¦PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BB!¤¦PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BB!¤¦PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BB!¤¦PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BLÀ«Ò]ù ,¯mÈ^¸dˆ®¬,”µÍ·Â²·-½ÓÇeeiYÚ½Ýpa‚ÝMé®­ÈÒ¾ÃÒÙ¾.,!>×’ÊÙî–}‹m镸R !„” =2/J§µ( +]Ù — ±Ý‘Ö¾ke¥ûj¸ ÄÙ©¶´öɾ}}[hµåTwS(5ÁïK#ÄÑ®ôÚKá:3zFÌ9Ö3géƒÏµÔ” . Ê9f -i¯ÛeÞ¯[ñõ¥ÕyÑüö¶l÷>c„òB¸|A–V>#½í·û›¦‘é<ìò²¬Õ‘mü½\ô—/´ŽÉúæ³Ò=ò'ab°Î¾}˲râ¢l|;* ×=UÛ/­ö£²¹«'•rݦÅov×eÜ· Ùê“cQ6åtñ>«m§\÷Þ–tW—ùòBHAPèoö6×dÃÚyé¶oÖ)ó/Ð «ÒÝÁSü-Ù\;hþ>$k—×¥½xXNõ‘UÓ) Dážìnœ:~çJŨS4÷êºÕ)hÇ3N©Ø›¥Ðë_ëbÛWèŸk©+aݰÊhoû¼kí7ˆ¼ÃýºfDÂòšl†?ìmuäÐÄ]§/Lv/˶·ÖI'ÛyÈÞ†¬-CÔØÞé7L}»Aö-­J'¨¿¦No>*mì#+oËVçVY€Èél˜ªõÞqŒÑ¿§*š±`[.k™sŒßç�çu›kè3mT¯É`ïzûÐ:uî•––Qt Sní‹–Vô>™s Ð#¤(ôˆ?Aè±#µ#ÒZZ’¥¥›deí”t,/ÜÞvONwNÉÚjËünÖ¹iUÖ:§¥«‚n÷¢´á X:&½È‹ èCßîÊ(ôb•BϽöx¹]@è}³ïï•^[c^âpŸÑ‹†ÏC½a¶ Òeåûu½°NÆÎÍÃ^$Á=µ„p :à¸î eãZ‡ Ãòƒa6ÿo·m=†CÈâ}ñƒ²ôA÷ï„é¡Ð#þ„BïTû°,zHûÐ ¡§Þ”1^°tnq´·}QN¬,›åfÝ¥[e%ðÈØ÷Žl®‹ÂGï!¼/gÌ5´dañ¨t=Ú÷":½ fÕ~è !ªÏµåð±‹òF(òúa)—éyX!³ ô府Oè ÂzC!DûÜÃNeÒAÜì³Û ½+f?·éU+„–ð”b;;¬hŽ{ìâ¶U&ÉûwŸ\Œ…H³œ7p ,³ÀCd¶÷z}ž9—CÙ Öí×§lÂ)ãyŒzÃ÷̈œ(t«/-ûåPç…þ:àùàèt'¸Ï]YÓºŽrŒÂÕv}H«Ë—ÐÓ¯,B^ýcç-¯ûž¹%vè6Éxdo2má)DZ!yA¡G¼™>t«ÂgLîÞÐ:qtN‹¡p1]$¼´óîw²‹¡8ÙÛ^Î!ð"¾a¶]ĺ0Ó Ÿ:'ëæâa@p½ ·Jg«/p 4nÕœ¼¤Ñ<£¤ 5û¸¡uB6Çðµô=¡`ˆöqƒùýà÷‘÷Åœ{Ð)êþú×£b,DK‡ä® Ħ¢Cï):æUówxí죎V…ϲ¬v·¬óê×üv–óH ,+× õe#!ÕB/8/”õbý \—o;–Œçá<V¸1^kuŒÙX;dê!Êÿ-Ùî•å¨.øÑ/K´¹Ë¦­ºž±.Ä„D¢ HÝ¿ëºõ|Âc.­ÈZ,§v0N¶y„¿o ë>!$(ôHvBÁ1ΓÒ…‰‡{$Tâb(Ž =í’âHŤSOCØyyNÔ“¨ç#%ä„ ¿Á%DBOÏà¾à¸‡­óp_‹}5„8úÞ&;Åä>A¸Žåê‡=õž†B%ºþ0Ìís8ì/ÏIÎ[ÏS… lYVÖºÖ@� §Ð39_·É²úna–FÆó)Bü†ùŸ¸Q–P/2Š<w]W‘©^q¿ºÞÓÁu©£®×dyÓaFðèÙžM›ð¥+&>ñ"q¯´"óècB¦‡BL�„Õ$Ó«„ô¤�Œ¡ë¨pI ™ð÷h Häè uhj*t<;–(¬…ñ¸œ¶;3§ “ôµÓ…à¼áˆÕ¸–¡ó4»>›ä¹zÖõÅ…ž±òH?ô‡cFë;Fìz'9o=O”ÑÛ¡ÇÐÜרÀ ×ý <‡7ôC“àÃyÙ‡“Œç‘VW¢ÐyxýKG¥н¾'ùFS.oô_潤Ái¸­¢:V£ÎÏ&¸§aˆreç'm¿¨;Aè~ÄuÀåx>np_Z÷ZË2\!$3zd†„Ât¬çè©W0–Kåz¶ðI’¡c‰Mcæ?9…žvÂýë»bþCÌÃåzÉ}Œ'yî“ =ý)mzÒyôÂ: &C¿“œ·-°°U?¬Ëa³º¿n¶_tÉŠqd<W]¹Ò“cGžKKxöëvèe¶ëiÖQÂZדõ4voç7 [è™3Ô0°;ÔëÚ¯igÇŽ%<‡ÖT*ÉëÂõ®´BRï?Ú“Ë’/#„i¡Ð#3%Êñ±rß$ÃR )dÂ4¶}BèbÑeÊÞ+²ù,ºç £å¡ÙbrXèÉÞ Ò9„Îü^é·Ã¶`ĵ @6çæ ñsHž{rŸ`øúâB/)BÂûgßH¸„pl°Å$çX½W^9zú’uÁzöµ§‘ñ<\uŽö~G¨Ô>gç Ixlïz§u=~¬x=C]Ž = íÍ7Gõä ÃïXíåÈÏÐz†k „d†BÌË“à5žvðÚ±!¿§?B2| ƒ-Q!°v`öD­A{\: £<% ®ôî“[#/O",vê +ë²Õ{@Ö¢Aêy‚8JŠäµ˜µák®96’ò´ël†ÇM çí{xŸ®ëë ½D^W¶{Ë/=í3�#ðœ·Þ¿„P‹ÊB²Ó‹Ê]Ó¶PŠò�5×MÅ·sªžQd;è^ÚëCè-×ß@G/ Z.Õ?ÆâèQ±"ϪŽr ¯9òÂyÖe³b¦ŽyÓ£sŒvgcèºî@虂˜èWž=ºØ%òÌzÝcÒ‰€B"¡Ð#s!˜†Åú²�løËê©ÓuÔa…‹‚íŽÉñ•Ûw4.Žá¶š0vÒÑ>Çt.z‡ÛŸLmMk°;ÈØT†0ÿ)>0a̵Ēúmqš yîû>"­ÖµÖßfŸŸûÜÐõ]¸�‘7X¶Ø>//F÷ç¿.Ýã%n˜è¶?BÔ.µÁ€‚ çŠâؾ"9î±ßc6ê^ÙB„‚aT\¦ó¸ÖÜÛÄ×…a}S÷Þ{QÞˆM{’~ Y“÷HÏgdž€€¶¦± Yø% ﺬ÷ÅZ×öhF¹¨öï î“©Ã÷®IïøWAbÂ/jÖ¶ÑzÉ…B"¡Ð#$wr»Á⪠=÷A‘ô<!ŸíV9…þJ B÷‡F{#Ë<ÀGËO !•…B¼ÐHŒ4¬‡çÖÇ'¢ä.Y-µ€EØyE;V”ä^qä«BH>Pè’+·É vTÅБÃñ°h?\~èðˆÉxË@*=&mýkÉ æ£kß;H „ Ð#$¢ÁãrÕ*ráì9Ò_•¤@!¤PèB!„Ô =B!„šB¡G!„RS(ô!„Bj …!„BHM¡Ð#„B©)z„B!5…BB!¤¦PèB!„Ô =B!„Z"òÿkgA;�ø»����IEND®B`‚�������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8b.png��������������������������������������������0000664�0000000�0000000�00000045122�15030617045�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��P��#���ý¼?·���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IçIDATx^íˆ$éyßç/ûÛÈXvƒmaÆpc²¶ƒ úó X߯ÁÒ†Añþ±‡Ôd K°QšŒY¸ãð( £3‡7Z·²ÑåÈÞö’óÚ«1½“Ö›¡eY¾¬Ç.«Óz2:דΓ÷ûV½UOUWwWuWwWu}?ðÞÍV×·ªÞzßïû<Ïû¾kB!„B2AE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ (BJÆÚÚS.‰2=ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)løH°2ü‚)åkøI·yÖæ;žjÍ®w¥Yþmmm]ÒkÕ~CªI½¹#›=9ø—ŠðôÛŽKHµ-é'žÄp,íM©5:räo™Äà¨'VCjöüëR¿øR¯™üní…y=éK·óª´çÌ}>ô7.Ü7!dzøR2ÊÙð=‘ÃÎe_P˜TAºGOü߀Y1¡avd3Y¤ÝÿÀˆ”}ÙmnŒ8_HÒ±FÄ졳!çoŠâ‹'“§öŒ’XšàzµMi¼kDœ—¤stjöz(Æzrž®M™~A„”Œr6|9înùê¬4»üí% ’¬AÚJµÑ–~`ÅÙ—V½f·×6;r˜¤pFë8¾+Ûñü�'žplJ‘äç¼´zÍXÁ~Í»v\žö¤µ>"O �y"„L¿ BJF9¾ôɺõüÍZ|Å-AÚM—$rÆ;ˆ§Ë²Q÷óœFä ¥»å[ÄRì?è·e#Sžòù$„L¿ BJF)>mŠ%Ê`I§rÔ¹äÿ†˜©x,Ñèc‡·dw¤åé9ÙlïIÇ;Yäxbד'rÒ¿-ÎŽ4ëçÔ½9áW—VïÄßæði7¥nÏ5ìÒÌä‘2=ü‚)åkø&XïHg󌽯0FH1Ö7A@%{,ýn[šWÇŸÈQ·%Íö}9 ŽMç¾;íµd× ,lú¾õvüt íÚ°5np$ûÛ ©Õ²½dþÙ‘FüØœ@ž!ÓÃ/ˆ’Q¾†O[&¤!4ɧ]xq0±4ì*TâÉü+°*¥/*‘{ž¾ž;w4¥×:oöuñSaàýp^gy"„L¿ BJFé¾±¤IiœûÎà,9‰¿8ÖÆ*]Œ¹ !ž>'ÀU ¢Tâ%ÈGü\´kÒ[oÈIoÛºìl0üq_º¾ ¯ÖØ•ƒ“èSÉÜ!dzøR2ÊÕðÍ(ÆŠ/sv{44 o̱§÷nË›U)/^>†Óz«'1Çb„0±{pyHrßiweD"‘FëU¹Ù;Š=¯üÀu!ÓÃ/ˆ’Q®†ouÁ ‹uîÚeéêy & 7ÎcRJ lרk­·¤d2ÙŠˆ-}¿.Ö)1~> _„éáDHÉ(U×›û..bÔMvÂʸ“m‚pKrÜÒhÂkEö¬JEïÈIÿm韼èýèC÷ùD»·ä]x„~A„”Œò4|.( ÁÅvr_Ú 7ú.. “ô‚r«…"H/“RklË^?.qâ.¹¬Ê ¢I–'Ÿ@$F÷Ýzg¤quG:÷+Q…é ŽítÖM§„fó„y»¯Êí3¬Ï ®E™~A„”Œ24|¡E%ž÷a5b};̸³F¤ZCZ7:ÉñAnvï„ã&Å1b&ðž¾À#\ÒÅŸ’Àn §lˆŠ?#÷_”†³Ö­mH³Ý•þ,O\‡2=ü‚)løŠDÆÑz‚åˆÙàDHÉ`÷d|+’LÎ%7Ä^|XŽ™ ~A„” 6|KÆw1Öš¯ËÓ:#›w†Ý‰‡åˆÙàDHÉ`÷dô¢Áõ¦ìÎq®¦yÂrDÈlð "¤d°á#yÀrDÈlð "¤d°á#yÀrDÈlð "¤d°á#yÀrDÈlð "¤d°á#yÀrDÈlð "¤d,®áÃlà/Ëv÷pñAÒn2ÍØä”Óá–fÁìß'þ¶$rÒïJ»éˆ¯mÈÖÞ-Ùݽ'§CtnH³s ãΖ+AàúŒ#þŽïÈîMïx (Bfƒ_!%c1 Öš»"W–!ž,žèÉ<9¥^˜í<6ç8f_'ÆÜò/FíîËv³¢åb°<‹qÜ ºSoßDq÷P:³9/ŒÉ:/J}ë–ì]‘ócFžÄ#én_·kR@2ü‚)óoøžÈaç9Ùhí/ÎÂ2Ö£;—°ÀpZ`MêHss׊».ÝÐbÆ »|ˆlÅãiﺼb—sÁÂǾxÁuÛ ©;ßH¢ùJƒ·$LÖõüFq"½Ösö\P„Ì¿ BJÆÜ>+&ôâ½û²ëÜZõ¤{ôž¿–É}Á[¿ÍnÇLÜÇÒßÛö×t;+Í[¯y®¯õ«Ò}`„C½Z•Nú²ç/ ì¹êN=qaöY;W—zD4 áÇ5Ý‚½XOï’uÉÁ2t¶uWZ7&¸Ü“Ã`1a¸í[kÖzkOî·7Íõâ‹CmMDîú8§¹ïVGzñE~•ÛñÖÞU»>®ù ³eò‚k¾«9v‹ ß’–¿ r­ùeó<ü{ììI»qNÿö³Áº€Þs3Ïמ¯&çêçÂ<ŸH'xGÛÒ;Á³Ôçv–<Óóöþ±2=ü‚)ómøüx¡ aÞ—V}]ê[{r4­B§°è@H´ïˉ‚ xO;MÙlÝ’ƒþ]#º.›m¼óÕÒÜ~Mº;¼ÆË¡\2¿ïÝ—~ïi6þtÿ¼-u,¼{(!h†\dîúäØ ?¦éèuÙF\]VÅä î3û÷9_(yÇ3y¸²wKv‚íO…‹ »˜)O¸ØŽíù.Jûàž:o]<ìo]yg¤Þhʶ¾¦Ê,K—6·eïà@z»[F”íˉ¯ui4w½kqËàeYo¼(ûG‡æžÎzy>¹oÄ–9fûŽšóŸ¿"{¾4|ndÑ^Ã>7 (Bfƒ_!%c¾ ÄĆï:‹YfòבíÖÅ´~Y:^7?DGMêÍ—ew÷¶ZÑuַмkþ†õã]ïx+P6¤ÙÞ•ÝnOöš~€4¬Kç•ÕÄá ›õ«m¹¾{ÝŠ†f·/½ö«VlX7Ýšgµ²;fžÉ“(C±Pžð‰^/¶ Ö%{¾÷íöPl)ìóY÷žBÃ× ó…gaž žA½)íÝW¥{øÿ\ÎóØ?i(Z½súV¹@ˆùÏÒ½#‹ÿÌ#çö¬eú¹P@2ü‚)ómø`90…E[£T¾)5+„ŽC‹µ~œõ„‚uaùæhO¶6®H÷;‹‹ié�@€÷ê¼é÷‚l<×”ç­ë0pQ Ç?ùù± ÷¸!õÆ–´­Øð­?öœÚ¤EÃi‚ØððÄ—ŠR–"/&천/*ísˆžÄ;G\Àù×´y¶PÙ{ ‚Õ¿eŸkDÈ)ÑdƒØ×[Ò{âÇ`Ùk¨g9“ƒë²}ó¶|ièܸ¨(¤€"d6øR2æÛð¡‘}Îs¬BL’µ*½âÅýXqm° ñ\GÐj¸Zc[öú¦™,7O�øñGáyOtKúÇß’Î&âu6¤y}Gšë:n'ä´÷¢\¶V*XÊ6ÕTžÕ¥VNnôyBÄþý¾0ëö\~“ŸŸ(FÈÁ•hód®]¯q¶+¾XôîuÝsZQƒû.D‹/¬juÙ¼ñÀ.7‚P_Ó;——¯c+m<T­!­½¾œDD›‡bNð¹ëÖ·äzûùðYÚ säÇM­à‰Òȹq2¸cŸócÕ( ™~A„”Œù6|ο#-Õˆ¡D™ƒ—¤ÝlÄìæló><–Þö Ò>%)!³Á/ˆ’1÷†op »Û·‡¬?•– “ã€Hø®>¤ïoL»pm[v•xP„Ì¿ BJ>&¦<!dzøBRñ‡ø‡AÃûÑ~ÔþÿWõWå½÷Þó÷˜/ó7#?ó3?#Ÿýìgý-åùGrÏiggÇÿ•R&( !©øô§?iø]ZÝn7¸^­V“¯|å+þ/åâñ#Ï Ï•R>( !• Âåç~îç䓟üdÐø_¼xÑßc~Àâô£?ú£Ñ÷û}òð[¿õ[6ÿ?þã?./½ô’üò/ÿ²üôOÿô¬x„ü €"„Œå‹_üb \ÐÐá _þßævy=õÔSÁßeŸÿüçmÞø‡Ø ÿüË¿”ú¡’Ÿú©Ÿ²V6BHy €"„$ ÏÇ>ö1k-A£ÿáØþÿðíÿµ+®kÿú¯ÿºý׆ ñWßûÞ÷ü½ÊA§Ó±ùÿ±û1ùЇ>dÿþÈG>ÜDUÙBE‰€q9q·¬$ôG$o½õ–mèáŽZ¿ó;¿#gΜ‘7ÞxC~à~ ´ä°˜ADAâo˜ïÒ'>ñ 0O)6P„¬,n>!4Ìþj@p6\cºA‡» ‚j™î2¸¾œå –§ld‹b –>ýÌ‘ò ”÷–™Áy“–È!„L!+›ür¼p@#‹Ä’nÄ1j §eク‘¦öŸî9, XýšÍfäù;áš›KÏ.CEH^P@²ÒŒhœ1Ì5Ú:a{Qâqôðÿ;wîø[³Plå@ ùOüÄODÞ‚ès‰5£€"$W( YiF X–âóÁêkOÑbpfåP�ÏnJ¼„¿gñHEH®P@²Ò Ä2Á5w×!ö©ˆTBPè© ¦³Š•G@9~ï÷~/È¿!n§ŽE£€"$W( Yi¢Â£¾0šÎ5Ê®aÎ5Ö&gÜÔ.MGù€•0Ôõ«_õ÷È�!¹BEÈJã ‡¬}BÎ||#bÑ€[£¿r‰¯™#z¨ÿ… ü­Y)§€°8Áò·FÁB•IôR@’+P„¬,È×_þ§A£O‹˜E<ÜìÝH°”eGOc€tVšÝGþoåB2…X©4ñjá4^ª5»rìÿF™ (BVŒèНüõìfŠ£YXoÏå¿,¢o^ÀZüǨ=.CÈâ¡€"dÅp.ˆ%ÝÐBL•±¡Õ"°sR-¸í`‰Óïc©¢Æ±²ŠP@²Bè…]‚«'s¼Lp÷…„‹¯µH0b2>g¬SE›‚‚U…Š�ÂB/ü‹„@c¬«VfѼk ‰±„w¬ß;â¥!ó…5!%V%,¬«Gh!aª‚UhDá²s÷!E†I*øû“Ÿü$]z„Ì (BJʨ…Ñp–)H|z ““Ñ`n¨ø_(t{2( )pÛ H<>“xQþÍ“+W®÷‡¿Éx œŸ}öÙ!kÖ5$„ä !%î˜QAâEZø7O0q¦»OÆõ¤å$.¢0gÔªX& )P„”�·ð¯†*íDŠeEÓ•x�>\|œ3Š| €"¤ÀÀbP¦…óÆÝ/„�‡çgVÉxù5 Aç 0'd6( )(He[ø7O`AÁÜOîÞÉô ,ér„„é(J ™ÖJ„ ¸æt \wpáUÉuçÎàþqïd6 –0W˜{¦.UÁ’IÈ< €"¤ Àª„Ãã“""!(¸j.0Q‡dvP†à¾Ó.=ü]«&!yBEHÀ>ñ€ß2.ü›'hÔݳøüç?ïo%y€@ò¸{åú„¤‡Š%q„‰/ã ÿ"H¼ê£¥ôNÇßJòe/ÉU Ë!d2P„, Ìk_  GHyègBËÈüÀbZDáï*[> I ! b�Á¼ñF«ì ÿæ ¤{6PlÌç Ê]|Y ü®eBH2P„,À«…¬Pœe; tFæÊ'ÜÉqa ´ˆ2 k&B�â™â=|Œ~Z¥…óDOaðôÓOû[É"Ð 8#Á¸ê3Þ2 P„Ì4:ˆ'‰‰Ãº²j ÿæÉÎÎNð¬ 2ÉbA¹ÅÜ[ºÌÂRÊe` ¡€"dÀåQµ…óDOa�1EÊh³ÙŒÌ…Ž�¶±üBEHî ~'¾ð/bIèIÜvîÙ½ñÆþV² `uŠEùfY&U‡Šœ@,,'ñ qLXÈå2²áž'w,Kè�èN?*CEHŒ[ø—AâÙÀóÒÏ‘î¢â€yñQzˆQã;"U„Šp=sݨ —^µ…ó„S ~Hš3ŠåT ÖN„LzÜ»4ª¸ðož æÉ=K,çBЬ„]·Fá› ¤*P@’‘q ÿ2°vvôp’â‚ÎBÒ` º­I €"$%h¸ðïüuÏ– Û7êTˆä7AV (BR´ð/zÛ\ø7ô˜‘œ|°êο²êP@2ô®/}æ_É?{î_Êo~ªiþþÝÿ¤÷ð=ùŸïKbú«‘·ON_}OäöÿNŸ’Α”’ò¤Ó»ˆüÝ?DÓßÿ_ÿ¦—Œk€Ÿzê)&— ŒFuïÏ%,’M×6YE( Heøî©' â‚B‹?y”,^ª– îÜ3yp<ü̾ýÄ{žx®y7©Ž©!åb ¢)>À‚s¡‘Uƒ5)5§ÿ/´ üí÷¼†][zßILÙRZK™{îHxxx/îM'×ð"PŸ”¸íà¾Ó£ô°$ Ü|té‘UŠ'Ž`é@CÜÿ?EËJoÎÁ*Zx×_ùã;Aƒ{ñâE¿$²‚«ñ f9»<Y( ÈRqn5m9¢@bBúO÷ÿÖ–mÅ*JœIܲÏ>ûlÄ+#GX’²CE掳$¡tV¤¬ÁÓLL:Ad;ë• ˆ'Å‚I‹(ü)+8g)+P$7`ˆ[“Í´ÈäßµÕ ž¸îâ“Ðb5¸ú)Pd*œEÉ ¥¤ÆŒ‰©( BÞ +ÄÔå9rdAä˜AåÚ……Š`NÊ™ç~«Z|’sé„F8)¹aý“R^gñ›”’¦mp)~oUs­âž¢j±ÄçŒB\–áœQ¤,P@‘hÜ!VѲtãk‡ò_ý†|áß–ßÝý²MÿñÎ[òîÉßbƒh<“÷”0Ôâë/ŽWSt9Q…û%óbécûXDHaÆ.CÊ�TÅÑÖ¥26„.æÅ5zhØ]ì Ò½¯}}h.¸¸ðï|ÐV1¼¼7p�©Œ1q°B:+Gæ›3J»ôðw³Ù¤K ¨ŠáSY3×ð¢!v.²4.0·ð¯®”‘°Ê‘‹ aòÚƒ#ùÊ7ÞK,EJøn`}ÃwDA•°:ÅçŒBç‡RT( V'˜PáÑÂq„¼A ¹áè³Æqáßr‚‰3Ýûêt:5ËY²PVŠƒ‡ï V6ÆQÍ:>ˆƒÒÓ á›&¤hP@­Z0%UöËJhüÐÈ !ÌC$%!ÒXƒKW¾LEŒg>.>nx;ÞÙ¤÷qåf¨GY/’°‚…Ê *Z¨¦ã¥—^Š|Çøev€H‘ €*9.è»(1LJpÇ@ÄÍK(ÅA¥Š!Ðn 58Ûqypï ïqÚÉÕ Â ßD„•‹¡B¾HzÞzë-ër×ß3þÍÎ) P%¢½ÛeZ™\*¸eõ´7Ÿ˜¯V«ÙÞ*g8.hög6x‡yË,¾ç L*Ó‹Hî»A^ÈdÐ9··FÁBEȲ¡€* :ø;©bžgB¥ï,KËKˆ#Œ¤ƒXr+Äg5.°6¸wøôÓOû[ç‹U(×ËUSø®éêb ôw…X)v’È2¡€*0¨TQ¹/Ú5W4±n9]™"Áíٌˋn aqXNT-Ã%WÄÔ"ÜÞe£ñâS’`ÔçŒ"Ë‚ª`üýÀ«ÀÙ#Ƶ\pw‘›á:ÖÉõDQn®\¹¼Óëòq1†‹výAÀáºSQÐAÂüPñe`8–, ¨‚�ÑäbšÞ|4\¡æ™œ…©,A­¨?ýéOGâ ÐûäðæÕàÂ… Á{}ã7ü­Åà *|?‹Pw#úpM«S|ªŒÀåœQd‘P@-Tލ$u¥y7g×AY,LI`ÒËøHô>!¨ÿ°:¸�øÙ¬‰ø®!¨POà:p3Ï¥ës|ô-'Ê%‹‚jÁ¸¸¦¸hÊ39ÁTf�*G‰ÇgG ŽÉj¡ßq™…1¾o˜>OA…ø,ÆK…S˜hë´ë`Ñ¥Gæ Ô‚@Åšdm•î|;yû¨ä†F—½BE¥‡!ʺAu ÛY)®°8=õÔSÁ{^%ðÝCèÌKL¡>Ag©ˆƒ=IÒœQe´f’rA5g`Þw±MYÒŸNP¨8W-Е þ­wîÜ Þ÷3Ï<ão]=œu õÁ<,ШªìÞsS›hkÜ{œL—Ì ¨9�Aƒ^gÞàh*c,Ó8PñÁäw×qáßj §¥@9¨ èüd±J§MpáC¨U”§øH]+ÆL’¼¡€Êô0aNÏ«B„J[šVŒ¢‹¯ÀŽ 1 ÕïÚ½ûªZ ô(ܼ:p«àÖŸ¸îâÖltÈ8É.É ¨pñMI•Ø´ •éá ëTp\ø—�=…ÜyUb¢'Ï9§Ð CÇ®jB 0ˆs½ZêN¸Kò‚jP!å)œª01*..üK4îý#œâ9Ä ç à„TÕ@€®gP÷`úÆU’Y¡€š‚<-Nn82ιêÀ|ž´ð/㪠µ.´ $ƒàð¼â¥ªh‘‚X‚Å[wÜ0'—!³@•T<I•RÖT¥@Oˆ#¬o–´ð/+°j‹“žD“ŒÇ¹øò°JAH¡óV αä‹ÀÀ, CáN¦*%âΣÒB/2ý(º'rÔ}AêæC¯5våàdàoÏÊ#é6/I»¿xŦGX¹„^ ãÐS ФõH±R8Ǫì,áñ+8Ÿ—Kop´'[uÓy¬mJûàØßš•w¯Èùöù‹ ¨ Àµ6ëèg2Ïê¦vds}KºÇïK¿}Q6¦þxÌÇwïž|s_, I ÿÂŒÎ8—â“O¥?Y¸cá`W>° 0ÉN^!ÿüæ*„�XÅŸ}öÙˆ5 )÷µ5ïHgsCšÝG2è·ec£-ýiëáãÒûfEÜ%j ³ºëfFŒÇ–ÔjN@]µÌŸUAÔš]™¶9LC’™ ñ\ø·$äVéOîz –Ù€øA5Mœ”[ù�ÇV%´�ÀB®ë*üpƒÜ¬ãÇ]iÖΆßÒÚ…ìž�{ް.]³mÂ{Ãd$P Àœ=‹»£éfŸ·éO4i5å‡38º#ךÏÉÕΜøÛæÁ¨…Q!1H¼DÌ\é§îO?ýt°×8Ì'•VHý·„ýàÖ«Š5JÇṄz,K¹÷ýèoÉû;3ƒ#ٿ֔ͫ7¥?u(É ¨ªŒW&iS>ÂÉ‘—€òÝ(÷¤½qq.qP\øwµÈ«ÒO#Ü]YAF×n¾¤RoŽøÇU%6 'tôtkÔK/½äï1ù|Kè þéžÌÊAò†Êħ]ðÓ¹êò%Þ|A¥3*HƒÄËI>•þdá«¤Ž‘#óBj”k/͢刯š. ¡|Ä猂ˆÂœQS[Ðópá‘ÂÂZËÅÜ­Ž™ë0`||‰Aä¥×: *³R—ÍÎ;öw/øü²tç·þ‹[øW7€è½q‚º`Ε>#”Ÿ7Þx#p ,‘ùôW'aý•井й¬ÊBŨ¿0�ÆÕkHµ7Ý”+èHœ¿¥ <“Þ¶Ôƒoë‰v.ËúfGêtRL*/ ¦ GE4ÿ^Ù¨i + ÐÐ9k?þÆÝu\øw•UéçSîÜÔ?ù“?iÿ^þG?úQ; k•ÍÄ6}ýïF»îF%tWuMÎ8¨ï0&îÒö¬–õä­P«@¥Ô4C᮫J%Р¡ò€«‰ ÿVƒäJ?…²¢ËÐ/üÂ/ØÿèCâr> –÷iËTiòMXâu¦b¡•€J (Xަ™€Öª*†NNù‘ù‘ào¸îàvaà/™†ßþíßÊ’Kp›Pˆ/Ô…Ót$qLU€Õ¡ è,êòê,NªGåüøY{]ðÿWeH¯லø¥_ú¥HåK;2-IÁºãËõbÖ8Ð*—Ô‡ZDaiªO}êSòó?ÿóÖÕ×4©•PAYGÚUÍê䀉Zˆ#}ß÷}Ÿ½wê)„ø  é²…¥}ÈrʺêêÓ*‰( ~ˆÏu÷ýßÿýöÿÿøÇý½HU¨Œ€ÂGž¥‡…}«2ê$ ˜¬u%áÜ,„ä+cpÓšY•T'ŽJQUeóÞ}øÃ¶ñQ.†)Z¡ªE%ÄSËâ£ªÔ«ŠƒÀI-š\¼“û7]-$œ“­¬¡UЉ:>T»õh…ª•PY‚$«V$ñõ¯Ý.òÚétlãÁ„D×É4Bœú¢¸díxbj—ª ãCu¢ªZ¬¼€Ê2ÏÓ֋ój3U7åAÒy™˜Ò¦"¥šÿŠ ÅÓ»`Þ2·–#æ1sïŒV¨ê°Ò*­/ñNÏý›ý£ñ„O¥$å£He'‹ˆúÍO51ÁĴʬìÝaÄ]Ú q­UÑ$y•–+2-E+;z˜q ±SUŽ!%!P%%­ïÞ™œÙÐ Y6E,;i-QUЇ"£¡€*!õÝä:žôOl舆Š,›¢–´"êïþÁ?€T ¨’áæ{ú³o'Ô.ÅGÛ±¡# (²lŠZvÒŽÎÃt0¤ÚP@•Œxï(IHáãûèÙÐ Y6E.;icL«2*$CU"ðQ'}ÄHZH%Í0ΆŽh( È²)zÙI3Ê夺P@•ˆ4s> ndCG4PdÙ”¡ì¤Y;±PÕ…ªDL2)ë ±¡# (²lÊPvÆYý]‚È"Õ„ª$|ûIòÇ«Ó8<:¢¡€"˦,e'ͨ<Î UM( J¤IÞ&ùâÙÐ Y6e);i¬Pèà’êAU&­>i4:¢¡€"˦Leg’*>mLñx"G½×¥s£%Úi÷‹:|p 'ýÛÒéìH³~NšÝGþö'ûÒª×d­þ‚t–§^) J@šö:¢¡€"˦LegÒˆ<LS,Žå }Uv­Pú@úí öyÛ´Ñ–þÀÛ«XœÊQçR˜ÏÚ–t“3zÚkɺÝo]‡þÖ<1BîàÙÚ=0¦LexVâî0Ê#é£u)ÍÇ»ê/šd#¯òÀrE¦¥Le1NIu¯NÅâiSjZ( ¤½Q3ϼ&íñ¢`¹<’nó¬-µf×ÜÉæj‚xÚMe©[õúo%înRï'ͺLlèˆ&¯òÀrE¦¥leçÆ×ë_—&yÁàh_v›öÙj2è·eÃl[[+²ûÎpÜ•f ù<;Ú}7OGÒÛmJÏjŒ̱êõßJÜݤùŸôšw£`CG4y•–+2-e+;ðÕo$Ö¿.Í?Ü‹ºÑjHÍ<;X“êÍW¤g-0£=¶üí~ €ráùV©Ph‘ÍÎ;链tm¬Væ8eéõäfçUi5ÎÊFû[kM ËÎic°üüÕ›²Û;RǨ{ظ*[Ûþ¾ÒìHh'8–~÷¦tÚFè ‰?† ¿á<xF[{r¤wÊÇ–túFjâÍ%'âÌõö\^ðÌw¤Ó¹!Ýþûv¿Uf%în’€J3‘Ûª¿h’¼ÊËU…JwË4µËÒ9œ ö-[ÙùÝÝ/'Ö¿.¥éÈNiÄ;[F8AðD;—­Ø¨mväÐ -@’Üwk²ÞêÉ“£=Ùr©ё#Wl¾ÿ¢ g¤±}Ç\ç¡tëf?OL„–,¤ ÒÞ-8wÂ"ˆšŽ'Æ|!68ìÈ&Ž‹”羃HéHÿäƒàC1ºø"n¾Á‘ìoqYkÈö¾fGiDŽÕùðDÓÀAÞå,uæ˜Þ¶÷Ü[ûFĹs˜|Ú<¬2+qwP$oò*,WfðŽt6Ϙ2p^Z½ +ë&ì[¶²sõÕÿlGCJý]ÇÜ ÅÒZ}[z'žÄÒzKz¶õˆ¶…¢Çˆ NW:í×¥ÿx_ZëØ¦÷‹³%:ÊÒã„ÉÆç¤}õ¼}ãÊ@p½O Têf›o[/:X\í'QQçñXz-äÅ]C L_d9±Š6g™sÇ$ Ð0°½ÖØ•÷ìïÝ“oš?W½þ[‰»£€"y“Wy(l¹².¸Î¥ƒ˜‡›7¤ÝÜ´:3¦qò]C.…2á‚wáViwå ·#ç›{rØïÚgq MÜw-Ù}TP–f „…v·)·œPI¢DïW»([íÛr8pB ûª˜(÷¾¬Àx$ýnÛ³ÖÔ6¥}~ž 3åøù¦4¯L*Ë*(<°”¹sè¼&[ÏTpŸ—¬È~[þýØk›oßwá…¢'Y\F óª­iÚêžÏÛV™J¨¿ýž¿ãŠû¢auó~ ²õ ªWéÞ°Û¯´ïù…9j¾Jõ¦´»}å+Ï‚?OJ¢_}õÀóʃ¼Î“/®‡Šr1.hVï7ï ÕÓC®û×r 9¹/í,Iþ77”6d«{è5P÷] ÷-_øã·ë_—楪—”[ÎþJ€ŒØ/´¼¨z4+ê:~ª5Zrãf/&Ü~ëRoìøÖ°ÑD¬_Á÷•tOI'i¿¡¥ïѦ3Òh½*7U|U˜1õA Ìâu²�*ëÀõV™J¨4=Ÿ"¾h=bd­ÖÖÛÒwd0"^˜Õd’Wyè>"(r,ÑùG¦¶D ÁØz5Œ=X:z.˜(y•‡¼Î“;§=ÏE¡cAHtQÌ…±@)ì÷»Õ”fsË‹9ñ·'‘´oaËÎ&‘w.š8ùº^ s?…¢(y?U/& Õ™ˆÄDÅH´†BÕ«‰¢N‰‘༠±ˆhIZÎ¥8rN(ÕfîÎ8#h€?5„½N˜Ç²•ᬬÄÝ­Þ<P®1AaDO'j ÁÇr)ÖcÐ=%õ IÍD‚)-¶·Q)£ÌË&a.E^å¡Xå*Äk8Æ™ëAX–¦Í•Ä5&þóu Xâœ<£÷-jÙIbyó@…Â&p+uU’�Aýu(‡·ïÈ7,8Z(¸‡Ùÿ‡oÊÍ{±¡ kJ@ÂeB<WP_)Á¢¯• ´B7_‚å¨{Kî<Ir`ðPnßþ–ÉAT€>>¼+·¿y"G7_Uû»}( JEš™È'-fY¤Æ>Ž!ÌøÚkÑCÄ\«z+A/Ĥq=¨=µÄÞÇ8àú{Åw?N)¾rfÔ\0š¼ÊC^çÉÄÄáЮáб �îbcŸæçƼ7 •î±:Ú5•}·vS«å)lœ–å5nîÉ}nô•y—*†Ä¾k4¦7¥c+xÝGù옼:Wî#œ’sêå)yøz€kÀKhÜh¼1û.¥ìLɤÅÜD>â"ß 7JÎÛ+¬¿ÒÚ¹&mX¥†Ü|@ Ä£½)] áWÛØ'”Çë²{Û¹YÝ>“:&!Ñzõ4è8×/Ê~P®âç Ë|´ü% -ƒê<qŒÈÛ}UnûÇjK\£}ߊNû;eð¬àþ{QZížÙù:~/®,«kãš«ÌÊÜ>Ф×¥Ò¬…ôžP˜³ ŽðCÐÑ.<4n®úóÒ!8Æ7PªÒñSäx=)[½%{¦—DZoôœ#º ƥ‚¿åA^çI„HŠáЮ2ŒÜ»²zÚcOÂ2{Fƒ£;²m‡WÉ¿ô^ñn¿£ËüÄaܪÒGr×R=~¯áxÛô–_ðÊŠMˆ“z/ì…ÛÜôý@l½çBÂ~®c¡zñ�Œ–Ù°¼:ñ–<|}àúea©ká™o}/2÷ÓN$¾„ß?„Û‚²ªß¡­±±-{V<y¸rï• \§í‹+Ÿ$7ÛDt}fâTãqUv :$îÚ&ÅC:€²¼EœêxØã½A ÑNBlŸx¼lpn%Lß’Û·ïË ¦·âªãÏ»ås­2+swaÊqÒ‡ëÒ¤PQ^t²�J‹ŽUR½•àU…Ap«×¨œ1]Ѥi Àˆ^Yp Ä(¼§F½Ä?~¹æ˜9G<&5t#zi1ò*‹,Wi‡C»2¦Ål0„Y˜þµ  –ˆð-@AŪÊFÆaܺÜFv ¢.ÈÎÞ Ù¾ö¦ì¹w·#½ý—MC�aåoSñÃÏB}î½ÏÆ•'T^ãåN„�σE–YHãH3‡ÌFÐv$Y:—DYÊð´¬ÌÝM2!#RŒ$€²0lñq)jƒs!èF%hÈÂ~ª $õÊTO)¸Fàb×{S mœ#ø{rC7BÐÅÀ5ò ¯óL&|÷ã‡C;—Lj^wp¬ÛO?'·¬˜ß’c54ß™ýwMóR ã.ï:OWvŒ@ÞÚ~Ýä+|wöÜÛxÇê¾ñ•t?n”ŸºŸ Ì©ëåUYÌR_Ïä¡ `©¬¤úV§I!d:¼ú uðQð½†åS–2<-+swi‚ßÕ6ãEë¡Ü±ÆÄê¤â9TåÞøþƒ¬Ö,'@Ìþª4ÂÁ9R6P濵'°$_#¸· ù ¹v<¸>MC<£xüOœ?ò:Ï$Âç¢ËMBlË$†Õ±Á~¡ ÕÏÞ;'ܯGLöá5Ó ã¶¸w±æ(·³+'ª|å.ئò™ò~ÌÁ¾ Ïß/è<¨kêgè§äáëùƒkÔ»b]R}ëÒ¸z—Ì‚ëPš2Ý»í[†bò–HÊð,¬ÔÝMòÃ#Š…*Ƌ֕õˆ^‹¤H€y4–ÄöƃFÛÆYv|TüUØ›¶D¤o ¬)¯1Ï¥{[i:õŒ&¸^p|äužñ(럾¯à(‹ÜNz&Jäûiëè˜yš‚ò™vºŒð½…åÁäÝGçÓ‰µ-é~‚|&íçsr Öç¤Ä—Äã8R_Ÿ¸fÑ™¥Î%³ÖÅÃñGE  exVêîÒøâÑ[JZ¼(/:Ù’àP ÛØÅJx¬£æ�QŸºv0׈F¨¤óÛ’,g)DžEÿºcÒ4tIîždò*yg<JÜŒ$TUqÇñiØïm9¼w߈Pe‹ÏÁCéÞ|Û4U"â~ PByxGNúoÛàÖà;®•ôîÜ6}?*ŸC÷·Ü¾¼×{Sî¸OcÄ H5|}>àšEó:%Õ±:Íoô)E/ó²rw—¦G„€ó8…yÑÚB£bY<´HЉ@„èFÇœN¹]†Ï%Ü×Y¿”P1Âèàð¾Ü;B°xº*hL‘ŸÇïØùDž -= ®ó½÷¶t%#ÆÍ9’¦¡‹:7Œ¿S œ'ò:Ï$¢‚cÄpè@¬àÙ±r[nö¡å‹/ˆßÓ#éuoHËY®žß–N|Žó48º+»»oúV¾$A3ž°Ì™s^Ýñ¯•`•+ÆÍýì÷¥÷¬qkÜcéïwîG n;* ³úÇF5YÔ77røú|À5‹ \w“F>#ÑúTmŠ\†ó`åî. )>¬¶P/ZY�êÍWB³¬IW„¶È˜¤-0A£‰ßÔ2ID¹å¨×•NëïØúsÒêÀʶR`ãªì´Ì} qŠî¾kñ» ×H Ù¸9G&7t¡ÈPsÁŒ�çɃ¼Î3™4á•8×C´]yÃsé˜cNýýÔo æŽÁjî8¿»†ê”Ï´–DsJç‚Ð× Ê¬KJ¼©ÎAø´»Þk`5õ‡k‘çÅÆ™ûÛsù5e#2-‚KFÈÅFªN¾>'p½¢’¦£Jë)r΃•¼»47’•W¸mçþˆ¯‡ä÷–ý†+9°É5b:0ÝO#]\Nˆ9º› (Ö¨¤l œ ):Р»†èÿ߸æ­ €OŠ9G&5t‰õpŽ<Èë<$OŒxÂä™›—eûnOöýÅ’ƒïC[¹–HQËΤ¥³\ÊÝú„ ÿí—ç$í:vZ ugúAz\GtD¬kÞ8 }¤ã=Â2l:A·¯ËMÐЪ°’µ{š‘!HØÇ­ÏĆŽhò*,WÄ·” MìX´( FQ”T—ÆSî#ïðnš-#žü‰[³ô[q4"Ö-ø »ú°ûVë ®0gP×µ`›'žGÀ+ó¾x›jPD¶c#eøø¶lï¦sí—…•­ÝÓÌ …ô§ßöD:¢¡€Zaœ«1¶ÄM`ÁL�?gŠVv&­9ê’î˜æ‚u=_”ѱæ€u«e„,žXˆ‹ªa°´ÊÙL÷‡QŸÍç­EËŠ³…Y„óWŸ²c0ð&,ÞÜÍœ×H†ì™ÅZÀæÍJ×î“LÍwLYÂÿñÁÿÊ?ÿþQ„P@­6hnË`ù—|—tÄ(RÙIkyBÊ×uçÇ¿Y¡®*ð\ó’ ]XoíÉ·.œMþ�ë²:/ŸùÌoØíVF³ßÆËò_¿äÅrâ7o ¢º4ŒÈ°îÿ-L�ëÅ]z"tŒ¡¶P†sâÙA0OÔòT¦<EbNƒÐäû®<4â ù¿oÃ&üsêei"îDƒ_p5Ÿ•zýŒl¼¼#Wá–«5äêUƒÔç¥ñ‘Ø6ÜËwÐi€+²<CïzîœæÛq8õÄòy®.õÚ¯I«ý¯c±‚þ±z).Üë­^~Ö¯J÷ó[ >jq[ +_»Zâʼn'—ÞxøŒ›©œT |øy×yHõ(JÙÁ2,º®—0+y¾@4±à[w¼ p¹}Ën¯7š²½wKv¬õèVÌx£S9º¹#‡oK{ãŒ7e Ìy#œuÌZð[ߺ·¼XM½L;"؉Žc9ì4e³uKúwe·y9b ³y²bÇ_ÎJ¯»±0yn4/ž8;WoÈ—ÿ½?—Î%sî½ûÒÇìk¡%ÔZáŒÀC,êcä ±S¼:þ »~EÚ/Ç·]•½[a^‚gØ¿g¥ÎSó,Î_‘½_’ÍuĈÊc÷ž„Ö¹ðù?J¸W_”š{jn¿&Ýo‘PöØy¹C—ÄÊ×ê}'ú‘ÇÅ“NvK�Y6E(;iÆ‘n|íÐ?*G¬%Éqû#{!¬E¥æMX6ü©SŸsÒ“v»'ǶÁwÇääÀ»øí¡3ç=«Šüb®qp`~‡0z¸ç¹|íÀ”—ew÷¶šF‰"ëŽåUÇ i7¡½/ÿÏÈŸñ-¢°„îÊn÷¡o½ÒV8?ßV°½«,d^¾×7¯ÉÎóñm¯ÈÞï;áæžáïË>Ö•Œ<mq ïËZçìõÞ=ÿø½^“6FB[KòæYæ<Ôsò·¬•¨ÝáwAåãÄ“Kù÷¢HÙ €"Ëf™eÏÿëxŽKè¤þ£üOü£sAÞΕeȺmàOƒF]‰&³»µ¸ÔŸ—–6%Úàom9ËÄÒèð˜ç¾zFZ½ÿ6ø6ÐÜ vÑí+^~@`Åzè¤c¿÷ýyØ¢ h‡Ö›S%‚üü;ë4ÞØðF"�ü‰‹ÓÃ~O Âü9ÝÜõîÞÞ¶ÿ§¡p žá}#®Üõ ,¯ËöWåª=ö=Av¸CïÉGæùªç?HºW}+&=©E‹Ç¢2µ;DTš‰ß\Â(T"¤šP@‘e³¬²ãêÊÿ–¢³‰„Î)êʹä ï3¾ÛÍ6ÊëRß|ÅŠ ÏšáO5àD–iØ7ƒiS¼¹ájõçäzçš/°î˜dÝN‡Áo7¾Îo ,pÇ^«{÷‚5#ó§kIBž®KÿT­¥ �¬¸«ÕeóÆ|Lj¦õXþ÷þ‹lS´è)]Ü<h°€µ¥Ý<çí¿ÿûá=ùS³XaÛ6pÏmãªoMóò{ðÐ-³!ÍÎɉwÏöß×wŒ¨D|Ø—e£ñœö_ ŽM¼W%v½éu¼yùÿ“Þ5iظ2ïŽV…JÕîÚ•&a_ÆEUïß¼ÎCªÇ2ÊNÜewçÛÑÇêH7ân>ù},½íC‹ñI!˜vÔàâ°eâd_¶›¯D~_*W»c(n…„‰9iªPdÙ,²ì`‡x¬¨K£êKì¯ëÅyåwп.Û+æú™ g)‚õÈMÄ™´mù ?×Z×WR<JÖîYÝyHØŸÖ¨êWc0¯F…¬>‹*;°:eíTÆÅ`Y'qV½LT¶ÄããÏ*¢0-­Q«Y6ó.;°:!Ö3©ž‹'=øfT|(Ë:‰CµÂ 5OÔ¸„9£¶^ü¢-L«›ò é¼LLiÓ<@½—ez—`¥Âq£˜W~IyYõ2ÁoÀ´IƤ bª!¤ `ž»¬î:$3iŽ<-ü˜˜\Ze( |ß4MÅ‚„ s˜Ã !¤ˆ £—Ö]OˆwbýFÈ0PŠi]z.QHBŠÄ, iœËŽªC•�Ö~šÖ…— …!dY@8ÍÒdx!“¡€Á¬Ö(0Z¤!‹dVá„„`Ò(;BH ¨ Lt©„{s„yzjW­N„dƒ*Óû'cNÉB!i@½„údšùìtBa „lP@e�î¸Y{yH¨ð ÈèÞ#„d+)ÀÍ6«e‰ËT2=PS�3wB ñ èE²#„Œõ¬D£Ö«ËšŸIÈìP@Í�„T^š :w+›BêÔ IuÆ4 6 'Bò*òˆCÐÉÅJÑ*EHõ€ÀÉÓÚ„‹9Ä É ¨É[H!¡÷‰YÒ !«‹ Ï+4À% 'BæÔ@…5ë\,I =RôLi‚'¤üÌÃÒäcœ™?PsX^£eâ =KŠ)BÊb1w¢ õ ÎM×?!‹j¸4y»÷\Be ¡FS=!Åß>\ð°Íóû‡û²X(  *ºy¸÷\B/ÔM@ë!‹V&t˜òŽgÒÉÚe§‰åAµ$ n ræaÊ× ½^X§Ð ¦iŸüqà4óp×ë„οeBŠT@u•/zň“`Ï•é€xÁ÷ƒŽÉ¼;@H¨p-Z” )PcÞ.¾x‚ ¢…ŠÑ8kñ¢’sÑq BŠ TAqnEŠ)$ŽksVtRE`]B ¾½y~'%Š&BÊT XdŒERrn?Š*²j8±„NÃ<ƒ¾G%4Š&BÊ T ˆ™‡;áϾ¼=)9K]¤,8WË"-Kñ¡ÑÆÎ!冪ä¸Fî†Y­Sw3¨xµÑ0 q‚µ Š Y°*á›@9Äw± Ë’NÚÊÄÎ!«ÔŠ1KûÍ9¹a­r …Ƀ¸PZ¦U)žœ…y$„¬&P+ „Š †]FìÔ¤„ÏÅW¡wŽÆ†=t¢…U %””›y‰ýi“ �G>9Ý�!Õ€ªBhAï­­Arâ ½xg¹¢ÀZ=ð>ñ^! ñž!BðÞ‹(øuBùt‚‰UBª T…ÑóÛ,;N$kr b /EVñpÖ#$÷Ž\LR\À=!ÏÈ?ã˜! (Á5vEuûeI.°Ý%׈#¹†‰¤ÃY‹\ÒÏS?ç¤w14/«)ÄÊ?¬µ,„QP@‘±8+•k$Ë.ª&¥¸èBÒBÁÅj%¥¢Z&âÂG'÷n]Šß{Ò3*JÊÊåÄ’{·Œ_"„¤…Šd ›2ºþ–™œÛ1ï´ê¢vTº›Q@9q ±ñHW!d( Hnh‹F•v¦Å¤Q¨¸U‰AÞ„y@EæŠs9a…†-ïÔ™ª™ôübεJ!‹‚Š, XÐð9‹RRCÉTÝäÜn´(BŠ)$Úråb­(°V/é }Z’!e‚Š”X!´kP‹,Æ^#ÅÅ‘HíF);Pd¥qB óú¸†ÜÍx”Çpø*$Ĺgæb bÝ3¦0"„T (Bp‚ .¼tÒV/’ÄÇ2’¶�é„|'ÝBŒ3"„ñP@R`½ÑÂÍ%ÎWD!ŃŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2BE!„’ ¨ÊóHºÍs²Ñ>¿eˆã®4k¤ÝÿÀß0%ƒ#éÝÜ‘f}CZ½cŒ“¾tÛM©¯]’ÎÑ©¿±€¤¹—‰œÊQç’¬­·¤Wà[%„2 Tåy(ƺԚ]9ö· qÔ‘ÆÚYivùb@ôÜhI£¶&kk^ª5Zr£Û—PZøbÁþ^!:N¤×ªûû,X@‘xe»gr™†4÷²¢Ø²¾çHª5¤µ§ß¹W¶¢û­K£óÐüöDŽz¯Zó·×¤Þ|EzGO¼C'‘)ú}©ÔèÈ~D»·½ÖØ–½þ7¥{ååPØB0ï†û¬­mHsw_ŽFö:æEÒ3uéŒ4Z·¤â25á¾Íßï¶Ãw`ŸÛv·e;(Óæ=í¿¨¾í ÷=8”îÖ;¤P@U”A¿-¨pÛw¤Û:/æÿ¨øj[Ò=FíøôÛÌ¿7¥}OZë—äFïuÙ2•m(¶rr°k+W¯Ññ%XÐØ˜FqkOU¶®B':œˆZ¤€òîu½•V@4÷²ªøeC½£ÁÑÙnœ1ÛjCÖL¯¬™Æw£-}ÿ‡ÁaG6kM¯Á?¹/m¯ö™L¶|Èà@Ú ÚšúØ”·ó²Vß’Ž-¿¦L÷oI çDÀ9ì\–ÄCçÀ”PWî®± ¼gêÄ(6ÉþvÃä1úœ-‰÷mî¡·m¾QwO#$÷Z8‡+ÓØçš4Ü; ®aÞ[k_ T‡{N&P¤P@Uë‚êH§}EõºÔë¥Ù¾!e5õäf熴·æw³ÏÅ-iwnJ× ¥“}i¡÷Zß–^Ðëu¸ÊTW¶EP¡¤€J‹»÷è;JJßZ¤Ÿïi¯%뫦Î@À§!c>œõF7îÖ=ðî±ýŒÛÏ/“‘¼¥°ÜÎûL•€‰B $Ü·uÝŸM:Ø~Á/ÓæïÖNôÛv×HHV¯Ÿ“ú¹äß Y5( ªŠ/ n´.ÉÆXõª´6Ï'(×ûÓ ÷§°áIƒ£}Ùmn˜ífßúeiZ ‚n¥¿·¸Bk¬·Í=˜^ñú Ò¹õ‚gõJì›st¶< \×[ri{_ûâÉsO$%—å:±.¤{A~|ëör%itÞýÆï¤W¨9g·ç[Ìy¬uä‘r¥Ä,{8N»—Ìu·÷Ô;‰?¿e?â*Ë’o$\Ì9¬EßB@y(“—ÍŽÚ}½ò”MdÌÇ5üÌŒx\x®3pF6;ïxûX!qn´[;<ç®´]YÇ{ Ü–º<L*ˆ$å:4Y¬ÐÛw”•x`‰váÅ!­ñ¢ùÞN¸!« TE™Ý…çŘب¡}D‡­ô×}A`‘@иFÑk¼ÖýFp´gó`­^ͱëØÉ4n7Þ”=sa£bï·vY:‡žp@~ÙÅ<ÅxÇzæç»r`{äÃ÷âõÀý†88Çyóûcû{„ÀZ`ònw>ï~œÈ „F}S®ZW‹kÌÝ3Eƒ·eþí_Ç5¢AæņluU¾¼ëàžŸdÉ·%.\T, ÊËAL%(›/¼ëuoû^7. ;–ŒùHÊídM;´°F8–ƒö¦)‡xÿÈQ÷ÙÊB:¼w‰oî¾yª¬g,Ë–ˆ€‚ørÂÌ_“tß.?þ5ëMiGbG`gü›‡ô¢Ýäk²ŠP@U¿!×ó÷ÄV¬Ò @TdDqÊUôqÑáDšv¸ž±ß(õôåËåÇ¿Æ×u%6ª†¤Þ·L„Ï×½¤ò‘|/ú9:WÒègolâçþ>ʚ⹿Ü3õ@pÿ¾»)8ç°û)ú>§É·Ë§kð‘6¤Ùîª�fE¢€2ؘšçdÃèdÁ3‰ŒùÙ¸§ h·ñUÏ?#u”‹Œâ)¹¬;ñ欸éʲŦá}£î÷¤¬¿HFHíö´%Nãwf"¢ýš4‹èèk²jP@U–i¦1ð+ʸ°Šàöq‚ .ü߃QA 5ÔP¸äDÊ ;po ¡Ù‘›º‘HlàýàbטAÈ¿¢¶÷2”O“"÷§‰ç}Œ€R÷Pˆ€×=®ìŸÐpGîwš|»|â=ñ-\æ¹F (’ž¯µt÷\TVH!ßcΑHÆ|L*+ Õ¿ÿú ÒõE”gù|Ƽ—Çž²îNߪg÷˜DòµX¼‹QùÓØgê— 1Ìo”IçEÙé„.Ü÷e-VÑxGû\×Ô¶ ÷@HÉ¡€"Sâ7̦Áš:ÊY±"±*IJ Š8*ìÈt ¦¡uñ%‰Ê5nÞýš¿ÏG,2É*~ŽñÄó>€r º7uDOº ”ß𮣸 pš|ká‚£<÷V$FH3ô|ÛQ‹rwޏPGÆ|$••Óžl_‰YÚ” óʶoÕå4ë¨AWÖãå4òlò7 - L;0Ùå—t^ómoÇ,]jÊ‚ø}á~›­˜@sÏßSRŠ‹|BV (25A …Š- ‰»'@\ ø Säø˜€²"L‰Çà]éÍ^†FÇÄùh‘6, dðŽt6ÑH^“ÎŽvß÷24"Ñ4Jýw¢yˆç=~N0|QoÜýç§ŸG ü†-$>M¾ãÂÅàžUª('¾cbÉî§ï}ó‘TVŒ€jIp™é<' }ÿÚ©Ë+ëÑkEÝ©ÊrD@÷½¥B9¹`=NØßË•+)]¬î’CEf@õ|SÍåN×` ~Â1M» qÛØ£=ö=FÔíH羽}ŒÓÞ‹r9°JÄÜs~cYkîÉaïUiÁÓÎRÑodã÷bö¶‚ÒÜsddÕMÙîôýëÆpyÎ=|ΤûóT,nƺo>0×óGÓçôÖ‘î¸)òíž_L�ï­Ó Þ»sSiÄY¹X"'j§ÄE¶|ÏRïµ>\~­à „½{/¡8ñ®±>z”\%Ðzóï9°¥,ËfÇÀ]±þsV'ŒáJºo+ ŒÐŽˆigÒ£ “ēٯ»-­!ñ( Hu €"3c§;P39# ÏDî,Kn×{Vn{ܶì4ÏÙã;.N)dþ±.ÐÕoü‚sŽ©´! .µ^ ‡'tÃÒmðãK¢Õcî%Œ¬E_ŒxÞ×~E³êßæœ×¯ÝßÝ»Oá¶õÖy<?äOº;hì!ˆ0¢7bL¿—Â@è ùöÅfä\8 qä÷Hõ¬´€~C<*Î(S>Κgû+Ñ}‘°¿y×®íËãÈô1Aâe0þŒ\~FÆ!S5]„:þÌá©Ë²{.j_m býôï±dŸ“)Ã×ÚÒ{…="¨‚ïBìïP8( Hu €"d,p½œOpu”ˆ‰k¦¡Ž[J/tY6PA ws´õ¬XÀbùBñŸ)!$( ðØÈ£Ra-—C E�û«²Uha÷cS.%„Ä_]j&ÄBV (BF‚ü99¯ãLJ†IuynÓÍK#&i,Öe¶--·N[Á±ó)µ®…naBÈÊCEHŒ èy\,Pi@¬‘žãñ+±àjB!™¡€"„BÉ!„BHF( !„B2BE!„’ (B!„ŒP@B!„d„ŠB!$#P„B!¡€"„BÉ!„BHF( !„B2!òÿF© õ¶h����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8c.png��������������������������������������������0000664�0000000�0000000�00000056020�15030617045�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¾��‰���l0ý���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��[¥IDATx^íÝïÉ}çùþæ‰Öƒ{Ô m/lb x Ê€·»mÏ�a˜8¬†¶AããAå-áè%v©%¬Ê‰wcó¶€aÞ¶ÜÎSÃs„é>•g=Ë5Õë:zt4Ñ.[žõ´k0¢8T£=jQ=ÅïEDFdEfeVWwU±~äû$†]?²~LDä§"##���È‚/���rà ��€\ ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���rà ÓÂÂÛÈ7�˜Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)5Ê€I¢‰‚Q£L˜$Z �™)g×ioK¥X…ªÔwì­ L˜$Z �™æ#¤<•v㪬Öw¥co¿cikæûÓÛbµ©nFð0I´@�2Í~H9VP‘âBQªÍC{ÛóAo:‚/€I¢ivCJG[w¤ZZ2Ÿa¡P‘ÆÁóëïE6‚/€I¢i$!¥Ó–æV ›Õ’Ö$h?•ÃÝu) R¬îH¬V?v½,EV‹W¤Ñ¼%%ýï…sRn<²ÒÛ‘õòrj–¤T½%A°.õƾº÷‘4Êçì}Þ¶\—V"ûvÚMÙªÛ×Ó›~Mõþ¢û‚[ax.Ò–Ù­¯ªÏ°"Õæó˜tO¥Ý¼­ÞOøÜB¹¡žéH«±%yÍóRoyŸ9þ}tÚw¥f‚{öëu¿õÜÊminÚá=A_¿n]ʺÚ|VõøòMiÚÏš¥ß÷sVz?�0)´@�2 R:»R_vaKm:|ìHհŪ4Ýà×ÃR7AoY**ÀïoIyù%4õsmH4sÏw0m8Ñ´êçÃ×0a;1ÂÖ…ÍbE‚Ö7«²h»(¥`O:­º,›¿õVåúC9hÖ¢�˜=f7ºõsÝØâ= J‹ÝûÌgwaÚ¿M¿=;LÂÝn‚·¯c<¨ûL=”}õ,íþý}¯êv7ì"ùÿÅÿ~µ¾Ÿaè×€I¡i$!% Y:Þ•êŠÙ¯Þ¢ÞÐξ4*¶çÒõz7¥ºhƒ™äº!Ìk:p–»×vÉž^÷Z…‹ìëÞËŽ4*6|v{W»áW½NóÍnXOô>÷òCw"PzŸ©PÞ–ýæ-µï·»Xß'd½º!»ûÛRÖÁVßž¾Ý`Ü}¿ÝïÅÛþ{ño?”fµÞ~Æïç¬ôkÀ¤ÐÈ4’…½órcû–T.«À·ÈjÁ…¨ŽºÞÔ(lùÏ‹÷°ú½±…ÒºìêÔ¦ÂÙ[oÊ}÷ ƒFã½³Oe?¸¨Bœ£d=\`[Ú6FArùºlo^•ËwdO?·X“¦yÍ,^¯o2TFïK…çàŽl5ö¤ã½×ByC¶ë·ÌþýÏÿ OTh <VÙO¾_¿çÛÿàðo÷{ÝOñýœ•~M�˜Z �™FR¢�·øªT_C]ŒÂüñ°Ýà—èaí¼+Áª=u¯Ÿã…¿ßC™¼¯·ºÝ„À'Þ¸×%)Õîz¡®ÛSºX®Êëõf|,r?™¡Û_E)•×WËREêæÇ€ßS›ø ©ß‹÷x?àfôšûïÑ¿}ðïçìôkÀ¤ÐÈ4|Hé²Â…‹RÝz7ìEôœäRÆèFÍÜï 0²žëßn·bYêÁíÞ‹¼¢0¾$V«²åz¡O”ºcà ¢ûüù~ýÏáõÇ.T˸~nlX„·Ÿèv׫¾fú°»e}?CÐû€I¡iø’àœŒšÑ#Ùå]ܕܷýçf†Ã±áþ¬ 'ɦZêûÊø~²^?õ3øaÛ²¡h<°¢áÿhèÑ<Å÷3½�˜Z �™†)Q€ë d!/øEcM»cXõÖ. Þ›oÈ›Q˜Ô+²]±3-xãZ½Ðj»°¬_˜õƒdââ´“ô Ýží%Y lÏwÆ{ê>61‹BÚg‹ÆàêÛSê034T¤TºÐ–¬P’jÐŒ]øûŽÞ?�L -€LÃ…”A¤7Å—éñ<Ra¶*åòEÒô€äðþiìH«¾Ú š kQoiïPƒÎþ[²uÿI,ØÅWS çÝݬÕdÝÜæ…ñÔÞælþx]ôÛoÉM}[lHC÷»8y˜‡~l[îo½Žcnv^cNõ —ËR¾dç46ßÃcûx½ˆG`ÆèÆÇgøûŽÞ?�L -€LÃ…”>§ý#Éq¥zæ�o!}QÕµªÔÌØ`H %©í´Õßn¸ƒ?6Ö˜ËR®ßjtaZ¼'9¶ùAÏëµ=]ϧÿÚzQu©o÷ŽÙÂtzŽ(ɵêõîc¿GÙlzÎ㻲ýxðï)Ö›úžÊ7$¶¤ÑJûT~?CÒû€I¡i¨2`€ìÎIëfðzmõ)ùíV;ïHcë¾´šoHÝ­ÚæßoøcUð]߉ŸÎ?lɶYAÎ:õüÍ7¥åÍ4‘Þ ;ˆ>¯:ü"«g¹{ñY¡T“íXHõ†w¨÷þ�èî'þøn¯yئ`¤LM6À÷3,½_�˜Z �™)³J‡Þ7e³º*˦—×-í‡ßÓûÑ L˜$Z �™)³)š¹¡gŒò´¶kÑlý1Ê€I¢‰2›º«Î¥]œçÆþÒã h�d"¤Ì¨hŠ3}‘ÝoŒîSiï\/ÁòÃgA™0I´@�2RfØaK›ÕhXƒÛ ¥ªln%æð}Ž(S�&‰@&B F2`’h�d"¤`Ô(S�&‰@&B F2`’h�d"¤`Ô(S�&‰@&B F2`’h�d"¤`Ô(S�&‰@&B F2`’h�dÒ!…mÔ�L -� éûßÿ¾¼øâ‹òòË/Û[��Óˆà �C ‚ êͼ{÷®½�0m¾�0×Ûë‚/½¾�0½¾�0×Ûû?ñò3?ó3ôúÀ#øÀù½½:ôþØý½¾�0ž�pFþØÞ_þå_–/ùËôúÀ#øÀø½½?ù“?i‚n«Õ¢×�¦Á�ÎÀïíýÅ_üE{«Èg?ûYz}`J|à”üÞÞŸÿùŸ7!ØÑ½¾?ú£?J¯/�L!‚/�œ’ßÛ«gsÐAØwéÒ%ùä'?I¯/�L‚/�œB¿Þ^G÷úºáôúÀô øÀ)ø½½z{üø±½'îÓŸþ´üøÿ¸y ½¾�0¾�0 ¿·÷§ú§ÍôeYtØ¥×�¦ Á�ä÷öêiËÜfYÛ¹sç¢ÇÓë �“Gð€ø½½zÓs÷êÝ“6}ñ›~<½¾�0y_�€î±u¡÷¬½¾�0Y_�À{ï½—:œAo~¸M»ßmz�€É!øÀüà �˜^´Ò�0$‚/�ÌZi�Á�f­4� ‰à �³V�†Dð€Ù@+ �C"øÀl •€!|`6ÐJÀ¾�0h¥`H_�˜ ´Ò�0$‚/�ÌZi�Á�f­4� ‰à �³V�†Dð€Ù@+ �C"øÀl •€!|`6ÐJÀ¾�0h¥`H_�˜ ´Ò�0$‚/�ÌZi�Á�f­4� ‰à �³V�†Dð€Ù@+ �C"øÀl •€!|`6ÐJÀ¾�0h¥`H_�˜ ´Ò�0$‚/�ÌZi�Á�f­4æ–FØØØØØfsF‰…¹“Öp²±±±±ÍîŒ ¥ s'­Ñdcccc›Ý Jæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿P0«(ÃJæ%òίÔÌ*Ê0ÆÒ„¹Cc‰¼óë�õ�³Š2Œq 4aîÐX"ïü:@=À¬¢ c(M˜;4–È;¿Pð<µZ­‘m~N»ž·ÇÛo£F‹ˆ¹ã7–À´ùþ÷¿/AÈ‹/¾+«lgÛþöoÿÖ~³˜$Ö^~ùe³}ö³ŸÉæÿN»^7ýê6ãA2˜"~%gc›Ä†ñú‹¿ø xõÁM…qÉËÿW“¥Ë± kwïÞµ·ŽFÊpÊõxq¤›"y«Ü˜.”¿ñÑÀõ„3ðæ arô©x]žõ9ýÿ@ŸÉÀhP®Ç‹#Ý!x`’(£çŸþuo“ ï—¿üeïQ®Ç‹#Ý!x`’(£3ÎÓ¿è" <?:à~å+_1턾\|5>”ëñâH7E˜$Êßðtøüç?OoØsB@?ÿbLïóA¹/ŽtS„àI¢ü;ý«¿C}À"ð>„ñz^c"Žr=^é¦Á“Dù;=צ¿;zÞ?Âxp1ædQ®Ç‹#Ý!x`’(ƒóOÿê¡ ÞÉ ŒcNÊõxq¤›"Låo0:púw:Fƒ‹1§ åz¼8ÒM‚&‰òן;ýû›¿ù›Þ)A@Ž>S¡/cNÊõxq¤›"Lå/¹:ìÒ6}gã.Æ$ðN'Êõxq¤›"Lå/ÎþÕá€À;§£.sñN?Êõxq¤›"Lå/¤Ã�sñÎÂ`¸s¶P®Ç‹#Ý!x`’ò^þÜé_ý=èƒwúNÆÅ˜³‡r=^$­)BðÅ$åµü¹Þ0ýù9ý;[Ù¸svQ®Ç‹¤5E¦+xH«±%ÁfUJ…óÞ­ Åò°bÖ¯JµñÈ>þ‘4Êç¼Ç¥mËR®¿!ÍöSûœ3ê´¥¹¥_¿,Å…óRoÙ;0 ýÿ(O¦ûôï0õéHZõó)·ÛbUšÇö¡1§­ó“G@èõÞ{ïÍÀŘC”ïήԗ )·ÅjS¢â}Ø’†9N¸ûÕ>×w¤Ý±÷O)Êõx|§ˆ®˜“§~Ûµî¯X–úVÓk(ÔýAÅ6$k´ý#hG›µn#S¨Hã@?Ñ޾ý¢ûg ¿ )ûå庴†jÄžJ»qUVë»êÝO·N{[*«ëC~Þlúû̦ûôïõépGªE/ +´ì¾aêüdzé2=ßÉ0å;ñ\óã,Ö¡×8>ziIÝ·$¥ú9Tmý~pQ êñ…Õ@öÇÔŽŽåz¼¾SDWà‰:Ü• ¼œÝDl’ÒsÔiÕeÙ5F±Pº'Ai1Ú÷ò0A3: ¹Ÿ¨-Jµyho›Fª‘oRVŸ9Ö›1b/ÏÙ,|Þ¡êS¬g윔ÓzjGPç'‰€Ðk–ÆòS¾cÏB³Ó ¹±ûÚ”Ìs¦ûL!åz¼¾SDWà‰‰õ©`e»ÿé ƒ†T* }þ)Ödcå7d‰ÓQ§ÒQ/] ´¬ƒù‰t¼#UÓ öÓÓhN‘ÖlWKC~ÞÁèï"O¦ÿóWŸúe$u~²½f'øS¾ãÃy åd¹<”fµÞïÿX‹‚ïtwvP®Ç‹à;Et%ˆÎ»¬Ú¨·bMš©½>žãû²~3ñ+¼_S쾌ªTO¥Ý¼iz;õø¬Jã¾l»±a)óN{GÖM–>ß–ææZâ±cËC&NÞOz òzw\Y¡T•Í`Sêõ7¥mâë´›²åC+^‘FûÈ øþ6¾ž ½ÿ<™úÏ;T}JŒóM UŸ0B¯™ ¾Ã”ïË¿|VTÈ}bn=nVeqÐò>A”ëñ"øN]IŸ?¿UoK²¼{¶ƒ›?þ6½ÓNz¸Ñ9Ýúªzžëê÷+¿#‡»ëá8EÕkVd¹h{ b~?)ã”ÞOš'ªÁ]QUﹺ£šß>Ã\@¶c/£FyaQJÁ^ø¨×®{Û¸èÏ—'Sÿy‡ªOýN°ÎO¡×ÌßaÊwÔs«·´Î€D7ûx¶Í…U©ïNÓy‹^”ëñ"øN]AŸ¿Dè =š© M){7WÕJ5ÙN½À&I_tv%|ž×ð¥…CÍ\øez…S~Ý'ü~oAOOï)ö“æ¸)ÕÅäcõwsE… /¸vö¥QYVß·»pÃÿþÜkû}ücÒôëäÉtÞ!ë“*zN뎪ÎO¡×lßaÊwâ¹YãΓg5Ì,Œ1ìÓ…r=^ß)¢+çsµpë+5¨Ä©ÕĦO÷Ͷj²¸ýÞ¨¬ èzYÕëxWëvkâÀï…‚x/ì)÷“ÆÕ~ÏÂAS÷Ýs]†޽ öºc-½€ò.*Ò¯“'Óýy‡©O‰` ¶#«ó“G@è5Áw˜òÿá–^~õ™¶7e³vI–_²íq¬mn”ëñ"øN]9Ÿ»Ø)£´ÍøEþkpbc®t(ý(~ð=qˆ€ÏkýƒvFOmw8€?N,c±PWvºýdIœ¦K™Š§³ȪÞfO¤Õ¨Û1ÌKRªÝí6Ì^@áD¿NžLõçª>ÅCEOÙUŸ„^3|‡)ß±ç&Ænˆ\xæ¬{/ëñÓ‡r=^ß)¢+æs;%š5Ž49æJ}MÌ«èL]@Œíû§ê3Ÿ•z·§v€ìN£~(ðÇ÷žv?}ô½p(JÂûËRn÷LÔþ<Ç÷jú½äÉTÞaêS,¤ÛQÕù)@@è5Áwˆòíz×-·Ý³vøœ¿ƒ¶ãD¹/‚ïÑ•ò¹‹$³‚ñ°Ö;µLüÔj7¬ú§¤Òz–Ò¥÷¼úûònO ¦þûI¼®ÿx¿Wá´û9I4yº~îIï7ÿŸâGÃôkåÉô~ÞáêSÿ` Œ¤ÎOB¯é¾Ã”ïDÇA²g8*Û¶ûSŠr=^ß)¢+åóïÙI=•;P¦*Êj°²¸~Ž¥ةâ1µúû )¹™üY¯— :8Çæ'p|ïi÷“æàžov¿ÿ[´Oo|eÿïÃûNŸÓ¢úµòdz?ï0õ)þ˜ôƒü(êüt ôšþà;Lù>!G=ÉÉ2Û¾3Øqh²(×ãEð"ºRN„ß;™¶<¤ ÊNì ™èaŠ=7ciÕ?ø†W§ÝÚRu¯¡{Jß–­Æžº¯{ÊÌ4hz¶„Ëe)_²«Q™÷ûXîo½%û¿aµûÞK¶î?‰z;y?ö­&èž¶•ØR˜n.I¯ö/,ŠM«£ç+¾-›µš¬ëÛ¼ï-|?{ÒØz[íq|ôkåÉÔ~Þ¡êS<„SꥶÎO B¯©¾Ã”oÿ~oæHԾƃot]EO žN”ëñ"øN]™'¥Ó¾+5w ,–e=º¢61Ö¯çÔR[vjne1µ%«X#7ØUµñSµjÓcd[›Ý`Zº"ÕÚí0`Æö¯7½ÈÅ]ÙtçJr­z]¶Ì{òCµžÚF…éz3 §ÚOª½ Ô\¸ˆñíÎѳùA8 âê;+¿.õêÍÞ¹,GL¿‡<™ÊÏ;T}rKpÛç¦õˆyÎ\ç§¡×TßaÊwlym½¥ KãýÈëóCpÊP®Ç‹à;Etež(½ ÂÖ­îR¾þf.À d+:8ú!²wë#H¹˜ë¤aQã¨CŸ |ú¢š¨ñRÁ²zÇ›‹Ñ›ïW…ÓÚŽ~Ý^¯ø<Þâ:ø®ïx¡á4ûIs$ßjlËÃÖŽ· [ò½Z±eˆÃ׫n¾œßX»ï`Ìô{É“éú¼ÃÔ§Ÿ•Ke}»›¿¥ëTu~úzMgð¦|Ÿ°õü0ÓgÏ‚X™6«g6Z3z5Êõx|§ˆ® À¤ä­üQßf¡×ôñÅI(×ãEË?E8c’¾˜5„^ßÙG¹/Zþ)“DðŬ! ô"øÎ>ÊõxÑòOĘ$‚/f ¡ÁwöQ®Ç‹–Šp Æ$|1k½¾³r=^´üS„1&‰à‹YC@èEð}”ëñ¢åŸ"ˆ1I_ÌB/‚ïì£\-ÿá@ŒI"øbÖz|gåz¼hù§bLÁ³†€Ð‹à;û(×ãEË?E8c’¾˜5„^ßÙG¹/Zþ)“DðŬ! ô"øÎ>ÊõxÑòOĘ$‚/f ¡ÁwöQ®Ç‹–Šp Æ$|1k½¾³r=^´üS„1&)Á×`ØfsÓ!Oÿ]ŸÿüçMÙf›íí/þâ/ìÿQŒIkФ~6¶ç¹å‰>°$ƒÛìmï½÷žý? �'#ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/�L©Nû®ÔJ—$hÛ[p6ÇÒ.I©vWÚ{ƧӖښ¬{öœY;ÕÒuÙi?µ7`X_�9·'Ai1e^ã‚Ëui´ìãtxZK<f- ¥æ@_’‚¹mIJÕ;ò°qC^kÚçvä°H¹X°ÏS9!„uÚÛRY^•ÚN[=Û:lIc³*¥BQªÑ¾1Ã] Ê+R¬lç'üªÐTŠ•W·-K¹ÞÖ¡û"Rê@)]òN[n¥³/Êùøã(·C8VP‘bñŠ4¿#AðE~uÞ•àâuiÒ™9’Vý¼:°Û +O¥½s]¨ÕÁ¾P‘Æw¤?hHYÝ^(7Ô!I{"ÍêŠ,D&õÜæM–»yó¤MèRa¢Y“¢ ÖËõÝn¨õé²¹Z”Õà]ïþCõ:E@ƒèìr±ÖT?Y¬ÔïuÎuv¥¾¬‚« ²úïî´nÖ:ª˜VÔíç¤ÜxÞtÚr«Êþ~pQWÙ@¹=µžcSÚ÷г"ø"§d·¾*…Å*ÁŠëÍuÁWslÿ6å¸)ÕÅY¬Ú@eƒEoˆ¨IÍäMÏÛ¢”Ü©_³¬�aÈr]Z)¹ãfU ';| õÒR÷ÿ“aÃ[òÇÌ\³½¹.øj¶ ÇnSzÊÖ©Ê­b‚òy©·Žì ]”ÛAe›w¤Z|©û£gFð Þ/jÝ™SzËêïÕÈ<±Is ­íZØ«¥Ÿ[¬HàNë¶d»êNÝêS¾7¥iz³ô©¯†ÔÕþ¯r×ÞÕ½]ûïvO÷V¥¾«÷¥{¿©–^’ Õu©©‘~­BlÌRò}”e½iOïêSdõ²K·¤ézàbŸËõ®ÙSqÑsÕ>uuûEÙl¾i_W}ŽêŽú¶lâo6¯aGN%ƒo·L’½,Éà+¤Q>§ž»,åõôÓÀ¦§Q•ASÇž˜ðµ\Z—ÝèT³/Ü_<°u*@ôÔãÀžÞÖõøŽª—a}Œ¿wWw–åZp»[w*Û²¿¯Ç»:lß§-Í@ŸÆ¾ ÕMW§ÄOlO^‘Òæ½nûQ¬IÓ}7zÿëª H>·_Û`CoøÙôæýx1áÌëÕœ{‰àý¿Xêéùî)[§*·ö[FgÂhÊmÚ}“86 QnÏ|l Û…ølœÁwnèSµdùƲ¹öªªØTcw®O  O %Ø×ýk²`¶á©[w`3c u°Ô•úàaxÚLWJÛ€èÓ‰«ºapÁÙîËTP{Z8lPôþŽåpw= ¦«ÄôÀØÆÈŒs¡ý}{úY?_˜ƒ]9t ±mÄÍk/&ž[¨ÈöÎɲyžk4ÂÏ�íz|aôŽß-”ª²Ùh©’’Ð|õ1® %©ÍÞ�쇱ŒÞ\Ãì?ûÇØÀÂÖ•0¸Ûzæžgê¨jêÔçS qÅœÂÖ߃VÝÖWg]ÝquIÕa³/?ÃŽy¼ »fîàíÂå€í‰m?ÂöÄ}~{Š7ñÜBù Ù9¡mHûÿ ƒ`Ö‹ù“¿«Ç oxc×»RËÖ åÖµ©‰^dg$åvZŽM;ÿõŒå¶!Fõë´Ç&ÛFqÌÁw^˜Ó­+r©R•u]IOêÕ0_L?eeNoùÏMŒýê9 $$‰†äé27žÒœnüïæ±aCcÙ)¼-Ù˜ú‚—6^Ý-l$ƶÛÓox ¾ðy=¾ûß ”ûQ˜”¨¢žO[£˜p\¾"õà–TÕÒÌ‹¬zêKÜ ¢c°i§ígî·½Öö¶ž×0ï)ù·{ÉÞrÅþ1P{â}^ÿûuãS“uÜÔÛ~mCb?æ~'Ñ>ͽîçÝ·A°ç,†•V¶.·'|¯Ã—[e ²ôœŽMg.·î»8í±)¥žáL¾s"l,Ü©+Û¸›©Ü^åÓ•>Yi=© ”ß@ ݸxxï^b_šÿü~7ûï¾c!OÛ¸ Ÿâ×S”zÊ‚wŠ3z~b|^¸wz3¡§¾Äe×ÏxßK”ÿ®´²ÿü=¯aöŸü۽Ǵr·‡ïã¤öÄû¼þ÷kþ5¦´_Û þÌüÿ”hŸæžÿy홾”aZÏÿ÷Ó”Û¾×áËm¿}øeé9›Î\nÝçè~ÆøçÊ:6¥Õ3œÁw.Ø ÀÆù=2ö&' ÑñJû>tãbUëŠýÔþ2öÃk¬7ºßÁÍþ;£gîl ò)yPéÒÊåfâÇW¼|õ°mkT®=ÉjBï¾Ò…uÖïsÜ™¿WÍÞfëaÏk˜:œü۽ǔ²m_ôwôt ö¤_€Èê¡ì×6¨?{þ?9ÉöjÞ%Úc7$$¥ÝLþ?U¹íùÿ7|¹u÷MɱéÌåÖ}g ¾³†Fð º1Zî M¥;'—êÛrß;ÕçìËRiìÛFDí§¶!­c×0ÆÇ6E•86AI†hûwÔ`˜ÆE=>6Þéœ}¿Ý€o5ʶ¡M„zWùÃFOïÛ] Ç^“õÖGö˜;¸»Sb‰Æ¥P‘í‡oÈk[½½È“”0èBò¢µdù7Ó%ïâõTSÆ£ž±¨§Ìž&NÞ–ñ¬`6h€è^˜ä ¹8xSjë»rìz´Sëdâô±’ #ñ�â‚oFŽ‚V¿öÄ 3öû ?¿ûÿâ],§ÇœVn©ö Ûà‚H¡|[nÕeË…<Û>¦«¹”lõMöÿìBâ´ÿï§*·öùÁlå¶3PYòêæ8Mg.·î{>í±)¼½ÛîାóÀT8ï€m*s·±ÊÔñ'ÝW›kL´hf}ŸÚ—»ªÖLÜ©©Åê†lè_Л_Öîý”.˜Ó¿±ÆÀ8'èvÏq"¸ ÚW]‚ØßúW»jŒ¢+ºÕfò§¦‘µ·©_ÖÁÕØßjPË&ºòÊöEå£Û‹sû9)•~É{œÞtYzG•Ë-iÅfIH–qUNýÙGôýÕ;Ý+ÕcìÐ *!0Ýkû=UébÝ©­[Ö;_˜À^ ¦î Š{ u0ê&¤ÿ­ßÃ;ö}Õ÷cëg¡”XxcöDíkc#þ·þ|±vJ?WÿÀx<@Û`çWŽ‚KÈ„v7 lÞÙ`}/Q/£ uööÅóR:ï×µ¹öuàr«$EÆ(Ë­2 Ǧ3—Û§‰úuŠc“ íLg6 _ŒŸi\Nnì�X¦gkVZHê0­fê{Ea ž™…fæØ4cßë”#øbüì¯j\€þÂÓ®+QOìôrÁ7ÙÓ7eò¸dñ$˜áê{v=±Ól&ŽM¶×91K ÎŽà‹ñ2 ‹;C¯/pá)ßKSÜ“š<=­½¾ú}^JœÆÆØ˜Óük²:Ííý¬›Ôû\-ªa|�� _���äÁ���¹@ð��@.|1c’+ñ�êfeƒ!ø�� ¾€G¯Ôu±Fð<Pß03ôâ'¯§.ÇŒÙBð½–zi‰SeÀó@}ÃÌ8Ýúª«ß9@ðÒÚ®I©`'ävkЧÞW–õ¦]Gÿ°%zYŠ‹W$¸{Ý>fY*wdÇýíÖº×ë¶R-½$ªëÑZê…hrmõ:º”‹ç¤T¾®ož¶Þ»÷úáêTúvõš›7¤b{Òo嘆ÛzyÙ;XêÛî¨÷äÖu_–òúŽ¤Þ½Ÿ‹²Ù|Ӿ߂«;½+aÙƒp¸Þ-|½CiV‹ám¥[ò7}¿ ¥Ó–æºúnÍ>ºkµëå'Û+áíÅ˲Y¿*µæt¯Í…¤>õMÕ©íjïýaYµå÷Z wÝ:þzE¦ýw»ëúV¥¾«÷uÆú–Yî²êUVyL«o´%ªn4£¶cEªÍ'æ™1§­o¿þ ‚ªÚç©nº×Wí’· E§½#ë꽆ûðÛ¼×·>euÿŸy?6¨ÇšÐköÑ»öØý¹1:ß¹®ã](\”`_UžÃ©ªŠVHUù›5)ºƒ©YNRôé}iÕχ•Õ5`f-{]QU#a–J}¢*ôŠ:W¤±·-eÛ@Jë²{¨ªûîºi� å†<nVeÑîË_ _ŸÎ\]L¼¾ÞßÁÒ(¿d—‹ N+æ=?J¿ý¸)ÕÅðõ£ÆÍ|VÕ˜ºÆ×àÂì U—å¨aÑËg…ßSÖêRvÿ݆Ó~öbMšné̓†”WêÒúPý·Ïwq`ÿŸ,šû:QcfîÓû(Øå]Í÷±ªþ_|gG¿ú–™°Ltÿ¿›2tðPêËö�o룩º¹0b÷Õ-'Ùe,½¾õ)wYõ*«<öÔ·AÛÛv¸¶Äœ×·?’íŠ .h¹0rNÊGê½è×*&Ú{_®ëdž‘ÔL°z|ÇtlÈú|á+`D¾ó ³«¨‹¶²$…Wº†•ʲÔð¶d…¶K&ÿv ‚YæÑ_Þñ(l McÕQÇ2ÝÀ½‹½ß42þ¦óŽªäçTãP“í¨BÓ•?ív%v°´ï;v(|nüýt³Þ÷çé9+æ»rµn°*RÑS­ßwñ¡rüM¯Ã}–ªw¦-{ôêWßL™°Ëè¨"¤C›½­§Œ%¯DÿŽÂâië›yoåî8£^Ù2žZcïwÀ¶$ ºÉ¶%áTõ-Ñiö³ê×þ0 2ñÍì»ßç›wFslH+Ë™eU9ë±!«Žb¤¾óÀTx¿’yÒ.±ƒë°[üþÞÆÃîYýîiyõ©¨À;ÍåNÁeÝ®Ä>OÚ5íý ظ¥~WÞ/{Ýc·r¹Ûöû.öî©}28ÒRd÷4—îqè}¦TŸú–Z¾ürÒSÆN|O¨ofÿYå.«^õ)þûM­)mÉ0Á7³¾%Ú!£ûÚ{æ{°½º=r\ßÌwœ^VÓ¿Ž ©Ç†ÔýãØÐçóad¾óÀëùè©"®Èo\b½�Ã6nö—¬}|fãæNµ¥zjLJ-%~¡§ÜkÜ\À³·ÙÏ{ªÆ-õ@ ¾.Ó›tN.U/ËŠÿ÷û.ŽÂ}VÙïmÝBzœ—·èzX0úÔ·°¬Äjám¶Œö”±Óßê›Ýßr—UßÒÊ£ÿ~mK† ¾îûJÖ·D;¤Ù÷£Ÿd¾‡øiôy¬o}ʪ»cCXžú2ÊòØŽ ™Ÿ£@ð v— ߨ· ÿ#iÔ6Tw÷¹±qªBé±NQc?ýUÐäß®1ZUÚØø¤sö€ãNëÆ°qÐÏé^è°[¿&ë­GÒ¬•¥¶£/f°Ï5¯{q»z?öTœ;Xº1’ýßküÒß_Ä…†òmy¸U—­¨1¶ßQ¬Uú~î{Sß»»�G_ÐS¹%­§M©­¹ïžÚÊËx.ô©oÇvdbÜdt‹JV’Á$FN]ßú”»Ž:x§Õ«Ç;Ùå1VßlK¢ eÿN„…È©ê› Y¯í¾·B)ú|‡»7¥²®œzüÖ7Ž #96¸à«^kûáòÚ–Þ‡–VV•³²ê¨ù¾1*ßyÑiw¯ ×›;ðþ©>ÿô‰­ÌîöÅ«lèƒKÆßú×ñßl¨ ]bé‚Ý_·ò†¿˜ÝcýD5¨ÑUÀj‹®ÜU¯¿~C‚MûÞ¢ƒVÆíö@éÞOØÀ©Gû§†¢ /’ïgM6‚«±¿£ž£ˆ=uõú"¿gD3[úwaÄþŸèS¬öÊÝãû²þÚ†lÚ+ÐcWûb6ô«o‡»D³ x§Ö{Êï†lèÞÝŒ¿MÏiŸ2–Yß²Ê]f½Ê(©õmÀ¶¤T— ö·ëö¦¾¹à[”RÉî7j/BöÝè zÓ¸+øó^ß86ØÛ‡96Ø2©îwa6vû¨Ž ™Ÿ£DðÅé˜ íŸÂÉýËû²¬$Çdåò»ÀsE}³R†:`ºPV»86L5‚/NÇTè¬ùsJOã³VÇïÏõÍrÁ7qJÓƒ²Úűaª|18S™Ýé ùÿ5ëÆŸÅ&uwrö]`¨o– ½î» ×wêPV»86L=‚/���rà ��€\ ø�� ¾���È‚oî$æg4›7Ç`l>ÄÄÀüÄ\‰ÑÆÛ@º´:ãÍÍ™œOÔ¿h+~_wc±ŒÇäÁ7—«¤£I¾w×¥Tð'×˦žË¸Uß·â=VOB•«¬L~Ñ+S­JÁ_ÍÌ\ž1S¾ÏìáŽTË[)‹A�£À±óà›K~ãæVÎñçǼqë´Y:�½¼:ãVlòWz8øIëæFúò¿ÀHplÀü#øæ’?/æ’”ªÒ0ËT:'5nÞ²ª™k›yu¦P’êæ›áÆÎIÁ7ªkjó{‘ãØ€ùGðÍ%÷«þŽÜ«®Ha5ýØ0¬“7~Õƒ³u¦±-Õâ9Y ÞM™ðž_LŽ ˜ß\òNgé1ƒ=ãÁ7�'quæ@›5).Æ—88øãƱóà›K^ã¦/`0ãU©ïºSZÉÆMõz]*ëzÝq}_QÊGÝûWe•5É ~ Ðü¬H¡´.»n¸C2øšqÀWe]«Ô÷ùWÆwö¥Q¹ä¹F‰cæÁ7wâSÖ˜®ó®«KÞØ¬´í¼Ô¾•>e¾1Ð+6ÍS8æ±³ÈjÁ¯?)Ûr]î¤Og¦ï‹.ŒF†còà ��€\ ø�� ¾���È‚/���rà ��€\Èmð}vôDÞo·¥ýþ9zöLŽÛ÷ä_ûùïý­|çø™}Ô¼ÒÓÌ\‘¢¾ê¶P’Ú›rckOŽ›þUäk47º«Fé¹D÷ô´Kî~½-I©vWÚO“W®?1SâD+Õ%H^-»‚¸(W«å”+Ø¥´±‘~µp)¶ý4���ƒÈið}&?|ø‡²üâªTƒ¿•CªÿúPá®(¿ºò?Ê˯Sæz–ƒ†” z^Ñ'v^ÐW¢yMøµæwÚ;²^^–Béºì´í„ûÑ„ú9lR.¾dçmôç*ÕÂù »UÝ•ÄÄçú1—£çø¯­uZ7¥¢o¦„ò–¿ììJ½²EðÅô‹Mgæÿ;çÍwê<’FùœyløãP×Á¦úÑX’‚yþ²”ë¯K¹ìʾúÛ¼©ê`Áî_Ý쪚¦D¯{ÒëlÈFl™Ù…x}GŽÄ§3[8_Rmý e(,«zþéfP•’™ª¯ ÅòëR/_‰æ§vÇ“pÿúþ \º{à²zOöü½éŽ›6óãTr|;*ûýù_#°üsðÛò#/¼,Õ¿y,Ïžý£ÜüÿMÞþØ>t™à»,•Æ~Oƒ…Ï'zÕžEYNN>[I*l(ÆoÄÁ÷à-©oÙÇÆ‚¯jëw½˜!‰IÿÝ>1¯›ß7 få¬Ån@0·=P?ún©çÙÅTØ ë±û!ª_݉‡ß“^ǯ»‡»è»å†¸% '‰v{à2.̲P¬HÐr%ç@vë×Â…X\Y®lK[ïÇ–³…bMš~ø=ñuÂ÷þ} ­ "E`�9 ¾Ëã;Wåß¾¥‚îÁ_Ëç¶ ŸüݯËc=Âá‡äõÒ y8ÏÁ×4H«RÐCª4½Þ> ¤|é¼”ê¨Ϭ$®äÓioK%Öãï92ÛiƒoôÜÅޠгO`¤ßÕKR^~E•ý'ámr$­õŠ”.,Ùƒºú»~^²êú¬Çr!PõúŠÜsz-þ£5yæy’|(CV]–S{lµŒ²l:`ìs.«~ðÕêcƒw6@~Çøü7ùÒ§M~µø YøÄoËÆ?}$ÇOZòõ×>-ÿ*½º‡¨!usê©ÛûÛ ¾ú׸ÿëÝ2Ë«ºjÇøš¶,~ðt T<ø.'zS‚¯=àvößZZ¯^I¨v›à‹’|×nJC…(¸ªP©²A±§x³~ä™zèý8´Â�bëÊ@¯£é÷÷RøC× }¢Ç7¿R‚ï‰eÈþàò—ÝŽÑåk±·,Ûof—Õðý…K~…תÐã‹SÊmðÕžµåaó›òŽä™|,‡{¤ÙlJó›{r8ï×·EžÊ~pQ öS7|Ú^áäªØPß Á×oÀ4}Û«Ñ’–™=M~ðfNZðUõB÷x-^”`ÿHã¯K­¹çÕ‘Œ°à |Oz;–ýAËß<K ¾'•!ûœ¡ƒï eÕ½–í|aŒ/Î ×ÁWŽ?”º·-·ßþŽtž<”¿üËoJû(UH4£Þ\p{‚¯~  ÅþE3g¾î4l8LÂ\˜³s]JËvŒ—BðÅ|ʾf\ä+²|cCn¬­«úçÿ8ÑP‡_GKÖ]äWFð=¡ d¨Ã@e5|Ý¿ÓËoð=~O¾þ{¿ /¨_¦=;’ï¼ýÇò;¾ öìƒæTû ©Öo‡è_Í6›àé~Ië_ï{÷bckK%9ïî÷ª ¦îq: &§3³h§-;5w…ºÚ¼¡=¯ízbûîíá¦_VðuaIVƒwUlM„ sa¾úý¦‡¯‡'Ý‘Zí¶ìg^ܦ^ÇÍðu¾èÊ ¾'”!=muIµéeYoÚØÃ–l×®ËÖ¾*»·…Cüi'•U‚/†—ÓàûL>ºwM>Uú¢üYpMÎG•è{rïê§äG~ë ù 7C�ŒMò‡›?/µ:0¬]•ÆÁ9À‡sW±ë0{Gª%(ÌíÞPFb:³BIªÛ­nèèuüéÌ8«’oaÈte£;™ÚN,«úé*èFSï©-qH|:3}aõÄtfjëû:ñéÌ¿8«œ_ý«ñsrõÞ÷Ì©û5Wž½/w~ç§â½™���˜ ¹êðqë+ò™/}C>ÜûÓ0ø>ûùö'?÷Â=¾���s(¿c|Ÿ}Oþ®¾&/žû)ùĹeù…sáéÂ^,ËŸ}{®×m��È¥ü_íÙGÒnÞ‘?~½&ÕjM^ßø+i=y*,tø��Ì—ßÊ“wþ^ÞyòCó׳£'ò~»-íží¡È’¸���ó&?Á÷ñyõGäG^½#Å­4c¯$Mnn*—¹”¸r×n…RU; M|j1ï1åÿˬ¢“¼½wê³>ÓŽ¥Î?j§ÐéÙ¯ÚJu R_3kÎH`ÊÄfv(J5¨{«ê-\qo'«Þyu%vå¼~Þ¦ÔoðC�•ŸàûìiÞú?äVóƒpÃGÿM¾øÛÿAþÏ Àßþ´.—ï9?$æF´s*.,è¹<í:éÉ…*ô<Œå-õ½$çUÔ““«ÐlæÝMÌWš¢ÓZ—ÕÒ…Ä2“:ø^ _Û„;­’žÖæò-iu’s7vä°y]ÊÌé‹Yá—k-ª_zÊ2=ÿîKá¹Ìz§èú°º[Y­Ó¾+µµëÌB�ÊñßÈûï´UlK:–ïrû<I†WÅT]ïRì�¬ÂíÍ ûoÿ¹ºçü–lEËTž|uH¾,õÝûR_¾-Ul‚ì·¾Nl O¥}ÿº=|;»rsý~÷½Ó.3øê?¼:•Y﫲�Î$·Á÷Ùá?Ë”\¡M…ÞøGùÎñ¼_Ú–|M(=ßÃX€ýS®‰ƒt÷T¬¿>û ÁWs0ËPê׺ Ëõ]3´"&ŒÞ¡ñ÷L¹´àk—ïî´·¥â÷øzå¼[ïI£|n·aÀøå6ø7_“µž€öL~øð?Êjõ*ÞͳƒojÏ“ÿܧ²Ü¸ÇWsX³a×,K¹\W!8¼/Ò'øFï—_Ìš´àÜpŒ¯9ã‘Yïzƒoæ2ß�€L9 ¾ˇÍÿ$ÕjU~ÿÕ—ågKŸ3ÿîn_«¯þŠ,Fžy•|ûuð¥…f§_ðµÁ::Pëí¼7ÜÁ$ø³&-ø¦Õ¯ÌzgëOá¢ûáø^ÃhB/� *=¾zîÞ{$¿ñ‰!Ìn‹/Ëï¯3ó,^³.nóÇvö¥Q¹¤‚ê£Sß§ÒÞy]*ë»ÒÑé¬êaö.y¢öóŠ«;êÝxú_ÿêvsz8¶?`Š4¤¼èÕ§~Á7µÞ©IסbA ¥šl·Âš`Μ|``9êð±üõçä“¿µ-æ~<oRz“éÌ–«R¿æ=×oh«÷Øh;/õ‡oÙû¼iÎLO•}ŒÛOlî±éïwa¡>F˜&vú>3œ¡þ ü‘ç—}/üf×»î N»)A4™Þ–¥\oHëš��ƒÈmðýð믪ƒÆ‹rù­ïÚÛ���0Ïr|ŸÉÿiC>½\“æGÉßÈ{¿?ý��€™—Óàۑ÷7äréSò‰•ÏÈUÿ·«Ÿ‘•µ¯1e��ÀœÉiðyöí ùõ¼qtþÆ\™���s'·ÁWžµeû«ßè®ï<û®ü—¯þ•|Çþ ��€ùßà«(ÿto[n¿ýé<y(ù—ß”öWG��Ì£üßã÷äë¿÷ ò‚]þöÙ‘|çí?–ß¹ði´“KÏ›øa‹¥’œwÃ<ÌfW’zš1E™?ÏèaK¶£é•ôó6¥~ãCE��ÀÔÉið}&Ý»&Ÿ*}Qþ,¸&ç£Å¾'÷®~J~ä·Þæ~zßÄ"Ñ„ú•e)_’r㑺C/J¡¶pó\è…'®†æ»ÕÞJ×e§®&Õiß•ÚÚõ”•§�Œš©o¥K,`14Õέ®Im'œËÀüÊiðÕ+}N®Þûž |k.ü={_îüÎOÅ&•Ÿ_YÁ7y_<øvT(^7ÿîÈA£"¿÷˜IºŒ/öžÙX(H±\—†]%-l7Ö±«¦uÚ²SóÎ|TïÈÃÆ y-úÁøTÚÍ›ê¥^ÌB=¦XVõ(#d™ÚÔ>R—þî2«.¯Fa- ÁKö}-K9ØeZƹü+Riì~9–Û¡·¾"ŸùÒ7äý? ƒï³‘oßùwòs/,ä·Ç·°*õ݃ð€ëñõC[Nø‘4Êç˜sâHZõóª|»åõrÛ×UPe>ùãN/?¬nï.¡­Ï‚¬¨0{EæÌ‡ ¹ËÝ3%ê9•U{fäðÔu@-\”`?<S±gQb«¦1+ÊjðnÒôß•«˜~ »õUÂχK#ÃSÙ®H-úq¢¾Æý@VSþ¿�˜ùãûì{òwõ5yñÜOÉ'Î-Ë/œ {b^x±,öí<,R‚oní_sDÍêñí ¾ñ%W]€�fëÍõËmXGzʲ]Z;ª;vYânÖô‘š Uúß7dÝ ¡V]–{­beõCüŠ\è|íÙo)ã¤pÿßl9Ü]W?lÜy'üÿ `žä7øjº—·ñ%ùUè}á%ù?øsi=ù¡½sÞõêà‹ß.ÛC–ìµ2šÐ‹Y“ ¾ÒÚ®™ßÂj û~ÀL_÷#P/Xß±?O`ê‰LUk¾&¥êŽšûúßðõº¯ïÓ§ìïHµT”RýÁ CÜcÓ†Gt?¿¹ÏšqØ’F½,ÅÅ+ܵ½â깕Æ;²ïzÉõgûúvS}ì…ªlºá …’7ž6å}Dߣzº”‹e³ù¦ÊQ¢þžÌsõþwd½¼œx®ÞgCêåW¤´y¯; ¥X“æá± ½úñv‹~À3„ ˜w¹îñ}¸ñY)ú‹X¼ð)Y{ý®´ç~œƒ¢ž+v8ƒÒ7ø»Ó§qWeµ¾+3± …RM¶í8Ȱ§‰à‹YÓ;~·PRA­Ñê =ÁW‡/o|­ uÕ Ù'�‡ájÑ ÔzxÑåòMÙ=T7œ|Íë§Ýï†“ÇøšÓú…%;\Â×p¸6kR´CŸÔ¥QÑÁRÿ�~ß ѯaÃm4<ý¦Ý— Øú{±û‹†zØpiÚ‘s6(ëöåŠm¸=0í‰~-=Þ:Öá‘ìUˆµmŒòî9)oÿgÓ o^·X1C@ÂÏÛýÞÂ3TÉ_Å|ÿ)·˜ 9 ¾Ï䣿ågUcúâo\“›þ–üMóoä^ãOåõWäå׿)ó{‚ÐeÔöuï@«.jóï=À‡9ëöTE½9Ñ}êàWo¨TæQ˜B^ïþ·Â —6WK ¾F§-Í êõ’º1¿ :è-¿ÚÝ·okåîß'ß“î¦t¡6mR‡K„ãúc§ûcãší¨­°ß]òïè°½NÀþ@Vµñ~øØX«íA··…µûcÚ¬á~\ÛÓÝÌÿ›ä„Äÿ·þÁ·Ï÷ `¦å4ø~,ßyã3ò¿þCyøÃDïîÈë¿v]ÞþØþ âa-ìLæ e_Gàõ²U�ë}¾î }U…­'öoÀzÛÙÒ.$˜ÙqÇá{´Á3Ú¯þŒú}¨ðš¶ÿÔÏç‡×áƒo÷3<LìK‹?¿_ð ÿ1–™à En‡:<ûàÏå~EÜ£”à[º!mðí¼·öŠ˜cɰ¦/4Ó§ÔSzM{‚¡ v•›‰žÓd8Ôôl —åòIÓe¼’.•î5}I–õ${Kœ£Ÿ2–Õ†æXo°¹mÑîoT=¾:t>²g üðï>9øfôl|Sn0r|UÓýö†\.ýœüÜÚ¿•jµj·kò¿–>%Ÿ<ÿYù‚ùû òï×~O¾f\�óÊ ò˜?vÕ¿h­g:3ì–¤X¾)Íh!=%à¢w–úºÔüЫǺVnõ58±Ç±ßÅmšz-}‘Ù Ór…½Ú)V¶ígs³OD¡?6v6úŠÐ¢“ߥ ¾‰1î7<ê]·C¯Âïîœ ³öb³h_îoL]H.–SmûîM©¬«€nþ?ºáßþ‹_=xG¶^»õÌ›ÛÓ~�˜ ùíñýö†üºa[æÖíi�0l0‹ê|7tºPÞ~NJ¥_ò§7Ý>¼#AuKZ±™ ü)ݼºþóôæ…2߉Á׆?¿GÖ†:·ßøÂYl@Žž×‰A¿çVP1Ã5Ì}ö±¨'ÛݾxU‚ Ý»›ñ·û~ô÷[¼ %»€‡¿Ú£þ<áâöb4ï¼0œv÷µ\ý­Ûæž…;ô”§aïnx›ú.76âëïÖ^œr# íLg̯Ü_yÖ–í¯~ã„Æí™ü yGþŸï0àÀ±³d_¼6Mz‡:L+óC‡,€¹–ßàëÈÞÃûÒ|û¤}HÏ.€Ù X™¥‰mðí³àÆä¹^g–,æ]ŽƒïÇrøðOäwW>iO©mñeùݯ>Ã<Lã;”äÅ,ý¸ è½å[ŒDxšÿÒÇJ #™Ú^_õ>W×¼E5�Ì«üŽñýð?Ëï½ø¯dåwþ@þØÌãÛ”æ½mùOW/Ê¥7ö„ì;Ýy6¹J��LVNƒïÇòøNE^ùR³·w÷Ù?ÊÍÏ|eŠOÉÍžÌiƒN¢Ç1^¼>@¯2��ÀÉr|¿óÆùü½ïÙ¿=zß—k„­:[ðµWÂ4œ��àdùêðÏ_“KÿæOåïÚ‡fNÇgGÊ{¿.ÿñÕeYºüW37•Mx¡‹žhY*›7¤RkÊq´„ê©nÖì´Eþ4Kúy;²^Öëðëûó•FKŸêûÜZùêNu{£^–bJ¤µíöîÇ¿@¤ðuëë«ç/ËfýªÔšû‰éŸÜÔN‰×)–e½iÇä¹÷¤>kù’þ<ú9ÿ_Ÿ÷•œBÉmn~Ðîê[ágïÎÑ ��fSŽ/nû´¿þïåçbsù¾ ‹¿òûÒhÿÀ>fVø«4…Ar¥º#ÍDïús¹ù9Ý|¢züGáP‚Õb|’úØ}Kv’y›5uŸ…ïwçñtÁ×_!ÉMúï]ÁÝ7øšùGíäôfbûUû¸äêPö=$&Á_XXQßë¾§h’}¥ßû2sxºÜ÷â&ÉWíZŒM¨_`nO䫘˜3ù ¾Ïeï›/ï|ëòFýKR­~Iêÿ÷ÿ+í#×O9K•” ¥šlÇ&­O.ªØ•Žtˆû0ºð,¾é•žšû¼U¬bÒ–cuzï;9øª`^½ö&G’û ¯…O;ix[¿÷¤%î7tò5Ñ�·Tò»ÉÜ7��˜¹ãûaãsò‰…OÉå·¾ko›e‰ÓöÑ*K)Á×›L~ÏÒôp†Uÿy¾´ùTÚÍÛ²é†Fx÷õêà¯å §H¾FbýP÷³´3ƒoÆûŠ-›êz´íwa^+cU-�#£Œ¸¨‡eÙ¿`Ür|ŸÉÿiC>½\“æGÉi~ ï=ü–ŠQ³H‡¼ \6Õ¬5¯þÎèñÕòÈÒ¥ÔÕŸÂiȼјDÈ4!rE…Ö4šÒHÐþÁ׊Æ#gôàº^X|sÛ¢ ¨)Á·ïûRÏØ]ïŽÿÖúWlÈC±¾ÀÈ>ºj«â?f`¼r|Uèy{C.—>%ŸXùŒ\­V¥ê¶«Ÿ‘•µ¯MýÒšq*ôÕÊ6¸ÙuücÁ×ñUëq¼n¬ “QèÓað¦TÖUtcb‹W¤á.ê:xSjú>;´Â…È0ØÆÇ/,^‘Ͳ¥žkÞOVˆV!³¶æÖí·C6üà«>ÇöÃ7äµ­–ìÕ~2>Kâ=i}ß×¾:è.g-ª®×»P¤+·˜æVòBKw–Eé¹(Ô]©êW«!õò²,^ änÍ>F×±ýweÇýíÆ±G?d_’ Õu©é´êþBÉÕ·8Ì9)•/†gMôÙÌ 3m1¯é.$Õå?ëv·¿ž pié–4w®ÛÇè1øOÌ3clè5ûèÙìdûÔ\¨ú'=Ü…º�`åvŒï³ooȯÇ.ló¶XS>N…ÄõlÚ!QuCŠR*©»/®üä@ñƒEü>}ÀÕ{„ÔÞf‚æwÓÙuÙ®¿ªàá OMø´Mëõ=¾/ë¯mȦ=`uê*$˜áîuõ›ò‡E¨- 6$»Û]ø®½ï+ öî9fó†Z¨ð‘Xx�‹ îG—¹P2<‹r,OTY\‰Êl4ÛJ±&̓‡áM]¦l¸Õ§úWuˆseÙîËüø³cØõãÃýGg)ôý£ºåŸµésafÖ…¤·‡?õþ]½µu2õÓ÷íEýxÕŽèe”]ËjO“×bœjúGüeY©?”‡¹P�<9¾¸­-Û_ý†j>ž}WþËWÿJ¾cÿœmic|a¨P¼^»Ê CËZo8|±!6 É‹&MxóÎx$Þ§žü; ‹þE—†=aÎ訟¶&œz?(ÝY½Mÿ|œq!iæ¦úíúûðÓ(èÚ¿½³01=ß…;[åÎH©0»vÕ|ÎÔ¶Ì~VýÚý.ÔM{i�ù•Ëàûì艼ßþ®ÏûÂÄî`‘5;C^…á¡Û»¬éÓÐTÊ7mï2Á6?ŒvõQͯCßx�ìy=³ÿ¬ 3ý3&ÞÙÌÛŸ§ç½kþû6ø*^¯ï ³+QÈNûß}í~ê€/gÁ÷Ònü¾üÊâ ª}AW>'_}ø=™Ïøë®÷ƒ^__§Ý” ‡©·e)×==^@¯§1yÆ(¼(4<ÃÛüC† ¾¶Ç׆Éôà»ÐÿÂÌž I­”Ûcûw½É']`:Lðz´/JõÚª×sžÝ㫟ßïB]�ðå*øv¾½!~dA^8·"ÿSéW¥¨ðÏ~1ef�ÈbÇøºñâæ¶GÒ¨mHëØŽkMŒƒ‚hlh€’ ÑÉpi‚¯z|lÌî9ðÜ0 ¿‡¹Ï…™O3.$U4ýÓäþÝçvãl3.0‚qï§1.¤—oËíºl™}(ö;Šì(øf¼¶ûÞÒ.Ôµ{��-GÁ÷òÎÍUù•×¾!š!ÏäøÃ¦¼þk¿*¯½ý/áC�`±‹ÕÍÄ îJÍ.à °AÏ…Y¬nȆîÝÍøÛôœšà«öQº`‡"tmØkë‡ß¬ 3³.$͸=}ÿ^`ZªKûÛõû »aÖÑ·¿’®á‚ïÙ.Ô�'GÁW7ÌÿF6ö~hÿÖtczÙë-ÑŽäî}S>´ÀÄô uÈÝS¼–¯›2Ô�Î gÁwM®¾qOšÍ¦ÝîÉW_ßvïkrõòŸ¥ôN�Àsf{|Ó/V›OzŠ·µµäe|¹€ Àpr|½Soý¶ÔÓr˜>î`˜·1ä‚ß¶Kó^ÆÝØdohFÄÕs÷]Ðë àìò|¿xQ.eS‚ ÈÞ6þ@Ö^µ•ÛòLÿ Y!ø�€å(øþ‹|óÎ_°0Å Ãt ø�€Áä(ø¢Ë¿2ÛMÉäßf¯j¯B_¼$7^×˃ªÛo¼!Y¦Ô^‰íNÇ/JÙ\QÞþÄ^¾xí–l¬¾¤‚é?J;Z¿ß]Åí–U—¯H½yÐ]’µtI*õûr¬§-êyž¾‚Û.[xEJôþ ¾�� ?‚o™ õ‹5i…ór–Ù×·Ù91õÅ%«…p‰ÕpJ#½ÿc»œ¨ž¶éIøo}³¿ãp-3OOITìN™dææÔûy¾¾^rõñŽT—ôÒ«GÒ¾ÿ@ÚÝ{{Þ¼n§ý@îg=ïÃw̺üf.S3§ Ä_��p‚oDæöâ‘ÄÄóÑŠH~ÀÍú·» ÐÌUªçü|ßßhU¦Ø…:zÓÙ—o5ß”í .Õê-i¶äð[MilR¯Öd½ÙV8åyêñ¥è†:`ÊÅæïuå×/Óê‡[í®ìí¨z»=Übuõ°%ÛÑŠƒúy›R¿q‡k�`@ß {N½ ÷•pYÕ°g5\/ÿ¥nï Á×ïñÕ½²ñàkzný•®|aðŽ-]ª¯Þÿã”ç™ a‡=˜÷J/¦\ôƒÐÎîÊ÷qGeÙ@ʶ¾uofêby+ ¶pU¸è,оI/Ú°v½ûx�@_ß\rckÌÙÕêmÙïôãk{žÜ¶X*Éy÷o×+üRQ^u›]M驾Í<Æìý±º R(¾*›ßRíKrÉŒÕÕA|_šµKR¾ä!N{^ë {›ã«Ç{¡˜6™ÁWÿ¡ÏZ؉±Û¤usÃþÛ.l~TæeF_�=‚/†ê� WZðµg] 5½_û£ÒlQ‡1Ç8� ‡à‹áxêØP�]iÁ7 ¸ö ‹îÈÍìñí ¾æg´u�€A|`ÜúuðdÝîV6³3¯DL€&ôÀ ¾�0núâÎEo|n¿àëãíìK£rIê­#{ÑiA ¥šl·Â SËR ¾�0(‚/�Œ‹™gºg°‹¯„½´vˆ‚~ãC¼-šfPÏâД šÎLoËR®7¤uÈo�0‚/���rà %œNi¸)Áì" §½ÈmO‚Ò¢z§k�Àx|J^|s&Þ|¤ö–˜×&ø�€ñ"ø"Dð��sŽà›Kþ*mv9`>—¤T¾hn/¬²¿o/ÂÑàìÙëyDÍcÕ¿ ¢UÖVƒw¥“\ja1\J¸Ó–š½ 'Z*ù©´WÂ׺P’ ‚/��/‚o™)Š5iÉ~pQ Q˜ ì± ¼«6ˆš+ÍÍ•çv ¯@ßÜnBì“p)Us{| ¥KR.ß”]s¥¹]jÕ¼ÞGf.ÒB¹!ê×X ç$eJ&��ð<|s' °:|†3ZþPoèAßàk§b2ÿöƒ¯éÁ]Qûz¢]ôm‹W%ØèîË=��€q!øæéa†Xý‚¯™Pÿ± µ+ßÅê]ÙÓÃL/ï±íñ½"vwÅ©p¿aña³&Ez|�À˜|sé@vë«vÌí+²Z½%›×ôtfº7ö¼”ÎëéÅô¿U°}®ÕÏ[å×oÈ5=ÆW=f±T’óú±±mQJÕ«Ý1Áþ_u_quCZÇÝÛÂbuŸ Ò���ã@ð��@.|�� _���äÁ���¹@ð��@.|�� _(áü» vß3é.Ta–,¶·žlO‚’ž>-kß§ÒÞ¹.%=ÝÙ‚[cÞô��€³ ø"ä/`qfn‹Ó_¥ßÊm]©/¿$åÆf!Œ¥Óî{V±š��#GðEhZƒ¯éý|IVƒ·åáúk²î¯67Ͼ��ŒÁ7—¤T¤hVR[–Jc_:&h-I©|ÑÜ^X d?W_Ó+ªíÙë•ØÌcÕ¿£ÕÜ–T0}W:~ðmëÇ/J)ØñWn‹–J~*m½¬±~-³r[VÈsÃ0ô0‡GÑpŠÔUÞw%(ë÷£îwK$û·JRÛiËS½\²ú{±|]^/-™÷tc{C*f…:ýþÛ×)HñÒ¥p˜…¹}?rm³.«ú=ïïõ~¶ÃR7ûUßOe]½O·Ržþ~¯H]ÿ¸ê;��gAðÍ¡N«.ËÅš4d?¸(…(̆öX^êTè:Ö!Ñ„L;†W?VíÃÜnÛ3ÁìÆÔBé’”Ë7e÷°£_-¼ß¼ÞGÒªŸ—B¹!ê×X¼¨‚ãÓðý¤gíìK£V“õíº\*tßÛÚêºÝ·ïHíû‚«;rØyW‚Õ—Tèn…¯§C|çiøY i„Ö¼§¤Q>§Þ³Þgøï°ÇZ–åpòDý{Å ý*ÀÖîJ»“þÙ«ïfIý÷@…Ûû÷ÛáŠ%ýºGÒ¾ÿ óy}'��à̾¹X´bƒL ³CÌ¿¾¶×ÕüÛ¾¦·Ò]ˆÖ½è-Ú¯J°ÑÝ—ÿz]a]®ïªèìBë+²z­.;º'·‡Q”rã‘ý[Ó·-Ù}( )ôg|ß¼ÏnÀÍú÷JØc­DŸ÷ÈûžR?›zÌ“w¤Ù¸#A½&Õõtä[Í7e;¨KµzKšíÎø��€a|sÈô&F§×­~Á×ô’>6Apà»X½+{ú”½éÑ<¶½›vèî7ì1>lÖ¤ØÓ»iC´é‰íHÇôB«€hös¤ž³ˆè |>z¼[س«¢¬~¯Ç÷äàïñ5?üï)êÍŽ¶.¼õ�÷>༨öùøLß ��Á7—ܘS$u/jõ–l^ÓcWuÏãy)×SiéëÞË©š±¯n<oA–_¿!×ô_õ˜ÅRIÎëÇÆ¶E)U¯vÇûãYÕ}ÅÕ iwo {ˆÕ}6H‡:rØ ¤¬_[µ-ß”fëm;^Wý]ÙVûµuÜØZ³Ï‹RÝzW:}ÆøÆßó9)©þÛõ /ËKÅ—Â÷Xº.;mþÝ÷dßkÊg{¸s]ÖÜXiÄÕwX[»$—¢1ÄêÇ™¾��0 ‚/J÷øv‡:��€ÙGðzøcwݰ��0ë¾���È‚/���rà ��€\ øbBìT`nu7��€1#øâO¤ùÚÍ1M©uŠ™wäµú}af/��pV_ôeŽX×\²ƒßpå¶%³°��ÀÙ|óÈ_<Á,¨°-̰XmÈ=óïE)Õo…‹W˜i½Ö$ØßËx^Q®mÖeµðKR*S/IÉ-à°È~ç©´õJnf?vQ³ºZFðu QèE3*uiÜÓ«˜…Ï5 bôY”bñÚ-ÙX}I~ý _–Š{ïnÑ Û;×¥¤†pûKý\±Åœ�Àœ øæŽ[fW/ãûQ¸Ì¯^Š×¬æ¶&ËåפZ¾*A+ Ý¥‰3žg–ðUA·v7\IÍý] ‡ )ËîÆnK¾ú5—ô¾U@¿¿­×p3;\JØ.Mlµî .xˇ+¬ùË?’F¹h_C/=üŠ,×w¥ÓÙ•úòKRn|ñ}��€yCðÍq»EËïê0¸(År -Ó#ëߌçé ë-ò`‚¯ýÛüÛ†\b›[7ìÄýƒ¯¾#ÍÆ ê5©®ï¨@íß= JKaxÕ5AÚ-1ì£=•vó ©›žáîtövԆ䲿��0W¾¹ãzn¯HÃïíìKãòe©ïîÉn}Uíp„ÞßÄóü ›ü; ¾LOk±²-í§^>qŒ¯¹+‰Pöø.˜Úc9lÖ¤èõø†é„·›÷úØ{ Ýû{¾û^ŒÏ��æÁ7ü1¾ ‹R\½)_ÿÝë©{FßRas1ìù,²¯/n+رºÇÉç½.õkáØà°—4ì™ ÿ>/¥óv?‹Wdsã¢z^AŠå«R.ªçVïJ+cYàãæuYsc„M�? ‡4,,Éjð®túŒñuû2åé±¼ÅKRÕ5AÙíG?.ÜÒ?׆´Âo��0G¾ÈÝ«]¹b{›õßïJpù!�€œ ø"?üžbÝÛ[ªÉ¶½ˆ��Ì?‚/���rà ��€\ ø�� ¾���È‚/���rà‹lí@JnŽ]½òZP•Rr b��€AðÅ�ìêff0‚/��˜Mß\x*ûÁ©y«£é•Í.Öôò¾ƒ:–¶YiíìÁ÷ô¯ ��0:߹בÃÝu)¼eH½´$‹Õç|Ïôš���£Cð *ܶîHUËpU²‚+ÛÒî¸Ð®Tf¶âEùlô8½­Jýëw¤^^–Bé’\*Ôm:Ü>–V£.åâ² Ì.ø^êfÍîsIJµ»êu¥Y-†û+Ò–Äß6ôv_3 ÏöެG+©-Ky}GíK½´°¾]Žu©W^—&i�� ‰à;lÐ4¡Sk¸(……óRo™{›UYt©…7Huq!ì}µÿÖá³°Ⱦžæ!ú9úv÷<|—¥ÒØ×£~e·¾ª^眔Ôý¤Q>g߃–øÛMýwç] V‹Rª?Pïþ©´W¤höõA8žx¹.-õ^:ím©¬Ô¾��`hß9” º}ƒoÚßVüy)C:»R_.H¡ÜP1ØßZâïÄktZuYŽz€»ÛbuGëà[(Iu»¥ö��0ß9Òi7ekSO9æ÷Ô&¬¹a4ÁWö$(-Úp{ºàî»Û+s¸+?"Ø%��€¡|ç‚*P,K=xS6®Å‚îx{|e¹¾«G§_;d!ùá¾—d5xW=7òAµä §���8;‚ï<°¡2ràÆøåÚæM©míÙ©ÂãöŽl½v[öŸºÇß–‡[uÙzx[Ê…dðus÷&ƒobŒoá¢ûOÕý6è*Ò88–ÃV es¡ÜB†£÷h_sïm3Lb¡P’ÚN[íO_ˆwS*ë»ò´y]ÖÌEsj· õÞ¾��`xß¹à.4S!³X–õíº\*¸™Ô݇;RÕ!´°*õÝuÃRWT(]’Òë×¥¬iwŒ­ß#ënwá÷@ZÛnFµÿòMi¶uèÕü$ôl·%¸¶ì=Æ{MsA›îѽ+µh¶‡î¬ÇÍ[òZpÓg7s„y��€3#ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���rà ��€\ ø�� ¾���È‚/���r@äÿèñ>³@*#����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8d.png��������������������������������������������0000664�0000000�0000000�00000035201�15030617045�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��µ��i���‚´Ðˆ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��:IDATx^íÝÁ‹#×z÷ñþ7´ ½ÝàE¼IC 7ó‚³™E¼P 1Ì‹tÀà…›YŒ !‚Ã%~ï 0™!Âæ}Mq;`L#¹Ænúr&¦iâaÄóÖsêé¨T’JRU©NÕ÷EwKj©T*úÕS§Ní ���8B-���‚G¨��@ðµ���¡���Á#Ô�� x„Z���P ��€àj��<B-���‚G¨��@ðµ���¡���Á#Ô�� x„Z���P ��€àjÔZ¿ß—O>ù„iÃI—�„€P  –~ûí7Ê>úè#¹¸¸ÑhÄ´æôüùs³  „Z�µ£ì½÷Þ“/¿üÒ„[lF—#¡@(µ�jE—k }ùò¥½›"Ô ¡@-¼~ýÚt5ÐIÇöµ�BB¨<í3«ÕÙÇÛ[B-€jMƒ¬Z ¶È¡@Hµ�‚ôË/¿ÐÝ `„Z�!!ÔŽž¦ÕYÆP-¡@Hµ�‚¡Ãsé0]h5p¡X„Z�!!Ô‚ën !‹±gËA¨B-€ÊÓ+[ÑÝ |„Z�!!Ô¨,­ÈžœœÈ|@wƒ Ô ¡@%iw ³jén°„Z�!!Ô¨ín°··g~bwµ�BB¨PZ‘Õ¥Z­Ôb·µ�BB¨P  ôd0²‹îÕ@¨B-€ÓQ 4ÐêEP„Z�!!ÔØ×Ý@ÇŸ¥»Aõj„„P `'...ènPq„Z�!!Ô(ÝãÇM Õ`»ØXnÇÒÚÛ3#!L§Céô/åÖ<äRz‡­™û[ܘÿÜŽdÐ$÷˜è{ßÈYÿÓÇ`!B-€j”æõëצ«NúûjodÔ»…ÑûÒ½‰BìOÒ?º3ý[¹`Û:’Þ¥‹ªc¹½<“v+ ²é FqŽ¢ìeïÜë]FÀ*„Z�!!Ô(…ën UÚì^É s7 ¬Ç2¸ÑêBî]é ^ŹHGÃëaOF6©Ž¯úr¤·µ>–þÕÛøFçæ{égÿKj„„P  p:ªÁêî)\ÖÖ·r}þ•©¾¶Žúreì´‹Â´Û Â{wä¨ÿÙ-j„„P  p:d—NksUØIŸÙCéœËõ$©ºÊmK]—÷?“ê.6E¨B-€ÂmjÇ£žš®¶Y¯Û᪲Ó>¶ñÿø¡Ö_Œ½þ¸XŠP $„Z�…Û,ÔΞ$‡U¯"«&'‰yUÙ´Û\øõúÝb5B-€jn³PkƒèÁ© o£$êªû;ж·ÃS9Øóûت·rÕÿXZ{w¤}ú2îª`»$Ì ÷…•µ�BB¨P¸µCm²/­©°&»$¦™*ìŒ=o|Zåxpʼnck Ô ¡@á6«Ôb×µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P¸j…Ú[v¼ñkÝÔ’ƒÎ#y:¼6cÙ¾veî1:íK»ÿã‚爧ýîPÞÅ/ÛKü.¾<ïøú\Î:‡“ÿoµOåÅàLºýŸí#Ò,x­¶t_Œ¢{ÕÏÒoï{÷?þu<gY^“P $„Z�…Û,Ôj<•ÓaÏò傦 yc¹ ¤gBžw‘s ±.èéU̾’N(ƒãcé_½n‹ƒ£ ²ã«¾<8ö®\6þIúGw¢çM\â׈žïòLÚ- Ô_ËðZŸOçå™tÛï{¯»Hâ}Œ¯¢ùÒ÷àh~'§Èþš„Z�!!Ô(ÜF¡öö\º‡Ò-$ÔºJì´ri¸�Ú:–ÁM”�ß ¥»ï‡ZçFFÃÿœ©†N«³þ}ÑSŽzr/ Oô’¿3W=‹¸Kÿ&oŒ¯¾•Ó§«BíüûˆÿöçÙ†Úv_®õÏ5^“P $„Z�…[;ÔÞþ ½¶V7õи h3·Ý‘vÑÍ´ß•á;æÌïñÓúRCmK¯û¢ç8ˆÃôL¨Õ*í™ôæBv2ÔúôÒ¾è¹^§vAÐÀ{˜ZÁÍΓeÑúØV‘Õl¨]ç5 µ�BB¨P¸*µ×}i»pÅ/ M@Õ xßVýßßÊUÿci¹*ë é¡ÖÝî‡Z/,OæÇ·$ÔjUôÁY\5]fÃä|U5’xÍô°<?‡{|ö»}Û¥À™ µë¼&¡@Hµ� ·}¨¯‡ò´×‘ _&àÚ°{p*ÃÛwr;<iÒC­«ÔÚŠj¢ûÁxÔ—³Ì¡V+»:?Ó°h&ï°<)USÛE Õñúæ.0yW?™þ´­£¾\Í<YZ¨Íöš„Z�!!Ô(\•ZõÌþþ÷2|O×­`r"–†ÆCéô/M·„URC­ëojBrù¡6Ý¢PûJ^wwR—×Áôö^obY—†Y3ïÃ<ß]9êÿäÖDŸÚ5^“P $„Z�…Û*ÔžåéÓ¡œGÁ,®Bþ…´{3•Ú;Â߬ĨšÍÙÿŽïEAú×øa)]æÅap¶ª=ßå™=HTMM Ü—ƒãrmnŸVsÍZ#û 6\¯µ)ïÃ…ÿɰ^6ÔN*ÄÙ_“P $„Z�…Û(Ôº ìÁg2¸~3=”БGÝvä´*û£üÉÝ>™ÜId6ÌÍ(foŸùtˆ«ž lÈ‹+ ÓûSf²Ï­}-ÿ§ÿ—xÝÉ|i vÉÙû¢©ÕîJߎ™›.ù>\UÛ†~﹦“âW¿&¡@Hµ� ·Q¨Íä­\IÏUV•†á¿JYl‚P $„Z�…+,Ôšî~?Ú±Ü^~-Ósû7¶A¨B-€ÂW©½‘Ñ‹Si·Ü!ô(àžÛþªu°¨«„N«N`Û¡@Hµ� W\¨E‘µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8Bm˜µ�BB¨P8 ´{{{LN„Z�¡ Ôع_~ùEÞ{ï=yùò¥½¥4Ð…Ra~ýúµY†Z]€&"ÔØ©ªZ ‡:_¿ýö›½¥út†6Ï�B-€©j U!Ui}'''f€¦!ÔØ WU¬b  ±Jëè<ðÁòüùs{ �4¡ÀÆr38––;‘è°'£±½k dõÿK ´7é´Ü‰O÷¥7zcïX,Ô*­ãB¹VÂ7²Á2[íŒz¤3xeÿ€|j¬Ï…ž B­«Ð^\\Ø[ÊðJ»™šëz¿T å}ô‘ýkÙ—YVãÿüƒüáfƒ½ �È€P `}†Zh7® n,{@ûòË/ƒ®Òú4Ônþ^ò µZ¡½=«üêt—Š-€Üj¬oƒP»»@«²47,V]FpUç͆ùʳR;–ÛÑ39í~&»¿“áõ[{;�ä‡P `}k†ÚÝZ•- Õ©Jëè czâØúA=ÇP;¾”ÞáûÒülª¶­Î@nì]�B-€õ­j?~¼ã@«V´ºUi}› ó•g¥�ŠG¨°¾Œ¡V+Ÿ»´ju@«c•ÖÑ ®ŸÃz£Mj„…P `}B­†D=QI+ »·< é<ê LÕ˜×b¸a¾²¿Ç´e6–Ûá©ìÝ“îð×ø¦ÛséìËA÷\nÍ ¿Ê°{OöNex›±Ã5�ä€P ` ig²ÏEh«p(<êÉáÌü¶ä°wų)_êN»‚輫,^f„Z�ÕE¨«*Ú,šP¥õm7Ì�T¡@nB ´ª)UZGû7kˆß}?g�È¡ÀÖ4Äj˜ -Ð6­Jël>Ì�T¡ÀVB ´ªiUZŸö­mê{PO„Z�s6ÄpÔÔ*­£ŸŽ†pqqao€°jl$ä@«š\¥u4ÐÖõ‚�š‡P `m¡Ú¦Wi}Y‡ù€ª#ÔX‹Á­¢J;¥;(zÒ˜ž<�!#ÔÈL‡ÒÃÕ!Bª´óæ @jdR‡@«ôÂTiçér q �pµ�VröåË—ö–0i`Ó÷A•6ö­Õ>¶�"B-€¥êhUÚå4ìëg=ì-�B-€…êh©ÒfÃ0_�BE¨Ê…›:ZE•6»““3@Hµ�æhÕ³áëh]•–³û³ÑåÅ0_�BC¨0Cƒl*´J«´\``=Ú¯–�!!Ô˜p¶NAÆUi9ùi}n˜/�¡€QÇ@«¨ÒnGC-Ã|¡@m-UÚí1Ì€Pj†Ó*\­¢J›=aLOc˜/�UF¨L‡¸ªk ¥J›/†ùPu„Z ¡4ÐjÉ:ZE•6_n'¡N£b�¨B-Ð@.ÐÖõp2UÚbèòÔåÊUÙ�T¡h˜ºZE•¶8Ú›a¾�T¡h&Zª´ÅÓuHw� Jµ@hÐÓ R÷@«ôL}ª´ÅÒ~غãP×þØ�ÂD¨j®IVéÐSTi‹Ç0_�ª†P Ô˜ ´Úí  áCÏ̧J[]Öºn@jšòmSP¥-—®cÚ áââÂÞ�»C¨j¨‰–*ính e˜/�U@¨jFÃEÓ­Ò*-ÃÝÐa¾Ø¡�°k„Z FÜYéM ´Z¥ÕP‹ÝpGôä1�ØB-PM ´J-—oÝ-]ÿöööæ ÀÎjp¶‰ÁŽ*muè´bÛ„‘6�T¡\“­¢J[-Ú·VûØ@Ùµ@Àšh©ÒVž¨¨ë$'í(¡”J©ÉUJª´ÕäÖMº!�(¡9=)§ÉŽ*mµé ‹'''ö/�(¡Œ†¹¦WhUÚjÓ*­~F ó ,„Z .Ð6}Ø$ª´aÐK³¾( ¡vŠ*m8Ü0_�P4B-�íUÚðh¨e˜/�E#Ô§a€@;¥ã R¥ ‹æK»#�@Qµ@…éäÚ) ETiÃä*ì ó („Z ¢4Ðêa[íUÚ°é_ ó („Z ‚\ ¥ª5E•6|º>ë‘vL�P T 6UÚzpÃ|i?[�È¡¨m:„X.õ '?êz�y"Ô aM+‘Útºlt¼SÔ‡®ë|¦�òD¨vLC¬nà ´é¨ÒÖ“ž�©Ÿ«~¾�B-°C.Ðj·B[:ª´õõüùs†ùB-°#~ E:ª´õ§C|ñ�B-°Úl¨ÒÖŸ~tÇåââÂÞ�›!Ô%#ÐfC•¶94ÐêgÍ0_�¶A¨JäNŽ!ЮF•¶Yt˜/ýÌ`S„Z $Úì¨Ò6;‚ÁŽ €Mj¸@˱²¡JÛLú=ÙÛÛ3?`]„Z `ÚõP¥m6æK+¶|þ�ÖE¨ D ]ŸvÏ JÛlZ©×>¶�°B-PWq$Ðf§g¿S¥…[æ À:µ@4Èjß@íz¨ÒÂqÃ|±ƒ +B-3 ²Th×G•Iº“Ã0_�²"Ô9r–³·×G•IºƒóÁ˜“Ç�`B-íæ´J«Ý5¸¢’ÜÉ–|¯�¬B¨r@ ÝŽViuÒh_‡ù€eµÀ–tƒK ÝUZd¡¡–a¾�,C¨¶ ÕEív¨Ò" w"¡•�iµÀ†4ˆéI,ÚÍQ¥Å:\7FÈ�†P l@-—òÜUZ¬ëääÄL�D¨ÖD ÍUZl óÅ8Ð�’µÀ´ù¡J‹M¹KP³CÀG¨2ЫW6"Ðæƒ*-¶¥#!è÷�B-°‚†XÝxhóC•yÐï$W¡àj%\ ÕS´ù J‹¼èÈ# óÀ!Ô ¸@KE1_zؘeм<þÜœ8ÆN'�B-‚@[ ]®œàƒ¼1Ì�E¨´ÅÑþ,WäÍí,]\\Ø[�4¡ð¸>z¯üQ¥E‘4в~ÍF¨,m±¨Ò¢hÚ_[‡ÞÐL„Z â­žt‚ü¹*­.g (®ëÃ|ÍD¨Eã¹@Ëe7‹£!ƒ Ê ßg2Ž( yµh4mñ\•–±DQ†ùš‰P‹Ær×'Ћ*-vA×9íc  9µh$ ²zˆ’@[,ª´Ø·î1ÌЄZ4¶<Ti±Kn˜/º!�Í@¨E£hÕ'‘*-ª@‡‘cÇ hB-ƒ@[.ª´¨ݹғÆ®¨?B-@[.ª´¨ýÞ3ÌP„ZÔžV ´å¢J‹ªÑuR/Ì� ¾µ¨5íOG -UZTÃ|õF¨Emi Õ¾tÚrißEª´¨¢×¯_³ÃÔ¡µ¤V52”OùtG‚Ѐªrýëi€ú!Ô¢v´»£*-ªîääÄL�ê…P‹Z!ÐîUZ„@Û†ùê‡P‹ZДV ´»C•!Ñ/토ýlÔ¡ÁÓ«a–@»[Zùâ:û Ã|õB¨EÐ\ ÕþqÚÝÑ*­†Z 4Ú~h¸>B-‚å­ö£Åni Õ` „F‡üc˜/ µ¶:¨Ò"tz˜®ÃíÂF¨Ep´ÕB•uÀ0_@øµŠ;TH ­ª´¨ ÝYÖ¶…4 \„Zƒ@[=TiQ' ó„P‹ ¸@Ë`éÕA•uôøñcÆ[E¨Eå¹@KE°Z¨Ò¢Ž\Ÿ}†ùÂC¨E¥h«‰*-êLÛ½½=ó@8µ¨,muQ¥EÝ1ÌB-*I“VJNÕC•M¡}k91¡•C ­6ÝÐóÙ  Ü0_ö�UF¨E¥hXÒ}ÙªI‡<¢J‹&Ñ@«mÝ€ê#Ô¢2´ÕG•MÄ0_@µ¨mõQ¥ESi•V×}ÆÉªP‹Ó ¶ú¨Ò¢É´}b˜/ ÚµØ)=³˜@[}îò¡@“éô ô¯ª‰P‹Ñ@«‡ô´Õ§UZ®°Äßíc  zµØ ´T<Â઴|V€ÈëׯÍ÷A¿�ª…P‹ÒhÃB•˜Å0_@5jQ*mX¨ÒéNNNÌ :µ(…†"Ý�hÃB•H§íÃ|ÕB¨Eá´ñ×0K  UZ`9÷ádW µ(” ´Zñ#……*-°šæ ÀîjQhµ-ÂB•ÈNÛ9v�Ý#Ô¢Ú°Q¥²Ës˜¯ñõ 9>hÉÞÞ¡tú—rkoÏæ• :wÍ•ÏööZrØ»”±½hB-rG  UZ`}z˜ž8¶Õ÷f|)½Ã»rÔÿIÆ7é´îJgðÊÞ™ÕXnÇÒ"Ô¢µÈ•ž0¡ ;6\úÙQ¥Ö·í0_ãQO÷l5·%­Î@nìýÙjÑ\„ZäF­Vø´ár‡Q©ÒëÓï~^¾|ioYÇõîË^"Ôîöd´V2%Ô¢¹µÈ… ´TøÂF•ØŽë¾£;ˆëYj[Ç2¸Y'šjÑ\„ZlÍÚͪ¨ ª´@>?~lN¶\•Z`[„Zl…@[Tiül2Ì}jíj±1m}h•V‡¢J äCÛGýNéOGC®Vq2AÖŽ~p{.݃÷mÀýIúGw¤uÔ—«ñ[¹ê,­ÖÇÒ¿z+㫾µîÄÿ? ¡E¨ÅF4ÈjƒM ­­Òr‚/7Ì×ÕՕ鎠mæªn ©ãÔf µ®Ë‚§ÖNkw_�ÂE¨ÅÚ´õâª´ëŸØ`•¿û»¿“¿ø‹¿˜„L=º „Z¬Eƒ¬6Êy\9Õ@•ÈŸvåÑï• ³þD7 „Zdæ­ßG a£J äOÛH=Q,fÝDQ�(¡™hë‰*-¿‹‹ Ó—6-Ðê¤}mäP‹•´&ÐÖUZ XZ H ·KG@�°1B-–Ò*¶ž¨Òåp…j׿0€,µXˆ@[_TiréÉa:N­¶©:È¡©4Ðꉜ¥[OTiwÇUë’“»ÏIÞŸ¼ÏýLNŽû=y¿»]¹ß“÷»Û•û=y¿»]¹ß“÷»Û•û=y¿»“¼?yŸû™œÜíNò~wŸû©’÷'ïs?““ã~OÞïnWî÷äýþíNòþä}îgrr·;ÉûÝ}î§JÞŸ¼ÏýLNîv'y¿»ÏýTÉûÝ}î§JÞŸ¼ÏýLNîv'y¿»ÏýTÉû“÷¹ŸÉÉÝî$ïw÷¹Ÿ*y¿»ÏýTÉûÝ}î§JÞïîs?•¡ôH€›šfº$�‹@[oTiwËß�%-»Ï—åq¡=&Ës¨<ž'¯×Ry<&¯ùÉk~UY¯UµùQe½VÑí¶Ž®¡S/{¾zi¡Q´õ§'©P¥Ý,)�Àúh]ahˆ=99!ÐÖœ~¶ÚŸ*íîj”¡‰m ­+LÐÑ0K ­?=E•v·µ�Ê@¨Eã¸@«Ê ´õF•�Pg„Ús–Ê]3P¥­*µ�P Z׆"Ð6 UÚê Ô(ÝÐÚæÑ*-W1€æ Ô¢öt`f½9¶9\•VÇ-ÄîQ©PB-jM­†m³P¥­B-€2jQ[.Ð6ñ #MF•¶zµ�P Z×pöåË—ö4UÚê!Ô(•ZÔ¶¹¨ÒV¡@µ¨m(Ær38–VÔ�i#´wØ“ÑØÞµª´�€&!Ô–íf – /{÷¥7zcïÈ—Y} m@ܺ‘C¨¥J[]Tj ´®;ñJ»……Zm r µTi«‹P   Mlkh]w¢¸P«A– ] 6 µÉ«„Q¥�jQ’íB­ö•Õ)ÉÚ´û€ C­«Êºûüùsª´�Ðp„Z”d»Pûøñã¹ðJ ­-B­6^:i˜ýë¿þkª´ÖÄ €òjQ’íB­^æVWVb ´5‘C¨u“^5.Ù-Õ Ÿ� ´®;±y¨Õàꇗ¿ú«¿’»wïhë ÇPë&Âmõèç�È­ëNljµëA2¸üíßþ­99¡z#£ÞýÄçš}ÝXj?úè#vx*F?�(ZÛZ×’G=9ôBÇÞ^K{—’µ0§Ý ¦ÿ;4¼l›iQ¨Õ*-ë� )µ¹¸¸H /nÒƒæI†ZÝñÑuÕ¤Ÿ� ´®ÑÐê‡7i•Vƒ ‡™›Éµº.Ї¶Úôs€¢5±­¡u ˆßõàääÄŒz@€ µÚß��E¨EeiV+µzX™~’áÐÏJÇŒ-rúçþgyúôiê}¡Oì´U—îTë¸ÈL›MZ˜�ŠD¨ÅJzµ¦E'k1e›4¬4îˆè˜ÂÚ% m£Æ´|rË­nô;2ÝQÓl×w;¹#”m }=H£ëCò{Ì”}Êûh[×±UµiC®{ÖR軺9ýâjƒ^wºó£ ŠþÄft=Ñõ¥nBÞÐhÛçv68b´:vtò™šBóÆÌÀUÜ4ÔÒo§î¡–ŸüèzB¨­w”Jûpc{u 0ìèä‡P»=–à î$*nù¨s¨Õ÷ÅÎO~µÕàï¨Õy‡´lu0îíìèä#ïu¢‰!™P»€6äºAÕ=P*nù©k¨ÕF]wv~òS×PŽR'äÀÁŽN1µÛ#Ô¦Ð/©í#DCž¯º…Zv~ŠS×Pʆ†~áÅ 5p°£Sœ&†Ð¼±\ÅM« u µìü‹P»~޵â„`ØÑ)VÞëDC2¡ÖÒñ0µÚ¦cc§.¡–ŸâÕ5ÔV™ÛQ£ W¼;:å ÔnPÑ!H´!çŠLÅ =Ô²óSBm¹ØQ+W(ƒòj·×èP«_P ²ú…Õ`‹â…jÙù)W]CmÕ64Úêr¦_x¹Bì蔋P»½Æ†Zm¼µׯœŠ[yB µìü”P[<·£F¿ðòU9p°£³M ¡ykädl½Ý -Ôºº”P[,vÔv«ªF¿wìèì¡v{Z‚úu—ò ±ZX!…Zv~v‹P[ ú…WCŒÛÑ¡»Ánä½N41$7ækűõv/„PËÎO5Ô5Ôîý«£Jƒj Ôn¯õª£ê¡ÖïkÍÎÏnQ©Í®Ët7¨–ªvtª£‰!4oµ^‚Ú3¶^µT9ÔêN6ît7¨Bm>ü5ªpÕQ…�ÃŽNµä½N41$×öëQ¿¬t7¨–*†Z秪»‰êjËD¿ðêÚeà`G§šµÛ«å;fl½êªZ¨¥¯uuj7§ë2ý«mWƒê"Ôn¯VïXrÝêhº¼ve¿+Ãwö†JËíè™tÛïK»ÿ³½­<U µôµ®¶º†Ú¢74~޵ê*;p°£S}„ÚíÕæûÝ·oÈÇr38•Óá­ý»N~–~{?ZÙ÷W„Úb–AB­Ûù¡¯uµj×ÇŽZ8Ê ìè„¡‰!4oµX‚¹wv¿=—îÁ¡tkj#ï†ÒÝ_j Z»µúÚº®0°xõj³Óu™“bÃRV€q;:t7¨>Bíö‚^‚ ÇÖ_˰ߕöϤÿì39Ø{ ýë×rÙ;’V´ÒèŠÓjŸÉåí8zèK9mß‘½Ö‘<zòHÎÿWzú·y\ü&ÑÛŽ¥?ºYð^?½ÿ¬#í¾\Ë[¹ö¥ÛþyØ"Ç­è¹åxð£ühçÉÍÜþà½þi÷~+Ýó™ÛÝt`Bgêü%Eÿ~ÚŽ_ëö|Ør¡öf~¹üé?Ëàr{y&í–}ÝhYõ.S^#ƒ]†ZúZ‡…P›†Xú…‡'ïõ ‰ðä½N½ŽUQ°ïØuvO[ÏôeÕð…£þOEÅ(» ¤Ó²!pԓýûÒÝÊuÿc9ì]êÁö(ÜLJۯûÒ¶QÆ?IÿèÀ†Ë_eؽ'{‡=ùñ<å5<“yÐPk*£úØ–¿ˆþÖçŒB£ ‡ñüèëÝD³y,-Ó÷Œz÷Ík¢'ŸÎó_õå¨uW:ƒW çOÿg*~®88¿“ÛáiŽm¨M].of—¼’Aç®ìw‡òn|)½Ã}»ÌÖ·‹P«»¾nUúZ#›º†Ú<éú¬®<»Œ¯Ïå¬sßímÈ_‘ƒ0j·ì;Ökq8ze²²—<IK«OIÇTJã¼Céôú2pN?ЙЧԟ´*û&ý5&l(5•ÚÈLH¼ÂçÁ‚ût6‡ò´g«²îùÍ|Ü‹ó«ípÇ ¥ióçW5ˆ¾‡`•ì~0·\¢ùHÌ“˜jó·Ò‹6vú›nðvjµB»Nã^Íü"·#yÑmG;'ñz³Óù4ë¿~äP»ZþËȶM™¾ãÑÎî§ÿ8]ÿ¢¶èÓS‚pVºŒ‹ Ýðô¹ƒßÑI´we´9‹Åß‹¢ßQëD“jK µ&Þ•v·/Ãáïf[ôå<éJ»¥]®¢/°èÌï¶*:cApž°÷¯jmÈnµ¥Ûÿ^†Oüç+Wým7–tú2Òî çÏ“ ±&Û¿-—™ù+À­vWúÃïåI{?¸P~2»>éçïÖ›š«k¨ÍsÃUÌ2ŠO&]þÇmÕ¤}ŠÛˆRCOàŠ 0ù·w»ØÑi^{§ò^'ŠZǪ,Øw¼üòUR/pšªVëcé_½±ÕY l¿F_œÏâ kÿÇ|i] ;ÊÓþ¿ÈïîDî+9¿~=ÓXn¾ûV¾»ùŸ¹×˜•Ö}À…OÛH¸n“`ú_æöÖQ_®Æ¶+{~ ¢wR^Ët?H›?¿s@Ü}`ïà3\ßÄó¥Eô?ïvR–‹ju<éÉÃ}ÛÍ„à¡v';C5W×P›§•ËÈõÅÿð¡ôŽã£,“þûiýéÍí³¡v¾ÏþÏö±ß;”¿ÿäÃÉó˜õÓëï÷wú—ÑÚ Ÿ.«"ÓÞíbG§YíÊ{(j«²Z†ÚiŸZÛÀê6Œ™öÑèAÖjç7ò¯gÿ$½'ŸÆ‡ú''Ù>¯&¾mÔmýkÚkLx{™:ÝoKÛô©Õéž´ÛQÀ´÷íÞ•Ï'÷ý¥tºÿ`ç¥#ôÐ‹Û Læß=vºJ›¿ädú˜è}þ0 Èmé¾yÏë/—¾ŒnþË[޶©!]}žE'¤­PùPëB€ùL×8Áoa@ÐçøÚví˜~vÚпÍr‚ŸþÿùWq€hý´?ŒoCÃfóé=ŸWñ×./ýh}»Óy$ߘ.&Ñ}Ýóh=š>^wœž|ñ»hƒåÞS´3d»¹Ì¬ƒ­¶œž_G›87_÷¤ÓëÙe`»Ðd@¨]mù2òÚ!³ãªmÙ‹hý°}âÍ›x'v¦?½`öÙ·Ï= 0~è‰*í›uÎõáwÏ G?—"¬lï*½£ãµO~{gÚ’i›3i¯>‘gæ=DíÕñ3ýhçar2³÷|·wú~µûE4?^—½é{¹#íÓ—ÑûÓ›=o6º¬ò”÷ó… –¡¶ŽÆ×9í ½/‡n8> n,ݪ‡ÚÍNð‹>ƒEÁ?±ÎUÕ;¹Ét‚_ôïú\®v; Ѽý¼á|š“ ÷ýçÓyûw9·‡gªù&°èƬ¿™ãÁW2|ã^ÏöÝ6ïñž=âa7Š¢~z™˜/}\ö*]Cmžm×êe”¬v%þÖ€“ìOï³^ëgèOiçø¡Çšù¯û ].EXÞÞU{GgQ{7mãtÝÓ×ôÛ«[Û5ÏŽdÚ£¸y›G{÷Î~g&ë°…ý0nÓÆcæõHæKž7~«ä½Näý|!ö7ëÃÒÄû“½LC¿p”¡û;UµÛœà—ìggöÖí@ÿaXð[¿x^L6û¯¿É|ÚÑ5f^3šÌãü ÷¦1¶ó|Б^ÿ»Éúoðâù5¿û ·bbÊ|¹×X…P»Úú¡Ö[oÌF>í<o]0Ÿ_–s üõ'þ}ºÞ"Mžëou{—\'ïlGgY{7ÛæÌ>·+F$ï;—×9µwq›fOÎ6¿ûc¸ûó½èyãG®¢ó—§¼Ÿ/Á¾ãf}XîÒ¶öpV¾:_ËÐô¡ KõC­ÝX»>SXŒî[¢OÏ ÁfT×Í`aXð%7>vÃ`þÞd>µyô?­cÌô¹VËc]ÿ¾“'ÚÆT ¢õÎ<g¼1yN}®Bíy¶]™CíLUî®éÿÖ|nz{¢?½W銫ri}ö߯ëR´ŽœÿøLžFó¯?ÿ&?>}*/~ÿ±´&ÝP"7ßKÿ»eëzóµ [?ÔVeGgY{ñÚœÔöjî¾ïåç¼Ú;óøh¹h¨5UcÿýÇﻊ¡¶‰µ(UõC­mà×:Áï• v)Á4Ì÷íïž…aÁo|£ÛL¥!•ã™—8›ð°Á|Æ{ÚLçï»þ÷rã÷ºfcðGéwÆ »W¡ˆ_Ï>´‡õfÇíÇ’øqþ²¸›¹‚G¨]-s¨=øPÚ¦òæ}öæsÓÛüþô=éuþÒÌcêÅg¼¾ñºd»–ŒÝè,v™™>‡ú¼ÞQ&EmÃ2‡ÚÊíè,kï†òÖosìü¸¶$µ³]%ô¾ÿΩ½‹·]4Ü7xÍ“¢ï…¶½ Ÿ7ÛºŸ÷:QÔ:VeÁ¾ã&~XuPíPk+ ¶!Í~‚_Ôð^¤Ý¿Ž@ûfr}]„…~888–n'šî·ò¯½£éó­3ŸÃ×Þ‰Ñd*ÇWñFÎ<f_î·ïÇýuuÚ¿/G_Éw2†¾§Ñï£lï7Õ‘·r;êÛÕÑm®=é§Sb¾L£¿\]Cmž2‡ÚIõ U¡ßƒ"dµUÜÑImïž%Úœÿåµ%Éöª#ÝÏ][¦íÌKùyÛöî6 ºQHv7ÕÚÛË(üêcô6÷þírM}ÞlÕZ}lžò~¾j×ïÚÕŸ´ÎÓ¡ÝôWîäô@¾éžþ:Í­ünïu¾S}Ìj…6PQèô¾²‡b˜ Ó©Õ>•î,|SáóîÏaÃXíP[€ñ• N¿žéû¬ ÿÇ R¿¡vµÌ¡ÖUíQÚ¦!s¨eG§rŠZ'𤯡öÕì Ðy2å½Nîzñs0·‡ª7º0êúù(=lñ™üSïSy`.­›èƒ¤‡u|>{¨ÂêѽÆùKÓºáW¢=ųsûº72zqí™ú¯»ÈlŸ¥ø0TŽý   ¿i¯½™f…Z»¸Ê¥¡Ÿ™ŽZ‘mX«&«k¨Ísõ|ÍyÈRGyŠ 0™C-;:•“÷:QÔ:VeÁ¾ãåÖ8î´Fíµ˜ —<sÓj™v «ºÉp©ÐÿÃvIv¬÷ï‹iŸÄ{¯å‰†ÏD#÷WL œ:/äéÊP›ÜcwfožSßëæšj#îRÑúªë¬Vôφ¶O–ªk¨ÍË(\» µìèTYÞëDQëX•Õ0ÔÚU&CŽØ>þmn¼¹C÷ñd¾èöð|ê—~Qг‡ëÝÿ̆Ú_eøÅ׉ µIzÒRÇôƒœï‚`OhZØ-! ?ÔN—E|E3ûB-v„À¶Ë(\º­)í]¸ò^'ŠZǪ¬†¡V%Ãb|˜Ý„Mÿ,Æ™ßíYÎÌ^ôAx®ÿí\x]juþœÅÕYÓåÁ¯Ê¦TU#³¯éÎ:_Ä=‡}|«-ݾëlj±#u lú]Ë ¡6\y®>Ú»på½NµŽUY°ïxù‡•µù­ôì‹qðÔ°›20¾ý…–Vj§Ás¶RûFF_³F¨µ](¢yÕùL“..ÎWjg‡wZfZ©½ò†uñ3-¡»B¨]P®<×í]¸ò^'ŠZǪ,Øw¼üÃJ†Å8°¶Ú]é¿—'ÞàÈ©㯒ô\w€éµíÓûÔú–…Z ܼÀšÁ…ÞÖüµ¥M¸^U¥U~÷û|vì B-v„P»Ú.—ÑÜ‘(7ù#Á˜ö#å1:EíÎärÏiÓ\»hOl]t‚“^ ëLOصÿ¯Gž^<“^÷Û¥…й÷‘,l$߃»æöÄNÉ)¥×Û‹@{®¢Ö‰&©}¨5ƒ@ÿøoQã£×fþIÆv¾i¥6e`üURF?ˆOò檡¸”ϹÁ™ã~ÁG¼¾­jf{½ÁV—Í0^Ï&'˜Íx¿ŒÝHLqþ½a½LÃÍèÛKtõ˜L:â#yêN[zÒO}Žxr;jSÅ„€x§É{í™qrýéP:½o7¾ò¡vµlË(Zv:L²‰h[ÖéËåàóÌ#ÁL )mª�ÿÎ쉘®]N†Ô4sÝ»ì úóÝÓô½iñᢧÈþ^Tžëo—í]Svt2½Ï èsä)ïç A°ïxÕ‡5;´  ¾ˆ/7kª²?ÙÛ½•ÒDf¿xÉ °teŒl M˜´€¹ø1þkL_?ñøÉ—ûFFƒ^âd7 ¹ýåa"Ù°¸ç› ¾íÝç¦,‡‚µÑîÓBÆ‘Móí¼Œ¶KŒ Ü<nQøJzÇÑzk*é³—cÔõýÁñì·Ð0·³“œgo½œ\jr=u µyZ½Œì˜¹0³$ä$G‚ñùtýÏ:Œ { '_§„Ï%'Íj <ý—Œëó²#R³ß·)}oŸFßg½�IöQm”¶©EÈÖÞEßWvt–[µ£“é}®'ïu¢¨u¬Êjj3a`üÒU?ÔÆ;@ó¯|Ä;,‰.)ö$ÅiÅ~Qˆ‚âð?£{Ur#ëß§Êéóì6:Y/ë#Ô®¶|Eajn$˜×vlëø¶VûL.Mû·x$˜7f]pägQœ &±nDáå‹Þ߯dLÐJéÑQ[ýçùÊœ­¢.¬Öe±u¨õo]ñ^,]¾EXÝÞ±£“ËŽN¦÷¹ž¢Ö‰&ip¨e`ü]¨v¨u³°umpÝÞ¾¹íŽ´{?ÄÁ1yXËLºáÿSÜX/Ø`¤†Z×xO‚C–°h#k•m¤âù\µOS×P»}Û5µz%‚©.ÅëYÜMÉnôÍ:QÔH0vÝð¾+óëíò 8ÉZRºuÙך]÷¯¹jý[ô>&êjרÑYØÆÝF‹‹lïs=E­MÒàPq‡"Ì—5šüÃuà{÷þf¦d°*GµC­ò7^vjU»çoI?ÄÕÈl{æé¡ÖÝžµÞç5ß@.µå‡€ÄFjÂÞ¾êùRjW[;Ô* +OÙª¬[çôppQ#Á$Ö(p|}¶N€qÝǦ߇™+,ºõy.ÀØïìÜ9 )½‰º„Z•˜¿;:›¶q —¥ýœâe˜ho¢i~Ù._Ž;ßÑÉô>×£ó•§¼Ÿ/Á¾ã&~XuV¨¯‡òÔô•òB³!°#]h_°ƒ;K6ˆSË+µ®QΖ…Ú]„€Ä<OÄó¹IŤ®¡6Ok‡Z³®ÞûÜÏiµmÚ?1šr fѺá[`ô»vÏ_lÌÉ:åÖ÷éÈ3±å¡hÆ¢€2¿æ\õZ+‚÷>M|_²½nQÛ°µC­JÛÑÙ°[¸,ë¶£“é}®'ïu¢¨u¬Êµ(UX¡6jzÍ0gzQŠïeøÄo`]ß©¸1=èôçNI“jÝ¡²ƒSÛ¿;KXjwÒç9®öDË'9ì\u µy¶]ë„Z æIïSÙ7Ãö½±Cú•Ú¢F‚I®iì|Î… íô¿í‰CŽý^ú'WšÐ}‡ÌÙíî„]`²¬Ïæ}$ƒÈŒú¥kª“öû=ÿé¹=šÁóÓ¶ìûW`4½—YEmÃÖµ wt6kãÒÃ^ wt2½Ïõj·ì;&Ô®`¾pÓ*LU„jÿM~|ú¤÷ðÀ^6Ø6’®1ÔFõN††q†;LæBm´q=‹Gã˜i³„€x>çû=–Ìúå‡�;Ï“T^œÆ}÷&a}=„ÚÕ²,£¸kÏȾ±Ÿ»·öèaôù¸°òÚ†� 0v²#Á,ê?ßî=ÞMþH0f=ñîK]·lÀ™<‡{-ÿvïõÏ9Ù±›œ}>½Ï¬ßÉ«$&,|:ùÁt®iZÐ[ô^æéýEX'Ô.ÝÑÙ¨‹4eG'Óû\OÞëDQëX•ûŽ›øaíVÔå0LõC­«Nhãø³Ü˜†2Ú8EêG¦ÁŠÂ@ÿRn]ƒ©÷Ù)>Áâ&Þ¨Í5šÉ›tÃØ“Á̸ÀÞýiïÂÇ”¢-d§v­º“‚P»Znˈ‘`J—çzàËÒÞeÚÑùÓÿ[ÐÆíŽÀ|`oʎγW¿Ï ès`;„Zd`÷‚³ìÝ®PýP›Íøz §½¡×xiÖ‘36mÎD¨]-Ÿed 0L©ŠÚ†åÕÞÑÆ•/ïu¢‰9)Øw¼òòýâþ@w¤}úÒì™éI?ýn[î<|"ÏŽSúôèá…c»g7ý?ýB_Ÿ5 ¥ÕþJίßÎ?ŸVÞŽŸÉèG;lŠ»˜ƒ;tõáCé™ÇM÷zÓæéêú¥œº¡¤&›é<èë?ùâwQÈ\p›sòãIßͱÿ|Ñžªé¦óÔïJûÎßKïûžçG6‡!`œz„Z=töþì¡Gú«ófGºº†Ú<å¶Œ&‡Ní÷–‘` §¯]„|Ú;Ú¸]È{(j«²š†Zí7󡽪‡ ez™Üäܺ0}ˆ’W9r ½ÒûqƒgNxqWF²c—¶Žzòä¡}>sß­=tmÇ3µ'�íw¿—Ÿµo÷ºãër| ãBþûü<™q"온¶/§é{¤ý(Ûñò:¾ŠlÊmo\nk3÷l_#;kôZß<ùÌB‰û!½3'õÌRж³ëM_¢øqëSP­S“¾°ºüôpÝ×_¶Š–~[zrG~µ«±ŒÂ¥ß¥"äÓÞÕ¿kÒŽN“Ô3Ôšwè…³¸sx|RÍ’³Æmùûâÿ÷o7Ît`ÿãÌóÅaÀ}!üײ}&Àÿ;1O&4¦}É^ÅWûíô¿³{Ð6ôÎÜfçÏ·ùÝï:`–ÏûQàüÓlX5_ò ¡ViUvƒ!`êjQ†º¶<7\„Úpå¹øhïÂUÔ:Ñ$õ µ&œùUÂ8”e µóg”§Ü®'ËljíY˜i¡Öœˆ³h k݃þNžè¡ÂÉ5õSn3Ïχ™§™3Hõõ6µ[ C¨EV„ÚÕµá"Ô")ïu¢‰!9Øw¼üÃrÕK¿»Àa']ÒB­rÉäæ{é÷çÄp!ñ!ü} ¹öù\àC­D?«ñ}6ÔÎt?¸+G:,IržÜe*m¿]3_ß}+ßi€î<ŒßÓ¤ýcÊm‰K`šº?Ûc_CîÿÌob*­iazj·†P‹¬l«±ŒÂE¨E¡v{5 µ‘ÛË(ìÅ'd™¡Jt&,Ím Už9Á̯6ú'¹ÛíðMöùî·ïOû!îw¤û¹»O‡È÷ú؃¥mÙ»“ÐÒçiæÄ®Éüÿ,OÉwBš™‡?Îß6ú½7ä’VkßÊí¨o» D·ÙÏfúMÎ Ë4_­Ýv‡P‹¬êØô{‘Bm¸ò\|´wáÊ{(j«²`ßqxV²ûAýd†P‹¬µ«jÃE¨E¡v{Á¾ã`CíÒ+¨„,Û0„ZdE¨]P.B-’šBóF¨-…í“ͳNéýyC—mB-²"Ô®F¨ WQÛ0Ú»på½NµŽUY°ï¸‰Vj‘m5–Q¸µH"Ôn/èP« :SXÓG}d~–IxÝð»Æž)ŒéË/¿$°­ ß%m ™Â›Þ{ï=û)æË}]/°`—àÉɉÙà1…7½~ýÚ~Šåøå—_fÂS8ÓË—/í§Xl¸P¤çÏŸÏ„g¦p¦¢vtš„Ö�J¤/�(ZÛZW��€š!Ô� E¥@µ�€Bj”P �(¡�ŠAë �%"Ô(•Z�@¡µ�Ê@¨���D¨€Q©€bк@‰µ�Ê@÷���P �(•Z�e Ô� E¨PB-� P„Z�(­+�”ˆP �Å u€j”î���@€µ�P"*µ�P ZW�(¡@è~���€àj��<B-� 0£ÑH>ùäû�‡P �( ¡�ŠC¨€’h¨}ï½÷ì_³•ýÝŸã1<†ÇÄÖ}L“4ó]ÀüöÛo&Ø:Y6<<f9³Y®É©£f¾k���Ô ¡���Á#Ô�� x„Z���P ��€àj��<B-���‚G¨��@ðµ���¡���Á#Ô�� x„Z���P ��€àj��<B-���‚G¨��@ðµ���¡���Á#Ô�� x„Z���Näÿ\¬ª€åx’¨����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8e.png��������������������������������������������0000664�0000000�0000000�00000216474�15030617045�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����ù���'—4W���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìý͋ɚçê_¸›Äf6 ³m͘ÚLlnn4é.Œ±HšŸ·¡àÄ%‚ZÔAÃ7¡8ÅäÑ¥@œÄ!¡(®:é@÷bDvÕÅ‘}8-ÔI6gŠj‘$ÝBˆà¹ö˜ÙãanááîaþßRº‡»™»=ööµÇÌo����������è<����������v�ˆ@����������;�D ���������€�"���������À����������`€���������°@���������Ø ���������ì�����������v�ˆ@����������;�D ���������€�"���������À����������`€���������°@���­[·���`WA+���4„´Á*Bõ���ØUÐ ��� !m°Š€€P}����v´‚���@CÀ�€í���€���4 PØ����ˆ@���@cÀ�€í���€���4 PØ����ˆ@���@cÀ�€í���€���4 PØÚ›OM �tX2���ÐÐÉ`{` ×Ü|B@hZ�  À’��€†€N&�Û¹v€|M6 º,���hèd°=¤|¡Œ5äh"°IÐ%`É���@C@'€í!å e¬Ù Ÿ@M‚.K���:™�l)_(cÍùšlt X2���ÐÐÉ`{HùBk6È'ÐD`“ KÀ’��€†€N&�ÛCÊÊX³A>&›]– ���4t2ØR¾PÆš ò 4Ø$è°d��� ! “ Àöò…2ÖlO ‰À&A—€%��� L�¶‡”/”±fƒ|M6 º,���hèd°=¤|¡Œ5äh"°IÐ%`É���@C@'€í!å e¬Ù Ÿ@1æt3{NÑé”®æöP*7ôãé„.Wþ&Ø$è°d��� ! “ Àöò…2ŽßýîwôË/¿Ø¿ò±|²BÁɈ½]}´ÇórM³É)Eã!õ{‡4¹ÞPInf4‰¾¥ÑàDoíÁ†póŠÆƒÛt«ÿM®>؃ æ÷©7œ¨7Ò�æWt~t@û‡gk fNדGt8ùÙþ] Ô KÀ’��€†€N&�ÛCÊÊX8ä}ƒ¶’OW ä¾ûcšÒpÞR4Ø‹ÓT^�qïwƳ÷öx°€sø­÷|sº¹xB‡Çêëù8ÑžNÛÞB rßß­;4ÜPHI%5Í9°bUï ÊïÝs=¡áÝ¢ùoü  À’��€†ÐµNæ|6¦}ûLéÁÎÈ'i¡O£éºcr0–öi8>ɱ4@1¿ ñ~/åëBÎÛü’&‡ût«Œç�Ͼkï‰û6 FcñLý­õ—fÀ­Çƒ±/wÇpó„Á}çòˆAîï«Äˆ=ÚçC°x Ë`EÈÇ)öÔý R+ТÈïùX�:VõG±)Õˆ½h©ÇùRe’šæÌßPt ÒØûŒ¢KÇ[iú½o–‡Û°I�ê– ���4„nv2¯éb|`ú‡Íü¹ô”ßõtt~µ<8¸9§Qßoì�g~EÓÈL²®÷˜_Ñaâ~)ËEXŒá¥ |>ÏÀM õûÍ<>ÐÕù×öYnÓàè]]ûÏÍA2æ#]Eç³l£¸ï„Á}çnX%¹¿«Ž÷4ßS÷ÜÄó¦zÄä RK¨ºbú„†ºnp®mU:Ý?ÓdxGçI5uJFšsñަ£»êºõGç$µ_.¬ð¿É3To“�Ô,���hÝìd:(²;ü‹enÓAô&c€´èàÌéfzd>:ìÓáärÍ@Ëó0Êyx y?ÇÀÍ´6™uvŸá6 ƯÌ@Çz#ôö?£Ïÿ[–'º:öÀÚlÆ»«Äù«ƒûÎÓBšäž_‹/ü²'`t±, ˆ×ßÞˆ¦þv@¾·]HÇSW<–ú¦Gû£z6˜²*f»âÆ]=µD®°,‚”+àf3¿:§cöêÓ¢Ç)E:-²TË« UÐGì¹$ÁÖü¾N#:ágàzîÚzýH—µïO|¿OiE OÄaD³ySâ…øX=ÿ'qݳ¨D€ËH³þµE§ƒïcEoÇ+)¾ß’Ð5ÍÎŽl>rÚkÈÉì_ìyE ,I+�]�– ���4„nv2eÀcž-{F:ïïÞ2®åYÝU"Q ‰ÓêÙùÓ1}µràæ{4ß„6á™Ô?¢i<Èʃ+ºm²nw‰íA÷¯ ®ä_‰,[âߊH(Ë T„ƒd]Á¢Ed„{ýü2¢¾Þâ{ZI–"-ÝOʾõPq=]ÑA꯵Þ9²”K]¯ë_¬ §ÅõhrD*·îŠÓ-ž’n½É¿}NgRO²8öKú»ãtÄuоâ÷ÿÎûãgsêõÄóf¤9ö€´Þsè%žEݾ”—Z8·ïžÿÖy«òÑ­å¬}÷˘÷‚ºtX2���Ð:ÙÉ\+ØXòþN±˜YæàVßûh•°ãÿvy¹È|öŒNs-!ù@—уO÷+:ãìlW¦; G�Û`¶»Ë˜wjBE ³Ù¬E÷ç ,¹gã–Û»4š¾3‡}áC#BD²®Xi׋—ŽO\žnh:ê«ß¨c±g—ýÏÌïbáVŒd9N¤–YNŸ³ÜÓ-Û©Ïœ–nFÒô)Æ_XoCN²?Û:ÁF<jÔo÷FS•2fñ^âgsêõÄóf¤9)ä8ï@Ò_ç×û‹wÓÓ…~ÿêüø#ý1~vu$n;Š äú½«�@€%��� ¡‹Ìõ‚!ïïòz %—–­p9¢ _8áYÿ_æ˜5þ@W“ Ç?Ñe<8-"â8K? "ºÒ¿á¥&ßk¡@/çH{Oñ iuÜó«)&6œÎXFÓ!–Þ+BãC6Ž ×®0ä,µJõ¼q<Jœ¯K-ê!¹>E�q˪ˆ@±×³Œ5JÖ RËȾ7nú$^7-Î3'–º-žo!Ò(ä]ô?£áp”ü¼s¯µ‚Mš >òl"êðïÜçÍH³¼Cí…õ3Í&cã¥Õ; ñ§Æ¹.¥ÞwÛ…ä’õ®ò¡ó[�º�,���hÝëdæ]âåý.1hòð<†²¼]|h!¤xÄ&\ÌÞëfì�ô% ôþ<®¨”oÏCö—ÏLšRÎ/½Og“õçWt~Ä’,mqÞgfþtƒÄ»ChEX‰xÍY»u—Q¦ ;N° \q©‡¤,¤ N™1uƒã䔡8·ŽŠ¯]퉲¼ÜŠʵnÙvĬTá&)6IšzýôX¼Ÿbä^‚óiï/>&ïÀ]—¨[ÒÒì·êÜ`D'‰¯<:â[j½ïäƒãM´À¹>«=X¤ €.�K���Bç:™9›Ü¿cŸ“ÏövÉ+-ýn)$QËðl÷WV�Rº¢Rbà“WÄI{6÷¼7èÓ8TÚ;Œ—š9Þ î»ß`v¼M˜ü4!mùRá¯þꯖ–…µ1üþ÷¿§ßüæ7qpßù&a5¼ïË) m½"W8qÁ-Oi^DЏ,,ö•Y@\ïY¦å”»¸ž‘cÉrœ* -á–s‹ÒÅu0Eìq~›%¾8"™°$âhÒžcᥴXúæÜ[×Kê7ãG4´K[× TŽÈ)Ð,Dœ„wSwO6Owò7«ÝX…N› �tX2���кÖÉ\Ì «:èI$ÛchùSéé‹UžJ×4‹Õ`oÕŒ½^ÓÁÁbéûÌË"Í:œÁdê³¹éMyOŽ�µ4Hr6³MЦ͜w óÞL�apßùºðÛßþvi¡lì`GG<ðwË“S?ÄÂgÚž>)H,¤:åeii”©Œ0ÅÞ€oh:á/ü¥ Ri¤-7[ì¶§âýeúýxó1)ö¼{CÏŸÿIÝ7)ȼ»|IÏÿ¨ž=®œ=bœº…ßéÍiÊ_>‹¯‘÷ç>[Ú^J,ìü‘.Ž¿¢ã—'αý8ùIåš'PIšwè×›óËèôGŽGÞ‹|MPùyúmŠpåæ¹S×-}U,úݨ�@€%��� ¡[LO`É-ØdýŽqE2gÓ½ße º<¤%цÏ?8ΈcY�J>³?PÉ#â$)K"½þ{r2ß{É]&áœs–k¤ï¡Ñ-Ì{3„Á}çY=†ØJpÏeâzö‡4fO¤ÉlIÄŒEY-¦\ÓlòŒ¦ü°„×ËÇXØè ¾¦sÙ'Ç@n.(’Oµ‹çŸfáÅ¢ë›?ÒyôÈŠÁûôù(¢¹lÅå—…¡ký9õÓħèßSéÍÎ#Y/–þçGiQdQßôèñ良âxnÓ`ô5ÆSõ^2<‰§né ¾¤ÇÑO)ר:O¾¦¦žëpriÓî‹ó|î-½‹©tŽi¢…—Œ4»uv¼)ì)?—xä½øõ_ûÉâsõ"x'žSØmž uè°d��� !t«“¹¡`“ù;…+’¨¹$ÀÝ‹B‡ta)é©ä,óžÎì�$‰ÞD –«®iÖ‘H¥y%Ò»ôžÜA”' -‰KjP)›®êâ33xê8&_L�apß¹|ñGp“Éü’&‡,È$ïÉËÁŽÎÂÊboßίivv´XFÆBRbÿuíÒæé,\ŒèdIlr¼Lø>“ º²÷GtÆ5úgΧåÝãiÄuØ> Çš]½´›&ht&ñ/ÄÝ„xÇ#ŸYçƒ $]O»ÆlDo6¡—wÀïñ)Miw¼ƒÔókaË}'æ³ò†Œ4+æW/èÈz;i±f8öâQ¿Ñu ·×ÚüOôüù+ºHÔi‘û„¸îŒ½¼Š#6�@€%��� ¡SÌ„`³bùCÞß©£ÉÙæÑFãÿ.kæ×óTJó¼ÉÄ®V„41'7=iÏæžOyOÎ{LÆé¿ûÌFß'J]Ç}~÷KÈ÷·©Ì¯hèààkz9}A§Ñc;ø·×*Ë Uh¡ý“Œº? [_ÇF›±Ò&h°d��� !t§“é Y^1þïV}MË^²z o²f~½ßåkžGRvȪRpÓ“öl+½ŒÜ÷èÇéì/¢Bö†ªÝGÞ÷¯÷šeÄÖýºÂñFÔaX ¿¿b²À‡¿ÜøõK @L¶MÐ>`É���@CèN'Ólò.[5xó„—tÑÆý2 ß/{еKÁ ã>Kñû­^êµî¼·¿‘uòÓòL�aàwWüV瓈@¼\è‰ãÉÆûÇ|MƒÞæ{¾€–ÀKå²öjs1 {Œ¹ËÎ6%Û&h°d��� !t¦“™K°Qäý]<ð“ߦmº,_ó²¿é‘ܯ'·¬ðþ=)8_·)î‰àn޶$.e)/‰ùÎîaâ¾Gˆn^S¤7wMzùK"̾'_Ó蘿^Ômâw CñGXŸO¼ÁóSÅûÇØ ÷ãYÞt9ÝüøMWÖ±ü›SÇû'•gµMÐ.`É���@CèD'3þ‚ÎbpÖ;ˆèÒﯧü.}é–êÌÇ_¤‘ߺ³ý|~Bãø^v#ÕÌÍ?Íì°»Ù+o$z½Qg6ÇõÔ)´´Lãzò¤R‰¥`¼éé:ÍëãtD{7ïõsrDÇòõ"õ¼ñgàÓ‚z_ÑÅN œÝçÍùšlt X2���ÐÚÝÉô–v-ñÞY÷»…'LrÉÖŠÀ_Ì9‰(ò¾î³„ûYéÔ°©GКM›×‘æÉ“À]æ¶OÃãóäsÞ¼¢±xE$¾$ðW~žx›çò;ÃÆÐ y Ÿ@M‚.K���:™»ˆ»Ôm äFÊÊX³A>&›]– ���4t2wÇ‹hÅFÖ <R¾PÆš ò 4Ø$è°d��� ! “¹‹È×»ðU£m#å e¬Ù Ÿ@M‚.K���:™;Àü’&‡¼‰õ]Mß©?#:àý€à´u¤|¡Œ5äh"°IÐ%`É���@C@'sˆ7¾K£óWFò>Û¶ƒ”/”±fƒ|M6 º,���hèdîî—¾zÔŽi2ƒ�)_(cÍùšlt X2���ÐÐÉ`{HùBk6È'ÐD`“ KÀ’��€†€N&�ÛCÊÊX³A>&›]– ���4t2ØR¾PÆš ò 4Ø$è°d��� ! “ Àöò…2ÖlO ‰À&A—€%��� L�¶‡”/”±fƒ|M6 º,���hèd°=¤|¡Œ5›måÓü꜎‡û´7šÒG{¬2æWtþÕˆ¾:¿¢¹û}òšf“1 û=ó\½Î~ èá74Ý8!èêükôø=ݦÁÑsšž|CÑ•¹áÇéˆööFêþ74õÕoîÒhúÖùÿ;ý;ŸmØ$�uK���:™�l)_(cÍf;ù$bÈ­­ˆ@óÙ:ŒÞ.ýŸ ‹ñõ´ð3S©0ÇfÑ!õµH£f>Óþ­}:œ\Ò<„Ä"Ovú@^ª·I�ê– ���4t2ØR¾PÆšÍöòé-Eƒ½íˆ@WgtÈž>ƒˆ.Ýÿk±æ6Do¬WðžfãQ¦h³íéÓûŒ¢ËöHöýæW/è«ÑSº¸™'þŠºt X2���ÐÐÉ`{HùBk6ëóiáÕsëVŸFÓ#Šð߃ˆ®n^ÑxpÛž¿Mƒñ+ë#"ÐKz=0çÙçý”F{‹{é¥]Gêéë÷i]ÐÍGùMZÈòÀaaæÞŠó‚»´ëõ_ÓùÕŽi4¢ÁíÏiüôúWÿˆ¦,àܜӈ…¦„‡‘…¯;RŸß…=Ê#ù @€%��� !o'ó_ÿõ_éÅ‹ö¯æóË/¿Øÿ®À6È¡MHùÂ@®ÙäË'#°,¼z~¦ÉÑSšÍçt=9¤ž^jeE˜ý±:οq=ì9Y’uÑ@‹@¿Ðeôí Žéâæ#ÝL¨ëgïù±bUï&×Ùž7ziWÿ š°ðc¬ÞADoέ°e—}}Ô^EV¨âëìGú]õ‡t<5{%1ýKPëm€ö�K���‚t2¶@sÉ›OZ<çú9_ÄK®æWS:÷L¼÷Ž+}¤+ö’sÚÓ‡–?Ñdx'‘†[·öhðôéž@â±´ÊȳìsiáèCF]¿Ÿ9ÝÌ&4Öbløl.ˆ@•"ù @€%��� !9°@@@ØV�Í%w>Í/h¼ÿ '—tѱöÖ™ï^&½¤é‰#¢ä^ëßô†ºæKJaÓ’º'к<Óéå/Z(JÄÇ^IkD Óoèáägó{F¿‹^òÙ U êÐ%`É���@Cá%_ñ‘qøÕ¯~EQ5v9Î_ýÕ_é4ºéåcuÂïKÒó›ßüÆm³Ù,N§µÉ°Ýñ;”ôr`;­cÙÛÕ¯ýëDZ$=mZ2 ¸ù¸ãñÒûü=zpl—|ï^Nu9§þw!¢¤ %ZlyOW“/Œ×Эÿ+}þ›ûúk^Gò‰÷ë—=w—"Ì/ir¸ïíÝÃ_û’†z¯"ŠäK_ækb{Zò–¬]OhØ»CÃÉϤ—|õ)šéÈlLÍ‚§Ó^/ƒUÏ&h°d��� Að�›E€´-kòÀ–ÓþÛßþ6‘fŒÿã?þ£ýE=°8áŠRu§'6‰@‚+¬qàwüw÷wölXøýù¶'iúýï}©Z„›ë˜_FtÐëÑþX–‚‰¨¢®ïéñˆ7xæÍÿ†&ñfÒ{4ˆÞÚkùï}:|vBn[¡&±1túÈfe¾¦%<ÛŸõfÓÇçtßÒ~2Þ‹/Þۇý âåh}úr4¢¯&S:ÓÏÇÇäžVÜ’ëà TòNè°d��� ð •«®X!½.xÛd8}¾põ»ßý®ÞJ®×J“–6¤Ñ‡µ&å;—#~iåˆE¢ºD*7Ï�h °IÐ%`É���@°xƒfwà#7ÑkŧI!>ì9%éb±¢ÉH:9ßÛDS=À8ïýekØxYJ°Œ›W�4Ø$è°d��� X$I ²€Â¢J–¯p›²7L<Èw=BšîM%éäwÚFü½ 8Ô½ÃbTÛ…Ö]ÂÍ�šlt X2���%Ø;Á_>Ãñ¹¶x'°ˆåø›¶ŒÉø·Á»FÒÚVˆaA……@yì%Ô»æ4dm$Íï¼Éûmín¾�Ð`“ KÀ’��€-ÃϬ}JÚ8øä½‹Ügàçjš— §ÇM_Ä5'Ú,1ü®›n#,bfm$ÝO¼®âæ�M6 º,���Ø<\µ ¥éË“|šìåáãz{´Edcñ‡ÓËï¸ ´Á[ŒËhÖ†ìlÛm+£]ÀÍ�šlt X2���P1<p”½x ÉâO½ XHñÊMØï% $mòªqm¦+°­ûeÿnb`÷EN,(b#ép¸ï€¦�›]– ���T"Óöác,L´qÉinâ—Ÿ²`qÁMk›·.Š@‚+Ìq`A±)_óa7̓OD\l$½]Üwž›› ŠFOhz3·Êóq:¢=NGï&×ÕÝw§åšf“1 û=›û4Œ~¤é“§4ý8§ëÉ!õl™Ð£þP½ÿ«öúæ3Ÿ}GÇÓwö¯õ¶I� ,���(‹$<ÀMX,iÛ~?.<ØõŸ‹ÁM³\!¥iKÖÑeˆaqÅ÷&ã¥XMµ§Ue›óªÍe»É¸ï9ó«3z8|B @†šŽúÔNèZÿý‘®¢tkoDÓú@@ü´äá]FGt<{oÿÎÉÍ+nÓ­þÆ“™Š™¹¦‹ñíÅñ¿§Ùø^œ΃Ã~öFSõ–|ê|o+˜_ÐñÑóÜﳈMÐt`É���À°‡ "þ –Û¾—HšçFÓ½¼dGÒË÷¶á¾ó®Ò6Ï2½–\‘N‚xùµÉã¬é¸ïw-7ç4ÚÿKŠ.·à2¿ ñþí/¨^? ÅiÑÂÌÝ£‚ÂË;šŽîÒ­þ4ñ½z®Né0Žÿgš û4ˆÞ꿈ÞR4Ø+(RÕ §YÙÎU¾”Û&h°d��� �YKE8ðñ¶yîvyÞôçât»‚\E8Wêú’#W°ãÀy×Ô=¦\¸dm$Íå¿íâopßéJæo(:¸“FæW/舽XnÝ¡~O{¦¼—¥Tû(:9¤>ÿ¿w@ã‹Kí]ÃK™öGOéd¸¯ãì ŽWÑUDƒ[÷hÌž4§4Úã4õi45¾1*2šF#ôøøm:ˆÞÐ\¼htúïÐpò³ùmw©/£Šhvógš 憎U|¢ó£õÜë%-¯°ésÆËÆ_æ³1íë4pàgøº™MhlŸñVÿ¢Ù²\c®ËJ·ƒ¥î›wÃïáx¨Þë]õn¼åUþ{»žÐß×Þ#š¼Žô;èDtymßÛþ˜f63Óò’åšùÕ9ËsÄásæWSŠFüîÔ±ÞgFÌÌúëŸÕ"qÐ`É���@Ø &Í€ƒ<xoê’–"¤}͉¼mÀõ.áÁxqE ]Xèò7bnê׿|8\'øéçÀÞA|® uB¸ï2›9ÝL¨/}>¢—$Ý¥atA7Zlسž*fé’Ù×FÓ^,wŒ¨ ÅŒÞBÑ×±`qmö½qöàÑûòijÇ̧VÀù 1ÿÌ"ÊÊ}{x‰ÖgÔ“øØ“©ÿ‰"´�³÷9=þæ!=œ¼ “Á›~»O|_'ý|K•æÃC߇Ÿù~,Í/#:èÉóoŸe¯ûžé·K¹â<±¢˜¥ùÔŒ(š^ÅbœKò½™gÙ|NÃá˜ÎÆêݦþ?¢gÑñï2óÒ ýÃ3ºR·3¢•€Ì»´×8þMjžðoä¯Gž€.�K���2^Úž 2Ðë ,ö¸ÏÇbP[„N§›î¶¾wMb8¯|Ï:.[mò„â¼Jód[ì‚w`hÜw˜Bn "ºÒ[Qftnö°ÑÂ,ô`ÿ¶ã1Ä×~bþv½}˜øºŸµ—ÐB(±‰ŽÏ Pìµr=£ÉɈ{VŒš_ÒäðN.SsÇcF‹P,ýY‹#=ñ(Ò4âuäïäþ±ïO|_ör1Ï¿o?Ÿæ¾Ë{÷ˆ%‚›ý[{í8ïÒüØÃ}oŒCßëóíAtåünE^ê÷b½yæWÆcJ§Ã\³?~M׳çt2Ð{q¢²òDß7‡×“e½MÐ`É���€Úx@î{Åp`o ¦~ÕhøY}o~ƶ)œNW¤k³0Çi—çØHHóBã2Ø&¤ÞH»Vol÷½eâï‘“}<Ï™Ä9Ö":ТÍ{ó»x ’ñÒÑâÁGïþ‰ø¬Áiì htòœ.Tyý£lL­½Uî/„žW<1/¼™¬ bÏ%¼WügïL®ŸÓèHÄýÌÖCÆ{~ã1sLjMæˆÅ¦ÏÅ4¾hdþ6žHþ3yøi·kGÿ¿gïëˆI«òRý’7¨–/“õ_Ó9ï]/;3^I'“Wª}³x/)yb¾¸fßQÖÚ$�-– ���XØû mFŸïÚ>-,:øï6ìËââzÏð@»Í¸M]ò2ËKÛIÎ?N»û,X b›m«·ZÜ÷•IÂSF{ô\ÓÕùcî³—Ðcz>û3}t– ™}fúV�q½T>¨ë¾^xô¤zõéQô‚~¼2‚ÞËf>§›ïmsŸ¾ÿwúLß×x)Å˵b¬ Ñ?¢éÍG{ÝŒ_YAD<wDä1é_òVŠïÃ˨¾Iù,¾3izñÍ.ÏTÚ­÷J¸¿Ø÷ÈG D½…¸Â$Ò¦p–°iô»IÙˆI¼7u?WàYú?ÿîGúãì™y9×ùô }áKÛƒõ¢¢kšE‡ÚSëµÊÓô<±KâÄ[(km€K��°óðà;mÀÆ /“êÚrŽ.,Áa8½n^µ=Ÿ\¨m^0U’¶4±­^4l“\Ö|±•ß5¯<¸ï(-Lì/D íéÁ›ÿò¾7ç4a‘¦ÿ€O6‚ŠÜ“=wÎä³ç¼Ll/>×Ñ™Ý,Ùx‰ôi0¸«÷Œ1ß¡ýÃï´h ŸD_\÷K2ž´¯k1zi’ÝÔØM‹AÄ+E–LñæÕ×KiaÌ>;æü2VÜúäS¿Rwû@W“/̆طnÓ`ôŒf+>§¿¼ñ²l^­®Iì$é5 ó…/ÿ½é¿ír3ýñ Ò÷Uñð^?³ò’E&#ÞèsãŠâOا=£Ù«)~7Oø}‹à—¹�]�– ��`gáÙú´¥|Œ=bº8[ωÿÌmÙŒ×Çîº š@ZÀïÂNÚ²Iy\¾²êö~âsð2¸ï&î-D LXPÙw–R9hï׿-°§ÏWô0kß¡ÎÂKÁÒ!oü|3£It¢¿v¶¼·Ñ:XHºŸ²n5ëm€ö�K��°Sð@‹Øi3ó,*tyNÚg¹Ûú¼î³ð º ¸žM».1\V}=Îë¶/ËdËýš.]ô<,ŠûNV1Ÿ=¥£u›úúK—bd?ž´¯F5~–ýÏiüì1´‡ÏŽÁÞB ï'³ìk¿Äùþ y ž=’—<6 @[€%��Ø V-ËàY——etm0ÍÏãæc—òNž©Í^/UÓ%ñÒ…ë¤U‚ô®n$í¾‡•ÌßÐéñ‹l uéã}ö<þrUÃÑKÆnÓàè…þ<úÎ1¿¢éñÐ.ùâÀ˾"š¦-»K…÷o, ‰½�Ð`É���:ͪYw…º>ëÞµe5Œ›Ÿ]Kä¹X� Ò–1rùíÊ*µ|¡–C——¦fá>?�M6 º,��@'ÉT± ³ï»0¨âçôŸ½íÞœ~÷yº–òl–á¼fáGÞIÚ¾<Ì…Ÿ%Ëc‘wéY³ðŸ¡I€.�K��Ðxȳæi›¯ò±.ï÷ãÂÞM]ùÔ¶ §ßÍÛ..—qó ¤ÃåØI¸Üw‰Uu™l$ÝUüçE@hR�  À’��´=xYPÚì9¦»¼ß #þ{èÊ&ÜÇn¾vï ­†=bº(t¦±jI+—‰®/i��P-���´Y:áŽ8ðñ]ñà·ËKeø9ä¹xðÛÕ¼e!Cž¬Çå½uUô]%vw}s{���Õ��@ë`o,»Gìõ²k3ãi^<(ì’W„û|]ñlJõk4ï7Kº /óË<~wm#i���Å@��@kàOÚ|ŒÏíâÀ‡|î»àÁp×öGqŸ‘¾]"ÐfpÙ÷…a¶•® ÂYÞ\ìÊFÒ���Š��€FÃ;öüH[Áƒ¾.nœ~/þ>!<èíÚ ñnÞw}É‹›§ 8]ü"^¸>ÈÚHšëÉ.o$ �� èa���h$<ø_µßÏ.ïÁÏî‹b¼ü¥‹žP®(Òõ%>Œ+bìڲƪ`!ÔC¸ÎèbùHƒE/_ æÀuÆ..—��"��€FÁ‡¿¬C0,ìú�f—<ø¹ä9yP¿ ƒx7±ÑïæìЧÜ*¸®ÄFÒ���| ��h«6:åñ®ÌâgÁ:_ã¿»*Šq~»ƒ×]Yö¨Zx‰”/‚tmϬupYZU¿îê~j��°«@��P<ðàAoÚ><`Á>@ü,¿·.à ò¬ìµ°+@ªöþñ¶©]>ئVm$¥b��Ð} ��–)䃩®ÂßY×ß?Ÿû¼»40uŸå :vµ,e±J€ÇFÒ��Ðm ��¸VmöŒYè»ì½à>÷®-ÝqE ®{{ÕÁ.zÕ­ƒßIÚ>l²õ2��t ˆ@���¶NÖ ƒc<ÈØÅe«Øå}LØä™Y Ú5 m5vi­¼ðó³ï×=ø8<Ó�� @��°XØá%iË d3R„ß{û¸ïŠ…]ù¢BÝè.}ÉI€WpäÀ¶·+¯bUÝÍõŸƒp��í"��€Já<®Òf“y¶ƒ¬tXðð]<û¾Kƒ-×;ƒ÷oÙE¸üÈ;€´}Xtóë*¶=ˆ~?iKxùñ{Úuï)��h#���T‚,%ð øø.zuä fÉ <?‹a»<—÷°K_E«¶µ]öÀ˃ˆûiÞA÷� ]@��P ž)ö÷×àÀB0Sœ >ýwǃÏ]{gü\oŒ]PÊ{`Û�áà}·äÝs`›ÜµÉóÀËÁÒê|ˆ¸Î‡��4ˆ@���6bÕ~?<pÂ@`5,t¸Â‡]]þãzÁû"P°÷ ±’b“¨Ï–ïO¿ãÀDZ‘4��4ˆ@���ráUK°Ùs>x/ ÷Ýñ jWLüÜî{€çD ºázÎ_ÚÊu–‡¥Ãï‹…ÿ´vA6’��Ð ��X f|«!ÍË€ú»ìeà±ôÆ KmøÝ€ú€·^q¸-ð÷WâÀïI�@3€�� îÐû3âÒ¡çãèÐç‡gÃý宋< –wÁâ0ˆÄÔ ×qn‹ÃïËwÚÄ‹DØH��ê½ ���K`ãÏêàwåÏŒci‰$ºïKm@jiK8!däcU{‚ýã�� <è]���ÐpG<k_>†}ŠÃ†ÿ>Ùƒ ƒž¤Ð%6I 5öŒô=[Xùàú0ͳ”‡ ��a@ï��vœUnû<Å~?›Á‚šû.ùýBH3ð{÷Â"D±$®× hl«¾W /ƒ€‘ŸUØH��¶z��°£¬›•Å~?›‘5HÄû4ðûqGˆŒË¸{%áý4ˆ¼ÕÀKê²6’ær€z��ª"��ì<¨ôE ·Ó ¯ŒÍÁr‘õ¸Â#þÀ2Ú–{V‹=\Wúõ'®'P�� : �ÀŽÀ³Ôiî÷|ŒÏaàRl»ȹï6—D öÀ6ì{TrŠåa›Ãí‘ÿE6y¯ØH��Ê��: w–y@™6»ÊÞ@)ÊÃ3Øø„ôzø}¸"$æ@:îR#ˆ@퀅 ¿ž…—#kÉ2¿g>¡ ��6"��t&¸“œ&þðq ,«!màÇ¢XÆõna‘ dãzLAHh,J@®™ÌHódå÷Ëõ0��€ü@�€ÁƒÇ¬M6y¹6Ù¬”` H~ø½¸ï ïi5®Q±}¤- …ð^ ì½ÊÂû~9pýËem��¬"��t�졎´Ù~Þð޳qm5Ö¨ý°Xá{ b“øêXµ‘4¼]�`5�� ¥°èÀOš‹<‹p‘¯w¯<�Á{^ûÎØV!–­"P7`[÷½V¸n†·Juð;^5 ÂçPç��@ˆ@��Ð2VÍ€âSºÛþ2;t`YÓjø½¹v ÛÌ¿7ygìÕ�Ú y’Ÿ¸L`SþêáúÅ_¦+ï›C|��D ��h ,8 ƒXø‚–uäÃÎøÿ ?òÞØ“´®¿}¯M®·á¥R=ܲð–æ%‹¤��"��4ž¬0Y˜àŽ.Û3ø›ã.iâ÷;-†¼;ˆ@ÝË�< ÂOZûÉÚO�À®�� w^Óf2eŸ°=x&Ùßc‚ð¶Ê¬\Û…½ǵ;Ð-¸<øÞ…¼wØ\w³ç•ÿÞ9ðq,U�ì�� Aðà™g'Ó:ª<DGuû¤}Õ‡óäÇýD6DŒÍÄûë&øÊ`=ðûÍš`áüàsÈ�@×�� @f)ýN)>ŽåÛ‡;þ~ð@Â[1ØVÝwï©Í`ñGÞ!è&\縂)ÿPç„ßsZ»ËyÀù‚º �ÐUг��€áN¨;Øs;¡ì}‚Nh0+_î{„Õæ@Úà}X/ÜήòÀÅ>p�€®ž��Ô�»œû¢ÙïâC8x/·óÏÿÇþ›Áï͵e°9v "ü þaáö×Ï\Ÿqý†¶�Ðг��€@pç‘gÓö"àN'w>A88?ð¥žêàÁª+¦aIK9 í&ÜFH¾sà2O”ðp;ÀKÅÒ¼ƒ°D�Ðvг��€-ÃcÞ_ «3‰Árxøûbçfy7ÇÔø]‚r¸b�œ»EZýÄmê§ðð;g ´ÉÙH��ÚD ��ØÜ‘çÁ°ßqd1ˆÃÍ¿0Ó^=üþÜ÷‰Ájy\;…P¼{ÀS±yp9ôó„×yØH�Ð& �@ŬÚS€v ×wÐý|áA:îå`{vgÉ13^ �ãî³ÅìYV/Üfpùä¼pó†‹D˜T��4ˆ@��P<æÁ/\Æ› wÊý;wâAyÜO\³Èª"Øû‡Û±,6`B¡~¸m÷ó†÷°‘4� ©@�€¬šä1oõãŠ8¯/ÕÀïÑ}·ðªª\Ê{…g`1Á_^ÌB–‡5·UË¿‘O�€&��6€»i>Øï§`ö|û¸ïžUÕâ lx·@€Wc³áö%k#iž‚W0�  @�€ðÀ,m¿î”sGC3àŽ¶?PÂ>ÕÂö.ï–< Z ,x’Á¸¹]BûÓ,X°ËÚHšË4&‹��u��rÀ¢BÚÌÃÌ^sàAßéæÁ\ñ«…/®È†åuÕ¬Ãb9p™ÄÒÁæÁõ%/Kö'&8p{…ú�ˆ@�� ÜÉÎrëFg»Y°Ðãç/ÍÃìxõ¸Þp<¸ÕäíÄP&› ·E<i„¤�u��<x֎Ń´Y;lðØLÒfÄᡵXütß3-ÛCÞ3‹n�dÁeÐ_¦ ÈfÃâ]Ú¾‚\§b_A�À¶��î”e­ßç™UtÊšGÖàyµø}»â(¼á¶‹¼gˆ@ ìI"6Ãbxóá:u•Ç1ò�° �vîdùB¸g7 \A‚–Al~¿ò®!Ll¼kP,‹m/ܦeõEX(Âä� * �vîã3®íÅ#8°„Í5·‹»G ¿o H¶¼oˆ@ ܾùK¸­Ãò°vÀu+·qþ$ÎW´u�€²@�ìܹ⵴ξÒÑ|8ÿðiäzpß;6*ƒ¼s®¯�( OfømO~€vÀíçaÚdãshû��›��°ð (6al7ÐÔ‡»ñ6  îÒ�6Ây7à ª¬> ö,�½ �@§áŽ“;r;N<°EG¸ùpaiC}ðàÂ}÷ð– D PXBÛ ¸>æ¾KÖRvlÖ�Èz�€N²Î…´ƒ´MNyÙÄ»p¸B$A8 *ÁfúÝ‚û2i“\Üfb’ �° ô*��;<Üññ;¹¸£„YÏvÏ׿o÷ýcP<åýã݃*`;ò…^.†åDí…ó޽eÓú>|}�€D �@ë‘ßù‘:·í"k‚å_aá|pXfw/& ä@•¸¶ÅË:Êx»á:;뫧܆²¨1�À@�´¹3å¸3Ë\ˆ?íƒóÔŸÍÄr…zp…Uå@x m’¶Ü–Ë=„‚ö³ª„¤���­ƒg³ü¯pý~Ðm'˜™n<€pó†z€¶ ·—¾X�ÏËîÀu7×#þä Îw´±�ì&��­`•›3{) #Ó^¸“ê‹zœ§óêÃ-gø }@¡à _(@ÙïœÇþRk\ßs^£Í`w€�h4,°ërÚ,6<l?,ÞùyË_P®ðÀâ¨.( ìýã òì-q [p>sÿ)«_/0�ºD �@#‘NŠßAáN Ö³·Tøù˳‘è|Ö ¿7Oõâ.˃BÀu3·±n=Àí.&\ºçõº¤�Ý"� QðÌw–»2‚0#Ù~XXÀls3qË6䮈@ .ॹ[p~gm$Íùމ7�ºD �@íðàŸgœ0Õ}xÖÑÍ_î`b߉fàæ —EˆrõÔ üýIþ‚@wYµŸE"x„Ð �jƒ™<°Ag£ûp^û³Œ,ða¹Q3àüqË!Ï ƒúá™ä /Ÿ ¸;äÀuêˆîÃp¾×.ž$ÀFÒ�´ˆ@�€àðÀ&m¿|³ŒÝ‚Å<_èã™Ft ›ƒ+ÐñÿAs|a �ê‚ëqß[õønÀ“5Y{4òqLæ�Ð> �‚ÁÈ´ý~¸#Á3èLvÌ 7.—nþ@„m’7@Ýp ÎÝ…ó?k#i®Ÿ°t€ö��°uV¹£ÓÐMXHð?þC³àN½Û¡ÇþLÍÃ-?�4wÿ0,£îØ-x2ÇoãÅxòm=�Í"�`+ðà’;Y3Fðé.œ·Ütóœm4×S‹…ZÐ<? ‰à+€a±'k#i^*†½h&��•²®C�·ñîÂÎ{7ÏÙÐ l&\ݼBÙl&îl;�M‚ë|¯žøA¿{°-¬óú†@@s@�P ÜéËÚ8®ÁݳÂíÃX¼Í"h:ðþ.«úƒ|ýA�ê= �@)xv'm]8Ïüࢻç³?�ÀþÍÆÝÓƒË*ÊisÚ�ìý‰�¶]Ô-» çýªm°'$�õ� 0ܰsã†}·a;À—bÚÖ\ÑK7š D Ð&Ü}Æ8p]ƒ=�Áª Cx‹ô(��¹áFškß냻øb0¹;°Ðã‹€l˜õm>®pÇÿÍÆ]V:´¶S¿Ÿ€%§€á~$×ièGP/��k‘FÛo°¹çã˜ÁÙ-0ÓÛ^8ŸÜ|ƒh×|Üò†h \·øžðÂ*r¶>‡ö €í� 8V¹ï¢Þ-²:õÛçŸÛáÆ¾Mí�"h3îþcX|Æ’qàÂõZÖD#{¡@õ@�,‘5;ÃÇÐyÛMðõ—öã~¾ŸÅ<Ð ¶“¶|_>,öp}—Öÿä6 Ç�TD �€†;cÜøú}i|1øØ]\ñ€Ûì¡]ð ÌÍC,Éh®´îcøÞ<ØG]Òພè�lˆ@�ì8²ßOšøƒý~vîœã“¿ÝÀÍGî@ƒöÀ‚+òtÜûý ,MYp?dU""�›€…þç½9pC‹Y€Žzwp÷äàYT”ívt ž\Â(Û·eiKÅd#i�@~ °c¬r±åsè„í6œÿ¾8—ýöƒ-WÌÃ2¾öt,5›°jIˆ@�ì�«fPXÂf{€a¡Ç·v·†0Ø^\Á—;Í }¸"p�èi€ƒ<°ØÃ¸o?¸½C߀l ÐaV5<¸ÇŒÜ%CØfà^Ýn¸ìæ'ļvÂù&ùÈ¢�]ƒmÜ÷Pæ%>ðè�yáþŠ¿ÄOlqÿí�I ÐAd#=¿1ä \e :ßÝ„óÕ¹ Ú‹ä#D ÐexÒJl&#@Q²ú¿°‘4� Ð!xæßÐsÀLHƒ=Á\¡€Üð»ç£ä)„ƒöƒ¼»–%ƒ*`{Yµ ÄE°ë@ pc–ÖÐá‹ W$àÀbÖÏ·îÄò¬yÚÀÈÝC†f>Ûä%D ° p½æoüËýÔe`¸o“µ‘4·£ð|»D �Z w’Vmˆ‡ý~v¶ƒ4! îìøëæy`Yä ~8Ï8ïXüõ˺›¿\G€öãÖó�ì <‰å÷q°´l ÷x ýf� Ð:¸ËÚï‡cFc·àA>w^òÖ¡†HÐNÜ<ä Ë%8?å D ]pò@D—YÎS×Ó“@ nyÆàtöþñ'.¸Í+:ù€ ×­¾]qàºÛ'€]�"�(Û ð€`•;+¬Ýƒó\«€ü;_8äŽ\ëÛ‹›—þý¿ÿ÷ôïþÝ¿‹ÿƬf»àA‰›ŸEÚ�ÐUضӖ0ç©ãX�âßBi° abì"��w^6õ¸X5[ÁçÀîâz}p‡%MÔác®‡¢³¨ YpÞ¹ù™þûÿïö× MÈ2¿¢+�tÞÛE&>$¬ë[Iÿ e¬‚ÛUßëR×Ëèoƒ®€-#³»Ü°ä…£U_5À ?`ñ;ÃÜÙuŶ!÷<ÿ™öÃåßÍ×´pçÎ,j!,Ú¦åçº�¯>°+°g†/–rÛ—æ±áN”p€WÈê/í²M•±#¾7êkÐ °Eüýº87,Y›Öñ, ø[ l?,ùK¹“ ûéyD Ü‘ÅÀ§]¤-MX¸l°køm ÷›Ü/\¦Õ“ðEX×'ßdB–ëk¾úc n °%Ò<5x@–7$i¾¾ì¬èi¶åw_܉ÝÁ÷ðʸí`]ùö¼ûÀ®Â}'ßcšÛ;î3¥yRs@ …ëd®gYÀñí‰íŒÏñoÖáN ó½ò\À¶€À–Hk,8¸êÿ*—Ó¼ Ø=²¼€üÀIwftƒ¼ùï‡,4¼B—q�vî'ùž¯ÿá?ü‡Äßnàß°)«&mùø*‘Ñ¿B¨ˆ@�l´BÂÑÑ‘xÒf©x†Y]° î0äñøÿñ?bƳ£l"É2Aв<Ü�/?� E<$7YÆ€ ÷¯¸-ÎêËûpY}7/�P�¨˜M–jp#€N ÈC€ ºGš÷`Và™FÔ-í„ó--OÝ�¡€¯^½¢óoþMjYq¼"A•ðämZ»Ì÷ÃX�âßøç%@u�€ ÉÓi—Çu�—¼^@nÀæƒÝ#Äv‚¯ƒµ™‹°¬€$Erˆã j¸?Ïýú´~ÚþÏÿyé˜Ð^ƒÐ@ "¸òÏ;@ÿ·ÿößbi(Ì&Ë€x& ¶Ö-Ö-bq�âr7XÕ®`¿/�má ¶…xþäYÒëlB€ à ?k#謀Êa/ p5îiyÌ;œºGÚà–ó�`p¿ºT$Àl¶±ÿú_ÿkªý¥xoƒP@ V¹ìg�ÈË&^@n€8ÐÒò?wÎWFK�0¤•¼Þ@`ÛÀãßB!€@IÊ Î1 ò°‰wnÙˆ‹lgº?ãÍb2:ŒÝ‡E\7ßQž0°�î–¢$`›¬Ú:+pu<Ø6�(ß1/°Läa•Ð(bÿ†ÅìÓm89ß¹“oÝB6½E»@®y°Íí —“"žAXZ ¶IÑ­"$ðu‚À6餔V˜šŠ ÚÓ®G@X¶MZœëBhÒÒ€€°*€v‘–‡ë¶Øt¯* X®¶ D „ŠÏDI`!ž‘òÏàr¥î†"D§Å‹€°.l›´8օФ¥aU�í"-Ö…mÁ}þ´øʆ*èd Wå `UÈu„Ž´›P¶»E¨ËV`£ /°•v‚|y[Ù–½díåÈËeX–òû¿A@Xª “5e•/€UT] ×:>ÐnBÙ ì¡.[‚¼ÀVÚ ò äEle[öÂ"¬X·íìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°Ø-ÈK•¶ÒI‹Ca¡[ eo¡ãí&”­À.Aê²Ø(È l¥ ß@^ÄVš`/°[—*m¥“‡ÂB!¶ÊÞBÇÚM([]‚"Ôe+°QØJ;A¾¼ˆ­4Á^`· /UÚJ'-… „Bl-”½…Ž´›P¶»E¨ËV`£ /°•v‚|y[i‚½ÀnA^ª´•NZ …ØZ({ h7¡lv ŠP—­ÀFA^`+íùò"¶Ò{Ý‚¼Ti+´8& ±µPö:>ÐnBÙ ì¡.[‚¼ÀVÚ ò äEl¥ ö»y©ÒV:iq(L bk¡ì-t| Ý„²Ø%(B]¶y­´äÈ‹ØJìv òR¥­tÒâP˜@(ÄÖBÙ[èø@» e+°KP„ºl6 ò[i'È7±•&Ø ìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°Ø-ÈK•¶ÒI‹Ca¡[ eo¡ãí&”­À.Aê²Ø(È l¥ ß@^ÄVš`/°[—*m¥“‡ÂB!¶ÊÞBÇÚM([]‚"Ôe+°QØJ;A¾¼ˆ­4Á^`· /UÚJ'-… „Bl-”½…Ž´›P¶»E¨ËV`£ /°•v‚|y[i‚½ÀnA^ª´•NZ …ØZ({ h7¡lv ŠP—­ÀFA^`+íùò"¶Ò{Ý‚¼Ti+´8& ±µPö:>ÐnBÙ ì¡.[‚¼ÀVÚ ò äEl¥ ö»y©ÒV:iq(L bk¡ì-t| Ý„²Ø%(B]¶y­´äÈ‹ØJìv òR¥­tÒâP˜@(ÄÖBÙ[èø@» e+aìrN7³çEßÒhp;ç­þÆQ¤Î=¦ÃÑsº¶¿¿žRÏýÝRèQø˜N§Wê×9™_Òäp_]{›ãWtcïèjú„†ýžy½Îf¹ß…¼ÿÐÔ/h°•v²õ|»™ÑDµ5'£×¶ìÓp|¢Ú ~E“kÛ¢\OhØs—¸ý:ÒUîFH5CWgtÈõoï€Æ¦ÅÅpó n¶“Ûg:Ñ ¶Á5}×¾÷F4ýhg0¿šÒ)ÛüPõ‰öÇ4+`Ã[§à³´…*m¥“-Üv �ˈ­…²·ÐñvÊV¶k—Ü‘yæ?ÜÙþަWœó‘$öh½µÇ-7ç4±âÖN~VÝkøøm:ˆÞ¤wŠ|®"Øg½Õ¡ŽE~>ÐÕä êË;ˆCþw(ׄ¦®xAû€­´“­å›PžÅÂOÊ@úæ‚"óùADWö°áMGwã´õ†3Qá^ÃÇ"ºÌÕ}TÍЃøº½ÑTE‘÷Ç¡nªNÇü꜎µmݦÁèÍnذÜ~²áó¤ðèömTˆí4’­Gûã‹|}¨"èI·Ïi<{oä¤Ð³´ y¦*èd Wå `bk¡ì-t| Ý„²•íÙå5͢ÅàÐ?¤h–Þ”Ï/#:èõi4õüQæ4Þ±çžÓ™Hv¤sÏbí¸'Ðüò9Ÿ^ØçNæOÞŽ–¼óÐÔ/h°•vR}¾ùû4Œ¤þ󘿡èàvŠ(óžfã{özo°œ¬ºíÓjà T±uS]:>ÐÕù×Öó'­âÚbÊÄMì¹&f«PeczdÛÿü¶›I7l+ô,í¡J›íd Wå `bk¡ì-t| Ý„²•íØeröôVÿ šÄÞ?iüL“ÃG 7|Ë|6¦}¹GBèñD ôê©€Sí™wtØJ;©6ßÜA.‡}:œ\&Í Ø;â‘ú7àÌœˆP$D ”I °5ÄV8ÔM5éHzéfy–}œŽhÏþÆŸüZô—Ptµ®C¤ú\Ã;æ>½Ã¥¾×æ\Óìì(^¶©O±giú}«Pláª|A™`]pc0kRy?».uŠtnþ…`ûñ©Êwrê­!æ`ÜŸ#~Ïã/iwrœF 3øËwr°óû®ðž+‘³Šßÿ“bïP!y°my]U\è2úÌ©[ïªÎñ;{.‹šGž7;ëåw&’çòxI]£ë}¿Ó£Û„äÚø…K¶›~g¦®DSí¦íÃù/{îðÀã öRžAÁñއ‰Êðø|M;Â÷ÿÎÖ—|MŠkxNŒ–ºGï3Š.óÙ§¼óД‹·h݈=©ÂqMãƒå2YÉ#Ð.ªÌ·¸n“²::_[Þ>NŸÒ¯ÿ™˜ˆðl4q.Wß•ëîïU}cöÆK¶¶ŽÒí½×üJµ‹üw2ýó«t¤ûYmk6HÇ;v¼¥¸^[ß_Ñí©Ûv­èQðóœr]ë<£›Ö Ú!uSE:’öšeK~»ä $NŸ(­?Û’:Ïyuñ}<®-"Ô,úE|-/WûVÙó1'—Ê”ÒÆÊÖ{.îcÝM–Å›W4æ²08¦‹¸?µæY4ÕõƒB"ï¥ :ÙÂUù‚–Àºà¡}£~üüq¨T‘^o¶_Ry_$ÕùxÙ‡¯ª{³eñûw¯áãùçÄìØÎyh¨†)uÏмC…\·mÜ4V‚×È_'ú¸"eÒ%8ÙaZ'2¥ èÝŽ…·þ\×Ŷc’8¶”·){©r£´Ò!ùøFµŸR_§Õ]J ÊÝÅñb¶Ìv€’ƒ ¼逩NÔ0¢Ù͵S‡›-Óx-ˆp;8¦IÆ2½4$m¡Ù,Þ2u£{Rm™E™*2Y‡É—ð6 ÊQ]¾y\ÛÞɶ#a£vù˜‰CÕ£kE&ÒÍmÞRdEtÝ m‰{Œën;y,Ç—Æ*yÛ …ÛÎÉdtÂó‰ƒ'Hˆ˜`—w/<SÒÚCÇëTݶùmª—¾,ÒW9/Ž„-­ª ½É¯D›%6”òã|¶Þp‰<.°Ü*n¥Ï%í§ãçÞ[lÓÏ{gœ·°דnų(ªêÕ¼ƒ*èd Wå ZàwÚ°.¸9¬hd·ŒÉ/B°•ø"$è¸RLkB­wFÊÀ#1ðL :ÝŽIþÆy—g»Yœxpð5۱Ō]Áw¨0×lß6%žjâò—ë¹b’4îªÓáÎZø²ÕÂΗóaÑáôÎh:þ–¦³“¸^ßSüwOitü]ÆÏçwzmì%äŠÝNÛµÄ î,-§QÚ‹…¨æ *2½’–:bêÝEżW¹>4…ã­ nÄžTÛÄ�–¨'R|í¢²|ó'"6îWºÂÔ÷<ž˜8ì !›÷®ÃGxc…ÄÒÜ3ºœ~KãéO‹>×Oï^Ññè)]\ž-ž/!hƒ2Ç4ÎïýzMê¯XTsÛû¿ÎXI?£nSU=èÏ;!nÒmBÝ”K‡7»².ô„D·ÍŠmÞ[–·9®PéÚD~ádÑOríˆÓ4Œï‘ÝÏrÓîŠF’>çžYÏ¢(ݪɻ*èd Wå 2ø ë‚›…ÛˆTÛ\‡Ø‡T_b–ÚÎú¬ªÿTÅzxèw†Vˆ›ÞìÔîy«…;‡?-u]‘­È;”÷¾m$žjâò<üJxö-yŸ¡°€áÖ3^ýížë©ÎÌä{š\¾OÖKÑw4OÕÓ¹åÅ«ëãòèz†8ïÃé°¹ÏæP2m%ž)”´»íÚº6Í…E4Õñv¼œŠzjÉu¡)o%uc2?’"ìIUe¿ßÒp_ÕÎàJ¾€vQU¾%öM)Ó¯LôûýÀâOTp™·3`õ–xàËíÍ3:¼¥y|ŒÛ‰§tÆ“ª‘ÙNhƒÏæ¶ÓîñD½&˼~b_Ž:V‘˜l‰ÛÔÍÆ�:}6ÔM¹txÂΪ>“c}·ã^ïw¼áÜ<Î;¡Hô[âå[*ŽžÓÚNܼôÇÂ+ÎñsÝ•td=‹¢²~P}HÞUA'[¸*_³Ûë‚ù7²~“+éïizb;®K `ÝÙ úC:v—Ë¥°ÑºànÖ•/~NBPi|žûh>O€éøIÒ» ÙÉñàĹeÏ„4²÷]aûz®lþ1 û{ö^\ìZp7ýÊÞÏxÙæŠòê¯ož~k…Ø”NÄ&û®ðýO9­òü%˜X$ÎßÁaL¼Û·M‰§š¸<·ö¥†7xvCÂ^RÄÉD(O=ëâÔ3Kvw&i@ñg0<6ö™Õqvïw~ïÖó‹Î°[®ÜN’{|±Ç’¾‡kϽØ“FHˆ$ÅÞ¥¹&Lé’;ÞªêÆ„ $óÏ?—§#ºQ`H=ÛÃcž1 .‰ä hÕä›ßƤÔo‰‰[7$ËȲìöWóõ‰8mXrB(9@–öf¿*ïƒCë~¾[÷¸é-Ö©Fháê–?·uŽÇc)}ïwŽGîm½È1!ã¦ÛiSU-¶‰WŠù½ uS*¾‡nf]èÚwÜ·°ËDgä½kW…lØk[—'œò‘hã ‹~OÒ‹z>û–Æ¢eƳl£Tò“-\•/(avj]0w´ìžZ˜¹QèöU'Sÿ>QѸqˆ›º×Éõ+ éh]ì“Ñà„`ñlaŠRuñùA=)|Ü÷Ÿ¨´®>·v å§I…8?ýNÏ\/ì3>¦JNì*ÇS:Þúæ—§4ÜÿÄÆívøœ2 ÎåÛwE_wÍ’Q·^*cùˆãKiW!éÛ6ñ{¨$.¯~ËxgIq>méÖ…ÒÑuï]°óâØy²c¡pó8Î#7~§³•uŸµ-¯^ŒïãO´%Ž»Â“ªáÍŒ ~ˆ ‰[^‹ÕÙ’ŽÐ䋷º1aoÞà°²=©v¯nœ_MèèhBWï¤ l0˜^ƒ¤´‹jòÍ/o‚ßw_òdI–MS¯{÷.Ôgu¯õYW‘snüîØÂ©—Ü>EÑ6ȽO\~Ý~Ÿ[.ýñ€ ¼¿Zô}O¨´6]á¶oÞ§›–º)•·®B¶·x²o•`â{¸v•eoI1N<r–êþ8$EÔ•Žn^¦´ é¶øÎ,¿—ñEê³(¶Ò ¤¿ :ÙÂUù‚üµÔùÏ[øÄxyö®©ë‚Uêb‘hÑAMŸ}v ¦ N%¼ø½—Ʋ낲ÒóþMAuñ%ƒ¢â¯C#6äÍ÷Gt–sãØ…-ùùétr8½—ç4¿¤YÜÉáÆè’.Ž¿¢ã‹?:ÏçuàÒÖ7»ƒ·‘h4Žï§Q rôzzgà×!^c—ÙP¾¸'‘I÷ömSâ©&.¯³˜18LÔ9Kž9 ·îŽí{óø">¯c¡HµY'þE»‘݉_ÜÃíܸåÔ«Cc[»r;ß"ÄÒï]žEÝ»èæÁ<O˜:Ó%_¼UÕŠDÿAê¡mìIµ;uc,�Íݲä—ò˜ç o£ UåÛ¢¬qÈÜ2Vºu‰Sß'ê…"¶ë´~½ä¦%.§NüîïSÛ&÷™ó¶A\í8ÁNò¹üÄךÜôe´ékqß›Se׋«1ÏdBÝ”JGž²Ûø„M'²êÒ {sã‹{í¦–úYÉ ÷Þkó2öÀ“óê^ÓÇ_åLÚkº}·y¯UÐɮʴèärXîüç&ÑXø¡ë‚/™¹jqz§ß´¹ïÈ=îþ^+N!/¸.xGõÁu˜xMAeñ¹{67Ý÷¿zƒEÓ".–«:ö ›gžœþ ìÒíä ):{bÜÝò–¸Á°ëÝFÐyn9pËGzgÉû½t€â2é|°ð2GFÒ›ÔçEǫ¶‘xªŠ+1Säwv5I»[¶_׎TpëÈÔÌ:Üøüsα©E]™U'º÷qÓ+u¥c«R„.³T÷€™N/séi)O|ßÜïÑ i M®x+«Uþ8õÄR¨tOª©oìä•X:eiiQ}_@»¨,ß^>éõf¢|§Õ‰Á¹[f²Y¤N^!¤,Ò∬NÙM/£î`x³6H5B4=>TmÐýÅïÒê¶Œ´äÇMŸûÎVÕ‹«Ñiµ¡nJ¥#1¾Ì8öìO(:ö˜¨KÏ«8ïU½ýøýR\‘¼Tùôü;z—™àû,ìmÙ=ü ÀÕØñèðÔYR–õ,N¥â~Phô³©Pláª{A»º.ØM¯{Üì¸ žë†šÕÐ-ŽÇA}MÖ;¸•_ÁH˜g3!•Å—°Û4ûó–:!Qé'ÎãqìO…ÂsÇfüGlóŽ »ñÇ{±¸ö›ÞôNQ², ÷¹eÌ97²|?'¼üzƒÅ×¾ò£:`z¶d3ˆÑïE…m#ñTWryéòr·nIæ™Á­Û|ûv¯Í¹Ôǵ3¶é—ôüÉsÛñpÊJlïu¥ŸëŸŒHŸhkÌóð ëÃá>·#Ú^oä÷)ŸU]ÁÂŽÙÝÙYÞ›å[:ŠÖiHgÍÿ"¦<cs=Ô|rÅ[Uݘfƒ™ƒÂ<ìxݨîqz䨩“Þd¨ô{S´‹êòMÚ_s¿å½K\[÷˾Á-kɾwmÎõ÷3eëãÕôd©ýpúÚ©e×­—ø·Wô£‹¶AêýØ/&ç*®¸žøš±j_¦ßÓÉѯüÂqF›êÖ‹|üÝšœþ”«¿džÕ„º)—ެ%x‚ÛŸJi¯—Æ“*OžG4¹üûE[§ßù{ÕxLÇ_Z»bÁé ÝüøLýv]Îùwìo‰MÄùé奊ïròŒ~tû& è½9Ó©wæ³|(Ùjúý¨Pláª{AÉŠ:Û%´c낳*[·S™˜…pÓ³xG‰Ùü´Á‘„Â난 !­Þ6îs„ ²øƒ‘,×HOŸ”ÙZwÀ$¶Rf ã\ëçg¢—snüñžCÙåc}§È+ãqzœw”(ïi. jÐ<>¡ÓBžP‚t@‹°]$-ÛfñÌÆ¥f³­}—Îf³‰ºeÉÆT£þõÂÕxIèñê <^n=3ÑÓñé¢cÛˆÛùJ†®}¾ ÑÑ÷qçÉ~8]ñ†¼ÞïݵÆÖ¢èyúrâÄ&ÎÉè ¥â¶)"Ô[ûÜÛl3E‰;4¹âMÔ_%êÆ„X$õ+@¦uÖW°Ëu#/S;zbŸÁžÞê´‚vQm¾¹m‰ê;• J9÷úý~Y^|tŤÇz’e"O;ïöãyõÀ±ê7‹ØáÔ+q{“. %ûýz4ú:Djƒí~?UtJ“Ô¥ÿŽçŸ¢Pþ쬄Øý9FÉzbnê¦t:ÜýÞÜ÷y3£3þ�ÏøPÏ"ßMžŒÒÑ’£€=?zá,3VvøhDG§9&ÒÄîâ ˜¥ëŽI6“Dž㯬ƒÛö?¥¡7‰—ý,ŠRý æ i®‚N¶pU¾ d¥˜%9•Pê̬Ûñs:,‰Îf‘Á²S0â"µ¢t+}ç÷YÊT±Çí<¦t^ã Èîçã6n…”zïMY%†…A?‡ !¨,¾„Íf t’ Àòlûþ]rí½Ø@gQÞüütÓ"e%+ÿ3ì=k@ã–C·s¡QÀ\û®dÜ{#d€íuŒ®¢É^ƒ¸“žíÛ¦ÄS}\êýó,¡tbÁ î¦~îÀ׎÷ÄRgW…•³™ñf¹Ü±p têþئ<ûëEîÄ{û¿9¸Ø;"¾ÿ{ñZ¤Ò<kû,ùY÷ÁˆN&yö¢Y¾Ö÷‚Sä>¡Éo%u£Â­Wâz(Yg.×7ÙìnÝè½³ÔPPPËÜ´‹mä›þ*ßÉÈ™X`šQb3ÛS0ÑF$êÒ–[ÅÈ ™›œqËé¢.rÊz¢ì.ÊéÒ^…Ú nŒ'Pœþ8¨÷’¶­ƒ+Hpàec'9Û‘¸m÷˺ˆK~Û¼7ÍuSM:¼ýæt°6ºbóc÷#A¾M,ÄL±9Ç9ÿrîgGó?ÑäôGšM¿[샻t½ã±”!X¹`it«žÅØì¦ý æ i¯‚N¶pU¾ ¤ÚŸ.4$¾(ø©,E>ãÞ©¬RiÙt]°"­AI(¨iBÖžÐp0 Aü;n4¼½Ž2Ò²îû+"¢U‡‰Û„T_r&;5/”4ûtß¿Û0';íùóyÅ`ÁIË¢â÷6C•r—Y>œôºë›Ù©´Á\¾}W2ÒRÛÀî'= tC|ømî£ éÝ6Oˆ¸�wôžªŽÌ=ëýómR áPÊ·O]¶’/Þ*êÆbÛÈO»\7ºíLV¨¾ý—{ƒv| ¦ŸÓÉè€öµ¥LÔÓÔÄ"­õÛKSÒÑxd ™Çƒ»£Ti+´¸j “£zª{.+ë¼ ‘(¡È{צ¨ši,îgÞÕ® V§Ü¥ü<<;ðpHÃÏE½åŽÜ/‹ßß\PÄÊîÊY ‹»Œa£uÁngºÀŒj•˜÷gB*/önP÷K|)À²n°’yðĵ)÷Nýç§»ïJÚ,;øqÊ]²|¼¦ëx½²3C§Ÿ‡×7h8üÌzTpùø³³¾¹È¾+®k´; ®Ò£g¿¦Ññº}}’uM2ø³_ùë·›V°MD H±‡Ä,k›­ºl%w¼eëÆDûêç•+jT°'ÕNÔñûßÞ@Ó¤õYÛ@¾mŸåMÞU/œÅ}˜TÉ!¶Ò{iJ:nïŠ}AºkTi+´¸ê Ó‡ZœÜsàt½ “¸“˜ü½»z©@DQª‹]ÉuÁ‚»þU…¼ZÕ¸éAÕñ%ì3á~™œ _jìûµ¨à”6”áì㊉}W\±Ô±á´ÁOâ·ª|$Ö+»3s]ÿð{šžd¬ovKVí»2O~E#’ŸtV @<‘-'rý¶qÓ ¶‰ ¨—ÛØlª0Ñ겕"ñn\7&ú ¶¹'Õ.Ô>îs”]z›¤´ äÛö‰ûüKu#m<Š�»MC–K;ÁËÅÒÃûdv*m¥“·­Â´3ë‚ã‚§®éÉ&^‹û,ý^<ø÷~Hëà–YìÎÀ¦„T×ý-âÆ‚­ÄgwÆ_ZRÂÁ z‹ <]Qq9,ìÎTpX3kœ¹ïŠcÃqÙÈü(_Ÿ[^¯¼X/¬»Ám|Ÿ¥ßËl7Çá‡4Á69 ¦ã=ÍØ$1Ir£ã”ÚÙZ\¿mÜ´‚mâ ¨}{…Ù<“ õR—­Ž·PݨpÄš¥à´ëÉÉVΚïpݸLVŸ¦Zäy@»@¾ Þ‚˱»Oà,"ç˜ø«±•&Ø ì6 ­Æ¼‰/”î&UÚJ'-®ÊÖp3£ cûÖû'E$ -Ì„Ä}΄ŽowQƒ––ï»Â„²÷½€m3·û1ø{0p‡üÛ ¿F–ºl¥®x»E7êÆuÀVÚ ò-Ò÷÷ûû¼ÑîŠMˆ›„›îºiJ:šÅÂ!ay¯¹Ý¥J[é¤Å¡0"^ ç/UáAг{ž½‚ZŠØZ({ ßnÒ}W˜P¶»E¨ËV`£eéNݸØJ;A¾¼ˆ­4Á^`· /UÚJ'-…)ñ¾�éû•ȺaxUGèøv“nì»Â„²Ø%(B]¶-KwêÆuÀVÚ ò äEl¥ ö»y©ÒV:iq(L¡XlòìïoªÙñÏø‰­…²·Ðñí&ÝØw… e+°KP„ºl6Z–îÔ뀭´äÈ‹ØJìv òR¥­tÒâP˜B"ûø{¨≻Qv7qŸ9¡ãÛ]Ú¿ï ÊVïv ÖS—­ÀF« uã:`+íùò"¶Ò{Ý‚¼Ti+´8& ±µPö:>ÐnBÙ ì¡.[‚¼ÀVÚ ò äEl¥ ö»y©ÒV:iq(L bk¡ì-t| Ý„²Ø%(B]¶y­´äÈ‹ØJìv òR¥­tÒâP˜@(ÄÖBÙ[èø@» e+°KP„ºl6 ò[i'È7±•&Ø ìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°Ømƒ¹™Ñäø[š\æØãöã+:ýîÍV÷Å«ÒV:iq(L bk¡ì-t| Ý„²Ø%(B]¶y­´äÈ‹ØJì¥ùvû®&_è/CöÇtqÓ…íÿ×qM³³#ìùÊõÏ49<¤(`´!UÚJ'kÊæ&ÐÄÖBÙ[èø@» e+°KP„ºl6 ò[i'È7±•&ØKóíö-Eƒ=›Î>¦7öxG™_ÑùÑ€z½Ï :sºžÒÞpB×öHÕTi+¬)›_˜@W[ eo¡ãí&”­À.Aê²Ø(È l¥ ß@^ÄVš`/Í·Ûòš_Òäp_åÇN~¶ pÑàÖ=ÏÞÛÕR¥­t²¦l~a]Al-”½…Ž´›P¶»E¨ËV`£ /°•v‚|y[i‚½Àn›Â5]Œ¨§ò¢wÑå&Z×õ„†½í/¶²7P•¶ÒI‹Ca¡[ eo¡ãí&”­À.Aê²Ø(È l¥ ß@^ÄVš`/¶ÛùMO#ŠNF4èyÞ1¼irtBãá>ÝÚÓlÎ??§cþûÖ]MßÙ~ «ó¯Õõê9ûG4Mõ$R¿™>¡a¿§®Ý§ÃÉ :±KÐzKË«®i6Ûßò»ëQø„¦+÷îáûgÒ*מÑUœ”9ÝL´·Ó­OžÅsñùÛ4}KQtLãÉ¥ý…E‹@ê7ö}T‰¿[édMYå `bk¡ì-t| Ý„²•]´ËùÕ új4¦sÕépÿŸÆÇéˆööF4ýÈ©ÎKth;ª#1~E¼º^ÿ†;%£szçü¿‹+ï법]³Q°9°•v²SùÆû–|5¢¯Î¯hîþßžNðqJ£½u{¹ÜÐtÔWïïoÿË@¾[ˆ­4Á^k·"hÄïÊGô²§Å¹½Ñ”>Þ¼¢ñàvò˜³”ÌߣAôÖÜ#F<p¬0óñ EÃO©¯ãö¼jÜ8z4¾¸Veá‚Æû"qHŠ8FÀ¹KýaD³›kkÛü»]éŽYâK^@7ç4Ò‚“”éÇ¥”)y/½Cš\W¯É3VA'kÊ*_�«[ eo¡ãí&”­ìž]¾§Ùxd;îÿ×Á3MßÐP ?Ò1ò:!‡§tåÿ¿cÔe+»e£  °•v²Kù6Ÿ=¡C;˜vÿ_–mÝ·iˆ­4Á^m·®Àây·˜É+N;{Íh:þ–¦³“XÚãI­‹§4:þ‰.'‡z™Õ²äˆD±—’ü{WÐáþÖ={܇œß{iœ_Ña¿ç;?ÓdxÇü6ŽÏlèlÒ·¼Ðâ9Ý´ð}†K}¿ùlLûú·Nß®B̳Wc+¬)«|A�¬Bl-”½…Ž´›P¶²{v)îÌüÑùÁÎ2ÏI'DÏäѱžÕrþßA겕ݲQPØJ;Ù¥|“Áí­Ü:ÿ/3q`¼ZŸêÝÿw±•&ØK£í6öò÷¹q„“Þ¢É÷4¹|ŸS¢ïh<žÒMB¼ñ¼gb/›Ût½Yub/j…+H¹ž6îñÄïßPtÀ^C"Þ¸K¾xÉ٥φR<xÂŽ»1¶zþžÓ Ç“¶ó5Fª “5e•/¨”r åu•Oi4øÔ9¶[.¡e[ eo¡ã«›üKnŒÍ×SUÉÏž)›wÑÙò°KKn˜P¶"ñ”ŽKÕ_ÓhDƒÛŸÓø©]2ÏÔ,6ìãxLCüž®¦‘®¿E'¦¬ö×ôZ6÷‹ì‹5éœïÚ-Ø­%Ý™'?äxT‰ôܦÁþ'M‡Ô÷:çÚ=ùð¡qeÞ1但¦®x·Áfu£Ë;uün||×êÆutÉVv‰òù&uø]ŽeÏéÿª¾ÅűmCT°KQæWSŠFºýè„žé¯ ©²søŒf¯íoeÉ ßA•Õ#é›ô)š%ëÿ…ÇAJÈ)ð,¥gð-ý­Þkå3ã™àìYrqiÓ³¥¥+MÆ}·uÓ”t,³JÔp=jª¼,‹=ƒá±äÊoÜßgˆ:‰ý€ô–ï­‚ëñã.[‹ Ëè3Óä{ðþEcÕÓq-Æçúåý‡±˜d“¹i´ûüðª…*_P(㺹P7—Ë]q -ƒØZ({ _½peºÁ’Õx~cDò©G¿qÙ%7L([©Ê.`3CóQ×O¶nÒ´ù¿©·îÑøõ¶CÀn»Žœjéœ;×Ï/#:سq=ó´WýלŠtâgr;ðîZúþ4I¼w—*leꊷz6¬c³¡ qh‡êÆutÇVv‹Òù×áÒ¦˜Á¨)'fЫÿÏåcŸÛ¿¡s™<ÐuùxÚýÞôïìõz ©Æz9°aý¥+åq&3zŸQt©Ú–ø™dPjª{ïé›áˆ&ÓoU{´k“[)e/Ñ”t,³ÂCÆdâso)²›9'œ²D[>ü㋱©?ç¤'îS-Äž„·’soT™>¦ètêlmXô=³'ütR„&¾Wê$Éj¢*ç©‚N¶pU¾ 6PÚ%TH’"™YÜ —Ð2ˆ­…²·ÐñÕK5Kn\!@óÎ,¹aBÙJuvùQUG“áÔMì)túØÎÎÚã‰úËv€¥þ‹Ï];³YNHÔ“Ux)–êSÓá^®“ecÁâ6Ýv但¦®x«§dÝÈ"è`@UŽbhÇêÆutÇVv‹Jò-¥MYˆ¥ì)´øÂ9n¾ò3 QÅ9çz+Ä!)¾Tá ”ˆÓ1ý ‰ËT­H¤ãt—Ðìî»­›¦¤c‰ ‘†Y5Žð’*ödï·“.ö8BŠ·Á3y­—¸+Î,<¿³î†íwfÄ·À÷LyÜ2^¹Àk0鬯V:ÙÂUó‚vÀ%TH@>Ü| AñÅv1|LOuGÆQ´;ûË—‹¤,äXrÇ£­ì÷i]˜û îÌÁRÈ9ÅB€^2ôEÏxðó€þð·/èxøijE¯‚-)òMGÞí¶qó±+D í½s‡£ˆ¦zæÒÏ%½3÷ aKõ©}¦Ôz›;ëê™ a]¼»Q7²Â_*ûüii È»í¢’|ËŒ÷No0¢húR¾ÚÏ)éû.o:[=Ë"y&›&]×ÈÀÝLR¤.é8b+M(çMI‡O¶b'·øœxœ)cW×Îß&Ú²´¥f /Uýû4q’Û¹ãC î/~×Ð(Jzø¤§% GZê#ª4>ÿŽžÇÇd†ïëöó÷yüý“ªÃ¼Çjl¥“-\%/(î±ÓU—PËÒ äEl­´½å¤||Ž]h;½6•³®hm¦ÿo+m¶Ë~YÈZró‹¶ù==èùh+òUªúf,*vÙDNž)Míçç8p6›Û-ÊÙJ~$žòqY»“†_Ϫ˜\ç»®ËÞ[Û2u–±?iä­-H}êtºÍl‘ª^ØŽÂÏô<zYyÇwQ¤>uÊR•åÎ"îÿeÜÚBÙ¥Ïêxw£nœ_žÒá [)ES—‚rT‘oÉ:Üô÷µH¢ûжlÙÍlã€^,¤˜r(åÛ”3}Îî+Ò|m÷ïò˜áŽ7ä~&“&ýÿx°Ë黣Æ#Ïi¶£Ë’›PΛ’Ž$¶­ÓicÛ¹¦«çMtÅØµ>÷mœß»bŠãM¤{ýNÞ*ëw=pl?íꌇô¹žP±ÞD7ò{Ûg’rgîžÉ¢=Lziéô[:ŠW¸8é¾g ?“7†±ô’`ä.[cUcÞW5¶ÒÉ®²”9ÀtÁ%ÔhcÜ| A5ñ¥Ø©Sññlø©lž&ÇSʲ·ÅŸN ž0 ‘iÁ³ËL<oF72j€ï‰@<ðð k·î#ïvÛ¸ùX†D½wo@ƒØV”}MÎì$öiøø zjàý—;#Ãá. TgVÒ±÷刾t¯WñÅÆÐ*¤x`–&aßlÏï­Ú4Ý<¡¿Ž;UÜ19¢³ªÓÐäùC³>ÞŽ×<=üÆn´¾Ü?� ä݃vQ:ßåÐkSFÏè%OÚ²è;üŠôÇ'ú4èËï÷èÞàÞ¢ ÛÒèK+,ëë§ôÁ]æXGÌ–:F×C6M·þOúŸü?TÛcë(û¼‰AòŽ ù¡nš’Ž$¦ÐicO›§O(úÑßãÇõxq~ïNz¹KÄ_Ðèèû¸OnƤæœ<£=½Ó~ïÚ6.‡)ŠNi’ÖŠ¿:&¿_ßÞã¾çÒøZ–NÊFÒs»HÅíï 伓m~TAž¡ :ÙÂUö‚R:w¦ÃÔ—P!ñœ bkUÈuT_ŠêAƒªÜx†Z»U¾¤é‰3˜H) Ë×ú¾Ûw+Nèègò–Õܼ¢ãßË*”mVc—`W¨ËVÖÇÛñºQ§gQVãø=`äÝ€v|y[i‚½4Ón/²ö‡t<•¯i¹Ëžœ±cª0¤ˆ¿¬u›£gɯ²ÊÇ[Ô½b¹ø>þïž@ò¾¡g¼qÝ}þ½ó¥`xÜ~2™- 4Ò6ú"ÐüO49ý‘fŽÓ‡ÄÎü{8^Pñm·ƒ<Kt²¦¬êuÝ%4FQª{ˆ­UU ×QI| »°•¹vk¼ÖóU#»Lьݬ[rsi–@ÆŠ¹âú%EÏ«¶+[ÙºýLÎמxÿŽ¡Ìxóß3z7`»C(Û¬Ä.ÁÎP—­¬wêÆ˜¤à’Ôe£ È7±•&Ø ìv,è<§“ÑíkïŸHý_öØ“PbkÛþeO œÄ•óE´-Q¥­tÒâ*yAw µÞ@‰cŽ¢ raÞ› !(_Ò.’vúˆ&/y¯ õÿþë VÙæÓÇ4Ì* þ’›ó™³ù)—(©úW@ì¶ÉAWØf0cÒ l}|êlà*¡DãÐbäù·û®XG]¶²:Þ¨]OIˆ@+‘|íùò"¶Ò{Ý®&þ˜»ÌLsM³³£x™ÿæí™ýÌüÒýó`'†TŸàpr¹õÉæ*m¥“‡ÂB!¶ÊÞBÇÚM([]‚"Ôe+°QØJ;A¾¼ˆ­4Á^`·«‰'8RE™À)9ÙË+{öz›=¯C¾F�bª´•NZ …ØZ({ h7¡lv ŠP—­ÀFA^`+íùò"¶Ò{Ý®!ÞäÙß'èƒýàGÚž@Eao C:Ì-$YhYA•¶ÒI‹Ca¡[ eo¡ãí&”­À.Aê²Ø(È l¥ ß@^ÄVš`/°ÛÜÌhr2Z|áÕ½Ùóé´¤�d™¿¡Óã9>à0§›OiUoª´•NZ\•/€Uˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°Ø-ÈK•¶ÒI‹Ca¡[ eo¡ãí&”­4ß.Íšñ•›ίhz<¤~Æç²Ÿ ·V0¿:§cû9ÑÅW k@à yþ×e+ͶQÐ$`+í¤Éù¶¾ ù@WÓ'4ìï§×ÙEêsiÏø}¸_% N޶·&ÄVš`/M¶[Ð,ª´•NZ …ØZ({ h7¡l¥yvÉŸ÷>¢£âG¼ñ`N¡'›Ÿi2üD’ûãÕö? øeºâÏ]uÙJ³l4ØJ;iV¾©¶àá7ùÛ“ø«Äe…{nÍ—Ž>^ÒäpŸzÃIŽ%.q=¡‡GÍÿê ØJì¥Yv šL•¶ÒI‹Ca¡[ eo¡ãí&”­4Î.õ&‚³©™|¤«èA"zûŽ÷9î@lôÜá©ËVe£ ÑÀVÚIsòmN7Ó£LÏÒL®"”l[6ˆèÊ ‡ù\v=|ÄVš`/ͱ[Ðtª´•NZ\Ó \B»ƒØZ({ _!rØ¥,“I·ƒb6Ò”%7E– …&”­H<åã’/=˜<=ùê[š~°uØýG4>”ü>¦ ýuˆkºPÏÆ­ÿÓO4ܶéÙÓbŒ±•O­0£:çÇ‹Í{4¾à9Ò"Ô£ºSÍõsD£Á]ŽÇªžæ/VÜUvÿΖ{_ú^‹g2i´¶Ê÷ŒF4¸ýEÏø£÷éDOÕ}?¥GÑ êûògG_ÓkûŒÅžûïm;òEWææW/èH~·+žgK˜4†¯Ãꊷ|ÝX¤ž‘þƒý’ÊÑ‹àW M®×Q›­€RT‘oq=©Ú†Ç'éX•[iCî¾¶u³*[ãWª×’ÖžüsòØ­]¾uÚÅÍ+§¾–{)2E )צ>Ÿ_M) èöð1=Õý õGçêò¹l‰ÛÜkuÝ/mÎmúoÿ㩹ï£z¦Û[þêÒ3š½¶Ï·—iÏý6Ñ.±u™h{ù²+:?Øß,ê§ìçÙ‹wT9oJ:@ó©ÒV:iqÍ+Lp í*bk¡ì-t|«)ºôdÑ9)/Ö¹ä¦`y®‘P¶"ñ”‹½h4ž½7äG=}`îÝSß˪³Èù½§ó~®ê˜aÏvrgcÚ¿uÏ\›èH‹ÝAÈØÎcƒó ïÛ{­â¥bÜëgûIÒ|žcÓIO ®þ4aáÇvü{½9·÷Táƒè Í—îû†¢3áN·y>ûLyž;¾Ÿ€°¤Ÿõ.N.¹äšÎ:¿Ó7/Ö<OõTc+Å ou£¶ ¶‡kóùÚÞ!M®C©@í©×Q—‚r”Ï7n>³mד‡ª¿Vuúž¾/×Ý—ó¦léz÷m®ö$цèúAõÍõ¹÷4ߣ[ÜOçbš%%êsö¶±Bn[®Í=â¶ËóZ[÷Ës9’¾ï ]ªwÑ‘JßGÚ†¬v”Û¿=û¿íåg½o?å-"·¯è|åólŸ uÓ”t€æS¥­tÒâšU˜àÚþ`&bk¡ì-t|+Ùhé‰ÛA(C]Kn6,Ï5ÊVª³KSoÜêi=§™öz±ɸóþfšÓÇÖóÁÖ™~ý©;©ª#Û Ï€~GcëIfì1[2WÕ)•8SD¦…M»¶i®sí]‹6z`®ÒàÇ—rßô89žÛDFÒÿwãÒïÄŠ§+Ÿ§zª±•⋷κQç¥þ‚Ò®ºquÙ((Gù|³v|kŸ†ãˆ&3;mªE3ü¿ó´'^¢`ï—Ó±õÔ—ßùõ¼ƒ[ŸûõEÒë.Ù÷Ï_÷3)÷͈3ý¹½ß¸m¯þ¿[/šwb&§W=Ïv[)g/ÕДt€æS¥­tÒâªzAp Ý —Ð2,Þo˜¢TI|ñ»WïýñúêøGúÈÊRKnü¥')×è{ùˆÉ%;b“å–ÜÄö$vüßþE‰%8ê÷<ó4›ÚçqÊàRÙü‰þi]yV¤–1~¿:ÞÏiüôÐÆ{DSýN¶‡IçömSâ©&.U§ÌžÓ‰Ê·žžü%)†¸i=ؾCƒQDÓé·‹:3µc+ÂŒšzƒEÓ—tÛã*ÈÔ÷_%™s L¾¶¬”÷¹õߦ¯;Õ ¯Ng"KѺ1­ýN«¦nät-ê™ìº1ö6°Aß+~&›F¿­ÝѺqòA»¨,ßnf49QvÙã%¹—ÖSÓbqã§œí‰Û†X¡I•Qô’¦'Îïü:ÜÅ©Ïýúb•”¿î—sÞ}SãÌjGýzŒÿ¶í¡~‡w¯m“Nˆ@¨o@~ª´•NZ\5/ˆ+'¸„î‚KhtZmA%ñ±mi;3ïþÁÑKzËvÂ÷ÝtÉMÂ.Ufe]³ÔA<‰ï—µDÅéX(tÚfÜ%7c:ydíÉ>W\þô^+—ôñ2¢5p1±qì-«l®*Ïœô2öôä‹d¼ú¤”ïŠ)m+9‘xÊÇ¥òuøÈä£~—<køOÆ6¶yG/¡úÀï_ogoí;Û<ŸÒééL 4ºIÛ–]‚¥Å±+›Ï©õM²~66-ùgêÀXèIÔƒ¶³oó]lbOÿv9>s_é$Û2‘hÌ9mw9žÛØ™-{úY÷’õ|ž-Ê.}ÖÆ[¨n|Mÿœ§ý.]7zõ̺ºQÇ-ƒ6Nך¶Ö>×®ÕëXk+ ‘”Ï7¶ã/¬ûÖeË–»Dߟˎî?§µ'‹òpþúÎÞ9eÅÔíæ^ÖûÕ–›d]œ$Q_èò$qÙ2 =^}”»îWØûJýoÊq²ŽÒç2ÛQ©Ç~ ×§Ïh¦ë'iÅÓ×í«í›önåól±•&”ó¦¤4Ÿ*m¥“WÍ ZtÞá* Azœmw -ƒØZy{ËG%ñI‡`ø˜¢ÉÌÌìÊ€3¶Kïož­-°ôÄH¹fÉv\a÷7éY\Ç÷Èé¨és6-ºñ^|^yL”_¿¬ò#øesuyÎ.cÿ”¯[Þ¶C(Û¬Ä.5oéôñ1ˆ÷á0¢Ù͵±Åþ}h[R6"›ÝÚÎ' ‡©®½æúOf?ÝÙü{m&}œ×fæÖÜÿ+±gBÿžŽ?·ƒQœú9¶ 9wo :Ðöÿ·îÒ@Ù¡œÛûrD_ÆçTÐ÷¹¦Ythl(~¦¹­Sßi›°¯¼¯²›ÉÙúçþ[ö’k¸\~ ›YdË£:¦ž9âvmU¼iå´äþ¡Yïucžö»tÝè÷VÕúœ«@[»Tÿu¼n\G]6 ÊQ>ß”ŸŽi|òÐØv¢žTõìà¾9{Ò[aÃkOøš¹RÕñÃïéoÿà´!ƒ?ÐL/øþCzÌ^¯\—?UuB\;õ£Ëµœû/N=½G÷ªÿ#çö†4úRÕOñoóÖýü;gbyÍ}÷FÏèeêsÿo;iÌ¢î úC¢íUuÉÍEv¬ Û¯èBÕ`¶Nµ¿KÆëÔcâ3¡nš’Ð|ª´•NZ\¥… .¡‹û¦ÆiÀ6»„–Al­2{[Cuñ©é„¿DtÇÎù§¯FÅ–ž˜ÁTÊ5KváâØ“¸¿7ÐIüÖœ“™+ _[JÊ*›ÞõrÍÚ2hs|Ûm'”]úä‹7oÝhryÚïÒuc²žIÞß«ݸ ´µq‰:ª»uã:ê²QPŽ­å[¢<€. ¶Ò„rÞ”t€æS¥­tÒâªyAÜK¨ ¬ÔM—Ð2ˆ­UU ×QI|W§4Ô6`mIÛœè$–<[rã.=1þ”kùë¡Ï‰Ø´Å6¹á’›¥øl™›ÒöÛ³÷±eUŸ3Þ'ËesUyV·Ï,cîr õ;½$Äœm‡P¶Y‰]fbmSÞ1h=¡ìÒgm¼…êF³¤*­ý®¼nôÚòUu£9'muÞ¶–Ù­ºquÙ((ÇÖò-Q@[iB9oJ:@ó©ÒV:iqÕ¼ Õ¡K¨ Ýw -ƒI« !¨$¾«gôx|¬2v9‰ûî7]rã/=™½H¹F•§á²¿ñgÔŒhŸ{úÔ±ÉM—ÜØeDú˜‰Ïˆ™öºÄ²ž>}9:ööˆ&/SʦzW×™å™Ó¡7)elU¼f ·$mÛFâ©>.;°´÷N ƒ¶±[YÏÚx Õ">«{zuÄÍÜ~Þ¿’º1YV-GL†ümí.Öë´ƒv±|sû'õÚ%¨±•êí¥8MIh>UÚJ'-n«…I &~' ì*bk[³7íÅg²Ü�t‚P¶¹=»]¤.[Ù,^Ô»H]6 Ê|y[i‚½ÀnA^ª´•NZÜV \BƒØÚÖìÍc{ñÙ–ÜtŠP¶¹=»]¤.[Ù,^Ô»H]6 Ê|y[i‚½ÀnA^ª´•NZÜö \BA±µíØÛ2Û‰KnºJõ¶’ŽÄ".Ð~겕âñ¢nÜUŠÛ hÈ7±•&Ø ìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`—mE¾„õiÐIºl6 ò[i'È7±•&Ø ìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`—Ûägš<üf+ã›/Iq¾…õl­ËV`£ /Ûµ_Ç‹M²Uè FMyûìmRG¼aã”8@‹¸™ÑädDƒÛa?�#¶Ò{Ý‚¼Ti+´8& ±µPö:>ÐnBÙ ìr[Ø/Pmóëˆò9sˆ@�ÄlÍVæ—49”¯µùá6 Ưh+%±ŽxkˆSîªdNד#:ÚJñžfã{&ßxa‹õÛKSÒšO•¶ÒI‹Ca¡[ eo¡ãí&”­Ôn—îg°{::·³Ìó+:?âOXsÚäÓÞ|xJÑh@·Ð3=HáÏZ?£Ùëcôø4¾¸Ö×O‡Ô¿ÿˆÆv0ÓÓÅ ßý]m~¯MçWÌ5Ïj~N㧇öSÚG4]º†? Ñìæ=]M# îÒp,3æwi4ýE=–MNÿŠ.ßÚçQÏòø }uücbšÄç¶ýõu+ˆ@�,±[áÁô¡­²—ýwö÷UQG¼õ<«ÜTÈÍ9úû[l#ìÞkì_�dS¥­tÒâP˜ZJM.¡e[ eo¡ãUPϾ+L([©×.¦ÉðêžÑÕüš.ÆÔÓ‚Ï0Þ·ÇçVP¹MÑ+:ç¯=qzû_Ðäê†.£ÏŒ°Â3Óó ï÷hoô’ÞʦÀ½Ï(ºü@ó«3:ìïé¯C~ä¥TúúªîzEãÁmêDôæ\„˜}:œ\šßY‘e~ÑÁž˜tÇZÝë›ÇôhÏB”JëG‰Ÿ7!ö:Ç,Øè¯T™çypTÁFÅ@-(žEñ2¡…¸Ú ¶c+\W݉ïªß€¼ŽxëyV¹ox|{¶“k' ¾ èÙv²@µ'³©nKžRêúéu߯vRA&)8Ö«t¤ÏÇe„¯I›X0‚[âšþ!E³kuÌNŒ ÓS=¡¢Ú£Ñ9ÝØ¶MÿöÖ ¢¿Ÿ‡Ÿåä«o“ýuýeþmZx@ÑUZnCjJ:@ó©ÒV:iq(LÛ¢›.¡e[ eo¡ãÛ®'ô°Šu uí»Â„²•ZíRw:SÞ­sÜÙKSÇô†º¶_z”ˆñ ‘ª{Î~<ö¢‘¿ŸÐ_«{¹ϽCš\«¸Û¡Ów>3Î÷N1&so¯sl…£¾ê¨G“ÙÒR x­¦®x[ͶêFeËGÃ'Zø1âªôFoíÉúÙŽ­@òCÕÏ*÷ Ž*'ÞþçZ8ùDÛ³nòLðVX ýÓæzÿ-×Ïü;žÀxCsYbÇ“zÂஉSµjz„',Þ¼°BLÊÄÂü E}+0½SmÍ]u¯¹#׋ø9sm·ÏÞ›çyðuýuˆ@MIh>UÚJ'-…iKtÔ%´ bk¡ì-t|»éUßñv¨a Í„²•ZíR‹,wh8ùÙ°,7õK9ÈŠÕƒ1E긹—…óx¥ôÎ׿ñ<òŠ@ñ,»c½œìáM2 P7j¸ÌÝÓe¤)lÇV°,º³L·!K}WÓ^¸ågõd{Ú°š¬÷“íÓâï?üõ7´ïÆ©'>>1m^V›¢Å*?øÞZnåÞ‰{Yá¨?¤qôœf¾÷ž~ÿþà ”ESÒšO•¶ÒI‹«·0mÉ%tåÞ|¸„Öû\!_‚Œ}WVÛÞ§ô(:¡Cm{<ãõš^ól•ú­Øïü꜎‡ŸÒýÑ×öwâͤ—›L;åKTYYì³OÃèBÏ* oÌì™þ­ j°)ÏÓ; Ç'騛˜ý½ämÁHº¶ûÂcgœe¶UYßõóïèùõ/¶³êÎÂ*{à²]ò%"ŽÉÓ{fvÓŠ@æœËÁîÐAô'ºæ ›í,®ÌÂîék¬P$õ˜ît1J/ë)û¶{qÚŸG/éŸ%cò<&þExþúþõ·4´ÂLTQWjÛLѶH]¶²µxÛ\7Æ}«S7ê¾Íª^–çj’îÊÁÆÐ6l'N¹h´í/ ü¦ýÈ?YO2ÞÅèiô¥'·]ýÕ"Pf}Ÿ21"i[ê¿ð8ç9¨z¦·»e€Ô”t€æS¥­tÒâj-L[q ý’¢§ª‚äߥìM1׸„ÖØZ({ ߘ¦ì»’ÛöØÞÌàײ›N ÛÒkÝñàçáòp9W£ ‹¡f@ž^nÆt’i§ôþ.{ºü|4_Vâ{½þ!»,$:?lƒŸ™r¥Ÿç°šåK¨0„²‰'D\i$Û±ð§pçñq+ìèc{topo1pÝÒèK9ÇK&ô’Û¿O„Ç޲»ÈšÙ®ô&Ïóä@øÞ€±ÎùÿKbà®Å÷×gŽ`~—ƒÅ ¶ÉºM°v{ùŒcá ~ÎMÑv)q‡³Oy¾Ðl'Þv×ߌ&û qül Û®ÍýM¾ˆ Ú ¶c+{ó…ûlú‚:â §ÄÝ÷·eZ? ü/èrÝdˆ8ZêÙòeûÂöœiS’ËÁtpm—ë8Í>qƒ=sÍ¢á2êL,辿ª+â j•*ž4ùç×NŸHc/.I›ô_Χtzúÿ¡? ™zG×qU¬H>o(ÄVj±¦¤4Ÿ*m¥“WgaJ¨ç1U¸„ÚK<›¶øû’ï審+f¸„†À}®„Ž/Fç§äýmÇl/¶_÷\Âæñß³åæ2ìÔz…8ïÉx®©{g•…Ä@Gu¤l§m8Žh2‹çïbƒ|?ÄåÓ#w8$]ÛÆ}ݯwAÔe+[‰·õuãŸT”~DÒ näûŠ÷tƒÊ™¤´‹úò-é™'Þõ›L|9.Ωrùò%ÿ¶Oƒª'Ô1WÀqWÄqê2,÷K™XXš4ùšp¤ÿö'FT½ðÁ ÕZXþ{:}|L'ÚÃkñ<›cûýn|R©m™8Nê¦)é�ͧJ[é¤ÅÕY˜tž¤f›N^9—P0"{SDôv)Nî¸Á%4bk¡ì-t|1Ú.—íeÙÞWÛ^®Ž,ÝV¿^Qn²:Æ~×)é1×'m^#_ª¯>{xc–ÊNBÙJmv¹u¬Ýê/rÙC 4uÙÊVâm}Ýèµ»:NI[€ºQcÓ�”¤‹ù¦Ëpæä)ر•&ØKkíV·W‹÷¸,Ž““i¿MÔù<¦œÐ8öÞV¡7 QtNgÛú(‘`ÚºDÚ$°³CâCi¿•ò©Æôúk~âùXǶ‡ÄYláª|A…ÙšKèµé(.íMñ†æòŸ„Gl-”½…ŽoEŽÅ>k/—ÿsíÉàÈLk[²ç´Í{K´¿gž—ʶ¹4;}o>÷íìËA×/)zþsvYˆ:?ÐëÓïè¯ÿð…oÙƒocÜç H([©Ï.·‰­ìsUb@S—­l'Þ¶×oMDD g«…´Åº‘ÑË6ï™þŒ=T7uÙ((Gó͈@²g¨ ±•&ØK»íÖ¶ñ¾ãý¦÷—sku;æ]²gÓ†õxÉý(¢©8Èžu=é»oÛ^Æã¥ÄÓny{ÓŽËxÝs—ïK»·§ÕP¥­t²…«·0mË%ÔîU‘º7…k¨ê·p Fœ^B:>—ô}W6°½/Gô¥c磗-|ö÷Mùp)©åÆ ¢úXšº›ŸÚkÞ¯( /è Žô€ê ]žŽi|òÐ6`R~K˜ýÑ-gÜ6Oˆ¸@û©ËV¶o›ëÆ×“G™}ÞÃJ G[¨MÚÆÅ³½gîLký˜w€ú¬mt.ßÜþCKúÅmAl¥ öÒ”tl†ÈHا†–ú¼2Ös=ÛT[©'5T›$1HÀç¿VíªõˆÝ"fLî¦Y„¡”‰@]6OÝøÙÜëS¼iKR¥­t²…kwaÊÂs@l-”½…Ž/zPäV¤ *BÙJ'ílºl¥u6Šº±6Zg+@ƒ|y[i‚½´ÛnW‰@¾ÇOŠd½W—žl(éñ£Yä·vw}ˆŸÍîXUÚJ'kÊv¦,<—qÐÄÖBÙ[èø‚ :),(M([é¤]‚­Q—­´ÎFQ7ÖFëlho /b+M°—r鸦ÙÙ‘³eHÇ+¾¾—ô\uÂÆNžÄK¸Ž‡Æ³'ÞEHÄÛ­Äøv~uNÇñ^Bìåúd±¤ÌÙÇîóá}ã ›ñ¬IÈÙß'mßÛ%Ha·ZaàÃÉkz=þK:Ð_á®ɯ*èdMYå jÉ¥RUº•rHž„²·Ðñmwƒ5ßm”%”­H<!âí§.[i—¢n¬“vÙ o /b+M°—ÍÓa–RíŽé‚·ä˜_Ò„·é°ûÇ.a½nÌ>s‹eXå&¬ä¼ÏåÍ”…e(ÞeI˜I¹ošx“Ø—!Þ3—…ÞÈ]"-{èe“Ø¢Å^3OÒ·;I˜›W4¶"›yÏöxEHÚª “5e•/€Uˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°—ÍÓ!Ë®ÏbBÆfÄzã×™ÀN6”ÚjÄõz§þWÅ¿¼‘²aYŠ÷‡ËØóJΧ~õ—d –»”Lމ@#b’»Q: O ë5û)RE ³/ðÁÁˆNÆì ¥Ò-]EHWA'kÊ*_�«[ eo¡ãí&”­4Ç.y3Þg4|7̺QÏè\”Ãt,噩gÄÊ~©ÑÝpø6 *vef겕fØ(h°•vÒŒ|“å9vЩ—unÇ›o{í[Q¸í}N'£ÝöÛDýõ?³TgñEâÄ{Èp^oîÅ"¶R¿½”°[ý.ö ¼+ÒØ¯vÉ׬*ñŠ—ƒÉG„ü/ƒ1«öÊŽìr±ô¾V†À“¸fˆËêûa„UéJî d„#¤Ôßúë`+„¤ ¨Òf;ÙÂUù‚�X…ØZ({ h7¡l¥9v)KhR\t;ÌÀ•lp'æjáÇ~’<GÇ©(uÙJ3l´ØJ;iD¾ÙhžAggp„™ä`Ý´KfYŒû{º0<0ÒÙx·b+µÛ‹bót˜>ÏÒ;½ù#M3¾Þ/—Òqº_šÞOR$?•nŽRD XlÉðšY)Éý’žOÆ{HŽm*)bA+Ïž@iñØOâ—ò´JR¥Ív²…«ò° ±µPö:>ÐnBÙJ£ìr'¿¨ÄâÍW4П¯pÆ™;9©³yå¨ËVc£ ñÀVÚISòÍ &wHÒA"1X×Ëœº8—ø ”övecÅ^-9[i‚½lžP\1çš.ŽŸÐóë”w£Å:õÛJûGvIZï&qœ’.o“fE|˜_ÑùÑÀ A#Šâ­e2*KRˆMô)báKöEŠû.yE YFæ JZÐRùãm¸m„&׋jñu0É ³ ÷x…¤ÊTÏ%Ôb¦!— Ý.¡|Mdv`/­Jó½x9ˆÝù¾7 £sg—üÌ48K ükV ¶Æ!¡ãKGÞq€%7[t£.Œ|aà¶ÿœ›ÙN6ÒHÚ¼.ñÅ„P¶§5@\©¸ˆûºß³"|¥ÂÎÂ̯¦qÝô脞q';(‡Ïhöš]vUú{4¾ðgÏÌo>ÏuÆÉWßêü7_£øÔ–w_ Üɹޝ5_¬ˆt§5þ:‡ŠïñÉcÕ±HÚ·@¸÷rBÖÆˆƒ¯h:;Qì”ò¢Ë‘\ÿ”¦zæLýE™ÕÏwø0å}”Gž%4Ûuc[êÆDÚR–=nßVÀ6¨3ß_]ºM÷Ÿªöˆûþÿb¿0ô™lÖ9÷vÛŒDû&æùM0Ôî× d œÑ®Å¸mÆRÈL/‹@f ìü^ß×Û¯¦pû¤Ò>L?¿Ä$…ûLuS.2Ö´ÏãŠòn¥ß ‰/qýì &9—j-îåLÀÅ_Ê2çöº—ø­ ‰þ çëw4Ž¿òeƒJÛèä{GHZ&ùÅ3Wx’ç‘û­¶ÝÅïTˆÓ¶ðTÒÇ÷îÑàžßß“ûzyÁbåñyIO«$gt²…«ò•".YF×A6q Õ*î:`÷N÷ÿæÂb¨ø¿1âN¼K¾¨ÓYiPÕ¯ãÔ»é¿wþŸ]ábk¡ì-t|éHe¹KÞÎà#Ñ1ÙÜv²àY‡<×Þ e+Oˆ¸–1yc܈?š<°¶‹)º1w:Úµ÷f1ƒÆ@[w-‹ôlï3kÅ_}xðµÊ¹—”·tzôÎ3ãj}Gßóšgöl§^×m¼vÿ•Ž×Ì]ÓÅøŽJ 乃òHÝCuÐt›“! Ø/Vô¾¥ó³ Gjà‘Õyv;vinÐ%©ËV¶/êÆvÔœ¶ÕËë²QPŽÚòM·¦Þ¿‰—æ*›zûÒ l_||“6ˆžå6#Ù¾©ßœ>6åËö}u›xý'5ï'Ó¥ÅÓ´vÍF·1¦þsÓoÒè”--J¤ÔEÚ'A·©êÝmX׊­Ôb/ÁÒÁïyøÍ’p¦½]Ôxhi‚É2ŸÓƒRûª¨ÒV:ÙÂ+L9Xª�w‚å† Û%ô_Œû\,ÔØÙŒR3| Ì,„e¦á­ve\ì<Ïé¿í¸øe#¶ÊÞBÇ—IVCÞi¬m&:Æ vÛIG:<“1¦Iƚ²•ZíRwœ?Y”ë„mÚj<£“¬›’õsJ½¥±yŸ<ž/:¦:^¯ª;²wì:xq ^¼ ™ªØ=JÍã¸sŸ3gÜy;¥Ã#ëj¼Jbt§¹—³~O‰ê˹<Kh‚Ä‹ºÑÒìº1—Ï£ .å¨+ßt_ÓYã¶-Io˜MÚ +¨.µ~ûưHt@=ïíנ佘ÀñýœÞ® âA’¸N‚¤×g9ý¹<„Bícžù}åÃ}¦º “k/±7˜E{RÒôϧ³·Ùé˜FG“J½YÀæTi+lá¦lÒ]BÙ ÔY>À+b÷é/(zfÖ;ê™ÙT«áiîÉL÷\Bß.5bºQL¬-µÇtœÜ¹þAߟӰ®òwæÌ4œý½Áœ™åOÿa÷}„ t| tC±nɸé~J¢»ùÜ>N^Ókî˜ðµ©ŸKL³C¾×ÂÚ pϯw>.Ò¥]/£ ]nRËJŒï"ꆬ\Ê@gIH·¢ö+.ã™_%ȉ<Ó¶Y¼»ìR—c'Ït§Wþ¶y×/›tÀÕ ·Ë\ãεþý'ïE,’Á¤Û«Ëbd MËGJç+iõ½ iÏÁ^J??Pe7½}YÆÆj4†fkñ¢nlHÝè¦]•ëéSû^²…ѬeòÌ ]Ô•oɶD&�ìߺ|¦·3ùÛ ÅR›á·o"9eCÇ!º¤¶keHI¿7ùjúáé{oŸXÔ¸¿±°,¶Ò„r*‹úSžEõÇt*ËÇ@ã©ÒV:ÙÂ…*L©èŽOŠKhìj:Q‹Ž©Ì?Ú§L'ð_Œ0’˜Uc¸ÂïšKèkó^âF,å·ÕXéOíݦƒ“èìá!Îfk n â¥e™ixú49ˆ”ޤ“¦,ÄÖBÙ[èø˜cŸ+–ÜèwÊéãuîgêo»&Ø®s7€´yо—{Ù<»úžŽt^ª»ïë{þoíN½—Hw0nRËJ9R:¾�‘i;›Ø¯-§9ì0‹P¶RŸ]2vSB݉½6u§N ÛÙÏæo™YÔõs/ˆÛ•©©·–Å_u|øÈtõõöìúÿòiV»f<^#ŒU½®:´ñ>g?Ós5нˆ¾°ør3™Kèú€W/Sã}ƒ¸œX[\ÝÑæBDÃý¿,µ„'ºle;ñ¢nlVÝh=!TY<9ÿŽ¿¢³,¯!W<óÁuÙ((Gmù¦Å)Û¦ÑiQeâüµ#|lÔqùJk3Ìÿ¥}3تr$Û)¨4=}KOU=òÙS•úçßÑóëHo×J‘–~SVS·‚pب}âßícO °[Ti+´¸: “ëyÂ$„]ÑÊ̘×iJt˜R:TUééŽ\—\BóyäùgÓºjßß? 3 ðZ¶ÝœKnQ¯ãŸ9HµzÏ—òLþx&Ì �Î{1Bë?d”Á¦+q{½Ø‚KJ¹L”if•í³_F?ÿR=y¦m㾿:Xx_ªNø—hx{ ’¯iÆù%iŒ)Šó|î TGZÎí iôåÂ’¢Ì[:}|L'²‰§ÞÜYu U'÷úo¿ù¿+;µ÷ŠwìÝ¡UИ¿ÐÕé˜Æ'•-ȱu5MN2Ë—©“0v娾oë¶,Ûgè Ž²Ð%û‡f+ñ¢nT4­n´ï,\¯"}Ù£<3hõåÛÂc7Ñýrô—t›ëÏ¿þ©r-åç¿Ð` e²H¤Ê×R›¡Ú·}ûoŸÓoDxŠƒ)O‰U�±G`Z»–§äe!mŒ‰;‘þ̲yÛ'©'̳%¿:UI+‡ºiJ:@ó©ÒV:iqu¦„è£*¬„K¨®èĵ~ÈÒ)—PO äÌFžåÑç¼ÄÎΞfróŠŽGO)áZŸ™oO Ýy•þÕˆ­…²·ÐñÅ$ìS¡ß¥g¯¥:LŠêß;»¹îâs‹ÆÖ2»J–ÜiåÒÛ÷b¥í°_‹¶ÑÔ²P¶R›]‚VR—­l%^ÔŠ†Õìýð/ipŸ= ØjÝÓ¹}3C]6 Ê|y[i‚½ÀnA^ª´•NZ\­…Iw�Ó]B§ÜN;DüÐI™³ª%o>ÞA—PÝy]÷u0î$~IÝÁwïŒÎ"»Ì»»ß«Îîs½Þ5+ V4Ûà+&bk¡ì-t| ò/¹1⚈mv #u=pI#•ͤØáB¨c7j³|báJ¬ÒôðÿI'OyŽóùáë—=ÿ§Œ²R†´r™×v دÀv<¸¯ÞöÝ¢.[ÙN¼¨U7êeðŸ™súwë„ Ø–—=Öe£ È7±•&Ø ìä¥J[é¤ÅÕ[˜T‡&Í%tö¿´0bÒæ¹ÞÐ ^rÕW× QwfMu´:éj;az£ÌÛÎþºƒ¬îÉï#ރ믰>‰ß§c™q W¿w;Íkpã Aèø\r-¹IØò]ÇõYÙ—#úÒ±ó¤Ø˜b‡³?˜<×áÿF¿ù »÷Ëß6ð�*±ù©Ø°*‡•.¹±ƒ‰7Q.sØNnûµ_Çàsý!—ܬOÒ»m$žqöS—­l+^ÔM©iá¾Ç{Ù“‰Cì)ÍØ‰3{.mÙ£œíùò"¶Ò{Ý‚¼Ti+´8& ±µPö:>ÐnBÙ ì¡.[‚¼ÀVÚ ò äEl¥ ö»y©ÒV:iq(L bk¡ì-t| Ý„²Ø%(B]¶y­´äÈ‹ØJìv òR¥­tÒâP˜@(ÄÖBÙ[èø@» e+°KP„ºl6 ò[i'È7±•&Ø ìä¥J[é¤Å¡0Pˆ­…²·ÐñvÊV`— uÙ lä¶ÒNo /b+M°Ø-ÈK•¶ÒI‹Ca¡[ eo¡ãí&”­tß.?ÐÕô‰Ý¼^=gï?Qÿ?Uñ%EÃGÞÀ6±¡n è/Tf}¢¼Z겕nÛ(¨ØJ;él¾¬Ÿw±•&ØKgíTN•¶ÒI‹Ca¡[ eo¡ãí&”­Tk—üyëoêD|®'4ìñ縯éê™<ë*Ñ!oà3æf®^Ç•ŒTg+Ũ+^Ð>`+í¤š|+_ÇÕG›Ó±•&”ó¦¤4Ÿ*m¥“‡ÂB!¶ÊÞBÇÚM([©Î.çt3=¢~Ý^1>ú3ÖÎ'«õß›ÎÊ6ôó¢?Õ]Î *”]úÔ/h°•vRI¾UPÇÕF›Ó±•&”ó¦¤4Ÿ*m¥“×õÂ4¿:§ãá¾}Î=ê÷ïÐÞhJÕŒ'nh:êWx¿ÍhÄòˆˆ­…²·Ðñ…£v×5BÙJ5v9§›‹côä^ÿ…ƒ;öÿFpÑõÿ½÷E/yyÖ€FãCêó±Þ/®Í®^ÐÑà¶¹¶HÑÌâû¤…ADWöwŒÿ[m£ž”ˆ¯7 £ó+õ4Š›W4–ã·nÓ`üýSâPtù–¦ÇCêëxyÙYD£Á]ŽÇvùÙ]Ï;[÷Ûàדó+s¿ûh|h~ÛÓÅ §HÝÿüë8þÞàk:¿ú`ŽëånŸ¡‹ïhpûs?µï·DÓúÉyž=Dou”E‘´‡¦®xËÒ–ö°K´ÕVvÒù–¨³÷èÞà^\ÿëº_/Ëâ¿ûô(:Sõñ§tô5꺚ëøWª7£PuèùÑ€zúÚ}Fæ¸ß'-8šdý<¿šR4ÐíáczªÛƒõGçtã¥ë笶0³-ù–ni—>UÏ|¢žU=ç†u“pŸ½nš’Ð|ª´•NZ\u/¨‰n•?Ódø í/Ô@ä$~ÖÍÏ-w½žÐãú„yÿÕØÛz*‹¯æ÷VŠ6§=0¡l³2»T¹z=p„÷4ß7\þs~AãÇ4»d†ã»MÑšÏ/i‚Çþ˜fßPtзñw4Ý5ǵ*³!«<8Mûwéprɵ)]Œ¨×SõË÷ÊT©§Ÿ…ŸãžMGòc‘‰E x` :õ‡gêo¾wÏÖïî=>Ðeô™Šç&×îƒÙ{óýt>¨Îþ™ê´ï™6c6¦ýþ4aáÇz]~xÍ3.„¯}ý\ú:yÞR^P†jl¥8¹âEÝuÙ((G%ùæ‹üºÞ<¢©Ò¹~HãÙŒ¢ÁžŽKסªN¾š|Aý[fÙ0×Ï{Z|ÿh<?õñ÷ú~…‰Û®Ÿ¹Më›çÔuùµi¤ÍL´MYmaV[ò>=ݯˆ+ó¬&YmGl…CÝ4% ùTi+´¸Ê^P#Ý*ߪ†çŽ£Âóß{›‹@­v5ÚæXyÄÖª*ë¨&¾úßÛæ´9íá e›ÕØ%ã‹@ 5°5ûñ¼Wñcz0¾Ð^6F¨X3ñßÏÔïé1Áp ‘#%xž@š" ¸éÕ¢Ð'4œülþ¼šÒéxh¼iôïÒ„.Õ!—x×CŽûCêéÁˆtГÏe0×,žCþ~B­âqËŽN»’ôÿãûyit7%õH› ï:4ëãEÝ uÙ((G%ù¶TÇ-&_ç2a!U/:‘ñßSõ{ñb•àyNÆÂNZX®×“õs²ß¯Û3©«Ý´ë¶3íÞ2Ú’ÊNwõ~ÓpŸ³nš’Ð|ª´•NZ\%/¨‰.¡þou¥ï‰@‰øT:Ž^ЕVíí µ½V/Hqí7.¢ŸšJ?kI�φð9^r`ïg‚ß@ˆ kú’̴ʽW.x“xžÔ[�Ϧ(•/i·cŠdVÉæ_<@þ?T¾=㬤GýaD3}\°O‰'¼Î"awEò<aCNùÊ´Ï_RÓ»W?:¡gü¬5ÙSÕȳo›Å;.WФ·ŸRtJÑðA<›ê‹@q'ùoŸªÎêX„©Ývêc§C¬Ó‘ðÈá:¹¯âÿ³é\÷T9Š^ÒôDžËFû·Ø\¢³í-“Ô3»Rg§´'_‘É”õÞp¢j Ç%iO<ã.Š@ͬ7nQ7–BÞ h•äÛRg÷qëè,:¤»v"ÂÔ‹N™Õ�¼Têÿ§û剺¶,‰ú9§¤ÿŸÑ¦¶%澩鮠Þob+¥í¥š’Ð|ª´•NZ\e/È«ôô £N—P WÒYž@œ¦ûfÁ\ö×°Ë%ôŒ€y3X²éH<£tNM£wxUá/ pï1¿Œè —ÒÐè{óõ)K6´;jzZ?H¼ÜÙŒ…¯´åɆ°ÄÖ*±·TŸÿÞl^$–Ü<¦¿þƒr\iËJ8Ï÷¬ §½ÉÌqw¨“Ÿ¤Ý™Ž?ãº<7nÌiå+Ë>õÿ—Òý7t.ƒ2û¬]¡¼­äCâ)×B|8ýŒNm]iò3éŠnê§dÝ¢Ïëå`·ýnætýü;zžX6UŒDÿmëMkG‰ºl…•km×&ÍÆKÃÌ3¾3"®½{ëè;¶Sn<n¯­ïlyJ”Û;ê=ý‰®u1õ¹,]Û³þä3ZáHºý°u¼´çS:=mTæCÙ¥Ïúx›V7Š«¸ µ‡¨˲ÞV@©$ßÒê8-ðô’åÀ–ÇDß_Ÿ¿±K¬œýá®_Rô|ó‰‰DýlÓbʺõMˆù6íÑ÷ô‡Ô¶ðcF["KÖÓl—ºØJÊySÒšO•¶ÒI‹«ì%¦~—Е"nÜ¥]¦#«ú<xúØÎÚçòŸQßC6}[1¬vÃRÝa”k’˜ìâ9â¿/_­H«€ÈŒc"f€³Üé­7¿BPM|)ï-uÉLÆ3¿ò÷è‚;NZtHÌ‹°ãýF¯ 0 »SäÊs3@N½wª}þƒé,%~¯‚Nwý¶´ ä·û>Ëb¦v«{¡ çõÝ„Ðlê’> ÆÎ]®êœÍ03=fòÂuPöõô©SgsÝönf‘­WÕ±xóM;{¬ éñˆ½2LZ®ãgüžþV÷4ˆï}×Ù›=PÏéÜ/Ê®Åë4Æ–½þ}è4©ß8¡³èÐÞCÅ/^*º¼É=ÐÓèËÅ3'Ò¤Êäù+3ƒ,{ m€¤?4ëãm`ݸQ{ˆº±,ò@»¨$ßÄK&QDZEDsî«ztpßÔ©®x’ðÄsêÚMHÔÏî’«t_ýC2íém¡Ó6ÅÁ¶%ié~§ê‰D›×š`ñìõ—ó¦¤4Ÿ*m¥“WÙ Jt¶[qÖéª;d"N‡ë‘cD¿îì©ëFM§ß.žkéÝû¯dÆ@¿ëìÎÌl‚úûíËì´J¼…:½õ ¶VU\G5ñ¥½·´%7þ@G#Oéo9K`ÊâÙu®<7ÿO/_iöùÁØUjºë·¥mÊ6«±ËU¨Aíá£D¾ùuK÷á™æÇ4¶_ Óð`峯Mýã—ÛæÊ.}ÖÇÛĺq“öucYê²QPŽíå‹@èЙˆXêû·†¼mI·[iB9oJ:@ó©ÒV:iq•½ él5È%ÔÄ︗Ûô˜š]røú˾Zô€I§é½°Hÿ÷·Û´%üÿÛöø Ì@-eɆ,HIkÜ¡^»<B:§?ÐëÓgÆ++0bkUÈuT_ú{3ïÙ]rc:ÖÖËJÞ˜%=×Ãàgz½Ü\ìôì:_žŸÒÙ2ÊW†}/“”t'ÊQwe›ÕØeF|ß÷´¦n±îñ»€®]¯&õ^.žÐðÈ.UбåÖÖŸM$”]ú¬·uãFí!êÆ²Ôe£ [Ë7žHݘIuß¿·è·…ÜmI·[iB9oJ:@ó©ÒV:iq•½ ¦¹„Z±Iž/¹q¥¸¹ hh6ªL,ƒÐž@¼4@{üˆ¼Órý'çÿ^w"å~ 7SIÀäÌÞOŽñr Ùs¨¥/ÙHO«õ”û®\ñ‚ÞèMÙã"<q:UA5ñÉL°ÿÞx@á.¹±Ôe%œMDUˆ—Àl‚¼˜çRvœXn³&ϳÊWlïr±Ï÷)é¾4Ï©ׯY½läÙ·ÄSm\v¯ƒ´zS‹×6N©;Ï5ÍÎŽ¶Ëuæñ¹-B²þlêÀ]Òšõñ6­n,Ñ¢n,…¼Ð.*Ï7-˜Hyp˱ÛoQ¶-äiKºØJ¥ö²!MIh>UÚJ'-n»…©K.¡›3¿šÐÑxêÌpçù :ò®/Ù[Ûž½%Ùn|j “Xrc: ^V’E^ûì:¡ls»v ºF]¶²y¼¨wºl”ùò"¶Ò{Ý‚¼Ti+­°¸ßýîwñC [¡K.¡ó¢Ÿ$gçy9×ðûå´]_²±u{óØ^|iKnì@§ÁËJÒÉoŸ]'”mnÏ.A©ËV6‹uã.R—‚r ß@^ÄVš`/°[—*m¥'\4TJ']B7EuŠgÏhq€]ÍŸÐ4^2gÙ%bkBP}|YKnÚ±¬$œö¹Tk+ÙH<!âí§.[)/êÆ]¦˜­€¦€|y[i‚½ÀnA^ª´•VXœ<pÑ�À¶ mo¡ãí&”­À.Aª¶×þò�Ö[i'È7±•&Ø ìä¥J[i…Å}à*_�«[ eo¡ãí&”­À.Aª´×öò�Ö[i'È7±•&Ø ìä¥J[i…Å}à*_�«[ eo¡ãí&”­À.Aª´•"¶We¼ ÛÀVÚ ò äEl¥ ö»y©ÒVZaqE¸ÊÀ*ÄÖBÙ[èø@» e+°KP„*m¥ˆíU/è6°•v‚|y[i‚½ÀnA^ª´•VX\Ñ®ò° ±µPö:>ÐnBÙ ì¡J[)b{UÆ º l¥ ß@^ÄVš`/°[—*m¥Wô«|A�¬Bl-”½…Ž´›P¶»E¨ÒVŠØ^•ñ‚n[i'È7±•&Ø ìä¥J[i…Å}à*_�«[ eo¡ãí&”­À.Aª´•"¶We¼ ÛÀVÚ ò äEl¥ ö»y©ÒVZaqE¸ÊÀ*ÄÖBÙ[èø@» e+°KP„*m¥ˆíU/è6°•v‚|y[i‚½ÀnA^ª´•VX\Ñ®ò° ±µPö:>ÐnBÙ ì¡J[)b{UÆ º l¥ ß@^ÄVš`/°[—*m¥Wô«|A¡øå—_ìÿ@›[ eo¡ãí&”­À.Aª´•"¶We¼ ÛÀVÚ ò äEl¥ ö»y©ÒVZaqEX~€2„ -^„uaۤʼn€°.TA‘û¹¿E@È@»HËC„u¡nš’Ð|ª´•VX\Ñ–ß# „ !H‹a]Ø6iq" ¬ UPä~îoòÐ.Òòa]¨›´4! ¬ UЊ®Ên"Qéç›Íföh ]·½ª-°Û„®3%¾qnƒßüæ7­�Ú†”;ôY@¸íBžP­èqTùÀMçæÒuÛ«Ø2�»Mè:Sâ ç6€@x �v•Vô8ºÐÁ[ÎÍ¥ë¶W5°e�v›Ðu¦Ä2Îm�€ð@�ì*­èqt¡ƒ· œ›K×m¯j`Ë`-7~Cƒþÿ¡l¥Gûã šÛStÑÀ–¹[{#š~´Ç+磊ê‰gL³8o)ì™ã·ú4šÞØãyɺo9æ³ïèxúÎþÕlÌ» WgJ|!ãÜ�D �À®ÒŠG:x«ÀÀ¹¹tÝöª¶ V1¿:£‡Ã'tqÃêÈ{šïÑ­Þ!M®jÉ|6¦»]®Pæ—§ôðØ6€ãÚ¿u‡†“ŸíÅü‚Æwÿ’¢Ëö@Q~¦É𓤸•AîgPi:>zN×öÏ&ºÎ”øBƹ ˆ@�€]¥=Ž.tðVsséºíU ldrsN£}W\ù™&‡4¸ß§ƒèBØ“f˜eÒ˜_êk‹{ê¸Ìézò% ŸÒž+:]Et0œl.¸°ˆ´ÿIÅÏÀJêÝ]mÍ5ª2B×™_È8·D �Â�°«´¢ÇÑ…Þ*0pn.]·½ª-ƒTæo(:¸“ôŽù8¥Ñƒº˜R¯DSíÄ^4C+vÌéf6¡ñpß”Ãþ!E³k+²ôlÙ´ËÉæW4F4èñ±Û Q‰ãØÛ£Aô–ÿò¸¡éè!EÏhØ»K#½ÜŠ…¡/ÔõòûkšMÆ4ìs|=ê#šétz¨øÏÔãß îSÿÖƒX°™_½ £Ámuýê÷÷ho4¥Ï ÷ø¤ÿ õËáXꯖ€y¦pu¦Ä2Îm€Á(�áA¹�ì*�ÎÍ¥ë¶W5¿ÿýïaËÀcN7Ó#ê÷>K,±šÏŽé?X¹c„þÿƒc½—Îü2¢ƒÞ> £ º¡w4Ý¥žõÐÑ˸â=wøÜ§V ù ÷ä‘ß­$ŽË,Këio þÿCÏÞ«| Ëè3ê‰øÄžLý+p™øÿL“áx? ^þvØ¿kžázBÃÞBJ<ƒö º›¼Ç ¢+ýK†E ;bV³]gJ|!ãÜŒ”;�À®¨`àÜ\ºn{UƒX†½{|Qƒ=nÑ¡Tøÿ‡ÔÛÓÅŘ>eO»¯NtNf±”j´¸ãþß L,¦\Ïhr2¢Á^RlÊäzB‡‡V,ÒÍ=_üHãOŒŽ>&B -Vù"E®'Ó›6+NÉ3HZ`Jy†Ä=¼=…ôµÞÞE %t)ñ…Œs î <(w�€]"P@#Ô\ºn{U[KhñdÏÛ(Ù.Å’=n¬7ÐýÁ†‚‰B{áXo!-’ô­W ß§oÊio@£“çt¡lïiK¶<>N¿¢±geîh …¡…0e¼Ò½™’Âýl4x{¿xl÷<Ñ'Eðù8Ñž³Ä¬É„®3%¾qnÔ�„å�°«@j�h„šK×m¯j`Ë` ½/÷¹uu̲/ƒõ¨¡C !Ö ‡?)?ܧÞàØ|ULÄ•é+šÎ.µd–rÍéfѰ!eÂ^:ÃÄïÌò3Y®eEíóÑÞ÷ Ư¬g’E? 6Ö¿9ìÓ'·>¥Ñé+ºR÷Übèš®ÎÓpŸ½¡ÓóÙŸižx†ÿEÑà¶>^½ ¯†Ÿª{Ðøù]é÷c—ÂåøbZ]gJ|!ãܨ;Ê�`WÔ�Ð5—®Û^ÕÀ–ÁÚ[fߊ@üõ¯q¹Ò›$›_yÂкš|A}ý»Û4=‹7d–Ϻï¿Õ¢ÙwÇl²ÜÑïߣÈôž¹bqÆÄ+±ù²' é}zì¦Ôìet6K @škº˜ ¡y?ŸÙ‰º·ú?/Ó{ñ†Ð¼¯Ñ9MX¬ê? ÇÓwÞ3¼·˜¹ÇëÉ#ÚëõiðxºXF–w‰[¼ …Ä2Îm€º€ð Ü�vˆ@ �PséºíU l,ÃËî%=@NX˜ºï|B¿ù„®3%¾qnÔ�„å�°«@j�h„šK×m¯j`Ë ùì)µ`SãfÁ{ }CC Zà ]gJ|!ãܨ;Ê�`WÔ�Ð5—®Û^ÕÀ–A*ó7tzüÂ|‰ äà]itÜ.ˆ ]gJ|!ãܨ;Ê�`WÔ�Ð5—®Û^ÕÀ–ØmB×™_È8·êN�ƒr�ØU 5�4BÍ¥ë¶W5°e�v›Ðu¦Ä2Îm€º€ð Ü�vˆ@ �PséºíU l€Ý&t)ñ…Œs î <(w�€]"P@#Ô\ºn{U[`· ]gJ|!ãܨ;Ê�`WÔ�Ð5—®Û^ÕÀ–ØmB×™_È8·êN�ƒr�ØU 5�4BÍ¥ë¶W5°e�v›Ðu¦Ä2Îm€º€ð Ü�vˆ@ �PséºíU l€Ý&t)ñ…Œs î <(w�€]"P@#Ô\ºn{U[`· ]gJ|!ãܨ;Ê�`WÔ�ªi„æt3=¢þ­Ût½Qµë {¶Cß;¤ÉuýOÑuÛ«±å_~ùÅ�ì¡ëL‰/dœÛ�ƒQ�ƒr�ØU 5�ˆ@ æ³1í«wÑNèÚ«“®Û^Õˆ-âæœFýõ"ºl¥áþL“ák+wh8ùÙ`÷]gJ|!ãÜŒ”;�À®ÒŠ^S:x«@#$ÌézrH½Âét59¦höÞþ]]·½ªÙMH1¿ ñ~¯1l�ÔEè:Sâ ç6ب�€R ÿ �ØUZÑkêBoh„Û!,2ž_ÑùÑ€zûcšm¡ÜuÛ«šD .`—2õ`›_Mè«hÖZÏ=�|B×™_ÛëÝÐA ÿ �ØUZÑkêBo¥¡”½tdYÓÓ›W4Ü^œ¿zAGÎß1ó+š©«GýGßЈ;g±À2§›Ù„ÆÃý8O$$¿73šœŒh Ó´fyZŸºÇýÝ_H «éªŽî­þ4}ªîyƳ÷êÒ3:äã: Î,âÊg(†<ÈÇnŠ@›x°)»>ÿZ•cË�t…Ðu¦Ä×özgg£ è4¿¤ÉW§[™ü»D �À®ÒŠ^S:x«¨¢ZÞKǘF?Ð$zl„”Þ!]œÓwÓŸèL»a;ƒPîTî«ß|FÑå5ÍÆ÷Ôùí/Œˆ#bSï€Æ*ù;!E4Ü? £ó+ú¸nŸ8>¾ß;›^'>½Ìë‹xŸ#¹ß"¾÷6®�´æ ÒuÛ«šb"ÐòR€ÅËb¡±Ëâ¥úßlò”F|>·rv݉¯÷) îûiZ‘±Ñ¥4¬z�ÚØu($¾qnƒÝŒn¶Ü´w6n× �v•VôšºÐÁ[…4B›Qé]FŸy)+ô4:›Ñ6ý!O¯h¾$àÈ=ÄsG–Å@ÚtÖƒÖxÀ.÷ЮéwÔõ¢ëÙ33˜VƒÙÉÕŽÀÃOî¿ôÎ/#:àB;7ñ9‚Î’ùºg(N×m¯jЉ@Š¥<Ü@¼dñd•X¸V¼TÜ\P4¼Gƒ£tõqÝò„E|ƒñ«EÙrÊÒjñRlÙ€Ö\@]gJ|!ãÜÅ£){éH]ÊÇtÝõŽ.Ʀ.ÕçíÒé%ÁeøÌž½cã­+ïy‡TN,´?§“ߟÏñ$LZ»Ï8ñ¥ èœÔs:Ö¢ý]z4þÒi÷¥žôÓ°æ�È�"�`WiE¯I:]¥ðÀÙ'mM}âØG;°îQÿðŒ®æ2Ð^!¨ÌßPt :gîÀU‹2ö9¿$¸ØÎYHãÓ©ŠË\»ÄÚø|/x‘ÈHçx†¢tÝöª¦¨-ÇB_,†/{¤Š…9ÄKzGÓÑ]sýõŒÎô@fŸ'—¦lxøñQiQ–ÖŠ—K¶ç�ÚAè:Sâ ç6(<Mk÷mýØžÐù$²Þªž9û‰¦ßÓÅ™×îÇ¢J–ø,b“¼ã¿]åšfÑ!í¾¦ó+ñ¾õ…&a_º€®Ë.óÖu¡òn|KϽî�È"�`WiE¯é׿þµ®¤»JYhI ‰IgÏï¸-wä’÷ÏÍ{ƒP½×Έ†ƒ¾No<P×çR:¤+XŸ?»æ¢c—2Îó ÑÏ©ÈG1[^ÎÃd¾ç/óˆ…Z`±×,‰— »1y½OÃñw4Mõ^cÖÅ·>=Ëe%Ç5�´„Ðu¦Ä2ÎmPt0 ÇKíþmŒžÑìæÏ¶WuÚñ¹ª?SÚýuⳈ4RWIÝßö³ÚóçgšÑ@Õµ¦¾æ$ñãóôxâF<‰$>W$J´óË÷\z�V��°«´¢×TV$i:åžÏ@òlßseä˜í¨ù³mñß_Óäü¥ê,Ê`Ût¬Þɾ+|ÏèzÎV8ê Ft2±ÂKÜ9¼K£é;> Ýã o ·#—ŒïMgªkçv>ß]Z7vþý ?ÿ1±dçìâ'úñê}Žg(çK—m¯j Ùò’âwà׋—K÷X ù7+ÄË%f ëâË‘“ë�h ¡ëL‰/dœÛ Ø`4­ÞòŽI*K²ý~ÀÒ=Òk×›VΫºKD©»ôûïQø˜N3ÛÚõñ¥ <® ãß#Ç3�°ˆ@�€]¥½&ˆ@«0KY´»6ïgâvÌlgoifÌ2{Ú}Ûz<ÈÀS ÎÿDºcµOÃè–%žE‡ûVÿ"l4sº¹8¶_ãsC§‰EB¼áïºøÌs]^˜gè#šÝðCÉÀ™¯·ÎµÏPyV"¶¼èðOS#ÿÅvèm~­x©® íìw¦x"”mÎÍyÞ#ú>ÝÈlüø¦\,oÈL3h9û‰~üÑYâ–y€ºÎ”øBƹ F}áØ=¦ëKßk2ÇðTñ™÷Úù–FÙ}xÄËÈü`IÐ^ÅÚø|AGú�+Dÿ\Ï�@6��»J+zMêæšfg_Ñð0¢‹Ù9Êf½Ü)ìxgK?c‡m¯j~õ«_å|_²\O DŒL bÔŸyÄËubáZñR!‚¤>ÏËÁ&ñ g™k»Ùêºø²ÎË@Çœ7Ϻk�hRÎB—ë€qnƒ"ƒÑe}îÕ—Ù^”'/èyo[’Øsòäyj]$é¸Õ?¢©>Ï_X<M÷r›4=N#‹@—tuþµ™Tê ):¡EùÄsÿøŠ®þ:(D �À®ÒŠ^D šÑE5(u×ù[7ñ\3€-†ó¥Ë¶W5Íz_»+^P¡ë�‰/dœÛ ÿ`4E@Åe+úx‚z,4»ž³kÅçE<‹wì{ÖŠ(ÎçøÚ1M\=Á:Ý{®ËŸÌ38¢},ÅÏ ”"�`WiE¯ "PݰKxd>ù®ÒwWzLty^F½¯/¨‹Ðu€ÄטzgCš5ÓÍì†_RtqAÓÓû¥1~ÏØotˆ@�€]¥½&ˆ@› Âͧ4šnº#ŽƒÞ\wHý½M?ÚcE¸±ŸÞDte-qsA‘t4{4¾¨˜n:½Ýµ½ªiÖûÚ]ñ€º],Êv»ëé(Šô34c0j—fɦÒ»é²ì¿@€�ØUZÑk‚´§4ÚãŽq¿èãtD{*·6>ÒUô@?ã­LHöàæ{ÝÙ¼=šª+ëE§¹Ã¶W5Í{_‹¡ú~OhØßßð~¼D?£ü€¢« ën  @^B×_È8·A³D ž÷™ÒÉûô‰ßïºå^ë™_Ó±ªÛö6jÛ­wÒàDoí1U¿F‡‹M¬Ç¯6þ(Ø �v•Vôš mÈUDƒŠD XÈÙÔHuŦ£þ ÈÞŸE Ë×jü™J7j¾^Lç·»¶W5AÞ×õ„åDT,†–¾Ÿ.“|}–ÔL1€¼„®3%¾qnƒ0"ÐÏ4yøMÎ6ܶÙ*M›‰6>eï÷–¢Ážº~/[ÒK€Í×ÅôçåooÚ_»‚ô¿ùå{��vƒVôš ­Ã›ý’¯éç'4톸wÕÀõ'Û‘2±÷ ñš¸ë]ÃbŒ+-:sf0û/‹/y$6eT÷‹¿ðñ) îß^!©á/wÚÔo{ƒ#:›ýbâÓqT%dÇÄß]Û«ší¿/³h¡AD¥b¨¢äýŒW]–ÔL1€¼„®3%¾qnƒí‹@vãåB9Fx©FbJÞO‹ð+D ]7³ôGÕ'zHƒÑ9<ÀJº>¾ÈD¾¶zÑe+WwÊ×¹î7Â/� ­¨ù ­Âzèµûïéæâx±ÔDwˆìƸÍ×BtçË~9ÄtÄqç½x9¤\ãþîÝE£oâ½´x³g—­è†eO¦ö#ÉC–³Ø']b7#zÌË`äs³ºÃ'"T=˜f;Rä}ñrƒh4 ÛÃÇôT/Rv'öùUü¹ß…°é~‰F…%[2v$_�‹¿ “*†þlì™ï“°}#î¬L›#ÅË$õìôßgˆ¡ü8/èHïMt›î>UϽ¬‰b(�y1¶®Î”øBƹ Šˆ@+ë'wòEÝÏÔƒÒ7w•Rÿ$–¡ÊWĬhãÇ£ë@¾×IWIÞ?0Ñàöç4~j'§âOÈ;"PìU©‚ªË/ã:’¿ø"˜Ûôîè~o…d7þçôÎfN:«òf]"P[E …|û”°­¨ù ­Âxå¤vpœÁjòwÉÙ8=•ÙÁÌkÄCáê÷:®¡lG+ƒ'ô×ã{ÎW˜¬÷PФ½û¦“hÀÜÑü.¢!=ˆÞ¨êCžä#ÿûr¼É´€ym>q¬í?w|ß~Õkn/·é@ÛŠ™d½`Ÿ'—4¿yEcÙ;BÛ´²©%aÓ~VyÉöÿiEÚÜß]Ò,úŠŽ8>u8K ëŽÊ»?…|Ò8Mj® @^ò×Õ ñ…ŒsäVÕªáÉÙÐY׃·í@Ïõæµ·ŠáYuÕ¶ë:×Šíº­6õmf<q_aQ/ÇÞÅ·L]¬'ƒ–~wNïf§4:š¯e-Þô“u¤þ¼½©£{ƒcº¸ùh?!Ÿ!±ˆuxH£ÇCõ©/ù]í;�IvVêºÏw«ø×^ç—4ùêTÕ/öo�v”VÔ|Va:„©•àVD ^Ö%5FŽûJ¼í¨Æ¢uÝ\ì@<>n¿@"ƒöš+iÝÑF!7ÅÞW†~`ÑÄÝxÙ´'¯qIرË:›–k´Ø²<¨I¤ÿÐ÷Û£~ÿ®ã‚œ%†ªÁ—öˆ[”}¯¨Éb(�y)V”Ç-om¦Ør°¬úÉÔ•ný¨Å]ÿ|HÖw.‰ºÏ¥D_aE½Úë÷©ïöYì`ÎÍK-”_¾RmÁ'‹zVß+EÒ"Ò}Ç;ûÿÛZD?¿8¡Zìé�¶D ¶"}®bKÁŒWö3Ag°«´¢æëz%-žÍŠÐz@ð¡ë—=ÿÙ›©3"Œ;ÖÿgEüк€ïéâ"ë+Öè½J^ÒH €%>3`uö"R×=^Ð[']f6Ð<§ÛAE ø+HÎþFâ’~óŠŽÇ/Æ€”˛ݣØûÊ`è¥YnÃn¹D 4·à­ˆ@fYמž¡æø²ÄP{m,úHyõE f‹¡�ä%t)ñ…ŒsT#™úÍÔ•®¯r‰@iƒ©uõàfõª^Ö%^“Œ¾WJü¾è£Å¢eÈôuuªé“(›(�2Ø=(e/YVÅÇt]ñÎ.½—ó²$Ó/£¼(-U]«ÊÚxô©ºÇ=ÏÞ›Ó73šŒÙ3oQG/âN {@?§“‘]þßûŒ¢Ë¬2ëÄ'ûŒz}.ù!/û4þRÕ =+ø¨k'_,Ò_·æ�è0­¨ù ­!±Š4ò^$ïÎUçÉVvª2 ¤Ògæ½ÑLõ·ªôžE_ÐmÞäõYæ5‰0S¤:|ziØ'ì±ñKb‚x=¿›.ul4T÷=‹÷I‰±.ëæþû4<>§«kgw€ÀÈ3ƒ|z_‰½©¬8¢æ_Ԁ⮶ÍÅ’eºó!ƒ’èõ©²%×”ô�ÁMXŒ|Iÿœ)†ºÂÍ{§ƒ :�?f¤mnÜš©t~Ç—.†¾¤k7]v9š~O‰ÁX³ÅP�òºÎ”øBƹ ‰@™u§,™’I!³´kÏ­ïT½sþú&9v`‹&êÊçßÑó~YºÂÍüêŒõ~k<àúQÅ©ê2©ßtý—lö†gtÉ锸¬÷N¼›Äýg']v9šÎk©Ï ¦N–O»{Ã9ûÉ?Q÷s �vÔHD)ËŒõÆë Oè|ÑX÷¿U¹=û‰¦ßÓÅO^‰ Âˆ¨b–êǽz'Ÿ±IÊ¥üí ,¦Ÿ³¯Ë½”o_hñéûÙô.âSeë!½ü5îk9ñ-=÷ºg� Û´¢æëB%ý¯ÿú¯º“—L§æV깿ú«¿²w�u y°-ó@%-ÈûJ;Ça™96¿ß£{ƒ{v xðÀ›‹ÈÂ`t¡®`ÄCÆñ|‹Q º/F®6y`óAfŒù~ÏNèÑmÞPtJ“¬´%Âz}©ÎñÒ°;ê~/èmššH×]úrô—Ftõ…Í‹¡�äEÊG($¾qnnïù’õdkêÎŽ€,“Bvâ%^fšâ]¸Ø¼ž¯ã:÷o²ëAŽçƒ]vÅqžPôèS=Éózòhñ»{Äõ¯öhðô©®›yiØ',L½õã7uþ"]*ž/ÑP×Ñ3ÛîGø™ŸÐôêgç=¸m� vQO9×c0RõD­_¥2_pâ{Ø¥ÍõŽH$"."ÀÄ÷˜ÁZ{þ¨²zv¤úHéuãÇgîïÄo o=‰$>W$²"<÷Úg� ã´¢æëJ%-ÏQ$pÇÔ‡äHòë_ÿ:a§yÂï~÷;{5� «Hy…[Ç´®Ý4ç ÿøÿhï��¨ŠÝ¬×qÂãÆ;&Žxê-yÝø÷É9×ëÆŠ2ú9ïˆ8±(Äõ ·étÊ_$Lc}|é+èø÷Èñ �tœVÔ|]©¤y†O:tyÃ/¿üb¯ªZ§›Ù3ÉWŸ ù�’¼xñ"a§yl€î#å=nÓ¸tÓœ'p�P=;'¥-KxÍØeŸ±GŒÿ·ó{¹‡ýÜ|rÕºš~K£áÀz㉗‘ù/Ú¬dm|¾ #_auE)﹞€nÓŠš¯K•´<Kž�Ï ³Œv%‡T;E¼`ËU^  /RæCáÖ3m¡¨7Ðú%b�€MØ5h!¾|OÓ—Z”I.ƒò—~-þ~<yAÏyIº»ÔëÝe¼÷§ÞOèùt%BRo@£“çËû€*$ü?þ"ªº)Í&§éÞ@®`ãÇ7ý#-öbèr±ü¾7¤èüM¯>$ŸûÇWtõÏëžÁÆ @‡iEÍ×¥Jºˆ7<'RÈúDì–¼�ËñªÔ–UäáoTº«„CÈ‹”ùP¸õL[(â ÄýP!73:ã/Å_b»Ìn‰@võ¼‹MØÅ‹ÆŠ>"¸Ä1Ö«F>PÁ‡bO³ñú¥þª0/é’ýÇñ,ê2_.¯1M2÷<”ß®O?×åOæœ}c(~îuÏ�@÷iEÍ×µJZžgU(æ9áni*4£b'7Ê•Êo~5¥Hu‚n?:¡gúóðªâ;|F³×ÇV=·_(š_ÑôxHýûhl?#ß³ŸÄ^º‡êP]ºKJå!L¥ëñúêøG5x_¤‹ÓtòÕ·ú+"‰)ÝMp¯ŒéO˦|"v[è´¨�ÒÉã T­i¸Í×jv˜Àb(�y‘r ·®iy½ªõú™&¿q¾J¸kØ/¤ñ»…»%…Àz*¿¤è₦§'öKc\Ÿa¿�šD+j¾®UÒy¼ò{NX·K½Û{º¹`!çEWò-»Ù/õÆtòÈ~ñCŸ»±›¡Ý6Ÿ]´³�{£—ôV:Kv·}óùÅ=Úÿ ËWCâøy¸¾ý¤UØy&á2¢žQP ƒJÛíÁÁž Ópº|m¿4’rýÜÌRñI> ¨)äñʲåXH>¦§º“УþèÜÎ¥ ˜ÿÛ™9Ra©Ïù4ðBôÌCY\œF#Üþ‚¢göóð\&fSû•.[&ôÚö'ê¾­Øê ¥‰{¨²wù6-³_k„Ou¿Ç'é˜?{숞‰Ù³ÅP�ò¢Ë¦ ¡øBÆYy¼¸ïSv¶\>ݾ³Ø¯«A ˆ@Uc—fÉØCc7]–ýw�� 5_+iy¦´PÌsÂth–=#Œxâ×¢®„ÿA/'‘s§#ÚãÁëÿe–š˜s~gÉýÛýBÖ'žEÝsö‚Fý=½ó4‘ϺZ‘§?¤qd× g]ùŠÆûŸØÍÞXÖ8VyebœÏëεqI¶”t“¿*áÙ‹¶!ûéx}Ù3'ë^oÎÙî9æšò¹P-8þË"=o#èßݦƒè Íç—4aï·ý1½ŽïaÏÙÎÎ^B´äٯٲðù‘g¥?³ëðÙÝùަ¿d\ÿ®V1€¼HÙ…Ä2ΪXç ôw÷wö—IŠ è2A$÷–öÞáæ‚"™±w–~$<tãã,ŒG4|J¢:ÔÂ;×£¯éµê^Ãçt<ü”î¾¶¿sÅu÷êxô÷NÚK3ÒÄòT=ñìîÒçxïSÜW×A ˆ@Õ#õS<a§Ëâªå^�€:hEÍ×ÅJz•7P±ýSÌ`zy‡ý”ãWj0[J²k‡ÓD ¾w¼3¿oøöTuöîPÿðÌ.Uc¯çt ÐÿöÛôë}ÑGô!5‰UÞ@«—2$mHÛ¡ò ˜.‹ëíͪ{©{»É5 [³Ëì¹dqÿ~Ÿ¼G¼A¡ûøž?- Ÿ\´˜³OÃqd;H×ÿáûZÅP�ò"v ·¬´UÞ@,®§³©€ž¬Ó’p½ó‰mŸíþÜÎkÏà»FX×Bµ:ÎÞ¿o^¨ú‡Ó©w|ÍGû9hë!©Óp«O£ék]_sZMT;aÉ{4~ýƒ½‡œSig!~ÏzYê¯õ°çñ+-Œ'ÅòwêYüc7×_ÐG]ç»Ç{€"P‘1EŽcÈ`\_r_ëécº}'u~r2Rc£a€ŽÓŠš¯«•´<—~ûÛßÚ³y±ËÁ¬7ƒÖW®_RôüÏñ�ÓíÀí±(d—|‰@d´²V× ÌÍ9ÛÙL,»c½!dÙ˜\ëå`ª³/ÁQ1>ÿŽž_D4´ÂîꨊcøÈtRõ}öitþ*ýúë?;®¥¶³«ßw0ͼç6‘|«Ióbû^M–”_ÀtÑ×ëßèR`Yu¯ÍE 3ÈIÜòãã ŸÚÎq'„Ëê úCÚõ5‹¡�äEÊ(Ü:§dy±¸žÍ&ºWß¹èúe¹M]´Ùr€Ûk+F뉹ƛ0rÏùu—ûwâÒ—ñÞÅà4[ËÓô¬ëŸÐ_«w²¨S½´‚"Pû0ý/.ßëú@fRM—}ñàNôí;D °{´¢æëj%æ ´Ñ&‰=D\èkgÃh9~m:@úØÝ¨£ûÖÞF_ʹ[ª#9¡—üÛþ}ˆ·ÞtÚv¢ì=¤N¸sçŒ÷2¹zFÇDZ»¸Ùßä->>¦Ù”Úwùv¯OÜWýöËG4¼= Ñ™,-Û.ò.ÀjÒ¼ÖÚrBH´xÝ@Ër§3üü@¯OŸÙ¯WX´0bg¦õñŸéyô‚.3ïe;�Ò)ЃùLªì9#%—ƒ™Ùk{x $kß/ihQvº,|êÙì/lºdðö‚Þ¤^ÿºV1€¼Hù…Ä2Î*IóÊö6Ð׉@Ëž¸ËÂ:ÇÛ/'éú—~ù"P²Î]"!–Û ¯Ä±7ªîM»Þ}¬·%D  €´ìM7<­·üèºc”k²ÌÖ;ÀÒŠš¯Ë•´<þ³ÀŒ™ä Xë ´Þ–“BbRŒäAJš€É{+²Ä¢Ž‹ä8{a,¾0—~/#ìØßÞÐÀ.M`aåËÑ0‘ž—/ù·}¨µÄ=¤œ¤Š²ÿ"|ªôžŽi|òФmé‹zîõ®HªŽCÈ‹)CáêL‰/dœUã{­öRl$ /¼Ï_?£ÓÄWz¬0{(ª+Ù÷òš=ý´°>7û í‘ÅÌÆ‹pdësù¬´ ÙsZò–ƒ‰w±¾ÇBÈÖ˹z2ÙÄGXÈÿ.–Ärþp…lJR¯Aooi½4̾g×c ì& "5u òˆ@y~ì0­¨ùº\I»Þ@ym¯c·ƒHÞ€õ¸Þ@ͳår±�ֺΔøBÆY5®7Ðz/ MtYÔ±Ø[rAº'./a]|q1ª­°c~{—ƒÅ>f{_ŽèKGP½œhËþà¾I“x9&î!ukšÿKŠXžvŒÿŒ‰�WXWÇFC•æÑ³ø½€Ýe'E Ä>9\G<¡)‹¿‰2ÉâÉÚãÐü­Ê²Ý¶ÁümiWÕ9gGN¹Òñ”=™Ý%ðŸÑP×/|ßÿµØÓgüýbCzg™|²>JžÓ¬xDر×êÀi½LÙK(MÊz�ºE+j¾M+éd&Ô/“vn›AH;·í‚quÀ¬÷jF’}³��Y„®3%¾¶×Óâ ´Ö ¨møËÁ�h»'ñ×yïÛ/ô±ØÂ{}öâÍÙcOí9÷ŠÎGw©78¢3-²2f)êÂÈìϵo¿_ŸØ@^Wàq¼ñīړåøÞR}½¬ËóÜÛÀhá¹í^ç‹@+žçÒ¡�è�­¨ù ­BÚ¹m!íܶCBÆU÷½ ,B%莄½gÚ~�€˜JË^$¾qnöZïÔB´$ƒ;�šÅΉ@VPqëMܽ´ì‡^øx,Åø"PÚM9$—ƒúËÇŒ ãˆ1öwÉ%š×ÖsǤ¥¬Ä,Å»$­y�:D+j>ˆ@ëƒvn›AH;·í‚q•Á}/‹��Kè²W¶¼»×#,B5Ø£¾çbï�šÂ®‰@Æãf½Wsì­ã/ÃòE ½?Ù^¶È»¡d–ƒÝ¡þð1¾Œè‘/mKZ÷<�tˆVÔ|eE ŸU÷Ê:·.~7.÷ÿ>Uü¸ü¿…¬ûdgÖsÏû Y÷È:ά;'!!ã*ƒû^�–Ðe¯lyw¯GX�vóÒˆýÒ©=D¼jöÓb,þúWÿSM¾WÿöèVÿˆ¦ñþY¾'ù{Écèæ4u÷+"Ùïã{¦y mÍhÍó�Ð!ZQóAÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiò5 _·éµ�´d©—lÐÎÇn^Ññøi‰Cý<¸g¿¼Ç9vÏ Ù#GD ýÇ4=L#õ;óÅV÷«|×tqü„žóò²¼"]¦Öã/ZȈOïãÍÞõ9óko¡tÒ~câuÙý‡bï(ùmÆó�Ð!ZQóAÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiò5 _·éµ�´˜¬¯ƒ‰ÀÃÇõþ‡î—嘈$îW3¾¦%\o… #ÄÈñ=<}êýî[úÛÉ‹¯ ¾|A'ŽpõÁ¿~ÉH¼{ä7*¨´¿|é_÷:ù|±7¾vƒVÔ|eE ¡Îx™´sÛ BÚ¹m‡„Œ« eÒYôºPñ0›^#�–Ðe¯ly/{mQš| Ã×mz-�mc'E ��P´¢æƒ'P6~\þßBÖ}²Ž3ëιçý¿…¬{dgÖ“‚q•¡L:‹^*fÓk$��ºì•-ïe¯-J“¯aøºM¯ m@�ì*­¨ù eãÇåÿ-dÝ'ë8³îœ{Þÿ[ȺGÖqfÝ9 !Wʤ³èu¡âa6½F� ,¡Ë^Ùò^öÚ¢4ù†¯ÛôZ�ÚF"”1„ö�ºD+,"P6~\þßBÖ}²Ž3ëιçý¿…¬{dgÖ“‚q•¡L:‹^*fÓk$��ºì•-ïe¯-J“¯aøºM¯ m@B(�è­°hˆ@Ùøqù Y÷É:ά;çž÷ÿ²î‘uœYwNBBÆU†2é,z]¨x˜M¯‘��Kè²W¶¼—½¶(M¾†áë6½€¶¡H� K´Â¢!eãÇåÿ-dÝ'ë8³îœ{Þÿ[ȺGÖqfÝ9 !Wʤ³èu¡âa6½F� ,¡Ë^Ùò^öÚ¢4ù†¯ÛôZ�ÚÆ¯~õ«àöŽ2Ö>g ‹´Â¢!eãÇåÿ-dÝ'ë8³îœ{Þÿ[ȺGÖqfÝ9 !Wʤ³èu¡âa6½F� ,¡Ë^Ùò^öÚ¢4ù†¯ÛôZ�ÚFöŽ2Ö>g ‹´Â¢ËŠ@!Cñ2iç¶„´sÛ!Wʤ³èu¡âa6½F� ,¡Ë^Ùò^öÚ¢4ù†¯ÛôZ�ÚFöŽ2Ö>g ‹´Â¢á ”—ÿ·uŸ¬ã̺sîyÿo!ëYÇ™uç$„ d\epß Â"��ºì•-ïe¯-J“¯aøºM¯ mÔaï(cíyºH+,"P6~\þßBÖ}²Ž3ëιçý¿…¬{dgÖ“‚q•¡L:‹^*fÓk$��ºì•-ïîõ‹�À.P‡½£Œµäè"­°hˆ@Ùøqù Y÷É:ά;çž÷ÿ²î‘uœYwNBBÆU†2é,z]¨x˜M¯‘��Kè²W¶¼—½¶(M¿¦L� mÔa»(/íyºH+,"P6~\þßBÖ}²Ž3ëιçý¿…¬{dgÖ“‚q•¡L:‹^*fÓk$��ºì•-ïe¯-JÓ¯)�huØ.ÊKû@ž.Ò ‹†”—ÿ·uŸ¬ã̺sîyÿo!ëYÇ™uç$„ d\e(“Î¢×…Š‡Ùô �€°„.{eË{Ùk‹Òäk¾®èµ›\@¨ÃvQ^Úò t‘VXtY(d¨3^&íÜ6ƒvnÛ!!ã*C™t½.T<̦×H��„%tÙ+[ÞË^[”&_ÃðuE¯Ýä�š@¶‹òÒ>g ‹´Â¢á ”—ÿ·uŸ¬ã̺sîyÿo!ëYÇ™uç$„ d\e(“Î¢×…Š‡Ùô �€°„.{eË{Ùk‹Òäk¾®èµ›\@¨ÃvQ^Úò t‘VX4D lü¸ü¿…¬ûdgÖsÏû Y÷È:ά;'!!ã*C™t½.T<̦×H��„%tÙ+[ÞË^[”&_ÃðuE¯Ýä�š@¶‹òÒ>g ‹´Â¢!eãÇåÿ-dÝ'ë8³îœ{Þÿ[ȺGÖqfÝ9 !Wʤ³èu¡âa6½F� ,¡Ë^Ùò^öÚ¢4ù†¯+zí&×�Ðê°]”—ö<]¤ (?.ÿo!ë>YÇ™uçÜóþßBÖ=²Ž3ëÎIAȸÊP&E¯ ³é5��a ]öÊ–÷²×¥É×0|]Ñk7¹€&P‡í¢¼´äè"­°hˆ@Ùøqù Y÷É:ά;çž÷ÿ²î‘uœYwNBBÆU†2é,z]¨x˜M¯‘��Kè²W¶¼—½¶(M¾†áëŠ^»É5�4:lå¥} Ï@i…ECÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiò5 _WôÚM®  Ôa»(/íyºH+,º¬2Ô/“vn›AH;·í‚q•¡L:‹^*fÓk$��ºì•-ïe¯-J“¯aøº¢×nr �M ÛEyiÈ3ÐEZaÑðÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiú5e�m£ÛEyiÈ3ÐEZaѲñãòÿ²î“uœYwÎ=ïÿ-dÝ#ë8³îœ„„Œ« î{AX�@XB—½²åݽaаÉ5̦×PuØ ì¾} Ï@i…ECÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiò5 _WôZ¹fÓ�@]Ôaƒ°ûö<]¤ (?.ÿo!ë>YÇ™uçÜóþßBÖ=²Ž3ëÎIAȸÊP&E¯ ³é5��a ]öÊ–÷²×¥É×0|]ÑkåšM�uQ‡ ÂîÛò t‘VX4D lü¸ü¿…¬ûdgÖsÏû Y÷È:ά;'!!ã*C™t½.T<̦×H��„%tÙ+[ÞË^[”&_ÃðuE¯ÝäfÓë�¨Š:lvß>g ‹´Â¢EšÍföH>¤Ð† uÆË¤ÛfÒÎm;„ d\e(“Î¢×…Š‡Ùô �€°„.{eË{Ùk‹Òäk¾®èµ›\Ãlz�UQ‡ ÂîÛò t‘VXtYÈgUAÎ:·êÆËý¿OUÇ?.ÿo!ë>YÇ™uçÜóþßBÖ=²Ž3ëÎIAȸÊP&E¯ ³é5��a ]öÊ–÷²×¥É×0|]Ñk7¹†Ùô:�ªbSäñÈ/¿übÿ*ì¾} Ï@i…ECÊÆËÿ[ȺOÖqfÝ9÷¼ÿ·u¬ã̺sB2®2”IgÑëBÅÃlz�@XB—½²å½ìµEiò5 _WôÚM®a6½€ªØÔ£(Ò×ýîw¿+,ÁîÛò t‘VX4D lü¸ü¿…¬ûdgÖsÏû Y÷È:ά;'!!ã*C™t½.T<̦×H��„%tÙ+[ÞË^[”&_ÃðuE¯ÝäfÓë�¨ŠMmPD EÄ Mãõ<]¤ (?.ÿo!ë>YÇ™uçÜóþßBÖ=²Ž3ëÎIAȸÊP&E¯ ³é5��a ]öÊ–÷²×¥é×” EÙô:�ªbSôE ,­«ÈoA{@ž.Ò ‹†”—ÿ·uŸ¬ã̺sîyÿo!ëYÇ™uç$„ d\e(“Î¢×…Š‡Ùô �€°„.{eË{Ùk‹Òäk¾®èµ›\Ãlz�U±© f‰@xÜ’5f‘߀ö€<]¤ (?.ÿo!ë>YÇ™uçÜóþßBÖ=²Ž3ëÎIAȸÊP&E¯ ³é5��a ]öÊ–÷²×¥É×0|]Ñk7¹†Ùô:�ªbS\'IHƒähÈ3ÐEZaÑeE ¡Îx™´sÛ BÚ¹m‡„Œ« eÒYôºPñ0›^#�–Ðe¯ly/{mQš| Ã×½V®Ù4�Pbƒÿøÿ¨Ç«Â‹/´øÃAÆ%yÃ_üÅ_èëÝ8A{@ž.Ò ‹†'P6~\þßBÖ}²Ž3ëιçý¿…¬{dgÖ“‚q•¡L:‹^*fÓk$��ºì•-ïe¯-J“¯aøº¢×nr ³éu�T…Ø`ˆðë_ÿZcäoÐg ‹´Â¢!eãÇåÿ-dÝ'ë8³îœ{Þÿ[ȺGÖqfÝ9 !WÜ÷‚°�€°„.{eË{Ùk‹Òäk¾®èµ›\Ãlz�UÁ9Ñoû[=ÖpÃïÿûØóÇ2.É~õ«_ék9Úò t‘VX´T¶–ñãòÿ²î“uœYwÎ=ïÿ-dÝ#ë8³îœ„„Œ« eÒYôºPñ0›^#�–Ðe¯lyw¯GX„"lr ³éu�Ô ‹:b¿YAÄŸý×µWä<hÈ3ÐEZaѲñãòÿ²î“uœYwÎ=ïÿ-dÝ#ë8³îœ„„Œ« eÒYôºPñ0›^#�–Ðe¯ly/{mQš| Ã×½v“k˜M¯ nÖ‰@ìaôË/¿Ø_'‘߀ö€<]¤ (?.ÿo!ë>YÇ™ÿ{÷óÉ‘6xÜÿ†Î¾öÍÌeO:õÅ 3_ö CóÂ|{Á|ðAÐ`fàe ‚~ æ53ìÐ zyišfÀ B0ÌšAèb<FˆwLcDl=UùH¡PVVÆ|*#óûÀ©¨|êIgFDG†²JÛ^ó_V›ÞcS½Øöš –¹räglœU‘£€-ë¾—Ûßscc9FH\llJŒHvmÓ"P×âÒ}Q®¦¨Š»dYv™W´½6dQm¯ ],XæÊ‘sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5صpHîSúÞ£ÐîëÃ5ÃUÑ¢yh³0Wø³Úô>›êŶ×ü×ßզ÷ØT/¶½¦Å‚e®9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#Rã€]ÓE ˜ÅE»¯× STE‹fh³0Wø³Úô>›êŶ×ü×ßզ÷ØT/¶½¦Å‚e®9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#Rã€]{ýúõª¤ Ýׇk†)ª¢E³´Y˜+üYmzŸMõbÛkþëáÏjÓ{lªÛ^ÓbÁ2WŽœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,mæ V›ÞgS½Øöšÿzø³Úô›êŶ״X°Ì•#ç8cã¬òˆÔ-�lY÷½Üþžkì1»(ÀœÐîëÃ5ÃUÑ¢YÚ,Ìþ¬6½Ï¦z±í5ÿõðgµé=6Õ‹m¯i±`™+GÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´h6 s…?«Mﳩ^l{Í=üYmzMõbÛkZ,XæÊ‘sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-:wȲì2¯h{mÈ¢Ú^ºX°Ì•#ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4Omæ V›ÞgS½Øöšÿzø³Úô›êŶ״X°Ì•#ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@›…¹ÂŸÕ¦÷ÙT/¶½æ¿þ¬6½Ç¦z±í5-,såÈ9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"Ðfa®ðgµé}6Õ‹m¯ù¯‡?«Mﱩ^l{M‹Ë\9üóB¹/�lY÷½ÜþîÇSîKŒ”‘ÔŒv_®¦¨ŠÍ"Ðfa®ðgµé}6Õ‹m¯ù¯‡?«Mﱩ^l{M‹Ë\9rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³´Y˜+üYmzŸMõbÛkþëáÏjÓ{lªÛ^ÓbÁ2WŽœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,mæ V›ÞgS½Øöšÿzø³Úô›êŶ״X°Ì•#ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Ztî"eÙe^ÑöÚEµ½6t±`™+GÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´h¶ÕöÚEµ½6t±`™+GÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´èÔE W-ÎqÆÆYå©1Z�زî{¹ý=76ÖØcvQ€9¡Ýׇk†)ª¢Eó$Ðö2Ǽ¬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"Ðö2Ǽ¬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"Ðö2Ǽ¬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨Š»ÚÔ‘»:ø¶×´ø?‡ÚêĦz±í5-þÏmJÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—J“ò°�°eÝ÷rû»O¹/1RbDjP3Ú}}¸f˜¢*Z4_ ½½Ì1¯ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢Eó$P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ8ëÌ í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´èÜE ËB^›bÅ:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ< ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨Š»dYÈkS¬XçKåŸÊ}`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢y¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^n÷ã)÷%FJŒHjF»¯× STE‹f¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´hÚiÝÇß•ªW~.;Tª^uå‚u¾T9Çg•G¤Æh`˺ïåö÷ÜØXcÙEæ„v_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhѹ‹@–…¼6ÅŠu¾T9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢y¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´hÚiÝÇß•ªW~.;Tª^uå‚u¾T9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢Yj§yt;Tª^ù¹üíP©zÕ•kÖùRåglœU‘£€-ë¾—Ûßscc9FH\llJŒHjF»¯× STE‹f¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-:wȲצX±Î—Ê?7”ûÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢Eó$P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþîÇSîKŒ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬±Çì¢�sB»¯× STE‹f¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´hÚiÝÇß•ªW~.;Tª^uå‚u¾T9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢s, ymŠë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢Eó$P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Ztî"e!¯M±b/•n(÷€-ë¾—Ûßscc9FH\llJŒHjF»¯× STE‹æI všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ýݧܗ)1"5¨í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆjLjæ„v_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½Üþžkì19%VjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨Š»dYÈkS¬XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-z±X¬:O=¤yt;Tª^ù¹üíP©zÕ•kÖùRåglœU‘£€-ë¾—Ûßscc9FH\llJŒHjF»¯× STE‹f¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`/UÎqÆÆYå©1Z�زî{¹ý=76Ö˜c„ÄÅÆ¦ÄˆÔ8 f´ûúpÍ0EU´hÚiÝÇß•ªW~.;Tª^uå‚u¾T9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢Yj§yt;Tª^ù¹üíP©zÕ•kÖùRåglœU‘£€-ë¾—Ûßscc9FH\llJŒHjF»¯× STE‹f¨æÑ}üíP©zåçò·C¥êUW®!XçK•sœ±qVyDjŒ�¶¬û^nÏ5æ!q±±)1"5¨í¾>\3LQ-:wȲצX±Î—Ê?7”ûÀ–ußËíï~<å¾ÄH‰©q@Íh÷õášaŠªhÑ,m/sÌkÁ:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj³.ÀœÐîëÃ5ÃUÑ¢S€\µ ü9Çg•G¤Æh`˺ïåö÷ÜØXcŽ›#R〚ÑîëÃ5ÃUÑ¢Y®Ô2ðçglœU‘£€-ë¾—Ûßscc9FH\llJŒHjF»¯× STE‹æã`ÛËóZ°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@ÛËóZ°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Ztî"PhSGîêàÛ^Óâÿj«›êŶ״ø?·)U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—*ç8cã¬òˆÔ-�lY÷½ÜþžkÌ1BâbcSbDjP3Ú}}¸f˜¢*Z4‹@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ|1ôö2Ǽ¬ó¥Ê9ÎØ8«<"5F �[Ö}/·¿çÆÆsŒ¸ØØ”‘ÔŒv_®¦¨ŠÍ“@í4îão‡JÕ+?—¿*U¯ºr Á:_ªœãŒ³Ê#Rc´�°eÝ÷rû{nl¬1lj‹M‰©q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|©rŽ36Î*HÑÀ–ußËíï¹±±Æ#$.66%F¤Æ5£Ýׇk†)ª¢E³ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó¥Òã¤<,�lY÷½ÜþîÇSîKŒ”‘ÔŒv_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î—J“ò°�°eÝ÷rû»OÙMæ„v_®¦¨ŠÍ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î�5ÛÕm=N§äz•s.Rb%Æ2¨í¾>\3LQ-:wȲצX±Î�5ÛÕm=N§äz•s.Rb%Æ2¨í¾>\3LQ-š'ÚiÝÇß•ªW~.;Tª^uå‚u>�¨Ù®Æhëq:%çÐû«œs‘+1–q@Íh÷õášaŠªhÑ,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑÖãtJΡ÷W9ç"%Vb,〚ÑîëÃ5ÃUÑ¢Yj§yt;Tª^ù¹üíP©zÕ•kÖù� f»£­Ç锜Cï¯rÎEJ¬ÄXÆ5ÓvO©¯�SRE‹f¨æÑ}üíP©zåçò·C¥êUW®!X瀚íjŒ¶§Sr½¿Ê9)±cÔLÛ=¥¾LI-šE všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1ÚzœNÉ9ôþ*ç\¤ÄJŒe��ÈSÅ¿¾,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑÖãtJΡ÷W9ç"%Vb,ã��@ž*þõÍ]²,äµ)V¬ó@Ív5F[Ó)9‡Þ_國”X‰±Œ��yªø×—'ÚiÝÇß•ªW~.;Tª^uå‚u>�¨Ù®Æhëq:%çÐû«œs‘+1–q�� Oÿú²ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó@Ív5F[Ó~^ʺÄJ��yªø×—E všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1ÚzœöóRò ��°UÅ¿¾,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑÖã´Ÿ—².±Rã��@ž*þõe¨æÑ}üíP©zåçò·C¥êUW®!X瀚íjŒ®eœN9Ö¡÷W9ç0%Vbrr�€4Uüë›»dYÈkS¬X瀚íjŒ®eœN9Ö¡÷W9ç0%Vbrr�€4UüëË“@í4îão‡JÕ+?—¿*U¯ºr Á:�ÔlWct-ãtʱ½¿Ê9‡)±““��¤©â__ÚiÝÇß•ªW~.;Tª^uå‚u>�¨Ù®ÆèZÆé”cz•sSb%&''��HSÅ¿¾,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ѵŒÓ)Ç:ôþ*ç¦ÄJLNN��¦Š}Yj§yt;Tª^ù¹üíP©zÕ•kÖù� f»£k§SŽuèýUÎ9L‰•˜œœ�� Mÿú²ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó@Ív5F×2N§ëÐû«œs˜+199�@š*þõÍ]²,äµ)V¬ó@Ív5F×2N§ëÐû«œs˜+199�@š*þõåI všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1º–q:åX‡Þ_åœÃ”X‰ÉÉ ��ÒTñ¯/‹@í4îão‡JÕ+?—¿*U¯ºr Á:�ÔlWct-ãtʱ½¿Ê9‡)±““��¤©â__ÚiÝÇß•ªW~.;Tª^uå‚u>�¨Ù®ÆèZÆiÿx)ë��lUñ¯/‹@í4îão‡JÕ+?—¿*U¯ºr Á:�ÔlWct-ã´¼”u��¶ªø×—E všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1šq�� Ÿ*fM,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑŒÓ���ýT1kÊ]²,äµ)V¬ó@Ív5F3N��ôSŬ‰'ÚiÝÇß•ªW~.;Tª^uå‚u>�¨Ù®ÆhÆi��€~ª˜5±ÔNóè>þv¨T½òsùÛ¡Rõª+׬ó@Ív5F3N��ôSŬ‰E všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1šq�� Ÿ*fM,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑŒÓ���ýT1kb¨æÑ}üíP©zåçò·C¥êUW®!X瀚íjŒfœ��è§ŠY‹@í4îão‡JÕ+?—¿*U¯ºr Á:�ÔlWc4ã4��@?UÌšr, ymŠë|�P³]ÑŒÓ���ýT1kâI všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j¶«1šq�� Ÿ*fM,µÓ<º¿*U¯ü\þv¨T½êÊ5ë|�P³]ÑŒÓ���ýT1kb¨æÑ}üíP©zåçò·C¥êUW®!X瀚íjŒfœ��è§ŠY“.½~ýº©égÓÄpÓd±k¹í5-þÏ¡¶:±©^l{M‹ÿs›RõÊÏåo‡JÕ«®\C°Î�5ÛÕÍ8 ��ÐO³&]’ÿÆØ41Ü4YìšDn{M‹ÿs¨­NlªÛ^ÓâÿܦT½òsùÛ¡Rõª+׬ó@Ív5F3N��ôSŬ)wȲצX±Î�5ÛÕÍ8 ��ÐO³&žj§yt;Tª^ù¹üíP©zÕ•kÖù� f»£§��ú©bÖÄ"P;Í£ûøÛ¡RõÊÏåo‡JÕ«®\C°Î�5jÌ”? ñÑG=*šOJÛë±ó��€©«âî–E všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j6ä˜ùË_þòîýû–Ø¿* ��0uUÜݲÔNóè>þv¨T½òsùÛ¡Rõª+׬ó@͆3å/„êû÷)ò$���ªâî–E všG÷ñ·C¥ê•ŸËß•ªW]¹†`�j6ô˜ó4O��<VÅÝ-‹@í4îão‡JÕ+?—¿*U¯ºr Á:�Ôlè1³ïÓ@<��Ð®Š»ÛÜE ËB^›bÅ:�ÔÌbÌìó4O��´«âî–E íeŽy-X瀚YŒ™Ûžâ) ��€Íª¸»M]réM�`;«1³ëi ž��ØŒE  ƒÞT��¶³37= ÄS@���ÝX:è�`;Ë1³íi ž��è6ª»Ûÿ÷4¡ëS~øá‡æ€²´�¶³3çx ��`»QÝÝþóŸÿt¿øÅ/Lê¶•ßýîwM4Pž¶3�ÀvÖc¦ÿ4O��l7º»[ýèWßÂS@’¶3�ÀvÖc¦> ÄS@���ýŒîî6æi žÂд­�¶ÛŘ)Oñ��@?£¼»íû4“> MÛ�`»!ÆL}OJù��æg”3€>Oñè7,h{�l7Ę©ïI)_��ÀüŒÇ•Ö�� IDATv°íi ž‚mo�€í†3‡Ëãœ�0_£t= ÄS@°¢m�°Ýc&ãpyœS��ækÔ3€MOñ¬h›�l7ĘÉ8\ç�€ùõ  íi ž‚%&Ê�Ðßc&ãpyœS��ækô3€ði ž‚%&Ê�Ðßc&ãpyœS��ækô3�ÿi ù—ijL” ¿!ÆLÆáò8§��ÌW3�}èõë×M `ƒ‰2�ô7ĘÉ8\ç�€ùå @''”òq8o�Ðßc&ãpyœS��æk”3�œPÊÄá¼@CŒ™ŒÃåqN�˜¯QÎ�trB)_‡ó�ý 1f2—Ç9�`¾F9`rRç4 ç �úbÌd.s �À|rÀä¤<ÎiÎ�ô7ĘÉ8\ç�€ùå €ÉIyœÓ4œ7�èoˆ1“q¸<Î)��ó5Ê�““ò8§i8o�Ðßc&ãpyœS��æk”3�&'åqNÓpÞ� ¿!ÆÌ±ŽÃ·'îisl{‡§îº©¯ÁXÏ)��Þ(g�LNÊ㜦á¼@CŒ™ã‡oÝõé‘Û{ç=wxú}SW‡ñžS��0´QÎ�˜œ”Ç9MÃy€þ†3Ç;ÿä.N>XÛîä⧦n»Û«S÷éâÂÝ6?»ÛKwúéWîâ®bxã=§��`h£œ09)sš†ó�ý 1fŽv¾=w'O÷Ü;OOz.à¼uWo~ïöîn¯^»çï¹§'ç÷‹BF{N�ÀàF9`rRç4 ç �úbÌ,þžºx³zß§îðäsw|ðd¹ý¾;>û±ÙI¼uWgŸ»Ãýå¾û»“ã_-÷ñpVß ´,àܺ›‹WîËã·'ï¿÷¡[\¾]V_ºÓ£§MNù¡?¸óÓÝ~óó;{GîôZßåÚ]œ~ÑÓrßg wYx…H��ÌÏ(g�LNÊ㜦á¼@CŒ™ƒŒÃ×§îpoù¾ûGnqq}÷%Ï÷_ðüÖ]­iž¸g‹ïÜÏú%ÐwOý´}е»X¹§¿wo®–Û«ŠÝ¿þ(‡.Fù @7çnqø;xþÚ]ýÜòz!ƒœS��P…QÎ�˜œ”Ç9MÃy€þ†3‡xÏð)žpæörážíÝ?…óø©ŸïÝéá{ÞÍ­»9{îöWOþ|ï.^>w{{nÿ襻Zè÷u, ¹ÝÙñûëœ×îåêi¢§îèô²ÉYÎç��Ôa”3�&'åqNÓpÞ� ¿!ÆÌòï~¡³>Õ£‹<á‚Í[w¹øpùº÷ÐÍ“DžêYëžÛ?üÌ}uvu¿xó詟͋Bë÷©}íήޮ^+­ü9��µå €ÉIyœÓ4œ7�èoˆ1³ø{†_è|û[<{r¿@.ØÜ¼qÇò½@> ¶ùI¢Ð£×{, iˆë��ê0ÊÀX''þoé6MôÆŠ _Î�ô7ĘYú=.È\»ó“g?v¥ß$ 4?^º7Ï×_ò¼wø¥{óêwuë=Itþ7wöêÂ]ëü`ÿ¹;»‘w‘/wþªyÈ[àyùg÷Í7Wwß1´ú‚èo¾õÞsÏí¿q7r7îtñ‡Ažâ:�€:Œr0ÞÉIÛAÖ _Î�ô7ĘYö=ïp>{ùùú{ŽÝÂÿèVóÝ<ï¼ódõÍ—ç²`#ñZ¸‹ÕÏÃ××ßù£‹Ir¬²ï‰;½Ð_iÎûýï¢V_"Ý,òÜ|ëNš¿¶þ8Øi“¯¼!®��¨Ã(g�ãœx¿ýÓïèáöêÔ}º¸¸Ÿ`ÊŸŠýô«æ±rLøÒpÞ� ¿!ÆÌ²ï¹þBçÚžæ-mˆë��ê0ÊÀh''á÷lõÖ]½ù½;Ø»_4º½zíž¼çý…LøÒpÞ� ¿!ÆÌrïyënÎ_,ÿMÖ‚Í×× ��Ôa”3€â“]¼Y½¯<bý¹;^=rý¾;>û±ÙI¼uWgŸ»CùÈýÝÉñ¯–ûx 8«Ç·ý?+–“Ê‹WîËÕŸr]¾ÿêÏþ]V_ºÓ£§MÎæsÿ§»ýæçû/ƒòÝ_4Ç´Ü·ù“´%éq ç �úbÌ,óžÍŸtoÞK>²eý˘1)sN�@F9dr¢_ô¸ä×ÿR‡,�­iž¸g‹ïî¾´ññ_ñ¿èÚ],ŽÜÓÕgú—ÛúÅÁŸ{½Ëñè¯,Ýœ»Åáëï ø¹åõB˜ð¥á¼@CŒ™ŒÃåqN�˜¯QÎ�†˜œ„Oñ„ 4·—‹õD6Oá<~ê§ù-âÝÍ­»9{îöWOþ|ï.^>w{{nÿèeó%‘Þ_Ù´(Ô|¹ä*çõ…{¹zšÈû %1áKÃy€þ†3‡Ëãœ�0_£œ”Ÿœ„_è¬Oõè"O¸`óÖ].>\¾î}tó$Ñ£§zVÇ* 䳿OÁ6=õ³yQhýò1µ¯ùS°¢ü9Î�ô7ĘÉ8\ç�€ùå  øä$üBçÛïÜâÙ“ûšpÁææ;–ïzôQ°ÍO…½ÞcQhHLøÒpÞ� ¿!ÆLÆáò8§��Ì×(g�¥''d®Ýùɳ‡»Òï ’š/Ý›çë/yÞ;üÒ½yõ»ºõž$:ÿ›;{uá®õ)žýçîìFÞE¾Üù«æi oçåŸÝ7ß\Ý}ÇÐê ¢¿ùÖ{Ï=·üÆÝÈqÜ\¸ÓÅyˆ _Î�ô7ĘÉ8\ç�€ùå  ìää~ç³—Ÿ¯¿÷çàØ-ün5ßÍóÎ;OV_Ð|y. 6ò¯…»X-ð<|}ý?º˜$Ç*ûž¸Ó }&HsÞï·µúéf‘çæ[wÒüE°õÇÁN›|å1áKÃy€þ†3‡Ëãœ�0_£œ”œ¬¿ÐyÓÇ¶æ‚ _Î�ô7ĘÉ8\ç�€ùå  ÜääÖÝœ¿pþ:Ͼ4œ7�èoˆ1“q¸<Î)��ó5Ê@™ÉIó'Ý›÷’lÝÿ¹÷ù)sNç‡ó�ý 1f2—Ç9�`¾F9`rRç4 ç �úbÌd.s �À|rÀä¤<ÎiÎ�ô7ĘÉ8\ç�€ùå €ÉIyœÓ4œ7�èoˆ1“q¸<Î)��ó5Ê�““ò8§i8o�Ðßc&ãpyœS��æk”3�&'åqNÓpÞ� ¿!ÆL}OJù��æg”3�&'åqNÓpÞ� ¿!ÆL}OJù��æg”3�&'åqNÓpÞ� ?ÆL��€qch&8§i8o�Ðc&��À¸±4œÓ4œ7�è1��`ÜXš ÎiÎ�ôǘ ��0n,Íç4 ç �úcÌ��7f‚sš†ó�ý1f��Œ‹@3Á9MÃy€þ3��ÆE ™àœ¦á¼@Œ™���ã6êE Jù‚8œ7�è1��`ÜXšYAÎ�ôǘ ��0nÌÔ€¥ÅbÑZô†¦í5)�07?üðCëx(¥kÌ|ýúuó���Ø€¥ßýîww7/}ËG}ÔDÀ¼üò—¿l»Š,��`·X–ä7Ûm7-]åâ⢉€y‘§zÚÆÅMå¿ø…ûç?ÿÙD��`WX1Oñ€¹‹yˆ§€���ÆE  ó4ßm`îú> ÄS@���ãÁ"àéó4üö�Ðïi ž���OŸ§x �Öú< ÄS@���ãÁ"èzˆ§€�à¡®§d<��Àx°ºžâ) �x¨ëi O��0,-Úžâ) �h×ö4O��Œ‹@@‹¶§x �Úµ= ÄS@���ãÃ"°ÿ4O@7ÿi ž��'€ ü§x �ºùOñ��À8±tßfó�ô#ã%O��Œ‹@3£¿¥¥”/�¦§­¯SÊ���Øc63mqJ™`zÚú:¥L��€=fa3Ãä»,nh€i£—Ř ��°[ÌÂf†ÉwYÜÐ�ÓFÿ.‹1��`·˜…Í “ﲸ¡¦þ]c&��Àn1 ›&ßeqCLý»,ÆL��€Ýb63L¾Ë↘6úwYŒ™���»Å,lf˜|—Å 0môï²3��v‹YØÌ0ù.‹`Úèße1f��ì³°™aò]74À´Ñ¿ËbÌ��Ø-fa33žÉ÷­»9{îößyâž-¾[þô½;=|¯9¾=÷ôä|Y7~z>ÇqN”6žþý£;;~ß½³÷¡[\¾]þ̘ ��€xÌÂff<“ïpHªÎÝÉÓ½åñ}àN.~Zí5vÜÐ�Ó6žþ.-1f�� ³°™)>ù¾½t§Ÿ~å.¼_Aß^ºOñ¿•¾>u‡{Ëã{zòàýâ½uW§/ÜÂঈ`Ú†33Æ«RcfË8>ÆL��€Ýb63%'ß·W¯Ýóƒ÷¼!,ofÞüÞì¥üVúvy?säör?Öp{åÞ<?p{Ù IýpCLÛ cfÖxUfÌ|<Ž‹1��`·˜…ÍLÔä{yƒröâÐí/o2ö?ù7w,;XݬÈo®?^Ö7“ù½#wú¿»Ó£§wï¿wøµ{sòAóó{îðô¯îüäÙúfçÍo¯5öZn=ôû-ž¸ƒO>vòúÞ3wr~½>ý÷ê½Oݪ¶©ÓŸo¯^º£}ùh„æü^ö’WÜÍÅ+÷åñòfk•S?Nqí.Gëÿ½wüåîÅéߢn„Ö¹ÖÀôÄôïÛ«7îÅ¡Œƒï»ON~ëžÞ-Ð<3_žÿï‡ãÕËÿÓ|´kýúéåŸÝÉjqæ/î«ÅžuìÝø×9fêQóÞ«±Pëôç–q|5‹åØxú…;>x²Îùlá.奛s·Xýÿ-ëŽÝ—Ë1óô¯q þ«\M��€=fa3Ó{ò-EÕ‚Éò†`µ ãýÆY¿‹Â»q¸½8YÞôø7)?­ãöÝâåq³Ø²ÞÿѾºÈ³ÿÜÝüÜ|_PË{=º¡ñ î#Ö =O~ïÞ\éÿGóúƒE¤´dpCL[ßþ­‹Ð«“Ÿ[¾«çјÙ2^5ûì~á^Ê÷ÿ,ó®Ç§–}·™òé¢Q×1-­z>pÏ_»+ýÿX½þóÃE¤ÄéùìsN��P³°™é7ù~ë..'ûú¥Ízró°qÁçÁÌú¦cïàÐ}rræ®—1ï7 .ë÷×}ÃßPß¿ÿýw]„70Í—¤vÞÐ4_>½ZÈúÞ]¼|îööÜþÑKw%/ëM”ÿÄQ$nh€iëÕ¿o¿s‹gO–cIó”¡ŽEÞǼ™m 0«1é‰;8üÄœ]-ÇÔ_7 .úþ÷cÛÖ1SÇ7ýùæ;–'ºŽ©WW Y×îåêéɧîèôr™ñþ颽ƒîü¦y“HŒ™���»Å,lfúÝÐ7'zrwó°ù7Øm74ÿãð ÷Ãðhßfçîg]$òžò nh/Ý×=ºÉZý?ï¹ýÃÏÜWË«f÷¥[wsþ¢ù…÷w"èùÜzNT©OÿÇžÛË…{¶×ý”âã˜f‘eïwøåŸÝͪníñ¾ÛÆÌðIIÍßï˜ÖÿÏOÝáÉ×îìʯ×ë•cшEÒó¹íœ��`ÌÂf¦Ïäûá ‡þ)wïæ¡eÁgã ̓›ŽµGû6 <w?ëo¬ïf‚÷º¹p§'ëï*êsCsLm÷kÇ 0mÛûw8öôyJññxÕúq­•–}·Ž™þ{ý—»¹8u'«ïò‰=¦6º´m¿vŒ™���»Å,lf¶O¾½Gþ—7?®þrŒ|9èr¿øO÷êìÊý|·¸òwþÍ·îêÖ»yxùg÷Í7ò´Mø›jõpß³Wçîr•¯¹¡¸ûâQý‚ðnhÎÿ¶ŒYÆé{,^»³‹åmwCóò|y Wo﫽úÎ y'ù²Ó¯ÖO]¿rÇ¿i>¶Š}÷ÑbUÜÐ�Ó¶½ëø$cØeó—1ò]ho–ã“7Ý™ÞwíèxõhaG=ÛÎÜ«‹4ctǘé=9y~ù{uþ§æ=䘾qËñðÑ1Ýã{nÿøÍúI$Yp_üaùÿðÓò-?u¿iÞ.VõØ ��°[ÌÂf¦×äûî·Êîù›¿¹óÕÁSw¸8_ÝÜÝ<¬¾lY~ë¬7OÖ_&ºZoÙpCs÷[rÝ÷­»:[ÜýšõǶNÜ©,ìÜјå1¼x³Œñ~nŽéþFIŽY?òuÿÑ…ð}o¯þê..þ³YàòŽ;’žÏ­ç@•¶÷o}Z²å¯zÉX´ä:Þ„cæ£ñJß›…߃ñXöí1fjÌþ¡{!‹Þw?w“¸ùÖܽ¯|ìtµ`´úKbîânËgãèùì>§��� ³°™aò]74À´Ñ¿ËbÌ��Ø-fa3Ãä»,nh€i£—Ř ��°[ÌÂf†ÉwYÜÐ�ÓFÿ.‹1��`·˜…Í “ﲸ¡¦þ]c&��Àn1 ›&ßeqCLý»,ÆL��€Ýb63L¾Ë↘6úwYŒ™���»Å,lf˜|—Å 0môï²3��v‹YØÌ0ù.‹`Úèße1f��ì³°™aò]74À´Ñ¿ËbÌ��Ø-fa3Ãä»,nh€i£—Ř ��°[ÌÂf†ÉwYÜÐ�ÓFÿ.‹1��`·˜…Í “ﲸ¡¦þ]c&��Àn1 ›&ßeqCLý»,ÆL��€Ýb63L¾Ë↘6úwYŒ™���»Å,lf˜|—Å 0môï²3��v‹YØÌ0ù.‹`Úèße1f��ì³°™fòýÖ]}î÷Ÿºã³›¦®œÛ«×îÓã÷æêíƒíG~>sÇïî9†ŸÏŽÝ»ïì¹ýã7îGo;|gnh€i¤ß^¹³‡nÿÝcwösSWÌr<~sâŽ?}í®nýíæeÏjœ+r 7îìxyžÞ_Ž¿÷¶l^¿Ç˜ ��°[ÌÂffÉ÷jñEÞ·ÌÌC?¹‹“c·¸’»[|ïNóoÜD5nÏÝÉÑWî*ÜöpCLÛý{½È¼|ß!:Ç­aÇÌÛ‹ÏÝÑâï¶}Œ™���»Å,lf›|_-ÜÁ ‹@oÝÕéÇnÿwÝÁâ¯Þöÿs7gÏúMúÒí•{óés÷âüúáv€`Ú†éß?/‡Ì_´téNž.ù×nqùÝýöÕÛAÇÌõSš_¸ó›ÛÛ!ÆL��€Ýb63Û'ßúX¿ì·^Ô¹û­õÁÂ]Ý|ëNž4¯?q'ß®?"u·ô·8xwõú»Çgî§à7Þrsð\ã÷ÜââúþýÛŠä\—ïÖÝœ¿p{ºŸÜàüWó‘´WO Ý^¹Åñ{òÉ—î«› =·ôGwñ—&nï™;iuÚŽ©/ÿXLÏÖþ}÷$䲬Æ9C›Åj¬ºw¼E ¿ËØ)¯Ëøyu7þÊø)k5ǧKoŒ‹ä|üôMë˜yù÷õGÒVc¬|¤wáŽ~å>Y|éŽö÷–û<uG§q9yæö–1{/šEùˆÙï›÷ZŽ«‡ wѲس‰¼���°Ç,lfúM¾åcWÜÝ„¬>Bðü wq{ë®OÜÞêFg½Ï;OO–õË]ü'ä#O÷šxïfçíwnñl¿Y8úqy#óþ}|´à7éw7b² $ïÝÜ$íìN¯nÜåâÃåL³håßmÞ1éùÜ~NÔ¨Wÿ^)Þw¢]¿rÏ_œ»[;ßkÆÙç]÷ôDêŽ_·'îéÝ“”_-¤—Ÿz˜óÁâþÝø)‹å/—?KÞ'w‹VþñÝ^.ܳw›Å¬›7îx_ÿŸúaÌ��Ø-fa3Ówò½šôëÍÆÝ Íš<eóÕɡۗ÷ÒE˜ónb–?Ý}ùè§îðî7ÑZ~í¾Xü6òI ,-­oTdH*ZŽ¡íµëöcºÿÞ¡n~€éé׿eQü4‹!²Xþ™{qñSóš<eóµ;9”'õ Ÿ`üz0~®Ÿ$Ú<>ýwwpð^P§eÓ“@"3›…|c[Žáñk×ë_„y7ŽÓùq���°Ç,lfzO¾W¿µþoîðôÒ].ž774·ëï”Ø;pÇ‹?¹³/7ÝÄlXZ}ìá½å{~¿¬Íõxh} ‘‹@«˜ôc↘¶¾ý{µ½wäNü›[üæ5O묟ÞÙ;8v‹³?¹/ïÆ¤ž‹@™ãÓCá˜Ùüµôã:Fþ?¯“GbÌ��Ø1fa3Óò½þ-ñÞ¿~â>ùõ‹æ†f}c°÷lá.o›&47mgØ;<u×w_RºÌ»ÿ¡ûèàÉò†è÷ÍŸx¿uׯ¾v¯’n&îohÞüåî«‹ŸšcøÀÈ‚Uó‘¯Õ1ÈÞ«E æµÇ·þØCê1éùìwNÔ¦wÿnÎÿõøc÷kýxÔêcVOܳÅwîvõÑ)ý˜ló΃E õbÏíÕËæ;yöÜÓÿùµûŒñé¡pÌüñÁGz×ã§.85‹@ú4¨|òq°½'îà¹þÙùïݫşVãlŒ™���»Å,lfb&ßëÉþòFäîûš'ä=öÝgÇnï§îð‹ÏÜ¡~1êêi›ÿj¾ƒGöûØýqñ±{rðܽ¼¸~ø%§»8_Þn¤Ñã[}‡År{ýåªRüK¼ë>8øàþãfïºãßÞ©ªÜ½Í8&})�¦§ÿ~ÛŒ{ºØ,šÅòÕ(êŽeœÙ?r_œüëý˜$OÛ4‹ÑëïäùÒ->ù•;8þãê —‡3ÿàþïüºyÏeùàÀÜáï?ø¸Ù»¿=v¿½{Múð¾zYø2}��€ª0 ›&ßeqCLý»,ÆL��€Ýb63L¾Ë↘6úwYŒ™���»Å,lf˜|—Å 0môï²3��v‹YØÌ0ù.‹`Úèße1f��ì³°™aò]74À´Ñ¿ËbÌ��Ø-fa3Ãä»,nh€i£—Ř ��°[ÌÂf†ÉwYÜÐ�ÓFÿ.‹1��`·˜…Í “ﲸ¡¦þ]c&��Àn1 ›&ßeqCLý»,ÆL��€Ýb63L¾Ë↘6úwYŒ™���»Å,lf˜|—Å 0môï²3��v‹YØÌ0ù.‹`Úèße1f��ì³°™ñ'à”²Àô´õuJ™���{ÌÂf¦m"N)S�LO[_§”)���°Ç,lfÚ&â”2Àô´õuJ™���{ÌÂ������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜������f€E �����€`�����`X�����˜<çþ?Ÿ!)“ðÛ����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8f.png��������������������������������������������0000664�0000000�0000000�00000047510�15030617045�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¦��«��� UÜ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��NÝIDATx^í݈dç}çûùg1!à«Üà r1ÎÁCÀW »(n¸¡¯Á˜U0s±EÒA {nb9—‚¹D`£€b×Ò‰Ûa'®Ü‘[†I-Ã,r¤YЉ~ìJ½.f¤(K§4ºÞ‰¦S‘VLÆíÖLfk¿û|ŸzžSÏ9ýœîúqNÕ©ª÷ Ýuêü®ç<çSÏùQG���¨�‚)���*` ��€J ˜�� ¦���¨‚)���*` ��€J ˜�� ¦���¨‚)���*` ��€J ˜ˆ:rä]i�ÄP;�ˆ"< ,”-�y¨�DPÊ€<Ô�¢( e @j�Q„”…² µ€(ÂÊBÙ‡Ú@áe¡lÈCí� Šð€²P¶�ä¡v�Ex@Y([�òP;�ˆ"< ,”-�y¨�DPÊ€<Ô�¢( e @j�Q„”…² µ€(ÂÊBÙ‡Ú@áe¡lÈCí� Šð€²P¶�ä¡v�Ex@Y([�òP;�ˆ"< ,”-�y¨�DPÊ€<Ô�¢+<¼#íúÝv™³]­Þ–ÝݶÔkûß;rä¨l´þ³tk‘÷´«ÉZýŒ´Îw¤×w³Jù@ºÍã‘ñ"]í”´w£1ú²·}V6jI«wÛõ;D¿'VÃŒ3˜~míÿÖŽÊ‘µ¯H»wË${ÝKÒ:§Ã1í’éò@ µ€¨Å ·d§uRj>¦š ë œ§.¦Âf§%'’ðz\šÝLöÛ’³õõœé ÅÆMìuåbcCŽj@v½Ò|(5ã®7¥›—]CýkÒ:qÌÌë˜l4_“ÝnSîµóÖNÃö›ƒáz-ÙðýGö èò�@ µ€¨Å }ÙmŸrÁôn©·ßqý½ ˜ÆZ/ÃVÕ0ÄímIc­fû×N´d'îòÆõv_’Ö¥ìò¨ ”š°¼ÞÜ6}sS:ÏÚá×[²gúôM0]·ëmºL€¾ÝiÈÑ‘§=ºœ�Cí� jñÂÃèÁÓžÞw½ÂP› qáéúLk¨uи„Òëk®µ36í¬[ÒkEÖFÞ/û(ÃÎÁ@j�Q ÂVË–ô\ï1ZS÷…¸ÛÒk=äÞ N“'òÇíï<#gh)=q¢)/µêƒå:ìT{[šëƒ–Û¤ó|¯+íÖ9iÖ×Ó¡Ûs´!ìå¥vœ3Rw­Á]ªP4�ÄP;�ˆZ¬ðpH«erM¦¾¹ èÀSñ‡Ó踻Òm7¥¾þHô†§~ï¢<RB¶÷Þv¡vÄ–ÖÛiÕyá:œ&tûSüéâ[ÒÛú¦lÔŽÉÆæ‹Òë¿)­£ûÆ-“.+�ÄP;�ˆZ¬ð¶ZÒí ž‡ŠOågƒi8îþnÿ%a(5sIZAG …ÃkI3­ºþ&§Ô% ~¹Ãi÷e¯³)kf=“ëSý[>5 Xºm� †Ú@ÔB…‡[< žÆ7R§Ð³ïçŒÛß‘ö©ö…M ¥§6þ 9ežÍ‘BaSë8\¿èiüpÚþF®ÚIií¼3hÕµ¯OHs;¡Ë£ë��1Ô�¢'<L< µAx4ݾ»ò÷öåKò|6ƒ»û£]ì:ÐP³ëè×/~x½mØò;èj 9—ûŒÖòè¼ †Ú@Ôℇi‚gúTüÑFGÒÙ0˜¶me o:,‡Òó‰u±Óþ)Éz¬I££'áâ­®>„†Ëå¯%5Ãî»9l¶t� †Ú@Ô„‡ÂNãg¯óÜ•íæ‰Á¸ÑS݇âÃD¯ ͬG4€šþ6÷ÞN×,gÒº,WrãÔþÜßy^Î_¾é^•O—�b¨�D-Fxð›w+{ª}ï5inø»ñ³Á4|&¨vÃ×ïu¤ÕذA°¶±)5ì¥ø›ˆö;šaÐ<´¥Ô†àèu¤v9ÿ@δ^I?pß^ OxF:½ õ×m½CÿûröÒN&°—K—�b¨�DU=< ~ÑÈðÓÇAi`Íùý{mY ª3ÖÕ6¤q®%ç;½ý-hyÌvû/Èãƒæa—�8±ÇD©ð§Ií£Ÿ\ïä'RMÿÆ3ÒÕ'�hÿÞ‹²õµzSÚûBwùtþ�Cí� ŠðPãݽ_}”-�y¨�Dæé–ì´NJÍÑ÷Üu¤ÇäDëÚLO¹—…² µ€(ÂÃ<¹;èM0½¸ýŒœZ«í¿~vQ¶�ä¡v�Ex˜§ðƬu©ŸÝšù³FËDÙ‡Ú@áe¡lÈCí� Šð€²P¶�ä¡v�Ex@Y([�òP;�ˆ"< ,”-�y¨�DPÊ€<Ô�¢( e @j�Q„”…² µ€(ÂÊBÙ‡Ú@”†:º²:�ˆ¡v�€‚´ÛmºŽ?.ï¿ÿ¾ë �Á�  ¡ô#ùˆ ¦ú·^¯»w��£"˜À”ÂPê;}ý裺!��£ ˜À”Â@šíºÝ® �p‚)�L)l1Uú—S�Á� ào|zöÙgíßÑBi_vÛ§¤f†?r¤&ëÍmÓ�VÁ� ¢Ôwãèw›²N0�‚)�…` �Ó!˜@A¦�0‚)�„` �Ó!˜@A¦�0‚)�„` �Ó!˜@A¦�0‚)�dü`út›ÇSãYoJ—t `EL  aÀ�ŒÚ� B0€éP{@A¦�0jO�(Á�¦Cí �!˜Àt¨=  S�˜µ'�„` �Ó¡ö€‚L`:Ôž�P‚)�L‡Ú� B0€éP{@A¦�0jO�(Á�¦Cí �!˜Àt¨=  S�˜µ'�„` �Ó¡ö€‚L`:Ôž�P‚)�L‡Ú� B0€éP{@A¦�0jO�(Á�¦Cí �!˜Àt¨=  S�˜µ'�„` �Ó¡ö€‚L`:Ôž�P‚)�L‡Ú� B0€éP{@A¦¦{¯Isã˜]ê­mÙs½G×—Ýö)©Ùe¨ÉzsÛô€ÅA0€‚LLoJ§qÿ Lî¶¥^;.Íîî½ñô»MY'˜X@S�(ÈTÁÔ†Q&ûÛÒ\?:q°$˜XTS�(È4Á4&m0­É‘õ¦t'H–S�‹Š` �Szàäþûï·ôž{î±õµvW®\qCŒ` �S�˜šÓ°µ4ìnܸá†:Á�¦�0µn·+µš ’™PúÈ#¸!FÀ5¦�@0€"d[Mï¼óΑ[K‚»ò÷¶¤±ö€»+ÿ–ì´Nšà{RZ;·FxM0°¸¦�P�m5½ãŽ;’`úðûwÆ}Žé8ÁtWºÍãÉ2ØnÂË�`æLS(]Á&w÷ºq»ÿùžA«é¿øŸî”O>ÚC7è� ¦Á(ek:„‡ñi«©–»|ÐõA e @‚)–ek:„‡É|ë[ß’ëׯ»Wˆ¡lÈC0ÅÒ¢lM‡ð€²P¶�ä!˜biQ¶¦Cx@Y([ÅÒíIG7jWuS,-ÊÖt¡Ãb¢l‹í‰QLG@x@Y([Óá`‡²P¶ŠÅöĨ¦# < ,”­ép°CY([Åb{bTÓPÊÖt8Ø¡,”­b±=1*‚é( ek:ìPÊV±ØžÁt„”eô²Õ—½í³²Q;"GÖNI«»ëúëé6XÀß'ïËnû”ÔÌö:ü¾:;”…²U,¶'FE0Áe¹límIcíivß´)~[¼ß}FÎw?p¯K¿Û”u‚)f€²U¬YnÏþE¾÷Ì`ž÷þ[‘Ko‹¼{]䊩ö®n úk÷Õ×Ýcú‰ï^7'uÚ'òùïˆ\¸é(À¤Ó|έ÷Ýß3ëúßÍ:ÿ•YÖó"=óÿ¢Ðå¯:‚)–ÖheË·7ÁôÎÿc0^ø;ýãOcÞ¦˜ÊV±f¶=M�»`‚ØÝnBš ¨òO&<špꃚ²áÍ„¾ç¦¨þì4Ü4«LŬÓWÍx_0\ëÈ"‚iß,Ãc?Lo¦# ˜¢,£•-=ý~< ’Ùp6Ž~oKÎ6NI½q^º{³ªfгˆÁôÝ·ÍÁåUs°0J]^ß}Õ8´ÿcæïm7lÒÚëÌøO¾n¦ç†»ü¯ˆœÔƒ¤è•9Ø?g–ý´9àŸ4gáÝ·ËðùgEÞšAënsgVÛ³oÊë̼î5ûÒO‚~¿é_›²ó¤ ”áûc+b%ñë?ikp–îÿZwiËð¬,¾G0ÅÒšm0}GÚõ{Íx—eÛL¯VoˤWªÎË"Óðt¢¶Îœ6áîª t–9°]ù¡ Y‘HxšÐøz&üù~_2ÿÏì+…Y‡“n¾a‹ÓmrýË:`i}4h¥Ñ–?Ï$ —HçƒâÌl{ºCÝç’ÖFÝß®þõÁM[â¾ì„ûà[×Ü KfŸ5eÞ·<ê4:Ï›ýмwþo]ø35 Úriú?÷nÞæµî»?6åôÛf_Il°ßÛq\—ªÌ0cMÓкÆö;/réåÁx—Ìzè2úñü°WÍ2ëúiÿ¤.ñëfúý±Y_O÷ë×Íÿ¾ÞI–ÑÔa—´Vû›ÀzżöÛÌ~y6ÓLê¹ éüªŽ`Š¥5ëÓE·(ÁÔ·îÙƒ‚9`¼žSQk i6Ø…×À%E°ÕþA@œ…Û'òépY”ùçt³¼eñÛ/Ü6´˜.¶YnOÿ%&¶ïùýËž±0†DÜìésóú´ù› 癦 bá¥�ÙZÿÅò«& ½`Ûã2ݰ~š6fN¹‡Æ™¦ÅÓf¹>o–ï]7M?^Þ:è%:ÓÍ;Y73¾ Å™uóãk�~Ô¼ÿ¤Ùí´u8œý<5xO['è2WÁKk´²UÌ5¦Ë`‚©^õ%SQë²ùYž·þƼ•L…ž´–˜. f怴\šƒ­9.ÌŒ?¸…!1luÊT§bÖ?iQrÇyÑuFqfº=Í>g¯+Õrîƒ~ÿ2ý.˜2œ nî½T¨Ë hL÷…F÷^2M"SAÑÏ;3M?ÐÈÓôïù}Ž.§/ ݡԺe¶_»ï›÷ôÚ] Õ=×BzÒÌûÝ`½ŠºÆv¦eeBS,­‘ËVpWþ^gSÖ’»òoÉNë¤Ôj'¥µsk„׋­òÁÔUÞº\ö@â£ò ;¾©ì}ËÃ$§òõÚ°ó5ïóæ`“=ÅvÕ,Ÿ^'š,¯ …©ÖHÐi¦´?PfrÊ^“jÞ÷§+÷µpšexÎ]³jçëBBªUØu~û…×éf·il=¯˜ ŸÐù™qŸÔƒ´Û¦:Ž_ïØ:(}Å™Åö¼úÚàóµ‚pê¿@%aÐÝ ·l Ãg8œ/§~š©÷2¯£Ó•Aߪ+#OÓ-K4HfÞ³Óê/5/7N¸ ü8~ÚºÌÚ}Á,·¯’3D‡|Õ"ì{Ó¥²+ÛÍR;².§Ú;Ãì^WÚ­sÒ¬¯/䵓½lå=ÇtU‚©¿œ!xª€ çŸü7îíŠÈ –£zË(;®éü/¼&ìäó™—㪙ŽCFß2•Tk‰éwA:¦ß£æ½¾™¦Ôað¶ê˜aÖŸ„éï¯Áûö53®oå †Ó@hosaÔž4ÿÚ¤í `îÀ¨Ëá[hÃbvžÉzºðë|r²Y{É_·©¿®Ð÷Kæ¡ï¡8³ØžÏ™r–dtû¢ÿB•Ü\ùòãÙ}Еw?\j™÷ü4óB«½îÜ”7û¥Íô?möí}73Ž1M¿œ6HºñüºÆÞKíÇÊM;ºn™ù¦Þ‹ð-²>ÔNceeZÓÊÐPù˜œMBÖÀô„œ:;âõŽ·;Ò8ê‚ÅFKzگג$pÜ-õö;vÐbÄ–¹:([Ó©Z –ã°7~Øi E'l<€¡I8ó,ßša^ûj¯K³c ç50 6Ѱjd[€’è†ó!Tªþ”ŸŸ¾' ¡îàêùíÎ3iEöëe$ã-¼I81ÝãæýÇÌ4^7ÕÝ&¦_ÞTßCqJßž.H…güÍ;þË–-ã®lù²¢§Ç¯˜2’>S6Ÿ3ãé>ôˆùûªù"ãÃ[Ï g[ÚÍ4ž3eöïÍ{6ü™€ùêu‘›nšahÕa/˜/j?ÑK|L¹´_ÚìÒÅ%r„iöü:˜¿þ ì^6ëcÆëê¾e^_2Ëøª™w¶¸¢­Ë¦¸nö¬‚y­OÿHÖÍmŸì¾ú–ùûœéÿ‚éo¯ãuÛ?/¸Žcö=‚i%¸–ÎÔƒÝ}+Þ8×;ÆZLƒ_õ©’öîA»í8bË\-”­éT­óáL»làñ7ù÷}—<nÉUì¶¿9€uþa¨²A-W0¼DÞÌpá]Ë>¨%ÁÔ÷3Ã¥Z)Ý*\?ßZbðÖØÃ›O|ð=(°Ç±òý“yë¶ðúe ƒi²¾æ ü¨™®.OV3ëÒé 8eoOýLŸ6¶ÊÛ€å>ßÓ¦|س ®ÌøòSýræË°ž•xNïl7ÿÛ³ æ=»_›qõ¦[MYÒˆü4ü™ ûžßWÝþ“ì¦Ó›”ìr™nß%'Î$Ó´¯]ÈôgìxæµÂá ™'Íúøðî×íÛÿÅÝT•]7³½tû$_,M?Ÿþh.ÏU‚ýÙ¿-§¥Óª:‚éœÙg_Ö×ívHN³÷{Ò9[—µB¤>Æèîôô§]æ "˜N§jXŒL»v,>M%^•(ÓÙ–AwòÓ¥%"™¿?eÓ [ÃVEþ’~æ dŽiÁøÉ#›2Ë©øž6ëïk…pú¹ël›T¨÷ýMçCd²žA¿¼uó¡V‡Í¶Ô†Ãeéû(ÎJoOS6õ2—ÇL¹~ÝtþšèƒÊß*[„²B0-S0×r±U´\ÚÓìáï“»NC蛥®×:&ýýé÷[Òë<-­s ׊ú¶kõ-ª»ÒmŸ—VÓÌ/ ³»m7½û¥ÑjIcã˜ù¿&kõVú!ð±ëPûÛÒ\¯Ùá7Ää,s*8ër´ìtÃd®w!?&Wµ ,ðB¾UFß϶&*7 º£<ÈÞO#ïºÉðîþpù’ùaÙ÷ —3Y¿0øÓÌ[Æ$t-™YÉ0aØ4b!Ò?G5/\'_ |¨5ý’–Õ ÀÆ>#OßGqVy{Ú²mÊ¡¶¸Z¦ êå4á¥4Z„²B0-ËÞkÒ´!ð³ÒèÜÜímƒZøŒÌ è…§Ä“0éCgææ”õ3²uÑÄ53ý%­¢Ú [1ƒé»›zú;-9a§\ošÌ/Ýp—vfؼe6ú½eÓ¬sm㛲Õ{Oz­‡2Ë3[:ïÐûï¿/?þ¸|üã—n·ëúBé¶ùÚ×¾fÿz•«ÀÜG—+¹Æ3†ÏTËa Â`†­Øô²bMé#¬^ø¯æŸ Dúð>Þ* tAx —3VÃK²AO¯{ÕÝäÚÛ`Ý,3Ÿ®¦å·.ûýòË¡¡WOÓê)H¿žáe±ëfca7Ù¦ÚÏÌG¯Ÿ‹Ñi¡8+½=MùÌ>X?<Ž´E(+Ó2ô¯Ië„k™llÉžöKnB ¯õ§ÙG«æ1zfØÆŸÈckÚ’i†YÛ”Žmù|SZGM¿0DF¦Ü u´ÑIZ~nwrT§—´€a8Õ*[fÃ>rÉ,“_žd„Ë3[¾l…Ô®é¦Cº}>÷¹ÏÙí¢}8­df6þ15©ëÈÂð¶8á/¬ä:×Î_ó–'iù4óñ­3z“BrZ=˜ž ‘~YÍðáMIxs-œúX©+&Äùq5ÀjH´Ó Ö+¹öÍ̧cÄ/¸uvxÍÚÓ¯ ®‡ —Kاý0áx—Løt¿Þ“mEõÛ/ûÔ‚0ìú n£GÍÿya_‡AqØžÕ"”‚iáúÃÖÑà1BIð‹¶Œj«§¯ÆðšÐ08ƒâº|¹^—G²§Çý´¢§ñƒ0 ¦Ãš´nú öSÑe¾)ÆgM¿cr¢õ#Ùí¶Ý©üc²Ñ|mÌç@—=Hïºë.ùÈG>"¿þë¿.÷ßÿÔÝñãÇåÁ,½{øá‡åôéÓ…wø‡(ŸúÔ§’í£§•­ÀLØÑ»^³¿¯ýÅô4xåÝ¥o© o¨²]\³Ì|ýO ê°ŒõÎÙPø Oíty²7a„­¨IËŽ™vÒlÆ¿L7ùIÂ`šÙÖ Ô0f»¤~÷?˜v.“å0]ênf3íägM§ë^Ój™þQQaK®jAx÷vŒŽ‡â°=1ªE(+Ó¢%-…a óÁ/§e4&3-þzÏÚšlœédÂÞpZÑÓøAŽžžO®%õý|ÐÌ.G|™‡Ót]mCçž–No~Ïö¼qãÆpy‚îž{î‘Ï|æ3Ñ÷V±ûЇ>$_üâ¥Õj¥úk8å`‡²P¶ŠÅöĨ¦#ЃàRI‚åQÙh½™é;Ÿ&S§ÏÃþ‘‡¹ï –*vÊ=œÉ%�ÙyÞ–½ÎòXýÈrÄ–Ù_b`†=ò´zÑÛBæB—IƒèwÜá–ïˆ|âŸ~ô£ò+¿ò+ö½Q:Ç¿l݇?üaù­ßú-Ûzö'˜¢L”­bUi{æ^ëíZîG¹ž{UÙ8¿c¶ÓM×cD㌷ûÁ´`É)ûäT·¶¨éw´!¯Hû²)=©–ÑÙ¹ô¢¼ÑO¿›;/É¥74ÈCfrÍj`Øb©Áð†t;oÈÞ¾0üº‘½!Ë—àpžegûûÒ8{QZa¿ËÏKGÃit™÷LØ]³Ã¦C¬ÑSÚç_™ë©|Õn·mÀ ê³Ï>k¯3]ôN×C[;'íΜ9#wÞyg²]´«ü©|,<ÊV±*µ=ýuÑ™k½ ¦:Ÿ™î+˜Û‚`Z0=.•ä&' ooË^÷%i5îô×~W­APK¤žö>ó ijPLZ>ÉFã›ÒhºSöÑW/¼IiC;s^.ïݶ‚ÚÓø&”v[R·×Œfß”L[;|O]”ÞÍa¿ÚÆ#Òl¿i‡.sØâ\SÚï½$gÏ>/½ §ÎZ¶li@½ï¾ûl u¸~ýz²]ôo¥o~ÂR l«ŠÁô {˜È?™àõL Ó]DSl ‚é²áañùÓåú¬Ð¦´»×’ƒ6Ï$ÏMÛdBÞæ–>ÕT{úëSͰ›/ºP¿Ìã™Üïµ›÷iü†»>óô\cÃFß7Ë“ÜÆ4<Öj]êg·óLn|2ýZÛI‹gt™U¿'[›Á¼Öê&ÌvçÖRêå•- ¥>|a@·ÇïÿþïÛêPÊV±æ±=Ãý’'Fþ1b_ý+Ügþ¾ë[QÍë°%5œFø(2ÿ Ú_Ÿ‘û“·†¯õ)7,òm7žÞ ˜½ Ñ §“zbÅ+æõS"—Ìß{³-»Ž¿¡ðó—Ì2šal4Ãù õ?{£e¬Ÿ›FlþVxƒ¡yÿÂ?Ÿœ¡¯ýã×bËÚ?ùãÈx±Ï&y¼›éô†E?móbr¥Þ<i¶ù<·E0ÅÒ¢lMG+0  ”­bÍz{ú³ÐG¬Ý6!H;æ[ïôS C�íõ¦.0ù`ä‡Ó'8|AC“yOC™ì˜}R† GúÓú¨²ßÔáMø ‡ §«Ër!LÃéøÇ˜=i—ÈŸ7¡NƒXø¸3ϯŸ>ºÍ«. Ýæ¯†Ëï™�ço?ì§ë¿.§FêÔþ¼©®»ÙÚß?¾Í/OÞ2è)üp[ä—÷Ùèt.˜íÐ1ï'ã™åÐíâ§¡Ï…çåS,-ÊÖt´+š~“ÿêS¦â3µ¤ýßTÐ:Ÿ“i*S}®ç?›ŠXCtÀ¯U}òÐüQ™ƒÔÉ캙ÿý£—’Ÿ"Í¡­=|K‹é´…¦c„çM·ïÑXæ@“z T@ÊŸû V“2\ÿ»Þa ZŒ“GèEý.øª8h{Î+­¨F6ü¸€ã[á|Òà†3û¨2S浥ж6šqôÙÀaKqÓõËO+ùű ?ÿ~jÞny¿dæ½Ö5üì¸fÞ‚“\'ëwÐü}` 2Y¥BïËÝÙ°œûÙ¸iêrhÍOç1îWe ˜biQ¶¦£X‘ÞÕSP¦òó­zÐÒJÑ>ûÒô÷ßÐíóG+Lõˆ arì`š¡F5°êã `ê:Fý³Q}¸×^jf[>÷ìtšdÙF¤ºO›eû±çQ¿L9,[f=5à¦N}â@Eï«IšÌkÿ¿ýì}ØqûvØÊé«vú,__žmÿ .ðRÓU¦ŒøÚˆíƒá¼²¯ý´òöÝìúé¸> *ÿƒá¥Ù~¹ó7A< •¡Ø2Æ–!»-/õÚ¼¯óÖm¦ÓÉ.£­ŸõýHhž5‚)–ek:…ìÜA*9ìV%˜úÜLS­&=ø|[—#3 ÿ“,cjÙF¤-A£¶ÂZ¶\?(Üb¨Ð}õ©@ ŸîÿXKª W™q®½pº WFö Î˼L-‡yV \¿ì¸žmõôÛÀIú¹ð›¿?µîƒc"³î-Cjù/ûÙøjËJfy¾¥wßòÍÁK‹²5"v¶rõ•© u:}í>ý‘ÿ×T’þô}*˜šá“_[2ÃøŸM¸Ö5;-÷¾ÿíøO›þæZUlë[dZö`b^ÿŸæ¯¶ò%óÈ™ïU3m­¸ïý 3Žé†¾ð7æÿ“›®ý%)¿¾O˜qÍ8v=ß7ÓtÃkwÚLWC¥þ\¨¾y/u*Ü,OÞA;S=åÿ=Ý.‘Ö€ —3µþ×2˦ףål·Ï›átyý°¶3ë×1gsŠŽc[mÃmj:û°|¾ij�qº=g%ü‚Ô3åÖŸ†Ob6eNËPöÆx\YNʦy­¿ävÕŒP-û³¿õ®š²íʉ±}eÄMßî+æûˆ*·ÙÓà1I¸3eö93œ–ïGÌßWÍ<Ÿüá EÔ®™ÇÕ÷"ýþ[þü}Èô-«öF,3ÞO|`ý[3Ÿë"—ò–Á¼·Ev¼®&úÙ>ÐjYI®YŽŽùÿ3^¸}æý…`Š¥EÙšN‘; ‹©Påšva ÿ×ÊõÓîz)†´â7ÿ{ÚÏWòötš«”í°î�ç&ó‘¿ŒLËD즿VÞØÞŒÌ÷Š hŸ7ÓÔ›¢×™auZ¾µAÇó묧Õu¹R¡;’þÖb÷~ªEÒõ³áÏt>ÜÚ×füÓ¯˜ùè´#tÙì´Ü2g×ÿ¶›¶.[Þg A<<™LÓüŸ|Þnú'Ík=pÚ uõ`­×Çæ}¾ö †&ȪÈQä¾z SþKGxYIxz]»äçv$왲­ü>™.9öwûƒwo™ýâŠ):¾Î?v÷xø½_5ÁÑÿ ¯È/¿oëÏ÷>÷ò`öF"³ž¯š÷ìuñ¦ÓK’t[dû©¼ù+Úßî£&P&¡ÖÍS‡Í[†¤åÙm‹ìx¹ŸO¹¾çƒ©ÿÂ~Õ„Zÿ¿ ×wL±´([ÓÑJª(ah±F ¦¾2ì’ÓË™iøÊW_§æç†ËNÇOKç¡ÁIùñZ‘ùž4ý²ÓLSC[“Â@fÆÚ:ªÁϼX0µÿǦíú¥Â½ ‡ ¦¡ë‘wcˆ ·OlýÃ`š÷„ã©Ô67ôú×óæµ=pšá4œøáuê Ï7µ­p ¿=+Éí á—ÌO¥ËŠC0ÅÒ¢lM§È lÒS .¹§ÝÜ4’ë¡‚i¦B’ë¯ë›V,˜i0Í›f6˜úeïüƒÈ·_å?6ÓùÜ´&¦†ouJÝÌNãŸL?òn| ×%¶þÙ`zØvSá4m‹ÏŸ›@b>mEóÁÔOÇ—­ƒ>_ÛdÞ§Åôp• úEÑ”Í kÊB¶Übn¦# < ,”­éY¥®1U®uÓ‡JB´uÑô·áÍýo¯g N‘õ^yÁô÷4ìøÓZ> éé{ I©þfz§/E¦¥×ˆ™åòK§§áj;2ß'_,£^³åOµeã_¯“ç˯ÓûWf:öæ$#\Ï0HúSk6Tºid§íoH —Ë÷ÛL —ž:¿ä† ÙífºðT»ïŸ ¦ÑÏ ³ÝT2Mó¿nÛB¦ÙŒ«ÃùkÞ4 hÙºÚ1Óø‘i»Ï—kLGWÙ`ªåÕty-ÃìLG@x@Y([Ó)´sÈ(s„ò-˜Úéµd‚üë¤ÓÖ23ž}ì‘ë—½þ)¼¦* 86˜š×ÿJûûcdZÏ™áüëÓÁÿ'_‰Ì7ß?œ[ÿ÷AÐ Z,ˆÚiêº¹Ðæçáûû_lÑ.;m]ßð9¦Úé/ßlk úÙíl–Wo¼°ýt~ƒI$7‡e»Ôú›iÚe3ˮϚ<p»™yéöö¯u^WM? îúå@Oçëgcoä¦ão~Ú·u!ݶá®üÑè¶F±e…`Š¥EÙšNÑXö9¦e O+£z,[&”òÓñL1*‚é( ek:eT`á/?•ɶ˜ºVKTÏAeK?»lË8F0Ũ¦# < ,”­é,êÁ.<U^‰ê H‹í‰Q-BY©D0¥£+«Ãä|¸££+£CqVy{ê5ݶL}ORÏ8Nn¾Š½7Š`|ž=ãž»›Ì×t‹t-´.oÕq䀂<÷ú âÿ×mטEãÐ'8|oÔ°çdì öæC³m&}ºƒßÏ0˜&Áu’Ð;GS�XJÿåŸ*~ýK8Ŭ,S0µ?û;FØóZ‹ý¾{6XŽË>*-oYÄUF0€†Rßéëoü•�(ÑLÃÆ?‰\Ò–C-ç&˜ésiõ1fO¿"rò)óžùk3Þ…¹«kú»SâþÙ¼ÉcÞô‘`fZ6ü™ —ü¤©Þ>bÍÐ&ý#ÔÂߘ×ñµõò’þdg0|Èžn7ó8íN»Ûù›åÎ,ã—žÜiëÆþ>È,¿>âNo¢¼é¯N#õ(8óú«f™ìÏ£Ëݦë<?GtC§§96¼þ(Ái÷,d€ý¶›–®CÕL`Jö`šÓe›Y9sÏ—ý¼ uo¹ ùä5wJÛ,ƒ¾¯ o&ˆé3jõ±_? [5ý4Lóý}س-”AÈÔßÔÿ‚™Çë:/Œÿ® m~ü÷žýù÷‡Ã7Ý7Ý|ìcìšÃyzÙ–X»lÁkû¼b³l,m�Öéýã`>û¶…^/Ð|Å­KÞðvÙ\ç·—nçX‹ð$tºUG0€)…-¦Jÿêë¿ü›Ák L³ I¸Ê´.ú÷%íõ—†^'úéó";7]ë¦L3^>³áÏ<×ÂhÕLÒÔ„7ÛÒhÆÑ_]K…WÓi°‹…6Û¢™ÎO; ’úžyý=3ýl°Mo¤ÆqÓK-·YÛÙ©õ4ý’¼Ÿ´Æºé_ýáp9¦E0€áo|úë냿£ÆGÚõ»ÝS$ŽK³[ÐÑ+e&aÃ…±ƒn2JN7»au¹4Ì6!UÅÍ÷÷¡,ýô}ØÓNîÊsÆ7ïÇ®!M…\þü´}ë§ ’ÿU䂳Âñœ¯ š~Ø}ÛÂ8(ÔÆ†O-¯™æ WË]„™”•)L  þ@:^åÿt›Ç ¦˜Ø,ÂFªÕ/#âŒlô| [³.ö¼Ô2ä c¹ð ¢*yý–Yö×׆¦dÆÏ®ûA¡7»-²¡6»,û†7Âiî˜y¾ši¡žÆ,ÊÊ´¦�P­ô}7:‚)¦3‹°áÃRê&šüužaͶg:L¯šî«n^ÿÀ„³ë"] lf:®™÷Ì4mèô— ˜ÐvÅÈÎ_ã»›ª¾ð²yÏŒ Àþì5¤f¸ð'nýû˜å‹…>¿ü\¯\5[¶Kæõ«¦KÖ׌«×úË²Ö ‚iÏL÷I ¢æõ“fÞz/2¼rãèu§̺©wÿμ6Ëô¥W3ÃŽ‰` �+„`Šy˜UØxÝ( töô¼ †ôR-ž ’zã“Ý‚aýOäþ“φW½‘J‡÷Í?¥7>iÓiè©ü«ü‚ñ_¿é›?äÃè¾ù;~™óît÷ïg—íÛ&4û0j§.[0^j[öÚ\ÿ¿ˆ<î÷s&¬ç ŸSìÁ�06°¯ò'˜b:‹6ªDá—LÈÃj¥˜jàÑó®¶`S�X!SÌÁôpÉ]þæïÕ«û[YçÎ,ÏFµET£eoö*Á�VÁó@0=œ ¦ßIŸz¯Lõ2…KÙSû"˜À !˜b¦Á�VÈØÁ´¿-Íõš ¥úSíj²ÞÜžêæ¬‚)FE0€2v0 @yè¦�°B¦˜ÊFE0€B0Å<PÞ0*‚)�¬‚)æò†QL`…L1”7ŒŠ` �+„`Šy ¼aTS�X!SÌCQåíïoŠüoÿŸÈ¿n»+äñ—Eþ¯¿ùëë®Ç’"˜À !˜bŠ(oJïk¦õ/ÿtõÂéŸþ‡Áºßû‘ßxRäåÿß½±d¡n"˜@A´Ò÷0+Ó–·0”Ò ºe ¨ºnUG0€‚„6`V¦-ok¶¿ì¾ÿÏûû/{wáÕxÿ‡Ï¶É2Ðõ©:‚)�$<˜³2myûöóƒÓ÷aù¥¹Çl½îôêÛnC-]¯ª#˜@Aƒ0+E”·l8Õ› ´ÕtUøkLµÓÓøËH½"ÊJÙ¦�P`[„ÊË£¨ò¦áT§õkÍÁu§«ÄÓe ¤Þ"ÔMS�(ˆVú¾f¥Èòö—³z¡TýÍß/w õ¦�°B¦˜ÊFE0€B0Å<PÞ0*‚)�¬‚)æò†QL`…L1”7ŒŠ` �+„`Šy ¼aTS�X!SÌCXîèè몎` �Y¤Ê�ªˆ` �!˜Àt¦�P‚)�L‡` �!˜Àt¦�P‚)�L‡` �!˜Àt¦�P©ƒéÞkÒÜ8&GެK½µ-{®÷¸úݦ¬¯7¥Ûw=�`AL  ÓÓ›ÒiÜ/ëÍméï¶¥^;.Íîî½1õ»rþ|WÈ¥� Á� 2U0µa´6¦ými®üïÞ‰¯&GŽq›ž{�ªŽ` �™&˜ÚÓï>Hú€9Ééø~O:gR¯oJ«»ëzÀb ˜@AæLû²Û>%53Þö¶™^í”´wi/°8¦�0¥ö¶È…WÓÁT_k÷þ?»QX‹)�,0‚)�LiíφôOÿC: þã»n Ãq)�,8‚)�Lé/.§Ã¨ïû÷n€‘wåïmIcíwWþ-Ùi”Zí¤´vnð�Á�¦¤§ëïk¦Cé½ß£µÔ‹>Ç”` `uL �Oý0LÇk-�(‚)� l5ÕÖÒ«o»7��##˜@A|«éÿýo]�ÀX¦�&6ü…!:í~ú®ÿUþ—?ùg¹ó¯Gß_µ�ÆEÍ`b„ä¡l�˜5€‰>‡²`Ô�&Fø@Ê€IPs�˜áy(�&AÍ`b„ä¡l�˜5€‰>‡²`Ô�&Fø@Ê€IPs�˜áy(�&AÍ`b„ä¡l�˜5€‰>‡²`Ô�&Fø@Ê€IPs�˜áy(�&AÍ`b„ä¡l�˜5€‰>‡²`Ô�&Fø@Ê€IPs�˜áy(�&AÍ`b„ä¡l�˜5€‰>‡²`Ô�&Véð±×•vëœ4ëëv9]MÖêg¤¥ý9+Û:`_vÛ§¤– “íÖ¥ÞlKw¯o';¶~O:çËQ«·e×õ^vºí�`\Ô�&VÉð¡Aðl]Öl¨<&ïK»ëãà-éužúZmHÜmK½æÂhí”´wûÒßiÉ ×¯v¢%;cgÓ7¥µqt0Í#wK½ýŽë?¦½×¤yê»Ò0¯/{ÛOÈ©³Ûæ¿8‚)€IPs�˜X凸cƒ X;!ÍíXû¤¶>"Ÿm¦CU¿Û”u M·Þt!ði×ïô;r\šÝì°ãH­ »c³ët·¬g–w~4”ž•ÚÁÛƒ` `Ô�&V©ðÑ¿&­.”ù¬4:7ݽ¶´:{î…ú@ºÍãnÜZÃχ¤Õ³çþÇ0œîø§ñ‡­»Sµ¶)l>$hWªl�XÔ�&VðqKvZ'“ëDÇými®k�Ôñ‡-ãŸÊïË^·í®kÕëYÿ 7Xö{[rÖ×8/-Û2{T6ZošwÖÚÈ:…q­![õÁºo´¤çÙoWº7eîÏðZÛv÷=÷¾g†k·‚ks×åT{Gú᥶;8,ë0�0.j�«LøÈ –#ëµdÃ.{_æ3Òp—Ô6¾)[½[nà<þ·™ÆÚW¤ÝÛ†åTëb8ܦtönH§ñÙȲûp¶àÉå Ú*|Cö:›îzÚÌp)fžv8 Á[²§¯»-šO¦Zû½eÓL{°¾ï™Íò]®$'áôðm¬ãÀ¸¨9�L¬2ác_°týGrÀ]ùµ ÙÜê儽´~²­£ÃËnwrT§´d[aýp·“�˜ZöXL.WðÓHÖý °8œGmã¬lÛ' ˜õ¾|YÞðóÛÛ’†.¿ ˦g2/ß2l§¶±Î �ÆEÍ`bU I�Ôà•=»#£ƒ÷R]ÃÓækÒØÚš õõfÒê9<åï¯/ [2cÃí™~k™á‚x´‘<Ö*i­”ÖΠ7Y÷CÂbxs×0œz~¹ŽÉ‰Öd7¹á˜l4_à`;mtLÔ=˜�ã¢æ�0±ª„0tÅCS>37Fí{LÔ{97Bå¶‚×]&— Ãí¨Ã…Ë›íàæ®aøŽ…ß<áu¸A‹«‘z"vµ iœ{Z:áå Év:øÚRO§�ã¢æ�0±Ê„àÓ}-¦ÊŸ¦ÖЕjYLŸÆ÷㦂Ú7©`ɵ¤Aëf2¿p^þÿœÓ㱘ôó7H…ýFmÙÝ•íæ · ~œàR‚Ü'ÄÖñ`:=�5€‰U'|­Áiî0f[ÖÔX+flzYÁ£¦üi÷ä%ß+²sù5éõý)ûØpÚÒ»%7:ÏËå½Ûéxóš\ºô#¹•\®°& û¨« dêôn¼"í˱Gd™àyþ»A˜ôëìƒi°\ÙÐÙSÚç_1C¤[poî¼$—Þ88ë°�0.j�«Vø‚ÚZ]ÎvüMKaø [ƒ»ãí{akaú¹¦k§.š`éÞÚ'sóÒížtÚç¤aƒ­÷˛Ҳ1ÎÀ›ÒÝjE† ž}ºñ˜œi<1¸)¹ÉIôÛ²×}IZûÓ[û]i´4@Æèúß+kõÖàgUý%Ñ–Üá5¥ýÞKröìóƒõN‚ºþ’Ö7¥ÑìäÌkH— �ÆEÍ`bÕ úPú—ù}|íLð³Ïí¼4gy7DÙÎA‹jxCÕ ;àû¾åS¯Ílu¤wÛ…¿ì]ýÉ%î÷÷Mø³¯u¼‹]ö†­¿éÇTù”t]šÒî^KnXÚh<“ÿ[þýÉ¥K¯Év»éž©ªÃ·Ò×ö{²µ¹á©éL°o¶ýòÉõ­fÜÍéC:�5€‰>‡²`Ô�&Fø@Ê€IPs�˜áy(�&AÍ`b„ä¡l�˜5€‰>‡²`Ô�&Fø@žñËFÞc½�¬Ž*�œñƒÁy&+þ®S`UqT/L‘‡` `U�¦(ÁÀ$8ª�LQ ‚)€IpT ˜¢S�“ਠ0z0xüñÇmøxÿý÷]`ˆ` `S�Ñ‚A·Û•;î¸Ã†:º¼îk_ûš+1£"˜«Ž` 0Z0ð­¥Ùîúõën¬_&~ñ1U&FÖß–æz-·&ëÍmé»·¬‚)€ƒžº?vì˜üüÏÿ¼Üwß}ÁðT'êå—_¶ÝªÉ~Y©ÕjòÑ~”/+�ÆÂ‘ÀÈ.\¸ wÝu— 7nܰ¯}ùíßþm7Ôêj·Ûò‘|Än_|Ñõ] W®\‘;ï¼3)Z6ôrßùßá:d�##˜8”¶zið ¯+ýå_þeù™Ÿù™äµ¶˜­2½îÖo ßi¿U¡_Tüzüã·­ÆßúÖ·ìë{î¹g¥¶€ÉLäÒ–®Øõ¤?÷s?'¿÷{¿'_ÿú×å3ŸùŒí·Ê§luÝ5Œe·“ö[¥íò‰O|®·o5þÙŸýÙd[h¿?ú£?¢õÀ¦�¢´…K[ºÂÓ³.>÷¹ÏqÝ`F½^O¶‘n3íüë‡~Ø u˜w¤]¿Û·˜w¥ÿà?°_dô´¾¶ jõ!Õw´ž8Á@жhiÐÊ mýÓ뱟n3 ìºZ­–íôí7^ áò=.ÉÁ Ë­§�òL$››|§×•j«Ÿ¶€!Ÿ†¬O}êSòÅ/~ÑvúÿøÁk9Ÿã©ÛÖS�£ ˜HnnÒGüdƒƒž–Åh677åÃþ°íôÿñ-÷æi=p‚)°Â4 ÄnnÒëJõŽjÂÂxNŸ>lCý|ËÿËG´ž8ÁXQ~õW•›› D0­§�b¦ÀŠÑƒ>77•ƒ`:ZOdLÂÍMå"˜N†ÖS�ÁX:c77éѹ¹©8SÓþ¶4×Ãϧ&ëÍmé»·—­§�ÁXrÜÜ4;Ó·˜‚ÖS`µL%¥øØÍMú¢´@•ƒ`Z ZOÕE0–ŒÔ}ôÑ}õ}ìcòÔSO¹¡P‚i±h=VÁX"ív{ßÍMz]éƒ>ÈÍM3 ÛÙow‚i1h=V ÁXÝÜôòË/»¡P6‚iyh=VÁXpy77qÀž=‚i¹h=–ÁXPz ææ¦j!˜Î­§Àò"˜ F¼ÜÜTMÓÙ¡õXNS`psSµLgÖS`¹LÀÍM‹`:´ž˃` T77-‚é|Ñz ,>‚)PQz忦ÅÓ3gθ¾˜%ZOÅF0*F¬ÜÜ´˜Â`Újµ\_Ì­§Àb"˜ÂÍM‹`Z-´ž‹‡` TÀA77iXÅb ˜V­§Àâ ˜s»¹Išz:Ÿƒæb!˜V­§Àb ˜s¢ÃØÍMÚåb"˜V­§@µLÓƒ_ìæ&í´õ‹‹`ºh=ª‹` ÌPÞÍMz})77->‚éb¡õ¨‚)0y77iH忦åA0]<´žÕB0JÆÍM«ƒ`º¸h=ª` ”DtÙ››ônnZ^ÓÅFë)0S `zpãæ¦ÕD0]´žóC0 ÄÍM«`º<h=æƒ` €›› ¦Ë‡ÖS`¶¦À”¸¹ Át9Ñz ÌÁ˜¸¹ !‚ér£õ(Á“€¸¹ 1ÇOÊÁt9Ñz ”‹` Œá ››®_¿î†Âªºÿþû“rA0]n´žå ˜#8èæ¦ .¸¡°ê¦«%¯õ”Ëy€ÉLCäÝÜT¯×iA Át5ÅZOõzóo}ë[ÔÀ˜¦@=ØÄnnâZ2ä!˜®®Xë)7Cã#˜z€9èæ&Z@‡` ZOéL@ìæ¦;››0‚)­§À䦀ÁÍM(Á!ZOñL±òònnzøá‡9x`,SdÑz Œ‡`Š•¥nnB‘Â`úâ‹/º¾�­§À¨¦X9zàæ&”! ¦|¹A­§Àá¦X)ÜÜ„2L1 ZO|S¬nnÂ,L1*ZO8‚)–77aV¦­§@ÁKK+|m}ȶHpsÊB0Å$h=†¦X:ZÉçÝÜD+ÊD0Å4´ÌÐzŠUG0ÅRÉ»¹é7~ã7¸¹ ¥#˜bZ´žbÕL±¸¹ U@0EQh=Ū"˜báÅnnÒVR½¹I+0+S‰ÖS¬"‚)–VÌÙ››´ÓV†+W®¸¡€Ù!˜¢ ´žb•L±p´"Ö››´b¦¢F•LQZO±*¦X(zsÓ'>ñ‰¤bÖN+êÏ}îsÜÜ„¹#˜¢l´žbÙL±ôZÑ|pßÍMÿøÇ¹¹ •A0Å,ÐzŠeF0Eå=õÔSIåë;nnBL1K´žbLQYZérsI1ÁtW¶›'¤v¤&kõ–t÷ú®ÿaÞ‘výn7ÿãÒì~àúc™ÑzŠeC0]y“½¾ì¶O™ñµB¬ÉzsÛô™Ž¯hµrõ­¯li @•…×?O ú²×Ù”µõ¦tû4ïsŸú@ºÍãfþÓU3³Öӽפ¹qÌL]ê­mÙs½ÇÖß–æú”SìC0]iÓ‡úݦ¬L_~ùenn ËídÁÔµzÚ}Ò…Lû¿{ûPÓUV~ëéMé4îÔó»m©×¦)g¦¬žfŒ²UA0]iÓ‡¦ ¦ÜÜ„e–݉‚€mE2û@¸OŽ2 ¦(±õÔ†QWÏÛ²zt‚:ß—Ñá²MzÜÁr"˜®²©‚CÓS½¹écûXª¢âæ&,¢° L1Oe´ž¦êùTYuŒì–ô:ß•Fý”4¦¹�K‰`ºÊæLµrüÌg>ÃÍMXa9&˜¢ Šl=-,˜úË�¶/›iÜ+õö;î €`ºÚfLÃëCý7y­‹¨,yûä'?™*Ëa÷ì³Ïº¡FÁ5¦(Þ¨­§ZOt-q-¦@>‚éJ›Í5¦z¨V„ZátsÓ¤§—€yÓ룵,ë%(aÙÖn¼ËQƒMìM'Ÿ•#k›Òù‡ÿ(µ£²ÖØ’½½­áÿv|‚)òÔzªåTëæûî»Ï QÈ5¦ÀÁ¦+-ï ¨o]“Ö‰cR;Ñ’íqÈë¼`ªßÔïºë.[þÒ/ýÒ¾››ôÚR½ÆXdzÀÏžÐîk_ûšb±G¸L} V2ÿü3X]y­§þ:ýr¥?ý'lÙ>î©¿Ó’µcr¢uÍ–¹Ã^y¦+/ç9¦#Ó'äâ¿ÑšáÁ8luÕ˜´ßOÿôOË/üÂ/$Ãhå§­LÜÜ„eñÈ# ÷×Q¾QUÙÖÓ0¨jÿ\9Ï1%˜¢(S”Fo` +»ãÇËOýÔOÉÑ£Gí)}`™hõe]»ÉZKÙÑÖÓ¯ýëò¡}H~í×~-)»Ú‚Ê™,Ì Á¥Ð /{-“¶šê_­e¶šÒZŠE §õ}™ ;½Këq`Ö¦(…^L«ì|ÇAËÈ·šÒZŠEàËkxf+ìüq7$0;¥ÓXa§£ÓË)öYÓÑi‡j‰}FttÚÍÓL‚)E¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;1”‹åÅg‹ÊEõð™ fÞå¢ô¹SðC¹X^|¶ˆ¡\TŸ bæ].JŸ;?¦/{ÝKÒ:×ÚCÒêÝvýWåbyñÙ"†rQ=|&ˆ™w¹(}îüˆ^K6ÌvÑmsd½)ݾë?2l·ŸSg·Í½×¤yê»Loö(Ë«šŸ­î3gÍÁš¬º(½ØG¦Ñïuä|ëŒÔ×î•zû×w¾Øç«‡Ïd»²Ý<!µ#ërª½3<öîu¥Ý:'ÍúºÔêm3Ôâ›w¹(}îü¸Û†=R“õf&\Ê`K³ûëgh(ݸ{‚éÍåbyUó³Ý“NcÍ.Û‘#K~–"üâ[;%íÝIj„œ/¿S`Ÿ¯ž•ùL¢6c–ñÛiuûÕFKzÚ/Ü׎Ü]ð—@ ÂÉÙð8?#ó.¥ÏÊ(æé6›m“ —‡é÷¤s¶.kº$œ[Òë<!õµZ ;Fy(Ë«šŸí*µ˜Þ’ÖI©™Ïa²œœ/¿SbŸ¯ž•øL¢6“”ñX‹i_vÛ§ì¾6ù—À7¯‰Î¨NoÞå¢ô¹/CÁœû®46Ž™Šþœl]Ü4Z¿!ešôU×r±UZÿ Kõ·¥¹n‚äцtö5ÜìJ·Ý²§tÛ%óØmKÝÎÓwBÿ³´ëwý""{šAOéip5ì}EÚ½[îÍùÑeÁrâ³3_¿LòE5úå·”‹êYîÏ$§Ñ¦Ð2þNr .ê4~¿·%gÝñ^—Ì»\”>÷E/øýnSÖµ�Û®&kõ–t÷ÞÂðýfvÌôÿ¬4:7d¯³9(ü™Sö~šÙB×ï½(›~7¾)[½÷¤×zÈÎ#. §á·<¿cd/ 0;åÖ7M€>&›/J¯ÿ¦´6ŽšáªÑªºèåùª÷Ùö7f¯¹ ® ìÇ~Ÿ1ûØÚ¦töto2_[§ì~\;Ñ’Ì1lx1uCã¼´ì¾xT6Zoº!t˜Ž´ƒ/¨Ú­’V7ïp“óÅÔ½§ã4Ýx]ê/çtõ©£.~ßÕ'îÒ†è—ßa]1ʺ¤zå ý™Ø4 Œ¾³ÇѼ2®Ó:ß’sºŸj]°ëŽåÉñ]÷1Sæ›f~á~•Lï~i´Z¶ñj˜‚}/vjòÒ»ƒÖWße÷á54é´ç©ô¹Ï{ á¯#I Ip½šoõì_“Ö W(ˆ`¼Tô§ñ3qoKZØü1™ž.(´aކUs ¶¡x¸,ý–œÐá¦þ†XŒ¥(ˆªÖg›©ì}ù¯³†Wd§ý÷ER; k7Ü©»°Ÿ?ÅáOšþvŸ½aê„Ϻáü¾ £û¢½„ gytèþ˜FùÓ‹nú·}½‘/Në_ßè2ŒRŸº®‡ÓáQ- û™ŒÔ”Óh“-ãI@ôã_’‹>ÔÚã{:ä÷«`_v_6“ãlx|O…áaÿa£W˜rŽó3nhÒe§Òç>ïœÞ°  dLmáñAм®”ÖÎàÌà§Ló;A* Þtý19Ñú‘ìvÛ®ÅÄÂækƒ|<ÚèÈàðâð²�бËòΰ5¥vBšÛù‡¸YZür<ÕûloÇC^NË™‹çdóÏËöEP8#­?‘º ¬û÷±áHŒ7ubÉ<†û{p@KZ`s<‡~11+¦“éûº)lÉ^s:ÎØÂƒv|ÙF[×ÃU¯\`!?“Qr¾dŃŸßî—FÓA ¦Ÿ¼î‘à|á§µ·ËÉqß7P…ýT,LϾ¡iÞå¢ô¹/~eä JP ƒoXö@—ì(áϼô·µä[RpÍiúr-lÒ8÷´tÂ&úd'‹í±ù§WÛhȹóJÝð¡Ë…åT½Ï6²+¿O­”S›OËNxPXûr]ê›zˆícþ‹¤é—œÞ÷0ÜßýÁ,w8½aÐå‹iDÒê©ã]Ì3©›‚ƒql¸ ”ÚÃeTG]×Ãé4P-‹÷™ŒÚ”Óh-ã†ßoL]P¯7öŸ÷uEcÁ7L‡Çä¤ÎX ë#™æšùèöü944Í»\”>÷y¯àÔ"r$]L SÐJ+´Ñ°´>ä>Æ&ØÉ¢;FxÀ S7\UÌ— äªÜgÙ‡S­ˆþ�—ìOA‹ìÇÑÓu±@¨Qw |pð Z8ƒ8ÒÓ}ÂåÔMÉzÔáŒH}2úºŽ}¾zî3¹(ö…Òˆ3‡ûCmí!9cÏ „†Çßá´rÎ.$ûrlñý†_öÒË;Îϧ¡Iç3O¥Ï}Þ+8Xô~جž|[K¾åøë¹L?ý¶vãi_6…=Z¡—¤œFÿMiŸÅ ‘ÞÉnî¼$—Þx/]ˆo^“K—~$ýà‡4ú;ÏËy]Ž XìrƒTë³´V¨d_ô1<(ø–˜ØÁ'è—|‘Œ çéÍSßÇê¸q–V§gÆR£|1‰xý/~€~QÖaÃáÂõ÷õиëz0]TËÂ}&I°<¤(@ce\ûRäÇýÁRÅö¡ pÆ.ݱó¼-{'†õAÞr$ûô|šæ].JŸû¼Wp:Ù›¹ÑÀ—§äú-¸oË^÷%i5ߕFKÃ¥)¢þÛ”=µ wù=#Þœºë÷^’³gŸÌ#8ˆn4¾)fÇ p7“3'ÜŽ0\æaS¿^8ý}9{é°»{gg±ËR©Ï6Ùwô@vÍ웯ػe“}190Ä ±ƒOðEÒŸ"LnÄÐÓw[r£ó¼\Ö}Ñö¿÷»ÖGùb‘¬—?eÜ ¤èíÉåË&üî;µ§_¤¯I§­uNzý_~ß}]G ã Zí3­èF: úF›h7A6 ±þê´a+¨~9»!Ýβ·/ ‡ûU8pžegûûÒ8{Ñ=ÑÂõ»ü¼tt¿O…éÙ¹ô¢¼qk> Mó.¥Ï}Þ+8_PjIó™?:=ÍÖÊ6£[*ÖêMiwMeo_k|&ylÄð´Xº¿>ªbk3|œL]šíîð€”œ¾0ãÙ;ò´gðm{ïð´Ÿ¿»×N+Y¦°HÏßB— ¨JŸíð böÇÎHËVä‘VÔX KÒÏ·ºÒùwºß-œ6HÞ”îVK6$굩›naK¨îƒfÞ­ó‘ý0l•4Ëûbå[R¡ùvï²´[¹u]—/7Z.0f®sÝ{C¶bÃE¿üŽº®£Ñé Zî3©(§Ñ&ZÆ;œJ7ÇþÇΜ7ûËíÌ8&”v[ÉãÚRwKêíÌ>£ Z7‡ýj˜cý›vøá—e“1Î|Cš6܃í,št~óTúÜ罂“óÖ¦äÎ<eqËS¥Ïvx÷ê†ln¹ÓçÉʇМS|IëàºÔÏn Cbrã‚éßlKׄÈÁÍ æ€rqø…²ß»(§ìpƒƒï²_$ýb\¿ê. ¸íÖ5=}3œ¿YÄNw[zîumcS.ú ýòkŒ¸®£ÐuCµ,Þg2J#PN£M´ŒÇΊ„bÓ2Á°óôà™§¦ÿ`¿ÖùÿÏXîS­ía}««´ÿšæ].JŸûâVF¾À-((Ìâ– †ÏV&úPý“rb³-­§æ¶–A—=-· (ÕÃg‚˜y—‹Ò羘?¼{–`Z*ÄåÅgë¾Ôúë2Ãëᦨ>ÄÌ»\”>÷Å+øÁ]pI<S …X¼rQñÙú³-™K�’Söñ›,–å¢zøL3ïrQúÜ)øˆ¡\,/>[CÓú\ÃÝ¥ë»Ù\VU”‹êá3A̼ËEés§à#†r±¼ølC¹¨>ÄÌ»\”>w >b(Ë‹Ï1”‹êá3A̼ËEés§à#†r±¼ølC¹¨>ÄÌ»\”>w >b(Ë‹Ï1”‹êá3A̼ËEés§à#†r±¼ølC¹¨>ÄÌ»\”>w >b(Ë‹Ï1”‹êá3A̼ËEés§à#†r±¼ølC¹¨>ÄÌ»\”>w >b(Ë‹Ï1”‹êá3A̼ËEésפ£‹uXN±ÏšŽN;TKì3¢£Ónž¨)���P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P S���TÁ���•@0��@%L��P"ÿ5 Z—ìÖú����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8g.png��������������������������������������������0000664�0000000�0000000�00000055227�15030617045�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ï��=���»Œè���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��Z,IDATx^í¿‹I÷îýo(žÔ™£ëHÑ$NÞd“ Lâ`ƒÃL°°Á‚À°ð€@ æ Æ`†+fÁ ˆÁ°1°¼,F–å{^cĹõ³»ººz¤VWõ´JÏg¬5­êêªsN=uººú������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆw������öˆwÐ<Àç�>¾q|ñªájC|ð¹¯Oj—æª >q||¢LÐ.`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuÐf -ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›¶àÛk—爓ý [‰Ø �a€TmÚ‚o[¬]œ#NBô+l%~`7�„~P´h ¾m±vipŽ8 ѯ°•øÝ�øAuâm³¯´œ½¥dÔ§nç”&«µú´ß¶X»´½qŽõ’fÉ€z¢Îºÿ›F£ÿMÝêž^ÒRÛ>?îâœFýcêô'´R_!ú5Þ@ªauòsѦhM·7SJ’3êwèx4gßÄIìv³^Îè"yEƒÞCGÔ§ÓÐy’°Áôß”Üü#½ѱqLáÓíÓhrC·âè±*¡óA:Ç#ºÁø5Üf@5âl³[š ºYÙÙ÷ùxõœúÉgõoÅzA“ÓŸ)Y~S_�ø¶ÅÚ¥íƒs¬—¿ÑP ¶©7ü–_&Ô×"^|žJCý6£Á‘þ®µÈÚDˆ~m³­¬——tÚ¿ ¥ú·¤$¸•ò™’Þ‘²eSô–ÉSõÿ|G#%î¼Ñ¢`­ÝÜÞÐ%É¢Y$4[~U\ÑÍåP&Ž43»a=§ÑqÇêûÍG'iY'ÉŸÕãŒÇXå¶ý6PÕÿâ¦~°gÄÛfZÀïêû,f%§ÔµÇ£Û9%ýãP†o[¬]Zëcý'%'\¸w¨;¸Y®õ"¡“Îÿ¢^ÿ¤˜%MÅ�"kѯí´žOñ’àv'e™÷¿iÒ$®ß{PlY°Ïn´}(Þ9¡ÑÜu?îº}GzI^¯ŒDÙG¦øÞµïn¯h êÕ¥Ál—ü}™í·]ü/nî×ö“xÛL)Õýc½¼¢13r±‡]³—*Îvâ2¾m±viívŽ/lvúDé¶F®Û–ˆ¡û"D¿¶ÎVø²ƒqŸ „¼}¸ƒ[ Rç3(¶3ØÆe7LÜÎÇÙR»O˜Hþ¢þV„/“ù×`F¹Ä{ºtÆê£2Q¿5kVÄ©ÌÞï²æµÄöÛ€wÿ‹„ûóƒýåþÛŒÇé·”œó%»GÔ;ÿ`,ß=¦ÓÉ¢·3ûçwå®èRˆô’øQâûby_/ü›/ëÓü–Õ%w˜x¹oéÿ¤wŒõÇŽ ü:ÞˆåÄòï©7ú}÷%o7ŸÔ.Íw…|á\ošúŠn&Ê¡Qò·ü‘1 :×»‹5¦|Ýò¦,Üþ¢_C”YŽ!n;?Pòé­K*(-êñ>4?Çÿ¦ÿû\ÁMe3" ò2þRKt+³)ždБ(ë_4Hµ^ÚÎÎ3nohÂþ.Ö0§¶ª2ºü÷éwæòýiG°åçòMˆ2·"ÍlóöËîÜ•²ú@É4ë÷\ß=0mâ+-’*.›áYò‰êOsPwŪ]lßÉ~_Šñ;^&_ÓŸœÓ8¹.ÄÒjâ¢Óû†·¨Æý¶™µ6Ç`¾lwmÄ…œßeÉéÑäùwÔ-øÞ]:EݱRÚ$ÓAúŒ3'ü³1¥P¦º»+ëô߬îöAp'¼Í|R»4ßòIÑp9–ðɰ¾•_ràä·—Id¬c=²2m±¢_›³½¦X ÖÕ”ž?–bÉ –©ˆ1ûÛÜ,›9>£ÙÕP þÛÙ6eŠoPŲ-ý[u^3Ë>i�5l-TÛlùy|¢ÌÍ™mþÉõé–˜ëÝõïsoÇΉ=¨}ZˆUulŸ³åïh»îœ$´àÇ ;üõrkÖwà~ü`¿¹ÿ6s õ4¡cÄät\àæž¦ÌÊtŠN è„€ë„Ó\â—Ž?GyÕËŽÓ:e¿/NÀ]ø¶ÅÚ¥ù®?\KM‰ð)¹U”RC·'Bôk3¶’e5Óþrö·)ÎôÃ¥œ’à–~ß¡ã³×t¦EYwH³[~’›Jœ™AÌŽ5'Y†Þ°«TdYAµ¥Á–ŸÇ7!ÊÜŒa»¶+Ã->L^Óäf»³É^–}ËlŴݺ¶¿íï]dB#û-c5£ÉµNœÔ@´ ¨Æý·™1n¤ñß°ûT¼»ât–¹Ïù^ûMße¥ê‰°ž$¤wÕDœ”þ¶¤>¹ ¿ÖPúØ5ÝÎTÒ*âU¡ðm‹µKko@¹cH•)| 6OÕF­£—Y0=JÅEˆ~mÄV\«ôá@s²e؇™Qt7Fjÿ¢çƒ_è'{­¢Ó¦Ø×ifÑ Š.ñî2™˜*»mÚ¶`»·vc“ö'ock‚ÄÈÄsþãìOÑŸèKî߆m݉oÒÜÍógû›~ï&k÷…ÝÅàðþÕ¸÷6súOѳqÂ<N%:ÅôÝÔ§ùïÿ¢Û›wjy¦á[ ÷x´!žˆñèK¶£„ûNø¶ÅÚ¥µ6 Ü1¸ X¿y|æ(bà4¶‹‹Y¸sBôkx[1‚y÷$Í€™ŠTœåíÃm ]F÷{:9½È2‹ ÷ïŒÛžæ’§m:&›æšë\ no°åuòMˆ27bîS¶›KnM¼ý0«ÑŸÚ&Ò~gŸ\–ãÔ]±ª®íWø}éÎ^üxû:âpx»‚jÜw›¥ölúTÁÿܾçºãæö}†}—¯Ó£Áù[c;[N‰‰Š,A`Œ]ê#Þeq1Ûb™pÁÛÐ'µKó]!_dƒ€=ðn>9GÉ2¤òÃow¿¢‹Ù2sšH ѯÁmÅ„ŒìµÑßnQTÜXo§“¸ît^%6e¸¬>F6Ü´µ‚ 7³îæï-¶ü¼¾ QæfLß/ïw‰qçßLA¿…®2¨×µý ¿¿“Ûßi”¾ÀʘÐÔ@ÀÛTã~Û,³g3~g‚þ®¥%cŠS§ð\ƒkë<Œ´Ls,4¶Åò5/ð¶ôIíÒ|WÈw é eÎ\KnE¥Ù·âmóØ Ñ¯ÁmÅ„6õwÎ>J‚[é÷ ç9Πh”•® 6ꣂòzñ–†§?Åêß3ZlCôqˆ27cNž¬~˜}Vü{&Í¥4F\²ûÔɆAÝy7gGÛßú÷›/}w$²ßÕ@ÀÛTã^Û,õC?¤w§Ì]¦ŠË(3âß]Ñ—ëw4Yücùî7º½ù &Àåþõ•–Ó„ý–MRç~ù‰Vv™bìYÒõÅ{6.Ý1ž¬4}9-Ü}wãÛk—v¯ÎQJù ªÜPW´¼þ–kûøÝL¯iùµ\¼¯—ïéåäóÖÚ¾¢_ƒÛJšÝÓ™R¸ÄK“ôwŸU`Êú[LÖVé‚÷¥3¸™AÏ-¸Ü6åIætuáäë3_Lh8zO³Tè±€¼øM§ÿa%ØB¿]Á6D‡(s+Ìe1éƒÉ£Ï vQ.ÒMQ¿Y Þ=¨wú—´¸fvÂm«®íoý{^/›o´¼xeL‚õ] mÄû&q¡}ð>Õ¸Ï6Ë|]/ ³vrRÇôÊí M?$ô\-Ûëô~¢‘ÐF\áÛ°ži<UÏ^¥¾c”Íw¶z9¦D-™ÌÕgpFc»L~7lÄüXøœ9~eË.ùô/Go¢^2 ß¶X»4ßòBn03Fæ zL}f„â¶­‘aêöÏèœðTÜÎ5œ*]ãΛÙ9’O†óÅGˆ~ n+9‘Í×Õ~ ÉÏJ4°€u:’)íoÞ¯Ïi4–ÂÖÜJ2•)%6UÈ„3á®ßÔi¯AOë-?ÒÖþÊDVç{ê?©Äc»ƒ-¯—oB”¹-9±Üû•®ô2³ÏrvÁú9÷b'y'%Ű½M/}Ú~PgÔ´ý­ï„Ûú1‹ Ý;SÙšÔ´|VV%q4¼Ï@5î¯ÍŒx|üœÎϸhgÿÏD÷¸°ìÖˆ<¦_ÞÐmš8`cJ2WZØP³ã†Wf9ìoW¿qÇ‹$Y,+)³{J‰¹óÏ«¡|ÆO”É' Xó¾3¾m±vim (Ù ` œe†º^ÐäT¾Ì&7@3ÖËßh˜®á”âkÞw#¼­èÌïÇ!]Þ|É2ÝÎþæý©ïkWp³”øÎ¤,øÉ—6‰.ñ¿‰%‰µÎ—aÜJí Þå¨#îéoÚl÷Ón6 ^že¼œ-ýðòœ’ lùq9ažÿdKgŒI]áoER›Ôƒzj+¦rêÙþÖ¿w±æw…þ ÅÌxYŸ‰ýÜov@ÃÛ TãþÚLö]9p¨ø¶ÅÚ¥µ/ d™ÉÜ~à!úµ}¶|» ðƒêÜ[›¥wšîzƾm±vi­(âÓ‘Üš,Í~mº% î"D¿bð‰Ø �a€Tç^Ú̼š{¶ 2¾m±vim(òa¨ïïéF,)0ÖU‚ѯ|âv@àÕi¼Íì-QÅÙwàßk—Ö¸s¸0÷æë|õT°3!úµ¶‚» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú5´­¬oFtÌÎÁσOÝÏ#êOþV-»=ü·¾ QæFÖswŒöÀç>þ„VÊÚ¯¨Æý´Ù?t3ú.gWøÄÿÙ;ø1>©]šï v¢_a+ñ» ðƒê Í@[ðm‹µK ï˜ÅzýtNi²Z«¶-‡ë›e‚v» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :h3Ð|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªs?m¶¦Õä”:ìÜüüŽGt³y9¾m±vi(q¢_a+ñ» ðƒêÜk›­&Ôïtèx4gr:¾m±vi(q¢_a+ñ» ðƒêÜk› ñþnþQ_TeM«éšn±µs%V(™V¨‡o[¬]Jœ„èWØJüÀn�ü :÷×fjéÌ–ïUqr{Eƒ“±ç%7_h6èטP€]ñm‹µKC@‰“ý [‰Ø �a€TçþÚìošôm|e~ëåûOü.¹Y/i6îSkðïß¶X»4”8 ѯÁle=§ÑqG”ÿà¾Mù•–³—Ôï²ï»CšÝÚÑjM·7ïhÐ{È~sL§“?h.Þä+¿^$tÒÉ?p´^þFC~|çJ_e1·7t9èQçÁ̾Èïr¬èfòZ‡—wLýdN·ê¯±±WvcÀŽhý'%'ºïõwKºr›yH'ÉŸjpfvr9¤^§CÝÁ•Ã>ËŽ@‘Æü "k36LFLsßìþL“ÅGKŽâ[û¹y‹-© æ™ñ'ÊÇÕ''¶7Ä'ì7³¡¬[úáÇÿÅbÊNè8sd:' -Ör"óˆú“¿ÕÄâX|×éýJWK5¦ð:NY¹<Æñß±˜ÖOè¦; Þ^>©]šï ™¬oFt,:Ÿ}´ëÙ#7ˆ²A®Ô9¾Ò"ù!5(éXlp¾úU/•—a8H逷q†è×¶Âö¢úy9}Eã«%}6$ƒNûûägêvz4dÇpXLÏiøŒ©\ äë±°“oË÷4N>ÑJ”§lgý™&/ßÓò›}…,Ëíœä:½!]Þð¿¨À\çVjËÙG»±ñoGê:ÿîÛ‚¦ã74_}ÊÇ¥IBÓ%‹]| ¶íã�íiÚb ‰6[//é´ûˆzÃßhÉÜ‘'~žwé±-¨× šœr?V‚—Óä=+<Ôú;loÜH=¥c˜:kñÉKO ²úËßSÿì ^d×É\ùqŰäTÔqpyÃô™ž8رóððm‹µK ïÜȾWb‰|¯™á— rÛ:Gú ÉŠ ί)™³¨1{]/¦ôrº(°Ã8CôkX[Ñ·)/i1Kɵ̂ç–øFöWç„Fó,äÈã¬@$ì„ýörF“‹b¢(ãöôÍ.ÞËÉž8Îú­Ê¸vzcš§“:·´ûÊþÙM�;JË|KŸ&ïèšÛƒÎòŸÑlöŽ&âNŽÊr™qí@íiÖâ t›¥Â}ô{–HL}ÛôOé³y?ÖÚÖ:^˜1¤J¼qQ²?½3hM4xNŸ«cõd¢K½³Ùש’£¹:j}d—xø¶ÅÚ¥(Z@ñÛCÉ9ð9g¦Û:GfÄ—Ÿ¦t!g}3°Ùº˜|fG©ãr¿=ã ѯAmE’ÇÔg62é�cô«îþP·x;³(ÎÔwl’öüì"ow<1|©—þ­9ATv’³ •5)]^{g76ìH–ÉøçgÖd€ß±ÒXÄ}œc0<@;EõƒHÛfJd§wìÊ3A]¦T\±µÐ<V±J¼q¢… ¿#¶qngYüÓqÉ^…`Å+™‰Ï×[NnŽJVI¾m±vi¡ŠP}J._2a­«Â WÅ9äwÞ/t–ÈljfœÏh8ž*G,õ!gˆ~ i+2ˆu©×ÆXzòeK֛Ŭ„²“ï¢s%¸Òòº}ÏømKŽ#ø‰@«ƒ÷Šn& øÁÜïâdßìÆÆ¿©2;ßQÿ\Å}ŸޝÄ-hñ­8·_ØŽ@‘&ý Â9ÅI´üÞÔúîY!;®Äî{L-S-Þ8qMú|V’òbDú¹.ñ[óùE®Lu7PÔå›XVœˆg�ò1îñm‹µK P”0êö¨ŸfÁ¶!Vq!ÔÑ÷ý×*›ÊPåuû/i¦¾(LË8Côk8[ÑÚ ¤;‘}Zf'Y_3ô±fVE”ÇŸ¥02;ÑÁP­%äö1:§d—XÅÏ~ÙM�;Òeš9ëãrç±'‡mG Hs~áÚÌåëS'È?ļƎ+\cÑVñƬƒÜäÅûzñ–^\h¡^6AпSeê±QÄ*®¥Î(I¦ÿª‰o[¬]ZЀ¢…Qîve4ü› Î!5g‘º¼ü°ò8ã·fœ!ú5œ­È –¿}Y´Ù‡E;)ô5ÇqlÑv\¿Õ"ÌʇÁ~ÙM�;ÒeÖİ0 <l;EšóƒxÖfNAÍW�œQ¯{dø±ŠñkOÖ®r+Åê\…:Hòå|¡ký,—À¿8V=eLm1‘8T|ÛbíÒ‚a´öí{¶YÅ9\ÇjÃ63cÅßšq†è×`¶â nªþ’}hwû‘’Á”àø.;1¿s»ô;GPT?ËëÈØ+»±ñnG G™Îß‹ãL›9l;Eóƒˆ;æXŠò0ú•ú¹µéîqãö:¡Á³ã¢ Þ6^”Å'%\!Ëçqæ­®õÃó !Òíµö+šN¨ÃwóÓ+T{õFç:±cØâÛk—. ¸£`LUœãŽ,Xΰí ãÀŒ3D¿†±•Mvò‘³ò‰Hò ³¾ôéâŠæ—ê÷Ÿ¯i"Ö·Wµ“3šÍßÓDlãÇPk•¤[zñïæ”œžfÿŽ”ý±›vä*sÃ$pö‘&ziÌÛ(ÒŒÄE¸6S±_­ X/?Ðxüž–_”øNÞY_è%rüÙ• º`~~)ƘKú<{¯–ðqàfI×É[¹ùÆÖñ¦õ{)ÎßPbìV#PÚ¦óý4H—ËH¤°˜í¦£ßQaíz“.âǪ-3ŵ&¿P?ý÷aãÛk—Ú9ìÙ¢4&fÜóÿÐl*·jÜÚ9„‘n1«MýÍ'ïÕÒ˜Ã2ÎýÆVŠ™Q]¹çÄD‹ïÔÁ&aÝ>„HÒösœ½ô&ícBæ°,€ŸR¢…»€ØD¾Ø‡Ÿ‹o+z~ëÿöÇnlØQ:¹3ËtÅ5×o9‡kG H3~!ÛLnVÁ}Ó;,?V[XËå¶#•äqÌßÅÆì÷£‰áçÛÆ›ÔN5Ù¹-ÔxWÜtCÅD~ÞôÃëöƈ…ê}ò8¦“¯Ýç;P|ÛbíÒ|W(%Íxå3ÚRl32ÝÊ9´±;–8ØÙ6mÌö‹—È8Côk0[­v@àÕA›mÁjJƒŸ. HW¢ìŠo[¬]œ#NBô+l%~`7�„~P´ÙøëßÌÜ+œw›Á®ø¶ÅÚ¥Á9â$D¿ÂVâv@àÕA›Ù¨%8Ç#š/Ô:}—p'õPª½*ìŒo[¬]œ#NBô+l%~`7�„~P´™~`¾GƒKõ`|½¼Ø\çŽì»|ÛbíÒàq¢_a+ñ» ðƒê Í@[ðm‹µKƒsÄIˆ~…­Äì€0Àªƒ6mÁ·-Ö. Î'!ú¶?°�Â�?¨Ú ´ß¶X»48Gœ„èWØJüÀn�ü :‡ÞfëåoôbðZ¾ìéÐø6£ÁÑvkö×7¯è§Ü›üýãÛk—†€'!ú¶?°�Â�?¨Îá¶Ùšnç/©ïÜ¿½Œ[š ºt4˜Ñ7õÍÞ÷»<ÚbÇþ^¡§cëíù~ñm‹µKC@‰“ý [‰Ø �a€Tç0ÛŒ ÷1õއ4«”qoH¼ç^v¹Åbkðm6 £^BKõïrø.<OƒîªãÛk—†€'!ú¶?°�Â�?¨ÎA¶Ùí ºÿ¢Áì‹ú¢A– õîËü­­=£n_Ø„¡H4sAþ}á-ýn¾±ª? :qñm‹µKC@‰“ý [‰ŸhíF¼mPï{ünþQ� ?«sxmÆÅðzp< º¤”Mâ¯C4 ™¡yvüÑ]¢™¿6POÄßuû ÝÜ®eV]Äã§”,ÿ‡n’Sêò¿®d&Ÿ/…9þžÅê[!ÌEìîü@Éâ+ÿ£ÜÏ>m'µÿýVYúÝðm‹µKC@‰“ýÚŒ­üMÓä­Ô¿@³ì¯ÝlÏ=ÊŒ"ËÕ¡ÎIB‹û,k³¦ÛÙ zé$ð[»Ñöú5ÆÚêZ›­ t2_Ñ7Í(sqÍþýàA—3½XEfy[ñO1û,—ÓHáü õY¼ÇvNh4×#ígJzGiÙçˆzÉgu ‡M.†Ï•€æ|¥Eòœ†ew Ö šœÓƒî)%7ì\ë?)9y”fÓ×7#:>þ•.Ïût2ºfž]‡àâoGÙDAüÛxxu½¼¤Ó½Î]]#Ä;ØwBôkx[áý æÄÛÜ&!ØO»Ù.ÞçoÃB¼â]ƒ±¶:‡Õf*{lÝ,f¶¹PåKWŠ+Í˳àRàwzCºä"šû%_WÿÄÊðo\6Ã~É&OOžÑ35 (*;žfË9æº|¹,¦ûì'Œg‘É•NB+õÛ#ñÿ ±ûL6™X/.è§±Šå"KÏâ¸y¼g|ÛbíÒPâ$D¿†µ•¯´œ½¤~—ß&Ã’†ûbÿì¦bé ^Õ9¬6sÜdøï?æ³èŽ%0Å;Ïœ?ýÅØý…‹ì_è©sbîH–‘}$¿Ó‚[‹ÿ\|æ¿}’ÕB¼wTyìì^qG¾Kàß¶X»4”8 ѯÁlEe?yùòÃôÍ't>8¡c½N ×J‡W3{õ;1ëæëëÆ}êòï:=^-‹Aåö†&çz ûè[z@´‡oB”YÚbÛ1�Ð?Ø/«ÍäÒ{ÙK«Ä;ÿÍSëïì7O]çbÛ\Þרüeâ…àÖw¬ø,„üwt6¹¢ë¥ÎÚëö¹¢/³W4J—êèßš~ÿø¶ÅÚ¥! ÄIˆ~ j+¹Û^úö¡×9Á¥è1o-ªÙ|·ÿ‚†ƒ]qgkëZ¿]3ÝžP¿ûˆzƒwâ¡™tÙDÀÛmûÄÞÙM)+º™ŒÔúÎc:üAsnS:«•{€Ug{Ôà"¾Óž¯´¼úULô²ÛÃÜŽÞÑ Çì«ëÚÎÿ}Ê&ž½´,ý–\·©Î«ë’N8‡µÆy<¤Þð7Z®f4NnØ_ò×¼+x¹gÙ×nŸÆ3=™5}L_+ÿÉÅ6pOØ »i·‹]êg}Ÿ~²6Êà}øZ•ϱ¶¥c“ðKÕÆÞ¯Ìïÿbíø&¿  Eðk�Õ8¬6ãâôaê‹.ÈöÆòEMi¬0Eq†ñžÆ4ÇÝp>®žh’ jvÌd@§®Ì»—ÙX;âKbtÕËçd8Jcª\NÓy6¢Éõ‚þÇ/(9?7â«ï^Ÿž'Ùþ÷züÏÅNÿø¶ÅÚ¥! ÄIˆ~ j+®% Z€vù›&§ÏS±"sÞžqͱ~P? $ƒ‰BˆwuO}uÈìݸPIIA§&rOŸP÷±ÝÏ:d _•õݬh9}MÉü¯œ-­Sz9]Ð7ë* œ|ׄN—7ÌΘÀk¾ÍãäZOQV×éø5«'û?‡Y=(ʵˆ´º>bO>ù›‡L¤m^«•çƒózùžÆã´üÆ¿ÛbB»SýÔÒ�f槣ʼnFí%­ÑU“ö´}”w–BB÷y‹'áûAV›qû¤¸ôC?ô)|…M`Ç—”<ç */2Üy’½ŒD ãÜw¹ßðÝ^”‚g“ƒ«¡N:p¿P’Nø%ÙŸÃësUò")>¹çÉ2WòÀ^R£˜þü_6‡xJÿ‹N/ÌIºŽ\ÂDÅWgÅ/ü|R»4ßí D¿†³³EzQ€ ng4Í”�×ÇØ™Bë·z"`®'LŸ„ïøûÂ~ÙƒT¸›b°ÄŽ„ø´Eª²E&/?MéâšÛ”ñûÙº˜|fGi›5E¹Èæ.Z¼çN'ªÐ<yC×¢žê†x—“Ò,+.ŽŸå&ö ‚Ûßi$„»%ˆÅyÍò²k,~§$ù(}ÊÙ.Evªßú†’FÖŒsûÍÌekZðçêom¡§êhúóúæ5 Ívhk«sXmÆýñ'z’úÈÃ×¹¬?ƒ'ߎŸñ6¾m±vi(q¢_ÃÙŠÊÆ™ÂZP".Ft‘fåo‹O¼›eZÙO¾æ=áË øR›—43ƒÁ³_vc£Å¨½ö±(Œ9Nᫎíô~¡3KÌ>è>£áxªìL•iˆrygdzì;‘ÎßÒçíô)¹|™­ÛtˆÑt©³Ë\×¥ëåXö¢– e¢\]kÿ5]Ž^¥Ø¢(/a§úYp_œð;½tÉœhñ[ó?3ÿ5¯IÇ—D-öBì`¬­ÎÁµ§Á¶;Ü;DŒáË妔 ^äŸM㉚Ÿ~jD¸s|ÛbíÒPâ$D¿³!\\KWŠâ}½xK/Ì[i®å6œ\–Q yVñéöi”\ЩØ+»±QvTXû¨„q>“\",űè{&heFœ¡l)7ÑSefbÛ\ÖñiR6ØŒøÚTû¶²:o·Gýôî£—È cY Çu]Z &³ìp[”ëöêþ²ïR”P¹~&|ýîÔîŒÜ3(|Í{B#~‹>wË]¡'¹;í¥1?ˆˆÃk3;9uàè’.ÿSðeuƒ—$ ÂàÛk—†€'!ú5”­¸3 ’¼àøB×ï Q¢3­vfÏfZhm)H™}²›<e¢ÓµæœQ",¥½™{’ëró“„°ÍüZå×g”$SëL†¶EkÝf¹`Öõ·fÕuÈ_W¡^)Ê'̉°:6_nÙ]°2ªÕ/… ÷73k­¬nÝŽlâ3:§$—™·Ð;UíÁÒ·fü .Ðf -ø¶ÅÚ¥Á9â$D¿†±•2.ÉÄÈ'Z]¿£‰k9DNh01Á_>Ñ1o§ëÌ{QåßÒöÇnlJ2é·3:ëu ÂØ-,]¶¨Ë5—âh!œ•)Ëc‚s“è"ß~aÑ&Ál?¬Éq]¯¿Á¬Enz}­Ö£’;�w³mý4+º™^;rÓíZåü%“³‚±¶:h3Ð|ÛbíÒàq¢_ÃØŠ!\V)I>å³lzÀ÷?Ð ÷ä9#½¥¦oÙgÛQåv”Ix~{_ß~cßÝ$tÚÿwþvܳ?vc£ì('¿Ðu2¦3¾ì"'Œ‹â["ËÈeãz‡ØÖ™÷‚�çëµQo .™¨Šs˜ËÆXùÃ×F9Z”õÕüÜùÊÄ»×¹5ãŽkeÈIHq’›g×úqøR˜÷ù;ë?ébüû‹.Ç!ÞŃÈÏXùÿeÇœÑØ¬ßNŽæÁX[´h ¾m±vipŽ8 ѯalE ¾Ýu{\ Ì…uÌŒ4Û™~är… {m¬@má§Žå[`ßu;þ@Ù»±ÑÂO T¾åÙøM—Lô ‘úš&zÉ•),WŸ(¿—Y`akyáëÌЧb‘¿HL Q-Õ~çÂ�¹ÍýBýôßóü?r ¸¨ß“lOs½+’!„åox>Ñjþ†ÆSu—I][:¡Õ[¿Ù/,s\k:©aç™/®iZöLÈÎõÓwÅLŸå£úY_¾¾õôTý›×ñ{cOxý0ë¦ ÇýÓŒÄÚ ´ß¶X»48Gœ„è×{±•Õ”?É}¤ó(±æ¼-ve¯íF‹H1‰Ó⎠æÇÆ¿ùqJ¼§{±‹/•ø7E`‰é ¥ýR!µ79¿^!âlÂÛŸ·ø`¶ºÆƒ­«4¹þK½ …ÕS\O~W$ù> Õû göa½)쨔Nr‚W‰w×á&;Õ¯L¸óO¾Ís{Có>:7ŸøšM~§•y›êÛx]A5Ðf -ø¶ÅÚ¥Á9â$D¿6n+·Ú4î,&¨Gv@ TmÚ‚o[¬]œ#NBôkx[Q·ÀÅmû4ÖË è,ž}ÛÔe?í€ö?¨Ú ´ß¶X»48Gœ„è×ð¶¢nÛç–3Xˆ% æ-÷Ⱦ{d?í€ö?¨N“mÆ—z=1ǾÌíÉOA–e®—3J=âÛ¢:ß‘�Z‡o[¬]Jœ„èWØJüÀn�ü :͵™|Ú|E<·a<„í ùÖåGrG4ñÌãöÞAÖ/Ms¼ôíÐðm‹µK ï*›Ê΃‡Ï–hòc}¢LÐ.`7�„~PæÚŒ?CõÄÑòaõ#ßwuÕ[S1,Äñ÷ í”ô7M“Õ®â=Å·-Ö. %NBô+l%~`7�„~PÆÚLdÀM]ÌÄ×ÇÚζQÖt;{¡Þ7vÁ·-Ö. %NBô+l%~`7�„~PÆÚŒ?KudÞÕ¶3ñuɶ@m>‹ýUmëÚT†?N|ÛbíÒPâ$D¿ÂVâv@àÕ Úfú}ìw~6.Uåâø Ìw+èw60ô;ª•Éáo#~MƒÞì\þb´\½õ;´@gßw‡4ÓÀê—ž¥çæ/N»¦¹¹”Y¯ë¿ýFì\bˆÜÆ®]ÝøddJçê¡Ûü»58¬î—Cù^ñµ­fç”ìñä·…Oj—æ»B „èWØJüÀn�ü :Í´_Îò=1—”pñúd‹‡Uo0^/:é<¤“äϬ<qû%pw ^ø–½äL½ÁÙýÙµL¸O_јÿ›˜(Xb[‰ý®lâ{õÒ8%Üy{gÇ}¥EòƒãEˆêmåé®p|IκÆyå„å˜N'üÍÊj è-Ÿ×k+¾m±vi(q¢_a+ñ» ðƒê4Óf|}ûÓœà-lédEóÑ ·'4š›GʦmÞy «jÍm!©Ä{Z¦~Iá%-æo)¹–kè¥h¶Ä»È¢³çòX6™˜ÿA“á¿i²\ä— 9E¿ôæ5kñ®'&z“c¢ÂÊ§Ú³Ýø¶ÅÚ¥! ÄIˆ~mÞVt¶Bݾ °mȇݸØu€Þ~ ;Q·»Ê-áÔ_ÀáÒ?Ø/ši3.„ŸqG&Þ¿ê®,ÿVâÝêeÙïJç2ô*sm>è*Ê{Lýä F3u~‡hNÇPó;ŽžLôé<yE‹¯êû ×D@ÞUàKo²¶‘[_åÚA×=½,yÑâþáÛk—†€'!úõÞlEdò„!*»1ƒ]èÝ$8ú±ÌL‰pÏo?`¬­N#mÆcCîeLʼn~-РľJ¨ç’MÛŽazkF!òùš÷D®¥ïöi<“Ër8RXw©×gëÛ×w =™èýD£ÉgG´¸7c—¹tç›XóžŒúlR‘_ã/Ñ“x’¾m±vi(q¢_ïÍVDà³3UØaÛ%*»1á6t7 I~½«ºŒ;FͲú@ÉÔo¿ú�cmu‚¶™Ùìw~\“o—@WHam®×ÙïâÒ•<Öf.ŠGç”Lì·ë »µå¤k‚ ê©Öµ«¯8iËv¾ÑâÞ¼S Ê×u㨞Q’L‡Tm”Ø¿—­1ýïÛ'µKó]!ÐBôëýØŠ h;g/¹€Âþ¶ÛÝ䃕9ЊÁÉ÷Öi*Ëeîö�† †¾ç~õÆÚê4Ñf<6ä–ÏñØËÄ;PB¶¸ F V3Ù¤³ô›Æ0-Ê7eèeyyáí^#Eº=i([J“áúü•–¯æî$ì7¾m±vi(q¢_ïÇVT ÚÉùùÚcìo[…xìÆDV¹·%2ñuQ;0<°w™�±^ÒlÜoíŒµÕ ßfÅås…‰¾ §x×nZëà]Yl'ZT;ÄûzA“Ógrç¶¹þ¹z—%¾Ôd¢ôõ$Â÷:ó^ø_*ø‹L­¦4›ußt®ýÁ·-Ö. %NBôk#¶r{C±ŽŽ‰îÏ4Y|tÞöbIï#›gÜÆtîok–ÁíÍ;õP!ßÒêµ÷må9ûÏÞÚƒ4S´á³qPå¢ðâLî¡Ì“[ªºŠe û3÷I~H½áo…‡»ÖË]h·ª_Òl©Öت])ä9•Ýê­ër“í+¦¨Pƒªø­ëåÕ^ÕÞ¯t¥Ï“Â'ÃåûYk‘’«O:fß;ïHØíÀ¯Qîë?í×Z ç’MêXñÑç7âÄ=ï7Í몾͸˜Ëç}'ÊïÓ]W˜_ýÊì¬èÇ®,v)zÜ2¶žÛFžžª—rá{|œüH‹Ùµ”ÅΫ”$Ÿ¤¿~Gv_û±øÝ'JÆïÕõè» æ5ò¤Å/ÔWÿ×Ú=eþ%[O?ÌZz®=·-Ö. %NBôkh[‘Žþ( |ýðÓã.=¶µÈBð=p•ÀX¦iò‚ž9×û¹2<SÀ*Ôò+-¦ç4|G† ûh7›áƒXõÝ$8ëåo4ä/.IŬÞ*Í~P­J†Ieéù>ÉÉL‚ÂVÍ;D1 ·sÝ.ççý¶ éø ÍÙ€›MdY}' M—ìœBlä}),˜?{Aƒ™ßØYÅ­÷³Veªsß¹ÿ´Ù%ûEç2£Ìï§ã׬ü9ôõµa¿iŒµÕ Þf¿3ìM}SJ:‘ä“E>é<£‹tR¯)Ë~—Á'³òM¬üÚ¹ˆœ›ëÊÕ¤ÁŽ3J¼ç&÷Zlwû4J×Í«úÜ•¤Òâ=õKµÿ¼¨ñƒ×4QB]”={O׫…Ñ.®‡Y÷ß¶X»4”8 ѯ!m%îæ“é:ˆä• Hù=puöÓÎÛ‹J X{óÊA~›ŒiÜì›Ýl·£Ê»I0ôs¶Æpe®”­n¶-þMûSö›f¦™ÎÇR¸çvjp ¼rÒÐé¿¥O“wtÍŸúÍÍfïh"&jr‘ê¼.õÎôvsŒ‚ßUÙÏZ×gÓþÓ®vÐâݸ¾Ô‡ÿ yòF^_ZoóZ\"IÇ£<vm÷µß4ÆÚêì›qxEæùÐñm‹µKC@‰“ýÎVÔ€o?ù^DŽÁ]pÇ`n+nK–=}o ýÃc¿ìfK¸�̽-‘Û›™‰w¡…Ÿc§!(ó½míGï|ç`®Åsa™‰¶iã<âX6é}~f ež ÒXoWäÆwöy¬cÓò¶ÞÏzóþÓ®vpîÍÏÝéSrù’F¹=®­kÑuÉ}—§ ûMc¬­ÎÞµ™¸;vœù'Çx€=|ÛbíÒPâ$D¿†²)Š"© ˆô²BvS‰ÿÜ÷®Á\gûL‘Ïqeí“}²›máv´ónŽ­Ô´˜Í„gÉD±€º}§é²\¾:D°·ßQÿü£¼ú÷ùÛÕÅ:3Ä5:Î#¾×Çj¾Ý~Öò<›öŸ6Ûá®ý¢Õõv{ÔO'Œ\ý®ïÊçù-þ{Þocmuö®Í„ʱL,¹;ùѺ[öß¶X»4”8 ѯalÅ1s ) ÙM×À-„…•aWb£LüëpxìÝlFÚ _wy÷§hú·.1¨´i‡Zàn˜ü•ÚŸIQ §h±œžG›Öª.¹É°«Ì² «5qtnßìzôy¬‰¸íŸâߺýåZaç~Ñúܹ;¬‹£Í*–Üó~ÓüzA5ö¯ÍÔ3î½!]¦ëÁÁ¾ãÛk—†€'!ú5ˆ­8 _sF½î‘!ÊĆ[ì8…¾ Eñ_.Ô½±›­áö‘_ßÎû;—‰/ ¢c¢¨wƒ0Ŭ£w‹rmg›Ž+›è%c¦Êcsåi2ï8¸ã·ÛK¯M bÓïT™öŸÖí°q²,ÎmßPí“û­žÄÜ1yjÁ~Ók«ƒ6mÁ·-Ö. Î'!ú5ˆ­¸ÄÁíGJF¿R?·6Ý5@3AsÐàÙqá{—Ðw z~®ÁL9„Ú²7v³-BŒVÝM¢L¼»3¸N»rQ*„™Ï/iò¯c‰xד3 -ÊËŸ×YqÜw¦X­DÖo½ªw¬pÖ9›HäÖÁ;ê“ú­c²Sï|7µ_4ûÏ9YwÖÛ1iá~Ók«ƒ6mÁ·-Ö. Î'!ú5Œ­¨AU‰’õòù¾²_”HÞÑ…xèN *-œVt3¹ ‹ÙGº÷%}æÛT ac ÔŽým¥à`„¯µ½¸¢ù¥ Ÿ¯i¢ú;TöÇn¶„÷yîeLÜ6Ì}KÐh½ÓŒc«DÉYße—éÖ… ¾Ý\2¦ñTý›%x¶F»¸]%Ç%nÝ\é7ßшùÊDmgŸ#»>{G]¦þÞ±…¥`“Ø6÷ŸÖ“ ³ ¾md¶_´n+{¢#ëÍ®eþšMÕ6vʯGŸhuý†VOq\Ëö›ÆX[´h ¾m±vipŽ8 ѯ¡lE¬Vþ1ësc@6þÍQû»Ëu²#µ¿¬ÿÙ@ŠƒÜþ¶µÏ3»ŽìoZÜXç:PöÉn¶Aˆ83ÛZÈÄ—c¾´HØæè±‡²Æ-2KÉí“lÚ± ³Sýb#m«j?øe÷¹L²«..ûV‚\ÔAÊ®±Õ~ÖŽ ;G‰÷üþÓŒ;÷‹f83ììk!ÞY]Í[ÕRY[²kná~ÓüZA5Ðf -ø¶ÅÚ¥Á9â$D¿ÂVâvS1ÉÌ?oÑ~*N8€?«ƒ6mÁ·-Ö. Î'!ú¶?°›»û†§ËpxVû':.ìÞrÄ„c‹5úÀ+ˆŸÕA›¶àÛk—爓ý [‰ØÍ]¨%(âùŒÄÚï“ëí«­G¿-u›5úÀ'ˆŸÕA›¶àÛk—爓ý [‰ØÍn§Qï!»&¾Nû]qoòÖ¢×¾ë5îüƒì{“ ~V§É6ãÏST~™Ûެ—3J=áéCñ Õø¶ÅÚ¥eŸØ>¾ Q&h°�Â�?¨NsmƸÎo![xØÝrƒ†Gr§'ñ`öcL¢÷�ß¶ˆh�ƒOü„ècØ �ðƒ]h®ÍøCÜæ²òNՑ×Rrò0{‘™Ø)i»Ý¯€/XßNßдâß¶ˆh�ƒOü„ècØ �ðƒ]h¬Í [È3ñõÑK×ò/y Ã'L'ãÊwT|Û"¢h >ñ¢a7�Àv¡±6Ûõen[Ã_ ˜ˆw7¤YwÐ8òÝOvš”ù¶EDÐ|â'DÃn�€ìBÐ6Ùvõ"´»>wfâ/U{C#ó…nÆ Áä‹Åª–ÉáoMñ€<ÿývgÚÅYî…nãôj_i‘ü Rço æ‚U¿!ù1‰à‹wò<êMç±¥¬Yߌ—ÇÙoXVÜYóåpº>ü'úexew$¬vÐ/œËõŸ~׆ñ‚;óZÒ·:ócÕG?Ïp{C—éÃÃü-ÖÑlü¦™ç¿ñ ¢h ߯ ÚGˆ>†Ý��?Ø…fÚŒ/gù‰ž˜ÙX.\Ÿlñ°*«WC&ü a-ÞÑyH'ÉŸYyâ|ÉÌ–/tSo îô”(ñk?@»^þFC&h¥àäo/Vb½ó% ãmÆé‹äV´œ¾¦dþ—Ѳ.ëÅ”^NôML2쨔àf"ül8 âõ¤ ìÖõ1–(­—ïi<þ@ËoRˆ^—¶Ã.ÅÛ“•7&?Y»0á>}EcVÇ;¯%7qÒ×÷3MxÕ[Ü]/°óm‹ˆ 10øÄOˆ>†Ý��?Ø…fÚŒ ¸§y!ÊÄ_nÛH'ú '4š›GÊ7§™]K8– j5·‚÷ˆºú…pjËÚÂ6“B¨gYmöC9i`ç½ü4¥‹kžÙVuáâ}ö.&ŸÙQzra ^•ÝîtŸÒ™‘—wŒóìPŸÉâwJ’òzôyr[u:ÚA‹÷´mõÛ¢/i1K‰¸>]?[¼;Þ,­³÷æ¤èæ5 s¿“ø¶EDÐ|â'D·ÂnÌ[ÀÛf¿�ðâguši3.êž1Á‘‰w l*¨S”x7…ºKœ:ÑYí»b”ߎe&*Îeç‘Çvz¿Ð™%”tŸÑp<UKg Aoœ·ìóâ}‡úô_ÓåèUº¬¥0p¶ÃWZN~¦®yq-©Ÿ¼¡Ñh¦êè¾Yó}žc:,îìoß¶ˆh�ƒOü„èãöØ+#@3 ~V§‘6ã0÷2&.þò™ø"Z [KB8Žl®[8:[GnùZ;|-ˆ`Q—Gô=Ë×:{­êÒí¿¤™XÞÂpÕ™• ³äö5ê,½Ç•ësDÝÞ)R¡o•Çɵ_óžÈg rkèuù]êõÇÆúvWœwœC£2ü wPòø¶EDÐ|â'D·ÇnxP¼y�½‹ÕJ¦w ê»ð7M“åƒ5ˆÄÏêm3-XÙ9îü¸–º8Å®D J3Û¬…£½Œ£ˆüíÝÇqŠÎ8g¿—Çšëïu]òÙtw™R'yq\½>v&ßÛºŽºŽ©?:§dr“Ëþgå[çDIëè/š,ärÍÃëâDо´}Ü»A}ó�Z_oÙ/fnj±¦ÛÙ :©3¡�{âgušh3.(sëÛ¹0ÏeâèlsAØê]MÌ ¯§×»Ån‘;&Z€Ú"8w^uŽ\6]Ÿ×µÌ¤x)Àõ÷»ÔÇõ@­)¶u}\5¹Èeüu}¬kQ“­ò;<©{GÛû¶EDÐ|â'D·Ãn\Yøhã>uË27;¡·5ÃÄÏê„o3.ó/cât“Ÿ;Å»€Vfy£pÔÜ!„Ù/çSúc]vŒž4˜YhGæÜY;ó-‘"ÝÁâÁÔGÔ=½TÛDÖ¬£x]¦C¼‹Ý`žÉc“ %üíþ+ËÏqFcóÚ “ˆ<¾mÑ�4Ÿø ÑÇ÷c7|äHí7ÌFúƒæ® ÎÂtºÇ±y\:˜èÙ¸^Ðô>ÁlÐfƒÚb.o ß™5ÒY©´L~ü'ZÝL)9PïØ¼}«ê 2Vÿ¨MþN „zbÁ¿sí-(Ù+Yý„‡·;¨Fø6ã‚Ò|“ŽG…¶Î`ëuÒzÿôâþçùLõÔ¤ ݺ±^Î(½¢©µ>=݅ű]¥À!nuIEëšOÞÓˆ;öõñÓè­ ­ejÔÇÛóÅ5MÅv Í2ø¶‘§§êßJàÛÉQ—#v-i1û ®EOxÜ^Òuò–Õó¿bÒÖí'êý0¬Û |Û"¢h >ñ¢·½W¯Þo˜?ôô uó n j°Óâ+-¦ç4|V–…*Àëå%v¥özñ%ÃM»E(¬,˜<‡åù[çYF/­¿¤ºý4Œ²ë^YÚ{%ƒð ~V'x› ?2ï|3ñ¥˜“f>qïŸÑ…ñ0¥¤Dd–“ òM¬2ðõÞ%03²écÞdŸ LÁª¯­¤.J¼gB–¡b“,_}º}]ÌŠ/fbl®;¦aç(ñn=ˆÊëšk£çS£2ÑŸKƤqÑx——%â§Ù–ÿC³Éï´2ë]¨C~ŒO @cø6^Ð>Bôq£v“ w3;¤½5Élv~‡- ó·vK=‘bÂ}ô{áùVÂØ™‰Ò[—Ù™{^‡çtªŽ•õä»6œzÇunµW2hÄÏêì›ñÌ~͇äïgl:l|Û"¢h >ñ¢›³-²í­Í”¨5µÞv&^‹b{Ðr­ -ÀJ¼Ûë:‹¸2cY[¼³ó¥û"k‘nï«l‹÷-÷J€øY½k31Y>ÎâÁ¹%pû@I²âÀñm‹ˆ 10øÄOˆ>nÌnô-Sû¥)A­Dmap*´ÔmeSLËW ;2S[g¬Ü‰ Dùìÿzñ–^\èíÞÔƒ_…}•­2ÕºQYNù^É ?«³wm&|WNŒÅñ“ïÜ;¼•è·¥nL@¾mÑ�4Ÿø ÑÇÍØMY&[¯w4uivÜ-¨‹k5™|Ay6½€šh8o§Ûâ}ý']¼x› õ² ‚ø^O2t]ÔzU±ÞÓµW2h ÄÏêì_›­h>:~—=c²/¨ø—Æ öAö=Å·-"€ÆØ¿@ ª¢›±›A};£³^7/¨Kį{¹Š«\•ù¶Å¿š8³éîå9Š\9lòqýŽ&é2 ²[Úv=õûzÀ}øY´h ¾m– 4~Bôq3v£²F9Qû…®“1ñ¥"† v çÛ” ~Ìgè¡îÌÜós éYºLå.ʸÂï«t1ù\œLä&LàÏÇÔëð­.êXywˆws¯dЈŸÕA›¶àÛaÙ 1Hã'D7c7Z¬ª1ù^Ãc¾72ªB|¿¦ÉÅ{¹ôD-/‘kã™ðå{«_\ÑüR êÏ×4¹Vs¦KQ>Ñêú %býªš(èWißÞÐ$yK³ù[•ÑŸ‹mÈÊ—§¨ß+qž$Ÿ¬cõDä_t20–ËpôÄ!Ý=ÆØ_ÚÜõ†³q¯dÐ$ˆŸÕA›¶àÛaÙ 1Hã'D7f7j›H¹ç²Þ³˜ áÇù=ŒÓWȽ‹Å:p-þó//R»Òtû#šëWåþîL›{ëIAî\.ÔN5é¹m¬É¼k`¬I×êÚ_šÃ'&wí• š¤1?ˆ´h ¾m– 4~Bô1ì¦*L¼†é36,·­~P´h ¾m– 4~Bô1ì¦ _i9›ÞN(‘ùÍkêATmÚ‚o[„eƒÆ@ Ÿ} »¹¹ç{Íÿ£Ö黄»~(µd‡ÐzàÕ9ø6KñÔ¹ÜCꇎZZÈÛ¥¡µ|Û"¢hŒÐ´¸žŸÝ?»‰<þ[ß„(3&¤Ý?¤Þà{=º9€«²ïûü :Í´™z¥ðfæ¶Àw˜ú[¾ÐÏ)mñ^ ø¶EDÐ|â'DÃn�€ìB3mæI¼¯>P2 pWLì0õwÜ (ñÞÐ ß¶ˆh�ƒOü„ècØ �ðƒ]ØŸ6ã€~ °¸3‡‡Ô4û o[D4�Á'~Bô1ì�øÁ.ìE›­—4÷©$,_ʆerÄrÂæžòm‹ˆ 10øÄOˆ>†Ý��?Ø…°mf>ô¨Ÿ#Qo0ßeB®—W4æojÖ/¬év6”ï‹H?Öúkþ·óõô3+ÝSJøû"ô[”sçq=”Îëø¸d½ûŠn.‡²ìîÏ4Y|ÌÞÌœ;X¾ˆî|УŽ8ßCê £åÇlx_ÅúOJNªú«kæ/Æòß?¤“äOU_]GýR< >ñ¹8ËÞEÑíÓ¸ô‰>`e^ÒbΟr­wg眼¦AO×ÏzwÇŽð²|‚h�÷ñ‚ö¢a7�Àv¡‰6[/:±3¸B\/„ázùžÆã´ü¦ÞnleÁåçv˜‹Mþ‚´GÙƒèêÇæïåo¹�ý¯î\le‰ì²C ªÒuz¿Òßjý™¦É z&Þm }&d“Sêò´%3)Øk“Ç\ÊÖÉIɦ¬¶±æüÛ‚¦ã74_}2&_i1Ihºdåó ‘µôg½ü†L`§×@ìøäêž=P/ÕKßÍ{FǬm þi&ð;½!]Š—êéçê/;òm‹ˆ 10øÄOˆ>†Ý��?Ø…ðm¦2í9qg¼ mñ;%ÉG™µUÙò¼xw¿8MNRoô{–ñUokÎĵ:7 óÅ„†Ã -¿0±~¤Ër—­i§7¦yš×w LÁ­Åð æºÆê¸ôíÍ®c´xweµMôšó·ôiòŽ®yyúŽÂñÍfïXûq®îp˜×qû;„p7¯¡ÞRµ‘îfýØiĤǚ¨¨»ù2•x/ܨŽo[D4�Á'~Bô1ìÆÄ¼U¿ip<0r[bÆ×6ðƒêo3§ —·ÓM—£WJä–FíϦ8ÔKJrßÉLy&šùwúÜ/)¿£EV¨B‹ãüdÁ-¬‹“9°ë›ÇuŒ|ïÄ‘{™‹‰¨ÿ#ê=?£äZ.%ÒmÔíi<ù,ËL½n=Ñ0— )T H¯YüÛ\†#)ÞíP“\»(áï:Ïø¶EDÐ|â'D7o7z€+ý¶ Ù øpˆ¡H@ü¬Nè6+Š@†›L¼öNid¬oYp[42ÅÖ’¾æ=ákºYyL¤›oN–ç~H½Ó‘ÊP[ˆzX[DêìrNÐsl¡¿Író˜obÍ{2곺S|e­‰/"êßùŽúçêÎDÚFùßËë4ÚH ô“¤0aÉkß%Ð'*ù%I|Í{"×Ç—®¡¯Žo[D4�Á'~BôqóvãK¼ÿMÓäƒ5Hú@göìHRö€Þ~ƒøY°mæ - ó™g÷¤Rk zu«·ø0ñ8J.h"Ö_›èìsyŒ*–­¿s¬E·'iVÿŽ£D´¬+Ï–ŸQ’LËRÍ¡ÛÎ\Ÿ®¯ÝÌtëëÌ®#/ÐMô±êú #EáÙ=iÐ×Â&£sJ&|ý¾?|Û"¢h ߯ ÚGˆ>ÞO»á€tBDº2j@"l‡8‰�ÄÏêm3§ÀÕëÌ­‡&BÒ!þU™›—}¹'ªìÜßËÖÀ— ä»ßĬÙí.—¬®|ÝžfF]·Gz-´>®D¹>Ö=QùB³³§ÔÍõ…¾~ׄÀ¾mÑ�4Ÿø ÑÇûg7_i9{Iý®¹#ƒ?Ä T€A:°GÚ6ˆŸÕ Ùfî °C”2ä±¶ w«³ÏEñ.Ö’ŸŒ¥ˆ-Ë*§e¯>Ñì^–c²À~}{ÐàÙqþ{•U/Šwvüü’&¼<uLQ¼óµâ¿Ü¸pL²b»peâ]-áI³ö®ãøµ^ÐèŒ/í1ÛWëhOñ¬Á3/qÜ·-"€ÆÀà?!ú¸9»ÑA\Ý>ÕƒYš ãßë ¯:ûÞ\S©³?ºŒÂ€P¶‡°Îþ¨ßéQ甆ªŽÎl+Û۾͜²ººÐ|ñãô5³6ºúUÔ'˦ñs¿“eÖ¢rx»¾Qû1«s–®Ÿåõ©=žétòÍ ÙFŽ}½üÿ{P·Þ áÚÌÌVÿEóä5Mùzt‡(5³àóÅ5Mõ˜T˜~¢ÕõJÄn(ÌVÅ’=æ3éˆÜ~:íÿ;ý·ŒSEŸ’Ö㺙ýa­)×—ûÏ]Ì>Ò¥ú—ôyö^îú’N"¸_-Ø/ùÏ—4KÆ4žª§‚ÙŒ¬Ìäê;ã‰FÕ#7‰pO,Òëduœèe,:C¯w…Ñûç[A*TûÊåK<½fuÿL_Ĺû”LÞfÏ è¸m–Á·<=Í—Yß¶ˆh�ƒOü„èãÆí¦ä¡.‘ ÓW4fAý›+[¤;kµÍÂâ·j;8%ÜùõgeñAÕ±¦Ûë¾ÍŒ]÷;&+ÖF¯™ ùË9ÿ°jNé%üÝíV„õ–y…u½…ëe}öô u›[éqŒë­´uû@ü¬N¸6Óâ W½;ÃaWÇÚ? ÁÈDYkڕͲº ßï è<·þZ kç^¡…«=IÕ»Öˆ ¬>¯*O¿�J£b�¯CþxƒÜ1¼-^;ÖçÛ¸ê/¿ËÇL-Þ‹Iƒì¥Wj‚?z“{˜WÂâ´Ø-†“^›*Ó¾Vľú*ñÂãÅù¶ë÷·ƒ—ëDо´}Ü´Ý8oߦƒ 3ß[kk3ëØ4ëe ÓíöNÿù4þ›&K6ØöŸde¹ÊVåøÙ·™±e]‹dµËOSºm¤ëÁ³gèBlÿ¦e³n+šN¬ºq}*Ü]×k §:{P·ÄÏê Í@[ðm‹°lФñ¢›µ%í ³ÈN?¦~ò†F£™Ê¹£q«×‘ÖwÅ=„õ¹ûtž¼¢‹Âöo™86o-»Åhñ:¶Ù·yûººçìô~¡3ëÅ4ºÏh8žª¥3Åv““}‹ÛD‰÷ô:tØoQÜîz·Þƒº… ~VmÚ‚o[„eƒÆ@ Ÿ}ܨݔ,y‘â²K½þØX§]~û7÷]nk2¾Î´da}îÞO4Ò/(ɡıY7¯û63¶­« QÿGô}ÿµZ7ËHoß{TkAŸ¶‘è¶ gØÇŠ;Ä·n;çõV߃º ~VmÚ‚o[„eƒÆ@ Ÿ}ܤݸ—ÌèL±•yVÂ4—ÉVâ2ûNgâùÚL½>Ó½‡°<·ùp§E¡ì²ú2ìºÄ­‹íëêBÖÅ\Ÿ®ËËgÔåqźå'A’´MD½uyö]Ç:vqýú:øä¡ÊÔí¤I?ˆ´h ¾m– 4~BôqsvS\z!QY율v É¢˜ÖÂÓr•2aš!Ë6ÿ®~S¨¯>§½,Å|ðÕŶuu᪋nO3£^¬›Úź©ìyz¬.ϺÞÛõº¹¶Ó×ëšì+ˆŸÕA›¶àÛaÙ 1Hã'D7f7e`!.K²ñ¹c]V‹r‡ Îí!ìZ‚cb–ý7]ÏxvÛ%f×»ï۬ϱ±®.ìe: g¶ßqκélº™µ×ËkÌëýB×É˜ÎøÒG™Åöäë÷7ìAÝR?«ƒ6mÁ·-²Ac ÆOˆ>nÊnd¶– ×O´š¿Qû»9#]Âò‘³j9†!LW)I>IѹÍÂBlÞ•ñÖâø’7Õù´Øöµo3c×ýŽœâ]Fzh>y¯®COBô®0L`‹ýáíýç­ëå[KŽ_ÑTìÈï÷5M.Þ«»#:k_uêö‚øY´h ¾m– ƒ/>ñ|¢LéÒ’tosŽ+ÃÎPâ=÷ ¦ŒÝ>rëÄ×öÖ¢Ô\c£Ä·½?±ï}›7ÖÕ…«þ%“%Þ‹ûO³‰Ä˜?PªëvÆ&!ŽÉBîzuüzËÜiêöÒ”ÄÚ ´ß¶Ë�´ À�ÀvmÚÄ;�à À� �ü`Ðf -@¼� À�ÀvmÚÄ;�à À� �ü`Ðf -@¼� À�ÀvmÚÄ;�à À� �ü`Ðf -@¼� À�ÀvmÚÄ;�à À� �ü`Ðf -@¼� À�ÀvmÚÄ;�à À� �ü`Ðf -@¼�ŠV Àâµþü5ûüónþQ�  D«ƒ6mâ�pP´g�þ›&ýGôàxD7kõ� !Z´h ï�€ƒ¢]âý1æ´³v_} dú·ú�Û!Z´h ï�€ƒ¢5°X:óˆú“]Å÷š úXrvB´:h3Ð Þ�E;à5Óî§ÔéœÒdµCÞ}½¤Ù¸O],¹;!Z´h ï�€ƒâ~àÝLFÔïvØùétòÍGß9Ö»¯éöæ zóÇ¥µ²¿Ï†Ôe×À¯C~¬^ooèrУ΃uO/i1Ñ1ûÿZËs@t@ˆVmÚ‚o[„e�ZMãðzA“Ócêô~¥«åWöï?)yú„º,Aý•–“Ÿ©ÛéÑðjɾÿJ‹é9 Ÿj]ßpA^\r³^^Òi÷õ†¿Ñ’¿^üFÉð&ä±£ È!Z´h ï�€ƒ¢Ñ8îcšßjõýÝä²é•QïœÐh¾Rßi‘þ€:ý ߺ—ÜÜ^Ñ€ ÷Ñït«¾¢õœFÇz°ëò-¢ÕA›¶�ñ�8(š€µÈþ’ÅWõG‰wSP ámgâµx·3ì®-&ùëOŠËp”xÏ‹� DwmÚÄ;�à hl�Âùˆºƒ«,Î)꯴H~p<¼Z’a»Ôä×°¯ ¸v®©½£ ˆÑê Í@[€x�Í ÀJxÖšëN A]šw¿ÄIfãÍr™|AY�€Ý´h ï�€ƒ¢™¸DPßÎè¬×Í ê’ì¸éö.1®r¥È/ˆ½Þ½°£ �¢»€6mâ�pP43�«¬yNd¡ëdLgý㜠v®k¿ýHÉàÇ|†^àêÎÌ=?מu±Þ¸­N˜6Ó°›Û¿âû§n\æeøÑ��Ðj|=7zÉÊ̾°.éjüŠ¦Ë…߯irñž\À«5ìrm<ßç}JÉÅÍ/Õz÷Ï×4¹fepÒõîŸhuý†±3š(t‡4ã;ÚÜÞÐ$yK³ù[•ÑŸÓlbì@�£?ˆ ´h ï�€ƒ¢±Xmù€¿,©ŸÐØ*’ íÇÆ¿9jwV¯Ý>&7BÄKñLýdž oµ+M·?¢ÉM–·‘û»Ë@õGY¶žä΀B´:h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° h3Ð Þ�`�ເ6mâ�pP`��~° ¼ÍðÁ§-Ÿ ��Zï À>?��h ��­¢�ø� Ñ��Ðj Z�€��2 ��­¢�ø� Ñ��Ðj Z�€��2 ��­æ^DËzN£ãŽ87>‡óéô'´R&Ð6xý��€ƒh��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÑ�ü��h��h5-�À��ˆ�€VÃE >øàƒá� A4������`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`O€x�����`/ úÿ:×ÓºÌ����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8h.png��������������������������������������������0000664�0000000�0000000�00000021347�15030617045�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¥���„���©·Rˆ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��"|IDATx^íÏk#I–ÇýoäY·¥nÅvN:éâCï¥/uÐÁ øP‡Ãt(ð¡›‚Š)h¦@ .(¨Åäbší1ˆ†¥ ñ"f cËNSmÔ,MMcÌNQñ6^D¼ÌÈT¤¤TYùËß¶ògÄ‹Ìß|‘¹G������” D)�����(ˆR�����P:¥����� t J����@é@”����€Ò(�����¥Q �����J¢�����”D)�����(ˆR�����P:¥ˆÒ½½=$$$$$$$$¤’S•(-7U3� yÀÏ��€Ÿ*úGˆR�@cŸ��?¥h,��»~��ü@”: ±��ìø��ðQê€Æ�°kàg��ÀD© �À®Ÿ��?¥h,��»¦8?³ ›Ù„F½¡nøÎ.»K®i6Q¯Ý¡ÁôÆ.Û!73šŒzÔn hzk—Ý9—iG,æS ] º!Íí²$·4i/s=�å�Qê°¹1ì ­¶’ë(o§4hɺ֎�@ÙÜϸ|¤ù4¤A÷AìsÚ=Mf”)—4ê;óA‹Ùˆ::/íÜš>7åÞ¡(][¦yH]±¿N‡ÎUf––«ýÃQj™“¸îN§4_˜ÃÞNÔòm§SÞúû™&½‡f_ˆNP3øº­5¥–›s´•Óú4¹¶ÞEàuC]^Û��°Ó½¦ËÑ{ê…—V„^ÓìlHÝ  vÿ,7,^¯ÂcŠ ÒÈ»{06bªQÊÜÐtÐÞ©(eÖ–IÄ~gD³„Û·bÐ].Û:âp1?§q¯£¯ƒ ;¦Ë»±g[µn¦CÚL)_‘ßQØm JS×�ŸD©C~c,èzÒ§ xLáÕG»Ìr=¡~¢š��ˆÉçgŒ(iïÔ]ª_.,+±ú€ÂÔ:µíåX UGPA”æf}™²ŸÍ_byÖ¶¿¨m÷ÕµàÖë] É"D©çzà(uØÊJ|ö‚tƒÁÅSõôø‹ýÍ\Ó,ì«Æ%Õ5ÓzJ“ ÷ÕQOÍGtÄ‘Wéº™Ñ ÒÛÔéü£uš¼Ìl—þ'z4 “¡Ý?èÒð|îä4÷ïßÓl6ÓéÍ›7†¡7ýîw¿ÓÉ·ŽÓ_þò—è8|Lp·äó3Òû9fì2íÔýÝùM/X °°‰‰ˆÒ“ïé\|A{HÓ(:7§é¸gýRìc¢ñ›Á#êqTÏ/l—\†ÏJto³¨|—ú}kúÝÊŒ .‹R7ê¸Ç‘äñ9Í?z†OECªìï¬r+ХЍî$²šÞv]R¢å¶¬í§âãí±²Ú�Ïø\¯-õÆ<6ù[gèGì/è'-Hí¹9q¾W4éó18‚?¦Qÿ«>@€æÁ×RÕ¨—(•±Nn>wÃŽ®‰vì+G§„êÍ[ñ ÎÎÈq ÁAHWÑ>æIZºwó3ê³`Õ Ê­‰ÐŠxUÇÿ' Ìð9Ÿo˜¨?þø£,¿üòK-.õ«_éúæ¿"8y]ZlJÁé[ÇIŽë;öïÿ{½ çóò“Ëψ˜ÊЦÖ/ *Yß>¦‰]‹«˜&ÒÚJù˜ ÷ïJX¸çërHžo•ÏR~'ý�o»«ƒžíQZÛ»”¥‹(<hSwôV­ùHóɱò±©7ùYmj†V¹w1{EOtD9«ÜæÜ‹R¶/m*J¥»>ò˾ãfåö)âã#1hÛ9–­÷dðËãsWØÒ\3·^ïõfÛ!+²µ]÷UÝK€øÇ?þ‘ðÁUHœŸ¢àë²jÔL”ª›OŽ—›–é09µ£"ç#¥¬¨´ G"B # ÖÁjDxšeƈ(ç ¿—¡É£{<PuXôqÄ“…ào~ó}}~öÙgÚI°0äuEE3% û§?ýIŸ›óÀyá<ñÿ_ýµÎ"«ëÉågîD”:QN÷·ˆ"•ŸDÒÇZŽJúHœoÏZs)‘BíùAû)õWú§džâIIÉdü¨ÚE!?ÐlüÂøß•åöØp‰,¡™3Rš%J£my,q?#Rj¶=cíi–­k6µåÒ ØÈŽI’¶’ál]œ­˜€2aŸÏ�ö÷$(;qûÃ×BQy®M©(5O™6ò¹`Ç{¸ÔÕfžÆ&Ÿ6åF÷ˆR¯cÔNß4(fýæ¢ÔÝT~BÊŽ‰“D<YVγD]9¯œg«\. ¯Iòù™M»ï/Yò«D©þß7V•É/J×ù¬H´h?õQ‹ÐÞà‰J4é?M=´‹8’ý“y2ç˰ £mcEØÍ9 ß·²ÜÉ2ùÉš9EiªîVn›ÆÓf$÷_×ljK_™b–lusI¡; š˜ÖÁþ’íÆùUò›ìßóù¬O£ÈsmJýDiäl•<yI½}ßS¥Ì 5Ž6è>§s;†Éç`Ì“kÒqšeÆqg¥âT–’Ùw•£eÀ‘EŽ>J$”ÿ®s×8çËÀeá2±X…@ÉçgÄ·Ôœ§x tzi–D‚+BÓ¿­ßIò‹Òu>K#Bñì;3ÄéÖD [G=ú­×oºø„T\öeŒ zgôή,w²L~²ÄcQ*ÜügmëA¢¬nS/kYûgµR›ÚÒ3<Í!ËVѼ†DädÁ=MìøoÕ€(­¥(UÈë¡RNYÐ!ËÁÛ'æÄS¯D_Sc†Ä‘g Q�÷é”…êÿ‡”±/(“Ébë¬É¢ËÄesËZÕ¨oQä÷3"`ÜÉ'þWBE~áìœNŸ}CWgßâø$íkä·¼ûóu‡oÌ1xìaÿ•:6B»R”¦ºç×ø,ƒŠíuyðûÍ$6O"¢îo™ÀóÁ_R,ljó×î;¢jU¹Seòá„›¿%¡¨¶uÅa4¡(YwÙÇõ?$ÆFc€­(M)ë"õб–·zL©›W¶Ñ GÁ‘øzûáü9ŠMÝH5ðÂþ‘Þ¹‡‰ýd(­«(ž(ýÌ`q%“jd^¿ žzj—e aš›Ê)ôBšñ„½Î\Wë8êú&<¦V4ûRÒ#êj¡œŠÌ‚Ò`ÇÃÝÛœ8šxŸ¢‡æn~)Uð®áû1?ò¥!s?ëä{y~ôîd% ߞ鈠پEÝׯ“¿9Zº˜Ç³òµáYèï`‘ódS#Häx6Z¶ÊgiDôÅÑÓ¥hª+¢RyZÌßÐÐúÁ¤h·X{$Æ^2Þr»o6á䉖ê.pYÏÉöV--Wû®xy~ÐЉSwÉórZ©Roti÷)œ9¥L¼ !mkOG�gÛR ^%6ã™ö"„îõ¦Dn§¯èYøÒ^§"ú¥îVEµïÜ£$¾°Ê=c¥µ¥«à§Î×4<MÝ|CïdvbŽn P"Fù©ø¾Š1Wœß7{TÑé‚û†ŠE¶×z2tÇÀÞ_¸§L&4U=0QÚDQª»FÆ]E~Êý‚zòÄy§XQºQ7Ø%üÌŽ‡Å;"ÄëuG›ˆRP><Ôà× ™¸ Ì'r‡ƒ×ñ׫î1Ü[Ä>€'ƒÖˆÒ&ŠR{SæúnõÖXA*çA´´4Äùð_ G ÄV<¤¡ép9(3T‚ÛßÐ °KØÏÉØú:õA”6R”‚û„8ŽÞ—èß] c¬8‚Ðä±¶ð3�Ü/¤ÇŒ»ìëÖ&@”B”‚ÃbŠwG7YXí ±§¦Ú~€û‹:?ZÇ‹@”B”‚ÃR¤`{D˜ÖeÌU^àg�¸p7=ßïuîý(…(5…ÇE69ÂW$"L›8Æ~€û(êþp Q Q j‹¨:Žª2lK¶iÓD>ü �÷¥uŸè Q Q j;ž¦v7— Û´io/¨¶ŸYÐÍlB£^'þÇÍŒ&£µW~Ýiæ Éï´ žóÝöúé|'^œß¡Þ¿Q{£—Õ§XeuŽi8 n º¾ðë£×|Ü ›ÄKùÓ/øßšŒº­¥ù(u€(ÛÂ]ÍxéÝÃ6eÛ6‰Jûùܤʣ‰òIN%(v!�ìwèãóíóyÎnóÖ|u»÷9;_˜Z²‹|µŠËÕ�QÊŸ Ýßò×úÓ³mý%§ÛùõÛòmþûDi~Š<צ@”‚Úkgw4Ͷ•/бH´lWQ©¥óm Îc®Œx®ŠÚæe•]l$¯ QÊBðñó;ª+ØOh[!©?¿ºEº!@”æ§Šþ±´AX€mÁµ³;šfÛÊ—§–¢”?å<¦n°F�Ý™�fª(J¯ért@ÁÕÕ§uÝ›oúC”ÖˆR•'û·p ,À¶àÚÙM³mžò˜F=îNÿÖ_‹›S›—µŸÐÉè NŠ»–õÝœ®fùÂÛÍŒÎ2®’÷=¦Éü#¯ñ7W|%¿g¶ñ?Â?f4gPûèH‰Éø|‹ù9ÕöæêÏÍç™e g÷MÏŸë}ööö•àyo©ÉS”ô˜Oµs¶ÑbéŠf“õÚX8ñxбÚOoÃ_>zIS±;µý˜z\†•¢ô N†6o짦·±á·ÎUžúgÎ'«+Híq÷öZÔ ÿ¶zß›K #[Ç)ª«¨ë>®Ç {DGmâa®A}Iùã¦í»õÙˆ7¸¦Ù™,çÔ¡þäÊDlÓu+¿Õ±zGœ.û;Þ²T JóSä¹6¥´UÑ `Lén`›²coùüŒŒOšúÍ¢!øÜD²<FòÀŠ+Žp=tNò··VT\…tñX¿µ‘Ò_Ôï}%ʆ4•ÏTf;´Çâ2GÇ»9§Aû¡±¨ÖëíÄîè­:«¬{H½É»xl+ Ÿð’nô¶Jl%Ê$Q9Gä¹b(U¶XäË~vÌiw¬¿Ó¾Ðã  z%‘L¹ƒîs:W"UÖ­¥"¤D0rY~VësØPÊ¢ËiòìÙ:_"]W«öuó d±öÎu ¯5ÛuïÔcÀãq%™õÅeL׉‹\Ç|L%Dõþ)ésZq)u­Çÿ¦ëÖù<¦ðÊ>@T�ˆÒüy®M(µƒß§‰Ù÷w;õ¦½«4¯ŸqäÒo-JU£>ø6õsWŒø~;¤Ehú·ìëŠ/{^žÀ²Ðb§¯Ä—"K$ŽgÅHЧɵͯ³þcômöd2ûf”ÉækY�yò½T¶Ô~ÎD¯Dâc¼ç2Ç‚Ë{üO÷½=¶¸Š<6tÈz̪<¥÷5Û(?öwlßT×½Çvñ·ô“I¶Y× l‘.׺ßÕ�¢4?EžkS JAí÷”ò î¶%ÞS* {†(UM÷L‰™¸«9´âÔ6Ò«D)wŸž¾Šºv#±±‰(u£l×4Ú‹Ì4‰ãyŽå¬ÿ Ë¶& ¸KQª×»Ñ˜Žá\K¢/‡ ‹ù”NO¸»›ë:Kèùóäß×F6%º¨#ØÎìøtä6ÓvYõå³™Ë&6Ryœ~C'2Ô$*Wºœ«ê¢< JóQê�Q >Žè}öÙgQeÀ6d[ògúšÆÝˆÒ”ˆÆçíÙ(“m¤ÓξþÈt=ïSoÒäâ,)6–ÄG†ÐÑQ²‡t4xBûK‘-‡Äñì+¦2"¥F”Jô0MF™l¾6™ÂÊîg×'º¨-RÞO‹”&_‰´™ ­xl÷h~G“§©rº¤ó´fß›·4ŠÆ›ºã99oc:tÅy¦í²ê+eÛ%²#¥úz8ʾzÐzAádJ“D¹Òå\UåQšˆRˆRð©p>>5úi°í؆M±(µb(11E5æï¾§á¡ã(ãF¢T‹¿[º™…ÔÓ“SÔ~Ý…Ѻ…SªÄÆÓWôzø Íu·²ˆ[ÆŽGu…¤Æ._)ÓØã‰˜1BL¢ºì8D.O@?üý»Ïƒ. ÏçJèð¬ú—Ô³8²ç‹Þ+j[!ÙéìœNŸ}£Der½f©l2¶Q„“¼—Õh,Üú¯hvk»öí à£1¥œ÷¥wŠàJ)]ó¸ E(ë<˸Ð6==yIÃÓôdž¸ÞÏ.þHÏN^ÑÓÌ}gº¬®ÈŒa;<Iæ)Uîà­/±­+ä]ÄF2¦4¹M\÷2¦´uL'¯_Ðéü§TÝzêº@”æ§Èsm D)¨5¦ÛÓtAÊäö3N4‹'Ù¼ ©ÕîÑxªDÀíŸiüì5X¡*“pXlÅ3ÒY`}CáÓŽIþÁYdz¥Oit¤tžÿî@|,N­Á„¾g‘c'}uŽéÚ«^>oU|<4J|D³çUÞ¾zN½–ÊÇh¢‡$¾�¤ódz¹­Ø’|ˆ°Ž~‡4×ÝÏ,hty•Üžóý.=ûþ^‡_(á#¿­0ugØkñϾwót‡ô¢×VëG4ñ~¥È=ž<NÌ6AËùáz?ÑQšEa§óÇ“µþ¾b_©œ?'±è¾üžF‡ã8OÞz4øëKg¼Oád›6u»¶®"q«ˆ®{¶Ý˜ÎF¿Uye‘I牺íÑà‹T]WD˜B”æ§Èsm D)¨=,ª0Æ4l+¶Y“)Ó?ѰOx±:P”iC%vÇ_Ñi"rkDí¾7zz×xºïDi~ J JÁ]ÂcLYd}ýõ׈š®€mÃ6b[5q išÆøîR=ìUê<µ£Dêand’áá!ý'4ºÌ!|‡ˆ(]3ü£Æ@”æ¢Ô¢Ü5ï߿׎©©“v>¶ ‹Q¶Ûê>Pw?cÆ„î™î`B`—ƒÍ©„ Éq|Mšnò¬¡wMº{¿™ÑRˆÒüTÑ?B”‚ÆÁ/ga qj`ˆ=îÛø�î¥ù(u@cv+ÆØYÝ—è Ãe•nzžÌt_Å9ü �÷¥<Fž…]]Cƒ(- 4 (øfggÅ×Ü—_~©ZDze§Æ"”Ë*ú>?Àý@||Ýûï¢àóU ˆRpo`!Ê‚”…)_üdÍ"îÇ´[ÔÎ;GEˆ6Ytoü ��ø(u@cÊD*?]s÷>ws³ cÇÑÅ*Š:ÎçóÈ‚šóÌyç2ð8ZÑeàg��ÀD© P%¸ë[DªDYðÉày^W”Xå¼ð¹øœ"@9/œ'þŸÇŠòºû4Fv[àg��ÀD© Pu¸kœ#, 9Š*ÑIW°rb!ËÛ¸‰‡°°tSzN¼¯GŽÍÝãrê<Ä Làg��ÀD© Pg$šÉ‰hZlr4SĦ¤ô6œ$Ë ‘Ï»~��ü@”: ±��ìø��ðQê€Æ�°kàg��ÀD© �À®Ÿ��?¥h,��»~��ü@”: ±��ìø��ðQê€Æ�°kàg��ÀD© �À®Ÿ��?¥6R¹©J”–›ª�Ð<àg��ÀOý#D)� ±ÀÏ��€ˆR4�€]?��~ JÐX��v ü ��ø(u@c�Ø5ð3��à¢Ô�`×ÀÏ��€ˆR‡âŒqM³Éˆzí ¦7v�à>°3?³˜Ó4P78¤p~k‚r3£É¨GíÖ€¦ëLžgÛ4këö–æá!íuCšÛ%�ÔˆR‡Ía€Ú>J®£¹Ò %ëZÔ ßÙ†Ûé€Zz]¢€{Ææ~ÆÇÏ4é=¤½Îˆf »H³ ëIŸíWj(JE°éüsêPo4¡‹É z¦}ä; »-»ÎMµ{#šÌ®Íq 冦ƒ¶ÉÇZ¡ùf£Ï7Ü6MÍë€ð=R5j J-7ç4h´ôirh!̺Î!.ýÎÒÓÍDéâ*¤Çé’ ª˜©ê© |R>®'Ô ¸,ûÊwüb ò°¼…pYü@áãçù#x°Î-ægÔW~4èé,—×4;R7xH½ÉÏv™;)ßGšŸ?WÛ({ø|p!Xaº‘Ð̳mšO¨Ûœ ½¹[ªâwêBíUZŽòÃ>Á)¼úh—YTãÑïO”kõ³±(½yK£îj à$ªŒ\;ÇÇÇHM\Gü·l¶wº,Ê©wòR Ó —ö/Û —kºP°•XZÃ:ÿÅbøàíµ‡4½I‹ÊÝLŸS/êiò•O¢•»k~&JÑÞÜ9|¿7%AQçÉCi9ÚÊ:rPgt©\¨ð‘®Â§4LD2œ§ú½õQ ¢ôfFgƒ®ížQ©}L“¹¹ÖAÈ¡Òì¿-(¹vª z€®£Z‹ÒÅ%öŸÐäúMþRtP„Ë#œp”‘}ÄêßÐ\o¦|ÐäØt‘·ŸÐÉè 壮Œ åe:µ¨;úÓ•<¢ÞQÇ, ÿ¦ÜÔ·4ˆüQ@íþ™=®"áøK=¤ÙO]ö_ A%ÝÒiÿ™EZ˜I4U ôƒ®¼PÂv6¡Q¯C­§!½Ú<²ß¼úÎåwpàôjñ>nY;ÔŸÇe]ÌãýÚ©ÇÛEBSÙxª¸M¯ïÑx:·e['JWwMÝzÆ«.æç4Vå^>–ç<á%ÝøÚ›R„~³`[Ö"ËPE{•–£íŒa»”Ü‚ñ3拟ø‡ÊÉwix®ÔâŠ&}vF”š¨©q�ÜuràŠ\;>Už\Wn JC®ˆÒêÂuT_QÊ>äuçJÚˆ˜s»¶.êO®x++8ívúúsÍ>¨Ã±:°=5®X’È£%‰ »\O¤á‡îÇê¸r,í4ÂÐú:yàNù¯$r®t9²ò‰hRb´; “ÉL)öÅ+­ð4~Sýn÷ÕC¾¢vVyÖ¿*qþVW„¼ÚÚö¿¨<ï«ó>§óùÇhèM}ì–¸â磶a(]yÞUuûny¼ª®“vêXÆÎ¦üè üAÇ”'Úoe}màz©;E–¡Šö*-GÛc1QG=µš›œé0!Íä·»-³û>íV9 8Ê ×Diuá:ª¯(erhD cÇ–&»ðÓ‘D…ez;½Ï%l¿¥Y¢«<-–Öˆ'…뿌ÿ³5ÍV¢tY|1ì”ïê¿M·¿oèTš¥<˜ISé߉s$¢Ðvr/{w¦lèæ×µ•3™)‘Äϯ²ëšó^+a¹ªnSÇ6u’ÎÛà?é‚ó¸4Q΂6åÎa»×"ËPE{•–£­!ã¢ôžj<Ͼ$Jù•§¯¢.•h[Ÿ“ÈÚ”†\;¥Õ…먮¢4Šî©})!b<¢4!¸®iöM÷½t±kqšKÙâi1ŸÒé ¿šˆaü—Û{³ÄJ‘#_ßøXÅ’ðN–Ol’ÝuoÉ%J}eÏû:ü"Lp··ÿg ¾võ¯sËûaMÝ&÷7uâ{P°Ûé}<@”Þ9ÛÜïU£È2TÑ^¥åh{c8Ýi< a?å”O´†D¤AwíSoÒäâ,éRNbå¶ 4äÚ(­.\Gõ¥v‚Sª‹ÛDÃÜá;Qª}O+9Ä'z祾´ ò $ÛÜîÑ(üŽ.&Ocÿ¥ó‘ŽvZÖ‰œè &î˜NËÒ¾éòÉ0‚¸—ÊK.Q*ÑNWÐÙeJl^^¦ËêÚÊþŸ½õÙUX}ÞÙb]Ý&mÚŸ]ì13¥wNEV^Š,CíUZŽ>Éâ\½ƒöÅáØåјRŽ6<TŽ^9Dë$äé¿õô½~Csë$‚Þ7tq: ƒGÿ”½­=(¹v J« ×QýD©’—cê¶<"Â>ìÆ“E¸¤ÆŠHR¾dxhÆB&‡‰˜êÓÙÅéÙéÑw»â)òC¼½ˆÁ6=UáC%RÍ zgÒåõw4+?˜ð_#:]k¶|Êí]œ9ãCm¤4Há&½Tì[ÝÉH.éˆk:H v´Î(ÛÓåò³:ðÐ¼Èæf<j4¦”}y$Zy_±3×ÁSëüºÝñË]yÞuu›¼’O™Ç íü’úªNnõy܉jTyaò¸¶¾@^òÝïÕ¤È2TÑ^¥åèÓŒ!O OÉîŒÍà€¾zqD-Ž:L.é'qÊÚ±žÒèH9®ÈÁÛè<Órô×5Û‚²k¢´ºpÕM”šˆßï*%"l6º'ë¢tÄ3ÒMýKšŠo¸ý3Ÿ½¦;#;N29‰— éEïŸããF甉5jÏ(?Ñ‘#ló74tfn‹°Jú/žtãG H¼<Ÿ}E§zözVyÕ¾VÌ™ån׺Š,Ù¯5xM¯ã¤›h©²Ç,Œgг¯å`‚=¤[Vc¯¶óÿÎ[VTŠfß[Ñ(çIÔ¥°ú¼+ëVŽï HÖ‰+ÚSyLÔÍfõ6‡m\wŠ,CíUZŽšpñ€rk¢´ºpÕ/R À&XQš5V”Fî÷"ËPE{•–#4`[äÚ(­.\G¥ ™ðЀ_ãõ€¤ ÷{‘e¨¢½JË °-rí@”V®#ˆRÐ$âW?¹oS�U¢ ÷{‘e¨¢½JË °-rí@”V®#ˆR�@‘4á~/² U´Wi9Bc¶E®ˆÒêÂuQ �(’&ÜïE–¡Šö*-Gh,À¶ÈµQZ]¸Ž J�EÒ„û½È2TÑ^¥åعv J« ×D)� Hšp¿Y†*Ú«´¡±�Û"×Diuá:‚(�Iî÷"ËPE{•–#4`[äÚ(­.\G¥�€"iÂý^dªh¯Òr„Æl‹\;¥Õ…ë¢�P$M¸ß‹,CíUZŽÐX€m‘k¢´ºpA”�Ф ÷{‘e¨¢½JË °-rí@”V®#ˆR�@‘4á~/² U´Wi9Bc¶E®ˆÒêÂuQ �(’&ÜïE–¡Šö*-Gh,À¶ÈµQZ]¸Ž J�EÒ„û½È2TÑ^¥åعv J« ×D)� Hšp¿Y†*Ú«´¡±�Û"×Diuá:‚(�Iî÷"ËPE{•–#4`[äÚ(­.\G¥�€"iÂý^dªh¯Òr„Æl‹\;¥Õ…ë¢�P$M¸ß‹,CíUZŽÐX€m‘k¢´ºpA”�Ф ÷{‘e¨¢½JË °-rí@”V®#ˆR�@‘4á~/² U´Wi9Bc¶E®ˆÒêÂuQ �(¾ß›Š¢ÈsmJi9ª¢1@=k¢´ºpA”�@>ŠôYUô¥åؾvªŸ J� ºTÑ?B”‚Ú¢©Ú©làg��ÀD© �À®Ÿ��?¥h,��»~��ü@”: ±��ìø��ðQê€Æ�°kàg��ÀD© �À®Ÿ��?¥h,��»~��ü@”: ±��ìø��ðQjaC !!!!!!!!•›ªÂ����� t J����@é@”����€Ò(�����¥Q �����J¢�����”D)�����(ˆR�����P:¥����� t J����@é@”����€Ò(�����¥Q �����J¢�����”D)�����(ˆR�����P2DÿDÕ׌£û����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8i-1.png������������������������������������������0000664�0000000�0000000�00000021155�15030617045�0022710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��k���¸���%›ÍM���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��"IDATx^íïoÇyÇùô¸ ôßDÞøEqÐk ¶ƒÀ›€¨¡J«šA/aQ¬+DHθT�¹J®f”¨¦-_ÊØ¬0¾Øu¤X´OŽlEe±b›¡.P™&ήÄ0—§ûÌÎìÍîíwg÷¸»ô÷ xÜ÷sæ³³óã™ ��y k��È5��ä�È��r�d ��9�²�€�Y�@€¬� @Ö�� k��È5��ä�È��r�d ��9�²�€�Y�@€¬sÂÄÄRj ¤~…œ€Òy/àWÈ ªÀ,.."!íkâ¼§ƒô€¬s‚.k�öä½l�YçÈ{Ù�²Î (0 -÷²dP`@Z ïeÈ:'D/0Ô°Šâ<NÅj‹v©K­jIûß{\¡Ò¤m± €>ÑóuN0)0½vÊöyVƒ:Îê¶ÎP½µ%þsé4Èš(’ÕØ�èYgÈ:'˜˜ÝV•ŠöyN-šE}’*õ«výZ§GÛÍ*LÌP½}[n  {•êsG©¹Ý“ÀÇÈ:@Ö9!®¬w6Wh¡¶¦‰z›Öës¶¤å,µrÚ¶‡{ T³&m*ׯÐfë4UJû§ö=x̺­|pP¬³dbɺr‚NU—i½«”ºC›Ã¶¨§©Úº"Ú¬E{uïjÌÙ.Õh­uŠÊª¶-šI¤”‡,u6€¬sBYO”©ÙÙ‘[m¶›T)8Š[› š+LQ¥yS6‡hEm[o&ùhÈ1òyÁ²ÎuNˆ^`”d¹öìíPt:‹dÕW¨.š3Q£³%GŠ¢³­s´P*ÈÑ!ïQ³2%›IÔhÿ1à YgÈ:'D/0»ÔiÌÓ\ãÁödY³ž(¦ ˺P"ëÔZM#*ÍÏ“U°ÿZ T_»HõrÁ>Ö¢…Æ›´tŒt 8P@ÖÙ�²Î (0 -÷²dP`@Z ïeÈ:' À€´@ÞËuN@i¼— 뜀Òy/@Ö9!÷f·EÕ"ÏxÔRÁ¢ÚZGŒVqÇ„‹ÄC 0SŒ3ÔÇv¿'·Øˆ‰:Úséç¾¶<tßrã¨ö:N*X'h͇ޣn»áÌØÔÞŸ—mj7¨äž{Ki,Pia•:òý3õgå~ÿ d.uN8†#üñ¸ožô.§»«ÔRöŠšè6µëGȲJÞ1ݪTyú¼3öÛ‘!Ï̬ÑÒ g†ïS32ÕërÌk²/ÓÞ:ÕËSbÈã.O*. ÄCÂajlvÅLТz_âýOz†K²°§r,j²ÎuN8p²îuh­fyg@Éšåyh‰Ö×mAêÇvß¡¶¨ ëBæ§½J¯·ÛÃ÷ñvMÖNœ“)7¾‰±{á÷[òÖèÅÅc¦/w~®‚ºýxnÖ¢ÙâÕ×Ë d ’²Î ‘ Œjr(ÌRe¾lŸ+k{½Mj.ðÿ|k>IGàSÇçéÔIìdo?õ5Äqò»VÚY;aKI;O¾ãmÂÐ’šU¡ÅØ.XT=û"µÝx%6²îµ—èˆIÂ5ÞÙ€8$^!{²O¼Žó V•Î6ÛîçŸÅ½(ðùӾб¼­Ü^%¾?ùžíç=d×è·Z5*•jÔ²?d ’²Î Q ŒNkx[δs8åTt¹Í‘-×xo9Ûõó¸–y‹g<:ÓÖ&€Á¦pÈšus•ª%§©Áó,²æZì#RÐüx6 Ÿ¡¬‹Ç¨ùŠ-Uќћ"¾ ÷»â©ö¥�Yk³AuYókñÔýû©$Ä Yƒd€¬s‚‘¬åí¼. ^§E+õŠèS5ßcý7ú5Q'•d»³ƒ8γ_&Ï‚QÍ ÛÔåÚ§O”²µiͪ=ç@à(SYógd©NSa®A›ò9ã6ƒ8²¶Ñ K4kÝO“5H�È:'D-0Òeqv×ìí4-47iGm :ÖÿXÔ¬Ëâ<o­6*JÖ,z)Jk©ºÕ#k^,á8Íé5iñþï5ü>qdm?Ï9ÕoÚ~[Ô]_²ÒÁ(š9¶D'©ÞÁèÊÚ¦'"æ{$YgÈ:'D*0Ú0¹¢eÑŒýW<>v†–9õD™*Õy»vm‹ó•óƒCêøXý¼êÚpÛ¬'¨P:Bg£Æ°ö ÝsjæJfê5ûIb§äÍ©Éýj 2GÆîyžš|ð>qRÛ„°UloÞÆïË®õ³¤ù}ù‡*Á«‘,ö9jØŸþ¼}9ïP§¹HÓ5H�È:' À€´@ÞËuN@i¼— 뜀Òy/@Ö9¤ò^6€¬s H ä½l�YçÈ{Ù�²Î ñ Œ\øÖ3Cpüx†ÊÉÔr7bèœã]W¾çKÖ2½6t_úëˆ4IVí‚!o0’ž6YG0"_¯C­FUm,P©r’ê•Å}ýžÇ _ d.uNH¤Àèq,öÏ$_”;%`Ïižx²DsÖ,•<SÛùأΤñYäLJž-øÈ½ðô°}g¨Ýs^Çy][¼b,u&æÐHz qñŠÆçLî™(-P£­ÎàqØÇœ�È:@Ö9á ÈÚå.XÖ2&Èúë¾àM¶dßzË© ëBæÉ'¯_¡v{ؾ«öv]Ö*0ÕŒwdÈrɰièb»?Öö²ÎuNˆ\`ºëÔ¨È{¥Ejòm½&ë^g•ø–ž÷‹ÀM\+T3ó&ɲoãëÚl¾‚5O õ×™1â¹T“‚ž.,?¹ßå.PÖ\‹=´d׆‡o²ñÙGà>ù:â}ØŸ¯ºLM·&ÌÍ1C"éIDsÎ@4¾·`WûÜ´´ßðwÆ@ÖéYç„hÆ‘G}늀Bw9Ó³$ä‰,Çû'¹Fy[ÖFYJ3N RÅ‚6AÔ¬ƒ£Ü¹Õdí†Eíšë@ð&CY«çé_ð¦¾|"éI„¬Ý÷¨¾³_É �d Æd¢˜ hq6YïP§õÕEí[ÅÚØ¦·Z/Òj£NÕêjunS÷­5WT¯Öh©¥uª‰çÒkÔ*ˆËmŒr§$Ú—µÓ$á}NÕ\¡a,ëíÊàMý­hÿ d.uNˆV`ùx"Ú1®¬wœ¥¢y„×ôØ×Ä&·ô…+ÿ‚~®?Ê_ּޛ@ÄN›~lh–ãÈÚV´¢µ¿¢‹nP$=Űh|âÎe’&J•þŬۦÕÚ ZñÜAäÈ:@Ö9!r‘£.ø¼Âìaª®¼HO«UZlq®½##Þ•æ©ÊµkÕÖÕÍÓ¼žÆ"Û¤VmÞ]mÆ¿BL<C÷„°õ(w¾4cÙäǪ¦oâWû•Ð…Œå6ýX&pŸwˆ ¶’,oïk0’ž:Ï|@4>˹jõ?“gdHþáÏÄ@ÖéYçÈ{Ù�²Î (0 -÷²dP`@Z ïeÈ:' À€´@ÞËuN@i¼— 뜀Òy/@Ö9Á¤À8q8xxÚ$Y˜JÚ,A/Ã"òñäî—¿z½N“jµ&uzÛ´¾tœ–äxjsxœöêÏZô Ì)ÎÐJ^qþŠø­½– ël�Yç„èFÅÕ¸B<®9hʶŽ;aÆ'åaÛ3}ñyä¤3 §óUGJ•'È,Q]L ÑÂ7=}O¶¨uü´Ù„¢} ×^¦š˜ioµå|YgÈ:'D/0\+ž /”%k5ñÆ~ßí T-¼³1uÄäž™h Z<’h²îqHÕIÃÙŸã†~Uí I÷6uÖêT[QSðû@ÖÙ�²Î Ñ ŒoÆžeÑ ?–Í ýæž­'§¤{¤¼C梈֢Y_P#â<žÕ7ëÎt17z›Ô\QÿäìÇ-9›±X9A'ùõ stjuÙ‰þçNýVáKûçéê ZÌ@¤¡M<ŠþgâãÏíLµx®‰"ÍX3Î{=v†–ÕLGÏŒÈ2•æçåŒF~ïoÊ&#žæ~­ß|$/Îùöÿ›´V“³µéßÐþ*‡ßB4Q|Ž­5ç7(ÎÓ©“2jâ©ç¨!¾ÿþwø»‡€g ët¬sBô£×¬õøÜ>}—ŒÈÇñ.îr‚i²5Á¢Ï T4BÖ6B B<[NÈP8{Ú6) ƒã¦h'w¤á<µ_ñŽÛP·œ×öTJ=ªžøÜ2ŽˆþX¾×þÔsýû”²ñJäâüùôóÅ4yç5Ä÷#¦´ËïB|þœø-þ$:âù¤l"꟣ßö|Ëy ý÷¯=äwd 뜜¬U§¡S3ã$$éÊÚ¾Ö+¹Û÷µ‚|,ÏíuZ´R¯8µ@MÖN“ÄÇz,‘¼™)éûeRïw¼üÖÊ)gi.uÒ«?ö¼?Æ/ë~3ˆxOÜ'°£(kù;èï[~o ¼7ùž>ÇÀo0ðxÈï._j|,Y§ d¢˜a²–5¬…UgU…&QÀeÍLD§ S³ÖåÀ¯#¢ëMÓBs“vÔ¶0²µÅ²8/Ùú´ŒÞÇŸ[HU~&cYËšµhî™v‹ó9\êMÏ÷Öÿ~TÍZ.±ïŸï½ÀÏ1ð <ò»‡�²ÎuNˆV`Ñð9¢õÿìÖVY>;ZÛåD¡DsgŸ÷DäkítÜvU§ÍZnw¬åEHD>·jçÇn[o™*Õy[\Ót´z$ Vl ÐRíÆ,¦[Z›µýú¥#t6‘µ U§#/h{Ô®•¥leô=^a£í>^>»(ß+¿§-­Fìȳ¿Ò?_ƒÚ¢ýW6‰híÌv{}Ép(Úœwûß-ÿ6¥¹ÁÑÚoXœ!kFý>‹tvÙ÷9Ž£Ši°Ÿ<¿GàïÞuAäãÈ:] 뜀Òy/@Ö9!õ3Жܯ±U¸AXÛ’Ev'“ü~È:] 뜀Òy/@Ö9¤ò^6€¬s H ä½l�YçÈ{Ù�²Î (0 -÷²d‚ oCBGÒQÿCÖéY‰ÿ»ó;j^Z§g_|Cn‰ H‹½òÞ¥+×éÉs¯Ñû|(·€q�Y' Kš==ÿ]šzè-ž|^î‰d Òb¯¼Çùó:§o?sÒu‚ܸ¹EŸ]|Ê͸üøÍö¯éÃ?¤ëׯ‹d d Òb¯¼Çùž+%*ß—<Aç^º"÷‚¤€¬‚3¬ªMsâÛÂ;wîÐo¼A/½ô’HüØÈ¤Eؼ÷ËwoÒ_Ø¢VeàÄéçEE$d�Üô¡×¨¹ ïæÍ›tá¨?øàyFt kQòÞfçés_=ã–…'–ω²�âY'€~ ÈŠœ9•¤YØ·nÝ’GšYƒ´ˆš÷¸òrÏÃK¢<|ú‹ß¡ÿ|þ; ë˜ð­ŸõíˆÛ>]Ô£oUCy85H “¼Ç•U.¾òØS¢<Ĺ³ulXÐ*S^¼üKºté’+ëp™“…ÍË1AÖ ›˜ä=®]ë}8\»æÊËî.b4šYÇ@¯UsÆ|÷Ýw]Q·ÛmyÔ^@Ö Û˜æ=Ƨʇª]‡/Àd½­ú_Ÿþ©§C1|/8d ²iÞãa«ª|pâÚ5— %¢YÂÿõŒøÃÕ5WÔ—/_–G…²Ù&NÞÓËÈñúŠ(¨]›Y¢w pzzeÕ•õ7äQa€¬A¶‰“÷ô»Ï¿ú‡ÓnAÛut kCôLÈIeBNÑ&@Ö Û$%kNª)Cù¢Y¢÷tsÒe}òÑÃ÷ ëô~EÏÍßKS¥Èzð^*Ý÷5jvväN`J’²þ÷Æó¢Œ\»vMÂYào¯æd&ëð@ÖaØ¡¶>¢?ˆÇ¿£å/ÕØÿs’”õ×ÿÁXËÉA²6@²§RãÙAÖiÓ½JË•¨4=k׬§iêŠu$)ë#ÇžtË â†D²6Àß¹ÈIÝÞAÖi±KÆa*×ש'þÝ ó_ž†¬ IY?´ø}·œ Ý:µzü^• ëôéu~L‹Ÿ¹fìZõ§î>BߨÜKÅÒ_Sý jpqˆ“÷üåD—5O"ᬠ’µCÊi·w5H Ó¼ÇSÎýå„;©r‚ñÖÑ€¬ ’õ?}묛 ǰ²iaš÷‚úv8©r'¾ûÇÈÚ€ Yë·wI„DõYƒ´0Í{Aå„dmdm@P&¼ïKO¸™pmqA†·!!#é¨ÿ“µ^N ëh@ÖøÔ¨4ÎLhZ`�ˆ‹iÞóá¤ßBÖÑ€¬ Ö§ÆZCÖà YgÈÚ€a²VÃ÷8TjÒ@Ö -Lóž?$'½#²Ždm@Ð$Nãk Yƒ´0Í{AeDŸnŽqÖÑ€¬ Ù+#&`²i‘¤¬õ d ÈÚ ö8]ÖIµ†¬AZŒKÖX@7µ!IȺ׹@5kR†‚µDë]Õ"ȤE’²Våƒ9E²6äÉs¯ dÄÇ¿÷lYߦöÒ1ª¯ouרZ*öƒ�Yƒ´—¬A4 kC‚ü›ßâÙâ®ÏP¡Ò$[Ý@Ö -’’µ¾¬dÈÚKW®dÆx²ž£¹Æ;¨YƒÌaš÷~lÅS>0Æ:µ!Ac­Wü3Ys3ˆuœZh³Ä4ï}û™‹žòYDz6Ä/k=ô#§Ðô6©Y;¹çZõì¾Aõï¡©OV©……³Å4ïùéÐea{Ѭ ñËZŸ™~ã6­/¤•MõuZ¯P{Hí²Án‹ªSuÒ˜æ=ÿZ¥u< kCüŒúŒ¡Vnîuh­fQÁ.\D*ש=¤%²Ëzò>zhîº{æ¯hfz–¾üÔUê:+èCâä½Ï.>Y'dmˆ>tï3 ýLÈikËAÖ!`YÿŒ¾úòoÎwߦÆç-:yí#±˜'ïù›Bœ¬»mjÖ+T*Žÿ޲6Dïé>ó×=²ÞÝMþWƒ¬C0Р‹èÁ¢¹1‰“÷üqtÔh¨%½: ²ì׿×÷¦2UêÍ¡M†ûG—ZÕ’óž ë$èÙ¿&Õ+e*V[vñÞÇ·y¯¶^wE=®uå8C0õDÍú^ª¶ÞGÍ:Aâæ=}TˆZ«ôòåËrïôÖ©^.Ð„Õ Žø¿ß|8j^Âþ!… Ygýê' °óž’’µÞÂã­•¨9E_~ÿ d=5äz›õƒôHcÝ.N qóž^¹áQSjˆk¸;Ð jXž¬U¦õm©‘'Y3Y¿úÉ7 Yë£@j§"Ö[T¢çØQȤEyOo»V#§ÂõíødÝmÓj•Ý2éDf;§µT¡’ý^'& Tªœ¦–;v›Ú«5² ²"YZ F[ZÉ}>ÿyý;ò‚5Oó%Ûo‡¨Ñ± ¢(¦ Ç÷ÉO3HƯ~ ÉšÛßTï6ÿåÿùvNÉz\µj²i‘TÞÓ›Cx¶ï¥K—äžQH·™rš$«ºLM%[Ám6SQCëuViÁ–«SQtö ‡©ÁCdEž‚tÁ–]+žvƒ¨©ó&J5jmÙÇÉ;òÂ\ƒ6Ý«‚:ç­ÙRwÏÉ­¬‡]ýÄXâÓTW)¾*Uh©Õ‘ûG\ýö©ó†_ýúíì«åü¼8WÉÚý‚'Ê´pö-Ôö–8‹Yu*²¨oÜÜ¢7n¸¢W[µ‚?7£ñ] !!é¨ÿ“¨((assÈËçBŒ é»es³Asv9öÊÓFÝÙû>ƒèï$M4áNQ¥ùžÜÐ£íæ‚í-¹-¨’·Ý¤JA?'oÍ ¡®~öWÁ_vqΉ4Ç3÷Ê4QX æöíW?[È­• ¾ó&¦©úÊù૟8ЬÚêôì DsQÜ9Ï÷5+wÉÏÙ7­ÿ>XÊÜF­–(ba³¸9¼#O~aQ‡WþŒ jÖ`¿I:ïé}><öú…‹WE™ F¯ÊZ²¿(¤Z²ØW ´ÛªRq¢DÕ–Ö«!.õà9y•õ¨«ŸŒ,׺Jö_{uøÕO>·§í[\Ýd{øÀ*¯Žâ" ŸÍs ËzÊ®‰×hÕw1 Be*N<†ÑEÍ5êq Õó“t ,ãÈ{o¶Mþ·ÿæ–­ŸÿâºÜãG—µMïjÌÙw̪bÇÈò=èYëê;ëµëT¶ï¼uï8Ûf¨Þ¾(kgÿA¨Yºú©4KO|)ÁW¿ /Ìózû¾<Ï1ÜtÒКbôæ–AtYÿ‡…œ÷«éC²i1޼Çõú‚ºÜ†ÍôÜéè©ü¨&Íâ›DÝæPU´ïèÅÝ´}P÷*ÕÎØç(•i¡¹)}dWØjËÔÞUâ÷Þµ»Ò—•B{Ôû‘Þè7©ÚïgÄ ä$ƒ¬m‚®~J¢žm’W¿ ËÙ&kâ²–?ÜКµ‚ÛÏTåvmýX\Ð;F8&ïO^|YŒÙO kIç=½„ûžk¾N/ÿô¢[ r;ê†ËÑn…PnmÓzøßhh%g¦»N 7«ªóÎpcé õÚº;¼+<ÕèT¥dŸWhöMšddêêgo·üžTî8\¯£%ûC½ú¹WFûªY¿j+_¶A+é\ýÔíóÅßvÛ¬ùÇ(×_µ¸ ÕÖœÊ&“!pÛ5wŠ(aÿ÷úþժΠd ö›$óž^ñQÍŠzG½GÖÀC|YG¹úíÚ¢];0ªÃfÔÕGƒ4¤pù<Ùt1ôê§¿Ž-ù“'¨RT“t¶©µtŠgåó,)î½¹Ö~ÛmgcaÿìÒ«ñÚ«ÝÎR¾€a FM’Ê{zð3žLÆe‡;畤ù1ß±îGP‰/ëÜ,¢2ÜW{JŒ³¾sçŽÜ®ÕŸ ZkË~ÈÍF÷{{¥}@Ö -’È{þÉd,d5G;ë÷»Y1@Öè+›óXÑÐq‘žX)d”¸yOŸLƉ§Ÿsg¢5V9dm€^K¸ïKOˆXf!9*Ü!»0h½ØC€¬AZÄÍ{z‡"?ÖÛ¨ù1dmˆ^SP‘ÄLkNïòÔqæ5H‹8ykÕªœpºöË_»¢7Ý( kCüÃù8ó™7‡85lïÐB/5H‹8yÏ¿ø€jþà4ŽE:2µ!Öõ2ê(£BfµYQƒ@Ö -âä=}‘ŽÃÇžqEÍ £>¢Y2lÁÜðqBôé÷eª,­¡Í:6¿§î/¾OŸ¿»L3Ö,MêO¨øÇŸ—CI)¦yÏ¿`îß}½¿¨t¼Nù'µ!~YsGã8k un§#åoR«û{çÿ?¼MËŸùÈ:&¦yÇRëeäУgÜ2²Ÿ¡‚áy ‹T1\6<I>×p kCü²æ¤2"ÌMŽˆ65¢Ý˜aš÷ô~NÙYݼGÝõ%² ¾ˆ{F$ù\£¬ Ñ'ǨÄÁh8#ŽcÅÈ:\³þÓGéåmY³¦;Ôyå§tmÄøu°7¦yOŸÀÉLÖqVy¹Ÿ¬³¯h«ºÔì»®])Wù|œd�ºàXû&Ï5 kCüŒœ”¬9% g²…¿ÍºDŸû—ÑuÕ,Œ0Í{þò]Ö2dE`œû«¼l_sb ©Êèx"VQ?²§?.õÐXûïG®qY$kžÍ¨2cÒíÖ5H‹¤dÍ)’¬õèšr“K¨U^´°Ë¾È›^ÁŽˆµÏû#=×ø€¬ ñßâqúúã?p3cÒ‘ÃL �q1Í{þòÁI•PM…~Ij r`•—°‚kŸ¬ó d >.$)k5!”¬GĹ·ÊKDYÅÚg ë|£¯r¡d "IÊZõëp�§½Qa–MWyÑdî‹{ïvŠ*«k´rüm¬‹µo‹?âs ,-–µþxþŒ¸_²æmHHãH:êÿ$d­WhB{•»F¼¼ìýŸkȲ³²ÿ|Cbí=×x€¬ cÍi¿e À~`š÷‚î>ÕL_N ÈÚ€a²Víq58H˜æ½ ~}øˆdmÀ0Y«LÈÉlõ˜á@Ö -Æ%ëtg1æÈÚ€ 1ÖzlNIYƒ´0Í{AåD…†¬£Y” õC¸žîh@Ö -’”5'UNÆ–á Y” õŽ“È™Pô&—GŽÓ„¬AZ˜æ½½š !ëh@ÖÉZ’-:1Ü©­C€¬AZ˜æ½aC\!k3 k‚d­Û ß×£në$-,Ÿ¡cEÈd“8yÏ_NôæBÈ:µþuå8é²=$©»Fµ…ÚÜá÷5È&qòÞ¨0©u4 k‚Úâ¢Oˆ¹Mí¥š‹@Ì’‚¬A6¬³dmÀ›[ž ÈIe@N¡ffy¦±ª4\Øuvé7çÒƒNÓÔ'«Ôâ�À˜$e­÷í\¿~]Â�Y¢g@Nº¬#ƒšõxàïu ²ŽK’²Öc¾cœu4 kCü™²Î�½ýì[_ »ï~€¬™2Ý=7GLBÖqIRÖzH†q¬Uz¬ ñÑ3á8€¬÷â÷tëü—©\]£îœÿ»­oÒÝEÈ:.IÉúÊwÝ2 œ¢Yâo·ÖoïÆd½@ÞòÞ $âä=½Œ|íäxd ¢YÇೋO¹QŸÁ8 ë½Ø¥›ÏÍ{jÖÛ/?J“¨YÇÆ4ïù+4úÝçµk×äQ ,u .]¹îfÄOñ;nFL:<*Y‡`w“þëøC²Íú/iúðhæStÏ?ž§ßÈC@tLóÞ“ç^sËÇ#'úwžœÐ^È:&zíúñï=+2â7äÞ䀬AZ˜æ=}ñµŸ¯{dtáuLôÚµðùòe¹79 k&yO/ÜÉÈÍJÔív[¢�Y'€Þã­:“î醬AZDÍ{ÀI¯U¿½qÓ5'Ԫ̀¬@ïHá¶kîHIºö�Yƒ´ˆ’÷XÔ?¶â–âÊeA‰³ͬÂßÙÈí×Iv4BÖ -Âæ½÷?øÐ#êo?sQÜa*Qó¢»»šc d º°9zô ½ù?ïȽñ€¬AZì•÷XÒ<òCoúP¢fA+Yc”ÔÇ È:a¸I¤òÍ~í‚…Ä*Î5H‹½òž>›—…Í!„Y̺¨1T/>õ˜à¡J_yì):rìI‘Y¹7<NÍ‚ RZ‰%kîdç;ËßÞÚò´QCÔÉYîõÖ‡,%¿5kaòGÒÓó;â$d½pškIô„sABJ+í×¢9¯£}:y k��È5��ä�È��r�d ��9�²�€�Y�@€¬� @Ö�� k��È5��ä�È��r�d ��9�²�€ÌCôÿ¡Œµ•!ëd‘����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8i.png��������������������������������������������0000664�0000000�0000000�00000101106�15030617045�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��j��¬���m‹‹K���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÛIDATx^í½mˆYºç™ß–þ°4è³î~hðÀ‚©64h¹ /9P†Å,â.¹ðö4SP‚„ëÅp«0ÝÚM0e0ƒØ,E{:‰K²EÏØ¹#<{É;Ý+ªš5&×Ôõf Ý- ·ÉMªŒIijç^B'B!¥ÞB Iÿœ)^qâœ_<ç%6„B!„äŠ!„BHN¡¨B!„äŠ!„BHN¡¨B!„äŠ!„BHN¡¨B!„äŠ!„•ä›o¾‘V«Õ—¾úê+ ÃðÒôäÉ“Ôõ‘~øá»B²…¢F!d)pâu||ÉÔ'Ÿ|"}ô‘Nï½÷žlll\šð=·Î°ôÁ¤®Ÿ–ð]·ÞgŸ}ÅŽL EBH.€Ì@jÉò%,)E¾hùRsb”µùûArÇàwšè9¡sÇu! „ ‚¢F!d®øBöé§ŸöÉØû￯—á3È š*ñýׯ_Û-,N蜄¦‰þÉs¿y™/™5B!™Aq‘&HXRÈ𙋆­#2wŽ’âꢇ”·õ%¢æ2$S!dr-ƒP iÏAÊ\´RÂ>[—ƒ&Q,Î¥/oî\":ÇfÓÕ'7¢FH`^$d| ^I1ƒX`¤R6;p®!h57xÿâÿ:FÜVŠ!Ì‹„\d�R�9pbIsbFæ"jIqsׂѶՀ¢Fˆó"!é@Î .jÆ(N>qÑM×ÿ¢ßzy¡¨âÁ¼HH4YBÄ|9c¥¿<$åÒÆHÛòAQ#ăy‘•QÎVHr¸Hä Çþƒù‡¢Fˆó"YWPa£âö+rDÓX‘¯ˆ¨A¾]Ÿ6üÍ([~¡¨âÁ¼HÖ DZІJÛEÏXi¯®iÛÉ9Fê2rš?(j„x0/’u‚æš7QQ£YŒÑ³õÍÝn®6äÉ5B<˜ɪ“4VÈÄÇ5‹ºü#‹…¢Fˆó"YU-CÔ Í›4rzaÿl_5B<˜É*‚~G3H›8É8 ¢æ¦÷@_FæùCQ#ăy‘¬¨TÝÛð/¢$„L"°nÀ ÌŠ!Ì‹dU@eêš9gÖϨ{"µrAß'&¤\;‘.>;«K¥`—v¤~¦—’Âôcctm>PÔÆ¢+ç­§T%pÒÆ ªŸK¸(MW0ù–ŸJ;¶ÎÌwf…Wp*uÁÖ»­š”õ>¯J¥þùÞLx'íð– ·$l¿³ËV œGB–4Q!/gR™Få[²|QåcóTª¥uNI[eÜC�šDÙw-{(j£ÒíHc7„(¨JØì˜§H¥F­pGJåš´ü²ÉfúÉòB`»R‚<eð¤iÄÌ/4ßJ«vcfûêvŽävõ©ú¥5Bò ¤ •'*ÑÌ D¢vCj­·vá;éÔ«R©=—s»„¬6hFÏ<¯ Emºm©ï”õq‚}9I>-v[rxزâfˆ¢ZNàR ·YÐU›ÞQòäKÙwR¯\"l“ƒb(•ÒµGæò E,+ˆl ™)Ó(G_Y†HÚ= vޤ‚(;K5¸¢ï©^rë¨Üú#õyY*á‘Ô‚«½&TH_3ŒÖ-÷¥ÑQßÇçކ}(u­ ÑC²)÷ÌwÐÒQ3ÛXáË<à¦ò ¬eEíR¬áæù†·-¯ÿF$nâ\ÝŽ4C׬ª ÿé4ùÙî±-máäGôtAêõ±t;M «&*û-©û=““Ú¶ùn"Å0­PÅv½ófÏÃEçXvñ½dô1Gà7²l@Ì\STÖý†âeÙ…œŸìËöÍPÚÞ=Ým‡²ò¤tGê·¶,pQW>bùÁWd;|…RÖ;›Rm¾±û²eY¬•BíÌþ?V9y+²ÛèÈ…¿¾ý ™=xõ®'¤ÌŠÚe¤ô»”hóôØu‚²Q–z;½Àè¾’pûŠö+iìnK¹Ú0¢vþ\=qªõK»Ò<ÿÞröÉ´OÊœ ù‘;õt« Ó ŒBÓ=™Úχí7VºíúûR¨êÏ]¬öÕü£<mÉžw^òE,ó”4à‹ÚÑÉc¹]y˜heH>¨ºÿûÝ3lÔë–T!h�‘9t)HÉ–An_º J-ýäòÖ_&‘¬@D å'úG’ÙBQ» {ãÇ ï‰Ð&_⢂,Jªà©Ô¤>p Ý^jÄî4«›jF†zûÆñ|k +_|ú#læéë¿’ÖÑ®JìLA8l¿É‚Ðí×íë’B›pÇ¢žn«G-9wç’5BfÄ Mó’4еë|XUý­ ¦Ì1eú¸î”åòZìÃlaÛŦË^Ó+ƒ\YgË£(ro¡0ÇæÊ¬2G2ÃÉ›Ag Eí2¢èXòfw…JòiÍ–#9µ•“ÄS`Œ>¹qòƒêÛ>)3ßO‹j9aÜ“C7bØ~cûQßvç!y©…ª=OîØu$ðÂ~žï§Û©òâyKêzDpIIqÔhMH×?늫M¹°K'‚6OI=QÒƒ¯îÝ‘í-×%bWŽ¢Õ•,ë\™£Ë[Öéòè­tš¥ù‹•«îÁÓ•Y¦µÀ¬Ÿ×gõÀ„ʸæ|õÔì ¨]Š‹h%#¸d3ž[7¤Š¥ï{=LÁ—&0®@ë}澫£X}¢•R�ö VÁûU$ ;ï-Tõ‚ı$Å.ŸLžÏU>)éõ76(jd0ͪu>Ù˜JÔÐÄ„&ÏùN`ïë¶ÔNúï ¸×¯©‡Â‡ÒL‰¶õ=:be•íVáö•uGÒn=“Fý¾)öޤù¥}ðtëëí¾‰uË ós­!oÎób•¡¨@/to:¨j qO• êu¢uÂâ"Z½&Â$n[шRtî?|ªç"Š ’í«æ¾g>ƒ½”ÖÓ/¥Óõž(Û'ò‘³¨ðrO¿èüÿX7ÃŽ¶ßgrÒ|.M×쉿ñd<¬PÕ$ ãèû÷¥®¶Ñ–/¦Í‹¦¦¨‘K¸hJµ8¹¨!Z¼:ÿ&&ˆÚ=¹=¨¯­Æ=Ü5#0½¹Õú0¶/-ÊO”—¾è¹utdî‘ÅØ *µ¶.³®Èví¡ÜEyż•d$\“<„LEmDb#&]*Ud?šOÍEŒ¼Ï­¤8!ò—űs±éR«{Fú£/Õgû [0¹>bžhE¤?bT‰Yã¾-ü\Aç ¯AûõúŸUBµìµÝ.†ÒŸØí)TA²0¶‘ÅÞ¨Ð|‚s4 52SŠš;ñ¢ìü¡Ê”£{R¹}$ívSÃ=ÓD™læœ9‰fO²pÜÛ@§‡¢FˆEÌ…)DÍuØÎå{;õšzpóæTë fʰ ÒŒO´pÅ‚‡‰|>P,5B<(jd.L!jˆ¦åw¾*t­°ýÕ½¤“õm¿1kb-*¥Ž"‹�ý'qMU›Š!ÓæEЉ„¨!:6Ê �WñÍw�!“ƒˆ'Š!Ãò":Èþîw¿“¿üË¿´Kú¡¨‘‘Hˆ¢dÈ{¿üå/‡F0õ:i², ©#@ÉäPÔñHË‹4T?ýéOõçÃò+EŒÄ�Qsi°!:Á™ßÉ2h1ò4£À“CQ#ÄÃÏ‹¾ ýøÇ?Ž*Ñôüz!ð¦÷¢á©ýŒN(——6‚P¶¢æRRذ쫯¾²ÿ#æÁ(qÞ¼i”âçÚÝ“ñ÷›ÑìO%¬=–ÖñFÚ÷FÔ'pƒb#ìÉ QãÛ &‡¢Fˆ‡Ë‹(T~þóŸ÷ šK„Ì’dD-™œ°áovÌN e즄 1•úNYÉš÷Ö½tQn7õ?Õ‘¦Hµúêy0Í´Dýƒ섾˜SO;t-ã©G–D‚ñÐK&ƒ¢Fˆò"ÍUƒ*K—á@!´î “[ºáøëš.®Y¤\N˱H|QSôu?ðEÍN¼*_·HóÂHXôl;97›ž‚ĽaÅDÒ9Òt8¸7PFÉ ¨⑬GMÉ {Fv%åm“/ñ£¦7ðæô¼…„‡‡ÿïÿ½þ{1}}Ü+ÒŠ²U½oßÔbÞDÒíË®kF,Ü’GwLsäÖ]©!º¥›ÿFÉæD¼t×N"Þ÷J*ÿ•l‰T¬*¡²_ž¨u; Ù¯¨}úï÷ôDÍLå1dòÝXô-åÿ -‚Þ1$ÿOúAù€{ƒLEäE×쫉Y2(‡|è÷íÁ2ˆÝBÐѨ¢ÌÖ¼‰¥X}&§.¢¤?WR~­£LF¾ÜëžÊ²ƒ×NéhÄçµ´Ã[RܥݵoT™t²Z¿æl;øCü-)‘l½1Çì“ì[ŠDQ›5µé ¨âáçÅaÂFÈ,ñE ý"1€%­óõb;eŸJ\µòMÄËŒZíÊyë©èWì¡Ã¾µ ÔóMS¤mšŒÄç…ÚV1vOmxÍ—“EÔ¾SëlÉvøÊ4[:<Ù2ÇÒQ‹dëmBÌ(j3ù–ƒ`&‡¢FˆGZ^L6Bf‰5"qœ"‹›ž#MÔòóK©ÕKM>ª¨]éõ›¿:÷—ÕH�|Ùrï Ö‘<û¹¢'[ˆ–ìoÓTšÚGÍI¥yÇ(û¨ ÆMÒ̾•“CQ#ÄcX^ô…Yò_þË‘'Ož 4¾³° o£¦MHŒkú¬Ë³jÙ‰Ï[æé¶)3&jZrÑ:5ß)íH؂⼓öá#y:É Õ}QSÚ‡¦Öb°+Gz»ŠXTLí'¼%…‚”*¡´t?6»L‹G}Κ…æÙ¢FˆÇ(y‘7’Eá&?5¿)2j5°ÿDJÁ–”Ôß…à¾T¯Ûå&ƒ@n¸ÿß$(ºÏ”Xµ_™©4ôÿ1—Ù‰ÚËx tÛ´2Ö}%á¶›#ÍOƒæQSIGíûH½A½yÔüh"¾âPpµË@´˜“4OEæE’wÜ([Bò(P¦²Ùs:(j„x0/’¼ã*¿…þ$dDøP1(j„x0/’e�•š”É+èÓ‹ò”Ѵ顨âÁ¼H–×WsS‘<‚ü‰)9Ø7m6PÔñ`^$ËFÓ!¿² ”ä D{‘.ÅLFƒ¢Fˆó"Y&ð~UD.8™ä¼JŽyr¶,¡¨aìP*›»zÎý7Þ;·´!˜)[Ï›£þÎýlÑòÙ¹ã3__Žy퉙ÜÇ ¡wÃБžŽ¡ñO%¬=ö&¨´ÃÖ]*²Ûè¤LN‰ß°9æñ_†]§þŽó±=Ö°üVB–D,½ y’†2”o!˜-K&jª?Ù— ì&IÄă›R©·¥S¿#%ï]q½™¦ÍÿsKÊ+JÆQîjÉJÎ÷Ó:‡˜Ir¶ßŽ>_gÒ wbç/6‰d·mæ;*ÜŠÏø=ÝÖCÙ*>ƒ¯ëØœŸHX¹1²ìQÔȲAY#yÀIÚâ^q¶º,—¨é™±¯+©ycþ?DrÖGÔì¬Úöu-—Šš>‡…ôÙ¶o?è¯Ølßö|Žù³è (¯]åó˜…¼úèÙ÷¤Özk †¢F–'kómrrüÞ«£àZLÔ½ÚKW$Ø=¶ž®¥Â~fËÆn§)¡~)–ãÍÒÊ¡}£ÔgúeòñÒÑp&'µíÄD¸PÒ²e©DM¿wÍEWRoÖ¨90.jï¤Ó¸onÂÔ¦4¿©ÍÞ„­ß+QQß/~({7§7sõF¡,¥kØnQ¶ª÷eÛˆnôAûµ,ls+­‚WÐiAÂ÷Õ²guûMS¦‘¥ŸÈÏJ?ÓûÖïÙs… Öѿ׈Zÿ±ô9Ly)qž¨u; Ù¯”eC¿VÅ/œÌkdLAýOQ³k|ß§Qáf®Ñ¹;®°W§áÜ]K$}=ýó­ÖÓ/]Ž-+ËN½-ÑláÉ‚ïãÛ齂X—eÄ—µ¹5=Íú¡jdüRUÎ"òîÊý¹)W¢î!úa­¨äì¡4;hpe¾}€Ó¯¶BŽ×¦Å!ù~OõýË_-µ~ Ïaªä9JZv,‘¨™~Y±›#VHÄoL_ÔºíP¶‹h¶{k›ýnÄ£+ú&¶‘ºóçRS•=öóZ‹nÞ7JVŽ”|UeÿG9 oIQ¿Ô÷¾a7ÔÍ Ø9ROtF^pïR÷û½ù»tGê·<^ÐÅ^¬£+U˜ììà÷û¿Õœ÷Ôh °+Þ±\óÅ~7¶?·ÌÊ‘“ÛHU*R=øƒ-àø×@GëúÏÃ…-Tq÷¯\{Ìxw^r›�Ç¢ÏÇ÷æý€ÁïåD¿Ï2öÖDqG~³]2µ-”û~wtŽCQ#ËŽ‹nÌeêŽ1D­Ûy)/czJ°Z¯Ì=?6¾¨)ôqôÔãõyqúFª|íÊnóÌHXÔÅÛ.%feiT&ùÛ[/¹Å;<9p {–HÔOH VH µ„ˆèïl¾Ù''õÿgÏüånûä‘VïÛ¦ûÞ3%tiû}ÿió¢_ÛÐâø&êçåÿÖ4QsXÿ93Q¹þˆZü(¢ˆÚwj[Þ“j‚ØñÚ7–;gi…n✜·¤~P5ÑÃàžÔ*¥Þ÷/–.ybÖ÷û€õYvÜÔˆ°ÍnÂQ¿… `ÈÞy÷jZä[­erÑZ¡â6ѽÂEÀÔ÷ ×dsïËDùdïßXJ”~™¡öÛܯ¨í™‡jƒWþ ìîáH–“ýåf_™”VF­xÀuA4ý"³g‰DÍÉø5+2C:¤ëïzOGnÝÁ¢v%ÑŒ–&(VÔúö›(Rox÷¿‘ûäà ¢Äñ¶Ô¨¤#Pþ6Æ5Då*ª -舠]¦è™HÔÔD¨Ê¿JH;þAûÆr+j©×Á_O‘<':B¶)•Úc©×¶­¨ù‘B…>ÞD¤4ÂÊ7#jd@”Ã5…BܦeGÑt¥Ð­U>œ>ëÝ«Q”ÉE¾q¿!šX¡z%á­ûÒ|qºeºU¨íÜÚõʧ‘ñÊt£¨~.‡MTºWþ؇¸X9˜ò`×û<¥ÜL–I©åöêãòÎ'[žK$jê>÷û¨-.:dšÚœÈùòe¢R˜‚ÂLÓÐm?–ý§^DIoÇõ™BsæuÝ ÷FoÃöñÒ²€(ש)„Jnä©éÌÿ“(:ä5}¦î·mšêôvߤ6}FbQÚ’íêS9³¿³´yÏŠ”ÿ[¢¦ŸÕoIK¯ ´ƒtgÚPZº)Â.$jöxŠÁ®éßìá_ƒû6"ö‹þUúuˆ­§ˆ]W{-½¾!ÁçÒÐçÐBU•Áÿ~KJ×ÐÅþ&U)î[©g5²¾¸è*ØÉ'Çð°Ó÷PåG¾ñ];Ê\wŸxjËÓe¤Tå ÞÒeCßëêXq¼ñ”,#ÝÃÝ+½ýrâÁ3&[úM«D¬ôŠŽÝô¯í•“µ$ˆšùùˆMóe©DÍTè¶/™½ùâ73’¦ßüUïiI^¨=&(ŽDHß~ndïš�„í•H¸QEnº »½Þ¾UaT ìß·Hßo´¾Zöá‡v¿NŠ,%ÔŠY´´²‡(YMî¢c~Ú±X ҨߛGM¥REj¶ÐŒ–¶0Ò#7í÷£ÂÚªý¨‚ÓüÜ÷`©ÿÿ¤T’Ÿéåî|œéBÑ|Wí+@áÖUÇ­%Ù NØ;¸«eoçè™E×À &pM,jY$Ò ½>G}’õ+š©¿Ñ‡müæP+jɈ¸/,}‘ïžÔE#.£‡«^”Œî†…‡ø%»gø²eÊϾ酢c·}ÔÜñêzÆt=émôº[Äú¯8$€¨ìÌ"³dl–KÔðt›G-[´°øQ&²|p5B"Pé¢8ò9"$ãô/2Í^ß³V(ûúÁÊ<PöG¾!>x°¼£¤ºZ€ÊJŒ^¨{ò®Ô;ïŒðLTÆú¢¦ÀƒmQ= ¹]<*fŽ=þ�g–YÉÔÆõéãçÈ=û¢-Ž%5`‡Uë7ØEa"jëñÔ´š °æ› IIsQü=Z„-Ñ2±ó©üæ.¢~S Ðqä»þJÚ_ìÛ)Ž\ýå‹Úž<Ðý^Wˆ‘I´¦s]:zË£d#eñyÔÔ¾kuۺ⵪¸î.®õ"Š´õK¬ò<jIA›Ý`2)K(jsÂïlê…ðÉj“˼HH¸~G5VÊë ò-¿PÔñ`^$ëˆ_I£/þOVÈØgŸ}FYÏ95B<˜É:ƒ7|òÉ'ú>@åJœ÷já¢gnp }ÜþŠd¾PÔñ`^$ÄDZPy»(¦dÀˆ?JÛò GÄÌEÏ äs{Õ™ Š!Ì‹„ÄÁÜk~Oi[’r†k‡h£gËEæEB“Vñ£ytò‰tÉ,<CÄ\óµ»Fë冢Fˆó"!£9ƒ¤Apß@Þ Î\?ƒ<ã:¸fjw9[(j„x0/2>~$ÇEÛœ0 ¯#n³Ág_‘00€çyuɨ11å%B¦5DÖÐLê"=H ,Ãg”Šá@Ê-ƒ€AÄœ�#QÌÖ ÖJ„B2Å5Ñ¥IäÍEÞðu“~3~?"enÚ _ʰ‘46)¯'5B!sòæQ¶¤ @æ° Ÿá;|ÙdÅýN÷[‘ð»ü¦K$üËñ9„•RF5B!¹Á‰ Ä Ò‚hÆÂ%åÆ ŽKNêü4í¨G_¸\rQB—ܱ:Þä±b2r5B!Kƒk*Dò%ÉI’ß/.ëäï×Eÿ\3.EŒL EBÈÊã Þ¤‰E@Q#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5BY!666˜˜æžHvðìBÈ ÁJ“Ìä¹§OŸêDfïhBY!(jdÞPÔ²…w4!„¬52o(jÙ’‹;™‰)™!ãÃ{‡Ìä9ŠZväFÔñaž d2xïyCQËŠÉ%Ì„Lï2o(jÙBQ#¹„y‚Éà½Cæ E-[(j$—0O2£Ý;o¥U»¡¿¥rMZ]|öÔ+Wíò«R©§×0xŸv¤~¦W kòE-;(j$—0O2£ß;=é*Têrf—jβ[¹'G­ØRÃY]*…”uòN:õ]©Æ„¬µl¡¨‘\Â<AÈdŒ/j)×NÄÅÆº#¹]y('çéѲn«&å¾HÛ Î¤îH‰Ñ·•†¢–-5’K˜'™Œ©Dí¼!Õàc©wÞéoºrÞ ¥R*ÈFéŽÔª×û›=Ï[rT ¤°±)wk‘ûëÿSjÁ}<ñ&T%oG» Rºû@ªåÂÑ9’G(jÙBQ#¹„y‚ÉùÞéžHMIR$QçÏ¥¶]‘°íKšúZ;”í jÏåÜ6{öú³)°ž²B°/'g/Ì6µÈ]ÈY}GÉ[\ÒNjÛR(lKíä[ÛOnÔèÉ+µl¡¨‘\Â<AÈdL$jG_Jýöm%O‰¸V÷•„ÛWd£´+M4…jQó›JÝ „Rk½ímS‹œØyÑ7ÓlêÖO¬K–ŠZ¶PÔH.až d2Ƶ+²üJn×ÛQ?5G\¬º6B扚JÑ$ê"l¾Èõ :x#Íê¦ÚŸ[ߊœ#K E-[(j$—0O2“ˆÚvøªOÒú¢eI)SÄEαï­ÔyÑ·X´­+çÍ])ùŸ“¥…¢–-5’K˜'™Œ‘ïñ²}Ïì¢8n°Äë[;�`C Ö¤þeGÉ•‹°A¶^ÈYë±T1x P‘°ñ·Vß7ë6ŸKÓ|øýÛÎÜàƒ«R Íçdi¡¨e Eäæ ²¶œ·¤~PURT’j3]¡†1º¨=•êí#é guåüdߌά„rÒÜÓѳҎ·Ž‹²•v$<yf"fø»õÊF×ÊJÄN¬ºˆ–})M­ó?'Ë E-[(j$—ŒŸ'0…ÀS9ÀSz±*Í »˜¥â\ÉLIçÿŒEAQËŠÉ%c牋¦T‹¨ÜT¢¨‘%ç¢Y•"E, µl¡¨‘\2Yž°ÑŠYr(jd™ ¨e EäŠYg(jd™ ¨e EäŠYg(jd™ ¨e Em ôË‹«OgòŽ:÷š7Ÿ‘™ŸÈô¹ZÇ÷àQÔÈ:CQ#ËE-[(j“¢ßow5}²Æn[ê·ïÅ^Z|™Ô%EMä´Ã[‰÷äÏ,eržŒ’'¾ùæyýúµý ¨‘Õ )jaÊÏþs9>>ÖÿÆR–§þ` (]‘`÷ØNr*aPì}„ÒÑ+*ìDºÅjS¢Û¾JÛÖ©ÈnóÆ9ìûJÕgúý¦xµVûþSý0O÷û Û¡´Ý*þq.q¹…㧨eEm b;euÜ)³jŸŸHX){Q0LJ¥tmLáêOÞxLºß|0,O´Z-ùå/©¿S©TìR@Q#«Aš¨éÊ\¥Ë„méÊÓÈØU ÂSõ÷;éÔïH)öÖsÇ„LÑmíËv°%%ÿUTC©Tj {.]™ ç}+JiÐg•Céhyº)aG-te}á–}Y½äW¿ûôµ:žÍ””Ý×Ì>ôþ\|¡¼ì¦º>…hÿHÜMO<—ä9ŠZvPÔÆF=MíWeç䨹É!íÓ‘¬?EO^XV¨H£þHª&y<2¹ßþ;ù­~‹[Ç–4î=yÁ¹«ŸÌʲ½‹Ï½ÚÛµ·ØëYzO|f¿^AÒíH3ÄdšølЫcŽ; ¢g¿þõ¯íï6éƒ>°ŸŠYv\eîòxQ‹‹/j. 6|¶œø¢¦°Q¨ž˜¥‰ÊÂÛRk|¡ÊK÷QÅù+iu V ƒ�6ëÒôY땜û¢æ¾I³‘°¨ÜÇw“ÓºìvÇb®§)ƒñ÷ŽÈ% ›j{oÌ÷)jä(jc§¼²[©D¢”Œ¨¥DÁ¢! 'W…-©hѳ¢ä¿ZE¯æ^ÍbÃæ)ïØsÛöíÇJYòÿ@‡ãohỈ½£/øy"MÐ\ê‰Z¢iÄ+h YvÒDÍ¥¤°aÙ0Œx¨u·îJM· ØrF=Ä5vñZ'lW•M>—»º¹nKª5ÈkÒhỖ^a[j'(]T¹Ø¸=ü%_Ií¯/%ûày¢†ÊýJ\hÒD ¨7÷U¹˜(¸ŒÅIý̵n§!ûuŽtMmYË£wÜÉÿ+’Ûìý¢v[}÷TGâbÛ¤¨‘!PÔF³GRÝG!ä"Z Ñé“#'\®Ÿ™¹ÂÖ-©ö"Yñƒ„ð¹hYª�b_Éý$ÿE¯$ܾ*¥ê3õÔhßÉç Š‚<1LÐ\ŠGÔæŽ Í¯L&}õÕWZ$˜zé£>šiº~ýzjþ÷S©TÒyÇ–_¥;Rï¼5eDâÔE‡¾7Ÿ£˜–+_ºÌq¯2e¤éú×Ñ4øÖ¾hÝ‹l…ÿ°¥öYý\›~ß°~QCÙy]ÿß–yþìe2Q³çµHõàQNKÕÔ¢¦¾ë7ÁRÔÈ%PÔFòwÕr7°Nñ¦Ï>9 \±Î¤‘ôy…ۥѱľúD.±_¬á"Ý(U¤vØòŽ¿Å?ÏLyOir±Îé³Ï>K¸I¶™vÞý„‡–~øAÿ=Û¼j;äÇÄ"zϨÚf$j6:­¥Ä4Åö¤é™œÆšj‘Üw zû±Ï]Q{¥…¯+'ARÔü. .õKbªŒYR?‹~ówj[ñî!³5µEÓU¦,;ä.E ¢6 çÏe¿úÈÝcE(- –"\¦É2Mä±¾ezAâ{®0ò›�|{+æC©øM£±ýâû)2˜s'~÷»ßÉŸýÙŸÉ~ô#ýÿ´tãÆÔ(O– £M ™'µ´üAC¾t`ÙpˆÚDy6¥R{,õÚöx¢–É¿^àž¤¤¨¡ìܼ=Œšr±¿ùsrQS ù*ÿÊ$�ØG)Qý�ì=ktùk×·e¯yÈöE ¸‘ýê:Úk±¬ ÏQÔ²ƒ¢6Œœ|,»1I)¢ מ4Oþ(-õý^“æ39iþ­üu"Êâßy©Š"»m]ð¹‘O‰QBQ„íHÚ­gÒ¨ß7ÛØ;’æ—¯ÿ™Û¦µÞàn§)‡õVo›9Ãå D† Û"š> ™7i¢–4>Ž-´ØC%+Ïž)iñF3âó¶.Kì^LÔL9ù“þHèò¤Û~,ûO½‡Ñ‘ñEMr®HõÈ•S¾¨©²¹yO¿\ÔËv¥”èÒ1•¨ÙóS v娅ö {¾¼óÔképaLõ鋚BwI¹BQ#C¡¨ ÄÉ EOÈ\´J/G²‘/×á¿´#¡½¡M %Y•PZí#+WþMøŽ.\Τî¨evûè#T'jºðxc ôéÐs¥mSí©s,»zôè€mæ §„ •ÕOúSùñlÏ=E¬¾¨ 4GòÞI¢åDoKIWõc%%f»¥_H€2¬°-{w•|ÙåHÅÜpýÇ6%PBeþ†¸ýƒ} ÄÿãåÎÈh ´ûRÉȘq˜’Ín9Dë­‰Fßuò¥¿œúYïÜ Ùm;™Â2•7è¢7Z<JÙ+oÝà ñ¦a=‡æ6E †¢FrÉ <á ¾CQ#ë�Fuþëý¯‡ šƒå)™7µl¡¨‘\rYž€°=yòd¤Š‹u‚å)™7µl¡¨‘\Â<AÈdðÞ!󆢖-5’K˜'™ Þ;dÞPÔ²…¢Fr ó!“Á{‡ÌŠZ¶PÔH.až d2&¹wÜhGÖÿì1ÓmàxýTîKý @O•á>óGKÚQù±©5ü7L›Ü(z»i _ÁçäLÒí½ï9z½–Ó!…ÕÞ빂Ý#©ï?J2dÁ9£¨eEäæ B&c²{'9ëÿ¼HNkaÞ�{{KÊìÿzÞÊí@‚Ò–7‰·µÊýÞû3£u0ynâÝš±Ï>–°óµ7‡››¿²7ïäà¹Ñ<ô´I˜˜üµ™"ÉÍ™é^M[âÞêO²ÜPÔ²…¢Fr ó!“‘½¨)Ñh½ŠG”ºßJëe|Ú×ш‹Zeó#e)¢ÖmíËÍÚS9н‰àL^¶¾5'ÖADë ÷ÞоÏ^ÊËóŒO¶«¿ãEµ„¹7»˜cNΉ©ç³ŒÞЀè^IÉÜ©‰üõ½WsÄíÉ!EŒ�Eäæ B&c”{'6¶~9;fÙï‰Z|‚l¼pM‘.Ò„e×dsïK¹è¶¥¾SÖß+”Ùs2eEG¯ŸHqôEMm_¿Ͼ¬Ü~£_ÔÐìy[IÓ÷ 9òè[Ç#õ3ï­ÝŽ4÷+êwö^Û—|ƒAÿ ’¢kÿwO” # ðò‚ëJQËŠÉ%Ì„LÆå÷šñʦŸ•žuÿš”žhx#ýj¼+V`ð·’¶Î…žMÿÖnSÞáõQV²ÚáÙM£¡XQSÇŒTªrpØŒ÷ KŠŽãú®‘¤X¤Ëc"QsýÛÔï­~.‡.§˜XÔ>®ÊÇ~dnEÁy£¨eEäæ B&ãÒ{GËM²TR4ºrÞz*º¼ëÄoúzi™rï Öý¯®*±y$uýê<‹–¡x$Í¥¸´x5l+ötKB¬Ìû‘ýmz¯øsL$jˆ¨½ÒýËÊ~9Em8¸µì ¨‘\Â<AÈd\zï¤F¡|Ѱï .U¤V,5¿ï–nž ¥\éuøGSaX• àw¾¿éÓì7)Iq±B³çM¯#²o˜ebQsBºÿ-1¹5#NSû¨¹¾v:úˆ/ôËëûû¨á·H˜Œ.)µl¡¨‘\Â<AÈd\zïØ—Œ÷DëDîÿ'y¦DÍȤ­ìp´MŸ™Ê]©wÞ™¨"J§‡RÙ9’N×ÈËø‘#_Ô€m–­>î½ØÝ+Op/.=ú¯«ÏM2ÍT¢¦€˜©ÙÈá£>õK× xYýCiêiG0êóTv½~xKE-[(j$—0O2£Ü;n |w£´#µßl™¿u3ç?ÑPÿÇœfÕëvÀÁ?ȵ=y ”¥žÈ¹ÚNmo×̦¶úÍŸ—b¢xf¿*Ù¦D#6öX~óWÞ<j½”lb4ËmíÀ¹×iŸiqsËܶÑçî–÷ÌDÒz,¼yÔôö\¤ †i7Ô:±yÔÐŒüXG!Í>ÐÎÑ�¿‹¢–5’K˜'™ Þ;dÞPÔ²%7¢ÆÄ”L„ñá½Cæ òE-;xGBÈ AQ#󆢖-¼£ !d… ¨‘yCQËÞÑ„²BPÔȼ¡¨e ïhBY!(jdÞPÔ²…w4!„¬¨4™˜æ(jÙAQ#„ÃUšLLóNdöPÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„¬,¯_¿–V«54}õÕW†¡§~žL„ÌŠ!„¥à‡~ˆdéÉ“'Z®>úè£(½÷Þ{²±±1vº|ðAêg—%¬çöÿé§ŸFÇı~óÍ7ö2>5B!¹Rã"\Ÿ}öÙ@òåȉ‘/G.!¢6küí#ùÒQsÇ•<fH$–òÉ'ú».‚%d5B!sÇ2ÈËûï¿“';ø"ä¤hqͯ3_æü蟓8|æ~/Ž�Š!„L”AR\„,)dXîä$‹XÞñ%ç×Vüí"pË*ªd:(j„Bf „bÁpQ#1ÂrDÒÖQÈÆÁõǃÀ"ÊæËš}!·8Œº­>5B!Sˆ„bæG‚ ˆ±3ýl€”ùÍÅiâFVŠ!„±ø‘_Ì-›.z鸀0CœyVŠ!„KA4æGÍ FÌò»Ff×ä쮥my¡¨Bˆ‹œùÑÈ�ûFå\;4‰º¨'¥m9¡¨B‰Š¼‹Ê ?ål¹A©isÂMòEBˆ·ë¤Ž( ú>1ú²zà:»&l^çüCQ#„5Q24‡¹æ1Tà=¸@Î i.ʆˆ…-PÔ!d  ¹J‰•ôzƒ(›“uDU9¹n~ ¨BÈ‘4ü;gÄhªkþÆ¿”÷Å“ QC†`bJ&BÈlqQ ¹ DÔÜÜlˆ¶2¯,ŽÜˆ!>Ì„ÌÌsæ¢$lâ$ãàË=ú2’ùCQ#¹„y‚éAÓlà~‚¨qbZ2 ®¹ùQ6æ£ùBQ#¹„y‚é@eŠJu¦‘î‰ÔÊ}šTríDºøì¬.•‚]^Ø‘ú™^JV—§p!nd>PÔH.až dr f¸‡2é  ÙU©Ô¿³ AWΛ¤R},­sJÚ*ã¢kÈ_ì»–=5’K˜'Tšèƒ†û'³ˆG$j7¤Özk¾“N½*•Ús9·KÈjƒèšë»Æ¦Ðl¡¨‘\Â<AÈx@Ò\Sg¦Öö‰"i÷$Ø9’NHSËZ¥\Ñ÷r/¹uΤU¤>/K%<’Zpµ×„ ék†Ñº…à¾4:êûµv6’çšaË5ié¿“zåªýÎ ª5³Â- Ûïô–ÉlAžCT yƒH6PÔH.až dt|IË:ºÑmÕ¤ ÒýÐ.äüd_¶o†ÒöZ;»íP¶!s¥;Rï¼Un·#…¨©ômOº [Rù°¬Åj;|¥DíLNjÛê»›Rm¾±û²ýàœ ºþoöÿ…J]­eqòVd·Ñ‘ }û2{\—²– 5’K˜' 'iHø;k|Q;:y,·+å$Ö'͉˜$÷¿O›‰~¶nIõ‚™Û•’Z¯Tmè&T·/-c11SJ“?KBÞb¢g¾A2‚²–5’KÆÏhjy*Õ@ Ū4/ìbBV˜yKè‰Úu >¬J½Ó߬h"jF¢º#Ù)!Ê嵑¯Â¶‰sM—½&ÕžŒ}³(r]jŽÍÉÛ�™#™ádïŠ-5’KÆÎM©Uå „¢FÖTŒóîÌݵ!}¿ºiÜ»#Û[®ŸÙ®µ\åðhXÔçÌÉXiWšç߉ÓböV:͇RüEýÓ€Ü9yë¾’p[í_¯ß“9’-‹È“«Eä’ÉòĹ4«%ŠÉ9®#ý)V›2iVuSpÌ÷åÙV² ÛR;‰z†%@dìš”*¥™m‹"g‰hX|p€í«æö5iI»õLõû¦IsïHš_vÔQyëëí¾‰õu#óeÞQÞU‡¢Fr E¬*ͪUþFŸTÔ07¢óŸt¢vOn×ÛFŽRy£îÃMýûLÂLonµ´A�š®˜ ª†~j¾è¹utdî‘Elw÷8ij"}Wd»öPî"ÚVÚ‘0Šâ‘yâò'ÞŠA¦‡¢Fr E¬4¶©~RQÔˆXä3iÝ“Êí#i·›rî™&ÊÌû‰%š=ÉÂÁ ”ã|¯ìôPÔH.¡¨‘•f QCS'îù6yŽˆŽ|¤äÍ©fdÜyþ\j˜3-Ög,<P|òÉ'ödR(j$—PÔÈJ3…¨¡òCÊ'˜¬ÖvôW÷°N…@ªG-uwfC4¸Á¦þ&U²(ÜC£jÓAQ#¹d²<AQ#K„¢† ÷F.£i„¤€×L±¯ÚtPÔH.–'PYíîîÊ_þå_Ú%ŠYRDíßü›#¿þõ¯‡F0Ò!ËóìôPÔb`Øü¡™4UŽK‡íd?üÒ†ÓÝ@½P»I¥öF6 Å{';¿¦‚s“Ä >ûÑ~”øÎ©„AÑœSnJØ¡­‘œ’"jàòï aCÌSEȲ€ùÔ§‡=€áPÔ,Ýαìê—�c(yØ~~"ae3ñ ’ž¬™þ½áè#÷8D}ï¤Sß•ê\gØ^Ä> ~žðíÇ?þ±þ×%B–’KDÍ¥¤°aʾ¢'A'”€Qô\ƒ|Ë·LEM½â’V{Þ×éµÛz,‡ú•&Žä»ì¼(Ûˆ£Žâ¯:¹Œ3i…;Rškômûì<1LÐ\"dé€Xøù8¥£§‰šKNØð7û§‘eƒ_æ?çßê@Qóš!ãï‚›;z'·a2¼‹24£¡Jw¤V½žhöÄçõlå±ÏÛ4ÃÎÕ¶ãsa¾¢] 0þã¸o7t]G ?—°îÀêv¤Ví$“Wd;|%ÝèûÉ}γïÁ‚æ!«Â0Qó_ÍC– ŠÚt¬½¨õ†v.$Ñ::zöN:ûFt”`¥½ ˜¹„lÄÎ6{ö¢onFnóù™Ý¾/­‹KZïõ*ßZItüN"­Tž7e?l©­*´Ýz[.ô>“ÂÅHHVNLLL&-¦¯¨³Q”­ê}û’uóz§^·u|…[òèàŽyóÂÖ]©í”Õr”k# ýJ'U®ûr‚¾¼xè®íÜ÷J*·¿ÞßÌéÊR,{kš“76¶¤ZÛ‘’ún!¨I£Q3å³Û‡¿_÷p[f“Úfã´÷Û¢ã¶Do˜ˆýN´ÈxuÖÛ®ÉÁÝ”s×ø›ÞtßznÙj@Q›Ž55¯ÉÒnE3s£Å%¨=륲TjõÁ ’/¶“BFýÞbï¸SÿISÿ{ñâŸ'D¬÷ã“Pšcº*¥ê3éD‘<÷òâïâ›#8¯hâ¹,Ê@Ȫ0,¯ÿùŸÿy4Óûš>u9U´åˆ)#Šªü8 oš‡Jý¹Œðké¨eFŒÜëžÊú°«Ë¾’T›¯¥Þ’¢nŰ}|'œ¬V ““7ݬl%Ç–³ñãmʾ£Ë¶ïMÙ„rŠmèeêYv×tùøÓתŒ,ÙV††TKÅ^™­±e¯~@k~§> l*é:ÔÕؤ¶­ìÙÌ'Ök¼RóE¼èþ­9†eúòAQ›FÔlôªOJÜ“ZßÍâšJ!o/ìßžt¥+'Nn»]{SøÜG¯YÓ \pëÛãVÈuÛR×O|ªÐª6ôSZô»‘J©6{×·Ïùãç‰aÂFȪ–Ç 9°lq²! W•ˆª¿MÄË †@·§v´|±'j¶ï‰<ÙQØzDíEb”6’?R{Ĉš¢_Ôü}áx’Ç‹ÿ¶¤~`»|¨ãl£ÅCKÒ;S6¢>8ù}¼/!’ýM†‹þßf0/Þ7¿ ¢?wñõ>–ð‘ÚVlîØ—‚™Žµ5ÑOJˆžÅ…,™¤�9óŸ¾Ò¾‘lz´û‹¾?ìó^4,ÁXô-)yCpQ=}ÜöI2ñ› )û\�iy"MØYü¼4"‹›<4MÔòeöꥦ?UԮ̤Œ[Ôt»)•Úc©×¶íqÚî$úü—¥žÈ¹ÞVZé$jx˜¾.¥JMêõ={<#ŠÚÀzdyqƒ`Ø·rr(jz Š;¶?Ã}iè>fNž’²òN‡ëu3¢LõšI½ËÎEàpÃk�¨}}¨nâ/;jÛ>¯H£ù\šN¨ðwë¬'Џ¡ÏZr¤Ÿb¯ª‚åØ|CI×Ó}¹×À~ì±ë‚Àý>Û?ßì4åP2ðÄÑís ËNØþÙ?ûgv !ËÏ/ùË‚æ@óòþBˆš6!®)±.ϪeSjÂç-S†X鈉š.¿Ðqj¾SÚ‘P—1ª|:|$OÇîja,m‹ˆyÀ¶r5s¼h%xãÑÝ<^+aÚÔÂÔÆzVœ"\S¯›S=ìî{­ ¶¬ÔëÙ〨é¾r¨^ÛiõÛÛÏõ¶L}â‹Zïø¿UÇn%Qm½Û~,ûOÓGx– ?#¢F&‡¢¦Q²Ö m˜ÚEk”ŒUöæSs‚}îšØøË|Ü@l/”“æžníõëEÅbŸëÂÁ$ÞÍÛkúIJ/­ÈùŸû¨ßÕú£4­üõ Eµ×X`ÿ]|þöÓ¶9p\„8nòÐùG'¬\èrN•êÑüý)[уîF«ëå&ƒ@n¸ÿß$Ðý‘ /¯l— üÂòFG½R¶_¼!Á ×´º)A€‡aü­Ä­ö¹iµ(lËÞÁ]-GíÝ5e¤Û–}ˆ½ˆ¦nR˼òµÛ¬~Ü;Žà„º UÒº÷Pªe»\§«êXðþ.Êà†Ý†JÁçò÷6h`êŸQ'PÏ7ˆs’æé ¨‘\Â<AH:ˆ¨±â›-ÝöäÞ¡i]Ð š¶s°‘±q �³"PÔH.až $4%áþXÌ4«šEËìÛVL“ñ@vö×GwUÀ+ÏQ#ÓAQ#¹„y‚Á ª†JÌŒZµ“‘«rG7Ãî7z£àÉD ІóÉhÚôPÔH.až d0®äûIùá‡äý÷ßçÃÄŒ ¨‘\Â<AÈp0MFÓqÚ’7 hÈ›62=5’K˜'¹4"±B$yáÉ“'ºüf“çì ¨‘\Â<AÈå@й ¬‘<ຠ› ŒEäæ BFMŸ”5²hœ¤qê˜ÙCQ#¹„y‚Ñ¡¬‘EBIËŠÉ%Ì„Œd #íæ3ÀÀ½­�ïîœã;Lô«¡ìlþQºâ̓†w’z/|ׯjê½Ë³ìËIÚŒÿçÏ¥¦ßÖ¢¶U{¾°·²,3œgôM#Ù@Q#¹„y‚ñA4 Q5D׿ÒO(zÉú¼µÆA¼{_sïÝű—°«%ú}šÞû=û_õ‡Io¯yï,½&•úò¿g3Kæž×ÖŠÉ%Ì„LŽ‹ràßL›Bǵn祼ŒE²ð.âWF®|QSØ(›3à‹š‘0óBtÞj_â¡ßål_æ®Öè„7SdŽ80m~ÑÛõ†¢Fr ó!ÓáW¦³™*¯Vºo_^^ÒΑtÞy¢ÖíHc7ÐÍ‹î¥æP¡nôbó¢”6HóÂEÀÔ÷ ×dsïK+Wð-÷¢ódJÊ 'jj¿ÍýŠÚÞ¦úÎû¹'jI™L‘K½ßbU[úÿ‰Ò9ÒpM2 5’K˜'™ž™V¬ˆ:·¥vr&Ýv(Û…›ž>ëIO©ú^Zµ¶oØ[õw`…ê•„·îKó݉ÔÊ·$ì\èíÜÚuQ°qðû¡]‘ ú¹6;¶ÙPÔf š7!þH|#Æ|¡¨‘\Â<AÈì@ÅŠÈ*Ù0 íÒq°ý¼´|y$¥ç¼%õƒª‰ºéïvå¼¹+¥B Õƒ§ÒÒMŸoL?± *õV¬ésüˆÚ+½ýòv(m¯%“¢6;Å‹Õqð6 FÑæOnD‰)™!³,$ ÷¤m¼àVÔÊ5iùBäKî„¿)•Úc©×¶­¨º¦„Õ@ …[¶ß©%ï¤Ó ¥\‘BŸd‚ßG â·å $�É>j¥¨?[·U“rjµ›:Ê': xcíû¨½~ý:ŠÆBÔø¦ÅÁÚBÖTÀn°Á8Âfš;½¾g­PöŸÕ•¨]Õ#$uÊYiD óïÈN½-Ý.š<ËJê^HX¹+õÎ;#ME®ƒ t³l Õ#¡óE£>Ç!™?ØÌ¹x(j„²†$+d̃5¼YË |*¿ù…ë'vSÂÖ±œ‚l¶eïà®”7ÊJÐ^Iû‹}Ù{€9ÌÔ:•PZçÿ(_Ôöäž³¬,•ð$Öüy):Š×‹¼{'íð–ÈHFo Coµ¸ìu;Dz»Æó¨ùMœãG\I–PÔ!dqÂæ:Š£–‘Õb!Ã|h4ˆ-PÔ!„èJQ5DSüJ›ÇWÌ}æä׳Z~¡¨B‰~I®#9*sTäì«´Ü Jê‹øhÍÝ$PÔ!„¤â¢l®iŒÒ¶\89K^?¾M`¹ ¨B¹”A•>›Góš0ÑÏr½:PÔ!„Œ…“6×<Š1À<mìë4_ük)õ@³&d×b5 ¨B™ Dkü(#@Üð#n³Í–NÌ\3þå7²ZPÔ!„Ì HYš¸áo4ÁA&é HÎ%„×Íq–3ö7[}(j„B2â1ƒløQ $üe.ò¶®Ò(ÎÄ ‚ëKþåèȈÙúAQ#„2W|yC”-)&8''NâðýenB…„:sÒ:èw¯»¸’85B!¹À,AV -I™ñ…ÆIKX×OYâŽÕ%wÌHN†;ߥ‘Ë ¨BY Ò¤È Qš Jþ:—%ˆUÚ6’É—G'aHî˜ÙdI&…¢F!d%q’”LN¢FIè–¶ Š™5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„BÉ)5B!„œBQ#„óé§ŸÊÆÆÓŒÒ{ï½gÏl>ùæ›oô1¦;ÓdéÉ“'öì®5BY NÒPÑ´Z-¦)Î#Îg^q’öÁ¤?Óø ç2 C{†WŠ!„,'iÇÇÇv ™TÜy5_Ò~øá»”LËG}”*j8ǸÇðùgŸ}¦ï³e<ï5B±¼~ýZGdP°£²G…ŠÊ5 (iÙWQ£¤eÇ Qs÷±Ÿp ðÝeº5BÈÚAÔOìý÷ß·ßš”´ìÈ£¨QÒ²e¨ù÷q2áz ¯,5BÈZóÕW_éB;­0wi–PÒ²%o¢FIËžq"jÉ´ ÷!E²¶ N+¼ý„Â~VPÒ²'O¢FI›ƒD çÿ“O>¹ôA,ï‘5Š!d-A$-­ÐvÉþ³ª`RÒ²%/¢FI›ƒDÍÇI›»„ë”çkDQ#„¬(”=ectú¬ÍJÚüȃ¨QÒæË(¢æp÷b2!ÚW(j„µ#mà�*VDÙf %m¾,ZÔ(iógQƒd-¯×‹¢FY+P§Ò”´Õ`‘¢FI[ ãŠH{XËëÛ (j„µ"íi:‹fJÚbX”¨QÒÇ$¢†î ~€„>ly$¢–<YLLH„dAZ‡böI[!j”´Å2‰¨\/¿ÈbÎÄYQ#ćy‚d õ, gJÚb™·¨QÒϤ¢–, æ™oÆ¢Fr óÉ ¿PFBa=+&•´‹fUŠj½bµ)v™ŒyŠÚÄ’vÑ”jQå¿bUš™^ðS ƒ¢:%©6ÏE:¡™ïÓq¡vws.yš¢6òzrÈâ`ž Y‘,œg%jÓEÒÎ¥Y-]^©uO¤¶s(y+­ZUµ.ɼDmÚHš–óK¥©w»­‡²žÚåc ¥ÐŠÚŠBQ›y=9dq0O¬ÈBÔ¦“40Ѝ½“vxK A(ív(Û…›µæ!j³hîEÔºî:·_J¸}M‚%µn祼<ïÚÿ͇Y‰®g¡¨‘\Â<A²bÖ¢6PÒÐÌ„}?”½ÛRP‚}99+Æ} fÿ…m%^ݸ¨u;Dz\1Ÿëu.äüd?Z§—P¿ö¶wE‚Ús¥}ëKÖ¢1C¿Æ~Is͌פ²·k®Ga[j'g¸ ÒØ tÀ5Ú_É»˜¨½ë¿†çÏ¥fó€Ÿtñ·çöãLZ᎔Ôç…­@¶ *ŸýµT°}ìó­mzÝØ’jÍ~/¨I£Q‹wò¸Ü—JßzÈŸ]õd§TPŸ¥´ù©=ÞÑÇ×{øè“ûol“ÿÆÖ]©í”£åãæßY‰Ú´eAVPÔH.až Y1ËÂù²Hšé{¶©dê­ÈŠR®ýA~”¤RÿNº­š”7{Óµî+ ·Kº2ïž7¤ª×9‘®ªîÐçg#¥£%ÐDÔtÔ¥xKÂö[9oð†ÔZoí¬YŠÄ ‚60’¦£W)UrÞmKòQ®IK]£ °#õ³ï¥U»¡¯á©'j¯at¿VxÕFÔLdµ¨ùfÓì# buÍ6Jw¤ÞqÛ3µXOoÛŠÑY]Iœ:î#ét¿“zåªÎ‹ïRŽë·á=•g˲SoKW¯‡m§~W`Žù÷Ö}µÿáÃÓ®4£‡Ž«ê85çÃëY]ÉÝ%QÆ4(js «›Š,/Ì$+fU8_&i Þ¼åW\gÒª?’ªŽ˜$DÍEâü9Kµ·fYìûÅÉšÈV„¬DíRI‰fÆØõ?oIý j¢S1Q³×5í¦Šš‹Üùß7ÒnH4£{ÇÔ/jv=ý—oÜúÏä4í¸~óW‰õ°í3#b…@ªO¥¥›>ýãH“8´ûÐù;q¾Æ€¢6p‚ñaž Y‘,œQñNÖ½l&ótQ{,ϪץT©I½¾g+½¤¨¥EņˆZ,¢²Þd%j4y”40HÔÞ 2º)•Úc©×¶ÓE-íµ+6ʚƌE-y\}ëõ~o·Ó”°H¡€(Ükï8Ì6 •ºzD‰}PÔ†BQ#¹dì<=­ö ²ŒtÕ¥|*(ì'(°G!Y8OZþ`=HÁ0tÅãúûèfÌkRyü…ªÜÐúÚ6'õDMWdÙY.*‘ Md¢ûJ÷U7 éS7Ÿ–¥ž¨êO}½ýXöŸ~g` ÉRÔ.­Èµ¸¸~V¦Y×ô5ònöƒ¼löDM7‡v_ÃTQÃHP4îHØ2ýÈÚ‡ä©ÚŽÁ:Ñùî×ôyfšcû´1Q3Ñ.÷ŸRŽ«ö¿ÝVˬ¨EMŸoÔ¡Þ1Í¡:ÿ–Õ²¯£íœ©ûÚìÛ¿®«ïüSÔÜqß¡¨õAQ#¹d¼<ažÎÌÍFQ[jt…a ΕµkRº†NÖªß=–ŽëW„ÿï=”jÙ?SYö:f«eQ…lûù¨e…ò/dëgês¹8—NýŽ^¾±Qè Þš²xQS’]ºª¡Ü—Fç\¯mÙ;¸«DÇ»æZRÞ¥_Ãh½²[?SŸ™]×ÿM¿'RÑçj[~hxéF AtŸÝà†kJÝ”@ ¡ùyñâÇõ«Àþ­Rð±T£&Ø¿ßÜÛ³ƒfpüä?"rmG `l@…9æ7¸?Üwª+)Åß*ÙÛ¨L*jæøz‰¢6œ B|&ɺR¤¨­�V¼3µ´WHMÖIÔ2ú$ŋˠyCQ›YÜTd¹™$OPÔV…lE º_8OZþ`½Ñ"j¦©‰Ì‡Å‹F3®oÓó" ¨Í,n*²ÜL’'(j«ÂŠˆšî_d÷1fS™œÅ‰š?Óöá"s¢6p‚ñ™$OPÔV…lEíÓO?Γ–?Xﲈ™? ¨‘…0©¨aÄ·_àmy„¢FrÉ$y‚¢¶*d+j˜bÁ/œñÿIÀºµüAQ[?&µ´‡¶aó". ŠÉ%“ä ŠÚª¨}õÕW±B …õ$`Ý¹Šš?"ÖO¥ŠÔê-uÖìyK~®Rúä¥.¹i€ú!íÜw;Ò í„­X£Q‡R;të&IߘøÌ5 ú±äo?«$j¦LKþ~Œª¬I½u6às•pýN½¦÷dò›âõt…Þ¼kѼhz=ì÷@áC9Ô¬›¼~þ~.Í¿“3©¨¥•—Ε·�(j$—\–'pƒýò—¿ŒÝPµU¡_ÔP¿~ýÚügBW’Ñ4$ä¥IÀº—‹ħ:ÃþJèåæÓRœ·äHW¤vÚ®5ó õ†Ü«ýµÕ½ñ ôù53¦ü¸/·=TÚÛ¥­Ä„»vJU©î71ã•âüDÂÊæ‰W ú¾L•î”c¨Ðo>’¿åxSX´¨u[egÈñ?Á,~ë±y£…žšå]âs ®Õ½‡JÔ¥‚WY©%±k€)?*‡Ñ9ï¶öe;Ø’Rrb[=5æóSÛÂ#zß¡TúòFÿz%¹,ÿNƤ¢ÒÊ„IÞ²‚¢FrÉ <BØïW`*J[àÛe—=q“<“|=Ž©€Üÿýë_O,liÍ“6{¬™¨éw8fÙ±<QÑiÌ¥zté»tùA%ûò¥tŒaÅ+Òî·Òziæ‹G¥}³öTŽ*×bf&GMÍxV—Û»irÉDí÷ê˜.?Þ4*jú=­×f[þô‰˜BO4»a&“Mûœ¿’–¬ä5Py¤õJ œy¸-µÆj{þÛ0ldµoÄ2&¥Ý•Ý¡ÃcˆšÆÏ¿“©Ú4¢æ^—L˜Æ'/‘5ŠÚÔØL–¸ÈzB¿ý†-h.Á†ž±ž™Å™à\ø$Í¥Ë*J²$¯û8†Â6mî4¤iú£`ý¡ùïü¹Ôô»<±¯’T-oÂO7q©? ¨M¨Pߢ™(-:œVÑÙŠXG“1C¼'?ªly¸ÿe¢ÂT‘ÚJ»õ½™!>а ª´Gc2Qó— «øûYœ¨ÉI ¾šëX¬Ëiã~ÔT\Ð/QW—¤s,»Q¾pßmÊÛAç)UÄÌ9é5qºÏÕµzø¨o¯êž›ûê:£óäÜÖI“ÕG㊚Ÿ'k ™FÔ�Ö÷¯‡K\ðÙgŸé<µHi£¨Í'kö‰3* GŸOgàk˜uúö½X¡‰™ÌoWŸ®Œä¹<ä_þË©ÿŸ–(jëAÚµG&lÈ(dQئ­{itä°KóŸ_Éâo-;ßñQ‚Ò{Ð…yëÀ¥24¢¨y¿³¿ÂP‘¢r¾¾k*s±q쳘è·f— ÜGõ5à_ü]Òeº)ß‘¼W…y¯˜Zn$j½ë¿N†A×�Çu]ŸWûú&'çzŸ‰ëj—™ý “ªå5HXZ ™5Ѐ¢6 ¢ˆ˜+ØzQ¶ÑžHÜ{ÐFxbÕýBÊÞv]¿k#Ká2€s‡>hî”ðRlÌL«Ò®½Ÿ|aCa:HÎ\B¡<í2¶ƒcJ²’ÞI«ŽC JM£EÓ×HWæS‰ÊŸó¸üèþi£EÔŒLøç©`#,V úŽm4Ê«¨õ~§I—1¾¨3iÕ™>e:|¯ßÃYÔÑ5©œJÔ V*õ>·ýÓ'*ýØHiì<øïþL©¿ôòË„jØõº,ÿëû6˜iE Œ*k‹€¢6¢Î=DâæEÈ¢N“›r·öq"zfÅ.Ù™36ʪ(å%¿p#®t¡ù§X¨=vSÅÖ®£æ"p7Ó¨ bæ!i�ÛKÔtçìM©ÔKïAÔ‚â7—¥¼³±”ŠN÷‹R" _ú=¨šOZEŠJû¦W&ùûw_92#QK–{guÙÙñaYE ³ëf„f}ÏË^“xô×!¤ˆšéûX ¤Š\œÔk€zjó¶'ß~ó§­“Ü€G¢Ë¿“ÕR³µo¾ù†¢6ŒEýøÙàžJÜÓg¯à-ûr¢_¬knLýÿ³Fâü§SÝÌàÖ·èunÈN½-Zñù’#}ó$×MHZêºÞ¶—�ä DF~þóŸG7HZº´¢$+AÚµGúÑ~$ög&¿ûÝï"ùJûžŸ r(”§ÛGÔte©+£×ª"Û45ÜŸC¥*I¢¢‹�Ëú~OõÙGJE ‰ îÅ+J-–×usjT™ú2i—/jxùDz­Ê¤ -½mv; ٯܘH¹5-5›êü½¶/ÓG>8WõE•ˈ‰˜7ê³tGê,0‘¨©í4ïI`G…°L§&#ƒêÜx2i–M jú%ñJM]›áùw2¦5”—=à!¡+Å" ¨MK=ó/¨*xjuiéBωœ ëºïGO‘îiÕ ûêðªzZz&è¦T7Oû(!en]/:7hÝ ŸT…Ÿ'† Em=H^÷4As 0M~?™f!kØÎ¥ùOËÌnIxòÙ¿·eïà®z€*ËG{w£Îæ&Ù¨UZäÂ6Gõ¾kR!¨J¨§Ì0dôYj "᪅ÐyÛíU®þ¶ì(êä<jz^-3ŸW:‰ã‰%WÞ)ió:Ü÷ÂJ9^ûÉ +j¦ß™¹Ž_JÃþì=”j¹(¥ÿC¿¿¥ä£}Û¨UZÔK/ó¿«“Ú^5ÔSfÄ?O(+îÑw¼‡†ä:±üe¾ŸG ɯÛRGuºV’ÒOú—÷òïäL#j(?†I"aÛ“Nã3 (jÓb#ZGD¹‚Ú‰Y_ô¬¿Ù3ÖW“6UÁ•"eQxº·ïôuõGKEZžH6ŠÚzà®÷0AóA¡ŠÂuÐhO$ÎÓÌ͆mL›ÿºí?ȽC/z„¹ÞWd|+j—ñNÚ‡59ôšg>ïÚ2¨ *#°|šòa–PÔ¦ÂÉS¢éÑÈ“3÷´åEÏúš.¸+e)ëö$oкËǰ<á Em=ÀµEÐÒÀ÷ÆÓT¼Xºü‡{º,Áî±}˜Btéìì/W7…¼‘&jþ5'ùÌDÔPfÙmØ’žžåcÙ_òòzÑL*j.¯$©å ŠÚ4Dý6M«áD¢öB΢¥+6¾Ôác#rXÿ¥´ž~© l'[½Ž»?HU7™îIóäÞºØö39i¾”óHÔëNùzŽE0Jž ¤­ˆ+hI ø~aìÒ¤ùhšu èo„Ûê¾ÖÇ’lö[’Ík^Jm~Í–\‹šzo…;Rrûðßô°Lè~qñseÒeýײaRQK{€ËÛ[ �Em"z‘´Þ k®é2Ož™þiQçLÛyS­ <ÀRBÄB Õ#%Zþvb뢟HõH]W²\,_ž Ë� óÞ=kÒ¤•/ÖåÃBþÈ·¨‘,˜DÔðà—¼Þè1íaPÔH.až Y‘ön¿Iú¢`=ŠZþ ¨­“ˆšË'~ZÔ¨ÎË ¨‘\Â<A²ýOüÂi’]X¢–?ÒD- ÿúò}ŠZ~™DÔðýdÈëýLQ#¹„y‚d¦åð g¤q y€õ(jùƒ¢¶~ÌJÔf1¿bPÔH.až YâÎHµÕ¢¶~ÌJÔòJ.Ž,Ï'ˆ,æ ’%~áŒDQ[(jëEmäù‘ÅÀ<A²Ä/œ‘(j«Emý ¨Í<Ÿ ²˜'H–ø…3EmuUÔÆ…¢–_(js Ï'ˆ,æ ’%~áŒ4ɰ|¬GQ˵õcQK›ì6¯PÔH.až YâÎH“TÀX¢–?(jëÇ$¢†uü2 ‹<3+(j$—0O,ñ g$ŠÚê@Q[?f!jx+A^¡¨‘\Â<A²…²_HO*jx/ *¦ü$\“,ÊloµHîiñÉ]—qHŠZž%œ¢Fr óÉ’YÒèã‚õ˜ò—²x±6Þ^‘¶/¦|¤q'«Å:Ó–ó‚¢Fr óÉ’e*¤ !³‡¢6&8I„ø0O,¡¨²ÞPÔÆ'‰æ ’%5BÖ›YôS¹5&¦d"$+’¢–ç_„Ù‚þlþý4É\Šó‚µ!!díp#ý4ngdBÈr’vÿÛOóE²v PNÔ—ìÊY}G ‰õt*ìHý¬k¿·(ºrÞ| ;á+õ×(œI+Ü‘Ž¿´+ÍóAkK³ZR¿óªTêßÙeË©„AQ{Q‚ðÔ.StB ôµ»)açÂ.Ä…úúMsƒP:véd¨s^¯I¥T°ù&ÝgG²¿ÿ¥ÚË[iÕn˜å.¶¥vrf×M2ËãšM©Ýñ›sÞmÕ¤¬ÿŸü“MCúá‡ì7òE²v PNöQA>­ªH÷?–ÝFGºgu©nH­õV-?•ÃÚߨ*xtOd÷édÛê¾’pçÁáòy'íð–Jw¤Þþ£ÔÊ·† ‹þ½£HÍŒ˜æ<$‰]+‡•îrMZ#YíwR¯\“rí$&ÁÝÖ#ÙU>ºm©ï”µœUZJç'V®÷$RýîZ¹h÷s&'µíKŽ1ý¸â ßîeð 1`»ZÖ®ÈvôÀ�Ñß–Jxb~ó¤¥Ý÷YLç2K(j„µ$­ù…ø(M :J0ó("b÷U…æE~Ff¼hZ·ÊvaSªÍ7vÉp.šU)Ž,5Ó2ÍyèG_«bUš1Ç4Ñ«bµ)#©§¨²:_¾j¼QòñˆòjŸ „¸ýÎ.3\4ÉC'‘z?[‘TêóÞwì©Ç•à¼!ÕÊáì#nƒ¶«E­Ô;¦³§RÝm,\Òž<y’*iXöúõkû­|BQ#„¬%ƒ¢jH˜å|pSˆmrŠš›\Ó`ÁF6 »²©%�MoJˆ-iîWL3ãFYvêí„P¡Òß´û·MFcÙ ®ÈFáº[W¤P©ËÙyKŽªA¼ùù;MkýÞ4é•÷¤ùb_‚*Ì39o=–*¶¥>+”JrÍ­›Údv&­£]µ.¾ƒÈȉœ(©Ñûïû¼ ?ÑÛRÇ|pl#FJ`ßœš¿ÜùÇ­eå{Ûl‡æ°—&r´qü:qþA:õ;ö¼©cŽÁzŽðŽT©ýo”$Jv¹º.­Ð4;–¶$(]³MqXîŸíPÚú⸦႔‚-)ùbIqÍ—¶ù´ÛiȾާZ†HeÇ2ý})šdí~Ìo»*¥jRrW·#]œã+²\WRø‘üõQ5:wúZ÷}'þ°ÑíÉNÔ,k?ë»vouþŽm×®¯ÑÍÊ.úªòuísåMË».Åòëyÿ¹l·$ÜÆõ±‘Q%}ñ7¶©õºTî›<ieò9à ¼¹ oŸ6å¹ošƒ¢FY[0Û|Zá‰CÔ ÒoMkn2-h‚D¥¢+0,ÿ )•®J!¸/Î[Óä–%AåSt•.¶¡$£ö\ÎuÅii™}ûrr~ámǦÙHQ¥*öö¤ZÞ’ß=”íb ›l/]*ÿVGƒšýL䧨U AmKýÎ?Èï•0˜æ¹ÁŸ—JTÃêX·äîî=ÙÛûPЍ°Û/ÍoÙ=–Î…1ÒÑ Mù°R‘Ûõc9pûðÏð¦½Ôs¤Ö?.5%gz¹®Ð!Ð/äìD‰@}¾Þ˜sg+}]ŒœÓìXÔçú[u W{Ò©1M§ÅH !bêøñ»8櫱hé§åE™"¹·ùÍÊŽŽ Ey°,•Z]Z±¦ìAÇå® –«ó‚~yz›8–M+¤ƒ¾ãHivç8yíbÛÓ‹"_~.5µµ÷G_ÞíϯµæÓþsYÙ—ãð®:‡öšymsΔ´îÙc¼"ÿâý½s;$å½ÉÓAQ#„¬5i Ò¤N£ÃEc¶’ >—Fø¡”UE£+ATà?Áú½>Rƒš³tå£+ÉD…õ±j©ÊõŠ‘ÛßIG.TeõM³ç£Á¨èʲ­$¯Ý ¥ÜÁò#dZ’nIxúJšaU‚ò©Ÿü¡×Çkà窢¬6ä®4…ûZÞèß`¤°¨Žó´Ý”°º-eT¨84-Wf=#T6šsH©›Û¨àíÍ stfdÄFÅ"Aj<×ÂaúM9Бȋ´óÓ– -o&2c®w!ÑLŠm@R!v{Ñ1 ó¿od"ÙÇÏHH/‚ge×%ú=&Ï8ŒT¦WìûØ®•[ý+Wƒ¾£·l˜Ýü•À`e4íÚùÛáE›Ï›R«5m4ù2%ïv“ùuйlÈk\o-gVô´dÚï»õí½ùÏÿ‡ÿ¹ïþM&DÛ–Š!díEÖÜ„˜¦òïïX¯+オü*¡¼Ð«¥V½#¿¹»åU<¦‰³_’¼JZW¢%Á²Bb+¨sD…t“ãF¡‹õMÓ•±×‘[ÿßWBTÙ“ÃÆ—ròòÿV•£‹ùØ}éß‹hÎÒh¾“ú]õ»¼ 2ñy«ù[)ëæ&DØT¥©¿{¦+ØBåßÊ¢>X§T‘Úá±4O^©ê×ý.#½É÷Þypà»·¥kpŽþôBWÔF¢ms²Z~ÔÀ1bûê¬ØfËž%ÏÏ·Þ1˜fìRrÄ¢³Ì“|¦·y“g’£ýßàþïä '#V~ñë[óû]tLÿ&³¯Þyõå&þ>ðYâc#v}×Îþw>c˜c,Þý\Ŷ¨ãíË»J6õqøK4‰Û&l±6"ìŸ3{NÔqýOÿËÇæ¸SÒ|pÉ ¡üAQ#„$'Âõ“i&±ÍGQ¤‡‰š˜úæoYú*HýÄÿÖô·²r”’§ƒ†´´H•tõ©²,úÝÞ9ìí•–W!öU º"´ƒt$cK*ÿV-ëÖ 2Õ•¹NèþJå_Iõîûvÿ—}îUš‘ȼÐËL?«wú÷—µhøÒa£"[»Rw©ÏÃKu¼;=‘‹E!q¾RΑîÈi«}Ý•ÀF6OµD«ó‚¾s·)]»b)íüxRðç;(˵¤˜Û~XÍy©…ÆþÆX´È~X¹ˆõ]Óûö®ƒ–¥2纨› ݆Lt©ÿ¸T¾ ošsõÍë-ß>—f르R¿ã~ö÷±Ü„0ék‡ _¸v.j†íqë<�¹³çÔ£/ï*ú…Ïä¡þséîrz¨¤ýšaoà‚é_wUKßÿ“݉¿?ùä“^T|É ¨Bˆž¶!e~düýÍÿóTU`®¹JVžÝÖ¾lÛ¨* MWYë>S¶£z°+G­¾G[á\‘­íª¶¿5‘ %zÁî$¼«*çÒMÙk¾6¢¤£YÖOäŸb#=­ðÄŽËNñ€ãµÓBœ¡rôšcô«’%4Ïm²µ©Ö9KûÜÊ™?ÚOKˆúÎöïåDwÇ9S¿§úØö¹r¢…ˆŽí¯}uÜ;§˜6Äoµ.úœéƒnðEò¹Áøþ±Ô!6X^ÿƒŽ¢éyÉž©}¥ì)áüSßùA´Ïu–GŸªç:¢X’`Ï5ã¹èéuu½ÿ ®±-òc‚¾Îô8vôòÂâ–;!Õ2ˆeN¨WCå·ü¾‡wìòºùý[·¤zøµœ¥~Çý&›wôþÌöÑ—,ýwYaÔÛuyÏ¢%O[{ô°’å]œç´ü:à\êí*¯|,»䮽~ Dsí1ë(¯7á^ÎûˆÎQ ¨BÈò1&*°GR½§*ö³–ÔéUÊ6"5ˆ†Üê5-’9³Ê»I¬ü zèX!(j„’{ºæE•ü¦¨Q@“ÒM3¢®ü«”¦WB²bÚ¼;¿ÚjCQ#„Ü£*·æÃÞ«‡t³P(M®®¡Ø¾CxeÞ¬`—’=ÓæÝ4 x5¶çO{²šPÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EB!$§PÔ!„Br EBrÀ7ß|#a2Í(}õÕWöÌæV«•zÌL“%Ü;ƒÀ¹^v(j„²`PѼ÷Þ{òþûïËG}Ä4erç1ËÆÆ†|ðÁ}ÇÍ4~t­Ý=…síÎ7¤îõë×öËEBˆ«PP‘üðÃv)™TÈi•÷¢q’öé§ŸÚ%dZ]ëO>ù$’´dÂ:Ët¯QÔ!DJÔ/Ü!OÚTf%-ò(j”´lt­±ÌÝËi ÷ܲD×(j„µ}™Ð|’V˜gYÙSÒ²#o¢†<†üDI›=ƒ®µ;çÃî¿e5Š!dmAÅ™V€»‰ÊJZ¶äIÔܵ¦¤eðksχ5ƒ.Ã=HQ#„¬%(ÜÓ n?¡Ÿ5”´ìÉ‹¨QÒ²gÔkÈÙ {>‹û|–PÔ!kǰHšA?ûì³L¦w ¤Í‡<ˆ%m>Œ{­Ýûyn¥¨BÖŠA}W hYι¤+îÿöÏä¿ù¯þ¹ÿ ”´N(~s±*Í »lÅX´¨QÒæÇ$×:-²–ç¨E²V¤ È:•·HÚE³*Å¢öVZµª„嵸EŠ%m¾Lr­=K–(òÊÂE-y²˜˜\"dÖ¸)ü„Ju$ µn;”íÂMŠÚPÒæÏ¤×:m€A^»#äBÔIÂ|A² ­p†¼eELÒþßÿ •‚Ú'émSªEìKªµ)©ã(5i4jà;…m©œ)kêHc7‚>Ö+²¾’nl™Mj›ÓcÙ ®èÿ‚}99ïÚ£°œŸHX)ëíl×¥ Eít÷Í>±^ù–|ø ³’T›¯ãŸo‡ÒNl6,BÔ(i‹aÒkýäÉ›Ï{)¯¯›¢¨‘\Â|A²�©_0gÙÜ‘I‹E²t_±+ÔžËùY]I\AJ;GÒé~'õÊU)V›rïv¤~ö½´j7d#åÛÐË.ä¼¹+%üý§¯%Ü.‘;oHµT”ríDzNõFšÕëvûø{ÓöQ;•0(I¥þt[5)oÜ”ðï©ãrµ”Ï— Ò6oQ£¤-ŽI¯5¤Ì/ (jÀÉ!$ ó™5%¿PFÂèÎ,H“4Ð/jV|.a+JžªΕH•Œ¨a¥ó–Ôª&ª¥D­¦Éâ- ÛïŒ<AÔN~oøI}·ƒõÞ>"dçö¿~Ó癴ꤪ£qIQKùœ¢ƒ’¶X(js�'‡$ÌdÖ¤Ì(ägÍ Ic‹šŽŽmJ¥öXêµm+_gr¢þ6MŸe©„'r®·uCj­·z?} 5i«Ô¤^ß3ǵ”Ï)j”´Å3éµNë¯JQ�N!I˜/Hø…2Ò¬Em˜¤‰t嬾#ÝlÙµM‰V®b¢fš> •º¼†P•v¥yþÚ4W"¢†õühèžH­\TBJ }Óº¯äpÿX)Eý?ܾbû®ÙmAÔt_¹MÝM7£&EMWâsŠš&UÒ ÌQ¤rAhiWùÛ ˜Û1]¨ÝÝìEƒçÀ¤×ë%ËŠÚ�prIÂ|A²À/”‘f)jÃ%Má*P¤ª<íßÅÜ(ÚcÚ” ¸jÿVâVû\ª¥‚\°wpW‰]Y>Ú»uî7É 2¸èɾ‹e¥ [‘¦iºÑçeù°²e"rÁ !mè+·÷Pª½í%ÁϰO4¯~k¤Îÿ\÷s³Í)Y‹ZÞ#iñ¦íÕ†¢6prIÂ|A²À/”‘f%j—JÚ é¶ÿ ÷_õ š¶s°­9YŠZÞ% ÌWÔÞI§õJL£úü™¥¨e}ïN Eäæ ’~¡Œ4 Q›§¤™fѲ»Ç6ª…é5Èξ?“d%jC%MÜUù ‚”—éW^yL/NzûvǨ›¿“ëaÿo¥S¿£ÿ¿Q¸&›{My¦}õÿÞ@wL½íi‰Äÿ·îª s¼zä³þã3KQË+5’K˜/Hø…2æU›†ùJèÊy+”ŠkâÄ`‚ýFî›"çM¢6J$­°È¢§_ç˜~bò”ž+Ïn£\“–Ú‰éOY–z[ºz½’T'µò-Ýg“$ßÚ…œù#–í1Uj©�ãÿÖÒ©wÞš~›îø&€¢6ò|rÈâ`¾ YàÊHÓTæ³ùJ•Y‹^9„k}Ù6û¥È”±˜éWF?¦Äöu²ßí[û:Õ2WªrPoÙˆ˜÷ÛÇd"Žøÿµ¹›ÑñÇŽo(js Ï'‡,ޱóETØyYB1z*Õ`ª§ìA@ªü‚yšÊÜM÷AI˳µQ¯õØ¢–ùô+㓹'®Å"u–TQþÞI§ê9öÌ[+’¢vUO–¬‰Ö£¨ Eä’ñò…)ÌÍFQ[jtan Î D ºÉ'&ÍBÔ…®à¼ßbRÁÌy†Ÿþ¹Œ%Ü#/$ ÜHÓd²2ÐÓ~zÑn§)!„Z¯ƒýH#|(‡nÝ$©ÇsÅëog¦vH=Ž1ÉJÔ†“ÃéW.Æ9&{Þ£Ãï¤}øHžFëÙëEÆTªÜ•zÇFþôþz¿íÌýN}L¶WÿÖ^3oÇ3ŠÚP~dy>9dqL’/LÅEQ[~¬x¯¢¨Íz„¦éÐÑÈÇæ zjwj^uÕVÆ@}§¹/5]ÉÞW•¦ªôu…íîô+ú8¤nk_¶ƒ-)Ù¾J¶ŸT©òPšª¢6ûFß¹­ÁQ<ïlgtÛ‰Þ|ÁÜÇS^û…ˆš¾6oåeú?tL~²Ñ<_°ƒUþê ~ñ£ûò@pÀwŸK+m#€ÝNo�„;æÞ†úŽÊkÑ9KÊéˆLz­“eR^Yø‘åùäÅ1I¾ ¨­ «*jï¤ޒ„R*1Q³èˆÇ†j$EÍq&/[ß9Љ*ü—òR(|+­Úm©5¾PÛó›Ý°ü†’ ¥éèÈ®ì½ÿÇc%ÀØ-­¨ÍN¿2“^k¼>Î/ æu}'aáG–ç“CÇ$ù‚¢¶*ÌOÔ¦y)ûx•wWÎOö{‘õÛüé\,° óv¼¤‰ZìüÅÅ¨Û e?y$D-‚ps_ZzDàµÞ(CÛjDp\¼ãév¤¹_‘ÒÞ|ðÆ~¾î¢†sÍéWÆaÒkõüû 髯¾²Ÿæ ŠÉ%“ä ŠÚª¨%àÿ“2~åmû`鈚ù[ËŽŸ+J^^èßmÈLp© $j~_´”ûc€¨¡ßÑué²ýˆ\ó§mâ‹õ[ó›ý†Þƒþñ¨ß\ý\›è©Ôc½EÍ5!sú•Q™ôZcºsŽ{i–yf–PÔH.™$_PÔV…lD S,ø…2Ò4ó¨M'j�•²áªûôüƒn-êÑs¦yq*QÓbåGÔ\ÿ´QDÍ6oÆÎ—ß Ý5­z ŠÌÅpÇóJw./ëßj?²¬·¨‘q™æZ#¢Ïãúeíyƒ¢FrÉ$ù‚¢¶*d#jiMOž<±ŸŽÏt¢iÂ(¸ŠÔê¥ædêü¹ú;Þùz()¢†ÉG·1‘©žhÔµ¤ ¢|›·½>h~ó§Í×°`KÔp<ˆnÅ�Їi®uZ™€ùòp½óEM“öôèÍÿ’kl³ÄRóå\–/¶NBQ[ÒE-íšJZ3¢l“2¨á7–Lé”húl©r(.UIb¢†õ©g}Oõ™BŸ`A"ïI EÏáÄÓ+t­ ªsèɤY6ލ)0ð¡HõÈM˜JQs˜ò,™gs<ýо¶ƒöé’wü3bškyñÒ¢jHØn^æH¤¨Eô„'õ=j¹Æ=á&Ga C¹oWŸNÐx> Ê(0]?£ÞS­�Õ2“ÜÜ@dùHö½Jÿÿó?ÿó±›&Ü«zÛ4iÚ—j_y[ÙQë¶/' ûwp_ª×•ô|${¿q£M6j•&/é9ú}…fÊŒDEžVÑsß1÷Mo»žtŶe®I¼"G*K¥V7ó|¥‘z<v$¬^öò›ßüEôùòÍ£¦€ø¬õô+æ!+Êk—ÿôL{­ÝµMKî•aˆ¼OóP7-µ+;Ë•k–»á®åúw&ó…/h.õD¬þµUØð4Iòi ÞñEí20ÁhM½ ¬Ûz(;|è›Åˆ§_.j–ØñOÏ,®5Ê ¿|HK(3a£¨9læéeN'n¸HÈÄßÚ×zØ íú’ئ€ÞSCéŽÔð¤ì¶yÞ’£Ø(R!þr] Yí{ßAÆ8?QOLeõM¹[ûXÊ}‚y&­£]µ‚”î>ª¹y½šÄ¿Q†ó‚pù"MÐ\¢¨­iy�–Ì(t1GÒ & ¤iú¦9f.j¶p·aGAª² ±û±ì`4æ/jª åô+ŠD-vüvÑÌêZ£Lð¯KZZTCQÓxý¼ü°Í°åûRWO5-FJˆŽþ(ͧ£D "ç?‰¸›õеçr¦_»a…ȾâÍ;õ¶tÓž*´üÝП_èu爽.ä[+”þqØwŶ¥vò­ígE®o¿CŽY¾/ šKµõ"-¸„¼‚ ì´Ïý4m“§c梦î¸V¸£›Cõ±–*ªÒO]± î«Uà3Jå<¶aŒv­ý>ˆæoSö£AÄu˜~e9EmP÷ˆd¢¨-7˜ !FZjÐùíômÛ,jØ”ÎK;³Ì¼ÍlÓˆWïûæ3Oˆ´|]•Rõ™t¢èV2Z\Ÿ7I¤üyÇáï·ý6ˆÜ÷VH½èÛcNîyž _”JêfÆ9cb’~üãë¼òòåËÔÏý4+I³52+/j�-ë6ýÊ¢æÕYÓ0­¨*i³,;Æ…¢œ¬$¢cFj¬´¸¦Q-OñÏì÷MGa·Ì­o·é¢`Èü]%};6:g…ɉ›Î²¨d0-'ÄÊÉdï8Ì“Zï·ø"gÿŽš5/9æâòš±~þóŸ›ó’H‹zº!‹!yý!h?ýéO£¾jè?’üN2¡@vߟŠZ~Y¼¨Ù²uí¦_¹\ÔâÇ?=ӈʌA’†åèB‘‡zfᥠNÈ¢‰$)fø¾Ô$ÅÌR9¡I,Ó£f<¡Ò¯©ÉÝíëj;j_ˆÌECÒÓ¶—N<â•”2|Á¹„ˆ9ÙŒŽé²c^É|‘&lµõÂ]w'h( “{±ÌÏ#ƒÒ,^³Þ¢æšÜ.«¸-ºÂVç~FÍ]—±xQƒ°¬ãô+ÃD-íø§gQC”,™ hy™š,¼”ÁIY,Nv¡ÞX_®„ÐD2t_êÍç6òeÅNç[Û‘ëH£Ù’6Do`Ÿ·ýÞà }?¬÷æ2øQ¾ræ2}áWê©íæ8|;sƒ®J%<–Fx×JÞ39i¾TÛvÌø|q ʾ°QÔÖ \óA‚æƒÏ7Ð9xЀ<-çoÔç|™zDéH–©ó£¡,Íà…ã‹5÷`¬ÊÐuœ~eHßÄ^òŽFL*j¸ÿÓŽqV÷Y²ðR'fQÄšm2bæ„È6M&›íÿq6¢ çnRôi •íi)Âß­ó‹èŽöìÊ‘öŽŠEÛD£MÕ“ÎÉ3s\±§'žê¦ ¿”¦@üýBþÉ;>s³ ;æA7ã|Ày%mýÀ5Ÿä)¹»ïü4éS¸c©EMwŸ6^t'ÉÔ¢–Át–då¼ö£&Çl®5§_É‚IE Q³äõžæ•rY²ðRfúÌŸwl¸·R•zû•4ìèQ'…$ÕÏdžà)ÙÆ~šFø³5¨•}E>Jlïÿc¦ô°QBYJ×Üo½)ÂM$%ø­yÓô óÎ{PÄCä^ågêï¢lUï˺Cèä(­zÇTØ dË5…Åö뾫ˆ¦º"[Áu)D¢¦ÊÅÄtÍwÞ6¼Ö…ض]JFæäRÔÐÚÁéWfΤ¢–6«@žš;}^Nùsm^ô£^ÑÏÙt¦\EV?_y“Y›ïKÙÇÁF»íà%#56¯›³Ü¨o¡2£ md½ô¡T?*+ùÚ—'¡ìì¸h¹×·I—G%#FvFúòoÿü¶\”ÒΑtì ¤¢*¯ÞècBYöÖFã!j¯û÷«[ð÷u» »<&X‰Q’ø]ºOð÷¦+ˆ]®#q¶¯°Þçs<æ3¢ÆéW²`RQK{^£i`áµ!NЪÓí4dßFÑLB;ýã…7/æ™uÈd¾ài9m„פd+j‰NÙöOÿ?ÖAÛ'­Ußk¿Ô#Îã’ä‰Z¬“MÁ_Éo¢NêîXêòÌ?¦¨é3í½’j¿§ÏbM£ýMŸÉé,ç-©Ø ¿ír݉½h'ŒEw•¥5’³5l'¯,<ç1ó“4˜/H¤õKA%< óµ^÷O܆ŠÚ;"ÜýZ+7%()ñBó©^˜5o䏯û|$QKÙo¢Û¥¢¦£y›R©=–zmÛ8;·¾^èo{bÃ`F©¼“ù`µü2‰¨¹ëé'ŠÚ˜ùIÌ$ Ò è|ŠšÐäú{i‰¹®¤ç•&jvôx4¥Â;iïoËOJJØ~k›Oí›Q|Óƒ£ðnÛ,Ú}%‡µ{rWϦQsѼcy…Îÿú˜ÞxMŸßõï÷ð‘<ýÓ×fîHý•×Jö†7}j‘ÓM½ö».¢†ßIÛhPÔÖŠÚ`æ'i0_,H+ 'ŽŸyåëDo#IÑ`•bÒc‰&ÓÆw ö_LË`^_dþ¹:52d;í_tŽÌ |^Ú– „ï!R­öoµßÛí¤ôá‡v0�šW_yûíE½ºÑvËòaeËü–HºÜ¨ó ) Û™ÇQ‰àÞ¦2RyáæôÒÛFòd Em} ¨Íf~’óÉ‚YЬ¼çC·ý¹wè‰Ùs¯QÔÖ‡Y‰–å•…ç<f~’óÉŠÚ²fײ»Çvbq¼áåìì'úÃ% ¨­µ9ÀÌOÒ`¾ Y69E-Ï`ÊP*®Yͪû +mƒ™¤ò¯u~¡¨Íf~’óÉ ¿pF¢¨­µõ¢6˜ùIÌ$+ü‰¢¶zPÔÖŠÚ`æ'i0_¬ð g$ŠÚêAQ[(js€™Ÿ¤Á|A²Â/œ‘(j«Em}˜äZ?yò$V QÔ†ÀÌOÒ`¾ YáÎHÓŠS>S¢Æ”Ï4î{:qÏ'·AQN!I˜/HVø…3Ò¤¢¾ùæ]À3å/a„ï,IÛS>Þã;µ1Iž,&&—É‚d>›eä…’ÒÞù;®ìÍÖ†„µ"Y@SÔY/ÞÿýXðÞ{ïÙOò E²V$ é>øÀ~BYuÒ|úé§öÓ|BQ#„¬èxœ,¨gÝŸ‰’?ЧѳäýŸçþi€¢FY+&~¢>«K¥_Ϥ«R©g¿´@β»s(íK^¯dð_Í´)Õæ»¼Ÿ‹fUŠêw*u9³Ë–ƒ é„7Í5 Bï%î§Eµ¼(Axj— ¡J ¯óM ;vá$àœ×¥V)›cÚ¸"Áî‘Ô÷ISm¶ÛªIY/wI}^{.çví>fv\³â\šÕRïøqÎñý²yý×¢óÏ I[†®5BÈZ‘ö¾O¤Ëžª»­ÏeG¿/ ¿&å^ ®dàðs©ŸdGÃQ•ÚþîÓ +³wÒïÊîáòé¶CÙ.”e§þRNjÁ%‚ß[MjfÂ[iíïÍæœêcw×ÊCK÷ ©µÞÚÃ誯ïH¡\“–¿‘±®×;éÔïH òU},­slèLZ᎔"‰T¿»vC6ô~”ÔìK0ôW‚në‘ìÎüAbÐ52²VØ£†‹æ®lVBû›çîw<ˆ¥ÝóH¸¼CQ#„¬i7ž¶GjÑQ‚k3Ž¢©Š¹y_*“ÊÐ8Ñ´î+ ·¯J©Ú­ñ¹hJµ8ªÔÌ�õ[ª•C/6úZ•¥ÚŒÿR½*Vu$ërŒ@«M¥åŽñ®—ã+²¾Š ãÅ—²ÿÐI$ö³Õ“J}ÞK}ÇÞ#í¸’¼Qâôñì#n¯‘µÞ1)Q®îIsÎ’öÕW_é.èš¼Ïýt||l×È75BÈÚ§ì´f$ ÝÚgM79õš›\Ó ‰„¨¨Ä6w•˜¦·bõXN›m3cAJ;GÒ‰Õ[¨L7íþms\·#Ý@ Wd+¸.…ÂŽÔÏþ$­£] bͯ¨È_›hZøÀ4…•UÅøÑ[ÉŸ·ä¨Šm©Ï פtí'vÝ´&34Ï=–jpE‘‘Ó%5zÿ8èÄç?±Ç|.M1B3pÛFœÜyÇ Yy©ŽM’ø."zÛêØÐüúZÉÏ®Z¯·Í¿×Û1ÿïk:K=G8F©Â¹¶¤ä–ŸŸH¨›K%»½þßkdËmÓpiK‚’/æý׫ÛiȾkÒ,Ý‘zçý.°ß¿$òešdKf?î·•T>ŠI΀ãJ;íÿ,Uçpœ¸ÖßK§q__‡ÂV […x“}·s$;îûþ¹Œ]»¯å,vü&e€ßpÕF_Õ±6?—šŽòúÛI&•Oš ©©k Oý–æ~ÅîQ߯å4¼¥~[ÁJ¬‹’þ4tS«Z^}({ú^‘ÿþÓ§v»Ãîóe¢FYKðÔV€»„§qDÞð½éÍM:B£+··JBP© ÂòQúïäg…@véê&·”( –]åˆfÌ[R öåäü•éO¥*ĶÞǶÔN”®øÛ‰¢i6ÂR©Êƒ½=©–·Ôw•œl+1A“í¢KjYã‹Í~:òS4Çzý•Èü½’*[!ú¼P*ËVUUʪ’Þº»+»{÷ÕïÄüƒý-÷¥ÑQ•µ‹éHצ|X©Èíú±D•;*áM+š-5é稣„�âg–«Ö¿jéì¹:6uÐçKŸ;Sé_ôý\W%hv,â\¿1×;’N‹½ æ%uüQ³øÕx”KÿÖBlY$÷:YaÖ4·LIf¥&õ–¯¦ƒŽëlÀ¹0yµh×\;¬ûÚöÝóE=-_»sœ¸v±k”Àž7¥Vkꨭ¹?úó®‰lþJªö¤V½¡¶ÿ·J¾6¥ ÷ùÖSñC©‡*?½¼cÕ3-Ç8Æêïì9LOx@[–Hšƒ¢FY[P`§æÉÔ“5#C}Ñ]ùÜ”ƒÆ#¹Y.É5] ~'ͪµ~$š³t…å*I½-'NVž«JSU®ú;¶¿Sá–„ísµÜõM³ä£(Œ­¨k7%¬nKyçHÚ±™öU–í°%í¦ªƒ²SÿRŽ"Yô¹úØç%,ªÒÔQ©7ö7@ ‹ê8O_I3¬JP¶Ñ&•T2‚æW¯â6R£dÒJäâæ6$q¬©çȉ΋ÚG$HÇò Âa£eú\ëHä×)¿§­D�MÃ%µÍ”æzo$šI{×Ë~ N²éO¡¯yrà‚#} MôÍÈ ® 3EP×ëôsa¾ãË•[žþ°¡·óWF¦�ÎqÚµK\£Q´YåýÚç6ÚA}y÷{+Œ½Á,æÚ¸ß‚S§„6ú6hï5÷ TŽÖ7çä¿þ»wý„¯eáMQ#„¬5µAÍ .E¯™Ò•Ô•D¥«°•q©¼#á‹?¨ŠäºTkUÙùÍùETñ )h·×a*×§+Qפ¤+%[A#*dšè6\„.Ц¹ïúý P9QÜ(U¤vx,Í“—ÒBåè¶ï£×ÇïE4gO_ÊÉÉ‘ú]~™ø¼õL«zŸ:"eGÀê ¶ð‘|$ºÉu£,•ÚÒh¾—çæ7ZIé ŠRïoÎÇm)ÇúÓ :G§±óhšQÕò£ÿ¤ŽÑ5]ÚfHìãô¨ÿ÷¼TkúÇ £e…„˜û× r|¥'Uúû‰þ‹VãÛHü÷-3æo s¤בœ¦ž µ½_{,z¹‹ ™|? ¾W†èÛkÔwíÒ®QýYñŽ<J lIË»î8¢æf_èðs­pœ¯u~Â>mÄZ‹³ΰ޹ÇýŠùG_5Œô^FAsPÔ!kÏe#ÃPÐÓ|Ô‹‚DhQ³"Û£+ ?¡‚4Oü¦‘šxgûõ4¤õÒ4KéJ4êSe+Øn[ê·?ööéÙ_š(Š4`"åÊ¿•ƒ´h Е¹N`_;[òaUI’ÛÿÐÏßy•¦+6§ù¶:¾ï=Ñ1ßÝØÚ•ºýíº¿[ëïä¯w”ô:‘‹E´L…ÞŽP±›¾goÔ¾neÙ<}fe}çîJ ®Ք߃JÞH¦:oNÕù¤t-)æþõzÙ;ÇzeO<¦ ± û[µíy÷#\�Ç~½÷›n¦ì©Túq}=8¿ØèÖAóD^¶~/Îolÿ=?ÂáùXn"_j¹Ãà‹3s=û®ÊGÑ5zåÉ3°âä"¥v©¦/ï*|‘4 ¼}¾í¼©¼urú…:'™^ôrà¹_ (j„b°AÊ0·’{ƒÎEQzòf+C*í{¦©oþÊVJ¦Ï”éÈHõ¨•¨ÜZì®ÈÖvUÛo£õè§sÞQ•sI‚½fÔ· ÑŸ0|*­úÏÞHO{|±H™íÓd;‚ëi!Î^¨Êq@³Uß±žHgáº[JZߦ®åÌoò³‘<T²'Í(’RvåH÷¹‚èØNó¶²Õßm¿6¢µuKªáò[;ÿVÿ|b.Z–<G ù§hù¾<WRf–?–ºîüí«¿Õ>J7e¯ù*ýÚØhÕúT=GD±(¥À¹˜¼^Ésì¾£¿3½é‡åšÝouÍâ¶ÛªÔãz õz55¿¼Ñbw]¶«ö™[7ÝãPîÆ~S<oãÜé¦f/ Ö»væzékt˜|à°Û‰šÞ=’yW}®<y¥îÓl·Täîn(á]{ýë7l{qS€d EBòŽªÀö«5U±'­ú¡„µJJê Ê5-2f•w“hùëõg[e(j„’klSŸ‹t(zMQ£TvhRº-›µciT·Rš^ ÉŠióî ýÓVŠ!„äœØ<]ºY¨*a²GÁõºb§°‹ ™ÓåÝ4ì »½ØÛ…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’S(j„B!9…¢F!„’KDþ¼D~µ[d.}����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8j.png��������������������������������������������0000664�0000000�0000000�00000042454�15030617045�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��£��K���â`…���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��DÁIDATx^íÝ_ˆi~îqÝç> ÈMè\:Wfo|¥sÓ7¬oú⢋fÁ & 4¬ !†Ìâp à ž…³Fİ„3ãƒL†>+<IÌÒˆ ÓÛÑa1>¦Ó4âwêy«^©¤–Ô’º¤ú÷ý@Ñjý—ªTõÔ¯Þ÷­Š���)!Œ�� 5„Q���¤†0 ��€ÔF��Â(���RC��@j£���H a���©!Œ�� 5„Q���¤†0 ��€ÔFäÞïÿ{ëõznj·Û£é¿ø…ýìg?›˜*•JbÓüã+ÏýW¯^Þ×ý×Eï�Gi q s vñ€ù“Ÿüdf(üꫯf†ÁM„ÂxÖôý÷ß^[ÓÏþóÑûòïõG?ú‘û_·é>ß~û­{¬ž �ʈ0 Æ|˜ó!θYáMS½ÿ~"¸*<ëó)Pǃuü³@‘Fl–‚–¯rN‡0_Ñ,ã¡íéPî+Àú~| /ëw ˜£�6J¡IáÊW� VëQHUHŸþèì9Ì ¯£�åçB’Â’B“¯xêz‚gr@Dìõ]«=ª.Nä aÀ)ø(lúCÊ>|ÒÞq»ÔUÕSí(˜jÒe]ÇN�€¬"ŒX‹¯~*ðøÃÅT>³ÅWNã; ú_¡�²‚0 `iñ�ª€£ö‹Îí$¨BªÃø ¦š ¦ì<�HaÀB › ¾ªÃïTÖòm:˜ê¯þ€4F̤p¢ê™owH´˜Lý¡|Íkíx°³`›£�FBTùô‡áéøR.ÚáÐŽ‡¯–Ò À6F¸êCˆþBÊM; Ú)Q³ ¿S�›BJl:„rxÓDJ5Jla(!U¾¡X…¥ª”R9$Â(P2¾M(!ëPg'-?³”å@£@I¨š¥ª•-Ü”*ëêu¯Êºvn�à&£@ øqBUÕ’¢Þ÷~‡¡¿�¬‹0 X<,¤HõÔÚõWMÓ´ÓìÚ¥ ¬Û¬ÅþG©:ªyÈ΀uF‚R‡UC³tuØkÙ®Âh½mýðt¿¶V÷ƒûù¥upÒø¤ŒM `„Q €|'%K>K.»MÛUAD¿´Fë ¢Û‘o ¡ £Ù¨ÄÈ Â(P0ê%ŸÕ6|ñ0zqöÂŽGAtØeGõ[£Ãø•Êí ¨~nu]ÞýÌZï[Öž[ïå‘Õ«ºÏ-«+Ì^v­¹£ÿX»ß·Nãvxßÿ×±Ft¿ûõ{V ž«ÚèØyôšØ -ƒÚ¢)€eFñA4«‡IGa´ñ…=i>³“Á0ºå] «­}öCضÔʯ¯ÖØw(ÿÂÎÚƒPyךÝÓ°½éNÓº—Ñã@/O¬µ[ª¯—Öo?žwßZ'g±û‡¯ŠÍñÍD¤�®C "ëAT|­ÔY§]+Q˜¬?·^÷Èj¾‚9 ƒå¨šy®JgÕjÍcÄo‹.ï4_Ù[Vo[£ónô¼áãã—± R�Ë Œ 6¢ê<’íŽ#à KFUÍéKñCïA­aÇAX ;<ù`è·­^Ù±zû´öGÏÞï–Õ?¶ÆnjÝáúËQxÝmý‹u!wÖkc“´lf}' @º£@Îi�û|TŸtÈüÀöÛoƒX:Å…FѪÕO¬ÝéÙÀ>Z¯µg•ê¡uΣG ßZ{?jWZkØÓn?x.rƒ0zôÒ:Oô˜šÕŸtíƒ*±Õ{V¿¯ÇìÚaçìêkcãTµ×›�`Â(cª6e±×üJ†gÖ9 cûõ:mk5vǕ͉Âìh)¤EË©ª£ŒC `Â(cª8i(\öíø¨nêéö¢ßµFûä†Ã=ÅØæGjT¹×ŽC>˜FrJumÜi‹‡¼Ðiiµ�q„Q §´QÏÒÙ•€ëøf%TGÄFÒÆ\‡ ©Š"o´¥ )�x„Q ‡Ô„ÃÈ#µÕ0d�àFÒ09¹îAŸêèôI=÷± …QÂàFâ=òLU}†yàFœñ½è¼RÇ;Úð£@ÎèŒK¹;›Íeך;«Tï[ã@ƒÚß ÏÄä¼×ÿô–Õ[olàï»s`O¾Ô)?ƒëŸüÚÚî~Ñ}ìÂúÇ_D§õ×Î?=M €ïÇ"Õ�û¬Û¬—ïXãIxZÒjýK{Ùþ4<O~ý© >ZßR4|®ðºáŒqRÃ×9뿲£zx¶¨Ñ}gðïµZ?°ƒZ5øŽZûì"xÚ—v¨ÿõ|Õ}kœî»ÓøÂ¾Ôs×?yù,¼_tŸ‰÷ã¯Ë˜\.Ã�6†0 äL^7ä.H¹pô!<}çD0ŒNé]†.Gþ}x}üq;Më¾×éCc祟2tî\÷ÑÙž\®Z­ylwzÒ(äºËµàµbq×]=nplÍÚ}kõ>ÆÞˬӸ>×ðÄZ»AÈ;ðþÀá0°êq5«·O£Ûä]ìºð¾•Ú‘uÝ}oÇwÛv‚×{¯ïÈÝþGwªj£cY‹£„Q�q„Q grF$]î .GÁsØïÚ‹V#¬8ÆÃhü¾Ó—O"£*¤›&â»ßÄíÑ4€WÂhô<ó.ûÖ}ñÄ®béOYz«˜öè•õ‡ñ3@…ÓN³kº÷UaÀ o×å»Qð ž·ûëèô¨;at|ßéËßÙiûÁÄëV¢ï.K£�â£@ÎäµÍè•P©`誊wí°sfþºY÷¾ì*£»îqkÔCÇV £§Aà»gµÃ—Ö¿ÐuÑãT%½5øTͼÞ÷Ú78+Œþ‡ ºGV«=²Nÿ}tÝ2aÔWFõ¸‹ðé3ˆ6£�â£@©â•«Þô.ÐEÂzÝö¢ªÝÎã¯íÙ¾ÚUîZ£y`5šÿî›Ñ}ãÓÄ㚯ìtÔf´„¯OìyïcôbËŠU/wÖüLmFǯ^¿gõ=ŸGöüÙC«VªVk|fÚNtþ­µÝgð ÛÃ^ÆÚŒVª5ÛÞ›œ]Àv»mõúÝè9jöøyËöõùjÖTu´vdßuϨøN>®yÜ‹µa Þãþ3ëÝ(±'Þô�â£@é'ãŒfƒëhÔx1:ü?<{aŸ>=¹YŶàg@aÈ!ÎÀ”CôÚQRU"oY½ùõfõœwM|5s<…‡Ù˃30˜FrˆsÓ#¯87=€i„Q §´QWG /´ó¤ÎwÚ™�0 ä”ïUOuy¡(š—�˜FrLöŸÿüçÑy£ánÛx¼Îm‡@šl·éÇ nŽõúí98±¶ë3v¿ ±v£Õº÷é¼4ƒÆ¥* `Â(cþ°ç«W¯¢krÆ…¿m†Q¹´~ûAÔq(’'O­>q†% ùt;×ócx£ý¶]j§Ý«gRrgXºçtÖ¶ý5ÏU`ZNÕi‰áœ�ÌBrÎWœr9TNêaÔŸã~ÏÎ3 £.hîFA5|Üôé5Ý)@Gg9Òck NýYNù®àØ4Â(P�ª8©ò”éö££ÃÝ«ø3Ũ¯Ó‘äÎED¾Ákiàøê}k> ß¹´ö­ªCæGÖU3‡ØãÓtØ Cex›†bzf^<^ÆÂ¨{ÎqP9Êýr×í¶¢åý”TU…¨çüO~òÚ6˜‹0 dœ«¼¹àTµÝÖüÁÔU}ÊîF_‡»ïÇÎXt'ö¦Ã¢Ú’ÖÜí z·T‰öíõë¾ uÿ[: þÑú¯ß,qªÍY|eôû.ŽîüÄóL‡Qÿþ†v®SmÎ ££ëÆïæšä¶j`k£@èüçÕÅaT²H羞{ÖïþÚZ®zê;ýκo¬Ý:²æÓã |žÛݲ—í–5›_[7~þu÷\ñЍŸfWFÝazwnü°½çø{å0}T­ŸDÝwUÀGe�eFò`É0* ¤Ù;ÝbÔ¨þÔNâg'…Ñ t¬æß¿Ÿq¨[!ïn¬“Q,PF×,/þØaøº¾Y€ £ñŠ®k20¯ӽཽ;CÑÉ-ƒ‹+¢ÑH „Q�Â(+„QÑ`ø ™:½oÿY©XõþCk¾ø'ûU}'¬í4íømÛö«ÁåÚ5U­ÙwÏíAã¡ÕôÙÇvôàÀÜ0Jñ�¹¬É¡\ uÍÂ÷59ùê¬ßÓC@ùø¾G~ð˜’í¤Š¼:*©:¿x'Â(€1Â(+†Qñíõ8K¶AUPUäF¯o&B0Fò`0* ªRýìg?c°qlŒvxTM^~QÂ(€1Â(k†Qï¯ÿú¯í/þâ/t‰ò;;šVk£L0F2n<´S8M÷æ^D‡KUUXø×ý×QpÐ@ùÀº´\iüP-ë5!Œ#Œ¥ÀàÃg¼ ŸïܤϺǪ|[äµ›~ćvÒTeô ì£@ù ªÀ¢ž®Óm óîÄ)„ªƒ’&UÖÕäC”*;€›"Œ¢×QeK÷£RŠyâ!T—ã|•]=èYv�¬‹0 È*A4·R_)]­3 ŠFË‘*ŸóBhœîëÛê/Uv�«"Œ¡�é+œëR(U ðm…–!-?~þ¯rÒ„x•]SB)€eFðATA2  ¢ª²úç¥ZZLÓóZò&‡ÜÕ†TAöºŠ*�x„Q ç|ÝÔ†?^-S`Ñá[Ú柪žjë©Ãë¾ žd5SÏïóÓÉ À"„Q Ç6D§Å Á4_45ÿ¶½c¡eS¯§ÀKuÀ,„Q §,¶Dãü¡Ý¿û»¿³?ù“?qÕ/ʧ–- š œiï@hya|[�óFRT¸H#ˆÆ©Ú¥¡`¬0ªPªÀ¡ð£ÐC%l»âÕÏø¼Ðr’…�¨÷ ÷¦e—NN�<Â(3   iRTïc:P(pè=N"…S*§ÉòßµvTõôí?ô²ü]ë}ë}jÙÐr Ü£@Žø š…Š£‚¦ÞÏuâáÔ&ýU€ÒõTO—£ïQ; š>ÈiZ+|ÆOÉ™âùáõžõþ—]–�aȉ,Q½ˆu¨’ª¢�¥Š©žÇTý¯ëºÊRý÷£Š¡ûtðô!^áôfÞY§q;Õ0êùåIŸ/Ë]�›Ar@$+ATaIï%éÐ0À|Hõ!E×û  ¦<·7Ô|ôŸ×‡r}FW© &]V%ÙÞ›ÏY²F=}^-[ú>6ó™daÈ8…’¬QQ`PXÚÜôºþµãÁ͇UM>°jRuÕWM› ¯ñ×Ñ>hú& ñ÷ì§*ƒ›~We/ŒŠ¾}'úžôýäy§Àr£@†ùv–Y©é}, ÆÃ^Ëv]àªÚnëĶ‘qôž|ô0ý¤÷íÃàô¿ß¼ÉWjgMšGþ~?ýéOíÏÿüÏGï#г%›aÔÓ|õ;bú ¥@qFŒòA4Ka½'M w¬QÝ^M‚‹‹¦Uv4ßTí̶l‡QOß½B¾Biö¿S�ë Œ”Å ªj¨Áµï)‡a4ij ªÊl¶å#Œz ¥ªNkÒe�ÅA2DAO!4kATTÒáÒkFݼÓáû¬4¯¸">´“¦ê¡uÎó1·TÕN‘–GB)P „Q #|ÕF6kATíU‘Zê}FU·ç…÷äÚÖƒ¯ûS»[²ïZË¡¾[…R}Ï™ ý�–B2ÀÑkÛc¦DAtéöz„QÇø¹’úžÎkÝ>Fÿ”‹~7úͨºK'' ¿£@ʲDÕþQïoi„Ñ‘…íoú=¹Ç{ôçéP{ÒTU]ßó@¾F©SP–ƒ¨‚²6ð˶Í~§j£cçÑme¤`4wÞ&Ú‡};þ¼aû_XoPöè?îy¿R%@ê£@J|ïô¬QQ˜ÒÆëQÅN¡|æáã‡Qß^ôµ´îS‰ŽQU ¥“„Q >ˆfù¢Rt¹¢™U:š3lœš˜èw¦yÀr daØ2D³~QÛ,WmóBóyf›ÛYatplÍÚÎèºáYÛöwZûì"øïÂÎÚmg¿mg¤×¥©*­>íXiy&”ÙC¶(/AT‡6õ>éœ }—š÷Þܶµ„ÑQUÕ¼P8eÙ²ƒ0 l‰h‚¨è°f–›äÍW_}E•9#´S å;/¿E  £Àh£§ X6~z ÇÇÄÊ|EÙ¡ê¿–sM@z£À†)Ü)ˆä¥W/Ãâl†Úò½fßù¢ç=Â(°A>ˆÆÛ fC9mŽ–¾Ûlòœô[¥“°}„Q`Cü°2y ¢Ú ç©‚›7ú~*+Û4Ô¾WóIéälaØ�ßk7/AT´ñÕ)±9Z.è–}Úaàô¢ÀöF„)p¨ Zž‚¨6¾Tí6ÏwšA>h~©ií¨Í"Œ RUG•¼ÞSH•Qlž‚ ½·óEóKóM¿mš±�É#Œ ÉkÕÆU‡#i·jK¬eù?½hžŽ|�YGnH!N•Å<QÑûÖFÛá›DþóIóž÷@²£À hä0—× êÇXÄviç…€|SUõœØ¹�ÖGÖ䃨‚E7DzÏ´_L‡oƒˆüÓáz¶W(eXaXƒ¢ynû§jƒ°§Gá…v‡Å¡¶×Z'lïÂúGV«T¬Zj'ƒatýªÞY§ñÀZ½ÑÿÀöF!ˆê3( Ñ38=½€ŽLųíÓ‹ÏÚ¶¿shó?Z¯ußv['¶^Úùë×öúY¸Â(°U²´¡É{ˆÐû'¥KmµCÇ&¸žïä¤f<›ëäÈΡU«>ŒîYe·e½•eô•ŠëX§©ÚèØytk¹ùïfÇêíÓèºu%ù\Súm«×ÛÖ×_ÍC]ŽnÊ Â(°$Qm\òâ|onz§OvS/.íhlöô¢Ã�£îòêåÍaÿ•}ÞøÄ·Ol]X·y7¡�¹Ês mÐ}j­n47Çöyëµ]†ÿÍuÙmÚÎÒatê5RD–àƒh‚ƒrŠÃlÐòD»ÝâÛ\Ïû¤ÂhÔ^ôäµµvïÓntBJatøÖÚû÷¬é‚â…µÚ­f7Ù0:ñé"Œ×(Re€ûlÑ|Ðü J]úýiçCM}’YŸ$q˜‹Åä¹õÚ‡®³X¥rËêG¯¬¯ïzpbíÆnØÌ¡öÈ:ýÁ¨S™kö0êX6;Œû/í°V _Ýv Þºû¹ÿ+jµúýÑsUöêVß þî<²çÏŽ›WDÔ…ÑÚCkÔo×ï±õ:xÏÜ}všßÙ©»¬¦ÿ{ ýÿïÖ?þÂêUý¯Ç½ ÞíöF|x+Ê¡Ôä6‚HŠ*fœŠµ\üÐ^šurZj'å¼c+˜tøõ(0{Q•3¬¬íì·íL™ÈUÄj¶ß~Ü‹ä°×²ÝêCkŸ]„Ǫ·­Ñ9uß{­yl÷½Þ™ ›š?ÕÖy]eTêZxûeך;µ¨j©ÇÕ‚0VF]à¬Öíè¸Ì¿Kë+`N„Ñ#ë.£e@¯ý!öøSk×o_} ÷>ï—?DŸs½æë"Œs(´i¯±(áMŸC?d‹¯¼£|ô›Ô¼WµTËAœBª~¯×Ř5´a49>@þ. }£Ê³‚ãí à=³gõZJß¹{ ûÖ}ñÄ®ây] æa÷×ÖrÕÕ¨ƒÓuat§i]wÌ~Fõ‡éÝshxw}õŸF“íí Œ3øDQ‚¨?¼¨ ƒô(tpòrÒoÓ÷¼W•ÜWCµL(¨7>Ò4®bX «‡êPԬ݉*£{Sc¼ªyÏj‡/­¡À·(ŒF;îðþûñí7 £®2ú1ÜIq—ÏÝãÝ( î}ߺú®2ºk‡³TvP£ÀD§+yÆ�÷Ù¦3÷:ÊÍwrR�ýôÓOcª ;*©‰‚ž› mgsÚŒ¾±–k£Y±êý‡Ö|ѳӶÚsV­ÖøÌµ«5_ÚnNWÃCþÁõµkª:ª�yþ;kïÏéš \e»¼æþ³¯í±ÚŒÏãÂi¬¢éþžYçз_=´vOƒtùJ¹ªçvવ{Ö:9™xq›Ñà~µOìù;²F˜"QmäŠö™ŠFÕ1m�èÈ„ÿüÏÿ´?û³? ÃD4é÷˲"#Œ¨¬h¡MÕMÈ6UF9·9´ŠQ?qdEF kE ¢ú<TUòÁ÷°Fyéw:+ˆú‰a¥§ ª3áñ0¶ª)ª´ FédV^š÷ú½Î«Ž21mkÚ6Â(JÍÑë‡OÉ_i+âg+*…šT@Ò€F-*rÑ¢ MU¾³;ðàÑ£GLL[´ìùËÛBEéhC¯Ã×E¢j[¦Ï‡üѲÉNâaئ4–=Â(JEáS!­ÈATŸKÕ5Úæ“‚(; Œ"-„Q`ƒ|-z›<µ;d˜|+âÈX ai!ŒR– ꇆa(§|ÓrúÕW_Eÿ¡Œ£H aØ�³2QÑg,Ãç,:?>,Ê‹0Š´F„ùzšÚˆÒ»8´EG¦ò"Œ"-„Q A>ˆ–åp'Ü‹FDÐ)BQN„Q¤…0 $ÄѲT–à¾x4/µQ ýo9F‘Â(€²Qa€ûbRóªÝåDEZ£À ©BX¶ ÊPNÅ¥vÀÚÑ@ùF‘Â(p  ú•)ˆêP®Â7Ü—¨v²P.„Q¤…0 ¬IT¡¬lmu΢“K±©òÍp]å³Ý@piýö÷šnÚiZ÷2¸¶Û´Øÿf§Ö®ï¸ûT;wEÑF5ø ª¶¢eÂ�÷åàç3ÓÊeë`xb­Ýjðº¬ÝwÉÓlеV«kƒð¿P¿mõÊŽÕÛ§Ñ(Â(°¢²QQE”³ô”ƒæµ†zByl=\v­¹«‚Ží¨ñK; ÃÛ¡w­ZÙ³VïctÝ,çvÒ:°Ãλèä aX‚XYƒ(Ü—‹vº4>Ê#Õ0zñÖÚ‡_ZwD.÷ƒÆßmYO7 ûv|TŸ¸þäìØž6vÃÿëm;뿲£ú­ðÿJÕv['A¤E–m}Ù F‘KjCWÖ * p_>e^ÞËhë`FìÉ“Ïíé‰ozagí‡Aà¼kÍ6£a{ÑØõǯ¬µ»ͨ]©ëej÷ƒ Z;²ãîÛ½¶¢Š, ŒKPU•¨¬UAUÉî§|t$€ŽLå‘Z­ìÚaçl\½<ïX£vXúpÖ¶ýêmkèð{ìúsw9 šî²* ¿µÿçéëþïûŠ*20 \£ìATŸ›¡~ÊI™TE9l=D!²Ö<žè°4ìµlW–Z/¬å·‡œÂžöÁõÏ_Yçp×*ÕCëœ_†¡ÓU@ßY·Ys÷ÞýG;¬U韄Q`…°²Qa€ûrÓò¯Ê8Šoë ß¶ýý¶MW.£ h¥öÐ £ÕšÕŸtíÜUIc××êÖhýoë¶ö‚÷Üçðk{ù+ÆîÁÕtë‡Öê~ˆžYEfPøÔF¸ìATŸ]•1¸//QvFÊ!@�a˜âƒ¨6Àe¢¢Ê0mËÍï0¶lñF‘Â(ãƒ(Œî1¦ßãËai!Œ‚è$†r‚§fŒ¦P|„Q¤…0 4–"AtŒî1Š0Š´FQz ¢ ^Ñ1sN‰8-:E(Š‹0zC:‡~ý™ý¦ý ø.9—þ*£(5D9=Æ�÷˜Å·!¦Z^\„ÑY†6è>µV7 uplŸ·^›N¥?ßÀºÍ»+„ÑÖýü—áùùKŠ0ŠÒòA”1Ç|Ïi†rÂ,ªŒR1/.Âè C^ôž5] OGz«ÙM4Œ5~ê­&a4@E©Dgc€{,¢6£TÍ‹k{@aMgJºeõÆC«¯[uƒß_X¿óÈý¯÷R­?µ“Çãó×¹oU=æÉ¯­­30érë;{Ó°ÿÊŽÜÙš¢Ç b#éN;:=…gvò†ý—î¬Mî¶ê¾µNÞºPÞ÷O­V¿?zo~Úyüµ=Û¿cõÿñwV×uõ¶õÝçÛÞ®sÏõoáùó+µ Øþ6º¼~ï•5ýkêÿ³S;>ªŸÓ?nÎù£ügªÞ·ÆAø]ì·ßÚ0Ìù7L¯)„Q”†(Aô*êGu`…Q*çÅ´Õ@àÂT„Ü—&ƒax¦øi@ï!î}xêOÒ>„—wTQ|gÆð´¢ÃkíÞ Ïe¿6=_-¬lº÷©�©¸†èW /Wë_Øqÿ"¸íÒúj+£î4§Â@«ëãÏ¥ö¥ñÓœºÏ1 ?SíȺƒ?Z¯µ·ðt¦îqñï½vLªßáj£(P-ôѫԋN\¸ŽÆe9)¦í‡Ñ(˜¹ËQö­ûâ‰5\µp:¬EìÊåÓ¨ÒV5…1âž|ÛxŠ^säÂúÝ_[«¡ŠaÔéš0:~é0:>LïÞçnËz×…Ñè9âï1ú¬³\ù.|ÝÄw¸az=!Œ¢ð|E”ÊßU¾ÙÜã:¾‚NG¦âÙj ˜Fß!îžÕ_Zß·eƒTTÕÓãÖ>²¬ŽJGV«=²Nÿý8L®F£ÊèðÌ:‡wÃËî¹n[£ó‡ðµæVFõTm]ìÊwá^[•Ø´¾ÃõFQ ÑÅà«ÐòÂÑ…âÙ^ ƒœ^¯²³gõ½¨"·óÈž?{hÕJÕjϬQÛ±Úg­1£ª¹S¯Ûž¿‹X{ÇJµfûÏ{A¼\ëH¤6žµkª:ªÃå翳ö~ð¼Õ‡Ö>¸Ljsy¿~ÏþÔ½~¼Ò?¾ý©>KÛz®ýetÈ^í4£¶²•Ý–œ†¯ëÚÍ^öÇmF+Áçßf½YÄÛèõ&¾‹WöÖ½Çt¾Ãué5…0ŠÂRï_‚è| pU)ˆj,ZK�Â( MmÛ¢‹©C U.¬ÂF³Žb!ŒfÑÕ¶œnгEËa[¡ ª EOUc*\X‡~_êÌ„âH#�BE!iC©Å¡çùà7á;½¡8£H a…C]Üã¦täAᣣH a…¡ð©ÓD¯çÏ3N›?Ü„šyè7‡b Œ"-„Q‚§B(At9ªknB¿5vjŠ#Ý0±é›OÁ°×²ÝŠÆ]÷ÌCçÖkº!›Ægfš28±¶Tÿ–Õ^¥2¦gF‘{>ˆªBC½C9!IÚ©aŒÚbH¿2:yæ¢íúh½Ö'V¯×®ž‚splŸ·^GƒÛ°îç¿œÙ“Ý…ÙØx¤;WNå©×Ø‹Æ}kíýÝ­žr3Ë£È5D©ò-î‘$µUÛQä_©Ã¨ÎÇþੜR§îU,/\°¼iÉ ŒkÖ°JaБIƒàW­s+}ºs¾ïFgs ÏØ´èÜóeBEnDWçƒUQ$IË£2äßvÁøv¥²k‡3sFÝi4u8[·ß²zëMpë¹´öÝêGÖêžÛàäiútXüÀGÕK‰åibšÝ `Ø{jZ'6tñ¾µzumtÚÎè±µÿnuwV%ýÿWV¯ßþÖìñó–íWõÿÛÕsè G§8¥VwÝ^ôÜÑ©8ýùäKNß©F‘+VF@‚èjô1À=’¦J;¿ÅüÛf p‡´uºÍÁÇð›£sºOWF£¶¤º]aî–ª­ÿúõ‡ºÿž;Ô=쿱×KœÏ}6U5?B¢.߇Ê(ÔúŠgü¼îa¸ôm?§ÞûyÇÕYaÔ_û\á­¥FEîøñ Ùø­F=ŸÊ ›àGg âžoÛ óQOºa¿k/Z°2éBÛ¹ýÐý'{ÙnY³ùµuûmðC×:/ÛÖjÙÓn? †H}¦ÉiFeÔUC}Å3šF‡ê¯ £Ñ¹é9L#úÎ…0Š\ðA”êÞjà›¤~—ù¶Í@vöÙ·ÖI<ŠÅÂèàØšµ»îðýÅ•ÃÙa?Qø[ë™:ÿ¹í*¡÷Ú÷‚ÐøAÿ,F£Ï䪽\s‚Ù˜î[­ylƒÁkÕéÀäF‘Ñõé´Œ‰MÒïRm¸‘_Û ¾ýgÅ*Õ{¶ß|aÇ¿zV%+AÀ;~cíý[Áå °5¬V¹kÍï¾±£v v›.ÈžY÷èÀÑPI®]éj\¸t¯éŸ‡A7|ª¢þ{ØŒ xþýö[»T&µQÝoÙóÇQåu‚ÇŸi<´Ód˜5Bõ¹Ú)Ž0Š\ðÃDWÇ�÷ØýFµÓˆ|J#�BEæ)€jA%ˆ®GQUFMÓrƲ–_„Q¤…0ŠLS�¥"º>¸Ç6ù¦4È'Â(ÒBEfù Êa¿õ1À=¶MíFÙyÌ'Â(ÒBE&DoNß!gÆÁ¶i¹c±|"Œ"-„QdŽ*yÑ›c€{¤AMB´a¡Ã\þh¾11¥5 a™ ì ¢7§@Ou iÑï˜æ!ù¥@ÀĔִ-„Q̤ ˜Ú›Do†î‘6-{4e„Q\áƒ(½¾oNߥ& M £ßÿ}ô�d a¢Éa€{d…Ó³S «£p>Õ®‘ š†rBVø#~Û�²ˆ0 ·R%ˆ&‡î‘5:û×·ß~ý�ÙA-9D9„—,}§lø‘%j3JG&�YD-1‚èf0À=²Š¡Ú�da´¤Ô†Œ š<|z.#«¾úê+~ó�2‡0ZBªŒ¨BÂF)y p,ÓN(m™d a´d|U…Éòzƒ"ËtD„SÓÈÂh‰ø ʆh3Ti¦ÚŒ¬ÓïŸê=€,!Œ–At³ü÷Ë�÷È:¢gY%„ÑPg‚èf1À=òD|šê�È ÂhÁ)€êÌ+ÑÍa€{ä*ù ? +£¦�ªÄ0C›¥:ayÃd�²‚0ZP>ˆÒ³{³ô=SaBé a:E(�¤0Z@ÑíðAt˜È-¿jÂCG&�i#ŒŒ:%D·ƒî‘wªŒªB �i"ŒˆzÈD·CÕ$ªJÈ;µ¥™ €´F BATgV¡G÷v0À=ŠBa”¦&�ÒD-�‚èv1”ŠDM{ر&ÂhŽ) D·îQ$jjÂ΀4FsJ…P‚èvù6v|ç(í`1V.€´FsÈQm@EÛ¥ ÊFE£eZë”ë û/í°VµJußZ'çѵ×ùh½ÖžëðW©ìY«÷1º�B„ÑœñA”6^Û§!p–Ù`ytíH÷ÖÞßµFç {-ÛÝmYoÝv­¡w­J0a4G¢éÑw¯5½ŽQTZ¯¨3Ó\çkToÃèJÁ’0 `>ÂhN¨bAM6Òœ:E¦uŒv¸æ h<Œ†——C0a4üF‚ š¸GYh‡w^›hÂ(€M!Œfœ¢ %”UD¾ Bí¢ý�5MÑÿ£v¤¦°!„Ñ óA”ÞÛéa€{”‰–søÛ¿ýÛ¨÷{%ÖNúuwÇaÔu`Ú {dµê¡uÎ/c—ß[·y×ªŽ…}î £�æ#ŒfA4àe õªÿZçøê§xó”«C;-FãC;iZåð>€2 Œf(A4}úþ5®(Ptj ñ �65MÆ(�i@MÜ£Lt`:ˆj€McM“! >ªˆŽ: 5Ú0ë=P&~gØOü�la4#¢ÙÁ�÷(³x %ŒØÂhhø‚hv¨#cº¢Ì|J~�¶0š2­ì ¢ÙÁ�÷ù¢æš|[óÎóÕ=?ùë¼Un÷â÷KúvÿW6yû¬Ûd“·û¿’äí^ü~IßîÿÊ6o÷â÷KúvÿW’¼Ý‹ßo·£8˜«)RU'‚hv0”S¾hÃD]íöY·É&o÷%ÉÛ½øý’¾Ýÿ•mÞîÅï—ôíþ¯$y»¿ß&nGq0WS¢ ªSï1˜zv0À}þ°aʇß}ñ0GS@Í&͵ßE~°Qʇß}ñ0G·HáSç}&ˆfz3À=��ÛGÝ…O…P‚höh~(ˆ~ÿý÷Ñ5È *$@ùð»/æèø ªª(A4{à>¿Ø(åÃï¾x˜£æƒ(ãõe“æÜ@~F‹‡9ºAÑìÓ¼aþä% |øÝstä£õZ{n!¯Tö¬Õû]¿ªvˆ žXk·ίݖõ†Ñõ+ðg™a€ûüb£�ùÇš|ÂÐÎ;‡V½aåTzÛòÎ:Ûk‡Q¸Ï?Â(P>ü9:áæaÔQ „M[?Œ2À}1°Qʇß}ñ0G'Ü,ŒD·mý0ª&Ì'��ÒG°\U5í«¯¾Šþ ùJg›–£š7þìJ p_TH€òáw_<ÌÑ Ë…Q…ý|›Pÿ?AtÛ–£š?šþê¯þÊþò/ÿ’¡œ ‚P>ü9:a¹0ªÁë}¸9::¢"ššÕèŸÔy‰^ô�?Z‡£X˜£#ñ¡4ݶFç]tÛ˜Ìø>áôÿðÑ­ØšøÐNšª‡Ö9ŸŸHãó+>1âA¾i(~÷ÅÃ]‘ÚÆÃŒŸ¨ŒfÛ¬y¦¨ÓòKó�o¬ÉW¤�3jüD;ÄìšžWŒ/Z š—�Ê…ß}ñ0GW0ë½ÚªZJûÃlóó‹jh±hž�ò5ù TMSg%µ3ÔayLÏU¬Z¨†�=… £~ P_ cO 4?U^wú›¿ùûéO:ó¶<O„ë|WFµ“ÄtuÊÛN¾~‡ÓëZ¦Š+ÜlŠžÅR¨9ªÃ¯: « 5‡Í'i%¯ï%O45?5Mo°Ê>©iHÞæç&äq£¤°¥y§/è/ÓxR€Ñò~>Òôg¶Mþ6 £ÅS˜9ª³VdT‹fÓ ^+μP3æç|y›Ÿi¾ù¦>4ó¹JËtÂè÷ßÏ|¼a«ÈýÕŠ@‡ŸUeÈËuò^4?µ‚ÏS…$ y™Ÿ›–§’š›h¹f¸ùòFý|T Å|F¬"×K‹VZ ¡ £ì.–‡ð¢C]ÌÏåFCyØàùæCšh>´X–Ãh¼Ùóñz„Q¬"·K‹ßjïT‡çq½¬‡2æçr£¡¬oðhn²š¬†Q?UÅr6ùÛ$èOîæ¨öHµÂ¢Ñøj²^Te~®Ž0ÊêFÉ7R€Éb¸Êª¬…Qš ­ÀˆUäjiñƵwÊaÜÕd1¼Ð `}„Ñ좹Éú²Fý|Ô{b>®ŽÊ(V‘‹9ªÆo&ká…ùy3„ÑPÖ6J4º™¬„Qš Ýa«Èüõÿµ’¢Ñøú²^üü¤ÀÍFCYÙ(Ñ|(i‡Q>ôTe>Þ a«ÈôÕ^©ª 4þ¿¹,„:s$‡0š4JNšaT¯«ùH³¡dF±ŠLÎQ­;4Yi†??µ¢g~&#Íù™%in”´\ÓÜ$Yi…Qß¼‚1`“C`Ä*2·´hEDãÿä¥^|'�æg²£¡´6xñæC,×ÉÙvUó ßlˆÃòÉ¢2ŠUdjަ׸ÿÒúíO¬Þ>þOéµë;Áìµû—ÑuÉI#¼h~j¥A'€äFCil”|çš›$o›a4Þ¼É#Œb™˜£É4þÚ ûÔZÝAô]v­¹³(Œ~°îç¿´îYu›áE•¢›ÏO,B ms£¤åÚ7b¹ÞŒm„QÍG?v(Í+6‡ÀˆU¤¾´$ÖøøÖÚû÷¬Yà0:<kÛþ­f¦Ã¨ŸŸtØ,Âèvéûf¹Þ¼M‡QšWl•Q¬"µ9ªÁÌÆÿ.U¬²óÈž?{hÕú×ö›Î#« ŸÀjý© .mpòÔêUý`‡­ÿeß5ïºÛ+•«·ÿÝúÇ_¸Û+•[Vo½±ݦí·ï<þÚží߉’×!úÑãNƒ—î×øÂ¾¬ß²Jußž¼|f‡µª»Ü:9W*´Îánôzáóì"öš~ ‚åÙ©Õ­ªÿýã'‹>_õ~ÝîWFÿ8ºnô™ÿï?[Sï!zÞ_ýæÃ÷4÷y'm#¼Ð™c{£!-ÿ›æ—k:·lÞ&Ã(£³l×&›ÛøÝc»R™£ñ½ÓYcMº@X­ÛÑq߆ÑuÎyÇ.¬}°nsÏw6쿱×ý‹(ÄÖÂʨ»ßÝàòöZ¶[=´Îùyð˜Zì¾°cÝ‚ÚkÞŽêÀݯR;²îàÖiÜŽpxy§Ù â«7 ^ê0¸½m}BoÞ³ÝÖ‰ ‡'ÖÚ½¼¿?„·»çú£õZ{Vmt,]µsçaZ/Â÷:Ýftô™/Ãïegº2ú.x_µkÛ»n2¼øù©‰±C·ƒ0ÚäF)Þ¹…åz;6FUø yÅöF±Š­ÏÑeöN¯„®aߺ/žXÃUÌ.lðC×:/ÛÖjÙÓnZãa´ß¶z°°j ']ÿ]Èœ “ÞÕ0ÞoÞe½¥®½h5Âê¥ £ºîå¨Z†Þ?FUר{™“QU6z|¨£0zå3O‡Ñ ëwm­†*´aUw‘M…ÆMat³ürMç–íJ:Œê¹Í#ÚÞmÊ&ŸéØÚï^·²™ ]aűvøÒú3ÚT*xê¾§+£»vØ9‹UV'Ãä¤ÃèàØšµ»îù/ô^]˜T…r/|ý‘¨rZ{d+ÕØPXÖaö6èáVŸïÝÌÏ<þ^ÔY+¸¯{Þ÷Á}ïn=Œúù© v’,'éù™WIo”X®Ó•dÕ²æãFópÛ’qÁa3¦GRÑÿŸLnç6fs#ɱЭ--Z1hEsíÞ©o3,Èa¼°³öC«VªVk|fÚŽÕš/­st`U£6›®“Úxê÷`¢ýfµö‰}ÝúÔµ «¤ñÀèÛŒ†·}ÖlD÷‹OAP­û6©Áãß„¯UÙµFó jð‡è}ŽWÝoÛÙeÜf´¼÷ýgÖ‹·=ŽoÛŒ÷óíe'>ó±ë~p»ž÷ô4¼\©XSÕQ×`¢QĤÃËÒós«+Ö9|¥ÜoPôÿF7.q›ùü„Ñ~gIJ¤Š¶•�SLI…Q=GR‡å]`Ἄr²æ¨.ñ£b‘ôo3n“Ïtl5ŒúP®ëÔôh¼2Q8þôëÉà™¢M„Ñ<ÍÏë7(ùB %½QJêù¶` (É0šÔïãºy91Êɺ£ºFWB-ÂhR'Öví7UU›Ñ#{Ù[ÜÃ}›£„Ñ"Jz£”Ôóm%ÀÐæÃ¨?VµÚÁAxôlá()“órØeGeÅ­ã§G9ùoV¯×¢Ë;VÿÕ?¯1’Êïb‡ìÕDMÏwÇOŽ¢Ñc¾´—íOÃÇ¸ŽµC½©©×9‹|†ÆÃð¾:J7 vz&F¡ù?vI&x"ôÚQ?ÝGýÔ lÖs…Ÿ`=°,ÂhI¤Fãm¡–Y±~¼:¤ÕôÊÖOÁÆálzÃ0ÝLa´q¹e÷ë÷‚û”Ø!ûSmd‚Ë ‡ñš²+Ü@ùa´B?p÷ GC0;·“Ö~ð>µâ~d­îocŸ?Hñ?Z„o–R½?jv²ß~kë<at34ofòËMí¡5Ü2…•¤ÌŒaéÊQ7FEíÿw]Ó§ë“pwªIE|””ø¼T¿€;áãF#¦¼ o÷}ÜïYMÁΣþkŒ¤â–µè²{¾ 8ë5]óh™p—¼Ž{\ü¾~<5 [GGý%Ügº®¢foóŸKv±¹¿¥lò¹‘ÂhI¤F+­Xc›ÝøJÏu»o­ÞÇØP]jëê†a,lk¼ãöâ?º•t¸Á‰`vJ[8Œ—{ó† ó÷†ÖÒ绥ۃPýúõ•(GŸn(Üû‰ÚA»ç†3~?Ll!Œ†’Þ(-z>7ŸÜ²rëlè7ÊI˜`ùŸ¹¼-Q†*ˆí…Ñq§Ïø¼˜5JÊx^úkí(„“ÖgÎËáz&vߥGR¹²ÎŒ–™—ç¼N¼Cïè¹gŒB£îu÷Üzv´<Ï}®Ñ™KïeS6ùÜHa´$²F­XƒË3†´ŠÎrÕ¢£WAЛ½a¯"c+ÙÀxƒr5Œ†›sÙ½ÿñk\&,¾a;·ºÿd/Û-k6¿¶®*£Ï¯Ão·Âqhõ†b<¾1¿ÏÅ£›¡y<Ïļ‰-³É˜`ùŸ¹¼×—ÄöÂèdeÔU�gŽ’Ÿ—ÑŽ…F9‰íÄ¿ãyé+–«Ž¤<ÉJëÌ9¯så¾~]Ñk¸÷[Oº¥°³ìÄ÷rÝsÍ¡åwS6ùÜHGñèûñÄWîš‚@Ól‡a! “·k ~p¿y6µaˆÝû1†‡XnOUæDmp¾±ftˆÎšýæ—öäEfq+¨©×Ô?õ^ý†q ù£§Áç›1Œ—‚Û•Ó ÎÞ0Œ…ßUX½ ‡¿ ¿¯è ‹† Óå页Â×p·>X «°Á£´ñ‰WF £™ ßÕ<nÞLÏ¿3rO*À¿…™Ë[yl3ŒÞ©ÝqMFëW?"K|””ö—£m€~ϱ&•`grÿyÏ.c£œœ]FÏ¡¦;§ÿ±ÆH*{Vß‹v^vÖülƶiâ>Á2t1=bË—Öz=núùþ>> Ík몪Zþδ~®éõñUºß¦lò¹‘ŽŒ†Ñ`¯lÔÓ4ñ•½ ˆÑÎmX´vˆ‡ ÑaÝfFŸ+%í%Æo×!Ö#{êeøû~âÚ}Íl¤CÑ®’§kÂö‡ŽüëÌ1Úk .ÞX+XùßÛÔá%¥FcU¡¥V¬³‡´ Û5z\Ø®òrƆar]ïoÚŒ÷Û©×moô<³¦©a¼ºï 6ußï:vôÀ·#UÅãßbŸ?˜Ÿ´ ®‹¿·ñüž0Òw•¤EÏçäZBcó/é�3cXºç£uMñm/Œ^?63n&éß&Š-“at¢§i&Âh( оš›j+óµ½PEnðÖz±Š¤ãÆßúçÄZžÚÉIËvw[±=_UDn_ ¨K‰…Ñ0PÝÞÍUM†;³UãÅèóÏ^اOý÷QN„ÑPÒ¼EÏ·lÕëÛ|ÖŸÚ1(YˆmÛd%èOö¨k·ã{š>°_ýæG§ØõpžÓ»:ì)=yÝ™FÃö1Õ(`†asô\Wžc2ŒÆ {OíÁè|ôa'Çn»þ43¹Ï¾—j½iÏ;½àxe £“ÄM,¾±Þ‚þË€0Ò2‘¤¹ÏûMÎZ ›£Ø–¤›q›|n¤#{a40ÑžjD•ƨ×òÌÞÕ ÂÉ’a4¼¬ÃðOÂÊèȼ0ªCôŸFT—ïOuP‰‡Ñ©À»(LºÊècë|§vi~Ø ¯|•Q\ÅÆv3ØÈ¥‹0Zü–°Š„Ñ ëwm-×Ö·»Y½«uß9V:L?˜ۣ@; ˜šü¡úè¶É‚— ’£ÃôQÆužc a´XØØ†’Þà±Ma´86ù[âwZ<£Ã°×ª¶"ìíÂèÌÞÕ L„Ñe:0M›u»ÞÛç¶?jËp[IåCðOôÞ'+ÇÇ»\`FƒËî9o‡ãqº £`cëF‹…0Z„Q¬"“a4¬Z†=MOOÃË•Ú5UU€<ÿÝÌÞÕC×®kª½§ ¢þ~ãûÏÚéJÈ›}» Ìî:ÿzQHt×Å*¸Ýöxh'Mµ†µ&Ú€N?o0¹@ O+RÂh±°±Ý ý®ž\†Ñë¶13o¦ú3ûÍh›1}[|Ý1f6GSqå&ÃNn/'o‹¦à9›íîâ£3è±›²ÉçF:2F¯CïêÕ"Œ®ºc1š‚nêcÆ>°gíÏ[ÑFCú“”ôóÍ•ê²ôìeÓw ^÷è¹µž|3wçvé�щ_·Ó|fϦþ§«<·FÇöyëõœ#akpósÁÑ·‰Ûu—k>Âègá‘´øí.ìÓ¯Ç#³è¾ûu«×¦Ï2Üä 7šk 85=7ïü‘9;·^ûÐjnÏ s¸<ÍãMÙäs#9 £±º[¡ižÃÞÕne0½rÞ\OÝôÂ(cÆÆWúI­è £!ýf’´øùб,ûÁÝÇ'Ó®Òr¾XüÙ® 0ÓGj‚û?pïíÔÚใÏ_þg¶FãM·Fßk¦Ãf`¢_ÂÄíï¬ÓRðæù?„듉ۃu‹?p ±åµÄ;È:7>p©0*ÑѹOM›ôoÅ–Ã0Šu¤FÝ ¹ìcÆÎ £²ÞŠž0Úf-Ʋs|ÅåÍY;ŒžÛ½?¸5±üûöúµ"ÙØæÃh�][þ¨�PÿÚ~3ê «¡ôtƶaÎãÍ«|wÞw0c^úN¬nþ¸ÛýsÓôw5ëñŽv*Â[\¥;>/o<|à²a4ø(®Ê>ëýͧϹ)›|n¤ƒ0Z©„QÆŒ]"Œ®·¢'Œ†4“4÷ùв,G;V«´7¹.ÀÌ £c³–ÿ¸Í‡Q™ó½¹ß¹>ßEX]ðSÜ»~Gt©0Ý®ÊôÑ?.FõÁNÅx„–E륩åeÑ<¾n^F±e„Ñòš– 2«Üwu©„ÑÀìOÉÆŒ­ô £Ù¶h#WˆeyFuŸË/ËsŠs]€™¨ÀòFƒˆî‹'QÓ¯èó Ϭs8uê^÷Ø9fÌËù‡ég˜s{¸nðóFSu</£eeíá—£¦ÇæF¯sã†îZñ-{äy÷½y[µl„Q.PÂ1c†QÓßDÒ¼EÏWˆeÙ…SõÌž:™Æ‚p2²R€ÑuGvo‚C³î·ý0ª±œïYíð¥õ/4?ôù.‚ýÏÃÕÚ”NÌËí× £zoq%TÏë†:ômŠ}“ƒx¿‰hþ®F]Uÿ3׿xrÑ ÛA]( 7kè®ßÍÂhmÕÒ£~EZÂ1cç†Q:0ÝTÒ¥EÏWŒeÙÿì\Õìe/<øVàV £±�=~ÑxÈa›Ëûã׌d#ŒF;€Áïy¿Ý³Sw9ø 6> ¾ÿ÷[<w;±0ïÃû¬@îæcì¾nÒºbÖÐN3Ž|ͼ=œ·îºÑ:æÔÚ£Q ü{ÐNÑ †ŒOÁËogÜÆÐNØ‚„ÑØJ<X@âÚ@è‡\³ÇÏ[ÁJeråoœî¬VÎnel¾ëD—÷­Õþû¨ÊLÁ álÞãª÷­q  I4Þ©{—a›²ê=«ß¿®`âmÊ|;³y÷õ¢ ‡{Á h¥¶jÑSHZa4¬ô0f¬ž›¡²Oódžâ,ËZet­=ÚIÓ®5Z¹£’, 0aÅ5ø}aõQ€ ž¯}2ñÛ˜þ=L|‘í„Ñë¨Âý8xÿ~=¬ð©�ËÐ|Þ”M>7Ò‘ÿ0êIÝWú~È56w+û`å~åP™ÚLÝ +Qî±ÑØmƒ7ÖªïYãIÓ‡íh¥®ðÃÊÃìǹ¬ …Ü¡ª6 î}Ô¢÷¤ûï£ýáí®êñGWUsïsæ}ca4à^ãJ5aµ¶ji…Ñë0fìz£¡¤7J7y>–å›ËFõG,¢à¬Æ—ów:³)¾Ÿ4H˜^oS6ùÜHGþè«:ìEíj¢aKÜ>*ŒÎúáÅu„“?̪ŠïÑÇÃèìÇ}ŒEF'*!zÆûÝÕ•ƒw:뾋¨*t«·UËf¬j‡•!ÆŒ]a4¤ï9Ië?Ër²F‘-7À²òF]51lç3p ¾ïÆ*£³ÂhTáTƒõØvBUO¿´“þ¿X«^‹Ú>ͨŒN=.GaÔWeõ®j©j§¯ŒªY¬ãÀÌûÎ £j¶^[µl†Q¬‹m(é ÐtF‹c“¿%~§Å“ÿ0:U‘˜l3ìÕ*ŠcWk¶ÿüÚ¯\Õóµ»þT{ª:þ{¬¡û[»œ~Ü×-{µûÚ©×mÏ=NU„WvêÛO¹v zLŒ{±¶A€Þf½a¬­Uü¾±½v[µèñB-6¶!-ïIJúù°Âhqð[Â* F±L[5Âh±°±Ý 6 é"Œ¿%¬‚0š{˵U#Œ ÛPÒ<6 é"ŒÇ&KüN‹‡0Z„Ñbac"Œ a´8£Xa´$£ÅÂÆv3ØÈ¥‹0Z„Q¬‚0Z„ÑbacJz£ÄF.]„Ñâ Œb[ £Z9øôÝé¿øEâaTÏ©•>Óö§o¿ý–m€0Z,I†ÑÿøÇWÖƒLÛ›ø-a[[Z´r˜µÀ2mozõêU47nîûï¿w¦ô&ÍÓ²ÛDõ]3mgúÑ~”H}ÿþý•õÓv'í0o A·x˜£�r+éÒïÿ{†˜Ò™ôý(Â(��È *£ÅÃ[l”€òáw_<ÌQ�¹ÅF (~÷ÅÃ��¹A-æ(€Üb£�ùÇš@nFòáw_<ÌQ�¹ÅF (~÷ÅÃ[l”� ÿX“�€Ü`'´x˜£�r‹P>ü9 ·Ø(åÃï¾x˜£�� 7£ÅÃ[l”� ÿX“È-Â(P>ü9 ·Ø(åÃï¾x˜£�r‹�äkr��ì„s@n±Qʇß}ñ0G�@nF‹‡9 ��rƒ0Z<ÌQ�¹ÅF �ò59€Ü"ŒåÃï¾x˜£�rK¥^¯7ºìÿÆ'o“·û¿’äí^ü~IßîÿJ’·{ËÞ¿-©Ûý_Iòv/~¿¤o÷%ÉÛ½øý’¾Ýÿ•Mߎb`Ž�� 5„Q���¤†0 ��€ÔF��Â(���RC��@j£���H a���©!Œ�� 5„Q���¤†0 ��€ÔF��Â(���RC��@j£���H a���©!Œ�� 5„Q���¤†0 ��€ÔF��³ÿjPŽR¥Ò"ó����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8k.png��������������������������������������������0000664�0000000�0000000�00000071102�15030617045�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��+��{���ÒF‚���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��q×IDATx^í½ßgšßÛEÞ$› J.F˜9€¯xÕ7Ê`,„ƒÕÐ0  !@Àè :XNBœÆ l`�dŸu"X!VÆì¶°}ì5œ5:æÈsF™ÓéxÖãhz{âx5ÚNG«Õvžó~ߪ—|Y]$‹¿‹äç<›U¬*Ö/>ßz~¼�����PB+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJJ-V~÷÷fÿó…ÙÓçfõ»Ä޾龯0 Ã0 Ã0¬˜ýõß&¾µlY(X‘0Ñüâ·fÿÓlÿI¾ýôiþû†a†a†7ùÕŸŸvELY¨X‘@yüÍh±‚a†a†aÓ·öo’À²šÊÂÜÅÊßÿ¯D½+:+†a†a6[“Ïýß¾I|÷E27±¢/ª\9)¶¼RÔ+†a†a6?S´åùYêÔÏ™™‹‰”¯žM.R‚!V0 Ã0 Ã0l¶ö0ÇçVàaÞ‘–™ŠêL[\ V0 Ã0 Ã0l¶öiŸ@ƒ DÌ‹™‰Îç}ÁI ±‚a†a†a³³ŸȈR÷ÞyDY¦.V´ÑƒZb&Z–òäBhÆYÁ0 Ã0 ðÑMÁùÖÿùoò}ï`EÄŠL¾ººûÎ’©Šmì$‘}V;±LíÒ�����V•lHÄ /ƒLiaêô;+¦&V$TÆ)¢×g$PÕa�����`Ý {6¦p™•`™ŠXG¨(Š¢2ïŽ�����ПqÇDœ…`™X¬Œ*T4/"���� ÜŒ#Z¦-X&+JÝE¨¨ ‡t/����€å@†Q»üN³þ|l±¢ ¥GÑ�����X>$@Š)4ß´º„-Vж'ÖÆÒÝ ��`z<yòĽ½ÿþûÖjµ:öðÛ«¯¾Ú³Ì?þ¸³>­�Ö“Q:ÿ*¨1²±ÄJÑPÐ4U��ÀºÄH"ßþö·mccÃÿ„Å믿Þ#,>û쳎°×´Œx™ZGX_v‚°Ñ¶ê³¿û©�«Ì(ÙUŸŸ¦š€‘ÅŠú1çmLÖ*���у/G?‚X!"eŠjA¥m‹¶_¶?ˆ�XF,“fX,VŠlB��à<¿úÕ¯¼s/'þå—_öN½þúUˆLè;軓ý®ÚÚ�°¼H°ÈçÏÓ±ižIÒÁF+*’+~8 _MÑ��€uGÑ9æJ•R´D¦×ëm&»?´¨…X>œ("X¾ømú1(,VòÚêþþIæ=º~�À:£z7ß|Ó¾÷½ïõˆ" çÑ>Ѿ âEûLûŽ´1€åAi^±ègãf]+ƒŠê%X$\¦QD�eâkÛ«_´kÖ:î2=nYM9êµ–§oõådÏê•‚óŽÄckÕ¾ï¶ñ ÷ÿæàí˜(JoÂáž í³XèiŸjß@¹)Ò|K„Ç¡XQT%o¥±)ê€�+È‹¶56;ÿ/Ú Û,(@F™×쩵ø–µýªã×(°½=œîÛ› i£¢¨€ëX =™aÿáÂþ(/ªI)ÒÒxœR‘Bb¥ˆZ"ý `EY X9;jÙö…†(ñëŒ$VžÛQëº]h´+PŽ«¾B…â8Ðó#†Ú÷:´H(EÒÁÆ©])$V†)%MŸ¤Ê�JÀÙ±íïÖ¬’¶õ&QÑãüŸØakǪ~ú«í~lÇg©�©^·zíBò~ó‘žÙÞÎVº¬ô=·„\±’7ïé¾5ª•ô½Øþ¥ÕjJM«Úk÷š¶­´2ÿ~º~{·ìFýªÿ.•Ú;8|'IUÛtbçqH[{ÇÛ»éwÑß-;:þØvýwH?wJ¸Tüœeµä•³ ‹Aû^Ç ˆE óÊC‘AãGÍÄ*VЍ¤¿þÛtf�X^¼8¸jÍÃgvvØ´­ÊŽíx%Ò+Éû×­uô<‰tT.Z}ïëT¬ìZûô…zG6ÎìdoÇ9ÿ‰@YÉ™WÃkîëd›ºb)©›‰ÅÊ%k´Ÿ¦ßÉÍ×z}þ…›ýZZ7sjíFÕ6}dEõ9/Yµ±ï„Ö5·^òß Ö9ª›€ÕÿDQʃŽE|l-�‹GEôyZ!¶¯ž¥3d¨XQ¸&oEÁU€Uà¹ïÝ:5Iœ g‰“¿Õ´CÿT$)¾—£ÿ, ~þ+‰è9nÛýf=Yæ±ÒwÞ¾b¥êIÚÕãœX bIbd˶šö|¨XQ‘¾ŠóÓH‹³ä}XG²"G¸¼p¬�ÊÅ°èŠÆl…¡beXïäQÕ�”uêÊ« ‰œYÙˆ£IôÁ Yq‚F‚G¯ýnú%ÛÙ;J„ ±â—ÕgÞ±ÄJ²gÇl§zÙ¿öŸ÷Ñ¢'N \êYÙyˆ4XKT¡q@”b„ã»\Ä¢EÇš€ÅP$+k”ò‘bEûy+ˆ`�+ÂÙ—ÖÚNê5»`Û­ìmðB!¿f¥§æ¤ºc­Ã“hy[VoÜpŸq¢õ£¤^ÄYOÔ"o^‰ Ÿj¶a•í–=~^7íÞkÕd]~›¢ˆˆÿ;޹åµ|­L"ˆ*¶Q¹jõÚÖŠm5j[×­â¿ë—ö"ªYÙ¨TmûÞ¡q‹[Ô"W§TAº×ò¢c§c¨cIÛc€Å0,Ø1J É@±XŸgãöK€òá£õûˆÇÙÑ}»yç�gV=ƒN·p>­ÁòÂÙYšB™D(»ÃlPÑ1Õ±%Ê0_†u¥+Ø@±¢AóVŒÂz€UáÌN[Vïtߺ`µÆ{vH7,Xq4álÚt`ÕаBœÛÇÇ<˜±eN€ù1,l”š÷beXËâqv��(¡6e¦mˆ}g¹J7ŠröØöÞúˆº¨9£c¬c­c�ó!O;ûÉoŠ×­ô+EF­X’H¶.ë ±UÓ0óÚ”±òÔÞÿÈŽ:B%®“©ŽêC{Fbüüžmo&™³ã}»SOj­’&Ïì°yÅý´ï¶ÿ&}_ÑÑ&ÑRÒÍ<:ÖPRÇž´0€Ù“í öÙÓD¤„¿‹=úþ2+®§^ÖØõc½úÈI•Ã*›‹ÃÚ+oØÞþžµŸ§ܤNw½'ImKš*æß¯ÖíN;MóÍ!.&M ügÒÖàò"ù|%êìWÙòÝõâùaÇ`ùËÓÁYZEËIúþ2«%qÞ‚ƒ©ø`ì­[·°7ëðVà¨Îµà:+•Ú®=P—¼ˆŽØxúEÒ Ï‹¤(s»•F`’Š:â¥ÓQ½>‘˜Ùôã é#~¹©p‰_CEW,�³eZZ¢¯XÖ ±ëB,V`µáX¯6jg+¡2W¼XI¢"Y½ Ô®·nïØÕÊF·åw:ÞO¡@¿Rß³§~Ü °¬t¾Ûlÿþm«§cuÄ›ÿäô‘5kÕÜu‚`Ö ËÒR#¯"Œ-VèëìúÀ±^]昞|`Ýýd¬ŸBÍɆUj »w¿Ýû®8mëÌNÛ»I]K¥f‡É²¼Ú´j½e‡G|ÚWýξ¿Ðû—íµæ+¶¥º•棜uC@ç„Î �˜>Ó*)[¬Ð ÖØõc½š„NPåy‚îÈÁÛÞQ´¤m÷ï5¬VI å'Fb'-ʇáèœP£…÷ß?}�¦b`NàÀ®ëÕãÉ“'%c#g\£Ý'lg@©®b èZu Ó9¢s�¦b`NàÀ®ëÕC5*o¾ùfú@>E5M�0=+�sv}(z¬õ”žÁåÊOžjFHc”{€éX˜ˆ•õaر–#£§¯š§°åGQD%EµM\×�Ó±0'+ëC¿c‹”`85åFõ:NDU (:W¨]˜ˆ€9ÑÏÍ'.ruÌýÝ3¶•†ì±–Ó’)ÁÔòT"›Ÿ©º(êî4÷1UÊ΋¶563çr¥f»ûÉHù/Ú ÛìL»f­cýЫÀ{Ö¨]èÎÿÞ[vûþc¿H³;líøÖʕڶП5ˆÖUVÔÆ˜Î`�Ó±0'ô-ŠGV’AÜ642uhzvlf¤»ƒ½õŽk ‹"{¬•B¤'­‰óÖkßùÎw¼ÁægˆyÇ¢Ÿ]½zÕGˆyl­Ú%k´5úʉ4·­²Ù°vøM?nY­#TÜ­ë¨eÛ•¸[Ùs;Þîí¶ÍK? ÿukÚQëºmfïgÑ ˜/´¬’·Uþì³Ïü¹�“ƒX˜rzDa±âœ+݈ÉÙcÛ{ë£ómIý|aÔé~8Ç`:ÄÁ,É;ÖJ É-84åFÅÒ£DbÖ‡H¬œÛþnÍ*qt·G¬ { ’ l¹ÙH„‹ÿlüÆáÅLG iÝÕéŒ'3#t½‡û��Lb`Nä9°é+Oíáýì(*gÇl§Z±Jµj/u~ØC*Å»Z»œ<<=´ çH¸õ{gáôÀZõ-Û¨\¶ÚÕ­Rÿà/+ƒŽµR”"‚XYïpžZ»QuÛqÁjõëIšÔvËÝ ô�âV2"½Þ«Ý±ƒ§ûIzÖæ »ý£mwÍ»ÏÜþ±µvÜõBvü±í¦éXþs§Ñ%/ÅË[7J’ Á°™LÓˆø÷>°Ãx9±Xñ£éoZ­R¾²è;nuÇtñÛл>ŸZÖCšÿÒ€å•í�˜Ä Àœ?\£‹•7loÏÚq÷©sJªJ‰øÂžªfÅÿˆŸÙi{ת>•âÈöê—R!?Õ|êä½³ó”ªgE‘cD b¥Ü”ÂáôÎ{*6¼ãŸÑ{I½ˆ"O’z¶Ê¶5ž&¯}dB÷ƒ—¬ÚØ·ÓBQÙ~¤‘•½é½èËÞôÔb%°TÕšÖŠÅGÎwôֲ߫cÿ—¾CµôbE×¶j¤�`2+�sb\±R©íÚƒÃ8y"I™—vãròDÒÏ¿Ù}}éf"D"‡$)пbÍÃgþõ¥¾i0 #k(-å+Õ$å*Ž:œ[ûþítûH¬¤éRù¯£ˆHjô+1RdE¢è$zH=P‰ÅJ¸—ùˆP:Ý­ñ¸uÍ  ÕKˆ€é€X˜úÁ£‰•œ'–HÉŸÚÁþîGýb$DôúI±kš2áß÷?üß$"G¯~jÍÚÅnÚL•‘5”–p,J®XùÚ?¨¨î<°ãç]3\¬¤‘}n¢‹?ˆ%–¥Û8¥,+î.ãRÑï¥ébéC—4ZâïSÕ]kŸ>õ÷¯üûË>btzpÇjK¦}1Àt@¬�̉‘Ø“¬±»ïsÌ{Iä+ÛvûÞkN lYýξŸ(5L‘˜7ìžsb*µ†µÚGöŸ R³Æƒûupn¿e '„jVozLÄÊê c¹Ø1V¢”©Í+V»’FE6oÙ½»×­²Q±jý«W7­úÊkVωŠlÖjv%¼n´íyT³²Q©Úö½ÃÑZôD_•tû ïÅËs;n·º­‹eÕº5÷Ó{\ÚQ̽ßm]œ|÷$ââDŠÖ±­‹…¾#�Lb`N„.ØÕ‡c]vRÁ/‡9M‹ì‡RyÔ†`”þ¥Ù�09ˆ€9»>9Ö¡››"d̓ *‡TŒ|)tI‚â„U‹µ›~óÍ7Ó¿�Š¡s†ó`: V�æbe}z¬Ï¾´ÖvÒ6ÚçêwZ²ŽÃ{ØÎÖ5ÁpЉ±¢±V�FAç Åõ�Ó±0'+ëÃÐcí[³Æ;Ìù$´®Ä’åAQЉ¡tž?þ8ý `0)\€éX˜ˆ•õaرîvn‹»¸#4žÛñþm«o¿f­žöÖ0œâbEB犢:'Ä-Àô@¬�Ì ÄÊú07±’Ö«¸eL”J¶Ž+Bbåý÷ßOÿÈGͶ�Ó±0'–[¬dFœövÁj»'c5ô´2GªîuÌ»œ˜®ûÙ?ï?íîÝh=©õ´1=³ÓÃV2H^ßö¦'vØÚ±ªûlÒ"õIúÝ*=cOøq)Òuô šW�}Fô=ÖSIƒÉM¬(µ§<ãf„mï½ÖfM|M˶îL £ÍŸÚƒFÍm«Þ×=ãž5o¿—ŽD_àz==°V}+ýlz¿))jq­s„îq�Ó±0'ô.–7²’Œ8Ý;æA:PGäbÆyR‹Øï[­VµJÏ onÞúÖ>=‹«s®ËÑ}»yçOí¾Ó4ˆe<]:6C:O<æ û3pœ~´íS;j]ï>ç±»Ð3§ÖqD¡"†kÕ›\ꊕ9ÕX9›Á:ýØ›adðçÉööŒã·.–‹l©»“R|ÊÄÁ¥¹Š®“p½>²fíB$æãQ龑ąHи·4ÆË5w}º^“ãäG¾ÑmJQV^}õU{ýõ×Ó¿�`Z V�æÄj‰ÕJhôüø©tŽX‘3ríNNšÒ‰ýâð+ïÇ‚Äy2öðáö¦'¯‘XqïíïÖzGëóûùªç&q~:Ε/?º¿û°{½}µfW7»­„g'V´é9­‹+¥GÅöåpH/V¼ðp×|8_{ÅJý ×WC¯W/f¶Òɲ{z” Y‹@`5A¬�̉âb%¤S\°Zýz’®äT'önù¿µ¬J͉€§Î¹UZÔæ »ý#þ¬Ñél­4m¢ùÈ--8ÉÈÑþs§‘óГÂ[y::"~š[vã®íõuŸ+g‡wìšït\ÍM·é$ò§i=iš˜Fæ¿÷¦ßÇÏßEyΜÞÛê:Wþ»§ßÓ9a×ûöT£üWw;‘Y‰XNBªÏ|ëWº©‹[¶³wäÎßèü>;²=ͧצ¿îÈðºÜ²fû¤3|¥vÃvš£ó:ÜsôùØrÒÌ$VÒé•ZÃîuF ±XI»Õ…(KC¯W}vˆøù,oQ¨˜^ç„Ú\ÀôA¬�Ì ý¸‹B¬ÿ‘N_ßÑ{þ|C‘†'é“L=©š¼ö޾œ†—¬êñS/^3•"DVÞ³OœS‘¨t’'+VŸ™:z}5zÛÅoÿÈbÅ}ß½Ö¨&)$a™½ÎŒ¾w5G¬DQ¼o½X‘0yêæ¹ì÷×S·<Ä d‘S*çt^Ÿ| èg>ºVñçxŽs¢š®{ÈE5žÙñÃGv|¦ù¯økÿìø‘=LÓ²FÆGV^³½Oœ¨÷é”ñr‹•ä^„Ð5»Ûzeðõ?Lˆ¿[2µ T�fb`NŒ.VÒzøûìØÚ÷o'©iä#vèó_G‘ˆÔz Æýò»Óºœ„@+î³>]©W(œ+^i;£eö¤‚%ÄÛœ%Z*Vô¤XQÈaš4 ,+Ÿk_µ«µËv±9Á2ûQÊ“ëî|úS¯X9;nÛýf=‰¾x‡þÄ~ÑþÀ´šÖh¼míãgvú‹¶í=hY³±kwÚq1»–5BdÅ_cõÙ‡±XI®µ¬ ÑçÓ{˲§)º†P˜=ˆ€91’›+V¾vÎÁå¤cÕó®€.VÒÈJÔéj<"±âÜœD(Dõ=bEÓhÛq$Å œËî;=MßH_¬ÈI¦Úæ­ãI’òÒ¯ÀÞ?¥~êÓdâûŽXqøz‘ÊèÀÄHÇ–9©¡†e–µ þœí¹ÖD$Vüµuɧ‡=×5Ó}ˆ¯Û”ŽàHÿ…ø³éC‹nÖÕ‰¦øéw}îÚƒ4eÔ—ð dèõšDd}TØó—§À^Ç\-Š*�³±0'Š;°ÑSÎÍ+V»’FE6oÙ½»×­¢»õW¬^Ý´ê+¯Y='*²Y«Ù•ðÚ9)Ï£š•JÕ¶ïFOU‹ÐûäÕ;>i§Ÿð^×6íJíJšî¢3©“NOk½é|.Ì›;­' ”ˆ¹ *ôÞ¦R·Ò¼ü¸j¯è ¹üʹOºÅëê:uIÐ%Ä @"EÂ$Zfç¸vÏÙÊeÛnÜ·ýwÂõ䮃ýGéµèœùÆ «*-ô“÷l÷Ú »ÑiâpdíÝV¿Ñ[Ï6 =פ¿ž’¦I[⌥‚EŸV§u±Ìmcs/­3 ]Ýûý®×´ã˜ßæ´.VëjkŠéæb`Nè‡ZàÀ®>ëõCé`J bàÈÕ%Ô§Ì>õ�b+�sv}àX¯'8R©AŠ´”cðH˜:–CEBEÇ�æ b`NàÀ®ëõE©A!ÊÒjµÒwaYÑ1 ÑÒ¾�b`NàÀ®kÐxEXi™W‹c˜:f:vªM!š°X+�sv}àXC vz?ûì³ô](+ˆL€òX˜8°ëDzт\N8>�å±0'&s`ÓÑ›ói›!½íƒ í~³íŒã‘ªÃ€½¸Åí‹3V»kŸöÖ´Ö¹ë2mLO¬UO[²æ¶7=³ÓÃV2˜fÔ"ÕOéi­ª¶ª?²zý~4NÅèhb²ÄN±ê!¨ƒXÚ÷:ˆ€rƒX˜“;°Ñ pó¤g¸d̃îX$™AàRÎïØvíªUÃèðÍûJ2(d<è¥Æk¹yÇþì~Ó޶ód=ÉzÃØ é<éHÙ~$íû%gà8/ž’÷_h\–0øœ´nÓªõV:îƒCßqGëLþÄ CéFê0¥sE ’"6?´¯µÏµïu ¨I(7ˆ€9± båÌ.yѶ:#Ó牉‡›Ö<xèÂUk>Kßw"ã¿H¢± Ñà‹ê†~Ó¹÷c±âÞÛÉ•+ɲ½ÙJçOæëè¸Y4jvgPH€_u‚æ±9=‚j: V (j‹?ÝW×)FEŸ>Ú§Ú·a?kŸÓ^`9@¬�̉ÑØ;líXÕ}F©I;{Grõ»båìÈöv”ö”¦DùѨÃ(×îïú-k¶O:£CWj7l§ùйòL WÇrÒÌ$VÒé•ZÃîíºOrÄŠÄõ;vx&Ñr56=‚$Cî´t=~;Ü÷kܵ½ÃTŽøùSáâÿlØf&ÒãßÛj¦Ñ’°Û¶W¿x.*4 ´±£ ‡ZOüÕ*7žúö](Ú§Ú·A€å±0'Fq`}$ ºkíÓgvÔºîD‚ê¼ÈJZË¢érÚ/(Jð,Fhþ+>%êìø‘=ôu&cà#+¯ÙÞ'»V­\·ÖQ¼œóbE)`×Râ¿GG$DŒ)V6ïÙ'nø”¯°L?ÿ5këfídª§WÀ|íDJÕíÇ?·Vm±¥$ÏÑVMÑ€þhßh!ø�V Ä Àœ(îÀæ§2eÓÀT~¿YO¢/Þá>±_´?°­¦5o[ûø™þ¢m{ZÖlìÚv·¨|äÈŠO¡zê×ß#Ή•¤~¤w™Ý¨G‡±ÅJÛ^ø:“¤þÄoi`°â(ðþûïwj\ä„#^zʼnö‰öö‘ö¢`u@¬�̉QXï\W¶­y»Ü‘Xñû%Ÿöü\ÚS䨧ïtGú÷(ÄŸM…B’v&2bEÓ·•æ':$p.[µ±ŸÎŸ2‰Xqå´­(OØ?Iº™_‡o�ЯÀþ²[æ“$5.-°?S±}¥bÕú[NÜ)b¤®aïÙîîŸF‚lt+0K)PÍ…sEdDï©x|u}'}7}G}×ð½µôÑ€Õ±0'Fs`CýɆmT.Ûvã¾í¿j6œ#¿ÿÈZÛÜkç˜7nXuã’5>qNöµv÷ç•#díÝV¿‘¶ôíŒâô´.ö‚åy’–Þ‹íJ͉�½Ž¢3Q½KGÐx1’¾—ääNëyÁ¢.aþû»÷´]O“.e½­‹“ÏuNZ¿ÓÛº8' ÿY-_Â%ê 6&Z–@¬À<¥<G^ç ^+êœùe¨×Ð61¦m×wÐw‰ép�ëb`NàÀ®kX4ræåô+%*ˆ˜*ÿàü ùg%j²Ã6…õ†íKÛ¨¿µÍšOó3 ÀzƒX˜8°ëÇÊL2!­J¢²—_~ÙŸÃY ÓcË{?û9™–¦‡hLÛ m!R�ý@¬�Ì ý` ØÕ‡c «HˆŒÄ¦s=û�À4A¬�Ì Øõc ëB8×�fb`NàÀ®kX+�0k+�sv}àXú€X€YƒX˜8°ëÇÖÄ �ÌÄ ÀœÐ:¶>&+°ê„s�`V V�æ ìúÀ±†Ug X9;°æV%ð[M;œl¬U�XS+�sF,¶>°Ê ¬|m{õ‹ˆ�Ä ���Œb�f b���Ʊ�³±���cX€YƒX��€±@¬�À¬A¬���ÀX V�`Ö V���`,Š•¸u±¬²c{'(� Ä ���ŒÅðÈ �Àd V���`,+�0k+���0ˆ�˜5ˆ��� Ä �ÌÄ ���Œb�f b���Ʊ�³±���cX€YƒX��€±@¬�À¬A¬���ÀX V�`Ö V���`,+�0k+���0ˆ�˜5ˆ��� Ä �ÌÄ ���Œb�f b���Ʊ�³±���cX€YƒX��€±@¬�À¬A¬���ÀX V�`Ö V���`,+�0k+���0ˆ�˜5ˆ��� Ä �ÌÄ ���Œb�f b���Ʊ�³±���cX€YƒX��€±@¬�À¬A¬���ÀX V�`Ö V���`,+�0k+���0ˆ�˜5ˆ��� Ä �ÌÄ ���Œb�f b���Ʊ�³±���cX€YƒX��€±@¬�À¬A¬���ÀX V�`Ö V���`,+�0k+���0ˆ�˜5ˆ��� Ä �ÌÄ ���Œb�f b`Éùûÿ•\Gý·ÉõöÅo“ 7ØaôÃ0lšöþÓÍ}ðå0ù _=Küˆßý}êX” Ä À’!q"aòø³ÿü7ù×Ul?}šÿ>†a†aXlò>?Mü÷çg©ã±`+�K‚Šn íßä_Ký ±‚a†aØ8¦‡¢Š¼,R¸ V�JŒ¢(º†F(±!V0 Ã0 ›Ä>u~ˆÒÌ‘*†X(!Ó)Á+†a†Mb#_Bâ`žþ;b d(Ýk"%bÃ0 ði›jgõpuÖ V�J‚B«E æG5Ä †a†aãZUÉš®ª¦e– V�JÀÓçӦĆXÁ0 Ã0l\S½JÞû±©žeVQÄ À‚v1 Ý(´,]S\W�0 yvÔ²íÍÛ;ùÆ›Wm«y`ã5úÚöêmc«i‡%i¥ °ì¨»—|EEä;ôËìøÉRµŒYt C¬�,=Жw]1µ1V}Ë<òE�òè/VÎìdoÇ*• V®L 6+�óB~¹jQBVÆ(bE¦,‘iw C¬�,� ŒqêStÐ5…@€2Ð_¬<KJ,VüëqÔb`;ãç'ùþÈ “¯¢‡©Ó±0gÆ*áÂG¤�@™@¬�¬>òÕÇÉ™–`A¬�Ì‘q„ ‘�(+¤¬j4jÓžiÄ ÀåÉ„DÍ"FŠ�èG«Õ²?øƒ?è˜ÄJxýꫯ¦s¥œìYý\ý™¶w­ºqÅš‡êwúÜŽZ×ms»eG"g_Zk»jÛ­/£b|Ä @YÐÃS5ôÉó[òl5,ˆ€91ìZˆMÅóDS� lz’g2½<·ã½[N˜lX¥vÇN½M¬œXs«Ò]ÏØ©d�0MFrAóMâÓ V�æ€.ê¼ó?ÏtÍ��”•Q‰íÛßþ¶ýîwܼ�Ö ELŠ =„Ä ÀŒåbžf÷ �€Y]9U€u@㪭Å÷a,b`ƽˆ*�°,ÄÑ¢*�ëÍ(̓Æ4±0C42ì§¿I,ïü†P€eâÉ“'DU� ƒDH‘,’qÒÁ+�3BOâ ÷aŸ‹x’<N�€Eñúë¯U€ÃDE0ÕñŽb`Fôkí÷“¨G¹Â¦tý€² ˆ‰jRbSä$ÏÞ|óM{ùå—s§É²ËAÔ�¬>¿éõyòLrG±0²Q•<û̉–qr7�ÆA‚á³Ï>눉0>Ê÷¾÷½žú“ð~°X€5 ™ìr´ì°­3¼>D �,7y~Ol£¤¿#V�fÀ°ó^¦y��¦‰¢røåü+M+ Š‚Äâ@ÂEóþêW¿J?=?´ÎX<q£mŒE“Þÿý÷ý¼Df�–ƒaâB¦‘ð‹‚X˜2E¢*šNú�LB,L4z|ˆÈÉ—P N¾R»–Ž‹®‘ÑwÕû€òR$¬ht±0etñåë±­s÷¯ÏÌþøgfßúнF°F޹"¡V$DKô÷ǼɼÑwÔwÍÛÚ7ˆ€rPäÁmQ‘X˜2ºhòÎõ`£–Ìß™}ø…Ùþ£Ù?}¯kßm›½ûK³_»ÈGnúI:ûÙS³ß‹æË³o¹eý±¿M?3.Ÿÿ—h¹ˆ€¡È9W!8æ!KQH˜}ѾÒßë Þ�ÊL‘èJ‘Ú]Ä ÀÑ“„¼ó<¶YÖªüú¿›]{?_\üÖ‰’7`é'~û•49Ó~íÞ¿ùAò¹ïþ$;ñÜ-ÏmãDbÅ-ã]÷ýÊN, Š¢Ah ¬´'½&jPŒ}Ò>Ó¾Ó> ûV¯m¯~Ñ ÖkÖ:žÔ¹<³“½«llZ­õ8}oJ·¬V»kŸ¶®¹mÁòK„„Hž[‘LÄ ÀÑ yçy°YÖªüÚ9ïÃÅßõ DÄÙ©ÙuMsË¿9©H˜T¬¸Ï|è¾ãÄÛ1ct<~ωCÄ AQ€X (­‰ÈÀähj_ÆÂ…ýºÂ¼h[csbEœZ»q© ˜8³Óök¶ÓÓN÷í‡Í‡6x+FY¾È¬cIè7ŒC°"cÍ!V�¦ˆ.º¼ó<˜.ÚYÐ81òwé›ýpÎþ›îþì LƒD„>ãÞ—XùÖ¤ø$bÅÍÿé#· ÓM3¤áB¬À�P¼iÊ쉅‹LûžhÕŠ±(±rö¥µ¶/[à ‰çvÔºní銕žu,�2Ï V$5±0EÔŠ/ï<6«ÂúÓô®ßû/zö2œçè4¦X)ºŽ@œF¦ô´OÝ)w=îõÃ/'_óÊ®ý̽žaofêp¼EËѺâZ­ï]÷^ÑíýÜ­ß§Â9»yè–çŽW6ÝìÌmÏ»j­c/jÁxèöO˜Û›#´i„ÕFN³žð«¾B­HQš?ÚçÚ÷:D[Vˆ±rb‡­«ºc¼±qÁj»Û±~ N¬UßòÇ~£zËöŽŸÛÙñÛ©V’÷*ÛÖ<Ðc¦|1q~Þ/ý|þï`ÕÚÕt]Û|ím»»ý’ÕþíZMïÕZvì—¿eÕ7¬Vqïùe=±cŸæ>ÓøÄwRÅ~­ÃýýÎ_ØþnÍ*ú»³½åeX¡ý°í+�S¢H½Ê,RÀâù‰âb¥SÏ2â:þÊ9ÿßrË|3}r¢º™[ÿÉìåœõøô4'j>LÅIHkûÖ_¸åDó…"ýld%lã-÷¾~$*nI$¹u½[àA”¶Ui[Ÿ§‘©‰×ã—é¶ûu7MëÐ÷ñB,³ŽpLˆ¬@Œ ÁU®t$=á_Ɩ«†ŽŽ…Ž‰Ž –œH¬œ6m«rÝZGNŒµl»rÑê{í°éÄDcßN}¤Â ˆ1¢º—júÞ°ÈG4¯_o5zèsU'6YI^WjoؾEnÆDŒÄbEÛbO1Òy?|þ±µj3ë8Iêiª»Ö>ýÆ}Ÿ+V©ï•ú·fXÖɰZ^Ä À”ê,z1Š¢$þI¾s˜Ï¥vBžXQg1'¼PqÓ‚“^„à°ÿÀ‰ˆ˜ÎöÆëI×ÝãÜ»i>š“ù^ýÄŠ.œ÷麲Q# ‰›ç]'œ®»÷âyÂ÷‰·±1±HQ—*RÊ‡Ž‰ŽÒÃ-KLG¬<KDÁVÓý ;)¾ßlܵ»µª-_ûÙ»<·ãö­é#.¡è½ŸXÉ™wˆXI^‹¬Xé.ÿE»a›~{‡‰•§èKÇ6Ö.±?=lH‡au+ˆ€)1ì\ŸU½J§pÆQéÛž8þL*òæùsÐGíæÅC,Ha=Qôƒ2b!EH^ã€QÅJÙñ¸õ†4°°³‘¥Î¾¶±B©Eˆ”åCÇ*DZH[2:b%¬l\òν ÞÕ—ÒÈÊ«ÔîØÁiøµQáú®U}JØ“H@䉕>óŽ-VÒÈÊÙ‘íí\J£,Ég|´Äo÷…Ì:Bd%Ia[äë+\©òÁôwð†‰ Ä À”æœU½JG¬ä8ÒY~ën¡&ä»Î¹ïÑOYÕˆd£ CÉ.+fдÕžtÚ,g¾W¢t­?qó…Ôµ"u6>e-_µ2föe'"4ÀÂv"VÖ‰¥é‰'"e9 ‘–²Ç1\…ØŒ" ýjVY³vÁÏW¹zÝ÷¿´>MÌÍW½a ELªÿÚZÍídYA„$$)eñ¼»Ö>ùÂZÛn™>íìÔØWÜ:¯Ö.Û?ˆ—¡¶ÅþoÕ¤´íy§þ¥bÕz˽€J‘¶¯vÃnøéW¬ypÐ]Çã_vkV66­º}7 •—<¿(ذ"{Ä À”ÐÅ’wޛչGM GòæÍ.cÎBÝI:Û4¢XÑèöªÑ�–ºõ…m-*V:cɸe¼é¦?Lç-Ú .°—i;B KXï0A(+ë‹ ·ÃSyjR–Câë˜Ò`|†Ù±0%†‰•"£´ŽE$@†:Ç#Šщ880´-rÊÈbÅý¯±SzDQ´­EÄJ(ȿ榇ˆQ˜w¤fq޳°OCde¨ t VÖ=yã¤àÔ®A„J¸eIè"V�¦Ä° q–Äݺ²í=D ¨X¾Ä}æ\êX?²œ«£ÉYO¹5+îý¡b¥Ï¶+î3ô¨WXÄÝÄô:$Ó, é’n'be½P]ÃË/¿ì£)£9²aÄm¥rTl«yàÎÓg>§¾û7”[‰áSË0ˆ€°H±":ã{d‹Äc"0ŠX ðú\¹D8çê]ÂzR rH´­ÃÄJ?q0ŠXÑ@™ÙÇþóa;£íÉŽ­âë{~ÒÝoˆ•õáã?öOÜUß0'{V¯lô´=;~d—¤pvÑ`’:æ:ö«F"œ±e±ebØHöˆ€9°h±"z5tŽvg@Eá釿tï§¢#+V:ÑçœçÕ§ôç;'<[€~ŽHàÜtÛå7Ž÷Gÿo:Ί֕nGǹw"àÐÍ£ùö¹÷þŸd‰•‡‡‰Qåqô_Ý}Æ)/$¢mÿüWnÙ©¸X9qßïÝ~Û„ˆÛÞ0Oˆ¬ÄѤxd­'¢™û¼R產öaFÁò„Ê$i_IÇ¢nåìè{ëƒ#"*%G­uì%\V‰es€×™e;V“èÄ À”(ƒXñ8çøC'â‘܃I ü±›‹˜ ²óÆ‘@Ü1Ë›sðÏEab$:œ³>£.[êš&G^bêOœƒœ²XhùùÜgÃúâBw _ß’y¿3@£{?D>: "’‹[¦ÒÀþÊÍÓéBæ>—ײY"æÂ<éºòFÉ54C× KI*“¦õˆ•ÓŸÚý½ÇÝs)iÛÛkîÿ8Äü©ý¼uÝ6}DFã>¼euß5hËvö$vB:™Âû: oÇö~óskn¹ù*5kÜ®[•t³±Ñ±×9 Z¥U!8À·nÝÂJn:Váõ2€X(¥+�0S¦%TDG¬Ü~`û?n'­U=©Øð£Tåk[’T1½Õªõ·¬íSÅÒ6§¾eêIò™t ¼Ž@9y‘ŒËàß?‹ÆhèF'–Âi€g‰X”ø,á~Å ”›e;Vˆ€€XX}¦)TD"V.X­ñ^:ÆB +(Oý¸!¢¢ü-Ûn}™DC¼ó{1ý[Ó^JçKE‰â ,·™¾Ÿˆó¯a\‚`)^Ã’6V@¬À Vº†X(b`µ N©ê¦EýPT$[P¯Ô®{v»îËF4`œ/È¿bÍÃgÉlþo¥zÙñÞ­4¢e¥ÂE›û·­îGïþ:7zý•ܱÚfÞºaTtnÈy,&b+09ˆ•®!V� ‚XXmÔžxì®_¹(úñ†í¶sŠš:éBŠº¼m÷ÛÇnî(ZÒqrŸZ»qÉ;.•Ú®=8L{ŠùÏo&"çè4[V¿³oGNUoY³qÙ6*ÛÖ< _Ý´P±½Úo_XÉA¬t ±PÄ Àê"‘"±2Nì yÃÊ·ÿÔî5jVñµ'“z¶‰ØIŠòah¬á‚±“ƒXéb  ˆ€ÕDOʧY§2œ;líXÕ9#rHÔ¹kw_‘•IHd¿Ì( ¦Ê“'Oü>ÖÿýA¬Àä Vº†X(b`5Ñ“òUjO ³EçÊà󱓃Xéb  ˆ€Õd¾QXvUÑ9“[»·.–M%½oz V–ÄJ×+�A¬�¬~~µ*°*¼úê«#´2ž/ƒRÔ+Ëb¥kˆ€‚ V�V¥ó¨ËÀ(H¨H°”5åµàF¬,ˆ•®!V� ‚XX=U™æ¸*0gǶ¿[³ŠsÎ*µ;vÐ3xfÊqËjµ–§.¥ ªq‘P‘£+ËŠÄÊò€Xéb  ˆ€Õ#8°8üÀ™[M;x¬‘ü—§“YYÏX¬Ó{a`KqÎöƒ†ùÓcЩ¿ÉRÍ3£ï±*)ˆ€€XX=‚C�‹â…·®ÙF‰¢&EQdåÿðý9T&û‡ÿðæ¾Lœw€ÓI7.Z}ïëô½çvüð‘÷ºÒùJÖ8`é¬Ê b  V�VàLmkl:ç°rÕê7¶Üz.ØvëK;;;²½ý-Çñ‚Õšì4Ì»yÃnÿhÛ9ŒîýÛ?¶–Ÿ/GŽãþVóOµÃ{]^´¶™:£=‹€9oS/gvzزz5é”U©½aûÇÏ{·{³aí<ŸA)`á»Ù®¼ïãsvü±íÖ.¤ïË6­Öú|„ïÐK¿ºE“Y‘°R^‹óð3;l^qÓCÄä¹íµìwŒzIæ« xôìxÏ~Ø:œpì õ¦ÿ±*'ˆ€€XX=‚C0 ¼#^Ù¶æÁÓäitOô }B¾—8í—¬Ñ~’>¹Ž>''þ‰Òo4ýi’65æ“í…m“O)º˜Š£/­µ}!ux‹DVzçº]¿#þ>N,µw­êÇ>‰nŸÖ4Þ~•�(cËëX¬‘(&V¾±Ó‡ïÙÞQ$T‚�¬¼dÕ—^J£/]Z¹Z³«›Úw¿±Ã»‰øóûòEÎ<H˜" Vº†X(b`õ˜¹XIgÿ:u¶ÏŽÛv¿YOF°ðxÞìëÇit¡cUç`wc�~¾žé©eDÀ¹eÏp›zðÑ‘ðÔ>~ycŠ•AÛå^ç}ŸŽÃ­÷*5ÛÝw&DmŠ|‡ š¿ŒH¬h vš%ló ±r{ï#ûq[ò.ðÔÚKVÙnÙÑS‰»ô8žî[£*ú…=uÇsÓ‹ÏLšXî<P„þǪœ V�J�b`õ˜e7°sŽ´œfï¼]²½#{ÞË›7ûÚG1¶üç&y.½°mò‘•M«6öí48¿“DVm×Ó¼ï“8Ñm·´Y}¿–¹˜ÆÊ°Ò1T¬8×xpØ“ ç#N!â’‰N%£ôëõµ4Ú’¼ŸÛ~ó@+]C¬�±°zÌlœ•P[áŽÍZÍ®¸ÿýë×Þ¶»Ûª›Ø²zã†U•ÎôÉ{ycëù\ãc{Ü©­Ø°JõûvoÔnL ݦ5+ýKýØ|¥a¯ Û®¼ï£4¯#u‹>W¹n­£Ó¨f¥ø~Õ9SÖqV¡ï(ú‰=éQmÝHɃƒ|Í"i§°JýÜqû/¶ø÷Ó4±~ó@!ú«r‚X(ˆ€Õƒì×…çv¼÷šÕ[;µvíΘÎs™G°DøkÛkܶvÎ7IdE Þ²†¢cõ·¬}ü•ŽmT¶íö½×lK™VÛŽ£H•›·ñžž>ÉŸg’ÐàXéb  ˆ€ÕDùýe,”^JÎÕ€$¶™M¿Êc’ÏåÄ[;I ‹,'Ý©(Ož<ñçL¿T«‰èÔՌ֙ìJo»¤ô«ôï}w±,ð:³lÇ ±P+�«‰ ‘•P+³9_í¹ž¡ûª«¤M=±‡í/ÏÕá V–ÄJ×+�A¬�¬&zB®'åe3Ê…¢*r"õÿôùÚö꣚MÛjŒTø–¡mL,ä±²L Vº†X(b`uQt…Ú†Ú絞 ‚ô¸€]]µFEƒuÞ¶úökÖ:ìý4bey@¬t ±PÄ Àj#±23G–u�›© –XIëUš¶åÛ§ï;+Ëb¥kˆ€‚ V�VÙ+LÂfCHѹf­ãyý8žZ»QõŽO×.Xm÷ã¤+SÔÎxccÓjê–uz`­zZäæë!jCWL§¬*Jœ}#†i¤ fÙàufÙŽb  V�V •™:¥^ÌS¬ˆdPŤ«–~Ì‹x¤öÇÖª]L„J<ÞÆ‹/­µ½u~ ?ïHkTò/í…Æ.ÙLG+_Q‚ˆ}«âdL“óöÉ šÉàŠšMÇ¥ê÷¿ÿÓó\ Ȳ8À=ãï¤Ææ9'Àãñyr#R頢ѲºŸ½kŸöÖ´Ö ¡ïév™ën_Ìyaï*Õ²ª·l/Ì?4H9ÕkXA¬�±°È)™`Y¸XQ=ƒAŒè‹ÄŠwö¶R!“|.›ŠäÇÝHªä³Õ•™|~B%%·uñú‰ZY‡óìô‘5k¢6Ö©�É $zvxǶkW­Z‰´æ}Å š\©P×~¼yÇþì~ÓÞvû;¾vÎ }-¤ƒ‹v:¹ù))}…½®›ÍÞA8µþ‹áºB¬Ä†X(b`}˜Š`é¤SEOQ#±rvüÀvÒÝ5p^óÀ¹9©S¶Q¹jõ;Îq ’žÜÞ°æÃÔYsøe¥Oc{,+†RÇÎOsNpã®íõ^GbÅ/³+düîŒCèßëÔBè)÷¥4*³ZÌ]¨ÌbÙÄÊÙñǶëÎÑnZ\žXQT𦻎FQ)ᮡ_ü"J{ bà ÷‡?µÃÃ~Ó¹÷c±’úI²# ´½=")3¹ÂÞ½Þ¾jµ«Õ®(Õú+¹†X(b`½‚e<gUŽÌU«6öíÔ? )Y1¡Zç´¸é|б=|¨Z‰+ÞÁ9;~dÏ¥™!8\ïÙ'NXô<ÍõdÅJؾ$-©’'V:ïu·}•逫$TDžR®$†oøt¥$J“'¦Ã¼›õ7ìG^ToÛíw“ù‚àî8õ©8îÜ2¯†J–ÖKÅDƒ„Vj »·â™#VŸvljèäÚË­÷é$r§ úú.[Ýõä\Ûý…½»æ®ýÐÚO÷­Q½ìÖ™Fv+¹†X(b`ýNëè]Â⧨=sêÚ?¶¦¾„âö/¬½÷žµš»Ö¸³oÇgz*ܶ½-k6víN;*f÷ËŠ¾`ù‘ÿøTÎQ’–Òuä"±B˜?Ö«(TD¾œˆJ펜~•#>cAšŠê®µý¼£Ï]LÎ1u#«\òx’&5fM“¬¼f{ŸìZ5P]΋¥€]K…ƒ_o¦š'W¤äN ×NžÐŇÃï±’+ìS±¢ÈiÛ}?íO ÄJ®!V� ‚XXO”¤–µc£ø`€i¡ºwä"©#Vž§NŠÒÞô:=‰�9|‘ãçðD$Vœ+ç×Ûy ."±G„|JZ¿{= ~’¤¨­H½Õ1Ö±žI½R $V’ó#vÀsÄô¹ys^G‘ÄbÌ׬OdÅŸïIÍN¯PÈŠ•äzë]f\—•2¶XqßëœÐOÖ™|‡¶w”40/Vôþó¤ÞåjÍ®^@¬äb  ˆ€õEŽì›o¾éŸ¸k¼B„úçtT®^·ÆýìÚfâH9fÿË–m+U¦zÃr«»öÉÞíZýzÚ]HBçÄÚ»7¬~#[t]”^çÐ;V>--Ù®^ ѰÝn}=-Žƒ#çOZG³*­‹Cíõ×_÷ÇzUÑqÃÅÊ/ûˆéì¼9¯}„aËvöŽ&;/bqž …îùŸ+š¾­0?Ñ!s9Ýé;žIÄJŽÐ÷bÄG™žÚAs»O}ž°ÅŠ#\“ÑÈücU^+�%�±�oã{ßûÞˆQ(+:†:–:¦³_§<ä9À¡ecÉÚ%?¢!¯Ýkæˆé×εÎ~NŽy·fʼnîê÷í^6Â1„î69ó|}¨„÷b»Rs"@¯£èLÝ ‚Æ‹‘ô½l$'wZ"ÀÂz¼`‰…¾ß®/R´]ÙÖÊ“öñº"qâk„.9áƒX9gˆ€‚ V�@„(‹œ ý¿ÊOâW3Õ¦¬Û1\6xA¬t ±PÄ �Ä„§ò¡�ÑR~‚HÑ1[Çèbey@¬t ±PÄ ÀšãóÏÓV®Q§!¥†!ZÊMV¤è˜­#ˆ•å±Ò5Ä @A+�´½Ø#V±hQj5-‹GÇ 4FXg‘@¬,ˆ•®!V� ‚X€Ab% Y]¥älÈA^‡Âí²¡}þꫯúc c±ª­ˆG±²< Vº†X(b�Šˆ•€RÔæX¦B´§yvh߆(Šö¹ö=)y½w€ÓóüÜ�£3¤§#WjQkìža=Û•Ž±’|òÜx/Ñg?½ÛwÚÝÖ+ç:žu;}‰3;=lYÝÚ߯u÷‰¶vÒäñg5vMËiKójݚ͛V;“¥hº@¬ V� ƒX€QÄJLÖ‘þ7ÿæß \ÆDµ'atù°_Ç„ñ@‚9® #9À^<ÌQ¬xâÁPÓ¶ÀQ{ßD€d¶IµdÛ5«U_êÀôø¾Õý8+q+aµ@Þµ;övÿi:zÆxIÆJæqøÚµdpÈG-ÛÎ5¹_£îŸ&>úñWÒqZ6¶œ89pkösÚéÁ[¶s'y?±Ò5Ä @A+�0®X ÈÉ®V«ö/þÅ¿ð¶LiJJ[" 0í£÷Þ{ÏþÑ?úG}ößxœÙÉÞŽU+çY´X9;¶ýÝšUâk-G¬œÞ±k͇NØ\µ­fäôŸ~i‡çÆ=ÑbÙÃÃÃþÓô~$VÎŽ?¶ÝÚÅβûJè3²ýo~îtT²Gö±Ò5Ä @A+�0ŽXÉv¢ Q¡(€¦½üòËÞ9Ñtý½î…à1ÚÚ'Ú7ÚGÚWŠ üþïÿ¾*“XÑ>è¤5mT¬ºóÀŽunwÄÊ7v¼w˧4éó•Ú;8u3¤‡ÊU«ïÜqÎ{ ñ‚Õ귬ߛÂY°±ƒœÿÍdZ¥f{Ø¡Ö8'V$ núcçEDîuÙ+Hzé3ͯ'ÙÆJ­a÷öÓHHú]:ëÑçÃèþ½·ÕNa?¼gõJf0Êhݱ‚X( b`͉[{gê|úGL(´—HQ±÷0"Q£ñ ^‚c.³icúŽú®yû }ÒkM“Åïb%9¯/[£ýÔΔÖTIÅ@^dådÏ9ÜÉ{rÚ/(Jpvl¦#³_Ð5ñÌŽ>JÏȤ‘•½Ö¨&©V=‹ÉŠmûµ;‰pðßãjÎqS¬l¾f{ŸìZÕ§s…š“T¬tD–^TsÄJ$`Â>óu2ˆ•<+�S±�E(‘H‘³¡ÿÇma,<D$v”ò¤e* ç]äš¾Œ-’µÍá»i…¨‰¾£¾kˆ. !š®Ï/X+4¥¬ðŽÅŠ$íû·ÓèKúÞéÖÞ{ÏZÍ]kÜÙwâäÄ~ÑþÀ´šÖh¼míNQyêà»uký=–YQØIRß‘ Y±â£)=ˬô¦‚yÆ+Jõzê…Ge»eGéBI˱P+�0Eät+’"g{ü§ýý‰Lpòµ>96rØõ·¦É‰X”˜ bDÛ¶GÛ¦mÔ¶†”8}M+"L¡åh™£GŸ+¡`¼Ö|ä\÷ˆŽXùÚ9ì—“ô°ç9Ñ–ŽÀè$J9ÿüZq0ŒxY©Pig¢G¬hz=:ni{u×ÚqêØDbŽ>Ý÷QžÎþéD¢žØéÁ7ßy¡çߎ§>5.)°Wÿuw®mYÝ‹;Íyb‡~d»÷3$b¥kˆ€‚ V� ‹l‰”P,¯×³)EÈŠmÏw¾óŽ˜‘é=‰„`!Š1Žé³ñ²´ì¼õ„ùƒxšŠ4.X+ÞÉ—Ó]ѱ»`W·vÿès'ÒÚ‘Í[vﮜìŠUë¯X½ºiÕÆ¾=m¿a×ê×Óö¼NP<Ý·Ýk7ì†oé»m̓"ñƒ/Ž’ógc£êK’–Þ‹í_Z­¦ÖÊîu':#¡“nsGÐ$b¤ó¹žHNþ´ž(,Adè=m×Iwe[+w".¡~'ÛºXâd7Ýײ¸3X/š.+ˆ€Â V� A"<D$RÊ„„Ažã"Á´ÝALŒjúl¼¬2¤£i›ää;qëbÙÅL:Ïê±lð:ƒXéb  ˆ�C®”#9ú_Nú´éæáçåßGEBE‚eÑ1Ñ÷/›€,ˆ•å±Ò5Ä @A+�ë‹`¥=É –H™yÁw]¬(⣺E>Ö™ Øt¬  bey@¬t ±PÄ Àú¡§óJó’ã+0·z”1ÅŠ¶U¢ ’(˜„›Ë¢êˆÊbey@¬t ±PÄ Àz ÇVÅÚ*—-$h ±Æ&Á1ï"Mì—ÄÊò€Xéb  ˆ€ÕFOâ=QEŠ…Ö|Œ(V$¨´Ýe(r/)Š®H°¬ûþ‘Œ- Ä b 0ˆ€ÕD¬œY9úEó#3‚X õ¥Øî£c«ý4ZkãÕ„ÈÊò€XA¬�±°Zȹõ(J¡*ÕS÷‚bEQ¥ª)m †"Pë.ìä�cËcË�b  V�V9¬J ’“?×¢ù‚t['Vñ£_ç£ï¡ˆGÇ_ûu!µH�+ b  V�– ’…ÍO™P‡Aáøè„Ô9"R�Ó±P+�ˇR»”â%ÇT)_«’þÒ™*ãÃX,�Ó±P+�˃Q9¡¡h~•Šªõ]ô½Vé;- ‰½J‡ðÄ @ @¬�”ŸRÍO}}7ê-¦G,¤ÔŒb  V�Ê‹œ÷P¢:„Ut:ã(�LíWí_"V�£ƒX(ˆ€r!ç]ݼ$Päd®z´Aδ¢F0;´¹B°�Œb  V�ÊÁªÍ"t2#Miö„æŸ}öYú� ±P+�‹E¢DO¾CÑüªÕ£ôCN3OûçK,Ô±P+�‹AÎz(šWÚ׺ˆ!‚Ó¼¾×9�ƒA¬�”�Ä À|‘ƒ¾êEóƒõ8Ë‹C‚EçŸ"y�ÐÄ @ @¬�ÌžP4¯'ÚŠ¦¬sDáÕW_õ‹%ˆF j†�òA¬�”�Ä ÀìPjWèÄ$§pŠæ!Á&ç¸è8H<sL�òA¬�”�Ä ÀôY×¢ùA„ân êˇÎQ Ž @/ˆ€€X˜rÈã¢yžV'„¢nÚæ–—Ð6ÁбP+�“!AÍë5"¥‹öEh&�å&D¿•� ˆ€€X9áÍGû†®SËC,œÏ�ˆ€R€XP4êQÖ½h~¡‚HÓrÒö”°Î V�J�b %êè%'NN8Eóƒ OèÙOˉ‹„&Q1Xg+�%�±09Ý͆]Ež(Ö^nt®K°èü缇u±P+�ç‘c¦‚ð¸hŠ¡}GÍÃê ã©ˆ"é|°Ž V�J�b ‹R–â¢yº"©C«‰Ž©„;Ñ2X'+�%�±@Ñü´Ð¾“XÕ$y ¬ ˆ€€XuF¢$Ô£¨óÅàãÒæHZmBãÒü`@¬�”�Ä ¬#r´sMÑüäHôñÄ}}PzäôËs;Þ»eÕ «ÔîØÁéYúþά¹UñÑЭ¦üÀ( V�J�bÖ Šæ§¢Q<i_?$LCDrÎŽZ¶½¹c{'ߨaóªm5¬¸îøÚöê+03+�%�±«Žœi9Tr¬”òE=Êô�T„ŠÁ× –É*œÙÉÞŽU*A¬\Qx V`¶ V�J�bV9RqÑ<)JÓG-m%�a} ‚U6z:å³D ÄbÅ¿.ª<+0[+�%�±«EóóAµ>ã9¨°jèàò·þçbÊ b  V`UPÍD¨GQm NôìÖD« F‚%{^èºì}# Ê b  V`™‘ Ñ~ =Õ¥È{öÈ•CÊ€™‡Á¢sÄwërÖ7Ây²gõsöO­Ý¸d•úžÄ¯O÷­Q}Éê{_§F¬ÀlA¬�”�Ä ,#Í/‰C C D€~è¡Ê?ûgÿ¬#Vú7aÈk]\@¬Ä­‹e#¥±P+°LH”ÄEóÔ£Ì Cíw€A(ªòÏÿù?ï gz°�°l V�J�b–¥“„¢y=ÕG¤Ì=§ †¡óCçI,T‚‘¦ Ëb  V ÌP4_t$‰0 ‰Ú<¡"ë_hPN+�%�±e#͇zžÆ.–PPO]E×°¢¡! /,ˆ€€X² '&´>Õ`ƒ8Ç‹GN§Ž‡¢Z�“ ëY!xø�Ëb  VÖ™t@6ÿÄóŠ5Ÿ¥ïÏŠæË‹žŠSP?::—!¢}/ü?íéá1Íéx¾iOÿ‹iNÄóM{zø_Lsz žoÚÓÃÿbšÓñ|ÓžþãLb  VÖtP¶ˆ=a‹æ©G™€¸ë”ÆœH‘Xâ(v„‚c”}/ü?íéá1Íéx¾iOÿ‹iNÄóM{zø_Lsz žoÚÓÃÿbšÓñ|Óžþ£N§õ±P+ëÎ|ÅŠI\4¯×ˆ”i1½òt\$"96£QÄù€r€XX+ëÎ|ÄŠœ^ŠægÍtÄŠÒòô#®Âz Ä ÀjX(ˆ•ug¶b%ÍˉÓÿÍÏ’ÑÅJ¶>HKP"&DZ°<YX+ëÎlÄŠD‰:zÉñ¥h~^Œ.VT“:})ú¥¿Õn�`ÕA¬�, ˆ•ug4±¢Ô AÂCOä)š_£‹ýX‡¨×îî.ƒöM‘€å±°$ VÖ™¸u±ì¢Õ÷¾N§§ß“w½/‘ÍÃ"M¬„Ú”`ÿøÿc"`�°6è¾7 Ä @ @¬@QôÔ]7÷Ð%JŽm\4¯«aAÄ­‹e•Û;¬X”þÕ™?5K ë�+�%�±EP4%vj¯_¿îÿ§h~y ò Á2Úw�°¹^+�%�±ÃPZWìÈʾóï2´ä(¥/{\i†0Ú‡�°¹^+�%�±ƒÐöØ™´¯å&ÇÐ ‘29ÚŸ�°: V�J�be<”ï/o•íßÿûoÿäŸü“ŽS›µË—/ŸûÌ*¡ˆRöû­Š)‚¢è˜jtœóæég¤ý-ºWé8c½¶Ì-ºõ (ïÚ\w5}U¿cÃ@¬�”�ÄÊhèé³~è”B“w³\%“+§6ØÍ›7{~ìÿÕ¿úW=ó«Ø*8²j 1bô}âï·J6ª@ ¦ã®ÿ¡üÄ籜[]›XbAÀ-:¦Y!Šumœ{b`I@¬G?øú‘Ð…~4 ýXÈXf´ý:Ærò8Æç ŽäSÄù™:%R8óÑþY6±¢¨’i»IÙ<Ï8÷&Ä À’€X)FxšEF–]¬è‡NǘqbúƒX)?á<Vô�òY6±¢{’Ž)×^ƹ7!V�–ÄÊ`ôKO³d<Í̲Š=yÖ¶ëÓ²w0ã8ëÄ"#+œÇÅY±¢cª\ •e~4fuoB¬�”�ÄJxš5Ë(VHí ÄÊ`%VÂy,Ç–óx8Ë V$8Iå+Î8÷&"+�Kbå<<Íe+¤öbe0‹+œÇ£Sv±¢>K¤ò±’cˆX+½ÄEŒ<Íe+¤öbe0ó+œÇãSV±¢ßœÐÁT¾Ñ˜Õ½ ±P+]ÂÓ,œ±ñX±Rûô4F±R8'£ŒbEÛ¤cJÚ×xŒso"²°$ Vxš5-Ê,VH훈•ÁÌ:²Ây<Ê&VtMé˜Ò‰p|+9†XUaÝÅŠ~´(bœe+¤öMÄÊ`f)V8§GYÄŠÒ÷´:®<(› ÄJŽ!V`UXg±¢›žfQÄ8Ê(VHí›.ã809:u¯bßO‡2ˆ:N—qîMˆ€%aÅŠ~xš5}Ê$VtŒIí›>ˆ•ÁL;²Ây<-Vèà6}fuoB¬�”€u+ŒG0;Ê"V´ ¤öÍÄÊ`¦)V$N8gÃ¢ÄŠŽ©’Éèà6]ƹ7YXÖI¬ð4k¶”A¬èÇJǘԾـXÌ´ÄŠö±–Åy<!Vdx¶ŒsoB¬�, ë VÊ1ÁckÕ¾o­ãEÝ<^Øqëš»9oZ­õ8}oº,R¬èɳÖOjßlÇ!X'&+œÇóažbEÇ”n³gV÷&Ä @ Xu±2ÕñN÷í‡Í‡Îí_VN­Ý¸4@¬œÙiûŽ5Û§éߣ±(±Bjßü@¬Ì];œÇóa^b%¤òi]ÓÙ2ν‰È À’°ªbeúO³žÛQëº]h´WW¬œ}i­íËÖX"±Bjß|A¬ fÜÈJ8gc>ÌC¬„N„¤òÍÄJŽ!V`UXE±Šû=ÍzÑnئ»Im¾ö¶ÝÝ~É~ÿß¾n;ÕŠ¿qmT¶­ypâüúGÖ¬]p_µúNÓö>Ùµª¦Ëj-;:þØv5Ýý]©Ý±ƒ§ûÖØtÓ6oÙ½»×Ý{-;N×—¤€mºy¯Yëñ'é|7ìö¶­²qÁj·l­-7ݽn>r’â¹ïÝê¬Ï/ÿôÌ΢u&¦”®Ïíxÿ «Uôwø|/gÇ’ïW¹lµ«/y±ÒyOËñßùK/d:Ë}çcÛóÛÔ¹Yæ)Vʑڷ~ V£ëe8Ã,ÅŠ~sèà6+9†XUaÕÄJ±ña¨:ð†í?Oß_Û^½êy š õ=;9;¶‡• å?³é#+šï%«6öíôìÀš[/Y}ïëDUj¶»¯ù3·¬&±rü"K—¬Ñ~b'{;Vñbáiòz³aíøþr²gõŠ>÷ÜNÛN0m5íðì™6¯XEÛç§kYOíì°i[•Û;‰Öî£%UÛn}ig~[ð艬t¿³Û0'¤ª™ÈÊY²]=â+Ÿy‰•ö5•Ô> ÄÊôà<^³+Z.Üb%Ç+°*¬’XÑ~±§Y±ðÏí¸ýckÖIH ÐO¿°öÞ{ÖjîZãξŸÅŸ ‘EÓûÏ$B²b#+é|ý^›Iíû·­î£Éçìì¨í¢È/·»±­·7 ,ç;gÄÊÙqÛî7ëI„§$bE?Frðæ!Šà<ˆ•Áè,‚Î_ǧ/ú‡Å®Oè2 ±Äçd©|éá6Bñ„ßpÞèï¹C³i63«{b ¬’X)î,ÇÂCEå»V­Þ²½ã'‘3ÐU‘‹_GŸI#+;œˆIgsôˆ,#‰•§n]—“å?—€H"+ú;W3ã•-ÛÙ;:Í^€¤i\§ûÖ¨*²òËüï‹?ï%¿ÜçÚ®’ˆ•âë(a÷µy:3Zbe0£ˆ•i9Ëþ¾1ðX»ûÉßJïKñëõebez×FüP©q³—1¿ ?o–‹qö‘ë±PÖQ¬ø›´ž*¥Qˆ³£–mëédõ†5i¨îÚ'{?´kõë>ªÔŒ<óöª1QJÕ‹¸~¤Rµí·›öšjQÜß݈Mà|$&k›µš] ¯Û—~]«Ö_±zuÓ§œ„í Ÿ«\·ÖÑiT³â¶µú}»wø,]¯xÞîkV´ÍU{í^óÜwnŸ|a­mÕé¸å>>L^olY½qÃí‡$Õlå+e €Ó±dLÏ![Mt ažbÅßß.$Dâ×ëÌr‹•¸ÙËø_+ˆ€¥a=#+ˈŠî_³zçL?R»v§G˜,ÄJÄʺ1¹X ¹ŠUoÜH2$M?Î7Å8I>Ñq:£¡)†¦Ÿé±kÖ:zlû»5«d–·ÌW¬„‡U[v£~ÕïïnÓ”¼cÝ7ÎŽ3Çè7ITÜÃŒ¹sà\ã·Ž:©ÄìjírR‹¥„=NämÖß°ù3ÛvûÁÝ´AKؾœóÌGåÝßjHs#Y¾¯“ìiTsljä°/ÒÔäÓkùTd}6Imö‘|¿ý7ì†_¯Êŵ¥ùÌêÞ„X(ˆ•eáÄ[;Ý)wco<8t?kå¡<b%úAœz÷5uRìäu_KÒ�Ý2&pžöûÏ:»ëòOM—À!X7;ËrV·’JÛrŽkçXz¢¦ŽŽXéÓlÃO?—jšÖF(¢zúM·a‡_âê3_±âðÎ|î¤ãÆ1âcÄÊ/û#M)ÉñëüÆ/]’(Ìæ¶5i“–ä¼J²,ÏGÚO¿rË»˜Þã’×~=ƒÎ3ÿJ›Å¸åé^×Û¨ÆÑI‰>M¾“ßždÛ*~Y'~ºëížëƒçÞ¤{â0+�%�±Ó¢<bÅÑùAœr÷µaAßîkÓpòÄõýz‚x]é¶/Ð!X'Š8?b¸XéFäºà ØlSŒ0]Ç:âŽ%i®ÝÏÇË œhþìµ°Â,F¬¤Ñ„‘wLÃñÿ¢Ï1Š?¿>Ÿnœ¼Ðô‹çÏ›žûE¿eG¯‹žgZÞ¹F5nÅ{ón{.ØVó 1þž§eÅõ¡Zo±èô8÷&mÿ0+�%�±Ó¢Ôb圳ÖûZé…º¯ s¢õö:ÓpúüˆŸsâui{ë¬:VE.Vz#+•ú;êÓ¤ãúc{¾ÙFþ9"+ZÞðˆÚª±±GVôã«>Í]Âõ"+ÙcÝ'z^ç7~é’Ì›< HÖ—Ü#F¼7=ÏüòºéûŸž‹¬$mÜ´/¢)ÝõÎîÞTäzE¬�”�Ä L‹å+#t_æx§$M/ëI÷˜†C7û#‚§ÑºÒt:pž"bå%çÐ&õ ÉxPy@Ú‡ïtD­s<Îi¶>§èÚãÇÝ×G/¢zˆM«nßµÃ\'wõXŒX¹è„‰t¸{ÂîÇþþqþ˜þkk5·ýñó(ösŽQ!õu!‡ö¸ó:§ñ˽ÃAÑMaMkVÜ|qs—|»h5w_I^ëAÇ“óM]~þ‘û~É߽˻`ÿGO£š_vöèÞû´ŠêùõNzçÞ¤e±P+“ã^CL5%­¶ÿAÊîCþ~î)}wZä8út¢JŸœò;|°Ûýá¨ýÐÞk6í¾²ŸƒÿÑ̬¯5Ènkˆ£<bå|ô#kãw_sNã@‡ ª5‰º¯5ZÍL¤$k·›7sÄ_iüŸ½ëzX'FÔ¬ÌÃ!X'´‹0\¬0‹+£ÝOa4fuoB¬�”€µ+cö¦ïGüľ[ ïœ_ŸÊ‘îôÇá[¶#±RÃÚ§½E°gG÷íæ4mÇÏ{ǶkWÓ'âñs²PƒÐJgÚß­Ûî@§3 É»m=hn÷Önô¤2§<be¨è¾ÜÝ×Á¬‚Uar±’Fà ŠGùŠ•èáI|Ÿ…©2ν©ÈõŠX(ë)V'œÞôýÈŠ‘®HFÏô“¬y_Nð‰ýâð«nD#L;§ø4ž›Ö<xhÍ­«ÖŒeŸ*t1Óñ¥‘Xñâ¦f_HžNF¬8Êß}mŒã¬“‹˜ó+0fµÿ+�%`ýÄJ:b}pBÿ5k†"jå‡V¶Q NbrÞŸEµ�½œ+Šˆ4m+}:ê§w–•Iórä}Þ£°kwÒŽTW»…Òî__|9†¨èyÒ''üÞv·ßE¬@pÈ£kªˆ•Å‚XY=fµÿ+П¿3ûð ³üG³oµõŒ³ËçGfü3÷þûnžE51qÛ÷ƒÌþ©³‡îõ2³ž‘•¸P9:ÿ^ˆ$×^äö«?O!±’N?;ú±íúÈJ—~bE)`×Râ—׉€äˆ•žz”ó‚¨KYÙ{`êŤÍn:ŃX>àMÄÊbA¬¬ãìÿ"“ïC¬ á·OÍÞýK³kÎiÿ§ïuíæ1û“¯œ+ãùwcïù_fo~Ø;ß9sËù[Þç‹v¾3Û‹•ÏÝw‹·wÑbå[NL"VJøbåì¸m÷›õ$Ú’FMâ‘…C7žAœÒÀrÈŸžvròâ#Ø•N*X"†Ò‘‚ý;BBäââÜv’v‡Ê ˆX>à ¦ˆó#æ)Vü½¥çâLÕ´HïCŽÈjwíÓNýLvZ]NïSçjêÄ™¾gNCŠší¾÷–ÝÎ<¬é’Ü›ó×Ó;­ÛÉ.¼WÐÈ¢÷~†XY=ÆÙÿ:7†1ÌGB¬ôÃ9óŸ>r޲sدýÌ9ìN´Ä(òpSOýÝôßsÎ}Ï­#DÜ´7£ÏýÖìœ(ð"ÀMÿÐý½hNÜ÷ÐwÌFVœh7%Ðæ$V´-JÍaâß»ómYK¬øö²—|‹Xß!Éÿ8ª=í•‘Š[{ÅÆðû,¹ÓµmÛJKÿN#>a™Éß—zë)z"ìGT³Æqðm%Ó!VzÉuæÜ>n´¬íElÆÁê˜Û‡ŸÞ-à<MÓÙKÏ¥Îzþ¥Õœxí]·xÃZíPU²Áhßa¨³<ç É9ôë>²sω•WÜ{ÎYˆ§kàÓ›owïKšw»f5?vHo:iÍÛmÕ«p¥Ø^ÛT/·ù΢k-Û)MóßL¶íø¾ÕýwŠîñþÁQosŒå+ù÷›øšî½+CÊÌz†Þ[‹3Îþ×ú†Xç8~ø“DTÜrNtßšT”œ+ŽSQ‹[ö»‘L;'@ÄŠDÜ­ç#ŠÅ$bÙ(îȦQE%ÞÙ³w¶ån¹¹î\NüWéôî 4<ÿG4÷‡!zrÙ;ý¼ÈÞ¹‰G7w/"ÒùÂ6h0ÃV#ª¯Qûݦíö¹‚{~ç£Óë?,»c£ –r‰'Â~øV_q82±³æD+@Ò_¢»lì ç<|zo¸ó4ugÏÑ#83ÛÖie¬s=ûC0˜ù9d«Í`g9¹?ͳHïùýµí5ßs÷wžÿâQô%LwçàÃGéùèÎQŸªúÐzjê„ú\ìãðb±rú¥FÂ9vüÈFÎïüÅŠj%ïXÓï¿i0üšÎóÅw ìñzo-ƬîMÿùoò}£`ƒX[±òW_$üwf6,øqæÎ×ÿ=Gtô+ŽNšÕ"S¬R-V$T^ÿ娳d˜XyºDß}jβ¹üV×QÏ>I„\Ê$V¼“!©š„žÔ„DH„nl±ó z¢·“'œ§é;{ŽAbEèœv"}ÔeÏÊ!X$ò‹ÐßY–S5�©½mŸîÝêü" =cýxÓC/ú:ùçŊλnM]r~‡e9Ë.#çüO(¿éSS{kê¾[aæIz!&+rÎùˆ¹‹½]ÎÙã2üšî9æ¥è@YD¬$ôÞ[‹1«{Sž_Û ÖS¬¸ß5ï¤÷y|äÄÍXbåC÷z”ôŸ¿sËuŸý®>+ûÀ-߉<A¥45Îûùœ)•íaÎŒc‰·ÍÝwîÔñ¸ÿð«üíPÍÏ›é¾}×½)u¿ýÍùZ YˆT +ò/òý•Ù»Úgé2ôwøŒja>ÍÛè0¬xLײ05g9DÏY¥¶kúE*J‹~rÂý‡eš”F¬øÔ¾¤ÞhcãªýÛ¦R^’ïßIw -›Ã~‘É9ê——笥©‰Ã8e[F?çiΞc˜X ©g#ž³rVû" v–ûœ+þ|Ð1}ž®$Çq˜è,&VÒ×rzwÿ´˜XÑ5໦¯cçöÜù›¹Frň&V¶2¢¾ìb%M×õßÛíw>¶½Â(¿èã俦ý1ï,ëü}$ïœðtŽ©–7Í”ÅÅJï½µãÜ›´oñÜ}ñ<¿(˜¢.ƒXK±2¶ÈÐW¬Dõ,yécýð©Rîs7Hðþu”Nvݽ/ç¡üÈ—`ðõ5ÎaÓ „˜‘ÅŠ[¯Rä®=rŽ¿öû>ï¦ß5»¿vËþ®[ï»é>8s×Èõt™ï†ëÅ-ÃúgÖ3¬È¿Èw ß-,ãÿ:0ûwjŠ ùS¡ô-·ÿj‚ã\”¿þÛüs<Øç™ß¦23gúS±âÈý!î8{îM/hÇÊ;m¹õ"ÅJòZ©·39Ü}œ§™8{ÄÊBæüF+Jõ¼;I ÇÔGS‡7NÉéÃùëaPX}¦'‚'8IJJ×¹M¯$…ÖÏî$DÃÄJö\Ö{ßï�äÎ×e¾bÅ‘»ÿ&é@9üšŽy9:P–O¬ cRÿh-ÅJ“֓䉕¸(¿ãìÁÍ'a’MK z,z~ëœqE:b ¥#2"lT±¢¹ÿ-ëàçÌÖ÷·=1Ÿ»Ï+2ÔÙ/n9ybÅÓgFúŽÑò{æ´Þð»¿Ï?ǃý4:OÊbe±”V¬ä9{î">î¤×Ä5!}ÈùAퟖGþôÙ8{ÒÀ‚ŽaŠ‹•ĉ­î<°ãç:uLŸ{§q”š–^Ç´@}–ÜéÚ¶z$Ò¶N­AHiSÁô{éXN©C=¢Xñio;JÅMæÊ¶5t榉­l}ÃàëqÑbeò”ïé~b$?==>û‘lZ(Ë—6ìzýÂ9¶y~Q°a™'ë'V‚;D¬ô<õ,þL+Yë—Ž5ÕÅüžûìM',†á×;ëa›âåŒ$VÒýs."í·°l¿ŠA¢!o#}ÇËóM÷›”¼s<6=]X+‹¥œb%ÏÙs7pE-F©iéùAÍ+ìåOŸ•³ç$V(°_8ƒå4êáÂC{ì_«qÆ+îœÛôãÄ;s‘CéÛ“+dýµÐq<ÃüýZç<ÏžœSþ½ÎúâÔÓè¡@»Õíf'«ºs~/í^xŽh¹=‹øL guÇZ=iº™eä\+ +Sé@9üšK¬Ì´e,V$2d;*êzo-Æ8÷&ƒÐÃÚ<Ÿ(ذšÞµ+EÒÀCÒŒ²„¬#æ'í(ˆ£¡b%8÷}¶=,'#‰•𞛿Ÿùeç4ï m(ú,ÞbELÞyLu-Ë�be±”I¬$OæÔÅímûäóÎÞiú²ãЄ§…y5+=ÎZwþ¾­‹Ï9GyÓ£÷¦êì¥NH˜—ÖÅsEû¶“9ËŠ ¾fõÈñ˶æ…ÁÌ]¬„ûDåãÃôÞS¤e^D"s? ó÷m]œ¹Ÿ9r§wîs‘`õ÷Ãt¾pŸR¤zì”±]±æÏ?ro-Î8÷&­¯òNdÃX?±âèDMòœç !âQÈvNs¨1¹æÖ1Jp¥¨XélOG>O˜Œ"VÂòÏEV²  YÍ;` ÇËŸ·XùÊýÆåçÁÚ™z¢²²–b%ü˜œsseÞ1(“X†O¹¨ßïì‡lëNÈg‡`äüÄLæ,‡4®Ô¹‹Ÿr/ iªWøëMšs+àåÄŒ³ÿuÎõcX X¡±–b¥ã ;+, :š ÷~63ˆ¼ˆHEùI#+çæÍ‚[îP!0#±RÆÈʰ޲ã!¹™e`9ÅŠR}&ë¿ïŸ’ }ç tË#V¢Tï ÅiVKDüÔ3²þ©h“3‘Cfá,CqJ'Vè@91Ó¼7i0l=¤Íó…‚ «Wk)V„:MɉUkà‡—¾™Ã¨bEøâðËŽ´ñÛÿá–¥÷‡ˆ„àÈÇÓF+‘ãŸ-n÷¸éòËD$ÕOØüԭ׿?@L ܆¢ßqÀòç-VD¿ÜÌðþ°}e`)ÅŠO˜¬ÿþäb%É‘Ÿtºå+0.ÓtV9gE@¬,–Ò‰˜˜qö¿ëu˜)Mlk+VÔŽ÷Ít,Žïþ¤×®qÄŠbH­w‹–ÈA×göâej[Ý6†(CÐ2O$h›²53#‰Gœ&—[Eu9”n[gß8SSϣ勇Á·œ4,òÑoFúŽ–¿±ŸóŸºý𓜧 ;ï 23G6~ê•¶ õ…‘îïÍ×Þ¶»Û/õæÇ ¾kÍQ'Çx³±gŸø×Ê þ©{?î¿ÿ}>wÁjõë>í£ÓªÓºô‚]­]NÛ_jÕÝÁâºcŠäÏ›Џµ Î~ÿ5kž w¹ííÉ£F¬¬8dƒÑµQÄÊbA¬¬ãìÿ~×ë°Âú¢]R×W¬ç\‡ñCüà‹¿ì-÷äOœsî£$YGØ}6Œ¥’[Ÿ"‘Š¡A;Æô@QÖ“Ræ¶Qã èý¸=²oìÖõafEHFÄÄB¬'Šo{Ʋ­•ã=–‰*Ñ ï¡ýúïÜþð~b¿má;öM½‹ŽQv|˜Y¢°§.@ •¼s^VôÂZ³qd“îK‰HˆÇ&8ñBâ|‹É´µ¦ïdòMòYßJòÄš×l«þCkÔ_év¯étBqsä}ÎOOECgœoüvlúmŠ»C©£ÌKiyèÕÔgÞ˜LgO<@*h† B‡XY}pȃXY+«Ç´öÿ°±UdE;¤®·XIÑX&ïþe¾PPÄàÝXĸÿC$kÙú—؉6ì v4x­?Œ߃ێžæÝtÂ!ŽnôÛVmC'zYO½Œ–ïü˜ÎHún=?pëË‹@ÅcËøùܾìÙGðRó„A/ mÃï¢Fñ2ùUŸ÷³Ná¬VP&+ste6ެòp/tÛfzÁ qñë_äކœ]/ 6­Zouë#:båiþçž…éîÂôóJ¬ôŽjÜMí:Ÿ3¼Ù¸kwsçé+yc�t£3î½>ƒÐ!VV²Áèú(be± VVqööz-R«¢éš¯ +š°j)´Wô¥è…:ofãȦÑñx‘D¢ÈÊy±"+·l/ޏÈÙ¿yÓší ¹íCš¢u.²’ù\gz,VÔë^Q-ã‰{}©7²¢1E:J""çç‰ÄJî�ÉwVÓ‚XY}pȦbe± VVqöV¬y`;ŠÿX˜ºxòÎùØtA—‘™9²jVr[mö Z¶iÕí·ìÏÞQÔDuu£=ý÷™ùܬùZÚOóŠÕ®¤ŸÛlØþãPC’Ö¡¸÷%6žÇµ%•ªmß;´÷zçí hºwöìsc�<uZ+oºÞb+ÄÊêƒC6]E@¬,ÄÊê1Îþ¯W ð˜çïÄ6JTE +E}©¾w•a9kË2HÀ¨IVÆQíqdgE±Aè+«Ù`+Ëbeõgÿ‡ëµHú—lÔ@Å´}ï*Ó Ý�,#EB¡²"­ûæ Žì¬(6beõÁ!›ˆ•Å‚XY=&Ùÿš!ÏljmÔ¨ŠP`#oYÁÍ)B_±¢ Ê[pl�«ŠjWŠ<eÐ<e,úñyùå—ýÿØüíÛßþöÌ…Ä«¯¾Ê1^ }ï{ßÃ!@ÑÈʯ~õ«Døc 3ÝK¦‰® ]y× 6{çÞ¤ó èÃÙ¢Â"f˜*Ú°hà]eXŸå¢+XF¾z–Þg­L‚E€œelq6k~÷»ßå®›Ÿé@>r~`=yòäIîõ‚ÍÏt FáÿþóÏrýš¬“MU$è¡ÃExW¦¶(²‡U§è‡²EX��b`9þMÞ�ر“þ%†Õ¾+êR”w•aO–‹Ž` °¬è-’ˬŒE÷��ó±PnòüšA‚eœô/1ìaï(ºÞUŠtEâi2¬:EëW‚éç)���À¬ðèçÏä -Æ¡H Ø("hè#au+¿tŽÀª#Q>Š`ÑuCM�¬DV�ʇÄÃç§ùþJl±`у×q–&…¡w•~mÇô…dãæ²,£ ™nŠÌ����Ìùçª/Åw‘oÿ—Ù¾ü#2,Ð!ßh†Š•l*ØC·Ÿf¾ô¸a"€ecÁ"Ó R&��`ÖŒ#R‚MQJïÊ[nl£Ö÷Š×>ú›D¤ä­PFtÖ‰q‹LEm÷\/�°jL2(�LŽ„‚¢ãú(Ó> ‹ªŒ£ ‰•aÃåË&Ub�Ë„R»Fé–gú¼®­ÿán§Ô·�À’ƒX˜røU+?blÝL‹ÔªŒ£ ‰í";4X7tÑå] £Øg™kK"F0a†-“}ôË'Þôú?ü§ÿÚy_¯c›dzü^vÚ´¦‡ÿ§==~/;mZÓÃÿÓž¿—6­éáÿiOßËN›Öôðÿ¬§ëÿØ_˜†)2 ÿ½¨V§Ž·XÃÆ\‘ÉÉX7µ,bÃB¦†a†aÓ65ÑšVZz‘ncãfa+¢ˆSE:¬#ºØÇ²|†XÁ0 Ã0lN&~šÃ+IÿÒCÝq»£Ž$VŠlŒlyo�ˈ.~…jó®‹~6¨y†a†aØ4L"E5.ÓŠ¦ù=yëÊšÖ;.#‰Q´¨ÁëÌ8¢Ã0 Ã0lÚ¦¨Æ´EŠP¤¤H¼DÒ$ëY¬¨'oCò ÁëŽD‹ÒÃ&©iÁ0 Ã0 ÕTG"_|Ú"EHü¬`�cÒ”³‘ÅŠ:ËÛ˜<C°�$¨_ÅlÔc†a6mÓƒÑ PÆ­)B<Þ\v ø¬Éï™”±ÄŠ¥˜x’<5€UD7‘ ^tc!e Ã0 ð¢†9!q2iô¢(yPû mã4¢:c‹­¼hýŠLÙ,ÂP�«†„Œn:†a†a±-’A™UYÁ"A3-¿l±"F,Úp)2�����(?IEüýX°Ls ø‰ÄŠU°È¶Z´:����€|”éQd°ÇØ$X¦]¯>±Xã™ê^fY������Å‘o®Z˜<ß}Í*ƒj*bEŒ+XdúÜWÏ.�����óF~¼""ã6ü‘P™fêWÌÔĊд«‘>¯)3Ä ����Àt‘Ï®’ ùÜJõÊvøÅt˜•PS+qBGy¦ñ(d02¥i§b†a†aVÌä›zšã½iy>³d&bEH­1ø†a†a†­–)£Žy03±"¤´¦eÁ0 Ã0 Ã0l±¦hÊ<K5f*VúBúby_¸Ÿ=œ wÃ0 Ã0 ðé™jS1ôÈ\ÄJ@_°¨hyH †a†a†-ÔTÖ1í±SFa®b% ŽJ›¤ó�†a†a†a³15¶šÅ¸)£²±£  —x¸~ Ã0 Ã0 Ãfojc¬(ʬ;|ÂÂÅJŒj[´ƒþÛ7fÿß ‘ Ã0 Ã0 ›…©4CùÞ*Õ(“@‰)•XÉ# Zƒa†a†aØdVVQÒÒ‹�����XO+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PJ+�����PBÌþdK©í-åˆÝ����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8l.png��������������������������������������������0000664�0000000�0000000�00000117314�15030617045�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ô��î���~ªDf���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��žaIDATx^íýï×§ ò¯X _Wc€‹á Ð&úÅêU¾"0£ñZ@ƒX4É…ˆ…Ð0š@P àΕ¡‹IL­ k,Ü¥ŒZ+N¢©¶ È쩱ÚÃ5ÇÕT_ëörj,ËZš.Ù­¡ykÊm]š]÷ìùœˆ“u2êdfdfd扈ç¾`1DFFDÆ9Ïùž �������Ì B ������°�5������À Ô������� €P��¬‰ . ��@UPª���¬ dnóp�� J(U���Ö2·y8��P%”*���k™Û<œ��¨J��€5ÌmÎ��T ¥ ��Àš@æ6ç���ª„R��`M s›‡s���UB©��°&¹ÍÃ9��€*¡T��XÈÜæá��@•Pª���¬ dnóp�� J(U���Ö2·y8��P%”*���k™Û<œ��¨J��€5‘®Ì˜ƒ~×íßx\3ãçÆ M¯74GÇûf§c×ßù;ëFºç���ê¥ ��ÀšH[æ2©Þê«Ð–/Ìá Ÿ uÀóƒ¾ÙB¨��”*���k¢>B}jŽ÷ß2w 2-j��€3(U���ÖD„Zû˜EÐÝ[ÿÏ%:êÓ£{f¯wѽ¾Ó»ežœº-¥ B ��UB©��°&ê ÔY†ú™y<¼™g¨Ÿ[§¾êÏÍþÎ ¦Û¿oNNšÁåÌÎþçnK)ƒP�@•Pª���¬‰úuÈ$¡~d†½-÷|œoz Ô��P%”*���k¢YBg¨wô{z@¨� J(U���ÖDº2W?˳á¶±Õë™+þo+ÞÏ‚1Ô:]³}ûФîÖÚW��€ª T��XÈÜæá��@•Pª���¬ dnóp�� J(U���Ö2·y8��P%”*���k™Û<œ��¨J��€5ÌmÎ��T ¥ ��Àš@æ6ç���ª„R��`M s›‡s���UB©��°&¹ÍÃ9��€*¡T��XÈÜæá��@•Pª���¬ dnóp�� J(U���Ö2·y8��P%”*���kbU2÷äÉ“ü¯fò›ßüÆ|øá‡•|O„��ª„R��`MHæˆÍ��@UPª���ÔejïÝ»gþøÿ؉á×¾ö5÷ÿ¶à3Õ¯¿þºù½ßû=ó•¯|żùæ›æg?ûYþ ��€õ‚P��$Œ—hÉs(Ñz¼íx¹–X{¹Öc���ë¡��H0û/þÅ¿0ßûÞ÷?Vz”¥–PK¬uÌtìt ix��€U‚P��$ÂáááXwf$z1tÌtìÔAV��V B ��°AÂ̪ï¶Ì˜àêðrí»Ìkü9 ��PI õñoùì7Æ<<6æGOù‹_ŽÇþ/Î?FA¬6tOþɉ1ÿí3æ7Ÿß°a.$sÃáp¬{2½zÂñè¾+½ÎÇ��%)¡VÅL•´>7æOóÿyDA¤þ‹¬ÑS‚ “ »!‡c|as„ãÔé���‹°q¡–D«"öÝ£xE ‚¨O¨1T¢~ßä[ŽÏˆ¶u™«:¡ñë±IÍ���¦±1¡V&ãàI¼BFAÔ?¾s”uÿíi~ão a·b&Ī'ÊR«+¸ïMÀ9�€I¬]¨5.Zcðb•/‚ ¢1üÙÙßÊZ·A¬Y檙„]õÃÎ-��ˆµ µºv“‘&‚hG¼ûóóihOÓº‚³ÌU»(ö> á��Ö"Ôª@1ÉA¡Ð$fuÎV«;0Ë\äšIÍ��`¥B­ “&‹U¨‚ ˆfÆŸE²ÓÅP#«–E¬ Ê@²ÌLÃËuØÐ¤f��ÍgeB­.ÞÊBÄ*ReÃÏ«±wªxi"3EÛ&¸�Ø4šÿÂ߃µ¼¡K—½Ç+´­T ÇÎz‰F  a/†ðÚaR3�€æ±¡VÅkÑ.Þc'Fœ�ÒG§Ö£ÆOÝÃï,pï×ü©àÇȲÌTEØ0ìï��Í£r¡^T¦5ówºÿ�À8’ëÿùébeÀ&ÇU'šBxÒD×—ï%áã—_œ,åøäoÿ»ùî½ó¿õŽù?ý_vÌ«ÿ7ÝÿõxìõAm:Q©P/"Óéº4��˜ŒÄX]¹ç-Ö-Õá„RÌÖœ’g5²«Çšê “®%õj‹=NAÔ?t÷ÃSöÅÊ„z^™Ö"# �Ð\$ÇóNL)©^%,s•.’hUšæ›PA´+ÔȪ¡f) ®D¨ç•iµ4¤t��`u¨Œ˜G|ªSÍ2Wi£Š‘*H±kaV ÔAíÚúB ™ë¥…Zb<O¦‚��Ú…ÊŠy¤I™Êe`™«ôQ}`ÞaÅ@¨ ‚ •›륅Z™„Ø+† Me)�� ½ÌÓ|Þ‘e®êÎkU"ŒPA>Ôp¿ ß\J¨5éLìË™��2“±²¢*;f b™«ú 1Ò‹víž5AD;ã;??®X÷ðâ……ú¿—7­ÂŽñÒ��RVª•Ñ.Â2Wõc‘YßËBMÑθ3£LQ™³®nà õû¿4æßþ̘¡Ø—P™�€I”2ä D–¹ªjP/{žg…êÊp+ÔТqöó¿fÿã±ø óÿú÷šÿñO¾çâ­{ÿ‹{,öZ‚ ˆTBå…¿ÏÇÊEB º«f!¡.fÞÐBÀ²X��02K$½õ7¿b™«"™žg ¬bH %ΪKÐ8¿8á,÷áÜôè�€ÔQƒº¼³Ø0;+;] ½•,$Ô±.VÅlõªw��êÆÕ–é üáÏ~•¿êÀ¢2­kAõ‡uuÓkáÄ} —�€:¡rErýþv~¡V(뽪aÈs õ¬qoÊVßµ…(��@$O±ò$ æã¨‹È´DZÝý8ÇëÃ˵Ÿ‹@ûÑ�ê€ã‹Yë2¡²iåÌÜB]fŸÓÐ ��3³eoÜû8Zž„¡]H›EdZ•"UŽ`s„ýù9 ´Ž;k·@Êh8мã­W!Õs õ¬ì´"6#+��€ð÷â2WªX™† AH—yeZ¯eltš„�jìµÆ`#×�*šk£Ìð1ZV«Jæj}xl§|è‹Ð] ��BÂì×´q›eºo!`é2O–€yVêÃááatR3�€”˜·Q·Ê$pi¡.“=Ðø'���1ï2W* gµ0Ó *Mt^bç+ëXÂVƒ²Ôê ®ß³~דÇ��6Å<c««JVZ¨Ët÷&; �Ðn”Í »ŠÎ;ÉÑ,1“pCZ”©ø`|sç@{ž0©�l5ÜÆÊ XTÑó­´PÏêîM÷-�€v®s»ìxKl±2& º}§C™óå™n.Åaez¤��¬’²½UÌÏRZ¨guÃÓ`p��hª(«ëg8®²ªI‹fbxQ:è\ý[{Úcç) dº=H®™Ô �R l¦zÙzE)¡žµF(]ð��šOØÅÓKô*&'RÁ+k|T=;',FØúÿî”Fw@Ú—ë° “šÀº(;¦z™åK õ,»§r�ÐL|WÎâ2W«¤L7bØ,š3å»Gãçdø³óÙj†ƒAH8<$l”cR3�Xegÿ^¦¼*%Գ̞;�šCq<ä&fò5̈qÔ›eZC»ÏV«Ãd¥0‰I“š!×�P5Ê>ϪW(ÍR—êYkKªK8��Ô›pÜã¦'ú÷VÆ”ýÎϳ•ý¤ÜI‡bvº:_4z@Y¼\ûF<õˆaR3�¨’2ã©ÍR—êYF��õD]0ÃɃR©ÄÎZ>‹q¹›£ÌÌ©tõ†E {ÈøÆ=M€È¤f�°,³ƒ‹d©K uìÃ|0!�@½Ç1úI‚R«¬Î’6„msÌ‹¦z]½¡*ž3©Þ¯� hUªX¹Æ" ö3…zÖ ßê��iã»T†“¥\)¥ìI“2ÆÑ{�VÅááatR³i(ã­,7c³@ÌÊR/’,F¨�Š—èU/sµ ({ÒdÖ’f ²Ó°Ô ¨®àþþ6iR3=¦qÙH5�ˆ2Öæ¡�háøÃu-sµ ({ÒdVË>]ña„‡á}Oû{!R �žYe™æq™„� Ä$ºÎGÊžôÐD-±s3{æ)6*CRÂÄ‹�°9fõ¶’pÏB � ʶÌâ”–¹ªÊžô˜ÕMnÞ ÀªùË¿ü˨TëžÉÄf�í¥Ì| óÌöP@²H(5 Bcå|hÒ0T9ŠUšÊ„ÞnKY ÿ9TÿùëÌö*»¢}Ó¿ET g¼m’D‡Pö¤‡ºsÇÎ…y»È¬Ý+‹÷|º‡’©h/³º}kFð² Ô�°Q$ˆ^˜5{«¤V¢è+<^tõœ]ef½è.+»ªP…ÛÒ¶ýç¨2æ?ßW” ÷G全RæeÚ–Ð1ò3Û*ôwÓ³+”=é¡c;>æ©|�¬ƒ°±U÷Sß`ªû<j€v3«Û÷<Ä5�¬ ɧ2ªUUnTÉ‘ 5劎oí«öYûî+mú[ßÍg¶çE•<_ùóñOþÉ?qÛ×vÛT¤ìIØyƒÙ½� .פ¾ó8ËZççÙ¿ïÏQÏ@¨`%(k«lk(ÏúwáLß=½Ø` %Þ:Ó2Ù’å0›âã_þË™¿¢]Pö¤Å¬ É? › x¿$ˆeÚÅŸ1Žzžõ¨j�¨ ¥he%‡¾{]Óä¹,^²u |·q#e£}WõI2í_ßF({Ò‚ó)¢{$@p-µIs¬LóQ„�F"¨Œ¬ÏÆJõÿ6uMž/Øá1Süáþáè±bH¾ÛeOZ»Æƒõ§aèþP\KíDu‰X™æ£,u’›Ã»{¦×É*ÓÞ7Ì{ƒ¹sôÜ<?è›­¼’í£Ó{ÃÜ?z–¿wŸ›ýKö}×ÌÐnï<ÏÍÑðš}~Ëô†öÏâxßìh?{CSm¿GfØûªþðmÓÓ÷¬|û°(’e?A–Ûf[¡<aV_ÇRB­‰p¢´&v/eOZÌš¼EϬ$ª‚k© Ôå™y<|Ùt:=³wÿȸ9^NÌý½³wpâ^a×ô¶úæ@>|ò‘ô.š­þUá’<?0ý­IB-NÌAÿÅrBmq’_VxOî›o äûúÔ|ã[Ù÷˜Â\ÛcŸU ñó™èP¢¡ZtLC¹–l·µ¡‚²'-jH$ª‚k©ÌZ²,uj¸Œï%³³ÿyþ@„@¨OÞ%syð0“ï2lL¨³Æ‚‹¹üŸ>ší‹yÃÀæêñÏ€åPfT‚§‚Fã¡%x°z|æZ]Á}FÛºÑSö¤B )‚AUp-µ“Ye[Yê¤8µ>½k:»cçH¨í_?þN¯onïZ>O&ÛÝë²È»q‡B}òÐ w.gϲâê˦{ýzÖí¼³möŠ;=ºkv»üµÙc"*¼§Íþn¾Ý Moð׿³ƒ=ÓõûÒýÓóÛºðÏL¯§nè]óÚíÙλºûnénûÝ—ÍŽû.ÚÖGæÄ5,<Êÿî½cÃÏè½e~xÿ¼ë|þ¾|÷`:’9ŸÖxß*×Y†ùбW{ v[zPö¤B )¢²  ¸–Ú BÝH"Bíä7D/Ä.CýšÙÿÀÊcçe3|?mµXryy`O¿0‡ƒ+¦³³o\g$Ô'ÙãÛCóøÔw5ß5ûÇÇ™P÷ï[}ê²Õãc˜5»;Ê`OÏ çßÉ=/Q§»÷ù®ënŸ¬ôîÝ3GJµ;a…zÏœ<ϾSø¸{>î»ø.Ûÿ¢é<5§‡sÙ}7J†DZc£d£ÓÂg­Ûr~({Ò¡†A‚ *¸–Ú BÝPœø]¸h¶‡ŸZõh‚®Kg]°G]¾3ÙÍ„8{jŒ0KŽÉ õ'v»Ϻ‹;íZýÌmwL˜˜?3Gß6—Ñ>›´l’PŸ˜;ƒ,c\J¨õÙÁ8ñPœýöÝ뮘ÁáÁû'µÏb"Ø>ŒH׋ð|55cMÙ“5¤UÁµÔNêÆ’g„­�÷ïæ]¹OšÁå‹¡¶ŸÜ7ý®•ísÝ™³Ìpt,q!C}!Ìþ3ÔNÊ_´ÿ§¬Ëv÷†Ù?zr^¸‹BíöëE³»ÿØ<=¿„P»}üÂíß°û ¿O³ÇÝþfûÏP_vû@^:ŽÆH«1"]O¼Xë6mŒ5eOZ Ô"+• ¿ŠÉ¨Q>èEg²ž£çF=àÂăž»lvC³È$ut¾ } ÔMæôÈ û£e³.\è˜îÎÀÝDú¸“Ѽ«¶{l<ë&ý ×=üÇfØÛ:{ÿÓØjí‚/­ÏšC+°£íu¯›¾Þ#±=|g”ö¢ì8ýÔ ·5æÙ&ýë¦{A]¯™ïk–žo¯³=0·_ëžíÓseäƒ}|dÚ»»fè &'ív;WÍÎu=ß1—m>ãÐ<¡¶ŸÓýª¹}øEöÞ–£îÃ~\®ÆHC}ѹÔ9Ô5®sÚ”YÁ){Ò¡†Ñ}ouäCÖœ,‘×_²rù2¤®Ÿþl¶]ýãL¼5üî¶­·P÷HÕ^K*5Ìà™9ÚÍìø¬¶›ýzÏÜâ¦Þz”•öYÍj' Bld ,Y³ÿêйô½ š°n5eOZ Ô"«• < í„ÙÏq¬Ââ2ØjÈ×°¹|Þ%!Üü3P7êv‚Pà ŽÍáp÷lÆë° 9´Ÿ•^U÷îl�{½†�¨’ñ–<uÿƒÕ£õ›Ðó€²'-jH‘•Jn×É&t=ùÈ ´ÒH>äÌ=íÊ;/Øy¶šÉOk BÝNj�(ºk,Å*—ÀòC²l´dú›f‡åÊÖŽÆSë\+c]×.à”=iPCЬT‚ÆÆPŸ Ëȳ×^ ýk}÷ï±÷†ÝÄ!Uêv‚P/Iv“#ÚmEr¥Œå믿ž?²:B¡~öøŽÙÝ;ëúv~]tµìäÝÄ_2ýÁ Óu¿3'‡ï™~þÚNï–yx¢‰òÔu\³Ëšw½ÓkeY½îjÏ\U† C"­s®.àuœ° ¡N „Rdue»ïâmË™‡Î2Õù³çÆOçÙì³ñÔÁû‘éZ°ºk R¡^~8í¢­çÛË´º¯ƒ‘Pï¼anöß¶"ìÅÖw‡ÓÄxgíº…ûI_º¦wóÀÉw6ù]6í©Ûž&Û;*'O³Ì€Ÿ!ÞÍÑÍtözrâuýÖ5P7©F¨Ó¡†Y]ÙŽŸ.d£ÅØøiá'ˆõ+‹DÞIƒ´„zIüçÆD BçÛÿݼL¯s9¬Ñ,ônyµgù£"êÞmsè&n¹·ö+ùëÜ8µ¿ žËÿ¶}ÿÓ|vx÷þpÖçÁßT`Bt ÔMªê´@¨!EV"A>Û¬²Ì­òÐ<÷óƒ\øŠy­ïWVQ“”ç®a‚²Z±’k ’¡^ÿÃi“`µ™¶ïMÈôY7-‘Vœ„ÌV4îî-aÖ{ÃÜ—p‡“¾¸×å3…K¼Þ²¯Ï+$þu½¦¿ó’yÁuý¶7  ÛÝÃÇZêm‹ Ìê&ÕuZ Ô"HT×R;A¨—¡nm:ß;«q³ëêæ}Æss4¼îÖ?—MТ‰]nšá~6ãüø,©"\Wý²Ù¹u?[Ë3¿Düƒý7ì{¬8÷nšƒ§÷M뢹Ú{ɾÇn{÷n¾ö'ÄP÷oMVV‡‰Êê´@¨!E ¨ ®¥v‚P/ BÝ.Út¾¿öµ¯¹H†ÓÇf÷%Ó~d÷‡f°sÙžkfx´üªÔ™W³­¶Üõ1„:-jH$ª‚k© ÔK‚P·‹¶œouëUv:© ä鑹¿× Æœ]6;ÇKvËV6üZ¾=?žÊà{0|øá‡ù#i‚P§B )âËv€eáZj'õ’øBÝÚp¾%J#{xx˜?G2­k%å®ßuZ Ô"HT×R;A¨—¡neηDôÿøk+¤«ý(ƒ®]3©‚P§B )‚AUp-µ„zIêv1í|kÖcÉ…^£¨«P“†yе¢k&Uê´@¨!E UòÌÝ#[£³m£¹†\}5_i£9p-µ„zI¦ 4Øù~òä‰yýõ×ÝsaÔQJ5vZ³7̃®™TÇR#ÔiPCŠø²V€[®òªé‡f¸}É­ÇÝäE4¸–Ú B½$þ‡SZ¨†¦— ×… ]Ó?81æùéoÿ'JêìšýcÖïI…ð|OizN]aç ½GYîMÅ•+W6°LVâŒ~ŸAtzfïþ‘«<?è›­Ñs~¦ðSsrøžé÷.ž½þ½o™›wìÍNœØŠ…›¥ü¢éíÝ‹,Ñ¥÷ÍN·3öY©¢kF×nŠ ÔiPCŠè> +ÂÕ{Û³Š×R;A¨—ÄÿpÊg¨¿0‡ƒ+ö}[A7—§æ`ð–98 «Ḭ̀·e.ô†æ(6Ox¾W!Ôe¶7¿û»¿ë¾ÑïñżÁëØ<l›ÎVßøúA¡Âpúxh¶;¡,g]Þ®í˜çù= ³=4Ÿj†Û—ƒõ³s\‹þ%·÷smk+í†5 wÐŒß)‚P§B )¢2»zNÌA¿k·mË‚—M×~†»ïŸÚò`ÿ†û¿>·Ó»e>½Ÿ5Ün]77¿iË½çæ·Íp7ox|äV´8=ºgöò†Z÷>ÕcÂê‚;WÍÎõl*ONUUùÙ!£†b}nÞ<Ö í“FÂ'ŽTþ›ü8½`vnî¹®áÞ7ÍÝá+Ù1Ë?ëôè®ÙU#³Û~ÞuüÜê6l½ùñ¬}]!úLhõ’øNy¡ö7Xc±2½w#S’s¼ov:]cNíýë–ÙÞe©Ÿu;ßMéò­™šý÷ƒ"PûüòÀúçX…æs³¿siò\N–/õF)¾Ö­‹=v}v÷¼t'Fª×B5¤ÈÊî_N(s)uõº‚øe½TÎ<±“ƧÙß®<PÙò‚éöï›WŽXR.¸í…Û(&h*ýì ¡øô™y<|Ùn#ož˜¡VÙv)K.¹ãÔɶïö+<f¡ˆ íK7{ßÉ}Óï^5ƒÃ/²rÓ}æ/ç:NUC=ª ÔKâ8‹ õ{ÓyÍì<ÍŸËÙMÜ`·{áÂw“›ÐÁ?þðspk'oe´7ªÇÆ[éÂÊ>TÆ´ó]ëº µöWݾ7ʤVõÓÇfßµ–ëØæ­í­êãݵƒ8×3$ï1¢ç:=Ó¿ý}s¶x‡W{ pûíÛù>>Ï=6ú ëžñâäí%‚®¯y„:-jHÝÛW‚»ßçBèþÎˉÓ#spçf6¬'/;Ü}?oHÿ”CylõÕë)ιmørf%Ÿ­ç/ž%B.-ÔáqŠü­ºðÁ·ÍÀeÁ}fÜm¹ïz…ÍwœªFŸí¡^ÿÙ_¨_0;7¿iú·²J¿Èº‰ª…îž9TW˜¼uïìñï›uwmß]Fóã¬5P­‹÷ï™Áå­ÆOú°)Êœo‰µºo«lHB¨-®�ŸØª~:ö˜{m…-ú“Qm?gÿ®éw³®Øc¿¯©Bíóyá~¥gz¾RUø>÷½F­ñ ƒPCjH‘•IPT¨?·eÂK¦»{×=ó•‘Ú¼<ÓûJTðÎmÕ)OWôÙùpÆîž98ynNöLwî õ4¡>ζٽaöžœ52«¼½˜íëó§ªYÙµIƒP/IÁÇW®­ ýØu¸”IôÓOÌpûbÞ 4x<ïÆ’Érþ¸äúWªÀ_È^ï*ógÙ/¨–ùÏw}HJ¨ÏUÔ¨~`î ò^¡PO­Lo©v¯ žEApGBí õÎËføøYþœ%¬08qïä]ßòçó®Ýn»îùæuùF¨¡ 5¤ˆîûÕ4¦n]1½+yY´uÃÜ~[I[ÜyÕìt·L÷Õ×ÌÎh¬ñYlõzæŠÿÛ–]Ï‚W:]³}ûЖau"ÛÆ=ó©KÀTôÙùÇ9fŽ¡÷Ñ'…üs‘;f}sÿS%—ìßÝ릯ϑ¼gõå³÷e½ÚžÏÚעτöP/‰ÿᔬ\„]+^ðóÎ+áz7Í]Mx仳ø›Qï-sີ\Ê*ÖNœ³1ÖÏœØ×ß¾—u‹õ­‚P9óŸïú Jaɬsb, uã¤^4»û³ë½´PWÕRí…Z¬þÇ»UhN3éV÷³þ{y×ð¼õÞí·þ¾šeÍO>2ƒÞ¤IÉ^²Ÿ÷$’ø¤dB“’¥Ø+¡N „R ª'n¢²;£ðÓÇwÌ+·6ÛC“k© ÔK2¿`ÙŠùöõñì–#í —Íõ«N¨»V®ÏZßüã]ÓÛ¹eîü?Íeµ0ön˜wî~+oµ{Ùì¨E®Û3;ƒƒQWr¨Ž& µØxA0©Uýµ·ÌÛùï`§Ýʪ•ÛÞ Z¾ÏbîVõYŒµ°gÝвaþ±0¼Tk¬×ðlÙ,EwÇ ö³ß¥i=çÇ|ùÏÉ»¹IÊý| 5X6Kè;¦B5¤Hª÷/˜F°¼¤+gÃFìÍÁµÔNê%ñ?œ¦ ŒÓôó­ uŠÝv!mRéÝ¡N „R ‚ªàZj'õ’ Ôí¢éçûÍ7ßt0)_7uZ Ô"HT×R;A¨—¡nM?ß«±°�óð{¿÷{ÉÎjP§B )‚AUp-µ„zIêvц󭮻÷îÝËÿ0]+©v÷uZ Ô"HT×R;A¨—¡nm8ß$²ÔP]+~øaþ¿ô@¨Ó¡†©‡ËpÑéõÍ𠛸ҭpQxþ‚[5æ/Î-!yöœýáyü²…¥'‡æn¿g:î}šPó¶Ü|¯°ÄdÀØ„žy“lŽï«ŸÐóØÞÝË&ä´wzß0ï æN¸$Xâh¿¡} ÔKâ8u;hËùÖšÂÃá0ÿ@]#)¬]> „:-jH‘ÕI–Q¼enõ†*ȤZ+X8Å­ý¬eŸºW„KHŠÓÃo™] õÎn¹Öðùâ2S§‡·Ìvïªé—_=ýÔ­8Óé½aîe«Ôœjkv›S]7\ròØ<Ô²°Á¾/9ùÌ<ÖÙáʧGæþÞŽÙ«ìø­„º ÔKRwÁеfžÝ0 ­¡ùÚ¿Žh+æ”…ú{o›N|n`†çZ]ƒå„ĨÐ(<>"X>!¿gësÛmuo˜ý¼�k1 oê%ÑûDÓ…Zãaõ]Ó{jŽ÷wÏÖf_ ±L@q‰+ÿx°_S[ðÍáp×tísa¥dŒ™×y:¤uL¡N „RD÷²•àDô¥\(«  ÔÂËn^êã˜ÁûòÏ||øK'©cÏ[a}ðÀ/Ëø…9¼bØúÝU38üÂ=:*ƒ‹’]Š@¨ÛòñòÀúÍ„B}¼ov:—ÌÎþçù“õde×$ B½$þ‡SkÁÒ Íß\óõqÏnÖ¹$‡2m‰·b굯f­¤ášººÙ¿rËü»w&=÷–½¹fŸ“}®_ƒ×¯É«›üÓÙšÇÏUp\>Ãu‚Él?5ϵFð–ß/ÝÌ·²÷ŽvÓ~þ¥ùeZ4â|—ä{ßûžû›ßü&d“¨ñâ…ZL»&…®­Kgû4£ÿôp`.w^6ÃÇ'®~ë\—º×y"èšPWo]#©ƒP§B )² zêÊ-mÛ5¼¾sÏìïªÁ4op|dK¶gæèþ£.ÎYH0?/_FD„:/;|’`<Qr¾!zL¨CTºvËÖÇ´½«æòÀg®?7û;—ÎÕË‘ÕÁܾtz¦ûûãëD„úYÞpî³ÕõEßÚB½$þ‡Ó¡v`oâg7Ò˜POnÅ<ùøã ƒçåÃþÚNzî#ûx(/¾€¹’mÛÉòåüõÙëŠã{œ¬Œ ÝÀ»¹ŒØ¿·¯šÞÕn^xYêÒ¼þúë‰téÝ´P®IG(Ô³Zð³ Ϩ¤ßܹ.u³¯óL«¡E×F@¨Ó¡†Y™Õw<yyáêU’î—²:—+^˜ÑZR¨}îñ·ÍžËPŸ1I¨•(¹–×ý\j”I>/ÔãÒ>M‚UN¾húûwM¿›%=ÆJÈiBíŽÝä†TYÙµIƒP/É<‚åo@ÞusÝuMV¶ê™•Ø»fWÿ×M£³mEõ±»a^¸`o¬7³É:½oš»ÃWòÌCµðùî3£÷…5‘ì¦›ÝˆÂˆÜ”Ü -{^“[ÜÞ?ÌÄÓꉭ˜ÑB$'ú\þ9n?.š^ÿm³˜÷ú3‘qDZÐRêÝüCù²7ókß0OïÛ›¹º]år„º‘§Q·g{-ŒºëŸÓó¿]'ùØ,];;7Ìàà8Ï(g¿·ÝÁƒ òQö·1åšt„B=«_Ÿyùì·â®éB%¤ÄužºRžÕ»B5¤ˆîó+¡Pß9=:0w;®.çË‹°L›8hDV~ õ´.ßâÏçRîÊ;¾<ÊŸËë¬#F2<ჹP«L>Ø3Ý)ÛpoËÚqéËÙz°²k ’¡^ÿÃ)'XÙ0â_Ú x·p“P¥<ÌÝ„;¦Û¿oNܸ’¼{û[7çã¬5¯»gNþÎÝìÎf醶õšÙÿ r³‹õäVÌ€B!2Fô¹ìs¶ú8ë¢=’°e÷ŒqùŽ£êçšÄ~?/É5B]šõJuÖHã®{WIx!?gB}Fá÷rQß/òzý×Òzô‘y0µ‚2‰)פcºP»krT1ùg¦× ~ïîwêé×ù&Ñuðµ¯}-¡a�å@¨Ó¡†Y™…õ5ì¿hv÷gs¼¸û»ÊŽ+ñºR”‚P—˜”¬HôyíÛ¶%ùÿó̹+‹õ_·ï[&í™»yÃr&Àe…Z[ɺÀ’BbLÊó.òê~7O츬½­ÿŽ•ýiƒP·„zIêìF Â3stðm3p7Å<KÞ„£?ÍDwTa·1vƒÌ>kìy2Ôî½ùÍnLŠB=­3 Üç"Ñç¼¼ØcãnÜA× e»|;¡ÖãÙ ’[W{æêÅÉ…Í4ô}E›„Zx©^½L…ç.dÆïÅ^ |ßÜL¿ÿ–98úœ||`öïÍ ¿gnåKŠd”ýmL¹&¡PÏjÁ?qÏ*Az¼F]¾×wþ«¡N „RÄ—í•“g]Ùðè0ûûÂe³Ó¿nºN‚™Íl”EY,,_<ñ²kò²Yçe7ú¼«“éÿAèÊ®üuyýOÙõáhÒM…ýƒýñ1Ñ!£í*²:ß©æ¸/î#ß—Ó#s0ì»ÞeÙãÓÝz‡¥öÚB½$þ‡³¸Pÿ4Ïœªkë“3i¥3ú·ÏP3X/ÊH¨íß¹8ŒÆçû‘PÏjÅô„û\$ú\ /¶XȺùî¼AÖÒMš6iR2ué~’uõ '% µÅnÅÖÙ’Ìw¾›…DJYjMFµº™31kÁvÌø½Œ¯£œðúž‹iפ(Txf´à»¿]’§®{z|R²×ùйÖ9¯Ë˜é"uZ Ô"“ ÓÇf÷Æ™øªŽâ&jÍþ õ¡n'õ’Ì#Xg-ƒ¶Þó3?vÍk·Y‹]÷ºé+ëÖý¿ÚÿùóAl]1½+ùl‰„gÁê [¦»ýöÜ7á±ÖJ'ù:€þ±0®ô¬˜èïé­˜™0ç³~ÑçÆ[]ÀxñÕcÚ¯§ÙìããË … ~fûz¿†aøYP¹ñJ/Z±A¨BkÿÞïýÞêfxÎgš×±î\}Ùôï|l¯Iß#ö{ɺñï]ósäóì]7;וÅ·Kä›/ÇŒkr,ήñé-ø~œw8N.¼†õߨu¾9tŽõ=ê0›÷$ê´@¨!EtŸÛáœ!®l8k­j\Îë¦a,Ô]ôÝ¡} ÔKâ8m¬6ÁùÎ8<<tYK©­[`˜Í“'OÜìî«í°ê´@¨!E ¨ ®¥v‚P/ ‚Õ.8ßgø.à+ÍVÃÚѹÔ9}óÍ7ÑX‚P§B )‚AUp-µ„zI¬vÁù>ÏVkÂ*ý õ¤©ç¡N „R ‚ªàZj'õ’ Xí‚ó=?¶ZÝÀÕeêäYÝ»›ÚÓ�¡N „Rd}”/‰Xœ_¦rÆçÉ"˜›#:ŸÍ±9îº5²ãëaŸš“áÙqs•äsÕäÏÀë»– %ê%ñ?«p¾§£.Â^¬Õ¼îão›L(Ò:gM P§B )²^ ’ìW¨X…•*ÜÄ­á +ã+U¸•(ÜÒ'٣ŕ(Üj*Ùò‘ϵüÕh5A¨Û B½$K Öñ¾Ùьţuž×ÀXËdAkãäu ýZ»…›h8Ó÷XØ÷þðí‰Ï½=|5øœ,Æ[EK´†ŽfÈ,ÌŠ<¶–¡Ö1ü¦ìKS,ˆöQ ÔÓ ÅZÒFWðtøðÃ[!Ò„:-jH_¶¯‡Mõ3stÿ ['ºb‡_äχBÕïF+N¨^W¨ë9áÍÜ­÷v“XÚ15Ö{-A* ÔKR…`9]§P;t3|1o©Ì—ó —8p’Ê´E­“Û=Óë¾0~=ºcvÜ:Ôá@Z~kÏÜúwoM~N7õpà|É Ñ }fkh¾fñöÐ<~®%üº½ZûEs¡»k†£å'ô_Ë>s êùðb}ùòeÓétÌÞÞ^ã.EtÌÕ[c¤ú»-ç¡N „RdutÖZË(îî?VªàL¨Ý:Ô~Ù,¿Ä£_bÑþ熨žæ—Tì\5;»·l)“åéɘü5~Ûý·ÍþØ’\¡PkŸ.›Ëƒ‡YâÂ%^Æë€®®zy/Ϻ®Fú±ºk R¡^’*kãB}š¯g=ºQZ"B}zxË\<°7ú«g7]qò©9Œ¬©{zô‘ypx8ù9=õéÑ=³goî~Û3[Cp_β‚£³³o~¥÷]¸´’–Ó*ÎwÛ¸wïžË†J¦•Õ1TwpeJaµèkL»Ž¹þmã1G¨Ó¡†Y•¹zLwÏœ|áºQw\]/&£ùØj=/™½¨ÂæèÁG®çê‰ÕÛÖ×<(;vÙg¨ß3ØÏsɇ±7…:Ø'×{2"Ô£ºêçf§‹PGXÕµiƒP/É|‚taV7äÝ»£ev“zfŽöoä-™êþ|Ë<<yž{Ñÿ¯›]+´ÏϵTæ›·¸måï‹s®i¾§gú·¿oO‚;í9¡V6ø×UÈ¡|—æq&<ç>'ÛÇN¯onïÚWf¸ï2­5Ôµ žu_ÊŽã;æ¡›ð£]¯í§@¨Ë¡¥—$Óa—oMX¦¬µ2¥z¹®K¿œ™fìV6ºÍ“Ä!ÔiPCŠø²½ZÎúÇ/ëñúÌéѹ3ØÉê~®®vl>>ø¾¹;˜~ÿ-s äÃÉ'æ`ÿ=3ì™þ­ûgÃÛ¦â…ÚÖ»Nî›~7ëñwöÖP¨éò]«¹– uê%™K°\Fõ%Ó?xjNÕ…9oýoõ˵ªûòwÓòY]½~þ–Ê"º¾húûw#7YKQ¨µï×nerë¾ÇÕ`ŽgA¡ÞzÍì°gºn2 ?~Ú ò”Öб.I¾u÷móC×Å ¡Þ$êN¬l´„nšÌiÒ2IwQ®é^+õPÚK´Ž)Âe ÔiPCЬJ‚œ„v¶Í`ì„ډ+ø³suÁ@ˆóGFu·ÑÄbÓßjNTÏ ÷%ê|_]6ý©ërŸ”LuØ'Y¢‡IÉ¢ Ôí¡^’¹+Òâ'ÆÄQ“iݹ™g±%…ÏÌÉÇfÿîÐ ú{æÖè)-•n[vŸ´_cQöÑMù8¿ÉŽËlQ¨Ývl›ñnߎE…Z-žÙ¸ç°KÒÌÖPº|'‰DN‚,9žGŒõ>eS}·p‰¡2ÙLh6ŽŽ©$Í:F:V:fmÏDO¡N „RÄ—íÕãÇCÛzSç%³Ý¿cî¿ãÇ5wMÿþGf¸}Ñþ}Ùìô¯›î[/ûà=³wíº¹î&dÍøùÁæÚÎËù’Vê½øÌÕy&¡Îê\Ùç\Èê^§škFŸåëq>ΖÍòûz6AlXwó3…Û÷°lÖDtL¡} ÔKâ8å3Ô—òI'Î8jIåKYWðgç'„8“ÏüÿsµT ߛˬ»Iç·Ç1¡Öó;AF:oét-™áít¡¶ç]’FÇgfk¨º(]5]MzæºÁç“’ùB£»“5@è¥'‡æîÞæNØh°�sïâÇKKî–a’4êÿz¼Mâ¨ïªã Ÿ…Ö±€é ÔiPCŠ AP\Kí¡^’ù+hÝ»pÑ\Ýî›;÷ß!Þêß3ŸjÒ ·ÌÓ«f§»eeñ®Ùß»nv®çKCYÙ|z®¥rÎ6±e³²5 ³.èþ±0þ™éõ.eZB%ãùøë‘t·†Ž·šÆŸ˦;©ÖìßúþzLûum uïIx>ž\Ç&\6KÝïåÛ²16ã÷âh[¡>·»ŠŒ²le¬%Öú…þÖcÎ&tqÖ±Ów™ô=õü<Y@¨S¡†ñe;À²p-µ„zI¬vÁù>OSÅ:3Çú¬P²ÕÍ\çGÿêÿÊàz MEDµÚ¿ßÚÇpßu 5Zϵ-¿*ê´@¨!E ¨ ®¥v‚P/ ‚Õ.8ßã(+¬ ê¼ã¥W‰öIÒ «BçNá3¾ /¯axŸ7ŠÛѶýçè3ýçûÇüëôÞ&d×S¡N „RÄ—í�˵ÔNê%ñ?«p¾ÏP×dý['”õõì»Wû|Þ·£P†Ù™æÍP§B )‚AUp-µ„zI¬vÁùÎðã¥É¬Bê ÔiPCŠ AP\Kí¡^«]´ý|‡ã¥Séâ 0 „:-jH•íQU@û@¨—ÄÿpêvÐæóŽ—¨ uZ ÔÐT|ƒóºÊH?Ô¨ è˜.»ç¢hø–ê>$`õ’ Ôí¢­ç»®ã¥ê´@¨¡‰¬[¦57G›$OußMÑ¦Æ X „zI$D»B´E¨UX3^ê B54MôÞj›à©.¢úצ4±¨>Ÿ FauE¡nm8ß*8/ u¡N „šÄ&dºmÙi–¢Üd/95`¨! B],¢]Ñd|½ÎJÀ*@¨Ó¡†¦àezÝc{ÛÚýXÇYR½)Ô€¡ó­1Õ�Ej�C…– ÆKC ìI „š€—éu—“jìþÊW¾ÒÊ^cê5§c¾It¾Ûzüa:5�8T@(#­Â‚ñÒÐ({Ò¡†º³)™ÊN·¹±[CÐ6!f‚2ˆPÀh¼´ Z^¡IPö¤B uƇڄÔJ$ÕàÝfÞ|óÍESƒ ”A„ åø ‚ *€¦AÙ“5ÔI´DjSbÉt›³ÓB2›B£‚êK›Ï éP´ÆKCÓ¡ìI „êȦeZŸÛöì´Gu–MKó”)! j€Âxih ”=iPCÝÌnZâÈNŸ¡ºK c˜i䀄 e¨RÀxih ”=iPCHA¦·q4–\u˜Ð~0A„ E¨ Rå€ñÒÐ({Ò¡†º‚L ²ÓçIeR0? ”B ÐÔŠª?3´ Êž´@¨¡øòrÓ2­ò:•llJhB°Tê2ê‚Îe€P4uëÖÍ^…ò¦+�놲'-jH R 2-”fâ«óH¦S‘X&(P4U$Ò*x/ m„²'-jH™”&ëÔ*šëΣ.ÖêöJ½F犞í¡®�}·ÏìoZSqð$û>Šý_œýMëŒoÿä׿{›wþ¿O¢Ïí‹=ÍîQ?9Éî[¿ùûü&Ö`ê´˜UéÐó�›@2-)JAÒÈzÎFçJó¤‚öGb ídVÙV–ÖõoO³ï¢ŠéŸ[YŽ}‚ ˆºÄŸ>6æƒÏ3Én¢`#ÔiPCФ$ÓBc¸ÉNOGòªó– ~‚2z¶„º$Ê@+óÛw‚ ˆ¦Äwš%×uZ Ô©É4Ùér¨[¾ŽSJhx]J’롞‚²Ñ:@ª`Æö™ ¢©1üYÖ çѯóbMA¨Ó¡†T¸* œ’L ²ÓåIe¼»Gc»i i'u/Òê ÛW‚ ˆ¦Çw~~ö·ÄZ÷ð:‚P§B ) –H§&Ód§çãÍ7ßt‘jÑuí¡.€HAdêâcºO×M¬ê´@¨aÓx™Nqõ ²Óó¡IÉR”WeÎSY'ÖBsü[&#‚(š”Q=yê�B5l/Ó)ŽsõÙ锺0×3uµN &(kµeÖA ‚hSüYÐÝ{Rhn 5D¦B5lŠ”eZ(;Í„Vó£ž).W¥ýJ­;:¬ŽV µ2,Z.&¶?ó„2ÛÚLÍ®ïêã…ÿIJñïþóÏÿøÿf¾{ï ú<AL M2¦ ³îY“†·¼[B¨zê“–é;ÇöÝB½^jة˴2¬.\H.ÓZÔµ:ÅnòþœÒã ´V¨%ÓËtñnòº­.jíd¨e™µ$à2«¤,ÕuZ Ô°nüòJ)gµod§C%×»W3&¾=´R¨•é¦­Ï õA…_ÞƒlXêaóþ6~ÿ›’òA¨Ó¡†uR™&;½<ª¥8 ˜ênLPÖZ'Ô‹È´Dºîk±B}Q…@7dURl…æ¡û¤9v?œ)J5B5¬ /Ó)ޝ !;½<:Ç©CÍDÎeͧUB­Ìò¼Ý)Üa“¨U³h&ºgêÞ»7NŠÔ¤¡N „Ö—éÔ3ƒd§«AÇOç;U”AW÷oh.­êy3Ózmf°…æ¢ÖVŒ—†M£¡.ó¬Ï¯IÏR¡N „VM]dZ®õäS68Eh8i>­êyº/¦T„ö¡nA+ÍxiH‰y×ê×xì@¨Ó¡†Uâ×ÿ­ƒLû¬*å|5hÒÖ”—©b‚²fÓ ¡– Ç>3Œ•†MR‡ T ½ÌÓÓGízù ÔiPêD+ X™*çé\jLQ–:U”,Qý.Õ,:,Gã…zÖç†LÃ&©[e�ÚKÙ?’ïMƒP§B « nå§o<g¢ªjÑ1Õ±M]Ÿ’~Î{óh´Pÿæ¹1ß)9 2 ›Ä—N¹ �)+Õ›$„:-j¨IJÝÊO&©Z ªK¥>‰+ç¾™4Z¨ÕÕ»ÌD:È4lŠp¼4-–P7ÊJõ&»~#ÔiPC•ÔQ¦ý8oÊüêQwjÕ§RÆ÷N`ì|³h¬P?ïÝŸÿßÁ¦ð7UÆKC]јê2–|ž¿a ÔiPCUÔQ¦ÊÕ¡F uýO½±B“§}ík_ËÿM ±B­í?ãßÚ{îІÿÿ&+yÐnT`¼44eŸÃûì¤P° ê´@¨¡ $¤u”i²Ó«G¢šzÝJç_×Ë¢6‡F õ¬Ïz÷q–UQv`è&Êxih³ ŦÄ¡N „–¥Îe(ÙéÕ£1ÔuÈþJúSž•棑B­mÅ>#ŒO7 kFãe/ M¥ÌrZ›˜¯¡N „–A2- ©£L“^ªk©`P}–fÐ8¡.Óý ¬_jÜ @™uWlb˜ B5,ŠdºÎ ÒÊN3Ìk=è:©ÃzϾnÈeõ§qB]fÖYí ÀºP÷#Ý0)H¡é”¹ÿþæïó¯ „:-jX„ºË´Ä‰î½ëCY_]3u@ûY—}…É4N¨gÍ8« À:ðã¥ëÚ= `^$˱ûn?9É_¼&ê´@¨a^ê.ÓBõ�Õׇê\uiÀÐu­¤ ”Õ›F õgö^Ûv›\Úƒ/­.^u®�Ìˬ,õwò® „:-j(‹ÊN•¡u—i&ŸÚ uJf¨'£®s¨/j­)Û¶Mš°j/ m¦LÃæ:»}#ÔiPC$ÐŒºË´ ;½Ô³¡N~éZ—XC=i”P+óÛ¶uw5„öÁxi€ÙCoÖ9Û7B5ÌÂË´–>ª»L“Þš”¬NY_ŸŒ©û5ßV#ÔeÆî±î4¬ Ý�/ 1«Û÷:ç²@¨Ó¡†ix™nÊ$Md§7‹–ÏªÓ ÚjDjʵß6#Ô³¶OwoXhU�/ 1ë~¼ÎqÔuZ Ô0‰¦É4ÙéÍ#A­S7jÉ?”Õ“Æ5…4lu)b¼4Àyb÷á0ÖB”Õ£i2-$ÓuX ¹É¨QCR]'4î[ ¨j½?¶]ŒŸ†ªÑMO2M pž÷>³¿‘ŸeÙèïü<û÷N0¶ZeÂ:@¨Ó¡†"ê奲´I2-‘CŠ6jÔí»n½*P?#ÔêÒÛ®uÎ* ÍF7fµxª5ñÒ�qf£^W#'B5„4Q¦UG Ûn:¨®V·Ä”ÕÆul›a�T/Ý„ÙGVɬÂEË®„:-jðx™nÚRAtÙM ]_ul°Q=“á„õ¡BÍ„d0/±Ì³/]§u 6E*"‹P§B ÂËtÓºµ’N­Õ MP¦îê±ú(¤G+„š ̃Ÿ™3Ì@3^`>jˆPCSeZNÕéêØÈÁõTj€ºñªUP71I5ã¥æ¡†u»ñcC›(Ód§ÓE]§ëØ}Z×”Õ„ @¡dÚÇ—¾ô%ÆK,�B 1êö")P¹ÚT9 ›˜.ªÛILëˆzF{MBz Ô�* C¡VÐÍ`~jˆP·“¦Ë4ÙéôÑùѸä:¢º)ó÷¤ B +E7/0>4Û¢n ËF¸Íªºbk;E™Vè&Lwo€ù@¨!BÝ>$ÑM/GU/iÒÒ_MDç§®3Êû ÊêÚ ÐjXŽ¡$«k´ZÑ4Þ8”Q=æCcXB1^4Âmú1Ï ýí÷¯-+ݺÙúíCß �ʃPC „º]´A¦}vÙI]‹ªÖ_÷…4A¨a&*ÕíÙÿ˜½0{y•ˆê9ݬªÌ/‚ψûý•Àk½tû}÷׿Ï˳oÐk´ I€ùA¨!BÝÚ ÓBu ²Ó飆Õñê:Ù7Ü0 1MjCò¨BЋè4 ­#a〟½[ßñþàÌýÑ™·Þz«ñ…?À:@¨!BÝTƶA¦}c< ïõ@uYÕcëŠö]uòº6 4„ºå¨P—mÉ¥~¤avVâÜ–­¾kñ8èo=†`ÌB 1êæ£lmdZ®¾žWg|Ò¡n!ÊЪ�@'ã3õÅã¤Çh˜ B 1êfãËÌ6Ô'ÈN×+ÕçêŒ~[ú\wiP·�  DPB¨›¿º9«u .n\¾eÓCýŸZ]95Çû»¦saËô†ö&±,Çûf§sÁ\è ÍQþP5<2ÃÞWÍð‡o›ž½îªßþê@¨!BÝ\$Ó*ÛÒè¬ï«€z¡k´îã5,³î™ö¦P7Ý0Àê‰5P¹®#'æ ÿb5Bmy~Ð7[e…÷ä¾ùÆàyîþóÔ|ã[æ ûÏDæÚ¾ûŒõƒPC „º™´M¦U—";]O$£Š:£ß™²ÔužÓ¨i Ô C7wÝ(ôCC¢WOQ®U©àW6%ÔÏÌãáËæbÿÀÉîéã¡Ù¾Ø¯X¨Ç?c Ô¡nm“i¡ïÌ8Öz¢Þ™–PwT÷lÂ÷h uCP6ZH¤u£§;÷úQÃ… XÝàd­S'êSsr84;ÝŽkéôÞ0÷žÙÇÍáp×tíc.\6»ûÍó£»f7݅ζäÞÓÇf÷röÚ Moð׿³ƒ½|{6º`z~[>¶n˜Ûo¿l÷á4ÿª·e»f†Gϳíw_6;½‹ö1më#sr4̺‚oY!”ÿÝ{džŸa÷éñÑ=³çÞ§ïvË<<9Íwpu Ô¡n*ßTïh›L«¬W]‹ò½¾èü5¡ž¬ß ;i€P×ßB¥P6š|è¼øÝì8/)õéC3¸|Él?5§§ŸšáöEÓÙÙ7¿:˜ËÝ=spò…ËøvÆ„ùs³¿Óe¸§gó1Ûîy}n×låÙc÷> ±ýû»Ó3{÷ì;,N˜C¡Ö¾<7'N˜ƒÇÝûŸÛ—_ËÇY‡Ÿ¡ý|Átû÷͉ûž/˜ýϵõ•‚PC „º¨LSe¾m2-˜e¹þ4¥‡zDªžIOÔ̓P×”P¤õ7¤‰nvˆuªBíÄõŠ~aÏåwëU3|ûšëñ:þ3stðm3ØQæùlR³IB}zt`î v²Œq¡Îÿv…Úoÿùéoeû;[¨5±™2ÝyÆÚ†ÿìU‚PC „ºþx™ÖP§¶•i^`(ËëzuênjPÀfA¨k†næˆtýÅZ= ¡v™Û­,‹«IÂì㣠uЭ[²í²ÃÝfÿèÉÙû-Q¡>¹oúÝ]Wñg£ç—ê<[~´Ãîƒþ>Íïìšýãl&f¨wÕ÷ôPC „ºÞx™nkžìt3Ðu¬Æå&dvõ]T·T=6B]ô£÷B†H×ÝðTQƒ7¿M’gs]ƶkúÇÇP?l›Ž^×yÉl÷¿k=šm-‘Õ½núÊRKlßÉÆ/ÛËþæÝÇ5þz§Ýt/¼h?ë—Y÷ñ ]óçš”Ìn¯sµg®þÂm™eIö³`<vw× sópÒn÷»sÕì\×ósyð׿QøÁê ®Ù¾}˜u)_!5Ä@¨ëKÛeZe6Ùéæ M©O+QÓ”Œ{]A¨k€~(º‰könnäÍ€s M¡†u=i»L ²ÓÍB2-©n ú}Òrs Ô ã³Òú‘Ílþü’­†&‚PC „º~h6d5�·Y¦ÉN7ÕÁÔk«)pn„:Q4aÂbÌñ ˆ²®£ÙxʳÿCJøl5-ßÐ$jˆP× d:Cßdÿš‡Vªo7eÜÛþ[Ýu‚H¬T€-ú#?ÕDJêÑIšHé-38xêþé¡J‹nìM5Õ7ðéGU Ô¡®^¦Û.’Êü©'4Õ·›$ Êºë7K¯ÇõƒP'†~غq/³à¼›õ×VŒ³l´dú›fgð‘9ÉŸ‡4‘Hû.þM“ê*E VB «¡®^¦™5Ëbrš‰¿Î›„ T—„õ‚P'„dº ™ …úÙã;fwOKeœ†³ýº¸deûÙ Å—_5ƒ×^´ÿÌáé±9¼»gzšÍøÂEÓ“»µoõ-ãsdöw.å¯Õ²<öo» 7S±Þã–ñYã= ¢ªë %¼¨Ý¸qƒH8tžüßË‚PC „:}é3t ÈN7›e“X)¢ïÄïw½ Ô‰P¥D„zç s³ÿ¶yxâÅ6ßÎËføøãl¬µëž=Þé^37]·ðgù²>ZâçQ6þÚ­›¿_ý\ëövÎÆd»õr3ñ~ê>_K‘_”¦Iu(Ô.Už'„b Ôiã'6¢2ž˜4ÍU¤hLP¶~êP÷Œ*åÉ õ…î ³ïÖÒõäBÜ»möL×¾¦³³oŽO39vëeÇûf§Ó1Ýþ}s>—ÿ½Õ¿g>uÂ}Éììnßpjß²k:.+ý<ø› õ2Hª›Òm¡®5¬„:]$Žº :d§›æ+R¼ihNž¦5¤ B½aülÞÕu7ÉåÖe—‹“…ݸ­L÷Þ0÷­pg“˜y9¶¸ló–é ?2Û£me¯»hz¯½fv.«‹·º~+?}–¹~øø®Ùíne2žm D ,ºÉ7ᆈPׄV B&ÈôyÈN·ÕÃ5¡W“ðË‚5­;{ª ÔD¤qµSö?·>|Ýl?µj]Àež%ÓÓݹi†û‡Vz¿0‡ƒ+ãcžO?5Ãí|œuwÇÜ:8²Ûò¢n…zï®Ù¿©÷tMïæA>¶ú¢¹Ú{É>o·½{בœ®„¦Ì؈PׄV B’ÆjöëÙév¡lng³g‚²õPouéÕx-œ>6û»/¹¬óáþÐ v.ÛʳÏ0/G–¹®f[pÝäë^°#Ôõ�¡†UƒP§2‡ìt»Ð¹^[}|(qǵ¼ê ¡ÂK…ØÚ& 8=2÷÷z¦£¬³‹ËfgøpÉnÙʆ_Ë·—ÇΟjQ £Zë B]jX5u: Óqt\Èêµ ÕÅUþ­­N¾FÔ VRÝÄï–õ†PvºÎ‚ëÅÏØXWêz€PêA¨Ó@õdú<>£W÷aV0?𳦩™Üº'eê�B½üD´Á<ÔùfPׄV B½yÔ LÇaÌi{Ñð:ý6šˆ÷ަM¼–õhòV‡d:Õ1>jÍŸv£F¨ëB «¡Þ,ª{(‹LŸGI54n'~ئBcÑjA¨7€¤¨©ÝJ`u¨°÷“ºQkßTY‹‰5B]jX5õæÐýY=èá€&w÷÷ FÕ®,„z肦Ûņ &iëôn™‡'±u¾™aï«IÍ^®ÊPŠ7{/Ô>Tq +mu=@¨aÕ Ô›™žŽ— ²ÓíæÍ7ßtÑT”Ì+NP†TB½|¥6‡[êëòÀ<|44Û+fpøEþLÚ¨õü/ÿò/]¡¿É(v, µB•=®·¿æÇEM [£×oõÌssbúÝàÿã¯c&ùÕ?O‹PC „zý Ó³!; Bõ g“Ñuîëfº7pÝWB½fôcUÁ›$_î«74Gù#uA7Áý¯ÿµ»n2Tàxžâ EQÔ²5ÌíëFçâÔœ¼eOÝÿF Mï–é íVƤó´5Ä@¨W‡¯${ô·î×ÈôttlÈNƒG×B“çÐwûÿà˜ßýÝßÕÓ`yê5£¶ ¸•ðüÀô·ì£sÕì\¿l$ÍöðSszúØìïêÿúá\4½ÁGæÄ¿v뺹ùÍmÓÑã7¿m†îuùkÌ3stÿ ÓëïË?J<?è›­üÇ8¡¨®yŸÆ±rv84;ÝŽûœNï sÿèÙø~oõÍA´G·ÏŠ^3ÃG”Û¯ý¦›o×w#?=ºgöz³Ïr!)üñßaU˜©¡}:ûŽYHºýXý_EÍŸ‹,-™þ¦Ù9w<NÍñþ®=î3zœ|dÛ¯šýãX÷}(äó´5Ä@¨Wƒ¤P¿_/Ï ýLÏFåWª~ÂúQÖV“7ŸÔóõ4°<õšYõ,‚NP:Ûfðði&!cYØ\LòÇ2™yÑôžd‡ï“h>Ù7;=ÿ4Ë$vv’•íÓéC3¸|)øOÍpûbÞe¸d†ÚeE­P=Ÿ½_¡”kõ¾gV÷L÷òÀž~aW²ÏwÏ/v\5¶'Å}(Ôéâ¤{þ†=M¨Ÿ=¾cv÷î2}lÔ€‘ßôÝq´§u¬‘¢c.þÚ<>øVÞp’e±Ï¿æ¡½Ò`“ÎÓ" Ô¡^ ºçf÷» fooÏUš%‰Èôtt|T'c)xô[Òï§iÄ>`yê °Ê‹× J.xîï\OÌÁN–A å5|mñïGÊðG×µx¦;îucÏçQÕsÛ^á>á„Øg5sqwÛ[P¨§í—ýÛ~!spçf.vÙûL˜‰ïôÌÞý#û²9¾CõnH±[šnÔ1‘öè{ЉB½ó†¹Ù;˜î™y<|ÙÊ´þÚõpyÃÈ…îž¹pÓ\öç×Ó\œ'½f2é<-B 1êÕà‡ÖøøçÿüŸçÏÀ4ÔH­Œ$€G,ú 5­1JßG×{xŸðÁp‡åA¨7€Z¾Vuñž“=IãÉ}Óï¾hv÷›gþ±Øk‹»lðe÷¾e²{Û'—¡Þ2ݾ²žOÍAÿÅå2ÔÓöë¹¶ÿ’éîÞ5GÏÔu=ËPKâ/Ž&×ÊqêÅŽkª-é³öI7l1I¨/to˜}{¼F¸c”MBöô±&Ž»dvö™5Š\þvYë°KøßMxM¾]˜Ê¤ó´5Ä@¨«Ç @1Åé¨ÜÒq"; Eš¼¼­ü£8B½<õXÙø ?Ùþ8¶z=s%ÿ¡l½ö–y[» —ÍNÿºé*ë÷Á{£×†1ö¾þ=óh4Ö×ÊM÷«æö¼™¾îS‰1Ô¥z|êX÷ëS—Qí˜îΫö33‘?v2¼¯ó²>> ÆP—?®šHB7Á:¢ï)ÆEÍ‹pÖý=$›¬lËôwÌÀuÝV…-4ø5sûà»fמ׬äs³¿s)ïîg /¾Ê?O‹PC „ºzÂîÞÅhêXÐ*P]ŒFˆ¡ßMÓÇÕ‡]ÀêåA¨7€&jjâø (¢‰Ê^3;£™©ÕyÏÜZ°ûq×GÔ [Œ‹šz \ÏÆ¸çŒÈ3Ôº/› u§kz7¾ÑâúuÓëØ{»fpÿ?šÁåŽ}mÏìdÅ^Sœ5¢ÄÏÓb Ô¡®žØ$CzLRÐäÙŠ—ì4LC×Å*ç;JÝ4”Pr ËPoeiªˆsc’³8[Çx ˼w&Çæp¸;šù[c¨ûwKÏèâ'N©kåHß_T!j°:ª<O5Äh«PKnUi­:ü˜Èßùßq­¬ÚŸüÉŸD_›blJhÉNÃ,ô{ò+•Ô?nZÒ<-þðÿ0úx“£ê.ýõ†PA¢ P†º_/u=@¨aÕ´M¨U¡Õ½[•óP$« U–oÞ¼}.õØTbì4”A¿­:7º(£ûŽî?úg¡óª{P• ÔÂgub¦Ñ„k¡®5¬š6 µ²[ºw«ò¦û8Œã+úëF磮ç`}ÔyÞõˆÑ½§jil ¾Q¯Jê ¢ÂV?V Z˜†ºðÕ½kB]jX5mj ›*´uï2ºJ6!Ô~l,õ.(ƒêèuj§ëZuƺí÷ºA¨§Û¦”+LºðW;“`>²_y-ø™–ÃqÉMoïž9ÒìSÁÌß4“³›´ël¼±Ÿ{œ`Æn¿žsþL“Ñ&4ºT)j°:ª<O5ÄhºPKØÔÍRA—âélB¨Uß"keYE×àUá3êºÆi0šB=…Ø6}¤\aÒE¯ÀJ—¶p»N¡ÙZÏÙä^V†Þ2½N×ôü”\Z–êR.Óù2Iù’R‡/›­âRGnMéKnFèçZŠjk×ì7[©us”à4¡•±B=ÖГGÐx3¶ÜÚXÕæppž¶pMN˜ðν÷‡oO|îíá«Áçd1ÞÈT¦q©Ø@õ$oäêdk¥ço¿“~«úW Ô°*š,Ôj�Uö“îÄåX·Pë³ÈNÃ<ÔeUÉ¡ÊDƒ@¨§Û¦Ô+L&ÝäW¶ˆüÆ…úY¾îò3- u&$£™µ%"9q½Õ7îzo×ììîžk"+¿&ÖL•¢¶Ztmi]l5ü›‡ƒmÓ]w'É…ß’{¶{¦×}aüš<ºcvú÷ÍIÞcÃÿÜÒiÿî­ÉÏé7¢ÏñŸ{ò‘[‹{ôû(Ѹ4±Êíÿű¥Ê$Õ—òm#Ô°jš(Ô4e²tÏÞĘາn¡ÖçU]‰†æ£r1ÕÞ&º÷躖ô7!ù².ê)Ķ飦Êêä¡î\v7€ Ýf_Y­@¨Oîš]e¶ô|gÛ \í%uËÞ¹aÇyFYÙ­ëfwð «È‹XÏEQØ3¡Îž³Ûí¿möÚR(Ô’ŠËæòàaVÉ4�¸LÚå9t/Ðë_e·›FÓdZè:µêÓ#s¯g:£ëÎêÓÃ[æšý<\=»†ÅɧæÐe•CiÖf?2l%râsz<êÓ£{fÏþVü¶g7.Mi ²o_홫[þ·Ÿý¶jXMjݯÕËL•Z2Ÿó±N¡&; ‹¢.Ô)ÖÇü5ͤ‡óƒPO!¶Mu©0-/RªH_5]e¾N?5Ãí2éŒf¨5¶º{öüEU¸¿0G>2G§ªä_q•ôQn|†ú=ó•ßÎöÐ<™†( u ÈÇûf§êÞйÿûÞ0š(Ó✨ù†™ÎU³s] @yÖôô±ÙßÍ„Ô3øÈœø×n]77¿™7üÜü¶º×å¯õ‚Þ—}’#ìÚ<£kÊ£ër+{Në†ßþ¾9< .ÜsB­ßÜ+®ç…ÝP¾GŒKó8žsŸ“íc§×7·÷ÏÖ/ŸÝ¸¤Ç&4PÙí^³÷‡§{¦ÛÝ3ö»!Ôù a-4I¨Õ½R¿ºY.Æ:…šì4,Šêc«ëh~ü¤‡M«+® „z ±mú¨S…É Õb³:DzU–1¡¶âqðm3pYì³ Á>>ø¾¹;˜~ÿ-spô…9ùøÀìßšAÏÜ:Æhz¹É+ûgQö Ë÷É}Óïf]TÏ\#jº| Ýu,›xƒÔ÷¡¨91t½$žšãý]+Ž¡ÜžŽ=– ±2ÇO²ÇÃ÷éºx¢F=ÿ4ïî|¾t9tmÙíìß\³–¢P«ûõµ[™Üº®ØWƒa ž…zë5³ÿ_×uû¬QË‹©KɨœP볞Ú×¼äßž"Ô°Fš ÔÊ©‚ÍLºË±.¡&; Ë îÞ*S¸~˜ô°ê)Ķé£n&ÿƒ™¿ Y&¦Þ-ó0̪„ú™9q™)u×$EÅÌV8î9ÇUì½ÈÎC¸­ÓìsG]ÌE(Ô¹0»ŒÙS×ý<>)ÙKN¨\wô†MJæ[×ÕZ¿n& u~m…’xzt`î vÜ„Z>ƒ|îµÅ¿et³'ÀË_7ö|c/r¡Ö°w͎ˬû=Bí®Û±mvÆ»};j}G‰ïxÙKÓ»|gBmq½Xºæjï%s1LßA Ô°*ê.Ô^ΘIwyÖ%Ôd§aYT'ßôx~]{&=\„z ±mú¨c…IµŸäd®q>‘*Æ«/›þï›w|V[ ¿ÿéÐl«[l÷ºé+K-‰}zßì]»n®»Yƒ%½ÍÁÞõQWÜb÷ÙÙd’à%ÃUì]å=Û¯ñ8Ë’gã¸ÃCÙð3…Û÷4hÙ,e7ÚÐÚ¨s-f µëÍð¢ÙÝlžùÇb¯-þí2Ô—Ýû–».¼PëŠÏe6l j=¿d¤ó†£¼+õ˵ý;ïá1ú–h\šØ@ µåT“šÙß”ÿüØyZ„bÔY¨US™L7ËjX‡PkûêI�° Ö±XÏÑåYØ`"õbÛôQç “o‘¢5¼yèÇ,©úG"çD-:°Õë™+ö_÷÷ko™·]ÃËe³Ó¿nºêæýÁ{Ñacïëß3Fc¨/˜N÷«æö¹®×3Îe¸½púÏ<‹fz=­ïnÿe¹%ãyãÕHºÇ—Æ3âñç\#ÌIµfÿ~Ù56eûu6ià¹e½¼„G¨Âíž ü3s´üˆPÚ¨£P‡Ý,éâ]ëj} °,~8æºñI]Ç8@u ÔSˆmÓGÝ+LúI¨õcfò“úã[ÌÛT9«RÔ`u Ô°jê&Ôíf©ž*cpëÆ7ž s©’U µDšì4TźçLÐõ«{O’.롞Bl›>šRaò"¦Xu«.TnĪ@èÙ¶s„º Ô°jê"ÔjÈös[,ÕÍòä¾ùF¸ôdÝ›Ô4††ºÜ2ƒ`Ί²¬Z¨UW"; U¡ûÁ:Ö|ºþê@¨§Û¦¦U˜|«ëª #¨uôã_ônc·„º Ô°jê Ôa7Ëåæ¶È†køIÿjÉ,¡vó£hN‡´„šì4TÖV}MéÞ£Ï`˜çjA¨§Û¦&V˜ôCÓÅ IS¡D+lz¨¢àEZÿ6yÒ±Y Ôõ�¡†U“ºP«,õŸgøùºæµÛ³Ý¹jþÕ`7[‰ÀÆhâB?)¨Ö×ßdËÞå¯Ñ î™=?i¨Þóô~6oÃÖ sûí—ícA÷n7bö¾#?¿Ã´µøckøÛÍœŸ™…&ýñÔuûýÜ Ú÷ÎÕž¹š/»wzt×ìjòRmÇM`ú©=./žm÷{Ñ}˜Ä*…ZRB½ªF÷†UÕåX×~} ÔSˆmÓGÓ+L¾%V¡"­Z›EçC…6g¤‹¨uÚTyžjˆ‘ªPë>=µ›¥“Z+‰{÷ÌQ8©~°Î»&þ»¨õÕš,0œÅ_kÆ¿àÖ~?q3õ¿à–»s“FW®È–žŸ¬P+LX‹”@×ðÏW¸<0‡§ù²šÚ?·ÏÚV|Ý~7ãV¶d`¶4`1C¬ïŽËø2…ãû0™U µ¯TîU ¯î=ú-èšm˼:›¡žBl›>ÚRaRwý(U)VFtU-¿pÝýx;uTŽHŸPׄVMŠB]ª›eQ­4ܹiv\Æ6ΓOÌÁþ{f8Ø3ý[÷­x‡B®…ÿblvþˆP篛ôwl kÇgYc/î>û=ŠPˆÇ?7ûÞ^¨Ÿ™£ƒo›–ÜôK^ŽKt&°*¡Ö¹$; «À'LªB׿ïÅHq} ÔSˆmÓGÛ*Lꎢ E…ŠB¢G«Wõè8«¥Ríoˆç8ª´‰é¢–g5Fk“¯ƒÂÒU.‚,”«,úÇ ûå²L,ã“?4¾tVzï_L~îí·ƒÏÉ£˜µ:yh†®"É’9NÍÉá0«àÞ«Jî°ßË—Þºlvß4;;wÎUvõ¹¡†U‘šP«¬Ôu?3ë4&ŽZƒþ%ÓݽkŽž…ÂéñëÙv>C­÷¿ÝPˆÇ™S¨Õ}üÜþÙ=õÜn—¡ž¼n¿Ûfžwn×`ð,_gÿ†Ù?zb¿×‹ç…Ú­™_܇ɬB¨%<*“V¤W÷‹*äW÷ÕiüY?õbÛôÑæ “ +?޹^žP¢uSUFƒ›álÊ‹š7¯¨­¬âšUz­”º5žÃŒ*Ç—ÎíÓéá-³Ý»jºcÝ%íkwÞ0'§c•ÞÓÇwÌ+·¾kÞ™øÜCûɾ®ÏÍבÎ_cLÞ]s{h?×$@VŠ÷?×g8Á¿d¶‡Ÿšç®Ëf¾_®’»eº;Cs¨qžBc=wß2‡…Ú4B «&%¡VÙ¨{ùì21hxs¿I¿6|Çþ®^5;ú}õï›§o˜k;/gcݸê/ò×]Ì~—áxf{Ù~k`^ËÒ²ûO@EÞzµo^-6¸éñYkø«Kwq-ýŽºrŸc¨í¾×í?=2÷÷²¸l µ}ýÞ÷?Í·Õ½nújÜëãOìýHãÆívföa«jÕsV‘õðèº]¶Þ'™+wï™Æš’á|þÿ3˪Cõ¢¯,—¡žBl›>¨0e¨K¸„ZŽÏ¨ê¦ÐæÉ²f¡VÈIÇî9åQ¥M¤/ÔÏòŠæ3U0cB-Á}Å >°{5xí±ùøð—.ëJ³*¨<´½IÏ)—µ¯Ðº±zdùr.ÛÙþŽgÆíK4Öq$àÚV×J÷#'â c$'Qþ<Í¡†) õªº§ƒ&{ÍìŒî]jØ3·ByÞ UUµM€U¢¤ŠêËPЕ¨3…K÷-¸ŒŸ«³¬M¢WB=…Ø6}Pa:ZÅtSPá£J´dÁhŸ…Ö¿úáÑê½8QQuaVÆCÝŸéÁQáp~FYÕ´óÌ­º=ïÜ0ƒƒã<£¬ŒÐu³;VPY¥±(¶ææ]+Ýsv»ý·ÍþaX«µ÷Ú­|¢Ÿ«æò@æqƤ¹@ü9}NÞ%¼Ó3ýÛß?Ë(»n•g’+ÜÜc^ÀGÇñÀìï\š9–Ñ£Ï5¬ „z›ÃáÙläî¾r÷ÐÞÒ Ê㯲[ Þ”Ó°jTGÖµ¶ ëêpé¾Å—ñC¨gƒPƒC…..pºQ(ÔYI0›(Ù*€ý÷ö³»ªÒ¡cà¿7Yèj8/j™ˆf3Þª ó y+ 3Ê^T¶õ sôà£|ÒŸ+®ûóéÑGæ“òyñê÷Ìö³]·ê1;>/Ôêî}-—h—‰ì‹ õ‹¦¿×ô»Y×íÑ&PûqšñtÇ <ÌòqÛõÄ |X/5xª<þ¾þ°T_TqQt½*ÎãÖ/›ë;W³aù²|ñ$CPg †jdÏÿ*Ÿ!oP ÃÖ Î-ãçð=£ /𫽗²:GÐýû‘êöï­7Ì7ÝrÛææÝ·³}íŸïõ§Ï½è–Ò{š¿OIëîµÙŠç&“ ?éc„ñóĸº‘þÕì\Ïöu¬î4ÉÇqjˆ¢ ¶²ÕÊÔ†’­¿õ˜.D„u­Æ�í«2òá÷ÑR+3¯çêð]ꊎµ85ê’\<&Ô‘eÕ¥úàûæîp`úý·ÌÁÑæäã³whý=së ˜ÄËm«|†Úuùvã 2{N¨³ñÌãÛ »ˆg,,Ôʺ«2º|/ B5xª:þd§aݨ.©X”©Bç$1ŸÀÕI¬`ŽÕY‚$èÎôÓ¬¡]óœü+÷³:BVʆ´…ç“$–ñ;#Ëfo¹C^çq óy>÷w^ÇrŸùK×.óìo÷9Ñ%úŽÝûÎ^;)abwà ¼„ú$ûNnò9,òz«O9Ï—tû6„z ±mú ÂT ^Luz1õY]/Û ¡JÈõzÅ*dUûsÿþ}3 \K¡ÿ\e›cû&qÖóz-ò¼^΋Zvƒ>ß*zV8Dg”Hpþˆ»ñNØé„ÛÊ×mµ®Š‚P«€ÛVwïì¿£U0åˆÅ…Z[Ñ6_ ŽOÑׄb½I“’½dßÿ$ëŸOJ–MJ¤É“¾e\_³¿göö¾[ÈÄ#Ô°zjðTuüU®k[�ëBuHÕ1Å×W£ŒõH %8–dðu¦O2ѵeø(\#|ø·ê㫎ŒÕ§ õWg™ Ôç·üí3ڣЄ¯áêz­¯ß&¶¾2êOìþ\<^çD=›<6¬Oíçt¦ÿA¨¡¼lÅöêÕ«æŸþÓ:’Û0B Ÿ~<sñýôGdþñ?þÇ.þäOþÄ}®y¤9t¾Ä˜¨91Ì»]}Ùôï|l „®yíöàüŒ²Ok¾›¤÷±9Ø»>êê£îDóÌnüþšr7x×=Û¯ñ°Øhy« ËùÜÝÔGïócFô9ßmÉ=–áì¼n¿FÇË~ϱe½üŒä~†rûž±e³2îçÇú‚›™8˜ñ;@Ï „VB ž*Ž?Ùiغî­gNºsêÌÎþ/'$¼ú µŸÆ3At',ãwFöÚ¬Q?û¼IêóÛþŽ.ÑW|프I!CeÃí»\â#ÈP#ÔgP7‰­n8ú7†—ð21í¦¥Uò.éfÌsšT)j°:jX5µÈ*”Y×Ytz}3̇­Œ7¼ùPCÞ”õìÃJ©ë±R\'?çäÐÜ­K¯ºÛfpó½É•б¿<‚F»i ˆÓ¨âø«R¬í�¬?\pf õ%+ÏúŸ5 ÙGI†ÿÉ Ûùï®kú÷ÏÆPÛûAwûmsè»G»±Å‡æÑèïÈ2~·鵟7z>Cm_.ÕK¦×³òíþVcÿ“sKô½5x%¿_^ûÁ~!aò£³{„ùé”1Ôö±±e¬O¡žBl›>¨0­/ÓëÌëæ&©–¨CZè'ê´©ò<!Ô£¾B­á ·ÌÀõ©‚0K£ÿúÊbž™²„™qzø-³+¡žºž½ml|KÞ§Ó{ÃÜÏ3Y®â|Ínsª‡CRŠëä[F™¤©cY¡öÙiÊ|Øê‘©:ç"Ìêù~K0õbÛôA…i½lB¦=’êM}6L¡®5¬šÚ µQÍQ°"¡^vó¬ò˜PÿÀ îØ¤q†S׳šs!¶N~¾B@ÉI Ç „º¸N¾Ø€P«B¬2`¨AGeæ"=#' ]0¶9l°‚JA¨§Û¦*Lëc“2íQ¤:-êz€Pê©§Pg“ºJ®ºV¿s/_NFÿ÷s7„ËÃø`j2p•�OD¨ý yEz¼+u¡K·¥˜Á1q|›,¿.ý8AE_ëY‡ëä‹5 µ²ÒÚ²Ó°I4ÜpÒ°Æi¬Bè <õbÛôA…i=¤ Ó¿/Ë´~CuœU0‰ÔC Ô°*ê)Ô× ÓO�è ׄÏfûwò]†¦HI¡Îÿ>}üm³ç2ÔgLêÉëäŸêqiŸ&Äy†:¶N¾X³P+3Mv68’êyA¨7 B=…Ø6}PaZ=)É´Gû¤JÂ"­‡°ÈPׄVES„úôèÀÜ옮D4ÔÓ£»fWêØÇÂ1Êqæìò!þ|.å#IVøuòóçÂ5îE)ö]¾#ëä‹5 5ÙiH-Î B½Yê)Ä¶éƒ ÓjI¹‹µ kíR5¢±,5Äh„P»¥l^tKÁ<“Ô:¡Vö÷J!ƒ=ù'%+}~Ö:ùnß;Vø÷ÌÝÃì`»,vi¡ÖVŠëä[Ö(Ôd§!%41™&(›‡u õx/”<4lcxàf>_ÕŠö‘û{g³|÷¾aÞ ̉÷‰ì¾8ú¬±á)…çòWG( B=…Ø6}PaZ*ÔR•iöMû¸èò�0?5Ĩ­Pûõé•™}t˜ý}á²Ùé_7]'Á¿Ì—§ *zÛCóøT"ZC=»b8^É=/ªÑçGKÈ^'ºùëF™ô3-›¥°ßc°]›Þ1Ú®"kT×ÉòR½ˆP“†Ô˜ÍÛÀ3]èª^Q ¿_Œ߬äwí}«3jh^l¬(`ò%»‚%ö² wÌÞÔï®u]dvCdê)Ä¶éƒ Ój¨ƒL{¼TÓª °jˆQ[¡žÅéc³¿{ãL&%௼dŠ¡È"Ç_e8å8¤„ê—_ùÊWòÿ•cªÐU¾¢Àya>“ÝL‚Çž¯dEËñ¾Ùé\š1—DŒ9„Z†Ê”¡žBl›>¨0U 4Ý@ê Óµh«k…1ÀêA¨!Fc…z”)É2µa—êúÌäÆXE¼:æ=þ*ÃÕ0¾È2E�«dÞúðd¡[ÅŠ1¡¶ê†zd=NÜó£mU±¢@>aãœÃ@2æêÂdŽe@¨§Û¦*LÕ"!•˜Ö±PÓ>kß5+#…2Àê@¨!Fc…æfÞ㯺GÕ•`€*еùæ›oæÿ›ÍT¡«|E’B?_ÍŠ¡:r^ÚÏ@¨§‚P7ƒ:Ë´ÇKuÝ¿@Ê Ô¡Ï<Ç_¯#; ©¢IÉT§,Ë<B½üŠ1!žÒå;Büù\dG™m…_Q ì  KìÅæ”(B—ï© Ôõ§ 2Ò´ï5Ä@¨Á3Ïñ×k«®�T‰|ÊN–WZ¨+YQ (ij'%+}~ÖŠ¾ûºf¿{˜=æ2êçêÓ£{foWsR0)B]sš*Ÿþ{Õi,8@@¨!B ž²ÇŸì4Ô %,»šÌT¡«tE\†ƒ×º˜¸lÖù1ÏÑçGÝ·§¯(  ̆ý`¼·•øÙŸ8¿D&ÌÙkÃè˜ËƒÿlîGžcÙ¬B ÔéÒôL®¾Ÿ k¤ :jˆP'€¯øF»T†ä™¢©ã§ìñ'; uàÞ½{NªË°”б¢ÀÒ ÔSˆmÓ¦Å@ëæÐ†nѺ"Õ�ÕPC „º žšƒo|kb÷Ì2¸¬ÓL¡Ê½êå×Ê-süÉNC]Ð5ªŒi™ku)¡kÄŠ¾±n<Ûì×¹_5õbÛôA…i~tCH·A¦=^ª5¹�,B 1êå9}<4Û'w,ÃÒB]ÁZ¹eŽ?Ùi¨ª3—©C®Bè <õbÛôA…i>Ú(ÓIµZÉô/�,B 1Ú!Ô§æäphvÆfá}’ ìš×nÌvg|¬¢›t§§±’zý-óðäx4–p«¿o>po™Þà-ÓÏ·«ñŒïüðûÞwÑôv^v3gã+õ!ê*ªÌÖEsµ÷’}½„:\ÓÖ¯s«ýÉgî¼dzW_(õ2kåž}çYÇ_Ïi}ß¶ÕC ¾h µ†Î¡Þ,õbÛôA…©<^¦Û¼N³º}+ST,B 1Z!Ôn&ÛKÙr1á’.n"+œ{÷Üd@ghÖÞ²ÙqÇÖ•=6×Ìåo˜þΫf˜wëtÙe7ãî„÷ùÏ‘Øï›'ïç&2Úrr/w#¡vÏg3äºen´ŒÎ¯>±ûÜÍ÷¬¼…¥}2æ[+wÖñ×ó”ÃP'|ýqõfA¨§Û¦*Låð2]¦u­éø›â< õÀ5Äh…P»I¿üz¬¹dJ€¿ˆI¨Ðì¼[A&WYé|Y'£[¦»34‡'™…Ÿ õ„÷…²ëþ–P[If�uùgæuaß7ØÇ|6yB—ï‚P/²Vî´ã¯n³ÊNÔ ]·³î+õfA¨§Û¦*L³A¦Ï#©Ö‘c0?5Äh…P{ vë±fÝ£Ï2Ô1¡Î3Í»wÇ3×ê¢ýÊ+fðð‘y8ض¬.ݧPOx_T¨µݼ[¸ºŸ¿d¨/»unG›pïÉ3ÜnÜê×ÊvüUö’†:¢D̬d B½Yê)Ä¶éƒ ÓtéÉpl�¡†­ê©c¨/˜ N†ó—æ„c¨/tºfûöߘǣ%«~p–‰¶²úX“’u²±Ñßwp¶VëÖÓ»’¿Ï~æýGþµùjûøVÿžyŒuît¿jnŸvc¨õžBCÀÂkåæï·L:þi²ÓPWtMϺ~êÍ‚PO!¶MT˜&ƒ0ÎÆ#þú�fƒPCŒv5”Y+wÒñ'; uGCŸ<y’ÿï<õfA¨§Û¦*LqéòèX©ð×ñBªfƒPC „º%”X+7vüÉNCP½Z3~O¡Þ,õbÛôA…é<Œ^ /¤`65Ä@¨Á;þd§¡ èV]q’9Õ'uýë{„z±mú Â4ŽŸÁ™^ 7ú:Ž�¡†© µÎC¬?TQåÖCvš‚’.ê™1)ù¢k=ö› ÖU7Ü!Ô-™®Íà¨ãˆTÄA¨!FJB­1ŽÅ̱ޑL¨+«6H„ºEx™ž6®Ê£%R ¡†) 5¤ƒê%€¦ kúk_ûZþ?h:uKð2MkYµèxª[Ç`„b ÔPDÝbU?!; MB=`t]C;@¨[�2½Z>üðCŽ/@„b ÔPD“‘†&¢9TG„æƒP7dz=pœÆA¨!B !d§¡Éh¾4„ºÁ yëÅo&|@¨!B !d§¡É¨^ÈÌõí�¡n(ÈôfÐqW¤ÚB 1jð†6 k\uCh6uPënøc•D#Ó›C•„˜TkÆGÎ ´„b Ôà!; m@uA]ëÐlꚣY5Ë´o“°1ëôæñR­Ðßþ¼Py€¶€PC „„ÏN“¹ƒ¦£IÉT„fƒP×µzIÔÿðþCd:!TaЄ_þò—GçH¡F€¦ƒPC „„ê. ‚¶@ݯù Ô5G“„²öþÑ?¢Å7!t.Âó£ ë´„b Ôà×çE0 -(¹B²«Ù Ô5&&k ºQ¥ÎÎEñü0ã#´„b Ô Ì4Ùih’iI54„ºÆhm»¢¬)$qdA7O±÷@,ôM¡†u»ñó¾†6á¯{h.u …MK°Y~"-”¥Vã†&#óçJAK%4„b Ôí†ì4´MLF2¥¹ Ô+D“REŠÈ¢ÎB©óª Aì{µ=˜Å<5Ä@¨Û…–‹T£²ÊM²ÓÐfüD|ú-¨ 8 KÍ¡^j…R×keõã3”E¯«x)ã¬Þ�ÚÎë8u>¯P=5Ä@¨Û…$B­ú2t{{{ù3�íAHo½õ–ùßùQB¿ hõ Dë‡B׎8u/µ´ë&¨á<5„ Ô¡n^¨}üîïþî(c Ðt|&ü ø ¾Ô,ê ÑG-°ú‘Ð¥i2u/üÚ_ÝuŽ!B !5Ä@¨ÛEQ¨}(é@= ÚÀ¤!‚J¾As@¨+BYK*<`:u/í«Î«÷“A¨!¡†u»ˆ µÊT•�m!&Õôvlõ’H²4Á–²—娋x©" ‚ŸÅøËPCB 1êvQj•4NC)J5ÎÐ,ê%ÐA"-¡¦€(Oêâ¥nh꺯 KZyjA¨!BÝ.B¡¦´Pªñ†fP/ˆÏ^Òec~R¯pvv˜„BjˆP· _WRù��™Të7Í¡že,% Ê^2AÕb¤(^j)ô79fg_ „BjˆP· • dâ uü¤Â>{Lœ‰Ãr ÔsÀÚÒÕšx…³³s^¡†„b ÔiSóLœ4Í“£º=CΣcÂq)B]IkKWGJ⥖7”Ü0–¡†„b Ôi¢zŽîßô¾‹ƒP7]óšIu{Õ_à<uyê„ÙK&¨ª†ÄËßHY[º:jA¨!BºwK*4ì‰^Zqêf¡z“ Ï¡.B=Ö–^ ›/}>7ÒêA¨!¡†uZøÞw,9„º9¨N¯óÉØàÙ ÔåA¨#„ÙKITË&ÅK7U¸‘VB !5Ä@¨Ó€å!ç¡®?ªÛ«ŽÂ°†ò ÔåA¨ ½\=›/fg_=5„ Ô¡Þ<,9?u½ñ×<Ãæ¡.B@ör=¬[¼˜}= Ô‚PC „zs¨ücyÈÅ@¨ë “ /B]„ÚBör½¬S¼¸‘®„BjˆPoÕmTÇÑ=š†åùA¨ë‡¿æ kX „º<­j²—ëgâV¸‘®„BjˆP¯ÖÙ]„º^pÍWB]žÖ µä™ìåfXµxq#Ý 5„ Ô¡^ªç0Áj5 ÔõÀ_óªrÍ/B]žV 5ÙËͲ*ñâFºYjA¨!B½TÏa‚Õê@¨Ó‡k¾zêò´R¨uqè›aUâ¥íêfÊt3 Ô‚PC „zõhbU ¬VB6ª×sÍWB]žÖ 5ÈæX¥P#t›ƒã!5Ä@¨W‡“uVò²uPušøk^½N¹æ«_*B=‹£¡éõ†æ(ÿïúyd†½-{3¿f†GÏóÿ5ÿ{Õ<·_ÿ«¦7´±BZ)Ô¿Žt.¯Ùëh«òóéA¨!¡†õjÐýWÃXgw5 Ôéá'æš_uyê:ðüÀô·¼P×ŸÚ õÉ}óÁ«¦uåÄô_œ"Ô§æäà–œäÿŸ„BjˆPWê3 MÈ «¡N &^uyê:€P—bµB÷Ì<¾l.öš+Ô§ŸšáöK¦PC Ô¡®Mªê×Ù¥»ëjA¨Ó@×¹¿æ™Txõ ÔåA¨§¡nºö&z¡74úfËþ½µó†ùfÐÙ67ï¾mv»÷÷@Gòô±Ùß½ìn¼.\4½ÁGVaž™£ûo˜^Gù°rüø‘¹¿×3ýß¿ û¾ý¦kŸï\홫 õ'A÷ï§VŽºöïÌÎÍ=·ýNï›æîð•ì=½[æáɩݧ£Âç<Îßg÷oçåìµÛCóøôÔœ<¼•oçºÙügóh¬‹°}þphvô}Ýöß0÷žLØVö &±Y¡–TjŸ»æµÛ³Ý¹jþÕ`×í{ö½òãvò‘¸ó|ÕììÌþ{£×èzx|tÏìéyÿž§÷MË>·uÃÜ~ûeûXн;¸ŽŽ\ãˆ^wÝÜüæ¶=/öØÝü¶ºë&¿f¢×‘NåÙgf¡sóãàú:{mÈéÑÝü:}Éô®¾àÎçè1mÇ]Ÿ:Ùm÷{Ñ}˜B !5Ä@¨«ÁwwU¦VÊBØ,,‰º~êò ÔSÉÇ:9ÊE¬»gN~iöw.åò•ý½5–¹<5Çû»¹TI|_2—ÍééC3¸lxÿ—Ùón[gWLggß„õˆÓÇC³½õ²ïgæôp`.û1ÔNÎò¿œuL·ßœï›N.>îï®éÇ?ǽ/|­ô+vß>·²õ‘ypôÌî…Æk_Ê„Úíû%³=üÔ~e2/NÙÖôîf…Úâ÷yïž9 å?Øÿç}sQßïôÈ<xp¤æwþ³óü¹=ç/dÇ}tN?wïÙêôÌÞ}½>$¼ŽôñjœyÑžŸ'ÙùqBû4û{«oF‡/¼ŽÔÛJýå9<ýâì\º}Ö¶žf×Ig×ìŸîÎU7?oÚWû½Ç2Ôú.Ýì1w\tÝ„êîÃtjA¨!B½+Jw×õƒPo]ó,‰ºêò ÔS9/Ô™PMúÛêÇѹ3ØÉ²™¹„„ÙÀ,³ûwÙv]ö/1‘°Lt& u.@Ñ¿ŸÆ?ç‹âkµ½gæäã³whý=së@ µûÜ+fpø…Ý¡\²&nkôE¢¤!Ôù> +ÍwnæÙ÷|ÿO>1ûï™á`ÏôoÝ·âžg?QÜÙqÕã_H”ÇΣ'"Ôùë&ý»ŽÆz@xq÷ÙïQßK„׋»V}—ïgæèàÛf°£íå½ Ç%ºS@¨!¡†õâøî®ºÏÒÝu½¨|…õ£k~ùµ¥ó:ë 'em*uyê©Ì)Ô'÷M¿û¢ÙÝlžIŽÜû”¼2.9þÇݽaö]&ø<Y¶3Ë\ºÌäÄ u(³Å¿}†ºð9ç^[`}†»b†z+Ëʺ¬û‹A†zʶ"¤%ÔY‚îî]sô,¶ÿ:Ê�œó<C­÷ÉàPˆÇ™S¨Õ}üÜu”]3çÆp» õe÷Úñ¬xŽû®yw}*CýÓìšr×…ºíç’—èµ<„BjˆP/Ý]7 B½T§¨æš 'ž­ý$´ÕPÞ—�¡žÆ¹ì_1¬lZÙÊþ¶"rÿ#×úÂ…Ëf§ÝJ°Dì—n2+7†97Îøy0¶ù‚Õí·ÍahDÁØçl µ}ÝÖÓ»’gF·vLÿU>Ûnöxø+gÏŠŸóM3x-_q{ÿÓu³sÝå}`GÙmIÖñ”1ÔÅmŤòŒÍ uÖ�r¶ŸÙdc ÓÝyÕ~¿¬ÑàéÁæšîºö‘¿î¢ë>ý<ÏÜéší·æ5¶ÿϤ; ¸Ž¶^í›Wó×…±Õë™+þï×Þ2oŸ»ŽžfÃ�±ø 8£ßé~ÕÜv½<Á~7†ZÛõãÇícÝ릯,µ†’]¿Úî£Ãȵü4ßf„BjˆP/†îïºÇNG·Õ/u9¾—oœÖÿë½Ô§Ðñ‡õ£:Åìë¾ ³„:œx¶ “ÐVB]„zÕ¸nº7Î i}å­qyn›꺢Iê^3;£Â@7ü=skLž7 B !5Ä@¨£VBW²·Z@¨7Ãd¡ö 7—Íõ«Yò)O~ø }]’ÁO4 õ¹Éz•÷ÍÞ3½È$´n{í�¡.B½jNš¡§šý8;½=s÷°Ý5„zŽÍáðl6r¡îß=´ED: Ô‚PC „z1t߯ 5TÄd¡¶¸ë,ï=7Òfo"ž±‰r½Pÿ4 Yœ8ë½x~Xg|Ú¶€P—¡†µƒP7Ž?„ Ô¡^ŒÙB—ÏÕ‘O¼äæä°ïa©ÏØ0µâ¶²o0ÙÇVÁl¡…9—àØD³#¡þ$ÿ×·þ7I¨}&üìõÙãí�_*B k¡n&A¨!B½ªÈÏF•ÿ|"Ñ\ Xêsù¥>E¹ãU3[¨Ã µ®Õÿê®ßóÍz¡öêâ¤À“„:> m[À—ʃPÃÚA¨› ÇBjˆP/Æ¢B}^¿•f©O„:]f õ%Óí*ƒ|ÑôöîYéM4{o|’Ýû‡…Éz5)°Ÿ&ž=4¦MB{û0¾ªJÁ—ʃP¯ßkTP¸gÏô‡®å+ú¼ë¾ô纜œ=g¿ ÇµÈvεg›Ã»Y7+½·Óû†yo00w&$Y¡;ú¬+=Ó;7;µ½õ‡æ`ÂÒ_“h–PŽS^ß ]¿âózrhîö}Á å¶Ü|oòW®�*|ž_ÓÚ=îk¹Š†¡†„b Ô‹¡{òlæêèòˆ,õ£Üñ‡ª™-ÔóÕS`>êò Ô³¨x-:WèŒZvýDSy¨sÏÛ2áð[fWâµó†989{þôñóÊ­‡£–²ÓÃ[f»wÕt;»fÿ8l?Ë[ÞqÊÆ)혽±B³H¬Õ9/ˆìVFã“\÷¬ðó¦³y¡¶û~pË ¦~÷y++ú¯Ÿˆîl©©•œWßÍe²ÊÇ©ZR¯ÙmæŸG•훾ÿ±y8ØÎZîý{ Ð Ô‚PC „z1f C­ÆÐ®yµ¿iȵ²ÉRŸùûË/õ)ô:X?“…Zõ˜òç¡.B=•ê×¢+ŠÕ™ìf²4öüñÌàŽýVz>>ü¥¬±çmöàA.Èæ s8xÅ >0ƒËWónN9nœÐ¥f&œ&ÔÙÚÈóm{ãBíDô¥±ï±¡á˜-ûßêÏkž18×xR†@¨}%èòà¬r„PC Ô¡^Œµ K}FA¨7Ãd¡†u€P—¡žˆ²˜Áºtðš” óè‹q 8/Ôö“Ü™¨ºçGÛ*týµÄÞïP÷¦k·l¡'»šM(’=‘‰×‚d?m¦PûîÈc29ƒÍ uÖõkt|ß¹W~–S7c©ïNj'ÂWF-§ÕŸWuË»½Æf´ìjÈÁíï›Ã°‡B €PC „z1t¿^ ,õemÇÆ@¨7 B]„z*1Qš5æôLm)¡ÎŸ?}üm³ç2™gL/u ¾–Ë–ÛÞ(ãj'Æ“åîŒ& µ%ö=–:¯%…ºÒóz^¨Ý6òJÐôñÏy†zÿ®éwóYPóg5T�B 1êÅ@è6 Ç3 Ô›¡.B=•qQ*7æô ºÎ‹Ó”.ßâÏçòæDʇŸÝ2± Ùl…gâ$©Še[CÚå»ð=–?¯svùŽ0ÿyÍŸëdË”Œ(%þË÷qÖ c¡mœ¡†„b Ô‹¡û?lŽÿf@¨7 B]„z*(•ž s:ãâ4{R²"ÑçµoÛêœÿ?ϰúmŽº9«{ïÝÃì1—y½¸„P×xR²ð{Tr^ B]bR²" W·ï±.yYãIY¡ÖV²k#[Ÿ4ÿ „*�¡†õb t›…ã¿Ö'ÔY=.K\œÅÚVl‘̳«ÇNøœ±çòºnøØÖ«fø¶­Û»ç áëû9uyê©ëÒ½³oÞ);æiADs¢?ƉËfšèó£IðƒrB”¿ÎïÃé‘9öƒqÁZ£o`ö'Ž*Ü\š´lVž=vÙÝG‡åg9=eõç½ W{^•]Ž–ÍRØï1عÑf½ ücaÌ'Õ5„ Ô¡^ Ý“aspü7Ãt¡nÈŠ-£žªó®Ä3¥§©«ëëpöõ×¾a÷MŽòjöÜëréŽL@ˆP—¡^fÃ\ˆ õ,8¯ PCB 1êÅX¿ÐÕ<c÷öÛÁÿ},–z?¬Ÿ©Bí’#u_±Å²ðJ<‹ õ©9ùøc—ÈË^ç{ž>3G>ÊÏA¨ËƒP/C#fÃ̳é£LJÿUOòB݈óªm¤BSìV^!5„ Ô¡^ Ý¿gCÆnL0Ædañaj¢Üñ‡ª™,ÔùPFW·ÙªñŠ-ˬij¨Pçÿc¿‘ó ÔåA¨aí$/Ô°A¨!B½ªÀÏ„ŒÝ¡ÎXd"UQêøCåLjKTë¶bË2+ñÌê³É‰3êU‚PÃÚA¨› ÇBjˆP/Æl¡#cWF¨}7óñï4}?X?óu=Wl±±ðJ<³„ºpíë±—¼Èç Ô•PÃÚA¨› ÇBjˆP/F)¡‹VŽ[œ±‹„ºV”ê:¯ØâÃæ^‰§(Ôj0û¦ÙuÃ*ôÝ/Ùß}¾‚‹2±m.>3¡® „ÖBÝL8þ‚PC „z1êÖgì"²@—ïz1U¨ók± +¶HxçZ‰g´Ýb¿££{f¯§c¢Çµ½áø 0cÛˆ7TáKåA¨aí ÔÍ„ã!5Ä@¨C•Þ™„IÆnüxX%bR²ú1U¨gÁŠ-Kƒ/•¡†µƒP7Ž?„ Ô¡^ŒRBGÆ.­Ý6Ëf5‚¥„š[–_*Ok…Z?R¡ë×_}eBý•¯|%ú™ÄêcUçê B 1êÅP%ziÈØ-L%Çæf)¡†¥ñõ;˜M+…Z?ÎPˆõLJ~˜ŸêxòäIô³ˆõŽ{÷ò³m¡†õbT"tdìFŸë¡Þ,¾n³i¥P�ÀjA¨!B½Ýfáøo„z³ ÔåA¨� rjˆP/B·Y8þ›¡Þ,uyj��¨„b Ô‹ÐmŽÿf@¨7 B]„��*¡†õb t›…ã¿êÍ‚P—¡�€ÊA¨!B½Ýfáøo„z³ ÔåA¨� rjˆP/B·Y8þ›¡Þ,uyj��¨„b Ô‹ÐmŽÿfP¿þúë#±#Ö:þúfƒP�@å Ô¡^ 2uÄf¡Þ ~øá9É#Öºþa65��TB 1êÅP¦ˆØl��L¡�€ÊA¨!B ��M¡�€ÊA¨!B ��M¡�€ÊA¨!B ��M¡�€ÊA¨!B ��M¡�€ÊA¨!B ��M¡�€Ê™uÏÿàóü…+¡N „��šF+„úÏ‘¿��ÖB*"‹P§B ��M£B­��€õ‘Š8!ÔiP�@Ó8x/Ó|”eãB­÷Ƕëã7Ÿ¿��VάÂå''ù W B© õÿ‹1ÿÃ{ÓãÚŒyÿiþ†€SûØïG^¯ø}»ÝÓüu!?~lÌŸÚí})|ý÷yócüÚ˜cûüžå/�€$™å¡eI^¨Ù‚ ��Öƒ†ÚÄîÅ>T&¬„:->ûMü<øPCL <°’{N„ÿwûø¡1_ÎÅ÷†•ݘ$ÿúWVº¿—½æš}¬úqj|ý?Úר×}ý'V¬›?!ìßïÛ÷ùÏy3"ï��êY­Þ?¢@�X±ûp¿™È @¨Ó¢.çC™aec™åŸ’g”­ ¿Ë[ñ~óýÉ2,™¾ñ}û¼÷§4öÿÚ I5B �6jËŒX™æ£,êYÛ×€ú1êi+¨?¶UHŸY÷ãuN‰P§ÅñoãçÁG*“ˆNê°k÷+±ºÅ4¡¶Ï½ûŸ²ç¾^âÚSôèg��@hXq¬<ó1ƒn\¨•íˆm7 ÆQDP÷ÂOlåNÝóJ¢â˶â÷Sc>³ÀØçýÐÆeÆÎËØg!ÔµaÖøéuvëE¨Ó#vÂXWï…i”êhöxŠPûí–¾Ÿ=³÷a„� Yf eš§ž±q¡³Æì1{(À8ŸÙߌÆú}ÉÊ´ZÐÂÞ‡¿¶Á7­TO’ÙeÆÎ…­P¾¢ñˆËu*¥ ª8Ïêú´® ÉB³ÊjUN6Í4¡ö÷¾‰÷$ûXT¨ƒÇcÛ�€úQå°ã$„Z;Û¶ïå/�ó™­0J|¿üWYz®ò©8.5Æp–jûž÷íwLºÛdö±$š�2vÿ c½…êô˜Õƒ!…9Ob÷·°‘Q?œ4þÙþž£Bíïeöqºq�4ùe¬,ó1O#qB=í3†?3æÏ~žFË7À¦9=1æeUì¾o…9œ]6†*‡q^ŒËv‰\ºâ¸ŒPÛ×ÿð£l?“­ÀÖaç@÷òØ=ØÇºÇÈ"Ôé1«{\ ߣ®Ù…H¿k¯™©Ùå B]ê¾¼·H8�@ZÌ?­ÐÜ!eIB¨E±«¡þ/™®ús�êÌûy–¥l·CU.‹k¡–êèÃ)|f£¯h\û^—ú•ýD¨5S¬,ÿ·üÌ'A¶ÝÞÀÞ,Œ wlGŸŽ/UYöØí¿ë»ÄÛýý7ö}ÿkä8÷SŸ±ïI‰}¬³îóŠu/aˆP§Ç¬‰É›žó¤x-…eãÝYC)ž$Ô3ï½á½¡LÃ'��¬Yݽç™L$#Ô¾Û÷w~þ3|h_�ÚÊ2²2M¨gŽ1œ€ë*n+¬oÚÊ«PËÿÙ˜Qj[¹üº­dŽº«ÛP—i}æËváþø‰ÍŠÙ¿$ç=Zʦd…Y3õ¾b?Ëù¡ý¿Ë2Û÷†™|·M»ß¯ÿ"û }×XPøŒIûX7tÝsÃX÷„SušÌê"·éõ¨c÷7?”Eb‡Ó×Þ¢]¾ƒÇ¿t`?#xþ¾Pæµ��°~fÍ3oY–ŒP—iùNeY€Mà+ŠËŽoŽU8K1ŒàE¿¸”Ìh¡ö…êß_¬|N’U—¥/ƒ²bë?«XY~÷/ƒíéÿVº‹‚ï÷=ÜÏ&õ¬n¼Š>Ï_¼Fê4™Öª¯áYúw“YêØýÍÿ¦õ[ýòòÆ´8-ýo½Ìý¡�H—2sÆÌÓÝ[$#ÔbÖ„'ŠuÎ2 e*ta{,‚÷ŒD·su›p‚HóûyÅ.ß>»ëNYV¨c“­•[ÿYÅ ÝtL|—ï¨t[FÇ68–e?7efe›è„P§I±ñÛÏs>¶É•9¢B-òÞ1ú½N\GzŠP‡ïŸ*å„� ]fÕ{™$)¡žõY ¥èY—ÚÈH¨c•½£qƒ‘Ê_±Â9×Ã"i1í9a{ðSûš¼’ºˆ$«köwìëür_ç*ÑEìö}¦Jß÷ë?±ŸSh…œÔà†?þuêYcˆ›W„:]þý/ÎÏs†žÛÔšÔ…ÚâôôÛ÷ÃSư÷‡‰Bm ï«Ó–D¨�Ò¤Œk.Ò(œ”P u-Œ}Ntý†6fŸg \P1,¾6Vá,=ưÀhŸæj»ý÷íg«bûŠý÷ÐÞCbÛ˜&«£.êVÆß´Ï?È_;S¨…ýüѤdyŒÆT[üçÎj´uê2Ãl›jÀD¨Óå““ø9 cSYj?Ĥ{Ù¡ýÍú3ݵP˜¯ÙçbYèÑ| ö5_¶÷‘ïØë0¼çhÂÄÑð„� )ä±2+ŒE„“ê2Ó˜+6=ñ ÀÚ $yfEmN¡3·³º3†Ì+Ô~±°²;i“dÕ¯ÃVxýkK uN8n<ü|ÊHr]…Z…Ŭ 9›¼Ï"Ôi3«Ëܺ{“ùßb1ÎÝ+ƒ{/Ûû‘ïåRŒI÷”Ûï÷§ö^éå|öž§ž/EÑ�€Í¢añò*ŒEë=É µð3~ÏŠu/ã°iF]mL(l¥q.¡VpgŽ1,â¥ÙƹqÝ¡öË~…Ùß¹„zBÖ»¬Pë³^//è¾âí÷çK¶Òýóà3<zþ;ùþ×Q¨%ÓeZh7=¼¡N›2z“�@ ¨>S&‘°h½'I¡V…¯ÌD9 ¤Úƨˢ•ß÷']ÿ‹µeæÃ¾‹eqVìs²í÷Éÿ?g¡Én!ë4PÿŸ‹¢œï×h›Á±S&}´ö´ø­}î¯Îö³ŽB]F¦›ž�¡N›²å´È��6I™ºÏ2½ò’j1ësÃ@ª¡müØÊ«ÏTkàƒð7`e/œì«({ËŒ1Œd¶Gc‘ícÿæÎסöÛ²ûáÔw×V·ë×­Èþ½FBmEûßäbîÅßuA·ßéÿÕŠ°}ÂK¹þÿÌn;` õ±½'½;¡ï…\cý÷òê0+Ž¥,Føºè>æ² ï}fÌ¿0‘T)È*B>e–QPF�À¦(³Š”b™^yÉ µ([X+6¹LÀF°Bø¾•ϯ[1.JŸdùOís¡h{™=÷ÚB¶WB^c8+ó«}ÙÆ^³ÿøÄŠ®•RIùh<¡}ÝhB0ûÜ×­ÜIDýç…“ƒi?Þÿ«ìñP€ÃI|ùÔ~ÖË`ûø$™juùÖøÇp±åÂ4Þûßø}ôº û˜*$ÂÖÙ;öû‡÷Ï06ÝÕÛƒP׃²Ãæ]Ó��`YÊ OR,Û›*i¡e[š!\Y��ÈÐ=<6nèÝ RŠø Ôõ ìlñH5��¬“ÿ{¼<*††/-ëÉ µ(;æO¡Bû³ßäo�h)*fMðXÌT§Ô5¡®e{“©|Öy��X%*—†%†¸)ª(—j!ÔªÎ#Õ e«Sè¶�°nT”ØÑ8)É´@¨ë…ÎGì<ÅbÓÞ�@s “ ªãLëªÊ£Zµ—­ †¡.ãˆ5�´ݯç?\bfËUP׋y¾U63D ��ªB¾7©ú¶Ì¬ÞEj#Ôb‘Lµ4}�€&¡džŒt1RÍ"ÔõCc¤c•–I¡k–r��–EÃ}g•?á07ùd•ºµj¡/¯îܱ})*ÀÕ€B�ꊗèeî…ŠÔºy‡ Ôõd^©VГ ��Au…yêB’껟UßCªvBíÑ2Y±ý™7þÝ/²¡í©r©ïK‘Rèþ¤Ðýv^Y‰…¶‘úŒËúÞ±}÷P§Ë"R­×ëG¬�`ª#¨16VžL e¦ó<ßH…ÔV¨…ömÑnŽ>¾óóøãAM ݳë -u½‘T/Z>«’Äj��¢¬²’Ÿ*ÿceǬ¨º›wH­…ZèÀÌZfZüBMD BÀ:Í®ŒPוϋÎ{¢{¹&s �Ð>Ô8뇸-ÓCOeÉ*©½P{ªÈVA41T¬ªUvU ÔÍa‘ny±ÐØ7wmσ ‚ š’gÝë—è0Ö‘LhŒP{ÔŠXAd…Rêc¥'P7 •ÍUUŽ‚ bVÈ×UjœP{–écOQ×´(ƒW÷.²uóÐ59Ïl¬A±Hh8ð:{æ5V¨=*ÀuPc㸆?;ÿADÝB-QQCbS@¨›‹ÆDÏÛ“,\?” ‚ b¡ºÁ&zæ5^¨C$×êG¯ì sº†Q×P#a“×ÔG¨›ÆÊ•-‡)¯ ‚ ˆI¡:Á&“ ­êjÅÐw,ˆ'‚H)TPè^Õ–ÙŽêö k{Ölà,qIAC½óT_Ø4­j��HÊžö¡Æ"5éÜÏ7j‚ "â–Òê%5��$eO»QEIc­' 6AÑüð­² …Lô$j��Hʈ¡ë‹6AѼÐ}¾nK~"Ô��”=���Pj��HÊ���¨5��$e���Ô„��’ƒ²���ê�B ��ÉAÙ���u�¡�€ä ì��€:€P�@rPö���@@¨� 9({���  Ô��”=���Pj��HÊ���¨5��$e���Ô„��’ƒ²���ê�B ��ÉAÙ���u�¡�€ä ì��€:€P�@rPö���@@¨� 9({���  Ô��”=���Pj��HÊ���¨5��$e���Ô„��’ƒ²���ê�B ��ÉAÙ���u�¡�€ä ì��€:€P�@rPö���@@¨� 9({���  Ô��”=���Pj��HÊ���¨ubüø±1ú#c¾ô=cÞ–?hùõScÞý‰1×ìã¯Ø×lŠvßþ‡÷Œù:ç�Ve���Ôú õo­h~b…î?fbçãËV8jÌgÿ»1?°Ïç/?µ"úûÁëbñ%»­?µ’úëü=›âÇÿ%د@¨‹ßaãBm÷íÍ_å��¬�„���êÀL¡±ÊŒ‰èºøìY†6&ÀÊà¾i¥ÚIçûVN­X‡üÚV¾¾yî3ûø+ßÏÞ÷å¿Ê„|£X‰~Å~ÇP¨=ïçßo-Bm?ûÝ Š;�´›Gö+s|üÈÞó���6M)¡–¼Æ*4>ÖÁgv$ij¤×eP#B=ÕÈs§'Ƽ¬çÖ%«ÓHA¨íñyßç �h-æXyãã¡ï†���°AJ µºÖÅ*4>Ô5o•Œ„÷ûV˜›?8 +ƒoþÅy&Ôî=öqÉê—¬´n´ž¶i¡¶Çâ‡ÙãBã�´–?ÿE¼¼ñ±êr���  ¥„úàI¼BãcÕ]ï¼Hþþ±r?6c+‚?XP¨Ë~†g¬«¹ å~?r<ô:7ÙXþ:u[÷—‘ÏZP¨Õu=W~Í~Öcƒn¿£ëþ®ø¾Ý»=×}Þ>÷falº‹ü˜Íš­Ôw´ÛyðÓì˜¹Æ ýÿ“l›zÏ5+óïv�'VÖ„ñ›¿Ï_���°AJ õ¬±l«œ&œë͈¨–fŠPÆWÏù®ºÒwó÷Œ2é6Þµ{Üöíc¯ÿ"—K+®ïær|ÍÊíØdh µöã÷­¼þ0ßЭ êû|é?óóໞÚçoØý}Å>ï^jŸ{×¾FÛ|Ù>æÅ×OŽ~ά‰ÑÊ~Gÿîÿ·}îAþä¡ý[2î �´c{ÿˆ•5>¾{”¿���`Ôjeb•š0V…²Í.ã̹ˆ u˜­ e°^ž‹ËGy™‰¹ýŒ¯[‰='‰ÌŽIüœBíöãî¸À‹s¯Í?ïË?xe•5)[˜™ µ'*õs~G/çç„ß?n?ƒá‘�íeÖøé>Ï_���°aJ µ˜51™²Ø«`´”TD0=Åìé(Â÷xQ¼æëVçífìökÊ>y|ƒ@,óíŸH¿Ÿ‘mÇdÖíG$ëî›ß¶?F1I.2¯PÏû'гÿî‘ï�íAèX9ãã'…D���€MQZ¨g£^U·ï‘PO¶_ÿêl,n1{NÖ~k·—ž»‹±}¿s‘Þ"^@cû>jrN¡öMŒ|ÛÓ$¹È¼B=ïwD¨`Ÿý&^Æ„Áøi���H…ÒB=kõw~nåÈJjÕŒ„¬ qQ¼èÆ^‘µpÌó›VÆKã?'"½cûm ˆÉs챜s2ë·|§I¬L¨øŽ5�LbVã-ã§�� %J õoOÏwû¾cÿ>¦ŠPåÂvNÀН-#ÔâçŸØíÚ×—Z’Ë3K"=³^Û§ˆ€z&f‡#¯-â%¹Ì,æ+êà;"Ô�£Ì|¬? ���)QZ¨…ÏüÙÏþì|EG±Š®xá,ÜÅIÀÆ䮬P‹?ÊÞs®›ø¼tN’ü¿¶Ÿ¯Ç§Šl¾OcÏùý´QF¨ýö'u[ÿñO³ï;ÊôG¶+~ý·ö8äÏ%Ô–y¿#B �1fe§t÷��€”˜K¨ÿ3º}+V’¥¶ø%•”I~’õ.(Ô~–j½ïÜ2V»¢×|ÖX@†ÝÊ‹"ë&ì²ÍÐí÷3òú˜Ì–ÝðØh¹ª}û¾ö=oþÕÙq™W¨çýŽ5�ùoÿ[¼L c•K4���,Â\B-þüñŠNª­¿$•:+}~ýb‡°?µçb\”ÁQ–Û [l¼ôØ„fVôÞ…s#É/F¡û¸[¯Ú>.‘õkEûåªnØç¬n˜Ií@ˆ‹Ùè²û~Çb„™?3·ËØÛÏýÁÍ—·š²ó|ÇIÝìÃsT\ �šd9Vž„±ªÕ$����en¡ž59™B“ÆhÌõJ°ö¾²¯ç3t‡!™ûSû\(Úaw,¬´³©#ÑóQ"Súc+‹^âµÍ¯ÿÄ>H¢ç3[Y ÷9&í>3†ºJ?}‡Â¾iû£ý°¡lõXƒCŽ$÷Í<Ëì_w®ñÀn÷ý¿Êž×~êûDcdf}GŸáC“€æ£e°beILF���)2·P‹2YêUuý�€æ 1ÑÅ /c±ªžO����˰P—ë¦PÖ��`eh; ���©²P‹>W|ŠAV��b”™Õ[ÁÌÞ���* ul]êXè5Ç‘1Å��Ð^ÊÊ4ëN��@Ê,,Ôâ³ßÄ+@Å@ª�À#™¾S¢AVÝÁ���Rf)¡e³ –<�h/êÙŽ™ž%Õ4Ä��@ê,-Ô¢Ìú¡>~ôt…Kj�@’HŽcM’j`�� T"Ôd­«ÅB¯e²2�€v qб²ÀGQªYv���êB%B-”}(3IYd«�š‹NË,‹¥ðRL��@¨L¨Å"R­×³^5�@sÐ2We—V ã‡ÿ-ß����@M¨T¨Å"R­Ð{Ô-õF�ê‰V~˜gN0ÈL��@©\¨…¤¸l7¿X¨B¦ ik�€´‘DkøÎ" ©>è¥���ue%B-46zÑLEšÀì?üm–½V¥KcòÈ6�Àzð÷]ɳîÅè*îï’pm��� ®¬L¨=’àe2ADóB½˜Xg���êÎÊ…Z(›\E6ƒ ‚¨(Ë ���ÐÖ"Ô²ÕAí 5¬2\���šÄZ…Zhlµ²ˆ5AD;BÝ»+ ���MdíBíñb­IÇb0öóøãADÚ¡µ¨5™���@SÙ˜P‡(s¡ŠW,k=K¸ ‚ ˆtBÙh ï¡k7���´$„:Ä/Ëâ×±þj‚ ˆdC ¡OŒyôë¬ç���@›HN¨‹hYuTÆC¢­Im‚ ˆõ‡ÄY÷a5|꾌@��@ÛI^¨������R¡������X�„������`j������€@¨�������¡������X�„������`j������€@¨�������¡������X�„������`j������€¹1æÿ(IÜÓY{.l����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8m.png��������������������������������������������0000664�0000000�0000000�00000201023�15030617045�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��A��p���f—æ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìý_ŒY~ß ÖÛ¾]øáÚP>, Üš…W»”v!®ÜÆj7õ zÜ4 >˜^§Œ‚�zA}‡À$P»"@C=nËi”Õ+bK8¯Ù³&ÄÞ„9n¶›vÞî™m©]ê4g4ô¸TêVO‹ªÉV»Å)•jFE§~ßñË<u¢223þœˆø~€*+322þœ8çü¾çw~gC!„B!„B�EB!„B!„4Š „B!„BiA!„B!„Ò(‚B!9³±±A+Ù!„B�{„BHÎÐ /^B!„(ìB!9C'¼\xý !„¢°W@!„ä ðráõ'„BˆÂ^!„’3tÂ˅ןB! {„BHÎÐ /^B!„(ìB!9C'¼\xý !„¢°W@!„ä ðráõ'„BˆÂ^!„’3tÂ˅ןB! {„BHÎÐ /^B!„(ìB!9C'¼\xý !„¢°W@!„ä ðráõ'„BˆÂ^!„’3tÂ˅ןB! {„BHÎøé„ŸÈ¨×6Ç6oWd0~.2H§3±|&ÃîùÙûÄÏëO!„2`¯€BÉðPÙì$”7žÊA¿wZìx>’Þ&EB!„Tö !„œ©†2‘ãá¹ï:(‚B!¤&°W@!„äŒï"Ž/4k* þ7Óald2–½ÝŽ´ðyk[úûÇfO>C„B! {„BHÎø.‚„‘ Ïäpp+Šy.ãÁ‡òLއ;ÒjïÊèäGrп$­îP|—A(‚B!Da¯€BÉ™jˆ 6I"ÈÓð}D¨mödäù,Š „BQØ+ „Br¦>"ˆF‚Üaðº*P!„BˆÂ^!„’3~:á±| *x�Í Øfï®Üíl†Û ê㙕dcSÚÛwå`}ÏSü¼þ„B)ö !„œ¡^.¼þ„BQØ+ „Br†Nx¹ðúB!Da¯€BÉ:áåÂëO!„…½B!$gè„— ¯?!„Bö !„œ¡^.¼þ„BQØ+ „Br†Nx¹ðúB!Da¯€BÉ:áåÂëO!„…½B!$gè„— ¯?!„Bö !„œ¡^.¼þ„BQØ+ „Br†Nx¹ðúB!Da¯€BÉ:áåÂëO!„…½B!$gè„— ¯?!„Bö !„œNËÖþìÏþLÞ}÷]ó—B!$-A!„ÏùÖ·¾%¿ök¿&?ýÓ?-¿ð ¿ o½õ–<yò$ú´™L‘/ùËD!„’ Š „Bˆ‡üáþ¡¼þúëFøxñÅÍë¦ q zØ‘-ˆðZB!ÄEB!ÄTø€è¡ÂÞ#éˆ "Œš!„BHŠ „BH‰ÀA‡£‡Î;œx8ód=(ˆB!ÄEB!¤`4©'s8è>òÅŽ°QA„Q6„BH3¡B!„€ ÈYaç®`2Ïb‰ "œvD!„4 Š „BHŽè´ @ ðá>ƒÁ4"‡‚!„R(‚B!cç£`.Šj`çf Âü,„BH=¡B!„d€=͂Ն‚!„R_(‚B!+gY…8Ê>êî±ËENk"„BªI&"ÈÿçñÙ¶¼¼ýñŸÓh§BÊÆŽ`„@³ˆ'·…1Á-!„R- Ah4-/ûׇ"ßø”F›·÷>s ì.û$…ïªÎï—¾ô¥©ãKá£ÙØ‚Ä0 "„BH5 B£Ñh´ÆD“?û¯Q£õ§ƒKÎÂN†‹òÁŒ q !„ÿ B£Ñh4Z`ˆ*úý÷Ê.>È2Ä®D!„øEF£Ñ,»µ÷òßøtXI&@Ñä¹¶ º„BH9P¡Ñh4ÍaÈBH–ØË(CáRÊ„BHñP¡Ñh4-Á¾>æÊT$(ˆB!å@„F£Ñh´ö#‘¿˜D!c/»l "\ˆBÉžBDør„M5t¢]K9ÒšmÿîÜÏ FóË85Írº„¬C\ArU$Y¥ B!„dC!"!„åÀr­˜†A[ÎþçÑ’~û«ò·þ¯]óÿÿøÏOm1S]\mÖ"s-§KH¨ ‚åv)ˆB!Ù@„BH¥±—#]f)RLoA„ž«ÝZdºœ.!Eešß}÷]ùò—¿l^ã=.áL!„¤‡"!„Êä‘*| BZáÃÅñ_¬>- SÚð}BŠ„‚!„²:A!„T{5<VÒ@î&Dx¸Ú±E†ïR=ìh([YU$„Bê EB!Þ¢9 zh>„ƒƒƒèÓìA®Dw¸Ú²EÆåt‰Ä‘e¦ˆB!M€"!„¯PáΛ E'‚|üÃÕ£B¸œ.ñ "„BÈi(‚B)xŽò@ÈÀJ0®vm‘q9]âöt2D²žRF!„TŠ „BJ#Õ*|`P;bŠ —Ó%u".ˆä‘c‡BñŠ „B ÅѯJx>—Ó%uÂÇ`00Ï"B!M€"!„ÜÑ‘gp²àtU1/—Ó%uÆÎÇA¤¬œ<„BHžP!„’ vÈ}ÝF—¹œ.©;D!„ÔŠ „B2ÃvœÔiÊsIÛ2árº¤)๶ë³ícB!dA!„¬œ {ĸi£Å\N—4‰øJN0Vs"„BÒB„BÈÒÄ¡¦;A\N—4»@tëB!U€"!„ÔØKÚ"òƒÎÎ<\N—4{å'ÔXöº «?BiA!„œ‰íØ@ø Ss6\N—Ó‚ëB!¾@„BÈ)\+»ÐyY.§KH­OlA¤.«EB©A!„ rÔuIÛ2árº„̰V"¬k!„ EBi0>te]ö£¶$[¸œ.!§¡ B!¤ (‚BHÃÐ |Àñ@¢S ÅÀåt qc ²¶ º‰BHÖP!„`/e©ÂWv).§KÈÙÄF©BÉŠ „Rcà4Ày€#¡É)|ø—Ó%d1*ˆ`¹] "„B²€"!„ÔŒƒƒƒéÒ”*|À‘ þÁåt IO<¢Qm„BV"!„Ô�;Á “ V.§KÈrP!„²*A!¤¢ ºc0ÑQ>ª—Ó%dy zèÔ?Ô…¶ Â(8B!q(‚Bˆ'¤™ãn' äÜøzÂåtIÝÀ´¯åúÉ3‘ÿ”OØ÷~ÚD³´GŸþP~ë÷ÿHÞüö‡òõ‡¿'Ãïþ<<<’ßû“çÎíi4­Nö80­kÿä/Âú—«ËÍC„â%ÙCn Fóñ ÇIòÖ1DMØû„ ¿Wø}Œ^º ûÆqë'…úÃåtIUy èŒïÿ©È:N¶ß;q¿O£Ñh´l õ-#Mï#P!„”" 8 ª"{8ùÊŒ¿*Xà3[°€  ‚Ū¦¿«¦¿ÃïÃ0ÍÿCt±7ëùæ˜Â¢çß*|àÜUøÀÿYÿ6ñtR¸œ.©>¾”·eE Š 4VŽ}øÃ0Z¤‰‚EBH®hDDà°EޏÀàÓümˆ¶`!ÓPìãGD Ž}Õ\¶�¢¶»»kÞãÊ.DárºÄW0¢¸ŽA„F£ÑÊ·ïý0œ6Ó(‚B2N½ ˆ¤€Sgÿãý<")Ê@#YTÑsµ…‘Eâ…K�A¡ðAâ`¤†Ëé_Àt—ES]ÒEF+×þ³U—ccÄŠ „µPÑB�zˆx­‚G“Ш^£×P|* ^«p7ˆF„$ÁåtI™ sŒj»½ŽQ¡Ñh´ríw‚6Ä:O“¡BY$åÔH8úêä3zá4*é4 ˆùå_þåSâ‡m¼–d\N—ÉýK‘?zzº£¼®Q¡Ñh4 9CêE_89½Ž´ŒtN:»÷¤ëMˉŒz혃„Ïß•q*un"ÇÃ`¿›Ò$ÝŒÇ2èlû½"ƒñóè½$ÒìoEÆét2Æ_œ'^G‘rAÔDDx  ‘G´|²¶€ƒ òo|c.÷ˆŠJ„,‚Ëé’"@ôG^bEF+Ï\Q qCô_Ý¢B(‚øÀäclŸ“Vç¦ìŸ…oß•Ý+7ed4‰ç2\‘ÍÞ(x5‘“ýÛÒiµ¥7 z©€rálÑâùHz›iDbS‚ãÝ–¾ëÉž¼ÚœÇÙ<õd3µû ’ê°3Ig>@D‚b "¼¾d¸œ.É $>uuŠ—5„VcD¹D ª¨ûÿ*Ø~ôçò¾ýŸä_Üùªlÿ]cx÷ð™ë;4V´¡Î…5…ÑÎr–!ÔŸ¦q+EÒ‰"+Z;2<Nê…Ú"È3ïÝ”Në’ôžFŸ/¢DÄ<#Áæ™®Ê9sg³”2÷d]õhuÌñšŽyþ D'La$Y\N—d –¼uu†Ó"< x`éÜ:cGJ¢þF´$^ã=;!„” „LkÔ¤ÖiÛP¯×Š ¥ó™ »çLýEéT˜Þ]¥ð*ØSg lY¢ÅDNÒm·ÌçÓè#‚lɵîe3%§Õ¹-û'™ŒÈN´íFk[úf"¹[9½íÇf»ð8þš´;—¥m^v©#Íàïæ ¹w÷j4 (°è:¤}UºsÁûÁ9÷ÊAt 6{ïÉcóSr¾mýþÿÀºøÞ£àhI•�'×8DâÑ5"oС†ÅŽ4Y.§K²`Ußkrd‘A‰ö”Q”„ òÑŠI®QÏWŠ ¥sZ1€qêa1žF‘ oÊ{ÃßÚÈ¡³ƒ±ã¢lõ÷e2Ù—þÖ Ò=Z[´0íÁÇÁ6Ñ4œîPŽrAz££`ó=éµÏÅDg;zoQ$ˆµ­Ù¯NÝÁ÷ÚQDKtž­Žìîe¢BÏœ²+£“çr2Ú•öTÌÑï#ÉùÓ¿q<”n+<ÉA_¶ÎŒ°!�º’ §cøîæaA§š÷†¤N(—Ó%«²Š�‚k$O%3(ˆB|ý…Uêüª !AJç©ô/ÉFëª ­ø"“T§§XÓaŒ@‰á–sØÑ³#–haö«Si¢©8›==µ§Ã`û­PLAtÉè éw·‚}j2Ô$ıí"¿mæÆ8D†Ì>pÌŸ-A4©êÔ–ÉÒ,lñƒÑ~ƒ³Féà/ïI —Ó%˲lgøqÍ—QÌ "šÊD˜`œâˆ Aî&W=Ÿd˜ZSU(‚ø€6ZÒêìʃhš‹‰bp‰ ˜Î‚ȈéÔD`\r8ý–ha"A6¥ÝÛ Þ §ÉÄ#AB!96ž„¿Õ¾!ÃñKøp‰ ÑqÅ·]G1‘ Oe<¼ì¯Í÷ÍñÚÑ*öo˜H-Ù:E"2s¨)~Tø½#$-\N—¤a¤nIòŠÄNŠ ADcS!„” r~¸êü$Còì*BÄ&ã‘ ¦K䶤ÛÊAäø‡ï!ÆHžGÓXÌ{S„‰GgûØÖö]Ùûj˜K#ŒŠ8vçAij]ðÛƒ}l19È6òk´¯Ií"ƒþ¶µ¿™àrzÛ]«‰t9‰Žïœlß½#¯ 'H°sNVGxއ2ÜAD ö·##EBKð^«sM®™s¸$ýýý¹ß°ó¢´Ú/É½Ô dëg8Ðp¤Ž[]4Šg¼&$ \N—œÅ2_¬4À©/Ù@A„âHh}ÖŠ2q«blŠ uÂ7¢èüÿ± ®ß‘†D4t¦z ËÖiŽrÚ@¬ÚhES¨¢)^ÓÿI^ *D-ä aDI —Ó%qíêØº¬êóÀ}ƒ˜"ƒ¶Z Z0Q9!¤h tcº£«ˆ"«&ŒS©'û20ù8¢(kz i.èP¡<ä6}ÂLA ʦ)EoMÆä¡‰0"yñ"£BÈ2@Èàrº ãªË%.2 ÅD4Š“‚!¤HÒN“D>‘*A„šb;Çy†Õ†ùkfQ“÷å+o3'KÑ ³Ì\!dY¸œ.ùƒ”#}@ÊCLƒ¤ B)š´B¦UV…F‰ !Ak†5t˜0zTÄ4‰9ääÛrøx&€Ä¢“L—½7¢È‘¯ËwWeÓD`e¡¯D¹j¢Ä¶&‰oð¿YæøGfЉ6™¾ß‘Þ­®´9íf Ä. Ÿ&$-\N·¹ ±é:®ÿyA$@›Ž©º|: ¯ñ§EBò�ƒir„ ª°*Sf'‚fÐä{ GXG‰Š`*‚Üz {oŒd<­ü¢Ü feŸOMîpÊ Þ¿,íîWdd¦ÌèŠGHl{~g«/“ðûáw{ä…H숖v6+ÙÛ‡¿ÚtÐ Öü/ì“eàrºÍÚß;™ï¼ÚY5&Aõ "„¢ˆ·I†<"U ‘"È7h57Ük}Ý$T�A¨(BäœtzoÊÁ‰­DÌDŒ#³rFl@ÐØ’íÁÇaô†‰ì8ýo‹úú»rlVº$}³ÒO(¢„ÛØ¯‰‚Î/D0 !d¸œn3ø/~ºóŠˆ;*¤ŠÉîš êzLAÝ~€ "˜FÃÕà!Y€U`ì6#ÉlÛw+‚zÓÄ{NNÑ0"ˆ‰âˆOÄ—{r«{IZ-iw¡Hb©ª `þ?/Ýáa¸L³î+ÚîÖð›r¿ß ÞÇ´˜àûF4y!ØþS9Ù¿-M×o B!ËÂåtë „³’¡þnôY:²ÄM\A[@A„²..=nUH’J„Ô’¦ÝkŒ�¡ƒóúë¯G簾ܔÝÑQô¿…æî0Q"wäþhlMe™›¾r$£ÞsÏì“-é¾+‡fúKWnûxŽ÷Û7¤ß»(­mésè9-EM"õƒËéÖ$¯su\mcú ‚rFQ!„¬Kši1ˆñŠ ¤–4í^#äæDz߿fœŽG_—{½Ž´4’c-B%L¦JÒ�!_tx Y.§[?u`9 ¦¾`Ú,LlAÿŸµŠ–_gBQ%èj;ló]H§BjI“î5FxЙñ+÷ñ v¤ÜÜ ¬ä²»‡Hu@Žóáþ¦ùAH4W GýÈ:p9Ýzð'áî°ÚV¥eÉêÄüu "˜f‹Ï‹žnKHøàwE~üͳíÊwDÞq]ŸõÝ×ÛKPÿ¿ó‘ȯþæü¶_‰|í{"Ÿü¥È7ƒÏƒf`!H€êj?ló9”"©%M¹×>àÜb”†³ ò¥/})úÕàrºÕgQÇ•Q ÍÂÚ D†Ø‚úø‹÷(„’¿ çw÷ÔŃ.þ"±âFÐŽºt…ƒà;?…mÞyýÑ›1>ù#‘+Áç?õ›a{üÃè}ðà]}‰"ïˆ|¢ H â³ N„Ô’´÷#ãUñD‡Å¯i0ÄWtZ 3’\N·š@ÜpuTmû#Ù5í© ò¹Ï}n*‚`à嬩3„Õ8> …Œ9$âûÍDŽwÂÂä(øÞÆ'Á¾!¤|á?†ÑI!&¥�ÕÕŽ¨ùœ •"©%‹î5BÙ¨êè¸FpŠI Fð B²„ËéV‹4Sa˜Ì–Ø ñ?ñSF!„ì9K™Š]¶‹s–29¹úVðÙÛ" @ß}ýn¡ÅÅŸ>w·#¶ùYH„Ô’¤{ á�ÑhÀµ1¯ªSH‡–, …3’\N·:,š ÃaH´Ú_²MWs}F£­jM&­âÊõq–òN4Íŵ_8Žo.1eQ¢m%>B$‘h)O}0£%=Ãe;gÿÏm7·ì')׽ދjÿðþC3E`]C‚RüFž†è°Ë—/snnœç#émÎß_;)ëóQO6§Ÿ]‘Á5ó±<Ø•N+|¿ÕyUÞì÷å¾ù,àd_Ý­à³sÒÙ}WƧžñ‰œ ¤Ûne”�6_Ðqe–’\N×uV)Bˆ ú7hÑBû¾„Ÿ’M/Kg‰ š/$iªJ’²H<Ɉç®öDÍWq"È™D«QØK{NÆòðaÜÉ ·kqÙNoˆßkˆ.ö³?û³Saa]s Y›Š.8v»#B”Ç2è\Þ±Tï¶´6{2R%z<ÎT�y&‡ƒ«Ò²Å‹àßÛíÊ®ùþS9è_’Öö@Ÿ,ƒí-é?ÃV3&ûÒß:/Ûƒåùá@¶7³X 8?ÐEY%$¸œ®¿¤É„¨$Žö9’@_„,hzYr‰ vÂR$4}ßÎfj‘$‚è>“r‰dÁ¢)1&sÙP9 ãÜ´f“Ç2üÊ7O›í^8íÍñLÆÃÛ2ಞ…àº×®©0°*:„è aqa‰ FÐèHËŽÒ²Eã¡t[瓟]óloE‚Êóà«WN‰&:l*²à·Û ê‚rÑÐfBò„ËéúÇ¢Lþ>'°#þÂö„dEÓËÒT°ˆį}ô7£í\$‰ Ó%tÏAìh‘9K)œ¤Ø}$“ÒæêÄØæ úp­&‚ÉÃûß”C«NÆd§Ý’V»-/L£EŽå`°#ísr¹sQ6á0ȃ^àˆ¿o( ¯o]”ÎeÇÈ2Y›³îu\ ©¢âÅh¾N=i]–îµpº¢!&“CîàˆLç¤Ó$GÑ4”ÍîMy­s.øÎ¶Üzp×<?xÝ7ŸÉxïf4-%ü¤e~*‹e¾–„ˆÍð³VGz÷Þ–ƒëÁŠ Ï¢©lâÀœã%éGâ¥9†Øï™÷¦"ˉŒz¤3ð¨âs€kÃ("’7\N×/þËŸ»;§j\†¬ÚB² ée) òÄKÚBŒøÚ‚öp¡Ø¢é0Óß ¶ýÂwæ—Ð]ÄÁñýç? §\†¿ø_Û—§lP9‹©rS†{CNÓ”“=éµÿ‘Á‘2NÐDNF»Òn]•Áaàv/D‡=]æÈ8I&¼þh(]ÏCç«Jš{­bH—˜Õ©1ec�#b…‚œ@åË1ïAhËF{WF'Ÿ†ÏCç¶ìG¯7{#yn¢2ÁqFWØÓЖ"Š>ˆžÑçÕó³D¹œ"›Ò¹{7ø_?·ÏgƼ0‚g½í½í¬ðfB²„ËéúÁ¢¤¨Or •&õ†"É Š ó"Ð¥q rpF[˜$‚ØQ®Ueæ¾÷zðýTÛÆXÔ¾ Ñ7(‚œE$‚´:»òà ¸ƒSÂ<!2ê]”­þ¾LÌö›³×®‡Nœy?œ.&V G–ñúB,´ždÃÒ÷ºbx%‚DSAl1`2Éý~WÚ,ĈI¯8¡¬MC 1ûŸû<²˜(1AFÇ–(iõî­é0áóE°D‡ß? æÙ­×t@„”—Ó-LwquNÕ|ì¤ÿA;LH4½,¹D_û­ÅÑI"ˆ-lüÔ(øèm'kˆ ‹" }Ù)‚œ…q€#ÉÓÈŽ¯Ë¾ ßs „^&cŒBäÍûfTûG¡x‚ׇߖ~àhÁ$Ú+ÉŽ¥ïuÅ@¢W]ž®Lœ"ˆ‰’º ;ÃCy6FRˆ &dË|o½gBEQ䕉:‰öjç‰>7ÓfG`žûsQ4ÏËÒîíÉÉÉ£à™MJŒz1ø½'r²[:ˆîzñŹL.).§[‹DÕ‰ÿP!YAÄ!‚€¿ùÕ·CqâWƒöÓE¢ðÃà;_Àgg|ß°†‘ÃÕ®¨ù8Ý’"ÈY¿-½ÝÀù‰þE‚ ¯Á½Wdk#pŒnïÉøÎ"GnʽÞÅàoO£CùB蓵/Ÿ`dùn}Ez[ç¥ÓÌO³!™Pw£øÞä ®õf§#—‚¿æõ+wäîö¹àuð\ô®åý‚¼Ü{ÉÅ”ÿÎ…è5¢>žX9A6¤Õ~Iî-›Hxn:KI2ÁŠ-Ñ>ç-B&c zÓßÝØhI»Û—¡Fñçc-‘k~G#U&¡øïW`‰\€ó$¤L¸œnñ,AY¶'$+š^–E€©ñ–Èë?ˆÞ´8KÁ>±ï[ä¤p’5DE‰·1]Æ72)m®NŠm¾ W]c2£î÷š+|UáÊBĸœn±P!y__$ÊÃì¿aÌh£¯õ3k•7 lÜ¿%]$^Çgí®ô±éÄKò+KÕàáwB")ÿÇTÈ€H¼þÀÚfúY‚H>øh‚ï?´Å¿ þÿ^ð~q’µâãêc™”6WÅ6_Ї‹"Hýi½†#˼dYKƇ©T„(\N·(‚<È×qµ˜|,D™NWcS‘d¶‚Û4rs.*óHF·ßˆ¾C|¦©"ˆ½‚‹m§rxüå,?Hs®ó"ï|$ò«¿yz{ˆ/ÿ:ølNI EóŠ Í¡ ÷úõ×_§3K–ù@°Ä2!>Áåtó‡"Ƀ\W“s+Zp DL^=“w+ú*ŠD9¾6ÂUæHõhªR(‚$˜/PiM¸×HlùÓ?ýÓfj !i@äDB|…ËéæE’y:®³>roµÂDåæC$­ÙŠm&¹úÆ©ÜHu R](‚$˜/PiM¹×_þò—½X*—T$Ó}ë­·¢ÿñ.§›=AHäç¸Æs‚lIw°?]¬`& ˆnÛŠ¢FbßF‹ŸÉ¯,‘¼¡’`¾Ðǘ4ç^ÿáþ¡‰ár§d˜ƒ(F‘ªÀåt³…"Ƀü×Ùt—ý}[ð�§ó„¢ˆŠ >]†øEêB$Á|¡ÚŽñ‰Œzms3‹/Ù©ïoJg0»ðój¹òXMk_öw¿‘üÙÝ»ÖïD_ôd_Ý­à3ëøæ8–ƒÁŽ´ƒïb9á½ñ“èÜZÒÞy0Ýþù¨7]Vu³7’çáÛ©Àw@/ä)}¹Ü)Q§C—Ÿ-„Ÿ“yÐëD#EØþžôo½)ï/£Že¬–s€ð±Œ¹@HárºÙ@„äö·2ÇΟúâ84qjû† ÑfŸúñÜÊÉŠ æ úpU×1~.ãÁ•H˜Dó#ÛÒip „ósˆÈS9è¿$N;ÖÛvoÊèdŠ ›=>ëäð¾\¿ýuùjâgPØñ;H<…ß=–ýþ¶´¢mÂß»$­í>Gƒ´_‚ý@”i]•Áቮʦ×x À¡Ü|<Tðûç—@@õïuzààb„ß›iFt(RK>QgÉ8&ãwe÷JPîQÖ“Êè”ÅåÜ'0m FHUárºëC„äAŽk8x§ƒˆö82mnøÿ¼Íõm§ƒú9“¤V Ü3RM(‚$˜/èÃU䙌÷nŽžµ4˜K~åvJ8x,|jÄ[èÀúêîËAâgˆø°Dཽݎ´tßFyߊœÏðxçÅ—ÐyœFv@øÐLßÁëí˹¼¹-ýhR7Etè´/–Ì-]YôlDa´Ó óqÎ(£ÊÂrîȃå”9 †Ô.§»:AHÐq%YÁ²T](‚$˜/¤wŒ5¼þœtºWÃxŒøNçjxÃü}µ:·eÿh/ µß¼&·^Û–¾së ìDaòýG&‰“eÆÚåú½Ë¡š ×·-îH†ÎVøY°ïÞ]%kÊidrp[®LC /[NáŒ9¡#†û3üN4]¦Õ‘Þ½·å@ÏÇœËÌù4ßï ¢)�×vk6gÓv˜góJoOŽF»ÒnïN#Q(‚¤ãÝwß5B‘°G]4Õº§“ñÙi·¢²‰[Óuü/KwçvP¶4rÏÆ5Ùé?œÝï\ž(Œv®\ÚœQF•…åÜJ)„ä —Ó] Š $Ðî’,KÕ…"H‚ù‚>\©cãäD"†Yv+æYïÈ„Ü=‰F˜áì…¯€�§ë…pY/#F¼°b輎v¿)ïõ.DÂLô‘!.‚`Dûzä¨áõe+aÔ ·Ðâþ ¿œïðôÚç禯„×M¯U4â~J¹0;FûÚ‚Öz¿h®×E¥(Öé ËTX®1%ä…ð¾ºD#<´Íç(Sç51,B™¸dž‰Éø‘<tåßXÈ2ÏÆi$|†U`ù›fú˜³Œ* ËyùP�!u‡Ëé.E’t\IV°,UŠ æ Ë‹ QNÛá ·Ñý[Ò5£Ûá{¶Pà~mEND6 µfÿ³Ïfw$ÕÑ ¾{²wZ€ˆ‹ Fp‰FáÕY²ícŽãþ,AFÇr‚¨ “;!r\לŠ Æ©nËåÎE9Gd)ÔùÍj ÊAû´ 7'<“ñè é›h‘()éÉG2¾)ƒþ®ônïÉx2‘“G2|0~oWn¬$»¹<aܰË-@Y4û=I.£ŠçÓa†i \N7AHh‹uaYª.AÌôáZ]ù,ŒPÀ &ÏfŽÞb$бV>Y ËÑÃø¹ fù3æ=|þªlÛ‘Æ9¼œÓ|’¨ÕE8€ˆÚ¸`Mñ±¢Ì´‡„ĨfºË‘Iªj'FŠ “Ãl·–_,u¯k„\üÍPLpOï³ñ,,£fš V�²"€ v9Š€àPÏf™g#À< ­àØwåA4m&LÄ>Ó‰etÊâr^¿ök¿fþrÙdÒ$¸œîb(‚< ãJ²‚e©ºPI0_HïkN ÙØ¼$KQÇæ ¹w÷ª´°”k÷eé¶7¥ýò+ÒuŒTov:rI_ŽÙ3+'ÈF«-Û÷¬Qê4XÇíó¹.½7³M¹Ô¹…÷‡N:‰ú¹:ƒFä˜~O· q~672ŠD*Và=s\šó¹æ–)ÕÕ:¢e‚íuuû·f¢G˜ƒåÂôÿô`? ©"@�¢àç–sz¯ƒ{yùªôî¿-_Õ¨§Ížì}•ö5é!¤½+ï _•+škÇ(Ç2Ú½&Ýkóytҳܳ¡e2É`ºD.lKºýa”ßætÕß™–OW9/ˆH€ 8§\ï=!Âåt“¡Bò�m !YÀ²T](‚$˜/èÃÕdǸ)ð^‡ÀþÒ—¾dcN¨/ßúÖ·Œàõúë¯G…÷xïIÓàrºn(‚< ãš#ºcpç£nÝúÒÜÀe`Yª.AÌè7Þëy°L*® þ’ú€è/ùˉ9`TÃçùN"Ä?¸œî<AHÐqÍ35w«/ûUk/û_OX–ª Eó:ÆÍ÷ú4ˆ€Cüâ‹/4•ä ­´ÓTãôÒ4¸œî Š $è¸æE4ÝÃå÷ó‚e©ºPI0_ cÜx¯“ÑÕc ˆpšDõÀýƒ…i.ˈYœCš —Ó¥Bò!ÇUóϵ.Oó…™ß&‡2ÜÁÿÈãæ;ŠrÊmvoÊkÈÓÕÚ–[îÊVqœ&H&ã½›Ò1ùë4÷˜[dÐu­Î5¹fö®$7?÷‰ßŽö«Û.ÿÛ699D«NÎòÍåå›K©0ȽvEß ¯Óæ5¹õò˜û¿õ† Ì5Òß óë![¸ÿpZÍÄÎUh,Ì™f¿*ñ}Îà7I5¡’`¾ ãúÃ{}6ˆ°# ¸’ˆÿ@ÄÐHžU§¶pz i:ðIšºœ.E’y9®F0B‘w‡Ü+&Ö{Qrt³¢Û§2ìžœ÷ðµIf~<”n «Ñ…SLâËÞÏîo¶vle;¬ø¨ïeðÛfÉýhYÿ(©{¸äþ‘ Ó%ý£*7°ÿ'á5±¯Y|µ=s,ø^´zßV_&ÑJæ7£Õ,±ò9® ]ùŽ"Hu¡’`¾@Ǹ9ð^§N1DC8MÆ? V zcñ#§Ç&ÓÔåt)‚<ÈU‰œxó:°²Ûý~7Œl°Dpå¶„×F4Ј˜®Vè"¾]Þÿ™ŒGoH+ÝMWšËà·Íçšï#wÌy/!‚Ø×Éñ VG÷oEÑ&ÑjvTM«#»{ãà×5Êdv¼áù~TŠ æ úp­æG“µÄf˜J̪Œ`ñ%;§ŸÙ¥Qp[‘²«ØË䯬sWÞOü¬/ûwŒ‹- z,ƒhÙS=>+ÜoZÙF rô¢PA,?üZÐÈÜX+ë5ŽPI‡òÅ/~QvwwR"z? |d)~Øpz i:M[N—"ÉíoeÍ)‡}Ü“=éµ/ÈÎðPžé{i„±e¾·ø±ï"È÷Âȉö ŽŸDïA¿múë›aô…™}/ r¦‚}^”öÎ?Ã4£0>Í9s¬6Q$¶-¡~Ë«,‘ü¡’`¾°¾c¬•aÁ'…ÊNÕÜ“GÒ*Yà®$'·e»sYÚsawØöe’ÔŽAE©Ñ¿»~[þýW“>»#“ðwÂßÈÉþmé´fjvâ‡y“'r8¸*›sâK€î÷üp Û›z\a…¿ÑÞ‘Á~ãXöû¯Èí5²`SYïÿûò…/|AþÆßørþüy³ä*ÅâÀR·ˆÎ@ùŪ/yGæpz i:MZN—"Ƀ\WÍ ì{³Ó‘KÁ_óú•;rwù*¶¤Û»&í òrï¥Sƒ…ç¥Ó ú–æ5úªO¬¼Òj¿$÷Nœýg#8öñʽ¾lãûíkÒC4H{WÞ¾²âoÛýÛ9AæŽñt´FÜæ®Yï]ù8è—·Ì ãËÁï„‚Ë1úâÑ1›æ>±r…ýüí{)„£lÀo’jB$Á|A®*‹ aåt^¶úûQ¥äA0¿ïºô÷Jë²µ¤VPÑ~øa¨îÚBBü~;p¸’>{¼o‹ šäIÃ÷Âù„SaÇ›óhDrLÞ6ó ÍûAƒ‘õœÃõïuóÐÈ��Ñ:UÑo½õ‘ÀuÆ5רD€}9=†4&,§K„ä×*‚d©¯HwêÏ<“ÃÁîZƒYÀ²T](‚$˜/,çϦw@qÃØ,Ä‘¡úÄD0DÙ™»7¤?:Ž"& ì^“þÃP$0„¡rá÷msL·1aoáç­NOî ‚o+QWnGÉŽ.[‚‰ÅœÐÃùYô;æ8‚óëÝ•á4rç²5ûóýhÎa„Q´M&ü§×ñ{Ñ£ùm³�Ç (‚¤ÇYÑ�x‘ ¸®DÖ‚“ ¸îÊž’Âé1¤éÔ}9]Š $´¿Eª„íãÖêHïí[”ËRu¡’`¾°Œcl"L¶ç§fzÇ,u<ÄÊP çÿ" žFÑØþRñ0~$OåÉH‰‰yE†ïíJ; W›qZÁT˜+‘ aÎc*>X¬(‚löÞ”÷‚kÐÚÈátŸ±ë2Í>A¦Ç¨™µ?ЄРeQ8àpÆÓ8¾Ø‚ˆFˆà{pæ1ƒÉ@0r]·¼§», §Ç4a5]N—"É:®$+X–ª Eó…ôŽqèðÏ'óÎþé ÕÇòáèmy0èK¯wGFã§ròáH†ÒïíÊí‘• Ôìk‰Hir£¸�A©)óûÔi++‹ #ynSEËy™Ï8¦ŠÀ1Ǩ?œÞU hÀ~pͱ/Š"ó¢\DÒ ‚¦ QœCHý–Ó¥Bò@û[„¬ ËRu¡’`¾ WêH³Övpç¦X"ˆ3Cµb Ñ;3!#úìïFD8ýÄD|¾©0æÃ€(+´É:m±Ž"“0K¶u}f‘3GfJ;1êÅ`ŸOÂ)Bš5Z}£Ý‰D'ò`÷¦ÜŸ‹xYŽeîu‰çÿÈ8Ë?°Oˆ!¸�àHÃùÇoÖÑ¡†àó†p Q0ˆxÏ·h´háôÒdê´œ.E’t\IV°,UŠ æ Ë9ÆšßcC6Ze»w_ö¾ª91ÚÒÛ{:ïV†êÞ{oÊî•krÍ, àPF»×¤{ ¹C4oÈrÌe‡6B’!Ësôžm—:Ò1Ù´­h(ú¹ %FäˆÞ‹Gž8?›Z1BˆŠxÏ×ìzÅ—ð 'Q~”SKäBôèufç4·RÌj`?€"ÈiåÿÈ8Òø=!¶0‚×T©B~8V·}>¸–x ñ×´ ç’ˆV*ìpz i2uXN—"Éío².,KÕ…"H‚ùãæÀ{}8´ˆN€QæÈ>~[#'TL€“{¦ ÞÇç0l ñ!/±DÅ }ý]‡ëØ vàó¼ŽÇGp¾¸¸/œCšJÕ—Ó¥Bò@û[>37 ¨†d ƒ‘µ*bìsX箼hëøûæ3;<šŠ› ‚%pß”ÞtÙÙŽì¾ù¹u?¨po|€qúÙ4ÜP<'Ý{Ò¿õ¦uŒþƒó!Õ„"H‚ù‚>\tŒëïõ<pô×ÍÿQ*H¸Ä[°MÏ+AȈ_Å ˜Na©øÒ¡c¸¸þœCšNU—Ó¥Bò�íh>ÉèÕ¯¬6ܦÓÒuu”Ölºx|*8¦qïÜ“÷/ïÍŽhèëwfSϱívG:íN帛d»QâÝPpÁò´{7åÊ®5eÞÅÜTøGÒ¦ÙǦÂGÑÙ3¡$xkü®ì^¹™Ùõ+‚üÊÉŠ æ úpÑ1®?¼×3àÌÃyÍ2ÿ‡OØ‘‹Œ‚Æzpz !!U\N—"Ƀ¼W#œSÑb}æEM/×è9ä3öE1‘“?´¢EôógÑ*ØOp¬fUƇ²ß¿,[ÑêŒ!X ñ¼c¡…X"ˆ4:ç­}Û"H´J¥3 ¥ZP©.AÌè7ÞëD4Àa…BHV \áãôÒtª´œ.E’¹8®f€–Ù÷ÆÆeù§}Dm„Ñ›­ÎmÙ?™DÂ@4ÅÄòØ}4!aqZx #a#>%&¾x¤ÈL…¹nVa4ûÛêÏ"DއÒm9V}Lƒ•Ó¯Õéɽá•WÐAB¡ÅuÎUçJª Eó}¸(‚ÔŸ¦ßkÍÿÁ© $/YÃé1„„Ta9]Š $òr\]¢E(*\‘ÁøY¸J¡Â|‹¢-Ò‰ ÑkL/Ùýz:Sa®D«2š•/AÄpJIÈçáÂD‚¼"Ã÷°ãUÌ­˜x¶bÎUc×˾ˆþ’WY"ùC$Á|A.Š õ§É÷)Sˆ ¥'yÂé1„Ìð}9]Š $òr\çD‹ÉXF÷oI×D‡DNýäP†;X}1pôã«:8-‚œ5ÆAÂç¡¢‚¬5›¶bD‘–´¶r8=¸X>$¦ÓaŽdÔ»pÆ>4)kL(1‘$Õ@@^e‰äEó}¸(‚ÔŸ¦ÞkÍÿé „§Ç2Ã×åt)‚<ÈËq‰.J{猟Aˆ#AãÜ4QèbæE‰Qã8?DZug‘2 #TÚ»2:ÁƒýÕZzoÊy/-R‹ Ák3=è¼tú¢)11!%š>ÔêìʃƒðaÅŠ ¤(‚$˜/àá¢5Ç@“Dæÿ eÂé1„Ìðq9]Š $´¿•5áª*ÒÚ¾#ï}õª´ Xt_–n{ÓÇÑçÓ~Ÿ‰„øÑ¼81?=D·OZ"בÃÃù¹5µeú{eÐÙŒ¶S♌GƒÙ¹°vWús9>æ™;^#„DQ+úžmÑoOÆ#L—È…mI·?Œ„—j€ã&Õ„"H‚ù#AšCî5ó_àôBæñi9]Š $Êq\ŸÉxøŠt§bD‚]¹=È U„"Hu¡’`¾ǘÖ«3ÌÿA|„Óc™áËrºAH”ã¸êt–(êQ’#+¼ÅZƶÍ%¦ùÔ œ;©&AŒ’=igþâ+œCÈ<ë,§‹ï­»œ.E’t\IV°,UŠ FÉ–×_ù?ˆ÷pz !§Yw9ÝU§R!y@Ç•dËRu¡’`„lP§£ëOž<‰Þ%Äo8=†yÊXN—"É:®$+X–ª E#„¬¦¼øâ‹t$I%áôBN³Îrº£'ËE…P!yPœãú™ »çƒßËyÙ×¹•`"kudwo,áB2öJ3ár½'é¶[sÛÍ3ËaÒêÜ”½à;ä4Å•%’5AŒ²šÿã­·ÞŠÞ!¤zø0=ÆÕFÑhjˆÎÈrE–4µœ.E’…:®F ÈY1`©Û Ò!Õê±ì÷·¥e–ª ? šFÇ1Ù—þÖyÙ|,ϱlïæŽ çeÉA_¶Ì¾'f©ÛÍî0Ø+‰C¤ºPI0BÈêhþŒ¤RÊœãj£h4Û , ÷FѬ³œnñ†"Ƀڋ “±ìív¤µÕ—Õ6,ÄSßkKwø™Ù,ä©ô/ÍV|Áw[§…B¤ÊPI0BÈò0ÿ©3eMqµQ4šË²X‘eYò\N—"ɃÜד}t·Ìþ7Ú7dˆ)$–2?LAÁç­méC¹<y$ýιàÿËÒݹ-£çQÇÆ9étoH¢†Å‘ÄŒÍhßéÝ{[N,ÑÂÚ‡™3HNdÔ» Að@NÁ{[²Õß§É&äTŠ Õ…"H‚B–ƒù?H(czŒ«¢ÑÎ2ˆ«®È²*y,§K„äA>Ž+¢'.K»·''“e°ýB(,8ä i›Ï!HœÃT“ÉX>ËÛŸCÔÅS?|$ãÔÏq 2| ½v8Õeî«q¤3±ù`v,3bÂÈñPº-Š .(‚TŠ FIó¦QäôWE£-²UWdY—,—Ó¥Bò ÇÕ5­$`Ny&ãÑÒ7Ñ"›¡Èpò‘Œ†oÊ ¿+½Û{2žˇ£·åÁ /½Þ¥NHªÓaŽåd´+m“ÏÃú.§ÃäEêB$Á!é€Èü¤‰5=ÆÕFÑhi L‹Ž Éj9]Š $ò‹¹$­ÎmÙ·§¡LEg¡8a¦É<qLAQCç‡=—ñàÊLˆXˆýý#³ÿ¹c±§Ô˜Ä¨ƒmŸÈÉþmé$%FmïÊèäÈLÏabT7Aª E#„œ F¿áü1ÿi2ELqµQ4Ú2¶(÷F^¬»œîGÁ÷]S5BV!7ÇUó{ûo]¾*½ûoËW5OÇfOö>Èv ùB®IÑ í]yoøª\é^–¢½-ûG{²{åš\3Ë×FyClÃ…Z‚ýâw6ÚF™`Õü–y϶HøÏãKéN#D47 —È= \SRM(‚$!$ŒzÃécþBBòœãj£h´U¬jËé¾ÿwçTU ãJ²‚e©ºPI0BˆŒv£Ò/*)$!U!¯é1®6*n¤Y@XÀ�±«,¤1|·hVYN÷·Ÿ¸;§j„¬W’,KÕ…"H‚BN£ù?Š\”*‘ÇôW7ÒL°¢J¹7ŠâÍ2ËéR!y@Ç•dËRu¡’`„vþN!d1YNqµQq#Íù>VͽáórºAHÐq%YÁ²T](‚$!$ÄÎÿAIOVÓc\mTÜA®Uso@@ù¤}{Ñrº‹D¢ÅR踒¬`Yª.AŒÂü„¬KÓc\mTÜQ f,›{C­ŒÄ©g-§»H)cJ©>t\IV°,UŠ FHÓaþB²cé1®6*n„Ø,›{Ã6Ÿ–Ó]$‚èvXN—Q!$-¨‹i´¬ŒTŠ FHSyòä ó’«NqµQq#Ä¢$ÒäÞp¾‡ÜE!ÞғV•5¥‡4‹o}ë[òâ‹/FÿåOÝ£Þzë­Ò§[c‚S¾›E#¤‰¨“ÆÆ€|XezŒ«Š!g±Îrºe$NÕåt—AÔʘÒCšê£OV¤àR8G ” D¦º_grŠ FHÓ€¿ŒcFYe¦Ç¸Ú¨¸²ˆ³ro,²²–ÓuuLms+¬¬)=¤Þ-J¼þúëÆêŽSJp_9ý»YPI0Bš08bl�)–´Óc\mTÜI‹+÷FZÃT•"£BÐ uuNÕ\Çh[SzH}Aì¢@¿ íDÝAXöy¢\ä½%åC$Áišÿ ;óR<i¦Ç¸Ú¨¸² ñÜËX‘QëŠ j˜Tô”R/T´.ª¯a¿× @ ¹Lë¥ìi9¤X(‚$˜¯ œ!©¶ýQPÇߣÑÙÃþPþþ—þ‘ü¿ßø÷ÎÏi´¬$sÖôW7BVÏ¥ÏËéf%‚À¸œ.Y‡¢£@|HZ8×/ùËÑå€vm0›Eó„pb´K¿­ÚI¡Ñh4ß ÎFf±’Ggg$Mq]ø²*x×IœŠïæE–"ˆ—Ó%Ë¢QE:ÈhÐÐöù˜´È¤·¤|(‚$XY`®.èUçëÒh4ZÕ óöáHqE÷ô×5‹!ë‚—U—ÓÍ+Êb‘²Î”.§KÒRt¾LUnZT‚çÛ¤èB$ÑŠ 4:aßý“¨rl0öô×uŠ!YÔUû#Y/§»H¾Oé!Õ‚DÑQ ÀËžR4>$GÕ{MšE+Œº¬º\F£ÕÙàÔ 2®Éèô×õ‰!YaÀ‡(‹4"€ðÆu<‹ ÇËåtI¢‹^¦HÓ¦em“DSVä!A-O4òÃõ»4Ödû7ߟÿ¿ébFíë‘d„äÄŒU£B²ˆ²H+‚(ëLéárº$ŽNKÁߢ@_ôoú€ÉQ¯¢E/RA,/Ö 3¥Ñh´¦Z“ÃÖ]×#n„äE™QËŠ r ­Ú×Âw™8•�D'#¢©Kµ"ù¬ÉQ¹Tns ’`YƒÎ;§¾Ðh4Z²Å£@âÖÔ°u×µˆ!yƒÜEGY¬*‚€uú]y%z%Õ¡Œ(�ÑQMćä¨�ÓP›‰ÓD(‚$X– !Í*ú : su1Zþ¦Ñ†$ÿ÷ÛoȽ½çç4Z‘†©Zo­š¼0nØg“p]ƒ¸Rx®]e0á»ËDY¬#‚(˜N·j u £Bš ¦Dà€ÛK¤7 ¬ŒæC>LËiªÕ$(‚$XV ñuí?­©ØÁ ’$•BÚ”µåIõÀè,êEˆ·¶(²( $nYnŠsâ:ÿ¸R$EEYd!‚�Ô\N—¤ÑeD@�ðaJHY@xò!9jWçi"A, V@4 GHZÐ`£ÂÆ<Æ¦Ž jçâ?ü±».\dBš'ÄuîqãsOÊ`( ˆ‹ú9Y‰ Ä—U#Ò ú4¡¾!á€RQ MOÊ鋸 S¡H½¡’`ë²Êê/h`ñA–ÎÄ4>Ì¥$dà\ êmY‡ Û×}E×yÇ £–M[R‘øÁºQR’ÈZ8^.§K’Ð(2¦e ¤É‚6ÎÝ—Hô«U]o(‚$Ø:,+€,Jˆ *h4Ö>„’«8(uB\ç7Ô¹Âè%ÅPRyDYä!‚(\N—¸@]ŠÜE�ý¹¦ãKrÔ¦Gå4Š ¶*ËvÞ±=§½U@匓J5©#Ë:TuB\ç7€‘KÔ œGÊý™u§Úä)‚(«D ©á»ìÃÕ‡2£@ˆ³Œ)8¾áKrTŸ¢RH>PI°UX&\FU@#F‚Ž©;p.–‰¬«k²T×¹ÆMÑúyN!e±n”…öŠA@Q‰^‰ß”8ý"|¾D7£e?»¾PI°eAèÚËêÚQ'ù£Ê4ó&±ŒÀŒÜuÃužq‹Ãé1Ä?cÕ( DÊ~<û®Î©ZÖ¬“è•ËéVô¯ÊˆB`"Î>­Ì‚ö“KåÖŠ ¶ hôÒ†mc¤$Y4 P¥Y!“&²ŒsR·å,]ç7œC|`(‹APlßûcw–è£q9Ýæ>VYQ >9þeãÓ4”2ËÉŠ ¶ ió€`”€UÐü>Ì“$¤,bŸFÁ6u›]ç·$8=†øÄU£,þ¿Ÿˆ|+èkÅ;©y²l^"Û’½ã]Öt ¬Ÿgø’Çà˱ì¡’`iA#ùo¾ïÞ‡m@È*¨ƒ‘\„KÒt „¸êظÕiZŒëüâ¶N!>�qrÙòjÿÓŠ|3x®íNjÞ¬s¼|¸œn5€�QVôíÓ ßëË sµÔŠ –4Ž:J€Æa›ñýÀ˜„¬‚†Òi!dž´9Bê–î:·¸¥Ócˆ/¬e§ÑÂNjQ¬›èµ®+WÕôµÊŠÄ€ƒ:™Ìð)9*Wí©/A, ®eྠõ¬[X6)4ÆÌÿAH2iFgádÕ×¹Å--]Æé1ÄÖYN÷íÿR|ÿŠËéÖ2£@�“ož÷Ä—)0@{IêE[²¤†ÐŽ a‚,²,ÌÿAÈbP§I†ãQu\ç·eáôâ U[ž–ËéÖ‹2£@�ú{œî<oÂÊ£'ëE[DšÑ‹ÿðÇÑÆ„¤@Gh™ÿƒtÀ™pÕ½¶Õ!Äu^q[N!>±ÎrºÈTt”—Ó­>¨ËŒÁT˜2ßg ÒûÒÆ`/ÓsHvPI°³8+ D Ÿ³#.ÐèÅ£<Tõæ¨,!Ë‘fZ œ•*ã:§¸­ §ÇŸ@¿iåi‹~Ö×=^F — ê¾2ë=DþÂÈipo|IHʼ-õ„"H‚Eš¤|uÁ&ù�Õ‡Šh€¡xsN(!˃ÐtWlV×9Åm]8=&„ P¯kŒªYŸu§–±<mÕŽ—Ì"áÊ„Ó,’ñ)9*Ú®àS?(‚$ØY,š Z‡ðk’*xÀ *Ãá@#ÌFÕI3=±ÊN†ë|â–êÔizŒ ÉC‡†„{e„i} ùëûë{¿¸žú™vìÑà¸8õ1DY|ó¿¸Ë{+z0 ÇËåt«žÇ2l�&nPGâùÚ2£†HöPI°$ÒŒ:²!#I B·;Ç/¼ð•eBÖ·«.¶ ÎIUqOܲõê)tΫÔáƒC¡B‡ŠZÏâ5LE `EÔ¿86ý===F\g#„ü‘QE›ï Šåp±,®«Ü/2Dˆ”Ëéúž/<{e>c¨0FÜø&¡^öeÅ’ A, ®íÕ˜ „$FW;å¶QY&d}hÐU'«U9BÏu>qËtÐQ?ù8=u):¤86DYà8UD°EŽ*‰¶ˆ?/t¼ñ~…tBµCúÍÏÂÕ÷\å‘A-ºo†Hô ]dzÈð]ö%óCëŠ2Á3îKÎ _âK´ŽÃ'Q†¬EKbQ,tÄI> B'†ÆK ™m*.¬b¨àì}i禣s«vDѱMúMt€ !«ƒÑSWl[UGX]ç·<@]‡ú©ìé1Zçkýa�õ©ÖÉu×¢"Dôüq?pþx¿îÓilö­#‘»bî ¡E'"Eô0—Óõ 0(SPÄs‹g™œ ê<Ÿ„"´=uosšEKb‘ªÏLßë CˆJGÅüÓyÕ0lJIm†ÍZ`èdêïèñÀp<ÚµßquJµÁ‹›vf9@Èú, A¯ê*1®s‰[^ >E‡ú7µ¦udÖ €À¡u-êIÔ±¨'› á×í^´‘z}êF\Q{ïW Á`VÑ9‚¸œ®? Ï…ç§L8µ"ÚÿöÔ³0R(‚$˜‹E#œ “tdµ#‡†�\íÌ¡c‡÷u”¯ÌÈEàøô<T$³€sÁkT–8_ù•_1ç†smÂè%!e°()aU#õ\ç·¼A‡z õœ ¨Ó`Y�ûÆþP‡â5Š‹A{‚¶FÛQ´3u¹vI"ì;R­D¤èr9ÝrÁ€TÙQ @ŸQr6hЗöêYR(‚$˜‹EKã¢q#ntdO;¹¶H€† n¢@\䉟3G4 É8 ®ºY­ªKåºÎ%nE€: :wîÜ1ulÕÎ<ö‡6ûD‰ºÑgÑ» ÀÉÓQæ:"g‰ 0°îò´EO“ãrºåúV&xñl²¸­|ÇãŠø&Õƒ"H‚¹X´ cÑ˱ù *t¼ÐC…Ãë&GAØÂÄ4‚ ó&$[âõòýÃÐáøú÷ÿU$~N.+ ÔS_üâåÇ~ìǦ"È2Ñ hPâ;>ò÷ m.Ú´ÁpþªÖþ¦A”E}´³¬èD¤ø-.§[,¨{P_•íÀ¢oÌh‚ôø&:¨/CªEs±(¹UÓCÑ‘E‡•;­(ØÁMR×5ó©Â'¤Jü»OÜõ³ZGQ]ç·"A¥ˆÚ¢hÔu¨ß°-œq¿¤8Цà¾Á¡€øT•èeDPµD¤ˆBárºÅàCÀ1ЉN }j/t€—TŠ æbQCÕÄE>ìQ=vnWR­\á(@¡ RU&r<ܑ֯¦tAå°Yî+Æx Î@Æø g¯£ªÊ"¨Š«-¸Î#nEúÈ?ÔPÿ»ÐQO|ŽF¼•î  "¾ß“eE‘UJDŠH”U·è(–*¢õ–ý)ß"|uÌ´,‘êC$Á\¸¶³­) `8s¾ÄtXñ?©'2ê]ÈH¸Xr_'{òjÿ¡<¿>ƒç£žl.#‚¤ÜoÑ, ‰¯â 1®óˆ[Q îG'^ÅÛì: ¯µ`Ýå'ˆÎñ] YUë&"-º®¨ZK•@?Õ‡( ¢N$éÁ5C=åö9à[}(‚$˜ ×v¶Õ<ð g.DP颳Яœ£U ,䙮ʹÞHžÏ½>›åDôû-šE">¯®óˆ[@ü†#ˆ5{´ŽâGµ@{‚¶ÝG1dD©Z"R.§›-(ϾD_ ÿ#éÁ}Ãýó _D5²AÌ…k;Ûêˆ:àÚ©Eg×ÇÑ¢¦�§/(ãUKr×,láb"'é¶[FDlunÊÞøYðþ± v¤mFÒ·dgx(ÏÇd'Ún£µ-}ãµ'ˆ “Cîl…Ûnœ“NÿÛòÉh7Ú_Ì.u¤³üݼ!÷î^•–¾ Fi_•nç\ð>öõ08¶+f›ÍÞ{òؼƔœïɉý;òþÞMé´ð?¾÷(8Úò@¼«~V£’??ª‰F† ­÷e# ¬›ˆ´èzcÝ(.§;ž/+ž-FN//"–‚{ˆ{Iª EsáÚN­ªK/&¡ ‡:ÛìÔúEüþP ñK¸˜ìKë¼l>–ÉäclŸ“Vw(?8èËV{WF'OMdEk.ã3vÛ‘ð±($Êb¾mÛ²i¢4ìבÐÑêÈîÞ8øÆsCؘAp,Á·ŒÈqEã#ëûeÐ9oOôþñPº­ ÒÉçÓÚ‘áqyC‘õuÕÑjA²u1ŒŽQ$¯>hïµm)ÛñÈJQÖMDZô”“ªE±øê#”eúHpœq,dyPù}Ž{IA«ÚPI0®íÔÐØÔD{й®hà5R‡÷Ë7,áÂ$½$ýƒ§Áû‘`±ù² î^1bHP×Z<“ñè éwá¡ÉP“EÉx$÷ûÝ02#²Ù“‘™ÃâAT„y>’Þ&Ž÷3ëû "ˆ&UZ[z£òbA(‚:€˜¦cg°^ m¨…¾@™ƒ Y‹ êU§œ ¢¤È)'ëF±4y9]´èù€O)U׿¸—\å§ÚPI0®íÔê ‚À†3-éjaG†`n·OaƒÍÅ.L$Ȧ´{{Á»ˆ®¸0‹™Ny“0 £}C†ã'³ïÛû²9Ù“^û‚™Fól*b¬!‚DQ)ãáàðúØ|ß5æ·ÎAL$H8•§¼øAŠA£–ò¢‚Y$ šçSÀT($¾€¾€¶+eDùä%‚€u‘=å„Ëé.‡OQ €É4W×Í1KAèÛ1‘å ’`.\Û©UYìIÑÊñ!ëcÞù¦š7‹H`˜FF'æÙïo‡ù9Ze»÷uyüx ÛpÛפ‡hö?‘A°3Ê"šZƒ|"ÝÞ5io`ZʧáÔšs²=8Çúúîy9A‚ýÄ#8Ìÿv~‘öŽ ‚@E™à½Vçš\3ÇGõxî7§9A‚íÚ/ɽYŠ ù£y‰Vs.tÉçóÒ~½÷LÆÉØœí :ûeDüä)‚(3V AÞŽ¢§œ¬Å‚ï6%q*Fé}qRÑÏFûHV×mŽO ^Ä=-C&Ù@$Á\¸¶S«ª¢£yœË]/¦Nš Eü°áÕÛ‹§rп‰iËžÉáp oQøŒ ìE¶)Eˆ �Â�VVq=[‹¬Œ)'\Nw1ˆlö% ‚ Éê îñ-Êí!« EsáÚN­j":°ýÁ©/õÑ Pª9o‘4Š ù€6âÇúÓ"läGròðMª�2¿Š’±­ÿ—ì=ˆ"GìÉ`{+Œ ™Œet;Ê…c¦= óÿ›é[fŠÍ fÛéûWä–ɵÃi7«¢'E !E‰ êu‘=å„ËéºñmªêM:Ëëá£à€¾5ó¼TŠ æÂµZ•Dt^ ¯Ô™å|îÊ¡÷õzÎ !þC${T�ɦ³7An ¿)oŒ°RQ„;Ç´5Ñ”óþéÞÞ‹¦ÌDyu¶rø<üÎV_&–ð¶UÚ&a¥¥¤½ó@ÆööØYš"…¢Eõ„ë9KcEO9Áoq9ÝyÐçñÅaFýÉiëƒA=D£ùê@Ô…¤šPI0®íÔª"‚ ¹ØÕóEp>wAã»~»ŸLGŒi•°¼¡’=¨;² åŽDVGzdnÁTÄ8ŒrÎD"Í«2ˆ"FÂ¥˜£ÿm±cúzlD’­¾ ]2û½nc¿&+S”R–ÕQ¥)'ëF±Ôe9]”Mˆ ¾€ãAß‹¬‡ÉQÊZ‚0ÉŠ æÂµZDTÄpBÖSÇ9Ÿ»Ê`$·nvŽ5ÉŠ «á:¸åFÞ²OÃ6ÄDqÄ…sLqùÊMé^Ž’ýöåD…w4ôÿÖŽ ›d¾á¾t»›2Ü —˜Öå§CÑ$ØþøÈ$"Þtý6Y ¦ä-¬—)‚(È÷Q•)'ø­¦/§ëS@¿‹S’×Ç×䲸¿\ˆ šPI0®íÔ|AÐ d3j“ß|îp„.ø®é¬þ(ì(ë2¢ÁvœÏ ¨°‹ e.moܸAóÜp¯ôu^PÉ]5ÛdtŸÉ°wKF'§=CÍÝa¢Dî}]FF\§²ÌM_1Ë5£9'Þ›r`öµMfe£Ãé/ݯû8Þ¿,íW^“^о´:·eßñÛd5!”]”Ði|AÀºSN»£Hšºœ.úº>E€ìëÐæâcß*Œô©&AÌ…k;5ŸEtdá|dSqÌDÌçs롽³;¾œÏ5Bê25ÆAˆßq¯(‚dê8èàÂÉ#éo¿,ãCÝ¿#½Î¹i$Çz ýÚŸéôM’%('pLòJ°î‹¢ F•¦œ ¾[5Šß-2Š% Яñ) õ§o¢L•ñ19*@߆BWõ ’`.\Û©ù*‚@ø@%»J#Aò˜Ï=>¾+Ç£]ië÷í9Üök²*„TŠ Õ"Èj¸Î#nYƒðÞBç_ŸìËÀDú…Q„­ÎMÙ[wš¥i_4*Q§Ó¬ÉsôÝ7¬;å¤è:¨)ËéBˆóMpÀtBß’yV“£®þSM(‚$˜ ×vj¾Š pr³«Ekd>Ÿ;ø(Dar¿ß•¶™3á|îAù¨zM¤:PY ×yÄ-Ktt¿.SæHþä5B룢TmÊIÝ—Óõ1J�¢ ëÑì€ÐåcrTä|ÉsZ ÉŠ æÂµš"H>#yŸå4Ÿ[¿ñä»r¡¤Ý•Û£dŸó¹sá{y†2Eê@d5\ç·,A‡ÎÇŽ&ñ8ŸyDú,‚(¨SVQR¤¸°nn_—ÓE}Ÿ¦øj$6ÉÜ_íGø„ö¥Iµ ’`.\Û©ù&‚àDEQØ5Îç®,pxª<-†"Hu ²®óˆ[– >(,© yDUAëN9)Z\@=Y§åt!Úú¶BŽÓŽI¶ø]ƒãªò€b¡’`.\Û©ù&‚¾dçsWTÞUÏH¤:PY ×yÄ-+8¢EVýެ—­Š¢@ÌX5*EG…Ôa9]£@�Åä|ð5ÿó¿TŠ æÂµšO"ˆFøÖ É+”¹(‚TŠ «á:¸e:íœ S>“ñ»²ÛA~­sÒé?šOBnx.ãÁKÒdxó×$²S5@\@ ×sºÈʪ¾œ®Q Ú'Ùƒ{í£Ø�1ηļäl(‚$˜ ×vj>‰ Á#«PÕ^AªEÕpGܲí‡oEó@ò˲Õÿ¶<ÆJk‰„Dû‘µPEDYwÊIÑâÂ:¹MðÝ"£X\ómЉ2óbƒ¯B=ÊbaiÈÚPI0®íÔ|A‚GVÁçP>WRø#Eê@d5\ç·¬ âeÐ9ïU”GZ²ý®²¢ Îq=³i¬èúªjËé>õ;%\25?|MŽ pß³žHòƒ"H‚¹pm§æ‹âså@üÆç0xʵ+wIŽ5Ɇ"îEõÈSy>êÉfPZkr +„µ®Êàð™LÆdǬ†ÕŶ¥¿(£^;øÿéÞÚ•N ßyM ®KÛ|?Z%l2–½ÝŽ´¦ß³oîI´(¯ÔÔ6çÄ…b)α vÌ÷Í´—Ýwe<™?îÍÞHžG[ÏÀT˜+Áçá¹è9lvoÊk˜Büî­wÃã×c˜š%éÃýê›g2Þ»iÎEocãJpþ—8‡y°,©ƒÕQ%q¡ Ëéú:õ[ûá¾Wð5rýSF�UŠ æÂµš/"ˆÏabMbñ|î€ñ@:ý/ðY@SDÍCô˜O;ÖXYè|ôV´L3ÂÌ/YÿÛÛÙï‘<H¾WÙAd=ò üP0ø4xîÚ±h<‹Ñ{ÏGÒÛlI»·''&IvT—š×méŽåØ,¥¾+£“™çzµÉÊ;&³,¼Š.‡ÙnVBK bo 'æwqç­ó9R&á1š¶ç(øÞŰޛìKë…à÷?]ùºæáüÕEQïÃwqAÁoù¼œ.¢@|œú¾ ûáùâk¤ sÁT Š æÂµš/"°˜¤lª9Ÿ ò‡¦_ÖÐ(©•µ]¼xÑ[Ü †à/p:ÖÑ Cv'~2~$ã+™íÔ!yqæ½ÊŠ ë¡Ï\>„Îzè”ãõ…ȉ&ãÑÒ7+ŒE‘Fp€°xÎ×GQ4„U'löd4õö#aÀþÜØ|$H±ÇdEsLÛ‡PŒ c5dv®×¨ûFr¿ß #O"ÞŽx WuûÑç0Ï£GäsŸûœ™~H#µuA€ïâBÔ©¾-§«Î¦ùPö9%"_ÐFù:}›) ªEsáÚNÍ$ß,IGuçsCÌøíßþmQ´¬A•×ò—µ%‰ 8^ü.ÇÚŒ´Z“÷å+ožŠöGdwdx|†Z…pòWïs©æ58ë^eEõÈwZœKpøžœŒv¥Ý¾!Ãñ“è½à„ uï­³{yÇÖO‚'½6"1V9S1û¿ ;ÃCy†é3Fðr)<‡)Q¤È ×UËS8(C TÃ!\5:¤Ž"ˆ1Ã7q! 7>-§ëk`rÌüAŸ3¿vj=Ðgå`t5 ’`.\Û©5AI?wúxºíÙs”‹œÏò˜ææHŸ1•Űê|î�L…Á6舚tðzóšÜzm;¸Á¾n½!3;:ç|n\Bvþ^x}>XâæA£‚ÆÅ7TìPK7FŒH9ù¶Ü>¶à^o÷o3pvÎÏ¢ENöe€ÑßÖEé\Þ2áá'oJÏ\gD‹àÿtƒrӺܑ˛ Ä2å¬{•AÖwtâó@ë`<GÎS66Úòʽ¾l£¾j_“ž½öÿ-øûßGŸ[¶yI:—6£×==³Ú<ÇÛw—)Ë=¦EmH<jEÑœ ئ-/÷ºÑ9Ø6>½½G2ØFÔi½kÁoB|ùT­h}¯µ=Ãç«]Wñþ„D bßp –m_ê,‚€uÅ…¢ë3–Óõ9 å‘�$_|ž¾Ç*Y$(‚$˜ ×vj¾ˆ p óS ÃÎYª¹Ó*b$ÎQÞ“'+Î;ž'ËcÉs3-"™[~¾ê|$‡qüî“pΈ2Gáë¹Pd{>÷$­4áÔa® s —8‡8¾6**‚Øâ‡¢Ç|¦rëì½1 Œè½væþ÷ÿ…(Zsä/„ŽÀQpUధ˘Õó²=øHŽ‚{±¹R¹m&gÝ«¬ ²>xÎÎÛ�Œ¸~C㨙|,ƒëwVŽvC¹Iš‡ ¶¥©»¢ Þ*[\XÔ£«æ6Áw×ÉmâóH;„@_§iԳ꛲Á@‚¯ÇFfPI0®íÔ|Aò  E„Y˜ís§Omýž<>sÞq¸ÝÜçÆâ#cñ}¯sLÁkИZî|Šuçs;Dèü“^»æs‡Xœcð^«#»{ã`»´ç0Ïʺæqušõ˜“EsÒé½)X¹A1I�7£ˆ—¥ð4ÚþÒôõ…Hà˜‰I¡`ÞwOW"ዤá¬{•AÖ‡¹¥²íA)bÛ\{—„ña[º:}!õí·ÕÙ•«= Íà”¤!r–àÖDYG\@DÉ:â²”±œ.ú�>O7ñÙ1¯¾&G¨×˜Æ(‚$˜ ×vj¾ˆ ù:².Á!aîôBÁA#A œÏ½ð˜‚×fÄËÌ›^Ô—æUçs/)‚¹æs‡Q!çÌ9X,q6èˆú:Çò,´¼'Š Q´ÎÙñàÛaØ·-pàõá·¥ÜÃ0:ÄŠ²1âI+xý@÷oK§ &$gÝ«¬ ²>ÚŽøêhÿ@Û±¬CÁëx™kšÖŠNœZärº(#p~}„Ó ŠÅçˆ Ô…UìO7 Š æÂµš/"È+3±qȃŽñâ¹Ó»òÞð•s” œÏò˜‚y–OcCZí—ä^¢“»ê|î�+Zcóåž¼Œœ Ñÿj›Ž\Òׯܑ»§æsEÓp¬ï‡ÿd‰s˜ÆJÕÀ9‚ÓŽ5D¢›² ‘*ŽŠ›r¯w1(]¹=:”cˆg¸—·¾"½­ lô2cº ¦Na”ôc#ª™|2÷^‘­VGz{š 9‹ä{•A²Ággƒø"Páü¹"õÒ‚> Ú Ô(wÚ‡i¢¢¬#.`õ™"£Bð[y¯x£Q >æ->;åuåÀ×ü+:°NHò‡"H‚¹pm§æ“ÂP榀ЯHw*´<“ÃÁ®Ü^12¡ªs‹p¬I6PY ×yÄ-k|w8ˆ œ@�É*,ûCF£CÞüÄÙ9U«;-ázæÄ…¬WeYêß¼V¼Èàóè:—F-|e•è8R,AÌ…k;5ŸD„“¢b`(s¬9'ûT~ŽÐÂi8ëbG¢†¨„²JŸ§Ê¡{8w@ÄЏWA²z!Í"I`À%¯¶Üoýþ9;§jMa]q¡ÈÄ©n²^N×wQým)¥¾– HûEsáÚNÍ'àÁãÃGÒ‚†¤ª#AªEÕpGÜò"O'×`òólÌ’=.KñXMK›uš%ìŠ ÆÏ¦ËbÛÛÍ3¥1Íno­\WÕ�âyÞ"Y“§Ãĸ€úËõü§±¢ë¾,—Ó…Céó@ ŽÓ‹××ÞGYMaÌo(‚$˜ ×vj¾‰ ªJ3K5Y„ï!¦‹(±&ÙPĽ¢’-pp槨nD‡"EX#·†e¿¿=¿¹‰âƒ�¼araYìå9ò0éÒÙ³$Ì'r8¸Zû¥³1úZDc‘ÒÄpsˆèsºêE¶êª,ë€:wÕÜ&ø.ÄŸGüúPœúP<¾çaA¹¥æ/AÌ…k;5ßD€ÊÁפAÄP9Ã1­r%M¤:PY ×yÄ-OòBJA&ã0I÷tÉó�K1ÇT Á÷Ú±¥±Ã¤¦Óñ]³âÔéx‘:€öHNß"åÇòúë¯7n 0¦¬*.,»*˺¬³âÍÿô½?——ÿŸ¯G{òÔhÛòŒˆ"n Œùìç ^‚?¡’`.\Û©ù(‚�¨Óùª¤Ÿ™•3Âáõ³\¤béPæà¸Nöe€Ub¦«¸„»šÑ¼Pful –UÜg@ÄЏWAò!!d2›V²Ñ’öÎSÏD${¾1ÍsÔêÜ–ý“çAõå¨ñÿ5Ùé?”ç¹ú¼{CúV~¦ùúß²S" ÄŒÍð3äSº÷¶œX ƒ%‚˜}N]ŠÝ¾èxo+ZR;À´Q¶‰¢ybŠõ^$‚�ˆ2(—8.‘oŠC q!ïUY²¤Èåt‹å­ÊÑ´Uu¸¯ ¾ôY¤i:AÌ…k;5_Etrï°”Òá["”9¥kmäðùÇ2ØÞŠâ5/”`.eæ°jè½²ŠxgËïF|dÙ”qk_öwß¿›øÙÝÁ˧œÄyáÏrT“òÄEÅgzn[²3<Œ¶·—‹ ã5 ²®óˆ[¨‚zc%'ÓL+¹”]Þ;,ç3ÄÂä ÁçGA9ºdêìÉø‘<D9ųtÏÃS?|´âÕQ2| ½v8Õen7qdz|þÛÄF¦Ç^/ýˆ"FQP&ql(£8N#M E‡˜‘ת,Y!£JÂÍ"|ÎKÑð¼û<U ý.Tá'AÌ…k;5_E{èjÙ"È‚Pæ°ã½ &áj/­9‘£Y¡Ì�C4u-+±ΎeÄ»”ßíŽtÚ/Ì‹wãûÒííîW(6„å7Z&ùßßIþ K(ãwôwOI¿snVþæ?H£•”Œ˜¨‚ ~¿o1÷Š"H¾ ÎÀ¨'ê¥Ì„ºuNdêóÑý[Q´ž…gròáH†ÒïåwQîX>½-}éõîÈÈŠÜ›-sF‚àY<–“Ñ®´çÊm€õ,r:LØf Q´¨°Œb§aè8f”UôêÐÞÄ…¬WeÉÔÕUnÎeŒNny nòY„‚HV¤pLÒC$Á\¸¶SóYÙ!îPæ™ò#G(s°Aädm´.KwçvБLe÷뼋9†¦#š.”9Üç%éÃù 8=êG­¡Ì N@�•A‰w“ƒÛr¥ÿ0xf.ÏÊ(8ùXŒóg Øí#yxpüÞÇïDNÝdü®ìvÎO÷½ÐáKñúš\î\ ž¯èÙ§’ ®óˆ[Ñ`ÝÒmJ$°uú‚’1cV'#êãbض<sÔÃV¹ ËßT|X ëY4¿{aÖfûY4Ç–'áÔœ¤Ä¨í]™ö­Ñ„å¾sçŽi/Êj3VAlPF!Ü¡¼6!:u`V«²äÍ: F£­ca]íŠÚo?q/K EY[™vçC™¢Œî9t§ïáñL°}¡ÌóÇ7 m'èìÆEú‡2£ EºNp:ÖæžC »,Ýká´ SF&‡2ÜÁÿÖÎgì(9Þìޔ׌X·-·Ü•3d[úÆk~&ã½›&/~ï”gö3çèsJñ΀æëFÀ3N–-˜L™:æIøÌüNxŒ­NOî ¦çcÎå¬üæÚºDE8¤×ƒúáqðÀ‘F¢PY×yÄ­ t…ôÓc&ÓüxŽ.o÷äþÞiYÜì½+®J "{÷eé¶7ƒrô@†»×¦Ï±yö‚2¸{åš\›{F—@ëó»áT­°MÓ÷lÃóølvÜñ)lSQFÅýøô²êrëÖ-ù+å¯ÈÅ‹KéÎBQâÑ!=®S[Ūù7 L™cåti4m£’`.\Û©UA*„`4dià8¹B|m‘áT(sðÞÉG2¾)ƒþ®ônïÉx’Ê<ß9µ-.Jè(ÞâPæä‘k¥þ¡Ìèü¡Ó‡Ñ°ºuúP>@ܱ6ŠqŽ—-†…BÁ†ÅýÔ$ú G„Ãצ\a åí(#V.Kˆw�e÷ÊíP0åøòT|˜±¢²ùŠ ß;ýìÌD àÈ`?ïs×QEà9;٠΂)Š ëâ:¸•ê*Áyñõ@W\€}ðÁSá Œû›¥b£Ñ!¨“P~}Î)°ë¬ÊRµåti4m£’`.\Û©UEè´jg©Ñã„ež9EŸÏ¡ÌsáÇ  Pf#r\G¦ÍÔœ„Ĩ5 eV4›]—é:S‰FimÇ~2Éý~7œ¶e‰ a9LxmÊ“-Ê…£ÇŠÙÿÜç‘MÅe ñ.À”˹}¶æ§ÄVApm¢gù=¢šß\y:L$‚`3“Oä¢t.C ßÃ9�Š Ëá:¸• œÈ_|Ñ´+uu(ëú*hÅW Óû á È¨¼Dç‚sŹÁê²Îª,HbZdT„›þèÇB£ÑhYEsáÚN­J"ˆ¢£;é§Ç8B™?œ¤(¼ó†Ü»eÞ“£ÑM¹Ò½-?{[öö e¼9ÍK‚pj]"×ìGÙú…2£#§÷BH]Á}©D¡pÁ¬`òl*Œ¤AL$ˆ½òɪ,#Þáó®ù<NŒXgÅ:"HðÚ\KÜ4"ÇYù’DÅySˆ°ÒRËŒ’îU–P)8‘¨sà,S ©h+4Ç D$‘£Œ6%oÄç„©]¨§ê!Ë̺êEVdâT\w”±ž1*„F£åfAÌ…k;µ*Š  ¬Ñ’/Mº¯NÇÚÊ6;¹ü5¯_¹#w·!†Ž{ïš´7.È˽—Qç¥Ó¹½†ÿÄÊ ²!­öKrïÔ´”,%ÞýÍà÷χ¯§Ñ$P"Áq*”„"Çô{s‘'îÏæ¢VŒ¢bÞÃq/ÎpJT´k&z'(ÃmŠ kâ:¸ù„íTS ñ‚Ðû”¶­Ðö%}.˜Õ)RQôºht^שE‰Î¿«Ydèëæ½* Ê"®9€p³êrº4v–QI0®íÔª*‚�{t OÞ’訡cŠ{¹rÜŠQ„cM²"Èj¸Î#n>CšR'ùrƒ!ÒÏãY‘g{«mMžQ!eˆ 6vtþÖ%ªâêBW]’ÆòªG5 $Þ]G¸¡Ñh4—QI0®íÔª,‚(è¡£Š‘vV«… Yè¨áo“„,Š Õ"Èj¸Î#n>ƒúmJ]GÖ«€Þ´ñp2ÑNdq `yE…”-‚(87Lõª[^gU8¨o³åH£@â@¸árº4-+£’`.\Û©ÕAQЩцžbˆß c¦#­è<4ѱ R(‚¬†ë<âV0Ò«Q’‡óLBôz£@ÒÚ<®7ö‡ö¿‘u¤„/"ˆ]†ë‚|e/§‹þ ÊТò áf(FƒQI0®íÔê$‚(öÈ;ª~΂vlÑ C§¬©P©AVÃuq«hOЮÀ1Wg’íL6 =@¤‡¶ßYE},"¨EçhG‡uó¹>VÍ¿å“5o9ú4IQ >ûŽ:‹u•_ ü”±Œ÷2 ½«ƒhZ~Ôy®vE íO¸ê̸¥…"HÁàÍ:„–¬î:˜h€Qáó^P©AVÃuq«2¨ÇÐyUAí þÇM²8cTW‡¼Œë‡cA…ãÈ¢³ï³bcGÜh„SU˜±jTú«$NE€g¿ }Ü[Ücâh3ð ú D>ß±IPI0®íÔê,‚(šLÍnä©„ç:¨8u´ ¯yÝgP©AVÃuq« .‡¯ñEß\# :|Žp|¸8ÆuÚ«ªˆ Š–_Ü=ÿ*–Ûuòo¬²œ.žñª8‡ù|8h""Ñ^ø êgß±IPI0®íÔš ‚(ñF W#>d:MöÈ(¯q2éëÏdØÅ²³º¼lÄ–©5¦ËÊÏ-›»)AP™(“}éoµ¤ÕJPGØËäÚ†ï~#ù³»w­ß‰ÌZþÖp²/ƒîVð™u|sLää` ÝvëÔw'ã‘ zh™Ý-éö_“n÷¾µ\o~PY×yÄ­® ÓˆºP£ ÐÔh¸¦LÄ5PaHÛü…ƒva‘!Op\¸W¸g«Þ«ª‰ 6®£ªútÕÄ©øòw,ý”骈E¸ŸdýåÈ×úPAùñE¬n:AÌ…k;µ&‰ 6¶³Ž4ô¾WB>¢}íäòZ¦× ¤r¬èP¤žËxpE6{£àÕDNöoK§Õ–ÞH‡Ê lœŸ@&·e»sYÚ­«ÜlÛ½)£“Ip*=ÙÜìÉ(8•Éá}¹~ûëòÕÄÏöƒ_Æï\ˆ~÷XöûÛÒŠ¶y*ýKÒÚÈáóe°½%Ýágø`†eÎËöàcy~8íÍè¸Nö¤×Þ”vw ÁoNIçŽÄ„”¥îÕŠP©7* ,i]©Â¢ä Tµƒ‰öb†LÃqÆùýäOþäôüª(ü ]Cÿ`•¨*‹ ÎeVûI¸·U+£¨7]õN[”8×VP¿à>?Á½ñ½ŽDYGHʇ"H‚¹pm§ÖTÄFí¸¡2ªj§­Ð1BƒŠ xíQøXŽ¥ëÒEg2Þ»)Ö%é<>w‰ %®Kÿ¡ô·.[ÛˇŸš [èÉX>Üžµ¤Ïµa‰ Á{{»imõC¡Â[‘@ï|J°ÉA_¶¦¢ öÕ–îð±O6愚d–ºW+B¤hYhcPo¢½AûƒúŸã/þ‡óϰ ¶-ËU‘†ãÑãU1m€/ÚRl‡ïàs´ Unpzop^i©ƒbƒ²‡û‹{ûZ¥ö¹>Ð×uÕ?‹,i9]œ;Ê>ÊGÀsˆûGü÷õªÏPHóŠ æÂµEyÔÁGc¡Rt€P9¡ÔD'<:<¸&ÚéÕkRÕ‘KÀu§ëéôŽ ÙhßáøÙœ2?LíÀç­méÃ;FCç\ðÿeéîÜ~ÜØVçšìôÊT>™›Êb[\d E…ð³sÒéÝ•áAð[S"D‰+·å`1ä²lõÉ1ÏœÐÃý~'š.ÓêHïÞÛ³È s.3aÆ|¿3˜›ÎbÞSÑÄLó¹ó(œbÛ6 ü6 ²®óˆ[Óвt¨WmÁѶè�SáAM;Ñ«Ú/þâ/Îí/é·t{´“‹D´—جêmç²Q!uAlÐ@YÀõ@¹«J?àñWOœŠÕgì¨<8÷ª€þ,ûkþ‚úõ¼Ï ÞC{ÐD?È7(‚$˜ ×vjAλŠ"hôQ 1±C|ëT! ‘ÄùâÜ´“£`=_’ (K`Þ±ŃvoON&˜ÞñB(28#A+¤m>‡£Óè 8û—ÌÔÉø‘<„²4 ò¦¼×»N9™S4N‹ ˜ s%>LÆT|˜±šrAzÃÒk‡ÓZ¦»œ».9îHË%‚LßÓkå!¡’+®óˆ[Óв´.vtL#JVµÏþórýúõéþ²r˜Ð>ÖEY&*¤Î"ˆ‚ë¾ú¸¿Uˆ±ÎrºHœŠsÄ9W% Ï2Ê,ñÔ'U¸G¨ÿðœ“r¡’`.\Û©QYTVPmmaD…ÓQ2;ÚyÖN3t`TàQÁçP•F¾Š¸k®Ëk1çì?“ñè é›h‘()éÉG2¾)ƒþ®ônïÉx2‘“G2|0~oWn¬D¢KF‚˜é0&FL€8%‚„ù9æ÷iOŸ YYËÉhWÚ­«28ŒDN‡ñ×yÄ­ihYò ´U¨ÿQ÷g ö]!ØQ!I4A±Ñè”oôƒ‰DeƒúS]\uÒ"ûê~"¿ôÿY´'ÿA9­RÔJSÁ³ã{ýˆºe©|(‚$˜ ×vjA²A…TèD¢3 :ø_#HÔðÛV©�¡òÛû€xßÂÈÞ¯ÿú¯O\‹ 6z,è¼à{¤Xp/ÀéHKÒêÜ–}ò¦"ȳP0ÓdžDS;‚yŠ "Æé$ˆgc‰ 2‰ˆhú!&‚@(ÙÆT˜ð_‘£àø.†Q-Ñ;`u{Á>/X×ÇŠœ1S‚’£^ ¾ÿ$œ"%F Ij«%íîWdd"e‚s<xSvw¿‹x¡²*®óˆ[Óвä#hKÐ>ä5Ò‡Îs]„´ùhGq>®¨™¦‰ ® œnô7`èùz¿‚zÕU/¥±ªÔÉ(£è¿A}â{_\ÛR.AÌ…k;5Š Å :—& PüʯüÊT PCå‚Nò2¦Ñ¶á7._¾l~çw~çwÌo3ªÃ/pïÀ)ÇZó{Ÿ·._•Þý·å«šc³'{Ãy^·¯IÑ í]yoøª\é^•6¾c‚cí^“îµhéØþ£9!b1óKä!ÄLÏ kÞì¥l­år!¾è6Ñ´#rL¿7yâül.j%\™&/Â÷Â(½^ñ%|u%›Y~”ù%rCÑ£]ë "ƒY¾ |(‚,‡ë<âÖ4´,ù Ú £Ë±Ï‚: !�N>®lš*‚ØÀñÆ` ®ÏÑ!XwåtQwû ú}tZ«ÄÃx=â#ð9òjH:(‚$˜ ×vjAŠ? )¢X·g(±&ÙPĽ¢Ò ´,ù Äz8NBÒë„óé5£2Ž8œ;;:ÄÇAäûX5qê¢åtË×BñÔ»U¸WkΚ Hò‡"H‚¹pm§F¤8T�A°Hð{yvhÉjP©AVÃuqkUA�:¹y uèáèãþâ/E7vtþú6MË鮓8õÏŠ3ÜòšÞF²}tˆ„¾ƒgu7)Š æÂµEb(K�QС¥âAªEÕpGÜšFUD BE^ÔQѨáwÿÀÙ9Uk:ˆA”‚F‡@8ò):bÆ:ËéBL)<W¨oêô|ÕªÜ/§Ñ\M"H‚¹pm§F$Ê@”¼CœÉráX“l(â^QiZ–ª@mW…ðþã'ÎΩ™\!(x6|ŠÁôLsqÕ[‹L—Ó-ôù Bªî—¯¹slðœ2¨<(‚$˜ ×vjAòÅDQ!„•Wù ÃG«ŽŠ Ëá:¸5 -KUm˜ŽÔç… !uYät˜åAYó1:uó¿xø‰³þZdHœŠÄ«e�GדT‡ª$G…òEÊ"H‚¹pm§F$?|@ !~ÁHê@d9\ç·¦Q5 z0ï6íd")‚¬‡Rv^ ü6DÔÁ®:,á»E'NÅóÄ) Õe­ âÊUÛ²º@$Á\¸¶S£’:/Ø7D)¢SKÒÇšVË Š Í ªG8¥y‹uB(‚d“ÐOA e#åE;ö@´¯„\è7»ê²EöõqXÏ“WVÔ}(oU�åË·ÄÆM"H‚¹pm§F${T`ðU�Qô8¹Ô!åC¤Tyô Ž ÚŒ<к!‹DNSX” -EE‡à7\Néã®—85ï¨\'öíª Úˆ¾ƒòÅ2VAÌ…k;5Š ÙRDÁñ¢¯ÊñRW(‚4ƒª‡£Ó‹À<;é*¶TYY$‚ Ý…#Ïé ËãŠÉ«¬œ%¶@ÈXg9])yòUåç§ÉT%9*ޱ*Q+uƒ"H‚¹pm§F$;T�©BR#_s—Ò$(‚4ƒ:Ì£F[ŽzžT]Y$‚ Ý…óŽsdTÈê | <â:¢ƒr“•@—ÖÉCÝ©.®úm‘¡žõrº¸&tN« ê…ªøxî(äEsáÚN"H6¨�’4bà;*„ c›U‚’Š Í "HQÂy•…E"ˆ¢Ž6£BÖeå×eesÝrƒ}¥¨ÖYN–eý'šƒZÕå¸*+¯ œQÄ-Š æÂµEõ©º�¢ F[ !„ EfP €óžw¸ªBHZàZjT ®Ä$½ž«F‡h"àe¿‡åp±,®«®[døÚuÁ9³UÔuU‰äQá‘ EsáÚN"ÈzÔE�±²K!„b¡Ò ê"‚€¢Ú¿* !ˈ ŠF…`˜ío6¨“†òƒ¾ ®qðu¦$üþÉê‰SQ²jâT@8WRmÐNT!2 õŽ•õU±PI0®íÔ(‚¬NtƪÔé$¤ÊPiuA€Ž˜çÝVTMYEp& ‚à\9šŸvtˆF0%9n«FÄYg9](Ÿ¬ðó8/N…©>áªòü3ò¨x(‚$˜ ×vjAV£Îˆ¢ !„äEfP7¨@‘÷Èe•„UENΕQ!Ùƒk‹ëŠgÑ‚ϲLL 1cåt—Iœ ç¹ÎýÒ¦€þwU’£â8)¼ EsáÚN"Èòhç¤ M•:„TŠ Í Ž"@§½ˆi”h“p }o×A�£Bò¢8D†htÈá᡹ÞY—ãu§Òh4ZžæÂµ]ÜÒB¤T¥–%*„4éœ )Š Í ®"Àh`IòªÐg!‚(Œ É;:$Ïð~Ôó«.§K£Ñhy™ ×vqK EŠS…ŽW^àœ)„’AšAE8èp ‹ö½=ÎRvTHÚäžd9‚2…¨&A¤HÓ¼PŸ»êCF+Ã\¸¶‹[Z(‚TšÜùhBBÊ‚"H3¨³à¬ëÔ‚¼Ñ–>¶IY‹ ŠF…ÀQgTH¶@¼³<”/ügTÖÑ!ë$N¥Ñh´,Í…k»¸¥…"HEQ„y1fB:`„ì Ò ê.‚€"s_Åù¼D Q!›’ âŠúÀõ†¨—WtÈ:ËéÒh4ZæÂµ]ÜÒB¤‚P�9 ®:E„<Ò(‚4ƒ&ˆ @£4Šh;}BòA8æ8oF…¬O< $‰xtHVe‰S±Œ«Ž¤Ñh´¼Í…k»¸¥…"HÅ �’ :\EÍý&¤ PiMA€¶¡yäTˆã›R„pm‘Œ–Q!«ƒþ̲åT£CÐR!*‹rŽv€‰Si4ZÑæÂµ]ÜÒB¤BP�YŒ ! á(!ëA¤4IpÑNÑFø$„%‚(Œ YLoYg@åßÇõ‡ µnùãrº4­hsáÚ.ni¡R(€¤G…¢:¹„ÔŠ Í i"€ƒXÄÒ¹À!¤h0*dyÐoɪ¿‡}¡Üe‚Ä©®:“F£Ñ²6®íâ–Š �åA'—B!«C¤4QQ±¼¨é“>!eˆ ŠF… œ ®QÊ F‡ ì£,æÕ?‚è•õÊ5ÄP>«ôÇ‚‘|ùÑu·+jhl\}¯¸¹pm·´Pñm°(€¬† !¼~„,EfÐDèˆ;ô"P!¤(á%N™"Ш¶ÉÉh™Ì3j¿aG‡ <fy?pŸ±_RO nE—8^”u’/AÌ…k;5Š !@²×‘Õ Ò š*‚�&ŠŠÐÐß+C)[Q0ŠŒ2ǨÓä’ 6Î*:¢bYBÉŸ*Š\¨oÖ™FC$Á\¸¶S£2‹`àC› hØ)„²AšA“E€‘Â"Û‡²„_D€k€>Œíò ”‹²r§ ŸFËæª÷EÅR_PFªäŸd¹t4qC$Á\¸¶Skº¢H^s5›Š !œ§JH:(‚4ƒ¦‹ @Û‡¢:öø´óE !>‰ £Bf¨Q6(›‚܈ìHÛÅv¸Ÿì¿Ö”Ó*õ¥ñlA!ùA$Á\¸¶Sk²B$_P¢Æ_BÈÙPiABŠnñ;E !>Š €Q!!>® £Î#ê”ÓEÇGg³@´¬’p aí\¾PI0®íÔš*‚P�)t²0ÂA!„³¡Ò Ø9œ®ÈÑø"…_E¥ÉQ!è@ñ8‘¸/8Ƴ¢Cðü•h˜”GÕ’£Ô³ŒÏŠ æÂµZE Å¢BH;[„¤…"H3 2£èè PÔoú.‚� ƒUÔÔ$€°P•8’IÑ!x¯I÷­©à£]%¸Tn¾PI0®íÔê,‚¸ å Bˆ«ãÉFœŠ M"È<h‹Ñ69¢]„RDÁ�EÑ÷ ,|Iý$;:äŸý³&ÿïÿýèSRwð|V©¯Œ>Ÿ³ª@$Á\¸¶S««¢Ê)D  åáêxê{BHÓ¡Ò (‚œFEò"GçóBª$‚�DÀi©{TαêÓsréÒ%S— J„ÓêOÕ’£Û#ÙB$Á\¸¶S««‚ 4x?øà ž O4Üèhá5îÃæHÓ¡Ò (‚¸A¿èNsžBHÕD€ë¡+•Ô1*e¬.£ÓÚ·Å}Â9Á)Â¥z‚{[µ~2êÕ&D—•EsáÚN­®"t6a?þã?.ÿàü ž ÏŸù™Ÿ™Þ£ºtLYŠ Í€"H2¡‡sW¤#§íFZ³ì#TQQê‚ó©zpM5À=ƒÓ‰ú…Ñ!õ÷å·JàY«Ú1WŠ æÂµZE4ê\«¡“CÄ´±¶6i2Ašê:’ Ú†¢ÛkB²üÝ*‹ �סNQ!*ìÔÜ—¤¨�Ü7Á½ÃvŒ©>¸‡Uk;PqÌYÕ©dEsáÚN­Ž"*}u¬m£â.†Ñ Bš Ef€ºŽœ Ú‚¢GÑ7ÈR©º¢ØQ!Uî?áøë²BîGšA#‚ó¯CL“Á}¬ZŽ Ô§àÌŠ æÂµZE4q†F�)Tà¨È]÷F‘Š4Š Í�õ9$àÀ ~LBH]D€k¡Q!UthÐïñסˆ�œË2à¼!€ \㻌©&U²•Tt=Þ(‚$˜ ×vjuAì©0¨ìÑ¡A¥Q‡Æ¯Nà>¡rD¥®÷ Æ$J¤©Pi¨çÈbÐf£ /£MÈbJNDEÅô«ªÔ§ªSȺN%ú^ñèö«A“£êÀ'ÉŠ æÂµZ"*qÛñ¥Í¬Ê"€†ÍºÎ«éÆ©>dAšê’í@—1ú¹®RGàz =Ã}©BTH¢@�ÊdÏ®ö£Ñ!(ïxÞˆ¿àyƒpU5à°le EsáÚN­HDO>n òVu´dž”‘§A'¬Š )Š Í€"Èr ã¶¥Œ>Ã:BH]EEï‹ïQ!¸‡u‰ÁuFý‘õõƳ¥ÓTdñùž6½ÿU£NÏ /PI0®íÔŠAªFY$UAp/áà£á¤°å†"IEf@dyà”¡ÿPFƒU…º‹ �×Äç¨ÍŸQ—>'ž\ï<Áo ¿‚ëÆèÿ¨â 2êÔ¡$;(‚$˜ ×vjEˆ %€Ê•$S5DG‚ÐPRØJ†"IEf@d5V#²`•ßn‚¢ø‚ûVµ gë[T´-$F‡øÊ@Õ|)”›<"˜š EsáÚN-O•(*OÕäÅTIÑÆÑÇÑß BÒ@¤PY8�eÕ¥Ë !MA�® îúhóÊýO<keDåEYç£Ñ!ø}<>Üߦ¡ŠÂ^ÅŸ¡’`.\Û©å%‚èÈ@Tø¼©‚1K…­:u.ò„"IEf@duàh£í#VøÝ´áèMA»ïWæÈ/îUYå$p]QöË}>ôQñ À•ÂÑýb©jeBÉŠ æÂµZÖ"*D4<ŒXßE¨¸¸¯¾ 5¾A„¤"H3 ²èc *+ ·öo !MA�îÚ<8ÊeD Ô1 åΧ¾ú÷pjR,x¶ªØ†àYD½I²"H‚¹pm§–¥¢Qhü¨/¯"ˆ-l±¡[Š $ AšEõA_íQYáÕi„&‹ „*\§¢£Bp`ubQy+ WtHÄ'Áuö±,,¢,Q´ŽPI0®íÔ²APñ¡sÇ(ÕñQAE‹Š Š?…­Õ BÒ@¤PÉvQ–3€¶ú¬ß§‡¸È¨ôSp_êäˆk?Ìwìèüe4x>àÚV1¿ÄP¦HÈŠ æÂµÚº"<UU&}Â7D…­²ÂŽëE’Š Í€"HvèͲ^ý}W߇"È<EE… U·(ª9¸¿¸ßð `¸'ŒÉ\Ï*Š ÅÊÎkS(‚$˜ ×vjëˆ pîШ1J |Ap/uä†ÂÖúP!i Ò (‚d ^t¬Ëêƒ$ !AN“wTÊ@’(Uep½ªUûŒg”Ñ!ÙQå>%žO bëC$Á\¸¶S[U³ŽÂ\Å,_ñAQa …­l BÒ@¤PÉ8WeÖ±.!„"H2’uû«[[ ‡תê ?iG‡ ’ÎðjàZVµA]Íèòõ¡’`.\Û©-+‚ Ò¨ ŒQÙR¶‚F‰ÂVöP!i Ò (‚dœôIÊœB(‚œF…dÕ—Ô(´·ucݦ÷àitÊ�ûœËSÕHmÜk!d=(‚$˜ ×vjˈ cC#SŹhU ,͍ÌgE’Š Í€"H>¨\æ(£-„PIú<x&ÖíûàûulgÑ/««H€gç†sTß‚}Ðt@H¨b¹Àýe¸>AÌ…k;µ4"**¨¶¨¤8Ÿ/?ÊA(låE’Š Í€Àü€ø€ö¬Lç@…ßýÁŸ;;§jdî›Ĭ:ºk^·(ô½Q_àoÝÁ}W?ƒÑ!‹¯PÕ~;žsú’ëA$Á\¸¶S[$‚hã„J© q™)‚ØÂVÝ:¾A„¤"H3 ’/*ì¯êLg¸7¿ý¡³sªFNƒþÏ*Q!¸Þulcq^M›:€¾)Î[£CÐO-óYöô+qªÄ¼®EsáÚNí,a¥«4Hd5ŠA(l E’Š Í€"HþÀ‰‚UfûöíOþÔÙ9U#n´KëüæµÚLÙ4=‰$î¿Ö¡<à¹fŸ5סªm î+žY²:AÌ…k;5—‚‡ •oUïT•"D [ÅC„¤"H3 R pžà8•å41'Èz ‚ge‘�Ǹ®Ο92BpŸÑbtÈŒ*‹eGëUŠ æÂµZ\Á… „Šk±ä)‚PØ*Š $ AšEâ@›+Š ëƒ¾ŠF­&‰èÓÀA®˜Ö…s'ó `*£Cª)!«ÉQNëB$Á\¸¶S³E8à¨XêØ T¼Dt$(l•E’Š Í€"Hq ½ƒ£„wÑPÉí›Æ¦:GÐI\L<:¤ªQ«‚碌º- ôÞ‘Õ ’`.\Û©Ù":gŒ(¼Dì“IˆÊƒ"IEf°ž2‘ãᎴ66¥3X÷âe¹¯8eÐyIïß•Np¾Œ£OŠBHƒ;A²í(;*¤®Q �e–ýñthtÊ âQüðLT5Z÷m!fWƒ"H‚¹pm§AÒupÆÏ£ÿK`<˜ï\áÿÂ:ZσŸ{)óŽcž"Hû%é BÒ@¤¬ r"£Þ…ŒÚŸ%÷u²'¯ö- 8’Ñ«_‘Ñ‚nÀóQO6—i›ç~#4²Èe)‚d& Ñï÷k‚òZ×sË<ãˆzF=[÷èª úÅu1ó†"H‚¹pm§¶šâKw®<§y"H>bÒr@ÐÛ Êþ•ÜD=Š $ AšAuEgr8¸*çz##PL²}®—±2ÿYRôÒ¹‹DvþWmêç>÷9¹|ùr-‡Bèaôîz \ ß[÷èD‚TUèÁ=©êtž²¡’`.\Û©Qñ‡jŠ 9Ý–þè$ú¿‚<Ioó,$݈gAH(‚4ƒlE þ=H·Ý2ûmunÊÞøYðþ± v¤¼·±±%;ÃCy>~ ;Ñv­m雕 ‚Le¸³n»qN:ýoË'£Ýhµÿ®tt_j›7äÞÝ«Á1ü²üSKX6ítûªt;ç‚÷°¯‡Á±]1ßÙì½'ÍkLÉù^ЖX¿Ñ¹#ïïÝ”N ÿã{‚£]BŠp†‰ 8 !«6õüùóÓ¨ºå΀Ó^UÇÖGìèü-2",oªœ;F#ôÈòPI0®íÔ–Aì‘óÀ9쵃×/H÷֮鬴:¯ÉƒÁuÓ‘iunËþÉD&®Î×d,{»iá=µÎ@ÇïÊ®é,;?Ç´svN.w.Û dlO1mðzóšÜzm;ØÐyºõ† ¢ïhGjÿ£½ð{­ËÒ½n»=ø³¦e¿í§{#pöd<í´p®³l³û®ŒŸEÇpj_gSIdò± ¶/J¯Æ"HÚÏ$(‚4P©'‘Äó¯†6ÇþygÇ.&ûÒß:¶/¦.>'­îP~pЗ­ö®ŒNžšÈ ÓNFßùL†ÝvÔ~-Љò†˜ïcÛ¶lFQFÜØ ëEóºÕ‘ݽqØÎ™6ÙAp,Ï#‘cÖw÷…>Åyëx¢÷‡Òm]Ú–#™à|Z;2<^ÔŠ.NFOóB‰ ê�PY<7Ú§ÁóÑ .‰ßQ_Ð1̇xt^W=’¨êѸEEçÕ Š æÂµÚJ‘ V't [Òîíɉé´DBƒyÝŽ9ÇVçëdOzíËÒ?xjup> >!Ü—éܽ ÝágÑwA*»¹=ÃÉS9è_Šr‚`ZÅ•i~ÓéÚ@çéIØ3ÂËQøÚtÚp§'ìÈYÛª¨rÇöTÆÉØôÁf¶ðدÊàðYè,·Î'ï _=ƒ¼ÄŠTûŠGÑhÞß}Eús#&r²;»®ÉNÿßÉ{A:Ü¢Ð2ŽÜ™{±!›¯Ü‘»Û/XíèžEbRxÏ‚íº7å5ˆSÁµ»õàn(žM…³øè$Žé™õ›jAÙ<|<ÙôûsßÞźË¹ÜByþÑô=ìLjcŸüVPNuÄóŠ|õý¯;FSφ"IEú‚çV?Í ÎÎòŽ›%\˜¶ø’iG§‚ÅæË2¸{ň!óE&¨óFoH¿‹:TEüdd2Éý~7¬Óˆ ÑkC\ÑöÏ´38ÞÏ‹ :¸1µxbuà0Ãòd‘Tɣݯ+hOãÏ ^kTHÕGù9E PŽpQ·T9:çQÕä¨�÷€õßòPI0®íÔ²A¢ÎIÒkgçkæ„N#(&e2ëøh‡+Äî,E/Ó¹rˆ ŽÎÙìµûwžÆ·5û;–Go˃A_z½;22¡Æz…¿»Õ—#Ž@\9ƾÎ&•X±i÷kŽÓÍ3ÄG/‘g2~$q-ìûì¹;6ÚY˜¶ÍéÎï†1„v>!¢×óåÀ>&Œ(^”­þ¾L¦‚Ö§áçf_?2bYÜ!0‚Õf$^áXµ<+æ\¬N|t/gØ£©gC„¤"H}A`·7j«Õ÷–paê¼ÍPÐ7uá…Y$ÈœH‹i‹»ÒnßáøÉìûö¾lÌ Å3æÙ´ý²Š`»^<UGÆE(*Å´ùæuÔ. ^6¿ô¬vÀü†©ƒÃ©<ëÇ̧9ï¥sÓˆ @…:¾é°£@â¨@R娔Ë:M×ð”OUŽA[RUPÖ«,â”EsáÚN-äØÝùBçÔƒ(BcçAq'ì …Îq¸¯ÄHGçlöÚý;§¶öþFØœ9ï¡:þaÇÑŠ*IÜ—›´bŲ¤Ý¯}ÌàôH`Бþp$Ãé÷våö(xǾçΑ»OfÚp·§Ep»¤×®cÂ{³éV¡Øò£°<ØÇb—ÞKý~pâÁ9Dåy2–Ñý[Ñ{—âôΆ"IEz‰f§C#è°¨}MÈ Nã ¶k]”íÞ×åñcD*ÿ·¯IõWûŸÈ Øf¶/ XDDSkO¤Û»Ô·hã> §ÖDÓ;Ÿ›ÈÇ(’ç4k£AԛϬ¾öŽ P#Q&xQ…×Ìñ#BäØú9´¢üZí—䞉xÉ\{܃¼¦£¤A�…tèu:ë¹ÁgA°]ÕÄ8ß(ëË× $ ÐWÓèÔ×U™ªÇ^Up½«>-©h(‚$˜ ×vj«çA§+½—‘$ì¤Lmó’t.Í:A{Ç;_»2:þ(êdé÷¢Ž••«c£Õ–í{s£@³\QN`»ÍNG.EûÙ|¹'/cZGô¿ÚÜ6AGíYüwîôå•è{ñýý“+Q'ÍŒ¬=‰uB“s‚Ä÷9òIx%‚8G- x`Û§–â¹›1æYRq­Kóøà×ÃHoñè“s®æ~YóÔ¢}1ÇÌ=Œ‹ I£©gC„¤"H½A=¶¡åQדåP§:gyàX0M!$\›´Ï î)îm•¢Bàtç=M‹,åÑ!P†0ÕÊg'ÏEU“£”yæFZŠ æÂµÚJ‘ `Fï»÷§Žõäð¾\¿½?'x4´bŲ¤Ú¯‰†°ÄçHàcí^›&{599t;“åd.?Fîîô¯›\§çsÏh¾ÜëFÛÙv^:Í9|ïÑ£“³ïµ3æ¹xwSÚÛw£)KVbÞ0'H°æCÙhI»û²tÛa˜ù±Žxû==šŠÐî³K-E’Š õGGf“âPg"D–,+‚�”‰¼§éT8¡Ë>7ضJQ!týõžG”!_£CªžGÇOño9(‚$˜ ×vjåˆ “¹^ãP÷Þ”ƒÎdÝ)U©*&Yêp*‹ùÿc\¿3/x” E’Š õGÃÝk[W86Y S«ˆ €Bˆ\U¯I¢Bp\¨8-ÀOpPOø‚>&Ž«ª¨ÀIÒC$Á\¸¶S++„œ†"È œìËÀä爢@:»òÀÌ9÷Š $ AŠCë šÿVp°áHdå$¯*‚� !ó¨x¸ŽÓ‰k SŽÐ&û„š*;²MÂŽÁ=ƒ8’U½±*EÖ•yàësé+AÌ…k;5Š þ@¤žP!i RlëªAÑ÷ NrVaÙëˆ €BÈ \ƒ¬®ƒF…`$¿lÇÕçWå¼Måúw(S¸‡YO«K êŠ*‹xa$AÌ…k;5Š þ@¤žP!i RhënܸAóÜìûTY ëŠ €BH6Q q°/´É>>É.Ë&ëƒ2'¾¬èª‹hxñ<’tPI0®íÔ(‚øEzB„¤"Hq¨sMüFû$EÞ+83pdàĬC"hºÇ2¯s‡ÓèCTÀzQFtHÕ“£\¯,ÅÎ:C$Á\¸¶S+_ —@ÅoÛÖêôd0#…ªóó ,iúþ]éœz?úLeLú²µq^ºÃÏ¢w,NäAOWÁ·÷¤ëÍùå`m¬UT°êȥΥӫš´:ÒŒd¼drÎZ‰ s×I p22ËÖú|_# îãîÊ >îY÷yþ8A„¤"Hqà9¦â?¸O è{§òuVÉJ¶R¦³^48×¼#¢B8 žØÑ!(_*òz~QvQGTLEä”°tPI0®íÔVAŽdôêWd”Þ\@蛥YÍ¿šìK þ\žÊA¿8Ë÷¤ÛÛ >µ?&‡ƒ]¹}ðÔlnû’t:miu‡”Ñò®­ÎMÙ3ŽyðÖø]Ù½rsÁ¹=–Aç¼tÁ 0òf/úα v¤eVͱ¥§|$ãûj„]×Zhº¬¬÷eÇ{,ûýmiMïkÀx %@„¤"HqP©e‰ �£¹p^VÅÍR*„Àš"„ ßRÔèv™Q!>MË!ù�AN>ê4”é<î7ö]åºunV9™êEsáÚNmdr8ís–s¸6qg8@YãàÚŸOäxxGîÃ=ùX¬¨ýþdüHFίLö¥å¶ìï÷ek«o-ŠýìH«µ#Ããe×S=Kpد.½ï²EÌïëœb~£¥Ñ>Þ×H™Œeo·#-{ßAHŽP)Š Õ L¨c¼Šc‘µš$„àüpí‹쨢òshÔi(c裌e‚z¡Êb®MZ?´éPI0®íÔ–ANö¤‡Ñü`[L øêû_—ý¿µ-}ôÔÕ4ÛDÖÈ8щtˆ f¤ÿ’lq!ü|º¯Sûp}?drp[®ô÷e§yë²ô§‘ŸÉ°{><®èô,A𻘪1/�,¢T$ûêAŒx±ÕŠî•÷u3<Liº÷¶˜ˆ•Š $G(‚žqŠ þƒûʼWµ]EtÈCMBÐg)«ÝTñ+þXüVÕs9ÕˆG‡¬3ý`E”Ù<A½¶îuhAÌ…k;µU"A\Nè|¶CaÀ8Ô¡cjÄ€…£òéDðsDYÜ #¦$9ËØÇõÈAÆë˲ÇÙ|vÚYNŸ÷¡†"H@æ÷5¥â×}½ ½áƒà<ÏËöàãhŸAHŽP)ÔAüGû$eß+Ô߈iç%‚(«Š3U�çTtHŒJ«Ø”gT>Ák¼·,Ôª>çNQp1AÌ…k;µõEg2½!}“Ãc3‚÷†7¤mœN$¥|wA’P‡³›8ÆEÂç‘Ã:¿‘M§7D"Këª £) •£»H©æt˜ÌïëRÓa\”q_1&(q£]i¯´ÓP!i R¨3(‚øî(û^iôÅ2ó¼EPW!ý_ÚL Êa}3 ÿ¯sDYbx®Q. h,#¡¯ ¥Ê@p¬ú9EsáÚNm=d:‹í2? Ö ¡³|<”îR¹%bÎîÂĨq\ŸãØ^•íi„@€‰d¸íSÿoI«³+‚RFp¬#‚T71jæ÷uéĨqʸ¯šõÈœw«s[öuJ E’#AŠmEÿÑ>‰÷ +¢Ò.[„ê(„À *3 $3\cX–Q!LI’ÀóŒÈŽe£Cê ª¡žÍ3úªPI0®íÔVNŒÚÚÖö@?_o´¯IÂÜãLöÚ¹pjÓ‰ ÝÙ¶¡%.‘{*׃ûsãЛ÷ô÷ž>ì•h;lÎe<’Át)UØ–tûÃù\6Ʊ×mëµDn¦÷uî:ͶO\"׫û 7z=¦Ç0µå„Š $ AŠÏ1EÿÁ}¾Ü+tÌÑAO3:[”ê$„@ðµ½D? e2«~´¢i.èCÚÑ!g•Ô> ˆ«€s…�D’¡’`.\Û©­"‚,b2~ ;ÝûS§vrx_®ß¶F´bŲdµ_Þ×Õ BÒ@¤8(‚TßD�$ÍHe‘"¨‹‚QoŸsdd‚û„ò½JîÒLìèÔAXÎ9^~ð^~D‘ø,„úEsáÚN-{Äšöì/ý3yÞ[05"Z)͹ÜÙâ·Âûº*AH(‚žyŠ þƒû|»WpDà„œ%8-‚€ª !p~ààUô©P>W±†Ðƒ{EÈ*@€ÃóŽzýKÁߪO±R°ªõXPI0®íÔòˆ!«á·BV…"IEâp‹ ÑÊRÁg­hÅ©(Ñòôÿ�äF2Óä.YKs“<Ð>‰‚Õ"Á¡ èqU1Â�ˆ:sU@£Bо/{½qŸòOÖõž”C"ÿüŸÿsù¹Ÿû¹èÓêb ;ä4AÌ…k;5Š þ@¤žP!i Rn$ 8ÂUÉB&ãGòÐä1R&Áf;K¯þE–Çg ^Ou-K:B¼Ît¢ÃS•(8˜‚€ë½Œ¨QµûCüG£CPo~ñ‹_4ÏTU£)ð,á\ˆŠ æÂµE RO(‚4P)Ž$$\Ejõ19|[¾òöa2%Œ±…'“C¾z?Zº›¬‚ï" ŒÀº:ëeŠ  jBHÕ¢@â Ç9¤‰ Ñm É ¿þë¿>A]P5Á Ç‹c'n(‚$˜ ×vjAü"H=¡BÒ@¤8R‰ 'ß–ûÃÇ3¢ÆÎ–l´^ö /HwøYø¾.éÞº(Ë[ÁûŸÊÉÁ›Òë`%­óÑÿa>¥ÖåŽ\ÞdIZ|A�^tÖã|Ù"¨ŠRQ�¢Xš¨l#$ì䨨Ÿ´LB©Rtꄪ‰7EA$Á\¸¶S£âAê E’РűP¹õ@öÞ°—9?’Qï‚Y>üðSf4Hì}8Ì´ Ÿ‰œìI¯}^¶ÉÑpG6E)UA€ŽZÚ«šø ‚�8=¾ !h«gQT>Ã6„äž%×4=¼2‰ú  Ñ! “¡’`.\Û©QñŠ õ„"IEâ8[9½òUø>„ÉÉhWÚ[}3ÍeöþSóúB$p˜÷MÎ…‰UÍö˜FseABRÄÅ_DೂöÇV7’¢BT0#$/PÆÎЬŠG‡ |ú”’¡’`.\Û©ÅEu˜iÅeüÍ{ß´â Š;E²Š Åq¦Òº*ƒCw"Ôûß”Ýι(H´r ÄŽÃoK¿s~nE³Íd_ú[­àõ9Ü¿-i IC•D�gŽ ŸDà«’W¿Ç4*#ó(LøHŠ�ugaC£C°=Ê¥oJ8®E9všEsáÚNÍAP9Ç8Z±–G•šë·hÅ™&Mˆ Š ÅáA vÜ”ÝÑQôÿŒ0âãœtn}Ez[›Òî~EFã§aTÈôýóÒé ‚÷ÍR»­Î®<8øØL—ÙhmË­{¯ÈV«#½=͆œEÕD�G£—¿ÿ§gçT­ |B4 ÄÇQè,ÁùéÈûßþÛ›ý’;6–4 4 ¯ ÁæKtÄCÔ[dŠ æÂµš-‚B)Š ÅáAˆoTQp@þ¿7vvNÕÊÂ'!¤îQ qÞyçiÝSwᇔ D·UŸ-ˆtPVËŽ“´ y“¡’`.\Û©Q!„ò¡RAªAUE8¸Ãïþ³sªV&>!ynBˆ ®;Ê2œ:œ;#BH^ ¬­+Ä£Cðºè©)ZOy(‚$˜ ×vjA!¤|(‚EjPUüÞŸ<wvNÕʦl!#ÌMŠvh?\¼Ç¨’5x®!\d…‚¿E x˜^¨¿‡ó¢xH$Ñ\¸¶S£B!åC¤8(‚Tƒ*‹ 脺:§j>�‡×XsNyÖŽ¹RÑ]ün“œœ+ÎÙIÇ{p(Bò g ûÕ¢¢Cð{¿ôK¿d„<'8'&¦’h.\Û©Q!„ò¡RèHQñÜ'@$?âBœ8YGià7à4áwàÄ4͑ȑ´Ü'>cTÉäÜÉS\ƒ°‰çÏvÖÑ!¨'ð¼`ßqƒÓt(‚$˜ ×vjA!¤|(‚:RÞ;ÖÏGÒÛŒu�[ÙÝËDNdÔkÏÞï d}Mì¥{ušç2\™ß—ýÝñ@:®Ï6®ÈÝÁ˲{¿Õ¹){c]FøX;Ò>õ¾Åɾ º[ÁwÏIg÷]?ÓsÛ’áap>f#ëœÚҘ׀"H¾¨2§ŽG–¡ô ¼¯Qùiµä7~ã7¢OšœÅ³œ7ˆp$qÝËLDIêÃ:ÉQ—!‚ß=+:å{QÇ´üˆŸŠ ‰æÂµEB)Š ÅŽT5ëÇ2è\0‚�Ćýþ¶´6{2zŽÏ"acN� ˜ìK»#ö Ò~½‰m_ös‰+¡È “epýŽÞ—noON"!b³7 ¾ñL»rûà©_–ŽþîÉ#éwÎEÛDË·®Êàð$Øþªlv‡Á‘Ú„¢Lk{ ‡ÏƒßÛÞŠŽ+:~ó]Nðûè|Ãû(‚ä‹¿úWÿꜳ‘e¾{¿jÒàÐ¥¹žG’Q!dðl!¤HP@ðCÆo»žo¶èyHBø\PI4®íÔ(‚BHùP)t¤*'‚LƲ·Û‘ÖV_Lè„[™Ü–+ý‡²ß¿,[ýý(Êb"'~(cüc‹ òLÆÉøøc90¶‚Ÿ|$ñ¾%‚LÆïÊnç|´ïPàÐíÍvs(e¶¶¢ß ¹e„¼¾&—;e³s[öOðŠ e¡aí¶ÁÏŠø¾ÕšÚÇp™ÈŒ¢ÃdTYÊ�B…NiQQå¦Ï>Þ_$hàìúb™ç¨ÎPI0®íl#„R.讟Õ(‚d:Ss޵N=i]–îµpÚÆöàc™Le¸ƒÿÑ;'þ#9õÌôÍîMy­s.øÎ¶ÜzpWvÚ-óºonÔ3ïÝ”Nkö½Ð­yíÃîÜ‹Gud3ü¬Õ‘Þ½·åÀˆÀ%‚@”¸.ýƒ§a„ÆT0±˜AâÌ‹ S¬é2­NOî ¢óÁö[3±ÅìûŠ ÆÖ·Í{—Ì1…ÿçnŽÇ=8ŽÇÁ>.J{‰B¤h\,K‡#¾ï4#Áuà*‚"u 9úMVÏZž‰KÓ€ç\£C.]º4W@$YT¶uº Q$„"H¢¹pmg!„rï쪟Õ(‚d:SqÇÚ8çFÄ8’ãáNàìÛâÂÄz/ 6Ú»2:ùT†ÝóÁûˆd_áx(Ý"8Ž¢é"±èˆÔD‘ ÃÒkŸ…™è“àˆO‹ ˆº¸r;>LÆå©ø0eUdó¾·+íSÓW.HgÝHsÞ.Dß³¯£Š Áqœìçw1Dš!‚ø2 ’:(êhØ–•PaïQMrê׉è`TY”<“£.žùvÛÊeeÕ‹P!¤iËj'A$Á\¸¶³BH¹P)t¦œ"H4åc­¸íã‘ÜïwMâÏPp°…‚„×VäDhó¢Ãr‘ SŽåd N‹ Fp™ÛgËš±²‚ks|~!Ìïavºît˜HÁf‡ÙÞ¼(ËCê/‚@tðÅ9Q x êÀ^•IÀ‰ÇþšæÄàšâ^¯ £BÈ* ¼øòÌAÄÓz%niê!M‰[Esñõ ‡äÚVí/æzH„²ŠüëïˆüÔ;Á뿌Þ$KñÞgîúY 9Cª†ë<âVèt¥AL„³‚ɳ©0’B1öÊ'«b'FˆiþŒ¸‚Ï»VäÇ$NLÄŠuk‰ ÁksMÎO§øáÅüÆ‘IÜêNŒz9œîb’ªÚ‰Qg"¦!±jËŒpŸ@]#AàÔúÔ©‡³„QYØ/þâ/šÐõÏþóÓ÷Ö±ŸýÙŸ•ŸÿùŸw~æ»­2•Ex‘•¤Q!©è ’4@hE™ñ<¶ða"D~â'~ÂùYÓÍ•7‰"H‚¹@òS×¶jUì\Ò(þBäD~õ7E~üÍ™}a$òµï‰|ò—"ß >ê>ÃäHäïX۹짂}ýëC‘FßY•~×Ú/E•YTOe j¸Î#ne€ŽÅœcm„°Ã±ÙéÈ¥¨ó±ùʹ»}.x8î½kÒÞ¸ /÷^rDqœ—NçBôNü+'Ȇ´Ú/ɽø´”EXǤ‘$&Z"Úçœuú2èEaÆSQÄÊ'²MG™Ûçæl‹!@fû ÷3µb„+ðŽë0\µ&øß^"וtE™é¹û·,AÆä`Ùn„tt¿ì‘}ü¾:×pš0b›µ}ç;ßq¾ï»á­ãDê5Í-7œ@á,‹H¤,@y…A�Öç uNÇÃÿd½fq(‚$˜‹ï‘k[µß×Bˆw|òG"WÞr‹? ží×GÉÄÇú ŽÏ> Þ¿þvø½/üÇPDY‹Àï¹ãZ"H°¯çç;¶Ø”%®ºÙ¶*â:¸•œë*:ÖM£î"€&9`^ÀA‡‚ãà4‹ÓÀ1[Uªe8k°o”F…EàùFyñ ”[”_<_¬{ÜP‰á:�Û\@äpm«†0lBˆ|rŠ‹„ЇßI Î'&A½pŸû¿¾®ø°®|çà×>ŽœÁýø;£ìEDy¸êf5Li¬"®s‰[P©MA�œ€¬¦L,¦yÀAò-7‰O¬#‚`Ä;ïÕ,à á9q9J„�”_ßžqD3±Ü.†"H רæÓ]\ÛªUµƒMH™Šo‹<\4â/ƒí7DÞ #Ñgœ%Nà;ÁûA~j]Ç~$ØþýGÁ1d!ÆäÈ4"'dQRÔª Õ®s‰[P©MA0 ŠÑurO,ƒŽÀÂ|!ö‰uD BòƾŸŒ !q’é2@]‡ç‰’YVC$†ë�lKµ­mUœoNHy'šæòw~WR%W<>ùæŠ"HÚßPìé4˜¦óþ~'xýð£P<À¶°+ß ÞÓ9=A½óz,ω1k?ø-; ~ïkÁ{i÷ƒà÷Í” À®ûûóÓÓn&Áñ| ‰]­ßE×G?³íuk›uøwä®—Õª¸2 pKÜÊ€"H5hŠtî~ÞN³&dõÅ)òUE8{(¿E†ùãžâ7yo‰ ¢@Vò²Ïêˆ œþ’Š 1\`[‹’î8@ˆ7؉M×r´ÏA¦ùB–üï$òSÁ>_ÿAø?ò’Üøm‘_püŽ™¦ó¶È;‘è¡Ó{~ê·‚ýXÛirÕx$ˆãà}ˆ+n@| ~ëk)ráX1}åƒHäÕhûwÌ>ƒãþµà3üÎÇ<±ßÐ{’u$È¢©0°? ¼*â:—¸•EjÐ$`dNœ…¬Ñؼö_WVAàx"2£hBâ¨ÀZ&päq EDFÕ Š 1\`[‹ò‚pJ !þ€¨y8⧦¸,ƒK œîw~7@‚ÏÔùOƒ ¿úiôFÄôxí߉~{N4>3Ñ'±óJAL4LÊmOýV<ÊÂDC°Í×~Käj𞽞}ìy‰ ‹¦ÂT¹nvOÜÊ€"H5hš4R#KûBø9G`—gU9^\K[…:eñ”…2¦¾á7ñüP”[ Š 1\`[g6‚rùo¾/òQŠ‘UBHþL— �6‰ËàÚ߉„×6¿8þË® cD [èPôwbb˯¾!"a"­°áJøº¬bG¢‚ßÕé0z ã‘0Ókkg"È_+þ¸êe5¬îUU\ç·2H'‚|&Ãîù`ÛhyÙBˆ-SkL—• >>c‰ÛÉA_¶6ÎKwh'±—ɵ ßýFògwïZ¿Y«#»{ãÙ³|²/ƒîVð™u|sËÁ`GÚÁwí¥sñ�ŽGé™%sƒý¶»Òï_—îÜr½!ø4Ip\!Zd!X ëHgx5VAÊr:m4*Ç_ö±rA(:9*~ÏAQ¹ŽêE®°í,0¢ho‹Î÷}«Žyé„ò™Š =Î0˹ñ…ïÿGïââÄ_û‹òkģߗÍYŸE ·Çt9ߨy¥60måßÛéž4yLÌÔh{ä"y'v-§,g˜g"Èãàœì:ÙeHl]U\ç·2€S˜Ê±6¢C‘"x.ãÁÙì‚W9Ù¿-V[z#¥€°q~N�y*ý—¤ÓiK«;´Êg°m÷¦ŒN&Á©ôds³'£àT&‡÷åúí¯ËW?Û~¿s!úÝcÙïoK+Ú&ü½KÒÚÈáóe°½_‚ý@”i]•Áቮʦ9®à|F»ÒÞ¶ìKxF8ǯȎùÍyš*‚€u—ÎÅ÷8»>«ˆ pþ bù�Ê®D!¬¹$9Óy`—¹¢…—ºA$†ë�l; óõïŸþžZ•;Ü„Ô;Ê#uăk[‡81]u&0Í둆é1-)‚|rl|a$òNð{z¬iEäè0âI°×ƒÏFÛ¦Mæj'F…á84Gˆþî"¡ ä!‚Ä…é¸U}š¢ëœâVÕAžÉxï¦tZ—¤ð4úÜ!‚Lö¥å¶ìï÷ek«/ÓãX><øÔ<'¶Ð!“±<|¸8xIŸ!âÃA‚÷öv;ÒÒ}ã÷¶¶"$<Þyñ%IÂs‚sØ‘á¾|¯Û6™&‹ �Î÷*Kçê,¾›E4I“YEèÛè7Π΅Q!Íu²åx}”-Ab¸À¶³ø³ 7âúŽmÌ BˆXÂÆB§{IL#$Þ–ÅËïF,-‚ßùÁ{¶ØbkD©^ >×Ýv©m‚sœæA L¯©F‚,š²AåA¸®2®sŠ[8EéôLѸ!CLß°DÉøì´[áç­méãž<’>¦u´.Kwç¶ŒžG˜"Ò½!ýiôFÀÜTÛâ"K(*„ŸûéÝ•á]âN‹ “ƒÛr¥¿/#N\¶“sBG ÷gøhºL«#½{oËÁIôÄ™s™ 3æû̺˜Ö³%[8&ü«×qÿMé¶æ§ñœ~4U€‡b‡š#°Ù²ŠâëòŸŒ i.$pßóe ¿QTÄI Ãu�¶-«À¸¾g[U—c$¤NØ«·Ä‘Îa iE`òmß95…& ÝW`§ò”8~GgNàý…"H±§A‚ïü«Gó‚…½º Îa*lÄV«Qðù¿Ž3K«½,ʂϑ3¤Ê¸Î+ne�çzÞ±FäÂei÷öäd‚é/„Žº3¹BÚæs8ÿçÕ ÑØþÜŽ ŸÊøá#GžŒ4h$È›ò^ïB8ådn?qÇ~=$Â󘊫‰ ¤7| ½öyÙ|<ÛçÜu™ÈñpGZ§D ³c<J·lÿþ]éÄr™œEÓE ÎË¢UtÆØìXVÁ}ÈÛÙ\F…4”Ë<î7Ä5$]F™BÙ"ÙA$†ë�l[:ß®ïÅ ‰T !år8ú±1—ÜÓÆ–A4q)¾gGZœ… '§ò‰èïDâp Ö±.A’D‡eD׿qz)]ó}=Nëx~ê7E†Ö1™ü)ÿqvݲA-Y«ƒí:¯¸•ÁiûT^‹yg =ß¾‰‰ù“d4|Sý]éÝÞ“ñäX>½-}éõîÈhš 4ÀìËŽ�Q‹‹,Öt˜“½ÓD\1ÑQ„ŠÚÜ”˜•EÑq˜ÇÃä÷ˆÎ‡Óa’•Ô±Nr0tE™rF`QN^Š•á‚AùB¹Ÿâ²aY÷`•)LEcG…pÙÒf€rœu„ê&ˆ\y*(‚Äp€miH Â$©„øÓâzàÀ?´ÕŠÀAø½àýḦ‹ Óh’Àéwåÿ˜Kª8÷ñÄ¡§°„“ëÁq™C ÞûW¿#ò Ñ~ô8¦¢ÁoIˆª ïýÏá6A}zˆ 5b¢R‚ÿ¿ù{"ßœ8#PXÇþÁûŽD ˆ ÇÁù}-é˜UàŽW·ÑH;úžq›‹ÀQ¡'ø>¦aªÎ;+LWY´\9¬Q Àunq+8×§#A.I«s[öuÊ˜Š ÏB!ÀL“y2å`PÁ@ „%dDï¤Çþn”HT§ßlŸ¿*Ûvä‡N.Ç2ÿ`¬.‚àœŽÌ9Ï®9c¦%$FmïÊèäÈL £>3IR[HŒjD#ly,^“Ýû¶ÐBd†ké\=K IGp_ýгlTS†ÏA‚çâÕþÃ¥ŸÇeEDâTi*ÎNl3€3e®ìu4§VåE®°- iB±aK!8Ýï|8åÑÊ.¶Adø×Ág¶8¢D|[;RC±WP1öÎ,úÁ ÄŒï̾ƒUW>ü$iþí§pÍBlÇl|WÏNP ÁÂ䉽¤¨*ðh¤Æ4±«%n8 ö‰é0ß¶™®J|ϵ40Ä‘¥ÛD¿õ5ë<ÍQ²ð·@„]šº·.S]ç·28-‚h~à³Öå«Ò»ÿ¶|Usblödïãl·‚×íkÒC4Hàà¿7|U®t¯FËÀÞ–ý£=Ù½rM®!wÈœp‘–ù%rb¦çDËÉÎÙ¦\ê\’MóZ£IBE?W¡Æ8ˆÓïÍGž8?›‹Z W¦™Fç¼F©èõŠ/á«+Ùh~”ø¹=v¥íkcn¥˜yð9 g+œÕ,G`ͽ=çȪÂÙ"H(¾[A”\FÁT-³UåÑ+Ó˜K¦¾d•åûàg‹²${(‚Äp€miI3 c~BYDv,Z V§(<×ùÅ­ à¨TѱnANgõóŸÿ¼¹6ñX´6_¹#w·_¿ûOít2ß©8%ï59_t:Õ>Wš~ç0æÚòʽ¾l#·ËTDC´„B¼‡h!l÷‚to…"W«óš<\Ÿ‰„'w‚a]}ÈCdŽß•]&ãQZ`r(ÃLO;'—;ƒm2ž¾‡ýçØÿ¶|b–eÖýÞ‘÷‡7¦ÿ;÷k±Œ‚ûQªªÀI†¨z’…H§e„+OE®°mÒÌK‡=¶F˜ !„,ˆ®ú5nuÊÇä:¿¸•:‚AüG;ìABtö'ò'å—ù—£wmÂH¢ùÈ0Kæk¢ubÉ{xb¦CEInÍ4¦…SÄ0ÉDøX?6&‡AÔ §I™d¸!E¯5BH±ŽÉLá W52Ó¨?æøÓàó¢dÅÈAóBlÊUݱi‡ÓÙæs‚Ø {Ãërjzš&ìµ"£â,#‚@<¨z~ ”1œ£Bê îëªÑ\yªx(‚Äp€mËvZ ŒB!„,êÙ$r¿AÓ`×9Æ­ (‚TŠ 3ìXŒèº—Î;ûŽd¾r:yïL±§SE†÷ŸÚÓœbœA¢í’^;)xo¡b‹F™ÌŽe^İsãDBN$‚LÆ#¹ßï†ûs‰ “±Œîß’®‰HÉFx€c¬Ëè8£Bê Êò²BD®<UAb¸À¶eI;-Æ!„’žx³„:&£vgÜÊ�Î EÿÁ}MA\#°pFðÞ¼Cc;ûQRÝÄd¾³¼OOE‚à;V$Éœˆc)$Zi(~LˆÈ8•“‘"/H{çÁéèƒF½`:K¸/#x˜¨’ ²3<”gSaľ.˜¶s1Üï3W6"îœÄ:Á¨ú‡z™ä¨šÙ刧Ïòù…‚ãz¨€«Â*þ)Vçå DÙìWÉ¢Ãu�¶­BšÕbÔ0…#›„B’À슴s !Ø®ŽË’ÇÏÓee #Ë4ÿ 4YAž‰¤XŒÐâÁQšäT2[+™ïÈ‘¼W·kajÉs;?Ǧ´·_“þ+Q²^#”˜ŸŠ°¢56»Ò{y–Ôwj›—¤séìããbÉÏ™e¡Ÿ[9A6ZmÙ¾w0—¬z2ý<Ê læCÁ{[Òí]“öV8ú4Z•û=ÇæuKÚÝ—¥ÛÎSn¢}ÆI+‚ B§®«dØQHŒ ©6¸—i§wU"Gœ!ô,¢ímé«ÐºÒjN;ãboµ¡Ãu�¶­Ê{Ÿ¹÷ç2tØÑÁ'„2DâEù–âBÈ'5íWÚç˜deÁHêÐd$©¬èHm•Wi0ÉR»÷§ù<&‡÷åúmkÙçI+‚àÔyª€F…`E"ÝHõ@…¨˜”ýLî÷"Ĭ‚†¥Ýá\®ºšE5Š K²Lâ>5F…BÈŒ¤è—©Rç|KñsvYYÀ±¦UǪFQ"Àçºtnõ˜ÈÉÁ ÊÏFtzoÊÁ+¶I£ë¸þM@E7L©`TH5AYM+š&‹ ¶%׺—MV85í©•ßÇZ}ÉAìÕ L4ÚÇát6ó¿&íÎåé÷ÍjN{7£%Õ£DËÑ(Ó§Z¥sùé >š›3]5«{S^CäXð›·ܾ£«f=“qìwŽ¢ïµ:9wU‡Ïdºœ~ë²twnËè¹^‹èüNöe`rûjudwoNÍsíkAb¸À¶uXEa: ÅBHS‘fùÛ¸UqsÜ©#EŠ �S0m†Ži¶¤A ,“g¡ê š�ׄQ!Õd™UŒÎŒ1¦›™é+½ö¹ù( {õ¥©ò,Ê;äZJóY9|Ì>Âߘ­e ¤&‚¤m¦ÏMÌ*Rz vâäpfêÝ V:‰3áëäß96ß›m®fQåŽy2–‡ÇaÄÚ47ÒIxNfÕª0¢¥uƾA$†ë�l[—U…Ä?þóhG„Rc üb�!mä‡møNVÜr{Ü©#E‹ �"Ä’iDeFÖër 0*¤z >I+Ú-A"‘Ã.\«/M·}EiD‘°S+PYû2₵m”ïhŠ˜Ù|O§ÃœAÂÄÈ ¯¿óIlÛhß'Éhø¦ ú»Ò»½&nžÇGÁïž“­~4ψ+gìkAb¸À¶¬X&YjÜ0"ú£úÎs'„4˜ò²L¥¸Õ5 ª ×ùÇ:R†GBH“¢òf‘ñB@SaTHõH#ì)‹E;äé/pð«/Š9k*Kœ0"–YíÉŠÿ˜a¾M“™‹FYRqþN|Û¸pßÀùÇ‹ £N‚oa5,+$y_n(‚Äp€mY‚QN×o,ko}"òΧáþà@ Z„F£Ñ|6ˆ¸¨³ è.JtšÖe׸®AÜ©#eˆ @òLVt FÜFß0*¤Jàþ Ú! ‹EóÒn#Æ9éì¾+c2·úÒéOW‘êÉèY|ª»rðÓZg¹2NæVs:œæêØVû%¹wð4:�`åò09A°2Ôyétþfø{my¹×VͲ Ûhˆ/O¬œ áïÜé_¾7¿í˽$WºWMÞ’pzË÷d¶JVp~GÉ9ANÿ.DŸd(‚Äp€mYƒûªÓcÔV™+O£Ñhu2ˆ)˜nØ$\×!n„Ô‘²D�!ìuGægKîZtê{ƒQnœ Øç°Î]y?ò>ýl0]Fäi8jŸço@ÂÔ7¥7]"7p&ÞüŠÜºŸTi„£¶ó¿§ŽYðñܱ† Ó°HAä £’YT®I§U‰´S¸‹ :…äE®°-/²Š ¡Ñh´&D`D–4×õˆ!u¤4ädO^í?”od´t®B0ºiüœc9ìH£¼½=1c˜Æ²F4‘œpçž¼?x9xïhþs$1¼~GTïÀ¶Ûé˜0úÏ¢7C&‡ÙnY"F4â{eáäI<7ùÂó‰œìß–Ž™¯£­vˆ|:ÎA–]n´)hTȲâ)Ž´ÉQ“E<KVôu\ Ãu�¶åIQ!4ÖCîˆÇM‹þ°q]—¸RGÊAÂPôsF¿‹ßu¦'Ì‹ À^ñ ¨ÜæDÏdØS°^ÂɇZúù3?|‰"“ƒÛr¥ÿPöû—g‰ Á~°‚V`ˆÞI‡-‚h˜ü%éOÃç³AàìÙ$§ø†ˆF…ø ê†4¹ƒÎŒ!¹“TÿSI°"À\yNq¡Ñh4·!±t“ÅÅumâFH)^™„Iøt*H玼?¼!ÿ«èÿû{·dÿd"“ñ»²«SLŒajÈGF<˜ŸªrZxÑ—-ÏnDÝW`ñ}Ä#E¦`*Ìu#P˜ýmõg"&Iaú)+3B$<–sÒéÝ•áÜ:äÙŠ Ë,5ÚTPvq?Ò•aRg•kŠ å’TÿSI°"’UÂ@F«²1òã4®ë7BêH9‘ öj3~¡ósòùÿæÿhVf0B‰Â|‹¢-Ò‰ ÑkLwÙýz:Sa®Ü…¼Þº<‹Ø8%‚Äò}8ÄšySÞë]Öö@çêãìDM.É$ ‹aTˆ¤MŽJ¤\(‚Äp€me ËFº¦Êü›ïŸ~F£Ñê`>õÑÔœ‹p]³¸RG¼A&cÝ¿%×þO?8<ÿkùÅWÿÇà½Cî̯\p–n»Üt Ÿ‡BJ$jkͦÄQ¤1¢(DXÓaÌr™çe{ð±u~Ù‰ ˆ�SOÒƒrŒ{¾<“<I“•"H¹$ÕÿA¬l0 úø‡"ï}Š"œ6C£Ñêb=ý†•^š´Ôíª¸®aÜ©#å‹ GÁë‹ÒÞy ãg#ù¥¿þ‘ÏýïÿòÖ«š3$ K'FãüÇÖµruDSyÚ»2:d¡S{0¥åM90ïE+ɤAt­mé#DÏ‚eq‘„,£Bü!Ít®âD×êNX‚¶'ƒ‘É2äü|c㊠޿+SïGŸÙ+ר¸êŠ~;9=]¶ ™ïIÿò%`ê5ýØÔ½¹ÏÔP— d4~m”Š 1\`›ÀYÀH)¢EÐÁàDÀ™ Ñh4Ÿ ®ÖS0LûCýÅi.Ëãj£âFH)G‰¢4‚÷öà@›×-iw_–n{Sþû_zÃtÈÿÎ_µ:ç­«28ü‘3Ê ÓN¼nŸ´D®#‡‡ósË™™þĉh¥‰©ãòLÆ£Ál‰\X»+ýáA(¾œbÞI2B¦çlÛùOÔÒçIA°ú V‡!«2kH!©<p%G=[Ðx[úIèÒØ".þÝ—AQkĬ4ÿÜ£=¼OºF”µ?G]¸+·§Bkp´·e»sYÚñ%¹£z¢Õ¹){‘Har']¹97 ð4gˆªsâopAÜ ê0zÓ‘TÿSI0B!Ä\mTÜ©#åˆ ‹x&_{õÊ}îŸvÈ<.ä[ßú–™J@ÖC£Bp})(O’Àgs¦bă‹ÉQ`K9T 0Ñöç9Þ‘ûLO>–#^Ì2~$§‘Q"æý‡óù‡Ì~vfÓû–"­.û}þÔràgA$†ë�l#„B|ÀÕFÅ:â§NgùßjDÄý=é=HЬð{ÛΘ’³.G£çi–%‹A‚N\KF…Ošä¨É"¦´]ˆž½Mù»ÿô×d‘ø_§ MƲ·«SL"3Ñ_IâCÑipfJ^øùt_ñé.ÎïGL1cö’ÜárÜgO³Kb9D§ã8/Š 1\`!„â®6*n„Ô?EÈiQx®nr6.$MBI²¸Î¸®¸ÖŒ )\óÄH€3#A\޾Ú¡0`’‡Q&òÂh‹t"Hø9¢Øn…‘ S’EL…¹ óKrŸAæ§Æ…Š °´P!„Ò\mTÜ©#¾‹ �"Ä’L\ø¨’=Œ )$G=ëZ§AÃç 雚s'xoxCÚFL@²ÑwÃ\B‰8DŒÄé0.’>„”©°»M‰‰>3¹‘¬¤¥ãtÎ@�§ÃÀÒB„BHcpµQq#¤ŽTAÓ !„S;’‰‹ ¸ŽòלQ!ۨ<§AŽ£ÕnÈpüD0MÆÇCéž³—×^DLÄX˜5NÂçˆHÙÆT˜è]9KW¸2+-iuvåÁAX9‡Kx/+‚<“ñÞk²s{_&s"£Š „Bƒ«Š!u¤ "ÐȆEKe ¬³ÈËl»q¢£’|±£Bx½óåe:‰3E]}©uU¾úÞÙnmNþ5éA¸€³üQøù4ú«V},gE(`ÌGkœ±Dî© Ÿ1ïY+B™(ùí&ã‘ ¦K䶤ÛFËs;˜î7n—¤ÿÝo:>ã¹A!„4W7BêHUD�!õDgg%2X>Ó8)…¤mOöäÕþÄ‘ãÅØ"¢pHqàú#*Ó6˜¿&{pMÏ*ÓgŠ ˜ŒÈN÷þT¬˜ޗ눒ˆþ'‹¡Ãu�¶B!>àj£âFH©’ ‚Q÷Ì~f±|æÚ"’'^•s‰áó‹±EäN€3NŠŽ:¦l0*$ÎJŽººbM™FB¼™Yá-e‹ì0‰Z£Mr„"H רF!„ø€«Š!u¤"ÈtÎ}Щouäü“!ëoýŸåÿwèäß{w¯Jk.ìsÞoJaïpjúäHWRœ‚÷Þ‹^w^“µ|fgðAâ÷Zkr ŽÒ41á,™bërG.·Bac2~Wv;ah}«s[ö3åÞ6‘(»QRFÓyš¤q¶{¿³ãUL¶Ä¿iCÍ„F…d ¦¤ä¨ëD‚õ¡Ãu�¶B!>àj£âFHñ_ WEhmäpFL´Z;ò‹½ÿ‡l_üùï~ìïÉîæâ[ Ña+LR8[òò¹œìß–ÎVWnõvdg°&4‘Qb@ç÷ŽÍþPŒøtº¬¦YAa3DfÉ ? >!Ldh–™|Á¬°àÞÖžMH”hŽÛ> …³\ft=Ì*3TÑit¾Ë×"£B²HRrTŠ åB$†ë�l#„B|ÀÕFÅ:â¿‚0ïs²Õæèa - ‚ü·ÿíÅÓáÞvBAcºúA´Ìd{GÑê s"ˆó{ŸXÄ ¬(ñQ°é•XRCˆ Ißì½'Ûž!‚LÆ2º+ ѶÊpg ~TAÈY $I±0*$;PÆ“Ê6Er¡Ãu�¶B!>àj£âFH©J$H¸dãó0"ÂDhLäOóËóßüŒü£ÿ1¶t®J¶dgxh ˜’Ò“nÿÛ2FDÈæ¶ô÷ƒ< ÿž-P¨ò8øZO6[ØÇQ4bE ²ó@Æ–BáÞ6I‰–ÅÄ>ž©`ò,8´3s†¨rÖ”RŒ Ɉ€.(‚” E®°BñW7Bêˆÿ"H@,'ˆ‰‚0âEmñ¿ø_þoäs90ìœ Òj¿$÷þýWÂ(Î]!2¯!F~8]>spxrê{wú×Ãü!ç¥ÓÑü!méíÈÞn¸Te˜ç#x³'{­Ü­¶lß;ÉdìÜvÁMó1KsÈcóº%íîËÒmošé5ǘRW¸oÍM¢"m¬CüC£B°¤.£BV‘ .±ƒ"H¹P‰á:�Û!„pµQq#¤ŽTBY@>Kçú¢X^‘î4*D“]¹}ð4ú?A~þçžSa<G£BÎZé„$“éD¤\(‚Äp€m„Bˆ¸Ú¨¸RGê ‚€Ì—ÎõŠc9ìÌViu¤÷à@åDøs?÷s&Ê€øyF…,ORrTŠ åB$†ë�l#„B|ÀÕFÅ:Rà÷1ÂÞD§àç>÷¹šŠ@õÓ–à¼3*$=¸N®h'Š åB$†ë�l#„B|ÀÕFÅ:’¥‚Z8"eÚõë×åÒ¥Kò;¿ó;ÎÏëjwîÜ1"©Œ YDCÅ‚úGqZ±†ë¿q(‚$!„â®6*n„Ô‘¬DD  #ìƒýäOþ¤|þóŸw~VW»xñ"óTF…¤Ç•IgãŽ9­XsE¡QI0B!Ä\mTÜ©#Y‰ >Ñt8Jè˜7œ/—_­>vTqÃe «E#„B|ÀÕFÅ:RG`TÎ$¦ÖDà\I=Ш[Ìñrš¤ä¨Ä?(‚$!„â®6*n„Ô‘ºŠ �$òÔÝ‘„SˆeWI½À}EùmRDS0†S¿ªE#„B|ÀÕFÅ:RgÔ{éÜD 4!⥉ ÜÂágTÈ<®ä¨Ä?(‚$!„â®6*n„Ô‘º‹ �#ép"ë¸òÎ !W©7(ÃŒ ™ç™ dý‡"H‚B!>àj£âFHi‚C Ž!ôˆ�A$©?Œ ™¡Ëá¿¡’`„Bˆ¸Ú¨¸RGš"‚�8uK¨ˆ\ \)£Y0*„ypªE#„B|ÀÕFÅ:Ò$¤ŽKç"ß V!ÍÂŽ iâýÇT˜_|1úø E#„B|ÀÕFÅ:Ò$Ày¬ËÒ¹ßúÖ·ŒLš =”ç&F1ŽÿPI0B!Ä\mTÜ©#MA�„8PUÏ«€©=¯¿þzôi*(LjŠ@n˜&E…@�drT¿¡’`„Bˆ¸Ú¨¸RGš(‚€:, Ç·êBÉDD@kRT“£úE#„B|ÀÕFÅ:ÒTÀÂhrCêuôŸ͕ф¨™LŽê7AŒBñW7BêH“EPÕ¥s1ê_·•nH64%*„B ÿPI0B!Ä\mTÜ©#MA�Dß…ø´3£’D¢B˜Õo(‚$!„â®6*n„ÔŠ ÕX:" Föþÿ¿ñrþüùèB’±£Bê&šAØùùŸÿyólเàÓÄUr|†"H‚B!>àj£âFH¡‚H 8о. ç£Þ¶A¸ÁûLŽJ¡Q! ª9sÀ³`|ü‚"H‚B!>àj£âFH¡2”¯ŽœØ¸Ã§ÆerI ~¨€P娤gçEü‚"H‚B!>àj£âFH¡2ÏKçº?&G%Ëe¼ÊQ!®È(œñ Š F!„ø€«Š!u„"ÈiY©&¾9ˆ8&Ûé£�BV¥Q!8~ûy`>ÿ ’`„Bˆ¸Ú¨¸RG(‚¸À�ÑÁ'pL@H–T9*Çk ƒu]§ÊPI0B!Ä\mTÜ©#Aܨƒð~Y΢Nð1J…T”¥ªF…`ÚŽI_‰PI0B!Ä\mTÜ©#A’sçJ—ÎU‡«,G !)€¼Ð¨Ls•1_WNÂq12ÊO(‚$!„â®6*n„ÔŠ g£ÂÇ¿ü—ÿÒüE$Æ2«±@¸€ˆ’•ýú¯ÿºóýª™‰gÉ,*âÊ®¢+²¤Bp¿ô¥/f_üâïûhM*ûAŒBñW7BêEÅ@xм:% pöud=.4Ùàâ/ñL½²£B Š ì§™v‚{‹m±ˆ'´™¡îÀߦ@$Á!„pµQq#¤ŽP98¶�¢vÖ”|G#N£bñ$E9þ™Ÿù™¹²ŸtïXîƒëCdfA!„qµQq#¤ŽPI&I�%åY”WP©3âeå;^¶áØã}äæ`¹O†"ȼQ!„BJÄÕFÅ:B$8sÈ€‘í¸#‘#Þƒ#Xµ6І"Hup•}˜}ÿ´Üûš8Õ'(‚ÌEB!¤D\mTÜ©#AÒqŒrÃÙƒçPÁgø†)äl(‚T]’9É>üðC–û%¡2oA!„qµQq#¤ŽPY;:Ž^C¡SŸŠ ÕN;Lïù/|á ò×ÿú_wFD‘d(‚ÌEB!¤D\mTÜ©#AVb–…�Ò$§& (‚T”{ˆb¹_Š óF„B)W7BêEåÁô, „I —‡"H5ÑrGžå~5(‚ÌEB!¤D\mTÜ©#A–Có$à/Y Š Õƒå>(‚ÌEB!¤D\mTÜ©#AÒ‘o80È‚q²:AªƒNûBËýúP™7Š „BH‰¸Ú¨¸RG(‚,N r §¬Ej åžÓ¾²ƒ"ȼQ!„BJÄÕFÅ:Bäl°úA¬C²"ˆÿàþ°ÜgEy£B!„”ˆ«Š!u„"ˆ,‹©/º.ÉŠ þb—{NÉŠ óF„B)W7BêEÓ`ô£àˆ!ÙCÄO¾õ­o±Üç Ey£B!„”ˆ«Š!u„"È ä=@Þ8‚MrTІ"ˆ_ Üë´/!$?(‚ÌEB!¤D\mTÜ©#ABú)�pR˜2_(‚øË}±P™7Š „BH‰¸Ú¨¸RG(‚ˆ¼õÖ[²±±AǼ (‚øÊ=¢?x/Šƒ"ȼQ!„BJÄÕFÅ:Òd#ßXþóÅ_dÈ¡R.v¹ç´¯b¡2oA!„qµQq#¤Ž4U#‚Qp8ƒœP,AÊåâÇzåþ3vÏËÆÆŒŸGï‘4P™7Š „BH‰¸Ú¨¸RGš(‚è*X†Eò@¹Ç4˜µy>’ÞæY"ÈDNF·¥?:‰½n6Aæ"!„R"®6*n„Ô‘&Š éðÇ2è¼Tîh÷x Ùè d¬ÿëëÜÉçü)‚”rßdÂ"dò± ¶/J‡ýºáP™7Š „BH‰¸Ú¨¸RG(‚øÏóQO6 >ò‡"Hy$Š *¶µ¯J·s.Øîœtúädr(Ã-ó½é{ØÞA&ãwe×|gCZÛ²òDF½ ÑwlÛ”ÎàïÝ”N+¶¿†@dÞ(‚B!%âj£âFH¡â?AHV@ŒH”³ö®ŒNžËÉhWÚs9?&r<Ü‘––éò‰ »/H»·''“}éo½ ÝágÑçí0úÃ~}<”nëBðúH&}ÙjíÈðxb~¡ P™7Š „BH‰¸Ú¨¸RG(‚$© ›Ó8zß œ¸ ÙØ¼&·^Û–F°o½!3B®£ÙÏd<¼8Žá¨w8"8w“±ìív‚ïèhx`#yxjô<æNGàÏÉåÎÅÐù´¦Æ<†Ã¼ÞìÞ”×°ŸÖ¶ÜzpWvÚ-󺿛SlÔý(ú^«sM®™m¯ÊàðY°í±ì÷£sëÞþ軳ó‡#|²/ƒnÐêÈîÞXž%îël(‚”î_sb›%\LÆ#¹ßï†eû”òQTNPÆBÛìäy’¢exjÑû "ȼQ!„BJÄÕFÅ:Bä ŒÃŠ�ÆAÜÀö“pDÜ GáëÍžŒìÔf´[Ń=éµ/Kÿà©5òý©{ô|Ê39\•ÍíNžÊAÿRä|>éJôúDF½¶l˜‘{ìï|$¦„¯#êu?6ß›mÛ–Î ¨àਞÃçOeü𑌡ÉLÏÿÄCËOxl­³öµ�Š åá!‰S‘ ¸Ç‡¿”ß ²3< E¯S"Èÿ¿½;z‘ã<ó=îC×¾ øÊ¹XØ+] ‹HÀ¹˜ ˜ ]ìa/|@ ‹äæˆZ´W†!Öâ„°a°‡ã¶͆8»‰åa‘a•YÅr°dÉJpE:ëÈÞñ{ž§ú}kÞzú©î·fº§jº¾øa©ûíêêê’«Þ§ßz+ŽyåÚdŸIÚŠ Õ>y¦ZÞxÆ Ò E��zä£l€UDd[‰Å޶?먛o¾6tTDAÑ!òBX»ôsé,¦Q&¿ˆWE‹êM•>ÿͺ P½GKdòº–?»¿º?4mÿ*¾Ïãð››7µ­ÍpñâÂÍϲϯ¿ö¿ÎlÞžt\«Žì¬eÍF¤?º´©ö³¿<NëÈ¡8Úg¿šÔTG, ÿFöc-ªýÛÁþ+ûþ/?>Õôœì/ÿtïàu::è㽃?ß’Nz.œ:ý×á§{_Ä5X}Aš¡�@¼c” °Š(‚ÌЩòy¸yñÛ“_ÄŸ¥_É¥ ^ˆE’Úïý_Ïk“BÆd„Eœdò0E÷WwÛÖ.&ïQ=oF‚LFÈ«Ò(8¤}Y>Š ý™[I#=°Aš¡�@¼c” °Š(‚´™­aóüÚZøïéÏ~«—‰<w*œÞø~Ø8ý|¼Ü%ý’ž^÷Bxyë·á«lNú×óøÎêàŽqN}ìýü|3¬­¥»rèHϦ~uÿÑæùj©¶ÿr=\ZOs{è¥>·¿ößü¼}Né÷=ÇEþèwäÊF MŠZXŠ ÍP� GÞ1ÊXEA–kÿÁµðÊÆ›õ¯ëû÷ß ç_‹—•ŒEþ´Ap,(‚4C�€yÇ(`QY¦ýðdo+΢¿²¿Ö.¾öì`F†"H(‚ô‹"H3A��è‘wŒ²VE7¶(‚ô‹"H3A��è‘wŒ²VE7¶(‚ô‹"H3A��è‘wŒ²VE7¶Ž­ò•Þ!i2ÑêAôr°­Éí—ã]ŠšÏkÖÃÖ{?1·vΞ«n;=±¿·Î<÷Ͱqý÷ñ‘Ì“½píâZ5¡ðäÖÔ? ›¯¾Ýzç›êÎ8-ïÓx.¿+T|ìù‹? ?q'Q~~ênIAš¡�@¼c” °Š(‚“¥w ¿˜Üƶºu­sDç&y;\¬ïF³.½ýáÕ7ÛÿÇf;…?Ùú~ö÷YÎÅ­›-·ùmG¤?ú½µû<Üü»0·s>‚jŸOw ÊæÇ©nµ¬;M~»f¥ûðEÙß6ôÎJ矅û[—Âk{_T-'mÿ:¬­§6®‡Æÿªâ™N­ý}øeõoKÒ»-­ÿýìÏ–ÝÛro,í׫uû8lmȲå3Uíb¡Ä›™"H3A��è‘wŒ²VEYNP§pÿvØ|y-¬þË©_Æ÷ïo…—Oé¯á?‹gÕ­s×/¥÷ia:…y/H·soë•pZo \­[9Š ý™U©ö“Ò÷»�ý}b²/¦Ñùþ¼_ÿQxS÷µ'¿ {Ya0ý{ØðAØEj_-ܾ½Μ٠{u¥A—óJ8åç8täqøÍÞ£ªØÑø7²ÿ ìî> âWR(‚��Ð#ïe¬"Š íNR§pïµ°¾¹no~7œÙÌ}þ}¸¾ñÍé_ËKÌ,‚(-ÄœëÜá¤ÒŸÖ"È“_†‹õ]ŒÖÃ?¾÷Â+éï§^›·eï‘Ný//¥KLb´0ÐV<pö÷ªxqæT܇'ûs½¬©e4÷÷Üd—ý¼ZÞwÃf=Bd²¿Wë)vè"Èé#MAš¡�@¼c” °Š(‚´ht ¿þצŽz˜tÖN­½nëÈÁt uÄÈùª#XÍ“ÿ2þøzØ85=7A‘¹EíŒê¼ æ3ÍA¤?º_µñ;ðZT8=Ùª“‚Cõ½Ï+~îï“?kAíÕIѯ6Ÿü9/üMAªÏÕúo*3¯Òq"(‚ÌE¤%�� wŒ²VEvn‡¦**ÄŽÒP:…ºŒõ×&4ûËøTd²ŒºÐ2ësŠ +§¼ò,<¸ù¿ÃæÆyMÚä±ëb10¿¼ªE§‘Ožû»ü›©÷aM] Ð¢ˆÎs.lݗΨŽÚ¼"ˆÙ÷¿ºy)|»1êÊo—£Ò E��zä£l€UD¤]£C³ÿ Ü|óÕÉuGiÂI!"ë>wêà—ñØa<õòV¸_¯ÛWÒß[ŸÉÀÜ"—Ü4º´9ø~÷ÃéàŸ>}!\ð™ìs5)‚hA­Ëåaý½dË{^×íïÂËyñ¡*F~[Þçóìï²Ï¯] ×ö&ÿ›üéX©Fz}2ïNUL”ã›ÈZéS?—Ö¾{ðžE&Š -�`¼c” °Š(‚´;èÐ|.±o‡Ó¯\ žiÇ.v”Ñ)ÔuÛ8ùQuµ›–ÿ^݉æí°W=-?R„‰QO¢YEIA`öñÇ“??wúoÂE ¢ûÓã»Õ]WŠm/„—·~ö½Õ¾žÚ´o½ÒÔ¾è?_íƒÕcéýbA¯zì`ÄÓþƒ›a«¾E®æLØØ¼÷ÿiË5©G˜L&^ÓmR='ËÛºÝØï›Ë0Û#¢Ò E��zä£l€UD¤ÝA§ðGá_þñœt¨¤Ã¿ñý°qúùIÇ?ÞŠó ÓtÜÂ챺ýÇakíùØ.­ƒ^Ú°up‹\Íé°y}¯Ñ‰ËÙ·È] ú½Öþƒká•7ëýÒ»,f£Ò E��zä£l€UDäðèEþ¾’\ªŠ`ùÈ¢¤*Pšbž¤}ôÕbQi†"��=òŽQ6À*¢rXt ‹"Hô»E(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷‡"H¿(‚4C�€yÇ(`QÁqcû÷G‹ Ú 'ýä{ßû^õß± Ò��†À;FÙ�«h¬Eo}ë[Õ¯²äø£Ûž"H?~ðƒ¸ß 9¾Ü»w/~«"HK��ïe¬¢1A>û쳩_hÉñF¿�«"HK��ïe¬¢1A��ËG¤%�� wŒ²VE�À2Pi ��Cà£l€UD�° AZ�ÀxÇ(`Q�,E–��0Þ1ÊXEA��Ë@¤%�� wŒ²VE�À2Ì+‚|L�€þxÇ(`Í+‚|!'±��tõÇ/ýãJʧ_Ć‘wîeãñÚÙ”¢� ïe¬¢yEý%�€®~÷gÿ¸’¢Ïç¼s/×ΦE�ÀhxÇ(`}òŸþÉiŠþ’�@Wz¹‹w\I±EvïÜËÆãµ³)E�0Þ1ÊXEó~©³Ã•�(ñ›§þq%Å^né{Ùx¼v6¥(‚��FÃ;FÙ�«¨ëìý��Ìó__ûÇ”<–wîeãñÚÙ”¢� ïe¬¢/÷ý“Ó<z2 �@©y“¢þÇ“Ø0ã{Ùx¼v6¥(‚��FÃ;FÙ�«JOF½“Ôæ�t1o¾)ïRKïÜËÆãµ³)E�0Þ1ÊXUóNVur;��JÝþ“<IùÓW±aÆ;÷²ñxílJQ�Œ†wŒ²VÕ¼a˽l�€yJŽ)ïÜËÆãµ³)E�0Þ1ÊXe³~µÓçr—�@PÛ;–¤´.ôνl<^;›RA��£á£l€U¦'¥öDõ× áßcqD !L �˜eÞÇ4Ÿ=‹ ïÜËÆãµ³)E�0Þ1ÊXeiø²=´øaOZ5L �˜eÞSš¶Ë+½s/×ΦE�ÀhxÇ(`Õí͹K £A��mJFh‘¤wîeãñÚÙ”¢� ïe¬ºßýÙ?iÍ£m��°~óÔ?näÑBIïÜËÆãµ³)E�0Þ1ÊXu:ÊcÞm 5_Ì8‰�ŒÎóá/òè„©³xç^6¯M)Š �€ÑðŽQ6À”ŒÑ_û¸,� ´0^R@Ÿ5 Dyç^6¯M)Š �€ÑðŽQ6Àhqã?æÌ ¢™÷‹�`õ•3Ún‹›óνl<^;›RA��£á£l€±( ¢i»Í!�`¼Û«{i»#LÎ;÷²ñxílJQ�Œ†wŒ²Ƥd‚; ·Í€q*¹®æÓ/â æðνl<^;›RA��£á£lpÂHç|çn—ß á¥_‡Pð#2¥×xk(„�À¸h¤ä¡—Ê”Î!å{Ùx¼v6¥(‚��FÃ;FÙÚ³οÂ7Þ>ȺtʟƧ­›Í¶šå19—œ;÷Cxã–¬_¾¾7B¸z7„]ù€åùŸ¥K&ä$èêNÖ΋l§ËÊrÚ©6ïEäpþô•RëEOˆ�«M ùY…}®ËÝļs/×ΦE�ÀhxÇ(›£ÚÂvV0¸pFÇ\N2¶!m%Ÿþ‚rœô³\y·¥h¡#0~ÂÙø9¯~OäùË7¦ŸÓe¾ž @òüN[•¨-Âèö>Jägw‡Y€Ê5ŠM V:?ˆ†»Æ�ÀêÒy=¼K%Û !ZHïÂ;÷²ñxílJQ�Œ†wŒ²Y3*dV!äŽt܇8‚A‹´ˆ1§PñôѤ2Ui´ËÔs±ø£Ï-bôËQ‹ åõ/ tNR};²M—8Iiéü úÜõÄ�0l:ö¼QùßKçÉyç^6¯M)Š �€ÑðŽQ6 ¡Ek’_ÅBÈ;!\ýC|Îd$+R\~›A?Ãùûñ/™Ö"ˆÐפmsÔŽýQŠ ? a]Öa¨—"©|DÎ2‹ :º£K!D£w (¹��`¸þßMn‰îýÞ&B{y¤wîeãñÚÙ”¢� ïe³±²ó$„«ÚyQi+‚hÇ7¿¬æEYÎõTLΪw£*B8×ËÖu’uh´o‘Š ßeÝ‘eÎ%ËÞ>l¤ô=i»»wpÎú!ìÝó‹ M&LMŸY·á¶<–ÚìIû´}ó¤õµßAuYÐ]Ynáú>•圗•m¡ó§L]v£ŸGÓBLýòy¤iå©ì3õsY–U8;L!D£—Óp‰ �œ,ZÄ.½ýmžûG˜Ê;÷²ñxílJQ�Œ†wŒ²YˆT‘ÿÖ—•hçÕ¹´Ä+‚¤K®|:y¼îLKgxûɤvžwÞŸ,×4>‘NµvܧF7Èk®þ³¤eTJEÛÄBÊQ;Ú­El¾Nï!ëVÍ¡òn{q~’;òYÿ§üÝAÒe:éR¤ú{È·¡Ø—u{IÚMm«¸ŽgeWEl{Ÿ“÷œ·Îûòçd;ngÍÑxŸ¸L-äTï!ï¹·Yã=ä¹ê;‘u_æHä°…ýuP‡Fw™ �püôrÆÒ[ßÚu‚lïÜËÆãµ³)E�0Þ1Êf!²"ˆjüšo !SEé€jGßv´ÓèŒF'ZßG–;ÕÛN³vø¿cÛZéµò^³F‹”ðŠ z§™4:¢îüªFÈkwc$Iï“oÇê1óùÓè“üsµAÒö.ië©ÞËŒrÑÂÈÿxÿàµZ¬ú ;)®÷ÝÉóÇYI{‚¬Ñ"ŠŽáR�-Pëÿ×uN'ïÿÛ%9jDyç^6¯M)Š �€ÑðŽQ6 ¡Ù¬¢tòÍt Gc$ƒt–óÎ{êhÛÑéqÛö:ûm… }¯y…ú}ÌkR§<¶Ë“¿&'lÖoM. é$~&oäˆ7'È®¼‡-Bt)‚x¾v.‚H[;)n}9L܆SŸ'Û¶õzöTQ]îÓ!¢×š?øbòë£^{®�,–ŽäKÿý£œghÑ¢t®YÑÿëòÁ;÷²ñxílJQ�Œ†wŒ²Yí°›"ˆÊç H…[©ç㘑¼cžÚçéƒó·&özÙÚ‘þçùè¼âdýë9OfŒÐHë–>ÿan ì:’YÏ)½å-y.¡òvE… Y×Ýd›Æ,%ó˜T—ÃÄB”~×oÈ:6ê>±¨S-¯%ï®§"ˆÒÂ…½#�!„qDGö-ò2GïÜËÆãµ³)E�0Þ1Êf!ZŠ Ú™MóJht¾‰ÛÍNyA`G‚´ŠéF‡ù_e9ò—ªã;ìÚÙŸ{)ŒJnY‡.#¼¶¶¢ËNwY—×u ’ÞÇ+t´At.•«º7ä¿Òf×YÆÌ"È—ò¤­OÎË÷MÚ–NæšOŒZEþ\Ïß×û<SÒwÒSD鯋‡™</…" !„œ¼è<O‹žôÚ;÷²ñxílJQ�Œ†wŒ²Yˆ¶"ˆÊGOÄäáÔ¡ŸwÙJ®*6ÄŽ¹^Æq..//¨èŸK—™^WÒéîTù‰’Ûï&]‹ éò£¼Øâ-£­’&RÍ/]JmK‹ I>J½Mu‘?—š†PItTÈa®'ߣB!'&z Ͳætòνl<^;›RA��£á£lB;¸mEQß©D;Åmò–KFôù·²¢‚JE�-6èH“ô¾õhƒÛ!ü°àR˜štúÓÝ[ÎÞš=b£kD¥ù6¼KhÚ¤Ïè½ÏTD·¿ZL±¢KÄ-àĶ%E;{f{KûÆÝ|²ÂF~·šš<ÿÖGq=³¶}A½6ü(“ëB^ôÒ—eÏÙä{Ùx¼v6¥(‚��FÃ;FÙ,„vÂgAT~ǘ¼S^wxµcþn×ó‚Ž"‘ŽôT<vúÏþ*„sò¼œÇLäËrгäëg'÷̦¢ª‰KãgL#-fJ…§h` $m…â"HKÑ¡SDÞÃÞá'½>ÈIë£ïsù^³Ø¤ó§¼ž¶[ËúôM‡HS !„“ù¡#ýŽƒwîeãñÚÙ”¢� ïe³i¤Ã¼Ë=Ò%"ˆhÜRפm™m‡ÔÑîryM’ÏiqV–ÿ–¼w¾žåïÕœòüT$-ä9wþ-è¤Ë‚¤ÎÙ1kĉÊG¤¹5t[ýí/&EjYZ(øóAÑàª<¯îÜ“Ï Bº½˲ªeÄR•¢ßÉŽtêÓvKë®ÛâŠ|Æÿ¦ï¡EyÝë¦È‘«·»´©>×ײ\ ß§’o;'}¿úýëH¢Ëz¶½wtÒ<½vÜ›ûc" !„ .ZÀþLŽeÇ}+sïÜËÆãµ³)E�0Þ1Êæ(ê‘&ÞHˆDñÿŽÄžƒhG÷õØñÕ舉mS„ÈU£!œ Õ:qÎiñ†tÊëBCŠ,÷ò‡¦8’F-ض[ˆÉçI™µ­”#.§Â¾ÿ½>ÑÏ®…”»¡¾õn^ÀI#jê÷ËŠ(ª¾}qþø—òç´ýãû<•Ï–&v­‹-ªËaäýÒĪú÷ÖÀ²Ì]i›ÚTï%Ë~h¿Gy]º„jÞ{÷M "zkÝt[Æg>Bé=Z¤Ö ®û(|ä¼s/×ΦE�ÀhxÇ(›c'Ý;ŒVžlë0k-Œ|òŸ“â!„åFGçéÿwuŽEßáå(¼s/×ΦE�ÀhxÇ(���,‡wîeãñÚÙ”¢� ïe��€åðνl<^;›RA��£á£l���°Þ¹—ÇkgSŠ"�`4¼c” ���–Ã;÷²ñxílJQ�Œ†wŒ²��Àrxç^6¯M)Š �€ÑðŽQ6���XïÜËÆãµ³)E�0Þ1Ê���Ëá{Ùx¼v6¥(‚��FÃ;FÙ���`9¼s/×ΦE�ÀhxÇ(���,‡wîeãñÚÙ”¢� ïeƒèË.ßá’]ùó¡-j9ÇèÎýÞ¸‹ó,>ˆ¥xøHöweÿx["Ûûò½žÆç��«Ç;÷²ñxílJQ�Œ†wŒ²A‹/JuoE#/ç˜ÜùuìÇN9EåÙ“mý¿ᓯå/²o\ÅswCØŸ4©4¾“–¬ß’ïêóø‚̾<ö’Ó^ó’,7Ÿ¤.‚åíe¾*ëµû4„ÇòüÏØ/�àP¼s/×ΦE�ÀhxÇ(›UBgíd›G:¾+\é}߈Û8/Dì? áÂé"H²{Ë)^|-ï…p6+.Èçò^ûô!¬ëw*mÖåõÞh}ÿ+Zˆ‘v—? áN^´“?ïÈëÒû\u .�€ù¼s/×ΦE�ÀhxÇ(›UQu(wÉp(+^¾¡EiÑ6Ã3ë5ŸÜ#7Ú¾³¯C¸*Ÿ¹­€‘ 0:âcÇ«DOM !A�àp¼s/×ΦE�ÀhxÇ(›Uÿ¢MäV¸2”}#]Ⲩ"H~ÙËyi7eVDžÛþÅä¹Ëâc3躻ï�˜Ë;÷²ñxílJQ�Œ†wŒ²Y”§ÒѺzsÒ±Òœ•?{sh»|þ;c[:bNžùÿh²¼%õïw³áý„ðPSù°ÿ<uÇѼV£ó)è\9wrÐë‘,j9ª1‰f\ïÆ% Š–1«bÖUÛ4&󌟭úÌÒé¾#×mp^GH{ý~ß‹u]òǯ;ûGéû-dßí°-˨—õz]Öï²î¥—Í”ìË­ó{ÈzÍ+Ê”AÜQ² ÚŠ i¹ßˆß×\²žÛò�@wÞ¹—ÇkgSŠ"�`4¼c”Í"<”ÒYéDnÇÎÖþ“ÎiçS²-Nª¡õòØ•O§;¡ù¼;©c*ÑŽåå¹T´ÐÉ%µטG!uøœŽe5¯B6ä¿ZW]nš R´MÚu=µ•Öó¼<^5•m•&ÒL™÷ë¼.ã%yM*BÜ‘eÙÏ^‘õt‹ Òfçý¬°}_i}óϦÛùŠ|žô~é³½ø«þi/„ÇA]œ°ðŽïw¤}C×Ñõö•¿¿'ï[z‡œÒ}9YôH4_Hk!#}niÓ(‚dwY�Àáxç^6¯M)Š �€ÑðŽQ6G• vX}êp×0é$ê]Slg?uFmg-ýÒm;ìõãÒá|«;v¶;÷]ÚÚÇ;­‡ZÄrÒ:Jònj{V:À¶“mUßË5Ù¶YJ¥"B£€Ò²Î:ïD}7“Äi›ÖkªCžµm[ü;ïú~GÙ7R[[ Øþ×f;WÇ}Y-ª’¸Ò"P*8MIŸÛ®KÚžò8—¸�Àòyç^6¯M)Š �€ÑðŽQ6GUuîLÓ“:t¶s¨ÒsyçÕíЪԉË;Ü-ÝÔYmt<ÛÚ¦åšÇ;­‡ZÀrRÛÖeÛÇÕ÷â´KñÆzxë,¯Óí4ÕiçèÖõMmͶPSŘC¼ßQö´Œ³ïÇQ'‘î‹ó.‡éº/«£Aôuy´ø1u ™•m·|=ëïJÒZÉ^kCá�ºñνl<^;›RA��£á£lޤ¥ƒéñ~ùO¼Nô":º–ÎI‘~EŸZ—´Ü–ÎrÑz¨E,§íó´½§#¿lÄM¾ oÓcÞkcR‡Þûþ*mŸCLAñ~GÚ–òxµ¡ÏMÝ"v†®û²ZÄHú2"‰Y3%}n³žõú•¬‹lú¬!ìn�ÀïÜËÆãµ³)E�0Þ1ÊæHÚ:˜VK‡¬–:¯ÙrÒÑÒDÕd­Ò‘t×ÅYÕi=Ô‚–“:¼ùH…4çÅÜ;z¤ía×­³Îi}K:íuÇÚ¾_Z³-”-‚æý޼oH§¾ž5¦ž#¤MZž´-Ý—Õ"Š *ÝWGƒìÍ*J´­göøÔös¸#‡��żs/×ΦE�ÀhxÇ(›#™×!LJ;ŽÒ&u^ÒÑ•Çu¢M}üês×¥¥óÚi=Ô¢–#tbÓ¿•öé’ˆ¢Ë ¢ªÈ`Ö¡•·Îñ±’ÎoúlSŸ!mkg=ÚF‚ty¿#í{g£™—|¤åI»Ò}Y-ª¢ïŸF°ÌœfÆz¦u)Ù?(‚�ÀÑxç^6¯M)Š �€ÑðŽQ6G5¯“ôoÒ‘ÓÇgvcÇ1nݶN¤Û9LË5Ëè«¢wÑÛÙΛ�µMÚÞS“wFw>ÊÞÏ[çl›º—^ÈóoÉ2tÙ )‚âý޲oè2®˜bG}ç »\£ë¾¬f¾¦…»ÿª/'sÝèòZG¥Ï-m¦Š5ÙëçM²;ïß7�`6ïÜËÆãµ³)E¤gúkËö‡“!¾_Z䀼#'j—ßí÷@[Ýò®à¤��NïesTuX¢ö|^½¤ãÂÞ¤—ß6×vˆ«Îž<žw~ÑÑM¸Æñ¦­s˜–k–Ñi=Ô"–×±K‡Ù*ý^*-뜶Ÿ>~ù^󸨗æ¼·_ý^v[¤mm–«¦Š ¢ëûeßÐe|ÇÞ‰&¶wÒu_V -‚ˆt¾¢ëPrÊ¥Ï-m¼+õü"òüyŸ¶u¢�Gã{Ùx¼v6¥NDD¯]~CNXÒð×*7ä vwr/|=(Ö3—g¹ÖÈA®Ë„_Ë’Ÿi¦~ý‰÷y M'Þ=þà¤ñŽQ6‹æªHÿ¯c&S¬i÷àÖžZ×ù:lG,Í}`—‘wþòŽfêTë/ãû²ìËò¾Jå4‚äúòØÿ´ÕÎáîÞ¤Ã\£Ìr»®ÇB–“:óú¸Yƶ¼Ï<¥ßKÛ:ëöª'Æ4É,¨?›ÝòçªX Ï5F,ÈrÓH„ÆH•®ïWøÌÚ7tž˜t~”öϹs®ˆ.û²žçÔ—°˜»Ñ̲+ŸY_Ó6ÿGþýž—?ÛBW*r´Ó¤õ­ÖK¶Ã[º}âs*ŸH˜"�ŽwîeãñÚÙ”tDÌWôà/­©¢…üyGbÕÁ]2khcþœ.óõx�Ó“…ï(x̼_TúÅ㸴?““(è�V™wŒ²Y”4ùhu¼ñŽc‘v¬tÔ_ÕNRMVjŽié8‘Gm+=Þ]ˆïŸOnyGþœŽiDDêD§p=!‹þú~½ãz,j9*u²íóudÛQÝÞõ÷"Ñm ?¨$më\w†¥Ã®…¢z]ô»•í—:òÞghûÌ:Bã½{÷üñ|äF×÷›·-½}C ?z9L¾ßv™sE•ìËÞö­’f£í5SçGòúú71ge}ÚöoD‰r|ÓÄǶ8�(ç{Ùx¼v6¥[©Ð’Y…Šô+‡7´1�L=—$‡PÉOë™NN’ã,‚èÉåKØ�°LÞ1Êäǩ«rÌ÷¤Mìq�� ‹wîeãñÚÙ”f$+R” ÁÔ_¼ŸÖ"ˆ¨U(üåh™ú.‚<üt2Dt!�X&ïeƒáÑ<æêïìõ<��³yç^6¯M©AARçÖÐÈ9éÙ>l¤ô=sŽŽT¹*ï=5XEÛÅ OS±%¾š;LDõÚΆjêÕëÎ眷¾m×GWÛL_+ëÜ:9kÉg”?ï~$Ë“×WËпK›úºÜüm�Ëà£l00rŒÐy²Ú.]¨H›9ÖÌ8 ��À;÷²ñxílJ ¯Ov´ƒ<ó„§@kD:ïi¾.ï‘.Ñ©¯­–uM#VìDfºü¼ƒŸ®Áö&óêZ©ÖC¶Ñ•O'ïYOäõެO>[áú¦ àï“}š©"HágLŸ­Z†<þCÙÞéÚëT€i»]!�,šwŒ²Áð¤ 1u²Ë|þUÝeí# ê��œÞ¹—ÇkgSjxElø£^ÛëAò ¿:Bˆ{«ØT€È‹)z²ö¢´mÜfN¤‰çlá¥S$®‡-Lµí°¾n$j+ÄtùŒõòMûYï �Ëà£l0Lù9R¼;x��€áòνl<^;›Rƒ+‚¤Ž±W¨IGºí6¸ùkòQyìLð%ÒzÍ-ÌÄ"Ž;Â$x$ùuË]Š i=ìè–z»Åe¯¯Hm‹‹ ?cëòS[ù.;]’�‡ä£l���°Þ¹—ÇkgSjÐE·“û2Ü?ÿFhÜ_Ù‘ éò oÃ<i‘yE…T4p×=+ÞäEŒ.EôXõ™[¢Ë.]_ÕµÒõ3R0Þ1Ê���Ëá{Ùx¼v6¥='ˆ×)·Rgßkk‹ é}l]^×e0HiQ!µk+àx.E´ü¼ˆâYf¤ëg¤`(¼c” ���–Ã;÷²ñxílJ ¯"R'Û^6âIm‹Š bÿIç´ã-—Ü~7™×ñOJ ù:u)‚¤Çæ7J×W-«ÂH�Cã£l���°Þ¹—ÇkgSjEüî-vbO«kD=}4¹‹‰w M›Ô‘o+Ì<ý,K¯Ûµtì«u2Ïu)‚Ô…–Kzôù·$¥ë«êe:ÛpÖ:”~ÆÖåSp̼c” ���–Ã;÷²ñxílJ ³"žþ!„õ8bã‚tÄÛF3¦¢Òíö¼[Öº¤“^_¦#¯¹ž/Sç&y?vä%é’›©Ñ±ÓoïìÒ¥Òe=ŠÚ‰®E®Ÿ‘"€¡ðŽQ6���XïÜËÆãµ³)5Ø"ˆJ·sÕζw¼üvySléè§Ñ$îüZÈ&U½*ùys„ä…›üÒš}YÐ}oi{åÓ¸Îò~Û²Žgß7·åÍŠ¶8Rx̨Òõ(mW#âȘ‡²-vžLžj[‡.Ÿ1Ý6׎¼©GäÈ2¶ãûÀ2yÇ(B!„2œx¼v6¥]IîH§ü[±#G:Ï—?4Å‘¬¨`cG-äóƒ¤x£FrZ˜I…ÞnwÇy ¶óuv -õe%ytT„|ï3äë¦Ë=[í±o‡¨t}µð‘.ÚÖç[¶£]‡yŸ1rÉ£ßCÛã�°LÞ1ŠB!„ '¯M©Q�`¼c!„BN<^;›R$^˜k��÷IDATA��£á£!„BÈpâñÚÙ”¢� ïE!„B†×ΦE�ÀhxÇ(B!„2œx¼v6¥(‚��FÃ;FB!„áÄãµ³)E�0Þ1ŠB!„ '¯M)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM)Š �����`°¼:ƒM©c)‚B!„B!„,+¥(‚B!„B!äD§EB!„B!„œè”¢B!„B!„RA!„B!„r¢SŠ"!„B!„BNtJQ!„B!„BȉN)Š „B!„B9Ñ)E„B!„B!':¥R�����:Š �����`(‚�����€Q �����F"�����Š �����`(‚�����€Q �����F"�����Š �����`Bøÿýt—ä23[����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8n.png��������������������������������������������0000664�0000000�0000000�00000633156�15030617045�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��j��;���ÂvÚ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýïO”×þ? ûðć>h²Bâƒ&;ái 'šl4¢%0ö D=€Ðö.ê]Á¦Ž§n+¸íœ*_©`Ï´‚­£zÀ–©_cùQF+àöÈg(óº×ºf`®®k­ë=:îÎ+Y;Å k®kÍû÷zÿX$’H"‰$’H"‰$’H"‰$’H"‰$É@MI$‘DI$‘DI$‘DI$‘D‚ ¨I"‰$’H"‰$’H"‰$’H"‰$’H$5I$‘DI$‘DI$‘DI$‘D ‚d &‰$’H"‰$’H"‰$’H"‰$’H"A Ô$‘DI$‘DI$‘DI$‘DI$’š$’H"‰$’H"‰$’H"‰$’H"‰A2P“DI$‘DI$‘DI$‘DI$‘ Hj’H"‰$’H"‰$’H"‰$’H"‰$É@MI$‘DI$‘DI$‘DI$‘D‚ ¨I"‰$’H"‰$’H"‰$’H"‰$’HÔ¬X±"¹’ë•Y★×uæÚ£h°Þ˜?Àþmã®>¸Æ§ƒ¿ò’ õ~É•\É•\É•\É•\ÉõŸ±ä0‹±63¬èghùü Ƹ9h½Cr%WrE.½ Ô$‘Ä«�Z x. $-%ÄX¯!³¦ O·£t%û9­̓S¡ß|ñHò^I$‘DI$‘Ä&äí<?<–b¤flA~~~äÊËšU%°<˜ ý.-’¶iI, 1ÌMI†LâU ­Î:jñÆÊ÷pfà9¾!´}°f׌»n¡÷’ ïÖtãe…j’¼—DI$‘DI$ñŸ y;jв& yÑAš”4dä” ¶çqèwi‘´M“HbiˆðˆanJ2d¯ ¤hÕׇúÍ¡ýñ¬òcà»…‚3Ó=¨~Ïòÿ¼x$y/‰$’H"‰$’Hâ?òvÔEãPt‰þ,¼gQ¶ãîxƒv-5’¶iI, 1ÌMI†LâU­&á:S†M'pÞbÅò/TlØÓ·gñUU.þYaÃdèW_4’¼—DI$‘DI$ñŸ #v^`Ú‡éE}hfài-GÚŠÕ(j}ú7Z$mÓ$’X"<b˜›’ ™Ä«ZUJŸØßñ¿^)é¥8ëò†~óŃ?CI$‘DI$‘Dÿy ·óø€ŒpâÄp%3j’Hâ¥@„G sS\rÖeÈNI@ŠV§~CíÆ XÀãñ¨Ö#<õùà›ž ýâ‹Ç+§ “üœDI$‘DI$¡ òvÞ¼}=èójبn\ï‡/ô#5^9Û4‰$^0DxÄ07Å‹!¾Gp˜i–[þÇpuZa®5ÁT{ möQø¤Ä�üÞ‰H'ýkh¾"Ù™ÄïŸz/O?.7w`,ô‹ÁïøCÕ^üqÙ‚+c¢Qòg¸ëô0±®F�Sý·qOøà(÷bŠæî]ÜÖ3SCpÜÏd‘£Uöý{ú`wk¨4å¦_ÿƒš SÑÓbâçDæAª½¼pÞ®%÷¢ß1,iLÍà©« sL¦:˜Û~ƒÇ'T¤<¶×S:-fÔšL¨5_„Ý3ÅþUägFIÿ‰H³´òt)<8QkFóEÆu}¹”zƒƒÎ8RosÜkf�­ªP×1Šï}8‡ž°çà€Ã~WPfLa¨õ0*ë~‚gfnç0žúLö1ž¼gBœâÚ' HuÓ¹íM¨WèߊN×cöÝÊbcŽË8Sÿ9³©Í°tº”ïV7Hé, ¤gF´¡n’·óxš½È7E)ÛW­æ£(Z“üܧá±}’ÊoÈzÖèf*=I­?He¾6„õ$¹ÍCl§hbžÎSL5ã¢cLŸHXÛŽŽÎDøÚ°§Gë,rÁí„íôA䧯b{Á"êØ¢cÿF¤¬X…59{PmúUE[QlîƒW˜_½p-EzJtÙK*ò-îÐïèE�>×Y+ïµ_¾DCZß]œ-^ÇÞ3j/™3ƒ–¢,ä¨;Ãçç!'c#ª:'Ø×2 Ëö7‘iºÁNd9PîÅM2ròT{±•“‰µU˜d fIJ «3?G¯Ö­Aøù#ð Ζƒ(RþÂsd 5…½×…»bF ¤Þ'Héiüœ°<HÌÏ+ŠÑÜ‚ŒµŸ(ÆÔÜÈyl_½ ¦Þ'¡?X ~ŒuÔ “YÊš\ì­>ŒÃUEØT|Z£<vjc×±?ó5¬HIGÎÞƒ0þE›Ja¾óLŸWƒòÌHé?Qi–Vž. f�>î@õú#°ë:>J½AIg ¬· ï5‡IÛ‡x-û0.\:…ªœ7š±‡¿2¡ -EÙ+%ó0ºŸè”“6T¼¶¦ ­8]•‹´ÔL®ÇoŸ+% 5Ýã/÷üÖ>!~Oÿ}\ݲƒ³¶±çbr1í-7ÊØÁÌ‘¿z0¤Oø!~^ÿDzñú„˜Î@yfÄçO¨›ø3ÈÓgÑâ÷YXkPag¿÷¶ŠµŒ?savɹÁÑàû/J=IÉ×Ô2g)êIR;‘Ö¶[3xÜyëMvF•:°¶ñgРޞȇÅDÀ‡q§ §‰&uŠMßâzóYáˆ×¬³ëV¬E™u œExû‘OÐ<òWètÂo‡)õ-”5^C¯Ýûº×xt´o9xa7­GzÙitôª÷bË5®xUðÛMHM߃Ǝ_"÷²÷c\8hà†µ¢M&˜¢Ö1ÛæÑyd*›ïêˆfRîÅuŠ^´—é˜ î9ævÖ¡¤ò\:¢™2´¤§ycGÍœlåd M1\ P´¿C3Â!ð^¤ôDÈω˃´ü Ï÷¨(Ú¿˜ÎM'asO3dzGJö¡YOO¤ÙÛ¨_· «Ë¬Y¸©œ…×þ%ö41Ó@�¤ç?gý&¬Xý>¬#Ïž#àýGö|‹Qö!<3RúOX𥕧ëF{ßóÐZàFM­î@ Þ ¤³ÄÕÛÆ÷âï¶ÌwÙùÞCã¦2ýÚ+ËQßqnÏ(»ëñþ×ìÿýÅRPžgƒ®¹i 5¾Ëœšs¸Ý~�Ûë¯ÃåöÀ3غ÷ϰÿ?ôº@,gÖ>¡}OÅnY™‡ú[ ð ÀZ¾WÜVôÉëÈ­·ãÉ<]žcÄúvèÒ'´tå™Ó¡n²ó^¸ïÞãx ¦¦ÎÁˆL‚ðâåûÁxÝè“â'mèzfR=IÉ×Ä´@©')íDÒóŸÅØÕ«è[ʼ÷XP¤;P“ ¶!‰ðµaOOHˆÄÀÜÐYlKMÁŠ” ”îÂàÓ™Ðÿ#Ž c­Ž”ñÔ.7:MÅ0Ùuo&ᨭDƒ3ŠÉá]Šñ´À”ã8v4ÜFäÛù1á~¨CxD÷NÙñœQÁÀÄ(FS°€~ÿø,†#„ø(~·61ÇZT,QîåÇÈñCøzX½[¿·Á|Å£Ã@ˆ„ ­_Eåšè|®ñi"‚' à½Ò%?'.óóÈÿÄÇ_;#éÜsVóuŒ‰ºbX¯Ž¼ñ{áé4![˜^)Ï?ä@GÜJùáõüSöç:z(ÏŒTž&*ÍÒÊS~ëUœ³‡5Œ–àúùz3j(õ%%°Þ6¼×sF§›ƒrB1ÚùMj7ZkšàR Xf;ZQqÌÁÌðå¡4ÞWΜ;:ìü[àh­ƒÙ*öÃRq¡X=ñù'¬}Bûžnk†;â!¦à2W ÖÁeÛwxÞ¡_X w¡Ù­~2F®¯‘_¤ÀĆcf×ÐÒY”gFLg„ºIÈÎãç»Æ’qì\'þÄ„°3júž™RORò51-PêIJ›‡ôüyPð}äTÒx¿ÐªÊG†^û3am;::ákÞ•³ðÂÞvUE;QÕÐûÈ$fd2ÀKŸ¶¡¤å^0£fö.Ìo¿†™tî¹ØŽ#3³(2‚v°VÑÔ°i¸mµ(ÊÜu³Eß §Ó͹¯âHÑFd©£Ž‡q°hŸD7,ù©Êw¹R±Uôžt/ÎüÚ©›)[›…oàùß-YxÝ÷à^0:ØÏCÝèÔŠÜú†q£OgÍe ï}ô–žù9ay–ŸyÐ/_Eß +e»ø (ã^úôvÉ·øC¹1ó1=))Ù:SbU =F¼$åír´üÌt˜u™ñvÊkºKZ"@xf¤ôŸ°4K+Ocž¿z¥Î; ËRoPÒYâêmã{Ía²³[x¦ƒâ@gÀd Oë¤ó´ó¼,¬IÙÄûÉÐï/ƒÉTmá5Á@M*3Êg<P’ž‰œümÈZ“ŠÌÚ›‚ޱœMXû„šÎ.bOÔ^‡?ÎGúª,”~Æ>„Š­°<ˆtE5ÁäÙ¥=Y‘tvøCä§¿Ž¬ÒêàÞ…Øi‰q~Ät¶�Ê3#¦3BÝÄÿN7"5/ºž™TORòõ ¢õÒ«')íDÒó- Õ‹ë]¤™¨¶!ñ¿Ó ޞȇéÂBÙD r2÷J9‰J3á+¬ö vpÏ1Ôù#ìÑT.Ž tVm\\ƒœ_ S§hK)®¬>ÁÚEuwù(0uBÐ} Ek¹¹W~ÁQt ×úºñ]m#~V§…uŸÃ¾Âj´N 9ʽó×�óϽá½ì]8¿oöµö ×Zë£UndæKd_½xò)=©`˜Ÿ•‰ùÙójÍ×UtÞ‹îóQ¸¯ƒR þx3á´XoâI �ßÐϸh÷èS’ <Ž€Òäµ£¥vNW¾!t^´Ã#sëGyf¤ôŸ¨4K+Oá¹ ³m©@53jJŸèô%°Þ¦ØË?Ë5hþá ä¬* :îgp]>ZÓç¨ÊÛ#PÇïÈ¥ûš-¨ÍY‹BÅq磀¯À\{Ǫ¶c»pïâóOXûäÑYÄډڞǡ?X ±äYä*¬íAÌP )̓ò̈ϟP7 Ùy¯R †TORò55-êIR;‘òü™,üþØž-ñ ‘Ò§DµíèèL„¯ {zdÎ"ïPo­CeQ Jk`nÿ_¸oïÄ/¢9ÖæËýª´¤è5Œ®SÜùKÏ‘>ÁÍsqwJý»ù 7/Àz7*� ;!À{ ç¬ÿ/"'ÉvÅöbx(ºÉß ÜÍ»BÆ–(÷bg=<Œ?£þ(ànƶB ˆm¦“Vÿ¦Rzb âç„åAb~žÅПQ·›a4o+Ówë®4_Úò/¸F»Î¢éŽžôVÊóç`ôØ-Xë>DQþv”V›Ñî ÷Q噑Ò¢Ò,­<…OŸ/ÁÏü»(øB§Ó@©7f1vÅ‚ËhÓ¾²F»pªé6–¿›K`½M´—’ýx¹ÛþG"Îi%ÿ;ŽŒðR` û¨ÛVŠÆª½<xÐQµG\‚ß%ñù“Ò%?%0É3R:S@yfÄçO¨›„ì¼W*PC©')ùš˜(õ$©HyþÌ®{ö Z"æÁåbÞ@MÂÚvtt&Â׆==gQ)WÚˆ”ÔLäW„I™Ô”ìš.<¥=if+2PÝó4ôKG:s‚¯{¤ëþ­Ñ IImýÖÕ߬¦Ü‹Ù¢f}Ÿâãü7‘²®NAŸŸ÷Ëão¨¡¤'J~NX¤æçÅÍÓ”Tõ”M¨wFª˜å+=S½Rðzuw”òÒåù3ÒP¦ñü©ù¨¨f|ͧñ¬Ï•˜Ã@yfÄò4ai–Pž"0 ÿ¬ö·wÀz¼ oñ”n]ûë iØ+^?„ž#U Ô|NHgÔ4«)3VK8:±Ï¥p�ƒøü©éŒŒŸ˜ÎHå5ÊFÒó§ÓMü|tã• ÔÐÒ­þ ¤J=Im'RÚv~ŒsöcÜqÇKÿ7¥ôI×w‘À¶‰ðµaOOHˆÄÀœËŒ¹'pë‰:RöΆh,YŠ™2uÝ ÿ¦·«µÆ—Z/{‚‘!—D÷oM†-FeÝE¸„Óé(÷Ò˜(ª<†6—ø8_}´úw ÔÐÑ)?',Ró³†2)úumwÅKRØ™i§gÄùnUš¾® ”çÏ{åDNᘹ†ÝMÔãg©AyfÄò4ai–PžÂó#š{ž…~ˆ‚ß‹ññ'²Xu: Äz#VIÊù.Õ¿é™ú@Íç„tFM³5õøQ5å¤×ö5Ês÷ Qx¤9?³£¨ýñFø¬{Äéò|”‡&>j:#㧦3RyFMg„²‘ôüétÓ ;ï ÔPÒ)_“Ò¡ž$¶Ií” VôLk=D€½æƽý°´8Øoê@ÛvTt&Â׆==!!³Žzì^T»Ì»ú]â3ijØsŒº‹°šÀ7:Š šÍ˜Ïóî *iü w,ò“üÓð ×ôSî5ïÝ»¸¿x3ø|âï®Vÿ¦Bz"åç„åAb~öÀy?:ˆÅœoZŸb‹�e0åùóéŸ,îE0sõ›$¦>Qž©<MT𥕧ÌKEÁš,äE-굺J½AY’’Àz›”fßø£ Mߘs_—¸‘f»-º]õâws>V gšŸÂÚ' LgÄòŒŽÎ(ÏŒøü u“÷Jj(éŠVÒ¥ž$µ)ÏßÏ^s'ÖdmÓx¿ÐÊÉÀ½¥O kÛÑÑ™_öôHœÅ©_q¤äs\r„æý9`k¬Bv(5IÑ3ùÔ0­^²#ßbÔÍËŽFÓêÅ#;¦!àÃÓ‡ê½<¸ß~EÍâŒA¹c ßÓG{yî·cQ FâÂÓ@ %=QòsÂò 1?3|OñP½—g�íû?DóÈò÷‘и)‘N¦<æ@Û¡ÄtŽ¡QeŸ!ÇU4Vm ¥‹ƒìÌHåië ByÊ ÐüÔ Õí38ÓÒ‘•§úYÄi ÓZ7¢²%) ¬· ï5 ïý‘ØYEþQt~} íƒúFµ¼03SyžÎ&œhÐq;«½œMLû$ḛ́<£¥³0(ÏŒžÎ¨t“÷Jj(õ$_Ó±ž¤³)ÏŸjŠ‘ªÎ‚ÉÉ@š:@%¨aHLÛŽˆÎDøÚ°§Gã,2Aî<‡Ê¬ÕÊ~|¥¤ï–H…d N £ùÆ ùŒF•ÓõÑÜoŠŽÛ0¤7­‹r/vf|ÌpfŠÆ^+V!½è8lCú;mó¿[×Ò'Bz¢äç„åAʽÛ(½[^ÓÞ/½Çmò‹2 ˜òüÏàlùY©)¡}ŸÁáç">3RúO\𥔧üÌÞ«îa.ø<8Ý©§WDÿ¼ˆõiIJ¢êmÃ{q]W%1mG~{-Š„§:-âóOXû$ḛ́<£¥³0(ÏŒöü)uÿÝŒÁñcÆ•½çàíëAŸV•€7®÷ MõCß3êIrýAË‹Tz’ÜN$µS>BµºÄ‹½wÄ”§èŸ—@ÂÚv„tÆÿF/ {z"¶,ü“p;oÂîÀ¸Oôæ=„ÿˉ“¨5 e|àõëpŒÅºéY ‰:Ê‘r|Ùì]˜ßÞŒêÖÕ~vÜh|›MÙëíéÃ@¹S#.ó»X_ýzU{Ùo4¢t³ íü¿uõÙB­þ]5”cÿB àç„åAZ~žu™ñözöNªÚ}»½¥;`jç½ôôÓ˜Çcüjù¿ñuíQ4(j>"· WtóJ”ç?Sõ�n× \ú¯ÿÂÛ- Ý•»©"=3RúOT𥕧‹ ¯À=4æשÏ1]ðŽÎ’6R½1‡ÿjʼn¯ë`jøA N¼.\¿Ò‡1¡,ŽÖÛ†÷zE5”矰öI¼éÌŽÞKGQB%ÏzÛ`*©Ñ)Ïâ¨!;3Úó§ÔMòv{'Ë^ä›ÎÀb±D®æ£(Z0”á< í ”T~#ua¢}ÏL¨'Iùššéô$­Hl§Xª"ü¦ÀP#rU*Þ»òš„µíéL„¯ {z$΢f=šÜø¬¹ÁF¼“² k²6!cíhè‚)ó5¤¬¯ƒcÙ ÑHÔQŽ ¤½x¸#׎¦®ï4çîÄw=Ó±Ô Ü‹½’÷.Úš~†'b³\û®};bÐG«¼Cyã!qâu¢³Oë¹gà¹Ñ­³a|@Â{ó ‡GÇω˃ÄüÌÊmtyÔg= ÷µËpè™, Æ\?ßùRÖlÄ–Œ (o¿_LÙHIyµÑ#ÊóçÊœòvœðÌHåiâê JyŠÇí(}»Î¾Y�þ‘¬\ªÖÛp{áh©ÄÚKägÅ¥Þ˜Æ`c£÷5ÈÚ’‰µå1ðËçÈLy ëkÓ1éLÖÛ†÷z5Ä矰öIÓ™ay¯@ 噟?¡nâúQ±õmp­A…mœýÞ#Ø*ÖbEJ.Ì.š¾ÿò Ô“”|ML ”z’Òæ!>ÿÇí•x»þ6ÛÇ‘æ"¬\»­¿À3dGKE6 ôî›°¶éã‘ {z"ZåJ¼nOb|–¨aF¿;€ïÎI쨻…¿Ø<ÔøsRDk`){=0¡IV7Ï@Ú‹‡×ŸG›f×k?&ú‡GwFå^L¨yºÐÔæÒtð¸í™Ò-P¤h•Ñfqþaœ¾‘°4¡¶(78ÆNyNL%U8#UÞ#Þ›%=òsâò 1?ó:ý¦víÀ_`ý·@wLP Ô£ÙÍ”¯õ;êáø+€ÀÐÔ:ÏŒøüÝTÝÀ%Óûr7U”gF*O•f‰kï#°¾ŽÔ¬Ý¨®Þƒœ5«±1?éL.qÙ´bÅ›¨´=Ò¹/­lÜ­ÍÃì³½¸S_‰:Û—ßd| ‡Ð™%°Þ6¼×+’QCyþÄ=·è쓦3Ãò,Ž5dgF|þ„º‰ËR9°w²ÔÀÔê¸h=ÂÓL xÝèɦ\úž™RO÷[¡¤J=Iióž?ûø®\¬Ò¨Þ›‹5+7 ?ïÍÐ;²µúcØëÜ5am;:;EaØÓù°˜Ð8Èà’ŸÅ¾ÄÎ{‚£!{¿CõæÑ|ã*ÌÅyRšÄåÈ@Ù‹gÖÚ76Âd׆§6pc¤ûË›´™&”{)Sb²°Öôkø40 ÿlèoýn´ï¯B£º`¢ÕXõ¡µªÂ†IövOl!mÅkxÛ|WXÀÉ‚>(鉒Ÿ–iùyÖQ‹7Ö}!ëñÊÂt ¦Ú?Cy£SgFÒ,&;cGí%ôÚ{ÐZ½ÍøÉ¼ ™ºó§½©"=3JúOhš%Ìhâçí¹ŠšlÞ‹*i§pgrî®oPkªÃ™®ýÆ©Þ`1Ù;ê”1À½­5Ø\q7~ú Å™uâšDÕÛ†÷zE5”çÏy“¬/¥}:ËËÚˆB³èxt y–—ÌBÆïºäY5¤²‘îü)u§O9°ÏœøÂåžÆ¡ï™)õ$%_SË:=Ik'Rž?û|ÛgÈVú¾&k&§FÐu¦¦ÚoÐå~®ûìÖ¶#´SôñH†==‘‹ ÂñYÊÁ¨|1æ(lÆ ’z&‚Ä5M:¾ŒwŠßÚˆ¡…Wšû[3Ú¢ŸÏÐS½ ¥í†~^”{) þ}4…ß3ྀºö‡!†`º§i¥íx¬ü¼4¤hÕó*M×1©¯‡O}Ág xáî»'Pj$¼7¿Á8<Z¤åg¿ý(¶6Þ Ñ5C`ßÖ]Åãù˜îAuÚû*>ZŠ2™oÖ«Zi%h½A <f�ÞT‘ž%ý',Ͳ󧬽ŸwJý^Œ?|ªil.Ó¤zƒ;Ðo/¦f<6÷‡R³õ"õ¶á½^…@ ñù3ç„®/¥}: LvãÈýÁÎ04äYà1zŽÐ„ŠW †òÌhÏŸR7qÙ%‡YŒµ™aÕ:÷€m'lrSot@ß3SêIJ¾&æEB=Ijóžÿü;0ýãûE`ÿßB°ei$¬mGh§ˆðµaOO^ˆDÁÿŽö&Ô3ã½ÖlE§ë±ø!røœh,ÿ­.>þuÞ¡ž€W‚ð$è¨iº1mã°ú=“!b›q¡qëd›~‚ÇDŽ̓¨ÍNGQëƒàÿ¿$(÷šÃ¤­ŸõÌÏúŸÂ@c!VeŽNžRìGomVµbLùÿ—†­úÃ3Íä‰2Þ Žž¨ø™#ayp¯Éë8ôY7&•? `fà ¶®ÚSç}¦Øgð¤·Ù+w£uL¢óÂÕX…ý­NÕ³=ĸWò ;­›ªmÈÊ,Y¦dô̈é?!i–¸öÞó#šÕS1«¾f¤z#�Ÿ« åû/À¥>³q¯¤ JT½mt¯çpÔ1[Iá-£ÑKÿmÜÓéØÏ:N`¯òýÄpt¦†à¸§/û5”çOÙ—Ö>!}O­‘´ƒWP“™-‘Y®UVâ‚­&oèÊФ¥³HPÒá^„ºIÞÎãú6jdòüÊËš•2ÀôA÷3“éIJ¾æ ¤J=IlóÐ?£µ Öpƒd-†aiqèÛ7am;:;E„¯ {z$΢ÿ>®îã#¯xàmLlAFÚ[(n”HÓd ê¬õ7ô»Õ_ŠäÌô5M;¦1Â` JrKQ}øce¦±÷ËÂÁóß„ÒõØž™‡ÑýDÏ»RîÅ0Óæ’|”VBUѤ®x ™›p¾f ûoö¾lïšîh­ þÙ»Œ:«– g‚©í . ׿ÒAê}b€”ž(ù9Ç©’Ž:fFþ`óûÈ-ý‡«ÞCfj ã“Opþ|M(•”Ñ}MžèÚÖg/âvÿˆJJÖk“ž¿–7‹ÉžcØ£;]W º3#¥ÿ¦YÚ>¬ÉB^´°°߯1é ÔPê ދ笷ûá^ ¶¤zñ$®Þ¦µ´Òàó“±1؇mŽÙÛßD¦és‰–£³EY¶r2±¶ª“˜ÆˆeVg~ŽÞeCRËYÚ¾ tö ñ{Æ(Ù²½£¬DÀö ƒ–Î(e#-Ñé&þ rà|¨¨Ù†¬5ÿdüY‚Ú=¹èâÐõ̤z’¶/5/ÒéIB;‘ØNñXv†ì}­wd+'ktN}JXÛŽ}ëTv ÿ]½0ìé‰|X,Ì:ë±neêoM,|‰ß�¬å{Å#¾±zЬ,ïðœÀ£¦iÇ´qàs Í\DŽܿ` ò ø<pþvWwƒ¤ (÷bð?‚£íjMŸ£Áz+8b50ÓgÜ› 3zJ͈2,øâÊîu‰úW:H½O PÒ)?',ÒòsÓs\„¹– ßÃ1Æßk>Ï]üæô@ÿ…c¬zíÕâ·K¤ç¯ÕÌvƒ¶O‘ùF­`ïyМ©<MXšåÆaíý"ÙȲéÈÊSý¬Û�å Òü=µ{ñ¬ÎJ\½Mkh8:¡uÌ6‚9fÔwÙƒÊæ»ìD–;ÿEÁÐ:fƒ{Ž9Bu(©<§£ ‡ZÎR÷e` ±OÞ3àÅýáÎÕÏm·‹ðÐ,¼÷GBô£QVb¿)d{…AIg”´AMg4º‰Ë-9Ä*}brvä<>øDâòZ't=3©ž¤äkbZ דDv"éùsÌÉ@š:@%¨áH@ÛN"Â׆==y!†Ò-zŸÔúSŒY*Biš~L ß×õò´¡Fi¢9ÿ…Ü€ít%rKÎèl|¦†çvç¢âþŠ*ÇÂYó&ÞºÄÇÚ‰`ÎíÁúŠ3è} rTœ&¬|ëþú-Ý Ó6†.óyÍó x~FSs—@d•r¯Y<éjB“VYDບΣS ²-E«15yYéHcB©°¶¢©@Á{ xdÅîõøŸ½ê, ;jVnÃ¥‹Ñ)?',óó“n˜›´2Žfàéú̓B·ãÖšz¥‘ê¼bêµ}òÜ=h.1¢<ÿX´À-”gFHÿ‰K³±jï%Ádã{Õ=Lë̃˵*ƒ3úç¥@©7x àhp À¼Ðû#N—ç£D8«˜Ï)錔fŸcÔ=_ÂcøFG1A³íHùX}¤@kŸ~OÞ?¡ÈÿouSc)¨ûÊ0ÇDgo‰åAIg´´AJg„ºIÞÎc|8ü;†µ<ÚÀ0šs7¢ºG|$½è{æ)üþÅXQ÷{=G Nú£åkR™O©'‰íDZÛî#FOª/öÞEêÀLôÏKò=ÔWákÞž¼ cÎ}{27FÜÀ(ã³Ve¡ô3þó!Tl­Ð—³HA1aõû×È])7–¶“8áÄe¶:ѧ»Ì¿gZ°ù""›Á“[ÿBáö3:›ÐQî:³´÷4zX0ãá‰õ…eñú«ôÉ?€–>GÇH颚™h)âṳüœ°<HÌÏÊù;å/R@þ ܪ߅íºËƒ4 kߘs_—H&>ÿEÍlÙ¹RƒòÌé?¡õ%¢ />þ:÷p¸N}î.Ìï|®3PC©7Ø£,jÎèÅïæ|¬”ÛKÎç‹÷’¢3Rš¥oK9~¹ Ï öÝ[fÀÒщ}Bðžê@aÄ«0íxt:Ú ¦3BÝÄyZœ>«PÑÜ©oí¿ óÂä§½®³ç—8t=3ñ¤?:ÐË|2=IHWôvJû.ò.0Ôˆ\U€jÎeÆ;z5”ï™ ¾2?k½0ìé‰|XLLv jm梬…ȵS²ž’3|¾>qƒÂ OÙIœ2åÄ ÍÔÖðêmýÛ™S¦¯Ø‹ßä}eEÓ‘s‹ P‰¾¿©sâå^!™×€KM_jÜ\ñfa…XÏ©O¾8‡µšïñÏގ׫»!þ£ ïÍc=õ¢ûüAîkÅà"´ Hù9QyšŸ¹b*ÄW—špDã&7|Í]©·›¿ü£èüúÚEIRž?{½S€ô€òÌ(é?‘õ%·£ôí8•iŠLÏŽ´ `åzTµÞ†Û3GK%Ö0ÇQ×3Rê -LÃÓÙ„í:ØyÄ[o 3bšMØ€ø¢óW¯´V¿z§¨\£@è=Iì‚÷|%5ÄtFFÄtF¨›øùÈ!DŸ‹Îš¯Ð˜ha9¡ü3–é¤?JhÑ‚™O©'IíDJ;e–½f%Þ^ð9}i.ÂʵûÐúû<Cv´Td£@oé}\m»Èõ²|e]<‚aOOäÃbË{Ž¡—æðÆe'qꉜµ°j­>€ÎI=©]AâË·¸ðöáë>Åù;ªþ"“ݨYûOÑwʽBŠ&Ÿ ±g¸óõì?Oæë ùˆÈš H‰çÔ'eß ;š¹;­0å¿¡û³ã©÷‰…©Q ý%ª¸ÐÙV&ÞÛ‰”Ÿ•ãÁÏEÌ0ž†÷Î|°ÿ<î<™?wÞp÷3¬MèæOãç?Û׊³·ê5jIÝ´3Pž1ý'¬Þ D`–ÂבšµÕÕ{³f56æç"}A½‰JÛ#ïK©7(A|þ”tFJ³ élί¬Vš¿hPÚ'ïùŠjH錌6ˆéŒP7ñÏ–'­Œ¶œ÷å'áꀾg¦œôG b™O©'IíDÚIYJ˃•«‘Uz�Õ{s±fåäç½zG¶V ›®�å{*{ÍŸuŒõ|eþ¹zaØÓù°W´Äi'n\†¹Õ¥íøÌ¯3û#L|ïm4—½ƒÌü½áÎÖ«+ÑþHÒ¦Ü+¤<¹!ÄdƳ¹Y™ù¨X˜²°åít )Z]ŠÉ5Sž_ø3Áó=*Šö«h3T®”"S2H‰DåAj~žWLœ/fáu6£,k#ò+†ºÞ¯ÄêòKxôÂ‰Íøùûí¦à”%–x“WÊ3#¥ÿÄÕï�®5ÖÁÔðƒÒd1àuáú•¾`TaðlÕ«¡i¡ÚÉI¸»¾A­©gºFJÚ(õ%¨ùœÎHi6Qƒ‹ìü¿?ƒÖa ûFµ>õé|F&'†®£±ö(ÚîÂ`?»ºp%ÔR ìÙÈì‚÷|%5”tFIÄtF¨›¸~”Ã,ÆÎ}‰sšÎ켎˸æÖÛ,V úž9@:锯)e>{O2=Ij'RÚ)ÓðØ> Me –-MN ë ³7j¿A—û¹~þ&µíÓWákÞž¼yÀ¾²NâŒù)'nø'ñô¹8+iã ìµ¹x½  óÔ˜ÄеӨ.ÝŽ‚²£hÕýŒ”{1eb¯CöëEh˜O9 äÓÕe((ØS+Ê¡ÿkHÑjŒŒ»Ý ·W\P‚”÷Ø{Eq,úuŠÒ ýÎKA¢ò 1?{Emö[(h O»PœêÓ‡PZ°e¦6ù©$†`üüýöFƧ|²À¯ø©~'¶š. g~BcYªdRŠ)ÏŒ”þ•f§1ؘ‡””5ÈÚ’‰µå1ðËçÈLy ëk“Ï€ó{1®ÛЉJ½A b>§¤3bšMÌà"srž=Ãsª/~®ïü)k6bKÆ”·ßÆ/¦lÆï Ö!š“CiŸ¼ç+’QCGg”´ALg„ºIÞÎã²k?öµÿ®áœÞ‡Ã\Žªö §~èfvî“þHùšXæÏƒBO’Ú‰”vÊ<Ø÷é0NS”ï™ ¾²_öôHŸÁïÓçìçà{6)À(”ĉ'nƒÍÄ#<•ºYå^\h?fŒ/Úq1¤huìLçî‡~ˆ‚·ß]!¢qò‚Îûñ¹]1†DåÁ8ðsÀ‡‰‡ÏC…\>SÒ¾I<{‘ÓfýŠ-ã?€éž¤¾ÓˆA™¡:3RúOTšåšØÚ<ÌNÝ‹;õ•¨sxÙÞCcÁ—®€§'jÍh¾èÀ¸n5@«7h@Ìç”tFJ³ |)E Å¡+F³{ðõ¡~G=1™8tµÁ@ATö‰aÌ:P··¨û9uŸÆ¡Ô6Îa‚‚H7ÉÛyœ—+çâ+ ™¥'Ñí¡³ÿø¾/¤|ýâ|5)=If'RÚ)KažÎS¨57ã¢cL¿ü«=l4vŠæ¦ø1¤lpE¼™Óª-¨ÿ¹U«ßyÉ¥”˜ÁSW,J4ÚÄÁŠNç#ƒ7›ÿ¹¢Uåû~ÀÀ¢ ¶fäUµã¾áÛd9¼peh„üœ„þD{éZl¨ÿWª2$S[±ö*l­¶¢×ÅG Àe¿ˆÚü7°bƒ®`ýݘìÀuÊèöÞÖl®8‹?}…âÌ:Ò@ û$øw zýSŸ’x¹ˆa´û§á6Hc9:~ø|’Äà W§æZž…Q³¥Îq™[ÛYLvÆŽÚKèUÄî@Es~2ïB¦d †Tï©Äó¢ß1¼pC­Z´ÀTÿmÜVäqpÉhƒr/"ÈÛy<Pó>r«¿Æy‹–ˆõ-Ì9È75)?Ÿo<‚åg1 4¼5}ÏL7ê8áù:&þ.zr;a½Þ©OäH<_Y„¯ {zqs©‚+þqæ tãÒñÝØœ¹›«Ï£Û~îW>zï…ë|2R¢£ã¯!£¬Îÿ´Û HѪR+}ÆÑ+©™ehè~ðB…ÿìWÿ±ÁÒWÓwÝDÏ¥/Q´ùmdm®†¥ÛŽ>·÷… ï ‡œ†À3ÜiÜt•ÜJI߯—ØëéïƒçpÔ¾½pîáõ ›û™)#ˆ±n´÷-5…ßž×&5¯ ><}yq¿ýŠš$ôÚ|OEìå¹ßŽýE- üø~Çù²õH‰¦Û”õ(k¾-V楌æ=¢öJ+AóàKÖI”ï©U—¿k?QšfΜÇöÕ›`ê}úƒ¥ •“‡œŒ¨êœ`_õ0,ÛßD¦é³J—ƒv fÎ݉ïOC? €òÌ(÷"9ð@M}Œò5þÿ©Ç)ó>AŸÙeúž™ÑÑ¨ã„æë¿…žœÅØÕ«è[Êíd¾TĘò†Äô•ù3è…aOOäÃtƒ0¸27òveç`×îw‘‘–Žì¢ÈÏ*D­]‚J\Fšñî¦\p ã /cLáAÛ¬Ãá‚uXÇÑ{¯*¤h•<Źqú|ô[æ lÈ7á[þßçOã‹âÌÀ‹S qá½xà?6XúŠ€ÒvmƦ];‘—ñO¬ÉÞÒüw[û«ÃÚ8üöZ…š¯Áœ¸'ÀÉ{Ô80®» + cÀçjBùþ p©èq¯œñÄecÎ^V÷›ˆX!?#™QóJ ðû7.vRùJY‡¢ã6Ûm?Æ:j¹È0ækÒ‹ŽÃ6¤wÂÏ_iÞ‰MÕßÁ1üX¹ øþ@Û»pð_‡P¾ViZ©ß‰fF{cö·:UA¤‡ÉýæÈßS£Ñtp„Í=ÀXŽ”ìC³KÐè+ZÇl#˜c´Óyd*›Ãý$bƒïU‰ãÍç#l©oMÛ±¡â_°¶ßÀàS½!cÊ3£¦3:p¾‘E`Ú‡é€:›€g uÁõô/ø†n¢oœÓ}¨YkÆ&Ô:tŽ_úž™jhF'._3ü-ô$ü½œŠCïZUùÈx šDõ•EøÚ°§gDˆÄypÅçDcÁì¬þ�ogÖ cL/©xp¥ùþX`|¾Fñ»µ Wtï¡oœÕ‡ö3õŒpç¦ð=¦¿ý (½æÁöv}|žæçŸ€Ã¼ïèn¹|:jà¡}ºÞ™òÌb¤PO ÁqOÜÅ”¢UO+LN¦ Qâ€ûv¿À’JÞ <uâ27š.;ñ”wÌêF«õG8ÆŒ×-ãgÚ8¥!ÑÔʽð´ëŽs¨çJ­Ö K× ¡aÈ ™"¼¾ó�>y{öw<Ôé(qpC¯ÍõŸ‡äÖÏN›V †êTõÚSh³Ê§³RîÅå±wB%Ùú㚯H¶úäÕ{yúq¹¹C¢ãm÷MØ,fÔ2:«5_„Ý3%@ *èÉ6L5½òR>gróå~Õ÷È×mXÍ×1&ó%øÁÑÞ¤È %ÛõXΞ½ óÛ›Q­4ýžoômÇÆ÷±ÙÄhÄ~ ®ù¬¸eáƒËü.Ö3§·Wµ—ýF#J7›ÐÎÿÛ5®ó9y_«‚½'0Åö¯PœJÿ“ß`.dºD¤ahÀ ·Ýv\Û~Óß´4”ö ñ{úÂ=AÅxÏ1ê~,'#;ç©Ú²"´RÒËq^W噟?aé?ihd°*+í]˜:Fƒ<8{õëVbåÖ3/¸ô)¨¡u¬À0_Oa¨õ0*ë~‚gfnç°Ò‡$àcßÛ-8_šž `f¨*ëÑÁžÁëvaˆûÆûû`gö±23€ÖU¨cßÿŒ÷>œCOØ™ÏÁ7>�‡] sx fù~H©Kjˆß3Z_YË¿\£]gÑtgù€'?½0ìé‰|˜¤ƒ+ð¹Ðz✓Ðsê,ztïK©¤bkó Ó2âð\Á¾Ì×°‚OÝÈËG~NÒdÓþ§~Cí¦TÔ^oÚX[¡Ìç§±?èÔòÙýEŸ¡SW{žzÚ¹ò²ÞÂæù½—å™qænJÈVN&ÖVu`Ó±ìÂêÌÏÑë]þÉøs#ð|Ó³ð?u¡sÁ¹ ľaÜè 6Ç ŽiÛ€5/°Vê}b 0Ԉ͹'pëÉ ž (I{Y¥(Út�¶Ço$ÍÏ”7p”Soˆ'è,Üh¯Âšœ2Tä¯ÇƼw±õPž -xáj= «szÎâTÏŸ:y1|;ž²&{+ò°vã6äm=¢sl&W”q ÔDœÙT›>EUÑVËÜ|RîÅÏúlébã˜ÉÀù±ŽúÁ³`΢8}UÔ^lÍ@`ì:ö+:(9{ÂÄGJn*…YFñ±—¶¥šr½òª§tóy,£=e;šGÒúïãê¾Ífmcºq 2ÒÞBq£ ÍÎÂëjGSWä(iù€ø]´5ý OÄf#¸ö{¶ÐúÀ”ã6eW žë€ó§Q[‘‹5+óÐ8t„,(Úß }¹�Qò¬ú0WaSñi‰[UJû„ø=I‚”—on|o¾†‰¨ gXG0;yâ2>üÈÆÎo9Pžñù–žqù öNö#X›¶ 5ç»áò„2'™ãûd¨ %Ñ®|<xrЉ ï™Ã#£ŽIøzÒ†Š×¶Àt¡§«r‘–š‰‚Ãõø¢àŒÎBMwôhy0¬'Ça«x Ù¦ó¸tzrÒV#£à¾úb;Òýñ2kôÚ‰sì5?ÄkÙ‡qáÒ)Tå¼ÔŒ8ü• iÁÒ1ý#ÑÕ`²ðûo`{¶Äß-[úDùž*PûÊËšy+Œ×«»—µ øïê…aOOäÄ \¡„ßÕ6âgõ­P÷9ì+¬Fë ÞÔÝyLÁY¿ +CÎpsðXQ¾£#¢ÄÇ>Ýïù µo†Ò•W#»æ*< ð/Œ´œ@›®®ý±S[#V³C‡‘EyfŒùù ­c6¸ç˜pî¬CIå9]u¬r´Ê”Ø3ŽÒ?‘kº:ïàw»be!_ÑÒ§…¨sà1zj6 e“®nˆªë˜ €<X^úoà(§ÞÐNЙs™±aEræÏýOFWÁìoÿH†¹»0oXÅäÖIÜæ¢l{1å<‰÷ÌwunÕF8-fõX·b-ʬá›–ÀØ|"ìôRîÅ^¦Ô·PÖx-2£@(+aü¦w=ÒËN££W½[º³æ’S«ß‡uäù‚,xÁ‘=ߊë åÆ^òÔõ‚/þ5„“²<? –9Ëêï±÷ÒQ”ìkÅ ` @¡YæHÖßRÝBû`-ß+N³ ŒeÎE‚Ù'O]èhnPô5¿ÜèÒ]îix:êP0¯ƒS· Æv?Lû!´i×—]¦d¬Âê2+Fnޙ޷‰=2I„ö é{Rcê`™Ë·¿ðìé<r|‡ºÊb䔡Ú|·]7qcè9{ÇgpY>ÂúâVÙ‚„gFzþt¥güYäÀ{’£¦G+ŠO[ü{u•‰Cß3Ó:¦àk¿Ý„Te¨Á4†ßÅŠüs¸Ý~�Ûë¯ÃåöÀ3غ÷ψ=0ª'{"G±ù…ê¦E°ÜnCåözt(Cî¡»î|­ËNäöÄlà¶×a›þ‰|Ë ´W–£¾ã.ÜžQ v×ãý¯õÙva0y¿Ìxû€»KjHßS Z_YÛ¿=ˆóݽáÓa›‰ðµaOO^ˆÄ ¤7 ^ EGPyÓ­](´Œè ˜ÁK¶E¤`1ø™#”2ø˜“<<,ÌðŽ?48·ž2µ•òÌðŽb‚æÁähuêW˜Ö®AnÍ·èvy”ñÆJ€íÉ ºöâƒvòN…ÂJÞ <°bgáa|óU2SÞD%3Pž¸.Ô³3*øEƒòŽý6áÔʽ‚¦˜”Æ¡@MÏ�:«‹•Ôkq9]Š´:œ ¢jºñ¨óSdëÌ‹o fþÌ8-xÝè4 )÷£DGm%œQß“ïîQÑï’ßôÇŽ†ÛìUà ÷CÁ4úP &"‡éfƲ?×P xq8ˆ…À¸ÖãeÈXS+̈üÏñ”÷,øðì™~}I:)kjCFÉSn¨o+ƒå˜œå7ü…ÛšáŽx‘p¹†B#Ã÷uf×ÏœS#2skò×nD^Þv’¹‘ž‡Rþ÷O¥RóCˆ–gl_O§ ÙKÞöjÖ>Y�Å{. ö¢ûüAJ©/ß‚t–† ž9a2ápÕ{XŸm Ò™÷“Eù¨³ Ú£g6нKÏäí<.ï?‰a¿qä}”è-+„þgf¶4Á¨c ¾žuÔâ E7ò`FÓ“-p´2ÛɺôÃRqRŸÌ§Ô“J£äbÅ6Q‚IÜNq|óÝÐþÓµ|ŠcºìD¼Û<'%0³|»ÑZÓ—ò0»gÔŠŠcúl»ˆA1áǸ㎗.Sq@úžZ ð•éü[¾6ìéQ:‹$ ¾IX”irøCä§ÿCb¼í4Ü—>Bff‘j¿Oñqþ›X•UŠÏ”½÷bëN+”Yr ºM£<³YŒ]±àòê [¿·Á|%  ­Î:ê]ÓI­›îÁ¡½íxúñECæ}bcš)µ“¨,Ú‰}-|Âî>n”½ì¦¿ünqmp`üŽÄ åÔâ :þ!XŠ· Êö©¨ Öû¦dŸÀ]·±jP:]>ŒXʰ®Ê†Ç\‘ÏË×”\ÔßÑÀˆoéÓ6”´Ü fÁ(}6^CŠÎRÈPî57Û‘â(YÏÖÁRTXEÏé ;¿ÌQ7÷ûQTñ½\éÓÛåhù#˜Q3ë2ãí”×tNlaàÆ]‘Ž’+îìÈ6)Ž fñ¸ý}¬Úð%~¾²«×Õ鋈ù\ã¦ýðÇùHOÙ$<qeÎ}{¢èBÙkUJ?ã?BÅÖ } ‚̹0xš¬X™‡†ÛüF<”Ú?Åœ©÷N½ä1üAÙøvÉ·øCqÄù³æ"%%[ç$5híRI/ß8m,ŒÈc†§»u•Ö¿" ¼0æòFì\]§±sßw¸£*{zzÿ6læJd­Þ)A ú ÿ̲ àëÉTmá5Á@ ï§2ÃÛ�¤g"'²Ö¤"³ö¦¾ËR=9Ϊ]J¦‰ÀàýlfÜh-ÉTÊ.ó²Ö0;¥]vâ&;«±…Ët%P““ý1<­{ÎKõò²°†é"½½˜ôÙvüÒkBGcgÊ÷Œèü[1ÌM/ž!—ñMÂâÞ-Ũ¬»¨4gO°vQÝjÔ*<†žÉ­®(;Ê3 ;¬Ñ+ek³pª>ÿ;QÌ:¿Âîè,¨øæö½)ºôy10ë›^F‰ÄZÍ„˜ê¿{\` ÝÀQN½!ž ÃáGÛy؆žÃë8ºÆkrÍÆI.ŽiŒ9~@“m3^šëš`hZ:ë8½qº¹ 6`¶ÂjŸ`ßÈs uþ»G´¼(²½¸Á±qqï &M¢Ò"¶Þ(0uB¼½>ãi^’ÒÒ ;—í¾!t^´«Ò€—^4¡ÀÞy¼öž‹8^´™Yy¨¶tÁÞçÖ‘m‹ÏŸÂë“àtÞyYQ(Ó ‰;k¹I‘k'j{t\%dÎ…¹Åm‚/Ðó¨ÕÙYHä^JµXoâI€}¿C?ã¢Ý#!·iíRI/ßø­ùnk”üàšlÎhJ`^ó¿“Çs ^øX±í#Ÿc#ö]U•uÃØ3ËÂ(_óK©jìk¶ 6gm(É{w]¹ö(ŽUmÇv½N¤z’é¯+>Ø×„j·aU¡E¹ÌçMí/óÆÉǪ·]à³ø¥à5hþá ä¬* ëø…çåÓ¨5}Žª¼=ªÌâ¥A{ Güžq+Â#†¹éå0ä ½IX~’|Ãpô‹¦Ñ¿�:v1ÎÌ? Ÿpz#3„¾k€ùgU퟽ ç÷í¾Ö~aÃVŠVgœ0ï¬Á…;ª²§§÷á´™Q‘µN¢œ‹Ô¼ð=ÅCµ3â@ûþ™añ{¤h Æ<ädlDUçû:†aÙþ¦þŒ�®x©¦ÞPî5væ¶‘(£b“]ßኮÚYH.®˜¯àAï&o Ex‚í7<¸e­CeQ Jk`nw≰œ l/f$Þ»þ)É爩ÞjÂÑiö• ÔLcäB%²7aw^&ÒÖlBQi>²rÁ®+[ʧî!¸Õ²ñ~;öµ`D”>4¦Áðé&Gö4éìc¢†÷C éŠf<s. np[P¼Ž7¢ç6“áJ“ »¾Oßt\Á:Õ¸bé©OZöÉ \2½/eŸB«™mч¨k»+ñ\”—oÏ`?RÓ¥[RxiÛiTegõù /ŒÛyÌfõôÁ¦ô‹úõgÚ Ø<úðrüB¾LÁc¿«m±î_ÈâÖr=ɿÛ¸l½çBÓcè»!6M,à…ýrlÎèò,?ÆûnbH§.¢Ï–¦}OzÐÅDxÄ07‘1$7’)ÆL’Þ$pP•1:KÔ1Ÿ¤ŽO¯|¨~.î·BQó€àwÀÔð0þŒzÞ”j[(Ú*9ZeN×à÷¨äõöìïÃë5dÿ&:{m,ôˆxÇàJI/ÁqÛ€~Os4å4Ü×.Ã!ZF¢u›ZÇl#˜ <Dç‘=¨l¾«K€SN½¡ Ã ëô\ö¼ìŒýÌo8¬¬Ù¥ÓÅô È©lS‘{ü†ÉŠ}ÙkÃòB7˜cC6%…a~RSj&ò+Øù+“š²‘-3€t¯Çp^¶Âb¹ çS.çÑÕú=.;Iè´Y<u^e{YqÙùÞl±ë"¬—åô†aš[ fy(ðЉ>é¡<3æ ^ÕŸä s¿^=Î6],W!½è8l"MrµôöàÔdf‹÷¢Ro6¡Ötm¼é&—ׯÃ1&™Qf0s.øÇhkºŽ¡™'p4Ÿ@£Íe¼…aDešúDiŸ±5u°,h/,ùtŸ–ÊMH磔u’“Ê(A\ÆFxaÌÏH7xÉú]½}©â}ÏÌl‰¡ëh¬=Š%€Èm‹.\‘Ò“”|ÍÑ ¯/=I*óOs‹[Y»aÿ6>£¾ƒàzò2Îð˜@­–N9½&Â׆==!! ”c&Io(K‚^Иϕ¡T6!:vóOôs)û­CÑq›@ ‹9v‹¦*ûú¤èî1†åÁ³$î-êËðyÐgkQ‰¦ú&´ÛG 0: ô½>(½*ÖW£5b²L'KwÀÔ~ƒýw?Æõ #,-­C³jœ¶ÅÒS~*Ì´÷ 6ÊF×”Soˆ'è(ͧðÄÑ„ý¦ádÙz&+ÞÆûU â5 ¨œ®àùÏ<¹‰Æý&˜OîAïiòþΨÑâçÐ’˜’Â'emŒ˜¢ÇñΆ #Uõ‚r/e"ÐæíÁ> ^cŽÔ¬]ø¸è]|`{$HË|Å{È­·ã‰ÿ/xZË‘–šÒ™úÁU<~Ñ4·@Ö­}äÊËz ›¥ûXð@ÍEœ°ÞÁ䣜:Õ£Óàã½ÞÅúêï"'xÝhDéfÓì¿E¦oÅÐÛ2#QçñN ·™6!cíhè‚)ó5¤¬¯ƒC8›‹rs÷nQ.¥â9õIÖ>a{Q±I/K´5úG·³ó½?e?ø™åd¼Ô‡þq#Í=©ÀÏ_»Œm¥Ä¥ å…1Ýàòyé¥OÚÓõÌsýh|çÌ·Úˆ-PÞ~¿˜²™ÝóŽî) åk_-Nz’VæÏg:FÓüjÝ•q Ôöoã4ê›Ñ†çêÁPL yJvÿ?‘^|F8 ÈßG/ {z" ¤c&ÿý,'NÒDIK‚¨Ç|¶¡¦ö’Êx¼ÛéJä–ˆLDŽÒ„s3ª[{ÂF-[7ßÇfÓEöß"#jµŒ—U ~·¡ßÒ }´Ê‰åÓŒ¤Ž3(xoœOþëÿŸÂ.ýø ·.·‹v±„ìÂZ…ô’óœÑó RÞ´G÷Nà`£ÈÔ›PîÅ ŒpœÂX¯98 >% 5ÒR(Ë•x3çç˜ûæâuH‘VpÌY&œ’2ë¨ÇîEFÂsö½ìŸúD¸—b¤ði<³˜ìù kS¶'G(úC´—G(“;x‰LÍÚ4l2;1£6j_<ÍÆ1P+s.b5;t”8Ò Þ»hkúõÎ ²³ëx–(hŒç¶ÛïJ•Þ(FûVNgŒ¯îœÄŽº[Œ[y`ï‰IqÆö0ˆ^JDgsN‡ CË>Ù†¬Ì‰¬J¶å¨oÒËΛ•8Þ|^µ—ßš¶cCÅ¿`m¿Á%{©qV%‘ú"ÁÏÿ(jä—R!¾ìý§ËóQò’/Œ9ßèÆ+¨)N¥òõ¡~G=:ƒÑL~R¾&ðÕâ¨!”ùÖšzešá<Í÷Ú¾Fyî4ê”_ñ ÔôoùùÇcÔ·Bg¯‡.ÎB'xŽëGØ!ákÞž‰Ê1“¤ÇhæW mù’ Ò1ŸÌ ðϪ߇1îï_#w¥L‰ímš×ÕŽ¦®D«ÿöEéÀ’ÐG«×@ aé‡ç2ÌíÑMÜÔÆÚ &Úá#ÛxðÿZ´7톧ި@¹<ß¡4ãM¤®ø'rMíð8ÐRó)¾4”ȨágFU®Ä”yéF¼•ºi¹&&OGp§Å„ê/¿@½pЇ:½üW)ù—ƒÁ}†°5V!{í'èmÈN¹W`–;aú¦™ÿÀêÊñè‰ ?š °-FcòØàcT+Qh:…¯*ÞFÊêa{4×G³Hg.Ã4;ë@ÝÞ¶84P§Ìœ‹(kòÊû’=ФYÙ5‹ô¶&Ðy`OйìýÕ›?Dó«0ç½£= b§—Á,iš©OZö ÎÞF§®RÜ0hƒØÜV¥»,‰Ä ¯”ôrœŒew¾ ö øýQ6½¿›ó±R"{›²ôŒŸ¯n¼JÎ+‡±CqÈ{ÐZ½ÍøÉ¼ ™Âþ%_3Z0ê«ÅKO’Êü�üþ¨—ñÝ9÷uÝMÂã6(¨¯Qßܶ+Ü5òž£ëkä‡h601‚aÁ$¾6ìé ‘ 3Iq¤ìõ@<æs±xºðõ‰+®É‰¥ˆS±U8m¼Ö½ígêðA]r“pø;-¿g †´ôãÉoè¼-LŸ «á¬2jšßP[*sP¬KÀSÞ´s0z22õ&„{1ÙR^‚úî!EÂàw£½RÆÀ¥,Wb²¡àmÕÿ¬z¯ixÚ¢L8èCí@ÏÂë<‡Ê¬Õá}ÒwK8–”{qY܉†ÊíûNï ¼îÛŠÃÚçöŠïçEgÃG(*:ˆ'{¯}ÜùÕ5µ(”ôöþ'jÍh¾èÀ¸®­Ùùö+ kB.ž§‹ð’èQáL;,£å5î]ƒRÁ‹YG-ÞXôL)H+lÖ逫Áè ѮÓ«ã²&ð'úú–*)d´QzC5õI+ð<ŠAÛ§È|£Vðò8ˆM|Yò½ù&¢dDø6ÑÎÄe|ø‘ Ú+ñ ÔĻĎé¹Î&œh º…à§é»ÉùZ7^¥@âL§¨dWh¥• 9fÐo)Pñu¼}µ0Dõ¤q™- £Àm¯O¡}PÔW^ 3ŒN1hÆEÇXl¾ xq8º¹ñ<¸M%â߯iÔ÷Ü.íÉBf‘ª¬Q™€÷:²J«•ŸWb§Ž,TþÝé…aOOäÃb‚rÌ$iÄ‘C«$hLb‚”c>9ˆ >®ˆ¿«mÄÏ F-[Ýç°¯°­ƒ‚F()8s^Á>¥ùådå1:ÈÉ@š¤¥VÿžÒÒ­´_ÞwJÉNðãÙ7!sE‘8ŠKþS/±!Öd4è¨JO½‰�á^OnÂÖmæ0s�ÃÂWÊr¥qܰ9×eÏxà•§”´ þI¸7aw `\¢„$d{Ñ5¡Ÿ§³ejGÐèï ,€r¯¥À>çqª×Ñç4Pö+`ŸM×䕸GÍB·UX“S†Šüõؘ÷.¶’àOŸ埢Õ5ªrTÇñÔËŒÓЯè‡F‰i”Ñ®_ÎjW¢œÞeƒ+óàÁ]Þ-ê•—…ô͌ɮñ Ä <ËÈÛX{I±y)íSOÔ;\öàD±Ë®Ožà‘ã;ÔU#¿  ÕæË¸íºœ‚Ã˦-a}qkŒ ‚}þ2%vÄÍœ ûnò÷ÑW*£Æ Wcö·:Uòë!ÆŸz%ü+*_-&õ¤a™/^\3xÜyë—*C#-cç—Qß<�´qi}ÄVamOŒ u"|mØÓ"±x€‹ûÊñÿ%è+C{ˤ>¾­û_¨±ŠÞ&sŽù¤4øóE÷Ø»y×K?=ßSaeD¦Ç|ŒËw°3|0}´ú÷ Ô–~h4Ò ®“°¹§ë`ŸµÍ.=g‡Ò'#SoT Ü‹ƒn<:e¹C‚Nq3>@ʽةÐ5¡¦³=È_»yyÛqH¢‡å^ëF{ßRÁ:λ:ûèPö+`çOÙ„^»GÍ®}Çœ®ÐzÁ37¬HCnƒƒ9lì9-UL×üÉôÜGÊíŸ(Oïãž[M³ò2ƒNÎò÷2\™‡Öw©µ¾]¢—Z‹ÏlIMÑÚËÀ¨ï%K™çàí=ŠìwŽÁ>©‡æåY2ò÷‚÷±;\õÖg›‚òÌ{¦ì|ÔÙc•.ÆñüÉJìbЬd3gʾ›BvÞ+¨a`¾žûï–ar¶­Îåû‘ùj”z’Á˜Ì/ÎbìêUô-uÔËõè# ÔpÄcÔw�¾{·Ñ/ܸy1DøÚ°§Gá,’ö•ÑŒ8NÀ+¡¿…@·¥eJj|ªÔhZÊjZƒO£¼DIçú‡TÚó<æÜ6[Ò€Z¼?CÙâ¾þ»0燚zcxXß¹é£Õ¿i †§DR•~(Œ¨eéÁÔ›PîÅþnÞ½z GçŠ_«\©µÍ#¡Ÿu"§¸qůه!e»xzʽH›Ð󌎬`FÃm΋!£nê6êß;—Ðf”{1x¬(ÎÙ‹Ãj>ŒX!?CçM!“?”ý èšÐÓ–W(¯—W eþœLo÷  ³ºX8ã—ZfÐÉY->×ZzlfóÞ-3^Œ«ÏßÓËŒ>ôõ€ˆ—sžnQ‰—,hƒØ¤¥Ì\žm,Œ:ðçqš±[WàîEž¿X‰]Àû�ÃÊp‹%hV¢™3eßMÎϺñ*j(m RKë«QêIã2?ŽASËûÈ©8¤ñ~¡U•Œ¨ ôÎè¼0øw¦†==‘‹Ò¾2ìK9ký ýGÙ/…—=]„ù`Ò9Ó¦n@Qõi´w_Bë =ejЦPS|ÁˆnômZ1*ë.Â%•:ÄB'i¡0 ÷¥™Y¤2 ƒŽÝª¬R|Æ>¼[wZu2úhõï¨ ¢ôcÙFz3xØww ~T×ÑÆa<wN}"ÎË•®Úñ : æÒÿÀŠýÝ2FAOqÓš Ó{é(JöµbPTnQîEÚ„>šÎ¸¬þ=:P-Ú„žr/†XÁ-õâµázŽ´_޾&ºÁi–ª¼‚Á?KñTÙ²Ã{§dŸPúw‰€VfPÊÙPp…d3^†p68 /êü#eïR vN¦0Ôz˜ÙG?Á3Ãõå°2A)àC¿ãœR富ƒØ¤¥Ìœ7w[£Îšj°I×DçpÔ}ŠÖ¥šâû§%Ê]b”ØýPŽõŸÞÔu[®î³CG³Üq£ë»Éi]75i¦‰Þ7ºž™Ò¶ Õ¹Ä宄zÒ¸Ìg F[OªWêËÔÄ:Ý£¾ÕàF&à…ÁŸA/ {z"”}eb})27£¼«Õ„‚ôT¬-?ß'C$x ÷¨h0„ýa 5¥Á§g² Œjæ0Ùù Ö.êwµ ¡GGy?Ÿåñ7 ÔPF5{Ô¨×6d¥.q³/eÂxßH$ÊÔ'uó4.kÚ,èò¨…ü4Ü×.‹g¤¾©RÊØ“Mqcrª¥?G­²2pjCF)ÅÀ0𷕉+`ʽ˜¡7b¡jBÏk­-(^w�¶Çü9Ü¡Æïÿ@v}Ÿ.g$ ʽxÃRÛÍ•@Þ”nÚ~ï�®5ÖÁÔðƒrÙÀkÓ¯_éØð^Œf©'ùÁÑv¶¡çð:Σ®ÑçCoPˆ€Rfp>'kæLyþ\¬GzÙitD8'lév–ˆõɤ ¯méB+NWå"-5‡ëñEÁ!›…áRBFg‹‚ز£¾(K™™}h?RÓ¥[RørÛiTeg¡ªs"ô; +¥Õ:3¶Ê•â6^˜°ï&§)ÝŒÁñcŸŽÆ´üì>avî³ÐÏ´Ð÷Ì1l‹¡Ëh²‹Nj¢Ô¹\~iùjƒìßìâv ¥žŒ!ó‡Ú¬°ë’ùq Ô|ÿ lÏ–°+ÙwòbKŸB0:ê;ó6SÈžÖXKOÀ ƒÿ®^öôD>,HûÊPÞŒ†ðÂnùååŸÃÒ}?Þ‡J‰5tÆK‹ ¾kÒ‘âå{MÙ½ôMÊrð ÃÑ/.hµ VýwtÁ1®Cþ‚oZÔè¡ï-€2ê³GzÕ¢9¦£O«LÂéÍÊOÁfª’So(÷Š›b2|SGenÝÒãßDÜFX¾5!CÌÖËè|[‘GCƒÎ”[Ë#Õ0¼—:¸Å¡Õ„^ÿÔEt6æ`Fâu Í<£ùm.å_„{ñ†¥Ï—í<ÐUð…Î@ Y¿‚i 6æ!…7 ßœ¶ò‹øåsd¦¼†õµ¿AÏ·©>Ò±½ d½¨“ºÖ„Z‚Þ~´ÍœŸL9ŽcGÃmDj!?&Üuiå™rµÁ ×Ïú~+òÏávûl¯¿Ïäì@ÝûgK µ²CdG}s0yD6ÅŽóÃm´TnBê¼]²Nª1nüKiCKg¹RÜ5Œæî9†i]üld¡|oûJ4‚DyÈÉHCJæ~\œFµt?3YЎØÎÄ|OE<—tb=iLÄ˶cvųgx¾ÄÑð2΂¨‰¸58ê;¶3:/ ¾6ìé"  œ^@z3Oiuu[P[œR02=j(ÍòÙÛ´DFÈ&˜RBB«jx¬(7ýJ¢Œe@ú>”QgÃ=j¨ k:cŒÔ°# Ô¨•IŒ›*ÝY0q Ô,—ËŒõ’ó÷¢œ²ÐÈÜÊËÚˆB³„ax¯Ä¥Ù0fñÔy‹—™cÏý®‹°^–¼,Xd�…wÀz¼ oñ”n=âƒÔãºv¶*½Í¼¸S_‰:‡—}Æ=4„z›-ƒ¥Ï_~l/e_ÒÞ~¤ÍœŸ̦±±ï"ªŒÄdÚ¢ŠïuÊÎGh`çûÞt«ìKõÅïÖ&\Ñ99P¹€RÊ®8Ïg`E~ ­u0»B–€–Š“‚ïI0ê[k¼­t)stà™Ã¯ÛÉlƒ>ôû¤l0ÚRZãåJñ‘³!Meå²A¡R×ù‰©*Ý Ôü34‘ªû[ôé\ÐõÌ”2?ðÎËV¦Û®Âù”_‚¢«õ{\–Ê$îQC¨'ëu¢Wš¯á²PØýºøå÷/ýߔҧ˜¯9ë@ÝÞ¶pß1Î?V˜k9ÿœB›}T“ö%mkæS úVÛv|ÞâÒÖÀøðÂàß™^öôD>l)M/ ¼e ü‰ž•ÈYÃë£W#«ì 4wÜÅøÔ„Dé¥ñÂÀß³´Íê›iKLù9¨0[ÐÞ3 yãšXXLSJ¤h•1ž³å Š"”\håd 5e#ª.Ü})gMÅ{ GU0Ü£&¨å™Ñž~&¶šÐ>eªÏÁïAû‡ŸÁ¦'=_ƒÎ“Ý8²§IWÃÇÞ+qi6 žðrëíxâÿ žÖr¤¥f£ôã"lúà*‹Š0Ïh:ï÷b|ü †,V}7…¤ÿî:p`G~ìµ£·µ›+ÎâÆO_¡8S_/žx9p”}eH{û1ó™®™³ñó#vùs©ú $8of(ú2öZ­Â%/kÙÂ3j‚ûrçcÆs%é¼Ôe²Ö¤²3Ó×#% &5ƒØ£¾VŸ¨aôƒ®GPÜ5 AãSY9ÈamcMU'sÏ£Áé ¡ÉV†®g¦”ùÜÚ¼=Øð:àFkI:R³váã¢wñí‘ ¯@Ý£†NOÒö%‹UÆ“ÊüÔ!Á3côtÁŠͦGöš÷öÃÒ¢³GbÿìAµ2µn+Šõ^œ½,Y¸ì¼0tñH†==‘‹Ê[&Ò[VfôŒ;¯¡¹¶¹9¥øâÌèqÁ7'Ù£†ÌxaˆUª²°V!½ä¼pé˜ñIM” RÂÏEÁ¦ÍüÖ’ß<DŠ<P“¶& y¼!êþV QŒ€Ìûè‡hÔY…ëQ“ Ôˆ"^F:£)­ôØ…Q‰Üˆ· rý}å’Z}•¯ &3[ª ½±½—fÃàÏø’5ÁƒP5kÓ°ÉìÄŒH¼L(òO‹ÇùÚ‚ ÝHb8pRý žÃQû¶Jί7PØÜ¯ëæ8~e/*ÂÞ~¤ÍœŸ4ËŸýðùô,£{s}ȹùõ…Ì©ù¡;ìètŸFÙ;Ð:¨ï–œ—°Ûj?À¾f jsÖ†<œ~¯À\{Ǫ¶c»0í0GÇè¨ïW"PC�ÂAñâsÊ©¬ü¤Á³&¯wõ(Ã.�ßÐMôé)ñ—€¾g¦Ú…Ài¿€­y¹àgX›²-˜á¶\_” í'J©')õÓûßÕ6âgµ¼émƒ©¤F·, ƒÓøNm?i~1iÎï"èw­E™u ,ÿO`?ò‰¾^³¯€,ákÞž!!i”ò–U žBê¸ËWŸ¢¢è]” ÷¨!6^xƒªvOÑ« jí‡ð‘Ml:•ñÀ” R"C«ÇWQ¹æ�:µŠ/%•�dÞgIIÕU§]'Xšd Fñ4ÒðÝ‚µîCåoGiµíÎùtý'è5mÃ;u¿bRÝÅV§dF7ï$Ã{%.͆1ƒ–JšN᫊·‘²úcØÁõãä,%«Ñh^Ö¤e„h*?ë Ô0õ+`Nˆ« åû/À¥ÚË3®¿aoü5t}eH{û1úÕlæì•¡gãç £ý"˜õÏM™û =ÕðŽ®QÓ!Ú8ûXmN<‰z†…4x]g‡<øïÇ22Aêo¨¡ì4ë8½­B?Ñr*+çk9/ÛÌußÃQBëßé ï™ Ko#°ìÜ Ó7 ¨ÈüVWþˆGO\øÑT€mJƒ´ÊÙú½ æ+Á½(õ$é¨i/†‡¢š3p7ïÒŸ]¸€Åš¼¬t¤©.ló²Ö M(P£öCÍzÝè4ëËKj"!/DT Œ¾Õ¨Ío|é¯[z¸)!±ñ¢Ù Êñ¾›ò1Eï½ KeŠ•ñ@ eÝ#cNÂ)%r´Êèa¨. áàƾ¥º¹Ç$¼7£©ºjÁh¸GŽqžHjD?#=˜=ù¤f䣢ú0L‡?FÑú\‰)) ãívæ@ÉŒ•7¼×«¨að¢³á#D Óafüôñwís‹gœF¤t3Y=jEñv5= dêö¨á†ö9Xo÷íÖC†v¼Îßp_u@\³·ß¼z/µ¢ÁövÛm°˜ë`2ÕÁÜö›/)`zÓ}6‹µ&Þ[î"ì’c«iûExоç=TÿKЩw»`¿T‹ü´×°Á|W †Š6('HýM5/®G[²Î9áTVþwr˜¿^¢? Ö¿ÓAß3ÏÛóÑ|-P†¸�|êDCe Šö} §w†ÉŸÛŠïs{÷ _Ñke¡D‰ROƸP’5]Šƒê ÔÃ"?ýXW›q„Ø™E”>McÔ²72³=»î‹mÅ؆’–{ÁŒ¥LŽéÉ%&¸E ¨‰„ȇÅåô‚„¾ƒÏ;¥P aÞÞ£È~çì“bìf|RS,á+S÷ÈÁÑ”þÂàŽù_°r§&ôO býû „ÔûÄ€áT]RÁ¨†Öèø�¦úoãžNƒ‡Ò°&5Ò£›§¥Ü¢ ”…ÁK B=RTßÝÌm4ìn ¨O¸D“>aÞ+žzƒ ñj&< O÷—ÌÙMÁŠU{Ñþ8D7ÝBí†#ú PÒ5± í”­ÍÑñªñ9ÿP ÆH_™(9ð=ÇsÙÀL‘”5¹Ø[}‡«Š°©ø´ÄSö\½å²›J%FM÷‹`xûÐX¼N\…ôbýMóiõ á©W6PÃl<ï3%ÀðMâÙrÁÁÚ#HÒ9çðÓLeåÏ ~©|Mce¬§‚¾gvÃZS¯´‚˜çë^Û×(ÏÝ#>Œ¸™°Çz4XR:/ozÄéò|”HM:#Ô“Ô£¦‹²"GÈçe#³ð”œÌŸo&ì€îºB¤1XUÖê}À_Ž:l©@P2ü­°Ú'Ø_?ÇPç°{tÚ�É@M$Œ‘yN/ø»ÜŒ&,4ê»Ïa_aµDÝ#¿åøm¢˜30®–aW†VçÓËSŠ"»xÇú÷ Þ›‡áTݸj4”‰2±`#ª:'˜ð†eû›È4Ý`œ«åÓ›õ÷;ˆWª´nØYëPYT€‚Ò˜Û§ÕÇF¼ kã²0øMÞ'‹Ÿqæ6ê7}®Ó¡¿ëYf`ªo=#–@0å^ÄÁ­øÐq3aŽ£,i¹ŸâôámX{§Ïƒã¥ë±ª”j¡_]nœÛ‹Šÿù+,œÿ(œ5oâ­Kb廊üZÔïã.™ÞǾÖ~]†vÜøÜh_™xÉÙYƃëVau™# ¶Ò,¼ö/±Gø‚%T²¼ú}XGž/ümÀû ŽìùVW ,b<:e¿ˆy|x2Ì'ÙáèÓ߆Ҧ#ÍY–6ðû¦u:J:ô‰>GÿO´—®Å†úq¥*cÙÛü¸õ¢tÎÇ®ÃÜ6uÖ³˜ìúWu¥÷¢û™Õ ŒýQgá»sîëâÍ„#d΢ F^ünÎÇÊuõpŠ}}AÑ“¤£¦ÕаíÑsä�µ*–û>=]¨ËçÙ€ÿD®éç¬Cnõ×8ß\‡ÒŒµ(mÿ3ô»:`Ä&½ÏÅ¥_–�B„tzÁßâfT >¾ò$LÍy£…Ôu¥HÏùÍ¡Ìn´Y÷mFêBßý¢UžÝuíÊâHn¬ UàFSuã¨Y”žZÇl#˜ <Dç‘=¨l¾«óÍh¿ƒyÌÁ{÷.îGǧ†à¸'Á‰ó¥©™È¯8ÈÞw¹ÏF¶Þ‰qË‚1( #€)û1”˜.Â1ÄË5F1上ƪ-X[ÕÉÐo- Ng©‹o=#–Þ4`ʽaO]]De$~xÇFÒ¬zváTÓm¦3—×m„Í„yéR¢ñòë~‚›½_`òWÔmZ<»´"ƒ/V&¦\üÔð0þŒú£€»Û„oÇiK"æü‘ï(ÐW&®šÕÈWÛ*~/<&d ÷a‹î-ÇÁhØóLÙú²ñµ›8ov ¹þó oZ~(«#~6Êì(ç$à{Їjšš¤¥OÈúGEcã®›è¹ô%Š6¿¬ÍÕ°t/]®¢œ?Y 0Hs>P!=—Ù%·ƒAn/Z ;µXØ·à2âUCìg^Æ¿â™ê_ŸBû à÷Çå¢ÁfÂKóõ4“…M8Ñ> ˜©Å`TO.)óƒÁ©¡lÇÅm*\°Õdã áI¼µÇðl¡´BÔuŽÀÇ¿ fïmJåMꙎ+8£¿O¬a{XÒ¾>Z—Ì –h€-Â׆%�‰¡œ^Àa¤)êr‚DñÔ|¤Qô2AY÷Șt3p4~“ùÊ2xânT¿öB2j†ßG©çàlÙTÝx9Ì`u/?êN(ûð`V2ròT ¶r2CA‡iŒXvaµÎšZ^z¶1÷n=QŸ÷s8,1+(ûDʘÁêlùYŠò»@Ùü7a6…Ê ~ªGáV~è™ÏœèEwã^¼SÕŠA=ûQîâ2’®Œ¦×¨õú!ô,›}JßL8?mzÿŒ0„>œö>ôûø–0 žó¦uŠVÑë§ø8ÿM¤;]á uôÒ[F!gö•‰›œ ÒìÛ%ßâ% ÈKŽr‘’’ S¯èÔ-öʼôéír´ų̈QF¤¼¦3 Ë_3^vSoVäaíÆmÈÛzDwrÚgó1=QMœ:ªIªóN“Æ^âý£¢07Œ »6cÓ®ÈËø'Ödï@iþ;È­ý5&Äߦž‡çœ÷é›ÂGö›þ…“eë/½÷«þæ5´þÕš Ç®ŒêɸÉü—#"}±Àõd1Ò þ…Þˆ–%sðyîÂîÀ¸ÀE©=£Š|_ŸJo>‹Å²°¾5mdžŠÁÚ~ƒ:}&þ zaXˆ|X,¾eRcA©H6EMj B뾕uáVæà8ß™?ÑkÞ…tn\ÉLt ‚V †ß‡RÄM™P(ûh9ƒ¡uÌ÷s:ëPRyN×-¬£»É ¦˜êwéërXÙ 2}¢úqüã³&9ÿy0¾öÞgFŠxÙ;)øCN­¦lîAujžNeN¹— ¤e$œf ‘_ÿc˜^íh®Ø‚‚úË*:Ö9‘´™ðw8ÔòÇ’ï³ø–:Óà£1:ˆº Y™%=RØ^˨¢e£¡¾2q“³ÁL“ëMf+àúíÑ“%õ‚}ŸO]èhi…ëkß:zbÄÍnš» ó†UX™{·¹=¢Ü¸÷bÊyïél&LY§”[Œ=!Ï!¤JÚ?J |âX^ßy�Ÿ¼½ û;.É£ñ³©C4ÛÜ èñZ³]"ªÕP†}La¬×ŒâôU’Îo†í¼—€ØÏ§@ ÿî 6Ž]Õ“q Ô,jSa¿)6inLOžûÿ¡eÉÀ‡†ŽR{˜º¯¦m^)éå8?¸|ÿ]½0,D>,&§nŠúÊjx߇· öJÑNçR#ðЉ>]ŽÙò{éûþ¬{‘ñVV¤½Ë Œßá¹s5Õ_ÀTŸÌ¨1ü>” @OMè¬â,Mt`t£ßÁ•oÿC?êC(ÛK\DicêW)ù—ƒAù7䀭± Ùk?Aç¤(7Qö‰¢=JÆ.aÏÖCø¾×¥L÷q»zq©–×çè”õaPîE[FÂå{•R®F�Ó=5H}§Q¼3%FZP{y©43p[¬K”º¨ûh@6 žiŸÅe‰<%þö4:oÇ Ê¨(åì ÔÈ–E˜Ó7»)š7•@M7u~Šlátö–Þ\k¬ƒ©áå"Š7i½~Es'/µ¡š¤ÊùÔÕŽ¦®ߟLº¿6¼pµž†Õ9ŽG=gqªçÏ%é$^gÙ�{ò×nD^Þv’šHøJ3ÞDªÒ«£Zj>Å—¦“ “Q˜öaaH1b?s¼5Æ7^4ª'ã&óõN–‡#渼ԭ[`–‡>û‡Ò&íëãÆ÷æk˜ˆ’ïaÚag:q~d[¶”_„¯ K�*!B5½ÀpSTn/Ôæ25tµGÑÐv^ö…{]]¸"ÐI<|ûB<þZY0‘+/ë-lnì×€aÄêˆ|Ï?®¡™½§ø÷·éE'нР†íí¹„Ê2«°àŠ—Â{Y0ü>q5ú#ð=‚Ã| Va­tèmƒ©¤FwÐA1ÀÖo‰‘Â?ŸûGÔT]<j~f²Åy•Y¡ºe¶RÒwK”}pPö‰2~þ¤ˆ(×cgvçLðÆ2tf<¿XoóGʽ"@YFÂŒŠ;f”|Єn×£1Þ×çÔæ¿”—¨aNnÁš,äiè‹àÚ‚Œ5¦%5ñ2Úµxsƒ¶O‘ùF­àØ^¦ƒŒ–QÅ+ NZ{o¼$H £NoÜœ&Æ‹#–2¬«²á1·7çÓâSrQG4sqƒyŒ¯× kK&Ö–_ÄÀ/Ÿ³3| ëkƒ ~ï™`˜@ë*ÔuŒb†gS=aÇtïø�BÃ>âuf\Fç`ÅÊ<4Üæ:—Ûĵ°OÝFý{§ôMÝRƒËÆôÔw?é¿í•âòŽë"z0¹fù&ûüØhZÄ~æ¿a Æ¨žŒ«>1Çw¨«,F~AªÍ—áŒ(7Ò NO;±&k›Æû…VNÖ辨¢´‡¢Ú¡œm¬ÇÿÕ Ó×çº;ûÙÓ©Àó®S8Éõ[>Âúâå'DøÚ°ˆ1�£MQÕ˜ëGã;ÿ`†ËFlÉØ€òöÛøÅ”Íó;¨uèj}©BøY¢—îZ÷¸!vŠˆ¥«a±®³¥J™Rä{¦FÞ0ëÂ,žÜèDß¢Þ ~L¸ ÞŒÆVÁ7ýò<%Ãï÷@ 7Äœ°>ˆ|Åž ŠÀxÐ!8Un *lêé1üöØóÇ[±†Óªpé 1?{à¼?Ͷ„Ûy3TÓûß’7 ”}¢(ƒ>Рـï1†ù™‰öE¡Ük(ËH¦á±}†ì…¾>*,2@™Á™–ެ<ÕÏ/%P‹7_C¦p3B¾—Á2ªxÉÙù CôJÙŽæ‘å[KG€ $( ãNïòN“þI}‹Á“ÐdÂŒ×æº&Ø\%x“jv`«ÒË;õ•¨spcý ¾Ôü{jæ0iû¯eÆ…K§P•óR3vàðW¦`óQF³"%íñ9³èØœf¿@Ï£Tg× wžÜ„­o±˜Ũ ÂÏGïm´ì+QÉ®ùŤ±sß R´¿4b?s2P#¬'ãf§ÏçÓ‘¿ÕÌN<\õÖg›$‚ó\OFjr2¦~o¡@Mö°¤¯e¸ŠZI ªáÏN…ôð…e3ôEøÚ°çjDˆÄ ~MQÕP5ÅÁ´s_êwÔÃñW�¡3(N“e„l´Ö=n lØÊ…Jê[(cgÑÄp³qӪNJrÓ¯ºnÎâÃï/ðaÜiÃéƒÁ€]꛾Åõæ³Âi¿$A‡À3Ü1ïĦªópxÆñÀÞ††ŠMH]‘‚Ô¬J˜ÛmhiüI°”Ž˜Ÿ=ߣ¢´ͪeKLù9¨0[ÐÞ3€§º3µ”‰lŸ(Ê G°$¢ÓbF-Û«Ö|v‘šhJš›DÙWi<K1Ø×ÇÑ2¹ØŽ1z3Rº 8ójÃ+ä/üCôÏшc fo²åôöCâ (£Šy~`üs=â{/EÉ>‰ؤ%AÆÞÈ>0T“ú8hy30Ù;ê”&ؽ­5Ø\q7~ú Å™úÞóï¨á|¾xÀ±6ý“ÑÙ ´W–£¾ã.Ü<Û­»ïýâ{…ÁäëˆÅëÀö˜û Œf•’ß »¾OøRòv^ˆyÆ×BP`~qçòŸ!Ǻû[ “G ±Ÿ9^Ó)ØsÛpŒÙ›¢\ñ¡+£z’tÔ´ <8¿±08Ò<ôOœfœfìÖ]=1¨ámFTWùÑï½è–Ãâi—\¶ûÆÛ¡¨;©At¸†_ö\ißD5Í ²ÎÃØ¡4"êAkõT4wà'ó.dJŒ/£PÕ§OÂQ[‰gT™Yà1Ü£¼!E«Ê”šƒ(ŠPr¡•“Ô”¨ºpWÀ‰¦ƒaÞ‹“17tÛøíJÊNwéî‚® ®Ä¢‚yÙÈ,<%Ø,HßgM%ÈäÏ––ºN·„ã6b~fJLóv|a­BzÉyÍÕãWËÿ¯ ”l†AuþAD–D„éðÇ(ÚTúr²â¨™7ò£¿C™QÓ!ø½W,O?.3]$m¼ñwO•ÉrTÁ¨ÇÛUÞœqš¤1(AU¼èljCFÉÖÀ0š·•IL³ , ¢tzÃ%Y‹ùItR%oû.Þë 6÷ër|㨙ÏÐŒ‰<컫³DN«ï Óý·qO—åç´9(käN7ZkšàRì&F/£VTµ©)˃Ù¡‡´5]ÇÐÌ8šO ñÊhùöåú#œ¦ä0‹Ç¶±¦ª“}ÑÐp¬ ¡ÿ™¹]Ö‹¹.èw´ý&T§¿Ý„T©ìíy—µÖ“Qàe<V˜kM0ÕžB›}TÎŽu vwt ¨iÀ&¡€ ‡=E¿÷¢sX¾»8[¼NcÒœø÷j¼ŠtI "|mÐÓ#p#À ·š`Ä ùpºùÂJ+A³Ž®Î‘`B62”!QëÓùMí‘bdfEF–¢ÂúroŽdh5Èä«´k/Rû P´¿•)w öÕ™÷‰€:R¯iØÉ6dâÞ7 {Û TíDUCì#“˜‘HûÕ4Ñsä�]2FÏLaÏfFuéîгaØ9 hŒó³ç2ÌíÑ¥1jGví‡ðQDùV –lRžè†oõû°ŽÇör¼¿àÈžoõ•‹½"ºQÓø\g#{çÌ/#z’:Póè\Pµn~ x‰²Æ Ü°3XF¥–³”z›gáíWÉœô½Mg£š9+ R&-dÍ29;åôÚ\”“ú8¨y³ åû/À¥þ>ǽºŸ'~åVelYl³,¬mÈJ/Ô9ÑŽóñéþsðls‰Ñës˜ì¬ÆžQ£È æÐ=†§uÒù3æea £YÊv+…/K¸>ßÒãߨ2ZÙúÖ„ü 0[/£g÷Õyñàï#À$†®wõ¨}�/ǽ‰¾ñø¼‘¾gŽò;ªãpU6Ÿ–ºš‡ñ@Mlº’*k7¬'Uˆ(ãÙƒjfsVmE±Y¦—Þ3ØTÀté†Ù5‡í4ª²³‚|-~fá@MÀ7Wë>¬Ëÿ~uOß] P£|‡éL&wü–ùʘV7Êv(:†åè¼ÃŸA/ zzÎb,PÞÇÕX…ý­Î°ö<ÄøS/|Â'ª‘¡ ŒèÉfÓ֧O ³jcÔ{òU S§ä=‚T}Z <¾ŠÊ5Ðù\ã<ñ€ÌûÄié eP%ÈÉÜ+ÑLX+UÝ[M6Þ˜Ò‰<솥®YE¢Í©‰ùYçý6~Œ÷ÝÄS&|Z•¥2ÅzRsIK6)Ï?º$‚ïç'˜²?×g¨$l Fíô2'•lÔ4׉ë‘^v£vÙrP£ \B¼Ž"#©Þ\¥ŒvÞèÝ?×Â³ÝÆˆ§ßìCöê—Ñ£†²1(ãs²2*†Xz[¦¯Œ†3ž—µ…ºvÚóWÐ!Ö¤¾kß±÷ ý¨”¼É³0œèŸœŠäé!8îé{²åË-${ñhñ¯ZöAº?w–>¨Aó_ gUÈFå7/ŸF­ésTåí‘ Cƛ֣¨ý‘ñeï8]žá&ð\Ÿk;ç +eJÎßÓ•)†ñ*þÙr˜ÅX›YŸÍõ¼ÇNöAPÅ„®gVÊ-Wau™# Y4LÚ¿Ä%gµx#e·ò*-™o¤¬Ý¨ž #xq¼eÖ°þ <ýÈ'âúƒAéaTÉÛ�„i\v€‚ÇR‚ôÊKð0È?Þ>»¾ax»ðMÕ;X­×_šú µ;¾‚3êò[¦Ç“?Q;Í uäÒ;xG„¯ {zòBD ÁTRc£¦çATFÅ”‰ûŸ¶vTî·BQó€>‚[�åÈPÊÙð¤õ飰–ÄTgf´?Á °­2Å1ÔN­ìß0nôI+£ å½XÄÂ)½Ñ¦úºð‹p“2&µRÕS²P£óv|¶¯gn=F­ßÿ ûëìøïÐïë1?/™Ñ䇷÷(²ß9û¤žó£,Ù4~þj(™o—£å`Fͬˌ·S^[â66 ¨YÆé•5À”ã8v4ÜŽr䪓bÆÇ峨«ù:"Æ�sÐ>‡ #Ÿ2*Ž…è~Tið´Ay•oì¬u¢(;J«Íhwªëú@ÙWFCf&»qdO\ºŒÙW%Pclv$4Ï#Ý8ÊdÚ¦ÿGtwN¢ƒõlådbmU&åXvauæçèÕ••JØ‹Ç÷î šï•*Ý_ɲ½ÜÛ"Þ _Hˆ‚óf$×xñ»9+…³ZÙwù}Ú'¢œ7µŽð{Ðþág° æ<fìò™ë[9pú,Fê’™U¡ÅËø_?„žE™7rÐõÌÑ~‡ß O§ Ù/ñ”QmY»a=FdÏw£ÓT,YÆÆ³([Q÷?Ö!%5-<‘’«Ì<tàró1ÔÔýTç>”û®<|ªç-™$t_Å‘¢È,R›ã`Ñ>ñË^ÒjØA눥#î Â׆==y!oá4³('…¯”u(:nèãB92”t6<e}z ÇnE*¶ˆ’¿´@ÍXZº&–ynú­V8ˆ”œ^H½O,P–ÞðtÛkM¨5D›ëüæìúu8Æô éHhŒ‡¶ß„S m06š#—xª41?Sf4‘–l?ÿH0Â÷ii…í|Cè¼hWnatA]F¢ ¶¿oZŸ‘·ì^" uzÃàÌÎÜUf·EßËë6 x~DsÏRÎí Ü«¾L)öÑ¥Á3 l ,£úsxòQÁžKé«´>W*PIÚWF«Œjð j2³uÖÞ¿ ã#°#AiŸ0GxQùkh³Á=Çhº³%•çtΨ{ñpÐ4ãÔ nI_¾Ñ6s^Œiæè7áDû€ Ÿ3™ñì%NÆÐwc˜íÅœM—•ë÷fj$b f²ÖüS#ëýcX†dl´ÅÐ÷ÌAš»ä[ü¡äy&d.ãõl˜zŸå¥@‹¯”µêIÅ'݆’–{ÁŒšÙ»0¿ýRtƒÕ`¼rõ`HçòÁÓéÅ—ýüÌ.XÑ3½„„bzÎÒâ`¿©“¨Z›¹8s¥à(:E/{I«’=jˆA¨Q˜`3ª[{TNŠ7ßÇfÓEöß"“Œ¸Ð4Xë¾$˜¢ñtáë2³á9¨FVj8v½m0•Ô uP¦™c©úR´ºl¦Éüz•¶G$ ¬üsÉ@Xz‡ÍûúlBÆÚÐ>ÐS&S&ëëô³fÐz  unü÷Ó?àâõá|Ü÷�ö»B7í~{#L ÿŠŸêwb«ézèó'4– J8¥•˜ŸI3šb”lze a&W¢K¤¡•…Ä P*€ï)Fýhßÿ!šGÝqÍ[/úÜH׃xjx‡O°VãV´ÀÔ‰—iÎrš;½–Ï­y<£[²)È­·GÞ4ÎÜFÃî& ŠÚÆ%)b}eTˆ!3ô:~U5ÆF`G‚Ò> À7:Š qâÔ�§3Â^<„Í8iƒ[±ö’m´Îøœ¤iørx‚^Ó6¼S÷+&…67^%ÀÏG±JŸØ™œÇ®è¿ „þgyh±Þd6ï›ó3.Ú£/ _4¸mGÛ¦‚LOrðfÂVXíüù9†:„—U‰Bѹ¯Gê¶ÀsŒX?™ uôxîè%4žÛ‹{Ž!‰@¼HmkŽ Í¼Ã?[/ {z"öbAQFÅ£èíhêzA´sîN|'Ü+…2e­;‡Â°çPÏ ¾Z3,]ƒµ…”·^ Eß4ÎÀݼK~â ¤hÕÓ†êêÓªH,_-¨/ÛŽŠ¯Î©þÍŠ‹Ž[EÊ{K:ªÌÁ(½Q5[›áæŠ÷ÎI쨻…¿˜Á=ÔøÎ›^æœÚ>ÄkÙ‡qáÒ)Tå¼ÔŒ8ü• iÁLýÎìA=¤å˜0ÝSƒÔw.b~¦Ìhâü|ö"n÷«K6ùy!P6Š>Ú@ , -ˆ+p¹R…†±Œ¢WJz ŽÛôËCÍæ›Ì€Zû :'ç0Ç Ûí«7-qÓ¿@÷æXïF²¤{thA¶F´ÊÎ+-]5 V4P“ˆiðÜŽødñ÷:Þw“ξJjî+£‚F•]ˆ7_…@ ãsƒ#°#AmŸð€`ÚÏÔ‡Œö.ÉÞl'F›˜ìú?Ž«J¼.YÐxN¼|Ÿ´'ip‹²™³Jnž¸àúLÌþþÚ ˜e¡ºG¾çãRÐ÷̼­Àu4’L§Œÿ´D?Qê6„z’Ãÿk*‹ PPZÃìF§\¹R`–Â]Á^† `òÌõ5òC%ò‰ ë Bhj†­„Ö¨!mºOi[Geþ¼#Â׆==y!ò÷ÃâzZˆèþ]†Šüõؘ÷.¶’ÉΡ½1YTÃwøCä§ÿC¢Y-¤h5F­wàñe|°ûBT-æ‹…ÔûÄ‚aGU…À:ì 6ùëýÕ›?Dó«0ç ¤äoÀÞÈšßœnú'sàn ½²õwáæ%FÝõxÿkÑF×LȶWakµ½.ÄË~µùo`ųÎ&£Sj=ŒÊºŸðà¿cÈ9¬ÜÒó.÷ýŽ[Ò%A±ÿgÌ-°\vâ)7X†ºÑj½ˆöKÝâÍ„ ó3q lL™“• 0Ó‰÷·Y_Öˆ&»h,ÝS;o0)à”hd:×IØÜÓìûéÀ‘’}hŽ9é*^~f”ÓHû`04²™:£;é±£‰šÀ”ýJLáeç5Š!ÇU4Vm a¸¯Œ ‹ÊŸE¡ƒfå52Áà…[¤ãKÿìHPÚ'Ì©ñ\Á>%P°&èxqç$}·Dиċ´'ep‹Y3g.#¨š†'.8½Ë;ÏU¨hîTéG¾~Aç÷Ÿ"gåjcÍä—€®g&NÉðáéC•^cK®Ÿ(uY;¡žœ÷ûR3‘_qÉ/>õ)Ù2YÜs#¸´'+²Œ" _GViµòóáŠBìÔÅãAZ#ÏÍ~W3 F¦é>é ºÁ;ü}ô°§'òaK‚G Û›”ìž¾Ø)Uv“èà·/4M 瘓²aErðæ™äO8ë?‚Ù%óÕ¸1é>‡}…Ì ’¸1YÔ;/™…§ Ü£€­Žu¡Õ­4˜³óÇ·(^ed qñ‡aG5 ¥ë>ª+i…Í:Ó ¹q¾9x»¾Ð›¨­5Ì™QœÆG£VTmŒËx†;»‘®ê"bXOÚPñÚ˜.´âtU.Ò˜Â,8\/ Þî'Ûdw¨›sOàÖ“<P’Æ•eŠ6ñ> 66z¯@e©�ï}ÔfAWDƒ¾i¸¯´ÁþoA+ÝpóÍ8jȦ‘„oƒï#уÒ�Uˆið ŒÎœ-!+u¾ï;+©:~Ã}e¢`èv•ÉYu3gƒŽNä#ª€ £ƒ#°#AiŸ›V¯ Éí Ø{XQ¾ƒ½§œ£-ñ"mÆÉÎÌXpk6j |¤­Ó6 _�Á„QJp™#‡¥t³Ç âg“óÏX”Ó)Iû‰Æ:7ù²v*=Éý¾ò†ã9œ tŽÚW#Ö„ÞÈUXÛ£ãB‚Ÿe &:[´Ýç¢P¦éþ’« ¼ÃiJ/ {z"þû¸º/”¢¤NñÔ°·$Ç„%.(›Fvÿ1IÏ�:«‹% >Ê9óÇè9‰'?´=-¤h•1¢v}£Hà!>zŸX`Ä…›KÑÍ öÝÕ—vès¢±œ9�.~=o\OÀ«Û@ç}9ª±… ”@MS�ái݃tžõ“—…5)›än]0cúÉpràÀ¸P¿R•ì^Êõ.3Ïávûl¯¿—›½ç`êÞ?#|›ç·n¤s^©Ù€”Mì3f4”Ÿ.åçxÊ´nªØú½ æ+}rF1ÈÞÁúS¢¾?`«ùTÜ1œjåô’Ñ�Ù4â>jËáw]@Õºhøu$Äë¢Þ'í;ÔU#¿  ÕæËpF¤/Œæy ;#Gÿ˜|¹r }"•¡Fy»Jìè†3=3OáºqGqôf.ÒÚ'3x`)Ã6%¸¢‚ÿ.Ìù¡à Û{xX_ð“´Ä‹²§ÂÇF‚[ñ b3ž$l¾�‚ÁÆ{ž…ÁùFAûaqF “a.€=&}ÏL8’ºŸ(iY;žœuÔc÷"º|gý. ;1�ß½Ûè'‚i«r9íj݇uùÿ¯îÉ໫Ïa9P6Ý'Ýà¾6ìéÉ ‘0” ÃÊ<Ôß g—|°– Ÿ˜ nJè‚¥x ªlÙ™q& F€S²OàŽ°4¡LÖêwãbÎS6Þ¾Ê{Ñõ´¢UO+öU™q^]v`ùí]NÉ>t à½h–>©×6d¥ê‹Ú3#åNÿc<ièúpúþ Í?|œU%AáÌ3(.ŸF­ésTåí‘4ü˜qg ù ’-¤Üàqã“7+o£µfW(9Ý? KÅIaÃ:ðÀŠ…‡ñÍWÌÁá©ïã‰ë2L9;£jˆõÀ(?Ç+P–SÑ+ek³¾èPºôª ›ê–'øÚÌ#gÍ*¶ŸD¦[ Z*ÕV:\ÆÞpŽ÷ëkdð>À°bX²w#œFÂÓ|Ûš~Ž,Ù”íwÃÏ,ýc´óF†þq¸ŒÚÛñô£ó›}È^­·ö~Þ¹OCFþ^T3š=\õÖg›$JìT ¹gßQã}e ½]%ut‚qÊ\d_�¡}2 ÷¥™Y¤’µÁé0«²Jñ™"w÷bëN«Ž‰‚Ô%^ZÍ8눣Á­xj88oR4 W"PCXJÎé@³;÷%Îié…€7®÷ ôB×3“N§äzªŸ(;¿>¢êR=9õ+Ž”|ŽKŽÁ ìrÀÖX…ì]‰Aƒ¯ÙéMõ߯=a’Ûv%H¯¼¤4¨ö÷‡å~ß0<ƒ]ø¦ê¬ÖQCØtß0¢3iïpZ× ÃžžÈ‡ÅBà…ÛxóÑÐ?(˜bʾ"”âÇÄð}}Ù5†oFµ1ç¶á˜é[‰¹ëóàŠ˜°)!‡ÿmçaz¯ã<ê¯I7&ùŨ¬»¨4µÃü­F”ð•2¬óö´¢UÃ%ñƒÔûÄBÌÒ'õªÕçð}¾QØ/·Á¶HA†ëKEa¸ù ¿©ÜÂ3j‚šT¦xfx©R:¿½äc/S‘Y{SÂ�âcEO¢²h'öµÜf²Î w_P™»exÐhz\eŒŸÝTuáü¾]ا{êSšwN¡pÓ~X£xüà7´5TËRR7¡Âü~n9+>‚VÃî½t%R©¶ÆÇ^êoÌ*2$FF“zváTÓmè MùÇà´5£®æ_èˆ(?c¤âu£Ïá‚[o‰ ¯ýÞXqYÃvÁŒÓŒÝýQƤ� ;]Ìè$ëCÂ`¸¯L´·«ÄŽŽÁ€`¼2ií“ØÙ"Vá1ô,ëDQ—x±©&ânÅ+P#ãZ6ð<‚ £”¥äœ>åÀô­e/òMgT—Œ¡Õ|E놜{¦¯l_0;ú²R(}ÏL9R‹F#×h×Y4ÝÑWm@Yý@ª'¹œvžCeÖêÙ%Tº-¿Û*QÕ9Áøh–ío"3För$xpÆ [ó1Ôð,Ȉ‡aÏ쾇˭ÿ»Õò!Š>€©å–DÖyLÃm; S³hsöøÈ/¾6ìéÉ ‘0æÜ±'sc„C®DÏVe¡ô3þó!Tl­Ð—òD~3„b8H6œGü›*„xí²þ`ÒÂd—ÛèëéÁm’É.ý1ì7%S•i{ZHѪæ93)L©÷‰Ê€eЇÍyêc5ö5[P›³6TJÄœ+0×űªíØ.ë’Mq£Iï§”18<Œ?£þ,ànƶB‹Ž[çy0£€gE5¡83ñÁ?±µ®Œd¸Q¦ÚŒ½ŒÏn¸/Óס‡$Z�Ü9Úmeæ¶<PÓ€Mzoá´`8PCÙ‡$~ÁB1µƒôv5±¯ÌEZû„Á7 G¿; >%^¤ñ ·â¨aòŒ´Ñ:!í)~ÖrXNÞ¯A…2éælkÙ÷™+ÑßR|]àRv,æ:f2þnûMÚïР ^)x½º;*ËL ÄÕäðÃûðwt_ú– ×™?y\¶ˆ_N±3[”yZÇl#˜ <Dç‘=¨l¾·Ì«˜P²òÿ$ 4Ïc^—Ì÷´Ò‹d &ˆXõ´k'j{‡þ` Ä© ‘ñ@ eSBî —Ö¡Y­ ,M0åç ÂlA{ÏÀ2éŸñšìœ¨è®þÒ èi¡‚­z¾CYþ‡8-ÌaCy;³‡x.¢|íz”_º/gìI‚„÷æ+ µ�‘5ÜHùoxÇF|orÊ„DÍSðدÀj[ì`ÆïàÆh(†…SÜ(Óû)Á ëè ¹`©@ʺz8eÌ?‰ûE˜«ËQ\umö<¾‹»¢™ÁEéT[‚±—q ÔÄÊh:ߥú7™¾Fñ ö#0]º…!…^á°FUvVðvO†oÇiûö•áb²ÛÕCÜ2)íĩċt"žáàV5Ëžu7Z'af?9ðó©©3È]´ái((¢dvˆô'[úž9ÜËJu\}‡«Š°©ø´„Ok ÊAœïVé;]ï‡ê*øîâlñ:^b2¾ésŒº'¤®  4Ï#¨1­zZIÄ© ‘rÓ²› Y$3âØ”0¼V!½äüÍn9ñÅc² ƒß‹qMÅ\úSc+bÝ=-Tà' vÎJù‚Fð°0˜Òü¨¡ìQCªL(Áx/Í @=Å.½Ÿü½¢{N ¨òÚ\FKöÝ>@·¥eYåât¦AÿyYQh–hh?g|ìe|5TMñAÀ{-•›º@¯ë` �e’ ŸÓMíÁ? ·ó¦pcôÄF3¤%^/cMÄɸ^€ÑàV5dÖ‰A˜ÙÏÿN³xboG›¨˜ÌÍàéP“ÃÆúø,]Ϭdž®Âê2+Fäãqû—Ø£3ó4 Úò¤Õ„PäEú4vü>)KærE«G ÓQ’å®”  4Ï#Ø,¥¨c¡чd &ˆÀ$†®5¡Öt2h°s%sý:c† åÍ(9˜Â#kJxæöèÑ¥j‚šÁDû!|¤¤6jm<&»ðȬäJ)æÒ›‚ȱážaðÏÆ“>ôô¿L>6¤Þ'4øfñÒW®D«LÂ0Þ'Šƒó qóAÐNq#Nï'{¯–ü­ïDz ÌÞõ¬="ð¹nòÿ$ìÿ-ø¦eÉnÙÃä¡p4ÝøØË¸eÔPg4-‚Þ§ÏÙÿÎÁ÷lRâ"‚ý½ÛÉèµýã¾—L¯”}Hù’ö•að?‚£½I)—äÑ;%š¡m´«xèDߘžÝ‰¦5Æ#s1Á@Zâ¥PP`¡4~3ürQº4þ˜­òÞtGÉêù5Šß­M¸¢‹¶Ô`ºœ°Ñ:)3ûåí¼PÖ|æ‡h¶2Y¬žÆÆÇsŸ‘Ðmú ë™£Gsø½ðtš-\îJ9…²úS¿¡vÇWpF]À&F1*ü]ò3«Äñæóªª ¾5mdžŠÁÚ~ƒ²þ©Qš"¨Q07؈wRøhîMÈXûÚº`Ê| )ëëà­•×lBô!êÚî¾ä›9¦T(›ú'ñôy´Ð÷ŽàÍü,•9(Ž™ò§É.JSÈ÷PÿÓ¯a%Õý *Ö¡þ*„†þMW "í ° ­ž:qY`Wá|ÊΛ÷é¼ëå›ÿYSŸ({Ô*“0HʤSܘ¬‰Cz¿ñ@ì) È*uÐWc­ 5?VªúàÔdfKÊŒ½Œ_šxe4…𸥫¶ þçVT­~Gðr„Ñ­w"ò;øãš¯¹žr0܇Dʾ2þû¸º/T.™µ}—[‘ö–d/n,¹ò²ÞÂf]µèŒ-¡i³xzoãn7ý†ËÒýº^d§‹Q–x‘j(KãCA¨h9±VKd>,‚Fë’eö”™ýü|äÀ{­¼ÏìúgÊOÇWQ¹:+·žÂïS><j=€c^䃾gŽÞ.ù(¶4Þ\¤¤d뚆 -ù%;e\T?bÎ}GŠ6Ffëšã`Ñ>X…íâ™×ª•’^Žó¸þÓ Ô(P5[ùÔ'fàÞ9‰u·ðSæCˆÉËöÚ À,s„D¹6M cbÞÞ£È~çì“K©xLvá=ŠZ¢&x=COõ¼#<½ƒ;vt7ÀR´ÊkÈ×}�‹rSéÅz®H2QôÉ^ìiênþbAÁ{ñ�­2 #a5²Fz4øíxÄ7œe§~Ìà©«Í|<´’½÷3† Þ?ÿp�*æZ®§€ÿ&Ì¦ÐØßŸêQ¸Õ„zæ3îzÑݸïTIô#‹‘ª.×§K«GØ­ñ¬ãö™:¢‰™TPFvãÒñÝØœ¹›«Ï£[÷Ô2/\gK‘®Üöª—Á1¹†A”²�º¾2JÞʼˆIYß�¬å{%'Än,±tMÌÐÒÛ¡¥{Zc�SŽ&|~ñ6zobr¢ì<4š!,d%‹Ò*a‰i †;'T¥ñl/s}¨ŒáGÔî€é‡îð¥]÷i”½s�­ƒ:û<űuÓJ™²PÂÌ~þ ràßá¡^i|Šî6¤¬x;¸ àyçgØE®c‚ÐÿÌA;¥ÅzO¸ÿ7ô3.Ú£+ô`ùŒ@1èª(«ŸkÁQt Û)n|o¾†‰(_6|IÄÎ`â2>üÈöR˽^>žÃQ÷)¹þákÞž¼Q!0Î{Pûã Ø{¿CõæÑ|ã*ÌÅyâÊ2*-ðtÜî¡Æ*ª‰›aÉÉ.Ìèv 1^ÜiØ‹Îþ¬±æM!Ûk‘Ÿ–*¨!¼–¡ÕYÇ—(h¼Ç>‹ ­‘¬ü6™ìÛäÁ§^jЀ„÷âRe]Ÿ(bHé‘ §Õ¤¯"k7nCÞÖ#A‡0H5†{ „ƒäšY'Ó=¨NÍï÷¡1žÛn`òöM•ì­1¥ÑÈöⳚç—Ët Ñ蜹‘ï°+;»v¿‹Œ´tdíD~V!jí:nGz eׂA¸…u ®qQÝMy;®¥ƒØÊ‰ȶÖ⤿†Ô¬ÿZrM<,(ÜÆ/¸Bÿ €;d!»É‰áû:3Q(KRMkœ†§ó$*ík¹MžQCø7¢¨J¼H5”¥ñÌúgƒ´¥ùŒ²y*¾,a|n=ôAæeOï8]ž™ 5ÂÌ~y;gÍ×àŠœ=Îd³‚A§<¼Žú‚hŠÏ¥¶¾g¦©Mw9Åh›²ú„ý\ñÝýQüÀó®S8yÇËþ“ùΖ°¾X´§Ë2´‚Lõ߯=Á”+¾6ìéÉ ‘0L1dÕ+i…ÍK4ÃÕiÕ¸q;ߨ’ß„É(dÚ¦„ ¸ÁG1æ“#àÃÓ‡‘Bò~û!5ˆ‘þû°ÕlaFÐüw)[ßI{,C«s®Sx¯î&¦fFÐZ¶+V Ûcftøœ0ï8òâÇØª ó>/”Ê$N Ê‚á0b¤‡@Úåž—nX…•¹'q›óœÇ‚"S/¦œ'ñ¿! ýš(Œʘ%ì)»„=[áû^ÜL^¹]½¸T[ˆ´9:003ÔŠ•õèx0‰§C. ñ�“…ãý}°3…,—î솵¦?ªáõÚ¾Fyî CÖh\ ³”täì݃üµ‘—·‡¨šL3¹ØX°;«?ÀÛ™5èÐÝwb’9†•hpFåÇp ^Ö(Áª&ôÜ3š¢a¹Òœû"ödnŒx6åÖ~UJ?ã?BÅÖ R Fk$¥g”26@àOôõ=¦_Ò@ôt1Â/Ò@MœJã´ïyÕßÿ¼Ès»`¿Ä/ò^ fï„~M:ØïrZ½øÝœ•2ý»3û¹Ü’s¶ïœy™©¯!½ žiU9zÜñ鿨/½égIw9õ"ª${¹NSÎQ¹Xr26'->;ú.àß¡¿†ÿ9žz™|e6Õ³g2=ç˜ßl;©3“3^ä™Í òýMdšn,û¼ülõ°§'òa1Á»òOÑêâ¶çrœ}Á>FÈb -£b7æ¸óÁ‚`JvêUŸF{÷%´Þ­í䊮)!é˜Ï…ÑÀjZ)ëPtÜ&™žo i´¾“0D·ÉR´ª>›”ØwÕ©‘q¤l;òË[à $RBê}–`äà½|:Î)M.MµfX­Ç�a·�Ã#€Ù”]ô)šn<êüÙ/u<7çç[°Ö}ˆ¢üí(­6£}!›O¤§�Ç,¼wΠ8}U„¼ÒïôŽÃVñ²Mçqéô>䤭FFÁ!|õÅv¤)û½†L©±Éì£{ùîÀœûü³ö ž?¥ÑÈ{�ä`ÅÊ<4ÜæAntÔÂ>Åèå½Sú&Ë,Ÿ ­'.À9ù�=§Î¢Go †NG]d°u°ÂÙ«~Â&ôTÙ!A–+ÅÊ\ŒX;QÛó8ôK²ôŒ?e L+£I½ò²¾¹ƒ‚ô›š„%^¤&[‡®¢¶¬š¶4ž!àíCcÄTH‚F­”ú|<£« 'Ú˜ä”�¿H%hôÍÏèUƒ¾g&©Mz9õªd{¹NS.”b”»³`Žù>Gö ²ù®ý3ò¸ý}¬Úð%~¾²«¥„ú[ ÔV!Ö™Éô2$<3þ zaXˆ|ØR<½{J©Ìü’Lû'-£bJ©Õ„‚ôT¬-?ß'CâBê–oÞ›`½åþJÖº“Žùœeèíͨní G¶n4¾Í¦‹ì¿EÓÏ3QšV•ñ§·àP¦$¨x/‚q!¸µ krÊP‘¿óÞÅÖC2NoœÃÎ�¸¬!ërÏû”a]• ypg^Q¥ä¢ž§´¾D3:þÔŒ|TT†éðÇ(ZŸkhlxÀÇŒ&>žXtRBÁì›ÀP#6ñÛõÛm¨Ü^×ÓA÷Ð]÷ ¾®™~´d³ï`Ÿ3ôzAi4ƒ>aÞæš/Ðó¨ÕÙuú&ËÄ ±&eÃÔ)šxMÙ„>FFÇœÀ¤2HË•¼·pÎúÿFÝ6{ÑïàÙi‚Pxªô̯(»K¦÷%el¯XM‹¨×ÌKQ‰×¬u{ÛÂe †Ü¨ÂùÁ?b—ƇWH!àÓaÕEžš-Ùg ¸,árƒ¬,”0s.>v^|¡ï™ Gj“^NÅ¡úA #½Ü§‰Ñ–»FƒñÒx?ì=q¼h32³òPm邽Ï-Hÿš6ÔÔ^Réµ°®Dn‰Lp˜Ÿ™—q†û·üºSnj¬_–�B„2ퟲŒjJËç(/ÿ–îøéô>TÊÜòÖºÓŽùä%íhêzÁ´róô7‘ÓÂâó>Æ#"nX‘†Üã[N÷UŒ&ÿdßåG:KRô@¦¡· $†]"ƒgþ€&Ûf¼4×5Á&=º— <££�¹õöÈÍ™ÛhØÝ$|#®ÀHæ–BÅÊ­ðB„ã{Ô˜ï†Îi£–OqL83Œ€ïœ¶Ó8È ¿ô’Yf<XP¼î�l¹<O=ÿ²ëûÄûeÓûgð°ï®Îôâ€áIYah9÷²Mèù^'•©@Z®¤Õƒ;„¡ Rs#ç±}õ&T(KÏ(e´M5$eaÑ ,³'eY(eæÜ«h·ê{fìé‘Ú”—SÄÕQ0ÔËpšXôC'‚`þì…Jdo*Âî¼L¤­Ù„¢Ò|dåƒ]( Î{e½”"}rÌW˜Us0Ó)¿Ü•â½ù{y® ù·YÈSÊžþ)•(Â׆%�…!Mû1±gzµWo ··7´®âÿn¸&QDÀ7W·µÅ™¡tMÉt`ÊZwÊ1ŸÌ%'kê•À)ˆ¯¢Â[ ñyã‚Q1RjÿÝó@MÏ�:«‹%Ê5 ÝÐ;‰— N[Ÿ,6þgn£~Óç°‹Zé†3·xÇ.%x¨jRM°Ï¸ÑZ’©Ôó²Ö %³á[ã9øÆ°>ÈŒN^–•†Ìâ#8ý<…û}PøÇhkºŽ¡™'p4Ÿ@£MîFH;P ^Û•^¨3ÃÓø¤¬0¸Ì¡jBÏ÷28©L Êr%É2Áu6÷4s<;˜°Í.Ž uéY ,¿ã´ÑËÍÉ&—1`<P§@º”\ƒäÊì)@[J™9ÇÏæUƒ¾gÖê÷ad¤6áå”oŽþ8fËör#œ&Æi0C'ÂÀç:ƒ‚×ßCõ'9ÈÜ/Ó&à•]øúÄ ŠÚvJæÖë‘—ç±~„ÍCB¶…_–�$B„2íßcAúÑK¦†/ð'zNT"g 7¶W#«ì 4wÜÅøÔ„Ô-íÍÐ,Ù˜ÏðÍjÔ™E,M½8‘¿Çö}øØ÷â-¨²=dª ìè¤dŸÀéfE<-ÙhCïÕ„‹$¢À”ýJLáâýÈF1上ƪ-¡¬B1ÏÜâ&V|°¯ ?ÔnêÐmÀëÂesLǪ·]"³ln�ÍÛ^g4º kËN£[ ãb1f1ÆœÞÊ~W9©lI5f%FÌ@zÕêlØK¥b« ă[ÿþÕŠ_³ï°áÅèçßéõ+}H1º2<©L ÂF뾇pOP9Ò”¥gœ£eÛ•Y³D3mŸëldªùe$ž¼iò9\~$Ú"þ0(ˆS †¼Ìž ´e¡”™sœÖ_5è{f>Aç<ŽKF‡Ä(w•lS¡ Ù^n„ÓÄâ5t" .»/â„õ&õàÔ©ž—¨¡ê™¥pWhäý<˜éúù!ÿ601‚a4,Â׆%�‰¡©­1fµ÷ÒQ”HÕðMcÜy ͵ÈÍ)Åg~@k ¾9É5„µî Pú§Ü„Ý1€q©Q²„M½8Q†VÃò¯Âù”ÑgøÎ‹°^¾)9º— ­Àýàh;ÛÐsxçQ×xM² 4eCïxc>OêjÚ 8Ó4ÍœL¶;[>BVjŠB¿FIÒdnñïì&.[¯ÃÑï‹aa•”‘»mh¨Ú‰¢ªh³À;C;Á(8j5ôk/¤‚X:¨­ƒ¢}"¦1ؘ‡Þ×lK&Ö–_ÄÀ/Ÿ#3å5¬¯ýM0H2‹'ÝݸMžÏ»Ñp’—‹‰M*Ó.“ì+£¹—ä7ªµJϤz‡hÙ:³˜ì9†=NÁ÷äƒõH/;ŽˆŒk¶tÙ#ÑðàJãu<’É [„o¦nB…ù2ú<S‚t?Ä«ô‰²Ìž<hOXJ˜9Çe½ØY»o‡øe¾*aO‡ú˜¿0,—E©úž9޲Р4³%Ô¦B5Q’ɯ›h¢¤¦Ìg´ë›—…$—êSj=ŒÊºŸà™á¾h®xJ¿ãœ‰ ){f2ýÒž,d©.¨”r½×‘UZ”³…Ø©£Ç’_öôä…H¤#µÉkøBàÇuX¾úEï¢T*˜®ÖÖH#lê¥ 1S¥huÒ†ŠuÀ¢<¿wês™‰¢Oö¢`O+<â‡C ÞKx6ôŽ?|>©ÿ »-¨+Ëޤ7tÓË dƒÍÓT˜sÛp,.6ôb†…÷>œÌ€44..™[Ô˜/ƒªFQÎ&I½q4ØÞAíý§ËóQ"ј’”,¤:ˆjv`«R2Ëev%êL‡ T2«Ëíñ çù+qåß:xŒ²¯ Ïh*­C³Úž°4Á”Ÿƒ ³í=bÎYï­ñÜ£´}ŠÌ7jÏŸOE:Ž ·£JËü˜p?”¢r< ©Y•0_î3xÙÂÞóÇvاŸÃÓ׎úâä<-iëßâÄ+PCYâH?~èaTYè•Ðò­Ì¥ ]朼7ÇÌ×ñZæ‡h¶2=Œ(}; Îèk³ ]Ï÷ŒYpk´ME¼&Jr1ýÕô.;x‡IO×êÜ?zm LZqº*i©™(8\/ ÞPh`EJ–¡A í™+ó4rÖö,›!.Â׆==y!éHmÒ>mð4êÎg¡Ÿô‚a­;©‘FÙÔ‹Rs0§Ž¨??cQÌ:¾DAã=öyüÆ¥+ÿMf'ûŽž¡§ú£82ú!ó>˜e.ðË”²!Ð4ôæ`ŽóÓG*Údë~;öµ`DèE=ð^æOÂ}HŠjpºý:ÚZíÐÓ¾S´š…&¹”tšH=‚È2·âÀ”×~Ï øýQ2Ø‹ßÍùX)ÜïƒÒ± émª RÄÎŒ9ªvÔáÇ^;z[k°¹â,nüôŠyÏ!¡Í˜Þ¦ì-³\L¢¯Ì¼as­BzÉy}CH{‡Ä²udœžaX‹¢¨ì“i?Š*¾—‘üØÚ‡iŸ}—£8{;ž¦ü?ÄÇç™üoøÅ&œï±ÁøßÓ ›0(xGݧq]«ÄqµD@6Éd²½(/R9ˆÊ-øûÈ÷ÝyŸ9¥A_%ðø**W§`åÖSø}ʇG­ð¡->Yɺž™´Mq�ðÒ%ÜŒ~�‘ê‡8M”¤¼„±KužÜ`†kŽûëï2»õn·Àöúëpñ)΃¨{ÿŒp'ø'0Ô?Ч¾9̺¬øR)¿eôÜr‚ÙV´=3cdžJ€gzaØÓù°˜ ©­qc•—µ…f™ÛG-æ\º›ìr¡¬u§4Ò0„Æÿ=ƒ¨©¥"V &‚Nüü9D1ç:…÷ênbjf­ek±bõǰ=žEÀç„yÇôL)‘ƒÌûˆ€GºëŽÂúƒQó jè¾QŠ^Œ_ŠŽ3‡_o§p·ÁTð&V®­Àùߟ†”›ìMï<ºÜ«@¨áÓW¡GP"€:X >Î÷ ޵þŽÿý‹>ÄvlR¶6 OÑ#½`ázC«±¤é<ÂiðAZüžo °¹_ßEÈØ»Qö–£,ó\†¹Ý’;óPgBÌ`¢ý>ŠéŒ1v$XAÐ;$à}€aåw-ÏÍ–Tº¬òçdWÙ Ä9ͽw�ço´¡¡ò=3Z“ï'r�øÄMÈî1£8ý5¤f•£®}@‡>`O¤,±SÀ:ã#i•€lM½@§‹^Û×(ÏÝ#Ñ_‘ŸU¶alÙ¸°D.R Ë-øgËË‚Bý4x¢mìyÞnxÞùvÅi꥾g¦l“ËïéqÆéÊ`Ð.N%Iï(0Æ×Ê”eåRqþ‚±ŽÖ:˜]¡±–Š“Â=žà@{Ã!T¼·[2Ó™m~-íí8]ZÕF4óš?ƒ^öôD>,HGjk(¨Àd7Žìi’Hó‹ÅüꥳÉ.3ŠHkÝ i*ÌÝÄGì]¶VÔ¢Ùæ€Û+gªA©ˆi;ñóïKê›Æ”ØwÕ©‘q¤l;òË[à’ùN©÷Y3x:Ø K]y¨ˆ'Ÿ ß iCoNOïb}õwè]PrlÝhDéfÚù‹ö=Pz‘X`*¯€ÉÒ…ÞŸN£¢Ræ¦7>PdkÊn7£\‘¿*=‚(@Ñ#(–Þ V//§²ÃÌh1:cFÊ"º ç÷í¾Ö~ñ‹ Ê ÞXòÎ “”Þàs5¡|ÿ¸T{yƽ‚û̃.«“´dùÉoè¼my<AWÃYÅ� xïÂR™ƒâ˜Î˜Ú^0Þ;Äo¯EQ(x»8 Ì�˜ÑÞsã^]ÈeAF#dO°×ç—=æ]LÆqs íƒzè—Ñųgx®<‚C%ÈÙû!Š2Ó‚ü’•—c:èΑã‡ðõ°êù’mN:ºn$­rfþ¨¿ñÝ9÷u¹Ì9²lC& /R)Ë-8-É9kðNEÎ/Cûþ‚™FÜÆ»Žú‚hZ:ø* ýÏl,£# Êgag>æZ6h§‰’”ƒw(øš—Xná5Á@MªÉŽÏ”¤ó²ËmÈZ“ŠÌÚ›L:ÊÃoÿùõ×àèü¦üõÈÊ/@~A)ª¾8­dR/ ®s‡F¢2¯/âRË…8´ÐNGzaØÓù°˜à£ÊÊ?E«‹O™WRðÊ(á±4_îWíÃÖàÔdfKÝòÑ5ÙåÌOXëîŸÄÓçÑÌäÇxßM é2Ò¢ÁzZͨ.~ùÒAJELÛ‰_šV•†Í·àRGÑç0íûKÜ€" ïÍC)!1ã ¡º"©™E¨>} Ým?à†tc·ù(»‘2ʆތ:_´5ýÙ[hnW¾ý ÿý(ÞÎÕ KíNÅR”8QÙRB ^=‚ø8àcu:'½HPÐ,e°ZNkNNÏÍ„Ÿ1€©áaüõ�w3¶I4&&½`!-½á%^ç`½Ý·Útz)³:IK–—tÆýxöMèü®Ä ¨ª5Æ¡ÔÐ2 ’ã/<{jpéïGã¶w±÷@2•K‰y½wN]“‡˜Mg5±ß?ê¢ Áþdó%°—Em'nÒe»‘–ØޤՄ_ŸÒ[<Û° 'te1©¡º©°ÐP^ì"•²Ü‚Ó€4˜þ¾sæ}F߯!½ ö݇dœÿŸ-¸&Ü×D =³({œ±ïËpÐŽÑS<&JR‚„¯yVT5ö5[P›³6tÖœW®À\{Ǫ¶c»ŒNðöÁb>‡öÎ[p¶Ä{Ê*}Åû©ÝÀ9MÚ&„"<b˜›¨2à{Žç‡£$(%ó°D'qbæ§Lm]sðöEö;Ç`Ÿ”q²©‚6!H+b.ìè:ñSÑjìYÊ¢Gê|i@ù><€ÑjÚŽô•(?ïÄdˆ£•¦G §WɆފ£µ~KŒÛCFëîQSuAð¿ö˜Q‘“ le•£¶ù'fàObÜPéSb‚®GPJ 7UùEÌ<(h–øÖØ÷NÛiUµ¦ó—ÐÜø“`yœ–úó}…o 4/XÆñÔëcŸ$Ò±½”N/mVg,û$¼J– ;ã¯B †: Ò kõaœþªzqæ‹Ã-x98Ogá�Ã=)Nû Ø^‹²Ýnà’é}¹l7Ê;‘´ô`ÏA•í¶$ž ×´ ïÔýŠI=›–[𿣦Oú×P#>ϼ({œ1š" Ú1Û2%©@Å×JVùXmÎpÀ'„ÀøÜГõ ¾§ólÎà˲l¬ÎØ‚‚Ò ìÎÊa6‚®ûOô—Ñ’¶ Ãè þÙza˜›D>ì…@c<·Ý~W²»?-ó“Öº¿0„ƒ6‡Ì¿,ÛÉšüf´ ÿuóFd'þ«°žéîá!E«¾»h.{;t[½R–_‡«²­ Bê}–W,vXL(çõú½6œ®øÄ@Š~+1úD¹®¢¥Ý©ü÷r}¢‚MO× "¢ pO]6˜?ÞŠ5’Ù ~>ͧ¹¹[QòE.õ¸0î›6Ø£&1AÓ#HÒ@ e@¶GФƒÕÓj~O‘?)k÷à´PƒÒhpã<:«³�E•Ç‚S›B¿%‚ÀÓû¸Ç›.ð¦ì ã¥7aP:½´Y¤%ˆñÄ Ô„ûÝðÿÖ΂ÔÝØ3ó—=²™/j0:³~ŠêK¿ÜÈÒf»if–{nÃÊlã1ѽGÒRƒ4Ûì¹Ìÿu½åWð‹µWËØyïm´ì+QÉûùÅË\Ò’¹â`¿ÒÛ¦ËËegR}6—›À&´#ŽHR¾¦T Æ¼^á—…—«v ªñ˜¿Ø‡Ò}ãíIu® Fû?Šðˆanzñ ¹ ³ðÏR‰hJæçˆwôŸí/3O_¯ýu•ÅÈ/(Cµùòâ(°ø§á6f¸cQŠôœÑì :Üh³îÛŒT §L†Vf\SŒÚæóª´9¾þ…Š Ûaú–ý·õÜ/¡W =ïƒrÝ–/Pœ1ßYÞH ÌÖóÁ1­µLŸ(žþkÞ‰MUçáðŒã½ ›˜å™0•LˆÛÐ"œ †^·×,'QSQ„-¥ßÉ üà°Ö¡²¨�¥5ì¹ßP¼pöRAi¶÷:ŠHšRj<€úÚö¡¨hÚìñNIc ’ Ÿ@AJ§—éT¬Nã}e¢`h²Lâjâ“Ãᆵê.‘8§~Œ44àÊ’yp•Éñå­Eô!Ìv‹u‹œ²Í#…~I/èFÒÒ‚8Û¼,1=•Í·ƒüÈsëd§ÌŠ€or™SÖ +/úû ö#Y“µýw ö·0w•òÏ,‹g¸ëô0 GîwÐM`£Ž8Š,bJ¾æg¦Å*>-ᬜpk!· â﨡l°ÇA4–ùÁGÿéæéÏ×§!#/ªÙ¹®zë³Måb ¼~ª)$ÏB𙀣ñ3˜ÌÇP–Á\ænT¿ö‚2jœhÜsL£ÄéZ÷ž¿Q% ï…ëÆ‰ŠÜ`vIj6Êj[Ðá|„©q#¥O êÅ3h:pÖTìG–ºN·Ä’eÀ 2ç —¸òœïÑ‘š‰üŠƒŠ‘^U”láq¶”S‡h{ÅqÊ‚I@,”Aå S: èÅxmôãr³x†¢öŠ˜ÿ-¨–š@Af4R:½<XÃGñ«³:m’So ÷•QÁðd™¿c æ9FÝ¥ì­ÅàÎÉûÈ©8¤¢³¨u°Y&»»GË9܆¬Ì˜eúZid–÷^:Š’}­¾ddvÑHZ5Œ–Ðf»ñ Ùaô+%¾ðàYZ¾düú-ÝP²Ý¦ðÄÑ„ý¦ádÙz¤¤¼÷«^`FÍ,Û>ÆšªNFõÑàôšRˆ>³qZà`ß¡wB¥×ØúƒÙ.WDµ¤–þ-‰6´ÓçAq9EÉ×ų̈&°½HÈ· 1:¨C„G {z$Î"e³±xA¼f>¾ÌT³åg¦†jÐFÿIo3çî¼±õ·&TE�3N3v7ö‹ªH›B2ÁËkEgþD¯2‘½›T¯¡ ø3c¬-í.ŒGGd'{ÐtÑÍžðåAê}bÁ?ÆÀfÔVä!§äÎ\º׸s†zÔP€²OWæ#°·™Q]ºU m°ŒaØÉø%ôú#ÕS½F»pªé6SÊ˃O‰Ø˜{·"²ØžÃÙp�ƒ¢)²±²dFUª Ù#( #ˆAgwO!{ÛwБø«3Ì\gQœÎ³£¢hCÆà <Ãï-õhêQ=ÛÔ²ýòo/?1~ vz¹ÌëCû™ú Ð×SÉûgÂ&¯Æ'Ë<‡£îSá"1ë8½$rìŒ[ †ƒÛt]°ð¦žüûlûM²4žŸ¹ö-²zñI(Ëj´²Ýf™™q {â™[S£ú3ŠFÃhÞVËQÚÕº° `ªÿ6î° ŒÞH+|I–íÆdãà4ÔTཛྷw¹&EµÍh¿~ ¥yÜÉýš^(·øSëåcÚ™¼MÉBä…,§!ið²›ëÝp-rÆÙûÝDß8M6¢Ïlœ¼p- 6ÙWñž\‰6;›Ñûxø„¨út:â</‹˜nÛß"<bØÓeHM6û¡‹ÇñüÄ”5¹ØËœØµ·!oë‰`m­;é<}^†°ÛÅð<PÓ€MºŒ ¨›BZ÷"ã­4¬H{—½×ïðÜ9šê/`ªA5KÐfÊ&óàxnÈpÃqÍ‚¯˜ÑR´¥Ò@ Pö‰ŠSE^MÿËAŸ‘¾âõCèÑqc1ë¨ÇîEÅs&3vIÜzQŽªÔŸ^pßF„ …Y?Œ$…¿)ŒMgâ)Åܸ[ô²ÓèˆÐl‰Ž¥gHÜÒ'J§—ÉCÏìS2aC%9HKß-7Á‹°É+ådZg|¹Ë#~š(›®ú0WaSñi‰QÓìÌ¿ÿ¶gKüÿ.ÏÜÒÁ[ZÙQ Ú>Eæµ½œÏÙM¨wŠQ¹­Ý€—ÎlDUçûº‡aÙþ&2M7„.;Œ;ç<ˆJ”í¶�.'ßG}g/:/~ŽüµYÈ/ÈGAé>|a¾¦¯ôÂóJ3Þdï÷OäšÚ1àq ¥æS|i:ùB3jÆÚÌÚö[`�-Ÿ_ïW¤¢Ïl˜”žwo¡¬ñZdÓq!# ÊêÒéˆ x²ˆù¶¯ñý×]ñ@óß�"<bØÓeHM6û!5^x¦É†UX™{·¹gN{‘©SΓxÏ|7ʨY”Ñ^óJ6OÿìG*`ºt CŠ0‡í4ª²³‚ŠX±šB^Ç·vÑRþýíDzÑ t{æ…-7œ/¡²LÔ±–¤U­l¯æ/QÁΦ¨öGñzIBðÞ’`ߥÓ§zš½ëY»ÊÈŒ^’ 5D#}¢´à—è÷ÁhsQÃÒ.œß· ûÎw©þMgÀtêW)ù—ƒÁórÀÖX…l¥$B”Ÿ)³b4sV­åš9¿ªàÍëºëŽ TwF‘¥3ÇÛq;n3jPC†þËS^¨`<¸Eéô/XVFd»ÍÁ7bEùŽñ±ÉT¥Ù„“ehqþ,Æz<Ä-P£Œ¤]…ÕÌ~YÈ¢azÎþ%ög031gKþÑ4&Æÿ­cßð÷¹^C¦Lù«F‰]^ÖFšeÊ4.KBë˜ms‡è<²•Íb™ÑÒ·šA©FÓl/Ç÷0·\B§ã&Z«> ÊlÕHæ€ï î÷ë“iÌW(H/A}÷ö͆àw£½R¼ÔÓ8M#uQ©%[yYX³ªD"»JDŸÙ8-LÂQ[‰g”)Ñ&î}D91¡ÁôâÓGªwdë~;ö1=)8õõlôO`¨O™¼ŸuYñe'm©Ê_Dxݧ'/DTài‚O=Q_Š.»D³JãEQê«Ã©sJ ¦:?Evh|™£ÿš]ýÕk]§,¸ó—¾½•îð•¼ÁjÈ@HY‡bÝŽ@ð–jýú†Wà9ܶ£¨.•˜Å“è[”‘ çXHѪæ (sxìGð¦¡f`ÆAÂ{ó0JOʆÚÀÔX+e ã}¢fûZqÖáÖx§Ð’êLOÙ°”ƒÅΡ2kõÂy¥ÈÞÚkÖÒYHóå¨ï2b-ÓÌ9L>u¡ÓbF-{®ZóEØ=Sï/¨²¬x/#ƒ7¾·Æt)ż!s€37FÕßïGQÅ÷ÂoÚË‚0H‚[dNï Xʰ­y8’FýwaÎÿ2ôaÎÀð°ÎL5êÒlnÌFL–¹&Y–E錳ó7Øã!¾•MÇá÷ÂÓiB¶hö0Ï VôL/ñņaiqèØ—íµ(ðÏÓ}RwA}“Ý8²§IW_HôãøÇg1¡7e{žQ‚ÓÙ~”ÿFÕ2­oMÈßP³õ2zŸèþN>œ7l¸ÐX‹²¬tdä¢ô£ÈÚPV‡ ÷Ÿúôë©'7aë[Ü‚5 QJÎe—‚r0eMò¢ƒ4¼eN‰¾©9fIÌÀv¤™™E‘2ì`)*„ýâI tÓãŠÌßùLÅHË×*¤g:J ›{^ORôlô±³n8„Š÷¶bKf:{–£hioÇéÒò¨Ñä 1,G„G s“ȇÅÄ’_Êœx³2ãŇf¤­«²á1ÿæË`RrQG´ƒj¨jÝ—+ã+Õ="£Mùô'3úÐ?. ”˜q>ؘ‡”U¦¾ýç7‡63>ÎIg†)Õ(^yð3¡ï–¾):»¾Ç tïÃ`”žü7a6}L;ý©…[Mø¡gÞèìEwã^¼S%ÓÈÃXŸ¨ ã§õ>á%^FÂDʆ¥!ð>0Λ°;0.Õ7ƒ2 ‰ª™s‘)ÅLÖþE›J%{‡0pÓi…¹–í)´ÙGåEg˜q|3øªO_BwÛ¸aàÖÅøM¡xJqN´«ç0Ùù Öjܰ˜:ÅfRŽ�V$PCæôNÃ}é£( È竲Jñÿùð^lÝiÕ%?hK³8ݶ7)Ù9¼B§ô4#Ê&»¼ÇÃ(& lFÙï&A‡âí’oñ‡"_ùíy.RR²aê•Ëø NΉ䧅•“5:@‹² Å›ƒWP“™-Q+Xo°ç™aðó×. ]X)ëPrþ^Tár˜Ïæÿ ¾‰+¨Ú\…Æ3¾¨*EA!,ñbm>þràçsCÑ¥?³ðœEÙŽSå~ú ÿ̲ˆ5Á¨&%ƒB´Õ‰["†qËåè»X_òæ×F”n6¡ÿ·@y5mÏÆ0üö/_ ŽÎï`Ê_¬ü䔢ê‹ÓJ¼@ˆ†åðï_/ s“ȇÅB¼¾ð±Õ? É6„¯ÍuM°1ƒÏ+œÃKvkÝuõgÎðùƒ(ÜwÝ ÿ¦·>Óø”˜€·æÂwQe¹Ïc7ìm ¨P²V#«â+´ÿlA£p÷uZPÐê<¾?a?ý=úâ£çtò}ŒÓÓ,ü!žÐ¼ îAujž?Gõèå·7¤ôLú?ÕïÄVÓô,¼ÓOh,+@Uk¿ ²äFPtzŠ*¡Í%ÁϤ“ï(§ÕQ–Q…nªV¿ëÈó…¿ xÁ‘=ߊ—‘Dd'ìAµàߊb‰ô~žµÙjÚŽô•(?ïÄdˆ–en@³³îCå¿«ä<[Re ±‚»R™saP·èœÞØÁ­ˆU¨Ï#-ÍößÇÕ}!úW‚[‘ö–@&¬ËËŒÀC'útÙ1JRÔü‰¾¾G:h.F3mYšU ü·Xoâ ŸÄ2ô3.Ú£Kïõ€1JKB+/k Ò– ÔLa¨õ0*ë~‚g†釕 ë€o ýŽ[pÊfÆàM¹a ÁúÞ6˜JjÈzžÉÿ÷MhŸˆ’5ªr%ft£ýÃÏ"/—…j p` }7†…sJðïMi'|ÍÀÓZŽ4f›Å%jÐ6•ÈN�Fa-?ˆ¨ä„‘¬/ºê‡x•SÂx fÎíÁúŠ3è} ’ÓNV¾uÿý–^öld¾©Å|íLž¶Ä{ʾªÖ*<ðr�Cz|å›s±l–#Â#†==‘‹ÚFšÄ 5M\ëNÚÕ?ÖÉj1gL©½? SñÆô)HÛZ‡Î‰SÖ E«|ÜrË~ä¬Ñ˜”’j‚]V®@ê}bžc—°gë!|ßë‚›ñ‹ÛÕ‹Kµ…Ì0È¿5¦èõÿgïÿ¢ºöq¼ÀüâþФ !1Ÿ49i yǦ9¼£©!£!FK¸@ì¢~ûé`{ýT°Ÿ:•yy„ž:o•#ZæL­ƒ:U h™S‡‹;*PFÄ*(zG/–Áy|ÖÚ3{föÀ^k?Gh{ÉJ,…™µ×^빞_ÏYBX5ïU!¼è©EÚºF ŠèrcdøQg�ÊÎwìÒ ]EcÝa4œ¿ÉŒ6öß¾.\ò<”Y”eTñ)ÅAÆ®Á’sHø,…ÞUØá¸3—)z ÷ÁOÐ<¢§×V<˜<sÃn1£ÂÒŠî>N™?Yd2mJpÃR;mÚÔ,~GmÝEU­®S•ØXv:e‘Zý—Ø‘œÍ©axné!„¥ÙÊþ_–Ó­14u‡,Jì­,¼Ø‘ŸýW¬×Õ’?—Gzäg#c½™›|ÏŠgAFAÙõécÔô$'U祰…ó9jžº`~},çÚpªj#ÒÓ²Px G ß ?§l· öÜn÷MÉç4ꬆ~ÇYxT:tì5¨Ùç]Aã'0ë\á÷ž•«wg4¾Zð}@ ¾.pxÕkØÜ‘XžEÝs&³¯¨³¾¸£†¨ú!I‰ðÐyÜ¢A¸ñ­ŽËiJÎÆÐsŒy™nrî4þ¾#+27 °ÜŒíÙy¨isç´äüîB l–Ã×F/ K�‘/K R"MBzÏøÅFZëNÌê鶴Çe•Ç·ÏuwJrd0ãkÄó¶Z”—V3cÑ‘'#ðÞ”éÃæu8¬¡¤ å568½ê6âúÁß›(ÂÊpÌ_œQБqÁƒqñÅ!ƒÌó$é~bŠÀÓ±m€…8T å‰ â¡³ ›jèóñ–Â#ð¹/ ®€)Åklò-ò :ðçš¿ôLç;¼¼…ÆuoÀ´r-6d®A…s�?Xr`2­CGT1Ó2àäÉœ•5{·-¿„3j”h“éuáŽ!±Ù LVüè´”J:ø_bj܇nû”fFS•D™–˜2•PÔ‹‹–P-œQÆšApFýG!Lý|—ÉÈ ZžMjiJ³C÷ì(Úß:ø9|6s$;'ˆ‰á»:ßkrŽš˜ÑìÑqNÙ>KÆQ3ôp"ðÏ¢"ÓæˆËÐ4ÚõÉ £F‰d+w3ÜßÃk_aÀ¹ÅõWá㜃°~pZœÀ4álQg=dªî2­!Ô…Çè³lÆ:ëxJûÁúÀÏ9*_i(N‚£Êb¥ QxNÊáºæLj_Qf}1=‚²ú!45‰û*g”4GÍ«à[‘µœf6gã¢Ùþ¼QD{ÕT5~ Û‘j”nÕÉ×ÄœZÍr:ñG„fDì\¶ôD¾,9ˆ_ ‘€¤m5M[ëÎNE«AÉG°*ôÈïèLÁ88u¶oo|ŒÁn;¬;6J‘†î7–Y�3SªN‹Õ¥¢L2{õå`#ÖmŠW†—hÎ^¤û)ŒÐÔ# s¾aÎ#5ˆy¢˜âr£q;2T¤gr²†×äv ì|vÔ”†/î©~Ôo©‡ç·BC§Q(ìÜâ%¿à‘Ž X0YÃ3ZÚàæ ©!t^pcLF>+ŠÞf”µÜGDyýºwTèa7>7oÄJ¾/Òr°£®Þx>¾„JŸ8aâQ+š‚9P`ǃ+¸]8ñù% .ꚟMjpý„€Wæ¥ÿvÆC+ÎõåÙ(ÿŒÿ7Sè7™ufD.-Ž5èÈ´ˆ»>=ë܇l¦#i¯ð 9?†ÆÛI?W‰d+†gFA <mLÆú"ŽÎà0ìæ/¤Lé á¬ÏÏAV‘^Žöl¶úHéÇeÔmåÛîY}ÚÝ} ;Öí]ä2*bDd¨òz^´Ä)Z©zʨD³ /–èš3©}E_¢MUý*޾BÊé(H8ç¿^emTåB ë‚Êß¿^¶ôD¾lAP¼BÉ/¨¯¶o„ùŸ?âžúEt7âoç¼B/…tÊZw…ÓbxŒ¦Í§ÎÅÓŽÓÜãŸuåþõù 8‰¼t›¼Bl¬wÇ:Ú¦а½I°TEr¯rÃþäœþ9Þ)0…ÁÖóŽêýÄ g©*ž(î(¸‰‹‡· ÃdBZöÿ@‹wRBA$î ðøß輟…ð î=ÿ4?œë|Ǯ˧°E)KéA[͘›;pͶ Y2YH9‚bÁÖŸ(CNRné€Ã=Á>ù†:/Ã=ÛÊ_�Á‡ðºšQÇž/¯ì N_ìeJâ^JqÔ0ìôL¥³šRvõ"&À¦j5ÍÎøøÐpg•ZþÎîköÓ¹ônŸMJPòÊ<í@Õª¬yË• ôF —2"ÎÝÙ2¶&4ÖסA˜L›´ë/]úËû°yâe7ì.¢:k=ê<óø;ÜÀ3jÂŽš46‡é±s(Ëàïu3²W¦1™ý“øs’Bƒ¿ˆés=÷¢Ñ§'XÂLÝaüŸjþ˜Y<AOͬÓUV§Ûãø¥”.¨Ê?TòC tw%寮ž÷ žºw±|‡¤d²<ôÍ™.;ËxºmÚêRŽJ¾•”C¶é)g#%˜.AÔ•ÿ®^¶ôD¾,)»GÐÓ½”µî³iƒm>Ùº²/bŒñV~<-ò/È(ÕË5ªd~Ñ|’Xz0Í”­\qN þ¾DîÒ¡õÞÙø#qÔPî'Rg)Y3û(²’¦Ôv˜Ÿ£æ+4ïËŲ5ÿ¥¯óÝŒuoñÖÒqû5½ ̓‚%)A*PfÈ) ur°÷ðÃóÇkÍ(ÙP)ÎQCZz¦…£&;„ƒYer]·Hï gt~ZóûÈÛ°+3JQ×rWO}ˆüx…yAŸÍ( g4±£IÊ+ÀmÏ>Ýãw Ú26Ê®OÏ1Ø\†tenØš[aomıê÷‘•¶ é¥vŒÌ+xÆh ª›í¨Ë[‰þsölu‡q´ªÅÒçƒ7®/t–¬%ƒVÙWmÞuü‡ÆàÜù>jÎþ.íòûà¾X‡‚ô×±Fø> ajð˜œ~?o²Vf¢¤®Ϋ'Qž/žMy7QònÊëy!<÷X±¶BÛQ¿…›ã©Q`õÍ™.;A‘ñ†²¾Ô ®~xàÀöÕfü³—ÛGŸÍÚe›qñ jP”|+I13ÛD ìޥ⅛Wål¤]T‘smØÒ“"*$ãgèAKLLÛš–aQ›O%ÊôflæJèFc‹®tàHÚ®Ö;œ25Èì¢qE™å<C£L¸bÈsU°ªª¢&Ÿ‡0BChÞjF}«Z`Dƈ£†r?‘:KgA=%\ÇL]Á#pñnà~@BPrÔ°óèk¬Âž¶pÖ_xÜǸ̼H9‚h3äÈ‚ `“× ¯h‡´ôLÅ÷¦NZÝxfð´ç(v6z…¤wÜ!Up ž.\°aUö{(äîªÃ°¹uÎSëlÊu혅aG›)¯ÌŸÔ2›ƒªëSJѦvޝ@NµcA¯Pà†>Ƙû®D'ó\ª¾,¢%UñY,"ˆ::Õ÷’DǼChcé;ª;Ýmºƒ‚ÉÀŸóÔwö¡óÂ!¬ÊFAa3b«qÄöŽ⻉w“¯‘ØýåïCkõ6T·vÍÙ+ÊèÅåºpp19j’í«˜¡7n4ëK âêBûV ã|+àŽ î Ö!~Ç‘:ÔIõaJЕØñçР֞ȗ%e÷RbbʺGZÄiF”dÙ6Ÿ¡Ø‹¶Å‘Q1E×wÃ"41‚á¤ï‚]’©ªANP‚ä/u¹½Ê.»á²z{Jœ½(÷©³”´Ž™º$â%¦&D!‘q׉=%- DQ5@ÉQÃ#Ug.`à–:‚#›ÕFÉD›!GêÔÌêTat´ãÆozÞ+eé%´ZbÐõ)²ÞªÞÿ¤w&á±7¢ÅÙ÷ªÞŸÑ¹Vÿü¬âÖ29£ pÔÐòʤ/ý.ÕEô«†³RQÆvÔÐpnEÁô¥À|~?y1üX'ÛÜþNh5 K÷Oò­Ã9BSx<ìU>Ësë!¦¤Z2¿DÀs¶–‹èôü„¶ªÂ²HU^šzŒ»·†u”–ÐÞM\ÖRñnÊëy¿a¤¹X;È¥ŒL‰àµ>ðÏ_”p¬/Êê‡uG4ηÏ„¹ƒn»;”ý*sÇ;ÔIõa† Uæ5]‰¾3†aKOäË’‚´{€¤|)ä lóÉ•©‹;³‘U¢êú£<ç›È.¯Qþû€¹[“:§RUƒW‚îÂË„œr©‹¿Hò{UÝÎóêÙ…à]5 òÏ£ÊýDê,eç™¬Ž™í#²’ˆ9î¾N±c92JŽÁ%’ö|ŠÉgñeîã¨I©’mUIÅD›!Gê\0‚ÃG&jztì9ÊÒ3RÌëØñ:²d²(ewÄŒÝD¯ë,ÿ¾Ù+2‘WXŽ·¯Ãšš³ðøÂ-I†3š~¼2J'"ªng†[”2›ƒšsËRï¨ ó”˜JÚ Êô4öâ›Me)óÔ¼½.œk¬cFf2óŠPþñVd¯©A›Ç漊üîü ½›fAÀ»Éeª,xßûÅõ¸ÃðvPjCßœ)áItÙöö”X²Ý¹^w¶}…áæikPRs Îî‹hëÕé�™±CR&ͼæÏEÓUß ð¥'òeúÁ.£Ý#HØ¢é^J jÝp/!A›O`Uk㸠GQ]ÏÂi ²Vª>[¿ï¾égb^ r{5�ß™òH— ôðåe"-ý}9^BŸ½„ýä‚÷~@Xy¢u–RÖ1s0ÙBRÁ#ïauÍ7ªH ½(_o“ÿ[ $24éE;/§k÷b’“Ïu£Íqž‡Ü!ÈÎAßaä¬;ª£†É-ºV• „Š5e†©Cpì[Ôٮέ—»Ý­ûPTýºg¦7{‹°ôŒAöÜlxÇäëÚÉî ¢Î~¶ï&Ú?Áú*Zl‡QU^¬ïZÒH¯ É––£†ƒJf3snEê5K ¤¥ÌjD£í¿ajâªÖW¡±Å†#Uå(,ÒY¢By7’¡ò¹Hƒ=Ó-wÜÎp£h<í„ÛH6”è›3e <Y_)}K¶7|mf¤aUE+~~‘÷R_Ø3¥‚Nbú0iæµV‰$DεaKÏIHÙ¢é^J H”J„0u{�·žÓ ºdfX8ö üØ—±Ü0_[P°Æ ›£=ƒu‹2{UáX¶ ;Î0£9áÑßk8¸³¾W^#9곚šÄýYÃ’;pîùÍ#’b–ÊYª™¢„Þ„à^ýóMß3ƒ2òI'bh¨ë#—IˆwýHçÙlf”äò‹OôÜFªHëhéÍ=ø}½¸ø¯áœë:†nž‡íҘؼ:Ÿbè×8ChÍ›wÈ•¡„ð»]‘,<+lçÿ±ÅÎaHl¡id]ŸT=Dï°¢ÜÉstpãž°»Ø’EyË”–Ѧíh{H°SRÂ«Ä )gi9·ŒãOç¨!-eVCUþ¡’â`rƒ {›’ •ßkÒ`÷wçþ H‹ÞÙÑaZ‹ê+wS&õÍ™2ÎÞeÖ5RqOsܸí‡PQqöî^\;UJ ŽåPó€–·–ƒ¦tVä\¶ôD¾ì•€P@†‘‚zæ%ç¨á |NþYq¸ðmfà­@¶¹^©Ï &IÕW f,–µÞf߸0øï‹"]|CñÊ/çú˜&ê( ™çI†Y"0õÚF†)£ Ç\wô_,šÎÒ�nyd”§¥Jè­Å÷7F»p²i�zz¹ÝGPÈ»Ûp¼Ú50åÚà›æûŸ´Š^&„‘*RÅ:ùy6mjƈì}Náä÷F‰ªô“ …;Ä$“žW^Qs�ªJ[zJ*:bçé»F+, ß* l(àÃÕKýx(¥�¿¯½_ùسsN<Š®O´ ï.¶¤Aë¨YZ`2ƒ0XC˹e܉ô§sÔpç:Y)3%ˆ‚ –Ò.×M†Ê_œw/V¼fBúF Ú˜þõ˜ßœh¨ Å•)ãÂÒ7gâ@x0€q­;-2Ä2¯#`ïßpõõ=¤ítšz_·u¥Y‘€œ¬m¢ëúD R*ºÒY‘smØÒ“" ½ô©p„’ò¥Ä€¢Ö”ÏIûYcg›àœˆ»L¢©ñÊ¿Çàüè3¸t8þþ…Á9VlŒéb  ¥º™oŠ¢,$H=OÌølxwuM„:::ÑX¾g/û÷-„|Œ9P’À˜¿™Áør¤Å+ru¶C]ª„ÞÉ1ãÍýºöHèž[‹àËãfvvÞF¥ë.ûÚaÉÛGò­‘*éV•”Š5[³„Ò›^\´|€ê¶[â&Mà8lWñPô³´ölÉG°ž¿)>/%j¿+v802ë8bëèþ;v s½À`c>L¦•ÈÞ…Upç‡Cl¼ŽÕuÿÎ" gjìSõйgSÖõÉ0ˆ;¸hBÅ˶è à!YªÐ!g‚5<­ßÛþ%ÿ÷u(n¹…ßÆÎ ‹}ÆF‰®gÊÜ :‘~oŽãDÓZ¥Ì²D÷”0þ.c@H†Ê÷¸"Üeåh{?ó^ôÂöÙ úçL žÆ={–Ee‚æÈ¼&ª“Þ“Q§ßJèWô|^‰¼•ËÙÚ¬@öŽ#hñç¥Oìã(»>‘{ 3¯ Kgù<ô°¥'òeó¬ì‚’-z‰Õ3§ ”ÏIºf!Ÿ<Á³øÓ4›ÚÊH;*WïÔ•¦-·WÙwÜhBÅŽ¿Ï’Ã*ކŒ\ìj»£O9L¨Îž^¯zÞŽ®1õI– jd'„Çpù_°×׃eÕhÖÕ6q©z³ 7ÁéÐ¥Ñ S¯ƒëÆ:¿@eÉVT· ° =�?ÿ{Â?ÊV•”A!<ƯqËò7cs‘÷DoÍdNyS1»7tå„Ì+Ãc4éÉñåÁ�{¿äXÜú•}ÜQ³›x¶»ÇnÔWÂêaï0t…$éãŒ"Ô_VíÏN4›7 °¾]ŵ¤oÏÒv}¢u—xðÒ×.XkÏÈ`¡å•ùã‚í+Â`rnÖ£þú‚!?ÚÊ2–½ »KÞÃ.×AÅïycN¤ÏçøP1–“dhþ,P:sŽ3îØ¿’NlŒó%+e^±ô/"AB2TþÝrˆ8/Þ¨EÏ ÕÊòÌýWpʼ ;œ¿F~H }s& êr»cíû¨¿öãÜÝÖý%Ì«KP…#?ͼ&pÔPÞ“´|+/0îýÍuflÌ+Ç‘ÓߢÇ÷S/e8j¨»>Q{# È¼&,9׆-=y!2Ò² B¹Ôê™czŠ¡ïšPÇŒßó>v0¸¡}õj„|T”ÏùJ×ì1ú,›±Îú#žêØ|?É‚§ÞŽi ËQÅaôè"wM Œ<O(Ûü»O¨‰TùU)ë˜9x-w±Óƒ¬Ž™²Ue2ÅZ=ôFª˜’⨎iMÌ#B» Þ†ézxE_g°}£¬º ƒ¢{ƒ4=9¬€¾[ö5~Q®Äl„É”#¦XDzÚ½[¬¸ÜÇž¯­ëÍgÐ{í8J³D»)pFU\†¬Ö"m]£x¦ i×'Þ…âX+KQP¸5¶vxcR½HU—Çì¶Ãº#'Ìù`¨Ôè\®D Ú`bx6ÚÁӞϰʴ6“\Šž"êDe{žÌ‰4w~âÇ2½÷‰bT&þ}ÌXVf¨Ü…ÂQ㨭WdÙ¬Ìv@ÅÆ’ͨîsÊw¹ÄÈPù{“Æ”…›PÓù`vM*ö™¦¬Æ*æ®9Suy•BI ;בÿV`´Û,Eõá=IÏ·wbx®Â~üS˜KÞC¹0G q×'Ê`/)o-]é¬È¹6lé"–]Ì 1IùR¨ñr°ëL̨ÈÎEæª]pÞé‚%ëu˜V³C!\ŽCùœKwͤöêÔM4ïx7‘ŒM&¤XqÅ÷HB10©çI†è{šwèlOœì³d2ˆë˜é¸+‚´NRGAçŠT«JJŽ ¶fL6Äv—ÛŒì¬2¹j„Àôe<Ï1d/gëþl?puµŸÀÚ!CÞ.kIx—¯½…¢æ[‚}!Lݰ¡lWº}#Æ·¨+x &G GªëS4ºšŽÌ‚QÃÎÓª÷±:Ç"gLupᆠçmŸ  ƒ§ˆ§#«¤§œWq¾Í q·[KÍQ£%gCx~k�·…nIø>žÁs›Z Ö 4ûÖ­°|Ù�3»VT^ƃÇ>\¶b³’µ&îDšÄäƒ8GÁ€na'¿O£î²*úßw§* PÖØ¯Ïaü 6K¤ áµzm²àÛž¨ŒîCwã‡XW%áÄVÁ8Ñ4[³xÒש°m|S*C–î>'v‚Ë/#M §åsu†ï‹àÜ®ÈuuBלIƒºÜhø»Î|î6;6“w›M3模Õ=IÊ·¢ Î×ë}ù/½`燲ëÓÔ}ø'ˆ¬*îô!å­å¥oÑäÂtÀƒfk\6 È¹6lé" (Ë.ÈAóR’C®Ö]qÔlâ‘!®|-ÖëøÍu¨q—dÚ9ås¦zÍ‚˜šÿ4™½ªDV–¢®¹UuÈùøÌkŠaùšýÛÑ ÿ"t"9{QP¶'NúY²J"U3%w…–Ó¡%•GÃn‘ßÒ ZGe«JJŽ -ŽG¶b§ G„FÔE–�˜¶Œ'.¥Û™0“ï¾&Tì9Ÿ:Cj\¦m>Ç Œ¹>Cάƒg­Ê¶Î'„’º^.I‰üˆ?û´×†íÒŠ6S wpáÚyX ߯²Uf´þ<™_þûâ{v)ä•™ BHïT •¹˜¼Ìµ¨êœ`ïgöâ·‘eéea!hÉF6ò²"M/0b߆Y‡Ð÷Êõ;¶'Æ:ÑPY†’ê¯á L#àPdd¿? |æwˆ9‘;²ð³­�Ët;þgŒ¼xMî›=¨IË—(‘H1‚£è<qÎA™r‹TsQE!èÔÛ{¼›¤zž ¡SPWDQBßœ‰ƒºÁ»pÕª;\h¯N ²livQñ­€²¬ƒíoª®O¤üƒ ¡ExkéÀ¿[/ K�‘/K ʲ MÈ HíLI|f Ö=4ν;ؾoP³þ#4÷^­4_°Xªol&¨æÅÆ]'ö”´`DP�HíUž:ºó¨F‰Ó=´}ø¹xJ!HÎ^”í‰I[S’SSrW$‰K‚ÖQÀä]pŠÈ¹EɤÅÃ0ŠA×§Èz«N"=6±Ž9?{-Šl:#ÐjP–ñ(‘B*2aö·þŸà²ÛPÇÖ¿Îvn)§Û“>\9V† “ iÙÿ-ÞIÉÏ"O1ß¹£¦¹Â%)IΦlÎëà¶ÃRa†ÅÞ…¾k§`®<+~o§¼Õj·õ0ñ2nAhœóÈ8êÁËÐ}tÜ‰Êæ›:œSìü$dFÆQü/™Lï´¢¬ò+øä¼gK©vpÞ²&|î¼#ì =¼ˆ›öãlŸ~&gý¾>\¬+Búky‹LôM‰TsQï&©ž7 ~Ç}‹[4sBôÏ™2¨ËzWpì¿¿cÝf‰A™--ã‰á[ù?’I ”eíÄ Ìʧä­%½0,D¾,)ôxñ¡³ì‚Œ˜8éF6H|FPë­3— éEÍžÁ=§aÌé‰s[ŽŒ’c³¿zÀÿN¡©G˜Hà=z‘sÑ¿ˆ÷€ìóh‚0;ô³ˆÉ©i¹+ÂF/I;BR¾Jç–V¤]–#hî¹bÇëÈ’éZ Q{zÚƒ;›ä À`|z² Þû™+ñ)ÝÒdÂì™bº)ì GísË¥ÊÅb?Ë`gR<û –‹×1¤ÜÙƒð¸N¡*';œÑ!¶ÏH[:3„¦0î놽n+2£÷Ñ’)[bÊ ››µ"Rê%Ã!r ÇvŸÁpŒÞ$¬ bäØ~œV"ĸZ i•Ë»>9Ø~¸ï$ou?ˆ®¶³h÷Ìqxèµ£€ð>áÎݧQª”ëEö«é”ê-£ú] E\T1ËÞž•³³wÜÜåÝä#‹p‡Ò2ÕÝ<[.¦¬=8Gší†‘9ËRçIÉêÊli®[“•ñP–µƒ’’·–"gÄði"9„e”’od:â3v SÖºóLŠOÑæãTTÇd`JâPQ¼QG¬ÞÃêšHÝutô6¢|½Nþo!Â÷€0®ƒ=‘vq{*Ͳ¨Q©çIÊöÄä­Ž ɩɸ+T²†Êè¥r:·(9‚˜’’Ð)‹ öùRu­LÌÁK¨ÍÊ‘*ÿ¤sð‡•F2áIߊày6»¯Bppç×Z7>ÂÎ ³ é`¤•¹s©ëÒ†%W†µ‰Yg‡î.ì]öØ`ÎË€é5žTºækðŽ?Ÿ¡Ò'(ò†}œ‹Ï-«5§.¢ûü·è•qÈjkÒ°I8 ,ùú›65 îY:°Ðv}¢u¤Â‰ÊƒLÃ<òîîÇ­ñ)éÏI9‚/0%S"AxŸ³‹“,{›’w“?—"w‡i%²óUº˜2¸£æ/X™½™ý» {ˆ;˜ÊÏY¤:ä«H³¥Lj)ã¡,k'iVþ|å­åà™[]°Û¬P²ÕÏÿc]¤øûÒ Ã§IäË’‚ð¥Ð󂸗'M|F_ëš¼‹Û qVtÈ”ÏI îí<ßô=ÆÔ¯L2…]f¯*BvYÌ_œQy°#ã‚ã‹(ÍHÎ^šÌè’Ðü,¶Ç¤Ê)똣%l.jýDoô’9 È;¯Qq±gLàa0€$J‹L7 Z?GxÍZ?á1çúÜñé·zßM#ˆÀØ5XrD£öÄfAIŒËžÍïe÷´Ã’)Ãd\˜¬÷ÂÕ\óÆM(;Ò„‹=>Œ3YfŒ£&¼2ünl³#cY&*Z½xù€ÐÄ(F…=ŸÉ¢«L—Íê`ëŸàíBkõ6T·Ý’p¼E@á¨áŸAÖõ‰ÌQ@|ŸPv%%šfMaò¾úžÃ]ç~”4ß_q÷¹Ôþ¢ÍÞ¦äÝäsà ¹vceU'݇‘NAó@~Î 2N;r'ŠN”ÙÒ¤e<”eí*Pd>Rfå“".sË�ÿ È1lé:QP¾”l_mÆ?ûxW‹èE0Œn[Î)Ù'ùn¤‰Ï" ªu§7,â`è9yÝ)E›U-N‹¸1Ú…“MÐSµÈ×Fs¤Í‘,!È<ϼ #<ãºUvçOº€ÞsG±×Öß9ì+ÙÏ*-¸ ‘’OWAkôÒžgJç–ñ”â™þ6œñøU{!nÈ–Dh¤ÇºÝ7¥¢ô [|o¼[–_Â5Ê\M¯ë$vUƒ4”fAá¨ÑÎÜzéïÄ7 {ΔtpáN$¾³Zs 6”càyç Ï+ÃÁ#½nØ-fTXZÑÝçÂ)ó'ŸE]eFüð0~û£¿›õ¶šÖE«\Ò®OQP8 hïÚ® |.DDÓ³|‰÷Ïr+9æ“”\T´ÙÛšÙž1C¿Â×FÜawµ¾„wþOs±Ö¹È5dN;J‡gêNA¢®O¤e<ZçZ¶¬] ‡:%ÿ &Ø;– òŠœkÖž!!iÙÅB©a|èç»!Q­»¶aÑÛÛ€Җ梈vmVç¼ÏóŽ7÷£G‡òÁW¡'¸qòNÿ/ì§0ØzþÃQCHxFëtˆ“ñŸ%ߤc?é.‰ 5zéD$})ÅJç4­µVez ¸™pœqG”:?ü1…|Hv Œ€ÎÉ@yçV,Ø^ãÜ-mpó¿ŸBç¶Rò=¢„Rtf˜E#ݫı¸îz_[бÆü8Ø”jû­‘.É‚^8[®„;q  æ@Á+ÃñSã>tÛ 43*se>‹2ºÊäl™ð§ØÍK´tw0JØþ'ëú”doH9žiïÚ® {#2„‰¦gØ}òîzÔ´õ¨î97z?ÀzËöo%ð}FÇEE™½Mi‡ðß•†r¯EeIa¬}¥8Úr7£†ÔiÇAELL_ýðj ZÆÃƒ#¿àQ@iŽbþÁ”e«sHòê:#¶ôD¾,)øK£‰æS¶&SÞ)kÝ™�þ¹¥M1™C7PÇÞGÁÀ"¦†‘¶Yeq²êÖ.ÕÏô±2{5L¦q‘ðñ⨡$<£u:Pò'±ç"+‰à 4zI„ H)ºaQóq­~+6YΡgv_\CãŽBTé-‰P”�³¨ËÊÄë˜);’ס5†»>Q–ÔH榌 ´¹ÛdˆA¹,¤ PòÊ„vãsóF¬äŸ´ì¨kA‡÷žË•>Ñ’†Ç·ç.DIåÑpNä·~ÿH¾7t;žc@yŸPv}†Qÿ#¢÷Æ`ö×XpD•qý¿®_‘ÈœÓq6u^h³·)íþr˜ÆX[ÒyðMá¢QŸm>*Ñœ¢`ºæLê´KAçÚßI§?yP”" È|$ä¤ ‡×Œ‚¿^¶ôD¾,)(Û—½ ")â3v Öº§¼ôI¤mViS¨ùÚ#4„æ­fÔ·ª"6Ññâ¨!%<#u:°sCÆŸÄ>‹¬$b)½” H)žåßP×RG‹žZ¤­kÔ×Î6øl–Hzúµzm²àÛž¨#—)Ãb]•Dg�Â(u½ü¬¬7Üõ)¹a#gXR³¶ï0w¯Ýu(Q֑݉v|ô±K'I+1([3Â`)¯Lð!¼®fÔ1;¯ì N_ìe†Í^JqÔ$! —Òu’”¤°µ”é ³tÁö†ãpØÝ}—qª¢�eÂ$Ø”e<\ £ì Jig\“^’ËÆ˜¡×!Kh‡ðï•C8Óqù'‰¾rƒÐ7g®o9ÑÔu/æ“+w¥Ì¼Ž`Iwú#@Ê ˜ ‰>&Ã?˜ª²v£üƒüyô°¥'òeÉ@Þ¾¬„„ˆœøŒÃx­{jJ%(xe¨Û¬Ò¥PËíUv™ `â_tz@qöfAÚšï&Fy¢’B¤$"¹b·øF/5¨RŠ™’î¬Â¦ú|<p>÷Ô¼…×ÖØtfÎ ‘ksF¼ /zP“–ÆAÁŒIÒLLÊzùwI×'.O© Kjü†'“‰YB¡ñèbçœ;ícu©žòª¹Haâù%Mß ¯L!~x¾³ãx­%*å>‹Tסr”%ÃÒpú$’£ð³­�Ë„õ~6 [Êkv@@jí“ÁÁH3®)/lý ²”v_k90Ùå±bm…¶£&4~ 7ÇSs†ôÍYË;F»Î é†=6ó:5þd»#²ó1Ô†½•õè{ÎlG†x0w$Ýê—ïš™*f òÒg«ÓØÊ"çÚ°¥'/Dæ@Û¾Œï†¼†Rly{}â5°¤›2ÊÁ¦FÚf•.…šÏE;ÐÒ5‘ø]O{ÐtÁ/<JH=Ï| "<£Ì[²`{sɽTŽWâ”b&·n4ng ëœ,5el—P¦ØG=¼ˆ›öãlŸ~6/¿¯ëŠþZž¸ƒŸ<“ʹEÙõ‰=™aÉšApfþ·FÖå+ÐËž·�V·ž JbP~ΩùV¨xe´ÀŒS¯^Q€Tסt”quú<C¿ã,<ê¿K$bðcMøÜyGРãºUCànÜz„gI×g÷ûoêäòÒèÖw–²ZñŽ`¤× A$ðBì%´Cø»—“þ> g½¸\÷.j×§…Ë]yØ›5Ýì\Ä™×)éô'Kº?—ù¯È±´ââ©j䥯@fá~?RÌt¾F¯#«VF·¦ (#ô¾K§iºÖQ–µÏÞmÆme¾¿õ°¥'òeIAͧl3LZCI\«¹ù$‰4I£ÑêØ6«3RéŒátàáG>t47(JrÍ.!%oR{5I ¦\|ÂiÄtàs á~"Í[ 5z5åV�·<<2( JÇ+eJqTÞÅÐÀ÷¸ø/;ìçØå{ý¬d¹SDoœF©Ò™!2/Y§0e&fè¼íØíWàœA(0ˆ®¶³h÷<PÉWý ëú¤YÃ’aì2š{æë2 ¿Ý±(<^tÄ \~Ñ Hye(PR]‡ÖQfÜé1þ^= ”H€í3Jþ4-GAÌØŒìŒ"™‡”Á(3®)ÁÖŸÒ!;vßÇiÊÝç|Êá7Œ4k;_•‘¹Èí¹5€Ý_¡ºhZ»U™M"Ý¶Ô É¼¦ìô'é¨QxùÂÁ§ÐP#r¹Sà<*‹ëÑ¡d&ßF·õœÒ­5JÌ~“˼£i׺yl¸¹¡³¬ÐVæß«†-=‘/›TÑ|²² ž:IUCÉ>ÂØd›O†H“4ÊAÛ½#–Ÿa' V­E~~1öwÇ+ ƒ¯0¸WnE³êYì͇™)%u—•–x‹©çIÂýDš!— RÜ Ü€»ƒï­°4|«d†>\½Ô‡$“£WK±ÞÀ.©OÐÉó—#­(^‘«°ŒÔñJL朂r±ÐÔ# {bs ;…¥>†4ó6ׇ×?äG[YÒ²·awÉ{Øåz 1¿a×'B0™Q¸2ùê5‹lÿ®\ ÂuÊ H2¾IPòÊP* ¤º—³TŽ2 §3lõ‘2ñ˨/ÚË·ÝsŸÕ} ;ÖíÏ!eƒ†ã9qÔ¡Y×»Õèú$ÝŒï ªŒëd% '$À&¼ÏùÉ"tÏŽ÷™A5†"!:à7ZúæLé�|­~˜…dwD…œ·TѧÃ4™ní9‹ZÛ͈Ü{Qû§8*£[“•»Òr6’v­£,k'´•EεaKψI HË.(k(ÙE@Z{µuUÊK/\§*±±ì4n _Ê(ÇÂéŒú»wp%-¯-ËGÃ�¿,Ùg—ÔÁý|�õïŸÔÉi1þݘºÿDüñ á¹û Þ–ñîBêy’r?QóÝ]&/0ؘ“i%²7daUÅÜùá²L¯cuÝ¿u¤×¦Ië/àò¿`úz–U£Ù§CM &ô¦K)f{²\Œ2«2“GÀ ¹’1ƒ§=Ÿa•i3l>¶»˜a]"•ÞqÔd’"ÞQ“Ÿ•é™sƒ”ÿÖë¨IBf«Bè¾ýºÊSædμCoP$%ëÏ>Ó(¯ y‡Ë0I"M«Vº53îô a†É0åÏÕ*³x‚žš5X'ìÄN†Tð爔ñ0hê-²àzW\G°üd”Ð5£ˆÍ¸–?KT\H´ÙÛ”÷9—Ur`ÆsÛ~ì:§8 ÝAË¡Kâ÷¤Nè›3­ÄÕ†1ΪmJFâ¨áÝf§y�(Kq,æg¯„)‹Ù"¢º5q¹+i޲kiY;­Ì×F/ [z"_ö*@[vA[CIZ›ÀÂÔÏ'°q™i2]”ƒ²{G<?WŽ çAjr˜`”äü¹hÀç;L8Bß"¶N¦{âýDÏw£>ss{Tì2᎚-ØÔ<Ìž.€õ•°z˜¢Ä3 ÿ.¼Ÿ´!©¤“*Ö)N/7RLZ.F˜¦€*34ûÖ­°|Ù�sÖXQyûpÙRˆÍÊÞeV!)bJŸ˜\u ´XmG뺶µ†17ò³ÿŠõºŒivïSvj¢\Mçâ]øœÿ‚S!~(W"U@çJŒ(ZµR®idh Îï£æìðùÙÚû}p_¬CAúëX#Õé$Õ¤É@–Y®áD =BÏÁ½hÔ8Hh¹HÏ9á}ΟGLÚK‘¦UÇèË%ïIÐ7g-™_ŠJëåœ/øºQ:ú‚Ý­#ìªn·u›±<b/r9Øncrñhòcî] -wekF„#íZGYÖÎ@e+ó¿Õ ֞ȗ½ Ж]PÖPòLX›f‡y¬ Å«a@8k’W†²{Pv”¾³®GüB‰:ÎÞ@N}¿py‰ü^UG¡þ´îÁ{PÖrHíÙãû© '>¿„AÑýD™é@z™°§zÚ½[¬J)O_[-֛Ϡ÷Úq”òˆ„°n@¨¤S®CêÓË©`¤\Œ0 Œ4“ŸN4T–¡¤úkxÓL®(sì÷dãü Í*Tæöð:ÖPRPŒòœ^u‰œ�f»ìvÿ»&¼¶üC8EÖþ·ë¨[sP·£&!ºª5tuÌ  Н?e¹¥JÚª•rÍè³ C~4–¾£rþ3£¾T&™ÖQ@Š”g–ûàªÍÁ[‹Ú†ï3*.$Úsšô¢—É·{1Éäd`¨mŽËRd¨|?ÉÛ?%0Å—§r' ç¯Ë+C]Ï£ÈïÒBßœ½¨ùï¶H0):Œ{S5P`ëFYý@¦kŽý„vÇÕÄgš-q¹+e޲keYû¬,¯Û‰ÙÛàòÜÆM‰=+r® [zòB$E -» ¬¡äsYš5°a%™ŽWf^uïàà†…ç›®bhú1<ÍŸ£Ñåäĕ۫øKvu%ÒøÉvd¯Z‚;`“èTC‰%wö¢ Ít ¼LÂ5 ózí-5ßb'[ÄJz²53£yD6Á–*½\’AÊy¦*#!Ì[ºØ´Y…á¨ñHË,€¹æ�,v£dõFÔÊfçï¡ÛÊ;m™¾ñSœ:°+6îéÖ/q¬|5–—;¡Ïx†Q¿Þ;a!°÷G¡]Òr%J”´U+嚥( 24…ÇÃ\6ºá¹õP®½-©£@…—#pµêäÑÆ+É,7eËËxHsÎQq!ËÙ¡F¬ßø9®3£:4veéo"»ÜŒ’\tû0¾Öràïý0‡âe Ó©îœÁŽ-FJ׿‡¾9'ÙWRÄÞQ}Œ¢qõ%,ÑéæFIíÁ²â˜å3ü—î \(¶ ¹Ïþq¦ûmCÎ×lxŒ(»nÏò¿Ó ֞ȗ%Eè)†¾k¢iÅÅAUvÁ^ ] åÒ­M¾ùæ†~^™¥ þ¢àdlEË–!£ò<Fxÿh{ðš?ø<ºZº¥2Ï#&x§^ˆ+š¤üIT‘fÈûšP±ç|ê i< þŒÔJzR® ƒÂk¦Í÷!)¡ãbE]Æ—Þ¦±kÏ#ÍÄ$íúÄÎ YV!ß³…ØXïÆcµQ4=€†íMŒ+Q¯Â·Ø\ÞBõüL>†žþkî E6½–^"XA% ŠP®?e¹©JÙª•vÍh³ 9¨¸xfðà«Xm>¾{*ù8Ú ÛßÚÂwŒ —…Òå%mÎi&”g–»‚—SR[-Õ¦ê¡{ýi÷lÐ}…ܹÈKÄj×D:„FÞƒ`§%#z^èÅ^$¼¤iŒµU —%m÷"?£…¾93ûŠªQiöž(«(³¥5ôê!ÒÍma»O?µ[mÃA µ!'Í.¤Û³|}õ°¥'òeÉ@ÚŠ‹l#ÖP.ÕXþœt¼2I §ƒÌ^ ³¬¿7•˜%#|„Ϊ]Ehq@qöÔMMâ~ÌerÎ=¡yDPM!廡Œ”pÌ àÿ .» uì³êlà–T8é¢y ¤|„r¤A´éå¤0e&f*º>‘dòŒ²OeÖ4[ÿÜCâÝ™¸1Ÿ¾ }¿ª”c6Û©1x…³¸(Ï9q§&Íõ¿û2¥¯”åJ¤ (‡F«Vߣ˜w«”{–* ’c.Ò8Ïœœ˜wˆrY8jh3˃˜ô]AcÝa4(ÙZ<˵ —dϤ÷ õúSíYöI÷ØZt�_7³½ö6*]wñØ×KÞV4ûÅv-Zð÷÷->ÿ<Ìù” è›3[oªF¤ ø¾¢¬~ Ì0O WýÝÜè¨=‚@ŠÜ£oCN›]H·gùÐ Ã@äË’´)xdú<"‰¾)|Ã&TFuü %$å•a ŒÀSBf¯†^ÄŽôüXGMöNÔÙŠÌ·²÷'~‰SâìE1ëDäHÜ0e”á˜ëŽd¤–ƒíUY¾ÒH‰ê9gé¾°×?·\²Œ+vD|”—- DJtgÈ‘rѦ—“—+‰21¹Œ ëú4ƒIïØí´{!ijO».ÀÑ.C¦Ê»ÕE{ož!^û=Š!3Àª6`UU‡¸~ìRµQ%>çÊÙ$ëÔDÈEEX®D»ÿµÒàeù"([µRfA2rñ°5O—7:ßzÓx¶C‚<sÁ{_bÝ^ÞBãº7`Z¹2× Â9€,90™Ö1ý\PjP˜.9.‘(8÷Ú¨,ÙŠê–v>ð÷ó¹ˆ·Äæ÷µ!„žcÌíÄéYŽÅoÑ3øXîüè„ôœ¥P6P vôSf˜“è)©=‚@ŠÜ£oCN›]¨É=+rF [z†…e+.RPF_ˆkÝyg‘¢HŠyÒ¡“”p!ˆðÊFLhÁç vávX™¢Ø.ÅS¼¾ìYÒóaí›f´{mÌ0¥ÿÝÕ5hS¥ô¹Ýh,ß‹“3¹/†²Ã@)‰œÁÀ1òlöÝ…?ààί1"øxÆS=U %<£Ì£äbßK˜^NzS¦'“v}â‹÷#‘ªß ¤¬§å |w rw]Á#á¹=·åcd§™"rY–H•!ø““cð8¬Ì )Day-lNolDM/HÏ9ûK²ìÕ9`ö›\T r èuy‹¶sWŽ/"Y¦ƒþV­Ï1Ôv�•Ök›ž„¯÷†rÿ„¦â–çº|Ù )Ïæ²` ËU5¥áL©~Ôo©WJ¾CC§Q(¼f´÷ÉR^*ðs# ¦wîßi*©ZHÿ V®ÌEõ•»ÂrU/ôÏ™ª ‘=*iBG?i†9wÀRܹLæÓQ{PRÔ†œ4». !r® [z†„H¤­¸(ùnH£/´F ¦­-¨ÇµY£ºÝÍ»°ºð®ÌÛbqH@Ý¥‡)¶T­9å÷*{wQܺ`û‰GFn¿ÈŸ8(ÎÞ,ø99oGט:ƒàüߵóˆ-Èi#%ñÎRŽ c×`É-ý æû 4àÈ3äØ> áá`g‰(½œô¦LOæÏHÖõ)�·e—b$…žv£vU:rm^÷ gdJ‰!.ÏîÂËæ#O¤Êuʧe¡À¼)zŸ¢ª$92uä¤çœ2{•1a,UÛdR”/‚ÏÅh«Ö§.˜_ß�˹6œªÚˆt¶Ç ÔãˆÂ‰ÄÎ¥4‘-%NB. BÐfÈÎàiçlQ²zÐV³ææ\³mC–°£†’Àté®?%ø;“ÃKöÞöb·¥ ?Gâ܌ȩ{pí©ÔÉe"}s¦ „GAÓ@ÎÑAŒs¥ÇŽYPû_íâæ¤w.ß „íÑ ¸œ‚6ä|ý‰xk©üïô°¥'òeI¡ÙŠk“)vìÄ@ÊwC}áÐ2RäjÝg<ÇP}уš´|:á+Å+C1¡mÍI²W—ÈŸ‡ÌS¯¶÷eˆ‰(#%ÊünZ~ gÔ(™Dl?eYz™I,b¾W ¡Îk”Ü!”e<P]ÀäØT˜Æ={%Š,'qÜü.L+vÃõà!|—"o3/¯Šüš.$Ié–äUR‚‘Î&sxoÃ^©;ˆîœwp¡ä¢šÍ8%â•IØÿ’å-\>SñE0mÕªDTרà{É3ÊÞcïò+ 8÷¢¸þ*|~¦vÀúÁi‰’q*.ž S ¹,4ÄÔ”øÌ´3d;`ûoP#š!«”$D/ÕH/C³pƒ‰d†Žzè%0¥]ÿÄ=3ò À×DÜÉŸlˆ8jØ»ÑsÛ“L˜4NÙ@˜¦‚йB{çj¯™1°3b(”Š6䔸“ s„&ïâ6¿€g5riš´|7”ÑÂZ÷©~4”íÁ™î›ðóϺg]ÒM’Ž2^ʈ mkNª½ºT@ú<¤žz¾ˆÒ®gAÕjš]$<¥µ¥ nîh˜Bç7Æ„Ä|K¤Ü!´e<¡I/Ú9Qr»“œàr¨mŽËrÙ“ÔéÉ”à5Ð £¤dZ¼LøÑÏ•„~¿ ƒ6Ž=(?öe É´ýk Ö˜as´ qÌxê±=ð”)õÛ„;›„ÁÓà]8þÿþ¿azíÿBaCîñN{Â`gœ,{•²³LXѦäU¢“³J{\í}è¾ýºÒ»µ‚œ³£ ŸG[µ†~Erbm%ËZq´EŒÍ‚xÚ¬a®'Žà0ìæ/$º>QrñP“Vꇡ'ø¹¥M}œ„3úy7PÇt†‚Qy€¯± {Ú¼ªÏºq©¬bJÓðúÓtRegñœ=‰-’æb{®Å£[>RA^Ïû #ÍÅL§³¨GL¾¿mÞNØJ×¢Üùkäç´Ð5gÒ@8abG?¥s%5w.Mé; tœT™§¤ÐpÖJ4DεaKÂX$MÓ$绡‹¾Öºó 3vµ9*žÙäl”O=§¹Ï㕉*ÅŸ5;Z¾¶æäßýGåóP^&´i×Ô;j: º>‘ò}h‚ÍU2 I2r¤Ü!´e<¼3ÀúÈž CYú›È.7£$—èFß—¯’ØÉ ™¡H—…Ä tIaò¾¬õ6{':ðüG,;„‹žÁ°ñ6ä‹t9«>AçSQë5. ¾æ�T• ·ô”äybï¤ÄNÇšñ¡³³ %¯ ­œåg0> >vägÿëu9gùsÅg:Äüld¬oL^"Êîýª <£&ì¨Ic²fšŸñŒ,6ÇÍÈ^™†¬ºŸ$¢«Éô.Žð}Bá( ÔIöÆô´í­‚µc”é¾·ÑÛÏ»<½ÄÔøxÜ71&åD¥$0U='Õ˜}+VfoÖÞ¯|äeb¥Þ;O³”9€[ñŒ�þÎdzÚ Ëê ̈Y¹ýoZ}}O©t•Xè›3e |a»Cw¶R¤\z”ΕTÞ¹KÏÂg‘ˆ³‘:ó”qέ3§Pÿ·ã|2aÊ4MR¾R¤ Ö#ø~ïOì³ dòÊPFLh[sò¿ÆÃ´t-D<…[Ç+o%/õ<I@y™,Ybb†XÅÎh×'v©Sð}0f!‘eÈQr‡P–ñ0Ñç>‚Bžmz„žÚ50å2Ãnš+Ü<KA&ºD²õ§ÌBbks¶ Ή8ÉÉ ÒK"ÑÃàœ}—.¥oïW¨Ìž ˜2¶Kpš0(ÑÕåX±Ã‘Y}¾ûïØÙ<$y6)ÀÖŒ²³ !¯ ­œÕ –ÔÍfn.ö\ Ü!ZãëyøÏ¸Wƒêf;êòVEŒx^V} ¶ºÃ8ZUŒâ„ûJ(¹xâï#ŽZýÐøÞx‰§®ðzΜ»xUyo1l · 0=˜0e0è4ö™4)e‰ ?‹±Žšüì ¤«þ9™iº^GVs€‚ ÈŒÔ/GZQ¼"–¾Ç‘?H£z^˜ç±§Ý\}ˆNK*­ßÈežê„þ9SÂ)(ph9úåh*h+„w.ié?‹tœÔ™§t sn‰œkÖžQ!¢€2M“µî ‚ŒßW=ç~i·ãÒCÑË“+@T¼2”“d­9'¨Û–Ú«Q/ÿ‚ãmTº’§r§ü{É@y™p²Úý œÏdŽïæß¸Þî\dbbÚ®O” ‰€FAš!Çׇ°›Y›×=¶À—ÇÍìâäçï.ûÚaÉÛîPbLY“Éh"]Ê,$ö<OžàYü:ÏÖ~ó{ÀŽÊÕ;Ѧ÷ >€§å Cy¾wPõ¯ÿ%ÇkŸÏ `¬Ó‚‰®OtHAg¾f¼2\Î’À?è_g•°{{tF?Li+| W"WÚ,1º0Ø ãâ¡å² åB2º7¸ÜYƒ5Ü`ã¥æ¹ag³ÎÊ ÔwðrûQ v×モ_#*SÊf Æ”>ñVÀÆ:CV¯£æ,Ì%{TNÉèø.ÿ &r;˜¾UfßÂo–ß¿7èšsè¼íØíWàäBÑÕvíž¹% ê „eˆ”Î.¿óßD÷Åo`?w5Rzç0ºNÚqã7ŸLZzFËÙ˜ò–Ú1ø #ç. _Ï:·Dεa @!DH*¾ZÐÖºcê&Δ¾£a D7·(ye(#&ALú‡Â<<Ñ!)0ùúcì<jjNÅÔ½Úí-¨ßQ óñ¯T?sà‚ç¡„à•‡Ôó$áeBÊwCIGÙõ‰¤ÑqâÎkaPpQ“ sÞ‹/PY²Õ-ìŽàÙø³À/¬ô³mK•ÑDºþ´YHóã1ú,›±Îú#žêù\ÒsŽT½[ö5~Q2j¸¼&SŽ®¨sêÀ”DâÎ2dûL³¥¼z(í\þ]EcÝa4œ¿ÉÎwÚuá’”ÑÄž‘°[#-4t‘nf÷]îÿ|ù½ &­&^3CÜðZ6âxÆ]Zûw7Új›àSæÃ ÆQÌGE :JS6•Y2áà=t[‹ÎöÄòÎHÖb¿y¬X£×Q3òOì>¡æôác�ÛU<|´zÞ«®9sàúâ0ÿ]ˆ·aÎ@Zö6ì.y»¨ƒžR âm+>dh*"ˆV?xî`\ªl!4{‘ŠîBsd¢¦GnLYzFÌÙHÚÑ0¦19ØVK12ÒÕ<Nó€Ð¹ÅŸG/ K�‘/KJ#…ÚéC‡¹Í6ïÐYë® 8���ÿôIDATtEÈØ‰ÆŽTkƇHºsÑ Nc>³C/¯ eÄ„V`ò¿ÆÔ}ø'OpèQ;vm?ýzÅzž…@p™Ð2ÓS’ÄEäI×'bFÇýøjûF˜ÿù#î©ÅÑîFüí\XyÔïx¥-™0%hï näRe(2f!Q‚öœs„k¿[?á1o0ô=.¸ÇØ- Š$$¯Ï‡à¹-zÊù½MØY†rŸEëy‡N¥ýå-4®{¦•k±!s *œøÁ’“iê<¢j6m·FZ$ÓuÒ°I¸ÄŽÒQ@¼f†9xkçlàQbÅQ“ 3rÇÚv"ƒ—ôägc¥)WbopP˜RpQq°Ï낵€·€ÿ 6Z>Ǽw°±æZ›­(Ï\¥Ÿ|7ÙÙ4£yDW(vüï~oÐ5g¾¯ y°aO{>Ã*Óæ0Y¸bü.f%m¢‚ MGUåÎ-¨ÇµÙyõ¡»yVÕYûY$DUzÆÀtXRÎF¾f$-µã|ŒÁîVXJ×Ìe‰ÇnÏ:ç–ȹ6,H„¡‘B[·Meb e­ûó£nËqxãxwB£ö8RòÊPFL’ LþÛ;5ÂSj¯>ìB›;^y‰©_¾Fér™ì%:œ½€–™~a'¢~’8¦Œ‘t}J’!÷óyØ. *ü ¤ÑqJÇ+%ˆÉ„ »>ÑÞ\úÖÊRî@­=±Ýä’d `ÒsN|×&8WØÈc°Ý{Á”­mX‘u} ê”eˆ÷ÙØ·l.WUŸÃ”öÖ}(ªþ ݳ?Ó©´+ŽšÒpÉàT?ê·ÔÃÃdMhè4 …Óài»5ÒBC×é;KY-ÚeÞ)•£€vÍH8xT{W-š¿=‚¼å‘Ï\Wo?…:Ë!Tåï”Ðh LéÀËìÙ^çü;éE°vŽ`Š;ÜG‘«ž&¤ž†O¯np6Ýè»xeÕm4\ù}ý{ƒ®9óì­[aù²æ¬7°¢ò2<öá²¥›•s°X˜Áƒ¯vbµù4úî©t°ÑnØþÖ¦a©~ Ì<ñCIüÚ¼èAMšL·_ÊxQ0yÃÙ(§[ЃÏk}+vDªL+7a7ÓËúÇ&õ—>) qn‰œkÀDˆh)ri‚Éœ>Cçp‹F¦I£L´µî/ýWp°d-²JÔu°°¯¤áË“–‰Ÿ2b xÑr¨9V`Žaû®‚ÊÔ^Mµ\|‚j©çy %OKIQ—Ždr¦MÍâ|7”Ñq-cDÚñJ Ú2Ò®O¤MQc$™‚s5¨z«s,‹lŒpÖÞSžsÒ»–Ídd¶G]ð¿dï§ÓŠ²Ê¯t^³Y0† c(÷ÙóQ ýªþ†Ð0š7ïÕB`Fiçl©»ˆ>wÚj¶ÀÜÜk¶mÈvÔ°ivkäkæmÙ‡’‚2T1P>û‚ƒZסåšQq<„¦Fán?WB›Ý ÆûÂhP”À”|J‘^øôÅ8ú™¼»)žaLx6ùÝ/‡<<oÓg<ëÆÑ/úõ9t@ßœ™.6Ö‰†Ê2”T o`ÿ€¢›ôû‚g‘ÚÑOWý@šy:Õ†²=8ÓÍy¢ø{κ"¤›d5Éz²ð(y}è pY+"™><Ãp7líýr]ëy•øZë…aKOäË’"™‘²,âÅY 8i”IKy4PëÎÛW®â­*UC> £sQ™ø)#&K ôi¬ ÕU6´ªÊnìöoàìòJ¶§¤ƒÔó¼°K’Œ<–$ŽÎèbç9!C®- ºí–þò…((£ã¤ÆqÔ…°Œ‡¼ëS&=Y1FÖ…kï#?b;Ó^¶ëjoœ*ÐÊSÒsNzבÙ* %ŒÕJ©‡@æœaéÝÈ0å¢Þ+˜+ÇÛð¿MYWô24ëÎVŒ‚²[#Û³N³Âþ Á̆PsèQ¶Ã%=ÇQð”À”/pýÿ~ %#ó­ô®°;A× Ï&oràï½i ݧ4F^&Òt:ô@ßœ ¹1©ý„Õ´™§Ü¹uµ9*žéæL’uÀ£Ö-èvÔ˜‘·2 ¥§à~(˱È@È«Ä×F/ [z"_–cçQ«Dr¢¦®S•ØX&^ßFÍ5@eâB“®Öc·=Cq¥ ìËt)Q”O"^ò–otµ¢|Cá¨yÀÈh³YÃJJ›/Jª õ<ÉÀ‰]¿kBå‹ð~ä«Wµp¤ OÓ,¥ áù­Üæ §I¥ÑEÜ †4:NiŒ$‹ºÈp:Pr‡°å¡ìúDIŒËÞíŽÁhÜQÓ€\²Ú{™”bZy:‹˜s>#yQÞµ”e‰´„±ü>$ËœÓj\ò¬JD9ò;º€¯± {ÚÔ¨÷1.ÓŽ–­°v·F‰ÎVl^nKV”·àgv熦~…§ù#ùÝçO²ûŠÝÇí>çÕÐuòsUtRžK”kw<“p<Pß( LÙªE €“‚éÄñ]¾4ÄHÃd|¸îÎŒûJ­»ëSâÙÌÏ^‹"›¸AÍe‚’9j6#{å_KC vÃ>d@ßSAßœ“éꡳD›ØÑO«ÛQf˜G½s 5wÐ8†:àQóú!CODhê!|ÝvXÍÅ(¨8‚掛»D °CÈ«Ä÷·^¶ôD¾,)ØCgÔ«ÄîçظLÜûLZž,Ê}9BHb¤�Yæ%¯ qÄ„²e¥Ü^}±+ûžbNô—Ï.´¼L¤KgˆÐAîy´ñr°ëL˱2;™«vÁy§ –¬×aZÍŒ¢(‹4ë‚|äe®EUç›ø0ìÅoë$&nçI™!G×\3YBoJN®8Rq‡pÐu}¢%Æ}÷A3,¯cH‘˃ð¸N¡*';¼g…A•Rüÿû‡ü­1Nž® zw—°<å ë”E™ÑÁ÷UY"Sf ;ËfÎîÀ{—ưRÀÏÛ{4 qþß²Fgðÿ—݆:&ËêlàKÌŒ\¿a¤¹,Âݧx߯@¦¹51#t=» ²PÖæ×ùÙºÏÈ;ÈιŽVɱ p<?ÇPÛ&›¯alz¾ÞŠ~ÊŠ[žëðJ­1ÈË•¨LÙ9i©­ÓZ<:>;¹ÌP4½Æ˜ÆÙä¼lw6 gƒñï•C²Ò'.ÓZ±kï% n>}Ð7gÊmâ :i§?ÂÌÓTTÕàÏ'NÂ9(Þh‚ÒV3N†>˜>5îC·ÝÊ>·uõ8PrLG"!¯’ȹ6léÉ „$cm(^}¢iš”5àl{ùN•£Èz?öõ¡Onü»…âæ;úv Øs‘ðc°O"Íâ â•¡Œ˜Ð¶òµEèAJß,BÝ5A {»aÙÖ„AY=–�2Ï“ Š£†1~Þm寨b½ÎTdÞ¥g—PM;=4²C"ã¨k/™@ï<¸•Í7uM”FWì⛑U›ÌL§$ô¦,£ÒR€"C‚;DÛP 0gXØ€¦MOf;-0€–Êܹ®ÒéÉ”)ÅZ{– IGíD™ÑÁž“²,‘Ë ªÎ2¤™s dQǸ¬‰š8PU‚ÜÒSR™&±%¦û`9°%¹åR²1ô¸ ûˬ¸x¹%Ë•³ôþ‡ÅX½ãb˜ÃðY'ª·é+}e‚V£ÜÂWmÞ"É’<OO]0¿¾–sm8UµéiY(<P#…¼ó;K¦lÔÊp!QbÉ–+ñõߊ•Ù›c×_=ò2±R—s…}ÖÙ/áz2ÏÓo¢ñôuŸÅ Uâ8x µY9Âúßr`ºÜðÏÖ¼K¹î“­“óNúæL¨[;ú)«" È<]ºUZ¡ëAh ã^',VÍ,¸o‚†WIß ð¥'òeI¡e¤l`1œör¤Å+raé{ùƒy@JL|Õ+c~t0e¡ä˜KÈ™AÇÁäeæt©­„“$QŽe)ˆüïDtƦÆÛdWýqº>…&йw'ê.³½Ó÷ jÖ„æÞ+°•æ9j˜€“*‰ÅÅsÿk^e0tß‹~Ý|)TF—V4•§CÅÎF¯x¤;†ÇS=©¯”eT)¦z@yo¤"=™íö€ßËd±‘ôdÊ”b&O e´wÐܼ1„§Ï’?‰þsN™ºNÜÝ2sŽ2ê¨ã˱b‡#³Y43¸ÿŽÂ%Ž‘ÌÅÀ1òlöoCppç×âD몰c²~ö™Ê³oÆ&Þ:ùø.l¶ü¸py„‚¨s>N§rˆ?OA·iklð½äA‘÷ðZÁWpîEqýUøülŸ vÀúÁiq.$RЖ+Ñë‡±Žšüì ¤«î„üì•H×å¨azÁ“'x6ïÐæËÓDtâ†)뀰NÍÿN|}ª`nîTÉg>~@çÙO‘·lJÚîE~—úæL©[P:ú—nõÃÒ ¨ÒÂ8zÓCmØ[YޱçLóaˆ—}rÇÌ­~¸½c˜ÉÄz©NˆœkÖž¼QACy /àò¿@èaS¢«Ñ¬'55‰€”"&ž¹ Û»ëQÓÖ#èz?ÀzËöo‘~õ”ü <sÈqÖSÿTv^x]™CK™‰ßq8ì<ˆ®ßeœª(@™DtšïQ„F¾Æ ÌìUƒ{U/¢òÝpIqÆ!ó<É0ã©Ã[êó¢ ùÎVteyüœÄ—ñÄŽüì¿b½.’ÖLz¯Ànw Ýûˆ)ûO1ÔuŽö~<vÔhp£t}Ь·ê$:›P¦zR:^5Öß§w”]‡ÃúJ ŠQ^cƒ3¡£ˆNPÞÜ(%#À¦O)þ×þZXލÖì¹Ñ.œRL¬f¯Ržs~oP¥®s%‘.X é\”Ìœ#:ÆgMpë´ G°ö~ÖQ3[bÊD`ì,9‡Ûð‡ðÜcÅjÓ[(<òêöÃEôa²{Ø×îÓVX¾(éÔ(·pÿ$Ybdü<)÷®²N<ð“ÉÖ¬ž6ë\i}pvóâ÷ ç¨q6)ú!ÏÞî” –EA|£Ûó1¥O/0jÿÅê=¬è²¢û—�í¹Ýî›R¥„\ÖÈ!¹ì “r§Ž—‰ÇÂÐ’ù²%Ú ¤¥›LOYŠÕ¤U¦óuÊ"†a2ôq¸ÌewW+.žªF^ú dîÇñ#Åbúב¥›ðúgቱgÔC®¹½0lé‰|YR(„­D[ƒ˜XÙÈ>'šºîÅЗCíhrëˆÒÆ€˜”<š¶S[Ùc&Åð³­�Ë$jE¥öjèú¾Â}ÿ@3ïøÔÚˆcÕï#+m¥\7Bœ½(¦¼h¬øm¾Q•�š@@ØA|1±s’¬ô)f43c%òÉÁ#ïcc½ƒ¿a¬­éi9(ß]‚Ü]WðHèQ“)A"ÀH.RÇ+%§Cto¼´Ì˜k˜!ÍK"Vo”Kïç÷ÆýQšNMQ`Ó‚n͈³CHAyÎùù¡*KdŸE, Ìœ£jÁFعûnÙ×øEÙ÷<°´&S޾Œ´8({öÝ ´üΨQ²¯LL6êâS#Ü )ê M ³~;²3ÞÔ™)f€é"—Õ‚óÄ»wnà5aG ç@™;‡² ÞÑ““¾¦!«î'ñ Íà]\©Žè‡JÆÉd¦ÿU²ü2àm¯ûáRÂ2ޤYý0xÝÖ"Å[¾Ã¹ËCøÍcÅšÅpÔ$ðnʃër˄Č7<¾1)ÝN/ôÍ™²D;.8EZº¹tªHª¤²8ƒpÜÑ,K†ÎIÓòÝ94Ôˆ\~OœGeq=:|#LNßfòâœÐ¥[Gœè ë®â-Íùßé…aKOäË’ƒ½àÀDìe3ZV+Maò~ì|î:÷KpÔ°g$$%¤­á[ª©­Zà¢MøÜyGxͤ÷jp7ڎœ—V|rv Îy{Ñš³7NÔØÕf<G[ñ £~=ô€ Ü]Jg�NìW»*¹6/¯Š†’Ý&ô°ìÌ%ð`°“R©¤F©ã•’Ó…G™j‘¦а]‚ï)ꬦèÔ´dA¹f|_iGXÅIv©AyÎiË)ƒ¤–µ`nqüÄæÂô¦¡ïqÁ=Æ>Y‘ˆtKÜ<‹ojÜä¥Ó¸g/CzM»ù£˜AàÎ×0[e p-ãPÕEPç‰ë^5¨n¶£.oUDÙçÂK°ÕÆÑªâØ Pî“eùá6²‘Ÿ…¦îÀQñ!šG~‹üd±Àt8×gÈI‹çù 6Z® î¶Ïƺ`-àœ>üï?Ǽw°‘—Ä5[Qž¹ åÎ_#¿û AHúÊ×Fì +5¿±sÝ5—ibï’ìþ¥úæLØž›´t3ÕT™§„UÚNYì1)ƒpF)L΢REŸVÊK¹ní9‹ZÛ͈<äÙwŸâ¨.ÝšÙ ¶úˆ=sõEÌŽù¶{Nçï>…ëö 7×9׆-=y!¢gR.Rõ…×:[V&LrA.KLUª4æ#ÁQ£Ì…ˆ”6šÆA•ÚÊ„#Y:EW…9ð÷öGéóPFàHK"Žºèç®àJ%Š,'qÜü.L+vÃõà!|—"o3¯ûüšN,ÜT�¤F¥ã5êPŽ—2œ<:þIDf©0Í \Ñ’ˆ°³š®S%(AÊ5cûŠ”dw©‚¸,1òÁr’Ä U f*^+Žˆ£† t€w"éh8„î ÕßË:ö¸Ñ_n!ÛEè<…žcÌ} Wb6`hüzÙ»EèžE wÚsf€š#úaÃwá̇0ÍÎ@®i²ÍÇátûàççÓïƒûJj6®Âj¶öOuÍ+„)3*ÓMx-½ÖÎL1}ó©û(r'/ï9-Üe))BÃ8縡ëΧ$}å÷­4˜.v£q;2âÉèÓ߃¥c”í‚Ô@ßœ“è1Cg{î”–nr™a ú̾½qëž%µ§q¿ÿ¦N>VÊNYÄA¸¨Î?LÅ:Íè¬Ú¦Ü©Š£&Í÷´meYJ¦-ç®2e±w©K6„0œ ß5<S§D]ÒËñ=5k°NWYöøóè…aKOäË’AQ¸ êqmö²ëCwó.¬.<†+³Qy|0”“¤5ÄiçäÑ4"¦Óñç¢ëR"µWZŽt 8{QFà4½áê!!§©XÇýÜ ¼ý`ÃÇ()Ù‡ï„~ôósÝïVZ•V±s ¡€W/õKðÝD@jtQ9^i9ž3%ºŒÉNÏbÈsU"çY Ôšè@i R®û,2’Ýøž¥,=#ÁÜ};äÊ)A`¡lœÀæBÙP€²t€´]ÉÏ^ú/`gÖÚž&…´zy6Ê?ãÿ½æMfÞF~Ÿ´ã4wâñr½NÉ®gе¥ö!í»(xÍE¥:íüü”"½ðè‹ÉTáeU7éÊWƒ1ØÝ KáÛºËí(I_åõ<~wĪôͨmí†o,ž{h ‡ºÐP¶NA^ ½Ð7gÊöÜ”¥›!ÒêRhÚ·ê±ÙEúÎi§,Ú \"ÇSº[÷¡¨º ƒº‚ü:°«º ßÖmÆòhé,ÓÑÛyfÙÑ*äÇ;\t 4çÎ÷Qsö‡0Ù;w0_¬CAúëX#H+ ïŒ„aØÒù²d˜ñCI|ò=¨IËŒŽLjqÔø;ñG´­]2åQ’”ƒÔ°#i:[3Â.%|­…1ö v|„ñß3˜Ò“W„z¯L&“<¤ž' H#pɼá1Cg†Ü<ŠuÌÐÅ]AI&üƒùLX‰ì YXUqw~8Ä ×±ºîß G€~7`§Cè ¼-#{6í}92JeøÃ¨;5ñVÇØêØ~ª;‰óîQ©26ZclÍ´ä©,É.Ã’-=cÏIX–H Ê�K29+Ó8”׊¸t€”%vÄ牜ûfç¹Ñ2æ¢c+êzEþ`>¼ÀØ•}'^6ò§ó_ädÏ|ØxTÑ µñO]û°UW7"¾þŸËµµ_<#ì3¢4+}ölq!]6'!é+ÿ^9pã¹µì'®vˆ™XGðaŠÊÂôÍ™°=·ÒÍž!I.öþ‰ªH‘Ô¾U:4ë²O);eÑáðœýý¯qç:4ŒæÍ;Î;wØþ„vÇUxc²®BÑß;,åt úÑXúŽªÒFN9׆-=y!¢3èÊöàL÷ÍpäÐu8ëŠn’pÔPkÖPÊ1<‡/BRÂ% Êt:&lG‡1üð¾jýãÆhN6 @O·Ô^e k¡¢œh):êQ„ö;‚ ­1œ½H#pI½á_¡{ögz³Ñ(kJ2aî¨Ù‚MŠƒ9€õ•°zlËÞFcáß7=–”¥ŒQ0%(p^¶<·0žÙ\¨:5Åp‡ìDâtØ„R›Œl¦Ü³QP¬w P‘ì2™AZzF»ÏB“?ãe¶[‚˜š’<TÊÆ ¤¼VK¸t ôÞvìö+ðNò}1ˆ®¶³h—Úg´ç‰Üö Ñ ”½ñflYCèFc‹(ÿ‡Vé@ð)&ŸÍmŠ »%ºxy‚¸×Ò‚®y_Ü®8½û7ˆÀÈpX+"Žq~솭½cÏïè.}¢$}å+~? MÀËÀ?@Ù¦=7Ÿh H÷¹Ì§È<¥¶oÏ\ÀÀ-N®}NYû–2§áRì“×,iæ)Ç <¼Þ„ÿ_‘sýßlp+™Wb9׆-=‘/K¦„Ž]AmŽŠ§ÆôŽ$C=Wh‰ˆ‰¹‚¡YC)ÎðÌAJJH B%™4Ž­ÏôX÷YñãÍýèÑQ÷ËWûÑskQ““Bêy’2Gâ O(É„Ù#±5ۻŊË}nôµÕb½ù z¯G)¯}]ÔóLÒRÆu"èÔ.IY…Ž;sNÐc¸2EW˜|“ÒÁO Z’]ÒÒ3Ò}FíöS“Tï’»Nì)iÁˆ¨²M©4²{š®q%¯ÓÁÈJˆew¤¯/—ø†8gAÒ²·awÉ{Øåz øy´ç)lèìCIAªØ~çbÐ,Ùà–G"ЬpHn‹3øÙ;ö@AĉšÁ°žùòÌ­¼*}ާgå—åL~è9óÜQöòÌûc º˜±¯Ùº²`¸Î{Ö9HSö}òvÛÐÞ/™…GHú*¯çq> SØZý n¨Êž&ïÀe«DöŠ­)ÓÇôÍ™ë]Dí¹IùDù¾"¬~X²™§ÉìÛ4l&`ŽÊBn«J3#øîfÇG~K7´J¼J>‚U±O#¿£”™§lo„K„Ó‘Yð!j˜Œ9Põ>VçX„K„ùô°¥'òe "ªp»ûqk|Jp£D@ILÌ6²£¶^1Ä¢Ù}®¨Ø¸S.j›�yRBR*ÉIÒé&˜¾¤x u ê/Ï®?ïÔlÞ€ÂúvU$Q_!þý9ÃõÙ–zœvþ„1ŠÚgƒ~MFà(½á¤ $·“)ÑñÖ¢·mƒˆ”º”1‰$ÕuˆÐèåáà ‡–R ¾JˆÄ$»”¥g¤ûŒ2ÛmŽ»%ñ}.GFÉ1¸DHrI•Æx°=;Ö…Ÿ_ ”uIÅkÅÁæBR:@l4ñŒŽB.ë¹Cå3¬2m†ÍÇî$%ƒHgYË,(ÏÛgN³Ò^:ü|‰p)¹_ŽàâÎld•¨ît%óáMd—ׄïws¶ê ^ؽ™ó¹>Îelhê¼ßîGÎÂùHÏâ%ßꡯ\)â¨1oÄÊeï ôT ëx!Lµaoe=:Æž³Ïs£ü7öã)Œßê—.½äÏ g<·;Q~™Ö¢úÊ]Áý®úæÌI÷‡pßó ¬•¥((Ü[{b™Šò‰²}EXý°t›$ãªî`^³=(?ö%ìvûÜøÚ‚‚5fØíè|¬¿i:šÙ2õB|ÏRfžrGóÚ¢.OåÜ{mØþG'#ˆÀxl‰Ë/ív\z(¶¤ÄÄ|cÄó3LÝ€mã›r©yK¤J2Cè ü·Õét²)ˆÜ®Jˆä¼è©EÚºFa&q©½Êžå†íý°•–©xÿ9cø²¬}¸2¶˜B–òìEÀÓ3ÆÛs“zéAF&Ì;N4¡bÏ9øTû|l<¹’çHéøJY…°±kPr½æŒKãÄ ”¥Œì2OàéBkõ6¹®CÉŒ^ÝTP¢^›QÖr;¬L+Šßë0é$*…†Ôw–²Z ˆlý5 Y’]fÜP•ž‘î3ö:ɲÝx°à=¬®ùF¥è±ÑÛˆòõ8ù¿u‘]F@©4þ)@k4)¼­[aù²æ¬7°¢ò2<öá²¥›ãyåyâÙžYXQÞ‚Ÿ'§™mÿ+<Í¡èÈ·è>uÜÙÞîÓÿ¼¤\œ�xmbS‡¸QT×£ƒ‹‚;3ÚaÏÔ”—¢Îý$Ìçp¢³O¯~ÎÖÿì—p=™çÜo¢ñôuýç“gÏûÐm·Â\P„ŠºtxD, •´ŽÃeþ+r,­¸xªyé+Y¸ÇGprr–ï)cà\ýp)Ø¡þ´n©f�ú¡oÎtÙ À#üpæcøDC8?ÃînQ2aö—„ÕK·é%GP2Y¨¦wPÖz[w345‰ûjÝzìœ{>bº`Zeæ)¯Ùîˆ-ÝdŸ7ím@® £Ÿ¯‰^¶ôD¾,)¦nâL 9Ot¨#œú@JL¬Õf5èÇ·Åñé�Õ“­u_(=ίÂä—\�7žÅwfp G­•dÒDv nØP¶« Ý>îøáUߢ®à-˜^‘£&4ÒŒM¦L˜í^U4g+ØQ¹E¢í!dž')(Ûsëꔥ”­ŽUx9×Q«NÒ5-ðhêWp Ü óji þ¤XŽ”LI\µùïaÓ~ š’”´”‘¸KŠáÎ�qPe8”6ÀÏ0Ôy™)´2û˜RÒ*¯`x>ÏmÑ;ˆ)S© Ù%(=£Ýg´Ùn¡ÀMœoúcê5bòC*¥›´\I ’QÇ% Ú’qžuÔ‰†Ê2”T o`ÿ€rúýÁ³Iyž~ÃHsY$ ŒÍ’w<^L%„´ÌõÈËÌBY›_ßI¹,ؽ=€[‚m¥µ¡üŒ×ÎH2°ÏzòÏØ¯†¦ÆÐïj™ rÌv¥ú O&%<Æ× »µ’éC¢îø~”Xç1Æx¶VZžÒ84Ôˆ\n¿ œGeq=:ýõ6º­Ÿà„`~.»äÀîŽþôë 4Lÿ‚Þ‹–þ%‡®9f'(Y¬dµ` ú2ó”7Àø® u–/pÞ÷¡Ðø®^…'¦ë™^Pr1Yx¶ Ή¸ÛUÍIƒó£ÏàÒñ̳]cîïð0e”á˜ëŽ˜]ƒгA58vÌ‚Úÿj—È<}÷A3,¯cHÑóáqBUNvxŸ €?‹^¶ôD¾,”>ç;ÑØñCì…§³¤%”ÄÄ䇟¨Ö=xÝõeÈÐLÇf—zÎ^8ø!Žüú‚ T’IS9˜€t}†œY‚*ù¨-ÿ[Q(¤p¹Jø2«v$RBæy’´=7YvHŠ.`E©J›#Ï»˜t¤]ëåO♀k^KÇÆ['þÙU°¸…·þcEñ)1¨ûÙsüµî"~ìëCŸ2Üð(ŠgX†vAÓ =,ØsQvI¡æBŠ¹Ì´š&V€KÙÈËŠtSxû6¬Ð™ùÃÞ“>t(ÑÕpæ\—H鎚Ùð×peÉ,e¶[ŽõqÈ&€;äË•È¢Ž¿+0šHÉ„ÙÇ’V‡wa™/×£$c9x`ëý‹±zÇÅp)ç³NTokÃÃð¯ÏRMÊ`‰çšÝì &GÈïD‹îL~~âø-•aBúÆÃè ÊzVʲ.DÁÁy5Š]ªè„ŠMÃ5ž³¨µÝŒüÍ ŒÚ?ÅÑWÖõ‰ß¢Àr:¶Ek|YƒăŸÉ k΄٠šwndHuZ$]æ©ÒöÝă©¹È\µ Î;]°d½Ój+<ÂŽT-ÝZ’#ˆŸÃˆÓ4³Ý•xi¡•«w¢MG•Ì Ó‡ß]]ƒ6í§½h,ß‹“gW øˆ9‚B´T憹¬øäÓ9׆-=‘/KŠçÿFÝ–ãðÆ±¡‡&F1*|hnÉ…¤=üDµîÓ·ÑZQ‚ʆ³èº1«|ÂÎVX+ʱ¿ã¾NA@©$ó©ÑÒ|¨MnñÄ0Ø;T‰Úòµ'…Ûy=OÕÂ%ˆÀà9ìÚü÷ˆpœÂ-‡CBPƒÔó$i{nÊìT]ÀŽšh4µç<ê V"=¦¼2:ô](±)\Áª‚¥ç:kJ…ÛyòýHG Ê.óüxy?Lx³¦[¿®x§C!J*†£C‘ßÒ J.$ÒË\CÊÏAVÑI‰ò¶f έÈ8ê‚ÿ%»W:­(«üJŸÅl¤Š“e~¸«Ö"?¿û»ã3€t€¯¹Í1J,y0Ûìp²ý+ÄIb¸dö9†Ú0EóƦ'á뽡œ½ÐÔCÜò\‡W*ÝŸïY:‡,%È£ŽÌ|HÁ¡€ÝÙ¯Ãaý%Å(¯±ÁéUGÎEÀ>‹Ê¹HJ&LLZz„žÚ5ìýq}°þg)ri36Õœ@ëñ]ØlùQßçR–…jt²ÁöY…™ÈÎW–zðÏÍÑ_2í…-7½ÃJØœ}ðù¹ÜÏ}gj6cÅêÃè‹ÑÝŒ`¡Ò'^"¶M ¬(Žš4 ÜÓ|e)w/™7ñÒKA›†¿79è”]³#œ Dþy ƒ.;!ù»™AP؆I2OGÍ&®§ójƒ/°Åz¿194Ô¸KBOÔrÀr¤bͣϲë¬?⩞~àÀöÕfü³O­¸Q»l3.þo±µK G³ý^¦ßËóéê;#a¶ôD¾,^ú¯à`ÉÚX²2Ëì+©†C6c‚˜xAÁ,ŠZ÷�¼-p鉄žâŽãK\Ó©h‘ñÊ0µÉ‹@q@©?ïÚ›;ôE–TÙ«áL­K-~¼JaEÏø÷R²=7ivéTA‰~½‰éö”!LOŒcâ‘gv¬fþzìfkfuý‚Éɧâû<8{éT¹î³¿S°L9Ÿã†D¤=ltQƒFùVúÐs±é+㈼#COG’2Yr!Ñ^æ 7²ÏÒÅ ¡SÈFG1Ar�ø”‡×–å£a€;ƸV÷óÔ¿>Ñ÷’ÌœÌà,kÕ׎vÖ¹«ñ9zKfŸº`~},çÚpªj#ÒÓ²Px G ߊ|N6j…Rì,&ãUjíRýL"û× H£Žì9éø"ØëTœHo -³�æv§Ø’Õ%Ö?úYDÎER2aJÒêž{¬Xmz …G¾@Ýžc¸Èå5Óã†}ýè>=—µ£ e¡nô]<Œ2©²PÊ`I¼£f3²WþEå¼çÿ½F§£æ%žv~‚·KíI2Ò§0Ò¼æ-£Q;w¹Í0¬8—圻!GØUÝ„oë6cy¤œ—gYµÛØû;Z…üâ¸Öä:Àe—¸Q Kg¤äfÁ!וJ zçL•  ^ºæ9 ‹C6GÊÌÓÐ:÷î svõ}ƒšõ¡¹÷ l¥ù:5a9¿zu’ ÜÐ3ø]‡QµØk–L· ݧå¢ëèÉŸG/ [z"_–ÉZF§„’À7#1±‚'AìПöÏ…’ÁZ÷ÐsL> GCB“^´óf»“Lé u£Íq9¶VQõûó‚BIŽ‚ò³ØÅ7å;ƒRžÿY¯è ¡y«õ­ê¨±Öpà‚ç¡À¥nRÏ“ „í¹i³C–j«cö\ŽíH{cÒrjq^!‰}ŽÁ–‘µýá½ fŒØþÕ‹¾ó­p =CÀÓ kã%üàh‘[lÍl—p/Né =íEË%Ñ™½ÀÄø#<ò|‰™ÌðÊ©d ú?àº÷HŸlI%¹R™ûàªÍÁ[Â¥g”퉟³çÉUÉNî¨9‚ž¨É‘h)?Ö›sŒ5Ô%¡Ó˜pîÇÇ®ñðÿš%³J{ ¾—<Âø{ί0àÜ‹âú«áHû`¬œtHó*i‚x2¼2œŸà¼]1ÁI€”/‚; ±±Þ[:8=€†í¢¼nÄÎER2aöqd¤Õa^¥h'«ÐÔ:ë·#;ãM¤ ;HËBoáØî3VËé;8®ô)8 {éªòˆ¾ KæryVÁtŠy~÷© •[ç)#wîrâÞŸÐî¸ ïÃ_cË¿;þ'º”21ÈëyL®LüŠ "ç‹Äæl<;A ¥LÍu ûxIõkrYÓ GQI#eæ©BÅÀ÷eÌ0!½¨Y_@Dq.çôü£X®NUà²aw^†ôš‘‚’tŸ’#ˆß?D=ùßé…aKOäË’C«5°¤òBHLÌÍ{ö2,Kø,õЛöO[ëÎÉÊÖG"À¡±s(Kç­Í(ÉÝ —®Ö†*PòÊrÔp¥52vœBG|I‰H§øûEh²-{þ¿°¶†kÚÖyŽöÅoÑ-ó<ÉAØž›4;„N0&=ƒRF/®mȪ´ÇF9¹!pð‚¸£†g‡dlDeó@8šÄ0Ç^䤅kÞÅÀ™5È«lW™/Gt :g•Ä쇣d%Þxmrj.„£±Ó·Ð²c¶/vÔ…¯â2—ÍèH’¾.ÞÒœG|í(}‡ßÜX‹Îó äÔ÷ <kuòYü]ÄxÿObçœ&ì•y(Õ•µf¼dVQb'¿72ñZA <mÖpÆ7 Í_·M&åUb ã•Ñä!Qat´ãÆo:6 )_w:|’(·¦PŸ{n¡#v.ò3@F&LIZÖ5ÓkzæœüLÜùæùl“²,4™<“ºƒÙú+dÂü=tÁZÀ"oa‡3Z¦ÏÛw—ètÔhñÆ‘«ÉL5ç.ÃlÀÒxù7_kCPtVG¤éH=N;Ý ï(!è›s²Ò›9„î{ѯËÈ›«x™1¿J`7Y¥ÑzµÁ)Ò’FÊÌSNÅPñ)Ú|£*9?ŽÉÀ”n ôÃVôªì×1öÈ÷ù˜þœÈ6‡ó{»ÄšQ6=` %Ýgr”¬;%]Ks>½0lé‰|Ù| R^ÁKEL¬D™ÞGýµç>§ûK˜W— þŠª]¤.§Ar…;fè¬uº G€"uͦ\vÙLóïÐPø’<?¾Ú¾æþˆ{³ïrÞÚ·ñ׋:"«1àéÀǰ¥a Né bÂÿÕD&xÄå]°+e#<½y#àY(ùäCîl‹ÍŽzÅzžW…àxb²C¾ƒoR4’ÇAÙê˜ÒèåºáöߌãNx„q‰½ ¥KÇs<ö4aåø‚—S™ÞÅU 5ár±éÇ?¡q¶/v"“)YìÅ1á ˜)é…ëQi-' ÝkÃÁ?’£&Õ—¹û'yŽ”„Ò›^\´| ×ÒœÍ øÐƒóMW14ýžæÏÑèŠvH¡;}‡‘³î(Üz9"Œ–Ìò¬À Üè ;jÒ,nLó FÏä%iȪûIðlr™AÇ«DÊ+³ ÀG&jzôt¶£ä‹`÷¶û(Ê,àâïÖxU"Ø" v.j‡l¾Rĸ”¤Õ ÁQt4 ¥ë\’¥¿e¡ùÙkQd“ãj¤»ƒ9^`¬ûï(H7áµô÷`9µy+6£æÔWh>ÆÎÚòàÔläÙVå±û;¦7w4~Ž<KŸÊù‹Ô8w™ô#,ÿæçX³Ý<cå‚üݦúæÌ®ñÜG±#?û¯X¯'£ïå4o~“}ïr¬Úq ݃åΠÊ’FÊÌS†Ðä]ÜV¸˜¢CÂVVš}œ¥t ÒxFÎ&+:ïIvGS uO²!Ùô aÇ®,龊î”ì½Quô9׆-=‘/KRå…’˜˜G™JZâVŸ §f Ö §k)Üòµî¡{l-:€/›‘eâü(wñØ×KÞV4û% b2^™dÑ—­i_ÀïªCIwŠÅ²%æ³I£$ÉÀç!ŠÏßQØx›Í›+Œ-(\örm^v4ù>øX"Û2Ïóûe«cZ£—–;g'<ÇÃ>[¸ÔO*û" U|†é‡?À¦d¾Ž,I†{`ý^öâzÿ¨hqÔEìœiOLr™1éc†iÝa4(|9ÜÞ…KRe(Kof0é½¢”i¶{™ñÇ[}vñì@É”nJ”ÌríT7ÛQ—·*"øÚ_‚½‹£UÅ(Î( ïÙáG4d¶¤¼2IÛÓ…îÙŸéÏ`%å‹=·åcdÏvk\ŽŒR‰´u”ÎE-ãP”7¤ÕÄÐ( =íÆÁMºHÇcAyóÆ%HçÆaÁÑaò#¸­›"ûî-¦oyu:àBøÍcÅÛÑýÜAäü$Þó¨Éù«*[G)qî²sNXþÍŸIA<h+Ç2¶¦u—ؾŒ8ùçiEU®mz9,¡oÎɹbF³gž³¨Bè9ÆÜçÑPµ%UŸã¼{i=…Ÿª’FÂÌSR[YA7ÎÛjQ^ZÍô7FžŒÀ{óIäÿëÛã„M´ËÚL¾Š—†AE‡¢±g%;zòw¦†-=‘/KJå…–˜8€ b×™ï#lòƒð89¡fš„£†ºÖ·¨ü•%[QÝÂË%ð÷»ÑÓÙ'À)¯ ÛȵõŠ€‹¾Ë>× TlÜ)áÁ“Å­Š' e£ÐÒ Ñ\þ<¢xé;‰÷­?áùôÚv¬Âk+v+¥e¡)/l[¾òNjÈ<Ïït‚‘ö R³~ƒòÌ·™²úl´8qg̃–ÚOñwËr—IùZü5mÒ7Zà¼3‚-Ôüýê…3j8¦1éë@sý!¶þVØìß‹Ë\a¥º¤¶ŒD²íË[h\÷L+×bCæT8ðƒ%&Ó:¦¤‹åh+@²¥7<½ÿýwÈok«@zZÊw— w×<"e’Ž2ª’YEY¿‡+±µzhüz‡$”vJ‡,%¯ u{z”|l/Dº5zn=„\ 4‰sW„Û/ÉCÝĸ)!­&†–<¼„Ú¬ ž8Ê;˜òþŠÂ†ÞXç0?·ÞëâûdzN«j^5Û‘WçFPápüÎÎÈxO…s—°ü[^Ï ;Ÿ–ïpjÈöžu~†mÒÍ懾9§¨Q“á2¨”äå¢\8󗲤q!ˆežÒÈÇ!øƒÝvXwlD‰ðž§lzÀ Õ(¢`2#¥è/GZQ¼"–>V )Š–£_®¥9Ÿƒ^¶ôD¾,)>†£°žúçñV—^—„ò¢IŠš¼œ}pÉïÂU»a.Ê$¢T¸Ã 3RHye˜r¦Ô «0u¶oJ\ê SÃìòŽWÇ‚˜š6äöªÚ‰eZ‹ê+~<¹Œƒ;ŠQPÑŸ.¯Ô€äìEAÉLO ÁHÚêXö R³ÚQ˜Q†úî{l–ýpVÆ×àë›Ká»(©ÿc³—ö Œ9÷a‡ðíÔ̕ñ¡9«ÖnFþ¦ƒÝ`´Ö?2Œ´šž•Ísƒ¬ŒD¦­â¨) g6Nõ£~K=<¿…:Ba2a¶f έÍÈÎ*ƒMØñÍ÷]ʼxt½vUz$;ïÝ:Aî0Èî Å8Ò(¿õwâžÒx°{ˆ¤¥3±C–’W†”‡D›/Bný)+\fìAù±/UDœl|mAÁ3lŽvô•97SÆkB‰$òÌ”u@BnSÞÁ~8¶‘pkaaÞ“¤À¹« HSþÍß›¸àÞ­ÐrÔðŽXf슖Û<¿Ž¯/ ‹­Û<Ð?gÞ²§yˆÛ}´e¸¡ç^|÷ƒ8åiI#%’8ú‡Î;à¦ÒÓ¥²¥)ù4î¶ðø.ÿ ¦ûuà`Y5šutÑ$¥C‘‘/I r® [zòBDBâ-%=ªÇAõf‘V£ˆF™ŒD†´î%RëÎ.O:^ GÑyâ$œƒ2ÞKLM>P½K6î:±§¤%IKÆäàk#¥â:<CFê^é!ý<Z d¦§uúhFéVÇ”F/3)¹ÿW|¶EÓwï`XXàŒ£—) ¦Úô|Âgót­YŽe¿À�WÊ™PbéÃsïxßvSð bäØ~œVe>$/óÔ–‘ig;ƒ§°EéZЃ¶š-07wàšm²„5ZF/o-|;u—DÁ K+Qd9‰ãæwaâÙÂwù ò6ó–Å‘_Ó Ú;ˆ¶»] ½C–ŒW†°=½b@›+q¬¹U%ÿíøÚRŒ5æÀÁÎÓ n#“Ò¹ÂeöÜ~¦wPÖz[ ÒÍÃo`­,EAáÔØÚáiË??RÅkB yævß”l€@yÇ‘ý.š„à{\ɨ>EUɤq®ÅèÏ÷• ó&Ïô8ˆu@ßœ_`ìʾH(ùJ â_ ”HReþò½ð·à—Þ LwjÃÞÊztŒ=gö£C\~ò’¼[ýp³ó$gGò  ŽP"¹œçdàœ÷ÄvM딸×(éPÐ8ùÚè…aKOäË’’x‹Vyäà黪CÁÆ/ß¡Y¸„ I”I´)pQ#3~Ídxe´<޲d}sÑüĹ-GFÉ1¸¢¤üïþH }ž fzJ§¦'Ûê˜Òèå`²˜•ô¦âœš@ý;+æºE)Žšn<èü9RÙ!„—y²2’Kçáþß‚‚–²Œ„s›½åæPô24Šw,H4 F1èúYoÕIÔË¢³ác””ìC‹÷ B?úùÝÑïV‚–îD™Cì¥ä•ÑtˆË"ÙúÏ SFZuí_Jç û¬³MpNÄý¦º›Op Î>‹m7›Q"™¢†ªÞÇê‹þL“”ðš; x×”œ0”ÀÐ!½ƒ—*’ïÙhËôÅŸƒ^â©ë#,{žä#OØÞJþy BÑ-ÞŒmãz†ÇÇØ"ÜMŒ8ó×°ž2—ù¯È±´ââ©j䥯@fá~?RŒtå³äxéí[*°5£lz@˜¼AK‡Bç\äïL/ [z"_– ”Ä[´Êc�¾3åÈHpÈö™§JÇf ¬ugJ¯ WŠ’õEÁî÷°ºæU?}6zQ¾Þ'ÿ·@›nнº”@ú<”Ìô”NŸd„�±ÑKÒ ˜”sŠ×ðïÀ;U.<âr3únMQC"£)¡ºÞË\y¶uXD~„¦~aħâ0i '̬ž6¯jŸÝǸTKT~j)F¢‰ðÀí«Íøg߈ê9‡ÑmkÀ9¥}¨@锂–ÎTYj^¥{…1îÇYÛw˜ˆ{¦ ».ÂWÀÖ`¢}ìÒѵ‰íY2ç ûÞ'Oð,þ™BÑßˉ%yÉœ•«w¢M——Òɳõ×'TwïdÃvݼƒ©à5IvÎ%¤Yê”wðR[ÇaÔ]æ6BDõ]Æ©Š”Éj¯µ4žwãÓ½ß vZ3]sÀ^´-®ù ;ï¾(ˆ8�C#Ö£«gþÖS¸¬K ;¾BCÈåöíÀyT×£ÃÇïËÛè¶~‚‚ޱ”rÔ-+eò†6 …‡Ñ)êÄ#t.ŠœkÖž!!!ñ©C9lÅŽÆïbBœ-s KÇŽ€×À:¬¨,)Day-3´klõ G2^ â¹ÈÐMÖ§gDwú/œúRåܺý¿à’ $Ù«K¤Ïóøßè¼o>FWÃå Š0ÓÓ¶#$nu¼D^Ò ˜”sŠƒ§z~‹&צ4[›àRÚÕ‹‚à2õ.7« F&¿&}pÙv#oårö>%Hâ(ÚÙNßAÛÞ*X;FÙ:ÝFo?ïòĉ ïÀ#]v ¥4²a uš :dùÐÛšòbŸEÚÒ™”ARc\»$e–£ƒëUö±º´ #ÿ/9ØúS:WæÅcôY6cõG<ÕóÌ<Ûm»#âÀ‹‚;jË»E~² ÈyMØ9't:¤w0EƵºë/KVœ¦F»n…‚Á89À϶,“䤗£r`çÌß®Îï™ýÕ¦19Ô·'¼f©‚®9¿ÁÅÙ±™ Iõ›È.¯ ËFs¶êɨ$Íü%ÐS”¬ÚREQ8R¸Nâ9‹ZÛ͈ŒyQû§8*Jì­q£vÙf\Í"&®~ ä`¥LÞàçø¶g(‘ @„ÎE‘smØÒ“"qàNâ-dQ¦§ðÔU¢Á·1¤È–ˆI £JZZ Ìû”CQU’ƒ*ƒSšW†–ÉÒ¹E¶W¼Ä‹©ßÈžS¤Ï3/ËzO¾Œ^—t8WÛò¿£kuÌþR5zI3äøQ³Râ2gÏvã$Šr÷0ÅgîýçÌá6Ài¹0Û¾Å÷-gÄ;engN3=ç�Î]<‰ª¼·–¹Ž[P˜.ƒ’#òdó˜ü—­°4|«t|¸z©ñ[j·‡N€!n3¦<–%’W†Ö_�^Xr `uSÜí‚ÎR<û –‹×1¤9ƒð¸N¡*';œñ+ ¶Ïˆ²¤)´†{Æx'ª4¸Þk0ã:e]·¸Ì¸‡õ#”£¼ÆŠc–Ïð_Î;‹êÜ•×ó"wRÖGhv2GM%`Bzái‰Víú oÎè¬Z›Ø2nÕõèÈ"Îü5¬§ðgÛ¦ÈaÅQ“f{Ú¶²,åyó³W2}À èú' Ž,+“ÈÈ$8‹³à2†Šÿ‘ÁhòÆÌ 8θUάø!ÛѓιȟG/ [z"_öJ@eb/Åu°YY%±"ûÊanùF›ŽÍ•´µ?Çõ¼gð6ìEã ¨bLéYe0®y8Âc´ë šnèQh[´{•Í¥â0zt´ÔKHŸ‡e]›;!€[Måô·#¤muV†§b”1œ^uü"‚ÌÁÌAE¬G ­Ë\†P=b± 4+ƒ¿`“µ÷¤2V"0ÜΖgŒ­ÁžfºÆÜ¿ ÀÞ geê;nÂÏKìºëñÁ Ñ4ìlÌgû}%²7daUÅÜùáS¶_ÇêºÓD‰Ø{‘颗šöÐpòÊÐã„h©Ìëäiz¥’å-´YÒñNŸ&4ÖסAÆQ@™¥®€ê>1žqª®[áwùÒ2 `®aFúÝ(Y½qÑË»äõ<®?�‹û‰ò_¡GWP¹Â„e›NâççSxжéÊj‡¾9‡0u{�·žS­.Uæo2=å¿à¸¡×QÍÎòˆ»ª›ðmÝf,dâð K»Í ËÑ*äGmAŒG­Ò¤ é…ëT%6–É0SV?Pó?2IÞPªaTŽ,­!åÜ¢s.ò9è…aKOäË^h£LI^JÞ&v>ˆüŽ^ðƒK—Ž=ã©Çö„:ègì9·±çõ SzVyg‘2,Sˆ„a›5Ý:Œ ZçÿnaLÝDóŽwUíÙcŸ#½ÀŠ+R—qH=O2p–õ ¢§˜7;ç%^Ž´¢xE.,}#0H[³SH¦Œ%!>ÏmÑóÇ@ZÆ@I¬G ZBuÁ§q_€­¦¥UŸã¼{O†oâ¦hR’H•þ,˜gðÔ­§^+Jç1ëF[m|J“ÿ£˜ŠîYî¨Ù‚MÍÃì¸Q_ «‡í/î *ü»ß ]=Z^Ÿ?¨²¤Æ8ÛŸ eMp‚Ú™‰›™s=JŒ;_·ÿ²·Áå¹›RÝÅhI))'ÉR§¼OŒg\§¦ë—…±ÜÓhØÞ„AÊ;KüL˯ϮH™Æsö|›™~ñnÄq³ÎϰMWV³8äç¼xPÎßê L/ÐÐSؽ鿌ڪsÎö7c?¡Ýq5±«Ül¨ dpS?ŸÀÆe2w.eõ-ÿchÒ‹vÞ„¤Ý‹IžE?Ät)Çexê r‚Íá6½V¢M|ÛͤïCwã‡XW%ÓÑó1~úênÆ8å’DΈáÓ´Ô$uÊçÔ­Ñ;xOµù$»§(à )á8Xv=ƒáy yàj¬BNÄ¡gU!ë{õ×~Œ 6º¿„yu ꯨê¯u‘�Ó:·döª½YÉöN\ÛR»ý0¯)†åköoG/üºˆqiAzöŒôNã~ÿM}©‚”Ù9Ü+OÖê˜RÓŠº°‘—…UUxÊ ìû6¬È:„>NR3)±e¶]GÍË|'Á9 &+&ï ÛnŎ슈ü€áv¶/Ù>­Á¾¾Š£&“½¿GkÛ‰ î´ÌÏÆJS®\ØÓìÝbUˆvûÚj±Þ|½×Ž£”§N �uê{üï¢GYÆÆRÌcëÏdãwT¥g¤Y2cÜsÍn&µ’#äw¢EWˆÖ‰M›éÕ!â÷6 wš¡ $Ñ:}43¥Óý)ï‚6ü)éºÅíŸ$ÞL7¨Ï=·¸²O¾?åÀï¤Z¬37àÌ1¦«0¹&¦frvð*ê ·¢qˆ&»/òs^<¼lÄ:ÓJ˜c²Œøä‚m÷&v391{Ö@©['€é=c]8ñù% ëcgqs‚Ø!ÙÝj¨ë##!~¶Óyi‘%¹ÜÔ#XgŒÜÏs„ø*¼èAMZ¾Dõ —Ë4I "gÄðiù²WRbâ¨R¿ùØîžB¼_¡2{ÅìœLÛ%:dpzV9‰VI ü1ö=5k°NwW5èœ[|„1åEãΣ%N÷Ðöáçm:H=O2hfÁ¨S€2Šô 6¦$žûi>§¨ÀÅDÚê˜Rc²%¡Ž92ŽºàÉŒâN+Ê*¿ÒUNê`&%Ö£»˜Âk¶åǾŒuz~mAÁ3lŽvô >f¿e ¡‰QŒê‘õ1uÌ~øyÚ|ŒÒ"hØð»gW-š¿=‚¼å‘´ZÎ=Ô~ u–C¨Êß)î@Rö컉ûÿµ·PÔ|‹$pc®‹eßK3 Œ¶ôì•òÊóÂLdç«Ï¹zð3Ÿ£3[—?•›:ÓAƒ·û+TÕ mP”[†2DÜ©,—…©Í#¿E~I'¨ïÃŽ²TtÝ á¹û(Ê,àâëF1乂ƪ ‘=»xàë# vÿÜ8ý²Ò^GF¡c/æ²ìçÑãOÌ14çÅ_+ÛVäVµÂ36Ž{îóh0óIÒ²+asºÐÒxM™z(ukRPœÅ(˜Ì'ä º g‡¡§v L¹6ø¦£÷¥˜³?ôð"vnÚ³}>ø™^ç÷õáb]Ò¥ÚÑÓ%5ˆœçIäË^‚DQ&òî))@³Þÿ·çÆp4ñÊp£áCì:ó}¸^˜“õ9ëPž&騡ƒÔ^}اã ä¸jLá–ÃY­­>ž½¤Y0êQ‡f=d´¤S€°Õ1¥2Äȱý81<wF”ñóyØ. ^r ¤e ”Äz”uÌsÏ•t˜ÞAYëíäJ’¸Ô1‡¦Fán?WBiÆ™¶B˜ò5¡bÏ9øÔÏ9ˆû|}àDÞ盾ǘzF2š¨ÊxH£ö” -=[º¼2\iϘ§ö^ÐQCæÄ¦Ît`x(>gþæmƒ_T$J§CR¢o™tÚû„ÄQFÞu‹êÞ–ÃÄôŠü_ŽŒRîZð¹üÞ oÎZÙºì*ÐÝôàúgáQß‹1C&;$œÕyÆR†,¾Ò `íôk6A©[“Bã,ö‡¥¬VÂiÍŽaÓƒÐ=¶À—ÇÍÈ2½J×]<öµÃ’·5®ã’ð§QšÁ;‚Fô:i^2º¤‘smXˆ|ÙïÜK¿»§0P¦¶2áDÇ+ü Wí¯ËïøÂK™J\˜< 9ÀzÁ¿— ¤5SJZ3)cÜÈÒv:˜65cDf# ;ß1“†X²Ž™­ÙÙ&8'➉;LJ"‘äàœ}W²òMJçJÊê˜9Œ–ñ¨[ÐNÂ×{Ci¯j¬­VyÜíÂɦ芹S–ñFíiAWzÆ@NòJžÁQ7¯ãC饛:ÓAÃñ¬tíxC¢ <5貇鉾©îJGYy&,QÀÞAà.¼ìðÜz¸øÝ ¸|ø½AßœùY¬Ä±8Z¯-ÅXcþÎ^ ΫÿD8Š¢÷¾æX!ï€ ŒÀ}Þ†šòí¨j8÷ÈC {ïˆ4(ukRPžEê¦/0Öù*K¶¢ºe�P�þ~®— À/iG†¦±÷÷ûŒ~ÜŸ’Øtåb|ê…a òe¿OÐÕֺ͓'s È0Y“òÊpp!w?BÖ÷/œs]ÇÐðwhf—çbBj¯ŽGMÍ©˜‹ÄnoAýŽb˜¥ú™<%¿¤ž'(ëh _L©ku…2ÆŒ¬„TÏ^\´|€ê¶[âžzRÇ+eí1åg±uòÏâŸg–X;Æí¨\½mÉÚk“:WRUÇLPÆ“’´É‹1ãÍýèÑ‘H[ÆCµ§eéYA"‡¬¦ÌŽv×ÅÂŽýdÂÉ÷™”›4Ó?g|)g)*­lñ@Ìߥ,‘'ú¦¼(eÉ÷Y˜‹%òk"HÈ,¿…öæñrBðçù½Aßœ£Yc‰ï/:LhMZâ€ÛV¶>~÷_F}ÑX¾íŽèltŸÂŽu{¥²CbÁ9}ºa·V »Ä(‰‚Ë|‡•%…(,¯…Í™˜ ¦dÝA)Ï"uÓƒ¥Šd{V¼\Œÿ^–�"_öûeÝ<±Ç‘²M)¯L�¾3åL!HÜȳÑÒE‚Ô^Mât=jÇ®íçbK^1HÏe¹’a§”¤¢Õ1GÁ‡ýpž®gw¼vIf­„ð|x¿Æ=CÈߌÍ2J"¥ã5ée"]¢»˜Âà러ƒËcôY6cõG<MúÁ©q®Ö1”ñ¤¦-3lœ‹]h­Þ†êÖ.ÕÏn)Ù; ¾Œ‡*jO‰d¥g“È´4§„¦Ì–ì®ÇÏù–ýèLð¢Ê@kŸÉ:±£Œ8çúŒl¹žv¹Å⃭%—ÖÞ&ú¦¼Øg‘9ÊøšFÝeU0±ï2NU L¸¬Ÿó3±åÑ!C K>‡ßôÍÙ³¶ï0w×ÌÝëìÌO´ã£]I2çB˜ ΄÷Ÿ:+wF¸1µÄ„ÿ¾¸<šyš–…ó>¦w~Šª’äHìÒ’ÑkœÅüd”r‚“fž.YÐqœ‰œkÃà÷(Dtƒ´nžØãHÚ¦WF)Mø+v4~KX¹ø|¤öêÃ.´¹ã¯‰—˜úåk”.)‹Ò³·¤8jx;­ŽÙß]BµÒue˜83/éR$Ü\IŒçaø» Þ†ézxEÏ3¥ã•]&ŽÚzåÂŒž¿>× TlÜ)ñœÄuÌ„\hIâë˜ ÊxRÓ‚–عHZÆCµ§F“þ!eÍÎM¶¥9%’Êl™îzÜÿ+ mÿ–ô΂rŸq9›zrypÇ3…ãîü$ ñw©AJôMIÀ<Œ–ÆÞ—,@(Œ“§ül+À2á;˜ËÙÕÈØq ª{S"ë)�÷©@èÅ^¤H|é›óox2ù<ßÀZYŠ‚Â¨±µcÀ÷S˜c(ô>ûÇX]Ú¶pFSh Îï£æìaÆïƒû"·a^ü"¿¶à™§k#Œæð Þ†½Â%Ú,V §5'ï=Èæ¥ëÎP#™§KtåbúÎH†%€È—ýî@\7OîqŒK;ÓX¿5È´ic ã•yÊl%¼qU&�ü£‹I–(¹W“e:¼fBzQ3¡-wRÏ“ KŠ£&U­ŽÃ5–Å\š/15â@Åft ½J~IÆw6ÙŒì¬2Ød:¯‘:^™ñŒ;·S7`Ûø¦DJ+e3uBçJ4uÌe<)iAËö,¥s‘ƒ§tµ‡¦ÍÜ¢Â\VmâÜØ)ÚÒœ¤ÜLŽyÑÕvëwÚ™¢"¥OdûŒËYB)ˆÿFù»T˜íìÓîÅ${o¡n´9.ÃóPÆyCyå%‰w”©34­8fù ÿå¼#(Cxî9†- qûH2‹‚|ÓƒŸ«O˜^õ$òß´Ð7ç¨lMGfÁ‡¨arâ@ÕûXc W,zaÉ)€•é~zöX(ÐÆÒwT]z—7挧Ûã3¹£¦~›Nrö9Ðf±jG|ÌÌÁ[Âö-mÓrp=…¤ôŒ®\Lä\–�©"K”uóÄGÒ8váQðʼë`)²²Jb7ó¾r˜ñÂêÕBj¯Žµ¡ºÊ†V•Ra·g—WžÐ–RÏó*@a@¤¤Õ1'ÍÞÍJV› Á›°D²ÚBÌPÖcxiq ÌàiÏQìlôŠ+v5#?`ïø=üÏÿ#z 5.à‘nfû%÷Š*f”uÌÔ\¸³úârgMZÌ ñ\äÿ‰€”#ˆÃh¿{¨[ÐrÅ.Þ¹Xˆ’Ê£8ï“p.’‚2jO‰d-ÍmøoïÔµ4—ä•!ß³óC„L˜Î‰Í>‹ÐA JÇ?Ó¿Œòw©jÄúȼBÜÁ›þ&²ËÍ(Éå]¥Ä¤6íÌ!;7æç%‰]†æ ø]u(ÉZç`܃óÙð>[$ð5‘E(0€–ê2Õ9ŒÞÅ-¦¬=8—‚òR]sV¸1‹P]Ý!1„i¯ ÛeË•BSx<ìUdôR!ƒÆóq°ì.zÃ2zÈWcr"%ªB ÍbMr…øïRÑô€òž¤,=ãkFTºÉ×Z/ [z"_öûUÝ<m­;m %¯Ì:«Öj´ù,…¥s1)Ù$÷*iÔ’ô³Gßê˜)c?Žs"†#½Ë³Ëñ™¢€~ˆM[:Òóµ:NŒbÐõ)²ÞªÏK–¹e*Fóˆ®<*Pf'h\LÒuÌÄ\(ÕÉÖ_Š#ˆä-hÙ=ÑÒ‚ïãÅÙó!xn‹¨Aµ§E(àEË¡fôÝSõ‘#la@4*GÉ+C*38^`¬ç ŽT•£0f~|ˆ´ç¦tbÓ:08¸áëq¢Åf ßõ§qî;üÑ{žÒñ¿ôðwÍ!è>‚B>/^ÊP»¦\|ÓQ=Qô¬Ó'ü³Œñ’¨A™¡É³x?Á*’íBK'[ýÅ?Ór;g³½bž‹Ÿç¿`eöföï2ìi»#,žºæÌ¹1·Ç“órGMr-n ‹Ûj±eTÞ˜r£… v:<…ß;¬t\3ìtà2Êû*³WÌÊh“TÖ]Aº,Ö„àˆû'±çLIÓÂ{’²ôŒ’ãLä\¶ôD¾ì? «u'M#å• aêö�nÅw ¾À”à3RC~¯ª;Býi'ÜÒB›¯äìͱȯªóZre,fEÏ‚‘~æ´Rò_G–Œ§~ì[ÔÙ®ªÎ^º[÷¡¨Z¦=4eve3aRg5)G5˜ñ2éCGsƒbXÖÙè’*·ákŸéÀF^VÄQö#ömX‘u} UD”Q{J—>QòÊ$È 7ú.F™”ÌP7NÈF¾z(CÄQCìÄž"Œëþ%Z„±|¤­GµC„l—ÒñO‹Ð=¶À—ÇÍì¾J×]<öµÃ’·Í~Q£Ž’€™ó’$êN³Žg^‚ Í™þ6œñøÃ{t° ç\>ÕžeÃP«oð½)‡<ríÆÊªN¶RñˆÞ—w¸è›ó¸ša¹xCÊzÂã:…ªœlTuND~G/(£ÒƒT9¢rçÏOp{î`\6Ÿ4‹’Ù£¾+h¬;Œ…dœ;½»pÉó€ý}HMÓÂ{’¤ôlúÚöVÁÚ1ŠiNj?ÄyÑ^bjü<î›RÕ"çÚ°¥'/Dþl VøHSàˆyeBS˜¼¯$c¸ëÜ’æ;º@*À×GøKÎ×våF|øÉvd¯Z‚;ä¸H!÷<úšz�í(Â%FI åôQF;¯1L Ãs‹B9ag.¡³ L¡•J·}>Š¡_ãèÐ0š7ïÈè ÌN ¬cŽp÷à÷õââ¿"%–7å”aRg5)G-Âéýœ#yîDÁªµÈÏ/Æ~a¥‘­QwHduÁÿ’µN+Ê*¿‚OÏ&6ÜÝM ʨ=%’•>5¢|½E¼ô‰2C“Rf„†Øß ®/ù³ˆ•>:±Iðƒ­£°²m]Ì0œ@`ö2 "0~C7:a·šQº_¯ÑCéø§Æ Œu~Ê’­¨VÊAð÷ó½;�¿èybz ·Ý»ý ¼“3ÑÕví],æÉ|â%1ž¡©š û4vH·ú&ŸƒØ}ÛöÿCõÿs ¾øÀ)¿ß†~Bÿxä >ëÆÑ/ú!“‡§½sVJ³*sçÞ,ÇAUÊœlÁÀ„JŠÃè:iÇßt<4eåË[h\÷Ó«×bCæT8ðƒ%&Ó:Ýü©izÀ@zO-=crÞõ^Ï9€sO¢*ï-¤enÁ㦇ަ¬Âöÿ;½0lé‰|ÙL©¶8‰>Ž Q %¯Ìl9‚–0y%Ç\’ÙÆ!³WC÷ì(Z¶ •ç1½¦ÑÚøà4ðxô×Aæy÷{á:µJ䑦³•´Ó‡´óUvû¤„Ž A8°»�&GÁ+àŠ.%3à$•aRg59;e#~oäáµeùhàŽaîШƒûù�êß?)¨42å|t2›] †»»©‘$j¿21C›8ßô},Á.»3¥ÚCSFD)e¿× ›áŸo"d”NlM1¥»dœí{¯Ÿ»î²¿Z3ܹ€—îê“mdŽv7ÅãÚàL(ûÕ RއÛh\_6‚C~´•e -{v—¼‡]®úÖi™jÌÐ ºaiëaûóG\«ßŠM–sè™Ý³×и£UÂ-åiÁŸKüN,eFåŽD>ò2‘öæ~ô$8tä 6ç ~Î+c€ÀŸ Œ*eN‡ÐìEseOÚ#5=z:ªf^+ŽšÒp†ÝT?ê·Ô+öLhè4 õáRÒô€4sÈhé¶5áîa\æþö^8++Pßq~ž-Ú]NˆÙ#|zaØÒù²?8o@÷?P+AŒ«­ð ²Ÿ¹Å>î¨q6)†78;¥IÁyef˜aýîzÔ(—_T˜¸ÑÛøÖ[.°/^›n™½ޏ¼‡Æ¡ÈœgI ±5ÛEâÄéÙ MaÜë©}…a®¢´5(µ|«Íg˜q)¡@) púPw^#ËNàçù¾k´ÂÒð­õ|¸z©e K-£·ä#X•”ÔÈïè-§€á:æY0ÅÑqu—{ç>«ï2NU L¶S•³š”œ=‰sKŠ#(Â3 (üÝAσÔäˆv œÁ¤÷ ìvÚ½ =ÅP×8Úe÷l²ôdõÐÙÒŸcIfbj•ñ°![AÕùÙkQd“l)_Ò„!‰m R'6¿G&Ä®¿PÉø žM>ØCúŸò #Æe äBšuâqž¡Ï°Ê´9l¼*w± —H*dÙßy9»O„ dg³|¹1V§Ÿ„ð¢§ië%:ÒË9$sÔpú/úþnØ£z®Aè›3e@ƒ Œ*EN…#¥ ×fõ§>t7ïÂêÂc¸2Û ^§]DšyÍÎsçlQJ¾{ÐV³ææ\³mcÏ©W·NEÓÊ{2ê´Ž)=û?ð×®o^b¹>lƒ(4!œ»µmµMð)ƒɟQÌGÅì}g$ ֞ȗý~Á£ðwÐm·b‡â•“!Ùå0ªp¨¼‹+ÕÃB!c—pú_%[ÓRòÊðCêDS×=ö©sxéïÄ7zöAf¯†^ÄŽôüXGMöNÔÙŠÌ·ÂMåÙ{9t›yTÊ”‰§º[dÆÔéCÙy2;áóaâD}²°ªâîüpY¦×±ºîß̼Ä‚e$" ä`²/¾Õ·$pül+À2ÙöÐD %g§äbë?bGé;¼[ ?“Q'ÐÈ©ïTyJ÷ûòÍß0ÖVô´”ï.Aî®+x$*Ê(Ó“—l&&ß „Y`”¼22#ô´w2R8u…:–ʹè±÷£ç–¾GçÀ .'5)ï�~7Qã2r<([·ÂòeÌYo`Eåe<xìÃeKa"‘òB 'e0ó>o¡œb!F¶ÏœUØTã@Ÿo„}Æ|î ¨+x ¯)å0‘_[ð½.‡<<oÓÈbæwJ+ví½„1áó¨úæœ, ±BŠ@ÞxUjœ3žc(‰?'/zP“Æì Q2[Ê,J~ߊf¢©Fzšuv]S@Þô€2sˆ¯Y¹Í1{›`)ȃÙf‡³çŽB¼ÄµxFâ¨Édºá#ŒµíDw‚ægc%[½åbQðµÖ ֞ȗýþÀki/À¦28KjNÁÙ}m½ã‘ßÑ Z…Cág`§:2šºGŇrH£™T䯴۫/0ÖaEÅžxr¯,?¨ì¥çÃÚ7!|™PBîy’Cé²tþsT•lEUÃy¸Gžbzb£‚J?©ÓGUç5Ê쮤oÁ&åàF}%¬¦ôòÔÈÂHÇðì†ïšPÇi¥U2'U¼z5¼ç„Á”‹¡«†Hâæ@ùYZà\ MøÜyGÐé@ R¾¶h;1Åú¡ç›®bhú1<ÍŸ£Ñå[@¹ÐîRR¹A_»*¹6/ŸYØa)óByF“ÊʒB–×ÂæLTÖtaÉfb²½@™FÕJ¼„Ú¬‰=˦èÇé] úX#Zc”Z>ZqÆÂdœ.ŽjeÉ8¥qHy'Æi·J&Æ:ÑPY†’ê¯á L#àPÞC¿? ¸f”²!LùΠT‹zöŽ�»so4nëú‘Ï1Ô‡|r`ë3ü3†5õ7~²õ•ÛH@ßœýpÔÖãòlV‰}®¨Ø¸SbÍ£Á)uÕs<¿5€Û"úk*œSýh(Ûƒ3ݼL†íù¡ëpÖ!Ý$㨡̼æü›UØÓæUÝ!÷1.Üý. &'ˆhHïÉdÙ9³ƒÙße­œžg¦¼Ì~W-š¿=‚¼å‘N \Go?ÅtöC¨Êß)\-À¿[/ [z"_ö»mf¤1e£??¼)’]Z…CáNÙ_Sþœ}‡9¢¤11|Wßá%fÎ9¤HÈ_ !¿W™� ŒâÖ]¦”(¤|LàJ 3:È?Ϙ͈)C^Ö‡Rd†>¡Ç¸}‹;˜!ïþN^àÇ€G’¨²ا=íÀÞ-VEÑèk«Åzóô^;ŽÒ,Q§ðr°ëL<;.™«vÁy§ –¬×aZÍ>K4k‹€$n”ŸÅ#|”e$” å»YªŒx;áJYNâ¸ù]˜Vì†ëÁCø.D^Â]¢Ñ{#- æ}ì9?eç=9R„±Ü¸431I³À(#¢IPbÃY0Ùÿx˜:*E<]߂ݎ:'6)G©qÈæFv'ÆM�•U3C“ÍWÔŽ€Œ@–½}·e52vœB‡ê}*C”ïq/1õø¥ŒÊPwBð5’C8à`nîŒ]÷è<û)ò–­@IÛ½ÈïÒBßœ™>Ÿ­;u¶oÊqé%”{óNukÃÀ—ð¿,K¯™ñ›7qw¾Wúýýzù™¸£ó jsT<5²{^3óš}þÔ ýû=¦ƒÑmô²ç0ÚÁˆƒ’V€öžlg²o,n}Ô¥ŽÓ˜pîÇÇ®ù“/›¦ý<\ ¼aAŒ÷ÿ„!AY(r® [z"_ö{…ò‚ì‡PQqöî^\;UJ2Ž9…ã¥ÿvf­éà¡läåÙ(ÿŒÿ÷~˜7™õy)£™ää¯tø£íÕÔ?ÏK<ïïÂFlÒNŸ§ðØpa¸ÇÞYS‰žvzÀ.5’ì}7|éÆŒ·PÔ|‹‰~1(ŽšMÜX1]å l±^ÇoÌàjÜ%§ ‰‹‚ò³Ø…–¬ŒÄÄž}Dø6'7l(øn4•Æ¥ÐÁˆ!8ŠÎ†QR²-^f˜üèçò¾ß/¬4*µ÷?ÇõhÇÏàmØ+)$-II5 dQòÊh”Q¹ (Ú B <“ΑĹ«£]8Ù4 ³c ¥qH{%Æ©•ÒŽ‚€@–ýÕsÏ1liˆ[ë &ü÷5C“|/È!ù}ûÚk&¤ž”Û[:À¿C ü~:qÎAÑ@¸Fp$2ŽºFð’‡Îƒ;QÙ|SǾàë¶CƒÃG5ò³‘±^'wQ4[º¶–3WÐ×wÿj:/™-Í>nj÷cdà8÷|„æ=;>5ŒÂ‰T´ ”™CÁ§˜|ÿ<sÎn—Û+óPš"§e2ˆœÖžôü!4õ¾n;êJ³"Y'25ÄÑdN|µŠ“\©6rÂØŠºžG‘?˜„ÑLbòWJüÑö*éó–ÞhAÂéoTF~¼4ÀÓ®›P±ç|êó<`W€BèÜ»3\bÑ÷ jÖ³‹·÷ l¥ùe $qQP~S€ºÁôâ¢åT/rgФí¼Ä£Ý‹I^Þ5Ô6ÇeÉýOÉ´t1ã©Çö„{ð¼õÛ`Ñ•y¡F4»-Þ ã+ C’èêó!xn‹çsòÊ„Ãwét ev¡{èüü(lÍNx¢í|ç¥c>cS5„:ÖÄ•fŸ9…ú¿—0“Ý“èîH<1® ´NTJ#˜/àwÕ¡$.`i±ìA‰ù¬xéÓßßràgG+£†í-ߘª===äç,‹gõëié®lÝÕq{Jk|­‹Œ–2[z6kE-û"ÔQ†c®; èQ<“„¾ƒ-­�ƒ@PÀØýÞw9ëŽÂýôÕZ§üé…áÓ$òe¿;„~EÏç•È[Ék`W {Ç4³Í<þ|B¢ô)¹Â!EJÈÜmÏ`½÷| â•¡$¥_ë?(Ÿ‡´ô&åNŸÅÄs µ@¥õƦ'áë½q¶Ï¹3÷–çºd7$nôÖá­ˆ<˜&¤5Ï_;«*’8ÊÏb+ó|x¿Æ=NÈߌÍR2¡¡F¬6!Þé!ýMd—›Q’ËËädä •<]ÂåbÏÄÁ²C¸è ÏiÈWcr"eÄ@[’B~okDWó²"%)/Ø}· +²¡OO B^R™½‚ÐYS¬ÓGéÄfëŸàÜíBkõ6T·v©~vK‘à ƒº4;ˆIÿP˜{":¤D$qJf\Ó:Q¹<†žo`­,EAáÔØÚáq-8Éç'X•ÐÕ¨�…–Nèègõ»�¿oåá¨ù?Ï0ævâ´rBýéoÑ3øXâ,ê‡üœeA™‘ÉÖmtD"”2[zÆgû«kÐSê׉Æò-°89ÚBr05Œ”¿#¤XºÐÈÈŒGhÁ™…7È1|š^ý|•xqïwh®3cc^9Žpç{ˆ©—25ÜKKÜš– ÔÊ ù+-äö*–³h`ÆÖéž{Ê3(åÞ1éh(ÏåeòJ 1¥7úÔóë`9׆SU‘ž–…Âõ8Rø–ò>^3e˵Sò¢±âS´ù8?ATјŒzQ’ÄQ~—ñ‘ªO±»àm˜¹ëSÐ}…œS#ô=µk`ʵÁ7ÍtÞýIÔ°¡”§|Kµ\lïW¨T:!Fæ$M¾IY’B ­=G]ð¿dïºÓŠ²Ê¯ôeÄòÊPÊlnè\qzçYg=g!Nlbç.iiöÜ9Ÿâ "ø>Ûƒòc_Æ’8mAÁ3lŽv1ãšÔ‰}Îtd|ˆ¶÷T½Õ9IýPRF¦†á¹%*Ÿ_àûI<Ûiÿ†PD'Kÿ V®ÌEõ•»ú÷“ ÍYj/$ËÈLææ!¹ûèáu8¬¡¤ å568¸It‚2[š=ÏÛÑ5¦v’¾h5šFað5£ x`sáõ™…çšÝlÅ“#äw¢E‡Î(rF [z"_ö»ïÁî¹ ûñOa.yå25K´5íRæ•¡„Ì^ 4c“É„´Ì\dg¬cFø]Üá-^{ …ÞEõ“ž=Â˄ր †±ùA·iJ»Nþ<ïᵂ¯0àÜ‹âú«ðùÙg vÀúÁiñšÜÀܸõÏ’Îa÷ûoâ¡®;ï nÞÂÓgɯ¡Ð}/úç‹4¥„pŽ{ñÙ ›‘UÛ"wÖÝs`kÑ|yÜÌ ’·Q麋ǾvXò¶†ùyD@l &Í(Xär±Yð»Ñû“AòMr± ßoħ‹iˆñèê0†Þ•ê!‘BÉ+CZ.É Ò˜Ä9£fÇg¨*Ø4¿£&%NlîÀ tî’–fS6ˆà²q/Ó;(k½­³tŒÐ‰ÊåÙÚ¢˜£ü\L{mØÞxK\?4Øat¦¿ g<þ˜¿K!ÛüÝÉå{±Bá£ù=Š£”—¤ÔÁ=u®=•epú {ÎdÝfýø¦®ß«Ïa÷W¨.ªAÛ x#Šp‰ÑLïg2±†Éž»Q²z£TŽ4[Z+#sl�v§èÓ RÐÁh©Ã¯ìüf";?6ƒonpî®]Á=‘smØÒù²? Bz½O"ÿ¥Z©­/˜ÞVÕŸþ´¸©aK˜W†2{Uiۛà sf@‡žöâà¶Sð=`|¬ÍÛjáŽNÑòì‘^&¤Ïj¢H»6UÖI©Ãåµ¾™x­ ž6+l¾HPpvóâ5¹Zäi1c3²3Št*V\‹'ŒùÙÅú¤Jvªç´dà žöÅÎEvz*²¸ó T–lEuË�Jw7®ð À/Z²D*O)3 ˆùV8‚àëtÀVÇ èº“8ï•Ì4ÔÚ³F Ki tX\¦%3TC/G !¯ ©Ìæë¯‘V}M¾ú©qbsF¼s·%•GÃëù-ý -ͦkÁžólœq÷z—Dx‚cp~ô™>#jÐùo¢ûâ7°Ÿc{l¨_Ì ‹‚—¿nwD¸'¢àŽšäZÜbu”ä8aoñw ¯Ã¨²Ï´þ^5äè–&øóÈ!¢£,‹ã "޶÷_ôÂöÅìúD°æÀðP¼eþæmgÜ[ˆõîØ.iÓhØÞ¤@X Êl騼Š1ïxaPw0¢“)CmØ[Yޱçø}âÍxC’[ýpKV1çõQ#ÞQÃu”¿`eöfÕÿÇQóŠÁI%¯¢±î0¶iNºÛ…K]…–ÂÁ†l­»&ÙR�·<ÃÏÒå•¡„Ô^åÞç£S!šâím÷`ϤrÉ8w|¸¨žgÒ³Gx™Ð”i×PNâ½#a%()ªÓœÓ$ƒ{oFöÊ4dÕI8^5Ú&Ž:4ë"÷NNþ3š=IŒ‰TÎiñ­°Ïr}Ь·êÄ[K”ò”ÝdÄwЬ¢½+óv²³É;ËlB©L£yöìâ–r™Q„‚úËsòÂ݉fóÖ·«äˆ>ŽÒ²PÒrI?ÎÚ:ñ$éŸò½3éSjœØIœ‹†@WšbzØwVX¾U:ºñ ÞÕKýx(üB>y‚gñzˆþ^®ÓqÝÓŽÊÕ;ÑöPÇ&3èLÅhÑ×kOà>h†åâu ){l×)Tåd‡¨" è0t7¢üý¸V¿›,çÐ3ûY×и£UK%Û�ü½Éá7Œ4Ôf{vs3Cóý}hóvÂVºåÎ_#?§…®9Sv›Õº?|„‚Œ7$»¹}’¨ÛO >÷j-u‚2[zì<j•ÆÑõê…ëT%6–Iv‡cßMÃ¥ÇDUBÅH<4Ê›c0—ù¯È±´ââ©j䥯@fá~?RŒtE~½Ž,‰®uÆy}Ôˆ/}J¼ÿSúôª¡´¦}¦•k±!s *œøÁ’“iD Ÿ–ÂRµîZø Lù × ¿iEñŠ\XúôRª-M^JÈìÕÐã^X7fÌzLó³3ÎÖ=?{%–­iÀߥ!HÏåeBi@§]€r#¼ÕÍvÔå­ŠDk¸} ¶ºÃ8ZUŒâG˜ºÿÕi3Ú!U„süRÓJï—»€)AÛõ‰ƒJžò5£Ê( ½ƒ”lÃ×Va‡ãÎ\¤+ô˜uŸHƒ”];(ÁÏBU\ùF×"mÎö¬*/ ‹:úÜègkm0êȺ'“óqÈðèô®ù#…©rb³Y'}èhnPöjÍ.ÝÜ/ñ  ¾½À /ƒ6­Dö†,¬ª¸€;?B–éu¬®û7a£ŽÇè³lÆ:ëxªçÁJìúÐݺEÕm”0ÄB´TæÎe²˜ÞA©·"_oƒFg‚«|ŸUÅÔògs©‚¯·,x¸eõvnGÖ{.sδú0úRÔéFßœ öÂ,x¦P|Ff)*­ªBxî>Š2Ëx†¸;Š!Ï4Vmˆ4A™-@TËO`ã²\Ô{E%Î\†9 —Þ9z^¨ç‡Ð0ì-žärVÑ5ó`óM)Ír_+}à<*‹Ù]çaïá6º­ŸàûÿB0Ìë£F¼³‰ëgqŒÿ ¿b(ŽšÒ°’6Õú-õð0Ã<4t…)ìS„LâÉ#ð_ÀåÐÃ,«F³OŸùùg€Ì^UëŒTůsÝi|'­,Ò€ôìQ^&”NÊ´kLÐ%‰ =ǘû./ŽÇ=ߣwh±yxŒ"U„sìRKà[ac s/Ý®O”AŒÛÃQçidHr:„5L™š5”ØÙ øÑi)ß O ºè¸Cņ²]MèV”E®´3#¸à-˜dŒAÃe¡©‰:΋ÐCxGQžÉÏü|sL{6uÝ”¼w¢`ÕZäçc¿ i;ið;j¶`'!G�7ê+aõ°}ϳ ÿ¾¸‚ÏÙ>ý5®‚JÍ›w•HÄ"ˆ€ßËdv?n3c*òS1hu牣]gÐtCÏY`†¦³ ›jèSÎæ|î ÊÙ|M)Á‹üÚïFõ¼pÖWN»'Ø;{Èäs*­ß¤´ §¾9Sî Ž3Y’jfÜ{[>FvZ´ãård”Jf­PfK³w[IÁîܱ6¯>„Q%ŠšKϾUU¤1ò2±r>]é0ZªèáòF¦[x΢–Í%ü7/0jÿGEé4y}Ôc]'í:ƒîñ% GΠ«È¹6lé"K3Ì`9€-JªYÚj¶ÀÜÜk¶mÈ’ânaÝ8)!iþÏ©½Êö¯ZÑ›àaöÃ^q=¯¸÷¾¤gò2!å[!L»f $‰#5 –RD8šü—HJh±t»>qPeðç!ì ¥”>mFYËí°£MIe&½¥S1 ^3J¼À˜ë3äÌ*ílޒĬ†ËBSuœ\oÑ™IîÄæ¥gyxmY>øzóÈyÜÏPÿþIqcœ4øÆ÷iön±*måûÚj±Þ|½×Ž£4ËJä¨èH¨†Æ}~`w2L2‘wÊÖÇsɇ oÖtëËHâúYãvö\s/ßyni‚?Óï úæL½¨ˆ‰£à‡»ðºÝðÜz(L¢´Õ(+)H¹ô¸nQÊôjÕÜò2‘¾2ùªÿž×Qƒ tVmSî6ÅQÃKö¦ýh+ËR2Šyƒ‰ËUÑ‘¬ 4fd¢†SZ,?¾±ÚqsvÝ…ÇV*çÙ=7ÒiƒM‡ÎÈ¿W/ K�‘/ûÝAñðÍ)g³#½ ̓≭¤¤„ìß2ðõÆÔM4ïx7 yS° ¬¸²H%bRÏ“ Êeò‰¿´Û™2&¨qR:}èÒ®)I∠ˆ%ˆ9¹ûÉt¸Šž®> ¹WY* †¥Ûõ‰ÍÌ!È”©„Œ¦^\´| ßAŠ“ w8àP¢µÏ0Ôyî1‰H-ñšÑcNi7ÔÝÊhYhª¢ŽÄ Û³Ïá­ÏÅk ÷ —³GÐó 592ÎÊà/‹{W¥DÇ[(j¾ñ¼c c eЕ|«RîùÝHfPË´>NÖgZ»UrIw·,¶n1~6—(øZÿÞ o΄{”˜˜ƒ0¨N‰¤ºµL%1—žýcÔô¨šì(w¸Ê1ÿß `w숻ª›ðmÝf,‚ó`^»Í ËÑ*äGï$-ý ݳ?Óˇ¤Ç¹8?é~üwõ°ù²ßð5VaO›WuH™ÑÐ…Ì–”pöPÅ)²¸?döª¢ ¯,E]s+ìœÃbvüæ5Ű|Íþíè…_˜$×8dž')¦nâLé;º´A'(>³ H»¦$‰#6 RZ9dëhµÓ€åj¿)3–p©�ÏšX’]Ÿ(‚”¤BO1ô]I£%ßy0È;ýÍɲ±±[hgþÃÈÿž”¼2)Š:&Å ‚¢Nâ=±£ô^‚È]QEù äÔ÷³oið-„)_*öœƒO½7Æó#É0'g榳#a 4ïYP¶>¦ìÎóç�ß¿7è›3á^ %&f'›2¨N òJ J.½8RÝ¡Fl¬éa߯KŸ ë¤+x‰©±ŸÐn-Åo¼¡ºoÙ¸w e«ŽŠgþ’–Ž eÇ.oUÛ‚êÑŠ3*`éý£æÕ!ô^gl¶‹ðNò4ýAtµE»ñ-)!5YÜŸR{•G@wÕ(qº‡¶?_Tã’òì)JÆN4vü ÚS|ˆ0¢G@éô!M»¦$‰#6 x¤¤ÜŠæ¡ßKAÌ6;œ=w0©û=ð•8ç\üÚRŒ5æÀáìÅ o{¨ÔÙ!)/X  ŒTQ:™2EÖAŠm ÊF¤kF nŒŸAiÆò8YÆÆì;Y”¼2)Š:j—1uÿµQ^ê,öÌ=8ßtCÓáiþ.Ÿ€<Tƒ2øÆÁ ‹Às }0ܹe°#aÊ@é\¡ìÎóç�—5¿7è›3å^à\XçpÈz_ª8În{¯J§ˆƒêÔP²X¿B=_¯:ì]ƒrٰܾmw0Ýð };ƒGÎJ¼ËÞ[X³d÷ys –­ªFÛÏ#r£ÅœƒB½ò"zÿÇÁ6ä 4²äË@Ý(Înœ7û;t½9¶…C8üyô°ù²ßx¤w}q¸ãLˆG­2–½ »KÞÃ.×Á Š˜”0%dqlÈîÕÐÔ#L<‹¿6^âÅÔo‚{€¤gïù¿Q·å8¼q™A¡‰QŒ FgI>\É×L5\!£$‰cßNf@$»˜f›gY«ÎöæÉÖln˜2*Ъ'‚Lšé@]*°”A©¢tò¨W|©ÍÈÎ*ƒM‚ÓÁx£x,Å΃¼³Ìjdì8…Ž˜öžlè5œÉye"QGÇUxÇë�Ñvβ`ûmòºíVìÈ^Áöïø&ꨡܳ)@è)»ÚpštÜÐé”uúPb¾Ú‰ÕæÓè»§ JŒvÃö·¶pÆÎb•[ÔÜiGÕçÏ~GþÞ oΔ{2ó—8¨N™y:[âµ+óvÀ\°kóßæýò¤ö-û8% i²Ë÷¢æÃX¹l òßVö‚2VìÖߘ² 9uha&²óUŸ3ò‘—™óŸÒ§W ®`rEtO{>Ã*Óf¦l1ãF1VJáÒ)!­—ðÏÚ½ÊìˆLø¥ÿ –¬EVÌž:€}%ÕpˆfÁ:}%±¶^ÉÀˆH}®¨Ø¸Ó�a 3$(Hâ(1Ö›s,N¦¨ÛNc¹»ÆÃÿk^øqÖö&⌠»%ŠÑÅž¢}ìÒ‘ED™é¬T`ÂÌ% îth'2Ùû"qjuâwÛQìlôŠІ;©@Ý£DÏ=ǰ¥!)Œ"ˆ ÿ}}k–J^ªèª²_/À¶¯0LÌš¶%5§à쾈¶^=2'T{–L»²/bÐq¢K®XÿÅ€³ž ܉ªMô3£Ü‚Ô ~„íÿN´Gÿs€¿w9Ìàáy›¶þºƒ–C—RÆg©oμDû<¢èôGšùKT§Ì<ååCk^KÇÆ;;\fðr£_á­ÿX !¥öí[(´õãéót¶²»éKtùŸ±•Õ Ê6äÄe ö‚Œ¸`—zlFöÊ5ÿqÔ¼R„F`ߺ–/`Îz+*/ãÁc.[ ±YáY@0€û¾^\ü—ösWáº)P뮩—ðÏ©½úg!~ÚªUYqÊ…‡Ñ)‘ uúp…?÷ýS7`Ûøæ+Uúñ¿Ñy3þzŒ®†3¸1b†ëMØ+óPÚv/òÿæÃtwÞŠ[›žuÄܹÂ#:ö±º´M§Ü¡ÌtbÒ?¿ÚQ#K˜I ÍË<€[™ìjc’®OLq¿dGû/ªµgJè ëSd½U'\’b¸ƒ‘ÄÑ=:¼€ßU‡’¬µq%c{Pb>«³Ä(E¼2¤ÑU&Ú,(ÌHêŠVüü4rºCà]\bbR(‚oÆʇžaÄñ1¶ãR‚] Dß]h­Þ†êÖ.ÕÏtf¥’ʳ$­e@ÚýÏy=òqx¢#?+£ÝS�}s&Ì‚!ç8£ ªSfžÎxëñÎ,…@ÄQÓs5¥Á‘ط쯂 ÜŸ”å‘Lö¹cøüoßÀ'Y% høaß‚žÉþ˜—„îú£æÕ"¼9*ËPRý5¼iüÊ…ÙïnDM6Z뮩—ðÏ™½ª(Ö2a¦ÄÝö Í[{©„NMGÑyâ$œƒ bÞ¶‹A<ù2"+.é˨IŒ€rgÁÚpKó''#²çþwä/^ ˆ 3)AÞö’Î$íú¤µáHQÁh#5È£{Tx‰§Ÿ`•†±Sh鄎ÝÀÀôˆðÊFW#P:½Ù¡¢âìݽ¸vª•Â5Æ1Ó߆3¿j_ÅŸÏÃviL\Vpã¤h[BYCÐwƒ.41‚áWž]CLôM)Ï(AÜýÏ�.£å–÷á`jp')™ye¨ëyù]Zèš3i -ÇYˆÙWß5ZQ[sg\½èëøMŽŸðPæn£Ì< Á^ºU®ûìíÎÝ禜ϕ€ž(í[^ŽÀuÔª»«k2„¦&q?Fîßs[»Á»2 ñG͵îÿ!HíÕ? ™°2¯3¡ÓçÏÒ¶‹œ‘qÔ5‚—ìâê<¸•Í7%¢«F°„ 3)ןÔ¤ì Ã»„¨=B]‡T`Êì[ð,©ò:ûý7õ¥×ó5#îajž[ñï=ˆ)¡r=z^Òèj¡©‡ðuÛQWš!ƒ—á¨1Žp‰˜Ú™˜8–É80˜qqgvl¶§Â·ò&²Ëk”ÿ>`.ÂÖWÞˆ½?B¢oÚû„”íÑÿà{]\&FãP|@w†‰î3رådÊÊýtÍ9Y04™¿¼;e>L¦•ÈÞ…Upç‡CÈ2½ŽÕuÿÖkI3O9‚à9ß ×Ð3<­°6~ŸÞæ¯ '›±{c68•°n<³© Ç\wtÛ&´Gè¬*A½7ÉýÊtk玭g.üYô°¥'òenÔºÿ† µW™BÓâôa<žLøiš.øÕ€ ={¤^g£NŸà†ïðêÇà9†Ú Òz cÓOá÷+\ Ü(¹å¹ïØsÉïaÆ÷Ã~8O×3˜×WwÉ_˜¤mŸaÔÿhQ÷f2ð®óMßcL=9f<}÷M?^µÉÊõ'5i;è„‚A:cH3j¯›‘Q„ÆA=™Ÿ)Šî‘à%¦&¨"{l)×£rˆSFWC¿¢çóJä­ä¿+½ãš;nbüùaéS3Á]ï2èn„Eiµû#®ÕoÅ&Ë9ôÌ:¯¡qG!ªÚnI¬/C[;Ç@xÕõv4 þþ≾ QRy4L@ù-Ý oãKÒöèðõ‘EèŃÿÓk«@:;ç%ºJ©Å¡oΔY0”ÝA¹£f 6)‚�nÔWÂêaóáå¹…ÎjfžŽc20%ìD MzÑÎ3úÛ½˜äüNCÝhs\–#&N53>Þ]]ƒ¶˜¤†N4–oÅÙËþ­¿1 m@ã%žº>Æ_ mð$\žaÄù ²ÞazÙo ÏMä\¶ôŒ‘?(jÝÿ#Ú«ÑËCc˜rmð-BÉS|T õ:vúD"2‘D-<uÁüúüÿÙûÿŸ&³¶ÿõè/þ²˜dBbv&¹21dlj¹y¢C‚FCˆŽéŒ>…¨pbQA÷Îg¨·3ðx ^NŸÑÞ2V‡ÞuG@«Ì˜¡3–»¢”¡bU¾ˆÜ•]†ÂùÞkµÚÒêy®®Ò8_ÉÊ5z!=Û®/Çq¬ãxº[ ¸RšƒÔ” äVÖà›Üߥ*’ËH¨cÙ‚2Iʆ€ |v:RYÅÁß[Ê(!;A„¦€ðÂŽÉL¼D³%L:a{’Ô0? klî 1¤èè…Yÿ€Ap‘§3HæÇ:s)ݺڟüB ´üæAK[JwÌ[ûÐQw trá\®Ç= Îëvu #öû0Vi‘“]ˆo®þ„NÇ0¼³¼4jhFQ;ª+ÅÙ:3>¦d¨ úqt`!ûèëÿû!ú–\÷}ÄØYẟE;OLöõâ‰äT¼íÑÇ=ð²ìA«�º×0Cµ§š¯ J÷o˜ç›}/Ñ­ÿÇØiKü3óÊ‚™;#÷h¶î ÂD+Ní«ö7±èn¨Àí5týü-ò©–ÃG&Œ?ÃWèZd+ã¡]wä\ÄÃ×ÓÜ·PJ/´Ðl£öAb¾KÉøƒ±Å¤ó¶Ñ„vwèYF|èûͰy$n’\ËÅÓ}0æ}ÐUÒ} £É„zÃy”i¶ eÍ䛜¢æ/}±ÄíéIy±Õ Zw)üÁ[·Ñ#“µ+˜æ*uF «ý‹q^ŸÆø/h³2¡©º 'SÍ�x®=žQçøƒ>4‹à0ù7¯c°¡F"qd=c÷ÆÞ¼ýiô[ôpÌR·Ï°F}½M§°·æôðìoEõçW%–‘2ÖÍ�Ä4£xßu J\³hÖE¤FMøØ“ùOì0ôEß±àÕÁˆÎ…È[c2²3°±´äuM±>㺥Æñ+ «ÚKŒ)‰ q…QtÿÏBh/ßåÔÁˆfnñè Ã7¥[¶·ö\á[®—]îø&à²=€éÛ/¡Õ|†Âx4j|¯ÑßaBuQV ”I²ŸÃM¥ØUnF·¿Ë ÖÛþ,kü{zðÇÄ2;€†ÏÉþ£­‚ÑbƒË#§ùKÖ9ÑpÏý,êy¢yF>SÓÞO¡ë—Iœ0×ú].8®ÏšÎ@c|ʸ?®lè÷ÆÆ\æÌÜwO/¤^b¬és¬§ôFìÏÌ Ïî ´=÷§ kf~|Œ<c_DEÄûáYÆã³~ƒ\šé#Œ¡³bKð²xîá‘…>†Ú¯¡î¯ŒJ p 4¸]h<½¸^²-¼<7eÊÌâ›ùÐ#–¸W“”[~ÐÔ²0ðj%È¥Öý}Lc¼¿õº½HKÕÁªœ|ó0ÍըΈ€IëY|ÂÐ^'\×ǨsüAÓý×Q•bÆ0gCÿé‡HÕÞ‹ìô×ûz;›Nœ…ë°5TÇ(èšúˆ¡©½$ñ¦dÏME‹õ3|äyÔÁôXr˜ ˆ4´¹f'ÄÖ¨ Fâ,ÿElxv0"sa‘Cpœ·À5Kœ²¶j”Ü`Sö÷OÄ1z°àˆSCïÎ×((k@¿Ô÷ɽƒ Ôð(±ãœÒ½J åzæsÿ'®|â@?ù¿aa(×K„®L"¡W]ö7Á?‰%XÔµ¿yB*24¸Òô� Vé—Rıd8hNÎ$ÿ¹Äš¹ègÞ:ô(ÏÿL6A~¢á„EûY7:êO#e?{Çy"Yól>£,ÄÁ™ªMÐ\°°µg^ÁÐφ@ÀamnžÃ;؈£{/Ã19 ‡µ wt‡PÑ™˜lGögf…ì9ܺƒÒÆ/u(>y ŽÐ@Áˆ‡ìØÒáYÆ#<7ã@^%¾ÿVKl²OPby†×Žfè²Dhâ‰!VRèPá£òé—8aLÃÝv™ìGFܶ ‹ÛËbš×&®S™8Bç™wlôû´ÿ…×s—Å‹Z‹G‡¾±Ä½š¤¼Ø²ƒ{+AÎµî¡øo®ê¡Ë§éWÁIMÛ€&×öüæ*-mØU2nþCà¾öxE¹}hªüïÄØ¯^d΀‘øvó¿¡oŠ}ˆÒ.T;éík P“¢³bš¦¦ÑÎT»‘¹!UH,#™‚ëÎqddhB Ø€øãºÌB|Eÿ\y»˜Å ^ÊU£†k#b� a”˃qfrΗs]€qw‘tÀk#bp,±ãÒ½àê@óNÃæÏÛUz¡ÕHÖÀ'X»Q‹ú?ǃs>=>r¼þ vjÛžbä”ÒKІ§h8ç~Æõ<¡+;Pî×Zp\» Ÿc‡î6ùï‡pŒÈHoC°Ûy´ôEì(n˜ÿË£—K'qÆœ¡åƒ:ìOP8wÛ”æî ´ ÑŽ¾‰ÉØgµð=="/]b”ñ8ͰJö¦àn»„Í”]ï…GðÀÕC×P/Ù³¤à.ܬ2à—uhí¸²¼Ó¨ïi8À¥ÁÃ4ÆÚÎ`³XûÇ݈ ¿àøÜ³uÁr¥9,„<qá–ÑJ¾…Ø®&\Wº>-!\[ &¢5-1â=ƒè6W£(s½ÿw©6ì }3zÜãJéSôó‘L íaÌŠæ?–¸µeLïg©àôá­+G™Ñ„ªìÁšeêL´@_õ5ΗîÅ^ÉKìRư‘G;†‰<Œ¹uÝ¢LcÜÑ #-WògaüÂvSɽ-ù·Ãa®>z/ Ëõh²r0â$JFSå 5ÒTÛPc—xŸÄµƒÏ;¾)Ý|ᩃÁÎ4…çÞH9ÿK4¹È-¬€¾É¾P•DnW…I¸­&芵ЙÚÑýóhK¤ëñqÕUŠÉŒÿ¦t.hsFÿë‹ ó 纟E â± µÒs· uíÏÃöÁYWn.k-«ÄA×+‚ÇŽ«ùŸAûí@Ù¾^‹-j~0^Diö§ÐZF‚?É—xž™ a öf3y÷8”Ó�z”íб'i;Äkdqk5Íœ‘— ´½ôA]Ÿ ß»÷nSÊEÕ¢¬Þ?¿CÎZ–ý‹'d_ÎM\˜E›þŒó,QehRÖHÜ«iÉä’³• ßZw÷”êbd¦P}*Lxú渹Ý4­<˜æªû&ŠÔÇPbðøÇi ¶o*÷moÜŒâ;Ï$nnñ±²×^(4 9rÈ‘ñ×}[$˜ü~§¡f‹ÃÄÕhíü]Äi’Š0|eš2>W‘Ñ… °_ðL»·îÆž]gÑñZ¢ÅϹm ;áC¤¤«¡-¯$¿ë4›sÄœ9E#hOæVäé{‚e4 †W#ž%v|Sº!LÀy¿UºKÎ4ôæðÁÆÔ1娃Á Î4OæöŒ” ¨µ§ÉZü¥š,dU°ì ¸]¼qtÀTu�ésT’5j8ë*Eƒž ÿFE<Z<qCö Ž¢áQ5Ï4ÇPí/áþŒhæž%4hGG vIΪT ý¬Ùˆ˜§cÒò¯%¬Ä˜¾Æûá(-ÁµÜØ»D;lü JØ–§F _¢”4úm»ÊÅhpësdkÏ„|>£Tt)Å—× 5øÚô³ÎYºÏ÷XB./YJÈ#5)€ ™»Cþ¬j–έy¶¦ j´ÈÞB6Ü+°{•ó=0ÍU· ¹~m޹…2òÙJ &‘xà¸V¦Olíÿø•1ðu ¸ŠŒÎ'~Ë:¬Í¹„^šéâ¿ÉèÆ¤ýöëGd-¼žŒh°:7¼ŒŠ2Ý‹ÚCu \8%sN˜èÀÙÃuK¯—»Ðöôãpt=ò×ÄÇÛž~¶ß€íªuÄHÙ†ôGÑô´:²¶TLÚ]u0¸ÂÙæÝ3¶†eZQÞÂ^{J¤èx(<oW}îÔC›Õq˜ŠQeüö‘ ŒH.}J”®ù^ÇŸ¢Ã4—_;Y>gâ"NxoA)Ä â•£¡ŸQìXA4ìvž€I[5¶™ð440OÇ‹q$òXõÌ<¥%8—ó,Ñæ©QÃzéy9’Oì–n`Ôf ”ñ¾kPÙQß׋K‚ï,;ÃÅéHý ºÖwÈ&,"²ôiÎVŸóà#ÿúúb‰ÛÓ“òbË­™ë—©qÀIÕ?5¶´«‚v/ÔÅßÀØú8X¿-c=ˆ$Á4W_÷ ³/™æxl¸®=®·ã¡pÊ?Qd¸ž‰ÆTËγŒ¯ÁUdÔ¯+³~Áñð+xÕö%²XJ6oW@óÿù‚êô†ï‹ˆV»„iò¼ÛÎ%WO+Z—þTdd%Yä•C‰]BÚÓ5»¨qLµ.a_õCüMÖ…Óp”á3ëÃ…×0úù3—Wð†£Í‘[ - .¼…½æ (C1ž·«äó±Ãb¬‚6g ¾©ÃN±K¦˜4jøê*Ñv·¡?þ§l¦ü š:î ¡+1e I!j †±½-× ^ |SJ{î°Ûyä¬vuÃt¶ ƲþüŸï4Æ=°Úº‰zfžÒ\Ë9C£†i-F]×ô‘ïSº—­Ü˜b³þø=,oÞñ­IšñíŽ8IìþÝP¥lƒVV÷@7\+î]+GÎúíÐu‹Õà"g[˜h5ݵ(ïœÜW5É8°ýí ZÓ’_ÅS”pQ<zC¤U硸ª•š Š˜p‰›«^ô™ÍKÞŠçûá{;hlº}5úÏ¡Æð#îÛ\ðH^;Ĺ/A­=ÂñÆà’ê ò-càê@p¥š<EØTjÁý¼ÉéWÐWå æ‘DŽ« :í–vºÛ°9‡üޏÓv†ÒÁöÜIdî3ŠªŒJéåb¼‰Ú-P<‰iOOFÑvê0ªîvÁÚ}å;ŽÁØuúü= š¹L•Èï Ùå3·ßƒÉdF³s4 Ý~ææ84R|œte&ÃÙ‚s¸cë¶œ6X ¥ÈÚøÚÄêbÍÃóv5qm¸oº„ ­; oJ,}⬫D¦rÓR°±¸N $¦óDÆPšÂj©.Éü¨ƒNMœš:ŸJ°cyñ‚ã/B²J{îwAç;³˜°Ãd_¶ÁKÞLRsÉžŸäÒ'~ÒÄæVnÌž­¦£•4ªw›=°çÏÖcïúmÐu‹ÑÏäXzF?ÿ7oðöïGp‘+2PÃõâ’6ù¤¦¨z@乯#o§x½¡¼pu|]Ñ^ä…é öˆ¿(‘²®ãöôØ7‘å�ÏÖ´ %Œ­ ·7‘C¹Z Ô„À4W…tTdFo'6h«<–Ö»ìÐ×å·ÛqßstÔD)U¢C…”¬S0ӌ࿗ÙAXÎæG”~qºZÉštSæUÆ�aVêÀq`¦7Ç?¡ÎâÄ´Çcu,Ž1é0WAuq”ì×µµèçEkå“­äOˆÒžÛj}ÌWó‹éÖ8þ@AbÚÓï¢ùO€<#ú§¥¾O¹–WÐ=p°\ïo¸Š‘š’…Âl;z/ØME\ueˆam¿’`#:ØÛVÓÛÕ¿0ÆC€œ<×p‹ Í…:&tØÑtý^@i¨—ëzÉó>ÈﺡÁGÿÇ;t•¤t` "x‡`5Cqñ9˜:ºðó•2”$U£†31Ï ƒì»õ"×)Ç Þ|IC”gRÚsG…~6lPŸãsâ4nû…±{(Y¯ÂÚ]—ñ礯NáX2Å„9KKÈ–Xk‘¥Õt‘ðÀ¸‹k Âp+ΔÁèq±Ãõî]ø0b»… …[°A¬ÍÈñârÆ~9UÔŸ‰Å,%'Ð0ç¾# ÁR±Ù9Zòù¿ß› ïG,q{zR^lÙÁµ5-gQÂEªØ‘øÿ ॴ‡\ѰÌUáUò?)DM}èÍÔ5TÃE­»òwfܶ 3Èìp]{<nǧŸ ¾Xƒ’ÚÑþÈnLû<q;ñ¨­ÕÅ…8ÓúBägK#%º¶áàÏHAˆRÆð/$—3Æf‡Ç»’¢£<o½æ¸çp9ºpç¿þ ·,á|Ü}‹{I×Î"„×p´\åWúÇíÖ˜C  !íé ^; Å_¢ÁA³£æÞçÆ=^‰ï‘²åLÐÏì¨?PI5‹*6¦b›ÞNŸ,pÑ"ñòÕ• ⛀ËþGœm«9 ‡ÖïAç{³5éï:ˆ” ÿ[D  dHìÀB™+¯ÊÏ ’­QC[?ƳÈ÷0é„í C6»ú&wÄ:¤s¹4xK=Q²å¨s,‘PÚsK†®6ö®ùò5Ÿ7Þ¶}…ƒ Ïý?ÉqÏCZbÜ“ô28®æx¶šö¾€kTúé®—p1‚óRÛˆdÉN—>k4a{{döO辸tHY×q{zì›È2€Ö=rkMËó6Ÿà¾ ã|]\4ˆ)i2+5!°ÌUŸõkì2<Yä(N¶o#Îä›c~ð\{ñߎ{`¿n€Å-ÂÈ&ðÔü=ZÂjvc Œ¢ûB{ù.‡¶‹”YxÇ_…&ÏšpRsƒ’aÆ]N¸¸ü.™ÂõÖ+¶§Úe”Øjš/\Kÿ¸Þó$¢=}�aüžÐò©ù5ÀÚv”sy7h×­äé.ã[í§P­?Ë+âäß=‹ìÝ41øc"áª+Ã3¥ž«�9Yç7k¡ÿ%¤[”µõeQVßòwbD4ÉïâØ…fßt^,Aö†ud=®GfQP×or4É¥OtoŒÒ8;#X:EÖðA¬Ï8‡n1ïÓ7ñqwD‰ ëpz‰3æy SI6òE9êÑ5l-µé¾£´ç–=7Ø úfØ®­Åµ dn©Ö`mž Ï…iŒ÷?@M Љ~fá \Oš!sƒkS+çNs‹.ÕöVÓ<÷|²ù]ÂŶís.øcRˆèúdjïgêŽE/G²Ë;B¾·I8 7l'ª‘˜ý5¬S,ÉýlÄ·§'åÅ–œ[ÓÒÊM”R1»ùÇN¤oÐ)šXæª0xu¿ElÎTkã,6Î×P&®k/ÞÛqaãoÞŸÈ€k/œp‹øyÎmj´#Ç:¤i.À"ZÜ›çï’3<o½ÞáÀ5ô1¼à*ŒËõÖ˜S  !íéy¶åX^ÁßÚjC£9ëö7ÄÉu¡‡~§=.és–§® Ï”z®ää|Œ’ÍK5 vK6ÚÉzäÚa #öû0Vi‘“]ˆo®þ„NÇ0¼³ÉÖ¨yG@ê¼®YrÞ´U£ ä†8]‘w–ØÍÂÓý5²¶Ÿ‡uBÌ7Kƒ¨%¸`¬É 6áÝ^lÑþæ¦.ô‹¾év£ÅxÍŸ%‹ÇPû5Ô=Jæw!/èšfFxƒGW?GFÊHË­F«{ ¸Íþï°.ÉWÄ¢õ̼Ëà8f±rí4·H�˜øîìÝ|½R5‚bíùª½0е¿ƒð¾„3ÈÈŸ³yºïâJ±†éçäüÜàÐõéúdmø{L¡¾1ÕÒ|„ŸÊwàâ&éeÌqBŸC,q{zR^lùÁ³5-gè‚MIg:ð†T%P Ó\ÆÐ­ScWùÜiû•l@¸wí+䦭ÃZâ( J´­yÂ{íq»î@SÏ; -a EÄH37¹¶]¤5ÛŸasùÍðR]îС‰þ·cDäïäù»d·[/žg¸ ãr¾5æ(à)h½íh+ôÿc'Ê%·åÙBÎpÔ•á™RïϺâ$@î7Ú#ƒ–òªM5°K}4êØpî–釖ŒÙÀôí—Ðj>CaR5jø¤ø–ØÍe‡8:C•VŒzQÎÝûÍäý(ì|uC?“D Ly‘¨$QÏëBC¿›ÊÉK¸ÐàôáÚ(‚§�ð"-½ntÔŸF^Yú%ïù±ºOÁÇ< ø|}þÔ«±–aÏçÝõÉÙt1ä,ú…ÙT¿u öf3ÌMmä ]úé¢ÖH¸w�)/¶ü ‡ç+Zÿ×.]Ÿ¸B ©ý刹 0æ~£jB`ž«¾—°^="€šŠŒÂKèSæ“@x®=®·ãä`ÊÏ>‚Êù1|Tj³‘êhþ]ÐòCŽmiÊwcÝ/p‡þÃÙAÜ¿ÙCŽiðü]²…«ÄÛã_a\ s¾‰ê’|¨s‹P®o†=ÌiJœí…7øóz êºCƒxPE>;u¯âf½º2<Sêýp §ë|QO.4%çúOÁŸ ßn™Ñ2:†ðX_€÷Fƒ?“ Þ¥ñ ]¿‹wëöõ÷1a÷.h?ð6ãØq‹ˆ ËX¢á§Qß’i¹R.98@Ï"þÐ5úżÐ0oÄ=ó <þÎÕý†ç!s~°Šœ½êߤ}ÿ\³X97Šà)�<9çˈ' ¾Þî"éY”a ž·!Ÿ4mDc» SÐ:2 ^CMj›žËC\»>-:'ë-2Å‚_(Sb‰{òbËž]Ÿ8£j$÷\õ âºñbÜK¶¤) Þºƒž$Nžk/úíx …û “z;îþ ÕÆžpƒ“ÇO¨ÈZO îÍ(2öŠ üÐ4Qy¶]ä*8'W¸@|8®D-ýeh'O™+‹KEºúʉÑRYº›³tInõ͹==×Ò§UWHè^ÙŽï.¶ _rÛÝèŒ?Íuh–jDÄÆe‚w·ÌXë“,ZM÷FŽú]\[·ÿ7ã¯ñ*"ðÜëø#P2I…×MDZ9¿ï—÷—«h¸|¡s€ÁÓ‹ëe!çíÜ ¾L*T'q‹)ûnD=3×K žY¬ßF<€£}*O¨‘¦b μ¯`·\ÁiziÆ(¬Î5 Î±ë_=W~e ôýˆ%nOOÊ‹-;¸v}¢Cj¸MWkÈ£í/ÛÙÛï¾mCif-ì1n{…±&í4À)ý!W,Ls•!öë'ƒâƒ‡‰Ø¬Áô~bA­FÚÃ~§àl$˜ñÂPL¢Zý1֤桺ãyü†“HO8 ÎÉžOަ 8URƒV÷$yŸVôŒüMþÚ‹‘¾XínHöw)T˜uk^@W)øWþײëqÈзè6† ¼’F²9 Ús î®æJŠ"‹® Wb0R°‹ÕÖáR®Ä¹[&5´+jü% ss¶ÛòŠs3¶5çqFéwuáŽîsFý.Ž%väÙÞxötA—¥FµuLÄï–«h¸|¡ßÁµCm”=Ñ5ÿÀ†ÌÝä¿ p²á©ôL‘w ꙹw�ã™ÅʳQÙ =£ ¿gÑ@ûeý-â÷F+£ÒCuãc†=‚j´Øa¹rš¬?êߤ"#ÿ,êÔÃÐØmÅÃ; NðñéúDÏ\~z®±ÎÉ…!¶ ”þ¬Xâöô¤¼Ø²ƒw×'w ÊüÇàÆ™ŽTæÃsíVäê_"¼h*˦wöŽ_}°ÌU ÞÚ,h/] ‹ úÇmF¤qÜà½öï8^„ ¬\B!cJɼWe‡‰%s‚›HO8 ÎÉòý9ÀPõ5jýÆ� Ü´£…¹ë–œ {è?‘¥«Ç+eÈN]ôÜ3øö›½H%kkÍšáß þ¸X¨Hß!sбœƒjj±M²®…g§2rñ´ÜuÝo×' ž<‰Q’:†Úq¹®WÜYËUW†'±JRÊÑÐ/=ÀÂïv•ÌWžÝ2éïóE|ÎÞGÐç|”ä@A‚ô»x”Øq <SN¦¢á2…ÝΛÁ˜å6”¶aq±ÍR º‰)Ò÷Ì</xf±rná÷#¦ÑG:Ê;E¼çEÂÄq0ûÆÝ‘×^‡EWÐÑÿšÁ6™ƒw@#‘¿~kˆ¾«$=W~e ô{KÜžž”[vpíú˜ÈkÃÞˆ>hFñ>bpK>ˆÉAÙoD^êØý9tzHø† '¡ÉHÅšÔB˜âr°W,su¡Lð/dϵ—˜2†) wÿ¹©k‘šûot30\ÓccdtL:a{"Ý`á*8'Wfû`Øþ!T¶bgú7õâW]Tªí¨²-¹„:_¨PuJ¶_œŽ¶ÛßFk¢{Q²·­ª»òÕ_à;Éâuo`=«…îÎC8ýÎ|?l–+(ÍÊDi›T ÎF#O¸–ñĺ©’oIJØøè :Å´qç®+à ž%)¼oW£á…‡S�ŠuwMýREÃyBæOý.žk“kàyµˆ†óƒî/Ìp>hƽ֠Φîjh§³þ1xœ g„ÓŠ@Ü3s Îs &òmáöV×àçùßÕãQlν€{ó™}R³‡8áïÙˆÚÒД^D£uži–x¼ê +}"Ï9dFþÞ¹€%x>‰úB_¡£­/" /àmûe\¢¢ûÊ@¥¬ë¸=½¸6Ùóëm³Z´X�ÕG6uð^ÃÀ€£{qz+ÀLÉ:s²5dÓ\% ïÑåopõÏHGÞ‹þúFE£&´D°é â`~€ŒÒHEz %0 ×H!#;K[ɞ é ÖgœC÷{38 ÎÉ &?UèíA;Øþ 8¯"WrÛ^™áoO™ï¬óYuH¡Û¨Ð?aS2}‰ó’»>‘éOµJ¶‘ßœªMÈgiSÉÙhä ×2žåT’l)_ßòw¬e^Äp”¢+3óækÖÇ&r°Êø•¤ð¾]å™Q-P `²¯O˜êyílÚÌŒè™:‚ñ\›<Ïrýüå ýÞ˜^ íÌÎà9´2·!=õذaÊî=Kع!î™9ç9g±FoÑOþÎ ©Wz3¶ ÐDú}S(OÙÃÐ-QÌ•A•C“½±^´€º šïÌ_ŽLÁÝñ/¨SUX³îšÆ‚mß½å¬øÒ§E´Œpk`/|s98‡oῃÿ"ôçÄ·§'åÅ–´ëS/úÄÜ”½—)¸îGF†&Ä ܘ¬Ë,ÄW~Ãèv0‹Ks¥‘òûu¨Ò]Bã£gp;@ôôŒº «�–¹hyÇ*Шa*cð¦ßTÚ5G]…;¡Nm0–êE~v|ÓcßZÇy \³> ·U£ äï]D±ç< 3~’à &Ú*±Ï_®Ñ‰†ò}Ð[ñ³þ 2–{ Æˆ?èϨñjèzžv¡¡ Ãï0íÉÜ�ÍŽbÞP}ð¸ìd¾÷ o„ ³!Ûîb\Ëxˆ‘·šJRXñgE9‹Bc Œ_I ÏÛUÞeï1´g`Úû 2t]K¼¶¢]^½·ó<ìÒo¤9—Øñ <Ëõó—/ôófc–œÝ§°žÚa¹Ñéž$ë„~þU°zŸÃr²$aqÏÌ38Ï3˜Háöö ¶à$®u<hÞ8¢©*©*9j&í¸ÿëHðOR û>]2ò›Æíh¦òÍvŒÓr{gÌwacÉʧøž££š|æt-ä|‰+•»±>ç4®Ô …›±®° cÁ}7Q.4‚ã¼e³40zö0JŒß»gKY×q{zì›ÈraãŽVýiƒT�øIýø ›æظ¨Ÿ~ÄÈ;Nªüþ’U0B¾ñ(šž¶CGu@6Ç‚K`iåÁ4W'Œ´¨©Ð§Yi5S¥…nG~Vaã*tÄÀ^ú —�ïÐF¹}gä0÷L®°ÀLþ¬“¹¶ô!#µ�F‚iò†:”f-«ÃOU»±.èxÓî]ÍújèΗbOXŠl² 7Ua®>z/ Ëõh²‡¦x'‰D—ñ¬Ä’”xñý½.˜]õs òvéðÓ| ¼†#ؾ(ƒQ ¼KRèœåq»Ê;£,†¡]~ÿ³Iš¡Í—hZHCè·|‰Œ«¤g!%dmò<óstV ìvžV]zDà6¨!ëpªó5<þ=_Ä=3Ù#8çùy‡Éûtß t<û=’žMozàrÀIEuãmzà‡—K‡c×'Zо#("¸o¡ •Êh¡ÙFƒÿŸvôÌý˜|îC]ý3\ÞY¿¡z[ðûHÕÀ ¦5ºŸ·r‰M?ôµÅ·§'åÅ– Vµ!G´{°qënìÙu–­Íªw�¶>>÷ Ú)ä�~t ûª©p𜆣Òû̯Øæê <ƒQœûYLyÿæ²`Yáºö–´É Æ::ðÿe;â †0èŸÐ·¸“ú]ʆRœl°‡|f/0ÂK"éÌÂëþÍæ‹;DÃèéHºÃ0€>DJºÚòJè*O@³9’ θ‹ )k{èåT’"±¥<×r%  †!È"¥žï>˳ Áoh>ÇkÙ‰ÓÓyM ‰QÐ|ñ¬MžBßüÕlüAã^¨Â2¿]0í?{ôù[QØô2ø÷|÷ÌQö|Ÿ ?íÍÁ—½¬~`b‚Ê焽%?[‚šwÀÏ¿å«Kæ³~ƒ\Z.&Œ¡³b TÛôpLÓ=’A�›ú6©ûPÛý2ì;¼nØ%ï¿Ð^ØÑ#b_”²®ãöôØ7‘e�¨Ú²ks.¡—FÉ®ÑucÒ~ ûõßùeECð<Å}C5tµ?ùÓ‰éÍ탖 ³Ôð £h;uUw»`í¾‰òÇ`ìºG6ß=J &|ç*ÙˆŠ¿FçÄ’Gæáú~–´É4\&s2jbÃä Úedô^%Sð¼]ò/kéñÁÑz5ô†·JS{?Ãmo¨”‹œkxw¿é^ÔªC¿¤C(öüb…q£v ð ÏÆÜ¢†Ýr)I‘H‚Ê•„á;8¼ë ~ìvøSê]ŽnÜ¡)õkÙɃ÷>˱ «8=OÈg¶H ‰ ÖÛr¹ }ÇËÞl†Étöqj÷£½áG4¯ˆ.‚‰~Ö¬]ÐmÞIœÛ×Áïiá»TmþÝ ²_Å=³\÷|ò¹q/7öÁ3ò"l=þÕlB˰ˆÏ?QM¸ú·|uÉ„çfÈ«Ä÷ßj‘¡ú%–gxíh†.û@Df¸oã,·†ÑæløØ“ùOì!`-e]Çíéų‰Èž™^ÔlZõÜ­•"wàUÛ—È’¬Ï@ÛùæÞ™Å·ñô×sd~€ÍU¿“i.[>&Ÿ=ýü† ©yFôOó™’+ ¦¹ê} cѧ é”aƒj°Tãžc,)FÓû‰ïTißst^ý¥…{£lf;‘¾A¤¾WÃ.š1Ü…;ºÏQÖÐ'Ù)çxUH.óÜ:lÈ.‚V½[÷|†]go³}Œ„e‘c¨ýê‰ ¨SÑê/ü‚ÇaL“³iÛ9‰ÁÎhó?a\·šE¥¼dmoüm³Ä®­ÇÞõÛ ë~ü‘ÌÀól0øZò-‰ˆ{'¬\‰|~®"?mÝ™ĜîÏ“wÌ3Éû,ç2®âô|ÆÿD ¯ó$V†¬j/ŒƒRóå8j‰O`ر7ÐG z`iHÉ<ˆšÏpÔòŠ“3µ² ß[<ö¯Z\µŽ’Ïwmºb”Tßd×û¸g–ëžÏ9óšø×ò7E kŸëÑHTÓ®þ­À¹ëÓÜm—P¢9€²ë½äÌðÀÕC÷ž^¸¤ž“¾ Œ¿•z¶Æ"öœ FÛ{zRÖuÜžž”[~x1h*¦R Æèa9wø©rPC[qI‚jöa—_ýÛƒG5%¨¶‘ßA®Ü`×')к»â/Ñà ÙLF0îñ¯B$,sÕ¿1nÈG•±>Dc…ŽC»e/t?ÿ6wÁ•„à×µ·èvœ¦J7`ïæsè•z¥êôfîŽpä‚Μè@ OÃŽ§0(ßÀ«Br ˆ†§"§–°q4ý)¶/a¯9Î@;ü`-=+b>*ï1OÈœµžGq"mNº×Ái»CéÎ`§2)pÆuÿ­ædCå,®)í8[PcÌúoª¡P4VåZÁc'¨\)ØPà›²2|yíº»à¿ê0žå-<çï2„Žâô<á|ž¸B•þÁÂçEF÷¯QPÆ$¶�/-šKKö©PòWبÚMöWòîüN¢ôî<«z^,7Ä=óìù¾)x%:éù=#p-Ã9é÷!ÒÃÐúkØzß)0QMxú·²Oðìúä{›¹%š\äV@ßdÏ*N ŠFL™Â°í'ÔYœ˜öØ`¬®ƒ…1ƒB˜hÅ©}Õþ›‰î† ìÐ^C×Ïß"Ÿ.2†€Ÿ0þ O\¡†ÕS4<ãàRß9.˜æ* ˆ¦Ï‘_Ðs4¹Èô½ñ‚ëÚ‹ûv|aä۪ѩù1„Ò'®†9€¹ ƒr¼Ê~‚sreÆ^ƒMó7\Á@MçS´•çK/%¥)Å[÷£æçߌ²Žï¡Ý¬AÍ=Úê>øwbLá ì×#3eNÔyÒòYJy΂÷œáéÜác�í—Mxôw,³&4P#Wø®sžåJ| ,”D„òÞ S¾óŒ‚÷3ÎçÉäœ/#5·`Ü]Ä 9%ˆ7دÉüØö¿ÞF$ L@÷}-´b}É]¼zíÀ]].vûß»B$t²1ƒáF=ÌÑöWá)®Ÿka(ƒ‡ègæ–yJ¼ç¢=E÷¯¯²sgu÷]\)V£€%[qòwTíûöˆË\atC¢‚+4[%QMøù·\™»ìMÉ€Z{Ú~”j²ÅE¯+^øœRÖuÜžû&²\ ¹Wé—Bu ÚX#„4…ýSÿç>>Fž±|õÒ˜WØ^ôûÖ@•V€ –§IN–ô³aAð¾DŸõ~pažCÍÕ&Xý­“ ëû‰JÜ·ã Ì ÿ ÁçwÇÕ°£x¤0èndf@/¹$y4ÎWyÂYP]®øœ0åïD©åyÇtžnÔTYñHêMMUÖ\‡+쟽AgùlQ»b¬yžÁNŒF[ß0c—‡hó_¢0n(tmæ…t²ˆ:ÒQÞ+Sa9jx¯s~åJ| ¸p³Ê€_æ::n ,¯ ýR[¬ržgtîsjû*çýŒë<‹ržWžP#MÅRÊÌ3ˆG¾KwjK  )ûvÏ4<®^ÿ|ëqy¿Ó• ý¬Ù ë0)Ñ:ÍîÉĆu‰h@Ü3sÌ<ÏâŽò;´§Û§ü©Wc-C yÖug5[‘¡ ]•8­)‹D‹Šü›ð„f8o v}Zà-ìµ§¤gžrÕÒãw~й)–¸==)/¶ü˜‚ûÞéà—’‰=~¡«0ÞfcÊQ‡â“·à‰øºGÆáñJ7TgÈDþt31¢BꆭÖ6 ÷A×D#ÁbÓêVls•v½ÑøÕÕý ó‹CÈܸêœ"&çž'\מ÷\£|¦û%h O8}61 »Îvt9ÿ[âkD¥™:çqØ`—¸ió ¼ÊÎ‚ê²Æ÷ ¶ÆzXœoá±Õ£ÚpÚS2<ª=‚£×~ßñØ[SÔ©)qjx0‹ÿþÍŒ‹ßñÑÁðSêü<þt£Ãx›s/àÞü¹ô.Íå¨IÌ:¼c`ê�׆ 8#»ˆMÃe<(]06ê>Ë϶¯òÝÏ8ϳ(²{2·"OÏ¢_%ˆ×Ý]ACOA*t°A5š ï¤Q¥"=»�UcÁŸå‹¨gæ™yÊU{*ÚþE|ÁŸŠ±ùË?¤;÷­(ݘ±X49ë4,RƒÃÁr×*Ý¥@Ð[xǃ ÕJ3¶Š,¦ššƒ ]ŸøU ð<?¤¬ë¸==öMdà[ú(¼ã†ðƒæãØ'ù&âøËéOyžÔ0w/ ´Ñ„vwè>×ýfØ<É37ä Ë\ž›·v-ÒJ1è%Ÿ+-Åјàö=…ñóÃ3­?ñð]{ôÆ~ta^.ï+caò7èö]†#¦nÏ ^ÿöúÄžQÜRZ£‰Ä ¡ßò%2>®’xk+ðê‘øL2‡«àÜ*Â÷ –Š!"ä¬åJ<᫃1c»@Ö`DV›$½•娉½Î§|3Òm�ކ6߆QD+Aö¡t®ðmû*ßýŒóyåY˜èÀÙÃupHNÇãÄS »G5_ÃàŒÜ[fÈô¸†"b£%ê<õÌ\3OyjOÑÏ-2#Œlrfúuá¦0h:ˆõçÐ-Ê×ò ¯ÓŠþÐuÍ(SÁ·ÜUÆâlÁ9ܱõ>/§ C)²‚ÁIp¬ày~HY×q{zì›È2ÀŸÚ}0¢qhßAüR„ÑA ˆÚì8w/X%‘Už°ÌÕ€Êúg ‡Ý\ ch+=šT'ƒåýÄ$î2†Phzÿ÷8Zt  ?Dˆ0Óq•|†DŠ óLi Ü0-ú=k>@Síë,¼žI6CzÙÀ[pnµ@ë˜ïáÂÿN»=¬G¦ö:ìI ÒP8ë`x{P[p×:.œÑDõVT+)PC‰\çäÏ#Vèu·%ëp5´£6…‡)“6ZÛÑ|”Tßög^%¾m_å·ŸMÂÙPI>çŸáž‡£ë‘?Zð£ÏövÖëhí¹û[P‘‘ÅT'Ï Þê€Ú(¬S^L-š@Óp7#•œKš†çÁ¿ã‹¸gæ™yM =|ˆ×»!vâ"­à8ok–ørmÕ((¹!*èÉS¦‚o¹+§FWˆa¿’ÌŸD•vHz—9 Çjžç}Ob‰ÛÓ“òbËŽÙAÜ9œ^[è? >Bfa¹ÿÏ•Ú<u«À·{Áª‰¬r„e®RñÇ¢Tâx„j2£ê›Hÿä,¬Iü¬y®½øËB¶ú^HïŸû÷s£ ×´5è3Ù¹¦´’xQÛX2ìnFÍÕ‚Lçd o <#ïíjÇåº^b°½¾z+´,ñ*²B¼’ôVÞÂVý%†—‰«'x1b·àÊé\¤Ñ —ùàx¸Úž§xÔ7†·13ÓxÑóX¤`è<&û Ô•ÄCæ×¶¯ígh?Ø Ý­\)ÍAjJr+kðMîÇÁõ”‰ –¯9"b¨2*ö (A¼=YÈÈcÉÈàÙ]lu@¿7¾Ð쓟pñb ü5ˆ~fn™§sûBø|â;-z‡†0ÊÉ&ä*SÁµÜ•gwÊᛀ‹ú¶§¡ ,D Z»{aÖ?`Óæs~ÐÏW,qï�R^lùAÛ¢m]œ1òª:EµIåÙ½€{duÀ6W§àn­FñÉël%¨I!XêTwJ7 8ÂsíÅ_Æ‚û.Œïê1…G‡àºÏÒoTðk§*ZÄX!1¬õ-xaH]¸ÞÂÖg@¶ø^ÁÖT‡]@°´Õy㬃(¿Œ4 "ÆGgÐùÞ q‚t•挩xôV¢ LöõâI’£¨‚÷ì–+8M»Ã5%£�ºú;0~ÆpðgDÃÓÐŽZ{:v#3-OÂþÍ«R´S2þl„žìÒ¿M!ζ¯>ŒX»Ä—üø†ðKûSQÏxñgìnÑÃ1Km·Ï°F}½M§°·æA Ë ¿ÕŸ_•^â¥=·Õún&g'ÊÚÆÐyö bʈåP¯Wʨb@?Ÿå†´göÁã²ûç(»P~,1ôӨ﹘}Îïr„§L×rWžAr&FÐzj/ŒƒK±ËG‡>ƒXâÞ¤¼ØòC€÷I/ú8eMž§¸oà#äÈ7²º:`Ÿ«T¿e}Ï<\=áò$ëâºöâ.clŒ¹‘vac'Ò7èÄ•>ù¡웨.ɇ:·åúæÅÊ÷"áºWô6u ²KæJwhàÌŒ²¬ uº+ß3Ü+£%v4Kqw`ަþ“©_ š‰™uÍÝÃÉÚ£v'rkšC²3ÅÜʑ󌻮Òbƒö¯fZ$gÉD¹µ÷‹÷oEiÛ(1*`Úû 2t]’/5âƒ8ÐÆýþ_ÕÆÃ¸Òñ”±ëc�®†vÌÚûÐQ£¨€6Ï,0™òÑJLÉïÞeÄ`¶ZÁóß¹‚ŽÁ‰wÌuÚY¥ÆSß ùÕÒœïþùàÏÌ¢e€éX£¾[C5ôŽà¶Ì{í%éÙnÂk8Z®r*–〥" KÞÏ\0WÔø3úæö³nËw(Î9ÌVÖ°  ëf¹!þ™©m¡ø×}%_ñÕQâw9Ä7Gë ÿ%¿{p{?ƒ¨7!j¹ëÆ=^égxBºSÊEAëntÔŸF^Yú™."ø@çXâÞ¤¼Øê†·#O!ÁÕÁJ›«|ßO¼e !ÐvJz„Ó:¤jæˆT¤« œt•¥û±9KÇà@ð]ƒþÏl¸MWkˆCDo Û»É™·raúõ0œÔAé0ÒÉç•ñù)\XA53ölZ»5Gç Áûæâ# ·.<u0hLé"´©Î ¤l7 _’55ƒq{ ú+h´çmÎöÛ073*½q-ŸjðÌ?sCà;E#8Î[1+¼@ÛÙÃ(1>f,w‰êÀÿŽÆÚ2h4e¨m´bÐ3‰Q× éÏÂSW†gí=×,0_”ÓvÔ—DYC›ƒ7ô|{�]Î?ƒçH õAÍ´zq NC«Î@jÆq˜˜Zˆ3B;Âì¤5@MŠÎŠi÷-¤Ñ.1»‘¹!UÒ;Íð-‘ÃT–E¾_Ĺí}}ÎGŠÞM èg½Ü÷Ì8®ÊHCçÕš†K ž:J</Gó:‹d=f‘}f3¶îù »Î°è"’_7þ Oüš>sƒM˜˜¯FŒ™‚óe„]. À¸»(aíéÅ e]ǽHy±Õ o!GžB‚«ƒ•6Wò~x”1ø|ë;"üÓp™Ìâ5þô̼0š{Óv=I>Lx®Ajø· ŒŠÄÑÀÏ5ÔÙéHe<“-ãÍø[Lÿ ½ß)g^–7þ´Ý´”4ø~&‰Á¦ f(ú0:ðL‚“ÉKƒ–¶êQp´ŽA²Ç£ƒüÞ*õÇPIÔÐòŠýÁ.†Ã/(™’…Âl;zc¿SÙFÚaZ ® Ø0A¹O«ù2(M62 oJÖ¨á«+CàuSË5 LÀäÀ�^F<‡à2bwž Ï“ù%ÓòFs5´Ùi!FZΦAù•Œ¥^ñ@ƒºå(3šP•½1xûO³[ ¯úçK÷b/Cæ"ßÒø(e%Ö?Ø…Ž#ñ ¡í»ËhêW2Á£ÁnçÍÂÓÓ‰žhå5‚]úôõÌ~¢Èp?\·S’îàÑ22YÅÐy^ŽoÁ¡Ç–5©È©µ‘½ÙG¶ÖRè¬/a¯9½CÚ7ÀS˜Ø,»Sr&Jæiå 5ÒTÛPc—z=ëÆ½&û»ÏÃá4õ¼/£Ÿ·Xâöô¤¼ØŠÁ7/C@$n!Gá¬íOæ7WÁûöu$»ÑÞ§~s¬´¹Êÿýp*cxo †ÌN±Z14=ó9Â!¢šZl{ÏkDƒŸ˜j ÉÚœ‹x8_†5 ï Åû®'%½?1¸`.ÜŠ¦¬EjŽMOñèºåÿú5+(£fÖu‡3¶†uzðæë2Qøýóhwi“t3·å+d¥¨ükž¶ôÖþ¨ß�¥­z+6¦b›ÞNæÄÈ­’PŠdòwTíûöˆ NatC’…ä,2JÎÒqZµþyAõ‹Úû]°Ýˆ×ÁŸ O]®7µ<³Àˆ3²¨kÊ—8A5~6ÕÀ.ñ8ñþÜ3Éï –\¼gÕUâ„0 ·µf‹¯#ì9a亜 6×ÒxòYEfÁ0#_-*¹ÂnçÑ À¨uW#ºn’aüšÍ§ƒ­Žéùò J¾çæ ‹{æ ØªJPk˜Â\CRç(O1tž—#ÁlÝù,Ó` ¦ó)ÚÊó%¯ÅèÂÄ­Ðÿ(—*L< ÎxžÂþ,ò dÓõ‰zæjŽ¡ºñ1Ã¥±•òÕÐVÎk‘£§5¹ÐYßfJY×q{zì›È2AðbüE¨ñèÆ³¦3ПJty9ÎÀc«Ãý/|—FŠÿà7âÔ—-x¥œ}ó0ÍÕ¨aÒ Û©,_˜ÞO,x–1#_i™ñ<xëY-twÂé_ý°Y® 4+3 ]! žbªT1¿»#˜}¡W³sˆÁ10 ¡å¾,!Sî§ÐÔü÷¼@ »¦Ó(ZI5´a#-79̨ê þƒ¥†:–Ï`§†s:gK§»ŒoµŸBµþ,¯†á¸{Ù‹²‰ÞϬëÎj¶†wEô*e03”>EMÁ.£3©khþS•†ì#‡¡Þ¸{öìŦn<ütexÞÔà•FŸ¥(¢ C.4%çz)ÁŸ™÷«"s‘BÞkd@ÐÉv~ð-'v§ó U_£ÖïÜÐŒŸv´Ø^1Ìh™rТ’/ô»cƒ®ÃèZQ±ZËù¹W°h7’õ•øo,†þþ÷2;ËÙ|ddhÂK–NBk–j[ð�òº!øœÄ¹ß‰RË ò,|'ª¬‹x$õÙ„7øóz êºi�iÎ'}„*òûÔ½,½™x Ès†ž“…Õ0†ë SgC«7¡©S‚V\,މXvJèHW5KÊüU”/Cµ š  “š—#íBô5rÒ6C­= ]õÁ‰\o¨®üÔé#£Ä”°Ö{˦¹ê¾‰"õ1T†$þÃDƒ-ÅMþrÁ}Å7£øÎ3&£Š¦÷®e ô66u?ô¶Ðr%vO/®—l[HÏ”¬3 gC%Jªàio5Öÿ?*Ð1HÖžó!,·~D“Á9×ãFFàÖx]f!¾¢®<‚]ÌÉMõ›tYì‹õ{¦Ýp ð Åɞ؜ :EK?Î_fP{Íi\·£ÓãB]ç=.é·K±‚[¹_£¡pô®åhèOf°“êdcÍÚ=¨í¥F:u4«`ìEÍþËÒ»ñpÔ•áySK6mŽÝÝfáyüÏXb‰‹X-™‹ä³æä)::ÛÃö¡Ú°;Ó· ¸©¿ê² Rm'óLL¿Óxž í9kQÉv;î еõ‡ÌÐñ ãÁ€¿ÿàØÝGÜ3ÇꪛOžYj?½�}¼ptáÎÿêÖØœÑll•ÞéBK.ëaq¾…ÇVjÃ}¦¬@¾¥O<ä93—Ñs¬CZA}ôX]øQ߆71_–Øj3®*š%dæ1ôŸî@yCgˆãjE—ásìÐÝ&ÿ-µ–’žI›!™ Ãa®Ö"{ÃºÉ›Š M®Ü—X§¸J`š«dÈÙÁ(ï<:'fWD †kƒ0WO;ôß Ú2õ3ß&{®$bŽŽ&ü—©Û<–R1aöƒÐÝjÀ•Òäs[‡œÊ|“ûq`Ý0‰"Îb¢í l|gÁ9²¬á–U(c¨°îý:N]RbÀZ2ËÓãJ´à9›¼S ó‚o×~küy(Ô!ø¯ZQž%µ\2/]ž7µþ÷ų»¯àâjÉ\ä$põjòšÞÔì«ío‚ó*rEéÑ’ËÒ`@qyhQÉ v;¬ÁÑ—e8sâEÜ3 Ñ»ê2“<€ôRýòÓB}«à˜?’CôÒ§6 ÷A'µô‰«€<gÜÍÐ7¹#ìˆÐ}d£Ä=îÏ[J¦0:òßïÞ¿¦_cäÍûwEqk$@Üžž”[~Pc¥ uíÏþ˜YWnŠjy¹ÌéŠ,DÇ¢Ã4W_÷ ³Ožw;<××2÷];ßÿ bÂÔ`šj¸^´çÏÚB;kP1ÅÏÈa{½M§°·æA@í¾¿ÕŸ_•h ÏÂóÇ-˜GDÎePÇ®Y…ò…o—·àŽ'‚w/BÞ#{ ž];xBœAò7‚eŒÞ€ÎíG"«¦Gú­?W]‚/ò¦Öû –vë|»»ñ .òÎ\Œ®e‘|›Žo@ïÍû &Ú*±¯êº­h(ß­±?ë"Cr FA*ô;ccÃúèö›àBãE‹xÑr‰ˆ~f^ç$y?·«kPoºûø O?Ú~D3S¶4¯›‘Vt­a28f1A/Mhw‡fã0j·pçÌô3XÍW".ΚÑt§N¯@¾ßÇ0•d#¿áyðH…õBÉ…[F+ùÄc#¸šp]ɨYjhÝöMT—äC[„r}3ìó)¸ Ë ¦¹:Üs×ëÅÆåD'ên»$|áºö¢–1ìAvÖiX¤¦A¾+ É?¤´ç&\E_üwî°ì¶|‡âœÃ¢ë…ýõú~˜Àéľ[C5ôŽ`.€o�&í%‰Æ0½ÁŽÔa #;K[1AöAÓA¬Ï8‡n©¨œàžU(O¸vIáÜJ@F'ø:ƒô}ñêÚÁbÔ ÛÐX÷�Îé×°/Â`qˆ¯‘·® ¿@Ïîn<ƒ‹¼3i@°Œõ!Ú&ü Û‹-ÚÃÜÔ…þ¸…ŠYàäzóNý?^Ð꘩0ö‹)U5ñ@?k6èþ’”hk';)ª½dŸø;ø³|õÌ<ÏIÚ¹sÇÞ@wPÁ…†‚4¤dÄ Íg8jy%ÑN0i»€}µ½ß |u½`ÎÏÀ7óî'a>Ü cs_È~OG/Ìú A7žò|y÷ÅÙ <Ý_#kûyX'ÄÍžJ¦Üô€VZäšòZn—¥hÔ,-s5|©HWA¹N‡ÊÒýØœ¥c¨á›Áp‹ Í…N–ˆ1ÔŽËu½ÄdRHLsunóŠ2TÛôp,yäôøáA_§ýas’q3£ŸYJúbíŠù!%PC ØÈŽÞGÐç|$þ¦¡vÒŒš@ &EgÅ´û Òh`j727¤ £ê‰01‚u6 Žó¸fÉÞÑV‚’p0‰ÙÉ…åUÈž]R¸·8gtp„«3ȵk‡|á©+Ã;PƯ»çà¢w�¶>^ŽÃÜúYü™Í UZ1êE xÃ/ ÈõæØC)N6ØClƒ÷ˆ,QQ5ñ@ç$±5ԙ܈ôì‚„‰ã‹zfžç$mõK/Zf0Ñù6ªv.âüY"R»ƒ’ub©‚&¢ ¤NwíÒKŸxf˜ÇòGÖ0v¤ä% ÏžgÜ/”ÔiQt•æõ'¶(š%…ÖðmÍ DiƒEÓi»‡ }Jºi¾K=8>:ƒN–T{…÷B?_ɸQ^~%ìöÍdºŽš¢½Ðêö§á% ¦÷®›Ù{G)¥OQ ‚¨ß]FS¿Ø ›Þ”£ÌhBUöÆ`É @´@_õ5ΗîÅ^É: ä�ÂèªXª2í À¾]R\¸q(Úÿü ÏCŸCüÇ­€³3Ô~ uÄÎ_ŽY•‘-øÃ†”Ëê šÏ£úÊ†è­Øa·°8ƒr-Iá G]¾2zSÈ«»ßà¢àyŠû†jèjògW ´ô`˜iþS1Èû‹t;|Vâ˜ùß'yöÑf;n™\ÙµÓ‰}¶¶à.Yë®'¡f¤”¨(šx û±JŸèú¬ÇÑS-!k/âž™Ú`·p®ú2¾±-žØHßó…A˜€îûZh3>Äú’»xõÚ»ºÜÅúVï%v_®® ¯ƒ?%bsË0'þH…¿qn¿ï‚åJ r ®2¶V—©mÇñâŒû9¹_‡Î©X?OuõŽ*š%…¦|2GDPi ¦Û$Gi‰Qv³ú_ºC&K;êË¢¬¾=äï¤L)0ÍÕ]:„W(>x î$~U<××ÍLÄ-†x1a ‡ÃÄß²¾f‹¯#Þ‡0ò]Ni›?=Ì£v6™Äý›=Ä4])ȸ3�OxvI™wL#?¡C…Ê;"„xðÜ„¼µÑž'dˆ½,ષ"×’”àã¤+#kÂÙh†Ur Œww7^ÁÅ)ôö@E[sïÌÀÆâÛxúë9²}€ÍU¿3¬Zâõ¯"ÊÙ{Î�ú™šŽcs~[w¹à6C³ÈÑ$áÆ/Ð61KŽ©zì]¿ ºnngÜ%*J &èç̱Qz:Ñu/ gT&Ê;÷Ì<m ²ß¸ÛP[R�MÙ°{¦áqõúíØ—Gb †5‹Ï¯—aÓ,˜° s²SÓBÊg$j•Q ðþùrÖnC]ên(_ÛŽëÅÙ+3mÖâ?ÃZš C_‹[~{o�í—Mxô·˜ß«jdÈXÏj¡»óNÿ—Û›å J³2-ß$!`r`�/#¾_ÁeÄî<Ó2oá»<`š«Q5jfáýë䯛KaO\×ÏTir0í+m‹y¿Þ‡ 9йt#ñ[ø$ /|æXš~ÐA½E ½¹ý¯ÉO-säÜ€3ܺ¤Ã<z«éÓ¨ï Ô/¹0!ÕɃºæîÂ3XÛ`ÔîDnMsÈ-¸ ,_½•÷·’W’Â~õò|7aOz“ßò=ŸGdt£h¿.µ½- ÔìÃ.ÿ­¸jJPm#F0Õ¤È v}’ÄÜy£œÝÓ]–ÕÖeÞ™Èý#´šÐÆ�sã,®)í8[P£CÄ•BÜ%*oa«þ ÃÉuþ–+tïcƒîÉG Ö] ·QL?Àðͤ«þ¦—ÁŸå‹¨g–µmAlüñWa{¡ûYNj®cPj°™¼¯ýåd'›ƒœuT³k~Sü³h€ªß]lA¿Ôì~9þQ/ÎFá‘è'÷õîVßt¤‹ ZŽ¡­Tƒ{ ïFx¦¢08ß_²G_W,q{zR^l9"xzq½dRæ¾PÕ&äz$Ô´ÍA»HM‹@÷զؕ3,á0ÍÕ˜‹œµ,‚Lïç]ðjK?³ÔýÐÛBKá|˜Ì—xÅÝ„Aï)e${EAý,ë<�9wàß:æ¥h5Ír»G¦ªÒ@›ÝyLuV e»ýO½j¬Ê·$…_¹ÏyÆuÎrÀ¦s¡iÙ'`´ßi—sÙ¤0´·&Zqj_µ_P¾»¡;´×Ðõó·ÈÏ`лáZÎΚ…Ôƒ¦«5Ä6¤™£íp°f‘ÑLàC°™«Q¢ÉEnaôM‹³IÅ1†_¯]€!L§L€§é+œèZ­ÄQÀd_/ž,k-·ÄA× ï²QÖ!-Ÿµ\æýÐ×x/²µ-.£~nš °H¹Üó¿¯ sdΩ\ÈÊ {Òösâ5¼ìt9Ûví¸fþ}agŒ¢ÉîŸPEþÝB¹õ§‘Wvó'Vi–ãøG®¶È¦BÂ[ 6}ŒMä\‘#j‰ÛÓ“òbËb¨¹ìäËìA߈Wü ƒnš‘]br¡)9h?ü)…ÄÁ4WÝ (+Õ£>ìFÂŒ†û=p'¹:׵dzŒ–ÙÛÑ ÿÕ–¡øæ6×Äg7²ž¬CÓhÄfMEí4AgÄçFÓ±¯`ÕD®È·3�Ox×1óm5Íëv óéQp´š<§1ê¡bÔðÔ[‘sI Ïr1žóŒëœå,€í×ïš…Íðtúó(Jÿ�ªŒC(½p_â÷Gƒ‹ŸFùÌ?Fž±Ozœk9;OèÍx Êü—eÙéHM;$º»asçyJÔÚÓþKÁRM²˜:yÑs2²#¤ÝÈ,Ÿ€iï'ÈÐu‰(ùåù»Vt¾³A÷ä/QÕùWøÙAö}GãY½ö˜M¯HâžY®¶µ?Ãæò›!Y¦dtP¸C‡&úßR²aÇšPøi-ìþK]²Î¯#wíf”6ôÂE«4®—`c.±ŬKžvºœm»¹g‰,¢É“ÄÎyT€qw›�ótŒyÄf¢þºoa$>a½á<Ê4[²fòMNQsCÜ ·§'åÅV714-– ¦¹C£Fð\{¼ÛÆòƒça³ 9pß¼ÁÛÈÃQFOl¤By&”l>¼R¾åÙ€+<Kÿ¢:#¬­¦9ßî‘÷ä¶|…¬”…v»*Vg²Hoå>c€\KRø–‹qÕ•á:gyvw îÓ/Ñ­?ˆ4Z¶šQÉ\ªêuÔ¡øä-8BÍ‘qxXô"¸–³ó$p6­Í¹ˆ‡ó7µ³ðšQ¼ï:%Nzzžo û]”·°×ž‚¡_lÀmŽ(çà8oÄ,qÛÎF‰QŒãÏów­è͆€ÉÇñ8Z�™fulÏ tFJ�âŸYž¶Í�l¬û%<xª?H…Žó>BJæ!”—Fö†õتÎAZðü]³æ”ˆl!ÎßN—©mÇS49Jhå 59—Xt},ª´¡#eÊÌEg7‰_#ägƒÿËŒ”[íðí^  ¦¹µ{e¶›mp%1ðÆsíñ-cà ¯Ã„ÞfðêFò>1á×èÖíÆöêß0±¬—·-Æûø+ÔIráOsZ†“~œóC˜€ó~ªt—ŽÔ ~ð�¶a©N …g«iη{~È:ð<ƒþ[ÛSŒ$93ÐlKRø–‹Q¸êÊðJƒç 9?ÌGþÏT¬Iý º¦?á~TŠòo «‘šQCñaÜå„+ô3cÕ‹ ð+gçÉ4ž›Šw¨ñ‘u¡jñc”±ÕàÐ\ê<o‰CwP”Ðe8o1äâ åù»Vìvµã* këÙkÃEÖ£6-$S™3KïòîHÎH.Z†ò»Ü÷P‘µž|.*¤æ^Æ£‰ ¸Ú¿'öF5®¶Bl*_;]ƶOÑähÂêšc¨nT‰ŽwlÔŽ²ÿ…×í()k$îÕ´ô Rø¦à•l ðî^  ¦¹ê¾…Òr3:ç¤ùqºŸÃÐÕ‡›¡c¸®=®e r†š\º‘Pgdˆ ϳBnüc=G½•ä3ÛoÀvÕ:lÈ܆ôGÑô´ºŒ Ú\ ›˜Hað5€¸ÞîÑùÏÍ�刌KRx–‹%FW†G<Oèùq�iš‹èpÏ:©³r ù¹7"¾ã÷Á;£låì<™‚ëÎqddhB²M†ë2 ñýsåì:`×xbò7œ-8‡;¶ “î´Áb(EV°ë“tèeIxY¢=R£A«$ðÏ:×ÙX°ã¢ŽÔb4„eãñƒþþ¥…o×@~Z†!ø<y1.:(®vz,Û.»ŒN쉡ÐóƒQ49æe{r¡ŸµXâ^MR^lY­ïî Raš«±j%ÃÆ?s¶]ºÈUœÐ׿ ·2†ÕÀ{Œ :V‚˜05€*jüBžsAÊnËw(Î9Ì^.#Cüš]F¸ê˜_Â¾ê‡ø›ìÙNÃQ&a\~Á-ÚAÇ„æ¿ÂÏ °Á"fËÓ�å‚\KR(üÊÅxêÊÈ·\u¯» ëy„�ó³[ؽæK<–çQ&×@Á,&Ú¾ÀÆE-µ#FÞytŠ ´ÌÀc¿’Lz‹ßœ¥gÝ;Ë%±œœCy@?6èž­ë“IràB*ìÏÌJ¬yµ0Äw ä©eÊ\–KÐÉ~ü&¸Ù鱺S’ó©_—7<‘aæ)“b‰{5Iy±eÇüU”…/¹ùu<»(H†i®RÅpÃïái×þa…~Ïi4=£ÿ=ˆ?¾ÁÙ%v(˜ÞÏR0Ü cs_ÄçŨØ.[ˆ´*Ä„ø|›“÷ô91 ãÊam§£ê.q–»o¢|Ç1»îAŸ¿‡)PÃ/¸Eí÷é%fËÙ�]”ž¼Áç=GäY’B d!Ý»P€4• )™ÿ®ÛÇÙ YZRg>ê+ÿb4Úa·Hו‘o<ß,ÁmÆ6òoÿÇ…’ñ;&n°8<<ƒ¨œñÀÖ— ·ß\ö?â+qäZ–¸ŠœCNÐùÉÆ,qäoã?¯ëQ¥û7̶WïÏ7ÇïRÄñ¥Ãþ̬ðìÈSË0¬ºôßË· ÃRt§”2Í<•²Fâ^MK¿ —®8w/P Ó\™67Œ¶™áðoÚ3ðX¿FÖ§è3½Ÿ¥ V’j/ŒƒbîýCá]{Ì rð¿Ç›×e$OŸÀ¶¢Ä„£8pƒøš|ŸÛþ×›àÏ,flUø8r¾2·àçÜ"øÍZèé9ƒÚQ_veõí!'Æðæl€ºïÂØù®9@Œ>“Y|ÛQ?r+I!ß&Ï,$žFã’¤Á³0xfÁð.—o† W Cž—%\ËW‰sȺ٘†»¡©skY•‰ŠŽ—kúk™Ï6qˆzfa öf3L¦{°ÓùÞö†Ñ<P’Ä+t´õEœ­Þ¶_Æ%Út‚ÈEw $ç77-ÃP8j¸¢{ÇÕRžÈ5óTʺŽÛÓcßD–.Ü8”íþ†ç!ÞP‡ÿqËøïök¨{$æöŠLkÿOòy¥¢üN/ù·ÑúŸäPþ¿ÚáN`d[aö¹JœîÁ_Ñ 'ß—®ú†Ð´Q“¶jlV-ýœl×ÍB"á¼Ná;_£ ¬ýRÛý‡ ¿Úcÿ!<܃¦«5ïÒÔÎ\Þõnn¥ˆ ÇràVXªº×Cñ—hp Íïón÷(<Ì{s„¦Ã…óÐUÔ¢©_j¦Ù_ð2â1—»óLâô*æál€ºMÈ݉=ÑJ4üc'Ò7è$jäß,$îF#Ç4xž ~ºJ¼KÆyQyÂ9 Åù²„_YâêpyB¿76—ÃksëðÔëƒw°G÷’=krkîè¡¢31—]¢ž™®á{™Z‚ iHÉ<ˆšÏpTd¤è¾ü޶ïo.×À-üwð_¼j'òÐ2 %ð}¨4b‚EÑá{~DûÌX»Sʹ6J‘²®ãöôØ7‘å@,'%t¨ðQy‡ˆƒ”êäâ+€aßßðGºS²PxBƒmGïa,žõ¯ ú}Ig î{§iÜÔˆÚC6³ìt¤Î×{“ Š\}·ô7¶÷ó¨Ño®F‰&¹…Ð7Ùñšå=MÁù2ÂY`Ü]Ós©NÄû× øÚcú]µ Ì\‰ö]J!QuÌrcõ¤ª Þ·xËe óÔt †…¹ šÓ• ŽMPdTµ©vÉöG”:ƒ)é!†ÞN¤§¦ÖÕÜŸ—} †o’|»ëÉ5€Až,Ñ%ã¾!´}w™!ˆÊΩE—%Ýè¨?<¦ËòÜÊW‡sÈúy³AõÖ.bGqSп ÅNâŒ?8C;×é°?™]Ÿh™x.Õ…›ÁDçWØ¨Ú »pr®h$gjE �‡ô¶ï3·ßƒÉdF³} íÙ~ææäwèå{~ðìN)cdÚ(EʺŽÛÓcßD–±œ”Ó¨ïIE•ÆKÓÞŽúÛ| ¨Ø˜Šmz;Mú 8xËÚ˜]°ÌUáUò?ÊCÕ½Pg†µ¯; ;XÇÔž•\×Þ\JeJÔÚÓ~g°T“…¬ †”J÷ÐjN†–•'ÔHS1´Ö#ëƒwíñÚœ‹x8ß±bÞA3Š÷]Ç ¤÷™¨:f¹¡¤ªK†«¦5,Šž½'ıɅ¦ä| xð§ÄCÖ ¯®OÄ Þ_ÞI\Ì9"ϲ•p¶‘Ï‹g’¬»ëMcÜÑ cÍ927ª¡¿v5ÿñm’«§dœk@ŠëeÉ<ÊpÝð[Ⱦ ù¥Ìò…ÎwVWó?ƒöÛld½[Ô:ü`¼ˆÒìO¡µŒ’/¢žY„éÀ辯…6ãC¬/¹‹W¯¸«Ë]ܦþ½ðlûN/Õ÷#§ÆŠ× ¾TÜm¸X¥‡ñ¶ #b~ïªéÎÊn™§ü²®ãöôâÙDäO'…F³K§»ŒoµŸBµþ,¯†á¸{Ù»iT9øc ƒe®ú¬_c—áI”ïšÞJƒ‘íäÀsíєʭa Ê[ØkOÁÐ/±µÛ MD÷Š=™[‘§g¹ãY{L×`Ñb#ÀGkuðÖRÃÀ€Ç•³'[”TuÉpÕtøOËãÿt.”Þúǟз¸EÌÓp¸ê­DÞ|ÒÛÿœJtN Xm?'.PÃU¯€7d­óLƒ—¡ÑHj^�Xµ!G´{°qënìÙu–! Œ'¼Ž:Ÿ¼GèüñÈ`^ð„s@Šëe O¡iÞ¥Ì+:؈5§èX‡´ükp$ȹ§¯ñ~ȾênCmI4e?ÀÇÕë¿üîqy$žGïÏ^ØÑ#j¾.å¥:ù ÆZQ¾ù¬øß+ËóCA*âÖH€¸==)/¶üàì¤ÐÛÚãÐhNãºý 1F]è¡9=.VA*,sUüŸ×öFJô€¹ƒ’M'’ÚчçÚ›±ÕàТ4Ø·°×„Î*MU š�3=ðήc0 èáÈ«öx ®;Ç‘‘¡ YÓ2’u™…øÊ¿¾`׳HíΜ,‰öù+©ê¦Ã­YäX+Y£†s¹ÞX ?­…Ý/HIÖÂàuä®ÝŒÒ†^¸è{¾^‚¹¦p’XpÕ+à yo¼²xCö¦:ú\mŽ1¶� ªmY‡µ9—ÐK×µ?×Iû%ì×?Nrzü,¼žÉ˜‰$V@j/Ã;rY¢ÖCuãc¶r¥¨åÇ,:e±~×Â_ʼ: Ÿ ýÄ­E&< St¼G"0Ä=s´à yæ¾^<áb'†=™ÿÄQ­œ/Õ‡;ÐÔó®¬Äà9¼²78…¤¬ë¸==öMd9mñ+NÊr…i® cè>»¹§ÿ #½ý©7àBÙ~d¤lHzê5×µ7ùΜÃ[à wÚ`1”"kãh“ŒŠÖq¢¿Yl­Ž¹ÕÏb¢í lŒ4`#GÞyt¾÷=Ï`¸Å„æ¿BÞ#Œ™òe•Ô1s†Ÿ¦ƒø\_چϕÚvßÅ•b5 $ÿ>Îåz4u=ï#¤dByùadoX­ê¤Í½ç5Ÿ Dl…«^_¸f!ñÄ÷ ÷Ê‚@2w“½‹jý“mžÍô¢fÓz¨ç‚õþϽ¯Ú¾DV•M⥔œ÷FžÎ!o|w9á ýÌž5á¤æ:¥ÿcv«d§NÏRæÕA|vÞÜ¿ÛàJPw§Xˆ{æhþUÈ%Üì�L{?A†® ï¿*Œm'† £È–þ</ÕÝfägAe´çñãP§KȨáÏL9©HY×q{zñm"rGqRVÌsÕ7ŠG ç¡ÍN ÅYE¨jzÂàtñ…ïÚ›Ç~%™ëý¿—“È.ùÑ:N¨2*ÒèyÖ¼°õIÌŠ ÏL9Cæ…ó U_£ÖKÛŽ·£E%)r‡O«iÁç‹p”=øS¯ÆZÉbÂ4ë…g¹ù}î{¨È¢{† ©¹—ñhb®öïQ¥«ÆÕöAñ·¶\õ x"_Ñp¿°$y®P-$Áûæâ# }¼4aS©cÔ‰žÛÃU9¨¡%¦’óÞÈÓ9äÉBéÙâÏmÒ4`IZO €¿ñf|rÑ¿F¡Ëù–ü‡”RæÕ’ð‹cëaöŸÑ³ð¾™X؇/Æ_¼Â¸7±—¸gæy ÇÙNäI {8l¤$Ctîü|žÖÑ3jÐz ®ûͰy’w€ÓÏZ,q{zR^ly!°gúN%›fYÂ4W‡[q½}tñ¦5щºÛ®¤nf Y{>âhÙÿ€Õö#¬‡y”öÜVëc¸™~ÏÚcò³dÓ¾o¨†®ö'VœàqàAKƒš?ÏL3ÛÃö¡Ú°;Ó· ¸©¿ê² RmG•M¹óŒ�Ÿg4䦊Œ¿îÃØ®\ÃÆÜmu¸Øô”-¸Â»\ÏçÁHÜ©ô4èÃK¯€'ò ž›·(½6˜¹èÃèÀ3 {m)ÿê,NL{l0V×ÁÂTJ%网§sÈü ›Ëo¢{î3££Ë€Â:4ÑÿÕ´"p–�ðϳ›¨.ɇ:·åúfØç´ñ<]Ðe©Qm•©Ó¤ÙyS4îÃÚÔl9ñ9J*Ë Nýe-|�]Î?ü¿oMêgе%l>‰{fÞÁ™újîfè-ÃïxŸÁ࿈/C·£™fö7Û1N/Íœh0ß…m˜%{.J¦\w#t+«£'Õë*¬TDÌ:èÔÙÐêMhê|š¹)ë:nO/!΢l«Àž LsõÑpÕ6=KœR }nD+Wr÷¬€a©o‘ ¾©18ZoøµtUz˜Úû ôh7 áC|í1mº*Úš{g6߯Ó_Ï‘õý6WýN\iðËt1þ@M¾_XÞÔì«ío‚ó*r%—D¬<p\+DÚ¢Ûñ”…ÒIÐàÊC˜«A£Þ‹Âr=šì¡¥Ä’¨’”)¸,—ħ•Çä\Ò Ÿ=Ï,$Žûì¬ë6gl kÝîŒ]—‰Â¯èŸÏ@»K+²ËßÌ9ùîò½y<ÑX÷K¸¦Óì îßì‰s]ÅK´3˜U`ΦNEºúÊéœ-ÝÍY:ŦŽ$;j}mKÅæª«H³žò°æƒÜê¹…²Œ¦þßR!gÚõIôÞ qÏ<ŒöÚoa|\d¯éƒÕúŽ©ûj¾ Œ¿}Ç3Ðnl¹ßˆ Ô8 Ølú!¸o¡ õ#dj¡ÙFÏ'©ïs•tô|oFÓ:¤Ô£_–åâöô¤¼Ø²ƒ»Àžž‘FZÈjÇåº^HMZVÓ\5þ Ú¬Lhªî™ĺv®k/Öf¶¶@úa>×ê›–‰eA«ÞŒ­{>î3 ­¾‰‘ȯö˜jöa—¿”ƒG5%¨¶‘E›Ü`×'IÃ"Ld´†š*Ô2e:È•L´Ub_Õt[;ÑP¾Zc+~ÖD†¨‰Õ[Iù'Š ÷ÃoÇ™ P2Ëü)"%] m9qÊ+O@³9’5Rb—¤¨v%¶§…vÉHÉ:aAÎ ”qÊBŠµÏªöJ/WšhEéÆŒw±Õê¨ê þƒwÀ=sN®{£|uøe{ò†£�µ©·æ…•ëѹ2m×ã¨Ë–ÕÝDã?{6¡¼ó ùC°ë-«ñZq®¤)¬µ´à¼3 σ⋸g½iveÀŸ‘)x_Á¦?€<©\}µ¡ƒ“¯&ŒØ`¾P„ô U¢ìOŸõäRûUCgÅ–àe1=×K¥7ýˆf[¯ÄŽž4£©É²ßPB»öNc´é Ž'¨U},¤¬ë¸==I›Èrƒ«ÀY”4Uym#-t|t“É>˜W&ôó•Œ÷\£‘œ€IëY|²¹¶$~WLï'îFTøñ9§² –+%È)¸ŠGoÍh«ï-kR‘SkƒG˜;D^Â^sz‡T3ï ¨@œ›Sûªq·ÛŠî† ìÐ^C×Ïß"?CzƒlEFyB[M¬ ߣèH-€Qé̃ b — Ö!œMŒ+×T1mZ‘‹œ+^‡:lÓ½¨=T‡~I(Y‹7k¡ÿ¥;$xÔŽú²ƒ(kè‹£$…C F¶ç,¤(e¡Ýw¾FAYú%g'xðÄæ”œ ΙsòÝç2¢"ö³¤ë2ðÍö”-ô<9dŽØ'è:¯Å¶$‹†Ë:?Eã÷Y6öà¾L³ØÈyñïÓ-!šiŒµUádÓËàŸù"î™ÉZÜw•góºæÈÑ5ù÷Àai põÕ¨ÍýB#lˆõÕÞ•EIˆG<¢ç½ðÜŒy•øþ[-Ù¨Xÿ3¼v4C—} °wK"J¦Üž,dä]–lóËš¨M>Œôüá¿h§™Œ¦’lä'(h :‡Ä·§'åÅ–<ö¨ÁuÍÝ#­ FíNäÖ4‡8È}Iú ÊÊ„ß\E[é&¨2Ρ{™ˆQ½Z®4:ïxÿü9k·¡Æ.ÍLô‹\®Ñ£ÕôÐ+…®ó)ÚÊóº>ñÔ¨ Þ0Ñ56>fèà%_‘Q¾xà0”âdƒ=ÄÈxbRÇdv–³ùmàÉ8]­Yjé³_×RÄð®ÙvN¢�¡€É¼Œ8^—»ãy ¬+•&PÙ:p±v¦,¤É!8_Fì44õ}wCæâœ÷ëP¥»„FÙƒ¨ëƒŒz<3çä¼7ÊU—w¶§\yëY-twÂé?Kúa³\AiVf@ÌYat¯ù|u»PèÀ„ÐéåÁgج9JÝ—(ÕlA K¶´HÄ=sp_ðMÁÝqš´’Uó•ãØ/¹D˜³z¬ úö¿é«Í=Kä`úü©>Ý%”h ìz/<‚®ú,½pI®D±­i¦ÎÙS08¤~f2&ª˜°}¶2kfáéþYÛÏÃ:±´›¬¸5 nOOÊ‹-Ox ìQc¶4"ê)`ª³)Û oFX`š«Ãí0w½^dÀ ¯ñ?ëú“hØ%zí ð¹ÛñÝÅôK-ïò9aÊ߉RË ²NUÖE<’\*%ê1ÄkÔð:êP|òóA2FÆáñJ]Ñòå 9Ì91ñ6öç#EÌyu@¹[‘ž½'b®æC×&5”A³÷Σ@w6癯Äѷ݃¡t'6–¶JlaKÖ¢¹,LÓDGŒöêO â¬"¸Ûp±JãmFD-y¹:pï0ÚY²h)­ædÈçÔ•QIˆÏö°]E[soCúÆ£hzÚ]ÆP±dzrÍœ“óÞ(_]žÙžrFðôâzÉ6¤ÌÍ1Õ&¶–ò«úIA¾‹ãÅ×ðtr�¦Üõø¨¼#‘åBkõd¤¬EJÆvdþ3q-¡Å=ó\ †þ7-/ýúüMP1k¹ñòÕ8_hpÌV÷ã{›¹%š\äV@ßd϶M´2P,Yøx%•µ»ÍФÅv’3ó ´MÌbv°{×oƒ®ûuð, RÖuÜžžÔMdõBœÄGz­C‡c0hpÿ„*õÇP)š%i®ÆŠ†“±¢Ä„yC“ÆzXœoá±Õ£ÚpŽq–Ûž5Æ]N¸B§gM8©¹ŽAI‡1,¸¶:–+<e«²×?éE¯²Há ì×#3eΑ^‡´|#M‹"H¹Ð”œddŠd}ŒÇ|³xg@žo£}±Ñ¸'s+òôÒß§?P³‹v}¢¶Å%ì«~ˆ¿‰³â4eÈ\ä™9'ç½Q®º <³=—>x\vâ´ö oÄËyïYYÐy Yx„tЋ6«Ÿ£áÈÅ„�Å=3yÍFü¿Ò·aéWd-VCí®èŠQÒ¸´e(áp¾Ðà˜­>¯ÿ˜’µö´ÿ¹J5YȪ`ÓŒZªÊdп“1Q.Gã,®)í8[PãgÑÏZ,q{zR^La nËWÈš7¸‰³Ÿv†G¼d…h0ÍUwÊJõ¨6]GMÑ^hõ?¯1ažpMÉç©Q³Ð`ný- âüj.Àâ”’þNo8·:–¼e+˜é§h8UŠêÖ!L{žÁî|Mf1šGžÂÆÜž~2×èï´Zaëfl…= ÏãÇxÆ+¢6ܦžwBoLÅ"7޳Ñ% [˜èÀÙÃupHýR…Q´:hƒÝ}å;ŽÁØuúü= Ù·ûÛp•¶·¥úÚâÙËäº7F <ËB—!V¶§xý …•IÜvž0 ·µ)°®uçPsõ'töÓ³)qˆ{f¹vjJÀ…†/¼ ê5C þ£Vz¶:ÕÜìú´À[ØkOÁÐ/Õ¾ŽRjýv÷¤ Î]ŽDÕM>RÖuÜž^ܛȪcÁà¶Úžb$.ã]A Ls5Æ"ÆšqôЭðVšKŒ\××”|®Pí„ϰ¹üfx7ž. wèÐDÿÛ1"Ò€IT«c¹!ßv¶òb–cø «·î\FiöÇHI߇ÊouÈM æU•ì( gî>4[Ù5axà6#?û*ç‘ã8Ôé‰K¯_8íÑ„%û[P‘‘%9¸2c«ÂÇd^ѹ:Ø2=§à¾w:è4ebz²ÓÿÁ˜¹EÎÇåÔÁH6º ³ðz&ê@+,?èšfFx¶3;ƒYŠA›,õذaÊî=KØ\õÌÜ»êò‚ó…Ç.¨3¶ZTööšƒ ]Ÿˆ/ê›Ä°í&ªKò¡Î-B¹¾ö° Ð ªFM(ÓxÑóÃK|4IY×q{zqm"+�að.Ìï¼U …,Œ°–•f´KºÁWˆ¦¹U£†Tý€üus‚¹ÉëÚ{—2½Ä Ê7%Ÿ/Tá½±î—ð�Ûì îß쑘B¸D´:VXžPáÆ-ØB L*�ºíP›ºÐTRŒšÖÇp¹‡ÐßQƒÏ¿“j€Ò›ökÈO[·x®ÅÕ›ï( ´5ì²ö<9í1>3¦ ž×Ž+yP}¯ ÝÝÝÁÑëGÂ8(±ÀÈß5å£ðîbÂ[ šcŸänHrî`´JtV t`cm§°~ ©¹ÑéÏ”f9zŸÃr²„! C¢ž™sW]žð 4sí‚:ùΜÃ[`ïrÚ`1”"+¨·"¹Œ¦T¤« œø¤•¥û±9K—äŒ&ÎDÕ¨ »‘™–—°µ )ë:nO}YÎЀËStÔë›¶Et$sU´ó•1LsuµhÔÄzŸª½Äèÿ;øC"á’•øM~09pÒêXayB5&vŒNŸº*ˆØ†Š:8üs‹œCfhÏK5@i�h3ÒŠ® µ{nž‡èì¯án†Þ2ü޳‹¥ôi…¥=·•±,ŽÚe©Qöl2Ti¸`y*~aÊ;¸¨ÙÏñÔA§IÄ€¨ì9w0Z%º ²e窾Fmãc2?ÉŸíh±½Jî^&cèüd#Øõ)¬»ÐÜžL™œÃ¡µ$÷Ì<;5ñ„o ™oT²^ì7P’¹~~ïb–Ï M[óPóp4díÑN‹zZIšƒ15jBGŒ¶ñà?X¤¬ë¸==)/¶ü™ÆxêuȘיI¨Y-í|å Ó\u7¢¼üJˆ>ÍœFMa’Îko‘ÑŽúÓÈ+k@¿(ã|è)ù*¤æÑÏ#°%x1b» äVÇ<àDµ:VXžÐÛËrì¤5þ@ =Æàn8Œ4z›³'TÛˆa&­O“žÙ.`_mo„ ¨£®…Yg0n¿Gö/3šíc¨–Tûm˜›KR|û޽¶ÎýFd &zþYWn.±•P¨°äT¸^©½Ÿ)°;ãÐãÓÍåh àµÁP¸º¦.òß"ÛÇRfqçp&24!­_d÷#d–ûÿ\©ÍÑ‘äÛÁh•è2È•Ù>¶Õ†­Ø™¾ÅM½øU—EÎäí {ãê€ÝÎûƒÆ½P…e5¿cÿi4ØÛ ÏßlãÍñÏÌ«SO8š¹vA BÎ^—ýøä3h§¿C戬\¨©Å65ÉßG¨|Å‹W\Î\žHY×q{zì›È2‚,ŠÁn3ª‹²µž4#æ„Í=nLŠ.}Z-í|å Ó\]-5“Cp¾Œ¨M¥ŽÖî¢Û‘xí0‰m'<—^> ‹3‚à}»å NS!O¦Ž<`rà.Q«c…e5ÈŽVÀøÓ7È^¼Å¤BÚÍWP¥;‡Ò=‡J%§à²TA“±5b®„Fû£ÄÒ'Z~¸?XÞò7Ü ÅHMÉBá ¶½‡1Ž{™0bƒùBÒ7T‰\WT´ºŒõaAñt{±Eûo˜›ºÐÏÔ5NfpÔ+ðÏ­FÚÝ¡Ÿ ™/÷›aóH5Þcµ”yU"ZÂ˹ƒ‘ãŽ{JFG²ðjò™[ÞÔì«ío‚ó*r•Ò³¨Äcç ]ÐmÞ u®|!£LµùktO$æõÌÂìÍf²Ï߃}œf7÷£½áG4Ë`-r4së‚Ê“7°žÕBwç!œ~½6b_—fe¢´m4ø3+�žg.G¤¬ë¸=½x6Ùã7„ªQL3SmØ…úfô0ݾ«¤¯|aš«Ãíh°Fš¦³ðÝDáJÒ¨‰’XyB4C ÁáV\3ÿŽ>×\†6½ÿg=b‡åÊi¨ý:©ÈÈ?‹úõ0´HWèàw�Ó›‘¥ju¬°\¼C°67ÂbM'¦ø0ÒóC—8š©ó6F©±ÎÕµáuð§ÄASáú$Úi¨bc*¶éíÄqfwJÝÊÞ¥kEÅ%u¬Yp b UZ1êû—Zᄯh8W½®ÝõŽ-åeÜÁHÉèH23d?«Ä¾ª;è¶v¢¡|´ÆVü¬?ˆ %Pº÷ÅC Ü»W­£de£¶¿®¾É¸OˆCÔ3Ó ²{¥7‚ iHÉ<ˆšÏpÔò*‰6TÍ]ŸäÑA<½¸^²-(6M†jò =²x6^p=s9B?o±ÄíéIy±e‡?PsÚì4¬M;„+ÖŒmQçVA;_ùÂ4WcjÔp,åa„éýÄ"šà–æªý·ŽÁŸ O½›Ù§0îþˆüûuØXtqµ•äy�ÇõÁëMº;¢T¢ –†¡ök¨{ô®LÌI8*‰Aý3Ü6˜®÷øÏ Á;Œ>ÛCÆRi<7• Owßj?…jý X^ Ãq÷,²wSñïà‰%Ö:ÓD‹ ?êïc4â,ôY« ñgΑ³s´ÇŽ[Ddtð„vüDÃyêÈ·»ežþÿ…†«5Ð骡7µËà™ dt$Znññœl@ÈH-€qɃ°Ëúù,7D=3-Î¥çÎ &:¿ÂFÕnâ8“9@ÎMRKobš§|3ÒÏ]™ft,àƒÇe‡ÕÚƒ¾/ƒ]!oøjñCʺŽ{XŽ›ˆd¨&†£¦êâÀA•ñgØç&´¤íÄØTº>% ¦¹êþ%Ú‹¨Iǧ ÷{˜ yÂuíÑvÎAØÌÕ(Ñä"·°ú&ûB)pÔ»ñ#LÂmmDméhJ/¢Ñ:Ïô\CR7YÞ7½³ðŽ¿Zø=t<kÂIÍu *Á×UÌû³Ch ÷£òŽØºHh?Ø Ý­\)ÍAjJr+kðMîÇÏ*~êB[íqh4§qÝþ‚Ç…ºF{\ ÙFTøoÆçÖy,WJSÀÒÒùo¼_|F¡ËIÖ9½41Çæü†%nIN »E¢á]¸£ûœM4œ£^|»ë;ÇÝ‚2ã„ ÈÜ£†:;©¬¢—\Q2:’‹C)N6ØCÎÍñ$Ï-—;tXnˆzf*`~à�tß×B›ñ!Ö—ÜÅ«×ÜÕåb·¿<=™D¶Ê§™ÝVèu·%–“É3£#j«iÖrW ÕjÆÕšsLŸ¶˜8 HY×qï�Ëq‰z£éè0¡Z»êâsø¶²ÕJ×§eÓ\•ˆ[Z¸®½¹¨?qÕÚÓ z+¥š,dU0DýyêÝ„1WUMö6J¦DÀ¬Ìµ6ŒtÀéX‡4ÍX” ì*%Š`iÇ ”åF}GˆÃÿŽ®M>«)[ôpÌRÇû3¬Qß@oÓ)ì­y�-)ìoEõçWDè9^PaÜ™Ð)ÀûçwÈYËP.I30ÞÕ ÆÓ]–šœµcK¼¦ ¾H¯Àû †`ñ’t×c! Ç·6ç"¾žÛïɾ;hFñ¾ë’³¸¢dt$·è1ÿÛ|`Æ Gß`H fšëÐ2,O;+ÙÐù¹Ü÷Ì4 Û†Ú’hÊ~€Ý3 «×6ö¸<K¼ÏÇ€^ÒÛ-¸r:iÔÖ›×׌*QPX cØÅqtêlhõ&4‘ß+>Ð2÷½Ó~Vµ!{Ô{þ¤å³\´ÈjIY×qï�ËqáCÀi¼«+ÆY¥ëÓ²€m®Òˆó¨ÕUãjçs¿1í¿…¶»ã,ƒ‹žkFý·†Ö”·°×ž‚¡_b-3O½›“vÜÿu$ø§d@×ógØ\~3$£€Œ. wèÐôG\a%ãÁ€32ø> —ñ òDvÍñwNó…Á«êë°5TRÃ)¾˜´—$ &ö²€Þíøîb ú¥n޲Õ!†5gÑpÁ;ŽóN*OÑtòŒƒ{x%º»3´Ä®hñ­¸ï1ôê h»0†d²•ŒŽ¥'¸‡-š«¡c½è½qµA?ŸåÆr|æPÂW¨’Q�]ý ?KÏèä™ÑSŠan¬CZA½¸ý†øž›> 6þ¼ðƒæãØgt*k1ÁÐïK,q¯&)/¶"q¡t}J6,sU4b—ŠlÔéÛ™¶Ïð”¶x^ó1r ö¤Š@ó\{3¶ZÔEé-™³!®ý|<õnÞwÓÎ3 µÇ‚ç1ë~ ïü5;ˆû7{ˆiª°z¡Œ q:$Phuü!6ÕôŠ+¯˜hEéNšQprRtVL»o¡ -ÙêÝÈÜ‚Œª?$î? ¸,à%’([íjXGІ“ÏŸîz†2žù@™ß¨ª´\°<ÿù%¨»^üLÁuç8224!k ÜZ—Yˆ¯üëáv0³e$±0ý §JQÝ:„iÏtõÐóƒ^¶=…Íú8éeÌ+²‡ék‚mäï¢&ot?u,\nt\AÑöShèW2P£A÷6fáééDO´’Á®} ³_ÙŸYLÁiÜïØUm<Œ+R²TbÀ+£ÃÝ }“;Âö¥6Bi0cg£MgpÜ"â“–žå œ¹óð9¾ƒ:xæ £ƒXiÙ52Aʉ{5-CýìN*`ï¡N€Òõ)©°ÌUÚbq˜ÈFM[ž=xŽIFÜ=0¬€e"y×µ7ùΜÃ[ÀàwÚ`1”"kãh“ú£ÖÑ2’ð›v²®Ýí¨®h”œÒª �ÉDvh R’êÛpˆ6z¼4•£ÌhBUöÆàm3 R¶@_õ5ΗîÅ^Éíé9_pI”«vH4Ñp*~y‡õ3=>Ý\tZçF …Äymê"ÿ݇ Nà}‹·IÌD»SYØÈ;Î%9?ÉóXŽáƒ¬Jܺs¥Ù#%}*¿Õ!75P¥Ê¨DÇkÅ!I !!T@VY>òå[°ÝÐG¾)…HØí<d>µîjH™Lp¿†fóé m7·å”|Ï­äeùû…Ô.üµeÐhÊPÛhÅ g£®ÉõÕ|ù-t”¤—‡¦’lä7<þï`vwg"C’ýî¿Pú™…åþ?Wjóp@ÉtKRÖHÜ«iù/ÈHy¨ J×§$Â4WiÚâç_“~ß4¥û$ÎtŽû”¦¢#+§=7uí7PlEïŸçŒâ¸ÍÔh¶cœfÀ8;Ð`¾ËÖ2Q7í¾×è§ZSEYÖ„ µÇ ÑyƒÇvwüN‡_D»fËbQïy‘]Ið½,à*’([íhí¹‡ÐoùW1·h'IÚÝ¡·˜ñˆAÊï�l}rÉ+¤7Î[°Eÿ³´%ð¶@mêBSI1jZÃE¿ÏŽ|þùÿƒÿB!An4Þò hm¹°Þ©‚:õƒÀ÷ü1…è>ÈÆB™Mô±ZæÅ+X´±F•í]1ýýÌø¦à•‘O4_¥ÉFFáÍäډœ÷ëP¥»„F±ÍéyòàAжž…§ûkdm?«ß_y£h+Ý‘-ºxäUu.q§ÅÕ”5·§ׂ”%‰:Ô£|düÙ}‹[‰X.,sUxÝ…êœ4lÈÜíß´öd¦!5}'ùß X»¥þNÞ7—µç›€Ëþ¬¶§ñÎÀçŠH³|?‚Ó€A½–k¤Ò½šmÔA”êÙð¼iJõ_@¶Ž|~©ÈÐTàJÓ46Xñ:øS ò!ƹ:†Úq¹®âßó»,àÛöR®Ú!±œÁ"´þNC[!1¼…­j±ã\äë´B—’Bþ» uþLYÿš2C{>™™[«ÁÓCþ&¨æ×Òº•)`Ê ú±A÷® èÚ‚YÒ‹Æ+Œ«üº‹5õD?³àÅø‹ðçzÖtãSnÏ ²W÷ܘT;ÑßéOµŽø#Û¾ñ(šž¶C—ñT›«a›”z½Æ7nãqØ¿0Ù׋'Éà\HY×q{z웈\IÔ¡;º­ÚeLn'„Uý¬¥âßÓÔ(K œUWq?É]}XÞÏ»à%ré³~ƒ\*$)Œ¡³b TÛôpL9©z7\oÚiéH#t¹Ÿ`íF-êÿ>¦”VÁó÷ ÕÐÕþä/i<<héÁ°Œnƒ–;±Ï°ñÑt¾×P‹VÆð==¯Äík\Û^ºÑrí6ze× †¼¯Eí¹É`“çjh·ÂØÜòyEŽ´_6%õ2AÐR¬r줗o~›.œCcp7F-ÏÚ“‰ ªmI­^eýõ€Ý¿–l}ÃIoÌ gèžÊñUF_b4 öˆ¨gž/rž©6AsÁgÒ‚wä³ãÕ‘#þóƒø‹.A€÷Ñ%ì«~ˆ¿©¦Žá(ÃåH´mÚùi+JÛFÉ‹ À´÷d躠h.òGÔ ·§'åÅ–‰:Ô£|í¨/;ˆ²†>6FI0ÍUá ݨG×¢R7²ÉNQ)†‰çÚã)r)<7ã@^%¾ÿV‹ Õ'(±<ÃkG3tÙ"„ËÄ€›vI‰ ºb-t¦vtÿ|Ú’%¦´N¡ŸŠJ«6 sg6߯Ó_Ï‘÷û6Wý¥Ñ«Â"˜RºßqnÔ·‡ümL‰Æä|KÛa@¿ØtQ^"‰óeX‘ûOò»Á>·L ®†ö{;€Ð‘ŽrZª»Ú¡AÅ£0þô ²×ÀôœÌQšÍÔ|Uºs(Ýs8©eÌ+›ÈöÜ‘CiÏý.è:fcÃz˜£ÍkÁ…Æ‹ 'hcõÌ3¡ÿtÊ:CÎ1+º Ÿc‡î6ùï‡pŒ$'Ó0±Ýã@E۩èºÛk÷M”ï8c×=èó÷0j5=Žó–AÌ /Ðvö0JŒ“«Ë³B‘²®ãöôØ7“C]ÀäÀ�^F¬rÁeÄî<ÓÒu?XÅ0ÍUïc‹> è˜,*¤ª«qÏ1F\ ¥‡éýÄ€¯ÈåÜm—P¢9€²ë½ð¸zèïë…Kò É<~äÄÄÛØŸ°ðÂŽ)Fžàň£¦ªHW¿KÉ54P³»ü-h=xTS‚j›‡üî'0ä[Ð*¬^¸¥tó<7|QZMG?ˆ×KáÕõ‰5¸²ÿt[¾CqÎa&,¾Ðr±‡0WƒF½…åz4ÙGÙö|ž†¶û'TéÌ^Vk7:êO#¯ì:æÿ.IÎŽíBÓu=±™èœªáÖØ\I9+)‚wÖæFX}w bœ ‰ й.ÜvŠJ{îXÐχ ˜ÏGJ4Qozá¼v/Œƒâ f¥"î™i†sêÚŸ‡}ï³®6Ü´%3¸œ€îˆœ˜±Uáã°uCñCòŒâZr‡ñC®1eÍ% )ë:nOOÊ‹-'øêÑŒä@ËJÕ¦ØÇ.á°ÌUŸU‡” ù¨2ÖG(çÿÚ-{¡ûü·¹ .É›düp]{4)K‘Ëhé™ácOæ?±CTdž;õÐf§AE·”Ìbò½þ ûÈFXJŸ&Zqj_µß¹ìn¨Àí5týü-ò3”vû«®)Ý<Ï Þ¡gxñšSJ7×®O|¾ˆ7ã}}ÎGâ[š'ˆÀíê‡ÄáQC[N¾‡ÊÐlÎAÃí*WC{rΗÙKÂ�Œ»‹—KI|î_P£ Õ ë‘Uf–Ðý,LcÜÑ cÍ9²ª¡7ý’ċՀҞ;èºa#V f727üéÙ¨ê þ,_Ä?ó†m7Q]’unÊõͰ¿NÖÞ5çîˆ<Ô‘ÏöTÝëBwwwpÜÃÿU{Ÿ!;*zÓƒäÊVRÖuÜžû&²p£Åx…ÜŠ²§iÒM32ùI´��ÿôIDATí<š’óQÁàO)$¦¹êµÃp˜¶ÜŸ£áÈŤnÚ+{íÍ;=3lmÄ|ĉ±Ãb¬‚6g ¾©ÃNF¼S 5TËêSÿw>>Fž±¸ «®)Ý|Ï ž)Ý\»>EÃ7„¶ï.£©_jJ7Oèíj.rj¬á·¦{Q{¨N|‰Øô<)þ Ž¡›b ÷ÐjBZ«’QyB4Õ6ÔØ“Q|)`º¿ŹÇPÛÐŽGÎç!%ªdïõŒÂíìE›©ÅùçК”R†[+¡ZÕ†ÑîÁÆ­»±g×Y¥=wÂPÚsǵ+؈UúDÖâ`=Ž~ñ ¹¥Oók1éê#(§ûWé~lÎÒ%y-Òχ_wD®¸MØfoÇÚ`å‡$¨m]‚ —Ð?èöb‹öß07u¡Ÿ©ŒYA âÖH€¸==)/¶üàY7/BÈQ!¡0ÍUÏS<êscômÄÁ1é„íIr%¶˜Þϲ#ž9MüЀé_÷al‰§Q¢— ÷M—P¡Õ`§ä¶‹¼Ž:Ÿ¼GèsxÈoVXݸpãP´ÿùž‡Ì¡þãV@ki¨ýê‰ @ð<7ø¦tóíú$Wh@ö‹Å¥ÎÓä3ÛvV†Å.xßâ­o .Ë%‘æ¸ÍÐDÞ–kŽ¡ºñqr4ï¼pýâ¸E¨ðºù»ûp/õsÎ>†~Ë:¬Í¹„^šEC®“öKد´‡N<J{nɰÛyÄFøѲÿiæ]ÎÖ„éW‰zfº·æ¡æahÕ‚€i»‡’´¸uG䊻þ¨s@]°\)ANK×´XþíÂP¥£^rÓ1ÐÏW,q{zR^lù!çºy©0ÍU÷M©¡2äÖÒ?Nk°¥¸ cdîÛ(Þ¸Åwž-éœ÷ÚóÁ3òb!€AÆ_Í&´ K=L<p\+DÚœ–Ìü ÝØ\ÁŸ‰á ì]‡i×°˜: UúÛ°º'•}aÕó~ˆ–»|TޱĢӜSº¹v}’+&­çQ » ›“fÁ Ái»CéNl,m{Ÿ  n‡dm¬<Oa&Ÿ¶ÞÂÛ7x3ïÈPG§MWkÈyIˋډL‡ÿü1Ó‹šMëΠ¦¯Ú¾DV•Òž{)PÚsKƒ~Fl‚çZcÛ¼ÿ¿¢íÖY¨S?‚¦áyðgù"ê™iGÏCæˆýjj±Mg Þ(Ì#ÌÀ7ºg ðþùrÖ²dQºð£þþ¢®`>k4þý‘ìá£Í8vÜÇ9§ )ë:nO}Y‰*Óºyé0ÍUbÈånÈÄžÐ[˹‘GK¢f•@M$ÞǸfˆÍ¹Ûw ø;¯ýE†û!·t°ˆdÆÈN`ÌŽ /#9ЮØV½Ä]å¸p³Ê€_BçkÇ ”åF}GH÷&ÇÈ£ HéæÖõIÆÐ@îõãÈLQ÷1Ž%‡@0çý:Té.Êà¨Î؃° ';xCæ™»eþ½q2÷³2;©i‡dpÁåÅ ©›J-£Ê\ç,Uj%7CvuÔÅxG{nÉÍV8ìvÞBð|ñP!5÷r‚cô5ÞÏXÏj¡»óNÿe^?l–+(ÍÊ ´‡VÝkÛñÝÅôK¾ùoÆ_, #ÐEÎs¿n¥é86ç7`8øÿ)ðCÜ ·§'åÅ–'bWÎCWQ›äºy˜æêëtö%µ*5&r]{~æ´Ã0´þºà”ú‡”ÎQsLÀVU‚Z{ÄzÆà’º©á¥=qvFðv|Šñ±>ãºß+ ÌNXÿ9̃oç;Áó+ÎþƒRߦ ƒg¤æË4\ƃ;›øàõ²83İ“cJ·¬ |f ÕùHS­G¦Ö[Ü‚—+•†Ýö·úV­Ã†ÌmHßxMOÛ¡Ëø�ªÍÕ°M&óû ìks.âáüç4 ï Åû®Ë`o¤6ÝO¨³81í±ÁX]K’:7®>h¯æ�«v;Ú;Ñ2jȰ?cÓʼnØg<½¸^²m¡«ªjò =É)Ý\uD0Ù׋'4èãé‚.Kj«Ò*HY×q{zruùÀSìjÃ-&4ÿµP â6BßâVÂ°ÒæªlßÏäï¨Ú÷-ì]L„Ñ! IúÏÂr6špAáӅК¥–>Ã%V{âó¸fÉzo«FAÉ 8Þûœ‘e$<îŸÉáÆ¦]¡°Rˆ"€]y ê´31‰“;þ*üÜxÖ„“âôJ6¶øÆhSÊõDÂ9;$j¹’}¶ÉMþ@Í.#\‚�ï£KØWýc NÃÑ$kM㹩»áŸï1ôêJì„1 (]~V<›¬Øí<âsÜønD-7Ÿ…ÇÖŒû®ÄdßI{fªH³«zÐ7â•Éž°¸t?l µãr]/Ùo—3Ñ‚¦{¾5Ñ4;�ÓÞO¡ëRÖb²FâöôVšóW±+ÝŽž†¨"Æ–rŸxègÍÆ <ƒ¿¢A_MŒˆjè䡆Îþ~ˬëÎj¶"CÚ‘¤§5eQ:¼Q´•n]œ£Î‡®Mê]4mO<„ÑEk-;Á_úôi1®ÿȨ™qèñ©êå`[õD3€òQR}›¡-ñB—š¹óba¬Cšæ,Úk+åzRáœM�X½é¿@ÛÄ,fë±wý6èº_ÿÁ;ÈÞxê0ªîvÁÚ}å;ŽÁØuúü=IÔLÁuçxDp=ÐR~]f!¾¢®<‚]Ìx®LºUF 9€òµ‹‡îõlPŸã$ÊšþŒlx›¾¥MOñbœp„ý™åðÜ„¼µÑÎÜñÑt&5s1^bMÏ[1+¼@ÛÙÃ(1>Nn§« Cb‰{5Iy±eW±+²iÞ¬…þ—kîè>GYCŸ’ê·°ÍÕ)¸ï8J2«·—íÚ›hEéÆŒÅé͹_£Mr&š�ï“^ôq;ùg'´^o€•¾/¯m·­¢ºž(¬d¢¥³B;5}†Íå7Ã5šº (Ü¡CýoÑZ7J¹žt8g‡Di©—`qMAnÅÙ‚2ïõÎØªð1u† ©yFôGd3.-³˜hû¤"F^@ãMa5ñžr …E°Ûy±/‡ÃG*2 /¡ÃÍ/»†þÞå =só ®¹⫵Á¨Ý‰Üšæs˜¥”_NРéK¼v´ÂXsŽœATôý8Qï%Aʉ{5-ïù>xŠ]‘Ãh`�/#Öµà2bwžI¹YZXæªðªùå¡ê^¨ŽqÐ_w@w°ýI´3å»ö<xbs·Óçr˜ðÍNðÏ¥ŒD!*¼æ,™ežÇh¬û%¼•ñì îß쑘¹¥”ëI‡svˆ÷\£œ>h¯†â/Ñà Ý¨æÏ£ Õžw�¶>9æºÑbx€WJ0=I(åRa·óh æs䔇z“ ¦°ñôÚl¨uuþ?×Îâ@ñ5<åàef9@õÃJat…fÍ ˜ê¬@ÊvCRm~¾,ØÃª 98¢Ýƒ[wcÏ®³ Ò R‘²Fâ^MË{A¾~bWdÓ\¤0øT›j`WÖEÂa™«>ëרexÅù¦];J¥w1âˆ\מ0nG35šífàqv Á|—± ÏÄgvyŸJ‰BTxÎÙÚf¡CB½¼R®'ÎÙ!í06÷E|‡½0ë`Xâ¦A÷Ù&ƒúÆGöYÞ³ µ~[§JoF»¤ x¢ ÎR‘’Y}sÜ^%£giQÊ-¤ÂnçÑ@MM •þ¥ÐYçv}*vÿC‹çèˆfz¡ÑÓœ¬@ãï2X“TóK‚£uèp ’ýyNÛO¨R ÕJ ÔPi-ë°6çzé%’Û®“öKدÌ)#X!RÖuÜžž\E¾ð»¢cdÇ™ÝÈÌ(P»%‚e® ƒ?àóÚ^rœ„B&ï dÓ X’˜º-×µ'8 ØÔtÜ·Pú2 µÐl£m%:ª\“¼ºq›µWÑý<ÄQê€þ?àðÿ·X§W)#Qˆ×9KÏ éë¢ë壕ëuÁéQÒibÂ3;d®täPí…qPš4%×}–3áAìÃPoÜŠ={öâLGd7´¥Æ» =˜òºÑÓ|ùY{qúÊ l)/[©ÐýaÊ‹)!"bj'óýo²õÿžºïÏÀc7¢(}7m+qÏq¡Q^‰ÊR ¶å_IXÛpñLÁmù Y)ªù=Z%¹®Ìô¢fÓz¨MÁ¦~;¥¯Ú¾DV•Ì …D"e]Çíéų‰,ˆaë]pêèøë>Œ-áÊ5ïgžÇñ,ÌJŸÁDçy6ؕۃ%€i® cè>»¹§ÿ #Í©7àBÙ~d¤l@ž±/"€³´Èuíù¬ß —j:Ï®³b TÛôpLGÞàˆ„ëaÂÓéUÊHbÀ{Î.Ò6kG}ÙA”Õ·‡üØzyžM«hç6aÒ Û†àû'Té„|oÝè¨?¼²ôKtN¸î³\¡™‹ÙX³vj{©cCË]ª`$ëbÿe8’w·y®ý§PßÕˆÚ’ýÈ×Õ££ÿ5Yq ‰…_Yèj€Ú$ÌoðÈpi‘åÞ©ŸA×:˜ëþój-Ö´¥Oþ×]‡õEf ÎgÑÌÀcý2ˆPßïìtŸ¶=ÅȊ˾óbÐT„M¥ŒÑ³îA•ƒšGÉ<?VRÖuÜžž”[~xà¸V¸x“[“²`„‹&Z ûú-_"ã㪀(¡BBaž«¾Q<j8mvTkÖaCVªšž$]�Z®kOxnƼJ|ÿ­ªOPby†×Žfè²DÔýŠçaÂ×éUÊH¢ÃsÎòÔ6ã­Ñ´ ÈLX2²3°±´˜"ßõA¬Ï8‡nC~rΗ{ 0�ãî"˜žKÛùî³<‰ bÓ@Í7è|ÕŠò¬jÙ:Á�ñVï:õ‰­·™EçÑÔŸÌ®Y+EC*ìv9;¬g±1u7*ê;àp{Á‹×ÎvÔœFÓ0ý›x\89f•‰zæÈ ŠÏw›Y’›µðF®¥›¼™Â°í'ÔYœ˜öØ`¬®ƒÅ1–äÏ~u e]Çíé±o"Ë�Ÿº”¢Èp?\ÓÂúŽ©uàÔà‹v›O»Šv¼V¬ã„Ã4W‡Ûaîz½xƒžèDÝmWR7n¦÷³$L‘ÃöJ4Pv½ÁW]7½p1Ýœñ:Lx zG+#Qº>)PxÍYrnpÓ6ã«Ñ´:ˆöùÇy \³Äñl«FAÉ 8Ät­‰Òõ©ò„iªm ú¼÷Y^}qЄüM´‹:T&…œW"«¦‡ÌÂdò7ÞŒß}}0ìþ GNiá/qP!%Cƒò+-°K¶ïD¡èbH†ÝΣ¢¸ù¨èŒVjFÅq¿Á‘¦—Á?óEÜ3‚vŸü€¿üÙ*ô|ÊJ•]÷ëÀ$ ù–nò†Ú)͸J³Ûªô0µ…6MQH$RÖuÜžž|EL®µöˆÛa ®!©7.Äà[t›O†Ý ¥+áÒÀ4WçnãŒ@ªyò¾<ú ²Å7Gë ÔPg„�íý2hAÏÓ饬–[…äAæì¢ŒŽ\hJΣÑ!½^ž_©Õ‚�ïÐFy-j·šHabÍ1T7>–ÁþȲ7ÛÈ\{�çôkØŒa°ÈÁ pÁ\^‰+ß–C“‘8ËS¶@S~Í6—<:f­d¸–…®Øí<šÙöEŒìºi<7}Ž‚†çÁ?óEü3Êà®›ÿÀkìµÎ_pÛê&§^2Y.¥›ñ2÷½ÓÁì¶Lìñw_ûÒò¯Ê@#hå#e]ÇíéÉÚYŒbÀZÎæG´æ$ãt!´f©¥OÄtñùà~sõ1hÔ{QX®G“}4É›Òêi®ºQNŒ¸ðÖ†×QS´ZýÏp&1Ê&Ûµ'¼@ëÉ­2±ì"hÕ›±uÏgØu&Ù™cœÞUsë¢<)c¼‚JpQ14jXƒ[îÛ0ü2üÃSpÝo†MLéÔ²€ógÆ•¹ìžTdh*p¥Ù—"¤½„(ºRa·óL;®à@ÙM< ){Ö ‹¾™ëH.·‹¸g¦êÀPõ5jýjògG;Zl¯’ì-—ÒÍ8ñM?BN¯çÔÂ[ šcŸ,4‚V6RÖuÜžžlE.Œ¢­tëâútu>tmÃÁŸOÀ±û)éjhË+í|7ç Bqì–¦¹ê}×èâcCxՈ⃷Âo¦—¹®½Y‡[ˆ!œSk#‡/ ŽPqË—äð;½#™‰ï1&VË­‹B²áT‚‹R!û—ù$ /|¬ÿAõ-ôæftJ ¥¥O…ÕaúùQ:Z½ MOW@ê9çÏŒ+.˜KÏ⎢ÃD] )Ägç½Eÿ­‹uÉT[QvïYÂ>sQÏ<ÛÃö¡Ú°;Ó· ¸©¿ê² RmG•-2˜½”ȹt“# Ly#2®È{w|u0»MÄ€’]“¤¬ë¸==)/¶üà}Ò‹>QmOßuìrã—”é^Ôª[9½ùe Ó\ªQ3 ï_? &wòÌ ¹®½{ 6­™ûlˆÑN5Äi+ÏçÖþ1ù¬’[F"Z¢6þ7SמA%¸(º½§Sœj ꟈë�øŽRÚÀX‡´‚zô'±¤6~8f\QÚC'a öf3L¦{°Ï@ðô£½áG4'=‹B¾ÐõÄ^u÷ÀâÏ¢<‡š«M°ºƒ:M BÔ3û5ù@·5ûj`û[€à¼ŠÜ¤—Áɵt“#³ƒ¸s8šÍ´ÊcP§}„ÌÂrÿŸ+µy8`TöË e]ÇíéÅ¿‰È·è1ÿ[hûÒ°1„?Íuhñ«¥K {}±Ø±Ÿ&Fò6¥ïRÀ4WcÖ*¤æ“jP3½Ÿ¥Àç„)'J-/ˆñµ`´«².âÑŠdZ%·. Dt6)¯De©Ûò¯0Ô~ó *ÁEéýëÇ:4F„h£Mðsô¹Ñtì+X&DDºÜÍÐ7Ej0x`Õ•mƒiŒ6ÁqËHàÿz'dòŒF±QæÆ�Ú/›ðˆ8?K çÏŒ+nÜk²¿Û î@SÒõ)!O`ر5Gá\h(HCJæAœÐ|†£–WŠCÙÚyï@Ü3Ï`¢­ûªî ÛÚ‰†ò}Ð[ñ³þ 2ä¨Yñ%±*FÂG^U'’™ß´R‘²®ãÞ–ã&òn¨Ñ”î_±ÇzäIŽ2ÒVyçQ » ›sˆQCpÚîÁPº3ØæS!ÑÐïN2êQšÂm2£á~ã 9?˜ÞÏRá{[c=,ηðØêQm¸Çöò`ܺ(HÇ_û½ë‹Ìœß#fà±þ ‡%×~ó *ÁEéÌàuGGz o;P{‰~fTWÁ„’͇Ñ0,µðM`ümäÏù0Òó‡_=›J²‘/FäÓŸº¾ÞÄé(ïþƒ¥‚̳7oð6r¢ Ãèéþ™q…Ìù|5´•!šƒa£§5¹ÐY½”„@ƒu¹F¸â¤w~…ªÝÐ;&ýbš¤·d–'t³1ƒáF=ÌѲ¾…§¸~®à 2UD=óŒ UÓnk{VjŒýR;àñeu”ó¬QЍ5$nOOÊ‹-<°êkÐÐM»2ÝEMÞ>è~êXèÒÔqEÛO¡¡Ÿ!º*¼ýúqdú[AÒMi¢°½„0ÍÕ5r`å­½åÄ Æí÷üA»fûaÎöÛ07÷`X Ô¬n";›P|¸ÛtÈbrFx•à¢4hF`¤�9ÙÁ –øÞ–¯EË‹ ÜÓ ¶¹%š\äV@ßd–CÏÂÓý5²¶Ÿ‡uâý6ÕÛª®ÁÏó]$»Ña<ŠÍ¹pÏo¿ÐñŽ$´š<OqßP ]íOpûFð8ð eno|nÝnl¯þ K>íæ‚“!Žá¢‘®j .8�Ý÷µÐf|ˆõ%wñêµwu¹ØmXAN0?èœdƒî]ùH‰ì2GÇžLlXWd1a†Rœl°‡d¾ÀHÒŽ•a…Ä#e]Çíé±o"rEÀŒô?CSuçyƒÎò-Ønè#f ÄPö<ƒQ¶¾a¥5÷²ÒæêÊ[{ˉ)8 ûƒšSÃÝPŒÔ”,žÐ`ÛÑ{SÖõ*&PúôiÁøËŸQC ¿¨TYÐu¿üHÒ š4]­_;ÇÔ¾3ÝxBœE-ýƒã¼®Yò]·U£ äbó¹Žx)PkO“ßó%J5YȪÞoÆvšHçvªå){`è_úàÌSè7ì!ó}2wf`cñm<ýõ2T`sÕïHî]ù êkàMÌÏš¬Ç ü_]J &1Ï×݆ڒhÊ~€Ý3 «×TìqyÂ粂v;j4ÁÖËAU*Ò³ PÕ9üY¾ˆ~fÁ—ÕÂAË'J‰°B⑲®ãöôV´³(¸Ñtx?Êü—n—Ö;UP§~€-úÇ ÅHN&+m®®èµ'{h‰äQ¿ž0ÑŠ©Ø¦·czîöEÉá^åP1áV\7ÿAp^ç/¸mÔ&Yj¨“Ô‚2J7q¢÷£=;©i‡`x$½=ýê€|wCCåôáø³`r.âáëÐsÿ-ìµ§¤W¼=¨-8‰kᢷÑ·hªÊCªJš}Øå"yð¨¦Õ6ù(ŸÀû¯$;:O ¯zðÎ2?¡ÿ{Tßü“‚Bra·óh ækœ‘{Á <O¯¡hßå„eó‹{fžZn<!ç¤R"¬`¤¬ë¸=½•î, žò7AEÞ'}¯ìåJŠ‘œlVÚ\]ékOÞL㹩yºËøVû)TëOÀòjŽ»g‘½›ÖàLa•B[ÐÞDuI>Ô¹E(×7Ãæœ'ƒÀMáÚ°@Á,¼ƒfﻎAeÎÆ€œÝœ„%gl58Zçç-ù^2”ÛP›â*²BtjT›oè'Éߥ0ÑŠSûªq·ÛŠî† ìÐ^C×Ïß"?#Ù7ÒÄéÊMØ_¡Yóc²Ó³”Ò'Ù'Ly1µh/˜d�¯Y-,D=3W-7Þ½U)VH RÖuÜž^<›È²Aðâõ€ÝŸžÉ^®¤ÉÉf¥ÍUY¿ªÃÐT‡š cÓæKr6Að ¡­ö84šÓ¸nÁãBÕ…èq%ÝQRH&s7…©HWA9Y•¥û±9K‡Ž×ÉôRip±h±„ï1ôê`¦ƒ0†•ÖÝ">¸ KNþ†³çpÇÖÐdpÚ`1”"kãhcé€äƒãÞüïië°&% Úë½2Ø{h‡ËOýçSøøyÆ>2 “ ½O{G§“ÝÈܰE Ô,5¾)x'8*ìv^,1áxþ<G~ïüü߉9D=3w-7^Ï­Å„æ¿æts‚ãÏFè[ÜÊÙ¨À)ë:nO}Ym(Fr²YisU¶ïÇ÷ ÷ʶBµf6dî&ÆïN¤§þS7½üPÄ„b0Köô­y´Á¿¢7tÓv=1i›ùàyn4†Ž¡v\®ëÅßÁŸŽÍ\wŽ##CƒÓs:+º/qBý Öeâ+úçÊ#ØuÀŒçÊÂ[X’8Iö(É\È‚Q±fÕÎéÝÐ}6»ZõflÝóv‘®wÃ^GŠ^AëoÝèî›ÆV *9ïo¿‹Ó ‚LÃe<ªj‰àÅø‹ð=ìYÓhŒOWÞeØí<ZúCL8;)ª½0¾ÿÔ`AÜ3ËUË~nšùý9t¨v•Ku.Ðù$–¸==)/¶ºQŒäd³Òæª\ßÏŒ½›ˆcê¨ Þ§0I˜a°ô(b 1 mG™#Dèi ¦Ûn …ç&ä­]l4†Î ó½m6g1Ñö6F3ÜCGÞyt²dw¬H$,雀Ëþ¬¶§aϤz7[Ö¤"§Ö@‹Rè¬/Éó‡Þ‘L%¨¹ŠœhótþsLJ &©Ì£Ì Õ&h.XàTº †A?6bjhyßFyˆ “õ&?-7ò¹Ý¬…þ—î`ç<:ÚQ_ve }J¶´¤¬ë¸==öMdµ¡ÉÉf¥ÍU¹¾¿c¹H§e½U¶·ä¿}x¶Ì<ELX!o`=«…îÎC8ý7Æý°Y® 4+¥m£ÁŸ ½ẽºænˆÑØ£v'rkšÑ=ÿw}“É倭OqBÅ#_aI@|&iC0PÓùmåùÁ}6Yнq3ÒŠ® u¾Mxp8F’ì„¡­Tƒ{ŒÏGx¦¢QX¸0óúOw ¼¡3l^t>ÇÝmòßÉi'/gØí¼X¥OtO«ÇÑS-p'(ûWÜ3»Ñb¼¿B2«"ÇPû5Ô=Zê½LÀäÀ�^F|4‚ˈÝy&å"] RÖuÜžÞJs~Ç,<Ü‚ùq„‘<é„í‰b8/+m®Êõý̺nãpÆÖ°–¶•'ÔH[—‰Â¯èŸÏ@»K Óód‹«Æƒ"&¬ÁÓ‹ë%ÛBÖ(]§ì"¯Tï£Ô\@ÀTgR¶ЯÄô—�™ Kúœ0åïD©å|þ@M ]_•uØ„ô8AÛì«í%»d(>Œº^$¹kÊ,&,Çñ\=l‘âÞÂ[ 6}ŒMÕ°ý­là‰aGêÚŸ“Y²À¬« 7mãÁ?)„Ân矣§=žh‡ 8g¢¼31Ÿ¹¸gž z‡dU-*|TÞ¥méOöRsY˜ý:Wý ÚT»’ð¥À:¿Å·§'åÅV7Ô*Z,b—¥­˜ÀM±>㺣n¬ ñ²ÒæªlßÏD+J7f ;tž/–v»d(b ïÄ‹ŠÐ÷ oÄ昈G€÷‘GëÐá„Û=§í'T©?†J Ô,4PÓƒ¦«5Ä`¯†ÞÔǸL‚̾W°5ÖÃâ| ­Õ†û2x¶)¸,UÐDëuº“ÐhLréaºÆ<²~hK`Ý·0šL¨7œG™f RÖl@¾ÉIV®BâcG<ùÂnçQŸãÔº«0‘9¾0~€á›HWý…M/ƒ?ËqÏìÂÍ*~ ɬ²vÜ@YÞiÔw„”-y^4_-š’óht(zø e]Çíé­4ç7qD‹ÒÇy \³> ·U£ äI½ [¹¬´¹*ß÷ãÁëoø£õ†¿ë“®JS{¿¼PX%DKéŸæ:´ ³˜œSp[¾BVŠÊ¿æé` Uˆ�Ÿ»eþ®Om³Ó‘Êúù·ÂØÜ2/"Ç�Ú/›ðHlFíú$»}6v™w®® É” cQÆ);Pf~¬œS E®ñä »GÑEq׬Y‡´ü«x” = úïǃgdç<ªuy¦Á$žm³ð<~ŒgÊ%ˆB·FÄíéIy±Õ�ïÐF# i¬´¹*Û÷#Ûn$ KA¬”îì2:Ù PŸ/]¸ó_&˜n=€ÍùÍIï ³ˆ ¯Í¹ˆ‡ó·þ³ðšQ¼ïºô nÔ‹æEäHW’ ç}vYh!ùàq÷ÁFoííá5£¨³‚¸wÄ[ùÐ= ¨ùUEƒ‡àh<‹£×'¬ QÜ3»`Ö†4W!£òÔibSM/”°ÂJFʺŽÛÓcßDV1¢´³ƒ¸³ŠJMâYisU®ïG¾ÝH–‚()ÝÝÐT ¡Bb †vй†ü´uþõ6’ÞAg5@µ¨Š°Û8þ½ùˆÃ©þW ë“0†‘ß«û'Té,Ì k7:êO#¯ì:æÿNœ ª|÷Y7ÒÂKôô¼’¸–=œ;â­Øí<“âq´n€Â¶ç’}"1ê/âž™6^ÈŒ(‘ÏGIõm8”Î_ +)ë:nO}YmCÊ|…¾¯ýAõ-ôæftö¿Vª²Òæª\ß|»‘,>x½Ê*^ÝðLé–sÕÀ\wŽ##Cró–\—Yˆ¯ü·ÀG°ë€Y\7É!8_FŠØÀ¸»H²¸º|÷Yú,QôøBÇžL¤íP4–V<;â­Øí<º+ këȨqÃõ¨Ú´õP›\ÁŸå‹¸g~ƒÇö¿0æh…±æÙW©þ×/J{v…U”u·§·ÒœßÄA7ÍXõ¢Á¡Ú„‚ú'xA?ã•„lßl»‘ðfÞñWáFг&œÔ\Ç`²;Â($ž)Ýrî ³ˆ­·6òΣsBDÔÁý#´š“ ó‚ G<Õ6ÔØ%ÞnËvŸ%ÏK/lü�›Ò8aÕÁ¯#Þê€ÝÎ[Ø¢ŽÔb4¸ãmÐßÿ~æôŠÈžE…½µ{°qënìÙu6ÉzE3n1¡ù¯»ŽŽ?¡oqK¼hQPˆŽ¸5 nOOÊ‹­nȦùcšF#6FŸ:M0…ÝçFÓ±¯`cð)Hf¥ÍUY¿Yv#áÉ‚‘A¿‡ð±iš ä½K-sQXDIéÞ“…Œ¼Ë â2੷â6CôÑCu#£ˆ­,÷ÙXz|J¶¡Â<:â­Øí<¨‰ÖõÉsSú¸OˆzfªW´eÖæ\B/=Ý&htݘ´_Â~ýã$êÅp©v¥ë’)(DÎ'±ÄíéIy±Õ�ß›7x¹È…aôt À‹x&”l>Œ†a%õ/¬´¹*Û÷ãy û³HâpÞo^A7¨^8ôŸasùMt‡–£t]Aþ§¸£”¦¬bhJ·;ÜÐÆÐyö ©¿ü;è(H êÞÈHÔR½0ë`8é΄’m¨ Àv;ožžNô$ÁæõÌ3½¨ÙR~åÔtàUۗȪ²%QLØ÷ÍZè iníÂÝç(kèS2¿¸ e]Çíé­4ç7qÄØ›tÂö„ï¯Ñ­ÛíÕ¿aBÙÂJ›«²}?4½¿°ư[œ:èÔÙÐêMhê|Šñej¬ ÃpróNèº_Cð<FcÝ/pÏ¿✠üŸä{ùÃü…ÕH´öÜX*²ð1‹º,:è(ˆB˜€ó~ªt—ÐèxAxǃ° 3obuRí…qðïà%%ÛPAtÝ0C÷—æ+d¿ù7̶W‹#ß¿÷a$6˜¸göbÐT„M¥ŒÑg™ÛÏT9¨y”ÌóNÀäÀ�^F|<‚ˈÝy&qZd ïAʺŽÛÓ‹kYUÐtº({ÙØXÚŠ L‘Më ÖgœC·R·VÚ\•íûyo Zb¬Ô£zùx³ýlWm€Ö2üÊ4ÆèOìÂêœ(ÝxV91Ús«2QÑ)2ü>”n+‰Àþ±2·!}ãQ4=m‡.ã¨6Wí;Ë»ˆÙAªýI䌕mh@ášè+Ù† ¢ gÓp7#5ìüy‰±¦Ï±v ©yÆ„Ù`âŸy öŸPgqbÚcƒ±ºÇX’÷â«-ÒØ È«6ÕÀ®<(p@ʺŽÛÓcßDVÑpœ·À5ëÃp[5 JnÀ±¢WåÃJ›«²}?îfè›Ü‡-í^SìP2Ѧ38ìX&oðH�ÛJëas๵µZ*Œ¨BJf yß\7üŒáà+¬F¢´ç¶þ»{’!‹€žJ·À•‚?P³Ë— ÀûèöU?ÄßÄYqŽJïÔıƒog”ࢂ‚dØí¼·°U}е¹uxêõÁ;؈£{/Ã19 ‡¿”ç*:ǃ?Ë—åmk“3wÑ¥úndf@ÿè’ ¨À)k$îÕ´ÒœßÄAöžáÅkZµþ�M•ÞŒv%xÉXisU¶ïÇ7ñ·‘×>Œôü§Wðñ¦’lä7<þË šAÓŠkºd¤¨°&Uê6”øêjæ-zÌ?Âæ/sz—ëYHÙCøÓ\‡–a©!j4*ÝW Â(ÚNFÕÝ.X»o¢|Ç1»îAŸ¿Gz †g)YB÷x6h0ø"v7aÌo›Lã¹é$Îøƒ3¦:uØŸÔöÜr%Zë &:Ïã°Á®tZTà‚”5÷jZÞ riñë[d|@ ë4d9 õƭسg/ÎHN‡W`a¥ÍUÙ¾Ÿwê0C°ûkdm?ëÄrÏ!àó ÂÚ¨Gyá!”Ö6Â:8ŒûSåÖxÕA3ÆÒýk2öX<ӠĽާt \AÌØªðñ¢yÁX†À»ƒ”‚‚‚ì {+‚ÇŽ«ùŸAûí@&¦^‹-j~0^Diö§%Üüˆç™“O´öÜCè·|‰Œ«`SJŸ8 eĽš–÷‚\JhÝv6֬݃Ú^š>G[¸VÁ:Ù‹šý—áPlì„³Òæª\ßW†eÃ4Æû;`ª.F¦Æ¬hÔ¬:<°êkÐÐMËœî¢&ot?u,”>u\AÑöShè—šA©t \Qxí0‰ÇPˆ0 ‹°'ÏRœ|¾÷ˆf“yíSæ«‚Âû`·ó¥Oôß/ë–-a2 ô5–/±²X?@FE;^¯TVaI‘²Fâ^MR^lu3 {Ͷ¡Q¨ù¯ZQžEXÅfI8+m®ÊõýpÕaXvø0êz¡¤Ç®:ÌÇÓoÃ…f»Ìóå[°ÝÐi1ù÷‰ +Ý—¸M=ô0.ÌÀãì@ƒù.[×'ÙB[ftN½cB 0]·‘ŸTPPxìvž€I[5¶™ðt>(/Æáõzñ®%ËÛÖ&û×¢öÜdØÝJy»7¤¬‘¸WÓJs~‡�ß  ù›NÁ2FÓØç:ƒ|ˆ¬šű[VÚ\•íûá©Ã 3fzpÍæ 7zBǟз¸»ÂêDp£éð~”ÿø+.2'\XïTAú¶èK Ô£Q^1Nvä\ÄÃ×ÓdšÜBAêGÈ,ÔB³Ú+嶆ÞHÀ†ÌÝáeY¡#;tVeÞ*(¼‡øì¼)¸·Áµ¨¬’®Ñ/ ³¾ þ™/ËÝÖ¦Þá‡0WƒF½…åz4ÙG•ýJRÖHÜ«i¥9¿‰E€o؆ƺpN¿†Íx‹ã,iÏ ’YisU®ï‡«ƒÌðYuHYôÞÂÇÚ<ž+KzU#xz`ÈßÕü¼ ©æWñHrÛdjP+bÂ+Ÿõä cè¬ØÕ6=Óô;.%NÓJQ¶Š ÔìAvú?Â7J FAAtgEðôâzYÁº›tM¦B•q·Ð;žg–=Ñ‘’®†¶¼ºÊÐlÎA…¢'ªÀ )k$îÕ´ÜäÒB5=hºZ®zS;ãŠy½T¬´¹*Û÷ÃS‡Afø¬è:aµþ†Ÿk`—î:çÓc†¡(¥ }Š˜§Ùî½x=`÷Ï [ß0cÚ4qz1áƒðÜŒy•øþ[-2TŸ Äò ¯ÍÐe€Ñ%Ñn…±¹/d¥£fý 'uÿ!s6¬ô‰–}ŸÉâºMÐ(…÷ÂnçåT¹'Z f.xZ€“ O¹ú—·­MõDs‘ScÅëP›uºµ‡êЯ³ ²Fâ^M+ÍùM±§[PæïúÜ8³Ó‘šv¥7ÿ’°Ò檜ßàÇ‹/œˆ¿šMhYî‚§3>ÎnÚå§4Üù «xª³)Û Êa¾ªq£Åx…Ì}ööÜäÜx3Ž7¯h5Öú[0WéÍhú6ELx2wÛ%”h ìz/<‚®äí…Kj¶•Û59è96T{aü;øCÉ!\L˜î•{QÑ9´sf0f)CfMï{‡Øí<ºÎN`CiœûšÅÇþÌr€Š0aÛ¦{Q³í¬JtYRÖHÜ«iy/È¥$Ý^¬O0 ï Åû®cP‰Ô$œ•6Weû~¼q-¬ìcnh~ˆ›J±«ÜŒnÇ qÄá°ÞF•úc¬Ù¢Wº¸­jæôÇ"ç?K{nâôúÓ°i€? ÙGC½q+öìÙ‹3þ4lELxÕâþ UúÁl¾Àè¾ó5 ÊÐ/¹Ä.‘Ìb¢íÖ§l¦ô Êä`ƒêÓ„éc((¬$èÙÁŒ0çƒ8uÛàuþž‘ÄØcq=sÒ0i=ÝmØœ4+|NÛ=Jwbci+&‚?¥ RÖHÜ«iy/È¥dÏMEØMëÓƒãÇ÷zõ¿]Ÿ„1 Hmߪ –•6Wåú~ü:.i‡ahý5̉°Zû0²’ô˜„7xd8„4Õ‚3®R2äà‚¹¢wý­ºƒ´å;ç5!ynÐ4ìl¬Y»µ½ôßÒnU°Nö¢fÿe% ¸š™$Äˈ‚a�ÆÝE0=çYÈÀß3X*vô½T›oèQÊCDÀnçÍÂÓÓ‰O”CBp£ëA_š˜,{[ûÿÏÞÿÿ4u¿ñÿ8@ñGX²„˜øÃ’gŒáò Í'šÞÁe†iÀ¸W!ºè"èÞ‚ËͨïmåãV}ºf³¯±ÕI_u'¨ÕQð9ºY}³"[±Œïò*¼ŠÎýsN[ ß(=§é)×-yDZéáœÓÇuÎõ¸ÎuÝ/Ö·³Ýüù™² o'TcŽ bÃÇF’¶&Éäkc®»C.Wâ‚JåOaW©.áœâmìÌ?ϸ×õ§q蘑„H7‰t›«){<óB}ôØ"„ƒ™ÉŒ¤]Ãex§ŸÁÆ-È­ƒ˜ðÒÊ™`àóE8tÞ>h‹ÞBïr Î€b¥Ý7¨ù]cí¨-hø‰í‰ûgT*Ï}‰À¨?§@–ì�4¶ùà/mKð�=Qs“½VÎŒatÆËZˆZmTúD ÜÏãÊ›NC¡ú>¼c 7ô_@¹ïÌ~]³¸M_¢¼êÑéák³÷qÏs¿o'\cŽ bÃÇF’¶¦ô0È×—þû)²sFˆzEŒÒ+è"QÈM!Ýæjªϲë.+ó W†."êqAYcÚ”>q°7ò™íeÄ1ðÀüíwhâÛžžcNÊr¸öÍ\–ÄJYÕ›(ÐôlÚQb³àœÿÉ nQ¬1ŒŽï è{•ÀUÄm„2Ÿ(ÎÏC©v«³U¸âG(¬¼rý”È'1a‚Øá~g‡ñ:îE¥i‚ý½1˜*³‘!+‚Ö.Î…Û¾´a¯ÓÔø…ØDøØHÒÖ$}ƒ|x‡aH—œÒ#ÝæjÊÏl;ª³å( Y@øGÉ0O§Ï3ÔøÚ!Äöf3övè5Ÿ½ßáü´’s­hi|Çâ4¬úkЙì˜I§2Âíã„¡t·ÿÚ½þÈEm×Lðqð Âö|!ø"�3ۉ˧aßÒÇ¿-#“5±!œ­ƒ³Ã:¨ÌC1ÂÜÃL0˜ñ¸ÐcŸÍ…ïs*ÀÞo©ñ ±É𱑤­IÚIl'Òm®¦ìñxžà'ãÿ‹õ“ï1ÚÓ¿Å-d“…´Cˆõða¼½rYd{‹pº²Ùy‡Q|è2:y*—0~Ï€¶gNöß-ÐÞs“Ó(1–íZä)4ø-¨]d±t£SûJ¾ÆƒUM£'°O„`b«=÷Ð=ÔÉ  ¶òÍÜvøó0½Œ3×}ýÐ}ÿ„5±Âý<¾É0é{…{ چז"m_›¿›IÚšÒmñK¤/é6WSöxb¤ä‡ÃÈÏ*…n(ÅHÊBÚ!Ä:,÷C»'ëè]G/—Eã6@©êƼí:>Ðö³.ÖÏNØQj =3‰±dýÊȆ ]¨Í,æ=\§=·L^/ (&ìñåKÌÅ›¯ðrfž±œM &FÃÿØõ>Tí#›(MjŸ·jüBl>|l$ik’¶AÛ‰t›«){<1D.£‡zkéý) »!í"K½Ðäì†Âà ¼öj:1f¾„µ•§€ªnãPß̶`G÷}Ü8©@9uΑÞ\-?;ûáâ2`OЪ.Å.™@Mt{n‹¥î-4ç²ÀŒèˆ§µÇ ãc‰ Ä÷ó¸6Ó—‘½ë0êš:aw{Æ‹iG{º€ÖñÍ ÕHÛצÆ/ÄæÃÇF’¶&i$±H·¹š²Çã…k2Ò`àó.¤Yª;{L¤BDá…ÓPœj¦¸¹°’ù +‚¦¿FãóE,h=ø[«ÀŽ l´Ò•ì5Ãý�u!:5BÛU3Kð-¥âµ†Ëû –uŽiîP@5±!Âý¼9XÕe¨ëšb¯:‘0Xèú§[ÿ ¾iûÚÔø…Ø|øØHÒÖ$mƒ$¶é6WSùxï FCµ܃h=z'åši3[Ûøâ¼‹#7ðÊý#䬭él3­ØÅ}Xw±Fè4j\m¤Ì-©â›…Ëö,– LpíªâƒÕØ€*e JNÔAÛjÃô–й,0.|uåµ- Ñf¼N˜5åþR &ˆîçqåÙŸBGÕ÷|„òæÁ×â"m_{ž¿~±?â¡Ê¼Ö§Ô †>6’´5¥Ûâ—H_Òm®¦êñ¬vCb÷/rȲÊñµiJ6ˆô…y Ý{G y2 ãBsy2óãœò}œ1ñ^”Sw±4Ã7{ûOÐp)ôj- C®‡Ì(ÚÏçA–)‡¢ò‚?=¿ZY€‚ºLoéÄ`‚5Kð Ýêä—hsÎ`ªÏ€.“Hö6Ÿ„¢5±œß$ ‹ö8Vs}!eO3Ï{aÒV!÷1^lލ°ð}N¸ŒÀ ä‡gÐÊ‘]ÝŽY,Ài8ŽÝòÏÑí¡ŒB|l$ik’¶AÛ‰t›«©z<Kv-ÞÙW‹æÕ.&Ü0Cwâ(T­œÖÆ�&¨<ˆHW|¨Jôp± ÕÙ®Ï-; ­}>¨UÃwqJÝÅÒŠ•àJÆNì-¬@¥bòŠßÇ¡‹üƒ+þRaI8æ`»úIJ µ3cwq2k2e2d|Cß$ksqÅ*É "”äü¼9 ýrÎßÛÎê塿ÁóM ”¦ªoš\F` ”êƒú4!㊠®eÆÍ (¯ú v/]Áa𱑤­IÚIl'Òm®¦ìñ0/ao1 Ãº€X€ëa¬ô‚Hw' ÇŽAõÃUTÊßÄîªû›¶ã¾ª$º“ĆPw±t‚ ®ìÏØ…¢«VxîÉm5T–Øïøchíü Ù–¬|¸"X½Ê»­ãì6·2EŸwd“Ì"¦C³h>:ŽŠ†.ŒSž &y?o^wLþÒÙÏ¡ù¾÷æv\“¶¯½rý ¾$ˆM€$mMé¶ø%Ò—t›«d{‘Šp‚±f\­*‡²ælžEx\½þ̲—‡§ƒÌn‹º‹¥ K6 r2”0¸¹gÙÁ@M× ÌµeP[ç¿”(óàrùç¸k è€9¬0éªQý)Ì[*rx"ýÁGÅ~-Yîiühå²h1m½‰ó57Ð=öw[lÔõ‰ 6@¸Ÿ·„ñ-ŒþkMŒ -×Lߤ`„´}Óexúûñ<òºìÄÃÛ= •B øØHÒÖD‹EB*¤Û\%Û#ˆí�CÝÅÒŸ†²ƒ¨6ÂçÔ(ý×qYÁ5ôñN£_‚Çöªò×:Hɲ>„®+‘ÛJVŽë_(Rµ†‰ æòc\-ÙCb‘�Âý<ÎË«{Qq>öî8½óUðwÅEÚ¾)h>_ÿ�ƒÁ°6n© Ø_ ­± ]CÓtí"’‚$mMÒ6Hb;‘ns•l R×'#ëÜ=€mf ŒgÍ?£Í:&йã·=hý^•ªZCì3›#I¼¸NM-M09æà±6¡A÷Pø÷Ém«Yÿ‘õ2óÿoÜ´N¤À‚[ V£ªÕµî¾0³P]û“;±Âý¼õ5‡‘¿÷_È-,‡ºk*ø»â"mßt%Сë:d9(oz º BáæQ¢$mM|þAl%é6WSöx<ƒ°=³$b› j×'®Œêjü]Ÿö"¿˜u´ s±+%2'AˆÕõÉ÷j‚ÂÄù‡ÙØAäîú7Êt=[ÜUoÿ»·Ãq/õ ˜œøß4 b„ûyë•>qå´M8óé#*}ЉîŸÑ:†áš(ƒZq>7ZÏ~Ó––˜R†$mMé¶ø%Ò—t›«){<îŸQy¢úдQC#TŠBTj hí¤² "}µëS@LxGXwŸexFœ<zN2#i!b×'¿ÞÍŽâ@@0øã„ñäéM+iH v¡ó‹] qˆ†á¦•§-ÄöC¸ŸÇÀ;ü7†c•T²ö§/ÊCm×Lð q‘¶¯ÍÀ÷ò%æ"O3ŽžÇÃðr%§vªöBó8©lÂàc#I[Sº-~‰ô%ÝæjÊ» U°ûÆí_ì±YåMZ¤U&‘†ˆÚõi/ ÑŸóõC«ø*Ðõ‰™Âðð,Ïí[˜]Ÿ˜”æ‚Á7üÌî­ û09ü| ²k¸ã:Ìò -¹…¹ØK5±!œÏ$ŒÀõ¥Roö Ù¯ÿÂüËe(v½eó‹àð}NÖžwÀú”“žF·ê0Þmø³tÓ%ÂÇF’¶&i$±H·¹š²Çãnƒ¶Õá„{`QU»,b²õ">6Mþ‹ Ò ®\I¬®O pÝýr¹¸Rÿ¸„sŠ·±3ÿ>ã^ןơcF¼ §1å³ëÓ²ëNÉó ¼Pœ*ÔŸS kg>N|ƽ¾ˆÊC•0¼xÝJ 15\¹ÞÞ|S † x!ÜÏãìp=­v•|‡¾0¡oñàþ†táÎ[r ‹×®_þk–ÙÕí˜eïÉNÃqì–Žn*å'ÂÇF’¶&i$±H·¹š²Çã›ÅÌ\¤àÃDÏ_px0ž~ª Q¶IOsbëYÄŒ½zÍçì‚™�þANñ2fÍŸ";VçŽÐQz]T/ŸúˆÙõi¶ÕÙrÆš«ãئ †®O0�e idYö'¨ ¶Âý¼€FgÔ°ÃöžM,?—¶¯Íž7cMX�|u\1Áµìø¹åU?ÁλSAàc#I[“´ ’ØN¤Û\MÙã‰)&ìÁ€•«ï]†§û ¼{–Yªï%ÒÖ‘k¯ƒ\Æ.À÷áte1²ó£øÐetN ˜óÞaXB½„´­ë“O­Ì_¥¨!±îçÅѨÙd¤ík³çmä9F§íh×_õhÔZ#:T^LˆIÚšÒmñK¤/é6WSöxÜF(£2�"7ûS˜g—±ìl‘Ý êž~€ Òˆå~h÷ïÄŽ¢ëèå²hü‹ÒnÌÛ®ãm?(ïe3Þ}Û�ÜnwÈè…Q+ KÜ€øV¨a¼ã°7× Gñüáš g(PC !E¿Uê¾63þçý³PxúÙy(.>‚‹¬!D$mMé¶ø%Ò—t›«){<\×'åùè´QÕu˜\ ìM°—Ëk ·S–�‘†,õB“³ ƒ+ðÚ¿(íĘù ÔVPÙ6† 1…ÖeGøwjJÙ€8¨)GVÕ]¸} |k%=Ãpuà‡êw±›5±!ÜõAjHqŸ×ð®-DÆŽb\í} .”jXæÙûúßÁNOZàc#I[“´ ’ØN¤Û\MÙãoÇ/ÅÆ\ÄhO?ÿ'È! ¼p*Sm§°²8—AÓGÁÉmûW¨µBô"ºÑÙt¥5Íâ«a”²q‹£V´é¯ ®á7¸Ã®óKð¸ú`µ;1:™ DD$Rô[¥íkÏæ9€ …nÿk.Pó%ºÆÚQ[Ðè´HIÂÇF’¶&i$±H·¹š²ÇóIoè8Œü¬Rè†ÈQ'Ò•Œ[E£ÉEú†F˜ìS2–0c{�ƒÁˆ6ÛfŽŽ;0¶õ`|Å ‰Mb~Ž"ôh˜aèWðïÎä…k2sR|pÿbD×Bœùɳᦕ2jb¤è·JÛ×fàsP–ó LSÜ5Ùƒ"“=¦7Q éÙâ²R"]àc#I[Sº-~‰ô%ÝæjÊϺOzC‡zëLð‘npš6|Ïu}Rka0Û1#(°²�‡îi,˜ö½‚»ù$veàÄ9%œy€)ŠÕH‹×FKmÙhl<ecjÔ,Àõ° Ö-mË•>E´çŽÔž› BŠ~«ô}m¾q+ZÁ±8 «þt&¡÷p‚ˆ†$mMÒ7Hb»ns5e'eŸôÄë`î‚]ŸòQ¬(Faî¿Uö=úx·èöÀ¢:½kÌl'ê²wá€Ö†Å•ºy23i+ÛPy -ýðð]pAŸ Ð 0¬ŽF¨…¨ÔÐÚ5¸E .PS†ÌxY•¨!ˆ„¢ß*}_› Ôô õ{ Tªh ;óDløØHÒÖÄý14¤2Ò‰”=ž˜OzC!"ñ‹ ¿Ì‚ NrfNãÇ8ªw°. ñÂP…RÕwø¦òÈvŸƒilöû—QxXÙ´ØðÚȃõ„‰WÇNd•7ahñuO.PÑž;*}"ˆ„àlYjHqŸ×`àsßC¿ëÓ^äË»²>„®&ˆäác#éµr%ˆmDÊÞ I£†ØÎ0NJû³`Ö`?û·P»>1“N 'š]ãùêÇP*/à¦u=.ôø;è¸øga郻 ÚVwD°ƒËÀª†Áͽ»ˆÉÖ‹øØ4ø¯×FÎ|¤ÊIAš×M@LxGÑ5<™^¹‡/Ãë4âäÑ›pÒ=— ÔÄ6 u5¤QClc–¸{*òP¨? EÖ[È?Që]_YŠc'=#„3ý'Ìý‘º6Óè¸ú#ú¼ O? U…(k~ü¿×¨9ƒjóTð5AB‘bÐCŠû¼—ÅZÃúáðû³¯ZÅW®Ŏ‡géþM†P † $JÊÞ I£†ØÖLÂ\‡ÜÂâÙdk£TÝ…Ùà'"YêiÆVÜnwìñw ´÷Üä(ngbf.Dnö§0Ïúðò‡` Ô½­È¨)î-¬«O¤ ‚j^7 pÝýr¹V,^Â9ÅÛØ™Ÿù¼œÆ¡cF¼ 0! ÔÄ6@Ú7C‚HWxŸöb`^¸糨É-²ãŒ¥r¥Æx;ôm·^µøkv­›¹x&×öo].¯Þ¯is`¼nØ:~Võ˜Ü¬!¡p×z©!Å}^c³æO‘·|Ÿ¥WÐ5»•Ýõ)ÃÇFh¥GEÚ7C‚ ÖÃgÑAÕÜ‹åü¦9†Cª_ÐÅéÒøÇoÐU” ºy€4j¤ÆzÀ²#Ð;_)AR,s‘™°¢#á ÐÜ¿waàM`‚ˆ‡ý<)îsÞaX^€›Ø>ð±Zé„D‘ÜÍpɇ-éKRcÕVBÅaW`°ÐU‡Ìwu¢zÒÂý+ÔÚGÁ€[`tßýå5ÍâݺÅ7{ûOÐp™4j- C[¼cf`ýö h;ŸÁçBÏxG`Ñ×ãRÛ *Ý#ˆ  @ A¤¨!ˆm€”n†Œw VíÜAÄLJñÖjª5¢Ûî„Ûí„ÝrjÅdì×ÂNi1?Ç?¥@Ì0ô‡+`xÁ³DˆEûù<È2vboa*ûWü>]ìÀôVE@|#hW#+WÊÚËÐènÁ`0°ãtšË¨­T wWª ý” F @‚H?(PCÛ€Ô¿.Ã;aƒéÆ(²v²û«ŒÈ ˆtÄ{ú‡x¦C2‚¿¸7.`þ3/ѧûY²µRYÖ‡Ðõ½¤Œ©CW¦þœ‚ýn@c‹ìàŸe»û3v¡èªf¥%ö?°i>†Öî þÖV°€qëm4TaoÈœÍÈÜeí <tP·‚HÎv¤†÷™ ^'|l„¬‰ $JÊÞ /&l&ܸPX\²z™êédªÒû BR¸`Pd§ac7Jµäfà›éÇÝ/޲ö$Cfþÿ›¶ZìJ‘šŠóóPªíáa²dÓ g5ø Ôt Â\[µu.ðK[σ .P9:/MX‚àMÊúyqâ>Äë„5„DIÕ›á²ãGΔ!C–‹Šš¡®ÄvÂc÷»CtHLßâdÑ)AY0Ìø#œ—¿ÁÚS OŸ‚";ÅÅGp±s‚‚5RÃ3Ûó…à‹�Ìl'.Ÿj„o$Ãç€¡ì ªM£ðù5Jÿ=AVp }!ˆ´€5‘~P † ¶©|3ô F¶\Cµòª¯¶ÀâœÅâäFhA¤= |¾ˆÌ1o´Eo!GÓ ~9e^ص…ÈØQŒ«½\ǃR Ë|/4|G5R#V{î¡{¨“Ë‚ñÁÚÒ“ckta§À8A¤ ¨!ˆôƒ5± ÄÍpµ ª…òÓ$&Ll–àq<‚Ný®¶p¢©ìë¾ïPz ¿ ñ]ŒÏæ9€ …nÿk.Pó%ºÆÚQ[Ð�+UJ‹uÚsËäõèœÒõi ÖÖF×'µÖ³} t…%ˆôA~^RÜg‚xð±²&‚(Òº.c¾§ÿ²!)±<�Ý»oB¶7s÷ãdk/þ«*€Lö.ÔÖÙà/% ŸÓ€²œO`šâ2%VôoÞD¦[)K F{n‹¥n¯€Ô(ßs<¨ v}Ê? …â rwýe:þz7A¤&¨!ˆôƒ5± HÙ›!3 ÇÃF¨U×Ñb †y û£G°Ž‡k3DZâÔ”AïZ¼=ÐÕÀúŠãø%j+ÏÒ'¾q+ZÁ±8 «þt&;f|´—Ì|Þ`56 JY‚’uжÚ0-à»ô‹ ï(†æÉäj ã„ñäi诂ï!e(PCéjbª7Ãå!Þ•qOy 7û Z; ’¿Ù¾XçiqI¤;K˜5×ã¨ú.º-]h®=ŠJ};~Ó‡\h fƳA µ¿Äå,îyö]Br0£h?ŸY¦ŠÊ P©.¡ZY€‚ºLóüB™”ÖÃö¹yص•A½&‡ŸSv AH ÔDúA‚ؤt æ·€`àí»Ž£ Oð pèΤNÛX‚Ø,–¬Pï‘ùí3lì*‡~h>øK‰Þõ‰]ÜןƒòÀ ht"¶–e»yE×ðd:Tðw¶«Ÿ@7Ä/ãpÙu§äyP^¨‡J¥òús díÌljϸ×Qy¨†$.LR%Uý¼xHqŸ âuÂÇFÈšB¢¤ìÍ™„ù“SPß K÷mÔ¾wúÇ -+¦@ ± ðÀ®«Æùf[HwŸQLx„ȼÅ„w£sn50Ãxþ‹Ë§nÁI‘I±dÕàCƒ+øj…9ö;>•Å| ³í¨Î–£P¡€bÝq ꮩà‚¨!ˆôƒ5± HÕ›á’U=ì¾qû·6dØUªÇÐ"­,‰4‡™‚­µZí]Øf–Àx†ÐÑü3Ú¬c:òDv}âðÁãþ ª‚Ïa¡?Òbþ\.ÿw­C�žÃ “®ÙŸÂ<ËWP؃§V;C‚HWRÕÏ‹‡÷™ ^'|l„¬‰ $JÊÞ ½6èN^B³}$$£`?%¶ÌSèÞ;ye\h.ÏBfþqœS¾3¦1ÞåJþÒ§wNâæ³@FÍ’]‹wdo@®zÌ.Õ i±í'Tåïö_¿¹!Ëú:*c#"R zHqŸ âuÂÇFÈšB¢¤ìÍÐ3ˆ¾)Ì­˜YÄhO?ÆieB¤#> T%œFÓf»>C¶ì0´öyÀm€ReUn¿Ù ×ÞÞë€ùŽn |Jß,\¶¿`±bBHkn‚ ¶¨!ˆôƒ5± HÙ›¡ÛeîÁz +ã0ò³Jy‹g„$`œ0;ÕWQ)»«îclÚŽûªÖóÌœX†§¿Ï#×òóXŸR>$ñÁÚÚ¿ƒ—fû”€àAÛ ÔDúA‚ؤn ægT*ϯv"‰=ÔÐ[g‚ ˆt‚ÏmÆÕªr(knÁæY„ÇÕ KW;þ7Ï@nCr ‹Ãƒ…rdW·c pŽc·üst{(3#åñ=ǃš<È2vboþaö»<ˆÜ]ÿF™®‡Úhj"ý @ AlRöfè…k’žÛÆ‹™Ñ}¦ÀxÞzJý Ïì ÜÆš°̫㊠®eÆÍ (¯ú v/­ôS%›9;ŠúEÁ÷ï Œ'OCï||‡ "�j"ý @ AlRûfèƒgb4l¡ú¬Í€{ãKÁÿ'ˆ4…Eûy.k"²ó;d9P~m‚Ó¨0ðŽŒ`’b0ió€ÒÜ~Qð ?ó°k+¡¶Î±?û09üœ²k‚ð“Ú~^l¤¸Ïñ:ác#dM!QRöfèíÇe91ªJÜ”iC¤9Kýоój›»`±XVÇcÝGxOu‡ýù ì‰ë31žA<Ô5@uõWØ=\»o;ÝëÁ8‰ KŽeל’ç…eHÕŸS kg>N|ƽ¾ˆÊC•0¼X ~‚ ˆíLÊúyqâ>Äë„5„DIÕ›¡Ï¢BfÖ)èÚÿ¶PµX0A‹K"íY‚ÇÞŠÆŽaz4Ë.3nóÖeZÀ®2Ù^ä”#ûä þ÷sÈeo`ŸúOÌ‹³í¨Î–£0To(jƒºk*ø‚ ¶3¨!ˆôƒ5± HÙ›áüŸPý¶Åð  39‚ÒÑ ¶‹˜±·C¯ù*U´†ßy”;…ÂjŽâ¿[”}š*4X=¬1=…®ä+X©’PbxðÔê �A A‚H?(PCÛ€T½.»à²2rehç§z\PÖÀH¥ODÚãÃx{ä² Èöáte1²ó£øÐetNó¬0³íøähîw[ÐÝ\‡÷*Äãß¾A™¼5RÃ3ÛóȲ7¬Ãð_A¬@‚H?(PCÛ€”½®—Þ_ò̪!)–û¡Ý¿;Š®£—Ë¢q TucÞvhûÁ¯‰ö¬êwü¶>ö T?�R2‘n#”¹ï‹\‹îìOaž]Ʋ³ Gv€ª{:ø‚ ¶3)ëçÅAŠûL¯>6’´5­9Ž4h¤öH7R÷˜<xjùµÿ —M£ÖÂÐ1DLˆíÁR/49»¡0¸¯ýšNŒ™/¡@m¿P%¯½'Ïÿ{H5÷„gµ½3!!Ü?£Rši¸2®ÃäZ�3ÞŽËå5ÐÛ=Á±‘¢ïšŽþ6Aˆ IÚšÈ )°Þ<e¼#°´6 šF´ZF LF…oƳA õê¶œðl¢xnÊÚÞj{âØ[XJÅ>ä¿C;0MÁ"íñÂi¨@Nµ Sœý» P°¶š!+‚¦ï|ž~fç×Ì0ÿ §g,L¸˜HQÆÛñË_\îPàzØ«‡_®Aé×X´.$ˆøð±‘¤­‰ ’±æ)ãé¶dû2dúÓÑ#ï.ÈkîÁÍ+ÀÂÀ羇ùþ¿³6v"«ì{ô ݘTµ½e»û3v¡èªÆÇ®S«¡²ü›æchí¤Ä@l0ný&=Vèa²O È‚áì§¹…Åå2!£8Yïé0Dëüԇ˨9Ñ�½Á�Ãêh„JQˆJ­­]ƒ˜¡ÎxAIU?/RÜg‚x𱑤­‰ ’Ñóôœú#e!t囂ÝPƒ£ºÄµ$˜4—½…Œ]¥P?èƒÛÃmÏã‚ÕpŽý÷&øÞ©j{K6 r2”0ø…ƒƒvb®-ƒÚù4™ Ò 7îéâYh©’{qoœo¨†µc ”êc”Ë„Ž[”‘!V²«Ö;‘UÞ„¡ˆŽyAlO¸ë‚Ôâ>Äë„$mMd„ˆž§œHçÐ=.ðY RØåV‚p¿Ÿ¹­£1ʦ`®©Aó¸øY5)k{> eQme—™\ FéßWYÁ5ôQ{n"íqÁ ÈôÏùð±¥'Ï%Þ‘L’Ù¤î6h[Ýküx`QUÛ‹˜l½ˆMÿ"b[ÃÝ;¤†÷™ ^'|l$ik"ƒ$¤@ô< ˆtžºÜ‰ÙÐEï%†šÏã°úOÌs¯—`l´~^—it«8+Pã„þè˜f¹§Ý æ-͸ãŒlÏ*Œ”¶=߬-M09æà±6¡A÷öêQCl\0Öiüí´-–Àè6}‹“E§ ë{É3PC¤¾YÌÌEí}˜èù /ÆÓCU!Êš_ÿ ˆíŒ×X´.$ˆøð±‘¤­‰ ’ÑóÔ »¶Ðÿþ†c÷9˜¦âdÄ,;aº\¹\‰ ¡åõç ”ï‚,wåýz\PîGŽú ^?š ܾ‘j0ðù"®Þ>h‹ÞBަ—g×'"­ð Âö<2PïÁ€u˜½#-ÃÓý Þ½Ë,Í‚ ¤éç‘oJñác#I[“héó`"¬¦�múvŒÿ›>x&FC¶åƳ6î%Z~²8ˆæOªÑÐ>‚EÏsØÓì—á„ÕÒ·WˆÀKôÛܺ' æzñ”w9× ¤Ï#wcÞëSm=ã:<s[~8­—ɰïÒýì!ô÷.Lòkž2Οp¬â+4… ;Æm°NÄÓ–˜€©r¯ÿo$4ökaAN‚ÛAÀ7ó·ß¡uˆ4š¶5n#”~áúPAèƒÈÍþæÙe,;›pd÷¨º§ƒ b;#E?|S‚ˆIÚš’7H®åG”eíôo+l(x脬àíÇe9EnkUÜt#–1k:‹7 êñËÝïP]¸™¹GQÿ %»dþmÉäõèœæûÄ˃2…aZ1 sóPmždÿì0 GÞ†\õ‡ZÖéR(Gvu;f±�§á8vË?Gw"“b:¢:¢Ø<,Yäw™ …ÁüÄà>ìêÂoƒS¥B‚gìgºðÉkÖˆ>&‚ Ò@ëÿvýU¦žZkD‡c6âºEH®ë“òüZÖå긓kÌx;.—×@oðÀ… ˆ´CŠ~ù¦>6’´5%oœÞ>dUÜ@{HM¿Ø'"D÷6ÆgQ!3ëtíÿ ß–e� µ½äög?ökû±Ì<…îÀ¿ 0<FkÕIhÚûár`¨Sƒ¾eÿ?ø‰ÄpÁXy"¼4&8®˜œìß…ùò)TéûÈ<‰Ó äŠ ®eÆÍ (¯ú öDb:bnË/ÒûoTè¢;ì»|û?—èyÊóPœ»±Ÿ\yRaPofî»g}wÝñôUfÐÓþÆ¢gã¶àÑ&9ÝÉÛA©3þç¹Öÿ²,ž>EvŠ‹àbçk¤†w®Ñ1ØÛ‚†»ß¨µ0t ÁC_$A1¢ŸG¾)Ać$mMÉ$ƒyë×8zµ—]‡âäk”¹ÌüŸPý¶ˆö–ÌäFÊ’àº½ÈØð ¸ìN4×5Âîô0ðQyÅÊSk`#®Èì ¡ˆÜ „s'ù†ÄÖAÌma–ý.ªpÕQ.ÀLÁ5¯„ zžrYIǰ7ÿpDöO`”ª»Ø¿žh ÆCYT?6E”L5A¯.Ç>–‹ï9LªS¨ú¾GÇ<¥o†œ˜°±UÊ”œ¨ƒ¶Õ†é„¥A¬ÔÒÚQŒ«½œ1—™©†e¾š¾¥„’x0£h?ŸYÆNì-¬@¥bòŠßÇ¡‹˜¦Ë#AH1è!Å}&ˆ× IÚš’7ȸLj(åy"硬ü™wéÓ²ë.+ó W†fupY50&Zúd®ÅA.£Æ¨É…Ê2wó)dq%=ÅùØ+;�µÕ¿ôæ÷ôñ,TkÅ=‚¿¸7Î7°±„ñ{´= Ý;þnöž›0h¼ú¶ðm¹{aÔ>Â8߉¹­õDz/œ@¥1ÙÒ§%LÿñDÑl\¯opì<èú4ý�•»d½£…]„¿Ëm;%YYŒdÊ¡¨¼À~g—P­,@A-Fˆm�3[›ÃØf–Àx†ÐÑü3Ú¬c¼3DyØ4BÊ€¹@Í—èkGmA¬¢\¿ˆ×Ų]‹ý»PtÕ Ã=,¨fý‹ØïøchíÂTÜ‚H_RÖÏ‹ƒ÷™ ^'|l$ikJÞ ¹ÀȧȎÒ5Q DeoI½ÙvTgË#´`ØQò̉êÊø0œ©ƒþ×/Q¸³†‹¬óýö¶P«>Guñ©õnBYo1Ÿ‰CzÏà çà)cl+²Cz8ù.†Ý(bl+Cvz'ÏþDbn “0WçEkñ(Ê 2󓙿ö!œ%Œß¿ƒÇs‘¤ÙùØÑ„;q3h"a¿Ûª˜¡Á©1:ƒ@2×<®~Þe[ë}L©·É+º†'Ó¡çp¶«Ÿ@7$αDÊ•̾wš'“ð1.4—g!3ÿ8Î)ßÇÓÏk=ŸÓ€²œO`šâìiå>ò& 4=Ú‰­bɦAΪ^^0PÓ5smÔVš&"œTõóâ!Å}&ˆ× IÚšD1Hï0¬béxxðÔêÀ|ð•Pï,m-0ÙXg;ø^�&zþ‚ƒw§&n«uø=Tk¥ó'Ô”Ö¢yˆ¯0$ëàݾ íïÝ!º-hª9Žšæþe5î_¡Ö> ÙV7:›. ´¦CžlÅÜ{V¼O{10Ï÷€¢‰ž§ë»¸EЭ-¢/\SjcÈw®µ ÈrJ�n_S‘%«F‰=ÏÁ¦9•…D2‰4‡ËÄ,ÑÃÅ,a¶ë3dËCkgïHn”*KÄý$øÆ­hi|Çâ4¬úkЙ옡RBéÁ=*;ˆjÓ(;ÖîA²‚kèãíS‘Ÿ)î3A¼NøØHÒÖ”¼A¦p«iQË•<vDŠ?.Â¥?ŽRƒ“çBžÁüð0þ‰øãÒãp©/øú{ó#pü–`†¡?\È&⃘Û±¥yô<edã%T߸®+Óô*¶ÝÁc¾pO¹³bdþp]½v ËrJ€”½ÎÿËåŸã®u(`3+Lºj;DZÃ8a8v ª®¢Rþ&vWÝÇØ´÷U%8¬æy­_çþ ózzøfê[§ßÕÒ“cktaŸá{o$b; Å ‡÷™ ^'|l$ikJÞ ¹§J)ÚjzÝr¥Ý‚+1º>ÕŸ…"ëMähzy sA†È®O—pNñ6d9Øø&®ÄèÔTN,Ùhl<s“ÄÜwþEjiÎ}oá¬'ȼ„©Ö ø°ÙÅãû]/PÃλ½r–^A×&(¢)UX‚Çöªòw¯ÚŒ,ëCèú81T‚HwøÜf\­*‡²ælžEx\½þ ׇ§ ¬s ÅùÈzO‡!ŠJ.PÓÚèïúĵZ7Û§Øo™ "šÔõóÖGŠûL¯>6’´5%o±‚Á±Õ­¦¹àJ÷CÚ†w›¾ÅÉ¢S±‚e¨j¸;ï’ XÎ{ ”UWÐb°ŽÜRžECK¿€2*·+¸|[šGÏÓu4j˜9<»y;WÅ;áZØïÑu|^8o^À'žoŠ#ž²7Õ¬6ß,\¶¿`±bÂûàzØk"ÁV‚sè1þ kXöe蚉çþ6n‘mIßs<¨ v}òw<ˆÜ]ÿF™NœN€A¤)ëçÅAŠûL¯>6’´5%o©Öjz žçNL¬´âöEQ¼}н% &V‹o^ÞZë¥Ãûàõ 8ö˜åbì±{øÄÜ–ˆ-Í£ç)ìK£f=f[ì¬N\ù­‹èAg'n_S.Xz¢úÐ’2C#TŠBTj hí$} "ÍðÀ¢Ê¸ŽD!™˜"߉-Å/&¼£8 4|ñÂxò´�±}‚ ÒîÞ!5¤¸Ïñ:ác#I[Sò™j­¦9‡»zý®N¾˜¿ý­C:40^ÌŒ†î—Ï[/B©ÄX†wf,l[îç­8¯¼ §€E0ãÁhè¶Üƒh=–uù+ûˆ·-ñ4‚¢ç)÷¤Z…ÚšB‚ ìà4jJ¯óvtÁPVÕ‘Ûº/Ëäíø­S|³¦6&eo†ëuþZ;‘UÞ„¡EZ}é{ßÐjÐìϾ¼MéQ¨~í\ÍÄ´tÞ@Å»ŸŽç`à›±£]ÕŸ=ÕËt8„l‡Øj˜”愦ƒoø™‡][ìúäÃäðsÊ®!Âç3I )î3A¼NøØHÒÖ”¼A®ŸÙ°5­¦7Ô…Eûy.å9Ö¾å@ùµ Ž„K |o¯ƒ\c[Ü"Xù5L<yfüÎË߈±-N[¤_›vÅÜV@ûEœ–æÜçÂ[£&Ö~²ƒýn7+­Û~Jânƒ¶Õ| µ«EL¶^ÄǦ‰À„äa°ä[ \3¸®OÊÈÒÉ—èªÝwuÑY•°zM•e¡ðô)(²óP\|;#Åé‰TgÙu§äya¥l~ ·ù8ñ÷ú"*U Þ'"IY?/RÜg‚x𱑤­)yƒô¥X«éM Ô,õCûÎ{¨mî Ù7 ë>Â{ª;ìÏO`Ÿˆ,Z/ìÚ÷±¯ö6ºC¶ey¬Ã‰÷Thå~¶OD,”×gÉ®Å;ûjƒOƒW†ºG¡j}Ìþ<,Û1·Å@Äji=O9šVX"¶ÂÌcÄx’§F †3t½Íüᆠ-kñcBzHüIÙ›¡o3s‘¶¶ÖÖžñôÃPUˆ²æÁÿ#ˆ4‚q£õÔ¨ýù¿°»Øë€ËË]5»ÞÀ~m?Ï@ w­/DÆŽb\íåôÇ8­35,ó½Ð|ðì$K#-fÛQ-Ъ‹Ç îš ~€ ˆíŒƒRÜg‚x𱑤­)yƒLµVÓ›¨Á<þþr2þ 0,»Ì¸mÇäÀßp{õº,þý%{î0¶1'ÞîÁìä zÝó‰2{ñeÆ^4 …f-Ä_gÇ1Ðû W‰¹-ö»«¥yô<õÅѨكRý�šYô[ž²ßp4ŒC‡whaß„2n_¥Ç2<Ý_ àÝ+°ÌŠ_F©�ãé®,'$ƒr'²Ê¾GoáøyØ4±8æ5_¢k¬µ °’ I žZ1ïA‘HÑÏ“¦oJ¯>6’´5%oì‚9¥ZMoVFê=yPY^ß`yŸ/(H̵smÅù“‰u¶Â¬ê|d«þXsø˜%ø–‚Ÿõ¹Ðz¾º39–¬jìɾ ˪àm¨ˆòÜ­Ÿá¤Î¶ag%1·Å-JÄji=O¹y÷)*¿ù)\WÆÐ‚‡=nÁ$vñTÕ�³32£Æ‰>Ãde(7!ðG7C‚Hi/¦‡mþL@ëÀ8ÏkÊ ìõÓi@YÎ'0Mq¡ã•2Ë7Q éIð:JAH)úyä›D|øØHÒÖ”¼Ar™ ±ZMŽ›ÖI^Y~b¶‡>ÕÍ'˜Nhc›¨át éàX݇E¸niCDf9 ƒ8ÑúOðu<¸}ü:ÇZ©ãú ­£ÁóÅ`¡«»N´"‘jŸå Ò=];×Ì0n5<ÀÔÊ ]¨Ý•˜ ®˜Û <=ŽÑÒ\Õë4Ÿ0M¬y*f7••ÅShVÎÊaWù/1Zw'·}‚ R‘EÌØÛ¡×|•ªZÃï<4È"aà·¢¥ñ‹Ó°ê¯Ag²Sç4‚ ˆ4GŠ~ù¦>6’´5%o\«i¦Dê`äDßÀ?ItšƒµášÇ…:Õë1ÓůеRî±h‡îÐ^¨~ƒÛ»ßôc¨ ² LH·c³&5>ëZi]=A])v|3Wòä›@·º;”Í÷ÿÿÌ>ÂÅÏ:1ë߃ÅÁïqhçA¨ÌÏáe1ÝÝ€‚&vNÄÜ×Ò¼oS"tÊZwžú¦`oÿ ÆŽß·þÅ£mWì®O†Û›ÚŠ:µo†ìârf]­?A«fCiq·ËŽ Þç— ¤ÄšØ»loNW#;ï0Š]F'Ï�³_KKÌ®ˆA„dbÐCŠûL¯>6’´5%o©ÛÁÈ(°¹#ÄÌôâ)ï<v‹C7Q^tµõç ”ïB†,š~@]ÁîÀþÉëwä /WàDíET+÷#3ã È/4¢©î û3{¼ì¶ëî 2!ýG(:ñ)ê«?€<SÆî˧hjªCûs·íºŽ3’DÜ–ˆ²¸ÏDáµAW²‡ý¿Ø[x Ÿž8€ìÂ÷QTvcC- Æóý.OðüΠÇlÃæH¯OÌcJ ànÿE»¸ï;ú»“É?†ÁÎ £D²ÜíþØQt½ÜuÄm€RÕyÛu|À[L˜Ë8±+"A!¸k½Ôâ>Äë„$mMÉdêv0Š]zSŒÂÜ<T›'Y‡|†#oC®zœà"=˜Â®m€Jõ­cþãb¼nØþìçŸÉჵå;¨UŸãªñ ƹãbæá¶Yaã#&ìgãÖ;쇫?Ã:ΕU-ÃëîÇŸ6¾š-"mKÄNYÑót/ 娑‘‹ª‡Ÿ|5”'|Î[ø¨á â5s÷YTØ«²$</7ƒT½2/Œ8VªÆ]‹Ïg¼kóÐçÁ„{Ö¶ÿ ¢T몎A¤K½Ðäì†Âà ¼öj:1f¾„µ•—¶–?PÕñ1îª>Ö‘ ‚ R zHqŸ âuÂÇF’¶&1 ’k×ÛÒø{¸ŽG°ƒï,æ%ì-t¸C{ö»yø—´D‰ÙÇ“ËÌ(Ì—O¡JßO¢Ž›Â<öV4v¼ ::eÍ_%Fô<åt~r‘q`M7(¨aWsfTßž›5ë³dûšÞõ»f1ã0©Þ„òB‚H¼p*SmÂ<w `m5CVMß;šÈ] ‚ É Å ‡÷™ ^'|l$ikJoƒœÃˆkE&YÆÑ¡mŠYRøG£¾ƒ‡Øä¦;ÑØ£|„yŽÆ&˜y”‹aºÚÆžOgáy(ñ'·bnKD¢ç©ã­•بùù§/ã˲ýx;´£V (PŸ†29r§Q«ÖB¿ªÙó#´êZœ.ü7ö%\JGR„Ë*ü&=Vèa²O ¸^øÄíŠHAH)®±Ò{]HÉÃÇF’¶¦ä r£î;‹íéÇx¢‹:ï(\“뻥̃ =㉺ËnÜÓ?ijPG÷þ66â^ÂÛXë ´ »J¾‹¬YÄô“ÿ ôÈ÷ ¶çêìú�Ú¨` ß´šÒŠ„ÛsžøîA‰6F€Å7‰'šã8’hKm1·µQ Œù==c ¤bÎSßÚ/ŸÁyý_þ²1.ø’Éui*ú ÝhQ &>Œ×‰í9îÝéßÏÀ!S^Õ/½˜Þ$e‚H ¸®O0øË\ mùS€H9w­ìŠxù¬E_û ‚ ˆt"•ý¼õâ>Äë„$mMÉd¬üÐÑ…æÚ ±ÍÜ¿B­}c;ÑÝ| Gâ•e„±^ÛåLÒ;x:Éܶö¢ø#/ÿ¬a†¡/z;ÁöÜÁ@MñUÜmü*FfÍ"\úRìH°=w ¸RŠoî6ârŒl.;hG‚-µÅÜ{În«uø=Æ÷èÝ·Q{ä:l‹Ñót ã÷ïàñÜ<®!<g¿ÆãB͉‘‡M¸V: jÅÏĨ?È9ªWCiKD×§ÚzÔW+q ‘òh¸®ˆýxãYÂlלJ8àMAHiøyáHqŸ âuÂÇF’¶¦ä 2t`·³þawu;fƒŸˆËŠ@¼±û˜gyº#PÐùjJkÑ<Ä£´ÈO Pà L2ž|{æšú&WúÌl'ê²ÿ•`{îà9Sàf^¢ïÛOp¾)$K™BWÝ~ÈmÏí?gJÜ ðô}3ç›Ð7½¨àŸ![–`Km1·µn ,tä„7€ûÝpâÍ»7q@k‹Ì£@MÌ,O\82ð¹»Ñ1`ð• ¤„_Lx'vWá\Í¢Y‚ÇòNñðÇjÏ=‚!Ó%È÷¨aå÷!‚ $CJùy "Å}&ˆ× IÚš’7HvÁüó÷huD£GÂOãÝmÐ6ÛcncuŒÎ$ØyȃaGd‹k.[å8J NÁÆÓ }Å»s:+íºwW¡u,‘¥H †{ɼ„M_‰|¹•«íº³q²5\„w]Vƒ+Üßf6=*ò󠨼l±½»OÞÅX"s[ì9ûYÛŠáXßáêÃL%Ñó”=‡Fjh ê§GÓW¨8tÚvGÜ j"a¿kk#.j‡Óç¬p]É,z|ré^‚s€ $Fd×'Ÿn³ ¼¯ë”߀œtž‚ ÒšÔòóCŠûL¯>6’´5%o |/_bN,‡Ó7‹™9±3ÆèúTЬ7‘£ée—¦|˜†E]„·J1¸%bfáxxµ'Ž ¤â 4ÛÕX†ÇÒ€‚·”Ð ®d%° eÇ#ܨ­@IÉ)¨šûíõüuÁ¿Q¢[ë^ÅxñðÆEœ(9‚ U 쉦싹-¼Â˾mÆc=O×ÓFòa¬¹Ç›]qÿ.jb±�wû(ÊÚçÌ©4:4`M: Tµ§¡ÈÝy•Ç ©(}z§üžùƒÈ^صEÉ  êžüJÂøb—ÛÜ >l ‚ ¤ŠƒRÜg‚x𱑤­)½ Òƒ2…«"ŽÜ(C•ª Ö Äfc³ ïäfDRe¼Sy|•$Œ“£/Å <ˆ¹-‘ˆž§+5Ù8ÌžÝ<Ž+ÙJëÀLôà¾u<Ì™AÙ³•<ã¶àQ¢¢Î<IMÛcàcCe„ð.È•u¸ñp0ñ�"AHNL¸7ašaàuüŽ;· k"ãóaaÆŽvýUÿõֈ>]ý‚ I"Å5–÷™ ^'|l$ikÍ }S°›Ðª¹Ì•h fØ&„ІvÜ8¶fÛ˜€'/Ñß7„©Ñðr›ç­¡Ô¦T "}aþì"ÅlÐBÍe4©µ0˜û1Á³ƒJô<]¯¤€{Pªˆ«QŽ †²2¨~Œ(£24A¯.Ǿ}%ßs˜T§Põ}¬öåüáö5µYN¬< Òö¾as#|Æ3˜èÅSi0Ìø#œ—¿ Y OŸ‚";ÅÅGp±3²,— ‚H'RßÏ‹FŠûL¯>6’´5‰bÞ¿ÑT±2v[ÜöV‡l*ô½<µØ›*‘+‹ØVÆÈ­ÐÃÆ§ä‚Eûù¼èýâ†,ʯMpP Ç&ÂÀkoBE.»H‰8ÿ²ÜÓÐÛoOË}&ÜÆK¨¾q+"¸Ò‚‡=|Ë 6=Þy&N¼zú*wÉ {G »Ó†Û6A©F¬LÌbææ„Ï—‡a8ò6äªÇ1³ðÂáʦ ‘±£W{¹ë·m5,ó½Ð|ðìÿ$‚H[¤èç‘oJñác#I[Sòù Ný1¨½ ëð”ÌxŸ¡åÌq\øÏE”de£D›xãÔãýuøÅ:Œiî)>3-Ÿ ôBêKr°»ä»Ä[¤.õCûÎ{¨mî Óx¬ûï©î°??}b!øË„è0èßµ¿ü‰ái.»jÞwp¦ôSü§þ²v�mTkòØDÏÓõ4j„À.žª`v†g^­ŽUñê%x\ý¢ÍºD*CÛ,8®˜œXfFa¾| Uú5¯õ™‡Ms`M8Þ¨ù]cí¨-h ®OAiŒý<òM ">|l$ikJÞ =°¨Î@ï -4™‡][ µu¾é?¡--eN¨97|–/Q¢Y¼3ðÙ¿…BmÅ’oVí1¼«þ“ý ‰À.¬í­hìïž´ì2ã¶u&ø*Qb¥Ã ÝV¬–­ìø»Ú{î„aŒ·Cß6¾-w/ŒÚGç»±ñGж8#Ê–0Ûq÷jÉ‚ÏU‰®Ð}ðõC«øŠ] ,bÚªEé»W`ßx'£çéflY4m6Ì0Á«æŸÑfá™Q³€I÷Ôk/…£›!A¤"³èp7Ô_àj 'êÎÝG:pÏ:&àÁ^—œ”å|Ów\ÉÞ{šž=A„T‘¢ŸG¾)Ać$mMÉ$ƒyë(¨„FßCÓ ¨+‹°wG1tCÌæ…Êóf¬ô7ŠËüŸP(D¥æv~ :5'jºïêAÆ ƒò3˜n3…Ôk>G@;çwåNÜSÖ*|ÍcH©Í-Õì¯üŒ­14“¨*Êúú*²Cz8ùWü-µ£·•!;½“§X±ÛeVªVJÖ˜—°?AAfY°e7faU£ ò+èÙsÕ¤û•…YØñ®Cþ/s/ ã¼yÊÿÛñàŽ'œeÌšÎ!§Ò�;wÞ½=м Y®ŸV*qjƒ®Oá¼@Køc|€q·áZ›€àYDA[Îò�tï²×’½y8˜»'[{ñ_Ud²w~à'ÐmEKã#8§aÕ_ƒÎdM”ž ‚HM¤èç‘oJñác#I[“8ɵõm@IV°KLæAÔ™ž¯=}d¸y¹ãÁ—ñaZ÷oP—¼Ô–Ù‚ºp¯:µ¯à¼y - ewÚ¬Êe¬Ó]„Ó•ÅÈÎ;ŒâC—ÑÉ»ëÓÊ“Ð@HÄeDÓP"¹>¾-[;ÐTs5Íü…jÝ¿B­}²­nt6]@iM3†ø¥¼£pMÎcÚÚˆóªÿà:§=${U_åŸQÃáA»ú(²üšC2d|“{­tˆqq¹åEðÕúpç7œ9XÕg spÛò©Wb‡ì0´vöü/t¡öƒø]ŸÂá¾Û,ä‡hRFqþ^ì<K€èc"bËñjÊY¢\�ø¨ÖW {û%\fgð×CäìI‚ B2HÑÏ#ß” âÃÇF’¶&Q ÒçÁ„hbgFg„vŽbYî‡vÿNì(ºŽ^.`á6@©êƼí:>ÐöG•1ÅÇ…Ÿµ1ñÔgQCip±?1ðM¶áìǦ@‡ ¸0˜Æ?Ƹô8\jÀ ¾<?Ç?Ù<Ì0ô‡+`x‘h–Oß,fææ1Þ­Ex“å£.éî$ì¹ñL†h½ð'zžr"gÑ`}‰Åͨؽ»«`ŠY†×~Gë:,ãX'PSœ½»rQXz]œ˜°ÈÐÍ R‘%ÌšëqT}Ý–.4×E¥¾¿iCÎ;P#rö$A!¸k½Ôâ>Äë„$mMimK½Ðäì†ÂHañj:1f¾„Þ÷:ÍŸa0×ñ®÷yØ_ÂnøûÊšÈbwc ”êC„*/áœâmÈr4°ñÛ1ö¸~F¥ò|ȶT¨?§@–ì�4¶ÄÃ~Ü·q"÷mdfü EªV º­¸Yw _©® ˨‰Xótµí-û2ù<pÏÀù %¥8©ÿ›G{îõJŸ¼pÞ¼€OÛG“ TÅ&­m ¤Ê’ê=2¿}†]åÐ'”1ŠÈÙ“A„d¢Ÿ'Å}&ˆ× IÚšÒÛ Ù…¶¡9Õ&Lq™0+Z.²"h¸à /¸nqZ¶¾ü.àÌgü‚ÿüÄúpOY+"28J ¬º‚{â-«Wáter†l‹ʳhð a'QØsT’UMç v/ƒø\h­ª Q#±ç)—©ó6K ëÅbÃ6gLaO.˩譋èJ@ð˜/t3$ˆTÄ»®ç›m!åJ£˜ð¹þ‰œ=IAH)úyä›D|øØHÒÖ”þ¹€që¯h49°è±BßГ]H‡1[¶.ÃÓßçQÕ4>x½žAØž‹Ôf|ú/˜z¢‹·˜ÉŒ­[èyºÞ9dF½xÊk_]0TÔ@ßúÔ›ÝíøEU‚]²Ѽ ÙDt3$ˆTä%úû˜[ÿZÌŒÚÐ3žÈµZäìI‚ B2HÑÏ#ß” âÃÇF’¶&q ’ ´F6h¡fQµö,îyþ™!b¶š†÷ôñ,l[#øÛ؈{ 9Ù¡ÌaÄ5%ì˜b² ïÌXÈ~±ãy+Î+oÂ)¤ˆo v³Z5»P‡Þ-ªCðÁÚÚÿ»4Â,(°µ(kÃ÷\×-µ³°n'Ñó”[�…âÜ¥7êqAYˆ“­\¹Ò"ÜwÏ ;û îºãeÜÄŠÞƒmϦ”(pÛ'"Õˆ•=>Šóÿ÷V:ÆEäìI‚ B2HÑÏ#ß” âÃÇF’¶&1 rU+D–…ÂÓ ª?åÐö )ã±Õôº ðÝ(58yîÛKôÛÜqs>OYWºQEïÛNd)¿†É1›øþ1£h?ŸûÙ½…§P«º„jå!” 0øžãAMp[ù‡ÙEÅAäîú7ÊtB‚ p?¸캕b©Ø¿Uö=úxv£âÎM8ÜèXpÃQÜ(Uwa–O &VFå/Ø\³I©â}LAl=ëgO† ½Њœ=IAH)úyä›D|øØHÒÖ”¼AÎæ9€ŒÝÁèœ[ .0žÿâò©[ü»ZˆÙjšs¸ë4¸ß½¶øî6}‹“E§ ãDó)+×±è}쫽îÕãdÇcN¼§B+÷³}"á�Á’MƒœŒlTײh˜iX.Ê;¸åßÖŽbhžL®þ}Æ;ãÉÓüe~1ç·P¤±`z%‹†™ƒÓø1Žê¼Îô<]Âô`@”ÒçøIõË:"Ð3°Þ6õñ—ʺD*’âÙ“A„$¢ŸG¾)Ać$mMÉd0P£0À|‡{ZèqÿUÁç°ð}h(f«iÖÕöù"VòÞ>h‹ÞBަ—g×'1Ÿ²²{æéGKãïᆖxx»'¡Ï‡Ô(CÄ~9‘]̪2¨,ü¶Æ¼0 ô°®°õÃ<ìÚJ¨­sìÏ>L?O,»†qÂPzzWè÷Æî›ý[(‚]·˜I'†À­;Oœ›WK¾š»”V¹`8y ­ƒ#á‹)ÿ°@[|­ÏÅj;¿Ý "Ý9{’ ‚ Rôó¤¸Ïñ:ác#I[“é/}zç$n> dÔ,ÙµxGöäªÇ¼ƒ¢¶šŽ…oæo¿CëtàƒØOYEÄ_útå7Ÿ2j–ú¡}ç È䟣ÛÃ/¸°ìºƒSò¼0ñKÿùß™Ÿq¯/¢òPebA³e'îžÊ‡<ôû¬? EÖ[È?QØve)Ž%P†sž®–i%[Zµ^‰\ÄÈ|'®þ·HOÁ¹m‘Έ›=IAH)úyä›D|øØHÒÖ$ŽAÄ„Ûo6Ã2Í.½˜ïX„-hc¶š>ÕÍ'˜æ½91ue81co‡žÆU5@køÞåX›'&Ün„Ñ2É~sp˜ïÃâÐ j¶ÕÙò¸%^ Å1¨»¦‚ˆÇ$ÌÕyBšÑ# 'ŸèyêÃXsÞR4àA˜Øñ"¦»p<¡´\0”Aí[0 ã?¨Üª[ÜÏ· ûò#œüÞÎþ•ä¡›!A¤?bfOAÒAŠ~ù¦>6’´5‰c |ãO`l8 ¥âNÔjÑj[Ó8á…g}ÿ`4¬üd­çÏBïܸñu8bêʬ¥°Ëöáte1²ó£øÐetrÁ©­†ëÔdl@•²%'ê mµ­éÂðÁó?ÿ_„ç.y0`N íx$Óøë§;èŸÝ!í³cÍS,ª sÄFù,P)CKñ6‚'ªæu~Ÿ›Cêµ>® ïÃoDi«K7C‚HUR8(OAH)úyä›D|øØHÒÖ$†Aº>½‰Ì\*kë]Ÿö¡®sbÃ’–HV;H±û9dYåøÚ4È£ûˆº2ËýÐî߉E×ÑË9ìn”ªnÌÛ®ãm?ì–0]i€Þ:|C�+]Ÿ2åPT^`‰ëúT€‚ºþYH±2š¸ÎOÙŸÂ<»ÌînŽì>�U÷tðñˆ(ãÊ“òPmžd}†#o'T"Ç}ÿἂS_‡«¶È¶¸[Ï!§Ò´a–ÎËXð¾Öâ|¥•¸ŽÇ}˜àÎ#ó6ýiäîUÃJ‚HSR<(OAH)úyä›D|øØHÒÖ”¼Ar5ø%á}8{qõÃF ñŒ`øõmöÕ¢9¤S“Åb†îÄQ¨Z³?`"áL‘Yô?¸‰ê/pµ¥f {îYÇøgûø;í†Âà ¼öj:1f¾„‚ 0® ¸ìÌ̵í `™=gyE×ðd:´ g¶«Ÿ@7ijü)†FP`\‡Éµ�f¼—Ëk ·'’´¿~ ìŠÉ‰efæË§P¥ïß0['Ö<efãòápá›ýeJMº+¨QîGæ®rè‡øé1žèÊrüz7Üß v}ö` Y@´yé¨ô‰ Ò–Í ÊAÛ )úyä›D|øØHÒÖ”¼AÎÁªþ4¤ãPÅ^h$Øõ‰ñàùp°TŠy {‹îÐ¥ð\Û`å)Œ‹åèÞ}²½y8˜»'[{ñ_Ud²w¡¶&žoÀ §¡9Õ&Lq"ÖyW°ç.CVM_J"j–¬|õù9Ø4Çyw}‚w®IÞa¬uO€9ö<eà›îEsC% ÷îd¿‹½(8Ñ€Ö!¾]T^¢ÊhêünOàøïÿAù™VŒsdç©Ë6, «TlèfH)ˆèAy®4¸­ßk(£ê€}FŒP/A‘ÊHÑÏ#ß” âÃÇF’¶¦ä ’Á¼å ÊUw`upíGà°>€®ú ²«Û+?á­)’ þ@MY =´·š£X_1`ߣ$!‡{ žçÎ žŒ[E£ÉEú†F˜Â„l°d…zÏ[P6¿¾!€ù?p¹üsܵ4}V˜tÕ(–+ñb¼ú¶} nô¨}VðÂ{ú‡x¶­ümlĽ„œDÏÓ%Œß¿ƒÇs‘Ç·ŒÙŽ&Ü ôm�÷Ô£k6ÖŒx‰®‹Ñ:%8gj]èfH©ˆ˜Ay>÷=Ôpå¼²½È/V@Q˜‹]YB×÷’g@™ ‚RôóÈ7%ˆøð±‘¤­Iƒä´;n~ŒüL™{;ùµHÞ¬@ »˜Ÿ5×ã¨ú.º-]h®=ŠJ};~Ó‡<¡@ 'X[-”r,Ácû Uù»ƒçŸÓó¸XY”DÙ诂¿”(®uÚ^gâÞÁk߸υãcwU±Ý•ñ&hm‰—'qOÐ?ü ®X;Ä8a8R…æq ÔÄöA¬ ü<lšØVšº ¯Óˆ“GoÂI‘‚ ˆ´EŠ~ù¦>6’´5%oK¿g@Û³pÙãîÿú_øÅôŽþhï¹[ŒoV ÆŸ­²<  k˜H$P³’ãêGçÝÛ0üòVG°,÷¯P³Ÿ[Ó² ûî(¯iÆï®'.ÜVëð{ȶ,Ý-P•ס™gyRô<õÁmT¡ö‡¦VÚìhú ‡Î@ÛîàÑ¥jvíÔüÒRö4ç¶ÐVÀîR^l‚*ú˜‚Øz^¢ß掫EÃŒÚГPVà"^*pX?~½óõC«ø* JÎLax˜o¹&A‘êHÑÏ#ß” âÃÇF’¶¦ä rýÌÙ!}bO 7-£Æ»®ç›m!¥7£˜.Æ7F"1³`æGàø'"…kI}¸†<ʉüx0ìˆìüµ—þ8J Î$5 ¼##˜ŒÚˆcÍÕ8Þìâ·ðñ>Å/UïDˆ ³sX~‚bÂb}LAl=±ºÕ…âüã=Ý@ pÝýr¹2DTýÎ)ÞÆÎüøŒ{]‡Ž7%LAlRôóÈ7%ˆøð±‘¤­)yƒôÁ}û*´¿w‡da<Æ]ÕG¨iH¬•ö¦jX8X‹ mC@ȱåO¸½‰ê¶H%P#bLŒ®OõçÈ’€ÆÆ¯“RÌ®Oõg¡Èz9šÞJÏÖˆž§ëhÔ0sxvó8v*Ì'fîôšÏÙ}ÕàûÖ¿xÌþÐÍ R‘õ»Õ… ½•½ClÄ2fÍŸ";÷`Ì€Ïê(½‚.¾zbADJ#E?|S‚ˆIÚš’7HóÃÃø'" øô8œhÉȦj|o¯ƒ\–ÙÞ"œ®­G}µÊn$¨Ÿ³Yš•r±P‘]vüÍ£\,1³`ÜF(#Åùy(Õö$t #Æ“éâÈK¿K\¿(Hô<§Q³¥ú¸5Œç9ú]þçZD¸}%"Õ¯[ÿZo¬AÕ¯‹s­'‚ $ƒý<òM ">|l$ikJÞ 9­(/Ô‡<m ¤vËr4°%²_²¢át ƃ/£aàó.°‰'þ6«;±»ÂçjfÄ<–¯p*!1ÛÍ ÔˆP.Š˜Y0žAØž‡—ú0³¸|ªv/ß‹¡õÀL¡ëò'ÐÙùuOáÎM8ܼ»„ê·Â5j -xØãÆF»ê³¨°Weá?§D$ú˜‚H 1cof×q-µ‡ƒ·FÇú×ú›¤}EA¤ܵ^jHqŸ âuÂÇF’¶¦ä ’sD+[X’…qùòrh¶e¼3 }úèDëù³Ð;—‡õãÔì†Âà ¾ÁâóÀmV¡ ¡Eú¬ —6¡ã{΢ÊÅ:ÐTs<ñr±PÄÌ‚‰Õž{èêäP[ç‚¿”(±ÚsÛaª+Àž„ºn­=O×Ó¨I Ô›ˆLÌÊbdçFñ¡Ëèœæ{/àÊ_@}ÿñÚµ¾û>nœT \'$K‘ ‚ RôóÈ7%ˆøð±‘¤­)yƒ\†§¿ÏÃÒ&–0Ûu§t6w0ãp^þ†¿"‡,«_›y8·‡ûò[xæÏ¨ñ®-‚LV�U÷tàW&VÐaq/¡î¡ˆP.Š˜Y0ëËäõ)ë´ç–壮3Rd8>ÜçÄ„5AÄd¹Úý;±£è:z¹,öš¨TucÞvhû‡ñù"‚Òü­U`G¢§A„$‘¢ŸG¾)Ać$mMÉd,½• ™.A¾Gh?ʃ%»ïì«Es÷J¦ 7ÌÐ8 U+÷Tr�>>Kü@ ûMã_˜fx¿ãŽÅ-`¾NÐ!#‡*£ …{Êšd¹X(bfÁÄ&¶XúŠêÆhÏmù 6÷<ïL«äçi8¨!"&‘™˜þ@M'ÆÌ—PÀ306 p›q­u÷ƒ ‚ B:HÑÏ#ß” âÃÇF’¶¦ä ’+}ŠUƒÿäu˜æ»"g^ÂÞb@‡;T v®‡m°z„ ÄÒˆtèü 5¥µhšå¨‰*+²ê ZìÊÅÄÌ‚a–à[â½!,ÁóÜ ¦1ðù’_ÖppÇ#&¨!"6^8ÙësNµ SÜulåú*+‚¦Ÿ¶VìŒS–y¬Oùn‹ ‚RôóÈ7%ˆøð±‘¤­)yƒôÅÐ[a‡mcAט0³p<l„Zu=´à7Á:^Ú“bj x0ìˆ,×Y„K¥'ÏàJÐyåÁDhŒ{�múö8¢Êë B 33Œ {Êܰ´u fqlŽ�sô<]gÄ~ó½xºÁä£@ Aë³€që¯h49°è±BßГ}JÀõ"VPž…rdW·c–ý;NÃqì–ŽnA"‚ ˆTEŠ~ù¦>6’´5‰aÑ5øÂYÒá]ÙNìÍ?€Üì3hì€Jþdû`çùUkÀcå \鬤ª? EÖ›ÈÑôò<~^û(ËÚé?ÿaC! MyÒY0,óO ýü.†»¯ 'c7”Í/‚ÿÁ—רa@FöüŸ»´ö}øG=.( q²u”=Ë‹pß=ƒlvÝ ËТ@ Aë!¦wŠ,s Ž+&¸–}77 ¼ê']õ‚ ˆTFŠ~ù¦>6’´5 5È¥žfühu…8²ãïhï¹yfš5‡ôpqz2}×q´á ^aÝþz+¢j ¸`Pæ£0ô©¨¢ Uª&XdçXTûUqíaZ<ì°O$<XêƒñGKìsï½0ja<á/€ÏmÆÕªr(knÁ–ò5Ü“êcØ›8äûX¥ê.ÌŠ¨YÆ‚÷ïyœt3$ˆTDL=²õºÓ1Xò-mÊu… ‚H ¤èçIqŸ âuÂÇF’¶&¡É-t3ýÎëúc‡FÌ$ÌŸœ ´3í¾Ú÷ÎBÿø´eÅÚC‹©5ðý}C˜ ˆ<o½¥~gfƒyë×8zµáLºF˜ôY ÊŒ>çacG9 /ÂÿÂæóº5K˜þã Œ'1=¸oO`¡Ä.ÚN6ÀÂ7›+¢‰ ˆ­'†Yw TåuôÈb± ï„ZÕþÙ“A„d¢ŸG¾)Ać$mMB ÒgÑAÕÜÅ:±à7Í1Rý‚®UÇö7è*JPÝ<À£•v€%«{Ø}âökmȰ«T¡ÅD6*fË!’Ö�3ŠöóyEí;d9P~mâ¡ë²�—I ¥</"%þ<”•?'æ¼ûþbýÛèæÎ÷o”Rá×® ntêNãÝêf ÎŒÊë Ԍ߿ƒÇs‘l˘íhˆ šø°sÆv 5Ê’Ù9‘›ù&äÕ?Ã>#nÐ+ú˜‚ØzÄÔ# ñbÂf %È’±÷ !e®A„d¢ŸG¾)Ać$mM‚ rɇ@,$ÖœÁBW2ßÕa(!!‹Žf|R¥AûàPïÎFm§n÷¬¦fü¯ÖŒ¯^6bsXê‡ö÷PëN­¤,x¬ûï©î°??}"QÁãeÌš?EvîÁ¨À@‰ÊŒéàoÅg ¾à9ñYÔP®”w­°Ð…ÚÌb膄ˆ0Ç`õûÞˆ×Yú«Û7ÞÄ­-"[)þ¹íÍGqÄ÷áÔìÊB~1û³ò"šóÁ%·¯A¤bê‘qñ™1ØL7pAñ6d2dÊË¡jº ½î7þÂñA„d¢ŸG¾)Ać$mMɤã­Õ8TkD·Ý ·Û »åÔŠ=ÈØ¯…=¡@ÍL•ÿFª woÔà »O²¢:|óåìbæ×ê[Ì@Ahvû³½/ž¨.»Ì¸m ¾âwÖqÚ³2ãwqêÐEüÜm‡Ëí†ËÞ»êRöÜBkO ÊŸ-ô.ö©³g/Æû ¦ºK0&tNç`m¸„æqn9#ž(gô<åD:U¨ý¡ ƒam4}…ŠCg mw$VBÆÁŒÁTuÕæ©à¡pÚDjXDŽûqÐÍ R‘zdÅ—~‡>ÞŠ pè?ð— ˲OáFç f~è@AH)úyä›D|øØHÒÖ$Ô Ï ¯d0/ѧû0ÎÍn²¬¡ë{™Xš¸_o%T`:ÈPÂÐÛ‚ª#´ûƒ?OÑÙð)¾M$è j f“²s°„ñ{´= `°C �³?ˆÔ÷}x)YÊt=‰•ž-@÷î›ØYiÂlð-öK…oÆ“ö ÷rÛe¿Þça=QÎݼK¸Ï…³žH§cÍÕ8Þìâµ}Æ3ˆG槈Η™ƒãq&ø)}LAl=/Ños‡wd¦ÐuùèìB‚ëËðºÿDËÕ(•5¸ÚbÓ3Ÿ¸A!I¤èç‘oJñác#I[“PƒŒ.·aÑég°q%AÖALxy4¿^²B½§Ìˆ+a°þŒ:mPKf#†K¸’˜°5ë—íÈéáä`flh3Ðd|„?ûºaÒÕ£¦á6¬ã‰–=qžïPzà<{ÞG0õ‚[TT"?S†ŒÌ¨ÔþŠßoþˆ{þ,>¸`¬Óà~Hg«nÓ·8Yt*ñ ^îÜ„³ŽF 3‡g7c'/ý‡¸Í:4û"[ë½/ÑÇDÄÖ+ÐS]öðîÎj”²ò·I£† "‘¢ŸG¾)Ać$mMB 2¦.Š`&a®>îϨñj2U°,ºÐ\.Gna1Šó÷B&o€Õ›ÈjY"šÛW¡ý}Eü—qWõj0sYHï]ÓéE0î_P¾ë-䟨„òÀ'0M%º¬dдÿ¨B™|;/þ…C íxÁ'à»M_Äß÷öA[ôo­‡èyO£fJõ<4j¸@¡ ²ƒ%[AÖ{_$¸}%"ÕX'P–ºÎH‘áD^[õWýz7j­C.X>IPŒ ‚"Rôó¤¸Ïñ:ác#I[“Pƒ7PÃ:²N#ÎÔ4âWõaì ¶õf<v´i ºRâ#‰fHH!PÃ`~xÿDxüŒKÃZšû,_¢D? †KϯÛÙ-ì‹\ £*‹€T}ß,œ–;ÐÖžDYõ5´Xœx9Ü~O2A› ¾˜¿ý­CüZ­GÏSöøŒ—P}ãV¸F¡{ÜH(¦· §?ÔŽ;w0ƒk…õÞºD*£=·å/ØÜó‚4ìu}üÎËß@†, …§OA‘‡ââ#¸((èCAH)úyä›D|øØHÒÖ$Ô Å Ôppuü¡Íø¶éˆ\f=‡¬ç³]ß¼ :nbF±&¢5÷%œãº‚äh`㙼Á¼0âXi=~ø¦rÙÛ¨2=Ç´½ ªÂcл’i)Í= D§¡ù'ž‡EÌØÛ¡×|Îc´†ßy´1_#zž®§Q#èfH©HŒL@Áxa×"cG1®öråžAqòù^h>ø.A±}‚ BŠHÑÏ#ß” âÃÇF’¶&¡)v †™ÆÀ„ݰ–¶NA‹ù˜0^ÌŒ†j ¸ñ¼õ"”úÁ²$61Pc¨ð—u­µ>Œ|y9´<µ[pZ*×Q¥<†š›½ð0¸z¸§À½p‰t™ÉŒðKSaña¼½rYd{‹pº²Ùy‡Q|è2:§ùíWô<]†§¿Ïc-t<=¸ýÐ.š‚ÐÍ RqÌÀ<lšÈXÕÌâ5_¢k¬µ °Š"‚ R)úyä›D|øØHÒÖ$Ô EϨ™íçw1Ü}9»¡l~ü$ð·ÎƒŒ=Fî8Æ,ʯM8ß dç"Va ³]WpJgÛúN ¾1X[¡ ê)˜íSÂJ–û¡Ý¿;Š®£—;Ïn”ªnÌÛ®ãm?¯@Jô< ”>Õþò{HyBp´ªðÞ [àöˆdèc"bë/ÀìÏÎqP–Ãé…qÙ+ú7o¢@ÓC]Ÿ‚ Ò)úyä›D|øØHÒÖ$Ô —¬×p:n0ů—Ï"™uhÝf\­*‡²ælbd‚,õCûÎ{¨mî [È?Ö}„÷TwØŸŸÀ¾Òb|#˜)ØÚŒ0À6³Æ3„ŽæŸÑfĈ՞{C¦KïQoíSVßs<¨á‚[;±7ÿ0ŠƒÈÝõïÄ[}‡²Ô MÎn(Vzþ@M'ÆÌ—PÀ³{Jô<å²’Ö»ÞÇåÎd)m>Üþ‘bˆ`ÀÞÛÆ­hi|Çâ4¬úkЙì˜I¨ü– ‚*RôóÈ7%ˆøð±‘¤­Iƒ\†wf,$èÀŽç­8¯¼ ç–:£œl+;^„-Ô—]fܶÎ_%óº÷Ž@ód>†ëH•…Ìüã8§|gLc<ëÞ€¼®Ó[xÊ–läì(gð=Æ;ãÉÓÐ;_ßI/œ† äT›0ÅÍvÁ£àŽSVM?‘ãèyÊžÃÛì‚§×>ï¸aÕ¢¸ºϹŸ]½h¾ø5̳B ¡–±à}µ)žèc"bË1À;(ÏŽ¿[ ½çNÉ�2A!RôóÈ7%ˆøð±‘¤­)yƒ\Kç¶>v"Kù5LŽYé;¤> T%z¸®Dé3dËCkŸ:ñ–Õ FbpA†ÈöÜì°ñíV$>Ì JsÇ|ÃÏ<ìÚJ¨­\§&&‡ŸóÈ®YÀ¸õW4šXôX¡oh„I@)Uô<£Q3ݯnÚ *fU™°îW~\0œl€e^ü/&ú˜‚ØzÄ 0û¯õëdþíÐá ‚ܵ^jHqŸ âuÂÇF’¶¦ä ’ëjñ>öÕÞFwhÐá±'ÞS¡•ûÙ>Á{ažr0NŽƒê‡«¨”¿‰ÝU÷16mÇ}U s­±ƒ¿–(ŒÏ‹—£áOYCÇH¾kì¿–¸LסÒ[!4,±ìºƒSò¼°ŽTõçÈÚ™Ÿq¯/¢òP% /é&õý6wT©€Œ¦uç)ãóq3´jvßÔß¡¹k0¤¤`Võ»í(ß`—à±ÝB²$DÜyeDnæ›Wÿ ûL2´¢¡›!A¤"nÜÓßÁã_®àm;œö_pAyŸU©pgœïÌ·ñ ¨ï?^»7vßÇ“ ” )'%‚ $ƒý<òM ">|l$ikà O?Z‡;Ôé\vâámÖ ¾”>‘:‹ð¸zýŽwËÃ?PÃe®ìˆ~Ê6Þºˆ.^™\—ªÜ#˜mGu¶…Q‹Ðq ꮩàâႱ² _ë›`0VÇ-Õì¯üŒ­1”`ðƒ;Q¬êép¢Ÿù(V£0÷_È*û}~#®V#¾5ÄúKv·y¬œFOò‹ÙŸ•Ñì˜~(ybA[ÌŠàoä59‡ôAy_D¹”kØ‘£_A!!¤èçIqŸ âuÂÇF’¶&1 ’ñ â¡®ª«¿ÂÎ.îõ`\ˆ>Íx;ôm&½0jaœ÷æbet0˜èÅSA5F |žÉð}{öú{|Ã"\R)šûkOY-fè+¢DÓ’™4€ ^çP„@ »§VÄ G¬·àY²¬“hÚø¯q¿ŽcÍxKÑ€a¥T‹˜îjÀqÝ@T&Ϻ0c0UDµ9Vð‰k§«†eR¢‰ ˆ­Ç…Ûj~_½³£ó'Ô”Ö¢yHŒ2Þ@�ùZë u}"‚Hc¤èç‘oJñác#I[Sò¹€!]1d²½È?(GöÉ;üïçËÞÀ>õŸüü+z�‘CvD€˜-·ÈÎÈá².òØEù$°< Ñ·!W=N óÇû'¥Å“¹&:™0s°ª«¡w…f“0XèªCæ»: Õ½õo÷Ȕ;ÃÏ lÏ#;ay0`°¨págíCLF›ÖZ»3ðM¶áìÇ&Ìþk]¸s”ú:GŒ®]œž’_°Š 6>2?1_çàx܇‰äWgQDA[ÃŽ‰ˆ€Ì"\úã(58EÔAÛ)úyä›D|øØHÒÖ”¼Arš£8ä×iñ OS…«‡]ù>…®ä+þ­¦Ý¿B­}´ö$ÓÒΦ (­iÆï–Ý\éÍ \j­„Ž+&'–™Q˜/ŸB•¾ã ·øÏü7*tõxø´ø^…·O‹ò3è´s]‹FలǭØYRp¡Ì=ØâÆAäfêìl‘Ý êž~ ¯ðrf>jaÃLôá±cŽýá%솱¯lãÀRô<}§¾WmœÀq( p·žCNåÆÁŸ5ܸwó1f7X-ÜA£5ñ­nÝ "‰qߨ? EÖ›ÈÑôòìúDAlW¤èç‘oJñác#I[“É̶㓣 ¸ßmAwsÞ«üûeòþšù8þ‰Ð-a†¡?\‘ €m(sqM‰ô”¦­Š 0SpD anÓg(È”ù¿nȲ>„®ïåÖ>±uÿŒJåù° V`\‡Éµ�f¼—Ëk ·‹ >äy U –¿£Xó”™}ŒË‡?À…o~ôkß4é® F¹™»Ê¡O œjK´C†ÝU0%ÒÄm“ ˆT#V&fªîøK{ ‚ "¤èç‘oJñác#I[Sò(·á¶>ö T?�Þ}rb ü]‡d ±ñ-¤ŠÝu(fÔ†žD:y,;aº\¹\þ¤õ Tù–>­ÀiÞ<‡Ë̱b»•©4Aœÿç¾µ…ëðÖnNEÞ¿é^47T¢pïNdÈö¢àDZyëH¸`¬Uá‡ÁcàGóU^CSèûw¬¢•AÅ>&‚ ¶–uî¾x…è®AÛ)úyä›D|øØHÒÖ”¼A2ðÚqòü/°‡.î'<ÂZrÇ*½QžECK¿€V¦±žŒ†âü㽄„g'a®ÎCnaqÄ6Ê 2 Q„aà›±£]ÕðQkèpˆ!T™$¢j­±ì2áŠê¬aÁ¨èyº„ñ{·Ñ1ù„{³M¸ãæ"\'óŠEë™4óÚVâDA)ãÅÌhÈýŒÏ[/B©v_#‚ ¶RôóÈ7%ˆøð±‘¤­I¸AÎÃÑ\ª†ßà^œ\õ1¬;ŽëØÜÑÚ$ SÌ–Ï» ÀA^_£&lè­Ø¸‡÷i/xµË^füÎËß@†, …§OA‘‡ââ#¸Ø)b™�bvÊŠÒ² ûî(¤´†Ï¢Bf†·°eNô<õÁmPúßoâ€ÖÆ#›ËûÍ=ˆšuÞ§¸Y–#@,:1¸}%"Å`FÑ~>Ðö?êÚ"ËòkTEAl€ý<)î3A¼NøØHÒÖ$Ø gM¨|ã T¿4ãFuveÊQR¯Á—%{‚m>ê„Xï Fƒh=z'ß¾CbjÔ°ø<˜Û¯ð1Òñ#ûÑ«áÚs"cG1®örš4ÁÐó½Ð|ðì|“NÄÌ‚U#hM ÔÏãÄ×?„”+5A¯©D¼êC<ºTÅѨá­w“8Üö ‚H1–ú¡}ç=Ô6w…¬ë>Â{ª;ìÏBä ‚ ˆí†ý<òM ">|l$ikjþ…÷~-ìË pèÞG†â'ô¶~‚#šG°»Üpµ£á£ïyV3MØýв¬r|mP%‹xa(ÇŽûµ6dx«¶3–äó°i°çl¥…4¨ù]cí¨- À,f§,Q5‚ÖX²ª±Gö!šÇ…=‰æÎo8 ¼##˜Œš /aQàÙÞcM-n4…hÑ°ÃØú»ð̰ˆ>&‚ ¶ž%xì­hìxfûË.3n[g‚¯‚ ">RôóÈ7%ˆøð±‘¤­I¨AúÞþ@ƒ‡]ç"CqÖæhíÁå±o†Ê뉞OúK›–ìZ¼³¯ÍÝkO2-3t'ŽBÕú˜ýyÀ_bõÚYî‡6ïh~ûcm¿:@å>%4¸ý ¾gŸH D‹Ïi@YÎ'0MqY*+o¢@ÓÃ#$ˆ˜Y014‚ŠóóPªíÙ¢�Y€„çél;ªw¿ ¹êqål+ˆœy• t3$‚ ‚HO¤èç‘oJñác#I[“`ƒäĹŒš@ &SeÁ¢û”gÉQ¨8Œü½™«ÿJ,èà³@¥ f—0/ao1 #LÀu®‡m‚…hEaÉ µò&\a«ù—èªÝw#Ž„oÜŠ–ÆGp,Nê¿ÉŽ!A(1³`bh1³¸|ªvïÖEj¢çéÆïßÁã¹È3ïØñÿ‡F^%_ëuó`À:Ì?p– t3$‚ ‚HO¤èç‘oJñác#I[“pƒôÂi¨EÞ�ua6J N0þ”ñ{Ъ¿À•ê#8’¨kh f“H¶ë·hï»zg~ü=PÚ債U Å®L®c‘mÏÂ5nÜ·@{ÏÍ?³CÌNY±„‰‡î¡N^�µ5ýÍ!zžŠ)&삱B‰sõk®À8åþ³hZ˜ç¸{r²OÞ[¤x·¯AADú!E?|S‚ˆIÚš„äfz`í¾‡›ÚkÐ= ׎a&úðØ‘àÂþ5j’³õã{SÝAv;+È*û}¼;€¬dØQjÀ ¾�Ì<£a–gmÜã« ³Ž0±L^Îiaú2bÀíC8œ˜ð%T߸¦+chú ‡Î@Ûîà'&\’‹üâ@×ê8u×jb[±€qk¾×|•Z ƒY`¶#A±m‘¢ŸG¾)Ać$mM ’Á¼µŸßéE÷ב„P¬d5XČ݄oþ¿ÿÈ2vãÿ:ߌ¡ÿ#$C‡ 2|õým›îû¸qRr�-o?~,ˉÑNVÀñÆhÏm±ôÃírœnÜÓ?ijà‘Û=‚¿¸7Îo¿¢çézbÂK˜j½€›]<2“&ðG—ƒýäëE¸í±y,Àýàä² Èöæ£XQŒÂÜ ÊAÛ)úyä›D|øØHÒÖ”œA²­ù:ª”ÇPs³W¸ØìkÔ$Ûuˆ ®Œ·×÷"œ®­G}µÊnrÞŸ/"0àÁßZväh`ã¹9*ëtíÿ°^f–à[úEF²^ÛëÝÁR¹Ä‰ž§ëhÔ0sxvó8v®vÔJ�f ¶6# #Úlœ¨0ë@³ñ,Ôõ‰ ¶K½Ðä¼…"Ó+×Oöºâ4~Œ£zǦ]‚ ˆôBŠ~ù¦>6’´5¥„A¾†@MÒø÷Ø]a„s5»d ËW8%Šóνq­uP@×§?¡>ú l‹á{ÁLŽ`d €ýÚ/uÜéàÕmú'‹NA×÷2É@˜50U¢Ò`ÃŒoÞ¾k(½\åǨ,©Fs˜°µxpûJDŠÁ8a(=½+ÔîøìßB¡¶úì̤Ô]CAÄAŠ~ù¦>6’´5¥„A.YÑpºãÁ—)‰?P³ŠPdŸn³ * ’)¨J–e×\VæA® íüT Ê“*õJvqã‹XÌxû -z 9š^^¥FÑó”+S¡ö‡¦hšÒëèã â:z•|÷ß ô%»!; …}‘ÁB— $*ŠÍºD ²ìÄÝSùá×Óú³Pd½…üµþ×õ•¥8Æ3+ ‚Ø^HÑÏ#ß” âÃÇF’¶¦”3ÈX]‡Ü½0ja|K½â@éÓ;å·ðÌŸQã…][™¬�ªîéÀ¯l\«ôl®-z„nÉ0o¡�pL|#0ûZ‡øuŠž§"jÔ,÷CûÖùy¼h>Ýo£Ê4†ñ°ßq%êºf‚¿(.t3$ˆTdæê<ä‡_O#F©º ³ÁOAD$RôóÈ7%ˆøð±‘¤­)å r®C;ÊaxÁ·å%úmîˆÖÙ æzñTPI§]ÒŽ›Æ¿0Í0ð:~Ç‹[Äl¼^![óà©Õùà+qX€Ët*½•Ýz2Ιžëž¢j€Öð;J¢ç)§QÓ ËBÄ÷ÈÌcÄx’ŸFM0Çéed¼yÍ=¸ç‡ñàò)”(ÎBo÷Ì®}LAl=ìµýi/æ·ôÉ�A!q¤èç‘oJñác#I[“8ÉÀ7c‡Ù …Z¥‚Z{G¸«»uê»è^Ä} Ó*• é¸á‚A™‘iÂuðÈCµyX†áÈÛ«'Œˆô ‡µ¡'ánFËðÎŒ…g=oÅyåM8ù �oJ’U.2x<"‰`®,FvÞaºÌ»Õwô<§Q³¥ú5>x\6X¬Ã¯­ /·¯A¤âu«#‚ ¶/RôóÈ7%ˆøð±‘¤­I ƒdÆá¼ü dȲPxúTõç <pZž‚±~¢º1ðþý-Šv€ÆÆ7³Ácå \XÑWLN,3£0_>…*}¾±‚>á£8ÿßxO77˜ 4ƒ#rìD–òk˜³‰Ÿ»õ²dG w¾ þ_DÔp%EûwbGÑuôrA6v?•ªnÌÛ®ãmçi îxÂá4j>Eå7?…kÔZð°Ç-ÕPNèc"bë¯[A±}‘¢Ÿ'Å}&ˆ× IÚš’7ÈyØ4±û#s«N,ãù/.Ÿº§¯Ö7{ûOÐpAµ?ê4ø®ÞÃïÕ÷F\\»e1X?è6*âômÞǾÚÛ!™Cìx¬Ã‰÷Thå~¶O ág·î_¡Ö>ZÛ;ºï~òšf îL2«úÈ”ÍÂEž#˜ýšNŒ™/¡ Ø=%Q¢çéz5Òn†‘Šˆ×­Ž ‚ؾHÑÏ#ß” âÃÇF’¶¦ä 2¨ ˼ðÁãþ ª‚Ïaá›)ÎŒ¢ý|d;±·°•Š}È+~‡.v`š·‡,f »˜A.Õ–ÆßáÝà²÷ný‰ÿ|™0ó#püQèà C¸B€®˜xá4T §Ú„)®œh%óGVM?囘óÔ7«ñ?P©D—{}cÉ_¾dZv÷š¡›!A¤"âu«#‚ ¶/RôóÈ7%ˆøð±‘¤­I ƒô—>½s7Ÿ2j–ìZ¼#{#Aí—p–ÙÏîÏØ…¢«VxN‡¤*Ë?°i>†Ö¾qR8륰gâÞÁs1¿ãtê/pµ¥ŸÝ7öµ½÷¬c g¾øÏÓ¾ƒët‰Z†×uuÕ¿ð/5rÿŒJehknêÏ)%R.&6 ·þŠF“‹+ô 0Ù§Ï Â}oἂS2v®äÌCÖ¾ztNöC÷î›ÈØ¥„ÎÎcæ1S°µa0Ñfã‚qœ�rš÷„k-%@ô1±õÄÐ#ó¹ðë‘"\êå{G#‚ ¶+RôóÈ7%ˆøð±‘¤­Iƒ ˆ ·ßl†…‰õ:`¾c[€(ë’Mƒœ % nn) Ôt Â\[µ•_Kg.Ps[­Ãï!%A–ΟPSZ‹æ!0Ëþ €loæîÇÉÖ^üWU�™ì]v¿kÒº<¤Ã»²½¨4Mßáà‚&hÏÂ^N³Fˆ&ŒÛeîÁ½œ<”j{àÙ¬(CBÄ`^v™qÛʯåuô<å2¹ Q íggÉf»¯à¸Ö†yÏ$Üýz?kâÑ:w¦ÊBTl˜ñ-ÃÛw ²7«ü•%ÕhvoNVÝ "S„ž ‚Ø®HÑÏ#ß” âÃÇF’¶&q ’oü Œ g¡TÁ‰Z-Zm“¼³&üø0”Dµi”ý<¨ tö‘\Co†™E¸ôÇù‹Bú5eлØE»·š£X_1`ߣ$Q½æ%ú´Çp º V÷^XZpµò�23dÈ̯‚¶Õ„›ºßøkÂxa{Εþ¬ÁÌvâò©FØ·TU—Óõ©Â×ú¦0Áß[ª#Ø_ù[ch&± Hô<eçœÓˆ.š1Ë"ã„áÃ/Ð5Ï~'S­¨8Â#àµd…ºä{8¸íø¡/Ù Ù-ì‹ ºTø`EcGdèfH©ˆ˜"ôAÄvEŠ~ù¦>6’´5‰a®Oo"3WÊÚú@×§}E¨ëŒ ’$§=ÒÒ“cktaOpAN ‡»þ,Yo ÐX¬¹Gý­Ã»Ð\{•úvü¦=9/a\.ƒ¦?ªÊ!Ï”!c— fWr]Šbµçº‡:y€,$îü·6úÅœÕZ#ÌJ•¬Wz¶6dY'Ñ4´qy÷»á,aºû+íÎB~1÷Äû0ò÷þ ¹…‡Øwa¿¦ ÷»âºS} u~/šOcwÆÛ¨2a<°k+Q×Å/û'Q¢‰ ˆ­g==²%ø^Së~‚ BúHÑÏ#ß” âÃÇF’¶¦ä ’ë`T‚"Ó¡Nìb/®~؈!>=˜9bd‡p:'®‡m°zøn,V {ªîÀη—u±Gæ?_acW9ô ¢aàó8aiÑ¢ö㍾Ú‹söAþéôë´ç–ÉëÑÉ•¢ñÁ÷j‚bÎù‡Ùóu¹»þ22*~Ö>ÄdÄâÆgQCéÏRaÏÁdÎ~¼q™w<á,`HW‚,ÅÇaO¼¹¡þŸààõý†¶Kòš{pÏãÁåS(Qœ…Þ¾9:?ÑÇDDJÂx1aý*ãæd×Aé‡ý<òM ">|l$ikJÞ ¹6Ο5eBXì…æ€€®Oœ0î‰èCJe †F¨…¨ÔÐÚ5ˆ™„ŸjÆÖHo^ÞOF=°ëªq¾Ù’¹2Š °\“p13Ô CÃIä+4j¢Ûs[,ýp{ù¶ÐÚQ Í“µÒ5Æ;ãÉÓÐ;ÎQ ò /g^bÚÞ½æs¨T Ð~Ç £sì†_ÂnøûÊ6nkž2ž^üÔøßèn`n#NÖuJ¢Æçïe±‡Í/fÁ‹¾S%AèfH© ãƒÍtoC–‘ Å&•AAé‡ý<òM ">|l$ikJÞ Ì[® \uVǸö×ëèª"»º‡ ku²CÖÆNd•7ah1ÁÕ3ãÅÌhHI;ž·^„R?ȯœ‡ë ÔÚ­ö.l3K`<Cèhþm<º>-õ4ãG«+l_ÂÆßÿ ç,ø?ÁßOf ¾%q¢ Ì Jëá Ûܼ¿(PFåÃäðó³kÖ2Ud{‹pº²Ùy‡Q|èr ÓÇóª,·=ç¾ûpxí7Q!ß1?VÆ(Ô÷–Ì­Ài$}‚º.ñÚ²‡Âí'A©Æ2¼6˜n\€"k'k§» /»Œ¦GMÐÝãF'‚ ¶)RôóÈ7%ˆøð±‘¤­Iƒd^Âvócäsš+ìöüÁ”²ïÑÇ·¼ˆÃÝm«;"øáEUÌÚYÄdëE|Ö9i˜Q´ŸçÊx"ñìå@ùµ)ñæ)tï dš0.4—g!3ÿ8Î)ßÇNÏ$økñðYTÈŒµ/!cG©/xG¸2ªÉØÁÿFÇwô½ÚxÃË®;8%σòBýj)‘¿Õ÷Î|œøŒ{}•‡*ax‘@�„Ó~Ù¿;Š®£—;Ïn”ªnÌÛ®ãmt¦S¸s7'öa¯ò‹ˆì+vh+±_¡Â-ögc—‹1á]: ñ}øÇ®R¨Øydr%·m‚ RŒåAè¿ÅÚçNdWÜ@çÐtÂÁx‚ ‚XAŠ~ù¦>6’´5‰g\°à9l ¬ãÂÅq}³˜™‹ žø0ÑóìFO? U…(k~ü¿8,õCûÎ{¨mî + z¬ûï©î°??}"Rg|¨J¸L“%Ìv}†lÙah9íðÁ’#ï³è òïËøMs ‡T¿ ku¿~ƒ®¢ÕÍüµ`¸ŽG¥»ýßåú#µ‰ˆâζ£:[¡ë9ŽAÝ5ü@–z¡ÉÙ½V.à?W3_B/æXó”˨iÄ©Ë1JœÆ[pºÇö¹ï6óm(ÕáÃ-h+ ¡Pqï· Ë%n—èc""%`æáæºòUƒ²úZ,Nx§à ÎNAlK¤èç‘oJñác#I[Sò¹„ñ{´=‹Èâø»Ú{n‘KF–áéþï^e6‘eø<öV4v¼Ûe—·­<;ùpÁcÇ úá**åobwÕ}ŒMÛq_U‚ÃúáÄŽsɇ@RFh†Ð \+è:d¾«ã-À¼l×"O¡Áo«AŸntêÏ`_É×xнò^¢A)žZG>× §¡9Õ&Lq¾RÖ&+‚¦Ÿdrìyº ïäæ’ždœþÐ'¸UâÄÎíæKhÒ9+èfH©ÎJT-”…p‚Ä„ ‚ ˆ‘¢ŸG¾)Ać$mMÉ$§ã¡ôo'rÈéáLz,vØ¡b¶ü:­ÀÀç6ãjU9”5·`ó,ÂãêõAz\žÄ5«ø0ÞZCµFtÛp»°[î@­ØƒŒýZØyj–¬_C,ZèBmf1tC f ­³ë–ÖaË'YÀ¸õW4šXôX¡oh„I@»on>…³ O?žG+ó½xÊ+¥Ë{7`pb.â{œDGã¸7iGA© 3oÃÃÿ&PrKA,RôóÈ7%ˆøð±‘¤­)yƒôÁ}û*´¿w37¸ñwU¡FH¨l fËNL¸Íƒá`1á0˜—èÓ}ˆ,Kè``+ëCèú^ò ú°x{pµü<~ì쇋Ëfr<A«º»d5n#”¹#J"7ûS˜g—±ìl‘Ý êž~ nÜÓ?ijÐL+÷þ66âÞ8¿³=OÙyg< ŹK«Z:Q ÊBœleÏã"ÜwÏ ;û îºã)Õ¸`Pd®~ac¥Ämà¶OD*"V€Ÿ ‚Ø®HÑÏ#ß” âÃÇF’¶¦ä ’Áüð0þ‰ˆ.0.= Æ]a.Óu¨ôVð+’ AD1[1Ä„£Y†wú™_×ÇbÄ„€vÚ¸lŸ¨+Ñ©‘å L×Ã?PƵGWž~pã:L®0ãí¸\^½=‘oe½�Èn”œ¼Î÷¹p¸L®cØ›8"¨¥ê.ÌòÔ+«ðµ¾)DŸæh*B®lÀ®•ø&}LAl="ø ‚ ˆm‹ý<òM ">|l$ikJÞ ¹Ì†š°.A*Õ%œS¼ YŽ6Á~-§ã’‹ …‚¢Š(f+†˜p8 |3v´ë¯úÏ™ZkD‡cV`À‡Å7ûƒ¯ñ?¸v²™¨¼Ù+,›Éù?qî[[H 7zaÔ>Â8ïí¹`¬ÓàþªNŽݦoq²èïÌ¡èyº„é?þÀ€(ë¦9Œ¸b´àžÿª·BmåÝd>!èfH)ˆ˜~‚ bÛ"E?|S‚ˆIÚš’7H.³¡¹…Å! ‡‘//‡VHÏ*"jD³EL8füÎËß`÷% …§OA‘‡ââ#¸Ø9Áÿœ­¶!߉½…¨TìC^ñû8t±Ó|7¶rŽ"‡ìôÎWÁ_J>_D$ÅÛmÑ[ÈÑôò ”­;Oœ›¡U« R‡æ®A‘Úh/cÖü vË ,óâϺÇDÄÖ!f€Ÿ ‚ضHÑÏ#ß” âÃÇF’¶¦ä 2–¨+—ur§t6´s°ªßLÙŒñà;ÂGÌÖtMLØ »¶;Šqµ— f¹`Pªa™g|Ç[L˜ëú´?cŠ®Záa¸ÀY5T–`Ó| ­ç7àþjí£Õ ÌÝ/P^ÓŒ!14|#0ûZ‡ø•Åœ§¾çxP踅|+ŠQ˜û/d•}>1ö•ñbÂbÀÿê¡Ò'‚Ø>ˆà'‚ ¶-RôóÈ7%ˆøð±‘¤­)yƒŒÕž{C¦KïQú¥Å³—yØ4B²…¸@Í—èkGmAïs¶dÓ 'Cl÷ Ôt Â\[5ßÖÒó#pü¡ç C¸†ñt^ÖCQÎèyêÃXsÞR4àAXàmÓ] 8®àQ¢°íª ³üAîo­\¨,›³8KÞö‚ØÄ ðAÛ)úyä›D|øØHÒÖ”¼ArXí¹ß€¼N@騈'f+. |NÊr>iŠ ~¬ìç›(ÐôðÏBò9`(;ˆjÓ(ûm¬}²‚kèãÕ¦š%†˜pý9²d ±ñí~$ž('w<áp¥qAçˆÑÕŠÓRò(™ –:äWj _^m°NlÎò,ú˜‚ØzR5ÀOAH )úyä›D|øØHÒÖ”¼Aúb´çf‡Í ¾1ñOÌV|øÆ­hi|Çâ4¬úkЙìÂõU|c°¶4Á䘃ÇÚ„ÝCØgdÀÄhÏ]œŸ‡R­€R"ŠrFÏÓWpêëpÕ™1´�wë9äTš°ðò�tï–Aï’1$ºD*’ª~‚ BJHÑÏ“â>Äë„$mMB r©§?Z]§.\aOÙñw ´÷Ü"9µ |Þð–)ž˜mJ3Þ}Û@øùÚ©É3Ûóð,f¶—O5ÂÎ7ò&¢(g¬yÊÌ>ÆåÃàÂ7?ú³_štWP£ÜÌ]åÐñÉþY‚§ï\ü>RS‰?Cwa$‚ØF¤r€Ÿ ‚ RôóÈ7%ˆøð±‘¤­I¨Aú,*d²Ÿå>¿ÞØQjÀ ^-ãÁhXÐa­çÏBïä[ôý6wxæF„˜-3jCÏtöe— WT·`õðTýÝ,ÖëÔ´£œ¿®L¬ ÏÐ=ÔÉ øë݈(ÊÉO4 |Ó½hn¨DáÞìv÷¢àDûÝòlsÌü‰:þA5±½Ø&~‚ bS‘¢ŸG¾)Ać$mMB ÒgÑAÕÜ‹åü¦9†Cª_Ð|úh±ü]E ª›x—ˬ¶­f÷+rȲÊñµiÇ69‘Þ|†”ñDŽâüã=^³+AªñÞÀÝ‚:õ]t¯žÿÇ0ݨBQ¹€îGë}dòzÞº2ìÆpO¹‚O´ípÚÁå9|V¥ÂžÁ1nÂYÂø}vÛs‘ßÜ2f;špÇÍ'@Å•QA…æf„> iÔÁ"°[A±}‘¢ŸG¾)Ać$mM‚ rɇ€œ 'êZ´`°ÐU‡Ìwuâ™t²d×â}µhI;·XÌÐ8 UëcöçL$¬ã₱ò.„ãÆz+{‰#N †oü Œ g¡TÁ‰Z-Zm“Ê»X˜%ø–BÏ ïßߢh‡�àí¹-–~¸½B²‡ÖÓzÈÄ!½ƒWÖKô<]OÄšoâ€Ö>¡ÆóÓ›Yn_ ‚ ‚ ˆôCŠ~ù¦>6’´5%o>Œ·VãP­Ýv'Ün'ì–;P+ö c¿v¾ë{æ%ì-t„eD,Àõ°M@©ÑF\S¼‰°dUcìC4 O‚d½‰Ì\*k롪?å¾"ÔuNˆ°¿ |î|{í†øêÊD}’Á…Ûj~ útþ„šÒZ4ó,OŠž§>¸*ÔþОÓô*¶ÝÁ³{{Îfì0´PsÁ;ÍM˜lãÂg B7C‚ ‚ ˆôDŠ~ù¦>6’´5‰bÌKôé>D–l-«A–õ¡0áEfއìbù:Zììç¹ÀÍ£G°ŽÇhü!Kð8A§þW[úáaØ×öܳŽmê|c¼°kKP¤±`:4;h±W?lä…$:¾)ØÛ‚† X¨µ0t ñïøäǃaGdài.ýqÞÝS¢ç)ïÈ&£6âÃXs5Ž7»xlŸÝ–ýG”eq:52dú»^Dnæ^”év• ¢ØAA‘rHÑÏ#ß” âÃÇF’¶&¡Éx^`x"4x² ïô3ظ¬ ë &•ʰ[Òá]ÙNìÍ?€Üì3hì€Jþdû`ç¹bö·]~²½y8˜»'[{ñ_Ud²w¡¶&ܼy˜ƒUýitéÔb/4>‡e+£HÌ(ÚÏçA–Á~…¨TìC^ñû8t±Ó¼1JÏêÏB‘õ&oQÎèyºŽF 3‡g7c§Â�wð­ aœ0”îFFÖGÐ[ÿYm+ÏxŸÃ|ù<´vžåc B7C‚ ‚ ˆôDŠ~ù¦>6’´5 5HŸE åJÛeñjéábxû®ãhüº3ü»ù5eлo4G5°¾bÀ8¾G ÏöÐâÂ`Þråª;°:FàvÀa}�]õAdW·c+CHËv-ögìBÑU+< §S •åØ4CkçÛu+–˜sªîÀÎSä8zžÆÓ¨ÙƒRý@â5> T™oà€îiD§µ¤Â›0Ï9¸}%‚ ‚ Ò)úyä›D|øØHÒÖ$Ô 7+PfæONA}ÿ1,Ý·QûÞYè?€¶¬X@{è%ÌšëqÔß© ͵GQ©oÇoÚãóÔpŒâYhÛj÷þ66âÏF~˜—°Ýüù™2ÿw‘±Yeº4­àƒÕØ€*e JNÔAÛj /«J%›9«BÉÁ@M× ÌµeÎŒö艞§œFÍ%T߸®QchÁÃ÷jVLb°s®ZŽýÚþµ}õ?ŸB‘[€Ú®™à›âB7C‚ ‚ ˆôDŠ~ù¦>6’´5 5ÈÍ Ôø…zÙ}âökmȰ«T¡Ež‡%+Ô{V!!cW9ôC|ËYÄë`´Ÿç¹¿\Ì:0Î3¸ÂJ¹R¦ŠÊ P©.¡ZY€‚:åJ> eQm…/$kEVp }‚vp3ö´ ì~5@Ûò§ RÜ>„³žF0Ot'+ѰÒþ}y†#rü_g~ƒï¼Kèc"‚ ‚ Ò)úyä›D|øØHÒÖ$Ô 7-£ÆkcÌ—ÐlçJ‚V2W&á‰ÙÚuÕ8ßl ÙÖ(&<BD`Äë`,ÃÓßç‘ñŠe'ÞîáÕ*œƒ+WÊ+º†'Ó¡Å>s°]ýº!"Ì\vNKLŽ9x¬MhÐ=„}†O³ë|o¯ƒ\–ÙÞ"œ®­G}µÊnðÎz-7Æ‹‰§Ã!íß¹@Õ'¨ë¿sÝ ‚ ‚ Ò)úyä›D|øØHÒÖ$Ô Å Ô0Xt4ã“* ÚÝóðØ-è™xX8ôÀbã[ÊãËbJ:£CÌFþ�€ñ<N|ýCxÙÎ-û+¡5¶¡khšý­ÄX²jðaÔw1›æ8TžaŸñvèÛB[Üè…Qûã|¿ƒ¥^hrvbw…ÎÕs¾å+œâ™…´¹7ìúÓ¯–¡EŒ]¥P?°cFP°p}¸mAAé‡ý<òM ">|l$ikjâj&`ªü7 TM¸{£…»v#·ä"¾ùòv±û—‘ñäBÊxDÌ賃Q Sc=!Üàå ¼éib‚¸óàrùç¸k VV˜tÕ(ÈþæYžA)·Š˜ûszç«à/%ˆ?P³ŠÐyâóÀmV±ßµ%á@·›†_Løm(Õá3Ã-h+ ¡Pqï· ËÅWL9>›zLAAÄ–!E?|S‚ˆIÚš„ä’õN7¿¾JÿB¹ÐßUˆqèp€³ímAÕ ÚíN¸ÝOÑÙð)¾åÛuHÄŒ1;ù5?7¢u2" Ãe°­´ÏÖ³ŸÁ”P …=&ÛO¨Êßíÿ>¹!Ëúº¾—<‘Åý+ÔÚGkå]–nt6]@iM3†'({§üžùÏ¿vmd²¨º§¿’ ›{ãàJä>Á娧%Œ7_BoåÄØÜc"‚ ‚ ¶ )úyä›D|øØHÒÖ”¼A²‹Ù{´= -•aÇß-ÐÞs'(ð‹þ–ù; ù,*drëϨÓö³.0b¸„+|Ì"ftˆÙÁˆ+õò½|‰¹È“ÃŒ£çñ0¼\àÅn@Õ¾ShçñÍÂeû ë &•w±ÌÀñOD�‰†þp /„èÔpbÂí¸iü Ó\ËuÇï¸cqó<÷¯áÆÁÌcrr.b¾²ß“óš{(PCAA$Žý<òM ">|l$ikJÞ ×/ãÙQjÀ‹„"5\{äãþŒ &SË¢ Íårä£8/dòXy Õˆ—Ñ€ëÒ4zöú{þ™F·ê0Þmø³‰²g¶ç‘¢Á p=lƒÕÃ3`ãþ•Êókå]ì¨?§@–ì�46¾²8½æsv[ Ð~‡C@ rn>m\FÒ-TfA1‡32rùëü$ÈæAA±UHÑÏ#ß” âÃÇF’¶¦ä Ò·ñ ¨ï?^+—é¾'(×õZo—¹`Ä™šFüª>ŒÁ�ã±£¾Râ#Á’ Þˆ“Ñá/ùñ²d‘ ùÌðŒ­€ ®œh€>L_¥*E!*µ´v &.„ë6B™{0¤¼‹ʳhhéOð» %B#¨²Ùy‡Q|è2:§ùk’Ÿ§qf^åWj"Î!7Ú`à?[aS‰ ‚ ‚Ø2¤èç‘oJñác#I[“Éø|_v{ð·V9Ø^/Ãëþ mÆG°…µ™fY- ‚8£B÷Ý«ú-Üxû„€Ø1ñÁëXO�xuìDVy†7Ž´0®&ÔÔ}C› 3Ì<ŽN4ïÃ:.à—û¡Ý¿;Š®£—;çì~*Uݘ·]ÇÚ~^edÜqlËн[½KHi—p6õ˜‚ ‚ ˆ-CŠ~ù¦>6’´5‰c |3v´ë¯úKeÔÚFè4j\m\ ñ2:€YXÕU¸j‹Ð+a¦à¢a² ïÌXxÕóVœWÞ„“ohw´­‘YBXTÕ~Ý.X5Ùz›&ÿNÌù½¢kx2½Æý Êw½…ü•Pø¦)žç,R#ȨéĘù ÔÖˆà^|6÷ƱO߸ø½-b¾²ózè.Œ¤QCAAð@Š~ù¦>6’´5‰aÌø#œ—¿ Y OŸ‚";ÅÅGp±s‚]ên!"ft`Ù Óå2ÈåÊðÝN ÒÈ·ôi-€Äÿð±YʯarÌ&~î|³˜™‹ {ø0Ñó^Œ§†ªB”%Ð¥Ëgù%úa0̺êöCv@ û"§CT-@«Å §¡9Õ&LqÁ§•ÌY4}ü¶%Æ<]—à<‰þ.¸A5AA?¤èç‘oJñác#I[SòÉ ô"cG1®örí ¹6ÖjXæ{¡ùà;Ø63:‚Çy~qã0ýETæñàï$ wÎÞǾÚÛáeTu8ñž ­ÜÏö‰ˆ ¡,ÃÓý Þ½ËìÆG̼0âXi=~ø¦rÙÛ¨2=Ç´½ ªÂcKƒ0ný&=Vèa²Oñ>¶Í½q¼‚Sš›ú4¤QCAAðGŠ~ù¦>6’´5%oó°i C±"öËj¾D×X;j `å a tà©Q–BY­ÅC>™%Qˆ—ÑÁ•ÁxŸöb`^Œ¡%Œýt û*¿G÷‹Ò§‘NhÿŸfØý?wà»Æ^¼ ~âõ±�·ù:ª”ÇPs³ÆWHê…Kˆ¶Hlöƒñ<ÇðäædÖƒn†AAé‰ý<òM ">|l$ikJÞ ¹ŽM”åp&\Æ… E&»Ý7Q é‰ÐüØfü.*vÉüûå»”ÐÙ“)='£pãžþ!ž­UücqoœïÖ¸R¢Ø-ÍÃÆ[Ñ%J`Húpçcó`¿Û›c´BŸDGã¸7é+ØÜc"‚ ‚ ¶ )úyä›D|øØHÒÖ$ŽA2ð[ÑÒøŽÅiXõ× 3Ùo ‚Ï¢Bæî“Ðÿ=ãŸõGœ,Uã~g ´êËPkïÁ¾%™+¨È€J&é<³~|pß¾ íïÝkeO–4ÕGMSGÈ{˜Hôú¦`7Ùs¤‚JýZ,#ð 0xa{ÙáɃ«Ð®[â Î<]õ¾[vÈCkŸþž¸pÛ'‚ ‚ Ò)úyä›D|øØHÒÖ”¼A.ÃÓßç‘Z4ËN<¼ÝÃ.ñùÁ8õ8tHd`fáxx'rßðïgFf. åÈ*ÿeÓ²ÖÇ…Ûj~_ ¢°£»ªò:4ñ-Ïb0?<Œ">ĸô8\jÀ ¾ÇÆŒ¢ý|d;±·ðjU—P­<„2-{þùnËm„2÷`„ÏAäf óì2ûµ6áÈîPuO?L8ñ|Æ fÉŽ›_u€ûԒ݈¯xêúlîÃce¾Ö7…hÓü�MåAÈ• xà ®OAADâHÑÏ#ß” âÃÇF’¶¦ä ÒÇ®íÏãÄ×?„,rÙqKÅþJhmèšN¼Ôˆ™@çÅJ¨ïÞF™ã>d}PöA«¿Äh æš4¿î¬†‘]¬áÒG©ÁÉ?£ÆXå…úµîQªK8§x² l<mɦANF6*ŒƒkY4Ì4,—?…ÞÉSåÆý3*•çCöke\‡Éµ�f¼—Ëk O¨mC­×QWù îÃÞ¬2¨oÞÅ£§QÌu– þV"lîc#®©èý™ÿª·Bm ¾!.t3$‚ ‚HO¤èç‘oJñác#I[Sò™€ÞŠ,åMO‘XÏ %Ìv}†lös²¬rhÌNx®õE8t7š®¡ò0×U*Ñe>§Qs UeP”T VÛÛ´îE\ÖʼnðÖÜõg¡Èz9š^ž¤¸sVÑAªʪ+h±s³øÔ(ap¯„Ãø<.˜Ueü[K{GáÕØ€*e JNÔAÛjô€2¶0|¨_ÃlíÀU)²óßG‰âNT­ihò*n½^–1kþ»e fñçõAAñ:¢ŸG¾)Ać$mMɤîŸÑ:üàæÊ`'(Ÿ­g?ƒi6^ÝóB½ïMì*Qá†ú"îöcÆ·ϰ=?B­ºÎ#˜Áxê —íB®â4jU*ÔW€}*tNóÍÈáºYå£0´$¨¸�òÒïÐÇ[3gr1¡øKŸ£üæÓ@FÍR?´ï¼™üst{xþ‘•2ªL9•ÀeúT+ PP×iÞ±šX :Ülí€Õö ª?ÌŸE ¥¿eú2¼3#pL²ßT|6ÿÆÁÀ7cG»þj §aç´eî φû&ºAA¤'RôóÈ7%ˆøð±‘¤­)yƒd¸/_b.rÏŒ£ç1'@»Ý€ª}§*WZ²ª±gG9 /ÙmÌÁe¾Š²ü·±g— ¾+æå~hóJ¡y`°hÓâCÝ�ø…0^¢ÿÿßÞýÿ4u÷ÿãçè/ûÑ–˜Xre1üàB®Àš0Bt¤0îSÈôã—EP#èg‚ËÅñíV²ke/×lë[¶ºq^Õ œ Vø¯Ñk–@ÊRFÅ:ùΫð)£åÜ?=¥h)_ì)­¸ß’g†¬­=§§±½çñ|<l®…÷‘FÐvé|”S©Z½ -«E.7n2Ádö?Æ$Íw`q…7~½Y»»s¿Â£UG“°Uû³WéãÍÂãêÆCó þy™ÛÒ‘“gŽìÁ®ò°Ú0æ‰ìUˆï?<ö«È—§©R‘sò,Žff GýAt}~"Ä ‰ˆˆˆ6¦õø9ŸM‰V¦ä=²êwSüߣh`OÕ¯KŒ?^Lz&¢ ¥mÓ¯n,¹ǵ⯔5>+´GLsU=/ÉAM5²‹ÂJ‰¥ÆsÛa®È»Z«Â­Oþg1xç2Þ' Þ±yyq±5¼N„¼/b²]ÉgÕáH Ú%Ô$lºÃÊ·Q…𝰒<nü{Kõ¸¦ÿ ¥G¢@Û†×u‰ëu*õC,؆¤Ô3¨ïŸôŸ7,B)D—ýÆrTYWqÜ+à?†DDDDÓzüœÇϦD+SòYõ»)ñÞÓp5éqñ›ö­6<Vœ;ŒÃr©­Gp‚•^XÍß¡4+¥ÍÃÁÛDj™ΪLT(W<°ësôVª;åm\ò¶*¹ïN't~ »Ò-Q±Ü®4õ+.]Æ-kï\å°Âl(EVpêSÔ^VXùêÂC…“”âzÊ!RòÛÈ6<¾ŽóAÍ &›/âТà*6âzLDDDD´fÖãç<~6%Z™’÷ȪßMý )¹;q­$Éþã”Unl\hˆf;Ëã¹-¿ÁæšRÒȦ`Óe#Iìáj>GÛ‹&”gUÁª°<'¶Û•|pÛ~DIæ¶¹óå_ªÔ#0t)orKq½N%Žý=,¨9ˆ“ÚJ¦gC°Œ~ký½GDDD´Y­ÇÏyülJ´2%ï‘U¿›bú†œí‡ù‹*­cÁ_$ /ÜN,–ô y¢ $x=ãZ°õiáhù5]‘TŠø«_DaÚy˜Gäpe¾Zg+²t¯€..Û•¼pÚ~ƒÅúCö‘‰§øþÃá=\÷qéx…ÿÚ}!_-°éþ¿óoÈ­zEåÈðC"""¢i=~ÎãgS¢•)y¬úÝÓ7d` I2ÔqÚ*¢Ü €ýf͸®8LšÁ3±oùÏ—|Ζ^*¼SÞŠ©à=V&Á;hE}Í}8fFa5~ƒÙޱhÆ`Çr»Ò`Œ=a!T'Lúû\Ã’ùüÆNõ À-ùÁžÍ9·‰O²7rLDDDDôÆ­ÇÏyülJ´2%ï‘U¿›bú†ŒEPÓ À Sq ¾4ÖBÅ—ë'á vÿL Ñ;6V|9 RB÷˯¯¶>µ~âèî>|õ;ûP\¿Ü/-†Û•\"ÔÁÇX°Taìÿ+x#%¦1h½Žª’B¨ó¡\ßÛ‚-Z‘‘ŸÃF³‰ˆˆˆˆÖçç<~6%Z™’÷ȪßM1}CÊS–Þ}šºgÁ_Da¹ `~d·"Ë4�YªÔã¨í F>6Í58$ãh+ß…=ŠG}ÇØ|¸åìFë­ëÿuVGGtá–ëghý÷{<YÚÑZ{euèu+måõ?µ d¨R®>‰rA@e釨™% uTÙcɯÕF³‰ˆˆˆˆÖçç<~6%Z™’÷ȪßM ÷†tÕ£B{ í/ƒ‚‡0W‚Ü¢«èR8qCÃaÛ‰¼-4ª ÞáFœ>c~íxh¹ÁlWõIœúáìN¹Ê§Ö-Ô)ÉkÔIJ fj�Ž?Ã1©ÆÇ”e*¤è ‡TÉãÑõ8¢ðœ%Üuñ˜ˆˆˆˆh}~ÎãgS¢•)y¬úÝ”poHɯ/4X‘àùý侕 -²î/¯ü…ñ±ÅS™^އ–ÆaÏ`gaƒÿoEÞ§0Wì{5A*i R £ d¼cv4‹zhZýMX¢š å·¨ Æ‚ö[Ÿ¡(š*× kÎAð?§ùUyVTUç_®B:b N¶š'5ÕÈ,жˆÅ÷:uáöµ‡˜xÍÉŸí¹‰ëë#½H%Ü{ˆˆˆˆbb=~ÎãgS¢•)y¬úÝ”øoHy"O ¾ùê6z=QÅËs?„¥F•eDA@2?AÊkÏ ¢}JÒà}œËxIªT䜼�¡ò,4ÙG¡¦¯L,«`\&hÒ÷A­V¿ZšÓ¨ªïŽb¤ù8,—Š!ÜzG ×P/¬æïPš•‰Òæáàm"ßëôõ[äæ– ÛJîb$F—¡ü˜DDDD´ñ¬ÇÏyülJ´2%ï‘U¿›â÷†ôÂ㉲­®wö¦¡“+:´zˆ-½Q„+ðNÃÍt%Ì`ÌÞ£î2¡ zñQUÓLÁ¦ËFÒ¶aêŸ|ÌHîãÒ‰ŸÐ¯ô©Å² Æý¶§ÓÁ?¬žäîĵ’ìWUHª4:¿žñý‡Ã S¹€ïCNË«V÷1ö…ÚÐßß´b(F×b|‰ˆˆˆˆÖÊzüœÇϦD+SòYõ»)6oÈYxÆ^„Liò¯§ 8§¹†~¥ˆôMçvC•´ÛsŽ¡X½»ó>Àþ‹-æ ²äÁØóçå_O.Bc|¢hë<Í5ÆM‚j{.NçaÇîÈÛIqcÜ—AZ Ùä…Ûõ „¬Ë°(Í·–¨‚ÉËܽò@D³¡Q$m“ÇT;ZQgºëàj›ù*¤ô y”W ùÅ÷ŽI 8—¨ªò_‹ §ÊPçRÚÄ:2üLjˆˆhcZŸóøÙ”heJÞ#«~7­þ ù*ÀkáÚ‚TÍ—0;&"þr>k×cWR r«­pK^¸ÄR–?aÓÞî Þ*B/CŸ%ž›* š/Í‘WÄÈqwmÁ[¹WÐ)ßÇ%B#´cÊvê»7l}zÿ8®ý1WQãó÷ûª·‘!<„{î&‘[¢ FšhÅ¥5°+Ü›%9 Ø›ûÎ@rý E)ï óh14ÙçaQH£ÛæZtnf͸n þ)2òk?.Ü©ë@x%yãZaÚêÆÍ¯ ¾ÇDDDDDke=~ÎãgS¢•)y¬úÝ´ú7¤výØY~=dR“=4àè^ òÏö¡ˆ«W|6Ò’4]ò=‚AMÛ4—Bkœ»Q¤|Ýп¿åum¯ž—=4|Œ½ÂMÿÏ`аRÄ× ]Ú¶W_ÚAM+^4Š,­Ê7@Í5nºV‹\‘ãq ù¦®h¶dÍç©rõÞFEF–âsæµ|Ž|c$im» ÊÖÃ>3˜)œ0—àKcí‚-E? ±«ø¿`jxˆÞ±ÈªUâûÇ =jRŠ`Œd|{äÇ'"""¢g=~ÎãgS¢•)y¬úÝ‹7¤ä2!Ûÿ8ÿ×—?ÃîöArÛqÿ–ÃVåÕ!^ÄÂ}(5?‡7ÔhÏQ•õºwîõÁmo@M˳=ÑTtÈT¿x i¥fŒÈaÊüHlU.t]ŠÒO‚wðLU§¡QÄÑr=l¡c¬Xf<·*£Rñ¶,é™ Tâû¯‹‘¡z%æ§µ7BÈùF§Ò-@¯oÒ«J=ŽÚ‚ù¶ñã„©¬ßÕ¾ “äejx�[´“¸"ßc""""¢µ²?çñ³)ÑÊ”¼GVýnZýr½†<¨TÛ‘¹/;ŽßÄ“_öÉ;µÿATµÞ°Ö×Â옄ÛZ‹*Ã=Ø#¬¼XÈ…ÛÆ{ø#´Ò$l ´ü€š®H«N¦1hý5ffÜV«j`¶D®ÌM}ÚŠät5ŠË+ç¦>íÌEEëò``‰ñÜK7\¥²dÓp5_A‰æ#”]ë„[rÃÙ!?^'œŠ';qCÃaUB^‹š@e’ïp#NŸ1ãuC¯ãûÇ2=jâŒÿmLëñs?›­LÉ{dÕï¦Õ¿!å æöËÛeàF—®UV·ÿ;øcòÿ «ÒïöKNš†ó^#¬n¥ÁC$c—Ux§¼5‚@i©Ðg�¿›jp{PiT#oËG®Î‚ÑÐc¦ÕGjЫ¸á^ß›Ž"ñÆÇW¤HC]xè˜ôÿ0»x; ë0üË‘_«x“ÜàaÝ·Ð ´ú:´õŽFWá¡7qLDDDDôæ­ÇÏyülJ´2%ï‘U¿›bñ†”&špþPî´[Ð^W½Å?àá/_£0£JyP#š>ZcÈQ¬ ÎA±^DCÛŒEÜÇʼnëZ„Vš´þˆ²‚ ¨mmõ»ˆzè,úlCد°cVí'Á><!f:¡ËŽpꓯ ¦,!¡Qøê„Iƒ‰˜ßÌs?„¥F•åõÕ,±¸N—'Á뺲Œ·ýÏlÏ<�µzÒSþÕ(ñHÅ÷˜ˆˆˆˆh­¬ÇÏyülJ´2%ï‘U¿›Vÿ†”C‡÷³p½‹coXZ¦ßÊ«µ©Eµè‰äÛ³}Žð­D3pG®8aªÐ¨ù€§Ýü Žçž€¡k\ácI˜²|"á&¬ŽÈ•9ë]J÷aGiÓk·x-’—:?!ë­"ˆÏâ3ZúM“'n¤Ôî„Z{{á;ï Ú„RzW3š|yq=&""""Z3ëñs?›­LÉ{dÕï¦Õ¿!%xì58~î_°‡Vt ¹£lŒÛ}ƒ+ì¾nXü_˜ç*Pf0ÜpgÌCsÿkEòÔ¡£¸ æWåi¨S·"MשpR“¯7ìž.ès߉â±ü¤qØ®Af²*ð¨Â«èŠ´Œ÷7è…भ_t(Ø/àç¶ù*¡v´NbOiz÷•ñ“{™ªP¢ÉGþÑ ÿëa[¸Ekµ¼Óð(|¼¸þÃ!‡^û p,ñ”^õÓ‰=þcHDDD´1­ÇÏyülJ´2%ï‘U¿›¢CNÁQW‰’ª_àšƒýa†ü_¾%Ï z¬¢Ÿ–ãÀØdx¸àÅPÇopxüïî†X’ƒÂºgÁÿ·'DM&rÔj¨_®Bÿs¾˜NµjÞ4ó-zŽ I‚×ý6‹ÖžA(jåƒ7v,&L·¡<9Oy5ˆôMçvC•œuñ§(Õd!«¢£Ñ¼ ’cÏC<ÿzÚpãEA^\ÿá0~¬‡-¼JËëDƒÿZ+Ž(TŽÿmLëñs?›­LÉ{dÕ令ßf¿½¿êð]i.Rü_ìó+uø<ÿÝÀc&©2£›`´¢Y¸Û?CÖž/`™ˆ$hG·Íå¿W¢ñað¶ˆÆ?®ßë¡¿íR|ΤÁ[8±ÿ"n´Ûáô?ŽÓÞŽ[Ú¤$å@o÷o™Y»»s¿Â£ÑÐ-S“°UŸ>ô‘¯‡ð¥JƒæK3fò}âLJ‰ö*Èÿ_k!Š?Áðå9h2¶!¥Àá6;åâ{LDDDD´VÖãç<~6%Z™’÷ȪßMѾ!½É»ô°ÏNÃaø�IêÑÙpu÷awºàêmBÕÇWýÿ?x‡53ƒ1{ŒºË„*èŇñã…KÔÎ}øRí7¢_q.àƒ»ë* S·¼z,UZTp}VŽ,Úê3 ›î0‹;øçùº¡/ÊëÚ^öõ‘×CÃÇØ+Üôÿüö¡ÈÂù˜âk£]õ¨*ÎÅv•ÿuؾGµÑm‹Pü‰ˆˆˆˆÖÂzüœÇϦD+SòYõ»)Ú7¤ÏªÅ»j®@ÿ˜t$©¯ÁZW½=8èÚÛ±øŠò©O1åÅ`S2_¼sq²8;v@ÞþKhÑ‹¢ßJ ¨¹^ ýƒÉS–‡¸%|Œ²ºÅáŠ4fC£(¢Ötÿéj‡ÙP‰²ªë°FÑwêW\*ºŒ[ÖÞ¹*‡Õÿx¥ÈÚñ š'”¦n>¸í ¨iy¶ JhÖÙŒëÖ±àŸ"ß8"«¼’žÛСxûòäcâââââââââÚ˜k½Y길¸®H­YPƒ‰&”î“+j悚dÁ‚׿P”šõdnOF†ö7(Ûx«f¶³ÝÐïÚ‚·r¯ S®Œp‰Ð혲]Á‡únå[¢bÔoÅÿ@˜êëßa‡$98P â™Ò ÆaÀÞàv%I~ RÞAæÑbh²ÏÃ<¢4òÁmû%™Û^^ŒªÔ#QL¶’¹pÛx„œ¯ð5Ðòjº^ßã'êë4"N˜Žip¶2¤éô«²ø�öè:•O2#"""""¢Mcí‚xÐ/–£Ì(B›³#8îZ® ¸ ½ö3|Qz£™–Ëf¶¾NèÒ¶A=ÿ<AM+^4Š,­Õÿlˆa¿•@E© š •!AÀ§8«~ª4l ³¯åsäû I#h«ØU¶öy{U©òíJó¼pÚ~ƒÅúCžh÷¯9!ª“Ÿ¯K…wÊ[¬ÃZ–|Ûøñ?Ïütdæ…6^fáXóí|DDDDDD”¨Ö0¨ñ“¦à²Ü†É¼¸âEêÂC‡òiH1mf“Ž!­ÔŒùù¹D¨åp@• ]W¬ú­ü?x¿¼ÎÿsäýVAÿy¥çä…„�™Q}•+Ò3>*¨Ä÷_#CõJÌO1jo„óŒN…õî'°= ?Ži8ï5ÂêVšP8q]kÀƒóeiýePÛ²íË>ôÚŠ¤ø5CøµÍ¡,¸#""""""ZÂÚ5qÓf¶Ó´þŒ³3n+ŒU50ÛG"ܪ4×ãfçÎËhwÏ,î·"M¢O—„¤Bk𑚅»»Oä>L´}[ÛŦáj¾‚ÍG(»Ö ·ä†³CA:áTÚ ×uÅG«`Eˆ/W uŠõ"Úž`,âmhnô9Â'ÍÀi<¬ÀŠ\ü¯ÓYx\¿¡áª‚pº« °D;bžˆˆˆˆˆˆ6­ ÔĶ™íjM£×Õ–Ó0‡þÝÞØÍzœÍI…*)ùÕÖªˆ-5ž{�½æO‘ñ®vm0ÏW-»¶ µ¨6‘ÕN˜ŠâBHŸ¡ò4Ô©[‘¦ëTTÁ"ÿÝñ#OÍúù)*ÿß“2Wé”—‰íoíFÙݧ†zDDDDDDD1¨‘¿4Ǭ™íêIîè >@©ø®',õÕ(<·mÈ,þ Dn»‚·Ž”¼õi©ñÜo##š^<±äj„¾ÁNÈ £K!ºäßÎ`¸á"Θ‡æþ׊œ5™È íñ¢.DIÕMØVúÈç'n$Œû·!µX„}l~«˜ï˜ bÉÉ(¶ÜÑf•A4Ûµ Ш‹Pª¿¯ ©îæ{¤,hfûÿEÙ#%Fä š¦ îBr’ )û«Ðül5Ûb¼KŒçö/› žµÞkã?ïc“ᯟC¿Áár’»bI ëžÿßJä±×`ÄÞ£î2¡ zñAT×G\ƒŸÚwó`p,d¼-4Ñ4Å&"""""¢M)‚/Š‘¨‘— )ùWa6qˆiÙ Æì-õUsAAýàŠzŠ‘î~ êõ8ZX†êz úÇûaëþÿ•ù:êðƒÕ9·ÕÉé„óå¶§àú½úÛ®î‹2 wûgÈÚó,‘„-s=~2TIPmÏÅÉâ<ìØ}�yû/¡u4*jà†Ýp—ÚFBν¯»u§>‚Ö:øÍlÏMÔ&""""""ZJ5ò¶˜ l;z ¿Í@òü «ñ4 >ÿ­õßB+‡#v¸#MbÚ#%,((¯De©Ù…ß¡k5U?2ï(z[ET˸âÂk¼ä1½ZoˆxMRã}«© %š|ä­€¾añ$®7n¶ú][ðVîtÊç;0½S¶+øPß %q™|nâ&ø<Ã_‹ÅK…m%w1²Æ§•ˆˆˆˆˆˆW5¡ßX„ýƾ@5‚ä~‚{_Gºjî‹mrú^ä¤g ¨ÎY¥H,{¤ø:¡KÛ‚mÇLèYEãƒÛòOœ0:bS¹"À9Ùr¯Å�!0ÞûWü¢ûû…¡íåÖ§_`8–ÒºžÈC­yÒs4Û UrÔÅ Ÿ¢T“…¬˜õ»‘àõL‡½&œÿm¯š-‚šV¼hþYZk5–¯áS8¦»Rŵ̺iÅPLÎ)mD Ôø¿Æ¶àbQnÝÑA“ºIª4|xò v»…AùKíd3Ê×apîæ+‹e”ð @æuÃÕ, K°D<L¢ÃtÖð-J/×�~7Õàö`„†Ï‹¹"—Ðàiž„é¶ $ï1 WáάY»»s¿Â£ÑùF¸²IتÏGÕWòŒáù‚ã|‚†s§aìW:8܃~ñÒJÍ‘|¾ZJ• ]—²Qëñ jüÇì~оaÅQÑ ÔÈU%m»üµ©šj4;'!ª<`ù7¨ýú¿b*xóèE×#åý¢ŸðG ¢Æ»>*U„öѹ›¬HTÒçhùµ b¿Â깯O©ÿܘÐnï‡ËÕ»å&´êw‘´K»Â ÆgÕáÈ¢íW“°éC°( D¤Áû8—ñöÇ)Oß*—æ' +~¦1hý5ffÜV«j`¶(®Î‘ÿþ¸ñ_¿¶FDÑ„F›Ü§f®¯Qé6,®Õ4&"""""¢Í&‚ SÖ*ìT½‹üϯ@{îKÜ’¿ˆKè³w õj„êŸcŽùKw®™~è$Áãx€›–ð­UËqâס®]Þštº‚C~n nUò¯ÖïplÏyÔõN(ÿ2/£Ëp©-bóAH”cȧ~Å¥¢Ë¸eí«€qXa6”"kÇ'hžP–úøìz¼¿³<xÌ󫆣þcoxèÿ¹CkÐû&®A †`.ÎA±hØwž®¯¥zéš3(Î/E+´R‰ˆˆˆˆˆˆhy ÔLª}ÿe\ÉÓfÝd¦¾ƒ”ˆ¶E"Ê)rEÇuT•B åúFØlZ‰Ÿ×7œx-4"\ßÏG[ù.ì1ô(jŒûÊ,<£À&‡!1äÑ= ä¾;¶Q’¹mõ¡Ï Žì,Æÿn—+}æ·>õ¡U_Ù?·|+¢ë¯7ÖÄ5¨‘Çsç_…C>$ïó·A•­‡}FÞŽ&àCŽç&"""""¢%@P3ƒgbRÊÛðªŠî'?¡¸*º &v=Ræ§>¥ ]}å‚€ÊÒ±3KP<’ '>DùÃîô?'§–[Z¨SÞÆ.…ŒæHð>‚©ê44êƒ8Z®GƒmxuÁ–wNÛo« }^;uK^é(o ÞáÍÿÞ¸‘§>}¨ƒuj ÏêNb[Ò{(1¿€$¹a×£â +­_ ÔøyÐT}ßX†C*8&1à”û}(Ó)òðÝÐ= @$ÌØô8EŒä0 ª—Ïi R ¯F5ê{î8·"9]âòJ•g¡Ù™‹ŠÖ!åU0î'°= o< ç½FXÝ Òõ3´úû!ÛžÚÑZ{e?¢õåïÁ>I“b ^ïkÎäƒ×÷ú#–Ïwü¼ãž”ô62ÊnÃ5Õ‡»—N _}Fûê»+ÑæAM Å´Gм¥åˆ)l»’ÔT#;ÚmY’£}¶Àó²ö £8U‘ÉMó‘«³`4ôXf:Q}¤FñÔ'¸n øhŒ FI×@Pç X/¢¡í Æ"=gSpü¶5LêƒñÀ1ˆÏ”öjqâ_FKH¥Õb’³×"hxÿëÔ ·ÓÿºZû"?WDDDDDDDa6\P#7ٵ׋hYÐÀ5ÊêŒÃr©­Gp¶PõÂjþ¥Y™(mÞF‰¹ÆÄFÝeBôâ8¢j’,÷õù$l<·ßL'tÙ—aQš ½v»Ò¤Õ¢w&‚�B}4çüÇ'¼\•gÕHUeCgSZY℘ŸŽÌ<5Ôê¥VrÒ³"šL%Q¢ÛxAÍ`Œ=!ýi—²f¶’»×J²‘<Z¨ÒPhèP8bZöj{Œj{.NçaÇîÈÛIy¿H˜²|"á&¬¹Aï�Ö»0”îÃŽÒ&Lo1W#ô ᓬäÑâ¥Á0hà qÆ<4÷¿Vâ2A“¾oa ¢9ªúî(Ι¢:é9y ïå:€Ìí»Ôц±ñ‚š¸4³ nk±t gÈ£¼ŒLîw³k Þʽ‚N¹ŠÆÿ<5B;¦lWða4Í„¥qØ®Af²*xLÑ÷»‘›M†ßÏ‹¡ŽßàðHÜÝKrPX÷,øÿV°d¿›h9!~( mz¹3>§ñTB5Ò´Ë>}""""""¢0 Ôø0x[Dãa•/¿×CÛ¥<‰i3[nïáÐçåÀï¦ÜT¸¿È× ]Ú6¨çG5‚šV¼hþYZ«ÿ,DC‚×ý40ž;ú~7¯3 wûgÈÚó,>KïìM?B'o}Òê!¶ôFQM#[ïA×ÿ2ŸGE›ò¦ØDDDDDD´9%@P#™Õ'|½U â™Òo¸1nf+ª“—xnÉØot(üòíA¿x i¥fŒÈÍfç+T¹Ðu½>hX(ÆáV,IÏÑtn7TI[°=çŠÕ;±;ïì¿Ø‚QÅOlÍ¥èl“Á?‡ñÿ] Ç>‚ÁñúÐM~ÝâÇ »ñ$2^V7…­”hïÚÙd˜ˆˆˆˆˆˆ^+1‚ÓgÐÞ‘'2+^Úïà»ãjEÓ &ÆÍl¯k xð²G~nõŠ*P×;E 2AëϨ1;0ã¶ÂXU³}Ä”Z>ÜRí7¢?š< FU0³v=v%¥ ·Úê¿¿ü<K!Xþ„Mwz»'x«HÍbÂ|Ë×Ã:¾M¢¿ád¤UÁA¿!ùÜÄ×!ù=h´5!S³äõôÅ9P òïëÑæTzüDDDDDD´Ù$@PãÿÎíõ†mýqãw½o¥é`Sº'(¦ÍlÝès …2òv›Ã(û×°rÅ ×õjè´¿ ,-¨-;Œ²ºåÇÃ*ŸM‡´$M° q0¨i{‚æòBh­ËTƬd¦Æ‚wç0 _Fˆ×¾@™f’“¶£PtDtÅ5¨‘+j çqiÑ'ë>EU4ÇMDDDDDD›RB5‹MÃÕ\ƒ¯ž@q BŒ›ÙšŠâBHuŽPyêÔ­HÓuFÙW&$LõõáϰErq Šíb1­‚ñ: îC©ù9¼!•?ª¬¯ÐeE“·ä•¼e¦È÷ø5.ܾvO†&W ïf{n¢Æªx&m" ÔHðŽÙÑd¬„!Z½ -Žh¶Ų™­&9¡Õ9yYÈ(ø6ºéJ1ã…ËTÍ…ÊW’ð)Ϊ߃*Š*¤˜WÁx_ÀZ_ ³cnk-ª ÷`SÚH6Žn›+8Ë ·«V˯hºfÂC…#ÍãÔ,×Ë(|©°­ä.F¢¾°‰ˆˆˆˆˆh£Kˆ F¼so#I•Šœ“' Þ±yyq±5|ÛQbÚÌ64(’FÐvé< v… €ý÷³5š ŠwaóAr÷¢¥î­/]šcHÏÉ Ùâ•Mɨ·+?gq¨‚‰%‚2urÒw£´y˜íƒxð=dñºW#×éòœ0• ø~Aµº±¿ø+Ô†þþ¦C jˆˆˆˆˆˆh Ôx`×ç é­<TwÊ!ƒüå\ ËT't~ û‚”äõbÛÌv©ñÜv˜+²ð®Ò‘ÚÒcö„îÑ0¼’uE©HÎ<Œ³špÊüBa¸2 ww7ž*<7+ŠYL,-±õ,¸¾0÷cVzŽæK'Pbì~í¹ø5“p.1‚[žJuª u®µ>DDDDDD´^$@P3›.Ij®ÀŸå æs´½hByV¬kºg™--ªLT(­ö‘'åá”|˜hûv¨@oŸ ŒéÖ–(ªjb¸]Lš€ã^ ´Â•¹Šiöû÷aŒU¯Ÿh-€Daõ×éJ\¸S×ð³%yãZaÔ¢3ø""""""¢•%@P#ÁÛ/¢0í<Ì#råÁ|8²YºåÍ„cºg‰ñÜ–ß`sM)¤~ˆ}áûjglŶ’;x1jÇ!Œ}Š/–ÛÅf{ Ø£Ú‚í™ÙHßq OZ ø[µ³ Ö)…¶d3g7z¬}Ê_Ë%+šð»©·•E[ñ j– ôä•Rc¯Ò±ðDDDDDD´Y%@P#“à´¢¾æ>3£°¿‚ÁlǘWq2gUÛx&Ñaºk x§óiHH}P8FW3ªKŠ )û 6÷ ÜÎÎ@øÓát+ Wb¼]LjöËÕ><]Wp¨êþÂ4†SÊ«–®Þ‡ôŸ yb³ýµ8¸-Bûhð+Y.�IÆ~£CÑ9‹Íuº'Leåø®6¤™DêѦ•�AÍ2ýVfûqïzÇk›ÄÆž!=$XjmCØÅp ^÷ðÂàç{0ÞžÛô¹Ønƒ4Œæó' ½ó–öë(ß{Ƈw¡/Ì‹"¨¹b͹E=eá ÌÎiHƒM¸TTcD͘—¨hj¯‡PTº^eÛ¼ä×-~b·E‹ˆˆˆˆˆˆ6·j¼p™Îáè—ß/¨F ÞU ½©m½£Qôp‰–½uír0pº‚C~n}´~‡c{Î+ äǵÿp©ªðÐ'9Š&±Ý.æ³jñî‚ç$/R ŒèQ?xžÃ9«WË>GøV®8‡eò1Å—ÿ5 é$èjÐ`ÀšÍ""""""¢u'1‚š`™e—* Eµý_Ñß >¯o.�kæ«V棭|özŽí~ù±’ÿŽc†{h­±<‚}(š¦½1Ü.æ±ÁpüSÔÙBª}†áŽæ±›`lì yyu¤¿AÅ·ÄÔ§ÊÓP§nEš®SÑÔ-ù:Š ûU䧨‚=ƒÎâhfrÔ Pß7Ã""""""ŠPb57jÐ0Ć$^Nÿ扢‘X’ÿï=ñ!Êoüv§ÿqœvXni¡Ny»ôÝÊ‚LÀª-Aµ-l+‘4ç€ÒiT> ÞÑøGè1ú×ïõÐßvÍ…L Iî~XÌÿ ½V€ ýõÑVƒ¸D¨CC¶ù¥:cÿ_ÁEJÞÒ•‰œÐ~7yYÈ(ø]neû»V®@n]° I©gPß?é?ÿòö¹Rˆ.7ú娲¾ù |DDDDDD´>%@P#Á;>ŽÉðP@DÇCyRn»ˆ’'P7Á—ó˜r€ÑCaT/k R ¯* äž;æK…ÈÈÐ,¬¹pÅ&¥[Ÿ¼ËV!©öѯ8zަs»ýǸÛsN \ø¥šýÑUƒ¸~†V?¤bÈ‚ö[Ÿ¡¨¬½JÏÆÑms- Ĥ´]:CD=n^‘ÏMܪ¥ÞF¶áq0$›jf0Ù|‡8ž›ˆˆˆˆˆˆ"”�AÍ댢]8€=U¿b"’Ð`QPÐŽÖÚ (ˆ*(’<í³ÏÚ3eß‘a4—îFzN^È4$yBh Þ&R^¸®WCÿ =ä8[P[veu=ŠÃŸM‡´¤8fzòêØ¤QX.}¢<Üš€ãϰê(©ÆÇ >Sºym©ñÜv˜+²ð®Öš8[ŸäÊ«c j⤶…éÙ,ãß½Î:jŠeP ÀÖh‚(Þ…mÌÉÝ‹–ºh´¾ˆ¢¹±ÏãNôLE•ò„‘0Õׇ?ÃJrq @ij¨‚ D×üQÉÓ©œh !XnÛYbêSåY5RUÙÐÙ¦‚7ŠÔ2ã¹U™¨h o2¼2ù~ñã?_®û¸t¼ÆÀµ1?9ìoÈ­zˆÑX¼äDDDDDD´)$HP#7Æ}SÕihÔq´\Ûpaˆ_,ƒé1 {B÷Èÿ\$'êŠR‘œyg5à”ù…¢  ÀëÆÐ‚ê…k åÔtEÒ¯Æ —© š •!Çù)Ϊ߃*M›Ò¡ÀÖ§(ºöx®¢Æ× ýûoC•qínexüO šô} ª†ò2w£ ª¦ºKŒç¶ü›kJñ¹oP䀳gÀœ>¸6ØœÑ]ÃDDDDDD´i%DP# ÞǹŒ­HNW£¸¼BåYhvæ*®šX"(PkN£ª¾[yP ÷É7Âéÿâ=ÑöìP€Þ>åÿ;Dh‹Â/á3x&á-¹"dÙ¥Â;å­x}œ$÷¨9¶*š’˸fV~ÎdÞØ›L0YäûOÂÑ|WÓ¨ÜO`{ºð~ÒD+.¨]ñž1 ^o”ÛÕÂÈç—ˆˆˆˆˆˆ(Ñ%@Pã]Ÿ\£¡ã g:Q}¤½ :– ¢&Oóùè#ßW£8c+¶•ÜÁ‹Q;îù8`ìSˆÌvC¿ûCè~ùõUuHë÷(Þ©îîÃW¿³E�ÍÂÝmCÏÈ‹…U9OpNs ýJÇj/9)+tõ¡å[]Eð¸K=VïmTddAkU:Ý*vÔÑz�AÍ$¬ÚOBú£ÍtB—}–¨öŽxáz¾ ,ø£QÄíH¦F- ÷iFuI4e?ÁæžÛÙT:œneAÏ ­æœ î4޶ò]ØcèQ8êÛ‹Á¦ d¨–ªÊÙ‚TÍ—0;&"~ËMÊZ°ÒQÞ6¼Ã –y,UF%ZGcS ù9%ºj$LY¾@‘pVÇ�\®8¬wa(݇¥M˜Þ*bžnü°`œöü m–»Üèª>‰S?<€Ý)‡G½°6h¡NIŽ"¨‘«>ÀÎòëhŸ¯Ä‘×CŽîÐqeNв“²~DëËß=‚}(‚J¥%Æs[,Ýpy”–FÅV|ƒš%ƈ¸Ñc•GÌE&‚?i¶kg™¬ †*[Zx]QŒÓöZ$§ž€¡éßaaA†”n Š5ïS˜+ö!ùexýqJînÔ×<€+ôfûqïzÎiŠñ¤,¼¾Xç¥ÆsàwS n* ÝâÔ8a:¦ÁÙÊW ¬çÖ9hvFÈÿõ•žâÖñØqüæÂ׌ˆˆˆˆˆˆ(Db5òHè§°Y,°ö ÎMŠÆÔ =ô5l3 @À@ÔKÞÀD 9<Šþ8}³Ý…(šÐh$MÀÑr¦Æ FFÅtR–ÿ¹Ü«V¸‚zû¸ÿ¹Ã~ÿ>¬ƒÑô Zf<wÒ6ˆýжžÉ÷‹ÿóÌOGf^Hë—ë#hÛFÔQD ¨‘ãvãiø¾‘(«CfwqI³šÐà¡4e0E±õIò ÂÞÖ€kúª¹ÇÒ]Å¿îYátG³jcöˆÇª‚¾þ?Qn š†Ãða°ó_pÕGJrŽžÕ ûÔ]Œ( b8)k¶×€=ª-Øž™ô§Ðð¤BÆÛPí¬‚uJésÂT¡ÃöW•Qíæop<÷ ]ã Ô á×6Ö®m Ôxá2ÃÑ/¿‡(НÖOÔ»Š¡75¢­w4ò~+M(Ý‘œÐÐA^ùŸ¡YQ3Ûi¸Z¿‚&uKà­ä½(3) 2^5�VmÏÅÉòJT–j]ø][ŸÜ°§`tÎF_WìHA¶Þ†¹²C£UÞ€9†“²AÍ~y¤¹Oתz„¿ÁÒ©(¦>-1žÛÓ}î;HÓu* Fä×,~\¸c²`rѵ0Œ–𻬠!"""""¢ˆ%FP#j† áK•†¢ÚLj¨[Êà¿p¼¤Oô5é„IƒažBoíä—T£®¥×0Ü/·É¥žÁÑÕ ±ª…#|\_'ti[°í˜ ý/«h|p[þ‰F‡¢ê¹2ç™X‚á[|]ü>TÛÎÂübö;—s@I‚7[ Ò0šÏŸ€öÎCXÚ¯£|ïiÞ…¾0/ÊñÜrRŒºËsUH?|Ýÿú ½ÊK¾Žâg¹-Zòµ{�z»ÂícDDDDDD´i%FPs£ Ãa1Œ×A#ÂøÙ…†Óÿ€y"‚mBËšV„±ÿ¯àV"Ác3á+óÓªx|p?¹‰on?}}Ðj¶A-:ƒ¿ðóºáj%X"ø»ÂxÐ\}Í\³Cr;Ñ!oêp*Þ®K>«ï.:ÿ*¤ÑÖ7èõªŠó°c÷äí¿¤xÔ·ü<âÇ SY9¾« ©ó¯ZÝÇØ_¬G“#š€Šˆˆˆˆˆˆ6£j$xÇÇo‘ÑñPmìƒÛ.¢dç Ô Fðå|‰ñÐí·>CQYz#ÚbäÃ䨄‚à$ÒÛÏ…ïý„?5òˆí\¨TYÚGçn²xl0ÿuvyÔú|EShE’³ÝÐïÚ‚·r¯ S~í\"4B;¦lWð¡¾[ÑHóø5“pŽ,ë¤çh8U†:—ÂÉYDDDDDD´i%@Pó:£h`OÕ¯˜ˆä»~LGMÀÖh‚(Þ…mÌÉÝ‹–ºh´¾P^0·çšé7ŒÊ=\pÓâŠò±VÉ×Ó–0%|)Ù.&aÆQ‡ó%:4¹¦à¶[Ð1ô—ÿ× õtÀbsE7Ý*¼ )Ô´âEó§ÈÒZ‘è=j$Ïc\+L[XEEDDDDDD´‚uÔ(ÓQÓaØ{ºGÃðJNÔ¥"9ó0Îj>À)ó‹×owZ`Ý6׊U Òs:ßPl#o-Kߢ¶Þ*Š0Ü‚¹øïÈjqë»2ä¤lCzþE|ýùA¤ëmdT´`TqXãA¿x i¥fŒÈ9óÛÚT¹Ðu)›&Oü°G ÅF5^x<Q„KŒšÎËÜ}‡òÞ-r˜‘/7çõa¢íØ1ÿ¥;PÙ¡´¯Œ<‘)sñ4ª•—ùwì5ô(ÚÒ5ïoÐ ×Ñ.oûE‡‚šè$l��6RIDATý~nknkG«á$ö”F¸],úäøÏ’Àì$ ÄÎz”Ô¡ÉÞ—ë1Z«>Á7þÿ¯Ü4­?£ÆìÀŒÛ cU ÌöÅUHñ»NeN˜Ê|ÒŸf®GÍIè:ÍQÑæ” AÍ,<c/n½yÚ€sškèWÚÛd‰QÓòëK'j`WºÿFê‡øÑG¾¯FqÆVl+¹ƒ£vÜòqÀا°¢Æÿe¾ø(.„Tú,¹ŒV(«‰–Þà¹õZ´Ð„oÏ™nCyr ½ŒíöY¡}·¢Ëë,ÉrPc½ }w0P™Æ€ø)¾ˆzêS D}•ÿüTA_ÿ¸^NÍŠ\|ƒö¨!"""""¢ØH€ æÕdù±®-HÕ| ³c"òPd° ÆÆž…¡OïmTddE1Z‚×ÕŒê’"hÊ~‚Í=·³–¶<tü fÝw¯á;íg¨®ï†[’›$·àvÔýnbG¼…û/âF»NÿùrÚÛqK[€”¤¹*™×FséáÀmAM²�ËŒ¼U,é9yÈËÜUF¬ŠÕ„M}*¯De©Ù…ß¡+¢ÆÐ¯¬þ:]‰ wê:iIž>˜Žþ=jˆˆˆˆˆˆ(b ÔÈÓ>ÀÎòà6œùõЀ£{4È?Û‡"3–ϭʨT<Ò9@ò`ìyHèã_O.Bc|¢,`™íaÏV¨¶ïƾô]8ÞЉ YP©ö@kÞh­øàÂÔ-¯Î™* …†H·‹Iðö›pª¬?k`KˆgþûIn;åJ˜/J‘w08j]‰@3á-ØvÌ„þ—U4þçjù'NŠ‚2ù˜âg…5)E0ö²G E&‚ù }7êkÀúÍ{¶÷®w(ß´Äxn‹¥;ªí2òÖ•¦s»¡ ÿò-/U4_šáˆ´²#ÔÂèœ<ÐÒÁú—Éqù 'Å‹äAŸí7ÿùê@ÏGaÅÐ,<®ßÐhºÛàŸ°7ý¼•K«‡Øôе®PøÔ'™× W³€,…=‚bq.Ï SI)¾®]Ø£F¬»×”ÂóHDDDDDD›Y5> ÞÑøÇª•k ßÖtâ¯à=V$ùàõÅ諱¯ú÷÷¢¼®mAðóÐð1ö 7ý??‚}(‚.>L4WâöÚ-m¨+?„bc~ÑFÆZ5Kôõñÿ=Ö(•—áÖlÏ9†bõNìÎû�û/F3õinëÓûE?á@Ð&W_åB¥Ê‚Ð>:w“Å7¨Y¦G ‘B Ôxá5sU*+­w.¢m*’¯Â¼îᥟÀêCË·"ºþŠä±ä>2 ¨iy¶àKø¬³×­cÁ?E(ÐpWµø¸akÌ“²Ôê}Hßñ š'f1Û_‹ƒÛ²# GfízìJJAnµnI~mK!Xþ„Mw&Â~7áäfÂM¸fú £’ãnZ\ʶùÉç:~ü×Üà#˜ª?ƒöj\r“fÉ gÇïÑUrѦ•AÍõjè̆–W jË£¬¶%äw=Šd”<©©`ÛÂ0dÑJGy[¤A‹<ú:ªJ ¡Î?†r}#l£ÑLñqÃn(Ź:[HhôCîµn%ìçºb͹Ũ„+0;§! 6áRQŒö×oDóÙtH“§>¹äã 5mOÐ\^E3gYlοüºÇä€q2’’Ó±/3 ;+Z0üÄ€=*Rò¯*Ÿ6FDDDDDD›V5¦úúðgØwYÉiÄ`SZ%䊎Ýj~yð´£Õx ;ó¿ÄÝöùßEºei~êP ÒÕ'Q.¨,ý;³剥Øj ×ß‚mÌÉÝ‹–ºhL€©Oð<‡s8FÏÂë€X¸¥æçþãzU-¥Êú ]QO}ZýùkPè¥óôö©ÀëÜ~é¬ÿçq¸‡Ðm<ƒÓæ¡à ‰ˆˆˆˆˆˆV–�Aÿ˼© š •!•Ÿâ¬ú=¨Òt°)ÌC|Ö/¡1ö-ì2݆òä<z#í'4Û ýîè ‡„)flz1ô@Ѧé1 {Î=–$®NEræaœÕ|€Sæ Ÿï›6xúúþc”ù0Ñr·£èžã}k}-ÌŽI¸­µ¨2܃},Š*¤žÿ¸5ð _¼€‹ÍÃ×Qzf‘‹­˜òŸÃ‘†³8ÈñÜDDDDDD¡ÄjÄcHÏÉ é’Mɨ·+0<¨.:‡Z»á”·9¡A[€UAÜWæˆ)l¬´T#[áÔ!x-òpJ>L´ý;Tæ*0\"4J+Öä5©¹(1vÎã–Æa7GVrap Ó‰áùkP# £½*Û¶g"O¾~ó2±=%9òßÚ]W4[¾ˆˆˆˆˆˆh3J€ fîînôØÑd¬TÔhõ&´8&”‡4¼®»¨È éS£JC¡¡c.„Pd–KÅn=‚#ÐS¦Vów(ÍÊDiópð6’{ç|ô„ï«Qœ±ÛJîàŨw„|¯�zÓ[Ÿ¦0j­Á9á¿påØN¨TïããÒêè*jb&vç?®AM`ôzÔ¥ÿ© “W®¶=[ÛŽˆˆˆˆˆˆÖ•j�ið>Îe¼$U*rNž€zÇnäåÄÅÖ¡è ïìw¿ÄÿºIÉY(¾¬‰‚äîĵ’l$¯:ô‘¤fT—ASöl9N÷Ú5Þ ŒMNa°]Bùœ©2Qí¹±Xÿx5’» ¦êÜsŒâ:¿Çå›Îà9›…gìEb4Š&"""""¢u%‚ìú$½•‡êNy«“¢F ËT't~ »ÒéÆÒs4Û UÒlÏ9†bõNìÎû�û/¶`TqòàÂmã=üáꇽµÿ-ÖÁl}ŒnS nn /á®ë8šþ’“þ†\¡O\V\«øÿ®¬qEÍ</ÜN,–ô y¢ bÔL¢K·o¥ˆ³%¥¸p2 *Õn”ÝùZ«ò²ŠP‰ˆˆˆˆˆˆ6¯j¦`Óe#I-{‘ÈAÍçh{Ñ„ò¬*XæòÔ§]I)È­¶ú¿ {çÆC[þôÿg ·{‚·Š”ÿ¹¨“ç*9¬m(û•òÔ§FDñnâM}r‰ÈO-‚®5d›Ž×‰†’ÒèzÔÈÍ„MU(Ñä#ÿhô 6ŒF2Z}‘ù l~œ¹¼ð{AÙê¯Ó0r£ã]Gióˆÿòuò7déšð›þÞQ ¨5·ÂÒ~µçNá+ö¨!"""""¢%@P#ÁÛ/¢0í<Ì#òd ùpd«ÿ‹o”F+>›iIš`À jÚž ¹¼Z«Ò/ÌN˜*t¸ór¬·íæop<÷ ] 'òÔ§Ñß`¶8`oú:¹·ŠV±¥ÿ34€¥#µç+š’3 .¾�y‚W©& YÑT4Å.([ýuFn¼Î?'C-:ü×[ŒÎ W®:œúDDDDDDDJ€ F&Á;hE}Í}8fFa5~ƒÙޱhª0¼ˆ…ûPj~o ¨Ñž£*ë+t) äçå +éñtAŸûÒtPTì“ÈSŸb¸]L®hÚû†Žãž„­ú¼ò©[1 ÊbÔÈÁ[öá f;ŠÍ/0ÕöOœ¾úk ù±Óþ�?”BEÛXðNDDDDDDD+K &Æä­7õµ0;&á¶Ö¢Êpö±Ðà`¼hþæ[4ô*¬ÎIà©O±Ü.æ³êpdQɤÿ±ûÓüs¤b”Åþ:F¯áÊä­OÓm(ßš>w|Þ§¸[&‡^Á꟭h›^ËW—ˆˆˆˆˆˆÖ“Ô 6ÁØØÒÓD^0éïc0ªïË3³ûSw90nY/>€Ã­°qN@âN}Šév±©_q©è2nY{çνà ³¡Y;>Aó„ÒÎвi ZqU>ÿò–¬»·ñß_}£8(‹Ëuê±áê© ¸òåQìȸŒvwðø¤)¸l¿ÁbkÁ×êÏaYÓr)""""""ZO6^P㡞¯f]oA|¦´ªÆ‹Á¦ d¨’ Úž‹“Åyرû�òö_Bëh4aM‚Šév1ܶQ’¹íå¹W¥QÞÓ'`®»‚ç?yê<ä¤ÿ ©…WÑ¥0,“ŸG\xGá°v±dÅÖ4†úžqêEl5õ¨ÐÞB{°§‰ÅòæïJ[¤üËýÜdŸ-x+÷ :åûúÉ´cÊvê»M}HŠÕv±ùŠ&g7Zo]‡ø¯û°::¢«hòuB—öru–WS£¤Iô›ÎàÑ¡(ø‰ÿu*Á;fG“±‚ÜYWƒË�ç\DDDDDD´©%HP3÷%·YÔCëÿ’«Õß„Å5Ýv ɯ/ôž<¿ƒÜ·²¡³M¡@P° êùž+ ¦/š?E–Öª¬™p"s?íéJ~gð¼£;² %–Mr_Ÿ‚à §(É׊ý¨ƒç_îG_\l®Óåø¯1ûU䧨¤JEÎɳ8š™õ(Ôw°¢†ˆˆˆˆˆˆ"–A4xç2Þ~ɽ�¡ò,4ÙG¡j»L8¹7L ¾ùê6z—7xÐ/CZ©#rEÇ|¡Ê…®Kic\™Üoå:ªJ ¡Î?†r}#l ¦#­— šô}P«ÕˬÈL-ˆljSL+šúqëD&24çæªTäUyêÔwy´<ðçÊâ|Á¨î¸5@i’RÏ ¾Òÿ\ܰ¥]nôËQeæZ!"""""¢Í(‚š)ØtÙHÚö1L/¹s$÷¿qéÄOè:©™†Ó|‚ÑêÿÚ¼r¸ò3jÌ̸­0VÕÀl‰bœö|¿›¤«O¢\J?ÄÎ,aíûݸn 84 Yria´F0f:–MFsén¤çä-½ZÚ6Lﱜ¸5ñÜo#Ûð8xýÎ53˜l¾ˆC‹¦`--q‚µWð7r¨ávý!ëò*&æÈ_–ÓÃ7aS‡ší›ï—¢„Üïfwt†CB 36=ŽzÖ¶ßç9œÃñM´šŠ& žÇ虊:­{)¾5.4û{XPs'µ•(Lφ`ü–ˆˆˆˆˆˆèu ¨ñÏ•·>½×þ˜«¨ñÙõx_õ62„‡«¨†‰EP»©CðY¡=b {.rPSlÁE…)× &FÝÇ¥ã0Z_È1ãܵ—ô7äV=Äèês&""""""Ú$"¨ |Ñ•'æ\«ƒEÞäq ù¦®h*W^š„Uû>Tš: Êï™V†Äpê0Ë¥b·ÁárÁåê…ÕüJ³2QÚ<¼ ÅK|ƒš ïœ=pK>¸6Øœ àˆˆˆˆˆˆH‘Ä jÁTuõA-×£ÁºEHÉ3†ç0d~=AùÓ0ö{‚·ˆP §É$w'®•d#ÙÎäó–¤JC¡SÞ„7Ô­RB5sSŸ¶"9]âòʹ©O;sQÑ:¤°jeþ±Þž B–*µ_šŸDŒÄpêÐ+Þ@µ…ÅÒž!âã‹‹%Çs»ÑcíCDÑ–¯ ¦,!ÁXøê„I?²ñÞq"¿þDDDDDDD‰.‚ìúü…Û‹d3¨>Rƒ^…]výmv–£®}~<´¼ša8zBÃCÿÏ=ŠxKUì¦É[Ÿºm®EMƒg͸É4¥xZr<÷>¤ïøÍ³˜í¯ÅÁmÙÚGƒw˜z´8[°Þ*‚ølíF‘Ëψˆˆˆˆˆ(Ñ%@P#÷’ù¢+l£ÓL'tÙQL}’Æa¯Ñâ ¦á¼]Ëÿ(­»©C€¦â|i¬…(Š/×OÂAì*þ/˜¢wl‚ŒeÇs_Ù9 i° —ŠÊ`´/ÓÚÙûôÂu´Ë¡Ø/:ìðs[{0$kG«á$ö”Ö¡WiæŠoPܺWý´WÛæz+In8;~‡Ë³¦ó¼ˆˆˆˆˆˆhI€ F”å  7au Àå€Ãz†Ò}ØQÚA¥ŠŸôMçö`ç2S¢$Ï0W| SxôF9!ª“çªK–YªÔã¨í Þþ Zõxn¼Á*%¯E è üüÒtÊ“ó`è ß^õæÈç7n$Œûý¯mr:öe¦agE †Ÿ°G¥BJþUØ%'"""""¢Í*‚?i¶kg™¬ †[”ÀžíaÏVl)6‡;s“¤Ìú³ÈÙ¾Åÿ˜šÅU;o”7ô÷0¶íêU°á¾Ã8}&ôÞÁ&{bÒWF¼…û/âF»Nÿã8íí¸¥-@JRôv…Íœc(®AM`:Øþã›òŸ€´_:ëÿyî¡tÏà´y(xC""""""¢•%@PãÃàm<ó©ˆ[ÿýßø—ùÝõÐßv!²œÀw×·(È>Ñ:€‘gÿA}uñ\ð“œbýÏxpíÜ\»­7À_›Zt<ÒP:&ý?ŒÃ.žÁÎByœøæ¡daKuÆþ¿‚7Š”üZ\EaªŽÍ?ÎÚO·’ŸGüxÐ/^ÀÅæáÀë+=3áÈÅVLùÏÅHÃY ¯0"""""""ZF5^¸DÍ«/õ!Kµßˆþˆ¿ÜÏUÐ4ý  0#Åÿ¿aUž­ºGÈ4­×QURuþ1”ëaC/÷CYjTYF" §bÈõ3´úûÁž2Á¾2µPP}_É3‚>ÛoþÇJŒéVòõ7Ò0Ú«ò°m{&òäFÌy™Øž’Žù¿o탮k2xC""""""¢•%FPs½úóÍgåõ·„QV×]†wý–›Ð—GaéW¨·ôc¼¯Ýn¥¡ƒMÈP¥ ]}åò8îÒ±3K@ëèZVçÄØÔ�†…ORŒŽ)ŸÔ$MÀq¯Zá êíãäJ¡û÷a\»þ4²¸5­wP—þ#¬s®¶=ó_EDDDDDDD‘I€ FÂT_þ d$§ D<[U)†\eó­bŽeWÞ£f¶úÝÐ=ù²-aƦÇCÏ¢QÛëÖSŸ*Ϫ‘ªÊ†Î¦¬¹ñl¯ÜDw ¶gf#}Ç)4<iñ6T;«`Éô¬èÄ5¨ l÷ºš‡Ck^9DDDDDDDë[5^¸LeÐ\¨ >ÅYõ{P¥é`‹QáŠ4<€¥Ów|Vh˜à þqŽÔT#[°DQ)!o£jÄUÝeZ=Äf;ÆÂš ¯ — šô}PËÛvæ—æ4ªê»W4‚šýF8% ž®+8TõùÛa8­uí¶�Å7¨qáŽÉ‚ÉEçj-5wábzCDDDDDDJŒ F<†ôœ¼ à�23Š ï¬BÁ×Ó–°©E¡+º FÀ8,—Š!ÜzGàqza5‡Ò¬L”6o©i¸î^@†* ª@/“<ä¤ÿMÙt«xq?íiŒ¶&IÃh>Ú;ai¿Žò½§a|xú¼ Ô¬0z]u`nQ ¨™…»»Oì#òa¢í œ0ØÑ@g¯Bò_’C×[EÊû­øIîN\+ÉFòüãD;Á(0Âùäê,¯¢‘&Ño:ƒCFdžÙ2ã³jñnèy,R ŒèY»£”ŸGü8a*ð½(B Yµº±¿X&yªQ ¨™ÏZ3€^ó§ÈxW k$Å&Þß ®£]nDü‹ûüÜ6ßœ¸­†“ØSý#¹êÇí´ùkŒ¤~ˆ‡at††E¼öo ÖZýgA.FéGßZW׬–ÇÃñOQgy=‡á^ã-^ñ j&1à\bZ—4€ºãgQçŠÃ”0""""""Ú ¨‘·>-5žûmdT´`4¢ï÷>xƒA€×¢…Ft~~iº åÉy0ô*ÝÞãÂmã=üñ2p˜ ‘~7Õàö ÒÆÄý¸u"𦽕§¡N}™GË®,.ÀGbÿú®®q?AWÏ&— ffð¼£;Šmh«#_Sñ³tÉó× Ó ¿‰ˆˆˆˆˆˆ–‘AÍ¢ñÜþesAiï_™4x 'ö_Äv;œ.œövÜÒ %)z{D©B,×{$ûoWFséî°^<‹W¶ Á{¼1Kö¨q£ÇÚÙÖ³PK5&^° 3µ ŠÐluV®d…5)E0ö²G E&‚@òz[bC•|…©[^}Y޶¯Œÿ øu­B¤ÖQVPŽºÞ …Aƒ7+ ùÿªÓ”üÏÓÞ‚ÛÖþÿ³Æ– Wö!}Ç'hž˜Ål-nˆÐ>¼Ã –õ½xia´ŽïðfÄâ:]ž¦²r|W»°GXw®©õ]!EDDDDDDoÔš5¾Ž:ü`u†l) [¿×CÛÝ—\ïì·>G¾Ö$g¡øZg!Ì>ÇPØs˜ÓxJ·(ÍöÀ°g+TÛwc_ú.oèÄ¿…,¨T{ µ¾ñš…– W®À윆4Ø„KEe0ÚÝÁ;¬ÀóÎç/`oú:ù1ä1ä-½Qžÿ؉oP#÷¨”ë74\ÕùÏÛeè®6À†ˆˆˆˆˆˆZ³ Æk^MRZf½U â™ÒoºÒs4Û UÒlÏ9†bõNìÎû�û/FÚï&”¦â£¸^úÊlEš®SYP ¨)œk&ìé€îÖ¿$HŽ«È6^3r¸2£ºž˜žÿØ‘¯§ø‘«¸¾E~ŠÊÿ÷¤ÌmoËËÄö·v£ìîÓµ¯˜""""""¢uc ƒ„º6X,¿âÝGØ/ü m/·ýñ|”Öõ(®Ä˜µë±Ëÿe9·Ú꿯ܨ¸‚åOØtg¢ëQ£ÉD΂-A…(©º »âéL>L4WâöÚ-m¨+?„bc~ÑFÆZ5ƒM06ö„U5u¤¿¯¸éolÏìÄ5¨‘0î߆Ôbö±ù O¼c6ˆ%'ßx?""""""Z¿Ö,¨Ï‹¹Á@nX„Rˆ®Ðº ÓmHÞc@ïlðWòÙtHKÒ/´=Asy!´ÖɹElÝ6>…¥ù¬Ð¾+W\„U%B³Y—uøó’—ê Œýo™ØžÿØ‘'n¯m ŽÅÌ’SȈˆˆˆˆˆˆ–±vAÍK^ 6”b¹ íö~¸\ý°[nB«~I»ô°+MI¼ˆ…ûPj~îd9(˜ý­Êú ]ÑŒ‘Š7ì†Rœ«³…T­<ÇИžeGY¿!®Ÿ¡ÕßÕ0Ù¿Úo}†¢²:ô*­JÐó× &ðڞǥ¶‘ž4¼îÔúèe¢Ùž›¨Yë~DDDDDDD”Ð ¨ñ“ÆÑe8‚TÕ«jUêºÆ£kÆê}k}-ÌŽI¸­µ¨2Ü Ù’²†üÇé|,‡Q¯¶=m¸ñ Ö´ÉÔ�†©ÆÇ >‹â¼-:ÿfØž»×ôãÔÌvC¿+dÊØ²K…m%w1²Æ¹%®j|¼-¢ñ§pt>À­ÿ!þë>¬nD?õ)½l²»ÄxU4_šáPÜ÷&F–˜úTyVTU6t6åÛ²$Ïž‡„Q.×4œ; cÿíQƒ¿Ðo<…cºk Çs/µnZ1Ä †ˆˆˆˆˆˆ–‘�AÍ«í1á+ª©O17Ak#®ê.Ïšn¶c,š­J¾nèßß‹ò@åW[Œ>Æ^á¦ÿçG°­QÓY— šô}! “ÕÈËÜ}‡âfÎÒà}œËx{É×S•Z„/ÍOÖdT·ü÷Ç“ä~оXMÎ""""""¢M+1‚ÓgÐÞyø*Àh¿ƒïŽ«QdPÄÖ4\w/ C•ÕöLä©ó“þ7¤^EWSŸÜöÔ´<[P%4ëlÆuëXðOkÄý¶§ C"i¢—NÔÀ®°¯ŒÏ®Çû;ËQ×þ*Œ²Xša8zBƒü÷`h zòÄ;¨!""""""Š…j�Éë OíÆïz5ÞJÓÁ¶–s«}Ð¥½ƒ\£óá‚4‰~Ó2:nËòÁí¸ƒö3T×wÃ-ÉÁM n[_¬mÙRã¹{o£"#Kù¤&iöz-®ÐÞ6ÓpÔ›`qÇd~VTÔÑzAÍbÓp5×૆'PÜÕd‰ê9øé±ö),©bÁa¡¡ƒ¯ý¨µÖ@¸$ ÷£/’êšÙöl…jûnìKß…ã ø·•jÏË©@kf™ñܪŒJ´Ž*OÊ6_""""""¢ØH F‚wÌŽ&cu ‘­VoB‹c"ºFÂKô[Q«÷!}Ç'hž˜Ål-nˆÐ>¼Ã fûqëD&24!v+OCú2–Ï5Ý-.ÀGbÿëŸk ¨)œ }<ÐÒÁú—ÉqùÁÐgÍ,1žÛbé†Ë£¼fÓô¨ñÙPËùš×}-5wáZƒã%"""""¢õ)!‚š—_îU©È9y껑—w[‡”‡5KL0š[W`vNûÿ®&\**ƒÑîÞa%Ãh.Ýôœ¼°àgá*жáõ51>L4WâöÚ-m¨+?„bc~ÑFÆZ5Ò(ì·¯Bë?GõöqHòö¥û÷aTÞÜxÓô¨ñZ $/£-ÕèíÊ'gÑæ”�Av}’ÞÊCuç8$8!j´°LuB÷á·°+-êèÿß8û-dÛ¼:aÒßÇ â|`¿ýxÝS¡w”0ÕÓ‰Ç ›ìÂg…ö]Õâ/ò)E0ö®íùÙ^ö¨¶`{f6ÒwœBÓoCµ³ ÖÇezÔ8ï5º‘zÔxÿƒêâ¢60vû*õ.ä–ü³¼jñƒp;5U¸ëPØç‡ˆˆˆˆˆˆ6­j¦`Óe#I-Âø³Ô|޶M(Ϫ‚Ui©É2ýV’Taìÿ+x£HÉÏ%9 *häÉO»QÚ< ÌöA<ø2„‡x}}ŽvC)ÎÕ…†HÏ1ä^û‘Πf¿NI‚§ë U=Â_r`Ã)åÍ„eÞØ›~„N®d’Gš·ô®ñô®85ÒœÁs#‡pùWá?Æ™NèÞ/ô_wk4vˆˆˆˆˆˆÖj$xûE¦‡yD®ÂpBT'ûw+²tÊ�/ê·ÒŽÖÚ ((«C¯â‘ÚN˜Šâ¢mT¾0÷cVzŽæK'PbìŽìyJÓpO®}0³ˆ4Œæó'æF¤·_GùÞÓ0>¼ }a^SŸž£éÜn¨’¶`{Î1«wbwÞØ±£kÖÄ<¨ %OSÿl3a(5;ßZtADDDDDD´²jd¼ƒVÔ×܇cfVãW0˜í‹¦—ÉÔ�†n»ñ“ú`<p â³°ß¿Ö$œ#Êûä¬3>«ïÊUG – )Fô†‡¯1k×cWR r«­pK^¸ÄR–?aÓÞ¾Q§>yÐ/~Œ¬£_@4·Âbù7šoP™ÿTìQCDDDDDD $@PãØí.DÑ„FÛ$iŽ–›05v`0š f‰f•gÕHUeCgSø…Y­ÑänwaóAr÷¢¥î­/€u1ÑóØ`8þ)êì!Û²†áŽâüûl:¤%i ºä3 jÚž ¹¼0ºmT1ß ÆÏÝö6|ŽüÔ-/ƒ®äŒc¨n}¶±®""""""Š«jä^("WgÁ¨÷/¸êŽ#%9 GÏj}ê.F”fKçÖœFU}·ò>)Òcö„îÑ0¼’uE©HÎ<Œ³špÊü"ŠJ›i Z¯£ª¤êüc(×7Â6ª´Ê'V$Ì8êp¾D‡&×Üv :†þòÿÚƒ¡žXl.(í—àu@,܇RósxA&p¨²¾BWTqjæùÏߨs\ÏÇ¢;DDDDDD´©%@Pã†E8£sÒD+*v¤ [oÃÌüô'¥åî'°=QóVys¾Üdׇ‰¶`Çü6—`QX)áÅ`S2T)HWŸD¹\éSú!vf h]‹áÜC0ÿYB-n}W†œ”mHÏ¿ˆ¯??ˆ”@EÈÛȨˆ²¯Œ÷¬õµ0;&á¶Ö¢Êpö±µ ¤æÄ7¨‘·î=‚©ú3h¯¶Á%W"In8;~‡Ë³v“®ˆˆˆˆˆˆhýI€ fÏÄßâëâ÷¡Úv惰߹„œrH¼Y¤– j¢-õCüè#ßW£8c+¶•ÜÁ‹Q;îù8`ìSVQ3Û ýêœà¯ä/ø36=ŽzðÆ¿ÎË!TrN oŒä0 [Þ®ÔY’ƒ:4Ùûár=FkÕ'øf ûÊÄR\ƒÉãþd$%§c_fvV´`ø‰<ò\…”ü«°³´†ˆˆˆˆˆˆ"”�AŸw�ÍÕg Ñ\À5Û8$·òĦ§òíJrš£U0Š"Ä—«‚:Åz mO4)–àu5£º¤š²Ÿ`sÏÀíì L“êpº•5òç#¦àòyrPSlÅÕ91 ?Ÿw ½d¼ÉrPc½ }wð¹Lc@ü_¬a_™XŠkP#O}Jû`®ÚJAû¥³þŸÇá@·ñ N›‡‚7$""""""ZY5±n&,BíNòóZzmAjQm„ÓŒ\¸m¼‡?^6Ø]¼Z~@MW$aÆ8,—Š!ÜzG྽°š¿CiV&J›‡ƒ·y“†Ñ\z8PQj’Xfä><HÏÉC^æv¨2ª`Ý Õ òk?òÔ§ ¸èå³%=3áÈÅVLù¯í‘†³8ÈñÜDDDDDD¡jbÝL¸úWX…ŠÜ§48‰hà q&¢*'DurHȳÔRárùKùëIîN\+ÉFòü}Ui(4t(¯Š Þ~N•Õàgíl)ñÌÿ<$·ú*_”"ï V´~Éç;n¤a´WåaÛöLäÉÍ«ó2±=%9òßÚ]DAQB51n&ìÀØdxs^/†:~ƒÃ#ArwC,ÉAaݳàÿ[‰×µ<°´£í–ê”íÈ×5¢]Þ–ºìC ¶.yávÚü÷ë@ÏGÙö©˜›…ÇõM÷OŸ’Ññ°£CMœƒšÙöd@]úcá¡ WÛ8ž›ˆˆˆˆˆˆ"—�AMŒ› Ëä©C¦*”hò‘´úFÛ¨fánÿ Y{¾€e"’IKÓÁˆõ{Kߊä¬ÿ—ïÿ‚ùÙÆÆÿ Þ&RKm£Àï¦ÜL€¯òÞØ›~„N´zˆ-½kTéq j0‚÷¿ðÝáƒ7é¹ ‰ðZQÂJ€ Æ/–Í„¥çh:·ªä ¨‹/@>E©& YQšv¤َ­IÛU~½n0ÓƒkÇöáˆIiß‘å¶Q%c¿Ñ±¶•5óç,i ¶çC±z'vç}€ý£Ï€br.ËÓàleh5ÍâUY|�{tXÛAåDDDDDD”È ¨™…»»OÃçSO9`}ìþ!r³v=vç~…G ¶òLÂV}†Þð±Ý¯ã„˜¿%b÷‚ÀHzV‡KQ5sÛ¨B¶Lµþˆ²‚rÔõN¬iP#Ÿ³]I)È­¶úÓ —X Áò'lº3fÃA¼ƒ1?™yj¨å5+­"o|;­ ÔÈÁÀ±À¤¡_hs2°£´ ˜F¿xÛ2.£Ýýúo¸>«GMÙ™„Mw‚Eið3†ŽfÝKs@iƒX7úá[cfà4FØ¿¦AϦCš<ž;Ðl9Ô´=Asy!´Ï!üÚæ@$›éˆˆˆˆˆˆˆV’A© š •‹·‹|a†sÖ‹Áæ*•ü{$£¢§~Å¥¢Ë¸eíëã°Âl(EÖŽOÐ<I)ƒC–‡‘ý]2ï�´<Áë;Ö8a*>Š ¡ÇWyêÔ­HÓu®í—|¯bá>”šŸû^j4×U•õº8ž;B¼cv4«ç^[] ,Ø §ˆˆˆˆˆˆÞj$x0³/´>¸m?¢$s[็Ô#0tG\µ"¹ᛋߡµË·~•'&µÃxþs4¾ˆ¤A¬<Å*9¡UCêB”TÝ„]î}³ÖäÌõµ0;&á¶Ö¢Êpö±ÓM%¾Aÿ¶_E~Š IªTäœ<‹£™þ×úê×jü:­G ÔÈ$xÁTuõA-×£Á6¼BHß`±>ÁGiSÿóq݇ûw¤«O¢\ÐÁP+Bý«Ö�pÅê ¤dœh4�G·Í¶'Yq j¤~ˆÛ”zõý“þëA9_ ÑåF¿±UVå½–ˆˆˆˆˆˆhsJˆ F¼s[‘œ®Fqy%„ʳÐìÌEEëÊãŽã.8æ»8'*ÿqÊÇš”¤Br†åß݇#*a("q j¼Éo#Ûð8x½Î53˜l¾ˆC‹z&--‚ìú|äê,õ†Ä23¨>RƒÞ„(A‘àuzÞ<ó¬mxDQ‰oE ÇþÔÄIm% Ó³!XÆ¿%""""""zj&aÕ~œ8b¦ºì˰¬jÿÑœ¸5rçºKÇ+`´¾€7Ô¤ûÿο!·ê!F™ìQ„ ¨‘0eùEÂMXp¹à°Þ…¡t_p<÷F2Ak#®ê.CÐê!6Û1ZEDqß &Hî‹Ô3�·äƒÛiƒÍ9ï´Ó|‰‰ˆˆˆˆˆ(B ÔøIã°];ƒÌdUàñ’’¶ µð*º6T˜i¸î^@†* ªí™ÈSç!'ýoð8Ó j‘GŸGEÛ·ËQD#¨ ûÀ<…ÍbµgžöÍÖ× ]Ú; {ñH“è7Á!£ƒ_äã,¾AvãId¼ ÃVJ´wY=EDDDDDD¯—�Aƒ·E4þá 4ë}¹~¯‡þ¶kã·atÎ!“൵Öê? þ? ÷£Õ5q±úët©OïA£­™áþrý}qÔ‚üûz´9=Á;--‚y{ˆæUõAÈRí7¢£$5³ý¸u"šsanUž†:õd-ü¹²¸�‰ý¬®‰ùzŠ7ì†ó¸´h‹“/®ÆEëdðÏDDDDDDD+KŒ æz5ôÚa±X‚«µe‡QV×÷†I-†Ñ\ºé9yP«ÕË®mÛk œâÔøISž jØ£†ˆˆˆˆˆˆ”I€ FÂT_þ û&+98P âÙ†ù†+Áó¸=Süʾâ^QÃ5DDDDDD Ôxá2•As¡òÕ– áSœU¿Uš¶ Ó²eÝ6fƒš#aª§7\çäijúëtìQCDDDDDD1’Ax,lKP>4%_ Þ>¾¶Œ8!j2‘²ÍIѽ¥ÍÃÀlăï!Cxwð;q jVèQ3X÷)ªØ£†ˆˆˆˆˆˆ"”�AÍ,ÜÝÝxº°ÔdrÂT|^V ½Z_˜û1+=Gó¥(1vƒu±ß ÆOšÂóžÿ ÉX=÷ºêjÐ`Øxc扈ˆˆˆˆ(® ¨Ù$$'nVéP+Þ…mÌÉÝ‹–ºh´¾€7xŠŸø^§<ö«ÈOQ!I•Šœ“gq439êP¨ïØ@ ±‰ˆˆˆˆˆ(ÞÔ¼)Òcö„îÑ0¼’uE©HÎ<Œ³špÊübmñJLq½N¥~ˆÛ”zõýòä'7,B)D—ýÆrTY¹™ˆˆˆˆˆˆ"àæM‘Îæá”|˜hûv¨@oŸ\"4‚…U5q×ë4ÐLømd·ù f“ÍqHt~KDDDDDDô: Ô,Ó£fÊëã T‰ W]|ô„ï«Qœ±ÛJîàŨw„|0ö±¢&Îâ[QãBñ¿‡5qR[‰Âôl–ñÀo‰ˆˆˆˆˆˆ^'‚š¥¦>ùWNv”6aÓèc[Æe´»×sÇa ^W3ªKŠ )û 6÷ ÜÎNX,t8Ý jâ,¾•_òk{—ŽWÀè9$5éþ¿óoÈ­zˆQ¾¸DDDDDD¡ÄjLeÐ\¨\4 IøÂ 笃ÍU(*ùvŽÐ¡(Å7¨ òNÀÙ3�·äƒÛiƒÍ9Á-mDDDDDD¤HB5ý_^Ä7}.¸\!ë÷zèo»6P¥‰ ·÷ðGè1†­–PÓ5¼=ÅÒ jˆˆˆˆˆˆˆV)!‚—¨ <NøRí7¢Ã$5Nˆêä%óÕRáòVLïA±#Ÿ_""""""¢D—AÍõjè´úµÌ­Ô–FY]Ü(¨¹®5à¥m·´P§lG¾®í/9¸ìCÜ. jˆˆˆˆˆˆh=H€ FÂT_þ d$§ D<Û0AÍ4†‡F0býÇÒ·"9«‚ð_0?ÁØø_ÁÛP¼0¨!"""""¢õ ‚š¥š гê÷ JÓÁæ ÞlÝs¤َ­IÛU~½nÿÍôàÚ±}8broCñ †ˆˆˆˆˆˆÖƒÄjç·¦ä ÔÛÇ7P3a'Äü½(»lç’žÕლ¸cPCDDDDDDëA5³pwwãélðÖ:šmpÿô’4ç�'=Ń""""""Z7¨™íǽ닃 ¢(0¨!"""""¢õ ‚¹GÍ9ýò{ˆ¢øjý$@½«zS#ÚzG9 ‰V…A ­‰ÔˆšÀã,»Ti(ª}Œ™à=ˆ”’¯#""""""¢D—AÍ4 ‡Å0^ WàgNÿæ‰ ßȆâ„A ­ ÔHðŽaìÅ#˜ªNC£>ˆ£åz4tÚ`yØ|pÛE”ì<ºÁ 3«›Þ05DDDDDD´$@PHƒ÷q.c+’ÓÕ(.¯„Pyš¹¨h‚„Q´ °§êWLlœYÝô†1¨!"""""¢õ ‚ìú|äê,õ†$13¨>Rƒ^îv¢`PCDDDDDDëA5“°j?è ›ë4Ó ]öeX8î‰b€A ­ ÔH˜²|"á&¬Ž¸\pXïÂPº;J›0¼Ñj0¨!"""""¢õ ‚?i¶kg™¬ <^RÒ¤^E—›Íƒ)6ÔÑzAM€¯û)l ¬=ƒð°q0Ń""""""Z(¨!Š^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëƒÚxÑzÀ †6^§DDDDDD´0¨¡M×)­ jhSàuJDDDDDDëAL‚.®õ°ˆˆˆˆˆˆˆ¿½%5DDDDDDDD ‚A Q‚`PCDDDDDDD” Ô%5DDDDDDDD ‚A Q‚`PCDDDDDDD” Ô%5DDDDDDDD øÿ7w?ý0®����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8o.png��������������������������������������������0000664�0000000�0000000�00000072455�15030617045�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��„��f���-Ž[…���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��tÂIDATx^íýOˆ#çž'üæ~ö ZÍ"ßeÁ]øÖÀ;0 Å‹[ 7Ì…³ÐÂC-ŠáC ’¡¡ ïކ64Ó (š1c¦›ór\ŒèMÝ÷P¼Â~yIM__;Ñ1n“7¹UÕ:¿«'¡””ÊLeVV*"ôù@P¥P¤¤Ð£=ñÕóg'����Ø*!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���àFìììXJ´\D ���܈ËBn@���¸¡ò���·B T!���àV„ÊC ���Ü Py„���€[!*���p+Bå!���n…@¨<B���À­¨\ ôzÝìuïìvbð:__!���àV„ÊC ���Ü Py„���€[Q¹@èO/ãç?Žb4š,ü9^þ)__!���àVT.ª1���p+Bå!���n…@¨<B���À­•‡@���¸¡ò���·B T!���àVT.z=ˆÎîNöºwv;1x¯¯���p+Bå!���n…@¨<B���À­¨\ ô§—ñóG1M–?þ/ÿ”¯¯���p+*Õ˜@���¸¡ò���·B T!���àV„ÊC ���Ü Py„���€[Q¹@È´ó����oF T!���àV„ÊC ���ÜŠÊBz?ÿq£ÑdùãÏñòOùú���·¢rP „���€[!*��@ͤ =Kµ—ºZµ¯–Í-��TÌezUS·ý¹L÷wÛʲÌB���5#ª6·A ��P3¡jqB���5#ª6·A ��P3¡jqB���5#ª6·A ��P3¡jqB���5#ª6·A ��P3¡jqB���5#ª6PÙ|½ÖnöÚW/Íè Nòm«#½ö‹l×Q��P—]èUMÝöç2uÞßm+Ë2��ÔŒ@¨ÚBÜ��@Í„ªmû¡q÷÷£1¹/Ý¿riõb”m{ÃþgÑiÝY½Ý΃è^g[ÆÉ0úÝv4g÷5¢ÙîFx<½?sƒÎýØïM^ũ׃NìÎþn7Z½ïó{.r¶kÙngù«™x£Á§Ñn6¶9]ŠçYw»‰Q/Z ÷­ß}-m‘í:ê���jಠ½ª©Ûþ\¦Îû»r߯ßEoÿq<ŒB™ñ°{;ïD»ÿc¾â(úû{“ÇHÁΧ1½š®/‚˜½n óžÆ~³ÖA<Í ñèy<i§¿¿ÁÏÙºi ÔŒÆÃè—;y½ÿåìú áÖüs$ã8Léæ~ôf¡ÔëõL^Ó{ѾœÜ^w»y?F¿ýÎdûƒœÌ¿ƒ��ÔÌ Þ½._d^vjáмâ¢özBõq¥}ËZ¿-^^ÅQïa4Òg®ó<ÛÀäPÑŠ(L÷ïœò¤–7ýè§ÏmeŸÕå@eò¸~ƒÓ&>k™¶.šk©”)žg¹OôÛ¯»Ý¼üof­¨ÖsYYl×Q��Po(,tCYÑå²û—ºÎ,v›¹º7ÞŸŠ©óþ^ißæ¡ñat÷惜y‹Ð´eÑN4Úý8E¾Œa÷½Éë(Z¥0åÑîìG3…MûOc4{ø·͵xÊœ]¶Ý<���o(h!´QÛ½|{ßv›„ŽûÑnL>OsÝÂN-BÅø?ç‘‹÷§0¥5yŽŸòHwâþì5Üd ”›^ÜOûÐlG·?œ<sr6èYw»S!���&ê(„êãâ@hÔ¤mN—Û „R+¤"è,Æÿ¹Ù@(SìÇÂ>¦eiûu·Ë„���˜¸ìB¯jê¶?—Yg‡Ãaþ¿j¹hß.l!ôV»ŒåP2c(?ô7ÍÆ6ºÝÃåÁ¢ç¶_w»���ÛåÅ“m§ËüØF—MUþËøÍo~¹´nîÂ{­éËçáÅÊÖ,—KÏqžgϞŻï¾=Ê×Ýóæ[O^rïtÚòF+:O‹®G'‡ÑËfÛJûr'ZßϺý-¶Ò™oÆEûvÆ| 4 ræ÷³°]8¨tQ6³¤—¡‰¢ËV£õA|po²ÝeÐx_}u:CÚ™@¨¸?{k±åÒŠ gíÆ£oâ«Ù,kg¡ÅûW»¬,êu��ØWºè®€õ÷'Ÿò{¾ÉÂxGOU^tÓ™oY²þôå§Š*g^Ϫý-‚ t_ZŠ@h<ü"~Ûÿ*ž¦iÇw;Yx‘»Eë’ã8ìÞFñZ²°¤­î7q’‚£Ã'ÑZÚçi q½×~™sËrôE´—ƒž,™{'ßD7 õ./ËUå6 ÂZÞ¤)Ûï-íëÜXù{z¡×ƒèÜ{ýüõ,BÓiäï¥pgÖÊi> +‚ž¹éäרîuzÌÙ�ØËÐÏ“Û. ó.;®êu��Ø—]èUÍUö'»Ÿ]Ä_aªò$]Øïε̸Òôå…Ô’åA´?ÿt.ÝïÅÑüÝk˜ßßå ¨XN[%y íwÞ’f~¿Š€a²î( «æZ£ÌZÞœ®›7ß:(™ß·y«˜åýœ-ÅþŒG1øâ¯O[?YæöíLˮԪw$-?çü{–…*÷Nï[xϖ埥ùÇZZŠÏÔx4ˆ^§5ùL®Ún7Z½ï³G¼t»ßüåÅï×å—¶»H½Î"���[ಠ½ª¹Êþ,B³–—;“Y „®6M.µ2º—Zª÷ϵüXSÚßó‚ b9?Z±_³û½ÏÎŽC³�m$âÖ]VJ �� bêvÑ}þþ¤±r~vl "ºÂÌT™¥@hŒ,årêìý©ËÚ_Ľîáä“[ÅX4+¥ó-ìË%ËÔ| ”ÿ!›®K¯ã§ì5/†XÙ~Ìm¿*ZõÜç-¹ì~nÏ¥e•ÿ ��@EÔí¢û¼ý)—f1~KÞÍgcÐÑßߟë^–ƧyçœJçKûÛëõâîÝ»ÙÿW-ç·*Þ—F4ó1f¦ãéüydãÝàŠ÷,céÞ\—º¢›]zž›o%”^;åpYY()��€Š©ÛE÷êý)Ù]ÑÚ¥„n¹ËXÚþÞÒ¶ÓÇhÄ^ÞjhÅþ¾xñâÜ`h-ƒÓh=‰Ã“—1|zî,c§ƒb§¿)fûOß½ø ý‹h4ÛÑíÏÍLvCÒsR—•…’��¨˜º]t¯ÞŸ5¡«LUž\ePé"lšM_žžëÁâxBɬEN±Ýå–÷7CŸ|òI¶¾XVµš†AëÆN›±º,Ù„ËÊBI��TLÝ.ºÏÛŸÓ.cûÑ˧Ï¡ùAW˜ª|ÝiçÏN_^Œeô‹i·¬y·±Ô'›êýrçíïO?ý}ôQvÿ™@èàñÙЪ„êöÙ¬²ËÊBI��TLÝ.ºÏߟÄô£;ëþ4¿ÌséT忌ßüæ—Kë®;}ùü ^ùØ>³û&ËÂì_«¥í.’‚¡/¿ü2¿U-—í·ç²²PR���S·‹îm 꼿¡ò��ÔŒ@¨ÚBÜ��@Í„ªM Äm��ÔŒ@¨ÚêYʳ\D ��P1—]èUMÝöç2Û¶¿7åÙ³gÙ{—ÝæÍù��TŒ@¨ÚB×óî»ïfï]ššŸ7çS��P1¡j]]Ñ:¨X´zs>…���S·@aÛ’mÛß›P´*­„ÞœO!��@ÅÔ-Pض€dÛö÷M-·*­„ÞŒO!��@Ť‹á:©Ûþ\fÛö÷M-·*­„ÞŒO!��@Ť‹á:¹ÉýI­F>ùä“üV9Õ­üÞ¦óZ‹VB×çS��P1éB¸Nnr>üðÃxÿý÷ó[åT·ò{›ÎkT,Z ]ŸO!��@Ť á:¹©ý‡Ùc¥ˬnå÷¶\Ö:¨X´ºŸB��€ŠIÁurSûóèÑ£l)»º•ßÛ’¡^¯·°¤÷ny]ÙÀ²ò)��¨ÐY_ýuö8?üðC¾¦¼B×ç½»9ÞI��€Š•Æš©Êx2BëóÞÝï$��@Å„cÍTe,¡ÆõyïnŽw�€©²m)÷uû¼Éþ¼xñ"îÞ½›%SŽãëóÞÝï$�� T¶ËMùÔísð&û“‚ ¥`¨*Ç×ç½»9ÞI��¨l—›ò!IŸKµ®Ç{ws¼“��,PÙ.7å§Ò Òi0i¶‡sàÍñN�°@e»Ü”L¥¤Óñ”f{8Þï$�� T¶ËMùÀÔ‡~ï¿ÿ~~‹máxs¼“��,PÙ.7åÃá0;Ò¿lçÀ›ã�`Êv¹)ˆxôèQ¶°}œoŽw�€*Ûå¦|Øv_ýuvüðÃù¶‰sàÍñN�°@e»Ü”Û.Í*–fc;9Þï$�� T¶ËMù°ÍÒŒbéH3Œ±œoŽw�€*Ûå¦|ØV/^¼ˆ»wïF¯×Ë×°œoŽw�€*Ûå¦|ØV)JP †Ø^Î7Ç; �À•írS>l#­ƒ(8Þï$�� T¶ËMù°Ò Òi0ip¼9ÞI��¨l—›òaÛ¤¤Óç> ( Î7Ç; �À•írS>l›?ü0ÞÿýüÛÎ9ðæx'�XP•Êöxô4ö›ÉëÝ‹vï0Nòõ3ã£èïïMîoD³Ý‹áÉ8¿#wÙý%åbˆm2³Ï|úçÀ›ã€ J•Ku—ºªÆ¾½ŽQïÁiyìvbð:¿«0êE«¸§ÁRdtÙý%Uò›ñèÑ£l‚sàÍñNÀÕ©R³m´:ïoUöM !¨·¯¿þ:û¼ÿðÃùp¼IÞI�Ø :Uj¶­‚VçýUÙ.7ål3çÀ›ã€ ªS¥fÛ*huÞ_•írS>À6s¼9ÞI�Ø :Uj¶­‚VçýUÙ.7ål3çÀ›ã€ ªS¥fÛ*huÞ_•írS>À6s¼9ÞI�Ø :Uj¶­‚VçýUÙ.7ål3çÀ›ã€ ªS¥fÛ*huÞ_•írS>À6s¼9ÞI�Ø :Uj¶­‚VçýUÙ.7åC¹ãäðI´h¶?Áàóh7“Ïíhu¿‰“ñQô÷÷&·ïEgð]vïGcg/Ú½?Ä ·ÍÉç{§q?º‡ßǰßüm3Ú}0y¼ÉúôÏb4ÎŸŠ­äxs¼“�°AuªÔl[­Îû«²]nʇ*x=èÄnÅÑo¿;»ÝÏžDÿðwÑnìÄng¯'÷:Í<:Ž8îg÷ýY³ÿzòYßÙiDsÿiŒÆÇ1Ì£FìuC&oη �l@¨ºBlŠò¡ ¦P3:ýAô{Ö{±ß?š9¯ÑÙ] „výoÿ>zŸw¢µ÷8ú£W§18É3Š`i¯C‰¼1ß&�°A¡ê±)ʇ*˜†9©ûW+:Ÿÿ.£Wù=«¡É¶V'>ÿb0ëv6*£N ^ç«€kóm�T§ »m»H­óþ ÊMùPgÜ9+[ yÎk!Ôh÷ã8_\Ÿo�Ø Pu „ØåCŒ‡ÝØÛ¹÷{ßÅ8¾^k7€&¡—1ì¾;‡Ñ;z1êE+¦P1†Ð«=ÿ8Z4õÏÙs�oÆ· �l@¨ºêYʽ@éÍf›~f­ƒx:ü)F½sŸåé ÓÇ£§±ŸÍD–¯ëü>†'ã<šÜn?ÌgkÅÁó‘¥á†ø6€ J•ßë{£þãi%¹¹½árúËîŸÔ×g•ð4åïa¬hØ¿¶7Û—ê©óþn[YVò¡ò²BÅ dç»°ÛðÆ|›�À½Ù…Ý´ ~zŒ´ÌšâÏ\vÿëÅ_jßpÎôÛ¤Îû»meY5ʇÊ{=ˆƒ‡½8º¤©Ï4JßQB!x|›�À½Ù…B›$*«¥ sÅr6­–´° ²@¨ÙŽnøFßOÀj¾M�`ƒêta·m©uÞ_C¹)àæ\7DÇɰÝöé8QiŒ§No£Rò´Øzúì²]­Ñ|›�À¥ÊG]Ôi_Ö±Îþ¾xñ"[ªfÛʲj”°Yã89ü4Úû½lðï©b¸÷¢;|™¯£ì|›�À „ªë¢ýM!P¯×‹»wïÆp8Ì×VÇÅe9Žãþ~4&Û¤íV.­^ŒòmO†ŸwZçl¿­Þ÷Ù–Ç1ìw£=›ih²¬è*òzp÷²)¨óI>…õìïfÏ‘¿Š/£5='ó¿~//ÙóL.‚“ £ù×½°Ìíc6öü}×û%:ý-ÀæœÄ óàÌôÿã£ßÅÁ“‹ §\|›�ÀÕéÂní}Y¾xŸ]„¯üæ/—.¨¯(œzÃî{“í®÷kfzüeóAPñÖ „fÓ3ß›«`Oö§·?j²L§l.ÆJïUït_S3ý§§ûy:kZ®:¤¿;×ø»èí?Ž'ƒÅ©ŸÇÃnìí¼íþùšù1¬ÚsÛAÌÜû^ìÿü~ŒG1xÒžü}#šçKûv'î÷¾[xþˆŸ'(¿X±þÇýh7Ÿ#sò<:«Æ×ÊBFìu'Ï3)‡ÁÁŠqºVìãÌÑo¿3Ùþ ³_Ö¯æÂò©¹égÚR–…Û·T7ZÇóÑ«¹sf^> Sô§�§9û›ÝÇÑû}:?¯8÷cñ{åŽvwéû6[V›×ùá¿ÅáeÛÌ/‡Ñ;šìóª`¿øAàø³]Ë–»Î•õGƒ«pÀ¥/üº¸Ú¾L/Ší~L/¡¯ÔýèçÕÎ+ 3ãÃèîM+h§¯c}óû»**–Ë¡—1ì=‰þáï¢Ý(*œ¯â¨÷0v[Oâ0…'ßD·ug¶Ïã£^Üß½ÝÃôªã°{R‘žcŠÊûâºuÍïÛÚ²Šìiå5{“ý9|eú z£TµžîkãÜçÞdÛÓý8½(™Ï’ô¸qõÊsP΋SÅóœ;#ÛÏbûâ"k¹Ò¾¼óò¿Y«Ój×*ŸšØæ}/e± éûâóüœZtÑšœ÷ºqxøw“ïÎé9q<zé;cá»3?÷L¾Gž>ïÅoû_ÅÓô]z…F/þ^I¿—‡åsÖùaÝÒ÷z¯“ísãþé,uÓ튠~Þ›ðE˜µü}3Qâ ®ÂQ �T§ õÕöeZ1-.¶×’¼R;«Ä^-P(¤ ä½ö§ñy.¿6®¯ØßgϞŻロÝ^µ¬Ýe,o9•½'YXug!¤˜VxS1œ¶lšŠpknÝ´â~½_Óë¾²…@¨h}µêÂa©L‹×>ðÍ™î÷ih—öëö¯ãW©"Þ|ýôËxæíBg•Ðò~ „Þ–mÞ÷²¹NY|ýõ×ÙßýðÃùÞLñýwö\_|¯ž†ÚËßË·/wæ{e<Šç§­zÅëXúa¥•Û¬øÎ_8/Ï{óóítŸÏžË‹ïˆ2þhpΨ�°Auº¸¹Ú¾L+<ÓŠÔƒÌR%öŠÂTúîAöËÜù¿,^,íïEAÐU–Ì| ´ªr;»ÿ³ø,5c_¨,.½'g*ûºËëÁÇñp>€[¨¸ç¿p®üõs©Lóý:÷¢déþ´_ïLÞ£WùÅÎé¯Ä7e¿XßO¿°ïE»Û?8u©lNÃÌù·e›÷½l®SéœùÑGå·¸ Óï°ÁJþÝøö¡ü»;ÿ!gz.Ü‹ýþÑzߥ ßç8o›âü\ü˜³ê;3óæçÛË¡2þhpΨ�°Auº¸¹x_Žcøô`Ú´}²]±L+ªW2K•Ø+ ™4n̽n S­uV±\('½þta3¿?«–kµÊÿ¿PÑÌÖ¥Jå?N÷áõNß“ùíWBëJ¯û2Eexq‹ç{ûPêV7ífXt ¼á@(SìÇü>¦eiûl¢åmÒ"ºiÛ¼ïesÕ²H­)ÓßüôÓOù®®–Ï5ïÅ_uÿbÅ9yþÇŽ¥ïÎ3·/·ø½’±3;—åçËsÎmÿˆ0µÎ6…"ŒÏ~˜üÿ¶¡2ÿhpΨ�°A©ÂVçïKѼ{rá^Ì•÷½ßL ”ÆøU<˜U:‹1VµP:_±¿éâæ¢`èZÐì=+~mÍÃ…_bOßÏñèiì7ÿ|Ri.Æ8(þ>½†«‡Béu_æâŠû[î2–½GIÑ%0uø‡É>ßd tÚ-¡Õ›5g©²(c:%o·²¿NùÔÕ6ï{Ù\¥,Ò8kiŒµ4Öo¢ø¾*¾¦cÈí¦PäŸòò³ï…qœ>‰Öî\wèY€1ù^Ⱦ¯-¯ü8=Ïç¾ì{}÷ÜAª/þajm¦Ò$ŸE''©Øî–¡L94¸ gT�Ø T!¨‹ó÷%ÿqE‹–iøqË]ÆÒö÷þbqÛâ1öòVCkXÞßó‚¡Ë¡b‹¿Éˆ¥cg[šµd6˜v1+Ê^|ÐþE4.œeí|é1¯lé—Üâ}³A¥‹ÏÆé€ž‹ÐÄ,ùE´?¸¿âÂaÙä½ûê›ÓiëÏBÅýù{¹|±´e·‹ ¯°¸ãÑ7ñÕl¬£³•ýÅû/w­ò©‰mÞ÷²¹JYƒî§`ˆ7´ðÝЈfûÓdç¥ï…b‚†üµÓ|íÖ;“í»Ñÿïÿeº._.ûgÕ÷Ê úé<6÷Ó×Ò;m)³äÆZÍÎùs“H,Ÿ—gÞf TÞ ®Â�6(U¢êâü}¹,šÔ—Ö’¥@èŠBz®{Ë}þg±b&‘sœ·¿i°ÔGe÷§åj-„–*–réçrôE´—Î*Áó¡^1ûY*×kL;Ÿ~ΦݟO¦¿Žï.•ß´…TºZõKò²ôù¹:ÎÅr ”~å¾7ù¾.>;“çïü~©;À\7ŒY 9ÿÚ÷ñõà î­ã²çŸ¯ì§VNÖxݧ.-ŸÛæ}/›uËBë ²šž‹®4ôMZö,[µM¶n)„ÏÖMÏãoÀGñÕW§³ „f÷—÷Gƒ«pF€ ªÓÅÍùûR„-ó¿æÑÙ…ýƒ¢‰ö|À´n p2Œ§û±w¦I{Ñ ÿ²_JO]Vv)JÁÐU¡ƒ‡§ÓènÒ¥ŸË¼‚›¶[¹Ì*²éë¿‹n{R6«¶[øE7uèžþº=Y­NôfŸ…âWêâoçC¹©}³eþq—Ÿ©bÛˬõÙéÇ+·Ë÷s<D¯s:ÓÎâ2y-¿ùˋ߯µ‚¬Séo¶Õ6ï{Ù¬[©ådLš²™|<¾ò ›×²ÎkýÐ0QL÷>ù¾?xž?dÛMƒúWoÀ§ îÎ`¹M¿kîeáNy4¸ gT�Ø :]Ü\¼/g/ögË\KŸKÃ3Ö× ƒi…oþqçÆÕÒvuUç}«ƒm.ŸÍòX§,RWÚ´]Pš-¶Îël“=Ø8N†ý ê —-—ðË?>œ]f­}Jú£ÁU8£À¥/úº¨Ó¾¬£Îû»meY5Û\>>›å±NY|øá‡ñþûïç·€²qF€ ªÓÅͶ]¨Õy]t—Û6—Ïfy\V©»lÚfín³À­sF€ ªÓÅͶ]¨Õy·­,«f›ËÇg³<.+‹4†ZZ€òrF€ ªÓÅͶ]¨Õy]t—[*Ÿ4kSºØN37¥ñYÒìvÛÀg³<.*‹¯¿þ:»[>—PUΨ�°Auº¸Ù¶ µ:ïï¶•eÕ¤ò9oI㵤YRPTÇ‹ñ´”ÃEe‘fKŸC ÜœQ`ƒêtq³mjuÞ_Ýå–Ê']p§/ZR(T7i¿(‡óÊ"µXK÷¥Æ€rsF€ ªÓÅͶ]¨Õy·­,«&•OqÑ}ÞR×±[Ò¾Q©,–Œ~ñâEÖ±Ža$Ô‘3*�lP.n¶íB­Îû뢻܊òIÞéÿËKZŸ.Ìë(íåP|ÞR×°âó–‚ :þ nœQ`ƒêtq³mjuÞßâBÏRÞ%Iß«îûOÿé?e÷×QÚ?Êaþ3—B ¿ýÛ¿Õ:*Æ�6¨N7Ûv¡¶mûKùÝsŠ‹ò´ü‡ÿð²S—±:¶Ò¨òq÷zЉݼœv;ƒx¯¯ªâ37¿üËù/Ït#ÊKM�6(U ë¢Nû²ŽmÛ_Êi¾•Pša,I³‹¥A§ÓR·™Æª|ÜmC T,©™A¥¡üÔd�`ƒRŹ.6¹/i€ÝÛžâ¸NeGu¥V@鳘Z Í_€§õ©•PZŸŽº¨òq·MPZÒgOk!(75�Ø Ti®‹MìKºÐ-¦ßþä“Oòµ·£NeGµ¥0ô믿Îo-JÇÅ&Ž·¥ÊÇÝŸ^þb4YþøóËøS¾¾ªRY\´KÊOM�6(Ušëâ6÷e>ÚTׄ:•õ–Ž—ÔZ#u)«ú¸BŽ»òHe±jIŸ³ºuU„ºrF€ J•纸})CT¨SÙQé=]¨§`¨Ê뎻òHe±¼¤–huÌêÊ�6(U ëâmîK‡¢,AP¡NeÇvHê~øaöÙ­ê¸BŽ»òHeQ,)h<¯Û"P^Ψ�°Auº¸yû’‚ 40nzì²A…:•Û¥˜™,SUkÍá¸+TiI!£VAPMΨ�°Auº¸¹É}™‚Ò¿eìâR§²cû¤ÖŸBe Z/ã¸+T_~ùe~ ¨"gT�Ø T¡¶Tw*KAP1®PU¦¯òqWÇiçjs�·Ü"¨*§Pu©«Oê:–޽*L.*TŸ£�ØA”Cêú“ŽÃ²#*TŸ£�¸u‚ à:ªBüéåÏñÇÑ(F“å?¿Œ?åë«J Õç(�nM³¤èž"®JQʪÏQ �¼u‚ à&!ÊCY@õ9Š€·.]8¼ûî»ñìÙ³| °µN†Ñï¶£99/¤sÃÎÎhuz1½Ê78Ÿ¢<”TŸ£�xëA@æä›è¶½áq¾"b<z­wb¯{ã|Ýy„å¡, úÅ��À­x=8ˆ{çq’ßÎŒ¿‹/>‹Ã“Ëâ !D™( ¨>G1��l…W1|íf#»˜Ïºj<‹QÊaÆ£<™ëÆÕhÅÁóQÞbç$fþ7“e÷qô~ÿx²m#šY¸3yÜþÜíÔ ¨u'všûÑü!zí½ìï­'qøÇog·ç—Æý^]žeÛV•iç²qÀV:ŽÃîýhììE»÷‡ôö§‚ûÑ=üW¸¸;œŽ²ûAüõ_¥ÇK1! ”Æx½'ƒiëœñ(ž´&Çl#ëªõzøwñdðót³¬ ×ä˜ßy/ºÃ—ÙºY(ÔØ§Ï{ñÛþWñ´ýNììvâù·_,ܤ¤ãõ :»ùyâäu÷÷'ÏÕŒÎ`¡mP& Jöº1UŠ@ªÏQ �[«¸ÀK!ÐqL®Ø¢Ý؉?kÞÎZw»ÑlN¶É.pöb¿ã“Ã<0š¿Jiü]ôîß9=ÎçŒzqr>8 .òóÅlÛKnççŒÝÎÓø¶ÿE|Þ¹{ûO§­‘R‹¢çGkòøÙù£8­A T!¨>G1�l­âî×Ñÿöï£÷y'Z{£ŸÍô³îÅÝòEáD,M[h%eö2†Ý÷ßÂø0º{7„¦3ˆýM|18m58vcoç^tR‹¤,”z'š³°èbU!þôòçøãh£ÉòÇŸ_ÆŸòõU%‚êsÀÖÊ/à&•úF«Ÿ1˜» [÷ânù¢pbUÿp¨•Ùq¼´ìuãÛç§­WN—ù`÷’�èœsÆÙóÀëõLûAôFéžqÞâ°¸}±ôº(eÕç(€­µ"Ì™Y÷ânÅcd-„Þ‰vÿÇ|P?F?umæ-³ñÁšq¿÷]Œó–}Ó–:ã89|­Ý‡Ñ;J-'Šîe)(ÊŽ÷K¡¼…Ñt°è<Êï›¶º­î7“¿úyòw÷&¯é f«eÕç(€­•wiä}£^´fƒ¾®{q—oWŒ!T T»æÅp»Æ£çñd6Ë×^´Ÿ<?×g~²f;ž¤–€Ùy!Ý~íÖ;Ñlw£ÿßÿËt]¾dƒÉÏßÎÆ{™NŸ¯o´¢ót?Ï£3[Ò€õÃú!T7ʪÏQ �[l<zûóSPw~Ãá[¼Ø»àâ¿ˆöÅìcÇól" ¾¦Çþôü¥åÛoG:ÇPʪÏQ �¬°îÅ]ͺ�Ûarì<>íRvæöÛ!„(eÕç(�VX÷â.„&B!àmB”‡²€ês�o B{ÓqEÖຄå¡, úÅ�°ež={–ÿ Z„å¡, úÅ�°%Rôî»ïªÄ•åüUʪÏQ �57}ôÑGñÓO?å÷�T‹¢<”TŸ£�jJ”Í‹/âÑ£Gq÷îÝku_B”‡²€ês@Í ‡Ãì‚K”Õ'Ÿ|2;G]…¢<”TŸ£€RIÌm_VéõzÙ/ëU’Z¥–Bï¿ÿþ¥ç·ÂyçHnŸ²€êsP*Û^Á\µÿ_ýu¶>…B«ÌAéßt  ~øá‡,JÁPúÿeÒyÎRž¨6G1�¥²íÌåýO­|Ò…RZŸÆš'ê µúðósÙ—_~™¯]mÛ¿#ÊDY@õ9Š(•m¯`.ïúå<­+–ÔÅBÔQj™Îk©Ëëy]ÈÒý”ƒ²€êsP*Û^ÁœßÿbÐÕùåúŸþ§ì_APG©‹l1®ÐªqÐÒùrPP}Žb�JeÛ+˜Åþã­Zþëý¯Ù6�u”‚ b\¡åà;)eÕç( T¶½‚™ö~Ü UËòXB�u“ºŒ¥®céœ7? ~ºM9( ¨>G1�¥²íÌ´ÿÅø@-i,!€ºKƒL§s^t:…Déÿ”ƒ²€êsP*Û^ÁLû¿Î¢•°-R·±b\¡tþ£”TŸ£€RÙö fÚÿÔ=beÕ€«�u”ZPcÍAõ9Š(¯f€ó¤sdZÒ,Œl–ï+¨>G1�¥"òÕ pžtŽLc¨¥Óxk©å›áû ªÏQ @©„|5œ§8GþðÃÙXjiIÿ/§ï£×ÚÍ^óê¥ÁI¾mõ¤}�ªÍQ @©ÜVóŸ¿ý4þ]«­÷i|ûÏùÊPÁ8ßü92µJ­„Ò€Óf^¼}¾¯ úÅ�”ÊmU0_:±;y®ÝN ^ç+K@à|«Î‘i<¡´þ£>Ê×p|_Aõ9Š(•Ûª`þó?þ>þs§ÿüûøG-„�*á¼sdj!t÷îÿ5Zÿ·ÿK4&Û¤íV.­ßF·ýÎêûV,û½8§gXîþµ­Þ÷ÙsǨ­¹¿¹rW°KÿþUŒŸF»Ù˜Ûf~É_Ëxƒ'íh®Ü&-¢7J¿€¼ž<åƒÅû®ñãHú; ÚÅ�”ʶW0U°ÎwÑ9ò‡ÿÏâÑÿýÿO£È2œÜxؽw¢Ýÿ1ÆG_Äþþ§1½ÊïM^ưû^ì4ö£<ýËñh½N+;wâ~ï»üñòívÞ‹îðe¶æÔÑOASó 'óϾ®óþ~'ƒƒiÈÓÜÞð8__„:Åkù9{“Ûh¶{1œ=Fdíuc¸ü²ŽûÑnL¶ï<ëŒdäû ªÏQ @©„|5œçZçȬÎE­vòpe¹•Ìø»èÝ¿;‡Ñ;JRÂ-mæÄ ÓŒV/Fùš«9ïïóõg^ÿÒky=ˆÎ>y ´êue3×ÒéŠ|_Aõ9Š(¯f€óÜj 41>êÅýFÑul“д…Ó©s¡¹VNS!à|Žb�JE ä«à<ëœ#_>އ³n^g¡“<Î[ý$çBiüž£ÞüëØ?LþÛÐi(µÓlG·?œl™,‡SÅëL]ƺџu-çsP*·UÁ4í<@õ¬å³H.,KPÖêfi›UÐÉ0úŸw¢•™Ù¶·e²ñ~æ_ê×2žl¶¿zPm°‚£€R¹­ ¦içªgsäMµšukÄÓ¬ÅÍ&ºŒMÌÆ2ºÝÃåA¥O_Ëéë}‡ËƒJ „€Å�”ÊmU0M;P=×:G^k ¡"p™ÿ»Åf<ú&¾šÍVv6ÐY¼ÿ¬µÿ>{ý;±ÛL^Aa9Zõz“ù@èUŒ¾ú&FEVt&Zºÿ¾¯ úÅ�”ʶW0U°Îwé9rôE´—§QÏ•bPæœü*:ƒŸ§÷eò0ea@æÓéÞ­ãyÜ¡Ëtª÷דûïí?Í”å@'Mÿà‚*å1kþýø0º{ÉëkEçéòB§SàO§×ŸoÑ”äP6í|zŽû±ß?š¶žZ„NžGçÞÁÚ­f}_Aõ9Š(¯f€ó\M[Ó¤íV.­ÏâÏ‚”÷eË|‹™ãö»Ñn6Vo÷›¿¼ø¹.l•4qÙkûûñh½Nkõø@³×ü*Fƒ^tZwVl“–_Æo~óËëç–+t£NÛÕæ( T¶½‚©‚ p>çÈòPP}Žb�JE ä«à<Αå¡, úÅ�”ÊmU0M;P=Αå¡, úÅ�”ÊmU0M;P=Αå¡, úÅ�”ÊmU0M;P=Αå¡, úÅ�”ʶW0U°ÎçYʪÏQ @©„|5œÇ9²<”TŸ£€Rùj8sdy( ¨>G1�¥"òÕ pçÈòPP}Žb�JE ä«à<Αå¡, úÅ�”Š@ÈW3Àyœ#ËCY@õ9Š(¯f€ó¤s¤¥< PmŽb�JeÛ+˜*Ø�çsŽ,eÕç( TB¾šÎãYʪÏQ @©„|5œÇ9²<”TŸ£€RIÌm_�XÍ9²<”TŸ£��¨!Dy( ¨>G1��P BˆòPP}Žb�� „å¡, úÅ��@%!ÊCY@õ9Š�€JB”‡²€ês��• „(eÕç(��*¡Z!Ä÷Ñkíf¯yõÒŒÎà$ß¶zÒ>�Õæ(��*á¼â§Ÿ~Š>ú(Þ}÷Ý| o›@ªÏQ ��TÂr1³ (­OaÐ×_ßÃÛ&‚êsP1l‚?êEkåsæËn'¯óm¸qé\›¤ èÑ£GÙíôï³gÏ&kÇqÜ߯üyyyiý6ºíwVß·biÜïÅÑ8=ãòwÏn´zß§;V|7\ñ{èÒ¿£Á§Ñn6æ¶™_ò×2ÅàI;š+·I˃èÒ—ÔëÉS>X¼ïß_éï€js��•BˆÔ(ý›‚  ÍŒ¿‹Þþãx2E–áäÆÃnìí¼íþ1>ú"ö÷?ÁèU~oò2†Ý÷b§±ýãé_ŽGƒèuZÑØ¹÷{ßå—o·ó^t‡/³5§~Œ~ šš18™öu÷÷ã8LCžæ~ô†Çùú"Ô)^ËÏ1èÜ›ÜnD³Ý‹áì1ò k¯Ãå—uÜvc²}çy\çgTŸ£��(­/^Ä—_~9 ‚R±4fÐÚ²8µÚÉÕåV2)`º'v£w”¤"„)ZÚÌ;‰A§;­^Œò5WsÞßçëϼþ¥×òzÝU-}ò@hÕëÊþf®¥Ó „ úÅ�”ßø(úû{“Êç½I…øç|åEÆq2ì6¯o´¢ót8©V¯hòÿ›¿œkª?©p÷ºçw »´Iý«õG3ýBÛùßâ‡O¢•~}mƒÁçùë¹­î7×ú5`›¤ ¨×ëÅÝ»w³å“O>ÉÎÅWvÝ@hb|Ô‹û¢ëØ&¡i §SçBs­œ¦BÀùÅ�”ÜËöžDÿðwÑžTÊw;ƒI5øbY~÷~tSÓúã8ìÞÆ¬2]Œ1qZ¹~=èÄîÜíùî³Êø™JöYãáñÛþWñ45ûÏ/,¦]„@y—€Kƒ%€íUÌ–‡¥P(…CÉ:!ÄëÁÇñpÖÍkâL 49¯<Î[ý$çB)è?ê=Ì»ŽýÃäÿ·†R;ÍvtûéÇd9œ*^gú¢ýY×2p>G1�Õÿúyy ”ñ0_ùFw¯1[7 iN/–o/^<ä•ôµCœÅígÝD¿÷7Ñi½ûý£Ó �2Ë3†MŠ^´^ ”λs­;³e)JçéåmVçO†Ñÿ¼­È̶½Ý@(“÷3ÿV½– Õ+8Ѝ†µ¡U¿†žÒÜZ 4©Œ§nkŸÿni S� )`81lµuBˆ›j!4ë.Ö:ˆ§Y‹›Mt›˜eT´|Mξ–Ó×û$—•+8Ѝ†µ¡¼R½ÐÅkº®ÑîGV¥¿õ@hþB€Uf ;ǵBˆ3вUP¸ÌÿÝb3}_ÍBþ³Îâýg­ý÷Ùë_þþ[„V½Þd>z£¯¾‰QñÕx&Zºÿ!¨>G1�Õ°v TüJÚˆæþÓ¬b;=ýæŸO*ÉÓ©W@ùÔÂ'‡Ñk§¬S3û4ïÓJzº½V(´MÇ#*¦-žVÌ×Ù€z9Ža¿{:Øÿdi´:Ñ[š"þ2—†£/¢½<zvŽ/Æ…KÁɯfßSy˜²ðCÂétïÖÇñ< nŠÐe:ÕûëÉý÷òNšþÁR8³hí¿/º=Ï&HH_K2ý¾™oÑ”äP6í|zŽû§Ý–—¡“çѹw°æ!¨G1�%WTz§ëÍÒõ*FƒOÏÎ2–‡J§UT„SÅû^¶.«øþ&Z³Á;SzoiÎsä¿âŸ5Û?þ>Ÿ!­X7_QØipÿ¿ˆýÞáé¹{<Šç­hdAE¾n é<z¡¥óð™¥õYüï ß)ËË|‹™³!ÖÂv ³T®Z.izÙkûûñh½ÎäýZ¹]ñšÓw_/:­;+¶IË/ã7¿ùåŠõsËÚ­aBPŽb�ª! snfÊö·Ûkú+ïâ�[,¿SË“…sâ«8úâ¯âÉlLœõ!ÊCY@õ9Ѝ†ÉÅÁÃ^]+cÉgk>Žþèåt–5¦‘¿ž“¥ÁJÊh©%ej}yðlÚ}i<ŠÁ“vÖ]*»¯ÑŠƒçE×®¼kSqßîä|÷ûÇ“mÑ,ºj-µÆÜí<o{û§W,‡W>W¦¿£”TŸ£€-0Ž“aïô§¹½µ»må?s}TÞx½'ƒi€StßÚiÄ^÷0^ÿ.žäcìŒGÏâ ë‚t:VÍì¼ØØ§Ï{ñÛþWñ´ýÎbw£<*ó?#»þ1×#„(eÕç(�€mWLm¾b ™b:óÓñó@h¶íòí‰<šDÿ4\J-„®×XQʪÏQ ��[/ïZ»jPá|–«7 „²ÇØÍ»•½Š£ÞÃhdÝxu«*eÕç(�€m³4ÎÏlÙëÆ·ÏÓÀûË÷M»“-Œ#t•@(›Qkn¯ã~´ó3z­'½ÊAY@õ9Š�`ëüý4îOÑJçä›è¶šq¿÷]Œ³°¦Íý§1ãäðI´vç€.º—¥ ( ÎBE7³´M å­Œ¦30¾Ž“ÁA4wîE'«h]BˆòPP}Žb��ØBãÑóxÒÞ›;;{Ñ~ò|:ËØò dÍv<Œ&Û§V>éöÃh·Þ‰f»ýÿþ_¦ë––æD«1yÌn?†??_Ñir_ï0Œ!T]ʪÏQ ��¼i ¡iëŸi§²·EQʪÏQ ��¼“<>íRö !ÊCY@õ9Š�€JB”‡²€ês��•BKy ÚÅ��°e~úé§ü�l+��Ô@¯×‹áp˜ßZ-A}ô‘Ö�„��X´Ü-ÄR¾eÙ×_­ÿðÃó5‹RPôèÑ£l›wß}7ž={–ßÀ¶�°`Uà@y,—Ï?üwïÞÍÖ§e¾;X ~Š (ý{Y "�¶‡o{��„Êm¾|^¼xï¿ÿþ, JË'Ÿ|’A©%Pººˆ ‚�XæÛ�€óå3_>EëŸùå_ü‹‘ý›‚ ƒGpßö��,HaåU”Oj T„@ËËßþíßfÛ�Ày|Û�°  ”W*ŸÔ%l>�Z^Rw1�¸ˆo{��¤@òJå3?ˆôyKšy �ÎãÛ�€)L ¼–ƒŸó–4¾�œÇ·=�� R˜@y­*Ÿ4‹ØüÒëõ²…›ò:F½ Ûò²ÛL¶z®ûÜã8ö£ÛÞ;ݶъNo£q¾ °Õ|Û�° ]8R^ʇËãäðÓhï÷bxR¤?¯bôüãh5Þ‹îðe¾Øf¾M��X p(7åÃåNbÐyÁÏùí©ñÑïâàÉ7“{B��,8”›ò¹-¯bÔÍF4;Ï× QN£7ë¢u'ZßO[èŒzÑÊÖË/ã7¿ùåéíÝ_Eï³ó»…­Óíõ »³¿ùŸ£ÝíF»ÙXxœôšî÷¾ =ƀķ �� Ò…#å¥|nÇxøEü¶ÿU<m¿;»\–ÈŒ¿‹Þýf´º©Nê²õ$Zh´ûqœmðcôÓc5ö£œ"™ÔЧ9wûe »ïÞ~=ˆÎîüß_n ½íþùšyéùöb¯{(2¾M��X p(7ås›òÐf@h<ìÆÞÎƒèŠ ó€g¶nù±–oçƒG·ó@è*ƒUO¡fty{¦ñ(ž´¢‘µÚ‰FëIÎÆ¶o��ÊMùܦu¡b&°ù@h9 ¹í@(¤š18Çø¨÷{±ß?ÒBÈø6�`À¡Ü”ÏmZ7*˜ÅîZÙºå.b·}½Önì´z1ÊîÍ»¬ÍnÛη �� å¦|nÓúÐt ¡;±Ó|ýÑ«Éí£èïß›úœ�¨ñ0zG/ãdØ;z¯ÃWÓ@(Ý^/zG½‡y÷° ý˜It?º‡Ç“§æîúdµçÛ�€‡rS>·dif°uÆßžÇ“³ŒM[îœ>Ö¬kYÒ¤h²íÁßÇàó‡Ñlw£?<Î[íE»ÛŸÎTv®¼%ÐÎ^|ÐþE4šíèöÑOáÓÂs6&ݻ䱀mâÛ�€éⱠƣ§±Ÿ]LO.š{‡g[=d-4ÒÅù9—Ý_RU)Ÿz˜¶ê¹™Á˜¯ÐÚàø6�`A5‡bß¼õê‹ì…s3/.»¿¤ªQ>uqƒƒÇÑ;z•ß¾¢ñat÷v£¹ÿ4Fãé>W™Fàmòm�À‚ªZQ~Ç1ìíG3 ¯ø9˺ŒíF«÷}¾àfù6�`À¡Ü”�7Á· �� å¦|�¸ ¾M�`ƒÒ…¥ºK]Õyßê@ù�p|›�ÀÕéÂnÛ.RBlŠòà&ø6€ U—@ˆMQ>�Üß&�°A¡ê±)Ê€›àÛ�6H T]!6Eù�p|›�À „ªK Ħ(�n‚o�Ø Pu „ØåÀMðm�$ª.›¢|�¸ ¾M�`ƒBÕ%bS”�7Á· �l@¨ºBlŠòà&ø6€ UWÝ!K¹�xS¾M�`ƒêta·m©uÞ_C¹)�n‚o�Ø Pu „ÊêuŒz²}8oÙí &[UWÚ�xS¾M�`ƒêta·m©uÞ_C¹)�n‚o�Ø Pu „ØåÀMðm�ôfv¯bÔÍÉcì4÷£7<Î×.»?b<zûÍÆäuìE»w'ùúëÕÇÅû6Žãþ~4Òçê¼¥Õ‹Q¾íÉðïãóNëœíw£Õû>Û2â8†ýn´³Ïc~³Ýþpásùzp÷öŸÆhœ¯H^¢³;÷¸³ç¿ÈŠ®e»Ìõ%žÇ“öÞâ6óKö<“ãlðéâë^XæöqÔ‹ÖÂ}Íè ®~Ô¥¿€7åÛ�6èÍ.ì¾^kwvqyv\”Ëî_º ^º¾ªôÛ¤Îû{᾿‹Þþãx2Å|&3vcoçh÷Ì×Ì’í¹í‹ÏÝ{ѾÌÖÄø(úû{±ÓhEçi�G1xÒžü}#šç³Pèõ »;wâ~ï»…çø9_¬X‰ã~´‹Ï‘9yUaiê4b¯{8yžqœ V„®+öqæÇè·ß™lƒ“+½Ò™m;Ö�x;|›�À½Ù…B›´µÐy² ä´ÅËø¨÷é³·|aɃèRù*Žz£qnÈso²íiÐ4 „&»soò\?gë¦ÒãþÅÕ[Üd­‹æ[*MÏs&HÍö³Øþdòúš“ײÜÒgyçå³V+¦ÕB�Üß&�°Auº°ÕÇ›B/cØ}oò8ó-† KaÉø0º{ØiìGÿøl‹™iË£h´û‘"ÍÔ¼Óþuü*™ÍÇѽšnø–¡âygVBËû) ü|›�À „ªkۡ׃ãá|‹ž…@(ïµ²ËÔRXRŒÿs^—Å¥û³@¨3ˆWy ¤Æý^e/âf¡¬kÜý;“×¹ín?†E+§…@h¾%ÔüxG!�ÊÏ· �l@¨º.Ûߟ~ú)>üðÇùšêX/*ºnÍ/·½žu‰,Æÿ¹á@(SìÇü>¦eiûl¢åmÒ" ¼|›�ÀÕéÂní}).ð‹‹æY°ÆŒT¿ùËXœ¥iþÂ|½YªNÝšV…—K¿J ‚>úè£ÙkX+*U^g²?½ýéP“¥Ñ:ˆ§³q Ò{Õ;Ý×ùÁ˜'Úåñm.—þî2·zË]Æfãúc ¥ñ‡þ!Žn4:Û¨Õýæô3´ÔBhÖ’¨q?º‡Eùh!@ùù6€ ªÓ…ÝÕöeÚòât|–+ÌHU´Ú˜®0KÕLDÌ… W±¼¿ËAP±\½ŒaïIô—µ2™b< #v[Oâ0uU:ù&º­:L÷9릴[Çqؽ¥ðe ­ d.·¼okY„Nƒœ7Tº–Nƒ²Å@hbÈü"ÚÜ_#š|Ö¾úætÚú3Pq>KßrË¥å@(»½<øôâ>ŽGßÄW³±ŽÎB‹÷_îZå�K|›�ÀÕéÂîjû2½(..¢×Ÿ‘*É/¨gêW›¥ª‹{íOãó,\z½£õ/È“bÏ ‚Šeí.cyË©ì=ɪ; ­V¦K "†Ód¾…InÍ­›BWo”¤×}¡ÑÑ^Ù²`dþ}.‚ªÉûpiç'?m!5ßBgÇýýØ] ðNgË[gÓçç~ì÷¦¯g9JÓÍß›|_aÔäù;¿_C¨˜v~bÖÂiþµ/îãëÁAÜÛš‡PËPúŒ>¸R9]Z>�°ß&�°Auº°»Ú¾ÌBWè^”Y „®Øåh*µ2z]¬OÀ_SÚß‹‚ b¹V ´Ü %™ÝÿY|–Z®,t9ZÉÒæo3š¶ŠYÞ×Ù2{m¯b4ø»è¶Sw¸Û]Òå¯ÑêDo$å-vf;ÿ™ÇÉà`Ö½îÌ? ŠÏT±íŠeöÙŠ׉ÖÊñ&K¾ŸãÑ zWê긼\­œÒß�À›òm�T§ »‹÷er±ÿôàÌ…õ4ºÂ�Ä™¥ð#JæÃ«îOƒ�ßëÆ0% ³.G«¥ó¤×ÿî»ïÎöåM–Ì| ”ÿ!ÄÊÖ¥Ðì§û¿ðz§ïÉüö«¡UÏ}Ý…Íñþp|›�ÀÕéÂîü})ºt5¢Yt›IÝrš B©ÛѯâÁ¬{Ù´Òò<—)ö÷Ù³gC×j!4{Ïöò®MùKy—ºi»Ó÷sÚeêÏãt@êâïÓk¸z+¡ôº)/åÀMðm�T§ »ó÷%ïê³¢EË4ü¸å.ciû{±¸mñ{y«¡5,ïïyÁÐåÐr¦|̜٠ØÓõ‹³Œ¥®XŸ®˜e¬èVµ´ gY;_zLÊKù�p|›�ÀÕéÂîü}¹,: mn~Pé³³T¥çº·4(ñécÌOû~±óö÷Ë/¿Œ»wïf÷§åj-„–¦8ß:}.ëHù�p|›�ÀÕéÂîü}™ë2Öîå³5MCÓ1o®0#ÕºÓÎOóÌ,U'ÃxÚ¹{g¦¡/º¥–8ùTï—¸¨ì^¼x½^/ †®<ìÅÑåOýÖ ÊMù�p|›�ÀmG ”œAj¶Ìµô¹tFª3³5]w–ªÅY¨¦0Ï?î|‹¤ÕÒv—IÁPZªf}cs”�7Á· �lP.ì¶í"µÎû+p(7åÀMðm�$ª.›¢|�¸ ¾M�`ƒBÕ%bS”�7Á· �l@¨ºBlŠòà&ø6€ UWÝ!K¹�xS¾M�`ƒêta·m©.Ê€*S“€ U—@�¨25�Ø Pu „�€*S“€ U—@�¨25�Ø Pu „�€*S“€ U—@�¨25�Ø ÐÍxñâE ‡ÃüÖí�U¦&�$zs?üðC¼ÿþûq÷îÝ|Íí�U¦&�$z3_~ùeö¼=ŠŸ~ú)_{;B�@•©É�À „®'uûðóçìõzùÚÛ%�ªLM�6H tu©‹Ø»ï¾›u»íqƒæ „�€*S“€ ]Mj ”ž'uK­„6I �T™š �l@h=)üI!PzŽ4nP„�€*S“€ J¡‚¥º �@U©É��¥UtKHoº‹�@„�€ÒISȧ.biàè²t�¨�P*_ýu½ÿþûÙŒb��Ü<�PŸ|òIÖEì£>ÒE �à-�—ºˆ¥A©eгgÏòµ��¼-!�`£R�TtKÁ��oŸ@�ظÔU �€Û#���Ø2!���€-#���Ø2!���€-#���Ø2!�`…ã8ìÞÆÎ^´{ˆAo?š;;±Ó¸ÝÃÿ£þãÉíF4;ÿ[üñðI´“ÿ·?Áàóh7±³s'ZÝÿ#þ8ìG·½»íã¯Zw&ëw¢Ñú8ž^åÏ�À&„�€sœÄ ÓÌC ãˆã~´;ñgÍûÑéOÛïÄÎn'¯#^:±›…@ßLþêÇè§ûþì_Gó_§ph'vš£?z'ÃÞ40ÚëÆpœ? ��·N �œ#„výoÿ>zŸw¢µ—‚Ôº§¸o>jF§?ˆ~ïo¢Óz/öûG1~=ˆÎîNìv1ÙlbÇýýhì¼ÝáËl ��·O �œ#}²n^øü‹AŒf­zVB©KY+:Ÿÿ.E—°3Ð\x48É×��pÛB�À9CŸEç´ZyÎk!ÔØþ±>c��›"�Îñ2†Ý÷b§ñ0zG¯"F½hÍBŸÅ@h<ìÆÞθßû.Æñ}ôZ»Ó(„¦c½ŠñèY´Þ‰fçùä��Ø�p®ñèiìg³†íLgëü>†Ãÿ­ìöti´žÄáñ÷Ñßß›[wO‡Ç³BÖñA1ûØÁ³¹®g��l‚@�¸†i ¡, :¹ ÝY1†��›'�®á$§]É.RtÛ �”‰@�x{²@h/ÚÝ~ /jI�À­���l���À–���l���À–�3/^¼ˆ?ü0¿�@] „�€Ìp8Œ»wïÆ»ï¾›ý�€ú�Ñëõbgg'k”Z �Po!�¨¹‹žtߣG²0èË/¿Ì×�Pw!�¨±gÏžeÏ*_ýõ¬‹Ø?ü¯�`„� ÆRسªõÏ'Ÿ|’­ÿè£t�ØB!�®- –r-óRë b}j ôÓO?eËû￟ÝN÷�°B�\Ûr�Áf-—GÑ:¨X~ùË_fAP „t�Ønjò�\›@¨\æË#u›ƒŠåßÿû¯‹��!�®/ ”GQ)ðI-惠ùEë ��Ô丶.PEyôz½…�hyI]Æ��Ønjò�\[ (T—µ*–�°½Ô丶,PEÐ3üÌ/)(zôèQ6åüò4ô��l5y�®-… ”Gú¤.a)øIáPšZ~8æ[��À”š<�×&*å�ÀºÔ¸¶:ÿüí§ñïZ­hý»OãÛÎWV„@�€u©9pmu ^:±;Ù¯ÝN ^ç++B �ÀºÔ¸¶Z¶úÇßÇît¢óŸÿ¨…��5¥æÀµ ÊEy��°.5G�®M�Q.Ê�€u©9pmˆrQ��¬KÍ€k@”‹ò��`]jŽ�\[ÓÎ�° Ô¸¶:¦�`¨9pmµl!dÚy��¶€š#�×&€(å�ÀºÔ¸6D¹(��Ö¥æÀµ ÊEy��°.5G�®M�Q.Ê�€u©9pmu L;�À6PsàÚê@˜v�€m æÀµÕ²…iç�ØjŽ�\›�¢\”��ëRsàÚå¢<��X—š#�×&€(å�ÀºÔ¸6D¹(��Ö¥æÀµ ÊEy��°.5G�®M�Q.Ê�€u©9pmˆrQ��¬KÍ€k@”‹ò��`]jŽ�\›�¢\”��ëRsàÚå¢<��X—š#�×–K¹��X‡š#�×&€(å�ÀºÔ¸6D¹(��Ö¥æÀµ ÊEy��°.5G�®M�Q.Ê�€u©9pmˆrQ��¬KÍ€k@”‹ò��`]jŽ�\›�¢\”��ëRsàÚå¢<��X—š#�×&€(å�ÀºÔ¸6D¹(��Ö¥æÀµ ÊEy��°.5G�®­zÄ÷Ñkíf¯{õÒŒÎà$ß¶zÒ>��À:Ô¸6D¹(��Ö¥æÀµ ÊEy��°.5G�®íò�bÇýýhL¶KÛ®\Zÿ-/ÛfniÜïÅÑ8=ör÷¯Ýhõ¾Ïž5F½hÍýÍÕ»‚íZ¶ÛÄëüÞˆW1|ífca›Ó%-ãQ ž´£¹r›´<ˆÞ(=êëÉK~°xßn'§O¸–ôw��°5G�®íÒ�bü]ôöÇ“Á(² '7vcoçh÷\o›t{4ˆ^§;q¿÷]¾íËvß›¼Ž÷¢;|™­9õcôÛïÄNó 'ó¼®"̺ÁÏùºd'ƒƒiÈÓÜÞð8__„:Åkù9{“Ûh¶{1œ½†<lÚëÆpùe÷£Ý˜lßy×ÉH �ÀºÔ¸¶kY žKZí¬Ú&…G÷ïÄNãaôŽ^MV!LÑÒfÞI :ÍØiõb”¯¹ª×ƒNìžyìüqϼþ¥×òzÝU-}ò@hÕëÊþf®¥Ó „��X—š#T@ºÈ³”gáÔµßëBã£^Üo]Ç6¶^š:'jìGÿx¾)@�€ÍSs„ p‘WÊbѺïÇëÁÇñpÖÍkbEسÎ6S¯â¨÷0ï:ö“ÿßv tJí4ÛÑí'Ï”,‡SÅëL]ƺџu-�°yjŽP.òÊCY,Zçý‡ñÿýý?cw²mÚþtY„Rørñ6™“aô?ïD+2³ín7ÊdãýÌ¿†U¯å‚AµB��lš#T€‹¼òP‹Î{?^¼x_~ùe¼ûî»Ù6ßý¯¿º‘B³îb­ƒxšµ¸ÙD—±‰ÙXF÷£{¸<¨ôéö§¯÷I.*-�`ƒÔ¡\䕇²X´ü~üôÓOñÉ'ŸÄÝ»w³%ý?­;ãÜî`sÎlS.«ÖMC˜ñè›øj”›NÎB‹÷¯0ÅW_Îvv&*îÏ^ÛòTôËЪכÌB¯bôÕ71:}Â¥@héþKø|�°.5G¨�yå¡,ïÇ?ü}ôQv;µ J­ƒR+¡Ìè‹h/O£ž*sƒ2¯³MœN÷Þh}ϳ`§]¦S½¿žÜoÿi ,Biø‡P)¹÷8úyh´MŸÿ^ ƇÑÝkÄN£§ËcN?:¾ES’BÙ´óé5ÞýþÑ4„Z„NžO^ÏÁÒ,eçóù�`]jŽP.òÊCY,JïÇ£G²ßÿýxöìY~Ïœ¼5MÚfå’›u¶Éì8†ýn´›ÛíFë7yñã\Ö*©kVþít)ZGƒèuZ«ÇJ¯% u^ÅhЋNëΊmÒòËøÍo~¹býÜrfÚúó¥í�`jŽP.òÊCYL¥à§(Biàh6Ïç�€u©9B¸È+m.‹Ô¬×ëÍ‚ ¢‹å¡<��X—š#T€‹¼òØÆ²HƒB§ð§(:…BÅ@Ñ>›å¢<��X—š#T€‹¼òئ²HÝÀæŠNÝÄfEç|6ËEy��°.5G¨�yå±-eQ þ]9PtÎg³\”��ëRs„ p‘WÛR~øáZEûl–‹ò��`]jŽP.òÊCY,ò~”‹ò��`]jŽP.òÊCY,ò~”‹ò��`]jŽP.òÊCY,ò~”‹ò��`]jŽP.òÊCY,ò~”‹ò��`]jŽP.òÊãfËâUŒŸF»ÙÈwgçN´žÅh<¹k<ŠÁ“v4³õ“¥ÑŠƒç£HwÅëAtvóõ“e·ó,¾ï?žlÛˆfçyœ¤Ç¿}òMt[wb§¹½Á¢×ÞËþ®Ñzßô»Åsì4£38Iϰ¶ôw”‡ò��`]jŽP¥¾ÈE? h¶{1<É"‹S—Ý? /v¦Åð8__N7Zãaôž "‹`Æ£x~ЊÆä}ÚëÆëáßÅ“ÁÏÓÍFÏâ :;ïEwø2[W„Bv?þiøEü¶ÿU<m¿;»xþíâíÁë¹í[Oâðäu÷÷'Ï• ãüÿïD»ÿãô±¯@�Q.Ê�€u©9B”ú"oÔ‹V s²eE “Ëîï£×ÚÍïO­]‘ò‹²z«e1þ.z÷8sÆG½¸ß˜{ò€çôý:‰A§9÷·K·gÛ?oû_Äçû±·ÿ4kôzЉÝk´JŠr³”g�€u¨9B”ú"O ¡ô2†Ý÷VB1>Œî^㡬[Zçoâ‹AÞý,»ëÍ!ÊCy��°.5G¨�yåq£e1 i––½n|û<…4Ë÷M»“eAε[ÛŸÕ‡ò��`]jŽP.òÊãfËâÇè§q~š£?z‘ þÜŒû½ïb|Üv£ͬ[×8NŸDk÷aôŽ&ÛM]ÈÒ뙆<—By £Æý^_Ǩ÷`vßÖB ÝW,³÷´üÒë�€u¨9B¸È+›.‹ñèy<ÉgýÚÙÙ‹ö“çÓYÆ–g k¶ãÉàû8JANê~÷ÁÑjL¶ïöc8üo FcîÿÙíl é—§]óÒÒhEçé0R¤…P}(��Ö¥æà"¯<Ê[ÓAÓð'%JË·Ï'ªå�ÀºÔ¡\ä•G©¡ƒÇ³.egoŸo¥–CsÓÚ¯éöÞÅÙèvZÝè¥.qçÝ^Z¦³«u£ÝlFû¯¢•u·»­ƒgy‹¬ ÌF¿ÁÏ©YW ž´£¹;yŸ}|úXÝo&ïzÞU¯xî[în–ž��Ö¡æà"¯<êXY ÔlG·?íBv·ú~äã ¥A·‡Yˆ“Á´|»±ýãÉŠ| íF»ÿ4ìÆ^ hRw»l\¦ãöö£9?P÷J/'Û=‰þáï¢Mûÿ‡ø>ë¶7åÏ; –^Ç-r®��`]µ¬9N+ê–ª.œå})e±èvß¼•P«£ìvÞgùvÌ,ͬv¶kÜr t…ÇzÃî{sÐâ Ýg^Ç-òù�`]µ¬9Ö­B¼M|3«y_Êã&Ëâ§Ÿ~ÊÿW]·ûÙ¼é@è ÁÍÂc-@!��ª§–5ǺUˆ·©‚ïbf5ïKy\Të<Ãá0>úè£Z”ëíîÃÛi!”º”çkÎ%� fjYs¬[…x›*ø.fVó¾”Çyeñå—_Æ£Gò[«}ýõ×Ù6é1Ò¿Ïž=Ëï©®Ûýlæ]¼š18y'ÃÞtZþÆÃè½<½=yMY7°WÓ'ÝNAÎË,*Æz£çi@è| èˬ „fc-ß�P~µ¬9Ö­B¼M|3«y_ÊcUY¤?i}Z~øá‡|í©ü¼ûî»Ùý~øa¶}]Üîgs'‡Of;:zûY”nÿ.z¿Þ‹f»ýáqâìE»ÛáÉ8o!4Ù®ý0𩼭8x>º`@é${òò$ýU ‹uYè3·Mv[ �@ùÕ²æX· ñ6Uð]̬æ})å²HÐÝ»w³õiI]Á’/^D¯×›Ý—Ö×aÌ eUúlží2vY¸TÌ*v��åWËšcÝ*ÄÛTÁw1³Zz_,åY )ôyÿý÷ÏÜÿÿãÌ‚ ´¤P(mWWóïGÙM¡TF×…^âàa/ŽÖšE>„Òs­3ƒÙ ªRy��°Yµ¬9Ö­B¼M|3«y_Êc¾,Šñ€–—õ¯þUÖM¬ÎAP!íoie­zv£Õû>¿Ù‰Ýf;ºýá­|ÞD „溮ݢR—��¥RËšcÝ*ÄÛTÁw1³Z%ß—Q/Z“×^ûÊeÝinBzíÉ'Ÿ|rvŸò%µ Úi)å�ÀºjYs¬[…x›*ø.fVó¾”G*‹Ôú'ý{ÑR‡ÄÖ‘ö•òP��¬«–5ǺUˆ·©‚ïbf5ïKy¤²XgI³Šmƒ´¯”‡ò��`]µ¬9Ö­B¼M|3«­|_ŽûÑΦß>oy½QÞ'ëdýÏ;ùtÝ+–V/FÙ†ãɦýè¶÷æî?¶{&ÍrïqôG¯òÉÜ@ºÙ2÷üçZžÒ{²,w%bð¤=&|å2}žñèy<YxÝKËl¿^kwá¾ÝÎ`òJÖ“¶OE§%M!ŸÆ*–ùÙÆÒR§éåÏ“ö“òP��¬«–5ǺUˆ·©‚ïbfµ³ïË«8êý*öŸ<Ñü FãÃèî5¢ÑîG1”íxô4ö›ÉcìE{~ûlŒŸFìucºêUŒú£¹s'ZßçÐdÝàÓh§¿oÄ …²Ázw¢qyÖ¥qœ bïÌúKdáV#šçKƒýþƒÎ½ÉkŸÜ×îÍ…Ry¨SÌàtò<:Å>öOãÌ>Æ“§ÜÆÎ½è ~Î×­ÇgtÑÍ¿g»ÅåšÓƯe“Ï}3Òë�€uÔ²æX· ñ6Uð]̬¶þû2½ µx½ûw&¿"øÈÂ’Ó˜ÆG½¸ß8?äI-tfASeAÍrˆ3yÜWhq“Yš j¦xž3Pçîy«Ÿb:ñ3-}–öqÞôoÖiÅ´Ègt‘÷£\”��ëªeͱnâmªà»˜Ymý÷e1»±7ùÛùC3 aÉËvß›<Ï;Ñîÿ8½^Þòh§±ýãñ4¨yç‰Î¯Rë½Øï¶ÀyPñ¼3«¡3û)zë¼å¢<��XW-kŽoZ!^èb3ßý¤0>Šþ~«d¹Kî²û¯h›*ø.fV;÷}y=ˆƒ‡ó-zæ¡¢[Ôª.S aI1þÏy]b–îÏ¡N ^å-£w”'t“PÖ5îa¶Ív7úÃ"îY „N[B-w$zënäý˜3×í—ƺêM»2Nž§ÑŠÎÓáäSºbLªÖ_ÆoÒg%¿½Ûù,>›»½¸\Ô%lù±Äg½_eAäêÛKËÿít|®ÝöÇñW­ôy݉Fëãx¾0×›I ��ë¨eÍñÍ*ÄK•þ3]U&²‹Ì¢¢¿ââ²û¯èÍö§Z¶i_¯âÜ÷¥hA3û¼M—[ „&ÇÆ,@-ƺÑ@()öãì~žüýö;g·½Uoþ~¼ŒaïIô— ’~¦Ûß Y÷ÆÝûÑ=LáqvïO>s­Ûò×—»8În/µ5ý,œÓ:nAÑ’î½è_NnŸÍåÛÅcåÇMjáöOßN[Ù¥Ïd3 Èþò4Ô*ÆÂº>Ÿ��¬«–5Ç7­k!´9.fV;÷}™\èžßBhòQ|«]ÆŠ°tnŒ¡4þÐäbý&¡ÙØF­'q8;––ZÍZ݉V÷›Ócva „nƽyhsy ”VçÃÀâóY¬[~¬3½xœL? ë„÷ŧŸ›åÏÑâcåPñÙױ(½9ŸO��ÖUËšcÝ*ÄÛTÁw1³ÚúïËâ…îìBù•žÜ—KÓ¤Ó…í,Jæ™öø7»à=Ï«}õÍéŒgÙ…ò|pSÜ_\€/_¬/Bùíå}óû8ÅW_&—àSg¡¥ûÏã3ºèÆÞ3aÉy–Ë>¹$x9óØe „®òÜëñù�`]µ¬9Ö­B¼Müu÷õÅ‹ùÿ¶Ãê÷erQÛþøt*øÌôB÷´EÐ8NŸD«‘ºN]gÚùÓ±ZZè¤.9»K=ÏZÆ­sQŸ.”ïŸF½¥iäïdѳVN­ƒxº<†Ð¬«MÑÂiþµOÌïczŽ{©«Ît¼–Å ùi+§Ëƒ¬í:×qcïÇŠ°dµ¹nX³ÏßtÝr±Ùcyì²By ¡3ƒ¦_ŸÏ'��ëªeͱnâmªà_¶¯?ýôS<zô(z½^¾æúÎŒ}“œF¯= 5΄ “KÍao?ë•î_ (ò ¿ü¾3-UÞÐê÷%EŠç<³œ^¤ŽGƒø¢Ûž½ö3ˬµE €¦ßÎîKööy´4ÆÖrw¬ädÝ-óûZqÌ[~œËì=|£A/:ù ¼g—|?Ç£ô:yøµbY\xÕry±]Çã:nìýX;šuÖš­Íý§Ùçrz,ÿyÌZÁ�M[¿ÍÇÓ°ðUâ¤Û—…BE¯¼ÅÝì|q'î÷¾‹ñÂù#uûñô¼>Ï/§¯k:†Ð«Éë~­wN[ÞÝ�ŸO��ÖUËšcÝ*ÄëíÏR ±pa3¹�êvÁõŠå¢€`y&§%E÷¢•_"=þ*©EÐG}4{ o‡ÑûíÓ8|š.îò÷*›©ª™AsÚ²fÚê`Ú%j·h%sòMtÓû¹¢•ÂÙ)ÒßÜyï ·OY,zó÷c9\j¥~ºb–±åóàdÉÎeÓ`Y4ÙöàùâóÖŸÏÎcY«žf;ºýô—(ŽýÉce3„ýã¬e\ºý¬÷xî±ÒëÙ;!/ª­âƒìµOöõàÙi«½^��¬£–5ǺUˆ×ߟݸþ4³é—»Ü,ÏŽ“¬êB4w!6ß²f¦èº“.¼®Œ,ïk ‚Røs÷îÝécæËM´Jæ»wLƒ¬ÓV5§û2Yw4¹Ü›¼s­a¦ÛÏ·É/Fo¸uP²ü¾°9ÊbѽYX²N´†+´6ºU·ðº|>�XW-kŽu«_e²€c®«Ít ß¹Á€gò@h®KÏâØ)K:oáÓ_ÛÏÌ^•1¾·ŸÞÎκQäw­c~_Ÿ={v&*–›„~>36H2»¿×=;[Õ™‹;Ð6P‹nìý˜O‹3æ]Í4 Ý›ŽK•M;¿Î4ò·,?g¤÷ìm…B>Ÿ��¬«–5ǺUˆ¯²? ÐòTá . „®8 ùte÷ÿ"bÅý³HëIûúõ×_ǻロýÿ¼¥GèºKa~Ÿ§ÿ_Üßl]ÚÇŸžgr Xvq7¿ýê@(½Öùåý÷ß_¹Oo²¤îtÜŽô~sª4ïÇÂø={Ñî®ÝÒhzì/†Á7#?'çÙìœqq—Û7åó �ÀºjYs¬[…øüýIãûüþìØ@E ‘ýJ>¹½2”¹,Ê/df·—­ºÿÇè·Dwøròÿ¢uÒÕ~¥O¯?…& û³bIÑrÐr•¥°°ÏÙB“÷2ðuÚÝî^ÞºªØŸ¼BÑn¾Û\ñ÷é5Î…B«©ápx¥%=æªõŲm³®mR* Ny?ÊEy��°®ZÖëV!>oŠ.]³�#~ŽAçÞæ¡Éóí?˜ëò‘?ÿ™ne(ö5…)¸I·W-~øa¶Ýõåû_<fã~tc<zOf­ æÇNšH³X=9©k6ËX6µùd]óa´ÓŒAÅ�²7(=å ,y?ÊEy��°®ZÖëV!^½?ÅÌ<+º8m¤ËXÚþÁÒ¶Åc¤é—S«¡Ë-ïëyÁÐ|+Ÿ7‘ís•ÙòûÂæ(‹EÞrQ��¬«–5ǺUˆWïÏÐ,¹éA¥'÷åSËÏ7D÷þâLð4}ŒUÏ¿Úye· Ý\ ôq<¼âÀ×›P·Ït•)‹EÞrQ��¬«–5ǺUˆÏÛŸÓ.cûÑË»(M[¼Ìµ:ù&ºÙC75í|·¨—M;ßh=‰ÃlÝq ŸDkoÅ4ôE·µ5[á\VvE0tSPU¸È+e±(½–r-��°ŽZÖëV!>R8ÓîlÌ›ùenlŸ4öÍ…8g·;g™µZñVtzƒeÙOÑRiùï&æ¦Xž.KÓ¶¯¶[ÇO?ý”ÿo;¬û¾ðö)‹EÞrQ��¬«–5ǺUˆ·©‚ïbfµô¾XʳpÊûQ.Ê�€uÕ²æX· ñ6Uð]Ì@µTó˜]šeðÌ’ZXŰß]hYÙhu¢7•ẕô:�`µ¬9Ö­B¼M|3P-õ<fã°û±ß;< <Šç­hÌÆ]+'çP��ÖUËš£@¨º\Ì@µÔò˜MãŸÝ[$ÿU}ñWñdÁñ7É9�€uÕ²æ(ª.3P-oï˜]°~çA|ÖûUìž{{iÙýuô¿ˆ¿Ûþ8þ*›m1uûú8žÏf[<Ïq {ûÑ\~ÌÆÃè=ÿ›hÍÖíFë³ÏæÏ_¾½»¿êįæow“={{Òs��À:jYs¬[…x›*ø.f ZÞî1û2†Ý÷&Ïñ^t‡/'·ÇqÜ߯™ÛïD»ÿãäöI :ÍØiìGÿŸ¾î^>þOóqôG/ãdØ›Ž tn_Ù¬‰Óç»±·Óˆ½îát<¡ã~´Ë·w¢ÑîGÖž(Ÿqqvû-r�`]µ¬9Ö­B¼M|3P-o÷˜-Z =ˆÞhÚ®æõ »gn§A Óh?y ´Û‰Aº;bN[å,JžÅAÞ²hgçN´ºßLÇõ¢•Zõ¾Ï¶›>Ïòí¹ç=ó:ÞçP��ÖUËšcÝ*ÄÛTÁw1ÕòvÙ›„–·¿Àø0º{»Ñì<Ÿ<ê«8ê=ŒFÖÒè•@�€Z¨eÍQ T].f Zªå-„R—²ãKúŒ-‡>Y7°ü¶@�€¨eÍQ T].f ZÞî1[tñºÁÏ'‡ÑkïMžóNÜï}ãÙíÔ¥+uûq¥Û)z9 b¦c½Ê»€½“·ú¹DÖB¨Ö“8<y'ƒƒh¯#3hú8§P7î÷âh<? u>®P¥×õ¶C!çP��ÖUËšcÝ*ěڟ~ø!Þÿýèõzùš·ÏÅ TË[?fO¾‰îü aGÿýýi”n?ë=ŽÝf;ºýaœd-„ö¢ÙîFx<k™Óh}¤Á¤Ó8@ÏbtÙ€ÒsÎé²íÞa$Ça÷~4ÒúF+žGýÇÓ(Ý~Ö‹_ïN¶ïöc˜¦®Ïoîö[”^+��¬£–5ǺUˆ7±?Ãá0îÞ½›B/^¼È×¾}.f ZJ}ÌÞbW­²p�`]µ¬9 „Þ̳gϲçüè£n5 J\Ì@µ”ú˜½Å®Zeá �ÀºjYs¬[…ø6÷'…@éùn³›Ø<3P-å:fóA¥[½¥›·ØUëBÙë˜tú-r�`]µ¬9Ö­B|û“Z=zô(ë&–ZmŠ‹¨Çl¹(��ÖUËš£@èjŠÁ£S”þ¿I.f Z³å¢<��XW-kŽ¡õmjðèó¸˜jqÌ–‹ò��`]µ¬9 „Ö³ÉÁ£ÏãbªÅ1[.Ê�€uÕ²æ˜*Ä–ê.@uÜü1û}ôZ»gÎ §K3:ƒ“|Û›¶Éç¾éu�À:Ô·LYêA�Q.Ê�€u©9n‘bðèwß}wãƒGõ €(å�ÀºÔ·DÙêáFˆñQô÷÷&u/:ƒŸó•Çɰíf#{þF+:O‡q¯cÔ{0]W,­¿ŒßÌuÛí|ŸÛ-ì¢.aËý >ëý*vϽ½´ìþ:úßö£ÛÞ‹ÝöÇñW­;ÙúFëãx>z•?Ç›K ��ëPsÜ_~ùev‘¸Io@¼ŒaïIôíF lñ:¿ç<ã£^Üß½ÝÃãÉ­ã8ìÞÆÎ;Ñîÿ8Ýฟ=V£ÝŸÜ;ñzݹÛãÃèî5f·_:±;ÿ÷çš¼Öî{“}~/ºÃ—“ÛãÉSíOž{ùvñX'1è4c§±ýú6{Î,j>Žþèåi¨µ×á8=þ›�°.5ÇšK!Pº@H¡ÀM»±�"m.„òP¦Õ‹Q¾¦xfë–ëÌcO.nO¡uŒ.Z =ˆÞhúHÓ¿]¾]<Vívb0}¢¥×±(½9��ëRs¬©Ô-,uKÝľþúë|-Àͺý@(Ÿ l>º,x)m t•ç^@�€u©9ÖP0: mðhàm»ý@h®ÖqÑÏjºn¹‹Xù¡¼…о¼��ëRs¬™ÔÈàÑÀm¹ý@(¦c5ÑÜ£ñäöèiì7ÿ<fRŸ�5î÷âh|ÃÞ~4'¯{g§{ÝÃx•…8éöe¡PÑÅ+üúä0zí4ö¸ßû.ƳÛé±R7°§PºB¡—Ó×5CèÕäu?‹ƒÖ;Ñì<›i$�`}jŽ�\Û›˳w݉V÷›K’W1|ºb–±¼EÎì±&KÖµl'ƒƒi4ÙöàùâóÖŸG»ÛáÉxÚª§ÙŽn?=Æ%N¾‰îü aGÿ˜Ï6½ý¬÷xî±ÒëÙ‹f»ýáñ,¨j´>ˆ²×>Ù׃gY¨uSÒë��€u¨9pm7@daÉ:aЮÐÚèVÝÂë�°.5G�®í&¡ƒ‡©KW~ûŠÆÃnìíìÅ~ÿ(ÆÙ´óëL#Ëò@(½go+�°.5G�®­4ÄÂø={Ñî®ÝÒhy`蛓wa[˜òÚò®joƒ@�€u©9pmˆrQ��¬KÍ€k@”‹ò��`]jŽ·j'‡O¢•¦KnƒÁçù,9ÓT³©“'·›18ù§8ìÞFÖõá1(¦InÜîá÷1ìw'ÛŒö_L/u‘¸ùÙj�.#€(å�ÀºÔ7`:^E1›ÎÑo¿;ÖŒVçi>ÝÆN3:ƒ4úE>þDGd¥îÄŸ5›ñ¯S8´ÓˆæþÓc˜FØë†L¸-)€°”k�€u¨9nÀ4jF§?ˆ~ïo¢Ózo:3Îü}óÐÿíßGïóN´öGôji»$–öº1”���mÀ4ÌÙ‰F+:Ÿÿ.£Wù=çB“m­N|þÅ`Ö%ìl T„G¼¹Œ��€ÚmÀÙ0çÔÊ@hEÈsö1¦-„í~çk����VmÀxؽ;q¿÷]Œãûèµvc·3ˆ”ù,=/cØ}/v£wô*bÔ‹V~ßt»b ¡W1zþq´÷&÷ýœ=���ÀyB›0>ŠþþÞl�ÐFë žÿÏ,*ÖI‹™Ç²õw¢Õù} OÆy 4¹Ý~˜Ï>ÖŠƒç#J���—•Lô³Š]àl—1���€õ„Jæõàãx˜u%»Ø4J­†„B���ÀÕ„** „šíèö‡!���®B ���°eB�ÔÜëõœÚ¿b)fz¼y›|n��8Ÿ@���`Ë„����¶Œ@èõz½ü�¼]¯bÔÍF4;Ï×|ÿä0zí½¼+×hu~ÓqĨ­…n^¿Œßüæ—§·w½ÏÎïvq—°“tš§Ûïvb0Ùøt&É´˜M�€›'º/^¼ˆ>ú(«Ø?{ö,_ ÀÛ2~¿íOÛïÌB– ¿‹Þýf´ºßÄIŒãäðI´;Ñh÷ã8ÛàÇè§ÇjìGÿx<¹9³Û/cØ}ïôöëAtvçÿþ"Ë55 …Þ‰vÿÇ| ��ÜÐ[– ÷ß?îÞ½Ãá0_ ÀÛ—-kBãa7övDoTl˜<³u˵|;<º¸Bë ½úuN!­ƒ��x;BoÑ?üA)Jÿà6­3ÍBËŒ@�€z½%©kX ƒ=z”µà¶­áËb÷¬lÝr1��5!z ÒàÑi¼ 4n�›²~ 4CèNì4Gôjrû(úû÷æ¤>'�j<ŒÞÑË8ö¢Ýldçþ½n _M¡tûòP(ìô·³ÇG½‡ÑHë„B��¼¡kHc}òÉ'ù­S(‰¥™Á­'q˜f »Àxô<ž¬˜elÚRçô±f]ËNžG' &Ûü} >Ív7úÃã¼…Ð^´»ýéLeJÐ^þ·ÿgôZ»“Ç܋ڿˆF³Ýþ0¥��àæ„®!uKó¡Á£ÊfÚòf0èrWhm��°V tú«èö.…48t±.…?é¶Á£Êè$£wô*¿}EãÃèîíFsÿiŒÆÓiç×›F��Êoí@h›ÍïÑ%¬XþÍ¿ù7ñÎ;ï< vŽcØÛfv¾oD³Ý[£ûW.ë2¶­Þ÷ùŠ‹ä­Z½åk��àm­¡ØÿŸ~úiÍ/ÿößþÛì~���€*­¡ØÿåÖAó˪A¦���ÊH ´†´ÿ©;X'h>Z^Ì,���T@h iÿ{½ÞBø³jIQêV���Pf¡5aÏ|øS,ï¾ûn|øá‡ñå—_šn���¨Ðæ 4›X/è믿Ö���¨$ÐÒþký���Ô…@h Û¾ÿ���@½„Ö ���êD ´���P'¡5„���€:­A ���Ô‰@h !��� NBk���uR­@蟿Oÿ]+Z­âÓoÿùÊ·O ���ÔIµ¡×ƒèìîL^O3:ƒ“|åÛ'���ê¤ZÐ?ÿcüþ?w¢Óù«øý?¾ÌW¾}!��� Nªmˆ@���¨ÐB���@„Ö ���êD ´���P'Õ „L;���ðƪ™v���àU+2í<���À«V ´!!��� NBk���u"Zƒ@���¨ÐB���@T+2í<���À«V dÚy���€7V­@È´ó����o¬ZІ„���€:­A ���Ô‰@h !��� NBk���u"Zƒ@���¨ÐB���@¬mû���P’���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-sCÐ÷ÑkíÆÎÎÎ9K3:ƒ“|Û›¶Éç���¨-„����¶Œ@���`Ë\?E/vvîEgðs¾ò"ã8ö¢ÝlL»r5ZÑy:Œ“x£Þƒ¹.^“¥õ—ñ›¹n`»Ïâ³s»…]Þ%l<zûéy›1øãÿÝÖÉÿ÷£7øCôÚiv¢Ñz‡'ãü/����êëšÐËöžDÿðwÑn¤Àf¯ó{Î3>êÅýÝûÑ=<žÜ:ŽÃîýhì¼íþÓ ŽûÙc5Úýɽ¯ÑÙ»=>Œî^cvûõ »óžñ0z¿}‡O÷'Ï—‡GÅcg!ÐëÉSÏÝ���PsoÖe,V.„^ưû^ì´z1Ê×ÏlÝòcyìéàÑÅíi ´~ˆ³°ý챟Ʒý/âóÎýØÛ# „���€-pKP>Ø| '1è4cg·ƒiÂsëÐÎÎhuþ&¾ŒB���l‹[ „òð§±ýã"z™®[î"v›Ðå¯��� ~n)ÊÇj4¢™wÍšôüç1úœ�¨q¿Gããöö£™ "݈½îa¼Êžõ•N¡b<¢ì±óA­‹–J����5wÍ@hyf°;Ñê~Ç2¯b4øtÅ,cyë¡ÙcM–¬kÙ8NÓh²íÁó?Äç­?v·Óñ4ài¶£ÛOq‘¼»ZñØ4°õÿˆQÿq0MúZ����êïZ­­á-wãʤ, Ê:¨���l­7„¦nWùí+»±·³ûý£gÓί1ü5½|{ß<���Øzo½©“Ãèµ÷òî\{Ñî®ÝÒh:&Ѓè ü���p› „����¸u!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€-#���Ø2!���€­ñÿµŒÝÊsh/F����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8p.png��������������������������������������������0000664�0000000�0000000�00000035311�15030617045�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Á����� :K���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��:^IDATx^íÝÏ‹#Gž÷ñúöªãR{ì[ãËÀ‚Nu©<—>l4Pj¡ ÄbhX7†L7 å†aš„†aÀ.áKƒ©íšÝÆ‚a¶iz¦·)ŠÇ¦(ô|ŸüfFH‘©””©ÒLÅûI·*õ+32…"#ö���ð !���Þ!��À;„`���x‡ ���ï‚��àB0���¼C��€wÁ���ð!���Þ!��À;„`���x‡ `ãöööXJ²�€¯ø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°qÕ_·2 Žeo¿-ý[ó§FÃWÒiÜ‹¶q¯Þ’`peÖ”_!øJ½®4ë' sèõ@zݦÔSå_¼|odxþT5¦º&õæsùßÝ#縲ïë@ÚýëèË[pÌÎØ&ÀW„`�·³ákôF‚£ºoävx&­ú¾t/ddV—O!x4èÊ×½ã!øZúíztÝÀ¸DùŽ.9Úƒ÷åµ {¤¾÷@ºƒ_ÌZ÷}ÕW‚ç™±M€ÇÁ�6ngÃ×0Æ*ÃŒ†®“§k ,>…`uÛoË~®¬LhtcáòÍ÷kBü¾Ö‚UÆ6#ظ] _« 3WrÑ=’Ú !xžéÀX¼|ó…NB0°„`�·žðu%ƒ %õð¹õùÇ‹VøïM_ÈÚCi~|þ}_Á[ó¸Òý'ííÆ¤?îãy—÷áJÓâ—~ÝÛQø°¯¥mûîHóô\† ûG˜�<~¾ïw úÜ>±!øEÿ[Ó¯·&õöy ÑPÎ;x¿×O¤©÷‰ÊqVùšÇez+Ac?ñ˜ýv_n3úå¦Cðhx.§M=Nõqy™PVŸß™ÛdÖ#Ø8­ÜW+ ›ýN€M(½~-]­ìº2™Ö/ 5í›yc3ó˜(0ü"ƒîƒI( .ä:ê¾F#¡yÔT‹Þõ¹´ë÷¥Ñ}>ãéš ^3­¿ÕnõåPnqù„û¿u†Ê¹ NÂph[†ß‡ûûPj§r>¼ ³£öù­%öñÛt¦«èNÉç5ýŽ“ÇÌ}iö~Šï<SÖs/Þ&Àg„`�·úðeZêj-é]i“™m¹³g™@9#ÀŒCïôs&CRú=©Ÿ¤×¼ŸúÛ,˼çbü Á“î‰ÛW=iÖܰ¹¨|óÈ*ÃùÏ;¹P.¹D­ÈñÝçH=wŽm|F°që_q+×ýèÊý‘i‹[‚uí2•ú1ævîœõšép>Ï2﹘u”C™Í ÁÓwQùæ‘U†óŸ7þr‰ü’Ïg›�Ÿ‚lÜzÂW²­ý 8¶LåŸ~Œ¹;Û.n 1‡óyÖXÁ“Ûq ìö[‚ãÿß3_æŠJ>wžm|F°qki Ö fånº!ªüÓ1·Ç6½~$W½VÂ'¡##¶¦üT.®G©ÖêEL`©µäì‡?É/— Eóù‚mùØ/%©Û£ éÔÆ`ŒûÏê—ª¨Ì§Ëw±¬î/ Žû>j éœõ#¹¾x&­Ó<ãM§ž{á6Å|E°qk Á&pFüxÑ‹ØþMz&íßra@ÇiJû3çv£+»¾ñ\þ’= j1ÖÑ!iÚàa/ª3¯2Ÿ½Øo¢WMß“/âV[>Çò<ø,q;j vfƒ«5:òe³.õfWzƒwÓ£C8DfK¡#|ü:®ÚòÝwîûŠ[ƒ³Òå"}ÌÆÇùìm*ïL†À¦‚lœVÈ«¥­eÏ¥“n-ÕÑ;9B¯ŸV_�P|ظ•‡¯ègßûÒè¼rZÌtÜàϤ 5…,„`�>ãÀÆ­>|ÝȰ8“R„K½)ÝÞ ;�ßö¥½oî—¹L.žZÔO×SËz&ÇHÓ×Âr’Ý+2–…Ý% Úú1 ì>lœVÚØ>Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q„¯r �øŒO@�Gø*Ê€Ïø°q¾Xʱ`õ~þùgyò䉹 ¬ø€%h€üè£äÇ4D¾ÿþ{ùàƒø‚T�g)�,Á¶¤jàyõê•ù+|¥­¿?„` ü8K` nØÑ…Ÿ¿ýõÍ7ߌ[íòÉ'Ÿ˜µ�ÊŠ �Kp]´{Ä»wïÌ=°ë´¬5ìf „` üÁ�°„¬à£‹¶j¿P춬Ö_w!åG€%dwùꫯÌ=±kÒ}³Ê(?B0�,!+ø¸ -»k^7»A`î  ¬Á�°„¬à£‹†_ @:Z�v›~ÉùðÃ3B0P~„`�XB:ôüÝßý]4Bá×/ÿùŸÿ)ÿ÷?u<0lP~„`�X‚x4üþñäb(éˆ z‘œNšâv‘ æ�ÊŠ �K°á׉¦-ÀÚ‚ðã ¿‚]vÔŽ üÁ�°„¬ñ€µ(­Á~˜÷¥G×Ñ-(?B0�¬­ÁþÐ_˜%¨6B0�¬­Á»O¿äè—Z{j#À ѼûìÅp�ª �+Fkðîʺ@5‚`Åh ÞM”+°[Á�°Úüøñcs »€‹á€ÝB.­_dÐ} {@†æ/�ªÃ¶f ¥†êáb8`÷Ü!_K¿]ÏŽ“¹4žË_‚ãìu{÷¤Ñ¤?¼‰ŸnH#ó~{Rk´%èeÝ1Ïë. Žw|ïõ¦t{ƒðYŒ9ï=Z¢÷óV‚Æ~öúh9–`x>ÙOÒkÞ_ãSyÑýXÛÏäËÆ=Â0PAÚLËánàb8`÷Ü1I«w‡Ó(֥ݣáhx&­ÃŽôÃ\7tå`o_ÁÛhÈ• Î:Ò¨…áï +ƒ8݆w¼îAÍ |#¹|-m {¤;ø%ü[þ×mù÷>¾’Nô~îK³÷Sô·˜ ¯é°z}.íæËñö\õZR^ë}ø~>3ÓmþV‚íxÿìH³ûB^Ž¿lÀè'OìC��€êºC¾‘á¼–¡Mf© ™X­sC°²­±n 4­¥© yÛoËþøñ^w¦»½÷äû±Ìö,h±›Á®m‡à+¹èIm¿M��;ku}‚§‚¤c*H†Aïâ4 yµ£@.Çé.#_¿–®¶¼ÖN$¸4]'\ó^7¯ÜïÝi™žz?!8£Eu:ßÈeðH:ã×¶Ý!Úr´rt‡Ð÷H³^ ³íZ¡‹nÏ¥ zÝpÝ}i4O¤®ŸÒM�?‡n÷e?Çh(ýÓf|{¯&õæ³I×–yë���J`ƒ!Ø+g©µ¤wå¶oÎê7›îzàØHvÞK­!íßÊà:Ý.k[¶ûê’jQCpê>™¯¯e9ênQß—zû<|„ ±qבÉkÝ“£àMΖdóºæ}g?‡÷ÙoœÊE¸¢î#a¯5{á;˜·�� ¶Ô|eZk©ÕtK°¶rö¤Û<˜ä6‚õ½ÿ5 wµ™rU-ÁEïÏù’Ú×ñëÙ?ɬ¦žÃöÝNùpÑÇÜÌYçì`wÙÏ·ƒ»}.au®Òë6¥Îç�Ç–B°²‰íÉ~»/ñçRvŸàðŽÒÔþ±Y`ó^7¯¼ï]CíѬ®ùZn§Cð.¥×:0ÝJÂ/ ýŽÔÇ®)ßö¥½_“ƒîÅô—yë�Äç‹~ù»ãçVÄ|¦ñe@ !Xxï£Ë@ަú2«Ù!xtùR>=Cá̬ûÓ?LFÊÈmÒ¿:ú¯5¤s>¹ˆn}!8k„æ­<Qä¼ÓÏ”“Žý ÄzL®ÀŠB°mÌî»;=Dš{1×aXQ¼7N‘º¾ êQ3ý^]ó_7Ÿ<ïÝmÙŒû¼Ö¦.ø2´¹C¾…â!ÕŽLˬ þ“–ÚÈh(ç#9\¦õ4Úg³~vµ¯·D®µäì‡?É/ÿ&ÿ3õf"ë¹ó*EC/`liˆŸ·.z0°ór‡`sáï¤!�ëA0m!Ø|¸D?ÿ™eboe8s²Œp©7åÔýµ¸fÜ'Z¤yz>Ò,2ïuó*øÞí:Û-Âü}¿ÑîýÒKôÁ;ë¢?» ªŽÔ{‰ èüÐû<¬ˆ‹>¿ýR “”œÊëYÏ÷FÔ’Ÿ5:ÄÌuÀNº‘áùÓñ°†7:_qÑ£s⠣܎|3>¿ô¢wÙ÷_KsCpò³=þ–_ÿ™i˜ ÿÕMoåÒ­L€Ž¿àèßVØ­ ÀV¬®;¶#¬HO;Nu=ÐÉ7Ž— Õ� 2_mW$ÓOü¥1ê"”º®Àþbdº[‚çÝwà„à÷9kŸÈ‘ý¥*usÛ?’îŕވË/½èÖ4 8¿XF¿ú'ÍPI„àJ‹»ÔOå|ÜÒw5i5ŸEC”X·¸+”; àìîn‹dx3‚R÷Ř}Yûµ4Ö¥Ñ}þŲ]¸L‹ïx±ågÊ×\ç ù¸ÅÀ.ØÍl*–é5»ìÎÏX£a_‚¶íz ‹Î0×ËÇX™Š ±/Ü%}ñ"€…2‚ìtÖŸÛÿ,/ì¹:7ϸ/îÀ†à_IýWµÔ…»fÝÌwÛEL[ƒ‡a`>¾Ã5(�Ê„–`�¸ sAïÌ–àèçõC©7¿” ×—žÛº›Áóî‹;˜´ªŸ¿Ñ~î9­Á6 Ϙ•TÙ2þøsùüðÓÔ$O�ªŠŒ­ûðÃe0˜[@ÕØŸÓ¤\Èõ¸O°þºò@~ßý4 ÄfôÛÏwÿ‘¼xþ¥¼|û]‚kÍ?Ë/»òâÅ£Ù÷å"¬;0£÷D_(ì?“~¾ñ(@z1°íZ¦³o~.§ã~¿v¤Æ@v ![÷Í7ßDAøçŸ6*Æ¥v$¿ÿòcÙ¯7¥ÛÈõx)åTκ¿ ïgG}ЋXÃu¦erî}±œT7°ýÏ$xîŒúúãŽî.îÈEV4EýC.ˆv!¥ðÉ'ŸÈW_}en@Éè¤M‡ŒÔìOB°Ž˜Ð“nó`ÆUØ)£¡ôƒ¶4jË\@w%ƒ^WšõYXlÈ*fÒÛ wïÞÉ|@·�%¤](šr¼¡EØ!~„`;ÝÞ¬¡ˆ\“霗EÂö-[zò Ñ-@©Œëެ ›�T?Ý!æŽÇ™fgZn(µÜS¦. ãQžtò¼ß^Dsò´òW‘Ó-��l!8S B°¹@&ßûÕ+™¤¶C)Ñ-��lÂ…àx¦´ñÜïãńѩ¬÷ÿZÚã¹ûÝŸ»l~(ívÿ{ÒO³y5w~ÿB!x<œRMê­Sé¶~/ý÷ö qûüÆßÍxM€Ç÷Õ /þ+£_rê=×[ Ê9çÝ"��ÀºíNކ¯Ù—zû\®ÇÁðÁd8›tŽîß ˜~#ÃÞ#©koCp:hšñ;£çš=¿þlú›ÇކgÒ:ìd¢?÷5'Áëcã××°k߃Óm{-g+óvÐ-��¬Óî„àh4RÇ·i€¡Ò„ÜZË™ùÇ ¦ý- Åéî³BÅ’TÁµ†´Ïá39Ò!8!ýš ÞCôÞ÷+5È;Ý"à=Öõ˜çõzüø±<yòÄÜà³ „`Û*ëþÜo‚­Ët+ˆç„·s½Ïj ž“×ÑàûËt–·4öÍÀêjöüþ…ºC\_Hд³K™§ôï™!xÖk.Án+r…Ð-¾Ñ_@‚ 0·°j|Ñ�àÚ­>Á§“>¯µ†tΡÒNsê„dû·¨‹ˆMªt[SÌï_(£a_‚(ܺ].œ<÷5ó´gµb—Ý"à iúÅë¡ûV¿\€Ú½9Tèl?a@¶AP‡;ÒÛS¹¸Åýqë÷å( }FŸ`Ó§6˜³æ÷¿1ã ;]3æ¸í?•c{Á]ô“!¸Öü³üð²+/^<šóš:õj‚k-9ûáOòÅË¿ÉÿDïÁq;W¾{ßOÒë</ýìGt‹€oô‹ß«W¯Ì-¬Š¶°ë¾�k‡B° †Q·»èüû ÞŸGÒþ=n]M&átEˆ¸£)èó<“~p#sæ÷¿‰²}­0„~׋_Û^”–rÛÿƒ|<3ïÃBƒíaü7½xoÎk†ÞtÿˆCýëÞçÉ÷µå¼cºQèR;’îE5Ú…éŸÐ¼zöËô?þhþ�»‚ÃxÚù³\&Z65Hê–°z\G:[ÕE·ø„ÖàÕÒ‹áøü�¶#!8îÏ[k<•sÛZkZz[ÍgQw‡­ ¥<•ö©ņeÑ->ùþûïi ^.†0ËδO.,³Ý�¤ÙíÉ`›+E·øDuZƒïŽý`–Ýé/èÏÄ !…mŠ¿d³°°°°lkYB0*… \°m«ü�^¤l­˜›Üö»ZõgE•¶»Ïçã‘ ¯i·ˆ>úÈÜ6k“•à2õ ®RÅ»ê‹áÁ(BðjpV£’èmÙtåS¦ÖàªT¼ë¸ŽŒ2!¯g5*‰nØ–MW>ej ®JÅ»Ž/„`” !x58«QYt‹À6l£ò)Kkp*ÞuÍ GF™‚Wƒ³•F·lÚ6*Ÿ²´—½â]ç/D„`” !x58«QiZÙé A·lʶ* Á:‰Æ6•½â]çÌp>‡”ÏÇã*·³•§-Át‹À¦l«òÑÖàuüÌ_D™+ÞuÏ GF™‚Wƒ³;AC0Ý"° Û¬|´5x›S‡—¹â]w¿iB0Ê„¼œÕØ t‹À¦l³òÙvkpY+Þu] çò9t ||>W¹íœÕØt‹À&l»òÑÏm}Ù+cÅ»©á Á(BðjpVc§Ð-ë¶íÊG»ChðÛ†²V¼›è"RÎm¿–~»½·™Kã¹ü%8Î^·wOí@úÛøé†42ï·'µF[‚þPFÑó¼n Ãè¾Yn×rßÓ¡´ûïͺPú}8Ï5ö%h7¤6^ ÍnO×ñ;›~nw©I½ù¥¼oǼûê²/àmtϲÑ÷ç«Un»¿{;‰nX7*?•sÛ5ŒI«w‡º(<ÖÃ@y­ ϤuØ‘þmøÿAW¡îJgiÔ°wЕͣ éÔœà9’ëÁ×ÒnÜ ÷Áé~ ÿ–ÿu¹í·e?Ü·{õGÒ³a<ò“ôš‡Òìýdn‡ïãâ4|¿dz÷–züôöÞȰÿLšõpÛ4üw_‡[a\õ¤YKÞð¹ûO¥I.Un»¿{;‹nX'*?•sÛÃ`÷¯ehl*Œ&ÖGëÒA϶èK0´‰õ­ý©–Ü8¬ÚÇxÝnû9üøã(Œ×§r1nÑÕ÷Ö˜<çõ¹´5ÀºÝ]r¤? ä2ñžÒÛ²Ï3ô¡Û¾´÷3î[bœ‹«áï^ÄN£[Ö…ÊÇO•Øö©0ê˜ …¶e5³BðõkéjkkíD‚K·µÖ˜÷º Üö¿ãà¯rœHM»+´ÏM ­‚GrÕkEëºá­4m5¾–‘lg…à¬çÊÁ¬O:}Éј½œ‹«áï^ÄN£[Ö…ÊÇO•Øö…!Øíïj–ZKzWn¬4!xê¾÷® )wÁ>߇¡÷0|{r¼Ñˆî„`Ûb=ë52ÖÏ ÁaÀºJ„á¿Ù“+ýC‚ÓÛ»'ûmBp­rÛýÝ‹Øyt‹À:Pùø©Û¾0»¡ðJ½nÜG6Ñ›n Ö~·=é6Â}`jÊJBphôF‚#mq>’îÅå†C0-ÁUAr¢[VÊÇO»‚•íà¶zf÷ Ž/Û“½ýöôo« Á¡è¢: æõ–´›Ísn¾;DÙq.®†¿{^ [VÊÇO•ØöÁúž®û©‡ï)Ѳk_¿Þ‘þøâ¹ØRƹ­ß3Cð\9µÁºD8WÃß½oÐ-«Dåã§òo» Ù}w§‡ Ón2̧wjˆ´Ðõ…Qw÷Â5kþëΧ!ó·r0õœúw½PÎ Ööutˆ´gflc݆e†H;˜ 廉€neïþT‡Ó£Q”çâjø»áºE`Uæ�g ¾ï¶œ%.ÀIWЋլ¯7¥Û8á ゥƿÊï2/bÒE'øÓd"„q¿É¬û¹“ ̦÷Ÿ+j}sŸÛ 1©×wCÖh(ý Y­× Ó•Þ ê±ÊšÔà7ò»ßý&õ7»èãÝIB3.~šÞÏÙô¾å•Q¶ãý»`BˆpûOí~š*?w “ÓóÔ°gó^w‘Ôñœna]J¯u”j]ÖÐkû'Û×,2Y†Nò|Áq•\Êzqœ¾7_­rÛýÝ‹ð Ý"°*¹>€Ç?¹¦¯¼麃cé^ØŠøJ.ºGRÓÊ<¸0aÌNd†¹Ö™<ìÏ×n«Û/2è>ß—3Ö«†ÊÓfü“rt‘‘}-óøqà_'hE÷_$4G¾ÊÇ^åŸÕ2¨ë&'*°ÃoÕ[Øpr=³hV°¬»ä{-4)‚é;:6ãÎÅ­˜>‡”ÏÇã*·³ÞÈê¡¡Xÿ¶‰iW±ò}�›°™5®jäZ-â&?ñN_ðcN^‘OZà¶°ÚÖ,wÂeŸ; ÂÎÑã­nö¢¢ôã§å®|¢°š5’@øZ­Ï/60;4Yã‘Ò}7S­s‹ú~&ž;n¹L<Þö5]ЂIF™‚Wƒ³^q»Eè¿z2éòêÕ«èoðÏãÇå“O>‘'OžÈ7ß|}!úùçŸÍÚi¹?€gô3¼ >—Ží™uU»Ë´tˆÍ‚Õôóo$ÛçLÍî5º|)­ŽÓÿ3cû&f]ÅŸ3g=ž¼9³ºŸŒ—ÅÇfÓ}è«Un;g5¼b»EüÓ?ý“ù Žú ûK¿�¹Ç‚]>øàƒ(뱡÷±¿èº|L7·K„^tt|: |6(¤ûCZë‹…`ÛUbòsüx{!Ô {âî‰YòåßöpS£n énŸ&Â~ü^f÷»œZ_(Û÷àvŸ0}XíQ¿Ó9ãß:Šl;°n>«ÜvÎjxÅmýum„ŸÞ½{—yLd-úK‚þ›WÂ&k48•c·exk!ØÝ.½XèëÕ\ç2£ ŒÃuú @hk!8Ún³ÔÒ>«ú…qðÏÇã*·³^°}Ç_jÑ?økÞ±a½v“ÐÿçfûµF?÷kãT·‡2t‡È¯Ð¶û4ëkÿßpS>•Ãt¿ç2t‡È©Ø¶ëåóñ¸Êmç¬ÆÎ›Õúë.pà' ¶ÿò/ÿ’y\ØÅ`¥·ó³Aì¾4_<“æÔ˜£“ 6=þêê.Œs»:l.‡LÈ­5ŸÉ‹©/�ʆtgœZkUÆ%.N$c7ø|<®rÛ9«±ó´?ç‡~8óøC»@èEpú €–ý?ÿó?OvIw•Ñ¿2¥ }‘œeGHpÇa]ái‰IÌ㳆nË¡ð¶·-|™­½!»ÜñjW6DZêñ&tç.mñ¶Oư„ló%חްÌ{Ýð}8_p’l÷h&¾eËwýbИ±.ã=E_:¿v$,Ç^7<u÷1ïqñ—“Tw–yÏ{?kÝ]Ë(ëñIë)£iz_­rÛýÝ‹ð޶ëÅNñ‡Íô2oD�TŸ^ØöÕW_E_ˆô8Ðp«_l¹gY}ÅõïÅØ ä2†K³aCƒ›yý»N–¡}]_|ëôõM÷‡Í_áZú¸¢Òý¢3Ù°4~ow,#=)B(¸ò…ž }Ì\v¦µð~Ë´4OÂÐìr‰ï3Ýíe4|%3ÑJ­ñTΙÓTü¸YÏ;;Û>ÕË+‰ãmnÎîÊr=øV^è¡ÌÇšç.‚ïXFñûŸù!8UFî—ÒèØ¶3ÞMÌ/£iú|µÊm÷w/ÂKx4EÌ©…±‚w‹–µ†\M®†_-ûYå¬×=ô¾Yt¯ØöLHZ*`…¡Ì€µ¤ß7“‚Ä-ïé‘>– Áªh8KÊV³B°6³»dVw,£EŸ.#ýõå39ê¼’á( ÷§Ñ̈ÅÊhçâjø»á5ý9\ÃQô!kBpõéÚÍÁ^è¦Ýô¶–÷"ßÿýøXÐð<‹®÷Û¾ÀÖ¢ ”°RÝ[¢.#nw™EÏ[™÷Ø*…àŸ¤×yîtÊè¾*ºŸ9WÃß½„4øÚ~¡Œ\M^çusÈKï¯ÇÁ¼�¬¨|ü”kÛÓ)Ñ'Öö'ýµ4^|'çíó~é²cGw‚PÔ÷Ö|I7a/3`é……îDÑOþû‰þçóV‘œî#loŸÈ‹þ·¦K†{‘§V“]Z¢}T†œî·lo7þ ýó§Q«mâÂÍÄãÝ.Jñ>š.£4³R}äç—Ñ´\ÇcA£á™´¢.YééÆc‹Ö«<÷¹«Un»¿ŸhXŠý�c©Þ²‹4ôj«¯†`m¾«<-Æ»º/ó`ÛH$ÔôüÓ€u3éºWoI0¸’Ñe GµIœ¡ËèÂÈ££dÿÞ逇°q ‹Lÿm~ÀÊ‚ãÿëçI|{ÒgXû¹2¸þÅŒhbߣVßëÅŽ'¦[@üÜán9§ÊèÖ¶Òê6H3¸k;J‰ý¢1~ü¹¼|-í£霛 :£Õé2JÓ/.S}äç—Ñ´\Çc!©~÷SûvÑz•ç>w§Ï½*þ~¢a)«<ø°9»PnN:neŸ/´®šÏç�Û¾@"`©TXK‡¾Ôýã tO6~-ûS¹HM`2°6‚gßž¼§äz³ýµ_Kãa}ºe0½?æÝyëBú¼¹»C¤ŸËÜ·®§Ö›Ç×6äáþ‘t/’㌤÷GÒ(¶ð cvÆô~]dç"-ÁÀ>W‚UVùr»~-ÝÆ½Te¿>Ÿlû‹V:ô¥î¡}©×ïgŽ&2°2†|‹ž39ßü€¥ïqÝ!øWRÿ•3{ •Þ ©}—0o]HŸwÝ!¸^—_…A/»EwFÖ‹_Œ»¿¸ÒûuÎÅÕðw/b)>ŸxU¶Ùr³ýïK£y U(áߣ±oÍOeêÚŽ «ëa„L�Ž-³ZY6Ãçs€m_`QÀJ‡¾ÔýÇAèüuô|-Õ<°Ì„*Î…qq…ää#ó–¾Ç5‡àpûÏßh×Të`z$¤ö]¼u!}Þ5‡àýö+yíûdkpzŒéçX³íŒÙ”Þ¯‹p.®†¿{KñùÄ«²M–[üa®aÕm%‰¬Û ct)½ÖAx[Y›¡L¥?þIÍ^44Uqm•ŸrmûÔdæÂ5 ¢õN+­¹|\Û‰Pâ ÷v/2›°Ü!ÒÌyµº!ÒÒ“³$ßãä¶–;½ÞÝ~;bú"³ ‡àEedo/\Ë*CSf¶¿ðÔÅ©2Òréü>1iÍõÅ3iæm­ŸÆ¹¸þîE,Åç¯Ê6]nÓèq?ÅÄ϶ne] ï딪| Á¥À¶ÏaŽQ½Ÿ.ûíž|§AÍÜN.að{þܹÿ¾<h<Ï{;<w‚îdtª2–ªA`&ZYf"†Ù!8~Üä=}Önι},σϜÛÿK0<ÚÛûŸIðܹhJ[Zg†àøób|ß©m^2/*£ý¦´?sn7º¸ë4¤‘xüsy>~ŸñvL•ÑÔ/Yv±_bóËhš>‡¯V¹íþîE,Åç¯Ê6]nSè™!ÖTtaeø6«ˆ‚±© 3¿T>~*öO¬œæ¬y-Ák63/r‡–à5[OMã\\ ÷"–âó‰We›.·©t;]©;6¦3žémÔ1y1OÜ·Ñ´–‚Kmß.B°Eæ\\ ÷"–âó‰Weë.7hB'­ˆ¥û*ÛÐ^s#ÃÞ#©Û+àmߺTŸáqßF‚kÍ?Ë/»ò2uÕü&Qùø© Û%ûsúâÀ”ïþÛÁöýåù’k¯ݦ҆`»M«*£iz_­rÛýÝ‹XŠÏ'^•­£ÜtŒ^’ØN?­“V¨ÙêW2Zñhº˜ Æ®/$hêÅrºÞ¾oÛ…ã çÖ9öd^ëØ—UÁ¶¯—ÎV¨3ê9µ tFNÐfWØ)Ù‹ÎF¹œ‹«áï^ÄR|>ñªlU妳²éìlZh妕õ2SW•ŸÖ¹í6üê²hÚîªÐÏ ýŒØ•í±tšý2|Iá\\ ÷"–âó‰WeË–›†[­Äž<yUhZIkžt}ð•ŸÖ±í»~•~nè6iËé®ÑmÓF�ýLÜ&ÎÅÕðw/b)ù¾Tß­¬¥ñ\þâÎ3žXîI£L†ú‰F ȺߞÔm Æ“.äy];z–ÔÜç©Aç§Þ‡ó\£a_‚¶ìA—iv{ÎOúéaÜEïû'gh£ôûH/Å.&ÑÇäe»9h‹‡>N?ðõ¶¶ì€ÊÇW«Üö] ¿ª,!qô3rÛ­Üœ‹«áï^ÄRò|F¤Õ»ŒÃi'ýC£É;Ñ… ñ(�n¨sf›M æOókiGc0Ú1ó¿î"ã¾­õG©Y~tðôÃʶ×§áûuû±:ï-ñø_dÐ}¾_çêáÑPú§Í¸¯ljö¡x,Ýtà Ÿ»ÿTš+ ÁÚwO[xµRÖw­ÀôÞ§nyQùøiÛ¾Ëá×ÒÏý½ëlwmý*ƹ¸þîE,%ÿÁw#Ãÿx-C`Sa4±>Z—z¶E×jf2®¬Û’‡Uûø¯»Àm¿#‡…ñäô¥úÞœ«©£›RÃñ¬OáãÇ38ÙÞô:l;qvŸgé!„’Òå6«›ƒ†aÌGåã§»l»áWÙë|ùò¬X??·ñ+çâjø»±”¥¾©0ê˜ Á¶eÕ *#ÛÙxìP[ió^wÛþrüÕ íåN_ê†`;XrŒÛ 3忏¥zVVéû†2B°ë“N±ñrµÜôƒÚíæ ÿêmýiùQùøi™m÷%ü*ݾmÂm²Û½éÏQÎÅÕðw/b)K| C°ösM-µ–ô®ÜX9«O­;ÝnÊC°†ÏÉð\GÁèN¶-Ö³^#½~^¶]%œíI£i—¼“FhK…¶Îècôƒšnw§ûÒWl{>>…_¥¿ éþñõºý\Ýt 8çâjø»±”¥¾…!Ømí¼’A¯Ï…ŸháM·k¿Ûžt£±em@MYI%&s¸Üp.Þ¬-¼n7Ÿ?0WM÷% Ëö–U¡fD!K|…B°²Ý ÜVÏì>ÁñÅcቑ5{ЪBp(º¨Nƒy½%íæCóœ›ï‘‡þ4çþ<·Ê �I¾µüZÚò©Ûù‹¿t_ìú¨»ˆš…ø‚õ=/^sŸÓ¾~½#ýñÅs±e.ŒKôƒž‚u⎜ڰ¼�!X=_ï"ôMãKAõP3¢å” xÙ}w§‡HÓnAܧwjˆ´Ðxª]÷Â5kþëΧ!ó·r0õœúw½PÎ Ööutˆ´gf¬_݆%†HKÇìt+ó ÏŸJãpz4ŠYÁÀêø~-ÛIvè4_‹ª¡fD!ÅÔí«­§f‡XÛ*ê¬s—zSNí$Q‹nÆ}¢å@š§ç©aÏæ½î"© ðÒ-Ì£K鵎R­Ëzmÿdûš&˨5¤ýâ[ç¾ öM¸ä½8NéýÜ á7æÛPhEù~¡`•P3¢ÂT5QnÀò¿ºý>…Vû©¨Qaªš(7 8Âo’:Z8óÓ¾Á´˜—5# Ù‰05cìÝÉ’5rCµévȇð;Mƒ/}]‹ÛÆÂÈš…¦ª‰r#üf³#A0êÁrtß1ŠF9Q3¢ÂT5QnÀl„ßùqwc¿Dè…(jFB˜ª&Ê ˜Fø]Œ¡ÐVC'/¢;IùP3¢ÂT5QnÀ4Â/à7jFB˜ª&Ê �€$jFB˜ª&Ê �€$jFB˜ª&Ê �€$jFB˜ª&Ê �€$jFB˜ª&Ê €\¤×mJ½ÈÐü)éV†Á±ìí·¥Ít%ƒ^Wšõi÷¯£{$-Z|FaÑô¤Ûüµ4‚·æoio%hìË~»–RȖ帬R­G„š…¦ª‰ræÝöÛ²wzìM–šÔ›]é ®Ì½Ÿ ¨îþ,p~‘A÷Aü¸™!8i4èÊAôZõÌ;)ãìõ~ˆÃi¢\¢¥À±>ºîA-|ÌþœìrÊ2ó¸–~»>g=,jF¢'ª‡rÃV\õ¤Y³I[»iÖÃʾ֒ÞÕ(¾Ï¦ŒÞHpò´ú Ú§{Rkö¤øW Žr†`ÝÙ!wÑz?ØPj§Ü¿‘áùSi„å”ûX¦óÏ‚•)Ë™!wÑz(jFB˜ª&Ê [Uìn@…®%µÜ-^«r%Ý#©íB (–\„àõ°­ô6+ÛëþmBðVP3¢ÂT5QnØŠ¹!ø¿åzðµ´÷¢ã3úù¸u&èÑÌö5½/æ‰Ôu½·ÑPú§Íøvôsó3éoœûŸÈ‹þ·Ò‰ž3\ß>£€ ÀÑctÙt�_±\a)Üg¸%R·¹Þ’ úYÞ†à?Hß¶Tî†åó>~XF?Òéë´rîÈÇ͇á¾%'Cðdÿ׎¹t‚Ã}|Ön˜ãQá@×ál¹¾øNÎ;f}½#}]7î3|0éœrÃócòØiêy@ž‹š…¦ª‰rÃVD» £ZGŸI+êq"Áå;È´UòF.ƒ“°ò~ ÝÁ/&xiH¸'GÁ›0¨ø>ûS¹ƒ}.íð?㾫6TübžÏ†’j[‚;Œöqøáú\Úá~ŠÃ“Ùaxmõ.e¤]DŽÂ •]îÇ™!8 cýŽÔk éœÃÇ_J¯u>†œî¯]k´åEo÷cfÇÁØìK»ï¢r [$½ð‹Ýè2£š)g».|ÞÙ!ø}xû0|ݧr®·ç!x.jF¢'!ª‡rÃV8•·]jŽœe\,”nqœj_<”|>[ÉÇ÷Ÿüôœ|¼G!8ÚOûrн0_\f?Œ»C̸=3ÿ$½æýDä©rò’Ó|ù×ø‹…ýâˆ/4Œ¿èMI—kæí9!8ê+~_š½Ÿ¢µ;u̯5# ™ª€X*³�UÜóÒhØ——/ÚæçõÉ}§ÂUô\µáÎÞŸ<ýŒÐ›7O±ô~öU²;DÜŠ;Ý"}Œ&¤Ë-óöì<];t̯5# !LU冭ˆ*îYéF†½GR¯7¥|+?ô>OTâS•º S},tÀH>~‡A:iëŽtÎÿ-j1Ï=bFèÍ‚Mk<-Áié>Á¶{ÛǶ»­µŽÌЛ?O?÷ókD͈BSÕD¹a+¦~¢uØP*êòù‹gÒyùßæ:7\Ùa¨îI£ó*¾€îúµt[ÁÈ^pgj¶·S!¸Ö’³þ$_¼œ“Ê1C¤¹­±ã‹Õöu8.ÛÚôûÖÿ$½Îóp?ÅÝöºáÿÍß³nƒ“ݶ mH3¸ëqŸ`mÅŸñ3¿ì~qöío­ûêô<>^íßL¿ßÈÕ·Ò9½QT®Î/™·Ýr7ee‡`³Ý…ÌEã>ÁZ6ãòE5# !LUå†M‹['Ýq’¡M9£6Ô›rzÖ•ÃJ_Gˆx{î>Ö ÂîÕïÎèÉ×:–çÁg‰ÛAxŸø"$í“_XW=Ó_¥—q mb?…KíHº—ñû·FW‚y·Ã üÝwåà>wø¼¿ÿòcÙ×ÖüôE`ÞHO–1i½µÝ"Üý7¾2£—ÄŽÇ÷çÑÂñãŸ?Ÿs[Ï¥ž|—*«¨5Øyní{ÿe³žÂOQ3¢=¹P=”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0•A‡½9yZê±)7l«W¯Ìÿ� ü¨Qa*Í óTòÉ)7¬“†ß?ü0ZÂÛõý÷ßË| ?þø£ù v‘–¯–3çÛÝP3¢R‡©ëœµÝ1DØñ@§ÖÅã‹ÚûÇc;¦o‡!wÐëJ³~"/úßš1ÃÇ·ÏåÚç4Z&ãC– !ë@ø-Œ4c÷ñ…çî¨QHiÔ™‰'žRudÆ·ƒì¿—~ûp<Hþx&zGú’£™xœ�ëÜŽ§¢´ÁYCµÉNY©) ÁX%ÂoùüüóÏQ úæ›oÌ_à=ÿ´Üß½{gþ‚"¨QHYÃTVgLÛ9 ¤‘˜S=5hæí“ÛñlT6ôÚÛ©éX Áð�á·œ4�ôÑGòäÉóøDË]Ë_C͈BʦÒAÕ• ­FŒMÐ%s~ËíñãÇòÉ'Ÿ˜[ð‘ Â(†š…”»%Ømíˆ×Õä {!¦‡p²å83OîO†¯¿åG+ ¿,‡š…”6L™>Á{õGÒÓ ÞÔÕ·Ò9 ƒ¬]W;’îÅUxßKéµLÿáð~QèÝ“Z³'Wz!\Ð’z¸ñ…nÿmºNØ®¶+E*×Zröß䋗oÆA»LÁ(‚ð[ Z6ô…¥AXÏÙ Ì_°5# )s˜ _™ÑâÑì…p‘ë šf]jäw”‡ZC:¯ù|ÿ@š§çòö\[}ãçÛÛ;–çÁg‰ÛA¸ã‹ðR¯W2ú~E¿å3 Ìÿ’�Yæ ¦!yÖñä+jFB˜ª&Ê ó~ËKâNww`ŒX̣LJ~æ»_ôÿz~Ó]"‰š…¦ª‰ró‡þ4îV~óØð«U¨ÊGƒ¯ž»ºhÖrÕ¿i�f(4Ì£ç³ý¥@[õÿz鿘 fD!„©j¢Üü¡aiÑHnøåçÑòÒ.6ërÿþ}yðà­yÈEûÿã?þcâÒ%ï—dP3¢=P=”›¾úê«qE—n ¿Õâ–§»Ðj<f?üŠ0A͈BôBõPn»/Ýjè¶~«I[õÝ2uZƒ1‹v™Ñã#ë¸ÑEÇ•FŒš…è „ê¡Üv›ö¶}þÜåü#á·¢ÜþÀ³ 3îs€ó¾<éB¿à jF¢'ª‡rÛm³*½ø‡ üVTºe?kÑ0C׸´«CÖâôB¿à5# Ñ“ÕC¹í®y?{êBHª&½¨)«<uÑÖ}-WZ‘E Ãzœd?º0¡FŒš…èɃê¡Üv“!·bËZ´"Dõh–tYj÷ZöQ„/zܤ%÷šŸQ3¢=yP=”ÛîÑŸ3óüì© ­ÁÕcËNËX[í˜w¡ÇŽá~f€Œ‚8qª‰rÛ=‹.~qZƒ«E[ï´|ùò‚uÐãJ/~U £ ­PQ=”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(„0UM”��IÔŒ(dWÃÔm¿-ûá¶éöíí·¥kVìB0��IÔŒ(„\M„`��’¨Q!¸šÁ��$Q3¢] Sÿïýßäßû}éëòï“÷ÿϬØ„`��’¨Qaªš(7��’¨Qaªš(7��’¨Qaªš(·mº•ap•A¼J»ÿÞ¬ iŒ×…K£+A»îÜ_ÿÈ0ºóµôë~#¿ûÝoœÛá’Õ§=ý{õð=\›•¸›‚åû !}çöÞ¾4‚·ñ}oûÒv×5þU~רwî»'ûí~øŠ®ôë‡Ë^×à··¸ÇA½#ýë‘Y—.ÿðxzþ<yqŒÍD͈BôàGõPnå0¾�³þHzÃóWõ“ôš‡Òìýdnäª×’ÚÞ}ço£AW¹´õàUOšµ=©5{reþ4M_ã¾ìÕZÒ»²Ä*å/ßyeñ‹ ºGr¼ 5ÿXËu  Úì—àšÔ[g2t-ÿ}÷xâ˃š…¦ª‰r+‡Û~G?þXZ‘4NåbÜš£•[#Ñ:ª-¶Ã@ŽÝÖš¨uÇiíÉd*Ðq«2V-ùš²ÈlMÓV·O3Ž…c †sšÞr¨6=nŽäãæÃ0°Þ“F÷uøCËÿ¾{<qŒåA͈Bv5L[ptÙÁŸ ÁåpÛÿBŽƒ¿ÊepVb5©·ÏM%–Iö˜$WIþò% `zÜ|*Áå_%8º~®;]oÁK¡fD!„àj"—C’´yVP‡a¹Ü3?I¦C’=& ÁU’¿| (X†7aÖãàú\ÚõšìÕNÂP|—?!¸0jFB®&Bp9LBRhô&nÍ©I÷â2’ì1I®’üåK@Á2œ]rd»Þ¼C1!¸0jF²«aŠÉ2° ‰ Ϥ¥­9õ–´›“7U ;ë…q¿&—NþòÕr<# èEK¿%  C2‹ÜȰ÷HêÚõæ³Ï¥™ÁcyP3¢ÂT5QnåIaL’ë~'¬ÄôWˆTàBpMºæ nK¯äþTݿϬœô¾éDÏ;'_õäÓŽª±”üåkÊÞé~1³ôªþãÄßg”ð¾Ÿþ>9¹ŽT[:+Ûõ&ý+&ÇXÔŒ(„0UM”[ÜÈeð[9_,eéßõBªTÿœÞÎùÐÞ+œu¤±oúZfè¢äøž72<Þבd†LJµ †¯¤Ó8˜?4r(V¾“Ÿ²ŸÊ¹Níz gí†ì»ÃßEC‡¯JC9ï„÷µÃUå:PiÑg‚þ¢àŒC­ìgEúÜæ[ˆš…¦ª‰rÛ¶Ô`÷éŸ(G—Òk%+ VX½nÓ´$ÆK­Ñ‘³¥Ó¶öLÖ§—hLϨU9{}´0vð-S¾£°x{Òm8eqOí¯e0Z-õ¼S‹ŽëúòæQQ©s8=¡EÔõæ°“<î8Æ¢fD!z°£z(7��’¨Qaªš(7��’¨Qaªš(7��’¨QÈ®†©øÊXÓ¿)ÝŸo‚�H¢fD!„àj"�D͈BÁÕD� ‰š…ìj˜bÆ8��üB͈BSÕD¹�D͈BSÕD¹�D͈BSÕD¹�D͈BSÕD¹�D͈BSÕD¹�D͈B4L±Ts��ÔŒ���ð!���Þ!��À;„`���x‡ ���ï‚��àB0���¼C��€wÁ���ð!���Þ!��À;„`���x‡ ���ï‚��àB0���¼C��€wÁ���ð!���Þ!��À;„`���x‡ ���ï‚��àB0���¼C��€wÁ���ð!���žùÿªÞÁ¥‰µb����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8q.png��������������������������������������������0000664�0000000�0000000�00000102141�15030617045�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ƒ�����É’ í���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ƒöIDATx^íÝÿ‹÷¾çùþ7ôÃþ0è2ÃÏ^†žü0ÄB8?¬˜,£MÀ?xà€Ùš™,†±7p‚C ƒ c0ÅYâ^ÄÙ/¡ïÑ9^Æ„^1‡\oÒèš\ÓôNBÓè¼·ÞUŸô©RIªRëK}y> °õµUú|TU¯ú|©=����Ta����*ˆ0����D���€ " ���@��� ‚ƒ����PA„A����¨  ����Ta��coo%' �`óØÚ�`Bòr�€í`k �€AÉÊ�¶ƒ­-��!$(�ض¶��„| �`;ØÚ�`Bòr�€í`k �€AÉÊ�¶ƒ­-��!$(�ض¶��„| �`;ØÚ�`Bòr�€í`k �€AÉÊ�¶ƒ­-��ÆöCȵŒ¼»²WïÈàÚܵPÖç‡Æ£—ÒmÝ Öo¯q$ÞðÂ<’O„ÁU¬V7Bc¹ö¥×nJ½3ðß @U°µ�À(e¿ï°!‡Þ¹ÈQ£.ÍÞ™øŸ_„Á-»H§¾|ï„A ZØÚ�`”2„Œ<ií5¤3¸4wÜÔ•œ{¤»¶÷›EÜ ƒ@µ°µ�À(c¹t¤¾¶08–˳ciÕÖ.gw€0T[[��ŒÍ…阬Zë¾ÜoÔü¿uW¼áwÒïµ¥‘vœ×å0ú|{»õ• Nû!M»úøAíÿ Cæ¯Ód ^§ŸåéØ1„{MiŸÊhi¿Q÷ky22®“¾72ÊT7BÓ±¤5iÜ¿<gÇ#û¯ÊÚ¼ý¥ FWæä‚)ÿo}û­½]—–÷Cð¾�Šƒ­-��ÆÆBˆ3&«vèÉy¼.eÐiLª—‡Áøó‘aïNx[w&—Áø@ÿàÞ i3-ƒ—§ÒiìK«÷ÚÇ+õøüþÁ~çÔ¿½Üz[“m¬Jk…ºaëA÷¥ŒÆ¶Ø0¨]ïI½u,g—c?êXÓšÔÚ}¹˜œðëÌщœŸëcáß> €"ak �¨”ŸþY†Ã¡¼xñB<Ï“>úHnß¾mœ÷‚Ç7"±ž9ˆOUüùæö$ü;_4¼™ÖÂÚ‘ô/lSà[é·÷c÷ÍGÌ«,uc,ý#©¹eîÖÏñ™ôšÚzþ&&Ëä½ý@8èšVæõÏý{�[[�@)ýôÓO“Ð÷äÉ“ ô½÷Þ{ÁAí‡~(= Âà«W¯äÇ ^£mL.Â`Òß³ÝIïŠ7Zþ!ƒy•¥n$Ô·~ÿ¯-™uÖœD …ÆÖ�Ph6ôi°ûì³Ï‚Ðg[2ôÿzŸ>¦ÏÑç.Rþ0h»Þ‘Þð—ð ö¾fO†)Žè ƒy•¥n˜2Ÿ×2hþ?íÒv+m~.Ï>9ðßçPzgù¾v%€dlm�…¡aîåË—“–> ÚÚ§ÿ×û´PCߪ]=7B.úÒv'è˜Ö•Ôa0þ|s{äâ›î€{ûÒî¿Õ;d|îÉ¡ÿ9j‘ñ`ûÁuÓ´î„aп“Syþé×sÂÂÍW‘­nŒ‡=iÃx2¼üe2fP'‹iöþ(gÁIƒ[fL¡ÿòË×Ò;úÊ/Mý ¯cyKö¤?ºÒ? @ØÚ�rIvá´ãú4ôÙàg»w®{|߯BˆiiÑ÷×% „¦¥ÆÜ·<ÆŸß–ÎCçv«'žûxë©ü>>›hÐJ¤³‰zÒf4ÕûÍ#æ¯,L<â¿vƒ­Aú¹EÖº¡õÀu“YFýÐ÷ùci×ýºÐëûáPCÞHN»-©¯™Î&^·Rï [‡Ã“æ}Sv5lm�;g'uѧcùì„.¶ÅOƒß².žë »G9�Àv°µ�lØEÇóéd.zð¯ÿêmíj'tÙ6BH>P�°lm�ïî©úÚò§ÁÏŽñË‹†XWÒÙeÓ]ðb] g–í]T\ÿ�`óØÚ�Öʆ?íÞé¶úÙîžëç·N„| �`;ØÚ�n¤Èá/Ž’”�l[[�@&Iáo“3|n!$(�ض¶�€……¿<÷[BH>P�°lm�3ô2:¹KÙÃ_!$(�ض¶�€€^ÎA[ÿt¦O½¸»½ÌC‘»}fEÉÊ�¶ƒ­-�T˜vÿÔЧáOC ô¥ª!ù@9�Àv°µ€ ÑV>mí{ôèQ�µ¨vÿÜÕEÞó†’”�l[[�(9;þÏ^ð]ÿÕÛz?¢!ù@9�Àv°µ€²ãÿ´åO[�µ%°jãÿV¡!„% ¶K·ô�ª‡­-�”„¶ôÅ'€©òø¿ªÒn¿ZþeŸùë¡Ðö Î�ÕC€s/A�„Ò0h[×´µH¢½ôä‘­+ºÐs�¨ �ŒÆžÍ×. @XZÜ|=A�¸tû¡'Üz¢ €êá—�¡pö@Ÿ1€˜Çž$p½ºíª½âõC½@õ ÇÜë�êÁ³€b™¤0¨‹Ž%e‚jÒºIªvÑz zƒ�3zÀn À�‘ż0¨‹Ö)ºWO¼ëpÒBwb šƒ�îL ºèÿiÅÁ*…A»0±LõèI¥¤q‚vщ‡�Ta�vÈN£izfž©ÝqSË ¶QϪIO:Í«œ �ª‰0�[ævÕq€LƒuÒ–åøþ_ýÕ_uŽîÆÐnÂù—)ûûû‘:  šƒ�°öröz€tŦ¸ø µ%¨ÛíšGQeº²ãFõÿîXB¶G@5`ƒôl»¶ÈèÁ–”Ó ›¯kÚ¨÷Ñú º¸4êI�ÕD€5Óƒo¬ÁN£3Ð=Û’Ô£'$˜ ¤Ú4ôi« '�¸ƒ�°&z°e»]é¿zÈm¡Ö €jr»‡€‹0�7 -~î%!´E3ïÈ#º)W—n£âÝC@`vFPmÔ™‰y§A±aÕc[…9I a�2Ð+maу+Æ¢h4 râ¢:4�Ú �„0�)ØËB蕆@β£ˆ´îêÉ Tƒv¥¼,B€l×:]o…¢³‰Ð¢]~¶{(e ` �Äè³¶ è“n��€²" €agµ!±U�� Ìƒ�*OC ;3(ݪ��@T–;3¨¶�@•TNüòÌ ��ªˆ0 2â!¨†±\ûÒk7¥Þȵ¹yu!Ã~OÚ¦t—æ>�Ø Â €Ò£%•v=N}/KÌ¿ëAGê~Yíí5ƒ�6Ž0 ´~üñGB  L LÇoÄ»÷X¤Æ !aÀ攎”©Ãà…œõ¥Vïwˆ0`[ƒ�JƒLG/¥Ûº%{{5iÜ¿/­š ƒ:†ðéiwDÿñ£M îÓ¥.-ïïæ<×ülD$ Ž<iÙ21!}<:•ãvÓ”ISÚǧ2:wžg_;é"¬eùƒyw�˜" (¼øu ¨¼ËSé4ö¥Õ}é·+õHÃÿ}„aðR†ìµ<É•œ{÷ü�xGzÃ_ô…ác“–ÁEÏŦLÃ๠OºrxøXNGWáƒÚ÷°!­Þk¿tlÙîK»ÿÖ”{]Sÿ±àÉrÑÿXzgþÿ�`a@aÅC × ”€#©Õޤa"À‚n¢Ñ.‰ñ0E÷Åí¿ç[òAë}©·ŽåìråÆÃž4'-€ÓŶú†eO¼s?<jp¼ûpZ� †0 p´åÌ“èÂàx4çÏ:A÷ÑéÌ•Éa0ù¹Ø”0 Ö¥ÑØ—=ìŒð±­³Nëà…Ú}¹0@a@ahÔ±€:&Ìó‹ {wü1¯eÐt-l´¥çýN¾ëâ´öÅÃà¢çbS&-°§¯Å;¼%5§uжzoætý´åO:Ÿ†ÝG` €BxùòeõR„@`±°+aMmO†—¿LÆ ê0ÍÏ¿Oü`X ZŒì8À†|òìKé>ÿ. ƒ~<ùî·ò鳯<— I6Ãtõ4¡{|îÉaÍ/K;p|&½fÍ/£–tOGþ³Çryö¥;ã/úÒÖVÜfO†ô°�a@®éã?üðC¹}ûvð�i\Éèô±éÖyKZŸ?–v½)í^߇ÿ05´Ñ–㓞Ü×°Ìê‹A7ŽakÔ¢çš?…µ [þ´Ütñ¡×sf ½+ÞèÚ™)Vï3³‰FÊãêß—&Ç�X‚0 —´õÏ^0þÅ‹æ^�Àro¥ß¾Ë¬¯�–" ÈøäÉ“àŒ7× €ì´kéÝ»žœÓ,`  €ÜÐ@m |ôèã 3qL0VôKØëÀ„A�;÷êÕ«`L Ž d\ ��ÀvìÌ?þ8¨³…��`{ƒ�¶Î^4^C ã��vƒ0`«¸h<P Úu›ûÝÒ.ôº½ä„€M! Ø  ¨—Ú-”q@þiÔß+vC A „�°)„A�¥4:;(ãâÑß-'ovC·›º�À&lŒ†?=˜Ôº9ţݺµK7¶‹î¡�¶…0`ít, v/Ón¡´*�Å¥¿å½½=Æ÷nÝClaÀZÙ bž<yÂYm ´ePÏØý¾é `[ƒ�ÖB¯¨×Eÿ ô÷L—ÅíО|×�¶‰0àFô E[ ô�F[”vû~ñâ…¹…MÐm)—ó�°m„A�+s/Á˜" ¼tüšþÖ±9zRKy�Ø6 ��XŠV«Í±ÝC9©`Ûƒ��”€Îúɲۥhƒ��”À¦BtL›¶^åu‚¨"„©ut-꺣|ª^ ƒ��`'¶q’ç‹Ðñ l]ÝC ƒÈ Â`ñÖŸ­°s×2òîÊ^½#ƒksW ãÑKé¶nž½Æ‘xà óÈúŒ‡=iîÝo”áƒ؉m„äù"ôE<Óq˜ë˜¥µˆëŽrªz],âú³õ�ŠhüF¼Ã†zoäzt"Gº4{g26ßÌX.úGRÛkÊѳ/äþÁ'òì‹Cÿ6¡ȳm„hË`/#S´ƒ0ý×5{(ayA,Þú³õ�ŠhäIk¯!Á¥¹ã†4\Þ{<m™¼JßûJ:AËcMí/Ä{>ÑzÒæÍÅ?/€­„äõ"ôE:ÓïP?ïºZX«~�Žü¨z],âú³õ� èzБúÚÂà…œõ¥ævSÍuLø¼�¶z¢-Zy»ÌD‘Â>üðõ¶®‘„Áâ­?[ ³ zGÒððú£Ÿ,NÞù!ª×–Fíißoú÷×¥åý`^7‡/} 7övë+œ>–VMßÿÀ~ïüÍøÂøß½û/ûÆ„7½¿)íãÓáÍ«Éûéçý;ÓMÔÿ›'O¥¦›èå™xm]_û>áRïœÊ»a_zþcµÖ}¹ß¨ù÷/én:ÉÀëøëýtžuÍúß’V÷¥¿>IŸ÷?˰ߓvc_Zí{a¹´<™·ªBÛ’Ç‹ÐosýoBC †Áu*ʺ£üª^‹¸þl=€LüÐ5èúijË×ÒÓ�ÖìÉp|)ƒN#ØìÕî‰w~e^³ˆóš Ôý"ÃÞð¶:ïL.ƒñþßpÎLËàå©t4 õ^ûïx%£þÿ3֤ᇱåm‡æ3$´´…gÙXÁwþëd¯Ñ•Á嵟 ý�W Ç0^¤S×uÙ“Ú¡'çK鯨¯ñ`°>6�îK»ÿÖNôó†Ÿ1|¾Ž¡ÌKOV`Û¶}¢aPCa^l{ýWa»‡®ûòEXwTCÕëbן­‰i™«IÿBc‡m©³i~°š/þs{þfß3ãŸI½•~{?vß<«|f×âµêRk÷ýØ6½=ùü&Ö;ÿ“¦ÿN}ã3é5kæo,û>€jÚöAˆvÍSWÑ"„é÷µŽÙCãƒÈ Â`ñÖŸ­Ñ8˜½sß´B™V± eP]%XÅ_cn§ƒI3!P͵Êgv™–HÛ´R:³›®# Fæ²ï¨&ª»þ„AäÛ¡â­?[ ³è¸µZ뱜Žl—ÐU‚Uü5ævê0h»–Þ‘Þð—ð ö¾IH]d•Ïc»Ë߉ßg[cË`ø˾ š8«îúW½ì‘l‡Š·þl=€Œ‚ ±Ï N¦{f¦`¹= rñÇí¸:;†Î¿çܓÚÓc9»ÇZ/—1áªv$'ßýV>}žuÜ]<熽‹¾´ýÏ–= Ú1ƒ±–Ç™Ïû½üCð}Qm„Uwýó¹îf[í¶¹Kë©ü>ØÞ'<¦û€Ž'ƒàd«Ý/,{ž>u:V=yY6±›é‰bŸŒ‡ŸœÝŒ}Žè{Gñ:­ÉÉâ`ì¯/ÃÉëcïYô¹¿®ÇÂçê’¦çÏöég«²"®µK X ^ѲNöò·Òww|©algYoKç¡s»Õów,îí„gЂ¨³‰zÒfëÔûÍä3æ¯,f'Å™†Él®äÜ»çìüÌÒ8ﻓÈN9] ´;Û†´ZfÝk-éžêZªèç}ÝÿD dt!¢ºô7PeU^ÿ|®»îßå¨n»c×Ç NZøAËß)'Y#ÁêB†'f6i§‡Kªçi<x }7DNöÇáÉŃTû"»®Iãè$:;·žä¬»còýý’™<­ÑöLøÓý²™å»a?²½yÜÞ/#·ÃÙ°k‡Ò; Gàë{„'ãÁO‡¨<$ æP׿Ú%d¦ü§Ò·žé89³S«ž 9;þ\žGfO [ºnœ ƒù<ë äaÕ]ÿ|®»¼þøz¢ba0òxðX¼ÅΆ1g_æy~°úãíÉÃxôE_$ ³÷ÛøaÌöT14pî;¯%͘ôܙ̨=o7=Ñé¾O8 ¢8ûC¶CÅ[ÿj—U0vm?:&NÏLz¥íî(*$8Si¹óéu>vÎnfaw”îH�ËpVÝõ/ĺτAÇLȳ-mnˆò¥}ÞDBLMÃàÇâÿ)¼¼Óäz¿¾H´­wæ’JÁ\f¨ÇdŸ¶è„gü¹IaP{ã<nN{Á°*ÞúW»Ä€Ì®d4𜋻ûK£-½þ09.»°é³}öŒiÒßÖ%~†u“‹ÄÛ÷Ôn2=铃`¸cs?â¥8gC]ÓßL•Uyý ±îKÃ`Â> ~y¤´Ï›XCÔ}mù³c×#aÐîgç Sˆ?¾( Ú.¤Ó9’÷™óþÖîé竲"®µK �€’à ¬ºë_ˆu_Ý““2ì÷Âqð“ÉÃ|iŸ7±¦0è‹LÔö·[ ƒ´ a��ìaÕ]ÿò…Ae»_:“¥}ÞÄúÂ`Ð3Hg¶ÖÞ/?‘öκ‰æÛ¡â­µK �€’à ¬ºëOÜFT:‹çAð}GÞÓ\B)zŠÐ*ȸãç†Áññ>þjfš]c;T¼õ¯v‰�P„Uwýó¿î6èL»?ºf/á?r¹¤éÄ-iŸ7eÂÛÜ1… hØ:ü`ö=ƒûoŦ]?3ÿ¥¹V ~¶.-y® º± ÕüçŸvå ±%r·Øoý«]b@Á½xñBÞ{ï=yùò¥¹@U-= ZU캸­4v\“y,¸~ihù…´mK‡}\—_Éo~ó«Ø}vÑæ/äù`:qò$‹'£ŠÓ×Ì7{o·)ú÷ÝV˜“†Í|¯~XùÍ¿Ýç,úúçgFêØw?Yâßó|úüüJX¿IýJª;ÎâWÇA=Iû<ÇÌnñÅbeoqt¯‘8¥á¯/½vÓù›ñ2\p!ùZK:Ï~—òõºÌ£¸[úÙª¬ˆë_í ê矖GÉíÛ·åÇ4÷¨²t!¶›[R >ös=5ÿà6õ…´}¦«\­Ý—É%³gZr4\}iZrb×n ^opõ”­:Ë×ßOÛ ÏùŒ¡ð±¦N29¿³Þ¡‚ýzïÌ|N{‘sÿ;‰\ˆÜŒõr?kp)"ÿóG‚õ©›°LD2ù[¦hÒÚ¤—,:šóYgUý�ùQõºXÄõg댆? 5€J}„®[rè½ñ#ˆË4GŸLÃL¦ iûLKL¤%qŒ—Ͼ·Ûý-x½ÛÚa»È¥kÑI·þah›½&þ­OähmpLšDgs¼ç.÷;4­_‘®ƒ¦eÇ ƒ!È£ï´NF^o'Y>yayA,Þú³õ� D»ƒj·PÏóÌ=�Êê§Ÿ~’Ï>û,è>—žüIbBF,äÏŸËQ÷tÒ*±´3$ú²„Á¤÷ßJ´ïƒõF¼£ÏÉ?ÖÏe' ™|‡Y oæõ„ÁmJî–ì,Ie†Tôû«²"®?[  ô Pƒ ¨ýÍ»©zû£> NéÉ!w{å $ì¾évÕI->v‚ç5o\RÂã™Â ý N7Èàõ5itÂ@ŒË º‰&]?nVêõ7Ý7£ÝYå®zͺ̅ræñŒaÐv!uº•†ÅN‚b/ck}#KÙ›TõºXÄõgë䜶|øá‡ÁB·P Zô$\,[tû ÿ¦f‘ zûî±ÓR¸«0]¯Z«+'k™@Æefsœ„Ìxöí, ºëKZoJ0 ª¤êu±ˆëÏÖÈ1;>P ‚@õhëß4Ì_lhLÏŽ{ÓnÿU.úǦ©ÏC7Ñl²¬8æÑümí²y™‡n¢ée+{`sª^‹¸þl=€œzõêãŠÓ“@zp±hÑ ¨ôÿ™˜@Rk)ÏÚwgC ,©.¤íËí2nÐ-†ÁIØ«µåÙ³£„ëµMêí¶:µ® d¢“øQU¯‹E\¶@qý@ º4�êÉ ;Nø/þâ/‚Œ¤ÅA¥·³±¡Ä¯Ød2¡éŒšË/¤í›„Kw,Þ¢KK4å¨> Cáë“/JžF¶õŸ^fbnëßäûiJûøÔ\Fb]—–ˆ¿Þ„Ï”—ш[¾îþçî÷üï½é„í0¬FÂû\I¯wÙnæn. µ)Ÿ¯'öç<v9”~¯- ÷µÁɇ”'’^ï2'7ìg\ú=¥|¾†þýÄÇô·^§púÚ]–‘9AaŸŸò{ÕçVY׿Ú%ä=�äú@uèÌ¡zH/£:P{èv@ïÆ¢Küd‘Þ—UÖ’.3aMP§û¦×±pO#“—Kwð¥¯Ë$>n2‘=ÀÖðj>ß /:_kuä™ûúøAzÚ0ãÐ×-bÇg®òÞjZ>ó^oÖa¦Ôÿ§ýð¬¯õ˽ûÒ Àʼ.s4ã>õ3¥5³œï|aLêâ¬uâipB$±žšP˜9 Ú“þgZ¥þ¯\Fã‘ ŽýP¼Ö=ñ3¾7a0"®µK Èm ÐY™(¨ ôÉ“'Áo^O�iÔ€ÿýk Z%©×@BÖ©ÊëŸfݳÐ'Yüú¤ aZ_k‡Ò;óƒÐ5x?vâaÕ0¨–¼v©;! NCלжjTK^»Ì*etÑ(‡AH÷Ëëì8îñ$YêÛ¡â­µK È =ØÓBm$夿m q¶õ_'‡Ò0¨]B—ÑçêA†.óºsVÝõO³îYè“da×Ùi·á¤®°Å ƒE¡­PaÐ/£îS§‹¸mq^Û’0˜^׿Ú%䀶è!Å�åc»yj«¿$è¿z;k7p ˺sVÝõO³îÑúøø4{û}i=ûVN»-©ùïéNy½Û56S A# SawUwŒæ:Ã`lÌœØúJ“®ªö:ŽÊ}}´«sðì< n¡Œf˜ï!6†˜0˜^׿Ú%옞á×¼ygú‘Ý‘³k)# oÚš§¿om ÔßøMZý5. eý.Óªòú§Y÷Ƚ úº h8ãÕöGâ /ÌŒ±Ó04}ýy0‰Îáác9Œ-KI“¹ÌÜ·¾0~>]'}ÿ·Ó1…:ÆÕ;“Ëñño9ŸÑyý»¡œtî™î’Áƒæ;Úa4ÿßhÍÐÖÜæÌâHÝYB?ߺG'rŒÛ½%­ÞkMf-{Nš÷X‡M¬ÿ¦U{ÏìŬ_7ÂUWŽ2ÓK <®s ¤aP[ý·©êõ¿ÊëŸfÝgèã¡%¸í„ŸØãáëoÉ­÷¥Þ:–³ÈåFvUtãŸ)þ|s»ö¾´>hÌ„ø÷áŠw®Eùô3¦î&šx{e1Æx6&Tš©; ¬ÿw› *±®,{Nš÷X}ÿ¢©öžØm`¢˜Í(âF¸êŠ_fþT0éBº¥Mªzý¯òú§Y÷™ú•‚F] ½„†s}È@BÐH¸THø›ê&jß?kükiüu¬²ñïÃÿî\‹óégÜlÌPF.à§õéÌ5EUô{]l¿CZ7«Ú{`Ë´‰b6§êÃE´õ2³ãˆjHû¾^.ÁXù÷ŸtÌœ™éÕu¬Ž¹¶^ð¸½îœ ‚æl³.sϺo^Õë•×?ͺÏЯ4üן¾º[Ö"-O AÃtËœN c&'qƸM^·Ë0èß>}£Ý-c!!þ}¸âßkÑc>ýŒ› ƒÊȺ|-½v'zÝPÇLÝY€íPñÖ¿Ú%l‘A&ŠÙ¬ªï„Šh»ef†ü¿=k^\Ü8MÎ ÛƒV3%~x x%£þƒðBìÓàÀ1ËÒ&qVÝõ_¾îf&Ï=§¥.h¹s‚Fp»&ÍÞY8^,ò¸}}XÏñjÓß@rлÚKK„¿«u^Z"~¡ÿègœ<>™ ÅÜžü-÷¶võ¾ç¿Ö™`&¼\ñæZô˜oa4ßù$@o¼Œ|ãséw?w‚ žäúRŽŽÍßðÓ+âúW»Ä€-a¢˜í¨úN¨ˆ¶_f ŸÁ8&·;›{àü÷áX“ÈtøÑƒPÂ`>Tyý—­{XGm ¶_W¿í%¼í‡‰‡y8¹í §OÇër§u'úz¯çÿfìm½ žPI:çwd.hn[ÔÍCUàyý þë¿ýÖ]ÇØÒê‰ç>?~»þP¼§Î˜2]ya0Ø^˜çÙ皇«†Aó:û¾Ñ2ÙPi‹à¤Çƒ»¸]ymý! ¦QÄõ¯v‰[`ƒ`šk‰áfª¾*¢í—ÙìÁgâNpÀ§‚ß%¬ÚÉÂkqó¡Êë¿ûuŸÓê´Ôªap æ…ÁeV ƒ·j…Ÿ™0˜N׿Ú%l˜^OŒC·§ê;¡"Ú~™Í|†×>sº^MîÓ³ãïÌõî™r3öÉt?# æC•×÷ëNœ šÿUS׿Ú%l—ŽØ¾ªï„Šhûe7ä³×3c›‚14GÍÉì‚áØ›½Ø˜Â騧ð@i_Ú'§òüÓ¯g¦eߪ»þ»_w4üÏ,óÂÝDÊçï< šÏç/óÂÝDÊçï< šÏ·¼Œì¶Í®a0"®µK Ø ‚:kèO?ýdîÁ6T}'TD›*3­W»hÛ“2¡C—gâµuvQ}Lgõd8™…Ogõ¤LK®›‹X›Gà füÇl˜Ü‘M}—EQåõ߯ºëïéöíÛ¥9Á©Û†2Mè¦ÇÛ¾¶i¶CÅ[ÿj—°fz�úèÑ#®!¸#Uß Ñ:ËLRµk¶þþô}õzžz»*'e8«îúorÝmÔßSÂÆ:رüeÚOÛuÚuXg;T¼õ¯v‰k¤;=%îNÕwBEtÓ2Ó‰™ž<y¬êží×ûªøä ¬ºë¿‰u/cTº}(ëméÔ2ÛåöíPñÖ¿Ú%¬‰ ‚z ŠÝI½Ží˜]tÒ€ïÍŒ‘Iß’VÇ3%·3K.{^Ú¿»h²‚ÄkÕ§Ï\¼9þ9¢ï5 Ä›\T]—¦´{}§+dì½#‹>÷·ÎEØ=W—p–Í4ôùYh+Ÿ¤j ¼¾Vw›ËAX•×ë^Ö¨t;¡AP×±¬ì0•]B¶CÅ[ÿj—°vçBܽÔa eÌEvMˆšŒ /*~`ø‡³JºÁêB†']iÕüÐ3¹˜qÊçeø»‹Ù±o5iD¯Û¥!®»×ÄÓ ûŸÃ§cྑŽ^_ªa?2³dºan<’Áq;¼NXdLœ½_<øéµ¬®5 êoLÏxëŽ>_ƒ`•º¦ÅAXu×ë^æ¨4é¾Z·e§e¸«c¶CÅ[ÿj—pC6–iz‘¥Þûç3AΆ2Ÿûøäzsn‹ cNJó¼,w!}ßC¹ßþÀc·¤Õ{=ÌD§;ûžÜÄ ®Öd–L3kæä3Í<?<ºa tÞ'œi.þÜl’ÊLÚ´+—ÌèÁ©.ú®Õ¹aÕ]ÿ›¬» º”1ªªõޱ뫽&¶íPñÖ¿Ú%Ü€î4ËÞݤhVÛ'„2×Lȳ-mnˆò¥}ÞÄ’¿»†ÁÅ;ÿSxI„½é Þ…E m½‹^CoÊ\far ½yaPÅŸ›¯äÜ{ Ý ×Û³e¦­|zÆÞíþ©'Yèþ™aÕ]ÿUÖÝ eßiÔÖ²*Ñmê.ŽQØoý«]bÀŠtãª?x‚`¾¬¶Nu\l©¹]1}iŸ7±†0¨!lrYƒ{~8¼Š…AÛ29ïúPñÇ…AÛ…t_Úý·Á=ÑkPÙ%ýÅ×õ„оFƒŸ´hÔßԮƺ~—UVåõϲîú«JTÚ:¦Û˜*nWlï¥möª`;T¼õ¯v‰+Чn\ËÚ¦ÈVÛ§ ƒ±±€ý^xÍ9ÀTÚçM¬) ú"Eç‡Ã­†Áì-ƒz–^Cz0ªeF÷ÏõÐï’…………e·KÑ l¤ëZ>­¶Î•í~¹'u;áKÚçM¬/ ÚÉg:¡ÌÃO¤½³n¢éèïÈþ†Š¸ãФj-–íyÀþZ‚.øzìB¯ $a/ ¤DÌ¿ê†A¥³xßAä=uvQÑ4rŠÐ*ȸãç†Áññ>þjfš$„A`3ª•íYµõ^D{dTµ»,c/ ¤@,†Õ‚… QsÆöÍ^2B/Ëà…Ý?‰[Ò>ojñß]HÃÖá³ïÜ+0mÓKK|i®¨Ÿm…KKDžkƒî´¥0à?ÿ´{(‰-‘³ƒÀzU9*;“&³|ÏÒIttl6àb/ ,A,ŽÌÁB'[‰\Þ s¶•Ì}ÜYm9èe Ò>ϱðï.´@N_oqNäè kmÔð×—^»éüÍ ¯µ¤óìw)/P¯KúIdôù�n®ê!ÐÒ X•KHdeƒ2ß\ì…‚ÅB°(Ê ¸Bà]!—Óï†.´p±æ Á¢x(3`5„À(íªßAp9ÆTÂÅ^H@,¦2‹äk÷9KË“‘ynè:H8‹}vvzI¾3(öÂ@ ;•â"Xe¤CLf[¹¸öovöxç§Ÿ~2÷ ŠØ Ý0êÁ);•b"Xe,FœOCŒ†¾—Õ1Îì…ÃAv*ÅE°(Ê HF\ÌÎŒùäÉsV¥—›ÐËN šØ >‚`9,Ї2’l{aTž¢&–Á¢x(3��v‡½0*Í<'–Á¢x(3��v‡½0*‹ X>‹â¡Ì��Øö¨$‚`9,Ї2�`wØ £r‚åE°(Ê €ÈX.‡}éµß—–÷ƒ¹/îñZu©wr­7/‡Òïµ¥QïÈ ¸#fÙãHéB†ýž´÷ÄÍù"Gž´öÒ\ú7lY6§ea߯iž]c/ŒJÑ©¨5zžgîA™,Ї2ÃÖ]¤Sß ê^di´¥× ‡§+€û}Ú`ÒøLzÍšÿºú‚0èúE†½;áßJ {—2è4<^3åb—¦´{}^ŽÍç{Ò ^sw~tMÊr/1 ^:RÞ/cÁưFeØkéVQNºóA±PfØ·Òoï;­Lgâµ›~}Ü—vÿmðŒí¹’sït `~§{µ#é_,3‚ž6 *øæ†½eW„ g-OFÁ표v[Ró·½µv_.‚'-¸”aP™.É-ƒöýƒyÁ^•@¬‚EñPfØ0(DV/úÒ®íMš·bìçÐciÕÊp`lÂתßapCÂr±­ã)ËŠ0Xnì…Q =  ÊMƒKñ`û–„ÁË¡œtÂÖ“ ž6Htå?i:ªÖº/÷ÚN’ÿ«Œ_J;¸­ÏoËñ`ä?Û ÷ìÛI‹Ì^£+ƒËkÍßÐe«AtÝR†ÁÈw[“FÛ »+Ú08ó=i+cÒ8´„°ç´zí5îI»u‹0ƒ“ïÿ–zoüoÖºáIwZGâ ÃvCŸ ~']ýNµÜ:§~ ¨„1€3aðJF§Í{7å~ûÿïó‚½0JO[5jë ÊMw`(Ê »a‚„ ãséi7Ñð�ùÊi Ÿ{rX«I³w&cÛ¢â×ÛÚ¡'çæH:xNýPzgþÁ³}/í.ùßMÆOÙƒëðý¦-`åi%IÇoÄ;¼e¾;?à ºÒ°ën¿[¼#ß“ó½ÏƒïüÛ~H,§úúщi8' †aPë`°Ü’Vç©ôMÐ iWå{R«ÝïüÊÿjO¥ãwö»ë¨�Nd46Ï5¿ð1}_§G )çZKº§#O~k„Á¼`/ŒR{òä A°BtG‡b¡Ì°&HLýÅ?Xíœ$L oåˆßv'3‰,nÈqº?Æ^_¥0NFrGzÃ_Ì=ŽÄïiþ÷6ƒ–]wÌg<,VÕ´eð<ØÑ`\a=<áaîrÙ–AÛM4ùö¼0Ž%uÇ'–§Î—{a”–^:BgÕKI ô� ÅB™a7 0  Æ#<ÿJ:A·¸EaЄŽfO†ÉGÒ CM•Â`<DD$~OéÃàì÷H ¹ÝDm«^¬‹hü»Ž‰—[òí9ap¦Üžb/ŒR"VÁ¢x(3ìÆâ0v1<vÏ“þw'уÙy¡Äv±‹‹hÇ^_žãað¢/wr´ Ι±5ñ{JÃVGZgÅÆ š®º‘újf7»èÂ`Â{ó…½0Jg8˜Áê!Xe†Ý˜íº6eÃ]x‰„pìš`ûÉWò´ûµŒÌD3ÓPbƒÈÞd¼šNªqÖûD޵;dð|3æPŸ{}x`쇘“Syþé×Ñî{…b.- _ãÑKé¶šaH³Ad2!ïâwÒ=ö¿›Äïiþ÷6s) { ;6ÓŽôËen«mØïÅùlžNtd[ ›rÔ?7-†þ÷Û}ê¿fìõGþc¶{ï¼ÛN¸3eþ¾l7j¿xgr93¨]©çtÆV±F©h�ÔAmDõ,Ї2ÃÖ™V‹ð`Ô_fZŽÆÎ,ŸþìñséÝ÷C‡˜^F^; &îl‰þb²#«.­§O£·µÕËLÖ±W3ÐÑÜ‹››Å¹ö`î·ºÔZÇröÎÿ}O‘Ûú½÷å[ ìæö¤uÐyïZ«+_´Òh÷b“¥TÈL¹ØÖ<þœïïÊ™‰USÓæ>ÿõO½‡ nûðÛ~¬¬´uÐyoÿ}?ÿâ¾ÔýßH¯Ÿ0F[Ç^¥A„îxP,”��»Ã^¥ ³…Þ¾}[<Ï3÷ ŠÅC™�°;ì…Qxõòz=ATÁ¢x(3��v‡½0 ï£>""@°(Ê �€Ýa/ŒBÓÈEå«EËZgŒÕ±¡Ú-X뀞Ðñ¢‹â¡Ì��ØöÂ(,{-A‚`yýôÓOAàÓ°§‹‡y‹ŽÕQ,”¶EO"�¢Ø £t§ÎEå«aY´‹žÐ¥×“º×^-o(3lšî/t;¢'Œ˜mz·^¼xÁIÜ’c‡âa/ŒÂáÕ¢­ƒ¶ è¼Ew<JÿÇåkéµn9×BËÊ ›BÌÛ›‡“¸åg÷Ûü0 EÏ8q ‰êѳÉnø‹/¶û—þ?ŸÆr9üF:“ -7¥í™‹í^Èð¤;{±jÿѽ¨rË“ÑÌm}ϾôÚïKëÙ·Ó ú6º2¸O‚`ø÷t±ÎýlÀ:óÇžÄ}õꕹeG™{a ]ªKË~l¦‹ôYz;´«æaí–zoü÷Îu²WïÈàÚtƒ®4j‡Ò;»Ð'Jÿ¨é¯ÇtïüW¾•~{ß„?åÜŸI¯Y ¿‡Æ‘xà ówêÒò~ž-×éÔ÷hD%óIOâÒJTM´{a3‡Vד'Od_þò/ÿ2 ?΢ÝQ¬|‹_dØ»#{Íž Çæ®‰ÄkÕ¥Öî‹C}i×öÌ}¦5pc·ƒ°· üQ„Àübül äØ-¿Ø £t^Mz6Q$ô@OCŸv7qƒ`ü�#ŸÁ"è‰a- ˆáó ƒÀ<6꾡ùôèÑ£Hï T'óó½0rO�Ý ªÇŽŒäéÁ…ÞŸtr ŸÁ´ ÖŽ¤k´]=ÝVÃྺ4{gÓqƒñ0hŸODÅC ˜ùD�€‹ùÅ^¹f Óõ§:ôÀAwÚå+é€>>¯% ¯Á"ËW“ÆÑ‰Œ‚Ð7–‹þr<¼sïžÔönI«÷ÚzW2ê?FížxçWþóLø ‚äµ\=i7Ì8A ˆA—Òš Ž>ÓÅ4kí¯å»ç=y¼g¾‘!0æ•íèvãGµi]YÔe˜ßóî°Fn醙C«Å¶ëÎbÑŽA “Ïo°ðCÞéã錡“ð§.dèI#¸ß_Ìd0¡±\ž›×ù¯é~-Þ'Mi´¿”Á/ƒ ¾_]ZOŸFo­…f²šÈßË—ü–ò‚˜OZ.I'íô~-+zó N»Z7´çKëŠÖ%­;Ø>öÂÈ-W‡î t’ÝIÜdj‚EñPfÕ’%ÈóÍvå×ò±ñôæÁ2ñ:bOh]âäÿn°F.Ù±(?Ý1hYëAßM»,Ї2«Û*°ìwN,;~Û.ý~ŸÞ<HÅöúOÿé?Eêþî±}ì…‘;z¶Qw(�”Ÿ4è ÞedUú^(ʬ:ô@OË{^B`±ØÖwù×ÿú_›GÅþí¿ý·3õGlß:r…™C«A[ô O[×YÖìHЇ2«{âÇ.në !°xt»í–§»,ójÓº¡u$©îèb»c{Ø #7ôà@n2f ùg¿Ž\÷ƒîHP,”YùéÁ{°§‹ ‹ËŽœ·è‰>ÊqZ'´n$Õ»è¶�ÛÅ^¹¡ ('{6p“_w$(ʬÜôw¯¿y÷`Ï.ÿìŸý3B`AÅÇ &-:Üã¦ãÀQZ´N$ÕwÑDØ.öÂÈ QNÚ ;=€ØäŸîHP,”Y¹é{ ç.Ýn×< E³è ^ÿžø#"Në„=)œTwì‚íâÇÎÙnƒì8ÊIÏükù®k’˜E؉eV^úÛwð’Æî«“ÊR¢nçiéÅ2ZGìdIu‰íÂv±ÆNéNEƒãËGËV[{uÙÖ„@º)£ëAGêvGYïÈàÚ<Pe-³ªK'˜´Ð%¬xôúpñ2dŽUé¶"Þí˜qƒÛÅ^;Å8ÁrÒƒ ùÛ.[݉”aE²hœ`ÒB+@±Øn~tÅ:i]Òc­[œ$Ú.öÂØÆ –ê>ݘïâ�O,ˈ0ˆ"Ñß¾žÙO»‹E[é ŠMÒÊØöÂØ Æ –Ðmc’˜EÊ,þüî{ùÃ` ]þð½¼û³y ƒ��ì{alãËÇvíØõÙ<‚EñPf��ì{alãËC'†±“Ää¡•—`Q<”��»Ã^[Å8ÁòÐi¡µ5PÇüäÁ¢x(3��v‡½0¶†q‚å`'‰Ññy›ø`Q<”��»Ã^[Á8ÁrÐð§å¸ËIb!Xe�Àî°ÆV0N°Ø4øÙIbòèË,¸´��ØöÂØ8Æ ›$F/›÷.¾„Áâ! �°;ì…±Q¶[!ã‹I'‰Ñƒõ<M³a°xƒ��ì{alŒv-Ô ¸ëkÏ!;-;m ÔIb´e°(Ê,¸è<��Ø„êí…Gž´öÒ\š;Rä´Û’Zpf¾)mïL2¼º²t’]P,vÖWíÞ›ÇIb!Xe�Àî°^êJν{R?ôäüú\úGMÙköd86#‘¶j (Z˜¨2-«Ï>û,÷“Ä,B°(ÊlÇ‚¤¦ ò^MSçdçâµêæ1]îÊSïá´Ë²¹Ï…ý–#Ý™÷êÒúÍ¿wÞ[—¤±ñ¿±'õÎ@JÔz·2•ï¿”Vkß¹í/-OFÁs/eÐi8ýJ~ó›_9·ý%© {äïë’ñd<rîÚ/â»NùøåûÎ<æ‹—«'^¤é}Ô±]c/¼T¸±\ßÎIÃåé–¸¢ÚËHäít˜O»‚j—PíZä�¯; e–×éÔõ@ª)Gýs™žïËEÿHêí¾\˜{ü;¤]Û“š{Ÿ5>“ÞÁ¯Å;¿2w¼•~Ûµ#é_Ì;‹þÚÞ¾´ûoÍ}X«Ô廸,ÆÃžèÉqû‹êÂDš:€¢›œ j<þÈþþ•–ÿSŸ¨cyÃ^x³]OËåÙ±´jå>k¡‚ËH‡N£ä:YLÑ,Ї2Ë Ý×Ü“vë–@u(½³éa—äí»ûÀ…ûÅÄ»û©söޜퟜýOHN[±fÊ7,‹9Ç)#OîÎÔ…º´¼ÌIÒÕÛõ +÷ïûǸ~pkËÙ¥ eZþ­H}¢ŽåKÎ÷Â2ôޤ¡gÜE›‰ß ¥ßkK£ö´ï7ýû—Uå¿_¿'íF3¬€—æ=Z_ÉàôqP#MÜóšžý×ø;CX“FûKD΂$±AÐy¿VZ zº‡æŸ¶àjp×ò*Ò$1‹èï ÅB™å„pÝõäüÜ“CÝO5º20s„ÁÈP¾¨c׃Oå®÷§`hU-Ò%™0˜w9Þ ûáiÐõƒ  g—¯¥§g´‚ñz¦Ð5PÕî9ÝQ +Ÿ1­€oeØ»¾‡füF¼Cÿo¸•if§÷ÎÿÛ“³ãщ5j‘ ë" �§B¿Ï²‹2+ò$1‹,Ї2Ë F“}ïžÔLW­xX˜Ý/ºƒ¹”¡|§p Ž9Â0¨õ <NÞÛ»%‡Þ­qþmÂ`žåx/l¥NúÿÚAªvga >ã5·¢0^yÞ3¾Ó Z Ý~ÎÙÆ:,ü˜ ma*ÊõèPNe ávCO\ùKÆm^ÞsbT8qZÍ?˜kõ^Ë;¿þ .Cùr ŽULàÏ6®]’Ïýò' æY®÷Âa«Û¾9³`Î4LfòLn)D+`¼ò$¼gl§—Xƒ€¸¬¢†þ� L[˜´Ë!°K„Áâ! æD$,øÆföì½yØùu4 .šXM'y¿KÌ›,åÓ$§èäïs Ž‘0è›öœ;’Nûƒ„ãfêX^ä|/|!g½C36O¤>–ÓÉØ¼„à–ÂMàVÒæ^Mš½3? †ÂûîHoø‹¹g¾2†A5T»ê4`—ƒÅC̉xXP—§Òу9¿Œ¢Á/ ƒ‰—YÒ™ÿÜû¤ùÏý¸¾ïü0øVú^ª:¿YÊ78Pç„´'ÔÇràÞ?÷@]ŸÛ53§§«(¶xÔ:`»$Ï\î:–+¹Þ !kî™F6Ó‘íÒi+¥yÉ-á=ãSÚFš¾ý{ÌÙ5Û÷~™p‡·/í“Syþéש^“gÚ=Tƒ ^Wص²‹?¿û^þ0È@—?|/ïþl(Â`>Œub‘æìØ÷à~ ƒN7ÃîK/ñü†ßH§Õ0½y¬ä}õxôRº­¦^ß7㑜v[ÑËZ`%™ÊwrœÓ’2T2<éJ«›§Á#ÅëÇH'å«Ûa>iê�ŠM· ¿–fä:–Ên+â¿mêXžä; ÚY¯‚³ vÑÉ^þVúzÀÞ—2FήǗø…0õìBpæÂyŽ=kyy&^[»Wè}:›¨'ÓÇ외ØÔÎEõèÑ£`ò@“(Êl×âŽ÷\ñºúä r ¦ììÜaËR°øv“áô`pf[‚9þnæ¢óÑ%Ýx|̳bùÚÙÖ²¨µºr2´Ç-ñ÷]‚“è©ê@Êã'ä”é)`Ë4~L4šÆê:–9Þ ýÌõTºÏÝ3Œ> Sîx슶j« —‘@^è†ÅB™�°;ùÝ ë ôæ¾ÓEéuJ»÷:Ö mÓñu¼ ‹â¡Ì��Øï…¯d4ð¤£×Ôf^]méõ.(fð¨}îÌ’n¶Ï›XØ U—¤­¥3‡ê ¢Ø"ícï1­â èï ÅB™�°;ì…‘™^KP¯)H÷Ðm23ë¦[U‹â¡Ì��ØöÂÈÄvýñÇÍ=Xvy>Š œ {ïÌ êÚÒ¾o'*Ú›\b%låþÏfò†}iµï…ï£-Ïã‘ Ží€lÜèKØË±,z¬$&ß#K¡��°ì…‘ ÝC×Á^{ç@:ƒw"—¯¥§Ý¡ƒKœ8ÝkîôÊæ~Ó28í’|Ë™Æ=œÂ¹Þ:–³Ë±Ÿý ¾†—EYô���ªˆ0ˆÔ^½zÅì¡ka¦KžLwl§O¶\Ž¿Ðì}a t¦ &]r¦y·‹¾æjÁct;��¨$ RÑ�xûöm..¿&aËܾiÕ{ç½Ó2¨®¯ҩפÙ;‹^ŽE-z ���•DD*:iŒvź˜ aL ]­õXN'ã÷ný÷:ôä<žø=��€J" "BC_¼¨N£EÿÅzŒ‡=iÎí¢ùVúíýä0X;’“ï~+Ÿ>ÿ^þ¡ä‡I' Ê/2ìÝñËêÖôúœ:ñè+Ž=¼���CD„†>øâÅ sO8iŒ†D¬ÏøÜ“ÃZlüÞ^SÚÞßJ_CŸ½oí¤3ÚŠx,¯ûŸÈôš–î¸Á‘œv[¦Åqv6ѹ�� rƒˆ˜“½àZ‚ÿñ?þÇ`¬ “Ƭ“ìΞJ÷¹Ô¸<•ÎAwNk!���°^„ALØî ñåßü›CÑu fýÜŸv× èuJ»÷Zl§O���`“ƒ˜‡‰aÐ.Iã ±Š+ <éèµí÷ÛhK¯?$��`kƒ˜XuÑñ„ú<����ÅFÄ„^T>)�º É����å@Ä„½¤�¨‹Î(úã?šg���(: &’Â`ü2¸9wùèÑ#ºÜ��`§ƒ˜ˆ‡A ,Ì"º^þôRúÝ2���v‰0ˆ í j[uü ÖKÃ6-­���È Â &4 >yò„«5Ó±–z]w ��€¼¨Lt»?²°ÜdÉB[µ5YX��7• ƒÀM¥­Gv’È$1���È# Ašz¤áO[™$���yF2XVtÌ¥Á—/_š{���€|" Ì«Gv’„‡Ëq��� ƒ@IõH'‰Ñû™$���EB2p둎Ô–@$†KF��� hƒ@¶éEùulàgŸ}Æ$1���($ Ö#;IŒB��� ¨ƒ@JÚTë“Ä���  ƒ@ :9ŒÖ!ê���Ê‚0, -€Ú¨—°-ƒ���@9ì$1:FÐNC=��@Y ~:KhÒ$1Ô#���”aphWP½n v Mºdõ���eA $F[_¼xaî™E=��@YQy:IŒNc'‰Y„z��€² ¢Ò^¾|9™$& ê���Ê‚0ˆJÒñ€= ‚àp84÷.G=��@YQ9þt’ ƒI“Ä,B=��@YQ)ÚT[µ{è*¨G���(  *A'†±“Äè„1«¢�� ,ƒ(=½T„¶ê¥#nŠz��€² ¢´ì$1:>0Ë$1‹P���P„A”’†?m \e’˜E¨G���(  JEƒŸ$æÕ«WæÞõ¡�� ,ƒw)ƒN#øûs—ÖSù½w7ù±½[Òêx2]…o7ò¤•ø¼=©µ:â F2ž˜æïz2 ž;Ï ?{£-½þÐcÁg–àóü ^«žüx°ÜotmÞ0ÊNóÑGÝh’˜Eô3����e@Ü8 T‡rÔ?CZˆÒ„i<:‘£ƒ® ü|3ö¤¹W—–÷Cð˜È… OºÒªù!¨Ù“a˜òü'žI¯YsÂÜX.‡ßH§uË_Ï;Òþâß—þïηúg^J7ø<ûÒî¿ î ½•~{6ˆ^žJ§ý|²>ý#©Í¿wþçy˜u’-ãuL³a���eAܸ+ýñµŒl‹ªÈãÁcnT¶uÎ F¦õ,¨®©O^ŸáïÎu³Ïý<–YŸ%­’ákç·ZÚ-T[u’mÜ4 ���Ê‚0¸m3Ê1¨Æryv´ Ö=9Ÿ·„0xùZzÚW»'Þ¹éRêZôwÓJýٖʙϓÇoÄ»÷8ÒJ9¯äÜ{ ]çoë˜@øÙgŸ­u’˜Eƒ���( Âà¶- Tñ1rþR;’þ…Û„7o\]¼K¦c+aÐù,µ–tžýN†—ñ¦GÛÒé<W—z'! Æžcþö¦'‰YD?���P„Ám[¨Ü–Á ö{ÒnÔb-lñ–Am‰ëK¯Ýô×ó–zoÂ1~®­„Aýì’sïžÔæ}޶ þÏÿëÿt Õ®¡Ûj t��P„ÁmË•LeOê„Ñ(yÌ ÿDiëd3±V¶ÀÖ ÿÙ5ÜÎ벺ú˜AFËQ'‹Ù ���Ê‚0¸mUƒ¾ñ¹'‡3cÕü08>.Ÿ­‰nÔËDhK ^6âÇÿç[ñ>þj:³ê–��P„Á­Ëå +9cûf/-¡Ý?½°›èÞÂÞ™»ã—–ð]ž‰t­I£sêG.×â¿›NšÏ^“f/ sa·Ní.êžö—Óë$ÚKK¸—Êð…—¢84—Ű8¼LÆË—/ƒ1‚?ÿßËi÷P&cûƒ���( ÂàÖ$Lœ2 s×2š{Ñyi´åØ^L>hKxN°4¥}|»\Ä¢¿›VÆÏn³ÝEÍýõVKî¸Ï‹/A‹æ¼ÉqìrÃÖÍÒÏ����”aÈ€z��€² P���P„Á*»H§žÔÓ.ÑÙ<A=��@y ¨G���(  õ���eA2 �� ,ƒ@Ô#���”aÈ€z��€² P���P„A ê���Ê‚0d@=��@Y ¨G���(  õ���eA2 �� ,ƒ@Ô#���”aÈ€z”“þ¶Yò³��¶ƒ0d@=ʉßv~P�°=„A êPNü¶óƒ²�€í! P€râ·”�laÈ€z”¿íü ,�`{ƒ@Ô# œømçe�ÛC2 åÄo;?( �Ø õ('~ÛùAY�Àö ¨G@9ñÛÎÊ�¶‡0d@=ʉßv~P�°=„A êPNü¶óƒ²�€í©TdaYÇ |ŠñÛ¾–‘wWöê\›»R^J·u+܆5ŽÄ^˜Gò‰íì Fž´öÒ\š;2¸J¿×–FÆz *›¢åTÚßöøx‡ 9ôÞÈõèDŽuiöÎdlÎ#¶³Ût)ƒN#øÎ³žd�P„A êPN»úmÏ=¹×ÈÆŽÁoÒb”DÃå½Ç lg·ÍB PI„A êPN;ùm_¾–^ë–Ô;› ƒ×ƒŽÔ×/ä¬w(µ ‡¶³ÛFªŒ0d@=Êis¿í žt¥U³ãŽ›rÔ?—± ‚á}ºÜo´äH<>¶ËÞn}%ƒÓÇæoøÁïÿ _8y ^7ö_öt&»)íãS-í7j‚àäýêÒò~0­—¾?²ðëX¿'íFÓ„~{ûž<üÎŒ­I£sêÇ>c<’Ón+,Oÿym}Î$ ^Éhð¥ÿúZXÖ¶FrœX0åï?÷ÛoííÍÕ�›G2 å´±ßöõ@:us°Œßóº›=jø ÛKÙ2Ûõ‹ {wÂÛè¼3¹´ïßòdd^5Ó2xy*ƾ´z¯ýwôúû¤ sm§‰íl6ak=Ëy<ìI3¸í—kÛ“áå/rîÝóƒŸ=áðÎ/Ç©µËéèÊÏ…:–Ô~¦\µëòaýPzgzCúGMÙ«IÿâZ.ÏŽ¥Uóß÷èDÎÏõuaÝ ? €" P€rÚÎo;¦2…Acæö$ü͆µh4­…Á½m |+ýö~ì¾yƒyýáíiksäñ‹¾´kûÒî¿ ‹–«{’Á]ì{årЕFpŸiåß@A ¨G@9mö·­Ýî¾–gÓ-oga0)ÌÙî¤)º©&¾~ýØÎf—% ÆŸ-WóÛzÈœ@ ¥@2 å´±ßvÐÍî@í/Äë¤ï†©­‡AÛêsGzÃ_Â'Øûü[³ï¿ lg³ËÃn¤óZÍÿk÷Ä;¿2»Â®ÅÍÃÏåÙ'þóLwR�…E2 å´©ßvxn¼í˜¾úyöô yþ÷A¬µ¿–ïž÷äyâÁ·Ë´ÈL˜¹= rñÇÇrÑ?’šsàŒ«ù³u,g—c3^l?¸áòŽää»ßʧÏÓ¼&;¶³YÙr¶aÐÞ¶¡?öøøLzÍšì5ŽÄ^LÇ ú߻֥³³pÌ¡SNô‰ûÏ ‚ ©;“úÜx ýày�Šˆ0d@=Êic¿íɬ¡:™Ç±œô~í”ÛîuáD{{·Ì„.‹˜ ¦ìºÔÛÒyèÜnõÄso=•ßÇg Zu6Qo:S¤|Æü•ŦãÅl˜Üý\H/<á`˹!;mçö]yê=ŒÜÖÖÂñ襙eT˲+_´~ýìIß|AëßdvZ1³‰ŽƒkVê}a¨ŒþÝ4ÝŒäaÈ€z”¿íü ,�`{ƒ@Ô# œømçe�ÛC2 å´óß¶™LF?Gò²énx±n¨3Ëö.,®�°„A êPNü¶óƒ²�€í! P€râ·”�laÈ€z”¿íü ,�`{ƒ@Ô# œømçe�ÛC2 åÄo;?( �Ø õ('~ÛùAY�Àö ¨G@9ñÛÎÊ�¶‡0d@=ʉßv~P�°=„A êPNü¶óƒ²�€í! P€rÒß6K~lÆ«W¯Ìÿ� D2 È«áp(ï½÷^ð/àÒxûömùè£Ì=�" P�äÕ‹/‚m”.úàÇ  ­Ož<1�@ˆ0d@=WžçMúuyôè‘üüóÏæQT‰–ûgŸ}©ºh�apã.eÐiÌl#Kë©üÞ»›üØÞ-iu<Œ®Â·yÒJ|ÞžÔZñ#OLów=Ï熟½Ñ–^è¿‹±à³Kðy~¯UO~<XîŠ7º6o¸}ú� âaP—?ü0hBuh=ÐîÂñº  cÄ7NÕ¡õÏâ†taDNäè +?ߌ‡=iîÕ¥åý<&r!Ó®´jþF¼Ù“a˜òü'žI¯YsÂÜX.‡ßH§uË_Ï;Òþâß—þïηúg^J7ø<ûÒî¿ î ½•~{6ˆ^žJ§ý|²>ý#©Í¿wþçyH€IaP /_¾4ÏBYië¸À¤:`Æ“ˆ# nÜ•ŒþøZF6ÈÅUäñà17 *Û:ç#Óz T׃ŽÔ'¯ÏðwçºÙg~ˬϒVÉðµ»mL²»z�‹Í ƒva¼XyiÈK*óøòÓO?™W�@ˆ0¸m3Ê1¨Æryv´ Ö=9Ÿ·„0xùZzÚW»'Þ¹éRêZôwÓJýٖʙϓÇoÄ»÷8ÒJ9¯äÜ{ Ý›|þ5ÈM=€˜eaPL„q„å¤Ýµ[pR¹Û�âƒÛ¶4P%lÀkGÒ¿p›ðæ«‹wÉtl% :Ÿ¥Ö’γßÉð2Þôh[:çêRï$„ÁØsnúù×@?�äѲ0¨]µ+!a°ÜæÕ-�ˆ# nÛÒ@å¶ ^Ȱߓv£ka‹· jK\_zí¦¿ž·äÐ{Žñsm% êgÿ“œ{÷¤6ïs¬Ð2¨/ï½÷Ïå÷_ܧe�昴51ƒÕ¡aÿoþæoä_ü‹1S� Ž0¸m™Â ²“©ìI½30/%ôŸ(ml&ÖÊØZô?»†»Ãy]VW3¨2Z†»> ÉM=€˜xüwÿîßÉ?ý§ÿ”–ÀŠÑ±¡¶;°þßÖ½Ô�Ä·­ aÐ7>÷äpf¬£šÇçÏåãã³ 51iñÞ?ÿoåÃÿþWÓ™U·,7õ�blÔëËÙ‰B4�èý¨HFgu'ŠÑû´‹(õ�@ÂàVårЕƜ±}³—–ÐîŸ^ØMtïÀaïÌÝñKKø.ÏÄ º‰Ö¤Ñ9õ#—kñßM'Íg¯I³†¹pÂí.êžö—Óë$ÚKK¸—Êð…—¢84—ŰØ^&Ãä{ø?Êóßýò?íh €¼Òfñí¢ ´–Ÿ–±†¾/^˜{¦ô1.+ apk&N™„¹kͽ輿4Úrl/&´À%<'XšÒ>>].bÑßM+ãg·Ùî¢æþz«%wÜçÅ— EsÞä8viÈÿòþ¿ÁÙî]\LY?�‰v¤U¨ül÷P�È‚0ˆÂÒŸžñÞæÙNꀢ±ÝQ^¶˜ëÈŠ0ˆB g}okËP�3Š–×¢î¡�° a°Ê®Ò©'uÅ´Kt—¼ &–ñ¡Nš°iú½�@Ñh¤u°œè à&ƒ(=3ªcítÚ›B=PTi,º‡¸) JCC ¶nrbꀢ¢u°\l÷ÐW¯^™{� ; JGgÍÓ3¥›ØAR�™†.1Pzò“ ɸ) JIÏ€k \÷€zê���Ê‚0ˆÒÚÄÄ2Ô#���”a¥f'–ÑeËP���P„A”žXFÇÊÜtbê���Ê‚0ˆÊÐñƒ7X†z XÆr9ìK¯Ý”zg ù¿rl\¥ßkK£Þ‘`ǃ¨ ‚7™X†z P®Ò©ïÛ.Â`\Ê ÓÊc0 ƒ¨í*ª]FW™X†z pL LÇoÄ»÷˜²Q&ä�a•´êÄ2Ô#�…“: ^ÈYïPj„” # È *-ëÄ2Ô#�E0½”n떿ͪIãþ}iÕlÔ1„ßH'xL»úÈhl‚`pŸ.uiy7ç¹æ`En¼–‘w×|¿¶Œ®d4øRÚZx£-ǃ‘_¦ž´ÌóööÒ\:Ý€µ¼~0ï�éQyvb½Pý2Ô#�¹wy*ƾ´º/ýàæ‹þiøÛ®0h˜ Òòd䇎sïž�ïHoø‹¾0Öbµè¹Xó=¿ÊIçže>:>÷ä°~(½³ ½!ý£¦ìÕŽ¤á?!(Ûº4:§þ»Ï–‹þÇrÐ;óÿ�ÙŸXÆó<sO2ê€|Ópp$5Ô‚n¢×ƒŽÔm+ÓLŒŠ>«3ßsí}i}ÐVïµ vêöîûšèb¿w[¾÷Ä;¿òo¾ïîÃiY@F„AÀp'–™7Žz ß]BòüY'è>: Éa0ù¹X ƒ-¿®IíГóI–35{2œ—ïœÖÁ‹aOÚ}¹0@V„AÀ¡!ð£>š;± õ@¾™–¥¹-ƒ¦Ûh£-=ïwò]ÿ“-ƒ‹ž‹ÕM¿çÓ7žÖn9­ƒ6(š–¿D¶ŒïIç“Ci÷ßšû ; @[µÛh|bꀼ{ÒÔÉ^Úž /™ŒÔ `šŸ!ŸøÁ°´&Ùq€ ùäÙ—Ò}þ "GròÝoåÓg_-x.“•¬î­ôÛû&tÛïõÀÙï‚GÃòó¿÷Öc9i ÔÉ}>‘cw¬æE_ÚÚR»¨�R sè„2ñ‰e¨G�òïJF§M·Î[Òúü±´ëMi÷ú~8ü‡é¬¡:KåIOî×ì,¡c¹tƒàXkËÙÂçš?…ŒLËŸ~§ºÔŠ÷t:›¨¬gZ~þbg5ïzç¿ÏûÒdâ�7D‡‘‰e¨G�€ÝÓÖÅ»Ìì àÆƒÀÚUTÇj×Qê�`×ôòwïºÏ�Àjƒ@ vb­G?ýô“¹�€m±—Ðñ _Ê O�7C2Ðz”4± ���P4„A ­G:¡Œý���(ªJ…A–u,ÊN,óäÉ“à6���P4´ ¸õÈN,óèÑ£Ä Ô���yF2ˆ×# 52± €²Ðmã£7K÷úkO�Ø Á¼z¤ÝE9pP&z}U½¤6Cg¨f¨€]# ,ªGL, L´uP·iôzX¿/^ÈíÛ·b�`çƒ@Ëê‘¶ 2± €²Ð–AZ׋î¡�ò„0d¦éŽ^Çj Îú(2ÝžÑ:¸^ºoÐ.¸�„A ƒ´õÈX†q„�ŠL[éí°Ú=T÷ �„A ƒ¬õÈN,Cw �Ee»5ÒÓáfôÄ îC8A Oƒ@«Ô#&–PtÚÓ®7£-‚|‡�ò†0d°j=²Ë0€"ÒÞ ´®NC ÝCäaÈà&õH¢˜X@Q1ñÉjè σ@7­Gµu‰e�¬‹n—XXXXXv»aÈ`]õHÏ®3± €uØæþM[ó6þ9Ïû÷MwåØyQõºXäõ¯LɱÁÄ:¬³é•Bj�VµÍý›n·nß¾mnåC^÷ïÛèʱ ò¢êu±Èë_™’cƒ‰u È›mo—4 æ©u0¯ÛåmÌÊ> yQõºXäõ¯LɱÁÄ:P�äͶ·KykÌãvy[³‡²OB^T½.yý+Srl0±Ô#�y³‹í’†Á¼ŒyÎÛvy›³‡²OB^T½.yý+Srl0±Ô#�y³‹í’¶êd2y·íò6º‡Zì“U¯‹E^ÿÊ”L¬õ@Þìb»¤—ÉÉËŒÈyÚ.o«{¨Å> yQõºXäõ¯LɱÁÄ:P�äÍ®¶K:ò¶ZÀÉÓvYƒà6¯!Ë> yQõºXäõ¯LɱÁÄ:ì¢Ï=¹×ȵ¹-ã7âÝ{,ƒÉ�ªŒƒ°ê®?Ç6È ¶CÅ]ÿÊ”L¬ÃÖëÑåkéµnI½cÃà…œõ¥Vï8«îúslƒ¼`;TÜõ¯LɱÁÄ:¬^.dèIý¾Çd BÿØIWZ5{SŽúç26Apúü¦Üÿè©Mn×¥åýgö{ÒnìK«}/|ÿ–'£ñHÇmó÷jÒh)ƒÑUøQ= pt{PeU^ÿ|®û¥ :à³Í]ZOå÷ÞÝäÇönI«ãM÷K#OZ‰ÏÛ“Z«#Þ`$ãà‰iþ®¿ ž›äÚÿSîg:ÎàyÌÿÎ{Gñ:-gÿÜ”v¯/ÃËð“‰ü ^«>}mdÑçþÖÙÇ?G|Ñ}ÿæ¹ù¡Ÿ­Êмþ•)¹ªWR¬Çjõh,—ƒ®¾ÌŽÅ†¼fO†ºŸ¸H§n6îÚô0þØžÓ2hvv¦eðzБz°s¸%‡Þ³C¼’sïžÔ[ÇræïˆÆ£9jÔ¤Öîû‘tÑc�Šˆƒ°ê®>×]÷S‡áIM½„¨†¿ÿ»  ö;Ý`6ö¤ 7ÎÉQ»Tã3é5kN�ó÷«Ão¤œ0½#½á/þ}éÿî2“}kãô#'KßJ¿} íþ[sÛÿgÇþçÕ«ž Îg‹¼þöîøŸ÷®x#ó!Ü“³µCé9{⋾´kñà§Ç¥MÌ"¯eJ®ê•ë±Z=2gùjGÒ¿Ð…=ëçì&¢aoYTáNkºÃ›ì4uçâ.úš«Å? €BÐßp•Uyýó¹îW2úãkÙ  e‘ǃÇâÇìç"ûHÓ²kÙ ÷öõþî׃®Ü¿„Òš9yÒÏÖš¾çå©tþ>Õ ®†Ž÷?Ô×zr<6oßoOûûb÷}ÜÅÀv¨¸ë_™’«z%Åz¬Z¸}Óz÷Îß™ÄvþNjðµ<³ÝLnƒ×Ô¤Ù;óÿVÌ¢Ç�aÕ]ÿB¬ûL(sÌ„AÛÒæ†(•m/›Ú=ñΆ:,ú»K\>•»ÞŸ‚ž45NÑ9õ÷¾Ê ƒc¹è'ïSµqß/#Ûr¹èDpü¹¾„083¡\ް*îúW¦äª^I±«×#3ñ‹ÿz}Z뱜ڮ#ãséH£ý…xýôoÚ2h^Ý‘‹PH„Uwý ±îKàé¡â.“ž4Ö¼1wûN—͘‡A aæäíd(†Íþxî߈?¾( Ú.¤Îú˜ýu|§Çù¢Ÿ­Êмþ•)¹ªWR¬Çªõ(1§+fæÌÀެ?gO¿ç?|†·ö×òÝóž<?ÿ)ܹø;Ê“ï~+Ÿ>ÿ^þ!83éîŒìNå–´º/Ã.1zõè+Ž=¼@ÁpVÝõ/ĺ/ ƒnë×…™­kñ‹· 긼¾ôÚÍ`63ïXKôÙýr0¦ï|Ëa–Á¢(òúW¦äª^I±«Ö#;v@_?]šÒöÎär2k¨@?–“Þ¯ýpgfuÎJ¶z¯ý]ËtlŽcxÝÿÄ’öýœÒx$§];³Ùìl¢sP8«n—Ê¢Êë_ˆuÏ•í~é¶‚% 'Yñ÷eI'[×}v²µ½Æ‘tÚ˜÷Ü~7Ñ<c;TÜõ¯LÉU½’b=V«G:â©tŸÇÎ\êÀó”3›À<„Uwý ±î%ƒÁ~ÜNòâ¾§ýû _>™d&´Ê2‘!sàΠޕcs‚íPq׿2%WõJŠõX©³{îO»eôºƒ¥´öÀê8«îúçÝmÐIÛ7{i ÿùC/ì&ê^çoæÒ¾Ë3ñ‚n¢î/Öâ¿»˜†­_Ksæ=ÃK3E‡eØ¿ãö²ÑuXáÒñËXA3Þêx%£ÓÇÒ:˜½tרwý+SrU¯¤XÕê‘Îê™ë!éYEÝè·¥×ÜØòíÒìäî$á¸eûXì@Õë„×| ÓÞžô‡öZh¶¥Ã>®Ë¯ä7¿ùUì>»èë¿ç“‹„ûæL’‘e©Ï_(h!rßß=˜·ãºÌcNØXéBâ /¦>»þÑïÞ}žû=ϧÏϯØw«ËäûMª;Îâ—ÿ±ýžfÊÏ]ü29>].bÑß]&V¦ñÇ`·ÃXk£†?;~ÑþÍ ¯µ¤óìwÎs—|7þ’ÇIdôsUY‘׿2%WõJŠõ È›tÛ%Û‚¡Rõ%3ÂÇšîõÔìXæÆ‘x6”\å$GvL³aºÊ¹ï;Ûâ£'ž4->v ´Ž—šàNZ|Òµê¤[;þ:é=õ±œÏä©/$n»4Fß7Óúߟ ¨úwLËØÌŒš³Ø'!/ª^‹¼þ•)96˜XꀼI¿] C×ì¥e4Ð|â<flpr&³°&3+:3=šÖ½HkEâX0Ÿ½Hwä½Ã–œÈëíX¬-:©×?xϤ™'ýïåè“iðÊt!qÛº›–eýƒï/Úõ0 ˜ ¯aŸ„¼¨z],òúW¦äØ`FEº¦Ì¹äfQ�lãGÄó<‡òÓO?™{“¥ß.Ù yðŽ>ŸN€aƒXBš¾‡3–)KLzý¶Â ±1¶^ãóçrÔµãÃ’>ŸkvÖÇLa0éý ƒÛ3¯[òdIšéiè÷WeE^ÿÊ”\Õ+iap5Ô#�ÛðÑG…ÛggÑûž<y"/^¼BâÏ?ÿ<7ÓvÉLÄíÒy,wàc÷‘pæ˜y<SÔ¿§](Ýn¥fŒ—‘1—µàúq1YÖ?üÛn—NÔãã™VÊô׎³ßGÚ0˜°þÁ÷W›L‚2¹ŒAä:{É2•=°AU¯‹E^ÿÊ”Ì(ÂàjŠ\ô ò½÷Þ“üÑÜ ¯4ðÛç%ËíÛ·ƒÓ33N‚F< %„½˜…Aÿ¾É¢“jœ¬i— ö›§Þ¾{ì´î* :뮵ºrRø dP%U¯‹E^ÿÊ”̨?¿û^þ0È@—?|/ïþlÀBE¯G/_¾ ÖAÿ_Ú5T«Ë–?ü0ø7‹pܛ馨Ý1ãÓÔç¡›hÙÖß^@»yþWÿ³|,N«hòçsm£›hzYËØ”ª×Å"¯eJŽ &Ö¡ õH[µ…P[ ä— zó}\»Šêÿ³1¦Ö–gÏŽbaHÙÀã\çÍZ×2‘.Û ƒ>vkí/åYûn¤U4`Ãpª ‰g ƒIëOD T½.yý+Srl0±e©GÚê ’:I…w`÷ô÷¨-÷Ÿ}ö™üÅ_üE°ÍIZlTz;›ée&g U6´¸×{[Û¥%b¯7áÓ}}Ù×ßΖê¯ÿœÖÏô·-}Y.-‘ôý¥»ŒFÜòu×Ï^o¶ÃkÞ¥ ß2ì÷üÏÝœVc]|S ;±ÝŒÃ×Ì Áú¾­äÇüzØïµ¥áþ­ |§ ÔI¯wźí.ýžR>_×{?ñ±¤22×L5Œ'éõQé¾ó©¬ÏWúÜ*+òúW¦äª^I±eªGz ©aP*G쎞œÑ1‚vÒýMêí¿ýÛ¿ nÇ7*½/³øØ¹$ö yò·ãCÏzÑù[Òê<^L=v ½Êv}]VaX[4AÍô�{úùozÑùÙõt§1úš…L9¯òÞjúù…6? &Ìú:½”®†gÿõµÖc9èPøÞYàóªŸi…º2ù¼‹^Ôɤ.¾ŒŸ'¿KS—²Ä0xÃ2²wÑëÃï:6Sêx$ƒcûûvO|L-.£(ýûUVäõ¯LÉU½’b=ÊXìÄ2:;!€íÐß›þötýýiK ¶Æ[êí1v‰AUõý[•×?Õº/ )Ë,m a0hYÞ7×[bã'V ƒÊü͕ Zòú9a0ü¼ BתaPݰŒÒüíhÔí‡rØ})£ñX.ÏŽ¥ëþ¬—QÛ¡â®eJ®ê•ëQÖzÄÄ2Àfi€³Ý?5üiÈÓ0¸ì$Œ>G›º$AUõý[•×?Õºo= 𮳵£é…üºÂ.ß|…ÁÀ¢ï2E ËO|+ýîS§‹´mq¶Ó+òúW¦äª^Iã¸9Û¼òµzÊ\ìÄ2z° àæô7åvÿÔõö²‹È»4,êkçAUõý[•×?ÕºG‚B||™½ý¾´ž}+§]ê8“çDA06Ï=vH ƒf"÷¾ +d=2Cëâ ‘% ÆÇ5ÚÛ÷äÙàw¦«êô:ŽÑ×G»:ßIð}í8 ÆÇ5ÚÛ­¯dpú8hÅ‹Lðy½Û}9ü~ÃïzÑõÍ÷C»¸Œ¢RÕÅ+òúW¦äª^I㸻A7`¡²×#;±Œ´Î;ð°XšîŸYèû-z=aÕ]ÿTëîó}]pÛ¯¶×8oxafL†¡i 8—áIWÝñIa0i‚šÙûôapz<¾—½Žc8Γáå/ær"6 9¯§“"Ý3Ý%Ãw¿¯]†Aóùt‚utÆIê¸UïL.í¬¾ö{Ÿ¼þTÞéDG‡÷¤{j&~ ÖïhQÔ�ßœC»¸Œ¢RÕÅŒG'rL¼tËt;ŽZö¸Jóœ›ÚÔúoCe¶ E.¤M˜n<íÆÆ<€…ªPô S`5eb™ ³n)=p¾×à¥éþ¹Neù.WUåõOµîñ’xÛ ?±ÇÃã…[òAë}©·Žå,r¹Ý‡A¯ðö4üD7¯¯½/­³á þ}¸âßkÑc>ý 黉Æ×1þ=Ç7¯¯}Ð’ê‡Ò;‹ÎËÿ>¢ÆÁì¹Í„ɤâßë"›ùÆ&©š9^]ö¸Jóœ›Ó÷.ªÊlA‹\H›ÀEçWS¥zäy^a&–á÷]<¥(³Ë×Ò›7³àU½þWyýS­{<h$Þ^ëÒhèµ)ÝëCªxHQ — Þ3z!ÿÅACßwÓað¯¥ñ× 3êÆ¿Wü»s-z̧Ÿaãa°Ñ¿öƒ{r ßœ0¨“ý´>¹¦¦Š¯‹lêwHËàæUf Zõ%Ö£jõH»·i ÌûÄ2ü¾‹gëefÇÜÔ>ö}½\€9ØóﯧgãÓ«ëx*sm¹àñ¦´OÃîd&†÷벨 ÖfU½þWyýS­{<h$Þ^ý@pú:èšX‹´ÆCŠº »e:È„]71n¾ÅACßwÃaÐýéí ñïÃÿî\‹óégØt¬w^ʛ໶Æ¿ ÝŽµ;Îu3£âßë"l‡Š»þ•)¹ªWR¬GëQ&–á÷]<Û-3sàäÿÍhˆ™òÞÜNÎÛÉ3"Óã_ɨÿ ¼¹ˆbÉÁß¶T½þWyýS­{0“çÞ´¥ÎÜžÔÛà¶ÓjyÜ^T? áx„ÉX"aÐçþvÆçÒ?j®ñÒf‚šIØŒ~Æéí;Òþ’ð¸y}¤Lp™ŒeËa0^F‘ÏèÜžLð{Ü-3;žpf XÔré~îA½ÄÄ—rtœ¶õ6ŠíPq׿2%WõJŠõ¨j=Òq„:†pÑŒ†»Äï»x¶_f±3é*˜ÑîÞ4ê}Ž3q§Ç„s¡Êë¿tÝMÕçéRØ‘‡soûèéSçùu¹Óºã‡{Û^o:›h.ô„JBÔ`1ô¤tÍ‹·¸‡V ƒÎ‰]üßó·ßêûØÏÔ‡¶sû®<õ:·ÿ¥´ZþoØÞ®?ï©3žL×c^tgRµÏ5V ƒñ2êôåÛÈ:¶¥óйÝê‰ç>~§%­ÈëŸÊÓÉl¢ázÌ„Á™ž v±:DL¯Èë_™’«z%ÅzT¹Ù‰et–ļM,Ãï»x¶_f³a0ñ@'8àÓ¨ïfãND`ªƒ¹Påõßýº›ßÕL\nµ0¸óÂà2«†Á-˜ ƒ)Ó+òúW¦äª^I±Ô£éÄ2¯^½2÷ìåR<Û/³Ù0ŽcŠNjÞ§gÇß™éÜÝ3åfŠwÛU‹0˜ U^ÿݯ;ap‚0hþWME^ÿÊ”\Õ+)Öƒz²Ëè´ó€r)ží—Y| ŽÏŽ­±“-ÄÆ6…ã£öbc ÷§3õ™ƒ¿ZûkùîyOžGfYÜžª×ÿ*¯ÿî×Ý„AÿsK¤%=Y0l·Ä¼†AûùRœìIùü݇Aû—‡»¬ÏWúÜ*+òúW¦äª^Iã"?ôo„¨GSÚUT»ŒæabÊ¥x6YfÚ¥Y[®§usÁëå™xm]T³©ž´:ãžôqsÁgó¨€f“Ó•§±Éﲪ¼þÛXw½¼Ð£Gr?«tZºz-вÐuÉCÙ°*îúW¦äª^Iル¡EåebÊ¥xÖ]f?ýôSÐR­­úÞZ'µKsT½þWyý7¹î?ú裠ˆþ–ò8yXVvvì< s¸)]]§]åg;TÜõ¯LÉU½’ÆWC=J¶ë‰e(—âYG™i}Ó³âüô`ȶ^h0¬’ª×ÿ*¯ÿ&Ö½Œ!Pézè:•¥…Ó¥ë¤ë¶ËmÛ¡â®eJ®ê•4îÏï¾—? 2ÐåßË»?›°õh>m•ÑÑ.θ¦/—XwÁ¤¥õT~Ì™ð˜vìxÓ)ÒãS;K­Õo02“¤ù»‹&`°³XÚçG/Þ¼hÊóñh ^Ç^T]—¦´{}§+äâM¦!/úÜß:SÂÇ?G|I?é‚>?+=˜³Ý?µ®é  ƒe:Ë¿ŠU¾Ë2©òú¯sÝË•®‹ž4Êð†M±'ÆvUnl‡Š»þ•)¹ªWR¬õh1Û]eÛÝóÒ—‹†²C9Ꟈ!-QÓÁñÁ!Ý ¥<œUÒ 72<éJ«æ‡žÉ…}ã3é5kN�ÓqfßH'¸†“‰2ýß]fÒªßxà\,Xé)‘kæ]žûŸ×ç|¶ÈëÍ,™îlsã‘ ŽÛÒпe'X±‚ ǃŸÿÞƒÇÒ^s´Ý?õ U_£;z{×]¢ò¤êÛ¥*¯ÿ:Ö½Ì!ÐÒ^ºŽe§awWëÉv¨¸ë_™’«z%ÅzP–Óƒt;±Ì¶*Ò—Ë•ŒþøZF6ÈÅBYäñà±xà±-|îݦe-Ö²†6ûú w‰ëAWîßB©å2¤ŸÍ™}ïòT::ñ‰\É,™fÖÌi‹_|êq xÝ0ºï³êÔëŽEe¦§z–[ë‘ ÚîŸe<H]‡ªo—ª¼þ7Yw=Ñ¢¿­2‡@µë³mÒuÜU (Û¡â®eJ®ê•ëA=JÇî¶µ^¹\fB™c& Ú–67D©„0xùZzÚúV»'^ÒåýÝ%®ŸÊ]ïOrîÝ“šÎ~Ù9õc rÃàX.úGÁãî5ô¦Ìe&-—ó Š?×—5`Þ릟6Ý-3­#öèþ¹šªo—ª¼þ«¬»†@û[+sTyK·mZžº Ýö¥ŸØwý+SrU¯¤XêQ6ö€cÓ]úV.—¥aPÇÁÅ–Ú‘ô/Üx5oÌݾÓe3æÆaPCØô²áuïÜ0h[0çýøã‹Â íBê¬OìºZvÉrñu}¾ÛýSÿÕÛU:h[ýþª¬ÊëŸeÝ«•ö0Ðï§Š]Êuµœ·9YÛ¡â®eJ®ê•ëA=ÊNð7½SZ¹\–†A·õëB†ý^x͹H‹_¼ePÇåõ¥\»Îµ˜µ„A_ä¢éç[ƒÙ[õ�ÅvÿÔ2ÓSºÞ\Õ·KU^ÿ4ë^µ¨v†òFð~Û Ãl‡Š»þ•)¹ªWR¬õh5v§¤"›°r¹d ƒÊv¿t[Á’Ç †“¬ì%_ºe]aÐL>£µq$öæ=·ßM4 = Õ0hÏØc=ô»daaaaÙíRT•Ù¹Ô£ÕéÙI;°}Ýg¦W.—„AýL“I^Ü÷´¿Ñ•Ád’™Ð*ÈDÆIÎ ƒWrîu娆Æø-›QÅ–@×®&PÉ«*M ƒÕ ¨G7£;#¶îÓjåbƒNòؾÙKKh÷O/ì&ê^çoæÒ¾Ë3ñ‚n¢î/Öâ¿»˜†­_Ksæ=õ~PÆ ˜öïè¥%¾4× ÔuXáÒñËXA3Þêx%£ÓÇÒ:˜½4 ¿%`½lÔßÖ&Nº®7Ág–~/U¸´VC2 ­‡î˜Ö9–!{¹Ø1sa׎`™„9ÛJæ<æ.¶Û‹É-| Ï –¦´Oc—‹Xôw—‰MToqŸKÿè0ÖÚ¨áÏŽ_´3ÃEçk-é<ûóÜ%ß¿¤DFŸ àæâ!PoW‘¶‚êxd‚à,ýNh1Å<„A êÑúèÀ~ý>×1ÀŸr)Ê ¸Bà”îG¶9YJi ÜÅ%'„A êÑzÙ‰etLÃMP.ÅC™«!FÙ™C¹.érö»ªò,«˜E2 ­ŸXæÑ£G+wï)E¹Ì¹vßtIšé³¸t�¤Gœ¥ßá&›m_rùG2 m††@;±Ì*8”KñPf@:„ÀdŒƒ[íVK]‚" P6K»‹.;c™ÔzH¹e,F\L{“è‚ÕpÉ X„A êÑæéKýžçuûÑÄøc”KñPf@2Bàrú½dnN¿G.9 õh;ì ÷øÄ2z[Ë ¾ó¢\Ї2¢éÐÅq}èj E2 mîèu'e'–±-†vÑAðåR<”Œ`›ƒ@Ô£íÒ¨að_ý«%õW|ÿvqÏdR.ÅC™�°{„A êÑöi üGÿèß}|±gÐõÿ(Ê �€Ý# P¶O»Šê÷ž´Ø1…ú e�Àî ¨GÛe'S˜·è$Úr¨ÿG±Pf�—Cé÷ÚÒhy22wE]ËÈ»+{õŽ ®ý›öùövܲǑ҅ û=i7î‰7šóEŽ<ií5¤3¸ôoŒý¯¾/½vSê_jqËÇ® ¨GÛŸ0fÞòâÅ‹à_ e†­»H§ž°i´¥×ŠÎ"«ÄkÕ#ßg¶ý_dØ»¾vnt9ÏO {—2è4<^AH›–ÉtiJ»×—áåØ<q¾ñ°'Íà5wç‡A×øLzÍZðwë€óû# æ aÈ€z´=¯^½ ZuÕåöíÛÁ¿(Ê »ñVúíýéÁèå™xí¦_÷¥Ý<c{®äÜ{ Ý U¥ÈÆrÑ?’ÚÊß¡ p©Â 2ÏŸö–=^6œÙïu<’ÓnË/§=©µûr<i±ëAGêià2onØ[ö8v‚0d@=Ú½”„çyÁì¢Ú=TËÂ]P,”v# ‘ƒÑ‹¾´kþv$uY‡±ŸC¥U³]ìŠ-shˆ n†iµu¿WÛ:—ò»& VaÈ€z”:“¨v%µ¢g)Þlß²0x!Ó®Òl=mÊQÿÜnÓñNµÖ}¹ßÐîpáAòxt*ÇAëbøüöñ©ŒÆöùïKëÙ·“™½FW—×&Ú¿á/[ ¢ë—*4\å¤c¾‡½š4Úžé®hÃàW28}l¾—?$¿›¼.:0!ì9­^{{ÒnÝ" ÆÃàäû¿%‡Þ¿F[ZW¿‘Ž~gAÙøuØ;ó¿åi¹>üNºÁã~¹uNƒÇ¦c ›Ó ao<z9}íýûAùó…0d@=Ê'Ê¥x(3ì† A(ó‡ÇçÒ?Ò gƒƒÙº´¼üÇÞˆwèÄ6{2¼2-*~½­zrn¤ƒç4¤Õ{í¿ó•Œú¤¡Ý%Oþ÷Éø©½Æ‘xà ÿOyrX3ïí ´+Ò2h¾Ëð»óÃÇ ëOvÝM™Øàm¿÷ ÄØÇüïqn|çß>ðCúc9]ùáãDŽ4¬cã9oI«óTú~]t…õÒÄð»´ß]X®~ˆ;:‘ÑX»5ßóÃdXÎácú¾NއÁËSé4ö¥Õ}¼>ü}ó†0d@=Ê'Ê¥x(3ì†.ìRkIç$i™XèHjõ˜L²]‚ç¸ÁRÅ^_¥0~Ow¤7üÅÜã2ßó¤utÎíya0hÙuÇ+ÆŸ_UÓ–Áó ðÅNdÌ„<zÂ#r(^®É·ç…A3–´v$ý óæ ¿!ìaÈ€z”O”KñPfØ0(,>½’Ñàkyf»4.ƒáÁðœCœXüøœð—2 Î~ñçW•ÛMÔ¶êÅ»ˆÆ¿ë¨x¹%ßžÊ0˜K„A êQ>Q.ÅC™a7ÂÔ¹£A·Ñi´¿¯?¾{0;7 ư  ï­ô?þ\N¿Ó–Áy³ÆÉœÛsÂ`ØêHËà¬Ø˜AÛý¶vO¼ó«à“–A·õΑþÒ†Á„÷& æaÈ€z”O”KñPfØðÒó¦ÖnM°°Ïõòìéòüì›`¢™È¬¾¿Ö’îéÈ„:Kè—rt|&ã ûbMš=ÿÿú\3QM4 êøÂSyþé×±î{Eb/- ¶fR—º~×ö»l<þÈ‘‹ßIW¿'S&Ó®ŠsnO¹mC†-;6ÓŽô·1óº?V‚ý^œï è/¶´¾Úûì¸ÀàY~y~!ÇÃÿjÊÕ¶|ÛrŽßvÊÝÔqûû ƒº,è—ɘALfò»ÀÎ ¨GùD¹e†­3­AHÐ%©åèòµôì̇íc9éýÚ?ØmÊÑ7Ïäçµn œÎ–¨™ÙD¯Ü¿U—ÖÓ§ÑÛÚZL®¡AòPzgi®ú–GñIJâË´Å.ú=ù¡u,g—a+ž}~«'Þ¢Ûõ¶tº·Më óÞµVW¾h7üòëÍL–R3·­y¶»¨ûý]Éh2‹«.·‚ ‘Þ'+ì}wå©÷pÁm?~Ûü¾Â߈ûÞþû~þXÚõô¾Çv ¨GùD¹e�Àî ¨GùD¹e�Àî ¨GùD¹e�Àî ¨GùD¹e�Àî ¨GùD¹e�Àî ¨GùD¹e�Àî ¨GùD¹ÌÒkGÝëæ÷¾”¶áåË—rûöms �G2 ååc®•¹8vÎPfØ$?úè#‡æ^ìÂÏ?ÿ,~ø¡<yòÄ܃²úñÇå½÷Þ ~(ŽJ…A–u,ÈŸü–ËX.‡ßHǽ µw&—óÓ‹UõÚØöb¿á…‚ã·ýJ¿×–Fë+L.è{ Á;ç¢ÙzŸóšœÉo™¡Èù£eñèÑ#s e§¿;ݾk0D1°7Pxy ÚUó°vK½7~ô{'ƒÎìÕ;2Ðlvy*ƾ´z¯ýpx%£þiìÕ¤Ñ9õoå¢$µIso_ʰwÇ=.ÇoÄ;ô`Ë“‘þáëtê{´ ¢2ùôÙgŸ­‚Ú:ˆêÐߣ¶‹½1€ÂËg°ø% mÍž Çæ®‰kywe¯v$ý ûà[é·÷'÷…­ÓV½èíK?X6¦áÏÞ¶A“0ˆŠ æ— ÁjÒnÁœ(öÆ� /ŸÁ"Ø\±ð0Ñ> 0Ÿ º¼zõÊÜ‹¼Ð2¡e¶eùÆÞ@áåºe0Òúg™ÇöîHoøKô>Ó’˜íó ƒ¨&7êÿ‘?L"ËN¤¡ùÅÞ@áå5X„ckÒ8: &† Çþ}!Ç~  Û“ZëXÎ.Ç2ÈQcߌ/´áo_Úý·~Ö;¯Ý Ö3l9üû°Ké¤ ªéb ƒµö×òÝóž<?¿Ò'å aY‹AþµŒ^¼xaîAÕÙ:áyž¹yÃÞ@áå7X\Éh2Û§.·Ì„1Jgõ¤Ý¨™ÇÜ™F}ά µÖcyé=z£-ǃ¡œj+`ðiõÄ‹ÜÖÖB3YMäïå‹~V`B`>%£ó,j-ÖtõÞ-öÆ� `Q<”!æ—ØëïWËÆÈø0,’tÉ ­3z× Ü-öÆ� `Q<”Yµh±Ÿ~úÉÜš˜Ú’£¿_]´µG[u´|“Z —þ¦µÎü—ÿò_&APý½cwØ(<‚EñPfÕ¡aAË{Q÷AB`qèäíA¼]þñ?þÇ‘`žÿðþƒü“òOfêPš“EØ öÆ� Ow$(ʬô�O[æð‹Ç-Owa¬ –ÑÚ‚œTøýï{c�…§; eV~vB÷€ÏB`1Ùñ‚óºŠb­;óN$èÂÉ„Ýao  ðtG‚b¡ÌÊÏä.ó7C,(w¼à¼EË–.£piWñEAP­7Ø öÆ� Ow$(ʬÜ4è¹zîòÁ˜g¡h’Æ Æ= @„KÃàG}”X_Ü…z³ìžîDP,”Yy-릋N3â™W®Úª£­†tÅ":fXOÌ«GZ‡°}ìžîDJáz ºÝ16¤3Èãåâ×£4e†ˆ¤q‚I‹¶ Xô@>^ŽÚRÈÑ•n'ì¸áx}Âö±7Pxº) .M7B»Ð:X,¶ë¯À§½n$°Œnìøbm1Äö±7Pxº) L»‡j‹_ÚEŠC[�iĦhk!'vƒ½1€Â+M°øó;ùþ tù¿äûw׿ò! �°{ìÁ¢x(3��v½1€Â#Xe�Àî±7Px‹â¡Ì��Ø=öÆ� `Q<”��»ÇÞ@á,Ї2�`÷Ø(¼Ò .-��¶ˆ½1€Â# a�€Ýco  ðƒÅC�`÷Ø(¼Ò .:��¶ˆ½1€Â#Xe�Àî±7Px‹â¡ÌvíñZõ ‚¥Ñ•ÁåØ<v-#ïîô±½ºÜiÝ‘úä¶.wÅ…-×׃ŽóX]ZÞÿ}o©wþ»ºâÃ_ê”·1|»Fž´&ßmMS™v:•½_–O½‡éË÷7ÿÞyo]’º´ÇÿFR@¡eªcÿRZ­}ç¶¿´<Ͻ”A§á<ö+ùÍo~åÜö—Ämul]Ø(<Ý  X(³¼°bþÁÜщŒlT}iפaîÔÛµ=©µûrÞ35>“ÞÁ¯Å;¿²wøO?’ÚÞ¾´ûoÍ} ½'nn2¹)Gýs¿T¬°|êî÷ž©|ßJ¿íÜלú1#e@±¥®c‹ëÃxØ“ƒCOÎí¤Ú6PÇÖ½1€Â#Xe–å~ûÿ€ê–´z¯§g÷õ oß9#oú’Ͼÿ ÞÝO#gïÃ¥i S¢à=µ5ñsÖJ¿ßƒ{ÒnÝòƒÛ¡ôΦ‡ÕZ>ûnYf*_saÒº“,U@±e¨ca}˜39ÚÈ“»3õqù¶:vsìÁ¢x(³¼ÐƒúÅ;ÿ“x‡þÁÜÞ ö.|HƃŦßï]OÎÏ=9¬íEºÇÔ³•/aF†:ÖÂ`Þ°7Px‹â¡Ìò„A=º<•N£&{µ{aw@=# ›9PÉX.]iø¿»šéŠ?PÏV¾„AêXXƒyÃÞ@á•&X˜ƒ1]®3ˆíp olÎî×ZÇrö·„Áb›¨«+9÷îMº¿‹¨g+_ Œ uŒ0˜Oìa°xƒy ƒz07ê?†N(óði»aPA«žt‚‘÷»„Á¼‰¨ûÆçÒ?jú¿¿yØùu4 f*_ Œ,u,˜4yߦȼOÜ öÆ� 0X<„Á¼ˆ‡AõÎ¿ï ¬‡‘)Ýð°×ìÉÐÎøgéÌÑû礽•þÇŸ‡ï;÷€Og ìJ·Ä¿­ˆ¨+ÛØ/ßhðËR¾  ÿÜ»áû¦ª(¶,u,ƒ5iöÎü_¸KïË{ÊmuìæØ(¼Ò‹?¿“ïÿ0Á@—ÿK¾WÞ½a0'ÆoÄ;ü@&“ÆXÁý·baÐéÖ}i.C1–Ëá7Òi5äÐ{ãàÙ)ßc'5Æ#9í¶¦ÓÍ›é㣡äJF§¥å^Ö+ ºý6ÝkH†lwàø÷ž¾|Í¥%b×^J·Õ4Óü§¬(´LuÌnWj-éžê(Cu!Ó®ÿ{7c•­TÛêØ:°7Px‹â¡Ìr 8Ko[¢ã]z<u"GÑ®ŸÁ[¿'msÖ?Xü»ÎÉP¦‡b¦…Éyïè¢×û{ÿÏÇ.:[¸öàMÄ/êïiv>ˆ•yªòÕ›™%¸öàߥ¨\®ØV¬c—Cé÷ÚÁD3öµµVWN†ö×ßÙ%Ü6¤ÙÎPÇÒ`o  ðtÃb¡Ì��Ø=öÆ� `Q<”��»ÇÞ@á,Ї2�`÷Ø(<‚EñPf��ì{c�…§Á‚¥x ��Ø-öÆ����PA„A����¨  ����Ta����*ˆ0����D���€ " ���@��� ‚ƒ����PA„A����¨  ����Ta����*ˆ0����D���€ " ���@��� ‚ƒ����PA„A����¨  ����Ta����*ˆ0����•#òÿ“ZH8ì æ����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8r.png��������������������������������������������0000664�0000000�0000000�00000046714�15030617045�0022573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��M��“���ô¨ùZ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��MaIDATx^íÝÏ‹#Wžïýü+Ðf6ÚÖ®ðbz%Ð&{°7Þx!†ÄP‹œ¡ƒ¹h(˜* W 0.0A64$æ6;y„(0ù´º½0& ¾…è. ß"ã"IÔß߈s¤ˆPèWJ¡<qâý‚ J?2¤ˆs:8'����°¡ ����– 4���À„&����X‚Ð����Kš����`‰‚BÓ­Œ‚GrPïÈàÖܵԦÏMF/¤Ûz rÐ8‘`xm���€Ý(oOÓä¥G 9 ^Êíè\Nuiö.eb���€](ohÒ:hHg06wlëF®‚ÇÒÝÙú����ø ´¡évБúÎBÓDÆ—§Òªí2„���ðÁ–¡) þôÚM©µ>598x$ÁðGé÷ÚÒXwŒÒx˜~¾½Ýú“ .ž…aæ \ïah^‡šñO:ŽÉ.‰¿;ï´¤Ý_“Fû Œnô–°)±¾V #ó(���€jÛ.4ݤSƒFí(«h@ÑXF:Ì,•}þöÞ5¦)íàRÆÑø¥©03ßÓô:\ÏaÞNår<‘I4Î) q® ÂÛ«ì¶ç ���€/¶?=ϧzg ³|d‚к=MsÏ7·§!i~}s!'ãôPÚýWñm™ÈuÿDj©û#4���ÈãMhÊ =QªK+øÙܱ¡ ���@oBÓdØ“æA-5íx|߻Ҿ1÷,Fh���gûÐtÝ—v-š^I¿ýpƒÐ”}¾¹ÝìÉ0J@ÙÇsN½³ãžjGÒ»¼o_Iÿ¤™kµ\šÂõ_È—µÖß����ðßÎ&‚Ð%N¦WÈÜ·:8eŸß–ΓÄíVO‚äã­3ùKvö<Û#5¾” Ý4÷ëìy ט"2¾ŽNaC����„¶ïi����š����`‰âCSæ¾ùå‘£µ>ÝY<^)ïµÍ’¸þ����$ÑÓ����Kš����` B����,Ah���€%M����°¡ ����– 4���À„&����X‚Ð����Kš��Î;88`qh€ªáÈ�p uwP�ªˆ#�Ày4ÔÝAY�¨"Ž|��çÑPwe Š8ò�œGCÝ”€*âÈ�p uwP�ªˆ#�Ày4ÔÝAY�¨"Ž|��çÑPwe Š8ò�œGCÝ”€*âÈ�p uwP�ªˆ#�Ày4ÔÝAY�¨"Ž|��ç•£¡~+£à‘Ô;2¸5w­a2z!ÝÖƒh' ¯Í#n"4ÝÁ(ÖAC:ƒ±¹cã¡ô{milX¯�ìG>�€ó¼m¨O^JpÔ£à¥ÜŽÎå¤Q—fïR&æašöi,ƒN#Ô„&à^qä�8ï¾ê“«@Ž»)¬­ºMD aÇÏ m\šöÍ'Bp¯8ò�œw/ õñÒk=z§¸Ðt;èH}g¡éZ.{GR+¸qMhÚ7BàŽ|��ç×P¿–áyWZµƒè5šrÒ¿’‰ Lñ}º<’`´¢Åš{bo·þ$ƒ‹gæ5Àô:|ÐŒš®?\¢¿›„öµt¦¯Ý”öé…ŒVž¯gÓt}ui?›ÇvK×M„u¬ß“v£i±½},Ïßšñl5it.ÂxdLFrÑmÅå>¯­Ï™†¦ ¾ÿ¾—u£-§ƒ‘ÜDÜ”øÜï¾³·‹« @•pä�8¯°†úí@:uÓ¨ŒÆ…ÓfO†R¢ÇÖìiÊŽ=y#ÃÞ»ñm >Á¥Œíú[ŒÌ_Íõ4/¤Óx(­ÞáÃÆqÿ±4² ê…öÓ#QXYx*.c­q9O†=iF·Ãrm2¿‘«à8 H6˜¿ËñPj­gr1º ó“Žu ’)W=eô¨~$½Ëk½!ý“¦ÔN¤}+ãËÓ0œ‡ë=9—«+ý»Ã¸îÅoÀ8ò�œ·Ÿ†z&tlšT6´˜ÛÓ4jÒ¡Éô>E `ÛµôJú퇙û!4¹*ŽãÛ³ÞËÔã×}i×J»ÿ*z,]®É0ž\ìº'2tà­÷™^Óx%�¶Ä‘�à¼bêzºÓWò¼cN‡º·Ð”zìi|kœ˜û÷»WlYøi“Д}nº\Íÿmoh.´ MÀN9säKÿb²ùÀ_…}Æ£Ó›¥ÑþL‚þ@úÉб÷Ðd{Þ•ÞðMü{ßÒF²5¿þ"p¼ÝÜ&¡)>}oQO“ùíX‚«óxR|JgóèSyþÑaø<s€­9š€»¢þ�~+ê37VMÕŽ9ª?–çgŸÉ—?…¦Zû+ùñËž|™ÛHM2¿ðOC‹¹= <ÙÇ'rÝ?‘Z¢W©…¯Ù:•ËñÄŒgy]ÇiumPŸÈù–¿\ço6ÇñvS¶œmh²·m8Î<>¹”^³6½ÐñtLS¸ßµ.]^Æc¢ì˜§xä4|n˜LÝ™ÖçÆcéGϰ B¼@ýüVØg|:KžÊ?•óÞÂÆ«=­)pðÀL̰Œ ,ڰեޖΓÄíVO‚äã­3ùKvö¼¨GJgÏ f3£ÙI$Ì«,7ÏbCWô}a}q0·åÜ'vâö#9 ž¤nkïÓdôÂ̪§eÙ•ÏÚ°~ö¤£¨7i:c¸˜Ùó&Ñ5¿ô¾8|¥_wÓ;,Ch‚¨?€ßøŒ»ƒ²�PE„&xúøÏ¸;( �UDh‚¨?€ßîý3n&…Ð÷‘¿}úSæô¿¹e0Õ×€ª!4Á ÔÀo|ÆÝAY�¨"B¼@ýüÆgÜ”€*"4Á ÔÀo|ÆÝAY�¨"B¼@ýüÆgÜ”€*"4Á ÔÀo|ÆÝAY�¨"B¼@ýüÆgÜ”€*"4Á ÔÀo|ÆÝAY�¨"B¼@ýüÆgÜ”€*"4Á ÔÀo|ÆÝAY�¨"B¼@ýü¦ŸqwìÞo¿ý&ßÿ½¹À5„&xúÀuÃáPÞzë-yñâ…¹ˆiкñᇚ{�¸†Ð/P�¸NC“«tùä“O̽¨²_~ù% J¶^|þùçæ�®!4Á Ô�®ÓÞÛ8Öåý÷ßNÉBõh¹k@JÖ]‚ 0Ï�àB¼@ýà:m'Ⱥè)YÚ…êøæ›o¢rÏÖ]8up¡ ^ þ�p]^h²‹6¤á7 ÇÚ»˜Wþv!@î"4Á Ô�®[štyúô)§ëy*9žmÙò믿š¿�àB¼@ýàºU¡I퉠áì' No¿ývn¹Û€»Mðõ€ëV…&mP3¦Åo‹&€ÐEÇ9p¡ ^ þ�pݢФSN3–¥:48ýÓ?ý“üó?ÿó\=�இ¦kö{Òn4¥3Çwi4f·wê6\ý#9¨wdpkîZÃdôBº­ñA±q"ÁðÚ<R„Ÿ%hÕ¥Þ„ïöž‡Òïµ¥1Ý_wÛëÚ¼þ�À~eCÓ¿ýÛ¿Eÿr:^µhO“Ž_SÉ:aïà¦Ò†¦ÛAGêѦ¨´“—5ä(x)·£s9iÔ¥Ù»”‰yØ_ctñAA!)kÓú�ûfÈza[Û³¤ÿçB·Õñý÷ßG§á%'üÐ ÜêX6­�ÜUÚФâàäphÚyÏ×\¥ëêö¦˜àDh€ˆ¥l¯’ÞÖã³æùOËX“§<ô8n#4h·ïo"ãËSiÕ‰)„&�X‡ö4ÑËà?=ýŽSð€ò*Yhº‘Ñų08èiyMù ýžÔ¦¡$3Æi:¦æ±/fsÒÿI®¦ëx ­Þaó~ Ù1:övëO2˜®ï0|í×áƒfüN¸MÓ%ñwçVø¾õþš4Ú_È`t£¯°„ L‰õµ™Gcás†}éµ›fLSâöG¼èš×l<–þÕK¹°·kGÒ»´ã¬ôo‚pÖf¯-kµÉh¶ÞƱ´u,WvÍÝÞMùèû€2ÒÓ³²§lÁ/y§å(—…¦°A?èJ£Ö’îÅH&“+éŸ4§ úô§W2ì½­sÚðŽÆé„ Mi—aCüµ :‡ah8‘þõªQFÙ1:oë7ë³ëO„™ùž¦ø5k­S¹OÂŒ¡ãœÂ€ÒèÊ ¼½ÊÒž«Ûtêú~âÐ4¹”^Ó„Œ&Wi±RŒ/¤¾~­Ý#g(º]—Fç"Üâk¹ì…è]é ßD/±œÝ¶gr†Àé¶EûkÙþÛEùš�”›ÎœFo“ŸV– Jš^I¿ýpÖÀeCDúvöô°ììm¶7董莲ë3·§!)ûøüû‹Ç8=”vÿU|; ‚×ý“0˜$ï[lihR&8MgÏËÞž›]/¾=݆ìû‹n×¥üß^æº/íZr;쯅··+B€2ÓñNôDø‰Óò�?”'4Í�½«\¡)7ôlL M¦÷®vÈÕÄôì­ÙÓ4ÿÞ쯅· M�ªM{›¸¸­_8-ðGyB“9ݬÌ=M“aOšµÔ´ãñ}w &Û†&=29vÊž =¶\¼ô4À]ioÓÛo¿mn¡ì8-ðKyB“Øq0v ‘Ó¤ | ÿmNu³¡">o6&Æü}ööÚcvÌú¦zs»Ù“a”*²çœzgÇíØÉR=;ñS–‰CS¸¾ó ùòã¯æÿ&:E.’ÌíiÐÌO;îÉnCt;q±àMØu™ñRÓ1MZ>Ñúì¿•¡ €44ÑÛäNËüR¢ÐJÎÎO?û@ê¶ôúCy ÓC’]êO$8Ó^‹·Wöf˜^‘éß·¥ó$q»Õ“ ùxëLþõ’˜ÛÑ}¦7g|)AÛ†==/á“@DÌÄ éï Ó«d_¯þ¤#O’·;gr¦½J nGïo:Ãìï6y“Ñ éêŒyáßÕZ]ù¬Ýÿ¶'ýáÕòý·uùš���Pœr…&küƒœv³=X:‹Ý£»õ>íõ���E!4ÁˆO‡³S†Çâë6´¿ˆ¦Hwõ���E!4©Ì©mó˺“EÜ]<^)ïµÍ2¬¡8“Ñ@‚é…wuiJ»×—áø:}zÝܲæ´äÒ÷���Ð/P�”“öè÷¥×n&f6Ž¥ßkKc:q�šà ê€RJœé@hrAbâ'B€B¼@ýPZs×Ô[Bg9=~Fc¾PÙë�¡ ž þ�(­µCÓµ\öޤFc¾`„&�óMðõ@™Ì®kW“ÆHkzarãôµtÌ5ï¢ÇOÎe41)ºÏNÀó¿<×¼î(šne”¸îb\F72|!m{÷F[N£°Li™çØ íOO¿¼ÿ “�l‡Ð/P�”Ft¡ò‡Òê¾NØ�ï?–Fx ‹ä¦Á͘z#WÁq”Þ•Þðþa¦dÙsqw‰ýüz(çc9ŠÊ*~trÈQÝ\d~r%ý“¦ÔN¤>!*Ûº4:áZ¢gËuÿrØ» ÿ ÌMðõ@9h#úDj¶‘­–œž_ŽÂôZÌ…¦´ôsqwf?×Þ‘Ö{ iõ~0HÅ×4Œ{“’‹Ýï¶|%¸º o¾”àÑ“YY(-B¼@ýP9Á''4éuó¾|Þ‰NÛ›5ÈóCSþsqw64ýN¿«Ií(«iæ15{2\”ƒ½M×Þ¶ûrmP^„&xú LOÅž&sº^£-½à[ù±ÿÑ’ž¦eÏÅÝÍöóÅË@Žj½M6P™ž¤\¶Œ¥óÑ‘´û¯Ìý�ÊŒÐ/P�”ÅdØ“¦NÚÐd8~3Ó¤94?ýL> T-ê°ã”òÑó/¤ûå¦Á~"ç?þY>~þ§%ÏeÒ»{%ýöCNí~= ÃèëèѸüÂýÞz&# N:IÇGršKvÝ—¶öü-ë‘P*„&xú <ndtñÌœN÷@ZŸ>“v½)í^? Qÿg6KžÎÊvÞ“jvV¼‰ŒÝ(`ÕZ§r¹ô¹æ¥°!Ó“¤ûT—ú Îf³çÙI7få.vö<³†Øëp=ïH“ �ošàê�ÀÚ[õˆ™ šàê�À:-ù£GÉ $�”¡ ^ þ��î—Ž\Ç«}!ƒh¼�_šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàꀪyûí·e8š[ص_~ù%únÑ€Ð/P�TMòᇚ[ص÷ß?ÚÇ� Mðõ@ÕüöÛoòÖ[oÑÛT� Kš�À"4Á Ô�U¤û§OŸš[ØNˇÐ/P�T‘ímúõ×_Í=اåÈãThbaÙf€*úüóÏå“O>1·° N˰=Mðõ@Ui/“émÚ§åX†Ð/P�T™ö4ÑÛ´N˰ ¡ ^ þ�¨2ÛÛ¤cœ°9N˰ ¡ ^ þ�p•ŸXXXXXîwÙ¡ ^ þ�pÕ¾ŽO:GgÒs­·Éõã³ö0}óÍ7æÖnñÝWT½.îbûÙƒX° ê�Wíóøôá‡:7.Çåã³î+ÝgEá» ®¨z]ÜÅö;³9°`Ô�®Úçñi8:×ÛäêñÙöÌ9ë ßMpEÕëâ.¶ß™=ÈÛ þ�pÕ¾OÚsòâÅ sëþ¹x|ÖPùöÛovZžÅw\Qõº¸‹íwfr`Á6¨?�\µïã“ö6i p…‹Çg½ p‘§åY|7ÁU¯‹»Ø~gö lƒúÀU÷q|ÒÐäJo“kÇg{ ã>.Ìw\Qõº¸‹íwfr`Á6¨?�\uÇ' L®ô6¹t|Þ×iyßMpEÕëâ.¶ß™=ÈÛ þ�pÕ}Ÿ\émréø¼¯Óò,¾›àŠª×Å]l¿3{ ¶Aýàªû:>}ÿý÷„¦Œ§OŸîå´<‹ï&¸¢êuqÛïÌäÀ‚mP�¸ŠÆJu·Ÿï&¸‚ãÐöÛïÌäÀ‚mP�¸ŠÆJu·Ÿï&¸‚ãÐöÛïÌäÀ‚mP�¸ŠÆJu·ßÍmË ÓˆÞÛÂ¥u& å?vð@Z@£›xu£@Z¹Ï;Z«#Á`$“è‰ë¼n £è¹yn×J¾§Cé ^›ÇBÙ÷‘X×d4 Ó’Úôñ¦´{}Žãw6¿îäR“Fû3ùrºËž«K]ZÁÏÑ3]¢ï­Êv±ýÎìÁª&¶Cýà*+ÕÝ~7·]ÃË‘œô¯â…F@ÆÑ£“ѹœvepþØ“f*\Ëð¼+­Zš=ÚÌ1¹”^³–*¿–NëA¸Þ•ÞðMxßú¯»Êí #õpß4K߆·È+é·¥Ýen‡ïãò4|¿|’ï-ó÷óÛ{#£ÁÒn„Û¦a±÷C¸Æu_Úµl@ ×=x&mB“sv±ýÎìÁª&¶Cýà*+ÕÝ~7·= ûAF6ðdÂKêñè±l0°=F$Ù„ó³­ú\OQnìßoðº+ܺrøÁQx«µNårÚc¤ï­5[çøB:x’Ϙ\r¤ÈUê=e·7d×3 €¡Ûtê9ÏuÇ¡í·ß™=XõÂÄv¨?�\Ec¥ºÛ_ŠmŸ / s!ÂöÜdÂF^hÿ =íÍ©Kp•ì 2–½î ·ƒåQð_rKMOŸë\˜ dhšÈuÿ$z¼Ù» oei¯ÔðŒAhQhÊ[WNhÒ vÜÈe{ÇqhûíwfV½0±ê�WÑX©îö—bÛW†¦äx³ÔN¤Œ!&4Í=÷aâT¹Œ­C“†•×aH: _ç/5Ò%B“í[ô9/ Ma ŠNÝ Ãb»/×zGš²Û{ õ¡ÉE»Ø~gö`Õ Û¡þ�p•ên)¶}ehJ†ˆkö{ñŸTR¶§IÇ õ¥×n†ûÀšŒ„¦Ðä¥GÚ£u$½Ë«=‡&zšÊbÛï̬zab;Ô�®¢±RÝí/Ŷoš”=U-Ù«’?¦)ž,á@êù všBÑ$ä'Òi¿gÖ¹ÿÓó\ÆqhûíwfV½0±ê�WÑX©îö—bÛ=MúžÆƒ®4Â÷”ê9²¯ßèÊ`:YDìNA${׆¦¹ ºrjƒ˜#8m¿ýÎìÁª&¶Cýà*+ÕÝ~÷·Ý†ü±GóSpëiw™‚;q¤¹)ÇCãK ¢Óó’5XË_w9 %æÜ:õ~"Äìëè”ã_˜kKé6ÜeÊñælºt²l/Vøü‹gÒ:œŸ­ï¾qÚ~ûÙƒ[oÌx(ý^[Ó_3ÌÅÇò~ÝØ‰øW•Íü™“þê}€í5Š`Ï;nÞéWœí}ÿ§Uý`�À]«Oóƒè“ß-ÓkÒDKbšçÉHAÇ|§è¢ß+=飡¼‹p†ÿ—3Yt1ÒƒF[z_fÓ>/ì=¯?Ì4ZóéóËyÉïÔë§Õ_}ÁÒùýzÐúùÙû¦‹þýŸgm ¥÷½]²ûy1}¾»ì˜žÄ¶MCÏŠ ¸†åj/öõÎä<'ZÂ}zz‘™F|Ùë®’)Ólcr%ý“£L»GC’_e_s“‹ÛêÅ|ÏV|®Ò‹‹“Aèûª²]l¿3{p»I|�÷ÔH¿‹¨+¸®]»cõK#yíŽÙ‹‹@îÒýïÿª �¸k½ã“ýE<1Ð|*~¬™¼ιq"ṁr…ˆ¼_Ä3ëÍ阌.äÔ4,Ó×¾‰Ç~L‚Ó„õz ÖÚþééOÙYÙBúXó‘ô.í»÷ÇÚ,µ§’%ßëöÞ ßW&€ž¶£ýO((hÿÙïR}ÓÓ’÷^3øn‚+ª^w±ýÎìÁí7Æ4Ü Mæ—‰]¾?1æøÙÂõÅ¿mšV¬o¹ûÝÿ|1pÕúǧ8œ¤¯£´áÿQ„l£ßN³œóÃÛt&±ìØ‹ì¯ß Æ L×<í(>¾§þÞŽY£‡`½í7á&ïš>ákœ$߆,ÿ.´=É‹³ªYpM­;ÚéS¾â –7ž%ï&¸¢êuqÛïÌÜ~c\M»~×rÙ;’Ú’õmšV¯o9B€êxúô©A ÃáP~ýõWso¾õO¶1ž C„N> d·%'4ÌÖ‘åkÝК[ÿ>BS(Zçü‘«à#éÚ±3yÛ—2?#Úú¡Ią̊FhÚŸÔé˜yK^™aºÿªlÛïÌ¼ÓÆLFrÑ5ç37Ž¥­Ýò¶Ñžc£Ýéñù¬õy1ý›ÇÒ¿z9[G¶K~¡Äú¢/{ûi=ÿ.ñžìl-‹ÎW׿3§D÷çû›ÇœéúòÜÉ/ŠøÿúÜø€“¾ýëZ뛳öþOÞ~,Á ;®KO!ùI®¦ã¼H«÷Cøõ¼9}ß�°/šâãålùðÃåóÏ?—o¾ù& S¿ýö[ôÜŽOæ´¹ä©t“á©<J{üN‡ ™¹Ç7 MöÔ½éégæG1ûYrýŒõ·ßœ6—<íMßË£ÓD84ïeá‚ó'¿ cËB“=u/q:_´ÿjÓÉ ¦Ó[çõŠelTö@ª^w±ýÎìÁÍ7&>… Öz&£›ÙA,j¤ÛƒføE¦·oÌ€Þ6ÁÈváOÏ7Ýýóç’çHü} Ù/]¿Y_¼þdø0ïɆˆè.}͇&(ܘqN³ór9ëËHQØ_Æì—Dööêõ¥m°ÿoí—î3Œì)$ƒËðÕÍ)!kœ#žG× �ûòâÅ sL[¾¼ýöÛÑ¿ë³ÁÁ6ÈõöS=O÷šÌ6EK­%ó]L‘Ç…±l`œ½—}‡¦Ä¶‡K­Õ•óÒO*©z]ÜÅö;³7Þ˜¨?9°3ÛèÏÜžûÒˆ¿0²·×9Õ ’]_t;’æ^/ûþÌA;Ìik‡ìúæe¿(âÛ³/‰ôíÕëKÙtÿ/ÚþìíÜ/±Õøb°OÚ‹¤ÇUËûï¿ý»‰øG7sú™k³ÓÛSãîóô¼ l´ýöµèµõ;ñQfÜ– §ç­oÓ²ŠRõº¸‹íwfnº1óÁô¹/ûMÙÛj“à÷÷iE†¦÷ÿÜmB€rû×ý×èØ³hÑÀdÃÕfìhmyþüDçÂmØ'®“cíl"ˆä©wññ;ý÷ëÛlûm(z(íç_ÌFeCÝš,ÿ¾Zô}3›"5G´ÿM(·ª×Å]l¿3{pÓ‰»ðËÜÓdOHø5÷åþz˜•]ß¼õB“}ýÕëKÚxÿÏÝ&4( @zZžŽgzë­·äÿñ£cOÞb“ÒÛ›™5ÞÓß v¹äõrv6åxM'ç‰ñµqH[ëôõo¿Ý¶…½Ivÿè”ã«.XšaÓï+ûý›ø¾IN9ž¹ài¼ÿ’¿¾ÕÛ®ï;9FZe¿—Y}MÆø»ÞÖÍÕáo½çëwzkÁc9ï)º–ÓšÁ3;&:Ë´¯â÷—ý1 iØmZ¶Þ‡ym[FyŸ¶im¾h'íbûÙƒoŒ=àÛ1DvLV i·þÃY…Î~i˜¿ÏÞ^/°„Ìú¦5º8ÀgŸþr8;õnú‹˜¹F¼ ×X;=„ë;ÿñÏòñ—Ù¿™ÿ¢ˆ?”æöô:úÓ/ýuqÙú26ÝÿsÛo¾´²·5VØÅ‡�²~ùå—hb{š&½­3æéCÓË'Ÿ|bþ:¦÷mÌ~GÍM?ž`—Ó×Ö±ÝÅmk­Ž<O^´6Ó8[¯‘˜¦·ûý°l¢…YCtúÞtŒì6·ÕqZÏ¿M]t>ݘ]¯q𤳔ý.½ÃºÕìý-nhÇÏ™ÿAr2z!]3•ŸœÿÝæ¡i»ëD&βp“ü‘zJëÄ·ò\8Èý[³îeëÍ M[–Qü~—ןÜ2JùÔ fÝë¼/}ý*ÛÅö;³ï²1é|W>k7ÌÆÕìC—³Ô;gr–8hfo¯ìmÊ|‰ÔŸtäÉôvøA>;K<®ìÿ̸í‡]?àæ"yÑývR„u„kO#H]„0–>Л—½bô7ÏäEðXêÓ_)—¯/ÏÚû¿Þ–Γäí'œ%¾È³·sî«èßÀ.|ÿý÷Ñ,x:‰ƒö(iÒûlÏQ’ SvÉ&UõãS•·­mß á›gy¸±g¾WSQ™‰2ý®¡I­zOË­nòBS²m¶ËФ¶,£U?_FúÃ÷9ê¾Ñ$lŸEsÛZÙQ6x_‡¶ß~gö`Õ Û¡þ�¸+í1²§Ýé±Dƒ†&íeZE{ôotÉ Lªêǧ*oÿZÛ¾eƒ|óÐdÎDIœùŸ“>±t¡)²ìoËš^I¿{–8ó)ç”RµÁûâ8´ýö;³«^˜ØõÀ&4éÅióN»Û„=EO×µHÕOUÞþµ¶=ÛðMéÑ3R–]Ò6¸M@‰Æ¥{[räzº|ò¬šè´zj ÙîBSvŒ“½},Ïßš3V’—[I†›ô)¦Ñ>Šö×=‡¦ì¸+{»õ'L¯=™˜¨%õ÷ÉÓFã}4_FYf?d‡dß×kÕEíbûÙƒ.f\yÍA'oYw²ˆ;3ì¼×Ž–E‹]¹ï×ßœ¾/¸k¾±”añ•žv§‹=ín[z!Ûe|Þ—ë¨òö¯µí©†oâûWäÉëL.¸ä, \Éð¼+GGéñIó òìDXjþ¾tðÉÒ÷¹^hšµ©âÛ³1O:N'áø\Ça´ï1n^ëä&Çæ4µxÝá ï94eÊ(u-J3ÌÂÎbiÛ‹Ó¿¿×:aÉѱt/Ì.ÑÃÙ2ÊÒ Ûœóžz_Ë­Uï`6¦Ý\‡ÓÜo­z\­óœmíbû9’U˜¨êÛ(Ÿòñ£ÌnÂÆØcéfvëœv·KU¯ÿUÞþµ¶}®á›iÜG'BBæùqƒû¼×zGê Ç8ß_hZ|{öžÒ›í¯½#­÷óèìþHYŒ–=Òõ®}z^v]æöôGõÌãæïkïµä½ú‘ô.ÓóPf÷GZ<æ¼™7)ÌÜûZ¬˜Ïaf²™¹}»êqµÎs¶§ëÞ–3G²]l ª‹úã6ʧ|Ê_fvðô¢FßþT½þWyû×ÚöU òèñU¡©.†ÎP;?ãà|ƒ<>=/5…|´Îôïé “¥ï±èÐô;iü.gÉìþHÉì»”e…t½E‡¦FC~—ºZ,»?RtÒŽÖÇs×$‹Ì½¯ÅŠúÒÓtªþ¥‚íPÜFù”ÏÞËÌŽ ¨½'ítiÓ( ï¯=¤¿Bf§ÝÕñæÚ<ÑãMiŸ^¤f›Šï—ÂO«^¬êõ¿ÊÛ¿Ö¶¯jG¯ Maà¸ø!:%,;î|ƒ\{`SAħ̥/–œ2Yú Máö_¼ÔS3 éìþHÉì»”e…t½‡¦zç…¼Œö}º·)»?¦tÖãv'}ݰ¤¹÷µÇ¡í·ß™=XõÂÄv¨?n£|Êg¿efák¦)7S!§®eW› ‚OM›|#£þc‰.xj”gj÷¥êõ¿ÊÛ¿Ö¶g¯#i'j° î¥×´×dŒëy<Þ)9©Â‚yò³3¹’þIs‡SŽg¯™~³ÛöºŒÙÇ“ÛoÞܤ {M«ÊÈÞžNÔW†¦Ììx§¹É<2e¤åÒý4u¡æñårrš¸à3¡im»Ø~gö`Õ Û¡þ¸ò)Ÿý—YNƒ&š ,9 r²1ö¿ãóà“Ó&Û†Š¹Ðä†*oÿÊm7^}ž.õN_¾³? Ì-aPÈ\òÝÖ»a··Ãºô.Žá¹ rm€O¯™íÁÝ54Å7{OO:í%·ÉYð$qû÷Òj…Ÿa{;{GíÉYš’³Òé’Ýæ;†¦Ue”½e«'Aòñw[ÒJý}òÚ ñvÌ•Q⺚éÅMƒÐ´¶]l¿3{°ê…‰íPÜFù”ÏþËl¾A“Ûh‹‚”64~Ìi�ÙÅÉÆ"¡é¾Uyû]Øö¹ùš–~‡¦Â- M«Ü14íÁ]Ë(Þ„¦uìbûÙƒU/Ll‡úã6ʧ|ö_fó šxœEzpz|ŸþÚúÚLó›üåÕLýkN‘!4¹¡ÊÛï¶š,BS•íbûÙƒU/Ll‡úã6ʧ|ö_fÙ1!{î¿4{ß8ÈŒyz8™*nˆ<”öù…|ùñWóÓõîIÕë•·ß…m?öô®Õ?"¬÷üûMöý­LX²Ûälh²Û´Æ=ïŽC»Ø~gö`Õ Û¡þ¸ò)Ÿ¢Êì·ß~“/^ÈÓ§Oå­·Þ2÷.iÔŒ/%hëlzú˜½æ´ß)1.C7–4ƃÝÃÇ23Uí[Qû²,ª¼ýûØvý<éÅš¿ùæsO¹é§?üðCs«üt[´ŒîÇ¡í·ß™=XõÂÄv¨?n£|Êg—e¦“ÕÝûï¿­W“Þþõ×_Í3üVõú_åí/rÛmXÒÅ…Fù.è±BLñe{”+ÛÄqhûíwfV½0±êÛ(ŸòÙ¶Ìô×âÏ?ÿ<jÐiƒá“O>‰îÓž¦ª©zý¯òö±í>†%¥Ç=VøÒc–¤Ç>Ý6 P÷…ãÐöÛï̬zab;Ô·­_>™Ó´ò–Ö™ü%š!-ç1½šx'˜MÍ´–÷<Ó‘`0Š'Èœ>¿¬tlgm³ÏO_$rî}$.´: $èØ‹·êÒ”v¯Ÿ8-;nrÑçþ91Uð²çê²þ@c}þ&´×HpÚ‹¤«½Jšî³‘àŠM÷¥oª¼ý»Üv_Ã’ÒÀ¤Ç ýqÅWZfœî«‡ãÐöÛï̬zab;Ô·­_>šŽä¤‡™(lÌÅFý»Ñx—xµd˜¹–áyWZµ0L/0š\J¯YKóµt¢k`˜™×44>64h:®&¾hêámÕt@oîÏÒ‰S×_ž†ï79N'ñÞRof…K†žÉH§mièk¥ÆìØke’^(öÉNC“¢ *{Úݺª~|ªòöïbÛ}K–;|Ç´ˆþ¤ÇËûèqç8´ýö;³«^˜ØõÇmë—OPþöƒŒlàÉ„¦ÔãÓëõ${€lOU20˜Þ—DÃùû0€üío¦×i.4…R/w;èÊáDáÍÎêÓ÷–˜mÊNR xÆtV¸éúÓך CVøzQpJ¬'Þ¶õ{•ò,*3=ÍD ¶8{Ú«úñ©ÊۿͶW!,)=†ÜW¸v{÷ãÐöÛï̬zab;Էݹ|æBSÂ\h²=7ɰ¡rB“½ÚzíX‚«doÊ M¸|,‚ÿ’«àXj:Û[çÂÌæ– M¶7(} ¢3ýöôD‹B“Ê>7/4Ý„ïç±tóöã¶Ì´×H{’§Ýiï§Ý­¯êǧ*oÿ]¶½*aIéöÝç)k÷á¾NEä8´ýö;³«^˜ØõÇmw.Ÿ•¡IÇéd–Ú‰ô¯“1dÑ8Ÿ‡‰Så’vš4Èéép‡áë<0× J†&Û#¶èzÙÇ—…&{êÞl{Ò×ü°Ë¢×š§HÿF¿Øõ_ Lڸᴻ»Ñ}XeUÞþM¶½JaI ‡Ã{Ÿá¾hpÒrÖ ö…ãÐöÛï̬zab;Էݹ|6êiº–a¿_³'Õƒ”íiÒqC}éE×þ±&iW¡)”º8ëÕžCÓæ=Mz¾½6bôË\ËŒÓîvC÷% Ëý.Û"4Á Էݹ|6 MÊžö–¼Bzþ˜¦ð‰ÒÖI#æÂÑCS(š¼Bƒ\ãD:í÷̶ìûô¼õè¯ÛöW_>S@±ªÖ³dÙ^§ß”íÕ×^7¸Ð/PÜVåФïi:YCr[ìë7º2˜N»ËDÉq\ C“ö|ýñOsOäá3£ªaIÝ×x—i¨êiŠeCh‚¨?n»[ùØ@?öh~Êq=í.ˆOÏK^'inÊñÐøR‚èô¼äD –‹476jzܤ9·N½_'†H@»}:åøæZKº w˜r<õ\g=O‘ðùÝ#9ÌíÙšÇg Ø­*‡%KÃR¦ß”ŽmÒzQ•ËŠÐ/PܶyùØ1=Ú;c–iè±½.‰Ç’K£-§ö¢µQoTÎs¢¥)íÓ‹Ùôæjî"·Ùž¬e2Nd{ª&WÒ?9ÊôšiH²ã«ìknpqÛZK:Ï¿]óB¸º,èµË¡Ï°=ÂRì>¯QTU›z½ŒMðõÇm”OùPfÀvK3ºýU›Zü.´ŽSÝEh‚¨?n£|ʇ2”Vå©Å7Ř/·šàêÛ¼(Ÿ¹S÷²Ëæ³Õ¹L· ÀúKó4(i`b¬O{ãØgnr*4±°l³À]”OùPfÀzKù´×D÷ S‹oΆM®•ç§BpWÔ·Q>åC™Ë–ã4³íi`â´F·šàêÛ(Ÿò¡Ì€|„¥Õ˜Z|7´~ipb 7šàêÛ(Ÿò¡Ì€|„% šMðõÇm”OùPf��ÌšàêÛ(Ÿò¡Ì��˜!4Á Ô·Q>åC™�0Ch‚¨?n£|ʇ2�`†Ð/PöOBA°Ö¬>”OùPf�"ã¡ô{mi´™»Òne<’ƒzGÑõ½¯eØïI»Ñ”Î`=#Å®oú|ÜÝÏÇK.¬þ³­ºÔ;ƒ°”&á®ïK¯Ý4·³V=B¼@ýÙ?½†„îw]tjY QzmŽ<”OùPfØ»Ûtêó.?h´¥×JNó+ÅæäþܬAüF†½wã¿]šÒ&Þ4£×j䄦± :x}UM£@Z¦<ÒKSÚ½¾ ÇóÄÅfûùђД0¹”^³½NnH|þMùMðõgÿ†Ãa´ß“‹^OB¯Ï¡%Q>åC™á~¼’~ûá¬Ñ6¾” Ý ëãCi÷_EÏØŸ¹ K7¯·¤T&rÝ?‘Ú÷¡ :k†&u;èH=74)³¾ª÷4Ùc÷ëd$ÝVXNRk÷å:zÒrñ~^34)Œ†¢UW¡ ^ þìŸ^¥\÷û¢E¯ebOßÓÛ(Ê ÷#nP§m×}i×ÂãÊöíM¼v*­Ú¢†¹lܸN!4Ãô&÷«ííYs_šö‹Ð/Pî‡îw`ÿV…¦kžwÃ0cëiSNúWaęǨµ>z’6&ÿ[Fƒ/¤ÝŸßhËé`”xþ;ÒzþÝôþƒFWã[˜ìk„Ë^Ûî­Õ¸å¼cöÃAMíÀœ&fCÓŸdpñÌì—Ã0½žþ]vŒÒ\hJô¢4Ž¥Ýz@hʆ¦éþ GÁ˰†ZZW¿–Žî³¨lšÒ.ÃR™•ëóÁ·ÒË­s=ÿ]fŒRN(šŒ^Ìþöƒ¢ò%4å#4Á ;©? N£§Ùéb'}øüóÏ£ñKºLK=]ï›o¾‰þr¡Ìp?L= /a³qr%ý==Ï4$£F_]ZÁÏác/%8 {Íž oÌ/ôa½­reZœ“«@ŽêGÒ»¼ž­«v"ýÿóãt|ÇAãD‚áuüÜšYwhyoI¹¬ Mf_Æû.llºÒ˜n»)Pí~ûö±p?. M¯Ãç†aö™\ŒnÂFú¹œhˆ%4eÆ›=VçLúa]LŠë¥ Rñ¾´û.ÞÏaØ99—ÑDO'=C—)gÛk®{ah_H§ñPZÝÑßúÃr'4-Bh‚¶¯?‰Á®8ë„ 6iÒEÇ"izÿý÷ãý.ú½ïéÓ§ÓçÙ¿Óu, Oú7vf=½r¡Ìp?p»ÔZÒ9Ï›Â<׳ç~EO×S‹iÌ'˜Êü}•BS<©À»Ò¾1÷$™ý<ím[p{QhŠz “ã©æŸ_M³ž¦«(¥ÌÔaýa u,[®såœýL¤n›±nú#µYùÜgI„&xa7õgùþÚvü,ñ\7 kPÑP£³ÛÙ c{‡tœ‘m8Øû´÷HŸ£=B6­+/4iï’¾v’Þr¡Ìp?âãðòFÛŒ_És{*ÙÂÐdŽé œñó Mjùãf?Þ14ÍïÇùçWSòô<ÛK”=5/»¯Ó²å6WŽÙÏDêvN9Ì}†Dh‚vS69_ËeïHjÓçNö2h؆še§Ëih±÷ÙФ!FÿN'oØ%}}ûººhïRÞ´ãúÊ…2ÃýˆÃ mÑ)v‡Òh&A ýä1{®ÁgŽéµc ®n¢{R¢çW=4½’þ?•‹µ§iÑìzÙ†û‚Û‰ïÎ例{±èiš—ÓdO{LÕWÓÓ”ì JØ.4å¬{î3„$B¼°›ú“=/plStŸ.ÿÏtðd|;\Zÿ¯üÑEçJ«}#lMÊ”šŒdpÚŽŸ ÂýB£Ù½>Õérû¦¯¯ï+¯w)IŸƒr¡Ìp?â)ÇM¹7 MÜ62ëåùÙgòåå×фɟ½–Oÿàõ‘œêihÑic5iö.ãc°™p"šÂ×:¿/?þ*sÚT™Ø)Ç3ÐLÎP×}m÷eã±ôí÷Îõ·Ò=Õ}—ɬÇnÁíĈ©)ÎíÔÚvì˜Ó–ËÂ^À*°û%±âñKé¶A|Ÿ·=+Ü¿Ÿ…uø¿Í~¶§UÚýž8Í2S§ímûùŠ?ÚÞÐI?ÞLÇ4idú¹À¡ ^ØMýÉ„¦ä¯ö ezp[þËZü=ð¤»ÚJ¾~uÍ×[§r9žL¿TÖ½VÃ}Ñ/ímZØø|—e†½3¿rGi]òz"Æ?HÏÎôÕ>•óÞÂFbSN¾~.%þvœnd4ñ-\lc4õZáqþì,}[ûÑ ù°Q[3ÇìRÊN6]f=@³YÔâÇjÑ÷Ñuü]gŸßêI°ìvXfß}g¿ÿt1½M‰u×Z]ù¬Ý˯77éAeÌ]ÜÖöÙÓôÌýÑg S‡uˆÞòzÚÎÐ呜OR·ƒŸ¿K}žêO:òdî3’\w¸ÞOŸI»¾þv«†Ð/ì¦þ,;e ûØòДw{é ä‹ÿ6“SrÉ}/å£Û‚r¡Ì��˜!4Á »©?y¡iÁ€ã;…&ó7y§#D¿zúÛÎç»|(3��fMðÂ&õ';»ÜL&-p¼MhÊ”lN™ŸnÔ|¾Ë‡2�`†Ð/Øúc'EØdv¹3˜ÕÌ$‡žŽGz9 @'rþãŸåã/_Ê}~4høÊçóoJ~mNÝ{`.2>¤çîŸüÉ‹A²|¾Ë‡2�`†Ð/Ø@t÷ÙåL/YOÔƒôzÁ€ãh={Åt;X6L6‰Aß~öA ÌºRÁiÁ d}ÈÌd�Ÿ=¯Ìt[Q.”��3„&xúã6ʧ|(3싞��®#4Á Ô·Q>Y:­ìcé&NÝt e†¢iXzûí·£³ôl�Ü- =u}×@‡[tÈ‚ž‘s×uôAåCS<nÅžF•·<’à/g™ùôgK­Õ‘Àž^µìzµ–t‚¹0YæT°¼ez¥íŶ{ï™yøç®Y¢÷s>íQþãÑ’¸²úžéëÃ]”OÒDÆ—§Òª¥Ç»¹†2CQKnÑ2ÐÏ;©>ùä“(8as„¦AW§WYŽCÏô¢xÑìiGqÃÆ^¹yf†ÏðkéDc^W_ž^‹Ç^¨,4Êy4eµRZCÓ‘Šˬ]Øô°;•m‘;¿÷ÄØ™ôÅSÍDÙÀ¦cuÚ_Îî‹®( H:Æç™´ MÈánù$?Çü›a¾ ?¡êZ†çÝœñg‰=¢ÏJö¶®³/½ö;ÒzþÝlœZ#üLoM`2ëœþ{ô½»DXr%íaâÉêÐ^& Mž°™Ê‡¦ÉèùÛt°}&x„f›^¤L'îíIÛ“MÊ^}<úûýívB™ÐM||­Þ{êýX¦ñ·ªýíýõ*å¡ç6WËgrÈQí/è£3"šiäõG€®4jGÒ»¼Ö'Jÿ¤nÇaø9}þeö†Ämû#…¢Æ‰Ãkó:³ÏÌütôîá3…]!,¹IÏZ.éYdQ68éézX_åCSÚ|ð˜É :%´þBºîN^hÒi¥¤v`gs¡é.6xïÓž¯ìûÉ M:Õöñ³t¯WNhÒFáq7ïµ÷ƒžÛÜ,Ó+œw±aó™IõÄF=¬¶w6ûYÉÜÎ~FÌöóIhB–ÜEoèeÜ¡)eà¾Ïôb®ã3µxÜOúT¸„}…¦é{y ­Î™ô‡Ùw“8Í(¹$.à±½T™çå¿ö~èëÃ]n–Ï’žÕLȉ™ÏQô|B°aÉ}ŒkÒà¤Çz>§ë!4¥¬<¦$;nAOÙIöØäô4‡Òïµãkúr•ýU{=MWÑiB ÞG^#’ž&쀛åczšÌÅŒSì)vÉ^¨è¾zb\bNh²Ï'4¡‚KåÀ jHÒÏ-3'®‡Ð”²Ih2Ì);³Þ˜cšì˜‡¼†Ò^OÏÓ©Žœ*˜šò䄦ûFÏm®–O<Ö¨&é„*“ð#ý™œ¯§Ÿ“Vï‡ð“q#£þciLOÅ5Ÿ•(pÝÊxH[/lngôù‰Ž vâ—9N¤CÓCiŸ_È—•óÆýã3…u–ܳ¨Ly¾ùæ›è3œ¤õ>vŒÐ”R…ÐÒÞ££ìX,µ84M®¾”?žšàÂФ¬68íL‚ûCÏmî–O†.ž%f³³!I]Ë08‰zˆ£Ç̤±Ib¼ðoº_IðQSí/dðó‹¨W)^_ø99;KßÖÏÎH©!ËN4á wË ® ,¹I¸úùÕ†p’–‘ÞO`B{Êf2 ýúë¯Ñ}ÙºTU„¦$ÓÉ{47åxh|)Atz^M ÓÐÊ™r<ÙøŠ¦Nþ¬lféšµ¡uÞ{âT£øv}?vee‚]f`üdôBº­°qgÃPöWôˆi|æ ª/ <·Q>åC™U‹6ŽÖEXrÛ÷ß}~u±=hPbÐ?VÑÏôÓ§O£ÿÛ:£õHï¡i*>]Æþ¬K"ôD=AÉÇ’KSÚ§©k%å?/ Vú+ôtŠpezv’ÏËéåYe³÷n³§é%[²D=i‹'¹°K~OWñôµá.ʧ|(³êÐ_–µq´*�–ÊAÇ,Ùïd]þå_þE~ÿûß3µ8VÒcö,ýû¿ÿû40Ù„&x‚úã6ʧ|(³êФå½è×dÂR¹ØòL.ÿðÿÀiyXK¿ßŸ«?ºðÙ'4ÁÔ·Q>åC™Uƒö>hYÛ%Ù0",•S²<“ §ça=3¯îèBOeøÙ2ÿÞ;-$场—ZÜš½î¾é>»(Ÿò¡Ìü§Ahö/’Kå•W¦Ù…Æ/²ô´¼eI®ëEh‚'¨?n£|ʇ2ó›Ǥåœ]Þ{ï=ÂRIe{-:Y`eÇÁ-Z’3ëU¡ ^ þ¸ò)ÊÌoyã^좽L(§eåª!YǛ̔ˆêÐ1o«z›ª¶ MðõÇm¾”Oj¦ÊéµÙüÄgÊ_ëôF0ö¥œòÊRO«¢<±.íM²»ÍÖ% ÝUFh‚¨?nó¥|M(»uƼèBoSùdËV{ ˜1ÛО¥dïeÕÇ5šàêÛ|)BÊlÙ8¦¼…Þ‰rÑD »ÚKPõ±'Ø-=¥SC¸?ª|z'¡ ^ þ¸Í—òùûëŸä¯ƒ tùëOòúïæñ™ò6¤µ7bÝ…^Šra¬ЦÇ*rB¼@ýqåS>”��3„&xúã6ʧ|(3��fMðõÇm”OùPf��ÌšàêÛ(Ÿò¡Ì��˜!4Á Ô·Q>åC™�0Ch‚¨?n£|ʇ2�`†Ð/PÜæKùp&��ª‰Ð/PÜFh*>S��ÌšàêÛMåÃg �€B¼@ýq›/åó÷×?É_èòןäõßÍâ3�À ¡ ^ þ¸ò)Ê �€B¼@ýqåS>”Ù}ûY‚V=*‡hite0ž˜Çne<š=vP—w[ïÎN–GŒâóGS§•†Ïmÿ™^w¸Ô;ƒp­IÙ×ÏOIÝ«Q ­é¾­I£s!cóÐ\Ù‡ey<Y¿|ÿÇ$Ö­KC:ƒÙÚcÙ×È«(µêØï¥Õz˜¸.­@FÑsÇ2è4…uï/g•¬c„&xúã6ʧ|(3WØKØè99—‘ÍMêº/íú‰ô¯Íz»v µv_®ã{f&—Ò;üƒW7öŽðé'R;x(íþ+s_ŽeëÄönÒ©kƒ²)'ý«°T¬¸|êÉý¾Qù¾’~;l×õcΚu�å¶v[^&Þr5]Aõê¡ ^ þ¸ò)ÊÌšŽäƒö{aÃã´z?Ì~-ÖÆÐÃDïiåÿšû³>NõÅ=³‹\Ñ:µwêgsvJ÷ïá±´[ÂÆç‘ô.gqHËça²,7*_¶§½ùÖª(· êX\òzB£@¥ê^õê¡ ^ þ¸ò)ÊÌÚ0ù£Wÿ%ÁQØè98 4¯ã‡´1Dh*7Ý¿¹º ä¨v: 3۠ݬ| M06¨cq} 4-Bh‚¨?nó¥|âƒ|n6SŽc?LhÒÇøB:šÔŽãÓ°´1Dh*7Ó ÉDƃ®4ÂÏ]Íœ•mÐnV¾„&Ô±¸>š!4Á Ô·šÊ‡Ï”+¡)41¿×Z§rù: Q„¦r›6hÕ\ÇÓÓ0_g´›•/¡ ÆuŒÐ´œS¡‰…e›îò¥|MØ¿thÒFϨÿX:1Ä“¤ MÚpnÕóÕ:QÀ;]B“kR ÚÐäJú'Íðów(O:H‡¦Ê—Ðc“:͸—št"ˆwMnà Û þ¸Í—òáâ¶Ø¿lhR¯Ãû£2J‡÷¸Q}ÐìÉ0;™•μv˜¾qcæ•ôÿøi¼Þ…¡IgÅêJ7ïi¬/Û Uö4̰|Ói“ò]Ò  ŸûÇn¼Þµê�Êm“:…¦š4{—á'<I?ï”ÃÔýÕ«c„&xúã6ʧ|(3GL^JpôÞlò+ºÿA&4%N½é¾0Ó“Od<üZ:­†/ ;pæWåÉH.º­Ù4ÄfšëtãýFFϤ•œîwnÙL^ƒ+fOÃÌî÷õË×L韌^H·Õ4Ó?¯YPjÕ1{\©µ¤{¡£ Ôµ Ï»áçÝŒ¥œª^#4Á Ô·Q>åC™9 úÕwv rº­íŽs99LŸr5pú=i›_‘£%l�u·2k²˜‹ÄºÓ‹^Så‡/Ÿ¹¸mfáÚMÛÈ^<8{JT|æa¦Ì×*ßL½™[¢ëêü¯5ê�×n*·;Ö±ñPú½v4a„ýÛZ«+çÃħ½¢uŒÐ/PÜFù”e�À ¡ ^ þ¸ò)Ê �€B¼@ýqåS>”��3„&xúã6-–ò-�� Fh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&WŒi4¤3›;Ö0ÉE·%µpß4¥\ʽÄÏ´êRï äÖܳڌ.žI«¦ï¥&v ÃñÄ<V<B���ŠBh*­¹ Ž¥~ÈÕí•ôOšrÐìÉp9%erÈQýX‚«±Œú¥qð®ô†ọţþ��� („¦ÒºKoPQne<’ƒzG÷ôf¨?���( ¡©¬nÒ©8šÆ2è4M���ðRBÓµ Ï»f¬M¸4N$^LJrÞ±c‚tÎ2Ý„L‡úÒk7¥þQ /측Æcé_½œ#ªIïR×u#£A Öïä½Î©t[¢×ªµžÉE´¾UÂ÷ØïI»Ñ4cšìícy>øÖ¬/|‹xÌR4þÉlO´˜±P ·'nã×á{ŽßëlLTbÛ£@fo¿#­çßͶ½Ñ•A4f)îñš½ärÖz!£‚NÔ×����ŠàyhŠÇýÔj:Ö& ã é4j¦QÿZÃ0ØœÊeØøŸŒÎå$|, ×?J¯þ_û&Ecv4xÙÐeÖUk÷åúº/mÊâõÝÊøò4 jÑãæÝ,r;èH= qø™ {ÒŒnÛ ÞÄÛqðH‚‘éÊ™ëiZ²=92ÄÛó@Ž‚—a¼‰ÿ6ê)z¯W·%Z÷är¶/̶Ç[—Vð³Y[NOS´J«÷Cøh*£qN‰à·cÅÔ���À÷Ð5øëÒì]†Á #ê­y(íþ+sÇD®û'a01÷Í…’ì"ÓÃÒ d¤7£õ%ƒÄöÞ C׉ô¯Ww¯ÄÁi6{^|{’²Ï½¿UÛ“bÞÛ¢‰#²ëŽn'¶mnßdC“ã”ÚöWÒo?\{lŠÐ��€¢øš²ý„¹¢’Ág.lšLpHö-±mhZ¹=)&äØ÷ž•Ýöì~œÛ7ÙД7Æi³ý±)B���Šâwh2§–å"ŸWKõBÅ÷™©²·M¦7'Û64­Üž”½`[‡&³þÔk¯èÝÚ¡ ���Eñ;4Ù1MM9é_™0ñJúÝ3Þ¾”àèÁtÌ’LâkÕôºGúD3Ni¸²ÌŽõ±! MvL“SôÐŒZÅžJgC‘½mCGöñÐÜû[±=ñ¸¤š4NÎÍä úŸÉ©¾žY÷4E·,ûxΩwv ØÝöÇæM���(Šç¡)4Íf|Óe:ã]h|)A»ß?t!lÒ›ž”ø~ gr¦½J nG½MQh ×ÑzOÑý¤Õ}±Ölqq/’YWŒžtÚ‰Ûä,x’ºüå, hÓ×·=R‹¶'׌.žÍfÔ÷«“6d·ýIGžLo×¥uv–x\{Ÿþ3îq3ÏïÓ)=/¶NFÝogç+†¾���PÿCÓ¾,?„} 4�� („¦]1=M¹3õ¡p„&���…д f<“nÃìô4ËL’0}<»Ð;µ º/��€"šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� (N…&–m��� ô4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMºt¤îÝ'õŽ nÍXˆú��€¢šDhÚõ���E!49ˆÐ´9ê���ŠBhrÐß_ÿ$ d Ë_’×7`!ê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ÉAL9¾9ê���ŠBhr¡isÔ���…Ðä BÓæ¨?���( ¡ÉA\ÜvsÔ���…Ð/P���PB¼@ý��@QMðõ���E!4Á Ô���…Ð/P���PB¼@ý��@QMâ:M›£þ��� („&š6Gý��@QM"4mŽú��€¢šô÷×?É_èòןäõßÍXˆú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���( ¡ ^ þ��� („&xú��€¢šàê���ŠBh‚¨?���(ŠS¡‰…e›���(-M����X‚Ð����Kš����` B����,Ah���€%M����°¡ ����– 4���À„&����X‚Ð����Kš����` B����,Ah���€%M����°¡ ����ù¿D´¶# š*����IEND®B`‚����������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8s.png��������������������������������������������0000664�0000000�0000000�00000076024�15030617045�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��þ��t���jN'���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��{©IDATx^íÝOˆYÚçûÜÏ~@0;ÍÒ³25‹^i1ä&ª7µxk¡†Äà… ˆK/·<¯@PØC3‚tAsÍ5Ák¦)¨JF4¾ôäÛz˦HÍûúÚ‰†ÁÔ˜DŒ‹$ÑûÜx"âH'B!…¤T„â(¾ìPHJI'þüâÄ9'���ÀÞ#ø���@ð���*€à���T�Á���¨�‚?���P��� þ���@ü��€ ø���@ðöÙÈ“æAC:ƒqôÀ ë6¥vp ‡ÒòÎeW�€’"ø°\É…wOêÇž\\_H¿}(‡=N¢Å��ÀY�–·â5ëRï ä:zä¦&žÜënïý��Àfþ�f®Ò©l/ø_K¯yk«'��`3 4&2zÒjÔä h_o&m£!Ã~Ï_v[š­{ÒÐÇ›žŒ¢W¦»Œ^sµñ7ó÷äùàOÒõùÁAM³° Ð ùwý%㡜vL›ÿù­oe0ºÒW,…þÙûÝoDü�`Wþ@YŒÏ¤Ó¨GAüRÎ{Ç~ØþLzÃ_äzБzžoɱ÷Æ?EÈ6{Mà'ÞNû'Ãñ/A{þšÈçjü?È s$µæ‰œ'2J[OL]øó™¶}��lŒà”EPã~[Zý÷Ö|]šÞÛ`6 òëГ|M8? úsï™ êÉÏäŸr\öÛþÉ‚ýØ��Jƒà”Å$E§¦#êL&2t¥Õø«]ÿÔ¿™8!YŠà�@iüÒðÃþù‰4kQ›øZSºg£i³ž]ÿ°yPM{çÓÏ>6;!YŠà�@iü²˜œKïÐtÄM2MlÖ þÉטyÚSÞó²/-ÿÄ£ÖêË¥ÎOÞˆw|Ë? 9–Þ¹ÿHìªDðŠå¢à_k}'?½èÉ‹‹:�€\ü²0!;è€k¦°#îOý¯$쨫Ójá?¬ÍŸ½æËNËš¿+ϼ/cóÞ_ž%Fõ‰® ŒÏÅkF™ŽÁ«¤~vÖNÉÍÞkî� �Àü²¿–“îw‰št Îwרå��HGðJáö>“Zó‰œMÇÈÇõo·¾ †Ò��¸ ‚?P“Ñ@¼é²t:”V¯¿ YÍXFô¼´iÅQwn"j¿Ÿþ÷ušu"��»Gð���*€à���T�Á���¨�‚?���P��� þ���@ü��€ ø���@ð���*€à_aÉ;­&³çíÿ§ÍÛSrYrÞž’Ë’óö”\–œ·§ä²ä¼=%—Ùóöÿ³æíÿgÍÛÿÏš·ÿŸ6oOÉeÉy{J.KÎÛSrYrÞž’ËìyûÿYóöÿ³æíÿgÍÛÿÏš·ÿŸ6oOÉeÉy{J.KÎÛSrYrÞž’ËìyûÿYóöÿ³æíÿgÍÛÿO›·§ä²ä¼=%—%çí)¹,9oOÉeÉy{J.³çíÿgÍÛÿÏš·ÿŸ5oÿ?mÞž’Ë’óö”\–œ·§ä²ä¼=%—Ùóöÿ³æíÿgÍÛÿÏš·ÿŸ5oÿ?mÞž’Ë’óö”\–œ·§ä²ä¼=%—Ùóöÿ³æíÿgÍÛÿÏš·ÿŸ6oOÉeÉy{J.KÎÛSrYrÞž’Ë’óöd/ËK~ïŒÒËsÅ��@¹ü*Œà��P.Ôø���@ðG.¨ñ��(‚?rAð��¨’���PÔø#Ôø��” Á¹ ø��” Á¹ ø��TÉ���( jü‘ jü��Ê…à\ü��ªƒäWa��€r¡Æ���¨�‚?rA?��@¹ü‘ ‚?��@uü���€’ Æ¹ Æ�� \þÈÁ€ËtÆäÞ`¹<·¶À c ÀeìÃÜC™»Å�p!Ò=”-Ïí„-°ÂØpû0÷Pf@6‚?rÁ€Ë؇¹‡2v‹-°ÂØpû0÷Pf@¶<·¶@8K7 &¦¢'”åáÊ È–çvÂXa®ï€9€ h¬såBy¸‡2²å¹°V˜ë;` (ë\¹Pî¡Ì€Ýb „³8€ h¬såBy¸‡2²å¹°V˜ë;` (ë\¹Pî¡Ì€lyn'læú˜ŠÆ:W.”‡{(3 [žÛ [`…¹¾æ�‚¢±Î•Ëêå1–A§<áÔ|&ñî¦/;¸%ÍŽ'ƒÑUøv#Oš©Ï;Z³#Þ`$}Þõ@:õôç…S]šÞÛà-Ó]ûÊþLGÒ|ˆ–ù’Ÿ£éÉ(Z4 Äë4¥6]~(­^_†ãà“ùފ׬Ï^›ô¹œ}߹ϑœ²¾ÇŒ>Àryn'lpu®\V/ þÇÒî_„<Ì ?Dƒ¥“Ñ©´º2¸öÿ?ìÉa,È^Êð´+Íšp{24¹yr.½Ãš¶'2~/æ-ÿs}&½á/að?z(ý @Gá¹Þ þŽÈ•Œúå¨3ð—d»t¤î߃†y?ã½ô[GÒê¿æýÏq~âÞš4Z^ô­Ï{ý/2ì}æÞ»â¢O1Éà¤% ý[µcé_†«Ë¾´jÉï¿÷à‰´þÀÖü‘ ×wÀ@P4Ö¹rY½<üýãk™Ðžþ±åÁ²d¸5W ¬€ljÌ­Zvôèõ~ˆþñǨö.øûbË—»tåèþýà¤Ö<‘óiͽ~¶æì»ŒÏ¤ÓðOHì“”Èä“c}ý±'Á2S“o/¥a¾†û}‚+«×î§a²å¹°V˜ë;` (ë\¹l\sÁß2üM º˜UJð¿–žÖª×î‰wa×Ê«”࿆ëÁ×r×û«\x÷¤vP“FçÌüÊþ¹ì·ƒå‡½ó” ½:pÛÿÝ¢+ ƒ¿J>×—üõdâ^wµ«ŠmØ-¶À #øëa+—ü‚¿¶[OLµ¶ô/í(½¨üm«ÙmÁ_÷?èùç–{oô´Ä þæÊÄ‚ï6·|Yð7Í€¬ï³ ÏB}ÅæJJŸ`¹<·¶À s}ÌEc+—Ëc­ÿKö{ÒÒæ3±šüd¿¶£ïK¯uè.ÊmÛ þ¾ÉñŽõÊ‚¶Á¿(8ø/¯ñúô©¼|ù2š›Ç6dËs;a ¬0×wÀ@P4Ö¹rÙ¸<Ö þÊ4¡±k·ÓÛø‡`Rþƒ¿/è¬'#¶tZŸGߥø¦>I¯^½’O?ý4˜ÒN�؆€lyn'læú˜ŠÆ:W.—ÇýLÓ¸öw1¿Ñ•Á´ph“ν±~ ƒÿ•\x]91'> ýþïܹ#Ãá0z”mØ5¶@8‹ŠÆ:W.›•‡ µémñç‡óÔ&<^ØÔÇGn8Oßø\¼ ©ÝùÖˆÚæÏõX…ëßÉáÜ{êãÚÙ×>‰1ßO‡óü6‹_¿ÃÃy&‡ N*’W®dtöDšGó£)sðàÁƒà€mÈ–çvÂXa®ï€9€ h¬så²~y˜6îZKMÓànj¿­eöÔhɉ¹1WpU å9Át(­“³ÙСj®Sìòæ2q‰NÄÉ+“ é·W/4è›þæo®q¯ZS:Ïÿd=7ã·ñ§¬¾žçÉ'Ÿ|<×¾�`žn'yá(Vay®XEpýó»`2z)Ýà†DþÁ½ÑohÝ̧‚XçÊ…òpËǃ2Ó�s�À¼<÷mì5+Ìõƒ&ýœ#‡4‚ÑI®ƒŽ„õ«ƒu®\(÷h™é €¹ '�?ÿüs´€Ês߯^Îâ Ÿ³e +Šu®\ö¢<Œ?›ÒFÜq—~'Ã>xüø1'�@ÄÞN¶£X…å¹bÁõÏ_v׃ŽÔ þ1¬såBy¸'­Ìô@Çÿ×eœ��ùîÛØkV˜ëͽ>èOG‰×þÕ;gò!ê´WkÞ—ûÁH#Y5‚³Ž~ñ×üo ¾F+ñßÚy1¥#_²CáÒÎþ´á…e§ß åAy¸gY™ià×à¯Ïá�È{Í sý ¹¿ýhØ¿`îkÿàDšf=«Y@l|íe¼&Ó»®wþ¼Ôé·ý k¨Ajüçíï:ç&ÊÃ=«”™} WôŠ�P%yîÛØkV˜ëÍý=è‡ÃìÕZ} ÇÐIÜ(( òYÃçÅ̽ƌßmÕÒÓ,èüçíï:ç&ÊÃ=ë”™9Ð>�Ú€�TEžû6öšæúAsúW2ê?”FížxW"ã3éØ#êl%øG㙦ßtG- þ4õA PîÙ¤ÌôàÑ£Gœ� 2òÜ·±×¬0ך{}п–ž?ÿà–4»/g7Úfð7')¨ñŸ·×뜃(÷ܤÌtÜþ“�`sì5á¬ý=è‡Ípûà¶ùkÿ”×L†=9ôÃZ󉜷忔óÞWr2üE—ú/iKíà¶´úïƒçƒ Y6”‡{¶Qfö �°òÜ·±×¬0ךû{п’ ïžºÍgôι?5÷汕ÂTÛ?ÿš+=‘¦B¾ÿ’Q}Lÿ‚ŠÓßåAy¸g›eƱ¯òÜ·±×¬0ךû{п”ó“ßË‹Xœ‰Œ]9Z§–[GÐ,ÊÃ=”-Ïí„-°Â\ßïë$h‚SkJ÷Lkß#:®û‹pèMì ¡¥\(÷Pf@¶<·¶@8ko “‘ ¼Î¬ ÎAM­žô‡ B¢)Ïü´_·üß%ý=Q”‡{œ*³Éñî=ÙËÊPnyn'ì5+Ìõƒ&}u®\(÷¸Sf:ØÁ±Ôöthb”[žÛ {Í sý ÉAEc+-&÷¦í»”a¿'­Æmi¶îICÿN0 ÁDÆÃï¥3ùPZ'g³¡‘õu§Ý”¢Ð}Þƒƒº4½·Ñk�·q«°|vÀÅqýóÃ=¬såBy¸'2 ï9¢ý–{o¬¾QzóCÿd ÷ZÆæÆˆÚt²sæÏ‡&4jÇaߩɅôÛ‡þ{IgðA_Þë„ì@žû6öšæúA“ƒ>ŠÆ:W.”‡{ò*³ùFÃ×ÚÒ¿4§ï¥ßº=öOâ5ëRkõeÚ{*ºßIøÁ»“ç¾½f…¹~Ðä ¢±Î• åáž¼Êl>ø§ws’»â½ýsÊÐß'a3!‚?v'Ï}{Í sý ¹òçyÒôŸ«ÏŸ›-é½LÛ|Î.§MÚÎóçone&}¯þÐ?\ï´øyÁµÍ‘'ëÆYÉ×û©?ÿ9ñÌ{Äžëøþò,ñ»øŸéoÿ¯ÄcöÔˆޱç™éPZ½?Ê ¸p‚ŽVôâi5jÑsoI³ó½œN¤Ú~6ª;ìÉpzí>²°Lõï÷e86/Øð³. ¯CyPîÉ«ÌæƒxôƒƒÏ¤ÜÜzL÷)×çÒ;ô÷Eöþe¢Õå°w® þØKì5ᬵ ÁÝßÉ[Az2:““–¶é<ZóDÎMXLy®ÿ`ìZÁXûV‡¯Éè¥tƒd·¥Õ<.';†é{=‘Öô1s€J »©íSº+t>ø¨£Øë'£SikÀN†f ÿ·î‰7½9˜}éÛ<1í±¤”ϬÁþ¤v¬3ífñkééïSkJçÔœ]ÉhàïRï@]vŸµ¹MH–“ÿ÷Ϻ͠C^ìòýºŸu ‚f¹PîɧÌ&þî¢íoûñŠŠÉ…'ÇÚt'Ú¿‡ûÅÛQ?�s‡ô[ñ>�5³Œ‚¿¿<ýéòõ «ï�³<÷mì5+ÌõƒæzŸß¾„k3¡¹Õò¨Eϵ5Îñ@Ö8%B~PËž þIÖåç ÇÛODRj¶b…Çz,§ÕjE-ûþ ?sÔaÎ/›ÙI‡ùÓ¼œïu“Á_?ÿ]i=ÿÖjs›”RNæªF쳯óY—#h– åáž<Ê,~¥Öÿþ6>ô¬«Œ‡ÒòΣŠu)C¯îtj´Å›Þ/e¶ˆU Ès߯^³Âò\±Š°Þç_æMÍò4ü%Ÿ«5C¥k7y‰=¸DCÆMk‹")Á>èÎÓô0¼Dìµ2ïiŸÐhMþQüŠÄÖƒ¿Š®˜“޹ßwú}޾þåÿ\rõ!QN㡜v´Æ?1²Ç:Ÿ5ƒëÛ̾¡<ÜC™ÙòÜNØ+ÌõðzŸIð7MF¦á2z®ÿþ³)ÑÖ=ÙÆ\›°<ÿ“Õ¶<kW?›âM[L0]öœ,Q £+ƒà3˜@ë¿— ÜÀëÉ�Gð7WÂfOáÕˆEµöi´¦íkiFCî…—ðM¨ÉrÒ>ÏRîp¼úgÍ¢åAy¸Çõ2ûøñcô? ?yn'ì5á¬õ6Œ ‚ÿô¹z3—ö‚ÿ¿NÛ‰Æk™#ÕøûÁ÷üDî®Sãï v`5ä}-Þ7³æ>ºüh.|çüÍeøÕOdô¤åî¬>ºb0â0+§ Ó–÷Øÿÿ|!ü¡¡j8N§,”‡{\/³O>ùD<Ïã�¹"ø#®ï€×ûüK‚fSŸvSŸÉñŽSšù¨‚Úø¢˜ZëTÞö¿£Þ¹\OOÞú÷nJ¸Í#øß¬©é§å›æšûØå4ë¨7¶ÆgͰÞ:‡M|úé§³2·¦;wîȃ‚éñãÇAøÒÇá×ËLOHuä�yÊs;a¯Ya®ï€×ûü‹Â¼éxjÆ5ƒ¿Ï„Õ¹ç…Á_ƒjWN‚°¹¥àoj¯k¿‘æçÇa5'÷¿’¯‚6óÉä½fð÷CüÁ•ˆEŸÙê7ý-L¸^0:ÏøLº?EµùúæOP«v•(§…'`ë|Öåšù3>kÒà¥ÿÂ-ûRfÉ�Àì5+ÌõðZŸß4ç±Âìl8Ïš4Ú§Ó±ü§Ï]RC=DM³ÿ^­ogcõÝÉÀz%£³'Ò<2ïoš›¬Vë¼Ìtt‹ég7¡;ùŒhy¬6=z,v2 ¿—Yz…ró™­0m‘Ùx(}k|üéð¢ÚÂ3÷Mˆ:E·:ÑsÃ&N͹~>S&öû¦”ÓôjA£%'ƒQô}×û¬Ë4ó÷óÏ?¿sÖôêÕ«à_Ä­=0@Áö­ÌÌ €^©zùòeô(p3yn'ì5+ÌõðÊŸ?ÙךjÍŽ<ŸÞtË ÎÓ)y+S{l='Yãl/[2mÞS:ÿ®×©7aîDÃtŽM9©˜û]ê)7ðJLÁ Bx«ûôå :9«ñPú½(l“vÆõ¦'I±ß>vÒÕìO_—ö9M¨7'`ÑãõϤùÙŸu}ò÷èÑ£ùò²&°ôÿ°D÷˸Ñ>$gûZfœ�`›òÜNØkV˜ë;`ú(ë\þ44ýö·¿ ~ë´ééÓ§Ñ3Ë\ÑÕ¬à¦~ú¹íñãS–œWÁf'¿á‰lr~zòÜüƒ ôªaÐ&jBgn’<ßzMÉ”·Ì¶C×_ ÿ«ž�èIî»wï¢9 ”çvÂQ¬Â\ßïûåÃ:—mÞ£^ÛKk'^ L¿þõ¯ƒßÛž´S¯­¬å693ý†¢~Dæ*–Þ‘»q;~·Xm"¾Ö„v{~5YÓß":‘0WÍUÇè "5þ»·Ê €i®¦ë<„QŽbpV% )MâS9kõö•þæØ >¦Y†z»æ3ÙÉWÃQR9Ë#êS’ÚG(j*˜Ö§&z,¬åŸm×ñùdÇûDç|‚é˜�m”¢V7ëwò¤Õ–çvÂQ¬Â\ßWí�‚Ýc»9­Ùüᇦµ¡úÿ´ÚN»“ï¢Ñr–DzápÓFÑŠ:EðßOÉ�7ë·™]@õä¹p«°<W¬"¸þùáÖ¹Íim¾Öjêo¨µüZÛŸÅ —¸¨ t9Ë#ªñŸ»ï„JÁ+~… =ø›çü]¦'¯z%K×éý¯ÿuð[ØÓ²u}-±L32#9X¯¥ÙÔ‘ß̼?%ׯé²ßÊßþm¢ÿMì$ÖHþr¯“UÃQ¬Âtct™ëŸîa[­ÅÔ{ 5ÚŽ_kòW¥'Ë‚PYË#lão¬mõ¿ îÛ1½çGóDÎÇ“h¨ÛÛÓûˆ„A?º“ôø\¼`Èa Oz2ð?ÂfAÉázÁ¿ÖúN~zÑ“É –�ÛH¿ßÊt~Új{ÿiSÑCi÷/‚õ+ö©Oï†nú’¤ßÁ<¸ë»}¯“覌ówS·-O,§ëB^Øá¬<7 ëÜjÒ:ëæ¡¼åÝ«#uG§[Qg^¥£úxÒÒûZËì|Öè<µæyé=”zp_Š¡œÙµ¯Ížx±y­¥Ýpö÷ÊE?kÕÙmûÓ¦­µ÷×àtOZº>ÕŽ¥w>‹éz‚yÛª…O8“ÃWGFžÜµkìƒЬ;Ò›÷œ]½Âêt=È [`…å¹bÁõÏ÷°Î-§5ô¦yN²³n(÷T½ÌÒÚö§M[9YÖ€~ד‹é »2ˆî[Bð/7]òÂ^³Âò\±Šàúç‡{Xçæ™vËYuó@y¸§êe–UÛoO7>qŽ‚¿ÞÃ|<è7O¬EMvþÕÅ^³ÂtÇâ2×??ÜÃ:7£#“Øu“CòpO•ËL›ÀéIòªÓký§Á_™»š‡ÍÀ>üK-Ï턽f…¹¾æ ¢U}KvÖÕp²NgÝmcàʬ@±àï›\H¿­ÅäËÎïbÁ? (=økçÞßü •çvÂXa®ï€9€ hU]ç4Ükí¾†}mßWgÝu±peV dðWÁ£ÃŽå±!6ƒà_“ÃÞ¹ÌFÿQ::Ïrd?¾0øës»ÒNÿ÷Òÿâ÷)ÀÂÈs;a ¬0×wÀ@P´ª­sðí껬ÝOÃ>À=”Yq‚¡cgz 3¤l,øOÞˆw¬£ÿ4¥{¦½Ô¥ O»Ò¬ßÏ6Î3>64’UÝܿ 癸Š0ÉY·i %Š¢±ÂY@P´*¬s¦²é¬«á¿¨ÎºëbàʬænЦ£p² Òûå(Ü}ã¡ô{­ °ym­Ù•Ó¡‰èÉ÷ŸÂ±ýçoàŸÛ?‹þNya ¬°<W¬"¸þùáž}^çìκúï.:뮋}€{(3 [žÛ [`…¹¾æ�‚¢íã:§ÃošÚý]wÖ]×¾î¶ÑQí¨¹+ïž`¿ ì[`…¹¾æ�‚¢íã:§møõÆ[.Ú×}�Á¨¶<·¶@8‹ŠÆ:W.ûZ ÚòÜNØ+ÌõppPdb*xByìkyüó‡” d Ó?ü£|øçhÁ`²å¹°V˜ë;` (ë\¹Pî¡Ì€Ýb „³8€ h»YçôVû§7ÅÁ û�÷Pf@¶<·¶À s}ÌE+~›ÈøüDšµô[éWû�÷Pf@¶<·¶À s}ÌE»ù:w)C¯»AN0iÎÑÍsjŸKëþ¡ÿø¿”Æýû~è·ž×üOò_ú=i5nK³u/|Ÿ¦Þ’ÿJFƒoýÇÃ[ñ4Zr2ˆî¾9ÉàÄÜ”§&Ö·2Ywát˜~W¸…2²å¹°V˜ë;` (ÚÍÖ¹‰Œ]?€IgðAdüZzÍ[rpØ“ád,ƒN#xÿƒZüöøá/aÿl´—[r콉n«ï¿³Þ‚¿~,½óK‘~Û?q¨é­ó‘ ïžÔ›'r>žøç�§ÒöO»kº}€{(3`·Øá, (ÚÍÖ¹èv÷A ×ÈnnW¼‘Ž×…ÿÄðvðO›ùE†½Ï‚ÏŸüçœý½ô£«�ö´'CDêw[(3 [žÛ [`…¹¾æ�‚¢Ýt kÜoGµõü ÕøëÒMƒôºéûX®Ò©×ä°w>½:°Oöu0»²³?'iûm [žÛ [`…¹¾æ�‚¢Ý|»”óÞ±Ôü÷Ñ÷ª5ŸÈÙ´½ý ƒ¢‰P þþß9öäb“ÿ¾îþ�òÂXa®ï€9€ h7]ç&Þ. rï¥ßº½ øß–Ö陼øú?ËO§mÿÄÁþÑûúŸmv"¡'_ÉÉðCÔ è–4»/e¤á_û´ÿ0uÀAûº øÕ–çvÂgq�AÑnºÎpíQz‚éPZÞßK_kíÍcvØŸIGGë©Ë? „±ð%£³'³€£úœu›ÑUFõqwîª-Ïí„-°Â\ßs�AÑn¶Îé˜üϤûb6O@ƒýQw¯ju‹Â>À=”-Ïí„-°Â\ßs�AÑn´ÎMÎ¥wx{Öä& ãú)­Þk™5ÜÁªØ¸‡2v‹-Îâ�‚¢ÝlÓ›lyÒѱûý÷ ¦FKzý!¡CìÜC™ÙòÜNØ+Ìõ0muîãÇòòåKùôÓO£G°mìÜC™ÙòÜNØ+Ìõ0m•uî矖ÇË'Ÿ|"<Â?òÁ>À=”-Ïí„-°Â\ßs�AÑ–­sð5èkà×à¯'�È×¾îÎ@^Øá, (ZrÓpïy^öïܹ„mâƒbüÝÃ~È–çvÂXa®ï€9€ hf‡òèÑ£`^k÷uÅÛ×}�Á¨¶<·¶À s}ÌEÒš|]ç´³®NZÓOíþníë>€xÈ [`…ülïÞ½›vÖÕuîÕ«WÑìû�÷Pf@¶<·¶@8‹ò¤íõµÝ¾þ§OŸíùYçÊ…òped#ø#®ï€9€`Û4ÜkÈ·;ëÚXçÊ…òpedËs;a ¬0×wÀ@°-Ú|ÇÍ{ҰΕ åáÊ Ø-¶@8‹nB;æþðÃÓκúÿ¬Îº¬såBy¸‡2²å¹°V˜ë;` ؄鬫ëÖò¯ÓY—u®\´<˜Ü›�,—çvÂXa®ï€Ë÷ùÇ2è4¦·Ô©ùLþâÝM_vpKšO£+ÿ½®e´Òóô©éÔÓžg¦º4½·ásºágo´¤×ú}vÌçy+^³ž²ÜLwÅmg�s­ÉO묻.ý\��ä)Ïc G± s=Ä”ïókx>–vÿB&:;ò¤yÐÎ ŒÃ“Ñ©´ºÁÍx&ÞÆù¥ O»Ò¬ù÷°'Ãà V|žÿ£‡Ò·O¦7ý¹’Qÿ¡uþ’e6ÿì“ÑKé6oùåq[Zý÷Ác˾´jɓމŒO¤5}lâ?­-µ¹ÿÁÿ<_Þ8øÛu<x0×Yw]�€Ë8ŠÁYå a~ÈþñµŒ¢Ðž ϱåÁ²d(6µîV^åy“‘üøã( ìsÁß[¾ÈÍ>{x§ÑÄç ®D$?û¼ðµÛ«ÝWÚ|Gƒ¾þeu×Eð�ä-Ïc G± s=Ä”þóÏ…gË\xžÈøü$¨É¯{r à+<o*%øobåÏîžá÷ÒÑÿÚ=ñ.¢æG*%øO.<¹×_}˜þWrá=”nÚß^B›óèÝt×鬻.‚?� oä‚àŸ³Ìðl·g¦Z[ú—Vš_õySEû³4¥óüO2'>Ï‚¾õD³£0ø'Ÿ·ào§‡±Îº:Ÿý��¸Š£X…¹bJÿù3ó]~)Ã~OZZ¼æ|ÕçMYãÿW¹ðîIíà–{oæ›åXão:ëšÚ}­éߤ³îºþ�€¼åy¬á(gíWðW¦£«U+¾êó¦ nê3y#ÞqJ3•C ÷Z»¿­Îºë"ø�òFðG.\1ÿŸÖâ§õ9XüµF¿+'Ã_‚¹…Á_O*¾øC0r‘|»³nµûiþ�€¼ü‘ ‚žtØÊ®4’C\Fæ‡éÔN²^Ø„çàÈÜÂGW|ÞŒƒy´¤À*Vùì59ìûÏTäµÉOM­og÷†ó´Ÿ§®dtöDšGfÈRsó™ô¢Àd$gÝc9ò_ûÿ½{7­ÝßvgÝuü�.ã(g•7„¥Ü «éÉ(XÕÈÛËì©Ñ’“½¹êó,siÓjÛ³¬ùÙÍ2ÓäÇ^¶d ¯TdÝÀkÁ‡ÒÏ�@žò<Öp«0×C ! Ec�äà\üõ°Î�òFðG.þÕ‘>V¾5M›ó`ý­��ÈSžÇŽbp! Ec�äà\¸ba(ë� oä‚ଇu�à2ŽbFðÖÃ:�È[žÇŽbFðÖÃ:�ÈÁ¹ øëa�äà\üõ°Î�\ÆQ Î"„¡h¬s�€¼åy¬á(Va®‡BŠÆ:�ÈÁ¹ øëa�¸Œ£X…üõ°Î�ò–籆£œECÑXç��y#ø#®‡BŠÆ:�ÈÁ¹ øëa�¸Œ£X…üõ°Î�ò–籆£X…üõ°Î�òFðG.þÀzXç��y#ø#`=¬s��—qƒ³a(ë� oyk8ŠU˜ë!††¢±Î�òFðG.þÀzXç��.ã(Va`=¬s�€¼åy¬á(gÂP4Ö9�@ÞþÈ…ë!F??SÑ��yÊóXÃQ¬Â\1„0u�à2Žbp! Ec�ä-Ïc G± s=ÄÂP4Ö9�@ÞþÈÁXë� oä‚ଇu�à2Žbp! Ec�ä-Ïc G± s=ÄÂP4Ö9�@ÞþÈÁXë�ÀeÅ*Œà¬‡u�·<5Åà,BŠÆ:�ÈÁ¹p=ÄÂP4Ö9�@ÞþÈÁXë�ÀeÅà,BŠÆ:�È[žÇŽbæzˆ!„¡h¬s�€¼ü‘ ‚?°Ö9�@ÞþÈÁXë�ÀeÅà,BŠÆ:�È[žÇŽbæzˆ!„¡h¬s�€¼ü‘ ‚?°Ö9�€Ë8ŠUÁXë� oyk8ŠÁY„0u�7‚?rázˆ!„¡h¬s�€¼ü‘ ‚?°Ö9�€Ë8ŠÁY„0u�·<5Å*ÌõCCÑXç��y#ø#`=¬s�€¼ü‘ ‚ÿ¶eÐiŸkáÔ|&ñî¦/;¸%ÍŽ'ƒÑ•ÿ^×2ZéyúÔtêiÏ3S]šÞÛð¹ Ýð³7ZÒëýwQË>»Næó¼¯YOYn¦»â®ƒw, ý\��ä)Ïc G18«|!LÃó±´û2ÑÙ‘'̓†tažŒN¥}Ô•Ÿe'ÞÆù¥ O»Ò¬ù÷°'Ãà V|žÿ£‡Ò·Oêàïˆ\ɨÿPŽ:É2›öÉè¥t›·üò¸-­þûà±Àe_ZµäIÇDƃ'Òš>6ñŸÖ–Ú\Èÿàž/ þ�€Ê!ø#®‡˜ò}~?dÿøZFQhO†çØò`Y2›Zw+¯ò¼ÉH~üqö¹àï‹-_äfŸýzБzòsW"’Ÿ}^øÚòÕî§!ø�òFðG.þ9› Ï–¹ð<‘ñùIP“_;öä"ÀWxÞTJðßÄÊŸÝÿ<Ã北5þµ{â]DÍTJðŸ\xr¯¿ú0ü¯äÂ{(Ý´¿½c�€Ë8ŠUÁ?g™áÙnÏMµ¶ô/­4¿êó¦Š þögiJçùŸd8N|ž}ê‰fGaðO>oö·?~ü(Ãá0øÿ®ég� Oyk8ŠÁY¥a™áÙ® ¿”a¿'­F-^s¾ê󦊬ñÿ«\x÷¤vpK޽7óM‰¶TãÿóÏ?˧Ÿ~L/_¾ Û‚?� oäÂõ³_Á_™Ž®V­øªÏ›*¸©ÏäxÇ)Í|Ô–Ûøkèðà|òÉ'ây^p% h�@ÞþÈÁ?gUþ>­Å?Nës°0øk~WN†¿s ƒ¿žT|ñ‡éG†6û±O�ôŠ@Qþ��—qƒ³ÊÂtØÊ®4’C\Fæ‡éÔN²^Ø„çàÈÜÂGW|ÞŒƒy´¤À*Vùì59ìûÏTäµÉOM­og÷†ó´Ÿ§®dtöDšGfÈRsó™ô¢Àd$gÝc9н6Nÿãǃõ@ÿ-â€àÀ Q%¿Ï §Äñ"¨À±úU5{â%ïåÒôd<9yŸ—ßÊßþío­yJ«lJþE•I˜£¿W^8ŠUXž+VÊûù“;Išî@“;ãÄÔhÉÉ@‡Þ\õy–¹Î´iµíYÖüìf™iòc/[2…W*²nàµÚAœ�è€GåÚX?�¸d:€BÃÜïÅx/ýÖ‘UÁc*bWúÙWvƒÊ©µúr=4OÿÆíVFUOžÇŽbæzˆ!„Á¦mþµéž�hS W¯^EK¶‡u€k®]9º?ºy"çÓØ´¢§«` O7ó¼k7/]©WT™4­@Â*þÈÁûHO�´#p#±ÎpÍõàk¹;…­&ΙÇÁ¿¬þ@ BØê¦—zM{ºS¶O�~øá‡¤¿�Ü„6OÔ&‰E L çQ°éÌÿ²ÊóXÃQ¬Â\1„0¬*9Ц'�¬s�nJ›!ê¾ÄžLE3é~ÊLïÞ½‹^¹™Yð÷M‡`>–ÞùÁ¿¤ò<Öp«°<W¬"¸þùQ<=¸ÉH@¬s�¶A¯Bêþ$kÒ‚­ßdt*m®Ñ–NëóxÈFâIþÚ¹÷7çq«0Ý©¸ÌõÏÝ1#é:¤ÿ®z`e° ÚôP÷'YÓMC¿J½'²YÿF"äÁ?9 ³Ò¾ˆ±¼0øës»ÑÝ×—ÿ˾|‘¸“;BZöyá(Vay®XEpýóc÷’#e Ê:`tߣû“eÓv&Ðû¬üN§z sÿ•DðŸ6jJ÷Ì })ÃÓ®4ë‰;´GÃyÆo$Ý«¥n†ïŒ†óLŒó?½”nó0uØPü‘“<W¬"¸þùQæ@/¿ß¹sgá—uÀ6è>æßý»ìSÒ&ÝÝ\â^)É›lM.¤ß>žoÖ3J¿×Š®„S­Ù•Ó¡­?ã>3þŒí\=H_LŒí¿þ>yá(Vay®XEpýó£œì‘€ôÿvG`Ö9�›Ò&†¦‚A§¿û»¿ pbÒæ‡@^8ŠÁYºƒò¢#o$Gb°®ä v“BÝǘÀ¯“Îyk8ŠUXž+V\ÿüpƒ=¨®sE½ À]ZQ xMí¾V¤í;ôª¢îWtÒf†öFTWžù†äTa®g×??Ü¢ms€ÖZ;N��$é(<º0è•Ã,ú\ý0þÈÁX®søŸ>}:=°g`ÿiÍ½ÖØë~A÷ëT è•m Û‰ýAðRüQ4{ÓÚ9½|¿NÍ€ýaW, XÁ¹p=8üQ´Eë\r$ �ûMOöu Íz¨­Ç¶ü‘ ‚?°ž¬uÎ\î×��ûK›çÐ&."9UÁXϪëíþý1¹ðä^×¾;-¯<ó É©ÂþÀzX瀊¿–^ó–Ô;‡à\üõ°Îev)Ã~OZÛÒlÝ“†¿½4=éã§]iÖ¢e5Zr2É$z•Œ‡rÚiJM—Ô¤ÑúV£«iè^LwÅÿ‘¿<5Å*Ìõãúç‡{Xç€òºt¤ô[r콉‚ýDƃ®4jÇÒ;¿Ôv;ÒoúÏ9’Îàƒ¿üƒ :GRkžÈùx"“Ñ©´5ÿä +ÞSéÔ¨ñÇÞà(gÂP4Ö¹rÑò`roÊSþ~¨G¼¯Y—Z«/~ì]ö¥U;yÒ<¸-­þûháÄ_Ü–šyŒàÈs;á(Vayï€óæúç‡{XçÊ…òpOÞe6üSƒ{x2 Í€ÞÎ(ø‚“º4½·ìDžÛ {Í sý ÉAE+|›¼ïÞLÇ•\x¥k‡” càž¼Ël.øOÎ¥wX“ƒÃž M£þ౺öÎåzؓÃZðÿéâà±Ï¤7ü…àÈs;a¯Ya®49è£hÅ®s—rÞ;–Z½ÿ‰ŒÏO¤YKÔNVû�÷ä[f¦™Ž½èÉò=ÿ±[Òì½–±??ê?”FížxWþKü“ëã[rèP;öäBÏ¢à_k}'?½èÉ } ³<·öšp}m³uîR†^;aÄž‚@ŸmäàPÚý /aèŸ>ÿ_Jãþ}ëyþÔüOò_RG0ñƒÍà[ÿñZø<{“ÉH'­è³X£—8J¿Ü’g™Í:÷êd‡ÿÄ6Øh‹7œ¶øÿŒZ¼–vø5Û…'CíØ;ÿj‡áðÄÈ_žÛ {Í ËsÅ*‚ëŸîY‹F1#ˆ˜áM³ƒ 61jKlj§MÆ~àhD':oÆ0 9ö&ZaéÉq=1‚I­-ýË_‚šÏzbô’X§GǰpedËs;a ¬0×wÀúù™˜ŠžÖs-#ïn¼ƒ¤ΧŽž ú˃Ú¼È/2ì}6÷™ƒÚϳ¿Û:'—Yïïýüp˶ËìåË—òàÁƒh@öšæúA“ƒ>жÉ:֬ߎjå£fvGàiÎwòÜÜ@èFÁ?zMìý#ÁÕ…x'F×±pÏ6ÊìçŸÏóäÓO? & ÿÀ>És߯^³Â\?hrÐGÑ6[çâíõkÍ'rfÚÕMqޤÑúF¼þ@ú7®ñ^c:.ÚL'EÓiq°pÏMÊl8Ê£G‚÷xüøq0ì£<÷mì5+Ìõƒ&}m“u.pAsš0¸G7 2müëåù³oäÅH¯hˆoËéO”¯_¼‘+óüÓ3yñõ–ŸN“#˜DÏÿœ³ =ñøJN†¢f@·¤Ù})# ÿÚç ý‡ù«Ž`àžuËìãÇòÃ?Lk÷µ¦_öYžû6öšæúA“ƒ>жÉ:t¶µGã ¦Ciyç26}ƒ‘DNä´÷;?È›‘}LÇ` ña‡\ŸIGGë©Ë÷³Ãÿ•ŒÎžÌF�JŒêsÖš1ªv`Õ2{÷î]P«¯Ï×ZþW¯^EK�Ü{M8‹ƒ>жþ:§cï?“î‹Ù¨; ðGÝÔ«�Xû�÷d•™¶×¿sçŽ|òÉ'òôéÓ =?P5yîÛØkV˜ëMú(ÚÚë\p‡ÐÛ³¦5SüKi1&ø­^Qßÿù §æ3ùK0âRÊ2mÕñfWGFž4SŸ§Wg:â™+,Q¿Š´ç…S4”ëBf(óühXX#ù9‚û8„&£x¦Ãx0úë\ߟþ­xÍúìµ±IŸûGëjPòs$§¬ï1£ÏOÒp¯!_þ†~:ë¢êÒ¶“m!9UXž+V\ÿüpÏú뜎ØãI'hÎ…¤FKzý!¡ V/ þÇQ*_˜gÍ£‚‘—¢+0a ;ÈZ7Y³GK NêjVØžÈxø}TÖŸIoøKüJ?ÐQxžö÷ï {ÔøK²…ýAtý1ïg¼—~ë(ì'0wx¶oDe}¶ØëÍð¯Öð²öMÞÌÝl˾´jɯMÒžHkƒà¯Íwt(N üÚ¬G›÷�È7ßœ*,Ï«®~¸‡u®\V/?dÿøzvÕ%üc˃eÉpk®Ø÷_ˆjÌ­Zvôèõ~ˆþñǨö.øûbË—»tå(º{ó´ÏG@?[sö]L?”!]M“ÙÈN‹î+¡a>ì_{û†sÒ2³‡âÔŽ»tÖâò<Öpƒ³a(ë\¹l\sÁß2üM º˜UJð7µÓ†SM þk¸|-w½¿w_®iÇìÎYtÕÈþ¹ìëHO‹î× Wnû¿[tEbaðWÉçúR‚¿žLÜëf_µÐ¡7Mg]†â–#ø#®‡Bжïëœ2—:Sn\™Áÿ xïØ4½û²±¨|4<ëœm ÜÑMànE7…³ƒ¿¹2±à»Í-_üM3 ëû,è³P_Ð\)m(N}>€åòÜNØ+Ìõ0mŸ×9 üv¬ í­7.µjü/eØïI+FÕ®ÉOÖøk;ú¾ôZ‡þç2¡Ü¶­àï3÷|Úà_üW«ñ×uHÛîk~»³.ûm`·Ø+Ìõ0­ ëœÖÒjͬ men’QLðW¦ ]»ÞÆ?ì�{ð·ü}A‡d=i´¥Óú<ú.Å7õYDס´«Gì·lyn'læú˜ŠV¥uΜ�h²±¸qyìAð×Ï4í€kó÷]L;�‡6éÜë×°0ø_Ʌוs‚°ûm [žÛ [`…¹¾æ�‚¢UuÓÐoÚiëÿË2 ËfåaBmz[üùá<µ 6õ±ÇÑŸÎÓ7>/hêcw¾5¢¶ùs}V¡Áúwr8÷žú¸vöµObÌ÷³ï̬ßaƒá<“C‡'É« Ñ¢æGJÃ~È–çvÂXa®ï€9€ hU_çìq×õjÀ®O�Ö/ÓÆ]kÉ£iÜMí·µÌž-917æ ® ¤<'˜¥urfݰÍ7×)vµæ2¡D'âäƒÉ…ôÛlj«ôMó7׸W­)粞›ñÛøÓ¢¾Iú\�»Ãgq�AÑXçBÚîßœ�èWw5åáÊ È–çvÂXa®ï€9€ h¬sqÉ‘€Š> <ÜC™ÙòÜNØ+Ìõ0u.~­ù/z$ ½(cãϦ´wÜ¥ß Àî°V˜ë;` (ëÜrÉ¡@µO@ž(÷Pf@¶<·¶@8‹ŠÆ:·ºäH@y <ÜC™ÙþÈ…ë;` (ëÜú4ôë}�ô`Û#Qî¡Ì€lyn'læú˜ŠÆ:·9{$ EwuM£}¡<ÜC™»Ågq�AÑXçnîÝ»w+¤W ôyz¢†òpedËs;a ¬0×wÀ@P4Ö¹íIš66Òå:¥u¦<ÜC™ÙòÜNØ+Ìõ0unû’#™� úú{›I—ëÕåáÊ È–çvÂXa®ï€9€ h¬sùÑ€~øa:ÐçŸüÞö¤„íÎÁ”‡{(3`·Øá, (ë\1þîïþ.ø­Ó¦GEÏ¢<\D™ÙòÜNØ+Ìõ0u®¦íÿ¢ÉtöÕÿÃ-”-Ïí„-°Â\ßs�AÑXçò§~õwΚL�¸…2v‹-°Â\ßs�AÑXçò§ãöëïœ5ig_ýn¡Ì€lyn'lpu._Úq×zÌH?iÓª'Lå›�,—çvÂXa®ï€9€ h¬såBy¸‡2²å¹°V˜ë;` (ë\¹Pî¡Ì€Ýb „³8€ h¬såBy¸‡2²å¹°V˜ë;` ®Ò©›vµ é ÆÑlŠu®\(÷Pf@¶<·¶À s}Ì$ÁëXçÊ…òpedËs;a ¬0×wÀ@2ü·Žu®\(÷PfÀn±ÂY@2üóùÇÈ` Ó—üp-À¦XçÊ…òpedËs;a ¬0×wÀ@P4Ö¹r¡<ÜC™ÙòÜNØ+Ìõ0u®\(÷PfÀn±VÁXë\¹Pî¡Ì€lyn'lpu®\(÷Pf@6‚?ráú˜ŠÆ:W.”‡{(3 [žÛ [`…¹¾æ�’á<·Žu®\(y“ OîuRÖ1¼(3`·Øá, þ[Ç:W.”GÂøµôš·¤Þ!ø.Ës;a ¬0×wÀ@2ü·Žu®\Ê[¿—ŽÂÃíïPZÞ¹„[`ʲ“3Mt“íH=xì®x£ë¹yÿ…ÒﵤÑüƒ ΞH³¦ËŽümûÃ4ô‡ïi½¦dÊ[f@yä¹°V˜ë;` ¸×ֱΕKYËC›Û×nɱ÷ÆùdÐ9’ƒzGº ŽÏ¤Ó¸-ÍÞkÿDàJFý‡Ò8¨I£sæÏOä²ß–Ú4´Ûócö> ¾óôDbòF¼c?ì7=éŽNö©ñÜ–çvÂXa®ï€9€ h¬såRÎòø% è‡=N¢‡¦®eäÝ•ƒZ[ú—fá{é·nO kùgµõñù±ј}3oN*þ�2°ÂY@P4Ö¹r)gy$ù-ÔÑÉ@î þ�òÜNØ+Ìõ0u®\ÊYQ¬V߈–|&½á/ñÇ¢+éÁß<ŸàTAžÛ [`…¹¾æ�‚¢±Î•KYË#lã_“Fû4è´¶ÕÿFNüð.;ZóDÎÇ™ŒN¥Ý¸õ0Aÿ¶´úïý\.^ë0øžáÿ6 š6#Šš %‚­õüô¢'/.®ôI¥Â6ì[`…¹¾æ�‚¢±Î•KyËãJFÓQwtºuæU:ª'­F-Zføã³Fç©5ŸÈKï¡Ô-9 åLk÷ƒ×øS³'^l^¯D‰c¯\ô³X.Ïí„-Îâ�‚¢±Î• åáÊ ÈFðG.\ßs�É]ö×߉qü·ƒu®\(÷Pf@¶<·¶À s}Ì$ÁëXçÊ…òpeì[ œÅ$ÁëXçÊ…òpedËs;a ¬0×wÀ@2pçÞ­c+ÊÃ=”-Ïí„-°Â\ßs�AÑXçÊ…òpedËs;a ¬0×wÀ@P4Ö¹r¡<ÜC™ÙòÜNØá, (ë\¹ìMyT¨?Û-Ïí„-°Â\ßs�AÑXçÊeoʃàÀ’çvÂXa®ï€9€ h¬så²7åAðP¶À s}ÌEc+—½) ÀÅ6dËs;a ¬0×wÀ@P4Ö¹r¡<ÜC™ÙòÜNØ+Ìõ0u®\(÷Pf@¶<·¶À s}ÌEc+ÊÃ=”°[lpu®\(÷Pf@¶<·¶À s}ÌEc+ÊÃ=”-Ïí„-°Â\ßs�AÑXçÊ…òpedËs;a ¬0×wÀ@P4Ö¹rÙ›ò`�–<·¶@8‹ŠÆ:W.{S�–<·¶À s}ÌEc+—½)‚?�KžÛ [`…¹¾æ�‚¢±Î•ËÞ”wîP¶À #øëa+ÊÃ=”-Ïí„-°Â\ßs�AÑXçÊ…òpedËs;a ¬0×wÀ@P4Ö¹r¡<ÜC™ÙòÜNØ+Ìõ0u®\(÷PfÀn±ÂY@P4Ö¹r¡<ÜC™ÙòÜNØ+Ìõ0u®\ö¦<΀%Ïí„-°Â\ßs�AÑXçÊeoʃàÀ’çvÂXa®ï€9€ h¬så²7åAð`És;a „³8€ h¬så²7åÁ ¼�XþÈ…ë;` (ë\¹Pî¡Ì€lyn'læú˜ŠÆ:W.”‡{(3`·Ø+Œà¬‡u®\(÷Pf@¶<·¶À s}ÌEc+ÊÃ=”-Ïí„-°Â\ßs�AÑXçÊ…òpedËs;a ¬0×wÀ@P4Ö¹rÑò`ro°;lpu�·<5Å*ÌõCCÑXç��y#ø#`=¬s�€¼ü‘ ‚?°Ö9�@Þþ@ BŠÆ:�ÈÁ¹p=ÄÂP4Ö9�@ÞþÈÁXë�ÀeÅ*Œà¬‡u�·<5Å*l‚?SÑ��yÊóXÃQ¬Â1���åBðG.þ���ÕAò���J‚ä‚��€r!ø#��€ê ùUÁ�� \¨ñ���*€à\Pã��P.ä‚à��P$¿ #ø��” 5þÈÁ�� \þÈÁ�� \þÈÁ�� :H~���@IPã\Pã��P.ä‚à��P$¿ #ø��” 5þ���@ü‘ jü��Ê…à\ü��ªƒä���”5þÈ5þ���åBðG.þ���åBðG.tÅ2+—ùÖ¼ýÿ¬yûÿYóöÿÓæí)¹,9oOÉeÉy{J.KÎÛSr™=oÿ?kÞþÖ¼ýÿ¬yûÿióöôòåËØü²ç&—%çí)¹,9oOÉeÉy{J.³çíÿgÍÛÿÏš·ÿŸ5oÿ?mÞž’Ë’óö”\–œ·§ä²ä¼=%—Ùóöÿ³æíÿgÍÛÿÏš·ÿŸ5oÿ?mÞž’Ë’óö”\–œ·§ä²ä¼=%—Ùóöÿ³æíÿgÍÛÿÏš·ÿŸ6oOÉeÉy{J.KÎÛSrYrÞž’Ë’óö”\fÏÛÿÏš·ÿŸ5oÿ?kÞþÚ¼=%—%çí)¹,9oOÉeÉy{J.³çíÿgÍÛÿÏš·ÿŸ5oÿ?kÞþÚ¼=%—%çí)¹,9oOyÊ÷Ý”Öp8Œíh<x ?üðƒüüóÏÑ3��À>!øöé§ŸÆÂ¿™îܹ#OŸ>•wïÞEÏ��®#ø¦á>-øÛÓ'Ÿ|\ ���n#ø¦5úiaßž4øÓü��÷üŠ[ÔÜG' ý4÷�`?üŠÓf<i¡ÿöíÛ„~��öÁ¨8mÆ“ ýÿê_ý+ù›¿ùùøñcô,��à:‚?€`úMóžÇþ�Ø�Ó›x%Ûôþ�Ø�A°_ԑׄFö�Àm�eµúþá��·ü¬„ð�€Ûþ�V¦}ÿ��¸‰à`-„��ÜDð°6Â?��î!ø؈ ÿú/��(?‚?€iè×ñÿ ÿ��”ÁÀ¼zõŠš��@ðpcÚÖŸð�@¹ülá�€r#øØþøá‡è��P�[e¿Þé��”ÁÀÖþ�(‚?€\|üøQîܹCø� $þ�rCø� <þ�rEøGù\ʰߓVãžx£ëè±%ÆCé÷ZÒ¨wd`=}2z)Ýæ­à&v¶xÃËhÉ"W2:{"Íšÿüƒš4ZÏä¿ôŽåÀ¼ï‚¿³™kywgï´Õ¿À�¹3áÿÁƒÁÿ]š {r¨aýàî Á,ƒN# ÷vHž¼ï¸!ÇÞ¹J»Q—ÃÞ¹L¢Åi&ž×ý“‹±Œú¥qð™ô†¿DK‘aï³ù¿“‹ß ÀÞ#ø(„ ÿ:þ±k׃ŽÔW þ* ÊvHyÒ<hHg0ŽÈ’QHù;¹)òo( ‚?€Âhàôèá;wÓà¾~à¿JÐ&øÈÁ@á´½?á»d‚ÿóÁŸ¢vú5itÎü8™Œä¬Û”ZÐ~ÿž´ô9AHŽjBÑ”žßŠ×¬Ç^Sï äz®ý|ŸŒÎä¤u½îPZ'g2ZÖžÈHkÿð;EËì=‚?€ üc—Âàï‡ýö©¤¯ä»çbsàƒÀ¤Ö|"g£+?/kþZ,$ß¼Æ?š×ž|ÌÌGýš½×þ’«¨_Àmiõßë“—H{ïìï`ÿüìŒ ÿ?ÿüsôPŒdSŸØüe_Z5;`Ï×Äß<ø«äcñùY'äø\-^¿Lâ½WøN�öÁÀNiø×»üêÝ~¢, þó¡~>$üÿaü³Ž´÷Zþ�ì?‚?€#ü£hvÐO·5í»¯ñÿÆ­`ÈÐUšõÇÅßk•ï`ÿü”ÂË—/ ÿ(ÈD.ûm©MkÓó“séÖ¦7åš¶‡×¦6‡=NÌóWioo¼—~ë¶ÔÚÒ¿41>zl¾Ï1Ÿ£Ö”îÙÈÿ”Ÿ+í“å÷ %Þ;ó;…¯°ßþ�Jƒð"„5é¦Íü]yæ}›jý­»òÖš]ù¦ÕF«'ýáÏó£ú4=Eï.9ªO]šÞOa»y¬Þ’Ηö|TSoßxåQ}¢Úü%ïÿNYw°/þ�J…ð�@>þ�JÇ„ý��lÁ@)iè×& „”]¼éPÊ”ÙhM×éÔSþÎtšuZ�Á@i½zõŠš��¶„à Ô´­?á�€›#ø(=Â?��7Gðàþøá‡è��°‚?���P��� þ���@ü��€ øpÔ¥ û=i5¥3G�€Eþ�œ4»[jƒàÒúøñ##Q( ‚?�g…áµà?¹ðä^w ×Ñ<7½ï„AûàÁƒè�Ø-‚?�g­üǯ¥×¼%õÁùûù矃°\‘:ÇGK�`·þ�r%£³'Ò¬i :”û­Ï¥6 þ—2<íFËÂåíþ…L¢ÐoBØÁÁ]ñF?§?7ü#ÀÆ<Ï jùgëÛAð�”Á€#&2t¥QkJ÷l$“É…ôÛ‡~°Š‚ÿõ@:õº4½·þS߈wì‡ýÞ 5ÍËf5þËž l`8Ê;wbŸà lþ�ñ^ú­ÛRkõå2zdqSŸ± : 9¨wd I?ücÏÖ wŸ>}šøÍDç^�eAðà†”ð>ü¯d4øNžwšRÓе4ø/x.°"mËŸlÖ“6éÕ��(‚?�7LÎ¥wX[\ã4ý9’Fëñúé/«ñ_ö\` ê?ýôÓÔÀo&‚?€² øpÄ/2ì}æ©Ciyç2ž¶ñ×põ™ü¾÷…p[Zý÷³vûõ‡òüÙ7òâퟃà_k}'?½èÉóç?wDúÇú´2ð›éÝ»wѳ�`·þ�Ü1ÉY7jšS;–ßs_ê–ôúCOGï©I£u"§½ßùÏ3£õ|AçÈ_vKš½×Ï6óÿã”ûoÿí4ð› �Ê‚=��7¤µúòµÝÿ«W¯bmÿ ,Ø#�pCzÃ.{ØN{´�( öH��Ü€ש|Óè ��”Á�€ i°×f=ŒÜÀ��6ôøñcyôèQ4�åFð�`Z˯µý4çà ‚?��ÐvýÚ¾�\Að�ŸǨµ·ÚtÈ¢#øÜ¹s'š�7ü ¢á_kq ÿXFÇêדDîÈ À5LÎ¥wxKšÞÛè�yÑöÚZ“Kø�ì›íÿëtêñ[”ǧºZÿ«xÍzÊ2ª5¥ã dÜ+ÿZFÞÝôçéíö;ž FWÑŸíH=õyfº+Þè:xîB7úìz»ÿžô‡—æÍ–|vô½üð>ò¤™º<ššžŒôí.ûÒªù£}"½ûÇÒyþDšµè=�ä†ð�ØGÛ þG¥ò(üÖ;22÷•Œúå¨3ð—ü"ÃÞg~¸µùx(§¦Ôü}Ø;— ûû&Þš ¸”ái×¾~0>ìÉÐâõ +GíÓè„ámÎëÁßñM.¤ßöÃò`¬s‹müÙýegÄýÏSkKÿÒ|r_Ø“}"ãÁiM{/ýÖíYÈ7ÆgÒi½ˆó¿sÿ…<~ÿï4ZÒ󾛞øaráɽnô›Bø�ì›íÿÉH~üq…ödxöM—›ñDM¼©u·CpP+ž ÏctÓ×OF¯åÇiN_|ù7úìñÏ3|Ÿ¬šùèµÉà³ãà?~-½æ­Øo T‰ ÿ<`ÈF�€órh㟞§ÒÂó¥œ÷Žý`{K޽7Q�÷Íÿ‰ŒÏO‚öÚ±'V{h>ø¯oÏ>»1÷yR‚ÿ|ÍyJðŸ¼ïÞ“Ùß6M}:/Äk­ÒÔÇÿL^[v³!ôû|J¿×’FísiÝ?ôÏ81‰Bÿì}üï=ü)õ=&£39ié¼>ïPZ'gÑU=oZ¼ p ÿ:þ�.ÛQð7ar6ÕZ}?¶ZµƒO6«™**øÏ>K­Ù‘çý¡áÌ ë¹:Å?›¹Zx^Úß^é ‚6%êú¡ÿH:ƒ³à4‹²þVížx+^1ˆ¾Gø¹¼‡ž¬7¤Ù{í?#lÕ8¸-­þûåË�‡hà×&?„ÿ=0Ž*AR÷ó�°ßv_ãovÂ~ ŒÕœÏÕøk³—ž´µáµÀÿ‹¿úÖÕ‹Bô¶jü×}¾é‰Qò·ŽþÞ:»XðWóïöŰN\¢I_sµdÙF_Ø1Â¿ë¬ ‚?€ *ASut=hÌ:㦶ñŸÈe¿´wŸÅ6õÑ ¼¨ÙÑJ5ô)Áÿ†&£Si7nGM¦>øï4íWðGVúLzÃ_Â,Ë–®"ü»nƒ}!�ì ‚Ì:ŸýJ.¼{ó}ÔÂ௯éÊI„ÿÉÅ ùâd6ÂÑêL‰°f½Ö|"gÓŽÀyÿ”ßÀ·là2þõFNp Á@uåü£šæÔ¶ø)ÃyÚR]ŒÃ×Ìç9‘ñÐ ›ú˜vì6Ó_6×W`-«|v«;hî`V£N¹öð¤Óá?L |t²3­‘MF/¥Û<Þ¨–<øÍÌ¢¿·A𯵾“Ÿ^ôäÅÅÅü{7ÓæWMéžéèGÚ û[ië‰Ë²eÑËWiøçî­.²ƒ¿©Ð±›!úûêÁ·Ñ±FK-9¼• ëyf8»—L²2 �Êi»Á? ŠÓc,¸‡5ò³eö¤7Âú6¦2¾#ž›‚°~34ÛùšiƒðZŸ}¶Ì4ù ¿-Íæ¯­çÍOÁeQÇe3­Î-ñÏb&ÿ¤Äû{éëní÷N„ôÆi½ÿwá{„'+f ä¨>‹—®{úô)áß9Vðÿ ÷‘¹'ÇÝ—³}–îGëÇÒ;¿Ô鷣ʠëø� ­P¹KsF�Îȡƻ¡µéϤû"ѬF¯„u7:‘�íåË—„§DÁ¿öi~nF3̕ݨ‚c:™f¨á•SÓ·KOî¶or•�ŠEðßA³šÛÒ´j®ÂfT_J+v`°m„—˜àÿ+iüª– !Z–h‚9c›<òOî2<1�§ìyðvâsµ7fJë€ë*m—êIǾé–Þé7í>j®iSr¢Í*°¿+fM}ÎÞhóHmÊh*GÌIÁ’ûD}—j÷¿’¯Ž¾Xp_�('jü`KLø×QVö@ft¶Y»}so’Ù¨h:ZÚWÑhlÊŒ.—À�ÊàÒаD`‚ëtÖ«f¬Ëe”¸ \ÿR¼gÖ`ÁðÊÑlf „”%ÂQä>§S/�çüQÃá0¨-elt¸Î¬Ë„ÿ=¥C6O‡f�wüQ*:<⃢9À]ÚÖŸð¿´yPKîrcB�ª^ð¥ßkIc¥±ìM‡Ù_mÐ øR†ýž´‡Ñ0p»²;çãÇòé§ŸÊ?ü=¸‹ð¿GÌ ¹ �‡U,ø[c4¯üƒ;ðj;ÏõGÿ1Äfã?cU4ùÁ>1áßó¼è��v£‚M}fC¹­tS«à.»› ûÞQx ÁòF¼{OV¼ —^†~(]ÇO6hòƒ}bÂÿãÇ£G��(Á?Ë΃¿%w,µ•>¯Þ½÷Dš5÷¯2ÐäûFÿ®Ó„�À®ìgðŸ‹×: ›ôXSØÎ=%ø‡rÚiJ-x^M­oeŒßì‹‚ÿçéF7Çšïìíá÷ÖM³ü×¶O§m?× þW2ê?”†¾Oã yÞûRºƒ‹0ôï­“ž€üÓ‚¿iB¿y®?5ÿûÒó‹Yÿäg>”–wîÿ*åC“ì=¡½sçá¿$Ì>FË�ª`ƒÿ?Øùá¹+ƒ±óƒ0lßh%üÃçך'r>žÈdt*íF-z½ÿŠ øÏ‡ëZ«/—æ½¢±ŸÃÁ|6Ûy­àô'ˆ^;¹~û8z]òó®ñ7­»óšà?¹ïTyŒHýV«^ýØšü`ßþ˃«Š�ªfƒ8ŠMÌgóaPV‰ ûÛÒê¿–jxxWÆè±¹¦>QáZ{îVíÉ ¿~ð¿%ÍÎ÷2ÔŽ©dðËü›QøƒôÙÝš&?ØG„ÿÝÓÎÖZ�P%nÿ „ÛMYL˜·EMfj÷Ä»¸òs³Þa±¾°Æ?5œÛa.ø_ûéïŠ7 “ød4Ï;Q3› ƒ¿ÿéµÃ¦>As#/:Hþ+ÿÍX𷯸ƒ&?ØG&üëDS“bé¾D÷)Úï�ªdOÛø¿–Þ´ û-iv_Zc.ǃt8ì¦ÝÈ<5ŸYTãÔšG'–ô¼?ÉOý¯–×¾¯b2’úXs¢ið_óo¦Õø§\­(;šü`þwC÷%ºO€ªÙÃà†ÛYgÖ¤÷ÒoÝž…_*óØ?I¨KïüÒŸ×öõ‡R;öäB³qü“mü£6òQ¨ºio߯ž+Ýÿo2”ůî]Ói8üŒ±àïÞÓŸþ(_?ÿƒ|µðo¾‚¿ÿ7OÏäÅ×ßÉÅÿ ïEoãowBÖ¦MßÈIÔG ¬4ÑäûH×mmòCø/Æ«W¯èÐ  ²ö0ø›0¬µýÖÔh‹7¼C´yÌÔ¢ÇF²›Ù¨Ä(8–œ FÑÕh¨MóøiOîG¡úí™ðèï5ðÿ#úÛ¦cmÂõròõ3y}ŽØÈAƒnÐ(ì€ü¿þÍ ÈM›já‰ÌëÓiç^Âð%£³'Q!nI³÷Ú?½(?šü`Ÿþóg*4ü@íað÷ÃøÉïå…¶ïŸ ÃóÑ«�ºìËÝ|GÑäûŒðŸ/ö�ªnï‚Ð>¿Ö”•÷i~û‹°)ÏÎ\ÉhàI·ó,6›15v4ùÁ¾2៎§Û¥¿§^åäŠ!€*Û¿«slØ”E›îô¤?ÜeèÇ6ÑäûNÃ?£Îl—Öôëž�Pe{ØÔUÀ%{ìšé;ÃÄÄÄÄ´» ëდhòƒ]+â€óòåËÒÖü»rÀÕ}…þ†z¥p[(“*¯l‹ëンhòƒ]*ê€SÖðïÊW›M=zô(šÛÂÊ„àuð‹Ái4ùÁ®yÀ)cøwá€k*¶=JaeBðÇ:øÅà4šü`WŠ>àhø×¿©ÿ– ܼö „ ”I•×G¶Åõñ‹Áy4ùÁ.ìâ€S¦ð_ö®Žà£Ã¢æ°2©òúȶ¸>~1ìšü h»:à˜Ý]‡ÿ2pµ ϦQ„ ” ÁëàÃ^ ÉжËŽÚ]‡ÿ2pµ@+òBØ@™ü±~1ì šü H»>àì:ü—õ€ûêÕ«àwÙv‡^aeBðÇ:øÅ°Whòƒ¢”ဣáŸà§¿‡V䉰2!øcübØ+4ùAQª~À!l�åÀ¶ˆuð‹aïÐäE ø6€2`[Ä:øÅ°—hòƒ¼ü å2–A§|¶…Só™üÅ»›¾ìà–4;ž FWáÛ<i¦>ï@jÍŽxƒ‘L‚'®òw=ÏMsíÿ)û3Igð!ZæK~ë½&£x¦Ô¦Ë¥ÕëËp~²ù÷¶§š4ZßÈ‹é÷Xö\êÒôÞÏ,ý|UUåï¾)~1ì%šü oU?à6ÊFø±´ûa sÃÑã`édt*í£® ®ýÿ{r ²—2<íJ³æÜÞ MnžœKï°f…퉌‡ßK§yËÿ >“Þðÿ±Õÿn–ëAGêþo{Ðx(}sx/ýÖ‘´úï£yÿsœŸøŸWû}ë³%^?ÿ}¯d4øVZ ÿ»é Oïµÿ-"—}iÕ’!ßïÁiüK‡à¿>~1ì-šü OÂF¹øaöÇ×22¡=Àc˃eÉpkjîïŠ72)ý­xÍú\}ÐÍë×ø»®]9º?8©5Oä|Zs¯Ÿ­9{Ïñ™t4´Û')‘É…'ÇúúcO.bŸ)ù}}æ}¦'1¾ëtê)Ï-1¶E¬ƒ_ {&?È ÁŸ°QjsÜ2„M z"0§ÿñkéi­zížxv­|dÙßÍp=øZîz• ïžÔ´)Nç,ª‰·ƒÿD.ûí`ùaïÜŸKÒ«·ý2²Âü¢àŸö^)Á_O&îu²ÂE‹`[Ä:øÅ°×hòƒ¼ü ¥–üíöëÑTkKÿÒŽÒQðŸ{îm«ÙMƒ¿î~Ð?òÿÎ-9öÞèi‰üÍ•‰E#eùÂàï‡ú ÂÓêË¥>ÿä÷=z‡à_FUþî›âÃÞ£ÉòPõa£ä2ƒ¿„/eØï…mÞc5ùÉmGß—^ëÐÿ L(OØJð÷MÞˆw¬WŽ¥w~Qpð§Æßÿõñ‹¡hòƒm#ø6Jm­à¯L³»v;½Øö@êùN»Û þ¾ c°žŒ4ÚÒi}½gñM}ÊŽmëàC%ÐäÛFð'l”ÚýLãAWþgŠÕà›¿ßèÊ`Ú8´Qç^û*ÇÂà%^WNÌÉD‰°-büb¨ šü`›þ„ò29½-þüð–Ú„Ç‹†·´ÆÑŸÎÓ7>/hêcw¾5–ÿÝå4XÿNçÞS×ξöÉ„ù;:œç·Ñ½ô;l2œçál(RœT$¯&øÏ?{"Í£ùQ„Ê€mëàC¥ÐäÛ’yÀ jÃŽádÓ9Zf«ÍnJô[ùÛ¿ýmâ13%oT¤•šÑxésÏëI´tΤ¯Y,å3ڵñ”É@æEãÄGË-éõ‡³08÷»êëÿë‚N¨:éï÷ÇÙ©’¿}ìyö8>¿¼R¾ßtýʸI•ÿ[Ÿ˜õdîw¶'ÿ·:9K ѹìïfIt"N^I˜\H¿}œ¸Š Aßô70sxé ËžYë{Ö ¼ÊÛÁW?[UUù»oŠ_ •B“lËj3:IZ ¨.ûܺydÖ¸)‘iî0í”è[ÿFEædDÿNTã;7²Kº•¾ÿ´)EÊ{ê²Ã»Ò;7ŸþRÎ{Çþ Þ¼óèsšKù¿IûÔ šQ;îØûþ"ÃÞgþç²Æ¡ŸŒdpÒ ›ŠD§¿”ÿõÛR›Lÿïxíàyöï¹aeBðÇ:øÅP9‹šüèÉÀ£G¢9`¹•8AÀNůí¯fÁuÝ›Eµæ±ZȬ¶Ìs7*Š7ŸÛx§¼>Åjß?zÏ´1ßýߥÝ6!Û?ñˆšnÌwØ4M=ìß0ª]ŽÕ ›[ûTʼ·þ­ß6¸ê{½éš|ý<ÂÊ„àuð‹¡’ì&?z ÿ×È;w‚ÇPMz5H×Ç'‚z’¸Èêœ(P&ýäâ…´»¦=sÊè"1)#•¬üÓÞ¿àï[ÐfúÂûJº¦-yÚ÷³EW7f¿á:Á_Í¿?Á¿@±¦]iSöoŽÅô7¬ª*÷Mñ‹¡’L“ŸÿðþCPûo„P]zBh¯ fJ;ÐÇW6Á±›ûh³”/¬kÚGÛAÜ–²|­ào>Cr¼òÚ´ƒætèÄEwdMXýûGMpìf9ÚiôîÉìDÈÃX·Ì-_7ø›f@³2û9˜Ž¬W2ê? ›úÄî\›n²òVåõ‘mq}üb¨$­å×0§;ä„êzõêUê:±hZY4:Ê4T&ƒï΂üûÔš]9ÝJçÞ¸ðoÏšêL†'r×¾°³àoíìùýtîEÕTy}d[\¿*Gkm“µüö´¬yö›^ J['’“Öþë¿«3íÔµ©Éÿ–ËþrkúR†¦>ëYëû›»°Muô»ÜM4é)CSŸÕ­Wö@¾ª¼>²-®_ •a·å_6ü«KבÏ?ÿ<u½0ÓË—/ƒçêÿ×…×Zë[y>|}&Ü®zS¢u‚ÿÂü§'·¥õü[i͇>;1™~{{íßà}Qåõ‘mq}üb¨ŒwïÞ­üê³:´†_›÷hÛ~íó¡å¿,ø›Ð¯t~=fhOÿ½}C³‘mV¹)ÑìDbÕá<ÓnT”6ÌèjÖþþÓ‘…]Õ0¿=Fü‡óŒý~щƊC—&ew-·pŒùÙ‰Y8V}ìDm!ÿ{÷{~¹f4ýŠÖÍN`âM›–5)k¦/¥ßóKûo'š+ž<¦½ÞfšsEŸ1ûwZñ7Ð÷½¶,­Œ¢“Ç•NÓ^·ÚonYû7és«ªÊß}Süb¨ z&ä¥MžçEÏÄ>Ò@-c{$' þæJ.O®Ú4L·éãëJ¶uŸ7 ³¿¿ÊM‰–ÝÀ+y£¢d Y=`Øôuë1|—u6WO¢ÏwÓxÕü ûüOÖï—Œ«W‹¾n)sÇ[ÿy›ü¶³òYÐýïrƒ¬Éè¥t£ ÕšOäÌ>Yô…ï½nð7'UþgZ)'Y¿ùÒàŸÞLm<ü“<×›Ú¥¾6zïuƒÿ Ë(ü¼á:´<ø'¯@Ù'ãþë훦Ñ{ü³Uù»oŠ_ •¤5½þÒÚú3–ÿ~Ñæ;ZS¯åªå­'}ÚF_O�u=Hc¯i¡_é²*«ò÷_黯Þ’²zJð®ªÜŽnÔ^AIŽR´YðW;Ó =-ø[;ýµuÃ2Êz}jð¿ìKû8:!¿–žž¤%O†×ü\l‹X¿*MC¡é¨i&3¾?Ü”l¾£Á]C¿6áÒò^…>_×½°è5U?àTùû¯ôÝo*×þ)Í—Ršs9üË^»Âû–&øk}#'Vÿžùæy¾5?Û"ÖÁ/ø´™‡ÞSÃ"Ü’Ö|Gç7í¨­Wô=]PU?à62ÄÂ[²=¸™ÿ4ŸÿYκM©ùïiwìŽt»ySp£° þQ¿û± 9K=Ö§b{Á?ÙÁÌß“çƒ?EÍìÎÚöëãÍÕ‚ß$ø½vü“ýÌ|ó28{"Mí|?½÷ƒ/öú°GøÂßw>ø§Ê61šUòseXi}ÜSUþî›â,ø´†å¶Ióuè{d½OÕ8„ vx‹þ¯¯ æ­öå¶xÃËhä¦Yðô‹ ƒó±iˆÂn,ø§užl[Á?|ŸYÈ5÷‰Â~Ë?éÿÆd‚¯õúC9íÜ“ãîËY‡íà7ÚeðÞG¿Cð^V¿ígãËØ Kk~÷éëÏäƒvÂ?¾'ݳY{ýìà^¥©'oû\ÙVZ×4½¡Ÿö šŽÅe-W«<ç¦òøîûŽ_  wˆL®MÎуí½'±÷&Íw¶ÍÉßr‹ªüýWúîÉð–:oÝÄò04Þ’Ï›¿‘zóDÎcC¼F!u‡Á_%ß+tãË£××~#ÍÏóA0ù{ÄÌÿí™eË|ú¾+7õI¾W4?ýË£××>oÊçõcéÇo~—ü=æhŸŒÃßÍwvŸû\Ëm[L 0÷Ûf-W«<çæô½±~1lŒ Î=î•Ù¥œ÷ŽŒæ±[U_ÿ«üýWúîÉð–:ŸüëÒh谥ɑ’T…M}ìá]Ã÷ŒŸš ëqú¾yÿ_IãWÖ]¬äï3ÿ·g–-óéûæü ù•’–­+ù{Äiçëßù¿MÔlÈ6÷¹–Ëc[¤Æñ‹aclpîÉ·Ìfí˜kÍûr?ØáëAïÊ<‹ÞÿûñqÚ•«=ªšo…þà5:- »Qõõ¿Êß¥ïž o©óYÁßÍg¯ƒæ%µX­2ªèFgVçÞ°ùÕ&Ý— ëqú¾9ÿõgo´YS" &˜ù¿=³l™Oß7çà_ï¼”7Áo¯õOþ3ºoûB¾°ï«a›û\˱-bübØœ{r-³è`¥#V›bðJFý‡áMª‚Nþɂ޴Ê0'Òoëö&¬dÔw¨êë•¿ÿJß=yƒµh~æ‚y«6>¶<¡' Íaûÿ”޲±àï³·µh[ÚÞpžÉ›¦Å?ãlÞtTM.^lËænÌÉŽ²ÿdÅ>£5?½á^b¹]f¦ýÿ\ídð×}àï¥k‡~Ö³ý‡ÙMýþ+«ú~xübØœ{r/³¹VÔÎ3v‡T;@üSÐ9Ö<!v0&ø—ac ë$X§ú—ùrá¼vŸ=³ž_—ÏšŸùÑÌûÁÙëY7-Ó ©ÍDR‚¿%ÇC/º9”v²5w€žÙ,øGÛ¡ù þöøç?ëû˜ÏÔ/;-kþ®<ó¾´æ-ͦ¿Í›ùú—â=³Úë÷XüíÑrtJé ƒ²Œ:}ùsì;¶¤ó¥5ßì‰g/ÿ¬)ÍØëŸÉ³éç ¿Ç|ðO^Å4SânÖsûÑåô=ªªÊß}SübØœ{r/³¹VÚAÙtúòˆoÿœr€‹ôA¨!ø—ac—¢íb.øgÛ¼Æ?g ƒ– ƒÒküW@ð_YÕ÷ÛàÃÆØàÜ“{™Í°Ìxö8ÕÑczùü:Öpz)Ý{œà_V„]"øÏüÙ±~1lŒ Î=y”Yì&Y±vÊ¡°}òÁ´sb8ÒÃíh ÓÖ×tô‹ú�LG1‰êµ¶œþôGùúE|ÔŒ]ªúúOØØ¥h»ð?G0­pb†PÓ´¤¬Áß|¾UBÁ΃¿ùN‹~sËÚ¿AHŸ[UUþî›âÃÆØàܳ2Óqóuü|ûæY…-»Ý±.‹n†,S—2ôÚÒˆ^gnhŠ:ÿúÇG5Ù½mü–.«ò÷/â»ë êtÛÒmmè÷Ñ;kï‹§OŸS°-bübØœ{6)3½ƒ­ÞWAÄÜ<K仺yVT}ý'läÃ~ôÿûàÝ»wÁo»:è8Ý÷é¾° eĶˆuð‹aclpîYµÌô�­µYwîÜ ^£5užçp„ª¾þWùûçñÝ÷1ð«2ämÓý¡~·]ŸÐ°-bübØØÊ\¢ Èü¤ºþkbÈ6kª5¥ã ¢>%n›nI³ã͆¯[éï.ëH–FΟyþsØïu%£gݰJ_Û’^8kÞ2ò¬áù“>÷…ù¾*9œ]rZ½ó˜>?ÀLó}ކ þZÓ¯5þ˜·è·¬Š*ÿm~÷} üJ÷ZyP–&1yÐ2Óð¿ËJ¶E¬ƒ_ ƒÓ�~ôPúA ó´#VØ™ó(hnF€±‚ìx(§¦Ôã‡w¤´Ã¶u÷W3BÌÊ7‹éDV“FûÔ ä>íÌZ·Ç¨7ã4ÛíØÍgK¼>½¦™c2:““–ÞÀ*Ù¦ÝÜ 'òu<ï/×þz@ÖÍw6WõN•¿ÿ6¾û>~C¯ê>fßi¥‰îCwUI¶ˆuð‹ac+op“‘üøã( íÉ�î›.7µè‰pkjîí¡ë‚ód½ èÑëWþ»Yô}å~ëskô™ˆ~¶éˆ¦#jâf,Ùè5áh6ʯަaþÈÿñ÷Ùxh¸ˆ^ŽÖ2³›ïè‹æ;›©ú§Êßÿ&ß½ _ià×}MU®îòû²-bübØØf\J�ŸJ þ¦Ý̾¹àï‡îó“ Æ?y‹úв¿›Eƒÿâ]ü5¼%{ò6óÓàÝ‘66f½%êr6fý¢àï›{nZðד‰‡Ò]0D\²ùŽ üÚ|7WõN•¿ÿ&ß½*_íº|W´2E÷·Ec[Ä:øÅ°±Í6¸U‚¿¶[OµVß?°,j#_³›Ýضü5pϤ£ÃRšqæíào®L,úsË—Ó Èú>ñ1¡Í4:­ùŽþ_3Íwô5ØŽªÿ–Uþþë|÷*~¥ »nó¾+ºÖ –¢›7±-bübØØfÜ*ÁߪÕ¥ßk…ã¸Û5ùs5þ—2ì÷±â§7²m)øûb7¤úàŸüã5þý¿ÿù›ÿó?­Ü|‡äöTý·¬ò÷_å»W-ð+Ýïhè¯òUÅ]ŒbĶˆuð‹ac›mpkÿ€iBcÝù0µ¿é�›vÇÃíÓ1XÛò7¾üJZ;kê¶Û×a6W=в“Üý-™˜˜˜˜v;a=übØØfÜ>e:àú;žé{š¿ïŸtÎüWÙ6éÜï×°°sïäx_üaz‚° ;I U¬á7vÕÄ¥Ìt¨j“'”)�Û,DF¡6µ-~ÊpžÚ„ÇkM}ìqôç‡óœÈxè…M}ìηSËþn ÖÇŸÏ¿gðø­ÄÉ„ í‡Ò:9‹†îÜd8ÏäСæ¤"q5a2’³î±Í"”ŽàlW•¿¡Zµ™!âªÚÉåF ÀÆÖ‘¦»†ø`²ƒ{Tû=]fO~n}ݘË\H{ž?5Zr2H ѹôïfHt"N^I˜ŒN¥}äŸÄ*á­þæµkÜÀ«ÖìÈsû¹K¬+!ôù�nN›×U=ð+s‡oÂmº]ó ¤!`c„H÷PfÀÍh¿­Ý®zàW¦9 7ý[nWÃ|iHØ!Ò=”°œ¹! mسÑeB ÀÆö!D¦oMi#î8L¿€Õøç™a;ù=V·‹a>4¤�lŒéÊ X ?Ö^ëo¢Ãc=Üç�e@ ÀÆ‘î¡Ì€åüËÑdåftÒðO)ì )�#Dº‡2Òø³™jp3 ó‰]"`c„H÷Pf@: bÈ�`Ÿ‘°1B¤{(3 µ¯�ª€€"ÝC™�P]¤�lŒéÊ �€ê"`c„H÷Pf��T)�#Dº‡2¥ßkIcáM ¯eäÝ•ƒzG×þ¬y¾™OÊZŽMüŸ²/½Öo¤é½Kz+^³.õÎÀ/%ßÒßÞ¼ßáìù¨4R�6Fˆte†Â]¤SO¹+v£%½þPÆÑÓ°Ž0øÙ¿çz¡îö> _»ÒÝɭ秆˱ :%Ë+bäI3*øt(­^_†ãIôÄ%&çÒ;¬ù¯©/ þ¶Œ²±¶?‚?)�Ó ÜB™a7ÞK¿uÛª¡<¯u请¥Õ<£8Wrá=”îÀõSމ\öÛRÛø7ŒÂúJÁ_EÏ_ì³–W„ îæwŒä¬ÛôËé@j­¾\OÊ„õUƒ¿Êøí£ðOð‡"`c„H÷PfØ0˜Ä‚Çe_Zµƒ5‚ç6LüsŽiÖÒq>økžëHýà®x£MâÁ?ÑÕûw5µî«þÖ䈀"ÝC™a72‚ÿx(§°VT×уÆCé®ü'ÍÚ'ך÷å~C›@hÐýß2|+­`^Ÿß’“ÁȶÕ>úùŸ§5­® Æ×Qèþ†N…žtlßJÁ?öÛÖ¤Ñò¢&'&øÿAgO¢ßåÈ?!ú0}]¼ÝxJ¸´j³÷¤Õ¼EðOÿéïK޽7þjèºú½tô7 ÊæPZÞ¹ÿ+ûLðŸ[‡õÕimöçËf2z)Ýà½ý2¿?(_‚?)�ÓÜB™a7¢`bÂËäBúmmꆡ++ÀN.<9®Õä°w.SS꯷µcO.¢Ô<§~,½óËÙ{ÕÚÒÿ_?Eí£5(µÅ^Fï7«= ÃrEjü'oÄ;¾ýv~`t¥1ýîQ™ø³Ý¿IôÜ0°šeþï¸0øðçü²'r柤MF§ÒÖ1‚¢ÿÅ-ivžIß_máziNÂßrúÛ™õ>:Ž­ÃÖ6±0øÏ¤Ó¸-ÍîKM®dÔè—;Á!R�6¦;¸…2ÃnXAÒLµ¦tNS:÷&›%$çíÎŒ±) ´Áó­f‰×W)øO†=9<øLzÃ_¢GlQ™L¯z,˜_üƒ+6vÿ‚äó«jVãöøIk(Z‡{2Œ=I]‡¯Óñß>êû¡'—ћÏ=UF ÀÆæ¼L.L@ñÂ`²4xLF2xñ‡iÓ‡és…œµBS5ƒÿòåÑï¸aðŸÿ“ϯ*»©v$¿—ÒÌ'ù['¤®Ã«ÿ”r˜{>ªŒ€"ÝC™a7Â0²(x„ÍDޤÕó¤ÿÓi<¤, 9µ{â]h?€„ŒTàÿ^ú_ü^Î~ÒÿE£þ$Ãç‚ùÁ?¼š@ÿ¼DÓ„*¶¾F5þv­¼-u^5ø§¼÷ÜóQe¤�lŒéÊ »ç™>œaZ¢ ¶göCÊWgÝïdu¶CK:¦íËÅ×óÞWr¢MZ‚çG}ôɉׇaÙ¬§gòâëïM0\b†óLœÄDnëú[›Ð9í,í»ü“tOô· ËdvådÁü4ÈGó&Pša+M_ ÓÆß/—…WcªÀü.Öo`ÖéY'tóXMíSÏÓòüfÉ:¼xN–M¸}˜ŽÜ¿LÛøkGßé{ ²HØ!Ò=” Õ6P§¹á‰5ÚΡ´N^Hï¾b4¬¾}{í,è\Éh:?™@û[ui>{Ÿ×Ó ã£ÌjQç`'%;&§YMült—pY­y"çãËðdË<¿ÙoÙ|½%/íù¨ÖßzïZ³+ß´~ØìÍud­Œ¹x™«1¦Éýû%ÖaíÜ{-ã¬u86¯ÛD_þ+«ä{ûïûû'Òª¯q1ì5R�6¦;¸…2� ºHØ!Ò=”��ÕE ÀÆ‘î¡Ì��¨.R�6Fˆte�@u‘°1B¤{(3��ª‹€"ÝC™¡(?ÿüsô?�@Y°1Bd’ÙöPº%¾1e†¼iàüøq°®é¿œ�ìλwïä“O>‘W¯^E`=xð@=zÍË‘°1B¤ÍŒE^î;‚RfÈ ¿\ô÷×ÐÿòåËèì«?Ê;w‚íÈB ÀÆÊ"/exÚµnîÞY2}™¹“bt÷P},¸ÕzrÞư/½Öo¤ùüÏÁ1ƒ›±4º2_[7 ЦémïËE?°Mþò!V–9'zX)�+gˆŒîX»'ÞÅÕô.á?ýð>èJÃܱsr!ýö¡ÿ=ޤ3øà¿6ºíù4´[óæ6ìêÍ-êƒ[®Gwõ]:ROÞ>¿dþØyi³š~TM»° R�6VÊôºöÎý˜ŸÞæ¾ÖêËô†ò—}iբǢZþiðOÌ·RŸýp^o™®'T¿Ü´L´¶_k€Q=ú5üëI�†€•2D&ù-ÔCáÉ@î þÀ"þòÓfú(›j3ë'HC ÀÆJ"£&9±Z}Ã4×9ìÉÐ\ˆ]!XüÍó þ¨ ¿†Ã!5½˜âÊ!`cå ‘QÿƒCi÷/¢æ>ï¥ß}æ‡w³ì–4{¯ýX%£þCi˜þ�&è×ÚÒ¿¼–ñГV#jׯ'A³ Ú¬QÔL(üoKëôL^|ý\Ì·5Ú9‚?VEàw‡iÛMÇNØèë4¤�l¬´!r2šº£“é̸”¡×–†YñÇ É©Ëü“ƒîwâ}u(Ö·2xû2¨Ý^sP—æ³gñy½ u$Žÿ½r)m™¡4üå¥5¸É}­ÑýôÓOÅó¼è ¤ëÆ¢Ñô±~ø!šC•°1B¤{(³jYç2?¿Ü´)–ÖìëÿÕ²`(]Gì«A:¯Wt]âj@5‘°1B¤{(³êмÖgµù&ð»AkôµŒÌ¤ANËKƒ?°Œi ößþÛ Ö{=BõPêØ; ÷PfÕajõôvþiünÑrÔ²²§_ýêWk]ÕAu}ÿý÷ò/þÅ¿˜[‡ÌÕ#T)�ÓÜB™Uƒ¶Ý]tp× øôéÓàq¿;ìò´'­Á%üc3¶ÚúCßê!`cºÓ€[(³ý§—õí»NZ[¬áPò�ün1íûM«4éB5i“°´uÆL‹®b‘°1ÝiÀ-”Ù~3íúí»™þÍ¿ù7~G%Û÷§MzBGÙÂfšòeM¨Jc‡áÊl¿-;Ðÿûÿï£gÁ5¦¿Æ¢I˶ÚHÒub•ðϺS-¤�lLwp e¶¿².éëÄÞMií³õ1í«A-?²˜f~‹®êz„ê `cºÃ€[(³ýd†ë³æiíyݓ쳡áM;oÓ¡›Ð޾É¢¶ZHؘî0àÊlÿh�LŽÍ½l¢Öß-f„& kæ&LÀMé•"­é7œHV)�ÓÜB™í òzÕ‰àï û”ò¢_×1F…ªR�6Fˆte�@u‘°1B¤{(3��ª‹€"ÝC™�P]¤�lŒéÊ �€ê"`c„H÷Pf��T)�ÛËy=NÝ }ØÎ`-Ø��ª‹€üÝCð� ºHØÁß=��ª‹€íeˆüçòÿ0Á@§ÿ.ÿøá:Z°þ��T)�#Dº‡2� ºHØ!Ò=”��ÕE ÀÆ‘î¡Ì\s)C¯- ¿Ü´ìmñ†—ÙËÆçâµÃÇjÒhy2OÂeÈÏÈ“¦)ýÝ;g2ë%ôV¼f=Z¦Ó¯¥Ù¼mÍûSÓ“Qðܱ : kÙ]ñþòÌzoÒú %ÿÆÔ;Ù¯‹Ç:†"`cºÁÃ-”™K&rÙoKýØ“ Íìã×ÒkÞ’ƒZ[ú—×K–ýOéû¡ÿØ{ã¿ÃÄ?8‘fí@j­¾ª€BL 8”vÿÂ/#*ÓiY„óµƒÛÒ꿱M†=92exï—­ä‚r^t"·ü=±'Xǰ!R�6Fˆteæ=(Ö;2ˆªÓ®©kÍÜèzɲ± {ŸYµpQÍÞ´¦¹ÓPvtOZÁÉØ±ôÎg§\ZN·­Ò°ÜŒ 6òän¬6uµ²´×ì)Ö1lˆ€"ÝC™¹ìƒ@>’Z¬vÎX²l|&Æíè � ¡¡ì®_ž×ä Ñ•AÔÔŠP†­`ÆHØØ^†ÈéåSì(Fðw×Dðõ{â]\EÌ,^v%Þ½Y“ # e#ÿTk<èý0ÌI¡ [Á:† ‘°1‚¿{þ®úE†½–¿>~ˆæmK–MÎ¥wüõ´&™†2ž|ÕnI³÷Z>ʰ ¬cØ)�#ø»‡àï(?ÀŸtÿ”Þ9wɲÉð™té|W¼X(óM.¤ßÖQ–ŽäËÎïb¡LƒWsÁ¾Fûqü†P†4¬cØ)�ÛËÉ{QF—’îÉyzý…ËtäoädøK4Â$C™ úZÔ‚m06üaÊjrØK–¡–ßr{|I(»ìËÝð}‡²÷Òÿâ÷Óápë6D ÀÆ‘î¡Ì€ü}.g-àñZ"”MÞˆw¬#³4¥{¦-¶Õ¥ O»Òœë· µhæ¤&£—ÒmFC+š¡5¼“‘œu›Ö0pë6E ÀÆ‘î¡Ì\ÕÀ%Ä¡%Ë¢fk±�€œ]ËÈ»lgá”l^q%£þC9J–Éx(ý^kv36ª5»r:½Y›/¨µ-Ÿ›‚q×ÿiîæJñ‰q×ÝÇ:†›!`cº‘Ã-”��ÕE ÀÆ‘î¡Ì��¨.R�6Fˆte�@u‘°±½ ‘Q»hýn ç ��ö )�#ø»‡à�@u‘°1‚¿{þ��T)�ÛËÉ ¼��Àž"`c„H÷Pf��T)�#Dº‡2� ºHØ!Ò=”��ÕE ÀÆ‘î¡Ì��¨.R�6Fˆte�@u‘°1 ‘LîM�� šH���@ü��€ ø���@ð���*€à���T�Á���¨�‚?���P��� þ���@ü��€ ø���@ð���*€à���T�Á���¨�‚?���P��� þ���@ü��€ ø���@ð���*€à���T�Á���¨�‚?���°÷DþÄmFWÖLð����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8t.png��������������������������������������������0000664�0000000�0000000�00000175027�15030617045�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ž��5���Áº¡���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ù¬IDATx^ìýÝ‹#Yžà}úŸ0Wf™ 5s±ø4ÌÆôÀÖ•.ÝxY7Á² «'Á/‚¡˜€Ô ‹„|èH’m-b‹ŠÙbjx&$<±Å5›¬¨í%†Â»T•ÍÄ6Ž É'ˆtôðä޶;pÕoígvŽttd’L2½˜Ì¾ŸÀ—Lf²—#³s~v^N������H@à������‰����� #������$"p�����€DŽ������ˆÀ������8�����@"G������HDà������‰����� #������$"p�����€DŽ������ˆÀ������8�����@"G������HDà������‰����� #������$"p�����€DŽ���€Ò¸—ap!'Õ¶ôïÍ[K½‘ Q•j».™Ö­ ‚–ÔNNää¤"µf ƒÑØÌÃqÏa¯+ÍZ]Úý‘y﬛¾÷á­ôš¤Òì…G5­Möc,£Až³Jø» {µ–ƒôß,Cà���À–Œå¶×’J¥%½Û÷2ì}*µ“‡Ò¼7ó70~-Á£§[ŒoyÔY' V÷ý¶T£À_mç£âŸ‡8øº^àh·=iVH³÷VÆÃÒªU¥Þ½‘@vŽ����lÉHúíÚk|ÜÊu÷\*Û®A2z%ÝÆéš5©Ê%í8pTŠó ¿‰ú΃8{9_(-G���@áØ¦F¤Ñ|7k2 ¤×mJ-U F›¾ô¤Û¬›‚½}ýci<ÿ­\uR‰šÄt¤5E‹kVDÍdÌ4]îki7NÍûui^^Épe)Ú&ë«J#xcæ¥4¾‘^«.[‘ZëRº­ŸKÿ]¬˜nç…Ãð`„ÇæEÛìSÔÄîKéït%“ãPi<–ÇQS ]æïeØÿÒiÔ”Ëþ0$}oÂñŽk†èòui=ÿ…´lÍ›ñPú—áyšÛžÛiTÌö»M’Vîâs§îdxõÔ¬·.›†ŸI D,:?Ìn—îSïfññXpÆÃ+¹ ×m×§•EßéT?}O^*ÁËé¾µzßÉÍd_O¥Ñ}%ñ^zÇÖ݇h¿¦`“É£…çL›5£š@Ñ1Žjá…Ÿ©}"Ï»O¤“èY´¯¤?Ùî³ð{ß…3M³6w›œå’Ó°G���@ÁL›ÊyðÚ|Mm ·`¹Ì}_ÚÕ¸ €Æ×Ò­Û I¬ÐfFç7 “Pãht%íÚ™)€Û‚³»]Ëd©Á7›«žr~Q¤9ëÄë1û6­éò.üžK­õ" hÙ€NE—½›‡èµÙèhß«çÒ½¾Õq`$j¢w¿ø{ghß7usâãrmÏܤڸ”ëÑxº-QS§x^¥òH‚›;sl+f?–ìÃýªs7–Q¿#µJC:WCO= #']¸Ç#~߬O›žŸÊI½+ƒñç!Z®f96­<æ×¿JþÎ~ú~/ƒîÃøµ ÙíÒ€Tp.¡ÇìÌœ·p¥ ÷AW¯Çº*µöU¸œ jÚf˜ËΙC›“U͹‹ŽñyB`nÙ~˜í¶Û¦Á`³Ô|£%é!ñø‹8��� (¹éÊš¿`ï¬'¯Ý�Œ¿~ÓçÑÌ÷ŧۆì£J¥!íƒpM»£þaÜce–µÇon?ݼ;éçoï Óir£#/ÜNŒÝ�;é1¸Óy ú®Iµ‹ÎÝ|ÎK›>ÍŸ{ÞÒŸ‡ñ +u¿Ã)š¿ò;•Ÿ^ü×~§Ó¶¶NBí%Ùa bE5‡ìkdZrÎÜÕFçèTí¯Wt¿`?&"~ÂùZ•€58��� (£¤ï[VX÷­¹½sl“=-ÔÛZ&!o»•X´Ÿ¶6Êœßë³M4È`›œEßUIùÇß‘nœ»¹ý[°>+áó±;ö-Ïmó¨Éy[ç<,èL}áwºV¥¿4£û`jaÅ5vL -»­Ñ¶-8g3¦Mîâ¦c‹F\°kŽV¦` Ž���€J.øÏ8—ò ëÑëÁ‡èõ™`€yoaÐŵæö.tgúï15FüíŽ Ô^Á?zÏ $ì§m2¶÷½‹Œ‡q¿CÚdꇫè»›™š-‰#t¥Ú‡ç.a½kŽ¢ÀÊCi´¿’ ×—^ây[~âï\ÐŒ1é;çøéeAzœKŸ&p´tÆ2º¾œöd›õE«‰·mf`ãáKé4N“Ïå¢ýX§ÆÑªô�¬À���P8‹š¥¬ÓL,5wq ëÑk§0êÏ·ë·}Æ(ó™Šéÿ%I«¶^Gº¾›+¹ )–™ºï?•‹Î˸#îh;f•æ ¹é?—`ðÆl·é³(,Êk6¶_žùý °iVUi<•+Ûu´®÷‹¿wF¸o¦ >Øæ\zÜþÞ4ƒ;•†]‡öWsù+ŒMG'n§Íá1ï< çÙc¿l;ÛôÎö¡cû8Ò IB !áxÄ ³Ÿ¶“ÎRŸ‡ë?ÄM¾Ü Ì¨Ÿ÷„ïœç§o?=šýô_›}\¶qЮžH›¬'éœEˆ…ûÛ¹°é%Þ¶äÀÑ‚ý˜[ýùö÷î¦3»ï Ò°G���@ÁÄ`S3b<2Aûþ¤Ð¹€)ÔÛÏWŸ´åÉäuUÏž9óµ&Ë_y£ªÙÚ-Ú<ÇUmQÓ­9¶IiÖó.®³º¦Oì¾ÿ•ü4°#Ÿy…zíÙÝ–¹¨L3"ÿ8L¶öŒ®ËŒ·ø{]áù¸ü…Ï[qS57Xbk ™ïœ±Í›7 „RíCÒ¹ Ï“»Þp?ÿÅc©†ßÛí%÷K/ë3´~ü½—Òë}í¿ _õ¾L}lMœxýº®/¥ÿæå‚sàòÓwSÚOÜ×O$x¦µ‹¼ÖZGƒ?,܇ëÛïLÇÚöó:9ÇxÙ9³îÿ —?}&ÏͨqÓ £kÅ~4º¸óÏäwQ­)ó:zÏÔLZ”€58���pD´vE'ys`WF¯ä²ók¯¶Ž¾.ÔBŠƒÀ���€ã0J?x*íK®Ø—¸)Úl !­IH«ùeÜ(0G���@ Í6gK˜&ñîŠ×$gn²MÝ€ÃûLš}éT—f·GÓ/”#������$"p�����€DŽ������ˆÀ������8�����@"G������HDà������‰����� #������$"p���dprg©õÿ¤)í<÷oJ;ÏýÛŸÜyîßþ”vžû·?¹óÜ¿WÍs'wžû÷ªyîäÎsÿ^5ÏÜyîßþ”vžû·?¹óÜ¿WÍs'wžû·?¥çþíOiç¹û“;Ïý{Õ<wrç¹ûSÚyîßþäÎsÿ^5ÏÜyî߫湓;ÏýÛŸÒÎsÿö'wžû÷ªyîäÎsÿ^5ÏÜyî߫湓;ÏýÛŸÒÎsÿö'wžû·?¥çþíOiç¹û“;Ï7ÿ���€Ô’2Ù��#G���À–8�w9������Pã���Ø6j�Š‚À���°eŽ��EÆ]���È€À� (¨q�����€DŽ���€-£Æ� (���[Fà�PdÜå������@#���`Û¨q�( G���À–8�#���`Ë�ŠŒ»������¨q���l5Ž��EAà���Ø2G�€"ã.���d5p¤Ë31ù�BÒõ‡+���p@ à#M�8G���À–e-ä$€4àP���[FàÛFš�'\‘��…ðÿð2 f¦—/_J+§/¾øB>þøã­L?ûÙÏ¿ÃNß|óÍÌ6�AøH�%éúà �;?üðÃ$°òí·ßÎ^>ûì³Iæƒ>ˆnn‹¦?û³?› ê,›ÜïÈ2¹Û—4-Ûæ>úhò9]»^‚M@~éï7‹¬Ë£xH�%éúà �°W¶f ÙÚ>4ÑUÒäTÜ=Ç^{ǯ%e÷K'ÝO»Ï‹Žo—9Öã�;ý=f‘uyiÀ¡$]¸"�¶jÀТÀÇ÷ßoÖß&ÇÀnéï-‹¬Ë£xH�ò„+�`m6x¡5~4x±*pᆰ;I%�ùF�>Ò€CIºþpE�,dûÒ�„m:¥ýÙÀíCHƒú Vèç5x�e‘µO�>Ò€CIºþpE�ÌÔPÑN™ýÚCúÚÖґʨ5�SY ùY—Gñ&�ä W$�( úh3 ù#|ipÈv>­Ÿ£¯!�X-k!Ÿ |¤ �‡’týáŠ�¦MÆlM" é@' i€ÈŽJFÓ2llHã¤&íþȼ‘ÂèZ‚fݤǺ4ƒkYcétÆ×Ò­ŸJ#xcÞ�v'k!½åoeÐëJ³VŸþî6ù®cíõe4Âm¬Ä¿óZK‚Á­™· o$hT¥Úî˽yç`Féu›R«¶¥mÌfÛ–5MX×}x©»ˆ¯YÑt^óÞ™y¡è:hç…ÓÆ4ªÎë“ê4Ïqß—¶;¯ñò—áu`úÙ“„k‚ÿýá4¹Žì—~·+�ˆöI¤MÉ4(ä67Ó¿µ" "ég€Ãy+½æ©4{r;¾‘^«.'õ® ÆföÚîä&øT:¶@eÖ*Rk]J÷ñ¹´Ÿ?•FÅÉÌœ·½(„¤Lö:ÖYþ¾ß–jtmßa («Ûž4+¤Ù{+ãá iÕªRï^ËÆ?ó£ùÝŒ¤ß®Å÷ÞŒ¾¬i Àæ&×ÙÚ§ÒÞ™w•æa΢kÛôõ9©´¤wë_áÞË {.çÁks퇗ƖTNâkãBÑõó$Î'™·ö-éúà �Ž˜ÛìÌvZm;¬¶ÍÍ€\1Oá¶S3`,£ëKiTü´fÖÆ…·“ †x\—hÑöâØe-䯻|\¨Éo:ÚîöÛïÆGë¾ß‘³ÇÃëΉTι™Ä„ô÷Ýp®EË~ïZƒè“™ëV|m\‘/‰òIyzàãŠ�GDAËšÑ'–óšL&-ݘæ/¤Ñ|$5}¿ÈÐ,™Ìo2c_?’çýßH§q®»"µöUÜͯæm –£¼3b•è½ðóÍ/¥?ó„/‰-L:ëÓí]»ÆQ¸ÍA+Þ_wÒLà;Óä¤ò¡4kÓºU¹;öi7~$¶/Íþ‡™ÎÆS¹¾OØÞÿ)üM÷¤Û¬‡Ÿy,£ó’§@öEÓÃraÚºÒ´¬i§.›†¿HYô;¬ËçÁ¯§¿ÃÖ ¹¹yé¤ËK¹¥©ä­ß6Åj|%ýÉ6Ù&KšZlównæÆôºÿŽâ€´óúó@^vÌwjÍ›×re_WÎ¥{mŸç/»6FW¯åÆÃézÃë_Sq´ß›o›~?€Ã¸ïÿT.‚¿“›àQø›tò1% %]¸"@Ži ȯQD³3llt%íZÕd€nåº{fˆJwðÞdf´ têT«^nºL\¸ºR^k¡0Áè½Ét9™¤¹GïÂL×£Bí0üÒ¸YKÅ{·ØÂš ©2^a!®ß‘š-ôŽ^IW |QÓ9“Ôý©<’àfU7dª—ë2q¡ü~RèµUÎg¶×‹èó)÷ù””É^ÇòåM:­4¤s5”±mâiÒÑâß¡M‡öwh—aºŒÒýŠæÆìúß:µùLÿdãל‡¿' 3ÿ»ÜÑï\9¿£èºõof@&84¾ ä\›¶¯¥èZ~¿m ²äÚ¸šîÛ™ ßMö-*H¾ß|Ûô36¬`¿âÀ‘æâß·^ïZ½½‡¯ �L;©¶}ÙÏ4`¤¯õ}EÈ$ªñã£×ÓÌÉÒÂÙþ2~¦hn~à( ¶¸ßiû�H·›ló”©1é›ÀÖ–°Û¿,C¸€wL'ÍæÌw¬<8JI™ìu,_Þé̼“ü»[ü:N—þëô“Ùõ™ßÅ$P4ÿ;™ûþ]ÿÎýßÑÜïÊï :~=Ù‡ׯ¥œþœbÞñØtÛÂ4±¼Æ'€E4¿œeà—ià(dƒãÑC¤Âß7#�ÀhÍ!­Aävf­5Œhz†­35â§ü¶¶Íô©úÊÂY?S4·N¯Ð”økÚ6ÙfW\;à©eež,N:ëÞFàh6µêxà8-ü¬¶tù„4â§£U¯ãté¿Þ_àhn{Ô6çþ1š;f+G+®ËÌo#`×40¤Ý7èCUíÂA°j7îC×­ŽB“š„µ–´›:¿wsOÌ'胣ŸÌ\·âë#�@ ¶ù™ÛO‘m~FgÖØ­°@äöb›¾˜¹+ g üeüLÑÜ:ýBSTx¬Ìޏ½·i¡m]¶YJ|Lls“Ø6G¦Æ‘YÇÊãRJʤO˜æMG]ãh׿óMƒ3“}X~m\&nH#`4¯ýFWLLÊÂE׈( ¬ëw¯EöáPÒµLk‹^̼_Ë’Gág?ù¹sÍHº>kMÍÎ^F—Ôcè#p�{ µŠôiˆí§Èvh­ïgy"¬%*€Út}ë5‰ùËØ×6•°Î¹afíP¶¶£Ú8S]«ï-´ ¤ù«µ‡õ } CfÛÖÙ¾eÆ^¦„íýïññ˜qŒ’2ÙëX¾¼%Ðö)dû8ÒŒþÖþ~ÁïpÌðƒñk/³ÿ;6¿‹IÍ<ÿw2ÿý;ÿ›ëÊäwä_güà›íkÈîÃÒkã v]¦¢IÍ=?º~ÿ7žvÛÂå×½žE§5âkßâ)km#Œà&ø‰Ô'b[ú¾ö7›O²ý”Í<x2ƒÌ^ãòDÊt®_µ×�ÿz1$T“†ýß>=Ž>G�°#~°HkiM#ú)ÂÁØvúNËvdý·½Ï™}ÏËÔ,æ¦Ë<i7×ò,x2ó:øÝ³(¨¿6ïéS·¹Ñ–´ß”#Û‘¬íXvM“Žig¶K è-=­5`ßK<25+jÍ“ÉSit^FGÜíýÛQÍûŽ—ž¿,V.ïŽÚU9—Ÿÿâ±TkMéöònéï0ü-]çwç¿^]ëhöwîM®îï¤ñL~=}w?cjõìêwnjðØï«>iË“™ßÕ3yfjð$½Ž¶oɵ1Í6އîhuùE³.Û•žÿßdÛÌw�ˆim¢Éo$aÊVÛhZã/šü{¸?÷òHãÉh‰Óíïýí¯ë‡·Þ¹Iãÿ‹©½”4?ž¦ÝöÀ�lÁ"äÚè•\v~í=á×~}.6{Ò~ô´yÊ3éüÒEN ©gôµŒ\k6B1èõ>‹¬Ë#£^IÀb¶/#Ê^ÛJ¥+�dä‹´ckí¬ò%nî2Û‡>% ¤Õü2jVU:Q“³5‚äVÁiv_yUÔSJêË…—”É^GÖå‘E>¯¤ ™æ¯ÿÝ¿ûwÑoÄŸ4ÿìôXú¸"Àšô†e‡Ì'X„c2ö%˜4Ñ©.ÍnoaSŒ¥MTtÚq3ŠÝÿ û´M“h2̓F^“˜åµŽÊDÏyY—ßœéÈy&íºÓîÓñ¡¯3jñµñö`ÇG×`–0£µ4ÿíô}lGÒõ‡+�¤`ƒE ²7(‚E��•”É^GÖåQ<¤ `žÍkÞ['û�W'jíW$�XB‡Ç§f�`—ÀGš�æi¿¡.}­¿jmWÒõ‡+�x´#k½ÙŽ÷´ƒk‚E�€E²ò ÀGš�Ò±ùtl#�XB;¹¶MÑ´†Ñ_|µ¥�`GØ6Ò#o#�ðh`HDnS4 @½føÍW¹f k!Ÿ |¤ �‡’týአt´É™ViÕª­zaÔ&iÚ4'�Ö¡×[KQ¯#„æ:‚M$€4àP(5­ 5ôb¨µôoš¢ÈJƒEAÐ/Z‰e-ä$€4ã×<z*ý{ó;—týአдàæè>þøc t�vƉѨ©…T|ްm¤ @ÝÊu÷\*Õ6£ãŠ ´ æÖ.Òà…7�ûb›ÄºAk *¡˜aÛH8>c zÒmÖ¥Òx,k•0_H0¼ ßÿZÚÓ(]ŸœÔ¥yy%ñYLneð¢#ŠÎ §ZS.ûÃpm&h-£SUÁ³ v)éúà @¡hÁL hzÁÓ›Ü�à´™¬]¢Öc±$e²×‘uyiGç¾/íj䩜rcC£+i×Τջ‘±Üɰ÷©ÔNNå<x¾˨ߑZíSé ïDÆ7ÒkÕå¤òH‚›ðµŒ¤ß®É 5Žö*éúà @!ðd@ÞÙš¶iGÖB¾.ÏÄäOà·‘×i!<ª¶ûÇyÆrÛkyMÍÞJ¯ùÀƒâ¿§ŸÝö¤Y±ë ptIç˜+€£eû/Ò˜^àèKÀ1Ðk—ŽähƒÝ:2Áîã¶´ •BÖåQ<¤‰Ç!–ž“¹ÀQRàç^†ÁE¸ž ÞüÖû¼z#A£*'@†Žrƒ_"€£“ÔÍ>�£¤fl( Çð‘&b‡üYzNæG6HôPºƒ÷Ñ;“÷ê]ŒM(úÛÌŽG§Rï^kC6GtŽù%8úD^ŸÌëÅŒ€"ùþûïéÐÿˆe-Üf]ÅCšˆqògé9™iff˜÷*K¹EF¯¤Û¨Mú8Šš²œJ£ûJF*º¾”FÕëã¨Ò’ÞÍ•\ƒðص¤sÌ/@îi€è£>Š.búd^ŸÐ@Ù&¸¶MpCÖÂmÖåQ<¤‰Ç!ž§sl¦Á#mÍU-¸–Q4Où£ªµ$Üšy¦ó쓊Ԛ 4ð„K:Çüä–Ûᵞô‰<�”…4§¤|KÊd¯#ëò(ÒDŒã?œ“âK:Çœu�¹cFŒ:�q3]Û£F1øH1ŽCþpNŠ/ésÖä†0¢Ãk�˜E�)¿²¤(ˆÁGšˆqò‡sR|I瘳à 48DÀ�ÒóHôûvxY RÄà#MÄ8ùÃ9)'Î:€ƒ°Àj°ˆ€�¬Ï‰Mƒï„Çq¢ i"ÆqÈ÷œhwÚŠ%éwÇ/À^0€íÒŒ;¤ÃÊZ¸¥p i"ÆqÈ{Nô^£yyGÅ“ô»ã—`/Àn@:œ¬…[ Çð‘&béŽÃHúíZôÙ…Sã™ü.¸Hžwr*v ýá]¼ºa ÄÏH¥Ñ– ?”hPxoøùù©*àM´Êd÷áW¹Ût&íþ;3/äoG#¡™5ö%h7¤2™_—f·ç WÿF‚Fuºì̤ŸýÕt—~V§ †ñÀúJß³÷ÄÅ£çÖÇ ÀN0€ý²$½æ@Ú¤Lö:6_~,£AOºÍºTÛý°ªâBàôõ¶m²þ[-©…ûyrR‘Z3p ¸[6H¯Û”Zµ-ýÝ�ÇîŽÖ4U鎃Ž.¦A—(àR _¢—ãá iu¢ô0t¥>Ð Óæ‹Ž4*aÚ¬we`“åøZºõЬÑsýµ´§á6=”îà}8ÒõFiÙ&éîN†½Oå,e:¸ï·¥ª¿Ú§Ò›tÔ[é5ϤÙ{k^‡Ûq}n¯û;r¶mfù÷2è> ·× üŒ‡Ò¿ ú]•sé^߯ï‡ë¸íµ¤â‰DÞ…ÇöÉä=m"­çDï/ ÐP.\‘�ìÌ7ß|CÀ�Äî5“¯$2ùùµqÀ©ñ°»@QV¦@ZiIïö}T˜®Ù‚÷†Æ7<ê$í¯-(‡ÇdÀÑâõ­°Ãã¿qš(˜tÇáN†x%CôñG3ó£y~M [cÉ š˜Z8N-xÌòã¡üá¦öQxögG¡™ùËÝ÷;röøqÀªœr3YH·­1Ý—Ñ•´k•Ù —¡éø|fy[£Ée~_<rÖï›ÿÙ){?щ<}±%ýî¸"Ø:}º­…F�pxZé³Ï>‹2‚: ›>1Æv¥+Ü.–iy¼ÈoàÈÊ·UhôJºÓ%û»æ÷­\ß ;:þYÓTQltæG޹À‘­ÁãlG&­œTIpãÖ R £5Ü÷*ÁßÉMðH*Z+¯}¦dåŽl­ ŠÔ»× )­ô <f60»(p¤üÏê6ø£»p{>•'½7“‘<õ¡0i³ø’Î1gÀÖ¸CDk3 -¬��òÁ¿FÔßž¬©u—_J'j20M-…8p¡MVܦSÎëÏyÙ1}¢hs–›×re_Ï4YYfÑú,ç¿®¯f›ï˜Â·¾g¦x9§yPôù¦\Ú~c–±÷Éú’ ÄnàÈü­Ÿ�ÞëTë›—þø‡ûÙëJ³V—σ_O—i½›»í7çR®½¦{ú>6<+Gö|;ST#Î=ói7ž8ÍÆ\Ûi0K›†…ßS—VïFS”8²éwÁ¾ÍÍ_8²µó¦û3i.73ý ùßüoÿwQØö¡ƒ¾òá¬ÈLD¶0¢ÿ0€ü¢Vèöe-H­µ|ÔTå4:/e8ŽûQÑ&'Q Âo:eûi _ÛàmÎrRkI0¸5ë«H¥Ù“•¡£eë7ë‹×ïÖè0…ÙI:, k3ÛËøFz­ú‚Z VÖðñ¿ÏÔ¬˜Ôñ^¯[chãõ§¿ŽƒCï§5J¢þiîM“¡ù`„.ƒ ÃZ5Žlp/LÇ3iЯq4 jgÚçÁk/й­ÀQhüZ‚óS³=?ì9p4ýìÏ~ö çŸÈÿñü3÷ Òfñ%cÎ:€ÙXõâ¢#úÏ�€ã¡A# Ñöá¥/ˆ¹ý™b«øXõÚˆý×Óò ‰ëw âsß—È™ÎÝö¤9©µ³ÂÜú}þ÷™×“ýó^¯\ŸkýãÆ‚¾Ô˜ dÄ(œÇ6:kŽ”m榃¿ “VçD[ …¢½5˜UkI»ù¡Ù—ý6UÓ¼ý·ß~ýí"m_Ò9æ¬X›>u À�ÇO¯ç:œ²fµ)�6“µ •~y?(Z¸˜{}èÀÑÜ|µÆ6$.ïÚeàhýãOà(›ŽÃÚ#{žÜt° Mšó; ÚnàHƒD“¬Ý}±«IsЩM:ÇvûuòG‹6‹/ésÖ¬Å)Mÿ�?šg“µ •~yÓ¼ä¨k™ï›Jß;]P‹Â3·~_ÊÀ‘ýþ•ës­ü e³þq°A‘侈æ‡ã×&hAÜTíä,</fHÿ¹áøC£k ¢¦jnçÕ–é›h®¯¤4´êŸH}nú¾6mtƒ`vÿ´¹ã—Ò†Þ×}Ø`8þ™ÏÚÚLþˆ‡w2ì)­Ö/'&Òf9qÖ¤BŸ�P|ZãHkiÁ@k"q­ßu bqÁ×ö‘c‡·×Z ¦ùŠßì˼žôad Äþë¤á½%®ßi:ãÏ·Mb&j[@=•F÷UXP ½:ªUu½>Ž*ÍrÓ.ÁL!WùßgEÑë{'H3 ¬\߬õŽ¿Ý×i#^Þ=ßôˆÂyl½ã`Îut>Ì4 üØÚ7Î<wr;h‚y Ÿ‰¦º4/¯¦Cÿ+“†¦Ÿ™.f©vY¿ÆRÔع8R(²ý-Ùï ·«Û Ó¤Ý0o½îTiHûùoÒ}6šfƒpúŠ-ésÖ,ÅHi�P>þÃ,—µ µÞòw2¼zjF$;•ÆÏŸJ³j ï®f °Õ'myâ¾n?“gNѽ²Ö‘W@ž]XX~öÌ™¯…ç¿ò ¤¶@íªf:êNe:êT3¸öjhxƒ¨nSöxu~-Áçu§¶Æ²õ%Iüg§š´ƒ®ð_Ïô=pòˆsR|I瘳 ‘ˆ>ûì³èÂA³�(·?;ú?Z.kAŠ‚|¤‰Ç!8'Å—tŽ9ë�æ¸_SP�€rs$hÍSš¯ÍËZ¢ i"vôÇa®›?­îŒ:ot»Q>œu�¶o š&��|:,³m¾ÆàÛ•—‚˜Yj¶`ëL«š²euèBvŽ ùú}à8äç¤ø’Î1gÀÌpÌ4K�,b›¯éý‚ækSY RÄà#MÄ8ùÃ9)¾¤sÌYJN;@Õ§Ç:éÓd��VÑ îÀ eo¾–µ EA >ÒDŒã?œ“râ¬%åfúr�° š¯Å²¤(ˆÁGšˆqò‡sR|I瘳”ÛÌàûï¿7ï�°>š¯eGA >ÒDŒã?œ“âK:Çœu D43_Ü'Ão$hT¥ÚîKºn+×ý¼º•AÐ’Zx1=9©H­È`46ó0Ï?^!×þ‡5ù±Û$íØmOš•Òì½5o¤q/ÃàBNªmé§Þ‘±Œ4k•(rRkI0¸5óPDe®Éšµ EA >ÒDŒã?œ“âK:Çœu 4ón‡RÖÿéüz㰼ݒJ¥%½Û÷2ì}*µ“‡Ò¼7ó×7¾ äQgÛ…;¹ >•Nd^ʶ׾ö+/Ço‡†4NÖ mÀ P‡/¤U«J½{¦ Û|MûÑ+ƒ¬) bð‘&b‡ü᜔g(8­Y¤™wÍÄÓ| ‹‘ôÛµ5k\,1z%ÝÆé–k¢Œet})JMÚ|lóxík¿òtüv(n:[Ð3xXï‚K,¤,­3= bð‘&b‡üáœ_Ò9æ¬å6о'ŠÓdàV½®4k¤Ñ|7ƒjüO2ô¤Û¬§ Äh÷óöõ¥ñü·rÕiHE×[ëH?jŠ77Òci§x¹p[^t¤Q1ïךrÙ†k[Á¦ë»`¸fte|#½V=\¶"µÖ¥t[?“Þ+ zØu†S#ÝšÑàkiO¾¯.ÍË+F™t,u™;ö¿tšM÷+®9¢ï×¥õüÒJ¬1•t¼®ä]â1¯K¥ñXGë ÃÍko¿þoòÿùÿ&í—kÁº+/Úæ\êTûTzûx‰¹ý·/ ùß³èX,øÎ™ó8ýŒ¿ÏÕÏy9Igáv…û=Iw•sé^›&]£ÁÂ}ˆ×ï4›L&X3Jÿ²é4üRúѲáù9×sžÑ¹tôóä@_¸½n¸.´¯_Iÿê©9ngá÷¾ gšfmî6EËéö.J‹(*íGOû=*zçÙš¦³Èº<Ї4ã8äç¤ø’Î1g( [˨ˆ_ǵ´Ðy*çÁë°è½)íj\@M8ò??¾–nÝâ~X´Ùy¥*àYȯA‚û©Ù‚¼-€WIpc öK˜mHµ½sâf`Õó@n´ì¯A³N´]sµ<FWÒ®I«w.ugšŒÅÇî.éX†¢}¯šàÅd¿´ÉÙÿ*½fÝ|6^×ÙÂí÷Ž—Ì׳kí—+q]v™8˜ŸÏŠi*õvá~øß³ðXüׄ,™àP¼]ákÛÿOt¾*RiöDCG‹÷!}¶*µöUx´oåº{.•Is@mr÷HªK¹'2»ÞØâã=ËœKÝîè|¾—A÷aüZƒ?ÁµŒÆ¯%8? ê­““ŠÅvž­4ŠØ÷‘î[Y—Gñ&b‡üáœ_Ò9æ¬â×2*ªÄ ºÿóÑk'P4·>?p¤Á‡³ßõé’rÖÝÞ¶ÿ †´_ Â-›š=6æs“mVñvÛý˜?–nPÀô3ßEËVy±²“ㄦj‰ÇÜ=i÷+Áªã93?>Iû1û=ËŽE8?Í9\¹Ï~çÙ¦¶Ö\­ª¿¬ßWQôÚ¤a7HåN3iaññžçŸOóz²óç{Ý´ˆâÓ¶ï#í©Hô÷•ÅÜo•‰)œ@"8'åÄY ¢ÈµŒ|‰A„4…xWb~ÀQâ÷-)ôûÖÝÞ9¶™™L­ðÝÙc“¼ ¿-nF×b™?–f™zWIÕ@l%ÍÔ.%+ỹ ÒìW‚EÇS›kýò«Ió¨Éüû‘xü‹4çpå>§-ÚS*®ñdjÀÙGÑ÷8µ“J>Þóüói^§%¤‡p/Ü´ˆrpû>ÒÁŠXûhÄà#MÄ8ùÃ9)¾¤sÌYŽœfºËPËÈ•DHSˆw%èשqd ø3A}ï4ÝÈQënïBw2Œú˜‰kžÌ;B6ï™íž?–f?W5¹ã>y¢&lI{›(H<拎Á²ýJ°®¨éUý\ÚÏ)½¿}‘ü]Þ~$;‹4çpå>/-߇±éÌÛ<®4¤seúØ2ß³°ÝœÙã=Ï?ŸæuêÀÑê´ˆrÑÁŠTû(kAŠ‚|¤‰XtcÊÝ„bK:Çœuàˆif[3Ýšù.z-£)ÓäÅ"¬ÓLLùŸ^;54æÖgšÕL%v;N¥Ñ}›M!¾º^G•æ ¹é?—`Í®îûOå¢ó2îX8ÚV7À¢¤ù+ü÷x?*¦¯›¸cîšéW&ùXŽ]©‡7ŒJã©\E)kmÝÆ·Òï4MpÂ6sZ8òW(ñ˜Ïž³ÔûååܺlÐ'þ~Û—P<?œ·`?üï¹¾^t,Âó•°ýsìó¤¯!Ó¤ÌS–íƒýl}A0Í6³ Ó§=žònîØ-:Þóüfeæõ$èãÏ·iËYŸÝ÷Ä´ˆ2*Rí£¬) bð‘&b‡ü᜔g8Bš¹ÖL¶^¸5Ó]¦ªþqÁÞ>ñ0„‰ß[QWþ矴åÉäuUÏž9óµÒ_ŵ@Ìçã÷´f’?ªÚ²¦[¾°ß> —3̓ì6¥ì\û¾ÿ•ü4°£}9ÁÓ¹òt[Æó#YÍ4ÿ2Û><²µOì¼p™hô«‘ô/!ÁóVÜÄË­á2ÃÔš™¬Û?¦þ1Ÿž³ôûåH<ÿnmÝþ¯¥m·úþ«ôíÇÜ÷,8w)ÒÜÒt¦Ë<“gÎqò_G£.܇WÓ©íç£IGO d [›ÊÎKõoáñžaXv=Õ¦´Ÿ8¯] Üùgò»¨v‘y½§5“§E”›ûDk"#MÓYd]ÅCšˆqò‡sR|I瘳™"d°±ˆÖÒèH'± དྷËί½¦h¼XP ȯ2?QÄà#MÄ8ùÃ9)¾¤sÌYŽDÙ3Õ…§ O¥}©ÍÞ€Uâ¦hÓ&tJkôÒj~7ŽÐ±>ÉZ¢ i"ÆqÈÎIñ%cÎ:p¨e´žÙ&X “;bÕ.xM”æ'F‘Bvãa_‚¶ÓM›~u{q35àˆùJŽnkY—Gñ&b‡ü᜔gÈ1Í<ÿìg?‹.ÐÔ2�”ÉË—/£‡&}ô‘üðÃæÝb¢ i"ÆqÈÎIñ%cÎ:S:Jšf–5Ó¬5Ž��(›c¹f-HQƒ4ã8äç¤ø’Î1gÈ!Û4­ OY�XÆ­}y7_²¤(ˆÁGšˆqò‡sR|I瘳äŒ6IÓë±ôë��À>ئküqîšng-Hí· 6’~»}ç©ñL~\$Ï;9•F;¾í˜H#ñs'Ri´%è%êymeÿUio¢U.”jß…›´`ÛkMéöfŠûÅŸ‹&»=o$hTæÛi7ýêºÁqÈ#ÎI9qÖœÐL°f†5S¬™c��0ËmºV¤Á"ö[ÓÀÑ…´ûïâ—Qà§¾ŽÃ)ãá iu¤þ=èJ}& s+ƒiTNä¤Þ•í‹|-ÝzÅ|BGyüZÚÓpßJwð>úèz£üMЦڎ¾GäN†½Oå¬Ýç,±Æ:üm_J'Úž³é¾«Ûž4+~Ð*ÜþþSiNÞ‡kIe.Hô.<–OíÇ!8'Å—tŽ9ë@hFØ6MÓ¿�@²<6]ËZÚoAìN†x%CôñG3ó£y~PÅÖXrƒ(¦VŽ7ji<Ê©Y~<”?üÁÔ>š ú„fæ/°Î:¶}f{¬¨“¿óâe÷7**…óÇ!8'Å—tŽ9ëÀ}óÍ7ÑS‡fÔ4��Ò±÷Ï<4]ËZ:hAl.pä˜ ¾Œet}Õ8ªœr3‰ò$ŽF¯¤«5|*$¸1ÍÚ&‚>k[±Ž™mwj@ùÛ“8ßò¨3[ûi>pt'7Á§ÒI:n[pÐ4‘#‡ü᜔g8Íäj°H/¾šù��ëÑZº|ðÁÁ›®e-H´ ¶2pä÷éN•–ônݺA‹úz ÍÞ[ó×¾GζTÒ~þDÍÜ úMªzÍæâÀ‘ÿ¹Çm týà8Äv¤\ç¤ø’Î1g8€¢öÑ��À¾åáALÖ‚ÔA b+Gnmœ[ôºÒ¬U¼š;~#­áÓ“n³îÛ©œ¯Mó2kŸ5Žþ.,t?’Jâv„¶Pãh5Þ(œÇ8¶–ßî‚”ëâœ_Ò9æ¬{fG…ÑÀѱ7MӋн°$ýíOî<÷ïUóÜÉçþíOiç¹û“;ÏýÛŸÒÎsÿ^5ÏÜyîßþ”vžû·?¹óÜ¿WÍs'wžû·?¥çþíOiç¹û“;Ïý{Õ<wrç¹ûSÚyîßþäÎsÿ^5ÏÜyî߫湓;Ïý{Õ<wrç¹û“;Ïý{Õ<wrç¹ûSÚyîßþ”vžû·?¥çþíOî<÷ïUóÜÉçþíOiç¹ûSÚyîßË&ÿs»”uý»Þ¾¥Ö )ÛQ´[+'¹£¸ãéðøÏwö8 ·}üZ‚óÍæ2öqdGÃÕ|ö¹µ­‚M9’¯ãà4y ·ëä¤.ÍàÚŒÒçt¯ójM¹ŒFtF1Œ~þkdý±4žÿV®:è·uRÓNàï'MCãï³Ë–nŠ-ésÖ=b¨}��vÇ6]ÓÉlb—…¬ë>hAlíÀ‘ ¢¤Ùf`‡…´Ñù\ßL¡Œ#}øí·ßFy; é¹ÔIûÞÒp›zrÐ4‘#y:q²5×tD½3“þÆ2êw¤VûTzÃ;ý ôZu'PùVzÍÎïÃymG$ÔtSkI0¸5ß3M“qڣƋ³ìf*lÓ4Í\7�@Þ¸M×´–¯•ç{Öá¶ÍxôE4?¿ÖŽâ¦jî°ösÃñ‡F×DMÕ*Rk_™Z–)tÏõ•´Žå눷½"õîu¸ÕJ›–ÅMÖí@úZÀWQ­(÷s±ñðJ.[OLÁßÖ²z(ÝÁûø‘;ö¿”Vë—“`”¦?Mw:òŸ0õÜjþOÓä:$òX±ü‡÷2è>”“zWsÉ-Íô‹ejÛÅï™ZF“߇÷Ú^š€«]#ì[Ò9æ¬;¦Û4mÓ§NyÅ�WÚlHïSZ€W»¼ge]÷aî§N“;M ¶¦6;Ï&ÍpBQÍž„ÏDS]š—WÓ¡ÿ•­…4ùÌêÚ>s–®#aÛí~Ù&kî¼%S¥Ù“Û…ÛiQà±~ø! $iàH󃺌”4]êû:?‰~y:~ðÇázbn-<G8.I瘳ìíÏH3 ÇÞŸQn�€<ÓZ¾zÞõýYï‡ÜOËC"jÍ#[+N' $iS7M¯6’&bù9¦ÆQb 7$š©¤ïššl GöóŽ3I瘳ìý�pxZP·M†vUó7kAŠ‚XyigÚZ;Nƒ›št²}%1òn¾~qßC©µ^˜ZtÚ„ñr9ø{Ó”ñTÝW2ÒP‘vj]µ}™@Qtºwš{†ç[ƒI~sÉ™fn6p¤5ÛÒ¿üUBS¹ýÊÓ9Án$cÎ:°e‹úV("n�€c ÷f½gií£<Þ›¹ŸÆâ²m–0Mjl“¦SÛѶ»ß£ôºM©eêTü¸ÌìÿÁÝÉðê©3Ê™ )Tµ¸£ë˜ $EóÂe:¿–àóºÔš_JÿÍ˨vQ¼¾ª4ž=›}­µFWÒÖ@ÓÌ:'_ç»tŽ9ëÀi;uÛ vÑú3JÂ�p,ôže äZÃc›²Þ¹ŸÂ§iBIÓ@§i*¾Ÿv4:­!ó¨ãô»£}<=zzTA'~ùÃ9)¾¤sÌY¶DE0ÒÀ‘mŸ^tÜ8��ÇÂÞ³´ ®o³ÿÁ¬÷Cî§ð%§ Óä)MàhôJºS§Ãæ[¹îžKåÈj+ñÛÈÎI9qÖ-°™P!£,A#��މ[Øqöl£†pÖ‚1ø’Ó„8òšGÔ¥Õ»‘± ÅïÅï?þøC©L^k¨ÿ&ƒ^WšµÒh>’š¾¯MÇCé_6ã×'•¸9ÕPûé -›·#ÉLJÄ9)¾¤sÌY2ÚUµ÷cÀ�p,ü{–>è±Í˳vBœõ~Èý¾ä4áŽÜѸ´Úù©7R—;Düì²Óþ¤Nå<xwÊ,wr<’jãR®Gc_H«V‘J³'·Kçí¿üáœ_Ò9æ¬Ò §Ž€‘׎6÷�àØima½Ÿéé›Êz?ä~ _ršXÖT-)¨´8p¤æ†y_K·nFûr']ænɼ¹mÙýä ç¤ø’Î1gØ€Vk/S'Ø��»e… éüM›œg-HQƒ/9M$ŽîdØÿµ<o7â¦hYGÑ2ΰð®eóvˆßFþpNʉ³¬I«³—­ìE¸q��ŽÅª{Ö!ïïÜOáKN^ðg|#½ÖCi´¿’ ×—^ÖGf™Êy 7~thټⷑ?œ“âK:Çœu` t‚=‹�àX¤¹gýðÃÕ(Îz?Ô噘üiÞ[é5ÈI¥%½Û± ü<fïí´#/pTi¾›þs oãÀ‘.{s%—Áµü÷^K*nàh2äÿ©4:/eˆÞIÿòW2/›§ïFòqÀ!qNŠ/ésÖ”¶ÑBÑpã��>Z7x”õ~Èý¾ù4aj …ïG“ˆÞÙÑÓt„³Kéõ¾’¦vXu`ýCøù³p^]šÁu¸ôXFýŽÔ¢Ïò·½Ï%î['·Ÿ£¡\uL³7jM¹ìãæiËæm@µ«Äê÷£içãn­¯b8Ös‚ô’Î1gHÁÊÚ 6��ÇnÝÂŽÞû5x”æÞŸµ EA ¾cI:ªð¦ý}êoKƒ´Ë–?Öß#³¤sÌY–Øä©c™d¹qè²LLI�ìÂ&×—}=8âÚß±¤‰>ø ÚVÍ+öÙgQÍü´yfûûZ–Ï>Öß#³¤sÌY h´Z–7$!]�Ø•M¯/vÄ5­Y±HÖk×>øŽ)Mh“3 ®ÚZzºíPÒ×ú¾ÎO¢ùlý¬N‹òÛÇúÛøã»ïä÷ý¾ôÃé÷ß½“?š÷‹àXÏ ÒK:Çœu Þ¸ô†§74:Á^,˃›’.�ìJ–ë‹~uy-'ÉzíâÚß1§ ÍGkÀUk ¹¤/¾øB¾ýöÛ(o­“¾ïNIÁ#}ùÂ9)'Î:àÑ–Þ¸í7$!]�Ø•¬×-ðjþ@ƒG~þ 뺹öÁW¤41 ¢{üq´_:=|¨#´ÍŽtÒߘ~ÞÒ÷/œ“âK:ÇœuÀ¡Oe 1/˃›’.�ìÊ6®/‹.e]7×>øŠœ&4ûoÿí¿öqÑdûÓ¿‘/œ“âK:ÇœuÀXU ó²Ü8¸é é@Þ%5gÏzíâÚ_ÑÓ„[ûhÑdóæÈÎIñ%cÎ:Òê³úÑöØØn:HBº�°+Û¼¾hÀHGZûHIY×͵¾¢§ ýíè>.›ô7¦ÿ#_8'åÄYGéi #½�Ú*±H/˃›’.�ìʶ¯/~ð( ®}ð9MØ`«?i-$}˜«}m«6ß¡0?ŽYÒ9欣´ô†dG{p;áCzYnÜt„t`Wvq}Ѽ„}�¥ý¶lŠk|EN¶OQ7P´È±G8fI瘳ŽRÚæSÂ2Ërãঃ$¤ �ÇH¯]:mZ{¹¼×¾74ªë¬G×4ëæ˜×¥\ËÈÌÊæ^†Á…œTÛÒO½1c iÖ*ñöÔZ nͼlŠœ&lm¢4Žõ88Â1K:Çœu”Ž éDÐèp¸é éÀ®ìòú¢ëþâ‹/¢ÿ7 qíKë­ôš¤ÒìÉíøFz­ºœÔ»2›ÙûvÛ“få4{oe<|!­ZUêÝkÙÆæ&bÇzþøî;ù}¿/ýpúýwïäæý" m_Ò9欣TÜ Ñ:O;,˃›’.�ìÊ>®/›ö›Èµ/¥û¾´«ù©Á×*©I»¿:O.ÒDŒã?œ“âK:Çœu”A£íËrãXÙ[ôºÒ¬Õ§´a eØòVe=ÙUüwB÷»'ÝfÝٖͶÌ3Ñu6nnqrR‘ZûÊiÿÎãy:ý¹4œ×áÔd}v$ývÍ™÷oä/ÿòß8¯Ã)éz;óý:m~Í×åwÅ]÷&Á£ío[xÏ|Ñ‘FÅ·™û‘?¯)—ýa\Kf4^·)µê§¼|j>S—Vï;¹¹²¯O¥Ñ}¥ƒñ°/A»!•Ûò¼þ¯ë«4¤seÖ·”ï°÷ùGò¼ÿé4NÃïrÒÜ´°dæèw~-íhÝúy§©ÛdßM:´¯_I²ïgáw¾ gš<‚»=Ñr 뿼’áUtypòˆsR|I瘳ŽR h´Ynë.;m+¾«@Ñl»Êúøµž®¸:óXÏiÖ ™ §&¿s "Ü8×µqxékIU›9¯+'ñµÐ7tåì<»‚èºy7=2oÍ‹›'TZÒ»ÝøŠºÓë‹¿îuƒGÛݶ;¹ I¥òH‚›;‘Ñ•´ks}˨ߑZíSé Ãy¶¹WôÙ[tFÛ2 é}è\ƒ 6ÀòNúí3s.þ×ø¼èç+çÒ½Ïàè•t5h’æ\y÷Ž»0mÔ£ï®H­È`ô>Þ“ †æÎ2WãhÙþ„¯=ã›@Î+§r¼—4û|œÀfôú½s,̾Ûc1 †Ú¼‰“/‰Žõ™ùÜɰ÷©ÔÂcßzô»ÁqÈ#ÎI9qÖQxv'Ëc“ewY%|¶»}·rÝ=—JÒø<ÚRó2#@Néoüì‘4£ Àl¡\¯}œßþÒká0 ÷:];ªÒÞ˜7’˜B½S`ßÄ.¯/Ië^'x´Õm_K·¾èÁE„›¹V›à]üž9Ö“{_ûÖÖ´±ÁSëÌ97¬/ÎñîqÚ™ŠæÒÒܽfÕþ¸L0haŸHþ¾ûéΟïoŸ šÎÜ·MÐsæ½t¸Æ8ùÃ9)¾¤sÌYG¡4Ú­,7ŽtËÞÉpR=¼.›Je’A³UÚmÓµéëσ_O«¸·^ÈÍÍKóúD*K¹¥xîwÐ*ë&h4Y_R¡J×TÅý— ZR›|™RfpÇC»Þð{?ŽŽI¼-þ¶9¯?ä¥mΠOˆo^ËÕ¤yÃyôý�rH ìAx=ÑúûíHß\K-^wÚàÑV·mÙ1 ¼(7ø“=p¤ç¸‘xßJàmÏÚ£•ûãZ•Žü}÷?ïÏ÷·o~~ø ïx¥Çý0ÆqÈÎIñ%cÎ: ‹ Ñîe¹q¬^ÖT?·}%Øêç&ƒgÖ4Ð¿ŽŸpêk±UÜm•÷ûx}©ž‚šÌŸ®/Ê�¢ÊzRÔa2˺MšažVñO»ÿæøÚà—m^vtšhßH£óR†c»o&óîmÛ}ôôÛôûdš3ÄÍÂ×¶ß Ó”B?³¸¹ €ƒÑßõ…^ïìµ#Lk \¯}Ç8Ú%½v-’&x´lùµ™knró?T™¹Öë{§¦†’ïY?pßœŸø‰ÓÎ:5ŽVíËÜË6£ó÷ÝOwó÷åÙí³Çæ¡tïãØ÷6ùm«iâˆqò‡sR|I瘳ŽB"h”«o:λæ?¹êµPf:Ï^ç)hæ dÖ*ëó럓˜áN»ÿ&3;É@û…e̾¹™o?3¿êµÉìÏeþÃt‘ׂ!G?üðƒ ƒ…S“I_oLÃQàH™>tL ü.¼öPãhùºW¶»möü¸ýQ…÷ŸÎ3ŒmT¶ƒë±Œ®/¥QµÍÍ}jr}÷ƒ-öAŠ Ž˜k·íãÈ<䩸ýX-3Ó¬Ìn›]·}í¤¥¹>±VíϬø¡Å4è/ÿ ¹Œ¾Ï¿G›×“ ?ß~·ó@ÊnŸ­Ý=”©ÑÇQÇzâë óͼ_¤Ír⬣píO–ÇÊeç ó…‘U¯—NVÉ8J ü¬œIZÞã£u÷?îÀûÁl'¡©žŠ&l›¾V½&pl…"ôw³jú³?û³(È´1ý OG¡I-Ð3yÒþÉLàhîÚãÐÚ(?v?]Ž?p”ƲàÑÖ·m<œ6ÖÉv"· F\3ÇÙ.S}"Á3½g-xÝ˾‹¯Ýµ¥ajVOåJ;ª^Åܦës§ y< ïiÓ×Áïž…éjö3ñ½tÑþ$q›ÀëdNþ¾7¥ýÄyÝèJàÎo<“ßE÷só:zOÓçx¾‰ºµmMº<Ž÷8Äy²8mLó:Å@Ú,¾¤sÌYG¡4Ú¯,7Ž•Ë&Tµ_(Z7p²œñ .þ|ÿû³VYŸ_ÿ/³þþÏö¥”:³ŸTÝß ­zMàØš>ø úí,›¾ùæóé éoØ )§‰éô·Š®5•„¦BZCã9sß® I×eýlG:ÑõË¿þ:n{òIÇùî%t;w%íºv¹m»e®Ýƒz˜w¼ib»Žõ8Äy²øú;s},�Òfñ%cÎ: ƒ Ñþe¹q¬^ÖV‡·} Ù§ÛzÖ`Ìß›*â602_eÜÙ%~T˜Irè*릠¤Á™›+¹ óË$VñO¿ÿÑëe©%ìºìɶ#í(;Zÿ̶…ì±°@?0èôƒ´n?@Ù­ªuôñÇ›On.jâSŸvˆmÙþÊf F¶8ÛG]ô¦©â7!ò¯S+¤jƒÓþõ6wÐÞ#ì5÷€ô8§•<Zgù|1£ úðÁrÇ›&¶ëXÃß}'¿ï÷¥N¿ÿîüѼ_¤ÍâK:ÇœuA£ã“ê¦ãVµ¯œËÏñXªµ¦t{yç<ÉѲŸ´›3¯ÛAW¦UÚý×)›EØÏ¤Êz¸¬í€6 Îx9rSƒgæ;'SºýŸtP=y_§´ÛèV÷?•ÆÏŸJ³.ÛíÉàÝÕ̶UŸ´å‰ûºýLž™ÚEI¯yr ¬ïÏÿüϧ¿!gÊÜDMlíI»N¬·âÎñÏü'êv$Jg[*޼˜4!ò×;?Eå¨öRòührk>® Ÿß•u×ív¹m»3­)MÞµÛ­q‘8q­_J8yÄ9)¾¤sÌYÇÑ#ht8YnÜtM;}&_zµŸ´éÉYg£ZHÛ@º�Ö§ÍÐþé?ý§ÑïÇŸ27Q+=yâò¶m8<ÒDŒã?œ“âK:Çœu5‚F‡•åÆÁMçÀ¢¦av8}óž6% žH3ê(ô0H@z:Jšíßè?ý§ÿ$<ˆþ¶Ó6š¨É.¯/›®[ƒGZ+l—Û†ãDšˆqò‡sR|Iç˜³Ž£EÐèð²Ü8zÓYÚÌK§4£žeá5…››ÒvàÅ ûÓŒ.œL3ÀÑ®Àrßÿ}Òß‹lS4rßþN³7Q+ž]^_²¬ÛÖ<Òó X»L¯Ç„ã?œ“râ¬ãhi¦™Œñae¹qpÓAÒ°˜>$±A½j#—ηµWh¢6/Ï×Ý6=w`q?Œqò‡sR|Iç˜³Ž£d«v“Á:¬,7n:HBº�’im"½ïiÓ4(w—~Ž&jÉvy}ɺn]^kPëù¥5÷ئüM(¶¤sÌYÇÑ!h”YnÜt„t$Óûž…Vt>5q÷/ëµK—×sG|XÜJÒõ‡+ŽŠV½×„¼ìi+Ž"$!]�É$d·ËëKÖuÛå Áâ~ O¸"áhØáj åG–L "$!]�Ø•<__ÜmÓcZÃLƒG(/î‡�%éúà GÁèì3_²djÈ! épŒ_Kðè©ôw9Èc‰ìòú’uÝþòÚ_ƒGÚ<åÄýÀ¡$]¸"!÷È<åW–L "$!]�Ö­\wÏ¥Rm8:Y¯]º<“?@^pEB®4*.2DHBºÀqËhГn³.•Æcy\«„iùB‚á]øþ×Ònœš‚`]š—W2›ÅäV/:Ò¨˜‚b­)—ýa¸64Š–Ñ©*àY›Úåõ%ëºãóÌÄ4;À!$]¸"!·l†ί,™2DHBºÀQºïK»ô*çÜØÀÐèJÚµ3iõnd,w2ì}*µ“S9^‡¯Ç2êw¤VûTzÃ;‘ñôZu9©<’à&|-#é·krB£­ÉóõeÙ¶Ñ\¿œ¸8”¤ëW$䣊‡,™]–‰)i*»¤cÂtøi%<ª¶ûÇyÆrÛkyMÍÞJ¯ùÀƒâ¿§ŸÝö¤Y±ë ptLR¥‘%V-Ï�!å“5MÀ¦’®?\‘;ŽG–L "$!]p ò(Õ9™ %~îe\„ë»àÍo½Ï«74ªrÒdHàhëvùÛʺî4Ë<*—]¦W�XW$䎌´‰š6UC¾eÉÔ!BÒÇ R“¹À‘ =”îà}ôÎä½zWc$Šþ6³£ÀѩԻ×ÚÀÑ–åù·•vÛ´ÏGýì`00ï ¨¸�8”¤ëW$äŠfˆ4h¤b#ÿ²djÈ! é‚cG©ÎÉL33üWi\Êõh,2z%ÝFmÒÇQÔ”íäTÝW2ÒPÑõ¥4ª^G•–ôn®ä2„Ÿ@»üme]÷:Ë“W*î�%éúà ¹ñÅ_:2Y25dˆ„tÁ1È£•çÄé[§iðHG[óFU ®eÍSþ¨j- ·fžé<û¤"µf  <!·V¦‘Ö]^Ñ<Mú‹+kš€M%]¸"!h·_>dˆ„tÁ1È#ÎI1ìò<f]÷ºËÓdñqÝ'\‘ppZÃHoŽA˜wp,²djÈ! é‚cGœ“bÈóyÜdÛ´/H­u¤M×P<\w�JÒõ‡+ŠLÏqË’©!C„$¤ ŽA-:'tP|\vùÛʺîM—ׇošÒæþGÏmòI§ð;M¯�°LÒõ‡+†jÖÇ/K¦† ’.8yäŸ}èaG·TÖ´eùÂ4÷'p4ƒë €<ኄƒÑŽ?øà‚F%E†IHƒ<²çDïWÚ¬Zkxèý‹GÇe—¿­¬ëκ¼¦K]ÇQ§IG3v™^`™¤ëW$CÉC–L "$!]p òHÏ‰ÖæÐû–Nß|ó™ƒc²ËßVÖuocÛŽ>oõÇwòÝïûÒï‡Óï¿“w4ï—÷�‡’týኄ½³Uª¿ýö[óŽU–L "$!]p òFkpè9ÑIû‘¡–,’dýÝnëwO�ÅÁ½�À¡$]¸"a¯lœ§µÈ–!ËhГn³.Õv_âÚìo$hT×Û¶ÁúGׄۨûzrR—fp-#3këFéu›RÛKõþ[ôºÒ¬Õ¥Ý7{4 ¤qR›¾ÞåôÇà¾ß–j”¶MüîYx^’æH¥Ñ– ? M¡èü¥ø\˜‚ûíZâç&S#aôÙ$÷áW]8Ÿ? ÓÌ;3/äo‡³®ñ°/A»!•Éüð7ÕíÉ`oÙüºÝ©"µæ/ä—“ýXöYªòøâ¿EMªí{Ú¯Ž›žÇ]ɺîmm›ŒlðÇm—é�ÖÅ {cGþ`µâÈ’©É”!rúAØ] («·Òk>J³'·ãéµêrRïÊÀ–q×v'7Á§ÒI ̼—A÷at<Öéb|È£ÎúÇo°È(ò‘QN îû9k_™`¤ØŒÒÜy|~Æ×Ò­Wœ Œ^¿–vã4ü®‡Ò¼ÞM÷9 ]Lƒ=^Àp<|!­³Nª48IGµO¥7¼3ï*ýíœI³÷Ö¼·ãúR þ&Päl›·üxЕúIUÁóÎ û_J³îÛÉ©4º¯¦ÜÛž4+îgµàýÿ“ÿø?þŸ¢ó …oûÀÇ/Ïçq›ÛF~«¸î�8”¤ëW$ìOÀŠ)K¦&s†Èr8ÚêöÙ‚ó²@© ’6p4z%ݰнéöÅ…~G»öŒ‡¯ä“€É|¸éüxž_(>‡nÐ$Íçîdø‡W2´йšfÞü%¢À×ãÇaº>‘Êy 7“e4-7¦ë]I[ƒ> W ~žûËGÛ4 ŠØõ¸Á²èw:ý¬Ö†µý¹#T‘.‹a—ç1뺷½m6à©fã8qÝp(I×®HØ FP+¦,™šM–_J'ªýP‘š)pÆe­}à6]s^ÈËŽiÞ¢5n^Ë•}]9—îõ­Yû2þúmS­Gò¼ÿ›é6ÙÚsÍ~lÁ:\îE'ÚîèýZS.'Mg±A#g}^Á>掜æDÑg½×&h4YŸ6i® ÝÉðê©ÙŽº<n~Cg¿fš®M_üzz|Z/俯žCmu)דfF1}¿ì6;ËšR&„l¨<’àf6ø´ús޹ÀQz÷ýŸÊEðwr< Ó’óû™ å¶×Šæ×»× ¿•¸fßL0hQà(i]&pôçÿ—ÿgtÒ€Ñÿãÿþ±\üŸÿëÌq$]b•¬idi¬0Ãô—×�‡’týኄc5$Y;CÕx ÎKŽïdØûTjá:¢‚²ßtÍ6¹ _Ûà­™pRkI0¸5ë«ÄMÉÌW,ä­ÿ.j £¯mÓ™÷¦ðë`æjeÔïHÍ6«±Í×È=«kø¸#}m Ô“ €÷znû–1Û^iHçj(c»íf{&MŽÌ븩P|¼âà=>öxÝÇë;yà4GŠ­. h³c"pdÎÉtòÚÏ92Ž4¸ó.L»gá÷Ô¥Õ»ÑÔæŽlÐsÑw$Ì_8 S²I›öwÿýëÿ"µäïïüïBßÃñÛåy̺î]m›vè~4y0ç^Ëpü\w�NÒõ‡+vŠÔŠ-K¦f½eMMJKz·¦ÎøXõz®`P»bo}q°d(š ìÌ}¸™¾Eý«¸ŸYlýÀ‘y=Ù?ïõÜö-o»dó·gÕë¹�ÂÂ=åMAŠÀÑ$-LkÐiŸ?çÁëð•ösŽ­ŽBãלۚM?„iu÷£—á}Iuíý#ùñÏþßæágúþ"]CžÏã.·Í>ÀË=s_ÒcAàˆë€ÃIºþpEÂÎ0‚ZñeÉÔ¬·¬ ùU¯8šÛ•~æÖ?Ç?F^ È¸= $|vU hn{ ¥¶Ù1ðÓ·kA:3ËišIû9ǶG¡¨cm탨֒vóC³ÎÝ5U{ûÃòò¯ºaÚN2¹H—ŰËó˜uÝ»Ü6í&@ód¹gî5z,qÝp8I×®HØ ¶XŸn1¢G±eÉÔ¬·¬5ì¨k™ï›éàWß;]P ž5·þ9)Göûç¶o ÓôGû±Ù1ðÓ·kAZ7i`eàhîsŽ-Ž4°7aÔ‚£³N¸ªu¤ïõ‰µQçØnóÐhß•Å.ÏcÖu“ÆB|'ßý¾/ý~8ýþ;y÷Gó~I‘&�ä W$ì#¨a•u3Dq“iŸB¶#íg( ¼øÍ¾ÌëI°Ã~Ø~Ò‘?³~[sÁÖr°¯ç »Ó`‹ýŒ<,$k§×Õuú8Ò¾fÒ¿üUÂ6›š“àš E¯ïe4Ìpäá1ÓÀ€ Tš/ä¦ÿ\[[#‘î¿.ÍàZF“>Žôøë1ø{oÿí¾NûƉϟÿz¾ å Á²>»æ†Ù®%ˆš 9R§ýÜ„ ô,éi¡;¹ ~"õ¹uêûÚ–Œ²ß£¿ÿ/¥§Íè6Žßö£dD¿Óùt8^ÉeëÉä·Iº,†]žÇ¬ë&ÁGš�p(I×®HØ:Û–^k¡Ø²djÖ_ÖÕëT?*Íj]šÝž Þ……f­®S§ê“¶<q_·ŸÉ3­I±àõ\ Ÿ­qa??3]ȳà‰ÄCǯƒß=“ÙQÕlÍ$T5ÓQw¶¶Dâ2&Hd¿/ªbSöxu~-Áçu§à=í8 Å+Zl<œîç¿x,ÕZSº½¼‹‚Zæ»Ãÿ“vsæu;è:ÇÃ=[ÛCß+»uAT´ÇS§iM¸¸ö;ÏÂsyŸös^šÓiÕïhÂÔl²Ëù5™¢Àä¹W‹IE¶¿%ûæ÷?©…tîÆ…3ßÂß@ø»ïM~;Ë>OnN_ãøíò<f]7i >Ò€CIºþpEÂVÙΰ¢-=2Ë’©!C„$¤ ŽAqN°JÖ4Bƒ4àP’®?\‘°5:Ô«Ö4 ‚À¼,F†IHƒ<âœÃ.ÏcÖu“Æà#M�È®HØ ±ãƒ>?þؼƒ2È’©ÉS†h¾©7¥n‚³™²¿K¿¯ìŽþ,mÚ©“Ó”îHèvãøåù<’Æà#M�8”¤ëW$lÅgŸ}Ž4€„òÈ’©!C„$¤ ŽAqNŠa—ç1ëºIcð‘&�JÒõ‡+2ûæ›o¢Ä¥MÕP.Y25dˆ„tÁ1È#Î VÉšFHc!·¶¢ßi~ ‘&�JÒõ‡+2ÑN°5ai§ØÀ:È! é‚cGœ“bØåy̺nÒXˆÀÑ Ò€CIºþpEÂÆ´Yšv†­Ã²djÈ! é‚cGœ“bÈóy$…Í M�8”¤ëW$lì£>Š&ú5*¯,™2DHBºàäç¤vy³®›4úã;ùî÷}é÷Ãé÷ßÉ»?š÷KŠ4àP’®?\‘°‘/¾ø"ªmD¿Få–%SC†IHƒ<âœÃ.ÏcÖu“Æà#M�È®HXÛ·ß~ÝÌô”[–L "$!]p òˆsR »<Y×Mƒ4àP’®?\‘°­a¤5´Æ%SC†IHƒ<âœÃ.ÏcÖu“Æà#M�8”¤ëW$¤¦}iŸFü±ye—%SC†IHƒ<âœ`•¬i„4iÀ¡$]¸"!5Û¯acô‚ÄÄ”4•Ç 8'ŰËó˜uݤ1øH�ò„+R±ý ó-SC†IHƒ<âœCžÏ#i >Ò€CIºþpEÂJZÈ~$K¦† ’.8yÄ9)†]žÇ¬ë&ÁGš�p(I×®HXé³Ï>“>ø€&j˜“%SC†IHñ1`Êß,“5øé‰I'�8„¤ëW$,õòåË(áèhjÀ6‘!BÒÇ 8'ŰËóHÙíA¥ÆBÞ�#éžÆ] ýðÃQµ Ì;À¬,e2ÙHBºàäç¤8ùgG:iTûØ�ìWÒý’;(Òa÷õ‰°H–L8x$!]p òˆsR »<¤‘ípGvâ&�ìWÒ=»éMZŸôh­#`‘¤‹JZY–Eq‘.8yÄ9)†]žGÒÈv$ŽtÒ‡™ôµ �‡Ã]s´M¹Þ¤¿ùæóLÓɦ²,‹ÃÛUP™tÁ1È#ÎI1ìò<’F¶cQàH'¨…~�`÷ôšëã.‡9Ú<MŸì�«$]TÒʲ,Ëvš¯× 0oó)0é‚cGœ“bØåy$lDzÀ‘NZ^ïA�€ÝÑë­»f|ñÅÑM™êÀH#颒V–eqxš¹ÿÙÏ~]/ô\~öÙg[ÉÌ“.8yÄ9Á*¤‘íH8¢Ãl�Ø-½Þú¸ËaÂÞ¬¹!c’.H;uß—v59#OUi%A£š0/œ* i}Ž£•É0¸HþÜÉ©4Úô‡wÑצûÞ7ñgÉ´í©5»ÒÜÚ•-ÙvÌö i$Î7S#¡Y£Œ4p¤ïk¦^Jz=Ù„®£ì8ùÃ9)†]žGÒÈvØîüIï-Úÿ&6à0¸Ë!¢7bm;®> -ÍÌm*˲ÑàËYGú#ü˜àIµ-ý{y'ÃÞ§rÖî‡sÞË û0ܾ †ÑL‘Ñ@^´R9©H½{-Qì(4t¥>ø¹•Á‹Ž4*aF·Þ•AôUi¿w‰·=œwõ4Þžš]Þ¸íI³â­Æ2ê?•æä½·Òk>˜ EFWÒnþrö½^G´éš6aÓó«×­Å¸NH{O9Ä1ÈÎI1pƒž'wúÓ?ýSk€=Jº_rEDk h!'9XGÒE%­,Ënd<”?üah‚>~ð%4™okä8#eký¸A”¨VŽ|I¿]›.Ÿú{—È´íÞöXÑþøÛî3Ëú£4“¯O‡õº¢ç:mH{O9Ä1ÈÎI1ìò<’F¶G¥NÚßæÍÍMTÛˆ~�`’îiÜå5MÓıiÓ”W–Œr–e³K¾L$_nåº{.•“S9^Oƒ<s£±Œ®/£>•ó@næ¢A˾7­u¶}Zjn{Gã›@uÜÚO £ñk =]kûµéARHIA¤Ã¦‹|àäç«F¶G4¸yRû�p8ÜåJN nZ˜Óæ$À>6“&ø2[U^§J³'¶§ È¢~€*-éÝ&Õ!ÚWàhº-•F[ž÷22Ÿ˜°5¨œÏêTi6gk+yŸË°ý¨öûCrûUÓ÷ËŽc`l¤ÜÎI1ìò<’FvGóªz|©u�û‘tOã.WrZ€Ó';À&²d”›ÉN|qjÒë6¥nóL͹G·2èu¥Y«ÈIå‘7¦ƒì‰}ŽÂm¿ù; ÎOlGh5Ž’hA@ ~H‡MùÀ1P¦–_¦ßÊöpNŠóx¼ô!µŽ�`?’î—ÜAKŒ&jÈ*K&ü°ø5GÓQôIMÚ}S'±£±ÜöZR ÷o¶öŽÚcà(Üv /j6·ã>ŽÖ‘ÔR™ö·‘`Ò9¼Ö8ÓQúØŽÖçæ}(8©ÑfÒ˜ÿzd}$Ïû¿‘Nã4^¾}¦:Û4T?ï.s8¹;'ÈÒÈné}B1µŽ�`÷’îiÜåJJŸöÛ'üÀ¦²d”›ÉÞ$pd›m­ i¹-Õpÿ8ÒQÕn‚Gó}3©Ž\š.Ê~]:ìoã5ÌÎOMðQGÝëHmòx¦K­õB†aâ_H«V™*ý‘ûœ×ñˆ„6ؤ¨÷&­Ú´kÒ^¦ßÊöäêœ`c»<ºn;¹¯Ý¿WÍs'wžû÷ªyîäÎsÿö'wžû÷ªyîäÎsÿö§´óÜ¿ý)í<÷oJ;ÏýÛŸÜyî߫湓;ÏýÛŸÒÎsÿö§´óÜ¿ýÉçþ½jž;¹óÜ¿ý)í<÷or繯šçNî<÷ïUóÜÉçþíOiç¹û“;Ïý{Õ<wrç¹ûSÚyîßþ”vžû·?¥çþíOî<÷ïUóÜÉçþíOî<÷ïUóÜÉçþ½jž;¹óÜ¿ík_ò»(<-˜iÿ"IÓi-º°¤‘eÙì´À{¶ /¢„áøµvDЊšª¹ÃÚÏǬAÜTíä,,\¿3ï[˾7­4ÛþPºƒ÷ñ[¦àRiH;èGüHTˆ¯H½{=P¯ä²õÄ4o3µ¬ê]Ì~Hú—ŸJËFmÁaÓE>äéÄiÜIO®( 9ÔIm;óžœô^ÇÖéï,~m×GàÛÇy<n¶Ö5å`ÿ¸ƒ–ÞpõÆëvH l"K&ü`øI“;¹Ÿ74ªÎ<wršáLjö$}.œjM¹ì{Cì/ýÞ”ÖÚöé<Ûd-~ÿ4î|n~Š:_Ôñ·2¿ÓuϲMšêN€¢ØæÁáøÁ×l Çpká8BÎpŸöu¤Ãô�ö‹;h iÿ!Ú)6U–L8x$ñÓÅ´I“ Xd®ónm®÷©tŽ(è”§ßF|üH³÷ּ㈂D^­µè=SC)1p4ý<#�ë¢Ö�9¡’Ñhµ‰šÞxC¢ †$Ié"±fK"$®±Œ®/¥1Óœ*ÿrõÛ°MkŸJ/ªmºýt.5øcš2VÎ¥{}«3¢ã_µ}™rQ 6·¹gT#é6ÍÚl38¯™› iͶ›+¹ ÓàÔp½*Îc1èÃOjÀ~q- iÐè›o¾1ï�ÙdÉ„“ŸŠ#N30ÚcçÔ‡¦ûë› ÝÊàEG“¦wuiõn4ìàÄõ?HíñcçsáÔøòÿŠš½=FóQĈŽí û_š¾©Â÷ܦ†QNMðp›+îŽnCžŒ‡/ͨgñq¬4.åzá¨jΈkî9©4¤ó2Ï«ui^^É›+7Í_ȳàÉÌë <ÆqGÜþ:#oç›á<ƒírZG�°?ÜAKDŸÎ”}˜klW–L8x$IJ3#·ù“­ 3é¼{¾y“»ì4@7;Ê\ÔTÕÔšßH¯U7}8Å#}UM d2jXTƒfwømäç¤8Å¡yZº]�€ýáZ/_¾Œ2Lßÿ½yÈ.K&œ <’$¥‹ÙG.?P´<p”ôz:­íb§ð3W-ݺ©…äN;îwG¿ùÂ9òÅÖ:¢ë�ØrB% Cîk5íßÈ bH’”.æƒ=Ú´ì×òÜ6‘Ê82ËLj-9¼Îœ÷…ßFþpNŠóX,ZëHGY�ìwÐЛê|€mÊ’ '$Iéb&Ø5%{(öWôúÒË\ãÈ,Sy$Á×w‘íÜÙvö¼'ü6ò‡sR œÇb¡Ö�ìwЂ£AìR–L8x$™Ov´­xHø8ðc†‡·}ù#g$®»ÉçÒ¿ü¥\½pGîŠÙ!ÿ+§ru|=–Qÿ¹ƒw¦Û©4:/eÞ…ëùÕ|í¤-â·‘?œ Ÿ¨u�ûAN¨À´†‘Ö4↊]!p„móÓE(²ý Õ¤Ýû¯ÒFøÒѶ.¥×û* -éë~~$®Ñ•´u´´ZKžuÏ®k<º“áÕÓ™‘Útä¯(P4ÊUÇŽNîˆk;âç¤8Åóí·ßFç•ZG�°[ÜA Lû4Ò¾h¢†]É’ '$¤ ŽAqNŠóXL<$… ixµ‰S ¤×mJÍi掲º“ÒEt¯ˆ§³0M½3óBQ:³óÂéaCUçõ‰õW™î&ó!Ù¨:Ÿ=‘j»~£ËÿþpÊQºäZP:zš&6M ØMc›Ê²,ŠëÒÅ®¯«ü6ò‡sR œÇb²#Sëë3MÜÃô“§:oRã½ö©ô¢n ¬·ÒkžÅ]&L^?ˆ»I¸õë£ëȽçr¼65Õg»_Xè¶'ÍʉTš=¹5oåwЂÒ6ß:»”%ݤ™˜¦¼ÓmÔÚœú„{“þã´¨÷9†cÌÉ€oúä7§Ž÷œ�å µŽ=›™X¸ïwäìñ㨃ÙAR4½4œ<βô£5ˆ>™ÉÅ© †K[T[É©½”ä„ ˆöÞ8ÄäÒ…~¾ùæù裢íÕË_|‘úš«OÇ5ð´èóÇûÛ p„|ã<—½®Ò=CÝʠוf­nî;öõ#yÞÿtl¿ˆí«ð.e¸ý†Ÿkêg&ÿ;ö¿ŒúOŒîg¦oÃx°øWôÙ÷¶)Rþ øÈî¾ÿS¹þNn‚Ga:qÓ#ˆ-Ä�»–%NIŽ-]hðGŸrëuW·]ƒITZVxùì³Ï&ŸMúÜñþ6!ß8@ñLшï;v¤Ôx (ã½)üÛÂú»ð^u6Iu<|!- ™‚ÿø&óê¹t¯oõ…ôZuÓ é^F×—Ò¨„ëm½á½ŽìúPšÁõ4 …ˆG¸‰Ó‹œÒêÝ踻ŽP tˆ}Ê’ '$Çœ.´ù™6_Ók°î‡ˆô)¸=ÖyvJ ï1¸—wßýôûýpúùîÝ’LÑ‘9Þsç(¦¸0>}`áÎgæGýǸ}̸í“æáä=ìºÇfôÖªÔjuit_4*¨ià(4Ö á©œTIpó#?-|hEŸvû%žeYWQÒ…6¶5‹ôº¬%}Ï6%v'4 }ùÂ9€üZ'päv¶àoþ®weà÷s<a:CöGÜB¡ÌŽB“šiµ–´›:éÇŒ„–8Ò@äOœÏΧÍDްkZøÐæÀ1  †$EKÐ×ZG¶?¤?ýÓ?þ÷'7x¤¯‘/œ“bà<Å´Nà(nʶ¨Æ‘ù;ªY⎤eÝɰ÷D­¯$øülÉçpìüÀÑ´¶™æÛÜÀ£ <”îà½yÏÒ ãÅÌû‹Gág?ùy|Z8ÒQÙ:ÒqQûÄ´ ìðûú4Ø—,™p2ðHRät¡ý!ýÉŸüI´I“HÿF¾pNŠó‘âÜæík[÷毥[kŽƒÛiM½×»r}÷‘dû@ÒåGýçÑg‡½O¥Þ¸”ëÑ8|Û4_š®ÇïNn‚ŸHÝíP=¢ïkYnà(L Ú/–޾6I3¡Ñ@^´R‘ÍO«†é¬½j‡ß7ÃñWÛ}™†—îdxõTÕ¤aÿ÷ƒ;hA0ü>!K&œ <’9]$5Só'­¤ÿ#_8'@^ù#j¡lâö>Z“'í¦óúBžOf^kMñð¥mM ûùE³&µfWz-¶›zXp—©KóòJ†74¢×q¡ö{W4=Ây#A£jÎk8ùMТÓϽëÍXFƒžt›õér'§Òh- 2F¼õÎMZ î1µ—’æÇSÅ—€œPØÂˆÖ:Ž…¦YÀWät¡ÍÑìÕ„|áœç±x¦…wï þ"ZKäÑÓ„¾H��Ëp-�í×Èï\؇,™p2ðHRäta‡ì÷'}_kŒ~ñÅQs5}ùÂ9)Îc1¹ý×,w+×Ýs©$vb �X†;è‘cø}R–L8x$)jºÐþ48¤A~½nkMÑEµD÷˜NEÃíOýôÿHp½*ÎcQ¸M‰êò¸ù¡ÓgÈ­ ^tfšµz7Ú³H4ŠÞÓI;žýŸe4øZÚ¦ÉÒÉIEj­2<L÷!�kÜA˜~ßv¨ ì[–L8x$!]ó1 p`×ÌÈF•†t®†2ŽúÑ~EÌ5ÇÈv^<ZÝ=ËyÝd8éô6id$��9¡#¦Í~ǪÔ±¡v°¸fÁzt-Á¤Ó½º4ƒko¤‡M™aDתº+ƒ e†$­H­8ÿeCÀQ‘.‹óX:¼õƒ™b7U[(Zp¿Kßä �ʇ;è‘Òfšbø}R–L8øu8eûtuòußÌP¢ô}44mm‹OhIÇ| îåÝw#ý~?œþF¾{WœNDH—ÅÀy,€¨FÑì0ÕóŸ;ö-ÏÛ¸iÚŠÀÑxØ—_>o›æmŽ� wÐ#Åðûȃ,™p2ðkHÈ(Îò'¶Y‘.8yÄ9)ÎcŒ¯¥[¯,®q=\y(öWôúÒ[Zãè.zøQo´åyðùÛÞçÔ8€¸ƒ¡Á`e~~‡–%¾› ¼×)f­%ÁÀf-ýyM¹ì%îö` ½nSjÕO%x9íp³ÕûNn&pžJ£û*Ìvê“Ì@ÚɇíKé˜N5+§r5¼‹¾i¹p;z]iÖê&sj_?’çýߘõU¤Ö¾ ¿+5k3ÛM&Snó û45j.ö¥ô~ÿØë�Ôiê6ÙwÍHëçzÒmþXÏ+W³þZGúQS´74ªfñ³ÖyµQ£º|Ùq ò‡säÅ{tÆ÷½Mú8Ò{ÏCùy÷©ž<fïmxë3}ù#­1{s%—Ϻòy5¼GA(ÛÇ#�HBNè1ü>Š`û1“é«<’àæ.Ì^I»V™6´3ÍÚ§ÒÓàŠÍhFŸ½5™PÍtšàÍlN,ïÂÌæYœÙ|óBš&øTi\Êõè^F×—QpÉ}ºHüdT—3§ãAWêÑkÛWÐ{“y½`hªôÌÕ8Òíùñdô—ñð…´Â}­œr“¬ßr^9•óàux$̾Di“‰Öï××wñ“Üèµ ºÅËšŽF# 5Ž¢c}fF®‰ŸàÖÂcßz¶Ÿ.ŽÇ 8'ÅÀy,ˆñpú`£r.?ÿÅc©ÖšÒí d4z%]û�¦y)½ÞWÒÔû£½_k^`r¿ýïÓ‘ÖôaRï…<×¾Ãuv¯WÝÍ \¸ƒ™—/_2ü>r#K&|ëø¨úzUêÝë„`EÜGÐLS¯Û^�Šßóƒ!~‡Ñæµ æDµ€Ü`Šyõû³:Tâ÷Ç¿žŠæúkðGѶ»OEM¿C‰OJͶ-ìÉÛwwD5´ò•ùn7dŽ÷Lp)% vƒ<âœç�€Íp=2ZÛˆá÷‘Y2á[ÏÀû×\ðC™fWÑ0¼YGÞü²Žææ«¹m²Ì¾Eû™$kàÈ­Ö;. vƒ<âœ���í*FûÖÑ͵BG™ºŽ!'tD¾ùæj¡0¶^Kè0sʉfjÝè{§¦†RÖÀ‘©Õ3<Y,kà(þþÊlíªè½¤ÑÍVÕ†Ê8²ÇÆýnóÞ#¿Q@?æc`ÒF¸ý Ç<â<�²ÐrxœÏ™4˜¤]Éhy]û#."î GB©¨m„<Ñ å¦²,›Ìvl©Zk_;ê­ô:Ïd0¶M¹l×ã¸_¢ªéÉ6­šWü`‹ymƒ#QÆöq46} =H٧߬̾¶—„fg¦YÝ4(f·×öÃpõÓP]ÚÇQeÒ'Rü¿Ëèû¼feÑw9A©™&}Ê?V!»}æxHÔÇD>Ž6t¼Ç€Àòó”ƒÖÑ2“?iÁÞŽLm§~øÁ,¤óÙgŸ™¼ÎòIƒHEÂôHèÅŽÚFȽ(n*˲ ¹fê4ÓÁå¢×ÜÂn8UŸHðLkÐ,x­5ƒ~÷,ªñSk|(µè½Sit^¦E,®Md×U“'í¦óúBžOf^Çße_›÷´fÒܨjÚÑç¢ ¸“ádt8l�ÍÛ÷™©*gÏ¢ÚF“×Á_y£ªÙšI £ªÙQÛ֤˗ÝñGÈ7Î#P ŠïEË'mn¬KBIéÉŠ8wÐ#@m#ä•^7•eÙƒ[ØŸ²:êt±%Ç{ îåÝw#ý~?œþF¾{×Q+Ò%�­E¤×íe“öËylbUú*êèç䄎€Œ¸¸¡hôÂz´’úÂVuºØŽAþpNŠó”ǪZGE퇻óí·ßFéJ+t$¥)Š4RÜAsÎÖ6Ò¶º@ÞèrSY–=(Ó¿Q|ƒðk-kú¥µ”VÑãTvƒüáœçJšèÛ¦ØôüþóþÏ£síOÚG †,ú裢¦jÿá?ü‡¹tUä ‘âšs¶¶Gz‘ÜT–eQ\¤ ŽAqNŠóKóÖE/ä•™>x×2”þæý‰>c±Ê¢`‘l¶h;•ázÂ4ÇlûIj!¯4}n*˲(.ÒÇ 8'ÅÀy„¥ykMÔ:*-ôk`P ýÿù?ÿçIáßN:ð¥ ùìgut¾2àšcšx©m„¢Ò -à#]p òˆsR œG¸4ͨZÅñý÷ßGxýkÊÖ*rk•¥€tü`‘6aÔ rÚ€².«¦²Ô`ãšSÔ6Â1Ð4º©,Ë¢¸Hñ1`Êß„ãÇy„KóØZ`¤ÙÒqÓó§@ý}k`HH.¯çY'j˜aQ°h“ë€6W+Óõƒ;hNÙ&gY2ádà‘„t�Ø­u¤5Rp¼lPhÙÃv=ÇÚìå£M ÚF°¨ÌÈ¡ç­mÄ0‘(2HBº�°+\_à£ÖÑñÓÚFœ?,¢×}eÇ4‡´¶mpq ²dÂÉÀ# éÀ®p}AjÅE°h{¸ƒæŒÚÚF8ްm¤ �»ÂõI4hD­£ ¤×mJ­Ú–þ½yq/Ãà"º¾N¦uϳM@†æ­Yæ;&뽕A¯+ÍZ]ÚýQô‰¤·àš3ZÓˆÚF8Y2ádà‘„t�Ø' iàˆZG»2’~»¶Y@Çã¶'ÍʉTš=¹5o¥ó^݇qúX8š5t¥®Ÿ?©%ŽHo»B=Gt�MäÔ6BDt&¦„ �vë Ñ ‘6Yî˜Â<ùâºïK»Z•FðÆ¼±“>RŽÔ}¿-ÕÄÀ‘"½íwСo#›,™p7PÀÄäN�° \_°ˆ­u¤ý¡`Ü‚ülÓ¦j»/÷r'Ãþ—Ò¬Uâ÷kM¹ì¿‘· ” Ä}ïB‚!QÜH8º•Á‹Ž4*æœÖZ ´~’ }%ý«§fþ™´ûïâÅšžÍŽÆC¹ê4¤­÷‘4§޶Œ;hN0’Ž‘¦ÙMeYÅEº�°+\_° µŽvÉ ½È‹ö#9ï¼”á8ž;¾ ä¼z.Ýë[}!½V]N*-éÝÞ˨ߑšD·Òk^HwðÞ¼F.¬ ÝÉMðH*•GÜÜ…IâJÚµŠ šôqR—VïFÆãלŸšHvÞÉL h6pô.üÌ™TOåjx'ãá ii’ÀÑVqÍ J’›Ž #léÀ®p}Á2Ô:Ú%Sø¯üX>”fp¾c9}ÜÌL6( ¢R9äf™.Zëö£ƒ[8_K·^•z÷ZL¼ÐakÙ¦j ^/ Eý+=fïm<3áóÈŽ;hp£B‘GÒ€]áú‚Ux»+6pô#©ý¨2 Å̼zWó…ÐØ©u4”A÷  7VŽ–Î_(J8šk¶–ðydÇ4¨‹c•%NIH�v…ë V±]Gð0wÛ¦ù«×œWN¥Ñ}¾ë̳M˜’˜¦K•ÇŸËçgŸHï61„CZËm¯#«¿–n½²`Ôµ¢”£x”5jíwÐРC€â8¶‘.��‡¤ƒÕð@wÛâæfqAÞôuãô[d‡W·}ÔĵŒžK0éÇHƒ­p™Ê‚¦N883Üg‘u'Cí캪ýU½7çÝôcÍÓEç™ Æ&}Lj-x= Ùô`‚EQ3¸Ê¤³íIGašZ\“ ë"‡~`úDC›©is5 L éÀ®p}A X³m¦ö‡âuª>‘à™3ZZT«Äìh['ui^^M:ÏŽDÁé;wfGÉKš&µŒÜ‘Ïtªh‡è7³é£Ñ•`Ùëj[~û[­md^ÛZG×ÒÑ‘ÔÂ÷*Žü¢Y“Z³+½hÔ6lwÐÓ'Úž8FzqÞT–eQ\¤ �»Âõii­£?þؼB.h–3j�‡Âô€ôI†fbôÉpŒe·ÑŽŸšÌVï-'Ò€]áú‚´¨u”7Ú¼­)Ákš©åå×òáz@ú$CŸh�Ç*K&œ |ŒÀÑ,Ò� ¨u”ÍVúo:\Ö<RBÓ5ìÝ÷ß×>úˆüZ qÆDxúƒÓÿ2â†#p4‹t`W¸¾`6¯N­£õèñÒ®8´W?ýh·*zNõ÷`»Y¡ [>ÜA„§(‚,™p2ð±?¾ûN~ßïK?œ~ÿÝ;ù£y¿¬H�v…ë Ö¥yuòëéhÓ¥Ï>û,úéÿ4e:^‹„;èÐnE‘%NIH�v…ë Öeû#¥À¼œ6_ÒF` |sœaî `”À±Ë’ '$¤ �»Âõ› OÒÅÜfi[éÓ{E°ëàºgÿðÿ]\_¾|iÞŽ#léÀ®p}Á&l­#š^MÑ,íx,¦¸ƒî™Fãõ A–L8x$!]�Ø®/ØµŽ¦h–v|ü`‘ŽŠöÍ7ßðÃZ¸ƒîU9Q$ްm¤ �@ÞPëˆfidž`¶úió4½Øjs5 ì éÀ®p}AZð.c­# 4h+ýýèþSŽÉ¯o¿ý6:G‹° ÜA÷ˆj®(š,™p2ð±û~[ªá±ÐãQm÷åÞ¼_V¤ �»ÂõYè`MCe)„k€Hké>k�‚fiùdƒEZ9Áž+‚EØî {¢ÕõÇLÇc(’,™ð,˦¡7LÍäè U3>:iðV'{sÍC&ˆÀѬ]§ �åÅõ¥Xô|21111%OÛÆtO4¬V H²\”²,›&(äNvž¶õÖÏêSü<9#p4K��«â~¡µpÑTëP÷Æ2í+НLikûÊ/sô¢«…Y†à¦Ò\ÐÜà÷ªÁ]Î…Ž¥vßß}'¿ï÷¥N¿ÿîüѼ_ViÒ�l‚ëK±”é|²¯@vüŽ²á—¹¶Sl h²\”ì²¶ö¶ÇÖàl§~vÒ÷4p¤! $奶¶/Kš€e¸¾K™Î'û dÇï(~™{ …`-E³îEIki€H›nê²î¤¿[sH?£Á!:ö+ŸuÓ�¤Åõ¥XÊt>ÙW ;~GÙðËÜ1-üꉣ�Œ"ZvQÒ&ššþmÿCúY´öÖÒ¿©=ß²4�Yp})–2OöÈŽßQ6ü2wLkVh!("÷¢¤µ‰´Y¦¦y Tçé¤k-"çPËtñFz¤ �»Âõ¥XÊt>ÙW ;~GÙðËÜ!­q¡'MkU�EbkiúÖÚDv$3ý__k-£U5‰ÊtñFz¤ �»Âõ¥XÊt>ÙW ;~GÙðËÜ!í§EûmŠ@ki@È­M¤“Ö0ÒÚDëŽbV¦‹÷2 Ç?‹t�H£L÷ öÈŽßQ6ü2wHƒFZÐŽ‘Ö*²MÏl"Ûѻ֢ÓùY1ˆ8šEº�°+\_Š¥Lç“}²ãw” ¿ÌÑ‚µž0:ÅÆ1IªU¤}tií¹¤´œå¢´‹ Ú1"p4‹t`W¸¾K™Î'û dÇï(~™;¢…m­©äÙªZE«d¹(‘1ˆýñÝwòû~_úáôûïÞÉÍûeEº�°+\_Š¥Lç“}²ãw” ¿ÌКz²fy¤µŠ40”¶VÑ2Y.J»¸ áø‘.��i”é~Á¾Zc zÒmÖZÚ÷2 .ä¤Ú–þÊjÛ·2èu¥Y«K»?2ï¹FÒo×¢mˆ&gãáKé4N£÷+§r5¼‹ÞwkŽŸœÔ–¬·‘<o4^·)5wû‡4®Ë“´¼ë¾/íªÝ>·v»‹gÒ÷i¦ÆûÂÏÏÒý~8/ë9JZ~Vâ1¥‡è½ŠÔš Fã¹Ï—Å.öµ<Go´©b#Ol°HÓ¥^Hl­¢C7ËtñFz¤ �»Âõ¥XÊt>ÙWc|-Ýz%úÌ¢ Â2Ó�²�OMN Í;‘Ñ•´k¤Ñ}~â]ø™3©œrÇ%"ñº× ½—A÷a´?é‚*>'е4pT•FðƼsƒ)‰ÇÒÖe<Gö{—-oû…C;÷Nn‚¦œw^Êp<–Ñõ¥4*'RiöäÖ|Bé:ËbûZž£·GÚäGko�‡´(X´îègËd¹(•éâôH�v…ëK±”é|²¯ŽUVxüÀÑXn{-©TZÒ»5‘¢Ûž4+¤Ù{¿m8Ræ;7 ©Ë/E–ËMG*ã9Jóݳ£7´¾”Á$grî9 ñ;ʦ<GoO´¿ eq Ø„,ÒæhZn›Á"W–‹R™.ÞHt�H£L÷ öÕáfšjÙfN?–ÆóßÊU§!•p}'µŽôgš-™�OÔ$,®Ý^’Go¥×|0û^T«¦*õîµØ°ÄöG~s:ûú‘<ïÿÆ4—«H­}.©ÜåM“0³OÑ1ŠŽ×Gkž£ÙåßHШš}Šï|àÈ—Ü4neÚ*]ìkyŽÞžÐ)6ö-)X´IE›ÈrQ*ÓÅé‘.�ì ×—b)Óùd_3A4 —‰‚wÓfR'µ–ƒ[ßr^™N¦ž¼èÈùù´¿¢If&p.f(óïm+p¯g$ºR^Û~{ÞËMðH*“À‰³ü»¼h?2M¶âµÇÇë£õÏÑtù+y7øZÚç¤s5ô‚tËGZãèC'¸[™¶ dûZž£·tŠ}9d°È•å¢T¦‹7Ò#]�Ø®/ÅR¦óɾ:æ³—x~R"þ|t8•¥ît 3ë:`àHùëò%³óÍò•KãÃ‡Ò ®ÃwþñpÍKDzy!݆ôMÕÖ;GöuåÆ|XƒK.ÿxÌѦ„u§“Áï(›ò½=Ђ»ä]Ðæ6éÅàPÁ"W–‹R™.ÞHt`W¸¾K™Î'ûêÈ”ˆƒU©ÕÈIå‘7¶¶‘2ëJhª6ÓÑr´ÎÊŽšªÍ¯Ë”ÌÎ7ËW~$µUæ:펷õHGµšüèäT΃דã¬üã1cüZ‚‹ŸH÷z6ؤøeSž£·Z ×þd€múöÛo£æzÐþ³´¦Ñ!ƒE®,%]–‰)i�`•2Ý/ØWGÆ Ä$èrõJ‚óS©4.åzR3Ŭk&p¤#v=šé;n>v&íþ»èµš æøt½;…Ë_½Ö&_§fô7Ã?®¹céX6/¤Û°ëÀQµýR^GÇþ|&ä‰ñô>ù$1h¤øeSž£·cÚtHOP^ ô8nšŽ4ik}üñÇQÇë(&{ýÐ>Ò4P�ؾ2Ê Lç“}uD#š¹C­›Î«mP"šïÔ2Ÿƒf„4t‰ûÖIèhz&pr‡ã×àD«¾¥áø•ÙþI`jv§¯Jwð>a¾»ÿ&Èåµü k.ÀãX6/´4p”éy¯µÑùiBç^àHÏKç§N³6–ÿKi]Nk…ñ;ʦ<GoÇ´Fˆî,4h Áý±ç­vQ’2]€wMÏ·OlíEÑ�°=ܳŠeùùtGbЧ™°;šÖLôN†ý@ÚÑÈUf~­)ÝÞ`ZƒcfYÂBù_þ…÷ž3éò¿ì{/øœû=¿Ø†û:J?hK#, Çó´óå®ôÜþdò¶¯ÞúªížüV=v½3S¸­Ïž9Ÿ¯ÊÃÆC‰;žÖ©&í ë›wÉ# B iÖ´Sg=N_JÒ¡vl³À‘ TÙm¨¶å·¿ÕõØmªÉ“vÓy}!Ï‚'Îë?—Fãù;œªO$x6U-Úè˜%Žüsëï󦣌çhöµ.ÿLžMÒw¼s£ÑµÍúd™édƒm1}¯,v±¯å9z;¦…>j„`~í¢cªuR¦ ð®Ù€¡?Q �¶C¯©(ŽÕçóV®»ç¢C}ÏôO˨ߑz£#/&ûùºÓÁðm4òVCk¥´^L"sµDBÑí•™øxx%—¦@;Û$*^~R(Ÿ|çûsQ[ß×Ñ+éjpÌŒj¿§#réÐèuiõnœmÈÛ¾îÒ‚G)l8ÚƒE£U6 íÁ\à(¥Ã¦­ýÚž–çèíŒ4p¤iiºÑZjúÃ>Ö&eº�=ž‹&úP�`Jï+EMŒ: mîó‰œM:7Žƒ+µ“Ùc¶ùè0Ûô&bjþÌ´ËY¸½îºãåg å¦yNRÐb»ûj·g¶6FÄ6 šé4:‡ûº3f_ 8:r»Ø×ò½ÒÚT XEƒ‹ÇZ»»¥ACMË&®3�°9½Ž¢8ÒÏ÷2è> ?ëI´Ì…óž©U“LQ6ÐQïÊ Š†¬L -X~»Á””û:·-.ÛÎ|à'_ûº+f_Ãmˆ¦™}N1Ìçs8²Û·84‘òó‡Ùm\ţÜÏ—Å.öµ<GoG4 '†Â?–Ñ €öW¤5Ót*Jÿ5eº�ïƒ (&M� ½–"ß4?­µ±uÒ|“æ—ì¤óƒÁdJ}>MÂmÂ¥"_´œ&]¶°¼(P07Í`ŠmÚ5iîe–·þš—37ßJ±¯¶½, 0;?§û ¬©LikûÊ/3£o¾ù&*ìIt´,;”¾¦mŽT¤&ÜÜ·K3ÉzLý‰ �  ÒÔ¾u§tl=¶ù•Ö̹fïm<[*päîO¥!í›tŽíZ½¯ ÙýÔi+û ¬§LikûÊ/3£>ú(*ì.}fû/Ò4BÇéHCŸ¦F*gú'ÿäŸDH�@6zMEþ-,´’þŸÖxЕºm~¥³O¦=GrÐTm‰­îëܶ¸öÔTm‰uöXG™ÒÖ.ö•_fZ˜Ó“R„&GØ ÙæF8Ò�R‘qsß.ÛôÕNZÓH3ÐÚ¼‘ë �dÃ=ë8$=Dq'Í_)ý;µI§ÏMyþ¼åtmM&µö•Wf[cÏ/¿“`ÊÊ}µA²3i÷ß™÷Œ­u޽§}ÖP¦´µ‹}å—™Ö4ÒÚ$(7¿Ãk-ì—¥ÏÍ}ûlM5Û<MÓ—^gt*R3G�Ø7îYÇAGò'/Ò¼–½êëôl`H׳ VÑ$èQ—æå•z[Ãñ'/??t~²­ï«í¤Ö”Ëþ0ðlm8þ}î+^™ÒÖ.ö•_fZ €&Hå¥Á¡"vx½nîÛ§éÈïÓH3ÉšÆìSV��ŠDïsn­í?ü0úߟܦÛúz-6Ø‘ØD˺•A¯+M ªØï­5¥ÛsúãÒ°ó¢©*¿ü ï½éTi´å¹»¼7jÕlMždú¹µ¤Ù×Ñ@zݦÔìvhÀ§Ù•ÞÀ ïþie·=ij<“ßÉóNN¥Ñ¤?45·æŽåtÒãØ�^ªïMh"8q~•»M^Í2;f‚} ¢à¡_—f·'íÔ<bjš¹ËÏ|öWÓýÛ ÓRðÆ|v?ô{ËbûZž£·e¶-5�ÊGƒCZ°×ó¯í t€mY”–4³¬Á#?¨�H§L…†c¡y*}`bÂÙZÛ:éùr'ÿam™Î'ûzÀ¹˜]¢€Ëtè÷ñð…´Î:Q ,îWÊ „ØšjaÚuƒws5µÆ2|-íÆi¸ß¶vXúï]e2 }íSéM:Jk9¦‡Ûq}׬k&PälÛÌòÚáúÃp{/$š¥i‚•sé^;ÁǨÏ+?H®»ÿTšŽvfûZž£·ezc£�W.Z ·™ QÛ¬\à<°Ãk°�°îYùá:«ù+ÿÁ‰¯SRž»Lç“}=„;þáÕ´ÉÀ™™Íóƒ#¶æ`YÐ7Tà±Ë¯ñ½+Ü÷;röøqÀªœr3YF·­1]§mº˜PCm|ÈùÌò¶&‘»_JƒA8xä®'ªu¶ÿÚEIøeSž£·EzcÓ“¡µŽP|nÀH'FSeº�ç…¦?=î¤C�X÷¬ÃÓ¼sÚQgíÃ’Eý‰–é|²¯90ÀqÌŽl ?`“8½’®Öê™éܱì{W¸ïÿT.‚¿3»WœŽßÝÀQÒHz.ÓÇÕ¤FÔ¢À‘ò?Ji0êQ']géÛ´í´ÕþŠšµžJ£ûÊÛY«>“f›ØÅï¨<W¡-Ò›œP|nÀ(éiXÙéEÉ^˜ìßþäÎsÿ^5ÏÜyîßþ”vžû·?¥çþíOî<÷ïUóÜÉçþíOiç¹û“;Ïý{Õ<wJ;ÏýÛŸÜyîßþ”vžû·?¹óÜ¿WÍs'wžû·?¥çþ½jž;¹óÜ¿ý)í<÷or繯šçNî<÷oJ;ÏýÛŸÒÎsÿö'wžû÷ªyîäÎsÿö§´óÜ¿ýÉçþ½jž;¹óÜ¿WÍs'wžû·?¥çþíOî<÷ï¤yØ?Í;iÞÙö_¤£…¦uVƒF‹ú,Ó9e_×§éNû"ÝÚƒ¶•£éug2¹ŠGõôÀi6æÉ8Ҁʹã÷¸ãs7pdkF-úþ²À‘mÆæìßÏ•™V²gk%n“~ïöx}8%ößµê3iÖ±]ß¶•ç*´Ezã™Z±Ù #ä•^ƒ4}º…�‹ú/Ú–]ŒòŠ}]æÛ5è¸Õ|ÒÊÀ‘[«Æéd}¦&‘_ãHûêI7îT΃×ó5~¶8 _Kpnk6ý°çÀÑú5Žô¼iZØflÛ¿#ja)M¼z"h¦VLî1}JAÀye3E:‘N�y‘¦ÿ¢mØEÁ(¯Ø×ô4ýiºÓüÑV®­8R¶ ˜[»&¹£¸é5N¶8 M‚µ–´›šuî¿©ZZøÛf™›ßQ6å9z[B3µbÒ*Ó6`´í'bÀ®hFÜfŽ��8¤uú/Ú Å”e_5?¯å´<T[;p¤1“xT³•#ÛœkÇ# M:°v×iWµŽô'CïÇ6é{¦_§ #må£ò·…ßQ6å9z[¢AP zƒ±™F8Fú4Í6��`ßÜÚÚëô_”…ÀbÚt_5ÚüüöÙ Hr_DóÃñk´ nªvr&“¡õç†ã®%ˆšª¹W[Ë¿w¹;¹ ~"õ¹uêûÚY¶Œ²ß£Ãñ)ýhè}݇ †ã÷‡þ‚R󵙯Ã+¹l=IîÜÐQ„·ùp”ßQ6å9z[¢´]?AÁîi€H37ú£ÒÀÑV«²{¦éWÓ²6��`×´6Ç.û/JƒB`1m²¯Z+ewù ÛÇÖÒ1Ó$ðãunìOµ¦\ö‡qÀ$ª9”ð™hªKóòÊbÙ÷®âuÂí×dßH¯uîÕbÒ@‘íoÉ~g¸]Ýž &µuîN•†´ŸÿÆùìŠcN•fOnͧ“Øüí¶jéºÊbûZž£·Zw›‰‡a3:útl_OÅ€]³OÚl�vEƒC$Òûæ¥vÕQ‹i}Õ´gÓ#ùŸbÚf¥ ~GÙ”çèm^˜´– Ž“íÇÈft€¢Ñt­7 jÐ�¶ÉmÚ¯y©<Ò)SÚ}Õ ‘6cÒ|=ùžâÚæhæü޲)ÏÑÛ‚mF<±?n³4ýŸ~ŒPdzs%�ØÍ÷Úþ‹4p”§šÚ‹);jGÓ¥ŽJ™ß±i‡Ç*yJñì8i?Gz®·AMYìb_Ësô2Ò‹’ž�š©=W¶†ÞXh–†²Ðô®7Y®W�€uÙü“>„Ð<”>ÈãC7 Å´j_5?¯iSó:äsŠÏ–Á·q âw”MyŽ^FÚéš>iÁqÐþ¨´à¬7Te¢)ÍP‘©�¤•§þ‹Ò XLËöUkÀéüm5]ÂqÐ2Ý6Zýð;ʦ<G/#M° òO3=îðúšQVú„F3þd®��Ëä±ÿ¢4(Ó¢}ÝíÈiÈ3ÍËn#?Ëï(›ò½ ¶YE»¡"š¥³lðH3[@~˜!zýáS™\m÷Ã5ØTžû/JƒB`1ùûªy| èûÇÔÄvÙkUV\3²)ÏÑË@ ]Œ@>i³4-Ó, ˜§7[2[( §CPGÀúìƒ6Í3éïH äÇú`”B`1¹ûªiSË`š^õaÊIÓ¦‹¬×*®Ù”çèe ,ù£™;Zš÷h–$Óë—þN¨‰‡B0Á#G@zZವ6´ž÷þ‹Ò XLv_ÝN°5¸‰íÙF·1\3²)ÏÑÛpåÎ[ËH/"†Õ´ÀÀ;äÂh ½nSj¶©š}ÝøJúWO¥QÑEgÒî¿‹?_J§q¾_‘ÚãÇÑg&£ñPú—áòá½:šßüRúä߮E÷oô³ïûm©F¯‹3L1°Šæ‘ìC¶cê¿(]ŒòªlûjxiÞ…ÃPšôZ–׌l­ ®m´©ÄvèÍÃvާn&@zÚ‡…øÝàpFÓ€N8z/ƒîÃøõI]šÁµŒÆ¯%8?•“F Ãh‘+i×H£óR†ã;ö>‚DqàèNn‚GRm\Êõh,ãá iÕ*Riöä6üwÝ=—J¸ÞVïFîo9¯·$ÜF[™ˆ´¦†þ¶ôگ܊f£¼*˾jþ$¾ÄÁ#ÀÒkšæa³àš‘ £ô¦KDzù OÍ4ˆ§"f€€]Ó ™^Ót"x„Ã1Á£IçØæµ ÍÌËm¯%•JKz·ãhîLSµñµtë•IAc2MÖý.\×™œT~$µÚ…t¯ ¡¸ôº®MÐ4¯¤¿}B_äZ¦s¿{&&&&¦É´mŽ– ™Z>hFˆZFÀvèuMƒ¯Y«û›['pä6䎢¿+Rï^‹ +Í»íIS›¿Õ:Ò-üp´lÿEzm×IƒGô ƒcBFHCÓ5чÀÑÛ¨�y£Áp½¶iAØ¿uG¦)Û¢GæïÊy 7I1¡ñôZÒ žÉçÚ„mÑç€#”Ô×plèÏiiE|£%ôFÁ @isOͨ©£T‹·Òk>pGæu½+ƒ(¨3;<èJ=êô:Áèý¤#í»Þýƒ\G}$š>tùwÒ¿ü• î5hôPÝW2 ßkG•p=­æsÀq*CÿE(> i9KÓ1µH€ü#p´„>‘§P�À¶˜ÚDQà'œªMi?q^7º¸ó£ZHw2œŒ¶v*Ÿ?•fµ.ÍnOÚôl<”«NC*v™ZS.ûoä&¸ˆ_G(ï{'µ›€ã …ì2õ_„bÓæhüÔ²£#ÇÀÑz3Ö3íl��pô_„¢¡?#à88Z@«Lê ���Ø'ú/BÑŸp¼- mÆ‹? ÿ½ µ*ÿ¤Ÿ‰4Æ2Ò¬™ák- ÛÞØt†JS��P"ô_„"¢?#àø8Z@/lܬDÃ?fï­Œ‡/¤U«.y•ñk =5+ÓEíyÞ},gí/åÓ\´sÕG¾¤Ž³��,¡…j-LÓŠHÓ²¦mmžFº.»74ªq僙IÀèJ/Ue­ÄГnóÇÒÞ˜÷|ñ÷D£¯êËÑ@zݦÔU–X5G ´z°&b̻﷥zR“v_ǨÉêV®»çRñ~¤ñ:z©.¹ Àè•t§Ó‹PÜ0`ï´­Ýnû/Ò¿éóE¢}ri™JkÏÑ4 1Ó²ääB‚¡f:0jéë ËŒ¯¥[×–/iˉöûÂõ'æsÁ3È/Et$Þ¸õ—?·2ZfbgÒDþÎü*Jóq=|?ÅÉ/,Úׯ¤?ÁæLÚýwáLÓ¬ÍÿÞ{ú~-m­½_—æåUŠ¡ŽMÐh²>ÝÞ¿]³Æ‘×ln2i`ëF½n8ï4šâc¶¢æÒxØ— ÝʇmynGè©4¤s5”± M¿#¼Ø þvýcäÎú7LjÞÀæô¥m¶£51´¶…j‰@í¨i4MÃ,[¦´#eó¢î{KÜ÷¥]]§ÜeÖ¿0Ÿ»j>£z¡ËßEn,£~Gj6cõ® ÆNÁ¯òH‚›;³Ì2~aщÆjð'¸–‘6#;Ÿ ÜÌÕ8]I»v&­ÞM¸…w2ì}n㩜¯S4_[ô#5ï¯j¢}wUjí«p ˆz(ÝÁ{³º/i·å­ôšÌ1<—îõm¸~sŒ+-é݆kˆ.R'¦ÆÑ&ÇÈ«E¿ÅÔ¼€hÿEú`Róú¿¾ŠFÓµ5¦i˜çŽneð¢UX¨œrãÚFy¡õ£26g d 5’làèùoåÊ>ìŸÔV²MÙêN^5!Ÿ;:Ë>’¦–ù-EàÈ£O|ô†ž¿ ù‘Ù ÆÜn‚ß„¿Œy= ØÌ¯s6p4–Û^Ëkjf0©¶c“mv iœÄý-M_O£Ïë7«3ín€UÜlÎ|ÇLàHeÜ~à–Ý0gnÔ:ÿSé ïÂ÷jÞ ˜Üðã÷ê& �°Üþ‹´ÆP4Z†²#j5 Ù|+–J£-Ï{ƒ°då0â`’­@aÊu¦Lfó§Zþ¼bÊ€v^¸ÞÅe¶wáë³ð{ŸÊ•.õÛ[¡L·#’çQœ¨˜4q‚kéÜM‚þ2æuêÀQÒw&U?\d“mvŒo¤×ª{”¸Æ‘ÚFàh&Eà…±ü†ÿvâßp|3®L;Á÷Ñkó±µ'×%�€¢ÿ"™Cµü¤R£XÎ)+Þü]œoLh½?¼Ÿ–ëf¸yÏ…¯—”ÙœÁžb”éÒ päÑ'A:åÓl¿@¶ÐÛ$Áû˘שGö‡ïþ¨Í{© ŽY¤c]_Nk:ØþˆÌÜíÕ8šn8ÂÑ[ç†é§û¹ß‹ß��e¢AQ͇km#úêÂj³• â”óÍÔ܇˜sEéGóeDò¯i8òh¤<¯mΣ ÆÂ½N1Ë_Ƽž}üù¦išÛ<,*€jëR®µ]iÔ”¥¶^GÚüîæJ.ƒAŠeQ¯úõ!»­ŽlG35šÂÙæ"Ti¾›þs o68æÀ᥺aއÒÿåW“Žï—ŽîdØÿµ<·ÍÛøM��PhÚ­‡í�ûÛo¿5ï«ø­Sîä&xægû¥é.Ä—1p4¿nGi8rèP Hy­Jl#²QíšÉ¤Yÿµô4±Û÷R%zó™,Ó”öçu£+;¿ñL~ýÈÍëè=­™£y£ªiÇÚæ[–³ÍËœÎÎÖa›Å¸ÛdÖõ·½Ï±}/mðÈŽjJÃŒÔ6[«Ë4Üø˜ù°ê†5]«ŸKûù/¥÷·/fo¾þÍ8 °>”Fû+ zýøwÁï�€ÂÒA„4ÿ«¼Óë±29-Vl™®ÒvÐGç¶ïÙ~6Õío¤sy-ã¨â‚ÓBâk7pd*Cؾ‚íþµ–ƒÛi— Z¦£»……9ô"¨5ŽòI›e=“Î/½š<:²ØY§œ…´Ñ+¹ìüz¶÷ý(¸s±F-#WBG@-½a¶¥ûymrsµk?pdkÞ=ë~"U„²7yGØFèÁbænè„Ó´ÐÒh ½nSj óæIùäw+ƒ^WšµµŸíú¸&¢ ´)š°±>ÿ:=­%4[A"~è?¾”Ž3(KÔÂå]Xö ó¡“åŸ=[òZï=ùmÂÃ~wÝ•FG~ѬI­Ù•^˜/F2Gm›«íts)*è=Fçe…„–à‰4»¯RÖð)’8Z=[#Hk?Òj~7›[›¹˜iF ,¾aþw§ï°º4/¿–Þó–ÔNN¥]kÜšw×2šŒ´¦µý.¥×û*,DUâ›ûF¿C”‘v¦ªÍĵ ¢“ö5¨…´„Íði³`±„&õ©Ù§àaZKù�)®½©i3©f³S³›À @›£1Ì>P^ŽzsÏo]íC$pš„…S­)]èBËÔ ˜|vnZÐÙØÖxMáæ&§ê†ÆÃ¾îáZíö4y[µ=ÞD­#�Ø %^‹½‰Ñz°ÊÒUW2y…5ò�Ëâ˜m #w˜}}ÀNØ@98243ªD.†��ì—Þ{ÝšEI“\€URŽFy1yðäö³hG_Iÿê©©yy&íþ»Ér~Ó³¹ÀÑx(W³îÚ#iê?G8RZ”aö(G†V×*ñ��`ÿô>œ0ÒI .tÀŠ4VŽL_lñˆ©vø±µ“ëÒêÝÈØöÛÕ@rj./ ÅMym3úIÿqŽpdôzkû2¢–�EàÈЋcnû7� à´`R¯×'Á"w¢V¤µ*p÷KäŒæ3Ãoª¶àõ¢ÀQ4’C<ã¸éõ–¾Œ�øzÌoÿF��Û¢GÚD‚§ÝHkUàhùül£™ R„Àއ‰4X¤e"‚õ�|ŽBz¡ÔÌ)Õà—Óãco(´s�lƒÞO48¤÷–o¾ùfÒ<ÂN<ÔÁ:†ÞJËÕßj£E£®e ŵ™¨q„ã¢ymu¡×[½þR„ÀQH;~ÓL+Óàš­¶Ê �բŠ¬Â¾¤g‡ãwký„L‡ÕÕfOnm¿EµO¥7¼‹çßþF:—×áÒo¥×| 'õ® ¢Z¼ž‚¼áÿÇ×Ò­WÂu·$ÜNû8Òô<Ynà^ËCÀ1Ò‘YuÂn8 iBc´–ÅôF¢™=N4�DkŠèu‚ÚˆHÃ-¬$Õ(²C?Ó¿Ò{#A£i§iM ñð¥tt´33¯Ò¸”ëÑm\;È~¾Ñ•`Ùëj[~û[­md^ÛZGκ+Žü¢Y“Z³+½ÁmôÝ@h~Þ^gõò÷8fTÙG!­E£…ÌÓ`‘ÞThë `½^h €Â>qk-+¬hí#žÀöi°^ïÕZЦ)0Š@ó š¯ UÌn•>p¤™VMh<%ŸgƒFT]–6-Ò )O/á[UË�°;Z¨¶}È1Ä>ŠFó”Yw«ô#ÍÈê³lÍ2÷�Ö¡Q­Å©™R(MöAM"�`ÿÜ!öyXŽ"Ò|†æ1°;¥˜è…”Î7§l¡Oo.47° }ª©×nàPšx]¡i°˜[Ó“n'PdZÛHÓ9v§ô# iuM4°=v$Fú©M"° Z ¶Ín�Ìr›¥é}˜�+ŠNÓ¸¦wʰ»Sú»-OAcúc³ÍK¸¹�ؽ¶êMœ6ç�¶ÅŽž£×-Óì˜Ò ½Ö,ÒßÍÒP6zoЯôw ÷ ­ù®¿lG©G‘Ô kÙ%¶f€þ°x* `›ôÆ­×Yô�6e ÚWÑë 5(€y¶©ŽNŒ²Ñò¬>Løÿâ_D÷ ;é{ØŽRŽìS«2#h`×´§×ªçØh ½nSjÕ¶ôïÍ{ÀipH¯šù×kˆÈ«�³Üf›4 F™h¾Rï¶jÒDß^ÛSêÀ‘&´2wÞª5�4#¦Ç�vI¯µz½¡–@¤ß®Å™,GÈ· ¬}Ð`–ˆl`U/<œAÙØ 6H”4Qã}{J8ÒZ6e­Êi›4°šÁÕk.µóÊá€lMpÍŸhA˜þY€dZ~ѳþ^(£Ìlš‹&ªÛSÚÀ‘\41•1SBÐÀ!èuW3º´7Ï#7pt/Ãàb’骶ûr/w2ì)ÍZ%~¿Ö”Ëþ¹q>gƒN÷ý¶T£÷.$…Ârz] ÿ" -·h°H/4ÝbHäE¼ ÛSÚ£©Þ2&&½Éè~SíÀ!ØjÅ®óÆ ½È‹ö#9ï¼”á8ž;¾ ä¼z.Ýë[}!½V]N*-éÝÞ˨ߑÚÉ™´ûïâË[é5/¤;xo^ólÿEz=  ,§¿mò­yxýŸà*0Kï'6Xd'TnWiGšA)[b²?(‚F�Éîõ%OLà¨òci|øPšÁuøŽõ^݇3™±xªI»¯ŸÒ@Ñ©œr3ŽƒL­žÜÆ 3ô÷o Àô_,§ÁT›צÞel)¤¡¿ý¸ùRnWiGšiÑàQYØæidÐ�äפ¼±£IíG•I(fæÕ»2˜¼ç;µŽ†2è^H³÷ÖÌbú[·™z}pG¿,@:Xt4xd›=ëÄÊí*mà¨La h�òH‡ Ö<æÁ´©ÚÕë@Î+§Òè¾2µŽlPé‘7wÑ;sƯ%8?•ÊãÏåó³O¤w›aBÉh&^ÒižKó!úô—ß;�`Wܑ֨¡·]¥ ib*Cæ… €<Ó‚$Á£<ˆ››Å\ßÉMðH*N¿EãAWêὤÒx*WC i-£çLú1Ëm¯.S‘z÷:|…2K꿈>Y��û`Ë¿ô›·]¥ •¥cl‚F�òζIg˜þC25ŠÂûE4UŸHðÌ-­ÈPGU»z*Šyï¤.ÍË«IçÙ‘ñµtëÒ)v‰%õ_Äï�°o4SÛ¾RŽ4!i!¥È8Z°ÔBfѯ˅wÛ“æÙ¢~Pdš× ÿ"��Š«”#íW£È½¬4pll›tFÀ8VÚ¼­)Ákš©•„|é¿ÅáÕ¼œLuiv{2qePn¥ éÓ°¢Ž¨FÐÀ±ÒB§^¿Ê4âå!m¥ Ñ}_ÚÕM×PHô_„â2}µE}½éë[-©…÷¥Ù‘&÷c|È£N_¢M€+eàH &Eìe €cÇul?ô¨5E€´è¿epßoKu8Rfà€“ †{ áŒ^I·q*Õ6#�ùPºÀ‘>ÓLOÑ2;¶°¥Íð�à˜i ½žÑìeûôÞ§÷ =¾�VÑü…ÖÔÖ4CÿE(ºå£dð¢33H@«w7Ï ¤×mJ­ò¡4×ÃyUiod<¼’˦¾öjfÚÏ7¾’þdà3’¥ ÅËè´ç �$(]àH3<ZµºHlЈ¾A�…m Cðh{l-#=®þ±Œu ú/BÙD#ÀÑÑ${ŸN›ªÝiÓÜ8 $ãלŸÊI]púGª<’àæ.^Yô™š4º¯d4Y×iöÞÈ ûÐ…êÒ ®ed×b2Í€©q /J8Ò'ÙúĬ((*†éß=~¶‰‘þÏñÄ"Z+[k¤Ùþ‹ôoú/B™Ä#[ÓG§Si´¿NèÛ‹&µ“ü×"ãAWê3늧8d>oEþòŽ�äLéGši.JÇ«úôXo@�‘8eckÙjÍjaÍOh^BóšV´¶¿9”Ñ|S5ß û¿–çí†T4´$p¡Jwð>~c#�Ç¥t#Û¡ã±Ó*ãZ h È¸ÖmÆ­e¤µF ‰ßQòG@KGãéµJ£ý•½¾ôfE‹G§r¼ŽûAšAàÀq)UàH3Κ9:övúºZ*R“;�XÄèü?·–‘Ö$\š‡ðû/"�Ê Ç_iIïv>Ô‚´¢·Ó>Ž&"Ó‰¶t_K·^‘“JC:WCÓ‰v_.ƒAø·ù|ÔG’Îð–7£Jó…ÜôŸKXk �ö§T#Û´ë˜i†¦�ÊÆöçFˆÅôž@-#,BÿEÀ2¦ÆOxýŒ§š´û#3ϘŒvV‘ZóRz½¯¤Y«H¥Ñ‘_4ÿ÷ÓeàÑxøR:“Òt¹/¥?üaö»] f^k-¤wágÎÂצóìxu�p0¥ é6 ¸3­e¤> �ÊF¯áš©¦vÄ<=6Ô2BMô_�È·{Ó�êdtCcHc2O¬^À5zÏkú9™÷oä/ÿòß8¯ÃÉ­hùß‘@.±RŽ4ãtÌýdè¶kÁ€!q”×ÁYZcÄöQC-#¸è¿�pŒâf¡'rRûTzÃ;ó®Ò&gqsшi^j›ztdóó@nlËÓÛž4+Ú´'·æ­y¦Ùè‚&«eVªÀ‘fœŽuD5ÝnÍüñ$@Ùéµ\kN”=HbkiMZiPú›ÐtAÿE�€cußïÈÙãÇÒÐ ø‰j5fjÅA¦5ƒ†\¸ÌG}‡U¥¼1o$ñ;®‡UªÀѱ^èÛ�¦´p\æ¾ÞÜZFÇú0Û¥iBÓ‚u¢ÿ" jiùsßÿ©\'7Á#©hß`í+ÓÏ£C*MàH3PšÉ>¶„º(�À,½¦kY;ƒ.jÁ¥i@ki>Aki^‚0°šÛ÷€|‰GÜ™vßêÝȘÀÑA•æji0ÇD3„Z@Ð�ä^c™˜˜˜˜’'–Uµö¾Þõ|èÿÔæòg8 _Kp~*'•GÜ舄Ž¥4w1{£8zs+ãÓt�Çë# °¢†Å!öU÷óÍ(ðæƒ-ôÚþ‹4pìý•)mñ;:[3OóÕö,56üš …ÆÃÒªUä¤Ö’vóÃÙ Q4ZràH;Çþ1£­)Í]L«okŸÇ@3‡äÒé"�Ø…Àb¢À{X~ÿEZè-JÿEüް+6Ðê×."_ äŸ8ÒÑÓFýŽÔÂßòÜùQà¨"õîuø)—ޏö‰œ¹ï/ ég;Ò‰Ö»$ptÛ“O:N ªdJsÓ'sÚYä1Л#86‹‰ïa”¡ÿ"~Gضo¿ý–ÚEÀQ»“›à'RŸtˆméûÚY¶8š4ekHçjh‚D·2xÑ‘FU›·9Ãù›áø«n-¤p½Ã«§ágíðûf8þj[úN„h<|)F=qØÿ²(Í]ìX†â·7;nr�Ž …Àb¢À»_Zðµ£æÙZEÅïÛ yf}8¬ùg=Îúû¡vpŒÞHШF¿ãhò‚72¾‘^ë|¾YÚh ½nÓÔHЧJ£#/·æ÷2 .¦ëM˜*ÍžÜFµ—’çGSÅ—Ê©4w1½™ä½/�½Éi¢<ö> �”“^¿Ê‚}Å6Ùf5Eê¿( ~GØ”6×Ô`‘ýÍhUG,J3N�È›ÒÜÅô¦’çL˜>-Ñm<†ZQ�„B`1•i_÷­Èý¥ÁïëÐ߆‡l¿E4ÒàÁ"�ؽRÜÅlP&¯ôI£ÞüA À1£XLx·Oó%Eï¿( ~GXÅÖÆ³Í7m€•.�`¿JqÓšFy¾aëÍP3Ž´ÅpÌ(ÞíÑüHYú/JƒßѾ¾ôª7,Ò÷��‡QŠ»˜VkÕŒZÙ*ê<9pì(ÞíѼˆNôeãw—;"š/ ÑÉ5�äC)îbœÉcàHozc,ûG�Å@!°˜(ðbWø•›öM¤y`[³H'ͯ,€ü)Å]LoHyëtZkéíÔ�Š€B`1QàÅ®ð;*ÍÿjžÜvpm›¡,€|+Å]LŸ^ä)p¤7F½aê�EA!°˜–ïëXFƒžt›u©¶ûr½w/ÃàBNªméÇo,q+ƒ^Wšµº´û#óžk$ýv-Ú†hrÖ9¾”Nã4z¿Òx*Wûèýû~[ªöó'µ%ëm,˜—°MÃ@ ×å ¤×mJmÑþß÷¥]µÛwâ7ýÞgÒ÷iú^háçgé~?Hœ—õ%-?+ñ˜‡Ò¿ Cô^EjÍ@£ñÜçË¢Lûê³MÐìÐùv44ú,€ãQŠ»˜>ÍÈS¶ý6OV� …ÀbZº¯ãkéÖ+Ñg–™–xjrÒdhÞ‰Œ®¤]{ î«ðïÂÏœIå<›8.‰×½~àh<èJ}é6-ãº–ŽªÒÞ˜7bn0%ñXš�ÒÚ£ŒçÈ~ï²åãm¿`hçÞÉMДóÎKŽÇ2º¾”FåD*͞ܚO(]gY”i_5ë7AÓ‡¥Úç(}zÀq*Å]LoXy¹QéM3OÛ�ÛR¦‚ûêXÐXeu€Çå¶×’J¥%½[)ºíI³ò@š½·ñëЦ#µ|ÙUÌ6¯8Š,;–›ŽTÆs”æ»gGo$h})ƒI ï½ ºåÄ=g!~GÅ¡ùZÍãºMÐèÜ�Š£ðwì< Åo·Eo¬�P4‹iå¾úA…™¦Z¶™Ó¥ñü·rÕiH%\ßI­#ý™fK&H5 ‹k(Ä—¤ÀÑ[é5̾Õª©J½{-6,±½À‘ßt;~$Ïû¿1Íå*Rk_…kUnàÈ4 3û£èx8pä7§³¯_IÿêiT;èää,Üßwúioù74ªfŸâc48ò%7[™¶ ¤hûjEÒ ‘îMÐ� ¸ ÇÖ`ÞÐMŸ¶èvh35�(" Å´r_g‚ &h. î¦Í¤Nj- ·2¾ ä¼2 œLƒ472xÑ‘óóiE“ ÌLà(\ÌPæßÛVà(þ{$™6e³ýö¼—›à‘T&'pôn /ÚL“­xÝññ:dàÈ;G÷¦6P´Oui×2¿–àützÜ'Ë_É»Á×Ò>$«¡¤[8ÒïøÐ ®ÅV¦­9ö}M ÙZEú>5é Ø ÇÎËPü¶3lªë(* Å´r_çNàD߈æ;ïóqÐáT>l<”ºÓrìð£Å¯§’Ùùf›+?–Ƈã@Lô)Ã?®¹céX6/¤Û¾©šw޿޳7ß,_ù°!Öã� Ë?s´)a}ZËÌâw”_‹j(€r*ü[Gz“;$ݽér“Pd‹iå¾® JDóWŽªR«=“Ê# nlm#å4TÜTm¦£åh•5U[ôzUàèGRûQe®ÓîðóÇÃ5w,Ëæ…tv8ªÕäG'§r¼žgåZ{éâ'Ò½ž 6)~Gù±(Pd‡Êÿá‡Ì'�eTø;ö¡‡â·ýÑÞ@ÑQ,¦•ûº*(Í_8ªIûêUÔ<ªÒ¸”ëIÍ? ¡tÄ®G3cÇÍÇœ>yB³ÁŸ®wÇ£pÿ¯^k³¼S3ú›á×ܱt,›ÒmØuà¨Ú~)¯£c>òÇÄøFzŸ|’4RüŽfí+8£µß5j®(�¬Rø;ö!Gôk L(ÓÊ}F4s‡Z7WÛ C4ß© d>1Ìi&è÷”ÐÑôLà(äǯÁ‰V}kÃñOFm;±£´ÍnãôõCéÞ'Ìw÷ß¹æ:šÞsàhÕ9²¯ë]3ZÒ94ßmû?šëàÜ éyéüÔiÖ¦Ãò)­Ëi­0~GS¬Ñ<ã¶»4ðƒDÒmÑI»P P�H£ðwl½Aª¶½AÓ¯€2X^0š]*š&…VåŽÔäªïdؤ\e–«5¥Û˜ÀBȉË.ÿ—á½çLºü/ûÓΊmpbî³uiv{^Ÿ;1¿˜»/ñ4SØŸÙ^§°=J?h›­tÒΗ»Òsû“ɺ¯&øø9÷˜:tþBÞúªížü6ñXênë³gÎç«ò°ñP⎧uªI;èzÇæ]ràHƒƒ@š5íx[Ó—ÒŸt¨Û4p/7ݦ'íæ’×ò,xâ¼þsi4˜¿Ã©úD‚gNº×ýX8òÏ­¿Ï›ŽV£jSÚOœ×®îü‡ iÌ,ÿLžy¿Õ¹ÀÑèZ‚f}²Ìt²Á¶˜¾W‹öUóˆš_´ÇHƒ<›J$ÒæhY¾�PN…¿cg½ oJoÌúÝôk ,ôš·œÖ8¸Œ#N3£ ­ER?—ö À¸•ëî¹TìHOæ=y«¡µRZ/œà©!á®7¢½2S�¯äÒhg›D™Z#“`Vø=AKjú9¿šÐê}µÛîÖò°ÂãÐïH½Ñ‘6(4z%] Ž™‘Çâ÷tD.¾¾.­Þͤ–Fö}—Ÿ &…üù¾kÔê}Ý¥5ŽRØ4p´s‹G«l8Úƒ¹ÀQJ‡M[û•´¯šGtƒ;:¥}Ø©5„ô³‰��ûPø;¶Þ@÷¼ÑïÓêÆ‡j"�‡ ×ÛÕ´ÉYB'È!msf›ÊÄÁ•ÚÉl‡Ç1ÛüÇ t˜�CR-¦¹ ƒÙoÝQáwfy I(§Úר9UBçÈá7Þö>‘³ÉwÛí™­±Í‚fŽWÖ}—Ÿ @˜¦HIštçuWM8:jþ¾jQßó'?ï¨"[‹è‹/¾ˆº`°}éD�°…¾cë Toªû¦7q½±@™¤½ÞÆû!?˜bƒ6 Áe“>YÖ ¦„æ–7…ßmŽä½ ºöA×{1}/a[¦lÿ9óŸÍ÷õGá6DÓÌ>'‹ƒæó¹ Ùí[šHùùÃŽì6.:æSîçËÂî«‚4hϧ?é<­A¤yI÷}­Qdûí$H�Ø·Bß±8Ò§Aú$ˆN”Múë­ ÈÌ4µÒ!»ŸL_ÛÂò¢@ÁÜü5ƒ)¶i—³ qaÖvb|'ÃÞ§šª& ã6WÓ /ZÓ×¶½, 0;?뾚åmçÆ¦sé|6UC‘•)mé¾jÓ2·¶PÒô/ÿ忌ji€H?O—�€<(ô[G‰Ð'6ûbU‡êŒ�öI¯y:iG'½þ¥ckÑLZ éÌí è`#·w*ö×tŽí²A2ÛÔLk!]˜Ñºb Mö3œ* §o©Yé÷u9-�ë=YÓ  ¶•¶Žî«ßŸQÒDu�@úŽ­™Ó}Ý€u$ }ФO‰� (´ö¤ éõT§¤ÂŽR³ÁŒ¨ùÔ|0%MÕ[g_gšæé~Ÿ}2­Y¥¶ejOMÕ–Xë¼. F½Gjàˆ‘Fam#m »¯úpQóŠúzÑ�@Þúî¤m'¾vD 2Ä�ŠDGI²¡ôlפùüK§Slk0©µ¯¼š0Ûê{¶iÖ®GÓ®›òüyËéÇɲA2ÛLαµÎ±çÕ¾GZûצî‘peM[ÇÄßWý-Øšñ:Ï��È›Bßl'‚»ÆÐû�ŠL¯£~ÁÆŸl€i-¶&Ì\GÙ– zÔ¥yye†ÞßÖpüþò&På.¿Äzûjƒ`º¯ jP™ØNjM¹ìãc±µáø“•ÛïÒ2kŸW‡ (îã^Œã“%m›eûª×Oí#Ó6e#? �È›Bß±÷8²Cïkð�ŠjYß¶‰®þ½žE£Ž¹neÐëJSƒ*ö;kMéöœþx†4ì¼hªJã/ÿÂ{o:Umyî.okðL>³zT(ýÜZfšæ™÷|£ôºÍ¨Cîx;*Rkv¥7pÂ;Y÷Õ¡k¶ÖR2ýܺ´6…Þƒõþ¨µ*¶Ã?O “ÎæŽÑtÒãØÀ\ÚÏ¥ýÞè³Iîïºp>ïÕ,ó·c&ø×— Úùuiv{N¿[þºÝIÓÏ/ä—“ýXöY´¼‰>¹/ú½e‘v_µ)¬��ò¦Ðwl-èì²£jÍkcÍ@‘ý·ÿößœætÒÀ€-äèë²`_³`kÚØnÍ à\Lƒ.QÀeä_Hë¬Âæj`e4øZÚÓpœ@eªÏ­ñ½+L:`¯}*½¡mz¨´Ø™ÓÏW¸×—qͺf`EζyËÇýh¹Ÿ;ö¿4×Sit_Mƒ‡QM??H®»ÿTšŽv¦Lû �(žBßÅô&­rîŠzŸ>�™þ5ÿÿñ?Ž®«îäÖêÔ×eÁ¾&Ûm'Øw2üëi“;/€3;?¹Ï§8pãMÒ|nï]î¾ß‘³Ç¥Q9‘Êy 7“e48Õ˜®Ó6]L¨¡6¾ äÜ_>Ú¦„Cv=n°,ªu–ðÙàw�Àq(ô]LoÒ»j'®ëÕõ3ô>€"³ýiÍJ­Y¤A}­“8×÷Ê‚}·÷N°ç8®„€Ðè•tµ¶ÎLGãi?çXú½ËÝ÷*Áß™ÎÝ+NÇïnà(i$=—íLÝ - %­+!p¤Á¨Gt¥o¿#��ŽCaïbúÔs—7i}šº¯Û�`ß´à¯Á"½Žº}¸ÙÁ�tòû+SÁˆ}uN°ÓŽÂmš8ÍÁTÚÏ92Ž4`3íø=îøÜ éßÚ§Ò¢ïH˜¿0p$¦ÛÉ´3t¿Ÿ+3­eÏvà¼Mú½Û5LjžçXõ™4ëØÄ¶÷�€}*ì]l—#ÍÓD @QiMJÛÜ(©Ö¦í¿Æ¿–©`ľÆl€QÓÃö:ÁN)Màh¦ï¢žt£QæNå<xmjò¤ýœc+£Ðøµç¶fÓ{­_ãÈÖ´ÞfÞg»¿#¯óïÄŽßW}&Í:6£ë�àXö.¦X-Ül›Í8í=ƒ �;¦B­Q ×¸eÍô:˜4’d™ Fìkœl1)À¸skŽŒ¨ch7 ösŽmŽB“Ú-µ–´›šuî¿©ZZz®·ÙDÛ¿#j�°…½‹i­ ]Œv¦™dFQP4n`Ó‚!Á”bJÚ×Ýv‚Ò&#ÛLkUàhîsŽ-Ž4°3êw¤ã™D6pUëH2ô~l£Î±Ýþš2Ž´‰þ6›«qÍ��à8ö.¦£m÷Ad›¨Ù¡§ ´ö^ÛlØ›¢XLþ¾ê½PßÛ['؉lÀeA_DsÃì‡F×DMМN©Ó~nbÅ÷.u'7ÁO¤>·N}_;ËvƒQö{t8þ/¥ ½¯Íè6Žßö£dDA©ùÚLãá•\¶ž$wnèµb›µ¹¹f��p {ÓŒ­NÛb›¨%5Ï�€c¤…~ °ëµm×K Åd÷UÓËÁú3šaûøÑZ:fr?QígÞÌT—æåU<t~ÚÏM¬øÞ¥LÍ&»œ_“i|#½Ö¹W‹IE¶¿%ûávu{2˜ÔBòúä™™N¥Ñ~&½AÔ³ÑŠÏÆÓ¤¤l^h[Ðt]eQ¦}�Oaïbš¹Ýfàˆ&j�ŠÄ65úàƒ¢¿·B`1龺MÓÒŸrc›C®��G)Øf4QPzmÔBŒÖ6ÚfS# ŤûªÓa›¦!/ôº¡ia¸f��p­ Á" ÑD À±Óë™í�{M(‹mš¦ûÊH¢+ØÎ´Ãc•<]H0ô{Ù>NšÒšŠÛ Ç¦,Ê´¯�€â)tàh]]N�pÌt¤´]75¢XnÓ4 ¼pi�ZÓÄ6jasÍ��à8ö.¦™Ý¬ývèSµmeŽ�à´Öˆ6+ÑkÙ6‡ÑNB!°lSFÛ4­Lçéh£m<œãš�Àq(ì]LoÐYG¶‰Ú6;Ø€}ÒšEZÀÓkÙ¶:À^†Bàq³MÓü¦ŒxáÓ â6ú9âš�Àq(ì]LoÐY JšyÖZK�pŒlI½–í«Cc ÇËmšæ7e¤À Ÿ·ÑÏ× ��ŽCaïbzƒÞ4p¤}èò 9 àØ¸ï»S ÇiÕ({e:¯Hg[ýqÍ��à8ö.¶i†F3Íúm×}�À¶í£ìe(½G¦ 2RàEÍ+e NsÍ��à8ò.fŸ„mBŸ¼jÁk_M;�`4Ø­×=Û¡ñ!P<ZàOd¤À‹$z­ÑZjYpÍ��à8ò.¦MÔ6¹AÛ€Ó6F €}Ñ¿´ÆÑ!QÌ?·–QÚÁÊt^‘žæ•ôº“× ��ŽC!ïb›Ž43­� mÒ4wÛôºËÄÄÄÄ”<�p¬tˆ �("mº¨MŠô§MiŠmÑ õ¾;á��ûWØÀ‘ffÒ¢Cl�@ÙÓõ·éH£À"šoÊÚÏ��È¿BŽôé×:MÎè�P$Ô2��À¶2p¤ ´#:Ä�‰Ö,¢–���¶¥ô#}"»N³6�È…ñk =•þ½yÒÓZEZ»H†è½ZF���؆RŽl'Ú<‘p\nåº{.•j›À"zÓFZÓHû5���¶¥°#VÑLöÏ~ö3ó �váV½®4k¤Ñ|$µ“9i2”±Œ_K»q°ONêÒ¼¼’áØ,¦Ë½èH£b†r®5岯K™ Q´ŒNUioÌ2(­U¤÷1j��`WJ8Òùtˆ `×îûm©FžS9^Ë$.4º’víLZ½›ð½;ö>•Úä3cõ;R«}*½áÈøFz­ºœTIp¾–‘ôÛ59¡ÆQ©é@¶/#ja3o$hTMÚ*Rkv¥7¸5Ÿ[Fƒà=é6¼$ˆOµÝ—è’5H¯Û”Ú¢kتù��`¯ 8Ò>–Ž´ClÍlk¦�v-դݙwÆrÛkyMÍÞJ¯ùÀƒâ¿'…,uÛ“fåļGà¨Ì´Yšöͧ|½×ñ�Ù¼—A÷a˜ž.$êåN†WOãÚŽµŽôG“pw²ñµtë•pù´µí÷…ëO¼†™ëÛÂù��`ß 8Òþ–ŽèÀ>ÍŽ’?÷2 .âÂÛ›ßJ»jƒD–©5s#pTFn³4½ÏéC ;çÚŽ” Þ¸ï-q߯Yë4›]u ã�@ž”.pD‡Ø�öm>pd j¥;x?û^½+ƒ± E›ÙQàèTêÝkmB¡ªdh–†ÝñGÓþÕ*çܸŽFyÑn˜>Ö´9[ ­‘dGÏ+W3R[É6e«;Áð„kØxè,ûHšÚÿ×8��r¡t#§�ì‡i–68 ™¦g•Æ¥\kájôJºÚ¤£x™Sit_…E¬°àu})ª×ÇQ¥%½›+¹ á'PD4KÃîÙÀ‘ƒâ©ÒhËóÞ ¼Ò8Ư%8?5Á$Ó›½®E# øÄý²o9¯˜Hv^¸ÞÅ£wáë³ð{ŸÊ•.?|!­Z…À��9QªÀµ�ìÛ´slfû9šU-¸v jþ¨j- &ÕÚB›óÄ…¢"í¯OϽÞÓh–†ÝqjÝü]švÄ?5t¥>SKÒá7UK|½$pÒH³÷6š›X# ��LaGšáöQÛ�w/_¾¤Yöh¶©Z\[h¾™Z_ÐçQÆÀQº~à��À¡6p¤Oi5xd«õÛÚFßÿ}ô�€<Ñû“½Ñ, ûã÷qt'7Á£¨©lÜt6×8rk92Žæ×Mà�€<9úÀ‘Vßšq¬˜þÕ¿úWÑh4��ä‰ÞÇ- ‡c‡Çwš¡™þŒN* i}jôȾgú1ŠÜþF:—×2ŽššULçýú~Òk7pôVzÍq?m·á'ìþ¦Iî¤#ÍÃÍ ���¡5Žtx}7H´húë¿þk³��‡¥5Š´f‘m–¦MÔ€ý2#8NòJÓZB¶ÉZü~ÜŒl<|)I¿l¦sÿwWQm¢ÉòÏž-y­Á£žüVk™×“ZGκ+Žü¢Y“Z³+½Ißn��àP 8²ÍÐÒLúT—êÿ�v¾i°Œ^_'ý���È«Âôqdû…H3‘Q°+˜¶ÍŽ�ŸÖ*ÒÚEz¢#���ƒÂ”lÖ©u¤v†ä°mÚ¹ñG}]c¨q—Þs4mè=H‹ôc��€cQ¨Gâú×ù“ÖLâ /€mÓZŒ\càsGJ£ãk���£BŽ´ €$ò'ž�¶IƒD60@XXþHiÔr��À±*\'IµŽh6`4 ×½îhÍ@‰Úw‘Þ{4]pï��À±+\àȯu¤}JÐ4�À¶i F½Æ0R#” i Q'†Ö��@Q.p¤™÷öÏþ:�;áv€Mp�~Àˆ‘Ò�‘Ï>û,ʃ�€b(\àH}õÕWò_þË1¯€Ãqk¿1ågÚ”Š48@MF0Ók¥6Õ��ÅPÈÀY‚ØMΉô º.«”#`5 ¬ëõ’�;��Å@©Ø!Gù³î9Ѱõɹ «¼ëÑë&Íy�(JµÀ8ÊŸuΉôóZÛˆ A9Ùaõ5X¤áo¾ù†´�¤ ¿ú9� (Õ;Dà(Òœ |üñÇQ°@(0ÒôBÍ `}ôs�@qPªvˆÀQþ¬:'ß~ûm0Ò°u5”# ÛÏ×Q��Ž¥Z`‡åÏ¢s¢Íl “/¾ø‚æH%GÀÈÎ6ïT@Òk+µ��8>”j"p”?IçD 4ZÃHki#�@vÿþßÿ{ù×ÿú_GÁ"½öê¤Í€�Àq¡T ì£üñω> ·…j@6|·ÊÛ`‘;i­#��p\(Õ;¤™dä‹='$Ò`‘¾ÖÑÓp#é·k“åtªK³Û“Áhl>àüÿÛ»ŸÐHÒ>Oì:ïa`/†Äø2º-…/垃±!ƒ|(pÍÁ…áȃ((ÖÅð2 • Ã m¦kæF0î†c™ª†mx‰å…Áøí‚d<PË¢™ì·^¶™-ršv—ÈÁ4µ…é¦Ù?ç‘ ¥RŠ,UI )?xèʈÈÈP<O Å·Ÿ?iˆçÉïóñbÁ�¸~<ÕÂJ$Ó,©N†Ãályu·^µqì÷·¢µÞ‹Áaz½Ãl+Ú“zjmf±wÉÙÑx/‹‡ÛƒÈ/xgå\q§•ôû�¸^<ÕÂJ$Ó,åÃKz¸14­½XŸGÉ÷ÑïÞžÔÓƒÈF—á|;[±ÞÁû({s.*~ïÀõsžj¿‹¬³þŽèýíµµV´»™!\ˆôGò2òçÊÖ'Ëäú￈ÎÂ}kÑêô"Œ"oÅ£l¹ãN&T),Fù±‹N>êAåø;Ѽ)öMÌ_Gå\ãÑ ²^'Z³ýóC“æÏ]-é;û¿Å¯g?ÇYǦ²ì»ÙØi›³šåìàèm ½Î­¢>'õ¿õ,F©ò†ÑßéF»õ³è~¼1«ëñh7žtÓëtü¤m=Ù=~|ç¯b°ûytZiÑn‹Ðè¨Ý\rh7H ‡Êß·ÕbE5�¸žV°;D1,¢µýýcÔÿ$Úk÷bgøc±ÿÝÚÀiÒÊË8lÇÞn䝿ÂÐñ^ô·6'·“½ã—±³Ñª„0ãÊCu¥/u\ Ž…=yÐÓž~ÎÄxô,¶îlWæO7 ¾ÚŸDò $�w¢Ûÿ¾x=¹Ž—O&ìÕÀ¶rmsïwb£¦ÞÆhðËè¶'?ÛÚ­èì|]ܳ‰ý~t[Õc“ɹŸÇ?þ7ùдòA†f™¶Ÿ2xœÔqþ{¹ªVœy[~{ÙÃhåmøû£à³õ0²½¢ÝŒ¿l³]´ò\·'mð»îÜ›ŸÂ¤ìeäÇNÚ]ù=9Do}M#ø�RX??A¶Õ�àzZÁ'¨â!äØÿÝ~†6p†ô‡ò2Æ£¯ã·³Àäd/º£ýÓ}ÕÞ;ÉôÁ»š,sÜä¡ú·_O{b$sÁщýgȃ¯?Î{pŸ—&}ß:Gç<Ø^ }6vb8wÞÀnο?¿¦ù0h¢<O5,Ëú›þ¯÷ãÇóz('À^¶N¸<³àqVnE§÷›…=A§Ç–íôäïóiØX=×´L¿OÕ*™{¿à>¨4ŸQõ{h!�¸ž.ÿ êàed³!Õ?êwãͰ;“}­ÎÇñqþPX7T õT˜¾gú‡~ùú¢ó«»ÛÅP˜öv òâaúØç¦÷íÇðÙv1l!ß'³a0g0´©]¼»“ÁÑ‘PÙ«½.–>®âDp´¼ÃÁ_ƃì‹Þ ­hÏzOUƒ£¢·ßdÿÆÎË߯rxR% :-8Zt®¹à(ýßîÿþ¿ûƒøÏþ‹ÿ¡2ëùê„‹”‡A5a~Þøë_õŠßÓ§GÓ`©Ò†ŽÁe«®´f˜0�\O—üõfòGú"È9œ YÉüŠ?ØÓK¯¤SyOþ‡~9<'ýÒÞŠl¸_ôb¨>xÎ?h¤¡,ÛÑ.‡ÈäÂ6N¸žçAƒ3¤¶øî–ŽR?VÒPœr8X²ìqï¥ïXñ_Ûˆ­þ^úvM^—ÁQñÝ;õ3ì?58š|U‹ž%­n?öÓ†Êïƒjùý?ÿ·ÇîcÚF³œM‡›mtzñ«ìoâúqf£ipt+6³o„“Åñ‚#¸TOŸ>Í÷ZÅ�®§K~‚š>ÌÎôæ{Eœçöù÷ä¯+š'Î9ÿ 1íåpì3ó¹R–¼œá|!ÅÁÑìÁ÷¨×]Þsô°¼ìq$8š(çÉÃ×דïÛeGëñ÷ÿ,ŸWãË/¿\8ÿ˜à¨iªóÎ-ø?ÅïØi=—s•m¤è¥V ÊÿÐêÄönÑsô`O²áäßÅñ³¡’sïŸ}Ö³Øü*²…½–€óHÆ€ëé’Ÿ Š‰JËÞ<ù<%ësCM.98Zø™óÝg8Ï5³2.>8*açÑô²ÇU|¨àh"ŸX; 7moE¯û³âœ—3Tí>û¿Ïü¿Ú‚£&)ò‡Ø¢ö·/w6'u=ÙŸ†÷ŸÅ¯R�ÚÚˆö]¾oR*mz<zÛ³aÄi"ö_Æ`”BÌÊguv";ö:}WŽzÌå“gOO��+íòŸ ŽÍ t+:ÛÏ&ß=O3ÿžâáqùGÅö±ÉzÓ¶[§<ÜÎ9Ï5³2R;w玊vX8®âG)ØÉ‡€æßóÊ9Ëàj6ïØ‘sMŽ]R:ÿÝ?Åùê��`5]òÔùrȧ†,ï2D¬4ÿžüu¥‰s½fÃ"Êž åÒÞ“Þ4÷Òú»Íqdh‹œ+¤(B‘£!'–ÙŸ˜M8_™”zÙãfÊ çŒ9N•†ý<6Nœs~XQR~NÙ $}ÇÒ0ºó,Ç_ΣT˜ÿîÆ£Ýx²õéìû,8ºzæ9�€ëã’Ÿ ÊÉÔ ¡RÒDÖÿðlڢضTxTöž(ßói/>½ž<l~ñEezøüÛi/Œâøé¶ô@:¿ªÚtbíåÚÀéR{zÓ‰}Ëö™Je¥¾¼÷Mu_µLÚß“Ýiï½e›™.4)ó=•NUôl*ß7ß“)Ÿl~s®S ŠÊù–ÊÏœ\×N¿²üúáäÇxPÙ_-i©ö/¢?ûŽžuì´TC¸ôšËõÃ?Ä‹/â³Ï>ËçŸR��p}\ò_ïûñòÉ¿Š_ëÉ3ípç]zÁ5á¹yÔÉåxýúu>Aù£Gò{žJš7mKû��€ëáRŸ òa'Õ•n’4|fë±órÙ>p})šG\œáp˜/»}÷îÝü>§ÞE©—Qêm”z��×Ïå>AG1ÈzGCÂòyNv*CNŽ;9lg®,=œæœæ†Â,•aD°@j'×Ú ü¤ëæÃHs¥D©'Q9íþýûyxd#��¸<AÁR4:9¿4ÄìùóçÇæ*JÿMÁQÚn��Ü<ž à )šG,¯U‡Ÿ•séU��7Ÿ'(¸@BŠæQ'§«®~VE©Š��`uy‚‚ $¤hur$A©GQš“(ÍMTEi%´,ËòÉ®�€Õæ .¢yVµNª!Qu‰ü4ôLP��œÆS-\ ÁQó¬Bœ¥’^§í&³Îv£ìAå÷Çè Þû&FYt*¿[Öîu¢slÎõèdßM_¡³óEüý±sOÊz/ó‹tÎÆZ{r ÅN�à²xª… ”þÐ¥Y–©“4×Ïu URH”æ%ª ‰ÌOœ×á ëé÷Jû“èÞ[“ï£ß½Ýþ÷•×·c­µýýq±­ôc w6c3û6f{öûÑm­E«ÛýbÓIg�¸ žjá Žš§®NRÈ’†o¥¡[M‘B¬4Œ,MP®+BÕÉ«…DÀE:lÇ?ŽN y6³Ø›å71èu*½€ÒëöâÞCy¦_ï1”÷DªôLZ¨8g'‹Q±�¸\žjá Žšç´:IÁLµÇÎeG‹Â¡ê„Õ©¤°¨ ˆÊ9‰„DÀE;üe<Èþ1ö²‡ÑZkE»·ÓøGp�«ÀS-\ ô°O³Ì×I lÒòóÕ€&•¥¡o)ä©CÂ!ຘG)ÜyƒÞÉïªØêïÅXp�+ÁS-\ Ð,Õ:IÁL–V nʲLpT†AiŽ¡2 züøqü¤²è¼å*fÂ!àº8 Ž&ÆßF¶y+ÖZ#Û{-8€à©.P h–T')號#h¾”=Ê2ß3h¾”Ç¥ÞKeˆ”>§ —�®«cÁÑÄxô,¶Ú­XkoE¯û³JT¬Ä¶08J“cÿ\p�×§Z¸@‹åêK xm¯–?ù“?™@e)C ²¤!h�7Ý|piÚ`;ÚùïËêùEp´v/v†?ÛJiu´Ç·Ÿc¿¿ÛùyÏŽöûñ‹íÁäS€‹$8‚ ”𥬓üœ ¥ €·±—ý<6fb—Òö4Yv58Šïe±™V_ë|»åÒýÃxÖëÄú±Ù&Šåø×{ÕðçmŒv?Îz¹ü~±ÿ\/¦ñèylw6¢Ûÿ¾Ø�\”ÙSí¢'E) çãÞ5Ï|œ6l-ÍU°Ú¾‹¬³~ô»q~Úx/ú[›Ç‡Ÿ¥ÞHÃ~ìt7*¿SoE§÷›”©QÙ3©Ü²´ºýØeÑY°oVZe¸�\¤cÁ,¢mœŸ{×<§ÕÉóçÏH©7��ÀªQKÛ8?÷®yêê¤ G���‚#– mœŸ{×<ËÖIš ��`Õ Ž¨¥mœŸ{×<ê��`y‚#jiÇ¥%Ø—íâÞ5:��XžàˆZÚÆIéž|ôÑGùÊ[iNœ×¯_{ŽsïšG���,OpD-mã¤û÷ïç÷¥ZÒ¶§OŸæË»—Ü»æQ'���ËQKÛ8é³Ï>ËïËY%õFJÿ¥YÔ ��ÀòGÔÒ6NJÃÓÒ}9«”½’hu��°<Áµ´#¯^½ÊC£?û³?ËïËi%…Fiíôo"Æ{Y<ÜÄañú*©��€å ލµÊm#­ž–eY>ì,M†îE9)vú÷¢’†±•Òë•wðuìtnÅzOp��pÝލµ*m#õJ[§ èÑ£GùÏÊÝ»wó0(õ4J=ŽJÕcÊ’&Ç®JÛå`Ïzhå×ÛŠv7‹áÁx²c<Ùõ›èun?ËFtŸìÆh²ëpЋõ|ÛƒÈF‡'^§söwºÑîüU v?N+í»½Á›YhttŠ÷\¡ÆÕ ��@ƒ ލuSÛFZB?…A)ª®’V]í´eö“0•ïI%k^ÚÞão#Û¼­Í,öÆã8lG{­½ÁAÄÁnôÚwb«¿ãx£þ'“}·b3ûvòzûý­hÍBŸêëƒîÜ+îÁFt³—qP|ÎZ'‹QúÜÃAôÖ×ô8��¸†GÔº)m#õúòË/O ;K=‡R”†¥½‹,•ç8í½MºwãáNl¬Ý‹áÅ–R­÷b0Kv¾~÷v¬Û¦½ŒŽz }ƒ^û((*_—ç��\[‚#j]Ƕ‘†•óÍ;KÁQ ªÃÎÎ#õFJç;ë<MºwóáÏ‘¹ 'w£ìÁäú§Ç Ž���V“àˆZ×¥m¤@iˆÙ¢agiÙYÃÎÎ+TgiÒ½›ö8ºÝþ÷Å–RU{#Û6vb8›çh>8*��ÜT‚#j]HÛHóà<ü¼ÒÃåý¥ë¬;« u.C£¾WåÜCíO¢?z;ݶÿ7±ýäeŒ÷ûÑm­E«ó$^¦É²óI­ÛÅGePT„N/#ënä?Û´GÒ?M‡µ!Óü0·28juŸÅÞàW‘*w¹ü®��XžàˆZ¾mìÇË͹9un¦¦}¯Æ£ç±]YålÅ‚UÕÒD×Ó·AÒt_«óy<Ï>‰õv7ž †±›zç[ëìDvìuê…ô&½;“×sç¼"éº���XŽàˆZõmc?†ÙV´Ë° ,)zS,ÕÞúYt?.{©¬ËÁ§²ìßǰ¿ÝöíètNÏ“oc4øåd{kzlTŒò01ÅàÉä¼ù9Ò²ò¿ŒAÙ‹¦AÒuÓ,ê��`y‚#jÝ6ÊeÝïDoðæ¨gJ>l©˜ë&…;­‡‘í•ÁÎñ9p¦Ã R�T.ÿ>5ÞËbs}3v^î§ÑßÚ˜œg+úû?Æ^ö0Ö‹Þ2ãѳØj·¢ÕíÇäÈFñ½ju��°<ÁµÎnÅ$Êy “φsl5®ùhêä¶ixÔŽÞ Èôc wîåŸ}¼LŽÙý»ØÙ(z!UK‡¾¥ë¢YÔ ��ÀòGÔªkÓ?·‹ÞBÅ|6³‰’ÏÇÌÎS‘O¶ÜŠ—³ÞIMå{Õ<ê��`y‚#jÕ·b²ëÉqéØ4yòîl¾¡÷ ŽŽ q+”«tmf±×ðäÈ÷ªyÔ ��ÀòGÔªkãáNlœ:Llniö\ mEo7žd/ã?õ·¢u,8*Î{,ˆJó)¥åÜßÃØnEgûyŒòðèM žüõÉÞIWÌ÷ªyÔ ��ÀòGÔª¶ápY–Å£GŠ-iÞê,6[só åK¯ÿ]ôS@Tn›…Gå„Úi5´,þ¡ÿÅ䨩Tã·1Úý<:³sOÎùdwG±»Ý9Z­ºâZƒ¤k£YÔ ��Àò®.8*†ME%-Óþ·‘uÖì›”V'zÙ èmòÝ’Ç•C¢7+å¤Î§[êÿEtîÛˆîN?†eÄqƵç%]ÏńӋö§’îÕwÅù>œ×¯_Ç‹/òϸÿþìóÒ¿?ûì³â¨q¼ü"¶}´Zî`7zw¶Oé…´:Òý¢YÔ ��Àò®68JÁB +qÍz¤¼Qÿ“¸ÓLö”«kUƒa<ë¥Þ&Õ ’—;îp°=9ïnLû´LC›õüs&ò%ß7 —ZdésŒ_NWÿêd1Ê÷•½dZÑž½?Ç~>Tk>´JMz´m¿ÝÖ|H”zï|ݽzõ*ž?ž‡BwïÞÍÛDYR/£"ýðÃÅÑ…üg¼]2–ìÇ0û4º;_W~ÆÕtSBŠjX:kë×ÔM©��€ËpuÁÑx¿ým9´h>8š˜íŸ_Þ½PöX*C™%¾ŽßÎ&nž }&Žï_lùs½‰f×8q⺧¦æóÁÑœü½®wQ9ììñãÇñÑGåm ý7½þòË/óýÉÙmãmŒYô:·òãòÒîÆN¸ò¡Qréß« "8��XMW³ 8šY•«xÝ*–€O–=®êdèóîÎ:Ç\p4ëuòzNGoc/û$¶«½ŸGi~¡‡Ûõןz ¥COŸ>Íç'ÊžII=‹R£ÔÓ(õ8ZăöùÝ”{'8��XM×(8*z³TJ«Ûýâ¨å«º¤àhv-·¢Óû"úÓWS}0?*ÇW›GóÇ,~Oó•ÃÎæç'JáÑÂag§Hïã|nʽûéÍ7ñÕ`ƒIùê›7ñS±ý:Òž��–w‚£JoœƒaôwºÑž\sk3‹½¼ëβÇU]RpÔ™|v±òØâë(ƒ£ó÷8úÃa>¼l~ØYê]”†£•ÃÎÎÃöù¹wÍ£N���–w=ƒ£Ü÷ÑïÞžl/{å,{\ÕåG£<zxê°¹“ÁÑEpôÇÿú?[?Õ]*å°³ 6ìì<<hŸŸ{×<ê��`y×88:ˆA¯=Ù^ÍWu™ÁÑÄøÛÈ6oÅZëad{Ç'à>+8*‡=ý?þçøƒßû½¼®R)‡¥}阋âAûüÜ»æQ'���ËkHp”–¿k­­èïÏ÷ÅY°Ì~¾ÜûV>m­].é¿ìq»Ñk·Î˜i g£\Žc'†ÅG§¡eùµN/²A¹ª\¹ÿ½Øþ˜o™zßüÛÿ=¯›TýüŒ?úçÿ<þ›?ÿ¿âÿ«ÌO4íÆ“­OO„QŠíósïšG���,ïꃣ>Wçð)zìÌöUK+ÚÝ_Æ ºì}íqGNNF½¸·ÏYÎ<Ç(‹ÎÂ}åµbûú½èÜ;íÚS¹ÿò‹ß½©ퟖ÷ ¿j¤ós>î]ó¨��€å]}pDãiççÞ5:��XžàˆZÚÆùÝ”{Wí]÷~s‚]=í��`y‚£ÊÉ´O›–ãËᯂôss>7åÞ Ž���V“àˆZÚÆù ŽšG{��XžàˆZÚÆùÝ”{÷Ó›oâ«Á “òÕ7oâ§bûu¤=��,OpD-mãüÜ»æQ'���ËQKÛ8?÷®yÔ ��ÀòGÔÒ6ÎϽku��°<Áµ´ósïšG���,OpD-mãüÜ»æQ'���ËQKÛ8¿›rï,Ç��°šGÔÒ6ÎOpÔ<Ú3��ÀòGÔÒ6ÎOpÔ<Ú3��ÀòGÔÒ6Îï¦Ü»ŸÞ|_ 1˜”¯¾y?Û¯#í��`y‚#jiççÞ5:��XžàˆZÚÆù¹wÍ£N���–'8¢–¶q~î]ó¨��€å ލ¥mœŸ{×<ê��`y‚#jiççÞ5:��XžàˆZÚÆù¥{§4¯���°Áµ´ ���XM‚#ji���°šGÔÒ6���`5 ލ¥m���ÀjQKÛ���€Õ$8¢–¶���«IpD-m���VÓ±àHQN+���ÀêÑãˆZÚ���¬&Áµ´ ���XM‚#ji���°šGÔÒ6���`5 ލ¥m���ÀjQKÛ���€Õ$8¢–¶���«IpD-m���V“àˆZÚ���¬&Áµ´ ���XM‚#ji���°šGÔÒ6���`5 ލ¥m���ÀjQKÛ���€Õ$8¢–¶���«IpD-m���V“àˆZÚ���¬&Áµ´ ���XM‚#ji���°šGÔÒ6���`5 ލ¥m���ÀjQKÛ���€Õ$8¢–¶���«IpD-m���V“àˆZÚ���¬¦« ŽÑ[_Ë?wqYNö·‘uÖì›”V'zÙ Fãt²ï–<.}l/Ö7+"N>ÅRçøû/¢³pßFtwú1<(.è¬kÏKºžc”=X°¯,é^}WœïÃKŸ���¬ž« ŽîlÇ P§ÁÈz/yfó6FýOâNo0Ùóc wîM®¯è ãY¯­µVl켌i³Üq‡ƒíÉywã ?`Ú¬çŸ31Þ‹þÖfôÓ½§Yúã—±³ÑеN£|ß(v·§×Óž½?Ç~k²}>´zƒÞ§GÛöûÑm͇Dã8|]Á���ð]]p4Åo;*BŸùàhb¶¿Ø7ª”=–ÊPfÉãÆ£¯ã·£·Ó}ó¡ÏÄñý‹-Ž¢7Ñì'N\÷Ô´Ó|p4'ïÅö.ZDp���«éê‚£cG3‹¡ýx¹³­µ[±™}{<|ª=®êdèóîÎ:Ç\p4ëuòzNGoc/û$¶«½ŸGã½,n¿Ïõ×��ÀjºFÁQ9ŸÏQiuû±_µüqU—Í®åVtz_DxòjϛԷ¼ ‡Ãò io¥¹ãÞïúë¥Ï����VÏ5 Ž*½q†ÑßéF{rÍ­Í,öò®;ËWuIÁQgòÙ{Yl¶N»Ž28ZÜã(ÕÍgŸ}VGz���—ãzG¹ï£ß½=Ù>핳üqU—ò èá©ÃæÎšã(õ8úè£âñŸýOñç¿ÿûæ8���.Å5ŽbÐkW¡e«ºÌàhbümd›·b­õ0²½ãp×MŽýêÕ«øè¿úñ¿÷{ñÇÿú?[/‡à���VSC‚£´ìüXkmE¾/΂eöc?†ÙV>m­].é¿ìq»Ñk·Î˜i g£\Žc'†ÅG§¡eùµN/²A¹ª\¹ÿ½Øþ˜o™z£Á/ckë×ùð¶W/¿ˆÿòŸý³øÏÿÛÿ!þŸW¯Šc&ïíÆ“­OO„QŠà���VÓÕG'&|®ÎáSôØ™í«–V´»¿ŒAuÙûÚ㎜œŒúôÞ>§9ó£,: ÷•CÖŠíë÷¢sï´kOåvtûÿTô¦Z´ZÞ+üª‘Î���¬ž«Žxg?üðC<~ü8Ÿ÷h¶âÚÒ6���`5 Ž®±´ÒZª·çÏŸ[.†¶���«IptB9™öâ!aLJÒ]½,ËòëúòË/‹-^:?���°zG7@êq”ê/õ@ºÚ���¬&ÁÑ ‘£4çQ ÒH’¶���«Iptƒ¼zõ*îß¿ÿAÃ#m���V“àè†IáÑÝ»w?hx¤m���ÀjÝ@)0JÁQê}”‚¤÷¥m���ÀjÝP2<Ò6���`5 Žn¸4YvªÛ4yöyi���°šG+à}Ã#m���V“àhE¤Ð(ÕñÓ§O‹-ËÓ6���`5 ŽVH¥HïBÛ���€Õ$8Z1i¢ì4aö£G–^®_Û���€Õ$8ZAex”V][&<Ò6���`5 ŽVÔëׯóàèîÝ»µËõk���°šG+,õ6JáQê}tVx¤m���Àj­¸¥É²SxôâÅ‹bëqÚ���¬&Á¹¥6V^›§m���Àj1“eYÞÒ«´ ���XM‚#ŽI=ŽR[H=JÚ���¬&Á'¤¹ŽÒœG)<Js i���°šG,”VYKáQZuMÛ���€Õ$8âT)<º{÷nÞ6^¿~]l���V…àˆ3•CÕRï£$���«CpD­Ô6=z$<��€s,8R”ÓJ’&ËNÿN+¯���7ŸGÔª¶§OŸ ���`Eލ5ß6Rh”¶¥H���ÀÍ%8¢Ö¢¶!<��€›OpD­ÓÚFš(;M˜}ÿþý|õ5���àfQ묶!<��€›KpD­º¶‘£ݽ{×rý���pƒލµLÛ(ãÔûHx���7ƒàˆZ˶¥É²Sxd¹~���¸þGÔz×¶‘£ôá���\o‚#j§m|ùå—ùû²,+¶����×àˆZçm©ÇQzoê���\?‚#j½OÛxñâE>çÑãÇ-×���׌àˆZïÛ6Ò*k)<J«® ���àúQëC´¥à(•ׯ_[��€&QKÛ���€Õ$8¢–¶���«IpD-m���V“àˆZÚ���¬&Áµ´ ���XM‚#ji���°šGÔÒ6���`5 ލuémcümd?Áá)¯��€K!8¢Öå¶ýx¹³­õ^Í¿���.‹àˆZçkû1̶¢=yozÿ¬äÐdß³íè´Êí±Õß‹qͽçèõzt²ÃþNtÛ·£Ó}8='‹Q¼Ñà—“í­é±ín<Œ&çœbð¤[\K+ÚÝ_Æ`ô6¿J���àt‚#j½{ÛÇÁ`;Úkw¢7xqðuìtnÅÚÆN S’s8ˆÞz ¾›C۬싃ôÚEÀtòõá ëy�t+6³o§ÁÐÄx/‹ÍõÍØy¹Ÿ^Dk#ÖZ[Ñßÿ1ö²‡±Þy/Æ1=‹­v+ZÝ~LŽ���Î 8¢Ö»·ÃeŠà&OЦ¯×D6šovvPtòuµ£78˜nˆc¸s/¿ÎãerÌîßÅÎFÑ ©Z*ç���Që<mcÚ³çvÑ+èM zw*½Š’4´ìÿŒ_õ:Ó¡hïÇ;!ïÝÔŠ—³ÞI���ÀrGÔ:_Û8>_Q«óyì–ó åCÉîE§÷W‘õÑ?3(z‡à¨õ0²½¹¹‹òàhòù›YìIŽ���àލu®GÃØ¨„=UÓàçvtûßO,æ8šŠÒ0·½Ýx’ b÷Øë—ñŸú[Ñ:Ÿw, Jó,ý*²á›bÛ­èl?Q½‰Á“¿>Ù; ���8FpD­sGi²êÙªieÙˆnö2ÊɲóΞD¿ÿWùjh­|ëÃbbí´/‹áÜëèÿEL'ÇN¥½ÑîçÇVjë>ÙEãQìnCâR©®¸���œJpD­woã8xùElÿúhÕ³ÜÁnôîl/ì…���4àˆZïÜ6Æ/cgãvehX²ÃìÓèî|GÌ���€&QëÝÛFZ1-‹^>íhxØN(4��€kDpD-m���V“à¨\Å+ïs|¥.¦G���°šG‚£Z‚#���XM‚#ÁQ­ëÔ6ž?}ôQ|öÙgñÃ?[��€óÅa¼ùæw1 &åwñÍkÅÏ»nmãÕ«Wyxtÿþ}á���¼Áµ®cÛHáÑÝ»w…G���ðGÔº®m#F)8J½R���¼Áµ®sÛ��Àù ލuÚFš,;ýiòl���`9‚#jÝ”¶!<��€w#8¢ÖMj)4J?ÏÓ§O‹-���ÀiGqƒ^;ÿù×ÖÚÑÛ)Ý´¶Q†G©���p:Á‘à¨ÖMli¢ì4aö£G½\ÿ´]*M+���«Bp$8ªuSÛF¥Uך )šG���«Dp‡ñæ›ßÅ`0˜”ßÅ7o‹í”nrÛxýúuݽ{·‘Ëõ )šG���«DpD­›Þ6Ro£¥ÞGM |/›G���«DpD­Uh)<J“e§ðèÅ‹ÅÖ«ç{Ù<ê��X%‚#j­RÛHáQúyÓÊkMà{Ù<ê��X%‚#j­ZÛȲ,ÿ™Ó¯šïeó¨��`•ލµŠm#õ8J?wêt•|/›G���«Dpd9þZ«Ú6Ò\GiΣ]ÕrýBŠæQ'��À* Žj­òƒrZe-…GiÕµ«„Í£N��€U"8ÕZõåݽ{7^¿~]l½BŠæQ'��À*Åa¼ùæw1 &åwñÍ›Ãb;%ÊÓåúSp”z¥ 鲸÷Í£N��€U"8¢–¶1•£G]jx´Ü½¯öš;¥t¾ˆ¿Ï,Þ·v+:½,£·ÓÓ²è,<n-Z^dƒQŒó—ùÜ,Fù±‹N>ªzMw¢7xS웘¿ŽÊ¹Æ£Ad½N´fû7¢»ÓáÁôÊ"¾‹¬³~ôÞc%û×G?ï‰ë˜/ëÑɾ+Žõ}���V‹àˆZÚÆqi²ìtOÒÊkm¹{ŸœG¡K¸ »žÅÖíNþ=܉cAÈ~ ŸmG§µk;1,s—ñËØÙhUšq ½Î­É5Ý‹á“mËnÃA/Ö'?ëZû“èÏäûèwïD·ÿ}ñzr/ŸL®·ínVE•k;öþc¸sor½"1ÅàI7Úé³Z›±órº=ÙïG·u<$ÊÏ=ø<º‚#��`E ލ¥mœôôéÓü¾\tx´Ü½£ß~£2ô™ pŽíÏ÷͇#eÏ¡JÀRöØ™ë14 xÊ÷¿ÃçÖ8lÇ?άÖf{³÷¤këó`7zíÖñ«0ÞËbóØûËžDÕŸ+IaÐö4<ªžçp½õù{s’ï��°JGÔÒ6K¡Qº7©ÒE9×½?àTœŽÊ<óÍ‚àèàëØI½zZ#Û«ö *œõ¹5²Œ½ìa´ÖZÑîíÆô,Õàhûý­|ÿÆÎËÉ«y©wÒíÉ=+{D%óÇN,ŽRõp{09Óß��`•ލ¥mœî¢Ã£‹ ŽÒ¼=s¥µýýjsÚA·+ÃÆæ¼wp”›71èÝ™|ÎFlõ÷R¬U ŽÊžQ§}Æüþ³‚£r[åçɃ£ùŸw-Ö{‚#��`u ލ¥mœ-M”&ÌN«®¥ ´?¤sÝûÚà¨Ú«f?†ýè¦á_ÇzÍ÷8Jóõc§»1¹¦[±™}{²ÇÏ Ž&ÆßF¶Yölz}ÉÁ‘G���U‚#jiõ.*<ºøà()‡€U{×,žãh:ôZ¬­÷NNzý¡‚£‰|bífµ·¢×ýYqÎ˪¶ˆï��°JGÔÒ6–“£ݽ{÷ƒ-×9ÁQÊL¦«šÕGåp® ŽRH4›ÀºzÎ2¸joÇ`¶ôþÔy&Ç>6¯“à��àÁµ´å•áQê}ô!£w¿÷e(²x.¢“Ëñ§!hÙt¨ÚÚ˜-­b9þ‰ƒ—‘åCÕª“W—Îþܳ½½ìç±qâœi{š,»F•Ÿ“–ãÿe ò¥÷ÓÏpŽåøç—þÏC©“½™Æ£Ýx²õélŸï��°JGÔÒ6ÞM ÒdÙ)<zßåúßíÞ—sü¤^:E™?eï›Ê¾jiwãÉ`4 LòžC ŽÉËFtŸìÎ-±ÖçÖ™›„{¾'Óx/ú[›s½˜RPTηT~æäºvú1œõB:mrïIiu¢÷«¿‰_ü/ÿk<zô(^¿þϾ7“Òêöc¿8sz ��°*GÔÒ6Î'…GéÞ½OxäÞ_œÔ#,õK÷8ÕÕëׯ‹=gS'��À*QKÛ8¿/¿ü2¿Y–[Þ{ñR°—æ¥J=ÄR=ÕMn®N��€U"8¢–¶ñ~R0‘îaêÕò®®ý½/'Óžü‹Ë¢Ï®F ùRxTH§I× ��°*GÔÒ6Þß‹/ò@âñãÇï´\¿{¹RݤÐ(ÕUê…´h˜¡:��V‰àˆZÚÆ‡‘æÔIDšWgQx”BŠ0U¹÷W£œà<Ýÿ ‡Ãb:��V‹àˆZÚÆ‡SNÈœJu2æ´=Ýç´ÊW•{µR•Rª› ©��`•ލ¥m|X©7K ŽRשWKºÏ©T%÷¾R`”‚£Eu��p“ ލ¥m|x),Jó¥ðèOÿôOgD*OŸ>-Žrìq”Ê»,á��p] ލ¥m\œ‡΂ˆ²¤0©œɽožT'ﺄ?��Àu%8¢–¶q1Êy•r5¯ôoš¥Z'Ë.á��p] ލ¥m|xóóÍ—4R’þM³Ì×IªËº%ü��®+Áµ´/Ío”îëYÅ ^ÍtZ¤�é´%ü��®+Áµ´«ì¡R]¥kQ)Cš¥®N-á��p] ލ¥m\¬,œ$Ñ,ËÖIª×²NS3+°��בàˆZ򮌻 ’”«/ï"Õg9Ÿ•%ü�€ëFpD-mãê¸÷ÍsÞ:±„?��p ލ¥m\÷¾yÞ·NÊØRIËù��4™àˆZÚÆÕqï›çCÔ‰%ü�€ëBpD-mãê¸÷Íó!뤺Ûýû÷­À��4ŽàˆZÚÆÕqï›ç"ê$HiåµtnKø��M"8¢–¶quÜûæ¹È:©.áo6��  GÔÒ6®Ž{ß<—Q'óKø��\Áµ´«ãÞ7ÏeÖI¹„?��ÀUQKÛ¸:î}ó¨��`•ލ¥m\÷¾yÔ ��°JGÔÒ6®Ž{ß<7®NÆßFöðó¯��*GÔÒ6®Ž{ß<7«NöãåÎf´Ö{‚#��`!Áµ´«ãÞO÷²x¸=ˆ&dWW'ã8öc§»­ÎÇñq»5¹–‘ÞN¶ÿ&z[ùµ­­mD÷ÉnŒÆÅÛb?†Ï¶£ÓJû&¥Ý'ƒÑälEh”¿'•õèdßï��˜QKÛ¸:îýÄÁױӹ뽎Ñ[Ÿ†<­Í,öÊ`è`7zí;±Õß‹q¼Qÿ“h¯ÝŠÍìÛÉëq ¶£Ýþ$ú£·)‹þÖF¬µF¶7y1èµcM#��àÇ‚#E9­p5wï†ñ¬×)z©´¢ÝÍbxŒÔfq¯—ÃA/Öóm©wÌá‰×éœýn´;ƒÝÏ‹ž1w¢7x3 ŽÚbñž+t¥uR„GG!Ú8öû[sC;~÷vMÿ},tÛïGwr§ÛG��ÀÙ$Ð` ŽÒ$Ê›·ŠÞ.EO–µvôµ½^òpcúT_Äpç^ mD7{Åç¬u²¥Ï=–\­fG‹‚ŸÃe&×9¹¿ßý»÷î»È:ëÅý��gAƒ5)8wbcí^ì ,¶”êz½”½ŽŽz ]„eP4fŽŽœ¸eHT­—bÛÆN ÇEH”ÿ»ØG·bcç夿G��ÀÙGÐ`M ŽæÃŸ#5½^&Ç Ž>cÃÌ Å¶VçI¼LÃóá}í¹Þ^·¢³óõäÎŽãàå“è¬ÏÍqÔÚŠþÞn<Ɇ“#���ŽŽ Áš×ãèvtûß[Ju½^惢òuy¼àh)Å}HŸŸÊÑýX0¿Tò—ïKæWUÛŠl¸_ì+‡Vç«��8"8‚»²b‘rî¡r…®dÿobûÉËŸÙë¥ ŠŠÐéàedÝ"äHaÒ?M‡µÍ†SæV&­î³Øü*²Cå.W£ê��à‚y‚kZH1=íÊ*g³ ¨®×Keu´Vçóxž}ëín< c7õ.*ηÖÙ‰ìØëÔ éM zw&¯ç{Ò\t]7Õ?üPü ��`Jp v“CŠëê&×ÉG}Y– ��€O¥Ð`‚£æ¹Éu’B£¥òüùób+��°Ê<•Bƒ Žšç¦×Iêm”¤ôsÞ½{W€��+ÎS)4˜à¨yV¥N^¿~Ÿ}öYþó>zô(†Ãa±��X%žJ¡ÁGͳju’¤•Ò«W¯Š=��À*ðT &8jžU­“Ô㨠RO¤(��7Ÿ§Rh0ÁQó¬z¼xñ"Ÿû(݇§OŸZ ��n8O¥Ð`‚£æQ'SiÒì YÂ��n6O@Ð`×6¤8Do}-¿þµõ^ ‹í7€àèH¹›%ü�àæò &8jÁÑI–ð�€›Ë4˜à¨yG§³„?��Ü<ž€ Á®mHñÓ›øæ«A “òÕ7ñæ§bû 8ª—–ì¯.áo6��¸¾<Aƒ )šG,Ïþ��pýy‚R4:ywå léÞY ��®O@Ð`BŠæQ'ç—¤r¶e¤Ç ™��àŠy‚R4:y?Õ%üÏZ- kK÷:…G��ÀÕñ &¤huòa¤�ééÓ§ùýLÒ‹/Š=Såêl©Ìï��.' h°kRXŽŸ%-Z¿ìmT–Ô;É5��¸ž€ Á®mH!8âU—ðÿÃ?üÃiÛ©”÷²ö]dõ£s¶·cp0.öÆ({Pù¼õ¸×¹ë³×©<ˆl4mȇƒ^eßzt²¿=~îIYï &g­šÿŒI¹aß ��n&O@Ð`éáòZqN»»»GÁÊ\ù0CÖbÐkOÎ׊öÖ³•ÙQ²ßîúVô÷‹éuk-ZÝ~ìO·¿Œ;?lïm¹arøV´ÖnG·ÿ}±m³Î �� ä ,=,_K?½‰o¾Ä`0)_}o~*¶ß�×¶N®‰rÞ£Eåà YKÁÑf|ÜýY´ÖnÅföm̲£xÞ®E�z²÷Pò]dþòX(:í‰tÔ3i¡üœ©—ÒwÅ��h6O@Ð`éa™fQ''…B)ª†Eóåý‡¬¥àè‘íýcd›·&ç¼½Á›é.Á��œà ,=(Ó,êäâ¤eú«!Ñiåý†¬ÁQ wv£×nÅZû“èÞ Ž��`O@Ð`é!™fQ''õ&Jdו÷ëuT Ž&Æ{Yl¦9‡6³Ø{+8�€yž€ Á„Í£N®»ãÁQÄÛõ?‰vš,ûÓ¿ˆn58*Vb[¥É±ÿh[p�Àç LHÑ<ê些Ž’7“mwòº=¾ à48ZÛØ‰auõµ$­ŽvçøöÓƒ£ï£ÿ‹5=ï©ÁQZ•m;¶Åk��hO@Ð`BŠæQ'×ÜøÛÈ6v4!v)ß~k.8z{ÙÃ|õµÎöóbéþq ½NûøŠl³åøÛ“sWŸñ(v·;±^.¿_,ǼÓÛí~õ­èïÏ'T��pµ<Aƒ]Û¢˜ædŽëOpt²è¤6Y”ù!hãѳغs|øYÄ~ û;ÑM“h—ïmu¢÷lGñPÑ3©rîãåvtûÿ4ùø ö•V.�@ƒx‚K“×’à��àFð &8jÁ��°J<Aƒ]Ûâ§7ñÍWƒ &å«oâÍOÅö@p��¬O@Ð`BŠæQ'��À*ñ &¤hu��¬O@Ð`BŠæQ'��À*ñ &¤hu��¬O@Ð`BŠæQ'��À*ñ –B ¥y��`Ux���`!Á���� Ž����XHp���ÀB‚#�������°à���€…G����,$8���`!Á���� Ž����X âÿèØ ϧç����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8u.png��������������������������������������������0000664�0000000�0000000�00000217473�15030617045�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����]���¤\¨���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÿ¥IDATx^ìýmŒÙšØùÕwÉ Còƒ10jüa€ Äý°„a¤áqaМ]pS†Cr¹¯J#zК^t®ra® LµLîæn«©m£ª _LkˆØ¥çb´Ýô$Zp·URº[»T£œB{D°ËyuÑæPåô½\ªnÞÇñDœ“y"2"ß*3#2ãÿkD³ò=^NÄ9ç‰ó²#������@‚G������ÈDð������™����� Á#������d"x�����€L������‰à������2<�����@&‚G������ÈDð������™����� Á#������d"x�����€L������‰àP2;;;,,,,,,,,,,,¼�ëFªJ†Ì���Ø\”ç‘RP2d6���Àæ¢<<ꀒ!³���6åyäT” ™ ���°¹(Ï#¤: dÈl���€ÍEyy Õ%Cf���l.ÊóÈ©(2���`sQžGHu@ÉÙ����›‹ò<ò@ªJ†Ì���Ø\”ç‘RP2d6���Àæ¢<<ꀒ!³���6åyäT” ™ �l&½~Ûk¸ý;¹¸¯¹'—Y_sÿN.³¾æþ\f}Íý;¹ÌúšûwrÉz �Šˆëò@ªJ†Ì�6×ïõb(*®OÈ©(2���`sQžGHu@ÉÙ�Àfâú½^ìo�EÅõ y Õ%Cf�›‰ë÷z±¿×'äT” ™ ��Ó‘_(*®OÈ©(2�ØL\¿×‹ý  ¨¸>!¤: dÈl�`3qý^/ö7€¢âú„<ꀒ!³€ÍÄõ{½Øß�ŠŠëò@ªJ†Ì���Ø\”ç‘RP2d6�°™¸~¯û@Qq}BHu@ÉÙ�Àf*òõû²ÓÝ#ñ{—æ™)=9mzR ¶igg_êís˜—Š‚ürŠËŽ4vwÅó_˜'fÔïJ»U“ªçKÏ<`>\ŸRP2d6�€™ôO¥Q{¼‚ þké¶nÉÎ~Kº—çÒ®ïË΄WÒiÏ´BÎ̱נ!Á#`a”ç‘RP2d6�°™Ö{ýÖ ÌUð¿“víšì6:rµÏ@ú¦Tçiñ4òËUéi«Jð¸®OÈ©(2�ØLË¿~¤ßõ¥V­„ß=ê>v!g­CÓ¥L—)Á™AO:~C¼½†t·]H÷IS¼Ê4é¿ÁwT¥uvaº:ÙïÕ¥*N_¤&~mß<·/µ“SéMìǬûÙIôÝágè>5…~/²¼‘^Ç—†w3:~“Žy(xݯKUUå¦x{Nð(ø®ÓûÃcYñN䬘†Çöëáã«ÍÇõ y Õ%Cf�›iù×ï¨P¥Ö–‹Ásñƒ ½v% ƒ6³·‰Æ; *ù»QðhøxgO¼Ö3éΤµ_‰~'üÄ ñ½ÝQ üíkR­?‘ÞàôÚw¥|öÐ>u¤¹ÇZšùåà `ü›|ÌM 1LôžH]–aÚ2¯UïJ»÷&ê*¼}Î1+·Å?¼ïñÂ4bÖ(1®OÈ©(2�ØL«½~_JÏ?€æëZ”üì@.Úu© ƒ:ÉïŠÝ–ìïÜ’V÷uøª jYÙV<Â=_<Ûrlâ1×ãy]ö[g&è¾fþOÎbÓ’ jV¼w¥V,玀Ðjó ©(2�ØL«¹~k×µÏÅ×Ù¯ÜJû•‚GÉ ÎäàQô^7xdÞï|_Zå(<špÌÇfesÓC”&¥³(¸X‘jã4ø$�Åõ y Õ%Cf�›iù×oÓ-¨Z“Vûké.­åÑ|Á£(8pMjíïÂWçùm‚G9š5x4ÖmÑ=¾æïJ]Ú)ÍŠúϤU»'¾<sWF  ¸>!¤: dÈl��¡°EH%êN40Sæ§Î{ÏäK&“™~}�HvaJtCKìxKfÜ›hLœëN0)Û0`qþB¾üRGÐÁºÄƒ~“޹™¹¯âIó´'—vÌ£ <²ãý¡tÃó*fÌ+ýæà³ÍO¤{©iò¶4:¯‚çÞȹ[*±A¸ò¢<<ꀒ!³€Í´üë÷hVµŠ÷|Úz'øÛ x¬3`™«½æÓ‰ƒGœÑX5_|á>®Iã¸ý­Ë-O¼ØlkQ°aÐ{*MoÏ<·/5ÿ,X‡éìàËワN pÍO×b³æUå¸QË>æÚÂÈM¯Z—F­*ÕÚCé„ÇÌ™‰-|½&'®œjðÒ~>ñ{¶µPVz.�ëFªJ†Ì�6×ïõb(*®OÈ©(2�ØL\¿×‹ý  ¨¸>!¤: dÈl�`3åvýŽu_ìÀ×ËgÆ]JùÍp™a6¶«Ðß�€"âú„<ꀒ!³€ÍÄõ{½Øß�ŠŠëò@ªJ†Ì�6×ïõb(*®OÈ©(2���`sQžGHu@ÉÙ�Àfâú½^ìo�EÅõ y Õ%Cf�›‰ë÷z±¿×'äT” ™ ��Ó‘_(*®OÈ©(2�ØL\¿×‹ý  ¨¸>!¤: dÈl�`3qý^/ö7€¢âú„<ꀒ!³€Í¤×o»¸Ý¿“ˬ¯¹O{Í]Ü×Ü¿“úÓŸÆ^s÷}îßÓ^s÷5÷ïi¯¹‹ûšýWóòåËp°\\ŸRP2d6�€uò}_Þ~ûm‚%¢ÁB=îZæøöÛoͳ�–…ò<ò@ªJ†Ì�°N6ˆð½ï}OºÝ®yÛêéÓ§á±ÖcN™X Î-äT” ™ �`lðÈ.Ÿ}ö™yÛDƒo½õVìXk Àòéù¬©(2�À:%ƒGº|øá‡æUl:íŽøÞ{ïc]ôy�˧ç°n¤: dÈl��ë”<ÒEÇAÒ±q°™ôØ}üñÇ©ÇÖ. ÕÐó X7RP2d6�€uÊj•¢‹vkb@åͤÇ-ÙM-¹hàÀòéù¬©(2�À:M Ù…™Ø6Ó´ÖG_}õ•y'€eÒó X7RP2d6�€uÊ i«#m™B׵ͧƒeÿÂ/üÂØ1fv=`5ôüÖT” ™ �`’Á£_ú¥_’÷ߟ ÑÑ à_ù+%ãÈ=Öc`5ôüÖT” ™ �`lðHÿÕnLÚE[XØ:ö‘_;v•c=¾”7€ÕáüBHu@ÉÙ��Öé³Ï>[IOŸ>5°ÉtÖ¼äÀØÔã`5(Ï#¤: dÈl��yÓÖ):S6›4x`½(Ï#¤: dÈl��E Á#Zm®dw5�ëCyy Õ%Cf�( Ñjes¥uW°”ç‘RP2d6�€¢ÐÖGLç¾yè®ä‹ò<ò@ªJ†Ì�P„ÐÁ³±9è®äò<ò@ªJ†Ì���Ø\”ç‘RP2d6���Àæ¢<<ꀒ!³���6åyäT” ™ ���°¹(Ï#¤: dÈl���€ÍEyy Õ%Cf���l.ÊóÈ©(2�@îú]i·jRõ|é™§°Á~Òð¤Â~6åyäT” ™ � _¯¥ÛºæG;³1ú§Ò¨=&Øqe}é4ª³ïw�…Eyy Õ%Cf�ÈŸ dL b¼ Þwƒ`ÇÒ¼ßÛeŽò<ò@ªJ†Ì� éúu©jË—ÊMñöFAŒþ™øµý¨UÌNEªõ'Ò\ÈYëP*ásº‰ß{9ú]ªw¥Ý{~;f᜖Há¾½”Aï©4½à¸ès•Ci;ïÙÏ!rÙ‘Æ®óÀÚé9 ¬©(2�Àú ¤ßiJ5 H\È ÷DêÕŠ b ä¢]—J¥.í‹×rîß–ÊÎ-iu_ŸK´PºhK­rMjíïdpîËa¥"û­³à0›Qðè¼w*'µ#©·Ï£ý§Ý«7ÌcÓâ+<&ñvƒÏ„o|£šùÏÙï@N(Ï#¤: dÈl��ë÷´k×@Ï„nk=_¼ª4:ýàÁ¤îmQ d·Ñ‘Kó ¦1Á£êxûGa Ϻì4d7laä.æ8„A;МIëÆi_:òByy Õ%Cf�X»°«“ÛÍ)%(¤3°ù¤¦-’&.¤Ûö¥eº¹<š‡ ]¯Jµ²'‡ÃÖC—Òó‚ýu_ r^©µåU·%7‚Ga'�ëFyy Õ%Cf�X;m­²_ ƒQÐÁ ¤v"^e_j­¶t»²[õŸIË»&ÕZKÚÝg´<š›í¶ö9ÕŠZE]Ó º-Ù¯HíÝ`Éx€õ <<ꀒ)\f3v7z’IÝÒÅÿd`Õ‘AON›žˆv_Þ­Èÿ4óŽó˜+­’™¢|¿%Ý{|Dº9ŽMâØÇ3reÇÐñ¤yÚ“K;摦S¯%¾^ÛÃóâôÚw¥š<:ï=“âß Î‡¨û”7‰àÑ<FcõÏÅ? òÇjS:ýà*Žy“a^©cQ=“pì)¥]¯Þ 7RP2¥ÊlÂ;Ý»áQEeoñàªkgZMµìÀ¸<—v}®€\̪·#×ý´ ¦kÈnC:+©í.ñØËæÎ¨V­çvUªµ‡Òé½6-‚ç5¸ôiKÞ þ®x'rÖm‚IÁõ»ùTzÚòHoèãGÒz÷š™ŒNTÓ™@\XÖî~mùbøXƒuÒïú¦Û >·/µ“Sé ãDLº#7 Èž£Àº‘ꀒ)Ufðiï^_…¹c¾´Jø²¿o^ÑÝã«ß­_õv佟V#lI´²mZÖ±€$ Nß1³àÈÁ#äT”L~™Í@úÝO¥¡cUxRÕ»šÞäŸvü๛3x½Žø Oöбý¾ërÐ81]ÓöÄk=ý¦±Yc–úç®jµ&'mc’‹pŠâ¨ .svíÞiÖí£ûrçƒ'ò,íûÜ;ò±»½Ò}Ò¯RÏÓ;ÄQ׫Xw¼á]wgû‚ç>zpO>Hî×°û–ým]ªÒ8íJÇoˆ·gZÃô»ò$ØÏ'ÜWÁ:êØ"³lÇPÚñþCé&îj¦ˆžq?źdÙãö[npæôbéÌîÓ`¿µ?1ës#xí¹týzôy·%CìØT¤Z2¼;Ã%Z×ôcèùr¦á`=ÌïU¼¦<¸ó`¼5R°½©Çæ !Ì~ˆZg+”vlu{3Ó�ÌnpîËáÙ»ÜXÍÓu#Õ%“[f3¬Ø•ïÆià=7Kë Qsû°U…SQŽ*Ï?‰ºëTê£éƒcÓ=›‚oÅ,¦KOå¶øçÓÆAš¬¥ˆ6ñ¯Ën8@ì ¨ÃŸÈQSƒ‰ï Ǹf‚v¼hœ7à ˜7^…ßKqÃ^ì8"ºÝ?–ví†ÈTƒ^ui¦î×øôÖÃ@[`sº5 ǵ˜q;\iÇÛ´Š ̵cm„cœÌúýº­7Í~ Þ×iûéšÔ>ýaÊo9é,ô5ܧ{Q7˜K³.f,–A¸í8*ѺUÂýûZÎu€Y3ÞÊp{}9Ø £y-ó9µ.m·kžÓA€î2 FEÛâp?¶“Òõ?�Ó™k`pÝ©x÷å”qBÈ­<R#Õ%“kfv#K ZœðL–¨'¾ol`áØw§ T~¾މ4¹"=!H2‘)tµpŠ_�° e%u+g»ÆZU…‹n矟»nÆ™TÀOìÇàÿñqxÌï·w¶í“v¼‡Üßœñû€¡»„Û1ñ·±´Ü§&m ·?¹±ïI¼Ïy-û9é<\çi-¦›pŸ¸Û_§ÉiË<��6Š–+€u#Õ%“kf3VÑ \%x”ø¾ÉÁ#ˆp+Í&‘$ˆY4xp» UëâwµëRüû¢õv+øæu0ˆo— &¸Û9¤Ý·l·°ŠTk¾tSgÄ™<JÙÞ¶cLÚñ×ñsñ[µ¨{˜ýÍY¾?<ž¢Ôßr$ÒYê><êw¥í?0ûÖ~Ï›¨%RØBë2j ¶.z3á¹FÝÖÂîdþY°ÅISŽÍØvÇ×}ZÚ��›‡àò@ªJ¦¼Á#ÓºÄí:4-à04%H2ƒAïTN48VÚãß7Þõ(þzr»¢Çîû“tŒŸ‡a #=0¶@ðȘ´cÆö¯éÚU­I«ýµtc¿™øýá÷íDÝÞÂw;¦Ë…ƒGQ7:O[µÚÒí>ЧWÓÅ- zÙnoÁÓÓ‘CÇ5:Ñ`ZÚypµàÑ´´��6Á#äT”L®™MJ×¢ñÊíáÔû•Qð ö}¶+Ò¨•Eò»£1ì€Çfü—ä84©FîóÞ3ùræ1´âÿîhPçaË”‹ø÷w£1wªw¥|÷ ÷DêÕëf½Ç»­ æýÑ{ÈIW¿ç¶˜9g'5Ð’Ücµd·µ·#¹_’Ç; t˜n‚vÌ©0(2ë÷ÿ8ܦØ@ÛŸKó$ø¾)ÝÖâi!™VÝÖbûÇû°Åš3Èyt?UÓ3óÙ@^í`×áûí1wM96áv;]/“ÇÖŽ-•š¶€ÍòÞ{ïÉÓ§OÍ#\…ïûòöÛo›G�6 Á#äT”Ln™i5¶Ð°•ï´ç2™J|øÞÙ=nȱóÙãFMFcÌÉ'þ±ó8XÂÊvPù?½/^Å<7ì5 ˜–ߘõ(Eƒ"Mi<Ò™½‚÷[¦$¾/øŠø¬]£.LQ ³¾ÃÖ'Úõ+>kY4nÎ ñï}àÌ•2¸ilŸë’ØW»5i;û9lÁ2ûv ¥ÛÑÌuïù´õNð·Î˜ö¥tgýþäÌg:¾Ó‹§“ÓQb]âiÅ“FÃ3‹×ßMgSy¶< ëz}Ú’wƒ¿£AÚÿ<1Ÿ.68™uŒÌ:©Þåž;S`râÇ?qlbçÀ®xŸ|2vl5à˜•¶€M££·ÞzË<¢¾ýöÛðz ÿØLzëFªJ†ÌfY^K÷äi ‚RÒÖSw޳õiË Ú¨•€¥Òà­®F[iË#�›‹ò<ò@ªJ†Ìf tðäVSš¶ëJ)lk½µ6ª×Ë9 X i÷5,†îjÀv <<ꀒ)nfï–6¶ »l­ÀXW®ø’>è4J/ "šYãÂÅ ª=±+#€«úÞ÷¾'Ýn×<¬è®l=—u#Õ%Cf�ØdÚz†ÖGó£»°=(Ï#¤: dÈl��›ì§?ýiØúèåË—æLCw5`»PžGHu@ÉÙ��6ÝÇ,~ø¡y„Iè®lÊóÈ©(2�À¦ÓVGšŸÑúh:º«Û‡ò<ò@ªJ†Ì�° ´å­&£»°(Ï#¤: dÈl��ë ù Ëäe‹~¸ RP2d6�€uXG~óþûï¢KVóÖUuW£U+S[t[9‘RP2d6�€uXG~ÓívÙ×t¶<-o]ew5ÊXµ2¥±E·•óy Õ%Cf�X‡uå7ï½÷ž<}úÔ<ÊG‘òÖUÏ®F9«V¦4¶è¶r"¤: dŠÙè:°°¤-�¶ÇºÎ鯾úJÞzë-ó(Eº~­zv5®ÕXµ2¥±E·•óy Õ%S„̆ iHÀvYç9­Á£<[åúµŽÙÕ¸VcÕÊ”ÆÝVÎCäT”L22<¤!]�Ûeç´Žòœ’¾ׯUwW³¸VcÕÊ”ÆÝVÎCäT”L22<¤!]�ÛeÝç´¶>Zuà$K®_ëšyŽk5V­LilÑmå<DHu@É!³!ÃCÒ°]Ö}N¿|ù2·Y׊pýZWàŒk5V­LilÑmå<DHu@É!³!ÃCÒ°]ÊtN³­Àòp>MÇyˆ<ꀒ)BfC†‡4¤ `»”éœf[srÙ‘Ænúìá²{,þ'Gé¯UkÒjw¥¯ßÓóÅK{ÏξÔZméöæç²›ú¾hÙmtä2|gŠØºÞFç•y!ûýjðZ¸V é¶[R«VÌk{â5|éôÞD/g®·¾ïiw/¢÷É ñ½Ý”÷EËÄõήSY,º­eÚG(RP2EÈlÈð†tl—2ÓlkN.;Ò<:‘³0¸H†þ3iÝ—Nð`Ðmɾ”ôä´éIÅ â Τµ_q)o¤wz_¼JEªÓ0ÈtÙ¹/G­gNÀÉ~ç@úg'rÔœ!c>Õ»Ò¶A þþ´º¯Íãsi×÷à ×I§ü‚®ö©œÔô9ç³aPjW<ÿEôØ 8U¥ufH¯¥Ûº%;»pŸXƒs_ŽêíàSÅÁù4]™öŠƒT”L22<¤!]�Û¥Lç4Ûš“Á¥ûM¼uM,øóå3éiÔ%è1Æ‚.ÉÏ«¾tUÙñ|é½oäÓ iì;=ùòË(È3Qð¹ÃO*;R9ôå|øýýwÄïé¯ä¢]—ÊÎ5©µ¿‹^¶ú§Ò¨VFŸÛŽˆ…ƒßØÙoI7üËà§Æ‚GEÄù4]™öŠƒT”L22<¤!]�Û¥Lç4ÛZiÁ#%ÐÓ9©I5Ö},%øÔy(µêî°åQLZ@jÁ玂ï{Õi¿¿'‡þsprƒGѺìTêÒ¾H†£L@kçVÔJ)#x$ò´k×FïK i ªö8 Œ çÓteÚG(RP2EÈlæ[‡ô»miÕn FјG¦€µD™°,¶I»ŽP‘jýIt‡sÉV¶½3³Mào›uˆß‰] BÀv)Ó9ͶÁ´àÑhŒŸh©È~ëÌi)d6É÷ [î$\)x¤ëø*ÈKo¿aXNð(,¿šÏš ýí̲‹}Ÿm½d'¶oÉyù2èz•Å¢ÛZ¦}„â Õ%S„Ìf®u0cììÌÔYh ½£w!½ö]©^%ÀSл*ÚN-d®6€EAØ.e:§ÙÖ"˜<r=ý®<iè˜GÉ–?îç/¤û¤Þ Šw/3®< è¸LÞžìT›Òé?¥®®<¢åQ¡,º­eÚG(RP2EÈlæ^‡¹[­ƒ`)c˜»¼ûg­£õ!`»”éœf[‹`Žà‘²7§†ùxÚçÍ ÓiA¢evl¢Êá±Ü;˜¥Ûš]'“'g–‘fè¶VPœOÓ•i¡8Hu@É!³™iúgâëŒ"Á{+áÀ’¦`¤ãø ñöLáÇÞ=ôHÛ¯K5xx¯÷õèóž‰eÛÀ—†wÓµ»Ü§ÁãërÐ8‘¦ÞÔ©oÃYVìx¦Éw°D…Í éÚuÐnlµ‡£ét3]ÈYëP*ÃïJh®º½Ãeì÷ë2K N·ß7ÓïÉA°_*fÝ½ŽøÁ:ì ïœ.çèû�l2Ólk,<h&R®^RðHËçþm“OÛ2Àò̵š"xTD‹nk™öŠƒT”L2›éëµÄ‰¯M—°¨`µ€ XaáÇê‚ÇOš§=¹´…%ワö^K?r†Âm"nß;|l?‰~kXÈLÂLáÏLŸ;è=‘º[¸›({ ¡«m¯)|Vn‹¼vvN9ã!CX8½ËìtÁa¡VM8‹ ØË;ú�¶ÇÔs:¬|G×Ùhq‚ç±×Fêh ¼((­KÅkˆo¦1^—‡Ÿ ïwå÷´‡ûœYô³ÚÝà ¬LK”÷Œ¾?›¾w¢BmkÊgu ®á ¿3uì>}o!™`P¥6>í|öTý£iøíçGÁ#g\ð[Y|ÇDߙܙB?wclíøGNº°y¯É[õ×矪_ó{Ëä×ÉàQxèŽ4‡‡ç¯°ilÝÖ2í#©(™"d6S×á¢-µŠmfˆŒ’AÓ,Û^’…¿°P>CðH%߮Ǩ@ﺕXðwwÀŒ½kèlG¦IP_e{“ŸpW6Ƭ»3ÖB|Û“ß³œc@AØ.3Ó¦EZ÷œ°r>¬üùðF¾ÔNN£�ÇpƬ}©·Ï͵×|.6ròëfl‹R¯\Û›�ñ xºÍÛVûYsmÞ$pÇ�JWÈku,�,Ã|/#P.Áþmµ¥«A¡ä燋¶"nI»ë†zÆ¿sz¾ªŸ®£¦ Øà‘²­5€~.8† Ôª9s½uÛ~è´~NŽ—¬AÁs¢ëT‹nk™öŠƒT”L2›ië06¾ÎÄàQ² œl̸%ß›¸›71x¾7Þª'zÿ,¿=Oðh¾íš­›™\‚éõî’Ž¯ÏäàÑrŽ!`»ÌvNgÚÝ9²×Ô0˜¿“ҪĴØp<á5Çm‰‘q<ÿP»$g c×Íý®t›·­äµÙüîØg¸VcÕÊ”ÆÝVÎCäT”L2›iëÝ uš‚oBðÈ´¶q ûcA°L…ýÐU·×6…×»‹{â5ŸNí’0¼ûîÜ'x`^3ŸÓaÐÂé>ÒkW-ÔÉè"]Ÿœà}xÍ™! 2 æØÏ®:x(̶’×f‚G(ˆ2¥±E·•óy Õ%S„Ìfê:˜¦ýј9}Ó|_ƒZ@î&¦Ë”mrè25ˆš`ì½aAÚÊ“wŒ“;à¥éR`º�¤½0nTØ?ï=“/cƒl'gží5ë<¥"0n`Æ)2Á¦KÛAÁ‘øçϲå BÀv™ýœ¶-jœî\zý½a»Ò˜kdV0> ‚8]‡f¨Ìg£ë™ ÜT¥u\Ýì4ê)-…’6o[ícÛ•ÍNÞoA›†ku¶(¸§yeÚ2ã,„û«,ÝÖ2í#©(™"d6Ó×AÇh°3}U¤z|Oj»ÑØ/N‚ÙnMÇZÈ6½cix¶OP˜þ䱃^O-´…­Œœ÷~ÑŽ=>nÔœᯋç]3ëb î±™Ítœ?Ka*;¾ÅxË XAtîí½0ƒdÛçÌâ´™É9îF°ýïÈnµ&'®œ†›è»vmùÂy|•c ïPl_}õ•¼÷Þ{òᇊïûcËÓ§O¥Ûí†Ë<çtd¶ãíhàûŽÜ1l@%#ˆ³´€Šmõc¯YÁâ V<Éæmëèñh{gk:϶‹(S[t[9‘RP2EÈlÈðÖEƒR ©Ç?ÕŠÊÝ Òb+ÅAº�Šï§?ý©|ï{ß Ï×Y–™™‹Q FmÍxäO&w劂1N�e怊mQšÕmmv›·­ð³ó·†™k[”)-º­œ‡È©(™"d6dxk¶¦Ú—šT'Œþ™øõã©3åtlma¤çë¤Å¾gv6¸qK<y(GuÛ-Ö0ãñŒºËZ¶Ø‘~vMÁ£Blk€à ªLilÑmå<DHu@É!³ÉgL:øíÔeʬòáBºí–éþ§¿e§>Ïm_L¢¿  ø^¾|9~Ýp–÷ß?|Ÿþ=4Iou“Ò½wIÓצ¦Ÿ,`V›·­ö³ÓÇ£Kš{[9•)-º­œ‡È©(™"d6dxHCº�6ƒv]ûßùðœM.o½õVøºÒÇóIL:æô:¾4ÂA¬£ß«x ñ;vL¢”1‹¼ß•ßŽÃæ.L ‡Ÿf‰½>_`_?3Ÿ<·uü³Ã1”f ïŸ¨ß•' Ï™¬!£5Tš±ÏÆÅÇ´7:œ1úì`ç™ïMкGi¿|瓦x•ÑÀåÑ÷e d3þÙ˜ä‹& zyܪI5¶®ñ_éÇIßs'å·4pøi†®Z¦%f‘Í–òYWÚ6ÄÆ}t[=ϲ qú¾²Xt[Ë´P¤: dŠÙá! é(6 iw4óè·û·ÃsÖ]ôùo¿ýÖ¼»\ç4Ûj9‚Y‚E1Ó?;À13†A¼Žf u»æÙ@ÙœÁ£Qài–`QÜÔϦpœàeêºF¯Ï<xf %LûìØ6h«½wMÀÈÎÜwCWæu5iâ8Ÿ¦+Ó>Bqꀒ)BfC†‡4¤  ˜´›šÎ®¦ç¨þ«3©)uMŸ³‹Î´æ*Ó9Ͷºtðk ” ¢Ì< ßuÛK>^0x¤-o¢q©æ s®à‘š´® TØ=rà‘Oˑ܆`¿Ÿ4?—á]fPøøú<J³è¶–i¡8Hu@É!³!ÃCÒP,$Ò�‘¶(Ò ‘‘\v:~]>þøcóìH™Îi¶ÕeZ™�vÇòžìÙ íšvÐG¦›SÅ;‘³¾†{Üà‘ÓÉbÆ‚Gcƒ~Ç{r@&<Ò—œßÒ1§ü†x{æ{&nC<x4j‰d‚-ë Å~Ëv…¼iö—í^w Gúo°ŽN·¿Xð(üžè\÷mæ6Xië›Sð¨ÿLZa÷Ï=ñZÏ‚½•d[J¹ÇÐ5íõ«Yt[—º€‘ꀒ)BfC†‡4¤  ´ÑÛo¿Ž_¤ÝÔìFi4¸¤ïMS¦sšmu¹œQ�( 8!¨ˆÜ= ÷Nå¤v <<Šß’V÷uøxøÛû-é†ZNðh� ¿gÚ68Á£óÒ9©‹W |®ò  @Q°mÔ2AÓZh8Ëß0xôô:¥æK»gºN …ߥAªü»­¶Ó?ó‚5Ü/£}3íõ+Zt[—¹€Y‘ꀒ)BfC†‡4¤ ? úì³Ï€‘.É.hY´õQVp©Lç4Ûê2Á•aëŸdÐ Ñ­-ˆ0Á£êxûG£V0†ÐI{¼ªàÑø÷LÚ<ªŠçÝoí{¯kÅÁ#k©•ìš—8ná{+Rõd?Ùâ&s”~ïÙoœÆ·;§à-€å!Õ%S„̆ iHÀúiW4ír¦]Ó´‘ÏhÊtN³­®iÁ£Äë±@„ ]¯Jµ²'‡þóa«#5,ZW·µ±ï™´ 6xtMªÕ]©úr߈‚ôewÛd‚G׫ץ„<¹ þ©4kS‚,9 nÑm-Ó>Bqꀒ)BfC†‡4¤ `}tV4wlw–´e)Ó9Ͷº’œ‚GÞäTgQsÇà Œ’d'O Èô·W<:’G§ŸÈa%Ñâ%3ðRÄàQðÙGŸ‹¸ou“µ Úʧö‘tR[ç<J³è¶–i¡8Hu@É!³!ÃCÒ°z_}õÕplÏ(9ö2•éœf[]&�d»Ž%ÇÒIvù g«˜€ ¯ ž‡A‹jsŒ  §ê×÷¼–^ûîR¦ê~n8ž’NEKv*ui_èºLÚ†QðÈïý$Z?wÚúÌà‘ùeLë!L‹Í”ì¶f¶É7< ÖspîËa°}UÛ-mÂÀQc4.’v÷:ùHÁ£4‹nk™öŠƒT”L2]–´ÀjèFv<#ÛhÒ ØËR¦sšmµLësMßm´å‹Ir<Œ8¾Äßµ–=953žíTëâwÝq’ E¿cÖ%øì_¸kÒ8ÎÚ†]¹åÝÊül8I Å÷›©mdàQø;öû‚ý÷E;öø¸QËܦ[žxYŸÕ}ù:± Ãq…ìg¢e0TÒ,º­eÚG(RP2EÈlÈð†t¬†ÏhÖA°—¥Lç4Ûº©Á£‰my´B©Á£ily´*K߆8ΧéÊ´P¤: dŠÙá! éXe‚=2Ólëz<"x´mÝÖ2í#©(™"d6dxHCº�®j ýÎ}©ÍU¡[2Ólëòh°3«•\²;Yj@Șé½+éàó[ù…³^ÎàÕé’Ý�W<ÒqдkëDK߆8}_Y,º­eÚG(RP2EÈlÈð†t\QÿTÕ½9[¬N™Îi¶õê4h¤Ý+u\.Ø}éXbo¿ýv8ý¦Òà‘vu]w7WçÓteÚG(RP2EÈlÈð†tòH¿û©4¼kRõ¤œÑìMÒõëÑãŠTk¥ãÌ`”úZrÀZ; TŽÊtN³­‹³A£¼Ë ÛñᇚG›K[OéñÈ+ˆÇù4]™öŠƒT”L22<¤!] t†]?œ)°‡Sß §¼ôžH½Z‘Ê¡/çƒI¯Ùï›w’Õ)Ó9ͶÎÏ iKuÌ�¸J4ÒVG›¾–òôØh iÝ8Ÿ¦+Ó>Bqꀒ)BfC†‡4¤ ”ÒE[j'à38“Öþ®ì·ÎDãAÚ:é¢]—ÊÎ-i}™ýZ÷5Á£±­³Û¶ ‘Ò1‚t{¶%pdévi7ÂuoçÓteÚG(RP2EÈlÈð†tRJ|ÂÇ'@¤OéÀ¿Ui|ÑÎ~M¬%x”¶uºm )íÚ•W uÈ£EçÓteÚG(RP2EÈlÈð†tRJ|–G©ÔÚr=cDGâŸ?Ë~MgZ"x”¶5Û¶”hÓÇjšFƒGëˉóiº2í#©(™"d6WZ‡~WÚ­šT‡ƒÁš)`W08l¬R6ƒAï©4퀵fL’¥ ¶ÿIÓÊJÃÕA|ÛÒªÝL´†Xm¥”‚J)ÙmÍŽy´³/õö¹ çҮѤ×Ãóôé}ùLz¶yRNÊtN³­ãtÖ®÷ß+ƒFJ·G»tMÖ~ è¶®s9ΧéÊ´P¤: dŠÙ,¾¯¥Ûº~¾3 Å8ã”\†ƒØ^eºìWÒi§­L læíH¿s_jó®‡iù°³³Þ „"áñe)ä²ta°Ç~¿éz¦=9mzR Ÿ×Õ|éöM$hâkQ0i§âIó´7ìÚ–—äþcaaaa_±è瀫 Õ%S„Ìæjë°º–FW¶p* Ó€OSª™-ž¾“víÚlÛß?•Æ¢A¬º¿PаЉãL¦-´kÓ¶¶4rÙq€ÊF» êµp[ÇwÚ$äIÈ©(™"d6ó¯Ã…týºTƒÏíTnŠw°7 ž zñžì5:rv·úTÞuñZ,~m?ø-û éu}©Uµ5Í^ðÚ33%öƒžtü†x{ éh Çv;hÈ#s׿âÈY`º·9w‘vígÎÌ:èóûR;9Ò$Xÿ³ñ*ö»Ò‚7Nð¬ç‹¾/ ZÖãHüî—Ò²]èt™)Ø4ZßÊ'î4o¤×ñƒýzÓÇ‚ãñ¤¬ç¡´ÚŸ˜ýz#xí¹sœ‚×Îì¨,³Ñßû¡¨–y\t€]`[Ø ‘ž#üñVT^3EžSøc„²ò@ªJ¦™Í|ë`Zâ˜`Ä ìV1ÁQ7®]  »[i`羜öúf|=ñšO¥7Ðî`7FÁ †˜ð½Nw1»Ý–ìï\“Zû»èa Çívò\üÃkR­? ~÷ôÚw¥¬Ç¡ÿ|jW’Éc-Å[^Eëa×NÛ½Èà¹Ñ¾‰b¯ÍúšÏ»ÖD¿ý¦>6ûõR·uoÔU&lñT‰Ž‰ùöY!mû¡˜–q\´Ò¥•N]€Mçô_}¼íœD4H¸îØGYy Õ%S„Ìf¾uÐnZש©“ÝÖ^ˆï펉ÁgãÁ•KéùG3Æß›è.– Ì$‚GÑïÞ’V÷uøxøùý–t§Dæ %7öÙy‚Gá~sÖwâö%‚Tv,ªá¾J“QаŠiÑ㢕+í£NqjÛgeÂö+cÐHÙ™Õh9Ñc¯×4䃲ò@ªJ¦™Í\ë0�™<šô¸Jð(ñ»S‚GQÇ ™ÏÏðÛyÆ~s¦í³ïOî+‚GWÁ~(¦y‹[ÁÖ§t¬`“•5h¤4¬£2̬6+Ý'ëžÂ#”RP2EÈlæZÓm8õ†ƺµ­w¶<‚GcëKð(7ì‡bšõ¸hÈNO^¶ 6¶S™ƒFŠ I6‚jù¡¬€<ꀒ)Bf3ß:˜qŠÌx:Ñ4øÑ¸Fa�%\ »_U†ÝÜâÝÖL÷ªJ]ÚÓFJ¾7Ñm-õwœàK8æÑžìTïJ»÷ÆŒÕtÝ &efÎ_È—_&§ÛŽ3Ãîoîz¸tk çµ �}#½/ŸM¬ÛŒSdÇŠŠÆ<Òq¢�R|ûl·5Û²*Ñmm,à7 BöC1M;.ÚM»phEjÛgšB9h¶].ËÕm§{V6ºó僲ò@ªJ¦™ÍÜëàEªuiÔªR­=”NïeÔ GŸ–Ýㆇ;› GãX¢ÙÈt9’OücΊ6¥õQÀ±ï­Iã8ûwny·FïÕŘ½§ÒÎx¶/5ÿL¢v;“ÙAÁ£@Îó¬2­ŽÌïD-{.ä¬uhf»/Oý»²ç5Äïôd08—v=Øov kó-ét¦:;#]EªÇ÷¤¶kfˆ{£A(»}U9nÔœíõ¤ÑðÌßÁâµÄ[ÇÙèûÁ~(ª´ã¢•k;ó’.Œg„m@ÐhD÷CO§#M/ÌÀ¶>”RP2EÈlÈð†ta?“{\´2í‚Íwl‚Fq̬6 ¤ëþ"ж”RP2EÈlÈð†ta?“­Lk¥ZÿÖ©Tb›Ø`(ƒ»ÅGYy Õ%S„̦ëë–6¶Œ†^ºp ê´ßŒ–y™žUnÛ;]̸¦¤£Ýcñ?9J­Z“V»kºPš1´ÆÞW‘j­%í®µjêïMèûì ­½2/ÂØíkn:¼n»eºQêk{â5|éØnœ±Ï¹‹¾ï“Ñzgn_´Ìz¾ieZ߯•ë?þ¸ô-2°›Có$`ÝHu@É!³!ÃCÒEd¦ýpÙ‘æÑ‰œõu$«ÄìvýgÒ:ºsâÆ=9mzR‰qž†ãuU›ÒÑߘñ÷&²3ˆüP8Àú|]›±ºª59ѱ»ô©Þ©œè¸gîgà”;› pªJëÌÆ·O Î}9ªOÔ]»­ØñŒô¸Ð�P”™RP2EÈlÈð†t™i? ~,Ýoâ­kF­hÞŒf× 6‰–ecA—ËàmGcÁ•ᬽàÉYo’`]<9¨ìHåЗóáûõûÞ‰~g8“Ÿ3s¡eg´ŸÛŽˆ…ƒßÎH˜±}Yì¸/0Òrí Ø¤O�@Q'!¤: dŠÙá! é"2ÿ~HsÉàÑ '“šTc-ƃ+£–>¦åQ̄ߛ$X—£Æ©¼ê4ƒßß“Cÿ¹™Ð Eß½S©Kû"ù»v¶Á[Q+¥Œà‘ÈwÒ®]½/-x¤¨ÚãpVDËŽg”5î é�PäIÈ©(™"d6dxHCºˆÌ¿¦âãüèxFû­3¸Q&¸2ö>|IºJðH?óJ:Á÷Û�–< BÁo{~,°±ëi‚a™Á#û>Ûz)cûÌohÈ;k<#}¸²Ôs21¦2˜àòp¿%ZUN4~÷Six×S®‘XkKíû¤)^Å>véwµ¥U»™ù]Û'¹ïí²/µ“Óé-OÙÿK§ûX7RP2EÈlÈð†t™?L 9¬~Wž4tÌ#·åO²eŽ-äïÉNå¶øçÉ íUƒG'i8¦ÒóñàѰ˙ëŠÁ£DË£ÿóoµä¯¿÷^ØÒH»©Mψô‰¥ Çùª˜sèôÚw¥¤¯xwÎU ÎñÎ}©mdÅÛŒa–Ú:q{mÙI»fŒM2‘¼0ÇoÖïÚ‰ñã†cè¹ùIöÿÒ‘'!¤: dŠÙá! é"2ÿ~˜#x¤lÁ{LI ®¢Á¶Óf$[Bð(`Ç&ª˽ƒYº­™Š‹­Ldfè¶ÐG:žÑ¬ƒ`“>±<ÉsȦٴV+޶·¡ïôóy&m©Uf 8Øñ×2ŽIæõg›¥ì{Ó’n¦ü€ý¿TäIÈ©(™"d6dxHCºˆÌ¿  4“ƒG•ZrF²åt ísÿvP9pï./oÀìQ+Ž+T6¤O,ϤàÑéwýhÖÀðÜØ—zû<83l‹ÀkRõ–Ja×Ëaë}ïžx­gÒ¾÷º4N¢™ík¶Õ_ø~óá:lŠÎçáØnfŸ4ŸFݪì5£õØì»¿Ìgü†x{£ïw£ ôÏÄ×±à‚ï­„ƒÿ—<xd÷GlvË�û-t?�ëFªJ¦™ Ò."sï ò/eNÕ_‘jã4*´Ošª?6°¶1á÷&Ñu¹1ö;þ‘SA°SõW<iž.:U¿ÛÝ.}ªþ¨ ßi&·/éË*Þ‰œõ/ƒ:ñ‰xã@Rx~ ž‹œ‡úüMïZwÏ]=nJµþ$¨œkW4ŒþšÔ>ý¡yoPÉã'ñ®^ÝjcZðÈ¥Ã.±Á¾ ÷‰ÛÕ5}Ÿ »I9ß^Dת賯MWÃ’t?…Ë^ÊX]ìÿu!OBHu@É!³!ÃCÒEd®ý`º ègÂeXðNòÝe_j­¶tÃYÔ¢Jlêûª5iµ»¦’jdþÞ$‰uI~&lQt{<Rö.´V¨ÃÏ%*)Éõ.ºm?t*3¶O—Ô±•ÒéûåO—ワÆ*á*(Ivû1•q÷{t [4%Þ«ˆosð( n׋´mKlw<81þ½±×ÃýéL"°ÑûpQ£}tú<ÙÂÓ`ÿ¯žëÀº‘ꀒ)BfãrYXÜ‹Šã‚åIv[KÒngŸ‹ß2]l…:Yaƒ¨èIõ®xO MÚ¶IûdJð"þÞðÅ Þ‡‹r÷‘ívœhÊþ_ò$äT”L22<¤!]DØÅÄqÁòL ]ÈYëP*aË¿¯¥ëV¨“æðñNzÒIõ®xg´ÛÞi<ù‡ÒÚß•ýÖYØå5fÒ>™¼ˆº�;c±mô>\TbÙn•a5³·Ã–Gìÿu OBHu@É!³!ÃCÒEd#÷CXoIf—¹×. Ý`)&žK•¨òmÇÿ²ê±Ùªì˜avPíÀÅçÒ< >{¯ˆÞtûV¼¿‘Þ—Ï¢ÁŒ7FÚTýÚRK×î¯}óº3ˆóÅŸJëq°&퓱ï5Á ûº°?ì^Ø7cîèõ­LŒñ}?œ `ØíÒ¾‡ý¿jäIÈ©(™"d6dxHCºˆ°Š‰ã‚¥˜:n˜iy¼Vñ>O[ïï‰÷Ñ}© ´Î øÎ Tá`Úµ‡ÒyñÔ æVå¸Q“p0âp9ÿüùØ ô›aÆ1̆Dχƒ,¿:ÍÞ'Á1øâ må’ý¸siT: ^°ŸïÇc_j'§|[TrßÛCæFû-tß�ëFªJ¦™ Ò."ì‡bâ¸��Š‚< y Õ%S„̆ iHöC1q\��EAž„<ꀒ)BfC†‡4¤‹û¡˜8.�€¢ OBHu@É!³!ÃÛlŸ}ö™|õÕWæÑò."ì‡bâ¸��Š‚< y Õ%S„̆ o³iðè­·Þ’ï}ï{òá‡.-Dºˆ°Љã�( ò$äT”L2›u¯ÃeÇ™µ#eÙm|!/Â)aS^¯Ö¤ÕîJ8¯Mr–œá²/µV[ºýhÊé¿7yÚòéŸÿD>IqÆyÄNs›|YÂÙKfyO¸J©¾ýö[ùøãc¤n·k^Ÿþ&ØEÅq�yò@ªJ¦™Íº×á²s_ŽZÏœ�æx ý³9jFÁœA·%ûîÈÃéfoϽ2ÏIk¿â€ÞHïô¾x•ŠT§áoÌú{Yfûüké¶n<ÃuÝ“Cÿùpêå±mRƒçâKû"z×,ï™Æ $é¢ësó  a?Ç‹xùòeX×�»ïûòÓŸþÔ¼‚UÐýûöÛo‡û›‹c8yò@ªJ¦™Íº×aÐûF¾1­‚âÁ˜À '_~Ù‹‚-É×ÔeG»»âù/Ì/Ä÷v­‡úÒiTeÇó¥<šù÷2ÌöyÓjÈm¾7Ѳ)m›’fyÏ $QаЉã‚y4ʇîs <`³Ù  ž;HGž„<ꀒ)Bf“ë:L ”¤j:'5©º-Æ‚Go¤×y(µêî°åQÌU3™ŸOúgâ×öe§r(­³‹è-jìó¯¤Ó8¿7 }ÍôžÍH¢ a?dz°A#M/ú¯>Æzh A궃–4øúôéSó \äIÈ©(™"d6¹®Ã¤`NøZr쟊ì·Îœ–BQð(þž`ÙoI7­9ѤߛEæç“ãí‰×ð¥Ó{c^7R·é(%x4å=K ã!Ù;ñi$ý]°ŠŠã‚IåK š·ÌÒÊ›C§žS×qäIÈ©(™"d6¹®Ã¤`Nòµ~Wž4’ã%[]H÷IS¼ÊŽT}9O&ýÞ,2??jytúܗÙ½-²è mÉ@¡ˆî–b.@A£üÙ*W™°ÅE`0yò@ªJ¦™M®ë0)˜“öš {4¶PÚ˜Gfðê´ïô{³Èü¼Ûmíœû·ã{[³üþU×ñŠl IÓ…v9øì³ÏJ]£@XL¸ƒvQÓÀ]›¶›Þ`¢Kbyò@ªJ¦™M®ë0)P’öš Uêfæ±IÁ£kRkgž3®˜Éü|bÌ#ípOvªMéØÁ¶Õ,¿Õu\Mn‹¤²’(ÇJ+¯¶¥$A£|ÙA•õ8`ûéq~ï½÷Ì#'!¤: dŠÙä¹Ñ´ô)Až@öTý£iø³§êßÜ&ýÞ,²?oVàVðÞsÓ}Í»/§fì£ÔiøÃ®vH­mÓ,ïY‡dºøê«ÿ‡ü'wþºüÏþ'Qþ¿ö›¥ $Q ,&ŽK¹i BdÖÀ6A£õÒkZ‹“÷ߟ`B‰L êùX¶ÖgäIÈ©(™"d6ù¬Cr€iwJûñ×F˾ÔZméjP(l¡“öžŠTk-iwYÎ&þÞ,&}>9h·ÜÚv_}&{¹%­nÂvë¢ïyþâ:èoÆ\v¤±«ë±+ÿöûÿeXQÐ÷d¶HêŸJ£öXzæáØã 1¶P—r"h”?½æ'Ǽ¡S9éñÖ´ e�ËŽy¥é¡LÈ“RP2EÈlÈð&5]\´¥VÙÏ>Ô‚£Þ]L’~úÓI§qCv<ß‹tÐo÷ñæàü(&ŽËöÐkÈ´ ƒ4Òë A£|èqÐsO@b�år³Á"M:HºþmÓH™'!¤: dŠÙá!Mjº[ÙàÑ@ú]_jÕJøÞ_“ÿýÿ•¿ÿ‡ÿGásÑóï¾wà´À:¿ûu4s^õ@¼ðóÚZë'£.‡Áû*Þ‰œ™n‡ƒÞSiz{Ñç+‡Ò:s[•­–þ&Їã²´â©ÇRCiÜ ‘v‰b¯|é8xáuØ,¿ò+¿þKà¨Ü4]üÒ/ýR,mèR¦óU·X7RP2EÈlÊžá]v²k :ãKþWçE·L,xô´kפRkË… |¿%ÝVø¾“¿÷×Uv~õ üž÷ßÿ¿Dþ@zÒ—N£íßá¸TéwšR­Þ•¶Ž¥]ܪ•è»Ã¿oH½}¼Ë´`rÆ–ZµÔý€Üq\6Ÿ†´µ¢K ¹­“œ<¹”m|Äi‹ã´t‘ÞFº½Àº‘ꀒ)BfC†‡4©é"<r%f›³"Ï—? *OŸþßå¯ÿÛÿóð;ÿæûïÿXþëwÕ鯿”Ü%ø¾/¾H î­/¨§¿‡âá¸l>³È=¯µ¢IШØl°/mÑÀÊ'y»K™P×íÖT”L22<¤IMcÁ#íºö¹ø­šTƒ÷§bÁ¡ƒ??øì³ ò—Ãï×–Iÿ·p¼“ :>6&’¨ÜB¾~œÅÄqÙlÉîOºüâ/þ¢\»v QAi`/yÌ’KÚÌ[ØNš&ŽìReÚV©(™"d6dxH“š.bÁ£ 9kJ¥Z“Vûkéf´<Ц=NéŽu+¼&µöwæ™õâü(&ŽËæÒÁ®ÝAuÝ…àCq¥üÜ孷ފͺ…í¦Á#=ÞzÜÓÒƒ]ÊÖmÖT”L22<¤IM=_¼Šì·Îd’Ì߃si×÷SƒGç½gòeïeâqðþÚ5'xdÆ< ¾»Z"½0~ô´›ŸH÷"ÿhÇŽ‡¼÷¢ý@Nº¯õM+WîóCË}©uSÌ×­Í5©ëSrì#GÖxG:û-ÅÊM‹vÖÕäR–qt[u#Õ%S„̆ iÆÒE,²Bsè<jy<®xȧ­w‚¿÷Äk=“¾¼‘^û®Tõqó©ôîã?ÿ^Õ|ÏŽì6:uH»®_º¿éR­ÉI§'ƒ°kœ;«Û¾ÔNNM€iõô7K+¬<8f°$Z‘ŒÎãì¥LƒìníNh‘ùô8i+2ÀÒô AF·eaYÆ=ÒmÖT”L22<¤!]DеÞH¯ópH«x÷å4l蟉_ÛŸØ^DcIÏ…Aºa�pÔõ°û¤)^å@ôßàµÊ¡´Î.‚ï{&-oÏ|_° [‰ƒ®6‹¶N¦§ ­ŠI¶cf5L£ç¯¦Ûʰ ʲ(RP2EÈlÈð†t)Ò~œûrX¹!Î+Ó*¨…ÏÅ?¼fºüZyúÏe08“Ö¾yŸ~ÉE[j•(x'¥vÓb̼·RkË…¾wl€ôâ }n­Ljk•Y–o¿ýÖ| E -J8&Xc«CªJ¦™® KÚ² ´•‚²»hÅfZ·‹âì‡×ÒmÝJm4è¶dç–´†ã@})µß’®i}4 ÅB:~T]*ÃÙì™<�`*ò$äT”L22<¤Ù”t¡A#cAg|ÑEÿž'¤Á§IÝ0г’3ÔD-ˆÜà‘yo8€ù¤à‘ý,Á#��Ež„<ꀒ)BfC†‡4›˜.æ $¹SOgгLË£°5‘yʈZ]“Zû;óŒ"x�À*‘'!¤: dŠÙá!ͦ§‹YIúœn§]ÒHEÚQÈÎh§¾“vëSé…cíÉNõ®´{odÐ{"õêuLr»°¹3ÚéŒy‰nkî{ƒ‡ÃàÑ7ÒûòÙÚf¸›Å¦§O�Àö OBHu@É!³!ÃCšmJÚÂHÇEÒ.jn IÿÖí´‹¾ž 0k?¼‘ÞéýhV4]g;3Z`Ð{*ÍáìhûRóÏL€i ý³3“š'ͧ¾ÜÛó¤áwäÅ©0;XvkÒ8®šÏ‹¶>œK»¾}î´|Sqè:�PäIÈ©(™"d6dxH³­éÂ’~åW~%ÜÆä’ és(Ž � (È“RP2EÈlÈðfÛÓ…N®Û˜¶¸$}Œâá¸��Š‚< y Õ%S„̆ i¶=]¼ýöÛá6f-6€¤£x8.�€¢ OBHu@É!³!ÃCšmN/_¾ ·oÚbÇDBñp\��EAž„<ꀒ)BfC†‡4Ûœ.>ûì³pû좭ŒÞ{ï½p,$íΦ³®u»]ùéOÊùQP�@Q'!¤: dŠÙá!Í6§ éÀÙ š†ó£˜8.ëЗNÃÎÀW‘jãÔÌà§^ˆïíš×R­o–÷í6¤s¾Ñ¸”ž{Ïn£<‹¹]v¤±k÷ã it^™=_<gÇ—]ñü3¼/åØ$ß?v|± .;ÎLœÕ¦túv®Íñó3¾‰ßÓ>í}Õ =Ž®&ÛpÞë:ëFªJ¦™MÙ2¼¨Pd 83ôä´éI%,ÐìK½}~Å)ËM…lX¹š.6 {õ®´{oÌ+«CA(Â~(&ŽË:Ù�Pòú÷Zº­ÙoEÏ]´¥V©Œ%Þ78“Ö~E*µ¶\„¯t[²¿sMjíïÌ3X˜ è$óŽð8H«ûZ‡¯äs·ÌcGì}3›Ž/6 èT¤Z"=ç¤ÓÀ~KºásßI»vMv†GâïÓëÀ-Ù©Ô¥}‘x£±Éç=yò@ªJ¦™ Þ$¦°£…ŸËsi×÷ç ú,EXß +^—½'R¯îî ¯é"²±ûáç¯åÕzÒëË^É럛ç·és^ˆx ÞÁ^Pñ»-þ¹ @håòÑõ(léâ´ZJ¼Ï£&¶,ÉÖ XH°/<9¨ìHåЗóa½]Ã;Ã)Ù7Vâï›~lf8¾Ø�zÞ¾+ÞM©ììÉ¡ÿ|Ö40, M¸!{Ÿ FMj¶Áç=yò@ªJ¦™ Þ$ѵ\ ÁáÝüõ¦H‘Ýn—•-ì:Bú\§â} W§Ò¨Vœ�Á£ìˣƩ¼ê4¥ <Â$zÞÞ Žó é4nÄDZ Á#Ež„<ꀒ)Bf³ŠuôN夶U\+ž4O{¦°z!]¿`µR[‘jí¡tÂfôéw?•†w]¼Ö‹~VÇØøBz]_jA…e'(ôz­gA1åô:~ðÞRkµ¯M1èIÇoˆ·g /Áú<iŠW9Æ#ýW×÷PZg¦"d*ßáb 4ý3³~úܾÔNNc͹‡ô·Njf[ƒõk> ß7èuÄox²¬GÛ}Ð81]ÓFÛw@—°Ð¥Ÿ±û$x®Z““ŽÝ¿Ë£ß Þ°4&x¤×ž0�aÇ?"x´‚}yîëWQ`8þÁ#LbƒGZî‰ÇÃñbA!‚GŠ< y Õ%S„Ìféë0x.þá5S¹0…Õ°°ðFÎýÛR1ã. Â.Xæ.öe4F‚®KÅ»/§½~ôÞaÐÅùž—ÚG+Ŷþ…œµƒ÷&M1 ƘÂË(8c6cc5$ ÁvÛÂß}#½öÝÄ\Ën«´.M…K D?Š YÁo†ßéTð+Þ‰œõ2>&@¢058÷å°bƘ®t±®$ËQ„´Y»~öµ<ü¾܃åûå럙ç·és‚ë`<Ò¿ÝëíwÁå‰àQáû2 úϤ¥7)¼)ÈÏ!“<Ò]g'âULàXÓ�Á£ò$äT”L2›e¯C4àaJÔ»' ‹$è »g*Ñ÷ØBD¢Ð‘,`˜ ÌôÂj²ðb×Á®o²/Gëä(š1Pd¸­{)•(•(X'¶{¬�ÛVg &û{™ƒÔ^ ¡û¡˜8.ë\³†Á£@D×ñ¥qïpt#xTLÁ¾Ñ ÿèXî<B7x¤ÌM1½aÖ¸+bÈ“RP2EÈl–½™аbrDï5…dÅ#Vˆ˜<š¹°:^x‰¯ïäàQô^7xdÞŸ, eV¢Tb]ïÛ±m5¿çÂÏ/Z[ BöC1q\Ö)¸f¹Á£€ @Ħu7-7ǯEd¿5Ãõú•tš÷£V—Y•Èþ©4Ÿ3‹×<‚}éFA�=~£¼&~ÃÆ¡7(†]½SÍ Ç < ØÀ±¦a9ÉÜÔ E7ç¢.ú*+x¤ÝaHCgXÛàóž< y Õ%S„ÌfÙë0Þ:Çë–”\%x4Öª)ËÕ‚GѶ¹ÓÈfÜq›¸>W ¥Lu;1Pµ8 BöC1q\ÖH¯g7î$*ývü#÷Úc¯OÎ8wvì7;VJøÜx^ ÝáÂñð̵tüZÇ›»¹ôkݶÓ}yclÚ|;þ‘“רãvºAGãÞ0ÝÐ#SÍ Ç›@Ïç£ñióíøGαŒÒÄhlG Pö:¥V½”]ìp)彎„c8ÞÓá&Ÿ÷äIÈ©(™"d6K_‡aTÇðÑ‚Þ}ú<îýÄÜíŒ×3,`&º_E…ˆŒ IP±c™±‡f÷'YxIv[KtCK‚í]·Ø¸M×Ç WÃß1ƒo«‹?•Ö㔂u¬ÛZ¢+Ÿ>“(LEwü“ÛîÆ–ƒ‚P„ýPL—5 ¯µÑ¸lÃI†4�q+^©‹M Kp­NŒˆ}_rÑëÿ³ Ÿ8JyÍ.)7&ÁÜ,±û.Ùâ# D•v+6ÙE¸¸“B$¾ol ŽÍŸ<œr|—Û½«Ýä²Ç.ÞŠÌŽc@,2yè›Ì#þ}cËþGò'¸Ùç½®'°n¤: dŠÙ¬b½§fæ0ÍôG³‡iÅâ´é™æòZ©ð¥«&Óõ*zÿ®xc§�z$ŸøÇ2œuL À/´²'ÞÍè»b3ºe‹ZõŒ¾ç‹/ÜÇ5iWÍoË-O¼á:é˜âÛ¬ý³á٘ضÚ±/¢–Jæ¹Ýㆣ*ÇÚh}’Û­KXX i§÷£™áô¹j]üîèþî²èwƒýPT�@Q'!¤: dŠÙld†—춆¥£ ÙØýðó×òêG=éõ‚åG¯äõÏÍó[‚ô �( ò$äT”L2›MÌðRûÅc©(E6v?¸­ù’ÝU¶�é�PäIÈ©(™"d6—áMƒ#Öým|ŸýYtaƒ÷Á#��Ö‚< y Õ%S„̆ iH‘Ý?ûZ~ßÏ –ï?”¯fžß¤O�@Q'!¤: dŠÙá! é"Â~(&Ž � (È“RP2EÈlÈð†ta?Ç�PäIÈ©(™"d6dxHCºˆ°Љã�( ò$äT”L22<¤!]DØÅÄq�yò@ªJ¦™ Ò."ì‡bâ¸��Š‚< y Õ%S„̆ iH‘Ý?-¯~Ô“^/X~ôJ^ÿÜ<¿%HŸ�€¢ OBHu@É!³!ÃCÒEdc÷ÃeG»;áúïì6¤sižß¤O�@Q'!¤: dŠÙ„•K–”\ $x�ÀZ'!¤: dŠÙ„•K–”\ üÙ×òðûžx^°|ÿ¡|ý3óü– }�Š‚< y Õ%S„̆ iHöC1q\��EAž„<ꀒ)BfC†‡4¤‹û¡˜8.�€¢ OBHu@É!³!ÃCÒE„ýPL�@Q'!¤: dŠÙá! é"Â~(&Ž � (È“RP2EÈlÈð†ta?Ç�PäIÈ©(™"d6dxHCºˆè~`)æ�@'!¤: dŠÙá?-¯~Ô“^/X~ôJ^ÿÜ<_R¤ ��€é(3!¤: dÈeG»¦UÃnC:—æù’"]���LG™ y Õ%Cð¨@Å.���¦£Ì„<ꀒ!xT ?ûZ~ßÏ –ï?”¯fž/)Ò��Àt”™RP2PT¤ ��€é(3!¤: d¡¨H���ÓQfBHu@É<BQ‘.���¦£Ì„<ꀒ!x„¢"]���LG™ y Õ%CðEEº���˜Ž2ò@ªJ†à‘ÈË—/Í_9ûùkyõ£žôzÁò£Wòúçæù’¢ ��0e&äT”LƒGß~û­|öÙgòþûïË[o½%ßûÞ÷䫯¾2¯æè²#Ýpìì6¤siž/) B���ÓQfBHu@É”!xÔívÅ÷}yï½÷ÂßҀч~4Tb(��LG™ y Õ%S„Ìf™ëðÓŸþ4lEôñÇËÛo¿~·þ«Ÿ>}Zœ.ji~öµ<ü¾'ž,ß(_ÿÌ<_R„���¦£Ì„<ꀒÙôà‘ƒ4(¤-‰´E‘~—¶0Ò–FDÒ`6!��€é(3!¤: d61x¤ÝÐÜ–E:v‘vAÓç±=(��LG™ y Õ%³ Á#ÛºHƒD:¸µ¶0ÒàQ!¹ÆÊP��˜Ž2ò@ªJ¦¨Á#ÈZ»ž%[zÌ",!��€é(3!¤: dŠ<Ò±‰ìØE´.‚¢ ��0e&äT”Lž™¶"ÒÖDººè@×…›>~þZ^ý¨'½^°ü蕼þ¹y¾¤(��LG™ y Õ%³îÌF[i€ÈvGÓ–Fú/³¢.;ÒØi;» é\šçKŠ‚��Àt”™RP2ëÈll—4·HOÿÕÇ6`D†g<Š!]���LG™ y Õ%³ÊÌÆ i—47`ä"Ã3~öµ<ü¾'ž,ß(_ÿÌ<_R¤ ��€é(3!¤: d–Ùè�×vÐkíš6Ë idxHCº���˜Ž2ò@ªJf™M·ÛÍ’6ï”údxHCº���˜Ž2ò@ªJfÑÌFƒC¾ï‡Á";­þ¢³¤‘á! é��`:ÊLÈ©(™y3w#mm¤­Ž®Š iH���ÓQfBHu@ÉÌ’Ùh+#mYäŽc´Ì©õÉð†t��0e&äT”LVfc§××YÒ4h¤­Œí–6 Ò.���¦£Ì„<ꀒIf6 rgKËš^™Èð†t��0e&äT”Œf6¶•‘‹4h¤]Ôæ™-íªtXXÒ���LF™ y Õ%¢"[I×îi@BþôxhOg³[u«/���l6‚GÈ©( i×48Zg+#L§<{l"��`‚GÈ©Øb:­¾�[¶åŠÅ ìÙ… ���ÒPžGHuÀJÜ�™Mñè1rGîB ���.-#ëFª¶ˆŽaôÖ[o…KÖ¬id6Å£Á>7`”¶è æ���€– u#Õ[ 4š„̦xÜÌ“‹¶<b`s���XZFÖTl(mU¤Ý™4¸ ]Ô¾úê+óÊdd6ÅäŒìòk¿ökòí·ßšw����”ç‘R°a’A#íò42›brg\Ó¥V«…ÿ<��€‹ò<ò@ª6D2h´hPÁ P°°°°°°°°°°°lÞ¬©Ø�Ÿ}öÙÂ-°40¨cV%ƒ‚o¿ývø����ä…àP`v l‚FÛO[–¥ÍާÁ$ Ò} ���@^äΞ6ë@ØØ^ÚòLÓBZp ����VàP ںȘž.m}öñÇ›G����°>€Р‘!ËË—/Ãîkt_���°n€Ù ‘ÓÐ} ���@9ÐV$ï¿ÿþ0hD0�³¢û���€u#x¬‘‰4X´³³�a^t_��c.;ÒØÝÏaž˜`ž÷†ÞHïô¾x•  [‘jý‰ôæ%Ä…tÛ-©Uo‹ß»4ÏÓe§!»;G¹¯ç Û’ý[Òê¾6ÏLÁyCðX5M»i˦]ÇUØÙø>�€UU²/¤×¾+Õ«Tüû§Ò¨=–žyx5éwîKmæÊüöŠŽ‘)V”ÙÂ}ÝóÅÛ©J£Ó7O,×RÏ›‚ x¬˜¶±ã16–E»=~øá‡æ��À* ä¢]—ÊnC:W®÷¾’Nã†ìxþr‚GˆªîÍÑd»­´EÏ6îë°%Ñê‚mË;oŠƒà°"n5Æ5²izÒ€¤¶h��e1~÷SixפêHU[›x?ÚñƒçnÎЊâôbïµßw]'Òôö‚²ëžx­gÒþë4ªaYÖ.»Ž\j)¿ý¶vÇ©=”NïMôõ™.ä¬u(•áwÍSiý^Åkʃ;¤óê™´Âu5ߤt[|©U+ÑsÕšœtôÙ@¿+OžTªâ…¯ëïÿÄéV¤ß}"g}}wÊï­jÆ{=9m¿£¿?ÜJ÷ûÃáºU¼ûrj÷YÿLüÚ~´Î;ûR;95Ý›‚ßxÒ Öï@ôßàõÊ¡´Î.ÂEÇÎnïžÇ´’¶_Ó¶½ûÌùM·KÕ¬ûÚí’åì»Ôýì¬O°:~C¼=T±ï÷HÛ¦©j3HO_×ot\Ç7ØWõöyt|ë3\&­«¼ÿè³öÇì£ûrçMç®äy3éØ,ó¼)‚GÀ ØnEÚâH[« # ˜� $ÂÖ¦òÙ8Ãçfè‚“|ïð±­TÿDº­[AE¸.í ­`_JÏ?’a Š7rîß–Jõ®´ƒŠï ÷DêAe¾rèËyT‹ŸÀTªçmytÑ–Ú®YŸþ3iÝÖ%\÷Ñ4ƒs_+& 08—v}?ØŽÛ⟿Uæ50a¦TÍvD-k‚í¨µå"ë÷\©ïÑ–U7M Æ|ÿÎ5©µ¿3ëv#Øç¯†¿ÏÅ?¼f>óÆtoÚ“Cÿ¹¼ [é±1A¨Á™´öÍ:ê:„ßsͼf¶w,xä2œm[Å„Çøut<íØ?3íë¬}÷_Ê“±ßŠ‹ZG¯‡ééu”ÖôqÅ“æiO.Ãý¤iQƒk¯Í>´éú;i×®EÛî·=ÙÙoIWF×»í·®·»Â×&çpT´?vÃç‚÷ŸÈQ3<Jœ7ÃíÈ:6K=oŠƒà°D:–‘Œ4pD‹¬ƒv_Ó��”DXQN Ü;Ïø-É÷&¾/Þý)Q +É»²ß: ªÙÊ"fxø Á£ŠÛ"Lj4L ÂTø¹ŠY×(ð0úíñÖ!á¢Ûù2ã÷\iëäâÜe·ñ§òµ®[ÊvÚlÖÓ>¢}k…»ÿÌkÎöfw[Kn{‚›fÚ×öÝå”ß ª$Þo‚0QK@fºN|Oì}îk“Ö5ü¢€Ù—nKµ4±ß˜tlÔ2Ï›â x,¶üÐÙÓôbD5¬Ý×��(™XEÞȬd§H¾7ñ}ƒGá{m@&½–ßNV°gåv÷Ù—š|S - áÂ×m—¡äo¿ßÛÍX—Œß‹IyO¸_Ç%”½ÝѾsæ½fÇ…û=ãß™<Êøý~WÚþÓ Ì¿Yöõ¤}—½­‘dð(ùþ軳ƒGƒ`µ?¿U‹Öqœ1-¸ÂÖxÑØZQ+ Iëêp»VëâwGí’†ë’}lÂW—xÞÁ#àŠ´‹šVÞ领¼Ð} �€‰Uäuƺç$ß?É´ÀÂ:^Ή ̺ÇÖÛ´<v· Ä^Oþ¶yì¾?)ù{iÜ÷|Ñ~o'Ñ%J¥´Š2¢–GQ×¶H|=³ãÛ›}’ÛuÍò´…Q«-Ýî£ñ´3q_OÚwÉßJºJðÈŒ›U­I«ýµtcßcº§…A/ÛíMÇš´®ã½S9Ñ Òð{W ]é¼)‚GÀ‚ì,jÚE­Ûíšg|Ð} �€’Ht3SãAˆlcï}_²;M2HaÆn±ƒ›±vÆ&iFìóÞ3ù2¬ÜÏ ¨´dÖ1k®Gë> h|#½/ŸÉù /ÇþlÆ®w²;• 6¸ƒEïi~"]w'í÷\©ëô/‚í»¶Øä|ñ¹4OÎä2Üçî�ÚÁoµ> ~׌Ý Çþ^²k”ÙÓ¥-Zÿà;›O¥wiÇ<ÒàI2 ‘ÜvsÂï±ã,™ ÈLûúŸI÷4cß ’¿•”LOî6ÝÖbi5\ÓzÇŽñdƒ3aN ÄL8ÎáßJ=ïšccÞŸlŠŸ7“޾{™çMq<ðÙgŸ…-=´«­=Pšk �€-V £Öiƒ^O4;ù^ÓZÆ>>nÔ$X—_Ï *ÄÃÇ&À4pg *å5_º)ƒ# <Þ˜uÉ\y¨÷C¹çΧŸÕ·ÅŽ[è÷»3n »™`‰ÙŽa«– Ú>ꢥï7cÞdýž+ë=±™ÓtߨµëæÌš6è=5ߣ¯ºŠE-SÌûwkÒ8mCœq×ÿFpìޑݱq{Ò¶}`ZÏé¾û´%TŸÈY÷ñŒû:mßuå4u?LÞ¦cih³ðqÖ>ù$‘®Ï‡3öU¼äÓÖ;ÁßÁ:jÐÇ’m¿+\l/ã8›u ÖJz~Ó™5Ín£#qÞÄΓ±íh‰ï쇫Ÿ7ÅAð˜­Pdš&5¨I÷I��°^K÷äÁX+`ÚbëNýq|æ2mt˜Õ ‹ ẍÖFØš>5À ��Ph:`s«)MÛÅ Xˆ¶®ÚO´äÑÖFÇRשûÍ3¸:‚GÀ´6Â&±Ý×4Ø ��Ê&ÞMilIxIb]’Æ–)Ý逅 ¤ßmKkØ]0XÂAµ»a÷?,Á#`ZaÑ} ���À2<RÐÚ›Žîk����–…à@k#lº¯���X‚G€Ak#lº¯���X‚G@€ÖFØV¾ïÓ} ���À•<B©i èý÷ß§µ¶ÚÛo¿‘����`PZ,Ò ‘hm„möí·ß†Ó–ê¿����0/‚G(%m…¡ÝÔLe¡i^[ ���À¼¡Tì ØZ‰¦ʆîk��l&mAœ¶¸¯¹O{Í]Ü×Ü¿“ˬ¯¹'—Y_sÿN.³¾æþ\f}Íý;¹Ìúšûwr™õ5÷ïä2ëkîßÉeÖ×Ü¿'-“Þç¾æþ=í5wq_sÿžö𻏝¹O{Í]f}Íý;¹Ìúšû·}¼nùü*ƒ¯¾úŠA±Qjt_�`óäUQ�W"l= iÀHG@ÊŒîk��l‚G�¬<¯\‰°Õ´……V”µ«švY@÷5�X 9kJ%(ÜW¼9ëÌóÖU_G<`<V@ÃÖÖFT’8 ¤ê¹A÷5�X²ËŽ4ví˜Uitúæ㪯£”›f íc9òŸ-Á#`‰´›šN¿¯Óðëtü�ÆipUÏÆÿ€e¢å–à° Ò?;ïFKº§Ò8<‘n쮯?”Ú'Òèµþ'¸¼Öù@¼Æ©Œn¼’Nãit^™Ç‚GÀ’h°H+Ä<¢R L¦Ý9u<0��P\€ Ð?•FuWö[ÿL^ø÷¤™ú zOäNí¡œõ_˹[*û­apiôš6½‘^»!µÖ3'˜!x,ÁÓ§OÓI[T�˜Îv_£…��›G˽,Å]P&¯¤Óz ­Æmi´ŸH³þXÎÝVGƒçâ×?’NÿRú¦TwnŒZékG5ñÏßDƒs_ŽŽüøwy¦-R5¶Â‡~È.Àè¾�@±eUÇžïw¥ÝTXŸ´®7›äBºí?•<*M÷IÝ?•'µwåA«™hu¤ãÝŸÓ ÐaeG*‡60”66ÒwÒ®×cÁ¤¢ Uc£i…WgŽÒ…Ê/°º¯�P\³ÒÇGy-ÝÖ‘ÔÚߙNjt[r£Ö– ó8UÿTš±®7óx#ç~]ê)ë9Óo_Yvàk‘ß'xT"ÚrèΤ{y&­U©z‰±ŽÁóGÁs:Ò¾'µwF磞3±VJ6•=Ðvži‹T¥­Œ´µ‘¶:°8º¯@ñè5Y[‡rmF·vs©¯:À2É+é4ï-ÞZâ¢-µÝÛùµ¶»Kûb‘À×8‚Ge¡-‡îÈÖ™ ÂÙ2+²¯›WÕ {"G‡òÀ»%õ'ŸÊƒwL:Ó€ibl¤a÷¶ìtH𘓎o¤•]Æ7–CÏ)º¯@>ô†˜^‡õ†˜¶¦ÖÊ]¾úê+ó.”UVe1|¾ÿLZÞ^ð÷-iu_›W,[9ýqðï]i¶Ÿ„úVçìV68,õæäÏ ÎÿX>xlZK˜uÚmtä2|uŠ°Ò½/µ÷ÄÛkHÇùýí‹s_n7?•/7d§ÚÌ®\zrÚô¤²s$~o–_·3ŽWúÕÜ¿od3l§‹™¦ã½ñ�¨¶\Ûß Ò·&}}Ï‘/½ð•â{»aZÙÙÙÏ!ÒóÅ ë2k^R56Žv¯¡•°|:K!-ù�`õ´Å§–g´ÛpTIÈ^êCÓA}¾ÛzWêH-mpÝ‹¶Ôõù?ÿ\îí_—Ц©J}ÎÖ5NåXg“Ú¿%žÜWçÁ{öMšÝ•jõß“ÃÚ¡x)Á˜Tºžõ'rþÍ7Ò‹}Àþvðý÷nIµ¢ßmB< –Õä°ÞÚ;ïHãqPY7¯dÑV!‡õiÕÒÆ˜™÷÷G²Ž¶—^«×Q?Í3m‘ª±1ô„ÔB–Þ‘ÓB€åÒsL³Üå€ÕÓ`}TÙÎ^´ÜhZH£Ï·ŽîIëÞÍ”V3ÚæžÔÛ?þmH­v$7jïÊᬭ¬0°£Ýátì$OªÕ}9LŽÇrñ¹4 ¹§­“ôýµûò 1{T6]Ï»rØúDZ­N<Øc;ø÷N­&ïÜxGj‡ÄZ&ŽÿðPjïÞëû599›Ö‰O·©.Ö]©:Ó¦Íýû#YÇ ÛIËÎëjÜgÚ"Uc#hsn iËîÀ«c3?Î3�X½i¤?øƒ?0ïÆiiíïJÕóRzÖV3÷¤}ñãàß»ÒzpOZ§?4 YÙ�ÔwQ—œ› iÝ»“èJ£˜;ÒúúO£î8m©UöƒÏœ'‚YYô7êR©$»û¸Á¯àßÖý`ù\ž„Û”ýÍa¡j]üî,[©ë~Kvªây$º¢-öû–l?-/kýÔ^³ 9³•Yß÷Í3�VI3A]��«§å[ñH[´õ‘Žñ¨7ÒPNšÒd=¿:éw¿NÏí²¦3Iµ¤súÎÚMm%ÞHïôÔöo\yf¹eXÿ±ÁºÙ:ª½Vë²íêªQhZ ¢ °^t_€õÒÁ²Ý ˆ.¶¨H[ëÄú·^Ÿi!ZšÒd=¿¸¾tÕX:Œ– ÷ö|9º÷ùdÖnjáàØÉïÏ"¼˜p`ëú±ÔÆZ9VôÛiô{±’­Ü…–G@ô¤Ô‘’¸Ó¬Ÿ½›Bå�Ö#@Jkªe"½±fgd£UR¹åY‰ »©íƒ´f—†ìî܆;íyŽ ql°ti­Üe×bý¼ªQ8ZYÕB‘.T\üÐ} �€üeUó¬Db2ŽÍöÉjmä.ÛŽTBÑh­´Õ€|iðV[ÿÑ} �€üdUJ“W–b-Ø.ZOÕÖžiÇÚ.ë°®ßICªFaè ©Í�?þøcó €¼ißm=/_¾|iž��ë”UY̳‰l—í¦7Uõæªçä²ëú4¤l‚í?ªýý‹tõN ��X¿¬Êbž•Hdã¸l?mÿ‹¿ø‹òË¿üËáñ¶Ë:䙾HÙÈŒÅe»¯é ¬��`½²*‹©Ï÷»Ònw¥o®ß@úÄkœ.}½'R¯^¿úTü+ÞGyVî±:qÞXÕ2²·¢Ç\ë³ë@ð¥¥-ôDc– Øè¾�›)š…jÂTëIƒžœ6=©”}©·Ï—8‹Ö¥ôü£•L¾Íf½’NãñÇgÒºqGÚW;’ƒnKnÔÚra§êŸJ³öPβ¦ËŸèœûõ Í¥‡ÏÅ?:’Ú½‡SñOølLÆ>’×ÒmßÕÀT€àV‰àJI£´:86#��€"Ð ô-ÙÙoI÷ò\Úõý+z´’~l‚V¹h×¥R9”rÔx(¼=©L D¬”¶¹/5ÿ…y¼y’•ÈÁ¹/Gõ<÷ipÌ›÷Ä?cÏI§ýß½òy Õäð^CšŸ§33?·Ž}Dð«Dð¥¢Íû´™Sñ��ÉwÒ®]“ÝFGfl§”A3M©&[<õ|ñ‚ŠÏÎήxymú§Ò¨îå¿3Ȫ,Ÿï?“–·<¾%­îëè9K[ìÔ?’Nÿµœûw¥Ù~l÷®TçìV68,õæäÏ ÎÿX>°Á³N3§¥ËŽ4v÷¥öàžx{ é¸Òcµ¿/^£-½´ÈѤÏZ“öQœº'Íί´,‚GØV¤l¬•‹4hôþûï8��H1è=•fXÑ ĺ£˜î×ò¤áI¥z ^µ=7©;Ú '¿1ªP÷»ÑçòÈtM«x'Q£°îþ^U êÜ?¿¶ož *è'§éø¡Að‘ñ*ö{4Pô/goyë6ÿŽ~÷SixפêHUŸŸÔ*j¸íïJë“zôþà÷[gÁ/ æû½?”î<ß½fºŽi¢çµµØ»Rô@jG¾œÇ޶ø:–#ÿ¹ .>—{û×£ýZ©ÏÙ…í;i×ë⟿ƒ‚ûžxÉߘ–júýÁñªVÿ=9¬Š×:Ko)”tÑ–zý‰œóM"}i`ç¶ìz-ù'íå]ï–ì'ƒ:™Ÿµ&í£€~^Ÿÿó«ì£‘¬ã,Cžé‹” ���FÔú§r¨•Ü 9k•Ym-ñtÕ¨r^mfŒûw¼WƒGýÑçMEǰÙß¹æŒóòB|owÔZD[­^“jP1ï ÞH¯}Wª;{r¨ÁˆðýÙÒÇZš6æ‘íÞ¦Ý^› TEö5�1 nUfhb¾G·ÕŽÛdFvß…ßgZ@ÍõÝë—UY Ÿ×ñŒŽîIëÞÍh?™×"ô¹'í‹Ë`4¤V;’µwåpÞ–eap¦-áØIU©Vßïvñ¹4 ¹§­“ôýµûòà¨6µYD×]9l}"­V'¾ÿõ7ß‘š÷oË»ï&ÒÔ„ÏZ÷‘~þ^F~|µ}äȳrb[F·É<Ó)���(ŒD�'ìêeZ™ÀÒì­bL°& éãÄçÝ�J(þÛQpÉíæc>¯c"M‰Í=Pw(¹¾‰}qÑ–ZeÖ.oÉï²ëdöerÛçúîõš<Úß•ªçÏpfƒ>aé®´Ü“ÖéÍs³²Á•ï‚]Ö”›={GÉô§-{îHëë?•†¾îËy[7Á¾0h˜ J™ïjÝ“ß Žçí'@>kMÚGÃ�Û¯°â!^?÷g ¾OBð�P éwÛÒªÝ,d!�¶[ÔM§¶¹ŒÆv¡1­‡%>?%x[Üà‘ù¼ɲXð(ÈÎ}9¬Üˆfà Ç%r¦f[ßIƃGÁ£@\ò»æúîõš<Z» é~þe¼{Xز§%ÓäpÖnj[ŒàÑ– [`ebïFp}ø—¦E¤ è»LKÑÔë£^;÷¥Zû@ÞÍ”ÏÎŽà� 8Â;t:–Æ,…èÍŸ­� ' šèuX»˜yÒ<í™ ùzƒGãÝÚfÿýEƒGÑ,m7¢mßÙ¯ùt¨¸bð(Ö’ŠàQsŒÃýï.ŽeÏ—£{?Of즥ä÷/o߯úû§Ñßö°ƒÿi¨z,þãÿT¼ß<’šw;1ðº¾ïñßÏ;Ii™iZ¸ÿ™t{³tåÌ–gú"e�ÆÍZˆÞ Ùj�`3h׆jÆuU_›§Ûš™zØr)ñù°KSH››ìÃ;î:NÐ]ižAï‰ÔÝ–@ ƒGç/äË/mðkÓ)kûæêZf‚GvÌ#3 s4–”¾ló¹o¤÷å3éýyq»­e)L"<.³…UÛ<Š‚påXFôšéI£óRúÝ?‘Ví7åÝÈÑØÀëº#¼ PožÒsäð#ñ[?˜i¼ºIâë·^JgÞ;Vo¤wzß̘Q1&š—–Bïp]£â 3£NåÀ“ƒa!Z»±ùR³wÁ“ƒšŒ6¼®ÄfåYÅ5�¶$Û\[‡×ÓGâßµŽ4A¬ÆnMÇÎçr<œ]-¸Þò‰Äg[‹ZšÄg~Û—š”&§‹M©x÷åtæ;íA~›©Í,¼zñÔY¿´.#I&xT¹)ÞA´þ±u±³ƒiË®§¾Ü›ë»×K×+M´¾,E\¶Ñ¶nWRl;5È|ÓŽñf‚Û&˜§A¦ëÙåÞ- °<ÂD£æ½f†EšÚB¡öØ­¢;_š‰?j…™G r›EçA›I/¾}ÀF‹º DS6¿6ç» ™óUïDÛ»Ðv°ÔX %;h¥Þá~Ù+˜ßÂ]_ú]i·jRùf PÔ¸”GbÝô:\+AEgtkH=VÁÒ¼ånPéš÷FcʘG*«Ò^–Êü¦!x´*z-8NoÙ³DE?~y®WL`*‚KÉtMÿõX!Þ6'Öý‚RKaû³æ½@NÂ;"N '³ÛZ¢0>©{[l† `LWÍ_aÄÓj]ü®ë)jýY¯?Nt“ØBaž’hݤ-ZëÉ`Ú,’]ö¶O¬æãñÖ/ñÅ B®4¸þ¨1êYÎ@fÊýiŸÕ¢Jcï‰-n M¿ŸJcØzÍv“¼î“¦ÓÊl{n6éö¼ýöÛòñÇËÓ§OååË—æ•ͦÛ5¬†Ç,c û×£¯ÇþsyÔðÌûmÌNCã-*MkÄ-é^œJãÐO(ž¶¢ És=žÎfy.EN‹º~y!x´ =9mÚ“Î.ZYû—愹&Uï ÈkJ!yÐ눜À{á‰iO¸ërÐ81M’÷Äk= 2ñÁò¢“98¹üzô[šÙÔJgjSädók Ðühæ–GñæÒîw¼4'ºNÛ©ëšQ5†Û^{ ŸØ®9áä2ÑDZ¿ç¿Ÿë»M7Öºc,(�|mÉ¡çɤà‘Jý¦›Á#äeÞnÚ@AØVsÃ2ϾÔZm馌“ë–6¶¬ðú^ûÓ~3ZféR—.(g¶[N7i-k¶¤= ¤¹²vNY6¼õ‘nCšÔçû§Ò´Æ°µp5 ä¼é|$w†åìhF¿]ÿéMGšwÜiéƒü>xo¼õWšWÒiÞõ´‡÷A4д‡i@o ßLL¯ÇL<ØÊÖÉz\ºÝ®ø¾/ï½÷^øø­·Þ’?ü0 &}ûí·æ›%žÞâé$œ%q÷v^é¢9 Øf¦A•HCiÂt²¤Ÿ&/ü{Ò´P#ì»$­³o‚ºå­”kž™½2l1¯åwÆß“H‹ºÛð[6‚G…g¢»=_› ‡‰Ø3n{Ç`šQ&fêNÆQ~’¸C“lîk§ŽuM¬Œœ(«?mÌ#Ó]&ü „ŠîLŒ LΔLN„;\ÿѾ´ûέ<Ï÷ÝÀæ›Q'2ç^µ&­ö×ÒÍly$ÂóÊTtºhy„«ô¤ã7ÄÛ3é-¨T?Ñ;˜ ydnªÄï":78ì8'6߉݈17Jbààúÿâ ó˜t  8ô•füy ÔyuX Örû;²_ÿDÚON¤ÑlÇb +úûwÄoÿ±´ÅÇoÑŠt¬uG ¸ÓòëoiÅþÇÒëøÁçß *óŽÒ÷5¥Z¹.Õë'¨õH¨T«r} ¯·iÇKFŸ}ö™¼ÿþûò½ï}/\ôo}nS‚I±írÓI º%uÿ‰<i5¥©ãb†oÊNƒãi(MNZ‚4z[í'£ ¨¥ëàGéWû¿qg¼•aÒ©ñm‹§£DÀr<-êvê±Ñ–cE”u=X‡ü~3JpâS¨FMTçi3ùóñÖ‰ßgàÐȯ=Ém³ÅYš™.z8±¾±n0ö÷Ö%¾Ë®“Ù¾ø¶ÏûÝÀ† 3W;°iߌy¤•èàú¢j‚Öv€Ñ±à‘ÎVóßDƒ¹†wwtÜ ý*áXÜ0¦7§•Aå0¬˜Äƒž¶’b^378¢|G ‡7Í@–æ}ösfà÷è&…¾ïv4 |´ �»¬Êbüù¨2îÙÊn7¶a7"åvJÞ$Õk ¶Ì˜rã4¬´›VFÑM×DK1 *ÔïÊI'>ÛÞàü±Ôë³ô^ØLYÇË¥#m…¤­‘´U’~F[)ik%mµTD£írÓ‰Û-Ñ !3 ihœ¦gmÙt*OjïÊ J%Ójó® R¦•¦LðÊtËÔ¼ßÎ$i¤¥E]_ îýô§?5ÏË,ékUòûeÌ,¼;P1÷°‚çL‘»ë?‹D�%ñù‰Á£ð½Ît®áSúþY*‡‹lk'½à\šŠÁ¨ïz|}§IâÛ—ü®ù¾ØtA¦:œQ-ÈüïIMÇ89 *Û£®§• £ÿ´õNð·i¹áÎVsz.¶ ¨>þ´%ï§÷/f‘¼b*=6/‰åaúÚu'ròð}¦�ë,6?ˆòÙ M×j3tÕ�€õʪ,ÆŸ®õºé¤•û3îÛUÇT M¯ Àß–‹Ae¿>6y’ œA‹5@ttCªA^o­”xß»žÛ)ëxM¢Ý¤4˜¤­]t¼¤¿õ·þ–üóþÏåßü›cÞ‘¿áv¹éDë¦ûïDÇSÜ êla‚ÊJƒ*+m84]Ýùt/µEQu,} º'rhƒBAÙó0-Ý:­‘ÂJ¶•ÒPzZÔíüꫯ̣âY$}-K~¿Œ9èÉw#L(aSûæÓQ“¿u–G•hÆ¥ðÝÉ÷O²hð(`ZD„ÛVPGw/®<2)šY£@Ñ$ƒG‰¼ÄÍÃÆòCç½a«ÕIy¥Éèª l<mÑ¡pmÍ¡­´eG‘+‚³Èª,ºÏk è†-£+÷æÆÐ¾íÎãT–u òÚ3Þ¨^œÇ݃¢ß}"/’Á€Äû¬Øzn©µTî~.?¼ýŠÿÿþÌÓü\.{ÿµüÍ¿!ÿí«Ÿ™çæm—›NÜ PÔm|ز'3 2ÒÆˆ~﹡7ƒÂ¼=Þx!*Ô‚uø&£v?ѪÉÐ�ÓQë 9Ó÷ìF­’]Yiq-ÇoC±g OOžºT²‚.asÀ9‚GÉ�Pìóæ·†ÝÐLazØÒÇ´ÚÙšô›n0)Û¨Þ{&_ÎÜLUï$W3¶Ï®ï|Á£hÌ#;fÓµálÃ`Ñù ùòËsùsº­@ÎæÝàpÞ¾o'#¿Ò»–¥vçâß»äy:Æà¬y€"Û–@ÒôàQ²Bo»iëߦ<±ÝÈÂr¿i}Yñ¤ñ¤\)©úH¼Â­¿{'ª7èçnH´¯Þ–š™ô&ºy«×ôÛR}÷ݨ•ò–vmÏ:^“ýÒë|>¡+ߥüø‡uù­ Þrùó ù³?ùOäÖÿøß’ÃOþŸA ÍøY°‡ÿÍ ùôo~_ŽÿÛÿyÒxó•|ð¿¼&Õßú/ä‡§ßŒŽ»ã믿ž8þR¸]±t¢õ4ÛrO¼Æ§f`ÿ i00=€è95ÿÞKæËöûµ›¤Ÿ:™À°ü¾'­‹dvZ\ìø­OžëWì=ƒ@ÔÏ:0\4�òâiXŽž›£ë˜ùŽÝã†;Ÿ?nÔd4cǯ‹ç¹S(Ú¹;àè¤6ÉŽ’h95Ur¦6ó»õ'òâTƒ=æ¹aÅb’(xT9ðä ÜŸñu�îÝ—§þÝ9¿�°|É›¦ jƒGaEÈÞ‘4­tM ÕK;æ‘^ǽÄ[ðš›ág?—æÉYô>;îB8èç]--´Ý-’‚úÂ7ßÌQ¾Ns!ßt]'é?—îÌ7Ëit\fõsyóÏþö„ÁÃ&ý?{"[{ríð¤ûò¿—–÷ïïµá—-_ÿý¿-¿ûýŽüöÿñ×äWª¿-÷‡ÿ8^GÓ`Þÿê·ä?ÿÛÿ±üŸ|“zœí`ÞY¤h»fL'“< ÍüÖ+Ïõ+öžA m�0¶Þ•ÃY[m2mÝtç8mÖÊCmAÉnk�€"‹Z„Ú@~MÇY7@Ì Ž°Æ~ô\µ.ZutÇÑ}ÍÞ‰Þ„‰>ÿ=n�ÛjÓIzMJ“õürÄo:ZåO3÷qÑ.hÿ'O¼ï7äóÞÿW^ÿÜ<?¤7Óß–ï5þ©„Ô´õÏ¿ßö÷ÏÂ�ÑàÿõPnþÅàØüŪü;ÿÛÿüÕÿü?“;ÿÁÊŸ¹žþ'çoÈût&ý±ï—pph{Œ³Hso׌byïp±=cÖoUÛ¹ Ø3E6µß—šœèæ©°�\OT¶Sx1 *�þ°©cÔo¶žœªqc]���Pf›HÊªÌÆ+Û,EZæñóÞ%¿uãß‘¿ÚøOåè½/¿óé¿2¯XÚ ÷w¤ÑîHGëDZ?üßý ©ý=ùúgÿF^|ò×äæÃÔ’þµüó‡uù­÷ÿHºýѸF:èö?þÇÿX¾ÿýqkz×4îÎ&¦ƒu»ëŸ@r_ßö¥Èò\?‚G…w!ÝvËÌ€¤‰Yï–:S`ÆdÝ!0Ë ï¢¦GŒír…þÌý®´[53e¸.ûRkµÓ»Ê™1-Æ|¡õ���\E $iÙ5MÖóÈ×|ÇEÇÞùkR¹ùŸÉß{ç?”ƽßvº£YZÇ»-ïÕÞ“¿ûõOžÿèþß–¿ÿõ¿Ž^ûà}ùá ­Á4XÔívÅ÷}yï½÷ÂõÔ´®éü¯þÕ¿>v—d�IŸ+ƒ¢ogžëÇ�°RZðÖˆ{‡ �€"+R )«²¸=•y³N§r_ãl—:›³ïnÉæ;.ÿJ>ýß—Æ“Çrü›oËÑõÿƒ<ü3¸ÈõFzÿèïIãï?õDY &ýÁüA¸Îi‹@ÒÇePôíÌsýÊ‘��¹ÒAu�`ÓäHʪ,¾2?Ó néw>’ZkI‘™~ó•tšwǦn_–¹Ž‹öœøwå¯ÝþPþ¯Í¿+ô'ä¿øôÏd±Éô£iY×9k±$ý» оy®_9R�� WÚêH Ehþ�À¢ò$eU·¢2ß?•æ"c™., VÅ'#Z®¹ŽËϾÿ?z_üîÿÏ<±~š†u'-šÖõß"œûrT_ݶEÙÎ,y®ß\q°*ÚVU£« €eе>¸¦��¶AZ I»­‹[‰ôžH½º—>CUÿ™´¼½Ô1?µ"~»ù©|Ѹ!;Õfv7®Ásñ÷dg¿%ÝY¢.úþúGSº…½‘óÇ-yN4þÙ‰x•ic¥êLÔw¥š6ëÛ,¿¼çñl‚U:‹Ù¡T–<.lуI60”¶h}P[Žë8Iú8:ëö¾%ø—ƒ<×o³R6ÖF3?G�–îk�€mä’tÑ¿õ¹eȪ,Žž*Ôõ#y÷Ýw¤96nŽ't$‡µCñZg‰ wð¹{·¤ZÑ@Á5©µ¿3Ï'½‘sÿXî<z µ™Z| ä¢},Ga_ÿ@<Ï<‰^fR Ê¿%Õß<’šw[ZÝä˜?Ž‹¶Ô½wäÝÃû‰ ‘ó›:žÑþ-ñ¼ZbvjxŠ#•ê¾üæá;ÁûNf ˆÍ(ÏÊý¼4j€Hë~ Ò}YЬíZ4p9?8|_ªµ¤áÝ\|B¦)6éø­{cX½®h¡Z§„�`i…\ËÓÚ¢Có<­”¿|ùÒ¼:¿¬Ê¬}~ÐmÉÍ rþ¦×‘Çín|ì ¶Ôî˃£d %¼v§V“wn¼#µÃ²[ßhײ{-yT?˜`ri0ë^8î®ÛjUª‡~¢kš{>’Fãž4;/ƒ¿ïIíÁrt”|ŸK§¬×µ_J¯óiböiû›? ÞãIµšÖ:%xO³!{¤Óÿqðþ;òàÁ»cA­«ÚÖàCúv-¸Œº¾ëÝ’ýÆi<ÍfÿÌ1>ÿ3éöiY^ˆïíš UÖß³)úñËsý¶3ecaŽ�¬šÞÑÒõU Ò��lmÉaIZÆþì³Ï––ÿ¹Á£ýàïŠw_N“•ê‹¶Ô*ûRoŸUÞ5`SoÝ–Ïå‰ öŒÓVG·¥²³'Þ¬ƒZkÀ*l¡¤-EÞ‘ZÚ"(Ñ*E¶>:‘¯O?^û—ÁGêR©Þ•öXPÀ¥Á£[ÁvëÒ|*=wuíoê�Ô7Òºwg¬[Û {"G­S9mèk?’víºTëOâß³e -¸ ŽÿÉÑ;òîÁ»‰ã¤Ç8#ø§iùð#ñ[?˜ÒòjeÛΔ…hƦwGX5mίͤ�( mu«]·µò§ÿêãYÊÝY•ŵT"µ’çŠZ÷»òy§ Dœ§rÚ¨MAð“_H'ˆÒ Äiu>—Æár»©%=ø°¨´íZ,pèùâíTÅóöeßm•4!ø}ßÞJÇ;RÛzü–=ƒf^zGdY}³`Û}MïÀ�P&𦒲dUfW_É5­“¦tU»ì4d7X]ŸÑ²›>NèRzþ¹÷¨5¥›Ú2½ÿèž<ú¤¶ônjI«?.ùXßv¥ÿÖ§èÇ/ÏõÛΔ¹8º¯aÙ4Mé¢ùÚUÇ€uÐë”ÞHÑ.mš'jO€äÔÿY•ÅÕW"Gc-—¥êR©Üïδ2Á¶Ô®Ielì¥å+zðaQÛº]IEßÎ<ׯ)�™4`¤ À€<Ð} óÒÀM7ºheKó±ä¢1�Ø$6¤-sm iR]¯u(žm=.eIoEßÎ<×+N‰i“Y͘&5“€U¢ûæ¥wäµà4mÉšj�6ìÔÿzMK›ú?yÝc)βҶs[¤cÏ””VØô®¬ÞÑ�€<Ñ} óÒGi…=»h% �¶…^×ìŒmö†‹æ™ú<Їã‚UÊ3}‘²KJ3 šô( Ÿ†kfe+Mi‹V®ô �l#wê½æ¡x8.X¥<Ó)»„l_j ×�ŠDƒGD¦Ñà‘íÊ‘\èŠ `Ûèµ-IËñiÏ#l+RvÉØî!  hôº¤.®O˜DŒšN~ÿ÷_~ý×=üÛ. ¾`éõ-MÖó›âç¯_É¿zõZ~no‹M?.(¶<Ó)»D´B¦#îÊ(*º¯!‹ÞüÐÖF ²ÆäàÙŒ›`eUó¬D^Ý¥ôü#Ùñ|é™g¶Åf]žé‹”]v€lº„�(:®Upiþõþûï‡7?Òf峃g“f�l«í ‰üüÕŸÉWöŠ–GÀaå´à­ �Ý×`i°HƒF:8lÖ8}vü#�ØV“‚G›Û£€–GÀ"a¥tÊb½“Ï�Ù�6Ý×ÊM»¨éñ×Eÿ€2K«,Ún»ZÎßTŒyÌàVFïF0@6€MD÷µòÑ›ZÒ|‹c�é´\ÿË¿üËa%r“o´<æGð+¡‹À¹k `iw$®aå¢Ç[»X3ð5,=ÿuÑVPœeÑgösv6™[Y´å{}Î.›‰nkÀ¦!eo)½{«c@¤ . �›B¯az-£Ûm9h€�å ç´u4У êàçv�t»h« û|2H”µ¸ß¥‹~‡ý>­tÛçõ}ö3šöh¥¢Ò´«lùÞ¦g»lj€”–GÀüòL_¤ì-¥…"`�6^Ï6yL ÌÒD¶ÂkCúšŠm+¡U¶<Óï¶¿c×K][)w×˶bò¤éRGn Ô]¸Y\,zL€UÉ3}‘²·v4sáN=€m@÷µ¢¹î“¦x•#ñ{—æ9 :W5Øb'êÐnZ€¨èÝÝÀ’TÒ5�¦ÛA+%¬“=—ôß´EÓ%ŠC °*y¦/Rö–Ñf×ZÉ¢P`›Ð}­8.; Ù +,ÊNƒ,`ÑŠ«–=l—0}N_Û¶óÕ•´e·^t{ &aÜ@QÚ¢éÅ¡ÇX•<Ó){‹Ø»óZ°€m£•Rº¯ä”àQéh9C%z.jáU[Bh EËe žØ–Vn0ÉÏ&aY4Ù�‘þ˲ °*y¦/RöÑB+�ÛÊÈõî?òZ"íŠç¿Aï©4½½¨�]9”ÖÙ…óž` gÖéK§Qu£¨4¢Á-cØ–60¡à¸d0I-—H²hûÿàÈ/üÂ/„çcx 5 �å ç{^m -¨hÁ�¶™޵BFÅ5ONðèü…tNêâÕŸHo¼Ô?•Fõ†ÔÛç2WÒiÜJ]Ú—Ò?;o÷vð™7á· Î}9:òå\?‡BÑ`‡=lk-cP1ŸîGÝwºu_jN+ÿÀ¼ÜÊ¢(íGšÆ´5 í> �«Dðh h&¢ $�Ê@ ɶàŒ<ØàQU<ï¦x­gÒ·¯¸-Œ†KU}ÇwÒ®]—ýÖ™ äµt[GRk}¹Ó2„Œl Cÿ¦•ßòhðÍ’ôfŸVô)·aVnðˆ@Pnîõ`Ým8½ã  x�ÊB[éu–y±Á£kR­îJåжš>Ò Û’}m‰ôêkiݸ#í šåMo@é8=zNipƒ.V«§×. �h@÷½`Vz®xÊ‹à¢(½{¥Í  L´ò¥hº¯åa$ztú‰Vö†­¢–Gײ[ ΤµM¼ÚmÙ¯µåÂ<õr[i9BƒœKë§û\÷½¶ô&‰ZqŽ/îkîßÉeÖ×Ü¿“ˬ¯¹'—Y_sÿN.³¾æþ\Ü×Ü¿§½æ.îkîßÓ^s÷5÷ïi¯¹‹ûšû÷´×ÜeÒkî2é}îkîßÉÅ}Íý{Úkîâ¾æþ=í5wq_sÿN.³¾æþ=í5wq_sÿžåµ<ä÷˸2½C¨w¬� Œè¾–·…ÑOäÜ¿-•Òè¼2cUd§zWÚ=Ûh írÒ}}4|\½kå¶xÑ2­–Í¢7ŒõÜ€<<ÚPÚ×™Ac”™^ÿè¾¶~±qvòţǻSyÕõ¥¦¤ð¹}©œFƒi[m©ÝhI—kk¡ç‰V8µÌ ‹–(;�›‰nŽ�òDðhéxZ(g\�eG÷µÍ3èžÈQ8h6VÉôüÐ '­Œ€Í§åò;�y!x´a4ðw�Q^º¯mˆÁsñ¥5ìÆ†e#hl'½Y¢c”@^m-Ò×�FlP¦ü«så;ÝÚU­²#;Oš§=Z­€;6ãmªâ{»¦Ë§.Uitt(úY ¤ßýTÞuñü湸¨Ë© ñBºOšâUÒfGÔïjK«v3ó»°~z~ë�y!x´Aç�ÒiEY+ÍL_¼|š÷è¾E1iš×`‘ô_ÎM÷Zº­[²S©KûbŽ0ëeG»pÚ)à3»,%xΊ¨ã–Íö]XmuÄ�òDðhChaP ïÜI€tzG–(—Gó­¬èBÞSL6°GÐh›˜Ù wÒI6š&lá7kÀÇÎ|˜Öò(£�Fm­ÑT�²1&Ürè~´ÝŸtì½m6CðhГÎIMªaË¡=ñšO£ mÀ§õXZÞ^ôZ뙄ßô3~C¼½Ñ÷Æ»±úgâ×öƒÏíHåÀ“ƒ™Q�€2 x´è®�³ÑŠ4Ý×§ãFéþÓÈهţå�me¤Çˆ é¶š<z#çþm©T›Òé_J¿Ó”ªÉt]«x'rÖÿI¬ûÛ°›šó½ñàÑ+é4n˜Ï¾–^ûnð½��# Žîj�0º¯ÍOóÝgz£‚15ЉÀ^YL …ãí¥u]ÍâÁ¡ñï½vy»5š ‘nk�€‚GGw5�˜Ý×f§ûJ»¦i7ý—®Åóí·ß{ÜH*ƒ)Á£IA+âï _$x�ˆ!xT`z÷—îj�0?­pÓ}m2›Çh`‚ýTLn`e‘<H¿ó@Oþ¡´öwe¿u<“p…àÑ Û’ýkRkg_$x´ý®´[5©z¾ôÌS�PT JFtW€Åi…[FœŠ´ë“æ1Ú Å£ÁO; 6½²I›ª ý®/µêmñ{}óú¡´Î.¢—/þTZ_$f[³³©Ù®hÉï5Á$ûzÿTÕŠT¼ûrüF4æÑìSÿcæ˜è~ž%x¤Ç¨ö˜ €Ü<*(-ØÓ] �®F+ß´ÚÑ}¡A#Í_hÕZLÚÝ’ÖFeõB|o7 &¤-û-éjÜgГӦ'ó|8Èõ«SÑÁ²£÷Vå¸Q“p€l]vòÅÚÊ(ûqçÒ¨*Ás©ß“Úî¾ÔNN£™Ü°"}é4ª3¢Íg 2ÀŠ<* íJ …{ ö�p5Ú‚C+Gúo™i+VÛ’…­Å¤-Œ´ ¡£²§W`»]HׯG-»*7Å;Ø…úgâ×ö£ žñêO¤7¸³Öá0X¸v5|9ú]ªw¥Ý{~;�¬ Á£‚±ÝÕ˜í�–£ÌÝ×4Oaj÷â³3©Ñ" Øv:vUSª¦Ûá ÷DêÚÚ+ ™®†a×Â×rîßvº&Z(…]£1ªç¾V*éã`À<*í®¦ �`yÊØ}MƒEÐ<…€D1éq±ãOÑ" (ƒï¤]»îz&t[ëùâíT¥Ñé&uo‹º;î6:c�–ŒàQÐ] @YDMïYXXXXtAIŒÍb—ÒØüfü©IÁ£ é¶}i™nn�¬¹UAhÀHGtWPeª,å±­yÝ„ ŒU"}aã Τµ_‘J­-Ñ\ynPh ý³ñ*ûRkµ¥Û}”Ýò¨ÿLZÞ5©ÖZÒî>£å€µ .º«(‚GÛ‰Ê=V‰ô…ÍgfM«xÒ<íÉ¥ó(HÛ;^K| …³ê½‘^û®TS‚Gç½gòOü»²kÆC²ã&<°jä ãÐ] @™PÙNTî±JœK«§3ýéq:Ð>VÄQ­Z—F­*ÕÚCéô^›–GÁó\ú´%ïW¼9ë¿6Á¤=ñšO¥w¡-ö‚ïÐǤõîµà3Ñ Ü�°*”ò à­·Þb�¥B%p;•i[±~œKë¡735€Ä`û��¥¼œéì?ï½÷žy�å@%p;<Â*q.­´|ªA$H��E)/G/_¾ ÚD�Ê„Jàv*Ó¶bý8—ÖO»¯i�Iˬ�€r£”—#½£óñÇ›G�PT·Á#¬çR>4€¤csr³�ÊR^NtJ~눦À�ʈJàv"x„Uâ\ÊÏÓ§O @ÉQÊËŒ4Ö��”•ÀíDð«Ä¹”/ ézé,Á�€ò¡”—íªÆ Ù�ÊŒJàv*Ó¶bý8—òG ¤ÕÓYît?@ÑPÊ[3Íl5ÓeàA�eF%p;MÞÖô»ŸJû.žÿ"zê²#ÝÝÑãL)ŸéK§Q _—ÝFG.ÃÏøR«V‚çöÄk= Þ•õÞ$}Ïñ{ã¯_*OžT<_zÑÑ÷ O0öYWÆz zÒyü ØŽ}it¢-P—†ìš÷îì6¤“²ª—ä(m­lÒ×kÐ{*Mo/z®Z¿{‘ùÞIô}eQäm%€´ZÔ�Uyrá‚Ð+tz~�(3*Ûiⶆ" Ì,J˜úÙñàÇàÜ—ÃʾÔÛç2èŸJ£zMýç20¯‹¼ßÛ3xäxf ´ÄLûlZ�çRzþQô™j,x1¯Ï<Zå6èoj@èh´ïgÒ: ö¥ŒúϤ¥A¤jS:}{$&oƒK·,о­VC»꘨�PDåÉ… à³Ï>#C�€�•Àí4u[/ÚR«,<R=_¼™ƒG¯¥Ûº%;û-é†1ŠäcµHðH}'íÚµ/*úÍôϦŒpÛ—<R«Ú†ñàÑ û‰4Ûß…«A·%û±m!x”f¶•�Òòé ffbPTåÉ…sfÉfA� ¸­¦nk¬›Úéu|ix7M áBºOšâU¤ñHÿݑʡ´Î¢.N±àѰ%’m“ ¼Œ†ÆZÄ,<Šÿ֠׿áÉ^ø=£îuÓUËí2ç^Ì÷è6„ëõjÁ£IÛ /›®i yÔ þ Ö±âÈYØZhÒ6\¦ì焱m!x”fS¶Uƒ–G{(0¡€¢*O.œ3üîÃ?4� Ü¨n§©Ûꆠ(0ÿÆ[´»Ó~E*µ¶„á£aðèéuJÍ;–vïMøµc­vÂï®È~ëlØM-úþ[Òê¾6Ï,#x4 ž„ßãµ¢`ËO¢O•º´/â—óÞ©œÔŽ¢nucß›°ÒàQbœÇ6xµº&µ°Ѥm°û9;x~ÝÖ¦Ú¤mÕò­=ôF)§ûO;û@Q•'Α¶6Ò»2d�¡¸¦n«<R± È@.Úu© ‰`JøÞŠT½Ù¶‚±ïMþN`5Á#•øžD×¼x0Å^ªâíZU…’ßëXiðH%÷E¢[[lNÚ†äö&é÷zÁv¼2Á£4›¶­®N[é>€¢*O.œ#çˆ)7`„JàvºZð(xH8LðèzõºT*·Å?·­ŽÔ´`HZPcü=#ú} Û˜<º^•je/1€wò{k%^O ¥nCr{]éw>’Ú° ŸEð(Í&n« a1:Ö“ê�(²òäÂ9ÑA²ÉH ŽJàvZ}ð(øì£ÏÅ?ÜsÆàQÉ`È*Ìžx™%xäý@NýÛRqÇtû^GƒG©ÛÜ^k ý³‡RkžßœDð(ͦn«–y¦a1z³™±QYyráhÓ]É€q“+F¦r¼'Zœ`Cì5çù~WÚ­šTíg*ž4üŽôl  ¬|ÛïÓå/ËïýÞ_v;‹~öÑçÒ ¦b›ö÷û'Ð÷g[`[u`évKjÕŠymO¼†/áø?)ßù{¿›Ø~»èg?‘¶N£®Æö“}ûýÙôý…ß?‹(>–N²Ûšé:e>6xì‡hþŠT61x‰Þs#ì"5è=‘úR¦êWfÿÚõJŽÍë¶f·Év—3ŸÕõ<ƒ`£i볃Gã3”Y‹¦lC²ÛZ¸Mö¸MÚ†´à‘ Ýy2:_úÏä¤ùÇr>&x”fS·U˾¡Í|^¾|Yªô `3q•Z!Í8ß{ï=ó�`M/$ëÌS7‚÷ÙÀ‚#¬èŽQ``Wªµ‡&À¡³x•U}®îTXMÙm}2VÑu‚PnË–Xå}p.íú~°nã]vÒ,s[‡¿]­ÉI§g¶_-Öçî:H›–6î?ÉV?nÊm=böST öeûn´?}SÙÏ6q[Ãß·©`_~ÑŽ=>nÔ‚caïÖ¤q\5¯Ë-O¼¬Ï†A‡´ÀK°î§÷£YÛvö¥æŸ%Z½,<2¿cÖk·Ñ–/ÜÇÇ 9ÎÚ¦_Ï»fþN~VÓÖR¶Á¦QûîñS‹¦lÃÄmŠ/ãÛ`>·ç”ŽNÌ1p7­<J³ÉÛª3¯éÍS†l˜î+\�Ь<¹ðšé¦.€t3UŒb­Ü8:1 ÓBb8›•¥ã«4¥ ð8-&ÂǶbžìbóFε;ŽÓB&jõb‚G*\· œ¨è§YÞ¶ÚV,)A¦þ©4ª'Àc[L9Û6<ŠD-t‚mÕ’A³ÇöÓ¸ü*¼Ù­v²-<Z¥E¶aÑ–G«“~NMBð(ͦo«þL9xvÚÕO‡º�€"+O.¼fš Ðç�ÒÍV12A‹Ø´Þú@cA§»Ã¶tIE¦68d?»êàÑ,Ûj×,P¦lkÛÒhöàÑ(8ïZEðˆàÑ"-Ç6l«¶¦a¶áÙh° Ê“ ¯‘mu¤ÿ�ÆÍV1²­‡Ü–6È8vÅŠ*ªie‚-ÃJéÁ£d & í‰Îu!g­Ãxˤ –µ­Qð'+`eƒE6À5OðȾ×þv´íQ·½ËQ·#§»_–܃GÁïë’²fyoŽÁ£™¶A§¦Ýè½Å M^/kž÷*}_Yl˶ÚØ eÓ ‘Ž…ÉÌû¦±]»o¯9/@‘Åò­Ø ?[–2¯-¶<6í}ÎÊÐøû§•V©<¹ðé8G �é´ ¬™ßLÌø;ÃîXÚâçFrÌ¢¬ βƒGnæ¾'^óéÌvLÙÖ¨�üvjÇ.–<m«Žÿt_N—1`öt² íúXËL_E·MÛªåbÆóɦÝÕè­P<ÑX‡š¦•Pn¶ÜT‰­ÓͰœfZn§”Ûâï3ãT¦¶,Dé1eØ‚5+O.¼&ZØ¥‰.€²³ ¤k¡X+zgU+Dzœ½bäüü¹hß‘n hR·5Œ‹æMë¶6‡¥mk2 c?›¼³5KðhZ·µÙ-«Â«•)M'àÚ¦€Ê4Û´­v6ÆôI§5/¦ìL(7-c½+ÞM©$'OÑòâ°œ9¡;zì}¦Ì6©îÊ¡ËTž\xM´i.™#€2Ò@‘Vx¦-ö}3 9ÙðCyttœœ˜ÀÇX@ef;Ÿ]Kð(0q[W;`öè³ù´’©ÁF­h2þ’®š¾6ɶm«mqÊy=N÷ C]¬ŠÎ¾êK#¨äGù÷…tŸ4Å«Hã‘þ”KÜÙFµìÐõ£YHƒ2@壃ÞSiz{á1³Ÿ‹Ê¦Œ”/^ØÇ3tÅŦÒ2Ö M½p¶ÜÊmñÏMël‚G˜•Þ5 Ï2€²²ã½…¨ŒE¯‘ пgg[Ƥ·0Цê¯8]«–4Uÿ0˜|ô Í…—¹­Ã©ú+ž4O—9U¿Sð±ÝçÒ~Šù¶5NÓÞ€ÑVj´ÞE𫤝M³Ûª7Wm€ˆ¶ÒÕëVÄv÷6•îQ ÇŒa˜ÌïÂ1×Ìk&¿µe„ðµRoŸyï+4ÐWvl@sÃIßç;ù1¶ õ‡7ï†ã<¬4C¤Ù)€2ÓÊVz²{Ô¿g—6˜tܠ׿áIÅþVÅ“†ßŽÂL×]—¿,¿÷{Ùyì,Õš´ÛÏÚ<£×çm‘£Ÿ™Ýôm 6V:~#ºc®SPnøÒTM «á:ïŠ÷{¿›Ø~»ìK­õÃÑg“ûiÎ;§ú™EØ.ßü±yæªâƒO/Z�û:±ŸìR‘j­%í®V%ÆÿpÑtÒî¿4ëïeøbw®' À9<zw¼-- š×*^CüNPœ¸Þzn<ú\ºáoLxŸ.»s®ëTÛº­f|Ÿ½æ-ﺇT±J·mÁko¹•{óZÆ ¦Øuz¸Øï5-–+R«nÆ`KiÞi‚Gš‡ÁàìÐ8•~,(Dð´†fˆ�Pvz-Œ®¢Å½Fêã²`['³ã-÷æKP`kÖMW„d¡LgË«K3,€™ZNmØ-Á âD-ÏœBÛ '§M VÞž{<1ëïMb9Óà|#½ö]©jàïä4zŸO´Åܾ¹+™Ø².œM/cûÔà¹øc]'óŹ´ù´Õã™h«#öÅŠ%*Ýñë¢[¹¯èÞûÚ\Ÿëi’mÝ»€íä”3ÜAã®<Â$6#Ô;§�PfÚõè·û·å/ý¥¿V~ÜŽFnkÅ( ÛšNóÎÕoôFzÝçA±MʽgòeØÚ*½À6tI+´ÅºÎú{“èçf€Ó æ>Þ­Ðv£uAÛŽ-ä:³¤P: çÒvÐ`‰–›Ë>Î^õ8ÓoÅ×·ìà‘¹™àŒ¡è¾7ú;«U°Þ$¸#wüOä^lüAl'ͯÝàQ@o¸šñ°†A¡ñT‘¨•ÛÞ°%{zYDß×ï<†¦¹¬|º*ÍÆç‰òÀê”'^!muĤ�Êζ Ñkb²ûZò©Ï•Û:n½ãeÊTZ ÇŽ!åÜ=NÚ†-}lË#פߛÄF' Ài¾;£UnFA¡ôàQ`êl‚ˆ:ÿ\Ζ{.Ù®Á~ˆ ˜k]õõ«Ùöë†vÕ*{‹} ¢Ñkaõâc&»­¹S©kE=šhÃk>•Þ¥óHË1Áû»OÍØ6v|Aý®rÒ½^ûX<í²¤Ï†“P˜1•‚ÇØF:χíøGÃà‘M&M…E ;.§ânËãKM_ÑàíAY H«ñtlôÏįÝL™EwuÊS¢]-�ëE¥ìwO�”—^ÿ´�¬-HÜÖEú\Tè¿Fn{ÅÈŶÆ-|£if™t:ZœÆU\I¾Çi¹sÕàQPÝÈ€ÓÜ%O )³žv\®Ìà‘ËTS·/ã7f¤ÇyÙÝqt½–ÇîËh{ÇÇ2»êëW£ß¹Í4h¬d½ÙPVÚò²Ìۿóu©Êq£\ÍãÝš4ŽGçpTá¿®_»öîìÜÞÿŽìVkrŽ'g+óÁµ9|=ê:üâT¯³úX¯™x_ÝuEW2~ŒM�Ò ‚E6ÝË0M©ä8•‰eÿ#ù“?L+§Ø%Q^Y±ò”hWD/ü ü ¬lk# $[hÀ(+H ^Y°­#«ßhš‚GÃ×´rð©4tÌ£dË·eN¿+OÂÚÝËBKéz¤Ài…Å+–ÛòÈvMZæ±^î¹d÷qPø¦åQ.´»ª¦‘²Nߟ¼á�EWží Ðê@Yeµ6JÒ×Òº%PÙNYÛªi`uãM3Oð(5wî(ŽWvpÔ±ï]FðH¥ Ài¾;£ÛZ´Þv¦ Á£©Ý֖ÖÕÊŒsiû”uÂ{s�6Iyrá Õ€2šÔÚhVT·SÚ¶j�a}ã¥Y<x4”zRð(6FZVð(6�çÒÌvZM­(x¤ìñ_Fy‰ëÆöÑk‚•×Û1º½Œ— `Ó”'^2Z(›Y[Í‚JàvJn«¶*Ðçò×#m J+>Š®ëh †“œàÊpª~Ó­,zÖ˜ô{“Ì:�§ªß€s‘©úـƶ/t!Ý'H­™Ü¾ùi€`ÄdúÚfeÚVíâ¨ùJ>Áå|hàHoÄ�À&)Oδd´:P&Ëhm䢸ì¶j Qƒºä;žIr J7@2aÊjMZí®ô‡ÝÄRÞ£ƒ¥¶ÚÒµ3²…&ýÞ$ñÏÍ6�§Íd>Sñâàœ°Þºm;fÖ—IÛ§ËòâÔë†V˜5M,z Ñu*‹2m«ÒÀb™Öü”Ð�6M¹r¦%¡Õ€²ÐJÞ²Z¹¨n'ÝV7Ð$é·EǾ⺱½ìøXe([ë¶ê9��›†àÑhu  ìlIËjm䢸}4è¶.;Јí£-LôÚ2o�‰ëÆv+KùZìÔ#�l"‚Gs¢Õ€mg»—¬2@%p»Ø@£në²ÛÁN±ŸÖ5,Xæ\{óé€Ášfæ(Y÷UY”i[-½vhšØöà³¶æ-Û�á�¶Á£9ÑêÀ6³A� ­2@%p;hÑ<QÓŒ¦2Vx±8{½™µ"Íucû•aê~=¶Ùl"Jys Õ€m¥Y Ù ÀªQ Ü|Ú:@[§¹3h•µÂ‹ÅÙ±nf¹1Çu£ôº²­-s4ÕAã`QÊ›­Ž�l£uµ6rQ Ül:–¦™äTÓ°½)§êie,®å £mPZ¯L&�l/½±¦7Õô<×–”úx›žPÊ›­Ž�l›u·6rQ ÜLÚJÄNÁŸ––¹Â‹«Ñë‘M[YAl®å±­­4}¯;¿Åbô:4ï þ€¦½~§-zþk¹[ƒJz}ÛÄñÝ(å͈VG�¶I­\š‰–Å6l«¦-ìè¶è¿YÊt\±|šÎ´¬•@âºQÛØúÈV*‘/-ÿh˽Îèñ˜´LÊï€,Z¶NKOÉeÓW°ÐêÀ¶ÐÂk^­\zM-‹MßVwl£iù`™Ž+VGHzJÞõçºQ.ÛÖúH·eÛßš¶ô›´hp X„véOKS×6r¦ÐêÀ¶È³µ‘K3βØÔmµ­@4Í$Ç6ÊR¦ãŠÕÒ4— qÝ(—mk}¤×SZ²ƒ¦-=Dz½öÐh�‹Ð<ëïü¿“š®ì²ÉAqr¦)hu`›e¬…dFÊÂÂÂÂ_°]­t[C§8&u[›õ†  ´lmo¶éy®ƒeÿÆoüFjÚÚôë9Ózðiu�(½QR„ne¡­´Ë&š¹.ºoæiý†í²-­ôÚªéÅ`[Ö¦UîéZˆi4ýèµÉŽm¤HÍÏÝàp²ëšžÿÛ'x4& =ÐÜ%��l;ÛMHošäÝ­±,4@g –‘€tÛÐúH¯¯ZÑDþl@R¯¹ÉÖGšÒÛi4]èy¬éFÓŠžÏú8+½èónºÚ–xÁ£ ôâBô�°Í´@£y¦ ^¬—[¸´ A$ ÎVö7™V4·¡ÕÁ&Ó몋4-Ù–µšÿ¹×_ �–¦½¡¦éF@ÚZMÏãYo°iZÛ¶†(&ÐÎ…ÀÆêŸJ£öXzæ!¤Í¬µÀÌ ®ùÑ‚¥[y± A$`Ä­ðo"Z´äG÷»^Oõ¤‡l÷5 @Ùñ‹ôš£‹þ½èµGÓÛ6ŽÁ£ Z`Ó�›é•t7dÇó aŒ½«Ë¶l6VX’#wÑ×9F(;Û]déùK"60¤7H²Z‹hp‰à^y¹ãi:Ðr‘¶6"ßMGð(ƒ& îÄX«~Wž4<©TÄ«V‚Ï‘ø½7ÁÓ¾ÔÂÇAe²Z““NOá¯]ÈYëP*¦ò}Ïeø ”›޵0uëg[e-Zaf *”ž›ZÁ×s\¯»X?ÝﳤGåeóY-‘¦#x”BŽfPÖ�¬O_:jTa¬6¥Ó7á¡s_+ûRoŸË`p.íú¾ìTn‹þfâkÃï£åšŸiFó6-L“¿‡;hvr)ÝM¬ž/^Ê~ˆÍ'°ø¬ëÞeG»»âù/‚|ÿTÞuó8!ø®v«&U®¡…¡×.m°i´bºÉ]îVïBºOšâU¸Ñµ^ˆïí:×ôª4:}óÚ4S®ÓËNCv‡7I'¥%ý®¶´j7cßEyh>RhæÄ�ë÷´kל€Ïké¶nÉÎ~Kº¶ÖtÑ–Z¥"û­/å,óµ3Í" !¤Í±5hD÷§bÒV±@I°ü…¿ðäý£dÞQ2ƒ3iíWd·Ñ-úzO¥éí9ñ,N�~–ë^HÒýmƒI.síõ»°zýÚ´›»º®šŽ¨ f‹*ÿz.<Ú^æšZ©Kûbêm€‘‰×éqÓ’É[fý.¤#x” ÷Mm `Ó%>æ± 2én£-_d¾¦•.‚Ge—6³ ŠIË6p¤A¾?ú£? [9+œÑ]j< .lÒó‚}3ËÝêd�~Š0àžU‘àZDz~lÒd6zíÕë0&±ç8Á£íeŽñnC:óâ‰×é¤AðöºT²ÒR¬õ)Að(a“ä°é’••”;5ÃŒ¯;á5Í©ø”•Þü°?2vßfÐr‡ŽÜ.9Úºœ•N7x4×­âÈ™éÎ+òFz‡ÃñÞ*Þ}9í¹ÝuÈ3îÛèsú_ÞÍQj¬"q!]¿.U äUnŠw°Ç5´`4p´Iç…žÓ›ØÕn½âÁ£QësnzrÚôÌ8Ž{ⵞIßÜ,‹‚îÉÏ„*ž‚GÁqîœÔ¢ë¯çæSéé¥Û^§[¥¥­Pm°Ÿñâí¾7Þ-Ð?¿¶¦•Ê'3¢†àQwhägü®y4®QEªõ'A&T~Úw¥jF“^sƒGç½gòeX±Â6ÓV*vðeÆ5Ú,Z!N+{h%¹|ÝèãcT<iø¨aD×¾Òè¼ .u§Ò¨ÚnnæºW9”ÖÙ… º-Ùß¹&µöw¦¢ßé´`ŠÒï4ƒk¨ùlï‰Ô58Eð¨p40®-+7žÃ›²®ùq‚Gç/¤sR/,×èk:sìMSÎ1ç¨=§ûϤåUåМ½ÁsñjSº·"Ó‚GoäÜ¿-•pÌÏàJgs­6×îèFÀOb7N‡Cç{ãÁ£hæá賯£r2ÝÖ®„à‘C nL¥ ¦Òc*L£.o¤wz_¼Š©HUëâw/ÂW¦¾f’ÎÝl-w\#º]o �j¹¤\3ãÙ–GOå¹V&‚kذr2-2Sƒ:‰—±àP ;+x¤ÁûëfÌ8•ø.ƦÌ^fÇ3Ã46xTÏ»9jU¢†Aßøb[&†]”L÷} ߨµÅ–‚P$S‚GáxDAy5-¨“¸ŽÇƒCãß{=ìòvKZÝ×öÅxž€¹•öŠ–vGV ÝL] �Øî¸FÜÝÞNvàò´Švº­iK‚Ã½Ø ”“ƒ:WU*• ʽu¥õ c6xtMªÕ]©úrnO÷ðœPكץÖ~!ÝÖQÔ" 4%x4)¨“xmžàQü½á‹Ù¿ƒ™”6x¤s¶5#ÒÂÍü�E§y—æcšoqÓcûÙ–eå˜-/>`ö°{nãÔ´FH™…rè Á#3OeØràQ‘éõOÏ‹"ÓÖQ\ŸgaƒGGòèô“à|wÆ´ ÏÑç¼LŠ®ï]ywÿÎh HLVðH»">Æ“\w–ŸŽ+b]—£ ]Q©ƒG¶é£Þ±ýßùùýßÿ}ó*��Å“ ›å¡Ç[Ë+[ÌÇ‚8f, § nT!p*˜Úå¬õ©ô’ãÆ…]*à ÉXE" &Ù×£±1tŒ¥æiO.í˜GZV$€T8”Ñka‘éùZŽ€ïU‚G~ï'æ|7cšÙórg_êíó(°pñ¹4Oœ ƒ9ÏGfOÚTývB„ÛÁqï›×£1çB*­Ç/Ìñµ;›šíŠ–ü^›–ÌëfL¼hR…¾ÎAëÿUÚà‘f86xd—_ýÕ_ gD`¼�@‘h¾¤w± •›¦­îsœ²™ ÚØîkáóÚrèe|¼·°Âqµ2ŸÝ=nÈñp¬”à3_´Ã ™µ5’3+Ž!רU¥Z{(&(Ûc ¨lwSLµ1çânC¾øbô8lèž—;•”sRƒÆG£qmP0‰I’‹mE›UÏ ýê4v>nÔ2ÓJÚãÎåhÆÎ0íß“Úî¾ÔNN tA¥ Ùi² .q·�ÀªqÁ$6h¤ùA#èñ/ç lÀ¸"õ¦-£8O×D[+¤tc°l2-œÑ À*iáR¯7@’4ÒÉ`i�I[4}¼`Õ´·€.E¤7¡9G×A»µ¾#7ÒÆÊA®(·l'‚G)‹6 çî.€UÑ U¯3¤¦å\0 Û%†Ê)ÊL[ië£"Òó“ëw6Ý7W³ÊŒo挅†üiÞ¤ul-ßj9Û§´GU§¼uFv¡‰)€UÒÖFZ¨Ô̰ô†A#ÌC+Κ^ŠÚmX‡"iŠÔÊ›æuÚZL¯]Em5†ùhZ¥¦y=µ £Ïa;•6xd ]îÂtš�VE ·ÚÚ¨Èc4`ý4]h ѸaåšÂ§­WŠV~×k:‘q6¯ÓcF^·¹4�¨y–Yôxj¹VÓ;ùP9< MøDH¬Šmm¤™+]b¡´àLK#,$”™¦ÿ«uZ>í²C½bD‘ô7Ï6“–Q칦åMãZ¶¥ìR>¥ i!ËŽ(pXÍTim—¦‚FX6 &=-F+EzNê¿Ø,zCF]QnÌm}ò¤ù-qnm­kÞbÇ/ÒÀ‘GÒv¹•z$+=8PzQf)æ²(ZÁe Ñš&´é>i˦ÁHÊ5‹ÓsTÏO*¹›§H-}t=t}ÊLƒØh°ù6‡^¿“”:xÅU‚XEŽ ­àÒŠ¨¦]4 HÅ«D�éjôN»­0asheW—"Ðõ(kÀD¯;ºýZvÒ¹Ÿ# é5O¯}ZVÑcG¯d¡Æ �Á£bš÷¸ÐÚJ½¦4¢%Ö‰�ÒÕè �Ý6G‘Zûè5¿Œ7Ž {sèñÑrIrü"F˜5V �Ó¬ÇE+i´6‚¦[€Öô@Z@^´2 ,FÏe݇º„+>=Fš_ç}¬´R^¶òœm]KžWlYãèü¨±@ð¨˜f9.zÇ“ÖF妅/m¥ éEÿ¥�¼Ùà­g§ûV\›C“;6‹^YXXXX²—EPc `Ñ«5é¸heBïÜÐÚ<ÔJ&wðP$–C÷Ÿžãté(6mõ©7q¬<ÊUšä‘NòØV½¾äÑ%›ò2V©LékÑmå  €Ì°˜²Ž‹mm¤Á#îHƒ4€¢"€´v<»I7 çK¦u‹Jàv¢¼ŒUâ\šŽ3(�2ÃbJ­ˆiÀH+nóx�(*HË¡­,4OHkm¡û–ý›?=>6˜_¦rÛ ,çÒtœ@“{\hm”³ž/^p<ô˜Œ–=ñ¾tzoÌ›�¤!€´Ú%Ióm‰dÙ ’.ä ùÒA›í=eÁ¶ËÁ¹4g P�d†Å¤ÇE+´6*ˆÁ™´ö+²ÛèÈ¥¼‘^û®TƒcT9ôå|`Þ³jýSiÔKÏ<6¤å°$ÝnàH7¨„õsÇ=*S¹Šm–ƒsi:Î@ �È ‹I ­Šä…øÞ® ©ï¤]»§#ñ{Ñ3«õJ:²ãù°‘l�‰kÚÕè¾ûßø0p@ùÑq´õ‘ÒãQl+°œKÓmýºì4dwžŠÅ '§MO*ÁÝÙÙ—zû\ÖuCå5Û Ü*®Õð½éKU~+¥k.ûRkµ¥Û×ÔUÀÇßS‘j­%íîEôs—iì&ßã,» édžVîºßÛ8 ž±â¿? \H·Ý’Zµb^KvIÊZï©x yÔîšßÈ~Ÿ.£ß˦­\éûimT$“‚Go¤ßõôc¯ßƒàùO¥á]“ªw¶T ƒ?±k}ÖZÏ‚ôcß{]'Òôöœ×.ä¬uhޯ˺VÀrÙ�’.£­®]Ók½ŒfßÌZ®7|”‹²`[åà\šŽ30æµt[·dg¿%ÝËsi×÷¯p‡YïPS¹ÀLf;ûÒiÖ¥u¦ÁKéùGN�G+¶uivú‰®=êôNï‹Wqƒ8&­; AïiTY®6¥£A¦ËŽ4NäÌ 8 ¿³ÿLZG÷',ÈIbõ÷d¿u=70ç[µ&'^øÜ w*'5}î®´‡$”ž—ZÙoKKß7¬ä«ñíSƒs_Žêí`oesÇ6¢R4Qzªxš./¥v¤ë Â¦×ìAHªÔ‚ã;x.þa–õù76ꦽ>ß”jý‰ôAê4¥ºsMjŸþp0~ã'Q:ªÔ¥}¡©2™þ€ÍD�iq¶Ûš^'ÒºæKûo°­Àrp.MÇU>fi™0™­Œpg³™í~#½îsSùM4ØòL¾ ƒ,ÉÖ*Yéÿ¼ŠµÔüXºßØ0Kò;ƒuùòYPñL|îð@¼ƒ "_¹-þ¹ éï¿#žÿ"ø{ íºT´òÞþ.zÙÒñeªgL›ŒÊ» ìÜ’V÷uðDúöM¢(+A+eps3Ø`䨢VñîËéØ€Ù‰ãÑ–Zeפ7}9½U]˜¾ï·^%x„í¢H³Óý4)pdög~4=kë/=eÁ¶ËÁ¹4]÷m%‘ÈŒµ°ÞïÊ“†'•jP »&L Î zÒñâí™ „ýüAC™î ÑÝå V:V™¨JC[qôÏÄ[5èsûR;9RaŒî†‡Ÿq*,@M+ó™I ôtJ­ºë´¼ÿü¨¥iy“šE𹣤ó*rƒG& 0lÝá2•õaP(«ònPÓš)eÿLèX š:VErù VkZ:Ô–hŸ‹ßªEÝÓìñ¯ïε8œ¹-ãÚœx/Á#l;H³ÓVGz“A÷WTÆK_8;?vÆ5=eÁ¶ËÁ¹4]ñöPx×wOýç2Ю1Ú&ì’`+‘AÆœZ¹úƒ÷‡çó•ðëÏ Û’ýXk‡DÅ$lÍpÍtm*àáÌ>fÝÂ÷g›{¬%”Úü'ðôàQ˜ÖÝ%<Ì[ìç“ïi’¦UÚ³ŸÓàÑ¥mg»9Á#¸M­Ûõ4ÁÜI•w3•{Øm)kûŸÓÊ’mm¤³æ$égP$“Ò¡“¨Z“VûkéºçG2xdÒ\”V¡„ ÍOÇ×Ñ|C÷Þ|póÎÎθ¦K™òo¶Õa óé9òí±ÏÆ ë•º ËßAy£ݰ2õËì÷Æ]v>£´›XúOšâUFõÈÙë•㟱eîpÝlÙZo wä±Þxs×5ã½1úž£´ý•²‰òU¶¶!1fqÍ? ޼rêÿÁ2­£ï)‹E·µx{(¬�Ú𬠛ÁQg.¸OùüX"ŽWL¢à’[™6ŸUÂÓ<Â<æ?“iÛ•¬`Û‹pPY޵üq?¯-6t àd÷2ëªÁ#ýÛ8|#8¿¿ ~?<J=¯lhÁà‘»-´à¯|½K©§)S&²Ìx^ÙAÓòÌŽ¡e²Ûš5Í‹ëâsižŸ½×¶hoùv>ì& l ‚h ][×`~É`û1ÚêK•Àí4y[@ÁÌuEkúgÇëvoäÜ¿-•plÎ×ÑMÒ±!²Êêú}éÁ£QàiþzäÔϦp¢2~¸íië«›'è÷¥Ö» :Îé»&`äÖ5^™×ÕlõΥ銷‡lkŸ°uBTÀU&TS%OÚÄçÇ_<aE‰× ™Ïg\\Ñgç?aPNóŸÀ“2¤´ ¤@:30‰¦i‘ùÙ.ºã‚Ï ƒG;6QåP÷͹}wz·5»Þö\ʺÌÐm-Aï°O›§L™Há™à`X¸ÑeìØŽfC«xȧ­w‚¿÷Äûè¾ÔÒîœÅº$ëLƒ¥óâiÈ4ï=nÔLFMƒ?¶@õšOgó Ø,üÐôžÖØvº~MÇeÁ¶ºæmhà2åÑYƒGá ­]gò—Äã)eÑì–G¶L»H=ÒüfÖgSƒGjº.<Zë6ûý¤ùùè¦âØÄAj¶z çÒtÜC¶{KT`†ºÞàÑx·¶ÙŸàæ1ÿ <)CJ»@Ú ŒMÏ韷Á£ñ–³]tÇŸsƒGñì0Ìž{6ƒY€ÙÃ;>“öÏìÊ”‰�€ÒÊ·¶@Ò.½À¦±ÓõS ÜNÓ·5^NÔîX~Ó=[~4þ­)ëFŸ5ß¼nƒcu»± J²Œ:¹,š<Òלߚg _û›±uvÊÜk %¶!Õ—†wÓ|íq GQïˆQ·¿E·ÁJ«³ÌVá\š®x{(ì2àœ˜1óF“M…yØ¢!ñùð·lK…@²K„­š©Â½'R¯^¯à¦ž0ç/äË/£©Ç,óŸÀɴ틸;ƒÐÇ 3Ÿw2‰áTýcM=ÉscVú¹wëhÄÎ…ßv3ªxÒ<]|ªþÑxdãÛ 3Ü;ÒLn_†2e"�`i—+)9‰�P4,Ò1Ž4Ø©-Žl«#*Ûiú¶ºåÄQ�(*;¡ÔñoGÁ£ó° z4êÚˆCìã”*Ãa–<OÂï™¶ Nà%¨ƒvNêâ…c÷Fß|Y>Á£ðwõ¼Œ¾g¸MÚ’»õLú±zÆ¢Û`„ߥA*º­M²è¶oÙA²Ãe—âLNíÉ,Ó¾%Ì`Ù­IãØùüqCއÝ‚øÉ'&QÛ%Jì£ µ>çÀ5Yh N‚Ôi¤8M_³3™Û0­:ôdמá¢ÝrZÒîjè'ùyg îÆÓxò;32Á1±Ï%3í’z+~á·wV†3J×ÎðüÉZoݶò¸cƒ´¶O—Æ,³ôýX/­¨ÚqCôî1€|蹨Á# "e äMÓ©mi”\Ê‚mu¹Á#• LÿÖ”uVïý£áà×V,’òxUÁ£ñï™´ 6ðRÏ»fô=VfàeÅÁ#ûžd·6÷¸-º J¿÷Žìg—¶’é çÒt…ÛCt¹Slº¨ÚBè0=aÛ L«MÂqYmå ƒœÚ;Æú¯>¦Â äÏÎHÉ�Ð(*;VWr) ¶Õ5-x”x=-xt½*U;ó·¾Ç˜ QÉß^UðhÒ6ØÀË5©VwaŒÂ’¯§æÝ†@ÿT𵇦 Ÿ‹àQÒ¢ÛZ°=¤ g_ª5_ºÃƒ~!]ÿXê3Llª2]¬6 Çe5tL i«­”êÌDÚÒH+�t‘Ї´Qtnw5»”ÛêJpy?SEÍ™z_CÂîQ«0;ù[‹ŽäÑé'rX1ÝÂô}j£‚Gsnƒö^ª}d†çH"x”´è¶l¹ã—˜‹Z7#JtñŒb´d$òemÚoFË´„ $iºÙ8%8t;pu,Ò1)láÞ ѺØ ÚòHƒ½zîE£ùŒ[™œÛÊ©óþa°!ñÚðù é¶[R«VÌkÓºÖ•ÛßûÝ ²l»‹~ö3”@Úg£¥â5ÄvÉϦïͶȶŽ×Çâë’ö¿+¿—² ºèg ër«ÜVe¾ßv‹¥£&k>«¯ ǽµc…[ † §ê×÷¼Žfc]ÂTý£ýkÇSšg _ûY]ÏŸDëçŽeš<Ê+T-<JnCp(bc3%»­™m ÛێΩrvò‘<‹èØ<Yt[˳‡€+ÓÅj“p\“ é˜)Úõ…`°ÙôüÕóYÏmZ ¢h4°©yŽ]&Íî<>HT‘v—±“zTkrbé“z˜ ¸;ˆòXE× BÅZ¶Ä+ïvìÔÑ,²Ù–º­:ÉŠAtœ×“Óhb“ò¤>ç œ‰‡b­GT|R“Që‘Um«ùýà=ºì6ÚòŤDZñoãKü½Qàd<xöÍ©™ñl§ZT‹b#‚Ï~ñ…ûxò¾·¼[™Ÿ '©Á£ø~³ãþ-<JnCçµþ®ýþª7j™Û[fÙ†Ôñ’“iàQÒ¢ÛZž=X™.V›„ã2V&¿úê«08¤•JÝg6X¤ÏSÁ¶‹H[[2ŠDó#wðìéÜÖæ©7î˜�m!a[L8ú§ÒÐÉq†·Å„©¢¦VÖƒo=÷åP'É\Ùþîøg“–·­°KZI':¹ð„Awý’Á#öâÕV½­«‘<šh±àÑJe¤Ç‰ì¶¶2‹lÁ£1‹nkyöP`eºXmŽKœVm«"[yÔ}¤­ô9‚E@yè9¯uÆAB‘hºÔ|i¶üÛ-œ.1JƒB‡'&Èbº2 » ¹l‹DPd†àÑ0˜³¶€Ê,Ûj×?%Pˆ‚'NK£YƒGÃßNt­"xDðh–bÑm-Ï ¬L«MRöãb¶Ö®�6PävA£ÕPnzÐ�’^6ŸÛu£"ÕØTÏ&€¾–² +ËSÞ7V‰´•õÑ{¦Un0Ýÿ¿½ûyqÜÞ÷?ïC‹á,j7Ô¹p§É&+¯¼éE²éM1ˆK‘P‹^œ¹Ì@àvO¸×àá†C¥á΄Ë…¤çk34äÖ`’EÓ†,z:…¡ɷ(LRç=zKŸ-Ë’”e[–žݶå’>’­W}>oÙï«¥ØÞCãž6d|$÷m@ž¨Ûf&QvûÙk{{™ðÈÎkƒsÛeʼn ËÛ²Ž÷Œ€$ bmtéð(`ž½÷–uf†bÍÙQ—™wwá‘ù\YµÌ¼:ÏN£%—a긾øøªóTÅ]—µ:k(°*¬öI•¶‹A%‡Ÿip¤’ž$@Rùê Ù�hº¾K4¼çhÒëbªHm\b¾™‚½³¦ Éb]Ú vùïoSg<K{LB {¢:3ÜKm < >÷xr\éœåQDÚZ°¬ãíŒ'ïðÈ.§N¹/+°º*µ¯».+{ P�|S·‹†@úÃÚ=³A‘þ¥Voëý:ÃÏ�,K¶‡âþ÷H|-Þñ‘¸G‡±“l¥'¼šœ(Ï bó-3\"<±^ôt¬b•ïï©ÂÏ ÞE&LL¶f˜qXdC‘e£EÃÖ–—ß²ÚÏŸdFÏ-ËÒáÑ¢akËã÷26©Jíë®ËÊ�_†Å´h»hO=Y*[›H{ i¤=l7~ý×Ö(ÒÏOP /zÌÑãÌ~×Az-ÞÉŸ¥™V ™ðh_¬ö»Ê“~"ϾlIk*8±ÁGJ ’CÁì™çn<P™·¬MÌ?—ðÅT¥öu×ee €/ÃbÊÚ.¸h�£ïjÛÙ€H' ‚ô¯þñϤÿ×ûô1íiD}"�Û Ç­ƒ¤ÇŸýd£[{ys[ÿˆðhŸ¬öÝl">•ÒÃÈ^ª?6´*ŸKõÇ{¶Ù!ei=œæËuYÇ—ê?·ó<×Kõ{¯Ì|ÛZV`5Uj_w]Vö@ �ø2,¦ävI†FvÚ=Ó÷³½‡l8d{餷uÒ:E¶.‘Ö€]Òp[‡Äê´=mx¤ÿ¿’óîqp¢­W¨zCx´GVþnž)& Š×W/¯~ŠÛö¤?Ž¢íl¿ŸkÚ#ç_ÿ9Ø®öv|jH³ûsž»Z[Ðç¬dѲj€Ô÷¤±Ž>“ã¶ÅëÛšD¦çÐøó“ûÏò¯SË`'GêÍÏä«ñs·¼¬w ¿§–ù-5U;e:h!_d®“®ôfí‡ûr´ôd04k}áûÍ9Æ„Ç+;oâŠ{SïÛÃôºšÇWÚ^? UæçÖ}ã‹%–O§b÷ô3UÅ]—µ:k(°*¬ö‰Ý.ú#BëE_t³Ó²l d' édƒ ûšvx™­CdÃ!�`hè­½öë¸ã!7ÇÒþä˜ðhO¬òݼïXÖ|Øâÿ:-=‘“î ÷Ú©}x$ÃóS9éè>ozYņèüçÒÑ`®Þ‘¾ †laýÉqâFü³'â:“+?.÷~ Ø gªÇ\ |ÿ£q¹‘ÿLZõ©7ŸšSŧÒÔûZÏ&ÒÜžuæjzjfùÔ\x)C'wˆ}i±ê¬! Àªt°Ú'º]ôäGÿ7% ;éIS|>ÙÉ+ÓI‡–é =‡�”‰Ö?²—óß^H‰ð(`ëÓ„½IìIRêÉÒš2bAPVxt)ýΓhØNVx4<“Nû¯½C0~çV˺>ý=N-käÿ ?Øð'¹|ùî;ímezi%ê;E½ˆbµ±RÓÃ�—{¿‚ç¹r4UoKéûÿÉ|SkfX¡Ê‚˜¢™ã«.¢�ûÒbÕYC@éÌ´¿S2�²A�DÑ×À\ôÂ×_ÓPèþG'Mñ“$[·%v‰q[&¥GÁô¡+x-©Û“´KõÏÅk¾;sR†åèwsU°¬w§¶öðÖcÓZ=$³à”ðhR/+vœ˜ Wb=}LÏ£)™ï·@ð¼“àõ.“!P<< _;­hzÀ³¡PfÌäÕ“˧ÇÔ'Ò,Øñ}i±ê¬! Àªt°Ú'º]ô¤gQï#�Àbö¯û¶’9iŠŽíÉ3½Úԃ铤q!aû­eb‡y¦^/9i¡ár‘¬35Å /c%ºþª‚e½ ‹ôx¤áÑÚ½"3Ü”úPá”Ü·£pef¾qÏ„Ì÷[ xÞIà˜«çëM£¨WTZ ¤Ìç´aØÜỺÜ6O[¾¬÷XŽn³µ¿ú¹r5|!ݰvØ¡¸vÈaܺ¯á®ËºÒ³¦78Óô„»cýS|»Ì ‘��˱½´®WĦTé»™e]†:<Mƒ#í1ž‹EáѸçÑH†ƒ¯£bäSWÛKö̹’Á³NX }zx™±vx°ÁDØêU"<Š_E/n½ð(ÏžGé÷HžòÞ—¦Šœ'†.ªu_Ç]—u¥gå½BQ´õ°þŠ)m»èý«¹þèÐÇÙv�°ºÂ÷BÂ^«Òw3˺< ¬5pÐ�;×ÒK‡G‘h¨jü iÉpE™¡±i¯›Gx°µ‰œãGòÉÑÃÖÌ0\[‡);<Z4l-ÚòÜŽ¹ïKô<ªÎÁ «¡m¬‡õWLó¶K<Dâ¯ç�°:z!aSªô»Še]ŽþfÓçkp»;†G“€f^x”¨‡¦r ¢+ž='ø,µqïü fOzMm&<Ò!‡zQ†¼°/-¶Ò³ª´B±ÚÆzXÅÄv€Í³'uôBB^ªôýͲη:µè}hÎ¥úÇõ†ôÎäÕí¥úk‰ÂÚ‘ì÷›OŸw¦G‘­4¹ú[t©~G÷‰œÝùRý±ay©W§4Cøš™Y¾ei¨%%ò¾´ØJÏªÒ ÅjhëaýÛ�¶Ã'¡òP¥ïo–5›í!®5ŽÖ.ŠÊÖö1ui‚iD½mâ§zSº½A4 É ›O ðw¥7ˆG=óÞožÄó’õs†gÒ®?‡Gjä÷Åk»¦WR09®´½þ$8ÊüÜ ivÿc… ¤ÕVZŽ~WèöÍ‹~¦ª¸ë²®ô¬*­P¬†¶1K»Qê—Õ2ÅøXÅÄv€í²½6w²‡*¨Ò÷7Ë:ËS&Œ.¿wÞy'·m̾´ØJÏªÒ Åjh³ô‹K׋´Ë¬þ(N»¬$믘Ø.�°}:ÌDkYè_”ó¬gê¨Ò÷7Ë:¡³cÒcÇFj¡pt{çµ­Ù—[éYUZ¡X mc–~ézÉšl˜¤i¹ÞFñ°]�`wô-úWeý¾Lûà ¥Jßß,kDƒf 4xÎõJj{bê²î3ÓŠkï Ýîú‘]WUq×e]éYUZ¡X m#v—ÚÙ“þ0ÖQ<l�Ø=[·DÿÂÌP6,£JßßU_V[[O2Wýc}8n,¶Ò³ª´B±ÚÆ,ý2ûÇüÇpÝdMúe—çAo?é¥?ŸH3q™Ï"¨öv€âÐïT†£`YUúþ®ê²êïg[#Mÿ%X®.ýcý25fḱØJÏªÒ ÅjªÞ6ô KÿÚ¡_^é[ŽŽŽÂu“6Å/-©·++¼ÂÃaì2ŸÅQéí�¤ßµ¶.½ ¥JßßU\VÝ÷íV bC/° Óº8n,¶Ò³ª´B±šªµ ý¢Ò¿|j�d‡¦é¿zàÒ±·v¬µþ«%§dP½¯HFþ™œ6Ñçu\éœùÑe4‡çâÙûõRœ§gâb—ÿ /ý9”~»Ýv=Ñg_KÛ}[ŽÚ§ÒqƒÇÅí¾áð…tÃÛÑz‰æ/ýL�€âÑïà*×7Á|Uúþ®Ú²RLIö ë⸱ØJÏªÒ ÅjÊÜ6ôG©v…´½ŠtYõ¯úå¥?^ýåS¿àô9:éÿÓþBR¨õ7z%Þñ=©·Ïd(—ÒoßB¡së™ø£ñ{K½v(ÇÞ+ɵ ºLx¤/òFzÍ{QtÛ—öA´üŽ{*çÃ_¢y–ô®FZá/xü€žG�€•h¯_;”a+ˆ«Ò÷w–U÷mý­.+µÏFÛÆºHัØJÏªÒ ÅjÊÔ64 Ò¡ÙbÖé}"­ú…¥¯£¯¡‰xÖs‹´þFƒ®4j'âùa 4Ýÿ@ºƒks ˆ]ØÞGãðÈô>²=‰®zÒt&QtEó„G�€5èeìqý®ªôý]æeÕßͺOë¾­¡¿ËEÏ·ÖíÆqc±•žÅ‹,ûÚ6ô§hô¯ñágú¥÷ç1ŽZ¿ôý•¤Hëo*؉‰î‡G& £áQ" "<�äMÿø£!’þá‡!-ÕV¥ïï².« âuø]†,¶œÈ:8n,¶Ò³Øa‘e#mC )7¿Ê½Ž~Ù¿Pê¤IµÞ§?:wÕ ¶HûÖl£Htÿ=iöÞ˜{âá� ôû\$B¤êªÒ÷wÙ–U÷YÝwõ·z²4¿ËEF=¯[ÇÅVz;,²äß6L­>ä(YÔº µoÎ¥ÛpL}"-“=’«Þ¿ÉW?ˆw|(µúÇÒóodä?“Vým&é<-qÂÐé<iÖp¹Ú}¹¶Ÿ÷:ý þw/Ä+sÇ<�Ø_ö$T{'OBQnúýÍÄÄÄÄ”=ÝÅJϺ뛠ü–i#ÿ¹¹ÒV¼ážˆ7x)ÏÚ®8õ#qÃÀ¡!|x$ÎÜy´×Ê/âŸ=׉曄‰÷rŽ¥{~Þ_Tú9‹dz[™+£ÍÜߦwÞ_9-˜¿óŸâ}ò®¸mOú¯Ÿ‹-˜]«ÕåQ»)áÿu ¶ãÅ+éµÓWu+ˆ¢m�Àêæõd�°[ºO2ÜØ„GÈÅâ¶WvŽ=¹]Éy÷Øô<y oÒ ¡Þ‘¾ ¦‡=™ÿOÍ3’a¿#uÓ &âVwÄiöä*üÿ}iõ.‚¹L&{e¯‚bß*&¶ �”C¼ðn¼† €Ý°¡‘î“Z¯@ñ!‹ÛÆkñ܃h“Þô=qkui÷µßJì²îúX(Q3gfžX ŸÚòí·ZO'qÿø½ŠI?#Їí�å’¼z=‘€íÒÞE:”T{龸«z£�VGx„\,n7rá='ì9tõ÷JE*y_òvFM?G™ÂͶóž`ß*&¶ �”S²'!°9v³5Èžì'Â#äb©¶a†–é¼Óõmî™Û)ÃÑ¢+yů V|ì[ÅÄv€rÓ“Z2£'µÔ\ò¥§Ñ~„´@9!‹Û†;«g\Ž}þ°µ ÿ…|ç_$æ15jŽÔ[Ï̺‚×é|!ƒ+RÙzHÁ¼W½Ïä4qéù"aß*&¶ �T‡-¬­“J §îFC" ôw”þ[¤+£ÈÌÈ’ ÝLO ižž-qEæ+<ëˆëd@ItF¢ 2MƒZÁkõºÒ¬?Ü«Ñ,›Fx„\$Û†þàšþë‚-’?hðó¥xŸ;±¹o\InÄï},õñ•»Òæ vj¯Ìc^¯Þ”Ó¾öfM]*~ùÎîèçDñ°]� zô÷‹-äKM`yÀ²ï`=×2è>ëØöõ„oäËYÇ Î!åØ{eF­¤‹FŸè¹ß2åKL¤ó§„G£AWK¿Vu:<š4€ôé ý…|‘šN:Rov¥70—g‹3'çÑ©!ÍnOæ _‹ßφib 0uÒ‚Í/—HSmÍžä<f w¤¬T6šæÎÍÐ÷Õ/ ý낎eÖÛúïØèBz=ïB{YÚã¨ÉÐõ…âa»�@uÑ{XŒ¡ŸÈ—9¶á‘2çò‹Ïqu´IKœ¥Ÿ´Ñ/Q6@xWðð艜t_Hx¬©«sdx~*'m@‰tRõŸKÇ=œ¾ôûè\º 'ÖènÄ?{"®ãH½}¾Çrï—e(ýNKºçX%½öºiI'|­åÒÔ(íL\!lôJ¼“G¦ÆÏìr«Ñ…''­^ðŽ›£?ž¾ÿþûð/ ú×m:=~ü8üòHÏî|õ–x6ÐÓu:ð¤ÕúJ.ìBWXYBŠß¯/å'ß?˜~º¼–ßÍýûª,Û�pw¶n‹~'è¿ú¨ºüq¼_è9�ûò‘8ž‹×lHÍ96çÙ‘‘&§zÐþâµt£À'˜÷ÙgÁy¾>6yÞÈï‹×våpœ$†±™óÓhôÊ¡¹ï®DUC¡Ã£‘ÿƒü`ß©0'0òå»ï´‘¤¤“Ù¤0q©øÐtƒYîý²Üˆ?xO)ŸiÖíÑ^7K¦©É÷Ÿ‘¾Ü› a†BúÅ QÐv ¡‘†GúE¡?ª¶á@zÝædˆY¢×WÕm{ßÚ”xï½]ô€Ë[Y¶ �`}ÉŸþ9½‘P)ºhÏ"] CÓØ?sŽkÎ'4ÄqÛžôÃóhC;Tß3@.ƒóùûãsâè\$xŽv1Gœ¦v¬˜Œšœ£$£ðâN÷Ìs/¤×ÒpŠð(®ÐáÑ”Ì0%-¨1Id¼çÑLxt#~ÿ©4ëãžGS†7óÌ ve¤©³ï¯;Æ£XãMymðͯR»Ý-K¿�ôKA¿ âÃÏô/ úƒIÿÊf§m£ʲþ��U`‡´é ´þNÒßNÔwAYéùžØ«¦14 ›39Ç={åɱSçØ›©ÐIu¦;${%ó€øãfÈ[£+ó^³QPžðÈœ°N¦ÒººVF X™²éðhüRÒT¾ìs†S¼ñf,÷xçXLäè;üL¿ì—‚Þ§-ûCHßwW–õ÷Û˧ò¾ëŠLï?})¿™û÷í�0í‰a‡ñk ”6|ØG¶mëù¶í¬?"ù‰ŸGßÈ…÷PœÚýàœüÒ<Ì1'Ô¹{x”œwþûTUy£qP£c¿–¶Ö<rÆ 4'‹½”ßlšÚtx4'M ͼÿú=ô€¯½‡ôào{é‚þ%A¿ÖévÊIözXÅÄv�,KGéßì°6ý?Cz°o’í˜^uØ®Ä9n8Dmº–qÔó(ÙQ$r÷ðÈÔvZ¦¾pòµ JEìåõ&#ÙX”i$i¯»…ð(+M -|ÿyïøµ‘Cö¯aú0¯¨õ:8É^믘Ø.�€»ˆkÓßaœ€£Èô¼AÏì—éA‡Ý™ qô‚Pa‡ ÷‰œéh[ËÈ=•ó0PÒ!gÿ&_M_mÍ\MÍŽ4šª¤ÌȤðñ‘ û©ë¨ ÎsñomÍ£äèŸj+}x”léáÑ=iöÞ˜ûŒ­„GÁÍ”45´bxdÿJUÔzÓ?X8É^믘Ø.�€uØamúûÌþ6Ó“tz$a×⑆œÚF 9±[&Ì Ž•ÑdCÛá"º_ÏçoìÕÕÃû¢Ù—aO!ó܃¦´ÕÍãúœž|«½Œ2okFp%¯e.ðt_µÿ$õ¦œöç]4«Zö&<ŠÂ ”'å’õãKõÇ{ôd^ª?hÉà&ý~˘ML'–HSõ¾ðý“ᑵû³4;Zà{z¹íp´çÿ×ÿ)ÿÇÿú'é${2mØ.ÛF°þЉí�ÈK2HÒ“v‚$l“–°ÐQ ú‡f[LjKìXÖ„G¦‡MðÞvš@Ét26Õ›Òí $Œ^Â^<)óÔ©7»ÒÄ®r6÷ý–‘üLñ�h¹4uþ¤ã;ÙË­SVð Ò÷ÅݱþЉí�Ø$Ù¡m6H¢ 1òF` /{aÐ6ÖS–õ÷ûõ¥üäûâÓO—×ò»¹_Ñ®�Û 'ó6HÒ“|=Ù'HÂ]h0iÛ“¶%Ú€¼!´õ”eýEW%ˆzÀ­Öc¯˜h×�€m‹ŸøÛZ4 oÃ<ZÜZ¢øÕ”µî)€<­ ~b<;ݵ¸v9è:ÀÝ•eý�=ù×àH$Û+Iƒ%òF˜T]¶]Ø+*kh¤á‘¼°)„GÈmc=eY¿½|*ï»®¸ÁôþÓ—ò›¹_Ñ®�EB˜TMºmm±u¶;€]!<B.hëaýÛ�Pd&éð$ÛÅÖ·ÑP!KûK‡¡Ù09|‘í ¬F÷!ö›|!´õ°þЉí�Ø':Ø0Iý³õotHÓü^*³W'Ç•¶×ËWò­ Û«HC¿x¨=‹‹€õ龤Ç@¬ð¹ m¬‡õWLl�À>Ó`BC£x ¤Ó¼@i4èJÃÖò]H¯Õ¾åØ{%ÛÉF2ì?‘¦÷ÚÜ.­G” øâÛC£f/=Îé>†õ!´õ°þЉí�(›´@iŠï‰¿ÌUOšNMj®'~tÏf Ϥ]?wÃ#]Çvè™]Ïñ+¡Ù¡…Éà@þ4Õ}`v}„GÈmc=¬¿bb»��*gnxt%¯%õàûQ¿#kõ¥çßèL2xÖש‹ëÖƒÇÂðgä?—Ž{ÍëK÷ü*6ï‘´¿Ôc _H×ίӶ«;˜ÙÞDv¸Œ†u:/€ÝÐ}S÷C¬‡ð¹ m¬§,ëï÷ëKùÉ÷ŦŸ.¯åwsÿ¾¢]�*' Åí¾¡\Éy÷Xœš# éž4{odtáɱÝÓoËAðY«Ý—vÿ2z°Ñ}iõ.d$—Òoß—šÓ’¯Ÿ}bæ5ï1:—nç٠Þ-pÛ—öA>íŠ=:ÙZ:i¤Ö#" ö‹î£Úãë!<B.hë)Ëú»ÿx¬ÉA»/·æþ}E»�TN™ž?át(nçyJÁì×â¹æû~$W½–8µñüèÛ?þ›`2i¦«Ä¼Cé·ë“^FáÑ¢`ÆöZf²-R…tÒÿÛûí¼ÚÃÈ>À~ÑýV÷k¬‡ð¹ m¬§,ëð�€=—¶6ãJ=OºM-¤=ù¾~Ø@È^¹m&ÅMÏ»\xd‡„eM¶'Ð2“í-¤“ „¸ªPnzŒ°uÆ´þ‘öÔPË#<B.hë)ËúûíåSyßuÅ ¦÷Ÿ¾”ßÌýûŠv �¨œyáQX“èžÔ›]é ^Äz%!{;â–t—ð�ÖñOÿôOò—¿üE?~þÆ×Iÿå!´õ°þЉí�¨šèRýóBŸÒ\ËÈ&­º“9l-ªyäÄŠjë<ŸÉéà—ļo¤×¼'µFW:4ný þw/R†ËÀr´G¡ö0Ì깨ay„GÈmc=¬¿bb»��ªÃ5›œXÍ A_ Më })Ýî…WJûËgȸ¾ÑA[úá“F2xÒÔ�)|¬!ÍÓ3y}¦”·)íGzu6s[{.¤×j¯ëJçÌ^�V§ÁÐøØ’1QÃl5„GÈmc=¬¿bb»����ûGë-ª•¦ó`y„GÈmc=¬¿bb»����ûi^€ÄÕ×VGx„\Ð6ÖÃú+&¶ ���°¿ô kz¥5ý]Ÿ(–½:Â#ä‚¶±žøŒ©X���€ý¥…³“ŲWGx„\Ð6�����E¤Å±ãáŲWGx„\Ð6�����EõüùóqxD±ìÕ!´ ����@‘ép5†Õ!´ ����@Ñ}ÿý÷æXárAÛ����� œV˜˜²&�����P>ô<B.h�����”árAÛ����� œ Ú�����åDx„\Ð6�����('Â#ä‚¶����@9!´ �����ʉð¹ m�����PN„GÈm����€r"<B.h����€M¸í·å 8çÔóÎZ½#ýáÈ>"¾wÝŸ:ˆçß.1_]Úýaô’–ç -}}©Š"<B.h����€Í±#õÖ3ñm~ ºÒhteÞ÷FzÍ{Rßž˜žïZÝRsZÒ»JÌhÎ¥ÛpÄiöäÊÜUU„GÈm����°9} Gî»âÔåØ{%ãÈG{ ¹žøá¡ôÛu©oÇLÍg¨¹=Š^‹çÈA»Ì]m„GÈm����°9ö|$íþké·ïKÍy(ÞÅMôáÑÆ!´ ����ÀæØðh(2<“vÝ™Ô?"<Ú8Â#ä‚¶����ØœXx$#žŸŠë8RoŸÉðhã Ú����`sâᑺ‘ ïaTÿ¨ý±márAÛ�����lN2< Œ^‰w|žNÂ"sµ™Ph$W½–Žƒ ¬ðh$ÃþgÒî½ þŸ]J¿ó$û*m%Dx„\Ð6�����›£¡Ð‰4ÃP'ÆÖ?Šõ4 /É_;·óÜ\ÒÿFüþSiÖß•vÿ2œ'ýRý#¼`¾‡âù·ÁÍ´Kõ_ÉÀkI=­gS‰!´ ����ÀfD=€ÂFÁ4ÝH{ uaŽ ‹œñsjõ¦œöý`n5ýz3S£+ƒ OÜ´ÇÂÉ‘F÷ܼV5!´ �����ʉð¹ m�����PN„GÈm����€r"<B.h�����”árAÛ����� œ Ú�����åTèðè¶ß–ƒà=õ}Ó¦ƒöòEêåõ©7»Ò\E/äg]b¯!ÍnOÃè{‹ß/~9À¤¡ôÛõÔçES]Úý—— >Ç陸áǸ >îIÊ<f:hKÿvþeçÎÍÐ÷�����åSðð艜t_ÈPo„0zk$ÃóS9éhHr-ƒîªèŒÁ£þs鸇R«w¤o‚!K·áÄ‚•ñÏžˆë8RoŸ…ï±ÜûeJ¿Ó’î¹V&�¦+9ﶤ¾VâóŽ|9ë¸âÔåØ{¼Sd4èJcüþÆè•x'¤w¥sÍ.·]xrÒêï¸]„G�����”S¡Ã£‘ÿƒü`ß©0'0òå»ï|Í5‘¨щx¾½3ê­3Ý+Çôr=ñƒ[˽_–ñ¯¢à)å3üò“úXô^‰CÉ÷Ÿ‘¾Ü»Bx����@9:<𒦤5grÚlL÷<š nÄï?•fý`ÜóhÊÂðfžyÁNâ±á¹xúYcÓkɘyÿKé·Ű”÷žI»ùU„má�����åTžð(ølÓÓé®Í<*£NP£+ƒ´îD›ÆŸáPܶ'ý°WRLøþ±ÏNñžTËmzQm›¾7�����(Ÿò„Gã f$ÃÁ×ÒÖšGÎCñ.l(“ìyt%ƒgqš8Çž\$¤M‡GÁcg¯<9^úýç÷<ò<O>ü_þgùß>øwÂ#�����›†G‘¨àt¼ŽPZÍ#St:íu·õooäÂ{(Ní~ð>—æqcáûO¿Ç¯¿þ*Ÿ~ú©¼÷Þ{òã?šy¶‡ð����€r*}xä4í•Çæ…G÷¤Ù{cî3¶7õ jlj+éÃ#K{ ½õÖ[2 Ì=ÛAx����@9íMx…A)!ϼKõÇ{ôd^ª¿6ܲßoæ39-sYý¸ÙÇôòúáð5÷‰œ™ÚG©—ê‡ÚýYš-ð=»Ü¡á@þ÷‡ÿ ÿÃÿø?ÉóçÏÍ›Gx����@9íAxdzØïm§äP´øcã©Þ”no]E-ìÅ“2OÍ‘z³+½Aì*gsßoÉÏ€’ÙØvøš½Þ¤…ÀÙË­S£+ÿ÷ÿ÷cØI‡²mƒ¾/�����(Ÿ=pWZIk }øá‡áÿ7‰¶����@9•œ†F?Þx!mÚ�����åDx´‚Û~[‚u ëavºkqííøüóÏ7ZH[×�����(£ ÑÚº 7QH›¶����@9UŒ]ÛD!mÚ�����åDxTA?ÿüsî…´i�����”áQEå]H›¶����@9U\^…´i�����”ár)¤MÛ����� œZ·6m����€r"<˜-¤­µV-¤MÛ����� œ0%^H[äeÑ6�����('Â#¤²…´—½m����€r"<B¦U iÓ6�����('Â#Ìe ikO¤yh�����”áZ¦6m����€r"<ÂRÒ¦m�����PN„GXIV!mÚ�����åDx„•¥Ò¦m�����PN„G¸“d!mÚ�����åDx„;‹Ò¦m�����PN„GX‹-¤­m#­6�����Øo„GÈ…¶´BÚ�����`¿!Ú6Ò i����€ý¶rxÄÄ”5©Á`0UH�����ì7z!ñ¶¡C×l!m­‰�����öár‘l}øá‡aˆD!m�����öár‘Õ6>ýôS i����°Ç‹ymƒBÚ�����ì/Â#äbQÛ 6�����û‰ð¹X¦mPH����€ýCx„\,Û6â…´ �����(>Â#äbÕ¶A!m�����öárq—¶¡´5@¢6�����ÅEx„\ܵmØBÚžç™{�����@‘!ë´ [H[‡²Q ����€b!<B.ÖmÒ���� ˜ Ú�����åDx„\Ð6�����('Â#ä‚¶ ˜¶;���y#<B.h�ÒplØ.Ö7���6ð¹ m�Hña»Xß���ØÂ#ä‚¶ džíb}��` Ú€4¶‹õ ��€M <B.¶Û6F2ì?‘¦÷:ã6€¢à{c»Xß���ØÂ#äb«mcx&íú¡¸6,JÞP|olë���›@x„\ܵmŒüçÒqÃçO¦ñü<iÖs_CZ½  _H7>ý¡|¿íþ» _KÛ½'u÷Hêá}žø#_Î:®8á|‡âv_È0ü7âŸ=׉žï¸§r>…�XŸîWØÖ7���6ð¹¸[Ûx#½æ=qŽ=¹]Éy÷XœÚé®'5{r5z%Þñ¡Ô]h®sÛ—öÁÁ¤§Qüvø ‚©·ÏL@t)ýö»Ro=¤CÜ:R¯Ý“fïoÑÿëKÏ¿1=˜œè=ÃçXßÛÅú��À&!wk¯Åsä Ý—[½é{âÖêÒîG‘ÏÄmðЉÔÚÒ×ç…Gêª'M'ùxÔ³(>´{òm»>sÿø}�¬M÷)lë���›@x„\Ü­mÜÈ…÷PœzGúÃÛ¨Ó’Þ•66’áà¯âu›Ñð³eãäí0”ŠÝ‹Â«pX›¹@¾øÞØ.Ö7���6ð¹¸sÛ0CÅôù5ǕΙ/Qtd†±Õ›Òí½”Á*=Ro×R†£ ¥¯=¦+�y*ò÷Æm¿-aµ%»NÕN3uØÌCEÁ÷ôÉï‡e ÒÓ?dðÇ��PQ„GÈÅÝÚ†Ö5ª§ÿˆà;ÒèžËht!½V#%<úAüï^ˆ“¸ýßÃÖšG÷§Oö®þ*Ó—rÖ?rL=$} øL/¢ÚJ�Ö¶õï ¤›_màÿZÝQíµ[sLºs Ç¤GˇV+à{z̶Ö-=U�@U!wk¶H¶þßN6È™<渖¯» þo®’fÃ$ÛS)~û¹'ŸŒëÅê' ÏÅkóØ÷h>•¾É>ÃÀkEÃâtª7å´o{?X—îWÛc‚âœàGEüÇ5ÚîÌí_¡ÇÓ ¶»¾«ÄôT%<��Ex„\Ü©mhèóÑ#ñ.4ıô­¹‘“*�Û—ÿ÷†ÖBó¤i‡»Ž{&ÃèáÌÈ—¾×÷ÐÈ¿’Á³Ž¸Î‘´¿Ôƒ×pŽ¥{~5ú½®N&˜ž ¥Ò<=3=³Ÿýü4zíð9w>µ€¾.²Üˆß÷¤í¾kþ°0g›‡b\pÞ÷è0¯uöd¼-÷T·WQÀ4Þ¶/Ç·×��v‹ð¹¸KÛëÔ[â ìõ褰ÕúJ.èú”BþßQ °†Ùè•xÇÁ ½% Ë÷‰ê'ùf8ìøö¸‡ã¹tN¬VZâêá{ß3=%oÄï},õà¹ÇÞ«àH6ßʵ–VÀ÷ôã0 ÿæosÓCÌ„I#ÿ™´4° Û–y¬þ±ô´«©Ý=Ï„˜ÎCñ.®ƒùþ,îxX4��Àþ"<B.îÔ6lÒðÇ»N iv{2ò+(‹Í~oÜŠ/¦¿ÒТäsGrÕk‰3u’¯5]iÔHwp>jC­I•ðh‡Â«oÚ!Íó¶¹nÏ·£º{áã™ÿ¿»ÌdÛ’ 5÷iòÇ��P„GKÉõåßÄ÷ý`ú›\^óK0©ºmÀ<›96h/Å¿ŠgÃç\£d¨3?<Šæ‡GfþØëe!<Ú¡©ðhÎ6Ÿ¹*[¼=Dma^;‹ÂEGêí³à™���ûðh)æG£ž¤Ä‹0cŒ�iò?6˜aAõ¦t{/e[Ï£Õ£(¸'ÍÞ›ðÑUÞ›ðh‡– f†-Æ·¯ù¿Ó’ÞUÊ“†/¤ÛüD<ïÑÒC��ŠŽðh)æ‡"áQ&NX�¤ÉýØöq¢áDöJ‹)áÑ…ÿB¾ ¯¨˜Å\~}�$‡0%†¡%Ã[oÉÔ½‰jâ¼ “²‹‹×òÝwù^Ý‘cñ|Ó¡ß¼mn®Üg®êykkéï�÷ße^1Ï^T_9xnç Üj›|üN¸  ï¡8SE¸��öáÑR~‘—O?×uƒéyúòs?¬}kßÿ½¼õÖ[òÍ7ߘ{�lBþdžÉUÕ÷Ïòu÷OÁÿMÁc½–)\ívžÏ-R8úhØÛ·ßÆo7¥ýÈþÁ ˜Çþ©«­EaÃÈ.÷ÐÜצw|†ÅlñeÇ}"gs®ÕégA†©«æÕåQ»™½Íµ‡Qüjzõ–´›u©7ŸJ?Üf±+±…7å´?3û‡&}~âýøÃ��Øg„GÈÅ>¶üQÞyçùôÓOÍ=�òÆ÷Æv±¾��° „GÈž¶_ýUÞ{ï½pÒÿÈßÛÅú��À&!ûÞ6´÷‘öBÒÞH�ò³³cÃÔ¡ÙɾÎ_¼F^Ê´ÄÕØÖ¡ï���äð¹(CÛÐúGZIë!ÈßÛÅú��À&!eiÒòÅ÷Æv±¾��° „GKÉõåßÄ÷ý`ú›\^çyaår(SÛ 6ÂŒíb}��`–¯aÁåvÓ”­mPHÈaÆv±¾��° „GK!<Z¤¬mc_ iGm“©ˆSÕ±¶‹õ ��€MXéWfu”þ"/Ÿ~ ®ëÓòôå/æ~Xenžç¾6'ŒÅÄvalë���›°Ò¯L~”"KÙÛÆóçÏ ]H›}³˜Ø.¬ƒmc}��`Vú•ÉRd©BÛСk ±6ûf1±]XÛÆú��À&¬ô+“¥ÈR•¶QÔBÚì›ÅÄv‰ÖÓv'¬ç矖Á``n��@­ô+“¥ÈR¥¶¡¡QÑ i³oÛei­³}(–üè±ÝÖ¸Ó¡Ê���˜ <B.ªØ6ŠTH›}³˜Ø.ûK÷oÝ~E/–|غvºÍu¢ç��À4£¥Œäúòoâû~0ýM.¯Gæ~XUmE)¤]Ý}³ØØ.ûˆGvÒÛ( ‰´‡Y|[ë��€i+ýBªîª¡ôÛuó£².íþÐÜ«Ê?¶‹PH›“bb»ì¯dx¤ÓãÇ Uë w§¡Ñ‡~8³uÒã9���¦-…ðh‘궈-¤­'#»8¹¬úú/*¶ËþúüóÏÍ1zÒýœ:HûK‹akП¶mí¤Çq���L#<ZÊ/òòéâºn0} O_þbî‡Uݶ1a iïâä’õ_Ll—ý•Õ+E'í™BMœý¤Çf=F§mW;ip��€i„GÈmcÂÒÞæÉåRëÿ¶/íƒô“¥p:hKÿµ'nÚcµ†4»= µÞ×kñ܃”y©7»Ò\-ÿ~·Ñ¬³â½ý‚×mŸ÷XÓïÐîKô2W2èu¥YwÌc‡â¶=éû7á£ÙŸ»&ŽÛ–/{óÙóé4y¿Åt~ì§yá‘Nºk/ì§´a‰vÚu ;��€""<B.hÓl!ím]îy©õÛ—ÎÉ©œÇ q2|!Ý“'Q˜3:—nÉ…$7âŸ=׉‡8×2è>˜ €Fþs鸇R«w¤¯ï±ìûÍeƒœ†´z2)U¯ï$îytßèBz­FðÞM9íûá}#ÿLN›zßÇÒH&”r=ñÃÛ#zÒÕù4lê¾È\>5ºðä¤Õ-Ä~±¿²Â#-®¬ÁµöŸüøÃf¶1½Ê���f!´YÛ,¤½ÔúýM?ØØ#æh@ôÝ ñÃ$&ù˜J†.·â{'3áÊm¿-µñüàÎ¥ßožàyÇGâJÍy(Þ… ôýÿ$®÷:øÿH®z-qj÷¤Ù{=l Ϥ]wÄ9öä"|¯är£WÁûïQ{ ÝÁupGúò­Šýb%ã¿û»¿ f£<4ü‡ø‡™Hô(��˜Ex„\Ð6Òm«öêë?- ²R‚žþSiÖb=fÕIOÓóhʼ÷›'xÞÉŸ¥™ âáQôÚ5§%½«äûÚáo6ÊÆ”cz3¥„GD5¿J<o>ö‹ýeÃ#ý÷ûï¿{£hL£rÐp_·¯­O§ÛX·/û,��@º•~%ñ£ YhÙ¶QH{õõ¿8<Òלš]Œ³®$ç‡4Ik†G·#ö;R×?Š…G¶¶ÒL ¤ìç´WIÌ ~TïÉiê°´ŒåK}lúì'í•’¾¤AõpÊAǺãôX¼���Â#ä‚¶±˜ž”è_¶7QOcõõ¿8<š<v%ƒgqZ¢çO¼gŽÖúZÚZóhjx™µnx¤ÿ¿’óî±8µûÒî¿™ ¦Â-kÍðˆžGˆÑ}Wka¿é±XÃ#���,ð¹ m,gS…´7)S@z¤„+Ñ +à³Ì¾náQÀÖ&rŽ¥ýÉñÃÖìç6u˜Ö¶vì壡ö á#Éáj���XárAÛXžž´ä]H{{á‘-J=?<ŠzïÄåôŠgÇŽ#;È¿`ö¸×áÒipDï£ý•6\ ���‹!´Õä]H{åõo.Ç?ò2/Õ_‹Þ½”ýøRýá°²ËèNkÞûͣϻÿQ¢G‘­dÃ#½Ë\ªßq¥sv÷Kõ{¯Âçf]ª?˜Yžµ?’Nrù2°_”“†GZ`û…áj���wGx„\Ð6V—g!í•Ö¿©í£Ï §x@’|l<9Rov¥7ÐèÇ K›¯Þ”no ÑÙŒyï7ÏÔóìp9ëRúí“ðH|é{í(ä Ÿs(nÛ“þ88ÊúܺlŸÉWý(tš»|:¥ÖVJ§ó£|´÷‘¿Ø W��XárAÛ¸»< i³þ7ËUÒIÿ¿lo1¶K9éößTñ{lÃÕ���ÖCx„\Ð6Ö£„®Cý÷.XÿÛ¡C•´Ç‰z"º(Db»����(Â#ä‚¶±¾u iïåú·—Ø>{Ú´zqííÑ'ºôsê¿?ÿü³ydš>����ûŽð¹ mäCCˆE…´õþäc¬ÿÝÐí¥á‘†~?žÆÄv���P„GÈm#? i‘UH[Êäð6Öÿné6³µ«4ø³Û‡í���   ÚFþ>ÿü󙢼zŸ®ëäå¦YÿÅ¡Á‘-®­Û%«����ì Â#ä‚¶±ñBÚöÿvЇJ¬ÿâÑâÚº]–-®=0H¯Û”ºë‰oîÂëýYÛ‡õ��°3„GÈmcstèÚÿøÇpǧxamÖ1évY¶¸6ŠîZÝÑþ·Lˆ1<“vó+ÂŽµ ¥ß®/¿Þ��°„GÈmcs4<úû¿ÿûèä)1Ù Bÿâ‰o—Eŵ±L±0ĸ æ»OØ‘›×⹬O��€"<B.h›¡C4lÐõ›6ép(¥ÿGñ¤m—¬âÚ(ª+x-©ë>ç¼+îÑá$Äž‹×l˜ýÑ‘zë™ø£+9ï‹Þ§Ó‰xþÏ“×Щþ±ôü›ðÕ±Œxx뉮Û[ùÏ¥ãÛEïsŽ¥{~›ç@\ïµÈm_Ú±Û���X árAÛÈŸ† Z;:JŸ´(³Òÿ£xm—xqmý?u‘Šf$Ã~Gêa q%#ÿ™´êŽ 1FrÕk‰ã´¤wu-ÞCqj¤;¸ž—è¡tÕ“¦sOš½72ºðäØq¤Ñ=^Ë™„Gþ™œ6O¤Õ»ˆÖŸ¬ß7·M¯p›ü÷0Ä;8žÎxl£¦œx¯Xï���w@x„\Ð6ò§Ãš´gŠ®Ûy“-¤âYv»hqmÝÖ×.š7Òk¾ zæ [ó=qkui÷‡ÁyÃÛ¢ ä Ý—[s1áQýHÜÆIäY·ý¶ÄއÑd¶CÚ™@ot.ÝûIïŠè��à. ÚÆfi¤¡BZ˜dïCñ¬º](®]0áP§ø0§”PH¯Àæ}&Mí‘47<º’AÏ“®æFx´ ½]—ºs(ÇãÞC·â{'ÁúŒ†¯ÍŠŠœ;Íž\ºr?øw;��`„GÈmc»ÒÂ$Ï]· ŵ B{«4œ0|ˆB‡x(4’áù©¸NCšÝ^°¾Ìîy4|!]÷žÔ›]é ^ÐóhevØÚ¿É™4ÃUÔó(˜f4èJÃ9’æÁ”1���#<B.h»e$¦âMë ¸ö®Ù:®tÎ|¹µ5tÛº]ñ4 jte0º¿÷±ÔS£ ÿ…ü¿ÞÇr`ê!ÙºI„G«˜Ô<òG¯Ä;>”Z½#ýá(XÕZó(Ø&ã"äZ‹ê39 kO)zxo2?���î„ð¹ mì뿘òÜ.×Þ‘øÕê-i7ëRo>•¾mz÷k¸ôuW>þ︧r>¼6aÒ¡¸çâ_iÏ#½˜ÞþRºÜ3WcÕb&ˆÓõLíž|;¾­aÝ• ž6¨÷5¤yz&þ8'Ò0é#¹Or��€µ!´ÝbýÓ&¶ ŵUhÝ£ÌUð���pW„GÈmc·XÿÅ´ÉíBqm`±Ñ…'Ç÷uh¡¹���wBx„\Ð6v‹õ_LÛØ.×’t¨ZKœ`ÿsÜ'rÖB��À: ÚÆn±þ‹i›Û…âÚ����6…ð¹ mì뿘vµ]’ŵ���`„GÈmc·XÿÅ´ëíb‹k���À: ÚÆn±þ‹‰í†æG‡e†��ìárAÛØ-Ö1•»\J¿ýH<ÿÖÜF’öþÒáƒXÏ?þÖó⪂���»Ax„\Ð6v‹õ_LåÞ.#ö;R¯-@í©õ½÷Þ{òÍ7ߘ[���Ø6Â#ä‚¶±[Õ^ÿb<‘¦÷ÚÜ.ŽÂm—á@žµ]qêGâÖàóiðsÜíI3¼]“Z½)§}?X«Æð\¼f#z¬Öæé™ø£`ŸŸŠëè}:ˆ[Àõ_¶€9î†áj���»Gx„\Ð6v«Òëx&íúa!Ëbm—¡ôÛõð3Õêé£xhtáɱÓVïBF£ éµRsŠwq<øJ¼ã{Ro=t#~ïc©×åØ{†K·ý¶Ðóh) s Ëb¸��@1¬11eMØb­ÿñûOÇ=Y÷‰œù7ÑC©½XnÅ÷N¢ûÚÒ¿…®'¾\ÉàYG\çHÚ_ê¿Áýαtϯ‚×{!]÷мž¿8ô3Ëé5ïÅÖÓµ º¤ÖèÊÀv5ºêIÓq¤Ñ=—ÛAWµÒ\›ÍóÍü„GËÓ!WôžYÃÕ���Š3~ ŠRD=YîK»iz9rÐîËíÜ^,&ÄÃ#}•IÈñ: (4:·ûB†£sé6qš=¹ÒYoûÒ>(æ°©â…G&˜‡Gæv<< ×g-Üf×ẇGf~³–÷믿†=hè}´<†«��áPÅ )L”Òh4·‹é}4â!ÇH®z-qÆ!E"�!<ZA2<2ÛËiIïʤG±õm³{Ò콉K<Ÿðh5†|úé§ææa¸��@±%Pœ"NLDACV/–yáQ2¤H¼áÑ ’ÃÖlO1gºG˜ “ÂÞb‡R«,=ÿFFþ3iÕ߇IãírñZ¾û.Vd©´÷‘¶ ‘Å®��P,„G@ ®çQ|”1¿ áÑæ™õ|&¡„áý7âŸ=™\9­Þo üçÒוjHÓ;^É>¦a’3]×jÏÙõÃÄÄÄÄ”=�ª‡£?PEú!…D¦>QxÏéu¿n/;4M{&ý2uéøƒö™ü<5lmºhó$<úAüï^ï£ïY üÀÞ?›ÞfÚëHßC{!íZÛ禆«±/bÓªÔÆØŸ� š8ú%P¬r‰ž,öÊhy½X&WN;·óŸâ}ò®¸mO¾õ>–¨`v04¥ýhÒ{&ì}4¾¼¼+³bd��IDAT ÒÏX5?Þë¢ÐÛØfZ÷HëíZÛ禆«Uq_ÄvU©±?@5qôJ€rÅTÅí¢¡ˆöÑ«d=þÜÜ»?¶±Í4\Óu´ëÞGEkŸ›¼ºÇHlZ•Úû�TG ø!WLUÞ.½óÎ;á¤ÿ/Â0­elk›iH²ëÞGEjŸ›¾ºÇHlZ•Úû�TG ø!WLl‘ï¿ÿ> J4а¤è!Ò¶¶™ö>Ò`m—ŠÔ>7}u5öElZ•Úû�TG ø!WLl— K´Ö®ý·¨—«ßæ6ÓÀd—CûŠÒ>79\Íb_ĦU©±?@5qôJ€rÅÄv™¥¡‘†GÚ©ˆÅµ·¹Íìо])BûÜôp5‹}›V¥6Æþ�ÕÄÑ(~ÈÛ%›_+bqímo3 v ¡}ê¶ßäp5‹}›V¥6Æþ�ÕÄÑ(½ý!÷ûµ\þä‹ïÓO—rý»¹¿$ø½œ"×Þö6Ó7»ZÞ"´Oíy´ ì‹Ø´*µ1ö'�¨&Žþ@ ìí¹Û¾´já篴¥kî/ ~`¯¦ŵ9,'öElû� ì8ú%°·?äb—ŵ«´ÍXÖ‰÷Ò¦ƒGâ}q’þX½)ÝÞ@†á ½Ï=H™Ï‘z³+½ÁU8×â÷›sìzî}i÷/Íßwü:õà±èS‰\ɠוfÝ1ŠÛö¤ïߘdz>wM·-_.\¾h:h÷¥H_ú™ª¢JË �˜àè”ÀÞþûí¥<}ß× ¦÷ŸÊËßÌý%Áìõ좸6'€åT¨e½íKçäT·£àFŒƒá éž< ÜѠ+x(3òå¬ãŠ3â\Ë û`*�ùÏ¥ãJ­Þ‘¾¾Ç’ï7— ŠêKoFçÒmIwpmn_H¯ÕC®Ó¾/úŽ#ÿLN›z_ü¹Cé·ëRs=ñÃÛ#zÒÕù4lê¾0Òìò©Ñ…''­ž˜x¬ØŸ��eÇÑ(~ÈÛ%Û,®Í `9jYG“Á6öH„9r#þw/Ä×Ô% lâ=zaO q½×öŽ`¶“™på¶ß–ƒÚ‰x~pç²ï7OðYŽ\9rjâ{r1ž__ïOÑûÈH®z-qj÷¤Ù{=l Ϥ]wbÏM†GÆè•xLJÁöz`©ôå+"ö'�@ÙqôJ€rÅÄvÉߦ‹ksXNÅ]Öd˜“ F¾ôO›RŸêy4®Lzú˜žGSæ¼ß<Ág9iŸÉe¿¼ÿ¡{¯Â^EÓáQôÚ5§%½«äûš°h e„Gã�Ê‘F÷<¸•iÕü*ñ¼Ýc�”G ø!WLl—ÍÙTqmN�Ë©¸Ëº(<JÖú±¡Še•™ùlH“´Nx¤Ï¹”~û~ðú6ÀŠ…G¶>ÒL ¤ìç´aXVx0Ëí4uXZÆò¥¾Çné窊*-+�`‚£?Pü+&¶ËæÝ¥¸¶öXʺD<'€åTÜe]Åz ò¬­5â=’=s´vÐ×ÒÖšGÎCñ.bõ‰Bë†G­“4®©ôj6<jteìx4îÑó¨Pª´¬�€ Žþ@ ðC®˜Ø.Û³Jqm;ì-­·'€åTÜe]!<Raj'¦¤„+¨ØvÚÉrZ°ú8¬ôH>9ZfØš)|më0­3l­ ØŸ��eÇÑ(½ý!÷ûµ\þä‹ïÓO—rý»¹¿$ø½}‹ŠkëmÝ.:éãIUÚf,kÜ1<4óã¨÷N\>á‘Ú¾ðмÇ$ʱ`ö¸×áQUiY�ýØÛrv˜ƒž€ìÁÉÁªø½[iŵõÿa{3ÓçŸnæŽ,ÜffHÍä5ì‰sò±É õääÑcŽÛÏ\Æ|2œÇ>/˜Ü–Õñṳ̂Ïý²7N½•éé‘2Ïäõ³é¼sjYSž«“ãJÛë/¼Z˜Î[H& š y‚‡2/ÕïH½}fÖËœKõOÖ6æ¼ß<úYîÏ<ÇÖ?е {©þ`»tÎî~©þɰ¼ôKõGCø>’Nrùv¨°mlª´¬�€ Žþ@ ìí9Â#l-®ýÇ?þ1jk‰)Þ;Io/dzQ¤ Ï OøÇ½&nÄï},õZCš§gQÀ1¾bVCZ½ s‚lž7U yþɵÛ}‘ŒügÒ ?[Z½›iû·¬ö¹&P±AÅTØn©eݶd87>feá¬ßnOáUÔÒÃÃpª7¥;ÞŒÌ÷›'ñYfBmA°á‘ÒíîµÅuì{Û°íIe}nGêÍÏä«qØ8gùtJ­­´;ú™ª¢JË �˜àè”ÀÞþûí¥<}ß× ¦÷ŸÊËßÌý%Áìbyï½÷¢“ÎĤCÜlm½½˜ž3{E«ÑàTNl(rÕ“¦Ö…Éê±xÂûq½×Ñí™@ŰÃzÆïmNîÇ'õö³Å_+Ýþ-k |n¬7Žyß™ç&,·¬ÀÝU©±?@5qôJ€rÅÄv)- ­Û#k²´õÿK C‹øð!¥AIs:ÔI«ÿ¸í·å ÞûfÙ@eædÎ;< fY„G(¨*µ1ö'�¨&Žþ@ ðC®˜Ø.Åa/ç?oÒ¡múïrlšØp. 2îÛ¡4&‰×ƒ‰ CØÕ°–Tæ¹Q/Ü8ÇÒ=¿ žf.£žÒS(iÿ–ÕÞ¶CÙ®ä¼{<.eX~Y+(>|8eZ¹¸vE麪Š*-+�`‚£?Pü+&¶K1èeüu[,;-+ª¿cëíh/™äþ8İJFˆ“[ b{ýÄ–!V¬xžý[ÖÉíÉòŠÛy¾¿³QUjcìO�PMýà‡\1±]ŠA‡¬iÑlý79%­´ÍìeÓýo¤×<‰…'ó‡rEaL,@Y:PY4lmyû·¬ð¹‰Ë×/}›V¥6Æþ�ÕÄÑ(~ÈÛeÿ¬¶Íl¸ñ@>{öTNZ‰bѦÏFŠHŸ»¥ð¨Ë <BAU©±?@5qôJ`oÈý~-—?ùâûÁôÓ¥\ÿnî/ ~`·™-ØœÚëÆ^¾>6´*§Ë×O.Mo.ÕŸr)ýEöoYísÓ{8ÍþˆM«Rc€jâè”ÀÞþ‹j½Cω¢ãöþY}›¥“žr#~ß“vXÄ:jëŽÛ¯ok¥Ô,rÿYþÕ=˜¾/œ©7?“¯ÆÏ}-ÞÔ|«õÈÑç¬f—Ë:ûÜU 9ëüs ò¬íŸ×XYCéRÌ<wZtµ9ó¹Çǹ+x-©ë}¶Ø¹š*^¾=oû–“q¯­¸à5ŸuÄu&…Ë£÷Î(d>eö¹S2>×ÈïËWݦԧŽßfÝ™eNßN:ÏG)ï¥Áá×Az{Ò3-|ïxOµ,)ÏK[†‘/g`Û…÷5¤éŸL-³ Ót¾ª¨Ò²�&8ú%°·?äP0œ�–ÓüeË„ES?w6À¹‘ ï¡8õ¥ç_˰ߑz|hžš3</+<š„TË„EÓ>75À‰…—©Çïèñ•£ñwÂ2aQ¢çÎ,ƒöÚûÀFöÊ}÷ƒu~iWó–aû� ì8ú%°·?ä~{)OßwÅuƒéý§òò7sIð{ÿpXN‹—U‹€ß»Cx¤Lˆ²lx?˜ ÛKÞVw´çMT—jõð(xUÓ³k•ðHÍ«¹u‡ðH…Ã#ï©™zZ1ÉeÖûi篓]¦(üôç%<JÃw�TG ø!WLl—ýà `9-^VÓƒÈ@:Ëk»rhC;4í¨-_šaNŽ{*çC{âáQ¬'’ bf£™`hú½Cw ô±Ø{iÍ)¯-î¡ væ.Ãtx4é‰d–m†GSïe‡B¾kÖ…^w$í/õßà3ƇýÅãðut‚I×mæ2XiŸ—ð(M•–�0ÁÑ(~ÈÛeÿpXN‹—5àL (4ˆB&¨˜.Ü= .ü39mžLO†GÑíÒ\‡·ÇïÝèÊÀ>)‡ðh�…Á΢eˆ…G¯¥Ú·õ,*|®v h]LB­Cq»/dhz ¯ò7~¿ÿTšî#éùf8à¢ð(|- © 0lmøBºaí0³œæî ;Ì.�Æ-z|=¹.+�`opôJ€rÅÄvÙ?UÚf,kœ Wƽ’¡AbXÛTa£ú‘¸“I/#=<šÜÞTxÜJ;ó–Á†GuqÝwg‹ÌàeÓ=Së"94/±ÝÂy©»GÒH†&sÃ#}ݤÑ>›^î…G“̆æ+\óxZ;Yôøšò\V�Àþàè”�?䊉í²ª´ÍXÖ¸EáQâñ© „Go×¥îʱ÷jR»(0ÍCÉ÷l$<š· 6<º'õú8Çž\L/DFð²íðHŽ/cb™Lxôvýmq’EÈ3—!0<“NóiJÝ„Gô<�G ø!WLl—ýS¥mƲÆ%œ;„Gî¿É™^E-^ƒ'0% d'o«…G'òåÙrì$B‹½ ‚ç~ùWñާƒ“¬eР¦ùé§,; Žï6�¨&Žþ@ è9¦bNØ/UÚf,kœ €ìбd-ä¯ðŠ`Ž |lx<6z†µzgFÌ„GãKõë<×â÷>ÎåRýÁ#&�²õ”ôRô¤æ´¤w¥ŸeÞ2LÂ#Ïÿ%ú|ñËÖg†Gæ=ò Lï!¦M×fJ[3Ëd·› ‚Ï9ºðä8X¾ºŠ–¶ apÔžÔEÒ;§‘¯ÆÛ‚ð( ßm�PMý�08,§ùËjz¯óètÐîÉ·ón?jË£q=™éizÞ(ü™ #_ÎÌÏjõ–xƒé:Iw ¢÷1Ÿå -ß~¿Ý”ö£¬e8îƒÌç†ÁIjx4½Þì•Ú&î…ïc_/Xþo{S·µ›™ËT{àŠ›õ\ ·®Ë0fŸM“ÀP¥©Ò²�&8ú�`pXN»\ÖÔðh‘;õ<Ú ÌžGóܱçÑ¦ä¾ ÓØŸ��eÇÑ��ƒÀr"<ZááQ á�TG�� N�ËiÓËúóÏ?‹çyæÖ´äp²ÙÚ@1Éa[[ ôó?þÜÜJ±ÄçšHÜ|x´ðó«Ü—ašÎWUZV�ÀG�� N�ËiS˪¡Å§Ÿ~¾þçŸnîÝ/¿þú«¼÷Þ{{ûù•n‡·Þzkq€´AìO�€²ãè�€Á `9彬ñÐHÿÕÛûêÃ?”Ç›[ûëÇ ·Ç`00÷lû� ì8ú�`pXNy-k™B#¥Ë ½Ž´÷QhÏ#í¤AÒ¶±?�ÊŽ£?��'€å´î²–-4R6h)òÄií©]bìO�€²ãè�€Á `9ÝuYË)Úµ«:Û`{Tmû� ì8ú�`pXN«.kYC#¥Ñ®‹Koš-®Ûn[ØŸ��eÇÑ��ƒÀrZvYË)ªèЮ²Óe}çwä›o¾1÷lû� ì8ú�`pXN‹–µì¡‘¥WVÛfoœ]Ûf/+ö'�@Ùqô�ÀГ"&&&&¦ù� z8ú�€JÑ!M:tK{¥”¹§‘¥C·tY·}²¢(ë•å��Ø&Â#��P U Ô÷ß.oY¯¬¶,ÝÞ»¸„?��eAx��J­Š¡‘ªÂ•ÕVñøñãp��«#<��¥TÕÐHé²oójcû@×ɶ/á�@Y�€R‰‡Fz…±*Ù"$I§"½±��Xá��(…dh4 Ì#Õbëû ÎWÕö�À]�€½Fh4¡ÃÔt¸š®d³W`«z!q��–Ex��ö¡Ñ4‘ÕhÛ!h�`9„G��`/��lá��ØK„F���ÛAx�����€L„G������ÈDx�����€L„G�� ›ï‰[«Imj:·íIß¿13!Ým°úN¦ÖÝA»Ü»¤á@žµ]q\O|s×”Û¾´Äõ^7FÁì_KÛ}ÛÜN^«×mJ=ëµJçµxîÁÔº¦†4OÏÄ™Ù2-XŸÛ~[j'âùºE¯dð¬#®coÇékõ¤Û|7óµ��(:Â#��0ßè\º Ç7â÷>–zp"î{r±ð$<ÁÉwÿ‰4÷ôÄ{4èJ£vOš½7æže ¥ß®GÇ2O$i8bä¸kt,ÿZ¥a–û -}ÍsF¾œu\qj‡rì½ ZÕs×ç¬(HÒùSÂ#³ÿ,ûZ��á��X êÅ1é5óFzÍ{é'Ê›0<“výpO¼ÃÞ[ui÷‡æŽe™õ¼làsÕ“¦“P˜0ªRá‘éùeÃ#ezÒ-ÕlîúL³·ÄÉÚ'¦z‰�°��Àó£ŸeàµÂžHaÏ–úÇÒ ‡³Ùa?÷¤îEkp1îý¡óŠÛ}!Ãñ¼oËQûT:îáä±á 醷Íëïcø±0<º¿ÿTšuíRÇ}"gá:´Ïgò¬{®3Ç=•ó¡ö™ÑçxÁ:{wòº3ÅÕdÛ8ïŠ{¬Ç*‡GÃsñš`]K÷ü*šEm²Ú4m8hwçѰ6»>»_™6hÛ«yŽ×÷pLMc Ø÷ÓíväÊÑÒA��ÅCx��ˆÂ£(¸¸ ΉOÅu‚íFWÿ]{gDC²Fž;Ž4ºç2ûq¤Þ>‹N¸åRúíw¥ÞzœœëP´NpÂ<÷ëÿ0óÚpä—h¸‘Ó’ÞUp¿ï½6„GÑz»<~izYÙ!‚&<2aÇÔð·ñú½îÔz2ë×>×&- §ª…¡N‡)µºnäÂ{(N½#}mÛa›4ëÔ¬ã´69¦ëÕ4i[¿ož{m†z�öá��X`¶øð¤wL\¢‡RrØÏ8ð˜žÂùóNˆ—:<2uyRCÄP³äzH¾îÔãÚ;ìí(È ¬ö°µ³WÐí6Y§+¬Gt˜Þ¶ë{:š7õxØžHwpmÜï6 �¨<Â#��°@rØZÒ• zžtÍñ|©aGÆ ô¼õ}?ñžÍ uÖfÖYµÃ£þ­éaT3=¼¬ym+ñØ*áÑô¼áƒÙï�À <�� Ì ÂšD÷¤ÞìJoðbz¾ä sx»&N³'±Š3‘y'êû~â ϤÓþO9ÓžG:0Þ#&´Fxd®ð5Y×U‚›£WâJ-¢fVv¸žb=´bæµÉáÑÌöö½ �*ð��Ì7DLD'ÌÑð[WgÍ\­*ªS«5¤Õ»ˆNÖ¯þ*ÓàÄ}j^{å*3ìg|âýƒøß½ˆŠï‘ÔKõ‡Å”ß —7z<VŒY‡œu¿?yµµp™šRÁÍ™× Ã$û¸Y׎+3_nmÍ#*X™�É ´µ³Q}©ø°K;O¬ˆöÕÿ#ݯ‚v8¯Mμ¶ “ìã¦vUô>CSóH‡i �öá��ȱE±ž¡ñÕÐô*U_J÷ƒ{щø‹g2©oë»UXL»ùTú¯ŸOÍû¨Ý”°q8ˆwñJz-½JV„ìOvd»,ÉÉ7âŸ=‰Šëýaqõ2ó<jË£øúü¶7½~“·u}Ç×u½%íf=Zß3µªÊ(Y§Ëö²Ã×¢ûàsê €¦@öåYv› öo¿ÕÐ4ûvÿV¯ è™+èíüÑ'Ò<hHóôlïÂO��á������2����� á������2����� á������2����� á�� òá‡Ê[o½%ÏŸ?7÷b“t}úé§æöͯ¿þ*ï½÷Û�Pj„G��`*4ò</<!Ææià Áë{¿éö{çwä›o¾1÷��P.„G��T¡ÑîhРëu^?þø#=ö��¥Ex�@íÖ÷ß®{ Pº_±]�eDx�@…í=TÊM·«nߟþÙÜ�Àþ#<� ŠA×;µqÊZV�€²!<� ÄŠ…«rUÇãÇà �€2 <� „vGëé”d{£ tŸË uè"½Ï��û„ð�€Ñ“RB£ÝÒ° V«MÕ4Ò @‡«±=ªEëé¾o ¶X:A"�`Ÿ�Pp-*¾«khAh´{ix¤“n[@™+pU“-®½µ-ض¡û)�`_�P`ÚKÁ†iŠE·G<Ðéøƒü×ý—™U¤¡‘¶ƒdÛHÞ�@�PPi(dO4㽊)Ù³ÄN\y«ºt»ë¾šÖ.>ÿüs3��ÅFx�@Aií¢ø‰¦ž€[VH “gcèZµèþ©ÁaZ{ÐI÷q��öá��¤ÁPÚɦNPS¼ÞQÚ¤¡_¼ÊK·ó¢ö ��û€o,�� F{§¤dêô/ÿò/f.†iÛÌNúiÑdTG¼§`Z›Ð‰6�Ø„G��ˆö(ZÔ[ž+Å”VïÈ/d›U›î×ß|óMê¾­í�€¢#<� @?~<sr™œ´'Š'^ïHëÜh˜$éÖâǫ̃{�Ø„G��DÖ•ºÒ&z²ö*ÑðaHX†Ò¦û3��EÇ·��¡µŽ4xXf¢`vñèá.Ø—�û€ð������™������‰ð������™������‰ð������™������‰ð������™������‰ð������™��¸³¡ôÛu©ÕjÁäH½}Üc½Ï=0¥L®'þ2ó´¥ÎhÜŠïLÍsÐî÷be·}iØõx_ÚýKó@À÷Ä­ãéé@\ïõó¥l›äü3Ûûà¶ß–» ëéGö‘™ýsz:Ï× ¾h¾zÐ'Gö{�À®�°6�5¤Õ»{)r-ƒî‘4ºçÑ}W=i:ÎäöXb¾Ñ¹tŽ8Íž\…Ï ºÒ¨Ý“fï¹wfúÇÒóoÌp;Iwp­7‚Í×§öÀÜŽ™šo‰m³ÄöÅ>°Ž#õÖ3ñc;uØ]„÷½‘^óžÔÆ·'¦çÓãÀ©9-é]%f4Øï�»Bx�ÀÚ^‹w|$îÑapâ÷P¼ @èÉåŸ&½Tž.±^+c‰ùL5·gAx${'àN‚uy|äÊ‘SçØ“‹ñy»n‡?™ž"ºù´·‰í97=ßâm³ÄöÅÐýö9rß§v(ÇÞ«I(¬m`Ü»ÐôPߎ™šÏ„Qóz£±ß�v„ð�€µ½ïäÏÒ¿<“v݉„G{!X—'í3¹ìw¤>aÝo? ¶óké·ïOÇS¡á�`ÿ�°6ÝŽd¶þáÑ^ÖåI¸®/£`\ÿˆðóØð(ØÎÃ(8×?š …��ûð�€µÙðHÿ%çÝcqÂ�âMp®GxTxÁºŒÂ£Àð…tÝC¼"<±ðHF2<?×1ÁñT(Dx�Ø„G��¬-F¯Ä;ÖúGÇÒþä˜ð¨è‚u9£ OŽÃúGä“#Â#d‰‡GêF.¼‡Qý£öÇrDx�(Â#��Ö–6€˜º¬»¹ÊÖlh Wcz;!Ì .¥ßy]‰)ë$rx&ö_¹Š×*áÑ$Ðí7 ‹¢+]¥¬s½ŠÞaì„á¶Ybûb$〠޵íŒC!sµ™P(º‚ßá¸d…G:ö3iëÖØï�;Bx�Àº4ºÿQâ¤ßÖ?Š÷4²—âv¥sæGE™G¾ôO›R·µRÂûÒ.å~%¯%usBšzÉîá¹xÍwSz6a]—÷g.›oëÅzÙíâ>‘3sIÿ‘&§Íû¦ÆUdá¶Ybûbèþ|2{Ù|[ÿ(¶-£6q(nç¹¹¤ÿøý§Ò¬¿+Q}-•v©þà82ð‚ù†íý�°+„G��¬#ì  =TtJöÐ�âÁôI ‹ÆÏq¤Þ|*}FL¿^rr¤Ñ}!Ú;!õqHwp½0==ìºKöøC€è¤ÝŠÂ¢Fl}7¤yzfÄëÍLÁ¶ùoOlßó(TDÁE½Çì¶›îEf‚㩠ІEÎd{×›rÚ7!râõf¦Æ_ä¿ý;û=�`w������‰ð������™������‰ð������™������‰ð������™������‰ð������™������‰ð������™������‰ð������™������‰ð������™������‰ð������™������Aäÿr@*‚Qcû"����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-8v.png��������������������������������������������0000664�0000000�0000000�00000055466�15030617045�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��£��…���É‚úÞ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ZËIDATx^í½ïk$Ù}ﯿ"¤ÁàÊÃñ£Á»OÒ_ ‚0<OæÁWN† ,ÆXà]Ø0àö›t˜ ,èDk<xh2Äܰ;D˜\†»7³É]ŒÐͲÆŠ‚11gƒ8ßzŸ:§út©ZýC]]¿^/(ÔêÕÕuNóªÏùµf����� ���€Â@F��� 0Q����( d���� ���€Â@F��� 0Q����( d�–¯~õ+sttd·O>ùÄ ƒdû«¿ú+óƒü`¡íþýûcûÒ¾ý÷è;� Ú £�0’¿Ï>ûÌ áG}dEñ;ßùŽY[[³Û·¿ýíD %Ÿ¡@>þ<Èy7}6Ü—ÿîô÷ëqøÝ:V}��Ê 2 �c(ÚèPr'É eÏK¡—ŲàÇGeCYýæ7¿iÿ—Èê·Q�(È(@ƒù¯ÿú/AôÑÆ0Â飋u·×¯_'Q]5û{ÁUï�€ÕƒŒ4ɧÄKMÙ¡yñÔëMA¿U‘TEUôTçDç9�XÈ(@ÍQdSÂ囬½|–©‰½,è\©™_ÑS+3EN9W��ùŒ.›}Óm­™µÎÀœ¸§Æyeõ¨2»k'oÝs“¸ˆv·cZkë¦3xåž['Óé<6¿ÜŽ%‡ýCi‘TI¢éóѾ¦E>—ï s¨È©?��°<Ñy;ì™õ‰2ñvhzë³È¨83ÃÞ­eñœ ÷Lxÿ{v`~Ôa®þ–yö/Rß•@ÍÊ¡€ê1u–G(øSÎ/�Àr@F¤0½xi[·MÏŠâ¹9¼knô†Ë•ѱ£þ¾Ï£"w4)çSs5å+ ˆ:�,2z%çæäàé¨I~Ío±`Ždôœ L·Ý²¯·:ÌÁɹ“Ñ ³ÝÝ4-ûüž9<ûÊœìß3m·¯ø¹‹è{²eñâä™Ùqû]km™þáKû¾ø8~Ç´;›É¾ü¶þÁ#óxëÓù‹šŽž³Ç¨ýo˜öövü[ì¾^›Û|}¦÷©y•4åÿsðÑÿ?ýßæ`·cCü¹7îè H$>ê÷‰ Oúf€O��óŒ^Éi$f·ÍFÿÐ\\šþÆ;¦»ÿûJ"£öù›fkð2z"Š7L«»oÞX½ezÃSÛ”Þkß—MÛïÔGN§E.cö»íøu»ß¶‹ZêsíH&'2=ce3”ÑÞAôH¿)’Íäyÿyõs½™úŽ7qÖö®žýÖõïÄ¿ÍDG£›¢ åBÑÒ0mR�€Ù@F§F'G¢Ȩ ­Ý1ý£¯ôîXÞÖ{føUØLË`,µ'føô¡‹¤N“Ñss2ü™éw7â(å 2?iíßûFß]„ŸÉ’ÑÓ$zšlúmW÷ €HK(¢S^”6¾ Ÿ´�˜2z%ŠHÞqâ7Îxdt},꘎ŒÆB«>˜_F¯ß6ígæä<-«iÕ ¢]Ónß3û'¯G¯/,£.2zqlöwn¹ã?c7ŒÞ^ŠŒêb ‡Õ6Ç#6ÕBiço $§t£��Ƚ’x€í/é¶ÖÖÀ+ÿ¿IÝiVŸQE5“þ¡¦;8ŒÔÏï¯eÚÝ÷£ÏHbŸ›£$úè%3æ"úž-õñlo›ž¢£j.ó¥í °Öz× ŽÏÜþn˜ÍÎmó;á>lÄÖãМ'^}÷ÀÙ¾ªNx£÷´:ÛfÛ¾~ÇôGßñêßF}F×¢ãÝzlŽôQÈM!¤‘ÛêHs|uÑ „æ-Õ …æ0�€qÑ«°QÄ{.z©ÿ_šÁ{1ÈEм¼hpÌòpÑrw“â»\Ø(ð?äƒn(üÍn�€ÈèUœší¯WޭήyvÄðÈ ‹$T2šK³®íVöWŽ8š~h.wFe£4õýI—{£�P]Q€’àû†æ*)¶?p=;0»Ý»)Æ`Uø›õ)¥/)�4…d4iæckÌùá›å5_hî+ú„2zþÒ v>4C/¢'Aÿàxku?4m—¶½mz}õÖÌ¿5gG›^çFü;_î;.žõá¥[âVï}eö»7ã÷mv̦çvÇì¿A~•îJsm)�4™…ešé^HÔp%B’Èè¶yøðGf/YÄÀMK¶vÃl ¾0Ƕo©šòÏãç[mÓy7åÇëZvF†SÛß4˜yÁ è©“6‰¾ÚÁt7L§ÿyð~:xU_R–€¦r-½wï[6¥· Ë˨ddex]Û0;ûÇ‘‚z¼ŒFzôÜô4³‚`Æ‹Œ¢™šîìf<³ƒ[aì}‘€¼ŒgˆHpûµïy<&2¢< f{„�šÈµeêé½| QaWþŠ£šã±I-k;jz_kuÌîÁ‰[y¬¬¼¥ÅÖÍZç‰9:Ü3¿/ÿ¾Î=ÓëÞ6ïøE¼¼nôÍᱦósòB/¤4Ù@Ó@Fa*¤÷òQQ5ͯœ“ÙÒ\¹—“N%¢í®é~n碽8꛵›É2¸ãsïn˜îÞ9Ѿ¬äªÿèóéþƒè3‘tvšáéé­ÇóàÚùuµàAщHHéC �M…©ÞËEŸ—K8Ü ŠvýÜ ú]ÓN"›×#–Ù`)˜ŠnRV1�(d¦Bz/õ Ôù,WßÀHF˜ŽFºGÇ6¾J×¢ŒO°?jæ‡iè&EÍõZ �  £0Ò{y(ê¥ùD®B"JÿQ�h È(LeZzkiCš§£Éì5…À,pã�M…©LJoEmTYêuÿ˜Œú‰²$ÌŠ_¥‰è(�Ôd¦’No/¡ª(½ˆ"£W£>¢:_�ó è(70�PwV#£v/-nõ•dòí`5–ä}áT2P4az«bLK¨ßɩʶêhÓG}d79sKˆ†ùè†éì>§JÊm~tÆ|¨ÿØ<|êGþ¿1GƒÓŽ^Ó4S'çîy>?0];©¿›KÕ½RFt½i0�€:³5_Å«³ŒMsj†ýG£u±-~.SÁ”‰0½Õç1–ƒË›¢8UÙ& užÛ·¾õ-{!$¾æ×{ÃèQ$Šv"ýp¹PM²3)7â¥Hau3ÜÝÕçÝTR­wÍàøÌ·ºžÅo'ç¿i¶/Í[ík½Ü«Aé¦Iy� Î¬HF}ÄW2‘ˆîÞ3ýd]lÏhµ–£‰õC\amí0U̪H§·ˆã%Ëo0ÎÏ$BõSLi}û¯Ü롌ÆåÃäi¢â›Þx_jiI-=jeÕ¯™o÷Ý.}+ ëÖ@Ý)@F_›ãÁfwxê^‹8ûÜô}³ÛZËlô#åLÏ}UP‡_šáž&äÖÿŠžþöò{’J –ŤôNK)d#‘(~½¿o˜N÷ݸÛ®Ää&¼wiØêì™C»jRôÿú¶yøá–ié3f;ñçûŸÛå</Nž›]wÝÚÏ…­cMìá–nõç#öÝ{löBÕ dÔ®òtÕdüú®üˆ°Ç0þ}o‡=³žÜìêý·®Ø_9P$_]K��êÊŠeôÓ}ø¡éíÅ•™åâ¥lEZ{× ž˜Žë/7ÇiÝ럛¡šømâ+®X:³ßãö KcZz{)…l$ŠÂ±rædÒŠ]J ƒç¬´­Ý²7oöwL«µÝ žÆmdQQÊw‚ué£k{¡£Œ~l>Ä0d÷’å*õåŠÝNß B¹ÌøöwuæÄþ§ßÐ.½Œª¯±Ví�¨++–ÑôÚÔqåfô8^óÚ6«ý:n®O¿ã¢a3¾{|é=°læOo)—Œ†¨]œ˜áÓ‡ñ ¹´Òæš³³K×c t[Ò<.挌ÚÏž˜^;îÏ9ºŽµÒÛJ «»Aµ‚YÏfzÉ(ó@Y‘Œ:qTôslÀ’Ø´eúÏÆÍíªT|EÖyd†¶ Ñ®·‘׌?é=°tæOoQ3½æ-œLýMt£x;¾I<÷ÏÍ"£.2:vs¹ŒF z6Ü5m…õMõŒú×msþÇn¹RW†¸h§•M[ΜšÃþÖ„L·mÄ×–*ù�&A3=�ÔÉhT¡lm›ÁñåiVâÈhË´··­Œ¶ÚwÍÃqÓýÚ†ÙînF¯·M§»g†m6ôÞÎ=38<Ì|ϸìÂ2@F¯?‡Å4i¯ß1;.ª¹~Ï<yün| vß7Ýöºi¿ÿéfD5×;sÇ?Žäñ<è3ºÖj›­'Gs¶LŒ7³[!õÝvÜs£Í7ÏŸ›“á`4µ“¶v×ô÷\ן7VB[Ñó£©âïI„׎Ø>W©„ndQ�¨3+’Q¨2¤÷õaD4,Š¿þ��ê 2 S!½¯Öîg ÌËgŸ}VŽ.��9‚ŒÂTHïë#©`Ƙnb�  £0Ò{9HFéû³òúõk{íé/�@AFa*¤÷rÐô<¥˜â *¢¢Ú��ê2 S!½—ƒÖWtTMö�W¡ÁnDE )4RFí\‰ÑoÐïð[z˜äµdµ–?éöØÜ…~U¨ñýÅŸ}l~1ñ5­|Ýn˜Îîó`ÞÆ7æh°/ݘ_гC3èºeõY;W¤öµavöÝ´5áoróLÎ>'Ñë#ýæ7¿iÅ´xüÔjW-±¹|ºþΎ̳^ÇNÙçõ'¦ÿðcwm^D/âIû'N×4õT"4h‰‰î )4RF-ZůÄâÖÆOVnñ‚ŠhÄÅÑžÙêlšöت.zïû‘ખM*®ùßÛ3ÿøÓI¯=J–7Ÿÿp$‹vïÖ»fp|fW§º4·›ðÛ®HóVó3n¸‰ÿÝñÛÏúJW•|'Ù÷<Ô"½KÄýû÷íV”/ XŸ}žëÏÍ=J¤]ÿîƒøóö&1^¹é­–ΘÈ~úµT´â#è I £Qef+¶ÎÍ`9Ñ,•ø½gú‡/¢ŠoÓ®Iä_ÄÑÌP859÷‹6GG“^û<z>”Ñ蹃‘ŒÆëî{ÑL*茥 ãJxÃí3ÞWµÕãm³Ù¹mÖ;{æÐ.€Œ–EE%’Žâ)^F¯¾þ\ô6÷¦/ñ9õTž?n#ç4Ï@“È]F}“\«³m¶m3Z­»8yfvìZØkÑsZþïØ5Ͻcºwí )­Î‡æÙà=×´æ¤êâÄìºæº±eEª‰/Ù2š!U!¹×[žy’¬à"2dTâwwÏ]¨bÛÌ^L8Sd¾æ¾Ç‡–8|löüïÑoÙ}ý|j]oûœ—Wýk{ÌÚï{Ñw½ŠöqÛ´{ÑÞÑ2¡>’ÉÇê5Uºq2zqlöwÔåÃåÇþçÑ«~E£èÿî=Ó¾IV0Ò5½Ó ž%ëÏ-%<vc8ŽÍ÷ýèÚÔÁïI˜áZ*ê¡óÁâ�Ð4r—Q_AÅ2ùë¨bi§* U6î9[I´by²ëл Ñ>–Ƚ‰£$víé߯MÔ‹6·ÙÈÌfÿS­…6g‹Ë2ª&ú»®2³‘˜¤ò ÈNGækñ÷¬÷>6ŸF¨mnOö™ªTí9È’Qÿœ‹ Éhô]g¦×ÖZÜSd´L¬ZHGë¶e›ªã¼’%oA^R»¡(âW.š¯÷ß±‘Ç‹“ÏÍ‹Eû^Î|ý]–Ññ>§wÍãÁûî&LåI ×RÁø¾Ä«½9�(+“Ѹ‰,¬´ÆôÏLß¾q‘“PØ2ŸÆ•TRE[Ò<'âï{Ýn"3ö³§ö˜ÆE0-£q3ßø>GÉ„ð˜Ód¾æe4:7Vã~oña\·™ÞɨÞfûÑÝ6MIiƱMA¿W £ËÇ iþƒUÂü2.j'Có´ß£§6ÿ¿1_ nž ú¦×{d†'_™³/†fÿÙÀô{»foÊãús×^ZXõùHD%”Uo¦—€ê<!¢�ÐT ’Ñ3gÃ]Ónß3û'¯G•áTõ‘Q}nÁˆŒ'© £ÇNãfIV†îõ-5ÑÛ#Túæï€ëÈhT¥Ûst=E²NmSiö�¦Íø8ì p�ÓHF%þ6¶ÀHz1_züHH5哿”Ìs”½ÍO™][Üõg¯ƒ[¶ùþ<éòá óª#¼†æeÞë¯Ý2­Î®y溱Øßâd4¾)ÓÖë¸ Á¤LW^KÅ ›ÝŒ°�4™ÜetÔ¤U6[ö³š^èƒ'}³ÕŠ··MOÑÑöÿˆþþ7÷z°­ß1;ëîqTy}F×ÖM{ëñåæò)Œ5óÙ ÑËš{.Üît¢ÊMƒèŽÊ¸×}…ieÓ=—Že¾6E²•¼5lŸ³Çåûë©_ÝøÔ7‰¸‘È£i¡Âýòiûn!£%ÅjÒ–ßà•Q~ZkÝ6[½§æà§¾¥!Ê+Ÿ»üÝÔô¶M{í–é}ú±Ù½ëû{»¾Ý»Û¦»í¦KrvæºþÜõ¥ˆí ™ÚI[tŒý}sdçù™(¢çƒ©ì÷xá ~{¦vRzk¥7}D éä.£P}HïÕ¡öŠ”±y}QTi¬é½Ê1ß,�@± £0Ò{µHVÔl¯ÈSüÔ‰§ºbHDY… �`2 S!½WÄÅGIY‰§úhpÑP�€lQ˜ é]Š’*BªH)£­«‡rkc�@6È(L…ô.‰¨—¤´üø›ECI/�€«)FFí¤Ó£‘²+alD»ÛÒ#o“× ±ý<‡©ébÂõc[ôÙ_<žøš ;õüøèÞ sv40];zyt|ãŒVÒÿ¬æn˜ž]í»Ý5ýþ{¦Žì_�íK £Åƒ”–¥‰—Pu¯ I�`:ÅÈh„•¿UʨEbßrÓ¹©^’©_"¬`¦Vfц[Ói¿3>‘öÉSÓM–ÙôS-iŠš]³÷&¿¦‰òÇæXŒ§fJ¦j²s&Ɠ߿µ“ÕO˜3ÑN~f§Ä‰çLtó”jÊ›Á¡›nGSÞüØììe,]:ÈhùôhZ /= t* §f?oP�€Ùi®Œú5îÃe=3d4^ôE$®©õèÏ^š£Œy?í‰GG“_ÓóŒ^œ<7»›É¾­h&‚<Çj2ÿùËHb[‹/zÈhyQs°Fh+48†QÚ«Cçšs�p}V £A³óZË´wž™“ȺF2znNöïÅËF[¼†ýÛdëVgÛìD2øÖOîÞÚ4ݽQ43b¼‰=Ø.É®äÎM ßê˜Þ“Ÿ»I³—dTâ÷ž]öÓJbÖzô)ágÂkö{âcluzæÉþ‘‹dºß’|>?Zª1FÏmŒÄØv?ˆŽùðcÓme,»¸tœ-/atNÑRI“©/SÍr࣠D¥�®Oþ2š,Õw¯‘ÞŠe/32jû’êu-·yÇF}4Qï¿¡¨ßʼnyñ"«å,¸Èèþ³Ô:ðŽ´ŒêØïºe@íïØ¼¼ý¢2ºþÙÿTËޝ¹=~^~cö»í  ÕŸ3ÛO…ËÂ$1%j·8Š>ûóéEŸ‘ñ��Ë#õÍÈ©~cÒ æðéC=• ž›³/†fÿÙÀô{»foÉçÙ—f¸ÿ±ôwMoïÀFW=v_Ñ1鏯¶ÌȨšé߸uàÇE0-£ñú×á>[ãMõ–EeTMñ’î[¦µ50Çn§4ÓÃ2ñbªþ¥JG5'+‚JÔt2Štªß§Î•äSªsˆ€�äCþ2êä¤×°ɨ„ìvÜ|îšœƒ>›#qsÿ'BîmVÂÏ:´Ýœ ŽÉ¨^ï‘P7@¨½k†aÓþµd4z|v`£´ÉùI"ɯ㮠“0Ùã8µƒ°âL~}ï ÓMdý9zö¡Ù}šŠ�Ï 2Z²$«©rªn ~‘~»Î‹"ž>úéÏ Mð��ù“¿ŒJâ\ÿϵµfs«gž<JúL®÷ž›—V¢Z¦Ý}ßtÛë¦Ý{föw·Mw{Ã~F¢v:|`îvßuÓ9+cS;µ­ÆÝüsáößM§s3~œDW%²®¿i"¬±l&Ÿ‹Äf¿6ŵBê%RÏé¸ÞŒÎWzê©DÊÝL�ÑgƧv’|îºs­-Y¿8Ú—@Fë…$LÂ%ñ’„)5-‘¢€÷wgþõ_ÿÕ½³>è7«ËŸýÙŸ™ßÿýß·âÊ'c�€Õ³…ªCz7E %j³¯}íkæÿðmÚ«‰_Ïi°Ž"ˆj®.ûÔE:Fý³"ž’lý‰§ÿä'?1ívÛüÃ?üƒû��2 S!½›ƒdSÂF%vz^b')õbçEUÿKøôº6I >£m™‘F5™ûýjóß§H®Ž!ë¸ôº"žzZ uœŠ—]¬�ê2 S!½›„2-¢Óðb(áórèÅP›oþÏÚÂ÷…›Ž!ëýÚWø>ÿ}^6³„s~?��PÈ(L…ô®?QEWÙgÒ dz[e¤R¿Wù›J��ÅŒÂTHïzãE´©ÍÕjæW÷��(d¦Bz×ɧ$´É"*ôÛÕ5@QY��X=È(L…ô®^Dl²ˆz4@K}R�`õ £0Ò»^xUó<ŒÐ9a0�ÀêYXFÙšµ d´úhÀŽ"€ˆèeÔL¯æz"Å��«e!õHNØšµAu‘ˆJ¶4`²‘¤#ê��«åZ2 �ÕÀ‹¨úFÂdÌ�°zQ€šãWUBDgCýFÕ��V2 Pc$ êó‹ˆÎ‡úÕrÎ��V2 PS|Dt•«*Õ3�¬d †¨©½Z·žÁ^��ùƒŒÔ GD¯Ö«WÖ­�Èd FHD›¾¼ç2Q„YR��Èd H>Ñå£s©ÁLŸ}ö™{��– 2 Pq$L’PD44LBʹ�Èd ÂxUTYÊ5Õ³n=�@> £�Ek¼ˆB¾ø¬Ì�°|Q€ âå]:×÷ïßwÿ�À²@F*†ÑO>ùÄ=«@Ý tÞY·�`¹ £�‹(KUƒn�Ô5��–2 P$ ¬3_<’Q¢Ò��˨�~yæ»,Ö­�X.È(@Éñ"ÊòžåA™<�°Q€#áADˇ¦x"]��–2 PR$¢Zùá)'¬[�°Q€"eyÏò£›”�\d DH>mCD«”1˜ �àz £�%AB# •Œ"7Õuë�®2 P¼ˆ2B»zh0“æeÝz�€Å@F F”Ô÷­.}ôƒ™��(‰¨ú"¢ÕF‘m¥#ëÖ�Ì2 P^D]”ŽŠp�À| £�àGa#¢õ‚ÁL��󃌬 ¨¼ ¢õï[Ï`&�€ÙAFVˆT²ÂªJõEýé �0;È(ÀŠøä“OÑÀ`&�€ù@FV€"eˆhsP¿QÍ ��ÓAFrF"*1¡a³`Ýz�€Ù@FrB͵^DYÞ³yøÁL¤=�ÀÕ £�9 ‘„"¢Íæþýûvu&��˜ 2 °d¼ˆ**Šˆ6¿n=}…�&ƒŒ,‘PD„3±n=�ÀdQ€%á—÷DD!D7(̤U·��à2È(Àð"ÊR…DTBJ· �€Ë £�×Ä‹(ÓøÀU°n=�@6È(À5`y˜Ý´(¯0ß,�À8È(À‚øuæQ˜Mó¤éž��`2 °�^D™²æA}F•oX·�`2 0'Šn!¢°(Ÿ|ò‰Ì��1È(ÀhÚ&‰" ×AsÑJJ��˜Ö™‡eÁºõ��#Q€)H4è…e¢›H��@F®Dò) EDaÙhŠ'3� £�ñ"Jô ò‚uë�Q€L4@ …U qÌU �MH!Uó)" «@ëÖ3˜ �š 2 àE”H¬Ö­€&ƒŒ8üt;ˆ(¬ fbÝz�h*È(@„T2€ˆBQ0˜ �š 2 GÊ;P4ê3ª|¨>¤��M…F£%%�,ï e@7F¬[�M…Æ¢Ñòˆ(” 3@Ó@F¡‘HD5(" eÃÏèÀ`&�h È(4/¢ÌëeEyôþýûî?�€zƒŒBcðË{"¢Pvü`&Õ@@F¡xU´ …* Áuʳ��u…ÚãE”å=¡jhd½¤� Î £Pk4D:" Uį F4�ê 2 µÅJþè£Ü3�ÕC]KÈÃ�PgQ¨%^DYÞªŽ¦xR^f2�¨+È(Ô¿¼'" uuë Î £P+Q¨#ê3ª¾Ïäk�¨#È(Ô/¢4gBùì³Ï¬2˜ �ê2 µ@͘ˆ(ÔÖ­€:‚ŒBåÑ´Mˆ(4åñµµ5Ö­€ZŒB¥ayhšæ‰uë N £PI$ŸªQhÊïj `Ýz�¨ È(TUÆ’PDšŠëi0�@@F¡RxUó<" MF׃™�  £P4hË(@ÓaÝz�¨ È(T"VÅ‹ˆŒÐõÀ5�U…ÒãEô“O>qÏ�€PT”ÁL�PuQ(5^DY õU÷�€ª‚ŒBi‘€j‚oDàjX·�ª 2 ¥D«"¢Z�®†ÁL�PeQ(^DYÞ`v´n½Vg�¨È(” FDæGSŸ±n=�TdJƒDT1Q€ÅÐ`&EH�ª2 ¥À‹(}Þ�G×3Ñ×�ª2 …¢ÊS‘D`9¨Ïµ„”ë �ª2 …¡ÊR*¥âXº¦X·�ª2 …àE”¥ –_,‚ÁL�PQX9ª(ÕŒˆˆ䇮¯û÷ï»ÿ��Ê 2 +ÅGlQ€|Q냮5Ö­€²ƒŒÂÊð"ʲ…�«á“O>±Ýa��Ê 2 +ASÍ ¢�«G2*)�(+È(äŽT+à ¢�«‡uë ì £+PU„¬ªPÈD?m�(+È(䆚Q€âÑO\‹�PVQÈEa¨ü�ÊëÖ@YAFaéHD5h‚ ·Ê…æ÷¥ï6�” d–†Hxe°@ùЬ¬[�e…¥ ÊMŠˆ”Ö­€²ŒÂµñ"ª¨(" PnÔ}FS­Ñ�Ê2 ×"Q�¨}ôƒ™� 4 £°0~yOD Zè&R×.ëÖ@@Fa!¼ˆÒ÷  šhT½3� 2 sãE”)b�ª ƒ™�  £0PÖ™¨~Ýz3@‘ £03P"¢�õB}¾é÷ �E‚ŒÂLxeyO€zÁ`&�(d¦¢i`Q€ú¢~£š¢ � Q¸5ßiÄ-" PoX·�Š…‰HDYÞ øÁL\ï�°jQ¸„*£û÷ï#¢� C×½ºå��¬dÆ|JBQ€æá×­§[�¬d´¡H4Ó²éE”i^�š‹3ùuëU&(RÊH{�Èd´¡|òÉ'cÑOEBQ�P™ ÁLû·kû*RŠŒ@ž £ E•* ¨DT•" �*þøÿØ–~cÉP�Èd´¨² +š¯ýëLéÐp|“|X6ø €<AFˆ" éʆ¨(@³ñ]uÒeƒ6d�òm ¾XzCH@ýÉÓe„Ð�ÈhÃPs|XÉøM}H%£šÚ�ššì5ç¨/Q�Èd´†H(5ú5kûþ÷¿o+—o|ãöq¿ß7ÿôOÿd›è��BTfèF€<AF+€I5Ÿ©ï–¨rð›^øÍWY›^S¿°¬çÓû ß§ïÔwkóÇ�å'¼9õeHV9â·IýFý–U~h Ë}ÿNZ[�`ÈhIPdò³Ï>³¹šËU¸û~[¾ð×ó¾°÷½6?Wè² ¿#-Âa…¥ÿÕ¤§×Õ @ï€Õ ë_ל®=]ƒºÃòCõº Ñ^ãávYï×î×—aYÇ‘.+ò*¿� : £ Xrç lÔ>š©BÚGªQHW„ú >Ê*aõÞ�×C7­ºÖüM¡½,É+[ùá#´iiEU¿K¯Óm Y £9#YóO_ðJÖBI«kd@¿ÍK·¤ê¯*šï�&ãË/žé²£N×U/©þ†Ö *å@½AFs@wõ*T³¬éMR¾Âñ•kxn�šL(Ÿ¾ìÐuâųie‡~oº¼¤êæVÑÓ¦—¥�u]ª,THª¹É˜ÈçtTÙ„•¯¢"T4ÐíSëAxs&ùÒu—ɺ™Õÿ4ëCyøÙïÞŒòç]38yëž[”eî+ä­9|Ït_FïFû_¿r¯2z BU¡¨J…BqqT1KD%¤ˆ)ÔåsÝ€é¦Ue‘¾ÅÐùJt^)ƒ¡pÞMo}I9×¾NÍðG?6CûÖ s6Ü3ýá™}e2gfØ»5‡Œ†ß±<Ñ9QA~Pú2-U4ª }ÄGšªˆò³Ê Ý´z%?/—´˜R6Ca$£Ç³u£‹âÅK3غmzK–ѱïX"ÈèŒx1ò wß«CŠšâTÁøJ†(T5+«¼#ý?^LýyGüa¥„yvhÝ ›×Z³{pb.µ<˜n»=ß2ígæäâÜœìß3m½/ÚZ=sxv1AF3ÞûÿÛôìþôÜÿc:¶{¼nîtî˜õèñúÌã­Éó±€JF7L{{ÛtZÑó­-Ó?ü?fÐYÞÓŽdö—îqt Gσïˆþ?~ev;¦¥ÿíçÞć·�ÈèHxB ¢)­xT©„7D> Œ¨¬ðå†Êòi1øˆ´O nda%$yfŽúwLkk`Ž#Ù<¼kZ­³ÿŸ¿4ý E-OãHc+%›oöM×?7-2¼÷í°gÖ×]ÔÒ~N2©È¨„³Iësprýÿ*Ì›ã2Ú;ˆÚ(éZg`NÂÏŸ LÇõ[}ÇEôÕ;¦ÕÞ5Ã³ßÆ¿³»oÕQd4/¡‰ƒ ʇ*wù@J¡ „7¯jŽ' Z.ÂY¥R ¹‘ä—‘ôÝ0ýCs¡ç­8F‚7蛎¤ô}vÄʼn>}è"¦Sd4ã½Ódt½74ñ^Ò2:j¦·ûØè›£ói2ªAPü¤(©Ûüw/�2š ­i)¥‚"xRnT¥R ¹’d]³Ñ÷æl¸kÚId4’Áþç‘ z•¼7Ù[¼JF³ß»¸ŒºÈèűÙß¹?¶Ÿ¿iºû¿Ž{bdôžÙ·ÑÖëŒ:t׬ˆ•I5ñRê+€UàË EB)7ª…—R¥QlX=õ±t‘ÂÓ }F÷â>šk7ÌæVÏ<=>‹›ñÕ‡´û¾é¶×#)|dúá¾uMþcï=0ol“ÿZÜ-à­0݈¾ó]óøÉ=Ûg4îzD4cY½8yfv|ÿÕîÀ©¯ªo²Ž¯Ó}7Ñ7‡¯Âï8õ]‹Žaë±9J{g¥ñ2*‰QwI RõQ#1@ OTnøèåFµ  L(†F˨oZÓÜt4ÕÔ Tði °L¼E¹Q”ŽjQQ´ˆ–€ÕÓHUÁã›t‰žÕE¯|””ˆ\•¾Y—r£ž¨œðe†Ê�X “Q_بR™?ªô‰¶¸3pÜ1xô?” E°tã¡æ8€EP¹¡<´Ð 9;5.3|­xpAð?” ÊŒbñu,[5¶eÐ(õÊušn/ŽúfC  y¸âgÌÙð‘éOíPN|— ú÷Á¼(ϨÀUóüb|¨[ÿùÔ ûÌЀ2"U™±xºÃ¢,Kp Ñ9ñ"z]±ÓD'?Ž‚JD?4ݱé ¬,ãfš…¿‰¹^³¼o=ñQÐHDwï]kµX aDV‡œ{÷|SZùÇס2º,¡Œž?5;»Zµ æâä¹Ùíø¥¶´ÝŒDõGqÝÆû¦ÿÁ-;5ÂÑÅsôl7™Ö!žkÌWXŠž¼ŒçïZ»cú?3]?ýCç¶Bá:«4Ÿ¤�Óð"ª<s=B}mŽ˜]ß’rNo­î‡æ¯mw Û¦××’Q9pôU´›#ó¬7¾ôž/lKP»e6ú¿4ÿi˽ï¶élªLÒ|¿‰¿æBÝ2Ôµ !]ºÄuògYiU{]¦ˆŠDF»ÌÃÞãxíXËoÌ~÷¦ÓkpüEÜ·Ô6åÇÏ·ÚwÍC[ùùÁnEÓ«¸’ 'µÏiܬgŸw«ØÊç8xü­0?ËÎP?–'¢ÂËè;¦ûðCÓÛó-)þš¿a¶_D傿þÓÄÒçñó­¶é<Æï½psjòìÓÛßÔ¶Î$zhÞÚ.D>ú÷o·kV‡ï×¾`n¼Òª²Ñꀌ΀ |]fŸŸ$qiÕ'£'æÈ®Và"˜‡¦¿ÑE3]å¯v¾æú•E¢yðÒM*kŸw2{é1\/¤ŒŠ†4ÊËQáe4ºîµbJÒMÔËh$ GÏMO“NÛ%ãužãÇz³Ÿn`O]¿õ8Ò?Žôàs7ÁµûŒ-g\44| ÃMìê@F«2:šÌ^Ûò¯Æ ›Þ#‘ì<0‘¬†‡ÅެUSüçæ°¿5Ú—ÓÎ=ÓëÞ6ïøÁIäãŸÍñ¾šì²¾ÁG¿æŸUêŠòÂò…ÃݨÚ%ÃKæìècÓó]{üê,éXã×€–´¾0}½ßîËKkÇ|ÐÛ6ïD2k[c‚V–Ã/ÌþÎFÆwÃ"HH•VË»Q,ÑꀌNÁ¯ª±\ÑP¥°m¶/£â>…•F‰¨–ÓzhûGæÌG;“G„onSåÓîš½¡ªŽ÷yIì§û"]7íÎÃèñf=é÷µavö/7,ŒnVè ž|òëèšß6ƒãôúÍNR]YÐüÜ.Ãwé6âÂ-ó—/?6CÛ*ã>/‰ýô™y(µÝâî?­ÍŽÙÔg–´v4Ĩ¿¹šì!?ÑꀌNA"º²9â.ŽÍþN$ŒƒÏÍÑþÀôí:´êûuÝZNf“i¤`ÙøHÍõà›çW)?7'jéP·ž£Ÿ›A¿kÚcS?]Y½±œ}A&’QAæ2ZÑ+PQMj¿2.ˆÝ0ÝÁ¡¤°(áûô÷ÊU*+Í/PJt»ºþ€‘Œ<HºõÄÏŒ^‹p‚ý°E–Êjo\šÇ²ògYiUKe¹>˜eù¿æâ»õ�ÌŠn`™?ÑꀌN@Ë©T`^4e Ó¶4õE,`¸¹WÝü#£Õ�R‹ H:K3Qd\*M®0/*3Y¿ºæ4X0KJ‘ÑꀌN@M'4ÑLЇÖNºÙN}b¿·„A^Ë!i&*/ ‹ ™"¢¾*oý––Òe äϲҪv2ªƒP‹šf£o_i:·”aàF¦™h�­)Å3ZNÙ/‘œFSë}¯T³HD™n1¼ˆ†›—R=ã‚ãçÛuïw+& Ñ$+ïc_îd§ÕüÔRF¡H\APÁé¨$£+› JƒD”izŠFÓØmÚÅ=^i¹äèfö¨¡›W?Iyh•›ò­¾»èMƒ?A\â&. Ž[blêij¡é÷ݲ¹ n6¦Ẻi5'È謼Úõ×Z›¦»­yDµžôKsaçÕÿº€Ü½ïú¶yø¡VYŠžø33°ïÝõ"ÍÙ~v¿á\„“ŽÉÏaè>®O}­cC«Ç LWKÚ÷Æ+N%w©Ú&®¡ï§­Š~Ë«Og8®Œß£ÉÁƒc·xžÆÙÃ8¾‡f¡ •ˆxѨL¸Y¹¹Q‹”Qmúþ¢·Eg!•Û£MçÒ¯r%. NR·ººåìÀìv|¹ŒOV.<¼b‘˜7æ°¿mv˜6ñZLL«9AFçÀŠVkËôOãåöÆîºÜ|î¹XÊ´tçëøùðsöBÒê)ïkÔ¿³Ð\¢WS„½(c]ê1Ù×o:!W•Š—/œ12jçCœõ¸ÜgDò{Σâ]Ó¶”xq€Ñúý‹W5±îtóÈSFã¼­›¢m³mמ×®ÄtqòÌ츹5›ßÝúõQ~}/+Üê|hž Þ³7aÉMU8§±ý\¼`hŒ_T¹ÇÛødú«=¦g‡f`Ñ{Ýò§©ã^ï £R$oz‹ÿ ëÝæCÝxFßûðÙãøøÝ1\þ=:®ôü®Ú¢òäøÕì¿!@ùFùægtþc ¯A='®”Ñó¨ÞÙù0Xæ6ÊI‡{AÚº.béyÀÕ…ìøÀìù|¨º*ã=UˆÌ—‰i5'ÈèØÐÉ‘}ì„ëâdhžÚT\ÆÎzï¥Çá¤öñ6VϘtLº�‡OºÈe }×9¦+“¾?¨q»eôÊãŠÞŸñ{╯ÒÛ¿!EžRå%ßfúX´bqûut£ÔNEÿtóäž³×|+¾‘²7]®eÀ>nG7koâë,X—~´~ý<uLî¦qk`Ž/Îͱšã“>}³DFÃ÷8µß«ßp3ø=7S×|ð{Ìiô¹ÛqÄ,¹YýõÂç]•Íš «k”^“etÛ<|ø#³Ü4ÄKæ*¯>7GªƒlÞú*Îg v<Ò{ÝEK]=a¥ÓåÅKïY˜˜VsR;ըؼ¦Ú¸$J®³Ókß²kÆŸûç²Þ{鱋àí<‹îÊâý/Bæ1¹×îû\ï¬Ò7Ç1Ù‚|=®¤ì÷ݺ^dôÊãÊú=ç¶¹qI4?¯*mr‚ê"Ío�S,M±éñ-'Eçædø3·t°‹\ÚŠV‚w6áñi|m¹›,»¹k%Æ ZøºÝÒËŒ®ò˜B$�7F}"´Ñþ”ÑÑoÈzœñ{"ˆiܽè·sü†qÀ´8WµB) ÄD]Û°uW¹3ÐÓ/G-u6Eéœ<vûØ5ãOzÌÄÄ´š“Úɨ †\¦ÚH.‚µHø:æŽ+´Ö?xdGß.ÚÛ6mÝ]}úqòÞpû\TXž‡}£ByëÉÑ|wc“Ž)º3|iïô´Äàû¦ÛޤñýLw©Ç4CŸÑ‰BêîJýû2¶©¿'’à7öN8ø\ÒÜ8ÿy•„ª#>4E·ò›Ú)Küþ-îbÒ¾göO^»çf?…ÔçÎÝþ¡¨cŠ#£q43úf}ß5#££ß~|`N³~•–;ñoHp-; œ×Üꛆ£²[\'‘q$ÀG¢º¨óÐ<ëkìAØ#züäyÜŠfóÛÛ8½]Ë^ö{檉ÍÄ´š“Úɨî¶h6iÔ vRy©©e×ì-xGK„£¹ä9éýèæ,’¨Î­øi­m>xÒo¤ÚÛ¦§È]ûDÿ›{=ØÖï˜Îwã¦hÝyØ·-º)Ûz<wß¶BijŸÑQsßgTïi›÷{ÝÑMo²Mû=’`ßl;úœí6ðv±óʤ÷ù t—çd`¶l7÷‚‹Œ®m˜íîf”ŽQFbzpøS—Þ5](ÚÓíÿ/3ÔMQ”G:;7aú=éÑù0‰‰i5'µ“QU(¬3¾Dlsú¨àö[…˜Æ„èŒM`WóÆ v’öªØzÏŽ.@&õ]‚f å@¼Ö�l?ó{qŸsûÿK3xïÑBƒUQW¹ËGeº¸®à@þ,+­j'£B.¢\0+T*À:ãËä:7¡a4Ü\÷€ëFf£­ÕÙ5ÏŽæ&ÔG}>(m2Z~–•Vµ”Q¿‚ÑQ˜õ$*’QòÌ‚n`ÕÇjù€ŒVdt !KßQ˜†"¬KÂGG ˜†ê–ü¦d´: £SP…¢Š…f˜„(ºÁ�ð¨ï(ëÔÃUp›?Èhu@FgÀ/+–Ÿl¸)A&Ž�̓pä©ßn˜Îîóx^M;åŠÞ×h°Ÿ‚iœ`š¦d„k½ÑÍŠ*¢â@æÚ\ïæ5œ:ï2+Ü\ëcS²ÙùÏg(¦•+õ#ÿ:„α(·Œ.RÇ\õÍÆÚÍÔꀓ¦<Ôgÿiòk_ym[’¾ÒÁñqÙì¼éÚW8åYø›\p=ÈèT©äýR†ôsØ­Š¸“<¢Ý/vðŸ³Ïf|;ç™Öd=½ºH°´ç[Íݹ^ÿyÖÔ̦(@ß0Oá°ò·Jµ¨\в»*'´.÷Öør»ÁB³” SË•šáç"¦_qþ,Kpòg¾º8Fóí~Ït:íÔJ_Ñ{»Œ–7µåƒ»6/ŽŸš÷öþ§ùéÄ×üŠR“®í`å³·Zº{ãòÙ¯wíwÝ­š¿Õ éÍQ¹ŒÎFÖ+ –O_°¢eÔ¯µ®^�qFL¦bR…“šÔ×V*IÆÕgÛ3¯ç^EòÍPò¾‰-\FýZÜáÜŒN/¦—+u·¤0KËj¨¦ŒN«‹¿»{æð0ºÆÆÖÀc¾8úµf†Â©kõÅ‹Ãè&yÒkŠ€^qm[ÑÜp¢ï¸Go™x½G·6Mg³/¬—‘ÑëáäZ•K8-HºÉh¸ÌÜZkËôíº¹î.Eáñî=Ó¾qwOjÚÚ6;ýqanÉ ûkKwˆ3TüZ´ßÞc³?6=IxhŸ£%øl˜ÝE?6s'Er½T¡ ¢0+ËÒ ùK+ˆ¹ejG2ªÅî%óåÆë«¿½\Fœ}núš»µiº;{IE ì¾’²"Ø.É®Ê×Ô×ê˜Þ“Ÿ›£3{ÑÇ2:½L˜^®ÔDtõ(Š‘àøºQõè»q׭˺~Þ¸÷¾cºwÝuô¡y6xÏu)Ñ{.¢úz´RŸ.!lŽÛÒy|žº8æâhÏÜÕuc%q3séÑ1áL‘ýÚ×¶ý-#A•=#&_ïÑ~ïþÈ OµìùíHhOãý!£×C¯\ ØŒ—!ÓDÉ[ï²—.¨µDt'¡ç”p71øÊœ¼ø<ªˆôþ;ö®ãâäsób¡~VþnìcóiôÝc!tKZFƒã³ýÕ2d4ÉœÁ±×_¡ ¢0×R[áÄ…ø…]¾6½´,&׿é¥2Bï¿¡hF Y• ·LoÿYT±ÄMrcûIËè•eÂôr¥(Ý5]-™‚c¥*>Eè²ò[øœ}¯[6Ô>~NÍè_FyúWŸëÄu¡ÖÀyêb!xωaìÉ ]€½þæ–Ñ ×¶=þ\¹q.Y2šy½;}ÝTÛåuwc1EF¯*¼ùûý(±³š¯ÃB9ºKþÌômôt4xè‹áÏ£»²¾éõ™áÉWæì‹¡Ù60ýÞ®Ù†‹ö5{dÔ6 œéŽ%]±„�ÍôT(p/3"&4_þ‘`Ÿ>tÑSUç—ˈ³/Ípÿc3èïšÞÞÁØ�»¯KeF´¥e×WXj±ë«¿gp3È(Íô£¾Ã r\=ʿⲌºþ˜¡`]º~¢ç.½7ýø—Qž”äeaß\KÉæ¥Î3O]aÅ×µžúm¬©>faͺ¶¯ÛLoeTÏkÉíwÍúfÇlÞ}¿~ƒ@FÀ2’“Ù£dqá{)œŸÈ迹;5ß¿X‚Lëž±ø„ w5á¾ÜKÒ-@Œ_�6£Ùu™Om—ìLŠÞ¼Ž›k4€IÓ°èbaŠ/¸‹•öÚŠ®EßßÊ1’QEAoÇÍ÷çAë¹TFøJ'ÜÛ¬„ŸÕ÷Þ/Ï¥L˜Z®T ¨Ò{¡¸6™‚sI*•W“}ýd høØEF]·™Å™§.Öë?2[a$Ô ¬kþX\F³®í8k£À¶»Ï¤LY×{´ßDF#l«ð±ÕÔÑk¢ E#ª1SE3¾ßVtò[›ïšÞÓ/¢;ß_¤m>xÒ7[š²¥½mzŠŽºöîÝm³m§LP&=6ÃÝmÓÝvÓ,¤*©éŒGOíEà3ˆ{n´¢³q¿UõñS°ÄûI."×Gmò4.ÕB#_}ú^¯Ï@Œ/3æë{\[Ñõ¾¹Õ3OEÒ_£ë½çæåàÝèÚl™v÷}Óm¯G•Æ3³Ÿ*#N‡Ì]ßWîÒ ñ ØJØ— qÅwðÏ…›*ôóÌ2a¼"Ì*WªÊ ߇r£8”ÅHp‚zoýŽéÜqQÍõ{æÉãŒë'«…qìs=sðjÔgt­Õ6[OŽæ¬÷æ«‹ïtî¸ Ã‹¬Ýì5–|ο7&óµ)×¶=®Ä]¢òdlê)'éYî7O;6æVä6î½.Ñk¢ˆÙB(->ª¡>¤),å/ÀúKþªa¹Ų,ÁüAF—ˆî†5ç¤ "šs«‹"ÜŠ„*ª1s´`ÂÈ»–…êB¹Q>Ñê€Œæ€ "H*˜è+T”núxÁªQ~Sy¡ü‡ÈT CA¢| £ÕÍ_Á ¥å&”PšL¡(”ï|/RZ~$¡ê–E¹Q^Ñꀌ®€PJuçL¡U”.H(” ¤´Ü(=677Í×¾ö5óÃþÐJ)”d´: £+D}¼ü莚Q–«G‡*ú0b„BQ¾ÔÍ+7²Å£ó®²BݯT~kpÒßÿýß'i£2)-Èhu@F @…–_ÅI…•L¾øŠDƒË”áu#@´ ªDÅ'ÿ® |S¼Êj¥C¥…Þ£²Ee ÑÊÃÌ‚cWTZËXà!?ƧWŠ·ô”‰ÉkcÇÏU¾6¶8D8½Sjë<6¿˜øZß .M_LÛdycŽ;n:¸ S¯%Kœ§>«…=7%¦ÍúÐô»÷Ʀ™òè»2Z¡$é¯þGL¯Î¡*…°"Aú¡êøY‘ÓcZX–‹Î§?Ç> :Ë9VÙF²‰–Ï<‚cåp…2j £psxÆsv '˜écÒÄò[Ói‡Kê½ï›dÍw?ï§æ+}oÏüãO'½öÈ]¤&Ü·ó„úyC£·iQ »ÓY¼rÒ¥E)ÜB>ZÂô­æGõ“áǓ毵wÌ Yg_s `ö2ÖÑGFKB:zç削fvTðgC*¨#>"'aòbJÄt1Òªóz'ÑÒrP%½8Ñäù7ƒ5æ³eôâhÏÜí¿ˆ¤.\>’È/¾È˜„þÜœ¼øç(?NzíóèùPF£çD2z'X÷~Êr½vÕ¥ËË„þ§$víæåUš&€Œ–/¦aE£Çz±ᣟa%â£Ëœ'h’ŸôuÀØdÂ×Pæ—-éh©¾ƒ4YÙ‚3jv^[Û0;ûÇVè½86û;jrvMÖvuÃÑÊB­Î¶Ù‰d0Y¨µiº;{ÉJB"« ÞniÙµKçÆ¯µ:=ódÿ(ú.O–ŒJß³¢h#–ëÑ gŠÌ×Ü÷Øãˆ~oï±ÙO"™ê.°1’^ûùñÕœâç¼¼ê_ÇŸšÃýÓJ­ütú~Œ–ݵ«@ N_Ù4)¢óà%]QOe^õ£Ss!€ÉNº¼Ð5£çšÚÒâËPPØWuNÂh©Ê-•e/Y‚c%NKlŸ}e›[Nö.GF/Ì •}NRvÇFù.N>7/NÎíûo¨Éúâļx±àÒ×62úÙÿTkÑ«)<ì™!£ŠBÞÝ‹ÔF$7 LXPF×{›Oµ½šÛ“£ß}+Yb4î[›%£þ9Î|?Ud´Ö„«—2ýÕÿ^̪|÷­h‚~ƒÿ*¸õ›*á�×Á—ºvt yR”NBT·kI¿W¿K¿/«ìX•|N·|©Ì–-ÍË‚3jFï÷(§ÉèÅÉÐ<íwãè©}NÍàC³ÿl`ú½]³7Œž9ûÒ ÷?6ƒþ®éíŒíD̵ÍôqÿÊq¼,£V¤ÇöÙ šê ˨֞?0½öM³5xéöI3=̉—7_�«SâªÀÓÿ’T/ªÚT ‰?³ŽK…¯8´éq(×E/@]ð7{þºó7´6_Vø¾²J’Ž+,?tÜáïÐïÒójv/³èIŒUΩ¼Öo Zº\”Ä¥ÈhkËôÇu4‘Q+d·lóýù¥hiD"îóÊ :·²åoᾜÆÝDZF%¬Ý  òp×´m”wÌ„—Q¿ÏàüŒ"ɧ氿5a�Ó¦i÷Ì™íºà0i€ÔÖ ³ÖîÆò®·ž™g»ÌÓ±pLVZ-2ZRT`«@VÁìEU›^›/ÿôOÿÔþÕûÒ›>¯ýLÛ²>ë÷ý»¿û»æ[ßúVò½^’½pú Ò P ºþ|Yá[$üM­/'´©ñ×wºlXôúõ‚nßýîw©ôß>_~øã¨*úýDK—òŠèÞ2-ÕE­Ûf«÷?Íñq$…ú?ÚÖ?xdK¢Ö"©êm›öšDó•în›î¶›¾(ÆÓás·û®›òhφB8cÑS+¤çq·ÿ\¸…S0%r* ^wïqÍáV6ýçÖGÍë"óµñ)¤¬z‰Ôsö¸Fç+=õT1õýgÓS;I>{ÑoY?Ž^ÈhCù÷ÿwsçÎóýïßæ¾’ 7µœ¶e}ÖW?ùÉOlfãΠzøH¤/#t=k"ë7/‹ón¡ìúí/ÿò/ÍïýÞïÙòÇwhéòPÞ×ÈŸe¥2ZAt7®;qm«ˆHJLUÀR¸T_nH˜òFbÖÔ2#-Õù.º¿kÕ@F«2ÚPV-¢ž&W.�UÇ_¿«QÿNEd›ŠÎ–ªÌVù¹Êr»ª £Õm E‰¨ÇW.ê�Õ õùÝeBåµDTÍ÷þ|èÜ@6Èhu@F†QõÃ*òΚÊ :”ázõeeFŒúÏê†^éB´4d´: £ ¢l…9• @ù)Ó#eF6DK³‘à°UgÈhÍ)k!NåP^¼ˆ–©¿¦/3´é1Œ Zš ‘Ñꀌ֘² • @ùð"*¡)*'ÔÕˆ2c2éh©¦Æj*¶êl×-)eQ• @y(³ˆ†¨\£Ì¸š0ZªÕ©´jç ê 2ZBª"¢!T.�ÅRõø2ƒ~’ÓÑ\ϺéWÿ<·&GK¡ž £%£Š"ê¡r(†ª‰¨Ge†Ž›2c6-U?`EJ‰–B@FKD•EÔCå°Zª*¢ eÆü-…:Œ–„:ˆ¨G•"• @þT]D=”‹C´ê�2Zê$¢*€|©‹ˆzô;å«Ëï)‚0Zª¿ú  £SGõP¹�äCÝDÔ£ßSÇßµjÒÑR=Ös�e-uQ• Àr©«ˆzêþûV¢£ªcˆ–B™AF ¸uQ• Àrhʵä§ú?ÂrP+œÎ'ÑR(#Èh4ID=þ7«�€ùQD«I7uM,'W…FÞ-…2Œ®˜&°T.�‹!mbÿë&te*¢¥PÑ‚ŒQ¹�ÌKSEÔSçAže"-mj~ƒb@FW„Qú@Q¹�ÌJÓEÔãËŒüàö1äG-U¥õñ‰–BÞ £+À‹(wš#¨\�®Gå„Ê •”«Au—‚ª¿tîÉ‹ÈhÎ ¢“¡rÈFå…Ê •0Žäˆ2cµè\+Oê¼-…<@Fs *€ˆèt|™­¢¥ÈhN ¢óA倈΃"ÎU1-…e‚Œæ�"ºT.ÐdÑùÑTDœ³âÑùOGKié‚y@F— "z=4Š“Êš"º8œ»òŽ–JPI˜dt‰ ¢ËÊšùýúøsHÙ[”ŸÕt¯t‘œ*mˆ–Â$Ñ%ˆ.*h>Ÿ#¢×Gç’©°Ê‰ÒDÍ÷ÊëDK! dt ¢ù@åuFù].”ÅåFœˆ–BÈè5¡ðËÎ/ÔD4?|™ÁjwåF×�ÑRð £×ÀW(ˆR¾P¹@@DóÇ—’(7éh©Êy¢¥Í¬¹ÓT¡Ð„¼:²*X*¼(¸ * ¢«CçXåCZHõügŸ}æþƒ2¡ëCÑRÕ­J·££#÷ ÔdttQ„"Z aåâETé@Äʆn`Óä£?ˆèêðå„O {¥„Ê‹®Í!ûíoÛn³DK JTdtTxù;5D´XTàüÉŸü‰ùƒ?ø›ÚTÙ�” Už¾Ìú‹ˆƒÒn·knÞ¼™”Y-^P>žÿ~r=MŠ–*©—« 2:]¾ðÒöõ¯ _0ßÿþ÷ÇÒD•<” µ×öGôGˆhÁH<¿öµ¯•´¨T‹«¢¥zͧ+õs5AF§ ;±°�Óæ£°z²ÒC›š@Ê@X1úí‡?ü¡{VŒ¦ÓDBÕ$-ýó?ÿó$]¹ñ«&Èè|}zCHW  Ié¡çÊ€o¢Oo”Å%¢~CZª–¦£Þiõ@F¯ ÝDï7ÝQ‰+2*€ü¨K¿)½�Šæ*ù!®•ºAð‘´pã¡úøqéMõ4ƒšª2za“°* w[åB…*xÝ(}�Š$ÝD¯ÊU˜TŒå@`TV¨L§E¥údÝdøMiÌuW *-£>B–×¶¹¹iÞ{ï½Dtª²U=ú¢ÊBQO¶ñMi ×Gù+¯íoþæoÌ7¾ñ [n<}ú4ó=eÝªŽ¢Ÿé²pÚö“ŸüÄnY¯ÕeÓ RÝ`*ÏŒ‰§6õÕ  ÒUyâ_þå_.åõºnUNëÊʨ" º«­š(æ½é"”¸TŸ®*D².¶¦n:UN×2  LׇšïBÉ_æöÝï~7óù²oºæ”ϪˆÒÕ‹HV™ØäMy½ªé: ¡|zgåå¦nþ|T•Jʨú_]FOU3¤n,”®t…¸L•Óµ „ÂB³Ýe”·ª(-Š)Mu“Aº^¦ªé: Õ >ãT½Ž¨œŒªÐAX&SÕ ©tU¥BºfƒŒ.ޤ(A6U”Äd:u’Q„Ò_¸ 2º"|›*•:öYUËD¬f] /,j²„ÉTMZ“Ù¨‹Œª›’Ò»¿%/ª^GTBF½°èD#,WS¥ IÄjvª^ÐDE–éTIZ¼ˆÒMk:UJ×IÐ:ÈhÎ(ª6Â2UÉ4±Í2:DRæ£*Ò‚˜ÌG•eT'MÛD«ÙlT½Ž(µŒza¡‰mvª!‰XÍOÕ šU‚°ÌOÙ¥1YŒªÊ¨Ò˜ÖÐù@FsaYŒ²gH"V‹Qõ‚f ,‹SfiAL§Ìé: „¢5t>ª^G”RF–Å)s†$bµ8U/hòÆ ‹da™Ÿ²J br=ª&£:V¥·�æ£êuDédT…Žúˆ",‹QÆ )9Ð1±Zœª4y‚°\Ÿ2J br}ʘ®“ 5ôzT½Ž(Œ",Ë¡lRiIÄêúT½ É „e9”MZ“åP¶t„Æ…è:&µ8U¯#J!£Ëò(S†$bµ<ª^Ðä²<Ê$-¬Ä¶<ª £´†.dôš ,Ë¥,Rs�*]…倌ŽC$e¹”EZT(0Aº.‡2˨BѺÑk “§ …&¶åQ† )ED—KÕ še‚°,Ÿ¢¥1ɇ²Ê¨VQTZëZ&½—CÕëˆÂdaɇ¢3$Mlù€Œ",yR¤´¨¬@Lò¡Œ2ªôVAkèrAF�aÉ¢2¤*±Ò]/,—¦Ë(‘”|)JZ¼˜°[>”MF龕ÈèœxaADó¡ˆ IÄ*š,£DRò§i¡u,Ê$£¤w¾ £3‚°¬†UgH‰‚FB" ùÒT¥[ «–6Y e‘QÕJo‚PùQõ:b%2ª ( ¥‰-V™!}ÄJ#›!_ª^Ð,‚Q5íA¾¬RZ“ÕQ´Œª¾Wz«þ§ûV¾ £SðÂBŸ Õ°ª )Q`ŽÇÕÑ4EXVË*¤Eb¢¹¤i[EʨҘÖÐÕŒ^Ml«gÒÏñXT!×Dª^ÐÌ ‘”bÈ[Z¼˜°°Éj)JFÃÖPX U¯#r“QšØŠ!ï ©Â…Õ2VOd”HJqä)-¾u 1Y=EȨOoºo­d4šØŠ#¯ )9Ð~…b¨»Œª¬` \qä%-~*6)†¼Òutß*d4…  MlÅW†Ô]®ö‹ˆCÝe”HJ±ä%-ˆI±ä•®YøU}ŒSõ:bé2ª …J¥8òʤk±T½ ™†¤Š#O…âX¥ŒRG 2š‚ Y,Èh=AF!OÑz‚Œ6d4²XÑz‚ŒBž £õmÈh 2d± £õ…<AFë 2ÚÑdÈbAFë 2 y‚ŒÖd´9 £)fÏoÍÉà{¦3xåþ/‚WfÐY Ì»fpòÖýÿ=÷xœ L§30'îßeÐ,]qze¡4Œ*ܵ%§cdÔSÂ4Ïá:žL>¿¿q2ºÒ4Ë"]÷äCµd´ N0ߘýîÍÜÓmÑå”–+x;4½õòe¬E©žŒžšá~l†>ýo‡=³~UÅvv`~Ôµ‹ƒŒ–‹©i^1*)£K¸® ejÝsaΆ{¦?<sÿÏOµd´"Ì›n+ʧÈhŠÊeHdt&òJ׋ãٺѫ±Œž›ãÁ»æFoˆŒ^2Z,Õ“Ñå\W…2­î¹xi[·M-s¥Ûêò)2šb¶ ©püݨ Z·!y[°G…Öz÷ù°sìµ¶ÌÃgÍN»e÷ßÈZÌþΆ-ÜÖÖn˜Nÿss%ôÉÁÓié9¿E™äø•9Øí˜–þ÷Ÿ#úÜþ=ÓŽ^omvÌfKëË ÙäÔ {íèñ;¦ûp×î¿ÕùÐ<¼¦³gÏ.¢c:I}ϱû\t|Ýwã÷n ÌñEt§t¸çö³mvt—4ÖÔ½~40]ý^»ÿæàäõ„}¹Ÿ0¢d4IÙÇ[ï˜ÿ÷/þ*N?ýFŸgŸ›¾MßMÓÝÙ3ÃÓÓóï‰ÎûOñs³«×í9Ð9~ãÎAÛ|ð¤o¶l:ùK:hæzõiT8DûXß6?ÜŠÒ#:gf6¿yÅ¥ùhÿQ>O¾3Þâ<>Ÿ¤wH’o˜ÍÎíè=Q:^Ê£ÿlþc¸›|çZç‘ùEÆ1Ì2*–“æc׭ߢô;^$̓ëøÕ,åØX™ç©ûœÊ†mûÞw£2ì<zïsØw¿­{Ïô‡¿L5í¾1Gƒ÷û¢÷ì>7'çª(£ÿumÇǺ5x•0WSœŒž¥®ñMó}ÿ›‚t+;úfÿÓÔu•:§gV¢ÿ×ï™'ßÓÊ}ãX7‹ä}Wä£ÌºGÙ(«ìø×Ké;®’YuÏÛh_ÏRååËè¼Üí÷§Ï3aÕ‘Ñ"À—+f»»iß绯²ËPF/9@˜n¿cÚÍ ŸÎPÆ\d4ÅìRà¦ëâ ¤ö®žýÚöɈ*~¼>vWqaÞìï¸ÂEÒxÛlôÍÅÅ¡éoDò¸ÿëøu»¯ßš£þÓêîGÅö[ ü‹£¾Ùð…»-¤Üc›áZ¦Ý;0goöM·å2»}ÜŽîzÞdý\ø^íOÇy':¶ßDy÷sóâD»øô;ì±ßŒ+ {WuãŠ}ÎDEɨOÃX¤õû<êcÓN ˜ú]Ñüâ…ÜIìº"£zß;ñùNÒò7.¢s Š6}Ýé^·¢ty§‹-NãÇvÿî3"9—çæL²¸Ñ7G_ye±$Äw»ëöæ þœMG÷êxÏËxŽ˜1==ȨãÚi=y¦› MÓ?ú*¾þ[;fÿÊšEÒ<¸Žg)Çìqè˜OƒïŽoºFﯛ÷oèõ¨R|ñyœÿƒßÞ•c*ÓZ7í1Û󞋱¼™Mq21éÒìrÙ\W™çô‡ŽÙ=ˆËšaš¹2h¦|^×jŠÍ(;&‹gbÝ“0*/ãó¢º&ÔÎð¦SÅ9A|®ãt‹Ë‡(?Úãp„å‡}¯Ÿgïw,ÝÂòZ½r=ѳgÈË/N°I£,w24OûÝøNÃ]Œáe,B¿ ½ÇocÊxA4ÊXÑ.ɨËP™O³¿ç«ô{ãL{öÅÐì?˜~o×ì U”Ça¿÷Ž­“ kâ¾’’IÑ2:*$¢;ÔáÏL¿«;×ønל}i†û›A×ôölÅc+›>þîtt>í¾ÂsŸ&-&.'=Ö]ìðéCvç2¼»N*® ÇkD˜wÝw$ù1GSç%ëf�u,#̓蔨X Z4Í/Ëhü¹ íñ¾CÁÞð?Rï½å¾çùbøsólÐ7½Þ#3ÔM^òû#AÕ÷ZÒ©¢‹+é¯ÒçÂåÍ«(^Fƒk<+Í.•ÓÎéÙx>#CF§ä£¬º'³ì˜p,1WÔ=Yåeê¼dê.£—®Ÿ±ÇÙçd~'ˆK‹à;²òbò^w ¦÷ÖÛcÇ;­Œ¹ÈhŠÙ3äœÏÞ­Ü2;ûÇæ<)`U�ß .vád®}ÏìEèFØBÆÝýÚ»[ŸÉ‚Šn¬ È|ì#£©ï¹ô^ŸÁú{!“½KZï˜ìÝ­ËwXYûÊ 2ê¢öܨ»¯\=J{Ý…††»kÜy6 ÏA𠽦W(ñ³Ýÿ¹?—ñíåþ<Ž%!þ­ñzüûl:fæÑð¼dÃÕééAF×Nóè Šr\ê§¼`šG©:Œ0­'<¶– ›GF_“~oúz‰¿Ã¾üþ8²FsâHË¥saíjÊ#£Ó®_vŸyNÇóÄ8sʨíN”¾®ãzæRÙ1áX<vŸ—ê×B“./Ãó’Y¶L§Ö2ºD'ˆÏuúZú¿ÑweäŤ.ö‘Ñ+`ìØ§•1×M1[†t…½;h›÷{]Û?Äß-Ä[”)£BÇ¿§wð¹m¾V¿Žno;ºˆ•q~m›Î¾_¶_åÛ°OX$y[]ôÀÝíø×ã~;ÑûÖï˜ÎwײÞ5½÷Õi´ßøùð=Q!užþžMÿ÷¹ôþþ¿í¤—mv·•Š>§»£s:±Ïhz_Y…눢dÔ²ö÷ÄaÜlýßÞ6=Ýí·wͧû?2w}ÿW[©_$ïSº½:ú`µÚfëÉÐ$ç ý»/ße¦·õNÇÜñ{ÏÍK›WZ¦Ý}?:×±ü¿ñÇé?ç›=Ãþ`öXŽÆ*—Ñë®ÿ ¾Ãö—”GÕwïȼÊ8†°Øœ2*–“æg®+Ìèsq¿Ê·‹¤yð}Ù[ª¾ëÓÖjÏ<ê¿ç®Ô{?Ý7»w}?R Ìÿý~{=\Ñg4znü\¤¤)Eq2WÖ£ßw‡H§ÙéðAªìøjìº:NÓ'¿ü_£óþíaÙû~ϼïÞncç.óº>•qþs¶ì8»”¾Ol‹—#³î陃——ËËá›/ã|ªý¾:ʨÿ"qšBud´`'°y3º!Ðõå[K²òâ#Ó¯ÁKí÷­+_\~åÓéeÌu@FS\/CΉm&¹7ºsV%óÞ£ñLÖ0Š’Ñj¢æÚL7‰B©ðÙ5{aåQÑåa›ñºO“ÈÒÅñSóÞÞáÒ*…*RœŒV•j”Õ‘Ñ%±¨$ÑΫnÙÊ 2šb¥òìÐ lwÔÙ5ώƺ%7dtÂÈ’îT;¦÷ìh¦HåªAF—ÅøÌ6 ÒûØ-qTkAFç¥eGãdt!'Z\.µÀUd4E=¥¥: £õ…<AFëIãd´Á £)ÈÅ‚ŒÖdò­'Èhs@FS!‹­'È(ä 2ZOÑæ€Œ¦ C 2ZOQÈd´ž £ÍMA†,d´ž £'Èh=AF›2š‚ Y,Èh=AF!OÑz‚Œ6d4²XÑz‚ŒBž £õmÈh 2d± £õ…<AFë 2ÚÑdÈbAFë 2 y‚ŒÖd´9 £)ÈÅ‚ŒÖdò­'Èhs@FS!‹­'È(ä 2ZOÑæ€Œ¦ C 2ZOQÈd´ž £ÍMA†,d´ž £'Èh=AF›2š‚ Y,Èh=AF!OÑz‚Œ6d4²XÑz‚ŒBž £õmÈh 2d± £õ…<AFë 2ÚÑdÈbAFë 2 y‚ŒÖd´9 £)ÈÅ‚ŒÖdò­'Èhs@FS!‹­'È(ä 2ZOÑæ€Œ¦ C 2ZOQÈd´ž £ÍMA†,d´ž £'Èh=AF›2š‚ Y,Èh=AF!OÑz‚Œ6d4…2£ ¶â¶<2äóçÏ3¿‹muÛýû÷]jÔý>å[¶b¶o~ó›¹É([±Û¯~õ+—ù¢ºÿÛßþvfþbËûÎw¾cÿVn[ p$BlÅn�×áõë×™ùŠmuÛªn<ò����€Â@F��� 0Q����( d���� ���€Â@F��� 0Q����( d���� ���€Â@F��� 0Q����( d���� ���€Â@F��� 0Q����( d���� ���€Â@F��� 0Q����( d���� ���€‚0æÿ§Ë«¿/×����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9a.png��������������������������������������������0000664�0000000�0000000�00000016764�15030617045�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�����}���ÓÙ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��‰IDATx^íÏkÉÙÇýoèlÈio&—=é¤tH.¹ìAð!‡÷&P`!„ 9/ÙK %/¿˜ƒYïZö¬’]¯²cÅØ˜A“5­‚_³k´"1‹õÖÓ]ÕSÝ]ÝS3šžéŸ¶ZU]Oý˜y¾ªŸ—����tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄÀÜ¿_=xð@ýõ¯UŸ}öY†Ã¡zöìY¾þúkõí·ßª7oÞ˜���õ�ñ0ü±ºuëVòoYøôÓOÕãÇ#AøÝwß™7���,Ätž/^L<B'#}·oß¾ £ƒ���‹�ñD¦de4î£>ŠÄØóçÏÍoÂ)^~ˆ?��hˆ?è2õ*£vY1&"nD¼õûý©ÅŸˆO��€E€øƒN ¢oœP›DIÜ‹Œü��, Ä´+Ò|,d8yï´kþdä��`Q þ •ÈY—ç_ea’ñ7éz?š¯_¿6?��\ Ä´™âµ9& “lüxùòeDœÙ éEÜÉ(¢ñâËCâM‚¬-”òœœœ˜'���ÓƒøƒVñäɯà 2’7kDì‰ |øða”Ç$£‹"dïܹ¥“if• ��ñ­áàà I{{{‰˜ 2J'£vuV2ê'ö¹e[€��0-ˆ?h ¯^½JD’Œ’Y±Td$­®·nØQ?ß¶<›tú��@@üA«°pœøÑW÷MvÔ¯,ˆ@��˜Ä´+�}Ó¿rÌJvÎÚM+!#˜@��˜Ä´’ì lä;|›Âþþ¾W¼ ��„‚øƒÖ"PÖÌýå/iÜ ±÷óÏ?÷ ½¢À@��ñ­¦égãÉdŸÐ+ @��â æØõ>±— ¯®»—�  þ�€ºP(ç���øƒF ÷ôNz'nÛz—0£��PâjÍbEMSŽj© ÙR6(£~?��(ñµG+pDü4騖YS4Üõ‘Q��£RñwéÒ%áBá¿øENäØð«_ýÊ›æ"¡)ˆ�´õÐõÑP��˜ŒÊÅÌŸº×{¨}®À) 2*8«3üšÖ_å ���“€øk!m2¢å|n˜åÎVú+��tÄ_ iƒø“Ê}b/f¹¹þ ��]�ñ×BÚ þBFýf½Áþ ��]�ñ×Bš.þÜ£]ŠÂ,×úYè¯��Ð-¤éâOtö >7Tq‡-ý��º�⯅4Yü;ÄX‚L Wý��º�⯅4YüÉÑ%>Áç†*Fý„6÷W™Jÿûßÿ®¾üòKó��º ⯅4Yüeoóȹ۶*ÚÖ_e'ô“'OÔþþ¾ÚÛÛ‹êo–Gã��@3Aüµ¦Š¿Uj܆þ*ÓæYÁ'¡ßï«Û·oGÿç6�€nƒøk!M_|ñE$PD¨Ü½{7.6ÈZÀ*iKýðãúrŸ¸� Û þZHSÅŸŒH=zô(7juïÞ½H š˜ÕЖþ: Rb/>|hbÂxÎÕÙѾêíl¨å•utn{y¥[«ji½§ŽKãÕ”ó5¸yMm,¿­6ú/Íà ¼ïµsT6Ú¬ëx°­–—~®zÇß›gÓrªŽú=µ³±ªVv†ú͆³µµ|E­÷žž5š‚rΕI>s¦uí={-¤©âÏÅ·^íŸÿü§ùm5´¥¿¾xñ"'ø²¡ÓœöÕÆÒ¥¨½ËõqãFq[-þ^«£ŸŽÊ}añç¾ï§sçºi7ÕR”çҜğÎsÿ–Ú?­ºÁÝ|JÊ9”áôê훾á~Žñ×Bê^ï“Ú'BPÎþsuŽJ{Â,‘zò >7Tµcºh§µ¹þ¾:8±Bã¥êo\Q—–6Uß:Àóu°½®VűžÕÎÊRýÜ̱¢bâO°pœø›-çG;je&¢(€óçªwõ½Q¿© O>3+gp¾WǽMµéöÎ|6Ú⯅ԽÞëjß"ìª*O™Úõ‰>º¼îïüèºÚN‰øN÷Õö.âozìûÚ*þNÕpg]-eûÍÌñç3›r†–á\ wÕÚR¦o þK¥Þñ·ÓÑ&ñ7î¼DÖý¹ˆ?‹ëàN‡ª·±µÛÒš;z¨£ ÔÍÜú§ïÕÉÁûÚi^R—–7Uïè™êo_/q”ñßt¾QHlu§WE<U§î:¬Ó#µ·µOFï;UêÌy¶´¦¶NŒxpÄßÞ#5ØÕïˆÞ»¢6zCuűÈz¯ÔÖÚ[&og§¯ŽÎÜ‚Š?ßÚ@mcÿÆ–®vø‘-){ ny–©öúïgD‘®ÓÁ-ïú8i³žM{é-µ¶õ‘SI÷m—­w÷÷F4EÏMpúÏùÉÚ5ý$ª›Ýu’d<IŸ(Îg$þ¤Í{ÆNmãöýt^S–a„~N<ûBàg#gÇò†ÚŒú»vpx¼§6u¼Ñò‰²´>$¾§½£Ñ|ië%µ¼ÑSGÇýø;óë®Q©·“†‚ùS÷z¯«}‹°«ª<eZ×'úl¨ê–”f(þ–¯ª­Ý‘c=?î©õ%G`¬½º¶«†‘³ÕN©ÿËÒÅñ¥ñÏUS;ל²Öðx}“k‡v’;7±½'Æ¡®½§®í|;™î[×â-±ÇŠ5ãSá-gý”]£·®…™“ò³éõŽ!âÏԽ؛ÄsŸ-«õ­?ÆB"g¯&zvE-oîÅ‚çì‰]?Qo'âÏÚ ïr¡&Z¶ª6ûÇÑ3+¦–·"¡·ñªÚ¼’Ÿâ2§Þa„w¦=¢º^{7ÚÒ†‘Ð¥›´Oæcí]ÿÚ±LËþ<UßÓ–ÁGœ_ÁÈ_Ùg#*ã{jÍö©D„;S}öªÚî?SÇR'ËÛjpöº<mŽ¢ö–r®«µ'ñ1Ñgi‘›eO¥ÞNæOÝë½®ö-®ªò 93,ŒüÙ_=‹Ñå” ÒyŽòÄ¥+Ä4òluŒmÞ2ÚQCëH­ãÌ:øŒèŠÞ9ã8}ií³"GmÉÚú̈T9u®F¹ö埙Í9}-o FX\6Ï¢4n}‘2JcìÉÕéÕtý¥êþMT'á}BðåVÎéÊà'~wø+ûÈÏ«ï¦ßŸµÃÛg5!i=äëFÚ`%ó¹1Ë:Ì]£Ro‡ø[ ˆ¿éh“øÆÝ‘ìn é6>aäâà žÅNH;ªµ-u£”™:Í3>¾qÖѨˆd"ëÝxcJÁoÛEÄ_&žW9§\±ø3åÌŠ€¼ã÷<‹Òflr¬ÊõdŠ»T8Ùº×ñòÁ­¿ð>áÍGT΄ ÊP@üîÉÅŸ-o¾>t°é|ïÑ¥õ¯ÛwdÚûºêG£²Ý¦Ro' ó§îõ^WûaW•yÊÔ®OôÙÐé¿)ª£i?ã°ìº»BÆÇ§ÕŒ–<Wÿ+}DŠ×ŽY‰¿ÄÑäò­XüŒ�ùPîY”Ö'’\t[DkÍ®hÁÐSƒá™üŒ=nFïõÔMŠIû„'MP9§)Cñ»'¦Œ{¿·Ï¦õ૛є±Ô»»´¡›TêíáL¡þõ^WûaW•y.BüÉYŒ½^ÏüÔªíx=ÙÀ OÈyv¥ñã)KÉg8ÜQ«ñã·câϤõ:VÁä;5ema×ÇÙõrš\~éz‰ˆÞ{9Y7XJpŸðä£_Î)ËP@üîIÅŸMçØà£ =‚ÒzðÕÅÝäÓØÙg@¥Þñ·Óø›œÿüç?êþýûê·¿ý­úá•§îý/OUâO‹Ÿýëê¦ëÔKG†ÂãÇÎM‹ŒåÕü»¼ŽôâÏnª°‚¦ÀQǶºŽºbñWÐn>ÇŸfÒêgé -˜?QƒÓùw 'kcvç°±ª'#§õ Á—OH9=õT?ñ»'ÉÏKkjkÏæÖÄìÞJÇÉö©´|í½¿ûQ~3R@¹ÛJ¥ßÒÍsí îõ^WûaW•yV%þìèÞÏ~ö³È~_hvCC‘#0s´ÎNíÕNÉ÷,yOì`.'Ç^h »b/òLß8ö¬³|¶%etßeÐH°Y§™Ýí{9Ù*Ø%Ïî²5»'“Ÿ#Ìej§°ÏÖ6WüÙx޽Ѹ3¶Î´ûÛëêmÓc‘cíuEÏ(mºïê2E"׊8“—ŒÒ™ãf–6öÔq$ãͱ¸ý·çïÕé¢Q¦Iû„àŠh›ÍÛÚÇKÚå‚eð}Œ :{¢úƒo?vr¶Nœ~aß“ëÏisøÚ[úÓŠs Žé׌üUƒ4ÌŸº×{Ö>Ù™úìÙ³Âðõ×_›˜Õ²ˆz«2O¹EDžlü!(AžIÊ9€¡>ŠF÷ÊB3°Î1c¿ã€b1äüN„ÝW{±£*{fœitmÖñÓäü³òõ]ÚÉÇÛßIú9{ÅŽƒ[yÛ†‡ñˆJòÌ /í8újÇæï=¿O°kÉÌ;dd¦+cÅ›}z„j„'ÞïþWý.gÛÓL<×^{ÆvöZT=sþÄžûÚn+nl:’ö•´%gj³ýNÄðÔàD \±Ám'sþ`úœ?wp’6vHåó-\ÒýVÄÜW™rFÂçeÈ3:öGDÔñ0ð³‰IO1#yÞÏXJ€§Íc…²ó¾¨½_ªýž¶9é+R¬ù« ©x˜?u¯÷¬}u9“nõV×¶ Ý+ P5Z4mj^8Z�PL¥ßÒ8ÅP÷zÏÚ‡ø[<ӌ’Wœ)L�€I¨ô['°ê^ïYû¾ûî;¯è³áã?61«eõ¶È¶Áw‘ѽ:†ö2ZÇ•5dÇ0�@•~[¶û˸¾Ô½Þ}öùDŸæÁ"êmÑmõÍ7ߨ;wî¨_ÿúב-³ ‹`Qù΋d#AÈ1�€*ý¶lû—q]©{½ûìó >7Ìã6ŠEÔ[ÝÚêoû›úýï¯~üãG¶M ÃÙ‘ê÷®©åwœÝ«uBÕ{.Ç9cFx5²[u?v_³û[6âì«ÞÎÆ˜;©ýgo1Tú-X u¯wŸ}UK2 ‹¨·:·ÕEFÁÅÝÑ*»€'q@fwhÑñ3b´ã²hWnÍ9} zûEçä5‰ ˆ¿ ×ÁEúi EâϵÝû"vL%þdgï爗ŠË”ʯ9Tú-X u¯wŸ}ˆ¿ú3ɨ d±ÇÊLè€ä|¾«ïÍå Z{Æ_óÄŸœ·©6 Iƒ)ûé…ðØ^tès�²<âꦻªÚ2åók•~KãCÝëÝgŸ=“®(ÈÙtU³ˆzkêgdܨ d™Æ™sÕrçžU„{ˆ¯yTÎãC’ÇÞ§ÛffYó¶O+þÌ™…îaÞ•–É›_3¨ô['°ê^ï>ûä gŸè³aǽ,¢ÞÚòÉŽ Ö›SuÔ¿®¶Ö®h¡óH'ÈÆ‡×Ž*tܽíøþU]®KËj§_tÀ¬‹¬[²/©åÍ›ª-ë€2‡×¦¶êŽurø­sSCü¼ìÐÛ郇WÔÆîAº¬â¯8”ÑY›uz¤ö̩ɦ”3ç™çáR›d­Ö ¹ûV×Ùð£2'ï±ÂAÒÚP"€êíüä¾ÚŽÚLÛÒ{ªŽû×Ô®m/þ`[Êb>î«í]·®BúŠ´yot°tÖ±ñfv}ZY?S©2ÛƒžÝéä~ê’9”;g™g¶Ÿ:Ó·±8Ê®+-±Ý§Ãä@ìä&ÉÖ£÷Åùºâï…:êmfú‘ÃØúr(ÌO^ãök±{[íe6i¥âxúbÕTú-m N Œ ?úѼ¢Ï ?øÁ¼igæMUyþéOR?žËF™,2*X_Ü�ô—ûúoÔnä�ì5R®Ó‹¯[J®6ÝpP¾`]çíÌ]Q›ýcOœÜÕÆŠ8ÈÑûã8öª2Ç\Í5_Æi¥FþŒÉÕYöʳ"gs~²§6×Þ5»„µ>x_;ÝŒÐóˆ¿ÒtîÚ,:7ã>¢4Z¨,­½§®í|‹{½œ3’Sn“+(–ÕúÖÍõmž÷DÓÕãF½êMÇêU-4c'—Ê0i‹uµ¶ó$vÐæ:»Q]…ôÓÆË¿TýHPXQbû€}Úø~¢Ÿúê ²ñª±ÃÈæDغuÐOóø>+Ö†Œ]Ç7Õæ¶\5—þܷ݈¿å«jk÷Aܯ"[Óis˜tþ‘¿ò~R_9|ùEïvî¶×ݹ]NâØÏLÜöãúòlhǰ¤¨JPÌŠ"ûä2Ÿè³áÅ‹&f5,¢ÞªÈó_ÿúWRg÷îÝ[˜¬3^G•yÿœu‚ÆA—MÅš/ÿ´“rGŒS—÷»ï1bjäH|â/~6Šcj™Ã4Ú©¥~ï)GNü¤sGh¬‰Þ:Ê–?Ħl!ÿÌ+rÄéJëMÊŸºcWâØ‘?±m%-úO÷“‘¿ ¾9ü·SvÆcÅyVP¾\;¹ýÄæŸ®y¶êŠ’l™û©—\_Ñäìrë/&¶Ó÷¹Ë´Ÿ¯_yûZ†Rñ7¾•Ö—¯ø“gn;gûµ}¯ky–úÌT âæN‘àyøðaJìeÃçŸnb¶‡*Äßáá¡ê÷ûêîÝ»Iݹ"!¨¿j }fœCîËx¼Cð:³R§j§¡ßŠúÃÈ‘Ù`H¦EÇŒX§©ßŽ=Y‡’ÎÆ™TüÙ䫳ü3}—PToÖ&™‚‹îvëÜæ+S®×U?5…WÔNé¾Ûé–Ň¯Ì–¢~â«ûžlÝJˆÛøÍÄýÔÅ´qÒúýI=è8Û×SB-ýsŸeìðõ+o_Ë`âL.þÆ×—7Ko~–sÝÕöÕdÙèäËì„Õ‚øƒÚP´îO„Œý·mȗˬñ Ê-)"e“Æ_|abv—b'dŸùLŒ/íˆ"qès@v-×-(zj0ü 3rbÒdm°ë’D¤ôÔp¯\ŒÆ¢®ä÷–¬ø IçuÈâ/È&_åŸyŃ€z­ù§/ëþâ)À>^ó ‚hÝ_$CúÊSõmsŸ¦Ÿøê ¶É/J„Iú©;ýlâÉ(âÕ÷ÔÞÁµ‘ÎȨÅ÷Ùñ¶ßÜÅ߸ú* @üÙõ|Kk[ª7x¤ö²ý#šb–ß›eæçKɲ„êAüAmp¯y‘"Aþ/¢EF³^¿.û2j&³25në°(H=wb'dŸ;A¯³JuªÖyÚµ\šHf­Zâ$ŠòsˆÔh}Q!Yñ’ÎëÄ_M¾6È?+oË$õ&bËnÊȯï<?¨žÍYZï©ãsŸ1®m¾>—'û®~â«óžB1qQñ§1m(åys´«Ö¥-MXÚØS_e¦|_xÛÏׯ¼}-C’ÿ¤âo\}àË/³ž¯èƒó“¾Úþ͆³¹¤P+>ýôÓD¤´YôYf-þÆMÏëžäºSì„FÏ|qôÓØi–9 sÎ;C¹8â/ÉÛÝ%*ˆ°¸¡zÖ!fÅ_H:¯CA6eÓùg^ñ%¤ÞNï«Ý›®ÐsGƒ^ªýÝ´Ð3¿²éMƒúб!7¢¨…éaÿQºÍ'ê'þ:ˆŸéxÙ¦gµÛ;J6ì¸ïñ×y&îʫ޵wÓíºôµ¶–?ŸÒWOÞö›»ø³v”Ô—ù1E.?ßçÑÓ†"WÞÍÕÏ<AüA­øòË/;!ú,³R_>Áç†yœ—Xì´ë„ì‹þ <ù‹Ýîµ»!u¬hWÞjò³»R stÌùɾÚ^{;jïxÙWÆù˜çˆ 59>üD Nß;ÅAý[ɳoŸÆÐŠÑqòÎ#GD¤‰wJJÞé\E1LùÝgéìNFW Û”©[*ŒtF°ÆÛdÓ¸NÛ¶Iv$Ì´åÙÕxv›[áPVoòžËÎñÑQËfäOlYqŽŠwó^Nl é+¶_dËì”%yV¤”õýv_ØvÈæ—´KH?u™‡D0¹}Æ>K 0Áécîï|¶ašêW¾¾–Ãô™H ZQï{Þ~4¶¾|äóûÖÜø{ÄNÙk»Eü?Òåû?ó¹Îä…Q[$íSÑUˆ?¨²¡é¢O>Ä¡Lw²¡Ã'øÜÐA]Žu¦£/ÜxŠ*ýeœ8'ÇÙFÏ£5<™³Á¼œŽÎ‹¾Ð÷¢óÓ$ý {ö[rN˜ò9މ=#Ï“œI¦hr6š9ïUì<GkÐü¤ÏsGܬŽËgt¥(uòIi·b§í>ÆÂ+y6…6Y±–JóÔ8ñì{FǪäÏi´Ô[tÅØ3§ÝÜ:¹Âë¾:>ê™óö<õÔWÊδ"ÅüÎþqÒOŠê gSö¼¹€~ZFÔNéÌÞg¥},mûñ0Ó¯D4}µ—îWî(ZŠQ;Ggj±Þ$ù¸úÊ’É/š¶µåÑïÐí»;8V¯¢²;ý)iSkƒì;ˆ?€Fáÿ@Ï6dq×K‡��°`Ξª^ï‘G\¯NúÛj+%œ«ñÐÆÝ,a÷#�@ Ñôòº³”Áå<^Þ1‡µ€ˆ?€†²ÃW6Ò��À‚±»7v2çEÊúÀÔÍ e%ñÐ`d¤ìàõ >7T}; ��„!ÇÝ”;±“¥<²Þ5{xxµ þ�æ„o­ÞE ™î•8���Ä4Ñzþü¹ù©Þ¸6BÂ8dç®{.bQàPg��pAüA#‘éN÷@ã®nfz(;â…¾��ñCFû²÷×ÊÏ]>ÃNîEöÕ‰ˆC���Ä4†ìh_6ÈÆ‡.Oqf§E��dAüA#a“Ùò?]í‡Q���ðøƒF ‚.dsƒ ��@1ˆ?h ¡£$»\��ò þ Q„ÜakƒÀ¦n,»˜ƒù ��àâ þ qÈFŸØ+ ‡‡‡›{Ÿ>}ÙçÎîå�€™øƒF2‰�”À~¿ß˜i`zöʶ۷oGÿÞ¿ßü��àb þ ±„À½½½äߺþ‰}²K×WFÿ��`V þ Ñ„ À:¯ýÑ÷ìÙ³ÒÍ,2Èè��ÌÄ4ßìˆY]ϼ }6ˆø“xŒþ�ÀEAüA+õ|®ˆÑ'‚éÏþ³‰QDðÉheÙM%EAÊÄè��\Ä´VVT}øá‡ÑÈߤ÷ýŠ€”wˆ@«â®àÏ>û,'ê& Ÿ|òITN��€iAüAë8::RwïÞxŸL©fÅ–ƒ2=+‚PâØ`™DŒ…¬Qô±ãùóçæ-���Óƒø0ˆÀó ¯²`d %¡èNO‡-ä¶��˜ˆ?�Ã4S²"þd”q’¾ã\|AÞ-#…���³ñ`ð °qAÚ½{÷&š’•QBß»l@ô�@• þ�4¾õ~!A„š™2žß(#¢��æâ@3Íz? "ØdÚW6…L‚»ñC„ ¢��æâ@º/DüÉ¿"à&EǶ��À¼AüDˆÉñ02 ºùÊ? ���M�ñP‚±"›9D>~ü8…6Xñ'G·pó��4Ä���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@‡@ü���tÄ���@gPêÿbý• ›+q����IEND®B`‚������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9aa_T14.png���������������������������������������0000664�0000000�0000000�00000012526�15030617045�0023336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�����¦���dÎÝö���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ëIDATx^íÝï‹\UžÇñüý@ú`%Ò y0 ¡ÉCâCÁ!DÝ¥‰’%T¢;¨™!Î h CË0=a&î,-¦ñA‡ÝF°¶ÃN3b ¤EƒôºéÝüœ5!nBû»“ún}«î·rëö­ªsï­:}¼_pHwuusëVçû©{νµN���R D��€T�� B��H…��R!D��€T�� B��H…��R!D��€T�� B��HeÍCĺuëäСCi4ÍwÞšÿíß¿¿ñ‡üØc·�½Q�Š#¯ûŠ×ÝšÿíÚµ«ñ‡¼uëÖà 7 @qäu_ñ²#D (�Å‘×}ÅkÈŽB¢�G^÷¯! ;B ‰PyÝW¼†€ì($ @qäu_ñ²#D (�Å‘×}ÅkÈŽB¢�G^÷¯! ;B ‰PyÝW¼†€ì($ @qäu_ñ²#D (�Å‘×}ÅkÈŽB¢�G^÷¯! ;B )W vMNù¹<4<Ô׺Û÷ÉÜ+Áª-Wû*$¯ãФx!âòœì þ£·áQyéíäòJ­ûýmXÆfÏÉÊÉ Žý¹µ=2{iEn,LÊÆðí?zMN|ôÖ(&¿”#w4ï7´Iv˜”‰=?nôçfYNNl½ÕW\›•KR“•ËËüÛñÇdëð==ú¨ßÿì¬ì½gH†'NJÑË›=ypóÌ´<ò£dîâwÁ-ËÓ¾ Ë븀")^ˆP+'eb¸Yà›´ þEÞØµE>ô±|ܺú~J‹ôC·BD£ ·ßÞ°êwoÊõã¿’ûÞ·öm—çæÿZï5lY§÷Ê}c¿“cK×›?[ùBf~& 5C‹›îã¸5æòåŸÿY~ñÛ)92?/‡÷míÞÇÊ’Ìþä ÙóÛ}uC®ÎÿTÖ¿xL®· ]^‹u^ÇIIBDSíâ¬<¹þgrìúÍæ ý µ 2·÷yõÄUùúäë²åÉY¹Jµ³3òøæ_ˉë7‚[Läq{r a½úøA.ÍýTüÅȧÿº§Â!âšœxuKð»÷ʾù‹²|æ¨üv×fªß6ôÀoä£åàµSË‹ÿ&ÁÏÖ­’á‡~.GN_k…ÇUG¨¬mœ”…èË £š|wb\Ö7~·þúšþ'9°cSÐçyxâCùÒ:¬]—¥÷¦B?¯yÓS21÷™,·'Ú\±ç%«£G_õG¿ÆTY©B„Ô>—éÑrèô×ÍïÛî·ºÐÖ–ÏÉÇ‹W‚‚ùymYÎ}ü¹\ ¦G!aÛrú‡ú÷?œ–©GvËô;|ý,MÉ–CŸÔKOÔŠ\Y8&Ç—¾ ¾ï¥^¼Î}&‹W‚ÇŽlkû˜M÷Qûâßåùm¯Êñ/¿“K³UŸÈ¡-÷ÉØ OËνh9ºyVÞ{kN>ý?݃+rùý×äáÑ_Ê‘…/šÏU½€Ÿyg¿lºïu9žÊªý·ÌìÜV—ׂÒ¹¹8%ÛêÁfçø¿È‰³ËõhQ“ï~'›‡'䤠vM>Ú#÷휹O/ûï;¹üÑe׆Ger!¿ÇAúQ¬GGG1;;Ü’]?ÆT]¹B„œ“Ù±‡dâäróÛÆýšÿQ4[·i…n…ø[Yœ“Çg–‚w¡+òÅÜóòãÉSò}ãû^G2踭a]ú¯]”ùç•çëïºkõq"êt½ÌíÊs3ŸÄ¾ƒ¯]ý“¼´ñùÕ #ûb‡L-¶&ÌD¾:./¯Væ.;zˆ?%Ò8Ò±sFÎÕjòu=Plý½,,¯>Òµ0ù°lœ\ˆ °ùi_>ÜzœóçÏ·fÓqUW®Ñx‡9&ÓKqïâ{ú.?ÿþ”Ln¾½õŸN«mø•oLhÈxB¶M}&v0|õÂÎíõw‹®G#B2…ˆzØ™ß/›ò®\jKB„jçÑiYŠ VÐooí·HÚÛ¶/G¶’Ó™*øWõ 0*£ÓŸ!Uý çfž ÂÁ×rúÐŽÈÏþìÑGÁòÁž»,¾ùæ›Öш^x!¸5›~Œ ¨º…ˆšüpú y0|æDÛý"Ó«t*Äõw'^“‘U çôà²wîBýÍCÏ[F§dQ§;Úô /=d enφÖ–mm(ë»çµeÛ‘œç'eý«'$þ• p‡cÐjŽ¿Ù7/Wƒ[R‰¹*Ç_~HöÍÿoýkÝ¿ÛÚCj výCßü÷2µLáåPú}Õnqq±õXýXѯqUV’QK’ɱíòäÌÖËDÀ©�›…¸öW™îoåÅcW‚LŸ‘³šjWäÃñGåçÞ’?7æ´›÷Y¹ò±¼Ýë̉n2…ˆ(ŽD4‹óvÙ3w1ø>ªO¾.÷mÚ/ïœ Î²Ñ[—ÿGþ2÷Gymz¡þÞß脇c‹{"qS"7?“©mOS'õ°rì€lØôò¶­Ñ¨G +ŸÎÉD=|ìš>}댤êg±¶iM›6ÉÕ«™¢[_ÇTUñBD‡ë? <./ ÍqGï×ñ·‚ím¥«âEæÆ‚Ln´  …æ#¿c«ñõ”Î#¯É®­÷ÜúÙð2öÒïeþL©Œ¶¾ƒÖ¶ 7ê›ølk•~çûœŸb°ípV[’™Ç‡om«ÅL3Õ®Éâ;ã²Ó®÷QoC#;åÅÉ#r¼qú®†±½±Ïý‰Nõü^ÎÎ<zœ¿“é¥o§ohݶ¥y„BÇ47!»6Ù˜î‘dê½ÿÊõ™Êž›~èç´F?ÇTUñBPG(Ž~ï«~Mkô{\@"PH€âľ:xð`ã1³Lkð²#D (�Å1ˆ}¥Ó ôqÓNkð²#DxÓåL‰pKtµÃê²ç+—g[¬o߯1mhû”,V`_ÛööÛ©S§Z­_'5¨qUBˆ@!Q�Šcûj||¼ñØzTBN$ÁkÈŽB¢�Ç ÷UxZCE¼†€ì($ @q z_¥Öô¸€* D (�Åác_éâJí#É´¯! ;B ‰P>ö•žæiÓzú§ ^C@v„ 8|í+½ð”õ¥¤êÅ׸€2#D (�Åás_Ù´†^»×´¯! ;B ‰P>÷UxZC?¬«^C@vkþdÈ4¶ @z¹z"ú‡M£Ñh>€ôø P:çÏŸo…„NÓ„ ;þ‚�”Òììl+(h¨�Є�¥µ{÷îFˆÐô!@i…§5ôÈ€þ"D�(5¦5€Á!D�(=¦5€Á D�(=½ 6Ó@ÿ"�T‚žêiAB¯l ;B€JÐÏÒÐÏÔСŸ± ;B€ÊOkè§~Ȇ RlZC?¨ËeZãƒ>¾Eˆ�P)I§5ÆÇǃ¯�D"�TN’i =b !@%é—i ½©â"�T’Nkh€ÐÐmÊÂåhPU„�•uêÔ©FHЦ_Çé2€*#D�¨´ð´†ˆ²ŸX 4 Ä…„^Óz»6ÖE�«"�T‚†½F„¶èBÊnÓv;ë"€Õ�*EÀ†½FD80è÷z{tZÃBë"€Õ�*G¯aSzá) .\hÝvðàÁàž·Bë"€Õ�*I6ìÞ½»´=ýôÓ­¯5h¨ðÏY´#D�¨4=ê Öî¿ÿþFÐ߯º !@åé‡l…µ‘‘‘¶ïY´#D�@NUØsuj¬‹�Ú"�  Óv–F§ÆºàB�Dèµ$â„¶ÙÙÙà^��C×IØ)Ÿá¦G*�4"� ƒNë$�4ñ×��]è: û.kv  ê�à@×BXˆ`]ÐDˆ��GúYºN‚u@!�Ðuá© -K+:B�$W h´4­è�PY �ÖF™^?ü�@B„dAˆ�€ #D B�T!Y"� ÂÈ‚�Fˆ@„�¨0B² D�@…å©èůòtnÏÑ£GŸ9‚x„�¨°µ,ZœõcÊ<ûQåyjˆW¦ç‡½ � ù.v´a÷îÝ­¾‹Ð¯LÏ{�tèu´AoÓ'×û\½zµuû èxôÃÇt<£££mcÑæ{<EW¦ç‡½ � ¢ØZý„P{üpÓ£‡–ÅÅÅà7n±ûôS¯ñh˜Ðñh¸ˆ²û ^™žö2�$Ô"ôÝ}7ö;Yô6 ã)³2=?ìe�H(mÈr´¡ûý¤4 èx4„Ça­Ûцnì÷¯LÏ{�r-®ïî]Ž6tcåBÇ£Á ëцn챯LÏ{�r-v¿<·´Gº±Ç΋7ß|³ÔôHPäíùÉ‚� ¹»O[?Ž6tcýä$Ï]wÝ•‹ ‘§ç'+B�$äR| ×¾|ÉW?½èÚ‹5]°ºÖAÂÆRåØ �ðÈ¥ø,®}ù“¯~ºÑõ(ÑklÜvÛm×:HØxÊ [�¹Ÿ…µ/_còÕO7΀iü»–AÂÆRåØ �ðÈ¥ø,®}ù“¯~:ÑK„Û´…/þþûï·ŽP¬U°±”A9¶�<r)> …k_¾Æä«Ÿ8áuwÞygã_]DjAB†‡µ 6¾2(ÇV�€G.EÀg¡píËט|õ^±uëÖÖ8ô,½V‡~­Ój-ƒ„« ʱ�à‘KðY(\ûò5&_ýD…¯¼ùÊ+¯4þµÐ ×‰Ðï50˜µ 6Æ2(ÇV�€G.EÀg¡píËט|õ¦SÖï»ï¾ÛúZÃҀ`·…¯±AÂÆQåØ �ðÈ¥ø,®}ù“¯~L8 ØeÄí{â0v[ôꜾƒ„£ ʱ�à‘KðY(\ûò5&_ý( ö9 ú¯~oÓúo˜ö©W±Œò$´mePŽ­��\Š€ÏBáÚ—¯1ùêG…×Aháש û>zÄÁ.më$¢| _”c+�À#—"à³P¸öåkL¾ú ¯ƒÐS7÷iˆÒPÑkl>‚D¯1I9¶�<r)> …k_¾Æä£Ÿp±Y°ëAè)Qá£ÝÂÁ ƒ„¡ ʱ�à‘KðY(\ûò5¦A÷£ë,,h‘·Å“á ŠcáÀÎÚèdAÂÆXåØ �ðÈ¥ø,®}ùÓ û± Gi ‡[ó  ,;±Å•qG*¢$lìePŽ­��\Š€ÏBáÚ—¯1 ²Ÿðé›¶ÂØYqg_û\ =’ábAÂÆ_åØ �ðÈ¥ø,®}ùÓ ú ôèú3ë·[¡¶†«~‰¤ýçY9¶�<r)> …k_¾Æ4¨~âÖA›âèu„AÏÆ×iÝD áþ³ ë¿ Ê±�à‘KðY(\ûò5¦Aôcë´E¯ÿ ìHžâÙ‹M{¸Ü7,º ³×âÌNl;Ê [�¹Ÿ…µ/_cêw?áë;Ä­wÿ<ü¹Øª\WF…ƒ„¶4AÂ~· ʱ�à‘KðY(\ûò5¦~ö£¡ÀŽ2tšªèt™ëNlqe·³8ºÉ$ì÷Ê [�¹Ÿ…µ/_cêg?á郸£ á5®Å<¼¸R?,AÂ~§ ʱ�à‘KðY(\ûò5¦~õÓk„Òâm÷Iìw’,®ŒJ$ìþePŽ­��\Š€ÏBáÚ—¯1õ£Ÿ^ë L’‹G…Yñ^k"©4AÂî[åØ �ðÈ¥ø*ZÄ\ûò1¦$ãéD#¼B¿sáÂ…V_ŽTtb§„º®£è&$zÅîWåØ �ðÈ¥ ºPh¡  v[ZvtAƒD§ë1è;þ7®ê3­×5$ì~e@ˆ�€„\ŠÀ …}mïÒóÞÒ°3'´ÅM è»ÎC^!�БKèW¡Ð‚¤kâ §‰ÐBÛép”ý^z†D§ñè„$㉠Ÿ5]ã Ïƒ¡ßÇåºØã$ ÑíÓ° s®ã±û—!�r)Y …"½šb\¡Ö¹wýYšâi‘”'<ïo-Ëx´0Ç­ƒÐǵõ Ö4Ld9«ÂX(q]\™5<û½2 D�@B.E i¡Ð¥ïâã µ† -^Y µ=ž Oܺ èuØ>‰ðQ}\+ØÑ~ûŒBª}wÓ¯ð`ì÷Ë€� ¹×BÑ©PkÁêw¡¶Çî¦Ó‚MÍ~q£G2¬ýZ[¸`ë×ú<õ›>¦=~œ~‡cS„�HÈ¥t»O§’ú½ÞžtŽÞU§1i0ˆ6 ƒÒd}=óÌ3mS8:-âZÌ!Üw8¬Å…‡~ŽÅ³ �KˆÞG‹T¿H¦eý©<ŒGßú¿ûî»ÛÆõݾ+ ¶½ƒ Æ» �K°ûhŠ+Ô¶ qÐ…:,Üwx,v[?H&qàÀUãÐõ ᣃfk1ž}öÙ‡c}”!�r)vŸ<7 7z4Âgp0á©„<µA†c}•!�r)vŸ<6*ðùn¿“¸±­U»÷Þ{ŒõY„�Hȵøœªp‘·ñ¨¼ŒÉç8�Pae*ð�Fˆ@„�¨0B² D�@…"!�*Œ,�Pa„dAˆ�€ #D B�T!Y"� ÂÈ‚�fE€FËÒÊ€� Å-i+B��H…��R!D��€T�� B��H…��R!D��€T�� B��H…��R!D��€T�� B��H…��R!D��€T�� B��H…��Rù‡˜âÒµ�µ����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ab_T105.png��������������������������������������0000664�0000000�0000000�00000013041�15030617045�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�����­���]r���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¶IDATx^íÝá‹TWšÇñþúMÞ%/„΂/‚H¿0˜@FÜé! ’™¡c‚‹Âî Îb2 Éf_ØÐ!³7kv–&±q¡e·É‹c̸“‹¢„žltTLVžQ:&&­õl=Õ÷é¾UÞ[unÕ½§ï©ú~à }»êžÓuKŸ_ß{î©>��Èá��äŠp��rE¸���¹"\��€\.��@®�� W„ ��+Â��Èá��äŠp��rE¸���¹"\��€\.��@®�� W¥ _}õ•=z´ÖÎ;m��!)U¸èëë£Ñh´Ò6�n4æØ�¸)Õ¿–·Þz«öø¥—^ж�£0„£¬ÇŠ÷ á]Â޲+ÞC@6„ t= C8Êz¬xÙ.Ðõ( á(ë±â=dC¸@×£0„£¬ÇŠ÷ á]Â޲+ÞC@6„ t= C8Êz¬xÙ.Ðõ( á(ë±â=dC¸@×£0„£¬ÇŠ÷ á]Â޲+ÞC@6„ t= C8Êz¬xÙ.Ðõ( á(ë±â=dC¸@×+Ea¨\“3‡ž—MýKãé»k§L_^ˆ�UŠc• ¬ãÊ*ÌpqeZ¶÷GÿAÇÛÀ<{ðc¹²Piþ¸Zá© " 'et éûÖ¢ÇÝš‘±5±ÂÐ÷ì=ñ—Å~âjEä%Ù¼öžÅÇõÊæÆdtûƒ‹ûq2/'GŠõ•І§äK}èÂe™9üï²d ?ôWËÛïpKæO”ƒ‹ãêü¹Lœ¾&Ñ+µèË)nì§oµlŸ¾= Lö³¬¤Û_LȸG¦/ÝŒ¶ IŽU’²Ž («0Ã…ª…‚í2õ¥ýæW‘…+Ê›[×Ëcû?‘o£­w>NiñÞ Ëß_89*K:ö8sý÷òâš]òöÛ;e`×a™««Îó2;±CÖ ¿.GÎ^_,ÜZü'Ÿ“‡û£â¤¡ßfcüóqÙÿ¿’ñC¿•£vÊRÂEeîwòì}Ãòæ§(ªAãÓ“-÷½ GænE¨Òp10*'»ì—é•/ ·dîðß˪gŽÈõh ’•µˆ—u\@YuQ¸XT¹4%O­zNŽ\¿½¸!×p± —§wÉš½Èÿ-£ëÿN¦.}}¯Ú÷ùIyâþWäÄõXÁ®I)Me1iÛ«¿7Ëõ#ÏÉ@]q»*GžÙ(;ÿ_ôuá¢êšœØ»>zÎ}Õ×ç’Ìñ®üÓÖû¥¿º­ÿá×äãùè½¥!mö72}¯¯¯_6=/‡Î,Ÿº53&k¢þëÚš1™i|›¤ªÈÍ#²ªöÜËÞ‰•6F}®–ÇF??[‡•ërö½ñØ÷õ,ÕÓ2:ý™Ì×ár²×'ß|óœ:u*úª3yŽ è].¤ò¹L m–ýgn,~]÷¸„"_™— Ÿ|.W£K)õºZ<.|&³W£SÙ•³2ùÄO«ûþºúÅ ™JŸøCµt«›rvbXÖïÿ´ú¬F ruæˆ;«ÏsÑÐoÃÏZ™¿ ŸÌ^­îµ^z¸ø¶:ÖŸÉ–ÉsKEOä{¹0ù´¬›Y¯†‹»þZ¶ÿb‹¬í¯¥µOÈ‹ñËLj«0ÜúTö¯_'Ã{þV¶ìø—Å3Q·ÏË{oOËé¿è+¶ W~ÿ²<6ô’š¹¼x,ª…ý‹w~)ƒë^•“7b¯YåœLnÙ {O\‹6´çöì¸l¨ž-#ÿ!'ÎÏWeE¾›y]î·@X¹&§Ç·Ëº-£2}úJôþ¸)W>þµl]ý¸ŒÍ”ÿ¼I^E|nnNkûš¶¶/¯q½¢ûÂ…\©áM2zr~ñËÚãÿcXlÍ/O¤èÅÿÜ7>1)磺Q¹<-;|]f¾Ó YÏNdú³ÖK{ÒØªYb» Œž\)ó3rðå7ä?Oü±ú[îM¹zæ·26ü<11["áj«0è|»~$»&?Mü¿v™iÍî;'dÖŽÕfŸ]º0'òõ1yqÕÏeúŠó©ŠÉ—VjgF¶LÊ…JEnTƒÆ†¡7df¾±Ÿy™{¬>H–T[Ç*ŶmÛjûÒ?;•縀^Ð}á¢öç°LœMú­¿u�hV gÆ6-ý'³ÜÖË‹ÇþTý¾žø‰lÿ,:“QuÇ„ÒÕß]Ï^Ät.nÈ™ý›ehâó†3ÛRδ˜Š|æMùÑúýr¦ìU© {ý³¨í¡ 9›,¬Ðßµt\ZÿŽºcU;ãÐñkøuõý7”p íìSÒ16ú½Ç[ër°×0/^\ÚßÔÔT´µ=yŽ è].¢bøÃ—å„–®{\Ã冩úƲwíóËs9jOK?¸cZ.WsÔ¿¯—Ùïÿ{ïð¬FÇáÂqÎE‚ÊÙ ê¹p¡Eû)Yµ÷„$¿S4Hn®?ë“j1ˆü`ça™‹¶´%ñÒÊœ{qSt õ=¶¡>ÜF*×?‘û&ã³Ñ¥ÂË»ˆk¨Ðýé%½TÒ®¼Çt». Õàpöw26¼QžšüÃòi|ÇÂl’ ´ˆ= Å9òÝ)[ÿ72yþ»êÿâW僑Çåá]oËÕ®‰«Š,\ýDî|hÃEÕ|5Ý¿UÒï¹-ógŽÈo>ÔK"úµÞ}ó?rp×F?Óc—E´holr nEnœ|UÖ þRÞù"º+H·ÎÿQ>œþµ¼<1#Ëe\Ï8<–Xô3Iº´rû3ßð“èLõ=zäY=ø 9hs@ªÑèêéi­†’­g–ï *±¼‹¸NêªísÏž=ÑÖìòÐí )ëWÔ& Š]#o|\úuï¤YýýÛ§åJ­8l\Þ›å_ÿœè’‡ÞzzèeÙªkNØ÷–ágßÃ_d¼$rÇÚÕÖø3¤®åѸ>E5P4]çâ¦\8òϲ'v—AßÀÙñúûòe¯Lè¬MØXzürK¸œU¹&³ïŒÈ[ϤÚú×n‘gÆɱÚmÈ:§eÇòkk÷dº%õ;9?ùtl??•‰³ßÊõcÿ(«—¶­_<£¡cš•­Ñ1îë»GÖn~AÆßûß îQöåI'tÚ~?mͦˆqÝ,Ìpd@aGQÇjdd¤¶_½<¢g3²â=dC¸@×£0„£¨c¥ÂnMÝ·o_´Õï! º…!E«wß}wiÿY×¾(r\@7"\xuI¦·¯^ú*µeZ½­ØëZ*µ»?VÕ÷„Ö¿q\f{è½`?wQtR§î_'yfQô¸€nC¸@×£0„£èc¥·£ZYÖ¾(z\@·!\ ëQÂáãXÙÚÚt¡->Ætº…!¾ŽUÖµ/xÙ.Ðõ( áðu¬âk_èDÏV| è„ t= C8|+½%UûrYû‚÷ á]ŸÇ*¾ö….²Õ ï! º…!¾Õ©S§–úl¶ö…ïq¡#\ ëQ±Ç*¾öEÚåÞC@6¥ú×bÿ€i4­Œ €ÂF£96�nJõ¯…Ë"�VʶmÛjÿÿèŸ�:Sªp¡“«4X=z4Ú�~d]û@:Îó@äÀµp¡·¨êç�há�"z·ˆ- Þjí �é�_ûBÿ ;Â�4гvy¤ÕÒà�îD¸�€:ß–×y�²!\�@½cÄ.4[À�‚µ/€ö.� ÅÅ‹—Î^LMME[´B¸�€&4Th¸`í Àá�šˆ¯}¡Ÿ   5Â�´_üøñãÑÖt¬^G¸��®k_ha~zá�h °µ/öíÛm½“žµ`épô:Â�8rYûBÏZpë*zá�2ÐI.t’g=«¡ßzÿ� ½ÕÎ^$Í­°ð¡kd�½Šp�ÙÚI!¶sÇzá�RèYŠ´…³’Ö¾ÐIŸ.¸c½Œp�Mè m!#¾ö…NôlÜÆ#èe„ �hAÎÒÀÐ2lò¦­}aÓÆ#èe„ �p Á!¾Î…†ŒøÚz¦">CЫx÷€#¼iaB›†Œ÷ßéëÝ»w/ý]wŒ W.�  6™ÓÚ#<RûóÞ{ï­ÛÎ#èU„ �ÈH/‡èœŠxHjÜ1‚^E¸�€6hÀ°3KkÜ1‚^E¸�€Ø#I;FЫ�Сøš56 ñ΀Ä׸ˆ7îA/"\�@Nt…Îø­ªÚ¸c½ˆp�9j\ ƒ;FЋ�3×[Ui´,-$„ �(€ ýÄÔ¤"A£µÓBB¸�€…XP.„ �@Â:E¸��Ô!\ S„ �@Â:E¸��Ô!\ S„ �@Â:E¸��Ô!\ S„ �@²]wC—"·ñ”­!]ˆ¯G� ´’…A—"×Ol a1/¤ ñ5âˆ@|;;±oß>Zê;©ù¢ã9pà@ËåБ.Ä׈# �*º0´:;¡!C‹»}:«m/ÊÜÜ\m<###uã°¦ãÑð£Q¯aȶ#]ˆ¯G� ”waЂ¬…¹ÙÙ -ìZàµÐ7²ÇäÉÎN¤GƒŽGƒP#{ Ò…øqD @y-ÊúÑíi—t{üìD3öœN¸žÐñhjÆžƒt!¾FQ�(P;…!~vbpppiÖt›v}LÒÙ‰flYØ\ŽvÏN4cÏGº_#Ž(�ȵ0¸ž˜žÑÛ_+Yær´:;ÑŒíéB|8¢�P —Â`){k6—£]¶ï•öÊ+¯ÈÞ½{k–MY^£,�P —Â`)csËÑ.ëg%i`ŠÿÌz9ªLÊðeE¸�€¹ŸÅõ/_còÕO½üccˆ·2 SHÂ-�Æ¥0ø,®}ù“¯~’è\‘´ ªÚÊ0l<! k´�—Âà³x¸öåkL¾úI¢áÁú×öè£ÖþŒOª-CÀ°±„$¬Ñ@`\ ƒÏâáÚ—¯1ùê§‘ÞÆk}[{õÕWkê2ñà±ÒÃÆ’°F �q) >‹‡k_¾Æä«Ÿ8gaë‡<ùä“KcÐÛ|íïzɤ,ÃÆ’°F �q) >‹‡k_¾Æä«£¡Á.{hÀxíµ×j×Ûl•…»C¦ ÃúIX£€À¸ŸÅõ/_còÕ‰‡=Sa:õ2‰²%Íõ\³ÒÃúIX£€À¸ŸÅõ/_còՊϳÐÕPã·¡ÚÂ`¶æ…žÝˆ[É€aý†$¬Ñ@`\ ƒÏâáÚ—¯1ùê'>ÏB'l* úu<HÄGã²æ+0¬Ï„5Z�ŒKaðY<\ûò5&_ýÄçYØY Û¿¢,„Ø¥’¸•Ö_HÂ-�Æ¥0ø,®}ù“~4<X?6QSÏJضƃ³�‘| ë+$a�ãR|×¾|©è~4LXñ36ÿBÏR4²ïédÏ4>†õ’°F �q) >‹‡k_¾ÆTd?zùÃ.q¤Mд[Pãôy6®fŸ�ë+`X! k´�—Âà³x¸öåkLEö“4ÏÂ4›W¡oQMã#`ØþCÖh 0.…ÁgñpíËטŠê'iž…IºµQ³3жï„5Z�ŒKaðY<\ûò5¦"úI›ga’nAmdûHš“‘$fôVׯÛX;aû IX£€À¸ŸÅõ/_cÊ»Ÿfó,Œ].Ñ‘&~7‰žépaA­ï¼†í3$a�ãR|×¾|)ï~ô¬îOFR(ˆOÖl,„誮ж¿„5Z�ŒKaðY<\ûò5¦<û±ËÚÒ&bZñw¹Üa—:lEOWy ÛWHÂ-�Æ¥0ø,®}ùS^ýÄ?.½Ù¤Jû`2—‰—ñ}f•gÀhw +)¬Ñ@`\ ƒÏâáÚ—¯1åÑîø<‹f…Ü—vf£‘¯qOy ÛGHÂ-�Æ¥0ø,®}ùSý´šgaâg"\ ½í»ÙäÏfòöü„5Z�ŒKaðY<\ûò5¦Nûq™gal…yW.·­¶ÒiÀ°ç†$¬Ñ@`\ ƒÏâáÚ—¯1uÒë< £…]›åîø‚[í^ÖP {^HÂ-�Æ¥0ø(ZÌâ®l-+ýylþ„.ÕݪXôÑGwô¹ÒÍUÖÇ—AX£€À¸†"‹‡®4©¿Õ[!.kËÊîúÐÖjž…Í›([s•õñeÖh 0.…!ïâ¡ÅVç$ -Ê.w>Øãó  WéÜû0°xÓKŸýÑŠ^Ö°ç§]âH úuÚg‰4cý5ûöfôùñc±víÚL?³=/$„ �(KaÈ£x´*àzIÄçu~U›ço:Fý^;…>>"éCÅÒB…K J£ã´}e³ˆøñЀ¡Ç(ËqPöü.� @.…¡ÝâQTW¶Ÿ,l^Gü’…5žMiv £Ý¿ký3^¤‹qÖ¯þ|­$E/Mù<+p�r) YŠGÑÜØ>]Ø¼ŽøX´éoêº=¯Ÿ4Ï¢èPaìçÓ?Óhxh|t,ÛWH�P —Âàò˜V<ë¼…Vlÿi´`j¿ió:òž…±ýëß}… cwÚh€k¤/¾Þ†=.¯±Ø>CB¸�€¹†´Çø.àqÖOœþf®gFìA¼iaÏ:¯Ã•¾ÖÏîÝ»½† £?»õ?¡A'~|ôï.—N²°}‡„p�r) ñǬTod}êxÒæuè¶Næu¸ÐŸÕ^‹»ï¾»®¡"Î^ý™õ8Ä‘†Šv&kº°>BB¸�€¹{ÌJð$ã°¦5¯y.ôLEã|‡ £?·öÿÀÔGÏ.y|¬Ÿ.� @.…ÁSÖ¦¿•k]‰‚ž4ž²4 9>BŸõÂ�ȵ0ØãÊÔŠž×á"i\+Ýôuñ´¬ß.� @!” á�P‡pN.��uèá�P‡pN.��uèá�P‡pN.��uèá�P‡pN.��uèá�PÇ Öi á� ”T$h´vZH��”á��ô<Â��Èá��äŠp��rE¸���¹"\��€\.��@®�� W„ ��+Â��Èá��äŠp��rE¸���¹"\��€\.��@®�� W„ ��+Â��Èá��äŠp��r$òÿvÃP”Ày~����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ac_NDG.png���������������������������������������0000664�0000000�0000000�00000013127�15030617045�0023376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ü������‡2¯‰���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ìIDATx^íÝ¿‹ãÖúÇñý7\O¹“",iRWn¦È6ÓláÂ,L±ÅB [ÜÂ0°ä €a6páÂ"X¸2æ6Ë€a/¤Ü…ìà&,aHXó|õÈ’G–å²u¤s¤÷ ÉüXíG:úèøèè����0†À ���Dà��� "p���¸���ƒÜ���€An���À 7���`���0ˆÀ ���Dà��� "p���e Ü< Ñh4ZI �à¦Ì¨;öƒú°©Ölw�à.7ûA}¸�y p±Ô�7ûA}¸�y p±Ô�7ûA}¸�y p±Ô�7ûA}¸�y p±Ô�7ûA}¸�y p±Ô�‡jî‰'mÿ9êóŒ·FûL.Ç·á/©ßÅk,ý^¼ôGòQîdÔo¦þ|Ö¤íý¾ò1Ý¡Äÿê½2yÒo†¿Ûf÷Gù¯÷Bw{G}9ˆ£å?c•|.'âMüGÝúýQù=ǪÑ÷õ`S­Ùî�À]Õ ÜêãHúú2Š'»+é·Ndp•ýüù<˜ïiˆ…J Üméf16¬Ñc¯ú÷Ȱû¹´~ø—üÐz"ƒñßá÷#~¾Vû\®ï¦á÷|w×âu[aÐÏH_óŠÏÄ»ù~Ó·ð|C[½?žc…|êƒÀ �ÈC=·o:ÈQÇ“›y~4¸o‡ÒmûAûOžHkp-±È†ÛSÞ.|w?Ák>•Á÷Ç‹£êÛnßÂûcâ9VH]‚Ïtr%çþ –¾Þyk{2 ^6Õº.Û�TQm·L¯eÐz6›ZX Ì÷!;.kàžúy»'Ö@ÆšU5|…ÿÒ¿s¸rªÉŽ¢×ü§”›±Qõ ;þþyŽR‹à£']ÍGÒüNSª'7� õ ÜÉðæ“à5EmãT‰´�»@§“IwøGìë“Ø´’ÙßÌ}JÆü5ï™D#ÕY÷üýùÓÌs¬:=é:ˆNk̦Z×a»€ªªyàÞ4°)pëˆöA/6CG¼Oåh>­$%pëcú﫾·³ÖŒ=Ç-Å_s0Rý8ΩÏw—ÀÇs¬ëöƒX}´nbSAóiTS¹ÿ»V[KºÞõÂv´ç?7&•¼a5¢Ôòÿ]£ý­ü›–ÒhÿŸ\Mbר»± ]iF«Ù•óÑdq*VIôùì+ÇPy=� x™zp':ü•RWîx¾rJÉVÖî¿e<8ž†d‹® ö[…þ4 ¯96­å&Kྌ<Ç ÑšÚG·¿ùjp.½VGú—c¹›þ&^GO¾îdêo VO¼…Õhü>ú^zÞo‰p«'_DZOjv1Ûâ+àLodØ;Z¸®a:¹”^»'ƒ¡ÿ|ƒïèê8?J·åo‹ñ €K’G­óÚ^ìÜî��ÛÈÔƒ;ÑᯔAàX˜OsàF–?O )‰i%: Þ:“Q|õP>Û­–t/·Ü ï‰çX!vîáRÍ2LŽ ë6ØóÃvZ€ÕmzéBH}¬v¦íezpºô Ûn§½ïS¶³ä'Cå!p�ò©w5pO'¿ÈYçùÖË®´&p¡7âÓI"³ðК¯‘­KîýCÚ]OÆ Ac6ÿú0ÀíÿÍ»ÑÙì#ú-÷òûcà9Vˆ•ûÁÒt¦{Ñô}Þ©-¸Wœ”e£!ÿÛÄóYÜç¦ãs9I Õî4y=� x™zpë;üØ\ÖxÛîÆ7«ç%ë¨Üò¼Öðf2K?_s3œy° ?6o6îÖhKßÉ$cÂH>·û¹×:²þh1poýþ¨üžcÕè{a› T¯X²/ë§ëkkÚ'/ºŒ_G±î„w6=f¿)-ùÈ£Öym/6nw�€ídêÁéð÷ƒõ#«G’Óä4ºìŸÜu–––¼¿N`¸Ÿ-¯Sïuw}.“øšùå!p�ò©§ÃlÜ6\ä¨s¥O’SªÂUKºýÄœï<F—5´÷–§é´—ÃØ'.Á4˜¶œ]…+’L'2òúÒn¥ÍC/�‡L=8>`Ñ~ Ó6ô–þþóYjÉ5´5Ìž/.½7x›\ô›>k w/ÝhqÕ|ŠS|:Ó|ºJr©ÂCi÷N\7P.}^ûÊã1T^�(^¦œ`?¨7� ™zp:ü‚¬¸¸q¹Õû4eÑ÷õG­óÚ^Øî�À]™zp:|€ý NÜ�€<dêÁéðöƒ:!p�ò©§Ãê¶èª%ÇÁkÞܪ7ÅI_×¾òx •×ã��Š—©§ÃØê„À �ÈC¦œ`?¨7� ™zp:|€ý NÜ�€<dêÁéðöƒ:!p�ò©×ŸF£Ñhå4�€›èÁŒ>õ‘G­óÚ^Øî�À]ôà�`A�À‘�� "p�8�€An��G�0ˆÀ �àH��¸� �À 7�€#�Dà�p$��ƒÜ��Ž�`�À‘�� "p�8�€An��G�0ˆÀ �àH��¸� �À 7�€#�Dà�p$��ƒÜ��Ž�`�À‘�� "p�8�€An��G�0ˆÀ �àH�ìèýû÷2i´µÀ �àH�ìàÝ»wòðáà LÑh›� Þ8�iØþì³ÏäéÓ§ò×_…ß��HGà2 l�€¬ÜÀ–Û��`n` „m��°+7°a��ìƒÀ ¬AØ��û"p+¶�@Ü@ Â6��È H l�€<¸Â6��ȶ�€ nÔÂ/¿ü"žç…_-#l��Sܨ< Ц?ùä“Ô0MØ��&¸Qy:²ýàÁƒ %G¹ Û��À47*íýû÷A Ž·þ„° ��Š@àF¥}÷Ýwó°5Ï=äÓO?%l��ãܨ,ÁN†mm­VK>|(_|ña��GàFe}ýõש[›ŽnßÜÜ„¿ ��`•4Sƒv²i(×ß��0…ÀJúòË/SöªFð��¦¸Q9©¡zSÓ®ó¾��òDàF¥èEñe�·iúûº>7P��ܨ”øMn¶iºl ®Õ ��` •¡Á9-T§5³MÐ��E p£2Ònr“lz£.Ž��E"p£6-¨Dê&��ŠFàF%¬ºÉMtA$��@YÜpÞÛ·oSÃö«W¯Xy��”ŽÀ ç%orÃÊ#��À&n8MçeGA›»E��¸á, Ù:G[G¸uZ 쥵‚½¨]¨‡›´nzÍ;fCF`¯†³´s£Ñh4Í––öhå6f Î]\\”vmÎÒÎ n Vv£>v¡îÑšQ7{iÈÖ°­¡[Ãw×z±uÀYtnî Vv£>v¡îÑšQ77èô’h)aýoQÓMØ:à,:7wP+»Q»P÷hͨ›[t„»Èé&lp›;¨•ݨ]¨‡{´fÔÍMEM7a뀳èÜÜA­ìF}ìB=Ü£5£nîÓé%¼µ–:ÝäÝ»wáOöÇÖgѹ¹ƒZÙúØ…z¸GkFÝܦ÷õˆævóÍ7¹ß׃­΢ssµ²õ± õpÖŒº¹G§“èÒÑt’W¯^[½„­΢ssµ²õ± õpÖŒº¹C§Šè\m­ÙÓ§OƒÑmÓØ:à,:7wP+»Q»P÷hͨ›ýâÓF4pç=md¶8‹ÎÍÔÊnÔÇ.ÔÃ=Z3êf§ä´ýÿ¢oz£Ø:à¬R;·éµ ŽNex; ¿a‰»± ýÎäu¿-ݡ܆ß.[åDÓ‰ŒÎ»Ò ²³v"Þäcø Û˜úåúßùÿSúí–t‡„ß/^9õù[ƃ“R_wº[Òm6fum´åìjâW«8•Û_R}ÉèÇû÷9hÒö~¾ ݇†2è¶Â(í³_dRB·½ØE§ŽhÈÖÚèˆv™Ø:à¬R;·Û¡tY–ISÿ)õ¤ÑìÊÀûI¼þ“Œ.³ªu úSFý#i´Ïåún×#û2ì~.Íîâ]¾–~ëY©ÛR9õÑ÷ iÕvªaûzð\:}OF“þ×è<é¶Š=¹®~póß×Ñ™4\ï:,à?Æõ¹t:}ñFá ÑݵxÝ'¥œÄiͪ_77E7¸Ñúèt’"§‘ıuÀYevnÓñ@Z­ŒKIÙLƒÌ±ôGwá×å«ÔèãHúÇ2ÿ~cOzòvØ—Q‰çn¥ÔG?%j=Éï}Ìî×GKŸ Ýù'XíB÷§ê7}O[Ò\Ï‚ò.V|ÊøqÔ—Gý‘½;iͪ_7·iðÖåþ´N¦nn³[œUJçŒlÏ:Ö¥ÖödþššNFòæu_ÚÑï7{â£9wc¹ôæà1¥Ý#—ƒ“Ù×Þn£jNwÑ×_ŽßÅkÌÞÿ?Ô~ˆMi<ïFG1} uÐÖfדq|;ÚÑÏã­±WpHyÅÒ×Q=!|”x£–øÔH§î¼Ñ)7‡áÏ[Òõ®ý¸§£Ð?ßÿNÃÇ?ÿ$ƒÎìëÆÞï­>ß“BO ôyÛã£L¼“ðýoú'ïcSA¥ãýnû·2¾<»ïï´-õy´›÷?·\0ô“¾S9Ú'Èï(z°ŸŽpÇ/œ4y;÷8¶8«¼Îm‹¹§ÁèÝ‘tÃyh FÅc¡|:¹”^«#ýËñ,@Ìçï9z:ñ¤mÙè{Ù¢ Ô~õƒ¼îû'5?û5ù[n¼gr¨#aÓßÄë/¹»+9뽑›Äû¨#h‡¹d 3ÏöéËAõÙ|¢¡ûÙÿÄg Ã(´ûU|úÍ™ _øûÕ™\†¿3\ɹÎéÍeÐÇïûûñ¯‰o–•Á-8‘ÿJ¯Oçï÷ôÆ“NðéÌz.­äIªN¿:ûöþÄ6¢'¯‡;(¬¡}êi÷Ç=¦zíNkfeݰ’ïø…”¦ƒ7[œU^ç¶Ûˆ×bÀð£×[>#²Ï÷šÏ[ÖGªë”{ ŠFèZÒÞ$‚­ŽˆýCNæ£tqiµÈ; ?]!MñõÙq$2ùéÍíPz'ÞÒIQpÒ™øÄ)»[{/¥¿4¢nž•ÁMßSýä§w¹|Qâª:ûËóåyú¹ è§o¤ß“üÅÑšYY·ÀìÄ´¹ª~+íúïüŠè€’~ Ò|!Ãàz{éRQ𾸸¿›?[·`£Ò:·S6ôêûÇ®œÚýø¾§…b}ìÇg{ÌçÕQÁ¶e¢• ôé(ý‰`Ä4¾JB²%/ŒÍ9 ¿Ü &•¾Öbmþ”(˜’5H®ã·yÖÇxžZ‹•û×¶¦¹zy&ç;_зŸâë±Éì¢ìô•´Ç‹5ZhË+ä;(à÷·WéŸû)DRôzí›Z—i5¥]ÿ]|RÖ•gÊ££Üº5|›¸Ž­[°QiÛÚÑýhõÙlµa8U$°8*þqt&ÓF÷tŽxgŸ‘¹âç›n£ÔѺP«m?ÊpÁbÞYë}TþôŸâë£òöÊí4˜ªÐh-LÉš…¾ø¨¸žü<Oy ý½ÒÙõ ÷«œ÷rUâ¨\©ûKªu'òYOBó¸•ëó3yYð²ifáÒÖHÅ÷¶tZIta¥Þ2O¶nÀFeunkçðj ;z¾<U$¬R#XÒª%{Ìéß·ë‚IUêh]¨Õ÷ëä|ûÀ›s@Þ<¹…×gí^ dØÅx‘äɤ½ãÄ(y¸Œ_³µÃ§åOKˆØÜÖÈk½N3œäç4( ýeÿåò…è%ÑšÙW7d‘¼˜2ïULØ:à¬r:·ÙÞfÿ*½Öƒô‚ÍÌ.ÀK^½Ò›­T²°ZÂÝ•ô[þA'øÈ: ‡Òlî¹.±…Lª2Dë/rÔO$ºÒI^¬ZÒ“ÓÄœï|rÞóÁwWx}t;mžÉ( ¶zÃ&]Ñ'¸�O\|º‰NÑòf«,¬Üãï7£3iÍ×C×9×=i6>—æçY?…HŸ¯­õŽ_è\ë‚Û†‹õ‰“Nr]z]µä¥tO#£{ ¬81ÒÇ-qz–Ö̺ºa+zsœ(hëè¶©åÙ:à¬Ò:·»_e0_¦ÌÒí¾¼~3 *þÁàú<¶4–.õ7¸_²L—¦ ŽQÈçëRf—ÿ“ѦÕOÒ¬\®Îž¹sú|Š¥£Ÿ+–[ZF]üŽw:•áßáO”ÀsTwXºQO�Ò+ó*ó£¿Xzƒ™Îý2Œºý¿þéþ=OÙÇþ5_¶Q—¦‹bq²ç¿w&—×ÿÍè‚`>F²í¿¬`vúwm°z[]^ s¾:Løs½©Ó›è†4úó•ïñ£l}^¬W\w±ëRª9ˆžÜQô qØ:à¬êunë絺Œ‘Ý*UK?åÉ‚ýÅ=Z3êæ†¢ƒv„­ΪVç6©kuÒ–Ör"»U¦>ÁuÇ)ó¿ÝÂþâ­u³[YA;ÂÖg¹Ý¹é…Cñ»íµ¤{~•é*p—p ²›³õÑ‹XîlØ•óØ4W±¿¸'ÚaŸ²ƒv„­΢ssµ²õ± õpÖŒºÙG×ÖÖºèÚÚeí[œUÍÎmÍzK-~ñ˜ÝôùVÒº ¸’m~Á¬}ôùUɺ‹ “m¯e8 ÑçUÚ‡´Á.ñuµ_½z~·lp›;¨•ݨ]¨‡{´fÔÍ^zçH½‹¤ÞÌF—,[œEçæje7êcêá­u³›ÎåŽÖÛÖ©&Ec뀳èÜÜA­ìF}ìB=Ü£5£nn¸¸¸j¥á[CxQØ:à,:7wP+»Q»P÷hͨ›;tZ‰N/Ñi&:ݤlp›;¨•ݨ]¨‡{´fÔÍ=z!¥ÖM/¬Ô ,Mb뀳èÜÜA­ìF}ìB=Ü£5£nnÒåuÙ@í~ûömøÝü±uÀYtnî Vv£>v¡îÑšQ7wéèvtsõ61ÚÍÖgEF£Ñh4Z^MÃwÞ¡›À À8íÀ��¨+Ž‚���€An���À 7���`���0ˆÀ ���Dà��� "p���¸���ƒÜ���€An���À 7���`���0ˆÀ ���Dà��� "p���¸���ƒÜ���€An���À 7���`���0Fäÿn,š¤Lw+����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ad_SDD.png���������������������������������������0000664�0000000�0000000�00000040536�15030617045�0023405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ò��u���Å› a���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��@óIDATx^íݽ‹ÙºïñþNtP¬´³fsEJ:ð$tP0t`† 48ØÆ Á̆áí sêbØl°Ä> ›æŠã`84‚ v£d0¦i®ÓˆçÖSª%­*U饺$ÕË÷ »ßôRµªêW«žZÚ����k#H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���B&AzooF£Ñh;h�€ÝÉ,HUÆ6PyZ×ô;�Ø-‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H� ‚4¶ê H�Œòé‘+Ž÷úô5Ú­æœÉÅð&ø%õQ\§>÷{v«wr'·2è6b>iuq܉Yk÷Å~Ö™o2¸Òuöƒß­I£ý³üÓ}&þó¦0Éà¼- óü¶œ»]9v\¿²òòYy9V“. TCžÖ5ý�v«üAZÝ ¤{ЕFo/¥Û<‘Þ•ï¼¼øÄ Â3wƒnh5H;ÒÜN~ ³n;éïÿ~û4_ý"¯šÇÒþ|ßðBtÿ™4s¹ºßóÜ^‰Ûn~]_¼×ùXÚî•÷Š'Æ£÷r¦AÝÒjÕå³òr¬Mu¤�Fuƒ´g<ìÉaË•ëivÝP¾éK»väè/2ìK³w%V\Âè©ôoBß½Ÿñ•ôšÅ…ß´¾çæ*AÚ3·|V^ŽÕS•@3]ʹwr§ïwÚ¢ý©äò´®«Òï� ¯*¤çÃf8ϳmÝ =örtGjÍž 5hj¨> þÐçÙO,ùHKG¤Åéº2} ¾—`Õå³òr¬žJ=ákˆÓûmz•£ŠÒ��£ÚA:Šý |â¿Ó––U„‚t-ë8”vÿë뫼còœéÊ7–Ðé7¯¤Ý¨MÞO£-½7EGŽW]>+/ÇêÉý6=á«› ËÓº®B¿€<#HÏée#ÒË‚´Ž@×;VÙ†ŽPŸÊá´¼#&Hëcjð¶F&!u<ˆë½ßztô› }o¹Û¬>¤}ë›U’Q›–áŒåvøÖºÁU[3TW¯ü�=ý¹Ý´\)ZïŸÌ/+òþ®æ¼WVyHÍù«\F¯šÜ¥ß‹Ü(;…K¢vD_Ï}eñ*«Ç�¤“É^8÷;óÄ�¨³j<I,íXÉ ý§ {G“ mÖÈÞ¢À¾R˜_‡.‹};Ø{V]>+/ÇêÑuš?ÚÿNä‡Þ¹tš-é^ åvü»¸­ïý“žñµ+­fGÜЬ+^¸ü$÷÷HhÕ“¥#ëÊJ“2§º=ÓËøZúÃÐ}ãÑ…tœŽôúÞëõ¿£3Úü,í¦×Ç®—”)mAë:«þ’Ï~�Õ‘É^8÷;ó„�è‰P½rÆAÚ¯~>"å:jÝ<“=cG mÖ¿‹­»^#HÏ-Ÿ•—cõäs¦_l<“þ\¼×;^ˆŽ ¦Ú§çn ÔÇrÖž§Áþtî1B}\ƒ~秘m!z%gwÒ��#“½pƒ´?\ëÉÊÓß%Z¤ýKÙµHhõMBA³{9qëÿEœ¶+ÃP€ø&×îcÙO¤ëz™þürVíÏ+Ýgú¼U—ÏÊ˱zr¹ Ì•͘2 }ݱmÅ™]Ö£áýEäõ„·¹ñð\NbÃ2A:NV�H'“½p®wæV­¨ÝVû@–äÚäIPµWÛÉ´¼!üóÒ2 ,Áåksc ¶š#]7ææÀø£|/\ù§ý,Ñ`­V]>+/ÇjÒe‘7~XN˜š.4 ¼‚Eµ2 ãßG¯\Øõõ‹Nd'e*÷+-ÉFë:«þ’Ç~�U’É^˜9ª.ÛÀâÜä‘ß8{'c­¹r#»¾^ƒôãùyÖ½¯n¯Î¥u’¹Ê Ò��#“½0;sT]þ¶%7j-òI´$'˜Å£ÝÔTg1¬a¼3_¦¤å'ûVɈ_ŽâÈÙe0C‡–#¹]qšquÞ»A�™ì…Ù™£êr³ hùD}¾ÇoÑ9 ýšùðs¡yÆý›e­R#«ÕÖú�¡p9ÓtªG»\hZ6’o_œîÛȽ»¥¯ë¾²x •Õã��ÒÉd/ÌÎUÇ6Pi�€‘É^˜ù$Üì7ß²ùð¬G—=ª!‹uU¡ßÀne²fgŽªc¨‚4�ÀÈd/ÌÎUÇ6Pi�€‘É^˜9ª®ZÛÀ‚¾Ÿkå+5Ò÷u_Y<†Êêq��éd²fgŽªc¨‚4�ÀÈd/ÌÎUÇ6Pi�€‘É^˜9ªŽm :Ò��#“½0;sTÛ@u¤�ƽ÷º#§Ñh4Ún�`wØ  ÐTGë:«þB¿€Ýb/ �[F�€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o�[F€r`o¬é?ÿó?Åu]-u#H@9°7Öðã?ú!èßÿýßåéÓ§4ZªF€r`o¬HCôwß}'Ÿ>} ¾��ªŒ ¬€ ��¢ÒÀ_¿~•G¢�À‚4À„hmú���AˆAˆ��ˤ-áÐRB4��X„ XLˆÖ› ��!HB4��XAð¼ÿÞÿ B4��XA•gB´þ ��°*‚4JëÇ2ƒ¯â¢�@Zi”’汬ÞYFˆ��i¤QJggg~Hþ×ýר)ì4Dói…��à>Ò(-çÐmÚ»wL¢�@Ò(ý ;H?|øÐÿ¾ù´BB4��ÈA¥âºn(D›ööí[ù·û7?Tói…�� i”ÆçÏŸýÑæ¸ ý/ÿò/r||ìÿ��@Ò(çϟdžh»éˆ5#Ò�� i”‚Μ㚎Z¨�À}¤Qxˆµö9.4/jú7À��Ò H£ð^¿~”—µ§OŸ.ýäC��€$išNc’5Gš� ��î‹ BÓQ帰×4@3k��È A…¥ŸX˜£� ��6 BÒ “æŒ6� ��6‰ BÒžµ �À6¤Q8z£ ��ìA…3š� ��v BÑO$$@�€< H£044Û#Ñ4F£ÑÊÓtJÛ÷ïßû A…aj£Q<¬·ücmË;]nz, •¯}øðÁ¿ÒlfäÒÿë÷òŽ-…ÂÁ§˜XoùÇ:Ú.–w:,·òÓÑh•~þü¹¿¾õ¾¨×¯_ûŸdœGôH ;Ñbb½åëh»XÞé°ÜªEK:õÃ×Ì$=ò¿ÎSé=…ÂN´˜XoùÇ:Ú.–w:,·êÒi™6¥:b­#×»FD¡°-&Ö[þ±Ž¶‹åË Jk§Mé‡k­§Ö:ë] G¢P؉ë-ÿXGÛÅòN‡åCË;´ÌCû„6-ÿØÅ5=…ÂN´˜XoùÇ:Ú.–w:,7ÄFïòFDz$ …h1±Þòu´],ïtXnÕ”×úhED¡°-&Ö[þ±Ž¶‹åË­:Š0c‡¢G¢P؉ë-ÿXGÛÅòN‡åVnE›CZÑ#Q(ìD‹)wëí¦/íÚ´ûß�ÛÖv±¼Ó)ær{»œŽÔjéߌƒïÁ¦A¹ˆŸj¨Ø’Q(|ŠiëínЕº÷¼{õ® î‚oÆÃž4÷ޤ7ü3øÎÝ¥ïºòkבz»/7Á·ó&_ÛVùƒû²tr»ÜîÒ­ëì énƒoʰw${Íž Éѱtê:3 ýôéÓMe—[2 ¥ÊŸIøÓõ–`†v¶ÞF®´v^ƒ0ØhKÏý»¸ÝcqÜÁÏògûëèV݆ÿ¼õî@Âç:Û cï\§/½vÓ-{{û✽—цŸ·Êû²ûÈ÷rû(në£Î÷ uÑ:­ëYk¢órCá"lÉ(”Ê|tÔc¿x£t»Zowƒ3ù¾wåE¥]ûCúí£˜‘ªüØÍ:ºóÎuÚ;,±ñBôÕ¹´Z]q£I?¹½·}¼ñ×Tù}YJ¹^nºþžQç,h­´ëº~©‡ÖIçñ&Cƒ-…Rõƒ?*]À˃›_o72ì÷¤Ý¨ùϵ×èˆ;ü i³PmµÐHõGqúäûÎòƒÿ8Mi÷~ F*kÒè\¤¥_Iïð4×'@›_Gqt<ÙÝ–„õ¢eAs£äÙÚÍò.¾|,·èU o_á^Émô Ø´ÜC[äž ïwÿûûâ´KCÿï_½zìÇšÒé_¯<`®XÖœòjúºôë¿Êåè[ð[Åcn>Ô0­¡ZÃ5³v�÷¨Ò‘´“`g¥5q^hüì�÷¥åþ>ÝŽGyókWœÚdÇ6 yfW\ÂÖi÷å,Æ^^ž” ìë>´ƒöšãÊ(ø­<Ò׸1ãkéw޼åçÊÀ?`|“Ñå_Å©/Îq+&¤éº{,͹‘j uÍ 0›]ïﯼuu{)ÝÆqúÀ§ÍœŸ�mt)­ïµ'AOLÚ® o_ _<6}²3¥ëþT7|%c#ËÛßtY¬Âüm¦ÿÌ[7ë/ÃñèB:º.ÞzÜB`Ûx?]j²¬šÎì*Æxô^Μ†;G ýFû®3¿ÿðû»YWzÕêÀëÛçru{'·ƒ3i¬µÏ˜ì³êΙ\˜ã‹ßcöuŤZË=´hù‡–äA^R °’ÝïD#ü­¤÷ë©·cìÀÆ×®´öƒÜôçÍCï`ß÷BÃdWæ„‚¯î@›^|;ûÿà nº ÎöF†î©8~Éÿ.rsëM‘ëÄeÂá¸2 ÌGó—îýuõXÜÑdRG%÷ÍèRägëÚÆç}mrÛòûs³%]w0 iã‘\ž9R?väø0.,$Mžìôµž¶öÂÌf·«,ïé(çº'׳“”½½“5ú¹= PßÊ=�›ì§+¹éKçÄ•ëh÷X4昒¼ð± ¼_š?N,£Ç‡Ó¹þ_„}ϺôFD½!Qû‚Þ ¸ës–J€Åv¾ò\ëâèòоü§!íä<&t§êDjjõ`wì…WºŽ·ÃÕK‰ÁOòncëÍ?‘I(™HN Åz 4'@¡“ϽF”#•S›Û¶¼ÅNGÜëèhe0w3hBðØäÉŽ÷�r;|#Ýî›­œœndy3"½aº-ŸÄ‡åÄ“?oņâɉ …ÑÿÒî¿IWÍÑíìEd›ÑÇy’û}OZö‰¬w5]^ÎR °Ønw¢QÁ¥´¸ àóNƒ¿Yut¦EFnt„£} Ý)? ‡‚éeïZá.Õml½iømÅÚ,X7¡À<>ØiÈ›Ý lkÓÇ:¹÷Hé¦mjÍ8N%‡…ÄѸìh9POºç¿míätcÛDÉív¹é¶ÜŽ?YÓ¾Y» ÌS‘þêÛ WÍÑãÃÜŽq2å¢áy×ålÉ(”||4~“k/$øSŸõ‡ÖÁy>TÅÎ,¡;ŃpØóÃEãL.¯~•VýqÌ_~ml½Å¼&318µøŽø`§;«.64Ò­ëù8ýÉKè±òk3ëH—ë3iÅn#º-Æ„…¤àáýd#';7ru~&//ƒY;¶$_û²âØírKè³·¿IÏÙO˜®1i;|,í—üÑé5Ë”¼Éù©>cdJ z¢~òá.ë¥Ù’Q(ù:øÌ‡â)?<y;°hØÕઠÕQ¹˜é¿tt-4"g‡‹IH¯·bêôrjsëí‹ t~æžIÔÚñŽ4Þ÷͘‘˜H`žŠŒ�…F7Ãmm÷)ÝžÍé¸+^xíµ¤;'zRðˆ¬»,Nvtª»îKëæßí!H§³Û忤μ“9½!P{š–¹Òöö5ŽÓˆ™]%'BåK‘«3¡ÑéU$œ|®ý8ù–×)ñØ’Q(¹:ø$Õqªè(äx$w2sG¸&4.¤Åí#áb¬³4B³ƒäÙF×ÛíP.ºŽÊ&e/öÏ2ýßàæ)-£ùßÁÿíòÓjÒüÿ)ÿÑ4³¥LÊnttsú©ˆßttH¾ÆÍTÓ2œhÛÎ YièëÛ½ °é ½!ÐÿZçi>”†s,˜OL>AÍòd'¡Ú ¼Oõê6¶¼Kn÷ËÍ;Y¿8³fajËùà£\››.u�Dû¦þ?¶É¸/ƒ×Ò¦7wê€Àìɾ镗éÏ–õEûFQëÃì×W&U yÿ¶dŠnH»6 YsÍ.%0åæg:½]OºzùO¿Ö�ñÑÞÙš•Õ‘‰ð]ðþålÿk3zgÿ޶uî²ß }È·Í­# ­og}_§¬;¿”ѵéÿ^ÿý?¿, ½«ÿ Nfôë NvüÀl/Ò¶ô±äú\XË­:ò6;Gz$ …h1±Þòu´],ïtXnå—×ù¢“Ð#Q(ìD‹‰õ–¬£íby§Ãr+'SÿœçO0LBD¡°-&Ö[þ±Ž¶‹åË­œL ‡ŽD%@ôH ;Ñb*özÓ=õcÜcêiçš©u/}ýØ–w:UXn³ûb–·ø™BŠIç„Öim»úp•4Ø’Q(ºã@ñ°Þò¯ÐëhÑ̓Ñ;SÈöékÁúXnåfJ<t=ë(uÞë£=…ÂN´˜XoùÇ:Ú.–w:,·jÐ�mÊ=ò^/MD¡°-&Ö[þ±Ž¶‹åË­ZŠPîAD¡°-&Ö[þ±Ž¶‹åË­zò^îAD¡°-&Ö[þ±Ž¶‹åË­ºòZîAD¡°-&Ö[þ±Ž¶‹åË y+÷ G¢0tJ£Ñh4f·]–{¤lœîèo¬£íby§ÃrƒM´–yhÛz$���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A…õõëW‡ÁWÀr{{{~Ÿ¡Ñ²n�ª‰ Âúô铌h´uÚÓ§Oi´L›é[ÏŸ?—÷ïßËçÏŸƒ½€²#H£Ð4L›Ù?þèRI´Ÿ�›ðáÃôðáC¿Ÿ=zôH^¿~Íh5PrUP z°ÒØwß}'®ë¨‹ mÐüwïÞùaZûœî—4dëh5û& \8ª Tô@¥- ÕúÀFƶipÖ}‘iÝ7™Ñj=á×À  Ø8ª tôÀ¥)=hé‹K«0ÒØ5 ÏZòaF«õ¤_C¶–†0Z G”–Þð£(=Xi57� <Ñ}’ŽVëMŠÚ7µéÿµ,„ýP UPz܃ <Ñ}“^=£–(.Ž*¨ nHA»¤ûœ¸zi-õ ^(&Ž*¨Sî¡¡šË§ÕBƶÅ:3ß4PUP f$HóÌ4L3T=ilÚ¢Qgn|ʇ£ JMG|ô�¦4 Ñ”tTÛfƒô­ º ÿ9êÝÜß]ÍŸ2ìH»ÿGð5–û&£ÁÏÒnÔüe>iuqÜÁÏ·‡Qg ºÒ(%JÊÜ ¯7ê×Ùù(®S·ÞA«9Ò½zqʸ“‘{2ÿ{v«wep7 `ñÍóÏ]k÷å&øiÔx4·ëHÍü~£-çÿtåÅ>oðK+¸t¥î?FMÝËà=F_ˉ¸£;ëwšãÊÈÿûíÓçß,]çíøé·›wéÖͺ8˜½Î‘+޵ŽêÝ¿ÉÛöÁôëùV“fïJÆ“¿Þ±ÜΤQkIï*©÷ož†džµéÿuª… ÒБf6ÊÜP¨—V77¤á× ÎƒYlùâ}ïXœÞoV˜öhH‰ jü@y,ý}?`ëÌžÄ, ^¤ùêyÕ<–ÞðÏàû3ãÑ…tš'‘ q#C·#éã¯Á„°Úcq¯¿ßô„^¯þZW¦#²¶Ãï­ÔAZ×哨õ±ÐøJz ë1{ú¥Ñ8ˆœ„Y£âúzO¥3‰ÊãaOšÓõ¦}ï(Ò÷·MßCsÇa~”r˜wÝ÷pó Piž†eS¨!ZÃôæË7â‚´Ç OæƒfÖAú¦/íÚ‘¼¾xáç8&Ph¨w²-ð_ï©ô~: °ªéÛ¡ô{miø£‘5i´]Þþ.nëÙ4€NÊþ.¿zëbrUÀüžù¹†Ò¤‘ßÉÿ̲ÇZ•·N¼×xqùJšµŽõZõµx'^^˜÷ƒs³'CÿGc¯»Ê¡écÚ÷êöß-c_™ix}á³U’±/-÷÷ ïz'ygâÔ¬eÐèˆ;´Ou[I¸z3}½»£û"û£ÁÍþˆò ¼Ò(,2óCëhÐv/©&iTÏ _;<Nóÿ“ÀºAZƒMGj&8h°9Œ„}žýuÂÎ Ìkÿr)݆5zZÁ =íoI×ÈHñx$—gŽÔ9¶Ö…HméõMÉOLÿðèï.(ÑQ«>ÖR¦¿Üé(øƒÙÉVdzFûçÑýOÊüÇÿAz¿žJÓ9“ / ¯]iíkßù&×^?oÎx'„g/Â'¦jý;c:"­#ÓægÝWé>‹{4€r!H£pìò =Píf´')HGƒ¤GÃ£Ž˜™f…ÎX‘`:OG­`3IœZú)LO4ô<–zË•kÍ1 Ÿ+¤w,› í-ïNg>ܣˋjÖão*ŒŒø®,î±–›…vý{ëê‚loÎäøe'#£ã)øÛAM‹ÉɇÍ{îÎIПB®Èècå`zUz†=‹‡þ?Ûû6�ì A…-åØÍ(ÏšAzáˆtIJ<wi=&ˆÍ=†ÚðMŠkÏ,a¿v?\}ï½ÿ/K^où‚tò豆¾Ç³2›ñHo^Ef•Ð-ÙX!¯üXËÄ”iø%B“rŽïãú„Á¾Wh\E©Ç.·I ¿/»ÍÏÄ1·õÔ@¹¤QXÑ› ·;:¤cFÐì ½Š…ÁtAè°GèöUÂ|œÐßYå%×U Òú¾ŸI+¶œÂºR0ÖZéi´{Ò·k|cC©.#'|EÁ¶Öc-í·úšxáÿ¿åKÿ…tæÂüd=ïß;´j¿M*CI>)·è±ŠÃì¿ìzjBzj XÒ(½LºÝz鄃¿zZóeYi$تkŠ–wè×úú¾_[2 Òÿ½6¥Ý{Y± 7²z#W½–Ôöf£»‡¦ôeJÿ6¦„C—ë‚zßµk)]O¬QìÉû©5_Šûê4&̯0Z¾’hÿ´ésÄ=w’EULž£ÓèQK A¥bÊ>ÌÏæÊ>b‚´ÃÙci­:ý]’AZCUx¦c¬šÓ9žõå\HÇ9Ìzà}zƒWðUÍð`._=øW&H{n/¥kO+x{%nûPÎñtZÁhùÇl>okîfC×wãLæ&; ä×®8Á:Zë±–ÑQìèº÷Ë;¤Ñ´g1–Œ–¯jÙÉ‚×'OZçrºÑPgñx)íÓHMuâM‘ÅcnH4µÓÜA¥¤"½Lº™² é?%©6Yë>ç?ÈdVþù‚i±Bûxt)çíæìg{ûât]Œ¢7Ê-}m³÷ £ƒóAZƒÓôƒ?LÛͧÎÙôuÜŸw1|+]g?x_MiŸ_ÊHK\ü¯u}F¨ƒ÷®}ã/S»…û€Ͷ~÷׿[ë(æç‰•Ì? 3ZA¹Õoâû¢N]·Þ Qüãh›ÿ@—p_Õ©ý^É›Áhú;á×o·';ÍCGŸ™"(.‚4JOGxv7MòDû�°m’©‡ʉ£ *CG‚ÌÝò¦ìÕBƶÄÝLÈ @ùpTAéé-:åó¸VA›”´¯á*P^UPJ„gÄ!Hct¿Â¾¨&Ž*( ÂóºnšŒikxKNé{)à&ÁȺŠoëß(8oÛÏ—ºÑýŒ¾gfÜ�ª‰ ³Gƒ´éÿõ€Diÿ�²¢¡ÙþP(½ T G’†g{4È„gbX„ MÑý ÔÛý”U�»ÄQ…¢w¼G?Œ»à±*‚46MOòÍt›z²O Ê£ )îC ‘Æ2il‹ÎÔajfî�ʉ£ 2¬Š mÓiÝ?ißÓ`M Ê…£ J%.Të÷�EÆ®ØÚ\AP|UPJ:­*3›‡k=ˆª« ]Ó}“Îî¡û$>a(>Ž*(½¤P­3ZµAyaµ†im:€âᨂJÑË«zÀÒZEZõši-¯ @ñ°å���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H£ð¾~ýüXÍÞÞž ‡C-ÓöéÓ§ ‡¨ ‚4 OCF£å¡}÷Ýwòã?ʇ8É*€ ÂÓƒ•ëºþìÑ£GþȰˆ kŸ?–÷ïßËóçÏýý‘ö³§OŸÊ»wïüŸ(Ž&( =PéH¼ô@Æ IÒØ•~ýúµ<|øÐïsú¯~­ßPMP::"­£@zàÒƒ—WEƶ鉽ŽL›}“ŽXë ¿Ž`sÒG”–Žúè°ô�iì’žÜëþI¯ ™-KÓ5nXŠ…£ JÏÔOk¨¦~Š <Ñð¬û) Óf´šbàh‚JЃ‘–yèAJ/­2êSmiä‰î’Ê>Ò@¾q4A¥h-¢9X鈩j"Hc×’nDäªP,MPIz°2õÓzI•@]-il›žÄ›©ñ´ÿiÓÿ35PlMP9šõàe‚4#ÓÕCÆ6hɆŽ2›ÚgÝçPû ” GT†ŽBëAÌШ?¬®üé;¹'þëô[­#ý›qð3$dpÞ–†Yn~;wtüÂ*ndØ#î¯]qêë-wÝŸè~E÷3z’®ÏÏl@¹¤QjæÀfF„ô�—] âGqºuÀZÍ‘îÅPnƒßJü=«Õ»/:ÝÊ Ûˆýù¤ÕÅq?&>f­Ý÷"@¼ñh nבšùýF[ÎÿéÊ‹ƒ® ÖÈwƒ®ÔýǨI£{¼Çèk™—Ùï&4Ç•‘ÿ÷Û§Ï_#Wœ .«ÐzšöHßkx}úI»f¾ŽkGÒþ9yÐøâm?‡RsÎåê6åIÇMß{Mi÷\¹p_HsÅå®!Ù.ÙÐý 'ê@5¤QJZs¨—TuTHGŸuDh3uˆ~½à<˜ÅæÉýXœÞoV˜Ö`òÄ Â3d¦AÚz, Put“þþé·HóÕ/òªydÆ£ é4O¤weÇìºiL wéÖ½ÀP{,îõ·à›žÐëµß—Ò°}~oé•„—ã†è:Ý ¤Ýÿ#ø¦g|%½ÃS?\‡=9œž¬ý)Þ3ë@÷Sô¥,ùý2«0?öÞRGö×XÌD3ëP i”ŠÖšY9ô_=mV\öøä‰47¤ý4 _¼`s,ÍÞ•lêp8º/ ,§Òûé(< ^ê ýMFƒŸ¥Ý¨ù;mÑ--p»âLGnutó'i·ÎehVŒþΛÿ!]gö;î•uÒeÓÀz’°þ¼“¡‹3ë¹¼Öèˆ;Lº.±€·>Zí¿Ée/²Nµö¼×®¯Ãî_zçœù¡u:ë ®ˆÌÑõ¼f½ómt)çí¦ÿu­åʵYV·C¹ðúïôJŠ^ i»2´GœÍ‰Ýôwf¿;¿=¬jÑr_Î|ØŠ¾s†~@ù¤Qx:â£#Îö̓ۻ >!HGGì"A8~”qÝ = 0µ¦ïËiè™üÔç4f\_ëiïu}¹”nÃ/mËíàLšÎ™\LCª¬ûϤa¿‡Ûߤ×z,Ý_ÿ1 zãÑ{9óó,œNi£Ý“¾y,=éj>N¨ãµ«í›\{ý¡ •zâtö"|¥`)íG§rè…λaOšV=vxÚ’I¿š„ÕzçÒi¶&åPãßÅm}?é'þÿæO2n/å¬óf¶Úßö× ó iuî=ºmJËÌɽî£tÔšzi <Ò(,ûæÁÝÕ$&éhÔ lלšºè"Átž†¬CkÔ,&t-}ŒL¾Ó0÷XêfqásE‚ôŽéò_]t46ŽŽü?ñÞß—àkC×ûãÅk•OÌIú™wÒÔ9±Fn§®\,d¾ú¡Þ”whÀ~&­˜ÇÒ€½jýp2íuÙk<“þ(üõ¹ÿ"'îï1ËMÿîIäÄc…弎i¾Î€žÜ›Ù‚Ì>‹©ï€â#H£°ì)ìt”g7¤u‚ô²éˆe!XG C³ ÌF§abî1‚ð²N ²C†¼tÑ ¥ ÒÞÛœ–h©Æ¯âºof#Ê*îj@ ½éóM/:«„×’B©.Ó¹Ÿið= ÿ}¨Ù7¥®b¾Lcr•CŸGO¢ë,¦Ÿ¥1×-~¿Š”Ñ„Zt&Žäí0lN’%ÕS(‚4 Ͼtší¬«H:€GGSŒ. ¦ ”)õP‹FÖÒŽº…þÎ ^×å Òa¦^zVÖ²Ê‰ÑØ[>-Fˆ¾Uޱ8”Æ?n¶¡q®hÀõëî?J¿ó"&èjð>º÷ó/ «ëöM?x'•Ǭ+£…ÅÕSowà>Ò( 剖zl^B¨ñë;[V™EÆA:t Þ-ïЯõõEK<™iÿ^5 ¾¬HVºÞ¦Ë?9Hkèþ§œÿŸwâÓ’Ö\©BL9Δž,Ùuö†~ÿ4áoR˜õÖ×ÌsbÝ$ihßK*EYÙ’°ªÏ÷ÜIV¼"°]¾éo4LËÔS›©:M=5€|#H£t¢7nnê;¤Ç#¹<{,­§¿K´ Hû£y±Ò1 (ÍéÏúr.¤ãœÎÍæà¦™²l.€OnÆóËJ¤5T6#S³e4Ïd`F–o/¥ZÆÞ2ö¥×>ç콌ü2 ;œiÀv'3w$~ØJrÈÖuwҊΗ¬¯ë¥´O/¼ç ¾µÔäŠBxš·É÷jÒìÄܼ§ýÒ¾ê‘JøDdžÖß·#ÛÇŸÅ£#§ýkïUÎ$Þ™ŠöÕûßh¸Ýgi©Z4DS? äA¥¶Ù²=àÆ|ÐÊJÈÒH •:º9ÿA&³šÐðÏ|H‹5Ê8«ñ5·/NוÁÜM^‹E_Û¬¾ZCßÁ|ÖÐ=75Ùº5¼ÙÓ×±}ý‡ÇΩ½‹–g( Îo­)ítš¶Wòf0š>Õcúó=©9]ùÅ; ›Líô ©ÁÏç[¸.8¼Ncžo©hyõøþ¯Lדߘ J<qJÛ‚6ΣSêrÿ›Õg£¯ßjkdÂûÓ¶¡Zi3m>ÈÅ”u0£P,iTÂnÊ>WÚ€]05ÑæFCý?sLÅÅÑ•¢—JµÔCb›/û@^¤±MI³tlºN�Yãh‚JÑÐW‹ˆj!HcÓÌI»îc´¿é>‡y£òáh‚Ò3µˆ¦VZG…4<S‹X]il7 ÕÃÑ¥”t#µˆ1Þàf·ä$‹FßO)ù7 .ú «­{£`œm?ߊüYmâ^CL[û‰bpÓ P]i”ŠýáÚψ£}ÈŠÎdÏÄ4PMPxѻ๑ˤ± Ñ@Í'åÇÑ…d¦³3áY^„g¬Š MÒiÝ?™}(/Ž&(¬¤‘h`‚4¶!¨)3ʇ£ J ±‚4¶Iµ™¿^gòà„(Ž&(•¤Ù:¸´ A» û'5P.MPZzЊ›Ó•i©@Æ.™@­û$múîï�Љ£ *A/­ªa¤‘:*­û#¥&PÅÃÑ•cêõॊF£ÑòÔ�[,*MG¤µ~šV­FXA^1"  G��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i”ÊÞÞF£å²=}ú”¶Åöüùs‡ÁÑØ ‚4JEwš>”ï¾ûNÞ½{|H¦Ø$íc®ëÒ¶Ü~üñÇé ̇‚µd‹#JIC´†i Õì@±A›FÛÏŸ?Ëëׯ§Çƒ÷ïß?²ÁÖÒúúõ«¿5#Ÿ>} ~Ìr°iô±ÝÓãŽRÛZ¿Ü[7JOG$4HëÁL/õé×€AÈÁ¦ÑÇòCó†hS¨áš@û`ëFehýô£GØy"„ƒM£å“¨õê%ƒ,Hƒ­•£;Oêå`r°iô±|ÓA=&èzÒ@ ¬ƒ­•d×ËiÙS$U!›FË'Ê<¶nTš^Ê3S$霣\Ú«B6>–/ö@ 7â¾ØºQy¦vZvú/;Ôj!ä`Óècù`œè¾žÒ>d­•d_ÒÓªî\)都ü‡œ;¹'þëô[­#ý›qð3$.å¼Ýœ-7mŽ+£à竹‘a¿'íF-XöŽœ]ŽdÝ¥¯‹ÝÑ}»^qÔõ@)²ÆÖJ1#æ’^f5q#Ws°¶ZÍ9“‹áMðK꣸N}î÷ìVïäîn ÝzüÏ'íDÜÑÝä!çžû@Úý?&?›óMFWºÎ~ð»5i´–ºÏä@Ÿ7ø­UÜ ºR7ѽ”[ÿ»Ñ÷7y³ßMhkœìèó†®ë-«[tÓuRk÷½©"ë´Þ•Áç¾´kÁ×±íHzÃ?ý¿Þ‰ÛKé6ÄéýôË4näª÷DZ]W£oÞ×c¹ºÒnž®}"£ËÛ§ÆÅÔ§Ø4¶nT‚Ž>›ªþ»‘O;Ôð{à… ;ê½y"½+;LëãqÜÁ×38ý@z¬Éˆ¤°ýßÒ`ód¤ 7GòÊ})ÍfO†sÇz/D÷ŸIÓ9—«[뇷Wâ¶›Öã¯ÁþÚcq¯5l4ðià pú¾ü¯ôõJwDœ†ÃåŠrÂËq3ô9ö yù{r„kûÿ"ʰçÌú³öÃýÈv°eþ‰[ì6°ºð{4ôdÙõݤ·O÷ñf&J8°IlÝ(-}ÐgsGöÆç Òÿ€ÜråzzPßD{ù¥#5 wWÒkÏú¡~ýÑ´…ü×y*½ŸŽ¬LO™ƒôx$ƒó¶4¼¿Ó¿5-z"2 ÄõBWÍüN£-½^GZ½«Yi€>Ö›ÿa]!hJÛ½JEÕÀz’pµáF†gâØ£ÄŽ¸¡«!«Ð¾Ö–öÅ?¼>ôÀz.í_§rè¿v}ÇÒœ¾?¤ßöNýþ6é‡õ¹�º€®ÿà5ë2üf•dÔ¦ÛŽ¿µ–“¶ùeåèéÏí–Õ¹ý^W§¯Û§WíO·eD›ÀÖÒÑú·ÜP’¤e¬Áö±|ÃA:2ki=À?Âzfôyö× 8«0¯ó‹^J·Â{iƒôtÅ龕¡Õ_K¿ó½ubä…¾«siµºòk½o2ºü«tí²›I m´{Ò7w®¯Ø’BÜ7¹öúS³íÎ^“Ï{­g/ÂW –2ÏñÅ{möÉÑ‚¯}`ÿ¾uÛ“Çÿ¡w.fKºÞrÿ.në{¿ŸŒ¯]i5£'Þrü$÷÷P?ŸŒ-(oJK¯èt¥¢\„ ½[Ÿ>}š^‘dŠ;d­¥wó î<·*)Hûvûrð$ëë4mqYE4HÇÐËéu+Ìèׇö¥í#é{Ö0÷Xêf1¤Ã"AzÇtù¯Ìº1£ý6ùw^Ê j•¾ogñßêã&\5Hú™·®;'ö#|¶ë9ôJJsZÞ¡»ðýß»÷‰.›ºì5žI߯G¶yÏÝñBtÜ AìIØ Ëym72t_J7ñjÁbkõ1lŒ–{˜+””{ +lÝ(sG¶î wvGöZAzɈtȲw9=:zóÖ%õIk¬ní÷ì‡LAüRÞ í߬ùód-Õp]qÝX#ÁñWâhéÇ›Þ|‰Hâ—±¡QGrÂjõõ‚tèLûPp•C×í÷g1ësõ÷»PôDÐâõØ÷´è2IÜSäò噜‡îsX¾N䃺˜9¤õŠ%3xà¾ØºQÑ)޶>âx�×àh—b¬;R¸$Hû6˜ž+ÔjV«¾¼äÀ¾<Ì'½çI ÷봯ˤ#L½ôôƶÕnFóKjMi÷ú+‡ðøu”îæ·$áç°Öç—¾t:qeA¶îýü‹Fµ×í›ÙŒn“ónO.çFÉ×s¯>–¡ñèB:þI`ÜÈÿ~ù’Ö­7¥Ó¿ŽíŸñ&787tfŸÎ…ŒVÿÃ338éºaFÜA¥£;D½ÁDG2ân™„ 퇦¹2‹ì‚tø¼%ZÞ¡_7ÏbJÖ+SÑ÷ì×µj@|Y ­tLk„[ ÝÿКiEnIk®¶7zÁ¦cÍŒ1¥ß?ͨŒ!¦_jŸñg‚ù«œÄü¤r“µ,>ÏãŸ;VF#äÞ_ßßH·û&RwžN>‚ôd?¢¯eí+öÕ«µNRt[7S'ZSvæˆÀèÈ´/¨ŸFi”–]7­;É:Äéñ轜µž¬<ý]¼EAzri?4cÆ”3 u_‚¯utè/âÌÝ”6©oÞÏ"Hk�œMÊʤýòƒVx]Þå¢Û’ætm}ÿÞIDhêÑlæ¡ë̾qOËEÜÉŒ‰¶’²õDí¤™ÒPŸó⥴O׌]Öï=ï¥wóž¬{N379ùXps žœD·! ºo¥ÛîFFV£Ë6øzèûŒtç#H{ïéXz\0÷×h˜ÖAF%DË>2ŸGz®ÞxÒVû@–¤Úd ³Ș¶éÁ<úó¤i±GŸ¬_óóš¶ÝÁÚ9Ŷ§›} _óAZC÷܇̬92¶ú:Vqç :Çášf­“žÎÌaD§¢Óú¿ê¸ýMzÖTn5§+¿tÍTyAHèS“Ý ŠŸ~ÈÎ+y3Xãø¢åAV`œÔ(ÛÏ—Ð/OœÄö‡ EÃytÊA]îo¬>›XÞd°Ìj&ïwþqÒ<–¡‹ü¡^Y`ëF¥DË>Þ½{Ç¥¼Š#ä`Óècù£W+Íq€<plݨ¤­—} ·9Ø4úX~訳ÙïS,°u£Òì‰úµQW=„l}l÷ì}½œ ‘¶nTŽ)ï07—hmœ–x0"]M„l}lw40›iî4H³ŸGÖØºQ ºóÔ°¬¡Yw¨¢5L³SXxƒ›ÝR|xKNéû)£E7ÍE[âåëXpÃß\[÷ÆÄÔ&³Úľ†¹¶¹>­íÒ�̈́ضn”–îHãÂóÖ?:¹FÈÁ¦ÑǶOC´.w­ Ø$¶n”Іg½‰ÐþÈp½¬Çh’r°iô±ÝÐ]öÔDc“غQxIá9ó¹¢QJ„l}lwô ¤^Ô+“\Ä&°u£ðtç¨ÁY´°4Pk°f« ä`Óèc»¥Ç=.è1‚9£‘5¶n”ŠŽB32ur°iô±| Ô›ÀÖR¢Ü«"ä`ÓècùA©²ÆÖÒ3¡šÙ;‡ƒM£å ¥È[7*%i>iBuur°iô±|¢ÔY`ëFei¨Ö¹F5LëÎTõ~ò­ZM×=F£1 ‚4Ò€Gw ªiÕkz�6‰>–o:­£ÓÚ€u±u���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò(OŸ>ÿîooÝ#�`1Ž( >4V– ÿØRQÃáPž>}ê€~üñGùüùsð`}ìý(¶T”Y È`—è@1°¥¢´4P?zôÈ? ¹®+_¿~ ~,GÁ.Ñÿ€b`KEé½ÿ^>|(ß}÷+#È`—è@1°¥¢2¢X„ ƒ]¢ÿÅÀ–ŠÊÑ­aZCµ†k A»DÿŠ-•¤åj,BÁ.Ñÿ€b`KE¥i Ö™=ô ¥ZoPA»DÿŠ-•õáÃyþü¹ÀÒÙ=tTšad°Kô? ØRQ):§´–t˜›u4šG‚ v‰þ[**AG›Í‡´è¿ÔDc™â™â:uÿõj«µûrüI¾Éhð³´µérÛÛ«‹ã~ ~¾{Åé@µ±¥¢´tôùõë×þȳ6ýÿF?åpäŠ3=(ÏZÍ9“‹¡mÂÁ'®Õ»¹“[t±?Ÿ4ëÀ?÷ÜÒîÿ1ùÙ ®týàwkÒhÿ,ÿtŸÉÿ¼«²_ß¡t_&ߎ¾Ç•Ñ:ï%'ôuË·èŸln9Þ ¤[7ëËê_‘õ]ïþMÞ¶¦_Ï·š4{W2žüõŒåvp&ZKzWù=åÐe ÿØRQ:;}Ö°qЕFo/¥Û<‰´“CÏÝ Z ŸŽPo'?ÐÀR7ð÷7}i׎ä•ûRšÍž çÒŠ¢ûϤéœËÕ­õÃÛ+qÛÍ À¯G_oÝ[Öµ–+×Ó‡Ô×wb=^Š÷²cÅ 2‘e¼ú‡ÒhDF¾ÿ”aïd®ÇWÒ;<•þͤ3Œ‡=¯¿éÉ”úCúí£ ¿Æeô=4wæ—#HÅÀ–ŠRÐ:g3ú¬õÏ}N¤=&ç‚fÖAzìåèŽÔ4@ßya¦y,½áŸÁÏ~¨Ÿ…œ,ø¯÷Å+ù©ùÀ¯n.åÜ;)Ñ¿ŸµF$<Æ]øIzí¬u¦¿ówùÕ[nµéï¸2´O€l‘�r;”‹éã¬ðX‰>ŠÛz&—¯¤YëXÏ¥Ù;Yô^»œ§'qÚ'OåЄV=ѫ۷̤͖ág«$c_ZîïA¾‘áÅ™85óþ¼Ö舺¤}0áªHìIg=i8òþn_œîK«<Äûú콌V~œÅô1ä[* MgÞÐ7ô £3pè×;•¤ýÓ|,îÈü gáÙ¶nøÔ0ó i‹˜€>Ï~Æ5´“×~)_ôrù4T4Hû'*-é^ ½w<1]H§a¯û¹ê=‘V÷é› 7Éå™t­pêÒF[z}óXàœäå¤!õ0&Ž÷Âï‘´Ý«ékòy¯õ¬óÆ:¹[yÿDÍ:qJ ñºÞ½çN,3Z‘ÿøÞIƯ§Ò J¥Æ×®´öµ}“k¯ÿ4çN ¾Èàì…¸×ß‚¯ºî¯æãè¶Öô‚ôÛésNÖsÌÉkJi ØRQhv´ŽDëŒ;‰6’‚t4HAs2’5iKË*Bá3Ft´o.XEÃm6¦'~`k£„KžkÙ{É4A&<Gës_zì2j•.“…k•OÄð¯zÌ$é Õ_äd:rkÓZý'VÀ_nö“QÙiy‡öµ–)ß°Ì@¦¤ËFGÑ;ó#¾ÞswNì«=F ÚÒå¼}_'ç‘Ljnã÷CŠ-¥¡µÐftZ§µÛɇ«¬¤—HG, Ÿ“²Žz(HÍ.·OÄ„[? ÌÂü| ÂrökŸŒ¢žÉàöÛüsÙ¾—|HdÆ#œ·¥á—N¼òOìÜéˆ²Š®“ú8o^Ef•Ðv’JB£d£a·¤Ç‹S¦Q;š–s|·®çNæÒˆëÛ†)³ˆ{oÚæob]i[[FÃ{'úzÖ?1YD_?€ücKEéh½´ýi…°·öA+‰A:zM>‹, Ÿ‰)<C¢‘6`„ÿΔ—ü&×U Ò“zéÃÙ:HìdÿÀ â½Yé‡ZJFCWy¾•EŸÃ¬ëÿ–/ýÒ™)Ÿàýû†Ö…%-ëŽ/)YÑÝàL¾”Me»¬ Ò@Q°¥¢´4<¿{÷.ôá+/ûH8˜úõœseÙi$8tóW ¾ô릎ϧ±l‚tð^ë?HïU«òAZéò™Ö¥/[ãÑÉ?´öWË'B7¦ªÈhpTR El BZÑ“ÁIP®5_Šûê4f”}q)ÊêâësÄ=w’¯,¤Ûn{þ}iŸžÎNri ØRQ öÇotJ¼˜ 4½—³Ö“•§¿K”>'—·ã?ˆCƒƒŽØs<ûÓßýEœ¹³ô†­Ç©FçøÑ)ÒtYW'Hå¡iÇr;|+]çØZþºl‡oü»J¿×–¦óW¹}³ê'Æ£¸]qcÁÜà‰£Õº^ÛÒêýf•—xüY<:rÚ¿Žæqô9ü›û‚¯•~¯v 泘›÷4x;÷ ­ݦܨ'n'­ÈtŽÞÒ^¼”öi¤¦ZO,’f6Y™nSÑ)ü²}Ÿ!HÅÀ–ŠJÙè͉½ƒŸ�í¶Ú²$×&kPÕyšÃ¿oj[õÒ¶=¥—Uóz=v­¨N«ùT·š¶ÝÁšSwEŸÛz~ÀšÒ‹ßK¾èk[ݤÄÀqìå¡uÒ‘ò ŠNgæxc/{Õ£5û¹®›_ºÓ©Ý&ËTOÄÂ7«†Zhd4º¾›ÒîýM^h_•Åcúøv_šœÄÙÏ¿ŽÓÕÞÏ?޶ùt O98©O3M'üúí¶èƒ‹b„¶)óžìu‘Ý éãÈ?¶TTV.nNDnd°Kô? ØRQIZê¡áYG¦õ€¥eZO½µ›‘{ìý(¶TT‚ä¸ð¼Õ=P(ìý(¶T”–d Êæ&C3sá« È`—è@1°¥¢T’ÂóÎ?:¼Hnšœoëß@V$úË+¸IpnƵlÖsò ó-q¶—¬-ýÀ«my–}N�ùÇ–ŠÂÓY7ÏÈA»DÿŠ-…¥£Ï:'´?Zä5ó)†@2Ø%úP l©(<n"Ä&d°Kô? ØRQ*I¡zã ŽÒ!È`—è@1°¥¢´¢¡Z?|EçŠ&Tcìý(¶TT¡ë"È`—è@1°¥¢r’Bµ~D8fA»DÿŠ-• Õ4–— ÿØR��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€Ò���@ i��� ‚4���A���H ���¤@���R H���)¤��€µ‰ü²Rå™âË/����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ae_SD.png����������������������������������������0000664�0000000�0000000�00000027060�15030617045�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ë���þ���ƒ}K<���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��-ÅIDATx^íÝaLTw¾ÿq’ÿÓyÒ‡>01!$>hbáÄ4ú�cC¦BÜ6 ocÝM±ÝTmîJoîS;t[z·²­qSü¯o:í-ÝȶÚt+»N£ÄK-l¡•]`u%S®”ÁóùÏÎÁ ÈÌäw†÷+9içÌøãÌùþüý>sæÇ±H����ŒDX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� EX��� µîaýoû›>ýôÓô���<°îa½¨¨ˆÍ× �€B±î³Úo~ó›ôäjÿA+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�Phë0A+xL«}�PhëâáZÁcZÍèC�€BCXDgTвîªÿì/T]š?®¢Ç)6–t^�›Q5K1íx��ÈW€Âú-Åš¶ÎOƶ­ª>ò[õO?äuÎÖÕh²Oáâ ÏÍoÅjˆŽH³qEJ=a­h‡NôþÓù9^³JôÿNGëÊJ¿n“Êê^Ö†h³ýóR¯°ÿüêLkôb»Ë79?s“ÊŸþ©ž|¬IÑÑTP©)äg+®Õ‘3W4ž´œv‚Ç}/&¸?xZ{A±[n¿B&&ÕÌfÚñ��¯�…u[B}áê¹ íJþ]WÞ> ­5ÿ©ë÷Ü šáu)ɾ°Šçú~½ûÓ2üÙÉ‹:Zú¼Þ}÷ŠŸïÖíyØÒ½3j¬Ø¯HÏ7J¤Ÿ›Öx¼KGvnžûpÚ³º�ai*Þ®Ýõ'uah2õÈÞ•Ðp*¼×»aݶèøí?—ÿBo7nWMÇWºçì s‚Ö¬nwÿ\[Z{4éìAf~ÔìêÕ«zï½÷œGù1§�àà‡u›5¬è¾*µöL8;ü ëIÅžWé‰ËššúRáíÿ¢è­ç¹kH]{÷¨­÷ö\¸ö𶻺�ñƒâ‘§–¾?û Ù!ÅÆgç/ ës¬[QíÛò’z&ï;{‚%· uW½'¶;v›ußRbð½ÞX™þ–#´ó5]I¸çcV‰vž+* ©¸ú:Ûw¾v³ñˆJãX°•FwNÿÃYšîmÓ–ôŸÝ£§ÿS/Ïë²U5á˺ãþ@kRCèô<Ÿ:æòý Çn8üÌæžŸ\}÷ÝwómØ¡=_ù��¦)Œ°®i nÐöŽk©8f[øº…a<ÅJhä«›šp–Œ,|>èFnh`ÂYþãO«£ÿ‡Ôƒ) tîÓS§¿–ÿ¬¡ÓªÝÞ¡þ AΚˆë£KCé+Ý« Iw·êñº°>îO=ZÆ2a]ÖM®­K딳#Xò Z³×Ô±½B /T}ó[걿™¸?¬?¼ÓõÚÅIÛ‹¯ª¦ö¸ÎÆÇæÎm*(žQå'Õ7åIÆÖ_ÕU¿K'zï:;rs S»R êÛ~§ÞáD*Â[ú1Þ®Êâ°úì°îêzg“*êÊ]wë=­ñ+¿VãÖ§‰›]?¯š9ÚÚÚÒm”——ëÿ÷½¹ñãx��0I„õ¤F£M*÷9Ç~ÝŽù‰;½yÃú"K¼‡¸vïíÒ°“嬱˜šŸhWüÇLAy«é_l<®º2gÍzñÕúE=W— ëQ´¡Zᾄó8XÜZåÄ^ËÿX•žïº–ñŠ´uû‚Ž”^ú ¢ésY§ÎÏâ¡.éè–ç|“‘“ÌKiÒWîë»4bÍ-yÚUû¦â‰Å?'¡x¤F¥‘¸óáÓ\yÕÌqûöítP·Ûyã7œ½¹ñãx��0I„õ)õwÔ©öôM'Ð>äÊú"Ë?o‡¦êù�ð`Û®£—þ‘~Eúêé®N ̯<Yü ®¡tèú?©ÿÏž¥äÄÿèÒ¹WTóx«ºÇ ¹\XO_]nÐé¡`þR¤{Îr‘Áµ§5”!¨»Áù±ùš,ÚBÍ Îeº¦Ë|[²zö’¦ZOŸ´Íh¤k¿Â÷Y/û¹§<ß™Ë=‡ùúä“OæÛpöfϯã�À…ÖgR!µÊ^¶àÞ©eáë¬Äˆ¾˜p®º/µlXŸº¬e¿X´|n)ÃÍ1Ù)ëÇ«ŠlFK—žxÛ]U€X¼6}Þ¢+æú¥™þ·Uõø«êõ.é܃–‚÷iˉ^eþ˜rOužo^V2ì7êÖmgON2.¥¹­KG«u¨ûï©ÿ·ûè.íê¼1¿¤ÊeM^V[eæ>ešÜk¶Ô /¼n«¶¶6çå0~��&|X·ߨ'²_ûº48ã†ÔeBý22‡u;´½ âLwIôgÕ5ücêÁ¬î\þUíü¹Þûü¯–`$'tãÌ¡ìnݘá•jêøƒ†æ—FLkôò몫ü7õº¿(¹$¬Ï*1tA‘†ÝÚ×õu*ºSîAËÁ»Õ»å<^ÌÒTßIU”¿¨óƒÎ]v콉oõEì×zõt\b±}E¼&cˆÎJ¦¥4÷o¨s×O%7©þÕó²¶–ÿLgÜ5ô©ZO\)œ ù§ûqWŸÜk¶”w9L®w‡ñóx��0A€Âú2÷O•«îèïÔ?n¿në²!.Ó?BM1§Ûîû=wYøgv+·ñÔ¾UãïÔÖ¸SÅóÏ•hGËjïþfõ¿`šá;ôlëAÕ¸kÖí{¶×·éü€³f}™û¬‡ÊöêèÙÌ뵃Â}/«–þåßâçansëâaÝÕÀù6ÕÏŸWûœÕ«5rV—Ò·É´ï¡yþŽ,ÞmSV·püQÃ]û=í<­ÓC÷4yémß·}}L±ð‚{êÛ÷çïüƒ{ Pó¹çÈ/ù.‡ñûx��Xo ëÁF€x8‚Vð¬EÍòYC�Âú#B€x8‚Vð¬Eͼ÷^F£ÎÞÕY‹ã�`=ÖÄô‚g­jf‡t·m;¼¯ÖZ��ë…°¾æf5{Nö}\Ü ‘y˰ÎzƒqÏ…qÒwvÙâ©Uæ-´»S‹oäSàÜ÷¾8nÛþïj­åñ��°ëâáZÁ³–5Ëe9ÌZ��ë°c´‚g­k–ír˜µ>��5Â:ŒAÐ žµ®™}7û®0öÏXÍrú� ÐÖa ‚Vð<ŠšÙ÷[wŽ}ö•<Šã�àQ"¬Ã­àyT5³ÿESûçØÿ©ý/.‡>�(4„uƒ <ªfÞå0ö?š´ú� ÐÖa ‚Vð<Êš­f9Ì£<žµVHï�;Â:ŒA8 žG]³7Þx#ýó–[SH}È}/llll° 0ìå0vP·ÇŒLËa iBsß ›»acZ÷ÊgêŒllllùl… Þ €ü0ll„u66¶‚Û A!½�ùa<ØØÖ½ò,ƒ-ïr˜¶¶6goaaràb<ØØë�éêÕ«ó˜ýÿ…†É€‹ñ`c[÷ÊÛ“ìñãÇ r²°¶ì_2µ'0û*»}µ½09p1llT@`Ù·ot—ÃØ·u,$LÎ�\Œ•hö?äNdö?œT(˜œ¸66* ðÜå0µµµ³†É€‹ñ`c£ò�Ï»æ½÷Þsö“3�ãÁÆFå„B[Ãä ÀÅx°±Qy�ãÀé ­–Ã09p1llT@Áøî»ïæ'µh4êìÍÌô0Ïä ÀÅx°±Qy�ÅéîÄf‡÷åØKeVz~½å49[w5 «±|ÓÜŸUª1ü¡³Î VËRrü+uŸyKm­ ÚQ\¢†èˆóÜ:òíý9’ßëbøi•¤Ïõ&•ÕŸTÏè´óäz™ÖèÅö…ï1ò™F“–óüj(ÚP<ׯ¢­8ܧ¤ó*xØýëÃ_©µ®\¡ô¹ ©4W޽+Õ¿†m.SQqX}yžp·vؘ¨<€‚ã.‡±ÿ»;¬?ìêûzÊeržGTºõ :¯Ž¥Ã˜•øZ±£5ª ©©¹—¬Ò¬î|þŽŽ½Þ©³ÝÝzïÐ#ºïÏ6©x¤^UÇ~?„­I žQµ˜É6ûÇ‹©yÛaýf2õ‘É~q½]¿]ͱïÓWÏëÕ ÷%œÇ¶ õ´V«µgÂyŒy© ~½³Iå5ÇÕÕû­yw{Žþ\{šöi7ay¢ò� Îj–ÃØaݾåãZðcbÍ¥ k"®. ¥bÂÖH—êK#Šç|y0¡¾pµaÝ×÷7{MÛtzÈs%ýþ uîú‰:ú³þ~Iö…UÜÕ¨óXšÑH×¾®†Okbà†F<ß:¤?lyI=“÷=˜ciªï¤*«NéÊdÎQ°F?PKÕ ]º~V „uä‰Ê(H[c‡õµšüÜŸËÆÆÆænù𣠕Pì_ µï cOp™® »aÝþ¯ß܉•ÍÝòáG.* `¹ÜÞìû°{¹Ï­Åºu&V�.?ÆÆ”Ê(hö¿hjOrö¿pjÿK§.7¬¯Åºu&V�.w<hŠÝröd1ec£ò�Ï^“¾Üm—[ã½êî7&V�.?ÆÆ”Ê(ör;Œÿñtö<i9ŒwŸýÿ~rÛ�w<àÊ:rE匫W¯¦—»ØWÒíPîýWJßxãôdç.‡ñ†u¿×­3±pù10¦llT@A±—øÿ(’Ìín‡s;¸Ûíýmmm ºßëÖÝvÀñ€1ec£ò� ŽÌí@îNpöfò®®®t`·¯À{ú½ùi-ÚL~ŒŒ)•P°¼ÿ0’»¹KdìÀîÝïçºu·M�ðc<`LÙØ¨<€‚æ®cw'»å6?×­»m€ãcÊÆFå<ï:öå6?×­»m€ãcÊÆFålö:v÷Ž0Ëm~ñ»=�ÁåÇxÀ˜²±Qy�н^Ýøo~­[wÛ�?ÆÆ”ÊØpìPži»_ëÖÝö�Àñ€1ec£ò�6$ûÞë‹×±ûµn‰€Ëñ€1ec£ò�6¬LëØý}[–’ã_©ûÌ[jkmÐŽâ5DGœç²åg[>²îj Vcù¦¹óªTcøC $fdcDцâùóìn¡¦˜ÆW¬i^<¥ú’ÐÜñ”=£pÏwJ:Ï®^ª†£Ÿ)ÒX©Pú½mRyc».ŽN;Ïc »}ø+µÖ•;ç,¤ÒH\Yõ®Ñ¨œ¾´pÛ¡p_ÂyQöÜvòáG.*`Ãó®c÷cÝzöë¬î|þŽŽ½Þ©³ÝÝzïÐŽ<¶Ÿmùg6QéÖƒê¼:–¯VâkÅŽÖ¨2ü¥¦æ^’;¬Wç ügi*Þ®]U¿Ô…t¨žUbð¼Z+žQç@–ïÐú^±æ'uèìÿ(aÙïêÚÛÏhssLcöc,”:?×;›T^s\]½ßγ\Øa½8¬>匿ɵ¿¤žÉûÎŽìe?,åG.*�)‹×±ç#¿6ê Wû°ýl+?ÖD\]Ò=ç±ÍéR}iDñ¬/®›Ö§ÔßQ§ÚÓ7S±ÝuO{µ½ãZvWx“} 7):ú 5¦ÏÕâ ‰”Ô‡¤¾“ª¬:¥+“¹|K㑜ÐÀW#ž°ŸÔXì¶´öhÒÙ“‹õStT�ö:vwRdcccs·|˜Ò‚‹Ê€‡;)²±±±¹[>LiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<V?)ZJŽ¥î3o©­µA;ŠKÔqžËž•¸¡Xx¿ÊCs??T¾_áØ %,çë`î˜Z´³8äÓE.~¯¤ó|.ì6?loU]Ù&ç\ïV$þƒóì:H~¯‹‘žóžÿ{TrHÑæ2‡Õ—WC…lZ£O©¾Äé[eÏ(Üó]öç=9¦x÷oÕÑö‚v”¨¨!ªQç)?ÌõQÂ:Ö•�ÕOгºóù;:öz§Îvwë½C;òë?(yR[›ßÕÕñéÔãY%c:º³Vá¾»s/YÖ¿èüù«OÚŸRÇtíÕo>¤ØXn ÔJ|¥Îƪ9ö¾z‡©;ë-©±ØóÚvèwú&1›zœÿ{”îi8úsíiÚ§Ý„õeXšŠ·kWÕ/uaÔíïçÕZñŒ:¦æ^²Zwþ¨Žc§Ôyöc}úÞ!m&¬£�Qy�ðÈmRL¨/\GXOj"Þ£KCÞ+Ì3éÚ¯ÒH<eL1¢hCuêDÂyœ»©sT«ªðš\ÿ”îÈP7ë¯êª2Ç÷˜ú㣨¥ê„.]?«Âú2¦ÔßQ§ÚÓ7=Øîi s¯¶w\˹¿'ûÂ*&¬£�Qy�ðÈmRÌ7¬gb‡Û§´·kÈ€+жiù¦ê·½¢K“÷}Y˜ìQë–EoÍ8;Lp_‰ÞSeÝI]š”•W¬MÕçø­[ê>üS»4ž íQÂú²ì°þí꼑ª€ËÒ—ŽkKSLãΞlÖQ¨¨<�xä6)úÖ­I Æ^Qí¾wu=½<cÇÔ”^Ó½Y;ý^£ée1Ù™íïÐö/ê­SîúðŠkþU±Áu\¯n›éWgí–ùº=¦Š¶Ë9\ýOj¬ûEm?ü±Æì?KX_¥™NÕn= ŽKU"Õ߇þðŽí؜ךsÂ: •�Ü&EÃzò–.·ïWE£!A}Þ¬ýzÿÈÜR–l‰¤ƒTh·ŽtýÅY?­Ñî—U±ç´s¸ˆíi žnTEëy ¦ÏµýKýj¯OgÏXVßhXcëpåÏu¾9 ¬?Dªþ—ÿ¯^¨)S(T®ºÖ{ëY•œèM=“Â: •�Ü&E?Âz*(Ž~®ö†]ªšÓÕëG"Çj/ iÜÞ®øž÷•ìS¸¸IÑÑõJ´™Öà'So±IÅá¾,îL2«ñØs 9}gá¶UM±[Îë°¬ä7êj¬Õ‰Þ:;²GXG¡¢ò�à‘Û¤¸Š°>sSçZžPIÍ)õÞY|Å|ZãW:Õ¼s¯Úæo_—Khô—5ѯÏû†çoi%¾Ñ…ðOµíÈÝ^òYbJƒç«¼¤NáÞ‰¥W¥­1õ©UãÛ_ve}¿ªŽÆ]YRG/ýcî%^+Öp‘Gveý!ç=ÍÒÌà9µ”—ª&|Yw2¿(»÷çÏ76Ç?ÕøÒŽ³ºcO!¬£PQy�ðXý¤¸ÂÕÔÐsŠ/ ;SV¤j³ŠJ?X*áJ_aÎÐNj[¿°ž ICÿ­WŸÛ£2çäE¡rÕŸø/ d\ž3©xdOê|”©%6’14Ú÷X?âi§½M*«?©žô­ûÖÑ¢û¬×êÈÙk™ïo¿R çÝR¬ië|ýÖþÊúÃÏ»]KûV‰U¡JZ>ÐèrwUïÏÞs”ê5‡Vø7rìó¿O±xóç¼»íåÔ6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀƒI€ËñÀ”6\T�<˜¸üLiÁEåÀ#›IÑJÜP,¼_塹?*߯p솖ó‚œÜÓpôJŠv(Ü—pö­ë®ba5–oš;/¡J5†?Ô@bÖyA6,%G?S¤±R¡ô9Þ¤òÆv]vž_GöûüðWj­+wŽ-¤ÒH\Y½Ëô¹zMÍ;Kœ«ÈgMæÕ Ôˆ¢ ÅsçiÑVîSÒyÕêdn+ÔÓ¸óŠ|¸íåÔ6\T�<V?)þ xäImm~WWÇíÀ9«Ä`LGwÖ¦Böݹ—d-h‡£jÙ³_ÏîÞ½îa}6QéÖƒê¼:–PVâkÅŽÖ¨2ü¥¦æ^²zÖ÷Š5?©CgÿgîÃL*Ü^{ûmnŽil=ólê8®w6©¼æ¸ºz¿Íýƒ–õõÿHñt_°ÏU\o×oWsìûTU±°«õï õ´V«µgÂy¼Z™Úò!Ù”6\T�<V?)&5ïÑ¥¡œÇ¶tíÏþª¬ËQ¬¥^Ç.]ѹ5 «eMÄõÑ¥!ÝsÛ¬‘.Õ—FÏö &û.nRtôÁuÓt[Åaõew)ÕG–¦úNª²ê”®LæT±$5mÊáJñF0­‰ñ|CcÅÔ¼å%õLÞwö¬a…Ê€G~“â]õ…ŸÒÞ®¡®¦&5Öý’vûLwR¡}-Hîœp»·KÃY¿ÁÛê=±Guáßk(Ò’×;ñ”?zQ“Î+=ûjn•öE‡}¾úm)9Þ«öú'uôÒ?œ}XÞŒnEªôÄå쿱I‡õ2U7T]Ù&…ÊUwô·ês¾áÈ—!Ù”6\T�<rž­I Æ^Qí¾wu=‡5ÝÖØÇ:¼ýEuÙ×aM ëÎ2ŸÚƒê¼~7‡pkif SµÎúþ¹m—Úzoû”³0{MÛkôò[ÿþ`]~ñS:»¹àÛ„ìÜR¬ikº­ÐÎ_ê‚ kòMg ©koµNôþÓÙ‘*~æ5µŸûBÃé×ÕÙ§Ç÷žÑ73ù÷,·¯æÃ”6\T�<rš“·t¹}¿*s ê²n©ûp­Zb#Np5-¬Okôò›j¨hÊ1¨§ÜÿZ§÷<©Öóκðiù¦ê·½¬žÛ~/AY¥ôÒœÍÚy¤ËYknÿìÇ:RѨӃù…l+ñ­zßIUU¯éJ"Û¥ËýÔ‡¸]•íŠÿèÓǶ™Ô‡°ªŸ¨£?ûëô‹ù’MiÁEåÀ#»IÑwŸ«½a—êßæ~çñ˜š\q~°ùuW‹œ¹DêOåwç–Ѩ–¬O_ç%Ö°¢õŠÄ½??¡¾pµ¢#Îã|˜ºœÉ$ Å#µªŒ\ÕΞ¼Y7uº¶Ž°Ž‚AåÀcõ“â´Æ¯tªyç^µõ|çüá ¿T8sSçZžPIÍ)õÞyØ•dBž½îúOêl®VmÛ…D2†nÛ”ÏVyI½K¯¾ÛWÖŸzJGc_/º²þŠ.eýK…~™Õ힣ªlüµ®¬æÊúJ5´&ÔÿùÕ¿4iMjèÂIÕ­ù79ïi–fÏ©¥¼T5á˺³Ügʬú¨O¦¾T¸ÂÖÞ_Ôözȱ'úõɇJ/IKŽ)~ægª¨íÔ�Ë`P ¨<�x¬zRL/¡˜{íâ-cXŸú³"U›UTrX±Ñgçb³=çÜë{n[¿+ëöæ Þ×ü–1¬O*Ù“:ö2Ïr/;{ï³Rqõ/t¶?Çe5~±ï~¾Mõö/'¦Ž+TöŒÂó¾Y©†3ƒúøÕQÓŽ}ù²ú6Xë÷÷°ón³4oWU(¤’–4ºÜ­ªú)u\½¯êñ]©`½ì絕ýþȽöB½Êæ¿™*ÑÎæ7}»¿ÛçóaJ.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�«Ÿ-%Ç¿R÷™·ÔÖÚ Å%jˆŽ8Ïe+©ÑhÓüÏ^°‡Õ—t^ö¨Yw5 «±|Óܱ„*ÕþP‰YçYJµwýôs*Ùïm“Ê›Ïèz®mùb™ózN±ñ,+}®^SóΧԹŠ|¦Ñ¤å¼� $¿×Åȧ/)T~@‘‹ß§*’%¿ûè"nŸÈ‡)m ¸¨<�x¬~RœÕÏßѱ×;u¶»[ïÚ‘wX/÷yÂÊ}Mö¼¤âÖM:{µÙxD¥[ªóêXú¸¬Ä׊­QeøKMͽ$ ³ºÝó²¶Õ¿£kvJ…¬ko7hÛ‘ º½ny6ÓyÏ‘õõÿHññ鹇‰¸Þ®ß®æØ÷©uX(©±ØóÚvèwú&ªg•¸öŽê7Rl,»JøÛG—ò#$›Ò‚‹Ê€Gn“bB}áê<º¥äÄM}5’xì¬ïkÞ¥Öž gÇ£gMÄõÑ¥!ÝsÛ¬‘.Õ—FÏúÂå„zZ«¾ŸÉµnù¹ºoûs4{>†õ%Ö²í Ëð÷Åú«ºêŸT¸/áìXûèR~„dSÚ@pQy�ðÈmRÌ7¬/eÝŠj_é«ê2麬¥©¾“ªÜÛ¥álëþ uîzV]#3ÎŽ”t@Û£HügÇ£6¨«~V?«+W¨h“ÊêŽéLßßó Øö©^µ§ÂçÑKÿpöáûJôþ›*ëNêÂФ¬ä¸úcmª~ü]š¼ï¼&WyôÑ üɦ´à¢ò�à‘Û¤èwXÿQÃ]´íÄe_¾Ê÷Ǭƒ1­=¨Îëw|°ZÉ>…‹›õÆàEª³¾šêŸThŒ¿¯WÛÏ©w81»#jx|¿N“뙿¥XÓÖt íü¥.ŒÎ-‹Á"3ýê¬Ý2ÿ÷­¨è1U´]Öd^;Ï>šAnãÁB¦´à¢ò�à‘Û¤èsXO_…¶¯8¯Wˆ]lZ£—ßTCESî!höš:¶7èô'¼¦¯¬×«£ßœ$Òêï¨ÓöŽk©è—;+ñ­zßIUU¯éJ"߫ŅfZƒ§UÑz^ƒé5ëî7»u¤g,ÇíCÍÀlJ.*�¹MŠ~†uK?ÆÛUYÙ®ø~EŽ<$oérû~UÔŸÒż®›¸f=“i nÈ;¬ÏYïoL•é¼ä±Æß·>º”!Ù”6\T�<r›WÖgnê\Ë*©9¥Þ;+ÅÀ»©¶jT• ‹žÕÝëÀ¾Úù'u6W«¶íƒ[ŽFÕñv’S<wXå%u ÷Nd¸²é¬S6ên0wÕÿI·¾°—À¤Ok<þ[=_ñŒ:2\í_©†Ö„ú?¿ª÷–Ö¤†.œTݶ—Õ³¦FvÞm–fÏ©¥¼T5á˺³Üù^uÍ—}e}¿ªŽÆ]YÏ´Æ¥c϶fÏlJ.*�«Ÿg5{N!çõ ¶L÷éžú³"U›UTrX±ÑbøÔex¼>½÷·XöKß›½e B“ŠGö¤ÎG™Zb#™C£i÷Y¿?¬ž×~®º2çÝE!ï<¨öåî÷½R gõñ«ÿ¢šù¶6©¬¾Mçü[’‘Ù*Î{jïT¼]U¡JZ>Ðèr´Ú>ê‡E÷Y/*®Õ‘³×”Xrl+{¶}4{n{ù0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ð`Ràòc<0¥ •�&E�.?ÆSÚ@pQy�ðX³Iqæ¦Îµ<¡’šSê½3ëì,$S<wXå%u ÷NÈrö”‚¯¡‰,Í žSKy©j—uçw,?ÆSÚ@pQy�ðX³IqêÏŠTmVQÉaÅFgœ…dRñÈ…ŠÊÔ)̰^ð54‘¥©x»ªB!•´| QÂ:6 *�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�àÁ¤ÀåÇx`J.*�LŠ�\~Œ¦´à¢ò�à±f“âÌMkyB%5§Ô{gÖÙYH¦4xî°ÊKêîåì-(_CYš<§–òRÕ„/ëÎ#îX~Œ¦´à¢ò�à±f“âÔŸ©Ú¬¢’ÊÎ8; ɤâ‘= •©%6R˜a½àkh"KSñvU…B*iù@£„ul@T�<˜¸üLiÁEåÀƒI€ËñÀmà •�&E�.?Æ· ?6lLT�<˜¸üS/z�x0±pù10¦ _ô�ð`bàòc<`LA¾è=�àÁÄ ÀåÇxÀ˜‚|Ñ{�Àƒ‰€Ëñ€1ù¢÷�€+�—ãc òEï�&V�.?ÆÆäêoû›>ýôSÂ:�x1±pù10¦ W¿ùÍoæúó�ÂÄ ÀåÇxÀ˜‚\]½zUÇ'¬€Wnë= G©¤h‡Â} g_6f•øPáæ]*NÿüM*ol×ÅÑiçùõa%n(nÑÎâPúœ„Ê(rñ{%çsa·ùa{«êÊ69çz·"ñœgµEŠãX¸‡û²|ŸÓ¢3¯ªµagªŽMŠŽæs¦6�ë®>ü•ZëÊJŸ÷J#ñÔ߆,ØmÄÂj,wúS¨Rá5Ȫ•e¹ý!~´Þ�ÙO¬–’ÃQµìÙ¯gwïÎ9¬ßéûHçãcs1@®½ýŒ67Ç4f¥_°.¬;ÑùóW5ž´"õâÚ;ªß|H±±ÜB¨•øJ;Usì}õ'Rgn½Ùa½zQÍ&ÔÓZ­Öž çñjëóTP½óÿ©ûÓwuh3a}E©>~½³Iå5ÇÕÕû­9v†ÙxD¥[ªóêÜß+ñµbGkTþRSs/É‹AÛ6°±Ñ{�À#ë‰ÕQ¬¥^Ç.]ѹ%Á/£Q5‡ÕgTÞËnWë®úµª ¡ÉõOéŽiM ÜЈç*¬5Só–—Ô3yßÙ“ƒdŸÂÅ„õåYšê;©ÊªSº2™ßpk"®. éžóØft©¾4¢¸×ýÚ~´Þ�ÙM¬Iu¿¤]Ç>ÓThÏ=È.’ü»¾lFÛŽ^Ô¤³kýMküË7U¿í]Ê%ÈNö¨uK‹¢·fœ&šÑ­èA•ž¸œßUYÂúCØß^Ti_tx ¾]q>ìíÒ°û´ýh½�<²™X­±uxû‹êN/ ñ#¬Ïj<öÜÜúÝГ:vỼևûf<¦¦}^6kç±ßk4½,&;³ýÚ¾óE½uê€ÊÓm…T\ó¯Š ®×zõ ¬!uí­Ö‰Þ:;rDX_Ùì5ul¯ÑËoýûƒµæÅOéXìæ‚+äÙ›Ub0¦£µÕyý®/üÚ~´Þ�«žX­[ê>\«–؈ |¼²n%4Üû[©ú‰ÂWî8;×[* ÷êý#sKY²}—ɾ°ŠC»u¤ë/Îøiv¿¬Š=§5˜ÇŠ?ÝèÔ®ÊvÅÌ3æÖW–>?©~Gº·‰ÚRrôc©hÔéÁ\©:ÕŸ.¿©†Š&ß‚ºÍ íGØØè=�à±ê‰uþjóÒ-ÔÓ¸ó²Ü%5mÊá®$k,ǵôVêÏ5n_„ µ Å#µªŒ\ÕΞœÖWf +ÚX¯HÜû‘/¡¾pµ¢#Îã,$oérû~UÔŸòýJ™þ~纹¢÷�€GîëC®¬ÏÜÔ¹–'TRsJ½wÿæ[Rý_¨oĽCʬC¿W¸n·ŽôŒùv•0[ÖD¿>ïž¿S‡•øFÂ?Õ¶#t{ÉAMiðÜa•—Ô)Ü;±ô˜­1õ©UãÛ_˜ye}êK…+êÔѿ²œkèñHÃúCÎ{š¥™Ásj)/UMø²îd~Ñêß_Þfu»ç¨*­+½²¾Ò±§þÜøŸÔÙ\­Ú¶ –gùøËÙÞ°ïäŠÞ�ÙO¬žuæÎ–ñÊúÔŸ©Ú¬¢’Ê.þ%Ë) }|RÏՔͷ*{Z'ÎßÈù–vùK…¤¡ÿÖ«ÏíQ™û B¨\õ'þk™{XO*Ù“:þ2ÏÒ …ì{¬Ÿ?ñ´ÓÞ&•ÕŸTÏ:ßK~Ž¥©ÞWõø®N ¬ôÁaÅÞR¬ië|ðnþ|Ó²œ‡Ÿ÷ôû‹·«*RIË]®O­øþ|fßý|›êûí‡ÊžQ¸'Óïh¬tìöÕøKÎwzó9¬ë‰�LÎ�\Œ0=�<˜œ¸`z �x09p1Àô@�ð`ràb<€ è�àÁä ÀÅx�ÐÀƒÉ€‹ñ�& €“3�ãL@�&g�.Ƙ€�LÎ�\Œ0=�<˜œ¸`z �x09p1Àô@�ð`ràb<€ è�àÁä ÀÅx�ÐÀƒÉ€‹ñ�& €“3�ãL@�&g�.Ƙ€�wbfcccónÀz¢€#Ó$ÍÆÆÆ¬'z ���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`(Â:���`$éÿ÷´,?ûw����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9af_SDS.png���������������������������������������0000664�0000000�0000000�00000020003�15030617045�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ý���Ú���z­þc���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��˜IDATx^íÝÏk#GúÇqÿ:.ºú6ä°{òIf/¾¶bÀ‡9 ,ŒÀ‡asØaZ C O`!ÂBÆ rX â;°9ÝBÆèB0f†A<ß~ZÝr«¥–õ«««ºÞ/(ÿIî§»ú£êêÒž����(¡���(¡���(¡���(¡���(¡���(¡���(¡���(¡���(¡���(¡���(¡���(¡���(ÙÖ¡{oÜ¿q øƒZ�6µ“ÐM£Ñh4ó �àŽ„nÀgþ°©Öìw�àB7°%Žº�›"t[âð¡�°)B7°%Žº�›"t[âð¡�°)B7°%Žº�›"t[âð¡�°)B7°%Žº�›"t[âð¡�°)B7°%Žº�›"t[âð¡�°©š‡îŸ$ šñkœi@ºC¹M~K䓌“ùß˶fWŸneÐ=Xüó¸5%Jsþ¹¾Ü$?Ívi¤¿Бóÿ„òâ>oòKkù(£ÁWÒ9h$Ïß’Îù¿¤{üDÂQú€«nŸ‰ñèRÎ;­ä÷rÐéE¯¹ù›ý¤Û~°©Öìw�à–š‡n¥A9 ‘ƒl„ü5úÞ±½fƒå(” e”|9õi Ý8üæK?ãú…÷' èÏÒïüIZ¯¾–W­cé O¾g<ºÓÖ‰ô®²‘üF†á©Lc¹¼” Êðvœ|k$—gêO2¡[­¸}n/¥<“p˜¾Æ(Ô_~)A#ûFÃOÞ„Ÿhœwä ú{õož´üþTo6ÕÚ›ý�jÂÓÐ_Iïð‰„דoDÊÝ7}é4Ž¢°ý« {ÇÒê]E‘8Kn þÏÉ×»ð{ô\ÁükÑ¿¹õx…ÐÉmŸñ°'­¹mSð<žñ#üè~z(à\®Ò7r"t�6åoè^³¡{´ãŸ$Ö Ýã(sŸJ£Õ“¡æ à‡Éÿ§ôyöO¥³Ë £#ÝgQHîJ8åB~ÞŠÛGGº[mé†ù›¹ò"üè~ÚÔ7óWj|Bè�lÊãЭ9¢+ºƒ(.'4DGþMq»ojÇLè^D§–fF±õë“ÙàrïclJçt+½éì–tzßÊ`”Ù­¾}tÞù›^:½@çt¿’7÷†úú³ïÈÌÕ×}ëcfZHãñÝÕÛ¡\DµŸÞG×43%IÅa;ýy¶5\µY"¾ÊÒ˜Ü/ð*3E%úúì2¿ÝȰßËÝpiÅ›=}=¶°éµ��îGè·î¥#Ý9÷fÙnfG±uäû™fÃÊÜcÌßÜØÌ¾ÆMé|ܰ=W~T}í3CC}(Ý D;ã[tø×WòÍé‘Ýï¢0ý»\‡e_k:þQÂö‘t«hȸ½”³Ó7r ¸º/ì/¹x%ññíkÓ›t£}¨ÿ¹¤W‚ÔøZú§'ÑÄþ4üOnà=’vøcåoðvQë]í/¶îw�€Å¶îµíïø‹Bå‚é ÙÐ½Š¥¡[§gÅÛg®eCƲp¿Jð_‹n‹(hÍ„ä5¶Ï; cŽÓšÚGë§+ò´ä´ «úæïïr²0Ä꛾ì 7Jëñz#Û Œ‡çr’Œ™}ücô¦à…œ ~4cÑÔ¬ ì¢Ö»Ú_ìÜï��E¶îµíïø Be<ÒמŸê±«Ð_NÿÓ‚QàüýZ_ß‚ ±ièÖ·pžø¡{fû,úw„n[üÔ¦ŒtªGôº·UV¸Y—ýÑ€ÜëÉsúºNÎkB÷œ]=�ÀŒ­{mû;þ!^>ï±´W]2°È’ЯöÑX|'SLZÝËésÇKÎ,Ç71¾¥½¿aènêüܯ2s¸“u»ƒ—2˜Y}b•í£¿s0Y;<3‡{rÙÿñâ7 ±òˆƒu~¥šÄºoæ–=ÖÊtz2w#æÌ¦%Ç_<UÆ‚7w„n�À¦¶îµíîøWýð—ôRüìïÍ¥Ö ÐÌýnvtpöçK>0'0f?xFÛ¾ÝpÁ+ˆCÕçþ'ûá8ù®VÝ>“`þ"¼˜}¹î+ÝÖY62¼lDy‘Œ2GûZûóÜ›ÐÜ& ÝÙ©W©Û¤×îÌ.ïY‘]ÔzWû‹•û� ÐÖ½6?|gã1°|ÚÎîÌ_é‰W39•g¹9à;eÖà>wÕF§Àe®²è×- ÎÞ%+•¤7ë-˜—^ B7�`S[÷Útüð=Ç@2 (z=ó-¿Æv2Ý(»,ßÌ’’Kn^8mªHî*Òt:Vö*KfynÃFp&¹iWUÒ×´­]<†ÚÕã��ÌØº×¦ã‡ï8üAè�ljë^›Ž¾ãð¡�°©­{m:~ nx\ÐvòA:X‹nwøaµÞÕþÂ~�nٺצã‡ï8üAè�ljë^›Ž¾óíˆ× þfý»ïku»ò¢Ó¶vñjW�0cë^›Ž¾ãð¡�°©­{m:~øŽcÀ„n�À¦¶îµéøá;Žº�›Úº×¦ã‡ï8üAè�ljë^›Ž¾ãð¡�°©­zmíôi4VM�¸ƒ^� ",€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ� "t€ŸèýÀ B7�ø‰Þ^‡4šÑFè�?ÑûÃK¿ýö›<þ<@4šé�ð½?¼£ûÑ£GqûðáCò]��€òºá•_~ùe¸5|��˜@è†7tTû³Ï>“§OŸ¸�€Q„nx! Ü_|ñEò���sݨ½wïÞÅ7¯¸�@Uݨµ4pë��ªBèFm½~ýšÀ ��¬@èF-éTíF��P5B7j%ýÐ ܬÁ ��lAèFmð¡7��ÀV„nÔB6p³7��° ¡ÎK×à&p��[ºa-ýÈöûð¡7��À„nXIG¬>|¸4xëR€n��àB7¬”®±ýü#ùάôCoÞ¾}›|��À^„nXG×ÖÖ@­íücòÝ;aò¡7��À)„nXGoˆLC·¶÷ïß'?¹ûЛì÷���lGè†UÒQìlӻѹÝûÛßøÐ��à$B7¬¡ÁZCu>tkûË_þ"< p��'ºa§OŸ. ÜÚþð‡?Èÿûßä7��ÜBè†tŽö¢°oÌí��®!t£rº&wÑ´’¢¦7T®òá9���6 t£réšÜ›4]^��Àv„nT*»&÷:‘n��àB7*•_“û¾FØ��."t£2‹Öä.j„m��à2B7*±lMîl#l�€: t£ËÖäÖÁ!l�€:!tø¢5¹5lë”]B�� NÝ0jÑšÜú5a��Ô¡Fe×ä&l��_ºaŒ~|;a�`3=OégHÐìl.#tØçÏŸOG¹i4F³¹é ÿ4»šÚ=|øPÞ¾}ëäÀ¡FiGûQ'»QwP+÷P3{iÐ~÷î]¼5€»¶Ò{Œ¢3su²õqµr5sƒN5I¯ ë(¸®Œf;ö,Egæêd7êãjåjæéÖE\˜zž£èÌÜ@ìF}ÜA­ÜCÍÜ”z¢5Ô©'º€ƒMس`™¨“ݨ;¨•{¨™ûòSO4ŒÛ€= FÑ™¹:Ùú¸ƒZ¹‡š¹OC·Žtk- Ý𙨓ݨ;¨•{¨™»4\?zô(®!ÓKà=:37P'»QwP+÷P3·è”ú{é”6ø{Œ¢3su²õqµr5sƒ­ó¶—aÏ‚QÕvf?K¿ó@¾Ü$ßÁbœtìV]}8†Öűäjf/V(Y†= FUÚ™¯¤×jJ«w%ãä[¥¹J? å›n MJõ'±ÜôO¥Ñ8•þMéÕrNeõ1y EGͰߓÎA#þ{÷öZÒ ¯ä6ù©+ª?–°®ÍjFŸU6][§h}lžB² ½Œªÿ (éx:Ò ÿ-a÷X‚ð§ägN¿Ë°w${­ž K?£÷H}éuZñß½··/ÁÙ;Y|Þ¬ÿqô« ôØé†2}Œ¿3]ÈéÁ±ô†¿Ç_»¢þµªŸÍjf²Ïò“†ììÜm^âzå× H/ÅIwàÚØœOuŠ÷Õ¹´Û] £Éèíí•„céôŽÃF~9=žNÝ(5³›†ïìr€.…oö,UEgöiЕfô¼úÜ{…—þ>ÊhðUæRvÒš]|J~e]z)þ𙓗«¨S% j¤û̃î@6-}ÙL×gµcHG£/å|zÅ mÛ¿ñdpÞ‘V;”kÇ'ÓµÂö¨™tÕ’4|ë •úµíس`T¥Ù(”`᥿±ÜΤœÉÅ0}…ðþçr„2J¾³¶Âç³_euú4n3 k G›K w1"ôLÌ[ÞLeõY¶Oß^J·Õ–îÅp:ïz2%䱄£Í޾܅ý†œ^X=å§HeµÂÆÖªÙŠ}VúÆñ þ½»Ö\çÍ}|OE#zãH÷Uæ±¢¯Ï.“+uÒ‘nñÖm¡!ÜæðMo�£ô ¨ŠžÀ÷ÞÔ¨sñŽw~s˜í£¥ËTY§‰Ÿ$ ‚ÅS JwYúXÏ:_ÉÕ­½§°ªêS| EÛmØ“V)o2£7À—_JÐŒê{=™ßí’ê%¬k³š-鳦÷(|'ô__KÿôÏëßósÓ—N3 ÝÓþ/ b.y¾õƒqtη­7ZÒÀ¨êN@¬ƒÂînä´%Þ7ÑûFúÓQïM,>ÛUtôhñ4†òÂÞPùFºÝ7w'FKUSŸ{öééH^C:¯â“^Ø¿{c´û¯>!t»g£š-é³&#Ô»¹ x<<—“üq Ïý`‹©5“.)˜†o›ÐÀ¨êN@ëÜÔ˜ÎïÞ¦“tó¦¯TÕA!ÖES{J w:šÚ“îù; ‰åª¦>ëÝ<y#{¸£+H„n˜³IÍ–öYÓsJCöâ•­¢>+ü~ƒ7÷z¼ÓüöµÍTÈšJ—Ô�þþýûä»Õ¢7€Q•€Ö¾©ñVÝ£ÍW°pø&JUmP˜,»¸¿âÔœíÃÝ\ŸÉK‡æDVRŸ öéeÓQÖrûƒô‚¶“obí ÝÉT„Ì‘·õ±¶·~ÍÖ볦k_±ÓóÒ“¹ãÀ婌eÉÞdiÓ '6õð@e' w¸¨ƒÓÑ»–½ìç /Î$hÉ`ÓißD©ª :ád­7<‡;]°ûR­¦™WI} ¡Iàhç™yð:Uç;éÇÒüš|oñeøCéôúÉ(`ú8¹cÔÕKy:︿¦½½“-ï°õ±¶·~ÍÖï³–NG)m§öç¹ó):Ý<qv*ã®Ù¶S6õðÀúÙ¦´#:I:ñ- ÄÚñK0³T ÎëNOúkÐÇšÞÅžmMç:D}ÝÕ)šš³Ãpÿ»ó·ãз›2Ëd¦>+Cñè[ AŒï~®SzÝ1 ¢7B4ÒÇ:èÈùÀÝ•ôo°#Ý«X¿fK¦Æ7>¶¥w•9n‡rÑmK«{¹ÞI}¬ýüÜíõ¦}Õ•ía;eSo�ØuBãuÒ+Ñsêóη£äd¶Ãp‡ëÜšìisàcœõu ÔÊ=+Õl¥>KÇbÎä08ŽÞPd~®óº×º%÷xúùv]!¨‚+a;Eo�£ôÀ€ý¨“ݨ;¨•{¨™ýÒ„×ZÙt£ä}س`™¨“ݨ;¨•{¨™½Ò°®J¢Ëº„= FÑ™¹:Ùú¸ƒZ¹‡šÙÇõ°bÏ‚Qîtfz7úQüzïo»úøq{èß{¹RŸxíâ™c¥¸­õqØÑ¿ n¡fvJ§“èÜm›?ê}ö,Egæçê´ìÆÈ|›Þ„ä.ý;àjå#5ó¬ÏÚ•>L?êÝ•yÜYô0J;Ø:Ùú¸ƒZ¹‡šÙM§š¼~ý:®ÓóçÏã¯]Áž£èÌÜ@ìF}ÜA­ÜCÍÜ Ëêünõ¶}©À{Œ¢3su²õqµr5s‡Žrëh·ÖLG¿mõfÏ‚Qtfn Nv£>î Vî¡fîÑùÝ:â­ó½uÞ·­Ø³`™¨“ݨ;¨•{¨™›tE]ÙDë§+؈= FÑ™¹:Ùú¸ƒZ¹‡š¹ííÛ·ÓQoÛ–dÏ‚1Ú‘Ñh4F£™j6}¡Àí¨`/êãjåj†²°g���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#t���%#tè_~ùE†Ã¡|øð!ù\¶·G¸ˆc0£FýöÛoòúõë¸Ã§Ñh4F«º™BèF%Þ¿/Ÿ}ö™<|ø0ù†›LvV(õôµ®ÛÞ.„nxAG½Ÿ?ïð:ú ÷pò¨êéj]¶½]LփʣrïÞ½‹G½=zÄ\oÇpò¨êéj]¶½]ÝðŽÞ`ùôéÓxçÃ0ù.lÇÉ£^¨§?¨uuØöv1Y*«hàÖ@¸qØ“G½POPëê°ííb²TÖÑ)&:ÕD§œèÔØ‹“G½POPëê°ííBè"éÒ‚z³¥Þt ûpò¨êéj]¶½]LÖƒÊÃjºœ :êÍÒ‚öáäQ/ÔÓÔº:l{»˜¬•‡µtj‰®ã­[çz3ÚmNõB=ýA­«Ã¶· ¡^Óít%bBض'z¡žþ ÖÕaÛÛÅd=¨<¬‘ Û_|ñ…£«—|’Qxÿ qkœJÿfœü¬,72ì¿‘ð›®MÏw‡“G½POPë긷í«8¯™c²u¨\=Âö£P‚ ”Qòe)núÒi´¤Ó å"|!­²Ÿ/ǽ“GŽÖ(=‘ì=Nÿçä%ºJ¿×‘ƒäyÁ—r9ú˜ü°ZÎ×s¡Ÿ$ šI£íÝéGoS˦o„{Ò9h$Ï£á•Ü&?µA=kí§·½‰óša&ëÁQ‡Êh¸N?^ÿ[·u¹? ºò ;OÉ×åGùûTö=ßD}NÜÌžH8*yëÝþ ½öcé†ÅEQ8 O¥e$Þ¯ÞALGëžHþ”|]–_eÐ=– Ê y35]ÈéÁ±ô†¿Ç_Û Þµ¶›ËÛÞìyÍ “õਃq®uD[wtá.uU’ñHçw£Šikæ; ý½°+A#ý=þ§tÚç2L¯¢éï¼ù—tƒý»ß)½ú]†½“‚‘Ó(h]œež+j§·‰]Ëž¯<úÚkáÓ@ºº2(õLRP##ϽšÚÔs¡Û( ÒT1Þü³ô;'„nĶÞöu>¯¯¤×jÈ^#:V_eþÆèë³Ë‘”1©Eߎ:c4lÇÒ§ïdx›ªãkéŸþyv´+}üæûéïGïä,ê„î.Ekgs,žôÓN$d?ÊuøDZðî5Å¢×zöBÂëM§èHm`ü¤¾ëÎj<º”óNkÒÉNÛA.(}”Ñ Ìœ$Q]þ)½Î_3¿þοå›(d5¦¿“ßæwÆÃž6ßåbú8÷?ÖÚtŠÐaïî$X!ýûʶZõ÷f·ûAGz½Si÷®¦'^ý7z/Cz¢_v’×ãõðÙ⹨eÖ8 H­v(×Ô8¥'ª±Ý¶÷༦}b3 ÝÃ$üGýyÿs9h•ÓOš<8ê`Œ®B’†n#ÓIâÎã¾KºÚ=‰Nø¿&_§ôRôcieNðs–Ä‹~u&§'‹N¾[^ú®h´t§Õí¥t[íLG«' ½,Ÿ=ÜÈU»_gN#¹<‹Sææ Ñ- iýô±ôäl_šóLÕzü£„í£ù‘Ÿèµž¾Ù>DéÉòÙ3é]EÃJ?ù¬Tã±Ü^K»Ý•o¦õ‹Nº—_Fá:3ï>>¾¥Óëß… ­{Ñ|Ó¢77%ÕX/Ã7£íøÓ‹d:‘=L ÌÚjÛ{p^Ïå$ÿK<Ç™<8ê`œ¹'u´ó«ÉÍLÀÂPÂðî]lÅQÆxD-sóÛ´àÞl¢ÁïhößÏ´æÆ¡{iØ(‘¾î]‰ÿ†¥#Q¼” {9Ž”nï¥ÿvÙeÑ¢Ÿiÿ»œ„?.8Aí`øí•„Ý—[N+Ú­]Ös‘ûkÑ`¼”Á̈™ºÿjŽ>~Ñ‹Å?+¹Æé›…fô¦bã«Xå(»Ö(¶Ý¶¯ûyMÉršïK¼S_§)u¨Œ†ïG™ûð›t\椿ÊM!ãëPÚñ !w#j“Ž¡`t4²øqËšSºüµ”i§UZŸøÒþ«xŸ§#jÅy±ñÅW™•#ÒvR  ÂU<¢”Œl+z¼ûéeޗݯåj.XVKÿ®RÝ[ãU÷e ßJonšJÑ ¾`Ä­Äß©îø\Fÿ>Tc§Û¾vç5}¼'sýü*Ó¦L u¨\þ“'K¥—¨öï¦!ÈzRÿOÔý/zß–öÜHز�X4•A¿ÿìþи¶e£¸å*³³šÌý=¼»ºÊåÅxªÀƒÙ9ŠjÙÈOÑã–r9S§N|-ݗ﬛n L±¹¯t×ù£¥13}H-;& ·ÄKÖwݘµóm_«óÚOQþyn Ë–Ó/ïA膗޾}o àÄ·¢!«Ùž+ß,Õ–VvzB|)ûYæІ}éuŽ$8Ó`”´Úi%7ñ~@@qÇ¥£ 'íóܧÞõýR:Ï6÷yÿe÷²”ÝYéÉc?°$ Gÿ'ßG5Œ§Ìݰ¶<ôÄS]¶ÔQГÌ]þ[Óå_Jײõš³ªb35^ºuDïû(dÇóJŸÌO×XöÆ*Ñ^psØÎk¼€ÞÐD}QÇç2„îêl¼í}8¯é߸Ÿïçõ¹J¸J<A膷tЉŽv§á{ÓN> Îä08ž«672¦´3únÒÙÄ¿7¹ìýfYš(>i¦?×3éÊ×Q0˜¬t¬º óÍ’ŸÏ·ÙKÔ³«7,x¾•h89È<G¦œÛ­Ï·= Å§Ò ²vZ—ãhû¦7éÍAgoxK>h¦•|ÀL~ÞîÝ E|³,ëˆjGÚ½f÷™ø$w*Ïú׫×láüí¢‘£ê즞‹¬Zãè{:of„èä­4ÓjO– ‹Cwæf. ãɲh…|SÈwXã8ØgoìLÿ¾ òoòjûlºíë}^ÓÑì̧^6Óà­ƒJé‡[íbº×<}lS8ê`¥ìJ'f–Ä&vÓYMF7ƒ(œL:Ö´ÓÎMQqÊ,í¦'œ7éÍ(]ݤ}÷s]ëõë»%å&ëØf;ñ|ËÏ Ö ä¦¥øç:òÛ釞¬FÃuÑF†>sEúšÊ±Fã²ìz¿ùmŠ«óÌÏ÷%èöîF|²ÎÀómæé.j<±h™ÃóµßP›¡¯ÏŒhûêroZïmWq‰—ÆÓ`×’ÓuÞ-´Ã×µ&sÛ«0Y*ké½ÑR]b°ô-±6NõB=ýa®Ö;©Ì޼n}E¯üÔ"gv1Y*«¤ÓKÒ+_¿~]»‡¯NõB=ýa®ÖŒtçqœÙ…Ð ï|øða:DG·u”›‘mûqò¨êéj]¶½]LփʣR®³”ãëÜíxhèv¸¯Mæ%ÛA_êƒzúƒZWÇ›mß\¼lüL›Þ8iž>¿)u0.?…DÿŸ)$n2ÙYÙcÙ‘ù–¬à}ÍPõ­qJ_;ªÁ¶·‹ÉzPy£Á:?…nãäQ/ÔÓÔº:l{»˜¬•‡1Œp×'z¡žþ ÖÕaÛÛ…ÐÚc.w=pò¨êéj]¶½]LփʣR¬Zâ6NõB=ýA­«Ã¶·‹ÉzPyXõ¹ÝÄÉ£^¨§?¨uuØöv!tÃkÙ©'úI”L=±'z¡žþ ÖÕaÛÛÅd=¨<¬•zB£Ñh4VF3…Ð ëéÔí¦Ù×LvV(õôµ®ÛÞ.„n��� FÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@ÉÝ���@©DþKOÒk-C­����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ag_SDL.png���������������������������������������0000664�0000000�0000000�00000012327�15030617045�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ð���¢���h"ú���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��lIDATx^íÝÁ‹ÛV»Çñù7Ü­·Ù”ÐMW.C™EßÍl²ð¼ÈbàB ³dÑŠa ôÂ…€a¸p¡å…vÀ»ÀeÀÐ Y ¦›’Þ”††!˜çê‘%[–%ÇÉ:>ßZg<YÏñÏGGò����Ø���È� ���ä@€���r @���9 ��€Ð���@h��� 4������È� ���ä@€���r @���9 Ð4FÛA�ìNá� ¸Ž~à†:Õ™×�ì(ˆ~à4� B€ ¢¸� �ˆ ‚èn @�"h  úÐ�€(ˆ~à4� B€ ¢¸� �ˆ ‚èn @�"h  úÐ�€(ˆ~à4� B€ ¢¸� �ˆìq€~+^§lãJktdp>‘›ð^"eêõÖïoÍŒ?ú÷¤™öó¨u<™f=fãDF׳à§kfS{é4¢û·¥v.ÞS[ÇË-ÝÞ­LÇ/¥ßjÄï¿eðàX¼©ÿDÛîŸôû5cÿYBéþÀþ«SyÍÀníq€V72$Cè{ÿßHgø&}SO:‹�óq,ƒûË�}5X.;õ÷gr=:‘Fû™xÏH{xéÿKÂìJF'G‰í™ÉÍÄópûÚÿÝñ3éô=™Ü„Íè§iôbZåØ?Á}¥ã½ o#âF˜I~(ÓÖtêõP§:»ñš€úr0@ûf—2<<ïê6ü_)úoõ¿ ‚óÇÉPÚí¡LV´†ÝSi÷GrþKqd2ì¬}Îí‡[h_Úþ!@gÚÿ03¶]^š{¥Ú†� �ˆ¸ ÓBf<�ÇBs\î�}=’~ãH†“þ Ó½ðÿ#º}GÒýÞ6! åxã©k“û‡�iÿÌ־~Å!h�@ÄÑ� Ã> ÀþóÑç´pÝs¶D€^3_¾Ñ\Ì.ëíGr¸B>õw¥‡Û‘a¿>Ÿ¶ô‡¿ÈxŸQV9ö:S½ú¾¦Â5ëú¾Êø¬/-½Ýx;ªp-“óÓØº{¿µNÄ›Äg˜µæ­åÏãmíhÊÁÑÆ|}ýóp[´ù·O/’òüí ë÷/dZƒä®ÛSuÚ�p:¼½Í ôªO…_q>\]ÖéÃxðH>FÊɇŸ ò[ˆNRl&Od$@›PÇ~0› åð?žËϺ¾~ð«Ln>È•÷Pî5½õÿÿXÚñuò÷2>}šXºãÓþpoÃI°ÛÐ×~Ó­-NPõ?äK+ăózþ‡½Ñb»fÓ 9ëI×ûsç³ß¦êlâqêøš�—…ë?ˆgD ªÇÙK8¶²9@k€iûûG÷Ñj‹–t¨ì�»ùgw¡—\.’cÿ÷]ÐëAÛ=õëѱ¶œŒ®Öƒ§fOzž\­ý ­î>íyfœSÌ&gÒK.Yù ª¡þ©œŽß?Z±öÁs7LÕÙÄãÔï5�n)4 ×ψ³?ÅëvW×# к†øHk'&—qÌo·þ–&Ý1@gÎæÐiû'¸/:MýúAÊÑ…ùkS·9½­_Y£xõuþÔó‰í‰÷9]æÑ;KÉè5¦¶�p7…Fáúâ)1¸¤ÛCén{»Lt°æóËô�£a }*ãÅ%æÂÃÖÞåêö!ö_w Ð͆´ú/ckžÃKuž-ÿn Çþ îK€NS»~zÅ•HƇ¦LWuÉEÿæqâYâµ³¡ÿËQŒ^©ænÐ�€H¡Q¸Þƒ¸Ü»‘Jæ…uõ¾+³vÉŸ/BAòïĮɬk”£½ÂÖØê*)‚ÃâÅûßø5{“Zm»2îk®©ŠîƒZÙ8c«øÑZ˜Í–võ˜¼ü×P÷qâ¨Hb¹HÖ2‘›72ìö××e:›xœÚ½æ�À1…Faq ~ý@gvïm˜±]yÒëžÉåÊѽ*Ç3é?:_½âEpMðGÅO ¼—<VƒùQl&\o·¥sú:üûzÔÄ“Aç(}÷ �‘B£0ƒ8P—~ Ë$2.9·râêÜüêÑeõÅsy;â‘}ìýŒµÕiG]W”‰Õˆ‰¹™Èù@¿1s~ÿFçTÎW.«·[ºM&˜xSÛ�¸›B£0ƒ8@?p�)4 3ˆôW �‘B£0ƒxÒOrLm&¾t¹é¾Çþ3UgÃk�v«Ð(Ì Ð\A€�D  â€cý ¸ÆttyÄO´=;"¢ÏÉcj[��wShfè® @�"…Faq€~à 4� Rhfè® @�"…Faq€~à 4� Rhfè® @�"…FaÄi4V}�ì£0PaÆ ¦êlâqxÍÀn1 @…¿�`?Fr�¨�ìÇH�"@€ýÉ Bh�°#9�Tˆ� �öc$€  À~Œä�P!4�Ø‘�*D€�û1’@…Ð�`?Fr�¨�ìÇH�"@€ýÉ Bh�°#9�Tˆ� �öc$€  À~Œä�P!4�Ø‘�*D€�û1’@…Ð�`?Fr�¨�ìÇH�"@€ýÉ Bh�°#9�Tˆ� �öc$€  À~Œä@E&“ F€€=ÀHTàÇ ‚¦ �`7Fr d/^¼/¾øBþúë¯ð_��€ÍÐ@‰^¿~Ì8ê¡{��°Ð@I¢ð¬ÿ��ûƒ� ” :YŒð �Àþ!@†éZg]ó¬kŸ�Àþ!@Eáù§Ÿ~ ÿ��ì4`È?ÿü#ß}÷<yò$ü��°ЀQxÖ¦ÿ��ö0àûï¿'<�à4P®wÖuÏïÞ½ ÿ��ì34P@žù–A��ÜA€îH¯ñLx�À=h …†cÏóÂ[ëø–A��ÜE€R|ûí·òù矧žøû￞�pHˆf—µ%g¡£/JÙ4; ��öHÐÙç(@kXŽf¡ù–A�� Ð@L|ö9j/^¼?þøC¾úê+Â3�� @qúe(É�­í믿–o¾ù†/J��h 2™LRó¶Ï>ûLF£�� ˆ~wZxŽ·h ´†m��à&4àÛ4ûœÕôdÃß~û-|��à 4àÛfö9ÙôwÞ½{>��pÎË;û¬Ë8ôËT��€›Ðp^žÙg]ÿ̉„��¸� §m;û¬ë9q��(4œ¶Íì3_Û ��âÐp–~5wZ`Ž' �€4h8K×3§g=IËÓ�€,h8Ig–ÓÂó“'O8I��lD€†“’³Ïœ$��¶E€†s’³Ïz’ ³Î��`[h8'š}Ö“õDB��€<ÐpŠÎ>ëI‚¯_¿ÿ�� 4œò©K×Ñh4FÛïfÎ1ÕyP.êToÔÇÔª\ì_»˜ªU‡sìì@êú؃Z•‹ýkSõ¢êpƒ¨S½Q{P«r±íbª^TÎa°³uª7êcjU.ö¯]LÕ‹ªÃ9 vv NõF}ìA­ÊÅþµ‹©zQu8‡ÁÎÔ©Þ¨=¨U¹Ø¿v1U/ªç0ØÙ:Õõ±µ*û×.¦êEÕá;;P§z£>ö VåbÿÚÅT½¨:œÃ`gêToÔÇÔª\ì_»˜ªU‡sìì@êú؃Z•‹ýkSõ¢êpƒ¨S½Q{P«r±íbª^TΩl°›zÒñÿ–þ½ƒƒûÒýþ ‡c4 üþšþfõÂmò[ãDF׳ðgwq-“Ñ+ñ~H§Yô±V™¯“‰ç~#ãA+øýFä?{L¼Nfr3ɰßïžtN_ËÔ\YôñÍx+^§nï÷«ñ~â3Zí'Cé·áãµ¥ï]ú¯¦j˜«Ò”·]³ªgª^ô*8ÇTçÙž„cñ¦ÃÛyéïwd8ùÞ6DÁŽ'Óðfn×#é7ü 0ôäÜ{*í"•¢Ô:zîú¦öPÚÃK?®šTôuâ‡çË3évâ§óm»¹¯ÿ ”78óõÑýz,ïmx;¯’úIẼ÷Ìé <Ooƒ™MÏå¤õ „mMWý˜ç–Jöï^ŽY»aª^ô*8§ò7»?ñ]ǘ¢¿Ÿáãx ÷ch-jægé¹g䱖ʬS±ç®3:Œ Ï­óìR†‡Öf¨ÌÕy•ùúܯ%õ“r÷oõ{è=QÅþÝË1kGLÕ‹^çTýf2› å0óÐÙ­LÇÿ–ŸýÁ­áo×ÁACZ}O&7Ë4ÿýs¹šü*ƒÎ½`û×ë¡ûøÏÓî÷A&Þ¡™I“µT^6oïl:–Wº$¥îÇÖ‰x“Xõ¢ zu)çêæ$öóŒûÄl~Ü•~¸y$‡ÆgžJ¨OÆ€¹]õ“ê2›Êø¬/í®'W¦‹’Áx­°¢üý»‡c–nS»! ?Ø?ïK+ú›þíÓ‹ðZILÕ‹^ç”?ØÅm0:�µ[}Ž&ḔØaìùìn³Õ’VçTΣA1èJÏû3xÜÙ•'ÝvbÐôr3þ/9 ï³Êä X9‡Î˫ӆç ê‡ÒŽoAâ‡NuéJóKiµº28êv-“óSéöÂP4ûS¼îÑz0»¹Ó“W)Á©œ «Kõ_ÊeÆ`Æë£ûõp(“”MÝ]?1WAlj@ÐPrr^ʺô,ÕŽyî)ÿîé˜l— ÛäP=–V;}0ÅT½èUpNµo&ygg“÷×ÛGÒ蜭‡ |º:Húƒë‰ ®æë+Wd­›Û8Û—SI‡ñJ«SÎçžœe Þœ]^ÆC˜Ò7¹¾xÓ[¿4?,BÛª¬5ƒy_'Ÿ¢3­¯d0x•9{T”éú$÷ófõãuñÂÅJ§ù0};JRí˜çžÒ÷Y³É™ô’¼‚e!¦êE¯‚sª}3Ùp’…Ê}õ<vf~Ôz±ûo˜Ý ßô¯tp\ùýDK …NHY Ά+N·½™Ï]— ü»‚EÔš±™ÎM'ㄵ¾z3?4¹òñ¯odÃë$7 iCœ½YI2LŸ‹9N Üe?1Z—H9G6Ñç‡ò”¾÷rÌÒ~ðTN’Üà{S}N&ЫàSg+YŸ¦ƒÃe÷¥ÕÊ(~89y;óÓøòMøö'—˜=°œ0PVÒŸû­\ùo2•e*yètÃÉ8Qínï0ƒblÖåZ.ÏNåYÉk•Ùúdì×÷su‰#@÷ï~ŽYº]Çkzͽ7e3U/zœSå›IÖìlpˆmí$¢õ7Öà÷›)ƒÔÍ… :Ïd|3K? ¶‘z‹¯-Âô!î¥rê”ñ܃C¤:“8¬ž jÁzÃvÊ›‘^ªìØÿ÷÷óûôÎr­á32‹¯—¬<K¬ï-ÑúûõáÚlÖnû‰¡º$ݼ‘a§›>[^’*Ç<•»÷uÌzë8~œX–RôR–Û1U/zœSÝ›IöLS âkÔ¦c?üèÙÏñ‹ÒÏ¿Õ:”îà×p-«²{)ývo¹žMgézþ'ù•õmáÕú…מ]JÎP±áÐyAåÔ)ã¹oF±5†ºlÀ›ŸÕ¾òåúæÔjI»»<Qm6½³þ‘t†Ñ’ êKwq;œÐv"FW‰×CÑÉŒõΡԣõI¾é‡vÛO Ö%Øÿñ“»Â¿ÕiÅ^+Õ¨nÌóŸep놴üp´¶Oó©ëc%•»÷qÌòévÝK~èÕçz”>[n©zU׫€š(w°Ó@¹üVµÕ_—v-—ÃîòrAz)ŸÿY^†¨ùÃ@~ˆ¾Yíüÿ‚Ë^Í/ó£—z¹øB†…ðÒX‹Kéa½Wãå™þº®,úÙZK[ß¶‰z›³ÕZ38[§gÄVÏÝ7—gËË@é7ø †ËË5û2ø!ú6¯Ë¥†³hM®¿¯Ï¢/.YÜbÝ®~áÌ/±ºmû:ÙBÔ¢¿“h…¿i2›>þÝéLSìÖ’mñ:ª¸Ÿ˜¬‹oøÃÇH}­”Oÿv5âuÍ¿¿VÕõ±Öß¿{=f%úþâÈQüñó¾'å£ĪzP¦:ÊEêúØ£ÊZ1º3U/ªç0ØÙ:Õõ±µ*û×.¦êEÕá;;P§z£>ö VåbÿÚÅT½¨:œÃ`gêToÔÇÔª\ì_»˜ªU‡sìâôIGÁ>ùtk•~vtœþM'm:)0ÙÒ.ÝVýû. .Û•Üÿ­YòulóÒmByœß¿–ŒYÝèUpŽ©ÎƒrQ§z£>ö VåbÿÚÅT½¨:œÃ`gêToÔÇÔª\ì_»˜ªU‡sìì@êú؃Z•‹ýkSõ¢êpƒ¨S½Q{P«r±íbª^TÎa°³uª7êcjU.ö¯]LÕ‹ªÃ9 vv NõF}ìA­ÊÅþµ‹©zQu8‡ÁÎÔ©Þ¨=¨U¹Ø¿v1U/ªçhç¡Ñh4æf3� ���ä@€���r @���9 ��€Ð���@h��� 4������È� ���ä@€���r @���9 ��€Ð���@h��� 4������È� ���ä@€���r @���9 ��€­‰ü?7N¬,Y ­����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ah_SDU.png���������������������������������������0000664�0000000�0000000�00000012402�15030617045�0023421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ä���¤���ßc; ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��—IDATx^íݽk$Ù¹à üO(V:ÌàÄ‘+™À›L2A Ã`.¸AÁÀ×LÐ ìh¡a¼`¼°4,6®Äå€nÄ2³”,f^–Aœ[§Ô-uWWIõ©z(v[ÒôG½uNýêÔ©ê��¨@��5È� F9��ÔH �€ ä��P#��j$�@r��¨‘@��5È� F9��ÔH �€UÈ<x`±X,–�š«ò@]¦ tG“jm»h6*¤ t‡@À¦r¨6Ð9�›È¡BÚ@wä�lJ ‡ iÝ!°)*¤ t‡@À¦r¨6Ð9�›È¡BÚ@wä�lJ ‡ iÝ!°)*¤ t‡@À¦r¨6Ð9�›ȯ}F½Ýô=Î-;½0xs.&ÂÇp>:\ü»ÙewÆ/Âx°—ÿûtÙ ½Ñ7“ç\|íþIø0ùmÖåù8Œ½°3ýû½~xý·Qxù(¾îä¶òC8ú{;“×ßý× ƒ§ÏÃè|ò„ç£Ð›¾Þ̲Ó;oΦï4»nöÂ`œ¬¹Ì¿ÝŒ“¿ì¦øùé†&ÕÚvÐlùœ¢“�Cäµï’Ÿ= ½áßgBy"†ÌÞ(œO^û8ƒ4gž+þ}Ôãƒ\ŸÏò©oÃIÿgaÿ³/ÂgûOÃðìûÉÏo\ž¿ Gû‡ax:×?„³ÑQØ»~þm\†‹ñ«ÐëÂÙÅåäGçáÝq ü‡7<ºþl“ÇÑÅ»0ȼŸãAx´º—}ænŒºC `Sùœ¼@ž¸< ÃÇÏÃèý“$ÊäNBçIÄ¿ gçaxšÄåYñà ú'ßNáûäµz‹ï%~æýgëyâòlŒÂûɛȗëL0JêÆ¯ûa/ù¼ñ3_-™¼{®IµîÌvÐRùœ%</´ÎòÜ ºm ¿LòøQØÙ†³lc8<ùÿ©ø:Âɇù˜~7q„ü8ì÷a4>Ï�d, äÙð./×`‡Þëp:=ëÒA9�›Èç, ä9!3ìäóÄÏ”.릋Ìò<qºÊã™Ñïøøp~ÚÊÚ縭8‡ü/aØßŸ|žýÐþ%ŒÏgÎDËyf½ äËu"Åíd7žéYœrÕ%Mªu'¶;€ÈçlÈWŽg¬ ÓqD|wvô;Ž˜¿g§­,<ÇâÅ …\0§ŒÉkeFãò;k\ˆÛÔ̶óÃù»ðzr`¶33 )\œ…7I¯/$~°öf¯;ˆÒ ~³-Þ,;9Ó¯–‹S ö“·Ó{>»>HŒÞeãõ'ÃÌÉïÂù¦/V¢ø~爊z�ÊQi/Ýü²@ž&gù&Vò8%æIº~–é–hUðßä `+q]<™Ÿ¯¾ô5âÁÍYòåbM›'n‡á?†¯ÃÑþÁÕ]….ÿFŸ\µ…ôÿ“matšl3.ޅ㣯nBûD¬ÿÃw ZïjúÖîì|.߇“£ÇóÁ>ýÙaèO® .ÓŠ'á`ô�ÊRD­‹Ú^š¹Ý0Ui/ÝüÂ’@ž’ƒÅé#EòtöÏr.ÖÌN[‰ãûûnòxÆmyüw¹óÒ7ä—ïGá`f¾{z‘çB » }Å^Ú>Íl“3-{Ÿ†“…èŽÿ3æÜù±+ñÀëÙV#â‹â¶òbaÊËüÞáýèe8Îk y×_Ô@ `S•öÒ­ äé-�Ÿ…ƒMo{¸ÌŠ@žž¢ßÉ ÅWÓVöï®_;½íaïE]ßûûJŠÞ2ïÆéŸÏÌŸÜ—¼÷*Œ³S2üòüm8>x>Æô�foæV‘Éó½û}èíÏ?_5² ,L—š‘,N§ƒä-Ù;§,;Ë´äÀóèeæýdΰÄ÷uø:?t ä Šz�ÊQi/ÝìÂâ|ìtÙð‹–ÍÝŽ£z»™¿ 1ó¿_ñeA3áÿê´üÍÜÚ†Þ`´xæ&Òýiýmö‹²=(®_ïf™ÿb ssŽsž¯£â:kšô€pÙÁå’³"KåÝ.s[ñ5?ÉêLÐ_q@œ†¦zEÔº¨í¥‰Û�7*í¥íèºæµœ‹‡g­‰ÎSÄèt¶ufzL ä³×WL]ü= úóßP€MUÚKÛ)ÐuÍk9× Ì‰sµû‹S¶Ò3 GáÅÉû¹ ÷Ñé« :fÏ8Å ?7%+^O±zÇo'wT‰Ó¬FaÐ{Ž2ï©.9�›ª´—¶S ëÓÒk§ ¥ËÂÈóäš‚Ù[ Îݧ~Å]‚r¯Xf~šÖõ4°ÙéR³ÓT2·b\:}ª&ñ=ÝUÏõ<�”£Ò^ÚN®ÓºC `S•öÒv UXrqjÎRÈ—±•¸Þé†"j]Ôöb»h¶J{i;ºNè€MUÚKÛ)ÐuÚ@wä�lªÒ^ÚN®ëZHïqž|æø¹×-÷m UüLwUÄsDE=�娴—¶S ë´îÈØT¥½´]§ t‡@À¦*í¥íè:m ;r�6Ui/m§@×iÝ!°©Êzé¸C°X,K= �Í¥—† FÝQD­‹Ú^lw�ͦ—h(A ôö� %tƒÞ ¡r€nÐÛ4”@Ð z{€†ÈºAoÐP9@7èíJ è½=@C ä�Ý ·h( ôö� %tƒÞ ¡r€nÐÛ4”@Ð z{€†ÈºAoÐP9@7èíJ è½=@C ä�Ý ·h( ôö� %tƒÞ ¡r€nÐÛ4”@Ð z{€†ÈºAoÐP9@7èí¡þý³3KÇ ôöÐ01Œ?}ú4 c �÷ŸÞæ—¿üeºÄ`�Ü94Èï~÷»ðÓŸþT€È¡!¦aüŸÿüçä'�@äÐ�ýë_…q�è(jööíÛôâ½ø_� {r¨‘0�äP“8=%NS‰ÓU�€îÈ¡Ó0/ä�ºM ‡ŠÅ[ ã�À”@Ša|úÅ?��‘@™ ã¾ø�˜È¡"qŠÊ/~ñ a�˜#CF£Qø×¿þ5y´È·p�ËäpGÓ‹4'?™ú0�,#ÃýéOJ¿Ü'.ggg“Ÿ^™~ñÏ×_=ù �À<î ŽŽÿä'?¹ä¿ùÍo&¿ñ-œ�Àfr¸ƒ8eƧK%ÿóŸÿ,Œ�Èá–¦sdzüW¿úUøñ~ýë_Oþ�`9n)ot|ºüüç?w'�°naÙèx\~ô£]ÿü 8mŽÇ€er¸…U£ãyK ïñ^äFÍ€,¶´jt|ÕòÛßþvå—�Ý$Ö¦·3Üt‰_—ï>ä�À29l)ì¼à·üá0�XI ‡-l::/æÌ~k'�@¶°ntüÑ£GéŸ��›ÈaCëFÇã׿»h�Ø–@Z6:ï¸â¢M�à¶rØÀ²Ññxoqm�w!ò£ãñ±‹6€"ä°FvtÜE›�@‘rXc::î¢M�  9¬GÇãE›ñ¿��eÈa…x÷”Ùé*‹Åb±XºµTA ‡5ªjŒÜ:5›ú´‡Z•Ǻm—*ëeË€5t í Nͦ>í¡Vå±nÛ¥ÊzÙ2` h;¨S³©O{¨Uy¬Ûv©²^¶ XCÚêÔlêÓjUë¶]ª¬—-Öжƒ:5›ú´‡Z•Ǻm—*ëeË€5t í Nͦ>í¡Vå±nÛ¥ÊzÙ2` h;¨S³©O{¨Uy¬Ûv©²^¶ XCÚêÔlêÓjUë¶]ª¬—-Öжƒ:5›ú´‡Z•Ǻm—*ëeË€5t í Nͦ>í¡Vå±nÛ¥ÊzÙ2`öv —áÃÉQØÙ9 '.'?»¿ZQ§'¡¿ó(ôO¾ü ;š[Ÿnµ“MåiݺípŸUY/­ÖhïÎéûp6|ìÃYnΈ¿?,¨£ýÎN¾ £/¡·[O°iC.φaÿÁ“0<û~ò“yñ÷û'ÉÚ,ÀÅY8öÃ^²^âºÙéý>¼;ÿaòËê5·>ëÚI‘u¹LÊr†ýýt}<x°öú£pvѬööyÍ×¶u»®Ï —§aøøÅ½=˜­²^Z¬qwN߆“þ^è¾™<¾¥te?ô‡£ðfô2ì÷Fá|ò«*µ¿N“‘Ú"ÖßÅßÃðàYŒÆá<ÝO&L££°_TØ¿…öÖ§¨º$a||œ´AÏ“GñGïÃÉÑã°?<½zÜ÷·Ï«ß½[·iÿFç'?¸_ª¬—VkÜÛSÙØº|äckWÁåá`êèšÛ_§8Rû´€p¶äÌÇÇq<„qMûÍöÖ§¨ºä‰mæEx,wÆ}[·éúгKmWe½´:X£Üù1œÓ׸9e>9…v}ªpú³‡¡7xú{;“ß'ßNFA'bðÚ½š¦ðàAÞÜ¿82þhòûìr—‘Ž%A°"ñýã›0êí&Ï·sÂÒƒ—É:ŸÔéêTnœ ò2|v=!ojÈEön~¿0J=ü~~Ù½ûŒ©8’õ¸¾gü<wr> ½tÜœ>ŸÖà¦VE¶“²ëòC8úûÏÃè}}S‰òÄÏH9ÊY·U÷Y‰td|Ú2ËVg“¶h³5ˆï¥*Z¬QEƒü8„‡ÙN/vxgG4cÞO:­ÿ¾žszyþ&í-åŽtoéxìœ ›¯œZýze+¶Nq‡ô$Ò²g�®ïöŽÃ›³ÉZ\9!|=[>ÒZæ\Ìø¾^¼ÃÓ⪽­BêCôÃì5 ±]< ƒñÅÌãâÚIáu™=Øû4œÔ8¯™*CH×”·nkè³ „Ù¶ÍV§Ê¶ ÕÁå7ÈØ©õFÜs ‡¯3#œ±îÍ„‘¹áe*vÌŸ*¯w_¦D¤£KÏ2g ²;Ÿø8 ¹™F<¸z”;m'o‡9£¬ì‹Ó0¼ £é¸&EÔ'áËŽ¾es¡í$QR].Ï߆ãÞ^8ý£¸6X*CH×”¶nëè³Ò }x÷мm›­P•mA«ƒ5ÊoyZÎÈD ŽŽ²#Úqtïyî4“Üðr-ÛQßÝê×+_¡uÊ aÙ‘Ô¤nG/3A.Öíyþt†ÜæâÏX$Ï™„¾Wƒ/Âiîâq÷ú,9ˆŒSYfç°ÚNʩ˵²Âî¨ÊÒ5¥­Ûú¬ô÷Eœ=Ú²ÍV©Ê¶ ÕÁ¥7ÈÜN-†ôÙÓðqã8|’ #KG¥³§*³²õ]•0â¾¥"ë”Ââov Q\÷Ÿdw€+Fu²ÿ~κSÃÛº §_„Á«úç`Nݽ>y‘‹Ûy±í¤èºdäSÖº­¾ÏJd†oi»6[­*Û‚Vk”Þ ó:µ…ƒAqD;þÛÜѽ5#à±³[uš~kŸo«¸:凰…^²îFNWÄ.i]wjxñ‡¯Â`tš<ksܽ>y‘Ùí®àvRh]²>„Óäµ›v‡•¨ÊÒ5å¬Û:ú¬¸ɹöikÛ¶ÙjUÙ´:X£ì™vj£ð>íIãþrõÅ!s!}qÄ<é.WŒîåMƒ™;»½ã0žNeˆ_"¿ÔgÕhÈJE¸o¯¸:ÅöÉÍÜÞËó0þê³ÐßÛÙá-Y÷KG”ÖAˆë/Ö÷»ÉãøEK_„Aï“ü‘«erç‹ÇйxBÕî\Ÿô òÙõI.ÏÇá«ô‹f¿´¤àvRH]âúöúÃp2­KÒÞÞ za·÷ºÓ‰²ª !IwòiRðwôæŽgsšú\óÊY·uôYW{ƒw“ÿø¥Wÿ¾L¶ëågœòlÛf«U][H^kò_`‰Òdü—ÞÃôu®¾¹ï³´SKo·GbxN—½IÇ;ÃÉí§·`›û»ì’ý¦µ8:wpsK·^|ù_a¼ÕâNàæÖXsK #ñu‹§{¼½ë[zÅ/=ú< a±Fq]ÿoÒâ-Æ®~¿;ÝiÌ®ÿôóÇ0wówóËÌíÉRÙ׌·�ûcøjú2‰Áoz»ÌìRÿW_Ç÷q7™mv¯†ñ 2]g‡aô_”ÐNЍK"¤Ñô½Æ%Ù¦^¿kÌt¢¬ø«1ÛFîúå2M}®yå¬Û:ú¬Äܾ+Þ>q¾üjúedØtßV£ø>ªRÝ+AKUÙ ¹=uj6õiêje„œf«²^¶ XCÚêÔlêÓjUë¶]ª¬—-Öжƒ:5›ú´‡Z•Ǻm—*ëeË€5t í Nͦ>í¡Vå±nÛ¥ÊzÙ2`®t ñWûÉgŸwÝr}QPƒÄ÷u¯¤_ʱ³°îs—Ýúï×»N|Ÿ÷Â=«KžøÞ)Çý^·«.,Ï.Ó‹8›-¾×ªhu°F• ’ÛS§fSŸöP«òX·íRe½l°†´Ô©ÙÔ§=Ôª<Öm»TY/[¬¡muj6õiµ*uÛ.UÖË–kè@ÛAšM}ÚC­ÊcݶK•õ²eÀ:ÐvP§fSŸöP«òX·íRe½l°†´Ô©ÙÔ§=Ôª<Öm»TY/[¬¡muj6õiµ*uÛ.UÖË–+ÄÆh±X,‹¥›KUr��¨‘@��5È� F9��ÔH �€ ä��P#��j$�@r��¨‘@��5È� F9��ÔH �€ ä��P#��j$�@r��¨‘@��5È� F9��ÔH �€ ä��P›þ6¤^ä(Ü.����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ai_SDF.png���������������������������������������0000664�0000000�0000000�00000014060�15030617045�0023405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��é���§���¬ Â>���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÅIDATx^íÝÏ‹ÛÖÞÇñü^ϲ³)C7wå•)Ì"ÝÌâÎB S˜B(@ ^ ÷–À5 „^x `˜Jà ‚ÐR¸ ˜g¸ ˜§ðt1xWšÁÏ"”0 4„`¾¾²dK²$ÿБæ(z¿@´cMdŽÎÑçÉ·���€Ué���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€eé���€e* é·nÝbaaaa¹�P?•†t É¨ÍaSYsÜ@=ÒŠPšƒ�(ŠT„:Єt�@Q„t "Ôæ ¤�Š"¤¡4!�P!¨u 9é�€¢é@E¨ÍAH�EH*BhB:� (B:Pê@sÒ�EÒŠPšƒ�(ŠT„:Єt�@Q„tßïâ:{þgŒ--G/&rü–È{™º'«¿]ö2~-ãA;}½¿ì‰ãþlsõ½[½‘\k“fÓ±¸GZáï·{röWèû¿´•w2'½v+xÿŽôξ—Áñ]q§Á§®8áûE––s*/&ÑOš±#ËÞ`ìíÅfÒ¿Í`SYsÜ@=Ò4X{¡|¼Œä"o¼×ŽÅþ ê ­Ž+ÓàÇ…÷cøa9±-ý}?¼ëôïFBz赌z‘Îã'ò¸s,ÃÉÛàõ¥Ùô…ô;'2¼ˆã+™¸}i/¶¿™\‰Óser= ^šÊù©vN–!]-þ¶àgu}.ƒ•Ï“õ÷é&r@HGÒ�EÒÒBºgv!Ãûâ^¾ ^ð”Ò¯FÒkyáüL†ÇÒ^x:J; ŽôF¯ƒŸMxë½—³úYôoîÜYÒ=³ÉP»®\.>,!=KcÂ’×ÑŸõ¤íý½ú7Ï—D§ïgSY7渀 !}!#¤§ÙhHO ¯Û†ô™—ÑûÒê e¢aWûaðÿ!}Ÿý¾Œ®âѽI?•Ž3w<Mt 2Búj ÿ}MæQÍKÚ™<”–s&áÕ™"¤�Š"¤/d…ô” ©¡Ûû{ôoò—uSMb!=Nu9ŒŒ’ëÏ'ñ)/k·±+“þ“ {àïéHoø“Œ§‘+*+¤¯ì7 éñyûMž‡¥û⃧ÇÉž^Z®Õ$6•u#Ž;�ø�Ò¶ é¹#é ë¶ŽœïEGÉudýF§¼¬lcõ&M#aX§*¸ï½£ö[…tFÒÓXWô˜Š;ï¦çrtÖZÑ)L×yá•ñâfå[-iGïcP~8_‹Ë¥•2u+›NŸêxÿ®å<”Ç‹Ž£þüO9Ovõ~ŒÑ0qÓó¹L7}³éç)ÊÄ6”©í��ªUYëmÿ‰"+¤§LO‰†ôMä†tNsä%œþ¢ò:›t¶¢ûâ(>ÿ=ó=´³yLÚþ‚OËÔ>züȽá™ô;ÝùÓŒf¿‰Ûýl^üÿ÷Ž÷Â;*"®Ïå´ÿ,r/œvÊösžN´Þ|ê×^ôÉA³KõãaßíDzÃÑ¢³0ó;GÒuÛ¸SPemêx±ó¸�¬SYëmÿ‰"#¤û!¥»:õÄTH÷çtÿ%å†Ðä”ýY?ß›àçˆ]Cºþ»ÔyôÙ¥+ÝØüyBz;ë@pE¦ý•ŒVFª50ÿ]NRCo²s¦´ìïl5r¾J; V¦Ëįȼ“K÷¡œ¦Õ…´û9n�!�PTe­w-Cºÿ8Â;ÒÝôŒYrBºy¿•”çS^:ƒóÅ{û`tˆ{6¹÷ºåýCúžN]ø.2=xnºóHÆÉé ‰>›¾”ÓîÝÁØtVÖ•©V~2œJ’¶$ŸØ’u5j^g´ÿ0ñyÇ”~®“³ô NH_aj;�€jUÖzÛ}¢Èøž ¿Ì(k.¸Žþí%~7lâës¾à(Ò!˜_Ò_ÎÕ½uk_œ»z£ç&üàý•¸ÿ‰~™Q2´{´“±x¿å²Ù—µ †¶‡îÛøÄ¬gÆÕ“LiîÜ–¾çgÉÿ9dÿ‘ …¦Û˜a¢¬M/6w�€õ*k½9Q éì«)7(GåX§11ŠíðîJÈNL­Ñ½_#tý« »½øwÜB:� ¨ÊZoNh:ûê@ʽ1:÷»·:ÝËÚK_Œ.cá¾ø(öü¦Ñýä•) ÿ±é\zFGœÓ—Á“\tŠ–+çHú‰ÏtSé�€¢*k½9Q é¬©þ½Ñ)I‘ee„:¸G!ú˜ÃØsôsžN”z¯E–øT©Å²èT«è—Äc!W§^Ý,ýLE™Ø†2µ�@µ*k½9Q é¨ÍAH�UYë͉¢ 7À¦,| hõt¿£L”µ©ã…ã�ꩲ֛šŽ:Єt�@Q•µÞœ(ÐtÔæ ¤�Šª¬õæD¦kZðŸÁîýÍúw¯[>´éWú7ebÊÔv��Õª¬õæD¦£4!�PTe­7' 4u 9é�€¢*k½9Q é¨ÍAH�UYë͉MGhB:� ¨JZo=I°°°°°ÜÌ�¨Zo "„¥æ0QÖ¦ŽŽ;�¨'Zo�°á�š³��Xˆ�ÍÆY��,DH€fã,��"¤@³q�� Ò Ù8 �€…é�Ðlœ�ÀB„t�h6Î�`!B:�4g�°!�š³��Xˆ�ÍÆY��,DH€fã,��"¤@³q�� Ò Ù8 �€…é�Ðlœ�ÀB„t�h6Î�`!B:�4g�°!�š³��Xˆ�ÍÆY��,DH€fã,��"¤@³q�� Ò Ù8 �€…é�Ðlœ�ËüùçŸ2™LX¾Ò Ù8 �Ñ€~||ì4�@sq�,rÿþ}ùüóÏý°��š‹Xâ›o¾‘O>ùDþøãà��ÐT„tÀa@õêUð ��h2B:pÃ^¾|éÏ?& �€!¸Aa@×ÿ��„éÀ ³G@��I„tàèÔƒîºnð ��À!¨XÐõfQ��€4„t BúüóÛ·oÐ�@.B:P èúEE|Y��X‡T„€��6EH*~Y��l‚¤OhÉû*¾M��l‹ #ãÀOOOƒWâž?N@��[#¤üðÃþé¢_NÅ·‰�€]Òé(úÁÁÁ"¤ß¿?XC@��ÅÒé\ô0 ‡‹Ž¦ÿøãòñÇûS]���vAHvÎEO†ô/¾øB>úè#ùòË/ƒß��Ø!ØAÚ(z¸|úé§+óÓ��¶AH¶”5Šž\ô‹‹tN:ÏF��Û"¤[ÊEO[4Ðë³Òóž¥��EH¶°é(zrùúë¯Q��#¤[Øeý—_~ þ5��ÀféÀ¶EÿöÛo=��;!¤ ¿ hÝ¢7Œòt��P!ØÐíÛ·SCy¸è(»N‡��(Šl`Ý(úýû÷yz ��0†l k]_çÆP��`!X#kC�@YéÀÉQt½1ôÕ«WÁZ���óé@Žè(ºÞúüùó` ��@yé@Žp]¿1”C�@Ué@E×Î3Ï�@Õé@}jK8Õ…………………¥yËM"¤9nº‚b3”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿú ¬Êþ­Ê‹#ÈQ¼’¾“éø;éµ[þ¶æËž8îïÁz;Í&C9ìä*ø¹ë‰Œ\WžÙ3µÍó)åæ—Û°'íàïo9ÿ”óé»`åvÌ—ÊBY•‡}[/6”G £X%ÉõøTÚ­® /ʈ¦e™ÉÕ¨ï…2W¦Á+» ¶ÓîÉÐýYÜÁqi!×lcÚôró\ÿ*Ãî¸c™Îô…+™¸}éìØ0Z>³©ŒÏ–‡ùr"îô}ð 6z+“á‰ôF¯ƒŸ‹ðŽÏÉH†½Nð··¤ÝseríTafë¢Ø·õbCyqÄ�9ŠUÒk:Ò^x§Õ:Ñ@qløs¿–QïHãëàg³Ì6¦M/·Œ@ù~,ƒƒŒwÈÂæÊçW6‡^GäL. …Òjèñß6ÐIw ;Î@Üñt^γKõ¯Éò˜Ü·³é¹œ-:jÁb¢ƒ^¦Ù… Èèªu׆º@mrìVI5äµãg¸t†2‰¶O‰)·Ú=9 O¾¾ßÅuöæëö¼€ô.2ŠØêÊ?Ï׵ޥwOlU{,n¸ÍöW2ŠLQ˜MÇòìé@œ–·Î_ßwŽ#±úúÊRpªGɳ~Æâ6-·´‘Ìïd 2uÅ þíÞ`,ï"'ÔV÷‰œÿëdþom/·¨«‘ôÇï†ô³¡…½#NÞ/Ô„ÿã’>·–ÿ9$¤[ÏØ¾½>—Aû@œá¯^«U#Ú†´l¿êµdC] 69 UR ûýÌ`:›¾¾Ó—áh4´Á<èÎ]q/ãsý¹Æ÷ËÓþ‘8ƒËäú­\ºwdß €oÇÙ Cßî·Ž:~¶aóƒÂ¡ô†£Å¥qÝn'9úRF ÖКì d´1Í-7¯ŒF§7”Q’ƒé®+—±2‘¾7<“~§+ƒ^9Ï~·û™Eá}Ê-¤£µì<ý§pùøá<­ÒJŒ _Éd4ŒÜKБÞÙy0e'Ûú›<üë¼SÜrîÉ=;Þ6†O‚N™×™ê¿ˆlOëìÏþýóNRrꉎ øÛ[]L„•ì6cWúÙPSûÖo;JlOËâ·[5úÜ6Ôj#£P%Í ¦Öúÿ%ã•Köi£bï½MéÈkGú£ËÈëJƒ ³-Ìĺ©71Í¢'•/•5~b´1Í)·Ùå3韞§Œ^i;IŒ”WA£âsõ(7ßõ…¸ƒG‘‘ûí™ 'ûYóâýi'ñÎŒÀ¤ëþ–Ro²:Pÿçu’:A®R„÷'ø#˜Ëq?tè=‹ŽvzÙ¥–WÑNKêñµ;‚ɇªè¾õù–ùÊ’¼º´®³žSt]Û;æÿˆÜ(¿/Ý|%õ×í‹Ó»\ÝÓ{‹¿“8é@ųïeàìÛôÞϽX¶“þ „¾ž²l9EǯsÞ¿k9åqdºO‘Û³èvoµÈQ¤’æÓÙäLNR/O§…t €‡7Åçzû Ø¢ÑÓè·Ž¸ý™¢.«Ó!ŒŠ BgQ&ÓìrÓ¿ãAÆ”…”®'¦½¬ù:”›·ÍéKy4xRxþ·™òÑ`q'cîõ;¹tÊéøMðsDjç%§å_¹¸³åŽu ëVÍü®šŽ¥åsê´S:!»3Y—gfßê´¼£ì›·é¬úWßîÉðé¯ý9•^G|véJw ã·Ú ø¶WÁ½ ïç7Ö/2ô˜?–vìêbZ=I«»˜wœ÷‚Ï;Éì}!êµȱ{%Í ¦6îf¬KiÈò‚AlݼñÒ)0þo.FgçScü§¬,FüTJ°Ì B»J{³Ì5¦yå¦Áînv9$¦šÄƒw‚õå6“ë‹'2xô2>UdGæÂ‰³èØÄèþ<9K¿ŠÒó:PºNCŠ_‰ã!z•Å= G£¨ä4Sá$Cj'dwæê’ÌìÛh'>iËΪ?õ+9…k.Þ~Å;¹m›JiÍ´>­–ä Šíʆº@mrì^Ió¤¬@¥ÁèLº'‰¹Íy'áØºxðR ïµÁL™³šºÝ5£4»Hm°Í2טæ•[ÖÉñJ.†wå$6JµfôÔêrÓÇ->’AôruAFÊ'Ö±Iа‘t&¯0ä…Œø:=–W<£êþÔ˜ƒøè¡J-›¼Pe@ê{îΆ`ò¡2²oµŸõ”¥­:«ÁˆtêÕ·ÄÀA¬îÅÏ_þMíч„K²~;xu²ÿ0±¼¯ÝÙP¨@Ž+éºIÌ=GNÏÃǨMeìÄé¬^~]nOˆ¯‹†H#›ü,á{µnIke»º %áHŒÎm|"g~³ãNòææb¬1Í-·à¤™û¨'(wЕÎÊHT~h¶¶ÜRçŸ'F“w`¤|òÂhÖ1æ?ï½—èèè>Îê@%ÖÅÊ@÷Ãü—ï5ø¯Ü(œ±ÝØý¦iñÄèT‚ɇÊľÍë`n×Yͫ׉uZ÷W—–m›?5¦¥7V/§ÖdÖSç­OŸ%·£Ÿ)ã*[6Ôj#cÛJê7 Þ¿Ñ_Mã÷ïÈ6ûÁS[–GŒÇú7 ½ñÑ£åkÚ0kãåßL¦7½^®wþ%“‹³åãûü÷.ß[í¸•™æÇ÷{y{,äŸ%¹”ó­ºí"6/7/ü¾8]wbЛƒµÙ··ø'(=ùÙZn‰Ï[’ûa;º¢VCF”ŽxwÄ9 §çè\~×ÛWG)7[çu ëbÁb9ªžü,óΚ>á%e?é6Ú§Ë›Äõ±«ú8ÍEèÙļƒ¹÷¶óB¿Å×ð3ãM”Òß·yLÏVÕ¼«†ñu±ã];®þãDõÔM¹"}»yƒM[ñþÆîÊvt"c*b6Ôj#ƒV=PNvÛ½|r:­ÄètZÃçÅ·¢7–©u(^Ô ç—Ï;“,ü§iøßQ®×uÿ+^@Y<›^;kO–ϱ×G;.ゎv'~÷éÏñçêo"r%eþS/i€nÛ$ÿQ³:oßÀShlÝÖ¦Šï[­y÷7lÑYÕúu…'¶.1=s1ªžü,á{í¯ÖÍ`íAød,¤úoÿÑ¥‹)5ÑNJdN(6ÒoŽéº° Îl@*)Ö£œìFùÔ‡Ù²Òp>ê¯èU4[·µ¹÷­?zv ãËÊÔ·5ÕEÇse™ç€NåZ^UÔ› õ{æWuýïX¬÷ÖMþG†‹«Áú^y²xo½2™~¢£ù‰ß}úl¼E'SG˃/öó–EGX¯¯™þÆUÝæM£årØPI±åd7ʧ>L—#éKÔƒz±¡¼8b€4ªõ@9Ùò©ʪ<ìÛz±¡¼8b€4ª*ï†Âä’¸ÄY}o$ä\"_Yb7¡š§ïz ¬Êþ­Ê‹#ÈA£Z”“Ý(Ÿ¸ì§ ­.ñ›P˧ï‰r°oëņòâˆrШÖåd7ʧ>(«ò°oãlî¬*}ß›Æä°¡’b=ÊÉn”O}PVåaßÖ‹ åÅä Q­ÊÉn”O}PVåaßÖ‹ åÅä Q­ÊÉn”O}PVåaßÖ‹ åÅä Q­ÊÉn”O}PVåaßÖ‹ åÅä Q­ÊÉn”O}PVåaßÖ‹ åÅä Q­ÊÉn”O}PVåaßÖ‹ åÅdÐ ÊÂÂÂÂÂÂÒÌå¦Ò���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���ËÒ���«ˆü?ß)lÜ'_Zè����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9aj_SDM.png���������������������������������������0000664�0000000�0000000�00000010362�15030617045�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ž���—���¼æ[r���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��‡IDATx^íÝÏkgƒÀqÿ:ûÐKná½ô¤“.9´—\rPÁ|È!´P-…ÝRXA ta! H^XúÂ"xáeaðe)¼–%z(Mð%” -!˜gçäÑxäX–53ö|>0`ý°%4ÉWÏÌ<Þ ��Pá �@%„'��•ž��TBx�P á �@%„'��•ž��TBx�P á �@%„'��•ž��TBx�P‰ÚÂskkËb±X,5,�u©5<¡ÍlíѤ×Úû¨“ð„šØÚCxL O¨‰m =„'À”ð„šØÚCxL O¨‰m =„'À”ð„šØÚCxL O¨‰m =„'À”ð„šØÚCxL O¨‰m =„'À”ð„šØÚCxL O¨‰m =„'À”ð,õk÷·Ó縰túaøô e÷ á]8ïž¾_~نɻ£0vËoO—íÐÿšýÌÓÝì‡7Ù­ELJ“0öCgvÿî <úç8|s3>nv§•¼ ‡“¿†A·“=~/ ýgÞ¹ƇÙ<‡þìñrK§ÿ <=˜=ÓÜïÑÙ ûo޳ë£×apsz[º~²«[&þþ´C“^kï; NÂs©‹IhNN23„ß“ëî„þè§\|&bˆõÇá0»8÷n†i�~V¼ÿ<¸b¼ÞÏ…çLŒ³CïáßÂÃÞ0:ø3»þÄñáÓ°×Û £ù,}Æ{¡{¡ ;G“oC0GY(†gbØîž„g4ÿݲËÑѳ0\x>1>»¡Ûý0ìŒI~úÔñÁ(ô:†î‡÷fË€öž�SÂs©²ðL¿£[÷ÃøÕÛìŠÄ&ÂóÍ~tn'Áù{8Ý ½Ñ‹y¸MÅî‡Áþëìòeø3y¬þéçç^!ËÂ3£òÖÎ8¼JŸl Ï{ááè³Ðé>“4fãcÜÁ„‡ýÜ(j µ&�’/“GƒÐM~ßø;O—™k®I¯ukÞw@# Ï¥–„gYœåó4ÈV Ïã¤;÷B§7 ±Õb„Þʾž‰s£¸ {]qÄóAèõ‡a<9,„nÁ’ð\ŒÔž1ÒJ®ûpÉéíñëÉô6áyÍÅH·B§ÿ(¼˜¢·ð˜žK- ÏØ\Ãps8I’1C2ù}âï”.ïÛͽžeânö[¹ÑÌxywqwû{ÆEÅc<ÿFƒ^öûôÂ`ô09ÌðFËÂsa½eá™|ï4¤†gOgA=»íÒ+£ß'Ûqäþô¡"mҤ׺ï; ±„çR+†ç™#žï‹Æ8¹ÍŒ# _„[ùÝí§~F ¹Å“’¶óÏñ¢ânÒñ0y¬ÂèêJá™Ü)ÿÙý0t»7²Ã„gã¶øžÊ½wÞ> ² ùባƒð4yç'´muB7\p”çÉ{ñdé”6²\z<pò}þ7ááüÃP¼üïáYñÃP<¾yT81îY8<ïƒmP|>MѤç´ð\jYx–ìχçyœžÓc §ÿq–Ù®÷è¬À=Oü®$®‹Û‹Ç“.}Œ|P濞ý^³Ñ/á_Óæ‰¯Ónølô(ìõv¦³8ÿÆ;O·…ôëä½0~‘¼+r’öþ~§™ø!íÆ³2¼ßô°“íüŒ ǯÂþÞ­Å€M¯Û ƒÑþ<€Óp¾½pb[].ëµþä“OÂ?ü]º˜f¾ï€¶žK- Ïô?ÞÓ»½/+<çÇ@O*în—ãóû=»œsÑðŒßWzÜèùÃóøÕ8ìÌG=+.…g3·øºl‡­îWaÿÔˆbŒÀ »¥!WözÆi÷Vá<-†ð§vÕ/îux^¿ ʶ…²ã£kpY¯õh4 ùË_ÂG}ž?ž]»á ÔIx.UžéÔB÷ÂÎy§SZæŒðœN5TÓÝí½á³ùc§Ó)õ¿ãùÜ™Siüݸ`xnÇݦÍÓ™ÍëÙÿ6;+=SžÇ‡?„;÷ Ó) Ïe¹ œ:Ì#'ýP4Û]¶ÏT_¶×`ɬ½o ϧ°×!>¯ÝGåqyÍÂ3úã?Âwß}—þÌÏ?ÿ<d·œÏe>€U ÏRÙ¨OúŸin9çòËŽ­Œ£4Û…ûæÿ³^¼ýŒIås‘;ÝxrìÛÖÖÐŽOŸ tiL~ÆÿÌO _ ÑD çùã, ȧ›»}þœcŒä'Óï®&WWüý›&ýà³ìCÔ’Qî¥f8¸ ø˜ñ´g|ðK§÷ZkWÿåØÄkýÛo¿-h¼|M|ßí!<¡&ÍÛJNbË;kd±ÌeŒ6&Q¹s* £å1<óÇ?ÏýF;ƒÅ9wk²É×úåË—ixÆÇˆ!ú¾�õo/P'á 5iÞ6Pr,ï‚x,åàô¡&éYî{á‹ýW ÁºþhãôÄ¢Å=1h%‰Ç;÷BÿÁÙìñðqöo‡½ÂsªK¯uÜå> Ðǧ»äËø·¨“ð„š4f(‘_N$–ü-ÿ…y^Ϙ•¡ôØåe/™¾’?Ì#¿{½0ÅÓÂa ŸSUâIGñä£xÒx<> U>€"á 5± ´G¯uœvi Ož<É®õ¾ê%<¯µ%'I•,—2Ù<+‰ëv¨ëµŽ£qÔs6SŒQï; NÂjbhº_ë|€Æç²êL�—ExBMlíÑ”×:žñŸK\.2(Àº„'Ô¤mÛÀìï®ÏÂç¬åºú§¦ˆÏ%?è×_}î9@Ö%<¡&¶öhZxÎä§`:Ï �ëžPÛ@{45<gòZ6ÀežPÛ@{4=<gòS0 P`„'ÔÄ6ÐW%<gb€ÆøŒKüà²Ôò¯aü‡Ïb±X,õ,çQ6(Àº ¹@MÎ�\}Mz­W}.³�ßw÷î]S0kñ?�‚É ÀE O�Î-hœû3¨)˜€U O�VfPà"„'�4ûi &à<„'�k3(p€KóäÉS0K O�.•9@e„'�ôñãǦ`æ„'�UœôåË—Ù-@ÛO�*ÔLÐn€Jç�u<´‡ð 1@MÁí"<¨UqPàúž�4‚)˜àúž�4FqÐçÏŸg·�×ð qb€æ§`2(\€Æ*Îj &¸Ú„'�'7(\}€+#?hüsœ¦`‚«ExpåÄ“ŽÌ WðàÊÊÏúäÉ“ìZ ©„'�WZq &s€Bs O�®…b€š‚ šGxp­§` Ð€k) _ýµ)˜ „'�×Z~ ¦Uç�ó‡:f.ð òzÞ)˜â÷Äû‹O¸Â€VÉOÁô¾�…g\â„õÀz„'�­4Æg\–hƹAgá—¸«¸8á @k½oÐx[><Å'¬GxÐz³�ay÷îÝðã?¦×ÏŽ -.â.Fx@f6Ó|z½^¸sçNixÆE|Âê„'�üüóÏáÓO?- Îü">a5Â� Š'µˆO8?á �91$Ëó¬% zžyA¡í„'�d¾üòËÒ°<ÏOJŸp6á �‰ø÷ÜË‚r•E|ÂÙ„'�$âíÏŸ?ßÿ}ºë<ÎíY—ï[Ä','<`‰£qRùøç2—ÍéY¶ˆO('<`/_¾LÏz'!ÅÀ, ϸˆO8MxÀb\¤ù('ÿô¦ø„rÂ�.Ùl}½Œ“–,–‹,M$<`ÚW‰u¸á �-%šÖg®Fx@K‰¦õY‡«ž�ÐR¢i}Öáj„'�´”hZŸu¸á �-%šÖg®Fx@K‰¦õY‡«ž�ÐR¢i}Öáj„'�´”hZŸu¸á �-%šÖרuøf? :7Ã`ÿuvE3O�h)á¹¾¦®ÃãƒQèmÝ£ƒ?³kšAx@K ÏõY‡«ž�ÐR€Ãqè'±µu#ô÷B7~Ý„Ñøat;Éõ½°·ÿ*gwám8œüwø¯a?tÒïë„î`޲{¿£^ü¾x[7 'GÉ•¯ÃþàfvÝn¾›Þ·"Âs5Â�Zª’x7 ÃíY`N#±Ó^½ G“¡Û…ƒYWÆÝÃ1L÷BLÊþ £~èM/ELJOÃ^o7Œ^¼É®y^ŒvCoïi8<)ØÊlv¾KÚ}7}Œ­Î0ø¬—|cüaYÈößf÷? “awzÿdé ö“µ“×çíä¶äƒÀðÛ,þã}“Ë~¨dýmv}]œð€ «"Ò˜ìÃaz)†Ñíù /‹·•‰¡´[8Aæ8½xú½\¯“è¼v*Ц2U¬Ãw“aØžfzÒPŠ£Ÿ’µù{²>?½Ñ‹Ü¨qƒõ^ÉõQŒÿ^žÿ3INc¾{§’ãA…'�´Ôæ#à8餽pc8IR(^Œ»Êïe»Ã qt|&Ÿí‚ŸŽØM—²ÝçI|ÆÑÒ8R—X}6¿ £¾qùÆ^Ø×Úéá©ÅÀ__ƒÝGóQæ©xÿ~vèÂfm~}]Œð€ «<šâhÝa˜¤™‹£ã_ÂxçfèFaÿ ·s8ÞÿÖÉ®ø¹ãWao7|6è×¶‹}fóë0ŽPÞžGáâ(ñ¯aÜ\ü‚dîíwÁÇŸs¿’ãc…'�´T5Ñ´;£M·fǦq4ݽ›^¿3¯2Ž–~nÚ]w/ß™Žt¦z»ÖQϯň,Œ /Œ~æ,þ¢w“áãâ:?çfùý/›ð€–Úx,„Qa×z.Ž‚4q|8 ãôÌöâè%'ýFý;a8ù=»¢Z_‡ £¾‹Ç¼¦£Ÿ¹“³fŠëóD| §wÁÇÙÎ<ÖöòO�h©MF@EÉÏ1=N3ŽTNϸÞNÂÛùíñ¶ß’ ÜɦPJ–N? ÿ6 ýÎôòöðÃÿ¥gcO/ÏÏÖžO×—ÙôJÕŠ½IñÄ¢óˆÌïZ/Œ~Î-)ŽwÛO-û9›±éõuQÂ�6¬©p•lnÆÑÍ“ØÞŠ#’éÔT³È~}r{ÿ_¿õ·Oî»°t¦£Ì¥‘ž›®ik»ä$¥Ë«‰l �°aM€«Ä:\ð€–Më³W#< ¥DÓú¬ÃÕO�h)Ñ´>ëp5Â�ZJ4­Ï:\ð€–Më³W#< ¥DÓú¬ÃÕO�h)Ñ´>ëp5Â�ZJ4­Ï:\ð€–Më³W#< ¥DÓú¬ÃÕO�h)Ñ´>ëp5Â�Z*F€ÅRõÒDÂ�h¼¦†TS O�€ ž×ƒW�€JO��*!<�¨„ð� Â�€JO��*!<�¨„ð� Â�€JO��*!<�¨„ð� Â�€JO��*!<�¨„ð� Â�€JO��*!<�¨„ð� Â�€JO��*!<�¨„ð� !ü?m,ÛÜÈ”å����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ak_SDC.png���������������������������������������0000664�0000000�0000000�00000010114�15030617045�0023400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��”���Ž���˜è���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��áIDATx^íÝ¿k#W»ðý7T»u·¤Ie¸1!y‹mR¨0 .¶Xx! )nØB°M^xaAàÜê† \.dÌm‰Ab¹w!YÜ„C²ˆsõÈ{,Æ?4^4Ÿ²–ÇÒøMôõyæÌÜK��°��€…”��,D �`!%�� (�Xˆ@ �ÀBJ��"P�°�€…”��,D �`!K(ïÝ»§iš¦ÝA˜¶ÔšÌ1Ðukï; ˆ@ KÊ1Ð%Pw%,)Ç@s”@Ý ”°¤Í!Pu'PÂ’r 4‡@ Ô@ KÊ1Ð%Pw%,)Ç@s”@Ý ”°¤Í!Pu'PÂ’r 4‡@ Ô@ KÊ1Ð%Pw%,)Ç@s”@Ý ”°¤Í!Pu'PÞŠ_S¿½6ÞÇ ­ÕNÝ—Géd²ÕÜírm­;HïF?1èn~ÿ´­¥vÿ×¹ÏÙêì§7“ïNR¿ÛN­lûNÚû±ŸžÞï¦Á»ÉF×1<Nƒ½NÚÈ?_¿›>k÷Óñd“tÜOíìû¹Öj?K/f÷tzÇÛýßËÔ½é>®ˆè š¡Ncí}(oM„ÀQ€œÇÇ”þ=öYj÷^åBå»Q¾zœ „çÞ ºéþY Ì=W²µ,LÍûùßÓ~çôùü¿ÒóÍÏRïèïÉãç†Ç/ÓîæNêæCÜ›tÔßMgÏñû=JþáÙï7<þ!=k¯§{ù@Þ fáÉAêNíÏðu?ílwÓ·û¹ ~r˜úÍtïFû¸:óÁ>ýGʸí¤þqs¿Ncݘ÷p-å­) ”#ÃÃÔÛzœú¯ßN¸¥@ùf?uZFAòÏtÔû,möÓpò­SþÚ©³ÿûäë Äï¶ùhæƒ~xÔK›W ”#±íÖv?½ïl„âQÀ,Ããßo] \}ñ>ÝJ­ö^:<¹øn¨;òÖÌ ”éïQÀkçàÅ@x"ó®(‡£¼µ›Z›½tŸÁ¾¶&ÿÎD [ßMûoªüžÌÀvûipœæ9æÊ ¡Th,ÕˆöxŸ¬ÅFT4ˆ@ Ô@ykæÊéÐpgüûdíô¼Ée‘˜ÙÛÊÍ>Ìô]ú7åÉïž§ÎFëô÷Ùè¤Þwƒt<[çÊ|¿Å>NÏlr¦vÇ@ŒWî=üöø íÅ© £¯[g³Î#'GéåhŒÏÎÛ½×J~:ÊÏ@Žƒdöý|k̶Ï7žý\«ý4=ŸìK´Vû_é`úžÑ~í÷¦Îÿ_ùµnSìO]Ôi_€ú(oÍuåe3”S. ƒ1³·–Ÿ}ŒË'i+ÿA<ó³‹y. ¶W-¨Y›^$P.¬žÇ@ÌÀï¤ööÒîæöé"´á/©¿ýé阎ÿýàÂy¶c'éÙîwç¡s"އõ’Ee—;­_Ë/ø¾Nû»[‚éø|âönê«û6þ3u6ó§§Ü*Æú?þ˜ük1õ|ßwM ¼5óåt‰º¨d}‰Ò@èÆý3Ó²x˜èFʾwñ|Óåõ¹¯Ávô!%ãLŒiýLþ0Ùø"íÏœöáî?ÒNÿ—ó?lÎäÆýL®5#9+އ'3%ó ¸EÈÝýwÌœ£Yð‡ØYt¬#L~üñÇ髯¾Jýõ×äÑ›©çû¸kå­™(Ç34Û¹¸ŠåøÄ ÛL—½ãëØ¿?'_çÜ0PÎMºF ŒUÝÛgç{žž“¹]@¨å103;ž3~oNN…(lÓ+·çÏò_Ýè}¾ûtj.sã½´SW'P†£££ôÉ'Ÿ¤>ø ½xñbòèõU±/Àê(oMÁ‡áð8<{”¶¯xÙ ¹Jåøœ±VÑúé‡ãf÷àìµOË|ORêÚãPwƒÅ0(×îm¦ÎÞÁù9“ãK¾ì¦vîuÇ åøCÛ/^ÆèäUêm?JÏrç²Åsö»£>xT‹rä]©ã1P¸¢?sÝ?Tæ\5àZâ5?ZváØ,;þNË÷•^ ᆪë~¿?•>‡Ìë("å­˜=qÜ®taó¹32§-¿m´óY‹ß/¹Øyî˜[8qÚÖ¯¶J»À¸Œø´Ÿ~¼pÍÀ©€"Ÿ}ÿ¼Í»°ùÌb‰xÎÞßhWIôE½\2£qgo*Ü•(º:ÁuÞkÛ3³æùòú¼²ú0î¥íÜb¢;TõXG <Êßñ¼×-ƒ×ï}Ô@ Kª~Ç@Ìü=(™Ñ{›^÷;S3ô#ãUß»éÉþë ¡n|MÒ ä¬O/.›¾Õ¸Lß>ŸÏfÀ7‹Î½·5Ö1C3•1c3—Wáÿ½@–TmŽ(+^âgÔò ÁÆ&«§³ËJÍÌ6—,*+<•cž‹³ògW,ÈÏŽŸÍÔG™öûÔ;:¿³ôß_¼ŒÑ‹ýºMqNe„Ê8Çò²2ømï °œJXRŽæxceï¬ þå—_νÌ÷PD „%åhŽ÷9Ö1CùùçŸÏ-ƒ{ßEJ曳xf¶Í_HÄ퉾§îb¬øá‡³2øÏ?ÿ<yÔû(&PÂ’r 4Ç]u”Á¿þúëñëǬe”Á½ï€"%,©¦Ù}¹ã÷¾¬UqÛÐ:‰ßé.ýöÛoã@™õï¢wÛV@ KÊ1Ðuë(ƒÇ¾L—ÁJXRŽæ¨ÓXǾÄbøoÌZÆì%€@ KÊ1Ðu ”!ΧÌÊàqž¥284›@ KÊ1Ðu ”™(}G <V„GIh&–”c 9ê(CÌNF<B¥284ÓR~"ÅÿÐ4MÓ´»ióD<î²ÛÄ]w”Á¡9Lq�P©¸ÛNVû„«O àVdeð‡ŽC&°ºJ�nM”Á£ü­ «M àÖÅ eÌTÆŒeÌ\«E ཉs*#TÆ9–Êà°:J�Þ«({geðXeq`¹ ”�܉˜¡ŒëV*ƒÃò(¸Sq‡¬ wÞ–@ À‹2xÜ<Êà1k© ËE  6â¶(#XFÜe†`9”�ÔN”Á£® ËA  –bv2f)³2xÌ^õ$PPkq>eVó,•Á¡~J�–B”¾£+£$Ô‡@ ÀÒÈÊà*•Á¡>J�–N”Áã.;Q»î(ƒÃÝ(XZq·¬ ÷ î†@ ÀÒËÊà>‡Làý(X Qò·28¼%�+%f(c¦2f,cæò:„P¸€•çTF¨Œs,¯ZËÅì&p=%�++f³2x¬ ²x™ìÎ<B%\@ ÀÊ‹ʸnåeeðìŽ<Ñâ®<ÀÕ”�4F”´³2xÜygZ|/ ”ÑÜ‘®F  Q¢ ³cF2+ƒÇóa2kB%\N  ‘â¶Y‰{ww7ýôÓO3a2kB%”(h´o¾ù&ýãÿHëëë…a2kE%rà”@ @ãe+ÁËÚýû÷dzšÀ,€ÆŠó)ó+»/kB%(h¤W¯^¥>ú¨08–µX .TÂE%�‹lb¶±(0^¥ •p‘@ @ãD ŒK=xð 00^¥ÅýÂÝûN ”�4Z„˜±0'.x^ç5¡N ”�8ñâÅøÞßÓwÎ)jB%”�P*ΕŒû—­*i:�®!.pç_FˆÌ‡Ê˜Ñ„¦(à†¦Ï¿Ì.Mã]�‰òx~ÖR[½F1=�:V“q-§w� B‚Çj2®åô�THðXMƵœÞ€ «É¸–Ó;�P!Ác5×rz�*$x¬&ãZNï�@…Õd\Ëé�¨à±šŒk9½�jFðø=íwî§Vg?½™<²êÊrz�*TËà1<L½­'iÿÍpòÀ‚âù6×Òfï0UôŒµ'P–Ó;�P¡Z7û©ÓÚIýãw“¸.²œÞ€ Õ1x zis³—Žš2x Êrz�*ô>ƒÇðø íu6ǯyÞ6RwprºÁxf2ÿ½\k÷ÓñéV)÷S{òøZwÞæž·µÝO¯'AôÝ ›Ö²ŸoíΔÐÇÁ5~¦ý4=ÏíW«ý¯tpüv²U¦“£ïS·½>y®vê~ÿ?©·}úuÏÍŒýb>½�zoÁãä u7·S÷åQšÄÇQÀ|™v7M•¶ÿNG½ÔÙÿ}òõ<§Ûý³·—v³çþ’úÛŸžÔLÐÂÏá(Ãö³ôòh ‡¯ÓþîVî|Ë·éxÿ‹´™Ûæ,×xU ,§w� Bï+x\½Œ+²wRïèïÉ×óüšúíµtoã‹´a6qVÌT®Î"F(}2óZ±ýýî cî›ý´»s>ëy&Bj~Ö´fÊrz�*ôÞ‚Çð8 ö:iã^+mtž§~¿Ÿúû糕g®ºÂ;Êãk³eìYÛ©ÝÿuòuÞ(¼î>zŽw£¬øx²}üìãÙϑȟf¡³†Êrz�*tWÁã´lœ/-OÌ-O_4žñ¼Ò aÌx>( …éÝ u?~­“4è¶'Ûǿ̖F©ü‹´]RëA ,§w� Bw<ŠJÑóËÓy螤­«\W²lÆs^·g^+Jé'çuF |0u>g,Ðé§ÎÆfqH­ ²œÞ€ Ý~ðȾì¥Ã“,Ôe«¦?…²?'…(7?J݃I)<¶ûßôm·Ö/”—‹‚ÞQßš¿ çâóŽÄöëÝ4?8zýÁ³´y¶ïoÒQ7m´>LN/&ª²œÞ€ Ý~ð8-!·Ûã×:mqe/íg+«óN^¥^vyžQkµ»éÛïé8ò\”¨×²ç˜jgeò¥;ÅÛDo7YÐ3y,.=4ކ¹Ë_¦h"'·bµ÷áÕÞÉçľ2ŸÞ€ 7pÅó<ï’q-§w� B‚Ç5¦~çAÚîÿ’jœ'ë%ô�THð¸ÄôÝ{6:iop\ë0Œk9½�<V“q-§w� B‚Çj2®åô�THðXMƵœÞ€ «É¸–Ó;�P!Ác5×rz�*$x¬&ãZNï�@…Õd\Ëé�¨à±šŒk9½�<V“q-§w� B‚Çj2®åô�T$B‡¶ºùô�� (�Xˆ@ �ÀBJ��"P�°�€…”��,D �`!%�� (�Xˆ@ �ÀBJ��"P�°�€…”��,D �`!%�� (�Xˆ@ �ÀBJ��"P�°�€¤ôÿ¼E!Ç ­W����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9al_SDLINK.png������������������������������������0000664�0000000�0000000�00000014010�15030617045�0023753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��î���¥���xL���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IDATx^íÝ¿kY¿Çñü[¨Ö–†-Â6©T©q±Û¸I!Xp‘ÂìB. ).¤Â^xÀ ð.,\î2°ì6O *.ƒà)RuKbÔ,!ÆÄ÷Îw4#ù%ä#ÍÍû‡Ä²,Í™9ç33gF���@åÜ���Ü���Ü���Ü���Ü���Ü���Ü���Ü���Ü���Ü���Ü���Ü���”Ü<x@¡P(” �À]¥w îØê¡JíÌ:�n#¸%a;¨‚;�À‚;P¶ƒz ¸�l!¸%a;¨‚;�À‚;P¶ƒz ¸�l!¸%a;¨‚;�À‚;P¶ƒz ¸�l!¸%a;¨‚;�À‚;P¶ƒz ¸�l!¸%a;¨‚;�À‚;P¶ƒz ¸�l!¸§¼¯Ó ê+Žô/Ær>Kä³L¼ÃôóÌÒìËè³ÿÌQ_šY¿JÇ“IÞk6Žex3 ~›2ÈÈëK§=¿-½ó ñ^øu-jZÜ'™Œ~–^«a¼Þ/Ò|$ÞÄÿ ¢Ë'ûyÍþÈÿ”IË–åáì½?¤ß kÊèV—IòïšÒñÞ&–÷ì1ñk6ê·æÏÍ®Çvi=°ûªÔάs�à6‚{& yÉðûÁì±toŒpê›xÒ™oƒ͇‹àþp5Ðî/^;óï§r3<–Fû¥xg¥=¸òI˜^Ëðø QŸ©ÜŽ=?x·×îþߎ^J§çÉ8ÅúÐD.O;ÒˆÂóÜ Ë'xî~ž‹H,Ÿ˜(|ïI×ûËX&“±\§“ 9níËñð:½<KP•Ü4w¦ê¡Jí\u�vÁ=SV0õM¯d°$Þõ§ðßF‚ûß2ì= ûçñ@ÚíŒcISCö©´{C¹ ¹¿2tÒJ?sûiàîËZ>Öƒ{G^ úÒŽ‰¸+¸ûËëê\:Í® ®ì-±ûÚý5[O[j-÷m#¸�l!¸gÊ ¦YáÖ ˆFX7­Üo†ÒkÈ`üÑÿACüaøÿˆÖï@zÿßmw:}ñF“;ŽH¯°|6Üû£·þ¿ßg"–÷O2>—Vë¹ 'æEùv?Di{µ³ÏÕÁ�` Á=S^0M†pŸDÿóèg J8¯=ß²`ªfÓdšó£éúó‰ìÇÂÏ]¯±.Öð‡ zíðó´¥7øCF©À»ÂòÙHp¿•éµ'ÝæÓðè~^p?“‹AWþç¨ÊôSµ¶]†á5 ºšÈè¼'-ý¹-gu#ã‹S㺠¿´ŽÅ›GÔµ×ÄJêìÑÁÙžÆìú‰³°.ZüŸO/“;—~½†ƒÄõ—2©@£k}ª¢Ju�¬ŽàžiÅà~Ç÷¸»B·aßM×#ðûfàI¾FÆÅwî@]üÚL^ [~pŸÝ,­þ¥ÿhNpÐÖñ…\__Êy/y=@ùª¸LÇÙÿáL~Õë'úÿ–ñíG¹öžÊ^ЦŸüÿIÛ¼"ðAF§/S¤|º=ì-¹¸º]÷›~›Ï/|Ï ˜;�Áõ‡þNæp^¯édÖæñk!Êa«m¼N×9�@q¥ôâÕ<ò‚©ä£ü©2…,îœÚþòÑe/ÑÔ•œ—ÿnúzÉi9+,Ÿà¹éàžø‘¢ÁÝ7ŸR4Îîf»Lÿ¯ûØ·ðòUo;ˆv�sÎPøËûøÐ“ëÔ/²Úݧm°Êö Óñ¹&§ÚÄvugâ…œfµkj‡·¶ÚÙÆëTo�¬¢”^¼úƒGN0 Â_7>ßÜjp×£ÈÒH]tšœ.3û¹mNÊ ÕwÈ=:ª¯W0¸g-Ÿà¹ îAh{*ÍÞ¿äì®àî Ž&w³‚g9ª·dœí™›­›Zçì’¾SL~¥ëù '"Q³mu:Íáyv8'¸§Øª � ¥ôâÕ<2‚ipkħÒ-z;È\K‚i0§÷QvpÒÒŽî_xWñúáùۜໄ÷fCZ½Ÿ9íá­ü:/ïXaùÏÝTp÷Ý^J?˜×ÜŠ?žÙ.Lõï«qÔ½rÛAæ„"Ë~©¬ •W¥ïy”ØL¬;K¶¿`GÍê—ÖCp�ØRJ/^íÁCƒãú_À”ûÅ>A0Ž?7v”2ùûyI¾qOuƒ]@–F¡»Âd¦<ïOóžÛÉ ¯Š.Ÿœçe±¬²—å¬d|“–ùþÙż #¸k°K“Šžë?¾ÒÎÖfhý*eéj â'©/ënH«òסîóÄY Ä´ îYÓqnßÈ ÛKÏ»/­v¶ñ:•[ç��+)¥gð�ª·èÏÞ’#Ôz'ŸÃî¹\Åξè]f^Jïä"~—àžþ'÷¿0u/y‘µîGþõç¶tN_‡ï¯g‰<éwvî‹¶î�€Rzq *ÛNGɹucì‚è™ÙÝZ¢Û…ê™3ùÍ8ÓqõܹóYg`ægW̳8Æ™§Û±\ôõ~gÏotNå"v{Êril°ñ:¶ê�(G)½8ƒÀvPw�€-¥ôâ �ÛA]Ü�¶”Ò‹3xlò >ÅÆ—5aeºì±ûlµ³×a�·•Ò‹3x�luAp�ØRJ/ÎàÔl;îÝfô޲cg€ô3Ù`ãulÕ�PŽRzq€í .î��[JéÅ<�¶ƒº ¸�l)¥gð�Øê‚à�°¥”^œÁ`;¨ ‚;�À–Rzq€í .î��[JéÅuð P(Êö �À]ôâ@IQõ`«m¼ë�¸^�@è�0�€î��F�p�Á�ÀH�� ¸� �Àw��#�8€à�`$��Ü�Œ�à�‚;�€‘��@p�0�€î��F�p�Á�ÀH�� ¸� �Àw��#�8€à�`$��Ü�Œ�à�‚;�€‘��@p�0�€î��F�p�Á�ÀH�� ¸� �Àw��#�8€à�`$�*ìŸþ‘ñxL¡Ü�w Ê¾ÿþ{ùæ›oäÙ³g”š‚;�€‘�¨¨üQ¾þúkyÿþ}ø��¨3‚;PAQh÷î]ø��¨;‚;P1¯^½"´�€‚;P!¯_¿æ2ë¿���&‚;PÿùÏí�� Á¨�£Óc<Ï ��ˆ#¸%‹B»^ ��‡à”H¿`IïÓNh��w!¸%ÑÐþäÉ“ èÿ��–!¸%!´�€UÜD_°Dh��EÜ-ã[Q�À:î€Ezöe·tÔßÚ�À:î€Ez‡˜¯¾ú*s Lô­¨úEK���«"¸–DÁ\Kò¨{ô;¾��¬‹àX¢GÛ£àn^x}ÁÒ«W¯‚Ÿ��ÖAp,0¶GE/B}óæ|ùå—|Á��¸7‚;`y´Ý,:ßý»ï¾ Ÿ��°>‚;pOz±iVh×òÅ_Èï¿ÿÎýÚ�À½Ü{zöìYfhO.3ÿ��X Á¸ âY!}YÑi5\¨ ��VEpî¡èÑv³èß¼ÿ>|��€bîÀšV=Ú®·„äË—��ÀºîÀšV9ÚþÓO?q*��¸‚;°†¢GÛŸ<y©��À ‚;°†»Ž¶?|øP<Ï Ÿ ��pw`EwmçâS��° w`Ez?ö¬À®Ÿ¾~ý:|��€]w`z$=+´k˜çâS��°Iw`É£íúeJ\| ��¶à”<ÚÎŧ��`›î@AÑÑv½øôÝ»wá£���ÛAp Уí\| ��ÊDp Ð#ìæ4 …B¡P(õ*U@p ªÊF ·±Õm^_´ýî ¸Ž¡† ¬GõC›×m¿;î€cè€aëQýÐæõEÛï‚;à:`ØÀzT?´y}Ñö»ƒà8†6°Õm^_´ýî ¸Ž¡† ¬GõC›×m¿;î€cè€aëQýÐæõEÛï‚;à:`ØÀzT?´y}Ñö»ƒà8†6°Õm^_´ýî ¸Ž¡† ¬GõC›×m¿;î€cè€aëQýÐæõEÛï‚;à:`ØÀzT?´y}Ñö2Èè¼'-ùê2ž•Cñ&ŸÃ'ØW•¶d *g£ý,ïÐ蘢²'þ¿e|;½ãyFiöeä÷iŸG}ifý>*O&y¯Ù8–áMôž Ú‘z}é4¢ç·¥w~!Þ‹ŽôG·á“ ø<’~3|Ö©Œ‚Ϙ¬KS:Þ[ÿñ·âušÆãaiøïy1–Ô»Úªã=èûb›>Édô³ôZÅú1_¶c3m^tÝßDß~ïFo(7ÁïÒ¦“‘xýŽ4¢ç·zrþ§'/ÎÞwuÉ6Õíøé?>Z·‰'èýŒÒèœÊÅ8]SûuœÑ×ÚªÛ± F m‹7<“NÔvfÿjý¼£‰Äz÷T©ãÎ@ú® ÆÃ'•჌úû~[žËÕ| Ü<]UÀTæF«êÃþÈ‚#S¹J;Ùqé`5\ ÚY‡Püµt�Þ_„ÖÌ¿ŸÊÍðXí—â=–öà*Þ¹«éµ ¤3xc¿ŽcÏ\Ûk„â[¿cnE×ûËx¿D}úÜdðÖŽýq¼>Ö븞²;ÿX8›ïˆ%Ã]Kúw`€Ÿm'­†_«¼X¹yºL6£àº¯6Ò7ü-ÃÞ#iŸýœµg¶õtr!ÇíÃÄò¿‘±w,­p‡a5Ú¦/¥Óó.üõïòTCw∫ñÙæn/¥Ÿ¨ý:.l®í3Lÿ¯Û2êDý[3Þok[¶2ž?àï]þ·¿ýj{˜=tûF‡èR&ÉçíÝo™Ü[°óq°õ¾e«m¹D5j8 Ì6ÜÕGºñ`»ÉÁÙïø?ÒŽuøjŽÚKޏ­nH^ úÒŽå/Ü}Ó+ì‰wýIØ@×S‰Î_ׇ½GÒzôHzÿÃ}Á2;Y,o×ø`ÝhgïlnÑvƒ»/¶î‡6Ñ7Ü ¥×Ð�õÁvêu'¢_ÇîMû½NúŒ‰~æöÓ»ƒ»oê÷cû]O®ƒÊn¢Ž ÛÛÞgXš©>N×ûœ¾ÙóöRãÉ'¹öžÎv�äxxma»Ñõ(<;£;AŸŒ). ¿½¢uôv,~;ÌÏx<hHËÜ9SA`~o–ÆV¶q}¯*¨F-�”¹Ñf÷Ù�Ô6SspÍ´Öœõ膆øÃÄ‘ŽäÀ`CHÞúÿ~ktÊ+÷Ø�¿‰:®§¿ßÎÝÞr98ˆOqжނú¶xó¨ËoÏ÷ÆtóÌËŒ/N£û~Ñé�±éÚÞzÆÆxNTR;ž›§ï»EÖýõ¾!:.ÏØºÒ÷Ù[2½n-áNx§/^òÌORÎ猅üÔqasmŸ¤íq"ûwØœŸ¶³ó¿2ÞÀAŽ`gé‡3ùUÏzg>¦ú‘žwå¯Ñ†ÛK9=þ-ÜÁZÐzî•pf{m¹\5j8 Ì6/¸§&\5œDåÎÓ¼YAØ”<Š“58ÜõëX’éµ2›Ñ‘™U‚»¹Ü6QÇõ”ßù/Ú08ƒbœÑ×y[—3ÀÏŽÿ ƒ_Oüp6›¬ÁÑ{Ýi8òß3q$Nšž¾ˆaVeEm®Í‹¬û!ë}ƒîÄï;Ã;õúž÷œj’Mç¸ÿ!ƒ^;ü<mé þÑ$£ý³‚»¹Ü6VÇ™­nï·WâùmÐx2̘Ç?“uðEÍúú½þPþ´~#Ú)ogìäëûþ—ƦDFt4®[èk=-å,ÚVÛr‰jÔp@™íJÁýŽ£jq«ξԑµäkd\ ·òÀh ¥Õ¿ôͪï:ÁÝF×£ïU.]žþà®myŒ¦Ëè�ú\ºó ^Æ�ï fCZÇÆÔ›¿îFSLÚžGé }­ް'm®ÍW î6ûíšæNÑb‡p¾¸S¡X_3~Qk3«_[UtE¬>¾µ‚»Ý:êßoߌ‡¿‰çI/9w_—IæÎl´£þâuŸ¿×ÇbËcõ³VãH$èƒÌ Ç“%y§˜üu~Ó´>UPZ�(s£Í îæ`¬’?ßiùàLʼnu¢Q1/ ZÖ‘®ÛÉ&þNCB0]gœQß¼÷0ÃÜ&긞2×£3ÏBølºƒÐG‹åPÊ�?«Ozž®ÊxýXIß)&w»Ù2­ßfY÷CVû†%ma¶ù²„B;«Ðe‘Ø‘Ì}ýlá‘Ü ×Q—I™t0§•¤¦WF‚3]þ2ùëuþgžc\STÎ×DV]ÆË^kÃÊnËH5j8 Ì6;€Ì¦ ¤ŽpYœÓ·yKY›ýÜŽˆ'­Š“7›WÝìýKΊ÷`ÞdtW“MÔq=¥wþÉr¾SôV†Ç/æƒr)ü|§ qä<°j;-{­íÚ\›Y÷C6û† <%.l$ÏÒèÏZ¿ðBfÓº¡Xÿ.s‡R—E±àL½šŸ5Ü@ ÛÙÞõ3d´UrŒ˜í§¯[¹‘«Áá¬\¶í¦Î¶´ìïôýÏ‹¿æºu°€à8¦ZÁ}v׎n·àí s­38û´ólG÷X÷·Z<L_\ˆo³_©Œ@¢·q .TÔ Í×Ëxnp{¸§ÒMÝÒf×SzçŸZGtÐoé7@KàSÁϤAü$çwY–½Övm5¸g­ûÊbßìÔe~§Cz9¸Õbç$qñ°ÿøüº…ð¢4L7õŽ#?sÚuÎûÏÒë¼\ôI*#xO'¯å´{”¾¤Í:¶²½GËÄœ^ÝϽõ\†óå¤ÛP8M.4\Êy¯mÜ=<H’q¿ûø50Å%úÇéûõÒëkp—™c9Ỉ_·6ÜÇ”³ÑfÌÅJ±/`Ê›tôñçÆ¦$?ð“ïcÌ?Ôy¦‰o²k¹óCRò½çóOga² î.Š| MÈVïAß³<Y<\®ZÒ>ŽÄrø í—\LªAê0¹³ê¿Ëøâ¥ôNsâ—íXlÙfÚ¼èºo·oжø’&szR¢>ÆNB´î,^Oû//}1iZ¿‡ÏÅûÓü¦d÷éŽÊüý%ÿ ˜,ÖÑ ¯µqþgíö~•K½ïü¼þzÁîÐ#–¬/Þ(q=‰Î‘ËW‹._ä·Â}¥îTæÜÙ)6ÕR…;^æjÅ.6Öþ(gjÖ²/´L߯ ªQ ÀUÙhá¶òÖ£äàgîtéÙ`Bضød4KúþÌñ€¥í,ö^ÁÑàÔëhy˜}öh ôýQO´ýî¨J[²FÑÃÖ£ú¡Íë‹¶ßwÀ1tÀ°õ¨~hóú¢íwÁp 0l`=ªÚ¼¾hûÝApC|9ó¦3Š•/d©0ýŒ¨Ú|™Ýî´Þ»aÉ¢©’¼ó×nÐÏVô&@AUÙhá¶:¬Gùˆ¦Ë®ï¨)ýœ¨'Ú~wT¥-Y£€‚è€aëQýÐæõEÛï‚;à:`ØÀzT?´y}Ñö»ƒà8†6°Õm^_´ýî ¸Ž¡† ¬GõC›×m¿;î€cè€aëQýÐæõEÛï‚;àÝh) …B¡Ô³TÁ�¶¨*?¶‡6¯/Ú~wÜ���Fp���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���@p���*Oäÿç”ÄZÔ[í����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9am_SDCAL.png�������������������������������������0000664�0000000�0000000�00000013423�15030617045�0023625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��å���£���-¤`¦���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¨IDATx^íÝÏkãV¿Çñ,úOxmº(¡›YySo²èl²É SHa(…¼è¢e†@iáCZxèÀ Z.´ÓMá!`nå n™oJB CÌ÷ê+ÉŽ$É’lùÈÖû‡6‰Ç?Î9:úèèHÞ����VÊ���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`Yé¡|ooB¡P( �`{l$”uÆ6PUjkú�lB9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� ¨š‡òWâ´÷½÷)¶ô/Ær<Jä­LœÓÅÇ…Ë~_FooeÔošÿî•}i;¯‚ç\|íFw(7Á_㦓‘8ý¶4fovåü?Ž<=Ô× ”ËLFŽôÛÁëH»ÿ“üÏð©öGî'VßãÄ‘vè1~iJt_ƒu¦õz¨R[Óï�`»Ô<”+ ÒnÈ×îïN¤=ø=Ì]>ÛŽL‚çÞŽ¤ï…ãØséã½°®?h° å3ɰû@ZϞ˳։ Æo‚ßß›N.¤×:•ÁU8ßÈØéIsþüyÜɵӕNÿ¹ dzçœÊíØ‘n³!ûóP>³ü=z´öOÅ™:JØY„£ú ”�Š"”C¹kz%ƒ£Çâ\ß¿p•Êo†Òm»A÷µŒ'Ò\¹ñ8LÚÒþü¼úšGG_È5uÿÔ“ƒx(_ú„r£Ú„£éDFç]iºŸW?³_êÕªÔÖµéw�°#åI¡\Þ¸´ ÑáP>âÞ_yC¹‚­ ›Â²¾ÎAO†7Æ\@BðN”á=ÎÊêŽôàñHís¹º]W_Ý>„r�@Q„òÄP®³Z_íÒí~ýL^Y¶t$ÊMtYÈQh\>.Yúy%-£I’á=ÎÊj޼¶×³) K›j¢Jm]‹~�;„Pž7”§Î”Ç, Ô:뼞×Yé'r^²ð‹_.®O“3”gy3„r£ÊmÚ§B}çnr)çÝ–÷s£ãÈõ¬aoÇránó‹‹÷Òì:2Ï„{m~ßïK#y™“Át<–ûïí§ò,x/ZíoärZB湑ñpà]ÿà?®%ÝóK™d}±éûYÕ:žC­ëy��›Qú¨]ýCR(7„×p(Ï"5”ëò˜c¯~Êl©ˆJ ÿY ô`ã åN/÷2¾Çc(O>è© ­¯êѶ=•OçÒkuü» Mÿ§óÐo+ïÿ¥ë\¹-r{)g½—÷Á=½O%ñ—Ií·ÏäbvññôZ†½£h¸÷~w*ÝÁp~p0õ*Ž¥ãü‘ù  ,ëhëuõ—jö;�@’ÒGíêïB£J:‹KIÖÊõBÒÖÜñå!ú³¾¿×ÁÏ!C¹«~+v«Iæ÷ ”Usθ4?—áÂL´ä/äÔrõß¹}'ÒÆz�û(×Ìø"=Hx²Ð§¢g«ô®AOåÌ´-¤]ë°A„r�@Q¥Ú[ʧ¹<{$¬·DL’ʽÓõ ÓœþòVÿrþÚÞ-ÛOę߾Ð7½v¤sP ”»¯q{u.NtiÀì^èûÁ†<ïÑC(7ªä6°°,)Ä;›- 1•2ÚØ=Ðë=½ŸØÙ*}_§çæàM(_°®ç�lFé£vµw ‹ë³½’ñ˃’ÖrëìÞ~ì±á ý{Ê …�üSô÷kmý/ûqd´0Ë™•Þ—|(ƒðs6»2x9òÖææzzð1¬©Ôû‹„´ªÆ;àJ:ÀÌ{Æ ñbA='}͇ñP û)ÅúyŽVZ>³ëhëuõ—*ö;�@²ÒGmv ¨»êm)몴i“uÌR»»³ªcKe4”›®e¸ý]îòåX@(�Uú¨ÍŽuW½m@g S¾*øÆ×øò-ïn,=y2¼Ž„ùÕg©ý‹<_ZYž¥×2´¤}ökp§•;™Œé·¥{O¶Ê�E•>j³c@ÝUfðÖü›–¹eaZïwÑÛ~ -—J¹3ñ:„$ÑåPó%aá%Qá%+±Û46Âwk©�}O«ZÇs¨u=�`3JµÙ1 îØêƒP�(ªôQ›Ã&$\°j(ù¾hë õŽzXG[¯«¿Ðï�`»”>j³c@ݱ Ô¡�PTé£6;ÔÛ@}Ê�E•>j³c@ÝÕmðîî~fýÜËÊ®-§ÒÏ´ªu<‡Z×ó��6£ôQ›êŽm >å�€¢JµÙ1 îØêƒP�(ªôQ›êŽm >å�€¢JµÙ1 îØêƒP�(ªÔQ[w  …B±S��ÛƒQ(á¨>ÖÑÖëê/ô;�Ø.ŒÚ�P!„i�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1ú@…Ê žý Bå�POŒþ�P!„r�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1ú@…Ê žý Bå�POŒþ�P!„r�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1úñÏ?ÿÈx<¦Ô¼Ê žý Ð@~rrâ2 �P?Œþ@|ôÑG^Ñp��ê‡PXöõ×_Ëûï¿O � Æå€E³@þ矿��uD(,ùùçŸ ä��ÀC(,øõ×_½ úô¿���„r`Ãä�� ŽPl.UÑ%+ºt��`†PlÈ,ëÅ���a„r`ôv‡r��„P”LùìË���Lå@‰Âœ/��Iå@‰t¹Ê‡~H ��©å@AŽãÈßÿü´ˆoë��YÊfnž¿‰ÒÀN ��Yʾÿþ{ï €´ŒÇãà·¾Ù—ýöÛoÁo���ÒÊœt–ü½÷Þ›‡òÏ>û,ø ßÖ ��Š!”9éÒ”Y Ÿ-ÿá‡ä�� B9Ãl-y<”üñÇòî»ïÊ'Ÿ|<�� ;B9ƒi–|V>øà.ì��…ÊŒ’fɵ¼óÎ;óÿ×/ Ò%,Ü›��dE(2J›%7 ðz¯rfÏ�À2„r ƒ´Yò´òå—_¦~Á��€"”Ìnu˜µèWësŸr��¡È@C¶)|›Ê·ß~Ëzr�� ¡X"ë,¹^àÿvO��€,åÀËfɽ‹@��Š"”)–Í’ëWìs!'��X¡H‘4K®wbáBN��°.„r AÒ,¹Þ{œ 9�À:ÊñYrý™ 9�@å€A|–œ 9�@™å€Ál–œ 9�À&Ê%× 9õ¿���›@(bô®*á¥+ …B¡PêUl ”¶6È]B‚>õµ[hÏíd³Ýè1€ƒéê¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç� ¦«£AȇúÚ-´çv²ÙnôÀ€ÁtuÔ!èùP_»…öÜN6Û0˜®Ž:} êk·ÐžÛÉf»Ñc�ÓÕQ‡ äC}íÚs;Ùl7z `À`º:êô|¨¯ÝB{n'›íF LWG‚>õµ[hÏíd³Ýè1€ƒéê¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç�Û7˜¾•‰sê½o¯4z2¼™³c·vH¯ÄiïÏë·ÑÊMð$«^¸“Éè;é6ó¶ÜÛÛ—¶ó*ø»o:¹”ón+ô·´™/‹¾N5U»ÞªJ?ÿ:½õe_ët¿/£·Á/3šŽr´Éqkz%ƒ£'Ö÷CE¬»ÝòØ¥½&°667Ê•MiW`G¸Õu˜H~/„˜U«Låvt&ÍFGW)ÑäöRúÍCi~—ÛàW›RÍm¦úõVU¥´§;¾wr‡ë©Ü {ÒØä~áf(ÝÆ©8“œG`s;ÜŽ&°²m”:›rعñÑ®m®Ãd·2ê·¥?"vdQ­> m×’ÖàÊ(ɼÙÈÖ@Æ&øª¹ÍT¿ÞªªŒö|ë =\Ò‹ÞÈxp²´ ×Igæ[[Úln‡»¸×V¶©r:‰ã†¼†ûzúš{Í® =é„ÏéDF/ÿ-ýöÿ˜½–t«„Ù(|O¥;ü+øÙ››OO¹;¡zkH³û/t?•ÁøMè1ÿ%/æm qd|›°'Yù”ìŒ/ΤÝÚ[K³'Î8<ïZ*£§©ïÜö?ïJSn<çúΘž žcß=» -ht¹®ÀÎPßK¹¦r;ºm:[2¡í÷Œ&Ay4T6ƒ¿ÇJ(4Ì—,”ãP)—¾ÞfT±Þô=ýÚ^µÄǺð2½¦{püwhYÍtœ?üq³"Û†¾^qîX1Ü/òÆ ÷ó:ÝÈø®û—/ú÷cJd< fÈõ÷ Å´ü(í¹2òfÈï*ÞL}ì=Ígïußu¼øo=¹¸úOhY”©¯fW³Óo‹í½&PIåo”îèê\:¾¼ŽƒŽ/¿q–ÃРëÏp4»Î †-7œO þ%ÃîéÆBD››ÒWƒÇÒé?ÕÛD.ÏÜðZoïÍæèм ´¾ÛÉËSt‡sTtöçN®ÇÒZý¯etöô>l¼5 Ÿ>“½ci÷rÿÍ÷ß?’ƒÈYÿ ìÓÁ¹ôZé_¸Ÿcú‡8‡•˜Í/·¸ÛËð iG¶ ÿ�¦e ^oGÒ?Xv­…Ñckµ›ÙfªYoÓkG:­xÒ¥3ÿ’Þ,lÏxÇîÁõ‹'ÒjŸÉ…ûo¼^kmÛ(ÜžÓkzÛ½„Ï`ß°ÿPÚ'ûñÝÛIw0œ)Þ˜_¦’e2!ëseâ×}rÐýÔÃ̽;öJ³éÇzpÕ<‘N÷+¯}Ú?õÕ|ãj6÷]6÷š@e•¾QêúËöW2Z˜‘ÕYÒvz¨N`³ ¾bo`ÓùWî-ØÃtO=¥š¾3ñ‚rÑ‹¥Ü@ß;5ÍÒ™Ö©Ïf[Ò^Çv\aÁ¬zósFfŽª¡Ì>0½~)½3C'˜.m{•aû+Ñ&¶™jÖ›ûÚ=7›”¾~<êïtÆ´w!“Ä÷eÛ(Öž:“ü…œÆD¼ß÷"“ &Æ1ªàdBññnÙäPðY"ýJÇí3÷ à\®‚ý¢w¦y¶¸Ÿô ‚‰©\ãj6öö]îkÿRîF©Ò9ʰ¾Ï;8–.„KÒì…if‰½mÙ!à- z»£„–¤‹“V¹ÈSþáÔì¼ÄO%ëg8Z>ó¨;Û}ûwÚI¢Ÿ­ZŸOÚØÜþºƒ_z­…Î 濳ź”W_3Õ¬7oF6²=ÄJdLóÝþ²°XmCß{ni+‘¤;™Œ~ -Ašò”¥á:ûse’erHÛ§Zâ¤U­Ç¡³´ í«]wœ¾Í9®f£ÿÖ{¯ TX¹¥žê]~± w:¶ÑŠœNôwHÉ>ÓtC¬ lY‚wû0º,H¥Î(ek7³œÿ6<” 393)¯è,¨»7Õ1è>eYRÀv}–¿ÍT³Þò[ÛÑ–ªP{êÔ1½ïðÁˆ.Ùx$ÈÒ;e:°ÒÉ„G)yæy®Œ2]Ñçoí¨ËVNî¯ ðè߯L÷o½§n_½YaLNfmßå²÷Ê@…•»Q¦4½ýEFÝñtbƒ”J(³í¬6ÅÚÀ–ʧ“ÿ–_tý©Î-¬Ÿ]r#cP6Ó¶Iš¡4H=8˜É~ÆÅ–òú@Òr ÿZ‚ÅSÿY†ýú,›©f½MÇçršùßoG[ªBíiœá÷¯Aj7~¸ö Â³Ê㸱d½®çÊF²–.{Ñ6ÒƒŒ ¹Öe+ññØoÞ·¿<Ñ¿BÎq5#kû.—½W*¬Ü2Xó¹0%¸Ò¾Õ‘³K½>]›ð©;=½ÜI$qMa–ÕæØØtÖåQô® ·cºÒj#—“;?”‡v÷wÁ _d³ÂNJé™ÓÎýzIŸÞ5à+é>‰®Í¶S[²³­€òú@°CÚÓû׆i™ÖgãâÛÜæ•¿ÍT´ÞôÌÕéãØ}ÐÝqRïÆÒíGׄoèÂÓu(Öžþ¬ñýýÞÝ1ÂéI³éþ®Ùò'sâí¢“9Ž×”Å/6Ó1q~ü¬ûšçî¾$¸à5×seáÏÌÏ/ÖôÚñïWÑ‹ÔÝ¿èÙŒÆ÷³ ¼ëö¢×ÌÆñP€Ï3®feoßå¾vð_�!åo”:h„oá¤ËT~ŒÞæéöw„nÖh÷å¹õg½˜;äÍ.c±ûÅ ú¬qï‹y]¹EO;…hìÜÿ½Ñ–þóû[émÔÞz;—з¤ÆKSãÑo<Ô[{=“—#=S$nA¾½œ†’}Ócܲô”ñfé{*OlÒ6Ô;lUÞN?\?ó:øòfäâ×øeÓßܪ¯Y¾ŠÖ[p˜ùõ3±mVTÍ·^ fýUjÛÐ×-$2~Ínø¿n¸Ö[¥ê:éÿ fÎgŸï@ÚýÁýí$#ßø9›e?öß¡qÇô÷¤çÊȰïz^{…neâ/iúU^yw$ Þ›öUgñyÒÇÕüôyl±¸×ªËæF¹+¨CÐò¡¾v í™Æ_˾¿°ŒPéÙ{K1m¶=0`0]uú@>Ô×n¡=“y72Ø}Z„Ý¥˜6Û0˜®Ž:} êk·Ðž1z]Î|™Ì¬D¿ùuqéT°Tsƒôum¡Ç�67Ê]A‚>õµ[hÏíd³Ýè1€ƒéêvºS.r[(E.”Úúù‘ÝnÔ—®NûB—pÙü,è&égÜfÉü.ÿâøÝ ŸÇFLÀÀæF¹+¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç� ¦«£AȇúÚ-´çv²ÙnôÀ€ÁtuÔ!èùP_»…öÜN6Û0˜®Ž:} êk·ÐžÛÉf»Ñc�ÓÕQ‡ äC}íÚs;Ùl7z `À`º:êô|¨¯ÝB{n'›íFbtƒ¤P( …RÏb ¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���«Dþ ÔUÁ…—����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9an_CAL.png���������������������������������������0000664�0000000�0000000�00000013423�15030617045�0023377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��å���£���-¤`¦���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¨IDATx^íÝÏkãV¿Çñ,úOxmº(¡›YySo²èl²É SHa(…¼è¢e†@iáCZxèÀ Z.´ÓMá!`nå n™oJB CÌ÷ê+ÉŽ$É’lùÈÖû‡6‰Ç?Î9:úèèHÞ����VÊ���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`Yé¡|ooB¡P( �`{l$”uÆ6PUjkú�lB9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� (B9P2¶ú ”�Š"”%c¨B9� ¨š‡òWâ´÷½÷)¶ô/Ær<Jä­LœÓÅÇ…Ë~_FooeÔošÿî•}i;¯‚ç\|íFw(7Á_㦓‘8ý¶4fovåü?Ž<=Ô× ”ËLFŽôÛÁëH»ÿ“üÏð©öGî'VßãÄ‘vè1~iJt_ƒu¦õz¨R[Óï�`»Ô<”+ ÒnÈ×îïN¤=ø=Ì]>ÛŽL‚çÞŽ¤ï…ãØséã½°®?h° å3ɰû@ZϞ˳։ Æo‚ßß›N.¤×:•ÁU8ßÈØéIsþüyÜɵӕNÿ¹ dzçœÊíØ‘n³!ûóP>³ü=z´öOÅ™:JØY„£ú ”�Š"”C¹kz%ƒ£Çâ\ß¿p•Êo†Òm»A÷µŒ'Ò\¹ñ8LÚÒþü¼úšGG_È5uÿÔ“ƒx(_ú„r£Ú„£éDFç]iºŸW?³_êÕªÔÖµéw�°#åI¡\Þ¸´ ÑáP>âÞ_yC¹‚­ ›Â²¾ÎAO†7Æ\@BðN”á=ÎÊêŽôàñHís¹º]W_Ý>„r�@Q„òÄP®³Z_íÒí~ýL^Y¶t$ÊMtYÈQh\>.Yúy%-£I’á=ÎÊj޼¶×³) K›j¢Jm]‹~�;„Pž7”§Î”Ç, Ô:뼞×Yé'r^²ð‹_.®O“3”gy3„r£ÊmÚ§B}çnr)çÝ–÷s£ãÈõ¬aoÇránó‹‹÷Òì:2Ï„{m~ßïK#y™“Át<–ûïí§ò,x/ZíoärZB湑ñpà]ÿà?®%ÝóK™d}±éûYÕ:žC­ëy��›Qú¨]ýCR(7„×p(Ï"5”ëò˜c¯~Êl©ˆJ ÿY ô`ã åN/÷2¾Çc(O>è© ­¯êѶ=•OçÒkuü» Mÿ§óÐo+ïÿ¥ë\¹-r{)g½—÷Á=½O%ñ—Ií·ÏäbvññôZ†½£h¸÷~w*ÝÁp~p0õ*Ž¥ãü‘ù  ,ëhëuõ—jö;�@’ÒGíêïB£J:‹KIÖÊõBÒÖÜñå!ú³¾¿×ÁÏ!C¹«~+v«Iæ÷ ”Usθ4?—áÂL´ä/äÔrõß¹}'ÒÆz�û(×Ìø"=Hx²Ð§¢g«ô®AOåÌ´-¤]ë°A„r�@Q¥Ú[ʧ¹<{$¬·DL’ʽÓõ ÓœþòVÿrþÚÞ-ÛOę߾Ð7½v¤sP ”»¯q{u.NtiÀì^èûÁ†<ïÑC(7ªä6°°,)Ä;›- 1•2ÚØ=Ðë=½ŸØÙ*}_§çæàM(_°®ç�lFé£vµw ‹ë³½’ñ˃’ÖrëìÞ~ì±á ý{Ê …�üSô÷kmý/ûqd´0Ë™•Þ—|(ƒðs6»2x9òÖææzzð1¬©Ôû‹„´ªÆ;àJ:ÀÌ{Æ ñbA='}͇ñP û)ÅúyŽVZ>³ëhëuõ—*ö;�@²ÒGmv ¨»êm)몴i“uÌR»»³ªcKe4”›®e¸ý]îòåX@(�Uú¨ÍŽuW½m@g S¾*øÆ×øò-ïn,=y2¼Ž„ùÕg©ý‹<_ZYž¥×2´¤}ökp§•;™Œé·¥{O¶Ê�E•>j³c@ÝUfðÖü›–¹eaZïwÑÛ~ -—J¹3ñ:„$ÑåPó%aá%Qá%+±Û46Âwk©�}O«ZÇs¨u=�`3JµÙ1 îØêƒP�(ªôQ›Ã&$\°j(ù¾hë õŽzXG[¯«¿Ðï�`»”>j³c@ݱ Ô¡�PTé£6;ÔÛ@}Ê�E•>j³c@ÝÕmðîî~fýÜËÊ®-§ÒÏ´ªu<‡Z×ó��6£ôQ›êŽm >å�€¢JµÙ1 îØêƒP�(ªôQ›êŽm >å�€¢JµÙ1 îØêƒP�(ªÔQ[w  …B±S��ÛƒQ(á¨>ÖÑÖëê/ô;�Ø.ŒÚ�P!„i�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1ú@…Ê žý Bå�POŒþ�P!„r�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1ú@…Ê žý Bå�POŒþ�P!„r�¨'F�¨B9�Ô£?�T¡�ê‰Ñ�*„P�õÄè�B(€zbô€ !”@=1úñÏ?ÿÈx<¦Ô¼Ê žý Ð@~rrâ2 �P?Œþ@|ôÑG^Ñp��ê‡PXöõ×_Ëûï¿O � Æå€E³@þ矿��uD(,ùùçŸ ä��ÀC(,øõ×_½ úô¿���„r`Ãä�� ŽPl.UÑ%+ºt��`†PlÈ,ëÅ���a„r`ôv‡r��„P”LùìË���Lå@‰Âœ/��Iå@‰t¹Ê‡~H ��©å@AŽãÈßÿü´ˆoë��YÊfnž¿‰ÒÀN ��Yʾÿþ{ï €´ŒÇãà·¾Ù—ýöÛoÁo���ÒÊœt–ü½÷Þ›‡òÏ>û,ø ßÖ ��Š!”9éÒ”Y Ÿ-ÿá‡ä�� B9Ãl-y<”üñÇòî»ïÊ'Ÿ|<�� ;B9ƒi–|V>øà.ì��…ÊŒ’fɵ¼óÎ;óÿ×/ Ò%,Ü›��dE(2J›%7 ðz¯rfÏ�À2„r ƒ´Yò´òå—_¦~Á��€"”Ìnu˜µèWësŸr��¡È@C¶)|›Ê·ß~Ëzr�� ¡X"ë,¹^àÿvO��€,åÀËfɽ‹@��Š"”)–Í’ëWìs!'��X¡H‘4K®wbáBN��°.„r AÒ,¹Þ{œ 9�À:ÊñYrý™ 9�@å€A|–œ 9�@™å€Ál–œ 9�À&Ê%× 9õ¿���›@(bô®*á¥+ …B¡PêUl ”¶6È]B‚>õµ[hÏíd³Ýè1€ƒéê¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç� ¦«£AȇúÚ-´çv²ÙnôÀ€ÁtuÔ!èùP_»…öÜN6Û0˜®Ž:} êk·ÐžÛÉf»Ñc�ÓÕQ‡ äC}íÚs;Ùl7z `À`º:êô|¨¯ÝB{n'›íF LWG‚>õµ[hÏíd³Ýè1€ƒéê¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç�Û7˜¾•‰sê½o¯4z2¼™³c·vH¯ÄiïÏë·ÑÊMð$«^¸“Éè;é6ó¶ÜÛÛ—¶ó*ø»o:¹”ón+ô·´™/‹¾N5U»ÞªJ?ÿ:½õe_ët¿/£·Á/3šŽr´Éqkz%ƒ£'Ö÷CE¬»ÝòØ¥½&°667Ê•MiW`G¸Õu˜H~/„˜U«Låvt&ÍFGW)ÑäöRúÍCi~—ÛàW›RÍm¦úõVU¥´§;¾wr‡ë©Ü {ÒØä~áf(ÝÆ©8“œG`s;ÜŽ&°²m”:›rعñÑ®m®Ãd·2ê·¥?"vdQ­> m×’ÖàÊ(ɼÙÈÖ@Æ&øª¹ÍT¿ÞªªŒö|ë =\Ò‹ÞÈxp²´ ×Igæ[[Úln‡»¸×V¶©r:‰ã†¼†ûzúš{Í® =é„ÏéDF/ÿ-ýöÿ˜½–t«„Ù(|O¥;ü+øÙ››OO¹;¡zkH³û/t?•ÁøMè1ÿ%/æm qd|›°'Yù”ìŒ/ΤÝÚ[K³'Î8<ïZ*£§©ïÜö?ïJSn<çúΘž žcß=» -ht¹®ÀÎPßK¹¦r;ºm:[2¡í÷Œ&Ay4T6ƒ¿ÇJ(4Ì—,”ãP)—¾ÞfT±Þô=ýÚ^µÄǺð2½¦{püwhYÍtœ?üq³"Û†¾^qîX1Ü/òÆ ÷ó:ÝÈø®û—/ú÷cJd< fÈõ÷ Å´ü(í¹2òfÈï*ÞL}ì=Ígïußu¼øo=¹¸úOhY”©¯fW³Óo‹í½&PIåo”îèê\:¾¼ŽƒŽ/¿q–ÃРëÏp4»Î †-7œO þ%ÃîéÆBD››ÒWƒÇÒé?ÕÛD.ÏÜðZoïÍæèм ´¾ÛÉËSt‡sTtöçN®ÇÒZý¯etöô>l¼5 Ÿ>“½ci÷rÿÍ÷ß?’ƒÈYÿ ìÓÁ¹ôZé_¸Ÿcú‡8‡•˜Í/·¸ÛËð iG¶ ÿ�¦e ^oGÒ?Xv­…Ñckµ›ÙfªYoÓkG:­xÒ¥3ÿ’Þ,lÏxÇîÁõ‹'ÒjŸÉ…ûo¼^kmÛ(ÜžÓkzÛ½„Ï`ß°ÿPÚ'ûñÝÛIw0œ)Þ˜_¦’e2!ëseâ×}rÐýÔÃ̽;öJ³éÇzpÕ<‘N÷+¯}Ú?õÕ|ãj6÷]6÷š@e•¾QêúËöW2Z˜‘ÕYÒvz¨N`³ ¾bo`ÓùWî-ØÃtO=¥š¾3ñ‚rÑ‹¥Ü@ß;5ÍÒ™Ö©Ïf[Ò^Çv\aÁ¬zósFfŽª¡Ì>0½~)½3C'˜.m{•aû+Ñ&¶™jÖ›ûÚ=7›”¾~<êïtÆ´w!“Ä÷eÛ(Öž:“ü…œÆD¼ß÷"“ &Æ1ªàdBññnÙäPðY"ýJÇí3÷ à\®‚ý¢w¦y¶¸Ÿô ‚‰©\ãj6öö]îkÿRîF©Ò9ʰ¾Ï;8–.„KÒì…if‰½mÙ!à- z»£„–¤‹“V¹ÈSþáÔì¼ÄO%ëg8Z>ó¨;Û}ûwÚI¢Ÿ­ZŸOÚØÜþºƒ_z­…Î 濳ź”W_3Õ¬7oF6²=ÄJdLóÝþ²°XmCß{ni+‘¤;™Œ~ -Ašò”¥á:ûse’erHÛ§Zâ¤U­Ç¡³´ í«]wœ¾Í9®f£ÿÖ{¯ TX¹¥žê]~± w:¶ÑŠœNôwHÉ>ÓtC¬ lY‚wû0º,H¥Î(ek7³œÿ6<” 393)¯è,¨»7Õ1è>eYRÀv}–¿ÍT³Þò[ÛÑ–ªP{êÔ1½ïðÁˆ.Ùx$ÈÒ;e:°ÒÉ„G)yæy®Œ2]Ñçoí¨ËVNî¯ ðè߯L÷o½§n_½YaLNfmßå²÷Ê@…•»Q¦4½ýEFÝñtbƒ”J(³í¬6ÅÚÀ–ʧ“ÿ–_tý©Î-¬Ÿ]r#cP6Ó¶Iš¡4H=8˜É~ÆÅ–òú@Òr ÿZ‚ÅSÿY†ýú,›©f½MÇçršùßoG[ªBíiœá÷¯Aj7~¸ö Â³Ê㸱d½®çÊF²–.{Ñ6ÒƒŒ ¹Öe+ññØoÞ·¿<Ñ¿BÎq5#kû.—½W*¬Ü2Xó¹0%¸Ò¾Õ‘³K½>]›ð©;=½ÜI$qMa–ÕæØØtÖåQô® ·cºÒj#—“;?”‡v÷wÁ _d³ÂNJé™ÓÎýzIŸÞ5à+é>‰®Í¶S[²³­€òú@°CÚÓû׆i™ÖgãâÛÜæ•¿ÍT´ÞôÌÕéãØ}ÐÝqRïÆÒíGׄoèÂÓu(Öžþ¬ñýýÞÝ1ÂéI³éþ®Ùò'sâí¢“9Ž×”Å/6Ó1q~ü¬ûšçî¾$¸à5×seáÏÌÏ/ÖôÚñïWÑ‹ÔÝ¿èÙŒÆ÷³ ¼ëö¢×ÌÆñP€Ï3®feoßå¾vð_�!åo”:h„oá¤ËT~ŒÞæéöw„nÖh÷å¹õg½˜;äÍ.c±ûÅ ú¬qï‹y]¹EO;…hìÜÿ½Ñ–þóû[émÔÞz;—з¤ÆKSãÑo<Ô[{=“—#=S$nA¾½œ†’}Ócܲô”ñfé{*OlÒ6Ô;lUÞN?\?ó:øòfäâ×øeÓßܪ¯Y¾ŠÖ[p˜ùõ3±mVTÍ·^ fýUjÛÐ×-$2~Ínø¿n¸Ö[¥ê:éÿ fÎgŸï@ÚýÁýí$#ßø9›e?öß¡qÇô÷¤çÊȰïz^{…neâ/iúU^yw$ Þ›öUgñyÒÇÕüôyl±¸×ªËæF¹+¨CÐò¡¾v í™Æ_˾¿°ŒPéÙ{K1m¶=0`0]uú@>Ô×n¡=“y72Ø}Z„Ý¥˜6Û0˜®Ž:} êk·Ðž1z]Î|™Ì¬D¿ùuqéT°Tsƒôum¡Ç�67Ê]A‚>õµ[hÏíd³Ýè1€ƒéêvºS.r[(E.”Úúù‘ÝnÔ—®NûB—pÙü,è&égÜfÉü.ÿâøÝ ŸÇFLÀÀæF¹+¨CÐò¡¾v í¹l¶=0`0]uú@>Ô×n¡=·“Ív£Ç� ¦«£AȇúÚ-´çv²ÙnôÀ€ÁtuÔ!èùP_»…öÜN6Û0˜®Ž:} êk·ÐžÛÉf»Ñc�ÓÕQ‡ äC}íÚs;Ùl7z `À`º:êô|¨¯ÝB{n'›íFbtƒ¤P( …RÏb ¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���Ëå���€e„r���À2B9���`¡���°ŒP���XF(���,#”���–Ê���«Dþ ÔUÁ…—����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ao_FV.png����������������������������������������0000664�0000000�0000000�00000010004�15030617045�0023304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��°���Ž���É«;B���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��™IDATx^íÝÁk×¾ðþ^{èÂtséÂ+wáE»ñ¦P-LÀ‹P*È¢PÈ ]R.}ð  H<xpÞæ¦à]ád‘Eð®4Á›RJ0´„`ÎÓo¬±GòH–¬‘<c}>p –Æ£#k&ýêÌïœù �@ƒ°��4Š� �@£°��4Š� �@£°��4Š� �@£°��4Š� �@£°��4Š� �@£°��4JmìÈÒ¬7çÀúðY,¦VVÓ4M[}hšZXXgÎõQ§ÏÚq4‘� 5áX,ÀbX¨ çÀú`#ÀBM8Ö‡� °jÂ9°>X€Å°PÎõ!À,F€…šp¬`1,Ô„s`}°�‹`¡&œëC€XŒ� 5áX,ÀbX¨ çÀú`#ÀÎä}:îd}mwR«ó¯ttrzÅv…¶ÙIý÷ƒ-û´Yö|ÞZ½t<iŸÒáÛü5Çœ§~¯“Zùö;©ýä§Ôû¶•:ý“áF3:î¥Vñu/µíÔù÷aêl;ï÷¯©×ÚÝvÞ×_3ñwb=Ôé³vÜM$ÀÎ!BçV§?ˆ”¹ÓtÒœvZOÒ«ó;Áï<ȼï§ÎÖE€½ØW„½Ý‹€Wúû§éíჴ±óÔûáó´Ó}5xdÌé›tø`/µº/ÓETôñ¨—ÚÛ;× Ñ·û©w|ñ®Ïœ¤~gŠOI½ýýÔ=úkøÜ…Ó£nÚ™¸9·6A"¾d=i§íÁû÷|ÖJŽ±Û«NŸõÚwÀ­"ÀÎár€ ¥£î~Úïýr(—`K‡í¿eÁõ}„Ân:É„Ã0Ý>Lo‡Tc†�›…ë¯Óî¥P›½´QyŸn§õ Ž›Ý´1þ¥oͰ�‹`çP`‡£ŒÅÀY  …ÐZ4w€}{˜Ú{ÃQγc#ž(÷Rûð·áÏU)Øbhsò<uv¾i=}•º;[BŸn§µq>læÇñú`#ÀÎaR€½R#€ÞO¼§¬ ë^' °—œ•lžd–x^µëŠýÎRË£­#aUùÀ|êw>û8†ß.ýoÜK½7ïÎ6;9J? ¾Ølœ#i»Ý+Ô†dÁ5¾Ø6ÊËa&ɾm ^ðEê‡BÂàçÇÏÇöó6vS{{°}¶]Ôƒ?OÇ58£?uQ§¾�ÌJ€Ã\öŠØQW…ÏqÝÉŒÙÝbÁø>J&]¤ËÄ~gÈëyiÃEÉC òB#ÔõˆÏu÷?~HÿŒúêlÒâ_éMï^ºçBVÿ¼—Ú½Wƒ££àäyzüàÇôfìÃsè΢%%qìoŽÃŸŽ†¯ù.~“¶‹e5Y=øà U÷ð<HŸ?OOÚ{£å>7¤NŸu];€iØ9L °ã—üËJ�¦š`³`ôR+^Š.§ÏéŠö*…Ò†‘’fQÏs ÿ"´“¾ ~q%àïé 4–7±¯{ ©9=z’Æ÷1òEñÝ `›÷ÿÈžqé‹ßͨâ³~øðaúæ›oÒÑÑÑð‘ë©çq0�;‡ò�ÿ³¼?z9¿Ò�;i"ÔxÁÙÏ;ç£#a™UؼÿNo²n>(4I=Ï’Ñÿ\~9Ðïò6¾²À"Ça.ޱoaz¬?Ås.úuð¤üØ»EöåË—éûï¿Ïöu÷îÝôóÏ?Ÿ™O}X5v—ì»tüü?ÓþþŒËhM4%ÀN›ÿ3Þyœúùkç—MÇ/çf—y?[A€ˆþîî¥Öç[ÊæTËs ;þî•þ3•ÇLÛ×Ì"ß¿4²?rnN9ÿ²rˆ¬ŠQågý矦^¯—>úè£ôé§Ÿ¦gÏžeÍJ€šH€É¤Ìv#ƒÍ²²ƒP:±e3µz¿–?þ?åñ×)Œt•¬±¹Ñê¤^|‚Ë "ö“µ+ëhÏFŒG&ù0“øûÖδËi#e*ý|¡Úÿflb`œ÷/Λ8nËFÿO^¦î~»Çå2>ë­1 !6Âl„Úßÿ}øìdµ<î�® ÀBMÔñ˜>é*ÊgÚiäÆÙªÒ×c5³•Œ~F¾3þ%*Êö WâçÔzüópÅwé¸ßKÖ^IïÍXögAö«¯¾Ê^'Ê ^¿~=|æ2ÿöM$ÀBMÔçˆËôÛY.·ñ‰yÿ{t©ªîÿ¥þq>Ê9‘¿´ŸA›k‰µ±«çW¢Ä%_æ­p%bli¯ÖãôÓÑM\ˆ>­BLðÊëd#ЖMøZU_�ª$ÀBM8ÖǪ?ë(%ˆ ›×É'|9î€&`¡&œëã¦>ëñ _ñߎ; ‰صR¼Ü:½MœxÆÒÄßõP‡Ï:Ÿð}yúôéL¾�êB€…šp¬:}ÖїℯEoŒ�° ,ÔÄÚÙº°Ón„Ph׺ r}Å{ª‹¼/±RAqÂ׋/²ÇêH€…šp¬:Ø\”DIAÙ„/€º`¡&œë£Î6—Oø*Þaž;|,“� 5áXM°EÅ;|E™ _ÀM`¡&œë£i6¼Løê@€…šp¬¦ØÜø„/u²ÀªÕâ_ÑøGPÓ4M»™v]QJP¼1BYu²À*ò`!ZŸ={f°2,�•‰QØ»wïf#»&|Ë"ÀP¹â„¯G™ðTJ€`ib6Ÿð#³&|U`XºüÆù„¯¨™U' \—� ÀÊDh-Þ!B­:Y`^,�7"‚lñÆ‚,0+€¼b¢WÙ´&|W`¨…ℯüÆ�eX�je|—#�ãX�j«8áëéÓ§êdŒ� @í½xñbdÂ×ëׯ‡Ï�ëH€ 1b‚W^'k¬/€ÆÉ'|åu²&|Áz`h¬|ÂWñÆ&|Áí'Àp+'|¹1Ün,�·JÔÅ'|©“…ÛG€àVŠ• оb%àv`¸Õ¢” Ö-NøR' Í&À°"´>{öÌ„/¸X�ÖNŒÂÞ½{÷¼NÖ„/h€µUœðõèÑ#¾ !X�Ö^~c„|Â×uoŒûq›[X>�†"€Fml>á+jfç©“•âw…XX.�Æ”Møš¥N6¶‹QÜhno Ë#ÀÀD‹7F˜d‹6Zü TO€€Ä¯˜èÁ4mÙ„¯¼Ž¶Øâ1ËuAµX�˜CqÂW,ÅU,ÈGjÇ[l'ÄBuX�¸†¤ù„¯?þ8=|ø0}ùå—¥6ZÔÓšÜÕ``d¿ûî»ôÉ'Ÿ”×bÛÚÚ²Ö,T@€€EˆÍïì5K³B,F€€Ì^óöôéÓá€y °�pM^÷ööJê,-V5ˆ}�ó`à"x~ñÅ¥Átžf…˜Ÿ� �×ßààÃ?, ¦ó4·Ÿ…ù°�° AÕ"ÔÆÒZlç­‹ ^¼x1Ü#0� �K7>ˆpÁ6&nE¸ײÍ p5�nHÛupºòp›ßé (çì�€™Õ´e´¦` †š.h�¨”�˲ °�@¥X–M€�*%À²l,�P)–e`€J °,›� �TJ€eÙX� R,Ë&À�•ªo¸ø-¶·ÒFû0½>B3 °�@¥n"\œ?OOÚ;ÙkŸ·V/ŸÏœ¾JÝÍ´Ó}•N‡]xŸŽ{¿»ñ ¾½¼Õ`£Ô:­Ô>ümøÄMš±ï·H¼Ï¦` †V.Nž§ÎöVju_¦“áC ‰:~/ù5õZ÷Sïøýð皘©ïÍ'À�•Zu¸xßï¤Ín:ªhÐ1ö·Õé§©Ñô}?u¶:©_³ü:Sßo�¨ÔªÂE\¯¯7ÚöR÷è¯áVcÛ]yyý¯tÔ=¸²4àô¨›v¯UKûß+ôõ`8Š#º›oÃñéqêÿø?©Óº3|n'µ{¯&Œ4OèûyÙÃÅß%ú¿“=¶Q(©8M'Gÿ*¼ÖU¯ws¢oM%À@ ­6\œ¤~go¶ZÔrWŽÔÆD¯ƒ‘�|Ùiz{øuÚ-­¥Eüþƒ´y)�ÿ1x/ŸeÒÏÓv»›†[fu¼÷&”.Lé{Œßï±ý^êôÏâéé›^Úßyzùke¡¶ÿ_éAï—k¾×å`€J­6\ÄÈeëŠÀy&Fbï\5jq÷ëJFi§ÉF@óQÖ¡ì±íÇ©2åµ§õoÊsÙ¾Ë&µo?³áõÍ»³çŠjXW+À�•Zi¸˜¹5Bg+µz¿ž`U¸²‘ÔÏ/‚÷é/©·ÿyêôÿ8ûyàô¸Ÿ~ì¶ÓöàïÓó6©û>aĸ0"}QR0¡ °•` †V.JGK^.Ÿdu¸¢?ÛÃ@ý.½éÝK›û½ôf˜0³Ëù;©Ý=LGç#²ÓK&÷½lÄø¬ŒáÎpû™Þw°�@¥V.æ¨E¹4àêQÚÙCó4gk·f7UˆeÀvî.ßG?öÓþ¥ºÓ)5®Sû^Vf1jOž¤ƒk×ô®ž� �Tjuá¢ldq‚·‡©½[‡ \² ¼y?uþþYÚî</Ìô_ïÒq¿w¶:ÀÄU¦ô=›Àuï< _”&Vkˆ†ƒû©ûjlW¬JÐî¤Ãã’ÚØ$À�•Zz¸ÈêG7²×o·‰»;ÕxËW#ˆ:вç³6a‰«‘¶yu]í$,7û(›¸uò2u ËYm´:é;­´‘ý¼}V 1SßÃÛôª»?üÝAÛn§î?;©µ1¶],Ùõ¤PsÛýØOÇ‹&õ%ˆþ5•� �5ÔäpA3°�@¥X–M€�*%À²l,�P)–e`€J­S€½ò�…¶Ù uVë.þžM%À@ 59\Ð ,�P)–e`€J °,›� �TJ€eÙX� R,Ë&À�•`Y6�¨”�˲ °�@¥X–M€�*ÁBÓVÑšJ€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� QX��E€� ARú¹e¦o‘‚����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ap_VG.png����������������������������������������0000664�0000000�0000000�00000033772�15030617045�0023327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ï��G���$¢O���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��7IDATx^íÝ¿kÙ»øñt÷/¸_PíæîÂ6 T©q±iܤP!.R˜»°-6l!0„|àB@à,\XŸËÆ >MàƒA/¤0ê–|YÂb »#žï<£9ÒÌh$kì‘æœ3ï »þÙžgæœçœóÌÑ���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Qjòþàc€û ˆ3�  ¥'ïÕ��ÿ•ž¼uÇ}P6Å™k�êƒä(÷A=¼�ª@ò”Œû HÞ�U yJÆ}P$ï�€*¼%ã>¨’w�@HÞ’qÔÉ;�  $ï@ɸêä�P’w dÜõ@ò�¨É;P2îƒz y�Tä(÷A=¼�ª@ò”Œû HÞ�U¨Qò~#“à(úÓǾ´û¿Èøz_hH{éû’GSú£ëð%GÒßËûº9Ž$˜Ü¬x͇Òþ>ûÚ’/2ÒoïÇßÛf÷'ùWð½<ì¿dCÙ߯È$úÂo´÷Ÿ7šNdô¥Ý0_kI÷ôL‚Û‹ïÁZzÞà?›âÌ5�õQ£ä}æfÔÏ$ÀS¹H«}*É>JpÉ÷ܵŒúq"«ÉñþŒ¢o™ ö毽âß_ ¥Û8”WÁ iµ2NþÈH˜¸¿_þ}®/$趯¿¡é¯t:2ÿba:H«Ñ“áUüs¦—2ìJ{ð1ü+ðüŒé6[$ïªK"5œËixMêß;?æDÿÙçº\s��’÷Ø_2t¤ü¦ªÆ6’÷i˜»÷¤¡IûÍ… Z—“êësé·ž-ê{ÓŸùL‰¿Méß|(îP®¢ãAÌücÜU-)½N›3½z!y�Tä=ÍB§f “Éw"aO*œ¼ÿ.Ãî×ÒŠéü¤Z¿ý²è¼ÁT_'Jwôo<\SʃMÕ!‘Òët/wå¨>HÞ�U y7R‰¸Òä{E]x®lòžCKföe*úñA2Úà5îDgÙR‰ùRÉLô÷PS»îƒÙ5µ¸†?Ëdô“t›ðãýÄjÓ•ŒÏNÏ:„G³'Á8=ŒŒ’vóõÔq˜[š•o¶ê3{ÞäEü»èk„Ÿ¼—Ij@ e[CÌËsfÏŒ&_â¯WGŸ2”ñ:eý.��û•Úâ»ÐKÞo™yO¹-ñž•Ìì¥fÕu&þ(‘ôä¼ÆÒƒ®· "òEÉú|¦4¹`d“÷dÒ{ÉóƒUô\YGWZ¾•Á›gÒjŸÈY˜”O/éìkL¿Èep,­n~p[þÑÉ\få2Viôl¥ŸNΤ×L–’éó?H»;¡DèÕ§]iu¹L%ù»WVœËx+¯9�ÀV”Úâ»Ð¬LÞ5I^Y6³‰[’÷¨LÅÌ0&F*‰^ùû…Ö}ív‰BüÐlz¦tÝ�e“Á +ïƒhØfï,3³ ¯‡ÞQ^2¬×ô±´ƒßâ ½7ÚfÚsèýptš)»I_gÓË·Ò;9?›•ôV£¬8—ñ:V^s�€­(µÅw¡ÉO€g3éúór“÷å2•X¶tF?nÈ(5:s¿ä}VcßêÿK.ÍC³©a¾ž—,‘¼aß}·êc˜–ì Ò{ËÉûÒ*Õ耡—ý}’÷œþ^ÏV$è$ïYeý.��û•Úâ»Ð,'À_drþ7ét6Ý*r•uÉ{vg—$MD41þ#þØ” dKt€ñTö‡¢Ò‰Ci?~˜)™‰E[EI7¸H'ðÑv“HÞ7dß} ×_;g]˜-?Ü]ÜÍèDe¯ÁÔ `Íý]ÇeîÈt7$ï�€*”ÚâÛÝäÔpGdžoÒ´²Þ[“Ÿfú{õ˜'7Ù¯¯zã¦ä §¾I“y¨0þz#L°‚ÑrÉC!ñ,kãiNs,®)nίÒh÷%M–“}äÒsf—u3Õëf¸óäï’TŒÞ‹ÝåšùTéÚªÒœ+¹ËQj[×j”ç2^Ǿk�°-¥¶øt €…÷Îhïç”lÅôÁÕ£¥•'Ý}æ…tŸekä5ÙOï\Tœ&3³ý³ÒžÅÊR\êÓþ›œÇ;ËL'# úiåÕíW€ä�P…R[|:Àžû@KÄò·uL?$­Òï–ªÛ1¾’·ÉÕ–•\?XQ¶BjµÉ윔\K®@e¶¯ÔÕ§³qº¤«Bú;•¡Œ×)ëw�دÔŸà>¨ ’w�@Jmñé@� y�T¡ÔŸdV=x›sð¦J•Ðsÿ•ç2^‡k�ê£ÔŸà>¨ ’w�@Jmñé@€ºÝñö£áß|ûaPõƒþMe(ãuÊú]��ö+µÅ§¸ê‚ä�P…R[|:€û .HÞ�U(µÅ§¸ê‚ä�P…R[|:€û .HÞ�U(µÅ§¸ê‚ä�P…R[|í@88888v��ê�*Dâ �(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^�*Dò�(‚^¨È§OŸä?ÿó?£ä£Þ��›¢×�* ‰ûW_}%/_¾Œ?��p;’w`ÇHÜ�À]‘¼;d÷ï¾û.þ ��ÀæHÞ1‰û“'OäÏ?ÿŒ? ��°9’w`>þLâ��îäØ2MÖ5i'q��÷Eòl‰;��(É;°%$î�� l$ïÀ¸�€m yJfw}@UT��( É;P€&æëöhO&îº5$��@™HÞ‚ ÈÿþïÿÆŸI#q��ÛDòlHgÕÿã?þ#JÞ›ÍfüÙ…—/_’¸�€­"y6¤É¹&îæxÿþ}üw��°$ïÀôÁÓdâ®Ç7ß|}MkàIÜ�À.¼Èκ›ã¿þë¿äßÿýßåãÇñw��lÉ;p QÏKÜõø·û7yõê{¹�€ yn¡e1y‰{òв™×¯_³¯;��Ø*’w`ñxœ›¬¯;ž?žz˜�� ,$ïÀ›Ìºg…'y��Û@ò¬p—Yw}°•úw��°-$ïÀ ºd^‚žwè =[E�€m#yrhÙK^’ž=4ÁÿðáCü¯���¶‹äÈqÛ¬»ÖµA@‰ ��Ø)’w ãÝ»w¹ »9´®-!�@HÞI×Yõ¼¤ýÉ“'ÑC¬���U!y´&›´³õ#��°É;ÓY÷‡¦w}×TêÚ�€-HÞ˜&ê&i×­©k��¶!yBš¨kÒ®»ÌP×î€î‰âôœié$‡¿‡/ïÇÂÝ „’³îõ=ò’>÷ÝtBã«“tº«œË«ë$ï@Loj¸‰ØÙíç»8=gœ7¿éÌ»NÖ™÷ryþüy´!…k϶q•1mw;û£Ýâ|§çŒóVúîèú¾-sÝUNÿß•²Y®R F£í.bg?b´[œïâôœqÞêGgÝuö]7ªÐøë¬¼ÎÎÛ\VÃU Äh´ÝEììGŒv‹ó]œž3Î[½i®õð¦¬FëäõcÛÊj¸J¶»ˆýˆÑnq¾‹ÓsÆyƒ¡õñf6^­·e6ž«ˆÑh»‹ØÙíç»8=gœ7¸PFÃU Äh´ÝEììGŒv‹ó]œž3Î[}¹ô�+W)£Ñv±³1Ú-ÎwqzÎ8oõâêÖ‘\¥@ŒFÛ]ÄÎ~Äh·8ßÅé9ã¼ùÏ<”êò›6q•1mw;û£Ýâ|§çŒóæ/Q×™u±–Å茻μ»ˆ«ˆÑh»‹ØÙíç»8=gÖœ·é… žÉðj÷afÙõÐYv×qw1¯;»I í¸ázðà¡t‡¿Ç_Èp´ÃØEì¦ãt‡rl‡©\ÿ)Að?Òo·VÇÕÛÑ_2Yx®d<H·Ù˜Ý¶œœOÂÈm—×íÙ–ÌÚGKÎÛÕPº# &7ñ'p_úð©ÙAÆ¥wSÍÃÝ ÄêÑÙý&Aûxu‡àh‡±ýØMÃSÓ“F;Iü™êý.Ãî×Òì¾’àìô[O­ŽÛöc¤ç£)íà·øc\ÉÅàX:ý@F“/áÇ:Ø ¤ÛÚþ�¹íY¹ôœÙrÞt² ÕȘ‰÷Òi©ŒÙUF“yÝeÆ5ÜÝ@¬ÝÍHúû2Z‘ã¹Úal?v:«ûXZƒ‹­Ï˜Þ‰ºöWÇÕ[‘®µË`üWü‰êå¯Ö\˨ߖþè:þx;jÑž•LÏYåç-š@™ýKGvò`:‘Ñ[]uÛ¿§%Ýà"¼Â’®d|v"íø5íùåì•t¢×¬Â¦hûw~ÿ¾´û/«HúñÉ{™8:ÀÐTµî]ëßõ¡U­‰ww7ÓÆÈÊ뱜…‰@#úº iv_ç·¦+K?ŠtÒßs;â÷ì9‰Ž½Ì,þ!oæñÈ‹…μþ²èla÷Ë?dЙ}ܸcYŽ%=iú÷m‡Î¸?œÏ¥#³Š´³dgý}¶>ÈÐßŘë¦z›”€Í&šÝ Çñ `+pÓKöÃ~ä—¸Ò6ê§°OÙ»ÃD„^·­Äkéít&½¦]æ»Ðm!ƒ ˆxMäõÿÙ*p„]Ý åôW :‡ËÉÇõ¹œôÞÊåRˬ‰è39XÙhoÒaØië±ÛàY€hÕ¢Ù•ÁpÇCÏg;‘à‡çð{i…ÉàYÜÙN'çrÆùÁ½V;nd<µwU ¶íÝ>€Ùu²“G¯¾t3†òmã|ÏÚ †<h~/è hCÑy ¯óp°Ô^8³{¦©áÞÙÖgxõœÙÑÜq€—j§´½ÿAŽ‚_3ç[Û‹ãâåeúÚG§™vj7«H»¤³ï&‰×Ò[·´)[*eG£»µ¡\Õ0«Uuí·%ç»™܆­ÇNW&Š&Ø™ó¾Fï(XTéÃÄ÷ZÝp£ÝnŒn˜®°ÍdgÉ•ŒƒÒ_šéߎòÏ·ž‡£èu—Wn‘|`¾Ðµ®mÙ^ü3·ÿ,ÎìçXФ®Ë|ÓÉHÞºáÀ&>¯æ0çW_ãÑIN)¶KÇÅÛ m¿zÙÁñ-ÏP9Ìö‡[-ÊV€jYÑh·5”Ú0·L9MÞ‘×ÑÝÒÐnÐaØJÿæmºuV7*Çx•(qÊÆau‡©¯ý¨? S£;Š®»VUÛÑmS ÑŽ“¤ðú8q"§«×ʶóÍÌûŽè`gÍjÜô2N£%ÝÁ0Q–—ÀêóMò^C'iº…Û‹›Ñ‰<ÊŽoy†Êš´ë,¼^Zo ‹² ZV4Ú±[Ê»4š·ý›[: ›m7v·”¥DåKÓå*5[¯³ãÇ9«Úá~/ûÌêÞiU`÷¶#˜¶W®U‘ìÌ]”Óþ@΋$»%°©=s…ž3ÎÛͨ/û+' t0Ù ÛŒì QfåT¯çý^f2FWzÒÜ+špkØ]ß{ÕÐ^Z.cv¤Ñ=âm{˜•»ˆÙÓÙmÐPê,áRYÍzQMöš†v}‡a·íÆNïÕ³ºÑ¬|'[“-ãÈ{xÛÀfë^³º·×zÛa«1ÊMTŒ*’¥ñ}+ýþÛÄ€awìiÏÜ¡ç¬úó6›,höÏãòªÙ{9èƒðûÑ ]v•IŸËfa7’×ïa›óXÚæùŠë º-i4›òuá„[ï•ÃL;¥m\/þü‘,—Ñwcµu/xîn fOg·ICùE.ÿ“}ð-Ú}¦'Ï––¦³ÉdÖm†Ý¶;ÕÕxü&tßÃÎòQ£lò¬åAxÞ©IÂó9: O§r%rqRØøZš_ß§äå–U‹l5F:°mžÈÈ$Éá}0|Ó—v´}fÉN~}ûmè2ÙÓž¹CÏ™çíú£ æ;"éŽG}yóv´(ÊùúÏQ›£7}G| ϾOw/ûE.F¯Š öõÞŠÎ⵵ݹãó–råAUƒ»ˆiCT¹B ¥&!º†©³Ö²€¿Ço£4é4{eœ÷¶ÃbúûnO˜x_œÎ·œu‚ÿ#oGæ]2õx:‹í$uûÇŸÃÄ1þþ½ùà'NØãïÓ-Ï.þu§ç t•dÏü¼Ôaïléï·=91xóްËd'%éñÏÊwÝ´(ýY(ÆÄÈ_î öwÁliöywa‹Hƒ»ˆÑÙ¹ËÙØé`­&ï¢èfŒÜMvhÏŠÓsæïyÓÕT}wßc .wûü…m’õ쮽9“ÁÝ ÄèìÜådì¢YÞÜZl?¹#·“Ú³âôœùsÞf¥–óÕ¨èMã~J¬ÌÖÖ¯k»ž­k·µž}ÜÝ@ŒÎÎ]NÄNw…I¾‹m³+§óÒÿÙ#¿’'î ˘{~Ñ$]wŒÑغPϾ ®R F£í.bg?b´[œïâôœùÞôîÃùߺþH<â¸wïÞÍkÛ]žq7¸»˜6Vp“Ó±»õ ·Ƕ,´ƒþþ®Z÷�jöX< \-ý]PŒ‰!ü¤£šZw-Ÿqyž«ˆÑh»‹ØÙíç»8=gœ7ÿéּ̻ëL¼î0ã"®R F£í.bg?b´[œïâôœqÞêCw™1¥4>|ˆ?ë®R F£í.bg?b´[œïâôœqÞêEKi^¿~Å]gã])¥á*b4Úî"vö#F»Åù.NÏç­ž>}ú%ïÞ¬‰«ˆÑh»‹ØÙíç»8=gœ·zÓò-£±ýÍ›¸J¶»ˆýˆÑnq¾‹ÓsÆyƒÎºëì»^ :¯³ò¶á*b¦áæààààààà0‡m´’¼�¶N;@�ÀýÑš���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;ñùóg ‚@<xÀÁ‘{�°‹Þ—ãñ˜ÃããÓ§Oq´A/äÐFâ»ï¾‹:MäÿüóÏø+¨»dÏÁÁaÏ¡m6‡ŸÇ“'O¢óÍ7òúõëh’­ÎHÞ5>|ø5_}õ•¼ÿ>þ,êL;¸8ú…xúOöwïÞE}²Æ[zý¸Ž‰<W;p u7e4:ÀÒ]½‘$ø8ú…xÖ‹öÃ:¯kûçÏŸGluY%çj6¤£{m ´¡ÐFƒRšz"Iðqô ñ¬/]!ùòet h2¯ÿ¯ŸóW;P>8cJitÉõB’àâèâ PÓÙw]!×ëÁÔÇû¸ZÎÕÜ‘–Òh¯uwšÐ£Hü@ýB<‘´ª>Þ—s®và´0Ëuú_JiüG’àâèâ‰$PÓ>9YïS) W;Pm(td¯ …ÎÈÃ_$ ~ Ž~!žÐÉ4-“Iζûú+W;P¢d­³ð~"Iðqô ñ¬'ígµFuÓ÷êšïÛGrµ÷dm4ÌÌ»ï G‘$ø8ú…x֋Ψ›Ýß´ßõõÁÔU¸Ú;2õîÚphâ^§=fëŒ$ÁÄÑ/õŠç™Œ~’n³ýݳcOÚÁoñ×ýd¶„4uìúÿ¾o ¹ ­PÖ·›¿–ÉÔªñ˜NdtÚ•æ¼ÃÐãH‚ÉMü ›¸’ñð­oúÒÞëÉðjÞ ú7Ã}ÄÑ/õ‰çT®G'ÒltdpqÎo:£nêØ™(›¡õ6¤ †©«ÓýJcþQÿ@íS¹¸¾cÂ}5”n£%ÝA gÁÒj2‰¿ä ’>?G¿Ô'ž×a;Ü’Öà"LãëìtkœÍƒ¨uF묡£{³Ÿ»©g¯íˆÿf$ý½CŒÿŠ?qÓ0ïÉ~$Eæìmào’PÒRüõX†ƒÅêL£ý79Ÿ|‰¿hãXOvÆóF&ÁQ|/5¥?úœ¸Çö¥ü'àW2>;‘vÃÜwáÑìI0NάkÒÞ\|=y´2Þ4“Ÿ^È þüF[ú¯«¨áÇ'çëÉ>Ygá}Ú»½Z/ ‡û£üß$hïÍå½¾Œ¾$Ê]O%¸Œ“©0Ñ:ë·¥að iv'gÖ£¤Ý|=y4î1ûó—ŒGÒþìýÛýSÒRüõGtžJ?É$º0¤$èI«; ÿÏ.~Ʊ¾¬Ž§&ÌßÊàÍ3iµOä,Lʧ—tööùæ‹\Çá=’iwu¥óäÇE[mh{¼ÏrC]Ý “÷³q8$PáÀ}ø½4‹ *¦ »öËf£}`µN«á´^@Fò v×ß9u:ÈÁ·¯äMïPÚý_ÂÎᯰ£x:›ñžþ*AçPºÁE܀ǮÏå¤÷V.3øÍ¨/û¥%a:¸h—4‹¿[~&}e,ůi²ñP“”øcK¼ûÅêxNiëÄHï,Ô&„‰tï(Xjog³öÇË+_úZ÷L²§ãS9ÊÞë–Þ§›ÐçÎÌ6Í:éV‡w<§õ2tô®£x³,çnmY²mIox™IÊ´lå9š/Û&ib}œyU_ëiyu–wÕ' .ů£³|öÍèéßè‚éäLzÛæ÷2,P~t×'ÓKöZáùÉk7ìeo<g%‚{¹:à=\ÜsKÇrÙšN¢<¼W¹¡þ>?†±Í ²uPàà3HIæ]UõÜù¾™É;°‚©­3ËrîÕ»ÿ.ÃîA~iŠ©{\ê,Ì‘ÝAF“¼v˜(¦æèïLW\|XUéù±‚mKñy4|öÌÊ]1¬‰ãZÉZ‘çîúïBÑ,qÜ8tÚOMÐÛ+bP´]]÷Z›ÒŸy¼´êyÿA=ò&à|«‹'y6¬­sf§™(Aš¿cÑ™ïu¯U˜Îü<“GwK°&I°l)~Éõ…ý™™~{Ø›ì¥1ó¾{ã©“(G+J5·—®{­Mý&A'¼&Rõí‚ã4a×ZõÚоÛÝUôe$ï@º,çLmݺrMÆN7OÖJ-}XQí;’Û–âÓ¦“÷ò¢ÿóÝ·Ý=ð‡µñ¼eUKWËŽ:Ùíwµäí…tŸeæÑjÛ³û?¬­ÎÅGtPpXÚʪ Ü_9_Ö ¸}Óˆdm#úõ˜jYEW:ƒ’~XUwŸéɳ̌[ôà+«FìHl[Š7¦r}ñ³ô_¼_^ ° É»_l‹§¶¿{á錄WúXÞ¥k:9—Ó®®v̾Þì¾’·£Å¶Q™áÒëèñ°À$H²”*<t²(OìLVø ÷ì“Ü)ÎígÖÖ£õîAŠäž³Õ×Ö­y�ñAvöì¾ÞúæI—Ñ|‰}Í n£h}ôšß˱Úwý«gÛR¼Òm!_H?»{‘¥ìˆ#ÊB<ë-¹*®;Æù¾ã W;PMØÍhß,ÑÁOV$ ¶-ÅçÖ·—9£_>’=¿ÏúÑ~×ÉçÑJÀÕ܃6ú@Œ¾‘“vú_ý¸. HU™$Ø·¯Ö¬Ð~­ÝÑßþ žõ‘]ñö­ž}\í@Af´Ÿ|3'Ý–Jëàá?’?G¿Oÿ¹ð¬Ù®pµÒ7|ІC“um<ôÿ}~ä#IðqôK-ãmá»îý:ÇüU÷ÔñToC묡#}U×¥9m8Ìh¿nKtY«K.–=OÞøÃп î#Ž~!žþÒd]KRyžl«ÈÐÄ<YÇ®‰;uì0Hü@ýB<ý§ý°©s¯ûì;W; 3íf–]u¯û,;Ò¼Oj²¯¿?üA<ëAûcí—5Þº^×I5®v ‡©o×BGúÔ·Ã Iðqô ñ¬h3uðì6 E­q7„Îʳ³L½‘$ø8ú…xÖ“Nªi¿¬“luÚ}†«ØÙÓݔհ§{=‘$ø8ú…xÖ—N²éì»^:ÑV‡É5®vàÌ.4fÛHÝó½Î{ÎÖ I‚ˆ£_ˆ't"ͼÿŠ–ºú\JÃÕÜS^}¼Îpøy$ø8ú…xÂÐhL)®Žûˆ«(‰©×‘¿.Ýqøyh’ÀÁÁÁÁáÆ¡‰¼o¥4$ï�€ÚÑN�\Dë���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w áóçϼ{÷NþüóÏø³À̃4™€mô¾ÇŸ>}Š£ EOdhC¡‡Çwß}ÇáéñäÉ“(Æß|óM4¹¦“luGò¬ ³ï_}õUÔ`hBh÷G¿OÿiÂþúõë¨?ÖxkBÿþýûÚ®sÅkhÃðòå˨±xþü9#þš#Iðqô ñ¬LÓ~Y'×LßüáÇø«õÀl@ëítùN ]¶£¾žHü@ýB<ëKgß5y×k@“yMêëPÏ  ….Ûé¡ÿz!Iðqô ñ„N¨i©k²>^?öuµœ+(H }×Bgãy ¾>Hü@ýB<‘”­×~Ú·úx®xàŽ´0ËuºTG)ÿHü@ýB<‘¤jš¼'kâIÞ¤èÃ3:Â׆B—éà/’?G¿OèdZ²lFÿKÙ €[™]i4‘÷µÁ¨;’?G¿ÏzÒ™ôä«Ú÷êŒ;¬¸•6f'šº<é^W$ ~ Ž~!žõ¢ÛBš­"Í3l àV:â×%9S.û¾ÕI‚ˆ£_ˆ§ÿL»Ï¡Á  ºyF‘:7kMi‡ ¬6²<”îð÷ø n#Iðqô‹óñô´½,ƒö¹¦ŽÝ<WÆDÉ;°}(ÕÔÕ鈿nKtw÷›íc &7ñÇn#éóqô‹?ñô«½,‹Îº›gÊèghÁ€5tfÝŒú©g¿ƒ›‘ôöeäI_DÒç;⨉Ú^ô»èÑèå*þJ¥œöæ¾ô¬½,[ÞÊw]ÑZ£5ìv׳ÿ%ãÁaØiíK»ÿBºÍFÜÙ†Ÿ¼—É4þ¶Øt2’·oúÒnÄr³'ÁXS…EÑh+ßF¯Ó’îàgt[áÿ7¤Ù;[¼ÞõXÎúmiD?KðëÝ@Æ×™›Žr›”L×úEúíýøuônp!×ñwÈôB­ð÷i´¥ÿª+Mó}áÇ'ç“ðvO>ÜgWoÂ|ùXÚÁoñǶpgØæûRÛÞ Ùf6»2ô¤3¸XjÃV·—¡éDFoÿ'ÑffÚËØtr.§QÛÿ¼èhJ”øN}­ÓD›{ýQx5ÚÏôÑ&‰×ÿ¯[ù*=`ž`w£žýw†t»ÿË<yžNΤ×|,ƒñ_ÑÇ‘( >òáâûÂN¢Õd}t-£~+NÒ§r5ìI£Ñ‘ÁEØ…\ŸKß¼ÞôW :‡ËFø='½·r¹”Mëk=“ƒ¼Nê2NË Œ0¡ý·ô‚_ß5”î^˜¼ŸãŸùE&Ãï¥ÙÈxéçmŸvppŸ]qÔû/¼Æ“É• š¶ó¾ Û³‹Sétúòf˜h¿Îÿ&íFÞŠÆêör6YóXšÝ M›µëOÓƒ+m¯[D{~[Ô'$¿ïðz{œê7ÂY†½G o§ý´ÝmÛAO$hm{rÛGýØZÚxf’ØÍÔ O¦¸õeék_ÂŽå9J&Ös«fè´Ã9Êé¤ÂAG/LÜ/¿Ä'è’ý|P¡¿ç©e;³ “ ’„hàþöò*1ÃÖhÿMÎÃ8%Uµâb;ý¶Jg6ƒÄyÎíK·“½_Cz<“áUÞ¹ “½Ñ?äÍüÜçŸ÷f[£×ú)±J{ù÷Ò}VÍŠ\£eÐ×¶Ž&Òí2ZºGôÞk§'X"«ÚËr®›è¼ß6±µé™ hŸì»}OâIÞN< s5”^/Û¹fií°ÿ'd¦£Õco1Ë¢³Ûû¦×¤½øš&ÓÚÜhƒŸéôSÇQNòžŸÔ›Ž=ÿuÂcž¼ëLÔÒËvf™—ô÷«Þlud¯}"góY89;Vr uÒU¬¸Øo«q¼þ(ƒÎSé¿ùçâ¼OÞËI˜ìæÖµëýwŸpEñÒ2‹ùÌmæþTͶêªÖIûÄ5cV±rï¥û®šmx–ÄŽû2iõù[mÕ$Høj:,—¹,ÚÊØ¼Fy¯¢™è`~í‰Aœ^[ú=ÁâZu]vs «'àîäXÃædnÂÎøÑÚYé/r<•FªóWZns4ŸyI'túµÃùŒÝ|þ.³Ý+þ¾æÃj+5¹<^š!Úüß—ÏŽ$A¸gw:/ëí¯¸Øo{qÔ’„ãðþù#þØÐºö§¹‰k*&·Zžîß[ËÈôß=.8/ÿœ™MWÍî~Þ…÷eÒJ¡V´—Ñ`©¡+7‹AxøÙ³™[L&ᯨq[´ïNNÀù–Ä“¼È{ˆµÚzxMºËk²–UÃä*ÛѦfú2@ôoÌRl¢Ã×Ï/•謗,ä–Âä “ÃÎ÷™r‚jî³#IÐêÇ[ÎK•+.öÓß}+ÖÌ¢ç[s=G(¾Z.sÉžóf[õÛLi&‚oÂï{»¨Ÿ^rßU³M®Ñòè϶˚ä]ãõÏœøä¶—z_v¤³4xNOÀ¬“”¯¢‡ý^&^n˖Ѽ5—|@¦ºÚºô ùÌl©zßÌl¥qý8ì4â:ÜÅò½v2‡‹A€IÚ¢’ü:‹ß•ÎàcºÓ‰j¡{òlx™é\ÖÌ iÆÑñ¬<c.®£íöehjbSÉ¥‘÷wïŽI‚v´² b2Y¨xÅÅÛŠcñ™åI^Tªô0ý€¢Ú`p°Ñlë¼tbEíó}WÍn½FËe_ò®eD/¤z>áJÆÃt[œÝ²Vµ—Ù[0{Þ ‘L¶gmÿ^ûT.³ó³g‡ç<^ Òëg/.3¢6¼#­þyºmwPÞ$›¯µï$ïÀéHÞŒìµÆng#{M°ÃŸ©?wñPšÎjÅŸ3³«aã}qšxhN·•,4û?_Kók3«7û7Ú9ïéÇúÛ3ëj^/Q+ýÁû»Œæ élÝbßêô‘˜ñUóÙÂøëšh¾ÅH&ÿ–ð˜?P—|ýjf|õgW.Œgi&-1SZñŠ‹ ¶ÇÕÉ­Þ;ÿZ®+Öó›Ý1$¤«ƒNyž`Í€8c>øŠ?Η¸'Ü{Õì¶k´dVÜ—KÂdýì$óÐòÚK}†"ñpp£Ý—ŸÃAÐìfÓþÏFívsþ}³‡›Óƒ?-µ<“ùTíüÒ ß=¦D&YÞêûÖ‘$ïÀ=iÑ|@Ʀºx”Kc\­Ù Û|uÅH®RTºâ↭Å1ÚaäYâaNýÊ <Ÿyï¿P-DÉ{"ù]ìžÜbpÃÙÖ(ž-i§b'–­“œÝPÖ 6Z5Ûà-Yõ÷%ªœ@ó±®}®xàt“¸›2ÞºÙ_Õ& 険ùª$Wb¢ÙÒ]¯¸¸GÿŽí0ɳ™)Õ¡¿™2‰ÌªRö˜Ïv_ÉÅ ³ØšSߨìçÅÖ“³Øo6ÛWú¥ªÏ>�¹á,°Z»j¶é5Z.}]ԃΨÛQºZ-®x  Ý›%:í44yg¶½Hü@ýB<ý§ ºÖ°›Ò˜ê7¨W<°Ý÷]·ŒÔFC;Š'OžÔ¢®i$ ~ Ž~!žþ2“ecÊR¸ât¤ÿîÝ»(Q׆Cwý¸ŽKt˜!Iðqô ñô—&ïÚ댻ζc†+H0õtæ!MØuÆ]gÞ’?G¿OÿéÄ™)™©Óƒ©«pÅ1mL»ºT$‘$ø8ú…xÖƒN®™}֬Ϋà\ñ@†Î¼'waæI‚ˆ£_ˆg½h¬«ã¦”¦ŽÏžqÅ+PóŽ,’?G¿ÏzÒ‰6SJS·-š¹â dw›1O½³ÛL½$ø8ú…xÖ—öÁÚ7›~¹.“k\ñ@A:ÂOîó®ÿÏ3ÕI‚ˆ£_ˆ'4i7MÔ¡”†+¸#m’õñfgm88ü<Hü@ýB<aèDšöÅ:¹¦ý³¯¸â˜úxùsø{h’ÀÁÁÁÁáÆ¡í¶N¼�jE;u�p-� VHÞ¸Œ ���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w`…ppppppxuÀ}DXáÇòÍ7ßÈW_}%ïÞ½‹? ¬FÇX λýˆ‘ˆƒˆ"p‹ ¢^ùñxXFÇX λýˆ‘ˆƒˆ"°?ÿüS^¿~5|ß}÷|úô)þ °@ÇX λýˆ‘ˆƒˆ"PÀçÏŸ£ä]À—/_FI=`Ð1Vƒón?bdâà¢ܖϘzx-«!‰‡¢c¬çÝ~ÄÈÄÁD¸‡÷ïßÏëáõÿQotŒÕà¼ÛÙ8ø(÷¤³î:û®¢–ÔðPk}Ñ1Vƒón?bdâ࢔Dëáµ^Gý¯~Œz¡c¬çÝ~ÄÈÄÁD(‘)£1 <ê…Ž±œwû#;?Eàžt†Ýìo`eÖ½žè«Áy·1²qðQîHkÛŸ?5†Zë^ËV§28x&ëiü‰z£c¬çýwvJ£;”«ø3¶!Fv ~ Š@úpê»wïæÛDjiL­ß°éj(ÝÆ‘“›øõFǘ1Èè´+Íð¼è¹™å_/µ?ï:ˆníIkp!¶£¹7ì@ü@ h‚®‰ºÙRxövs†ñ@Z­Œ™xÐ1&ý!£þ4Ú§rq½Ý „ón?bdâࢬ¡¥0æUµDÆým ¯d|v"íFb&´Ù“`lÛÿ’ñàpþµ½þHnd*WÞ4¢ÏíI;ø-žqO¼Fòh2‰_MM'#yû¦¿ø™©Ÿ»ËY¿ÿŒ}i÷ßÊÙàhöq£çLYŽþ}ˆÝŒ¤¿w(ƒñ_ñ'¶‡ón¿Êc4 ¤mÚ—îÓÙjP³+ƒà•t›ðó-é /+a[9Ä_Ó×’îé¹Læßp¾äQüµ¦ôGŸe2ú)þþ}é¿Æ¯u[›»[•Ç¥ Š@†y�ՔƼ~ýÚ“P¿Èep,­n ãÔLè2:ùQ‚Ë/³§—2ìJ{ðQ®gŸë‹Si·¾—á$þžˆ&úGÒþœ#ZÎ?î`8ÿ™Ñl}"ÁŸNΤ×êHÿl<ûyóR‹Ý$~eÚmÇÆeü‹ôÛû‹¤@Œà"Ž[|®Í×öú2Òj•äÀËÄažØÌl_&çrÚmE7:\šË%5ÈÒ£!Íìõ%íæëÉ£±µ²}ý­ˆ®_“¼…GÎùÒc6ÈÝ$IÛ4áÓÛ`ƒÅ¡ÿÆDWOu_öÌ×Vrõ:Ê`þZ³Ÿddîeó76ÚÒ•(q ?>9Ÿ”/}ÍÊEצIÒã碕¡¹HÓ¬"Fm`ض%Û­(‡©E¢ç~¾•Á›ga»v"ga¼§—töõ~Û°ÍÝ!+â€{#Š@†™i×äÝ«7\ “¶ÞQ"›Ó„âx6£n\”Aû0ìä~“«0qïtþ&ç©Ä]içwT8ÁÖ„ò`þ`]ø½0ÁYêÄ~“ }ì\-ý.;Æ(Ahe“Ã0Qý·ôæ Æ™ ¿“ŠDéÊ<¶ÉYF5Œ};8] ¦¦¿JÐy4K£ÿ?L "×çrÒ{»t]ib¹¿£(·{Þõ: ÙAjøw÷›ãë¿`’¶6á ¿®¯І¢Anóiþ=¡ƒ‰Üò5ÿÒîdh®“xpÜJÊt@·&ïóŸ7»næÉl lHÓ×2ê‡×s×Å×4–?ÊÉèèó)zž2ç$È…¢ÞYbV>V¤ÍÝ’w?E ‡©q׆îÉ“'ì$“.‡Y>âr˜¤(9i¬®YŽu;Í„ Àè埥æ£hÖ2C_ûÑÉ,‘qˆþ}»±jÐÒd"±²fr&å-M.®ÂĽótÅŒª˜öäA3»Â¢´tê9ÊÎ:FòZšœ<ÝÙ”Û=ï³{g6»nèçK³>Kv‹&ië¾P”HHœW ”¦—o¥wÿŽ)é÷t|*GÙXé,õÃx0Q‚ÝÝ«ÌÊÿöM£3J\¯úù£Óüs¿”¼Ï^s/wz‡6wôgÃ}DX#ow7TÕY¦vjÉ}½xÆîÛosÊeb+gû”Î^=•†Ö”³‡Ù¤áft"ò<í$;ÉÔ »ê£ä.•dŽTò®f>htdp±b.\ÏùÞŠÒ‹(ÑI”,ÙdŠ^o÷£¿Ã6e“éÙªG8¸ŒµE“´u _l^:¦%.¯¢v'HÝGIúóÛ9‰ ~þÙŠ•±ä}¨¿ÏÒË®,, ïGÏEµ2çI¯w³Ò]¯ñ,üš¿[¯ƒÅª¡ZuîÕnïMU”(ÒÙw…×ÆÏ½-"×uäYZzq—Züµ\v[[ÍÊ/Ï gf®r_ãúB‚n+3Óé†]uŒzÞ8?QÉEûXº¹å23Q‚º*Y+: ›šÕܾ­Ÿw½nÍ–¨QùP3Qû\4I[—ðå›Õ[¬XÉÐDü0çç¯)=‹îO³j¦¿ÿñRÛPô»MõIcvµ!‘ˆG×k\µjRBËÍ:ÝL›–~Í´"mîî¼û(i¼)©qéÍ™t¶ð¨“MÂõ!»Ò}f–ïóNË.L‰@d¶Ì</Ð7þ§¼ “˜hY:•è—'2 f;ΤÞH&ªí ;¿h6X_#ns_šÍf¡äÆ»êsËVIœãÙÃÁæ|'éìë39XõšÏU¥y2ƒ´mÛþy×D¸)Ýáÿ› l“õâ…“´u ßj+ËÙ{mNçvÎÏÑûù8Q~_'¼ßSÿ¾üšìÊ“F€î›•¥LYWj^ãÓ’öÉû¸MÔò¿@úyßÔk.Û¬ÍÝ-’w?EàŽ´¤Fw¢1{¿»PR“ÞÁb¶$ÿv4«N•bÌw®Ð`/þ~³«F,zðq±ÓI£Ý—7oGéAÀ|ç Ýþq°ØÅì|¢ß%ìqI†îxqöeÖîbc)ývBgŽ3I¸žË_¤ßí/^K§Æq™—|‰²\ZÕ•Î|¢X´ûLOže’šåò‚íÚþy×ýPöº?ÊM}€7ý0c¡$mm—ԤVºâ¸¶/ýÜÈÊ’y­ÅÃæºmkÐïÌž0ߟJ\U³ùw·³{#Gªm‹J¼´Œ¬}í®4ÿz¼º’ÙU©?Tlè@j¾ËOêXÞQi]›[ý=à>¢Ü“&ì:ûž|×U?¶–¬ÊªCûí´c̾{©>_`OQ€©Q'å:Ûh¶) @ý&’¹Û:†ÇRé€Î@šm õ{ZÒü}±å`œà.½Ž[Þ«_ƶͶ0ùJ­@-Ü–¤m–ðÍJpÚíYbi¾ÞLî“cöHÅ-³}e486µó9×C”À'ìå½®¾ªGü@’|øð!JàµqÔ$Þýjª&A/S–à:ÆjpÞíGŒì@ü@{Є]gÚ5Y×FQß…U“v7w¤©‚.Ï?ŒÎÝìȾ‹¡[è«Áy·1²qðQ Ò]fL­»6„æ¡UvÐ1Vƒón?bdâà¢lÀ$ì¦,F·Œ|÷îµíH¡c¬çÝ~ÄÈÄÁDXAsMÐÍÞîfGv¬BÇX λýˆ‘ˆƒˆ" ¥/Ù„]gÜÝzC&T…ޱœwû#;?E !¹w»6rÔ³£:ÆjpÞíGŒì@ü@ØIEÑ1Vƒón?bdâà¢l@yMÞµáÓd^“zýDÇX λýˆ‘ˆƒˆ"P€Îºëì{6‘Çñw Îè«Áy·1²qðQ[‘EÇX λýˆ‘ˆƒˆ"P‚¼m%õaWŽz{›¸(%Ó™w-£á¨ßAÇX λýˆ‘ˆƒˆ"���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���Aò���8‚ä���pÉ;���à’w���À$ï���€#HÞ���G¼���Ž y���œ òÿø ûr7,Î����IEND®B`‚������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9aq_VH.png����������������������������������������0000664�0000000�0000000�00000072530�15030617045�0023324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ù��b���]Ýø���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��tíIDATx^íÝÏkÙúï{ÎßpAcO= =Ù#ÁM| û 2øŽÎÁ<ÜÀ†44Ü_¡é î†/lh › €Ø“Àƒ¸4#¸ƒ¦ÛÇpiB Ý„ ž[ŸR-©Tª’%»~×ûEbÙ–äZ«Özê©§– ���@£ä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4LiAþÁç���@J òÙØØØØŠß��ÍG&( Ç@{T©­éw�Ðù@I8Úƒ �P4‚| $íA�(A>PŽö È� ( Ç@{ä�ŠF”„c =ò�E#ÈJÂ1Ðù�€¢ä%áh‚|�@Ñò’p ´A>� hù@I8Úƒ �P4‚| $íA�(A~’kÏúþûÓ{Œnþ™½™}H~6¯¸ñsÑíp4µOvcÓQ7ñû‹íÐúÞÏ©ÏÙL,úª+ízêÙ¨þlǺƒïì?½/íA𺻊¿¿Só®õÛŸü]qy<ü{¢û§ïÙµ~r:²ÃØcØNû íP¥¶¦ß@;ä§ù4µÑƒ‘M£‘òÍ…z§6¾Œ†Ü „ŸF‚ô¾‹`[AtßFÓ›Å7$ºçNûý_m2ø“õ¾ù»}Ó{dãÙáãŽàO¾´^ÿÜ.oæác¾›Kó½ðäbíÊÇãK‹<ÛÂüÒÆ½?Ù`òkø@ôo‹HÚgHÕ–`k~}aç~ŸÔß»ÜZv"X¥¶nK¿€¶#ÈO“°Îgc;>ñìj çä˜Ø óÐî³Ùø‘õâÁwpÂñÜ&6Bò»Ókm{JýͽÎpíµòï¯Á–úi÷õÇ?úGA{ä�ŠFŸ&-` ²ÚOÂrY߽҃ƒü¹o­Ó î„à[¯s”ZÆsW¿ï3š±7ûÃ?Éx¸Q2Dm¶ÔO]?n1‚|�@ÑòÓ¤¬±€=ÒêÖÃï&Z ò“¨Tç8lëëÓHÉÎâ5÷/ɹ]p¥"Ð'”êH¼Eþæå¶õïB”öW¥DîµPßú)³é,¯^ÍíföCä>m=x—k™úÔþq «SñÒ³tÁU$ÿ÷:ý—öM¤ä§Óÿ«]\ *t3³Éx`]÷ZÝO¯7ËÏJ ÷SUz/�€üä§Ù+È¿-“s[¯Ìýa´<F™ýç‘zù„ ? -¶nä=î!êÝ=�±+ dòﯚǀ®ÜœÚŸÇç6ìØèÍÌnæ?™wòEПæWžô†æ­Ý€îþÓ¿ÙÐû)PëXy¸q‚¸ŸE<ŒÞô>¿²Éðx­„m~ýƆý¡'þû ÑMéßÙ ÷Ô¼«ØÉ@ ²hë¬úK5û� k¥ö•ŸhRV­~ã)å:;Ùä/Êc´6¶H°½ídb§TÑŠðæß„›q òïOmZ=áêNÝ/mÏ”«? ý�?)hVŸÞ¸™VÏÕß+s¿IÇÃóçXë: þͦÑÐñ“ãòdÑÖYõ—jö;�@ÖJí+?Ѥ¬A&s­>>ã ?¥<f£dGÙþÞYB`“€ïÃ=÷Õ›ðæßÍ ÿþ*y l\EZq¥3z߉[<ÈϤ?èÄâeìý¬sóÙ¹&òùI²z�@µ•6ÚW~¢IPæ×oíìäéÎKh¦Úä'­d³°Xz£‹U9Âä/Öx6[ ôµæ;ºOdOOìQÿ‹ÄR!È¿¿*AÿKYÞrß“Çmϵ3õ©/â}0Z2·íø[”ݯ\(ù�€¢•6ÚWz¢Ù¨o_l»}Vz-¼‚¤Í›ÝOÅ¿¿å²–SXwÜí¬¾×ñƒoj×÷L].²¶Gv²Qg­ *r£qø^ÖßûêoB:í«jÙžùNϘ'É(‹î‹'«HEKæÔŸ$””ÍíæòÜNN£ËÝ–'‹¶Îª¿T¯ß�òPÚhÏDƒ¶«Þ1p˲ª}?_É WÛŒb5üYdÑu¢0ܼ*¥’¢£È£ Ä¨ogáJ:ók›z#ë÷’î+(A>� h¥öL4h»Ê*‰9tWab[¼\Kôùú2•ãW‘+GÁ=%‘+K‘-þY Û­_½Z®$½Ê¶¼¢_ÖóÈú£belåÒûº¯,žC²z�@µ•6Ú3Ñ í8Úƒ �P´ÒF{&´Ç@{ä�ŠVÚhÏDS€”ˆ7·;~pîEûíE[gÕ_èw�Ð¥öL4h;Žö È�­´Ñž‰m×®c`Ë'9olÍ»²¤¿ë¾²xÉêy��ÕVÚhÏDƒ¶ãh‚|�@ÑJí™hÐvíA�(Zi£= ÚŽc =ò�E+m´g¢AÛq ´A>� h¥öL4h;Žö È�­”Ñ^“ [9� ùí’lµGmU¡ß@;0Ú@ œ�öÁ¬�5@�س�Ô�A>�`Ì�Pù�€}0k�@ ä�öÁ¬�5@�س�Ô�A>�`Ì�Pù�€}0k�@ ä�öÁ¬�5@�س�Ô�A>�`Ì�Pù�€}0k�@ ä�öÁ¬�5@�س�Ô�A>�`Ì�Pù�€}0k�@ ä�öÁ¬�5@�سPc¿ÿþ»Íf3¶lù�€}0k�5¥�ÿßþíß‚à­��»bÖ�jê믿¶Ï?ÿ<ö��¢òR€ÿÙgŸÙ/¿ü>��°BÔ >��¸ A>P#ø��`ù@M¼}û6¸ù’���܆ ¨àë_��€ÛäG€��öET>��¸ ‚| ¢T{¯›l_¿~>��°‚| ÊÌÏf³ð«M.À×j:���û"ÈJ Oªý_ÿë…_­#À��÷EÌÕÙ'ÕÚà�€,äSßùú¿óûï¿ÛãÇíÅ‹á#���wC(šÅw›ûßÿûÛÿøÿ#òì��ÜA>P hßmÿí¿ý7ûïÿý¿Ûý¯ÿ•���d‚ (ˆçy¾Û<x`WWWáO��ÜA>P�eèuCmR€ÿ_þËYþ_õøïÞ½  ��ànòlËâ'm*ëч`Q¾��î‚ ÈÙ¶,þ¶M¾–Ô��ØA>³}³øªÏ×ï���ÜA>£}³øªÉÿþ}øÛ���wCäh×,¾Jsf³Yø[���÷CäDY|•Þ$õnS–ŸÒ��5‚| '·eñ)Í��y!Èr à=-‹Oi��ÈA>ƒ¯¿þz#¸§4��… Ș²øñ�ŸÒ��P$‚| cÑ,>¥9��  ù@†\ŸÒ��P&‚| CÊâSšƒÛèDÅbŸ×—ÚNWDÙš¹1_æ‡QÈ򢰪¶Ý·ÇÛÛ·oƒÏ—Avò i°nC?)û¼ž\ˆæR6_WÁU檶Öÿß½{~÷Á‘dˆÉ» Ÿ}^Oj7Ú®=”ÍWÉ«Ú\Aÿ·ß~k¿üòKø]ì‹#È“vA?)û¼žÔn´]û¨Nÿõë×AÚ_ÿêkê÷÷ÑdˆÉ» Ÿ}^Oj7ڮݔÉWFß•ó(Ó¯Œ?nÇ‘dˆÉ» Ÿ}^Oj7ÚŽjõÝgÑ(è×ÿUÓd9@†˜Œ° úIñØçõ¤v£íà¨\GY}}ФúųgÏÈêoÁ‘dˆÉ» Ÿ}^Oj7ڮݴ¬f´>_>õù»áÈ2Äd„]ÐOŠÇ>¯'µm×N*͉®´£ÒVÚÙG!&#ì‚~R<öy=©Ýh»öP]3_A>kæßG!&#ì‚~R<öy=©Ýh»fsËeº:{·\&Ÿ~{9@†JŒ>LlÐy`ƒÉ¯á¨*‚–â»ÏµÉàuû>’¯¹ø­ÓÚäÃ<|¬Ôní8^Šî3åSp¯gÕ¾ ðuC-uöÙb¦2Tæd4Ÿ­wðÐÆ³?ÂGîâ›O‹;Q¸ö¬Nâí9AiGÐ’N}õ¸à`¦Ð}>¿´qïÐzãK?ü.‚ŽÛ‡vÐÛ¬Y1~86Ôüx™_Ûô|`ÝðoYl§æ] À—IŸùÙ¼þáò5v=aø4Ù¡~çpdÓÈ[*‚–¿t>Ëaf ȪzS6©k}ïçðë¢hrzº>é5XýûÉ}„Yç¾g×á#Eh÷>¯/µ[½Ûî7›ŽŽýþ~n—7E}²kïé~ãøµg'%^EpµøjkýÔágƒQÈPí‰ ›ôèžWîàÓÔFŠÏ"•¥Ý§²Î Ìr/´{Ÿ×—Ú­Öm§±íð¾WX÷uãŸXôm4½ ¿¾Ý§é™}Qð1™Ä­ƒ¯oUÂÃø÷èd¨øÉHƒyw9n^ž /ãYô• ºðgý¯ÏÞÚõrD_ÔƒºçYߢ—•çv3ûÁFý£È÷{6ð.ýwâ(‹t~¯ëO4ïízú]øÚGvâý´1‘l/ßøèÿþ?í{ÒêÏÙ±îÀ³Y<+¦KâÞÈúÈûÿÍ'ça Ã.ï½zí<-J·üþÐiß zË¿·Óÿ«]\ôÂõ ·\¯_î_^¾¿™Ù›åþזБҫÃÑÔ>^_ØyøÚÏ®æaùÑí0÷«Gz¼-Ë´Åëãƒhwüù›»’±V²¶ØwÚåóÈþ[m:ž"½5 Ý÷RÊÝ⯻ܢ?_c#νŸª¸ýØ ­µMtë¬àní3Klöæ,2¶ù[whÞ,%ï®6?~žþ\“ñj.žÇ£½ÁZÿÙ©ÿåH7Ýzžú øõnÄÝA>! „åP`ý$%;ª�¾çù?,ƒ²ùõv73ö·ÕJϯ<;éÅ'?@˜þ͆ñà=˜hþlãïŸ[¯foüß ~ÿ(ž±Wð÷ÜŽS²HÁ¤ÚØx2 ¨ýõ ðæGŸ<±Ñ÷ÿŠüoíÌZ܉Ï^ï=gù÷“E@}î÷ÅCW6GúHø3í­ò‚/V?7ÿɼ“‡›ßÍ… _ùÁ{øu@msjŸÛ°wb£7~›¿ÿÅ*8Ø€ä§ÐcS{b}¼ŽÅãÍ`Üß—£èñ¨¯Ýþ[<³ORJÚtrÖOÎë†üµcÎ?ižüÅúÃ7Ë“ü*q.À¬Ž]Ž­ñG[ÆÔ¥Ô>óÑ®¼§ÖÛHløÇéÙKó®"'ŽÚü8Ṃ÷ùП <›'$~_¸ø«õ¿°þ£“{ô¿|)›ï‚}nÎÝA>¡ò&#eôý@,-“wê²ÙNÒåÜíÁv  ý@ iRѯ±2”ëF‚‰d‹À0ñ½'Šÿ¼‚Ò§þßò[øµ=ñÙó½ç,ÿ~¢}ô|#èSÀñ ÌKp»ÙnqRufÓ  PŸø‹&zI÷Q„Wº_Ú$šÕŒJ @rV䱙ة].³õ zì‘uG«€Jm°ÏM´Ê%g×OÜ7ü½ë‚U/ÈßíØZØ–|Y—Úgüãexª+aá×Kéu÷ëmî¤Ë‹“–èÊL{÷¿‚¨N?z“.Œu;‚| C¥MFÁ%ù”,‹&‰a|ÀO ÐâÁóº`à'ÜÄm-³]»d°ßKH%8¯¾‰”¹-RB´Cиß{ÏŸ^3_ Ü^Æ‚¾„  è7‘ ru´:a ¾ŸTêá¶Ø !j‹ÃíË8& ùÓû-†Ž£Ø•¦ˆx�µÈ¢»“ªÐr5•E}”*xË+Y›‚ç¼µ°KÿøîÅNº«vlĹ÷Q;[]kãÓúŒ–ÕÅ·¤2·”÷²í Zü*žý¯hZ'z“.Á~:‚| CtJ¡àj£ f!ñ†ªÄ]·\ò÷%gªÒltÖ$¾_p>ð'™±M¢e± ~—÷µß{Ï_îýDûô‹ø‰ORÀá,ËÕ”TðăúùÅwSÛ&ÅíÁæî™Í¬wljŸ>LìÔ;áÉQÐÇ»‰÷©D-꣓ËAüïúO9´£­ý;9À—ªq‹`¶B¡ÊÎÇ–o[òeMZŸÙõ$!*åwÔïüc{óؼ=!³½ÿKuù”ïìŽ ÈPY“QzvTAÕú U¤Ëðš¼R.ùË|vn§;òš´NSO¢ÒÃàoŠœMHë%EéAŠnØýÏ Žu¿÷ž¿Üû‰ß¾›Ëá%]1Qÿ8]Ü·Ôáúß–m(HÙ(õJ³Ù6›€¤”•嬰cs[Æ4 vèúûàÿ³ÿ¼·ÑÇ“©Ÿ§—�m)w ëÅWesj§/ý‹Å xÕŽ¸Êù;[¾XB"UjŸQÛn–m•vb¡÷²q•mn7—çÖï¬ß œ$½ÿC¼®(¸UwøDÜÝä*g2Ú\%eˆ™›ÌŸÿe-¶ïff“ïGÖwW”u<}jãËè0®Ê1­×`ßr°’þÞã'.óë©y#­ð[EDÁiÿyä¦A½§‰ý¿{¹‚Ð>ï½�ùö“”öÕ$Ÿpµ'8É:|j£¿|±V¾ ìþÀNÆ?®?¬¶3´ç“«H»íÀ+Rt÷Oh¥¿ûí¹17'…›·v‹ŒÃÁKûKWwô^’EÛ®­©öÓ~¤ŒjÍ–ê›KóÑ�_ôó‘›+vlÄU+ÈßÿØÚ©4mKŸQ9×éI|}­¶ó• žo^™I.Ý»ôÈúËcÙohÝ®ÿX·wéùRpïJs?~Ì’š{"È2TÜd¤`)²ÔáÚfe´/sKŸ-2·‹Çâõœº¤²Zâ°Ó·Ñ÷ÿ WaÅ?¹Q«Þ¼š.'e{–ËÁ­mÑLѶ÷}O ïçï«%2W7/ºIÈ-ÿ·¨#}5½_/tË{/’^?ëûv¹¢}!é Ž–ú‹žà­Ñ·ªžCK“þcÕ/Üï»çn7ïùmdÝÏhi×ÿØl«èõò=¦¶„ljßO7Nª¥ýþjYÜEŽ•¬­ÛñͭɾØ’—,­Û^¡c#νçòízlm©£_Þܺ_ŸY_Î2>¾Ýò\Ñã}m)\=Ïwþqüÿ†—ÆÞÿg·þW€è'á¾xñ‚O½#‚| C€ÛÐOŠÇ>¯§E IÛµE´Þ^|êíï‡#È“vA?)û¼žò›Ï}𕫷烯²Ã‘dˆÉ» Ÿ}^OùÍ¥¥/©·ÏG!&#ì‚~R<öy=©Ýh»fÒ‡[¹Òü|pä�b2Â.è'ÅcŸ×A~³¹Rµ1l•=Ž CLFØý¤xìózR»ÑvͧlÝj:ú€+jò³Á‘dˆÉ» Ÿ}^Oj7Ú®=´T&%<ÙáÈ2Äd„]ÐOŠÇ>¯'‚üvr«íè†\ÖÈ¿;Ž CLFØý¤xìóz"Èo/•ð胰ÔþZ…‡žýqä�b2Â.è'ÅcŸ×“Ú¶k7eò•ÑWfÿõë×á£ØG!&#ì‚~R<öy=äÃQ€ï>0‹žÝpä�r[~›JyTÒƒtù�P0MP�nDZ‚$ZO_Ù|‚üí8z���€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò ½ÿÞf³Yð/��@Yò )¸öì™°±±±±±±•¼}öÙgöõ×_ ¸¶!Èr ÁäóÏ?—·o߆¢ÍÜ„ƒf¢mëIí¦ñš­¹›æàÇm­yùÛo¿mÍÕvF% Gžç¾ 6h/‚üf£më‰vköš“è«Ý5/¿~ýÚ~ÿý÷ð'š‡Þ äLË‹/‚AE— ›<  ÚŸ€¢¹hÛz¢ÝÚé—_~ æc%áÔ4G7ñª;½(ˆ2ùÊhPQö�íBßl´m=Ñnx÷îÝ2çê÷uÐôn ` ð5è’!%<íAßl´m=Ñnpt•=^¿¯òž:×ïÓ»h0Q¶@‰2m¹ ¨ÍÔÖÍEÛÖí†8ÍÏî~:õ:'äèÝ@‰4phÉM &TÐ\ùÍFÛÖíGe;.ùæÊvê~µÞ T€.º 4h‚üf£më‰vk7ÕÞkIM—µw7à6e z7P2·¬— òÉè7A~³Ñ¶õD»µæ\ݧùVíï–ÒlbÙ,½(‰[ÂKƒŒJvš¸|VÔÎÍEÛÖíÖî¦Z÷‰ô ð•ÁoÊ*:ièÝ@Á¢Mjþ°µ7EsѶõTév›_Úøø¹M>Ìð/ͯšgu¥ÜÕÙ·©$–Q (€²îò šª¬ö|6¶ãÁÄ>„_×ÊÍÌ&žgßúvX¡¿ ¿ÙhÛzªt»}˜Ø sjÞõ§ðìKI5W–£�¿m+Ù1*9Ò€ânêÑ@SzæþÜ2´Nß³ëð‘zßww`cïŸæYßû9ü^ùò›¶­§*·›’-½ÞØf$òïMÙûèô¦—é8ŒJ@t‰Ð}‚ž–z]üÃfãGÖ_úas]ýj“ÁCMo¯˧¾P‰€¢Ö%�l6Û ÛYìÏNßÎ.®+ÑO+ѶØ[%Û-Èà/Æ‹-H¾„ µÇDc÷ÃÍßé íÍåÚù >Ö±îà;›^ ~kÁ?¶ÞœY?úºÝ¡y³ý®…'&þïvú/í›åëéë¿ÚÅÚë•Õïè=ÕonÞ£!eêݧåÕ/[›8Ö¶Ã0+®àùAì1ýª8öÂÀ+²uÿ´Ëéw« ì gƒó »^Fes»™ý`£þQä÷üŸñ.í^áyY÷÷•®¶%�ìrüÔNF^œ¨ïx6èU£+ѶØ[uÛMû© &¿†_Çi,þSB2æ7›Ž¾°îèb1†^{Öï>²“ÁWöf°´ëÉ—Ö;ñì*øåvå=µÞÀ³ÙMôÙüç:{iÞÕ>Áùb9쟭^o~e“áq¥GIWÙ›ˆQ ȈÊp‘!¸-@‚ć6žý>º¹°Q÷ Mó¿øäÏ-O¬Û÷'©Ñ«‰#ìÚ‰÷S0ØÏ¯<;éųE~ð6ý› ß¹Ml»Ì]• ¿®%�É÷‰ÜøM¿Wlª,Î¯ßØP'×Ý/m²O58F•íÙprµÇ1¸»ÊßDNä«­ºA¾‚øÓÍqv)LʬË;Ϭ×?·ËpÌý4Ùa÷̦kÁ»/HÌ<YœìûcúðÔüQÇŸîYö¨““çï[ïãÁhê?cµhÞÖ²Õî~9ý¿ú%µ»#È2VÏ:üñÇÛ‚À¤ ’²G¬?þ1ÌÀ+øê­²IA\^öŸgèøIY"é÷¸' ŠJéA~%�73{ãá««Cú™x¶ð>n „Š£¿¯:œ†û<rÅm:ö\{íu þl^ÿ0|Íú\)ªV»Eìr52žpQ¢¥÷42¦n» cgà·ÓMòñ½Üöì?Á¸þ2ö¾ïr²P<w“®æî¦Ü¤KäD}tEºd’3¦Qñ R˜=Z^úÕC[&(MLúÙ°v3ybñ·;ùšØú•›PÜßU®K�æ?™wòp³ôÊDΆ¯²†ûÒël°<±,Wùm»ŽLþnªÖnK;]ÔñÚ ÇºE¢Å]%]Ð÷ÓîMrÁø‡l¯†}šÚè‹øû®Î·]¨n¿)Ë\äˆ×êW7C°(³¹µv2È …Ùºì‘Oß?Ù4)™ço8œØûÜ²íšØª‘ÝRÛ—Pܶo²*øè?Ï_ì4±äJ_¿¿Ü+ÓûÁfÞW6ºï½ªl°ˆ­ªÚn:ÆŽn]8¬¼±«x¢E‚ãñO 'õ:¦¿²“`œO.¯¹3ÿäädã}gqÌKå¶Jй9»®•€E3Z}§ze\nÉô: ýŸ›%dü)DYúÎ0!“¯lÓ ˜Pæ³s;ÍãF¬].s—@m^z@QT ÀÕ‰7b¯¶{”s̯íâ«3;¿ÜþMê§šíÞÓ´,wôƒòÙ¿‚Ïþ8Š%FcퟬÛ%ZÄ•^E¯æèsDƃµÝuz²:‰_Ðj;_Ùàù>We'ñ÷Œ)iIŸ Ñ•öhÉNÕ?ÏfŒJ@ 4pDoÒ­Îýʸèò®nž-YøwõuCm4gª@ï¡uº]ëÆ³GÁ¥zàèe{MRV7Ýå§Om¼¬éç~°Ñ`´_‰AÔN—¹‹çÜRUðÞ?1xä~󣯕XŠ/Ž ¿ž*Ûn~_GVëôGöý«éfÀ­ò˜Ã£D‹,îMzk?_üuµ4f§o#oóyæ×±ûk¾±WÓ}–§Þ“q`‡.Ðw'ÚîqŸUž4«œÖÝG§2Û¦Ü|˨”¨zƒ‹d_žGÖJ>²þè?û d£ód3{äê//fvq¶ºéR“”žùµMÏÖu“€>È*i"»M0ѹ÷Ýö½i,?î=•©°�ýÌéy†'Z:ù{e£Ñ« oÚÍVÙm‹»©w»iéË'v¸‘h‘jÞ›T%Z⺚ɶì0*%r7çºz}úµh‚›*»‰Ù£U]vůÍLí[n@Qd €‚ðÇnŠ VÛÚó½nèL®¿_­ÒT õÛ«Îí,A|˜”h]q«Þ½IU 9¶)7ÖÞ†Q (÷‰¸®ö¯>œµ-{äSýåÖ%8ÛIm]z@Qh ÀG»ŽÚø±OÙ¼]̇ï7¾un½*Q½ÔOíÚ-¸g&~,¬nÉæ1Ó­ÍÊ6yq µ&ÕÛï‚Q (ˆ²Êh€ÑÀ«ÿ×ç³ÂUWÖ&[«ï^Ôé¯}ÿ°ú7[Åí“ê£à.êѶˆ£ÝšM|ôskšTo¿ z7#7ÀhpÑdâêþÚ4È`¡.A>%�wC°XO´[ºmWÑâÛòFÛ ÑÕñhR­èÝ@Æ’êìusm. f#áŠ@êVŸËÐî=W%�÷¦}‚ú¡ÝšMó±mjg%ÙÚ6Ó»Œ¨ô&Zg¯ÌA}êì‘·E`ÌÛT´m=Ñní ¹ØÝl[—OŸÏ½ÈHR¿-7÷àvêõ/H£÷‹ú¡ÝÚÅ}’­qM\23ŽÞ ä@½²®_ÛnøÁ:¸¢™hÛz¢ÝÚGó°û|e÷›|ÅÞ äLˆ»»_ŠJz¸ù¶}ò›¶­'Ú­½”Œs%¶*¯mâœLï ¤K…L4¨¸ºýú,£‰ûP›P4m[O´´¼µ+áÑ÷&¡w%PÆ Þˆ…}ä7m[O´øš‹ð7åSpéÝ@ÉtÉ0zÃ.[ù[ÝÎ È�àž ~h7$ÑUuÝœ«­ÎèÝ��ÜÁ"€ªaT���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aòŒ¼ÿÞ^¼xalllll5Ùž={ÆÖðíÛo¿µ_~ù%œ­Ûƒ ÈÐï¿ÿn_ýu0q(àWàˆúÚ‹ö¯&µËl6ckðöúõk{üøqÐÖŸþyðu[æfF X”=øì³ÏÌó¼ øG»äµí_M´K{(“¯Œ¾}µ»qoß¾môüLïr¤D¾•wïÞ…¢&Úö¯&Ú¥4못ægmúçhz73e ”Í×d¢ì~ëA0Ñv´5Ñ.í¦ùYÉ8ÍÍê JÈ5©~ŸÞ D5€n Ñ B O»L´í_M´ ÍѪ×wå<ªã¯{ý>½(˜êõ5ˆè¡´ÁD»ÑþÕD» ‰qêÚ4WkÞ®#z7P•ðhðP¶ ®vG0Ñn´5Ñ.p4»:}õ ݘ[÷:}z7P"•ì°äf;L´í_M´K»iÎUÂ-Z¢Ó¤wèÝ@É¢¾2úÍD0Ñn´5Ñ.íãn¶®¯@¿‰s/½(‰Ë (°× £ú|nÆm.‚‰v£ý«©úí2·“¡u:C›|˜‡ÝÕ¯6<°Î`bÂGÚD¥7îSé5ï*¹ÖôÕîu€‚iPq™{­¶£ŒB5e8!|˜Ø óÀ“_ÃÚ‡ ¯Ýhÿjª~»üa³ñC;èmvß~iãÞ¡õÆ—þ©C;(™¯³¯îœ›=F  îSpÝ@Sù›m3œæ³±õÚxöGøHÙ>ØlòʼïGÖ?Ì"Cv;‚¼v£ý«‰vi¶h½}—®¦w9SÖÀ-™©Œ5÷% ®*ôl0öì÷Òz}Ï®Ãoå©ZÁ%�E#˜¬&Ú¥Ú:Ó»([­·×ÿ©·¯šE {4šÚ§ð‘<U+˜hr ÀÜnfzÁ>?88²þÙ[».ùÍLVSeÛåÓÔF‡‹uÚÒKç×v¾ìënëÚhzþ„žjd‡î{i'öÁq܉=¶èkëØúÁFý£È÷{6ð.mõj;p¯ÕéÛè›uÝsù_Ÿ]\ç:ŽD¯¨S“`/®þOˆ[Š«nvšì£]O¿³A76)ŽlºŒ˜ol:ê.¿—œé ƒÍès$þü›½9³~'ò3Ý¡y³ûäŽõÚ§…Ý' ÷Œ¼ùAÈ幜ŒÌ›†ÁÂÍ¥yƒG¥ßRÙöŸ_Ùd¨ ±gÃÉÕ–?L¾ô´Žu‡oö:‰š_¿±¡ÆŽî—6¹þ>ZŽê—?›×ï'—:Þ\بwb£7³e½Ø·OÌ»NH]\{ÖO;±×Î£èø­öý‹õ#m;¿òì¤wýcnú7z?íœëõý ùÞÃþ”EâanM|µ¿‚þÊ—ÏÞ³‘è]û0R' êgÖëŸÙ›å`Љ¥/Ÿü§z’’éU©Çõ¬S0Iõÿ™ü?Ú•÷ÔzÏf7ÑgøÍ¦g/Í»ºk°eòÌA~”!<~¾qbª×]±ISÙö×qî¿7½¿ƒ½J×tü.~ïà49¨L¤ñà4ü½Cë{?‡—£òÇ¥2úGÉÉ–à^§=‚bG)euz®ãå÷6ü`¬ú~Òx«>´gÙã|vn§ñ9Aëƒè‰Fþš˜Û†YȈ+Ñquu/ÑIŸ”´Gy†2ú“3©± l3À÷}˜ØðÔ³«S°ðôîABÁJ%‚‰‚K�7\GŸ#éç3*H¥²¬çv\r9‘þ®J"“þ¯š‚c(-€ž_Ûô\å.~ ¾ æo²Êê¯Ó¸Ýßa¼ü`—ãSëÅÚ4õXvÛ^A¾ŽÉ—~‹?w8YÈJ¼Ä¶)KZä9¨ÿM>Û'„U¨X¿÷ÇW6I+ ê/S./-Ê,ú½ø¤Ÿ^γØîž Ü:yæ@ï·:Š(H¸ç!(OׂÉLK�è½?|g—kWŠW­ö‡SívÙᄀŸ|¼óUÓMɾd{5L‰Ÿ§ãO®¸)°ÎßuOÖ1ê�9ŠßäSŸ2ž]&çcXŸÿ(9hܨõŒK ðE“AÇ÷±â³»• & )ˆÝóàg]°NW^Ùhô*VæU‚üjªv»ÄŽ¡¤)¥lKÁñy¹*£1òK; “(‰å5wö³y'þx¿ö^îye6cJÌ)ÐWÿPO]1ê�ˆ�VåƒýÛ&„ é%9 Wµžqá%ÿèe{œ¸àN“Üóêæ÷Ÿ<ï«JÁDá%�7?Ú¸ÿp£$Û€(¿_]ŒmtþcÊû.žþTOµÛEÉ–Ó„ño‘á?ìŸG®P¹²·G6šþ>¡qõ8åä=¸9=à‹^û8r’þ“y§Om|»â¦×Œö+»JLüì“XÊO41ׄru€¹›|\Ý_eoòI4÷¬?ŽOáÊ7½3›ndL·eÌýßó†ë¾›¼"'*ç8=‰Nf¢×üÊÏ÷«^)ö¦[©N0±ØÇ…•�¤ø’Ïåùvy~f_å¼ß¾ò«©rí½zcs(¸¸ÂÙï¯V/;NÊÇ‘²Éè Î ÛòjÝb<è$ýLü — €ðûÝ_M÷ƒcïi¹Û]oâÎF¼D§ž%¶Éu€Äoò)¿îoÇ AeǬ¿¶t¦êò'‘’ˆè€ß:«`Q'Ñ%1“~&´~#è"ÃüÊ-‘¸3MŒÑI1²P›¯×©†âJ�µüÇ‘�_'ƒå$žm €OÉÑW÷\Z5ÕiDÑ.í¥@^Ÿ‚ëæá¦ÜlEïJ¦AFýÍT`BvÞ%�ú=Ïk¾O?¹ ³�ýNBýýN7}ƒ`²šh—öQ N´|¶iËfFÑ»(ƒ ¬AôÆž&f°Rj0Qx €N$Üò3¡{—�ø‚`>öÁlnKý@·bé½ zh—öP0¯¹Vm® ¿éŸv+ôn  ®îÏÝÔ£�_™û¦Ôþa;‚‰v£ý«‰vi6Wëêíõÿ6͹ôn gïÞ½[Þl«Mÿ×ch‚‰v£ý«‰v¹§mWÑâÛòFÛb(S¯9W¯­y·èÝ@4¸(KïÊq\Ýå8Ù¹uùÅÈvXò¬ˆÞÚ‹ö¯&Ú¥Ù4çºúû/^´îÊ9½ȈÕÕ»š?w·>å8‚‰v£ý«‰viÝl«¹Ù•촽Ȁy—µ×¦ÌÁ=¢&öPျÒ{EõÐ.í¢+ê ô5_·¡l–Þ dˆ2¤!˜h7Ú¿šh—öÑ|ì–®ÖÝ䄽ÈIô†[ &ÜpÛníFûWíÒ^ îÝjw ú›˜Œ£w9ÓÀ¡l¾núÑ`âVØiýX!˜h7Ú¿šh(ù¦«ïš›5W7 ½(PÒ͹m[··­&Úö¯&Ú¢¹Ys±}e÷u£nл’(°Öï+ð× ÃÖÌMmÌÆÆÆÆVŸ­î%<ù@¨t')0dkΦ íEûWí‚$ÊäkÜÖ•÷:£w��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>¡wïÞÙ³gÏìàà€­ÛgŸ}f_ýµýòË/álÝù@ÆÞ¿¿ ô¿ýö[ûý÷ßÃï ÍÜdƒö¢ý«‡ã²ù4¿}ûÖ?~´õçŸnžçsuÓѳœÌf³`0Qáõë×á£h+‚ ÐþÕÃqÙ. ìàknV»+ð×üÜÔd=È™úLø£&@ûWÇe{©tG%<šŸÕ^¼xdü›„ž @Y &n iÃeB¬#˜�í_=—ÝO§¹Y}ÁÕï7!)GÏ ¤ACõúD”á§^¿=&@ûWÇ%¢’ê÷uo]]sôl Dèk�QÍG0Ú¿z8.ô5W×u z6P ÊækQv¿mK{µ ÁhÿêḄ£„[´F_ÿ¯{Žž ”Œ%7Û`´õp\¶›’kšwÝj;îæÛ¦ÌÃôl dL´„—²ÚXn³™&@ûWÇeû(±¦yÖ•ã¸e4›¸ =(‰wiPY„&e°‰`´õp\¶ƒæVͱ»¡¶ée²ôl `ZaÇ-Õ¥‡oÛ`´õ4鸜__Øù ·ü›‚­ïÙuøýÀüÚ¦çëFæàÔ¼ëOádg>Ûñ`b¯Ëà’iú;•PkBý>q€‚DïÖ×@ÓœKƒízú ºÈ¤qh}ïçðû ;M@Y˜_Úøø¹M>ÌÃîãƒÍ&¯Ìû~dýÃ὞ÓýÍh/Ú¿zs\Þ\بûÀúãí&|hÓo6[§n—7YŒÛÌíÃdè¿Vcü”ÁwŸp« ¿mKW3â�9rŒ«·oÞ�3·›é™u;'6¾Ü’¯ÙiÊȇ‰ :d¦‚çéÙ`ìÙï¥õî9Yäƒö¯ž¦—Ÿ¦#;ìm¶-vÿ4µÑáCÏþÈÓ6?²ÞøÒŸ%ªA‰6ì7+Ñ–ŽÈû¸lMÊÞkpi¦›Žz·ä;M@Ñ%â^¦¯µÈH¦vŸÓ†ºÍ-ðOPg/ÿ¶#럽µëû¨^Õâúk%ÝÌl2ŽWÝO¯×ÆÚ`luß_Û"Á|Ü'ýLg}ìN<Žì0:öùïéͨoå÷;Öx6[^3ø‘ß_m›Wx·ÒUÙ^Ç:}}y_þ×gëûaîC)õ\š§›\—ψdHµ~nðPÝ}=?;ühÿΦ×Ãï‹‚ûnøýØ °wš€|‰äA×FS—÷×{úÁFý£È÷{6ð.WW‚Ì{ô÷#Û½²ðÊHÚ`òkøõݸ÷R+-ðûÓ幜ŒÌsAÓÍ¥yƒG÷nçmªÚþóë76T¹]÷K›¬çÛÝõ÷l~e“¡Ž÷ž 'W‹ý_’ª—Á¾ím<™…Ç^XÙ{jÞU|_k<~xkßÕx|”z‚¬ãø‘õG?¬ö ¾XæóŸÌ;ñ_':îŠ?Nœ _ÙU´!³*›Ô¸~èùo"ûaò¥u3Häh~vÉ8ÍÛõœ¯·#È2¢­µ«£že9@ÿbýÁØ&³p*³;½o}eˆŽn«U¿eR Ù;‰ âá×}²Ìϯ<;é Ísï) R¡¿ÙÐû)$d¯ûÙ¼~ÿÞ—¸«LlÓØ€”�Dïƒ{^±Ù¦šíÿÉ®½Ó°î“i½ëïù®=ë‡ÇC.÷åìañþ+Ö. ¦‡³éÆI³NrŸÛñFÿßeŒR{=I?v‚¬ù£-Ï¡×þ‹®·Ž^ß?ùˆ^¹Sp~|ÿ@|>;·Óø{Ö˜ó`dӌԤ•îš‚ ÈX´îOKtÕ©îo~õʆgëYšÀ¯6œnN�š¬oͨlŸ€n/¯ñ_{èøÙ+Ÿ^-HHyŸ÷‘Ñ„R`B7#7J÷lp~±V¦’i @âÙþvݧþ{zsfý蕘nô¤.ÀTiTvô~«ˆL~µÚ%1° ¤ôÑÆ(%[ú‘«£q‘ã´;°±ç™çý+’ÕKg–Ç]|[/Ï˦¬NïK¿Ä’6ã~6¢÷ÐioÂ=tù@N¢¥;ÊT?ØW–ôyJ€œ<ï”ù¼mZÖª,è›``õ–—¨“EocB‰lÑÁ>«KÄÁëg0¡¸÷[ª ¸:µÁx²œ¼¥Ríd#C—E €®¶œùûïÌÞ,öðrûrŸ~´+ï©õÖêzå7›ž½\?¹Ë¡}¬ÏßåZrTzûcC%ŽË5ʸ?M9qM¾R¹Óé««£·rã²KÀì•ì¸åªÁÎ4=½Û¼sOñd]]ƒ}F g*㉮‹_ݺ¿„K®Nbp¥ §kuß yt/'ˆ½ô®,ì#»ìnùÁ„‚é—v6ý-ü:"ñÒz%�»”×ø¯=<M(K v2*X§û=^Ùhô*v’‘½j“ò˸´c*¼dãXÙqŒºË±£ÀÞ•cj8=ßñ÷wKÜ΃N¾ŒÍ;ÛN‚²ãJxÔ7ì×um}F  ÑACÁ~õ´ îƒ]ŽŸ&ÔbîRs· 9šN¿t½i{Vù.’3gwQz0±m’N �2)ð_vySµ–#ýÞ<ïÕê~`ÿ>\î›Ím½'›€¨v}1¶ÑyK»úô7¡Z\_«‡‘d”U÷FÖï%•Eí6Fm=v‚׋-ƒ¬¢sb½‘+ßT’``'ñ›ðƒŸÚóµ²+Í%ýqÁ%T"øwõ¿Ø:VlÐû:ŠAšwôÜù±J¹+ðÕœ§÷ÈLÁ~´î¯:7ù( Úaÿ¯vN$óë©yè‡o6—Ü©tbÛä^/º*‹²ªZEçÑj‚ÐMh§Ocëð‡?7E&½E¬»œ”ô3ÿ²ïý ôîË_î’ÍÞMéÁÄ–:Ö¤� —�ÕAݯ»Áïö“„•Û®ìË?y=?³¯î±ß¾*L¢üã2‘ÝjbGë«ÞHpì%×Èw–Çò–“èÎjÁ„OÓ3;öÇܵ¥3U—)›\ˆß_£÷ÄV^“ÅU‡Õ=6zÿÿa¯ÜJV·Ò±înêö·åý;Ãdz[¢W¥8Ñòœz”×î†(I5oò‰Ý�©õ‰#«ÞHü¹Áwm{° æwš€^¿]ŠSuù‘•}œøúÍš€^M7O<n~´qd™ÍNdß'ýÜVz_)˃îQv瞣4i¥LÚg'ƒØÍ9–�û×]ÊW’vH\ô÷îIËe޾Э֔¿RÛ‰J?.Qòª·wsðëׯk£m=(™.j€ÑD£›üÁmV~0¡ËܽÈ>)+çÙ¨ÿ0a…“ J�Üë­]ÞO"{gËåµ<êéI|}ýÜW6x½‚”E €2¤ õ÷{_‘¸‚Éê)ÿ¸DÑâ÷É5iÉÌ8z6Pò.ƒ FŽš¦e°R‰`"öi•µUo|–�5ýǬ¿¶t¦.ï¯VöqÖ? m±ÊÒæ¥ýû–�ø¶ü}kï='zT‹k4ŸæX}½Ú[%9mH¨Ñ³‚¸Z|—µ×`ÓÄ˃HF0Ú¿z8.›-~\5Êb‹CÏr¤Á$š=Ð S·ÈB6&@ûWÇeA¶]E‹ok”w? êõœ òÛX KÏr ÀÞÕüipÑ¥Áê®ßlé7 on‡9~ÀŠ{ ´í_=—ͧ¤š[³Îluôl # âÌGëìë¾Æ.²C0Ú¿z8.ÛÃ-r¡9ºÉ7ÛFѳŒh�‰gïY)ÁDJ*¸+½T‹ëhW£¯2Ú¦_a§gKªÃ× B~»L€ö¯ŽËvÒ|¬DœÚ^ÿ6u~¦g9ÒÀ¡@·¢Ž[“—uÚ‡`´õp\¶›2ùJÈ)³¯d\Óг‚ÄköõjöÛƒ`´õp\B´œµæf%äšTÂCÏ æÊy\ý¾[V“úýf#˜�í_=—p47k.VÐU÷&”ðгiQÁ•ó財¶æm.˜`cccc«ÇV÷Ï"È*B™|]&dkæ¦ íF¨ÚiÜœ\çŒ>½���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ÈлwïìÙ³gvppÀÆÆÆÆÆÆVíóÏ?·o¿ýÖ~ùå—p¶n‚| cD\ ïyžýþûïáwÐfn²A{ÑþÕãŽËÙlÆÖàíõë×öøñã ­õ¯¾~ÿþ}Ø š‹ÈÉÛ·oí³Ï> 2Êð£Ý\0ö¢ý«‡ã²]”„SF_ó²Ú] 9ÍÕMMÆÑ³iàP6ß &mÈ Áhÿêá¸l/%ß¾þúë §> ÿ7-!GÏ  àÞ•ð(‹@ OûL€ö¯ŽKh>V6ÿÅ‹A_PÐß”ú}z6P e t™Pƒˆ´Áhÿêá¸D”rÑú}Í×u®ß§gs%< ô•ÝoÛÝþmE0Ú¿z8.‘Dó´Êw\ÿP°¯x놞 ”D™wyPƒ %<ÍF0Ú¿z8./ÛÑÜ\çD=(™²®„G—ÑL ý«‡ãšƒ›z.=¨� 2n€Q)š‡`´õp\¶S[–Ò¤g%qwô»,¾²,±Ù\ ý«‡ã²=švSí.èÙ@Á4 ¸o5Èð©¸í@0Ú¿zZ{\~šÚèP{×FÓ›ðÁfjêò˜»`Ä ¢AEÙz 4îÒ`}šŽìPëáȦŸÂËp3³‰‚õý¨o‡ƒ‰}ÎKkƒ ,ÑþÕÓîãògóN¾´É‡yøuó(æ’jjç¶%Õq€œ)˜w„¥ ¿ŽËpeîÚ³“ëdsû0Z§;°±÷OóF¬ïý~/?í& ´õ´ú¸T6ÿ‹±Íšã¯icy,#e Tëçe¨·_ù4=³/Æ—~¸]¶_m2xXÈåêV•)ø`³ÉØÝÎb¿wúvvq]zkm0Ya•>.uµq<°nøº;ŸFûñ'»öNÿAÇÜ{»ž~öû#;ñ~ vî?ÕÄÆƒ^ø³=x—v³–lÑÏü`£þQø3‘Ÿ ¾/»¾Þíæ³±õüçéô_Ú7Ë÷¥¯ÿj×ßʇm.ñ¦2ž&'Þq€ )W†ÀÕÛ+sP¿Kƒñ ¡cÝÁw6]x6¯¸ø¾Ên>^Ûô<œŒ:OÌ»r? ¶ºCófþÄà l0ùuõ3oάßY ò«Ÿ‹æùw}½=Í/m|ü¼ËÕîok¾²K�>Øåø©Œ¼°Ïª?{6èÓÎÛTµýç×ol¨c´ë·ÛÖ]ÏæW6j|éÙprµs`˜‡ª—Á¾ím<™…AöÇE@Ý{º9ÞãØŸmüýsëõÏì?vίü�þH%‘þïM¾ô™ž ̯ßÚY¿kúí8L¶?ß‹»þ±3ý› ãÁûÖ× æV‹+ª‡áï/R¿8¶^A 7_«ý›ZBKdD5÷nÂPv ž4!üÅúƒ±M–ï" îxvy•9þó7öýð¡õG?Øìæ»òžØÑhjŸ‚[»`Ëî‹¿Zÿð ë?:±ñìà±+ï©õžÿ»Ñ'ÿͦg/7&³­¯þÌ^®=ë÷й\]Õ`"s%—�}d£ìƦ£~é7V³ý£ÙÙÃ=J×îú{>wáñpÐ÷ì:|¸ ‹÷_±v™ÿdÞðo6]Eñóe`¾ìÏŽu‡oì:þ+&6<Ý»õø ó L¶üêÕ~€Ÿ”,ÑsÇÛhÛëí웟‡óÀŠîÙzp×ñüŽâ‹aè*|Sêö ò Å‹ºeòçW¯lxv¹<먬å46 »I>)§Éè/vºqù6¬‡ï YÕ´ (xî§±ÀaÛëÝM‘Ju‚‰ØÕ]’?¿ˆLÖÑàí¾%�¾›™½ñìNø÷/® ÅNê"Aߡ߯/ì<|ÞNÂÉåþ’úoñô÷T™üjµË|vn§‰Ùì¤ ?̈'Þã¤@ú4rÕ4JWGûÁ1áJgÜ¾ØØÖ‚üm¯·X¼Œ]]K÷‹£¹:Z·ß„2[‚| I5ùÕö“3+ IA’;Nž@¶•Á(  ²çz½‡É“J°Å³ƒ[^ïNôúýÂ&÷w•*®üI<YÙó  ~¸YO›A @‘<y«ëõÝ\ØÙðU,x_$ŸÛ°wb£73» ~ÿ‹{fàõ^GþßücÂÉk±Jol¨Äq¹f[ ›´oÇ4fÌ»NHc(“¸H¶ì—ìÈhÜL¼âW+n¢`?º`F]ƒ}F gÑÌ@µ evž&OIA»ë=IŸ@N’.ÃG³@{èÛ^ïN’N\òS~0¡Ò¨—v6ý-ü:Bíu›p·]’O»£çY–�¨­“®æHR_ ï»Ø7+¼Õ›y_Ù(~’Q’j“òË8ùOêÒçvsyn'Çݶq,%1ró£uƒmXª˜~å IFãfüŠ_`ËTÍÝš·Õ?4w×#Pèý0ªwGÿêòíºÅŒÁZR`èè{a–he1Iõ;pSF(íÊA‚m¯wÛ®6ä ô`Bïéyz{­íÛû—�,NÊ\IPÒvº>™'ö™{˜_ÛÅWgv~y¿¢‚,éïFµ¸þX)Á±YJ÷Ey#ë÷N€•?J;ntãì™õúçv\¹S‰gƒnÏúýnPºbvúÔÆkÇŠ~ö F믹õõvµ_6î¥Òß½×Í»ÙÓw]y¯×UøtŒ8@ÁâŠõîÝ»ð;e »Èfóë©y£ë%dsu‰÷(µ.ó7›jýùe‰„2ªCëvýÇü ÆeïUþqzâ& G«í|eƒç믹ýõî`Y6~³Òƒ ý½)79nÞ¬zÿ€ x°û„ÔguæÍv>ç¾ß¾*L¢üã2Q`/—³< X VƒÜØ\ʼn­^,Ãù³]¹ûnÜ1.°]®süjºƒw½Û„WìÂß_žhWÃçÌj؃®°»yÙÝO׌8@I4¨è㵕-¨Î ›:ýEmtøÝEÍdw9@¯o׳òk7\ºe8ÿßp€_ÕÛ/j£Ëu~c¯Â:ï½^o <ƒuÜãÛž«ƒÜ{­Ò¤ÔèÒý‰´¯­¬qÿ€­W6è3aÕ½)8ze£Ñ«ØjMÕPjû#QéÇ%JÕô5óéÙ@É4¨¸º?ý«L?š§ü`BÁyÏúgoÃìÜG»žz6ê?Ü\á$‹€à€Äox Nþ†ö|í5u2÷0¥hWÉõ÷™^!¸'‚Éê)ÿ¸Dês¯Üýгh@quš`?~ :u®ýÃv•&bËYv¢Dã˼ 8‘pËoêg{6ÿcõÁj©WVümÏRªmË�v²,óº½T‹ë#h>7ﺫçu¯·ß=(ˆòîÒ •ë45ƒ€u ý«‡ã²ù¢÷Á¹„Z[гœéÆZ7À¸KƒM«ûÃí&@ûWÇåýÝúaZ‘mUÎW ͵îµõÙ5mCÏr Ì²ô®G7ôPŽ“±[—hŒl‡å.Ë&î½ ½hÿêá¸l>]-׬vV’­Mó0=Ȉe t9Pƒ‰|}M9„`´õp\¶‡²úš—uE½-Y}z6‘è´n!s‡`b?U.¸+½WT‹ëChÍÍš£•kzé,=Ș»ÉGƒˆ&]&¬Î^¡, ý«‡ã²”€s÷ÊiŽnêwz6#÷®ÐÝtË:øíD0Ú¿z8.ÛM™|­x§ù¹‰KjÒ³hà ^¿Ý&@ûWÇ%D c(Ð×Üܤ+ïôl ` ì£+ï(‹ÀÊ;ÍG0Ú¿z8.áhV6_ýAór®ºÓ³¹5ô]ý¾¶fn.˜`cccc«ÏVçA>PD”ÍW­™›& ´} zh¤QNcw—Û¤w��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù@ÆÞ½{gïß¿¿ŠqppÀÆÆVòöìÙ3¶Šn/^¼°·o߆#f;äKøÙØŠÚö/Ò¸ãÏó<¶Šnß~û­}öÙgöùçŸ_ÿþûïaë5#ƒÙld4èýõ×dö‘;Ðü±‘Æù¨>eó?~¼œŸ5_7=ÈQ4Ø×¥Â&&(FþØÇH£¾Aÿ¨ÍÇ òÕn ú›XÊC  öõ/Á>²F€‘?ö1Ò¨oÐ?êIWÚU¾£2•óèÿM¹úN D°¼`ä}Œ4ùÍ l~“®¾Ó#üòË/ËË„ûÈFþØÇH£¾AÿhÍÉÊê«MUÊS×Ì>=(‘‚}d�#ìc¤Qß Ô_4çêôë¼ =¨�‚}ÜFþØÇH£¾Aÿ¨¯¦®¸C*BÙÝðã& 4À®0òÇ>F7n£>Ü ·*ËiÚ ·=(™>!W½hô=ìƒ�#ìc¤!ȯeéÝ•ó¦.éÐ#([ OßÓ’]hT¢S÷Ú?”‹�#ìc¤Qß T—æÖxIŽê DƒÌëׯ—ƒŒ|}]‰Ëƒók›ž¬NT‹íÔ¼ëOþ7?Ùµwºz¼3´É‡ùâ÷¶ù4µÑ¡~§k£éMø`†®=ë/ßëL~ ¿Q¶6›¼2ïû‘õwÜWÐ~@¾ØÇHãÆGT“æZ·ZN›®”Ó#œi@Ñz»\\9Nµ2¿Ùttlþ¹]ÞÜ*°î{v~y»ŸÍ;ù2ç@×þÓð„¤d&6èôl0öì÷Òz{í«û¹s€±õOûöpùxg0ñOav÷ Þ®nf6ñ<û~Ô·Ã]ßûwÞÇwöÑ®§ßÙ ÛY¶ÁÁÁ¡õ½ŸýïUôäû®}&ws¿;Ll<è…ïíÈúgoí:£¡Éý½¨.%Ú\™N[¸ G9P¯r—9P_ÙìA0é?´ñìðtŸ¦#{0šúáÅŽôÜ_Œm–gŒ¯×x0²ibü•¹ïíhŸ}uOw 0v=ÁS@ù4 .wUÄ ^šÅþït6öþiÞèÑžï=Y±Aœ”NϬÛ9±ñå-ar%O¾ïÒgòâïËËs;9™7½ö¿òÝ\š7x”Ù@õlûGOðv¥«ãÕßÖéÛÙEØ.ˆ¯f×´›m£òŒh Ð%AWg¯²}]Ù:ûå€ß:Ö_& ¸Øl|š2)Ƴd=x—vã'A&O¿ûÐüÈú£¯"—˦E&­Ž?ñþYÏÓ±îàóÆa–¹ë%×Ã×[™ÏÆvœ–-¼™Ù›Qß:ÁkiÓsz6síüÒÆ=ÿ½ø“Ìè›H6ûޓζ}•½ï½í|‚w㟠øûhŸÀ ˆ¼üj“ÁÃL‚š;íã;Ó>屢ë*yò}—>“çÇÏ7á½÷Û‹ñ%«þQ÷¼m>Øåø©Œ<›ã¹æÏ½ÍöÉ›’q òÕn ú›ìäPÖÞ ò îëtC&º£.©+X:M?ÚõäKëõWY²ùõ[;ëwíQÿ¡/ƒý~ÏòXÙóë76ì>Z>§ÞË¡ æƒÒÿ$`ü£.(ãüEBÀ£ŒíóÈkDÌò'³‡‹“ð¡ÀÍ… _Ù•û½Î¡Œ¼™…?·ø{º½ûA*Yèïtu$+{ûžà¥I åàídë{ßÞcþwÃ}Ûûdž'ßþS(ˆt ž„í¡+$ß„?ß³áäj¿>SÚÉwÔ–±ãGVý£î'xé’“2垪lÇûšË›´�A>öʨDGÙüz¬¹«�ëÉN“Iê¤íÉÃSo4;A¹!V¿z›\¢ƒ»Žþêò¾&£#w:ö½¥´�Gø_ìÔû)áïR�¾ªáŸÏÎí4þ÷ëµïStßß¿ƒ»;Ÿà©-“ƒ2Oðv¤ õ^'l+Ùq;XëÿÛäò¼—CÌëç„%^Ÿç¤ý›ÖgJ=ù^Ñßø|ðÝí÷!í(› ¿!'x{KëÃÅRI­ænÍáš¿›ìäÓÀ]ªKõøÕ]‡w ŠüËÂÛ&™X6ÛŸ´‡Ãx@ ¸5ЯÊ*”ñYݸš–_Ø—\&0˜ ’6wc©N^úUìý'þ­»[ïÅÐßµŸÝOðRK¢Ô¦¥àífïLçûïã{Øõä$÷“ïxÖ÷ü =üý´¾žÜgJ>ù(ø}e£Ñ«Õ•ƒ ¸±%u?ÁÛ‹ÞëÈÁ }5h¾vÁ¾JnëŒ È‘2ùî\mú¥²ûA0üd3HN,iÐ$ÿ¾‚‰È’Ÿü á‹m“öÚ{Q0¹q5mÒK›ôÓß €åéÆ$y¿À0Û2€]í`ìz‚§“¤(Ë>ÁÛÅýN⊠òwŸ|ǎŵã4íD1¥Ï¿[ÞÉwP^Œmtž}@éþ†LÔüowlæ}e£øU Ð<íî¯S¢®®ò‚(;à–ÒT–__—~9Pƒ~bF\Z°¤àìx3˜¸ùÑÆý£È%fMúƒÍŸ‹NÚkïe=H &“„I/u’Iœ¼’øÁÌÆMhiAí®¶XùÙ;ÀX Ö¶I;(ùo'zÙ•dÄÝj÷““ÜO¾ãïE¿ä¾·ô­¤ô™RO¾?Øåù™}•Ó*.êYõzŸàíh~m_Ùùm7Ls²Ju\Ùmu¯Âï† (˜2DÜåÀ2×ÍWœº2Íš´`i\²í-—`Ô¥pÏÝž?ùtíp9Qé÷ã+œ¬O šØVõáÑÉ(6Ñ,éñ´ŒùG»òO*Nâ—€ƒþ†öÜÕ‘®,NÒ{ÝGl"-ÈÞ†þö]NðRO´ŸÊ;ÁÛ‰Þ{F7ÝJqA~Úñ—v2aÛÄÞËÚ˜ôHi‡“Ögôx'ßZ.sô•y³üÊì‚üºŸàíÀï‡ç£±]Üõfú4-¸wòéF·^¯–b–ÜÔÀ­®Ü%òÈ]oY}ÒÏ›»¬.löæÌúð{ÝOöƒìÈ:ÎËͭϬ ;éûþ¦àBÍr=ç_Wï·ÿÙ¿G>hg}skH;cëLëCªþ.Û{ýC7q)@wÏýo£ /冹¤+ 9Ðkícç¼Ô“2Oðv¤>|ׄûîã;Ûùä$íd »¶ ‚¾å•7‘ìíZБÚgŠ>ùÖßPŸvrîx¿¿´6«è ÞV)íQ¢¦÷A>Ph¢Ëp–™ÝG=í`ìr‚·åLÛÚIK‘'x;ž,-?¾ÅO÷§çÉSpÕbã}k‹ÔQvò}hÿöìÿŒ¼=·V:ZœÌêDáãòýþOû÷ÿŸáÏ%lkmWàÉwˆ¦Ü°ëHíÈ=ï½Õý/Urý}Ðçw=¶3ÔôàÞ!ÈJ¤@^Á½[‰Gƒ¾nÃÇm#[™ØŠ}Œ4÷ òë{‚·ÛIWúßw`]®(f¤-Á½ÃˆHŒ+ÑÑ £Î}2.™{܇úòÅ>F°¢š¢Á½6ý¿ è‘@Ît£­‚x·²Ž·v¾ ùc# A~µE?·¦Mó.=ȲòÊDËp”½WÕ·íÒr|[Õ¸–Kïùb#PM ì]¢M%±mA2âÊpÐk Q€¯@Ÿ2¡™Æ–…76W[œ½ÊSå“o÷º¨6]U×ÕtÍÏm˜›é‘À=E3Ú\½¥8(FþØÇHãÆÿ¶¨ãÕNG%´Ïž= Þ[Ókó±€ ¥ÝT«AÈ“úòÅ>Fõ úG½´!«Or¢ACµ®|Ç-Iùò@€‘?ö1ÒäדpîÞ9ýMC àVØqƒ‰²܈‹,`ä}Œ4êôúRÙŽÚOe<MºòN ¦Z}-Ÿ­ãgIMÜFþØÇHãÆrÔ—®²+§$\S²úôH dIuüÊ*°±í³`ä}Œ4ùÍáÆSeõëžx£Gâêø5¸°±íº¹�ƒ-»MWÙëŒ �€hÒ€º`Ä���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aòŒ¼{÷Î<ϳ·o߆�+ll…m‹Øê½ýòË/áèÜ A>! ÌI.›6 o®¯ÅF¶zm_ýuÐŽŸþ¹½~ýÚ~ÿý÷°…Ý1ë�Ó`ìè/^Øû÷ïÃï ÍòQä£þ4—(ÀW ¯6Õ¼¢+ÆÀ® €œÌf3{üø±}öÙgAfíFà…"ä7“Jwäk>QЯ9…nÃH�äL5ún`Vàv"ðBò›MÙ}Í)Ïž= ÚYÿrÒ0�ÐÀüí·ß.e20íCà…"ä·‡æÍ+J"iÓÿ¹YQŒ@4�» Œ.·r3U{x¡ùí¤Z}W»¯2Qj÷!Œ@ tyU²6.µ¶Š@ß.Üœ‹m €’hpV6_³²û\fm6/ ¿Èkõ6µµ2÷,³‰$Œ@ÉTW©zJ Öª©D3x¡ùÍ¥¹B‰!eí5g(kOrÛ0�%q¶[y‡ýf+7ðúh×ÓïlÐí,ƒÀƒƒCë{?ûßûd×ÞéêñÎÐ&æ‹_ÛêÆ¦£nð;‡£©ÿ,YûÙ¼þáò}uû~éÜþÊOûR½%­¦Ã\]äsëkÀÖeVjòÛAí]޹ÝLϬÛ9±ñå-aòµgý¾g×á—·SP7°Áä×ðë<è5ž†A$n×¹õµº÷¥úpóDtåVeþò‚D³1¼Y3¿]Ê ò•%íYo|é‡hÛ}šŽìÁ^™T=÷SÏþ¿Îƒ^£o£éMø5¶É7ȯ{_ªÍ®)áÄ}ä9Š®|@6¦ÝŠò4-J 6¶ÞØfQÚ6Ÿ¦gRof6¬<GǺÏf7?™wòeP’1Ÿ­ç¯Óiß zË×êôÿj×™Ýà±#ëž,ž§;°±÷MXúѳáäj3xœ_ÚøøyrÙ‡ÿžÞø'�ðµVïËý¬þ¦‡‹×})1ñ¿>{k×·EªQz=ÿ÷;þ Ç7n?ø›ÿõÙÅõ­AoQÜ~ÏVCúRš ¶­æ wÅWÉ!’B¸ ‚| n€võöÔPB“u)>Mmt´Kmô¯6œ&fRç×olØ;±‘7]Æók»8ëÛ᣾=:vAÞÜ>L†vØ?³7³°”c~e“áñ*ó«÷rè0½Þ?p;·Ë›O‹2¤€ñÃÄË׈˜+(|hïÒA#n.ìløÊ®–?¯×éùAþËà?ø{ºöÏë½úà›Yøšízòeòû.‰ ˆsQ÷¾´MEÛ6~ïåØA>!e[ܲfʾ°^1œÒ‚|e=w TR3æ~�5šwõ1üÚ «å ±ÊÞ>ßì¢eA†vY§­ì°¤‡ÙÞõï­èñã›nþÅN½ŸßݰûÔ¼ë°PD×éyìï×kï_4ŸÛi¼TEÁ惑M+r·h®A~ÍûÒ6Uo[%‰ö±/‚|  î5ðjrUOIâÊ òw®N¹Q29ÈÝ(ù$RŸ­�îe,°‹Þ4»Èι÷”H< ƒñøs9)7ݺòŠ0 ÝÜNWAþ‡‰ ‡ñ÷;؉ÞÿKÆKPRö[YÜ>ÈC½ûÒ6õh[!ØÇ>òŒh°Õ ÛèÚûà’¹jd÷¬yu—¾U;|³W-ô¢´Âèº_ÚDõ¸5•Wàµ2¢ýV¦Iàü|i'‰¿¯ìëñªîZYÏ/âYÞhÆ<ö^Tqä²¤ë™Ø•”ŒûÖOÓ3û"“ ­ÞËæ¡;¾É/ȯ{_Ú¦m½ßKK0# A>1•èDWÑiÔ‡•(³{e¸¢kžG²¬·RVέ»íÖâ®§|¯Û(xJ®^—À-2¦‡Ù×v9>±ÎÁÃÕsû}ãdãç¢óõ÷²–Õ 2± 5òkÚ=¾Q‚“Dý'aYÆ;ehý¿%¼1t%š]®†Å±’G_«y_Úªm›&š`"ØGA>•ð4nu2ùwVJ¯€'meš5[¸› õüï¹uÑo.Í[·ÿȺ‡.{ºà–åN4êììò¦ÍXIÅZ&6B'Ýtë÷§+?x?ÿhk9þ`µ¡=_öMý]cWRÞëmßcÒó—+· ¿î}i›š´ím\rIÁ>>„ ÈYÒJ;hŸ"ƒüàÆÃ0Ø[߬²ÚÑ«2[ôjËܰQÿ(ü^Ïçv}•üûËO,M}~=÷oý„ÓË÷û?íßÿýF~6¶­eß㟼꿯ñ?lêN×^¿k ÷½2ý[£w½:•/÷>³Rß¾´K›Ô«mÓÉG‚|  xÝ S Æí£€È› XÑlš;¢ŸÁÂ|‚$Œ@ ¢™eùY§ù¼P‚üf‹&‹¸2ŒÛ0�%Š.½Ù¸›t±†À E Èo&%‚´jÁ=öÁH�”À Ø.À× S´¹ÜÚ\^(A~³¸{ºÜ<шPF  ®†òñãÇÁ€­�_—])Õi¯ –YÜöaZ‘my3f=¸÷ÝVé7 onË{+¨‘«³¡pÌ:@Δ¡×§àj°v5ø”å´ÚÈ› `QOJ¹¥0ùôtÜ#—…QPïk}HÚ‹À E ȯ?ͺâ«ùƒÚ{Ü#e\T~ãêì5HSg‡À E Èo·ŠŽ2ûdôqŒ@\í¤6ùÔO"ŽÀ E Èo÷®|GA?°F #ª³gŤ!ðBò›IåžnùL’HØ# ÈÑš|ýŸšüv#ðBò›K #%’ÜœB ·a$�r¤A8ººŽ²0¤Y]§}¼P‚üæãÆ\슑�(ˆj+£ëäë_}Í Uí@à…"ä·7æâ6Œ@ âõûÊô+#£ [37/ ¿]¸1Û0�%sõû¨Ùš»¹à‹-¯Z}Dä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãäøå—_l6›ÿq µ@Õè¸ô<­ÁÛëׯíýû÷a‹·3ßÿݾýöÛ`Ò`cccc«ÇöìÙ3¶oŸ}öYÐÎ/^¼°·oßsu›äRÆ@‹eÚ6  ™úê6lµ'mÚïÞ½³¯¿þ:hoýú¿kz8 Ÿþy0 ({€v#˜¨?Ú°YòÛGI7ÍÇÊê«í5Gë |“Ëléá@N4 (›¯ÁDÙ}êõÛ‹`¢þhÃfQ{Ò¦í¥«îª×üøqÐð7±~ŸäLƒ†Ë(k@ OûLÔmØ,jOÚ¢œæfúêJÊ5¥~ŸD«ï¸e ÐõG6 A>’Dë÷µéÿu¾ O ¦úºL¨ÀÍG0Q´a³¸ p\F¿I+òÐè„Çe ô/%<ÍF0Q´a³¨=iS¸Ú|Wª£ä[“jóéá@‰”É× ¢Ì2üh&‚‰ú£ ›… ¿½”TS†Þ-wÝäUvèá@ITûç]¤t§¹&ê6lµ'mÚ.Iëå7}Þ¥‡rw®™¦-Ù…MõG6KýƒüOví.ÿŽƒÎÐ&æá÷à(;¯y6^gߌZ@È»zà«æ:ü¸æNZú{Po´a³¸q¦®=ë÷=»¿Ä‚[_[[?žQ È‘.º5òUšÓ–Ò¾·†MZ &Z¬2m¨c# \Ø`òkø2Õïݽ×&ø4ÙƒÑÔoĵýÊ93 ,.‹ ¥‰7ôä©i“VS‚‰6«^þl^ÿ©y×;Jjr‚^í ÿ£]O=õÂ÷Ù±îào6üÙÆ³?Ÿqþ°Ùø4õdo~=µWß¬ß OÀºCófÂï†æ×6=X7Ü'n;ŒÁóë ;ôÖ~æà k£éMøÕ¥„›»® µø3] tkàk«äåÁù¥{;èômôMdP÷¿>»¸¶µÜ›þWÿ™hz6ð.-ΗÙÄ#ëž,ž§;°±÷ ºþóû?;œ\…Ï7·›Ù‘ç‰=׆m“Ö›½9[MXÁë®OZóÙØzþãþKû&2!uúµ‹ëáOK¯z«\~šÚèÁȦ‹ñër‚îÆ…êù`—ã§v2ú»MܸæÅg}ë$^!ùÕ&ƒÓ„àߌ÷Ç6OlvŽÆ×NÂ~³éè‘õG?,ÆæW6~a}ïçÅ×rsa£Þ‰ÞÌ–ãöüú »Oªw¢¹…«ÑWÛ»O¶m2fàžtùÏ ÊÞW~Ðø0±Á¡ä/ëv=ùÒº½±Í–ó‡íGÖŒ#&ŒÈ€® ãÐóšhøô¹]Þ|²›éÙòùæWžôâÙ#?ðŸþ͆ÞOë'´Ië£]yO­7ðV“QÀŸ¤Î^šwåø¹ÿ'í°fo–ï]“Ö±õÆ— ¯—¿òƒ µçCÿ}ø'e£¯Â19þ×goízm§(‹øOû~äÁÏ(‹îó\Oˆ6TÖÕ[î÷pߎ‡v’Ðo¬&~H˜`Û ú’Úù»H_·Ãõ‡ý²·÷9Aß§ÞŸ{Õ¢qñ+ÿï¿Ø<Ftì­Ñ!ËÇÏw.Úè7Á¸þ(ù$!"89HzýšÒ¼í’rM¾OŽ ¸§h_ƒ…‚ü*óٹƃ†]²‚±Éd=#tcÓÑÃåä¾úž°ý‰|€G¤]ÖO›´ü““á©gW“ŒêŸF²N žoLZef«Lèä©·–±[dâÖ'ø í\NÜI ögµs;¹«¶|ÛÐß/—çvr2²ï—ûÝÂ/þêÅIu÷:‘}nlj'­j¯[NЃv8óÑȉ°;Ù“{goï{‚¾[ÍB5ƒü´ý·Ejy”Nâþaã´Ãõ }ôd/8a÷üùì_±vò-KztÒÿM0çy˾Z_š«Ý‡a¹+ðMªÛ'È2’4XT/ØWpðÒÐbACl¢ê8Ç›5šËŸYdË\мD(è~dÍ?)`Œ?GtKšœ'-—åKxŽ`‹N\þD9|;IˆŸKï±tj£ÓóX&N'gý[jjµïWÙÙÜNî*.×6T0ÝÿʦñÀ*¨»ï'}ëmr«çʼnÀmW¶‚öÜ'{{ßô;÷Ñý¹±£RîP‚•œ¼ÐIÕ묬Ë'.˜¿¥ÝWxÊ»:š%è¢uûM¸—Ž ÈAüÆÛêd4a>Ýä£EíôÖê8ýGc™C ‘ì®J€ŽÜä´ üî’=Oþ=&zM”_Ä'¨|…]U"˜P 5Œ—wÄnÞ Ê<\éMô$ê4ü™Oî*Nï;Û²òiÒoº½ý}aU†£cý{ó¼W«Ì¿³oöö¾'è»ôÑŒ¸×¯”-Aþüúÿ¶ÅÛ'>;ÁÉ–¿Ïâ'Ù§w8iÓû8º}…$ÕGi%c5¦›r•¬SÿPÐ_gù@Ž¢wôëßòïè÷'Ì“/·d¹5iœØÉF9E<´þµ2~Ë:Ï ð[\^O, Ú*eÒ ß,ÁIä'O>®ªL|šžÙñ¶ˆóŸü¾ñ`½ÌCÖƒXûdxrWuùµáN@S‚ÁÝNГ¸’íe1·eoï{‚~kÍÚ³ Çå:Ýûdýþ‰›™Mü“¶^âÂ)™ùø¬y‹v:ѱQÇïá‰/#Ç»ÿzoF'Ö[Þ°8±? JòV}jq¿Í#¿] «?]yW‚Î]¯V‚înòTææÜµ ÌÑDñ0œ„ÄEË�4ù‡K¹EWvXËô¬2¸Áw£¯¡Àñôéú$â&ˆÁÈ&»NZ>0§'щFt3ßW6xþ&¼1/–ivÿîâ”L¨›å‘Ìkp¢v/©ˆˆyÜU_)A¾‚³mfÎWeQQ»ž §Y¤m“ž½½ï úí}4KÕ ò}A»ùúÕtuã±ö‡ûÞÆ¶ºâ¦{<V79ëfæñêFìðæjTûúÚUŸŸEÿì÷»«Ÿ ®ìÄ’5Öä›p òià(g0Ñù°šå Êp†‡ÄÍ6ެˆÒéìïËI§k/Ç£H)†~GÙ§Å u•?.K5Âç[^òçN“ÖÂúJ‹‚WS·ôgôo‰¬ñ}þ‚…]èµË=‘sÖOˆÖv}½\é%rãgn'wÕ—_ê&د¬¿vSªò:Û w²¹´mÐnI™ùOЃ¾Ð³þøÇH ®|Ó; ï ¸Köö¾'è·÷Ñ,¹qí¥+ë.ùÖÔå4éá@ â—›vG?Ö•L¬D¹¥£'}®&ZësŸ¬2ˆú,…¿¯>DçÿèvíOî{YœÜÕŒþ†üÄ——TÉÍ?lº<Z?]ß"5í·œ m¯µãGÖ_»ï"^â³cö6«ôûhvÜûDûhîÞ`Û䯢‡%x÷î½xñ"d\í_“š¶#˜¨?Ú°YÔž´i{(±Öä¥2ÓиOÚÓ�£ÉEA¾‚}4ÁDýцÍBßî~8W"«,~SêíwAränèÑࢠE7Ý6é¦ì†`¢þhÃf!Èo6%ÕÜÕr•æ´5¡F2æêíÝ:ù ð¿ýö[jî[Œ`¢þhÃfQ{ҦͥyX 6µ±‚ü¶Î¿ôp #ÔÙ# ÁDýц͢ö¤M›OÁ½»ÉVɶ¶]E§‡÷ä–ÄÔ ¢›¸ î‡`¢þhÃfQ{Ò¦í¡$œ»é¶Ms4=È@RŸ›jáLÔmØ,ùíä’r*§mÕvz8!Wï.ºz|Ý„ö"˜¨?Ú°YòÛË­¸£ö׿M®×§‡9ÑÀ¡•t¢7àêë¶Þ�ÔfõG6‹Ú“6m7eò5?+³¯ ÑÃ(“¯Œ~t)Ͷ­×ÛfõG6 A>%ßèk~nZ =(˜÷ášdT˯€_³5s#˜¨?Ú°Yò¥„›qêMZr“”Èݰ«A…­¹› (ØØØØØê±5¡„‡ �€[hÒ€:aÔ���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚|��� aò��€†!È���† ���h‚| c¿ÿþ{ø?`7 Åe`¿h2F8 c ØØØØØØš´¡~h5 c³ÙÌ?~lŸ}ö™yžGf[1–‡ý^}´Qùhƒú¢å€œ¼}û6ô?ÿüóàÿ@‚üò°ß«6*mP_´#eñ•ÍW°ÿìÙ³ ËDä—‡ý^}´Qùhƒú¢å€¼ÿÞ¾þúë`°|ñâEð5 êL¢å`¿WmT>Ú ¾h9 @Êä+£¯A“z}ˆú“h9ØïÕG•6¨/Z(jôU«¯2ž×¯_‡¢òËÃ~¯>Ú¨|´A}Ñr@‰\½¾~êõÛ‰ ¿<ì÷ê£ÊGÔ-”L%;®^_¥<Ôë·‹ÚI´ì÷ê£ÊGÔ-”L¥;®N_7å’Ñoµ;“h9ØïÕG•6¨/Z(²õ*Õquùß~û-ü–"È/û½úh£òÑõEËR–Þ•æèSqÛú!YóÙØŽû~Ýfê L¢åhý~ÿ0±Aç &¿†TÇFùhƒú¢å€œ©æ^+è(k¯ÁRAþ/¿ü~·æ~l1´Nß³ëð‘6SŸ`]7¿¾°óAo¹o‚-‡þÒöý®“íÞÁCÏþ©ŽòÑõEË9Q ¯€Þ­ž£@Ÿuñå›Yo|é‡ûpA,B76ê>°þøG» Ê û½úh£òÑõEË‹ßHûîÝ»ð;u5·›Ù6êÓbëÙÀ»\aóK÷:á÷º6šê;¿Údð |ìÔ¼ë‹ þò9¢Û¡õ½ŸÏøh×ÓÚ÷£~øóë<›ÝDO bï«Ó·Ñÿ´ñÉâëNMÊÜ>À§éÈ{c›pÈ~¯¾rÛè“]{§‹c´óÈÖÕ%Eߘ7XWw¿´‰?¶-ÝÌlâ¾|`çÓëHBãgóú‡‹ïŽlúñÚ¦çáÏwž˜wåžëƒÍÞœY¿>Oð\CófÅjzmÔ-dÀÝH«¬}Ón¤_yvÒ‹O.~€=ý› ½Ÿ–“×üú {§6¾t?÷Á.ǧÖ¾±ëµØÜ?!8~n“éQ\PFàOŽãÉ,<‘Pö¿9ðO&_Z¯foÂ÷µ,ñ((@ÌŠ›À‹s[ð }ýpù½ÃÑÔu«à±È ÙµgýÈÏ}Œ”ÙtN<» Úa‡“D_Ü/¿Ýò+'ÑóçaQãÞ¿Û_‘€1ØÂ“a?(|³<™Õ–pB»Ó~öÍ#cd[´¡scÓQwù½ô“a¿ŸLÆ6躓w¿ÍÎ/–Dzû;ý—öM¤´ªÓÿ«]DƒÞ{Òs–-è›.˜îc8 ¯4ýæïË/–W%ƒ1°?ŒŒ[JV|gƒÞÓHð¾Ü—ôçoìûáCë~ðÛû»òžØQÐVýÿ?µÞFbý³—Ï•·*´2 Ò—½×¿õÏÞ;¿Údè€I“е:i?˜»<·~O“á¯~€ÿÔNÎÞ®ø¢Iòxß@\çéêAÿ9†§‘àÆÙxOÕç‚£bì<̯üv÷ƒeÉL´mã}aÑ6Ÿû'y'6zã8óŸÌ;ù"bw=I\P�ú°°AsÝïêç‡ÃØÉ¬þî3ëºÑ`?ùoì„G%KgÃW±þ½}?m8zŒá/íøEì*™£“Ž'ÉesÁïùÇÛx²|®ÅIôC;Y¶ÙâÄï0r¢½ø½ãLKñÊ0c †OS¹v|Om1ü›M׎+Ñ~znÇkûÄðõl8¹ÚÜWiã[ð{OSÚ3?å·2¤ì}“êð×3’ ÛF@1.Óµ)È`m+¥Q6òÕ7‘ ¢ÛTò£|¤&Ö§a`³NÏýÅZÖ²úÜßWˆ}‚‡›mÜè!?Û?À?9IËІåñ²…À>'‰¢çêv#h®û=(aë­÷Óà1å¿é ¿9þb§':¢ýð4ìïζýì žûÑû.í„J'‚/í,x1k'è:Ÿo¼ž²Þ2< ;6R©ìðᲃ1qÙoWýu>;·ÓÄ“›¤ _Ïyœr2«ýºº’¶¹ÅKó§×E=Ñr@¢+ê(àWà_Çò½'ì0øçA³L'°%{(Afòuc›D3¿kÁ…‚“§ ÁŒ&Ó/í¤à ð¾Üä¿;ÁM°ëôÏír#CJÌX/ì}’¨,郑M :KÓ{Èöwôóð*Êèbqò»vKÒæNjC[öóBX¢“c•ºyžyÞ¿bWl"‚×;‘ðéñÓóä+mkÇ¡Nà^ÆÞOö™fí‹R­í§ÅÕ‹EIo™Õ÷÷}êß­~¹ )iû> ñ­Ÿ˜Ä(Kém€;£å€œ©t'ZÊS§O´MÏN% Ë”Áß(÷p¶—cYþhq ž Kz޹ÝÌ<?À‰eNkÀuùÛ7xÐ}±þŸÿœR¦³°žÙ\·ïIâ¶çÊC¾û}º¥bƒ²¥ÃÈ•{žÐì½o\}~Ú=* Ø^KÉ[p|º«pzÿ_ÄŸ;û�µô�síÄf=`Ú$Ø¿iÉ‹E™ÛIüêÙÚsÆé56¯”©ô6ÀÑr@Aâ¥<Z…§ò¥<ʬŸ>ÜL+ ¨°Ñ` ün² Ê=ù~ô²¿.oëÒ·{L7÷ýÝFý°~;Døæ×S󂛣س( ê-³ËþsxCëvþdÝ?¥eǪ«¸ Ÿà!ºÿorNÊæ'•"¬ìw’¸ý¹òû~WÀÜQ¦÷}p¼ªg÷m˘o¸ã¾Y«_?Ö–ôž“N t<Ÿ V')þÏlü~R™Ñý”`êDõhùw®ÊsmÉêWZúvv®¤£“,o”x‚¼þœ›tBxz?ÞtÃüW6xžt…4_ùõEË‹—òT~%žøŠ*x5 'Ž«åJ ÜÏ/—Ô”Efkµ²Ë‘õGÿa¯–KÌédádµÒˆ–Åü»?Q†?¿Z%$ ìßëèæ¿Ëÿ¼uÕž*Zì‡b†âÝ‚‡°Ö‚“ð$Εš,m¿2³ûI¢$”5ä,÷ý”etm0òûj÷,vS¦Êwv¿Ú¬¶3´çk7dÞ²Ÿƒ�ód}?Ïs’Ðf²í¤Aõâ=ë/ošW矈ëþ ÷žb®“vuàŠ:66­mAi™NšõµÆ´_Wß®|„ýz¹Š”ƶÈMÐA®V5Zß6WZÿ@¸Å²«q²Xz¨'Z(Q´”Gkêש”§rÒ2ç&ú¢l ‚òƒðýh=Þð>œh-ƒ„-Þ[Oõ}ÂɵéyÖ^#_.°;Ž]Ñr"uôÁßܳÁø6u'?;îçOÓ3;î?Z_:sm ZYoÇõ­³^j[Ö38‰^Þ#“ÐôpôÄ~Ÿ²¢[èùP.Ú ¾h9 D*ÙQp¯A´Î7è–îæÒ¼µåýê#Š˜DKÁ~¯>Ú¨|´A}Ñr@Á”½wµù<ä+ØÇT°öaNñO•¬÷7 xì÷ê£ÊGÔ- -°¯óúȆú“h9ØïÕG•6¨/Zȉ>W7Õê[ ’?&°Çõ &Ñr°ß«6*mP_´¡¤À^+éPg4ê'L¢å`¿WmT>Ú ¾h9  äÐk0TIŽçyö؉ú “h9ØïÕG•6¨/ZÈ€úh ¯L>>v¡þÂ$Zö{õÑFå£ ê‹–2FÉö¡>Â$Zö{õÑFå£ ê‹–rÄÍ·¸ú“h9ØïÕG•6¨/Z(Ëh"‰ú“h9ØïÕG•6¨/Z(ARÀ¯ÇÐ>j&Ñr°ß«6*mP_´P"eñ•ÍWï‚=66666¶*m¨'Z��T&pw=���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä��� C���4 A>���Ð0ù���@Ãä���böÿJ¹]òÉH����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ar_Vdata.png�������������������������������������0000664�0000000�0000000�00000007465�15030617045�0024054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¶���u���"ÄÞ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÊIDATx^íݽkãØÇñü®Ý¦K·•+7i¦I“B…›S l!PØb` áÂÂ…CØ6Ë…!`.\¦ ¸[.Áp‹an†e .†ÌsÏ9z±$K¶•È–sôý€`’‘eÇ–õ;/¤#�À"�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*ð"ßeìžHÇËcô�‡`ò3™\¹Ò;:’£d¹`ö­ ,îeÔïJt/‹èW•Íq’퟈;þýÇzÏ_ºú1]_&©— D°ËÄ?•Žs%÷óGVEß$p>dƒsŠz‹@!‚ H{žˆß=“ÑôGô‹=ÐÏyR­÷õ<Ê»×ô‹l°Úb:’þÑ‘êý*ŸÜ~2´Øq~“»ÙS´–b-L/Ìpc2 ¨—Ž'ãÇ‚h™OåÖw¤“ÚFÏ dZÒÔ¯ñ´´÷õ(ÓñHÜ^'ÜVÏ“`ú—ê°¹™¡ËÅìN®R_¸ôÄŸÌ£5€ö Ø`¹…<Ž=é:C¹Fѱx±wZ8?¦ƒëx›!>=?ÖÉ4¿ÅW gâ÷’‰”ù ½yXÉ6ýú.å´¨÷e^ç™8~ ÂO2»ûMœî;qÎË^¥Ú¶ßˆ;Mžs1»¯÷¾Úð&` ‚ –û!ÓÑåÊТ°"ÙÃþ³Ê«÷[„ ©r|-x|Ù<š~}…#eÛ ƒº“ê-š^iQÈ-E°ÁrßU¯ç×Ü¡°âߢŸcs™øÎÃw:ŒœÕÇ›JÉhȰpÉUV%§·uzY<Ô™ï-&UœzÈó“A ÁxÙ{Ú†`ƒÝôÜÙ»|o¦$ÀL0m3|§Ïa;[}ü Š@Jó8wÈ,úq)Z]3\ηµm@°Án…eñ%½$&§[ é•õ¦ôï/®* šaD§ Àôkéæ‹S2¿¿§“-h)²õ\!`!‚  {7Çù¹4Ç«½¤õÕ‰)¥ø$+ƒÑŸ¹Â]%éÉåø!Fúõ•Ž˜óéÎÅI¶õ(ÓÀ“^Oý®×z‹Qï-sÎ ¿égñsµÎßÑï€v!Ø`)Ý+ë&ó[Ý8ÜÒWû0=%=_v–¬—Y’ ='wQ¼Ž^2…O2›ü¾,Ï?ê‹;ú#ªjÔ²¯+»t³óv™ÓôüÙïj;ÿ‹¯×ý¯Ruœ^jz½‘Œã P …6�€U6�€U6�€U6�€U6�€U6�€U6�€U6�€U6´Äº£XŠ.£ Zb!óÉPzE!ÓÄB°;C°¡Eôµß§îlZ:ï%xHÝQ»F‹ÙDn®}q:©çëV¼ �€­lh}qáÓl¨ÅKo(“äbÂ;0ÿSFÎqø\°3ÚgñU‚A0¹¥3äa‡Ù&ó;ñÍ’‹n:  Ú) ˜|¸u¤çßíðîÓñp(Áì Á†ÖZ<2HÏ{%˱ ‚¯÷H«‰¾Ÿ[§·zn�µ ØÐbk*%;ÝïèžfúNÛýøf¡�êF°¡åÖTJö~‘qrƒÐ:ÍMK榢�jC°k*%;ΕÜï²R@í6@K—âg–Žô¼[™‘mÀ›A°‘ÅìV¼ÂJÉcqFî°R@6 ±ùýUö !ÉÒoü°»JÉ}0Õ˜'⎿G¿x…:·ÔŒ`2žd6þeÿ•’¯aN8W¯mú#úE±Åt$ý£³ëm£Îmªç‰/'þDòlÃç‰ø]½_ði#ºú÷ôÃÎ.U·Á¬x”ûÑ`Ï•’/µP'OºîX½jÔç‡LGÎW®~S µ?>ê8BXqÜľI°µiU]Öôåx–YðÁŽ2öŃŒ½þj°©å *%Í9q?1$X ½ÿ^¨Æ‹+£ñ$pâÿ’`äJÿ«cu¯íÝH¦‡<>n†¬÷ß³'ØÚÎìxu]ÞÉ¢`ÓÞ@¥¤\{Ae}Î\/yíÒÖó“Ì&¿‹›/žÉl{›méžÎYvEëϧrë;©^±zOÝ@¦•Â#~®cqü¤^»úyøå…ŸÏB½´˵ymz»L^ÚCWãX…b2¬­ój2KÍÓ¦î¨ßç§™L®¢õ3w›Ð¯i,#7nhõÅ îe> d¼§zÏâgö×h=óÿZÜæÿôæ_©Ï¼ÊÕvª¼ïßeìþ$ýÑý–Û®ÁÖræÀØ]«oñp#ž÷I‚àZ}ùNÕJÿ;P‡rõÆç`ÖUJîô²[[ 0åa•¦jïK0áXúÎPn§ñ–¢¹ÆÂûÆ­Û–>eæ}Ì{è|\áš9Á³ÜAW™ßÉл©xjý|}u€ýœ„bø™¿¼—0¿W½5"/¿nhø7{ªç75ú«sNú;xúó'¹ö΢¿ã‡Â;6ó{áçÐw| ¢P\̾ÈÐéɹs&§Ñg`.×÷$H>?M®ÿ/¿ŸšQšŸet}™|ææñÇUî8±íû•w^yŒ©Š`Û53T¤ŒGüO©Ö›úyxí¨f">>`v£Oºu¥—h’x›–®jÉ9ÑÿwÕ—ãiv'WQk/¹z½é©ÅÛÈ-/º æ£LÇ7aKWåÜL,9÷KJ+%OÕgòw´^ôÁåÄ|Æ›Gº·¥Â¤pÈRäy…Võšm冶WBÍè>ÊEa£@÷`Ô¿Êè~¾‹«ÜAS¿>õ}{AQExp> C×\(û©ƒÛûgÁ-ôß~™„Q(þž—Tݪï©wQpljLUªÚ<jEEúXÿ>›ãÃ+G*¼ïº§Ûñö:H°íƒÞ »ê¿MµÞtk8ÝŠ1ëä?ü°%¬W©¥«VòóèJ¼þ |nóøw©/\§¶ù™dè®é~Ýš¹Aéf:N¶ú5 ,õZKBc‘4~ú⎮UûFÆ™Öʆm…¢A?Wlc[ÔŽ—ŠÃâúÀïå{¬/È-¦WrQÒ3^ 6Ý8QAZÚà(û~ê¿Ñ1¡›m,™`«©Ø¨Âûn‚mÏw³ Øö pG׿'©®¿ùÂç.Œk~§ƒH‡DÕ–®þ]wCŸþR]Ô3±kŠ-ÎÄMä^‡Àž‡v¯Á”–ªÐcÓ §­‡šâù¶’ÞÊÆm•„š–ßï_éY5üÞmúní•î•Í3ÕÚF‚þ|ÝâÿK5„«– _Ãë«=«¼ï&Øö|c]‚mçt ý*^¾Õµ2D w¸ôpî%|~<Æ_µ¥›ÚñKémÖU©'ÊãáGr—ìÉìˆéñ“4ÖkÓûÌvslf§R+½|¸qý¶¢ÑˆtƒJh_×ûÜÊÖKéqW_cÑðÛÞ”Í?†a?È+ê÷æ´¬XÒ›‹GF¢Æcy±HÙ*ï{ØCdŽÍ:ú�ñaeGZmeE;@´c˜ÉÜnê€Y±j†'6}¹õŽh]ÏjÇVnPÚìIÌç¼qþBï[ù!°˜>Ðõs— {”éíPíE=ÑuÛR ¼l¨™õÓC_ºÁæÊ ‰23wìÉe¥÷R¿öl¡Jü|aáECL£r9‡.‹™L¿°«Ç¥„p*byªúy¨ž´ú¼œÞ²§®\ꓹx€^÷³ø®Ÿ}N}9~í|W•÷]¯KU¤…¾œDY2\¡ƒÆ¤þRaxž­º«ÔÒ]wðYZÿ¥B3´bBí¸ùkHšž|ÑylÑPtÀ饳<ÐèÝé¹8¹°vGãTAÒ–ÛÒôÂ"›Ô:F<Ô?§~¾?ª•ÕëïJ²ýøêú{\ÅEXMˆB%)½×eñËêÁ°±»<m"»äÏùŠñûjNø¦Ñß7^uxƧ Dë¥ ¸–ûl~É6T}ßÍ>ÁylöÑìÊ|DQ‹G1©ž¸ªåÚ[™·©ÒÒ-FZ ‡L–åÌúËž¿Óhk÷Ð¥ÎmK*L•+X(ÝŠQK2yšnýæ+…â–\YUᆖ®n}›ëÇ,EC޹;Ž/×Ö”éïBª€¤±‚‘fîoóµ"½2sø«çííÁl%Uòßh‰?€M6`£Eê$m n_XŽ`6¯F¡‡ XÄZá© ÉÐùÚå€oÕòæØù¾lÀ:©s×£XÀ&Pê@‹E�¬E°…(Þ*‚ XA±ð–l@βXäå÷ãЂ H£Xxó6 A±`‚ 0¢Û­˜b‘AîJ黲Í5=TE°M‹˜‹^çn. àÕ6 ¹ÇÚ>‹ET˜N†ª‡¸ß[æm@°¡Ýš*‰ŸwÏ·ÌÚ€`C‹5U,’šÏÛt—s�•lh©&ŠE´G™^r§ãäöþ�jC°¡…ö],¢Âl|#Áµ¿¼Å¿Y*Þ–ÀV6´OR,’™&–Jý ØÐ.©b‘æ—3MD/ @]6´È£Üáûaéx2~d ¨Á†–H‹ÊÒÉ”\jG°¡%¾Iàt‹¦©…R`'6�€U6�€U6�€U6�€U6 6O2›ü!#·Ï¥²€l@ ³[¹t‡r}3‘ow¾œl@c6 fÏ‚ hÁ†–‰Ïgë‰7•»¡]‰¤/np_ËMF 6 YZhnîÃÖëõÅ~‘ÙB%~‘¡£Â-¹(±^§—=¡ze)¾û5Á4‹`C éÐêKÏ»5¡ZÈãØ“ã‰`šE°¡…t°9âO²uÁ4‹`C ml EoÁ†¢ÇØŒ`C l€Í6´Lúö5]q‚oêwÏ2 .–CŒ/¹Ì,'¢L/½•�°[�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À*�À""ÿÜ®ËCfŠ����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9as_VS.png����������������������������������������0000664�0000000�0000000�00000007577�15030617045�0023352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��y������tÝ}Â���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IDATx^íÝ¿kgþpÿ)T«u'Ò\µEØÆ„¤qãb Pá"È‚Š@Š )_ü…ƒÀ‚}ppBàÂ9 Î ). ¶ Ž!#H0fyn?£yvµ+ëÇZšy½àkö׬vÆûÖçù1·��#ä�4�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4PmCÞ­[·4MÓ´jÀú«uȃ¶s´G]>kÇ4‡5æ<h!X5!jÌyÐB°jBÔ˜ó =„<`Õ„<¨1çA{yÀª yPc΃öò€Uò Æœí!ä«&äA9ÚCÈVMȃs´‡¬š5æ<h!X5!jÌyÐB°jBÔ˜ó =„<`Õ„¼Ë:ÌRoº±ŸÕ¶ÑÛKß_w ÏRÖÛ<u¿jیҫt”FƒÎÂÛÛfêeÏŽŸòÔko¥þþ¯Ç·ò2޲4èÝ.:ý¿§²ÏÓVþºçôj”›•×ìeé0¿aþýuÒ`t”ß’&‡iô°Ÿ:åm~z˜ Ò½“Çò&ñ{£êòY;æ 9„¼«ˆà³5H£jR:zšÝ4<¨½WÓ\öñëVñj4(ÂV„¼Þë€An³|î%±ŸúwÓWÙÿ¥nw˜Æ“bû‰iÀÛÿ<u{ÓÁQ寣ƒ”õ»E¸¼€ÉÏ)ÛÞNÃñŸÅ†×&ãaênì¦ýåëü>}?÷S?;˜¾³c“Ã'i/¦wnmùÂ>M§Çd¼ß“Ö²ã¤.Ÿu[Ž9h!ï*…¼©<w¶³ôü$W½7™f¼Ý´áîÕAvï_yàü¬¼®*^ó³tgx0ýWÕŸi<¼›6úûé$ÚNbŸî§ìpö—“‡A!ïÜZñ…Çig+õ†ÿ9ùƒ „<`Õ„¼«XòNœÙö:ØU]4äýšöûIÝ<p-_ñ:·«ÁkÇüýþe®Ë8*y÷Ro¥ÑáËbÕ†/Ü8N7V¢ÛEÈVMÈ»Še!o>°å!m'Oe{cWéLÈ[ ºj7+Ý£ñóêåñk^¸Kö¢j·3èNwÕbLÞ7_¥~gãø}wúiøÍ(¶üËü"jwTƃƱõ²ÒͺqR½ž¤£ñ¿+ã@£ugºîCîNn¯¶» ‡,“ÓÇmô¾L_Uº|7zÿŸžÎÿq4Nûùq¢£Ã¹Êô͈ý©ƒºìpuBÞU\(佩’7çÌwÜU»9S¥‹ÊÞNåËqAÈ«|A·Ê$‰ È¿TO*/ÕŠâÙ&‡£”M/³ûÍYêyýO†Ónw; ¾§£|¼æ‡ùñ4yž¥íînÊf& Mƒßèoi7ûyî8‰såî‡Î£8ª“ž&ÏÓþî™ãrrø}Úíí¦áþtó-1)éï©ßý8eÏo¾Ú¼ŠÏú?þ(þuykñ/p.BÞU, y1ãtúű¤»ö\Î yy÷hQ›i3_jg…ÉsÍ¥*²˜üqîÊKüÎn/¨ú±P=σbFuçó´ª+~zlìNÞ¢ÐÇô©ñ˜ñ\½ UîN‹ÐùÙ©ç˜9Æ#„îþ-ªrËÆ™^¿«~Ö¿ýö[zÿý÷ÓãÇ‹-—SÏc¸ !ï*–„¼¼’qªëtu!oi÷è|—müÜÝ[ðÅvÕwüÅØüž—“?æ^"žáx@!ïBjy̨(»Nc¿¶ù·ô¥‹ˆ`ùåÜþÌžs“ñô³0È5'ä…o¿ý6½ûî»éÓO?M¿üòK±õbV±@=yW±à *_&dûãs/¡²ÔÒ·`&뉨°E7ñïÅϱ„Ê_S¯Ÿ¥ñLÐ{™žg÷ÓíK‡¼©¨&Þ¹›z÷¶vÕFÈÛŒqXŸ¾ƒ—¯›·›zƒ§3c³X®ŽçAä–̾èg=×¹ÅyøáüÕ!g§Ç˜Þ”U}ÖQыϗeY±õü„<h!ï²No;nç[ yùX¸ãpT½o´¢ë7¾¸ª &—Û§fö§²pr9ümcúå—]uÄqؼµqa×\þeÿe–~¨.†<úx£ø½ÕËÙ•¯å³EVTE›ûÛ§þè©™ˆwÁ#“ttð0mïT—;º9«þ¬Ÿ<y’Wõ>úè£ UõêwÌ—%äAÕï<xÃD‰û¶3_É.fÛöscøVQE‹ ¸{º*]Ê·+•𼋹—öž3i£ªœ R¯»h\áÍxŸuLÄøâ‹/òç>oUÏÿ½ÐBÔXm΃è­^Ö®ÚæÇd.¸œÝÌÒ9K'ÝZ2 a™Ù*ùÉLòjUû¤+x~Y—Û©7ø÷Ü0†›ûõ¶üøãyUïƒ>Hãñ¸ØºØÛÜàz yPc΃öxÛŸuµª÷èÑ£¥Ë­8æ 9„<¨1çA{\×g•¼¨è-«ê9æ 9„¼¶[2ät»ÜÂÉ\Müîi‡ëü¬£ŠÕ¼xÍùªžcšCȃs´ÇM|ÖeU/ÆëŸ½à˜ƒæò ÆÚuËòLßó›[ó*Ëñ¾nBµªWŽÙšAȃs´ÇMÖ±–^¬©ûQVõ€õ&äA9Ú£.ŸuìG´¨êÅÕ3€õ%äA9Ú£N!¯¬êÅX½Ç·�ëFȃs´GB^)^½¸®ª¬!jÌyÐu y!Â]„<U=X?µyš¦iÚõ·Eʪ^tãFw.PÊ�œKYÕ‹ ˜eY±¨+!€ ‰%VTõ þ„<�.,Q.OŽª^õÒh@=y�\ZYÕ‹Ë£ÅeÒ€úò�¸’¨â=xð ¯êÅ%ÒTõ „<�V"*yQÑSÕƒzò�X™¨âE5/ªzQÝSÕƒ›#ä°reU/ÆëŸ=àú y�¼QÅ‹™·QÕ‹™¸ªzp½„<�ÞªXK/ÖÔSÕƒë%äp-ʪ^\5#®ž¼]B�צZÕ‹ëáoÀµ‹€AOUÞ!€á.Bžª¼B�7ª¬êE7ntç«!äpãʪ^L̈ ÀÕ y�ÔF,±¢ª«!äP+±hr,ž\Võ,¢ —#äPKeU/.—I.FÈ ¶¢Š÷àÁƒ¼ª÷èÑ£sWõâ~*€´@íE%/*zç­êÅ}b\´™ÀZˆÊ\Tó¢ªÕ½³*u±,Ky?h+!€µRVõb¼^ŒÛ[¤œ¸QNÞ€6ò�X;QÅ‹ð!.Ý|U/`ò¢=yò¤¸ÚCÈ`mÅZz1ö®ZÕ‹…•«¯lÖÝ£m„<�Ö^YÕ{ï½÷Òwß}w*àE‹ (èÑ&B�ðÓO?¥O>ù$½óÎ; C^´¨úYZ…¶ò�h„覷(ÜU› G[y�¬½·µµµ0Ô-j–V¡ „<�ÖÚÞÞÞ ÷¦kîA“ y�¬­ò’g—m–V¡É„<�ÖVÌ–«[œg,Þ²vžË¤Á:ò�h„˜L•¹Xy~1ä³ZŒå³´ M$äÐH1#ºsãh‹Â]µÅ}̸¥i„<�/*u1Ñâ¬ÀgišFÈ Ub=½eãø,­B“y�´Vu_ô,­BSy�0¯ÇgÆ-M ä@EµûVk^k!�*ÚÚDÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€[ë ðj”›±èo' FGÅÆóú3‡;©¿ÿkñsóy�Ðb랥lûó´ÿbRü|^¿¦ý~'õ²gÅÏÍ#ä@‹­}ˆjÞ‡Ã4¾hÆ›¤a÷^Žÿ,64�-v£A Zù>ä­—¥ÃØ~˜¥^¹mÚ6£ô*MÒÑx? ûÝb{7õ³ƒt4½ïv?½ÈŸ0¼L‡£¥¯½´‘ßo#uúY•)0*x['Ï=ÛvRvøª¸ßÔä0¾ùGôn·¯YÜ\w±Ïm"ä@ÅÍ]wN;zš²Ò6 nûŸ§no²Ñá4îEþz’özt¯w7ÝäÛÂd<LÝN? ÷ÇE‹±w½Sݲq¿;3áp^<îÞ4 Óþ¸¸WJïÏÁò� Ån>D˜º[TëJEÀ<=j/öÓîN–žÏwÉN·÷7¶Þ0ybÑ‹Éô¡ŸÍ„Ãs‰wç³KŒÿ»B�´X‚@^}ë¾W7yž¥íî^å]¬‹BZéYÊz½×ãêòîÕ¯R¿SéÎÛ\7ì™Ïylr8Jß û©3ó<ÓVv)¯Øß6ò� ¢A ¯ÈAlòsʶ;i;û¹¨²Ewnqi<ns÷¸²–?nk¶{5Ä}îÌO̘ ‡sò¹ÑMýá~e,ß%«7HÈ€«GˆÐÕIýýÿ¦£Ñ^ênW»f—ÙûOÆ„ˆ¢˜±›y\XÌbFîí"žU¾íJÈ,Å~ì¬Õl\!�Z¬A ‚ÕÝ´Ùÿ2ýµóaŒ~/¶‡Éqðë=LyU-fÙf©ßé¦Þ4–cùæ'RDwk–ϰ]0f/fïvÊîà©£qÚÿzz·iôj¾+7fëfÇ3l7–Ãzò� Åê^i3–;)'[Ìx‘Æßï¥ÞF1.®ÓOGÏÒólçøç|œÜ‹t0Ü.–M™¶^üsÜŠÇÌNìXp߯ÿ•F‡/o.«„Åí½AúçÉ’,—¹ºÆÍˆ}o!�*ÚÚDÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€òšKÈ€‹  5·µ‰�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4�Ð@B�@ y�� $ä�4NJÿWíˆg’;Ã����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9at_ID8.png���������������������������������������0000664�0000000�0000000�00000010541�15030617045�0023370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ä���ž���5ß;���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��öIDATx^íÝ¿kÙÞàü®Ý-îÂ6[¹RãboãÆ…LÀEа +pØâ†- ^–­n@Üê²/‚ oó&à.p ¯ ÅÆÝ’5a ưKâÜ9cÉÖ±l)–4£ó<pˆõÃòHg&ó™3ß9º�� a1��Iˆ�Hš@ �@Òb��’&�4�€¤ Ä��$M � i1��Iˆ�Hš@ �@ÒæˆïÝ»§iš¦-¡p{sÄ2Û@:ÊÔ×Ö;€éÄ0G¶tÄ�Õ%ÃÙÒ!T—@ sdH‡@ P]1Ì‘m 1@u Ä0G¶tÄ�Õ%ÃÙÒ!T—@ sdH‡@ P]1Ì‘m 1@u Ä0G¶tÄ�Õ%ÃÙÒ!T—@ÌÝèvÂëÃzXËúüÞ½µ°Ùh…“ónïÁtÙÒ!TWÂømhÕ×óejkõpðò$œ÷ž§Ðií?o°­„ö§ì™íƒ°^ôx¿Õ[¡“¿æøß^k…³ü±qÝN;´úa3k›ðì?­ðãý‹¿;Iïg/´:½ì´B½à9kõÃðòdtI?„öÁN¨7ë}nÝp~ü,ìîµÂiâ™8~f¤¡L}m½˜NÂ8:Ï‚\€ÛWñw<ÜõÄ€xh|j‡ƒ^0øþA;‹œQ ½[W¯]øûïÃQã«P{ú¯ð´¶š'õî¿Òí¼ ûµ½Ð< ¡gᤵ6{A|v#Ë8jà½]:F—§èyùk× ßSJ’ &ÝNh?k„ÍìýÆ÷|ѰP¦¾Nf½¸#ñX ÎtCsëQh~ìÝ‘™G >; µí,4~'ÍPk‡áÕÎë¡qô¾wû®Íˆ3Ý“fØÚý-|^ ûYpˆ{?­²¸žn…µú³pœp™Œ@ P]qQ eµê­·½Û™Á@{MPœ.w³<¼ÖjÍp3D Ç[½ŸûâßÙØGgó ³âü€¡öp`ôïc8mý=<>:½ ôÝÓ‡ýÃ×ãì J"˜Äõd=Ø9ø) `:qa  ·™h³÷ßSÞn,W¸!læ#¨[£¿#ªño~vYÄ$3â¢Ïíü·ÐÜÍ"v6½ÍP¯Œ°'ª|Û@ìó^ýz\·>”:¬e9ý>;? /³>¾¬[/ºP2ÂýÇÛZÁÙŽ ò¬µ‹úý§eÙíÃב×9 'GÍÐØÌžŸ?¯Ï^‡Î¼Ž§—§,Ê´,�U Oˆo!vCØŒ#Â냣¿qÄøqØ cx ÌôÚúà2Ní®qæ÷÷‡p¬5®ÿÚ‰Ï4QÖm /{ùîiøŸýíP?ø¿,èþN[ÃF\Ÿº¿‡Öîvh´Ž‡Gø³>=Üÿ÷Ø…’q[Ù˜pQè­äÛC¶N]^Ðú1tŽ~›ý3(Q÷4[ÏöB£ytÌ»×áYc;ì¶~¿}�Ÿ“»èë?þø£÷Óç)ëzPVqa Ž31<º¾dâV&…ÍX’±>cm0�L Þ· å7™5Çß{tU2QTî1á`#%±O˧?ÓH-씹\ˆf{…s¤ßsñµN7"\ {ò,ì¾ÆÐúËr~ ‡íùCC ׿Ż‹¾ÞÙÙ ßÿ}899éÝ3›r®w�å%…¶|„lw¼|á®q~Šø«‚‹åFË&âí¸|!`‰¸{Ú »ƒ$’ÝÑÏ&†þÇêJK¹ Œ–ë è—/dË]ÜFgޏ‹ŸÂÌÂùÈò nsq¹öž‡Þ Äq„ø—_~É_+þ;ëˆñ], @JâÑyþÃîm§]»Öõa3ž®®­],wQ6Q;¸º-Ÿv­þ8´FæþÍCéÆâq·ó*î>™îCh>¨÷ì†ó“VØ/8½žšRncE˜ö@kÒkÝZܳujäài¨liÂö——|nÉÆ¸Ë¾Ž#Äq¤øË/¿ ­V+üù矽GnG ˜NÂ8†ÁÙ¿˜ãÚÚÝ(Æ.4Z¿,¿ˆ;ù«/︺lyvþu’µ«Çîm„úA+´;³\´6/æÈŒ}SÝ?g\¾Õ?³Ò™4¢:i$¶ÈŒÎfëþî#ˆ#eKq},'êË/æl”âÎyôõ«W¯Â×_ãøóm•r½(±„1Ì_·ÉÁÅZÝÆø’|Ö‰ý¡©õ¢;¡zìlG,ëØ8{o×BýðUoF‰¡Ón…ƒúvAôrÌ«¯ãèp%Ž¡øÁƒ·ª/ö/Àtb˜£òl±,a3_žñ6:‡p ›ÿžÚ¬ù¿#þ. -,ºÎÈÙŠËUÏ– œµ™ îÚ³K—iž닟<y2±¾xÞ˰jb˜#Û@:Õ×ýúâø÷®«/¶ÞLG †9² ¤cÑ}=©¾Øz0¸ò®¹8° }Þ—x0‹ø¹“†eôõuõÅÖ;€éÄ0G¶t,³¯Gë‹­w�ÓˆaŽRÛò9¶³÷ß÷MmÕÎXÄ÷´l·©/`œ@ sdHG™ú:.Ë,ó¤J †9² ¤£l8ê×Çp|›ù‹R%ÃÙÒQÆ@Ų‰~}q,§˜41@ªb˜#Û@:ʈûÞ½{wY_üüùsõÅ�æö?xüOWÓ4M[N»Î›7o.ë‹_¼xÑ» m†¯`Ž&VK™úú6Ë¢¾àн5@¢Ô\ˆ§¾H@ @N}1*€!1 «/R"0&–MÄò õÅ@ b�®ƒp¿¾8^€§¾XE1�7Š¥ýúâ8eÀ*ˆ¸µÁúâxÀ*ˆ˜Êh}qœ¶  Êb�f¢¾X1�ŸE}1Pu1�wB}1PU1�w&–MÄQbõÅ@•Ä�ܹX_üäÉõÅ@%Ä�ÌM¬/~ðàÁe}±` ”‘@ Àܽzõê²¾8þ P&1� 1Z_GÊ@ `¡Fë‹ãm€eˆX õÅ@YÄ�,•úb`Ùb�–N}1°L1�¥ë‰c]±úb`‘b�J'ŽÇ‘bõÅÀ"Ä�”V¬)޵Åê‹yˆ(µ~}q-޳R¨/îš@ @% ÖÇyŒÕwE  RúõÅ1«/î‚@ @%õë‹c)…úbàsÄ�TÖçÖ¿yó¦÷2€Ê›µ¾8>ßè2 °2¦©/Ž¡9>O(b�VN,…¸©¾8†ç~ Š!m1�+kR}q|l0 Å.€•Ë&úõűœ¢__Ü¿o´ Å€$¼{÷.Ä_|ñEøé§ŸÂ·ß~[ˆc‹ÏÒ!”_ý5/¡( Âývÿþ}¡"”XQ‚G›P éˆHÆóçÏ ÃïuM(†4Ä�¬¼xa]~âi›P «O `¥ÅY%nª¾© ŰÚb�VZŽ_Ôçþæ›o ïmšP «K  9ñK:^¼xž<y’qGQ�.jB1¬&€äÅrü²Žø•ÏEa¸ßb€ŠaµÄ�0"ÖÇéÙb@.ª?ŠaµÄ�pƒ~rœ¶­…bX1�L©GGŽ5M›½-“@ �3ZöNœ›é£jˆ ¢„­òÓGÕ @E [姪A €Š¶ÊOUƒ@ �%l•Ÿ>ª�*JØ*?}T 1�T”°U~ú¨b�¨(a«üôQ5Ä�PQÂVù­~uÃÙÑ~X[ÛGgÝÞ}Õ#@E¥ˆß‡£Æý°Ö8 g½{ªd%úèS;¬ÇosÛ íóÞ}…“æv¸Wk†“êæa�ªjeñ¤ÀÕ=ÍÚz¨5CóÖê´¼ ­Ý*= <‰@ �µ:a+ZÍÀµR-«ö(ð$1�TÔJâ \s£ÐX‹£ë±í…VçS~w÷¤jù}Y›ªœ¡ÎOŽB³Që½f-4ZÇá¼Ó »ƒe+—£ú±Ý£÷½2Ùsëùý¡Þx6ãÏ›Ðl= ͵ü5÷NK5â?÷~º@ �3ZÈN</Yˆ!&œ~IÃE]ïÅ}W!ìvn¸>µÂzþxÖ†.Øú”å­½Þý;¡ñ]|µ°ÙxZÍF/|ýŽ:{Ï_®¸œóÕ»¨m,ôfŸsû0ln†öùm£çÇÐ9ú!Ôê¡ÕîäµÛyë›a§¾¶ ËVÞ†V½š'õn÷ä¹|{uàõgáøüÓÅr•¬æxþý4™@ �3ZÔN¼Ûyök{¡yÜ«gḹjû/CgªP3CàŠ£á)Ìýà›’n„zó·p>„öÁßJSs¼>Êßÿöp(=†úì²×Ùßk…ÓÑ.ý‘Qà¾|7Æg˜ÈG¨ë­ÐÉog}²}ùûÕƒ@ �µ¸x7œ?Ë‚i  ï³0ü(쾚2 gf\1ønŒÍ0g6¨‡zëíÅÍ¡P6òØ’-¦âìWñ `'ì¶~Ÿâ  ~n{Å¡÷ºQàLq¸½µÞ8h‡üÜA~–áaïLBáXº‹$b�¨¨ÅîÄ{§àc]h>;­Y×uá6ÀíË)†CÙõámÓG½²‰ü3¸è§ÚnÁÇDñ3m—¿Ä–õ¢y†G‚陋~‹¿¿qÚù“†G‹ËB €ŠZèN¼{Žö÷Âwú ¥Ñ,k8ø^q eלÂ_–…õQÿ3<ýO8¨= ­Óik¨ãg½5TÏ ÍúÆ5æ]w_kïò $°lõGùó¾Û)ÍKŸ@ �µ¸øÅ)ø|d8ÆÛ3ŒÏ¸bxÚz<ncøÛê?8”å£Å%º`ka}”Ͱ¹Y›²T¢¯7²œ_ø;»}Ò ìõêõͰ>6  ßKC%#%C£Åå!@E-f'^p]bwÂAûCïŽÛ˜!p ß+ÃuŃ%×Â_žÅ­XаÖ¦.•tN^†z·ÍFxÖ~Nû³zÄ’ŒË)ÕŠÚvøGëç«éÞòHâÁÔf~;öñÇxÀrùXyRq\¾eˆ`Fó݉Ǒ×íüoÄvùÕÉC¨è«|'¹)pý+üÿç¢Vû9´þqµLy@˧÷Š·ã²¼¿Zæ± ½–#.Ë"tO[awýá ¥D‹ê§ëÄ�0£eïĹÙBú¨û{hínÎX*A$@E Äå7¿>Šõ»ý/Gé·µÒMgVËÞ–lÉ�0£eïĹ™>ª�*JØ*¿¥õQ>ëDÿ+·ohëå›õaÑâç°L¶d�˜ÑRwâ×­Ä÷Où-»Ÿ¬%�0#a«üôQ5Ä�PQÂVùé£jˆ ¢„­òÓGÕ @E [姪A €Š¶ÊOUƒ@ �%l•Ÿ>ª�*JØ*?}T 1�T”°U~ú¨b�¨¨¸×4ínÚ2 Ä��$M � i1��Iˆ�Hš@ �@Òb��’&�4�€¤ Ä��$M � i1��Iˆ�Hš@ �@Òb��’&�4�€¤ Ä��$M � i1��Iˆ�Hš@ �@Òb��’&�4�€¤ Ä��$M � i1��Iˆ�Hš@ �@ÂBø/-±ÄìÆ`����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9au_IP8.png���������������������������������������0000664�0000000�0000000�00000021772�15030617045�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��l���û���×iÈ÷���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��#IDATx^íÝahgžçq¿½™w£ƒè…ÁãsX/,¼,3‡r‚°M£™ ‘ãa„;Ë]™‘swòŽO$#¢ìœÈÜjrhrÑf£ Ö&é›èpŒ·ob9ÖØ[ZM,:ŽdKêßUuWµª[Uåz¤îV•ôýÀÃNW—ºK¿~œÿŸªjm���b† �� æhØ���bކ �� æhØ���bކ �� æhØ���bކ �� æhØ���bކ �� æhØ���bnC¶¿üå/úðÃuëÖ-g ���ÊmhÃöúë¯kÛ¶m ƒ±!�’" ÛK/½älžŒb›qý¬˜C�’†† ‰C±Mޏ~VÌ!�ICÆġØ&G\?+怤¡aCâPl“#®Ÿs@Òа!q(¶É×ÏŠ9 ihØ8ÛäˆëgÅ44lHŠmrÄõ³bH6$Å69âúY1‡�$ ‡b›qý¬˜C�’†† ‰C±Mޏ~VÌ!�ICÆġØ&G\?+怤¡aCâPl“#®Ÿs@Òа!q(¶É×ÏŠ9 ihØ8±*¶¹ºþÎOu¤¡®x\Û¾Û¥¡û‹Î[[¬>+¸�IPÃvWCÅÿÐGÝ^µžKéé…ðýÜÑ1¨)e•NôÞùý¾ÑxÏaÏö:í¼pUwZ±¤l淺жWuùýêµ§õoõ÷©gµ=ÿ:Ñ-÷hwñýVF]ç¦}4=¤Îºò}êÔÐô#]¾zW+­Â‚¦>º¤{ë ûÔí׉žÖÔbÎy>™Üß9–oöëØ®Ÿjø¾;ÿà§ÏÊ+®Ç�AÔ°ÙìFëˆ:'ÇR.{K£½Ïªñèßë‹y·Y½Ÿm1RC±aó<¿˜Vª¡SƒS…Vge?׿iôü1u]¹¤ÎÏkxvÉÙnËi>ó¦Nì;¥ž‘/•Í‚¦Çt¶i»Óø­Å¤;Ž(•Î:Ë”sþ=?û•uÏihêq~KîþNïú±ÞùrÎ:J;«q]n; ÓCwò“*>ÅvÉêÏh{÷ˆæœ-(U‰Ï*“Éèµ×^sUF|æ�D“ø†-/w[ƒ'©{dÆÙPÙ†-ßøì~Ec¿¶~®U'o¯4<¹ ´ÓűÙUMÐêÆÏ„iÃf›µË#ê¾—´úýkrà¤RiÏ*\ò¬­Ø>ÐØ…ÎÏî²2º«ìÍßë—'öçWEëš^ÕgÙek?{µôwJ9Ûó+—G~ªw®?(ù|WB÷)ãíçCå´0vQ;쟭kWêí_éo[ÝUÚFµ\úTsî›ææ4ñO}žç­÷Úû¬z>ºëÏÒÍe­¾ýöÛâk :[×o½Ç�µ¶96-h¢¿Cz¯YåÖVºßêÆÅ*Ê“7”™qNc•5?¹ì¤þofÆ)„t{ SÍÖk?¶ ìãLŸŽý _7íÚnÉMô«å@¯®ûéÜ̸ÞмóØÌZ¶t.6lÊ^Õ…ýO+õ½ò· ™ëÿ¨ Gšu~ôß Ï'ÔºŠíÒ5õاŽç¨¶ÓÿM#sÊ-ßÖÈ•÷”™¤é^ÑÑ–—ôÎøýÂço5J7ß}A{÷ý\é‡e-yî–Úšuaì³am–­9Õl5‘m£±ÛYk–åôhü’ö7¤”¶"÷@_ôuj_G†¯O;óÒYQmüzÆã»¾W‰ÆÈnÔÜ×ùóŸÿìl]ŸJ�ÔÒ&iØ55ØéY9²÷+»F-l¥Ë·ùq,ßPßáN Ü~Txœ»£¡ÓÇ­"Yh¤Ö·ŠƬaËeo+ý¿RjÝÙ­ái÷÷x¨LßñâŠL~ìûO›‹¼Kîï²&öõß=¤ \sN_¯ÈÍ~ ³^Ðpù ù¬[Õ—)k½¿Õùg44½ž<—4;üí(;­šŸWmšÌåô0ýsí?ú_5ž-Ÿ¬Æ{Žjwϸóÿ¨ÄϺ>+gŸ}6ÿ:öÿ­„J�ÔÊ&iØêzo«Zúÿ䜶zÒ [™À†ÍYépþã¾2êÔxþ£|ͯŽ4÷)㬸­¾é¡n5JÃæ9¦º=:Úõ eVNÝå/ˆß÷‚Þ½Y¸†M‹÷ôé¥g´ëìš-kV’ÄýÍ9§ 󳩨Ð8}×ͳ|Ô^5?òŸ}Àêjtö--ž¹k³O]ŸræMùÜö²Ÿû÷jâô‹7¿õ²WÖÜתĩÑJ�ÔÊæhØ_Sï!ûÔÔ×ΆÒýJOqúlØ¾ÖØ…VϵqŽGŸ«çßý¸ðÕ ö{7w¨/³úÞÑõ­¾­å”¨Wùª£cjPî©¶„Z{±-\÷ã˜VßÓ9¯L_«Áõ}þ+cÆ|O«z¯E´çr³oS–›»ª‹ûŸñ{qQÉÆ¨’§F+y\�P ‰oØrÙ/5ÒsJûNèæcw " ± Ðüäf‡õ£†s™+/•ö©¨VµL(gî¿^ýÏ:Ôôýú·VN³-ÎèÆ›]Æ_ë±b½ [È ›³:˜Tk/¶v#tXCwÇ^…Sûözò²·f¿Ò¿ ýJ¯ô—}‹½2vtý«[~§UíÓðÍÇS°Vc8ò·jÜûœÞt¯«³ÚÍ™/†”²½ý××xdmTº1ªÔ©ÑJ�T[‚¶°ïaû®¯ï)߯1 @[–ÆÕ³Ûó…§ù×+ÏÒ»�«güŸŸqOwÚ_ãñ]<Ѥ†âÏ<¥ƒ/èÒð—FumßÃtÚµì{ج,ŽœýOVÉäþÞ‘åïäm(þÜÊð|®¶ÜeÞ½¨¶=n^Vî{ÚÔÝóŽFí›ò;Ù+—§K¯ tF½Ñj›}3Ë)Ïë<­þ‰y;¬Æâ¶…•7û¸†RžÏ±ð=}cÞïÜ‹'7›J©Ô©ÑJ�T[‚6 €b›Õø¬*qj´Ç�ÕDÆġØ&Gµ>«õžeH6$Å69ªõY­÷ÔhµŽ �ª…†­ê ¾Èïš§ÒQv=¹™ÅÏþŽ­3ÌþB²¹¿s5¬çÔh5 �ª† ‰C±MŽjVk=5Ê44lHŠmrTû³Zë©Ñj�T ‡b›µø¬Örj´Ç�•DÆġØ&G­>+ÓS£Ì!�ICÆġØ&G­>+ÓS£µ:.�¨6$Å69jùY™œ­åq@%а!q(¶ÉQëÏ*ê©Q怤¡aCâPl“£ÖŸUÔS£µ>.�X/6�›Ê¯ýëbCtj”† @ÒÄ¢ac0Œ�4l cË�HŠ ý/Ö矞?úá‡:[� 2¢œ€¤àÿŰ)}ûí·jiiÉ7l¦k�ↆ À¦•ÉdŠ«l&k�ↆ À¦Æ©Q�› €MS£�66�›§F$ €-S£�’Œ† À–À©Q�IFÃ`ËàÔ(€¤¢a°¥ÄòÔèÔ :œc*õ:ØÝ§‘Ìœ³£©9eFúÔ}°Y©tÖÙCÙŒFúºu°ø{ïTGjPéïéü«i-:»[ €-ÅôÔ¨ÝÔÙ+sÕ7£‘î=ÚÖR:ß¡XÍÖà¹BsðU¥³Ëù½L,¦SjÈ7@cÚ°-+{ã uÔoS}GJƒé)k‹í‘¦ÒƒJuìTCІ °Ñ°ØrLNÚûþþ÷¿wUSVéÔAOÃfsš¸u4\…¦-¦ [ö¥Ö7¤öóݿՔópkšÔ`GCq¾–Žfu÷ )=õÈÙ×^Q°Ýýêœt¶a³ a°%E=5j7tö¾ÕÖ°µª/3ïl3߆m^™¾Vëw«Wsß ge þ–57rNõÞÏqyJé7œÓÈNûœéSs~N7аmB4l�¶¤¨§FífíùçŸwUSYÃV,Èõ:xî}My;šlFï§:¬ngû:·þÒU÷Tê¶f=×}¼´Ðdž»r¥]¶~åõûw>øCuwì\iJ²ð}n~åµ:~¥OVçFîĶqôo¼Ý¦wºGf ›ò×CÒ°mF4l�¶¬(§Fífmï޽Σjr6çxòã`·úF2Ö3^_[ûWGßµüöå©÷uî`½êO êÎò#Ýü¡êëO©ïÆœõäœk¶^+† ÛbZ©û÷ìÔàTéUj+×ÞùŒƒ/k¤Øœ†eð\ÇszÎ> k¿V}‡^ýdJËË7Ô×lmkîS&¦ hØ�liO:5ê®ÂÙ+rÕå]a³›#Öû± ô×Îó޹u×{wÔŸÓÈäûÖs¥§c{JÔm’‚ŽÍ}Þþ½æ¬ßÆmð:W®i{bÏÍ~RöZ~§£ãeõçøHSŸü—ü %×�z¶•Æ×ù9ÏÝÈÅ›9BWk'4l�¶4ï©Q¿SŸn¡¯þ¢å§D¿Òà©«.È/\§ä±ð\éêJl6Ï5lSŸäWÁJ9§LÝ<|¶'gpºuÕk%¥a+ÌÅÒQ¶BY²Âæsí›Óä¶°ÊÂîˆ6�[†½‚æ·Ræ=5ê½#ÔÞßo{u¬n–ï êT½ÕÐx¯aËä:5ø•çz+û¯që÷øë9¿6Ï)³)ü~V¾î)ÜOnØžœEÀs_o’¶t¿ºó§w=×ß•4l>?çä˜oØÂV(íUMÄ €-ÃnÖìS öõjå›{jÔ¾^mvv6¿íóÏ?/±êß)êÜZR,kÒ¼§ªÜ•7÷ú+{·ì5½Ñ÷±æÊŸ+^Ãfÿq¼®ÉsZÏ:æÔ`ºØ˜º«=¡ ›IÞçV½–_öñ´RZ¼3Ô½þΠa{¶ ‰Ø¡a°å¼öÚkùÆÌÛ¸ùµŸw¶ªÞ)š/²…÷YÕ\¹‡ó\~e$亣å©OôF·Ó¤ÕŸRﯞSƒ}óÂoWš¡¸YžJë·%éÀö_;xK¿µ¿L×m°Üç¼M›é]¢“—½VŸíÕ5÷±ÏMqðĆÍmlMVØÂV(×ðEͨ.6�[’}ŠÓ.ÐÞÆ­üÔ¨ÝØ¹ks§(àÇçZ´|c5œÿkvsë6]…nå´¸û8àò”>yÕm`­¦íïÞÒ@Ð*¤ý¿+4l�¶¬?þ¸¤!³·+W®Ÿ9s¦ø¼=ÊO£Õö—¬áùê—Âjšûœ³Êæ=-~𜯿¯TƒýF «hÜ%š4l�¶4{UÍnÎܸgÏ}ÿûßÏÿïï}ï{Åíö¨þ¢�à† À–gß êmÚìñï|§ä±=jó7E`56�°Øw†Ú¢ª¼IóŽêß) �þhØ�Àa_£Ö´ÕæoŠÀj4l�PÆ{w¨wØ_û�† �|5m�°ø¯�ð~í‡;¸SÀF a€åM›ý�j† �žÀûµö—ë@­Ñ°@nÓÆ¢�6 �Ddí‡÷ô(ƒÁ¨Þ@)�~……Á`T~ ‰�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0PýbrOÃ]»Šï³2êµ÷ôÛÊÌçœý\ šúè’Nì­ÏïW·÷Œú¿x ò½jÅ=ÞZÊeoh(uJ{ë ï]·§]ç_ÿ…Îl?©ÉÇÎ^ŸSõ³¹«¡ÎÆâû¬ {/²KÎ~¶xÍ/÷¸QŠD�À@mŠ‰Ý´V÷ÈŒóØnJ>QªiÉ6k«Ž_Ró¡—4tsÎz´ ;ƒg´ýX¿n.;»ÔXm‹mN‹SïëÅ£ízñ?jzÑn7–”½9¬T›ÕôîîÑx¾G‰GNµÉÆnÚ•Íq]nݧΡ»î–ØÍ¯ÚΡä �0P“b²tM½:Ô?±àl°äni í¨Ré9gƒ%7¡öXÛ8,SƒêØqQc ³VRÓbû8£þãmºxuÆj:¼–57rN;º†5k?ŒINµ™;ãêÙýLéÜÑŒFº«kø^áa çWMçP‚�¨I1™Rgƒ§x.Þ×øÀ95S_>^)¨Ë™>57÷)ã]± oCJéEçqÕ®ØZMÙèËÚurPwWõ9ÍO|¬÷Ƨó\\rªE6¹Éµ•4^ šºúKµîÿ™FÿZ8%ÇyãU»9”,$�ª_LrZ»¨ÎûF£Žœ}KéiïªÉ’Õ×QÃ…1«$¯XïÑî–~M¬jbj£úù¸f5z¾Y'o—­®•‹ONÕÏ&§oF_Òvç}VÆýxøŽ“S<çWõsJ&�Õ/& šèF»{Æ­ÒúP™¾§µóìš]UH³J§«¥ÿOž†ÅþÙè½fýìÆ¨]±Ô`Ç¥ÒYç±O³²+¥ôB|rª~6óÖ|i/ù½rÙ¯4öö955vkxÚ^>‹ç¼ñª~NÉD"�` úŤôz£Üì:»³Cý7½ë!6»ðþÚn­ÞÇ×ÔÛÜ¡¾ÌCgCíÕ®ØÚ9TûÀ„§ñ(ÈMô«¥xÃA|rª~6«oVÉË_×vL½×íß7žóÆ«vs(YH� T½˜äo8h·Šç¼³áU`hÏçzäl)XÔý¡.m?ñŽnÛwG.ÞÓ§—Nªùâô×ò¦†jWl w:j|V—?»g¥álÍÞÖ§}§µ½sHÓù-ñÉ©úsÇ熃ܜn¾û‚öµô)“¿þ1žóÆ«vs(YH� T¯˜X ÈØ+Úé¼þ¶m­Å¦mùf¿Žå¿clŸÎæï{,˜ÿWýR½Ý~èùgMå¿ÚbãÔ¶ØÚÔ_QWÓSÅ÷ÝÖФŽî”ÞJß_YAŠINÕ˦pF£›AÉxJM]WtuÊÓÄÅpÞx¹ÇŽR$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘�p‹ ƒÁ¨üðþC)�ÞâÂ`0*;¼ÿÆPŠD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�` úÅ䞆»vßgeÔkïé·•™Ï9ûYrsšøÃ?ª¿÷uw4©¡îŒ†¦—œ'7†{¼µ”ËÞÐPê”öÖÞ»nO»Î¿þ Ù~R“c“Sõ³¹«¡ÎÆâû¬ {/²ÎïÃyãå7J‘�¨M1±›¶Ãê™qÛMÉ'J5í/Ù¦¥Œÿãß©·ÿêýþçµó@¯®opÝ­m±Íiqê}½x´]/¾óGM/ÚÍì’²7‡•j³šÞÝ=·óˆINµÉÆnÚ•Íq]nݧΡ»… 1œ7^µCÉA"�` &Ådéšzt¨bÁÙ`ÉÝÒ@ÛQ¥Òsί%ÍÿD;ºGä÷l-Õ´Ø>Ψÿx›.^±Z7¯e͜ӎ®aÍ:[ 66§ÚÌqõì~¦tîhF#݇Õ5|ÏyìŠÏ¼ñªéJ�5)&ÓCêl¸¨±§ Y¼¯ñsj>þ¦¾|\Úš|£ñžµôÿ©¬q©½Ú[«)}Y»Nêîª_:§ù‰õÞøtY›S-²ÉM¨m‡gîhASW©Öý?Óè_Ë—Ñâ3o¼j7‡’…D�À@õ‹IN cµÃyŸÂhÔ‘³o)=í]5ñȯ¾5ëÂØgÃÆ©~>®YžoÖ‰ÁÛÑ› ΩúÙäôÍèKÚî¼ÏÊ8 ßYSŒæWõsJ&�Õ/& šèF»{Ƶ¤‡Êô=­g?ÐlXWòͨÎïˆÇ…ãµ+¶“ì8¢T:ë<öiVv¥”.®4Y68§êg3oÍ—vè½fÍ‚\ö+½}NMÝž^t¶:b4o¼ªŸS2‘�¨~1)½Þ(7ûÎîìPÿÍ€Õ5Ër¦OÍ1¹p¼vÅÖÎé Ú&V­å&úÕâÞpà±Ñ9U?›Õ7«äå¯k;¦Þë qš7^µ›CÉB"�` êÅ$ÃA»ú2óΆJ§ŽhÏçzäl)U¸p|ûª ì7FíŠmNÇ/éP㳺üÙ=¹kG¹ìm}ÚwZÛ;‡4íl+Øøœª?w|n8ÈÍéæ»/h_KŸ2%×?ÆkÞxÕn% ‰�€ê«{E;×ß¶­µØ´-ßì×±üwŒíÓùQ»¼.¸o,îë+?·Ü㨠û‚ú+êjzjå÷ohRGwJo¥ï[‰Æ+'÷½+/ì÷|JM]WtuÊnââ;o¼ÜcB)�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� ¸Å„Á`T~xÿ¡‰�€oqa0•Þc(E"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�n1a0•Þc(E"�`À[\ Fe‡÷ßJ‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€õ“{îÚU|•Q¯½§ßVf>çì·¤læwJnVƒóüž¶ŸkdjÁyÞµ ‰þ§Ë^ËuϨÿ¦»o”}*Ç}ýõÈeoh(uJ{ë ¯U·§]ç_ÿ…Îl?©ÉÇÎ^Q2ŠW>îk¯Í] u6–c~ØsçM}‘]rö«T.¶ÚΗû>(E"�``ýÅÄnÚ«{dÆyl7(Ÿ(Õ´eÛô:¿û7:?ôÿ”µ{¸Ü]»üŒêÛtÛíéòf4Ò}X]Ã÷œÇ~¢ìS9ëË'§Å©÷õâÑv½øÎ5½hÿ²VrsX©6«ÑÝÝ£q·/‰”Q¼òYÿܱ›¶Cesg\—[÷©sènaCÅr±Õvî¸ÖŸÓæD"�``ÝÅdéšzt¨³B‘»¥¶£J¥ç gÆõÞ?e ב›P›·a±å_«]}™ygƒ(ûTкòyœQÿñ6]¼:cµn^Ëš9§]Úu¶DÊ(fù¬g÷3¥s§¬©ªX.¶Ï׺sÚ¤H� ¬»˜Ø+ 5¶àTÔÅû8§æãoêËÇ¥mÊŠ‡ú²¿S‡{þõ¿<ìת۫ÖΧu°¡Nu{~ ç/¬©üÊ”#Ê>´ö|¬¦lôeí:9¨»«-§ù‰õÞøtY#çå“QÌòYïÜÉ7^;<sG šºúKµîÿ™Fÿêíä½Ö˜‹­Æsǵޜ6+�ë+&9-Œ]Ôç5 £QGξ¥ôtÀ5A‹÷ôÙåÿ }'Þð\§T°<ù¿õjê §o+›[Ð̃:ß´G'o›(ûTÒÚó™ÕèùfXËqd·|Öž-§oF_Òvç5VÆýxøŽÿ±®#[­çŽk}9m^$�ÖWL싸ŸÑîžq-é¡2}OkçÙ4ë[ýìë¹>Voç1¸ô‡ˆ«59pR ©´-«EÙgí֞Ϥ;Ž(•Î:}”])¥‹«K6ÓŒ66Ÿµgc›·æK»ô^³æNA.û•ÆÞ>§¦Æn O{¶¹Øª;w\ëËió"�0°¾bRv½Ñì:»³cõw¹ʼû²ZŽ<¯þô=ƒâøµÆ.´<a$Ê>k·ö|ìlª}`bÕqå&úÕR~ýÞš2ÚØ|Ö7wV߬’—¿®í˜z¯;'<«–‹­ºsǵ¾œ6/�ë*&«.â~ têˆö÷|®GùÇîÊȵ¼ø®2Îi¬Õ×.åôøÖôîÈu͸«'‹Îµpí¯ë_ó_eŸÊ[{>9=¿¤CÏêòg+F.{[ŸöÖöÎ!M¶DÈ(žù¬oîøÜp›ÓÍw_о–>eW*ÛÆÌ׺rÚÄH� ¬­˜XÍÈØ+Úéüì¶m­Å¦mùf¿Žå¿olŸÎ4¦þ–íÅ÷ðŽºbÃb[ÔÌØWwG“ó][Ö¨Û¯©ß u´}*Ï=Þµ±/¢¿¢®¦§Š¯³­¡IÝ)½•¾o¥hÉý)BFñÌÇ=N3…›1Ýc,O©©ëŠ®Úß±V±\l3w\îq£‰�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bŽ|‚‘M4ääD�À�Å$ù#›hÈɉ�€ŠI8ò F6Ñ“?�“päŒl¢!'$�(&áÈ'ÙDCNþH� PL‘O0²‰†œü‘� ˜„#Ÿ`d 9ù#�0@1 G>ÁÈ&ròG"�`€bTÿÆü‘�DäƒQýR$�ùƒQR$��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��s4l���1GÃ��kÒÿç•Gª_ȱ����IEND®B`‚������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9av_RI8.png���������������������������������������0000664�0000000�0000000�00000026331�15030617045�0023414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ø���æ���ï<òñ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��,nIDATx^íÝ]¨]Õ½÷qィÞCÁìE/"­hˆ<…&LÅÒê…ô"¼x.h@B8½8M/¶¡‡ Bíñ&ð°¥P_ëJj Â£È¦Eå(ñâ¤Ô ¤”æ³k¯‘ŒýŸÿ9Æ\sÏ5ÖØ{}?ð§îõÛ{½ïòÛ3cyC���`4l���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Dl���`Ds/Ø7ÜpÃ0 ³ �”W¤`ˎ߃åPÓëÌ{�‡‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚ ÀïÁr `�„‚Q]½ðvóô¡]“×ý†4GW>j¾šfˌ߃å@Á�È’ì+Í…•''÷qãìj|©YýêêôûÖ\Xiµ¾/ž}ÍÉókUòÊùæä^æÉf啎뼧9zöÖ3ëê…æüÊÉæÐÎð½kåõÙWš•_Z¿Ý\9²¹sÃíNgßÑæÙóšèQ¯ùïfåÐíïÕZi.L¿kâ«sÍÉO6§?º4½àRóÑéÃÍ“+Ÿšë\>z¾°ýÕô:óž€ÅYò‚½N…óž“ç×êvpµùêüÓÍCÏ6Å%{R6_/È×|Õœ?9-º*Ø÷œlÎO¾e½Àßyíº;~þÒÙæèÎG›ÿ\9Õ8pºYµmôêçÍÙ§mþÑÑàµû¸ºÒÝw`æ‚=¡rg¸Ÿò¯æÂ¹ÿX+ð6§Wÿ9½ÌhýÌFíçq~Æ{LKf9ÊÎÚ{èü­½'wNïúÜÙZùïi¾ýÕô:/Ç{�êDÁ^ãÃæŸÍêéÇ›Ç7}GÁ¾ºÖ¯Ÿjvª„^ù¨9}àǦàNËþѳM8.< ·,¯ß—]­çbjHÁÖß§`oÿ²³þ>Ý·óñè_0–� ì5~Á^« «§›–AÄ9*Õ±™ öÿ4gþ¯æÀéÖ*Š îñæû“ÿt;v/Ê-Ëÿj>_9ln?’)ØÍÕO›•§N6g/ükz®ïÍÓçÿ1ýzymÿ²£÷ééûxyQ°�BÁ^ÓU°7–eQAŽ×#O×]w²Û¡#¼w>Õœ½4­%­#¾ºÍï[’bËrXã}àgQA6r{­Z}õѳÍã‡5?Þ¹³ÙwèÇÍÇWšÏ—¹qMÕõ{ö@ïá¿GK;vEÿjs©Y}åéhÝÿÚì{ªYYP«XﻞÇ3ÓÒ ý‹Ñ£k?§Ï?œŠ–™¬}ýôÛÍ… ×£åQg›ÓGL¿gí½vô¿šó]ïÛ‚tjQÓ}€eCÁ^3[ÁÎÁÞ W°×—dܹaù‡Žh?-±;.GÓI–Þ*Ëñuxì´r{탧žŒ µ– œZ»ÞskÏÖrÓs\«5§¿ÿšÓÿ÷xsàÐÓÍ+kÅùêç+Íã»ô¯ÿkÆ£+æ=ñæüÓ¿hV>7eV¿+»¢?Ñ{ÿÀ†÷áÕ ¯4Oí‹—Mý«¹pöß›CGO7gCÑׇϭâ¹1^çË—/7ûÛߦ_ Wå{�–{MgÁV¡ì\"ÒG¦`«àˆ?fgôOí©"ß§äwØP–uDp¥9zàñæésv‘H²`{Ë[Ö´þHYNUþLþÈÚÙì{ês„xMë¥@ïéÃí.êº6ûaVý><ù¬¹Žïñ«Ÿÿ¾yêiï6û‡ébŒñ:¯¬¬L®çá‡n~÷»ß5ùË_¦Élª|ÏÀ’ `¯ñ ¶·yÜ‚=Yã½Ó9ê·a™Èzq=à«`¯›½¼ó·NÙ‚ý³æq[¼ÜÒ´|êû=ðþõ$Ë5ì~aÚ;ƒtþ‘: •ú§ìý‰çt¿Žw”èíS°åïÿ{óòË/7?ÿùÏ'×¹{÷îæ×¿þuóöÛoOŽp÷1Ö}�ÌŽ‚½¦]Ö·¬{üñ¾ÛôuIìõ³Ó-8* *ÎÓN¶é{²}Ò}¨ðñGF+Ø*]þö„SÉ‚½æ«sÍÓGŸiÎ][ {©Y]ù÷æ)öÁ®ð÷@ï¿C[èÍú‡[êºú»²öÞ{$ù/ ‰ß¿Ér—ã›\¢²yóxU¨U¬U°U´u?ýéO'\E¼ �gÉ ¶³žy2=O4ÓY6UPœ~][nbó®“ÏDG §ëL÷]Ënhv:Ù¬´N “§?(âÍlø`RÚu&ÆpŸTjzžhfMëLŽÏžk/?XBz>ê’:â›:Rìãè±~¶wËÑïõ÷™Þ‹‡œÛ©ç„F%^g-ÑÒ-!Ñí=ñÄ“¯?ûì³éw¬«ï=�ËcÉ 6PFu¿™%j¹Ð“­ÁÑ®"§š£ÇÍšíQŽ«¤?jŽš¯/c¹¾/ûtYË¡ÿ¸ö¯$W/œoVN>ÞðÖ‘/@é×Y¥ZG²U²uÛ*Ý:Ò­Îÿ÷ÀâP°jù=°ÿzq}âÖ®»zá\ó솭ðþ³ù}ô/&“Ï´®G“8å¿gÿڄ­/ã]Š×|›­wjN¾²ºqéÔé>-Š–‹h)IX·­Ñϲn�0 6P�¿Ë¡¦×Y÷%^·­£Ü:Úm—’��ÆGÁ à÷`9ÔV°•êxÝvØpuuuú�€1Q°·…®k:“Ús£çÛ_M¯s×} [�j'}OØPë¶YJ�ã `ð{°¶BÁŽ…-�µV;,%Ñç¶��¤Q°–ë÷`}w=æü„5nzLµr_¼-�ufIÖmÀl(Ø@ü,‡­^°c*Õ*×Þ€�€4 6P�¿Ëa;ì˜wêv¶�€nl �~–Ãv-Ø1jÅžõÔí�°L(Ø@ü,‡e(Ø–¶úó¶�dÝ6€eFÁ à÷`9,cÁŽ…¥$aÝ6[�XVE 6Ã0 S~©k @]ÆR�Û‡Õ��sÖm³ €e@Á�NÝo¨¯ÙÀvAÁ�,Œ· Žt³ €­Œ‚ �¨BX·Í€�¶: 6� Jv @-)a @�[�P=•ê®-� 6l�À–¢å"a @•m §nP 6�`K³§n×Qníf) €E¡`�¶®-�µž�J¡`�¶¥° v"‰×m³”À¼Q°�Û^שÛÙÀ<P°�KGë¶í€ó8u»®£åÀò¡`�–šJ°Êu¼n{¬-�u½º>ր˅‚ �À”ÝPËI6³  ¶®G£#æÍ–��‡Êp×€}×mÇ[££ÙœØþ(Ø��ô¶� ë¶õ¿¹-�•Å;ŒŽŠs4ؾ(Ø��Ì(lÖm‡-�ut:.Î][£Ÿáh6°=Q°�Øjo Àßüæ7ÍŸÿüçV±¶£ïe«@`{¡`�0¢°nûÞ{ïu µ7÷ÜsÏäˆ8€í‚ �ÀèÈö~ô#·PwÎ:ÉÑl`ë£`�0:Ší•èÜèh¶v°uQ°�™Öd{åy–Ñ(Ç>³$€2(Ø��Œè¯ýkóõ¯Ý-ÍC†£ÙÀÖCÁ�`$ZwöÉs8Ý:°µP°�‰ ¶Š°FGžg­ÛÖíüá`f„)…‚ �@å¼¢À0ÌìS �€ÊyEa˜Ù§ 6��•óŠÃ0³O)l��*ç†afŸR(Ø��TÎ+ ÃÌ>¥P°�¨œWf‘óÒK/5ï½÷Þµ]s<xm>øàƒæwÞqnÑS �€ÊyEa5'NœhvìØ1}w^ïÝ.W®\™”o•qïz1¥P°�¨œWjŸ³gÏ6ï¿ÿ~óúë¯Oæµ×^›Õ £Üû9¦ž9}útsìØ±IIþâ‹/šK—.MÞ¶HǼLûÿñÆîm”žR(Ø��TÎ+ 5ŽŽTªH…"&çÏŸß0±ør•î‹/NFeN¥.”óW_}µyùå—¯•sï¶™ÍOø£è³Ï>›¡öʲė÷Ít4»†’] �€ÊyE¡–Q)ûøã›sçÎm(̱øòY2IåúZ·Š·Ê¹îK\ÎUÌC9ç¨ùÆ9sæÌäõþýû³K>â²,C2•ìE/)…‚ �@å¼¢°èQiU¡åÊðLRùÐLÞ}÷ÝÉQU!÷ãv•j¥¯]WRùLGǽûUjJ¡`�P9¯(,jÂÑâTq#ËåVßL£%(*™5}ønÞ££÷:R}ã7¶Ê°tâ`Œ,ä‹ü—„RÚÏ��¨ŠWJOX‚ØÒj‘år+•iK9-yñÅÝÇ·]GDhÉL`Ën,Îr¹Õ7Óèþx÷µÄ”BÁ� r^Q(5*¤o¿ýv¶Ðær«o–Ë-›iݯöe^¦£Õa´äŽ;î˜<±¸ìZq–Ë­¾™Ö{{÷·Ä”BÁ� r^Q˜÷ÄG>miÅY.·úf¹ÜÒeáˆõ2kw¼ˆ^+Îr¹Õ7óîs‰)¥ýè�@U¼¢0Ïчþtä7ˆËlW¡íʇf’ÊS™–³Ô²$¬Y×ÉYâ —kt¤ÙûÙÍŒ–óÄ…VKe’ʇf.?uê”{¿ç=¥´9��¨ŠWæ1*¥*|^iˬÍ$•Í$•ÛLèȵ÷Øæ=:b¬-ïtªð={ö ÚöNË9víÚµátãC>صæÚ»Í®LRùÐLt™þÈðîû¼§”ö£��UñŠÂØ£B§‚jKk,•I*šI*—iø /¼à>¶yŒÎrxäÈ‘I™Ö™ ƒ>å²+OeqùÖè‰p\÷GGÁUZ•Ír½©LRùÐL(Ø��`¡¼¢0Ö„£ÖVW¡•8ËåVß,—ÇôÇ÷ØÆMÖÑáYOžË­¾Y.·úf¹Üê›ÅyøÃ ô”Ò~&��@U¼¢0Æh/h µÐJœår«o–ËuÄ}Þ§ßV©~â‰'&GsÒŠ³\nõÍr¹Õ7ËåVß,ä‹:mz)íg��TÅ+ ›­Öõ‚¸´Z}³\nõͺr…qžKBô‡‡NHØ‚ë›år«o–Ë­¾Y.·úfï9/1¥´Ÿ��P¯( •k•S+Whûd¹Üê›Ù|^§ÛÖs££Õa{;+.ˆVß,—[}³\nõÍr¹Õ'Ó¿xω)¥ýè�@U¼¢0dþøÇ?v. ‰Ëì,™¤ò¡™x¹–µxm3£b­µÕZrDMlh&©|h&©|h&©|h&ºL§l÷^‡SJû‘�€ªxEaÖñNJk04“T>4“p¹þ0PöÛÐÑN *{7ÞxãôÖÖ¥JâÐLRùÐLRùÐLRùÐL´ûŠ÷z”˜RÚ��TÅ+ }Gë”ãõÖZMlh&©|h&c—k}pQÏIªÎ#“T>4“T>4“T>4²·÷XSJû™��UñŠBŸQ¹Özk¯´¦JíÐLRùL[âU®µWt|IÁyd’ʇf’ʇf’ÊgÍôÁQïµ)5¥´ŸE��P¯(äF¥4”k[Zƒ1²\nõÍ4c–k}xQKAl [ccd¹ÜJe7ß|sóo|£Ù½{÷dNž<9™Ã‡7?øÁ®ÍC=t-ÓsøñÇ'¯7Îr¹Õ7Ó,jÿë0¥´Ÿ ��P¯(¤F…*œ Å–VkŒ,—[}²±Į̂B§3-Ú¢gÍ;Ëå–.»å–[š»îº«yþùç'Eù±ÇÛP¢g•p]_ê6ã±6›éL”ÞkTrJi? �� *^Qè•k톋 ­Æ#ËåV*{ë­·ÜÇ6ËèŒñ>Ö—@5ï,—_¸p¡yóÍ7G)Ó©yà&GÂs÷'—[¹ìÔ©SîkUrJi?�� *^QðFå:lÃgÅ…6—[}³\nyÙ{\÷]’Ë­12›øá‡Íw¾óæÁtËð¼æþûïwïÄ÷5—[]™–¨x¯Ué)¥ýÌ��€ªxEÁŽÊõ¹sçÜÒę͇f’ÊgÉ6[®uúm-‰Kž-z’Êç‘I¸\G޵Lã¹çž›ëQê>3t¹È¬Ù˜ké7;¥´ŸQ��P¯(زæÚæC3Iå}2Ç{\}F»ƒ<xpzë¼¢KåóÈô÷îÝëÝEŽœwÝ_‰3›÷ÍtVÌZʵ¦”ö³ ��ªâ…xtä6Jk+•Í$•§²Í”k­ë §6O=›I*#Ón5©îšãÇo¸¿+•ç2]ká½×mQSJû™��UñŠB˜—_~Ù-­Ú\nõÍr¹e³Íœú<ÞÓº«èIœårkÖìÿøÇäˆmé5ÕC'ˆKüx‚Y3­¹®éÈu˜RÚÏ��¨ŠW4*0Ú1Ä–ÖXœår«o–Ë-]¦c¾úê«îãÊŽZëè¨å½ Îr¹Õ'ÓÑjíþá•Øš'?NÕ'Óë¢×Ö{Ýj˜RÚÏ��¨ŠW4ñ)Ðs…¶onõÍryL =º©#Þa‡TÑËe¹ÜêÊôØ´#‡W^ke·âÇi«teÚküĉîkVÓ”Ò~æ��@U¼¢ ¥!VW¡•8ËåVß,—‹ÊµÖŒ{)5*äñ]EOúf¹ÜŠ3m¯gÏž¸ÕFºÌ=Î\.Zªã½f5N)íg ��TÅ+ :C¡-´q™µ™¤ò¡™¤òør-R®½%!qÉ E/He’ÊûdÚ}Ã+¬[mtªuïqJ¸ÜËãË9â¾fµN)íg��TÅ–Í‹k,¾Üf’ʇf’Êõµöè²,D®kIH\ôfÉ$•§²íR®5Z7Þõ8%Îl®¯÷ìÙã¾f5O)íg��TÅ–-•ÈÚ®LRùÐLºríÑý /´Gjâ%!¹¢7$“TîeÚrÏ+ª[uÄ{œ±T~ìØ1÷µ«yJi?“�� *¶$hsàÚ Îr¹Õ7ËåCÎâ§½“7³Kˆg¹ÜÒe:ûâVý c×hìXüt=6ó^»Ú§”ö3��ª„_|qzéuq¡µâ,—[}³®üÝwßùȵÖ[±Kˆg¹<¦}­xà·¤nåÑ VüØçAlæ½~µO)íg��T%.áÄ2V®ìöÍ­¾™Í‡, Ñ|¹Pæbcd¹\´SH­gaÜì¨`瞃\®Úz¯cÍSJû™��U‰ Bß37Zq–Ë­¾YȵvzÖe!:ó_,.rkŒ,•k‡ ¯˜Ž5*¸aî¾ûîæÎ;ïlvíÚÕÜwß}Í÷¾÷=÷gÆ•Ï=¹|ÿþýîkYó”Ò~Ö��@Uâ‚ìPhƒør›I*šIœ½õÖ[îonΜ93Ù"UäÂĆf’Êo½õÖÑ—„¨Dß{s}ÓM7µnßÝyïXßžg6/×’ïu­uJi?£�� *¶$Ä…VKe’ʇf¢Ëf-×gÏž|˜1.lVœÙ|h&^®£îc- QIב龅ºkn¹å–¹­··e¥òp™^?ý‘ä½¾5N)íg��TÅ–„·éÓúi{?S£΄ÝPâ§±RùÐLÂåÚz¬«£Õ:Rßî3£ÙZ–coÇJåá²­´T¤”ö3 ��ªbK‚>\&©Â›Ê$•Ï’©$ë ö>¦&ì‹KœÆJåC³þóŸ“5Ï^ùœu´nZk¨íí9ZfâÝöÐ ¯­½+•‡Ë¶JÉ.¥ý,�€ªxEauuu’Åe׊³\nõÉ´ Ÿ¶ ôî_×Ägf´BY c‘…\÷Œå =ôÐÜ‹u<cýA yæ™g&Ï…ØÛ±údZK?äl%§”ö³��ªâM8Óa(¼+Îr¹•Êf]o­ñ¶á³â,—[}²1—ƒ|÷»ßÝôë!£ÛõîÏÑQüÀÞŽÕ'Û±cÇÌÿ¢QrJi?C�� *^QSúH¶–„̺ÞZÊuЧ¬õÉ­®Lëµ>Ú+™³ŽŽZó›ßÜp[%G|Ô}ðîÛ¬c_s{[VßìâÅ‹“±zï…>£’®×L×_o }Öõæ‰'ÜŸïšRÚÏ��¨ŠWâÑUDlŽÅY.·ÂåZû­ÛòîCj<¸¡^q â,—[q¦31>÷Üsn¹2:ú­-ôâÛXÄŒµ{ïÞ½Ógí:{[Ö,™Jpß#Ú*Ë}¶l´´D§ïv¥´ï%��¨ŠW¼ÑÙ*Á¹¢ìå©Léµ×^so37úð[W9Š/·™¤ò\6}¤U®±$¤kÆ:!ÍÍ7ß<}殳·’é_>¾øâ‹É[*Òaô~Õ¿Â\¾|¹óg%—i]ÿ±cÇÜ÷`<¥l¼‡�� :^QH>h¦#ÍçΛ^Ãu©"m3•"ý3ýЮ…5â¹rÔ•I*÷2Ýß“'OºEr3S[¹ÖhŸmï¾Î:wÝu×äú,{{±¡™¤òÍd*Ù¹#Ù¥´5��¨ŠWúŽvùÐúgO­[[¤cúZÅüõ×_o^xá÷:ûŒŽ\Çrå¨+“T.Óšè±ÖXÛÑ‘âÚʵF÷É»¿³Žþx×iÅ·g󡙤òÍd:ñ÷~ SJû�€ªxEa3££ÛZö¡­ ÿL¯">dµxYˆ.Ïe¹\´†þ 8|ø°[Çšyœ8f¬kGí®_¯5F–Ë­¡™¶‚ôÞ—šRÚ÷ ��TÅ+ µŽŽ”Kª�õͺrí¢±{÷îÑNkžšøèn£#÷ÞýžuôAP{ÝÖY.·†dú—ゥ)¥}o�@U¼¢Pã ÝŠÏŠ³8¿pá¨;‚ôØÅÞŸšf¬e"í¸b¯ß#ËåÖ¬ës¥´ï)��¨ŠWjý³ü,Húf:J;.öm‡ß—g¬µç*¥ö¹×Xcd¹Üš5ëÚ°”ö½��UñŠBMʵ-9_>K¦õÕÚÝâÁtË`©ÑVö~Ö6c퉭%7áÌŽö6bC3IåcfZªä½WKi?r��P¯(Ô2úP¤¶óóJN0K¦e :’Zb}uß©áÄ2©Ñ‡0½û=dÂQl±·šI*+Ó‰—¼÷k)íG ��ªâ…&”ëÀ–œX.ÓÇ>1ÌX£Ó’ë(q[õiô€w¿‡Œvd‰ÙÛŠ Í$•‘éìŽÞ{¶”ö#��UñŠÂ¢çÌ™3ÍŽ;Z%Gâ¢cÙlìS™ÏsT´õG€Ö„ë‚ø±,z¼û;t´4ÇŠoËê›årk3��$yEa‘£e:¡G®ä¤2ž»Ö#Ö³Œ¶ñÓ^Ô:«â"K÷X§M×hÝ»®ÓŠoÏê›årkhFÁ��I^QXäô9ºte:9ŒŽ{ån«Ê¶ŽpǽČ}Ë>§O·úf¹Ü’±��$yEaQóÁLïÕº¸àØ’#q¦}¬µÝ^éQá-yȱ v8Š­±âÛµúf¹Üš5Ó™I½÷o)í{ ��ªâ…EÌ©S§²Çæá2-¡ðŠÜv-ƒ)ñáȱ¶ê‹'>‹ow–LRù˜��$yE¡ôèC7Þxㆋ Nœk_åí°Öz3£å0ZlŸ£1g[GÅãۈŗϒI*+{çwÜ÷q)íG ��ªâ…ÒséÒ¥V‰±l®r}üøq·¼5{÷îݰ«GL—«ÜײÞ[…u^„œGÁÖ|ãߨp;±øòY2IåcdúƒÐ{—Ò~Ä�� *^Q(9:+^,.2K—i—í°á•¶1Fk¹µÅ_º?º/»wﮢhë>ÌãCó*ØÏ<óÌä9ŒoËê›årkh¦í#½÷±¦”ö½��UñŠB©9qâD¶àØ\G®çU®UP‡îp¡¢]Ãé×5Úmd̵Ùó*Øšð‡L|{Vß,—[C2írã½—5¥´ï-��¨ŠWJŒö»²îz^'ŽÑYµ‰w›AßLK½£‰ö®k§‘yì7ß|sú ö~­8ËåÖ¬Ù{ï½ç¾Ÿ5¥´ï)��¨ŠWJLX╘ Î4~ø¡[Ò6;ZË­#ãA|›VßL£Ç¸è¢}ß}÷µî׬3ö6}ñ¤NŸnõÍr¹5K¦? ½÷³¦”ö½��UñŠÂ¼G»0q %&góXç¬å&ZÞ‹oSKeâå‹.ÚzŒ·Þzkë¾õy®w×è_{Û±T&©|ŒlÏž=îû9L)íG��ªâ…y¶•‹Å%Fcé2­oöÊÙfF…=Þy#.›5“®\E{‘k´µÔÃÞ·>ã]ט£ÝXbööc©LRùf3}fÀ{?‡)¥ý¨�@U¼¢0Ï9räH²Äx™Ìã(ª]smowh&©|‘»Žèyœem¶v%ñ®gÌ gvŒÙûKe’ʇf©ÝC”Ò~Ä�� *^Q˜ç¨¨t•˜øò8ÓN^1ÛÌt}¸.¾]šI*ײí³íÝ·Ó÷tëó^ÆÛkÜÞ—X*“T>${ÿý÷Ý÷s<¥´-��¨ŠWæ5*)☠ÎB®2앲¡£bkÅ·ùÉ'ŸL/]gVœårK—éñ¢ŽfkRE»äY2ÃþÝV|¬8ËåÖ,ÙåË—Ý÷³RÚ÷��TÅ+ óš‹/NoµÁÑŒ¹5ŸÊ¬Ž{·ûì³Ï^»Üæûöí»vâ“ÐH¸<Œ•Ët´Û‡wK¶õSÙ£¯½ï›×hÙLê9ê“år«o–Úš/žRÚ÷��TÅ+ ó˜Ó§OOoñº¸ÄXq¦Â畲!cÏtK}Ë^ýõæg?ûYsûí··¾WtY+\®ý³µmw¿·û謎}ž£\–Ë­\¦äzïgoJißS��P¯(Ìcžxâ‰AG3Ö m•_¯&µÖx†dºNm+|¿÷3árÍ~þùçÝû¿Ç{m¬¾Y.·º²+W®Lþ0ôÞÏÞ”Ò~�� *^Q˜Çha¯ÄÄåÆf¢Ë¼B6ë<öØc–vèzµ£Iøoï¶eh&6 ßïýœÍ´¥ß2Íö ¶&–Ê$•Éú|°1žRÚ��TÅ+ ó˜ø´èq‰‘ør›‰WÈf­ñµ¾üòË ·go{h&á2-±Å>ž˜ÍtvÉe9š ¶Øç!–Ê$•Ï’}öÙgîû85¥´5��¨ŠWæ1bKL,•y…l– û,Ûëµ_K¸lh&6בС%[–áh¶ýÈ{‚T&©¼O¶ÿ~÷=œ›RÚ��TÅ+ cÏo¼1½µu]Gâ,ä›-—*¨öz¿öµ¯M®Ûnד˺r[²%|¿÷36ÓÑì—^zÉ}|ÛajÙ¦oÈ‘ë0¥´ ��¨ŠWÆbÚê*8g-ðJYŸÑîA¸¾GyäÚ×V¸lh&]¹–‹Xº<Œåe:ûäñãÇÝǺUGëã½ÇôÍr¹e³ÕÕU÷ýÛwJi?��P¯(Œ=*Ø} N,Î6sÂ僧vùâÛŽÿ[†fÒ•k+?Ky«+ÓÉwy‚š1GGæ¥ë±Jß,—[ºLŸ8vì˜ûÞeJi? ��P¯(Œ=Ú­#UprÙ]wÝå³Ü„“—XŸ~úéô¿Öuݾ ͤ+ÿö·¿=ý¯ëÂ÷zßߕ釒g[œÇèèµ–¿]Uúf¹<véÒ¥™¶âKM)íG��ªâ…±'Áö N|¹ÍD—Ýzë­n9K>ØÎØè]o,õ=C3éʵÛ^¾×û™T&:AÍ<à>µÖ^ÇR5•I*÷²Í¬·ö¦”ö#��UñŠÂØóÎ;ï¸'He¢Ëf]qþüùìõJ|¹ýž¡™ä~6Õéëxb©Lt™Žôë ïù¨qt½Ç.›5“T_®çß{¯nfJi?j��P¯(Œ=*ØM,•É,K!R{*ÿéOš&ë™.šIŸŸÕÜ7ÝtSë{õu<±T&ºLGíµ4¦öõÙ¹?€†f’Êï¸ãŽæÔ©Sîût³SJû�€ªxEaìÙì6}òᇺEÍ-)±ÂõíÛ·¯uÝÖf²Y~Vxìú™py.ëÊU´k\Ÿ­¥,Ú %–{,}²\.›Ý%$7¥´)��¨ŠWæ1–-?±8 ¹>ç6;áƒáçböò®ï‰ÿ7Ö'“Y~6Åîú™>Y*WÑÖ.ú0¡÷|•Q¿û÷w3YW¾k×®Ñ>ȘšRÚ��TÅ+ ó˜;vLoñº\1²¹ö´öÊ[FìÏÅìñ÷ØïšIߟýío;ù:ŒÕ7ËåúE[û•>#¤Š½ ¾n?¾?kŒ,ί\¹2ù@©÷~œÇ”Ò~��@U¼¢0Ù³gO¶Yq¦Ñ½Fyÿ\Nêû†f2Ëφ¯½ïï›åò@K4žþù¹~ rïÞ½“1Zñý‰ïS0F¦Ñ{AÅÞ{/ÎkJi?z��P¯(Ìc<x­üÄâRd3±y×Yµ4$f.%õ=C3™ågÃ×örIe’Ês™Ö«ë¹»ÿþû7µŒDGÆŸ{î¹ÉZùx{D{›g6š‰.Óry}ˆ17¥´9��¨ŠWæ1›Ý ;Ì-·ÜÒ*‚ú0Ÿ÷³ñÏÙ,ˆ/·ß34“!?«ÿŽ'–Ê$•Ï’éä5ÚáCGµ$GÅ;ý£Ë•«˜kn½&¹ëµRùìòåË“Ýj¼÷^©)¥ýl�€ªxEa^£SR{åHâËm&q¦£®*y*{›ÝîÍ — ÍdÖŸ½í¶Û¦ÿµžÇKe’ʇf’ʇf’ÊûfzO}ðÁîû­ô”Ò~&�@U¼¢0¯Ñ™óâr¤‰¥2Iå³d:Jk¿'¶™lèÏ~òÉ'ÓÿjßßX*“T>4“T>4“TžÊT¬µìèÌ™3î{mSJûY��UñŠÂ¼&ì‡ÝUš$Îr¹Õ7Ó<üðÃÓ¤Íûù — ýÙ_þò—ÓÿZ®Ëû™8ËåVß,—[}³\nÙLKA´3Hé0ö™RÚÏ��¨ŠWæ9_|ñÅävmqŠÅY.·úf<òHç÷Äÿë“ÉŸýýï?ýê:]ÆŠ³\nõÍr¹Õ7Ëå–.Ó6ó8½ù˜SJû��UñŠÂ<çìÙ³Ó[žo!ë“}úé§¾Ç~ÿÐLfýY{_]ÆŠ³\nõÍr¹Õ7ËåÁ¥K—Šîe½™)¥ýÌ�€ªxEaÞÓw¿ê8ËåVŸL§M¿ö ÍdÖŸíúþpy.ËåVß,—[}³T®íö½+ȬSJûY��UñŠÂ¼Gëgµ–Vâ²¥±RùÐLÂå¿úÕ¯:¿G†f2ëÏê,“Þåá2/“T>4“T>4“T¾ÿþ…íc½Ù)¥ýŒ�€ªxE¡Äèèd*\’ʇf.×òŒðu,þz–L†ü¬Ž¨ëë0±ør›I*šI*šIœi}õêêêdù÷^Ù*SJûÙ��UñŠB©éZ*¢±RùÐLt™Žùå—×¾Žÿ7Ö'“¡?«­úôßñÄR™¤ò¡™¤ò¡™èhµN@ä½7¶â”Ò~&�@U¼¢Pr´7v,WÊÆÈ¼Ü+Ùž\¶™Ÿ…ëò~&Îr¹Õ7ËåVßìŽ;¦Æmö6;¥´Ÿa��P¯(”žZJöí·ß~ír/ï“ÉŸÝÎÛôi½ýøÃæôéÓîë¿]¦”ö3��ªâ…EL-%[—ýä'?ÙÔ~2ëφõ×–. cÅY.·úf¹Ü —ëL‹zM·ÚN ›™RÚÏ:��¨ŠW5Z:‹‹œÆ#Kå:Îøè}tý|Êm¾ö¾¿o–Ë­¾Y.®\¹2)ÕÇŽs_ßí>¥´_ ��P¯(,rtÄSE-ˆ‹\\ædh&©Üfúð¡'ä]R¹ÍÂ×örIe’ʇf’ÊÃe:R­+¾÷Þ{îë¹LSJû•��UñŠÂ¢G€ §T—¸äibC3Iå©LKHt™Î0(6—ø2›ëk-AÑõÄty<±T&©|h&^®5ÕÚf«îW=¯)¥ý*�€ªxE¡–ÑQÑ>'¤šI*ï“ÝtÓM“õÓÿöoÿ6Mšæ¶Ûn›þ×ußúÖ·&ÿ{øðá '”éºÞY3IåC3Ñe{öìižxâ‰mÿAÅÍL)íW��TÅ+ µŽ{EÛê›år«o–Ë­1²\nõÍtò­§Ö9ÛqK½yL)íW��TÅ+ µN(Úq´úf¹Üê›årkŒ,—[^véÒ¥I¡>räG©N)íW��TÅ+ µŠ¶NX2K â,—[}³\n‘årk×®]“½©µãG¨Ç™RÚ¯&��¨ŠW¶ÊèCv*‰ZÎ`¥Êeœår«o–Ë­1²®\Œh§mƒøÆo¸Ï%³ù)¥ý*�€ªxEa+ŽÊöêêêd©ƒô)ž]ùÐLRù<2‰3™Ö*ÓËt’—¦”ö;���TÅ+ [}´äAåòàÁƒ“ÂÙ§˜Ú|h&©|¬ìâÅ‹“5Óú£BDdÝôâ§”ö;��TÅ+ ÛqNœ81ù�Ÿ ©ÊiíÛÿé.úã@ûë>눴Ù3gÜÇÇ,~Ji¿Û��@U¼¢°L£#Ý*®ÚãYG¼µVY\£3JÆEXKeâå*öºn•gÝ–nS–t°FzëN)l��*ç¦{T‚ãQ9'\îý,³½§ 6��•óŠÃ0³O)l��*ç†afŸR(Ø��TÎ+ ÃÌ>¥P°�¨œW†™}J¡`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���#¢`���£išÿ(§Vúq����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9aw_CI8.png���������������������������������������0000664�0000000�0000000�00000011515�15030617045�0023374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ø������ŽÙó���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��âIDATx^íݱk#ù¡Àqÿ‡j·Û„%M*WjÈ5Ûl¡Â,¸ØÀÂÁ \,\‘p…Àp$pä@à¤ÊãX„dÁ¤ÙfAŃð0ªÞq·¸9î‹!Dz˜ß›ßhFIcïØK²çóáÎ’¬4ë¯F¿m�� 1��$°� A��$°� A��$°� A��$°� A��$°� A��$°� A��´òÀÞÚÚ2™L&Ó&�Vc- mg;h‡Mzž½æ�VG`ÃØÚA`´“À†5°´ƒÀh' k`;h ÐNÖÀvР6¬í 6@; lXÛA;l€vذ¶ƒvØ�í$°a lí °ÚI`ÃØÚA`´“À†5°´ƒÀh'Í-zNßü1ô:[Ùó¾µs’ñ»üºv³´ƒÀh'=çC8Mö'187=½Á?Âøì<¿]ê4 ½¥Û•§0¥w9 ƒíªë‹i?$§Ò;¬˜wç ¿+ͳìü4Œ’Á,^·º¡ô*$_ô&ó½†óÓQH½ÐÉçßé†Wÿó* Â(.bæ»ô¶gËXžzI8Ío•Þ[8†nï(œëíìßa¸×ÉÛ÷“Ÿ[,®/î¿Mzž½æ�VG`Wø0„‡ƒQš¼…ŠXÌÄØ|–rÙY¥¡: ìi N"z{zßU¿Þ„N÷Ë|ý8t‡'é% Î߆ãƒG¡7üw:§BºŒã$ôwº× ìó·IØß„oŽÇ³û<; I¿¶¶Ë]ßd\t]yLÅÇÿ´ú1µL;bç}8ý%}Mv²Ç;™¶C/ù.¿þþۤ繯9€Í °+,vôs÷Â^òm)o#°Çý_eúa< Ýî0Œçj4ýþqhn°Eœç~ŽÎ.ywúš ìøæáEØØ-ˆÉët§³†'í$°ÚI`W¨ì4bðÎ ƒ(rUP¦®Ø1h;òØ­ ß8ŸG¡üCþs.‹èË\Øq¯øËpðâU8-júüÛ|FsŸ´Óýø:í¶þÓ ÐN»ÂE=ËQ äòxä|Üõ…{ÑdxÈötïtÕß8ÏÝÌçŠb(Ͻq¨é#–{8>KïûÓÐI×Müïü'�íµYÛAéuŸÏ÷§atÔ;ñçÎÓÒ˜ùwaüê°4î?–\a½3»¾<-}s‰ó“0ìvÒù§oZ¿Î—%NéχoN^CérKCQâñofoìÖ(.Ϧؤe¸ïv…«öGö`ÏùX`Ç=Ö»ó{§ãÞåÝr˜,öä>'a‘O—Fo…[ ìøæàwa.¨J×ѳtÙÊn¯MÜâ'4»Ÿ}¾‰ãû³ƒzo“§áAöz}Ÿþÿ³Ðí'óûÆçôð‹åWã¶òà’ƒt눯ýít›zUð>œvÊ¡ž°úÃãérŸ¾ GýGñf®‰çù?ÿùO6ÝÔ&¾æ�î+]áÂÀ^ Ñr`×qy`gCPb /Mő貯ù®C—võ¸î ×mËlÞvP¼Q놃ã·ËašÆîÁ~Þ.]ïÙò‹ñµq•=ÖÎÇGaqˆÉÜ›Üý_„ê7lKoL×£‰ç¹ßï‡ßþö·7ŽìÍ{ÍÜ_»BuNöà-×h*°ãA”BgéàÅÅa"“Ÿ»ƒ7ù^½²kv¶gùñÕ÷ø}4°ûKë¦2šZh󶃊OO¦&¯Í¸ÌÕÓò™AnþF*¾Î¿HcayÊorã0’ý£êˆ¾Gýý÷߇_þò—áÉ“'7Šì&–€zv…å8˜|aÊÞ^ÝÓô]ä’ÀÎÆœþª:pb,tg‹''ó‘"ÜûôÊÎQýt~|kq®ííò8Ü’K;žEâ«Ð?|= Oûwð;çÁNmÜv½þÒç¹òµ|Õ7n1È{7<_œç³Ë?)Çö‚l¸K£gÚ¹ž¦žçÙ1°oÙ`uöœâcòÅ=t5¿hæÂØŒ±PqàWñcïò—ÑL£aqyŠ/¥IÅø-D˧No’Ñâ`Wp6ÇÃò}vCø·0:-q|SQç‹f¢Åor쇣›,ß=×ÇF¹to æK±{±êáAW“¾Îö>_¶´0%nƒUÃP6è š|žcXß$²7î5p lXƒMÛâžá—ìñ|Ñâ'8ñ¬"_†~ùTŒQܾûâæ8.:2†û£Òžôøs7ô¦Ÿ’Ä/¶I ÷¨zù4ý<‘‡ŒÄ½ÚWáß^€Õذ›±\ðÉJ6•¬˜œ£›_ß ;ý¯ÃËÒ'¤ûð çm_øÔfú©Pù““Ò'9gãðj°ðõþs§ \¯¸LM»nd߯²�PM`ÃØÚá¶žçëD¶×ÀêlXÛA;Üæó#ûøCíÈöšX}/]t°fÅtá™Ü¦¸î¹ÿVñ<‘=óKªyͬŽÀ†5°´ÃªžçÙq^¯_¿Î/Yæ5°:Ö UÛAvŽíNö˜?:ݳOTâcZ•Eö*— í6¬í Vý<_Ù^s�«#°a lí°Žç9ÆuUd{ͬŽÀ†5°´Ãºžç"²“$É/ñšX% k`;h‡u>ÏEdÇa#‘×ÀêlXÛA;¬ûy.G¶×Àê¬%°M&“É´ú €Õð/.À=¿é1~M1\€Û%°Z ˆìçÏŸg_³ÀíØ�-QDö“'OD6À-Ø�-"²nŸÀh™Ù1°E6ÀíØ�-ÃZdÜ ÐREdÇ!#q¯6�ÍØ�-&²š'°ZNd4K`Evü"‘ ps€©"²Çãq~ �W%°˜#{kk+¼~ý:¿€«Ø�,Ù�×'°¨$²®G`p¡×"àj6�—*";I’ü�.#°ø¨"²ã°�.'°¨EdÔ#°¨-Fv<O¶È¸˜ÀàJâ7=Šl€‹ l�®¬ˆìçÏŸg_³ÀŒÀàZŠÈ~òä‰È(Ø�\›ÈX&°¸‘Ù1°E6À„ÀàÆbX‹l€ @#ŠÈŽCFâ^m€¶Ø�4Fdl�&²¶Ø�4.Fvü"š:‘í k€ûF`pkŠÈÇù%ó~üñǰµµ’$É/¸û6�·*FvŒèׯ_ç—ÌİŽ×ű pl�n]UdÇa$1¬ãåqúýïŸ_p· l�Vb1²ã‹¸.¦‹†’�Ü%€•‰QýÉ'Ÿ„¿ÿýïá7¿ùÍR`dz�Üu€•Šq½ÖåéŸÿüg~K€»I`°2qvÕžëòÇeÇñÙ�w•ÀàÖ½|ù2üú׿® êªÉ¹±»L`pkâA‹Ûc}Ñä€Gà®Ø�Üš8Ô#žëú¿øEeD_6=þ<¿€»E`pëŠÐ.Ÿ÷ºÎT>o6À]!°X™"´>|XÔ‹“»H`°rW í?ÿùÏùoÜ €µùñǧßðxÙôý÷ßç¿°ù6�k÷±ÐvÀ#p—l�6Æe¡í€Gà®Ø�lœªÐŽçÓvÀ#pl�6V í8<¤ˆìx`$À¦Ø�l¼ø­Ž1´‹óhl2ÿJpgÄÐ.öf›L&ÓǦuØ�Ü)ëü£ Ü�jØ@�jØ@�jØ@�jØ@�jØ@�jØ@�jØ@�jØlœwÇ¡ßyúÇ?ä° 6�Ô$°iÖY v²×Õö`>ä—^Åùxº[Âpüs~ ›@`@M›æ}§Ißè{F`@M›æÅ½ØÏì¾g6�ÔÔ¶À>?…dÐ ôqÇǾµÓÃáAØž„óü6álއý°SºÍÑè4½þ»ô¶³Ë:½ÏÂg;ôÿ»¡?ükö»éÿwÂÎÁ«púq qü݇¡ÿê¿Ãè¨ê¾ ³ûÜÚ„ÑûÓÙí;OCòöýäfé2½*/wœW? ã³Ù=Eç§oÂQ¶,Åíâ´£³ü©óÒ<JÓüŽwaüê0ô²Ç‘O;!¿Ë¯ÏÍ­«b™¾ ÉÞçáøÝü²]n6´$Nþqº…šë½4»ø<¿üf0[þ –}¶N„Þàex5ÜŸüÜ9˜,ÍõÞññ¯‹ÀàNYçÍÕ:g'Gaoo¾9§9½§oþ˜FØì€ºóÓWá w†åÛŒþúÝgyìÆìæAwÞ„Ng/ OÒx;{;ó=·1 wCo¯¯ŠûÊïz_3qÜñîg_‡o¥¡÷4à~o“§áAŒÞó¬B?9™ÞO&ßáÁËð¶h½8ÿîÞòüvÒP?-Òù§tùçóÈñüm8>ø4ô’ï&?§ùmò,t—B2ýÝÃ/¦Ë>y,éü’Ñ$nÓpsØ Û{áñî0Œ¯Õ qxÉÓÐ-¿áÉÔ]ï©ó“0ìî¦~<]þl\w/ §ÙO¥e/ÖÕôMGiìwÝõÞ�jjM`Çë}FK{c÷&Qƒê૊ÛÄ {vcôeñ6 Ö£AxPìm-_÷aÛ»a0ú)»ÝÌÏa<ì•b6ŠQ¹Ÿ>Ýppüv!,ã¼ö“o.â²§±ž/K‘Ý„m¶Œ¥­òî8ì'—óY¾ì?¤Q~°ôF!»¼ÿpaôUÄN£vqüvÝõ~ì Ìt™.Zöòú¬¿ÞÛB`@MíìR ç—T9…ýÊÛ”~?žBîÁ Œ²¶ZˆåÓ$ôòÀº²x_Ÿ‡½¹ÀŽQº[}P`qHD1DaqÚŸ…Þt/lÆðuH’$$Ó=ñ…||f‡ÇÄÛ$ÿ*í©ŽéQÅ|Ši;{¼?¾‹ö@×tQ,×\ï“Ç÷·|èÈòrGqÙ?­:ÃIœ÷§‡“y\e½·D|Üë"°¸SÖùGsuâ^ÑÞü8ä%å½³‹bÐígœí%ž5ˆaühz¿³½ª1¢&Ã;²kÊâu_„ƒrL_¶6î X„åÕLÆcï^»E”OµÎºªz“P¸äÍBs!=So½Ç¡-OC'¾q˜{co¿?Ýkÿat>­Z'qÞ{ù<n°Þï+ �5µ>°c`þ+ÆØE{^ó±ÛÙ‰Òžììª4Œw_äóÅœÿþd/på0‰8Teïh~G »‹Æ,Çyì/Üþ æ†R\$Æäƒü ¾lÙ_\>„$}„ñ ÄöÒý¾ 'ýйÁ9¬«÷Œ×\ïÙåËãÛ×oå:9; I¿;;Ðó†ëý>Ø�PS;;äÑ—¡7wÐÞ»0>†~w/¾ÉÏêCl»7û9Æw2½îçáø4FÛÂøà¹¡ 彪qŒn<ëEyLu1¿å�¼<‚ã^Ù~Øþ»´G6•Ýâ ¼Èî?ÞÞQ8™>¾ô1ÿ½Çé2åãÀ³Ç—XÈîg/to¦÷þ6 û雀Ù}Eñ¬"_†þ‹ülÙ•û³ûÊu7ì¤óÛ‰gC¹Öžß…žª¹ÞçÂ;U<…³’Ì-{\OIèï<;;;¥O0ê¬÷vØ�PS;;Z<í\<ÍÛßÂ( çB¥òÛÄS·ågÛˆñ6“;ÏÃx;þœ^¯¸>½î¯͆¼ùîu8œ»¯¤4¿³ÓÒÍO‹{€K㦳ë—}²‡¾×+ß_‡= Ç¥SÓÅ¡»1€§·I§¥áó§û›Œé~9*Ÿ^pq]¥Ëtô&œ¦qÞË~®;F¹x3’/ÏÜÔ Ý?ýWøSÝõžüoöiÃì9Žë|8[ÆiøQßo§ñtŠù0 ™­÷v‰ë`]6�wÊ:ÿhÞWóã…¹bèçg“¡’À€švÓ.æÀæzÆÉAèîUš‚À€švƒæ†‘L¦ùoGd3ÄqÛKÏS>¼E\_*®«uñ¯�wÊ:ÿhw‡À€š6ªØ‹átí³°ñ9[ÿJp§¬ó&pwl�¨I`ul�¨I`ul�¨I`ul�¨I`ul�¨I`ul�¨I`ul�¨I`ul�¨!þÁ4™L¦ºÓºl��î ��÷„À�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hÀ�€ l��hLÿ­\˜5.0Y����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ax_II8.png���������������������������������������0000664�0000000�0000000�00000011351�15030617045�0023401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Í���š���R[uç���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��~IDATx^íÝ¿kcgºðù7\›…-¦¶ÙÊ•Ã&‹XfÀÅ ¸H±!…Àv·¸³å Ë…Í€ÙÆpì…Fd‹7!„Á°aÌsÏ{t$É’%Û²Föù|àK:::?­¯^=çÕ£���®$4�ÀB3��Ì!4�ÀB3��Ì!4�ÀB3��Ì!4�ÀB3��Ì!4�ÀB3��Ì!4�ÀB3��Ì!4�ÀB3��̱’Ðüè‘l�Àýµ²Ð¬i𦭾°zšaœõ±NûÚq°<B3¬€s >„f€‡Ih†pԇРð0 ͰÎúš&¡VÀ9PB3ÀÃ$4à 8êChx˜„fXç@}Í�“Ð +ਡàašaœõ!4<LB3¬€s >„f€‡Ihf¹.ÎâõA36ò}þèÑFlµ²è_”Ö—s >„f€‡IhŽï#knË8Ö6šÑ~Õ‹órªˆwq–í]ž®Ú6ÛÑ}—OÙmÇæ´Ç­™ÅÙ¬ynìÇÑ›é!óâ¬Y{Hó¶ÕŠÃÿÍâÓ'ý×½ž«Ög/²³Ê ϲhNn3šÙ÷åDÉÏÑm?fç›r»]ÄùÉaìîeqZóÜœ¶õ°NûÚq°<Bsá<{yHîŽ"òå�XJrz+Þu£]†×šŸ´»y,MR(ßÍ{êó/âÍÑ~l4>‹ìó§Ñèœä÷Œ»8{û½èœ¼)ïIÞD/Û­2¬ßÜÄ2ÎÔÚ›Ãu›PÙ#iÞÍèô~)o×SmÂËÅYt[±•¯oZç~›øöÀ­Ó¾®Íq°BsaZhÎ]œDgûEd§oË;rwšŒ£Öo‹°ü®×‰F£½±Ôœ|3ZG?–·—í.CsZ·<ì Íå_Y:N·c£y'5.Éš&¡¹0#4Ç/Ñë4ÇKª¡wjH¼Ah~s­2XN ™éuÏ.Û¸½%…æx§ÙŸâåÑé°§üâô«Ø?x=Þ[_Cµ/é8ÝÇõ%4<LBsaVhž À¹zóõIëT´¹¥ói¿4c³uý‹tûelWK4ÒkÞºã*Ë Í¹óo¢³›Ðxú8m=fc¢§¾¦ÖïHû¼¬åOÇÖÛJYÅÆóÑ>;ïÅ«üÜÖÑO»¸³˃ǫmcj©ÑL雯Fÿz‚Ï+%ùíƒ×góy½£N´¶òé‹éÑ:|g ¿ØÝI˳.ÖiY�î;¡¹pÍÐ<§§yܼ@šz–·ÇK/RÏóv¥DãRh®ž²]dçZVhÎ×e<$Ÿ¿Žvó³èÖ|u=.zØþãçñåþN4ÛÿÈÃð/qš=Çi_|ÙîN´²“ño ò}z°ÿÕ¥‹;Ó¹òxøáï†Ò±¿™Ÿ‹Ã‹p߯ÙÑDZU-Yº8ͳ½huކáýâìu¶vb7ûnñ~GÖi_¯ëqp Í…Y¡9…ijË3ru M¡¥‘oŸ´Æ[åkî«ÂùBÁ}ž%…æÉ°_˜ý¤NÖóèïÏÔK»_)©éKßxü)ö¦†Ðt¼¼˜¸¸/Íëùõz–§¸èÆÞä<ÆŽñTôit.3õø[½eìë¿þõ¯ñí·ß–·nn=;€ûIh.ÌvEOÛîxæRCsª™Þ‰K½s“%©7:-ß” °n¡ywrÛ¤u|©Îu-Ï)ßr J%òåžÞ&GÄXƇ£tÜšø‰å©žsi¹ö§ãš?ù䓸Ío~?üðCyÏÍ,cY�èš SÞð‹éx»‹97Ó´&¿ZR�h ËŠ!çš/#ëMÄëÓ,v¯IhN£'¼¬ÔŸ^Äy/‹ý)_å×ÍZžÅñ÷|úpp×ý0vÕ¼–Î×>`•H]qþ¥&·-Y‚eíë?ÿùÏEp>>>.ï¹>¡`y„æ"0ÞüÇMfÈ:.]Uù1ÉLJA`òuF=zýºÍFå±ÇÑlgÑ=»É…vÓ×§ßnúã&¹K¿ø·.ßÃ’¶×Ú¹ªgöªÝi–ÒË›Ÿ‹»OŒ“ŽÓJ‰T:/ ɘ+.@m­ÅE§ËÜ×_ýu1¿›çµ<î�î)¡V`Ï«/ÜKµÃ­Ëß´£iì +˜,¥—7ïKßš¤’Ê· év#šÇåHo㬛E»¹3¥.ûýXö¾Nù¦ÁÙÿ^€åšaÖçH%[Åò\n“c,§@ú·ñaÝ:¯|sЯɿ<Ÿ¼]ñsð—M|ë1)¦ú-PåÛ‰að6šñj¢lé}JË´l7 Îw±,�u%4à 8êã®öõ 8ñÅå=ó9î�–Gh†pÔÇ]îë^¯W\˜.\„ã`y„æcÆSÚìÑ/¸+i»Sw½¯Ó0t‹gÇÀòͰÎúXž^48;î�–Gh†¨Û90û—./·‡öÍGZ§Uç>ú(þóŸÿ”÷Ž[Õ²�ÔÐ +à¨UîëŸ~ú)ž={V´iÁÙq°<B3¬€s >V½¯SXžœw�Ë#4à 8êã}ìëYÁÙq°<B3¬€s >Þ×¾ç>ø ¨wNw�Ë#4à 8êã}îëœ?ùä“âÁœw�ËsçÿQÓ?mMÓ4íý4�–ÃTXá¥>Öe_§1œÓ² J5�¸ïä�T ΩTã_ÿúWy�7%4<`Y–=ÎÇÇÇå=�܄РðÀ¥À,8ÜŽÐ P‚3ÀíÍ�51Ωd€ëšj$]˜.L °8¡ fÒ0t‚3ÀõÍ�5$8\Ð PSƒàœ~z;ý7�³ Í�5–‚ó³gÏŠ&8Ì&4Ô\ Ë‚3ÀÕ„f�g€9„f� ÕàœÊ6�šJÁ9]˜.œF„f�.ICÑ Î�#B3�S Î�#B3�3 ‚súùm€:š¸R–eñèÑ£8>>.﨡€¹R`œ:šXˆà ԙРÀÂÁ9•l�ԉРÀµ¤àœ.L Ô…Ð Àµ¥aèg N„f�nä:Áù§Ÿ~*ÿ¸Ÿ„f�n¬œÓOpÏòÑGE¯×+oÜ?B3�·’‚ó|Ïž=›œÓãéâÁ4 À}%4pk),§Ð<-8§^蚺ÜgB3�K1-8§ZæA`N-•rLëXwB3�K3ÎøÃâßÿþ÷ð'¸«ÍˆÀ}$4°T)8ÿîw¿‹ßÿþ÷ñäÉ“K¡95÷Ð ÀÒ}ûí·ñ«_ýjj`N-õFÜ'B3�K“j˜«þ]Õ¾þúëòY�ëOhàÖRX~ùòåÔp<«¹(¸O„f�n%性ãyÍEÀ}!4pk©Ç8”ñë_ÿzj8¾ª¹(¸„f�–fžgš1­¥ŸØXwB3�K—Âó_|15$OkÇÇÇå3Ö“Ð ÀYt4 ëNhàÎ-žSÏ4ÀºšX™yáù‡~(§X/B3�+7+<»(XWB3�ïMn.åjpvQ °Ž„f�Þ»jxvQ °Ž„f�ÖF5<¬ÿ•�X;Õr MÓ´«ÚªÍ�¬U¾÷—Ð @­ ÍÀ"„f�jMh!4PkB3°¡€ZšEÍ�ԚР,Bh Ö„f`B3�µ&4‹š¨5¡™õócµžÄFë(Þ”÷ðþ Í�ÔšÐÌrG·½UW›ín¼+ï½–‹“è46£Ñ9‰‹ò.Þ?¡€ZšY¾wq–µ¢uôcy›‡@h Ö„f–/õ6¿ˆNï—ò6Ð @­Õ-4_œu#k7c#_ï´î¶ZÑéìÇîX)À›èu¢µµÑŸæQ#Z‡¯ãì"õ îõïÛx­?6ò¿7b«õydVlóû8ŽÎN‹šÜ4ÝFëâ¤û·)ó*_*¾¬¹Ùl³Ý·gÑ=,çµñ<²Ó·ýÉÎ{ñªºÜÅëfÑ;Ÿ(`¸¨<¿ÒÆK%ÞÆÙØ2•-½þp¢|¼:ˆæFåñ­ýÈzUÆùr Ö}¸LßE¶›o‡7×+®x×mÇæàµ6ö+Ï_t»—Û*—öóW_¶GË?cÙGÛôq4Û_Å«Î^ÿöàõÝî5ÖU„f�ÖÎ*ß߯‹8?9ŒÝÝv|yÔ‹óâ¾<<¾þK¬žŒJ .òÀ»¿­ÎÑ0]œ½ŽÃÖNìfßÁºwƒöæ(Zyàê|“Ïóçè¶?,kqSÐ{[Í|^íŒBV1ÿѼ.zØþãçñeþX³˜þ—8ÍŸÿ8…Ý‹Bw¢•”Ë]:û_ÅépFéõŸ–ϯ¾Þ‡Ñ̾ïßNÛ¡{æA¼†È|;}œ/kgåíÓìE4.…Ã|þŸƒüÅÙ«ØoìF;ëö?äýõA36Ÿ6ãév'zÕ§^ÇYÍÆåç/¶ÝsEMôöø>Ì·oc¸~•eU Ã;£ò…·{=Í�ÔZmBstÚÍÏ¢;“ÔÓÛ,ƒR ‹ŸÆA÷çþCU)¤Að—èuš£ú®íǃ^Ñêc©D¡[í×ã+7àF=©Ø?: ÓùÔùKÿ)ö&Bv_Zö‘•ÝÃEX|:§,"-ãÓ«/²Ë×u/› Ór¾(×ïÇ<Œïz‡n?òE Ç/=Ñí>]ñ¡d8ÏYË^Ýž×Øî5!4PkõÍ)�½Œíy£1¤Ð¹w8½‡tšS(܉v·…Çp%€§ym¿œ^¢æµ[ ÍižÛÓ/œ+‚ðDÅXÛ«„·JÙE*;ɲȲNôç³,zÎS‰C#Z/ói¾Š£a¯s  ;¯Qm›E8¡Uýö›|1+�/¸Ý‹mð÷èëwy¹“ôܧ쑶õ‡ý•km÷zHë½*B3�kg•o„ïOêõm×L©,`¬xd‹0õ¼Ò¹ß/¡HU{?S0~\­®H=¹û•À96Ï ižOfÌgžAÉÁ”R‡‘AÐôP/²­Òz»S{v¯ø�°ñp<´Ðvï—´l¤ Ü$ÍsoØÿ®{N õÕ3·Ùî”Ð @­Õ>4§`ùÏ2`ͨ¥óo¢³Ûê?ìqN¤^ѽa@,z?Ëç]Ì6êoóPW-¡›ç„gõ~/b¬Œa–´}vÊõHëôr|ù.é‡ÖÍK=Ío⤳ÕºàëJë;­‡~‘íþ.=÷Å岋‰í;µüãü$²VctÁäm·û$4PkõÍéâ·Ï¢9va[9BFc7^Ÿ•½Ž©G²̓ãrt‹Ô ›E»¹3¬5\Õ²€jïç Fy#¶ö_•óÊ—¡wÊ…ÓkxRu+v‹ Þ*ŠQöãå :ÃÍÝèœTæRL³a]u¹~có*GÉh ë½/N³ØÛ=Œ“±²Ž4ÝgÑzY®Oªoì^¯Û±Õ|[c£p\ÓŒ m÷ÉÀ>eý4Æj¬Ç–=í—,Z[ckk«R²àv¯¡€Z«GhN&‡PKõ¼ne˜²ÂÄcÃQ&&j}SGêÅÝL··¢Ýýqôx³S k×~Ý+F“Í«YwÐSïnÿ—ó.·ÉžÚJ­rñøåeO%Û)°Vç3Y¦–wûi4džšKó210ª{NÓô‡wûj¸ìI ›ÿÈ?P<Í' ¥—îfq{ÑšßÁŒÁòL´Æg‘ý×¢Ûý¿£wrXÙÇi¹Îh‡a~”Ëí°‘ï«WÿÝJïußüí^'i¬ŠÐ ÀÚYåamŒÕßr?T{¯™Fh Ö„æ;pU2kèMô²ýhìNf¡€Zš—i¢„#µÛÔ÷rGRmwÿû­,-˜¯”¶Õªø¯ÀÚYå!p Í�ÔšÐÌRõÜWý(H¥é…¿WÒ>[ÿ•�X;«|#î/¡€ZšEÍ�ԚР,Bh Ö„f`B3�µ&4‹š¨5¡X„Ð @­ ÍÀ"„f�jMh!4P[éMPÓ4mѶ*B3��÷’Ð ��kDh�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€9„f��˜Ch�€+Eü?g|OôŸxHØ����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9ay_SDG.png���������������������������������������0000664�0000000�0000000�00000016664�15030617045�0023442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ã���Ó���+˜ ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IIDATx^íÝ¿kyþÇñüªÝº9Ì6ªÔ¸Ø\á&p*DÀEŠp ¨lqf‹C؃ƒ€ÀYø²aÀpMb׃ WÁËÚ§f ‹lF¼¿óÍÈ£ÑKÖx>?æù€»–YÖgæ3¯ùè=Ÿy$����Œ Œ���†Æ���Cã���€!„q���ÀÂ8���`a���0„0���B��� !Œ���†Æ���C¶ã‘çTã� h…„qF£™i��·13€ý lêg¶9�ða(�ûA5Æ�E#Œ`?¨Â8� h„q �ìÕ@�0€ý ã�€¢Æ°Ta�P4Â8P�öƒj Œ�ŠF À~P „q�@Ñã@ت0�(a(�ûA5Æ�E#Œ`?¨Â8� hþ‡ña(Íè5êë̶ZóXÎ×ÉE–üÜm«KЉÜô%ØYôý´J8¼Yòœ{Òîý2ùÞœ/2ì‡4w“Ÿ­I½ýƒü+üVö‚¾$ϸ™ñPú'm©§¿¿Þ–“0'ÍP†ñÜD/ñ0ù}Ù¶+Íà Fãø§n=Àkô„¾ðŸMýÌ6�~ð?Œ+ Ð{ô³iqt.AãPº™@.?KØ|~¦§FÒš·a|ú\“0»3 ¢KþýuOÚµy¾’F£+ƒ|ÆÕÛûV͹ÈàÑ…„íFæù7ñkôšŸI;¼ˆ^ýÄxøAŽ5HOÃøÄM?ȅ鱌úǹ×ó¯Ñ^£üÉ\Ü2'›dS?{¹Í@U7ŒGƃ®ì·B¹šfˇãã(‹w¤¦!üæBº'Ò|N¾—ˆO ^Jïz.¥ßßX׳¹¿EÿæÆa\}–A·%­ð§è/ˆ<ÄkôˆÁHOæö¥–?ùª8Â8� h•ãó5¦3<kã0þ‹ôÚ¿—F÷" µÌ_Ê~üÿ·4 ï¶{’£ßž†©'Ò Bé¿$-¶8ŒÏ÷‡yþð.év¾s0âXq„q�@ѪÆç·†éøoš´¤N|©|_@KTv:·3Êúõ~¶Teç¸/-38}-ízmò÷ÔÛÒ=íË07ѹ,Œß¾oø=at?È\› }ôex.'íFüumúÉÏXFƒw™zm™2¦XÂÓïg[-9¡\O|"ý»Zó;y¼mµæ_å<r8H¯›»¶¡?\ûw•I_Ÿ-lz-�€û#ŒÏ…ñ;fÆgÜR'%*;33Ê:S~˜™q\ðs~ÞuR°žñ°/aô7;}{îÆè5ºÊü~ eE‡òM÷D:–g’°õ8î—ñU(­FGÂìEËÐû“NZŠ”±ý'!ɶŸ½Pz|%½ÎþL¨ϤÓìH·½Þø½Høi7¢ýðjõ':&ÕÏE<ùm�P„­Gs'KÃx¾¬dQ™É*w„ñ¸ &™•ži³³ŒKÃpdÕ÷îEß‹ÝÌL}déïÐÀ)S)í5:Èü~|ªSÿVzseIÑ `' â‹Âm¦oévýl£™ðyzrðr®Ìef[Ñ“…Îߤ?W“¾¸œËEõsÏc~›�aëÑ܉Â’0ÏΔŒÆãêk³Á7–/UѯÇ BÉýƒ®þ»…3›k‡ñ/r>¿ Dð}b|?È—Ce¤%#ú¶¹0¾Î§BwÑ€ïr¯G÷—çÒ Ž¿Näpaà&Œ¯£¨×�0këÑ܉‚0/ó×z¾æÒ†Ë¬ ã:3x µ…õk©Š†_“¯uÙÀ¿H³æÖöÖ@üLvïÆw´&øäü¶F<^ª®#Íà|¦Nx>LG¯çü¯Òjå—6,ö5úÄô~°h•œÔÆ'KKVâÙˆîsóËxfCþl0Ÿ5)¹Y¾&¿9„q�@ѶÍ­? ÌÕ6OÚZ7ýÙYTÚ¢4TÔgVÛ4 å¿¿ìF@;™0’Ôʦ[j«EÁ%œ¿àrq�û.”ͬ çq Úô¦?ŽFŸè{aÎê™äå3ÐKÌ]d|ÑvÞš;Ížìê¶·¨f,£‹if—µGQý\Äó˜Ýæ��EÙz4ç€�˜Þôäï`ùL²Öfæ?JVWis5æ:˾_ÀÅ›sŸ–hÈßÍœàÆ¥5M9>OVNÑOnÂ@šEuïv Œ�жõhÎ0´h)ÈÂe£–¿ÓkþnšsË\NʪæžGÛ¢ë–J.$Mþí´„+û‰Ðô¤ür‹Ë>‘±‡¾Î"ñ<E½�€Y[æ�öƒª Œ�жõhÎ`?¨ Â8� h[æJ²äBÔùVí›ï˜¢ï=üWT?ñ<ls�à‡­Gs�ûAUÆ�EÛz4ç€�ø½ÜyÓ L[z7ZOèßX„"ž§¨×�0këÑœÀ~P„q�@ѶÍ9 �ìUA�mëÑœÀ~P„q�@ѶÍ9 �ìUA�mëÑœÀ~P„q�@ѶÍõ€@£Ñh´ò�À}Œæ@FÕPT?³½��R� d„q�@Š#�”Œ0�HqD�€’Æ�)Ž�P2Â8� Å�JF�¤8"�@Éã�€G�(a�âˆ��%#Œ�R� d„q�@Š#�”Œ0�HqD�€’Æ�)Ž�P2Â8� Å�JF�¤8"�@Éã�€G�(a�âˆ��%#Œ�R� d„q�@Š#�”Œ0�HqD�€’Æ�)Ž�P2Â8� Ÿ‡ÿþ÷¿òã?J†4ÚÆ0�HqD�6tyy){{{rpp /^¼ Ñ6n„q�@Š#°?ÊW_}%ßÿ}ò��ÀýÆ5}øð!žÑ$ˆ�€¢Æ5Ä�ÀC Œw ˆ�€‡BVHƒøû÷ï“G���ŠC–Hƒ¸þ��à!Æt&œ ��aÈÑÚp‚8��(aÈ ˆ�€2ÆA��”0D4ˆë5õ›���e!ŒÃkƒÁàÎõÁÓ ~yy™<��PÂ8¼öôéSÙÛÛ“OŸ>%Ì"ˆ��“ãð–Ö~k ¸¶ü1ytâ·ß~‹ƒ:A��˜D‡—4lkÐNÃø×_|‡ ��ìA‡—Þ¼y3 âiÓ™òÿýïò§?ý‰ ��¬@‡w´><ĵýùÏ–?þñò»ßýŽ ��¬@‡w^¼x±0ŒkûÃþ°ôbN��€²Æá]ÊpQÏ6-Q Ã0®��0‰0¯è…š‹ø¢F(��¦Æá Ö‹B÷]MC9¥+��ÀÂ8¼_Êpݦ7ý!ˆ��Sãð‚†êEa{Y;::"„��ããpž.S¸(p/jºÒŠ^ä ��`Â8œ·j)ôÂ�€ãpšÞUsQøN›®®B��¶"ŒÃYzÑæ²¥ õq ê���6#ŒÃY‹–2$„��—Æá$] %¹��paNJ—2ÜÛÛ#„��gÆá½ Sƒ8!��¸Ž0ç|üø‘ö���/Æá°=ö%{ÐnJ?¥¥ÙÙ\™¸cï‡stð£Ñh4Í–¶(Ò̶ô†€ú_ýDÝf„q8Gw.¸¾²ýcúÂMô›Ýtf\|Ð×téã÷ïß[y­[œÃàçúÊnô=è 7ÑonÐ�®÷ Ñ@®Á\ºM%,lEpƒŸ;è+»Ñ?ö /ÜD¿¹GWd;::ŠûΖ¶"8‡ÁÏô•Ýè{Ðn¢ßÜ¥3ãoÞ¼±¢„…­Îaðs}e7úÇô…›è7÷¥%,ÊM•°°Á9 ~î ¯ìFÿ؃¾pýæ6[jÉÙŠà?wÐWv£ìA_¸‰~s“M%*Š­Îaðs}e7úÇô…›è7·èÅš6®?ÎVç0ø¹ƒ¾²ýcúÂMô›ýtÆ[g¾m]ÖP±Á9 ~î ¯ìFÿ؃¾pýf/ Ü.ÜðG±Á9F¿ñ…t÷_Jïzœ<`ƒ±Œÿ”0ü? š i÷~I7Ï·Õxx.'íFüwM[3”aòýõ\Ë w*áÛ@š;£Û’‘þ±rŠŒÒë¶¥žôk­ùW9~I¾ùðŒô… ã¡ôOnßçI;”px“üÀ:tÌëIwº/îJóøƒ lR•é7ÇèíðÓíKC¸í؊ࣃßuOÚµMééµ/õök ÏÞJÐxfÑkóì@5:— ¾'Íîd”<´±xû‰N˜º¡œ…ßIcã _,#ýcÝ>ýGº­g„ý$ÐE'LaGí^ôåðj_YêWéûщΉ\Œî›œ£ ~q"­V a}]HØ~bd"¢ýæ&½¹OZnciJ[œcrðºÒhte`Ù¤^LCÎn }‹2ŽOª›~ ;…õý8ꮎì}1Ù]&úǾ}è³ º‡óAî¦/Á^yûS%B¾§;Ò|N¸‡%Ÿ¬èþ¹g`ªD¿9NCùÓ§Oã¾ÒsKUØŠà#ƒ_<›—ýX5Ór³›ãa_Nµ!ýùzGÂAn~m4³ )µø9v¥œÊYâ¯k÷+]г_âLÞ:ôï7bJ3~oÉNt€þ’)/©µB¹Šß^ý¨ûÍÝI?Å­!íðbfæ;áÓïgÛ6¡bI�,™þ¥Ù`ŠKNµì*í›ù~‰g¯ÏާûY­y,ïÎ^K+þzoû÷V_ï~y' ú7Øåg ›;“÷':)ù’)/©=“ð*)á™Ë´Õ¤ÞeùŽCxúýl«I£{1™ÝÞŠžÜ¾”ýBžk3úwÀ ÙõÄm ålEp޹Áo�¥³6}iw{ÓƒQ<˜ ãá™t- Γp1­¡Ü&ÜÝDùóYA¶â˜=PMúë›îÉíû=þIÂÖc ú#_…ÒjäO”¢€Þÿ›tŸrïãHúÁAáYƒNs»Â”ß?뜄èÏ<‰]WzißÄûU¦k|%½ÎAtû.ÙϾȰÿƒ´ë;Åìúü/_J÷¢¼S[[C]|’ÿÍky;}¿?ËU4ÖÄŸêÄûS´_äO”FçrÜ9MNzoé‰íîLè˜ú²ýÃ¥/÷GwO6”ÛROÎVç˜ü´>ûpã�5;c=G' €é¬Ò”†³ç[ÔÑjXlÆ!Ó&fTÉÌ^ý[éÍ]ˆ·¬":«>WË]px.¹b™òûç~ûÐli‚΂þEçN˜ô„ô¹4ß“¯ïIëƒWóŸf=0;C¾§‡ÑkkH§w•{¿—õƒZ4ž=Ä„~ºu*Ap:;_"¸›tV\gÇÓ•V4 ›ÄVçüî\Bgçþ‘¹Â?m;Ó€ Áüñ¢ºF}îÇÇ÷gù™CK=Pi™Á’ÕJâO+fú(×òa¼àðœÿ´Äý[Kuç>ýˆ–yeV5™ë“¥ûŠÎ¨?ßê„t<ü ¯‚¿3Ã:¥'Oû‹?ɈǜÚlÍ´üEºEODãíyW‚“-.¨.€þ­pW>”›º [œclðÓÓ¥ž}‰?º­ÕÛÒí%å'±Ù™À›þ±<^43¤Á±µE8+¹¾u]&T«ï¦{žÍÕ·æ•Þ?+÷¡èÑÒ¡xµ™Û2¯¹÷KOŒ/zÝ×Ú÷<!Õ:þ.Á+3Ëã)+Cݪ“üMOP 0¸–‹“cyuž¬¦baܺҊríO½M~ÙØŠàSƒßÊzÇxÆïù|ÙC.$/|ŽxY®F|¡á}Sm»xS™;P­¼ãÁ‰®†‹ÏëÔM—£ìþY]3¬ïKKZse¹Ò »ùO<&KÖõBÃw"ý·¯$˜»@´\V†ºU'ù:枬?PÔ„¡2¢eìê·/2ì}+u½ˆ¶s¶Ñ‰e|-S½¶¤¬o…øú ý4xQ)“òvš`áÞ¬ffð›Ô;Öƒó䀭µŠÿ”·A3¹IÃxæãw½(3œ¬¨Rˆ]«º‹øÂ0}ŽPÚõ]©×ë[ÔºÚyñ¦2w ºã‚K½ðìðyî=íw´ƒÜÁ¨èðlÇÅ›ªÜþ¹cš{Ÿµì+œ¬¨2³Â®Uýäv½÷äd¶íC¿ßôÓ‹…ÁN_GsûÚó ÙÆWŸ<é§miå×ÝWWéÈË\0Û~Â@·—õá…θoή~K®“‰^Óf7RJ¯ Ðw[V¹–ÌÊU›ß�Í,›VW±oïî`lðÓƒd–Á«5y{šÞ$$:P\œÜ.g/Wؽ]šm:c—ð¤Ö²Ö”àìßÒ¿GØÓåâ%÷ì¹¡Š¾žRé¬éÂ%Ô¢–/Èß PKŒ¦ý©ß׃üâšØ™¬µèÉA}ás™<€éï/ÕÊ}hñ÷ÿ>]6¯~[oœðÉÏé¾öN.ú¯7 {º¦¿k¶°4â†ô÷ÚaŶ:·âSºŠMºŸh‰Ñ?¤?=™]ñoº„ëŠýñ¾ËÁA¿=˜_‡KÚ´k±kð+‚=3¥Eó¯¯üâOÿØûéкØWÜD¿¹#{GN­ gq` ~ ~Ém·§7¢ñ *»ùÑ?ɧM×l8„}ÅMô›ý\¸->[œãöà§£íÅä5¤}r¾Ñlj.á@e77ûG/¨íäîøøC¦4ÂMì+n¢ßìåBO±Á9 ~î ¯ìFÿ؃¾pýf§£££¸ož>}juO±Á9^~«.NÊ·{-ßf†¾^ÅëŽçûeIÛfÉʇ¦¯Ï«.ÈÌ·ÌÅ –Ð×U)žŒyúú`ŸËËË8ˆëEš¦ï®¹¶"8‡ÁÏô•Ýè{Ðn¢ßì¥hê…šÚG:SnÓ›ylEpƒŸ;è+»Ñ?ö /ÜD¿ÙOkÇÓ¥ MÝîþ.lEpƒŸ;è+»Ñ?ö /ÜD¿¹AgÅõ"Ní/Û–5TlEpƒŸ;è+»Ñ?ö /ÜD¿¹EgÆu†\gÊuÆÜlEpƒŸ;è+»Ñ?ö /ÜD¿¹GgÅÓÕVt–ÜlEpƒŸ;è+»Ñ?ö /ÜD¿¹KWYÑYr]uEW_1‰­Îaðs}e7úÇô…›è7·éäéÂ0L-[œ¢; F£Ñh4ZÑÍTÙ aÀƒÑÁ ��,Ç‘���0„0���B��� !Œ���†Æ���Cã���€!„q���ÀÂ8���`a���0„0���B��� !Œ���†Æ���Cã���€!„q���ÀÂ8���`a���0„0���B��� !Œ���†Æá„ß~ûMƒAÜ���|A‡3Þ¿/=¢Ñhj�à;F:8EgÈ¿ÿþûø }tt$Ÿ>}J¾ƒ*#¸ù‰>PŒtpÒå奼xñ">X‡a‡tTaÜOô)€*`¤ƒÓ>|ø _ýuÜôÿQM„q?ѧ�ª€‘ÎÓYq׷Ζë¬9ª…0î'ú@0ÒÁZ?®uäz�׺rJWªƒ0î'ú@0ÒÁ;ºü¡–­|õÕWñŒ9üG÷}   éà-] Q¹sÖ'÷aÜOô)€*`¤ƒ×´T%-]ÑzrJWüD÷}   éà-­!O×$úô)«­xŒ0î'ú@0ÒÁ;Z’’®A®ÿ¥DÅ„q?ѧ�ª€‘ÞЙo׸ΈswÎê Œû‰>PŒtpZºÆxvõkêÂÇÒÝ)½ëqò� aÜOô)€*`¤ƒ“Òzðtµ+ëÁ¯{Ò®J8¼IÀCñ;Œ‘aÿi×kÓ¿óÑ£i†?'ß÷a@0ÒÁ)Zÿ]Åæzðñ +FWLŒ?¸4¤úg,£þ±Ôk-é^\'Ua@0ÒÁ NÕƒÇ3âé f®5C&?¦ÆÃ¾œ¾ ¤™þ|½#á ºF9 šR‹ŸcWšÁ©œu'_×:ë•ÁhÉL£ý|S‚×m©§¯'úúø|E>·¥ï¯FÒÒè^8ßG÷ágŸÀ,F:8AÃxZþæÍ.Îü,ƒ(0·{¿$_/ä}iw{2M¢V<›ž ìãá™t- ÎQ,‹þ‰†éé>Ç?³6=I؉Âxú\ZþÐûVêÌÞÛÆod&¯¥.AÿS¦¼dWZáOI ¾–ÁÙñí ˜¶¹“0 áõÛïgÛFý¥ÛáAôïô$îU¦Ô%úúøƒ -ïw}­�à;F:8åãÇÓe u†üòò2ùŽm~‘^ûpãÀ¬a|¿Ý‹âšŠž£…´«/ñW·~–°ù|ãZôñàDó3¬7} öé;^ÖžU+Äî~#Ý·/£«c9‹Böø*”Ö®¾Ï_ä*|.v8=›øUúÇßÍ÷µöÏ~,¥Ûb# ãïnOúô$¯þdóº’ÆT#œ¤µâé }¬¬¿s%½(ïÒBR$'íöÂ< 惾Ìåd}îÇÇè±\÷¾“N~¦~J3W:ã¢ôý³‚¾§jRïœÍÏ<_÷¤sÊÕÜf¡³êÏç/ÊÔçÚö“ Ý^OrÏ¡3ïM ú“ÏHleMŸÀb¤ƒÓ¬½ËæÊ¥³£Ï¤VoK·—–Œ¨ÙÙô›þ±<^T+¬å&­M´†¯çs3¡7ý@ö~ÇØÆõ¤§#;ÓO7²Ò’‘ìÉW¶Í¯RHÿè @'ÿzî÷éJÙô}�ß1ÒÁ ézãéR‡ïß¿7ºÞ¸†¨Ý…,ÏšGA(_’ !{ÿ6À/|ŽÑ…„í†ìlТðÕú67S¿d6ÖAi 5OwsÉ{ºélôªçZß“:GÊ“ã�ª€‘^Ñ�ž½ØSzù{jÈ}&õà<™õËhðOy±] Ñù½(3œ¬¨RˆïѹÃdI;}ŽPÚõ]©×ë›4 úqÍròuLgâ¬/UX‡=a|Õµ®_nP§½ê¹Ö¥Ûb{þBbGÊ“ã�ª€‘ÞÒPž½Ø³ÔP>út›»ÓXkòö´ŸÔGÁúâ$³š†®tÑ• ýù44§<YC—%<û·ôïZ¥eFv…ìsk™ÂNò¸û7&Jÿ>ãî¸àR/ä<lÈÅÌÅ›ººÊ+i¿ÌÕ˜ßyÝÁ:pMJiâÃä[Yѧ�ðÀéà% ÞZª¢3äz@×zrýÚ}¢›[ΖúÇt×’¢ä5̶ÚÜáãṜL/Ü­I½ýZNû·k½ÇË[Î=¶½ NÂ"ñ…¤é¿Õ¥5gOÎì¿‹§¾N�ð#¼‘–¨¤³áÄÝX“|]×2;Òh-Z£Ú&á’áÌ7ô)€*`¤ƒótíq-CÑqmúÿú˜û´Ä`o4=jHûäÜúµ˜@÷}   éà$½ÙÎz§e(GGGñ¬¸ÉT`aÜOô)€*`¤ƒ34hkÝ·ÖëA:]ÂП2”5é…}ô¶æw´é›~Kÿ^ø…>PŒt°žÞ]Sg¾ÓÀ¥e(öÞ&T"ŒWð$Lÿ�ð#œ–¥hM¸ )KAVBáú@0ÒÁ9é›z öë‚MÜaÜOô)€*`¤ƒ³–-eH KõÆýDŸ¨F:x!½ÉOå/î¬(¸ŸèS�UÀHïä—=Ô™sA× Ai~6¸ŸèS�UÀH¯eo”6æN�ß1Ò�¬DPŒt���€!„q���ÀÂ8���`a���0„0���B��� !Œ���†Æ���Cã���€!„q���ÀÂ8���`a���0„0���B��� !Œ���Fˆü?X—–9Šjø{����IEND®B`‚����������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9az_SDT.png���������������������������������������0000664�0000000�0000000�00000003772�15030617045�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��w���T���ywÒ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IDATx^íÛ½kIÇñü[«u—.•«mÔ¤q“b 5*R®¨¤K!0\¹p&TuWu!5)ã"#žÛYíJ³oz±´«ñ£ï¦°-¯vfv~3š]½�€:„;�(D¸€B„;�(D¸€B„;�(D¸€B„;�(D¸€B„;�(D¸€B„;�(D¸€B„;�(ä\¸¿xÁ|�ûr2Ü)ÊéÔƒ•;œBÿ7Ç…¶¦¿ëC¸Ã)ôswÝw8…þoá®á§ÐÿÍ!Üu#Üáú¿9„»n„;œBÿ7‡p×p‡Sèÿæîºîp ýßÂ]7ÂN¡ÿ›C¸ëF¸Ã)ôswÝw8ÅÉþŸÏd2êÉytnæü¥+áì1yÁóäB[3ÞësBáþ(³°› L»œI0ø.Óûù†×Y¥5I4®'i•ý=-A(³ªcz}ߥï™cÂ$H९÷¥7º’ðc ƒÉ}ò¢]<ÈlòUzçžu¼¿dðæP?% ZÉß­âEïy5•Õ»ÞËdp^|ݲ´$&¯Ý9†[þ‹êÛ/ÉÍòÑÁ…¶v¯¿õ8¡p_0ür0‰â65—ûÉ¥øùÁ; %X†³åq"ƒ—«p_Ë„c{¾¥ÿ?—»q_<ÿ“„¾xý&g~+ãþ…í@ÎqFáì?!ÜMý>IÐ WX4y\_âVŸ&¸óˆ ·7Öùä^cê™Lv‹Iì®p7ýݺáôwò =wÝ÷Øo™;Ò ¬Â¶–pÿ%ãÞ«8Ô§Cñý¡L3éžL4½±Ü%¿ÙŸ©[P Üù ý·[„{ļ¶­òo¢ws.Ñÿ›c´¢~y˜]˨çÇ?{Pnã¶6åwgñï%ú$Þ$“W"õôïvñÊ'å sÓÏÑÿyÁGù39S¼à³\ÏL{Zî§2ZÛ?ç=Mf[¿×®Ì{› ç ឈ¡Æv8[nÛ9ÜïÆÒóÒU  únnEh‚óBzã_Éχ~2H¸1(*Â=3A¸¾r7çÚ•?†#éûÅ–Òü‡„×ñ9ÏoCéø} §öôiÚè‹ôíÉ=aúøl¯Évñi­\ÊUúžñ§³vf’˜Ï®¤ôe8N·À’­4?Tp×pOåÜZÆe`Urá^ òeP˜ŸßK;³ ÜtŒ§2AñM†Ë•c´R~“I~åXîkÚ-îûÛ¿ÿM¶¢UïêM¨ý(ØË²l2Ž'«·;­Ô‹Ìdó¾°­“iO3ùô¿È¤°§_vNÝcm.œƒV„{ª,Ü7¬Ü³6³Y©·³«r³’oÛ[3ùc”܈=D¦7l[ù›º ÂÝ´i¡^ éI¦=íR÷êöØž™P>æÎ'û g>I·4ÀÝ ÷BÛ=ã¢ážÊ¯ÜJWrë¬÷ê`±oÖ­ “CÍ/¿Tõk¶[ ÷Âöš¥²ï«”Þ—Ø‘Y¼Îß[±ÛyÝVÖb‹é°Ût+û¶õ!û\hƒº8W³º»|€?Èm4À2+¤ƒ†»¤âönó+³ÅÏþà:þyO w.ge+ÙÂ=Þ³î”?1âT¸¯_éV¯+>Y=AÔ>B¿›k%} µjëg.÷7#étÓÁ‡G¸»Ñuq®f͇ûƒÌ®?K§³å£•Ö„{¼|U¾3â_®ö[ã›mÑj-ÿô†uSp'&Ü[žœ÷¾Z{ìÉͺàSnŸ·$ÜãÇ&ßJ'óh¦Å©p/›°,¦ »ïdxcGmòôLoPØ£7ŸÚ¸™z–_L˜>?³Ú,ÞJ äò:¹án›ùe÷ ‡pw£ êâ\Íêkì’ýë¸l÷%&óh]i~Åá™}mæ‹<ù¿/'ŒüûXÏœ›ÁûF¤·ÕÓ.%Ìû¿ü á?ö—˜òao˜Éi›/1-˜I²ø®ý¿µi޳³Ò>HJþqÓ|Ûž÷dø÷DfË×,>eŽcʺ/ždÛsyý˜É0=ÞòZÈ?ž™¿&ëaÞëØŽ}.´A]œ«™æÆÆfôswÝ×›s5cpŸ6ú¿9„»îë͹š1¸OýßÂ]÷õæ\Íܧþoá®ûzs®f îMªn —”>ÅÒsÞ®Úø%(«TÞ€wˆ9Ïc;ö9¸Ðuq®fš›ÑÿÍ!Üu_oÎÕŒÁ}Úèÿæ7çjÆà>môswÝ×›s5cpŸ6ú¿9„»îë͹š1¸OýßÂ]÷õæ\Íܧþoá®ûzs®f îÓFÿ7‡p×}½9U3ÓÐ å´Ê1ûý뤷fx–46׸ÐÖ„{}I�Ná� î� á� î� á� î� á� î� á�Ï„ ì:ËsA¸€B„;�(D¸€B„;�(D¸P¯ìÆè¦òÜî�ÔÓÖ»"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@!Â�"Ü@‘ÿ×PâÞ„rQ>����IEND®B`‚������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9b_NULL.png���������������������������������������0000664�0000000�0000000�00000014675�15030617045�0023407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ã���È���Ûk‰y���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��RIDATx^íÝÏ‹ÛHÞÇñþ7tîÛCn}ËÉ'_|ÙK.9øàKrä ð¡a9 Ë &°0 ÃÁ`òð°04˜a`XŒay‹1 a7˜f M0ßG%UÙ¥²dËq·Kn¿_ ’–-©,—õQ•~ ��ðŠ0�À3Â��Ïc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ�ðŒ0p$r;ù Q/”Z½'“… < ãO2 /äìì¬`¤¾‘èz$³ÌqÛtzP?â% r^[.$~Òó_YLzR/xmÝÌFÿ-ï:M –ó­KØ‹d8ùC&ý72œ—ܪ,ÆÒ«zO¤Ùû]nõK+_dÒ{¦ß£‡úýÅ—Œ·7h9ë¯~%Wyëô™ô&_ôt–yÁzeÃyä²u*höe|»þ…¦¿ û»/¨'ßÊ®_;שOò!úEæú/ jªÛ26Á“ùÑ¥{ÆË`«µ%š8?¯Üé”xÚq_šx|ÆíÖr3»Ó¯é Ú«`\Ìä¦Û’FoOiû,£N#Ý(…ÃÍ?îÅT†íz<ߦtÞ}Ér¦:’NóIv™¥¨uð>6õöpê”OSë¡qåÌ;çsº’é^J45ë&fÖiɲšòÖõƒãr;‘AòÛ‹wˆÛggØPÁ}YrGõþ¾7[L#¹lSQ]GÆFfÃ烙rWFö^úÆéâ0êþ$ãñOÒÍl, BjþAº}'Œã½óöåòFµƒÙÐÊС´¤7.Ø,>JÔŠ_ß¹õ`·T 9 Õo cgº7€iR_Û‘Á±[µ~‹¹‚a|û»ôâWvQeGÆŠi¡:ý‚éqkòº0ôJ„Tbµ¡Ù8qëuÔwâ Vç&§+yes¹Š¤åxÕëK»Ö¼ÀÏ UÂ{RßmãÕy§z|r•„ñ²U­ƒ<ìÉÐíÕÊ5—É +ͤ{:Þñ¼—7n]\ÌdÔÓs5¨ž¨Á$-—âtÇ5L(/f7ÒÕçÐã›]”*pÿŽ8ŒÍF?þ!e~˜yÓ©à7´@K†ñítZýt¾˧çwßÇÌ–Ìï´ë]m¨ÜVz^¨ÆØSÆ*Ì–!÷DZÑGë{Î cõ»©]¬‚ÛL»±gI¹“iôB‚Úw2L)Íe‡ný©]Í{L™ÙI·~{ºþfZÆI¯ÔÅjg9)cù:Ü·ÇÆv¸˜éôÞîjØŒeÂx!óá•u YmtTWqΉ\ËMò—¹,·=ì´°7xúX¸ZÞr£¥Fç„*aŒ=-ÃXý± dûP‰ÆúwâÖýÙÔu¬Žó¶ç7´VÓù¯æ£~§í¸ný.õ4Ù0VãžZå,¹C<ÇÆ™éâ=êÞkéïÆj¾nHmP¶„q*g£Qš»Á[C_žéšW^Â{Ê„±ú{6p•8uS×õÐÝVuˆ»¯oª‹·¾ëè.í-a¼äœºé·< é¦VïÝ瘱9¬~ä9C^±*ÃÆ ½Ï0Vtw]\ž$ç'ŒqïÜ0VÒ¬ú¨@þ#[7 [À:l wX êj^]4njձâèFƃ-ã˜9f4;~“Á¶ßð€Á \Î1«ƒ#µ-¤Ôë—9 ¨nðXÁØŠdš[ŽûcEõ�´’òÔÂï%¬»a\ÐÚ°©õw©‹[שÚYy'‘^?ÛÃ8þîú?ïðý *òÂ8ùþ—‡J^I'|¾„ëug[],Æz;°<f\²›:9F|n`YbGx@GÆ9ݲÆÖàȳù‡˜¿ÒÌòÜK¬¬\òoÎña3×6'-v÷ól[fÚPw?ë¶uªN†¹úëòµma¼˜^Ë•{ÉŽBñoÁºÜ0S¿ŠZÀê7÷tÃÕuÕ­‹k-ï2aœ7oÂ~YgïMûÆÚ¶àÈ“œY©ÎîÌù!&¡Z//Ållr®»´¹óSæRŽÅl$Qò9Š‚q“ a¬lú<æµZ(½¡¾üCQ]}QGšuë$0ìÓÜõ3–HuõYè4Œóº&Õ÷IX³OœÁ1Ù¸cºìrê´9Syy‚¡nû„Ã<ËzÜ”îÍ,®=ñt~¦:›ÚìlþûïiÝÔ;ë˕T&òë𷸬:h“mÂçdÜ¿õcº3Ïwô6®—ºŽO“áè_ºÀaT0Œõ'ÙÃÎT°ýU";HùÓ­‚Íivä&TÜñK&¤ì÷¬µ�æ2^;·ÃTƒº%æ;¹©Lyke*:æ¦vZßçïå«à½~“n|2åùYF™ã¶ï zã»<qmËꨶµº^Ôó¡•¼’¶³³•½¦Wý†#§®Ð;{i½‰Cù—¼©_X;·V¹ªÃý™}VõPª‰ô]ïVïYíÀ›C:ñtñŽi4•ÏIk9žG4.h­§º-c��Na �€g„1��žÆ±~,8Ø| �pŒc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ<(uë×ëžzªw^ŠÆ�v î/þ^:É=× îo³o£yoa¼ù‡ŸåÁŽG„0P’¾Çó¹zn±ºÚ½äîû‰Hê—÷]Ža  œä)JÎ"Ò Ý|3šû cý€º¼ñÈÆ�JIïç>òS?xc8®Âx0þeõô¦Z["ýXQ÷tËpÏ<-ê¿äyóOÙ§ŸYËÍ>J?ÁiY¤¸ócút§d¹ÿa÷§òYa  ó¸Q÷‘yêw™GqZ'4Ïú^H4M»¸³´kÁz+[=¹þR¿O—à ÿdÚæ•w¼«Ç<ª°o4û2N©¨»×wyæ9ðÀc�%䇠’ßb¶åwS/¦‘´¬ÀŒÇèVö* ÓqWÒX¾'¯jÜ¥³|{™_“ùž·"™.¿NËB(áþÃxÙm·P“qçRëÜèü«i/­ÖxN92]Ùî¶äM7xÐìÈ»áDϨÂ@ Ea¼C7u™0–;™F/–Ç “îåL‹6§ó¡„Á¦å+Ö1cÒÖñj  c�¥¤­Ë‚cÆk!mÛƹLjkçRïý*ãµî碖±ÝšÞ`1“QÔIC9ÓøE(G‡Þú¥MO·a~§ÇŒÒ}Öc ¸ñ|kWNÈçµÐõ¸³'Òì¼—Ir’–²ÛÑ»¸ü™øI®íà-Õš‡0P’ ·®ÔsÓ¹L¢v‰›~˜°tϦ®I³÷{~ˆ'aiŸÜe˜nqÕBÿÜþú¿2ŠC9 vsœx5Iw:Íùònaææ%´ŒQ„1€ÜÉlôVš:a*ZøVFƒØˆƒ{ØÓÓÅAY ¥·éDª¤þÜé×–—E5¥{3[†uö:c»•‡±º}æôïå\ã Ta  zâ–qûÒ>q xÜc�Õ²˜Ê°ýœã¹8)„1€ ø,£NCw1›c½ú%àÆ�*@__œ‡Ž¬3¢Ó@�àa �€g„1��žÆ��xF�àa �€g„1�ÏÒ[l¶;²Ooz”Ô}²vÿFf\½ a `'‹ÙH®£7ÖžÞÃ]²æÉcëîµÅ·tš¨›€8÷ ÞÝ\&ƒ®~–ñivÿ–„‹x‘北îy­n:²|¨„£d¹6¯£ôõf_Æ\O 0Pžºgt땼Jø°ï#Õ>^J½=Ȇ£óD§Ål íZCÚÃé7² û–œ›àKnµÙZf™æ)NæiTqK}øÝúӨʖ«Ô:JorrÎÆ Æ�vdc¸_'=<Ï>ãxy'®zO&VX&Ësž‡\FúhEõ¸EëéO%j]ä<§ùB‚p¨»Îw-W‰u”,·&­è£µ\œ*ÂÀŽî#ŒÓ{Q¯ÂNK¬·t1éI]ßÃ:T@~M§KÇ™ðÕÏQ^ ËlЦós?‹´%Ê•Ufé÷d§Š0°£{ã‚Kƒ1pZ©±äýg«04Ï4^o:mÃ>Ö«4 ëÌÌÒ0NCú?i`[óIe?cér-•\G…aŽSCØÑþaœ†›€f|Î|sZ¦é1Ûxœ:î:Ã9ü³Œì¢ŠZ³™³㜮f»,»”+Ur%ÓŸ¯‡<Na `Gû†±™~¿0Vó¹u¥–œÙüB¢©söóÑ„qÞô85„1€íÆ: w ãÂî`Ýå|ÖÎè³§]N7õZg?ãîåÚ-Œ×»Òqjc�;Ú7ŒÍôëaœ†SN·mî±Uu RGÂÞv9­cúÇŒM€¦A[pÌØ„ôNåRv cZÆ Œìhß0Žç€J^€êåÕº™c‹鵴¯ôõ·7ÒQÇiä.' P«%´*°ŸJ­s“\S¼K¹R»„1ÇŒAØÙþaœbÁôI°^è›k¨;cE:7×HNÞª_Y]˦LsC} • éÛ±DaÎM?Ô±çÀÜô#½CÖúM?¶—k¥ä:Ú´pRc�åénÕå5¾æ:ßõ4Ú¢à:cm1»‘~XOç_ ¥?²n;™XvÙi XsË´˜É¨¦'zÕ%̽/tzì0¹kVèá[åÜsc¹ŒÒëhS˧†0àEþ¸N‰ê ¯s.$c�žÜ›ú$¤÷¿®sojh„1� žÚô¨ñÔ&¬#ŒxÆóŒÂ��Ïc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ�ðŒ0�À3Â��Ïc��<#Œ�ðŒ0�À3Â��ÏN8Œ?˨ӠÉt¡G�àAõÂx1–^=³³3k¤ÞË23çC ÷õÿ‘Axa+ê=™$3"Œ�ÕPÝ–±Ü Ê\r-&=i¸ajÂ|ºÆBnÇ}i6Üñ��øuüaì¾^ÆÊ'v"Œ�•r2a¼˜¼—ëÉýWü÷l$×½Pjnh/f2êÇã“ní'Òì¼—É­yÙôžé.ï ‡Ÿœq¦;=n…O>H¤ç?ž¤] ¬.ñ;™ÞJK¦«…ÒÍVÝð�€“r"a¬Ž‡Ò3als^{_#Ç®ŒT�/¦2l×uК²ÜÉ4z!Á2Œ3N‡±=ÿÚ¥t‡ÿéð;©%óý"³á÷Ò £4äãð¿é6ãiŸ­Ê�8)7Œu€®'ìòB;YfÞÉbvð.âQm'ŒÓ²ÔíÍŠºËÕøÆ• çÖÈŸ�ðxHËx.ãÞkéo c=.³Ìµ€Þ/ŒÓ÷¹; zpƒ�pNö˜qþûîd¦º“ƒ–ôÆj®úﳆtFŸÓ·ìÆzÚ m�NZuÃ8¯•êXLúriw)+a¼¦è}ê8q÷{ ›OÒÖêÚÉU÷Ñ2¶Ã�pêªÆê2$uÂV¤:Ùª™ ÄÄ^a\0ÏŒ{8f¬ÆMé &r«G'Ëîÿ¼¹Ì�€G©ÂaçÖ4’VH-ìÉp²j«Ë’¢NKêíÌÜð*Æ·7ÒQ—Ùa¯»Æ×ŽåÆCÐüQnfwÖûâréå//“2ïU­y3¯µr˜3¯³óW—Qµ¢V �p**ÆŠtÉP ¥w=r‚X·¤í÷ÅCn7÷Zèš3­Õ‰^­œ Tƒ}×\&Q;-“náÎUËX•+ú ãÑ_âV²5íZëÞ¹Îx­• �8%•ãÊÃ8úY~]Þäce1ÈUçCáñk��¾a¼¤º_JÃ=!̸ý]†£é?��¸?„ñ’¹ûV(½a¶Ë8é*_ë�à~Æ6u_êë7«c¹ñ4;òÎ g��îa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ{:;cðƒíÏãÁ7¹'õc`````X ØkmOT<uFëõóÛ°ÖöDÅáQç`ÆkmOT<uaüx°ÖöDÅáQç`ÆkmOT<uaüx°ÖöDÅáQç`ÆkmOT<uaüx°ÖöDÅáQç`ÆkmOT<uaüx°ÖöDÅáf»“Ùè­„µ ùüép.ÍèŸúõÓTźÀ6ñÛ°ÖöTŠ÷O‰šçze AS:ƒ‰Üêw‰|•Yt¹þ>{8ïÈèküÎQGÎó^7C3’YÑ<ƒ¶ ç‹äÕ5‹™Œ¢Ž4óþº„ýD¯ã²ŽV%ÝêëH:çzµ®ŒnÕòܲ¨õÿ9ãjérf‘4—ãÎä¼3’¯Î¸Ìû3ò×w2ýއ¤–uZr;êJ-hIo<×ã T±.œ^ý¼¬µ=U§âÝʨãÚçxÜsiö~·9¦Bg¦p«0¾X†‹ ŸÆjÞ¹Ó/d>lKPÿA¢7Ï¥ÞÇc‹© ÛÏœòÄÚI·xê»…qB}æZü<‘VôÑZžSÞXöó*¼_®·®’ ¿”h¶-ZÕòoÞÆN­çz~:q„ñãÁZÛSµÃ8¶K¯ñR¢é{0þ$Ãði²Áü:éI½Þ“IfË™¶nêáPî¯m“~æ×½ŽÔ3­qÂØ»wBõ*üËê^¶wšæ2t­’x¨µ%šØµC­_µ³e½Ç kõkõ¨ÇËW=EoB©™yÄwofNÀÇåö¬îpÕss#³²Ë:0Uƪ©b™ŽkmOÕ©xa,_dÒkfÃS+€m;‡ñ|(aðLz“/ñ*˜/õÿ U¾g?é¿ïƒùÌÿŒÿý“Õr"Œ½Kv_Iïݕԛ]Ä!»˜FÒz¢êÚLãõ^#™$‡ŒÏ2ê¾Îî8*êûx²áÐGª~žÇueyØæNfÃï¤f‡zÒss)ao¸,×bv#ýð™ÓóR„ñãÁZÛSõÃ8'ˆT˜ÆåVeO}œ¸Øz¸e¥]ÔçËV¯úûJ™nÅmóø«ÏœlèÏ_è 9aì]RÇ©µë­Ê8Û—‘L×Ò­àûPóÚ¥%œc1éË¥ÛÍÙU;¯¥;úœ¼”¡‚¼±ßòJëÂQÔÏ b­í©:oÇ0ÞÒ2ÎÚ¤ª%Üȶz×6`î<ìî̲;.û3«€çRëÜÄc c¿Ü3›úžže¿÷̰~†tþw· Už×Òv{eìßjÉ_öó÷Âxý{8ÞáXÆ{ªÎ—_Æ9co„JÙÆ uŒØùA¤ƒé¶VŠw6¿¶‰3Úh&]å“ã¼2ªqëa¼xlV:W$çÐÈÒ®ßõ¦y•¥–ùÒ9lâ|O~ª~7îõ\‡ûSźà³LÕÿm;Þ’WDu¾ü‚Üâ£D­VvCt¯aœ¶t‚µ•ÛUþ]OZ®®]7І;êj|·Èþ,oœòæoPUÙ/×cÆ{Ê;gÀPëüªàµ<›æUV\[ß9Çœ1õ›Èë ¿ý]z­pý8vEÆY„ñ «t/frÓ}!­²—6ÚÆÉ™ªOóOÌR-Õº¹8fN‰ÆÙò$; ÊŸÿF9ŸùöF:É™°ÎõÁÉ2jÖeUw2»ù1Þ�[å3ãý¨õ·á„+u|ÿ²Õ—qf½«³«ðÊ9ÆœœvµÿÉ[ɉcúï„ ùgÖ÷©þ®K³û7½|u“‘H:ÍgÒNõeõÆY„ñ «Æ—¯ÂòÛoúQx³Š$”²ïÍÓs__¼»+ØÔM?úÖå%ñ4;ÜKL¶p—½<Þœ¯ ònÖq;‘A¨A2M µð­ŒfÎ%_f~¹ƒ™gÁú¶†‡¼ˆš©üÅk×§g)×—¯×Â7rmÕâC;œ‘ïÔÃe±¿?«nfꇪ—éYàU¦ÊY5>ËTÅõQÖñ–¼"ŽùËÇq¢ÎÁ Œ³ãƆ‡FƒAgÆ'Œ #:ƒ0Î"ŒOFuaœEŸ06Œ÷iû‰Qf8Ô’ªH}þ“eî3íÔ‡Üaç›Èõ9«Æg™ª¸>Ê"IötÌ_>ŽuaœEŸ06Œ84ê Â8‹0>alqhÔ9„qa|ÂØ0âШs0ã,Âø„±aÄ¡Qç`ÆY„ñ cÈC£ÎÁ Œ³ãƆ‡FƒAgÆ'Œ #:ƒ0Î"ŒO”úⲃ/>—½/Â82ǼÁa à`c a �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�ð�TÀ>äP„1� ²ª˜‰0�À3Â��Ïc��<#Œ�GÇ=kÛPu„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��xF�àa �€g„1��žÆ��x%òÿ‘Ë ®E!A����IEND®B`‚�������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9c_VERSION.png������������������������������������0000664�0000000�0000000�00000013703�15030617045�0023752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Å���´���|*QU���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��XIDATx^íÝ¿‹ãÖÞÇñý7 éܤÒÜÊ•›)²Í6[¨0)¶XÄàbaá¹ËÂc  “À% ²Í…dÀÜ&p0ìýÅà.l7!„e aÌ÷Ñ÷H²dÉòxlYÒy¿à¬ȲÏÑÑGGGš���8ŽP ���çŠ��à<B1���œG(��€óÅ���p¡���Î#��Ày„b���8P ���çŠ��à<B1���œG(��€óÅ���p¡���Î#��Àyµ Åã¶wP×�PŽZ†b …B¡¦�@SÕ2®c;pGUêš6 éÅ@ ±¸ƒP �å 5ÄvàB1�”ƒP ÔÛ;Å�PB1PClî @9Å@ ±¸ƒP �å 5ÄvàB1�”ƒP ÔÛ;Å�PB1PClî @9Å@ ±¸ƒP �å 5ÄvàB1�”ƒP¼k3_¼`u=íÒòÎäbú.z‘z+¾×^y]ÚÉÜÊL†ÌçÃÒÏ.rå³¥?þ-|nÅ{™M|zGÑk[Òé#ÿöŸË±ùÜM¥×ïTü™¾û6XSëqý>cù÷ÚïÒ‘áä&c™q ×q2{o>Ù6Ÿ]Êy¿k½n$þ°·ümŒ5¿¹çË,zU(ýû‰7üQ¦7óðéÛ‰ ÛÑ{;g21§¿³U7;¦Ë‡ªR×´9�MG(Þ LÇC™ØÉòæR†ÝS]ÙÁXCÔÓÌàt;FáT¢…Å€ßv¼ìœ÷¿K¿õH^ùŸK·;’i”ã–‚À7~.]ï\®â§n®Ä‚eÆïâ½\ëq2º’•š_ɨû7+œ‡Áqõ3Rß3ëuó™\žyÒJ'ým½gâ/:‚ïwù¥x­5¡4ñ;¦…¿O§Ó—óÉ,üN7S¹Ö¯µÀæÁ(¼IÏÿÅúî¾O¬ï²{®”äÁNTV`š­*uíJ›à.Bñ>d…âÀ|:’“ž/׋ô´P<2ñ Ž·HËhúWô\Äôg2~g'Ë{Ò ~²Àõ;w[ë³îŠßdÜ”œæ3V‚Ò_2yÛ…bý.í'â_§G¤ÿÖñ¡tá?\ç—£aê;ŠwBÛiçX¼Ñƒ_Ú]„b�(¡xrBq8j„-3½@%Cí2ÛîŠ54þ- nŸ­ŒàêçõÇbYߟF/5]Cƒé#i%>+vu]Ú™#9¡xþ‹ø½^2è›ß“¡?‘Y*”çÊ Åٿقæ£ø}qݼM…eBñ.˜¶‘y¦Ã-„b�(¡xòBqÎh¨~§¸¬ŽŒ¦¬=í0£œÖ¨åÊnNØÜ3nà•©jõ;gŸ_]Ïùlbæ w+áWŸ{=êKÇ,Sç¿’×ñÔ‡,¹¿£ÖÑ£5s±5ð>l–õ9¿ö¥·]v0ëïÕ§ÖÙ{kÚCkqvd.7Ó­yÚZºÒ÷¯‚_rÉ„áÅóvy´zÖc s!x_Ë{)¯¬)-ïK¹LÏK¿™ÊxÑ~‚bO90]Ÿ*¨Êz�À¾Š÷áN¡¸h¤8em(§N´#³:r|j…‰ŒPlš°Ä¼Ý‘ Áñt kG"Y$?¿h¤x¹NAi¿ÝÅ4 ²ÅÉ+/Üî8‡£â¥3¼ uu¤XƒSùtt.¹×º2#ûÍoaºkî· ‚òä+$æd«¢zØD´=عίe<8±Fõƒ‡f2ð2ÇmKÛÏ7Òïõ¼2…¦|»¨ëª,�ª¬v½\-:æÜPl*• ÅYŠM(m™ß(YZ‰°.|oÌsÙSìi¶ŒPIäôëÞÉÔH7k”/‡./wšHîï¸Íô‰(üês-Íœ:е}·åA繌Wê(hƒ g…L­‹•#]–w§‘áUÒŸ­,#ÑÆ5´¾².žŒ´ƒí¢®«² �¨²Úõrµè˜ó.´Ó‘²•© » Å«µEÒS(ôß]û. K÷ ÅxÙ×Q@L‡šmC±Ò»\<‘vâbÅüÅíBq@¿Ã.´[†ßhýú_É+C±ùÝ2Ú_ žÊ ëYÒ¡8÷Àò.4ˆ¿L­Or››OÏå43øŠÓv± �¨²Úõrµè˜3vèóÙÏrÖ{ºñ-Ùr冹¬‹Úb:j«áíèßz˱¿‹×÷—÷Ý5ÂPwtŸPlÖ£'½‡S'Ô}B±Ò`úغ#ÓÎÊÐðV^O¬ïœ².›ßgÓ[²Ù¡8`£õ[NAÙP·ƒì»€„îz°µnYÓíðaº Úu¶nû §‚ÜoúÆnŠ µëå*ß1kØ ÖQ×Ó.›ýñŽü ecâµZâ?”Õljõ±ïÛÍ›4.z^çìÞå9ÂQÁô½{Uz=3Š Bé×%3âÞ²_ëÉKÿ"y?ÛÌ ¥²~󨬰x^ò¼CË"`‡óX[Î…âõ#«ù#²Yv4J´ýÞÊA¢=…ICñ“Œ)>s¹¹:—Þ©}FâpvQ×UY�TYíz9:f ŠÛœ¬¹0NçϔDw£èSsw1Jœ¬œõÐ)‹9áѿ۞œ]FPó™Lü¡xݬyчA(€rÔ®—£c*´¤GÌí’ž>£ó<yÛ³ÑkëÌDî…¢r¦åIžXLÁ±Ïš,Î ¤o—:#Pº^÷U•e�@•Õ®—£cØ\B(€rÔ®—£cØ\B(€rÔ®—£c.I΃«e¿”!›þöpÃ.êº*Ë�€*«]/GÇ °¸„P �å¨]/GÇ ¸·þñ«dÝ»Îô;ÝWU–�UV»^ŽŽ`;p ¡�ÊQ»^ŽŽ`;p ¡�ÊQ»^ŽŽ`;p ¡�ÊQ»^ŽŽ`;p ¡�ÊQ»^ŽŽ`;p ¡�ÊQ»^N;f …B¡”_� Éèå€" ¸cuM{€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”�Ðp„b�(FO � G(€bô”@àÛo¿ß÷)”FB1�£§„ÓþüóOyñâ…|øá‡òõ×_g ¥î…P �Åè)á¬_ýU>ùäSôÿ�€»ÅpÒÏ?ÿ,}ô‘|ñÅf´��¸P çè4 =üÓO?E���׊á þì³ÏÌñt:�� Ã:gøã?6ó‡ÿý÷èQ��€¡§ó‡uº„Î��ÈB(F£iÖ@¬Á�� ¡¤S$tª„Îævk�� ¡£ÑiÖ‹ê¸Ý��Ø¡¢·YÓézÛ5��€MŠÑ:"¬ó‡u„˜ùÃ��à®Ũ½øÏ5ë-ט? ��¶A(F­½yóÆŒ¿xñ‚ùÃ��`k„bTΦáÖ÷}3Xÿ ��p„bTŠÞ9Bﱎ†fÖb)��¸/B1*CîΠÖÑß¼Ñbþ\3��ØB1*CG5çý:}LG‡õ.Ì��»D(F%hà± È6½ï°>®÷!��Ø5B1N§D'B± Ö¢sŒu„Xç��ì¡§óƒÓXË?ü |ð™CÌt ��°O„bT<-"¯ðçš�@Å8‘„í¢Ó*˜G ��öPŒƒÐéYóˆóŠN±`N1��ØB1B/žË ¿EEoÇÆý‰�À®ŠQ:‘x‹J|bB1��Ø5B1J¥·_Ë ¼ëŠNÐûs ��°/„b”FCmügœ7):*Ì<b��PB1J£!7+üÚEC³N¯`T��”‰PŒR¼yó&3ÇEÿ¬³¾��àÅØ;½0.ëökzáœïû\8��ŽPŒ½Kÿg½›^8��P„b앎Ç£ÂÜN ��T¡{£wŽàvj�Šè3�=öÆž2A¡P( Å­R7„bìM7íÆ=Ô¹Û¨ÿf"::lƒvãêÜmÔ3Š ¶A»quî6꿙ŀ…Ž۠ݸ‡:wõßL„bÀBG‡mÐnÜC»úo&B1`¡£Ã6h7î¡ÎÝFý7¡°ÐÑa´÷Pçn£þ›‰P Xèè° Ú{¨s·QÿÍD(,ttØíÆ=Ô¹Û¨ÿf":º3_¼d4ý+z�6Ú{¨s·QÿÍD(,ttYæòn<Vk ãwóè1Øh7î¡ÎÝFý«æíÅ€…ŽÛ¨O»á�gWšÙWÜÊÌ?5ßÍÚI®ZÖÿüJF'ÏvX§ÉtôHtG2mH3©c½’Z°7ÍÜÑaßêÓnš·;”Æ÷:eÊóeýIµ¬ÿwcé·NÅŸÝF P Xê¹£{+¾×6ëÞò>•O;­àÿ»Ò}'£~7øÿ–t2[„ ÷2›üS¾zÒ Þcžïû2½‰_ð›ŒûÇfy‰’9j4—›é8úœxYßÈdö>z>`æ#‡Ëh'ò~v)çÑë[=_Þ^¤=ÿàA[<ÿmð¦ÔˆÕƒŽ '7áò*H×nizßN†rl¯Ä§lu¬ÿù4èk9 ^«ŽõÊÞ{SßÝL†Ý(üƧÈ{2ºz<u)ÃÎãÅEr¦cìôe4žïR:zèEa4[vg„ëñßÅëd< >GÍg29ïK7»×‰×êgœÊ§£st{2¼>{þ‹ø½‡aØÕŒv:t{r&tâ„b÷T¦Î :ÃíP^”¡wdKpàì_E}@Z¸½öÇ¿Eÿ¶½“éÅ™x­x9Aé Äû€˜ö¯ÿa}föçÍ­õ]û ø®ë^]ʈúÝÎâ÷ ‹¶sPcFˆ“Ï-JâlÀr€åA{(“÷Ör[OÄ¿Ž;n'2lÇË8^m':M£Û ÞãÉð•µ^Á¿Ï.gAZn¦r± 9oøZ.‚¶gþ}€é;ºžuÃÞ{SÇ Â0PÐiE§Åt”ç¨?v_«Ï­Z·TaÈnÇˋ̯_Ëàì2cǤ#ͧ©;UDm繌íQä˜YÇnr4Ø<¦¡ùèê*¿ÝÜñì@ÑN,žVavJŸKß,/ÚIýlePœPºŽÕ±þ s~íK¯›®zÐù• ü_’!ÅÈÚ†Õ{¹öŸJ7qfIý!“³—ËÐdÖçqÐ.ìæŒ~HØãõšÏ.dÐY¾îîë^ŽêÔðÛÛíË:™_Ëxð05ÐQÔÏ/é Èɧ¯äûÁ£h¹õþDŽVÎh?äeß•È t¡xQ·:ˆò<1ÈaêÚ®ÿE¸?ÜŽªµ]o¦¦©uPÇ ÂÐè(8²7=–v~Öȯ”¸#2£7¯¬Ð—uóÌRË3ô±g9WÆ5s$ØîD»£«h'í|‡Y¡»zÓn6?;°´f'f꭛ع†Å^gbÕê+Ötõ:Bå"°Zòæ k€Íº +¨³Áiºž•Ð<]{¶)k™Å§ó·X÷’T¦þÍÁFÖ¶ž–w “œve0¾^СÛGÙýú|z.§‹þ<¢¯?Ž÷Syu«mùéšýÑ~Uk»ÞLMS ê Ž„2;—ÅB;¿G‹Q¶Å¨± $ÇÉÑ¥áä¤`Çd-/´¦ãÊÛù­ÝE¡.zj[§ë*î í&5ò¶ÑÙ5;1óžÓóT;Ðàí-êž³K•ê+Ötšm/XW]ßÌ’µ]fN=Èѳ Ë0%ñ>s6‘×£ÕÓù+ŸµÔ³ ¯Ä÷}ñÓº¶\÷’èçWƒ^#òM8СÓâô7ôÿ•Éè¶µÑ't[>ÙxD9»_×þüeªS˰ڕ¾÷aÖœu]χgQp._uêusõL-¨…:naôLNâ£òDç·½ :¡“•ѼÔ{³˜ ’Xy#ŽïäjôTN§57ø ¥¦™Cö»9Ø;à©Ñ»:H»Ñ ´ÉÙËÚƒ$§È$~ô38;«R_±®^·¹`.û=ɤ<怶¥SyÆV0Û¬çŸ,ÚÄ6ë^–Êî+âôöŸÓ'¬Èìï³h2¦T(m+OWú »>o'gò0«=h¿ì§8ØÙ\S j¢ž¡X; GË#ûDç·åÕç‰5/XGs|sCÖSK"|űí})—Ñ(`¸¼žtwºP©õËc:ãŽô‡étÎd’騰C´›dJŽæ'FÖíÄrvR‰Óœ°U§¯X83Oc¯•:ÀZXwPÓ×ô2h³Î$d³ÛîÝ×½<•ÞWdœÊî2h¿öÌaLë:oŽrÐWôž§ˆ“Sl2×çæJü~wyàŠKí6$ãùÁáéKílÚúosõpü¼>÷¹ vXáU¾AÑ+ƒ¿.®"ÏëˆÒaz)uº.Ϻ`ÆtÌ‹‹»R%sÄBÃs'xþ¤§ÏmúÊ• B‰Pš­Û‰é«¿úœuº“³Iå×yž‚ƒN6uú4œk¾ÝÑ¡?Ìžƒœ`õÀå´w.W‰Ví>—þ3=N·1=µï‡wŽHÜI < j{ö²¢uò/·ÿ;¯{y*QÿælLtAÌÜÍ¡—:ã¢Û÷é,Óßð_æ¶œéƒäÃóºÌ”ä{x‘eð~³îº>¾ô;GÒét2ÈÊSízsõ[cÔF7ˆýÚ0Ü8®üv³ÙÙ¤u£uYï ƒËr§Î¨ƒ÷w9è\ÌÝž×¹§¯'Ë:Óöc¿?Q’á&o¡Î~=±n³uó_Y·OkyCùnqË­øŽ"Ú>¼à€K‚ãÏÑe¥®wPEë~ º.‡¦gwN‚ƒˆÄÜíÄí6-õòýâwŒ$¬å,Šu'ˆµíD_w¼ÄºƒŒ̘¦£ÔÑ­Þí)ÂÑ ŽTù?™ä¸—C×¥nH-Ø›:nû]ÀÑ}Z›SÚ‡Rj»¹ËÙÿýŸ‚X°³KìèâÐ_®-/ âìÀ’~'¸‹ú߇¼³Qå©c½Ò±7nwtáHàbzEPZÞ™\¤Gn°‚¤{¨s·Qÿ»pûƒŒ[;–«ŽõJKÄÞÐÑa´÷Pçn£þïK§l›ß1,]éŸ_2-f ´Dì ¶A»quî6꿙ŀ…Ž۠ݸ‡:wõßL„bÀBG‡mÐnÜC»úo&B1`¡£Ã6h7î¡ÎÝFý7¡°ÐÑa´÷Pçn£þ›‰P Xèè° Ú{¨s·QÿÍD(,ttØíÆ=Ô¹Û¨ÿf"::lƒvãêÜmÔ3Šˆn  …B¡PÜ-uC(P)uìHlm¾™Å���@ Š��à<B1���œG(��€óÅ���p¡���Î#��Ày„b���8P ���çŠ��à<B1���œG(��€óÅ���p¡���Î#��Ày„b���8P ���çŠ��à<B1���œG(��€óÅ���p¡���Î#��Ày„b���8P ���çŠ��à<B1���œG(��€óÅ���p¡���Î#��Ày„b���8P ���çŠ��à8‘ÿÖ2dÔQ_Çk����IEND®B`‚�������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9d_NT.png�����������������������������������������0000664�0000000�0000000�00000013130�15030617045�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯���®���¢ä���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��íIDATx^íÝ¿k#×ÞÇñ-ó/¨VkHaÒÜJ•Ùf›…L!.¶Xˆ@„%[Üe !l 8©.„…ˉA¤ \ âÙna—‡5!,‹!a1â{ç;?¤3£Y£•­sæ¼_pH¬•eÙçÌw>sæÌèž����Ž ¼��À„W���8ƒð ���g^��à Â+���œAx��€3¯���pá���Î ¼��À„W���8ƒð ���g^��à Â+���œAx��€3¯���p†uáõÞ=ò4Àvàú�ê±2¼Òh4m? �lgex|Çvà[úš1À„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„WÀBlþ ¼@=„׺f¡Ñ{Ô÷i¶Vp"gÓ7é“Ô¯í•ç™­=œÈµ\ÉdØ)ý÷¤µ%M^rågJü{òo+ÞÊlÊ08HŸÛ’Nÿ;ùWøT㟻¹ëÉPÚÙk Ï£w¬Š¿ß±„³kã¹-e?ÖÑ¿ü`K_3æ�¸‚ðºë‰ ‡21àÕ¹ »Ç2º0ìu”7/çAC^"5¼2œ$‘0¨íìµ+¾ÿÍXú­òMø¥t»#™ÎÓÇ¢à:~*ÝàT.®Œ¼º°ßMCsMú;·£ðÙz$áåÛôÁHîýš¿—Ò€{”ÿݯñ%HÌgçrIý}ͳ1bK_û2æ�¸ðº²ð™OGrÔ år‘o#¼Î£ì:–†Öë uÊhúWúo©8H?‘ñ›•T»½øw~"£¯H«?–ED'¼Þ /‚„ŽÓΡ£§³ù~"¼@=„×mT„W™k˜|Ÿ>OäÃg>Øeê†×ßeÜÿ›tGQŒÕ ûDŽâÿ_ÒŸs`Ì]È~ç×8ŒÀLx½> +íÒ3~!¼@=„×mT…×bÃçqü;eíÆSö…0¸B— ´ËYUýúÈ �ÉÏÜjiÀ:‹ßù­\†¤Í0¯}¿…ðŠY·h?cø­qº¿µ8Û0—«éÆ:km]釹™Õ8´.þÝlVÏ"¬¡g:ºÑ÷µ‚çò±ô |%ç3ci‹ºšÊxÔ—Nö³:}9Ìr}û¢ïǶ¼�¸ áuµÂëM3¯kÃ`²d ›UÕ™Øcc§_^à‘´Ný@iþÎñ óýè5^^o‰ÛÁ_2˧£St{2<›ÊÕü {:®d~J¯;0wábh'_Ë ü¥u[y°æ‚ÃM¤Ûƒy±äüRƃ£ôÌDúÐìLÁ@FãèýÆèÅŒßI¿û8¿~{OvÑ×¶¼�Ü몕´2¼jX‹vˆË6². Æ¡±ÿò­•ÛY¯ Éè2¹ßÙXwÂëîÙ¹h¶å^穌‹3›z5ˆ‚kYÔ1½²\D_+¨5ÓºJÃô“•×Èq ׃¯eb^¸+_r³»èk[^�î‚uÕʉZ^ã™§•Sø» ¯ñiÒ–±d S\: _wOJvØ» ¯‘xÆ­+ýÑ—„×[`åvP\²bÈNáëû.mÅðZy�X‡æç…÷“ßææÓS9. ¨„×¢]¼�Ü몕´dÇ;Ÿý,'½Çß*«RexÕY¦Â•þ ºt@—+¼N¿Ö[eý]‚~(Ó\€MÖ«ì"¼F»ü«ÉI²†ðºs6nq@­¸à®îAѺ×Ú˜ŽÉûÅ ¾Ì¥;ë¶¿d Ä»-[Ø Â+�Ôc]µ²¾€j¸ŒÞ£¾O³mö!ÕkMuç¿zKrãÿd‡l~Aöx$÷~Œ4ÈÖõuŒe­h§NdVsª©øÞ–ëi54®†W zOXã{òï 7Ñ¿™]ÖÏTVÏp–ÙѬg4ö{+sºÝeKw4¼>Ê-©ID^§Ò;6ok·?»èk[^�î‚uÕŠ ظÜp•.#9.žyHï>ÐÖÈîbÖ3Yw½rA—6SñR‡@NÎÓ; Ìg2 ‡tËÖíîá�ê±®ZQ@‹¶ƒÒYô´ïѪÁð4;ªÑKc¦¿ò‚Ã{ËaªäÏj,Θg!KŠ·ï:`øCa9Í~éûzW¶¼�Üëª`;ð á�ê±®ZQ@¶Ÿ^ ëªôŽT\x¶Ú¶ø@¼3ýÛûèk[^�î‚uÕŠ °ø„ð �õXW­( €ÛÁr`´ÜG7€þNïÊ–×�€»`]µ¢€l>!¼@=ÖU+ (ÀvàÂ+�Ôc]µ¢€l>!¼@=ÖU+ (ÀvàÂ+�Ôc]µ¢€l>!¼@=ÖU+- 4F»û�. Z€ãž�|BÅ�Ç^ø„Š�Ž#¼ð �Gxà*�8Žð À'T<�pá€O¨x�à8Â+�ŸPñ�Àq„W�>¡â€ã¯�|BÅ�Ç^ø„Š�Ž#¼ð �Gxà*�8Žð À'T<�pá€O¨x�à8Â+�ŸPñ�Àq„W�>¡â€ã¯�|BÅ�Ç^ø„Š�Ž#¼ð �Gxà*�8Žð À'T<�pá€O¨x�à8Â+�ŸPñÐxþù§|þùçòÉ'ŸÈgŸ}F£5®^ø„ЇFûí·ßäã?–>úH¾ýö[ ÃFk\#¼ð õêÕ+ùàƒäÙ³gñì+��pá”ÍFé�@s^Ñ(:êk�uÆu:¦�€¦ ¼¢1t}ë‡~¯qýã?ÒG�@“^Ñ?ÿüs<ÛúâÅ Ö·�Ð`„W8O«®oýñÇÓG��@S^á,aÕ%:ãªK��@ó^á$ «Z5¼²L���^á] ËôC��€_¯p†Î°êúVqÕ ´��€¯p‚ÞúJ—è­°Xß �€¿¯°ž~؀ζꇰ¾��¿^a5>æ��˜¯¸s›œö×ÖgÏžÅ3®¯^½J��¾#¼âNétíê:nõ9ÚXß ��L„Wܽèêý÷ß—èÿ—É>æUg]Yß ��Н¸3:“ªÁµê£\õ¾­Uÿ�� ¯¸Ù…WY3—è «ÞI@g\õÎ���U¯¸uHÍàš5]: ËôÞ­f«–���d¯¸U:«ª3ªeáõää$þï_|‘>��`=Â+n•^xU ­Y{ï½÷äåË—é3��nFxÅ­Ñ ¯ÊBk±½xñ‚; ��€^q+ôþ¬‡‡‡¥aµ¬és¹Ë���¸ á;§³¨æm±ê4½x‹;��€*„Wì\v¿ÖºM¯Þ}€%��  á;õêÕ«Ò`º®éšW>��l‚ðŠÑû´nºÎU—èWfY�@„WìŒ~JVYP5›Þ:‹5­��`[„WìDñã_ͦ³¬úï|‚��xW„W¼3]¯ZZu&V/À��ØÂ+Þ‰®YÕ™Õ,°êGÁêݘe��·ðŠw’}ü+·¹��wðŠ­ihå6W¨KÇ üBŸûþÇ®1¢°5-H4F£ÑülûBxÅÖö9pá.Æès¿ÑÿÍDx…“(HØãÆ?ô¹ßèÿf"¼ÂI$lƒqãúÜoô3^á$ ¶Á¸ñ}î7ú¿™¯p Û`Üø‡>÷ýßL„W8‰‚„m0nüCŸûþo&Â+œDAÂ67þ¡ÏýFÿ7áN¢ aŒÿÐç~£ÿ›‰ð 'Q° Æès¿ÑÿÍDx…“(Hïb.oÆiµ2~3OóãÆ?îó7cé·¥?þ=}�ElóÍDx…“(Hïâ/™ŽȽîH¦~eWGÇö×1eKM®óéHº÷ÈhúWúÈzד¡´£¿Ç½öP&×éƒ7Œ¯ägDßãh½p¿ÿ¯eÇ¿GÜ<œt(³Ï~%}`kMÞ!áö¸9n~—q¿#Aøkú5ê VÌBéõÇò&ýr£ñõf,ƒù=îhTÿG}¡ÌÒ/}Fx…“Ø!aNŽ›ù…Œº7ž]Cµ"ïzr"÷G²˜»Û`|­|CšÔÿ:s~8œÈbÒÜc„W8ÉÖ‚´8Å·v:›Q8ís¯#ÃÉ•ÈÕTΆ´·¤Óezeì"ôH;ý÷vT´ÞÎÎå´ß¿nõB¹Ìž:ŸÉä´/Åk-¿gQè®'2lgÿ¶f\ô¾Æ#ãµ:}9Ì;®ìwlÏå›ô½hk_Éùìmú,;éût‡Îˆ.þ¾ùv,á,êÙxÍcá±H~f-êó³ÿË“BßF/(Ó³ ¯©ÏH8uqÎ-¡¿ƒý~•0h§óe?ªÅ©þ¨>tã�y%“a'}n´ÝåfQMQ_ŽGÒï´’çÆýøGTRúé¶¿ÁøŠiýÒïùLÃA:vºÒ/¢wb?ý}ìõVf“P†ÁAúw×}À×2êZr0qÃòŽÙD^~?\n»¥Û­þ¼ï–c"k¹e$úZËý̲¥û-Kè{Ú—ö"°Ì>î4P´‹ë’¢]ÎäD:Ùº±ù/ö¬î�®ÎådðrJcIÑútt*ƒnO†gS¹Š¿ÿ~ZL^G;³‡ Xßù¥Œ÷+NêŽ2(i™ÏÎd d4Ž~FüHZìº%¼Ì‚irÁW;8‘³¬8Æ?ï(ݹÚËêqSAƒèQe@I/¾[Y˜Ž·Î‰Lâ1¡}~$A¯ŸŒŸäII/úö­\†¥[<€ÒñuòÜè·8Óç•§„µŸÈÑʶ¥¡òQù6o¢šÊ$> Œ¶ãó¯$hG5áa/·í¯_*YVÐé<\Ô«xÜD_»p6ÀÞþ#£ÇÒþCÆ‹::“ó“ âbZí‡ãò¿y<{~$ýÑx±íư¹ñ”Ô„®Y·u\ŒŸJÇ|^´fû™ô¡¤¿åªöð 'Y½CŠ I7”?¦aóµ~íŒþ.Çá/«;8dDa"W$ÒY™ÎS—ÍlÖ=­¬3°%ÅQñàë4옊;O ÓOV~ž §´Ü ¯UÁÅϾ.Ú‰w@ÑŽî"ÝIųîGéø3i_ÉAŽ®k<6fó4$=vvÍ­“áUûï(:ðˆ7¦ªÐ¢3°ÑðÊL\U}ÑÇ‹wÙ`|¥Áh0¾4ž£?;°j&®Šý¯AòËèàâ|t”]§ýpôd㋵VJt[xãCz¸8ð 'Ù½C*‰tF++TñΠpÚ&×ò§ ãp²2“k2Nuú2 C ß ³gK«Gä‰ùôTŽK [qíLÏ ïÇ€£_·$³î•K<bnþfŒ·d&¾g„—êÙ5íÛ§Ñs§ÑÏyP‡fË–À¸Gß¿áUûï(zßI˜_†r\v±T\GJfÃÖ…œ•`´Áø*.;ȶ“ý¿fµJi?(­ÿÿ”ÑÊiþÕmv¹ +ýÑ÷Ñ~âårÖ7³X‚¦K¾‰žíOgâì±Ï~um/‹ØY2é GZhtçÓkG;™ì´«Î‚æ×­S6+eŧôè9yo+3¤ëÂga§ïÿ~ñµÝ˜‰±{Ü”©^â±dŽ·ôÔ ¹º²Ï•þÛsŒÿß™™´ºœéó8œ|/Sí¿~(gÃÇQ¿¿®—zP{PRGôñ¨ÿWëE2Ú¹ƒ˜›ÇW镚5lŸ¬ìÿ-þ~åg¶tbä‘´tÒ"07 ÇÙ¤Çú³vIàµoIáN²~‡¤;¢øôÜ+³`ñÌÈñ醧et‡sÃi½2ZË–TδT­Ÿ‹ÂÐÅ©ôÌÓÉÑï–¿ÕŽrc&ƹðZÙÙìüå¿d˜[Ÿ¬´Ï”_Ø£§§{:õ9«KAšÀ©ð m£éUôe_úg?ɨ÷eÉRžhˬšM/=S“lÇA+»è+uãø*¯Õ3ùöq-¼Îgÿ+?­\h¥ý.ï1ųìÅí=¢càh“SÿUKOò48XÖß„W8ÉúR|J¯#ýáÀ¸h&£GË}éþ?ß}` OVÖ–­).ñŽª·\Û¨â×é-—)ä¬9"_+“óôêsÁ ‡t͵¶³xú½e³@–q.¼ÆÆ?z'½¢¸ø·ŽÇÛA4Öºù¥Xºfú^×X·˜^‰nÝøôtd/rcUï>ð¥ôŸœÉ,ÿ¢Îp*¼Fï5;ÈÐÛSu;Š×uµéœ‹úõ¡Þ% Æ…µø7ޝ²z±åõžØÙÿÚGòìêß~Ô—né][*êvq‰HV³[Å»Pè÷w1¡Ò;‹t³þOgæ³D=Ód<,Y/¿_„W8Éþ’†N½MÙE2ÊX§ý.ɤ¦WGôÈ|q[«B3–èî(*,¹[dO!¥;ÅÜk,šy¡OV¨²Û¶äï`°AÉ÷.nÃe¾~å { ïÑ-zEroy;µV Ãïÿg9N’ñ–»}Z&å9ÿõg9Éõmv%úRþ9Éš·—¹[i¹Ç™>×í¨e,/Š·+sûÌoùV˜Q`³Ûði?~õõÒï7×B®_¹º‘Ý&©¢XLß§•r}5­Û/'˃ĵu;»."›QÏ×íz´¬áÙ-°´éÁ‹y­…îs–w'HjH A°¼ [2vF«ëb- ïo_\Û‹À"û¸pWSÇÍʺjCí5Ó C­ðýßL„W8‰‚„m4rÜÄ÷üí”,Pnâ½ Ô ¿ÑÿÍDx…“(HØFsÆ®a+~:RáÔq¼6K6NóîšþÞðýßLûìWF¶FAÂ67þ¡ÏýFÿ7áN¢ aŒÿÐç~£ÿ›‰ð 'Q° Æès¿ÑÿÍDx…“(HØãÆ?ô¹ßèÿf"¼ÂI$lƒqãúÜoô3^á$ ¶Á¸ñ}î7ú¿™¯p Û`Üø‡>÷ýßL„W8‰‚„m0nüCŸûþo&Â+œDAÂ67þ¡ÏýFÿ7áÎÑAK£Ñh4Íß¶/„W�wjŸÀÝc›Ç®1¢���à Â+���œAx��€3¯���pá���Î ¼��À„W���8ƒð ���g^��à Â+���œAx��€3¯���pá���Î ¼��À„W���8ƒð ���g^��à Â+���œAx��€3¯���pá���Î ¼��À„W���8ƒð ���g^��à Â+���œAx��€3¯���p„Èÿ@zsBBpI����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9e_MT.png�����������������������������������������0000664�0000000�0000000�00000006730�15030617045�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Q���P���9¿ R���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� mIDATx^íܽ‹IÇqÿŠ'Ì™#EJ&Ùd ”LàÀp`ƃƒ`X880ñ° ˆMƒ² †É3(ÙÀ˜ cÄsý”º¥~©–Ô¥êšÒèûÏ‹§[¿ªêzºº¥g��€Æ(¢���PD��8 ˆ��p@��à€" ��ÀE��€Š(���Q���(¢���PD��8 ˆ��p@��à€" ��ÀATEÔ³gÏØØØØØØØmØOtEŽíïYúEžÍ—›Ð¹ÑNû‹*Aô¸Ñþþ¥_äÙ y¹ í´¿¨¤AíïYúEžÍ—›Ð¹ÑNû‹*Aô¸Ñþþ¥_äÙ y¹ í´¿¨¤AíïYúEžÍ—›Ð¹ÑNû‹*Aô¸Ñþþ¥_äÙ y¹ í´¿¨¤AíïYúEžÍ—›Ð¹ÑNû‹*Aô¸Ñþþ¥_äÙ y¹ í´¿¨¤AíïYúEžÍ—›Ð¹ÑNû‹*Aô¸Ñþþ¥_äÙ y¹ í´¿¨¤AíïYúÕ^žÉtø\:é|M¿óÐÿÜ„ÎvÚ_T ¶× ŸeÒ?1¿°uú2º¹“‡ô·D¾Ë|rQý½üv2’Ù÷ä7g#9±ý<Ûú™×ýÍÎ¥L¿.ÌOËó™LF}éd¿ÛÊõïyû|¹ßÍ'ÒOÿFåýu*ÃÎòg'£™|ÿ>“ÑIº?ëv!“y“»Ñ}yµz]]ÍÖ­¼¿™ºæx·O~¥ößÐö>ùÎr1ÿ$×ÃÞúuè–õñ\_{öì¹ §™ÿÓ¦ÅÝXξó\YÜʸw"½ñ­¸÷Š¿ån|$÷]µ–W“c'Ù﹌ïþN¿yxB缞 ¨l·AuâKЦÂdú%ùÞKéÿÈR VEPŽNÊi1£EÔs-@Ì´H;[ÿmëÿ_$µË¥tzïdòþ¥õ¤¹˜ßÈeïBÆ·ù©á«ÜM.¥›oèq¼è&ÿ÷•Lî¿¥ßÔî¹tº]y‘cîue“¾)®ôKóÚ^fe$Ç?ø±…ÂEszÕlò«ëW-ðšåÃ'uŸWÇIE¨¾’Ž¥@Yª¸']ÍêJò9ýúñ=N^I—oƒ\¤´%tnq÷ëÃU‚í6¨­ˆJèÌYrâ_‰VŠ(=ѽ0“î÷ä*º×Ë]a¬kA×÷{5iŽãŒ“ývGŸ– ¹b{!Ãñ»õ1>å"J_Ûå¬}¨éOûL»|fiV]+ýÕ¢ÐÚ¤ö ‘¶D=Ù˜1ý2ª˜GÉ«µ±NèÜ¢î×"ªÛmкIOOÈýâU\¾ª™QæZ¶Ô¬ÕEñ¤§û9õ|«'=Ž{-ÚÒÛHzÄüûöÃ+¢òp7M Æì–SO†“[yH2nû|•»éX†]]úOïú“ÌMì¹[o«¢a¹r·üÝÜ­S|¿‘éý­Ü$ýjyûµ#ÝáDîlm¸é–KrL7WÒOo±š­{)“;÷›Uú7öeЧìx ›ý–Éæ[låöѬ~’Ù<wñ’ÐÛÙ?ŒÖYrHW  Ç’m'­®Äè>|*dk¹ÅkÆiò³Nÿ­¼ÏÝFíôÿ%ŸV™-Ÿ§Ê~VÜÂÜ‚¯£ÇàÕb.³I®_è¸ÿ[†ƒëuÑdÆúMr¾›¤ãÛ>7÷1¥ç¼ôñ½ð-Ù÷õPºúu'¿ªïŸ÷ܶ½¿§(ªÛmÐú•ƒÊ :`²më­´RU±<ùŸ¬&ýúœå¯¤uŸ.·ì6I‹¨ùjìW¹IW럕•‹¨pÜÛÿ›Ì§?J¯?’Éln2]Ì“«~W^öÏ×9/îez™2ãéêĺ|Öç\“?Wm¡ýá´\ h|škýúä…t»ƒÜsuËbhp‘®«†ÍX gã›ÜO^K¯r²ÿ"³«·Î'lcIÇÍù+¤–>½¢íóOéÇ2Í&+“‰©7ÈeeVTΊí£ÅD¹ŸflÀÛ6­›tZWùÒsFÿJnV™iÿ=«¬À…~>l^ózøCƃW2úðknÜêø>Í=“˜æÕíÉËl,ÙòÚµ%L®ÿx/.Ï¥?ú%ùý¿“±úJN[<7¶ÖÏj„ÞßSU‚í6hÃ"ʺJSg[¥h2pó‘NÂg¹“g¥ˆÊ] ¥[ãÂfõ:ò0»’®>•­†=¥"*ÉòÒV¸˜Õ¿ìAg-VÞÊÕìËògy…¶°¬L&Ê•9ñv¥ç×”¶õ°º P7ñ×»i‡×Ϋ+þÆ’öþu婨~¥mqÿQ.¯ÒÛÉu…åšµ@(�üåYd-Ø ÍóM%›Ê¹ÊuÅëãñ——>æð:9·–Ç­Žü3‰š×Ké^Þ¤«ÊKÕ¼ª¬}Ìü}]•îÉåô>X¶mõ³:¡÷÷E•`» ZWDY&«Ú£Îæ"ÊL¸ÉkÓ×WÜr·E6k;rù×a®À:ëÛTO¦ˆÚt›,W�èë¿È-ýç&eÛÄ^>a—¿ÎÓ}ZnZóÖcÏnÚ6÷[Túÿ½Ø¹ïÕ¼îšb`)Ÿõ7™Ïþ—»ÝWŸ}Òk—·< 4›jÁ¾”dSyHÚr®ÚØÿ·¼v.˜mý¯œ×î}lÙ7K¾¸æV|=‡½š¨Ž¸Ý�kŠ¨ÅŸ2 Š'y¯EÔr¢¬¾¾|©ƒVϲR⣈*{2E”æfYùQz>IŸ7ÙEaR¶®é>Îsí[¿ªYwÒ·_oø;{ò5–ÌÀ.c¡¶ÖW‰UÖËÛ$îPÆÓüGŽhîÛ Ú0Ú97•ûUŽæYyHÚÖ_4ß]V Ãò•×.+I†µÿåóÒ•è]ûXÂ\t¾²÷Ûµ;V…Þß6±Ï.¢:âv´œ€sùtõJ»~ÄA­ E”Œ/ìW4:áö®d¶ºÏ#—ý7•Š÷äŸÇÙÕÑQ–+F}Ž¢Z\y³={bž·HаìÙ#Ûï• +Ó¦=K{×Ýz¨[qØ´J³?ci÷[EõÅVÝ$ÿUnǯåBŸE3ù&…Vùù/kAªãx—g´üjåÜTîWyI?,¾!BY R-|¿!Å_yÕQºªô{ṦÊêd>ßF},Q÷ý–µ;V…Þß6±Ï.¢:âöÔ“û‡mÖz«|Heni¸üóÕ$SÞÏú4Õ5<•þhRyÓ6zòY¿³jÃ1­žÃÒÉiù’…­Q1¹Ý_sËç½zýk¹5'T}˜¾;§—‰Ý\Ûi±•|ïê·ô™ = OdÔ?/<ó ¹®vÎ-ÿç +=Áv»Ò¬úÍP·–RÍÕnB ä‹Avì}@ý ߟïhÂ-˲]om*¶Ò~sï*[~ ì@zÙó+åb"÷N¬ê ®Že]½É U}·å“vüÁ~㉟<Kj'êef•˜õ÷ËSZôw×bIç—©¾óÌå¢Ë#oyég”.,³wy&cm5–kú_>ßF},=X¾ß¶VúÙ¡÷·Mldz‹¨Žø„?îí_úˆ�ý”÷Ùg¹Ï Õ¬L&˜õÇèÛÅsï|Êd+Xæwô-ÒïåCöúãdòÏ>©üg¹ý´þ¨³Ïå; ÜÌß°mÅ·Ÿ çå>?æÿ–ý[ÎtÂ1Ÿþ\>îü„Ssab¶ò3&¥ö©\¼$ãíõúçæÂaœLži;ÞpaûÝÿì×6º¯ýÙ/ÒV›)Ô‹¹®.òý©pa£+zƒõÇ>h¶~n|Ñ囋Z4ý²î •ñaË«”³é?»ô±š I³Ù?ÖÃ7ÝWH¡÷·Mldz‹¨Žø„?´¿?déy6C^nBç[;b¿‰êˆxÇö÷‡,ý"ÏfÈËMèÜbk§Cì7Q1ï¸Ñþþ¥_äÙ y¹ [lítˆý&ª#fàm³é9”âöï®Û—7ü K¿È³òr:·ØÚéûMTGÌÀ;n´¿?déy6C^nBç[;b¿‰êˆxÇö÷‡,ý"ÏfÈËMèÜbk§Cì7Q1ï¸Ñþþ¥_äÙ y¹ [lítˆý&ª#fà7Úß²ô‹<›!/7¡s‹­±ßDuÄ ¼ãFûûC–~‘g3äå&tn±µÓ!ö›¨Ž˜wÜhÈÒ/òl†¼Ü„Î-¶v:Ä~Õ3ðŽíïYúEžÍ—›Ð¹ÅÖN‡Øo¢:bÞq£ýý!K¿È³òr:·ØÚéûM4G¬á±±±±±±±…ÛbÛñìâðŽÀV‡x2Šy6C^nŽ=7Š(���Q���(¢���PD��8 ˆ��p@��à€" ��ÀE��€Š(��€”Fmn" ��´¢I¡CQÔE��€Š(���Q���(¢��@Pù‡ÃwÙbE��‚й0j‚" ��ÀE��€Š(���Q���(¢���PD��8 ˆ��p@��à€" ��ÀE��€Š(���Q���(¢���PD��4&ò¥3ÐçÒ"eò����IEND®B`‚����������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9f_FID.png����������������������������������������0000664�0000000�0000000�00000010565�15030617045�0023235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ú���—���+·ü¨���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� IDATx^íÝÁk×¢ÀáüZ{UðÎdÓ•WÞxÑn¼ÉB 04”@!/]ÜÒ‚Àðȃ AxPh…˃6 î¦ðˆ×EyíJ´)¡CCæ¼9cII#YylÉó}p ²ei¤Ñ4?ÎŒî��àÊ m��(Ð�€m��(Ð�€m��(Ð�€m��(Ð�€m��(Ð�€m��(Ð�€m��(A¡Ð¾sGŸ�À<…CÛ0 øþÀú°G ° TÇ*­k¯;€õ"´¡�Û@um�ŠÚP€m :„6�E m(À6PB€¢„6`¨¡ @QB ° T‡Ð (¡ تChP”ІlÕ!´(JhC¶êÚ�%´¡�Û@um�ŠÚP€m :„6�EÝÂÐþ#´ëé2ŽZ=4_ôÂéàZ!¼ýöÁôõ²c£ºï“kv›a#ï÷ÃQo‡~z›Ó÷]ktÂIú»igýnh7ë¡6¼þv#<ûŸvøzëü~/¥ßõÌýNíÐìýÌën„zûóë,ü<VS|.¨†UZ×^w�ëå†vtºIÀŽÂ2õWò³{¡Þúm<ctŽB9ã}74ÁC{«ÙMÒ<Šº;­Sÿgè4>;O¿ Owî…Vïíàçœõ_„ÃÐ:ÎføIèµÃö ð//.ÛÃÐîOþqÞó¿ÙØ=¶I—x+¦2ÁsÖÝg°<Þø˜ÏÇAÎkìöZ¥u]™×À-Q¡ÐNœ‡Ön¢¯ß ~(#´O:¡QÛKû¯ÐkÝ ;­ãp6øÕ¹«õÐèü9¸|U®#´yÏcÅT#xâët7ÔêÏÂñéø+¸J„6�EU+´ÃÛ$|ë™é‰l(gâ:ër¡}–töa¨í´B/¶IŒîÝÁÅûÙ< “«Ž—lhÏz² †vÞóX1•žø:݈o§?‘©¡ @Q íÉhNÄPNO|Lé¸pÚÆDhO‰ÓFv3{«ãåƒñX‰÷YxzÈ<qÙ²óª3ó²s íœç±bVoȬûøÚz—™òQ{ðáÓ‡Ó^x‘¬ÓÑqwja»Ñ½ìë4°‡¿ÏŽZΧ3sÄO>vjçóúŸf¦Ÿ$—^ö'nç$ô:­ÐØN®Ÿ^o'4ž½ ý«~/Z@\žU±JËÀÅ„ö{´Ç]ÚqöFvouÜÃý8ìfe*´'ùΜø'ÞÎuìÑÚ«º œõZa÷‹§áûýPoþ”ôÛðºý lÆuuö{hïï…Fû8Y³§/ÃÑááõDÔÆu¼9ç`Þ…¤ÛCò@û.ô;_†íá'>ÑÙëÐ9<Vgügý—áYc/ì·_<ìK²JëzU_w�ä«Xhǰ|8{êÈBæ…vœR±—>?S#ó‚~¡ØŸ%Ú‹(Ú9ÏcÅÄuºzÎ×gÜ|Øy=¨ñ ß?ÂAn¸æ½nâm=¸Üìg½gá`ò6Æ^ãï’7_‡£î_靯äM»ºW±®øá‡Ðëõ—Š[Í×�³T+´Ó=zûÓÓ8®*´ÓÊ?Î9ÈqrúH¼—/'.Ö!´óžÇŠYÍm`rÚRÆpG²ÜùcòL"³?ÍX\Œû¯“èŸXžì6—ëàY~LߢÐ>::JoçÑ£GK÷U, �×§:¡}Ö/„ýEOï7ÓìÐŽÛïÔòr<Ÿ>²Ó|9ºïôô~õÇ¡Ýÿ`þìu;ìo®phÏz+f%·4¦ä¯ÿ˾›w[ ‹¯Ÿ‡SoÈÆ¦ÍÙþÒi0ËN]¹Wµ®ß¼yž<y²Tp m€õr C;Ææ"_´2ü˜}üz3£3†ÊÔb¾à%ÆÃ‡/µ™óÅ/™¨8Ÿ‡ºóáww6C½ÙÝ~ÓæÅ`ÝÎ`Ì:à2ïºéð…5‹ŠÏÅÊ™·xÞžã<W²79y í9ñÆ3nw™iGñµ˜V5tú[hí7Vâ’W½®_½z•†v¼ÝË÷J¾î�˜é†6”o·ù/ƹÐéO"Ò³†Çsº¯dorŒõ©Ogâô–½Ì§$ñòN¨ý28ÃÈ»Ðï¶C³¾—3Ïüf”µ®c`gƒ;øEü¿`½m(`u¶8=c;]žé1yì±ÏÇO¡×úWæ”9óæN‰šeâÓ¢Ñ'+ÙOI2sÂ'N9X«…SªnR\¦2eƒ;N-‰SLf){Y�¸ZB ° TÇu­ëE‚Ûë`½m(À6P×½®ç·×ÀzÚ+kÆÁˆ9cöYC(K|Þ©†›Z×yÁíu°^„6`¨Ž›^×ÙàŽcÞn�V‹Ð†*· \ø…7™1ë´’k*>¦Uƒ{ø_tÐ$�«AhC¶êX¥u—e‘ƒ&X B ° TǪ…öàX}B ° TǪ†öàX]B ° TǪ‡öP îû÷ï n€"´¡�Û@u¬KhýòË/á“O>Ü�+àÒÿ‚Äÿy†a73• îv»þþûïÁo�¸.vËA— ÖÛ*­ë"Ë2 î»wï n€k¦�*@p\?¡ P!‚àúm€ Ü�åÚ�&¸Ê#´Ü�%Ú�Œn€«#´˜"¸–'´˜Ip'´¸PŒìÛ‚`qB€…ĸž n�fÚ�\J6¸ã´’8½€iB€B7À|B€¥n€|B€+!¸Æ m�®”à8'´(…àªNhP*Á T•ÐàZn j„6�×ꪂ;ÞÀ*Ú�܈apß¹s§PpÇPõêÕàÀêÚ�ܨ7oÞ„'Ož\:¸ãõ·¶¶LAV–Ð`%dƒûþýû¡×ë ~3-î ×± ¬"¡ ÀJÉ÷£Grƒ;þ,ÚbXEB€•4/¸ýõשЎãçŸ\àæ m�VZ6¸?ÿüóðüùóÑA”y#^`m�ÖB îÏ>û,é>úh*°³Cl«@h°V¾ýöÛܸžb¸iB€µ1œB²èˆg/ñÅ6ÀMÚ�¬…ËFöpˆmà¦m�VÞ7ß|“Ñ‹± Ü¡ ÀJ‹g‰ß™З1¶}e;p„6�k#žK;ž+;N#‰áœÔóÆÝ»wÅ6pm„6�k-†süVÈx6’øÅ6y[[[b¸B€['žs;~{dœvã;îÉÎÆv¼P&¡ @%ă!ãÔ“ß_}õÕT|†aLŽe m�*ë*þ!n'¡ �KÚÀ,B�– ´Y„6�,Ah³m�X‚ÐfÚ�°¡ Ì"´` B˜EhÀ„60‹Ð€%m`¡ �KÚTÇY8é†Zí0tNÎ?c¡ �KÚó¼ ½Ö^òÕÂNë8É´uÃAhtþ\^'W½ìƒõ¹Ó =½¡ �KÚ‰{A¿‡kªÑŸ¡ÓØõöƒËëd—ývÚ�°¡}‘ÓÐm> ­ÞÛÁå5svZ;÷Ösù×yÙo ¡ �K¨vh¿ ýn;4ë›éó§ˆl7þZ/2q÷Ghï:¯ÿ/´;ç×Û> íÞÉà÷gýÐýñ¿2·µíã$Ó‡Þ‡~û`ð»íÐì¾Iîûyhl×’Ë›a¿ýûhjÊY¿~ü¾êµxÝ÷wá²Ç½Á[ƒßMŽƒÐî¿?¿™ä^O{?en'Žâ˾ø\=k„íÑýf7¹§hÑeOÖM}ãüçÍÐ}—¹ÝÚƒÐ~ýîüjﻡ¹1üû­é©(iÐ'¥Vͧ™åJ.½ìO<¶“Ð{q4Z7µúQøéÅÓ°Ÿ^ιí5㲄6�•uÿ®§“pÜzö›ß…Î0b“�|yT?Xí{±›nç˰=6Ï7Îý½—„n+s[1Þ’ØEá@üùnÃß?;I¤½H®öºö7“PŒWMÿn74ZÐ;=¿ƒ³^+¹n;ôÓKт˞ˆ»Ûè$‘/½ïÉOâ»ûÏp8Ð-ûBþ Ýæ½Poþ4z|É„Îá§SSD.Zö¡ôz_< ßî n÷mxÝ~6Gá>üž¿‡<]ÏIh¿è Þ`ä¬çt9‡÷ßìÄ7k<‡>¡ �K¨fhÇü$˜^föÚôÛ¡ž‰«4r·¿ þ`ïh÷n]—i”>ž>»E¼ý¸÷ùðEè/XfãÁ¹ø²Çëžt‡Ý™øgŽId÷üfÅÛ‹ûDeŸ’¾‘Xd:ÈEË>4ÜÛ¾;¯ç_7®·Íü3Žœõž…ƒÉû[Ïqyþ¦öÞÇûxkç‘ m�XB5C;NM8X öfDÔD„¦S=ZÓS!îL†jk‡acæ^Ú¸‡ô_¡5œ¢2™eXtÙ£ùgíHßDŒÝÏÄ[þ‹–}QýÀµpg»Zívh·ÿýaïöÈ¢g‰ÏÇîBS6ÒÇ;µN¢øØrxÍ®çøáÓ£œ7Wq9†fwêmÏ­_ËÚ�TÖUüCºvÙ#ŠBÖ§"ê}·¶ÓÒ©µ±©çá–·76FY}ÆÞÏwét‡ZŒÏÎpúB4Ö /{4gªD"û8.6oÙ—0œ¯=uʽùË>’î!Ï™¢3åüÂôt’(ÿ€×±ç'>ïŸN.c×Ocû_OB�– ´Çõÿ7ü;;ÏzjúGvOküïýœƒgíuž³7:½¯‡ÓÓ8âÜáÝLà-ºìQ¼îŒ©Qît‰™æ,û²ò–ó‚e™|~fÊ®·Iƒ^ÇîkâÓŒÜå9 ½öaØŽbÞÎÎÚ�°ŒJ†vz@Þƒñ3kœöB§Õ;õÿ /‡ó±s#.œ“ñ§E Î’÷íƒóâq2êãžÞöù™GjcÓ5\ö(N}Ø> Ýážöx½x6“Ñ—¿‡öÁÃÐ:ÎNœ…¤Ñœž—¾HøÎ“p¸?~É2½hî‡É9ç-û@Üë¼¹Ðt–9oârMЯ¿—ù4cpgë·óå<=NÏBSÛÞçNG¹„6�,¡š¡H¯jÉãÏA:_øÇîà ¿ìéì’1Üc™ 8øYzš»$¹N ­Ì©ñjõfønt»ç׉1¸1ú»ìÈ~ãd¸ÇÏ>œÒïÎf¨7[N»—Ýk:wÙ³âÙIö?\/ž¾îûÿÝl@Ožjoâ¶[öżï…Ýú½ñ¹ìSSe†æ-{œê±ýá6ÆÆÞ‡˜[_“#^ï4=gO˜=à ®Ï×ÏOá¸ût¡3£¬«øX—%´¨¬«ø‡ª)¾!{pkOí m�X‚І"â›vhìäÌ«¿E„6�,AhÃ"ÎÏZ2šÊ’~çóñi8·Ð€%m`¡ �KÚϸ²—¾~.ƒGY;qý-Ëÿa�¨¬«ø‡¸„6�,Ah³m�X‚ÐfÚ�°¡ Ì"´` B˜EhÀ„60‹Ð€%m`¡ �KÚÀ,B�–ÿ!5 Ø5–%´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��J ´� B��®\ÿØ!kÚb×»@����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9g_FD.png�����������������������������������������0000664�0000000�0000000�00000010203�15030617045�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��»������ú���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IDATx^íÝ¿k[çþðüš½tȺÜI“ dh/4ˆ€‡RB xÜá†Ch§‚À)\Z(‚Âå ßÄ]º¡t0¦Ki–RŠ1´„ ž«G:²Ž%E¶”céœ× I'ÒÑù½õèó<ç^��€‚v�(,a�€Âv�(,a�€Âv�(,a�€Âv�(,a�€Âv�(,a�€Âv�(¬•Ãî½{ò2Pþ¿Ø>k »š¦iÚÝ4�Ó³ kà<(‡MÚÏŽ9€å»°΃rv¶° kà<(a`û»°΃rv¶° kà<(a`û»°΃rv¶° kà<(a`û»°΃rv¶° kà<(a`û»°΃rv¶° kà<(a`û<ì¾ýÎÞh§ÛýPoý8½$Ë õ;¡~m¹t«†Vïbø”½ÐÚ™õø¤í…Nÿõœç|šÝßÇe ú¡×i…ze²l-4Bçóúøuoä×Щï¤^÷zÛiõ†[çÛ‡…âv£ø6i?;æ�–Sð°;öº× Fánb.z¡V? 'S.†ÄÇWaõÒEèµ’ÐÃîƒVè‡ÅqpŒæüûónhVvÃWg¡Vk‡Ól†œ…îþn¨·¾ÒÄpO;¡Y­Ý"ìFq݇zç×äö•ìöX~û0O9‚Ç«Ðï}=<&+£÷;n;3±¢Ú¤ý\Žc`u% »Ñßá´ÝÎ/Ãh7ñ6Âî`˜u÷C%†Ü×'¡]û0´OÿN‹’`Ùì†óäžõX%ìF³¶ó?xŒÓj¥Ú'ë=R·‰° °}Jv‡ß§íP«wB?¹=VS7íÆa÷÷Ðmþ#ÔÚ'øƒï“ðpô÷‰ø:»óËnm:ìÎÛÑòÛ‡yŠ<âqZKŽãòv¶O©ÃîtpbXM׺&uºseÃî ±„ag?tÏ“ˆo?L—2Ä×|xËR…EÆëvõ^&uº×-¿}˜'nßÍ‘Þ÷ñþ#U~p?Õ[NRuâÃVÝÓtÏm ¹Õ«ÇÓmVIÎ\ñ—‚Ýá¿‹õàÏR¥ÃÛ?„þÔóÄžnh7kÉ2•Pm~zýWÉãw'®Ï¦Ø¤uØdÂîµ°û†žÝ)o »ã†©…ØÓ»—*eȆÝë!õÞÎmg|žÕzv…Ýåmäy08 퇟†öwOB­~ކ!vpÖ ûqŸ¾ gÃã£Öìd"þzŸ‡ÎY&XÆcá~êKÛ­Äc¿65øqÐ? ûÕtiÏ«Ðïþ+Ô›íЄî8xó°jN8[åå×`“öóFs�¨Üa7Ζ0·Œao»1lÔÒƒy&­’ú9xQ¨^&pÏ3vY~û0ÏFž£Ù@*¡º”é9:ï†ý½YáqÎqŸëF=¹3Äóaï0óÓÇøàìû°p<¼7+û%ñn¬c?Ÿžž†v»þøãäžÛÙÈc`•8ìŽ{¶¦ëg×vG5¯•½aS¥ ã:ÞZkÖü]†ÝYÛ‡y6ï<˜õ«ÂĤ¤ û%lҮϰ0÷ ÑMÄ€½Ÿ]Ÿô9×ëÉœ@[œ°ûã?†?þxô\_|ñÅ­Cï:Ö  Jv_…þñ—¡ÑXvê±y…Ýq ¨Ì ñƒ;†Ø?Ç7GSí…fçd:ð~ ÆwvçmæÙ¼ó õ9ûÿ¦_¢=×ò^÷ÂÙ/OS¥2 οQIÆ“Ë(V·Îý{xŸ>}:zÎÏ>ûltû&„]€å<ìŽÃh\Çé¶äE%æÖÊÆ°0cÐÎåOþÙÇç]h"Õƒ–Ô%V/»*õVèôú·èY¡!{Q‰Yƒín°}X(n·Í²¨'tQê,ëèUÇZóú¬#S¥2ñ¸­ÏxópÒ~ö6`¼·±ŸcÏnìáÏCï?ü<²Øæs�›©àaò±qçÁ”Åj{×zîãì ÏBóI¦Æw-½ª10ïf¾pK-î_þª”^Ô¿ ÇÉÌ ƒ~/tZP›Uw|Þæ~Ž¡·Óé„wß}7¼ÿþûo ½þïXް k°)çA,IÙ®K\Ÿé–96è‡Ã©é½¾ ß§~IÕœ_{žØ\öz–©_3&¿0¤UH×g¦C«ÔCëètº¼çÅuzÛþúë¯Qè7ßø÷x_VëPÂ.¬ó òÞϱwwz³ƒÙs�Ëva œåpWû9^‹õ¼ñõcèýí·ßs�Kv·Â¼d3Ú­.@Áªâ¶§øîz?ÇÐ;ÌÛMgp�(#aÖÀyP›²Ÿc9Ã$ð>zôhé�ÊHØ…5(×y0žCz¶·YSÞm¯øž6E\—É`¶É /^¼˜9˜  Ì„]XçA9lZ؈7=˜mÞ �e$ìÂ8ÊaSÃnZ ½±´!>¾Ê刊BØ…5p”Ã6„݉ì ³e%ìÂ8Êa›ÂîDœ¦l2ƒC ¿/_¾L(aÖÀyPÛv'b9ÃóçÏ—¾1@Q¬%ìjš¦iù·ÛÈÎà`0Ptº£` n<Ø.EÛÏÙ fŠÈ'4@ÉÅЛÌ&ôE"ì0glxúôé(ôÆ?Íà�° À”س›žÁÁ`6`› »�ÌCoz0›Ð l#a€…&38¸1°„]�––žÁ!ÎÛk0°é„]�n,{9âx¥6€M$ìpk1ô¦³™ÁØ4Â.�+KÏàðèÑ#ƒÙ€!ì°6ÙËÇÐk0p—„]�Ö.Ü/^˜Á¸sÂ.�oUìÝ¥ “Álfp�ò$ì‹ì ³yvÈUœ¦Ì @^„]�îÄd—#Þ&a€;•ÁÁ`6`„]�6FúrÄ1ô̬JØ`ãÄЛÌ&ô·%ì°±Ò38<}úôVƒÙâ|¿ÁAy »�l¼ôåˆcø½É`¶IX6�ÊIØ`kÄЛ½ñ›LÂnlÏŸ?OîÊBØ`ëLfpXærÄé°[ì!6Û”‡° ÀVKÏà{n³ƒÙ²a7¶xùbÊAØ ^¾|ylcïíÙÙÙèþlдŽãÕÜ€bv(”8óB »ï¼óNxï½÷fÝI{ðàÁ($Å%ìPH?ÿüsøä“Of†Ül3S—° @!Å�;+ØÎk±7(a€Â¹iдxá × X„]� åÛo¿d—mq¦—'†âv(ŒÛöèf›™ 8„]� #Ô/^„o¾ùf48-ο;+Ì.ÓâL ®Áöv(¼‚ãcñJkq Ú¬ MÌk1<ÛKØ ´â`´8/oìÁA8†àX³› ¼fj€í%ìÀ ±78á‚cË`MÓòi«v` ëøÐnFØ€œ»?a�r"ìBþ„]�ȉ° ùv 'Â.äOØ€œ»?a�r"ìBþ„]�ȉ° ùv 'Â.äOØ€œ»?a�rRö°;8m‡‡Ín8On¿uƒ“Ð~ø$tÏÉ7uz­êh¿U–Yï~'Ô‡ËÆåïÝ{šÝß“Ö/nËÚèuvCûôïä^fv '廃pÞÝ•z'ô“{ÞºónhVöB§ÿ:¹ã6^3ìG¡Ö>¾ƒeý:õÇ+¾î^÷Bëþþ a¾„]�ÈI¹Ãîßá´ýá CãjF½Ÿµv8]écïn=´zÉí%Äú zo9ë®çýŸ° �9)gØMzt‡ï=¾ÿé¶ê_“å¢ópztê•Ô2ÕýÐ9ÄÀ¼{ùØN«^O=ò|£ÝÔs¤ÛM{–'¥g'áhzǯS Õf'œ^ÌN™‹Ë5†ï±ÛÍj%Y§Zh‡~æ©ý^è\¾Þ°U›¡ÝÞË/ ã÷}?nƒ®w’åb˳÷| Äm²*a�–°ŽÝ­õÆúÙWá¬ó8Ô®…È?CïàóÐ9{5¾98 ÝýÝPoÿÆ}­ƒpqr굆n?Yf$ã½ÕëfcpÞùG¨V¡utš¼æ8”7ö:áìÚÛ‰!ôIx8«{´îÃujw/ßã ›»¡Ñùå2ÄÆ÷Óh´ÂwÝÉë½ ýã/‡_ÒuÀñýÕ“/ Ãõé< õ¼Ì„]�ÈI©Ãn üä>||fxŒ5³§{€/~ íúnØïþÎGÁðËp<t£ßC·¹·òà­Q©@¥Ú'Ù~ÚøüÍu¹óBv 󟇃ޟÉí”ô¶¹8­ú³Ð»Zcp=õ~âíC«Ó.¿š“$“%ì@NÊvÿ´?]žp½eˆb(¬VB¥~Nfõf®<C´hpÚ¼Ahsîë³w8;ì_†Ý½ÂY—¥ •\ë ·Q<†V%ìÀÖñ¡»Þ4£ÁM½ ýî¿BýÓOg”/$â4`ospÚ¼žêyƒÓâúÌ©¥½ú"°üvõ8WÂñÉw¡±óÑU™×»�“ò†ÝâvÔÏÆžÝ'K– ÂEï ÔF=ºCï?“¿O§Î×½V¸¿êœ¾±7¶V›>ÿ¾ŸÇÃû¯—$ŒBè¬P;/|Ç’ŒF3 « Âî zÿÔð¦§Ê#> ;Y% DÂ.�䤼a7þ´¿› ‡qF‚oC«þÁe°œuÂ^#Zã@°g¡ùä(™­`Ö`´ópÒÞ µÖq£qOrõò¾á¿;ýoøn$ÇqI±÷¶Z µÆA8Jf„˜ (» —¶¨ !ÖøÖBýà‡ä½¼ ýÞ¸Þv¿{–,ƒü³Ì@³dö†Z#÷“å2uÁƒ_B§QM r#MØ€œ”7ì&!õr:°û¡Þúwø¾7 ocã YK–‰Ó{}u¹Ì¨Çttÿ°U&Rˆ!z'Y~2Yb4ˆíþåc•z+|÷}ïÚ_³ÅÖÉ•Óþ/œô¾¾š*¬Ú ‡Së=½Ó-Sk|qšš¾,®ÓUˆ¾2žéáj[ÕB³ýŸÐKÂýÕv˜\9-û½dÙØV½ˆFñÄí²*a�–°Ž]àf„]�ȉ° ùv 'Â.äOØ€œ»?a�r"ìÞ¥7]¸"ݪ³§ÿb+Å}º*g.�,aºÀÍ»�aò'ì@N„]ÈŸ° �9v!Â.�äDØ…ü »�aò'ì@N„]ÈŸ° �9‰ºš¦åßV%ì�°‘„]��X@Ø� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� KØ� °„]�� *„ÿþž ÷ÿ¨b����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9h_TID.png����������������������������������������0000664�0000000�0000000�00000010530�15030617045�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ð���’���lXýÒ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��íIDATx^íݽ‹W¿p·ù¶J±UÀI“J•I³\¨X [¸0"ØÂâ17A`¾pÁ °.áá‚mO¸.ÂÃ"Hg›‚YH0f9w~zÙÕŽ´k_$Íç‡XÚÙÑѼd¿:úÍ™k ��˜›� ��%Ð��P‚� ��%Ð��P‚� ��%Ð��P‚� ��%Ð��P‚� ��%Ð��P‚� ��%Ð��PÂ{èk×®iš¦iWÔ�¸: h¨:çA5,Ó~vÌ\=à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<à<¨€<°çÁá^jß¼—ºoGO0I€ o}ô~'5²>F?óm£ñ ½ì¿-~IÆæ©åòm³ÕKïÞõRk³øçö“:û<õÚ7R³ûûðg§¼Mû½Nj5®–ÝHµæwéÿ:_¥ñº£¥æR¦³Þw£“öGKÍ¿«)¶ÅÊ{ÓMÍü±Á¤eÚÏkq̬¸õ Ð!åVêåsÁÁ©UßIí½|ø{—åÄ»©ÑùeôøØ»^kdO¬+–ßëÁRFïž ƒ`²•u¾Mõz;õO ðeá¹ûUª7§½ƒÜöR§YÏ­NïÓÇ!ysb;åͽ«gÂÌa¿=åødL€ ¯z:áæv'½>  ³ü¼›6"˜¼ÛKíú­Ôîÿ=úÙÈ „žãWç— 3§·cõ¬t˜|À;ýí 必Èî÷Ò³§­Ô/_ÛMSß@¼Iý—Ž–‰o)ž¿|”¶g} ³üâý,‹eê @UU2@j>ëwraòd€> ̓G#¥Ãéï©Ûü$ÕÛ{Y”Ž0}/ÝüûX¼Îõf7‹çä’ôéíX=«fþNýöÎìp;ØÏ7S³ÝMýÑ7%ƒQë|È>|º»[©Ñz>Z&J“¾KÍÚæèXm4�yÕ Ðé õZÔêŒÃf¼§q;žE&ÃiÝÛÜ=]ŽÇ7ó_“Ï±Ž…”XÿûèSÛ±zV?ÌĽÓߎœaðíÃч¿ø€ø´Óùy"(Ç1XüÍΪY¦ý¼úÇÀê Nþ¡/>á¬p:,ߨ<1º<T ÖqꂽÚáT€¾ +fΜ#F’ÿ™ÚÍz¶yŒcŸ=(8>btûîZ籟ÿúë¯ôÛo¿½¿•?æ�Ö@Eôd9CÙ‘²3Âéà+ïQÐÈ·_gÏ êg‡ø³\F€žQR+qÌû~ê„oÓëδQk¦v·Ÿ}\›ø0ÇÇgEëˆåškq|œÇ~îv»é£>JOž<„é÷µòÇÀ¨d€>|ÝIÛ§Ê)Î/@êC7råc“eñ¸þ õò3pŒ¬B€>½«gÕÃÌÌ:üÁètöéõÛÑ#“Çq×'÷7©ßÙMµYÇÕ 9¯ýÜï÷Ó§Ÿ~š>þøãôý÷ßž-G€¸z• Їûß§ÛwçžÆ®Ø¬p_[o¥ÂP#rQòðçèqLc÷ÔhvŽ.ÎŽü]_â�]¼«gµÃL#wR­õÃhtù0ôÿ•ž¶Ãco²¼ãp?õ:Ù8Nߦ^ëVj´®g4 ãF­–>™˜ÍcU÷~ît:ƒu~ùå—é×_=;àê­o€ŽP˜õ1ú™oóÝHeZíqÔüÖ&–ÍÚQH˜üù´›«äêGf+È•|ld!»ÓKûï5²{VÇŠÞwÁ²soÇjŠm±Ò~Lí£›øÄ~m¥§ÏÆÇ^¨÷O]wízj´ÚÇ7ýÉè…æãåž§½Þ£Ü…†«-Þ×yûã?:Ö]¦¬ã"ú@9ë á8¦Žn¯Ãvá"÷ó«W¯eÑâßgqÌ\=à<(¥ Ô¬ÔO¯¨‹ÞÏ1úœ/ëˆÑéis�WO€†8Âè®›Ù¶ˆí³ÍԚߥÞþz„çpYû9_Öº¨¬Ã1põhX€ó .{?G)GÌÔQTÖᘸzôRΤÛú̶&Ó…­šØö¬¿«ØÏ1úÆkçË:s�WO€†8ªá*÷sLs:F¤ÇuÒ�\-à<¨†eØÏqã•ÑÑ—¸! �WG€†8ªaYös”uD_¢Ý¿æl�\à<¨†eÚÏÑ—¾}ûöQY�—K€†8ªaÙôØ‹/!:´²€Ë#@Üհ¬:DYÇÇÏÇ‹æŽà|- 5MÓ´ËoEòe12 ÀÅ1| ˜fX/Ë´ŸÏꋲ€‹ç¯?Àš‰Ù9b–ŽÛÊ:�Ο� °¦b:n#Ò14�çC€Xs1Õ]„踣aÜÙ€ÅÐ�/ëxò䉲€Ð�¢¬`q4@ÅÄès”uÄht”u¸%8@94@EEpŽ�A:µ²€ùÐ�÷êÕ«AYG´ø7�³ Ð�(ë�(A€àHLs§¬`6€Sb†Ž˜©#Ê:Üà$€B1úsFÇhtÌ!­¬`H€`¦qYGŒHGY@Õ Ð�ÌEYÀ� ÀÜ¢¬ãáÇÊ:€J (-F oß¾=‘~ñâÅèY€j xož#DG˜VÖT…� ÀBòeñ_sGëN€à\Ät\`¨¬Xw4�ç*¦º—uÄx�ëF€àÜÅì1KG”uÄÍX”u�ëD€àÂäË:bi€u @páÆeqGÃ2eJ@€e$@p)¢¬#t™²Ž(‰™=�–‰� À¥zõêÕQYGü{–Xn¸–…� À¥‹Ñç(ëˆp£ÒE·eâç㦆X4�W&_Ö:_Ö æ´ , €+7.ëˆ6.눛±Lh!X4�K!FŸ£ÖùÃ?LŸþyúæ›o ô7ÌÎ\)€¥òÓO?¥/¾ø"}ðÁ…:š \%€¥%‹‚s¾Å,B4ph�–F”p…åi-j¦ç™Oà< Ð�\¹Á[[[…!ù¬vûöm!¸T4�W*¦²‹rŒ¢p<o¢Ë$@på"DÇôu_ýõÑÝ˶˜Oà2Ð�,Ô1ôýû÷KN?|øp´€‹#@°ô⮄q§Â(Õ( Îù&DM€`¥D­s”{DPžVî³y�\€•6­ÜÃ-¿‹"@°V¢Ü#F ç)÷Ð4­ºm4�kkÑ?’Àz ` ("@À4PD€€)h ˆ� �SÐ@�¦ "4�L!@Eh�˜B€ŠÐ�0…�  ` šj8Loº»icc7uߎžc�¦ §ù;õÛ[ÙöÙHõö^¿VQ¼‡Ôìþ>z¼Jλï£ýYo§¾ü<�¦ g‰QËÿH»+@Ãï©Û¬¥Fç—ÑãU²Ê}_4�L!@Ïrz­»©Ýÿ{ôxÅî¥výÖjö•û¾&h�˜¢Êúp¿—:­FÚȶAl‡kµfj·wÓöQÉÆ/©³ýUê¾þwê4ë£evS§ÿfðÓ#‡û©÷ì¿S«q}¸Ìµzjvö²ø=ö.íwvF?«¥Vï´ßû.5kÙãëi»óóq‰È™ëšÝ÷½½1úýɶ“:ûïÆkIýç¹×ж@ßçò6÷ûã×ÌÚf+õÝš·ïÙ¾ilŸß}›m·ÇÍT‹ÇwRçõÛábïz©µ9þý§KBA=ëËF#µ~°ŽFzðÃþÄ{{“ú/¤ÆÆp™Æƒôü壴=x\°îïq4�kkÑ?’«) Ž{Óöv+=íöGa1 v?ügŽrAèM757?Iµ[÷F¡9[¦ûUª¨£ÚÚ[©Öl§î8XBYâŽÂÞH<ó‹Ô~z/Õ³ðõ2[þðu'm_‡ÇyÖ5gß3‡ývºÙìf±¯Øàµë“²õ÷þ+íNã3û>X÷ƒ£ßmÓF'íž gõ}l°ÜÒÓÝ­Ôh=Oýƒ¿ÓëÎt½ÕË¢^îFñˆö`?gúen{NîçÃש{ôñd¶ÌàƒÀæ ×ÈÏ&@À• Ð?¤VãÛÔ¡¼“!+ÂY½öUêîF3CŒhÞ8#4Âæ½Ó³=ìwRãÚFªí¾Lûó&®ÉuÍÙ÷ì³\x/Ýœî~ÏažÇ#µyÑω@û^}?eøáìÀyVßÇÆ£ãõ´Û}={ÙØo׋gà8ì?N;“¯ub?Gþ‘vN¶Çëß]Û:m�¦¨^€.Î ÂÑD¸ŒRŠgíÜWÿã6@¯»›6gŸ¹®yûfÏb1øp0ù:ùv¢ÿg÷}^‡û?¤Çƒr˜zj¶Ÿ¦NçÙñhû‘Ù}?å7ç*¼ßSû$Ä{+¸P4¿ŸãCÌg >4E?ï¦Vo²Àf=Äq°€µµèÉÕ6æ=Å˽ëµÒQyÀ „a#‚`wôµ~˜r#l5¦ŽVη®yûf”,dòïãl³ûþþÆe“ Îîû‘Så-Ó ?�œ.ëÅŠžØ>1ýYÑôwà›s¼þj ` :'.àûר¶° #?2ÿÞ.¸ˆ.BÕNAø›ö|˜w]sö=Ì(Y…e SÍêû¢â=mE>£ïG¢vùæ<ó:ç÷Û¤,¬Ç…¢'^kâÛ‡Âþ¼IýÎnª]ü¸~h�˜¢z:.dû65šÜHo†ºíÔ¬oϼPÎòAr2”Åhjg8£EÑÝîf†Ây×5gßC” Ô×JôS÷i+5Æýþœ:;wS{/_>‘­?fåh¶N×}ÏhgŠmWOöÇ!?ú³ZÔsý gõ}$F‰¯ÏUV2ã@ìçSBÆò[¹*f!ÿÖqßö³²lÔj铲õ @ÀÕ ÐáätdÃzÜ¦Þ 4æ§mËÚx„qpÝxù˜Î-‹R?¦vn ¸F+ýOk<µÜp™y›G¿—ow8œc]C³úž÷&íµ·§¹‹iÚžþïÉåbÔz<õ[´˜ ïYïè"Á¹û>á7³zbúºÉ’•±Y}ëZnù¶u’Oì¯ÉËïçAùÈhz¼ü´y£Ð<|þú`6Ž½Þ£¹f YUñ^!@°¶ý# Õ´î¬ívA€€)h(+J]:©Y¿[< àš ` Î2œÅ㨤$æÃn~WP6³^h�˜B€ŠÐ�0…�My1kÈÖàØ9»å/€d•Äþ[„ÿ³�°¶ý# ¬'�¦ "4�L!@Eh�˜B€ŠÐ�0…�  ` ("@À4PD€€)h ˆ� �⤦iÚ´¶��J � ��J � ��J � ��J � ��J � ��J � ��J � ��J � ��J � ��J � ��J �`n)ý?? x·Ûor–����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9i_TD.png�����������������������������������������0000664�0000000�0000000�00000010014�15030617045�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ç������[ª× ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��¡IDATx^íÝ¿k#çºðý7\;¥»%M*5Q³EÒl“B…Yâb KDàbá7$ 0„=U@à\XÃ-vÁ¤ \ _ØÂ¨ ‰QÂb Ë"Þ«g<²eydËúaËšÏ^bI“Ñü\}õê™w$�� #�@N8�€œp ��9á��rÂ1��ä„c��È Ç��Ž� '�@N8�€ÜÔáøÁ¹�€Õ2S8Ö4MÓn¿°8zŽaJÎòX¦}í¸X,á¦ä(á <„c˜’s <„c€òŽaJÎòŽÊC8†)9ÊC8(á¦ä(á <„c˜’s <„c€òŽaJÎòŽÊC8†)9ÊC8(á¦ä(á <„c˜’s <„c€òXÑpü[jÕÖ³e¼ÐÖj©ñº“Nò©RzŸº­­ËÓ ·õFj¿?IíF¥øõ¬­§Zë·|ž—ß{­¾—ŽóWGõºíÔjÔÒÚ`úJ=íþo+}ó0Þ7ŸhBïÛ´>ô¾—Z­•ºÙ”“n®Ûl%ôSóÑó´wÜËŸ`Ô2íë•9î�–ÔŠ†ã¶öÚÃQïmÿ¹ÏR­ùæb�ì¶Rí,8yßN,¤ŽÌ+¦ÏBs<ˆ€ýl(ü‘öê¥ê÷ÿNßW?KÍÎßùóçzÝ×i»º•š‡ÃÑù8uZÛ©r6ÿÉE8~Øh÷—(D�~tq™/¬ã ¶…V&¤ï¥úÚVjuoxÀ•ˆp P% Ç}Y/Ù³Ô:z—?Ñ·ˆpœŽÇýPü6ušŸ¥jó0]ì—‹ ZKõ½?òdz›=÷m ­JHéuš©Zm¦ŽŽã±„c€ò(_8N÷Ãjíb˜Žg8{%wÓpÜëgãí´6”„xŸí¹þ”=—p\´}(tïCJön¤´fÐF¾,FùÏO/©6˜¾²Z‘b¡“NzÝ?¦NK„6R­ñSzÝÜ:}¼6ßcý¶Å:/‹eZ€UTÂp<"û"8fèy»®¤áB8.%†z…ãñÖÅÒŠkç1«‘p|É ¶…V#¤Ä—¡­«Áˆ_ªýã¹¹—:'§7ëm Ч%B›ç5ë½njïÖSåAüzr¹¤è¾Y¦}½ÇÀòŽÃp¯jaÏñˆë‚môÈ­÷”EOòóôh¸´âÒ<._$·>S@Žm5BJÁ· D8~tv¡iÛÛ¥8q >[‰ZæeÚ׫qÜ,¯†ã‚2ˆáp<‰+ÃqôÄ=ζϥ6\×yUŸ$ _kÚp<îCFÅ>½÷®©â]ê¶ÿ“šõêÈñ|>BKåO‹¾Lż?Ý™ñ8^óØ×?þøcúý÷ßóGÓ[‰ã`‰•/÷~M­ÍÍË%ó ÇÙOÐüL=ÚCcùÞæ‡Üe8.Ú>Z‰ÇòØ‹ñÞ¥£ÖÓ´V©§æÞðå÷íôé¥ Nûâ”ÍœWKlûúë¯¿ÎæóÃ?¤¿þú+öæ„c€Å*W8îuÓþÎÓ´9éPnã\޳ZÌ‹NK+ªý³÷Îê4kÏ/]ØÔ;j¥Í;Çã¶…V!¤D ÍÆ¸q¸Ç\2riá<NS«^±4hyÌk_¤O>ù$}øá‡é—_~ÉŸ½á`±V4G0œþ& ã>Ð#\¾ÉÆùø°_¿âÆ .dÚO»~²Ž«ü[©Ýr(µèu^ÌkІ—%Lº}¸Jl³û-Žÿ§©rö…­—N:?§—ý/MqŒ–\ÄEv­Ó+.ÜØæd?5ÎÆëŽy´R½²‘*•ÊÊ”çÌs_G¯q«ÕÊæùÕW_¥?ÿü3e2÷ÿ¸Xn+ŽañVâ8y“šµl]¢­ÕéåOíÔÍòp?èîžß–}qk¦Æ`ú³_OxíôùìKÖÿ¥öu£`Ü#±^ó¡8ÂqÌ;Âò¤¥‹X�Î Ç0%çÀUâ׉ÚÊÔ®/r_J-¢Åß×qÜ,–p SrŒsz ôêf+]ºJï~Zô¾Ž^ã¸P/ÞçºR ÇÀb Ç0%çÀ@Œ^ñ0Û§­šê»ûyiÆj¸­}C½E8Ž ö¢Ô¢ˆã`±„ã¥6æÂ¹‚¶*£Ü'±Ý)‡ÛÞ×1’Eä(µèt:ù³§w�‹%Ôœåqûz¸Ô"ÆH”Z8î�K8†)9Êã.÷uô?yò$ëI~õê•ã`Á„c˜’s <–a_G0Ž€Ë2ZjÀüÇ0%ç@y,˾ŽR‹X–h/^¼˜xld�&'Ôœå±Lû:–%zŽ·¡Že�æG8†)9ÊcÙÂñ@ ÷9j’c8�f'Ôœ屬á8Ä(1šE<£[(µ�˜ÍTÿâÇ?š¦iÚÝ´"Ã¥1N2�ÓÑõSRX=Ë´¯¯[–(µˆiâN{J-�nΧ;ÀЉR‹Ç’#,+µ�˜œp °¢²R‹hñ7�׎VXô—Z nC @1á ¢þx¸Ô€bÂ1@‰ÄH1¢E”Z¸ 5ÀeÂ1@ÉD©EŒ‰½È1F²R €sÂ1@I J-¢'Y©À)á ä^½z¥Ô '•Z¼xñ"+µˆÿ(+á€3ÑsüäÉ“¬'9z”ÊF8à’A©Ee¥@™Ç�ŠQ,b4‹(µˆÑ-”Z�e p¥è9Ž‹õ¢'9ÆIXeÂ1�‰áÞ" Çðo1 À*Ž˜X”Z nC­ÔXEÂ1�7vpp•ZD‹¿V…p ÀT¢×8J-¢9z“orjXVÂ1�3.µˆ°<I©EL7X6Â1�s½ÁƒÛP_×3A:š€ ,္‰^ã¸P/‚oŒ‘\Tj#] Âq4ÃÃËD8`î"�GéDô$G©Å°ÃÃáX@–‰p ÀÂDè”Z nC=èYe$°PQjµÅ|ðAúòË/Ó_|QŽ£¹¹pׄc�nÅ›7oÒçŸ^ŠíáÇ2p§„c�nÅ`LäëZ”aÈÀ]ŽX¨(«ˆ‘+Š‚ð¸y’ñ’æM8`a¢øã?. À×µ'OžÈÀ­ŽXˆ"z€‹‚ï¤M@n›p ÀÂÄM@bˆ¶o¿ý6έ(�_×" Üá€[e¯^½ºq ²ÛL·E8àÎDéEÜ$z‡‹BñpÛ °¢¶øàà ÁãJ0d`Ñ„c�–RÔ+J0†/ìs›i`‘„c�î…A ÆpO²¦iÚh›•p À½2?`5 Ç�”Žp Œ#P:Â10Žp @éÇÀ8Â1�¥#ãÇ�”Žp Œ#P:Â10Žp @éÇÀ8Â1�¥#ãÇ�”Žp Œ#P:eǽN3=ªï¥ãüñÂõSóÑó´wÜËŸ¸©“ÔnT²ý¶6Érw[©ÖŸ6¦ðàaªïý‘¿0±-«Ùû<NÍÎßù³ÜgÂ1�¥SîpÜKÇ{Ûi­ÖJÝü™…;ÞKõµ­Ôê¾ÏŸ˜Æû~æ}šªÍÃþLê·Ôª=›ñ}'ð¾Û3„–‰p @é”;ÿ:ÍÏn2g“õ®V›©3ÓFïq-5Ú'ùã Dh}ØHígãù¬ËB8 tÊŽóãþºÇú_lë©Öú-Ÿ.§ÎëT[š¦²ZAACìÇg¯­7Úéý…ùçóËzŒ‡æ1ÜnÚs=(Í8:L¯û!ùô}ÖR¥ÞJ“âTzuùH÷š©^YË—©šê»û©;2«^·Zgï×o•zj6·ÓæÙ—‹ÓõÞˆma|=Ÿ.ÚmöÎ37±ïf%p¯ÌãÃïÞº¶þ÷]:j=KÕK¡ómjï|“ZGïNöŽÒÞöãTk¾I§}¹½tr¸›jÕ¦½n>M&‚ôÖìu¿´×?J•Êfj¼îäïyâ7·ZéèÒêDh}žõgËÞ_¦æÞÙ:öºûi·þ8m¶~= ½±>››ôroð~ïRwÿ_ý/ Ãu̱~µüËEyZÏSíŠÀÎòŽ(R‡ã™®(迾]6£æ÷ÙÅæ“7©Y{œ¶÷~KÇYüWÚ¿ŒÃi¯¾5óÅjYéÂÚfjŽöÇüëuÅãBy„ÿoÒNûmþxÈð¶9ÙOÚw©})äFsmh}âñg©Ñjõ§œê­Ã<Hs_ Ç�”N™ÃñÕ¥Ë%.·Ñò‹¾‘•µ´VÛM‡E½¥3T®ºoÜEwcžåÙÚ-þrpޝèuuVJ±v«uÜ,N볎¸Wæñáw?]7âÃM/z{—º{ÿ•jÿøGA9E.†U[äÅxãzÂÇ]ŒË3¦øü‹ÃäÛ!ëÑ®ì¤ý×isýéyÙ ÷–p @é”7Gè{|Eýoô?Ÿ°¢—NÚ;©šõÿÝÉÿÌÿ¾˜Rß·icÖ1•£··Z-«oûëó¬ÿüå‰,´…àqa=JD6ëy¸½"÷º©ýó yèb¼¬\ãiZß,*Iá>Ž(ò†ã(5x<&cƧFíÓ³ Ø;j¥­ÍѾ}—êÏ_ç£9]|wœ›[©ÚØÏƒc8í©®œ=×ÿÿ:?§—ýày('½Ã•Jªnî¤×ùˆƒ èÎ/vUYDÔ(WSmç—|]Þ¥nû´^x{ï(Ÿ>‚ÿw#Öå£[T7ÓÎ~7Ÿn¤®¹÷kjmV†.êã>Ž(ò†ã<Ôž ¯¶‘jÓOíAØ;u<«ù41\Ú÷gÓd=²Ùóý¶6¸ñE„îõ|úÁÐn¹ì¢½³×Öjôò§ö¥!ÓŠEîàÎxÿ“Ûÿ}>ôZ¥žv/,÷Åe¸ØFj¥O:CÃÁÅ2‡îs§#aœo«jª7ÿ“Úù—óí0¸3^|ØÊ§6ëMO¸+±ÿf%p¯ÌãÃXMÂ1�¥#ãÇ�”Žp Œ#P:Â10Žp @éÇwéº ·Jñpj°@qìÍÊ¿0�Ü+óøðV“p @éÇÀ8Â1�¥#ãÇ�”Žp Œ#P:Â10Žp @éÇÀ8Â1�¥#ãÇ�”Žp Œ#P:ñá§iš6®ÍJ8�€œp ��9á��rÂ1��ä„c��È Ç��Ž� '�@N8�€œp ��9á��rÂ1��ä„c��È Ç��Ž� '�@N8�€œp ��9á��rÂ1��ä„c��È Ç��Ž� '�@&¥ÿ„[ƒ<,[����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9j_DIL.png����������������������������������������0000664�0000000�0000000�00000012570�15030617045�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��›���ž���}ÀÁþ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� IDATx^íÝ¿k#wÇñý7ÔÔº &ÍUªÔ¸È6n¶P!B\laD Â° )†ÀÁ‚ÀIu° ,‰A\³p9HaԅĨ !C–ňçæÍH£ù=ÚùñÕÌû_ÿÒŽFÏ<óÑw~è‰����%!l�� 4„M���”†° ��€Ò6��PÂ&���JCØ��@i›���( a���¥!l�� 4„M���”†° ��€Ò6��PšÂÃæ“'O ƒQÓ��Ó”6¶c;h“^gj€©›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �é›@ ØÚ° �éZ6ei9˸;Žd0ùA+÷÷lKK¡ßóžLæöCÎeÒú¹7ÎÄZ>Æ<汌f¿¯òN–sK&ƒ#÷w;Ò}/ÿµ^Èñdn?“<~kÐõý»îè dr½ûYøÄü®Ž%KçwbÖcw"ó| ÖXº>Ð|&½ÎÔ�Sµ,l®=Î'À¶’‡ù¥ôWrëœNð:߆Å™Oì æ…Íc/d­CXwóØ1?“QçT^Z_K¿?•…ÿŸtØAsö"¼<·bú¾ÇÏ÷ÌÚß{&ƒéÏÀéÒpœ u]v7!ž¶ìøW˹²kRŸïf´¨LzÛRs�asã­,¦CZ¿ØÑÓSFØ\ÙYs, ™·2í?“éâ­û3×ÃLú2»¥Ð÷6m+{Nìe¼{ç~ǰ¹·VìøµN{ÇñoVZ€° �é›>«ÅTú;ÁÉcÂZî°ù»ÌF“þôÖŽ</äÄùÿ-]¾£ÑLîݯ‹³üNÈÈÀúÕýÚ‡°¹·6ìø×>rf¾=›�ްé·•†Eÿù‹îyš±‚a3‚B³–úõ‰‡á1ö6ÖasofmëšÚÖð²œ/£^ÇþúÈ7›/‹ëKt¼z·Go,Öb÷móš{?ß§áYúXú&çÔþ=_úkwYô1ì¯/ßÈr'À®äa1“éæpýúüåù2b6¾bº<E(âqŠZ�(ZáÝé^¾°™2³¹#-(®¡wwf-u¦óÌ·“ŽxŒÐ…Ei¡7 a³JFnÎ)ŸÉôÕ…ô—rm‡ÈÕ%Ã#}ßÉu.ý‘µ{¡œž×{ùUÄiZO§ ¸e¡µßß¹8oµ¼–qÏj‰ž¿üwŒ¦2óBïj)ó«‘ô‡–Üí„Òêõ:ñ8FÖ�Ø ïN‡ÐðÃUìaô,R¦îìûÞ ŽtÜÃêk±ËgKúY²¸°©Ë|^ìaôPho#·çMKGzãëÀÌ¡í~&㳨ðWºm rÌdFÐíáì*p~·NWw¯e|yc7(ø&­E½ÎE<Ž‘5�¶Â»Ó!4¼èÀ¶žÙÙ=²Ø°éœÚñB÷¥ë×ýK™ïÌ0­6W¿ˆ5Fï´ ›{3o;ˆšU÷x‡´ƒo‚¼Ñ ‡Í"^c ¸ãàòø·9]®‹˜@IØ *jY� h…w§ChxáÀöN–7ßÊp˜õÖGq’Âæz‡Þ‰ÜÙëŽSƒàŸî×Þ¡Ãà!M ÄÏ娨°¹ZÊÍås}ë#¦ÛAÂ…`qoD„/¦Ëïq~)OÇíÖNÂöçœPôò#l@ºÂ»“Ù ouwGÆ›ºÇ/ÝY÷vWÇfgüyÜÞý3HzSwï"÷çzvk>šJwÚÜÔÝ?RBjÓé:0KÒL`Ò b”è»(ä£54 Ÿó©Ûæδ£ÕßËíô\ÎvnSV¢^ç"Ǽš€µÂ» 0p;ÐãˆS8\z¡ÐYhf_¯NÿZFÁs<5œžpqÐi`6u}¨;sïú|+7î•ç«å\¬ÉPúQçÖ€° �é ïN4<ÀœíÀ9ÍÁ^]žÝ±{QšÚý4 ½½ÐKy=_n'ö·'1§‡ÄØ™Í÷î¬àŸ-÷ÏðnÇ9_]¦"ñ8E- �­ðîDÃØÚ‚° �é ïN4<€í -›�®ðîDëB† t¼Ñò uê¢ëÍWÔë\ÄãPs�LUxw¢álmAØ€t…w'жí`}Y}ÎécŸZ5—>§"ñ8E- �­ðîDÃØÚ‚° �é ïN4<€í -›�®ðîDÃØÚ‚° �é ïN4<€í -›�®ðîDÃØÚ‚° �é ïNÚð ƒQý��Ñ€°ãGÔ €&£Ã@Í›�šŒ�5#lh2:�ÔŒ°  Éèp�P3Â&€&£Ã@Í›�šŒ�5#lh2:�ÔŒ°  Éèp�P3Â&€&£Ã@Í›�šŒ�5#lh2:�ÔŒ°  Éèp�P3Â&€&£Ã@Í›�šŒ�5#lh2:�ÔŒ°  Éèp�P3Â&€&£Ã@Í›�šŒ�5#lh2:�ÔŒ°  Éèp�P3Â&€&£Ã@Í›�šŒ�5#lh2:Œ÷ÇÈ_|!Ÿþ9ƒÑÈAØÐdt8í§Ÿ~’>úH>ýôS±,‹Áhä lh2:Œåí„õ¿��à06aœ¿þúË9´¨3š:³ ��aFùí·ßäã?–O>ùÄ9W��6Â&ŒñæÍg6ó›o¾qf7�Àá#lÂ0õüÌüÑý��hÂ&j¥3˜zÈ\g4õ:��hÂ&j³X,œ©qØ�€f"l¢z¸\›÷Ýwîw��@6Q)ÁÔó3uFS/��ÍFØDeôœL=?Sçg�ЄMTÂûØÉ/¿ü’ó3�hÂ&J§çeò±“��´a¥ÑLïc'õÊs��Ð>„Mä¢2Ëù–|ì$��P„M䢇ÄÓnW¤W™ëas>v��6‘™ ש3–q¼ä¶F��@6‘‰ÎP~øá‡NÔ<”®‡Êõ¹Qnk��<„Md¢·,ò‚¦ÿ¡t>v��Ä!l"•÷Ñ’þáJ¿ºº …O���a‰ôx0hzc4É|àܰ�� a±ô¸ž‡4ut»]¹»»s�� Œ°‰XÞ•åIãøø˜O��±›ˆ¤‡Æ£ÂeÜÐP>%��6¢·1Ò˨P™6¸‘;��ð#l"$é<ͤ¡§7s'l��a;ôü˨ 7ôþš:›ÉÜ�@Â&6¼£Ì2˜Å��Y6áÐШ³”QÁÒz'³˜�� Â&Á£ôý´ ý!f1�@^„MD~¥ÅävF��à}6[.øq”Ìb�€"6[L¥†Kf1�@Y›-¦!Sou¤7q²ÒºLA=æc+m1mÒ ƒÁ`0Ú9ªBØl±* ÍAÝÀ$Ô#_ÕÛ [i‹Ñ¤±ê&¡ü›¨ Mû n`êȰ‰ÊФ±ê&¡ü›¨ Mû n`êȰ‰ÊФ±ê&¡ü›¨ Mû n`êȰ‰ÊФ±ê&¡ü›¨ Mû n`êȰ‰Ê´³I?ÊÒ:“'ý©,Vî·K{ê†Z9„M”ïw™Ž¥3šÉ½ûCGØDe»I?È|ÒsžC¾P@ÓXÝÊôäBf÷íL ‡W75ÖJáÞÉrþ½Œzçù¬GWÖ¯îÏÛÇÈzÔÑ××èT¦‹·î7Ì!÷¹¢—Ýy=»ÒŸÞJSº~ÕÛ a³ÅŒlÒ¹èÌÓóêÀýLF3±–î7Úå0릦Z)ÔJæ—Òë ezÛ”ù•÷gn=ÚoVÆ_î›ÒCîs-ïÑY6Q™Ã›:c5ÉüÁýº«ÅTú->´z˜uSO­KŸC¿Q³+E0¶ç2yz¸}âû\Û{t„MTÆøÐð°Ùt$={9uYŸôFr5_nw´Þ¡’»[¹¶ƒDÇù½ŽôF–,ÜßrÞáz‡·c¯C£1åŒ%K÷×Ôj9—ׯ&2ð~¿7køíç·]î#L^Ëõôlýugl쌈>³¬ìU9“é¨ï¾ZßË|ùÎý¹­êZ‘_Åt×ÑÈüÝRæWn-wž‹uç-Û½,®/·u¢#T+ÛÓ�B#ÏÕ9رÿ};t¿ômWö×—7¾íÊ‘aB—¯r+ûõ´|Û÷“¾Œ¦ÿÑðjûz,-Ž®åna¹§=êÍ•Þ+²Ö’žbñoyWßž´eÏÜç²ÔnÖeÏH—Ýû{ßèNæâÌaf]vûµ¸ß׿}·¼‘+·Ö;CKîÜUö8ŸH×ûû¨žœg›2¬ßërV‰°ÙbU[«åµŒc™Îö®V¹çªõÏ· JK÷oÒë eríýÞº϶ c×[YLŸ½Çìþý™Œf¿»_GpЉÝÀg›Fï¼Óö5;çùõ}˽i¢æŸãeVÝØu1û» FS™y;9w]ö};zjeýºŸ|öR^OíËv=¼•;ë¹9;ÇwöÿŸK?þ”ùåWá±Î”½çNÉYöŽq³tý½ÞNh͸N Qy=>ü,Óás™¼úÏvû^¾‘ËÁ‘ïÉÊ^ÕcéöúòÌ{}Ww2ŸìÖS†^áI®%÷ïì7äÛž©õ;Ø=Ÿ7Ó²«´>—¯vÓ–=û±'ÏÜ¿wÿMg> œ³œ¡G;Ö¿÷ÙôjÛ‹W¿ˆ5|>¢á4î]†mÊÄ~OØDeŒ ›ºÁÿ!ó&¦´_ȉ۬æyþš^Ø1Š9_Gf7÷ÔFGÿþ,wƒpší¦™ë¹\ãˆwõ: `‡iÃÏ32©nVw¯e|yã6y¿ÝשžZq¯fÒ—ñì.XíÔ82èê߇/úIÚáe´Z\ÉY0<kˆ=žÈÜ]Yש)ª­G <çvùÓýÚ<'xýF¥7¾–¥oeëLÙqJÀÚíž”ZŠ ]Y—]¥¼Ö¹jwŸeàógê/kº³®½2K™±××í(æGú6e/ýž°‰Ê˜6#7^‡?lF5HOÂFì4¬çûoàú÷‰W9ê ì¿|‡½±½bXw&O£v8úØO/7;}S™S7º3½ˆÙ©øw85ÕŠ³ qaU—ý4P#þ¾Â<KPI¦ÛÏWö?°<b73iYש9t}UFg±N²þ¨º ±ô^±•TK6){ý2p—¾‹d2/»-±Ïå­Ý”eÏL×—{'Áµ,±¬í íFjv93’YŽèó Ìo¤oS¦ö{}­ªDØl±ª‹-›¨wÆÝè½wê |$5UýÙÑv'·ÄÙ%=´ô\:;‡²ÔîNúq~)O£‚.Û0|øÌ4æÔMJPÜìpjª•İš÷‚¥¤^Vúož‡ÂânˆÍºNÍQe=füÙâ5ÿkž­Wl$Õ’sè÷XzþÓT ¶s½YIìs9k7q;xÞ¡èàrf<àíˆ8]!L_“Ә盾M™Úï ›¨Œ¹a3jj%·WÛóëœÖh�q‡ŠÖ²7˜hÚD⧬wÆöŽ:x¸$¢é‡ãáV¬Q{¢»ÁÌ ›ƒˆ™¶{¹žË™õ˺†jª•Ä ›8ƒ%&„äb¯¯á‹@X ¾¹Ë¸N bFØÔY·ÿnσ´k't(ÜénXÏØ+6jÉù·BçÒîžr¤².»Jìsyk7q;xOç1'/»'¼~bù_·ômÊÔ~OØDeÌ ›6mN]ßÕ|úV¯žìûέÑßéõ¤?¼”k÷Ýüʹ¢ðTÓŸ}3~Ú`Æ9OJ÷[áÞÄ;ŸM¯Øýsõ§ó˜Á¦ä-w'pEóÃLúvppÎÔÇЫU¤g?Ÿ÷›¹ª†9u³~=»ƒo寭 ½²×š ¥ï?W®–ZIßé­î,9^ÉíÎa@½hék]ìžë—¼ÃËH×Ch¦68k“q¤ÒzÔmwpá»âÚ»jß®¥Ë7îú‰ 2þЕµW¸’j)lׯ—^õ|¼{è:Ó²«”>§ßÉQ»ÙÂ_ gŸ8çÚ¹ºÛ®ËÍrªôe_ÓÉÓl‡öý¯[P–mÊÐ~OØDeŒ ›ÎùƒÝœe\ß&»Q›„÷i0ÿ–[ÿ§©oâ? ¿'½šs³\ö2 &òêõ|³“ÑÙ×í­@t¹§Ûç¡·þpš’×pÜåÖÛf\ÿOæï»lÑe6Gàö+κôKÖQ+Û3<ÂWž®C¯ÿöB/åµo¹œÙÕÐãè‰DºÖ 4Ü¿ÝÔ¡Îbº·¥ñŸÛ—¸NÍ£ËX`o ¾fþuêÝ’'jýgéYkIg‡î-u졯×?··6ÚΞ¥-»ObŸ[K®Ý|ÛA=}2x¶{Ë£Ð)®¤eיЮï1ücsè=ðz‡ó{y¶)3û½.K•›-Vu±Õ¯ˆC‘e‰;|ižvÔɵ¿öõ1¾úû=a•iU“vO&7ñ>ÎL’56tÙÂ_7F× ‚›8,fô{Â&*Óì&­3SÇÎs\ÿ¡øº—­/£«›CT&k^ݘ\+HÓ¼zD³˜Ùï«ÞnØJ[Œ&}P70 õäGØDeÚÛ¤õ⤛ûG/â–9í¦ë¥= ­½šY?“9r9csñB3ésÄ¡v ë·Jl¥-Vu±¡¨˜„zò#l¢24i샺I¨G ?Â&*C“Æ>¨˜„zò#l¢24i샺I¨G ?Â&*C“Æ>¨˜„zò#l¢24i샺I¨G ?Â&*C“Æ>¨˜„zò#l¢Zh ƒÁ`0Ú9ªDØKÕM �pØØk��� 4„M���”†° ��€Ò6��PÂ&���JCØ��@i›���( a���¥!l�� 4„M���”†° ��€Ò6��PÂ&���JCØ��@i›���(‰Èÿ’¥^u¯•����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9k_DIA.png����������������������������������������0000664�0000000�0000000�00000012406�15030617045�0023231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ÿ���œ���9ãÀ���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��›IDATx^íÝ¿k#×»Çñü"¥!Ep–4©TM³Ånãf "àb!†À TR$| $Xx_,†K`c—\.qs!…Q£fYcHXŒx¾óŒf4?4£ciÎÍû‡D²,¤3>sæœÙ���( á���¥!|�� 4„O���”†ð ��€Ò>��PÂ'���JCø��@iŸ���( á���¥!|�� 4ÆÂç{öƒzàs€ˆÑðI£Ñh43 �L1>ºc?¨›>gú�ÓŸ€Aìõ@ø€á0ˆý Ÿ�!|±Ôá�"„OÀ öƒz |@„ð Ä~P„O�ˆ>ƒØêð �Â'`ûA=> Bø b?¨Â'�DŸ€Aìõ@ø€á0ˆý Ÿ�!|fº“‰{ìoc²J«÷JÆ·Óàqž‰+­…ÇÅ[Sz£[ï)GÒ;ÈúyØŽÅÜå<çé ßÌ~¶à½LF®ôZ‡ÁcÒìü(ÿë~%z#ï•lâOq[±¿´FKzcñ^ELÎcµµ\™Êz\£3”›à§u§ïöŸMŸ3}€i„Ï%îF½T€›Êí¨/NëL®âÔX'Qxœ»•QÏ naø|Г‘ÿY¸=˜?wÎïß ¥Ó8’çî·â8Çÿ¤Ï žÃ¯·çöJÜŽ{þMĶyîwßi ~OЀ†åƒðµåy#ÃÎgâ<ÿIž;Od0þ'¸¿ÞꦓK9óú¤¾ÞyK¤ì7›>çºô9�ö"|.±>Õ?2´¥íþáEÑÐ.ÂçÔËž]ihè¼»’AV`»½”žs*Û…TzYáÓ3õ¶á¡·×ïƒ;bÖ ŸAŒßyïßqW±÷¯¾j´Ÿ6ä¼Ô�á�"„Ï%²Ã§—ÃÆqN-‡á1'¼m>ƒ‘B?¤i=•‡©À¦Ûw¸õSØ9Ûï‡î–´Ü?ƒÛ1+Ãg,Hë Ð ú0k$·~ê´ŸdŽÜ×á�"„Ï%òÂg2H* ñyÁ<Ï\éð™AÚA7Õ\lk<G!yásÉû±2|j~›·ª·9õî±k?˜õ©¨¿•ÉèGé4ÞíÃØhÿTnǯbóŒµ9Òq¯#›~èœÿ<Þt|ÝÏ^z޼ßÑùÖßÛ¢ÏáÝî¿–I"Ðêv e0?½?›ÿ<šdŒÖ—L·Ç6m €z"|.±Yø\1ò™°*8ÎF £šéÀ–ñ •V…à,;Ÿé í¿¾Å‘Ü:²r?ð§X|)ƒ—§â´úr1¾‘éµ+íÃÙgìÿ¿Ó×»?¢ó¡nb:ŠÒþt´dÁÜ:´ï;‰Å~ÓÉ…t›ñ©(:ÿùkiu2 ·k:‘ÑYGœ¶+׆;Ú.>ç¢ÏieŸP+ƪP àÒ°•{Ú}+§~ù;áO¼5s%s·Ï³ìgËå…OÝæ“§ÝÑ«ôkñZÍOÅ*}¬ãÄ4¤Ù½H,*/v½à™7÷wa‘î­ûrëþp|–ê+É~:½>—nÿÒ»7ÍŽQö]|ÎEŸÓÊ> VŒU¡*Àì�÷^®½–µÛnøôç”6â#…ô©w½íôe”Xy?³õð9ýCÜv;ûK|Yøôƒôg#_œzWöíY£î¿ozÛ¬ÛÙÒásá,A^?ïvÓÛßçô�ç4§/>Óv±-�° cU¨ p1À½—Éå÷Òn¯{©¥<ËÂçl¤0ûZ˜úEªÁð]p;<Õè&¯=êä§r¸­ð9Èeÿ©´ \j)7Hû!çTœ^ÖhU}Ø·,YXæÙô fqqÞæîF}yœž¢‘µKö? Á¶¯±9Â'�DŒU!» à,ê6&Ûš™Ï=­Á®™|¬¶ù—súçyž?ˆ…½È|¸($ø¹^Þeœ2]E¿Ä·w‘y *Ñ‚“ø6§~÷žá¤ÊôõÛeùHát|&ÇkÏÕÝÆÜ^Ý;‹#ç‰SüÚŸ²NíßÈÕàDŽæ¡–oŸsÑ累ϨcUˆX¸èˆâaÖHu@§_ŸÈà*µØHW¿wz2L¬,×QÔã-,6:JM™M ˆFöƒ©­ïå2øûÓÉHÜ^[œÌy«å#|@ÄX¢�öìÉQêxK.ró«È›ácšœÇFÚsÌmøO«&FûÃ+7ÄÏJÄGÓod|Ñ—V#x|æh½9ºMÛVô9w±-�° cUˆ°Ôá�"ƪ`?¨ Â'�DŒU! `I²De¶"¤Ç}é{ý·‹Ï¹èsÒç�˜f¬ Q�öƒº |@ÄX¢�uÛ–ükW m¿Fâõ5m[ÑçÜŶ�À&ŒU! À~P„O�ˆ«B@€ý .Ÿ�1V…(€�ûA]> b¬ Q�öƒº |@ÄX¢�ìuAø€ˆ±*¤F£Ñhå7�0‰*D@Qô�UEõ€ "|¨*ª�Tá@UQ½� ‚Ÿ�ªŠê�DøPUT/�¨ Â'€ª¢z@>TÕ �*ˆð  ª¨^�PA„O�UEõ€ "|¨*ª�Tá@UQ½� ‚Ÿ�ªŠê�DøPUT/�¨ Â'€ª¢z@>TÕ �*ˆð  ª¨^�PA„O�UEõ€ "|¨*ª�Tá@UQ½� ‚Ÿ�ªŠê�DøPUT/�¨ Â'€ª¢z@>TÕ Ø²¿þúK^¼x!®ëÒh;k„O�UEõ¶Hƒç§Ÿ~*=’gÏžÑh;k„O�UEõ¶$ žß}÷]p��H#|[@ð�`=„Oàž~ûí7‚'��k"|÷ðúõkî.���«>‚Âà©ÿ��ë!|<�(†ð l(¼Æ"Á�€Í> è¢"]\¤‹Œ��ÀæŸÀšÂà©—U��Å>5<�ØÂ'°ÄßÿMð�`‹Ÿ@ žŸþ¹ÿï´<�ØÂ'ji<ÿ—- žÚôÿ�Àv>Q;¿üò‹*ó<�ØÂ'jEÃä'Ÿ|â_§ó×_ î¼}û–à �À>Q+ºxHƒ§¶o¾ù&¸wFçuê¢gÏž<�ØÂ'jCçy†Á3l:Ò©Âà©á��ìᵡ§ÒÓáSÃæùù¹|üñÇO��J@øD-è"£tðÔöÑGùÿýâ‹/‚G�€]"|bïéüM=¥žžaûðÃÅu]æy�PÂ'ö^|‘Ѳ¦• �Àn>±×²­j„P��v‡ð‰½¦—MÊ ˜«šþÿ¤&��ÛGøÄÞzýúuf°\Ö4t®ú§7�@q„Oì¥U‹ŒÒÐ �@9ŸØK/^¼È ™éFè� \„Oì«™4ãíÑ£G„N�� |bï,[d¤¡Sç‚��3ŸØ+y‹Œ��Øð‰½‘µÈˆÐ �€]ŸØñEF\(��;>±ÂEF„N��ìFøÄ^ÐàIèPeZÇ€: §c/„§Ûi4F£mÖÊFøÄ^0±ó úè7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚êY´ïdâËÎ@ÆÓà.l„/{Ø„þŸ@AÕ.Ú·2ê5ý×Ðè å&¸wµ72ì<Øðw’¦ã<¼ÇïW]}¾ì9P©3ýñŽ¥3|ÜÞ½û×MjfÐ÷½Çú­Ñ•áÍ®v}/f§Bûš‰~GøÄ^0±ól—ȧ⠮¤¼z5•›aW-W&Á=uS½~cî@eûÞËdô£tšÙ—µß¤åþü¼~ÌôGíÍß÷mÕ5sâJ«„zw7êÉa…êMô;Â'ö‚™¢½M*ZÒÝ·Ë GéOJ¼v©f¿1q ²mS¹õ¥ÙhËàª*_Ñ»g¤?N¯dà<‘ÁøŸàŽ]ÛVÝÙ¼fj(|Ðy{Ð.U¯®>‚¬·c:Òô¶S·õƒfGÎF“¨8éÀÃS^_É…WPþãÒì¸2¾ u3”N#!ŠÚæ£YÁÈCêyf-=ò¤£S?Ë˼m y¯/ÚîCiõÎåbp<»½ÓÓ\÷£¯¹zL¨l›¾§Ö>YÊí³Ñðäþ¶cq'±ˆ–Ø¿µ¥ê€`ÃìfÐ7ãϯÏ÷~ƒº³†ujfŠé«j´Oë¡+½Öa°Ýú÷~AçËXx××}ä¿vÂç³xT_·¯l„Oì;Ϻ¦“ 鶺2޽¯\œntNĽ~ïßã˃ϤÙlKï"|ÜŒ/úÒ>vå:óúžGØañ^ un–ãáhÛõo¶EÔ}Nl»§i?*q4¥+ûU**>gNƒÅÛØéòCi»Û6믭øßmvÅÇÿb4m`¡m2G. ; /„?½WÞíþe:0L½·tè'ø[ú^ý(#/ ÙF·¯l+ç_Nÿ·}$÷*¨ÛKéwÏçµiVŽc#Ù7rå…=§{!“ø²FÝYËÆ5SC¡·}5i­í¿ži÷~’aا½ZwÙ÷öÁø¶ß7ŸÎÂû핸Þß\xï,c¢ß>±Lì<kÑÂÝýAF Gâ:úx*ƒà臼ÌSZ0;ÉQˆ9ýÙÃâ ´x?ÜtR|zôÀÛ†®0æ:ô§¸-¯pgn·=lë7Ö¨(?4|)ƒ—§â´úrá}O¯]iödt÷^®ÝqFÞɨÿ¯Åþq7’Þá=GÄý÷Á Ÿó÷À{¯†_I3bõ¾¯¥Õ$ƒ9í¼÷Êœòûc²-ÒŸ-ÇóŒ¸ô>î…ü«3i9_ÉpòfÔú¯“ÁSª;‹6®™y¡w­­ÓD¾•Vïr1Dê<ÒxŸóo{}þ•w 椾ìDø ²5|NÇgrœYØã…mÙ¾%!.~„]ÀêïKúüyjAˆ¶è”œ>Çã¬9Tºmû^( n[ʪ~cóŠÒ/U5Ld)/Pt3ƒ¯öí“ÅÓé/ì2÷- µ4 ÏnN¯Ï¥ÛÏ þû‘= fRùýqÅ©h¿Æ¤÷ÿxKž÷> .¯N½üžñ¾Ïúïý¯°Q fæ,6Z¯F¯ß_¢SíöŸù égY6Â'ö‚‰gµœ/^_¼è/™Ã·l”@æ:·7²¬x{üSm¤1R©í¹ó¾hg=‡>®mÿ*z›úÍ*³mèÊAfhо\^&³-Îu»ÿÂÝžI7šC·ë4'�>g´Ï´ò߇T˜_iz-Ãî±|Ùi-žn÷­¨;kÛ¼ff÷¹5kôÚïƒþÎiöþG®¼×y`áèz–òûá{ÂÄγZ^¡žšŸ"õƒ“QHßyöÄ»ÿ]p;É+|Ù-ÞG¹#þèÄBáLŽÀ)-è —ñç99r°óU¥÷gO¿YóKÐÈŠÒmHÎõ,Ù¦LËžk]ú7OBS2`¬ãÛ˜w¸e¥÷ÇUÓô}:>[s„ZëÕ“Ùˆ§B2F?—×µm\3óúÜš5zIøœNþOþ{~€®5³ÅF³øflN´½Ÿ@Av†O~éÄAè©l·Ì‹ŠÍák6ÅiÏæÑ©éäRμ"–wêJ‹£ŽDxúŬE2,Ò72þ$½Öc¿p¦OM'#qýÅ-’_·—Ò›/2ð öØõ^Ë¡4½×s¿pQ»Â§­*jÙH¡~±ç0fÙÆ¨£×ÛÞ>”Mé�Ÿ7ª7[8’=ѬÒû£Ž7ûÑT]ìöÒ«OóËÛ‘vºù«ß»r:¼ÞÃŒÅE·¿Ë õ$Õ'—×µm\3—ô¹uj´¿=M. :­ïå2|\ê ÆŸ}ð4cN¼]Ÿ@AÖ†O ãW±Ksèeˆ^‹2t ¼`øÏr¿àvæe>ââ£aEÌBM´2Y·ëßr>ÿ›úeÒŽ.‹¢«Šò rðøhT3 œÁvëã.þ_F÷Ú¶òè6[ÃÚÏŠ2ý’=nŸÉUb¾ª.‚úV:§;Xí¬ïÃÂHnlÔÉLˆ…ƒÙAT;ç”°yå÷ÇŒýüåÏ©+‹Þæs¿é þ+xŒÖ¡hÊÅüj þüàà9ç—^R«êÎ*ÔÌÄ6¤[|®ê²ãîØå¦ô* 磠ÅÞ‡ù\f ÚÁsz­„‹Û¥ÛW6Â'ö‚‰Ç¬mŒíJÞˆ“}ìê7ö¨D‹'Ò­±0J; ÁñË=O„ ôuáy´¥FÓ—ÒÑÍØ?•xÐø}<XÌ®0;þÁQ¸:Þ>º@ÙLô;z:öB­Š¶Å—Šñ¿ìÝ®¥Û¶¨ýÆæÄ>aá(h¿‹¶†‡ø¿D’sZȈô¶9Ò9»´ò”f–ýî7«T¶÷ýV2ÑïèéØ m±ýÆæ¬Bƒ &ú={¡¾E;9áy‹Oü‡Ò÷°E-û£‡p1ÓŠ6Ÿã‹mÒ÷¶lT^ì;ª¯^ýÆÒÂÇœ¾F l&ú={¢"è7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚(Ú(‚~›Ðaá(ˆ¢"è7° ý&>‚(Ú(‚~›Ðaá(@wF£ÑhÅZÙŸ�jËDÑ�›>��°×Ÿ���( á���¥!|�� 4„O���”†ð ��€Ò>��PÂ'���JCø��@iŸ���( á���¥!|�� 4„O���”†ð ��€Ò>��P‘ÿ�Þ×Ò"²}”����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9l_RLE.png����������������������������������������0000664�0000000�0000000�00000016664�15030617045�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�����Å���™���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��IIDATx^íÝÁ‹ãFÞÆñþ7|îÛ2·¹ÍÉ'_ú’Ë\æà|éÃ9|È!ƒÁ¼ì€Á ƒ` , ¦_–ð†B0†e ¡1,þƒiÂÐó{U¥*»T*Ùjµ-w[ßèÐjI–¥’êq©$��@I ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i �5t+óÉ2ìžIk8•¥{p73G¯¥Û|!ÃÙ'3òX,d6Žv°ÍË.goÞK‰†]i¶†2{0;ýñ;² ñAÆÝ§rrr’34¤Ù}-Ñ»‰ÌS…hÛ|fP…ïÿÆÒmþ—žJwüÁ,ßú$³ás9iôd¼(PŠ—s™¼ûNúí'ëå6»2Œ.e¶øUFƒËø*j)‹qO©ut†F[úoãå޸땷]ž‡OrË© [ÀôÞÀA\/‹MÇÌi÷¿—ñ¬xIÞ…ål(-ýù‰ø¸¼üA.õùÀ=ÞrޱGË=ÿÜg›ßc9n9¼ë9hñ“D—þùÖq¶HØ -UX’4ú¶ßN a³'‘ò ΧÄóNGÒ>K‚D¯ó­\ÍoÍÿÌÁ8�\ :ræò›+é7UE iËù…ôâií¾¼ÏäÆŒ×á"êK;> Ýñ‚„eÂŒ{¢RËÅ)=Þ.öH¦©0³Û¥`�JNÒáƒ\¯Îˆ QCÙr¡ZÞÄ¿¾UÙêÈpzˆ0qà ±üM¢ó¯œã*p|‘]móÒËÉ=Çor+×QOz[ÎÙuV£ aÅ'¯ñ—ºÒ<idâVšç‹Ãà{™N¿—Aª@‚„²¸”ÁÈ-ä*I%篿•/TèDrù ÃŽ`¥n,¯#é¨`“·Œ\y'ª2韅CξÍyüù£×ÅZdpTÂå"é“AbKã{пP$2v¤‘:w$Ѝ.H˜‘í?þꬆAB±•¦Wsæ[ÎÞ˻܃:'HøÔ²Ï^ÅÓü±åDa×íLú“f\H|Ây÷~‡AÂŽœ; ä2ú©ÚÊF^¹HÆ»ÍͶ,ªfh{wÇÙe8­Œñ¼Óë+u[zšFÛm5Ì‘$–óõrNNZÒ]­/…ª> oU‹`|üLÿµjÉS—Wóüå¨K‡NË¢ ú3Ì Ï!îùáß2‹ ç-?$Ýï¶­–ó‰D¶õV_~ŠÏ5©5jyïË®ñg ÇÞ4±x{]¬Z¿”‹ñ·Ù2à´ˆª}Û쾑‰¿ïŠ,'h!³‹nÁUëØ»x/¯½sYz›©í1 ÝZmCD2>Ö"¾ú©iˆ'Éœ¼ÔÈÐ|ªbïnøuP$HÄròtL¡ß˜¦íu¼ ë~?yAÂ|PÀÙQP—5^õïÒ¯Ç$\.ì5o¼jN~w ÚqfZ÷šwó\ú£Ÿt¥©[늴4‚„¾ôÖ~e.{ÞÊüêÛ¸"±ÓØcD}fS:ýï’ X]žèĪ{|èVÅSiö¯tx°—*Ó•‘9ƒ-[–°qÝï²­ôºŸIo|­ÇÙýf¿K<&iEZ]ŽZW¸©–V½ÞO¥Ù»HÂÌÍ/qÅû™<s÷õòZƽséFS³~” 'îw-²œ S^âà1ÖÁ$oq`i=sÎevÙö»ÙËÏÎç'ßßk‘(0_$܃ØÎ§vwT®+E‚„šæ|½ û9™yœŽDÁuw•ÙaÛÁäˉõ¯ø—Çðs²p” î:®‡Ê›¯ñ`d‚„Ûß'sÏ éxv²Y´¼f‚„:6âJÍ­02ÇwöøÉ޳ëîNcÆ…BChܯ凍i¶¬{¡m•´ˆ¦ŽSÝç«-§vœžçÔ;ïøûËTâÞ>ð÷Ÿúû,uN(·œ$$yÛÌÿ¾úïgÎv˞ϓÏòƒÄöùê„ áîøà|ª òkåÀÛ ÐöƒÅ²ããõÚ°î÷+´ö¤äVð9͉VíéÊ;Èi‘¨·Õ1çÍ®Œ&¡&ûð1’)[¡²Y´¼úAÂÎ篣l…T¬¢OÖÓ]wû}ó¥ŽãbËÏ(²îE¶•þÛ iÙïf˜VBÌrýéýg¿WhÍ4…–Ú¶±Ð6ÐÔ¥§3¾3_î÷Õòç«‚ĦƒÊ¸_ ÛçÁ éÁït¹Z¯rAž”l‡¯—]ï7H¨õ¦D}¥Ë…m"è7¯œ(úï¼ Ã*XÑë&ûÖº¥Åüîàªì .ßWdÝ‹l+›däýйË2·Éo�ÉyÌŸ&Å 'f”’ޱrΑm`û:¨;ä¢É?ä›/ù¬ì÷Ý6_Ô¼³¥wÛ:_È–J]Á»+Ì|þÉÁ^õ×-e—A"f?Ó¿‹ÅÚº]Ô5Ó·™åm?ÈQGÙraû<„:ªEbݯ!¬xE¿œeðuW_º ·ú™ùRÇqñå§Y÷"ÛªÀ¶Ë=¾Í¼ºÒ/�Ì÷Ê;ï(û^_–Ð|ÉgyA¢À|uRà ±¾ý3s]¶ÀA”µ©�©Å¿n¹f†ôÁ¿î¸”oýŽƒ„b: m|ŽDÞvQAäÕw«ÿm=Èãéß~Ìÿ‚£.&ÔgÊú‚ÄêØðïRpƒrèø ŒSÇSKÝ¥µiÌ|©ã¸àò3ì4ֽж2çu^êFéåüüw™¨õÌÛ¾z{ÚP>Gùû/ù[‹½;n&2Šfñ4Å–“•Ór’Z÷Ð4ÙÏK>˦Ø|uR£ ε¬àíayÈ&ö×|¦�™@pº¡`ÙÏS·%™Ò 3¯þ'ÕC|¢ä¶«R…6老þ̤©Î¹nm×3ôy7S‰Tóžó‹aÓAž4¾Hܨ…Ürqó‹ uyŽËzä<uÖTô¶·¾êüN=ÞX]úSǰóË7uÌÚô›~éªònŸ_á\^L:è%Ë_‚´­{üØN[‰ÚŠ&»]Ñ~4ßÑN§–õ‡©¨ÿm–ï¶ÒøËÛºî·Ux9î»íÖû&¹ts¶þ[J–³:ׯÓ\:òÌ®—Ú«XïóœK­…–£§ô¬ÎÍöÖÙøÜyù´Õ]ú3zrqõW]&“ï¦Î­öiñ¹îú2žü'8㲪ÆÙ²¼q¾9² ar§@¦•Ö¿“È}R¤ž/·€j¶BNÏ“¤þÿ²'Ϥ :ó©Á0ú¹ûÞ#²Õ “ý·üΑA9'·Ôg®[kôÿŸÉ½øKzúà`’ù*…¦q†'x[¥ÊA:Ȇo\¤ž£ žÃ°PÇyLüt¢*g™ê$þûEú³Bá7t,8ÇAúù�Î/üLùVëù«wî0ënÃÑj¼;8ßÝ Qƒÿ½¿]~޼uÏœo6n«8(l}F„Syêy½¨©åD«iTøI=ÿAMëþ8J=GBMç?¡àrBÌ»ŽƒŸ.äuëi¼]ìcÙçy莿×òQ—ø;›[R×Ó¸!°È|õqœ-�pH7¿Jý#P¡¨°>>-r8" �Ø%ݤÞñ.Zñ¯kÛ×�8 �Ø%Û£¿;ôÞjª.üMÞŸ›<^‰#ìo6÷ù�°+~ÇФ¿Bõ¯Kª@���¥$��@i ��PA��”F���¥$��@i �Öê6Ê࣮< �I¿Ã!øâ<—ûn‹‰¥,.KB °3 �ˆC„~®}]¸yA\óKo|ùÜŽ_Ϭ_}þ­À$�ìŸ~ÿÄSï-¸IHØüÄÕ] óÆF.“�;E�°wÉcÜýW`›×yo¬Ø×AâbúÓúÙÍžDæqÓþ#âWÁ$õÚï¿È‹ögÉkŸíà|núõÛ-鎮œWbßÊüê[i«WnëÏý§Œß§_ùÔAÀž}’Ùðy\A?÷Þˆi‚D&`¸LP•{4M^Ë}ó‹ U?‹ÆK‰®“Ë"Ëù…ôšlë†zVës3Y/¸èyÛ¯L0±¡¡±j=QAå¬=’éúË\’i €A�°gá \ ·T¸Â—6–בtœÊ>cZ7Öá"÷JÎVÓ„ÖC;÷>ßýÌ?õrO;‘\¯>>þ?-À AÀží>H¬.[¸-zÜ©4ûWIË…ž÷Üi ¬Gêò‡?$-(öÒI£Ý—·ã™Y6�‹ `Ïò‚Ä.m r+×ÑËUŸ }I"Õ’XÅXºMŸ¯8}$TÀpúg� H�¨@ò«>§D&`¸6‰`Ÿˆæ©´†?Ë4sÉ"¯EÂmÅØ`9—IÔOEê Po �ûg*ììíŸÏ¶Tâá ‘ô‘8“þä£cÙ°/·ùÊ (¡–3î䉴ûïe¦;T*K¹™¼•hö‡,.¿—wnh(ÔŠÔA@TÅ<fÃ>j!³¨WàT¶¢÷ïÚhJ{øK8€èŠÞíˆiÙK)ªeä¹ùùï2‰EJl¿ˆõÐЗE’yNWOá´Ö¢E°�*r+óÉé6UçÆ†4»od²1DXqèÍ|q%ßìÊpS§GÝúñ»Œb¬nmËàj¾ éçH¸­qPÔ¾þU¢À3,�$�›ÅXzçn'K�ûD�p<–×2î½ ÿP!‚€Gî£Lúg沄íÛ`þ`ï�9óüÝï"rî¼�P‚��( ��J#H��€Ò�� 4‚��( àÈ%OÔìõ/Ó/ø:zêñÞßHot%sndÁ$�Tf9ŸÈ»èµt›ÏrUdšâú- -ÿ¶Ð›™\ôÛÒPÏžð—}g…–µŒ'{/}õxnõ¬‹Õ»;<›–¥ß!’<+#8ÄÓ÷ßþÍ{ìxòN“V{$Sn‹Åž$�TC=ººó…|¡ß™‘óöÌ"Ó¦ž/ñ¹´zé_äÞK¿–ó é5Ϥ7¾¾{˜(´,û¢/û²[™¿Ì¾°¬àz%¯d÷^Jæ¾â<ó"´ä9§<¨ {B�P!ûÎM!¡È4Ûé·zž¦_?¾zxUk(³u-œ|ž÷ªòí .kù›D§W¨?•Fwl.·_¯`Ðìv üO¯CS:ÑoÞ<Àý$�T¨HH(2Í6Éc³×µ¡ß ÚȎח Ôçýn^[n/$•òŸºò6ãle¿uYɺ'¿ÿ]¼PpYJ© aÿ— *Àn$�T¨¢ ¨€•ÜJXOb*rs)B]&XU¼Ÿâ€Ñ‘öàÇÕe’bËRó©`òÜ{­yú;[V"<­óŠöÆK‰®ý/r¶ p_ �ª&H$•­_yÛñåfZL?†“'Ò‰þ%‹i\I®t߫زL\6qç/¾^v>Ûbâ ›.ÏèeZ+€û!H�¨PAÂΟ ¡¬ß*z£èaƒ„ß"±Ùx˜´Hœ´ÂGƒß¸?‚€ U$ò.'ØJ8°ÜÀ%ÍŒ?idâÝ>YlYyA"ýï²^á aÜ\I__Þ´L˜ ±¾\ìA@…ªvþlH*Ó@ó~¨ÿÀòZƯ^Éðê½®œ3­—•Tü9}$l…‡õÚ$ÌÝ Á[gi‘Àž$�T¨Š a+Û@°-¡Û,S­êv̯䕾D°”›É@÷—°ÏxH\V0$¨ ÿ™4û¶ßEÑõ²ß-'H˜°jÉ +À=$�T¨š / ÛÂ`éæÿ§&¨'NFÒM=ø)éhÙJýr·¿ô½þ[—¥˜ Ò°¤Jž6™} U‘eÅK  5ýX†ÝV¼Ž ' 86mà�ª±úµìÜeà_¯/2M!9Ï‘0–ó+éJ7^~³+£‰}µ 1ê³memû\ØuJWâùËr9·gªŠ¾ûÆ{”ubã²t°ëí¾¼ϲ!Â~¯@_à¾�ŽRøÉ–u¥ZTZ<Ù{A�p¤T?‡À»6jÇ\ªá]Ø‚€#–óöÏÚàíŸØ?‚€#—ôOèõ/ƒý%Ž—êñôFW5o‘Á¾$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA¢”2éŸI£ÉõÒŒ� †Ž+H,§2l5äääÄÒNeUß/ÆÒmøÿÿ¹è>uÆå ­¡Ìô‚��(ÇÙ"aÂB£;–…å[ΆræDVÁZÊÍt$í3<��õVï áÿ?7H(d<øž �€ƒ aþÖr‚Ärö^ÞÍ>™¿â¿çy7ìJÓ˹LFñx})䉴ûïevc'ø$³áss™ä©tǼqöÌRnf—™åO¯/¤×l8—Qne>y#Ýxœž¯Ù•Ñd¾¾t�@…æo-$Tˆ® mpûXd¦;‹+öLTxX^˸×2!Á®Ë­\G/¥± Šg‚„»üæ¹ Æÿ”ëñ—ÒÔËý$óñWÒîFI@‰ƒËÕ Ïû|½~��Tˆ aþÖ‚5ÕàUÔ¡À¡?3Ô±Ó ËxTÏ ɺ´ÜN¡y—XÔø³W2^8# |W��ö… aþÖ‚øB¦Ã¯e´-H˜q©ÏÌ„‹û‰d:?ä˜Á��T€ aþÖr+ðt‰ðt·2W— NÕRÍß'gÒŸ|L&¹W0ó6zé ��è8ƒD¨uÀ³œäܽ ¡ä‰Œ¼éT¿ˆÁWÒm?IZ 2!wÑ"á��ë8ƒ„ºUS=`*÷×»êÙNUæÚ½‚DÎ2SvÐGBo´¥1“3Zöè‡Íë �ÀiˆëÜëH:†4»CÏÖíêÖͨߑVïBæ~Å[4HÜ\I_Ý~és9%Ów!íoåj~ëL¯—ùüÕ­¤vZÕŠb—•Y{‡GzùêVÓNô›Óò�@5Ž6H(~%­‡fW†ï&^ˆ0-îtñ¼4’ öŽÕ)³¨äÕàv¸\È,ê%ëdZªEB­Wt)ÓÉ_%Õ¡2Óªâ=G"Ó:�@uŽ:HT+ÑòóêTkËù…¼ê_æö×��à±"H섺äð¹œù7­›_d<ùù�€ãAØ ûTË® ÇéË úòJæR ��Ç ±+ê=ï^¯û.ÄC£Ý—·^°��à˜$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i‰;9aÔûÀcÇYìÀTEÂÀÀPŸ86”êãÄRoìÿê<„mÍþÆ1¢T'–zcÿW‡ ì¥úÀ8±Ôû¿: `?(ÕƉ¥ÞØÿÕ!H�ûA©>0N,õÆþ¯AØJõqb©7öuÀ~PªŒK½±ÿ«C�öƒR}`œXêý_‚°”êãÄRoìÿê$€ý T'–zcÿW‡ ì¥úÀ8±ÔÛCÜÿËù•Œº-½n«¡ÉÜüÿ±zÛú!îoà¾(Õ¶¿ËïµO×mé_ÌäÆL%ò§Ì£óìtîpÚ—ÉŸñ”“¾œ†þo‡UeXf£'ãÅRÿ×·œO$ê·¥a§mveôS$_?M>·¸™ô›éÏÕCCšÝ72™ßšébóHÚ™éšÒŸ¬·ŒöçDú§þtÎ`¶MYjÊÍ•ô›O¥=üÅ)#Çá!lë·¿ TØ~O,ªbƒCªrü{‘­(TÅúÕ©*RS¡« ñ´?‰c‚¢‚ÊÙzÙÁù—²÷¤ÑúF¢×/¤5œÆcÒ–ó éµÎe8]˜1ÊBfQOš¥*é$Äœ®Ö3¶œËÕ *­¡ÌüÐAá\¢ù¦ò¾«ål›²ZÅ¢Ãbh;‚°”ê«>HÄ–Sž}.ѵ÷ }çA⃌»Ït€øs6”V¦‚R¡¦-Ýñó÷.‚„¦Öåy8 <Ö á´ª¨ï{ë\’ht"¹ÖÛz)7³÷Òo?Ñã“¡%Ýhš ’ù­MÏe8ûd¦Ún©ös<_£ýµ¼v.4ÚßÊ•Û"¤ÜÌd<ìJÓ~–j‰šÌ3asWÔgÚCX`×(Õ¶ßKNO2¶¥ýnþ޹A §‚¼sXŒ¥Û°‘ªÈÏÓ•’úœ'ù—<ÊÉ Ëß$êt²•⃄ڦgémw÷ßÿj_žËÑôZ䲕þ®Ÿéõ]^GÒiõ$š¹->q¸˜ü·ô¢ß¼J[}·ç÷ vI+Ôi{ ö3—×2î¥Z¤tKT»'ñ½Ìv+óÉé¶¼€»C `?(Õv˜ ᇂ˜óëV[/+äüJ_1Jw,Iu¢þ~%gîå õ™÷ìc• IŒŽ´z2÷3Ká áö79}@A¬[óKû¿øUxëÅ!"T1‡‚Ÿ^VûN-Y*ؼÊ,#UÞTÐéý·Lnü(#;tÿm}a€]£TØ~O,w [Z$Ò¶ Õq–þu«Z(ΜË™ áWØI“ýÆÕÈuôŒ·Aªƒ©ã±·H¨mznÕ±—RÛÂü Qh¿o£ÂË×Þú¨}òùj›-g#9†…‡$2ÛîÀ®Qªl¿v^HŸØµà/ÔM6‰üJ̹澩â*]©ù-IÇÍVè½ þvËû®÷÷Ýÿz;çì·LXÜbÓ² SÛó3¿/Œ»=eo%¹L³Û>3k÷ÝÖ»pèuxÛ�LJRu`û=°s‚D¨¿ÀNƒ„ªžKcuYÃòqªV µ~õ_); Ê­\G/åtÕÑñ¨ƒÄæ_ðù¿üCvÔ—£Nf¿«í÷¹ÙÆjÿ¼ ÜÁ³”›éH:ç}´#‰‡± p|(UVyзB¾”NÑÛ?smê®Ö³ð/KÕ߬®'î^yãñª“à“] %ç¶×G$Ôçoè©ãùçÞ­µæ.ŽnßëS±‹Ö�FzòÄßöjŸ»ûR_ŽiËàÊÜ¡—ÉIÔ—v+ÔÏcwcàøPªl¶ªüÊ?*·o‚®xÓÓ¦:úÿ_…ÿsÖ•wöIŠO¤ÝÒ*DU¬î©Ò˜Òá¤W뤂ÓjºÐ`æ ~_w¸_ÇKµŒ;Û´Nþ-¶ª’¥o±¾›¬;êÐ×È.'²-J›¤ËÛªü¸ÛyUü[RÕþ~/³LçËÝRŸuh‡^‡‡° p|(UÆ]oìÿê$(oØJÕq`×û¿: ÊöƒRu`ØõÆþ¯A‚ò†ý Tv½±ÿ«C ¼a?(UƽMN§ÑÀÛAôSëýPm} •3<†m¯ÖóнaàøPªŒ»ÞØÿÕ!HPÞ°”ªãÀ®7öu”7ì¥êÀ8°ëý_‚å ûA©:0ìzcÿW‡ AyÃ~PªŒ»ÞØÿÕ!HPÞ°”ªãÀ®7öu”7ì¥êÀ8°ëý_‚å ûA©: uP300Ôk8¤C>Ž¥ 8 NìÕa[³ °”*�¨ ‚öR�5AÀ>Pª� &ØJ�ÔAû@©€š H`(U�P ì¥ �j‚ } T@M$°”*�xÄîØJ�<b*ìs�¶¡”��€Ò�� 4‚��( �G†¾ ¨¥ �ŽŒßa²È�”Eé��¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@i ��PA��”F���¥$��@I"ÿ9 œ®%­����IEND®B`‚����������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9m_IMC.png����������������������������������������0000664�0000000�0000000�00000004036�15030617045�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ƒ���T���`([1���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��³IDATx^íÛ¿kÛhÇñüš½fë–É“—,]²ÜàÁ‹‡ … ƒƒƒ€!ÜZ….%`n¹Åà­CðVJðÒáJæ{Ï#Kö#Y¶¥X–•¯ß/xàûäÇúJß~ùD��G0����Â��`��Â��@�� Â��@���€A����a��0�€¾0899a0G4P •a€ãEýËS…uM½‹C@ê_Â@Â�ªPÿòºP…ú—‡0Ð…0€*Ô¿<„.„T¡þå! t!   õ/a  a�U¨y]¨BýËCèB@ê_Â@Â�ªT²þ³‰Œn;R7s³ó›¶ø“çð ¯SÖ5û{qƒÌžeâ·ÃÙ§Òì}•ñt¾Ï˜øÒ\yŸ;êÒMåyÔ“Zêëáhú2 ˜òÙ^WÎgºlóñ{Òô¢÷7¤s{'þÇfð¹¹­ý>5iú?ÌÜù½‘Îàçüÿ ÌäqÐ/xmþ½çNÌÑ3s»É ÷Â9†ì²ªå?õÎÅkÞʽ»(P…u]½z¿^„AN¶¿éLû‹Ìd:º–ÆÊÎþCüæUÊÑßÔ4‡yË/˾ÿ|Ùm^„A$l¬?Ä¿ùMý{ó—„Ùƒ ºÒì3Ÿ1sûÒ©7vj´Qӯžľv)gõ3©µ|yˆ&6»—~ãTêõzöoßÅo_JïÓ?Nˆ>ÊØïš£g'0^ rÍáy$½Ú…ôÇ¿Â?èAèBä´Ö/÷[Òò¿;ÍyaðS³ žÇ}i4ú2Ž¥ALi­û°- ®¤yó—t<û=þ þ:³óôÞIÿæ2 hïå<-È‚ïwqÀ0°5¨Ë8©õdôä\Þñ.Åxš¿m:–;SÃùÙŽžÔ;~üì0èuwxé!¾N¦ÞüÌ鯹Ôdþ}=œ$–cuÐ7¡o޼Ϟe’ùÃò±ŸqhU˜ƒ„ANéa6½XóvÃ`�®Üað806:Ê´³8â´Ÿs‘¸LS¤ aàM0^ˆ’ Iûß_å>x͆Áî “"êokyþîF>Ù3¬àà/y0g=§ö{Û³š–YÇþ½sæeL‡rÝý¼<# ÙŸîζî5³ýÜÃÏ|’ÉàƒÔÝƒàŒ°-þ`J³ÉPnͺޤ‡0Ð…0Èi]G‚oÌÑäâç(3Û.$Â`ÅüQmÑXÒŽ°·-cWYÂÀ4ü(´†_Âðš._‹…dñv¯ÿü;Ú£êîà!ÑDí:ÿ]Ú©Í5í{Ùe]æ;H1ßJ;¹ŒØöödÂê£\‡gc1¶çÉ3ÈbT¡WaZ9å ƒÍgqÛ¹=¢>õ¯ìèÉeD- $3ìå•Ég•1 ‚›¦oƒû^pôê¾Võ0HYϑ蒻>c#ù„P–ºocè£ ¦Ä|Ü3G;¯ömzÃ' aÓÚ0X¹¬“·émƒà2Ô¢é¸Ã½9¹©ùј²†A4ßèú¸ûÚ~/eí\ÿ á_¦×m%ð·Ø´¬ÌìúºZ¹ÛSï/Í—¼öti—u߆_÷Ђ0È)= ìiúUÊ%›¢Â ºöžÜ©“—Šæÿnô†¦…$•qîkáMn÷‰£í\ÿMGÒ›ŽÀÓrTn¶‹Ö‡ÄcĉumÃ`åacúMú­ÎòÆwÁªÐ= Âʃ'™ ÿ”V+룥ëlƒàó,ýhÚ6œÆµŒ¢ÏŽn$&op7>ßV ¬G¹ï_Iëú_çI³G¾ôšõnxîZ[ßõ7|mèw¤{lמ.êÊûÄ=†BŽÊm}O“g#É›ðöß i.Ög´./Rî{‡0¨Æ:(ŠžoÚ_qæÐ.?>2þèlݵúÔG£s¥¼¾¸œs½:å¯^³'þ(ù(bFiß'Ñ<íYGÝùûr.¶¹º?¬[Iò1Hûxæ|~éCvYù%çïŽäol£ý;þøfÿ‹Œ&ÑÑ÷ü,nu9flú¡àŠD}Û=hˆLpjžxÜÕk^ËÝx‡–ìçÚ¡çP…uP=ß$¤©8Èú—‡0е½©ÛshÇú—‡0е½©ÛshÇú—‡0е½©ÛshÇú—‡0е½©ÛshÛ¬»ž2vúÚaØyWÕúߊ¬Žô'¶ªÅÎóÐ=‡*¬ƒ¢¨ëœšŠƒü¨y]Û›º=‡fpܨy]Û›º=‡fpܨy]Û›º=‡fpܨy]Û›º=‡fpܨy]Û›º=‡fpܨy]Û›º=‡fpܨy]Û›º=LJÁ`Ï8¤C~‘Ô…Ž›¦³êª°® ƒâ°ç�À ��Â��@�� Â��@���€A����a��jÙ¿ÏQU„�8ò4ì*7÷¼��a�� ��a��¸7³Œ×†0�€ ^cƒÏƒ0����Â��`��Â��@�� Â��@���€A����a��0��a�� ��a�� ��„�@Dþ¬“žúå ›����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9n_JPEG.png���������������������������������������0000664�0000000�0000000�00000004105�15030617045�0023361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¿���O���{öËß���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ÚIDATx^íÜ¿kÛhÇñüž³fëÖÉ“—,]²tÐàÅà  : …N†Ðõt,oGÀÛ Á[)ÁK9JÈPJ0ßÓcÉÖWÒ#GŽm剞÷ ¨G¿üõó‘=ê‘��àÂ�àÂ�àÂ�àÂ�àÂ�àÂ�àÂ�àÂ�àÂ�àÂ�à§Ãïèˆlð|胚Ëùð£Ñh4Z¶aw\ù 5͵z >÷‡ðjá×\„ Psпæ"ü�…šƒFø5á(Ô4¯¹?@¡æ ~ÍEø 5ðk.ÂP¨9h„_s~€BÍA#üš‹ðjá×\„ øYs¿d>ý$ývk¹ÿq;– ü–üÞ_®Õ}âþ~zyØK:ÝN$~‘Ùý"y_dJPxŸnmNï£ENexlûýªõ$œ?D ´¬»5ÉZ§¶˜Ë4JÐZ½¿#ýË+ ßñzŸèa:”c½ ëf¶ó‡L‡mËïZÒî’éü×j!›÷ùx(S³Ëk¦Ceœ$÷OøN^ §Ñ‘9 ³.¿,ä~:’v«+ã›»ägXq­ü«ÏÃ!ü*2ítãN£\Ê@ù&apž„—v…DB&^­:û8àŽ×˶ýýBî&iu>Høç[éŒo¢Ÿä,ne28“`üo´¦•hgatFßÙ)ü2LÀ‚Êv|¢ðºþ(Ag$Óõñ1ûvZÜ–Ìñ0¢¿¼+Ûû ûu¬öÏ¿ÎÅÔeÇ^S üŒð«¨Ø¹?e6îJ7üª:ŽC„ßw™ô_/;¨‡ÙX:±Ì2=UÄý‰üܽrøfŸÏ¤?ùž¼®~÷×2ì\”_áÛ‹ 0£ÿ©áÊU‡w2»©€¨µÎtu˜ÏÆvŵB}mb¾gÑß™‘jè4z=ú[æù:MdÀÄïÉ8Èl§K\Ûž—Œð«ÈÞ¹G_gFA(óäu6¼TàiÛ†ßÝDú­3Ï~F/Lö’¯äC怶 ?³­§%ág¶ùÔz_É,뤎 ·xËâFƧ¿Ëø¯‹¨öFr…Úâ6”î‰ù\~Émx…Ù!yù!ÓÑ{ osAcjñdÃPz%æsîdn,æW2h¿Uuj®æÿ ?–É*„Í0ýe_:ÝPnwYý~ÍEøUT~Ù 3L¼Üö¸%÷ùJåÃ//ò<^‡y}!§™aª’+ªCØyØSÛ¤ŠÇŽÇa¹Ts¥–÷–£«¦ÁUîÊ*( z¶01Çõ¼x¼Í²¶ºÒ³0aÜ»Ì-#{â·¸ý,ƒÑuôÓ<ÛÉœ;\«‡QŸ/áWÑvá÷È•_Æc}þê)b®Ou‡•¿x™qÀ$ÍX›•lû†ðËNбLÊlgÙ•Ÿåx,;{½ìÇN(žÎ,ßmù“!m5©•nœҺކ ÜA~{ô÷Àl×EIÀ5?üŠŸÃËmMBøUTÚI˜Ž¹tسŠÍá·VÍ`ÜVàƦ­À6Û‡ßãh>¤W²A¸iY{é¬7p©æìL–“cÛÏzÓ²ª{˜ŽäM~ÂLæ¤pÃwb9„û<÷w«p­žs{ÜÿnlÇé½qé`Û;ÝøþJqr_áŸÉ· gùù¡ÏøughVÚoø-ÃØ2L¶Ïð[^Ùf†KS„ߦ+¥MWX6û¸ê2õÛ/ÞoΜšÏ=°¬çNnÆçÒËLs á—"üjävøÅ÷´ºÝª:”Ù~欸óÚ>‘%ËGzÒo²¸ø*a÷ÍÂ/yþ«Ý—Ëé<zefê}‘aÐÎÍní5üÖ“#ò“6ÌÉÆorâsø=2AÅL|éjÒÌþü ý‹Ü=½\u™�=Ë}¦ñÐlú9%CµÁG¹Nfv.æS ‡]éØî[:„ðK~5rã`Çád¶%Û*>ä^z¯Ítø–©æ«³eÓÉé‡Â×gÑùíY=Ifϵ׿;’V0”p^O± ¼äAóVt%x5ˆ«u?,YòûShù¿‰0ÿ¿Ž˜õ‡Óƒv–f=.2'öÿh UxFo1¿–ËÌãÊgUåC鯶›1œ©÷Õ}X]Ÿú3Í=~a­%÷˜muÉsnkÇbWNïMÓ6ÜGÍA#üR„_èˆP7já—"üjDG„ºQsпáW#:"ÔšƒFø¥¿ÑíSÙÄKÛúøæ0ûï¯øÑšB=XÛáþ£—˜}uÉsnkÇbWNïMÓ6ÜGÍA#üR„_èˆP7já—"üjDG„ºQsпáW#:"ÔšƒFø¥¿Ñ¡nÔ4Â/EøÕˆŽu£æ ~)¯FtD¨5ðK~52›F£Ñhi{.ϹîChÖÞ�;jÚ»q­¿ýá›(„`Gø�¼Cø�¼Cø�¼Cø�¼Cø�¼Cø�¼Cø�¼Cø�ÁÚ!›Ë?�ðÔ6åz˜m‹ð�x‡ð�x‡ð�x‡ð�dèI+UÚKDø�2^j mƒð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�x‡ð�xFäü²2Ìúúý����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9o_GREYJPEG.png�����������������������������������0000664�0000000�0000000�00000004632�15030617045�0024056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ä���W���Õ‡6–���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� /IDATx^íÝ¿kãHÇñý7\»M·ÝU®Ô¤¹&Í.ܸØ"p…!E`‹ƒ- …« a«ƒCpåpýp÷ÁÝq7ÇÃRËb¾ÏŒ$[£ÑH¶÷¤Û¯”÷ ¦ðÈÒH3<r^ ��øæd�� �P€@�@��d�� �P€@�@��d�� �P€@�@�:êÕ+ºð>Q»79Ѐ2Ú\ý¢:) …Ò¿‚0Õ  ˆvWŽáj2Ð!´ ¸ä~!¡]ÀE ÷ tí.¹_d ChpÈýB B»€‹@îèÚ\r¿È@‡Ð.à"û…@:äe¶‹Ï²Y}’ÙhlZ†2ŽÿÈ^¹ºx<зW#yyíb+Ï« &²xxÊžÃÜ/2Ð!/¯]<ËjI´x0Ñ Ü/r­?$“u)”ÁXæwkÓUì|‘M<-¿Ï-ù¬¾˜w®æ2 ½¾+ãX6UË\Éò©¢[ÚndÏe<ؽ?’ÙíÄïͺ®ò5=ž½LË||–-o £Ù'ùOüN^ÏWfíj¶e4“ÛÕfßÚæa¶<óF™³ç³úJlbïÞ¿¯ŸÛa ËÛ—ä½U¯§Û³Ú|Nã~v¨¸ëc5^ßDZŸ¥—{ÌŽL=üϹÔ|&“ø÷ì˜x’õÝSw¦Œ®$^»#àšý-d}l:od™Ï·möãLF»e˜Ç7÷ù1š2£ñõR³(û,ïQÈ®g×tqÿ-òA¶cð;Ù¿Ìsod¼ø¯ʆ ŽR`¶³ò.ÐÒÀ?Ï—üû­<-¯d}øã›ðHaû(Ë« o}lç›Î0úŠ€0a¼|'ÑøVžO{~ØtVû�µì:ÂÊüíýO¦³½Åúïì9£ô¾T±>ŒíïOg?º ½lùAÆóûb}—¤PX¿LésvëÝÈj¿ÞþØqö_¢ñú>^':3‚ç?Èâ—ks ÝÈ Úíc,“3[‡Ÿå1¾”hËÚ=¶l›ºyïíwÃÖýY͉è1ž–2º'Ñéñ=*»}îGÏ²ÜØ“®Û™D“XÿÁÇ·‰@îù P I§sYì@Z ä?e9û. â/ë…D¥ÑAú[4[šqGCžïe]× ƒ6=‰8« îT9(Í_ÛÎÛ JÿqµSÙ²ûöBfË?³ÇÇr õ}‚Ntfv_ÛÑåÕlü]fÂñj 8»ï.˵ì²Nl×·2õOd½“¬íã¯ru:á³íoZ<¹T„@îù Š@–¿e½;7PýQUæä@¶g÷ûÑf¨sðC埳ëxvlàƒ6» û>[7éįrö²Q”Ûóä©£¿²×êœȶ>Ï+ÙÖëy`&oóõ} ýYz26 ?¶Í\$Û.å™Óáýv »>ïåÊß_…¶f×ëº"tûÈåýÐÝÒuòAUè,l#wÀˆ°¨bD¶çwnöñu1è.ãTÕ¡äòî»Õè,ÝïÞüºyUÈFÄòÃlœsöt½&.Y»sB·Ö4]ß§±ë¥[àDu¯º-…Õ-ëXö3/KZ<ì>½ É•°#¯}ú‡²¶Ö¹‹uáS»z*÷Ä@>0B.:Ô¹û#8ÃŽ˜ÏÝKxþ2ÒP²õ·/O \P+…©°“}^éµ3Ïó¾4Üà>8BÎØ¿©šÈ¬ßú@.N, ­§[—v¿‡FÈM×÷iìòu«QÖDCššý51'‡…cÈî3÷ò¸Ý§ãÀç<ÉÃâR¦ûÉhúè?ÊÚZç.Ö…Oíè©Üª@öµáòQüνhk¿36õ`ë¢XÜ Su£Žº×ª•G“¹àIÈ>€²‰MѤ<ƒµð>G]8Wýõ\µM¹ªýá†sóõ} =í¢‚Ý/5“°ì|€éÄ›,h‚o}÷Af×ÞwÎMŒNí l2™,{œ°Aáì§ìJÔø'¹Ï®êl7+‰ç‰B߃+¢þxhk»X>µ[ §r+:Ùä’ê¤xVÝh §ß· JßÅù—­ÓÇá˺_¶«˜DUÈ©dÖðmyÂ[ëlë,<½¹@n¡¾O µÓ±õ¾µmPÚÛͽÜn-ú(¿:·ÉUŸˆ¾>á»{ïÊÅþ8²ûx÷µ„{Üy·b•nmÔÉ®k×´µÎ]¬ ŸÚ-ÐS¹Nv»‘û›·29ö¶§J5œÜ?ù]¸ò3¹ g*³ø¡¸>ÉIÃ÷_»[@ü[Sìd«·GÌžÎf"»·M5ÈÉ­gß;÷‰fª"i.Æëûx}ètÐ9G ·HGåºgÓN9ò‡A*'F%!T|oa‘ÿú>äýÏq‚,»grÿæ Æs‰‘ÇiL(û¿l·;^í/áù£¢Âö&ádTd*?Ç?Öþ0ˆ?Á+<Ú …vqT3Èîy-²aêÿÀD`²VpŸ¸Åû›Æëû8ös€.m­sÚ†Ú- ãÊhpÈ9¹Et<@í.9G ·ˆŽ({Ñí"™Wáþ ÆšR9÷ _ì¶vM[ëÜźð©Ý‚>T.Ð4Ú\rŽ@nO“*&§JåD4¨`÷°ÓÅã¡­uîCÛP»t<@í.9G ·ˆŽ(£]ÀE çäÑñ�e´ ¸äÜ": Œvœ#[DÇ”Ñ.à"sr‹èx€2Ú\rŽ@nPF»€‹@ÎÈ-±K¡P(”~–6´µÜS÷·��Ðr5�Ðy2�� È��(@ � � �€2�� È��(@ �вmmd�� �P€@�@��d�@§„&hÕ•® �P€@�@��d�� �P€@�@��d�� �P€@�@��d�� �P€@�@��d�� �P€@�@��d�� �P€@�@��d��¾9‘ÿ#¥a4ÑÞÞ����IEND®B`‚������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9p_CI.png�����������������������������������������0000664�0000000�0000000�00000025767�15030617045�0023152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Í���Ü���‹Zœ–���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��+ŒIDATx^íÝA¨åýÿñî³ÐnÄl¬!.²ˆ´Ö†È¯Ð„JS©4í¦‹üQ$ࢋØ?4 !ÔE›..؆þ P¸4ý¹ ü¹R(ŠVS5K0Pá¯H6"¿H²øY4ŠH˜_>çžçæ{ŸùÎóÌ™3Ï™¹÷¼_ðÅÜùÜsfΜsïûÌ3_«����$Ñ4���4Í���@M3���AÓ ���dÐ4���4Í���@M3���AÓ ���dÐ4���4Í���@M3���AÓ ���dôÖ4ík_£(Š¢(�@y½6ÍÀ²ãç`9Œé}æ3�‹AÓ ôˆŸƒå@Ó �ˇ¦è?˦�–M3Ð#~–M3�,šf Gü,šf�X>4Í@ø9X4Í�°|hšñs°hš`ùÐ4=âç`9Ð4Àò¡izÄÏÁr i€åCÓ ôˆŸƒå@Ó �ˇ¦è?˦�–Ï’4Í_U×ÖžœlãæÚ[]y©ºòÙÍé÷Ýrm­:Zû>[«•ËŸU_]^©v»ù´Ž®U×&Oè¬{çÓÕùfÖÍkÕ嵕êèÎðý‡ªgÿ^­ýöèd½³û²ºvy­Z9ºwú|ë¯ù½ó¿­\¹|kë¦_÷îêèÚO¿ 9ÚgØþÆô>ó™€ÅX’¦yÝMbu³úìò³Õ¡£g«÷mã\ýwµvôxµvíöw®û¬º¼²Þ¼n~.}ÿ£·›Z5 Msp³ºqþéjç¡3ÕÚŸþOuhõý[K"7?ªÎ?ý³êèêÿ¿µ¦àÖ6^Y«N<Ô¡iþ²úhíDõÄʹêü•ÓeáùvV»7í‹`½É÷3äÐÀ,šf�X>KÞ4ËÕ•Õ'ª'Ö>4Ml‰¦ùªó'þcÒ,ueµ:thµº²©kž6ð'ÎW¡½ÛóÕ‰GãõÈz¿—¦¹wËÑÀè¯ÿ5ùÅK¯w½–ë/czŸ—ã3�ãi¾å¦šØMM®mšo7ÊÖÌM³Ø?«V¯|që 5ÐONÿh=?«NœÿŸé×óJ5Æ)4ÍóØþ Ìú/ww>Q­¾ßÛ¯w[M3�,šfùêrµòàJuy#P¼{òšÖk}s³¨i®Yo`woœEÖ×§ªG7 ÑÈ=ǬÔüïpö¦yÛ¿Ñ/w‡üáEKdLïóöÿÌÀ8Ð4‹Û4§Ï4o–kxufùÑÍg‘kC'âçXo^×›öií¶Û˜CÓ<„qýè35ýåOŸ/¯U—Ïž¨êë?¯Ö>úrú}7ª+Ö\|z«>]­mŒƒý¼Ûª 5J¸ù~µzhç­õßú™úÓt[T·¾~öÒµ¨×øûóÕê‰CÓuí¬žø¯êòµ°ÝÃÑöŒÅ˜¶�¶3šf© §°Msé¦y2ücrÐ+ ×TsÞ¦q¯ÓëÝ;óišæyŒñç@Ÿ¿Gÿÿ§‹L'³Å|Q}´öóéÐ],z¼:tbmó,2Õ'Õågkë)ý‚¹71ûKú…q÷­Ïó߯ÜúdË—ÕµóÏT75ßZöëêè‰ÕÛ±jf™[Mÿ¡'ÖªæX}úxŸÿýïW}ôÑô«îÆø™€íˆ¦yÚ4Ô‡JôÕ4ëBßU;kÍk<DcýëC+—¦„Õ­i®>»T­ºõ:âÆ'‰¦yãû9±8T=}þ#óŸºÕÀ>ý¤×„6ü¥B¿`ÎrfÙqóÊÙêÉxxGôמ›ýµzúYïgÁ»`ñúxŸñ‹_LžçرcÕ_þò—êêÕ«Ód64Í�°KÞ4Y]»ôŸÕO´r®I¢ižü9ú?ü ütÆíгÕå°îÉ”sOV'ÖÞßÜ,Üü°Z{â§³7Í·Ú’ÏÞ?{ëõýguÉüIûæµËÕÚ­&|·{ÆŽ¦yãû9p†mXÿ…NÛìW}FŒÆ¿Ö´¦_{«¶gÓ_{´]§ãíÓ4‹åµµµIã¬çüÉO~Rýá¨þõ¯M¿#¯¯m�¤-IÓζÅMAË››4%ÖÙ±ÝÑ÷ÚF#Î7š‚x{ž¼Ý Oÿ½1ÖóVí<ºR­]ŽÇ{¶ ½UOT«½\]³Oè½îIqs“YhŸÊä—¶Ÿ7ü8ë_0ÔÌóó u¯5½››ñÄ/­z=žšoxHJ¼Ï®qñâÅê7¿ùÍÆÏŸþ­eŸþùô»êF÷™€mjIšf`1F÷sP»àÔJÑõôq–÷VCüÄ3QÓQÓ|ÔYÏêýÕãÕ“›æTFé÷YM²Î6ë¬ó¾}û&ëÓÙè—_~¹6Œƒÿ÷ÀbÐ4=ÛÏAîbЛ­UOÖ†'i63Õ‰Sßü׈>Îòª‰ßÿåFÍøÏÌïéGo+ZRôDuèéh›²è÷Y²Æ=ÛaúúÊ•+ü¿�„¦èÑ8~4¢az¸M3¶¬»yíRuvÓ´nªþj†5Ïþòà 7㉆$m yÒYå0'º¦4iÜÍ4xš¢nc¶ái›†¢a:ãüË_þrºß¾69#Æ�˜M3Ð#~–ÃXÞg5É¡iÃ84ZMµšk�@h𷔦 šéF(è‹ö=¶¿1½Ïv[4ZÃ64|CËçÎ�pM3Ð#~–ÃX›fK²Î8‡qÐ:=ëtv�€Ûhšñs°¶BÓl¥¦³c�´CÓ ôh©~&s@ïÜhÂ’µÍ† é5E—mi;�à6šf Gü,‡­Þ4[MÓÙ1Œ�6£izÄÏÁrØNM³OgÆA3�Ð4½âç`9lצÙR“¬fÙãP3Ítv�–M3Ð#~–Ã24Í1Ý}éì�,³^þo«ÿREQÃÔ¢1€eÄi1 GC40X¼1½ÏCoKÆÁtv�¶;Žð�€Þ„éìì0޵µ5†q�Øòhš�E0€í„¦�P\˜Î. ãÐ8è0Œƒéì�l4Í�€…b:;�[M3�`Pñtvaã Œ M3�`4RÓÙ1ŒÀhš�£d§³ Ã8˜ÎÀPhš�[ÓÙM3�`ËQ£¬†™éì�, M3�`Kc:;�‹@Ó �Ø6Ô$‡aa´ÎF3€yÑ4�¶­¦éì´¼OÌîl4Í�€¥†q”˜ÎN7gQCÞw3`<hš�K§i:»®Ã8Ô4ë9T:“ÍYg`û¡i�,½y§³³M³Š³ÎÀöCÓ �€áMg†q4Ñ÷Û¦9”ÇYg`{ i� †j„aj‚›¦³kjšUzLªá°5Ð4�Ђšä0ŒÃNg÷ë_ÿz2Ž9n–ãR³ÍYg`ë¢i�  ãXYY©¾ýío»M²Wj¶u–ÀÖCÓ �ÀÔ<{ rªtá 7[¶šf��:Òp‹0ãÆ¬õàƒN¦¸°5Ð4�ÐQ¸@pžâ¬3°5Ð4�ÐÁ¹sçÜ&¸ki�ãEÓ �ÀŒºŒcnSûÛß(Šê¡J i�`FN¡;þ…ÒŒ:S<oyŠ¢f¯hš� ïàOQÔìUM3��#áü)Šš½J i�`$¼ƒ?EQ³W 4Í��Œ„wð§(jö*¦�€‘ðþEÍ^%Ð4�0ÞÁŸ¢†¬·Þz«zçwª#GŽT?üpµwïÞI]¿~½z÷Ýw«7ÞxÃ}ÜÐUM3��#áü)jˆÒÍ{Þ~ûíꫯ¾š~:o5Ѽân'¯©½çªJ i�`$¼ƒÿ˜ë…^¨^~ùåêõ×_Ÿ”'}ÔÙI•²_|Ñ},5žÒÙbMÖû§³È;vì¨5Æmšã|×®]ÕêꪻŽEW 4Í��Œ„wð[©QVƒõñÇO¶ùòåË›*çz\(Ý&4Ü*Ù´ ··~jþÒþ=vìXµÿþÙJ5Æ’Êõ|chœK i�`$¼ƒÿXJMì›o¾¹ÑüZ¶)Ž3Iåm³K—.mj¸?øàƒM ·¶/4ÜçÏŸw_ò–šØÐ$[©æ7•I*×go;Y%Ð4�0ÞÁèÒYeY l#³Y.µÍryLËþùÏNëe*¢_ô‹Å7&û¡©Á•¶Y.·ô¹ñ¶kQUM3��#áü‡ªW_}urv·K“Ú6µÍr¹è65òá½¾íZ§OŸžœQž¥Á•¶Y.ô‹–·}‹ªê¯�� Â;ø/ºt!_8³7¢VÛ,—ÇÚfM¹†g¼òÊ+îkÛÎ¥3ËšÎ6°¶‰ úÈry0ä/,%Ô_5��„wð_TiL°Î,ÇrMj›,—ÇÚf6×8g5ÌÞkÛîÕvj¸ ,—ËÕ«WÝí]D•PÅ��`ÞÁ¿té ¥šM¯»|–LRy×Ll¦ñÊËÚ,«Nž<™m`ã¼k&©<Îô‹Œ·Í‹¨ê{�� Â;ø—*M§yyÛˆª¬®™¤ò®™h™.îó^Û¢K¿xh,±-5ò¶´Ì{ì<¥Y1ºÎ©Ü5“Tn—kÛ¼í^D•Pß��`ÞÁ¿D…¡q3j›Ô¾2Iå]2Í1Ôí›Õüê–ÒºØNS«Y¶aTÅÂr=N7±7ƒé2·±ÎäÚõ©b©¼k&©Ü.÷¶{UB}/��€Axÿ>륗^šÌ(ÑÔŒJ‰LRù,Ù¢o×|æÌ™I“¬5°M¡ÊJe’Êõuh¨µN½V{¦:”†d´ÝIå]3Iåa™·OQ%Ô÷���„wðï«â‹Ål#ë#Ëå±\¦3ãjú½×Öwi_é"¶»îºËm%,Ïe¹<ÖG–Ëcm³\Ó2oÿ.¢J¨¿B��0ïàßGi(C—FuÞ,—Çš2M¥¦1ØÞkë«tFùðáÛ~±\SØ&Ëå±>²\k›årKûÒÛ׋¨ê¯�� Â;øÏSj–5»DS3*¥³\‹³’Ã1tæZw®Óˆ¦ÆOúÈry¬,—ÇÚf¹<`ö ��P„wðïZv8†mDC3j•ÎryLË´ýº+¡÷Úæ-]t§ácœÛØê#Ëå±¶Y.Ÿ÷öÿ"ª„ú+��ƒðþ]Jg˜c¶IÕ™¤òTVjü².¢ ·˜Î5}qÞ5“T^"“TÞ5“Tg:‹ï½‹¨ê{�� Â;øÏR/¾øâ¦á1Û¤Æy‰LR¹—i:¹¾fÍ>n 7v±TÞ5“T^"“TÞ5“Tn—w™F¯¯*¡¾'��À ¼ƒÛÒÙe 7ðQ+•—È$•Ûå/^ìµaÖ™eMß–jìâLRy×LRy‰LRy×LR¹¾ÖÌ#Þ{²¨*¡¾��À ¼ƒ›R£Ïú`›QU¬t–Ëco¾ù¦ûÚº”îÐæ1njìÄf¹<Ö6Ëå±>²\k›årK7mñÞ›EU õW��áüs¥»û颹\“šËc}d¹<è«Á:wî\õðÃOŸõ¶¦ÆNl–Ëcm³\»ûûڷo_õüóÏW+++õãÿxS=öØc™¾ÿž{îé´Î¶Y.ýWbLú,UBý•�€AxÿTéB+ñÑÀf¹<ÖG–ËûºXLSÓíØ±£ucgÙ,—ÇÚfMù׿þõIƒ¬&S¯šà¸1žµyä‘jÏž=ëLmO›,—/ú®^•PÕ��`ÞÁ¿©BÃØF4f³\ë#kÊû˜RÎ^ä'¶y‹µÍry¬mò÷Þ{orùÔ©SnÓÛW}÷»ßÍnS¬mÖ”k,³Îø{ïÕ"«„ú+��ƒðþ^©ÙŒQÛ Æ™¤ò™4åúóý+¯¼â¾¶¶¥™f½È/•I*†[ÜÿýÕªýèGnƒ[ª4dc–íMe’Êõµ.¾ôÞ¯EW õ½��áüãÒŸñ½FTìò8“T^"“8Wì™>¼×Ö¶4ÚÅðš·.™¤òY²k×®MÞ«Òg“Û”šöÜöZ©Lšò1 ËUB}O��€Ax[š"7­\*“T^"“°\,Îs˜Cšš7éšI*OeºZøÙä\=ðÀîöÚ×1K&q®;,zïÙPUB}/��€AxÿP/¼ðÂäÆV›FµMë#‹óygT8vìØÆÙå˜mÞbm³\ Ëu÷Â… ÕñãÇ݆u õÜsϵz-¹¬)׌%Þ{6d•Põ��`ÞÁ?”æ1Î5ª1›åòXYÈç’¡Fûúõë­š·y³\n}ðÁ“ í¼&ul¥Y9¤éµHÛÌæz_‡ž¹©J¨ï��0ï௠ó0ÛFÔj›åòX™në­aÞëÊ•^·³ ©y úÈR¹¦‡ûYe¯BÓ,m^g.Si8ƼcÓKV õ½��áüu¦5L©f›ÑXÛ,—ÇæÉÔ0kX‰÷ºR¥)Ë>ܪy‹õ‘Åù'Ÿ|29«<¶±ÊmKÃ3¬¦×)¹LC14s‰÷¾©J¨ï��0ï௠ۤÆj*“T^"Óøë. ³Î^îÚµ+Û¼5å]3‰ó/¾øb2Ÿ²×ˆn¥Ò…€Vü:­¦Lgü5'¶÷ž±J¨b��À ⿚N Q°Rj*“TÞg¦†¹ËE45oA*ïšIX®¡?øÁÜ&t«U¸µ¶^g(+Îæ“>T•Pÿ´��€AÄþ×_}S3Ø&u–LRyÙÅ‹gn˜5CöÏ5o±TÞ5“íÔ0kHIÓkµËSÙSO=å¾oc®êŸ��0ˆøÀéÒ¥M ©e—Ï’I*Ÿ'Ó ñkÈUn8†]g’Ê»dº)Éc=æ6 [±t`Ók•\¦iþ¼÷mìUÂæ½��cú?*MMª´Íry¬KÖåævvŒ¦ÆMl–Ëcm3•¦‘ÛN ³Jc²ã×KeºU¹÷Þ½J¨ï��0{Ðçw¦Kûipsyl–¬K웕ÄRÍ›Íry¬Mvÿý÷»MçV/ • Úì‡8Ó½÷oìUB}¯�€A؃¾5CâFÕj›åòX›¬ËŒ0~y–æMl–Ëc©l«Ü¤¤KÙ¦YRû¡)ërQçÐUB}�€A؃¾.ŒµibsY.¥²W_}uÓ6çJÍW¸xSƒ&m³\‹3M)§1¿^³ÙG}ÿûßß(5æ»wï®î¼óÎÉzè¡ê‡?ü¡û¸>KëÅûÁò2ýÕÃ{?Ç\%Ô÷��„=臙3,ÛÀÎ’I*ï’ÍÚH9sfã&-b›3Û I*“TÞ6Û³gO¯ã—5KÅ÷¾÷½Éà0Å[›R­¦Ú{Î>JÏ­õXñ6X^¦qç[íls ›÷��Œ=è¿üò˵FUl;K&©¼m¦‹÷f³÷äÉ““YÚ4hA*“TžÊ4ÜܳK©QV¯sÖRó\⎃¡iVYvÝm²ëׯ»ïíX«„Í{ �� &>ðÛ)ç,ÛÄÎ’I*ÏeÚžYÏ8ꌴׄ]3Iå^¦×Ð×Ùe {¸ûî»kë™§4t£ÄüÐv–]Þ&Ó8{ï=c•°y�€ÁÄ~5)MM¬´ÍryÌË4‹Â¬ ³¦p³â&Ìj›åò˜–i¸D_C J4˶Ô8÷}a¢æž¶ëˆµÍT[¥q.¡¾w��À ¼ƒ¿šU¯‰ Úf¹<f35¿Þ¶¥Ê»ÃŸØ,Ö6Ëå.ôS£ï5’³–šîYÆ*Ï[}žq¾páÂdØçµÍTšbpìcœK¨ï��0ïà¯æD3NØ&6Ö6Ëå1_î2C†RNë#ËåjûŠ¡qÆ<ðÀ¦ç^DéŒs_³kœ:ujº‡úÛ÷úLÎ:¶}‘UB}¯��€AxÿP:Û›jpÛf¹<èÒ…_â&+ÖGæåºIÉ#<â6³–Îöªy×¹¨ÒÅÞvu©O>ùdº‡úÝ÷:ë|þüy÷ó+=NcÞõK–½•º¥W><™}Å{ަ*¡¾G��À ¼ƒ¿-ͨÑåâ@Iåq¦}Ö?¿Ÿ;wn£alƒ7C]3ñrm³Î¨z c—Ò¸âx=C”fçð¶oÖ C4$^‡•ʤ)Wó|úôi÷³aKŸÝ ²ËgEÓù­®®ºÏW õ½��áü½zå•Wª·Þz+ÛüÆR¹¾Ösv«ªF(œ)Œ…†'”Õ5“°¼Ï3Ë¡ÆÒ0«tÑ¡·³–Κ[ñz¬T&©\S êÌñ‘#G&M´>S*QÞ¿ããÄfq–éùÛœu.¡¾Å��`ÞÁ?U/¾øbõücÓY»Tc,^®?«±ñÖ‘+5ÙöOëq³#6‹ó.Y¸À¯ïfY5Äøå\õ5›†p+^•Ê$•wÍ$•‡ewÝu×ä5ïóª„úÖ�€Axÿ¶¥&Rgóôgr5Ñ^sliÙÅ‹g¾ÐÏ–ÖivÛì¨bófjútûé>ïägKC!ìvŒ¥úÛΠÇìºb6Ëå±¶Y.i™Îf{ŸÉP%Ô·�� Â;øÏSjj5”C·äViŽ]•fÅPæ=¦m…!1Ûì45<³fšg¸ï¹‹ãÒ,C^ô—«>fÒÐkÔõ|1»®˜Íry¬m–ËcZ–ß\B}+��À ¼ƒÿK wÓl–·Éc6{ï½÷ª••·ì»tÛ®{l¥íó¶{Ö²ÃObv}1›åòXÛ,—Ç4«†÷ùT•Pß��0ïà?¶²C2R Íry¬ÄÅ}¹Ò»Mc«¾†h?~|ÓóÆÚf¹<Ö6Ëå–>‡ÞgTUB}Ë��À ¼ƒÿØJc¦ÛÌÄ ¤ò8 ÷•¯œ«±7Í*o»»”~)±ÏkÙåq&©¼k&©<•5]XB}«�À ¼ƒÿ˜Ê»5vª¡‘T®¯uqŸÆ+k¼­×à-ª4p¼­c+ÝÊÛÛöYKC^âç¶R™¤ò®™¤ò¦¬iÖ—ê[ ��áüÇRº!…×´ˆ]gâåºÉsÏ=ç6uC”šö{î¹§¶­cªï|ç;î¶w)íÿøù­T&©¼k&©ÜËtQ«÷y-¡¾µ��`ÞÁ ¥©ìÄkZ‚T&aù}÷Ý×ÛÓ¾Kóçi¥³áÞvw)ýÂbß—PV*“TÞ5“Tgš ÆûÌ–PßR��0ïà?t…†9° KÌfq®3›cm–ãÒôn2¢zLcûº0Ô'Ÿ|2yoì:b6Ëå±¶Y.ÙŒ¦�€%äü‡,Ý®X·-ŽÙ¦%f3•šåEMW²tj5Ò:Û;Ô|ÎZ¯·m]+œm»ž˜Íry¬m–Ëca¹n×í}vK¨o��„wðª4“…æ\ÓÒ”é&¥oH2déµ qÚÛ–y*œm»ž˜Íry¬m–ËcZFÓ �ÀòþCÕ¬s1[.\|6ŒE•šgÍ�b÷EÉò¶až²g›Å®+f³\k›åòØéÓ§ÝÏo õµ�€Axÿ!JC*Û°ÄMKœi®å?þñns¶ÝK3[Äû£D•Þt¶YKå]3I婌¦�€%äü]'Ožœ©i Ë4]Û¢Î.kŒ´šÇEß50Wº€°ôMó¾}û¦ïæºx±TÞ5“TÞ”yŸaU õ-��ƒðþ‹¬ÕÕÕÆq̶a‰3Ýa®dìçÖ0{\´;½gÏžI>ÔÝãz衇Š],X¢iÖþÕ~´âõÆRy×LRyœqm��–”wð_duÇ|ùòe·ë«tA¢ºx½VX®±Åc¹aŠÎ:—¸YJ©iûÂüÔ±xý±>²\ Ëu‡Jïs¬*¡¾%��`ÞÁQ¥ùn­6M‹šÂRgw?^]»vmºÆÍÛ£ŠÙLc«u1¢žÃ{îEVßcK5ÍêÖ³ëÏå±¶Y.iÙSO=å~–U%Ô·�� Â;ø/¢t1Õ¬M‹Îþ–S|àÀÚp±Ûãm“—ažhÍñÜ× ¥šf•îÖÖ³ÛËcm³\;wîœûyV•Pß��0ï࿈ڵk×ÌMK©azÞ¦uŠÍr¹5ô 5n¸[t{ÏÝW•Ú÷Ò6ËåÁÇì~–C•Pß2��0ïà_º4,Ã6%¶1/Sê5]óV˜3Ø[§•Ês™Î¦9ë†÷®gû¾# WmÇ{y×LR¹—éöîÞç9T õ­��ƒðþ%KÙ}õÕW“u{Ig%Î2kH†¯3–ÊÛd:뻨)òâêzÖY³„xÏ×géÂÎx½±TÞ5“Tn—k†}v½Ït¨ê[ ��áüK–f°lc¢²Â2‰ôš­yJg~ÃN+¬3T,•·É´NMçmÓ"ê{ßûÞLgq[òEœíoÊ$•‡e‡v?϶J¨o-��„wð/Uš“ÙkL$,÷2ÍÉì5[ó”fÉH­Óf¹<Ö&Ó, CŽwns+nm£÷ؾK3ŽXñvÄúÈryLŸ]ï3m«„ú–��€AxÿRuõêÕdcÒ”õ}›lM 4­Sî½÷ÞdÞG¦!CÞ Eͳ7·³–iï1%ÊÞV[âí‰õ‘åò@Ÿ[ïóW õ-��ƒðþ%JãA¯1 ¼¬Ï¦RgwcZ×3Ï<S}øá‡›Ö«kÙÙ³g«ƒnÊäµ×^ÛXg–ç2 ÙèûƒYK7FѾ å}OÉÒÅ’1»T±>²\®ñ÷¹±Ì¡J¨o��„wð/QšyÀ²I,μ&«Kéb¸0$!Å®Ûã寿þú䯩3¦1›©4CÈnŽ2Dõî€GŽq?Ï^•Pß2��0ïà_¢öîÝ;]ã:Û°¨,»¼Ïqµñìqƒ„¼I*×ò_ýêWÓ¯Ò¯Sâ\w|þùçÝíßεoß¾}³û'λf’Êõµæ÷>ËMUB}«�À ¼ƒ‰jjLlYa™þlï5Y³Ö©S§6=¯Jg‡õ_Ë~g’Êí×wÜqÇô_ëËmż|ÙÎ:Û¦9ìËfqÞ5“¦\Ã2Μ9ã~–›ª„ú�€Axÿ¾K͇טˆ]îe}5ÍjB=ïã?>ýjýkû_Ë.Kåmk+æåËtÖYㆽ}`¥ò®™xùo¼á~–SUB}k�À ¼ƒßõÖ[oMÖ7&VSÖÇ�5/²·N+•{ÛeÍ’…ç ó²e8ëÿRã퇠,•klº÷9ÎU õ­��ƒðþ}×»ï¾;]Ûì Æ{MVÛÒÌö6Íž°ÜËí²T>K¦¯mżl»ŸuÖë³ì>°û!è#‹s É8yò¤ûnS%Ô_��„wðï»®\¹2]Ûº¦¦E¼Ìk²Ú–nÑ,öyíÍ4ìzÄ~g’ÊÛf¢¯mÅš2Ý”e‘ó'/¢t;óÜ>Èå±¶YÈÕ0w’a«„úÖ�€Axÿ¾KÓvÅâ¦ÅŠ3]Äç5[¹ZYY™<>ÏæcÏKeÒõ±Z®¹ƒð½MIeºpNSèy¯{«•Æ­·Ù¹<Ö6Ó,mçbNU õ-��ƒðþ}×Ã?\k\lÓ’Ëž{î9·ÙÊU|à =—îòþ­ò¤2éúX-·³jHø~ïq¹LsNy+î>J7uI½NIå]3Ñ2}6½Ïl—*¡¾Õ��`ÞÁ¿ïÒ™f¯q Ër™æWö®TéöÐÞóÆwö‹óT&]k¿Ö8kK™-«M¶gÏžê‘G©íƒ±—þ‚Æ2Û׍Хò.™†cè†;Þçµk•Pß��`ÞÁ¿ï²M³m\Ä.oÊtFÕkºšJMi¸ó_ü¼öÆ#AÈí÷vY*Ÿ5³Ã4DßcËj“ébG Ùèó–ã%KCKtã˾FU,•ϒݸqcîñË^•Pß ��`ÞÁ¿ïÒ…€qãbµÉf9“ªñ©ö±¡RRyîñ]2ÝX%ÖÊj›©yî:œeQ¥ í/5–}-q&©¼M6Ëm±g­ê{��� Â;ø÷]aʹ¦†Fr™æZö°¸ìÌ’z^+•çßgÖ5O¦ÒT}clž5mž†dØmÙ,—Çš2]>}ú´ûùì«J¨¿B��0ïàßw…››HSS#©LÊ÷š°¸â‹ÿÄ>ïX†gh™woѲP±¶YÈCó<ô° ]°ho`"ñ¶Z6Ëå1›iì²þÒá}.û®ê¯�� Â;ø÷]çÏŸŸ®mmjb©,7D#Üù/õ¼ºÛ›ÍãïMeÒõ±M™fóˆ¿W´,T¬mfsݽpáÂÂçxÖ´m§”‹Ù,—Ç´lÿþýÕêêªû™,Q%Ô_��„wð/Q:ãgå/ÓXe¯1SiX†½ó_üXÑ2Ížþí}¤2éúX/ûýïßø˜°|žÌËuÖ^¿`”šçYÏ«³ÛM·ÆŽµÍryðùçŸWo¿ý¶û9,Y%Ô_1��„wð/Q:ëgÙfÇ6<Ò”éliÓÙfÝ)Oš+úúÎ;ïÜøwœ©Lº>ÖË>ýôÓÉ6yYX6k&©Ü.×Y`3Öao¿¶-M§F\ yn³d’Êíò;v,l(†W%Ô÷��„wð/QÇŽK6<m³÷Þ{oS³¦³šáVÙAÓc%^æåAœI×Ǧ²Ÿþô§“e¡,»|–LRyS¦_>ÔHkú:•æ»VCJc“Õ+ÓüÙ©qÊöy¥k&©\_ë&%çÎs?{‹ªê{�� Â;ø—¨3gÎ46<¶¬¦L³š·lœÙŒ5=VΞ=;ý׺Çß'vY*.ÒÓ×¶¬®™¤ò™¤ò®™xùÇ<3ï}æ]%Ô÷��„wð/U»víÚÔðXq3dµÍryJ*Ï=~ž,ÎÃ2ïqm³\ë#Ëå±¶YS¾wïÞâSÈÍZ%Ô_=��„wð/Uºmq®š7Ëåž°¼é±A*ïšIœëëP±¶Y.õ‘åòXÛÌæ:³¬) ½Ï×ÐUB}Ï��€Axÿ’¥™ ¼f(è#ËåVêë8“TÞ5“xþh}O¨XÛ,—ÇúÈry¬m¦3Ëcm–C•Pß+��`ÞÁ¿dél³Ø†(ÖG–ËuÓ;î¸cšlÖôø •wÍâqÖ¾ß{LÛ,—ÇúÈry,•é?‡÷>Kc«ê{�� Â;ø—.ý‰Ý6Jq³Ô5“TgÞÝ%äMRy×Ì»;`ø~ïq©LRy‰LRù,Y¸‹ßX.ðk[%Ô÷2��„wð/]o¼ñÆdÝq³duÍ$•ÇÙ7¿ùÍi²Î~¿ýwÊ»f¢e¡,»|–LRy‰LRy.»ë®»&wlz긮UB}�€AxÿE”Î$J®‘ê’I*·Ë¿õ­om Óˆ¿Oì²TÞ5û}¡,»|–LRy‰LR¹—]¿~}ôã•ÛT õ½ ��áüU¦Ä”Õ6Ëå±°Ü6Ξ¦Çódq–yk›åòXY.é¬ò‘#GªÕÕU÷³±«„úž��ƒðþ‹ª—^z©ºqãÆtK†iÞÂòǼ1Ry×Lâ\_‡ŠµÍry¬,—‹Î*¿ýöÛîça«W õ= ��áüYcjœ<X}ãߘ.]_³Ëâ¼k&¿ûÝï¦ÿZ§ï k›åòX™—ë¦6ºúV«Ü¶J¨ïM��0ïà¿èSã¬úóŸÿ¼©yŽ5=‡tÉ>ýôÓêÎ;ïœ~u[ø~ï1m³\ë#Si>î­8Æ<UB}O�€Axÿ¡êêÕ«“mŠ0+•I*ïšÅRßÓ% CCâ,,›5“T^"S>|øð–™W¹ï*¡¾—�À ¼ƒÿõî»ïNæéM5h©LRy×LÂmÀƒø{æÉlY]3Iå}eú Î(kAïý\¦*¡þ®�€Axÿ¡K Ø<7@‘TÞ5“{ï½w2—°îà÷á‡n|÷½©ìÀÓ­Ó÷زºf’Ê»fº¥µÆ(o§™/ú¨êï(��„wðKéÌîŽ;›7»<Î$•wÍÄf‹üÚk¯M“õ;ûÙ²Íñ3Ï<3Š¡Æ;÷¼qÞ5“TÞ& Ã.¶ë¬}U õw�� Â;ø©t‘ æó Ís,4v¡b}d¹<Ö6Ëå±¶Y.Å™†Çhj8 •álrû*¡þn�€Axÿ1–¦+ ÍsÌ6}¡ñ³úÈry¬m–Ëcm³\ C.–õ"¾>ª„ú;��áüÇ\jž5¦ØNQ'¶!ôšÂ>²\k›åòXÛ¬)×/û÷ïŸ\À·n_=–*¡þ�€Axÿ­RšXŸæ–6 ã¼Y.µÍry¬m¦ÒE•|ðÁdLò2Í›¼è*¡þî�€Axÿ­XšqC¡î>gFË.Ÿ%“TÞ5“T>k¦_Ô ë‰“'O2ÔbÁUBý��áü·zi‡šFÍø &ÚòšÍ •I*ïšI*÷²ÐëõiòéÓ§·ý-ª·B•Pÿ´��€AxÿíVj(5vW³Aèl´.z³SÙY¶A3Iå]3±™¶MMqV¡ õK€šcïõQã¨êŸ��0ïà¿,¥fZ¨JCTº•·šÕTc-¶ÉyYh‚õ¼ºO°J¼zã·v•@Ó �ÀHxª¹Bƒ« ·*,ãvÒË[%Ð4�0ÞÁŸ¢¨Ù«šf��FÂ;øS5{•@Ó �ÀHxŠ¢f¯hš� ïàOQÔìUM3���AÓ ���dÐ4���4Í���@M3���AÓ ���dÐ4���4Í���@M3���AÓ ���dÐ4���4Í���@M3���AÓ ���dÐ4���4Í���@M3���AÓ ���dÐ4���4Í���@RUý/ÍBW•ÒÍ ¥����IEND®B`‚���������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9q_RIG.png����������������������������������������0000664�0000000�0000000�00000013167�15030617045�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Î���©���;‚»ç���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� IDATx^íݱk#×ÚÇñý3¢Ú­;“&•*5.’ÆE¶P!\la¬@…a‹kÞÀ€aÉ.ÞÀKËÀÂ%°k·1\{!…Q²FMX‚1dYŒxÞyF3öh4’ޤ‘朙ï‰,­,ëÑýæÌ™3���ÀBg���À�Á���0@p��� œ���g���À�Á���0@p��� œ���g���À�Á���0@p��� œ���¹çGÑh4­ �ØŽÜ‚3PulÕaK­ùÌÀvœœ°TÁ�ª‰à ä„í :Î�PMg 'lÕAp€j"89a;¨‚3�TÁÈ ÛAuœ šÎ@Nتƒà �ÕDprÂvPg�¨&‚3¶ƒê 8@5œœ°TÁ�ª‰à ä„í :Î�PMg 'lÕAp€jªFpúÒ ^£¾Îd«5Oå|p=Hý!~sgêqɶãõåî®/ÞNöýãv(þðnü”S¿{OÚ½?Ç÷Mù$þ/^s7zlMêíå?þsÙÓß=ÊÈÌרöÙ¥ GÑãBsþî¦/ÃèQc9¾Æ’Ñ÷Õ`K­ùÌÀvU#8+ ’{žô“ÉîöR¼Æ¡t¯’áù.ȺGÒôÿˆn?¸ë{ãp8ñ\úøÃq ¥!ôè!8ÇnzÒ®Èþ i4º2˜®*¤½çÒhžÉÕmâÎÛ+ñÛÄó/C_˾xýÛè¶Èhx!§Í=it¯dê%( ú;©÷éÞ&^cyT%ÄŒ†—rÔ[ÿÞû6µƒUn¶Ôº*Ÿ9�°Eµƒs`4èÊ~Ë—ëû¸‰à< rsGj˜ï®¤Ûx,ÝÁÇè¾Hâ¥w“gW4œCâwg„ãyÁy#¯±<*bô3Pß“f÷7I}ª*…à �ÕTùà,# ²OAw28߇åðVdéàü§ôÚ_D£¼¢e?5â«¿g·Ý“äØ÷ú²ƒóèÚ—Ö~Ö¨w`NpÞÌk,*„ý ìd1©‚3�TÁYn¥ï5ár„õoŠÛü)éàœAGxw:#µz{"¸<ÇJÒÁ9žŸ| Þõ’S56õËîí ù9®ŸAí”v½ÜÞ•–ÿ{Tÿ‘ÜÞ$æ¬kkHÛ¿šQóýýÉv0}ôd¦2èÿfWšÞ‹èµès·O/Róî·éuÛRW½-gýaöçvËôõ¬Ë–ç��˜Ë¥×u¢ó^*8/qž°(PާiìLŒÔêôa"pd<ÇÔI…~&GŽÓà<yÒßô ‘)Ëç\^cyè{`=¢²ÿt_K#ª}xÄ!šªþ£#þÄg"ÓýJç>\Çt[9˜sr« ýì7‚àüFÑ<ùÑð\:õÉéKáÏšéöQ€×¾ ø7ŽÄ¿þþ¤HyÔÚ–ç��˜Ë¥×u¢óžœÓS+&ƒób ‚s8$YK¶ÚÄ zóúâð>KjÄ9<‰ï {t/¶`ªFþ¯±<¬Ü›šÔ;ç5Bl'ÍYATÿÝÔ úyj.1œA·‡Ã³ÔTÔÎëèwñ;ÿ”~òÔPö4§"äQk[ž�`.—^׉Î{Fpžžï›opÖ“µÄ4Xzº†Þnœf„…uBizªF@CI«ž8TŸ2'8oæ5–‡}ÛAÖÑŽág3xÍúº3[:8ÏÜù\BðêtÒ¯grçu48“ÃÌpLpNËã9��æréuè¼3¾ôÃ¥ÙZGÆËÑe›œÇs:k™ÁEYë(Û_Ñm]êíÒlû÷‡°Ç>ɵÿTvó Î*s¾È¼à¼‘×XömúùkÎü,/»³í5—»ëŸÊWéà;±mÎÛþôï9\sªH>Î�PM¹ôºÖwÞááêé5³  Ì𷫇—ë©Çí>X¤ïŸuQ”DHˆæqÞŸ4´Z®ýþ쩳hI^�e" ƒníþwgýÝQ› J9¾Æ’Ñ÷Â.é¹ô“fìfÉc´WCq{:øNL ÑÇ<ÍXg|$·WgÒ:L.Yœ<jmËs��ÌåÒëÒynºó´›1M(¦ÓvÓG\¢U6Úžô†É¹ÏyŒöj?H툎§“L­Ð)A;M9½ŒVÐ ¥ï{Òl<O½¦âœ šréué¼{¶‚‘½tÜä ©! ¥g“K¾u_'ŽÌ<¹õÑŒ)H3Le‰âŒ§9–<ò’^"O—¯{X…ÃúºÖeËs��ÌåÒëÒylUBp€jÊ¥×¥óØª„à �Õ”K¯Kç½%3NrœnÕ¾IQô½G5äQk[ž�`.—^—Î`;¨‚3�TS.½.7Pµí`¼F¹þÍ‹[ùŽ€èßµ.[ž�`.—^—Î`;¨‚3�TS.½.7ÀvP%g�¨¦\z]:o€í JÎ�PM¹ôºtÞ�ÛA•œ šréuµó¦Ñh4Úö�`{èuœbª#ZÛò��sôº�P�B/�¸‡ž� @p�÷Ðs@Î�àzn�(�Á�ÜCÏ � 8€{è¹ �g�p=7�€à �î¡ç€œÀ=ôÜ�P�‚3�¸‡ž� @p�÷Ðs@Î�àzn�(�Á�ÜCÏ � 8€{è¹ �g�p=7�€à �î¡ç€œÀ=ôÜ�P�‚3�¸‡žXÒÅÅ…<~üXž={F£­ÜÎ�àzn` ß}÷]x~úé' 4ÚÊà �î¡ç üý÷ßrrr"Ÿþ¹¼ÿ>ú)��¨‚3°À‡äÉ“'a#4�P]g` Ê:ʬsRuÔ��TÁ˜AOÔЬóš��Î@†·o߆'oé��ÁHÑfiÖg��€Áˆèf=•3��@‚3Р¯œÁI€�� Á¥¦Ó-Þ½{Ýʯœ¡ë4š�À,g”–†à8Ï¢ÁZOdå ��°Á¥õý÷߇¡X[ÖHòË—/Ãû8 ��˜ 8£”ƒÁ}hÖ–\VNCt¼r†>��ÀÁ¥£ÁøË/¿œÎz;¾OO�ÔÛ¬œ��–ApFéÄS0Òí×_•ÝÝ]ùúë¯3§n���ÌCpF©¤§h$ÛgŸ}&ß~û-¡��¬„àŒÒÈš¢‘nz?óš�À*Î(YS4²Ú³gÏäÇÑ¿��XŒàŒR˜7Ec^ÓÕ5˜º��Lœá<“)³šŽ<³º��0Ap†ó–™¢7ifª��XÁN[fІ^ðÄ÷}3��X ÁÎ2¢¡Ñ+2—��¬ƒà g-š¢¡W¼¸¸ˆ ��°‚3œ4oІžðÇZÍ�� og8gÖ Nø��›Dp†s’S48á��l ÁN‰§hpÂ��Ø6‚3œ¡!ùää„þ��@!Î���€‚3���`€à ��� 8Ãzñ 4F£ÑhYMWÙÚÆ²´gXO7¸ZÙúØ…z¸Gk¦MWx¢ÙÕÞ½{^�Më£ÿÕÛ›ÀV ëñåâje7êcêá­u³›Ž8ëȳŽ@obéZªëÑI¹ƒZÙúØ…z¸GkFÝÜ aYC³†ç<§qP}XNÊÔÊnÔÇ.ÔÃ=Z3êæž<§qP}XNÊÔÊnÔÇ.ÔÃ=Z3êæ.q~ùòåZÓ8¨>¬G'åje7êcêá­usŸè'Ož„µÔýþýûèžÅ¨>¬G'åje7êcêá­us—dë¬5Ôà|qqÝcŽêÃztRî Vv£>v¡îÑšQ7÷h@Žç8kpÖåëVEõa=:)wP+»Q»P÷hͨ›tî²ïû÷«jèÿ³ª*NÊÔÊnÔÇ.ÔÃ=Z3êf·<¦cÌCõa=:)wP+»Q»P÷hͨ›4 Ç'ü­;cªëÚI®¤»,½›QôKܤçûòÊkÊN»'7Ñ‹Vº/”ÑPúgm©G_–ãv(þð.z€‰QP®‹ïÿŸx͆´{F?ß¾bêóQÝÃBÿîl72èu¥]¯ëZkÊéå0¨Öö”n{ÉôI†ýÞç°íHÓÿ#ºßöy݇m±Öü_¹~ŠîÜžøo€]t”9žÃ|rr’ë•Ó¨>¬Wh'uÓ“vmÙ ´I£à%u¤VoK×ÿE|ïñò_@T®/”¿¤ïí_Ðgru»jœúSzí/¤ÞþAüóWâ5žúY*¦>úÔ­úœjh¾êIËó¥†/ݹñ¥ÝØîNrùXð¾öO¥^kI÷jÝûÛߤÛz*žß—aXž`§ÇïH£€A­Yùëæ.½°IrNó&4Õ‡õŠì¤Fƒ®4]X6à<¦ä@¼þmt»x¥úB¹ë‹·s ÝÁÇèkÒ°]OúîƒR=jÓxœßû˜Ý®÷§B×m°£ÔÜêöTþ�¦ïiCÝ«5Fòg±ÐísoûÛ“Ö¬üusŸNÛˆ4sœQ9…tRáH󸃜jM_†ÑÃÔhؗׯ<iƯwĤÆAnr|)×ÂçØ•¦÷Z΃/ƒðv­³Ú(—…ÓHôï/Æâ7wÆïÿNðeú)1Å¢öTüëèîD´Õ¤ÞöeQs|²ÕÖ �Ùam»ôïØݱÛK½‡qKÅÑÃù¿„SƵɨK8*üF¼æîø9jAÈ}ó‹t[ãÛµµß[}½‡[ øúºíq'CÿpüÞ>ª;S,v¥åÿ}öodp~úÐßi›êó40×îO¶¼"´Þßþ FüwÀ~ñªñUó ÐTÖ+®“2˜›ަíK»Û»ÿ’G©áz4<—N£%Þù ø: …º5G3‡¾4- /ú % §ßü ¯:ÁÎÉ› &åÚ*»^_îF¿‹ß:¶5®CìöRN;¯å:õ>Þõ=ÙÍ-èj(yºæÈÛúЍÉC¸Íèô£^´„Û^31½#Ö½çÁvu*çQ@ /å¬ÝÈ)ˆéó{ÁvüÛägcì `áù7Ò}u|ÿ~®}i…GK>ÛÓ‘4¦vjþ’þéÿ<ì Æt'twÅyF×Ò;>^oúÇŠ´fVÖ 3ÅZë¦ó ×=iêÃzÅuR«@M…à9:é/”p„ôh­ù®ìö4F·mPìJ<bÖNï:Punø?äð~Ô,)«yÝíOȲýúèû~,ûK¿©Ö›žtý©›pç1uhy:_ö…xéª-°2€é{ª#þóh>q¬:„ÛËÑô<öMìÜß^‰ï½˜>ª·%Z3+놅t çx™: ÐË\f;‰êÃz…uR §BèáåIWG½¢ÎtÜÎ×ýUV¸Õçþêtùyé9;V«îèìg! $ÏêO·ôÔœƒnøû‹=1Péߺ]&Gm†ÒýCjÕ…dMô9Ž2k1sû2üî˧rVÀÈ¥Ú~=Ÿ|œ½RÖá U£d›^)#ïûÑðB^x?¯q²îúâ¿îÒ�¼Šà²E¡ú°^aÔÜÑ=dùt¼ºÅýáe59J}×?•¯²FÛt~^k‘²íÏÇ4Qèʼpºì‰DyÝ‚æc¦m¿>:šßœý9 §ÏìI½Ý•^rqâýÒ˜£ŒçÐ÷\Z«î<Þþ&g^·%Íbö°y;äËîLæ¹s?’Û«ŸÅ{q1= ¾eZ3ûê†eéô ]¶Nk©k?/ƒêÃzEuRsç¸j°Ú?šž‚‘ H™Ï¡‡Û ÙYk¤L¿}ëKú…2/œêûuxf\sº&ó|·aëõY0Ç5|_‚ÈÉCÿééØR£ÖÑòqõÆ Gôß¾Ï{š§»}ö°y;ä„—ØYÏk羸©4Y´föÕ ¦ò8aêÃzÅtRã9®uï2ê¬õËößáYÿãÍRÁU7ûã•5&Î¯|y„‡‚ã/û]©××\×ÖÂU‘_(óOæÓ#mi¥Oþ WÙèÈqjNt¾A׎ÕÖ룟Óú©ô〪±Ðh¢eùÒï³®Pã‡+kì%‚r°ÝôO¥q¿žöx ßzí ©±ìQ즯#yBï¶XÀíè\ûrØJ¯k®«l¼öqjNt;÷™ó™óÉ^žÖ̺ºa¡<WØ ú°^a”.º/}´ZÓ“W¯ãøƒ/ó«³Ä’LºÄ\÷a©,]-ü>ÃòÃÕɼóÿJѼÏ,3—I[á*\¢¯g»t4rƲWS«–¤¯`Öv÷_Ñ0Ôœ9œ+,¨A~'ë¹–¾ò`~ô÷o—^h¤õ°üŸ~þ_ý’xÏ3îÿùaiLJ£2QXŽWÓÕ®þ³t0 rü»Rmýåì–§¿×³?«ÓK0Þ¯fݯ÷yݸââì÷8¹3dbÎö¸ôså'~ pÃ&–¤£ú°^ù:©ó>ÆŠÝJUKº,ƒíÅ=Z3êæ É˜µixÎ Õ‡õÊÕIGÎSó:Ë/»•¦>áy‰‹r¸‰íÅ=Z3êf7 ÌñU50ë¨sž¨>¬çv'¥'È$¯žÖöÙeág†o _(vs¶>z²æÄ•êÚr–˜à*¶÷ÄŸAØgÓ9Fõa=:)wP+»Q»P÷hͨ›}4(k]48o*0Ǩ>¬WÎNjÞ‰/éV/üŠs¦ôõ–’®0÷*‰vb¨}ôõ•ɼ“ýÒm­å7D_We”hÒû¼}û6mÖu™W½*  ªëÑI¹ƒZÙúØ…z¸GkFÝ야*`ž'&Q}XNÊÔÊnÔÇ.ÔÃ=Z3êf?}Ö:iˆ^ö’Ú‹P}XNÊÔÊnÔÇ.ÔÃ=Z3êæ®¡Ó6tú†é¼P}XNÊÔÊnÔÇ.ÔÃ=Z3êæ–øÄA}ÎãÄAªëÑI¹ƒZÙúØ…z¸GkFÝÜ££ÏñRuïÞ½‹~ºªëÑI¹ƒZÙúØ…z¸GkFÝܤ£Í/_¾ ëwrr²òè3Õ‡õè¤ÜA­ìF}ìB=Ü£5£•§ ƒ¨²æØja½¬;F£ÑhE4¸OG›uîó*Wä���� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8���Î���€‚3���`€à ��� 8��� ‰ü?‘‡–~�!����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9r_ID.png�����������������������������������������0000664�0000000�0000000�00000022044�15030617045�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ã���Ø���î3���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��#¹IDATx^íÝ¿‹Ûè¾ÇñéÎßàÚÍ)¦9 ÛlåÊÍIq¦8)\˜À) ¬ÁE ņ†%–0L.,,‚…ÃÂfÀÜ&° ×Ü\X.ƒa¹,Éà&,Ë0œ !˜ïÕW¿,É’GöÈ~$?ï<$þ1²¬GzôÑ£Gòž����–" ��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€µÃ���°a���Ö" ��ÀZ„a���X‹0 ���k†��`­ÒÃðÞù���õ°‘0L¡P(”í�ÀêèJÆ6`*Õ5ë�¬‡0 ”ŒmÀ„a�¨?Â0P2¶{† þÃ@ÉØìA€ú# %c°a�ê0 ”ŒmÀ„a�¨?Â0P2¶{† þÃ@ÉØìA€ú# %c°a�ê0 ”ŒmÀ„a�¨?Â0P2¶{† þ, ÃoÅé4½yL”FGg¹Þ%òI¦Îñâûâ¥9ñ'÷ã4³^KÇ‘iÞ4}]ͼWÓfÓ±8ƒŽ4Â÷¶zrú“#ÏüÏ]Ͳïs,Î4œ`Ñåƒet™ÁUªkÖ;�XeaX]ËØ ™ƒq<Úýî>wO:ß“oêH' ³1ŸÆ2B©†áƒÁØ›JÃäá|Ú™?“«Q_í¯ÄyqOÚà ÷™¤ÙôLúíc^\Ϩ+™8}i!|}©y\°ÂòA&kBÉl*ãÓž´Üï«ßÙ/ñƒ«ÝW¥º¶f½€’†C³ >çòcð„k#aø½ŒzŸ{!øÓd(íöP&‰4¬Á³#½ÑûàqÙÖ Ã®¬åƒLv„]O¥Ñ9•‹ëì³6 @ý†#d2ìHÇy<vÅÃl,�Ç­†¯FÒkÉpòÁ} Áø8ø@?g?øÄí­†³–2YJt=m†ë±½Ã�P„á˜d°ui˜u¿~'¯Ü8Dᦠé‘höFâ€ÐÇå0>TB?óÖC!–Y7 g,dªÞ6 uŒ×uëclxCãÁ¼·ÿz"gnÝGãÔ÷Òê92‰÷üz!8|=^™C~r陆vÃþ"6ÔÂ}|r>MMçJ&£¡ôZîû½÷µ¥wz.ÓM/®@ç§*ª4/�P'„á˜Ì0|CÏpÒMAS{‚“C ´§ø06Tb! Ç‚LPš· ¤„áM«ê60› åðÑ ù®$ÁnÈý —ÎÙ×:ý*N÷HzÎ…»Ä\ŸËIÿ{¹LO]ö£ƒº5éºßt×µèâÌ2=‘V|èÐìRFýcé GQ(ŸMÏå´w$]ç×âá{Cʨë²Ö—ª®w�Pu¥·žÕoóžÞqáaþ0‰B–M #mwùè2J–Øéæe¡»P ¿Éºa8cù S5·ðŽ"mé.S!RÏP|)Ç™áR×—‡©‹âtZVë Î0›œÊqz‰uü£ÖŸÉÉøw籠ôA¤!eÔuYëK5×;�¨¾Ò[Ïê7È9aÏëë&Ç@–†uÌí‘4zÓÒC%´÷Xç/#�˜ ÃYË™ª¹ dœ•…CÜùÎ.é;DäŸ=(N×ûgn0OÍO|›Óù:>ͼ„áeM�lSzëYý9cG>›ÊùÉé½µZ®%AÓ Ÿg‡ݱ·Od>“~ç±8“Tl¾t¤»o ç-dªä6à­²o{¶êAÖ²i¦ëÙÃ…ƒ«ÄPœ%ÛŸ7äã¶Ã4J@€ú+½õ¬vƒ¬ApýÝÈ««abᢢæ|HAúõhŸþœyœ?.²{m_:GÆÓunm–ý}üÂn”M—Yå,ëI]Ö›¥”^Yw]ë>IÝ5E×ÓØP à ·t]ÿ,Ãn¯·ù+£®ËZ_*¹Þ@ ”ÞzÒ ÃvUÜ–_ð¦cs{‹=ÿÞÝ%úò85Ƹ”^Y Ô g9t(ÇQ쬄>nKçäupçˆ2;2èeŒ{6ƒ0 �õWzëIƒ ÛUgС-o~KúÁ4¿IÞ¾lø¯Ø™ÌûâtܲägÅ¥ÎRDwN‰Ÿ•ˆ­HÝî­Ñ9‘³Ôð!“tžn«Œi¨²¦�¶)½õ¤A†íØìA€ú+½õ¤A†íØìA€ú+½õ¤AÞ†œ Ý2Êí~ ëÐå;”Q×e­/¬w�°žÒ[OdØŽmÀ„a�¨¿Ò[OdØÎ¶m ÿ—Ë®©Ðït[eLC•5�°Mé­' 2lÇ6`Â0�Ô_é­' 2lÇ6`Â0�Ô_é­' 2lÇ6`Â0�Ô_é­' 2lÇ6`Â0�Ô_é­' 2lÇ6`Â0�Ô_©­§6Æ …B1S��«£õJF(±Gu]ÖúÂz�ë¡õ�ƒ±�`­0�D�³h…À Â0�˜E+ �†À,Za�0ˆ0 �fÑ €A„a�0‹V� " €Y´Â�`a�Ì¢�ƒÃ�`­0�D�³h…À Â0�˜E+ �†À,Za�0ˆ0 �fÑ €A„a�0‹V� " €Y´Â�`a�Ì¢�ƒÃ�`­0�D�³h…À Â0�˜E+ ì¨?þøC^¾|)ŽãP*\Ã�`­0°£ž>}*GGG™ŒRB�³h…¤!ë³Ï>“wïÞÏ��€,„a`ǼyóÆëmÔ�Àr„a`‡hO°ökÏ0��¸aØzÁÜýû÷½±Â�� Â0°#4kÖP ��Š! ;€ æ��Xa¨¹ÉdÂs��¬‰0 ÔØo¿ýÆs��Üa¨°×¯_ÿ[Äs��Üa¨0íõ}õêUð(éùóçrçÎ.˜�àÃ@Ei¯°ŽÞßß_¼¹`�€Û# õÅ_xaXËË—/ƒgçÌ-B��Š! ¤=¾a‹>÷Ë/¿È_þò—D8��ë# ¤ãÓaøïÿ»üío“¿þõ¯Á»��Àm†ŠÑñÁ:8†µüùÏ–ÑhÄEs��”„0 TŒ^—„ÿô§?%ë-Õô½z¯a��°Â0P1z»´xè-R¸×0��ë! Þ)b•¢Ó1l�€õ† ÑÞ¬À›UäÍ›7Á_�€u†ŠÐ±¿Y¡7«è=ˆé �àöÃ@E8Ž“|Ó%ïç™�ÀêÃ@EäÝN-,÷ïßçç—�(a¨�ýiå¬�.’�`3Ã@èà¬ÌEr��la0,ïÂ9.’�`óÀaÏŸ?_Â\$�Àv†ƒ´ç7~áÉ�°]„aÀ ø…s\$W}ZO¨.êÇ>Zç:¤ŒR½¢û·ºìÓh9�ƒ´'8 à …BY½è=Ú)Õ+wîÜñÎ|jG^Se„aÀÉdâ=kcŽz ®ªú±u^mz7¤p?÷ôéÓÊÞ‰µ0$<R¦1¯êªÚ¨ûPçõ û;½X\{еÇX/¯Ò Ö"À0óú ®ªú±u^/€5‡C(4 Wak`y}PWÕFý؇:¯¯ø ý×ä Ö"À0óú ®ªú±u^Ú3^L®=Æz=Ͷ±†Ñ˜×uUmÔ}¨óúÒ!zûµ* ™`- £1¯êªÚ¨ûPçõ£Wo·V¥‹éX‹�ÃhÌ냺ª6êÇ>Ôy}è𽽚֙é1Âi¬E€a4æõA]Uõcê¼Úª4bÖ"À0ûó™\úÒhôet5 ž«;w¼ïeÔ;Fo$WÁ3UE0²u^MU ± k`Øn6æ×2´¼ïÖŒåSð¬ïƒL†G²×ʤ^Yxgw¼ŸÆiºßm¯9q²²Üc— ¶›Ò^¸‡1ÕF0²}uþQ¦ão¤×jxßÝ/Mé8oƒ×ÍÓ ¬XçM‡EÔ-`Øî6æŸdêô¤7z<®¿ÞñNéÖ ÷w™íÔ®×ÇÞg%˾t?Êä:vÈà.ÓÎÂûâ¥%ƒñµÈ ™õzXŽÅ™G) Ó<È߯fS;é4Â÷¶¥wz&γŽÿ¹…Ín÷öÝ¿ýÝ:=/G¦‰÷f•rƒ›NóF‰å[^©ùoþ%?ö¢Ç‹¥aø p&×ãi5º2¼¨ö–ª½ÀŽãD=Ã:T¢ÊÀaÚÈî&Ý)>”áäCð¸þv·®4/œÈÝôþ.³ÍúÑÞôƒÄY?¨´;§rÄòVœÎÃy˜èö„R ka¯¼¶çgTrþþj$½Æ‘¼p¾’vÖY–Ù¥ŒúGÒþì~RÈlj#½V{Å0ì Ï 4ºŽ\FŸ—žßØ÷R8£3úÞ‡ÛïCiµÒC~ôLÕ±õ,ÈáãhøÖl2tëS¾ÒáBGk-·òèwh×â,M( ÅZOz/a÷.‚0 ¶ý€ Sp?W‹¿ ÆñzÏ­Ñss=‘Ѱ'-ïïÒê92¹þUœî“ù¸à¼ÞõÐìK§÷ÀŸN«'CçEp:°-ýÑ¥ñÀöë*^/n‰vÌñ:\µ·êJ&£áü4k«/Îä7· ’½øÑÐ -‰ñݱžÑÆ=é=j{óÐê½'\Zn½O?ïß§mY ÃJë¥+]ç×X}l" ë…†àO:Œå^ê 3æ%÷ô{ßùÙ ùºýyl]©Kv—£Û¿vb}Ö{ì-?/üFºŒËa¸méÁGs•ë´Þšþv¢ßÿãTƧÁöÑx Îe¸}¸ÛãÙI¬÷^·Ý&ã5§Ë4§·½&ÃÍtè„^<§ó¬w’¨Z(& †iã°u ½FîÎóâT:íÕCÌlz&ývWÎX¦Ú(Ϧr~ґ潎Ü;Ìj¨u'ÑYì1öÂrzƒ‹¶¼^¶Oþ©Á 4úFêÊ[ŸgÞßÝä]i ΃:, ¬÷#c¯ž?ÊôünX¹+{Ýì^| 3ËÞ Ëaèõz)Ýo}òçËDïÕ6ë'; »‹8Ñ›¨âa6C+‡áø:‘ mýœ£äg üï|.¿'¶Çš„a]Gµ=òba>Õ<WÎ2ÔõáðÑ ùÎÛît͹tȾ·¼>ºÿè´hçAüóÝmèäY,0t=ٯ߅ÇqŠÃŸ`®Ò%Àaf–ëúgvŽÜðùV®Ü ÜíþCÎWîÍswÊýþb£†Ù¬ž©œ="’;¢Å€a†™ºŠõF‹,ï”ü2:/å8Ñk©‚éçÜÝCÐþB=jhgjušzm‹ª†½e[ë!ôJ0N8W:\fH÷R†A/ª>ýLÛ[ø0©è;Ïô¬O+è¿a~a¸|EëÜ ¥ÞzìŸU‰Ú&]vÝŒ¶Å»pôAFþ*üe“{fËýìþq|ÈI(ç !çÀ´Ž´g8ŠùÑ ÀrÛÜ/¸>—A«ôÀ®ÞÂÎw0iÚ˜?Èì̶~ ó{Kôa|G”?­m3VWºÃnÍ{nµÞÚ3B–Èísåîdó‚­ìÌÇO&ë4§ç ¶Y?«…áz†n—Á¶ÒLlwZþ©~_: ‡¡,vz}€ÿÎ^·Nd|ýqùüV" ë2K y¶'ýw³æ}á�cZ/‡9½Ë~(OÔI¢,WË]çjLx#¼±Ž-6Š Ã€aÚð™áîÄF_JçÑ£µ†Gø;˜'ÒÍìÌÛ ¤Bo$ºtG´î@7sÊwæêJ—g+X>: á^j\jºL³zÀ‚:I†«P2ôF+©:5x*w›õ“L4üå“(â†0ì-ûømµÂ;¾,t äÙ’ßY× ªñ³\V> §¿s8ïÿ+¿žI¿p;µ¢¥½Ë«Öƒ¹3.ÛŽ'ÖPl"†Ê5æe‹Ÿfÿà†â'+žrWy!êJ.†]iìÅz2#Ú Wn'èÎiÞ³•èqöv(é „Ì0SW*\Ögr©õ–¸š¿ à �cÅ9áåõ&'zÍ’uêõ:•»ÍúÉÃþÐäøÝrð·|³†´$êD×—ÇÒÎO^Vv?åÒ‘nó‘ _t+†ÓuàoOöWâ¼x¼B;µ¢D¤égd}vžd¹+ÒÃ%L!& †m?`e],§ö8g繄wºÞm Ã{^^_ˆÓ;”Vçž´2w€9 z¢715,Bw(Q/±YæÂp‚>—VkÅá¿Gy~Ñä•Lœ¾;=÷¹¼[måìÌ5ÍÇkЇE”Ô£¶&³aØ¿±ÛMT–†5@ÅÆ»&è¶¥!7¸°w±¤蜋ä6í÷½[JöשCo¹W: gµ!ú\ã@ZÚ.œÅˆ¯ÓëKn'‹ô`âxa}Ñ»K|%½ÇgþÉ¡¼ÓšªJ†ö¹÷•ûyú™óÛeiÃ?¿À'w§–É Ö“eÐÙþ^oê.S·‘÷o•v,Î}›ú‘€x9’ê}R£Çú㺃ÿzÝÇhžc?<`ˆÎ“1zÀÐÜ_}xDÜõDÎàVmz;´od<ý%¨£ø^›×OªhOÚ?cãu8€7_úX/ {ï…µèµàc·E?wó2Æßz¥ànäCí±Í¸}V´Ó¯çýGl¬©þèFx;¯ 4:qÆÓסôgÇ.ôBåb»¡A0º5_TÊ߆uºË$Ú¼Ä8\ÿÀ"¾žfÏóM<¦åÔ£WϖͦçrÚÓÛêëþ- ¿ÕOrþãeÉ­TXÕBpˆ0 ¦êÁ\]éé÷Ò\gx„EØ–ìC×CUCpˆµ0ŒÆ¼>LÕ•?63~£~da[²u^mïÞ½‹BðÓ§O+‚C¬E€a4æõ±Õº N?ëgÎKÖE‰±-Ù‡:¯& ½á"4 kÏp•±†Ñ˜×uUmÔ}¨óêyõê•W/z›´ª‡àk`XeóÜû—f” ^^eúÝ«"ÿšŲÚE‘õ¥ßEå]˜Q*¼½ëümVp¡]z™d–U/¶Û]úºL´WØô¯ËA˦ 꺪6êÇ>Ôyuéxáð×åô—檌µ0ŒÆ¼>¨«j£~ìCW›ö ¿|ùÒ«'½€®ª½Ä¬E€a4æõA]Uõcê¼tì°öWu1k`y}PWÕFý؇:¯íÖÞa­3í-®R/1k`y}PWÕFý؇:¯?¬=Ä:ž¸*½Ä¬E€a4æõA]Uõc꼞´W8ü1½ó„i¬E€a4æõA]Uõcê¼ÞôžÄÚK|ÿþ}ïiCN¡P(ŠíE{ŠMbÂ0�¤ 6�`·Ð²��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€µÃ���°a���Ö" ��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€µÃ���°a���Ö" ��ÀZ„a���X‹0 ���k†��`-Â0�”hooB¡P(,e# †½{÷Nîß¿Ÿ¹ÁSê[°;¨ÏÝEÝÖ˦ꋵ�¨Çq¼ ýéÓ§òÇÏ¢nعîêtwQ·õB,ööÙgòæÍ›àYÔ ;×ÝCî.ê¶^ÀEè%®/v®»‡:Ý]Ôm½†ËÐK\Oì\wuº»¨Ûz! –¢—¸^عîêtwQ·õB,6™LäÎ;^/±þÕÅÎu÷P§»‹º­Â0`9í~ùò¥×è¿ôW;×ÝCî.ê¶^Ã�<a/±z‰«‡ëî¡Nwu[/„a�òÛo¿ÉóçϽá‹/¾ W;×ÝCî.ê¶^ÀÅÁõ±±ëÕHzéÞO`[L»‹º­Â0`!£!xêHÇý\ýì½½º…°2™çM5Ö³ÉPÚ{G2œ|žYǶ—Ë[q:Í`Ú“Fo$WÁ+u²©:…yÔmùfÓs9íµ£íÞ+G¦Áë·±©úb-�*¨Z=ÁhŠ3ý<®ƒ÷2굤㼠oϦër˜Z.ŸÜc«‡Fê£ Õ®Sóô@í¨ës´¤3üY®ƒ§ÊD,PÉáŸÆ28ȸNYxv!Ãö½[ö¢®§Ò;WcËåZÆƒŽ Æ›Ø=ni™™\úÒ(©çoÛ¨Ûr}¤ÙÊd<Q2Â0°Ã¶‚¯'r擆ûYúy{{ iõ™\g·^ù½>3wR?Ê ³LGK[zÎ…}´'ðØ®qOzô”™~Î q†=iéó­'2š~,0­àÞ0=w§ûL^ÄNÁ5:ÿóh:Úóy›F¼'{·gSŸó+ÍÁØûõé4Ê£!²Í[Ö0ƒr—ËÍõà÷òu»×rîo2#½VÃ}¼/]çWw*)ÂËè*kûèþýò]´Næ¬Z_Î@:Ø| ¿–^÷4Øñ™÷õè´G‡ÞÜ“öðb±Þk ”º½qÝTW2 ƒí$xÏé¹LgEÛÊËhnô~‹h›‹O+ø¨¢bCá´ÝûÞÐè:r¹Âvå…àèõx¹íЮ$æ&°…齂·Ú<ûUœîÑb@¸>—“þ÷Aã§½>å0cG7»t¤Ûî‹3‰Ç3·á-ý y dz½ ÀöƒÓg¿»!ïn´-2-^úÒìœÈYø¾™»ƒè.ìˆo>m«ŸO:ƒç¡Ë›ÖÝ[ŸÊßLc­;Ì9£¼åR¬^À}$ÃïK;ølïï÷3Î"hÝf÷ya¾Õ“áh¬“®:Éz¸þY†Ý2øî?£úšM_ˉ»ƒVš÷mj<§N,phúZ†=wùFABCÉÈ}.<àÑ÷|#cݶ¢Pãn_½A€r—©ó"Lmé.eæmƒú¾éýOò`Ð}ÿéxºÂr z„ÿO”fj;*rÀ£ß/ºüøƒ[ïþãM7×ißJuÓßÝ€<нGƒçQtðX¬­ôÛVÇÖBÛ5ŸÖjüë O¥ßîÊàÌݽýÄ]ïLÎjÛ•¼»û— ^“pëúÊA {õê•÷ËrZ^¿~<» ºóúRŽ3̼qÁy\½w_·¼ {ctÇì2M…n±ßz㯙–Ò¿y¼ÐË ;‘ƒDon~€lp¸Àfëe;™²–KÑzxÌ 5ý³{¤n>8‰K¯sº;æßƒÇ¡øŠó¾¢Mí€}Wr1|(ÝÁ·2Šf¦r~âÇF¸½¸aÒÝv;½aâ=fÛažn_Í ôgS¹¸þä—iE§®u[?”N·ç}Ê5›ž¹aÈm²–á2K{ý}7ðè÷{T©è"¬ žrW·«Û"ëæG¹tžÉÉÂ{\ÑAbjyä¶•Ú´¥58ê-ä-ãµÖóà"×Ä™ºÐªÛ•N«³‘v5Dv˜ö;Žãbý1„b/�†§Õ²Jj';${ oæ4‚â5’ºC>ŠÆ‰&ëy£YlZJæg©®îtÒf¥ÃTí© N3z=hŽ»üç=;·¡ó\:¯îdÔ*g¹¯ôF ¸YóÐ@÷}Ø{ÿ¼Øº¸¤W9´Ú¼¯N§±ÚÃö•t2Â6‚ 8»ü^ú'ïñ¶±ãùv}ÏäÁSâ5/4f¸t@-¨@ý,J­‹î4úÇáiù˜dnr«º-òÝuÛ=Ž—ˆ‰þ¾X[¹ôÀC§å­¼¬ôïšaðNZy»ÚÂõ%ú¹›@*d£¡x†*ço{3$œžöÿ‰õ|š–Ò¿¹›ÞñèN?}aÖ½A/Û¼÷l}i¬u‡•5ü@•´\ ׃g•à”5/.ïTì´â½*0ŠÌ×jó¾ºMí€ãa6Ÿ.ëÅž_ø÷ÿNn_‰m/ÞKé¾äœ¼k�®FO¤»bΟ^àÆý~Ú»ºõuÚw7X¯ê6u[h½[è£eW°­\Ú¸¯õûEϾÌy7gþVÝ®–M«,›Ú Ã@…¡X7üû÷ï—3–xYE޼Æm69•ãeÃT"Ô${‚¼é†½^E¦¥ÜJwa§›Ñsßy¬bÝ¿KÙDcí4ƒÇ %-—Âõà)â‰ýœ÷¢‹tB‹C9òwÈÚ»ÿ“×›¿Ú¼¯nS;`¯Nn<@ͨË.[¯§ðßɃ“DhŠ÷§‚V‚¾öLú9g²%ƒö‚B<:3Ö¥õÂùª6†ç릆³²½±Æ=Bá¶Òý4t&N‡kôŠm ‹Û[ÜjÛÕòi•…0 X¨Ü»LèØµžtÓ÷ôî.Ñ—ÇÞXø%›îäŽÝØE<‚ÀôÞØ3ÝQìG!-Þ+©Ó÷bÝ<­…¿ %vúÝù´Ndyp¿ßè»tÂ÷éß4»ÉÏó–AWÚY§«WT~c½l'Sâr)TU;ú¹tÀŸMÇâxX¥~àEï[Úy»€GçI/$;’ÎÉk¼ò*ó¾ax6ýoùOï;çõèûcýk�’'‰e댄ãã5he_Œ¦Ë9q÷ƒ"âA{Q±ž¬ihÝ9Òkµ3{ŒËt«º-²nzuÓŽ=Ö ¬Kã»ýP}s[©z׉ø8ýùç­wñÜòú[m»J†øM! +/ÇÆÊºÓòoô/ÿŠt6Äó_ K–ÔâáЂðu{ûýØm¤ýnôwÚ³¬;ý¦>Ö[q½Ÿ¿ö:çNK_LÎStë3 wáû½×ºó«Üõªôï~ˆ¾ã§ñ‰vîÍ?KKââžÛÑéÝÞ²zh=qå.ÏÒzðwÚÙ·O çÉ{W°ÓÎzŸ[¢yʘŸoç·§šßâ.Øù&î´ðB¾Oßùà†y¿ ÞfhÞƒäÝ]ô eØ“vtk<?5c·Êó܃·0%NR½µ‰£p /´óÞàßòk‹ç¼ééX×pü±Në[·®‚;:àqë×Ý&ÛÞÅ~:Gî4œ¾´ŸKëó¼qòå¹]Ý\7½ƒíðNzÛÃðBÁUÚÊ¡·ìçÿâÊhZqÒŸw“è32Jºû¦íÊ;ØÊ¾ew�Ñéna¨ ÅOŸ>õýW£Z6ÕXÜÖi*(e‡x7 žÌïc«Á ¼Sçáßzãp5`û÷¦öî½î¾öö'¯'úü­ë/ÿoö¥3p’E…¹aðâ4v]ÖÄÂ`Ñž �ïóÂâÅO7Þ¥¢ úyµ3ÜÈ6›ª/Zm &´78ìÖqÄzqŽ-FµÔfçŠÂv¥N½àœ8[PaycmKV›ºÍndÂ0`! »zõÎÚhÞøsàVûg7êtÙØóŠ¹¾gíq°«©~ݦ†Rhif3·Á¦ê‹V¨ wïÞyÁ7¼Åšþ0½ÀõPý+VUû:Í×9¢PÚë µpKkÕ_Ã[Ÿ~êcSõÅZ�TˆöëÝàuLð›7o‚WPì\wuº»v¡n“ãÆ——J­A¿Ã&°…†éEp/_¾ŒzõþÂ\W_›j¬aÎî×iÆ©øÜ¢w9ØìíζI¿êcSõÅZ�¤Cž` Â:<õÆÎu÷P§»‹º­Â0°Ã²îzbçº{¨ÓÝEÝÖ a°€ÐaÚK¬Ã&tøC&ê…ëî¡Nwu[/„aÀ2Ú;¬¿6§?ÓÕ;×ÝCî.ê¶^À¥´g˜Û¬Õ;×ÝCî.ê¶^Àå4�k‡Ph¯1¥z…ëî¡Nwu[/„a�½àNÇSªW´±¦P(ÊfÊ&†�€•6®P/¬���°a���Ö" ��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€µÃ���°a���Ö" ��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€µÃ���°a���Ö" ��ÀZ„a���X‹0 ���k†��`-Â0���¬E��€¥Dþ(…åP¤¢\g����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9s_RI.png�����������������������������������������0000664�0000000�0000000�00000026007�15030617045�0023160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��š���é���„%—¹���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��+œIDATx^íÝO¨]Õý÷q‡ÕIh&Å)Ú¢Aû4TšŠÒ˜‰ŸAZ$à å‚„ZøÕß Ð|@ø• ±Nœ\ŠR«±FE (<)’‰-¿Hü,*‚R$ì'ŸsϺ®óÝß½ö>ûì½Î:÷¼_ð%Þó¹çž}þ\×÷®½÷Ú7T���Àh4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���ŒbÔFó†n (Š¢–T�°l£7šÀºã÷`}”ò^ó™P M`dü¬M�˜E£ ŒŒßƒõA£ �³h4‘ñ{°>h4`&02~Ö&�Ì¢ÑFÆïÁú Ñ€Y4šÀÈø=X4š�0‹F¿ëƒF�fÑh#ã÷`}ÐhÀ,M`dü¬M�˜E£ ŒŒßƒõA£ �³Ö»Ñ¼ºY½¾Úθvý}õ×ËŸO¿Iþ»Ú<º·ö}qí=u±úúë‹Õ©½~¾UV›W¿Þú‘µÇ¾½:~ö¶²šWW/nV§Žî›~ïîêàñ?Uïn>YÝ®Ç~W'Ûx¨:~æ|uõÚôû&¾¾¾™:ß«Šž ’ôza=”ò^ó™PŠõn4E×í§ª‹qÏôÅùêÔ¡G«âfSM×cÕÑÍÿž~ý¯/žÚjøf~ÖV“6i@'ߥfõ±zsöùÙêøî‡ªÿÚ<]:´Q]žiôäz“yöÉêÐÑ3Õ_DáT›ÇE?Ú–ªS¿˜~]U×®¾]ýþèíÕ¡ªÚ&LÔïƒnô×&�Ì¢ÑôÍë®]Þ¨xd³úh»ë£Ñ¼v½Ï<QíVƒùõÕÆ¡ÿ]m\þjšMMšÞ“ÕÙÏýö¯Ÿ†¦QMï¾úk±…F³¯uô¯]=_¹þÇžïvݬ®NóuPÊ{½.Ÿ9�å£Ñlh4«kjü~5†³ævs9ùjjîFóª³Çÿ×tQMçÉê3£¨ÇÙwülÏ­.Îo¯}´Y=ò€7«*4š}­Å ¯?ˆÞ^ÝøÕ:Bh4`fS£y}¸¼xêhÔXm5ŽzN¡Ò»­m£éÐ âÞßÌVêë™F¯ÃÏèÅ6áЇªg?b×ùÀÖaÐ×D{ÝC?ÖK)ïõ:|æ�¬͹Í–ÍmMâÖnó½3³•šá|4Ú}îüŒÚID{4jgOnªŸ�eÑhö¥×·(ÑgHŸ­G»¼wo.r­úâò_¢ÐT‡ªã›ÌÌXNÌí<®‡ê‡$èP•C×ï·ûèVÿí~ß}ôÿVç¯þ{ú]S_\®În¯†Ç:x¼:sñjÃHyi{JPÊv��fc£©Æ*ÞÕ=Ûh¶ki4'»æwo ”3µ{愜TCÛÞì61MãäÄ¢‡ª£¿Ûœu£Ñì«Ì߃¯ªËVÿgãLuâÐ#Õ©¿^®¾¸öÏjó‘#“÷xršտÌכϋÏT'6ÿiš:ýQöPbÕ„.¦xÅð\û¨:{â™ß‡kWÿZ8z¢Ú8{}{'·h6þOÕñC×W?2 é ñ^Ÿ?~ú_ý•ù™°Žh4ÍúñŠÃ6š“œÝÑnóÀî>×ׇ~_]ŒÏ8Ÿ¬Ñ”I“q°z¤ÖD4š}•ù{ ÷souÃÁ'«³vÆP3ë'®7™^ã¦ÙÐÚ >úYGçšÁ¬Sã{²ö3f>ãúŒžxÆù]ðo^†Eßë+W®T?úѪ_ÿú×Õ¿þõ¯é­ó£ÑP M§Ñœ,õóÈc—7ò¥M ªU»Ý“|´û\»ì?~­åþ£:z|³º<3Àþ»úhóWÕ¾¡Mq—u h4û*ò÷À »±µÝnÙF³q¯À<ÔÜþ§ÙžÙß¹k—ÏTºÍäÎi4EÍæ±cǪT¯¼òÊôÖù ±�0„õn4Z°½éØHíF<h¾÷zmÎ6oZÄ}oÔÔNwŒvµï¾ÞŒn^Lìên ¦ ^°}oÜ l5¯»·{«YÞþÞ™bÁö®ôz•fÒL6,=4ïLyêgu¦Ïå{2Q|œtê½­Ã�Ûu?Œ!ßëÍÍÍÉÏÓìæ—_~9½µ›?s�ÖÓz7š@åý¤g�›g=Í&^ÿ#ë‘Ú ¿þÀ ÇI«Ñü•sAkÕœ©y4^óvy†~¯/_¾\=øàƒ“ÙÍ÷Þ{ozk;þß  4šÀÈÊû=h9yGÇB>j™ž…~ü”9¦sˆÙÄ­j‡h÷~|Éîþ£ÕïÏOÏ0¿vµº¸yª:zÈ;Ît9Æx¯5›ùì³ÏN~öï~÷»N³›ü¿@)h4‘ó{`›ˆË®©&îÌìB/F‡j4®špCñÇMfKÙ>¦9>Œd{·¼]ri_uôÔ_̱ËË¥íË<³›cn�̃F¿ëcì÷Z³™O?ýôäq4ËÙ4»Ég@)h4w‚†“šêÕgqw,J¯=ÖC®÷Z3ššÙÔ §f:->s�JA£ ŒŒßƒõ‘ó½Öl¦ŽÙÔcÚÙM>s�JA£ ŒŒßƒõ±Œ÷:ÌnjíM­Á)|æ�”‚FÙzýl]Œ@Ϲ½vÞ¡z^Ë «i½M=~X�J@£ ŒŒßƒõ±ì÷ZWÒ즶#ÌnÀ2Ñh#ã÷`}”ð^kvSÛ¡Òì&�,&02~ÖG)ïuh2õ¯v©«ù€e ÑFÆïÁú(©Ñí>×IBÚ®Ýê�Ûè&EQ•¿bÌnX¦Z€‘ÙA;W)ïµ·ñìfÛ%,`(Œ€�°&´¨»wW#ªÅÞ›.a �C¡Ñ€5£ËVêò•Ìn&�¬¡xvóé§ŸfvÀ(h4`…KXj†S3�0$M�XsšÍÔ1›šÝÔ,'³›�†B£ �˜`vÀÐh4�Û4›©õ65»É%,,ŠF�P£+ ivSkoj N�èƒF�àÒU„˜Ý°M�@’f7Õljv“KX˜&� U| K5ž�Ð&� 3íB×ì¦v©3»   &�`.ñìæÛo¿=½�êh4�½„KXj±wyà¡Ñ�ô¦…ݵÀ»f7µà;�Äh4� Ñl&³›�<4š�€AhvsžKXêXϧŸ~zú€ˆF�0ÍfjVS³›šåLÍnêD"}';&�`p:^³mvS³™j4U\æØ™h4�£°³›–šÐÐhª)åØN`ç¡Ñ�ŒJWR#©µ7ÃÌ¥{Mf(å4›ÀÎB£ �K]MH åoûÛíã3mqr°³Ðh�²ùÓŸþTÝvÛmÕ<à6š*]æÀÎ@£ �ÈF»ÆÿøÇ?NÊo}ë[µ&3‹¿;&� ‹pt¯±´uûí·s&:°Ðh�F·±±á6”©ÒY霬6M�ÀhÔ(†“€ú”f@¬.M�ÀhÔhê sMþ½ï}Ïm&ÛŠ3ÑÕE£ �ÈF'ù¨qÔ1˜^SÙT\¦XM4š�€¥PÓ®Ô¥š.e  \4š�€¥ »×ÛšN]]ˆ3ÑÕB£ �(F[ÓÉe*ÕB£ �(RSÓ©¯¬M�@ñlÓùì³ÏN�%£Ñ�¬”?ÿùÏE P9Ðh�VŠ7`R5å@£ �X)Þ€IQÔü•&�`¥x&EQóW4š�€•â ˜EÍ_9Ðh�VŠ7`R5å@£ �X)Þ€IQÔü•&�`¥x&E-«žþùêÂ… “kñüñÇÕ'Ÿ|RíÛ·¯Ú³gÏäß{ï½·zÿý÷«³gϺ÷_få@£ �X)Þ€IQ¹ë/ùKõÔSOU?üpuã7N?߈¯f¥]«¿¤†3M�ÀJñÌ’ëܹsÕ¥K—&MÆ;ï¼3ùú7ޘ̀©t›ê•W^©^~ùe÷gPË­ê‰'ž˜4•š±üú믧ŸÆÙ†Òгë¾z¿½ÇÉ]9Ðh�VŠ7`–VjÕPž?~ºÕ[.^¼8S–Í?ÿüóIc£Ò%8Õ †ÒîØ¸I}饗Üm¡æ¯Ó§OOþ8Юp]þÔkƒT&M¹>Þcç¬h4�+Å0K)5j mÃKe’Ê»f:f04¨*ͦÆMªÓФ–Ðð”PzÍt<¥vƒÛ¦PâfqžL¼\ ¬v¿{Û’«r Ñ�¬oÀ\fi&ñµ×^›kö2•I*ï›I*÷Ýw«·ÞzkéÍOÎÒ1–j›v…‡¦0蛉—øá‡îvåªh4�+Å0—QjÈtŒ¥fšš·øöy2Iå}3‰35—ÚE\âÑcÖã?^íÚµk¦é‹Å ¡ÍûfâåË|ís¨¿ ��Ì0s–f0Õ`Ƴ`qófuÍÚr«kæåë6sJ‡ h—µxM_lˆ¬-}–¼mÍQ9Ô_�� æ ˜¹J»Èà ¦•jìºfm¹Õ5 yiËëä,ÍbZqÓ¿ØY[®ch½íÍQ9Ðh�VŠ7`Ž]š Óà^ó"kË­.™ÎX_祓ÔdviúÚr«k–ʵ ßÛæ•Cý™�P0oÀ«´›\KÜÄâÆNe ‘µåVS¦Ýû¯¾úªûÜr–fQÕ¬‡+èh=ÊPú:”¾G'èhÝJïçô)=¶tiúºäV×,•{Û£r¨?k�� æ ˜c”´.»ÉmÞ7“T>o¦yÇaª±Ó2OZ*H—`ôš¬p[[¦Ë8jײšP´¤FtÞ&4ü¡ÿ\••Êûf’ÊÃmÞvç¨ê¯��óÌ!K’š¯y‹¥ò¾™¤ò®Ù믿î>·1JŸvM«±ÔnàXÜ`©b}3ÑmáZ⇞4¢a{͈j{4[:ÏöH*ï›I*××Þ뚣r¨¿��Ì0‡*5hMg“«¬TÞ7“TžÊ´\QŽYL5ãZRÇ­J[#5t&©¼o&©¼o&©Ü{sTõW�€‚y梎!ôš7‰»¶Üêšµå–ÍtF¹÷܆*5°ÇŽ›Ì$zÍ’45R2DÖ–[]³¶Üêšµå÷zç¨ê¯���óÌEJ f˜Å´Í[,ÎÚr«kÖ–[áv-»ä=·!J¯šØ n”âf);kË­®Y[nuÍÚr­ëé½î9*‡ú³� `Þ€Ù·´«ÜêÒØuÉ­®Y[Sƒ¬ë–{ÏmÑÒqŽaöÒŠ¥¶Ü"kË­®Y[nuÍR¹Ž3õ^ÿ•Cý™�P0oÀœ·´XWÇ™·±“8kË­®Y[.:>R»ü½ç·Hé¤ïê9VœµåÖY[nuÍÚr«kÖ”ëpï}ÈQ9ÔŸ5��óÌyêܹs­‹¯§2Iå}3IåñíÚ=ôI?šÁ,á,íT&©¼o&©¼o&©\_Ÿ>}Ú}?rTõW�€‚yf×Ònæ®g•§2Iå}3IåúZ3±Þsë[šÁTƒ™j†š2Iåcd’Êûf’ÊûfÒ”/óøLUõW�€‚yf—Ò 3MÍ[\±T&©¼o&M¹Ö‹ôž[ŸÒz“ay"ij†$•I*#“T®¯¿óïT·Þz뤾úê«i²øÏ퓉—kzï½ÉU9Ô_ �� æ ˜m¥Y;ñš· kÖ–[]³¶\ÏÁ{nó–Žë¼óÎ;gž˜m†bqÖ–[Cd!Wã¨u<ß|óÍê®»îª~ò“ŸLêç?ÿy²Nž<Y=óÌ3“×óæ›o®ýÜØY*¿ñÆ—r妸r¨¿��Ì0SšÌ nÞ¬®Y[nuÍšò!–/RS£æ,èÒ µem¹Õ7ûîw¿[íß¿¿úñ\Ýwß}n9oý⿨8|Ü!²¦\W.òÞ§œ•CýÙ�P0oÀlª°»Üjkìºdm¹Õ5‹sOª“—¼ç6OéDÍ YmÍP—¬-·ºdÚí­×A³j½Fq¨úéO:3»i…ÛÉl®÷õùçŸwß«œ•Cý•� `Þ€é•f2½æ-"kË­®™jˆ&S÷¯äc"kË-/ûûßÿ^=÷ÜsƒÍXÎSÚíîmS0DçZ5À{¿rWõW�€‚y¦­ .L¾×6o±¾™¤ò¾™„Ûµý‹¿§‡‚¦†Gúf’ÊÛ2Í"ÞvÛm“ÝácÏZv)4”ÚÞ>™Ø|Ù'�Å•Cý� `Þ€—´!–0Je’Êûf²h“©u5‹iÙ†'Ö7“Tîeaæòþûïw¾e•¶ÉÛÞ o&áö{ï½×}Ï–U9Ô_ �� æ ˜¡^zé¥êüùós5w}3Iå}2-7´Èîr`Ò¥áñò¾™¤r}­“y4sYZsשS§¶·7õ\údRÂÉ?¶r¨¿��Ì0C½ýöÛn'ñíCe’ÊçÉÔdöÉÔ’EaM̶†'•÷ÍÄæZ‚HÏKK y]iM±Ï%6o¦EÙ5Kí½oË®êŸ�� æ ˜*ï¸Lkˆ¬-·ºdï¾ûîd6Ö{^muìØ±™CÄkxbCdM¹Î×Ú–%w9OŦ´=϶LgùksÑcmǬê¯��óL æš9 º4w‹dm¹•Êú6™zÎ]^oË­®YœkNçè5q«P÷ÜsÏô™|Ã{žA*SƒYÂòEm•CýÕ� `Þ€ùÆoLÓo¤š»!²¶Üò²¾»Ëµ<N˜ÅL5<qÖ–[]3=®õ.½æm•ê‡?üaësµl¦?v†X÷4WåPÕ��(˜,5¨Ýæ]›»`ˆ¬-·âìÊ•+µçÒ¥4[fÙ†'gm¹Õ–é$-xî5n«VñòFV¸=••pIÉy+‡ú+�@Áì`ùúë¯Ï4p±øö¡2Iå]²·Þz«ö<ÚJ»b÷íÛç6<á6/“TÞ7»zõjÑg‘Ï[©çÚ%ÓÕ—¼÷­äÊaöÕ� pv°Ôî縱SÅÆÈ$•§²>MfØU7;ªX*“T>o¦&sÕNöIÕ¢Ki6Ó{ßJ¯f_)�� ”ÚU¤š»12Iå^Ögw¹ÝUžjxR™¤ò®ÙþýûwT“©Zti£O>ùÄ}ïJ¯êŸB�� ”¯¾úêôÖoØæ.6DÖ–[áv°o{[©‰Ö•dlSx Ogm¹•Ê8à6j«^ºÖ¹•zl¦Ùfï=,½r¨¿z��,(Õ¼¥š»±²¶Üzíµ×f¶»­Ôdz °[]³¶Ü²™_ß g–7•Í.¯CÌfZ4ß{/K®ê¯��‹ÊøD +Õø ‘µåÁûï¿?³Ím¥k•Çk‚Šmjb]³¶Ü ·ëÌòÇ{ÌmÐ-±~÷ÝwOxW³§µà»WÿÞvÛmY.]ÍÔëЖiQïý,¹r¨¿j��,(_yå·¹ ÆÎR¹–\ÒI<ñö¶ÕSO=59±¤­©±ºfm¹¥µ%½Æ¬o©±T3©2~ܶºé¦›ª;î¸c´†3n4UV×l•ÖÐTåPÅ��(X<PjweÜô©bcd’ÊõµšÌy×TÔÌgÜ´¨b}3Iå^öé§ŸNNñš²yKÍ¡šKÍŒÚÇš·4Ë©¦Ð{œEJ'7ÙÇŠuÍöìÙ³RkiæPÿ4�P0;XêŒß¶ÆoèLšr[ùòË/×¶3U—/_žÞ{þ¦0He’ÊãÛuÂÏg•«ÁÔ,¤f#ãŸ?D =ÓªRsm'Ö5[¥f3‡ú'�€‚ÙÁR³‡ÒÔøÉ™Øüã?ž»ÉЙåVܸ¨b}3Iåº2Î}÷Ýç6aóÔ˜ f\Z¼Þ{ü¾Þ_û8±®Ùª4›9Ô?…��Ì0u"F7~ÖYS¾èòE*kˆ¬-×LÞsÏ=ç6_ó–Nì 'óä(í’÷¶£O½ð ÓWgKü8V—LͦNìòÞûR*‡ú+�@Á¼S¥ÅЃ¶¦pÑ,ε†¢fU½mj*5™ÞòE*kˆÌËÕêŒn¯éš·~ö³ŸÍ}‚ÏP5Ô1›šÍµâDZºfZpßû ô-]ŠT'©t²™ªïìiõW�€‚yf(P£ÆO¼¦0"SéøÐyy5 ¡É âÆDe ‘…\kbj›‡ººf1ÇÞMž*=öPg£ë„%+~,«k¶k×®¹ÿ ¥3Ùu ¯>k©Ëê3uéÒ¥ÉçËû9^åPe��(˜7`Æ¥3Ñu¬¤ÄM¡µH¦¦AkxzŸ*5Ú¥7AS,šÝ|ó̓èJ»®ãÇ^Vé˜Poûæ­ð|¬ø±¬®™Jë£ê¡¶?NÔ\>|¸ÓRW6×ch¶Óû¹¶r¨o=��óL¯Ôp¾õÖ[“¦ÐkÃmófÚEÿÒK/¹™*5¡Éô‰3›÷Ít ¦̡נÔÉ8öq—UCÍjj÷yø™±ø±æÉ¤)× ¤šIíZ¥™Ë>‡TØ\_?þøãîç0®ê[�@Á¼³­tMôÐtÆR ¥Í4K:ïì¡ÔdÕ@t͆<ÉÇVIMf¨¡N Š5Å5O&©¼o&©\_·ÍlæPßj�� æ ˜ó”Ö¸ÔîK©Þ¶çùóç'»1ç]3®°»<–j$•·eZ¦h¨“|¼Ò϶ÛPBéä&o{ç­ÔU‚âÛçÉ$•÷Í$•ëï3*‡ú�P0oÀ\´ÔLjÖSK½öÚk“™Ë!.'hw—[qƒÐ–[6S“<ÔÕ|šJ»§—yâO[é—ÞvÏ[vñv«kÖ–[]³¶<–š…Ï¡¾¥��Ì0K¬¦ÝåVœµå–NðÙ¿ÿ ­w©RNþiª¡®¤C$þÙV׬-·ºfmy cŠ½Ï§*‡úV�P0oÀ,­Ú–0²â¬-͸©‘ò ò.µ¬µ2»ÖP»Ïõºj(‰¾Õ5kË­®Y[.ZÉûŒªr¨o!��óÌ’ªëFVœ5åcÙV{÷î­mgi¥Åã½mŸ·ÔÈñÏ·ºfm¹Õ5kË¥i÷yõ­� `Þ€YR¥.+ßn3iÊuüåPWÀY¤Jßu®ªì±Ç¦¯~ú}Ke’Êûf’Êm¦e“¼Ïjõ-� `Þ€YJ…Ë`Ú>–Ê$Ü®ã/uÌ¡¯ZV•¸´Q\C-Þ®ŠW!°Ke’Êûf’ÊãÛ›.ƒ™C}«�(˜7`–PÌcñ@¯Š¥28ÆëC–f u¹Fû<J(íÞ÷¶¹Oé,ö˜}¬X*“TÞ7“Tn£Ñ� #oÀ\vé*,©¾K6ô5Ès”އÔîtÍr–Òxj;¼mí[:.6f/–Ê$•÷Í$•ëkM��:òÌe–N´hä¥K¦%ŠJžÁœ§Ô|Þ}÷ÝK=CÝÛ®¾¥cc­ø±¬8kË­®Y[nÑh�Б7`.«t=u-#©¾)»zõj'ùŒUj:—qLçÐM»Õ”øñ¬8kË­®Y[ãd ��:òÌeÔ"keŠv“{MÍN¬Ü çÐÍ{¸,¥?¦gm¹Õ5kË]rÕû çPßB�� æ ˜Ë¨°Œ‘å ônÓ¢â;y3UzÞzþñk4FñújVS?ÛŠ׊³¶ÜêšµåÂ:š��tä ˜¹+>ù' æA|»ÍÔ¬ä8óäÉ““ëžëRŠú7×%*»”ž¿–m²¯Ó5F£©3íÃÏÅk3Iå}3Iå6Óì¹÷9Ρ¾å��Ì0sÖ¹sç&Ûaó˜—iMF¯ªÔ\餢ø1cšITƒWJÓ9æìæ¦*ÞÞXüØ6“TÞ7“TnÛµk—û9VåPßj�� æ ˜9+>.3äU±øv5€^ã2Di9¤7ß|³ö˜*+Ü®í)¡áÔìæÇnŽÕhƳšªX|»Í$•÷Í$•ëë;ï¼Óý«r¨o1��óÌ\¥ebì`.M½ ½®c\ZP\³lV¼=Þ6…ÛµÑ3Ï<ãþ윥ånºé¦™m^¤Æj4ÕÔk½Óø±¬8kË­®Y[k:H•C}K�(˜7`æ¨Ó§O7æâejJƺ„¤Ž¿ô3ˆ³¶üÓO?]úbñšÝjíͱM•7{lÅY[nuÍÚò éøLUõ­� `Þ€™£´Ë<ÈãÁ<°ÙX³…j2û˜±8kËE §~¶÷˜¹jˆÙÍ1MýáÄiÅY[nuÍÚr}f½Ïr¨ê[�@Á¼sìÒ‚×A<«¬p»Î0÷•EKÇ Z]¶§K¨á\æ.õEg7½Ÿ9di¡ý ~\+ÎÚr«k–ʵ:‚÷y•C}ë��(˜7`ŽYÛWÿ âA^ ·©!ôš”E*÷;j–u¨·-9J³›óž™¾wï^÷g YÚØÇ·RyßLR¹¾¾ñÆ'ð>Ó¡r¨o9��óÌ1«ËÂì6¿ùæ›Ýe‘ÒÚ˜ú¹Mßn3Iåm™–Eʱþ§WzÜ;¶M5FƒoK»æcv¬TÞ7“T~øða÷óWõ­� `Þ€9Vi6³i —8‹ó¡×ÌÔI:Ú-M)©LRy[¦&7G×TºŒ¥f+ívÆ5æþ¶ôx1»-V*ï›IS®ëð{Ÿé¸r¨o1��ó̱êÊ•+“ÇlÌ› }BŽW´Âã<x°úÍo~3½uK¼=*k‘lÙ»ÓÃuÓí CjBsꪩmzⲆÈÚr}n½Ï³­ê[ �@Á¼sŒŠÃ“x WYq6ä’F÷ÜsOãc~öÙgÛ·Ûü—¿üåä65¢úïT3juÉ–¹;=”šNíÆÖ¿^>f¥®Ânï’[]³¦¼Ë±™¡r¨o%��óÌ1JgìZ]z•טô)oð÷Þ{oúh[‹¿¶™ØüÅ_ÜnH-ÝÊ ·ëD1—*¹ô‡H—רKnuͼ\ð>Ï^åPßB�� æ ˜c”.Ý×g Wóå5&}*,.z¬[n¹e{Ó{lIeâåÿüç?«#GŽL¿úFø^ïçÅ™f7—¹Øû2*Ìxǯƒgm¹Õ5‹ó¶u3måPßz�� æ ˜c”vAÚ<ˆy›uBŠŽƒŒéqt9ÁðßöqƒT&m÷…ïmºOœ©Á>uê”û\vby¦ÊJå}3±¹–àêrP\9Ô·�€‚yæÐew‹ª¬Tî5&óVêd“Àæ©LºÜWÍl8Ã]t{\–Í5 »³›ñ1¼ö5°RyßLÂíú£H—Hõ>˩ʡ¾Õ��Ì0‡®wÞygòXñ ¯²šr¯1™§îºë.÷çÆÿ„ÛR™Ìs_íJ_¤ÙÔ}wúì¦] À¾V*ï›Iß&S•C}‹�(˜7`].\˜>Z¿ÂkLº–wÎ?ÛÓ–õ¹ï¢3›¢õDwêìfX<?æ½±TÞ'ÓîòsçιŸá.•CýU�� `Þ€9tÅ×6—¦>°Ù"Ë©9 ÂÏ<sæÌöÏö´e}ï«¥•bág5ýL/SÓ¼Ìë¦Q©%§â× -·ºf*ø³H“©Ê¡þL��(˜7`]Z"Ʋ½g}wÛKJüxáßX—LúÞw¨Åà?üðÃê¾ûîsŸ÷ª•žKÓó”8kË­.™¬ïºVfªr¨? �� æ ˜C—ÍÔ@Ê ·8pÀmPÚÊ;èÿøÇô¿¶Ä¹ýÞT&}ï¯Ý)Ê㲚2Ínö}mJ)ÍÎMÏSâ¬-·R™®½ï}fûTõg��@Á¼sè f[ДëD¯II•®#žú¹±Ô÷´Ý¿Ï}òJ±ð½M÷Ie«ºÐ»–œR³K=Ï8kË-›éxL;ì}^ûVõg�@Á¼sèŠÍ0ÐÇâÌæúZ'ŠxJSé„x“ú¹±T>Ö}½ÛÃ÷{÷ë’©!_•Ýéj2—uv•Ï»Ff—Ê¡þŠ��P0oÀº.]º43Ы¬T®¯uˆװx•Z“ñøÃ4Ù¢Û‚ø¿%•Ißûêk-ydoÝW¬kVú•…Nž<¹Ýd†ŠÅ·ÛLRy*ÓÒEÇŽs?£CTõW�€‚yæÐµè:š¢æÉkZlÙ+�Iü3Ÿ|òÉíŸmCºdÒ÷¾qÖåºè6ïš©‘SýÈûcT×…ÙS™¤r/ûä“OF™ÅŒ+‡ú+�@Á¼sè fà51/Ó®p¯q±uë­·&®ÖÐ ÿݤ-[ä¾±0«Ùô3‡Ê´ÄÓ²N3«cI»lo,ÎÚrK·ióñÇw?—CWõg �@Á¼sŒ²â¡©I°YÛ2G/¼ðÂÌýâûñbí^Þ%“¾÷µÙ‘#G&·…²†Ì´ŒÐsÏ=WÝÿýîë7ti÷½/,TïmSÐ5kËcz¾C,[Ôµr¨?{�� æ ˜cÔž={¦ø¸A°M‚ØLƒ×Ш€$¾_¸oà--ØïMeÒ÷¾ñ×>øàä븬¡3½Nû÷ïŸë¸×yJgÀëçk÷½Õ´MÒ5k˵›\³èÞçpÌÊ¡þÌ�(˜7`ŽQZ¯°­AhË¥iVóêÕ«“<ˆïîÛ$õ=m÷ï{_›…¯ííÁX™šA­®ëÁë$ïµm+5ùZS»è»œí?Dæå»víʶ›Ü«êÏ�€‚y楠©Aˆ››ÛLL|Fµv‡ã2-{ß&©|¬ûzY¸-W&^®¦]³Çš•Ô‚ð¡t"O(ezÝ»wió¾™x¹ÖÄÔeNsî&÷*‡ú+�@Á¼sŒR`„XœÙÜfj6CÃPVœ5åÍS™ô½o[WlŒLRyßLRyßLâL3åúxŸ¹Ü•CýÕ�� `Þ€9V…Ý硬8³yßLl.CÙô½ñ¿±ø¶¾÷Me¾Ž+6F&©¼o&©¼o&ú,mll¸Ÿ³eUõW�€‚yæXÕg=M«kÖ–ÿûߟÞZçÝ7÷o2dk¬¬-·ºfm¹Õ5S]¹reôõ0ûVõW�€‚y春3‚Å6ÖY*O-–ÿ‹oë{ߦ,^H>¦ÛBYCdm¹Õ5kË­¶¬ÄL[9Ô_�� æ ˜cV¼x{Ü\45‹f©Ü^Ò~o*“¾÷õ²7Þxcòßö{%Ü>VÖ–[]³¶Ü²™NòÑII¥Î`ÚÊ¡þª�P0oÀ»´û3ˆ›‹Ð`ĆȚòø*AÞ÷H*“¾÷µY®«Åâ¬-·ºfm¹¥Û´L‘®I^ÊI>]+‡ú+�@Á¼sìR¡Ùª n<lóÑ7“Tn;s挛©LúÞ×ËÂm¹2Iå}3IåM™«xÿý÷ÝÏÌ*TõW�€‚yfŽºpáÂt ¶45Ò7“TnSs¾ŽÅ_ÛLRù"Y\±12Iå}3Iåá6]‹üðáÃ+³{<U9Ô_e�� æ ˜¹*Þ….qS¢ŠõÍ$•ëë[n¹¥úì³Ï¶¿ŽÿÅ·¥ò¾Y ¯ãŠ‘I*ï›ISþùçŸOñ_ö"ëCVõW�€‚yfÎ*¥ÙüÁ~Pk6=Þýc}3]w<'TlŒLRyßLÂíaöòܹsîgaÕ+‡ú« �@Á¼3w¥šM«kÖ–[ºí¦›nÚ>û»IÓýƒ!³ðXcem¹Õ5³¹Þß'žxÂ}ïwRåPå�(˜7`.£Ji6U:ýÁœÞúø>M÷ÿµejr›²PÖY[nuÍöíÛ79öuÕÎ_¤r¨¿ê��Ì0—U—.]šnÕ–¸q±ºfm¹gáR•Òô½ÍçÉŽ92ù7”5vÖ–[MÙÇ<9î²ô…ÕǪêï��óÌe–tÿòË/§[ׯá‘8kË­T¦õ.cMß'mÙ·¿ýíéW³éÝgì¬-·ÂíwÞyçÚÍ\6Uõw�€‚yæ²KM‹®#q³£Š¥2Iå}3ÑY꺄å‹/¾Øø=Ò”é¤#Ýþé§ŸNoپ߻ߙ¤r/Óá˜ËtÆø•Cý� `Þ€YJéìd-âí5<A*“TÞ7“8Óñ•ûÛߦIµ½¼N,RÅÇ{êøÏø¾VœÙ|ŒLR¹¾Öñ–ºRÏéÓ§Ý÷‰Úªêï��óÌÒJ‹»ë²„©f¨)“TÞ7“TÞ7“T>F&q¦ÆR3Êzݽ÷ƒò+‡ú;�@Á¼³ÔRã£&¨K³Ô–[]³¶ÜêšµåÖYÈ5k|ùòåÉñ±ÞëNu«êï(��óÌÒKg5ß{sÀ-¯‘Š ‘µåV׬-·údºÆ¼Nàyøá‡«§žzÊ}}©~•Cý� `Þ€¹J¥“R´¬Ž¨ n²l£%Cdm¹Õ5kË­¶lÏž=“¦\g†ïÔ+ò”R9Ôße�� æ ˜«ZÚµ®c uí¸kjÂÍÚr«kÖ–[ºM³»áØJ5•ìÏ_9Ôß}�� æ ˜;¡´D’f;µ‹8׋·y2Iå}3Iåᶸ¡ ÇU®ëé¥UõO ��óÌZjÈÔ˜©AÓZÚ­ÜÖØy™¤ò¾™èìz5’*5ÉÚVÍÔ2CY~åPÿÄ��P0oÀ\ÇÒ‘:9F»ÕÜ©tlchúT:;»ë± úÚÞ7œÝ­2œŒ£RÉ•uV¿r Ñ�¬oÀ¤(jþÊF�°R¼“¢¨ù+M�ÀJñLŠ¢æ¯h4�+Å0)Šš¿r Ñ�¬oÀ¤(jþÊF���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ‚F���£ Ñ��À(h4��0 M���Œ ªþ?°¹‰½n¨µ����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9t_LUT.png����������������������������������������0000664�0000000�0000000�00000031776�15030617045�0023324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��j��k���af¥G���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��3“IDATx^íÝ¿k#YúïqÿŠÍf½ÁÒÌÆŠ”8'8¨@ 8ø† S  Ùîlà ÃL4 èX .¶ÄM:1lЛ =FI34F°McÄs둪ìr©dëçS§ê¼_phÉvëǧÎ9ztªJ:���8‰B ��ÀQj���Ž¢P��p…��€£(Ô���E¡��à( 5���GQ¨��8ŠB ��ÀQj���Ž¢P��p…��€£(Ô���E¡��à( 5���GQ¨��8ŠB ��ÀQj���Ž¢P��p”…ÚÁÁF£ÑÒ�ìŽ3…`~k>ô9ư[jðýÖ(Ô�¬‹B Þ¢ßÁ…€uQ¨Á[ô;X£P°. 5x‹~kj�ÖE¡oÑï`B Àº(Ôà-ú¬Q¨X…¼E¿[ÕgÇ?IØnÍ2›·C ¢÷éï±*úã Ø- 5x‹~·Š©Lâsi·º2¸¼N†MQ¨X…Úƒ&÷۳Ǘo­à\ÞŒî^´nâ¾þ段¥ODÆ‘¥¿OÚa_â½¥âý%ÿ÷ãì>îK^<Gÿ’~ð$ý»'ô–Ax2¿¯•=îÃ~,³‡’ºÿ7§?%OåôîÿÌû{‰‚ûŸÝkéów>><FûdG:ƒË¤×a[>ô9ư[jÒªà^±1¿‘^çL¢«ÏéOZˆ‘ŒÓ«s¹ÿ›ÿýM,ý§Yq–9§ß¦—3džÊÑ·r¥¸Ž1½Šä´ûJ.'w/³ÇÔîlTi1ö´P Ý“<öÓâïõ9œfÏW µ$±þE>¯›ä¿>§PÛ;Í9+žµ0þ#·«ò‰t£ßrEÖµŒÞœKÐÊÓížD¹7sÅ7 ¹ÖÈhíªí“ŒÏ’ÿ¯o*¾ÍíFM®Ÿ¿•ñÂí雑aò棓þ]KÚáOsc®†ô¹4ϰD¡ö¨ÅBM_D®‡Ï¥Ó¿H~›Êbw…Ïf…Ú¬ëi–l½äE4_¦EÜ`ô)½¾= µ†˜^ÊàèÉà—¤o¦«¾Ú—ºO²¾öY®¢3é„‘ŒrE¾ÈG‰Ï_úYJ·ó“ž ¯×®ÌJhßí$…Ú¿nïþã¤ÐŸ?Ëxø¿%2Ì ÈéXâW¡tº‘\íâ¡TĺÏéýUqŸ�vljåöÀ.+ÔùÂKéõtRÔVÜ…¸z¡¦+§?$—çáѽÝNe+pÛ¡PkˆYlI»÷¦d…*q=”^²Í ÝNgå'èmn´‚VB ÉÓW…ÛZ_Ó«_¥wž{tk÷oR¬Y÷¹l>²Ô¸qT̉åöÀ^£P[XQ[â^¡V /fݤËV<^Ü …ÚìÅù®@¼;Þmu‹7_x%’ûx¸PË[’—ƒšõ‚¢E}OKv•Ïe»s}å^+?‹óѾ¼-g+Åy…¾6{œÏ—cjëʶ¯%ëûšÎ‰åöÀ./<¦£ç_ÀŠ…ÛC–jóÛV:¹Þµ§é ›Zöbµy´J¡Ö-�É‹nØ¥Ps‡8Á™±Évyì6×sŸËqñ¤„…±P,Ürf»vŸïh7l5¬û\6‡XjÖ¸ªçĈr{`—¼ÀMÞÉ ®p2ÁK µ¤ë½\|!º·¡—ð­ Çi÷l?…Úì²+çãôEöZ.§…]² µj<¶ÚôÐJÕ2»\ÁÒÝ«aî GjaÜhß JîSûÜ™œÞ;1¢~ª(šª¸O�»ãĈrw`kѱÉÇs,ùH -Ðó—´lWå½ßÝ톺wÛ·»5‹Ï‘´v(ƒá(yÄ«[|Üù¦ÅqWºMÇoå<ÿq gê•eåîGs(}Œ¡ý瑃þËÎÖhôæ[ Ÿ—×¶Ó¬²7óä'÷Þ$¤»pƒïå"=Ãs:Ž%êw¥³ìØ»±îsÙX´Ô¨q8À‰ÅÀFšÐï–Û­ÒÏ>›Ž/äÕ½¼øA~³•Ò9Ý­ßY¸=mù]ðkÐU³ÛÛÈŠ÷üGŠ+|„H+þ›õÞ„¸JŸ¥y¾ö÷ `wœQ lT~kUMUÜ'€ÝqbD1°Qú¬UQ4UqŸ�vljÅÀÞ¥ü.¥Úª'>4˜æ�X²îsÙx·Ä¸vˉÅÀFèw°VEÑTÅ}Ø'FU ßm@ÏídßÓùHÛà×›Ns±”m KÖ÷4#Š*Ðï`­Š¢©Šû°;NŒ(6ª@¿ƒµ*Ц*îÀî81¢²É„F£Ñhõo�v‡� EáÔ#�ŠB ¨?F0�4…PŒ`�h( 5 þÁ�ÐPj@ý1‚ ¡(Ô€úc@CQ¨õÇ€†¢Pê � E¡Ô#�ŠB ¨?F0�4…PŒ`�h( 5 þÁ�ÐPj@ý1‚ ¡(Ô€úc@CQ¨õÇ€†¢Pê � E¡Ô#�ŠB ¨?F0�4…PŒ`�h( 5 þÁ�ÐPj@ý1‚ ¡(Ô€úc@CQ¨õÇ€†¢PêìlR¥Ñh´]6�õÅvHÙK£ÑhÛ6�õÅv“*��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…��È£*p…ZódÛ”F£Ñhn7WQ8Äõ΂õ±=íµ²¶CÖ6\Ιàí( Êfa{Ú!k;dm‡¬m¸œ3=À!ÚQ”ÍÂö´CÖvÈÚYÛp9gz€C´£0(›…íi‡¬íµ²¶árÎô�‡hGaP6Ãÿû_F³í©ÿbÿ;vÈÚYÛp9gz€C´£0(ëã÷ߟaQÍÚ×_-_}õÕív̷ׯ_§ÿ û¢9ÃYÛ!k.çLpˆve=|óÍ7·Ûk•¦…öKs† ²¶CÖ6\Ιàí( Êzȶժݟû§9ÃYÛ!k.çLpˆve=ènÎl{=Ötõ û§YÃYÛ!k.çLpˆve=üñÇòÅ_Ün³‡šþ-öO³† ²¶CÖ6\Ιàí( Êúøûßÿ~»Íjnû,ãø' Û­ä±¶¤Ý{#ãiú«uMÇ¿ ¥={Þé ¯dÓ›Ú„WYOF2Œ~‘Ax$Á¥iÎÊý¬›Ã«~]!—sf´9D;  ût…l•]ŸÙŠ[%¦—2èèÄyÿ1µ‚ïåbü9ý£d‚¾v»'Ñè:¹þQâ~ áðÃü×ë˜^ɰw$í0’Ñ$™¥'Òï<—áµÝŒ]UÖÓÑ@:…œžHpþ6÷‚µ»¬g÷× ¤ÿ‹j'›m¯-U•µ|é×Us¹O3Ú’ ¸K?fcÕ]žú·úouÞKÔ}‘+–®eõ¤“K‰Y1u&ÑUV¸Í'ç£ì÷+›Ê$>—N7’«Û ü“Œ§¦v¥Y#éæs›\J”/¢v–uÞ‡¤8~iZ gªí×~ñ¯_WÃå>Íhsˆv&@7-[EÓÏMû׿þµðó/¿üröÿôre®‡ d”O&Þ ˆdœ\¼‰ûò¤0¡ê${Üå&½¾šIò.úY¡(ÓBíLúñ$½¾Õe=M¢~.G÷vAÞ$QŸI½Ÿ_ÛYÖ9eÛ×H¥ýÚ3Íî×z{§³çØ: 䤕̟ºZüs_½|p”Ì!Ó¿Ý/—û4£Í!ÚQ˜�ݳl-ÿÙhÅÏUË>ŽC/Wå&>—ãÛIV#‰¤œ¤_ÙŠ—NÌ/¤›NÂ+ÓݬGÅÝœd†7.CÖV]ÖZ¨žÉ`ôi~UÕ‹’šÎ¹Äºx—Yçl]èm¡Ê~í›æ÷k½®ƒwÉ=êåi÷/ÒËÏïîÏ\îÓŒ6‡hGatÇC«hú­yú•QÙßþøãéO«ü:É=Ë=î–´Ã gÇ‘¨²BJvºþĨ+;Ýù*Ý­ V{*ËzáxÀŽ„ƒáüX½™f}«ìEÒNeY{¨ñýúÞ½äÿßîÎÏ_Þ?—û4£Í!Ù€@õVYE+Sü(Žê¶gñø´¢â$;?άÝÙ ¸Z(Ôô€âcó³+˺xÏ‚f}«x›¶ªë×þiz¿¾wL[2—ôz%— ¸Ü§mÑŽÂX­uVÑVQÙö,[åºç³\E¡tg»’ vIØ>ÞìxéožÉàR§Ôù ív¶{ÄN5Y¯²«g‡Yg*X±Ì«¬_{¨ÙýZQ Ó•a½Ï옸üe.÷iF›C´£0VgÓU´‡ØoÏ»ƒsïÚ³ò]³ÔèÌÿ¦Ê«x¼ñ¤8¿‘^ö9JáOß~ˆû¬ßK¦§mÙjÂN².îÎÎÚ©ùÊšÞ/lØgmÕ¯õ¸vzí¤ÀûöïC ¢QîòæÇq®C‡«mÉlíz-íi‡¬íµ²¶árÎô�‡hGaPÚÚÇ*ZÛÓYÛ!k;dmÃåœéю ´±ÏU´<¶§²¶CÖvÈÚ†Ë9Ó¢…A¹û^EËc{Ú!k;dm‡¬m¸œ3=À!ÚQ”ûcµŠ–W¿íYr qYK¿ÝÀ%ú¸ê…¬ñ¸Úe­ß~’ï¿¥Íî$Uéãr£Í!Y'Æî½}ûÖl-íi‡¬íµ²¶árÎô�‡hGaPî–~c@ñë´ís-íi‡¬íµ²¶árÎô�‡hGaPîοÿýïJVÑòØžvÈÚYÛ!k.çLpˆvåöª^EË+>F£¹Ù\EUà×;K¸°Š–Çö´CÖvÈÚYÛp9gz€C´£0(7ãÒ*ZÛÓYÛ!k;dmÃåœéю \Ÿk«hylO;dm‡¬íµ —s¦8D; ƒru®®¢å±=íµ²¶CÖ6\Ιàí( ÊÕ¸¼Š–Çö´CÖvÈÚYÛp9gz€C´£0(V‡U´<¶§²¶CÖvÈÚ†Ë9Ó¢…A¹\]VÑòØžvÈÚYÛ!k.çLpˆv墺­¢å±=íµ²¶CÖ6\Ιàí( Êû–­¢ýøãé_¸íi‡¬íµ²¶árÎô�‡hGaPÎ-[EûòË/e4¥å>¶§²¶CÖvÈÚ†Ë9Ó¢…Aùð*špuâþö¼–ÑðW‰¡´;MÓob:–øUr;³íÕ‘ÞðJ¶¹¹uy•õd$Ãè„GÒ\šæ¬ÜϺ9¼ê×r9gF›C´£ø<6e-¯²í9½”A§µe+ø^.ÆŸsóT‚þ?g“l'&SW2ìI;Œd4IfêÉ…ô;Ïexm7kW•õt4N!烃'œ¿•qöôw˜õìþZôÑBíDÂá‡ô7vªÊÚG¾ô몹ܧmÉƒš´Š–Wíö|/Q÷E®XJÞùF½’Ét*××ÒÛø*“ø\:ÝH®në²O2œš•f=ޤ›Ïur)QiµmÖy’âø¥i1œ©¶_ûÅ¿~] —û4£Í!ÚQ|›�›¸Š–Wéö¼JxTØ‘L¼AÉ8½:—¼à‡§2}J¯¯k"qÿYaòÖBíLúñ$½¾Õe­/RÏåèÞ.È›$ê3 ¢÷éõ̶Yç”m_#•ökÏ4»_ëíΞcë$“V2ÿëjñÏ} ôòÁQ2‡|Lÿv¿\îÓŒ6‡hGñilê*Z^•Ûó&>—ãÛIö³ŒãHúÁÉâħ»/ŽÏ%¾I¯¯KÿÿQq7§NÜ¡DãMot}Õe­…êÙÝ‹”«%/4$SÝ œ·mÖ9ºkê¸'/uöªì×¾i~¿Ö7u] ï’{ÔË'Òî_¤—ŸïæMÍ \îÓŒ6‡hGñalú*Z^uÛS'¹g¹|[Ò2-A¢/øGÛ[¢+;ÝÂ*]«=•e=;N'<`GÂÁp~¬^ÁÖYßÒík»k9¯²¬=Ôø~}ï^~w~þòþ¹Ü§mÉD“ù°Š–WÝö,Ÿ¶ŒîÞx!Ý…]kX(Ô>&ïÄÍÏF¬,ëâq<Kí ë[ö+–yÕõkÿ4½_ß+ò’¹¤×+¹lÀå>Íhsˆv”¦N€>­¢åU¶=ËV¹JmzlIÎô7‰NÏdp©Sêü„…v»d÷ÈžU“õ:/R;È:SÁŠe^eýÚCÍî×zŒZ˜® ë}fÇÄå/Ûp¹O3Ú¢¥‰ o«hyöÛóîàÜ»ölaÕw±‹§Þ–$¼šéøôÚº›Dw±þ$qö †ô9Øz/Qp˜Ë/i%Ÿ#µ»¬‹»³³vj¾²¦÷ öY[õk=®þ¿¶ôãiÿÖÛå.o6'­K‡«mÐâDW‘²¦_*®-ëìzùíÛ··¿ÿã?ÒÿY/¾®¢åéó… ²¶CÖvÈÚ†Ë9ÓöL ’ׯ_Ëwß}'_ýõ¬3›þ¼ØÊV ´ÀÑßi!§«T.¯Fù¼Š–§Ï6ÈÚYÛ!k.çLرßÿ}V˜iA¥^›Xº²”Xë®&émfŸ:ùÛþꫯf?ÓÛu«h÷és‡ ²¶CÖvÈÚ†Ë9Óv@wMj¥ÅˆnlýWWÐö½ê¥…Z¬éýê –ÞoU«h‹ôùÃYÛ!k;dmÃåœé[Ђ([=ÒâL ]ýªBV,fE›>=ÎÍ¢@bm9Í¡^J$.k ßnP=}\õBÖx\í²Öo?É÷ßÒfw’Àªôq¹ŠÑ¶-€²Õ3Ý éÊnÇŒmº²¦«[ÚtÕm_«hÓ,`ƒ¬íµ²¶árÎô€5èêP¶b¥…ëgcj¡¤EZV°éŠÛ®°Š¶Í6ÈÚYÛ!k.çLXA¾(Ñ´º}\FV°éãßE!¥ÿ?[QÌ7VÑi.°AÖvÈÚYÛp9gzÀ#t7§®F5a¥H ÌìŒÑMŠ*ý{ýúÿóU´å4Ø k;dm‡¬m¸œ3=`‰ü*ZÓVвãÊt7îª'?°Š¶™b^4Fs³¹ŠB­„/ZÄh1ãÚ‰»¢«kÙsÔUÃeXEێ˃¿iÈÚYÛ!k.çL(Ð"-[mªÛ±h›Ð“"´ƒ–hÀ*Úö4/Ø k;dm‡¬m¸œ3= ';MwyúTˆèóÖNªE›bmw47Ø k;dm‡¬m¸œ3= U,V|“=ÿ¿ýío¬¢ífdm‡¬íµ —s¦$²Ý¾i™¬XûÓŸþ4ûW«hÛa’µCÖvÈÚYÛp9gï{@V¤éîNÜkÚXEÛ“¬²¶CÖvÈÚ†Ë9{Ý´Ñ“´QÜѕſüå/+t–c’µCÖvÈÚYÛ Ps”®éjšgw®‹v7˜díµ²¶CÖ6(Ô¤Ÿ¦¦©Ÿ“¶--^µˆÕb›c’µCÖvÈÚYÛp9g/{€®éAò—ö0ýl5í¼ìÝ“¬²¶CÖvÈÚ†Ë9{Ùô ÊÙå¹ýnPmØ “¬²¶CÖvÈÚ…šCt5M‹4-Öð8ýhíÀ|DÇf˜díµ²¶CÖ6\ÎÙ»­¦qüêXUÛ“¬²¶CÖvÈÚ…šCXM[_¶ªÆ±jëc’µCÖvÈÚYÛp9g¯z@öa®›¶>=ùÂ÷onØ“¬²¶CÖvÈÚ†Ë9{Õô,OÎôÜŒžª«‘X“¬²¶CÖvÈÚ…šô˜4ݺª†õé*¤æÇçέ‡IÖYÛ!k;dmÃ圽éÙÜrÁæô› ø�Üõ0ÉÚ!k;dm‡¬m¸œ³7=@O ÐB£:×2þ,ýàɬCÌ[GÂÁÿ‘xü9ý›ÄôRVîo ­Êà×XÆÓôï i‘ÆÙŸëÑmdm‡¬íµ —sö¦hQÕjÐtüVΓ­ô%ŠÇ’ÕXÓq,Q?VR°õ†W·?WÓ«Hº­i…äÄKMFòfö÷-i÷Þ˜kÙª$VG^vÈÚYÛ!k.çìMгõ€xs“ é·[rÐ>—xRVY}”¸”t’#éÇÓŸ%®‡ µ™2 Ÿ&ÿL£OéÏlèÇshgæ¬ÙÕ1ÉÚ!k;dm‡¬m¸œ³7=@7‚ý§ëgEØS ‡ÒŸ•H‹²{ÅÜ£…Ú#·¹'ÕäX_L²vÈÚYÛ!k.çìMÐ`^`dX«'Ãë‡öS–_Ë µéouŸ¬p›ûQIŽ5Æ$k‡¬íµ²¶árÎ^ô€ì“õ­ÏøœŽÒIîwõB­%ÁåüXµ…Bí³Œã(=añ˜6+•íB®)&Y;dm‡¬íµ —sö¢d…š­iRkõ¤•Üïã…Ú' žÍãma–­Æéÿ¿mz–èPF¥ÇºÙГ2ø ®ÕÙ÷;‘µ²¶CÖ6\ÎÙ‹Pÿµ©LâsiëÙžý ™ÌþO5tEBmuL²vÈÚYÛ!k.çìMÐPÙ1jž¡¹Ê1jÙ‰ O¤ýVÉnOUIŽ5Æ$k‡¬íµ²¶árÎÞô�ÝöÆŠÅUVÐ=vÖçä ôµÖÿHt•û\CÕäX_L²vÈÚYÛ!k.çìM¨þsÔ^È0ÿ ·ÖûµÛ ^É¥ñ±j|ŽÚú4/F£¹ß\åM¡Ví7¼‘Þ¬X åUÙ7´9¿¸û¹*ýf‚™ÏrýÏü$ý:©áÈì˜5¾™`}äe‡¬íµ²¶árÎÞô€Ê¿ës:–ø×Þÿ®Ï¤@ëÿòWø®ÏÜI3Ù*\ö{›o)à»>×§Û6ÈÚYÛ!k.çìMÈVƒ¬Ïül-t«Z•¬+&Y;dm‡¬íµ —sö¦h¦âíÛ·éO°=.MóÓ‚«c’µCÖvÈÚYÛp9g¯zÀ7ß|3kXŸžˆñÅ_¤×°*&Y;dm‡¬íµ 5Gèjšn v®Ow{þãÿH¯aUL²vÈÚYÛ!k.çìUÐMW…ødýõdßìðç?ÿ™ïù\“¬²¶CÖvÈÚ†Ë9{×´HÓbUµÕ陞ýë_gY›^ç³ÔVÃ$k‡¬íµ²¶árÎÞõ�VÕÖ“­¦›fÈêÚã4+Ø k;dm‡¬m¸œ³—=€UµÕéê™6ýV=NM;s¾±ºö0—Óµ²¶CÖ6\ÎÙË­ªqèò“/òßí©E®þ,ß4K>ö¤œæã ýPçW¡´gý¢#½áÕòï·Ý¯²žŒdý"ƒð¨ðaØ6¼ÊºbdmÃ圽íÙàò¹`åt•L °²¸]¶º¦…/«”÷i.•(ý† ýŽØïå¢ô;g·4½’aïHÚa$#ýZýŽÛÎs^Û•Ue= ¤SÈùàà‰çoe¼‡§?»¿Ù·šh¡v"áðCú;Ueí#_úuÕ\îÓ^6-,´a×Ý"Ý¥©_dÿPáµluâ÷Nµƒÿ½DݹbéZFQO: ß»­©Lâsét#¹ºÀ?ÉhpjZDTšõ8’n>×É¥D{/¢>$ÅñKÓb8Sm¿ö‹ýº.÷i¯G›!ZŒèê+AwtM;­®œ=†Õµ‡i•¹Jx4Qþu<™xƒ ’ñM,ýÃd[µCù¡Ì¿äÿ %íÞ› Þ-O$î?+LÞZ¨I?ž¤×÷¯º¬§IÔÏåèÞ.È›$ê3 ¢÷ÉÅ]fS¶}TÚ¯=Óì~­·w:{Ž­“@NZÉmèjñÏ} ôòÁQ2‡|Lÿv¿\îÓÞ6-4tè»ï¾Kâ·ì¸´u9cu­œæP•›ø\Žo'ÙÏ2Ž#é'·ßMÜ—Ãd’}ç3y'ƒ »þüënÖ£ânÎ2 C‰Æ7éõý«.k-TÏîrÓcõ¢ä…¦s.±îNì,ëÝ5uÜ“—:{Uökß4¿_뛺®ƒwÉ=êåi÷/ÒËÏ·#ëp¹O3ÚÙñj¾kY‘¶iZôê ¥ÞF¾ù¼º¦Ï¿:É=Ëm‡än8á(Û‰¡ïdÃÂ*؆»Òte§É8½:SÁjOeY/Ø‘p0œ«7³Ã¬oéöµÝµœWYÖj|¿¾÷F/ÿÿ·#ëq¹O3ÚRÛ)u·«ç¯Y¶ë4ß|]]Óç^âñiEÉ$žÞ·ª»2Ž7(® µÉ;ñcó³+˺xÏ‚f}KoÓvÅ2¯º~ퟦ÷k]>Êî'™Kz½’Ë\îÓŒ¶_‹µ}<oýH²Õ5½ŸV×ô9W¢l•+OßÅŸKœ{ßxWÚô7‰NÏdp©Sêü„…vûn÷ˆ•j²Öãx^HWÙYf—Yg*X±Ì«¬_{¨Ùý:¿*—?&®ìø¸ýr¹O3Ú ´hÑÕ=ëч‚";¶lÅé²Õ5-àòŸÍÖdú|mÝœ{מÝ׫'d¿;ìÏ&ÚÙ±&³Ÿ=ÝhwÚtüFzmÝM¢»X’xòû¬ßKÎsÌZ§P<í4ëâî쬚¯¬éý†}ÖVýZk§÷Ñ–~ü!í߇D£ÜåŠÅÒÇá*F[‰ì-(V9󱎴ˆÒcÇ´sjqºOËV×´ˆkz1¬Ï6ÈÚYÛ!k.çLXB ]UÓ§«NM¢…“¢Ú¬V¶|]]Óçdm‡¬íµ —s¦<"Û5¨ŸV÷Õ5-–t§>ŸªÎÄômuMŸlµ²¶CÖ6\Ι°-вյº ÿúõëÛU´ªÏ¾Ôü²Ý®ùÖÄÕ5}^°AÖvÈÚYÛp9gzÀôX.-&´ØÑ•¶:lÙcÖNèÚcÖ‚Q³ÔÇ–oMZ]ÓçS/%—5ývƒô¸BW½5W»¬ó',mv' ¬J—«mЂ'+0t…͵]¢Zäè ZV éctõûL—­®5aW³Òçdm‡¬íµ —s¦l!¿Z¥……^¯r%HW¨²cдԕ©º|áü²ÕµºŸÈ¡Ï6ÈÚYÛ!k.çLØ=®J ¤¬ÐÐãÙtEkß+BZ„iq˜¿o]ÒŸÕQW×ôñÃYÛ!k;dmÃåœé;–­je+mZ@iá¦+Cú»M–×¢Lÿ¯ÞŽ3ùÛÏŠ³º¬ž=¦I«kÅç@£Ñh47›«(Ôö([ñÒ]ÙY£ù¦?{¬ ]]ÒÂLWìšv†d^Ó]�`jÆ´�Ñ+[{¬i¡§ëkq’}¬H±`Ól��h: 58OW&uu±X¬éêZSv÷�P†B µQ¶º¦×õç��4…jeÙêšþŒÕ5�@ÓP¨¡–X]�ø€B µÅê� é(ÔP{zh±Xcu �Ðjhýø= ´X°±º�¨3 54ʲÕ5ý¶��ê†B ³luM¿é Ê/Í�`]jh,V×��uG¡†Fcu �Pgjð«k�€:¢Pƒ7ôËí¿üòË…‚Õ5�€«(Ôà-È~üñÇ…bÕ5�€‹(Ôà¥e«kZıº�p…¼µluM 8-ä��¨…¼Çê�ÀUj@‚Õ5�€‹(Ô€-ÊôÄ‚bÁÆê�  j@dú‘Åbí±Õ5¾ü�°kjÀúqËV׊²Ý¦ú-¬¼�v…B xÀ²Õ5-Èôë©Ôëׯïýî»ï¾›ý�€mQ¨+xhu­ìçÙnÐâÏi4æfs…°¢e«keí믿žý½ dm‡¬íµ —s¦�kZ¶ºVlzâþ dm‡¬íµ —s¦�øÏþ3Ø5=ŽMÿ… ²¶CÖvÈÚ†Ë9Ó€5é.вo2XÖ`ƒ¬íµ²¶árÎô�`Meß`ðPãã:lhÖ°AÖvÈÚ†Ë9Ó€5é‰:¨WmQ¥ÿû¤YÃYÛ!k.çL�ÖôöíÛÙ ^µeg€b¿4kØ k;dmÃåœéÀôsÒô¬N-ÚtÅL?äV ²²³Aù�\.O´MCÖvÈÚ†Ë9Ó€=Ðo-àã9l‘µ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žr’ý,ãø' Û­ä±¶¤Ý{#ãiú«uMÇ¿ ¥<烃Žô†W²éMmÂý¬¯e4üU¢A’Qg £mÂ!koø”õt|!¯ÂÎì9´_Èpü9ýÍþ¹œ3£ Ø£ÊÿôR-¾îŽ•ÓÖ ¾—‹ÛÉ/)Ò†/¤ÝîI4ºN®”¸H8ü0ÿõ:¦W2ìI;Œd4IJ†É…ô;ÏexmW>T•õt4N!烃'œ¿½+zgÛã©ýÎ µN8Lʶ yœµœî×;4¿‘^ûHÂèR&ÉÛŽI|¾Ý8Y“Ë}šÑìQµƒÿ½DÝä]éí øµŒ¢ÞÝä7{?“èêî]«NÎGkOŽé¤Úäêvÿ$£ÁéfE߆*ÍzI7ŸÛäR¢ð¤äùOåzøRzçBÖ¾©G¿Þ–¾I<‘nôÛÝʰ¾¹9²{B¡xªÒÁ=”𨰋-™xƒ ’qrñ&îË“BQ¦…Úq?–›ôúj&É$û¬0ykñp&ýx’^ß¿ê²Öâë¹ .ï^d’ÇÑ™Ñûôzæƒ ÃSŒ>¥××å{Öþq¶_ßÄÒ?<ƒv(?ôi%sãÃ'ô¶žôîeZ¨ŸK¼Þd´1 5ÀSUþ›ø\Žo'Y=-’~p’¼ L®—­ÂèÄü"yW[,.QúÎW ’P¢±Ñ,›¨.k-žÎîŠ/=~,êKÐI^dt×dÞ¶/>Þgí—ûµ¾Ù;L µWñx>ÏLÞÉ è®ýF¤t%_ßhvço*-P¨žªnðk!ölvÿó–¼Ó 2œ‹¦Ê^Ü7\í)›PËVóö¬²¬µxºw<`GÂÁp~üXÁf»–s|ÏÚCîök]] oö’9¤÷rÍÝ•eoËVóöËå>Íhö¨ºÁ_<>­¨X¨Í}ÚèlÄ…âA79–Žá$«*˺xÏR®Xæùžµ‡Üí×%oìtæñºsHɸÐãgÛ'ë¿iÜ…à©ÊÙÊË=Ÿå*y7ܼ›Ÿa5Š$l§»E×4ýM¢Ó3\ê”>?a¡Ý.Ùí·gÕd½NñµáŠež×YûÉÙ~]²³c\“ÿwÉi÷•\j?ž°p$íþE27Ù¡P<e?øuwÄéì~ïÚ³òâ`ö1ÙgåŽ3ÙÀüÔúô³ØÂŸ$6üü£Œ}Öï% ÓŒÓV²"©/^‹spXr¢ÁjüÌÚ_öY¯Ð¯õ¤¤ìw‡ýY±6;^mö³§œš~TÐìÿw$|u±—�yˆ}Ϋc´{äòào²¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�OÕo’-9¸¬¥ßnà}\õBÖx\í²ÎŸh°´m~2;èãr£ Ø#—Óµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<¥ƒŸF£Ñhî7WQ¨{äòào²¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSîO²Ÿeÿ$a»•<Ö–´{od<Mµ®ÉH†Ñ/2¤3¸”MofSîg}-£á¯ Biw2Ú& ²ö†?YO“nýÿ$Š~H棌>¥?·A¡xª²Á?½”AG‹¯ûße× ¾—‹ñçô’"møBÚížD£ëäúG‰û„Ãó_¯a:H§Hÿ-N6ºmU•õì¹r>8x"ÁùÛ»¢w¶=žJÐÿç¬Pë„älÛŒÏYûÈé~½3Ÿd4x–ÌO}ùE µÎs^Û¾ýp¹O3Ú€=ªvð¿—¨û"7á]Ë(êÝ “ éwÎ$ºÊ ·ùä|´E!òA†½—擬ª4ëq$Ý|n“K‰J‹¨©\_Jo'Å•§Y{¦ýz‡®‡Òëm3m†B ðT¥ƒ?™ð£Â.¶dâ ‚HÆÉÅ›¸/O E™jÇýXnÒëk+»O#Õe­Å×s9º· ò&‰úL‚è}z=“Wáénvëx™µœí×7±ôä Êý@ZÉãÜúð‰Òû´A¡xªÊÁŸËñí„§Ç¢EÒN¤L®ë®†ÓÂ;c$_Hw¡¸XÝÖ…ÞªËz"qÿì®øšŽ%ŽútÎ%ž^ntèqòóägÖþq¹_뛽äP{çóÌä ‚îoDt^:Kæ¨IzÝ…à©êÿü˜½ÿyKÞé†ÎŽESº²J4οÌo»ÚSVüÙ©,ë…ã;†2*i‰íw-g<ÍÚCîök]] }pËÝñzŸGöǧ)—û4£ Ø£êñø´¢b¡6•I|¾åÙˆeşʲ.dzÔö+–w<ÍÚCîöë’7vº;ôx‹9Dwçwç‡fX£P<UÙàtÂû,WÉ»áîàL´HE¶ÓÝ¢ªð˜)UMÖë_%/l›ò2k?9Û¯Kvão·;¾ºãÓ…à)ûÁ¯»#Ng÷{מ•Ó+ö:ó¿Ég²–â.Ö¬š¯öèýÚz/Qpxÿy—¬Hê‹×âÇ–œhðŸ³ö—}Ö+ôk=))ûÝaV¬ÍŽW›ýìéz»äv±¦-=éÉŠÞ§«mÀ¹<ø›†¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSõ›dK$.kÆú®BW½5W»¬ó',m›œL³_ú¸\ÅhöÈåÁß4dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žÒÁO£Ñh4÷›«(Ô€=ryð7 YÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀS:øi4æ~s…°G.þ¦!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xŠIÖYÛ!k;dmƒB 𓬲¶CÖvÈÚ…à)&Y;dm‡¬íµ 5ÀSL²vÈÚYÛ!kj€§˜díµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<åþ$ûYÆñO¶[ÉcmI»÷FÆÓôW5ã~Ö×2þ*Ñ ”vg £šæ¬(ìµ 5ÀS• þé¥ :Z|Ýÿ.»Vð½\Œ?§”iÃÒn÷$]'×?JÜ$~˜ÿºfªÊz:H§óÁÁ ÎßÞ½³íñT‚þ?g…Z'&e[}U•µœî× ârŸf´{Tíà/Q÷… ¯³YõZFQï®H˜\H¿s&ÑUV¸Í'磚•f=ޤ›Ïmr)QxRRôNåzøRz5-†3.¿¨5M=úuýQ¨žªtð_%<*ìbK&Þ ˆdœ\¼‰ûò¤P”i¡vÜå&½þ(½½ä9´Ž%8y’<ßäw ý@/·¤Ý¿Iú§ûV]ÖZ|=—£Áer)s“Ds&Aô>½žù ÃðT£Oéõ5µ—œí×7±ô“þØå‡~ -í›k>¡·w:{Ž­“@NZÚ¿éÿÜ—@/I?þ˜þí~¹Ü§mÀU9øoâs9¾dõX´(yQ?I'¾O2œÞëÄüBº ÅÅÃf«pÁ+¹œLç»KÚçÏ.¿’Ó{“ü~U—õDâþÙ]ñ5K%/4y÷è.Ðãäç+WÂ÷‘µ\î×úfï0)Ô^Åãyß›¼“AÐ]óˆÎE] ï’{ÔË'雽ü|³75 P<UÝà×IîÙìþç-y§d8;MéÊN(Ñ8_1l²Ú“/øò»õìwñU–õÂñ€ C‹´Ä¬ÐÚx×2YûÈÝ~­«aaáÍ^2‡ô^æ·XÞÏÑóôÿäÿÿ·µ—û4£ Ø£êñø´¢b¡6•I|¾þÙˆŽL²ª²¬‹Çñ,µÙŠå-²ö’»ýZçÂ;Ýz¼ÞrïÍËõPz½’Ë(Ô�OU6øõø´îüX´rŸå*y7ÜínHŠ´Q$aûxýãAò“yþ˜¸²ããö¬š¬×)¾J^ØÖá}Ö~r¶_ë‡Ân|-ºÖ:ÆõÞªœÞgvL\þ² 5ÀSöƒÿîàÜ»ö¬¼8˜^ɰיÿMþ8“ÍŽOIïã0™œ?ë1Sz=ˆä*wyy±¸[ú8l½—(8L3N[ÉŠäìX²üßÌÚaɉË‘µ¿ì³^¡_g'¶h;ìÏŠµ»>ú´°;t=®ÞG;y“ø!=\CÇÆ(wyÃè5éãp£ Ø#—Óµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xª~“lÉÄeÍðÀõUé㪲Æãj—uþDƒ¥Íî$Uéãr£ Ø#—Óµ²¶CÖ6(Ô�O1ÉÚ!k;dm‡¬mP¨žb’µCÖvÈÚYÛ P<Å$k‡¬íµ²¶A¡xJ?F£ÑÜo®¢P��p…��€£(Ô���E¡��à( 5���GQ¨��8ŠB ��ÀQj���Ž¢P��p…��€£(Ô���E¡��à( 5���GQ¨��8ŠB ��ÀQj���NùÿöYÉìá’����IEND®B`‚��hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9u_MA.png�����������������������������������������0000664�0000000�0000000�00000020175�15030617045�0023145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��±��?���Qˆ›���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� IDATx^íÝÏ‹œ×¹'pÿ!!ëØ´$ä¨AX6R¼H6 Zha‚ Ê"0`EZf1ƒÈ]ÝHà̦C“³²…=ƒDFA0—k£Í%\Œ!—Ä;ý”ºäê«ºªN½oϾØúa©¤zËÏ·O:ï ��tŒ �@ç(±��tŽ �@ç(±��tŽ �@ç(±��tŽ �@ç(±��tŽ �@ç(±��tŽ �@ç(±��tÎLJì /èÆÔÍk žk€ù˜Y‰‘ò¨ÅÌJ,ÔÌk mz®]w@M”X˜¯z(±�ó¡Ä x ÔC‰˜%fÀk J,À|(±0^õPbæC‰…𨇠0J,Ì€×@=”X€ùPba¼ê¡Ä̇ 3à5P%`>”X˜¯z(±�ó¡Ä x ÔC‰˜ Kì¿7ë׎÷㶺Ö|øéãæû­ŸÕ4ÿlž¬¿·ûç æø‡ÍƒnþÌ6dzïçÚzódدyèVóÙwO{?ºÓÓ'šõ¯5‡ú?÷Òæãÿ·Þ|ð£g¿ïÈž¬7×¶~C7>k¾Ûúîžï>knzöcÇ?|°ùÇ{Œäâï:´é¹vÝ5©°Ä†ï››åðÃ?TÖ¦ùÏÍï»Ú\»ûå@‘Ýðy ðÏ͇[e2Jìz0DI~ó‡_;ýïŸnvÇ[Í¡+·›õ½Ú\¹ûÕæ÷l÷ôɧͭ+ï5w¿¬œß5×o5—¶ÊóXâqüøÒæûëfýÛl}ç5ï¾Ýºt©ùñ#ÃUS&ž>i||£¹´ùç?ó³¼×¬?÷í®6=×Õ\w�›”ØAO¿jî¾ù›’·i&%ö?šÏnü¸W ÿùønsåÊÝæñ¶†…úZsã³ÿØúöôÇíæîæï{éÃ/žõøó^ùqsãîí<FöRG™ˆëôÍæÐµ›¯¾¯÷âPbæC‰Ý&V&¯5×Öÿ}ëÛ›Kè@q4v‰í½…ÿvs÷ñm~#Êâ{[ÿ¾%~Ÿ¥)¿…¿õ8¾Bºµ=àiÿß¿ú_ã?FöTE™ˆëôxÿ©— 0JìÛ é¦(›žø3õ²ï[ù;Jì.ÏÞ¦?þ|oj|ûwÍ›ƒo×Çïy-{y^¦û+¬ÿ·ùtk¥õ鮢=ÂcdO­{ \DZ÷ùO¾h>¾q¥÷íCïl~qÓb¿Ü|ºùÚx¾û…CÍ¥ëÍãÁ•Ö^yíÿø`µí¤÷EÔæwèÚÍ¿n=–È¡kÿÒ|ñdàÝžïšÇŸÝmn\:´õó®47>þ¢yÒ‚ 2O[´é±�Ìš»CZbûoÈJìvû•Ø(‘onß*«žo¼]¿«ÄƯ¹ýÃhÏ>„5†çާÍ÷>j.ÅþØþJë®;ÂcdOí| Ä; ï5ÿíîÇÍ­+ï<û ãÓkÖßùå³ëµ÷ïo77Ö¿z¶Ý¤ïû/šnýïŠî–x­,íü àX¶¾XºöQóéã­_åé·Íg·ÞÜ^†{ß÷^sãîgÏËôÓ^ »ygýßæþ…U›žëv^w�³¡ÄnŸÌÿÍðí#Ù»ÄöWŸâïh{Þ–Ý«,T¤ƒŽÞ^ØCÍ ý}®;þŒ#=Fö_í³õÅÐ¥ÿÞ|¶k¥3 åÿhÞKKaüw¿Ùña­x­üz¬•×Ý¢Tÿn×5µý É4ß®Ð|ôà?{ßÚ¦%_XMã¹þíoÛ|òÉ'[ß:¸v^w�³¡Äê­D½³}¨NµÄn°kõjçÛõ±/ÜÓ(±;mû±Q#{iåk Jßñ!{­û_Øl>î<;OþnÆè6¯ó[ìx<;¾ŒÇõÞÇyQ] û§?ý©Y^^n~ñ‹_4?ÞúÞñMã±�t…Û÷ôIóÅG¿nÞõˆ­¡ö(±ýÓ�²Sb _ù¨yðüíÒO›[×~׬÷ßfÝòôÛõ楖Ø1#õñ5Ð[av ŒûÅQï:ùõdGiÅïùË%tÇksë6þ<oN´a:¦õ\ÿýïo~ÿûß÷~½ÕÕÕæoûÛÖŒN‰jRa‰ÝzKuó1nˈ7;º5ò®»ÿaEiç?Ì;ŸV¼žíûûá//¼°Ô\ûp½y°ë­à½ÅÛ³?ÜŒaÇ´3#<Frñ÷Ô.û¬¤ïµâ™™Æ*èfA}gW ݱu!Jlv¼Û÷_6wß¹±ý8¼9™ös+±ï¿ÿ~ï×]__ï•ÛQµïº˜ K,Ì^û^±ÂùögÇÞӻ߉èVp«ùÝgßn+¿“¯‚>ûP×ÒÎ/ £o{§!¶Ö\i®}´±uÁ?š'Ö›¯½ÝÜÚñ˜æeVÏõÆÆÆó-ùË_¶¾woþß ÔD‰…hÍk`¯Õö]+œQÿçöc¬îþŸ•ÿgû¥wý:‘±nM¼ýÝçïnĪkÿ×ÜB°ãدCƒ§´@<¦Y‰UØXß#Vg¿ùæ›­ÉÍò±�´ 3à5PÏuìío1øãÿ8t‹ë¨‰ 3à5P’Ïuì—í±Í ;’ËuÔD‰í¬!PK2ö˜Xü½S‡y<ױŠŠì¯~õ«mGr¹î€š(±0^õ˜×sÉåºj¢Ä Ôö~—·ÝY´wâÏ4Oý#¹be6Ë8Grt™ 3à5P¶<×q$W<–qŽäè2%fÀk mz®ã±Œs$@—)±0^õh[‰ £ÉÐeJ,Ì€×@=ÚXbûö;’  Ë”X˜¯z´¹Äö ;’  Ë¦þßøŸ¨ˆˆÌ'ÃdGrt™å"˜½ÊÌÓà‘\±Bk¿,ÐU&-@…âH®(²ŽäºJ‰¨T¬Â:’ è*% rŽäºH‰ Ç‘\@—(±�lãH.  ”X�vq$ÐvJ,�CÅJl¬È:’ h%€}9’ h%€‘Ä*lœ^àH.  ”X�ÆâH.  ”X�$¶ôäŠí�%)±�LÄ‘\À<(±�L,¶ôäŠ:’ ˜5%€©Ùy$À¬(±�L#¹€YSb˜‰GrÙb�L“ ÀL9’ ˜%€"ÉL“ @QŽä¦A‰ ¸IŽäŠí¶$�J,�ss#¹úÿ" uSb˜»qŽäúä“Oz+¸Š,ÔM‰ ¢Žr$Wÿç(²P7%€VÙïH®þ)²P7%€Vv$×`,²@]”X�Z­$×o¼ÑüùÏNKl$N9�ê¡ÄÐzýë_›>ø -¯ƒQd¡J,�­{^ûçÊîEê ÄÐjQ`cÏkVX‡E‘…ŧÄÐZ_~ùesâĉ´¨î—8Ù�X\J,�­'dåtœ žj�,%€VŠób£„þáh®\¹’–ÔQ¢ÈÂbRbè„~©ý®q~lVX‡E‘…Å£ÄÐIƒ¥6ΑÍÊë`YX,J,� á›o¾i>ùä“fuuuh©}üøñÖϺN‰`! –Ú~‰rßtŸ @b6ŽÝzÿý÷YX�J,�ÕÜb "ÓIiJ,�ÕɰˆL–Ò”X�ª“ `™,¥)±�T'À"2YJSb¨N6€Ed²”¦ÄPl�‹Èd)M‰ :Ù�‘ÉRš @u²,"“¥4%€êdXD&KiJ,�ÕɰˆL–Ò”X�ª“ `™,¥)±�T'ÀÒž¼òÊ+ÍÏþóôǤ½)M‰ :Ù�–éçØ±c͹sçš .ôþ}ðÇ^z饿úõëÛróæÍæÎ;Û²ºººëçýò—¿ÜökEΟ?ßû½–——wý˜”IiJ,�ÕɰL–3gÎôÊjÿÛ—/_~^J×ÖÖš^ž<y2Õ<zô¨÷ëÞ¿[éí?Ž—_~¹9{öìóoËìRš @u²,ã%V=9Òû÷×_ýyaBùõ×_§…³t>|ØÜ»w¯¹}ûvsõêÕç=ÊöÑ£GŸ[¦“Ò”X�ª“ `Ù;±¢‰_YYéÃXýŒ•Ь@¶5Q²£l®ÖZ©NJSb¨N6€ew¢´öW[c¥5V5»VZ÷J¬GBÛâÏ©Ð<¥)±�T'Àò,q2ÀÎâÚ–í³Nl?,´±ebðïFöNiJ,�ÕÉpíùÉO~Òûgì­©¸KÚøØÒÒR¯ÌF¹ßùw&ÛSš @u²\cNœ8Ñ+hq²@¬@FqË ]͉2¥¾¿‡öâÅ‹»þåYJSb¨N6€kJ¬*ž<y²÷¶¹U×ÑÓ_¿ÃÁãÄäYJSb¨N6€kHÿt·Þz«W^³¢&û'>ÜÖßj`eö‡”¦ÄPl�/rúå5ÞŸÅ jM¿ÌÆß­2«ÄÀÌexÓÿ0’ò:Û –ÙšO4(M‰ :Ù�^¤œ:uª9vìXoÏkœƒš/™~¢ÌƱdñôW¿kJiJ,�ÕÉð¢$뽚qWª¬hÉì«ÞqTÙñãÇ{'@dÏÓ"¦4%€êd¸ë‰c²âŸ±è´vdmmíù9³;Ÿ¯ELiJ,�ÕÉp—súôé^‰µu }‰-±'¹†UÙÒ”X�ª“ à.&ö½Æ?ãFV_Ûþªì"ï•-M‰ :Ù�îZbïk¬¾:u ;‰UÙþ^Ùì9ízJSb¨N6€»’8y J½¯ÝM|è.žËE[•-M‰ :Ù�îB–——{ÿŒ·¦³r$ÝIÜÂvee¥9|øð®ç¹«)M‰ :Ù�n{Ο?ß;÷5ÊOVФ›‰ýÌñüö÷7w9¥)±�T'ÀmÎÉ“'mXàÄ©±µ ö9gÏWRš @u²ÜÆÄþ×ø§,~úÛ º| WiJ,�ÕÉpÛrôèÑÞ?ïÝ»—–Y¼ÄJ{œ^ÐÕ}²¥)±�T'ÀmJ¬ÆÅñYö¿Ö™ÕÕÕNÙÒ”X�ª“ à¶D•HÙ®}Ø«4%€êd¸ Q`e0QdãC}ÙµÒÆ”¦ÄPl�Ï; ¬d‰"›]/mLiJ,�ÕÉð<£ÀÊ^éÊŠliJ,�ÕÉð¼¢ÀÊ(‰"·ή¡¶¤4%€êdx‰îX5QdÛ|jAiJ,�ÕÉpéÄ9° ¬Œ›¸s[Ü‚8»¦æÒ”X�ª“ à’é߉kcc#-*"ÃÒ¿!B¬âï¼®æÒ”X�ª“ àÒq'.9h¢ÈÆ*þòòrzmÍ+¥)±�T'À¥Ÿ2¿sçNZNDFMlCYZZjÕ JSb¨N6€K$ö2ƞƬ”ˆŒ›û÷ï§×Ù¼Rš @u²<ëœ={¶·—1Þ Î ‰ÈA«úm9C¶4%€êdx–éŸDðèÑ£´ˆˆL’¶œXPš @u²<ëÄ[¿Y™4±º¿²²2÷ JSb¨N6€g•Ó§OÛ+3O|Ð+»þJ¦4%€êdx‰}°±À>X)‘Ø›]‡¥Rš @u²<«¸¡”Ìõë×ç¶­ 4%€êdxÚ‰ó;+¥«þq~lvMÎ:¥)±�T'ÀÓLÿ8­¬dˆÌ:kkks¹ BiJ,�ÕÉð´´É †H‰Ìc[AiJ,�ÕÉð´b´!q&qv}Î2¥)±�T'ÀÓÈ+¯¼Ò\¾|ÙiÒŠÄS‡N¯ÕY¤4%€êdxZ¹wï^Z(DJ'¾˜Š/ªâŽqÙµ:픦ÄPl�Oš .ôö!feBd^‰;Åe×ë,Rš @u²<8VÚ˜øâêÅ_L¯Ùi¦4%€êdx’œ;w®Y]]M „ȼSêC^¥)±�T'À“&ŠBV DÚø"kÖ«±¥)±�T'ÀUXéBJ¬Æ–¦ÄPl�O«°Ò…Ä[§NJ¯ái¤4%€êdø ¹xñbsóæÍ´0ˆ´-q¹ì:žVJSb¨N6€'H—2ËÛÑ–¦ÄPl�›3gÎ8V:—ø¢+»ž§‘Ò”X�ª“ àqsòäÉÞAòYQisVVVšcÇŽ¥×õ$)M‰ :Ù�'ñᘟþô§iAi{âÖȳØRPš @u²<NNŸ>ݬ­­¥A¤ YZZJ¯íIRš @u²<n¾þúë´ˆt!·oßîqœ]ÛMiJ,�ÕÉð¨¹pá‚›Hç3‹›”¦ÄPl�è’EHìë>qâDz$¥)±�T'À£&ŽÖÊ H×[ Ο?Ÿ^çIiJ,�ÕÉð(9{ö¬­²0™ö¼JSb¨N6€G­²H™æ–‚Ò”X�ª“ àQb+,ZbKA¼Ã]ïã¦4%€êdx¿Ä Ÿ‘®fš[ JSb¨N6€G‰­²ˆ™ÖJSb¨N6€G‰È"&>¬8-¥)±�T'À{åèÑ£Íõë×Ó ÒõÜ»w¯9räHzí“Ò”X�ª“ ཫTkkkiézâ†ìº7¥)±�T'Àû%>�“�‘EÈåË—Óë~œ”¦ÄPl�ï•—_~9ü"‹’Ø»¼¼œ^ÿ£¦4%€êdxXb?ìÍ›7ÓÁ/²(‰í2ñÅZö5¥)±�T'ÀÃráÂ…æÎ;éàY”Lã¼ØÒ”X�ª“ ི±±‘~‘EJví“Ò”X�ª“ à½â|X©!qŒ\výšÒ”X�ª“ àañ¡.©%q[åInzPš @u²<,nr µ$nz0ɇ»JSb¨N6€³Ä‘C±:• |‘EKìýÎ^£¦4%€êd8˹sçœL U%{ŒšÒ”X�ª“ à,¯¾újsÿþýtØ‹,b²×Á¨)M‰ :Ù�ÇkIMYYYI_£¤4%€êdxX=z”{‘EÌ$Çl•¦ÄPl�K6èE5ñAÆW^y%}-ì—Ò”X�ª“ àaɽȢ&>È·ZÎ^ û¥4%€êd8Ë[o½•z‘EM”Ø8•#{=ì—Ò”X�ª“ à,nt µemmM‰€¶Êp%VjKœÆñÚk¯¥¯‡ýRš @u²œE‰•Ú2É]»JSb¨N6€wæØ±cîÖ%ÕE‰€ËðμñÆJ¬T%�Z,À;nQb¥¶(±�ÐbÙ�Þ%VjÌçŸît�h«l�ïŒ+5ÆJ,�´X6€w&îZ¤ÄJmQb Å²¼3/^Tb¥º(±�ÐbÙ�ÎróæÍtЋ,j”X�h±l�gq³©-QbãŒäìõ°_JSb¨N6€³(±R[îß¿ßÛž½öKiJ,�ÕÉp–wß}7ô"‹šØîˆ-�h©l�gy饗ÒA/²¨Qb Å²<,Ù YÔD‰}õÕWÓ×Â~)M‰ :Ù�–lЋ,jâDŽìu0JJSb¨N6€‡%>­ {‘EL|˜1{Œ’Ò”X�ª“ à,qÔ+5åå—_N_ £¤4%€êd8K|Àemm-ö"‹˜ìu0jJSb¨N6€³D‰uëY©%>L_£¦4%€êd8Kl'pëY©%q£ƒƒÞ­+Rš @u²<,+++éÀY´LrFl¤4%€êdx¯d_dÑ'X‰€Ëð^‰½‚ÙÐY¤,--¥×ÿ¨)M‰ :Ù�–8rèÞ½{éÐY”<zô(½þÇIiJ,�ÕÉð°œ={¶Y]]M¿È¢dÒuEJSb¨N6€÷ÊåË—ÓÁ/²(¹}ûöDꊔ¦ÄPl�ï—x»5þ"‹In7ÛOiJ,�ÕÉð^9räˆ}±²ÐÉ®ûqSš @u²¼Wì‹•EÎçŸÞœ?>½öÇIiJ,�ÕÉð~‰ã‡² ÒõÄ~ØøB-»îÇIiJ,�ÕÉð(q^¬,b®^½š^ïã¦4%€êdx¿ÄJÕÚÚZZDºš¯¿þ:½Þ’Ò”X�ª“ àýrôèÑÞŠUVDºšøÀb|p1»æÇMiJ,�ÕÉð¨qÔ–,RnÞ¼Ù»+]v­›Ò”X�ª“ àQrøða[ da2Í­‘Ò”X�ª“ àQ%Ö–Y”Ls+A¤4%€êdxœØR ‹in%ˆ”¦ÄPl�[ dQ’]ß“¤4%€êdxÔœ8q¢¹|ùrZ Dº’ØJ_e×øASš @u²<n666Òr Ò…¼ûcã²kû )M‰ :Ù�'ËËËÍêêjZDÚžØÓ]ד¦4%€êdø ‰#в’ ÒæÜ¾}{ªèê§4%€êdxÜD ¸sçNZDÚšøÂ륗^J¯éISš @u²|,--Y•N%¾ð:vìXz=OšÒ”X�ª“ àƒÄj¬t)ñ×,¶ôSš @u²|œ:uªwÜ–ÕXéBâ|c%�:,À͹sç¬ÆJë_hÅö—ìžVJSb¨N6€šX=sæŒÕXiuâ ­Y®ÂFJSb¨N6€'‰ÕXisJ¬ÂFJSb¨N6€'‰ÕXisJ¬ÂFJSb¨N6€'ÍéÓ§{‡Èg%Bd^‰»s•(°‘Ò”X�ª“ ài%JCV&D摸=² � "ÀÓHì½~ýzZ&DJgcc#½Ng•Ò”X�ª“ ài&ÊCV*DJ&¾ ŠýÚÙ5:‹”¦ÄPl�O+ñ/7@y'nl0«ÛËKiJ,�ÕÉð4ãC^2Ï”ü0×`JSb¨N6€gÛ d‰mJ,�, l�O;¶È<2mý”¦ÄPl�Ï"GŽinÞ¼™– ‘içáÇéuX*¥)±�T'À³Ìýû÷ÓÒ!2ͬ¬¬4/¾øbz –HiJ,�ÕÉð¬rôèÑÞÖ7AY&n-+ÿÙ5X*¥)±�T'À³ÌÙ³gm+™%Vú³ë®tJSb¨N6€gø°M¬–e%Dä ‰}°qÁ¼>Ì5˜Ò”X�ª“ àR±?V¦•8ù"öÁÆJv­•NiJ,�ÕÉp‰ÄjY¬šÅêYVJDÆIlQ™Çy°ÃRš @u²\*Q:œ+“fuuµ9|øpzÍ+¥)±�T'À%sâĉÞÛÀЬ$÷îÝK¯«y§4%€êd¸tbE6VÓ²’"2,m-°‘Ò”X�ª“ ày$ÞVdeÔô l¬äï¼–ÚÒ”X�ª“ àyE‘•QÒ/°mÛ;˜Ò”X�ª“ àyæäɓЬ Mÿfm.°‘Ò”X�ª“ àyG‘•,Q`cÿtÛ l¤4%€êd¸ Qde0]ØB0˜Ò”X�ª“ à¶$nˆ ÈJ× l¤4%€êd¸M‰âwcrŽléb”¦ÄPl�·-çÏŸo®^½ªÈV–~ù×DÛSš @u²ÜÆÄzΜ9Ó<|ø0-<²X‰m$ÙuЕ”¦ÄPl�·5ËËËÍ~ô£Þ§Ô³â#ÝO¬¶Çö‘#Gޤ×@WRš @u²ÜæôßZ¾}ûvZ‚¤»‰UöË—/÷VÝw>ï]KiJ,�ÕÉpe6öÉ>zô(-DÒ­¬­­õž×®}€kXJSb¨N6€»’sçÎõöÉÚ^ÐÝô·tñÃ[{¥4%€êd¸K±½ »ÙØØX˜í;Sš @u²ÜÅô·8†«¹sçNïy;zôè®çrRš @u²ÜÕÄŠÞÒÒRoeVœdþ‰o­¬¬tþôýRš @u²ÜõĪìõë×)Û¢Ä ylùˆççÔ©S»ž³EKiJ,�ÕÉð"äÅ_ìý3Š“-óM|ð.ö¾ÖP^û)M‰ :Ù�^¤Dq²Å`>‰•ðXçaÑNØ/¥)±�T'À‹˜(Q±ŸˆÏ —L/qvoÿ¶±5­¾¦4%€êdxQÓ?HÿÝwßUfgÁògøþÝ×–Ò”X�ª“ àEÏ`™u£„Éåµÿ¡­ÚËk?¥)±�T'Àµ$Î(ío3¸wï^ZÐdx¬¼OiJ,�ÕÉpm‰"Û?c6ár–•6y–X½î`«Ö=¯û¥4%€êd¸æœ={¶÷ϸŸ¿­?$Š}ü×_½w£‚þ– ÉSš @u²,Ïîþ+´±:o™×Xh£¸ÆÑdq‡­þßÉο'ÉSš @u²,ÛÓ_,´‹z…8Û5V\ûÅÕvƒ¥4%€êdX†§_h#±/4V*»|{ÛXmµE9’¾óÏ(KiJ,�ÕɰŒ–8ÝàüùóÏ¿¥6V1Û¼RçãFñŽ=¿±¿5wìqµU`º)M‰ :Ù�–ƒ%öÐ5%1Êb¿Ø–\±Ý/¬±ÊzõêÕç+VZ•ÖÙ¦4%€êdX¦—X­Ýy†jÈXµí¯ÜöoëGñ5ƒÿmÕøõÞzë­m¿W¬///oû>™}JSb¨N6€¥\.^¼Ø+¹‘ .4?ûÙÏÒŸ7˜×^{mÛÿžý<™_JSb¨N6€Ed²”¦ÄPl�‹Èd)M‰ :Ù�‘ÉRš @u²,"“¥4%€êdXD&KiJ,�ÕɰˆL–Ò”X�ª“ `™,¥)±�T'À"2YJSb¨N6€Ed²”¦ÄP•løŠÈä)M‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:G‰� s”X��:¦iþ?Üßh ãYO����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9v_CCN.png����������������������������������������0000664�0000000�0000000�00000032240�15030617045�0023250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��š��S���™¬���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��45IDATx^íÝ¿k[þÿqÿ_VµZçðÞ&•*má"iܤP!.R˜½Š@Š ·Ðb¸Ü……€ÀYøÂÂ@Øe!1ˆm‹A|óðÁ¶¸Ü5—Œá†`Äû{ÞgæÈ£ÑH–ÍèÌÌóg÷Ú‘%YgæÌëüï���‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ð&hîìyT퀪ð*hR( %ÿ�YaDðçA5øTÏs�²DÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ<ÂyP M�UAÐ\ɵŒƒCûgË®´zodt5‰gŒiÍ=.^Ò^™§J¯žöï®J0¾6O˜òÚµ® .c¯7Ë0èI«æß”ÎÉ©?´Â×½ƒÉx(A¯%µèõk­c9ýßSéíõd¨oÑI¾vͼæéPægõµ¯‡=©Ûç¨I£w&á»ùE‚V=z¯ZÜï]Mú ü|ªgŽ9�Y"h®AƒÒ^oh¢Ÿ3‘«á±4['r›6<¥¦+F¡ËÍiP Ãd}úÜi??‘ËAWjÍ%xñPšýsó„É… ºÒêˆBœ2ïqH§Ñ¼SМ\rØîÉ«Áèæ9¯Î%è4e§ š“Ÿ%8|,½WÿŠïK]i¸p­\À®=–àâkø=¥=þ|U‹þWÿfŽÉšý}ÃR—VðKôïåçS=W㘰-Í5ÌMõEFý¶´ƒŸcÁ/‹ ù« :÷lÀ¼õ¥ÙìËh&iF¡·30ñnSô5¥?ú}s9ή{ÿ‚ŸÊ~ZøµÏq04÷žJÿ¯R‹¿W‚¦Uþ‹~xœ6jméŸoîH-‚&€ª h®!=hšK§¿V ãèëÙ  —qëM vµƒ(ô¥@}é ~¾Þ€™0¹L"L.ã~ïÏgÒk<¼ùšVù/úzœ6ÓGä+„   *škX4gC£Ò _w›:N• šIá´y}:˜6‚¨¯¹¿ZØ[•†¿™�½HÚìÓÏê«\¥ÞäB ‚¦å×y;޵n¾ŽexÒ‘†~=³ôáRF§Ç±uÁ¦4ºŒâ#–07ÿ/s£óKLΥ߬…ë_DïE‹ùúølœ¯æ} ú±)z]¯|&c®¾_øô^�”As ëÍ[F4gÜ4uÄpv´RG÷ãèdÐ Ÿ3¼ÀFeÝ —iÐ4ÿmCÃóž?4#>ž:b¿ÿý y¥ëíæ·/¶“°kWí0I³ÌnŠ“Ï2<þav®Òúß]²™mzì×Í9uêÖ •ñà™4âÕ®W>”N0}_“ñ™œtË\¶cSõ¼‰çññ˜PÞ´0Ehì͹@¶Fð²–M;5o>ýŒf‹›JWËí*a7ÅÊ¡@ŸÅiû™Pî68™€pAÐTþ®ÃÒ”îàb> ™Ð×=ŒF¥gèÏÍoðÑseÌ“щ&§ÞgŽ+ ¿?ȱv`’æ:hÛ±©zÞÄóøwÌ(oZ˜"4véA3Ñ™ŸÆÞTÐÔÍF‰3Vrú<üº9½mP܃¦ŽJõ®0mDrÓàËÌCw«·›ÒéÿHÐ4ü;RFÓ§ÂcSßsz™ßI¾°³¶2=Î0¡7ñ~â=)?<I“Í9›z/�Æ›¦ÝüEò«ŒÏþ"íöª·7ZdIдÓË÷Ò/ôzÑlËн¶›. Îgæ s:E½nÐ4®>H¿ýxvý›»_f}vÞyÿHÚÇïbkàô66ôZ›°š šQHµkíšþöø3õœz,¯ÛÑ`ÚúÆÛékÍÝ aæÜ\²äÃ.Øè  *¼iaünìÜôarÄfŶ/ PzÑLÙ á.’Êâ7uŸ^<“ï'v“s nÃFTj­žÃäF‰5\dÐ?§Ž@þC†ãÄú»¹Í5it^Èëèµ5 „7lËM°ÖQ³=‚¦¡Ÿ‹W–Ž�jp|:úK»[ºL'®ý,±œ#1M¿hzÞvš:óëF·`Sõ¼‰çñî˜P*Þ´04v€çvv—Œ�†7ôOŽèë.ô¥óôtv‡·ŽŽî?ýö@s·ÜJÞ^K¿nJk:ºîFÖÒ×™nA@UxÓÂÐØ¾œ FÚm‰o@ …»¹›Ñ¿ÏŽbÛ_¸™moû¾&Fñ§£ßºLÅÝJ,6²5’Ó^âϦÎÜni»ô=mÂ&žgSï�ÒxÓÂÐØœUAÐPÞ´04v�çAU4T…7- ]mjJ)lÌÙ ýìQ~›ªçM<Ç€,yÓÂÐØœUAÐPÞ´04v@ÅÎ{Nw+¬[JÉFØõwÚ„M<Ï¦Þ �¤ñ¦…¡±8ª‚   *¼iahì�΃ª h¨ oZ;€ó *š�ªÂ›†Æà<¨ ‚&€ªð¦…¡±8ª‚   *¼ia´±£P(Jþ�²B x„‹~5lªž9^�øŽV � Š  Àw´R�PPM�¾£•€‚"hð­�A€ïh¥�  š�|G+�EÐà;Z)�((‚&�ßÑJ@A4øŽV � Š  Àw´R�PPM�¾£•€‚"hð­�A€ïh¥�  š�|G+�EÐà;Z)�((‚&�ßÑJ@A4øŽV � Š  Àw´R�PPM�¾£•€‚"hð­¡7oÞÈÿøGyòä …²ñBÐà;Z) #?ýô“ þóŸ% eã…  Àw´R@4d~÷ÝwòñãÇè;��TAØ ß~ûM=z$÷ïß'd�*  lȧOŸlÈÔ¢�€ª#h £—:U®4™��„šÀ7zÿþ½ ™º.��Ü hßàÝ»wvç¯î���³šÀ½|ùÒ†L ›��`A¸wû¢Ñh}��$45èFÝðÃ=2�¸AX‘»G¦½•��XŽ ‰ÊÓ‘ÉÛÖYºÛqL��VGÐDå¹QÊEt&·/�`}MTšÞ–HwŽkI[sén_¤;Ì�Àzš¨,]g¹··7 šÉË·oßÚïsû"��‰ÊÒÝã.dºâÖ_ºÛ2�¸;‚&*ÉV&ËßÿþwùÃþ ¿ÿýï¹}��߈ ‰ÊÑQK­L š¿ûÝïä¿þë¿äÇÑ£�À]4Q9ÏŸ?O ™®èºMÝ$ÄmŒ��ø6MTÊû÷ïSÃeZÑQO œ��ànš¨ŒeSæËÊýû÷m@��ë!h¢2ô^˜iAò¶¢AS7�€õ4Q ú×}ÒBä²¢“Û�pwMT‚†Æ´0™VôþšL�À·!h¢ôâfrYÑÝèL��6‡ ‰RÓ›®§…ÊxÑ¿¤Ž��lA¥öèÑ£Ôp©÷Ê$`�-‚&J+íÏLº{cr3v��²GÐD)éHeüž™ºˆ€ �@¾š( •JwŽ»€É-Š�àvÚfê†HŠE÷A¥âF0) …²~ÑN:Å¿âꦈ'M”ŠžŒLƒÖüEýTuî/]¦Ë¿tI˜[ V”ͬU(Êâ ®üFýTu^ :ªéwOÑ©uŸqT¡Th(‹ƒºòõS=Ôy±hÀÔ ©õ¦ÁÓ×iuŽ*” eqPW~£~ª‡:/¦ø´º»…ŸOÓêU(Êâ ®üFýTu^|>N«sT¡Th(‹ƒºòõS=ÔyñiÐt»ÔŸ?NÐ6†²8¨+¿Q?ÕC“ÞiE§Ëu7:Sç@Æh(‹ƒºòõS=Ôy±èMÜÙ 䌆²8¨+¿Q?ÕCC|zœÛ9£¡,êÊoÔOõPçþò}z|Ž*” eqPW~£~ª‡:÷“›×€éëôø2U(Êâ ®üFýTuî'¹taS§Ìumf‘pT¡Th(‹£”uu=”^}Çün é ¯¢oçÒ%ªã¤²Õùõ°'uó;íÔ{2¼Ž¾Y`0ãk3™:¶€‹cq”·®~‘ ýL—“èëbâ\Z¦uœTÊ:Òî ä2ú² tó œ/_¾´ë7}FK‚RÙNCy)£ÓciÕt”cGj­cysúBÚöë=é ~µšŒ‡òúUoú¸FW‚‘6æ¢ÕªG?û½|ߨ™ÿnJ§ÿßÒï4ÍפÑ=•ñE -ý¹]iuKÃ>GGúÁ éD?Ó\ÈôÒ7Ëðõÿ•^k×>·}Îà\|ƒÙN]å@G¼ôeTð RÚúÙ„’ÔqRëüzx,úç7íb‰èzÍøæ _'- J%÷†rr!ƒî´zodt¥MÙWÿf‚_]šñÆmr.ýæ¾ ƒèqæ[£¾4[ŒíWW2ì5Ã@9™Èå +µZ[úç&ˆ^I¯ñPú£/Ñ´ ”¿Ê ³gÂ鉜_]Ë•iPMwñû"£þCitú2°aÖ°ïá±c?æ¶rQ»°¾#õÞP¾ŽÏäĆyòÛ\¸ »Éi¯%µè±6ìw‚iÝ…&æaƒ¨3 òkŽ ØãÀ½Ž›â»HÇuH¦ÇH¾ôµ‹é¦ãf?ϯ¦ÃuÒ ;f5sü_| –[Gç³{i}ê9z0}í™öbKô½äçÚœŽ‡Ñï¯Ë>Em§všw¥ü}Zobf-ifÓáô£Ÿ7±yóœAgÚÙ_M¼^fKÍÓ‘Q œ6}Ý,DÐD©hc½€üI§ ¢£ è‘´‚_¢¯ÓiÀØw W"êڢݔ›§7#¦3ÿ–BŸgÿ©7Ó}ùÖUœ^Håûþ‰t›méŽäjò³íáš;ûßæsM^ÈLà?¨éP ž™Ï»'Áplë2~'Ç­†<lÈþZ¡Á=—v¢Ÿºú }ó<3#Ô9Û^ýl†=¿¾!¯¦Á/r<–]ÓÁ¸Î½ŽµSx/%L~6çðiôΡi;¶Rç¶]ú^ú¯žšÏúXNMÇxra‚ünØé²ÿÝt³?Ž ŸÃ¿J×µ½Ó ñv$LÝýEZõÒzh:ìÚI_™ÖÕÁÌúÛÉøTº­?ÉÀ>·ŸÜí4lê(§O“ ‰Rɵ¡ÔòÁqÊ"s 2G±†JG9ÿq¥~Fu+jXßoÝü›ŽÂÙ‘ÊpdÄ^(õû3áTÃíãé…ÌNÓ÷£QœxÙÒèX}?Ûx5ž¥\8u”þÜQøy›úêÆF@;y³\bu—rnÂoSG´/MÈl?–ã³0ÜlËöêgÜhYb9‰µ:ŽF5§3JÃÒñlc˶Rçv–!Z4÷1˜Ð×5!ÓBÇéÏÙölQ}FŸy­»^ç:Ñ!/BÈŒÓÀ©ë6µ.}Ù¡NÐD©äÚP.\§¥=âN�¿ÚQ”š®¥Œb£ú˜ÃiO{v4r¶G}3º™ 3áôftÓŽ�ÔtçÍ4}Øè>]s&[[ 2ú¹Õ\|lx¦ÞRË¡©×+;"š44¨´ÖAqttk_vÜ’‰-Óß·¸ôÚO¯£mÕ± ¨7?§Kbš&Ô¦…¨-Ñß?_a¬/˜’¶íâ\ýÄŠ¶™‰`8cÚI¾^‹éœŸ˜ŸOëú+¾QÈ—éM”Šž\¹Ñ ¹› ,—2 ºÒpkíl#˜r1ыξk�!p¦áÔpù0©œ§³Sﺎó³y|;¶¾É™ýYäZW1K—hî¹ð¾ˆ~–®#‘°,ÄÞ"99’Ζ§ÌmÕÏFØóaÁzä­Õ±>g#ê(j§âaÊyº]ù×y¢óœ ì=7ƒ³ˆÖG;í|^b—+^Èô1`:M”J¾ ex±hõ?„#•WçtšRk4äž 2ÉÞ¶îÂç7 Ëg×ZÎöÂõânÎÛÙ©rÛØÚÑMm¸ã#1:m„ é×BÊØv‚Ì-#»Z_‡'·Œ€h¤Œ–Ùu•æs¾ËŠÝ2óË0pFÿ½M…š3¹„mÕñ4øœÊ…N™Ç7Ÿy"ÿ:×Ïyqx2:‘ÃÛfaRƒkwÙd®ÍmÄ—Ö, ³ÛçsÀtš(•ÜÊ(\êëÚÛõÞÈùðÅÍHã´ÁsÓ=ú˜þÍÊÿsO÷Ü4^¸fsæ&Ã_ud&9ͧS{rök»{z:Ådþmôÿ‹aôøZ«'ÿ=Ý]ëÏM¦õ½å/êçèR‡Ž´]çÁ±;”»òÔŽ4&×Ö™¯GtMiµ¶>–ŽÀ$Ímüq£)Ç2ÜâÚ½íÔÏfÌl¦›³…:ŽØÑôš9ç~M™;¹×yê¬PŒnÚ:<Jtº´.ÞH¯Ó‹‚`¢ÃojÝÎ*5Ì÷L}­×Þ¹Ÿd~ËÈhvâóùóç^ß¼ ‰RÙþÅ11Òˆ…r­+½ Ù¿æ’RæF§tØÝfE£ë]ÿífufïª÷3=þbLt»–ESóqvz×½†Û\â6±Dϻſh¢¯_,Ú‰;_ó%¶6ÒÊ©Ž“ìq¿u_ô÷Êô3=WRF uÈÝžJ‹®w=œÝ84s«*½MÕßL]þ'Üôßty¹œ Ä‹·ŸR(ãŽR§ïš(=ù¶'õðl¿¯¶[W¸ õ³iáÆÀº‡Sæuî¯"L‡£ ¥’oCN©ÌÞðY{Ò„ÌUpQóõ³YönõØ ã=DûGoWTÔ€épT¡Th(‹ƒºòõ³©S±Éi|PçþÑ ©k0µnŠðwÍÓpT¡Th(‹ƒºòõS=Ô¹¿Þ¿?ý«?EÕä¨B©ÐPGëêÖLÇÊ]w.çEß#RÌl⺥lq3×]è{.½Õ[úß,Ÿ/þÜc™øè¦þ¹É¢ %A©è ˆb ®üFýTu^ oß¾µ£›=òâOLÞ†£ ¥BCYԕߨŸê¡Î‹Cw¡»ûhú>ºÉQ…R¡¡,êÊoÔOõPçÅ£!SëMC§¯7mç¨B©ÐPuå7ê§z¨óbÒésF×étV÷ GJ…†²8¨+¿Q?ÕC[|tÓ§Û qT¡4ô£P( …²co‰ä‚&€­Ð†þ¢~ª‡:G8ª��� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&JéåË—²³³C¡P(”;”'OžÈ»w;‚&J+‚iƒùéÓ§è»("­G”Öëh4¢xX´ýüî»ïlÑÿ¦ Å]Ñz£Ô>~ü(=²åÛ·o£ï¢hšåD½úOG5µ Õºúé§ŸlÖÁYŽJp£›ÏŸ?—ß~û-ú.Š‚@RNÔkqhÀÔ ©u¦Á“iu¬Š³•¡ åýû÷íèæû÷ï£ï¢$åD½N¡3­Žup–£Rt4Ómbt³8$åD½ÓêXg9*IG4µ7®#œ4Žþ#”õZnJ] ká‘ÄYŽÊÒÑLÕÔÆQG9Ýô¤œ¨×âÒöR§ÍÝr$¦Ð±g9*ÏnêîR‡$åD½¶‘l Â:8ËQyÚ3w §öÎé•û‡@RNÔkq°wÅYŽÊrS?n­&=sHʉzõ;̱ œå¨$]°o<YŸé7I9Q¯~ÒåDLcS8ËQ)Ú`Ư0‹@RNÔ«â3=Z˜"Ç·â,G%l-`^ä´×’š¹ îììJ«÷ZNû‡á×µ® .¿Ê88´܆ô†Ÿd<ü›t5ûøvð³Lì]ÊèôXZµð"¶4ºŒ.í¿†&æåÞH¯µ{ó˜¦t‚s¹rõ¥i¾_ký /:Íéãj­¿ÈÙøkô¨Õ¸ç²ÏQïÉðÚ|ór ÷[ŒÃ‡~3}¾ÜxVg29—~Ó<w­%½i¸Ç™¯ÏÆÑk­âWtö¢×¨K+ø%ü¶{~ûý龄ßϾ&ü¤SänTóÉ“'NÜg9Jm›#˜“ñ©t›méŽÂÐ0ËðDƒBÊÅ\/öûßKÿÕSi¶ŽåÔ„‘ÉE í] p_å"8’f'ÑU<V|–áñ\„Ñ>¾™d†•î4üLLìJ=zð[2èîK³¾FhQ&p ž™÷{"çî}]}~ë@ºƒ‹5Ÿk¹¼‰Ÿufh€¯› éÞWôÙ7š}­óAÛŽ@Êïru&½Æš?GßÈG¾A3ê5¸¿ù§ôÛá×µÎÀt ~‘ Uÿ];O_]ýëãOëÍÇŽŸÈõb¯uSÂßín’“;s`]M”Òö§È5áÍ\x¦&G/dGŒuø/fHk§&“ÁÁ„ƒîa sâÚüØQ42µèõ }îéè¢^ŒžÎëaOözCóŒëº”óþ¡4õ}_šÙ~¼æ(Ûjô"—=_ëLɉ&;×CéíE#É+ÓQÍ{‰N… ¿½‡Òê¸EÍI>õª\§è¦ƒ5ŸÉ‰†»”°®pÿûòª{ ­ÞÓYøb:eמ#¾vü´nLgá¦mÇ©õ'¬ZçiÀÔ ©u¦Á“MAXA¥ãþĤÍm5†z¡zÜtìÁq"D›ÔQ‡Å£a §@g¦±ÓÊ4´h¸ùA—ñKX<üÜ…•}Ù©µ¥~×q“åôwÈš¿u¦¯õƒt¿Ú¯¦at5áû®MÕŸci¶ÓBqöô÷ÌÅ¢àŸúêù K#šé#ó¾vüìûÓ鹽ɧSèN¬ƒ ‰RÚöˆæµ¹x?H‘ЩKsQŸ½°éŦµ è]™ך¥H³ò…IGÁ$GpV{E ڑt2˜2wò$ÞÖ™}¾£ÍBëïS; Ghuʼy”ˆrOÐÔº:J­ôÎ…Ž îK'ì­Mw"²èø™ÎÃù‰´šÏ62ã4pnwÖEAÐD©%g^4ì&G»®Î%è4¥žza;œ_7g¥x$¥N­¦Òž…[05¼ TÌ{?¿ gôß›¦ç¬y[gZ?m6F\™�û0¶y)yÔ뢠®ìrðÌüþ‰ÏPG›œ¾wüò ™qÛjcQMT‚6€Újƒ¨ cæbÌ6þ£@:]i4óá@/6»º›9ýr¯k½Û± 7–nFøQ:O£õ“Ÿ%84Ó™§¯ûFz^tÑ §MÃuf1:Âe7°D_¯jnã»ÈËpæ½~»\‰—uf¤Ö†ÅÙõx« Gåjæ÷jliÊÜÉ/h$F(]ý6ç?Cý¼÷m²ò¹ãmkÄBfêhüféH¦¶¯Z—Ú¾²;IMT†kó œîBÝ6Fw¸žþ û‡Ó žŽzÔõßæJmn#ÀtãBôïÎ y=Llº™îŽž§Ñ‘þëa´QE/^ÑnZS¦#tº^Ì=~Õõ~vÄÇÝg/ú}ܺ¶è¹ÜíŽ6DŸ3{¾ÕÙ¢Ï4^—Ñøšìï1³‹z;ôwÈž©W]‡:½;‚ üAWµ{Ò¸7?r™:²ãgÇ/úâ!3zþôuÄ›¡m¨¶§Zô`�iš¨œíõÀ5 ´n Á¼|IšÖ™† vc«SæN~õ1ÎõöAÇrzþïØæõlØ›/ó·ƒòªã§4œÆoµ4-ó MHN—³>Ë4QYùÞ8¼ÐmkwoÑi富u¦·æy,uO~§íÔkDCݺ÷!­8&î‚ ‰ÊÓ€éF�4xn†®¡s…EKS:'gÑhÖ•O )kE·4šþ^Qñ déûØ »ÉëÀ‹QÝ"Ð6Rÿæ¹Öë"h¢²Þ¿?½œþ¿~ ?m- S¹Õkrj¹Ñ‘“äT7æhÀäž™øV´Þ¨í‰ë¢u7ýCãºõ¾±2«Ÿìéëb–ïu¶ }oð›ÄYŽJpë15\jÈÔ°ÉôOqHʉzMsÛMáã¥qÇ[\-¦!SÛI}~fy° œå(5]¼îzæÏŸ?·(ŠGëåC½úI;æ®ÝÔ5™À·à,GéèH¥6Žnz\ÿö9S?ÅF )'êÕo:ó£u¤¡“6wÅYŽÒÑÆÑMý°C²$åD½úïãÇvǹ¶©Ü”wÁYŽRbÓO¹Hʉz-í´k}éè&w¬ƒ³¥§ Úu}¦k$Yà^<’r¢^‹EG7]çv«â,Ge舦®×ÔFRK¦Õ‹ƒ@RNÔkñh›©í¨ÖvàiCqÎrTŽ6ŒîO©ic©ÓêÚS‡¿$åD½—ÞÁÃnr7,ÃYŽJÓRƒ¦^ðtÁ»N­Sü*Z7 ÅÿÂè&Ò4C§ÕuóN§Sü+zCùP¯å ë5õ<eÝ&Òp–�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š(­ß~ûMž<y";;; …BY³hûùîÝ»¨E‰Ò{ûöí´ÑüôéSô]Ö!ÊGëu4Q<,/_¾”ï¾ûNîß¿/AØÎ;°.ZnTÂÇåÑ£G¶ÑÔà‰â!h–õê7 —:ª©aSëê§Ÿ~²í)°*ÎpTŠöʵ±|þü9½ó‚!”õZ:Ê©m§ÖÓêXg8*GKíëèæû÷ï£ïÂw’r¢^‹G— 1­ŽUq†£’´QÔ†R/r:D#é?I9Q¯ÅÅ´:VÁŽJÓM×+בNø‹@RNÔk9hÈÔºÔÂ:xÄq†£ò´WîÖéüD )'굸˜BÇ*8ÈöµÁÔÝéLÿø‡@RNÔkñ°)ëà "n­‘†MF6ýC )'êµX‰»â Gå%&S?~"”õê7¦Çñ­8ÃQY:ý£Óäz¡Ó†4ÆózØ“ºy½ZW—“è» ŒiécmÙ“Îà×èª)ÿ@r%Ã^þn­3Ëè»é®MuFuµbýÂÊ¿^± Ý(Éô863•£SNm@uú'÷?K©²Ù—ÑÊ9ä ZGŒ¯£¯«i;DäciöÏeåêÒúm2޾Är›¯W:ßJ;Ýîöo:ŠÉ9ð-š¨Œ­̈Žjîõ†æ·¢ë¡ôöz2¬vδõ–? --é ¯¢¯o·výV\6õJa´t·-Ò¶s[m&Š ‰ÒÓÆÑMéÿo·±ü"£þ¡tÿ‘Ñé±´jÑHJ£+Á(}ìe2êËþÜÈŒŽrÖÍÏÖn.¦“sé7káóÍŒ˜^ξÖ-¯·ˆ¾¦ûùz|/ÒqÏ›ñEZ_#wú™î?•ÁŹœšÀY³¿M@FWiÆÕob™ÃtÄôG_ì·n>ÏXšÿ½½‘^k7üLmiJ'87‘w ñzÙ9œŽ†ÏÔáZ£êÙɦ^é l’núñ¡“Žb"h¢´’½q?¦~•A§!FSZ½7QX‰ÂE»#ÁÅ×ðaS“žÊ~êÈŒ^L¡Fß•Ýéó«\GÒœ FŸexüCÊë-óUƃgÒlȹ{®«ÒoHwp‘òþ6+›@r lõ{¦¾ÚÒ;Ea/ îíÃ@.æ~i­ßÃi˜œ¡#ӻɩY}üÁ4M.i7“�s| ÿ*Ýàç5>ãð8¨Í…I}®cóûË05(ç/“z-jÁÒ÷r{ž›rûR€lÅg…Ø„U4QZn£ŽbzÓ ÚQÇ=iõ?$.@ žI;ø%úÚYpTö¹'Ön&o‚R75éÔâ‘´æ^ï6—rnž¿Ù=•ñ¥ ™íÇr|6Ž.¶ÙҺ̛ µ¶ôÏ“—w ˆ¦c\7ëNÊ:?û\ÉQߙǛçìš™þï2­kG5o’uu&½¦ Âs¿ÏödR¯…í ¨ÙçV“ñ©t[’ÁxŽav¸SÖAÐD©ÅD/þ,š†Ô)ËEÁoÉF ½˜î'ŸKߊ.˜‹GFÂR¿CÐTŸeØÛ—Ô�–}ÏùZ¶ÎoA½, „ F¦cÇÃÌ´vZY{i‚–{±÷¯õöÐtfÖ >ÙÒßmÓ ÝAH¼ßBfœ¶¯î¶GìJÇ"M”žö¶µ×íCƒ¸x˜^�SFT–lÒ àÜÚM Ÿ»îñë¯S[Exá;’NNSæNd¹%Ÿ_jÈ_V¿i#Ó³Ë6¿F0š>·A'œ2o¶ÓFó¶kóõZô‚cêìüļÎ3/C¦“l_õ¶H@A•áDmüuZ=ÿ5›ác}.LhøQZ½³¹õ\©£)VúÅt6|êë=MŸ¼«ØÔ« œ9NÃj½åJG–šÍ” ©#ƒGæûŸ£¯ý¼[ F‰ã#ÍÎløœŒNä05};…Ü•ÁÅ¿M½™€µÖšÜ|l¾^‹ÞAPÅ™q:c¤u©“Û!!Ž ‰ÊÙÞ&!µÜ—† gÓuc“± O:³l¦Œ¦Xz1}p3 ªÏóú…tõ™ð©kÇÛÉçÖµj?Jç驌çŸx±¹?îb˜Ïƒ܃¦†’FCšíc9ÖÞMÆgrÒ9HYc«ŒJ+»Îïñ4èMÆCyÝïH#¶ÉD&?Kpx”îæ3ÖM&Þ݇ Ë»vó™oSæÎÆëµð„pÓ]£ ™z,¶ï:2š-Ökâ6MT–μnÙ¡£î/žÿÛ„•¦}]»3õä,øô¦·-ŠM½MK|Meò¦·°1ÏÓÿ[´ëuvíeŽÜëéÎÛòz¸Æ{áŽn›4ý E:¢»Ñµ»ÝQ†ôuò¡!ÞÝðûŸr>ü› œÑïßèÈIü³Ó)T÷Ì•›Û i¸?ï·£ÝϦ˜çé¿êEõ{\ÔñhÄ÷z¸^‡`Fø»Ô<œ2wô÷ܨBwL'0èΆLó\:‚ZßòŽó$&VEÐDåÅoÙ¡“ÓO$`wC×o‚’6W¯%è hHžvã%~+¥í"`b]´Ü@ÄM§kª7(†_´n°ik7¼2w¨×bйL­/ýó”L¬Š3•¦¥.bw=tm@ù«~"¬B§÷ìguSü KC½ú-9ãCûˆuq†£’܆ —2u:ˆºß$åD½ú‰€‰Má G¥è=Þ\ã©1(¿ç~¹õÞ±2;¦íÐ÷RI3›±n)9lÊÚ4}ßð‹¶‹Ú ×º©j‰Íá GééH¥.Zgz¼Ø$åTÞzÕÛ -ûË\ñÒH¿ïçé:u½ß°¶™^üU5-7JKJ·Á‡éñâÓzDùP¯~säBg‚è ã.8ÃQZñÉŸE+>I9Q¯þ‹nÒ–b]œá(5íëT¹Ûô£S@Œj¤œ¨×bÐvSÛR­/]ßN;ŠUq†£´QŒßh˜]”ÅC )'êµXtskGÝÄ*8ÃQ9ÚPj\/pºîˆÆ²$åD½vÜ]ÊÍÛqÎpTÓêÅB )'굸´“îÚOnƒ„E8ÃQyñiu½èé('Å¿¢uC¡Pü.@G£½r½Å¿ÂE¬œ¨×rÐκž§Œl"‰3���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h¢ÔÞ¿/;;; …BÙRAµq Ô~ûí7yùò¥mìž?n¿FqqÑ*ê³ü¨cp F£‘Ü¿_¾ûî;;ʉbâ¢U.ÔgùQÇà@eèhæO?ýd>ådt³x¸h• õY~Ô18P9:¢©#›:ÂùñãÇè»(.ZåB}–u Ž�T’Žf>yòÄ6‚ADß…ï¸h• õY~Ô18Pioß¾µ£›=bt³�¸h• õY~Ô18PyŸ>}²AS§Oø‹‹V¹PŸåGƒ#�ˆèº6Š:¥®áþá¢U.ÔgùQÇà�btDSFÝdWº¸h• õY~Ô18�Cï³é6é-Ñô­r¡>Ë:G�*­ØóWtö¤ÖÈeô²+ôEër Úžt¿Fß�!¤ü¨cp ’4P꟤ÔFPƒ¦Îíú"£þy?5iöÏe}w©É¹ô›õ%×ç<,U°ñæ¢e?ûšy?Ò}‰¾¹ÜdÔ—æ²Çësî?•ÁåJµ_ Å!ÓèJ­Ö­T½­ƒ  Ž�TŠL÷×ü˜qzÑúAº †:âÙVðKôuñùuÑ2Ÿo÷‡Í ;ây(Áø:úFùùBÂÎÀŽì4û2Z©Z£âÂÇ—¯³·.‚&8P ~LçJ†½£•GÈneGÝnîù<àÕEëz(½«’ÛÙ³rÀ)/Cˆ üÝ£”¯³·.‚&8PjÛ˜¿HЪÛ×ßÙ™­ºö¤n¿ï¦ËÍcÛÏdpñ¿tšáÏ4ºŒf/y7?gJê”]¸v3|Íd‰¿‡‰\ÞH¯µû÷¦t‚sy×0FÖŸoHo¨?›¥ÓçËÔ8–û,ZŒ£o‡€FôûDÓßæ±íΩ\Œé4ô÷¯I£Èè*^ñŸÛI_OkG2£×L–™÷p)£ÓciÅ›r|,¯—úM�š©ÃÕ—|+}=ß\åÁªËWnSÂÎÞº|¬cä‹#�¥¿UÑVG05¼ÌG§ÊŸÊ¾»¨ià¨ß“ÆÃ§Qxø*ãÁ3i,åÒç]2¦#dûK6 M.LPj&ƒŠ ŸÃ¿J7øy­ íd|*Ýæ¡ôÏÝs]ÊyÿPšÝSoäŠÊþ¢um>Ö£#PÒÌïhCC¸6¯ÞhÊC.'2èî/X3«ÏûøÖÓ~• ó¾šsAö³ àâkôõ l°M “WgÒk<0…ÏÑ7²—OY§³§õÔ1õð]iØKé|éhv]ÿMKÚ¯œ;{–[ç­°lsà¾>ª#�¥¦7a× yÿþ}y÷î]ôݜѦ^Ì÷eh¯3ñàb.9:uÚx&ƒq,4èm¯=~–^$w^@!vŽyí® ™iea0^Æ\0ÏOLðÕ÷ÿ« ™GÒ>~·Ñ©²¿hѦ†îcÙï Íw hû.ØëEý¡4AZëdÏ=~†Žl, ’³ÇÂÎ= äbîó\ŒÑ׺—½&°öJ«ÿáçîr !«vöìgÓFãá4ìÙN”ù:½n4ĶÖ[ž½ð½D3 !ûÞ[šmSrFÐG�JOo¼¾ÕÀ9½ÈéÅ|ß4¼áˆ†^d§kÁ†…H :­%cùÙtÓâ²vÐTa0kììfXô½e+Vv„¯}:¢ØmÔÒ€q”X°$ôÙ)ÔÇ‹—è¿/Üq¾x¤*,±)ð•„£±µéhxXoÍvZÍ–¾ÿ\¬ØÙ ëißÔóE,äi'¡5঴#¸»hÇyνÄ1äCÈT¹Õ1¼Å€ÊÐÀùòåKÛðåº^Ó^4^ÉH/æ@N톟ω ˜~1[<B6?z1kùHËâçývêøP¾ï´6>eîdÑrañl}tÞü#Üðs‚©#ÍK‰Ž†î¦L[zŒ,\±äyïÊNŸGS¸¼š&4¯3ý¾!ùÍe=#5à¥u*B¶Ã¶0n£³§â³ Û ™JTG�*'÷ Bzñj<´¥?º2_v¤sú/é·”¡[o—:¢µäBµtÌX:Ò¢¹9\8Òr±©W82ÕÌþ¢¥Aó±4Z£µ±&d´ŸÉéY_Ú½³éï“:%º¤Nn›B]¾ Bƒ§ ; w£•}sll½µ×ž¦ÝŒÜBÈJ½°æ:` —¯„#û ;l[èìy2A¨¬øMÛõÿõëLèEμ†[¯»Z›Æì”ÚÌú?'1­—úøno‚ìÕH¯zÒr£j“Ÿ%84Ûéæe.Rº1¡Ó[ó"•²ñçêƒôMXÛôÆ’|‚æ¡y·Á#\[ÙhÄÂ)Ñ…urÛjn§AVëá_òª×š†;òÖ>‘ó™@º ýGé<½Ëèq8_3Çac SæN®Aó¶ÎÞ‚ŽÝâNÂòKPsíìE›ãë¼õ˜4õ{·‘ÑÍ h‚#�•§#š:²© b&†R/rµÇ7S“6xº]¿.ØDÓeõ(Fá4ü¾Þ2èóìã’enÚUÃ_[jîßk-é½ú§ ãr2–áI'ÚYkJ£#ý×Ã5BKVÜ{˜îl{ï›×ÔçÌVXµiøŠêgúùê(•ÛÁ¼#uÓêpöq³%å¯?Ù`~³ó¸ÖêÉ«D]LÆgrân{eo¥ôB^Çw*:¢V—[ ¿K.¢crig/µc·¬“°¤#¨ô5sììÙ]ò3› Ã×ú‘ò|äVÇðG�ÑÀ©†´aÔÀ ÿpÑÚ 9íÆÖ¦Ì\ƒæÂΞûÚu\ç(¥S1ó¸dIÞ2*Î^Ä®¹žc¦¬ñ'm3¢ïÕÆ€Ês»ÒuGºMýï̦ÑñM¸hm‚î ,õ-N™;ÔgùQÇà@e}üøqº)èÑ£GÛ»Ï&VÆEë®ÂiÔéèš+ wºçƒú,?ê¨ ”,µÔ ¹Õ¿„µpÑ*ê³ü¨cp t*ÜÝ´éñ%ì «Ýß¼¾¥¸K9Ò×Å[ïÅ+áÆ%¿èûB¹QÇà@©éh%ÓãåÁE«\¨ÏžwöÖ¥ïÕÆ€ÒÒPédý‹@(>.ZåB}–u Ž�”šNkÈtçüíÛ·v—9Љ‹V¹PŸåGƒ#�• áRG8Ý-Œ2¹1;2ÇE«\¨Ïò£ŽÁ€ÊÑu›îOOê_zÿþ}ô/ð­r¡>Ë:G�*+9­®;Ñ™V÷­r¡>Ë:G�*/>­®¢N«kè¤øW¸h• õY~Ô18€7­®S꿊^°(Jñ ª#����™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@&š���ÈA���™ h�� M���d‚  ��€L4�� ‚&���2AÐ��@Dþ?¥…äÜ¾Âæ����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9w_CFM.png����������������������������������������0000664�0000000�0000000�00000011643�15030617045�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��í���¶���mh³z���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��8IDATx^íݱkgÞpW÷?lq•ZwæšTªÔ¸¸4nRl!âpaÜ‚ ).¤X0>80,8/‚á8H ËÛÃÂÇ‹\rf›‚1\0F<ïüF³«ÙÝÑj$ËÒ³ÚÏ’]fžÝ™±¾óÌó<s+��YÚ� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ² í·n¹Ž�6ƒï�h+ËЮ(Š¢\} _ZÚ!C΃ÍÓ~vÌäMh‡ 96ƒÐ@[B;dÈy°„v�ÚÚ!CÎƒÍ ´ЖÐrl¡€¶„vÈó`3í�´%´C†œ›Ah -¡2ä<Ø B;�m í!çÁfÚhKh‡ 96ƒÐ@[B;dÈy°„v�ÚÚÏå]š ÷Ê:Η۩Ûÿ6¾9ª–+L†©»´\½l§þøMz7î§­ÆŸW¥;L“r… Ûîì§ÑëÚ6ëŽ&i<ì§ngºüNê=}ž†_vËížßÛ4S¿{»Zßñgþ¿Ñ—éN\Ô.ü†Ý­êçÍe«ÿôÃìsÜI½Ñåo;J¯Gû©SþìøûÙTñýpóå´Ÿs�yÚ/ ‚öIP GéÍøQÚé>Mõà^†Øi89YòØ›4î‡çùuÅòwOÂjÿYhŸª‚íΟÒðÉ'igpP¼³àèUíßKÝÁ¿Š-Mu<¦ÞöÎÂðÛôjØK»ý¯ÓèðuõÞt}"ˆ×¿‹¸¸xºÃª×'N>k,s?}´ýQÚÚ¦WÓpt;·Óöövãïo’ÍPq!ø×òŠÏ{\¶6jßç´Ÿ7ã˜X_Bû,‡öðK:ì¦Ýá÷µý!BûiÔû¨ ëïiggçR{uÑ¥i¼~o¯G©wwq;áøâö…B{±Ì“¿¤^'>ïÏåÏâót>Kƒ'÷…ö ŽÓíÎn\Ú‘ºv„v�ÚÚ/ 9´W¡s.d×CûIP¯;wh�ݹ—‡¿/"ÀïUÿ?Û¹·Ðíä}4óUæC{ów5]永й—:åF\ôÄÿ›N ý›äæ¨8Nwšïm¡€¶„ö 8-´?Hý;ý4žý Bx½÷Yý´Bû’ã�½5kE×ÓݹàsÖ:Îëô–óf±ü|ßûùî3¡¶ÎéEÈË¿U#oι½›)¾·|ÔŽã­âø~;Iã§½´¯;÷ÓðÕÛj¹×éðù£Ú8Š¢lï§á¬KUˆ°¾}òózYºk´BÙ•ªSl¿¸~RÕ%JñúÑËÉÂ…@tå¥Ao§ÚV'm÷þšÆ“i½¯OÔ'9Õ€eBûœ/´¯niŸwVàŽ–õ»ó­èK]W×±¢ËàµTùÓ\$´Ÿ,¿º¥=–ù¹ø^>.û·wÊÐvÞíÝL9žq'éîgOÒ71^¢xýKz5¼_Ý…‰qÒNo8? ;öï£/kÁ¾çÊí©Ûˆc«8§žgWx›&£ÏÓö\ø÷þ˜º½ÁÉxŒ¤]\tìÔÇS\“œösŽÇ�'„ö 85´/ug©‡ö6V‡ö²ûM„î¥2í.V]´¹pXŸ÷vë>òmB÷ü2ÇŸ«Su•ÚC~çAì—¸øÛIû£W -Ù…"@ïï5…àSögœ+çiYoptø4í-v¯Y¸p>zõ,í?zY…úº¦®eWï2öóh4JƒÁ zuqùs�Ô íÐÚ[—»ª\VhŸöù^ Ï‹]dŽ_ïô›‚ÊÅB{zó2õwŠÏ±ØZÚèü¡}žÐò;îòÌ›Qçæ²<#Ì©¾­Åqþeq±PŸ¹ ç¨×ÃS‚ùÍ íÏž=+×óûßÿ>ýôÓOÕ»çwuàÃÚ/`9p¼M“—N»»m§|<ÍŠÐ^öáý¨94E7Gi<Ýv9åã^ê æƒûÑ÷i¸ûñùC{Þ<->ߟÓËZ?à£É8 ‹‹€¹i…öK‘ÝyP÷O9–Ï{1aºûžû8¶ù`)tÏŸ›+οø<w¾_÷œKpYûù?ÿùOúôÓOÓo~ó›ôâÅ‹êÝóÚò&´ŸKÊ…þáeiùp¥Óú’Ç-ý­…eë­“‹?Ÿµ$.Ögï$ TývgôŠÒéöÓp¼8H¯­ÅÁ|EÙî¥Á³qšÌV!iñáJ‹ƒo#lÕ"žÔ9WýASËX7G|þ¬,¨[Õ¢Ýä2Z¹‹cm÷ó…нxÁÇc·a;¯ÓÁàAÚ››žõz\ö~þꫯÊu~ñÅé¿ÿýoõn;Ùs�ÌÚ!C¹qAµj\ÃÑ«aÚ[ºÓ³Éü)õ>¯]Ø.£•;."n/^ÇÅÀ½ÚEb5ÛR÷äÑñݡݴ³¿P§kò!öóááaúío[¶ºÿóŸÿ¬Þ=›{ò&´C†ò8ïŠÔK}ðó±£ÉËôtnZÅ'éYíÎÎé©ïœã¹ w—fw¯êwyjwœÊ ‡Ú4”1Eäl¶™ëuú¢•ýñãÇåú£õ½M«û‡ª �—Ch‡ 96ÇÞÏÑÒ-îÑòýÞWqÌäMh‡ 96ÃUìçhe™eb[Ãá°zw™c oBûF:m@mC9׃˜¸,ñÝsó]å~þî»ïÊV÷˜e¦©ÕÝ17¡2ä<Ø W½Ÿc÷éÔâës�yÚ!Cu”sÀwÊÏ|f¹aw~â3]‡è&ÛŽn3ÓAª×U�ÚÚ!C΃Ípû9ºÈÔ§†tÌäMh‡ 96ÃuïçheŸ>)J›©!¸B;dÈy°rÙÏÓ–öhy‡3¡2ä<Ø 9íç¨Ë_|Qþ7ZßÈ‹Ðrl†ÜB{xñâÅÊ©!¸Y%ƒø£¡(Š¢\O™Š©!§dZœ€ë¡92TPÜ\9í禺ԧ†Œ Àõ‘ �8Ut‘™>)ºÎ�p=„v�Î42«šàê í�´ÓANÈdjH€«%´ÐZ´²×§†Ôêp5„v�Î-ÈdjH€«#´p!õ©!c¦�>¡€÷s¹O[ÝM ðaí�¼·úÔÈpù„v�.ÍôL¦†¸\B;�—ª>5d Xàý í�\ºheüøqÙêÿÕêð~„v�>˜éÔÑòîL�'´ðAÕÈdjH€‹Ú¸õ©!= à|„v�®LÌãnjH€óÚ¸rÓ©!㉪Èp6¡€kQ “©!VÚ¸61Hõ«¯¾ò@&€3í�\»˜ÒÔ�§ÚÈB}jÈh}à„Ð@V^¼xajH€B;�Ù‰ebfd8&´­˜Ëý¼SCšÿ¸‰„v�²VŸ2ºÎ¬ƒX#äÌ Ü4B;�k¡ÍÔÓ–ùøÚÜ$B;�k#ZÐcZÈÓÈ4í%ZçÍûÜB;�k%‚øãÇË`­ïõ`> ìÓ­ò�7ÐÀZŠ–ö陯ãñ¬?ûb1û pí�¬­heÿÝï~—~ýë_§?üá¡=ÊYXr'´°ö¾þúëô«_ýª1°G¹sçŽ5kMh`mEK{ô[o ê‹%ºÑ˜ ¬+¡€µ}Ø£O{S@?­Äì2�ëHh`íLçl¿H‰™g�ÖÐÀZ‰öèýÔ›By›b`*°n„v�ÖVLû-ççí&ÅÀT`í�Üç ð±ÜO?ýTý6@Þ„v�nœ¶þÓO?5£ °„v�n´i€?­¼©À:ÚØ§øï¾û®Z OB;�)f©?˜)=@®„v�6Zôi�_oyWEY,×Mh€B”üäòoƒ¡�  ´M„v�ȈÐ4Ú #B;ÐDh€Œí@¡�2"´M„v�ȈÐ4Ú #B;ÐDh€ŒílŽÓ¨w'uz£ôºz‡Ó í�¡ýtG‡ƒ´S|?·véð¨zsÍÄg¸»¦!õÒë~t;[igpÖtw^)¡�2"´Ÿáõ(íï¯kËìQQýýÔéÓ¤zg}¬sÝo¡�2"´¯önü(}¼¶-³¿¤ÃÁ'kÚ²¼Îu¿„v�ÈÈF‡ö£Iû©Û¹U~·ní¤Þà/©·û´êó.M†½Ôý;÷Óöt™áAzS®`êmšŒÿž¾éwS§\¦“¶{Ãtø¦7'ÃÔ-v+mõÇéíäezÚÛ)_wv‡éÕlÑë +ë^µRWÛ›/[©;ü¡ZIáÍaz>ÛV”÷©{;Gµß?)Û©?ŽoµmÝcßìUïÇïþT|oM½íNñúvÚ~? ûïÆý´5]Gg?^ÏWxÚ ªÓý2=©Õ«Óýsz9y[-ŽŠ¯ëÛÔïÞ®ÖÕMýoÿž»Ç¯oZ_ùøL9Ú Ëæ+÷æ_EغŸúßüï, M^¤GE ; _1pq;mo2 êG“çi¿x=8ü¥\"”¡o»—£Ã*ÌG+qw>—âý½ôÙàiÚßÙMýçÅòGß§áîÇU`m¹®Vu/Dî»—BêL¹í{Ë!o^¦GûÏÂøÙuo¥XwúûÕ[Çßéý4œ¼«Þ)œU÷©r¹ÏÒà›‡i§û(=?|Ž^ Óîí~×VWŠ‹Æñ Ç [Õï¿õ*öïÖZú‹‹©Ñç³m„ÙÅÇyXEh€Œlfhÿ9ûаùsõz*ZoràâÝ´?z5kµ-Rgñ»Ý3‚êqÀí~¬^Oý†Ý­tkûó4škÁ]eq]-ë^Rïîi2‚êÓ^­EúDÔóÁ|ˆ¾PÝ—•%mBîʺהw:i{ÿyšœ±l´¸ßnl ïøáÜ…XˆåïôÇÅ7[ˆ± { wbû7´ß½Ð�ÙÈÐ~ž@¸ÈmtSyö¤ê–QuÁ(ËÞBè-Äv·–»gÌ´YWÛºVξR^,n§^êVÝÛŠÏø´—¶Ën8OÒp8LÃÙ]…+ë>SµŸ¹\h¸c1ócí¹ðÙâ"èAµ|ün\(-_¨E=?žû&Žƒí�PÈåóUškA]¡q¹wãÔ¿Su½(»‡Ü)Âç ¦Ý*Â)Áºle>­U¶åºÚÖý8t.´¼×Õ?G +ëþŽ»˜Ô»¡„3ê>³*ˆ/Š®N÷šïÄwññâþªßQ‰ÿ°Ô_Ô¾Ø=Ÿ§ÝVÛ_?B;�dDh¯‹A ÿ¨ú‰/vK9Vo.ÿi f¹‡éîRà<íýcm×Õ®î!‚潆.:•hiß›¸=Ë꺿¯øLóÝVΨûLñ½†0Ý`UùÉ0í.µÖ×ï¨4Õ'¥So{献RëKh€Œlbh/Cv¦á¬E;Ø( z÷R÷Ñ‹ªotS œ¯õ�Ž&ã4,gb¹Ó8WÑÖëjU÷¡3Z–§}ß_§ÃÑ×ÅïN޾M¯†½´;øWQ³šr6™ýôp©›½J|w1Øói:˜]XLgcù¤VÏpVÝ+ÑB~»e—S»×ëöâ…P,?ÌZÔsü(íÌê^Ô'fê|”¶?Z@{ƒí�‘ í³°XMÝWõ¯~6ž?)”ƒ§}»§SV1«÷cêÃwEx;ìžLOS�~}2 c¹LË­êç‹en@f‹u•ËQ÷™b¹ƒ§µ)!o§nÿ–‹Öùé4‰±LLù·4ž4m]÷6"øwS·»][OÔ}¡;PiuÝ£e~6…ã\éÔºÔD›é” ¥¬Ó>-Ô÷ÿ¬KPÔ«÷;1‹ÌÁ?ÚÍp³¦âsæ@h€B.˜aíD¸¿¡Ó=¡�2"´Ã¼9HÃÞ½¹‡8Ý4B;�dDh‡¢û¬»NQ¶{ééR—¤›Eh€Œí@¡�2"´s!g>œ©V¶ÚÏO>bßåÀ¿P�PÈå3¡�2"´M„v�ȈÐ4Ú #B;ÐDh€Œí@¡�2"´M„v�ȈÐ4Ú #B;ÐDh€LÄeEQ”ÓJ„v��8…Ð��´"´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��dNh�€Ì í��9¡��2'´�@æ„v��ÈœÐ��™Ú� sB;��d-¥ÿ �ˆ¥ñ÷–����IEND®B`‚���������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9x_AR.png�����������������������������������������0000664�0000000�0000000�00000007135�15030617045�0023156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��—���”���Æg���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx�� òIDATx^íÝ¿k[÷ÞÀñ,ý#ÔÕK‡l¡Ë]êIK†tÉÒAðð x<à · 0”t*ÒNÑ.ž´‚Ï`´•6h)á )!ˆÏÕW?œ#ùȶœcI>çõ‚/Å>²~XçToÏÜ ��(ˆ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0k‹Ë[·t,تÁû TÙZãÒ0 ÃØÌ�X—µÆ%Tí ¶é}¶Îë&.alÕ .*—°F¶ƒj—@•‰KX#ÛA5ˆK ÊÄ%¬‘í Ä%PeâÖÈvP â¨2q kd;¨q T™¸„5²Tƒ¸ªL\ÂÙªA\U&.alÕ .*—°F¶ƒj—@•‰Ë±÷1èìŸãü¸ÖÿFÿd8½ÝÈ 3·ËŽÝhõNFwÙ‹ÖNÞòÙØÎàý’û¼Íe‹†ƒèuZѨÍn[æ³Ñùgcò¸+Éyݵƒè¾É¼ÞdékIý2 7g¹ô{£ü¶é}¶Îë&.3Þ÷Zq§Õ%×Ì0Nz‡Qo<‹ãl`ÆïÑi<ü‡§N¢×šF^ ²;­èo2‰¸Óû^òóoºÑ¬Ýï;ßF½ÞŽþb´ _E÷à~4Úÿ?z¤™Ñsìw¢¹[¿B\Î G}µú·Ñùþ«¨·GßY”žóݹÇŽâ°qgÉíÉSúw1èý8Z'kã×;;Ñèü>]^~Ûô>Wc¶‰¸Ì8—É_ÑoïÅ^ç·L@]G\Îo•ï£]ÿ*Úý¿¦Ë’iè6»ñfúâüÝæßÆ‘ø¾ßÎÛœ¸KA|{ö:¹Hù?è'ëénm/ÚÇů©7…¸ªL\fäÇåèã2W£ƒé×óq˜ ʬ•ãòCà Ç¡ù8îÎͦǹ¿|wùǘΘNb6=ý…°Mòãrøª{wób”<åÿ Oëi½ò³Ùâ¨2q™±,.çC1I¡µ3~M“1=Îr©Å¸Ì‘o's¼cúz.Ú–Ì~´ÉŒéÎéŒh^Ø&‹Ÿv}v¢Õ¸ÝW•‰Ul×v=æ6­Ã¯3»³ogfëßDÿÅaæ8ßÑØ=ˆN?;3™¢r÷ÃòìÈ _&í)¸?ú¹t¼ó·™]룯ŽïM‡„t£Ý¬OoS‹ÝæÑ¼›.ßœô|¶Å6= ÄeÆjqyÁÌ國âr1ð’ÅÄŸˆÁtì\e÷tzœ»ó3¢gÂ6Y ê[QkÆ‹¹Àà"é÷¶u†ÇѾû÷hÿô8êÓ÷t<#=>Üá]¼ê<Œz³3b[ü;z‡ÿŒÎ«…KÛÊ휓ÂV’ÖÉúÜÉtÃÁ‹8ØÍ*2úã¦ûh4ÛÑ­ƒéd·gͨïuâÕÇ<|¶é}ÞÊu(5q™±4.ÓÙÜKw‹_Æq™>ÜëÙ“f£–Ù½x^Ä^&pówùŸyÜ4f»Égâöä8:Íû9³Iœ'ýn·ÎøjµØ=xqö½ý¡q°Ÿki~xö$t_+ÍTæHÛÃþ³…û˜_LJ¯~‰ƒÃ—£ï.ZvXÇzñ>w»Ýøúë¯ãèèhú«ÙÊu(5q™‘—“™›ùÝÄÅÆå8ðò.47ƒ8Ù]]oå} ^5.'» kgNÊÛ5¾8s:2ü-:{» ';qžíÛòfÍgf»¨óþøHãìàKÿ@[E ÚƒÅç“ÝæÒóz¼$ Ë—¯_¿Ž§OŸŽïëÞ½{Ñï÷§KVSÄsX…¸Ì8ûÁø./¿‹½½Ë^Šh™óârYà%éƒ2Eã¿'_Ž/E´ÍÎñ|`Ž#ïËÕãr<cú·ü“„RØÖ£wúºsâ29y­úèüÂg¯bû¶ƒ´þ5–\&hÕ?Zλ¯Ë{ß;Œ/ù;4åœío¼‹ÿñGî–ÿxE¾ÏÙÈ|ôèÑÊ‘).u—c9Ç/ŽÇ%/¢¾ôXÇôáœs’Ãé.öÅåË.¬ž™!šW¶{º,ûØŠNo°Úìaú°Î^ýô9-þ.FÏé÷ÿ›¿íÜëM3»ÿµŠ]ÇðªÒïo»œ7ÓwÞ až"f Óú×<ûÏÜ¡)).9ó&ŽÛc fÒ¯ã}¾jdnß:”¸„5Úºíà‚pÒ‰=ûgfîÓÙãßFóñÂ1š…̦@½¿0[:Ùuûtæº+¿ñ]¼œž>ô¢ÓÚ‹zÞq£pïóª‘éÿ½Àº‰KX£mÙÒ! ;£ç’žÏüÈžD61¼Œgs—ûù>~ÉÌ”/?)ìœÆ4ÏÜlýìò^Ù™ôììøÂå‘jh½èÏ.²Aé9]·ËFæ:ž @–¸„5²TÃ:ßç‹"Ó:¬›¸„5²TÃ&Þçe‘iÖM\–ʲ“rÆ•.¸ÎÇJ¿{Êo“ïsŠÌ'OžŒŸCŠLë°nâÖÈvP Ûð>§™ËY\¦ÿ¦èXq kT­í`r ×ôš/ýûü7KzMÛ"=—Yd¦Ýæ"¸nâÖÈvP Û—Iv&Sd×I\ÂÙªaãrFd×M\ÂÙªa›ãrFd×E\ÂÙªá&ÄåŒÈŠ&.alÕp“ârFdEYk\†aë«H‘ùàÁƒñωLà*L£�pÆÑÑQÜ»wo™?üðC¼}ûvºà|‥f‘ùùçŸG§Ó™À…Ä%�™Àe‰K�.Md—�¬LdˈK�®Ld‹Ä%�Md3â€ÂˆL@\P¨”),S`¦ñüùóé  Ä%�×"™i63Íjå'.¸V"ªE\°"ªA\°V"ÊM\°"ÊI\°Q"ÊE\°D&”ƒ¸`«¼~ý:ž>}·nÝG毿þ:]Ü‭”ÌGE¿ßŸ.¶™¸`«‰L¸YÄ%�7‚È„›A\p£ˆLØnâ€IdÂv—�Üh"¶‹¸ D&lq @©¤¨Lq9‹Ì?þøcºXq @)e#3Íh¦™ÍU¤‹·¯ú3€¸ ä®™³ŠÒÌ'¬F\P «FæìøM «—�TÊe#sv›4îܹ#0á’Ä%�•tQd¦ËY\ÎóèèhºXF\PiË"3–Ù!0á|â�Ff‘ùé§ŸF³ÙÌ ËÙ˜°œ¸€ŒŸþ9>ûì³øä“OrÃr6ÒÙäÀYâ�¦Þ¾}{z–øeFº-0O\ÀH ËäFäyC`Â<q @奰üâ‹/rãñ2C`Ââ€J»êŒåâH÷‘î ªN\PyéLñçÏŸÇ7ß|óQ¡)0A\@®Yp¦]Þ«§À¤êÄ%�\ÒeƒóÞ½{þ¹H*K\À¥Êœéš—Ož<Gå,0gÿ|$Tµ� 4 Î4Ã9 MÃØÄØq �×d“ðT›¸€—lЏ€—lЏ€—lЏ€—lЏ€—lЏ€—lЏ€—lЏ€—lЏ€—lЏ€—Eù3ºÍ;QkvãÍô;œO\@ ‰Ëóüýö~4»N¿>Çð8Úõ¨·c8ýç—�PBâò<i6r7ß§_S$q �%$.Ï1žü*Úý¿¦ß Hâ�J¨Tq9èDcôzÒkÚiõâÝàe<kÖÇ_×ö:ñêtõ»ôþ?µQß¾»ÍNôOf7˜?™~îìØÎàýôvï{­Ø™-«D÷MÞNñaœô»Ñž>—Éãý½Á»éòjJ¿‹M—�pM6ù=&ÇIþ½ý,ê{ÑzÑ“áoÑÙû2Z½“ñ-†ývÔw›Ñ¿“~¦qf÷wºÝÝËž “¶ގþ™¶…l÷Ñh¶£ÛŸÞÓp½gͨÏoõˆK�(¡òÅåïÑiìÄ­ÝÿŽî¥góNÜÆ›îã¸{ÉtÒ æíœ¾ú%_N#6+ÍŽîWz—»¸€*]\¾éFsgÙîé‘4køË÷ÑÜ­_û‡1¿»{¥3Å—Ì|N¾ÿxI@ŠKq �%T¶¸ïòntb0ýzÎx÷øØÍî¢NRÞ]Ü¥f@—Œ¿Š÷Ow»îãáB´N¥“…î>^Á . „Ê—çïÊCyæ8Ç%?ó¾­ÛçÌ€f- Åeú&ŽÛc¿óÛ¥v¹—•¸€*W\žD¯ué®ìÅt†ƒ^tÆgŒß9û3éÝÃèÍÎ ?éG÷§V4n·¢·8™;ó™¤p=ˆÆwñrzüçä1÷¢~ð"U.Ëq �%TЏL³Œ;Ùã'3cî î4c¸7½üÐhÔÑúŸQ0Ö&_§Ë}èÆœÛþô¯éåƒÞÚsÿÃc,Ž…Çì¿8<}Œñý¤3اK«,ý>6E\À5Ùä<Õ&. „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ä%›". „Ò¼aljlЏ�(q �@)ˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€ÂˆK�� #.�(Œ¸� 0â�€‚Dü@ˆÝÎÖPš����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9y_DRAW.png���������������������������������������0000664�0000000�0000000�00000013537�15030617045�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��à���¤���Öˆ›Z���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ôIDATx^íÝÏkÛX¿Çñþƒ×Ùff3+¯´É…vÓM^˜B]jÈ¢ÐÅSº0J( iáÂ…"¦py†6`žÍl†^.Á›ËÐo†¡„À”RÌ÷ê+K¶,ËN,Ë:çHïfò£Ží¯tôÑÑÑñ���P8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P"8���P¢Âø;dz���`™­pF£™i��û1lûA=ØTg¶9�pØöƒz €�ò €[À~Pp�@p` Øê��ȃ�lûA=À�yÀ-`?¨8� 8°ìõ@��äA�¶€ý à�€<àÀ°Ô�Øöƒz €�ò €[À~Pp�@5 àßeä†Ïq¾íJ«û^†×ãè÷#_Z ¿—lMé®åû +;™?ZË—Qø€»q,ý«ÄßLdàw¥Õˆß“Î陸ÏZáß]Ï'ñ[;ó;üûÁc %~´¥¯¥Ù‘ÓÁHæžéÂû³'þŸÑ#é߉ދôßÙé‚w§Zôu¡úlª3Û�¸£f|BàÞ\èËõàD¼Ö©\$Cx\Ä¥ãáµ º“ <ÿXúûû³€¬tÀcc¹êKÃ{.þ«ñzóÁV/¥|_Z½ß§á8|ŽC_:M/G�W³ç<ó%øÞÁüßÑç¼Ó•Áô%“Ñù?ƒûÒ~¾—pÕ—Nð³Wþsñ¼ž ç^Œžt<Ì~JÿínòoUG=ÂP°m ÞÛd#|½“¶#-ÿSôó곩ÎõØæ� àS_eØkKÛÿ#·Àÿ”~ç§0”~ö2Bkt2ÐéËUôbdðÀøBzûÁk¼ü6ùz!€«ÉIÃîÂ{ŸL¯á{ð8ÞÁBHŸ{°ޘò±¾þ…÷§ª†&Ûi³Ñ–ÞE±[ªKà�€<à ‹0À³ìÚ<1žU ㇩ЪçþâtŽ- àá‰Gk6j™À¿É¥$û #Ù³“‰qÆ/üNò=Õ÷*œz’ø:«UPý0¤Û“·üêFMÀ�yÀ“¾¤»— Ÿ¨“s§'ó¾—Kð“ãéèvVh½é1òZÀSïG:€Çsѽ'ÒE£ä1=™ØIÌcׯ÷S#úÓi&ôÄ{ùJžíê¿ùü©ÓSg×~ØŽµ¶ß‚šžv¤©_7ή~[åðì$qßAКÇâ“#ܺ5g?O¶…«9+蕯1¹áUô\´_Ÿœ§î7¾ºö¥×ñ¢¿Õfç ÒÛ£ú|laÓs�¬F�OÊ à«GÀçÝžuÄx~t{!´¦#ãæÍ…êÛX#€'ÿVÖ ª¡ôÉ„ÊÑ×÷T÷—ÿ¦¨|ŠÞƒÿ žÏ~eç ë{g½±ÿó+y«÷„5ý*—ÁIÐdjÑä*‡×ñSµþ"ƒ“g‰‰ëºì&âÛOà‚mrz#ppRÖ"͹ ¯ßû‡´:=éÇ'zRœ@xm_.7øóE(ªÎE<ŽÛ� [á=¶ ¥|aÊH2€ßÆê�NÇÞ}æ[òÇUAÿ6'Ë,û·ð–LA‰nüôÚ‹£’ñæÂk™ÍñžˆÞË÷ÑHx<êÿo9ëÜÏùZì§ï…]â9OŽû—óµTA>>Ì ´©í#¦ÛÉ:#ÞÆÃS9L_I/ßÉñÉyГ²¦o•¯¨:ñ8öms�€e ï±]8dð¬yÎEp‚q_ 7W¦§¡L¾öºY¡c |ü‡øíö,Ȥ§ Æ—¾´w’S‚ïéÉDÖ2Š #úúwäçN{:Zþ[ïH:ë¼·n±o?ȸú25Ù6õ9g·Å•M–žÄÞšnçÏ‚“Œ¥+§'Áú¼/ Ù𴢞 �`û ï±]8,†‡ÉR{íöm—!\fE�GŒÊ@Z½Ä;\†ðP:þÅ|Ãò½âøx$ç'¥½rB­Ì2]¦qÙÉ„Ò`¤çKôuîë„Oçÿn8…ÁbÖíá{œDenËëžØiM7îæ¢óh!@Ïï›+ö?}=ûo?p�@…÷Øv2æS‡í–ijlîµ^6ßIýnrÔ0ýóé_úùÎÂF4ÏuzsZЭ®øéĹ 2ëÏÜä„á7øþH«µ7{Œäsž{Ïâ׽ƹ°­!=xŒ §0ØLß«,\™HZ5Òœ¥ˆÑç`›l?IèôtÝn[çJ.zGr8·d¨EÕ¹ˆÇ±n›�,UxÍA�°o?Г«ÝÌ+:Íèpá ®Šò\:Ïd”üv£ÏzB°ð!Lì“÷D7ú¶þ)çÑŠ'ãÑ@ün[¼ãÔs2„��È£ð›ƒ�`Ë~ Ó<–,8wãïÄxt.§sKý½’w‰+.Ëo"NL/ºQêªÏôªRò*MâªJxX1uÕÆ4}NE(âqŠz.�€í+¼Çæ �°Ô�Gá=6€ý .à�€< ï±9”aÙͤmÙ£Ø*}ïQ}EÕ¹ˆÇa›�wÞcs�Øê‚��È£ð›ƒ�P³ý ^×=xÍ7¶Š]‘Ñ×T„"§¨ç�ؾÂ{l�ûA]À�yÞcs�Øê‚��È£ð›ƒ�À~Pp�@…÷Ø�öƒº €�ò(¼Çæ �°Ô�Gá=¶h4V~�¸ØÂP=Uç"‡m�ÜA �†ž ^èõÀ08�Ô ½>�F�€z¡×�Ãà�P/ôú�`�ê…^� #€@½Ðë€ap�¨z}�0Œ��õB¯�†À ^èõÀ08�Ô ½>�F�€z¡×�Ãà�P/ôú�`�ê…^� #€@½Ðë€ap�¨z}�0Œ��õB¯�†À ^èõÀ08�Ô ½>�F�€z¡×�Ãà�P/ôú�`�ê…^ØÀË—/åÑ£G4ÚF��õB¯äôâÅ‹08é}ß§Ñr78�Ô ½>ƒ†îüQ†Ãaô��€Û!€kŠÃ÷çÏŸ£ï���ܸ¥¿ÿþ;œ¯Kø��› €· áûÁƒ„o��°18pÂ7��(X!ßwïÞ%|�€BÀ%âð­Mÿ�� p Ã_ýEø��[A�Rtª‰Î÷&|�€m € „o��°mp Bø��e €£|ßþ/[¾õS. ß��`›਼?Ê;w–.#˜ ß���ÛF�G¥éh¶çya�ש%i¿ýöá��”Š�ŽJÓ©'¾ã¦Ë Æ4|ë÷ß�� LpT–†mÝNðx.8á��˜B�Gei¸N†omÈùåùá‡äõë×Ño��”‡�ŽJ‡ á;Ù~ýõ×è7��ÊE�G%=zô(3xÇíîÝ»á4��€²ÀQ9ñüîÛ4‚8��(•¢Ëj¨Î Û«šÎ ÿðáCô(���ÛC�G¥¤—¼mÓ2ùL��P8*C—Ì ×«š®”’\��`Û਌§OŸf†ì¬¦¿Kð��&ÀQ 7-;7]E��À8*áÁƒ™;nús‚7��°Î[µì Ë ��ÛÀá4]¹D—$x��WÀá´ô²ƒÆõ{,)��lE�‡³’Ëîíí¼�€àpŽn/;ÈZÞöŠk;Q»P÷hÍôšÍfìípŽvx4F£Ñh«šÞöáÃ+¯ŽÀáÝ©àje7êcêájf/ ݺƒ†p½?̶«ål9pž;¨•ݨ]¨‡{¨™t:J<mU?ïãÇÑOÌaËsèðÜA­ìF}ìB=ÜCÍÜ¢#à¯_¿GÄMOOaËsèðÜA­ìF}ìB=ÜCÍÜ”œž¢5Ôé)Ÿ?Ž~Z¶8‡ÏÔÊnÔÇ.ÔÃ=ÔÌ}éé)ÌËgËsèðÜA­ìF}ìB=ÜCÍܧa[§¢$oÖ$€èðÜA­ìF}ìB=ÜCÍÜ¥óÁ5l›šΖçÐṃZÙúØ…z¸‡š¹GW@Ñ©&Z;“+¢°åÀ9txî Vv£>v¡î¡fnÈšfbzMp¶8‡ÏÔÊnÔÇ.ÔÃ=ÔÌn¦§™¬Â–çíðÆÒÛ,ý«qô K\¥ïûò¶Û’N_®¢o›V¹ƒÓx$ƒÓŽ4ƒ×¥¯mÒÅ}~á6®dØ'þÛ®´vŽnKfêóU†½CéôÿŒ¾¶…Ö¥'fcR×FKNÎGRfu*·¿dú&£Á›Ùû¶iùŸ¢ŸßÆ8èòúÒëxѿߕÖÉo22°+Õ£fî±ešÉ*l9pŽÑïª/ƺk›ÆÁS:–F³#=ÿ_âwÖ<mWµN_dÐÝ—FëT.®séÃíÇ“NÏ—3ÿ™x-_FÑL0SŸ?¥ßiZµjø¾èI»ëË`ô-øZž/¯Ü“íꇹà}œH³Ñ–ÞEÞa‚à1.N¥ÝîŠ?ˆN®/Äï9©«~Íܤ£Ü¾ïOG¾uiAÛ°åÀ9&;¼ñ°'ž×“¡‘–›i°¹/ÝÁuôµy•:8}Hwç¾ô†_£olbrâ´ÛˆÉS9#õÑ«HÞAAïc1t¿Þ_¸rtœpµJÝŸªæô=õÄë]L‚sK®B~teÏÀþD�·[:ˆëšß¶`ËsŒtxáÈe|¹4ÕR£˜ãÑ@Þéô‚ø÷›ÇâS£=×C9 îð1v¥Õ}'g½ÃÉלÓ,œ£¯ßˆ‘/­ð½½#;ÁAùÛè\N£ËÕ¶/—á[¤£œï¥ÛÚÔ)lžtü‹ &$„Á;þy²56vLÃÐ×Q=AÜK½‡qK]UÒ©>ïþ3Q›Œºè”‘³“é~ÖhÈû³WÒ¿Þ+à½Õç{Xꉂ¾{|¿µ3yÿwº2ø–˜~Õx(þ¥^)PóuÛBŸ§Á»9ûy²2 ¡'´e“`Ÿ“¾Ø/ž ®õÒ))6q¶8Ç\‡w‹ÐŽîíK§×—a4M!5O„ôñèL޽¶tφ“@1W¼á誆NËFçÍœ&õú¹w:{¿Çˆß¾ŽjŽ/}i{é  —È_ʱÿÇÂ\GØv ›_¯á¦e|ØD}²G›“´nÒìô¤×&ܯ‚Їôñ¥ôï'®ï£ý,žW¼³ÙèêTðxýn°ÿž ýÛec˜ ëõó+y;}¿¿Ê¥ÿ0ºzó-øÿ#ñ:þ´¿›ø"ƒ“g‰Ñ“ÙÝâï{Ð>õqçMþ©a°±fX.ÄM®„–ç˜ëðòˆÍŽà1ŽƒÐ—>0…ìh£¹å¦.Á®böàà5ŸH?œ×›´¬=‘Y˜›ý=øöÂÂ]@ƒÈ^W†‹U~}rŽTÎ]ÝÑÇø‡.œ$iŽ ˜[~%Cÿ¹tFܷϾ0§ïéað¼<9î_.Öìª/LJñ¥¤%µ(|@¯b½“n÷]ê <öÕ ·ñùóçéMš¦–$dËsŒux7NñÐQ¸ÿNÜ™·ÙþÆïe…d}ì{'25lYvc›áƒ“NZ²ÊHxUb®F©¶À‹þ}Ã7`*}­åºù*R8…«—^i&Q“¥ûŠ>öÑf5äüù‰œæ¾Ap3å×ã&:è°¿¤^ú~ߟ¯Ñ\[\Ù¤ØA‚ ¿=ïI÷´Ü«iúZá.Š’ â|&°‚±oåè^Š}8Y¤M- ÍšœÈ½¬Ñ? ‹íMY¾Ñùm3ypZr×é)17_5­üú¬žzN W‰™MáZx¿ôêÁ½¬ýP÷Nþ]ÿ.§Ýžœ/\-)uanåv¿îIi‘ƒWrqz"ÏK^&2‹u5C.ÄãéÑ›6ËÀ–ç˜êðVÎGǧ4h°ÞŸ……ÌÇ—Ðò›sÇ»ðïÛu¦2wpZrÇÃS9\'�§ê¸™›GËRz}VÎÖ÷¥-í…©%©“ËÌÇÐi#ÇÒÔ›×Þ‰ÌOcˆYæVn÷Z¯Çkœô4H ýe÷ùâ톘ªYx/‘®¥ž9Ån…ðþ ½J»dZÑRz_ÄiÞiHóøÌÈšëÛbjÉBËövàff:¼Éàf÷<ÝÖƒö¿Ã¾ oFJ`½±ÒŸ¬„ÒHîësézÁA(¼Ä­áK§¹+Íæ†ë"[x¦2(ttîþò«7c¥Ö"Öz¼—n§»p@›ŸÇ¿);nÀT¥×G·Óæ‰ â « ¥+íjpNŸ˜è”.²ÊÜÊ@ºû´â$£ØF°ý´ö´žìùÞ¦¦ÙÀW:ôŠÅa;½.¾®Šò\:S!mãA‚%'J+Gé·ÏÜñHçægOõYI÷Áðßm­m<º§&ü·6}F~¦× ·konÁØAêúwé%–¬k´ºòöÝ :ȇ‹ÓÄR\º´`o¶ŒÚtd.ݳOÛëžý òŒˆêH`æòxë~ªÜöèó)ÕÒ÷$hé”ô§Zêô¡i=•Â%s\×^*rÅ2l‚^Lÿ~¹ôoÚÑò›AÓíÿí¿¢¿ dìcÿ5]®³9›î…îÉïé¾ö^.¯Ö>IZu/À܉sIôïš·b[ÍX©iœXâS—ælv^É»ørôçKßã5—Š ƒvòÓ3-ïÒ­пo#à›Ñ¤×à­ÍÔ‡ôذ·k1Õám=#¢E«^­ª¥:õ™\¡*l•CØ_ÜCÍÜ¢a;9׻̛.ÓØràœjux“¹«ÞôÃaª…ƒ“ݪQŸèª’—q†cØ_ÜCÍÜ`SðޱåÀ9nwxz#RòÓ�=霞Wꆖ$Nvs³>zƒíñlK8íáÍl‹ÃØ_ÜCÍìfcðޱåÀ9txî Vv£>v¡î¡fvŠ—Ôúؼcl9pN%;¼U7¥[®¥ÖÌÐç[E«nÞK·–—Ü2}~Õ±â¦Ù…–¸¡Ó"úÜj£"}ž>?ØGC·ÖæÁƒF?n~¶8‡ÏÔÊnÔÇ.ÔÃ=ÔÌ^úqóÀM®t² [œC‡çje7êcêájf¿×¯_‡uzúô)sÀMÐṃZÙúØ…z¸‡š¹!ùQó?~Œ¾k[œC‡çje7êcêájæý~ñâEX3ý¯éÑp¶8‡ÏÔÊnÔÇ.ÔÃ=ÔÌ=:®#á:"®#㦰åÀ9txî Vv£>v¡î¡fnÒÑo®õÓ9â&FÃÙrà:<wP+»Q»P÷P3·éê(:®«¥èª)ebËS´³£Ñh4F+ºéúáe!€ØíÐ��°Î/sN8GG��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� Dp��� 4"ÿÆ S¿z»ÖW����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/devspec/graphics/DS_FIG-9z_XYP.png����������������������������������������0000664�0000000�0000000�00000007305�15030617045�0023335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR�����œ���=²���sRGB�®Îé���gAMA��± üa��� pHYs��t��tÞfx��ZIDATx^íÝ¿k#W¿`wüªÝnÒl¥JÍ’@Ül¡Â\l±ˆˆ‹@Š^ˆ`á’^6ouÁ-ß,¸ \ ‚)Œ»5KÆeYĹ:’ÆF^Û«ùaÍóÀa-ɲf$Íê£ï™sÎN��€‚ ��Nè� pB'��…:�(œÐ �@á„N�� 't�P8¡�€Â ��Nè� pB'��…:�(œÐ �@á„N�� 't�P8¡�€Â ��®’й³³£iš¦UÐ�ªRYè„&s 4G^kï; JB'TÀ1ÐB'ÀœÐ p 4‡Ð 0'tBÍ!tÌ PÇ@s�sB'TÀ1ÐB'ÀœÐ p 4‡Ð 0'tBÍ!tÌ PÇ@s�sB'TÀ1ÐB'ÀœÐ p 4‡Ð 0'tBÍ!tÌ +~Ãîîl—Z«ú/NÃÅâ·Öþ^ªíöGáÍô£~;÷öyÛ Ýáïkÿf«wη.{Æ£aèw,~·Ú½‡ÿ~>˜=î-¼…þîâ1wûa´¸ó›Q?ì.¶cu_Ú¡?Jžôv„á8þuû=ßÎÑøõü® Ÿ š¡N¯µ÷P%¡3W LÓyª¢¿¦×=ÝÁ¯©àù&Œ‡OS¡ñJ lóð—ù[ãaè^»u÷ŽzCç‡ÿ ?t‡Áé«Åõ‰ià<ú&tºÏÃÉÅdqÝÔÅIö:‹€xKÇ¡ßþdº-®ˆâ>ÚýãÔ>¿gÃ^8þR<¿÷¿Ã(½=SWÏCbºíÇÿ Ýγ•ßm’Æ|øOÆaô¼ÚÓýû<oÉ“f¨Ókݘ÷PKBg®¼Ð959 ƒGOÃð,©Ò:ÏB¯µ7 ›…ÓÁãМ¬¼Î×áè|³¡mr6 û»OûÃå“°»? gÙ‡™ü†û¯jörÊjèŒâs²zG/—›§þñKË£ÐÊ~9j¡`Nè̵&t†WÓØM…Äåи>`Ý&tN¦™ó0´:ƒp?§c�}´øy!>΃µÝîïb.FÏB»ÝGǃÐí|ŽÖtƒÏê¬ZùjNŸ†ÎR5ôJþs+¹„Îm7;m#~yÊVê›Eè˜:s­ ÙCãÁl’öÖ®í¥Ð™'ÈâåƒÔ÷ü1ïÔ…~#çád°Z;r+—Wb%t6¿øâÚ®òÕЩ{=ªÝ1ß—©÷ðëñqxÞëÌ.·.«ÝÓ/%§ÿIG['ô†'Ë_8Òç/µÖjÕþ“ÓAèLï×êþ#ü°Ø–ØZ݆ãì—¡‹Óp4Huã·{áùh|ãÇ*RÜžº¨Ó¶�Í#tæºMè|[¥3ãm¡3V6wS]ç±òùuxtùa:SaÞÒƒ|niÖUþ0´ÛÌù«yâ�¢öµËøœ$ƒ‘æíAèöÿN8£z±’¾<‡ýùÀ¹Ùû!žë{±¨n†áiºÆ«ãÿ ‡Ùs|§âkÿnùyÕ·û,¼HsrŽ-…×ÉøE8ì†ÁQ2Ð/²ûwèuÒ§ÂT§N¯u=ßw@S¹Ö…Îlwxöò \:ã‡þÞìùYiIwûÔuáöFÁw­Xå<Ãa|þkt÷ÂáÑÙJ˜¸Cg¬ˆ®¦ï¶=Û+¾¦õ³˜… wZÅËiØ›μßÓÝa/.ÎÅcãÉ­*›«âñðõJ÷üÒ{*†âÃåTͳ_Öª³‰×zoo/|ûí·á—_~Y\s7õ|ßM!tæZ:gUŸýLW÷Cg¨Ôy˜S9Ìt±Çjèšî黇¼ä|Ϋ¿»<°(ÐyWµ<VªìW’®î¸Ý¹m%t®ï-¸¹tÿ‘Ùžåcnrú<äËí üñGøñÇÇ~8kñç?ÿüsqëÍmb[�îJèÌ•ó9‡ãgOÂþ §LZëšÐ9û`oå}èÏ?@¯ëÄ)“þ+t{ÃL7õ|Äùƒ;„¼ü€¹D— wUÇc`öþ[ s·~g_ ¦ï§w™)žúÉò ºåcóºão~ª@«múµþùçŸgUÏøw?ÿüóÙå¿ÿþ{qëõ„N JBçŠEãt—Ú&‡_.eüÐ^>·1¶«ù —o¿fÂøËP°8o­Ýºº-nãpÆ·-í, ü¸Ú‡åmJÍ­˜;P$½ÍQ ÙÉ᳿Ó\ñù¨—ë+ƒë+Škä̺pkÓ/hû+ç„Æãáé⽸® úeéäyØ?È™î«E½Ö±Ò9ÃÇ<«~~ÿý÷³Šèuê÷¾šDè„ Ôïˆ_®™;5žZrð4 N2ƒˆâhö^åÐX5}´AD+Uûf¤z f§tóãÅHõ8ý°ít_e+㵎çzÆÐ+†ÐŸ~ú)·úéÿ^ JB'T 6ÇÀÚé¦-5xm&»ºP»ÿ›®¬_3.÷´‘u–«û—35ÄSS’¿wYñ_ßËiœê7;BÜ®²Ä gìv›|Tæ¶�d PÇ@sTõZÇ®öXýŒ]ï±ú»â½ï€* PÇ@sTýZÇêglôå—_ζ%þ/”MèÜVé®ÈkÛ;L$ÏÅçžf¨Ók·%N·t›ÁG�›"tBÍQ·Ð™ˆçz¦§^Z7ø`S„N¨@ÓŽ·N.ŸjKK¼n¸Ou‘·-qê¥8cõ3Þ«Ÿ§§§‹[6Gè„ 8š£î¡3-†Íìࣻ¬|Gè„ 8šã>…ÎD2ø(=õ’ÁGÀ»:¡Žæ¸¡3mSë¾PÇ@sÜ÷Й«w]÷@è„ 8šc›Bg"oÝwƒ€·)ýÃøŸž¦išVMÛ´dðQüÛ1„šz XG¹€wƒæuë¾�lTvÝwƒ€Hè 0q°‘ußHè p±ÒiÝwh6¡€RY÷šIè Éà£XýŒ4V? >‚í%tP9ë¾Ãö:¨XýŒƒ¬ûÛGè –’ÁG±ú[üÙà#¸¿„N�j/V;­û÷›Ð À½aÝw¸¿„N�uß >‚ú:¸×ò™z êGè`kX÷êKè`+ÅêgvÝwƒ :B'�[-oð‘©— |B'�aÝw¨ŽÐ @ãÄ iÝw(—Ð @£eY÷Š!tÀTvê¥dð°B'�dÄJ§ußa³„N�¸Fvð‘©—àn„N�¸ôÔKÉà#ë¾ÃÍ �pKÖ}‡Û:àŽ²ƒ¬ûë �°q Qvð‘ê'\:`ÃbõÓºï°L耂¤Åê§ußi2¡�JÏõÌ>Rý¤I„N�(Q šÖ}§‰„N�¨È¦×}£çußSWB'�T,™z);øè¶’ûßå¾P4¡�j$V:ÓS/ÝfðQ:“n{çŒR'B'�ÔÔm×}O‡Îä>ºÛ© ¡�j.V?³ƒòÖ}Ï†ÎØ>øàÝíÔ‚Ð �÷HvÝ÷ôࣼЙ4ÝíTMè€{(|”¬ûþé§Ÿ†Ï>ûl%l¦›îvª$tÀ=7Âwß}Þ{ï½ðþûïçΤén§*B'�Üs±ê™T<oÚt·S6¡�î±»Τén§LB'�Üc_}õUn ¼iÓÝNY„N�¸§’Qì›hºÛ)šÐ �÷Pœ&)N§Iúè£rƒäm›îvŠ$tÀ‰ÕÊ8—gl±Û<Îã[¬dÆ€[\^3/tÆo‹Ñæ �Ð`I@- ¨±åRm;ZU„N�`E•á¤,MØÇ,¡�¨¡s; �@­ÛIè�jEèÜNB'�P+Bçv:€Z:·“Ð �Ԋй„N� V„Îí$t�µ"tn'¡�¨¡s; �@­ÛIè�jEèÜNB'�P+Bç&LÂùÑahM'>ÖNwƳë_…ÓÁÞüºVè N¦¿Y¡�¨•2ÂÉät:I Ûí‡Ñ›é•çG¡×ʆ´b”À^†£ÞÜ`ùWõ? íþq¸X\S¡�¨•rÂÉë0>ú&tºÏÃÉÅ"’]üݽpxtVxõ¯œ}\T;;ƒpz¹C“p1z¶¼ß%:€Z)/œœ‡“ÁAè¾ãóiàÜžKén.mgÕÛ½08}5¿|qú§axöz~¹DB'�P+冓ØÕü(ì´öÃàä|q]ñÊÛÇØÅÞÝáïÓŸã¾>ûÃßJ ÖYB'�P+e†“ÉøE8ì> ½’ºÕåí㼋}·÷"œÅnõýa8«"qN �@­”Nf]ͳ ç,|.~.C©Á:šj= ív5Ýê ¡�¨•RÂÉÊ ¡I¸8yºgaTÂ�›RØ›Qèï>¨¬[=!t�µRh8™œ„A§5{ŒBïèåôÊ7a<<X\—šB©@å°×álø$ìVØ­ž(oŸW �ÀŠ*ÃIYÊÚÇÉÙ0ìï>©´[=!t�µ"t¾£ô$÷—-5mREª|]…N�`E•á¤,MØÇ,¡�¨¡s; �@­ÛIè�jEèÜNB'�P+Bçv:€Z:·“Ð �Ԋй„N� V„Îí$t�µ"tn'¡�¨¡s; �@­ÛIè�j#m{[U„N�� 't�P8¡�€Â ��Nè� pB'��…:�(œÐ �@á„N�� 't�P8¡�€Â ��Nè� pB'��…:�(œÐ �@á„N�� 't�P8¡�€Â ��Nè� pB'�� áÿ W‹¾iÏ‹����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/rm-template.dox�����������������������������������������������������������0000664�0000000�0000000�00000006757�15030617045�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** \page RMT Reference Manual (RM) Page Template We treat documentation like code and use <a href="https://www.doxygen.nl/index.html">Doxygen</a> to <a href="https://github.com/HDFGroup/hdf4/blob/develop/xxx.h">markup comments in the code</a> or create <a href="https://github.com/HDFGroup/hdf4/blob/develop/doxygen/dox/Overview.dox">stand-alone pages</a>. Every RM entry consists of a subset of the elements listed below. Not every RM entry warrants the full set. More is better, and we can, perhaps, distinguish minimal, typical, and great RM entries. A minimal RM entry must include elements 1-3, 8, 11, and 7 if applicable. A \Emph{typical} RM entry is a minimal RM entry that in addition has elements 9, 10, and 12. A \Bold{great} RM entry is a typical RM entry plus everything else. The current RM is a mixed bag. Take what's there with a pinch of salt and apply the <a href="https://www.oreilly.com/library/view/97-things-every/9780596809515/ch08.html">Scout Rule</a>! \par RM entry elements 1. Module indication - Indicate the HDF4 module in which the function will appear. \verbatim * \ingroup H4XYZ \endverbatim 2. Synopsis - A phrase or sentence that summarizes the function's purpose \verbatim * \brief Simplifies your life \endverbatim 3. Prototype (parameters and return value) - A description of the function parameters and return value \verbatim * \param[in] name1 Description of IN parameter \p name1 * \param[out] name2 Description of OUT parameter \p name2 * \param[in,out] name3 Description of INOUT parameter \p name3 * \return Returns what you always wanted \endverbatim - Clearly indicate the parameter direction as \c in, \c out, or \Code{in,out} - Make reference to other parameters using \Code{\\p} 4. Preconditions - A set of preconditions that must be met. \verbatim * \pre The argument supplied in parameter \p name2 must be even. \endverbatim 5. Invariants - A set of invariants. \verbatim * \invariant The mouse pointer will always be visible. \endverbatim 6. Postconditions - What will be true when the function returns. \verbatim * \post On error, the output parameters will be unmodified. \endverbatim 7. Deprecation note - If a function was deprecated, list the version in which the function was deprecated (below), why it was deprecated, and which function(s) succeed it. \verbatim * \deprecated Deprecated in favor of another great function. \endverbatim 8. Details - A detailed description of the function's behavior \verbatim * \details This is the heart of the matter. Try to be helpful! \endverbatim 9. Example - The function in context and action, usually a (Doxygen) snippet. \verbatim * \par Example * \snippet H4F_examples.c minimal \endverbatim 10. Instruction (attention, note, warning) - Behaviors, features, side-effects, etc. the user should be aware of \verbatim * \note Dear reader, ... * * \attention Colorless green ideas sleep furiously. * * \warning Don't do this at home! \endverbatim 11. Since - The HDF4 library version in which the function was introduced \verbatim * \since 4.MAJOR.MINOR \endverbatim 12. Version - Use this element to record a deprecation version, a change in parameter types, changes in behavior, etc. \verbatim * \version 1.MAJOR.MINOR Function was deprecated in this release \endverbatim */ �����������������hdf4-hdf4.3.1/doxygen/dox/userguide/����������������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0017272�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/appendix.dox����������������������������������������������������0000664�0000000�0000000�00000001547�15030617045�0021625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page APPEND_UG Appendices Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_appenda Reserved HDF Tags \subsection subsec_appenda_overview Overview \subsection subsec_appenda_type Tag Types and Descriptions \section sec_appendb HDF Installation Overview \subsection subsec_appendb_install General HDF Installation Overview \subsubsection subsubsec_appendb_install_source Acquiring the HDF Library Source \subsubsection subsubsec_appendb_install_build Building the HDF Library Source \section sec_appendc Attributes in HDF \subsection subsec_appendc_attr Attribute Overview \subsection subsec_appendc_store Underlying storage issues \subsubsection subsubsec_appendc_store_attr Predefined Attributes in DFSD API \subsubsection subsubsec_appendc_store_vg Vgroup Attribute Without Vsetattr <hr> Navigate back: \ref index "Contents" / \ref UG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap1.dox�������������������������������������������������������0000664�0000000�0000000�00000032334�15030617045�0021007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH1_UG Introduction to HDF Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_intro Introduction to HDF \subsection subsec_intro_overview Chapter Overview This chapter provides a general description of HDF including its native object structures, application programming interface, and accompanying command-line utilities. It also provides a short discussion of HDF’s original purpose and philosophy, and concludes with a list of the platforms that HDF has been ported to. \subsection subsec_intro_what What is HDF? The <b><em>Hierarchical Data Format</em></b>, or \b HDF, is a multi-object file format for sharing scientific data in a distributed environment. HDF was created at the National Center for Supercomputing Applications, and is now developed and maintained by The HDF Group, to serve the needs of diverse groups of scientists working on projects in various fields. HDF was designed to address many requirements for storing scientific data, including: \li Support for the types of data and metadata commonly used by scientists. \li Efficient storage of and access to large data sets. \li Platform independence. \li Extensibility for future enhancements and compatibility with other standard formats. In this document, the term <b>HDF <em>data structures</em></b> will be used to describe the primary constructs HDF provides to store data. These constructs include raster image, palette, scientific data set, annotation, vdata, and vgroup. They are illustrated in Figure 1a on page 2. Note that the construct vgroup is designed for the purpose of grouping HDF data structures. HDF files are <b><em>self-describing</em></b>. The term “self-description†means that, for each HDF data structure in a file, there is comprehensive information about the data and its location in the file. This information is often referred to as <b><em>metadata</em></b>. Also, many types of data can be included within an HDF file. For example, it is possible to store symbolic, numerical and graphical data within an HDF file by using appropriate HDF data structures. <table> <tr> <td> \image html .gif "HDF Data Structures" </td> </tr> </table> HDF can be viewed as several interactive levels. At its lowest level, HDF is a physical file format for storing scientific data. At its highest level, HDF is a collection of utilities and applications for manipulating, viewing, and analyzing data stored in HDF files. Between these levels, HDF is a software library that provides high-level and low-level programming interfaces. It also includes supporting software that make it easy to store, retrieve, visualize, analyze, and manage data in HDF files. See Figure 1b on page 3 for an illustration of the interface levels. The basic interface layer, or the <b><em>low-level API</em></b>, is reserved for software developers. It was designed for direct file I/O of data streams, error handling, memory management, and physical storage. It is a software toolkit for experienced HDF programmers who wish to make HDF do something more than what is currently available through the higher-level interfaces. Low-level routines are available only in C. The HDF <b><em>application programming interfaces</em></b>, or <b>APIs</b>, include several independent sets of routines, with each set specifically designed to simplify the process of storing and accessing one type of data. These interfaces are represented in Figure 1b as the second layer from the top. Although each interface requires programming, all the low-level details can be ignored. In most cases, all one must do is make the correct function call at the correct time, and the interface will take care of the rest. Most HDF interface routines are available in both FORTRAN-77 and C. A complete list of the high-level interfaces is provided in \ref subsec_intro_apis. <table> <tr> <td> \image html .gif "Three Levels of Interaction with the HDF File" </td> </tr> </table> On the highest level, general applications, HDF includes various command-line utilities for managing and viewing HDF files, several research applications that support data visualization and analysis, and a variety of third-party applications. The HDF utilities are included in the HDF distribution. Source code and documentation for the HDF libraries, as well as binaries for supported platforms, is freely available but subject to the restrictions listed with the copyright notice at the beginning of this guide. This material and information regarding a variety of HDF applications is available from The HDF Group at <a href="http://www.hdfgroup.org/products/hdf4">HDF documentation</a>. \subsection subsec_intro_why Why Was HDF Created? Scientists commonly generate and process data files on several different machines, use various software packages to process files and share data files with others who use different machines and software. Also, they may include different kinds of information within one particular file, or within a group of files, and the mixture of these different kinds of information may vary from one file to another. Files may be conceptually related but physically separated. For example, some data may be dispersed among different files and some in program code. It is also possible that data may be related only in the scientist’s conception of the data; no physical relationship may exist. HDF addresses these problems by providing a general-purpose file structure that: \li Provides the mechanism for programs to obtain information about the data in a file from within the file, rather than from another source. \li Lets the user store mixtures of data from different sources into a single file as well as store the data and its related information in separate files, even when the files are processed by the same application program. \li Standardizes the formats and descriptions of many types of commonly-used data sets, such as raster images and multidimensional arrays. \li Encourages the use of a common data format by all machines and programs that produce files containing specific data. \li Can be adapted to accommodate virtually any kind of data. \subsection subsec_intro_apis High-Level HDF APIs HDF APIs are divided into two categories: multifile interfaces (new) and single-file interfaces (old). The multifile interfaces are those that provide simultaneous access to several HDF files from within an application, which is an important feature that the single-file interfaces do not support. It is recommended that the user explore the new interfaces and their features since they are an improvement over the old interfaces. The old interfaces remain simply because of the need for backward compatibility. The HDF I/O library consists of C and FORTRAN-77 routines for accessing objects and associated information. Although there is some overlap among object types, in most cases an API operates on data of only one type. Therefore, you need only familiarize yourself with the APIs specific to your needs to access data in an HDF file. The following lists include all of the currently available HDF interfaces and the data that each interface supports. The new multi-file interfaces are: <table> <tr> <th><strong>SD API</strong></th> <td>Stores, manages and retrieves multidimensional arrays of character or numeric data, along with their dimensions and attributes, in more than one file. It is described in \ref sec_sdapi. </td> </tr> <tr> <th><strong>VS API</strong></th> <td>Stores, manages and retrieves multivariate data stored as records in a table. It is described in \ref sec_vsapi. </td> </tr> <tr> <th><strong>V API</strong></th> <td>Creates groups of any primary HDF data structures. It is described in \ref sec_vapi. </td> </tr> <tr> <th><strong>GR API</strong></th> <td>Stores, manages and retrieves raster images, their dimensions and palettes in more than one file. It can also manipulate unattached palettes in more than one file. It is described in \ref sec_grapi. </td> </tr> <tr> <th><strong>AN API</strong></th> <td>Stores, manages and retrieves text used to describe a file or any of the data structures contained in the file. This interface can operate on several files at once. It is described in \ref sec_anapi. </td> </tr> </table> The old single-file interfaces are: <table> <tr> <th><strong>DFR8 API</strong></th> <td>Stores, manages and retrieves 8-bit raster images, with their dimensions and palettes in one file. It is described in \ref sec_dfr8api. </td> </tr> <tr> <th><strong>DF24 API</strong></th> <td>Stores, manages and retrieves 24-bit images and their dimensions in one file. It is described in \ref sec_df24api. </td> </tr> <tr> <th><strong>DFP API</strong></th> <td>Stores and retrieves 8-bit palettes in one file. It is described in \ref sec_dfpapi. </td> </tr> <tr> <th><strong>DFAN API</strong></th> <td>Stores, manages and retrieves text strings used to describe a file or any of the data structures contained in the file. This interface only operates on one file at a time. It is described in \ref sec_dfanapi. </td> </tr> <tr> <th><strong>DFSD API</strong></th> <td>Stores, manages and retrieves multidimensional arrays of integer or floatingpoint data, along with their dimensions and attributes, in one file. It is described in \ref sec_dfsdapi. </td> </tr> </table> As these interfaces are the tools used to read and write HDF files, they are the primary focus of this manual. In every interface, various programming examples are provided to illustrate the use of the interface routines. Both C and FORTRAN-77 versions are available. Their source code, in ASCII format, is located on the FTP servers mentioned in Section 1.2 on page 1 in the subdirectory samples/. Note that the goal of these examples is to illustrate the use of the interface routines; thus, for simplicity, many assumptions have been made, such as the availability or the authentication of the data. Based on these assumptions, these examples skip the verification of the returned status of each function. In practice, it is strongly recommended that the user verify the returned value of every function to ensure the reliability of the user application. \subsection subsec_intro_tools HDF Command-Line Utilities and Visualization Tools HDF application software fall within the following three categories: \li The FORTRAN-77 and C APIs described in Section 1.4 on page 4. \li Scientific visualization and analysis tools that read and write HDF files. \li Command-line utilities that operate directly on HDF files. <b><em>Scientific visualization and analysis software</em></b> that can read and write HDF files is available. This software includes tools such as HDFview, user-developed software, and commercial packages. The use of HDF files guarantees the interoperability of such tools. Some tools operate on raster images, others on color palettes. Some use images, others color palettes, still others data and annotations, and so forth. HDF provides the range of data types that these tools need, in a format that allows different tools with different data requirements to operate on the same files without confusion. The HDF <b><em>command-line utilities</em></b> are application programs that can be executed by entering them at the command prompt, like UNIX commands. They perform common operations on HDF files for which one would otherwise have to write a program. The HDF utilities are described in detail in \ref sec_utils. \subsection subsec_intro_platforms Primary HDF Platforms The HDF library and utilities are maintained on a number of different machines and operating systems. For a complete list of the machines, operating systems (with versions), C and FORTRAN77 compilers (also with versions), refer to <a href="http://www.hdfgroup.org/release4/platforms.html">platforms</a>. \subsection subsec_intro_hdf5 HDF4 versus HDF5 Backward compatibility has always been an integral part of the design of HDF Versions 1, 2, 3, and 4 and the HDF4 library can access files from all earlier versions. This manual describes HDF4 and, to the extent appropriate, the earlier versions. To take advantage of the capabilities of many of the more recent computing platforms and to meet the requirements of science applications that require ever-larger data sets, HDF5 had to be a completely new product, with a new format and a new library. HDF5 is conceptually related to HDF4 but incompatible; it cannot directly read or work with HDF4 files or the HDF4 library. HDF5 software and documentation are available at <a href="http://www.hdfgroup.org/products/hdf5">HDF5</a>. Both HDF4 and HDF5 are supported by The HDF Group, who will continue to maintain HDF4 as long as funds are available to do so. There are no plans to add any new features to HDF4, but bugs are fixed and the library is regularly built and tested on new operating system versions. The HDF Group strongly recommends using HDF5, especially if you are a new user and are not constrained by existing applications to using HDF4. We also recommend that you consider migrating existing applications from HDF4 to HDF5 to take advantage of the improved features and performance of HDF5. Information about converting from HDF4 to HDF5 and tools to facilitate that conversion are available at <a href="http://www.hdfgroup.org/h4toh5">convert HDF to HDF5</a>. See \ref subsec_utils_formats, for further discussions of and links to some of these tools. <hr> Navigate back: \ref index "Contents" / \ref UG */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap10.dox������������������������������������������������������0000664�0000000�0000000�00000002333�15030617045�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH10_UG Annotations (AN API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_anapi Annotations (AN API) \subsection subsec_anapi_overview \subsection subsec_anapi_model \subsubsection subsubsec_anapi_model_desc \subsubsection subsubsec_anapi_model_file \subsubsection subsubsec_anapi_model_object \subsubsection subsubsec_anapi_model_term \subsection subsec_anapi_interface \subsubsection subsubsec_anapi_interface_lib \subsubsection subsubsec_anapi_interface_type \subsubsection subsubsec_anapi_interface_model \subsubsection subsubsec_anapi_interface_access \subsubsection subsubsec_anapi_interface_term \subsection subsec_anapi_write \subsection subsec_anapi_read \subsubsection subsubsec_anapi_read_select \subsubsection subsubsec_anapi_read_read \subsection subsec_anapi_info \subsubsection subsubsec_anapi_info_num \subsubsection subsubsec_anapi_info_len \subsubsection subsubsec_anapi_info_type_num \subsubsection subsubsec_anapi_info_list \subsubsection subsubsec_anapi_info_tag \subsubsection subsubsec_anapi_info_tag_ref \subsubsection subsubsec_anapi_info_id \subsubsection subsubsec_anapi_info_tag_type \subsubsection subsubsec_anapi_info_obj <hr> Navigate back: \ref index "Contents" / \ref UG */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap11.dox������������������������������������������������������0000664�0000000�0000000�00000002132�15030617045�0021061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH11_UG Single-file Annotations (DFAN API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_dfanapi Single-file Annotations (DFAN API) \subsection subsec_dfanapi_overview \subsection subsec_dfanapi_interface \subsubsection subsubsec_dfanapi_interface_lib \subsubsection subsubsec_dfanapi_interface_tags \subsection subsec_dfanapi_model \subsection subsec_dfanapi_write \subsubsection subsubsec_dfanapi_write_label \subsubsection subsubsec_dfanapi_write_descr \subsubsection subsubsec_dfanapi_write_obj_label \subsubsection subsubsec_dfanapi_write_obj_descr \subsection subsec_dfanapi_read \subsubsection subsubsec_dfanapi_read_label \subsubsection subsubsec_dfanapi_read_descr \subsubsection subsubsec_dfanapi_read_obj_label \subsubsection subsubsec_dfanapi_read_obj_descr \subsection subsec_dfanapi_maint \subsubsection subsubsec_dfanapi_maint_clear \subsection subsec_dfanapi_ref_num \subsubsection subsubsec_dfanapi_ref_num_last \subsubsection subsubsec_dfanapi_ref_num_query \subsubsection subsubsec_dfanapi_ref_num_locate <hr> Navigate back: \ref index "Contents" / \ref UG */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap12.dox������������������������������������������������������0000664�0000000�0000000�00000002622�15030617045�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH12_UG Single-File Scientific Data Sets (DFSD API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_dfsdapi Single-File Scientific Data Sets (DFSD API) \subsection subsec_dfsdapi_overview \subsection subsec_dfsdapi_model \subsubsection subsubsec_dfsdapi_model_req \subsubsection subsubsec_dfsdapi_model_opt \subsection subsec_dfsdapi_single \subsubsection subsubsec_dfsdapi_single_lib \subsubsection subsubsec_dfsdapi_single_ids \subsection subsec_dfsdapi_write \subsubsection subsubsec_dfsdapi_write_create \subsubsection subsubsec_dfsdapi_write_type \subsubsection subsubsec_dfsdapi_write_overwrite \subsubsection subsubsec_dfsdapi_write_multi \subsubsection subsubsec_dfsdapi_write_prevent \subsubsection subsubsec_dfsdapi_write_reset \subsection subsec_dfsdapi_read \subsubsection subsubsec_dfsdapi_read_get \subsubsection subsubsec_dfsdapi_read_type \subsubsection subsubsec_dfsdapi_read_num \subsubsection subsubsec_dfsdapi_read_ref \subsection subsec_dfsdapi_slabs \subsubsection subsubsec_dfsdapi_slabs_access \subsubsection subsubsec_dfsdapi_slabs_write \subsubsection subsubsec_dfsdapi_slabs_read \subsection subsec_dfsdapi_predine \subsubsection subsubsec_dfsdapi_predine_write \subsubsection subsubsec_dfsdapi_predine_read \subsubsection subsubsec_dfsdapi_predine_write_dims \subsubsection subsubsec_dfsdapi_predine_read_dims <hr> Navigate back: \ref index "Contents" / \ref UG */ ��������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap13.dox������������������������������������������������������0000664�0000000�0000000�00000000706�15030617045�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH13_UG Error Reporting Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_error Error Reporting \subsection subsec_error_overview \subsection subsec_error_api \subsection subsec_error_report \subsubsection subsubsec_error_report_print \subsubsection subsubsec_error_report_recent \subsubsection subsubsec_error_report_descr \subsubsection subsubsec_error_report_clear <hr> Navigate back: \ref index "Contents" / \ref UG */ ����������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap14.dox������������������������������������������������������0000664�0000000�0000000�00000001543�15030617045�0021071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH14_UG HDF Performance Issues Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_perf HDF Performance Issues \subsection subsec_perf_overview \subsection subsec_perf_enhance \subsubsection subsubsec_perf_enhance_large \subsubsection subsubsec_perf_enhance_share \subsubsection subsubsec_perf_enhance_fill \subsubsection subsubsec_perf_enhance_fake \subsection subsec_perf_chunk \subsubsection subsubsec_perf_chunk_what \subsubsection subsubsec_perf_chunk_rw \subsubsection subsubsec_perf_chunk_nocomp \subsubsection subsubsec_perf_chunk_compress \subsubsection subsubsec_perf_chunk_size \subsubsection subsubsec_perf_chunk_space \subsection subsec_perf_tune \subsubsection subsubsec_perf_tune_data \subsubsection subsubsec_perf_tune_linked \subsubsection subsubsec_perf_tune_unlim <hr> Navigate back: \ref index "Contents" / \ref UG */ �������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap15.dox������������������������������������������������������0000664�0000000�0000000�00000006432�15030617045�0021074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH15_UG HDF Command-line Utilities Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_utils HDF Command-line Utilities \subsection subsec_utils_overview \subsection subsec_utils_dump \subsubsection subsubsec_utils_dump_desc \subsubsection subsubsec_utils_dump_cl \subsection subsec_utils_hdiff \subsubsection subsubsec_utils_hdiff_desc \subsubsection subsubsec_utils_hdiff_cl \subsubsection subsubsec_utils_hdiff_ex \subsection subsec_utils_vshow \subsubsection subsubsec_utils_vshow_desc \subsubsection subsubsec_utils_vshow_cl \subsubsection subsubsec_utils_vshow_ex \subsection subsec_utils_import \subsubsection subsubsec_utils_import_desc \subsubsection subsubsec_utils_import_cl \subsubsection subsubsec_utils_import_struct \subsection subsec_utils_r8tohdf \subsubsection subsubsec_utils_r8tohdf_desc \subsubsection subsubsec_utils_r8tohdf_cl \subsubsection subsubsec_utils_r8tohdf_ex \subsection subsec_utils_r24df8 \subsubsection subsubsec_utils_r24df8_desc \subsubsection subsubsec_utils_r24df8_cl \subsubsection subsubsec_utils_r24df8_ex \subsection subsec_utils_paltohdf \subsubsection subsubsec_utils_paltohdf_desc \subsubsection subsubsec_utils_paltohdf_cl \subsection subsec_utils_hdftor8 \subsubsection subsubsec_utils_hdftor8_desc \subsubsection subsubsec_utils_hdftor8_cl \subsubsection subsubsec_utils_hdftor8_ex \subsection subsec_utils_hdftopal \subsubsection subsubsec_utils_hdftopal_desc \subsubsection subsubsec_utils_hdftopal_cl \subsection subsec_utils_ristosds \subsubsection subsubsec_utils_ristosds_desc \subsubsection subsubsec_utils_ristosds_cl \subsubsection subsubsec_utils_ristosds_ex \subsection subsec_utils_hdf24hdf8 \subsubsection subsubsec_utils_hdf24hdf8_desc \subsubsection subsubsec_utils_hdf24hdf8_cl \subsection subsec_utils_hdfcomp \subsubsection subsubsec_utils_hdfcomp_desc \subsubsection subsubsec_utils_hdfcomp_cl \subsubsection subsubsec_utils_hdfcomp_ex \subsection subsec_utils_hdfpack \subsubsection subsubsec_utils_hdfpack_desc \subsubsection subsubsec_utils_hdfpack_cl \subsubsection subsubsec_utils_hdfpack_ex \subsection subsec_utils_hrepack \subsubsection subsubsec_utils_hrepack_desc \subsubsection subsubsec_utils_hrepack_cl \subsection subsec_utils_vmake \subsubsection subsubsec_utils_vmake_desc \subsubsection subsubsec_utils_vmake_cl \subsubsection subsubsec_utils_vmake_ex \subsection subsec_utils_hdfls \subsubsection subsubsec_utils_hdfls_desc \subsubsection subsubsec_utils_hdfls_cl \subsubsection subsubsec_utils_hdfls_ex \subsection subsec_utils_hdfed \subsubsection subsubsec_utils_hdfed_desc \subsubsection subsubsec_utils_hdfed_cl \subsection subsec_utils_formats \subsection subsec_utils_hdf2gif \subsubsection subsubsec_utils_hdf2gif_desc \subsubsection subsubsec_utils_hdf2gif_cl \subsubsection subsubsec_utils_hdf2gif_struct \subsubsection subsubsec_utils_hdf2gif_build \subsection subsec_utils_h4cc \subsubsection subsubsec_utils_h4cc_desc \subsubsection subsubsec_utils_h4cc_cl \subsubsection subsubsec_utils_h4cc_ex \subsection subsec_utils_h4fc \subsubsection subsubsec_utils_h4fc_desc \subsubsection subsubsec_utils_h4fc_cl \subsubsection subsubsec_utils_h4fc_ex \subsection subsec_utils_h4redploy \subsubsection subsubsec_utils_h4redploy_desc \subsubsection subsubsec_utils_h4redploy_cl <hr> Navigate back: \ref index "Contents" / \ref UG */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap16.dox������������������������������������������������������0000664�0000000�0000000�00000001406�15030617045�0021071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH16_UG Raw Data Information Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_raw Raw Data Information \subsection subsec_raw_overview \subsection subsec_raw_retrieve \subsection subsec_raw_add_an \subsubsection subsubsec_add_an_data \subsection subsec_raw_add_sd \subsubsection subsubsec_add_sd_data \subsubsection subsubsec_add_sd_attr \subsubsection subsubsec_add_sd_dfsd \subsubsection subsubsec_add_sd_sds \subsection subsec_raw_add_gr \subsubsection subsubsec_add_gr_img \subsubsection subsubsec_add_gr_attr \subsection subsec_raw_add_v \subsubsection subsubsec_raw_add_v_data \subsection subsec_raw_add_vs \subsubsection subsubsec_add_vs_data \subsubsection subsubsec_add_vs_attr <hr> Navigate back: \ref index "Contents" / \ref UG */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap2.dox�������������������������������������������������������0000664�0000000�0000000�00000030471�15030617045�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH2_UG HDF Fundamentals Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_fund HDF Fundamentals \subsection subsec_fund_overview Chapter Overview This chapter provides necessary information for the creation and manipulation of HDF files. It includes an overview of the HDF file format, basic operations on HDF files, and programming language issues pertaining to the use of Fortran and ANSI C in HDF programming. \subsection subsec_fund_format HDF File Format An HDF file contains a file header, at least one data descriptor block, and zero or more data elements as depicted in Figure 2a. <table> <tr> <td> \image html .gif "The Physical Layout of an HDF File Containing One Data Object" </td> </tr> </table> The file header identifies the file as an HDF file. A data descriptor block contains a number of data descriptors. A data descriptor and a data element together form a data object, which is the basic conglomerate structure for encapsulating data in the HDF file. Each of these terms is described in the following sections. \subsubsection subsubsec_fund_format_head File Header The first component of an HDF file is the file header, which takes up the first four bytes of the HDF file. Specifically, it consists of four one-byte values that are ASCII representations of control characters: the first is a control-N, the second is a control-C , the third is a control-S and the fourth is a control-A (^N^C^S^A). Note that, on some machines, the order of bytes in the file header might be swapped when the header is written to an HDF file, causing these characters to be written in little-endian order. To maintain the portability of HDF file header data when developing software for such machines, this byte swapping must be counteracted by ensuring the characters are read and written in the desired order. \subsubsection subsubsec_fund_format_object Data Object A data object is comprised of a data descriptor and a data element. The data descriptor consists of information about the type, location, and size of the data element. The data element contains the actual data. This organization of HDF data makes HDF files self-describing. Figure 2b shows two examples of data objects. <table> <tr> <td> \image html .gif "Two Data Objects" </td> </tr> </table> <h4>Data Descriptor</h4> All data descriptors are twelve bytes long and contain four fields, as depicted in Figure 2c. These fields are: a 16-bit tag, a 16-bit reference number, a 32-bit data offset and a 32-bit data length. <table> <tr> <td> \image html .gif "The Contents of a Data Descriptor" </td> </tr> </table> <h4>Tag</h4> A tag is the data descriptor field that identifies the type of data stored in the corresponding data element. A tag is a 16-bit unsigned integer between 1 and 65,535, and is associated with a mnemonic name to promote ease to use and the readability of user programs. If a data descriptor has no corresponding data element, the value of its tag is DFTAG_NULL (or 0). Tags are assigned by The HDF Group as part of the HDF specification. The following are the ranges of tag values and their descriptions: \li 1 to 32,767 - Tags reserved for HDF Group use \li 32,768 to 64,999 - User-definable tags \li 65,000 to 65,535 - Tags reserved for expansion of the HDF specification A list of commonly-used tags and their descriptions is included in \ref sec_appenda of this document. <h4>Reference Number</h4> For each occurrence of a tag in an HDF file, a unique reference number is assigned by the library with the tag in the data descriptor. A reference number is a 16-bit unsigned integer and can not be changed during the life of the data object that the reference number specifies. The combination of a tag and a reference number uniquely identifies the corresponding data object in the file. Reference numbers are not necessarily assigned consecutively, so it cannot be assumed that the value of a reference number has any meaning beyond providing a way of distinguishing among objects with the same tag. While application programmers may find it convenient to impart some additional meaning to reference numbers in their code, it is emphasized that the HDF library will not internally recognize any such meaning. <h4>Data Offset and Length</h4> The data offset field points to the location of the data element in the file by storing the number of bytes from the beginning of the file to the beginning of the data element. The length field contains the size of the data element in bytes. The data offset and the length are both 32-bit signed integers. This results in a file-size limit of 2 gigabytes. <h4>Data Elements</h4> The data element is the raw data portion of a data object. \subsubsection subsubsec_fund_format_descrip Data Descriptor Block Data descriptors are physically stored in a linked list of blocks called data descriptor blocks. The relationship between the data descriptor block to the other components of an HDF file is illustrated in Figure 2a on page 7. The individual components of a data descriptor block are depicted in Figure 2d on page 10. Each data descriptor in a data descriptor block is assumed to be associated with a data element unless it contains the tag DFTAG_NULL (or 0),which indicates that there is no associated data element. By default, a data descriptor block contains 16 (defined as DEF_NDDS) data descriptors. The user may reset this limit when creating the HDF file. Refer to Section 2.3.2 on page 11 for more details. In addition to data descriptors, each data descriptor block contains a data descriptor header. The data descriptor header contains two fields: block size and next block. The block size field is a 16- bit unsigned integer indicating the number of data descriptors in the data descriptor block. The next block field is a 32-bit unsigned integer indicating the offset of the next data descriptor block, if one exists. The last data descriptor header in the list contains a value of 0 in its next block field. Figure 2d illustrates the layout of a data descriptor block. <table> <tr> <td> \image html .gif "Data Descriptor Block" </td> </tr> </table> \subsubsection subsubsec_fund_format_group Grouping Data Objects in an HDF File Data objects containing related data in HDF files are usually grouped together by the library. These groups of data objects are called data sets. The HDF user uses the application interface to manipulate data sets in a file. As an example, an 8-bit raster image data set requires three objects: a group object identifying the members of the set, an image object containing the image data, and a dimension object indicating the size of the image. Data objects are individually accessible even if they are included in a set, therefore data objects can belong to more than one set and sets can be included in larger groups. For example, a palette object included in one raster image set may also be a part of another raster image set if its tag and reference number are included in a data descriptor within that second set. Additional information about data objects, including the options available for storing them, can be found in the <a href="http://www.hdfgroup.org/doc.html">HDF Specifications and Developer’s Guide</a> from the HDF web site. \subsection subsec_fund_basic Basic Operations on HDF Files Using the Multifile Interfaces This section describes the basic file operations, some of which are required in working with HDF files using the multifile interfaces. Except for the SD interface, all applications using other multifile interfaces must explicitly use the routines Hopen and Hclose to control accesses to the HDF files. In an application using the HDF file format, the file is accessed via its identifier, referred to as file identifier. The following subsections describe the file identifier and the basic file operations common to most multifile interfaces. \subsubsection subsubsec_fund_basic_file File Identifiers The HDF programming model specifies that a data file is first explicitly created or opened by an application, manipulated, then explicitly closed by the application. A file identifier is a unique number that the HDF library assigns to an HDF file when creating or opening the file. The HDF library creates the file identifier for an HDF file when given its file name, as represented in the native file system. Interface routines use only the file identifier to access and manipulate the file. When all operations on the file are complete, the file identifier must be discarded by explicitly closing the file before terminating the application. As every file is assigned its own identifier, the order in which files are accessed is very flexible. For example, it is valid to open a file and obtain an identifier for it, then open a second file without closing the first file or disposing of the first file identifier. The only requirement made by HDF is that all file identifiers be individually discarded before the termination of the calling program. File identifiers created by the routine of one HDF interface can be used by the routines of any other interfaces, except SD’s. \subsubsection subsubsec_fund_basic_open Opening HDF Files: Hopen <table> <tr> <th><strong>C</strong></th> <td>file_id = Hopen(filename, access_mode, num_dds_block); </td> </tr> <tr> <th><strong>FORTRAN</strong></th> <td>file_id = hopen(filename, access_mode, num_dds_block) </td> </tr> </table> <table> <tr> <td> \image html .gif "Hopen Parameter List" </td> </tr> </table> <table> <tr> <td> \image html .gif "File Access Code Flags" </td> </tr> </table> \subsubsection subsubsec_fund_basic_close Closing HDF Files: Hclose <table> <tr> <td> \image html .gif "Hclose Parameter List" </td> </tr> </table> \subsubsection subsubsec_fund_basic_get Getting the HDF Library and File Versions: Hgetlibversion and Hgetfileversion <table> <tr> <td> \image html .gif "Hgetlibversion and Hgetfileversion Parameter Lists" </td> </tr> </table> \subsection subsec_fund_file Determining whether a File Is an HDF File: Hishdf/hishdff <table> <tr> <td> \image html .gif "Hishdf/hishdff Parameter List" </td> </tr> </table> \subsection subsec_fund_prog Programming Issues \subsubsection subsubsec_fund_prog_head Header File Information \subsubsection subsubsec_fund_prog_defs HDF Definitions The HDF library provides several sets of definitions which can be used easily in the user applications. These sets include the definitions of the data types, the data type flags, and the limits that set various maximum values. The definitions of the data types supported by HDF are located in the hdf.h header file, and the data type flags are located in the hntdefs.h header file. Both are also included in (See Table 2F on page 14), (See Table 2G on page 15), and (See Table 2H on page 15). HDF data types are used for portability in the declaration of variables, and data type flags are used as parameters in various HDF interface routines. <h4>Standard HDF Data Types</h4> <table> <tr> <td> \image html .gif "Standard HDF Data Types and Flags" </td> </tr> </table> <h4>Native Format Data Types</h4> <table> <tr> <td> \image html .gif "Native Format Data Type Definitions" </td> </tr> </table> <h4>Little-Endian Data Types</h4> <table> <tr> <td> \image html .gif "Little-Endian Format Data Type Definitions" </td> </tr> </table> <h4>Tag Definitions</h4> <h4>Limit Definitions</h4> <table> <tr> <td> \image html .gif "Limit Definitions" </td> </tr> </table> \subsubsection subsubsec_fund_prog_lang FORTRAN-77 and C Language Issues HDF provides both FORTRAN-77 and C versions of most of its interface routines. In order to make the FORTRAN-77 and C versions of each routine as similar as possible, some compromises have been made in the process of simplifying the interface for both programming languages. <h4>FORTRAN-77-to-C Translation</h4> <table> <tr> <td> \image html .gif "Use of a Function Call Converter to Route FORTRAN-77 HDF Calls to the C Library" </td> </tr> </table> <h4>Case Sensitivity</h4> <h4>Name Length</h4> <h4>Header Files</h4> <h4>Data Type Specifications</h4> <table> <tr> <td> \image html .gif "Correspondence Between Fortran and HDF C Data Types" </td> </tr> </table> <h4>String and Array Specifications</h4> <h4>FORTRAN-77 and ANSI C</h4> <hr> Navigate back: \ref index "Contents" / \ref UG */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap3.dox�������������������������������������������������������0000664�0000000�0000000�00000005225�15030617045�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH3_UG Scientific Data Sets (SD API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_sdapi Scientific Data Sets (SD API) \subsection subsec_sdapi_overview \subsection subsec_sdapi_data_model \subsubsection subsubsec_sdapi_data_model_req \subsubsection subsubsec_sdapi_data_model_opt \subsubsection subsubsec_sdapi_data_model_annot \subsection subsec_sdapi_interface \subsubsection subsubsec_sdapi_interface_head \subsubsection subsubsec_sdapi_interface_lib \subsubsection subsubsec_sdapi_interface_tags \subsection subsec_sdapi_model \subsubsection subsubsec_sdapi_model_start \subsubsection subsubsec_sdapi_model_term \subsection subsec_sdapi_write \subsubsection subsubsec_sdapi_write_data \subsubsection subsubsec_sdapi_write_comp \subsubsection subsubsec_sdapi_write_ext \subsection subsec_sdapi_read \subsection subsec_sdapi_info \subsubsection subsubsec_sdapi_info_file \subsubsection subsubsec_sdapi_info_get \subsubsection subsubsec_sdapi_info_comp \subsubsection subsubsec_sdapi_info_locate \subsubsection subsubsec_sdapi_info_multi \subsubsection subsubsec_sdapi_info_num \subsubsection subsubsec_sdapi_info_index \subsubsection subsubsec_sdapi_info_ref \subsubsection subsubsec_sdapi_info_type \subsubsection subsubsec_sdapi_info_empty \subsubsection subsubsec_sdapi_info_array \subsection subsec_sdapi_dims \subsubsection subsubsec_sdapi_dims_set \subsubsection subsubsec_sdapi_dims_name \subsubsection subsubsec_sdapi_dims_dims \subsubsection subsubsec_sdapi_dims_dimscale \subsubsection subsubsec_sdapi_dims_data \subsection subsec_sdapi_ud \subsubsection subsubsec_sdapi_ud_set \subsubsection subsubsec_sdapi_ud_info \subsubsection subsubsec_sdapi_ud_read \subsection subsec_sdapi_predef \subsubsection subsubsec_sdapi_predef_get \subsubsection subsubsec_sdapi_predef_string \subsubsection subsubsec_sdapi_predef_dims \subsubsection subsubsec_sdapi_predef_range \subsubsection subsubsec_sdapi_predef_fill \subsubsection subsubsec_sdapi_predef_cal \subsection subsec_sdapi_ops \subsubsection subsubsec_sdapi_ops_file \subsubsection subsubsec_sdapi_ops_object \subsubsection subsubsec_sdapi_ops_max \subsubsection subsubsec_sdapi_ops_limits \subsubsection subsubsec_sdapi_ops_open \subsubsection subsubsec_sdapi_ops_array \subsection subsec_sdapi_chunk \subsubsection subsubsec_sdapi_chunk_set \subsubsection subsubsec_sdapi_chunk_cache \subsubsection subsubsec_sdapi_chunk_write \subsubsection subsubsec_sdapi_chunk_read \subsubsection subsubsec_sdapi_chunk_info \subsection subsec_sdapi_ghost \subsection subsec_sdapi_cdf \subsubsection subsubsec_sdapi_cdf_interface \subsubsection subsubsec_sdapi_cdf_nc <hr> Navigate back: \ref index "Contents" / \ref UG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap4.dox�������������������������������������������������������0000664�0000000�0000000�00000003431�15030617045�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH4_UG Vdatas (VS API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_vsapi Vdatas (VS API) \subsection subsec_vsapi_overview \subsection subsec_vsapi_data_model \subsubsection subsubsec_vsapi_data_model_fields \subsection subsec_vsapi_interface \subsubsection subsubsec_vsapi_interface_head \subsubsection subsubsec_vsapi_interface_lib \subsubsection subsubsec_vsapi_interface_ids \subsubsection subsubsec_vsapi_interface_model \subsubsection subsubsec_vsapi_interface_start \subsubsection subsubsec_vsapi_interface_term \subsection subsec_vsapi_create \subsection subsec_vsapi_write \subsubsection subsubsec_vsapi_write_create \subsubsection subsubsec_vsapi_write_data \subsection subsec_vsapi_read \subsubsection subsubsec_vsapi_read_init \subsubsection subsubsec_vsapi_read_data \subsection subsec_vsapi_search \subsubsection subsubsec_vsapi_search_find \subsubsection subsubsec_vsapi_search_getid \subsubsection subsubsec_vsapi_search_num \subsubsection subsubsec_vsapi_search_exist \subsubsection subsubsec_vsapi_search_get \subsubsection subsubsec_vsapi_search_internal \subsubsection subsubsec_vsapi_search_file \subsection subsec_vsapi_attr \subsubsection subsubsec_vsapi_attr_query \subsubsection subsubsec_vsapi_attr_set \subsubsection subsubsec_vsapi_attr_get \subsubsection subsubsec_vsapi_attr_total_num \subsubsection subsubsec_vsapi_attr_num \subsubsection subsubsec_vsapi_attr_find \subsubsection subsubsec_vsapi_attr_info \subsubsection subsubsec_vsapi_attr_isattr \subsection subsec_vsapi_info \subsubsection subsubsec_vsapi_info_inquire \subsubsection subsubsec_vsapi_info_getblock \subsubsection subsubsec_vsapi_info_query \subsubsection subsubsec_vsapi_info_other \subsubsection subsubsec_vsapi_info_field <hr> Navigate back: \ref index "Contents" / \ref UG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap5.dox�������������������������������������������������������0000664�0000000�0000000�00000002733�15030617045�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH4_UG Vgroups (V API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_vapi Vgroups (V API) \subsection subsec_vapi_overview \subsection subsec_vapi_data_model \subsubsection subsubsec_data_model_class \subsubsection subsubsec_data_model_org \subsubsection subsubsec_data_model_ex \subsection subsec_vapi_interface \subsubsection subsubsec_vapi_interface_lib \subsubsection subsubsec_vapi_interface_id \subsection subsec_vapi_model \subsubsection subsubsec_vapi_model_start \subsubsection subsubsec_vapi_model_term \subsection subsec_vapi_write \subsubsection subsubsec_vapi_write_set \subsubsection subsubsec_vapi_write_add \subsubsection subsubsec_vapi_write_insert \subsubsection subsubsec_vapi_write_group \subsection subsec_vapi_read \subsubsection subsubsec_vapi_read_locate \subsubsection subsubsec_vapi_read_data \subsection subsec_vapi_delete \subsubsection subsubsec_vapi_delete_file \subsubsection subsubsec_vapi_delete_obj \subsection subsec_vapi_attr \subsubsection subsubsec_vapi_attr_getvers \subsubsection subsubsec_vapi_attr_set \subsubsection subsubsec_vapi_attr_find \subsubsection subsubsec_vapi_attr_num \subsubsection subsubsec_vapi_attr_info1 \subsubsection subsubsec_vapi_attr_info2 \subsubsection subsubsec_vapi_attr_get1 \subsubsection subsubsec_vapi_attr_get2 \subsection subsec_vapi_obsolete \subsubsection subsubsec_vapi_obsolete_next \subsubsection subsubsec_vapi_obsolete_inquire <hr> Navigate back: \ref index "Contents" / \ref UG */ �������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap6.dox�������������������������������������������������������0000664�0000000�0000000�00000002225�15030617045�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH6_UG 8-Bit Raster Images (DFR8 API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_dfr8api 8-Bit Raster Images (DFR8 API) \subsection subsec_dfr8api_overview \subsubsection subsubsec_dfr8api_overview_req \subsubsection subsubsec_dfr8api_overview_opt \subsubsection subsubsec_dfr8api_overview_comp \subsection subsec_dfr8api_interface \subsubsection subsubsec_dfr8api_interface_lib \subsection subsec_dfr8api_write \subsubsection subsubsec_dfr8api_write_store \subsubsection subsubsec_dfr8api_write_add \subsubsection subsubsec_dfr8api_write_comp \subsubsection subsubsec_dfr8api_write_ref \subsection subsec_dfr8api_read \subsubsection subsubsec_dfr8api_read_data \subsubsection subsubsec_dfr8api_read_query \subsubsection subsubsec_dfr8api_read_ref \subsubsection subsubsec_dfr8api_read_next \subsection subsec_dfr8api_info \subsubsection subsubsec_dfr8api_info_query \subsubsection subsubsec_dfr8api_info_ref \subsubsection subsubsec_dfr8api_info_refpal \subsection subsec_dfr8api_back \subsubsection subsubsec_dfr8api_back_long_name \subsubsection subsubsec_dfr8api_back_new_tag <hr> Navigate back: \ref index "Contents" / \ref UG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap7.dox�������������������������������������������������������0000664�0000000�0000000�00000001741�15030617045�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH7_UG 24-bit Raster Images (DF24 API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_df 24api 24-bit Raster Images (DF24 API) \subsection subsec_df24api_overview \subsection subsec_df24api_data_model \subsubsection subsubsec_df24api_data_model_req \subsubsection subsubsec_df24api_data_model_opt \subsection subsec_df24api_interface \subsubsection subsubsec_df24api_interface_lib \subsection subsec_df24api_write \subsubsection subsubsec_df24api_write_put \subsubsection subsubsec_df24api_write_set \subsubsection subsubsec_df24api_write_comp \subsection subsec_df24api_read \subsubsection subsubsec_df24api_read_data \subsubsection subsubsec_df24api_read_dims \subsubsection subsubsec_df24api_read_mod \subsubsection subsubsec_df24api_read_24 \subsubsection subsubsec_df24api_read_info \subsection subsec_df24api_info \subsubsection subsubsec_df24api_info_num \subsubsection subsubsec_df24api_info_ref <hr> Navigate back: \ref index "Contents" / \ref UG */ �������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap8.dox�������������������������������������������������������0000664�0000000�0000000�00000004076�15030617045�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH8_UG General Raster Images (GR API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_grapi General Raster Images (GR API) \subsection subsec_grapi_overview \subsection subsec_grapi_data_model \subsubsection subsubsec_grapi_data_model_req \subsubsection subsubsec_grapi_data_model_opt \subsection subsec_grapi_interface \subsubsection subsubsec_lib \subsection subsec_grapi_head \subsection subsec_grapi_model \subsubsection subsubsec_grapi_model_start \subsubsection subsubsec_grapi_model_term \subsection subsec_grapi_write \subsubsection subsubsec_grapi_write_data \subsubsection subsubsec_grapi_write_comp \subsubsection subsubsec_grapi_write_set \subsubsection subsubsec_grapi_write_ext \subsection subsec_grapi_read \subsubsection subsubsec_grapi_read_data \subsubsection subsubsec_grapi_read_set \subsection subsec_grapi_diff \subsection subsec_grapi_info \subsubsection subsubsec_grapi_info_file \subsubsection subsubsec_grapi_info_getim \subsubsection subsubsec_grapi_info_idtoref \subsubsection subsubsec_grapi_info_reftoindex \subsubsection subsubsec_grapi_info_nametoindex \subsubsection subsubsec_grapi_info_getcomp \subsubsection subsubsec_grapi_info_bemap \subsection subsec_grapi_attr \subsubsection subsubsec_grapi_attr_predefine \subsubsection subsubsec_grapi_attr_set \subsubsection subsubsec_grapi_attr_query \subsubsection subsubsec_grapi_attr_read \subsection subsec_grapi_data \subsubsection subsubsec_grapi_data_getlutid \subsubsection subsubsec_grapi_data_getnluts \subsubsection subsubsec_grapi_data_luttoref \subsubsection subsubsec_grapi_data_getlutinfo \subsubsection subsubsec_grapi_data_writelut \subsubsection subsubsec_grapi_data_reqlut \subsubsection subsubsec_grapi_data_readlut \subsection subsec_grapi_image \subsubsection subsubsec_grapi_image_diff \subsubsection subsubsec_grapi_image_setchunk \subsubsection subsubsec_grapi_image_writechunk \subsubsection subsubsec_grapi_image_readchunk \subsubsection subsubsec_grapi_image_getchunk \subsubsection subsubsec_grapi_image_chunkcache <hr> Navigate back: \ref index "Contents" / \ref UG */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/chap9.dox�������������������������������������������������������0000664�0000000�0000000�00000001351�15030617045�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @page CH9_UG Palettes (DFP API) Navigate back: \ref index "Contents" / \ref UG <hr> \section sec_dfpapi Palettes (DFP API) \subsection subsec_dfpapi_overview \subsection subsec_dfpapi_model \subsection subsec_dfpapi_api \subsubsection subsubsec_dfpapi_api_lib \subsection subsec_dfpapi_write \subsubsection subsubsec_dfpapi_write_pal \subsubsection subsubsec_dfpapi_write_ref \subsection subsec_dfpapi_read \subsubsection subsubsec_dfpapi_read_get \subsubsection subsubsec_dfpapi_read_ref \subsubsection subsubsec_dfpapi_read_next \subsection subsec_dfpapi_other \subsubsection subsubsec_dfpapi_other_query \subsubsection subsubsec_dfpapi_other_num \subsection subsec_dfpapi_back <hr> Navigate back: \ref index "Contents" / \ref UG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/�������������������������������������������������������0000775�0000000�0000000�00000000000�15030617045�0021072�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Fundmtlsp.jpg������������������������������������������0000664�0000000�0000000�00000037130�15030617045�0023554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�="�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +2Oi‘Í$MpÛãbŽNpGQ)?á"Òÿ�çáÿ�ïËÿ�ñ4©Eeÿ�ÂE¥ÿ�ÏÃÿ�ß—ÿ�âhÿ�„‹Kÿ�Ÿ‡ÿ�¿/ÿ�ÄÐ¥—ÿ� —ÿ�?ÿ�~_ÿ�‰£þ-/þ~þü¿ÿ�@”V_ü$Z_üü?ýùþ&øH´¿ùøûòÿ�üM�jQYð‘ióðÿ�÷åÿ�øš?á"Òÿ�çáÿ�ïËÿ�ñ4©Eeÿ�ÂE¥ÿ�ÏÃÿ�ß—ÿ�âhÿ�„‹Kÿ�Ÿ‡ÿ�¿/ÿ�ÄÐ¥—ÿ� —ÿ�?ÿ�~_ÿ�‰£þ-/þ~þü¿ÿ�@”V_ü$Z_üü?ýùþ&øH´¿ùøûòÿ�üM�jQYð‘ióðÿ�÷åÿ�øš?á"Òÿ�çáÿ�ïËÿ�ñ4©EgA®i×7QÛEpLÒgb˜Ùs“Ôz Ñ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ½î_ÿ�×ìßε+/Dû—ÿ�õû7ó¬ßøHõyîn’Ëæâ'x¦õqS‚pFE�tÔW7ý·â/úò¡øQý·â/úò¡øPIEsÛ~"ÿ�¡Wÿ�*ÿ�…Û~"ÿ�¡Wÿ�*ÿ�…�t”W7ý·â/úò¡øQý·â/úò¡øPIEsÛ~"ÿ�¡Wÿ�*ÿ�…Û~"ÿ�¡Wÿ�*ÿ�…�t”W7ý·â/úò¡øQý·â/úò¡øPIEsÛ~"ÿ�¡Wÿ�*ÿ�…Û~"ÿ�¡Wÿ�*ÿ�…�t”W7ý·â/úò¡øQý·â/úò¡øPIEsÛ~"ÿ�¡Wÿ�*ÿ�…ø‹UŽúÎ ÿ�µ´W3D¢ñ$ÚÄ8îÐÍSþF þºÍÿ�¢š¶+Tÿ�‘ƒBÿ�®³覭Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(®â5’^Íá³ýž·/ ÎÒI¤ÉIäH tÌ}Ç všã-ô}.=qäÕ<.×Ký¼fžX</p‘Ioö@De•óûdüß?�жQ^I¨é0}“Kóô™4Á¬Í-½Î“-ïÙmM£/Ï‚ULä0Cƒ÷xxÛñ‡,t¿‡¶:göB]ïìå– K Ѧaƒ…*$à�0v÷Å�zã:ׇ"Óì.âµÒ&˜j:¡˜¬4i#‡Ï‘â6ÿ�» ˜äÚ€' Æ ç“×xUñU÷Ž5ï xta¸À’Àéû¼!Ô˜€Ü~mÊÒÉû«´ä¸¢ªjr_ŧLúe¼7 *)ä1£r3–�ãŒö®gûKâý ºþ ÿ�PcEqßÚ_¿è]Ðÿ�ðhÿ�üjí/ˆ_ô.èø4þ5@Çi|Bÿ�¡wCÿ�Á£ÿ�ñª?´¾!л¡ÿ�àÑÿ�øÕ�v4Wý¥ñ þ…Ýÿ�ÿ�ƨþÒø…ÿ�Bî‡ÿ�ƒGÿ�ãTØÑ\wö—Ä/út?ü?ÿ�£ûKâý ºþ ÿ�PcH=kþÒø…ÿ�Bî‡ÿ�ƒGÿ�ãUáz‰¾!Y|LÖí<?n÷R¾¥p×ZvL¶ÈÆVÝólÏÏòç>”ôމ÷/ÿ�ëöoçU|?þ«Qÿ�°Çþ†iþ{™4û‡½†8.ZêC,QɽQ³È Ÿ®3Ãÿ�êµûÜèf€5袊�+2ïÄšŸq5½îµ§[O–9®‘5$�X eäúZÓ®ÅÞÕµýG[šÝmÄwš\v6íý«qo‡L´±Æ»]q1á·}Ìts€ªËÄÚ¥t-l5Í6êá†áq»‘Œç�ç¥-—‰´JóìvÞ›uu‚|˜.ãwã¯Êx®rë÷ZË_Á¥[[Üj–ú‘’ÞêIdŒÅ+å¨1(ùŒ8-Ÿºäb´ü)£jZ^N;a$—SM‚å¥EM,¼EØ{´ã9ÚvÛÅ~¼º¶ºþ•=Á!|¨¯#gÎ@ÆÏRÔÖ…¥å®¡l·6W0ÜÛ¹!e†@êH$ÇõÆZxc_†Ä©6°Ý \^©‡Q›`„Ý<ò.<±ÉY2¼« Œb™áŸ ø—LñDº†£©ÿ� <—2¥•µëPË4’`ÆbÏÎ>mÊAÁÓ\x¯Ã–:\ëúT/‚)–KÈÔÆç8VÉàü­Áô>•¯^yªx?\ºÕµ;ø!³i&Õ­o VÖ.cˆÇ•‘$+Œ±òG$67õùb ñ€Ó¯áoO-ܲË4-ªÌ«àùxEŒayæ2Y~QޤP¡»ax,ÍÄBé£2ˆ7å�¶Þ¸É>⦯;Ôü!â›FæòËSH®g·¼ƒí/.aYdã&©´F#%pNwòF+WÃ^ÖtÝ[ÎÔ¯n.-’Ò$ÌÕ¦¼å2of]ˆŒ ºŒãþY†ÆN@_EPYçü}h¿öOýë^±<Gq £i73G 1ß«<’0UP#|’O�P­SþF þºÍÿ�¢š¶+ÆuÏŒú-׎<=§hd]"ߤW²å!UˆÛnpN'<‡‘^«ý¿£Ð^Ãÿ�SühFŠÎþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ¢³¿·ôoú ØàJÛú7ýì?ð%?Æ€4h¬ïíýþ‚öøŸãGöþÿ�A{ü Oñ  ƺñN—iªÜi’×»·„O"C§Ï(T9Á܈AÎÖ’ê XþßÑ¿è/aÿ�)þ5Ëj:ö³â‹½fÏì×6ÙEm[k×6Œ^6•‰o!pÀ™qÉ8Û‘ÔŠ�Öÿ�„ï@0YL’ßÉí»][˜ôË—/ àFH\•äã†SÑ)/|;8[›¹Õ K‡’×O¸6ÎÖ,‘•åaת°ê diºŠ´˜|4aµÑ¦—JÒ$Óe*«10áÔˆNF SƒŽ\Œñ’Ý'Áz—ˆ<Û±i-‹ˆ¤y`»–'Y’yî"U“|ûB³pª^(¥Ô<U¥i—Vöӛךâq[ióÜŒ ~í,¹ÏMÃÔSWź+Eo º“eÇÙü³öy廲E»åùw2°ç8Î23Ÿâ_êψ,eŽ+gÓVÎ{K’od‚`%x‰e„6_tvZZç†u«¯êºu¶”!ºm5ËKrñ»5¬æbXˆÉ äà(ú�ÖiV$™ÃK6Ä,px$ŸaÍ`[xãB»kA%ó&§ ŽÍΛr«)## cÀAlœ s€Mdø3Áú¯…çÕîn/ò{’Æ2fg;Ý•¤ U¾m¥‹HqŽÀ Íм®é'Â¥¢¶gÒdå›]»™<‡„˜átاXŒmÚéUKQÕ¬ô‘loD[™ÒÚ6X]ǘìC(,@Ë`dŽkËÛáN¯öM$¹³»»¸yLSÜLB†a.Éö¬@¬ÊΟ3Ã.ŒüªxŽoµÚ‹½òmË3e$S™]£!wŒ.p>âñèÞÑ^Y¤|4¿²´ÑíïmôËøíïŒ×iq8(cks yj°(ËnTõdbX°õãH£HãPˆ€*ªŒ�@(ÔQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ZÓO³Óüï±Úß+M)ù’1Ë3c©$õ5fŠ�ËÑ>åÿ�ý~Íüꯇÿ�Õj?ö¸ÿ�ÐÍZÑ>åÿ�ý~Íüê¤:>±g-רõK†k‰' 5ƒ».ãœdL þB€6(¬Ï±x‹þ‚º_þ dÿ�ãô}‹Ä_ôÒÿ�ð['ÿ�  :+3ì^"ÿ� ®—ÿ�‚Ù?øýbñýt¿üÉÿ�ÇèNŠÌûˆ¿è+¥ÿ�à¶Oþ?GؼEÿ�A]/ÿ�²ñú�Ó¢³>Åâ/ú éø-“ÿ�Ñö/ÐWKÿ�ÁlŸü~€4è¬Ï±x‹þ‚º_þ dÿ�ãô}‹Ä_ôÒÿ�ð['ÿ�  :+3ì^"ÿ� ®—ÿ�‚Ù?øýbñýt¿üÉÿ�ÇèNŠÌûˆ¿è+¥ÿ�à¶Oþ?GؼEÿ�A]/ÿ�²ñú�Ó¬OÁ Ói\EÐÉ~ªñÈ¡•‡–üx5cì^"ÿ� ®—ÿ�‚Ù?øýFÚ>­sye%î§dðÛN'Ù ‹ÆÌB°q•±÷½(Îuß‚ú>7Ð/ôp-c{å–âÊA¾Xþv L…#Ž{W¦ÿ�Â)áÏú�i_øøRjŸò0h_õÖoýÕ±@ðŠxsþ€WþÇþÂ)áÏú�i_øøV½Œþð̈ROé.§ªµ”düv ÿ�„Áÿ�ô*hø.‡ÿ�‰®‚Š�çÿ�áðý šþ ¡ÿ�âhÿ�„Áÿ�ô*hø.‡ÿ�‰®‚Š�çÿ�áðý šþ ¡ÿ�âk^ÃN²ÒíÓN³·³¶RJÃoÆ€““…� ³E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�eèŸrÿ�þ¿fþuÌA¯xßT½Ôÿ�²¬|=ö;[émPÝ\L’6ÃŒ¨Gë]>‰÷/ÿ�ëöoçXÞ ûš÷ý†îÿ�ô:�‡í??çÇŸøqÿ�ÆèûOÄùñð§þÜñºë( Oí??çÇŸøqÿ�ÆèûOÄùñð§þÜñºë+_Õõ 2ãK·Óôûk¹/îÜy÷M�B"ys‘çˆØ}qëÀoÚ~$Ï…?ð.ãÿ�ÑöŸ‰óãáOü ¸ÿ�ãub/ébÎÒ[Áqm5IJ@"I(YRC&ôR¹Þ ŒãvF:Óìüg¤]iú5Ôqoý­on²[I€\€ªÌjä°�’dc9Sí??çÇŸøqÿ�ÆèûOÄùñð§þÜñºwü%wÐê×ÜéP&Ÿk©E§5Ìw…äß*Äco,ÆÓç 8bAÏP3RÙxÿ�ÃZ•ãZXj^N³Y-­f—k¤•Bó÷Ëï@}§âGüøøSÿ�î?øÝiø‘ÿ�>>ÿ�À»þ7Wƺù>\·’ ÜÇ G§Ü2ÌBùL8*¬AŒÔ'Çš1Ä×WEæùì¤YÜTŠS³Ÿ,lÚ@Ý»sÔŒÚ~$Ï…?ð.ãÿ�ÑöŸ‰óãáOü ¸ÿ�ãucOñÆ ˆµÌ—·Ù-¬ + š%,Ûv¨fRq9^ ©¥kVZÔrIbgd™¥¶’!¹Y‘€Þ£$20 tÇ=E�aý§âGüøøSÿ�î?øÝiø‘ÿ�>>ÿ�À»þ7]eÉý§âGüøøSÿ�î?øÝT»×¼w¥ÜX-öŸáÃåÒÚ¡‚êrC²±æ1ÇËÍvõÌø¿ý†¿ì5þƒ%�cêüBþÚÒ<Ë? |É| ·wIòÎw~ïÓ=+SÍø“ÿ�>^ÿ�ÀËþ5[:§üŒýu›ÿ�E5lP-á={XÔõ=sLÖílaºÒåŠ2ÖR;£ïŒIü@ÞµÔ×áùüuÿ�_VúKv4�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÇOã«“¬jZ~ámWQþϘA4Ð<!w Æç£ÔÂe­ÿ�Ð…®ßÛþ9Gƒäfñ¯ý…Sÿ�Iâ®Æ€8ïøLµ¿úµÏûûoÿ�Ç(ÿ�„Ë[ÿ�¡ \ÿ�¿¶ÿ�ür»(Žÿ�„Ë[ÿ�¡ \ÿ�¿¶ÿ�ürøLµ¿úµßûûoÿ�Ç+±¢€9Tñ† È¬Þ ñ$rÛY‡ò§Â_}ÿ�BW‰?ï›_þ?]EÃi+½E¼Áþ!p×’±*¶ß.OCûî£Ú®x3îkßö»ÿ�ÐëgDû—ÿ�õû7ó¬o}Í{þÃwú�tÔQE�™«h6ÛZµè¹ÝjæHZ ¹`(ÅJ“˜ÙOÝ$sØŸSZtP3øSEt·ŒÚ2ÇoåùH“Ȫ¦7óà63¿œõ=óQ§ƒôHím-–Ú&ÍbXÝÌDb7Þ˜Ëÿ� `@nÑ@±øSGV“SN×2Oö–ó.åxüÜå³ ��8�Ò™ƒôH<‘½ÂG ÇÚcˆ^M夛·p›öíÜ3·sÎ+vŠ�Á·ðv‹jöfn‘læóí£ûtæ8_i_• í¸Æ äÖ}×€,n5+óXivñܬ–M$ÌÓ´ò,’“Íɬ¶zŒuÔPx?CŽøÞ-¬¢c9¸#íR”gó ¹)»iFg�Œ+1 M_Ò´‹=Õí¬RU‰åy˜I;ÊK¹ÜÇ.Iä’~¤žõzŠ�(¢Š�+™ñúÿ� ØjýJé«™ñúÿ� ØjýJ�ÕÕ?ä`пë¬ßú)«b±õOù4/úë7þŠjØ ;Âÿ�ò?øëþ¾¬ÿ�ô–:ìkŽð¿üþ:ÿ�¯«?ý%Ž»�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ã¼ÿ�#7ì*ŸúOv5Çx7þFoÿ�ØU?ôž*ìh�¢Š(�¢Š(�¢Š(/Dû—ÿ�õû7ó®;LðÆ¿=α>ã: uK—û:XA(R\ÿ�©5ØèŸrÿ�þ¿fþu†ÿ�Ôjö¸ÿ�ÐÍ�aÿ�Â)âïú(wø*µÿ�âhÿ�„SÅßôPîÿ�ðUkÿ�Ä×k\þ»â¸ô-NÚÁ´»ë¹n yÑ xpŒªÃ2ÊœæDàuÝÆyÀWü"ž.ÿ�¢‡wÿ�‚«_þ&øE<]ÿ�Eïÿ�V¿üMnÏâ½ÎA þ³§ØÝlö×WQÇ,`®ï™KqÇ?…:ßÅ»™á¶×tÉåD2:Ew2¨,@9ÀÐü"ž.ÿ�¢‡wÿ�‚«_þ&øE<]ÿ�Eïÿ�V¿üMtO‰t]nÚ ´ýNÖo>4‘cYWx PW9ån÷O¡ªÆVÑê—V—:uý´·‹e%ô¾W%eFAÖ„‰‚T °Š�Îÿ�„SÅßôPîÿ�ðUkÿ�ÄÑÿ�§‹¿è¡Ýÿ�àª×ÿ�‰­¶ño‡À±eÖ,¥Žúv·‚X§WFuRÄn±õ w·ž'Ó ðÕî¿i2êv6q¼²5„±Ëƒ-ƒ¸.@ÉÆ{Pü"ž.ÿ�¢‡wÿ�‚«_þ&øE<]ÿ�Eïÿ�V¿üMlÛø¦ÀÇvu%}K@<zŒ‘¦Å|„mÊ섬ª‘SxyRå릵 \1»“Ó?.}èþOÑC»ÿ�ÁU¯ÿ�Gü"ž.ÿ�¢‡wÿ�‚«_þ&¶gñ‡!\ÿ�néŽ|ÅŒ¨½„IPz°é¸:ã $€I|cáÈôÿ�·®·a5¨ž;s,7 "«È@PH8sì2z �Æÿ�„SÅßôPîÿ�ðUkÿ�ÄÑÿ�§‹¿è¡Ýÿ�àª×ÿ�‰­æñ_‡Úþ”0ì‡7‘ðÊ2ïP9#µkÐÿ�§‹¿è¡Ýÿ�àª×ÿ�‰ª7¾×­õ]mOÅל ©F±‚!¸+w ×ó¯C¬mý~‹ÿ�aÿ�ЀTÿ�‘ƒBÿ�®³覭ŠÇÕ?ä`пë¬ßú)«b€8ï ÿ�Èÿ�ã¯úú³ÿ�ÒXë±®;Âÿ�ò?øëþ¾¬ÿ�ô–:ìh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ŽðoüŒÞ5ÿ�°ªé<UØ×àßù¼kÿ�aTÿ�Òx«± Š( Š( Š(  ½î_ÿ�×ìß΢ðßúCþÂ7ú©tO¹ÿ�_³:‹Ãê5ûÜèf€6k\ð²ëz”ßÚ×örCÛªÛ¤ ¥]‘Ø‘$oÎcžÛF1Îwè RçÀ°ÜêöÚŸö欗VÉ FÀÀÿ�ê’T$O)$÷nØÏð§€eеi&º»’[KIÑôØ„ÊÜ-²Û“)ß±{1_›¦FOwE�ršƒ×HÕ­ffÁ§X­”¯&e’0<ÐTù•HÉ!ÎyÎ_?‚`¹½¾ž]cThï.EãÛæLªªŽ1ïG�’2 MuP/ÿ�5š!òu-FMïÛ„¨bܲ}Ÿì猌ϧ^A!ðeŸöµ¤‹ëÕ‡W'íõÌIù02ˆ õ8Åt”P'¨|?Óµ{áÔïoon&–)îq ?î·l]ž_–To”¡qÍ8øÔF-SQ„G:Oj"ªÚ²«¯îÓËÙ‚$`wÏ‚ºª(—ŸÁÀÛßìÕ/¦’êö @¤†V–žZåbùPùQg�Ÿ—ާ9Þø~Ö^†ÇR¿ŸûGʳGžÝÑ„e}ñóC üÊO$p w4P%eà +í>êSRÝ`ÑùÆ¢8ÒDHÏîòT,ÒŒçqßË:Ú( ±µÿ�õú/ý„Sÿ�@zÙ¬mý~‹ÿ�aÿ�ЀTÿ�‘ƒBÿ�®³覭ŠÇÕ?ä`пë¬ßú)«b€8ï ÿ�Èÿ�ã¯úú³ÿ�ÒX뱯2°ð†…âˆ~5“T±óÚ+›P‡ÎuÆmŸºÃ½o¯ðwýÿ�òfoþ.€:ú+ÿ�…_àïúÿ�äÌßü]ð«üÿ�@ü™›ÿ�‹ ¾Šä?áWø;þ€ÿ�ù37ÿ�Gü*ÿ�Ðÿ�&fÿ�âècÅZÞá=_S±ò~Óei%Ê Ð²6Å-‚ëÆ È›ÄZƃ©‹ ^Ö=U¦·iíßJ·17Êè¬$ªæ)Ü\ Zø7A·Ð¯4Xlš=>ð<Kq .nݸ88<Št>ÑaŠT\HÒ˜ËÍ5äÒËû¶€HÎ\�ÀŠ�¡qãUYô—³Òo¯¬õ-2MEÝPÈ|¬ …ÿ�–£>„ŽÛˆ“Pñ<’|?ÔüE¥F±Ïioq"Åx›€x Fø<£ «ÜdU¶ð~†Ö6vFÖ_³ÙÛIg ©F!�Ñ“»,¸UàçF1RŸ i-¡Ýè­ ÆÂñ¤iã7R’æF,ÿ�6íÀ1$O©  k¿^ø^âá|O-œÖÉe%äw6P4Gñ£##;òL©ƒ»ž˜©t¯éšÌÖQØÚÝÊ·$¯šl©a&‚¤þïxÁ8a›ñø?CK[»w´’å/#ò§k»™n$t|ŒÌ�<€šwü"šI{Gt»Ú²´~môî +nRᜉnAlãÐPzøæa²š Wš;ùLvŒ©$̬»¤+"¶;ä`ÅR‡âÃd³j:=ú’/¦s ÆVm® N_2gr‚…¶ä¹é[1x7Cƒì^L1­Á¹¶E½œ,NA.ümÁ#n6á˜cæ„¿t‰/­yß`.¼ËG¸™ü×ãw,æL•Ì|¡ÊÄ‘@‹|©µÑu¦]$ZeäV‘:Ûí/"ÄQnÈbÒ¨ç ¹9Ü¥øÊ_Rk]#Sß_9ÜD¼±ß¼ÏÊðH‡�ò8È Ö„þÒîPymÝŽ Q®GŸ È+¨ „p>eÁùWž3K𾑣_½í„E<ˆ›©]YCåYˆ-¹˜îÆIv9Ë€sÏâmz/ÞÚ´š{YÛê°XˆþÃ2‰î3ù…7vüÄ�1¸Uˆ<l,´tŸW…¦¸Y¯ÄÆÊ,$pZÎÑ<Ä;ä( �³e¸¶ ð~ˆ5i56·¸{‰.Ó‰/&xŒÀ�¯å)¸PÞ6Œc˜< }‘-ZÎW‰&’l=ÜÌIî1-–F<²©<h§‰<Y6Ÿa¯ 2ÖGºÒ¬å®f‡}²È‘¬¾SaÃn(ÊGnz’1[:&·gâ }§·™jddIw)m$0NAëƒíUïü'£jrßÉso1:„BµŽêXÖe2«œ gÇÇ&‹á½/ÃÍxÚl2Æo%ó§2\É.÷þ÷ÎÇé×J�Ö¢Š(�¢Š(�¢ŠË±ñ.ƒª]›M?[ÓnîFs ½ÚHã~PI  J)•Y‚Œ’qÉ8­-�U?ím;ûOû3ûB×ûCnÿ�²ùËæíë™Î? –ÚöÖðÌ-naœÁ)†o*@Þ\ƒ£c£ Ž<ÐôS!š+˜#ž RXePñÈŒ]HÈ Ž#½8²©PÌc…õ8Ï€4�´QE�QE�QE�qÞ ÿ�‘›Æ¿öOý'Š»ã¼ÿ�#7ì*ŸúOv4�QE�QE�QE—¢}Ëÿ�úý›ùÖ6‹áí6óûNyâ˜ÈÚÎJÜÈ£ïžÁ€­î_ÿ�×ìß΢ðßúCþÂ7ú þ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â«f¸ùßð’iûNº-þÃ7›ö}åó"ÙŸ³ß?öÏj�é¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*¹]CÄþ$´Öíl¬-&]1á·Ì÷:%Ý̱ŠRw´m†*É8ï/'å&£ð·Œ<U®j¢ÒêÎH";…eÄdfµI²îï´‘#ù{8b0Ü �ë¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*¹ïë~%º“G²Ôã†A&›×2½»Ã4R¨Ä‘ȬÙÜKFAÀo c›q6¡oâb{ñ^Gª£À²¥ÛÚ›AF`¿vFï?h_˜¶Ý¼b€;?øEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š®Yµÿ�즸·xþϪ4WßI¸a<ÕXG¸°C°œŸ˜p2 ·š–¿¨|>ñ:Þ[]Ū[ÆñÙɧ[\@ó1‰Z6EÉ~$b§”ç"€:OøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š®BãTñ‘§jW>±Ô.ìÌ–Él5ˆ®¤xØ—óŸc; V Éb8e¼Oâ¸à¸2Y&ô¸Ž6x´k§Hƒ’Ànq‚¨Å\oœ@7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅW/q¯x¦hîÂF¸ƒS¶·‹þ$—‰æÄæ"ÒçÌjf]݈@`ÓÓüUâÍs ©¤+—Ó§Ûésá’IÏEŒ±i. uá”0F@iÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñUÊZx§Å÷7Öòiën·2,sHú5Ñ[fhä%IÞu‰L™ â\Œm5è”ÿ�®‘ÿ�<n?ð.oþ*³5MN²¾Ñ&·Žej)Ë\ÈÃî?bÄWYXÚÿ�úýþÂ)ÿ� =�.©ÿ�#…ÿ�]fÿ�ÑM[ªÈÁ¡×Y¿ôSVÅ�qÞÿ�‘ÿ�Ç_õõgÿ�¤±×c\w…ÿ�äñ×ý}Yÿ�é,uØÐEPEPEPEPEPEPEPEPEPEPEP^{c¥ë–öº}LJ¦²h5©u}q4G»yö Gf,ÈÛ O&½ Š�óKïë÷V¶’ÛX¸´7Vw0Õ÷1^3K±¼ÅØZ,ªüŠìÃqÞðµ–³c®j«{£ö Q¼½[Þ e GÌJ†C �(u·[E�qغŸý›ý›òÿ�lÿ�iÿ�jy‘íÙçù»qûö~ëîão~Õ^âÆóIñ†©«Ý«=îMÍÕßÛ6Àöÿ�cH¶ùjÛ„‚U ¿h¯ÞçßÑ@Kà­/ÄÃ\³¸µ¿¹o Ã4ée‰L±›ešuTmÒ‚A_,«ìs€¸eVÛ@Ö¥·ÐgÔmuyom5A5èþÓlÁ$m$Xb"åaÁ�° ‚AôZ(�¬ík]Óü=b·š”²G8Œà’S¸‚~ê)=8­(Žÿ�…£á/ùý½ÿ�ÁU×ÿ�£þ„¿çö÷ÿ�W_üj»(Žÿ�…£á/ùý½ÿ�ÁU×ÿ�£þ„¿çö÷ÿ�W_üj»(ƒøw©Zêú¯‹ïìÞÚmQJ3ÆÑ“ˆ#«�G#¸®ò¸ïÿ�ÈÍã_û §þ“Å]�QE�QE�QE�eèŸrÿ�þ¿fþu†ÿ�Ôjö¸ÿ�ÐÍK¢}Ëÿ�úý›ùÖ>â=O:•½î³§[NºÆcšé‡Î{š�ë(¬_øKü3ÿ�C‘ÿ�±ÿ�ñTÂ_áŸú´ü ÿ�Š  ª«k¦ØXÏs=¥•µ¼×O¾âH¢Ti[Õˆ1äò}k?þÿ� ÿ�ÐŤàlüUð—øgþ†-#ÿ�cÿ�â¨R+;Xng¹ŠÚî.6ùÒª�Òm]Ç©Ààg¥MX¿ð—øgþ†-#ÿ�cÿ�â¨ÿ�„¿Ã?ô1iøÿ�@TV/ü%þÿ�¡‹Hÿ�ÀØÿ�øª?á/ðÏý ZGþÇÿ�ÅPÕ‹ÿ� †èbÒ?ð6?þ*øKü3ÿ�C‘ÿ�±ÿ�ñT¯,QÜBðÍIŠUÑÔe<Aê*;;+]:Ò;K+hm­£H`Œ"(ÎxQÀ¬ÏøKü3ÿ�C‘ÿ�±ÿ�ñTÂ_áŸú´ü ÿ�Š  ª+þÿ� ÿ�ÐŤàlüUð—øgþ†-#ÿ�cÿ�â¨j±µÿ�õú/ý„Sÿ�@zOøKü3ÿ�C‘ÿ�±ÿ�ñU©ø‡EÔoô[{cOº˜ê |¸.QÛœš�ÓÕ?ä`пë¬ßú)«b±õOù4/úë7þŠjØ ;Âÿ�ò?øëþ¾¬ÿ�ô–:ìkŽð¿üþ:ÿ�¯«?ý%Ž»�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ã¼ÿ�#7ì*ŸúOv5Çx7þFoÿ�ØU?ôž*ìh�¢Š(�¢Š(�¢Š(/Dû—ÿ�õû7ó¬ÝHÓ.—RšãN´šS¨ÜeäXŸœ÷"´´O¹ÿ�_³:‹Ãê5ûÜèf€,`hßô°ÿ�Àdÿ� ?°4oúXà2…h×›ø¥OÝ;/‰Õ`µ(–Bÿ�Ëi3/™åùGÊÎ<Œïùz÷Í�vÿ�Ø7ý,?ð?Âì þø Ÿá\6±âÿ�Ykµ½žæÛ[‰Í£a^?œÈ‘2&õm¿9yP71g£LƒÅ>,Ö4_‹X‘¥‚Öø[Oo¦OY¡•£W{#8á~á ô óûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+/@Õõ‹ýjöÒí-^ÎÒXîb…â.F£1(êË.àyg|×!¦Üêö{gÓÄ-t·—‚äjp^MÙÌ’‹}©!<Áþ¬—qj�ô?ì þø ŸáGöÿ�@‹üOð®8ëþ,2é·[¼;í%Òn$C:L‰ r«&\dã†I ‰ukýOQð-¬ú…¶©o|º¤QNºd7Q;D—[]ÂÇ™4!›©ûÜPYý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€ÉþÅ>¯â½.ÎÝ4>k›;I’uX®$–+m‰áTÈ “Ìœp6î«x›Å ¨–Ø'™q$RÜaÝhBFy ¹Çšp ¡ùpA ·ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+€Õü[â»=�j·ÛÍzZ94{¸Uc†9Ù$rek¸Ëäd¯.üAâöÒìï­¬ÚW‹Q–3i“Çö¸¾Ìì„ÆÌ^%2â=ÍÆv·Ýà€vØ7ý,?ð?Âì þø Ÿá\¾â/_x†ÚÆ{uK'YÝ6‹sp¾Q}ÿ�vX4Êg˜ƒr îh;ûFÿ� E‡þ'øV^¯¤é¶—š,¶Ú}¤2h ß*§î?p+¥¬mý~‹ÿ�aÿ�ЀTÿ�‘ƒBÿ�®³覭ŠÇÕ?ä`пë¬ßú)«b€8ï ÿ�Èÿ�ã¯úú³ÿ�ÒXë±®;Âÿ�ò?øëþ¾¬ÿ�ô–:ìh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ŽðoüŒÞ5ÿ�°ªé<UØ×àßù¼kÿ�aTÿ�Òx«± Š( Š( Š(  ½î_ÿ�×ìß΢ðßúCþÂ7ú©tO¹ÿ�_³:ÌÒµXtÓ¨Auk©+›ùÜlÓ®$VRä‚P‚± žŠÈÿ�„–Çþxj¿ø)ºÿ�ãtÂKcÿ�<5_üÝñº�ת¶m†—A§Ù[YÂÎ\ÇoÆ¥S€'Ö©ÂKcÿ�<5_üÝñº?á%±ÿ�ž¯þ n¿øÝ�hÛÙÚÙù¿f¶†:C,¾RÞç«6:±îO55dÂKcÿ�<5_üÝñº?á%±ÿ�ž¯þ n¿øÝ�kÑYð’Øÿ�Ï Wÿ�7_ünøIl熫ÿ�‚›¯þ7@ôVGü$¶?óÃUÿ�ÁM×ÿ�£þ[ùáªÿ�à¦ëÿ�Ð…å•®£i%¥í´76Ò <3Æg<©àÔ‘E¼) 1¤qF¡Q@UQÀ�‚²ÿ�á%±ÿ�ž¯þ n¿øÝð’Øÿ�Ï Wÿ�7_ün€5è¬øIl熫ÿ�‚›¯þ7Gü$¶?óÃUÿ�ÁM×ÿ�  zÆ×ÿ�×è¿öOýéßð’Øÿ�Ï Wÿ�7_ün³µ=Z û­)míµ#å^‰di4ëˆÕP#ä–d¸  SþF þºÍÿ�¢š¶+Ï5/‰msIqww¶ eóömχ»çŸJÒÿ�…£á/ùý½ÿ�ÁU×ÿ� Âÿ�ò?øëþ¾¬ÿ�ô–:ìk„ð&¡o¬x«ÆZ—šÖwVÞT’BñÛnŠ~W�õµwt�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÇx7þFoÿ�ØU?ôž*ìkŽðoüŒÞ5ÿ�°ªé<UØÐEPE›âIô_ 꺬q¬’YYÍr¨ÇŠ!`·¥Eqwÿ�¯l­îã°ð¨ŽxÖE wqdg÷}y©¼ß‰?óåáOü ¸ÿ�ãT»¢}Ëÿ�úý›ùÖ¥yö•/ÄM—žMŸ…Ïú\»·ÝÜ}ìóŒGÒŸa­xïV—Pk8¼96·’Ú7žX”8'#¯éô úŠã¼Ïˆ¾žÿ�ÉŠ<ψ¾žÿ�ÉŠ�ìh®;Ìø‹éáoü˜£Ìø‹éáoü˜ ÆŠã¼Ïˆ¾žÿ�ÉŠ<ψ¾žÿ�ÉŠ�ìh®;Ìø‹éáoü˜£Ìø‹éáoü˜ ÆŠã¼Ïˆ¾žÿ�ÉŠ<ψ¾žÿ�ÉŠ�ìh®;Ìø‹éáoü˜£Ìø‹éáoü˜ ÆŠã¼Ïˆ¾žÿ�ÉŠ<ψ¾žÿ�ÉŠ�ìh®;Ìø‹éáoü˜ªók^4Òµ)uH´´½½ŽÑþËço]ÀœÜ �t:§üŒýu›ÿ�E5lV>©ÿ�#…ÿ�]fÿ�ÑM[�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÇx7þFoÿ�ØU?ôž*ìkŽðoüŒÞ5ÿ�°ªé<UØÐEP\ÿ�Žÿ�äžx—þÁW_ú)« ®ÇòO<Kÿ�`«¯ýÔ@ÿ�‘oKÿ�¯H¿ôZ5 È·¥ÿ�פ_ú�­�ËÑ>åÿ�ý~ÍüëÁŸs^ÿ�°Ýßþ‡[:'Ü¿ÿ�¯Ù¿cx3îkßö»ÿ�Ð覢Š(�¢Š(�¢³¡×ôkIôØu{ oЕ{T¹F•Hê ‘¥hU*€,p ž§ãð€Š‚òò×O´’êöækhÆ^i¤Š:rO©Yx›AÔ¥Ž+ oMº’V+Aw— n �y sô  J(¢€ ) *• À8POSŒñøK@Q@s>/ÿ�_á¯û Aÿ� É]5s>/ÿ�_á¯û Aÿ� É@º§üŒýu›ÿ�E5lV>©ÿ�#…ÿ�]fÿ�ÑM[�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÇx7þFoÿ�ØU?ôž*ìk˜Ô¾øGWÔ§Ô5 Öâîr ’¾ì±�_@*¯ü*Ÿÿ�еeù7øÐc^yñ;â\Ÿ§ÑˆÓúï;Ìc.͘ÁÁþùíÚ´¿áTøþ…«/ɿƼ÷âoÁ“¨ÜhÑx+D´µQç}²_4"¹³99?ÇÐ�è´O~ Õv%ä·Z\§‚.bÜ™ödÏçÑx£[Òµ¯†Þ%›KÔ­/cþɺ;­æWÇî›®æìØ××õâ½ „û;ÿ�ñ5Öêÿ� ¼!áoø†çOÒ•®ãÒ®ŠÜÜ9‘Áò›‘žú@ È·¥ÿ�פ_ú�­ÎÐ?ä[Òÿ�ëÒ/ý�V�eèŸrÿ�þ¿fþuàϹ¯Ønïÿ�C­î_ÿ�×ìßα¼÷5ïû Ýÿ�ètÓQE�QEÃ^øk_»¾Õ@LŽÞçS‹Q‚qu'š¦(âULÆÍƹƒ+°�õ¨á×Ö+BnÖæK-LÝ[¬ú¥ÆDMlc*dÚX‘),3Ÿ”•ÈŠïè ,øk]ÿ�„+ÄZ$—Q\Ë~’Ef×W’Ëå$ª0ge-ÃoaרvŠMÅ7—v²H4ÛAÔ— *ÞÉq*·š!‚Ñ.à ª@8ÀSÉÏÍåËàŸEk§ ÖgžXgiµû•ó[Ή±”ˆ|»Uä<Þ§`«Éá?›9æÕåû-©¸Ým¯2ùŠÒ3FCi0„GÎÛ¸6x¯C¢€<ïEð‰íÿ�²µîâ»m?PŠèHu[‰”Ú˜¥dòÓ÷NAËò޾‰E�QE�W3âÿ�õþÿ�°Ôú •ÓW3âÿ�õþÿ�°Ôú ”«ªÈÁ¡×Y¿ôSVÅcêŸò0h_õÖoýÕ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ�ÿ�É<ñ/ý‚®¿ôSPýþE½/þ½"ÿ�Ðh×1¡x£ÃÑøMG×tÅuµˆ2µÜ`ƒ°py­øJü9ÿ�Aý+ÿ�#ÿ��~‰÷/ÿ�ëöoçXÞ ûš÷ý†îÿ�ô:“Fñ>€«z\ÓkÉJƒw žæ²ü-¯hö/¯Áy«XÛÊ5«²cšá±¿Ðš�í¨¬øJ¼;ÿ�Aí/ÿ�#ÿ�?á*ðïý´¿ü üh^ŠÈÿ�„«Ã¿ôÒÿ�ð2?ñ£þ¯ÿ�Ð{Kÿ�ÀÈÿ�Æ€5è¬øJ¼;ÿ�Aí/ÿ�#ÿ�?á*ðïý´¿ü üh^ŠÈÿ�„«Ã¿ôÒÿ�ð2?ñ£þ¯ÿ�Ð{Kÿ�ÀÈÿ�Æ€5è¬øJ¼;ÿ�Aí/ÿ�#ÿ�?á*ðïý´¿ü üh^ŠÈÿ�„«Ã¿ôÒÿ�ð2?ñ£þ¯ÿ�Ð{Kÿ�ÀÈÿ�Æ€5è¬øJ¼;ÿ�Aí/ÿ�#ÿ�?á*ðïý´¿ü üh^¹Ÿÿ�¯ð×ý† ÿ�Ðd«ÿ�ð•xwþƒÚ_þGþ5ƒâMsIÔ/¼5–©es/öÌ-åÃpŽØÚüà�é5Où4/úë7þŠjج}SþF þºÍÿ�¢š¶(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¦KsÄñKÉ©WG ÜSè  ááý�§€:³'øQý£Ð"Ãÿ�“ü+FŠ�æô] He¾-¥X’/e6éÀÏÒ´'ðÞ…s;Ï>‹§K4‡sÉ%ª31õ$ŽM'Ü¿ÿ�¯Ù¿jPGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯E�dÂ)áÏú�i_øøQÿ�§‡?è¥àáZôPGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯E�dÂ)áÏú�i_øøQÿ�§‡?è¥àáZôPGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯E�dÂ)áÏú�i_øøQÿ�§‡?è¥àáZôPGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯E�dÂ)áÏú�i_øøSàðÞ…kqž‹¦Å4grIª+)õ ƒZ”P>©ÿ�#…ÿ�]fÿ�ÑM[ªÈÁ¡×Y¿ôSVÅ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�eèŸrÿ�þ¿fþu©Yz'Ü¿ÿ�¯Ù¿jPEPEPEP[Ùo"XM´s–™PòìÙ?3HãŒúÕªÌÖšÑb²û\·q{ŒÛËI»å ·ø àçŒu­:�(¢Š�(¢Š�(¢Š�(¢Š�ÇÕ?ä`пë¬ßú)«b±õOù4/úë7þŠjØ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ½î_ÿ�×ìßε+ }fÊK¥‚ "–áåRóº¶ô !©üÍ{þ}4ßü “ÿ�Ð¥—ækßóé¦ÿ�àLŸün3^ÿ�ŸM7ÿ�dÿ�ãt©Eeùš÷üúi¿ø'ÿ�£Ì׿çÓMÿ�À™?øÝ�jQY~f½ÿ�>šoþÉÿ�Æèó5ïùôÓð&Oþ7@”V_™¯Ϧ›ÿ�2ñº<Í{þ}4ßü “ÿ�Ð¥—ækßóé¦ÿ�àLŸün3^ÿ�ŸM7ÿ�dÿ�ãt©Eeùš÷üúi¿ø'ÿ�£Ì׿çÓMÿ�À™?øÝ�jQY~f½ÿ�>šoþÉÿ�Æèó5ïùôÓð&Oþ7@”V_™¯Ϧ›ÿ�2ñº<Í{þ}4ßü “ÿ�Ðz§üŒýu›ÿ�E5lV!´Õnµm>æê;(âµgcåLÌÇrèTzÖÝ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Fundmtlsq2.jpg�����������������������������������������0000664�0000000�0000000�00000021774�15030617045�0023646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��½"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¬Í__Óô6µ[ãs¾éÌp-½œ· ì±Xçh'è¡  :*ž™ªÙkBîÂq4%Š“‚¥XuVRR=§Šæäž8¥WxË”÷hl|2ŸÆ€%¢³5}OÐÚÕoÎû§1À¶örÜ3°RÄb5c Ÿ >†§Ó5[-bÈ]ØN&„±RpT«ªÊ@*G¡�ÐÊ(¨/o Óìn/n¤òííâie|µdœO�ô  è œ šŠÚâËXnmäY`™HäSÊFAÄ�–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*†¯¬ÙhVkw~Ó,-*B 6òLÅÜíQµžI�qÔÜPú+?JÖôýj9ZÆff…¶K±<RFÞŒŽ/â*ÚÜÂ÷RZ¬ªgGŒUX°R~¥[ò4-STÔí4m2çR¾‘£´¶C$®±³•QÔáA8Ok.?è¯ šþ2Å[6æšVØŸ~1Án3Ð2FE�oÑE�QEEos ÜFKyVDñ–S‘¹X«Á…�KEPEPEPEPEPEPEPEPEPEPEPEPX$±Õî¯4K& šÂíîdK»—„00É�¬oÿ�=Iéü>üoÑ@{yà}Râú[ËÒßT{ô¾•Œ² €«Ûü‘§†ŽVl)%½2 ^!øyq©ÜkòÚXhÞv¡?Ÿou+ºÉ6¢ pË*ämnO£Ñ@ïˆ,µ»¹ô+­:ÛO’k ¦¹š+‹·I0IÕe‰³þ´œ>èãž9|>Ö5ËD‘ïm’â{ù//-¡}‘|ЬK±Ú9>dm€î$§zMç’øTjÂÚ--ÞË,Œò]°™$+1‚•YXeø|(P6š«ðâS xžÈhZ¼ú‚ÓŠNò pÐÇÆ F aÁ�äžØÉôÚ(δ \Ïã­OP›J²´·[ó,Òí}×ì£Gr€<FBÌ[<²r½éðÿ�Qÿ�„KCÒc‹J†[ I-Ÿc°D•‚x˜A™”£0doŸ¹ôŠ(Î#ø} ðô¶òhz¿þКt 1´-$’"±0vù¥B”aò‚0q·½Ó`šÛK´‚àÄgŠI<Bn Ú g¦jÕ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V'Ь5KHŠ .;W¸KÛkŒ]LÑ¡X¦Iq•F9;�éß=°vè 6ëÂ×Ú¼zÞ«i¥ËuxmSì^c½¸Žfù˜¨ÞÄHýSnBd+>ÇÀ·ÑÛ¿Ûlô‹›©<?šó¼²3Eæ –¤›£ÝÈ?&0Üô*(Œ_ j‘ü6Õ¼7X¥ÍÊ^ClÌ"Ž)ÊDcñ€¸ùF0n4?\E4BÓG†)/íoŠ>§<ì^)bsó´ ˆ@ ƒÇœ�+½¢€<Š×áf­m«Ãyvšf¬©w,²‹Ùð·É2Ê-É ™FK3çËQœ�—á·ˆ[D{ø”ÚæÛOŽQåÖòKrûÚPðùï%_ýZäÓÖè 1o‡Ú´Ð\ÛZéSËzjÅuuvÆpm¥.ä°‡’ÈÞVxʨÈç>Ÿà ½7_KÛ}/C@º„³ý¤92yM;È0žWÂ|®>êä°G£Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Euq¤×2’#†6‘ð2pMKYÚÿ�ü‹z§ýzKÿ� �¥oâcumÄZ®ÑÊÐùIÈ##øê_íùè«ÿ�ߨÿ�øº± È·¥ÿ�פ_ú�­�Æþß—þ€:¿ýúÿ�‹£û~_ú�êÿ�÷ê?þ.¶h  oíùè«ÿ�ߨÿ�øº?·åÿ� ¯ÿ�~£ÿ�âêüZ¼Ú¥ÎœŒßi¶Š9¤R¤ ’ AèyúzUª�Æþß—þ€:¿ýúÿ�‹£û~_ú�êÿ�÷ê?þ.´.oíìîl­ær²^Ja€'s„iÏo•óéQ]jÖvz…½ŒÒ8¸¸F’5³eCƇ?½*~=4Sû~_ú�êÿ�÷ê?þ.íùè«ÿ�ߨÿ�øºÙ¢€1¿·åÿ� ¯ÿ�~£ÿ�âèþß—þ€:¿ýúÿ�‹­Y'Ž)!ÉÝ3L)<í-Î: )äñÐu"¤  oíùè«ÿ�ߨÿ�øº‚?ù·S[&‰«™a ξRp8þ?c]cXÈ׬ÿ�×oå%�Ûòÿ�ÐWÿ�¿Qÿ�ñtoËÿ�@_þýGÿ�ÅÖͦëêSÜ@-nm¦·Ú^;„ pÙÁ$v5£XÖò5ë?õÆÛùI[4�QE�QE�QE�QE�QE�U]Jþ-/M¸¾]¢ ²Æ2Ç€õ«Uâßù5/ú☠û~_ú�êÿ�÷ê?þ.íùè«ÿ�ߨÿ�øºÙªºŽ£o¥ÙµÕ×›å/Q +¢ ,}x�Pþß—þ€:¿ýúÿ�‹£û~_ú�êÿ�÷ê?þ.´í.࿲‚òÖU–Þâ5–)££ ‚> Šš€3´Ýb=J{ˆ­Í´ÖûKÇpN8#ŽÆ®]\Ggi5̤ˆá¤| œ“Yvò5ë?õÆÛùIV5ÿ�ùõOúô—ÿ�@4JßÄÆêÚ+ˆ´=]£•¡ò“FGñÔ¿Ûòÿ�ÐWÿ�¿Qÿ�ñtÝ7S°Ó|7£ûëk_:ÞâóåTÞÅʹ<ŸaZ6Ú•…êÎÖ·¶Ó­»˜æ1J¬#aÕ[‚= �Pþß—þ€:¿ýúÿ�‹£û~_ú�êÿ�÷ê?þ.µ-®`½´†êÚT–ÞdY"‘UÔŒ‚¡–Kˆb–(¤š4’f+³�\€X…Î<v€2¿·åÿ� ¯ÿ�~£ÿ�âéÄKö«h'Òõo´Iå$“F»w`ú±ÿ� ‹ÿ�A?ýÙãå?×Ï>¿ýžµ¿þ¿Eÿ�°Šè@4QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�¯ÿ�È·ªפ¿ú­£¬Ã%Æ…¨A –Kic,ÅHš�fÿ�"Þ—ÿ�^‘è´kšÒµ{›=ÆÚ]Vó!·Ž7Äq‘ ãö«ŸÛòÿ�ÐWÿ�¿Qÿ�ñt'‰t™uï j:D71Û=ì $>h@Ü·räã8烃Î1\v¡ð´ÞkßEy¥[¤åD.“òÊ‚X¥ ø”oæ"¹?Ã# ë·åÿ� ¯ÿ�~£ÿ�âèþß—þ€:¿ýúÿ�‹ {Kð톥¦]Ük—ÙöÖ–¨§·1À² ÜÊq!2’/Lš­«|1mK^»ÔÒûM…n\a:^á* ¢—l„H7œÄT’>ìŒ+ªþß—þ€:¿ýúÿ�‹£û~_ú�êÿ�÷ê?þ.€9í#áÐÒï´kù5notÖŒ ‡´!Ú$µ6þX;ÎÕ9ó1Ï͓߷Ÿ –}z-ZÞúÞ+tÓÏ$–[å˜}¦+…RûÇÝ0„SޱŽõÑÿ�oËÿ�@_þýGÿ�ÅÑý¿/ý�uûõÿ�@T¿ dšK¹N«aÅÔé9¹‹K+,N·2NZ6ó~RD¾^yùUEK§´JÚêVP¦›'}†WÃùÑJJ—™säíêx’Oï`vÛòÿ�ÐWÿ�¿Qÿ�ñtoËÿ�@_þýGÿ�ÅÐ+{ðÅ®´›=>ý6Ò+mE¯¶Á¥�²f=yŸ8 ä’\qÀÍKátš…–—huK1‚8 úya—¸IˆLJ6( å…Â3 ó]oöü¿ôÕÿ�ïÔü]Ûòÿ�ÐWÿ�¿Qÿ�ñt7‡ôŸì=ÛNÍ©òwÇ¥¨·‹–-òÆ Û×Ôç©äÔ6ò5ë?õÆÛùIGöü¿ôÕÿ�ïÔü]fÚjwqkÚ•Ûh:·•<pª~í3•ÝŸã÷Õ× ?ácãŸøEsÿ�o­ý¿/ý�uûõÿ�Göü¿ôÕÿ�ïÔü]�r–ðŸÿ�ÂGªìÿ�„kÎò ó7yûqóãýsøV¯ü\oú•òb´´cqq­j—²ØÜÚÅ*B‘‹€¡˜¨lð ã‘[´ÈÅÆÿ�©Wÿ�&(ÿ�‹ÿ�R¯þLW_E�rñq¿êUÿ�ÉŠ?âãÔ«ÿ�“×Ñ@‡ü\oú•òbø¸ßõ*ÿ�äÅuôP!ÿ�þ¥_ü˜£þ.7ýJ¿ù1]}ÈÅÆÿ�©Wÿ�&(ÿ�‹ÿ�R¯þLW_E�qWŸð³>Å?Ùÿ�áó¶›|üçcwúñëTÔøÔø/Qÿ�„±tpÞAÛö"ûú½Ÿ—=zW ÖO‰ žëÃWðÛBÓLñ‘¦2ÇÐgŠ�Öªz¤×6Ÿu­Ã`y³@Ò¨ÆÕt9Ç}ÜU/íùè«ÿ�ߨÿ�øº?·åÿ� ¯ÿ�~£ÿ�âèJƶ°·‚C xãT&¼´àcå\£ÐdãÔÔõý¿/ý�uûõÿ�Göü¿ôÕÿ�ïÔü]�ò5ë?õÆÛùIV5ÿ�ùõOúô—ÿ�@5OF7Ö©{-ͬR¤)¸ ІÏ�ž9Y†K P‚/,–Ò" ÆYŠ4Ì^øa¼Gá}aº–Öa§}™¥F\y2¢ «+nÎÕ#Oxdæç„<7y ù†õíØ¥µŒf-æ$f%|¨Ã·™Èäp95&•«ÜÙèö6Òè:·™ ¼q¾#ŒŒ…�ÿ�µ\þß—þ€:¿ýúÿ�‹ [DðÖ·¡xsKÑçÔ®MÚL±Çöi&–$€B±H ôyT66± ¹ž›ZÓõ ½_ÃóYÇlÖöqpf•ö˜dˆqýé<‘÷@ïÿ�íùè«ÿ�ߨÿ�øº?·åÿ� ¯ÿ�~£ÿ�âè‡ÿ�…s¬ž³ØéØMû׿ùúûŸëÿ�ÙéþÕwÿ�úýþÂ)ÿ� =Ûòÿ�ÐWÿ�¿Qÿ�ñuJòòëT¾Ò£GÔaX¯Y$™*¨GᨠšŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+?^$xwS à‹IpGû†€4(®cCð¿‡äðþ›$š˜ÎÖ±f´Œ’JIÅhÂ)áÏú�i_øøP½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�kÑYðŠxsþ€WþÇþÂ)áÏú�i_øøP½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�kÑYðŠxsþ€WþÇþÂ)áÏú�i_øøP½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�kÑYðŠxsþ€WþÇþÿ�Öƒÿ� ÈþÄÓ|Ÿì½þ_Ùnï7Æ:ã½�vÔVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯ErvZm†™ñ £°²¶´FÒrËK'Íê@ÖPEPEPEPEPEPEÌÚhšN¥­kó_évWR­ò yíÑØ/Ù 8É9?�tÔVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯EdÂ)áÏú�i_øøQÿ�§‡?è¥àá@ôVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯EdÂ)áÏú�i_øøQÿ�§‡?è¥àá@ôVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯EdÂ)áÏú�i_øøQÿ�§‡?è¥àá@ôVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯EdÂ)áÏú�i_øøQÿ�§‡?è¥àá@ôVGü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ¯EdÂ)áÏú�i_øøVU–›a¦|Chì,­­´œ²ÁÆ óz�u”QE�QE�QE�QE�QE�QE�QE�¯ÿ�È·ªפ¿ú­Î×ÿ�ä[Õ?ëÒ_ý�Рȷ¥ÿ�פ_ú�®{Å÷Z÷ö…¥½„.º|W3M$VòÉ$ÀÝ/˜ªPáB¢‚Ûܬ@èMt:ü‹z_ýzEÿ�  Ñ 9·ñ7Œ&ÕÄrÙ‘cû|äÑ®#, 78ʳUdŠ.Wó•Ï=ƒµmcWÓ®åÖm|‰b¹òáo±ÉkæÇå£òä%Ë2žHÊšèè Š( Š( Š( Š( ¹ßù¨ÿ�÷ÿ�ÚÕÑW;ÿ�5þáûZ€)Ÿaˆ>ñOŽ4ìÿ�ìÔŸðžÿ�Ô§â¯üöU×Ñ@kÿ� ¯üW_iÿ�„gÄŸò òü¯°|ÿ�ës»ºvÏ­mÿ�Â{ÿ�RŸŠ¿ð]ÿ�ÙUßù¨ÿ�÷ÿ�ÚÕÑP!ÿ� ïýJ~*ÿ�Áwÿ�eGü'¿õ)ø«ÿ�ßý•uôP!ÿ� ïýJ~*ÿ�Áwÿ�eGü'¿õ)ø«ÿ�ßý•uôP!ÿ� ïýJ~*ÿ�Áwÿ�eGü'¿õ)ø«ÿ�ßý•uôP!ÿ� ïýJ~*ÿ�Áwÿ�eGü'¿õ)ø«ÿ�ßý•uôP!ÿ� ïýJ~*ÿ�Áwÿ�eGü'¿õ)ø«ÿ�ßý•uôPÞüV6šÍµ€ðg‰¤ó“wxsŽ<|Šé¼7qö»­r&h7ß!òæ]®¿èÐuoVFÿ�!OØA?ôš �‡Å寉ifm,亸»º艷#äyüÌ ±aÉJ«¿s>¥áÙ­¦·m#X1‰`a1>KJàØ÷J€~láNýõ…ž§jÖ·ö]Û±¡ž1"Œ‚1Ö¡mJyÚvÓ,Úfˆ@Ò±û„ã;}ºPxfÕLjå†cg&–a,¦8ÙeŠM˵X–!÷.ãÀ]¸r kVDÞÐgÔ ú=¾2$­t*Ê̬Ip7U{óŠ× ¡»7"Ò_²ÎÓåù¤„ÝÛ8ç5Cuko}m%µÝ¼Wò ¯¨Xzx4ÄÝ|B·ÓôÍ-fÔtÙ5;›Ø­æG" !¹0»¬fF$.×ä1)9ÇÑ^ê¶¾&Óm^[hìo Æ‹å–I3Ÿ›x�\ýÖÎ1•ÈΤV–Ð[Gm ¼QÁíŽ$@1€�cŠ¡uá­ñ&Y´«2fƒìÎë «˜»&à2�ÀÀŒ P­Q@s׺¦¦ÚΫ¦ØÉe ZÙ[\Å,ð¼˜2<êAUe-þ©q‚>ñëÀ®†²îü3 _Ü\Oy¢i·\…É5¤nÒ…ÆÝÄŒ¶01ž˜®jºÖ›àÕÕ€±¶¼··Yï#–6–5!rê ²ÏÍóÒÖqÐ4b¶êt›-¶y�Û'î¶d.Þ>\dã3V-l-¬žéíâµÔÆy±üNT)?’Š�³EPE0ÜNcO4)A&Ѹ) ‘ŸLùSÎÕ<½–Я”Ìñá�ØÍÄz“Ÿ\š�š¹ßù¨ÿ�÷ÿ�ÚÕÑW;ÿ�5þáûZ€:*(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ d±G<O¨²FêUÑÆCÁwú(xOÃ`�<?¥�?éÎ?ð¥ÿ�„Sßô�Ò¿ð?ð­z(#þOÐJÿ�À8ÿ�ÂøE<9ÿ�@ +ÿ��ãÿ� ×¢€2?áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð­z(#þOÐJÿ�À8ÿ�ÂøE<9ÿ�@ +ÿ��ãÿ� ×¢€2?áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð­z(#þOÐJÿ�À8ÿ�ÂøE<9ÿ�@ +ÿ��ãÿ� ×¢€2?áðçý�4¯üü)¿ð‰xkvïøG´ØÆ~Åqÿ�|ÖÍ‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…kÑ@ltM+L™æ°Ó,­%uÚϺÆXuÁ t«ÔQ@Q@Q@Q@Q@Q@dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“A@ôVŒínï¼­YXZ=ÝÝÍœ°C2).êT¹��NO=8Î#Qÿ�…Œºèðô¾V7´ÆX ãìûvƒ¿p`ß)˜ßÎê�郞KÉŽÃÆrêIá›øÞE­}’RpîŸ;&ó´‚WåPÝŽ+­ Š+Åð^Üi6±Øió^̺¤Ì±<jQ#$v˲º„`å‡l¿H̨¥‚¨êIÀ¯9Ò|1yk¡ê6úŽ‚×>uµ¼[¯ÙäûUÒyžmÞ¶|ûüß7ÉÓRë:GŠSLðô:\R-Æ›e±„2DЛˆ›Î%š5Û 'ïáÁ\œàШªÖ·j{¤6óÃäLb̪�“årNWæÆ}Aâ¬ÐE®érjÏöÚv¡d &++«PäÜv±fm»qü;sßwj�Ù¢¸ßèšÅ߃ßÞ´¶ŠlÖ^eÅуbíUFPˆû”e²Ãò÷º}6òKûî%µ–ÖBY^q•*ÅNê2pAï@袊�(¦o<Gå9R¥¼Ì äq×9ü1ÇZbÏ#yyµ™w³+d§ÈpN¡ÀÆ2yœ�M\ïüÔû„íjè«ÿ�šÿ�pý­@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“A@ôQE�S"„>qBÛ›nNÞ½ñŒûæŸ@Q@SK¾O0¡]ß»Ú!p:úœçÓŒP袊�(¢Š�(¦/ž„ò¶¶àAÜ[#>˜ÝŸÂŸ@Q@Q@s¿óQÿ�îÿ�µ«¢®wþj?ýÂ?öµ�tTQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘£ÈSÄöOý&‚µë#Fÿ�§ˆ?ì ŸúM�kÑE ¬~T,¾JC™$m¨Ù.NîNr}ÉëSQE�QE� ìšå¼”|·+dÉò(ÜxàñŽü(©¨ Š( Š( Z<ÞÅ'’‡ln¾io™rWå2yþëÄÔQ@Q@Q@s¿óQÿ�îÿ�µ«¢®wþj?ýÂ?öµ�tTQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘£ÈSÄöOý&‚µë#Fÿ�§ˆ?ì ŸúM�O¯jØžÔµ_'Îû¬—&-Ûw„RÄgÇ¥Eq¨ßÁ¯YÙ5$±¸Ü¦ån>xÈBÙ1íûœÝ»9aÆjΫ¥Úkz]Æ›~%¥Âì•WŒ²÷ƒƒÐŒò2«IáÛ.ãºiu68„Cn¥pªTT>ó÷ˆ'<ç<аj~oˆot£ß³ZÁr%ÝÂV•qŒq$÷9ÍhV<Þ²“W—UŽ[Ø/f0ù²Ey(WX›*›7l ÷�s½»’kb€ (¢€9m/ÆöZ¶…¨ê¶ÐÎâÒÛíB×Éu•â*Í�ÀnÞãnFA$µá_Gâ[K™UmƒÛJ#v´¹ûD-”WdÚ¹á€#­X°ðÖ—¥‰…Œ2Û™Š–+q! )%UrÇjÍ„/'ŽjtÒ Ški ’x|™^VU•±1e*|Ì“¿¨#= Œp1@QE�ÈÂ_©Kªj–0h¶åìÖGC%ã)uW –&Àa’6oé†Úx®¾°ƒ4?µÜÝ$1Íp\»E}:c{‡}¡\ À Äsš�«}ã{=>ÃF¹¹CÔ­¾ÔÎM¼AP»³F* ˆ7p¼ç WSX·¾Ñ5`†â̘`ŒCQÍ$h±›U€ØF^p1£kiöWºa<òùóvË!aÊÕÏEùsRhÍQ@ÙÄÙ}ÁJãyÛ‚Aû¹ÆxëŒþtŵ<¼4ß»feÌÎrNsœžG'�ä1Œ �š¹ßù¨ÿ�÷ÿ�ÚÕÑW;ÿ�5þáûZ€:*(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çášÿ�MÕur4[Û¨®n–h¥‚H•ò"CÃȤ£v®‚Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üz©XÇwã'Ô¦Òîl­—OòO$D³ù›°;võ®’Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ����hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Fundmtlsr3.jpg�����������������������������������������0000664�0000000�0000000�00000017523�15030617045�0023645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *¶¡¨ZiVßßÜGok–Y\œwž(ñ‚´š{èÎ?ws4!ï.ûÊòħ¶à[¾�v´W ¿ ôFíJ]ST˜õ–÷Q™‰ÿ�€«€¯ðwýÿ�òfoþ.€:ú+ÿ�…_àïúÿ�äÌßü]ð«üÿ�@ü™›ÿ�‹ ¾Šä?áWø;þ€ÿ�ù37ÿ�Gü*ÿ�Ðÿ�&fÿ�â询¹øUþÿ� ?þLÍÿ�ÅÑÿ� ¿Áßôÿ�É™¿øº�ëè®Cþƒ¿èÿ�“3ñt¯ðwýÿ�òfoþ.€:ú+ÿ�…_àïúÿ�äÌßü]ð«üÿ�@ü™›ÿ�‹ ¾Šä?áWø;þ€ÿ�ù37ÿ�Gü*ÿ�Ðÿ�&fÿ�â询¹øUþÿ� ?þLÍÿ�ÅÑÿ� ¿Áßôÿ�É™¿øº�ëè®Cþƒ¿èÿ�“3ñt¯ðwýÿ�òfoþ.€:ú+ÿ�…_àïúÿ�äÌßü]ð«üÿ�@ü™›ÿ�‹ ¾Šä?áWø;þ€ÿ�ù37ÿ�Gü*ÿ�Ðÿ�&fÿ�â询¹øUþÿ� ?þLÍÿ�ÅÑÿ� ¿Áßôÿ�É™¿øº�ëè®Cþƒ¿èÿ�“3ñt¯ðwýÿ�òfoþ.€:ú+ÿ�…_àïúÿ�äÌßü]ð«üÿ�@ü™›ÿ�‹ ¾Šä?áWø;þ€ÿ�ù37ÿ�Gü*ÿ�Ðÿ�&fÿ�â询¹øUþÿ� ?þLÍÿ�ÅÑÿ� ¿Áßôÿ�É™¿øº�ëè®Cþƒ¿èÿ�“3ñt£á‡ƒi#¡Sñt×Q\{ü>¶´>f­k:<Àäïx‰Î~hå,¤}1MƒÄú¯‡ï"°ñ|¬H#·ÖmT­»±áVU$˜˜û’¤÷ÙQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEgëÚÒ|;©êC­¥¤³ôÏÜBßÒ€9hc_ø¶âyÿ�{áýqg)ux9waÝcÈP:nÜ{Ws\ÿ�´ÕÒ|¢Ú¹…¢I#zGÝ¿bkNmgK¶™¡ŸR³ŠUá‘çUaõÐÚ+;ûFÿ� ½‡þ§øÑý¿£Ð^Ãÿ�SühFŠÎþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ¢³¿·ôoú ØàJ ñˆÙƱ§œ\§­�iQYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐý¿£Ð^Ãÿ�SüiˆtFÎ5<ààâå8ýhJŠÎþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ¢³¿·ôoú ØàJÛú7ýì?ð%?Æ€4h¬ïíýþ‚öøŸãGöþÿ�A{ü Oñ  +;ûFÿ� ½‡þ§øÑý¿£Ð^Ãÿ�SühFŠÎþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ¢³¿·ôoú ØàJ"ø‹DlíÖt󃃋¤àþt¥Egoèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ4£Egoèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÕ{ë]JÆ{+Ø{iÐÇ,N2OPj·öþÿ�A{ü Oñ«–÷V÷‰­§Šx‰ <NIyÉøVæçEÖn|¨O$âÞ!q¥ÜËËÍkœcÝ£$.{‚§Ö»ã¼h–·á-ex’Ql˜ã¬w c#þúòÏášìh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¿ È·¥ÿ�פ_ú�ª:%¥¼×ZÓËo·ö‹Œ²~âUíþE½/þ½"ÿ�ÐWÐ?×ë_öý(Gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð«ÍøŽ÷]´Õtk}.ïN†û“jßj³y™XC,»YPc÷AqþÖsÆ(sû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð®OPø‹g£]Íc©i×ÂæËÉX¥ÚÈŒUš_êxW‚+©Òï×UÒ­5†hê™cœ�êd�=3@þϲÿ�ŸKûö?¹ï YZ4šîëXN5i€Ìcµ+©®wŸë5ÿ�û Íÿ� ¥�Y‚ÿ�Ã7:œšdzL·ñ’Ö9#iT޹@r1ô«WI¤Y"=ÚY@®ë4¡3±ÀQž¤öÌEá­z/Üë éÍm&¤'[w‘›˜/)(T<Ce$`5e'‚|Yæ[É6µ$óÅ{-Ï6©+Ý ˆ F±(s«yd¸‡j�ô?ìû/ùô·ÿ�¿cü(þϲÿ�ŸKûö?¼ú/xÉ,Ðk“¶“§&±,’™^HÈù¼•’�ÅIS/�íUð¿EŤ–ºàEf YeÕ%™‰1Î ²ùJ’0i !ˆù=·�ôìû/ùô·ÿ�¿cü+žðµ•£I®îµ„ãV˜ Æ8R³í¼/â$Ö4{¦Ô§·µµÉ¸µXšev'’ÆXÉ”Œ)(¶k_Ÿë5ÿ�û Íÿ� ¥�mgÙÏ¥¿ýûáGö}—üú[ÿ�ß±þbŠ�¯ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøUŠ¥¬jÙ:%þ¤!yþÉm$þR}çØ¥¶sŒP¿Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…pú—‹õíÁm"éúÅôqIo-„'dçŠ <Ãx&a´†]ÛO�EË?Ï%þ©¦\¬öæ�Ñ$J-ã†O-šBf;ŽàÜ/'8€:Ïìû/ùô·ÿ�¿cü(þϲÿ�ŸKûö?°t?G®ê–©¤êV_h¶žôøD.¾SÄ»vdžDÊÙéŒuç5�Wþϲÿ�ŸKûö?Âìû/ùô·ÿ�¿cü*Å_û>Ëþ}-ÿ�ïØÿ� ÃðÅ£[j;­`8Ô®€Ìc§˜k¤¬? ÿ�Ç®£ÿ�a;¯ýhSû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð«Pìû/ùô·ÿ�¿cü(þϲÿ�ŸKûö?¬Vе GLÒíî4Ù-RW¾µ·´ÂÒ)IfXŽºà‚ẟºF9È�Ôþϲÿ�ŸKûö?Âìû/ùô·ÿ�¿cü+'Pñ]žŸ¯Úhßd¿¹žq—’Ö ñ[‚H_5³òd‚ëŠÄŠZBhK«fêf6”F±mˆ9Ý L¤f@§rH˜\î$ãns@ö}—üú[ÿ�ß±þgÙÏ¥¿ýûá\‡ü'nº¶“æØÍëÝÛIÒC4w‘Z£1Ý¥¤çn×o@ÿ�³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� ±E�Wþϲÿ�ŸKûö?³<2‰® ¨ªª5Œç5·XÞÿ�Q¨ØFãÿ�C4ñþ<¼?ÿ�cŸÿ�£…v5Ç|Dÿ�/ÿ�ØÃ§ÿ�èá]�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÏøïþIç‰ìuÿ�¢šº çüwÿ�$óÄ¿ö ºÿ�ÑM@ôùô¿úô‹ÿ�@_@ÿ�_­ØEÿ�ô«ü‹z_ýzEÿ�  ¡–»ay~Ök§KÍÉLÒ:°Ê¨ÁHþ�è*¥î•§jM_ØZÝ5»ù™áW1¿÷—#ƒî*Žÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüE�WÕü£ê¬f[h¬®Ì¾sÝÛ[Bd÷ ]08yU=…kišt:N•»HÑGœq$’OÓ’x ��*Žÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüE�l×;áOõšÿ�ý…æÿ�ÐR¬ïñ7üûé÷þOþ"³´?ÄÚc_šCý®íî×Iòî�cî{Pž%Ò§Ôuÿ� Ïoc#›;¹e’ö6Œd0H˜ùˆbÚ3€;9ížn-ÅþK$ÑѾÏ%ÝÌ×–¶bØ z$V@æ·i�ðBtÁ5Øïñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄP+áÅñïÛtñ®‹éaiBÞ,‚ËÉò¨Ýþ¯çȸÈþ¹¬ßXüFÒm4{IÄë§XÛ¤mmV’I H•J3™/Ìa² ïÇ5Þoñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄPÞðæ›ý²XêŸfCw»f|Ü ÿ�såÆsŒvªÿ�Y¯ÿ�Ø^oý*Îÿ�Ͼ‘ÿ�äÿ�â+;IÓüM¦5ùÙ¤?ÚîÞçýtŸ.à>çµ�uTV6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüE�lÐFF coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄP×ÂÞHž$Ðtµå² 8ÀiG#°Éç­8xoBX¡‰t]8G¦hZ¦#õuá¨æ¢ßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ  vš&•aä}L²·û>ÿ�'É·Tò÷ãvÜ3œuÀ«Õ¿Äßóï¤ßù?øŠ7ø›þ}ôûÿ�'ÿ�@4V6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüE�lÖ…ÿ�ã×Qÿ�°×þ4ýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄU .ËÄútW)åiç]KqŸ:N7±l}ÎÙ ¢ŠÆßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ  š§©i:n³n¶ú¦Ÿi}¸uŽê•C`Œ€ÀŒà‘ŸsT·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â(ëáo$pÆš–±ÀbQg†ûÁF8ÎNqÖ³¯|¡Ü>Ço˜",JÙZÀ«&@0hØd€FÁ«ÛüMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ�Ø|á¸R!ý…§Hñ A,¶É$„Ý–v˜îù‰'$óך۬mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠ�Ù¢±·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â(f±¼7þ£Pÿ�°Çþ†hßâoù÷Ò?ïüŸüEK¡XÝXYL·¦<×2ÎÂJìH� �a|Dÿ�/ÿ�ØÃ§ÿ�èá]qß?ãËÃÿ�ö0éÿ�ú8Wc@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚³|A§[ÃZ®š¿zîÎh?ßB¿Ö€@ÿ�‘oKÿ�¯H¿ôYZü9¥k°è·w“&¡1!"’œãÜ.áV<¨.©àíFÒÖq«¯÷F×_Á…n<qÈPº+;”‘§ÔzPGü%ZGüö¸ÿ�ÀI¿øš?á*Ò?çµÇþMÿ�ÄÖ¥ËΖÒ5´)4à|ˆòlR}ÛßèkŸ¹ñEÅ—„àÖ¯4Ó †î+y­ÕÚ]ª÷ t*¹qƒ¹@�°#Œñ@?á*Ò?çµÇþMÿ�ÄÑÿ� V‘ÿ�=®?ðoþ& ½ñ¦‰e¥Í¨™%†+U»LÅâdgV^9QÎz ‘QËãß E©ÝéƒPy¯­$Xæ·¶µšgV9À ŠIèsŒã¾(º§ü;£XµåõÜñ@¬ªÎm&ã'øj-Kâ?…ô*-Nòöxí&ÿ�U!²›ôù+©tI�ŠÀÃ#8#¡¡Ñ%£‘цXdî(#þ­#þ{\à$ßüMð•ióÚãÿ�&ÿ�âk]Ë,lÈ»ØBç>•ÎOâ=FÓºö«w¥E Δ“0‰.L‘N#Œ>UöŽ«ÊŒ#Þ€.ÂU¤Ïkü›ÿ�‰£þ­#þ{\à$ßüM~*ÑïÁû-IJ0ê‚ÚPùýà#i\ä¤c ©x¬Ôøáv6Ѷ Ësqgê[,I'— ~TS–ù‡Ê2{ã�ýW↴[T¹¿¼š^Asi7Sœµ;Yñÿ�‡4 2 CQ¼–+iÆèœZÊCþKÇãŠè#homà¸òÉV ,bhŠ2äpJ°[¡�Ž•#¢KG"+£ 2°È#ÜPGü%ZGüö¸ÿ�ÀI¿øš?á*Ò?çµÇþMÿ�ÄÖÍÿ� V‘ÿ�=®?ðoþ&øJ´ùíqÿ�€“ñ5³Uu-JÏH°–úþâ+{h±ºY¤ ’�Ë�É së@?á*Ò?çµÇþMÿ�ÄÑÿ� V‘ÿ�=®?ðoþ&°!ñµÍï#ñ¢[O/ö¢Ú´VÌ$½áI`72A$ x®_øöÊ×E—Q‚Æòp4åÔ¡L"ù°˜Ù÷rÜ †î /"€4ÿ�á*Ò?çµÇþMÿ�ÄÑÿ� V‘ÿ�=®?ðoþ&³&ñõª_ÞÚA¢ë7ÒS™ Hጇ+$Ž©…#$r{×Y@ßð•ióÚãÿ�&ÿ�âhÿ�„«Hÿ�ž×ø 7ÿ�[4P3ªxÿ�ú5‹^_]Ï ʬæÒn2p?†¢Ô¾#ø_IÒ¢Ôï/gŽÒoõR)°ÿ�O’º—D�è¬ 23‚:XÚ9]a•†Aâ€2?á*Ò?çµÇþMÿ�ÄÑÿ� V‘ÿ�=®?ðoþ&¶h  oøJ´ùíqÿ�€“ñ4ÂU¤Ïkü›ÿ�‰­šŠææ +I®®eH­áF’YáQ@É$ú�(/þ­#þ{\à$ßüMð•ióÚãÿ�&ÿ�âkŸÇO¨øWÆ:¦›5„£ùßeh¤#ªÛ¬˜©ÁË|½ðk^Zϳ%÷™reHâ+c,RùO߯àrz઒€,ÿ�ÂU¤Ïkü›ÿ�‰£þ­#þ{\à$ßüMaÚüH´ºŠ×ÉÑ5‹‰f²†è›{pÑ+JŠâ/1™W~Ö’;×_ip.ì ¹щ£Y63+ÈÎ RTýA#К�Ìÿ�„«Hÿ�ž×ø 7ÿ�Gü%ZGüö¸ÿ�ÀI¿øšÙ¢€9SÇþѬZòúîx VUg6“q“ü5µ¥ê¶zÍŠ^ØÈò[¿Ýv‰£ÏÐ0­:$€E`a‘œÐӍ޸‰ÿ�^ÿ�±‡Oÿ�Ñ»ãül>ÙªxOJA—›XŽå½’iIüÂÆ» �(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�â,å ñ…ÆŸqû½[˜Ïe)$Mþ²{o?:öÎáÖ»z£«éö—>›©[¥Å¤ëµÑ¿Bb:‚:W-ñg„Èò$ñ>Ž€dT¾…Gf …—އ!½s@ݬWÖ’ÚÌdJ¥[Ê•£lFR}AFOiÓh¿Ù ©m7«þòòf”2¸u>imù 7«~&xaý¾êçL•~üWörÂÉõÊãò&›ÿ� [À¿ô2Ù~mþªþ±œÉÄ6í§ý€éðÛGB0Ô¸l‘€�ÆÜ õÎi%ðv4w¼w›.tŠ·ó¨'9$�ün<¶1¸õÍeÿ�ÂÖð/ý ¶_›…ðµ¼ ÿ�C-—æßá@ÇÂÖð/ý ¶_›…ðµ¼ ÿ�C-—æßá@{ td$€Àƒ´9™‡4Øt{­$­ÌÖWhÑÌ—7“NYv• ìX vuõ¬?øZÞÿ�¡–Ëóoð£þ·èe²üÛü(gNðõ¶›~³B#CGn»XÈ»Û|…äf%Ë79àòÙÎsUáðV…m‘oÔ1V�‘ßΣj¨Uèÿ�x( ï�1œVwü-oÿ�ÐËeù·øQÿ� [À¿ô2Ù~mþÖZÛEgi ¬ VcXãRňP0O'ÔÔµÇÂÖð/ý ¶_›…ðµ¼ ÿ�C-—æßá@ÇÂÖð/ý ¶_›…ðµ¼ ÿ�C-—æßá@ÇÂÖð/ý ¶_›…ðµ¼ ÿ�C-—æßá@MÕ…õ“Y^ZAqhÀ‚há�‚2¤c‚åP6‘m$ó<ãφH ²ÛHˆbŽ2�e Ø OAŒ çákxþ†[/Í¿ÂøZÞÿ�¡–Ëóoð  É<1áù¼ß7BÓÍ*dÝiÞWîçŽqÛÒµkŽÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€;+Žÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€;+Žÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€;+Žÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€;+Žÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€:ÉmàžÞKyaŽH%VY#u\7Þt äç×5V-"Ú íäÛZ!X-"DHcbÜ�\ƒ´‘Œãñžkÿ�…­à_úl¿6ÿ� ?ákxþ†[/Ϳ€6Ï…ü<WiдÂ<Ÿ#Ò?õ}vtû¾Ý+Nb·‚8 "Š5‘¢…UP0� ¹øZÞÿ�¡–Ëóoð£þ·èe²üÛü(±¢¸ïøZÞÿ�¡–Ëóoð¥< Ì|IdI8�çô ¢ºº‚ÊÖ[«©’"RòI#aUGRO¥rñL¸c‰aªëSôÛefáéÌŽ�÷ÍFžÖ|Su׋ 6útN$‡D·mêÌ9áÿ�å¦;GËÀÎh|/Þ"×®<cu Ålðý—H†UÃ,ËJGc!ö¨õ®ÎŒ``Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Fundmtlss4.jpg�����������������������������������������0000664�0000000�0000000�00000023307�15030617045�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��„"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ËÕµ+»+›k+Hn&»‘yÓ˜•B¡br‰ééZ•ªÿ�Èàÿ�×i¿ôSP¾Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb®6§hº¼zSHÂòH寨hÕ•X†ÆÜ‚ëÆsÈâ7S´ÕìVòÊFx ¼yxÚ2£¬2°äv  iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1Vï5[+ »;[©LrÞ;¤F*̨\‚Àa~UcÉÁÅ[2†R# Žô“öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã©«4)* êBŒõRØŒÓè™ÑõÝ{YÓ…ì:>šˆe–-¯©>s<AÜ©5í>#ÿ� V•ÿ�ƒ)?øÅaøkX²ÐüÝûJ°¶£u1A$Ç{]ʪ6¢“É ::‘ZVþ8ðÝÞ§o¦Ûêi-íÅ ½†Ë<Ew‚>^¥yÛ÷±Ú€-}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅUÓ¼i¤êÚ¥…žžn'[Ûyn"¸Ò,xŒ  ’£ŸŸЧYš—ÄôÅñ 2Ø·é-!†òî‘ YÎ%òö«ìf;9?/¡Í�ný§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅV_hlӥܬ  U[I‹Ë¼1SlÝ"ŽC( …cž &‹â¸5}kRÒLKÝœ£$Ë4-r$Œ¬“>hppTó@ï|C®Øêú^šú6œÒê-"ÆË©>b9ýÇ ­/´øþZWþ ¤ÿ�ã—âù¼ÿ�]®ÿ�ôCUËßiÚv­}§ÝGz­go ï$vrʬ$gPÅ$œ§óþë`ÇÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒUx|i Üê¶V÷rÍ5ÑA Ek+ÆÅ£óTyvƒåø$s[ôÎ麾¿©éÐ^ŤiŠ“.à­©I‘ÿ�*ßÚ|Gÿ�@­+ÿ�RñŠ¥£jVº?€mµçxím­¼É]#i ¨êv¨'©ãÍUÕþ$øwI5̲j6Ö’]ý„ÛÊ’² '¡_—¦yþ›îó@ÿ�iñý´¯üIÿ�Æ*²jºóê3Ø'Lóa†9˜JLmràc÷s~•¯§Ï=Οo=Ì) Ò f˜.{e•[óP}ª·üŽ:—ýƒí?ôeÅ�iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1X×ß´Õ{´¸¦¾šîuA·FQßÌDÅ”ˆÛiPC`àáX„°ø‰¥¾…kªjË&ž·¢ô‚yV8v´å�¤àŒt'î–µöŸÿ�Ð+Jÿ�Á”Ÿübª¾­¯Ç©Á`t3Ìš&V”˜÷x?#NÐüa¥xŽþK}-åž%´Ší.<—XÝ]p c<qü-‰/Œ«â«…åmáDvÚ·Ûàƒïƒô  >Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb±-¾'xhÙY=ýèµ½ŸMR’ÑRIš(Ú0ç•^p '¾p^><ðèò?Ò®XÌÁRÆv*ÆV„2„ÈŒ€62TÐß´øþZWþ ¤ÿ�ãgâ v÷YÔôÄÑ´å—Oò¼Æ:“á¼ÅÜ1ûj¯oñÊmZÊÚKYർ’æÞ9åŽ@Âx® …6p¬d\9lòœŸBñ^ø·þÜÿ�ôQ  /´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�­z(#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ×¢€2>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb´þÑ?¾‡òÏÌ>÷÷~¾Ôá"3²RëÊ#=3@_iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�s¿®ëº-®©§GÊoU“R}ÀdŽqµh}§Äô Ò¿ðe'ÿ�®ÂÚ´ZÂMZxä’+;™Ò%,Ä)cÇøôO±'4(fž®n"–ÖFŽK9•˜3"€ ¦\î‘jä‚À“@>Óâ?úi_ø2“ÿ�ŒUIµ}~FÖÉ´0½ÊÈÊÃR“f3ŸÜµZšF±e®Xý¶Áåh<Ç2ÀðÊJ°ÚêÓ¨5Rÿ�þF½þ¸Üÿ�(èßiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1Qê^.Ñt‹‹Èoîe¬âY®ÚÊR4`ÅX¸]¸;y#o^*ž‹ãKOëŸdÑÓíÉ.Úõ„ˆvuUPS”9ËàU¶€OªëÚvu}6“¦­¡yœ&¥!%Tqûޏgí>#ÿ� V•ÿ�ƒ)?øÅ+ÿ�‘;\ÿ�°|ÿ�ú-ªM[_Ót?+ûBv‹ÌVq¶“¸Üí´¨»—,pFM�GöŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ãÎÙüEû^ª-ÿ�²ž]׎׉Ԭ6Îܯ“Äž<t$1 lß|MðÍ’\§Ú®ö 7¼ûZMÌŠ¥Êè1ÀÏ8ãžœÐÏÚ|Gÿ�@­+ÿ�RñŠ«§jÚþ¥¦Z_Ťi‹Ì)2+êRdP@?¸ëÍoE*Í Jº†У�}T€Aö#5Æéž(·ÐtMHGý€/^ñ¤$§”!R¥óŸ9pAÎF1@ßiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1YÐ|Eð­Ï–bÔÉI 7 +[J±˜Â»“¼®ß»¼g?»aÔŽ´Éç¶·°†ö{‹‹³d«-”ð*Mä´ 9hò�sƒ€Ûº@5 _]Ól&½ŸIÓŒP®çê.[ÀÀ?tƯˆí<]ðâïQ¶V‰šÑZxYXd1¤›2Ê7 :á€ÁÖ»*�(¢Š�(¢Š�(¢Š�+Uÿ�‘‡Aÿ�®Ó覭šÆÕäaÐë´ßú)¨7Æ _ÜYLn ­¢šÒÚùÌžaŒïŒî\‹åü­Î2xª6ÿ�¦MFÖöãT·šH®MÃ0²!Ô›©.‰Œ‡ËÜd(ÿ�{r¨WsE�yÄÿ� î¤Òa°‡Z´¶hg7k‡Oežgòž5i\L7°ó 'wB0Nw¯<%-þ«a©]M¦\\Ádm¦{0Hfb¬22ÿ�"|•1»ÔÑ@scð¾{mÿ�K›Z£ºÓ¢°I`±1IÆ Ÿ4åI X \óÀÇiáý"=A³Òâ)²Ù6,8^¤ðÝ€ç¡cZÒ¢€8ß ézׂⶾYZ$Ô®¦QïÞ—r²œ¡†�ý@=«WJðv‰¢:¶Ä`ü^ÌAA ‚ç%A!IåG�€�¨< ÿ�"ªÿ�×íïþ•K]%�bØxOFÓ/£½³¶’)ãiYH¹”ŒË·ÌÊ–Á QIuëÍC©x'@Õîn®/¬å‘îó‚ÝÌŠÄÆ#'j°Š …€®FpMtP:žðüvßgKIÕCFÈëy0’-‚ß~äUà*�cÇ&¤¶ðn‡i­®³½Çö‚»¸™ï&|—EFÈg ü¨ƒ‘ÆÑŽ•½E�rž!ÿ�‘ëÁßõÚïÿ�D5k^xwL¿Ôÿ�´gŠoµyihîeŒ2©b ª°Sƒ#ã#ødø‡þG¯×k¿ýÕÕÐ Ãxí<Sk«iú´‚Õ`Š(PLdXb�y[ŒÛ ;£'æ8 àŽêŠ(›Ñ´Û]cÀ6Úuò<–·6Þ\¨’4e”õ”ƒƒÐóÈ⦻ðv‰{öŸ> “ö«akq¶ödó£�>׎27œ3É©|%ÿ�"¦›ÿ�\Gó5³@ Š%†‰ •E ¹v z±$“îNk.ÛþGKþÁöŸú2âµë"ÛþGKþÁöŸú2â€)§<?ɵÔo Gp¦<+*ªáøP®à(áC¶�É¢_xv{;)¬æ’ÖÎ=ą̈˜ p_’ ÊŽ„`WGE�gYè–67¢òŸíf[S$—2H^5fe ¹Žâ ·Ìrß1çš«}Ïâ«\°I4ÛÅmŽTླྀàŒ}Ç5·Y?ò8é¿ö»ÿ�Ñ–ôKþ?ý’KU³ž8$´[)#ŽötB£j«�ãvåÉÉÆFqXZŸÂÛkRÍ/RšÃËÞêÏ-ÌÒÇ#¹w’73€ ’YIçœú Í]x÷“4³[]ï2<£f¡pYåY˜¨Y�\Ȫüc G¡ÈûâÏ¥ŸþŠ5Ô×-¡Èûâßûsÿ�ÑF€:š(¢€ (¢€ (¢€*2Àç66Çtâäþéy”ctûÜ›¯¥Kkxî%¸ŽÖy‚‰$Tœ.väõ8ÉÆzf¥¢€ (¢€ (¢€ (¢€9Y[ê_ ´û ¸üÛk›7†dÉ‘·Œ‚zTšÇ€tÍKL¸·¥Šæhž´Oq<ÿ�#º3« ,ËP~`}©>É>Ñ¿ë‡þÌk§  ? x~O hæÂKæº_0º 8X”€6&÷vÛO,ycÐ`ßÿ�ÈףןålÖ5ÿ�üz7ýq¹þQÐÞx_HÔ.¯®.í¤™ï [k€×mhÔ’ .ì)’ €A$ç“RXxOÓoä¾·FæHÝÞkɦ܈IPC±˜ç¯ÌÜòkRŠ�Èñ_ü‰Úçýƒçÿ�ÑmRjÚ›®y_Ú4¾Z² ³<yFÆäm¤nFÚ¹Sp2*?ÿ�È®Ø>ýÕ¯@¾ Ñ,®ðEx$UAmBá°&mÒð\™°Äú€zŠdðõ¼W1Eg0ŽêÝí®TÞLDèû·oËüÍó·ÌrÃ<]�ÈbX Ž.V5 ¹v rÄ’O¹95ÊéÒu¯ h³êÍ;+\œ/–ÊŒÀ(`Ê)ÝŒü£žuµ‘áOù´?ûÁÿ�¢Ö€3u�è×Û¦ù/„Jܶ¡rì…UÕ O›Y8=w¶~ñª^øsk£Øý’îòKˆc•&¶ŠÖ[ˆÝÂ:Bfw–BÝ·�|£œöÔP'qá'Ã^ÖcÒ¡ššÔW¹–QòG±pŽ0¡WŒpªA]ecø­ŠøWR#¯GçÅlPEPEPEPYÚž‘¨öÒ››ymœ¼r[¸S’¥NrcZ4P7ö¿ôÕÿ�ïìüEØÿ�Ð{Wÿ�¿±ÿ�ñ³E�c`Kÿ�Aí_þþÇÿ�ÄQý/ýµûûÿ�[4P7ö¿ôÕÿ�ïìüEØÿ�Ð{Wÿ�¿±ÿ�ñ³E�s¶M6Ô[ZëZºDäÛæ§Þv.ßÁêÆ¬ÿ�`Kÿ�Aí_þþÇÿ�ÄVÍý/ýµûûÿ�Gö¿ôÕÿ�ïìüElÑ@ߨÿ�Ð{Wÿ�¿±ÿ�ñ`Kÿ�Aí_þþÇÿ�ÄVÍÍ\x<\j6Wí¯jââȹ…·ÂÀ]§†ŒŽ„Õïìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Á²ðÝÅ…œV–þ#ÕV—j–ÇëäÔÿ�Ø×ßô2ê¿÷î×ÿ�ŒÖ½‘ý}ÿ�C.«ÿ�~íøÍUO Þ¦§=èñ6§ºhcˆþêÛ8Fr9ò±üg°ïÉã ‘ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÖ½‘ý}ÿ�C.«ÿ�~íøÍV ݾ£ éñ.©æE‘/î­º9Bå–?€vü»ôPGö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3ZôPGö5÷ý º¯ýûµÿ�ã5NßÂrZê7·ñx‹V»<æ+lCl^<ž8®ŽŠ�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�çtÏ K£é°iö^"Õ’ÚÛ”¶bÔÃVÿ�±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš‚O ÜKyÛøU3@®±–ÜÆxò}…oQ@Ø×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍkÑ@ö£á»ÝCL»²jan!xŽè­ˆÃ)=ûõkûûþ†]WþýÚÿ�ñš×¢€2?±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš×¢€2?±¯¿èeÕïݯÿ�ªÖ»Óôë[(¼Kªyvñ$Kˆ­º(�uˆžÞ¦º (#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z( ëÓß[=µÏˆuI aÐ¥°Ü=2!ò­Ú( Š( Š( Š( Š+?[°»Ôô‹‹KNm2æEÂ]BŠì‡èÃù`ú@®¡fú‹éëu ^¤~kÀT'ˆê«5â¿ þø£Ã2Ö[UÔnQn 5fI>ÐwrÌV ÷äîkÙ-a’ÞÙ"–æ[—\æYB†n{íUÜÒ€9?ˆž%¿Ð4+¦,qݽ•ÍÂ]K2¢ÄbU8‘ƒ¹ÝÂ`d+r1T|YñM&+¤Å§Ý£ZI$Bóv$ï:åT¢dÜ–QÐäzÊh¾3·ˆ†”a²1Éo$ÐÜÚ_yêæ3uÆÅÇ2pA9 OÊIñJòÆ}Fî{H%ZÙMg¦ý¾$1 Uv–FEòñˆÃ܈¾jôû›Û[!º¹†4« ~lwÈÜ* õcØMO@«ñ%ôÍJ;9,´ØÚHãqöWg•¹n”¬l±¦NÀÛŽæÆCî<}3h~(¼HtÀ4T`Ϩ³Ñ×i0•ïeçM¸9$v×vÖk\ÜE�’EŠ3+…Þìpª3Ô“ÀMM@e7Äûét†ÇKŠK{µŠi?´Œ‰-â[¿˜|±åîݹIÏÊ¿‡ê|M¥½ëYXÆ«=¤D>£€ž{”ÚçËùfž>v¯;«²Òt{-ÑílT‰åy˜I;Êw¹ÜÇ.Iä’~¤žõz€ • ŒÎˆ“DG.ªØä 3ßè(–Xà…æšEŽ(Ô³»œ*É$ž‚•Ô²2‡(H 2ã#ÜgŠåüE¡jsøcVŠsTº•ìæT€ÇmûÒP€¼D=8 óÖ€:ˆäŽh–X^7•Ôä0õ¢»¼µÓídº¼¸ŠÞÞ1—–gª=ÉàW–ü ð‹<'oæë:ËÃhà•Ò‰IîXä)öN½ÍPø½ðÛÅ~&•µ3W—P¶æ]&R#ÿ�¹Œ?ï`ûš�ödu‘у+ ‚:N¬=PK(¼Gª«,j ùv¼tÿ�SZö–òÛ@#–òk·É>lÁ}>EQúPôWªø²æßÇZV—¾ ;í²NÒΡîYí^D d.ýŠ0˸5›?ÄɆ¯koäépZ}¥|ˇÔ7$<W „7–6¶è:sÕF~l€H¢¸û?ËuáíJý´èEÕÔv­w›â&AW2l@%ŽÞ6·\V%¯Äk»éÏ5¼:µýÆ«wa3%ô1GÉŸj™U-³fÑ….0{Ð¥Ñ^ycñ8Þß›3‰¨%žmd¬}Q[Éúà ¡‡$äj?.m|)¢øll™/ã–ám“Sä¢[<¬¤˜NH*Ê@Æ'?1�Ѩ¯3—âuÚ^Û·Øôϱ²ÏuÔwE,ˆöà:KåࢉÉsŽHƒæÛÓ¼q&¥ªéZXÔ žl@çL#cüêÊK£q¸)éÖ€;(ª÷–òÝAåÃ{=£g>d }>uaúP®®í¬mÍÅÝÄVð©�É+„PI� ž9$îjj󿉞Öµ_‡Úާ©jW3U--¿ïòV5#�Ôt犟áw„<Gá-ìúîº×”yVCçKo`çæ>˜(íž´ÚÞ_ZiÖæâöæxA d™Â®IÀ=É«â?>ø³Yñ5®³i«ËªÙGpŽ,¥*l»†v/À`ÇïW«ÿ�cßÐ˪ÿ�ß»_þ3@ôQE�QE�TGr×6ïÂG ó£1î20�lü¸8=zT o© HµŒë0ieû6‘î'`]ß)Û»'¦qÚ€/QE�QE�T1Þ[Ku-¬w5Ä " = @5NçL»žá¤\Ô-ôŠ$€ªý7DOækÈuÿ�‡>0Ö>->§¦j×VVðEZbªíÇ*«Pþ˜ S@áPG{k5Üö‘\Ä÷0i¢W£ »‡QœgÒ²õ½SÔü0úm¦¿sc|Ñ…þЊ4ÞN9$�1ŸöpGc^qð³á߉|+ªxŽ-WQ¸¶óÚŠîÑ¢‘n±æd“"1dvæïÅ�{FÊÆæÒFiµkËÀFN€¾ãdjZä|AãY´¿ÙZÉ-µŽ› ã[ÜÉqrˆn Z<©ò”ÈMû8a–ph¼¢¼õ¾"]즒ßM´uF²½2_nŒ/ÙZu*û^ |Ão9ÈÒ³ñ¼·^Ô¯ÛN„]XÝGjÐGy¾"ds&Á„PXíãkuÅ�vW•éÿ�ï`ŽÒÆ[;}Nõæ¾[‰ÿ�´a…"ò§p¨ U› ƒ´†Ç5³Ä_>K(Äz*˜q4º±H\t"'hG˜AŒ–à`Fàh»¢¼ä|H¹}6Qll™dЧÕ㵋SÜJÇånWýÎU†é�Á ”`Gu†_‰×i{nßcÓ>ÆË<e×Qݲ#Û€é/—‚Š'%Î8 !þ˜Ó(®;NñÄš–«¤XEi`P‚y²uœE0Œ`Gó«).Æà§§Zìh�¨çž..%H¡‰ É$ŒQ@É$ž�½A}g=ØO'Rº²Ûœýb;þ»Ñº{c­sž+Ð5;ŸëpA­ê—sKa:%¹Žß÷¬c`ˆäñÁž´Ö#¤±¬‘ºº0 ¬§ ƒÐƒN¯*øCàOøJÓ~·¬ºZººB‘"ÆOrÇ;O²p{“Ò½V€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0|_¥^ëzØØˆK›»iœÉpða#™$;]°c³�Œc9ÏÊZxKÆÆx'Ô5¶”®£C«,q—kÈqæf8`T†ùyפÑ@sqàïKij$ÔòK;ˆf·Š}NuÞ‡˜v0˜¼´Ë´¦FsFŸàßCy_ëw7‘BInXë3ÆGP¨‰í9dm¥ˆ>ÜqèÔPEPEPEPEPEPEPU5M2ÓYÓ.tÛèÚKK”1Ê‹#!e=FTƒƒÐóÈâ­Ñ@ †%‚áBÅ#P«½ËŽIÉ'ÜóO¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�©ªi–šÎ™s¦ßFÒZ\¡ŽTY )ê2¤‡žGb–#… B®÷,p9'$ŸsÍ>Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢±üOm®Ýè7ørþÚÇRaû¹®"Þ£ÛØûßJ�Ö¥ÊÀ®y�çô?•:¼Wá.ã}+[ñOöÌŸg½•­™î/à{‘q7H ã¿'¨b½OìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôVGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�н‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô¯Ed}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôVGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�н‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô¯Ed}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôV\0kË2õ-5â 7ªiî¬Gp ˜àûàý*Ωößì›ßìß/íþCý›Ìû¾nÓ·>ÙÅ�[¢¼Â=7Æztìz\:’ÝOv×ÐÝËö.[ìñ(I.dC’¡xÁÝ’M]kOZxnâ =µ/í%½¾ž'•ídS#4(ÙèŒg †(Û@…Eq3ÓõýFòÒK;k‹‹+Y¬®ÒÒ³ƒ$‘Ü”3HA ]»XdîàÕ-2?ˆ_mµ[›Ç¯Èhía³Ž4‡pç{33F'UÉãÐТQ\ªøâWÓVîM^{¢ºƒF,<˜ã1°ÝråD›Ü `6Aâ±ôMGŃÆ/¢‹ËðÈ—SZ8± 2]M¸ËåÅŒ>S|™ùÛ-ÃrêôW›[ZxêÆi GÕ$·“4o¾É·F×23[ææžXÄ›ƒ�€ Ö›HÖµ¯…WÚv°²\kwšk£Ãsäá.<¼�¦0nñ¸’3Ôc�³¢¼Ål<fÚ¸Ô~Ãwö˜íf·Žòcf.L/5«l!–d;’¼l“=Z£Ôtÿ�jú¹§jÖW·kqg4VP©²¾å"#9$0™[ JœqîêTV'…¥ÖdÒ¤í›[ޥċ¸È¬&Lå]B³lm'#êvè�¢ŠËº³Ö$¹w¶Õ¡‚÷ckMä~;†hRŠÆû¿ÿ�AÛü�ü]`×ÿ�è;oÿ�€ÿ�‹  š+ìÿ�ýmÿ�ð�ñt}ƒ_ÿ� í¿þ�þ.€6h¬o°kÿ�ô·ÿ�Àÿ�ÅÑö þƒ¶ÿ�ø�?øº�Ù¢±¾Á¯ÿ�Ðvßÿ��ÿ�GØ5ÿ�úÛÿ�à�ÿ�âèfŠÆû¿ÿ�AÛü�ü]`×ÿ�è;oÿ�€ÿ�‹  š+ìÿ�ýmÿ�ð�ñt}ƒ_ÿ� í¿þ�þ.€6h¬o°kÿ�ô·ÿ�Àÿ�ÅÑö þƒ¶ÿ�ø�?øº�Ù¢±¾Á¯ÿ�Ðvßÿ��ÿ�GØ5ÿ�úÛÿ�à�ÿ�âèfŠÆû¿ÿ�AÛü�ü]`×ÿ�è;oÿ�€ÿ�‹  š+ìÿ�ýmÿ�ð�ñt}ƒ_ÿ� í¿þ�þ.€5ÒHä,ÕŠ6ÖÚs´úzuxM¿„>!KñwXÔô­Aôë&™÷³Eˆ®�Eû±óôÇ çkÝ##A#pæUÀ'¹'�ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Fundmtlst5.jpg�����������������������������������������0000664�0000000�0000000�00000027173�15030617045�0023653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��~"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú+;í“zʶMê?*�Ñ¢³¾Ù7¨ü¨ûdÞ£ò  +;í“zʶMê?*�Ñ¢³¾Ù7¨ü¨ûdÞ£ò  +;í“zʶMê?*�Ñ¢³¾Ù7¨ü¨ûdÞ£ò  +;í“zÊÞÊIP>”¥EsóøŠ8r‰ÑK£ë3jwrF訊›†:õ·EPEPEU¿Ôm4È×sRv¢€Y¿ºª9fö�šË ÕmíâÒ-HâK %¸o¢)ÚŸRÌ}TPõA=í¥®~Ñu 8>dp?Ëÿ�„^ÊlBâûQc×íW °ÿ�Û5Ûþ;V ðî‡m³èÚtX;‡—j‹Ï¯­�\‚úÒëgº‚\Œ.@Ù…OY“xwC¸ÏŸ£iÒäî;íQ¹õäu¨?ᲄîÓç½Ó˜tû-ÃlöÍ·Gÿ�ŽÐÕÎK/‰´¢ ‘ūڎ¯n¢+…¥ Úÿ�S覬Ùë+ –Ú`À®¥v²7÷YO*}ˆ€6¨¬ß¶MýáùQöÉ¿¼?*�Ò¢³~Ù7÷‡åGÛ&þðü¨JŠÍûdßÞ•l›ûÃò  *+7í“x~T}²oïÊ€4¨¬ß¶MýáùQöÉ¿¼?*�Ò¢³~Ù7÷‡åGÛ&þðü¨JŠÍûdßÞ•l›ûÃò  *+7í“x~T}²oïÊ€4¨¬ß¶MýáùU›Y%”–sòn´fŠ( Š( Š( ŠŽYVÜ߀Û£þëPª*¯Û£þëQöèÿ�ºÔjŠ«öèÿ�ºÔ}º?îµ�Z¢ªýº?îµnû­@¨ª¿nû­GÛ£þëPª*¯Û£þëTñH%MÀ=èôQE�cQE�W5âÙg±þÏÔm[Rib¸XÚ H¥™d‰Î×.ˆÝR\:®;âºZ(ŠÖ5i×W–zM‡ž¶Ñ1·ZM)”,ÙC$È<­Ÿ{'w#Št>#×níôÁ«Ã-Æ¡qk;M£ÜíH—yŠ\A,äã.yN5uCT“[“MÓ%±·h-Ré伉¤†g]ª—Ù’ÜãrñÍnFXÆ…Š– d¯Lû{P¨¢Š�(¢Š�(¢ª_ß-œ<`Èßu­�:îú+4Ëœ±è£©®~êþ{³ó¶²Ÿýz¯$,…äbÌz“M ·ü)ÿ�óÿ�×/ê+&ÏOº¿}¶ñ«têk¬Ñ´_ìÆi^]òºí!G�P½Q@eêú¬–e-,`ûV§8>L¨è^Cü(3Éêz šŸTÔM³ó¼³4ÎÂ8!S†–CÑGó'°ô¤=f¸¹O¨Ý÷WÆâ:*ú"ôQõ'$’@ ?FKYÍíÜ¿lÔp×.¸Ú?»þöžäžkNŠ(�¢Š(�¢Š(�¬WCŽúAwk'Øõ[”LîÝ‘}ºŽÄkZŠ�åìu %žK èE¶¥ †’ÙW_ïÆ‰ üAà€jýK­èãU‚7ŠO"úÙŒ–·üŽAÔô#¸ô Ÿ§^›ÛbÒD`¸‰ÌSÂÇ&9Qžã¡¸ ÷  tQX¾)[Myô„Ò5 ™Ò8ä/@«ïÁ¤ ßêß )?)öÈýÏËâËxîWO¾–Ùg6¢í?)§ ³ËpÙ/òd€»¸ÍE¤øÊ=f(ä·Ñµ5[­Ì;¼“æ#•…?88m§�ú�éh®bÅSFÔåÝKi)A–6”0ËJ�ÿ�RçéŽçq¼Qemª\Ãuo óvIÝ/³-‚@P‹$`ƒ“‘@tW5?l­îï-Êûí·qZö 2 aY |ÌÑç¸Þ2+CTÖŽ—smi··Ï"EçBbÚŒí´Õ©Ú&€5h¬‹ }nî¯`ŸO»°ûk,’]4[J¶ì£¶8RHl1ž´ý3Äš6°–ÆÇRµ–KˆDñÂ%_0¡îS9è}  J+"}}cÔd³·Óo¯<‡Xî&·T) 0 n`Äíe'h8fµè�¢Š(’K)¾g™ÁcWmu]>iÞÞ}Îz�þÉj·¿iŸËCû´<{ŸZè¼;¦}’×íßJ8ÿ�ehjŠ( Š(  ’p-R¼Ÿ'ÊSÀûÔò™¤ÏaÐTTQ@“â-VçFÓîÖÒ;©â<¹&1æH±ƒŒxf^1Ó?C™‰u‹¦Û薲ܭº]Êûò\°Œ«,Ûå* c“Í�u5ÃOâ™4­[X±—U†ú[ŠåPÉec•¼½’§jÆ~v|d+&sÜ»ø„ñ]B¶¶rAsgmwlg¿0Ëp'ßµ doù‚÷=q¹±ªK«M§.Ùf†Ö+‡?l$3Î ¿êÿ�½ÿ�µžqÈßÄE±J¸º³´ŠÒü²™Úû ¥n(Ja×kù¡²2ªNoxg^ÙOwåZ$QÏ%¸6÷f|²HÊIù�€¬:ä7nøz'Ä%Ô¬¥¼º·°··ŽÉnÝ¢ÔC˜KíÙ»Ñ61ÝÁäpyé›kㄟGÐu[;sk©ÈÑËåË—€¬ní…�ïÇ–à€GAŒæ€:Ê+œÓ|Sý§¥G<K§­íÌ÷Ù[5øÅȆBŒÊÛ2F· Øõ¨bñ&±-žt4k/.òqû“‚åC ò~a±Lœíâ€:š·owm [%¸‰=À5R¹ÍgþBýÑ@¼WVó±XgŠBHG•ÌøOþ>®?ÜΊ�Ò¢Š(ž¹×õ(¼RúL:\[Æ–òI:Üá%wMÛ6cå1±9qÇLž)O4!ö¸¹TÌ™f±œ�#b’”à# 1<.FHÈΊhöQëRêê³ ÙbX]¾Ñ&ÆEÎѳvÞ2qÇsêj‰ðv†m…»[NÑ•Èk¹‰o4†1/–V §*O$P SÄ>»¿ŠÓR„]Ï Å"2i’Ì« ‘b;Ë+ìªH<Z¿¨xÃDÒˆÓÜÀL>Íe7ÜÚXÿ�PªÄ¯P’85‰ÿ� æ¼Is©Ý_»C=ɹ’xšBP; ¶Œ¨§(¼õ{Uð¦­4¨[Í)’غ•1˜Î°À(ÌrsÖ€¦xŸIÖ.þËe4í6Ù,¶²Å‘„|P V ÔdVÅciþÒt»å¼µŽèNžnÓ%ìÒæ°i>Vr>fFzÖÍ�QE�6I(šG8U5Ê\Ü=Ôí+õ= ô­}rr¤ ýó“ôçô¬*�+oFК÷Ü–ý‡Bÿ�ýjfƒ¤ý¾:aþäxúWh���0A@ Š(àŒG* èª0)ôQ@Ubÿ�û/E½¾  …ÿ�Âþ'ñ  ë:LjnµÉ´ÓÙ­-f”q4ŸýØôÚÿ�Þ­ú¥¤iãJÒ-l·ù`I!ë#žYϹbOãWh�¢Š(�¢Š(�¢Š(�¢Š(�®c[Œéšõž¤‹‹kÂ-.ñÙÿ�募Ç(}w§¥tõGYÓ†­£ÝØïØÓFBIÿ�<ߪ°÷ ü(¥e.„ƒÄ’kl¹i$‰"6ì#1�›ö‘òny’s»øn*Εzu"Îõ“cO HÉýÒ@$~й@xNÞYÝ—P¿ŽÙ§7BÑ<¤œ¶ÿ�0e d?Ï‚JîçC@ø{aá«ïµéúž¤²am f‹lŠ£YD`P^9ÎNzê(“¹ð æ•uªê3AÔ×gx€™]ûÃ~ëýä�#yçŠçáž•.ºUÝþ¡yg³ÛۥЂClçtlcÈ`Ðrp>€ŽÒŠ�æí¼a¿—uuy~âöåžéȲıªUWøbP}yõ­1¢X%ÔSÁ[˜îé’TYfe*]ð>fÁ<ÿ�€­(­¥ŒvrÝÊŽî÷SyÒ9çj¨Ð� V&à«-k7†úúd´*ÑÅ1nõ‡ÈW;Pˆ°¸Î8ÉæºZ(-´E¬—Ö÷÷vÂgW¸‚"ž\ìªÜ¥Úª>R¹�fµ(¢€ ÎÕ¯~Ï”‡÷’ÈUÙ¦H!i\áTf¹œM©_�£2HØÓÿ�­@´ 3í·~l‹˜"991ì+µªöV‘ØÚ$ôQÉõ=ÍX Š( Š)‚)f< �Šæo&>>ñéY”ùd2ÈXþÒ™@Q@u]"ÏZ³·Ë+B², E;ÄC)ÊÈAà€zõ�ö¨/ü;¦jf&ºŠfxãòƒ¥Ì±³'÷\«ëìÙµh 9x¼â;‹ÇÕô{Ë(#ŒÅ$·—~]º­¼žVÜG1T*ä¤åˆÎMtQxV=FêK]V9/.-|¹¿âlò?’„Œ€d;Bß0Æ nrMLžˆxsRÑTÔ$·¿iŒ’7•æ •‹HˆÀÁ,ÝA#wãê†ïíS ¹æšhÜùSùf'œÛ˜<Æ3ÊpGÝï·4§i_ âÔ-n4ýJÄÝÛHš=eÙ¶« Šyó(;@S‘ÐcUËX< ¦yœ:­œq›¹nb™õvhÚr¥daºB¥°Ç>™÷ª¾ðF©§ÝKu©ê÷;ü‡†!é;0(wy,u܃œ’*õïÃë ëY­ŸRÔcŠiži¹f·û9ëÇîò>¤ŸL�ni_Øóé²Ã¤Mm%Ÿ™"¿Ù% ªìÅœeO,O¶jtÓ,ãA ¶#m²‚qÛ³þîG>¦«hú(ÒñþÝuw%ä«4­p#0cÈŠʋ۵jP\æ³ÿ�!þ讎¹ÍgþBýÑ@>ÿ�«÷ó¢ ÿ�ÇÕÇûƒùÑ@å• …æ•‚Ç–f=�“\·ü,ßÐÅgùŸð®²¹KjW/O£ÛBnn.m-/‹‡ž *ÿ�»ù.C�ÜvÏ�Ÿð³|ÿ�CŸæÂøY¾ ÿ�¡ŠÏó?áY|HÔ&Ó,µÑ,íà»*®ofˆ h¤—$½°b27.åÉãšÚƒÅ× ¬Ães¤›hÞ3±Ÿ|‹û¯1°Š¤0äÀbÙçnÞhŸð³|ÿ�CŸæÂøY¾ ÿ�¡ŠÏó?áDßtf1E`ó\]=ä¯ ÛMˆÉ*!/¹>N#v7cŸgã‹CÄ?Ù¶ªÏ ¼»ƒŠ$,“¹Ú a† È àäàä`€3þo‚ÿ�èb³üÏøQÿ� 7Áô1Yþgü*x|}áÛ„á¹»‘dm¨WO¸;›Ë�?wÉ(CÔŽE>ßÇ^º’†ýÛÎ µ¬¡T¨rÁ˜®œ1 h]'Æž×o¦—«ÛÝ\O—9Àü+v³´MwLñœ5 &ínmKóJüèÁ�ŠÑ oX“~ Ã²(_ëýjœ1<ó$H2îÁGãSêYþÑ›?Þþ•£á‹a.¢Ó0È…r>§ýh«´¶K;Xàî Æ}OsSW”|FÒ>%ßx‡Íðä°éþLcjܤcx/»‚}Ö¸ïøFþ;ÿ�ÐNãÿ�¢ÿ��÷S]ÒtCoý©¨ÛY †)\HY€Î2x«±Kñ,°È’Fã*èÀ‚=ˆ¯‘>"é_¬-¬[ÆwSO ÈÂØ5ÊH7cœ<qŽi<áO‰†d›Ã–ºµ‚1Ïš\ÛÆÞçq‡ç@_Ö/‰?{f~Ó¨@1íyÇôˆÖ7‚ì<iÿ�ÂY¬iWI¹ ¹2þ.6¨ÿ�¾OÖ·5Ÿù xþÂÿ�¤ÓнQ@â¾'ÖšÞOý—X‹u«·’dñ=ż¶íöxÛ@ ©ýé`á“”à Ú¾¿ðèñ5ôø¶òÞ$Òl¤±ò5™™™ØÍ–H÷‘3XI6rñd€z…ä¾7þ¿=½Þ­r5(n¢–òµ¹’Kp-aw naO´3£d`d®:c¢ñ6§¤Xxÿ�EþÖ×›Ol.'h›S{hžD–+r‡ Üx î�ƒœPqEy^³âÄÔµ NãM×ãKxH¹¶e•Ñ#Cxé3È¡Æä(Aoº 2g 5©iâýgPÔt}> Ý+›ûK©KŸ8Ã0TxÇ™’G¹×‚@RrÀ�ô +Ìlþ!jahº¯‡ÒêçQû‘¡}®¯h'Õ ¡‡ÎDx'$‘Ÿ–º­7S×$ñ]ö‘ ·‘GqÌP²¬‘:‘·%ÎH­ÿ�9Í�t”QE�qÚdðiÖZŠÝKÚ_\’G ª­!uäð�¢¢ÿ�„ןô3è¿øÿ�S+Ú%ω%ºòÅ’]—Ê2V·l†5ÈOâ]+mĶ^³ž®ÚÜ<ñrqN>V‹*ÄÊ@Ü~\–Ôÿ�ÂkáOúô_ü‹ÿ�Š£þ_ ÐÏ¢ÿ�à|_üUfÿ�jxNU›ìúu»IöðKºsÄWÎ"4y œà‚GQÖ¡Äž–™`ƒÊnÛJ‘U–%� (CÔƒÆhcþ_ ÐÏ¢ÿ�à|_üUðšøSþ†}ÿ�âÿ�⪪ÝxZM. F-2¶ží,Ô<£ QYAP‚N:zÔ– á½bƒ¥iö3Ë %§”0;NQ°pàpqš�›þ_ ÐÏ¢ÿ�à|_üUðšøSþ†}ÿ�âÿ�â«–]zÙ|<u9ü!¥¤²iM«ÛD²«,¨Bà·” ¸/H$õêD2ø‰ ’Ý%ðvŽ­:Êȯ+ÂìPÄ»Ël‡s”(8×¥�uÿ�ðšøSþ†}ÿ�âÿ�â¨ÿ�„ןô3è¿øÿ�Xðj:Wö¾£iyá»8`³Wo2(|é–±äîÎFÂøÁ ´ñPÿ�ÂMàÙî¬#²²²šå•g™¬Z5·TŠIqd�0òðPØ9Æ({þ_ ÐÏ¢ÿ�à|_üUiiú¦Ÿ«BfÓ¯ío"S´½¼Ë"ƒé•&¸ûxbêëRé°ZÙ,Òd±ecQÀìÛ0F<þp#B/x^ÖÝâµûEº²È؇KOÈÛ€#ä«p}8Î(Þ¯{çÍä!ýÚ}ÍmøoLû<k•y ùì¿ýzát¿ørk¹$¸Ôqgonnä˜Á'–Ѽ†Ûƒþ±8?0Ív÷zõíռ#ek¬,é¾%É· ;•>ùoJ�èi * �±ÀÉêz×Í>6ø‰ñfȺßiòèVÙÆûkl®?ë©Ü3ô"¸ ø—Åmã[SO’ïVÖã/ä$ûŒäü¤Ÿl{PÚ´WÏÿ�ðžüjÿ�¡Oÿ�)ÒñUÒøÅŸ5_ÛÚx—Ãÿ�cÒÙÉ7ØÞ<¤¯ÌIq@·Y÷sïmŠ~Q×ÜÕ«—d€•ôÏ¥fPEPEP7Vöq‰.gŠ'¥p£>™5[ûsHÿ� ­þ'øÔzôz;éNú孵ŔL¬Râ0ÜNÕÂàå‰8ç­yü7^•¬äѾËq4ˆdkEWg’.ÅÁcÞUŠžp¡˜b€=ûsHÿ� ­þ'øÑý¹¤ÐVÇÿ�ükމ¾LÓ4z’ ·‚y®M#Ëx„^^ðQ¢*“ß‘€sÁæü4à`éáŽíªt å\FÁG•–eb$wØÿ�niô±ÿ�À„ÿ�?·4ú Øÿ�àBdØø_Áš•…½õ§†ôw¶¸e‰Î›îR2 ‚8õ«ð…xSþ…ÿ��"ÿ�âh÷öæ‘ÿ�A[üOñ£ûsHÿ� ­þ'øÕøB¼)ÿ�BÆ‹ÿ�€ñ4ÂáOú4_ü�‹ÿ�‰  {kË[Å-ks ê§Äá€ü« Yÿ�ÿ�tV¾Ÿ¤éºLm›§ÚY#œ²ÛB±‚}ÂYÏü„û¢€4|'ÿ�WîçEÿ�«÷ó¢€4‰�N�ï\ݧ‡ü5dÒ<¶éƒsê2¹O0’å 9ØÄ’K.OZè.&ÚQq³È(|Íÿ�wn9Î{b¸/±ü$þ÷„ÿ�ïüã@Ðü8,ôÛMÊmôÃþ‹½rå+ƒ–ùÆÒW ‘‚GCUì¼/áM>e–Ô,l€…oª’…2¾;Cc!p�XßcøIýï ÿ�ßø?Ʊü$þ÷„ÿ�ïüã@VÞð¥¢Ê US3Ã$­öé ;DTÆKÉÚTcŸ_S—Â9áuor¤G-´BLwò ]T�…–@=VØþ{Â÷þñ£ì ?½á?ûÿ�øÐ¢ø?Â)@»Ö$!•S˜"/$û΢1·>•I|¤E¬5Ì:…¤v‡?º;ž]¬KHžcHAG,ņÜüÇqˆ>Çð“ûÞÿ�¿ðcøIýï ÿ�ßø?Æ€;-2 (­”åÔþòå¦sÿ�f,>*ýrž·ðzo¶„ovœ}†XÙñŽxSž™®®€9Íb=šƒ7gPßÓúV߄Рk—î\Èõê–¹øaÕÐÿ�ŸÖ¯xL±Î½Ä™ý( ¢Š( R<o$HÏÊ3(%O·¥>Š(�¬Oâ+;ÃÇÙu wÏq`F?…mÕ=VÁu]"óOvÚ·0¼[‡UÜÈ÷h埢_¶§£[]J¡'*RtÁ*’²/àÁ‡áZ�QE�QE�QE�UK=6ÖÆk™ Y<Ë™<ÉZI^BO ÜNÕäáF�ÉÀæ­Ñ@Vv»¨¶•¢]]Æ¡çUÛ+¨¿‹�sºtV·úN¤÷A%¶¿º¹2o?+Ä]‘zö(óªw^ðµì²Ks‰V&F7ò ùDF ‡åJÆ€©àí´†§Ùøn-:üÄö0@Èn Á@lûŠæ¿±~Ï¿†¿ï¸¿Æ€4†|.ReÜß¾’9doíwÙÓù�3±�qœz Q½ðW†äÓ ­…ÂÚº•hŒ—“K•ŒEÊy£?º:ƒƒÖ£þÅøaÿ�>þÿ�¾âÿ�?±~Ï¿†¿ï¸¿Æ€54ÝL´Ð†•u}ð ’dHœÂ‘ee€Å”Pܱ9'œqVtý+ÃúT7X¼p­ÂßlHQœ*’ÙE›pN1X_Ø¿ ?çßÃ_÷Ü_ãGö/Ãù÷ð×ý÷øÐŒ~ð¬Zdúróm4ÙÃj³†1±}Êœch Á«7º7‡u"{ÖKƒ³Z(’ñʘ›°ÄáNã“•9±±~Ï¿†¿ï¸¿Æì_†óïá¯ûî/ñ  (<1ákt"$ £hœFRB³}¤¾T³(,F ’I¢? øN;cn±Cä´ÏpÈn܇‘ёٲß1*ì§9È8ì+7ûá‡üûøkþû‹ühþÅøaÿ�>þÿ�¾âÿ��Ò¸ðÏ…®§¼šr^KÈšÏöŒ£z0Ea÷ûˆ£BŒÓ×ÁÞ¸a*%Ä…FuÈRî$|bN78 }qY_Ø¿ ?çßÃ_÷Ü_ã]k ZÙºx},Vؾ\Y+»ßoz�ÉѾØÙj2‡™“‹)$rÔb8ÞS!$&©P¬ ƒž¹ïí-b²µŽÞ3ËA€d‘¤cîY‰$û’MfV¼ÞlY?xphRzƒX±ø?Ãkpë0h¶Pj0îÙq B6åJœíÆx$sšÛ¢€ (¢€A¬¹â0ÈGðžA­JŽx„Ñ•ïÔ�Ê¢”‚¤‚0E%�QE�U¿†Òâ×ʾÙä—V›nX2{TŽâ°ŸÃyüæ~ó!Åü€3\‘¿ÌÃ?t’F+_XÓt­RÍmõ‹kk‹`á‚\�WpžüšÃÿ�„3ÀŸôÑïÚP�¾ðŠÇ:�vÜBÐKJc½ `O™ÜE>¡@ªº·ƒ4èm.áŠE’Fawq5ÄN²6ù§š¿y±Á¨«_ð†xþ€º/ýûJ?á ð'ýt_ûö”±¥}—MÓ ³mJ9Ì@ìê8É ž€p:œ’O5síÖŸóõýüÍÿ�ÂàOúè¿÷í(ÿ�„3ÀŸôÑïÚPIöëOùúƒþþ >Ýiÿ�?PßÁ\ßü!žÿ� .‹ÿ�~ÒøC< ÿ�@]þý¥�u1ÍÀ˜¤G©V¹ýgþBýÑZ6•£iPÉiio]m”�O¾+?Yÿ�ÿ�tP„ÿ�ãêãýÁüè£ÂñõqþàþtP„q;Êʱª’ÌÇ�äûW9ÿ� ?‚?è9áÿ�ü ‡ük¢•£X]¦(" K—?(óžÕËlü=óðÇýÿ�·ÿ��±ÿ� ?‚è9áÿ�ü ‡ühÿ�„ŸÁ?ôðÿ�þÃþ5_ûgáïý¼1ÿ�íÿ�ÆíŸ‡¿ôðÇýÿ�·ÿ��±ÿ� ?‚è9áÿ�ü ‡ühÿ�„ŸÁ?ôðÿ�þÃþ5_ûgáïý¼1ÿ�íÿ�ÆíŸ‡¿ôðÇýÿ�·ÿ��±ÿ� ?‚è9áÿ�ü ‡ühÿ�„ŸÁ?ôðÿ�þÃþ5_ûgáïý¼1ÿ�íÿ�ÆíŸ‡¿ôðÇýÿ�·ÿ��ÔÓu¯ ßÝyZ^§¤Ü\cîZϾ>Šs[…¤ê¹¼ £^h²Ý`ál剟þéÍnÐde‘ÆU†ª¾V²Ô®lßøÔ2Ÿ\úÿ�J¹L1:)—‰"lƒíÜ~"€7(¤RC‡šZ�(¢Š�(¢Š�Á…?±|I2-–¬Þbz%È\0ÿ�ª‚=Ñ»°­ê«¨XÅ©YIk6à]«)ìÀ€AõOGÔå¥Óµ ©ªZæ€0³!ÈYSý–ÇOá9²@5¨¢Š�(¢Š�(¢Š�(¢Š�+—Õjþ#‚ÝNë]-¼Ù¸á®~Eÿ�€«>îÅhkºÃجVVJ²jw@ˆò¨Þ‘ÿ�Ù\© MU°²O´[xÙœ‚Yäs–‘ÉË;ä’I Ý­«ZÈ·‚nGÎ&f=óÅ`ý“Á?óïáÿ�ûâÞ»†ÚâÖH¯"Š[v:L¡px¬øF<ÿ�@?ÿ�à$?á@Ù<ÿ�>þÿ�¾!£ìž ÿ�Ÿÿ�ßÑÿ�Ç‚èáÿ�ü‡ü(ÿ�„cÁ?ôðÿ�þCþ�}“Á?óïáÿ�ûâ>ÉàŸù÷ðÿ�ýñ ðŒx'þ€~ÿ�ÀHÂøF<ÿ�@?ÿ�à$?á@Ù<ÿ�>þÿ�¾!£ìž ÿ�Ÿÿ�ßÑÿ�Ç‚èáÿ�ü‡ü(ÿ�„cÁ?ôðÿ�þCþ�}“Á?óïáÿ�ûâ>ÉàŸù÷ðÿ�ýñ ðŒx'þ€~ÿ�ÀHÂøF<ÿ�@?ÿ�à$?á@Ù<ÿ�>þÿ�¾!­m.=*8i)dîù… P¹÷ÛÆk'þÿ�ÐÃÿ�ø øV¶—a¥iöí“igm l²ÚF¨¤û…ã4z¥‚S »t5² ÐÑU,¦Èò˜ò:Uº�(¢Š�(¢Š�§yüµQþõR­’†²î!0Éá<Š�ŠŠ(  Z¦‘§kV¢×S²†î�áÄs eÜ2ÁúšÈÿ�…}àÿ�úôÏüZÔÖ4M7_³z­œwVáÄ‚93Àêkþ—‚ÿ�è]³üøÐøWÞÿ�¡oLÿ�Àu£þ÷ƒÿ�è[Ó?ðj¿ü+/ÿ�лgùñ£þ—‚ÿ�è]³üøÐøWÞÿ�¡oLÿ�Àu£þ÷ƒÿ�è[Ó?ðj¿ü+/ÿ�лgùñ£þ—‚ÿ�è]³üøÐøWÞÿ�¡oLÿ�Àu£þ÷ƒÿ�è[Ó?ðj¿ü+/ÿ�лgùñ£þ—‚ÿ�è]³üøÐî—¢iz$O—aogœ²ÂA?…eë?ò?îŠÑѼ?¤ø~!Òlb´ŽB ,yÁ?Ö³µŸù÷E�høOþ>®?ÜΊ<'ÿ�WîçE�hHc9”¨Œ)Ü[¦;çÚ¹ÁwàŒqqáì¿ u­§»)VòÊ‘‚B?*ço¬´=>äÛˤZ�’Ù1@~×àŸùøðÿ�ý÷ kðOüüxþû†ÿ�ÿ�ýíÿ�ð:?âŸÿ� =¿þG@ û_‚çãÃÿ�÷Ü4}¯Á?óñáÿ�ûîwüSÿ�ô·ÿ�Àhèÿ�Šþ€öÿ�ø �7í~ ÿ�Ÿÿ�ßpÑö¿ÿ�ÏLJÿ�ï¸ißñOÿ�Ðßÿ�££þ)ÿ�úÛÿ�à4tkMŸÃR]ÒåÒZãÕ£/Žÿ�wšØ¬+{ÒO2ÛNHdÆ7G)üÅZþܵÿ�žs~CühNŠÌþܵÿ�žs~Cühþܵÿ�žs~Cüh~ÎùdÇýÓý*írÛ¶ßÜ›òãZzˆmn¤9ds÷YÀ�ûuë@4QE�QE�™¬h멤3C1¶Ô-‰kk¤1“ÕHþ$l`©ëì@#NŠ�ÀÓ|J­tºf±ØjyبÍû©Ï¬lzçû§ž½@É߬ÝcD³Ö­L7Q«q€JƒùŽâ¹ <Cágò­îEŧðÁzZEú$¹Ü¿C¸ÀPErVþ;€�5.öÔ÷x—íþ>Í]_xq¾þ¤°ŸIâxäê( ¢¹çñLJîêk1ô‚'”þH¦©Ï㸕Óô»ë£ÚIP[ÇøïÃþHh­¬=C_ÄÒYi(——Êv¹Ýû«sÿ�Mwÿ�`|ÇØŽb}Jÿ�V?ñ5¹x­ü¹Ø1O³É÷ÛðØpjý¾«giAmgäƒ ˆ�ðwOÓE›M<Ó5ÍõÁÝ=̃æEøTvQÀ÷$“z²·¢ÿ�ž/ùŠ?·¢ÿ�ž/ùŠ�л†ÚâÖH¯"Š[v:L¡px¬øF<ÿ�@?ÿ�à$?áVn5[;Ëw·¹²Âã ªX{ƒÁ¬ìÿ�Ð¥¤à ?üM�_ÿ�„cÁ?ôðÿ�þCþÂ1àŸúøÿ�!ÿ� ¡ýàÿ�ú´ü‡ÿ�‰£ûÁÿ�ô)iøÿ�@ÿ�áðOý�ü?ÿ�€ÿ�…ðŒx'þ€~ÿ�ÀH¨cø?þ…-#ÿ��aÿ�âh?ƒûøKIÿ�Àøš�¿ÿ�Ç‚èáÿ�ü‡ü(ÿ�„cÁ?ôðÿ�þCþGûÁ¿ô)é_øøQýàßúô¯ü�‡ü(÷ü# ÿ� ‡ÿ�ðð£þÿ�ÐÃÿ�ø øUìÿ�Ч¥à?áGö?ƒèSÒ¿ðð  ßðŒx'þ€~ÿ�ÀHµ´» +O·h´›K;hKe–Ò5E'Ü/®oûÁ¿ô)é_øøV–Ÿs¤i0˜tí.8˜î)o F¤úáq@•ý»üò“ô£ûvùå'é@ÊÅX0ê+V)±†r«®[–�Ç õãŠèíbdƒ«FÃ#ýèÕQ@Q@G<BhÊ÷ìjJ(‚¤‚0E%]»€·ïd÷¨I"BÁeuByÃPMSH°ÖmE¶£n³Â8F$|Àž¹¬ø@<-ÿ�@ˆ¿ï·ÿ�ßûLóÚ?ûèQö˜?ç´÷Р ø@<-ÿ�@ˆ¿ï·ÿ�?á�ð·ý"ÿ�¾ßükí0Ïhÿ�ï¡GÚ`ÿ�žÑÿ�ßB€0?á�ð·ý"ÿ�¾ßühÿ�„Âßô‹þûñ­ÿ�´Áÿ�=£ÿ�¾…iƒþ{Gÿ�} �Àÿ�„Âßô‹þûñ£þ Ð"/ûíÿ�Æ·þÓüöþú}¦ùíýô(®•¢iÚ$Oj¶èç,““øšËÖä ݽö˜?ç´÷Ь ]Õï‰F 6ŽAÍ�ixOþ>®?ÜΊ<'ÿ�WîçE�uuÆx‘µv!X‹ÐWgE�y·•'üóoÊ*Oùæß•zMæÞTŸóÍ¿*<©?ç›~Ué4P›yRÏ6ü¨ò¤ÿ�žmùW¤Ñ@måIÿ�<Ûò£Ê“þy·å^“E�y·•'üóoÊ*Oùæß•zMæÞTŸóÍ¿*<©?ç›~Ué4P§k—¶`G,o<#³¸} t¶šµêþíÊ·÷m?ýz¹E�QE�QE�É"ŽhÌr"ºªÃ"ŸE�s×¾ŠB^ÒO(ÿ�qù_ϨýkãDÔ-ÍnÎ=cù¿•w”Pš2²œ0 úI^“$QÊ1$hãцjìëùó·ÿ�¿Kþç”W¡ÿ�gXÿ�Ï•¿ýú_ð¥þϲÿ�ŸKûö?€<îŠôO°Yÿ�Ϥ÷ì…`³ÿ�ŸH?ïØÿ� �óº+Ñ>Ágÿ�>ß±þŸÙÖ'­¿ýú_ð <¢½û>Èt´·ÿ�¿cü)~Ágÿ�>ß±þçtW¢}‚Ïþ} ÿ�¿cü(û—üúAÿ�~ÇøPÑ^‡ýŸeÿ�>vÿ�÷éÂìû/ùó·ÿ�¿Kþç”W¡ÿ�gÙÏ¿ýú_ð£û>Ëþ|íÿ�ïÒÿ�…�yåèÙö_óçoÿ�~—ü(þϲÿ�Ÿ;ûô¿á@yEzö}—üùÛÿ�ߥÿ� ?³ì¿çÎßþý/øPžWWáKÌŒÙJß: ÆOqéøVÇö}—üùÛÿ�ߥÿ� rYZÆáÒÚaÑ–0  袊�(¢Š�(¢Š�+7ZÓF£dBßGóF}}GãZTP™A ŒEwsèZ}Ìï4îrØb2j?øG4Ïùâß÷Ù "Šíÿ�áÓ?ç‹ßføG4Ïùâß÷Ù "Šíÿ�áÓ?ç‹ßføG4Ïùâß÷Ù "Šíÿ�áÓ?ç‹ßføG4Ïùâß÷Ù "Šíÿ�áÓ?ç‹ßføG4Ïùâß÷Ù  Ÿ ÿ�ÇÕÇûƒùÑ[öZ]­ƒ³Û¡RÃ,MÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/GRu.jpg������������������������������������������������0000664�0000000�0000000�00000040615�15030617045�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ� "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦MÍ‘;:«©RQÊ0vaÈ>ã‘@¢¾~ðˆ.îá Ž÷[Öí/練Y/n爛ÞùW_³ìg*®p£8{–ÙÚ|CÕïµ ‹;C¤]M%´·vË�b©Ý$ LŒáf, §Ì›sÈ4éÔWŽj5í3^¸•î,¯-lô ïšÞWˆI(º0€C1ee+Èç8ç†7ž5ñM†•¡Ïue§ÛϨkQ阑CŽTÝÀG3„Á꥛#œŒŠ�ôª+Î>$I¨Ã§ø5fÔgµº¹×-,ï[N¹–Ý$Iy€m`q•ÉÈõ®n_ŠÞ"±šîÏìú\Ÿf›U´ŽC§-eÊæBHu;qœçœž”ítW˜ë¿ïtïéz´M¥ÅæèɪÜÁ(yd%¶*Æ¡H(¬ï·Ìl€qÇZO øëÅÚ®§}6£¢Çm¥ZYOs [IUüÔ‘Ð@²³ìs…ÜYTŽ£�Š�ôú+ð‰5¯ém}ªéðÛA,QOi$L˜‘\®Ñ#Ÿ”Œnm¤çî©W_@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@…ã_ éryw¾!Ó “8Ø÷I¸~ÍTÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê(®_þG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ê)’ÅÄ/ Ѥ‘H¥]AVSÁ¢¹¯øY ÿ�¡£Jÿ�À•£þG‚¿èhÒ¿ð%húxGÃQ@Gáí%!I|ål£ ²cÀÛ€ØïÖœ<)áÁ¿•óîÝþ‡͸‚sÇ9 ô¬ïøY ÿ�¡£Jÿ�À•£þG‚¿èhÒ¿ð%hb-F„ÄbÒl#1BmãÙlƒdGª8SÜt¨O…¼<m­í΃¥ùÎd‚/±Ç¶&8Ë(Æð9•›ÿ� #Á_ô4i_ø´ÂÈðWý Wþ­�lêz“­,kªévWë&1un’„'®7Ž‚©xYF†´`>nŒ_Ä0ßÃÜp}j¬<4©^%ÓG!UáIbz�;šY~!ø: Z)¼I¦Ç"2<à>„�¾þðô‘Cè:[Gf(ÙÆDhNJ¨Ç�’rsÞøxš§cwçi ÙïÚöZbÛMq¹Jþþ@çxù³€n�öþG‚¿èhÒ¿ð%hÿ�…‘à¯ú4¯ü Z�ݰҴí,J4û [13ï[±ïoS€2}êÝrÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+Gü,ÐÑ¥àJÐQErÿ�ð²<ÿ�CF•ÿ�+V¬|mámJ_*ÏÄZ\Òqn“qú äÐõg#"Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Âñg‹4Ïè©êNvçd0§/4‡¢(õþUÄÁáüD yã ÙtOš=ÉŠ;/o9úçÔè&[ÿ�ÂÁøâkäèÚ­e¤ÄÙ*Ó)Ë̓Ôç?Në^§@‡Ãi˶ iÎ1ôˆ¼óùɺ® àÿ�ú4?üCÿ�Ä×AE�sÿ�ð‚x?þ…Mÿ�Ðÿ�ñ4 àÿ�ú4?üCÿ�Ä×AE�s’ø'Ávð¼Óxc@Ž(Ô³»ØBTrI%x—c§ü,Ôî–ÖÂÓÁ×w ÷b·ŽÖG?@k´šE† %uvTRÄ"b�죒}‡&¾ðuž¹c¦ø*×ZðÞ¡s¥XÝÈíéÓ%ŕϘì’7xðÀñÆsœ•€=þOÿ�Щ¡ÿ�àºþ&øA<ÿ�B¦‡ÿ�‚èøšóK¼·7ÚÐfÔÖ=RÒIÆÛ_;>d‡*~L Bªqœò2X—Zþ§¦Ï-µæ½q‡ŽÒQm<æUÓÔ(e`§q޹ “êhÓ%ð‡¡¹‚Ú_øv;‹ÞLMe�i6Œ¶Ñ·'“Ž•7ü žÿ�¡SCÿ�Át?üMx”öÞ*¹Ð|%=Å·ŠßX´±Õ–æo*ìÈ’²Éöo˜¤•‘€xº‰lü\ñøq×R×ìâ»°Y®¥k{‹—†û ´jêU>VÀ|Ç–lŽA�Ìžø}©—.‰á„Ô&MñZ5­¸•מU1’>VäÇÒ—QðÏÃí"Ü\jz'†l¡'h’æÒ×>™`yö…câñõ=rÛX—PŠçT”’E3Ãe)Î6¤dmÆ8ï]޽ou§üOÓ<Eugwy¤G¦IjŸf·iÚÖàÈÌØ€·ÌŸ.@8Ç4­màïÞۭů†ü=</²Ec +`àà…ÇPj_øA<ÿ�B¦‡ÿ�‚èøšâ<\ºÒ](Ò,µ«=!´«‡°‡MŠHÜjM!e2¬|„ ç…äîæ¹Ö—Ç1ø—7ð’ùcSÓVq w-–ð0½)‚@0G Á\P¬ÿ� àÿ�ú4?üCÿ�ÄÑÿ�'ƒÿ�èTÐÿ�ð]ÿ�^+w©ø­<;àë{«¯E¬ÜÙê°Ï�7 4ÒÆ¥íÎÎ `²|Øäd@5»§ÿ�Â{ö«Oíí¯íQ¨§Û>Ïç}“û3Éöìù<ÝÙÆßÞné@›ÿ�'ƒÿ�èTÐÿ�ð]ÿ�Gü žÿ�¡SCÿ�Át?üMxöqñtùP/ˆô¾”¦Å6Õ»[– ƒ Ú¯äRGRjίŠâ‹O[ ïÝ,¶z‹Jc³½ƒÉ>@kxÈgv,& †-’>î2êçÀÞ ø[AÜA gÃ’_á÷/ü žÿ�¡SCÿ�Át?üMy›Yë÷Zþ“©Ý¯ˆafð¤Íq–ïÎO5†•N@ÁÇÌ¿0½KÂM3xjÔÏìNZO’öI\y‚L€>Á†à¤È4ü žÿ�¡SCÿ�Át?üMð‚x?þ…Mÿ�Ðÿ�ñ5ÐQ@ÿ�ü žÿ�¡SCÿ�Át?üMð‚x?þ…Mÿ�Ðÿ�ñ5ÐQ@Õׂü+kg5Å¿†´hgŠ6xäŽÂ%d`2!r<æ›gàß ÞÙCsuá½{‰P<’Ëc3±êI+’k{Rÿ�]ßýqýÓ4ŸùÚÿ�×%þT—ÿ�'ƒÿ�èTÐÿ�ð]ÿ�Gü žÿ�¡SCÿ�Át?üMtP?ÿ�'ƒÿ�èTÐÿ�ð]ÿ�Gü žÿ�¡SCÿ�Át?üMtP1wáéöÏs{áßÛ[ ËË5”«õ%p)š†<«[ý£Mм3yqæ[ZA"çÓ*ª^9Óo&ñ…uai5ö•¦ÝK%í¬(dl²mŽPƒ–ØÙ8�žzW9­[ß\ê3ñF¡¥é¿ðŽº,Œ²ZK=Ü{¤YB®6€$ äõ å¼ àÔo h*2NŸäœáõ¨­ü!àkÏ7ìÞðìþL†)|«(cŽªØ^wšò+ëšV“wp5ëÍ,êú=ÀfiÌ… ®\s»Ëm*Ày\V–“iâ 6¸[xŠMâ]B[¿³Çp· ‰>ÎËÞ”,Hü{Щ àÿ�ú4?üCÿ�ÄÔžð.i%Ýï‡|;mmËÍ=”Š3ŽX®xæ¥'Ĉôòd%þÒ] ÙRáÝ‹µ�|£io³Ÿ˜ <ŠÝkÍ~òË_Š]3Å o}¢j°Ï!k—“l1ˆ‚• œùHnyS@‘ƒ|qkÔðô¶ò ‘%KYÈ`Bà‚9ÍT°Ð¾j³I¥xRòXó½-ííä+Œ ãfj:±¨ü·ÑlH5VÑ­¢ò\l|ª&øÈ8Á 2óëU¼Ew=ö¥ÉáýV²ki ‚üÇc,XîlPœcò¯ú¼ð§8 ³þOÿ�Щ¡ÿ�àºþ&øA<ÿ�B¦‡ÿ�‚èøšòDøã÷+ñH·a«}œÆ.¼Ï³ˆóeæã‘'˜Þù±€ÜƒRÖ<]eàÏ^ß\ø†Îx­ô››9§Âb#[¤€1½È)ÓÐq@Ëÿ�'ƒÿ�èTÐÿ�ð]ÿ�Gü žÿ�¡SCÿ�Át?üMyÜð–‹[1¨ÂB|;ý³|$ò>Ñöÿ�²íÿ�FÎßÞã~ì÷ÆÜñ\Î¥'Ĉôòd%þÒ] ÙRáÝ‹µ�|£io³Ÿ˜ <Š�ö¯øA<ÿ�B¦‡ÿ�‚èøšFð7ƒQßÂÚ ªŒ’tø@þù¯<Ö‡‹n5\=æ½�Ltëk;;’&¡ýÎ×GÚŒ²`‘³PIRBàÝAãWÀþ0±¸·ñóKg¥ÍkñO–¢}­Spän-”qÀâ€=‹þOÿ�Щ¡ÿ�àºþ&øA<ÿ�B¦‡ÿ�‚èøšÇð²ÜÇâËÈßûr[*R²Þ›…˜»¬™F`¹ÚèrTãqÉî(Ÿÿ�„Áÿ�ô*hø.‡ÿ�‰£þOÿ�Щ¡ÿ�àºþ&º (Ÿÿ�„Áÿ�ô*hø.‡ÿ�‰ªwÿ� |©&Ùü1§ Æ3o€þiŠë( -›Ã>,øvwáéµ­3ºMõ·H‰ßÉ“¯Ð~Œk¶ð§Šô¿è©©ér1MÅ%ŠA‰!qÕXv5¹^[âaðûâ%‡‰ìWÊÑõÙÖÏW…GȲ·Ü›Ž‡$äý{µ�z•Q@Q@Q@Q@Q@exšõôß kñ±W¶±že+ÔBF?*Õ®ÇòO<Kÿ�`«¯ýÔ™ðšÊ;…Úq¢¯™oç6;—%²:ìë—øoÿ�$×ßö‹ÿ�AÔPEPEPEPY:†ô¯-ØÒà’y9¸Ÿ}Ä’ï”õo'¾:Öµ�QE�QE�QEZm:ÆæöÞö{+yní·y¼JÏჵˆÊäuÅY¢Š�(¢Š�(¢Š�(¢Š�(¢Š�­©È.ïþ¸¿þ‚išOü‚më’ÿ�*~¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü¨åQ@Q@Esmå´–×PÇ<©I"•+©ê<RÑ@[ÛÁimµ´1ÃJ8£PªŠ8�ÀÒ¥¢Š�(¢Š�(¢Š�*µöŸeªZ5¦¡gowlä†â%‘#*AjÍ�€���t–Š(�¢Š(�¢Š(�¢Š(�¢Š(�®?⦛©ðÃ_…×w•j× ìcùóÿ�Ž×a\ÿ�Žÿ�äžx—þÁW_ú)¨Ç„õÕ¼¢ê¶énla–CœüÌ€·ëšØ®_á¿ü“_Ø>/ýWQ@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ�ÿ�É<ñ/ý‚®¿ôSP†ÿ�òM|9ÿ�`ø¿ô]Erÿ� ÿ�äšøsþÁñè"ºŠ�(¢Š�*–±¨eiWþQ˜Áqm»¦{UÚÅñoüŠz—ýq?΀ý§®ÿ�Ð üüEÚzïý� ÿ�Àñÿ�ÄV­•ý§®ÿ�Ð üüEÚzïý� ÿ�Àñÿ�ÄV­•ý§®ÿ�Ð üüEÚzïý� ÿ�Àñÿ�ÄV­•ý§®ÿ�Ð üüEÚzïý� ÿ�Àñÿ�ÄUŸí}7ûFM;ûFÓíÑ'™%·œ¾j'1\äG>ôë JÃUµZuíµå¹%D¶ò¬‰‘ÔeISûO]ÿ� ø?øŠ?´õßúAÿ�ãÿ�ˆ­Z(+ûO]ÿ� ø?øŠ?´õßúAÿ�ãÿ�ˆ­Z(+ûO]ÿ� ø?øŠ?´õßúAÿ�ãÿ�ˆ­Z(+ûO]ÿ� ø?øŠ?´õßúAÿ�ãÿ�ˆ­Z(Ž“«\ß^^Z]Ø‹Y­„lBÌ$ 8çûµ«Xzgü:Ïýr¶þO[”�QE[Rÿ�]ßýqýÓ4ŸùÚÿ�×%þTýKþAwõÅÿ�ôLÒäkÿ�\—ùPÊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüwÿ�$óÄ¿ö ºÿ�ÑM]sþ;ÿ�’yâ_û]覠 ÿ� ÿ�äšøsþÁñè"ºŠåþÿ�É5ðçýƒâÿ�ÐEu�QE�QE�QE�QE�W?ã¿ù'ž%ÿ�°U×þŠjè+Ÿñßü“Ïÿ�Ø*ëÿ�E5�Wøoÿ�$×ßö‹ÿ�AÔW/ðßþI¯‡?ìþ‚+¨ Š( ±|[ÿ�"ž¥ÿ�\Oó­ªÊñ%­Åï‡/í­b2Ï$D$a€,}2H™  ÔVWö®¡ÿ�BÖ©ÿ�-øõÚº‡ý Z§ýüµÿ�ãÔ«Eejêô-jŸ÷ò×ÿ�Qý«¨еªßË_þ=@´VWö®¡ÿ�BÖ©ÿ�-øõÚº‡ý Z§ýüµÿ�ãÔÈkÞ:÷/ç´[«VÓOµ“NÔ¾Ìâ%•}è_X’0Ë“‘ŸîœrÚƒø®ËÃñ¤ZF»¨±ßܬy‘mÖâKÇ+ʼª’á_åeé’kÖ?µuúµOûùkÿ�ǨþÕÔ?èZÕ?ïå¯ÿ� )Õ®<Qÿ� Ýì–#ÅÙGZ±…ŠëËû3Äâè€GÝ Ý<®*%üw}¢øjë½vÀ¤¤÷aq,¢äM˜üÅVBÊcÚ>äääg‘ëŸÚº‡ý Z§ýüµÿ�ãÔjêô-jŸ÷ò×ÿ�P­•ý«¨еªßË_þ=Gö®¡ÿ�BÖ©ÿ�-øõ�jÑY_Úº‡ý Z§ýüµÿ�ãÔjêô-jŸ÷ò×ÿ�P­•ý«¨еªßË_þ=Gö®¡ÿ�BÖ©ÿ�-øõ�gü:Ïýr¶þO[•…¢ÇxúƧ{s§ÏgÉ F³<lÍ´6OÈÌ;ަ·h�¢Š(¶¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü©ú—ü‚îÿ�ë‹ÿ�è&™¤ÿ�È&×þ¹/ò  ”QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÏøïþIç‰ìuÿ�¢šº çüwÿ�$óÄ¿ö ºÿ�ÑM@þÿ�É5ðçýƒâÿ�ÐEuËü7ÿ�’káÏûÅÿ� Šê(�¢Š(�¢Š(�¢Š(�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µ/ùÝÿ�×ÿ�ÐM3Iÿ�M¯ýr_åOÔ¿äwÿ�\_ÿ�A4Í'þA6¿õÉ•�\¢Š(�¬ubò[¯±év- 7@k÷Fm§í°™­úÁðÿ�ú­GþÂ7ú  >Ûâ/úiø2“ÿ�ŒQößÐ+Kÿ�Á”Ÿüb´è  ϶ø‹þZ_þ ¤ÿ�ã}·Ä_ô Òÿ�ðe'ÿ�­:(3í¾"ÿ� V—ÿ�ƒ)?øÅmñý´¿üIÿ�Æ+N³u/hš4É©¬éö2ºîTººH™‡L€ÄdP}·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� V—ÿ�ƒ)?øÅ_‚xn IíåIa‘C$‘°e`{‚:Š‚×TÓï®nm­/­®'µ`·E2»BNp•<¾†€+ý·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� V—ÿ�ƒ)?øÅh4±¦ýΣbîlœmò}¸?•>€3>Ûâ/úiø2“ÿ�ŒQößÐ+Kÿ�Á”Ÿüb´è  ϶ø‹þZ_þ ¤ÿ�ã}·Ä_ô Òÿ�ðe'ÿ�­:(3í¾"ÿ� V—ÿ�ƒ)?øÅCy«köVSÝI¤i¥ ¤`º”™!FN?qí[5Ÿ¯ÿ�ȹ©ÿ�פ¿ú  ö_nÓ­nölóáIvç;w�qŸÆ¬Vvÿ�"Þ—ÿ�^‘è´h�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ�ÿ�É<ñ/ý‚®¿ôSP†ÿ�òM|9ÿ�`ø¿ô]Erÿ� ÿ�äšøsþÁñè"ºŠ�(¢Š�*¶¡}™§Ï{q»É ¾ÅÜp=sVkÅ¿ò)ê_õÄÿ�:�OøI ÿ� n­ÿ�€2…ð“Aÿ�@Ý[ÿ��dÿ� Ô¢€2ÿ�á&ƒþº·þ�ÉþÂMýuoü“ü+RŠ�Ëÿ�„šúêßø'øQÿ� 4ô Õ¿ðOð­J(/þh?è«à ŸáGü$ÐÐ7Vÿ�À?µ(  ¿øI ÿ� n­ÿ�€2…ð“Aÿ�@Ý[ÿ��dÿ� Ô¢€2ÿ�á&ƒþº·þ�ÉþÂMýuoü“ü+RŠ�Ëÿ�„šúêßø'øQÿ� 4ô Õ¿ðOð­J(/þh?è«à ŸáGü$ÐÐ7Vÿ�À?µ(  ºn³mªKq 1ÜÅ-¾Ó"O F@làóס­ÃÓ?äiÖë•·òzÜ Š(  Ú—ü‚îÿ�ë‹ÿ�è&™¤ÿ�È&×þ¹/ò§ê_ò »ÿ�®/ÿ� šf“ÿ� ›_úä¿Ê€.QE�V‡ÿ�Õj?ö¸ÿ�ÐÍoW1c&¥¦É}h7ó«ÞM*I¶ûYY‰æ”ž¢€: ++ûWPÿ�¡kTÿ�¿¶¿üzí]Cþ…­SþþÚÿ�ñê�Õ¢²¿µuúµOûûkÿ�ǨþÕÔ?èZÕ?ïí¯ÿ�  ZóÏÁ<ß¼2Yêml/æâÚÍæX„±„MÄ+/'9ÏAÉÀæºïí]Cþ…­SþþÚÿ�ñê?µuúµOûûkÿ�ǨÎ|Y¦_øSL´Ñ|+eâc±ÓekAhòšv”|ÎÈ>g\»ìpŽ$ ÇÕí|M/Ä_Þé°êö:5íÍšÍw…ÆòÝÔ2¢‘Õ_®ÓéG׿µuúµOûûkÿ�ǨþÕÔ?èZÕ?ïí¯ÿ� ñ‡|E5§@ƒY¼»žËK³*J¢ä�¾x ’çg;r@®ËÃÐøˆüA»këÝN¤amm%´òE5©ˆÌ¥üµpÃ'+朒ö®¡ÿ�BÖ©ÿ�møõÚº‡ý Z§ýýµÿ�ãÔ«Eejêô-jŸ÷ö×ÿ�Qý«¨еªßÛ_þ=@´VWö®¡ÿ�BÖ©ÿ�møõÚº‡ý Z§ýýµÿ�ãÔ«Yúÿ�ü‹šŸýzKÿ� ‹ûWPÿ�¡kTÿ�¿¶¿üzªj—šæ‘{k†õ?2h5Ý-¨*@Ïï½è[@ÿ�‘oKÿ�¯H¿ôZ5KG‚K]ÂÞeÛ,VÑ£®AÃ�Ž*í�QE�ÏøïþIç‰ìuÿ�¢šº çüwÿ�$óÄ¿ö ºÿ�ÑM@þÿ�É5ðçýƒâÿ�ÐEuËü7ÿ�’káÏûÅÿ� Šê(�¢Š(�¢Š(�¢Š(�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@bø·þE=Kþ¸Ÿç[Uâ¸ä—ÂÚŠE’Èa;R$.Íô“øP“ÿ� —üûê¿ø*ºÿ�ãtÂEeÿ�>ú¯þ ®¿øÝ�kQY?ð‘YϾ«ÿ�‚«¯þ7Gü$V_óïªÿ�àªëÿ�Ð%ãQ$ß|§ÿ�hêÖwÉz·QZßK¸Ž ÈNÆ‚O=ú+–>$ñ#h:/•«—‹þ¦Ay bn탎ÅYw/ þ,F9ôMKþ}fd›Tðô·Ò¢íWºÐ&•”uÀ-À§]?†o¡·†ó@šâ+oõ 6ƒ;¬_îƒËÐtô 1_>"öƒØée¿³Q@0/>Êé÷úŸ¼n„7Zî´ïkºÇŒu=6ÓN·M6ÎâK6¹©1H"Þ®Gšƒ¡ïêŸìïìÙÿ�’lÛ³oü#rãnwcýOLó^jØ ‰Ìã@˜Laû9“û}Æ,cf|¯»Ž1ÓçÚÅ_ë—ZeºYi‹öí8Þ—Žv‹dÒDÀFe\”h €OÞÆ ë^>Ö´¿ˆš<0\ÚÝC«èö‚‚O²Å$Óó™Kr>öÊpÊ3ÔžÓû7ÁUá »�ÿ�„n^9Çúž™$þ5fAái¤–I|;#É4" ´ ‰xÆ0„ù\¨Ú¼8”ÂÞüUñ »c¶Ó ‘¶©ÈÐÈRI,£ó<ÄýçÜqòã’''¥uš‹5]^ÿ�H{…±¶²Ô-â‘#³´ŒÖÞs(>ÏÈËÊ)`Ç µ%·„%XVO oXc1DÃÓåW÷\“Àõ5-¡ðÅ…Ìw6~–Þâ4òÒXt Ñ•zmE=¨¨¢²á"²ÿ�Ÿ}Wÿ�W_ünøH¬¿çßUÿ�ÁU×ÿ�  j+'þ+/ù÷ÕðUuÿ�Æèÿ�„ŠËþ}õ_ü]ñº�]3þFgþ¹['­Êçô9¾×®ê×iÔpº@¨×ÒC¸€ùÀuã"º �(¢Š�­©È.ïþ¸¿þ‚išOü‚më’ÿ�*~¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü¨åQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ�ÿ�É<ñ/ý‚®¿ôSP†ÿ�òM|9ÿ�`ø¿ô]Erÿ� ÿ�äšøsþÁñè"ºŠ�(¢Š�(¢Š�(¢Š�(¢Š�+Ÿñßü“Ïÿ�Ø*ëÿ�E5tÏøïþIç‰ìuÿ�¢š€+ü7ÿ�’káÏûÅÿ� Šê+—øoÿ�$×ßö‹ÿ�AÔPEPEPEPEPEPEPEPEPEPEPEPEPmKþAwõÅÿ�ôLÒäkÿ�\—ùSõ/ùÝÿ�×ÿ�ÐM3Iÿ�M¯ýr_å@(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+Ÿñßü“Ïÿ�Ø*ëÿ�E5tÏøïþIç‰ìuÿ�¢š€+ü7ÿ�’káÏûÅÿ� Šê+—øoÿ�$×ßö‹ÿ�AÔPEPEPEPEP\ÿ�Žÿ�äžx—þÁW_ú)« ®ÇòO<Kÿ�`«¯ýÔ_á¿ü“_Ø>/ýWQ\¿Ãù&¾ÿ�°|_ú®¢€ (¢€ Šââ Ky..fŽ#RÏ$ŒTz’x¥¬_ÿ�ȧ©×üèÿ�ð•øsþ† +ÿ�#ÿ�?á+ðçý WþGþ5¡E�gÿ�ÂWáÏú4¯ü ühÿ�„¯ÃŸô0i_øøÖ…Ÿÿ� _‡?è`Ò¿ð2?ñ£þ¿ÐÁ¥àdãZPü%~ÿ�¡ƒJÿ�ÀÈÿ�ÆøJü9ÿ�C•ÿ�‘ÿ�hQ@ÿ�ð•øsþ† +ÿ�#ÿ�?á+ðçý WþGþ5¡E�gÿ�ÂWáÏú4¯ü ühÿ�„¯ÃŸô0i_øøÖ…Ÿÿ� _‡?è`Ò¿ð2?ñ£þ¿ÐÁ¥àdãZPü%~ÿ�¡ƒJÿ�ÀÈÿ�ÆøJü9ÿ�C•ÿ�‘ÿ�hQ@Xêºv¨$:~¡kv#À³Ì²mÏLàœt5r°ôÏùuŸúåmüž·(�¢Š(¶¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü©ú—ü‚îÿ�ë‹ÿ�è&™¤ÿ�È&×þ¹/ò  ”QE�—?‰tiÞ õ½6)£m¯—H¬§Ð‚x5©\Ö…im*ê/%¼NÇQ¸Édýó@¿á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ«`³ÿ�ŸH?ïØÿ� >Ágÿ�>ß±þ_þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�±ö ?ùôƒþýð£ìóéýûá@ÿ�á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ«`³ÿ�ŸH?ïØÿ� >Ágÿ�>ß±þ_þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�±ö ?ùôƒþýð£ìóéýûá@ÿ�á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ«`³ÿ�ŸH?ïØÿ� >Ágÿ�>ß±þ_þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�±ö ?ùôƒþýð£ìóéýûá@ÿ�á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ«`³ÿ�ŸH?ïØÿ� >Ágÿ�>ß±þ_þ¿ÐJÿ�ÀÈÿ�Æ“þÏÐÁ¥àdãV~Ágÿ�>ß±þŸ¯XÙjdZÀ´—F?¸hv9XÖHÝ]VSAèA§Vw‡øðÞ—ÿ�^‘è´h�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ�ÿ�É<ñ/ý‚®¿ôSP†ÿ�òM|9ÿ�`ø¿ô]Erÿ� ÿ�äšøsþÁñè"ºŠ�(¢Š�+Å¿ò)ê_õÄÿ�:Ú¬O:ÇáMÝ‚¨„’IÀ©EdÂUáßúiøøÑÿ� W‡è=¥ÿ�àdã@^'¸×mõýi¸†K±öëf‰ bÔd‘œŒ©�`€r8à× ÿ� oŠ4ÝÄ~ }j[åѼA&œ,e·„,ð @7™óõÎ8é]^±¦|8ñµ¯ª^é—7ÐmòämP€»NFH¯=9ïL³Ò~XÝ›˜oìÍÉ»+6®Ò¡œõ”£ÈT¿ûXÍ�iü@ñ+økÃRÍkwgo¨Ê¬-MÜŠŠYT¹76ê©]|CEðÿ�†u‹ »ƒ]ºŽÍA¸òÌ388å9•”ž1Žõ£>£á Uu95Û!v¶íl¬š®Å±ÉC…Îqóc<xćAøgoekgý’ÛÚÝ}¶Ƶ&n>qûÞ¼?S@Çú¹¼ÖìßÃn4TîÒ=@6™i(äm>y©â­¤W3iÖÞJjë¥_M ÷™»2¡`Üp¤¸lz[?áÕÜš»Ü_é²¶°_ïÕIm9^<Ì.Üq·íTî­|/ÿ�g麦ýpÓêñÝj&I%”«¡.FâWæ'¯9¿¬ø±´mK½šÃuî§s ¥µ§š@ó¥û¡œ¯Ê�'oèk›ÇšÞ½âßhúc&”$¿¾²Ô@+1óm”3*–NSF g.2{-WRðv·dlõ_Jšêà}¹U•”ä2²°*Àô ƒYVúwë[í>ö CNK=íä©Ê³ýö?¼ùÙ»–É<g¥�fø›RñSüF¼Ðô=Zæ1ý‚u kt†Ü¯ž%òÀf‘3°÷ç<ñéLÕ|kâ}ÅRÙÜØÛÞ¥§‡Q¸¶‚mÜJ«+©(XcçÂä‚zœVû·äñ2ø‰µ‹íU‹É Xåÿ�s`“i\óŒc<õæ›p¾»×_ZŸTÓßPx–ê‡5`ávoÛÊ1ÉëÔÐ;ÿ�‰?e—NŽÓF›Q{Ûv½E²2LM¶ðªÀ,dî çkm¡làÍ ÆúäkIv‹ª]ròÊ+›™Ú8ãˆG±Ò2¡˜±Á` àå‡�ëA¦ü9µŠÎ;}CO„Y6æ=Y•9Ë.á&Jüíç¥54¯‡1ÛMnº•ŠyåžeþÙß<D›Ï™– r§ ã§&€;Ê+#þ¯ÿ�Ð{Kÿ�ÀÈÿ�ÆøJ¼;ÿ�Aí/ÿ�#ÿ��v™ÿ�#N³ÿ�\­¿“Öåszõž¡â-j{+¨.bòí×̆@ëœ?ÒPEPmKþAwõÅÿ�ôLÒäkÿ�\—ùSõ/ùÝÿ�×ÿ�ÐM3Iÿ�M¯ýr_å@(¢Š�+Ãÿ�êµûÜèf·«Ãÿ�êµûÜèf€5袊�(¢Š�§ªêVú>•u¨Ý:¤ñ™³vÉé“Çã\7‡¾!Oà¯_HÖWº¦‚n_"QäÌŠÑÕ””¨ z•9Åwž“i¬C W‹3$3$éåNñëÊ’P‚pyÁã ³›Áš jš–¤ör=Ö§[Þ3\ÊVhÈÁR¥¶Ž±@LuøÚÔÏ¥ØL©á_íë…[–C'#¡ØvœùpGÍ÷¸æ§Š¼âO+F¸²t›]GL¾¾‚HåIÞQ¨ +Ç…ç�€yçÚ»©<á™bŽ&ÓÜ,vÙªVêe?fÎ|²Cd¯Ò'€ü72X$¶"iö²YÚ£ÝJË2!G\ÁÊ’2rqŽx�â¬þ,ÝÛxûQ»Ò–îÿ�H¶Óä»ÍÈŒN·1£ �å¹\`zö«—_õI,â6ºE¬7?𔯇äY.™ÔA,Á€~aÓŽJêcð'†cÐï4UÒÔØ^mûDm+±}¸Ø7ÜíP�8ãØüᨠhWOr|º‰Ýu+´¯I2[!½}{æ€+xSÇÅZÌPépY(ÁxÉ'—&É<²  ž@V~3œEuÕ—¦xwKÑ®ngÓíÚ¸vyfsæ9b±“µI gh­J�(¢Š�+?_ÿ�‘sSÿ�¯IôZŸ¯ÿ�ȹ©ÿ�פ¿ú  ´ùô¿úô‹ÿ�@£YÚü‹z_ýzEÿ�  Ñ Š( ¹ÿ�ÿ�É<ñ/ý‚®¿ôSWA\ÿ�Žÿ�äžx—þÁW_ú)¨¿Ãù&¾ÿ�°|_ú®¢¹†ÿ�òM|9ÿ�`ø¿ô]E�QE�QE�QE�QE�ÏøïþIç‰ìuÿ�¢šº çüwÿ�$óÄ¿ö ºÿ�ÑM@þÿ�É5ðçýƒâÿ�ÐEuËü7ÿ�’káÏûÅÿ� Šê(�¢Š(�¤eWR®¡”ŒFA¥¢€+ÿ�gÙÏ¥¿ýûáGö}—üú[ÿ�ß±þbŠ�¯ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøUŠ(¿ö}—üú[ÿ�ß±þgÙÏ¥¿ýûáV(  ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…X¢€+ÿ�gÙÏ¥¿ýûáGö}—üú[ÿ�ß±þbŠ�¯ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøUŠ(¿ö}—üú[ÿ�ß±þgÙÏ¥¿ýûáV(  ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…X¢€#Š`CF$"ŸÊ¤¢Š�(¢Š�­©È.ïþ¸¿þ‚išOü‚më’ÿ�*~¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü¨åQ@eÍáây'ŸDÓe–F,ò=¤lÌORIšÔ¢€2?áðçý úWþÇþÂ)áÏúô¯üü+^Š�Èÿ�„Sßô/é_øøQÿ�§‡?è_Ò¿ð?ð­z(#þOп¥àáGü"žÿ�¡Jÿ�À8ÿ�Âµè  øE<9ÿ�Bþ•ÿ�€qÿ�…ðŠxsþ…ý+ÿ��ãÿ� ×¢€2?áðçý úWþÇþÂ)áÏúô¯üü+^Š�Èÿ�„Sßô/é_øøQÿ�§‡?è_Ò¿ð?ð­z(#þOп¥àáGü"žÿ�¡Jÿ�À8ÿ�Âµè  øE<9ÿ�Bþ•ÿ�€qÿ�…!ðŸ†È øJ õÊ?ð­Š(±Æ‘F‘ÆŠ‘  ª£@è�ô§QE�QE�ÏøïþIç‰ìuÿ�¢šº çüwÿ�$óÄ¿ö ºÿ�ÑM@þÿ�É5ðçýƒâÿ�ÐEuËü7ÿ�’káÏûÅÿ� Šê(�¢Š(�¢Š(�¢Š(�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@V'Œ_Â:¢:†V€‚È"€6è¬øE|;ÿ�@/ÿ��ãÿ� ?áðïý�t¿üü(zŠÁÿ�„WÿôÒÿ�ð?ð£þ_ÿ�ÐKÿ�À8ÿ�€7¨¬øE|;ÿ�@/ÿ��ãÿ� ?áðïý�t¿üü(zŠÁÿ�„WÿôÒÿ�ð?ð£þ_ÿ�ÐKÿ�À8ÿ�€7¨¬øE|;ÿ�@/ÿ��ãÿ� ?áðïý�t¿üü(zŠÁÿ�„WÿôÒÿ�ð?ð£þ_ÿ�ÐKÿ�À8ÿ�€7¨¬øE|;ÿ�@/ÿ��ãÿ� ?áðïý�t¿üü(zŠÁÿ�„WÿôÒÿ�ð?ð£þ_ÿ�ÐKÿ�À8ÿ�€7¨®o@°³Ó¼G­Cei´F;c²Â.püàWI@Q@µ/ùÝÿ�×ÿ�ÐM3Iÿ�M¯ýr_åOÔ¿äwÿ�\_ÿ�A4Í'þA6¿õÉ•�\¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®ÇòO<Kÿ�`«¯ýÕÐW?ã¿ù'ž%ÿ�°U×þŠj�¯ðßþI¯‡?ìþ‚+¨®_á¿ü“_Ø>/ýWQ@Q@Q@Q@Q@sþ;ÿ�’yâ_û]覮‚¹ÿ� ü=ñ(ô ºÿ�ÑM@þÿ�É5ðçýƒâÿ�ÐEuË|69økáÏúð‹ÿ�A®¦€ (¢€ ÅñoüŠz—ýq?ζ«Å¿ò)ê_õÄÿ�:�Ó¢Š(�¢Š('Å:…Ö‘áM[S²ò~Ógi% вŠ[ ׿á^swñ#ź_…d×.´›K›GÓm/#»†ÚH£ŠIA‰•äËà7ÞCÔ®G'›­iQëš%î•4óA ä- Páa€ÜädtïXw¾²Ô< „.u=I´øÖ8üÀÑ LhAD'ËÆÕퟔs× ?á2²]zÿ�G–Òò)ìTK3¸Œ'’T·œ>|”pN2 ÊÜüWƒP}ü?ä¼wÅ­…Üw*Äsî*êc…8Fù[zŒ¦ÿ�Áv–½±qwznQd‰”:„’P¦yN ç$œæ©‡v&ÓF³“WÕ¥´Ñï"»³…䈪þâåä¨޹ÁëÀÀãë^¹ÑÍ©°k}KY¶Ó‚˳"HçÈp3‘ÀÇçV×ÅcÖCÔmf}I!YÄF©èó”¦ç$YwÓÔñ™|Oá(|RÚq¸Ô¯íŸr·p‹Srý×;ѳŒž:sÈ5éSê>5‚ö÷M1Å¥FÂÎøN§íb¨pÈ9#¿(†ñ;D¿ÕßM–ÞúÊT–ê÷(›<ËpTÊ»r†ô õÏ£áOi2K¦ÒÙóm°º¹Bv¸%ÈÌpx8aŒ+ŸðïÃDµ×5]W\‘.}FúâÒ¤ÌQÇr[vP6ò«´à‘ޕָ{AúrXA}ysm„.™[ÉAѪ‚@÷ÉàsÅ�kQE�QE•¦ÈÓ¬ÿ�×+oäõ¹Xzgü:Ïýr¶þO[”�QE[Rÿ�]ßýqýÓ4ŸùÚÿ�×%þTýKþAwõÅÿ�ôLÒäkÿ�\—ùPÊ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüwÿ�$óÄ¿ö ºÿ�ÑM]sÞ=eO‡~%,@Ùw#ŸS@|7ÿ�’káÏûÅÿ� Šê+˜øtà « §B€Ð×O@Q@Q@Q@Q@W¿³MCNº²”‘ÄOØ0 ÿ�:±E�y÷ÁÛçoÿ�b\í]CC¹–Âæ1Ø«Óö5è5åþ/µ½ð'‹Žô›Y.të¤XuË8FNÑÒu uÿ�ë’=FÖ´ÿ�iPêZ]Ò\ÚL2®‡ô#±Á  ôQE�å¤örÚ]F%‚U*è{ŠžŠ�Åÿ�„OGÿ�žÿ�à\ßüUð‰èÿ�óÂü ›ÿ�Š­ª(þ=þxOÿ�sñTÂ'£ÿ�Ï ÿ�ð.oþ*¶¨  _øDôùá?þÍÿ�ÅQÿ�žÿ�<'ÿ�À¹¿øªÚ¢€1áÑÿ�ç„ÿ�ø7ÿ�Gü"z?üðŸÿ�æÿ�â«jŠ�Åÿ�„OGÿ�žÿ�à\ßüUð‰èÿ�óÂü ›ÿ�Š­ª(þ=þxOÿ�sñTÂ'£ÿ�Ï ÿ�ð.oþ*¶¨  _øDôùá?þÍÿ�ÅQÿ�žÿ�<'ÿ�À¹¿øªÚ¢€1áÑÿ�ç„ÿ�ø7ÿ�Gü"z?üðŸÿ�æÿ�â«jŠ�£§hö:Q”ÙÂQ¦ ÈÍ#9ltå‰5zŠ(�¢Š(¶¥ÿ� »¿úâÿ�ú ¦i?ò µÿ�®Kü©ú—ü‚îÿ�ë‹ÿ�è&™¤ÿ�È&×þ¹/ò  ”QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�çÿ�u #ðWö-¡P×.#Óí“<Ì7¦?àB»k[Ó¼=¥M©j·QÛZB2Îç©ì�îO`95ç¾³¿ñߌ޵‹imtË5h´;9A ƒ÷§aî:ö GÓlbÒô«=>õ6°$ÿ�ºª~‚­QE�QE�QE�QE�QE�QE�!”«�A ÷¯;Ô>\iš¬ºÇus¡^JKMf˾ÒsîŸÂ}À8ìz-æËâOŠ[õØj£§§_ˆ÷Úù? ¥ÿ�…‹âÏú&Z¿þ/ÿ�^‘E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÿ�ð±|Yÿ�DËWÿ�À…ÿ�âhÿ�…‹âÏú&Z¿þ/ÿ�^‘E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÿ�ð±|Yÿ�DËWÿ�À…ÿ�âhÿ�…‹âÏú&Z¿þ/ÿ�^‘E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÇÇž(½Ö_‡:´Íû·˜Ì­åƒÁlçÎ(9ñ>ž¤õk˜¡ùa0O0ø+‘^“E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÿ�ð±|Yÿ�DËWÿ�À…ÿ�âhÿ�…‹âÏú&Z¿þ/ÿ�^‘E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÿ�ð±|Yÿ�DËWÿ�À…ÿ�âhÿ�…‹âÏú&Z¿þ/ÿ�^‘E�y¿ü,_Ñ2Õÿ�ð!øš?ábø³þ‰–¯ÿ� ÿ�ÄפQ@oÿ� ÅŸôLµü_þ&øX¾,ÿ�¢e«ÿ�àBÿ�ñ5éP›ÿ�ÂÅñgý-_ÿ�ÿ�‰£þ/‹?è™jÿ�ø¿üMzEæÿ�ð±|Yÿ�DËWÿ�À…ÿ�âi¯âoŠ¡)¦ø"ËK^žv£~²ïµ0C^•E�yæ›ðÖ}GP‡WñÖ¬Úíô-¾+P»-!>Ñôo©=Á¯CÆPEPEPEPÿÙ�������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/GRv2.jpg�����������������������������������������������0000664�0000000�0000000�00000131103�15030617045�0022353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�;ˆ"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦L$F’´NÊBÈ€„Ž£ ŒpE�>Šó_x¿ZÔ<&öº¥ÂMâŠÞKi|¥Q*\ xŸj€L¸l‘»áoJ¾°¿ö•åì°i³KrñÀªßm;¨B¿"ÈNWwù‡4ÞÑ\…ω¯t±¯JÖÓj"ÛZ¶±‚ü´eI£¶ã$¨?4ÍŒžã'"òøžµ´xíoîÞòþæÊ$ âHšmÊrÊ»@…À9èy4ÐÑ\­¿ŠóYÓ§Ži ÓfÓ¯¦¸†tPÑIС݌T´€€Hãñ©¼/ã}#ų]C¦»y–Ê’02FùGÎӘ݀û§*pøÒQ\¾Ÿâ«=å͵æ¥2ê7–ª¶Ém‘ÜLŠX’ˆ $`d‘“É#2i~4°Ö6¶·™?fhÕÕ•'Mèê7}л‰ÎØÜPIEqiñCÃÒꩂ K1°¶šé¼§‰Ì‘Äpä�ùR; HéšÙºñZ\YÛÉ£ê&k©$TUª„äù˜ÁÜPK‘“·ƒ€ º+UñzeÛZŧ_êÇžt³Dc d·2ç%[rÇiÀâ°Ó]ÔõÏÚÚiw†–÷ÆênRq)r»÷åö2ÆTlÎp0hµ¢±fñ$0xŽßF–ÆõáÌQ]2(…ÜFe*>mÇåSómÛFr1LÖÕôíOºûÝÇ5Ä·AºG@Bw•9 €àö�Ý¢¼÷Y»Õlì.E¿‹u{-NÒÖgK|À’ɲ¶a*ÎPÊP¼2~Â7·:†•-ĺŠê6­9w›U^hB¯.�>ñÀÀé@ôV>&77锑A+Â6,dÉ"Lв¨ßÙ”’Ç œðq2¶º·Ó¥·ÓuZúI£òÕcÌ&'òäÞKí8lð¥‰�ÐIEq’|E±±Ñ¾ßªÙËfÍsg 2O|—ef Òå ‚Àä0N¦™âËMfâôëK»ˆå¶‚ïÎ)¼Í¬w0=b`@çc¿E`Ïâ[[Ôå‘/eš„6.ŠˆJ¼«À˜ •&d<äå›°¡²ñŒz¼zlºV£i3\µ£4ëÔ˜DfJ»d˜ÆàFFƒÅ�t”W&ß4èaºk« FÖhÝVÞtd—ÏfX±óárUT®>`* ~$é–º4z•íí’Ës-´PÝËmÈѲL»� ¬9`I‘Ί©¥êVÚΕi©Y9{k¨–h˜Œ¬22;·@Q@Q@Q@W1,ºž³¬j°[j³i–šc¤èÐG$³JbII;Նв @$çž‚€:z+Ïu}^õ4¿ êkâ»È,o£º¸µ±'Ùæ˜L«$LËþ­}FÒ~µÓèÚ”±øQu-bîXã’gº@´�±Ic Ä'·Eq°ø¦òo­§jÖÖ ¤ÜÞ}žx#-9GƒiŒ!g݇pQ°y^*xül..¬ ƒG¾O©6â9Öì 3n$HU†Ì7ÊOþ,)�êè®bïÆö¶7·V“iz˜–i"ýÜcí ²¤LS/•¤O™ö§vvóQkßô Ãjú¢Mo,ñÚxVHC8Üsü)¸œp �u”V?†µÆñ™-ëYKjî{u2â97 ¬ºG8äd`œ-_Ær¾› Ö›c©Çn÷V†Ï"6Šê'¹Š6 Éa¹\íÜž¢€;Z+š‡ÆQKw £húœW]ÉdÑÈ!ÌS$h ÄHAÝ*T‘Ø•¥1‚[m&[=/R¼}RÀßÛà ǻË2CnpjwÇ¡4ÒQ\NãeÔ¯¯#/5!5Ü/i1ÆÞÚKX% &J€¡¤n¤±è3ŠÔÿ�„¦líeK]Bñîõ ›£T›K•ûÊ¡G’àz�Xõ4ÑQ\C|NÓYÄVúN­sp²$3ÁÂÞG™ T}Ò“"•$ ]©­¦šmá[»ËË…gŽÒØ!ªãse™T¹AËu`s@”W?wâÈ,¥ÓÖ}3RHïL ç4J« Jû\3Ý»�… · œ 6ÏÅöך½¨Óµ£¸ºžÊ;™?-¦‡ÌÞœ9n‘98ëž(¢¢¸Ïx²};E×SI¶Ô$¼ÓíI.í¢‰£¶“Ë.¡üÃóq´ªÄ)âµ.¼Km§Ûk7rÇy,ZmÚCp¡cýÐ1Äå—‘” bIÈù»�(~ŠÂ›Ä¶Pj²Cp×EµÌí+*y.˜¼ÇÈ%¾S&;t|ƒXsxÙíuøî/­µ7H]&âíÒö8”HRH2•bÀâF\¯UÈh¹¢±<3â­;Åvw{ôy¼™TÉílá£fFaÈcéÔK¢x’nîîÔXÞÙÏl‘JÑÝ¢«2I»caXã;ål0Ç PÕÆ7‹'Ô5ÿ�®Ÿm¨E¦_]ËÚdŠ!ÔbÞgy2™‚B‚3ÔSî|z©mpÐhz‘º‚k4ki„Q»%ľZ0̘Ãk ãpQ’�; +žoÛE¨ÞÙM§j1=µ´÷JÍŸ´G s†,yeÆTnÈ+‘Ígj¿ômÖÚmN ›Gž6—È–X¬`¿ýnð#,ǰ ÊŠÇѵÆÕõbÛìRßr$ÌÈVmÑ$™bG pËßp¬|_kwkØ_E ò³X]H¨"¼Â–ùbFTÂä Š�èh®RñßÚü+¨]éÖº…„ï¢Oªé÷ǶUä Íкd0 Æz×C{âK{VãN–ÖèÍ ºB¡18ß³be†[qQƒ¼¼ó@4V/ˆ¼I†ìþ×sc{qÆòÍ%º)XQ1¹˜³ß…cƒ€pi"ñ"\jMkm¦j3À²É½ÉóS;“%· +»nÜŒf€6è®fÅuccqk£js½üæÒ‰&‡j3?2�¡|Åq$�EMcâëMJöÒÞÎÆþQ<fG—ËUX0ì…\3Ü¡¶ñœdd ¢²ôÍmuKËØ#±¼…-eh¼é•HÊÅNаäq¸ ‚È ×:þ.Ô.H»‹N½‰dÖ®´é-Év¹X£¸ÁS» óļ–^Uº® �í¨®%~)ø{íÖ¶Rùð\M0·’)^%x%óZ-¬žfæùÔ‚P0’@æ»j�(¢Š�(¢Š�(¢Š�(¢Š�)“Fe‚HÖW‰J‰‘Ôd‘î >™4K<Dź•%«�F8#}Ç4ÌØxÃN·±Xo¯ÚêÂɬm¯£2ÇÆßàÚJŒ…%O sœÕ{O‡VvÚDºÎ®ék¼*áù’ÞC$±ÎÆ'¹ù³\·‡ïe³ðï‡õ›­;ÅsÛ[;]\ëM$SJ38 ï 9d]£Ó¥uòx²úÓí÷úDQ_ÛÜYÆÑÅv^'Žæo%\ '  ¨û¾â€&›Á±Lú«>±©ãQº†ñ”q ÑÊ2~ï·“ÃnFNk*ëÚ†‘>…œÚ¶§ zÄ×÷ ö¡­Ä‘Ì­€Bdœ¶�bìc婯ø¢ëA³°WÒþÓ©]îÿ�F·3J‹´eŽèág#3åõ<â¨Ëã=aoô«dð×–º¬ %©ººh]dùL‘H¾YØÊ¥Û©ÎÜO�2ø6Î[Û[{z‘à ðIn¦?.ágpóoÊ˰•#§æ´4}éy'R¾½E#ûS¡òÐtQµW?VË{Õ¯^ZøžÛKm63ks3[Åsö¯›Ì4Ü SµpŒ2[vFvã°äøƒ¨Ç¤[jgÃðýžãI}aÛþakHòþÿ�ïWhÎ9+@¶Þ [h£<A¬‘ä·‹—„|ò—.�A.Ç‘OTZ†RÃT³cisz=Ÿö}¬÷£5Ìc„ÀrŒ€~v㹚o]A©]DÚ\fÊ×SƒN–u¹%ÃL±p›0Fg@~n9<ÖL^,¸Ñt(”[\êw³êzŒQ!ó¤"8®¥&8ä|£å#¦H­7‚`—E¿Ñ×XÕbÓ®ãx–xñ?ßT% ‚GÌ[�ü¸8"Ƨávլ൸×uU‰"ò¦òÚ7 îoÝü­ÇÞM„gŠÔÒï[RÒ­/^Ö{Gž%‘­î¬‘2UèGJ̲–aã­bÜÏ+@4ë)V6rU¤¹ Tt¹Ç]¢€%Ô¼9¡©®£¡}auäýžY-$…mÊÝ 1a†ãƒÍ2ÇÂðiºàÔlï¯!ˆZEf,WËòQòÀù7ð]ÞïéÅGáÿ�ÝjÚ…å•îš–s[ÁÂùw>pxå2“´ ÀÄÀí,¾ŒiÞ-–h4«I žXœjv ˜Ü®å{¨‘ÇPU˜Óš�kxN&ÖÓT:®¤Z;϶¤ãhÕÌF"SvÒŒF3ÆxÅ]Ö4H5³È×6·V¬^ÞêÙÂÉ#H#¨`AãŽ+œÖ5ÝCBñF¹u«^éöº]¥ÝÌmvÉä®ûïm ¶Ô—;:çÛP+sàˆîlž¯jé$·©=˜7Ï2y~YlÄTòcÀPæ´t¯ Zhº¶£}c=Ìq_¿›-–åòSŒÈ£nCsÎ¥bßGÚÜhq¥Ì-bcŠ;ÐâDº˜ÂŸ6ÀS7/£š?êWÒèñè°f9䉢ûqÒ8d2y¾^ìbâ!€™É=†hÍ¿ƒ–ßE“Lî¬Á¯ 蜴"EÈeaÄaJ—$•e#ŸLbð4O`l»¬%«É4’Ưï ²$Çw!”†ëÓ<=Ý׆7Þ™EÀ½½–IŒÍ[©T&óË�(>€U-+[¸±ðüHKëëbúÊÕ'œÅ.. †‚B¬qpN�(áðt wÛ꺕´©w5ÔÄÑf3•2ÈÌÄáÃcŒVì¼:,¼C>°5MBWžÚ;g·•£1íBÅOÜÝœ»Ÿ½üg°�S×õ]bÏáö±©ýŽ+=RÚÊyDhó +Á‚üÜ À3À;{bé:¾©á¥›JÔlD×K§™&:¼×[…ÔÆ ÀË+µ“vΟ1Á¯wà¨îßQoíÍV!} ûˆüŒG,[6mÌGåGÁÎvS˜ßÀ¨÷­vÞ Ö|æ¾ûy``\Iäù‹åü¾½óžj•õåÜÛ».îG‘âm:±3|±Éö-è9û§Ì|¯O˜ÖÆ—âIµ Jm:Ká»·»–ãóËl‰UYe(ÎíññÇÞ<œ�ÀÖ|%®–cµ“UÕÄémis½©"wBˆŽæÁ FCrG:W†/%Ò­Vòêm:æÎf6fG$²¨1ºª´G$Þã5£«ê÷§R“GÒôŽ-–âàÉxm‚#³*eV%Ø£ã y#5Êx+Ç—úž—¡ÙG¤ÞÞ—²Š)5 ûLâ�Ť( Rß)mìÙ?v€=ÞÍ­æßö»™ÊXü¹È$—Î3¸çœp0Z¯;øw©´™µ_6}CXÓ$Ô¿ÚsKPa#÷LÆÇÏ 6pNM[‹âé¦Úêú/“o{¥JÐCrf‘Àh—c(A‚LéŒnÏ<Å�w4V'†uÛzÎâ[­*ãO’¼½²Ç*¬ƒ�†O68ØŽqÊŽAëÖ¶è�¢Š(�¢Š(�¬Kï %Î¥&¡g©êeÌÈ©;Y´x˜/MË"0È€ën¹­[K¹mVÎæÓQ¾íwÖá„Ü0ó¢ÎÜÆíÌ9Ç�òx>Ü ÔoíítP‚ÚÖ3öÆcù÷!c”fS‚89<Ó´¿éÚV“¨hñÉs6•{æ±LàÇ>w¤x‚Ç‚N;b—WÕïN¥&¥é‹{:[-ÅÁ’ðÛGfT ʬK±GÇ@6òFkŸÐ¼U-Ÿƒ õÄ2ÝÜØxbËS–I.X›ÑÊHÁÌM–ä¶áž‚€: K±jϪêI"YÍf'[d¦2Ç!>öbSùäqPÇàÈbŸíWÔšãíÉ~%&‰DAãËÆÖ‚1ÇlUkjvZ»Y]è"G% –D¾,V;™Œ1<±–­¹r�!›¥Qâ<²Ûj—‰ ^K)ï"¹d™U‹øK4Aa’»YÇ$Pð*‹¨î¡ñ¹ ñyÂ7Y!b«,‹#¯ÍÜ7"ýìœqœb¬Aàë{AhÖš®§o5º4o2IiÑœ¹W ¹Ž6…*ñ.­š¥¬šfúÎ+yâ†+²ë$s; ,Þ^T¯–å€ Àãqâ¢o-»^K5𙣵²`!¼ó"wžiaD€«‡^_‚3÷q@z>‹Ì0\ÜË ×Ü,s"&‘˸R�$f?1'žµ‰/€¡m:-:Z·²·ž9­ ŽHJÁå¸tEÝ%C*v6€2 $ñ~©©>…ê²Î‘„[âa(ñM"¸Æ?Ñämc€sSEâ»ù¬lnG…“ÜAvÒ^mŠÝ¡˜Ä@}Ÿ1b®B‚$�{ø.šâàë: ¹—PŠÎ ÑIäù8_Ýão—òà‚{ç<Ó£ðlVϦ=cSµmƒéöë’@‰‚õÝ%‡—û9ÉÌú¦»}«&›¤é‘_ÜÁl—S¬·^F#vuPŸ+nbc~Ð02FE`Z^j(ñÍ¥Ìé Å¥Ú_Æ©},1‘•š5]²gÊÚQŽ�ç’H�i¿ m4“Yø‡[ŽH9[îbH‚äò…#Œ9`=y­<–ÿ�cÛ¯jÇìš„ºŒ{¼Žd—~ðu÷O›'~sϾ*Öõˆu{«h‘mí_Iž'Šå’Ikß-¸ÚÊŒ§'Žã¶K¿]جֳh›õX¯ÔÛÛI4ñ°Ç.ðÑÂϲ ÿ�WÔò@æ€1[Áz¶Ÿ¯Jútww±{=Nõ,¦Œ3³K#?Ȳ¡ó$|„€9»Í[BU¹´»KÛ»ËMâ+‹R›¶¶7!¬¥NÕ8#ª‚1Š­s®á­;T–Âæu=š5´®ÐË –hÓ Žr¥ÆW¡�ƒÁª:‡‹u [›ôƒF†h,µ4÷‘¯63<Ë–Bì<ft “ÀɺP‹ïÃ}sç6±ª ÿ�G>X•wA ‘çF9Ü2Fp}:S,ü¤ömê²­•ü÷ñÇ'‘µ¥—~ý؈~öL�Gß>ƒ/|m{iᣫ®‹ŸgûY¼‹í¸òÅ´†9<³³/’¬FUFÌW#,ÜËãSáË *ÞWKŸ"VžôÅ*(‹Ì2ˆÄm˜ñò†Ï-€qhsQðÕ¦£k¬[î ‹W£»•ù‰ŒDXnS†Øz|£VØøjIµvžþòú=U·\CsåìÏ–±»HÊ*ŽIéëšÌÐüis¯jS[Ûhw)nb’K[¹RdŠB­€®ÍUÝœ‚†NïÁÓñV§¤hñÜéÐ[Íp÷–¶û'”Ƹ–d¨Vþþ:qœóŒ ’ø#O™¬•®ï~Ëka.žÖ»¤ñK·Ìó Rå›j’CG¹Ìú„íuia’öööS´–à ‹•v‹d(;ƒBŒ#‘Þ°n<Q{áÝCÄwW¦çH¶Õà†I^ìïe‚Øb8Êœ¨y ¹~ñÆkc¾)¹ñܬú-݂ƑɲÅ2¤ŠÙà#O˜cFеž›%µŒ–ÓjW·’H ›‰ÙVLclUPG¨�úæ¨è~‹B»k”Ô¯îÝ­b´?jhÎR2åÊ‹ÈóžùÉÉæ›i­_j—î–ÚZ¶’'šÕîþ×¶UxË#/oÝÞ¥rw|cšå4Oë6:„á¿Ò£¸…•£}­õdeg·…äeòÏͺâ6Æã‘»$‚Ö7…-~Ë¥ÛEy{ d›íR&A°yO\íÎHÀsž<UülIk:¬ŽðÚÄ%v„²}šS,,?wÁ‰ê9äÍ<x®ö[9áÒ¢{«ÝJçN5ÙTG„Ï–/³•"ÝLŒô5‹qã„Õ´›×µ‘&žÛP´kº>K\Åu+— (·áʃ†Æ2B ¨|Î']Zó–+ˆ’C$E‘fuvÁòòHdR ÏLŽ)m¼ Ù¼ƒ[Õ’öGcqp,Χ#/—±GùNKäš·c¬jrëGO¿Òí­ "Ax\Èû-Lk¹A%sr§*’k—ók7zn•Õ½œñÁy3Ý™•_äM¤>Ôœ²õÀÉ  v:<z~§¨^ÃsrEó¤’@åJXÒ=ÀãvJÆ åˆã¥gXx:×Nò’ CP6öÁþú²,¥sÉ’B³¼°�*–£ã[½.}Qntxü«K »è.÷–Ý”8`Nõ Ý~m§ŠI¼_«[ë±èÒè6âögˆDù)¶Hî>_}™Á�£¨­ðæÕôÈ4÷×uƒo—&”ƒ0d[É·pϕ׋ŸEòMé4Yo5­-o!¹t“榥<‘î¸,¤*˜èÛå@Ê.3Ú§Œµ-I^ ?C†kûd‘ï-Þû`M³Ë#o,ù„´c!F1’3W4?Üëzü‰  %ô«Kø%.D¹˜É€Sn:!þ.0:î;@'ñ…`ññ>£¨[Ç%¤¶rÅo"xäÆì†VÁã¨Áìr8¦ÚøXYIrmµ­V(çg”¯Ä™óºU:–%öœ¦ãµ‰¯ëú¥ìPͧX˜´øu»k3yöæŽG+v‘H<¥\4dïŒå½öâ¯ÛxµaÑü9{%™‹OÔ섾l— #BþOš¨ÙR\• 7’GBM�K‚­ít½&ÎßVÔãŸIŒÃiz­œ±Œæ=Œ¸U©?(9ÈÍ<x6Ý.-Y5MMm­åYþÊ$B’J¹‘˜¦ü³1-†²A$U{¯\YëO:Q}Vx-p Ãå—“í T’¸P‚ ` aŽ�¬KjZ,ÚÄZl×:„š³G œsÏt‘"ÚÛ»mt‰ßi/6� óŠ�ëtï‹ ^MJMWP¼•£h‘.Z=±£0l ¨¥°@�±b@<œÓ> Œ]Ú͵ªB–º„ÚŒP§PI.ý㘋>l¼g?9çƒUñ£„¬5k ;˺ºžÎ3i~Í GçLˆU°¬Aðxã“Î0s£×µ-/]×´ûVšºÝµ¡–KÂ:U4*r¡åÜFåÆãŒÐÝÀÐèwMk­êíö‰žk¥w‹Î\–Ä`©Ë¹·Ž@ÕW'áïÉâ aíSF¼ŠÉ£y ½h¦ÁX.´j€¶r63Œ’+¬ Š( Š( Š( Š( ™4K<Bå‚H¥[c•8#‚¸æŸMHbq*ÈTíf]ÀÄŒŒlŠ�ȳð®e >…´’iŽ»~Ïqq$ÁW�RìJ€¨æ¡›ÁzÆœle†í¢3$ìæþ5>áiwï`§Ø@® M×5ëm2óÄis¦ËvžÓõ³-»~ÿ�é 8ÚÅp œòÊÀê,üS®_x¶KXtÈ΋ ãÙË;4jÈʹ Ÿ;q%°6yCƒÆ€:MKD°Õ¢‚;Èå&Ý·Ã,Sɱœc"D`Ã#ƒÏ=ê;éwQˆæ·r£Ë+‰äR†6Ü¥Hl©ÝÉ#÷ÍfË­jW:ýõ­”úe½¶›<1\Gx¬d˜:£nV  >Ñ•m̤qT4oj:›è×#N›MÖÄŠ¶ñFÂkB#g"BX‡ÆÒ…]¬@ç4¯/ƒtI¯žõ­îáç7£½™1)CpÀRTHÆ{Õ_øWžû4vÆÚõ ŽÑì’6Ô®J¬Ñ€dû§þùƒ>×5?øFt 3L¸ÓmåƒÃ¶—®÷èÌ' •R¬»vìË1ÝëÅnøO_Ô|H×72 {kh^5û9…¼ÜImÀ߀TÊÊ~^p:w�o‡ü5sa«jòßCZMx—djNøH£‰|Åuv# »,rq“´j?h1[˜ µ_´5ʸÔ.<ÈäbK2>ýɸ±ÈRÏ9¬ÑâQîÍÜ`m=uoì¹,¶0¹SæùBMû°ç¦Ý¿sÕ€´‰„šÎ·w5Ρsy Ü%¡IRáÓc6òY?v…W£Œž´ÓÁ¤%¶¬—ÜN¥¯ÙŨ‘ŒgæÝ¼©$níääž1xgKW¼Õw uy“p^îfGNp» m�e±ÆãŒd×$þ-Ö[ÂM¨ß[i·Ýøj]Y#8DeD&)s¹[Ìã§Ýnµ©¯ë>!ÓüMcii.–4Ý@,qO4Í»—‡"@a¸.�ùŠƒîoþ}.ÞÊx4É/¬%–í¾ÑôåÒ8Ø”�—þ°È�à‚¹S¥­hˆ † En8¤YPCu,u ©Ìl¹ €Fz‘^}ªxŸ[×|#âGºÒâ‡G›I¾ky‹F]‚¯³9à’J!R1ƒ^¡*Å, $ÚÑ2üÙ<ïí@·žÒµ B;ë«y$#XúD$E%•d@Ûd�±#x<“RŤªÞêSËq<Ðß*)¶’FhãH;A'iló·ÆrNœ¾ðÉgm.ÔrzŸ)k¡ `ü?ðç!׊aO—Q¹1h†D™ù %};t~×ÂúM•ä÷pC0¹žfžIZêWbì¡N c€B¨ÀÀùW”cbŠ�¥g¤ÙéösZZ¤‘Ã4’ÊãÎrwÈÅœ†'#,ÄðF â³að^…úZÛ\FŸí =ìîé.wG.Y$œ©’{šß¢€3.4 6ëB›EšÆt)*yò½¹÷o$÷$ääæªIàÝYmå– ™%·DDw½˜„r鸗˕bJ–ÉRxÅoQ@íÏô+É/h¯I¼.gÛ¨Ü(iSX �«ŒcWÐUIšÞöçQ¾‚Ö;é£K|Á#I˜£-°³° Xî9ú“ŒÖÕZ]>Ú[¿µ22ϳË2#²¹ÈdN3Ó'ÔÖFŸàJA¬ðF#ˆÒòm€Únüo��ï x®‚Š�ç-<  Øµ¡¶Šú3i ÛÛÿ�ÄÎäùQ°fN Çm£øðGbÎi"‚Ѭ¢ŽkÉ¥E…ˆ%³‘Œ…÷Wtc£¢€)éÚe®•oäZ‰Š“’ÓÎó9ú»’Dzx«”Q@Q@Q@dÍáÍ>}Pê=ÿ�ž]\ ÔnD®1˜ƒì#Ž›pkZ¹¼A¬Åª_l[),ìõ‹}=¢¸•’T€ï ¿S>HÛÈSÒ€:YtûinþÔÈË>Ï,ÈŽÈJç  8ÏLŸSXCÀ[ymŭІ[$°xÿ�´.6µºýØñæt?÷Ñõ9ÌÒ¯®lü6-ô»­> ©uJ8ÅÒ—VæáˆTV\àÕ”“ØN_k³hw­¢é‘Gkáë]jH¦‰Ü¹‘efˆãê¸lg¡ †_輯4z„*®íª]"&Ý>fAVùä“Ôš•¼ µå™µŸì·ŠÉ,"ò`˜o¼wá7s¸ÎNsšÁÒ<_â-PÝ]eÚC§Éo;YMq,q*6‰Y˜wˆWÁ®£@¾žöÊU¼¸·šòÞS À‚ˆ#à6Ò¥› §ïr84Q¼¢¼“JÉ~eš8£y´®wí‹îa¼Ì‚ ' ‚w6s“–Aà?[›–22ÜAäL’]Ìé"n/ʳNæfÝŒå˜ç$š¥âŸjÚô°[Co7içX¡…™å‘y±œ8ì`çF' U}ZöçU¸ð½õ„րͫÈ,¦’#ÊûÀ,À0, ŒÈÛÓ­�lhídòn̶³yñLoç2o ´rûœ%@b@ F0Naÿ�„ ÿd[Smv`MÑBà‰<ÆÜáÿ�yó†l’#$úšÀ²ñ½ÚŬOwœní ñ)YíÍ®ç$’#_,IŒð¹=jÖ¬u—Ô<9÷šDº’k°Ï .Q¬®Ïrsìœ)ÈÏ�.©áÍ/X¹Šæò ñ¡ŒIòḂª1F”ÿ�tä{Q‡tË}lêðÅ4w†€ì¹”Gå¨!WÊ ³qÇËÁ$õ5‘ŠnâðLºµÒÚµÜW’Y3&RËtmć$•NžNyïQͬëðê6š#_èŸÚFgŽì[Èb ‹bó3æ7˜Hùñµ ö  ]cÂZ6»v.¯á¹3mKA{4¹xò#u«ÀžA<Tmའžy "iî~Ôó éÄ‚]»w+‡ÜŸ( … `ŒY6Þ%×5I4»kC¦ZÏum{$²MÍky£‹ra×r>òÞ˜9=+.oêSxN}bétqis¤5͵£ÆÒyò‹_9ãfßï‚…AÚ3“È�¶¥áý7VÒãÓnâ”ÚÆé"¬WDC!ÊÈÁ²¯PQT'ð>…q-IJÇ|Zâå.¥R¹¥Lll 1‘µqþêú dø‡\×4Ëÿ�ÜXÝÙ4Ýø žÙœÝ9l‘ ê°‘ÿ�Sü$2ͯë#¶³‚îÊ;xü@lX¬ ÞlaûF ß÷²HÈã;N8!€4áï†fW³¹eœL²†¿¸!ÖSºE#Bß6:gž¼Õo kQëïsö¿³Aö±7£<†h”€#xl¢…-¸ç“€z;ÂÞ(×5ÍW}Η:<ë)‚mцVGÀ^&f|Œ“”M¤c³õ»­Næ-~9îme[?éqX¡„¯•—´™·Þc€Þ=�êáðΛh.Í”r۵ʸÂÜK²"ÙÉ7$ç)´ûÔÒh–×Z :Eü“ÝÅD­+ÌË+´eJ¹u †Ü¡²æ¹ ¿øŠÚy´ˆm­/udÔÕe·„*:­¼SgË’uù¿{·gð“ƒÒµuWY> Ó¯á6Úv§5ÕŒs«p‘™'Ž7\«�À= Á9�&ð'‡îÈš ÉVêå.çWÔnd•>ëdÇ^:|«ÇÊ1§¥hZ~‰ŽÆ9QÀ\I.ÅþêïcµÙ\jãΣ©hú߈nlä°[ñ¼ÑKÍ ¤e•ƒ�¸/»sÏN´£Å÷ðxsD»µ†Âæðìš«À30¬Å0•€ôÀëÒ€:sá] Þ]]¬G-Öã/•u*)f]¥Â«WÇñ€Þ¨ÿ�¾ðß‘m ´ºhímþͶ¡p|¨÷‡s'eBäl\´b…ŒZ¸ø‡¥ÜjϦ»Í£Ý•6P²͹Vfc¼ ðß/SÀª~<»ÕuOxÆÚÕtøìtÛ9#”\ÂÒI3q)d!€L\,LPMÿ�†ŠÉ”[†º·Ù{2핳¹Žæ'sg9ÎæþñÍðëÃ%5µë'—4[[S¹ ¬­º@yÎæä“É Ã¡×ïÞÏLŽÅ4è&½Ö¯¬˜X¢ùmrD›C ±òA#<–<ŒÖcxïY±¶ž{Ø´û€ ¾òÒÝ2%¶¹ŽÜ’YÈÚÅ÷c rǨ�ê4ïèšUä7VÐÝ`$ÅçßO2ÆÅv îT6ÒFqœVgðæ—q«ÿ�jInâì…RgT—oÝÞ‚¹‹Šæ­üEâ–—vv6W·z‘µW™‹ìòL$òãöœÆWisž¹áñø£Vm&Úö[&íæ»MJvÙBÁ9ˆ2 |¢°V%‰m¼ I�RxÃrÇ,mgqåËÑ2-ôê6JÁ¤@ð¬@%GÔãà]µHu6Šù¯aòü¹›S¹$yjÊ¿òÓžÇ=w¶s¸ç2ßÄw÷cÓ¬™ewwy© šXâÿ�G¸dÀEu&Gyù»9ç¥gIã}~M7W½4¨†“¦ý¶T’7NV[ˆÙQƒŒ+}Ÿr¶84ÑÇàOEqÇkr¾Y‡Óïa#nugß¹Õ˜’U‰’qÍj¦a¨ºŒP´W+n¶ÃË‘• jIU(Ó‚ÍŒŽ2qYúî«{«¦é:tÖv÷7É4‰qyIîö|U”–mù0áóŒW%p—^5×ü1¡ýœ-ÒÜYËlgŠw†x¡,‡xà†,ƒ·¯Íž�;{ÏiwöÓ[O‚f[‡H®$ˆyÇ`îPÙçžæ’ÓÃZM–k¤ÅjZÆÕÑàŠi^_,£L3’x `g�qÒ¹_‰77ÂÞúÉ. ]>_j“Í ÂYãX‚Û†28=Ô“Tñn»£ÝÞéòÅcyyþ†mM´[ùí2ía$ 1OznÜ:PI7…ô›qµ™`™¯Ê¢ùŸj”�;p¡¶‚77 gæoï²ãÂ:5Ì“K$‰¥œ\4Éw2H$#Ü®®~EU;HÈ9ª)â b›ûý:µa:ÚýŸÌ]Þa3lgÚ>ef˜‘“Ö²!—UÒ¼Uâ¹»Ñ×PžÏMHe[wŠ'/5Êò›Ë3õ�°¼¨Î�;ÍÂûJþÌž6¹B$d`Qƒ+RÊAÎEf?ô)wx¯˜Ü]Gy.u+’dÆÆÇ™Û ÇO•º1£xWÔu®î¬¡µ6ÚŸÛ!!]­®RêÅÎÐs»Ø†NAU²ñ.¿tº²¾‘5ÚÛÙ\ÚI2ÄVwÃ>\…Œ•å7äp¹Í�tÚ‡ôÍ.ê[‹86‘‹lóÝ£BNIHËLž»@ÍiמÅã]róWKm2ÎÖþÚÕ¢KùÐ$K–b²0ó& ›pF6>YJäWEáÛûÍ.æMNî æìQ˜â1â8î0,s÷zñ€@䌂Š( Š( Š( Š( Š(  1àÏ 7чœ6ËþƒÎ2ËÈÈžàUè´m.õ¿‹M³Žñc „D�À]ØÎ1Û¥^¢€)ͤé·Œ:„ú}¤·°±\¼*ÒF=ˆÈü)‘èZDSÝÏ•b“^)[™ÝNPç0>õ~Š�ÈðêÛCl4,A™!ˆYǶ7=YF0¸«Vz>™§ÝÜÝYi¶v×7Mºâh`Ty›$åÈc’O>¦®Ñ@Æ‘¦ PêƒN´]¦ïÈ_7oLoÆqøÔ6Ú%†•mtº%†Ÿ¦Ï8$¼Vª¾Öu]»°OLŽüŠÒ¢€9ÝÂvš_…-´-B B8 KyìAtO»½ lž2I<œœ Ó-°Ò¬E¹TC·M»På1Œ)äݪý˜þÐä7fMNc{µµCçàäoãæä¹©ÿ�²4ßì¿ì¿ìûOìí»>É䯕·Óf1lUÊ(¶‹¥Y[[ÛÚé–pAo!–¢Ubr,  †nG©õ«ÔQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@`i>–Ã^Ö5;¹ì®Mýȸ‹eŸ—$c ¼»nQ{K‡~Š�ÈO xr$Ù¥"y¢m«g`èý>÷=zÓƒü0U”øsH!ã061|È!OËÐ=@­ª(1<;¡Æ.„z6œ‚í<»€¶¨<åéµøù‡±¨áð¾‹kuaqi§[Z›#[­´)©uÚßt£·CÁ ×¢€ñG$‘»ÆŒñ’QŠ‚T‘ƒN NçBÒ/M¡»Ò¬g6_ñêe·Fò:}Ì—î¯Lt•~Š�ǵðŸ‡,YÚÏÃúU»<f'0ÙÆ…õSÈ=ÇJwü"þòícþÂÓ6Y±{eû$x‰”ùI AZÔP+]K±ÓßO´ÓlíìŸ;­¢R6Ï\¨9ïP·‡4&ÓLmN6 ÛÖÔÚ§”Ô&1ŸÂ´è  Û¯h—²G%Þ§Ü<Q#im‘ÊFA#… ‘Ž˜&«/ƒ|.›öøoGÐFø±‹æQ”ü¼ŽÕ·E�PM H¢hô«1@m£+nƒdG¬cŽýž•xoBŽÙ-“EÓ–ut‰mP*²ýÒ0ÉÁíšÓ¢€*[éZuíÅíµ…¬W'3Ï*¯/ûÌ[ñª×ÞÐu9d—PÑ4Û¹$*]î-BÅA I ç�=3Z”PSxc@x'´=1¡¸—Κ3iYdþû rÜžO5væÂÎòŬn­ žÑ”)‚XÃF@è6‘Œ ʬQ@­àÿ� ?›¿ÃšCy² dÍŒG{ŒáËÉù›ŸsëR[ø[ÃÖw÷Ú—Öà¬Eg´@’HR@Ë7OSëZÔPHô­:+ˆn#°µI¡R‘H°¨hÔã!N2ÀÎ=-Λcz$vVÓ‰SËK¶ôçå9ŽOæ­Q@Ëá ª"/‡t€‰'šŠ,£Â¿0ùxn=x°øKÃvÍAáý*#ï,¥”k³pÃcŒŽ­lQ@CÃXm¡] LZÈe·AiØ\K ÇÊxJŒxGÃJ ðö’Ý‹B¢Ê<DÄ‚Jü¼ÓÒ¶h  ŸøE¼<,ä³—öY$ó^±Ç±ŸûÅq‚Þýh¸ð·‡®ä’KK™äbv’Î6,‹ªIµp: JÖ¢€)Þif¡d–Wºu¥Í¢cl@®‹Ž˜R01QË¡hóÝÚÝÍ¥XÉshÛÌöè^:b2 {V…CSÑ4ic]WK²¿XÉ(.­ÒP¹ëÀã üªðLJãIÒ= LDž%†e[HÀ’5�*7¨�`jÑ@â±³‚Ålaµ‚;EM‚ŒÂúmcÚ«\xE»ó>Ó¤XMæ*£ù–ÈÛ•Nå# $Æ´h  åðþІ2šE‚˜¤icŲ Žßy‡Ü÷¨?áðßÐÂ?¥y.¡?±G´¨mÀŒcw8õæ¶(  äÐ4hå´•4‹’ÍvÚ¸¶@`ˆqò¥I¦[^½ìmœWNÌÍ<p*»ÆâX ’p3ëéWh Š( Š( Š( Š( Š( Š( Š( Š( ¹»Í>ßSñƒÅwæ´qØ#*¤Î€#‚~R=t•ŒŸò:Ïÿ�`èÿ�ôcÐÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�cÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øªÏÐü)b<?¦‹Ø.…ص‹Ï w.wì³óuÎk©¦E,s“C"IŠ*Àò#¨  ŸøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š­š(þ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â«fŠ�Æÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øªÙ¢€9Í: 7Å×0Z™–°Ê<Îãw˜ã?1<àWGXÉÿ�#¬ÿ�öÿ�F=lÐEPEPEPEPEP?=’j^+¼†ââõb†ÆÙÑ ¼– Ï8c„a’v¯_J³ÿ�Õü÷Õðmuÿ�Ç(¶ÿ�‘ÇRÿ�°}§þŒ¸­z�Èÿ�„jÇþ{ê¿ø6ºÿ�ã”Â5cÿ�=õ_ü]ñÊ×¢€2?á±ÿ�žú¯þ ®¿øåðXÿ�Ï}Wÿ�×_ürµè  øF¬羫ÿ�ƒk¯þ9Gü#V?óßUÿ�Áµ×ÿ�­z(™Ðü=¾Ód¾ŸXkNSºVó Ùg9â¯ÿ�Â5cÿ�=õ_ü]ñÊÕGY]20YNA¢@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9ZôPGü#V?óßUÿ�Áµ×ÿ�£þ«ùïªÿ�àÚëÿ�ŽV½‘ÿ�Õü÷Õðmuÿ�Ç**ØXø—R´Š{·€YÛHâêI¶³<à]‰ ½=+v²-¿äqÔ¿ìiÿ�£.(^Š( Š( Š( Š( Š( ~{$Ô¼Wy ÅÅêÅ ³¢Ay,*žpÇÃ$í^¾•gþ«ùïªÿ�àÚëÿ�ŽQmÿ�#Ž¥ÿ�`ûOýqZô‘ÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�㕯E�dÂ5cÿ�=õ_ü]ñÊ?á±ÿ�žú¯þ ®¿øåkÑ@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9ZôP3¢xv94 :KéõxÖ±Ãê—JÞaQ»#Ìàç<Uÿ�øF¬羫ÿ�ƒk¯þ9ZÈë"+£V A´´‘ÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�㕯E�dÂ5cÿ�=õ_ü]ñÊ?á±ÿ�žú¯þ ®¿øåkÑ@ðXÿ�Ï}Wÿ�×_ür Ò­…‰µ+X§»x´..¤›kœ7±ÆB¯OA[Õ‘mÿ�#Ž¥ÿ�`ûOýq@ôQE�QE�QE�QE�QE�UÝkJÓ%X¯õ;;Iw*O:ÆHõ�ž•[þ¿ÐJÿ�ÀÈÿ�Æ€5ë?äuŸþÁÑÿ�èǧÂWáÏúé_øøÕ=;R°Ôücs%…íµÚ.Ÿ³A*Èó‚A ޱm/.›ÆZ­„“﵊ÆÒx£ÚÆw¸Vç©È‰:ŸZÚ¬H¼9åë÷ú¹Õõ{ØÝà&!"–)°ªK¹wñsž0�º'‰!ÖîîíEíœöÉ­Ú*³$›¶6Ž3±¾Và rmV‡áx´+¶¹MJþíÚÖ+Cö¦Œå#.Pü¨¼1¹ïœœžkv€9ºշ‰4üêsËHn¬Ì(#‚0ŒU‘‚†È}Šw»q `YÑ<I·wwj,olç¶H¥hîÑU™$ݱ°¬qò¶c)#ðüë5ËøƒU’9Kf܈@ €$Að¹ãæü麅âЮÚå5+û·kX­Úš3”Œ¹Cò¢ò<Æç¾rry  ÚÈð§ü‰Úýƒàÿ�ÑkZõ•¤Z}…µ”�ˆmâX£äíP�çè(ž¼·m¥ÊÖw—V®€±kHY[…UpW“Ž£§§Q†ž5KéÚ½õµÝæmL—²ÚB hð&,$*FpÙ˧�à×G¨ÙO{$ÝVÉ{eˆ–‡ÌFú�}ëPð5ý—ØÆ¡©[[µ¬öÒÇ ÊDÂcºFmêß9bNáƒÉÎGÔW;ã=^ïJðÆ­6˜ê·ööÝ,Œ¡„Aˆb$`ד‚×A‰¤iT팱õ8�gècx‡ÂZŠ-'‡TÓmf–Hºh¦…X”vS´ŒäzhuoC£ê6¶³ØÞ¼wEÚ£Eò£i_Ë@I`I-Œí Œ‚p­ªæ¯<es8h/¯l­×ìÛ--Lk f ‘•R‡oÌ@àúw®–€1“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š("ÛþGKþÁöŸú2âµë"ÛþGKþÁöŸú2âµèuK›ëpLÒÏik¦Û]ÇQpÌׂ€2Ĉ—žzu«z»¹ Ó%­Å¬¶—Þxn6nGÚ¯Õ”‚®§‚zúÖ}ׄóQÕo$Öõe:•²ÚÉo¬h¥Šì"=À‚ïÔœî9ÏFÐÓF’úE¾»º{ÙViMÆÏ¾#Xò6*ã*‹ÇN8Å�j×/w.³¥ë6· ¨O}o"Í%Ý„vÈÂ(•”ÄUC–ݱ0ÄîÜHEs—~šôÞ ¼I¬ù7A•¢ìé´@– ø\ð |ó@ô=v-r¦K[‹Ym. ¼ðÜlܵ_ª3)]Oõõ­JÊÑ´4Ѥ¾‘o®îžöUšSq³ïˆÖ<Š¸Ê¢ñÓŽ1Z´‘áOù´?ûÁÿ�¢Ö¤×–í´¹ZÎòêÕÐ-iK+`pª® òqÔtôê,é¶)¦iv–»:ZÀ«7R@ûñMÔl§½‰ NîÀ«d½²ÄKCæ# }�>ôÎiþ5EÒôG½¶»žKµ‚‹¸a wþQR†Ïš )+Æì+¯®V_Ù3þëTÕ Œ¼2˜–Te2Ç7œ$ùÑŽã!,Üà“È®ª€0üY®K xsP¾´Š9¯ ´šâ(ä'n#BĶ9Àà}HÍX¾ñ—¦êPi÷W—3” .Ê ±TÜáJ¦æ ÄdŒ ¥âYøžÆö)..í®n-Õe†êd@lV@ †ëÓ¥UÕ<'{,i·²Æµ’. k‡G‚Q&|à c»hœ·{µ�uu‘mÿ�#Ž¥ÿ�`ûOýqZõ‘mÿ�#Ž¥ÿ�`ûOýq@ôQE�QE�QE�QQKuoì–x£lgàP´Uí /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ€([Èã©Ø>Óÿ�F\V½bYMþ/ÔÚ)E€”`GúËŠÛ  [K˦ñ–«a$ûíb±´ž(ö±î¹êr"N§ÖÄëwwv¢ÆöÎ{dŠVŽíY’MÛ ÇØß+a†9’/yzýþ®u}EÞö·x ˆFˆ¥Šl*RîAÝü\çŒ7Cð¼ZÛ\¦¥vík¡ûSFr‘—(~T^G˜Ü÷ÎNO4»\á]jÛÄš~uF¹‚å¤7VfÁF*ÈÁCd>Å;‰Ý¸0::ÄÃó­ü×/â VHå-›r E�‚� ‘Âç›ó Ñ<I·wwj,olç¶H¥hîÑU™$ݱ°¬qò¶c+j°´? Å¡]µÊjW÷nÖ±Zµ4g)r‡åEäyÏ|ääó[´‘áOù´?ûÁÿ�¢Ö¤×–í´¹ZÎòêÕÐ-iK+`pª® òqÔtôê-iöQéºm­„,í´) 9bª�Ç~)š”÷±"A©ÝØl—¶X‰aè|Äa Þ€9ÄñªXx?NÕï­®ï3jd½–Ò©G1a!R0Û†ÎXí8ºúåõXßÙ}Œj•µ»ZÏm,p̤L&;¤fÞ­ó–$î<œäq]4hR$F‘¤eP ¶2ÇÔàŸ ÏøÏW»Ò¼1«M¦:­ý½„÷K#(aDbƒÆI�õäà…5cVñ$:>£kk=ëÇq$Q}ª4_*6•ü´–’ØÎÐØÈ'�ŠOøKCñE¤ðêšm¬ÒÉ@·M4Ы2ŽÊv‘œCÍU¼ðU•Ìá ¾½²·_³l´µ1¬1˜$FUJ¿0ƒéÞ€:Zȶÿ�‘ÇRÿ�°}§þŒ¸­zȶÿ�‘ÇRÿ�°}§þŒ¸  z(¢€ (¢€ (¢€ (¢€ (¢€1“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£¶h�¬dÿ�‘ÖûGÿ�£¶k?äuŸþÁÑÿ�èÇ  š(®N íVÛÆkª÷°ÚÞI$v)@ö²RÀ7îĪ囊ðÞ€:Ê+Dñ$:ÝÝݨ±½³žÙ"•£»EVd“vÆÂ±Æv7ÊØaŽ@­ª�(®KLñD×¾$x.aº‚Îk©ì¬X"f’ÂMÍáó„ Âõ'5§¢x’nîîÔXÞÙÏl‘JÑÝ¢«2I»caXã;ål0Ç PÕQÑodÔ´:þUU’æÚ9S , =¹«Õ—á¨e·ð®Ñ´rÇe :8ÁVv4©EfëóÏl=bãKŠ ÒK5ºDÌ@˜Ž¡z“ÆxõÎø–oøFÂÿ�Y‹QÔ­šææá!ˆcቓ”\€ÀaFã´ �uÔQ\¿‹¼Cu¡Ë§G Å•”Wlèo/ayc� E…eÃ?Í‚NÃÁ$ �ê(¬%ñ=­§öm¦±ºÓSºŠ$ ÈÉ!Ú¤PUrá•K¸Ž3[´ŒŸò:Ïÿ�`èÿ�ôcÖÍc'ü޳ÿ�Ø:?ýõ³@Q@Q@Q@s’é:n§ã+ó¨iö—f=>×gÚ!Y6æKŒã ã ®Ž²-¿äqÔ¿ìiÿ�£.(�ÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�µè IÓ¬tßj‘XYÛÚÆÖ6ŒR•;îp^t‘mÿ�#Ž¥ÿ�`ûOýqZô�Q\ñEÅ·‰. ÕeN°exR{dŒeg<ÛvÇКÞÒµ›j f±’FÊa•e…átpÃ#€Àá”ò:hýW+l¤Öo ¸---ŒÈ,2~üß5–O¹òÃhË|¤ð(ª¢¨iZÍŽµ³XÉ#e0ʲÂðº8�á‘À`pÊy5~€)iͩ薃F#k«xæ(B–PØÏ~µv²|,¬žÑQÔ«-„�‚0AòÖ§ÕTxiwVV¤ÒKwnÓ.�è]>¹ÝÆ:s~Šæ4ÏÀ–:TzÕÌk¨ß$n>Ïk(ˆ \ˆ·˜F[€7,ÓÐE`ø‡Äh÷VV–¶–óÜ]¬¬†êëìñâ0¤®ý­—;¸\rŒU­?Ä}ñ´·{ˆ­µ+‹t¸:tÒ¨¸Œ2ƒ†LçŒóÅ�jVE·üŽ:—ýƒí?ôeÅkÖE·üŽ:—ýƒí?ôeÅ�kÑE�QE�QE�W>Ú}•÷Œuwgoq³OµÛçD¯·2\gÐVE·üŽ:—ýƒí?ôeÅ�Mý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€Éþ£E�`é¶v¶^-Õ#´¶†Ý £‰|ËŽp+z²-¿äqÔ¿ìiÿ�£.+^€ +’(¸¶ñ%Ô¬±éÖ¬¯ ObàÌ‘Œ³¬âB‡€[nÀØú[ÚV³c­A,Ö2HÂL2¬°¼.Ž�8dp2žGB �_¢Šæ´ïA¨ø’}88†4’H @ù¹xÉ“î|¤·%¾RxÒÑYzGˆ´½u¦]:áåhUƒÂñå;w¨Ü­µ°Ã ààÖ¥�Rѯ›SÐôû÷@umÌ«ÑK(8]¬¯ ÆñxKFŽDdt±YX`©®AMª.¨ñ ÒH%¤–îݦ\Ð*º}s»Œtç ýÌ[x¶ ;Úu÷ˆ®cŽ{¸ZrÖÖ²”‚ò£yE ɸ±À'­tô�Q\¿‹¼Cu¡Ë§G Å•”Wlèo/ayc� E…eÃ?Í‚NÃÁ$ ¶¾'µ´þÍ´Ö7ZjwQBd#y$;B´Š ®\2©b7Æhv²-¿äqÔ¿ìiÿ�£.+^²-¿äqÔ¿ìiÿ�£.(^Š( Š( Š( Š+ö÷U}xéúq²DKešá‰%™p6‘ýÚ�Û¢±¶x›þ~4ûñ'ÿ�FÏÏÆ‘ÿ�~$ÿ�âè�Oùgÿ�°tú1ëZdŽH]&�ÆAÞ¡óí\öš5ãŸí¶y?³ãÚmÑ”cÌ~¹&·®í-¯ídµ¼·ŠâÞQ¶H¦@èãЃÁ <´[‰<!ðÅìå·ŽðˆV9®#2*çN›9”ž22@­¯ êw¾°nîÒ%¸ûŠC|·1ÜJ›Ó<ím»‡±¸|7¡6”º[hºqÓ•·­¡µO(7\„Æ3Éç—q4ö.)a¦5Ê65ÄéŒ x¥�tõŠžwö›ÝWP½t.mÄÆ4åÁRSËEçk d€O<Ö¤³Oj’\[5´§9‰œ1^xäqӟƪÞß_ÛϲÛH–î= ù‹4h3é† Ð=ÂñhWmrš•ýÛµ¬V‡íMÊF\¡ùQycsß99<ÖíeÚê”×)ú$Öñž²µÄlð5¡;É<Q¤U%c cé“À  UðšjOv.ïvy²Ï°‘DpM"•yS ¸1 ýX¹ˆ4º…âЮÚå5+û·kX­Úš3”Œ¹Cò¢ò<Æç¾rry©?µuú.?ð*þ*´læžâÙd¹µkYI9‰XŽxåN(Å2)cž$–'Y#u އ!ä{Š¥}{o8Km&[´Æ|Åš4ôÃkÂ:†¢ÞÐâme‡ìP/žgŒŒl_›Ïá@£a§§Oc;:Ã:“a�•=G ðFAö5—â Áâ-â}GP·ŽKIlåŠÞD ñÉÙ ­ƒÇQƒØäq[s;ÇFYIXÁ�¹Ç'šÉþÕÕÿ�è\¸ÿ�À¨øª�× DˆÒ4ŒªvÆXúœ�3ô°¼Eáûf{Yío ‚HcšŽêÓí0Éwe7/Ì6 ÷`AÖ½œÓÜ[‰.mÖL‘峫ï•$T÷—ÖÒªÚér^),“"`ú|ÄP=sàÍBH,í!ׇجÖËÉŽæÓÍu{i÷o¹ß´nã>‡WaYVÚŽ§-ÂG6‡4±ÃH×0_|šÒ•!wŽ3#ª’¨¦M�d§ü޳ÿ�Ø:?ýõ³\ÆwysãyÅΛ% þÍN^TùhØû¤úŸÊºz�(¢Š�(¢Š�(¬‹­KQþØ—OÓì-gòmãÞâí¢ûí"€�³þ¬úu£í>#ÿ� V•ÿ�ƒ)?øÅ�kÖE·üŽ:—ýƒí?ôeÅiñý´¯üIÿ�Æ*¶’÷Òx³T7ööðIöL,´ ÷ä¢àõã�nÌ‘É ¤ÀÈ;Ãt#¾}«ÎmâO|1{9mã¼"ŽkˆÌйӦÎ@e'§LŒ+Ðîí-¯ídµ¼·ŠâÞQ¶H¦@èãЃÁªGÃziK¥¶‹§9[zÚTòƒuÈLc<žq@¾Ôî5}Ròîí"[±Ã†ùnc¸»Méžv¶ÝÃØŠëk•ŸRFñuÔ1ØO2¾j±ÇlIÀf_^�ÏJÖ‡]´–•ÖXIЏ¨Î2J’1ž23ÇZµNm]#š¦3NNšMy™º‡µW/s®ÁÖí#ØIkbSÈvF@ϺFÞB»6õ'Óü?¢\èójrÜ^Ap×÷+rDVÆ Œ"HÈvÈ"0}y9&‹ÇÆ4Óo§øãòÀÈ# àäwãŠKÇ<ëé·Ð†þ9<¢# a\ž{`sOÙO±?_Âÿ�ÏÅ÷›•È]ø2öYdºçÙaŽââòÈ%¨/oq2¸v,[æ_ÞÊBáN[¯sk¶‘@Ò¢Ë1pT�ÆAb3ÆIÆxëTÿ�á*�àèÚ# ƒäðG_ùiÛ¿§z=”û ûC ÿ�?Þ‰|?¢\èójrÜ^Ap×÷+rDVÆ Œ"HÈvÈ"0}y9&¶ë2ß]¶šwŠx]¸òA`OOºHär0yZãÄÑÃ)H´ëÛ•À"H¼­¤tãsƒŒñœc<Qì§Ø_Âÿ�ÏÅ÷£r©ê¶-©iWV+1‡í˜š@2BžŽqœÝkÁúÔ¾Ñ!}ú4û #íð?»ñ!n~™®Žy(D…æeÆT3{ Ä ýH¬Î³œÖ¼1¨j—¡Õá‚Ê9-e†Ùì·ùO¢O”‡^hŒð0qÅtõ‘ý³}ÿ�BÖ«ÿ�-øõhÚÏ%źÉ-¬ÖÎzÅ1BÃþùf­�s¾0ðýÞºÖF{Ø! ,ï¥x»Ù*º+é†ÇÆy³¬ü5â(µ]"{É4Ë•°»Y¤»<s\/Ùg]„ËnÉc�ù@®ªóP¹µ˜$:=íÚã>d_§Ï"ŸÒ£¶Ôîç¸H¤Ðµ tc̲½¹Uú픟È�Ó¬‹oùu/ûÚèËŠÔ•Ú8]Ö'••I¡˜ú 2}ÈÏéW³ÝxËRó´Ë»Oø—Úó;DzI?÷ºäÿ�ß'8ã Q@Q@u©ê_Û3iú}…¤Âx§y..Ú/¾Ò(�Û8òÏ9ïKöŸÿ�Ð+Jÿ�Á”Ÿüb€5ë"ÛþGKþÁöŸú2â´øþZWþ ¤ÿ�ã[I{é<Yªû{x$û ¦ ÚPFûŽrQpzñÆ€7fHä…Ò` dáºß>Õç6‹q'„>½œ¶ñÞ Ç5ÄfE\éÓg 2“Ó¦FHèwv–×ö²ZÞ[Åqo(Û$S tqèAàÕ#á½ ´¥ÒÛEÓŽœ­½m ªyAºä&1žO8  _ jw¾©ywv‘-ÇØáŠC|·1Ü]¦ôÏ;[náìEuµÉÝj±èž-ºŠ=:æáNµ –¢0#U{ŽÌËÆ=:cµlÚë¶·é$‰=¼äÊ™u' ùr9Œ‘V©Í«¤sχ§.IÔIömš‡µW/s®ÁÖí#ØIkbSÈvF@ϺFÞB»6õ'Óü?¢\èójrÜ^Ap×÷+rDVÆ Œ"HÈvÈ"0}y9&£»ñ\VÓ‹L¿ºŒ(a4>PB:gçu8ÏÇZ-¼T“ܬ2é:ª’Á¥˜DUJŒœ…·éÆyÀ柲©ü¯î#ëø_ùûü ™¿\Ä~ž=Mf]L 8.§½´mÆø§™\;,C.e…Ú9nIÀ­Yµ»HáwÍÀbŽ3¹É�nÀÉí’3Yð™ »¿°u]¸ÝœÛãÆÖôÏõâeSù_Ü_Âÿ�ÏØÿ�àKüÇøú†“ªO}ªÃ},öp[HVÐÄXÄÒäïl“æ¶}ñŒ+£¬»]zÖxËö¯–)“,¸ë¥‡O<wª×ž(ŽÚàE™x¤.$€FOA‡u9=GöÍÊÊÇõì/üýÞ¿ÌÜ2†R# ŽõSU±mKJº±YŒ?hŒÄÒ’ðØäsŒàöë\׆¼@m4]+NºÒoíÌ‘E$Ìa1®Õ OË!$dc u®‚mnÎ(×Í•Ô7îÒ2‘É6G|‘Žô{*ŸÊþá} ÿ�?cÿ�/ó2üQá›Ý~Ò[mV;;¬¥´’Ý­<ÁóŒ_™pTqÎF Æ5ÑÆ$ ••¤ 72®ÐOrN¶MsƒÆ‡õrI�ärOOùkß·­^³ñ ­Õ¿›4SÚ»'PNÜãvP°ÆxëÖeSù_Ü_Âÿ�ÏØÿ�àKüÊþ"ðýƳ=¬ö·A$1Í Guiö˜dŽ@»²›—æ{° ‚k:çÁš„YÚC¯±Y­—“ͧšêöÒ+îÞs¿hÝÆ}8­KïÅi8Ž-6þì`’ð,jŽªCºœÉã€j(<X³\Ghºœ*ìªdq ž™ !<õžÙ£ÙOùXþ½…ÿ�Ÿ±û×ù d[Èã©Ø>Óÿ�F\TÒkv) H²4›P¸UCóœ׌“Œ÷¬­R“Qñf¥#i×v‹ö aþcÎD·¢»wÏýò}³2„£«EÒÄЪùiÍ7äÓ:j(¢¤Ü(¢Š�(¢Š�+?äuŸþÁÑÿ�èÇ­šÆOùgÿ�°tú1èfŠ£¬êèš5æ©q²Ai Ï"Ämª dÐõz€1“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£­k:qÕ´‹‹pÖþz…2Wã# «# ƒÔ@ë?äuŸþÁÑÿ�èÇ®&'·}O°‡H´¹°ñ Ö±\ÛÙì‚\ØÌåü¥aÏ͵€a–N¾…õ;_X7wiÜ}ˆÅ!‡>[˜î%Méžv¶ÝÃØŠ�ëê¬z„ºŒºtwÖÏ}‡’ÙeS")èJç r9«Uçi¦ßÙxÖÅ[ì’ÚXÞ_jS\ÂÌfX¦G"9n ê%–0p6ТQ\G‚<E&­«_[>ºš¬&ÆÖòÙ2—iVE €` ‰Á,T¶ ]½�D·Vïq-ºOOV–0à²ÎÒGP3× °Õ´íUem;Pµ¼X›d†Þe#z¤àûW©ÞÛê>$ñ¦•¥_[6«'‡á†(£•w‰»ÈǨ2GŸMÃ=i¯hézú†‰u½–Ÿ ËÔ±Cæ fÝŽ€ýäl¡ ŒóŒæ€=«éöQiºm­Œ%ŒVФ(\ä•P�Ï¿Ïx+X—S]fÞ]Yu?±^ˆá¸Ì{š&†)>Zª‘¹œÞøÍnh÷Í©è–îêÚ9Šƒ¥”~´bææÞÎÚK›©ã‚Æç–W ª=I< '¹·µTk‰ã„Hë.çc…Qž¤ž�ï\çÄk»K?‡^ k¹â„I§ÜE‘€Ý#FÁTg©$à ­ã}wF‹Ãzmܺ’Áq©XIÍ2í‘êfSœKè3@Âx§Å?Ùúý¼vºú[ù2؉¬š8ÂËÓ„w,À±r¥B‘É9ÀØñú£|<ñ“]2á†OñÛŽq|PGEs*ð톳m.èUõ)-­Û}ë/úhüå¸ûÇ�œc —ÄWÉâû+8¦Ó§Ó.oȬjÆhÝmšbKîÆr¸Úàwdí  ÿ�‘ÖûGÿ�£¶k?äuŸþÁÑÿ�èÇ­š�(¢Š�(¢Š�ȶÿ�‘ÇRÿ�°}§þŒ¸­zȶÿ�‘ÇRÿ�°}§þŒ¸«:Ω‰£^j—Ë$¼ò,@Ú ±ÆHï@«"ÛþGKþÁöŸú2âµë"ÛþGKþÁöŸú2â€5èª:Íµåæ‘qoap\È¡VGÝ€27r¤0$ddFr:Wö¥jt{;X%®·-•Äj³Ë ù²–Q™_sÁ°A*T€8ä_Pþ©Ž…±'np<Ù¹'øûc‘Rl/\™ÙŒ}‘sÙÆÞ™Ç;:cçëY6z¯öωEä–ßf›ìÑBð³n1ÍÅÄlŽ ‚~SÞ´¿söùwÙäÿ�ÓM»|ÏÏnïøïökÑ¡ü8ÿ�]Yñy£_[«¯ão³êý>d줳¬Ag ˆƒãžàöoùiÐñB© ¤«� &  �9ç°ÛþYôW¶ÓÙxêÞI¬ü»†¼Ôdº¿.Ÿ¿µòب|À!hÕ¸�mù2I5¹áÝZòûS¸µ¼62yqÙ\Ã5¢:‚%lQ¹ŽH ò± 9` 5;èÅ<?/½uëòóû¾{›ûËÇ—&vcd\çvq·¦qÎΘùúÓÙIf!X‚ÎAÇ=ÁìßòÓ¡â ýÏÙÿ�åßg“ÿ�M6íó?=»¿à[¿Ù®STf‹Ä0k,ß ]ó ¿é}‡wv8ÇÝíVôüz_ðjiNÊëìý§Õÿ�_âÙ’© ¤«� &  �9ç°ÛþYôS6°A•q…˜s»8ÀèqÎΘùúרôMbÆÛÃ’é°%Ýœo–W*óˆA&Ñò2¼ÅrFì äGCáÝBMODŠât¶I–òC";–r‚N•Î -¸ÿ�v¥JîÆµ(òÁÍ=5êï÷VÙ¶—b4Í"ÊÁ\È-`HC‘ÛT ãð«uOI¾þÔÑìu/ÊûU¼sìÝ»”63߬ª7ÃÏ™1…Ó.dÿ�±øç÷Åy‡ÜÎxÐFtk'b7.­§l$÷7ƒÃ?†j ¼CŒ,죛N›M¸¼{"‘«£u¶i‰fÝŒåpT)À îÉÛ@UÎxÔGýfïË«iÛ = ¼„~ü3Qø¯Ã¶:Å´Û¡VÔ¤P¶×m÷¬±ÿ�-¿ƒ·xàŒ`§¬‹oùu/ûÚèËŠÌÒ¼C}yâµ±’m:ãO¹·ºžÚKUmÊ!š8ðÌX‡Ï™Î@*@-Ö´í¿äqÔ¿ìiÿ�£.(^Š( Š(  ‹oùu/ûÚèˊ׬‹oùu/ûÚèËŠ³¬êèš5æ©q²Ai Ï"Ämª dÐôz²-¿äqÔ¿ìiÿ�£.+^²-¿äqÔ¿ìiÿ�£.(^Š£¬Û^^iö ÌŠd}Ø#w*CFFAg#¥pñ_jV§G³µ‚Q¨ÚërÙ\A6«<°Ï›)e•÷1LÛ¥HŽ@5õOŽ.p ÿ�‰d=7ñÏþqüGå<T†RU€ „“P�óØíÿ�,ú+×UþÙñ·’Û i³Ä2Âì[Ëx湎@êFçºôç®›<ÄÇ—ðãnìçoËŒñœ}Üñ¿Íz4†¿®§Ææ-}v~«¯÷õo˜l/\™ÙŒ}‘sÙÆÞ™Ç;:cçëOe%˜…b 9DG÷³ËN‡Šó¨í§±ñ}›Iee廞ëP27—=™/±HxT)~`0ÂA­ïk—zž©{k|úl…-’í$¶�|á `rNx–rÊ õ´îöïÓúÿ�€sJšŒSROH¿‰÷¶ý~ÖÌéÕHe%X�ÈI1�Ï=€îßòÏ â™±ü¼yrgf1öEÎwgzgì韭 ³ÌLyyß6îÎvü¸ÏÇÝÏûüש ߊšÀEçÿ�Â? Æ#Ý‚þeÎ1ü]Bõç;††íý_ðI„Ó×£êû¥òßWövGfÊK1 Ärˆ0 Ž9îfÿ�–*ÊJ°’b �ž{Ý¿åŸAÅpFM3CÕmbðì¶%Õ“–33”vi"Tv rÒ²´Ù#¶ŒFGIáNM_JŠêàZý¡nÌ öpàŠGJ†'„Ê䑌î$àÒNú8(»§»îï·o–ß=ÍmåãË“;1².s»8ÛÓ8çgL|ýi줳¬Ag ˆƒãžàöoùiÐñP~çìÿ�òï³Éÿ�¦›vùŸžÝßð-ßìÖGV&ðv¿¿fáizFs»xˆçýÝ7v鳚©iwëý[ÒJrŒo¿/V÷—ólÍåRIV�2LA@�sÏ`;·ü³è8¦l/\™ÙŒ}‘sÙÆÞ™Ç;:cçëXž%}‚ÉÔ¦ñªi› »>|xÆî3·;sü9ÝÍP›_š?ÚÙ$ºDš|óµ™TM±4Ç-ž›—qœw`í¥}méý[”à>kÿ�7WÒÝ®]‘Ö²’ÌB±œ‚" #Ž{ƒÙ¿å§CÅ ¤2’¬�d$˜‚€�çžÀwoùgÐq\ïŒÄÙ–í/jöØ2Îï´Âîÿ�>ö8ÇÝïIâÇSÿ�u j2y)msóo´ù~WFãn>òò3Œ9Î06ì8Æ.JîÚ÷òíú|÷: åãË“;1².s»8ÛÓ8çgL|ýjÆ„Añ¢A80Cn÷÷]ûý{×.¿*x‚ÒÍ%Ò%Ó®&k< ˜²b&›–ÏMË¸Ï îÁÛ]–‰ŸøI5-Û·}’ îÆsçÝuÇúqXâ~™édªØþÇ{õ]ÿ�>¿#£¢Š+„ú¢Š(�¢Š(�¬dÿ�‘ÖûGÿ�£¶k?äuŸþÁÑÿ�èÇ |míç‚õ‹:Â[Û»ËIm£Š7DÁt+¸—eçœûVF·¥Ük´:‡†dÔ¬f²Xãµ–xƒXN‹9ùñ’ ñ–eòøÎk¶¢€1!ñ” Œ¦ÅÀ9Çï½hßé¶:­©µÔl­¯-˜‚a¸‰dBGC†V%Ôz”ž6“ìvcNwŸlÒç÷Ó.?Z衬('ty@ù™ª“ì 8üÍ�S¸Ðô›½54ë.ÊkÆËi-Ñ¢\t‘¥R‚4‹Æ2G*FšlJª£@‘ð�ô«70kpík¨éñÀOÈ’Ø;°ì&P!YútwñøÆä_ÜÛNÿ�Ùñí0[´@1ú‚íŸÌPGHª«  œœô´PEPEPY~†[ èðMG,vP££Œ`€GcZ”Ôu‘у#�U”äê(ÔQE�WPÓ,5kSk©XÛ^[’ÅsÈ™šµE�cOá \˜LþÒe0 Ž2Ê6òÐtUÊð`*Ëh:;_›æÒlMáJn ºy…ÀÀmØÎ@àТ€1“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£¶h�¢Š(�¢Š("ÛþGKþÁöŸú2â«øÚ ÛÏë:u„··w–’ÛGn‰‚èWq.Ê03Ï9ö«ßò8ê_ö´ÿ�Ñ—¯@9Ò®o¼L÷ÚŸ†$ºó^ ì®e¸ˆ6žT4GJáÛ1î ¿] ·üŽ:—ýƒí?ôeÅk×5u{=—Œ.Ì6É7›cl´…6$ùcòž9äöªŒ\‘•jСzŽËúìmêêv†Úáî2AͽÌ?íÆÊß­QŸÂúEÆŸ “A*Ç ßhâ¹–9D¸ ¿š¬± Àœä‚sH5«€6@ÛrP1Îs÷zuÇ8ôæ£mrø9 ¦#.NÏ<ŽÇîtn‹êkO«Ôíø£‹û[ üÏÿ�—ùòÚAaâö´µŒEiÖÈ[lùu|÷^­V·¿—Ÿ2LìÎ~Ö¹ÎìgwLãý1òuªjžóÆw2Mm䕱¶Èx̘’X³Xr¤UýåãË“;1².s»8ÛÓ8çgL|ýk²’å‚OúÔùÌuEWRtïgéü±ï×µôïÐgÙáYfa )pçÌp€AäÙOú¾§Š¯a¤išl¡¬tû[V+D¨¹NNÒW'%å¡ù—y”–bˆ,ä`AsÜÍÿ�-:(U!”•`!$Ä�<ö»Ë>ƒŠ­ o+õßË·åøßÈf÷òóæI™ÏÚ×9ÝŒîéœq¿¦>NµR=L¶ÔåÔ Ó­b½‘¥ßq¢Hܧ‡A€NcÀ-‘Vö?—.LìÆ>ȹÎìãoLã1óõ§²’ÌB±œ‚" #Ž{ƒÙ¿å§CÅ=NvëÓ·}àþ™«áýl±dØùwÄó!Ž6YX å—9È޲™qбiimcmåZA¶d)¦ —åŽÐcÝû“­ZU!”•`!$Ä�<ö»Ë>ƒŠfÖ2®0 s�Nwg9ÙÓ?ZVCr›N÷ëÛúôüu5<*¥|!¢«°€{~íjXjÖ¦×R±¶¼·$1Šæ%‘2:0#5jŠòϽ3.¼9¡^Ù[Ù]èºtö–ÃA-ª:D1•HÂñéNÿ�„EŸlE‡Ú·¬žÙ“~åVÝŒäíZ4POEÒµ¨ãUÓ,¯Ò3¹ê”)õÅA}áS¸K‹ýM»š5’OiŒª:�Hȵh  û}G´»û]¶“c Îæo:;tWÜßxî9=ýj oùu/ûÚèˊ׬‹oùu/ûÚèËŠ�×¢Š(�¢Š("ÛþGKþÁöŸú2â«øÚ ÛÏë:u„··w–’ÛGn‰‚èWq.Ê03Ï9ö«ßò8ê_ö´ÿ�Ñ—¯@N·¥Ük´:‡†dÔ¬f²Xãµ–xƒXN‹9ùñ’ ñ–eòøÎkvÌcÅÚˆ#iÖ|œ~òã½l×'}}gã[ų‚)7éÖżÌñ‰.08õΩ UF.NÈʵhQƒGd¿áŽ‹P°‡S´6×p±’mîdøÿ�n6VýjŒþÒ.4ølš V8fûDo̱Ê%ÁüÕ`åˆfç$š"ÖfòÓͳ`ø]ä6|Ç‘ÑOÓ½T›YÖ<Æ0XE³U}ÛóýÒñ?»Íiì*vüŽOí\'ó~üŒÉ­`Óü]-­¤b#Òàˆû@ýäç¿Sžwv?1èjò±, ³YPÀ‚9ã¸=×þZuV8¼¹¸ñ…ì—±Ç*˜×r²îŸëžqÙºt&´Öx·¯ïïGÕ{zö÷=cè¹ÙJ-A'ýj|Î:¼'Šœ¢ômvþUß_ÖþC,»O™,¼sr¥ŸæÇ/ß‚Fþ˜ù:ÔVšN›¦ÌÏc§ÛZ·ï6á"ù~ö0@¿òÌüÍš—Ï‹Éûÿ�òÏþ}Ó?û¹ÆØéŸ­=§‹{~ñ~ô[·¯cÖNZrù~×õ©È«iñ>Wêÿ�ù.¤ªÄ²‚ÌAdCçŽà÷_ùiÔqYñi:u½óêpØ[ǨIv™²üæP2Iþÿ�L|jÚÏõýâýèú¢¯o^Þç¬}"™çÅäýÿ�ùgÿ�>響ýÜã?ìtÇÏÖŽ_/Ïúþ´Y$í.ýcßú·OæÔª|?£,WP.“b!¸–Gž1j²°\uæ3Éâ­ÙÚ[Y/•ipFò#2DÊ‹˜•æÎGY1‘À§4ñooÞ/Þ“¢+võïìzÉѰ(YâÞ¿¼_½TUíëÛÜõ¢äRåò-ÖMÙ˯uÛúó¿íïåçÌ“;3Ÿµ®s»ÝÓ8ãL|jBÂÏSíoíaº·Üÿ�ºœ£'•Æ2p:Çœž /Ÿ“÷ÿ�åŸüû¦~ÿ�÷sŒÿ�±Ó?Z{Oöýâýé:"·o^þǬŸ/—çýZ‘ÉYóvëÿ�Õÿ�ò]Jsh:=Ý­¥Î•e=­³GäA,qÉ_/ð¦?09“ªàRcibo¶ :Ûí[Uüýñy›•°­æcïÀ~€|jêÏõýâýèú¢¯o^Þç¬}"™çÅäýÿ�ùgÿ�>響ýÜã?ìtÇÏÖŽ_.ß×õò¯dí'תïý[§ójE©i:n¬=KO¶¼HÚM‹pÂ|¸áX¾Ã¬}[ Ô7^Ñu˜§¾Ò,n¥C«Ïr•��ÈÉ$íë ܸ«Í<[Û÷‹÷¤èŠÝ½{û²tl x·¯ïïGÕ{zö÷=cè¹¹tØ¥Y)i.½×o¿õ¿‘M´5®MóX[›Â†à¼~apØ æcïÀ“¦>Nµ­¡�<E¨€�Î �»@ýý×nßNÕKÏ‹Éûÿ�òÏþ}Ó?û¹ÆØéŸ­\Ј>"ÔH ƒgmÀþþ뿯zí™êd•9ñ;ßÜòî»~=;u:J(¢¸Oª (¢€ (¢€ ÆOùgÿ�°tú1ëf±“þGYÿ�ìþŒz�Ÿ[Ö­´+¹¸RåäEÉ4Ž„W8òç¯nÎwº´Šy-¥¶w\˜e(Y=‰Feü‰ªzÛâÕ":Ú¼r6׆?$…êÂWPGn2}«ŠO ][ý–×RÐWYÓþÎéon—œæic{€L²ˆ¸Ð^Ÿò:Ïÿ�`èÿ�ôcÕíOQ‡JÓ伜;"•UHÆYݘ*ªŽä±�{šÏ„cÆR‚0F›�ç¼~õo\Ó Õtyìî<ý¬UÔÛ$WFŒ¤ð2©ãŽx  ^-³½’Î/²^C=Åì–ª›­æHšR¯†#”BARÀäzÔÉÿ�#¬ÿ�öÿ�F=rsxFò>Ö{Ë uÇ—[}FöÑÚîlð(;ŠFÄ~ì‘ÀûÀdO é³i¢ÙN6²XnHƒîòck‰Y#Ï}ŠU3þÍ�v5ÍØ¬c⺨p[L±/ƒÎï2ègëŒ~•ÒV|z£6£“b—Ó‚²Ü­º $¨fÆNp:Ѓá_ê6š|Ze‘Ôà…­‰vd²ˆÉ’1‚e7 †ü¼6–®£Âڥα ¥Ýà„\¬÷òÆ)ž-ÀpÌã'êjHü3 Ea%„zš–r0w·[HÄlÃJãÕÛ; =>&ŠÊÒ hÙÌŒÆ=XÜúÐ? ±ÚxëÄS,o&Í&ÊWŽ%ÞîD—|Ô¶��}s¶^#oøJõ‡‚Y`¿»±ÓÒ?í ˜¢Y ÷ T+ª“ò° >]åO# W»‡CÒ-µ9u84»(µ A]%º,¯ž¹p2zý©÷šF›¨ EîŸir%TYЫïIPr9�³èIõ  ^Õ.u.ï"åg¸·ÀF1Lñn�“€vg8ÏSNð§ü‰Úýƒàÿ�ÑkWìì,ôøš++H-£g22C@XõbsëI§ÙG¦é¶¶³´VФ(\动�gø  _ª7ÃÏ™1…Ó.dÿ�±øç÷Å7Æ:ëvÈ÷VI y¼›ûT¸¶à`º·L üÀ‚7ÛÔ4Ë ZÔÚêV6×–ä†1\IJ&GC†f«?‡4)~ÉæhºsývÚîµCäDãåLP1¤x®þêÿ�ATN‹N¿e¶kH•¼ÛY>Èg*[pR»v„àwvÖ¿DØönøÜº¶°“ЛÈAÇáŸÃ5¦ÚŽ×æù´›xd›ƒnžap0v38©èºVµqêºe•úFw"Ý@²…> 08 ?Æ:…ý®·upi%®¦¥úÙÜ¡atÅä 0à"$0AÆNkRoßÇã ;(æÓ¦Ón/ȤjÆhÝmšbY·c9\ p;²vÖýÆ•§]Ëm-Í…¬ÒZ¶ëw–c õBGÊx*&Ðtv¿7ͤ؛à ”Ütó €Û±œÀ4Y?äuŸþÁÑÿ�èÇ­šÆOùgÿ�°tú1ëf€ (¢€ (¢€2-¿äqÔ¿ìiÿ�£.*íþ¡o¦Z››“.À@ /+±=•cô€OAT­¿äqÔ¿ìiÿ�£.*?&‘5Œ0ë7Wp´¹mí&‘À8oÝ))Á?7zЭ¥Ôw¶±ÜIJªH2мN>¨à0ú+šÔ±ÿ� ‹gû5¶Üç;¼É±·ý¯Lü¾µ Ûê©}ö]y¼H&Šá[KkwÆmweVv_Ý™�È7œŽk Ôäp—¯6vàóŒ2nþ!þÀäþ¶ã<ÌßýÕú¯Í.nlìô縸{d·H2ÌD…vùžŸx®îß{wû5 æ™yä<Sng¸‰Êæ,e¤WRÇ ¤°8à|œÒk¶­¨h’Åö© ‘BOÞrÈRXåWFÿ�hå@Ü:“¯5ÉÏ¥ÝÛCö¢.™&×g½›û>)Xãû#Ä„$e9 € hÃ|Ýk¶R’z5B)S¼·Ó§Ý§¯Kéó:x6Âg6<¼ýŽÏn7g;¥Û·¶q¹ãÝÎkK÷?gÿ�—}žOý4Û·Ìüöîÿ�nÿ�f¹¿ ÔÕožá¥6‘cϘ4†#4åެJܽ\ä÷®£{ùyó$ÎÌçíkœîÆwtÎ8ßÓ'Z¨·eþfc9­ÿ�eö_ÕºüŒ/7ŒµË#vU>Ào}Ñ»µÂÈÀ}ÐÅQw`tQ·š£¤^^iƒWµ³Ís Ý´¶°ÝÞýÜ«¶<JÅŽYC íÄjw—Ê׋qr­¬š”¨6®J…MØM¤’ �bÉ'ƒQ·†t™m´Lë$ÑJÒ=ë¼¥Ç ù›·œÁ²ýW�TYÿ�Lèæ§{y¯³åÞÿ�+éØ]QMWD[©- ¶;e‰â-#*ùw ‡ŠRG²yx¬ëZ+Å:ô—·H-¡²†]’ÈãlŽ÷ÝHE-µÁÏ5µ§iöÚM“Ad%Š6/9nÝó³å˜1È’~qÇ%q“šlZ=¶³sªEö‘u8hä&ùö\•2ÅT)$¨ÆbÉ'ƒUïOúÿ�‚f½•Ý•––÷|ôë§ãË»9ÝÄ"íÉ,¯,õkˆµaqÝ€€4ØÜáUŒ›r ù_p-€w4=DjºDWMm³þò&‰Y˜/—pÈpH¡e$dÉx§Ýh:mòÏÄEÍÌ72•¹!Œ¡C‚¤6p‰¤1¸Tºvm¥Y›{5’8šb­uæüí&Y²Iä’~aÇ%~ñÍ(©-ÙUeJI¸ÆÏ^ŸÞþýÍÿ� |¢r~Áþ‹ZƒÆÒÍoà]~âÞy`ž :âXä‰Ê2²ÆÄG#+OJ±fe§‰<Áko;ñÛT.qÛ¥G¬hÖZþ™.¨¤²ZL1$qÎño„¡ƒÜg¼ÃîN{Æ‘ê k{šm+O„Í=´7³ÚË€IvS“åãf´.<Cumâ›M.M5>Çu9·Žè\åüÁMÌapÖ ‘÷qƒVÃcË Ê/f"¢Ç=üòFÁzFr®}ØïMÿ�„OF¨Ôż«t.~Ön¥ %ØP°@ÛA*H<r:æ€#ñl³A¥ZMòÄãS°LÆåw+ÝDŒ:‚¬ÀŽœÖGŠuíBÃY¸1Û™tÍ"Á5 ÔŽäÂî¬Ò ©�îØ±1Ù•#' =µ iþ ‚5¸xâ‘eA Ô°aÔ‚§1²ä‚èFE&¡áÍ+Už ¯mšW…vç:‡\ƒµÀ H¹�á²3@ì¼Cu?ŠH¹ÓRÞ)å·.|Ââ)r…Ió€Ž:í<U›oùu/ûÚèËŠfŸá=K¿ŽöÎÞXçŒJýªVU0gP¥Š…,Æ0ÈÅ>ÛþGKþÁöŸú2â€5袊�(¢Š�ȶÿ�‘ÇRÿ�°}§þŒ¸«·ú…¾™jnnL»�,0¼®ÄöT@YÐ=R¶ÿ�‘ÇRÿ�°}§þŒ¸¨üLšDÖ0ìXÝ]ÂÒæ5·´švG�á¿t¤§üÜuë@¶—QÞÚÇsÊ© ÈBñ8ú£€Ãè@®SSÛÿ� ÍÎíŸò ‹ïg¦éóÓ¶3žøÎ9Åch6úª_}—^o ¢¸VÒÚÝä1›]ÙU—÷f@2Íç�cšÛÔI8¹Á#þ%ôp¿Ç?ùÏðŸ˜ð+l?ñÏò<ÌßýÎ^±ÿ�ÒÛ›»[îâH£Š# 3�ä—åÀîØûƒ¸ûÜⳡñqªÇqE­¢Sê7©gd`Fä�+6pþíYÖ¬¿´´··k‡„‰ •$Ü%ÚêÂ@vÌ •ë)åk‰’ÃQ³²µÔµ7ÔæYõ—¾¸m>GY#ŒÛ<‚¦ç\¿0'ö’8ír’zyu>b4©J›rßÞû-þo×]~g£øð–k˜ÛŸ³ÛnÆs»Ì¸ÎîÛ½vñé]Epb¼‚÷PŠúIä•-`T7ºAså†%X&Ü©99®ò¸*»ÍŸ_.+úÜÀ´’øNu›o´Jau”¨Œäª;Ir¤¨è23ë´V4wþñ©f‘_] ‹xæ±KëàÑÈV@“>òXÆ3,G`^ƒå;k£ƒÃšm¾·u¬D·Búê1Îo&*Ê3€¾ÑŒœ` dã5Uü¢K Žh.¦bèâi¯§y”«n]²³—P8 Ìë-ø{W}oGKÙm¾Í/›4BxWŠV°HŒ¡Æ@8ì*„w¿cñ†¼nn¤Piv—,®ä¤y{ ìo–5Î:í­¥é6z5£ZØFñÂÒ¼ÅZV™Ø³¸œd’p8É5·‡´ëMvçZ‰nEõÊåv»•‘”@ØX 'dã© KMñ”wž#ÖÃT±Ôݬlä¶±PËŒÓ+Ë»¦"ä<€3•Öø{W}oGKÙm¾Í/›4BxWŠV°HŒ¡Æ@8ì)5 éZ´ÒMyní,‚dI䇒ÎñURG9<óÚ¬izMžhÖ¶¼p´¯1V•Ÿæv,Än'$œ2M�Uð§ü‰Ú'ýƒàÿ�ÑkPxÚY­ü ¯Ü[Ï,Á§\K‘9FVXØ‚äriév#LÒ,¬Ì‚Ö„9ݵ@Î? XѬµý2];QId´˜bHãâÞ= B ¸Î �fx³NÕu XN"á-$¶ÿ�kšÑ¦8@–&‹ƒr3Ò©é¾.–æóD†=,®›©ª-½Ä—[¦ mŒãz`àmV/¸‘œ`æ¶.<7§]Emí|ñÛÇåªB|:úH7þóþº¡ÁúZ’_Åi$s¥ÇÚS˹•QdÙ³p@ÛFTí ×4�ßË4U¤ÐO,N5;ÌnWr½ÔHÀã¨*ÌéÍdx§^Ô,5›ƒ¹—LÒ,P½HîL.êÍ Êí‹™Pr2zÑkZŸâ!ƒQ[‡Ž)TÝKH*s.H ž„dRjÒµYàšöÙ¥xW`>s¨uÈ;\‹#4NËÄ7Sø¡´‹5 âž[yÒçÌ."‘·(PŸ1H˜ã®ÓÅY¶ÿ�‘ÇRÿ�°}§þŒ¸¦iþÑ´»øïlíåŽxġڥeQ#u X¨RÀc�ŒŒSí¿äqÔ¿ìiÿ�£.(^Š( Š( Š( ¹Ùõ +Ëö»Ë{}Út{|Ùg÷êk¢¬·†ÍçC˜Ó£Æõ¼z�ÜŽXæd‰Õãa•e9{§6³¥ÛLÐÏ©YÅ*2<ê¬> šºª¨¡QB¨à�0BöV²9w¶…œõfŒhÊöÒûÆWiu ®Ÿ-À>cñÅt5…oPxÒqI:td„P3ûÇ­Ú�+?äuŸþÁÑÿ�èÇ­šÎ¾Ð´íJénn f™SË’º¹Î>R3É4£EcÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüU�lÑXßðŠéóÆãÿ�æÿ�âª9ü7¢[A$óG:E—v7sp�É?z€7h¬DðÆ$k"E9V�ƒö¹¹þNÿ�„WHÿ�ž7ø7ÿ�@5KF¾mOCÓïÝ=Õ´s2¯E, à~uOþ]#þxÜà\ßüUGƒôKxc†+iÒ8Ô"(»›�€>õ�nÑXßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@4V7ü"ºGüñ¸ÿ�À¹¿øªÊ_iÇÅRÚ•¹ò’Hírãqvýï@(®¢±¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€ÿ�‘ÖûGÿ�£¶k?OÐôý2âIí!e–EÎò»’ ’ÌN:šÐ Š( Š(  ‹oùu/ûÚèˊ׮]Ól5H·¶v×èʾt{ˆÌ³p¿ízgåõ«ÑÎb¶QꑤA”,“U ´`g;;{wû5Ñ ;œT¯¹ãâsxP«*N?º'úerºüŽõâÎÜž3æMÉ?Â?ÛƳ®t-âæYn4Ûfg“{Ëgb£'qîßÞí»ÍWÓl¬¬<G4VvÖð#CjáaB¹rÒGmßÝÏÆîsZÓ á+ÜàÆf‘ÄRtùmªëæ™±±ü¼yrgf1öEÎwgzgì韭=”–bˆ,ä`AsÜÍÿ�-:*ÜýŸþ]öy?ôÓnß3óÛ»þ»ýš‘öyŸ/;æÎíÙÎß›8ã8ûØãsšéÿ�ƒÓúÿ�€x©«-—í>ÿ�ÕŸÚÙ™pÿ� ÉÚØV¤Ÿ( �òä“ü�waÊ}ÑÀ­MåãË“;1².s»8ÛÓ8çgL|ýj”ÚMÝè¸u"vXaÝ òÆJà• òvÛïóPÿ�diþVýÍ/ü}ÜíÆí¿ÞÎÜÿ�À·³I\©86Ýûõídþë|fRYˆV ³DAqÏp{7ü´èx¡T†RU€ „“P�óØíÿ�,ú+1´[�ì OÒºòã?(ÉÎþþ8#îóBè¶ÔŸ%£måÆ~a‘Œ¶3ýÌðÞælUãÍ¿^þ_å­¾f†ÇòñåɘÇÙ9Ýœméœs³¦>~´öRYˆV ³DAqÏp{7ü´èx¬ƒ¥éQijO,‰nª$‘ÅíÀPðÇæn¯^ws÷k£ÿ�„GG?òÎï¿ü¿O߯ñÖu*¨=N¼&X¨·M«+u×ùõ)ªÊJ°’b �ž{Ý¿åŸAÅ3kWP9€';³Œ‡ì韭_ÿ�„GGòÎï·ü¿OÛ§ñÐ<#£Ž‘ÝŽ1Åôÿ�_ïÖY‰×ý‰_ºëÕõùÃt4t»á©éWê†1uLœíÜ ã?[¬H<)¦[AI©ÇJu[ @À�y1RÂ5cÿ�=õ_ü]ñÊâ>œ×¢²?á±ÿ�žú¯þ ®¿øåðXÿ�Ï}Wÿ�×_ür€5è®Z ÝüK}h×Z©‚+;y?µnxfyƒù™ä"þU¥ÿ�Õü÷Õðmuÿ�Ç(^²-¿äqÔ¿ìiÿ�£.(ÿ�„jÇþ{ê¿ø6ºÿ�ã•bÃG³Ógš{´4³*#¼÷RÌJ©b c€ ·OZ�¿EPEPE·üŽ:—ýƒí?ôeÅk×®XÙ^xâãívÖómÓ!#ÎMØÃÎ.9ïŒãœUØBƱÃ@bEHÙÆ/GNŸw¶>ÿ�5Ñ ?4T®xøœÝQ­*\·³¶þWìuuÈj Ÿ\àÿ�Èz oãŸüãøÊx5N]/JŸuÄÖZ|Žéæ4~m¹$üÛsÇ÷·³Utý> oêQÙÙÄ‘­¤JË MØ|ÛF3Ž8ÆvóŠÖ9%vûþGŸŠÍ*ƒ§ïÊ÷þòòòù›ª¤2’¬�d$˜‚€�çžÀwoùgÐqLØþ^<¹3³û"ç;³½3ŽvtÇÏÖ¤X$VVû3Œ4mòÃ&~QŒŒdxÇßæ™öY<­ŸeòöcÊ›oÞÝŽ™ÛßûÛ¿Ù®‹£Ép•¶ïÕÿ�_å² ÿ� V°ppmmH;pßqÈ?Æ?Ú<šéë›GY¯%»ßE4£ðËs p +¸F@',Û»`ü¼Ó±Û¼ºÎ8ÎÛëÜã¾2øÏ÷sÆ>÷5É:.Rm3èp¹•:T£NQwGiEqØòcýn«»óý}·?÷Þvãþ»ýš?±Û´ºÎ9ÆëëÜã¶pøÏ÷±Æ>ï5W—s£û^ò¿ÃüÎÒŠâ%Ó^iîuháwHçP¼T ±É| xÇÞæŸý&?Öê»±ÿ�?×Ûsÿ�}çn?à[¿Ù£êòîÚô•þæv”WýŽÝ¥ÖqÎ7_^糇ƽŽ1÷y£û»Ë¬ãŒí¾½Î;ã/Œÿ�w<cïsGÕåÜ?µèÿ�+ü?Ìêt«á©èöZ€ËVñͳ9Û¹Cc=úÕºááÐEµ¼p@u8ã"-íðEÇ�¿;1øîÿ�f¤þÇnÒë8篯sŽÙÃã?ÞÇû¼Ñõywíz?Êÿ�ó;J+‹þÇnòë8ã;o¯sŽøËã?ÝÏûÜÑý&?Öê»±ÿ�?×Ûsÿ�}çn?à[¿Ù£êòîÚô•þæv”W¥hñOªß[Ü]jÛb†SºVŒƒ'/ÔííÇVÏü#V?óßUÿ�Áµ×ÿ�¬¥Wfz+*ÔÕH«'Ü׬‹oùu/ûÚèËŠ?á±ÿ�žú¯þ ®¿øåX°Ñ¬ôÙæžßí ,ʉ#Ïu,Ī–*v8�»tõ©5/ÑE�QE�QE�V2Èë?ýƒ£ÿ�Ñ[5ŒŸò:Ïÿ�`èÿ�ôcÐj’ivVD_g[Ü]¬7ûPý• 9 ó‚£,¨™`@ßY:ä¹Ð-^[+ÝVø,¦°D™¤ÒD²Ì¿Ë$*äœ+±¹…碎w€·HÀܶA�þ±[Â6qÜ[M§ÝÞé¦qjâÒEÄÑHWÞ¬Iœîl³ó@DwxÒc‚3¦Æyÿ�®Zó$rBé02ðÝïŸjȈñ¤ÀgMŒrsÿ�-µ.í-¯ídµ¼·ŠâÞQ¶H¦@èãЃÁ KDÒ¡Öþx~Þ{k[³ý“lR;̘‹ù*`:ã9úúkÂãPi|3-„ÖV×¶ú&¡lóßž9[&âà¡`ÅKôbpzWtÞÐOŠÁ´=0ÙBæH­Í¤~Z1þ%\`O"§¼Ñt­E-ÒûL²º[cº< â#ê¹/AÒ€¦^.±áÛ+ë˜<•¼µŽi!“ø7(b§éœåô]Ul¾øN)#¿d¹Ó-Ä“ZZMpÈ¢$ÈýÒ±V9À'äç ÙÝÚ[_ÚÉkyoż£l‘LÑÇ¡ƒL°Ó¬´»E´Ó¬íìí”’°Ûı $äá@€<ËB¹»—OðMΕ5­µÒx^uyuyŸcÎyBFs†É%†G^Þk÷Õ>ɨI@÷ZY¢n±–‹vÓôÎ*ýƃ£]ÛÚ[Üé6Cg³G%²2Á€�ØÂàÓÒ®Ow6òÛÌ»¢• :çR0E�G§ÿ�È6×þ¸§ò‰t#_‰IóI½ÝÏ$ mqüÛõ®†8Ö(Ö4ETzT¤Ðô‰uTÕdÒìŸQA„»kt3/áñ‘Á#­�s ¤&•ã«[™ÃP:Ä“Æï-š ˜FÍÄ e£Dxn›—žÕÃÍKSM/ÚeÛYÍk>ƒ Ì 2¼;%Û&X†-¿ €¿u†8Íuö:.•¥Í4Ú~™ei,çt¯oÆÒ¹b�ÏãNÓô3I7N´³ó›|¿fcÞÞ­´ Ÿs@5ø‰®ÆN™`σü^e×'ðÇáŠàä¾½ŸÀúÏöØî¥Õ¼7y©<ÉA"('$B—Âà.<¶ÈÍz„:‘m©Ë©Á¥ÙE¨J’é-Ñe|õË“ÐwíN‡GÓ-Úí Ó­"kÂMÑHLäõßóu=}h?DÔµ)µOMÔšÎf¶HfŽ{DdR²oùo™vg9ä2œ Ô‰ÿ�#¬ÿ�öÿ�F=_ÓôË &ÔZé¶6Övà–[D±¦OS…�f¨'ü޳ÿ�Ø:?ýô³EPEPEPEP!¨ÿ� ÔÃ'ÂØ»lÜücýɬÝ{S½²‚Æ)£ŽîúasÜ\HÛÛŽ î$&ÐÀóëZZ€?ðLpp,-‰;sæÍÉ?À?ÛЇP°û~žö²[G(deÅ‚HÝŸõg‚ØçgL|ýx¯B—ð×õÕŸ!ÿ�}©{ÛÊßËý{tÞý kY¾‘ou$‘Næu’;`ò*yLÈ[ ¤¤{”•ÝI9­8w‰f!˜†´¶ÏïÈ-!9Äu¹ù‡³í¼+&•<O£^}œ>Ï7›d³ P32²W ZI0܉ ÚW£°ñ4ù vÚ[L`c &I?Àvpü£Wõ9ërêá}_–Šëúݲ츒ÙĬå d¶ëµçæÁ%ºgoé“­rú=‚jÿ� 4X&†¢tÈö¥ÜáâÝ䨇p2HòÌüÇ­t׉uhö×ÞtoÇŠK$`ß6pPðN9ÙÓ?ZªÞÑÚÎ;ìk#g ŽñAöÚ4?ÂÊ1ŽOFë!àÐÕßBiÉÆ+Y_NßÕûô¶ÚœŸªjv y¨X­ {-2ÍnbüÓv"’ê2@Ê “`<‚_*@ÁãÒeÄ–Î%g(c%·]¯?6 -Ó8ãL|jÒl%½¶»—N·k‹m‚žÑD sµñ”�ã$«< ’âÑ.­ÚâÛÎãØñIdŒæÎ  Ç;:cçëJ*ÊÅW¨ªK™&·íåoŸnÎSHÕ…—€ü5¿Ú,³éñï’Õ$¸*© œ~íX©þîq°å²xÏhšõ†˜º––-ÇÙü?¥És Ô.rN%~ö1ü[ÎÒ85év–ºu¸¶°³ŠÚÙ ìŠÞÙU�#Œcô?òÐðx¨†¦››K†Ó-¼Û@‰o!³@a@9 ØÊ(ÀÉêøŠN/Fc^+š-7wå·õó¿K|HÌÞÕ737ú‡æ˜IÏ#9N8ßÓ'ZïëžÊ;ëSer’nA ò„G ø#އ;:cçë]}a‰Ý®G~Y_Ëõìs—B5ø‘¤‘1´›ÝÜò@–×Í¿Zã<y¤®“³xéa~ú­…úù’Ù º¶Ûo$ŠD e£0y§=«ÑäÐô‰uTÕdÒìŸQA„»kt3/áñ‘Á#­%®ƒ£Y“i¤Ø[›¬ý Ål‰çg®ü›>õÊ{¥-RÔ¦Ö5=7Rk9šÙ!š9í‘JÉ¿ä`Y¾eÙœçÊp3Ie,ÃÇZŹžV€iÖR¬läª3Ir¨è2sŽ»Ejiúe†“j-tÛk;pK­¢XÓ'©Â€3Um¼=§Zk·:ÔKr/®PG+µÜ¬Œ ’ÂÅ�8Àã'M�yéñ.±6•§ÜÜÅ*^j’Yjo óhݺ4 €�˜YÑOÞݸ’sÀô VŸTŽö;Ë5´¼²¹6ÓÄ’ù©»b8*ûTVE<€yÆ8ªçÁšŠæ?±>Û‚ bâ_ÝáăË;¿t€ØM¼€kSOÓ­t»Qmi*n,ÅÝÝVgbY‰õ$š�¥mÿ�#Ž¥ÿ�`ûOýqZõ‘mÿ�#Ž¥ÿ�`ûOýqZô�QE�QE�QEÈj$\à‘ÿ�Èz8_ãŸüçøOÌx“â}JM>ÎÐÿ�h=„ÝG Åîä[ÆÑ»!\Up!ËnV¶¢ ñÅÎ?ñ,‡¢þ9ÿ�Î?ˆü§ƒNš%bÉ,)™@Nvã»`ù}Zï¥ü%ýu>G펛{]vþUýzù¦ãæÐ­¤– CQ½Hó=›*©3Ä%%ˆå¼³‚¹ÈÊÞ»±oë{ÒÔ�[8î8øû‘XMáXí䳟Q±hmE«%¼Iûä HWV ó ÌØKîÉ5»áõÛâcƒƒijA+Ôo¸ä7WížMMkòjteÎ/œSJÞ_ü¥™#’I€1w†èG|ûW¢iPë <?o=µ­Ùþɶ)æLEü•�°qœý}5ÖÝÚ[_ÚÉkyoż£l‘LÑÇ¡ƒTÃiñX6‡¦(\ɹ´ËF?Ä«ŒÉäWôÇœiZ¾§¦G©X‹=Ú~‰f·1\™¯<‰®âýÜ€®YöeXƒœ¨Ç5ë3$rBé02ðÝïŸj©.‹¥Oymy6™e%ͨÛo3À¥áˆÄe ±wimk%­å¼Wò²E2G„ �qš.ª¶_|'‘ß²\é–âI­-&¸dQd~éX«àŒrså|9¬_iú2êÚX·Å¯…´©.a»·‘^䡸R±’Wæ8¶7ËŒƒšõ« :ËK´[M:ÎÞÎÙI+ ¼KNN�* èÆ{9Γ`e²A¤ŸfMÖê:*| z P+ÿ�‘;\ÿ�°|ÿ�ú-«^ ½´†þÆâÎáKAqE « GN O@åÐ~$i$cÌm&÷w<%µÇóoÖ¸Ïi+¤Ã¬Þ:X_¾«a~¾d¶h.­¶ÛÉ"‘(hÆÅLA)Ïjôy4="]U5Y4»'ÔPa.ÚÝ ËÆ8|dpHëIk èÖFäÚi6æë?h1["yÙë¿æÏ½�RÑ5-JmcSÓu&³™­’£žÑ¬›þF›æ]™Îy §5 €~"k1“¦X3àÿ�™uÉü1øb¶tý2ÃIµºmµ¸%„VÑ,i“Ôá@¨¡Ðô‹mN]N .Ê-BPD—In‹+ç®\ žƒ¿j�òù/¯gð>³ý£ö;©uo ÞjO2FDÐHЉÉ$¥ð¸ -†23^…¢jZ”ÚÆ§¦êMg3[$3G=¢2)Y7üŒ 7Ì»3œòNkBL·k¶ƒN´‰¯ 7E U3“×~ÍÔõõ§éúe†“j-tÛk;pK­¢XÓ'©Â€3@­¿äqÔ¿ìiÿ�£.+^²-¿äqÔ¿ìiÿ�£.+^€ (¢€ (¢€ (¢€ (¢€ ÆOùgÿ�°tú1ëf±“þGYÿ�ìþŒz�Ù¢³uQ¬5-&×ìûÓP¹k3~<²!’PqŽxˆŽÝGZ­q­ÝÛx’ËM“NO²Þ3ÇÀ¸Ì€¬eËöðœmÝ»9#ŽA  ·z®¦xÒCkhNoŸ2Ç»÷Ó'š½ÿ� _‡?è?¥àdãVíõ}2êþ{ }FÒkÈ?×[Ç:´‘ÿ�¼ ä~4ÝST‡I‚§ŽWIna¶Ì`­,‹“’8ÜëžþÔ[þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�ŸUÖ-th­ÞçÌ?h¹ŠÙ5ÉÝ$‹'ÑAa“ýHB€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ«z½Ä–š-ýÄ-¶X­ät8Î)"¦³‘¥²‚G9wY©"€3¿á+ðçýô¯ü üj¦©ã  "ö[mKûB@í.ã'pRGçš¿»g2j¯'™z\¦+—˜�"Iw òì‘O8=x£DÖ¶í ÒØ\[EŸÝ´²ÂâAê¦)cëƒ@m|]á÷³å×ô¿1£RÙ»ŒsŽ{Ôßð•øsþƒúWþGþ5¬N>ž•™m¯ØÏ¢Ï«J^ÚÖ 'ŽS8�¡ŠFúŸ™1׊�gü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ5¡ip×VÉ3[Ío¸dG0€÷�œ}:Ôôÿ� g‡?è`Ò¿ð2?ñ¥ÿ�„¯ÃŸôÒ¿ð2?ñ¦§ü޳ÿ�Ø:?ýõ³@ð•øsþƒúWþGþ5KNÔì5?\½…õµÚ&Ÿf‚U)óƒƒ]%�QE�QE�QE�QEÇê8ÿ�„ñó·?bµÛœçw›>6öÝ韗֗÷?gÿ�—}žOý4Û·Ìüöîÿ�nÿ�f@ŸøN¦86ÀØÈófàãìMS¿Õe±¼Òíö;‹éZ)¿Eda’n1Äewð0võ½/÷qþº³ã38ßWOÂÿ�f?ÕºüÙæ>|¼ï›;·g;~lãŒãïcŒ}Îk6&<M)&1‹kR§'¨2cn{ãsÆ1»œÒ\j÷Vúý½ƒÚbÚååŽ)’ì#/“ß‘0¹lÆÄ#(éáýcS0Ì4ÛëèLaãy"šD9yldœ¯ü´'#|Ç;¤úõ×kýúùZúv/o·ò6îµÛåc“n7ç»sÏ÷·³R<°rdƒ%å'%³’¼çdÿ�8ÇÜæ°5/ÃÚm¤RK¡[:HÑA˜ÒTÉ2¢’ØÆ70ËôÇËŒ‚iÚ­‡†´•‰î4[#çÝ}Cù¤e@pGÊ °àóSœ€[zÿ�Á3;¥o/²ûúôéÛ©º’À’ ‡ˆŒÎBñŒñ‘ü9ãš}¿‘·u®ß+Ì›q¿8õÛž½»ýš¦¾з¯üI´ÿ�½ü²»zcŸqÖN«U/ô]ÇI¸ºEÓ™à·2(x£<à ÿ�¼8ÇÉך/úu"z_ù¾ÏŸ¯^½÷FÛËw&H2^Rr[9+ÎqÆOñcŒ}ÎhI`„ICÄF g!xÆxÈþñ¿ÍkÂ)áÏú�i_øøVd™5W“Ãútér˜®^k(€‰%Ü0˲E<àõâ¹~´»~?ð{û W¿´[ßáò·óoúhgê‚éº=Åí±¶i­­Œ±¨ÜTí}À`œíÈÿ�{?ì×u\¦‹¥øo]²ká hf·´J=A‰œcëŠÓ>ðØJ�u&Î?ð¬ªÕöŽö=,¿ð‘qr½í²¶ß6lQ\妑àûÛ¾‡GÒ~Ì"¼dˆÆÌÊ1†V>•-§‡ü-}l—h:i‰ÆT¶ž©‘ë†PqïXž½EdÂ)áÏú�i_øøVU¿†4âÍB#¡é†5±µeCi/8$ u8 ²ŠÈÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�€ oùu/ûÚèˊתv:N¥ùŸÙú}­§™ÿ�g…cÝŒã88Éüêå�QE�QE�QE�qÚžßøNnwlÿ�\_{=7Ož±œ÷ÆqÎ*dÙæ&<¼ï‡wg;~\gŒãîçŒ}þjyl çŒï˜NñÓí‡Ëß2\~ €G¡¨õf°Ôô‹S4’Ǩ\µ¹r@ØD2J~_â åÃŒ’5ÛJ¬oú¹óì¿S*…ÓiôþTº½ÿ�M<È?söùwÙäÿ�ÓM»|ÏÏnïøïöiÚ%ż-Ö¼Ù¡½¾w6 o2|îϽvü¾•Çö…·ˆì´Ù<ϳ^3ÇиPʅ˘ñÂàlß»<ŒS/BÕµ9­?´ì//­Y ýÜ’B§€ ä•�ô‰âJ”çs~äN ŠÃUU+Ù[NUÿ�·}ËüΓûBËþ~íÿ�ïàÿ�?´,¿çîßþþñ®SSðö¤CóÚ¤‰%ͽ¿ÉiÃ;¬j[8ùK:îõëƒLÕt F‚Ý®cCö‰âµAªÝ$ª €-éÇp7$?›ðg³õœWüøøÌë¿´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ�Â> ÓI'É·,p-SŒ§AÛÒ©jþÓô½ÿ�PKkYÖݧÖɆ(„àñÐãŸZ9!ü߃Öq?óáÿ�àQÿ�3ªþвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒükþ7nß.»·?gLõÎsëÛ>œVl:6ƒ2êÒ<1[ǦLñÜ´¶‘€?t’îÏÊÔŽ˜9àQÉæü¾³Šÿ�Ÿÿ�ù·­Ca j7–×VÆ{{YeŒ3‚ *’23Ï"¯ÿ�hYÏÝ¿ýüã\v‰ éšå™¹P·€•ØgŠÖE˜ÛÊw=ÁÆOjÒ> ÓBåÃÂã"Ù3×9é×¶}8£’Íø1ýgÿ�>þó7ÿ�´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ�ã­ôŸÜh×¼±Ãkk· /k(c‘£až!Ú¶95vÏÂZuͼsµŠA»kçµv�îzõ õïG$?›ðaõœOüøøÌé?´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ�Áÿ�„#M۷˃îíÏÙÓ=sœúöϧáÍ*ê0>Ÿg"‹+g�Û&i.3Ž:ø ™F)i+šÑ­ZrµJ|«½ÓùhtŸÚ_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ðVþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� ƒ¨«e4Sø¿Sh¥I�°´£ÿ�-.+n«ZéÖV%ͽ¹|oòbTÝŒã8õ?Y Š( Š( Š( Š( ±“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£€ ׬u‹ÍkAžÂ µ°»73›‹—Îb’,(°8–䌑Ž3šVѯu­ZÔÏe§CmisÄ7«+=ÏÈÁ¶…ØÁRw·ÊOñÒQ@Ï…ô]KH·¶²¾ƒLx¬b0Ayfže$|Ì €Œp a›q犌ÓP›Jµ‡NÒ®5 ý¬î°ÉlH§ŽVÿ�Xë’B1ß®+£¢€8ßh^"Ô˜O§^Xìk«'X'²/$+ñ»âeRRäË´ºBi:$ñx–kKAYïÒîYbÖÄÈBŶGÞ`Ú¤&Â6ü»³šìè  z½¼—z-ý¼+ºYmäDÆX©¦³¢²‚7tU‡¡<ÑÛA$ó0H£Rîǰ$Ó‘ÖHÖD9V�ƒê �rÚ3jp]ø¢âëÃר—7‚âÞ3-»…Eщ0b'æ a‡9È÷~¾–K›ûmʰ¸¸·’çB2Ä­r¨²‡fŒ[‰xŽ7a„#'šô:(/EµMÑ+m(ØÆ›Þ;%‘X $£ óУ 8®^ßIÕ¯ü }cu£Ëkuý©%êÚÏ4DN†ô܄܎ÀnS°çç·5ÞQ@l¾»‹Ëy|3öK¹äþÀó!ÿ�G‘m¥ü£†I›hl;#$W¦Û‹M2ÖÝ`ò(•^a“`¦ãÉÇ­Z¢€1“þGYÿ�ìþŒzÙ¬dÿ�‘ÖûGÿ�£¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Ôÿ�„êcƒalIÛœ6nIþþØäV6¹§ëWzž‹-­«ÛÙLg›ÏdŒJIÕ@Œ2BûrÛž2HØÔqÿ� ãçn~Åk·9Îï6|mí»Ó?/­/î~Ïÿ�.û<Ÿúi·o™ùíÝÿ�ÝþÍz4UéÇúêÏŒÌ䣌«þm}˜ÿ�Wéó1õM&ÿ�VÕ!2YYEoot'Šñ?{9U*À�P�†]Û˜ Ù¾Ñõ([ÚÞ[X,‘b‚î8Ï*ñ¹œ<³7°fÚÝ1[ϳÌ|ùyß6wnÎvüÙÇÇÞÇûœÐ›<ÄÇ—ðãnìçoËŒñœ}Üñ¿Í_/SÕoݾ—îûNÛu0üS¡.—mŽ•w{'Ú­äuŠ(£(#¸INU˜J¡Äc ä1Ç5Sĺ6»¨·c=±F»¶‘a“N¼j“Fäù†P~RsÒà®x\t¹û?ü»ìòé¦Ý¾gç·wü wû5#ìó>^wÍÛ³¿6qÆq÷±Æ>ç48]»…<C„b£m-Öû¿ø=ÞÌæ|/¤Ke42^hfßP\j¦.Æçܤ¶ %€1}Õë[Z½¼ÓhwG†Y-š5S�BXž¡ï³¦>~µq6y‰/;áÆÝÙÎß—ã8û¹ãšb<1G…àHÖ5bÊX(A/'-ü9õù·³B•¿¯ëó Õö“æ~}_ëü;-º¹Mµ8.üQquáëÔK›Áqo–݈"‹hĘ1ó0Ü䮊òÏ»<ÒçÃRø€ê­á_7C¹@— ’ ÞpérÉ¿Ê-Œ®7gn¢»û’ÃG‚/³˜@òQšR€ºV?©«”PÁú¯Ã­JÝ,5oíiç–ÞkI!–[v¾i˜*º‚Å¡$qÜã¯ÿ�h'–—_ð’7†¥»ŸÉh¾ÓöÄ]‘y~fßß„ßö޼ÿ�«Ïé4P]5 zeª3\±X”nº Êxêäq»Ö©[Èã©Ø>Óÿ�F\V½d[Èã©Ø>Óÿ�F\P½Q@Q@Q@Q@Q@ßò8ê_ö´ÿ�Ñ—[^±Ö/5­{,^ÖÂìÜÎn.^79ŠH° FÀàJ[’2F8ÎjÍ·üŽ:—ýƒí?ôeÅkÐ7«h׺֭jg²Ó¡¶´¹ŠâÕ•žçä`ÛBì`©;Ûå'Žxo…ô]KH·¶²¾ƒLx¬b0Ayfže$|Ì €Œp a›qçŠé¨ sÆi¨M¥ZçiW„‚þÖwXd‰6$SÇ+¬uÉ!ï×CÅZˆµ&é×–;êÉÖ ì‹É Ç<nÇx™T€T¹rÀmî‘ÙQ@oƒôItùÒ[ý�[ê±ÄÑ]ê¾z7Û›#/ò’͸Œüàmοâ8%ºð¾¯ofI¥²™#EêÌP€ãZtÉeŽ^i¤HâK;»aTI$ô�úå4fÔà»ñEÅׇ¯Q.ożf[v7 Š-£`ÄOÌ@Ãs:º(Í.|1u/ˆªÞót;” q ™ Ýç—,›ü¢ØÊãvq†ê+¿±‡ì:<Çjcòa ¶é.ò08PÌFOl“øÕÊ(ƒ·Òukÿ�ßXÝhòÚÝjIz¶³Í¡½7!7#°”ì9Ç9íÍR_ ]Åå¼¾ûN‡%Üò`yÿ�£‡H‚6ÒþQÃ$Í´6‘’+Òh  ºm¸´Ó-mÖ!b‰PEæ6�:n<œzÕ+oùu/ûÚèˊ׬‹oùu/ûÚèËŠ�×¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬kÝ;SþÛþÑÓ§´]Öë¥ÄlݶAR=kfŠ�ÆÙâoùøÒ?ïÄŸü]<Mÿ�?Gýø“ÿ�‹­š(g‰¿çãHÿ�¿ñtlñ7üüi÷âOþ.¶h  mž&ÿ�Ÿ#þüIÿ�ÅѳÄßóñ¤߉?øºÙ¢€9ëë/Þé÷6s¤ªÏFH‚N7?½ïRAoâX-âˆ\i$"Ï‘'aïÖí³Äßóñ¤߉?øº6x›þ~4ûñ'ÿ�[4P6ÏÏÆ‘ÿ�~$ÿ�âèÙâoùøÒ?ïÄŸü]lÑ@Û<Mÿ�?Gýø“ÿ�‹£g‰¿çãHÿ�¿ñu³E�ciÚ~¤šÔúŽ£=£—·H-ãeƘ“¸ŸZÙ¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�æµMU—Äo¨Ø‹G‰íb…’iÙ *ò1l©8Ïj‡û7ÄxÆÛ,ã¾ß&ìçïgÊûØùsýÞ+«¢µiÅY²Ü=iº“NïÍú¯öwˆ³þ«Ox²�=�ý×E꣱æìïgýVžzpod úƒû®Õ‡sÍuTSúÄÈþÉÂö{ÿ�3”þÍñ1¶Ë8Æï·É»9ûÙò¾ö>\ÿ�wŠ_ìïgýVž:ð/d�zû®‹ÕGcÍuTQõ‰‹û# ÙýïüÎWû;ÄYÿ�U§žœÙ> þë£uaÜóUµ ÄwºmÍ®Ý<™¡hÃ=쇓üG÷]{gû¼WgEÞcþÉÂö{ÿ�3#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^ŠÄôŒ´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�­z(#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1I¦Zê_Û7º†¡¤kx!-î_¸Ò±$”\¬½ lQ@Q@Q@Q@Q@Q@·6Úµ¾½qameqö°ÂD÷O)F”ö²˜=:SþÓâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ*–¯‰5=ÿ�Ov•º·’çQíÜ¥s#žµÒQ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�¤Ómu/í›ÝCP†Ò:ÞQ-î_¸Ò±$”\¬½+bŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�¡©ëšNб¶«ªYX,¤ˆÍÕÂDޏÜFzŠzêÚkꥮ¡hÚ‚&ö´)•WŽJg r9ÇzÊñ²áŲ[_Ù\ÈBçdqÜÄîØô¬O°5Íêž ¶Qã/è÷öﶉV÷ñ•x–حʱËÄç–­�z-D—6ò\Ël“ÆÓĪÒD® lí$u�àã×¼ºo<^2} üoérÙEuýª«m˜erØ„6ÂYv¸. Çù…G®ø‡û?Qñì+† BÃÃÖ“ÝĦêUk†UhÜ¡Œ‘ü«ƒûÔÁ�õªŠæêÞÊÚK›¹â‚Æç–W ª=I<\$%¹O&˜Úçk]"¬¤±óPä(;ß*¶rzƹOøËÌð•ô’x®Þá/eÕôæ³ýÀ_-"¸ò˜·° çJ¼d‚@=®™,±ÁK,‹h2Îç�RkËæñÍÌúv¡5Ÿˆ-^ø\Æ’Û‰"X,-Øñ*Ê#rÊÀ¯ï2ã*¼ŠÒÒoüC©ˆmo¼Emh©kçGb±Ê—ŒÒ8�<‘…`ˆ±îØ«“' �ïaž›xî –9`•Ç"0eu# ‚8 ŽsT-üI¡^Ŷµ§N`¦]#y` ’Ø<`uÍrVª×_4Uæ/ìë´EÜÒB¾_ž€¤Æ$\~~ÛÄ.¡âk¤ÜiSYÚéóË=Ì`´ Ñ`@ŒÌv°ãË<z�oiÞ$е‰š/ZÓ¯¥Q¹’Öé%`=HRkBYc‚&–Y8ÐeÎ�¤×’è^!Ó ¼Ó/nä³} 5HYêÌ1mpóϵ&9á97/AÊät5ÛêÓj7>!kµvÑí#³YÒtŠ67³°+™P*’�ùƒ‘@Ãuoż©,2¨xäƒ+©Áw©+È|âs%§„¬m<H<™!ƒOžÌGùì%ÃÊX·˜ NÓ¡N §?‹f±øm£Imâ¦]V-K¶Y'k‰£E&&b¤|¤•(ürX`’ë”Wœk¾2–ÏRÔ¿²õ诧1â×OQÖ�#V2I…2` ÎeH c8ݦ¯ªJ¾ºÔ|Mjög[(.¬®#–9"6Ò‘’y(ŒL‹·åQ÷ÀûÀéÔQE�QE�QE�QE�QE�QYÞ Žöo ê‘i¬Rýìå[fJPí?ž(«â= 櫓MkNk¸Ît†E>뜊¿ðÝ[Çqo*K ª9#`ÊêFApAë“Ó5Maa X@tØüä¶r[¨w^±àg%°:æ¸}+Ä7¶ž Ó­4Ÿù×-á9/!·‰ v·šÝbŠ6sûÕ`ÛÈØÚG�ÑQ«qv¶†x…ËFeïÊm½p >â¼ú÷Æ{t}föÛ%ºëvYÝ·”P[H-÷ã€FéþcÏÈyùMsš‡ —‹® %·¹}=/mEì†4P°±‘˜"…YXL�Àâ6áŠ@=¦¡’òÖ˜m¥¹†9ç$C8 !�“´u8�ž; ó†ñF­uâ+m+ÄØí·hdº™õ(Éýë*${u\#&ÖŒTÐ\ßÝj^ ÔõMd™nu2éH–²5¥Æ`oܧ(w1Éôé@î¡©Øi6ßiÔ¯­¬àÎß6æUsé– UKŸø~ÎÖ«­wL‚ÞrDRËw¤„uÚIÁê:zÖ6©}§é:KýrX­í ‚ÇcwpBÅ »ÜÌ ž™L8Î3´ŽÕÏêºÞŸ­î®.t­?í:ôRYå|¤uŽý30¹Ì$`a¿�ô{;ëMFÕ.¬n º·»,FúÁ¥’òÖ˜m¥¹†9ç$C8 !�“´u8�ž; å<ª[Ëw¬é×P¥–¾·f{ûE?+¨«,C¼lªœõÎsÉç˜Õõ‹Ëk/ øƒWñ ‚F¸šIlÍ´l–2›;œ� % ÚC1ÿ�v€=bŠòûOq¨Ø$þ)i-­<D 7! h^ÄÊÈ@¤ @@ϰ '1c­^¬^*€ÚËe~èn!E[)¡‘2 ÀWbC1$.ì(â€=&ŠòK¿k3ýžÓHñžÕ«©_ÍEu8*Djé$ªcã ‚cá‹©Äž(·¹Ôäše¼‰ã´¨òc6ÐÊ6†ÚY™yãäõÜHUEPEPEPEPEPEŒÊŠYˆU$“€�4K˜Â$C*¨b›†à§ zp#M†æ †•aš9òäàì|´ã¡ÁÔW›ÜjwV~"Ó¼k"Y&‹y(³k¥½gg¶” 1˜Â¨gyǘüsÄrkvcÇLj#µÄéö”ŽhðÉýšªîå2Gåöä>`�õ+È߯^!‹Kñ¥u­i¶ÂÖÆå…Ÿœ­=¥À8…LfØ ùpìû‹ ¦·õ=z8õ­2Ê?-µîŸw|n‰¶$…hŒ{ M»B™O ä!ç š�ïh¯+Ð<oq­]xvAâT-~c¶¼´X¢A ddܹRÛ¼Ð�$í9Úã5Jk«á [iÚý”r˦#½æ¡pˆ%ºã06!}Å:$<|ÄäЯK,pDòË"ÇÌîp¤žÂ³bñ>=”×°ëšd–° Ë:]ÆR>qó6p9 sYž/*tí"âú—MŠú9uÖ2ÃËûK.2Ue11Èà.OJ¯gâ=ë]Õõï4†Ñí¬ óu «i¥Ý´íÚ§y¨C¦ëºF´éZ­ðï›[„—o×i8«7w–¶Ïsys ¼2òÌáG¹< òï�kvÉáeÕ º5Ɖ®•{ Äsq–9?½W@�éÃ`H­M¨Þèž2‰õvÓ­ìì$H-V(ÏÚÐÛîfbà±³ ØW^”èÔWsâ;ƶ¶–~$Sm=é±–ÐGòµiÔ•,ĺ®§vœf¹ý+Æ/ƒáÏ/žmÄ0éË{m2ÃóùÓ—smÉØ mÚSç,M�zõåÚŸŒîí俊ÃÄPÞJ×sƒC§@%Úw°‰Ú&U>b¸',8 ú6£©?ˆ|2ú¶¿ž}ò²ÈovÂH|°Æ»Ûc” Œãp …EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEËø±§šjLº¯ö;‰EÓi~oœ²ü¾V|ŸÞÇ™½öçŠ�ßµ¿¶½šî($-%¤ÞDêP®ÇدŽG?+©Èãš³^O žÚïP»‚?‹¥×,D[íî@–¼s<Wd™X¦ŽG F7 ëh¨Yk‹ovºóZÙÅ©Ã3N.%Wé^Ø«ùäï†Oðç8ÜßjÚtQËu!$š8‚3|ò0D�ã,ÀdñÍLò¬oäÈÛFÔ$‚y p8<œ àu"¼^æ}^=#ÃÅ"ñ<÷“YÚ˨}ªÆòá#¹ŠîÕòP®;‚Bãp®å'£Ó5[˜¤ÐÃ[x \j¸ÔͽԈÀÁ*î`Q˜c#@À$ �ôŠ+Çu[½a4‘waqâ‹}FKýJ6ymnÞ8í±9‡÷evõ6û[²Hϳáà]º›M¨]OzÒ£½¬÷—S XÊ€ª>аYd9Ú:•ÉÛ@%¦½§_ê—u¬²Iqo¸JDÁR(®ÂÀ‘•‘éZUåzM«XèW-ggâ(ã—[žMQ1v“=³K9á óA„±ç üØ«Ûï¢m&ÚVñšlú´«¹ó…™¶es/ο¿a´¹ €b@£Q^U“NúrÎÞ/f«yÐß y¡äŽ~φv À êšµÞŸ \IŠcÔ­aÓEÎë[„ŠCæªÝ@ 1Û»;ãV ¨¬¬2¤’8=Ç–¹ŸÛ;Qµxï’UÕ/¾ÕæU§r…ø*SaùN2I?15ÓPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMKM´Õì$²½ˆÉo!RÊåX2ÊA äMÓ´›=)mRMÒc|³LóHøé¹Ü–8í“Å]¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/GRw3.jpg�����������������������������������������������0000664�0000000�0000000�00000137215�15030617045�0022367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�["�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¨n®¡²³žîáöAm$‚pª2N'Ú€&¢¹¸|u¡\]­ªHLÂ3¶M&é�J¡%£�*@'‚Aô­›mJÖóI‡T¶všÎhâ7HØ—Œ®àBãq$˜Ïµ�[¢Š`•L͹T1%Üã ŒÁÈ#Œõ�}Q@UmBþÛJÓ®u É v¶Ñ´³8BÛQFIÀð(ÍQ@VûQµÓc‰îåòÖY£ÒÙw`Š8e˜ ž9NïĺMަºuÅË-ÉÙ»»${Î{€U7â3Ú€5¨¢«Gm.£q§¤„Ý[Dz!B0ŽX)É9(ý=(ÍUmGP¶Ò´ëBöC­´m,Λj’p ž=(ÍQ@Q@Z;ûiu=$&êÞ8å‘ „rÁNHÁÉGééQêz­¦‘kö‹Æ”!8(^W<dáP8�“Ç�PÚ*[¨/¬à»µ•e·ž5–)ä:°È#؃T'ñ&•kªG§Mpé<’•Œy~a�„2mØä|¤ç‘Å�jÑL2¨™b!÷2–!ی局yäóއ Šd²¬0¼®ª)b ±Ñ@$Ÿ`3O Š( Š( Šãôã¯ê6†ëû}¢,¡c[HÈP$`HÉà µö-{þ†I?ð/ðªåf.¼³gMEs?b׿èd“ÿ��âÿ� >ůÐÉ'þÅþr0úÅ>çMEs?b׿èd“ÿ��âÿ� >ůÐÉ'þÅþr0úÅ>çMEs?b׿èd“ÿ��âÿ� >ůÐÉ'þÅþr0úÅ>çMEqÚöíÍÖ¥ ¾ —ýäB¥mb(ߟ—ÕÍ_û±ÿ�Cÿ�ø ÿ�G#¬SîtTW;ö=cþ† ÿ�ðþ&±ëô0Oÿ�€Ðÿ�ñ4r1}bŸs¢¢¹ß±ëô0Oÿ�€Ðÿ�ñ4}Xÿ�¡‚ü‡ÿ�‰£‘‡Ö)÷:*+û±ÿ�Cÿ�ø ÿ�GØõú'ÿ�Àhøš9}bŸs¢¢¹ åס»Ómáñ ƒwraf{H›hHù�ÎPÆ®ÿ�cø“þ†¯ü§Çþ4š±¬&¦®ŽŠŠç±üIÿ�CWþSãÿ�?±üIÿ�CWþSãÿ�EÎÿ�cø“þ†¯ü§Çþ4cø“þ†¯ü§Çþ4ÑQ\ïö?‰?èjÿ�Ê|ãGö?‰?èjÿ�Ê|ã@Èêö¾%Ó4[ý@xœHmmä˜!°ŒnÚ¥±œñÒ®cø“þ†¯ü§Çþ4ÑQ\ïö?‰?èjÿ�Ê|ãGö?‰?èjÿ�Ê|ã@Îÿ�cø“þ†¯ü§Çþ4cø“þ†¯ü§Çþ4ÑQ\ïö?‰?èjÿ�Ê|ãGö?‰?èjÿ�Ê|ã@Îÿ�cø“þ†¯ü§Çþ5KKµñ6¡i$Íâp…ng‡OŒñ¯={íÏã@}Îÿ�cø“þ†¯ü§Çþ4cø“þ†¯ü§Çþ4ÑQ\ïö?‰?èjÿ�Ê|ãGö?‰?èjÿ�Ê|ã@Îÿ�cø“þ†¯ü§Çþ4cø“þ†¯ü§Çþ4ÑQ\ïö?‰?èjÿ�Ê|ãV<=. [TµÔoEä–·‚$”B#ʘb|8êæ€6¨¢Š�(¢Š�(¢Š�(¢Š�)UÔ«�ÊF# ŠZ‚òäYXÜ]4rH°ÆÒˆe˜œ(îN8 bÓRŒøï_¬µ!Zmºy­§NF†[‚â2Sç?¼LÎìü¹Åqm©é~´‚Â-ÓxRhåŒÛÝ‘â¬I ¢•Â0"Qòã sO{Œ¦›S6 ámr•!’MæØˆÒVeF;f'£g�‘Žq[:~«© ZêöÌñ]Z¥ÔQ¢FVPʼ¡¹®3Þ€9»Ý@Ïâ­6ê|C ‘!T·÷ÀŠÌÛ¤~dó,œ€£n [ÄúŽ£ ß‹mìâÖK?°µµ´ìŸj~|¶UÆïž àöçîœw”P–^ÝÜA­Osaÿ� kÛBÚtñ‡·¾eb×íCc/Ì<Ÿ&0 ;@9¤¿½ÕÌú¥Î'ˆìÍÆŸ~ »·žEŠu’3ÅÆÅÊyvF2Y«Õ*¦¥¦ÚjöY^Äd·©eÈr¬He ‚r 0³—ü#º‘²Ôõ¿{È^î>úéìíHÆ$1ÊÙts”Ã` Û[÷Ö÷ðüÖ-gšÿ�Tº–Ææ(XÙJ³IæX×Ê%äãp\±Ý–îk®Ó´›=)mRMÒc|³LóHøé¹Ü–8í“Å] 8k··¼Õà…<Y6›<6²yW^bÈÒ9˜¡eÞ£a‹rÇ‚9�)ŠñÝßC¤iâæ?Ïsgqx"·Ž¥7 .’$wíÁ”!›qÈÈôú(˜ñÍב£Ú"ÚÞÜ;jVRí´´’r©ÌR9!àRyëÐdÖ>¿ÒCâ­:->ö{x)±š+wdBÐ$?;cìd/ó÷¸ç5ßÔî8æX¦&’_*ä~øìßòàúëƒòžØ$žñcN/4Ô™u_ìw‹¦Òüß9eù|¬ù?¼ 3;{íÏÈëÉr·ì–Éâ‘yo Z¥Œ±Cpk”iÊîh—l„cÈ$¯ÌÙ)ÛêÔPøn{û}^(îcñ´¶ƒSŽSr—.Mʽ¶ d»y;€<°û¤çŠç¦—Sÿ�„HBðø¢êêû·1_Gqkw(7¬#HÀVR³ç” Œ1ÈÁ¯W}R8õØ4–†a,öÒ\Ç/˰¬m°ëœæU펼զ¸‰nRݤQ4ˆÎ©žJ©PÇè /æ(Ì ü·Ip/—Åéx×"W’ÞÖù-æcD¡¢^Fp7P¸Î{ý;X‚w³±š;›{ùl–èÛÏeWå ãk2–�€r2=EjT=µÃ5Ì[¶Z‘@ÎQˆ*O³nõÍ�y¾™ÿ� »j÷Ú…Þµ,ëm:Mamc2å¾G†I$hØ÷|¥æ\Še´—éw5¥ØñAðø¼¬‘¥çÚ�h`1üßëŒ{þÓœƒ´é×ZÛKqq"Ç H^Gc€ªI>تÐêqM­]éb9{h!™€ÚË!‘Wç9‰³;u 6×’ån5Ù-“Å"òß@µKb†à4×(Ó•ÜÑ.Ù2ÇI_™²>S·Ðu‹ëdÒ›ûJ4º]ŠÖv’É2dg¢#ú1ìkV±‰#}vëI´Ó¯nå´Qö‰aòÂDå7ªÎXccæ"€8ËíYÚCE>µÕŒR¬–ö$~m,ª ÆB B s¸tÀÈèû‹› #ìš±‚¡”nÓnXHêÊèZVM£ †ffÎWžõÕÔmqÜ¥»H¢iS<•R¡Ð_ÌP=ªêÚxÏN¢ÔÚÉ´ë¯8ÛÛM$BMÑòPjÍŽüãø†yÿ�Í~š‡ÅÁñ Kq¢9ÔŽ¡Ï–·JÑÿ�X6£q?Ld`œäè´P›xªòö ¯>/O{-¤Ñ@ †äEnâÝ´{G–ฯΎ~QòßÕïm.¼G§\ˆüSª$íöx/Ö9:íˆÆ Fybà�SŽêŠ�óÏ nÛ뺆±{©9Š)¾ÕcýŸpS;²­´Œ€ÝÈÍz°tV�€FpFåA8ã>©i:¤ZÅ»Š)bi d” ÊñHÑ·BGÞCŒ”zŠ( kßòþ»Mÿ�£^µk+ßòþ»Mÿ�£^µku±åTøß¨QEÈ (¢€ (¢€±¢3²¢©s¹ˆÜpO¯�ÂYZK©k ’@¾P=¿Ñá­ZŠ( AEPEP¢Ž9."gEfŒ–BFJœ‘èpHüM^®zýˆÖ4� �ß8>ÿ�èÓ×CYOsÐÃ|ETEPEP&†;ˆ$‚dWŠE(èÃ! Óë/ÄÓIoáMbhdxåŽÆgGC†VH ކµ(�¢Š(�¢Š(�¢Š(�¦Gp©XÑQK!FI$Ÿ©$“îiõ•áÙM2f‘ÙȾ¼\±ÉÀ¹ô�øP­Q@Q@Q@dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“A@ôQE�QE�QE�QE�QE�rÖ’j‹ã=rýô Õµ:|0ÛÈf€ý¡á’vÂ&Fá*íÝ·¡Ý¶¸xü'«ÛxjK? O잟N¼‘g¶k¦,e›óØäÐ8¸ƒ¼?-¬÷+zâ !Ùí¥^%m±0ÊüÊÇ€Ã*}iÇÆ:!µ3-Ìû¼ö¶}Šc?š1_'g˜p¤7ÝèAï@W¶·—ž*ÓuUð¬ÆáR773@Él›˜È²È¸_€O�Š^ Ñ“Zñf¿g’½äš=™¶ºùµ›Íº .I !OË“„Ç¥hÃ⻹þjž$‹ìÏqiô‘~åÖ9JªJÜ7,c#<~•zîëÃO‰ÒYím¡Ö®Äq›¤²%Ès²0ó*¡Ší˜d®J�å¯ü={«ê·rxXO ë r±Ìöÿ�é¶ÆÝ!t_œã2 —kí … Î@£­øvài¶6Yâ—Q–îßDuŠá"¶„ehŒ¨¬À#á ƒÀ®ÖûÆú=”3È äâÞé-dòl¦q½¥¤& vç‘·©§ñ)ðð‚ÜëöV÷ƒy0DöFé÷’QY¸Hw ?DÒ-¼7ý•á—»Ñí4»‹g–t‚57X¶—RÙ-¾ÝÉp¬3 `NIWÚ´×"ßÂÅsý—,–ÐÜÛÿ�¬‚ážs¸ËË2m‰,ÜdŽÝañ¾›aª\Eq*¦’šu­å´ÐZÊÛRF™X¾ÐB ©É îk[Oñ>“ªI v“ÌÒMÓ"=¬±±X¤IÃ(!•ÈO<ô *Ã@½ÓüS¡gá ­ X/ŽKe)fÖ†&P¼/žL…®qž+¦ñ_‡¥Õæ²¹´†D–“ù sm2í~½JŽ}¤w¨5éÏáÍN÷E¸][é’êVââÖUŽhÑs•$(q’ í<n­è–ÒÍÜNí Âݼ›9¥ . R¨C° Ä…ÎÐq@³økQþÔ½ÑT6÷F§Cß²$À›Ã²îÜeó €xÈê�+.…|þ(ûKø]ä´¶×Òö-nA‡ìB È åvʈø88 G#ÐÑÖHÖD9V�ƒŒpkx·DûMì xQ¬¢–iÚHdT Û#+•ÚáO ´œ �qzO„5)uk›Û-Rêökkˆ'Ùskw¢Cœ£"¬…±ÐÊFÌ tZN›©'ƒu=>ÏOB¸eš;Z”ÜŸ,ޱEmäð¤Žã8 †¥m©Y}®ÛÏò²F%·’'uCʱô+k8%¹ÔMÖq^<°Ùͳɲ¶!Úycòã“@Ƨá´Ô´ùôŸ ­žÉí¯âB¬ùšÝÁ|¸ó[ÉÇæèÄƒŠ“Bðíþ—¨è×á̵ŠêE—ƒ0,³¬Cp‚=éòŒ®â6àÖæ¿ãK]>â [„·?ÚÖ“/Ù%’1æJˆËæ(زrÀO*ãø»G´Ó,.îo¼Õº¶K•’ÞÖV2óJ(csÕ¸ÏàóJÕ¯¥“A}&ÚêÆ×t~lN¿hF—Ì'k±bC'ÎrX/'<VT~¸µU‚o Ç{¦G¨j\X©· sçMºÕY±HÀL>Ò3ÇÝÚÉâ}&-[û1®%7|áVÚFRÂ?3``»Kìù¶»â©Cãô-?Wž[‹x/mþСíe&8øË¸ ò Ïß8R0A ƒ@î<9{7ÂÝKA’5šî{;¨íá’@þY}æË¥EÝþÎkžñ‡ï5S­˜<8·oi¥’ÕE¼èeÁ@%Âó“ :ymŽÛºmsÆ––Wö¶¬×'Q¶´”Y^!æJˆËæ®\+–Á$ñÒ¬ë~'MÄV÷„‹ ì®'vŠÚIdW‰á?.ÙXŸ—¹Î(Á^Ô4ív]OR‡QŽõÒEžI$µògÞÁRùŽÃýaùr@$U{ïÝ<^>û7„ößj‰*Y^)¶V™^£Û»~åb´˜lÿ�{Šìí¼K¤Ý´ÂÞé¤0É o¶<ÊŒŽ>`C¸dc©§]kp[ëöz&ɾ×yo,ñH wDeAÜÀ`}áԎë.@9[Ý:ïT×u‹»Ï]<7TÂ^{eq2ùÛ°”}³Ç*yÇ¢hž"Ò5ðœV–ö‘Þ[Ä[‰!ä‘‚¾Õ'lëû²~÷A¸¯áßiº®‡esy?‘xúlw× måHñµw˜Ù†+0)b �ó[º^±c¬Ã,–R;y2yR¤°¼RFø Ž)Á‘Ѓ@e½þßð}Ìñi·ö¨%ìm*E3P…pÅFy*Á°A×wàÍKSû<2è—–Taâ·¶°k$–%OœÁ·$ly¡mÃn@ù°:û¯Yì‹«[ »Ão+5”ÛÙM¼²£D0 䯠 7vhúm¾¡-ä‚Úq!V²’¢6Û!u ˜Â· X�§®(œÔe—SY4ºÛ›“iâp‡bȬ#3ä «·nÓ·vsY—Þ¾{xåÓü%Šn·[Û. jd¸ŠF”0„ŽUÜÄ;y£#‚kª×üik§ÜAkc0–çûBÚÒeû$²F<ÉQ|Å@®XIã¥]>-Òmìté§»yÚúÓíPk)ŸÎŒ,ꊀùÔàä€y _Oðœ’kW‘ÝøpEáÕ½šXtÖhLNZdòÕŠíÝçiï(8Îq³ámþ´³ÐeÒ®`Þß´7H¢ó¤• aË�Q”g�à‘›Wž;ð制2_I(¹Ž"û5¤Óåe8‹>Z6 Ÿº í]°e 3‚3ÈÁü¨h¢Š�æ¼9ÿ� Hÿ�ë´ßú5ëV²¼9ÿ� Hÿ�ë´ßú5ëV·[UOú…QL€¢Š(�¢Š(½µœv³ÝÌ…‹]J&}Ç€B*q턎jÅQ±¼’êóS…ÕBÚܬ(TrAŠ7çß. UêŠ( AEPEPMd—WÖ33²›IŒÊF&7Ll9?€­ZÆžòK]GK…JÝ\´.OP2>G¾P~µ³YOsÐÂüETEPEPMVÄjz=îždòÅÕ¼ïÆvîR¹Ç~µn©k7ͦhz…ú wµ¶’eVèÅTœÊ®ÐEPEPEPUtûÓížrá§šl‘ÞIB?Øü*ÕQÒodÔ,äšEUe¹¸„éˆætë…÷  ÔQE�QE�QE�‘£ÈSÄöOý&‚µë#Fÿ�§ˆ?ì ŸúM�kÑE�QE�QE�QE�S%Wx]#Æì¤+€ÓØàõ§Ódr‘;¬m#*’q–>ƒ$ ýH OëREh×R-ˆ’WÓXïkYšdbÃ%™¾n~˜í¥aá[»OÞk“jpKs<Òº*ÚTã… ŸœäâÞ#»âãž!°ñȼÑ4ûÕÐõ)®.,c¾šÚØDíO®rã!¶±P2Äò‚:¿‰RÇöšÍ…¬šŒ7RÚ¤K*—Y¤DVÊŽwŒsÔŒàd€ ÓxZæ_ë�ÔbWÔ^ðý£ìĈÖâGvwòG˜ÀŽÇ°j>×5G‰®uûVT{Y„cN;VXee{hOqQ6‘ªë‘êÞKam©Ãl·ˆ‘ùVË$0Wä1d§ŒŒñнáé-šê5Û̶T‘’7Ê>vœÆìÝ9S†ÀÈ  w^Õïá¥×­Ô4±Í E§•O2;ˆæG”yŸ;,.WfA9í]WF½¼½ÓõF+]BÍ$ˆ´–ÆX¤ŽM…Ô¦õ#˜Ð‚ŒwÍAwâˆc¹¸·û& ‰m¨Ac5Äb"«$Á†l•a:Bä Ý^Z{ûÓOÔ®¦7FÅ®-Ä"8æòüÒ÷„³´ƒ‚O_Vð~±©¶¸½l±êºdzsoÓË:*ïËdJ “çKØc+×iÝ6™á-GMÔÍïöÄ”[Á"™Vg-ûÏ›(ÇO—#¯ÍYzwÄ ãðM½õî™}%úè?Úžc¬Iß–‰æ²á² 4ŠpUx?(5ÞA#Mo¯ ; fŠB¥‘÷NÒFGN „Ð7Ãí^]ÓKÿ�„†ÌGm¢M£þÌl˜äòÃ?úï½²$¶r{àZƒÂ>!µ·kH|E§}~ø­ßIvX9òÏŸ¹FâYyùz+¶¢€2´xu{Y&µÔ.#¹µ†(RÞà¦Ù¥`¸‘Ÿ AÉÁêF8â ë_Ú?o[Ëp¶÷Vñ¼švã²gG¿y†Û卯�#°<×_E�dhú^¡¦é—0O©Eqs#³ÄËnR2 *¬eÉØÎ7÷8 `R‡ÚÌ:î”|EdÑÜè°èÛÿ�²ØŠ=á[ýw-¶WßiìAô*(—¸ð­Óho§[êPÄZý5#Ú—Ä¢áneKƒÆr'ªºGƒõm <ZëðyÖöiÓ¹°ÊË E¼¢«æ|Ž·9`sÊñ]•ÌKá­NZê3kQË ¥éº†,þuS DcÞ aËs×ud†êöºDwSéWϧY­€ûn’³#B¸ÚUYþI�êÙ çîô®öŠ�æ¥ð¤‹¤6›i}Pÿ�h¦ †K}ä0¹[‚§  ‚àŽƒ�Ú­k:-õî«e¨éÚŒVsÛÁ5³y¶¾phå1“½pÀĸ'#“knŠ�ãôÎ[=Œ7°[i6kbâxÊ$íÛ )#çÚ(Ü8ù‡§ú¦‘{u¬Yj–Ð[Ommqo¶{c2°”ÆÙÀu †‰{ò u4Pÿ� îòãLÓtÛýjÚk[%´ÅXôý¥Áh˜9Ý#" W?7M؇ü>º™5´+§A,¤³;O[X·c¶Ù=3–=;VÝÅEá }u-:òOX•³¹gKdŒŸ.HÉQç…–W$ŒŒ… ÑMà]bãA¹Òeñ¹‚í/Vp4ì)k™Bê<Þ —`2O±æ»ª(—¸ð­Ûèo§[êPDÍ~š€‘íK(¸[†óT¸8È œdÕÓ<#­ii¢uÛm+L—NBÚk|êÞ^Ö#Îà&<Žÿ�7LŒvTP‘Ÿ^èúµ¥½­›_ßi–V–°—Óîb†ðÂ7#™CÁ*?y’¬„Ò½rŠ(�¢Š(šðçü#ÿ�®Óè×­ZÊðçü#ÿ�®Óè×­ZÝlyU>7êQE2Š( Š(  }¤¶×º¬²¶æéeøD1'?Š¿P[ÝÅs5ÔQîÝm(ŠLâ(¯Çàâ§ l(¢ŠQE�QE�SºµšãTÑår–÷m,§ aL¦}ùenVhºŠÞîÖ)‡¹ÅÆrÁÿ�«J²žç¡†øŠ(¨:Š( Š(  Ï[MyáZÖÞ3$óYÍh:³ }ÍiÔW70ÙÚÍupâ8aF’G? dŸÈT´�QE�QE�QE�Vv‰k5„±N»]®î¥ ü¯;ºž=U­†Öê+ÈšX[r,8þ$bŒ?545Q@Q@Q@dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“A@ôQE�QE�QE�QE�QE�r¶¾·±†Í,õZÝí­VÈKÄKuÎÈ›÷xÂäá€2~nkVû@´»ÐbÑâilí 0ÜИ]^=»^ ô­Z(‘½ð„:Œzæ­,…ìW·Ÿ³€ÏP«ÄY ˆãã¯È9å³·£èçHƒÉ:•õê( Ú–ƒ¢ª¹ú¶[Þ´è ZëÁ tu"uí^?·ßE~á<ÝËM›3àyqsƒ=Nq?á×%ñeåý½¼öSO±µŽÎE6ã ˜Ûi”9EÈVCr¢Q@„_lÖÆÞÊ]_U¸µƒJ›HH¤h@ò$�7+;°ˆÏð¼ç¤´²–ÙÕ¤Ô.®±ÆDÂ0 çj¯ÌríÀÀæÝ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÈxkNÔä°ŠeÕ#[o´L|²äíó[#vï×ÒOg#Àë â9J®SpSëŒóT|+ÿ�"ô_õÚýõ³UÌÌ7vŽû\ÿ� ôø�?øºÕ†ÎD…iÄ’†p›C\gŠ·EÌ=…>ÆÚN²ó»E­Ce‰T6AŠŽÃ;ù«V:}ä(âöý.XŸ”¤^æsZTQÌÃØSìdßiºŒÒ)³Ôã¶@0ÊöÞfO®w e¦—ªEpëVŠx€9m6øî5³EÌ=…>Ç3icu5æ¾¶—km/ö‚1¡ófƒ¶EN4}s<ë°cþ¼ÿ�[À�I�NO½-Ì=>Ågµ%$›XŽ Á¬ì}sþƒÐà�ÿ�âë ¢ŽfŸb¥”ñ[ª]] ådXöødÕ;­+U’áÞÛWŠݬÑøî­ª(æaì)ö2¬tÛø]Íî¥Ê‘ò„¶òðuþŸ{0ìZ‚Z‘ûàó7zÇzÓ¢ŽfŸc‘ºÓõK}sÃïsªÅqÛØl[MŸòí7}ǶGã]MÊM%³¥¼Ë Ä|²2o ødf¤  �r=©i7rãdc}ƒ_ÿ� í¿þ�þ.µã± ‘ƒ¸�3ŒŸ\v§QH£ìuÒìS[T“€lAÀúï«ö0ÝÃ[Û¤¹—vC¤^XÓ>õfŠ�ϾµÕ&œ5ž§´xÆÆµó}s¸RYZêϺóSŠæ-¤l[_,ç×;hÑ@5Žæ_êÿ�f¸X ÙÌÎZ=û—Ël¯QŒñÍN–:è‘Këp2‚2¢Ä Lï­YbŽxž)QdÔ«£Œ†‚î)ô�ÉUÚXœ$…HW+§±ÇzÉû¿ÿ�AÛü�ü]lÑ@ÚÇ<VÈ—3¬ó î‘S`n}2qT'²ÖžáÚ b¢'*†Ì1Qéã5«E�RÓíõ Ÿn¿Žëv6l·ò¶õÏsœñùR_Ûê3¼fÇPŽÕ@;ÃÛù›oâïW¨  »k=b;˜ÞãW†hAùã[0…†=wVn÷O¢]Gk2A1Ô/6ÈÑïý*Lñ‘ž2+¦¬ÿ�-#,¨Š ³6c’I'ñ$š¸+œø‰¸¥c7Éñýíÿ�ðÿ�³­hî%XÔ9Wp�f>¸íQÑWÊŽOoS¹ša×óƵoúñÿ�ìêý”—°ÀVòæ;™7d:Åå€=1“O¢ŽTÞ§r¥Úêòܵԡ·ˆˆÚ×yŽáN±þÕ†rך„71í "Ûyx9çq÷ãÞ¬ÑG*oS¹óß̈,®ã¶`~bÐù™˜ÅVðÜWK¬›«…žg¾ αì÷ÆO`;ÕÚ‡Fÿ�_þ¿þˆŠ¦i$o‡©)JÍšÔQEfvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Þÿ�‘z/úí?þzÙ¬o ÿ�ȽývŸÿ�F½lÐEPEPEPFÿ�!OØA?ôš תöÖQZÏy4e‹]Ì&“'€Á8öÂÇ5b€ (¢€ (¢€ (¢€25‚F©áþzß¿þ“OZõ^æÊ+©ìæ°kIŒÑàðX£§>Øsøâ¬PEPEPEPGŠ˜¯„5¦RAGoݵkÕ]JÅ5=.îÂGdK¨eê)~jÕ�QE�QE�QE�Íè>ã?óÿ�yÿ�¥2WIY6¶qØÇ$1*ÓK)Ürw;³ŸÃ,já¹ËŠøQ5QZœ!EPEPPèßñó«ÿ�×àÿ�ÑTÕÿ�:¿ý~ýDö:p¿­EVGxQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEá_ù¢ÿ�®Óÿ�è×­šÆð¯ü‹Ñ×iÿ�ôkÖÍ�QE�QE�QE�gé×rÜßjÑHAKkµŠ<Š`‰ùü]«B³ôû9moµi¤Û¶êéf¢“Ÿ|£~•¡@Q@Q@Q@ú…ä¶·ÚL1íÛutÐÉ‘ÎÑ ¯Ç¾QZЬíFÒk›í"XÔ¶»ie9ÆÁ*~<ºÖ�QE�QE�QE�QÖ¯dÓtFþ%V’ÚÚI‘_¡*¤€}¸«Õâ Y¯¼7ªYÛ®ùç´–(× e™'ÜÖ�QE�QE�QE�…¥ÝË{k4³mÜ·w1 £jL迎Ví`é6²ÙÚÍʵÝÌ Ÿ•çw_Ñ…\79q_ /QE©ÂQE�QE�ÿ�:¿ý~ýMPèßñó«ÿ�×àÿ�ÑTOc§ ñšÔQEdw…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Þÿ�‘z/úí?þzÙ®bßÚݔm Ÿ‰š;1ݬcb»˜¶3žzÔ¿Øþ$ÿ�¡«ÿ�)ñÿ��tTW;ýâOú¿òŸøÑýâOú¿òŸøÐEEs¿Øþ$ÿ�¡«ÿ�)ñÿ�Øþ$ÿ�¡«ÿ�)ñÿ��tTW;ýâOú¿òŸøÑýâOú¿òŸøÐ͵ìwW¢¸kI„2(Ƕ~9«5ËAáÍzÚk©cñIs(–Léñœ°EO_DZŸûÄŸô5å>?ñ ŠŠç±üIÿ�CWþSãÿ�?±üIÿ�CWþSãÿ��訮wûÄŸô5å>?ñ£ûÄŸô5å>?ñ ŠŠç±üIÿ�CWþSãÿ�?±üIÿ�CWþSãÿ��Ú¸¼ŠÖ{HdݺêS xÄŸŸÁ X®ZãÚýÌÖ²Éâ’^ÚS,xÓãáŠ2sÏ£µOýâOú¿òŸøÐEEs¿Øþ$ÿ�¡«ÿ�)ñÿ�Øþ$ÿ�¡«ÿ�)ñÿ��tTW;ýâOú¿òŸøÑýâOú¿òŸøÐEEs¿Øþ$ÿ�¡«ÿ�)ñÿ�Øþ$ÿ�¡«ÿ�)ñÿ��mÞ]ÃacqypÅa·¥œ*Œž>‚§®Vÿ�Ã~ Ô4ë›)¼T|«ˆš'ÆŸFþõcûÄŸô5å>?ñ ŠŠç±üIÿ�CWþSãÿ�?±üIÿ�CWþSãÿ��訮wûÄŸô5å>?ñ£ûÄŸô5å>?ñ ŠŠç±üIÿ�CWþSãÿ�?±üIÿ�CWþSãÿ��è«&Úî+Ô’X·mY¥ˆîù‘ÙõSTÿ�±üIÿ�CWþSãÿ�m—‡µkv†=n ,’–{.K;³·GØÕEØÂ½74¬jQTÿ�²µ¯ú Ûàÿ�l£û+Zÿ� Í·þ�ÿ�öʾts}ZeÊ*ŸöVµÿ�A›oüÿ�í”ek_ô¶ÿ�ÀþÙG:«L¹ESþÊÖ¿è3mÿ�€?ý²ì­kþƒ6ßøÿ�Û(çAõi—*þ>uúüú"*‡û+Zÿ� Í·þ�ÿ�öÊ·¤éÓéëvnnÖæ[‰üÒË–äDÆ2¹ž½êe$ѵ 2„®Í(¢ ê (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<Êö ‰µ¯¢Øx¦ûɽT†kiâŠ�ÖйPžzžÙ°#o¼�Î0:WÅíáëõŠòÇv”ªëöÕ¹ß)1Û4ä˜ÂãcaËHû¸ Ôº‡…|8—3Ü^\ÞÛ>£8ó�Ön`Iå` «(RH  Ð�;T©àoÇ2È–6Iæ¬i—Ë åùDìÝ·”;HÇÌ:æ€3uÝS_þÄO¥‹Rÿ�O0mCœê5hØí]¤© ™pÝMjZx™—K×.õ{D´}G[¥‚c:•XRmÊÅTŸ‘ÇsMoh/§-‚óìé"H€j”¡Ê�Û÷SÈPv‚Æ@5"ÚxsA¸¸¶šæfÖ¦,ðÞÞ³›© …Y竵{�1À  wT×ÿ�±ÓébÆT¿ÓÌÛPßçºZ6;Wi*H#æ\7SU®> jv3ë0]è6Ë.—gsrâ-A™dhR A1 —(AÇPà Ûoh/§-‚óìé"H€j”¡Ê�Û÷SÈPv‚Æ@4ɼáˉî&žÎyd¸‘䙞ösæUW/ʈ ýÜ"ñÀ ¼AâËÝçUK}&+¨t½=5‰ïË&&2ä*ì9`!b QU,5ëȼa­è¶°›Éޤ ›£AÙ­Ù¶±ÜäìQ»’ Œèj^ðÝõåâ_¼ÆâöÈEqÔçC%ºê$(-ÉÇñ¶OÌs~ðÍá[ø…ÜÞtËz“¦«rÁ¤ÛµdR$þî`Ð �¹©ëwðê§i:\w÷PÛ¥Ìë-×™T)ÚÛ˜˜ßƒÇ$f©i~-ºÔ$Òå“JŽ-?XRtû…ºÞÌ|¶‘D©°yyDcÁlcŠÑ»ÑôMvÿ�íRbk«BmÝíîs†1I±†á‚ÆÈç§4–žÑle–K[Y".[™vÅ¿ïyK»êM�sSø÷T>“R]ÞÝ®4µ‹"׆O–5Œ²¸Ø0q*‘‚sÐí­­[ÄzŽ“qb’é6ï­mĉzO•$Òˆ€A³,¡ˆË6̃À' :xzb…m.(¬¤ÓÒ9/§‘VÝþôxg#ê¨ta×Ðn˜¼Ð]»•‰Yþßp¼¦Ý¿%”ôcó{Ð+O^ÜXøy4­!'—TÒMüks~Ë媈r¬å˜þùFìHçÖ¬Xø¦çQmhtÄŽÃR³†ëíÜì*dˆÕvì2 /ÞÎÛÁþŠX--MÊ˧Zµ¼qGªÜo‚sòàIÞ3ýÁº1< ÐmšÌÅmpÍbX"7³´cÊ9(_k= F   ë:¢Cã (‚Aocáÿ�¶Ás Ã,Ë+ ð@�c˜ñq´uÜvÍ}ãk½*[Ëký-äg6ñ[Ìó‰DÆP»¶DYHò\ªý±šÙÕ¼-¤kr\=ô3±¹¶³ùWrÂ%ˆ1`¬€#,Ý{3„м¡HóÉ-½Ì²OQ<’ßNî_êʱrU”’C.Xœäœ€\ðþ­6µ£E}q§ÜXJÌÊÖó£+¬F@uVÚqJƒ‚2JÔ¨,ìá°¶[xì^òHÒ3Vf%˜û’MO@Q@Q@Q@Q@Q@Q@Q@Dúÿ�ˆì´/ÝÏ>•,ú!o³l³‘öÛ¤çx2’r$ Á žsµmâk(¦N¿¼ ¨¤Ëi;Çi,pý ¢°PÌ\†RcœŽµOUðÕüÚ´0j©o¦ëû| m¾FýÚÄÞ\›ÀMÈŠUºdb©i¶«ø‡Ä–óÇs  Ö-ïMc,~q†(�d‘°¬¾d=ásœ04¬Þ6ðú÷ß:$I1‘­¥蜻FåvÈ„ã{L×´íb{ˆlå‘¥·Ò$°I ÙÚÀ:Êv¶dk–»ø}ywáÑ¡6¹²µ‚[}<µ–d^&‡ço0y›cwQ€½A;±[úf¨Ûx‚óV¾Ô­®MÍ¥½·• ¡‹iˆ»nÉ‘³–•øì02q’�/Œ4&–tûk 4†F‚EÕHRQÊí“ò“É–?h’YMvn¤Ž8fŽ Vkib’7rFÊrH�‘ƒšÌ‹Á׫áñ¡É®cl#ûŽÔ,°˜^"ìX‰6”^sƒœÑ{á-NúÞi¤Ö-«4Ön÷Àù[-¥2Æ¢?7<¹$’ç‚@Ç�ѵñ†‰yz¶pÏqö†fŒG%”Ñê¥ÊÈ0ûA`§’¼€G5GQñ½ƒxkSÔ4yÄ·6Ú[êP%ż¨³F°a¸.å< ©ã"ªÍá^×P“Y›Zµ+R:«E•#©·1ª‰KåôÀ'wcÒ³ôO \ëß4ûk‰ÞÊ÷ûéϰ’6]QeÜŽÀ±ýÚ€xddPc{â-/OÔ"±º¹džFEBìŠÎpܨXðžÕOLñnªÌÞ\Ïn±ý¬<wVÒDXA"£¸f�m†zòØà« Î}§_MbúM&îéÖ?´<ºJ»‡N@ÌäÅÀ## øîkÉ–m^Ó&Q…í…™¯$È<Ï3 Þ»ÐÔ^1Ц·¼œ]ËYÀnfó­e„#þZ*²‚ÉÇÞPG½[Ó5í;Xžâ9dimÂ4‰,DB¶v°£r­†šÁ¾ðv¥ªiw°jä3^M§M¦Ãr¶;vE.ß1|ÏÎÅä�»É­M3GÔm¼Ay«_jV×&æÒÞÛʆÐÅ´Ä]·dÈÙËJüv8É�£ªxÿ�E°Óuˆe–y­m¥¸>Í*­Ç–|·+µÀ=J’dœ�M>ÏÄ7v~¹ñ¸»¼˜^ᢆÂkwDQÊ´rÙ7ÍÀ#ÍeÝü>¼»ðèЛ\ŒÙZÁ-¾žZË2@¯Có·˜<ͱ»¨À^ Ø®–ÿ�I¹Õ¼){£ê‘4÷–’ÛKsoR»‚l`›¨*ãÆ¶zv·w¢ÒC`¶×±?ئނF˜9”�J(ò×– ·qµìüE¥ê“éö×,×*¬À4.‹"«bŒÀ+€H©8$f¹ýOÂæ©ý·æëÖ ý­¦G§I³L‘W~Xf~§Î—ŽÙ^»Néü-àˆ|5vÓìÉ+ž1!¸`Ç$I.â\g§�ð2M�kj'Ò4»¹mo.$ŽHR9%?g‘’4rUYœ)URU†IÀÁÍF|Y£ˆ$›Î¸1¤EœÇtÚ2Š6|îm\ž3ŒsX—¶¬xÛ_ÒäŽæ;+Í"ÚÒiZÆ_.@rê’ð€…™}yn9R*{ojqi1A&·¿¶Ô¦Ô­nb²(ˆò´…Õ£2Ê|éÞs‘š�µuãÿ� ÙØ­äÚƒˆŠ»2­¬Í$adŒ!d YA,2=kFé÷‰i»ûC¤ryme2²,›ö—Ê|€ùn>l`ŒWŸø‹ÃLšòI4]ÞÜG$ÓÏ™rÐÜ»„ÊÌ2 Še%[vI'5ØiúN´ÚÍÆµw{ml÷ºtòYÅnY­ä@í‘)|>Y?€dmô$€,^:ðôÄ,w“33*¢ýŽmÒnWu(6eÃ,nT®Cm8Í[ÒüS£ë7e±¹‘æòÚ@¯o$y Á_”Uˆ *H\ä~ÖÓ\°ÕÛÄVr\Û|Âúc~øÆ“¦ã‰º•¹|õä qÅ[Ñü%«iš¥ìºÕœþA¾ótöMâêe™°|ã·£xã¯4ÐëZ¬:‡}ªÜ$ œ3¬jYˆQž�þ}SÅaØxÖÍõ[ë+æ’-·Ñ[ڷئ_–Xat’ËJTÛ’1ŒÕùtíC\ðmæ—¬I 7—Ö³ÛK%º¨2«,pvHÜFr2G5ŽÞ×f[Ñ>¿`Mæ§k¨ÈSKuÃCåaFg<">{|Þ£�Ÿˆ´½CR}>ÚåšåU˜…ÑdU`¬Q˜p �•'ŒÖF©ã(­áÔM¬n­¦jvvwMqo B³Ib‡€HYsÆzŒ2’¾ðM¯‡5 .!]9‡Î"–=9#¹*Ç$K0$Éøè3šf«á=NîmDØë¶ÑÞê6º‰Y¬ZR‹"UÈ&ÏN>aÜ~߯Z-ÜÞD3]µÆX „âE*c ”)¸cÍŒœŽŒNjEñfˆ×ý·kAÊÅáuWD;X£Ä€ØN ½dØxKV´ñ¬þ —[´–)žbö˧²²$ €þiä h¹Ûýî9§Ãì¯ìÏöpŠáYcž=25¹Á`Ø–BOš«9Í�ušnµc«[O=œ’0ÌsFð<rFÀµ£`@#F:Ö&£ã{ðÖ§¨hó‰nm´·Ô K‹yQfŒ!`Ãp]ÊxSÆE^Ðôx|/¤\f Æe•t­7ÈVÀê±!ffÀõ$ð�í\¾‰á‹{áÆŸmq;Ù^ÿ�` yöFÐ+ª,»‘Ø?»PŒŒƒŠ�ìÄšTz×öCO'ÛI*A!RÁ<Íöíß³æÛœãœU[OhÈ^ æòþÊnÖI-åd„`FeÀ, íÉÔÖ{x__›Q´¾ºñœóÚݘs¦˜˜ó~ïÎX ç=IíCþÝ寙¦é·úÕ´Ö¶:KiбéûK‚Ñ0sºFD@®0~n›°�:ã Y}¨ÜO´\}”Åö9¼á.ÝûL[7ƒ°û¿wžœÕ½G]Óô¸!šêIHŸ˜£†ÞI¤qŒ’±�u8ã½aCàû»=!m4ëÆF—Ì›ìú0Ž;pQe ®8;·ž*õ߇ïÜéVšÆÍON­ÍÍÍ¿š·á7ïEeä˜Ñ²ÁœPn±ã¤Ôô=?Ãì’ÿ�jG$Âñìf¹‰J¨ÈŒ®2ÎbpŸÄEoÝkp[ëöz&ɾ×yo,ñH wDeAÜÀ`}áԎë.r­|)y§êú]åž©ÅiÊO¶…šv¸™f•ƒP™dH={hjšEíÖ±eªX_Am=µµÅ¾ÙíŒÊÂSgÔ‚%ïÈ$qÔ�dè_4½CCÓ®/fx¯§±ŠêHRÒl;0@”ù˜w „,FFk¤Óu+M^Å/,eó`rÊ R¤%YJ A"¸KŸ†W—Öz­æ³aq‹eöHc“JÞ’ò˜2+JC ± #ŽrAí´M*=KŽÊ(í# K³¶[x''jp>¤Ÿz�ТŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Í|E{{%ŒšŽ£­5¬ºõ²0EÑ w±…v%L„LƒŒ0ïY’øžæûO¼UñsËn‡I¼[ÈÖÚ$’è¤Ül "…RCn+јŒŠõÚÍÒµí;[3ÿ�gË$« ¤0HˆÙ$e”)åIÊËâ |wemmâåµ–üÙMbR5 «H¬7’]TÜîÀSŒÕMVå ø•®\Úê†}VÓC‰í4’ñbâAö‡òö•ßÁXŸ‚ÍÉ+€;ßíOíl<ÜÜÏÜF¡I • CcN3Ÿ˜Uª�ò«ÏI§¥¼ðxÂ;Û ä¶ÜÏ›Yâ%xŽ˜švÚÙtò‰'Úë·é£xamrH <PFHãfùœ Çå®FFâ6Œç¡Ý2¨™b!÷2–!ی局yäóއ 1ÐüYe/ˆ´I5mrÍ®b´ÕíšYeHË„»…c$  Ž"ÝpH­Xß-ÏÀ›J¾Ìöþ $¶pÌ’Çn2ðÙ#¨ö<×¢Q@K‰­lõZöÃÆ0LŸÛÖ4{íØ]¤ÚÅ#± œáe?&Ð mÆéñmõÇ„®um;_ŠèN[)%2B°ÚÂ.$ )u‰ö“æ`ˆ ަ½6¡ºº†ÊÎ{»‡Ù´’6 ¨É8žj�òëßø²;M2Ùu½¦†G‹P{¶÷oæa1·"S·#,NTŽƒ³ñ¡sm/‡‘u§Ç{z`¸‘U:}ši�bœñ®8ö¢hWkj‡R0Œí“Iº@’¨IhÀŠ à}*{‹ o¦…¬Új·ÁnÂúÔÛª˜<eAa"ŽÃç=ÀÀ¦ø¥,õOɪëñj1hñ›b³ºÇ=æÉ| FsE!:D.®íôÆñ|_¼×>Æ·dÛ™$·k?5Hùæ‚à䛿¨ÖV›â-7Wv[ '™UöyŸe•cnå\¨V_‘†àHÎrF@<Ùüg¯^ÙYE¦øƒM\½Üqj7s$QÝÉäjq «F(› oÊšë¬ü@²xá´ù5噤ýÚi"~àˆƒ1óÄ1;NณØRV$ SƒƒÐõ ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(™Å°ƒö¥ýÄÍxR4Hƒ£ÏåH2YT�X“ÈÇ%ºË¤ø¾ÏXµº¸·²¿U†Ò;äVˆ¸‚@æ7U‰;¼¶N#§"©ZxìW‹u‰u¥•>Õ°‘lBý¡Ä’õ‡»¨aèG§ZxÚÎÒKXµÍcÊ}6-3dJDQîòÈ+;—{ ç<ƒ@n¾(évit’iz£]Ú,¯sf‹ ’$Q™Éó6°Û*+׎-ß|CÑ´ÍbÓJ¿Ym¯g1+Âòúá”HY¹ÆJ9$ ÁÖ|vž óà‡QÔ–L\-Ì‹c"Çqµ#%’T�HcÁLõ<ýe¯‡§PêÌW²ÃêÚX.dUÆì2–_ø )ÆÍ�Oªø…4Û¿²Å§_ê žX¬‘Y¢Œ’̹ÉVÀ\±Úp8ªßð—Ú}¹"6WÂÍî¾Æ5‰äyû¶y{x;þLíÛ»Œæ¬êŽ÷UMJBúÆçÊLm]@ž0I Á•ºlà Ç«Åá8ožT¼½ûÜý°éí"˜<ýÛüÏ»¿;þ|nÛ»œf€#·ñ”7Û¦•©žæâÒ)™b $ðù›ã>sû§Á#oEU°ñÜsézåÞ¨@º¤víæb3M3lŒ¿'$ƒò‚@e,8©ìü¤ömê²­•ü÷ñÇ'‘µ¥—~ý؈~öL�Gß>ƒ ø{m´É®ë&Ùb¤„„î,~ï±�{㜞h÷ü%0Cgk*Zêw¨\ØÅ¤{üØÚ\¯ÞU <—�“ÐÇ©¥¹ñR'‚5ÛØÜ7Ù!¸vµ—jȯ 2º·ÌG œÀã<Ux<–ÿ�cÛ¯jÇìš„ºŒ{¼Žd—~ðu÷O›'~sÏí¼+m…ï´ ¯o.íïEÀšY™‡Ï,Ò`ª¨»Ç  «ï\èúÞ§%冣-…¾•k}$1¤%¬Ã5À”¹Ü3ð¥þéÛ‘Vô_hzþ¿6c1{„Gua$lQ‚· å—’8p¤ŽFj;ß CûOí>"Ö[ûJÅ,.1öq˜—wLCÁ;äÉÿ�¦‡¦z'‡WCQ:üöÈŠÞwB‘g®6¨'èÄÛÏkž"Ôí|plño¤Y[[Í,–Énþ|’Èê‘°r_k”òÆÀqç®_ø¦Y¬Ù`‚ïLÔ-µ ®-®’2ÞT÷)r¥Ô«)p œ‚§¡kSðm¶­ªÞ^ÜêZ€K¸"†KhÚ5Œ™ž6S³xev.n¾ÜSn¼åŒÏ­ju$°J÷Ù‡Îo!÷ĸòöWù°d“œää;ÄóE¦ªOowªj2^ßÇË‘¢‚åãÜw@|°NFII«Æ–f¶-o$Žâ ‰„UÃAþ²& à 7>V犯oàX­V6‹^ÕÅÔ3Í<7Yƒ|ffß*åm*ÍóÊp@Æ1Zrx_L—N³²t‘£´¸ûJ1™¤%‹–=÷ï}Þ»­�A‰í/.4 ݬwì†FcrðI(F9$aSwös‚j(|kg%ÔQÉa¨Ao%ÅŪÝʉåy°y…ׇ-Ò);pvõÏæðmšg ;ËÛ5°½{ØÖìpÛѾPŽÈ�Æû)¿ƒ$²µŠkM[S»žÆæçP¶·™àD–yUò¬Â,…&I>›Ï ÀŸxÒßÄ×­¦—¨Å¶ŽéngÞ97ydm·Í±¸Û‘´ç©k¾,œ< ¥[j$Õ­l¦¾X¢6äµÂG,gqßвîUÀaŒæ£ð.…¨è’:}‘ì´ö‡÷ÜÃj³I6Fu¿ 1»%ŽNGLìÞøVÖóMšÁnï-­å»[Ͱ2‚’‰„ÙRT‘™ãõ8Ç` ÛŸª[\4¤n šÍÚanÉq/–Œ3&$0ÚÅH8Üdi¼I #·Ñ¥±½F¸sWLŠ!w™J›qùTüÛv䜌Vl~¶H$µVGxmb»BY>Í)–»ÆàÄõò æ­Çý±¤Ú¾¦ïßÛ'xÊ <£s;J±ã<gåÅ�tTT6°5µ¤P½Ä· ŠÍ6Ýïîv€3ô¦ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 9¹›êW>wü$ ©¦ Û¼“9´’ÃÌçnß7“Óoï|ΜV·Ã>Þ×áæd¶ú«‹dK¨®üøÝ&òÔI³ÌÁUÎq³ œ‘Þºö%Q˜)bBŒdûsU4JcG±Õ-ÕÖ Ëxî#�+¨a çÖ€<ËJ·ŒZøJÎöÛÄЭžƒqÛÃoz®³ónë˜Pqò¨Þÿ�„®÷QÒîõ«íZ ”<ûI´û€’Çå;¤©ÝóI‘Ü}^©I©Å¹o¥4rùÓÛKr’`lÛF¬:ç9•{c¯4ÈxûPÔ­.d‹N‹Yf“C¾XÍ´ò(¹&/#%¾Y0OLóÔg"öîâ j{›øK^ÚÓ§Œ=½ó+¸?j~aäìù1€IÚÍzcé~!‡WÔ¯-mlI Þ0O%¥F È>mÙ÷P8<Ð-y|Þ1†âÐköê/ ̰ÌÖÂjû\ ^ß4!ÉËœ•Éi‡[“Oi¯ªNH­üës%ü®!R|ù–1±hX‰)ÎÓób½¢îÖ ë9í.£ÛÏE,mÑ•†?Pjž™ éúCµŽf®Ï2âæIÜ/÷CHÌBûŠ�â%7öN’.n|I©Ï,KmisÚrêQd!™”¨àyÇ»žG¡A<w‘Iû©‡x™fˆ¦ìTãƒÐŽG=ÈÚjQŸëóµ–¤ ‹M·O5´éÂÈÐËp\FJ|ç÷‰€¹ÝŸ—8®3K]nÃÃúM®ˆRñü:Rå.`¸òâ *¡ö¢8U¸�)]Ø^yR}†©júœZ.{ª\$œ<‹¶¨,q’pz�çü'Ô¿7÷úí¼ŒÏ’ÒæÞXÓ` ˆ$wœœ‚A'9?/jæ|>ã@ðwƒ"†ËÄQ"KRixì‡ìŽ®6`žiŒ€£nrW¡¯S¢€<Þ•¼¡Íxþ(KÙR#z©á•æHJ²¸_ÞF¥¹Ü )` È';> ŽHõ]~[‹MNÚkÉ ¹T¼2º„6Ђ¦àþb§?(㯢€ *”:œSk7zXI{h!˜µ–C"®9Îsg v¤ƒTŽ}jóKòfIíaŠvfÛµÒC R¸$õ‰³;Pê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +Ìtß Á7‹õÏìÍ/H²µµÖ!w¼‹åT[ۻ¨©ŽK—ÇÎß.y©!ñþ‰ð¿@¹ÓgÓš[o%ìð܆w‘#Š> »A$Äœ�­“€J¢¸MoÅÚÆ’ÚÍê‹ 4ý+S·³x<§ó¦YVHmøVS?÷Nvö­kºî²e}_O†Ú !Ž{YQ£@ÙÜ6¤Òd—òç?tb€:º+ΰ±Õö ñx“ì¦_ùjb7;<¬õÙöoŸoOâë^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Mž‘qi¯^_^xiïu®gžßTŽâ ÒÄÛŠB2Á U60 ‘»p®BêPZøaàðkGy¦Ù[µä†[mÒÜCqnà æ·—áXð¡r`=&ËÄöWÞ¡£ÜÏkm}muöx`k•2\/“»ÕNI0@Î1Ö´lu];T>þÖìDÛ$6ó,›Ðàœj�áÃ÷¿ÙÚφ¤šÚjòêæÝd€¬pJn  €À£ÊŒýÆàñœitµµ…¼>¼ŽÚÚ-EM¯Úm„o×I,V䉲«åÆíàeGÌ»…z=θ-õ[+5H&[«æ²/ùh˜[´ß:íàü„mÏB§¾4ïXÝ[#^Ïkcq%ÅÜÁ%ÂæO³Êèì¹Á Üxàh�ðî “Å&œºúA±Ž mÛÊ1¨`HT13/äppTãW aá9 *÷ŽKO¶^5Õ—ú&nVY™íä¼ÚÞR›\Œo;sŠôq­é-=¤+ªYo#Ú ¸MÓ¡ ƒ?0Çqš©iâï^Æïµ`BJð°7(up„c?ÞeÇ®åõÌØxzökA‡PÑöÆ ;´’i$ŠT·ó'ŽX#;›s˜Ö=»‚žH#¾$ñÏ…ï<A«Ú3G6ž h€±{ex%-Ÿ33©ÛÆ>hÎñŽ3šé®üQ¡ØÅ¨<Úµží:3-Ük:³Â£ûÊA=z“Šžß\Ò.¶Õ,¦¹’!:CÂ3´dd8�ä©ôæ€8ù¼#ö_.½m $áÝ|ø™â§Tb—@ûd=þmÛr9Ä_jÐ[\‹\CÏö\²[Csoþ² †yÎã/,É´n$³q’;wv¾+°¿ñDz5…͕⵬Ӽ¶×k#DѼJQÔ3æäÿ� â´ÿ�µ´áª 3ûB×û@®ñkç/›·×fs|PŸXhºŠbÔ,ü!5¤ëã1Él¥,ÚÐÄÊ�—…óÉ õÎ3ÅQ¸ðäú·…µ'Ñ´Ÿôáu­[chÜÇ$—1,y,>PÍ|ØÊã¶}BÇTÓõD‘ôûëkµ‰Ìry–@Œ:©Á8>ÕÏøSSðÜV×V¶ú>‘s÷h±µxÐ ¯•”8>^rG�Ð-ÿ�‡5=kÆú½å–©~âKo*kAöB‡,’1 ê äùLCƒ[Þ+ðôº¼ÖW6Âó¨’Ò4m¦]¯×©RÀï´Žõu¼Ig,ú?ö|Ö×öºÓÚ‹‹{€êŒ°É.xÈ?êˆê1‘VáÖô››Ë‹85K)nm3—Ïÿ�iAÊþ4ÇËáQ<?f—0jR[\G͘d_¶ÚD®ˆ¤œ)$°—k`gå5‰©x#Q0_=‡‡ÔG¨X_XÃje„5ŠJ 1;±±dŽgÚ…¶™0;×¥¦¹¤J›ãÕ,|s¹n(ô“¯Ýãït«ùÈÈ YÓõ­G^ÕD:UÜV—¶60›qîX¦–I¢âMÀ´r”ÎyšÐÐ4´_j³Øhɧé×VVª¾PPÊ>ÿ�•[ƒ‰ç<÷®ªŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ât >é´U»Óü;á«8µKt–xâBžj²ç7 zç©õ©G…™aŽð¿„ÄQ†‚•C}ì/Œ÷õ­¯ È¡ÿ�Ø>ýµ§öˆ|–›ÎÊ\å÷ £š�äámÌßð‹øOsH²“äò]sµ¿Õõ8=²j톛ªébQ§é³>ù¹h÷·©Â Ÿzéh h隣jcSmÃÇPUØ.Žï4/¦ý™Ç¶jæÿ�Ͼ‘ÿ�äÿ�â+fªÁ©Y\¥ËÃu¥³l™ƒqÚ“þë)ú@7ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â*qâ égTÆŸýži»ûJyYÎ1¿8ÎxëZ*ÊêHe# ƒE�sš~£âMBÙæK])Ï483ÉÖ92~çr¹üjÞÿ�Ͼ‘ÿ�äÿ�â+RÚÚHš8b4!'æv,ÇŸVb†ßTÓîïg²¶¿µšêßýt̬ñ¼ ä~4G‰¿çßHÿ�¿òñoñ7üûé÷þOþ"®.¯¦µ½ÝÇۭĶâVˆí óÀùYOЊ±mså´w6³G<¨hå‰Ã+ƒÐ‚8"€2÷ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â+fªOªiö·ÐY\_ÚÃwqþ¦ &U’O÷TœŸÂ€(ïñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄUØum6âîæÖBÒK›Q™áI”¼_ï�r¿Ic¨Yjv«uawownÄ…–ÞA"88 â€1$Ô|G«o`mt¢óA,Á¼ù04`¹ßÌ‘«[üMÿ�>úGýÿ�“ÿ�ˆ­F¶…îã»dÌñÆñ£äð¬T°üJ/åRÐ6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüElÑ@ÛüMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ³E�coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍÎ_ê>#ÓíÒgµÒ˜4ÑC…žN²H±ƒ÷{­oñ7üûé÷þOþ"´®í!½…bK"Ë ™:ÿ�ãÊ*z�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(‰¿çßHÿ�¿òñoñ7üûé÷þOþ"¶h  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÙ¢€1·ø›þ}ôûÿ�'ÿ�UtÝGÄzž•g®”‰uLªÓÉAÁù=루­m¡²´†ÒÝ6Aki’vªŒϰ  ½þ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÙ¢€1·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â+fŠ�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(‰¿çßHÿ�¿òñ6‡¨\ê6s=Ü1E47@Â',§cc iÖ7†ÿ�Ôjö¸ÿ�ÐÍ�lÑE�QE�QE�QE�QEÃêþÔu[í^صœ6…ìÂñ]Ì/Q UM¸äÅ÷·ôvç5wÁÞ—@2Ëso w- ví,z…Åך‰§÷ßêÀÜpƒ8ÏZêè mÄãŨCm¤=¨ÖF¢›ïdW)ö?²• B@8ùúŸOz[oø’+;2Ði?j²Önu—ír’9þѹXù@©_´v½³ÇsE�q_‡5ý-tKhbÒBYZÚZOyç9’HáÈ+å˜ðr *w¥Ï^rí+ÃúþŸâ›k—‹L}:Ôx.¤óŠÝ\¬àìòð í Ü䜌`ö´PŸ_xC_ÔÍðtˆ~ѦêVà‘À&å•‘ÊlÀå~a’I%²zTOà CPºÔ$ÔIvgš+¨u;—6²KŒí„…ˆ @~:¯zôj(·Ñ.añ“¨%¥…½½¦=”‰ œí Q°eG”ÃŒnªz½?‰­õ‹IÛj-u‰ÐÛ<uA`Xî9 ËŠìh {ÂÚv«¦Å4WðiÖ¶ËImme+J±í7ÎȇoÝÚ¸;pyÁ�sz€µMVÎk d±·†ëËëk˜¥Ë1äo.@v.$Á*ÌNÕ#¯E¢€8; jÖéwV6:|sE©ëÄ›V¹œ¹6ïD²#3¯œ lœäZÐü-©ÙK¢Á}ö#DÞ-î v3\©FLH¥@\†ÜØfÜÊÙQ@]—‚nlõ%[õ°Ë$+bfóXéø\ÿ�s޽zësrÈÿ�iH‘¼Æ"rÀ¦NÒr Èì{žµ5�QE�QE�QE�QE�QE�QE�QE�QE‡áÃéÉ3ÿ�ĶÝ.3'î‡Ê79éɹ™tíZo†Zæ–|5v/®åÔÞÝ¥¶Ê‹‰&t|ù»@@98rz¿ È¡ÿ�Ø>ýµ¯@/ômOÄÖ2ÛiRHæÎâ4†IcV²º“Ëò§?63×å »Œ×uE�W7£Yk¶“øŠâîÏMY/îÍ´q^;©aqmrb]£÷@äûÄcŽzJh‘FŒ:—P (<€zd~€9 ´^{+{¡§iêpjFöH~Ôï Ñ04%ü¥!°ý6¸¼óÇC¡i­£x{LÒÚ_5¬í"·2cÊ \þ8­ (7B¹šëO–IÜ»‹Ë¨Á?ÝIäU€�~ZÎÓPoÏy}¦éÉFñ[]CtÏ7–YNÒ†% »hcó· zÕý.Äéö 9k‰æÈÿ�Y+ÉÃv? ¹@Sx^¼¶×…Ôd2^jVº²¥Ûʤ \„ĸ öqÈïž8çÃzdúNж×F#;O=Ä‚J!–W”ª’!wí8è+ZŠ�+V´Ô/5;4M7NºÓ£’9d{‹¦IE|†T0m¸ >eÉôë[tP+¨èz–¶u«{Ë=:Ù.l.,m/¡¹i&D“ Jpüç•�zÕï iwºzj3ߥ¬W×hhm´Qq€¤ª“Ÿ/qàrÇë[”Pl÷2§‰lmCâ,î$eõexBŸÉÛó­*£-“É®Ú_†Q6ÓBW¹.ÑòüÅ^ Š( Š( Š(  íjîk+¥‚»]ÛDIù^tFýÖQÕ¬¤Ô,ã†6Ue¹·˜–éˆæG#ë…8÷«Ô�QE�QE�QE�Vo‡®e½ðÖ•upûæšÎ$oV( ?™­*££Y>™¡iö2¼–ÖÑÂ̽ U�‘ùPê(¢€ (¢€ (¢€ ÆðßúCþÂ7ú­šÆðßúCþÂ7ú  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÅñfâçEµ3\G÷̲y¼,À[ÌÀnB2 ã=«j²5Ÿù xþÂÿ�¤ÓÐÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�ã•mµ;uÖ"ÒϘ.e†IÓ(B•B¹éÁ•??jbjö¯{eûÑ5œ)< ÄßqË€Góôô÷  ÿ�ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9Vt­bÇZ‚Y¬dvJa•d…âxÜ�J²8 §GBz½@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9VõNßKŽ.|À’Í U �ÒH±®Oo™Ôúª)5˵˜´™$‘/&Ê $!w²mØX('h9À<P?ðXÿ�Ï}Wÿ�×_ür«AdšoŠì¡·¸½h¦±¹gIïe™IW€)ñÁ›‘ëWôÝrÃV¸º·´’O>Ô¯°I(lí8u©ÚpÃPÜÿ�Èã¦ÿ�Ø>ïÿ�F[нQ@Q@Q@Q@Q@Q@Q@Q@~tOé ¢é°–òÃÇ”3€¼“ôçÒ³ü32ÝxJý.âÕbAy{‘$0Oå4ò<e8Y?Õ²co#§5|)ÿ�"v‡ÿ�`ø?ôZÖªH’®èÝ]rFTädÖ€<®òO6…o¨ñõ,çÙ2K=ÎckV•OÎ"¥SæñòÄäõj( ¹k85øLõ¹âÒ¦²‚â ¼—ÉxÚXä‹I7|å# µ³Ž3ÔÓDˆÒ4aÔº€YAäÓ#ð4çðxw\>ñ%½å¢M=ޱϗX–öâ@Êû|ÅŠEÿ;¹ œŸÂvo‡ µ¹ƒìì%™Òßpo"6•Ú8ò *2¯—Ž+nŠ�§¦ßhÚ¼þ_—¶âh1»9òåhóøí϶k[¦ñÌ­áÛ”’�BêÑ´!\È*ÿ�¼óFp¡°{f´|? °iÓ$±²1½»p`ík‰OЂö5©@w¨xvñîµµÓ<:m¬¯ ¼—14F/9ÕQQ±‰#2†i0I*:Ÿ Ø\i¾‚Öæ³°–gK}Á¼ˆÚWhãÈ$|¨Ê¼>^8­º(�®k]°Š÷Ä:[ÉáÛ›³‘Ⱥ” ›r;rÒ+…îÁTîô®–ªOªiö·ÐY\_ÚÃwqþ¦ &U’O÷TœŸÂ€9í_JÖ.|sáûÕϦ[\K+m„+۳Ȝ¹—æÜÎ8XûrF9­à PÑ~ÓöÛ/²nµ¶†_Þ+ýªå<Ï:çå'ýfäå°Ço q]bê6/¨¾œ·¶í|‰æ5°•LŠœ|Ås9ûŠK=JÇQó¾Ã{msäÈb—È•_ËqÕ[ƒìh$¾ëÚ—“=¼³oÏMãþgéVë.xeoióˆØÄ–W(΋À@'ÔíoÈÖ¥�QE�QE�QE�U¿¾M>Ý&‘ƒO8^¹’EŒ , Z¬Ÿ«>™U,~ßfpx1“úVµ�QE�QE�QE�SK¾ž‘e~¨cP$Á ÎÝÊ3øÕºËðÌ2[øSG†hÞ9c±…a•‚�A¡  J(¢€ (¢€ (¢€ ÆðßúCþÂ7ú­šÆðßúCþÂ7ú  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +•Ó´-3S¿Ö®/lãž_·²ï|“€‰Z?ð‰hô ·ü�lÖF³ÿ�!Oÿ�ØAÿ�ôšzoü"Zýíÿ�#H|!áòA:M¹*r2½ �$ÚF£/‹í5¨Z­¥µ¼¶â×ìŒd+!˜ùžf3º%ÇÉБÏE«Åâ-SU¥–.íÚ¾ÂÙ‹Ëi6fó~|[ Î6ó™ÿ�áÐ?èoù?áÐ?èoù�³£YßYZ<zÕ­Ìí!o6ÚÙ `˜4ŽKpyÏL qZÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐ|M¤jÕ•½µŽ¡kf#¹†áÚ{FŸsE*J€bDÀ܃=rëS}‡UmynÞúÅôõ[sdþj¸$Iæí“Ÿ¹Óz¥ ]Yiz"Å4ÑÁÔnmáVnæíÑ~%T}EnKwmðA-ÄQÍpJø !�± :’�'ŽÂ€(hö:¥£Ü>©}evòµí¬ÚÏ ZWÈä` cž¹¦Üÿ�Èã¦ÿ�Ø>ïÿ�F[ÕË}SO»½žÊÚþÖk«õÐG2³Åþòƒ‘øÕ;ŸùtßûÝÿ�èËz�×¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÇÒ’gÿ�‰l?º\fOÝ”n sÓ’rÍáÉ5_}“Uðö¢’[ê÷WZÇö)X‰d™”푚"ÍŒ7!†G@k{ÁÓjíá½'±±KO°ÃûÔ¼v“XÁØb'ŒÜ{×Av÷InZÎfŸ# 4¦5#¿Ìé@w¬øoÄ:—‡4˜gÓ£žî+;«xÑ(ÅœÎÉöiÈ.cE ù} £éuöŸÿ�Ð+Jÿ�Á”ŸübµÆvÀŽ@9 ®6[-^ãÄ>&6ZmÆœ/4¤µ´¿w‡gžpwá¿>rJƒò¶qÆvþÓâ?úi_ø2“ÿ�ŒUû7¼x3}ÍŸ»ÆUÇ®J¯ò 3´ð¦­–¶³h2]iQ^G<šdíj²ÜŸ&TrJŽ¡Ì Œ_÷g' W¡è—vÒìïåóo-í"Šy7nß"  sß$.æÖRà­…„Ðàaæ½xØúü¢&­>Ê]VIX_ÙYAß• »iI>˜1®^søP˜."¹ŒÉ ‡@ï#ûÊÅX~øW?¥ØD¾/¾¿¹ÓåhÞ3zÐÞ§s³1ÆT²Œ Ž3Š~‘%üzD†ÂÚÚw:îá=ÃD�ûL½FÏéW¡Ÿ^iO¦é©a½“Pv`; #'Û#ë@kàÝCN°½Ó4x´–þdkf’ÞysFJ‡ƒD²©3’ãœf»Ÿ Ø\i¾‚Öæ³°–gK}Á¼ˆÚWhãÈ$|¨Ê¼>^8­yÌ˘`>E‘Ê)>„€p?YŸiñý´¯üIÿ�Æ(^±5kMBóS³DÓtë­:9#–G¸ºd‘$WÈeAÛ€Ãæ\ŸNµ± •¡C:"JG̨å”b@Ïä+:iõåÄnšñ;õV#± Bp}²hŸÒ¼%©é~-–þ;°¶RÝÏu3 ¹ \ 7m¡ÆÅØXb@K€p:Xðg†¯´3íÏjvYZØEövcæ$f%|‡o33½MtV2_ÈŽoí­ `~QÃJ÷%­G{.«Š,,ìç3OvÑ}�¶:�´g‰nÜÈ¢gFuLòUHè /æ*JæR]Yüi¦‹Û+(Sì|Ãvòœoƒ±{ãó>œï^=âA› šlýÙæ1.=r¿•�X¢²Lj³Î•¥ãþÂRñŠÕrÁ  ø;C}Ï8 QYiñý´¯üIÿ�Æ+FÕ®^ÝZîb›ºC)‘GüªŸÒ€&¢³ngÖÒá–×OÓå„}×–ùãcõQ ùš–Æ]RGaggò˜.šRO¸1®?Z�µ$±Â¡¤uE,8$�>¤¹§×=â÷¾M2Ûìvöó}i»Î£ÁûD[q„läõé~•zÞ}q§As§iÑÂOÎñß»°Êa�þb€4訮Zu·vµŽ9fäId(§êÁXÈÖoÚ|Gÿ�@­+ÿ�RñŠ�×¢›s™VBåVȸ?¬¶¸ñv ¥éesÁ:Œ€‘ôò(ZНd÷ 7ÐA»¸X'2®=rQyëÆ* ɵd˜ +)¢Ç-=ãÄÙú›ùÐúdRÇ<)42$‘H¡‘Ѳ¬ ‚:Чg6®óâúÆÆq÷ ¼y[>˜1/gh/{‚4#aoo<¿a·ÊÏ;D ycœ„nzqÆ€: +%.<B]Céz`LüÅu Øy5§)Dæ%V)Ø®ÛA=88ø?J�}‘öŸÿ�Ð+Jÿ�Á”Ÿüb´­šáíÑ®âŠ)ÏÞH¤2(ç³Rxö-—<úêÎâßMÓ¤„‘¤¿tb=Hœ~f¬XɍɿhZÚÁŒlû=ËM»®s˜Ó½ �¹XÞÿ�Q¨ØFãÿ�C5rú]N6OìûKIÔƒ¼Ü]4DØÄoŸÒ³ü*fkÓp‰ÇP¸Þ±¹uyèHü…�nÑE�QE�QE�QE�QE�QUﯭôëF¹¹fX••~DgbY‚¨  ’I `õCþ[ùáªÿ�à¦ëÿ�н‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãt„Á%×çPrp ?êÓ°ëRIâM>=ëZc7ØíLâR"%—ÉgY8ö1·åïYn³¿ö¿ú>§“ݼ;éN¸( 1FAã ñÚ±šÞåü©è©Oæj]¸¼RáÝBnûÁ¤lØ�ƒÔ€wzާo¥Ç —>`IfŠ*…€i$X×'·Ìê?ýUr¸vòçXÒ¬íb¼žÞh¦‚ây[Ãw’,‰*í\‚ªY9±ÁÆAæ·Ç‰,p3¨O|i7_ün€6+2ÇXϪ ´™$Óçò2T³“ rŒsŽ’ר¨×ĺqš™oâi¤XÐͧ\F¥‰À™�÷5›á×ÓN¬ãZÔg—R1ä”@ Ryb0é¶03µ|À”qÉÈRø­aðæ««É¥_BtÁ)¸¶˜"¸òãób¬#Iäã±ÇC\õÏ…^÷Ã7:ƽªI ÈhäŸe²ÈbeÚÑñ\“»²~õn[ÄðÛE“Épè¡Zi†r;  Ÿ`µ�qÓØêÚ†ÖÛJ·²•—[–æCurð€!Ô   ±¾wl#¶3žzV†£áýFëÆ:.­ó5¬Ï,öÒº÷D¾Xn$™ ;¤�sÁÈô½NßKÑŒ—>`Iukˆª¤½x×'·Ìê?ýUªu«¬ Jï{·{GNâ1‚Av�ªgˆÏn´NÎÓPoÏy}¦éÉFñ[]CtÏ7–YNÒ†% »hcó· zÔ—?ò8é¿ö»ÿ�Ñ–õ4å…ί.”’H·±!Ç$FA�²3( ¤ã"¡¹ÿ�‘ÇMÿ�°}ßþŒ·  z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<)ÿ�"v‡ÿ�`ø?ôZÖ½dxSþDíþÁðèµ­z�(¢Š�(¢Š�(¢Š�Ž"·BƱ©vr`f,ÇêI'ñ©+/@ž[:WšFv·h ü«q"¨ü�ð­J�(¢Š�(¢Š�(¢Š�‰­¡k¨î™š4hÑýŠ–‰EüªZËžyWÅ6âF½•˲g‚Êð��ÍùšÔ Š( Š( Š( ®m¡»‰c7¢È’’>d`Êxôeð©k7\¹–ÓOŠH_kµå¬dÿ�²óƬ?ÄV•�QE�QE�QE�…â9åðÿ�‚u+/Ê…´ë e7(ÆJ®3ÓøVí`évVž!ðnŽºÍ¥¾¢²ZA3­ÜK(gòÇÌC3ÉçÞ€(ë~%¾Ó¼K” köXþÅ笪ÆY~ÓpÐ,‚�Ù·qÈ9u­I¯î¢ñ޾3iqcs9]Ÿ0hÞÝG9ÿ�¦­úU¥Ñt¥’Í×L²d»-@¹·\c ÇÊ1Æ)BÒV]Y´«Ô—¥á·C0ãºq×¥�ax3Ä·Úÿ�™öäµì­oâû:°òÒ3>I˯—ÉÎ™D¸G=®qøf ³Óltï;ì6VÖÞt†Y|ˆ•<Ç=Y°9>æŸyek¨ÚIi{m Í´ƒ ñ‡FÏ*x4ʧ‰5I¼á[¸^Ê=CZŽó\!0ÄÍló1*…@Èûî0mÚjúΫ§h‚Y,WÐA=ͤѹ‘Q—+ l  ð Äc"µ°4oì¡¥dXg‘iödòAÎs³ëÏN´\è5åõ½õÖ“a=ݰQòÛ#IÓ•ÚÄepyèhþ[ïøM?³6Zý‡í¿`Ùµ¼íÿ�dûO›œãgðco^sÚ´ü7þ£Pÿ�°Çþ†jÿ�ömööØ­¾Ýåù_iò—ÍÙýÝØÎ=³T<7þ£Pÿ�°Çþ†hfŠ( Š( Š( Š( Š(  ÿ�È.ûYéLU¯Y%ÿ�\?ö²ÿ�Ò˜©<Iu¦Ø[\Z¼kºúÒ ™ÊËqmŽxù]¿PÅ5ýÔ^1±Ó·Æm.,ng+³æ Û¨ç?ôÕ¿JËðg‰oµÿ�3íÉj7ÙZßÅöuaå¤þf"|“—_/’1Ý�u”QXþ+¿ºÒ¼%«êVOÜYÙMp›Óp%#fÀ  Š+'S—WQ²sY< "‹ˆ&¼Ãì3«†Âí€Tî<dVOü$·ßðšflµûÛ~Á³kyÛþÉöŸ79ÆÏàÆÞ¼çµ�iø“ýFŸÿ�aý UØ5;{RëNO0\[E²B£k³ªO^cËÞ©x“ýFŸÿ�aý T0èWÇÄzž£w¨[Éi}h–Ÿg†Ùá‘B§Íž|à£øHÆ9�ѶÕì¯EçÙdyœÿ�g˜,m•“j¶ü®§##žµ&›«¥Új6¬ZÚîž"ã(a‘Û‚+EðÕÞe«Åc¨£O{xna’ê9g®Èã Ûå/! ]ã“À�Wü7¥O¡xoNÒn.£ºk+t·Y£„ÄPm\©fç�gžNzt  ¤jׇ…µŽ¡kf#Ö'¸vžÑ§ÜÑ_4¨$L È3× ñ޵%ïb»ñHÖ–âf¹†êRm·N0«ˆåÝò#PË´äg‘š—DÔîà³¹Š=P¹EÔ/1,O�Vÿ�I“¦éAüÀ­/í›ïúµ_ûùkÿ�ǨÖv:¤ZÅÍÕåõ”öÎCvl’Æ C+09®NÅ6çþG7þÁ÷ú2Þí›ïúµ_ûùkÿ�ǪúûÄÖ—ré7vpAgq=ÃÂrÎð�IôF  ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<)ÿ�"v‡ÿ�`ø?ôZÖ½dxSþDíþÁðèµ­z�(¢Š�(¢Š�(¢Š�©§X>ÙáW.y¦Éÿ�Y#IÃv? ·T´»æÔ-$™£VâxpxŽWŒÇn»@Q@Q@Q@ä±ó5‹mCÌÇ‘o,6ýííg>Þ_ëíW*¤—Â=bÛOòòg·–mùé±£\cßÌý*Ý�QE�QE�QE�QÕ¬ŸP³ŽÙT­Í¼Ä·¤s#‘ø…"¯UMJøiö©1ÌÝq 8Î1æJ±çðݟ­ÐEPEPEP\ýôÓøKÀ2K GrúNšX‡b¡ü¨‰ì]¿­tŠö¶^1ðµ·ÛáœZ_Û¤¯W2E•tå©eÃAàúPox¡ü;³Ë°û^Û[‹éó7—²Þ ža^æýâáxÏ<Š·{«ÞXëö6oci÷d§ÚÄä4rm$B›pH 0ù%¾î2io¼1¤êvÖ^ÛÉ:Z®ÈÌ—*q•vÝ—SĆÀÎj[Ý OÔoíï.ãšY-Ýd‰âO)]NU¼½Û È$dPv“â‡ÔõÙ4ö°ò`oµ}š;q—ìÓ,2î\ Ÿ; rr9ã¥tM¸#�¶8àõ¬Û?éš~©q©[[lº¸Ý½¼Æ`7͵IÚ›˜v’2rkBX–h^'.Ô©(åèÀ‚¸9 dx¦ñ´«Y`Ó¢ŸPºÔî´è`3˜ã- Î ÚH cÐò@÷¦k>ÓtŸ[ø‰Úk»/¶ZZ\ܬ-7îÃìç-‚�<‘WSÁš$zSi¢¦¶7 t7ßNÒ,­Ì²Þ¤îlàŒîlýã›÷º ¾‰<iÏ€Á îÆÌ¡.Ï# ðh3þ‡ÿ�„«û'ìè¿jûÚ¼ï›ígûN6cîùÅ»¯ïV¼7þ£Pÿ�°Çþ†joøGôÏíÏퟳ§Ìm¹Û³vÌíÝ·åÝŒãŒâ¡ðßúCþÂ7ú  š(¢€ (¢€ (¢€ (¢€ (¢€2<Kÿ� ¸ì!eÿ�¥1UOCÒu¥u].Êýb$Æ.­ÒP„õÆàqÐUÿ�È.ûYéLU>¯ª"Þ žÞIR[˜-ÉRÓ,©“ŸwŽÀÐ�t-ꫪ*Äê*0·fÝ<à1·‡Æzq×¥Mg¦ØéÞwØl­­¼é ²ù*yŽz³`r}ÍU¹××_³Òe²ºÍào&äl1U,T€ÛÇ©]¼œœTw‰ìõ-fm6(.Q“Îòæ‘TG?“ Ž]„~W`§ uã#š�ÛªšŽ—§êößfÔì-omÃò®aYpèpÀŒòjÝ2S ŒùAKö p(9¼5 ¼ö“¾‰¦´ÖJ‰k!´BÐ*œ¨CŒ¨‘Œb­fØÿ�hÿ�hýŠÛíÞ_•öŸ)|ÝŸÝÝŒãÛ5Ì_xþÓKðˆï>ÉÕæœ·ÙËt±y­å‡(ŒÜ“Î$‘Ç5{þ‡ÿ�„«û'ìè¿jûÚ¼ï›ígûN6cîùÅ»¯ï@¼Iþ£Oÿ�°¿þ†)í¯ÛÁ¨j–×hÖñéÖ‘ÞK;WËc(Ïéä±úLñ'ú?þÂ6ÿ�ú¨›Â°Íªj——š…íÜZ•¯Øç´˜D"òrm@Üy’ –$îç8�©Žl.ü-©ëÖ¶ÒÉž’<°ù±¢$…s·¡[ ž u®¦¹I| o6—¨Ù>±ªgPmn.‘æ5º«¨ˆ~ëh\HÜíÝÏÞ®šÞ'†Ú(¤žK‡E ÓH3‘Üí�dû�=¨7Ã_ò ›þ¿úS-kÖG†¿ä7ý„/ô¦Z× Š( Š( Š( Š( Š( Š( Š( Š( Š(  È¡ÿ�Ø>ýµ¯Yÿ�‘;Cÿ�°|ú-k^€ (¢€ (¢€ (¢€34%¶Ó¥I£(ÆöíÀ?Ýk‰Oâ?iÔV×0ÝÄÒ@ûÑdxÉÁ21Vú2‘øT´�QE�QE�QE™=¼­â‹ „ÕÌlýƒ3ÀT~![ò­:‰®a[¨íYÀšDi=UJ†?uüêZ�(¢Š�(¢Š�(¢Š�Ëñ2ϧB‘FÎÂöÑÈQ“µn#f?@'ØV¥G4ñ[ y¤XÔº ,p 3Qõ$øÔ”�QE�QE�QE�W)q>¡áÿ�…Fæ°ßiÚ7˜VTÝ‡Ž í#>¢ººÏžÏIñ— »´µÔlf 4kq È‘•m¬=ë@~3ñ-öåý…-NË+«ù~Ь|ăËÌI‚0íæpNq·¡¢ó]Ö´¿õ xÓAšæ+ki£Y™T.çóÃæ€{é4]*[k[i4Ë'‚Ы[DÐ)XJð¥0¸íŽ”>‹¥Iª.¨úe›j0·m™Tc>3ÓŽ´ƒàÏßkþgÛ’Ôo²µ¿‹ìêÃËIüÌDù'.¾_$c;º êÛqF@lpHÈéU¬ôÛ;Îû •µ·!–_"%O1ÏVlO¹©åŠ;ˆ^£I"‘Jº:‚¬§‚=E�rð‘ê§F³ò¤²KÛ½bóO[‹˜ÉŠ5…î0Ì¡$¬zŽ[>ÕŸuñù"ÒîãÓŒvM¥Á«j2ybSRg* ºtÚÙ#q_×[†4té4è´=1,eq$–Ëi‰Û˜®0OŸaVn´2ùížïN´¸{VÝnÓ@®a>©‘òžOJ�çÿ�á%¾ÿ�„Óû3e¯Ø~Ûö ›[ÎßöO´ù¹Î66õç=«OÃê5ûÜèf¯ÿ�fØÿ�hÿ�hýŠÛíÞ_•öŸ)|ÝŸÝÝŒãÛ5CÃê5ûÜèf€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Èñ/ü‚áÿ�°…—þ”ÅF¿¡~Ús©ÞؤSG?ú(‹.èêèO˜Ñ1žùQâ_ùÃÿ�a /ý)ŠŸ®êsi6–÷CŠ÷–Ö﹈ K<qdqÎ7“ø{Ðujw¶“Ϩވm¥I–Ö3Æî‡*ÌvoëØ0¸¨´ï YéºÌÚ”SÜ»?åÃ#)Ž:A$»��üΡŽIéÆN_\Zø­ô»Í4[XRo¤3bfdR¸Ä>X˶ÌA%OI¤ø¡õ=vM=¬<˜í_fŸÎÜeû4Ë »—gÎÜŽxé@Ayiõ¤–Ó4˃Á3ÂãœðèCÀÔõâ»û­+ÂZ¾¥dñ­Å”× ½7R6`1‘Ü �…´‘ásá¿&ãû(Åäù?k›w—ýÍû·íÇÎ1òôâ¥ÿ�„LþÜþÙû7úw÷üÆÛ»7lÎÝÛ~]ØÎ8Î+'ÅÞ!Ôô‹>ËI²7K4¬ìÂ$awaL‘‚Çx8.8Vêxªzw'Õ<Ch–¢Øé7S¥´JÈÂsºÌ]‰IÎàìÛ·9ç=¨_Åo*XY4 e…¹T-´1Þ8Î*_·ëÿ�ô·ÿ�Àñÿ�ÄQâOõý„mÿ�ô1[4öýþ€Vÿ�ø?øŠ>߯ÿ�Ð ßÿ�Çÿ�[4Pfksi¥¼#în&dGÞI3¸ÀÏ +NŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(œÒbñ—£Xéÿ�ÙÚTŸe·Žÿ�Ú2 ÛT.qäqœUÏ´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½Îi°øNµx?³´©7\M>´dó%i1þ£¶ì{â®}§Äô Ò¿ðe'ÿ�­z(#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ×¢€2>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿübµè rH¼G&±m¨giCÈ·–ŸÚ2s½£lçÈíåþµsí>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�szœ^$Ô-§iI¶â ³ý£!ÿ�W*Éõöãñ«¿iñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ×¢€2>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿübµè  ´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�­z(#í>#ÿ� V•ÿ�ƒ)?øÅSÒ¢ñ™£Ùiÿ�ÙÚTŸe·Žÿ�Ú2 ÛT.qäqÒº:(#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ×¢€2>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿübµè  ´øþZWþ ¤ÿ�ãý ÊîÊÎqz°¬ó\Ë9Xd.ª‰qU'aZ”PEPEPEPEPEPG‰äý„,¿ô¦*“YÐ,5øb‹PF8œH«äÐ|À†R|¶\Tž„db§ÔôõÕ,M«O,¼ŽU–»•‘ÕÔÀŽª:ƒU?±¯¿èeÕïݯÿ� ÜøN¼Ô`¾¹K‰e•ãGº”Ĭ¿u¼­Û7 íÎyëKgáý3OÕ.5+km—W··˜Ìã¹¶©;Ss�NÐ2FNMGý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ½TÔt½?W¶û6§ak{n7•s È»‡C†g“Tÿ�±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš�±q¡éz|:}Ηe5”;|«i-Ñ£hÀÚ¤``tÅJ4ËÔ ¶6ÂôGå ù?»»Ç·J¥ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ|Iþ£Oÿ�°¿þ†+f±ÃóO-»]kº•ÂA2L"u· ̧#;bô"¶è�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢ŠFeE,Ä*’IÀ€<þ/kPx–ïG¹Ô4K›¨u­ÆÞÚD¸x¤Ž'óðeo•‡9�|Àñ[6ž4°ƒÂš&­¬Ëöy5 îÝa‚IDgc´1TRã,Ü Œš¡¢êv:|ºÕÅÇ<?s.¥8¹‰£ Ââ%Œdyͽqq‘ѹäcìm%𿇤ø…¡H´ÇÓX“ ¥$˜ó¸p3’Nžh·ƒÅÚ%ÍòÙÇw'šòK³ÛÊ‘™"Ýæ&ò¡w.Æ%sœzU+Änµ$ÑØÎï$*®é$/mlípÊppà àà×¶Z|¶Öv—¾;Ð%¶†þîòE…6“í (e gm¸ûD¸8?Ãès§áAá Å"¦»á}ì«™e¬ê:s½½Æ'@-®¥s/е-.U‹È·´¶¸‰”Ù‘æRçýH#�u=kZ¸»=OMƒÅ·úÄÞ1Ðe¶º·ŠÝm”¢º,lì§ÌóH'2¾~Qž:cßøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+x³ÃddxƒJ=¸½üiá+ðçýô¯ü üh^ŠÈÿ�„¯ÃŸôÒ¿ð2?ñ£þ¿ÐJÿ�ÀÈÿ�Æ€5è¬øJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü üh^ŠÈÿ�„¯ÃŸôÒ¿ð2?ñ£þ¿ÐJÿ�ÀÈÿ�Æ€5è¬øK<7?á Ò²yÇÛcÿ�_øJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+þÏÐÁ¥àdãKÿ� _‡?è?¥àdã@ôVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯EdÂWáÏúé_øøÑÿ� _‡?è?¥àdã@ôVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯EdÂWáÏúé_øøÒxpŒiD×äã@VGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯EdÂWáÏúé_øøÑÿ� _‡?è?¥àdã@ôVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯EdÂWáÏúé_øøÕû;ë=FÜ\XÝÁu %|È$¹FGbŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «êò ºÿ�®/üXªú‡üƒn¿ë‹ÿ�#@´ùô¿úô‹ÿ�@£Yºãá4!¾Ç �ì« }{SO‡ºÞ°’Â/l¥±ŒYVòÌ©Æ}#\þ4×ÑXú½ýÕ–± ÃÇä^Þµ¼ªS'Þy2xæ5íë[�QEsöZŽ£r|E¹¶Il/V&x ESo‡r†¹‘¿ˆv ‚ŠæuMK[Ó¾jZ¥Àµ‡U³³¸œùhZ6(®P€NF@RA'#žµÓP "ÊK )!•‘™®®&O’gqøá†}êýU°¾MBÝæBÏ,8n¹ŽFŒŸ¡*Msözż¾&ÔâŶ³ÛÛÁ!¸²i ó-XÃh FCoÏ$r9ÕQ\—†|Gc}áKËûzÙ­íïîâ{ß´G¶8Åˈòßtf?/¸ Ž Õÿ�êgYð>‡~÷iu4Ö0™åV ™v ùÇpÙv9½EÍKªD|sŸ‰í„ ?H‘¡ÜÃË, 7tc’FÜñÞ€:Z+•³Ö-åñ6§~-µžÞÞ Å“I™hÊÀ@`ª2~y#‘È©ü¬Å­èSÏ£ùP¼‹ÍŽU|"ÜIå‚Wþ™ì#Ô{ФÖr>¿g| ùPÚÏ ùvˆýjýV{ÔS‚Ä«y“C$Ê{�Œ€ÿ�èÁùUš�(¢Š�(¢Š�(¢Š�ÎÖ­%½°Š(T3­Ý´¤•'Gcù)­¯yyŒ 4Û¶´±Â6ŒüÎê‹ú°«�QE�QE�QE�U ÎM;@Ólf*e¶µŠ+Ó* ~U~«i÷±êZm­ü*ëÌ)2`¬Ç~hÍQ@Q@Q@sþÿ�-Kþ·Ÿú9« ®Â?ñ婨Vóÿ�G5�tQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�_Pÿ�m×ýqäjÅWÔ?äuÿ�\_ù�§¢ÅÇ…tèf$ŠK(ÕÑÔe(¢˜<)áÅÓÛO”,šO5­…œ~Y|cq\cv8ÏZ—BÜ<3¦”�·ØâÀ'�ƒ½C¥ê·šž‡qw´î;›«t‰¥*ŒažH†X) ™û§é@Iá­Ym%“DÓ^K%UµfµB`U9P‡(¦1ŠÔ®`x¢ìø~×Rm>8fkøl®mÚbÆ"÷)GÊGÞ78# gŽž€ ÈžŠÞêÞ=JH.öý¢5³Œ,ÛNFñŒ6#=ë^±ÓZ1뺥•âõœ7~~þ6»Lì€9ü}¨Wðæ‡&•”ú6œÚtMº;FµC 6IÈL`’zw5zÞÞ Kh­­¡Ž"P‘Å…TQÀ��•Ê-ç…üI­i±Z\Å£´».„‰:¥ºÍÊ0Ï´Œœyí]…�døqY4Ƀ)SöûÂ1Á¹Òµ©‘ËÊZ7WPÅIS‘H#ê ûŠÌµ—W:õÄs5”Ú_–J4Q²I™F%ˆ|©' .0hZŠçìµSþ ýþâÈ?”·/%¢ÜCîRí¹A»+’ÇåÀæ×…õ õo hÚ•Öß´]ØÁ<»FçXàv4­E“©Ë«Ç¨Ù 9¬ž‘EÄFÞavÕÃavŽ@*w2(ZŠæàñ$·>9]8$Kagq+´Ö“FL‘É ‚ŽÀ#©7ÝÏ@r3ÍÍþêîÿ�]·ºxßì7ËeoÊmᓞOñH߆(nÿ�Â_¦¶…Ø'þÚ[Ö½!u°ÜA!sÉ?¨üéh�¢Š(�¢Š(�¢Š(#Ä¿ò ‡þÂ_úSkÑE�QE�QE�QE�‘á@Gƒô@FØ ÿ�ÑkZôÔu‘у#�U”äê(ÔQE�QE�QE�ÏøGþ<µ/û Þèæ®‚¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÔÐQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�U}CþA·_õÅÿ�‘«_Pÿ�m×ýqähž‹Íá]:'.ì£RQÊ0F}ÁÍo‡´ý'NžÂÏíio4#zGÜç,C³–RI$àŽI=I4í qðΚ€ßc‹Œ€vÕ€uÜøq.t¨-îoT»¶Ÿ0«b¦ž5*†Xl¤c—Iæ€4%ðN…-ŠÙ´W‚?ÚX¦£p$ ©î3°(¤'F1]��zz×-/‰'¸ð®«ÙH Ë}mk2É2Zé �Œ¾0[¶ žª€ ̵ðý…žµs«Ä.¾Ûr‚9ZKÉ ‚HŠ€ 607c&´ëš_¹´´ñ]ÍÚ‹‘£LÞZB›K µŠb½ù,ìá@®|'£ÞXêSEt`Ôgk‹°·³©™™X8;6€»3·� Vµ¼ km™#PŠd‘¤b«1%¹$šá×ÅÚÃxCÄ77 ¶±¦XµòÇöqåùf7hðD­»&6äí8ꃭw´‘á¯ùÍÿ�a ßý)–§µÐ´‹F}FÓJ±·¾Ÿwsº$’n9;˜ œ ÏqVí­¡´‰£6#Hò’~gbÌyõf'ñ¬ëYus¯\G3YM¥ùd£E$‘I‘„bX‡Ê’rã�`æ€|9¡»S¢éÅo?ãäTÄüççãæçžjÝŽŸe¥Ú%¦Ÿioil™Û ¼b4\œœ(�I5Ìøs\×®nÛIñ QZjÏl.cX­”FY0DòÃ0�°Cßœlx_PŸVð–©]mûE݌˴`nxÕŽa“@ÕŸw¡iú„…æ•cq{o·É¹šÝHöÃk‘ƒÈÇzЮk]Õ"¶ñ—g‰í´û©$Œý‚v‡1—Áa¼±åWiê9€7~Ágý£ý£öH>ÝåyiòÇ™åçvÍÝvçœtÍA§hZFŽó>™¥XÙ<øóZÚÝ#2c8Ý´ õ=}Mqº‹5ã[Û-Næ(m¼Û˜VÝ&Œ5œQ‚Ëq"Ü•_n\ ½ë{Á:ÌZÞ…<ñê1_˜õ ȼØåWÂ-ÄžX%éžÂ=A½�\¹ÿ�‘ÇMÿ�°}ßþŒ·­z‰­¡{¸î™3<q¼hù<+,?‹ùT´�QE�QE�QE‘âBF—?Óì¿ô¦*ר.í"¾…b˜‹,rŒ|Èá×õQSÐEPEPEPYÿ�‘;Cÿ�°|ú-k^ ²´†ÂÆÞÎÝJÁoÅ'$*ŒO^�OEPEPEP\ÿ�„ãËRÿ�°­çþŽjè+Ÿðüyj_ö¼ÿ�ÑÍ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@WÔ?äuÿ�\_ù±UõùÝ×þF€1<=«èšŽƒ§i«¨é÷RÉf‘½¨˜ycr”Ï<g#-΋á-+G{[­3D³Ó$”;Å,G IŒAK`}x«ºü‹z_ýzEÿ�  Ñ VîãÀ…­½­äÞ¹·¶‚)šH‡L(</AÓÒº’U' ª>€ Z(þÏù˜4¯ü üit=?öñKw YéqÇrq$ÖF¤Õ|Ø$þfµè ^îßÀ–pˤ^ÃáÈ"óÒY̰(ÞG Pÿ�R3ƒZÚN£¢OÙh÷š|‘Á œ¨Dh8�*ž�àV•…c¯Z[ií.­©ZÛ3^]Ÿ™cÜ©;¨$g�(¨4ûC«½Ö›7‡ÓS»b¯5³B&˜³A+ó1-ƒîk[I²}>ÎHdeb×7¾’Lîà ½@³h^ÓìoZ}+H¶´¸�Ý—·#“3#ŸZ†Ç\ð~—h–š~©¡Ú[&vÃoq h¹98P@’k ¢€±Ï M ‰$R(dtl«È Ž¢³dñG‡â‘ã“]ÓÑŠ²µÜ`©Fx5«E�U±Ô¬58ÚK Ûk´FÚÍ« ® ­E{­é:lÂýRÊÖV]Á'¸Db:gôàþU~Š�çâñ.Ÿ{â‹+ ZÊæ9-.$xá™—V‹oCžŒü}}+b÷P²Óa_]Ákm¡ç"“é’zðjlžMvÒü2ˆá¶š½Évˆƒÿ�Ïæ*õ�døtœ K'þ¿#ÿ�Õ’DŠ6’GTff8 RM:Š�Èÿ�„¯ÃŸôÒ¿ð2?ñ­[»këd¹´¸ŠâÎÙbpêØ88#ƒÈ"¦¢€3.|E¡ÙÜ=½Ö³§Á:<rÝ"²ž¼‚r*k_LÔÙ×OÔm.Ú0 ‹yÖB ôÎ ÇJ»E�bø—\¶Ðì­Þ[ëkY%ºÏ‘Wr‘dÆzáXäöëSAâM æt‚ßZÓ¥šCµ#Žé˜ú�5.¯g%ý”pÄT2Ý[ÌséÈçôSWè+›˜,íÞâêxà…^I\*¯Ôžfÿ�ÂWáÏúé_øøÖ½�È¥Žx’XdÔ2:†Aî+1üQáèÝ‘õÝ1]NZî0Aô<Öµ^ËP²Ô¡3XÝÁum¥à:ƒézò* ÍwHÓ§ò/µ[Y±»Ëžá±ë‚zUú(…ž¹¤ê3luK+©@ÉH.Û¸ªéºÔ ám/SÕ¯míÍÍ´.òÌë—d qœ^+f±bš/ x6ݵfM±Q;Â…Æ#æ#Ž˜SÖ€$_øyÝQ5í-™Ž�‘’OçZ’H‘FÒHê‘ ,ÌÇ@êI¬ëÏiš~©o¦ÜÜ캸۱|¶`7«¹€Ú›˜7’02jvÔí×X‹K>`¹–'L¡ U ç§Tüý¨§ü%~ÿ� þ•ÿ�‘ÿ�i[\Áyn—³Ç<.2’Dᕾ„pj NßQ’ò8<Àös%…HcH8?ìȧñ«2È"Œ¹V`;*–'ð?‰4+iÞ kNŠhÎ׎K¤VSèA<U›WNÔÃ>þÖìGÿ�g™dÛž™Á8èj“øŸJ‹A²Ö¤šAgz‘½¾Ø]Þ@ë½@E‰Û’@�Oj|Þ$Ò {%Ël¿Ùöi–hŸ<À»T±#�‘œñ@/µ/LuKýJÎÑÜeVyÖ2ÃÔdÖOƒ&ŠãL¿šH¤ÔîÙ2°36#¨­x5;{RëNO0\[E²B£k³ªO^cËÞ²ü#ÿ�Z—ý…o?ôsPAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUõùÝ×þF¬U}CþA·_õÅÿ�‘  Úü‹z_ýzEÿ�  ѬíþE½/þ½"ÿ�ÐhÐEPEPEPM:øjÏ2¡@³Í Ïú¹<þ;søÕºËðü2C¦Ì’Æñ±¾»p`•k‰?B#ØÖ¥�QE�QE�QE�T’øG«ÛXl$ϳÏMÆ=üÏÒ­ÖUÄn|[§HŠ-Ò–Ç�™-ð õ8?‘­Z�(¢Š�(¢Š�(¢Š�­}z–é4ŠÌ­4P€=d‘P~¬*ÍdxKip…Ÿ·Ùž?ëæ*× Š( Š( Š( ¹ÝNÞçÆ0ÙÜÅ`5k,HÓ@gÙ±ò�Ÿ6ƒœqÐ×EX:-ÜG´©õE¬pið™Lß.ͱÙП¡  ×ÞºÔ5[kéõ8ÆVÐ^Ç©f¶™¦Œ¡.Lc{ƒ»##­\›HÔeñ}¦°5 U´¶·–ÜZý‘Œ…d1³3ÌÆwD¸ù:9àÍJÇNò~Ý{mmçH"‹Ï•SÌsÑW'“ì)«§.¦4Ãj5O0Z™—Í)ýí™Î=ñ@ú‘¨é—ÚµÍö¡kuý¡p·`´h|¶$XÉ‘ò6ÆžœçÔ©x—Oi"ÙM 7$|’O•纆Rï¡I ý¬÷“ÚEqÜ@ªÒƧ%�Ÿ©FðS³*#;°UQ’IÀ€9h<'}oá}M‹VoôBŸf»ûØÁbxFèüÌ“å¹èÞzqVmô ý>ÆÇP´fo ›6–I<¼ ÁĪíVÁçž•¤ú敚ڌº¬VK#F×Ê+ ±ÀÈ`GÔU‹‹Û[;7¼¹¹† T]ï<²E_RÇ€(.ËHÔ`ñ]þ¯q¨ZËouoºÛÇhÈè±¼Œ„¹‚zàü£<c9‹Â?ñ婨Vóÿ�G5l}¾×ûAl>ÑÚÚ6EŸ›j•þ×þúáøòÔ¿ì+yÿ�£š€: (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯¨È6ëþ¸¿ò5b«êò ºÿ�®/ü�VÐ?ä[Òÿ�ëÒ/ý�Vghò-éõéþ€+F€ (¢€ (¢€ (¢€±Ì¥¢‘$P̤«deI}AqO¬ È.oû^ÿ�éLµ¯@Q@Q@Q@ 2Æ%X‹¨‘”²¡<0 Ðd~bŸY?ò8é¿ö»ÿ�Ñ–õ¯@Q@Q@Q@Ψ2ìd “ŽIÀ-dx—þApÿ�ØBËÿ�Jb­z�(¢Š�(¢Š�(¢Š�+ Å6—šïƒïìtqg3ê6²@²OpR0’!]àª6ìd03ê+v¹½'S·Ñ¾iºß™ö{m.)d1¡bb N°4OÅ^Õ|EmnÑ­ŒSɧܨ\¤’³,"/t‘¶Ì³'—À!sž¢´u;S¾Ö´©ía²Hlç›™fs"‚ º¬[vå²î-‘“Å\¼ñ™§ê–úmÍÎË«»ËfqÚ»˜ ©¹q#&ˆµû õ©ô˜ÓÝ[°IJÙÌbF(¯´Ë·Ëk)Æìò(Ž®ž3Ôµ+›{°¸´†Ú&ŽéÞ_Ý<¬ !Œ¸Lx q·¾xܔȰ¹…å J+±U-ØÀ÷Áú­a©Ûê2^G˜Îa¡Ð© cIý™þ5fYQ—*ÌeRÄþ€8¨|;¯ÔKo¥}ºÏX¹Ô#€ÝHðʳÎÖo(WíøNv™áÚçƒu¿‡6þÓõFK«}8Y|Å)ÿ�v#&BÑÈÀc'åÁçFóøŸJ‹A²Ö¤šAgz‘½¾Ø]Þ@ë½@E‰Û’@�Oj‘üE¥$ö­ÑšKôY-ÖžRÈq‡;Úœ˜à{ÐK‹^_Xê+ocý›mi=±stþqóLMž^Þ 8ÆþCgŒ`§„ãËRÿ�°­çþŽjÔmNÝuˆ´³æ ™a’tÊ¥P nzpeOÏÚ²ü#ÿ�Z—ý…o?ôsPAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUõùÝ×þF¬UmCþA·_õÅÿ�‘  úü‹z_ýzEÿ�  Ñ®cCñG‡âðþ›šî˜Ž¶±++]Æ!A­øJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  8-â¶ŒÇ Rí!ûÌŘþ$“øÔ•Ëèž-ÑZÂSu¯éþgÚî@ó.Ђw ÔôÛ·Ø­øJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  &¶…îã»dÌñÆñ£äð¬T°üJ/åR×/7‹tQâK%_iße6—L^&ÍááÛžzà¾?Ñÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��Ò¸¶†î!é½D ‘ó#Sø2ƒøTµÌk1Ñ ²í5ý3Í7VèÛn£c±¦E~3Óin{u­øJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  zÃ×t 5Ïáý2æfµ6{å§Ù B„(Þ§vÁ$ôä—þ¿ÐJÿ�ÀÈÿ�Ƴô/è³x{L–÷_Ó~Öö‘4ÛîãVÞPnÈÏ9†ï Ýj­µôúœc+h/cŽÔ3[LÓFP—&1½ŽAÝ‘‘ÖSÂ#Sñ®©»N€A4s"°ÅÛ”ÇÊgß÷�#o+ÆkCþ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��AÒ52ûV¹¾Ô-n¿´.ãl–Â$‹2>FØÓÓœú€5/éí$[)¡†ä’Iâ2¢œ÷PÊOýô+?þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��̃ÂwÖþÐtصhÿ�D)ök¿±Œ'„nÌÉ>[žŒ9ç§Ÿ¨ü4´»¶±‚ ¨Ñm´øtã$öÞl‹YØñ6áåJ77φëÓŠèÿ�á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ æÒ5|_i¬ BÕm-­å·¿dc!Y lÇÌó1Ñ.>N„Žx"/ÿ�Ç–¥ÿ�a[ÏýÕgþ¿ÐJÿ�ÀÈÿ�Æ©ø2Xî4Ëù¡‘$ŠMNíÑÐåYLÍ‚ê(£¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢¹ëohWWoj“]¤©7ÞvŸq‰ps È …ÎNF:ŠÚ±½·Ô´ûkëI<Ûk˜–hd�ÈÀ8<òë@ÑE�QYSø“JµÕ#Ó¦¸tžIJÆ <¿0€B6ìr>RsÈâµh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(€Ò­#Õõÿ�ê7M®Ec£ äVRؼ1Nc‚²�щ‰!8PØùTíägkA¾h¶V–~&¶Ô¬ô6X…½µÄ@]GG ' ãwÈA<1À¦‰g©êZ}7‰5!-ͬS8H­‚†eã÷=9«ÿ�Ø×ßô2ê¿÷î×ÿ�ŒÐ­Þê¯&µ{¦/‰Müzµ¯öl_g»X %!ó2›v”ÈŸ;Œc#;Þ�ƒVŒ]M¨ê:…À’8ÃAwe<L£;È3H峑÷?wòñŒÖÿ�ö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@5Kû+VßI–ÏQ)Ôs7—¦ÎÑÉ `éûОXðÅ·WµÓVGö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@ôVGö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@ôW3£ÙêwöRM/‰50ËuqÛ°c™Ñå\(Ͻ_þƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è®fk=N=~ÎÄx“Rò¦µžf&+mÛ‘â¹é‰?…_þƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è®gV´Ô´û8æÄz›3\ÛÂCEmŒI2!?êzáŽ=êÿ�ö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3T4KMORÐtëù¼G©,·6±Lá"¶ ('‡§4ÓQYØ×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍ�kÑYØ×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍ�kÑYØ×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍ�kÑYØ×ßô2ê¿÷î×ÿ�ŒÑáÙîf³¹[«©.^É¡Ȩ¬UX žÔ¯EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7…™SÁz+»UÓà$“€–µiõ½2=2MIïa[(Œæ-ò©Œ°È«gèj§†L‹àˆò6ŠìUKyc�¾ÐÖè>#“áþ³¢m)ou /B‘}!åä}żœ–S&1Œg#8�eî©§é†kkç>ȼù–?1½'“ì*Ý`k–Ú¾£¥ÁlºN•t³ÆVúÞæõÑ0@ù„,YIÎIU<^7è�ªº½­à¿òüÑö|©ÃDÀ†òÒN2~WSÓ½_®Iѵ}>]nyµK)§ÔeÆÑز,2’!emëˆÐã+Îîy�<U¤É¦M¨G%Óæ•l¦2ÆàCE³xàƒÊô ô­;[¨/¬à»µ•e·ž5–)ä:°È#؃X£J××G6Ë«i‚õ§Þ÷N“c¦0U“ÏÜX‘÷·ôãëjÖ9!³‚)LM"FªÆü´$v®NÑè2qêhPŒ��Îx¬ø5Ë ^])$‘obC!ŽH$Œ2‚dfP@%IÆECá²N—6Oü¿Þÿ�éL´ë;R-bæêòúÊ{g !Ž;6IcŒ!•áW'Œb€»e$:„Š.°”C:­»³î(Ž�@ 7Ë"ôê}7R´Õì#¾±—Í·“pVÚTä¬ AFA±l´-vÍuɳ`nµ)Òá$]9ÕaaFr¾q, F½×“ÈÀZe½Å®Ÿ7rÛË:ç{Û@aFÉ'…,Äuç,rr{â€-Öf¥¬ÿ�f]ÚC&Ÿ{47$FæVH™›jî·c=Â:œ Ó¬ËÍ*k­VÚú=^úÙ!�h–œäîß0ÈàíaÇLh©­“«Ï§>™‘ÂÓE#*çU „1ÁË ÚOQÀ5.‘« ZÜÙ]ÙËÆaºU �x*̬0ÃHíÔPE¢ÜEw?öî¢Âí\,e-öÀOFB"Ý• Ҩ5gIÓ¥ÒìþÏ.£uóed¹X•”`|¿»DàžFy<ÐÃBŠdPT69�ã#>ø§VEÃøKôÕÉÁ°»$ÛKz× Š( Š( Š( Is(YcI2° ¹R?P@#ÜSë+Ä2¼Zl-²±¾³RAÇâ0Gâ «@Q@Q@Q@68Ò(Ö8ÑR4UT`(�êÈð«ð†ŠÌI&ÂIïûµ  z(¢€ (¢€ (¢€ ÆðßúCþÂ7ú­šÆðßúCþÂ7ú  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<)ÿ�"v‡ÿ�`ø?ôZÖªH’®èÝ]rFTädÖ±|8qà] ù&ø–Ãû¥ÆdýÐùFâ=9 UYÎ<)gªh {ËÉ>Ã9‚O:9g’UÉ÷\ŽAí‚@:ª+ÎWB—þx4«Ï]Ü[%ÌÆÕ"šÛí‘6Lª±¾æ`¾Y!BŽ+Ѩ�ªðßÚÏy=¤W½Ä ­,jrP1` ú”aÿ�5b¹È4ÝeüY«^Ζ¶ÖWvQZC5½Ó<ècyˆ}POœxË`¨ûÙàaõ]:;{©ÞþÕa´r—2”,,�$9Îàƒƒê=jkk«{Ûhîm'Šx$’Xœ2°õpEs&‡­èZv»²KkëÛ»ÿ�>Õ®g1Qƒ#$ +b2p¨GA“ËVæ‰hö:LPKgmg&çw†ÚS,a™Ë¢I;Ê9'ë@,¬¢°¡ˆ±VšYŽã“ºGgoÃ,qíLþÔÓÿ�´ÿ�³~ßköý›þËç/›·×fs|TZ=ä·Ö2M6ÝËusÚ06¤Î‹øáET–ÓP¸ñ4M¦éϧÛð\›¦óãsRÂ?+9+÷þéÏ^(Òkú4°]Ï­`ðÙ±[©å ÀèsŸ”ýjåµÕ½í´w6“Å< É,NXz‚8"¹¶Ó¼A·©êv¶šR4ð$IÝÈÆfWÊ;¹‹÷aU¤Â¨`Kuï[:%£Øé1A-µœ›ÞiL±†g,HbˆI$î?(䟭�hVuþ¹a¦^ZÚÞI$R\ºÇyË1©.Õ$ð#'¥hÖUýŽ©sªZÍo}d–12[ÏfÒ;Ù%\J¡N1Œ«`óÏJ�µs©ÙÙßYYO6Û‹×hàM¤î`Œäd •óŒàÔ:n¹a«\][ÚI'ŸjWΊX$‰”6vœ:‚Tí8aÁÁÁªÞK¿ézäwrÆm%ye¤•ÒRah—j™<´Àv$„$úŽsoG±Õ-áõKë+·¯mfÐ0ÆxbÒ¾G#�cõÍ�\{(äÔ ¿,þl0É €~R®PœûþíZ³T%½’=zÒÀ*ySZÏ3>`Q¢ß¼?«ô�QE�QE�QESQ±…²BÎP,ðÍ3þ®E“ŽÜ~5n©j·Í§ÚG2 r×0C‚{I*FOà?…] Š( Š( Š( ªé¶)¦iv–»:ZÀ«7R@ûñVªŽ‹{&¥ é×òª¬—6ÑÌêeíÍ�^¢Š(�¢Š(�¢Š(�¬o ÿ�¨Ô?ì#qÿ�¡šÙ¬o ÿ�¨Ô?ì#qÿ�¡š�Ù¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÂÌ©à½Ý‚ªéðIÀËZšh¶ºzßÝjÖVÖm+@³Ï:ƆE,¬™bAFÿ�dÔ2/‚4s #Ê4ØJ+±U-åŒ@8ø?CX¶þÕ[Ãmm§ØÉ}¥s{n-õià çI+äL‘VfNç#8�5Ƶ¥ZCm5Χg WD w’uQ1<„Ÿ›9*õr/¤këá{M*{};XgYô^ÞÈ€£1+o)Ë€RÍ‚vƒÔœuÔ�UÕìßP¼².ÑËg O1‘J(G.döÌOùUêægðÅÝþ«­Í¨j6òXj¶OkxmZ9#ŒvŸ0ÈÀœLùùF~\c “Å\šCj±µÜ–A¶‡KØ·ܪs.?ˆ½yâ´­n ¾³‚îÖU–ÞxÖX¤Sêà b rzoƒ5ÞðéÚ¦oqvÑ 6i¬°”@ܘÖ`LŒXn}Ü…ÖZÇ$6pE)‰¤HÕXÖ„ÎÕÉÚ=N=M�TÑm&²±–)Ô+µÝÌ Ÿ•çw_Ñ…k–:¼ºRI"ÞĆCIeÈÌ 8€J“ŒŠ³gyô 4;¶¬²Bw |Èìú©ªVv:¤ZÅÍÕåõ”öÎCvl’Æ C+09®NÅ�G§ø£LÕ4·Ô¬þÜöŠ‹ s§\)‘[•1« 2þÈ=E^Óu+M^Â;ë|Ûy7m¥NA*À‚Adk™´ðeÞ{§ÞiV73AäD¶zQŠ «•D¹‘À\¹q“ë]6™oqk§Å ܶòιÞöÐQ²IáK1yËœžø  u®Xi—–¶·’I—.±ÄÞD†2Ìpªd µI<�HÉéZ5•cª\ê–³[ßY%ŒEL–óÙ´Žä6IW¨SŒc*Ø<óÒ€&¶Ö¬/5;:ÚW–âÛýqHœÆ‡”É›¹.síÁ¦éºå†­quoi$ž}©_:)`’&PÙÚpê S´á‡°¬| ‡Š†±Ä!â{«m‰Ù¥Ý¹]ß4a˜&уŽN9ÙÑìuKG¸}RúÊíä#kÛY´ 1ž´¯‘ÈÀÇ=s@Íg+øŠÊôäÅiqó¹Þ8ú#V…W{È“Q†Äîó¦ŠI—Ž6¡@Yõ«�QE�QE�QE­ÚÍyaP.ç[»iHÈ*NŽÇðU&´j›¨lâYg}ˆÒ$@àŸ™Ø"Ž=Y€üjj�(¢Š�(¢Š�(¢Š�+;Ãö³XøoK³¸]“ÁiR.AÃ*�FG¸­¯ay£§[_A»É¹‰fMÃk�F@(¢Š�(¢Š�(¢Š�+Ãê5ûÜèf¶kÃê5ûÜèf€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ä|§ëèZóëžu§Ø¢?eû"/1¼ñ‘õÅtš„w6m•çØç$7”$ÀÏ#iã‘ÅRð§ü‰Úýƒàÿ�ÑkZôÎĘ8ñ^ýƒ£ÿ�èT 1ɓ޴´P;ýâOú¿òøÖ¾›oymkåß_}¶mÄù¾HL ·E�cêv³qvÒYkßc€ˆ~Æ’`÷äœÓôË ZÖáÞÿ�Zûtep±ý•"ÁÈç#ñãÞµh gN´Ô.´g]?Rû ®£zY¼…—pûL¼`ô«6ÚV¿ÌROâO:%`^/°Æ»ÇqxúÖíÔsKk,vóù2’ì °úàõ¬/ìÐÕÿ�”øÿ�ƺ*(+d–+hÒy¼éU@y6…Ü}p:V=Ε¯Ës,x“ɉœ”‹ì1¶ÁžIçµ»E�PÒí5 Xä]CRûs±Ê·±m˜j-NÇUº™ÃYû Ã'ÙV]Ç×'¥jQ@¶Ÿ«Ûx×N{Ýgí±ý†ëåû*Çž2=È?ðzèu+{Ë›_.ÆûìSnÍòDœz`Õ¬ Á°2¥ xhþ#gÅ9ŸÙñÿ�oȬѺ£ìrVÆp}qN¢€9ßìÐÕÿ�”øÿ�ƶl!º·´Xï.þ×8Îé¼±ÅY¢€1otÍr{¹$´ñÙ`?v±#íüIÉ©ô»RÖIPÖ>ÜŒ0«öe‹iõÈëZtP5ãKkë2ÐÙêd }jy+&ân" yéƒÏ½Z´Ó5Ønã’çÄ_h…N^/±"o™"¶^4‘BÈŠàÀ0Ï äÀ€iÔäWÚI­ÏÙ§aòM°>Óô<ÄþÇñ'ý _ùOük¢¢€ºB‹$žc…ŸÜ{œv¬)44ŽÉâˆI*¿`Œàzg5ÐQ@ôËkÛ[cýÿ�Ûe.H—ÉXð08Àüy÷ªº•†¯urÇ[û[pcû"I“ë’kZŠ�ÉÓtýbÚèÉ}®}¶¤y_dHùõÈ5GHµ¾¹ð6…ÿ�Ø&[;rÒy+&G”>\œãŸjé+›ñÓ4^Õ£·Šõîd´–+T²†YÍ1°N#œrxt  #Ò|B²£?‰÷ `Y~ÁÜ=3šÜ$’ÞDŠ_*FRM»¶œpqß•ÄëSê—^(Ó§±ºÛȶOj#ŽXâ�ÎßjóÔ€ù;0$�ƒ÷yÍi\]íø§Äê&?°\Ç4‚Ösn$f£öùu$ïÁÈ<œ ¿±üIÿ�CWþSãÿ�Ú±†â 8⻺ûTëÓya7sýÑÀãŠÂð«Ã-Ö¥5´Úß”åÙõ8nTF~l²4ê ÝÆUI Ó<íê7VÖVÜ^^Çen€¸’EEAžìÜOÆ€3n´½z[©d·ñ‘ 1)ØQ¶L“Í[Ò¬õ+O;ûCUû~í»?ÑÖ-˜ÎzuÎGå\rxžy¾øSQþÝKT¼HcÔ5U¿|‡f'p* •GˆàÕÅ׿™</ö¿[iZµå½´×dæoÆõÚß¼ÜNå]§¨ä�èõK-Ríâ:~¯öPC¯Ù–]çŒzcŸÎ©øJ9¢Ó¯#¸ŸÏ™oî˰.ó¼óÒ¡—Tˆøæ >Û @>~‘#C¹‡–XnèÇ$¹ã½\ðßúCþÂ7ú  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<)ÿ�"v‡ÿ�`ø?ôZÖ½dxSþDíþÁðèµ­z�(¢Š�(¢Š�(¢Š�ÈðÙ'K›'?é÷¿úS-kÔ–‘XÂÑBF–INN~gríú±©è�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµê»ÙDú”Ä·› 2B 6¹BsïûµýjÅ�QE�QE�QE�dxŠép•$·ÙŽ?ëæ*ת×ÖQßÛ¬2³…Y¢˜8;£‘\~QŸj³@Q@Q@Q@dxSþDíþÁðèµ­zå<Yq…>Þˆ5/°µžžñYË$ˆ¬ò,DF ‘Ë’E�utW ã]X[XÜé:¤qA=ÅÍ´±ªJ·³¯–a·‚“sýÜ1ÛÁ­ kW:o‹´ˆ×[.dË¥-݃EP¾`ˆ,Ŷ€ä�uTW5¥ê‘]ø¾úÖÛÄö×ÑʼntÒЙ-ä£* 2U·ç’0GJéqF@lpHÈé@ Eq¿ð‘ê§F³ò¤²KÛ½bóO[‹˜ÉŠ5…î0Ì¡$¬zŽ[>ÔÝgÆÓXü;ƒÄ0YÈ/.tß¶ÇÙfž(ÛÊmÆ>QÎ2ÅGSž �v•á¿õ‡ý„n?ô3O–]]|Cpµ”ºcç¡–h¾RCoÜU²À »AÁÎxÅ3Ãê5ûÜèf€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Èð§ü‰Úýƒàÿ�ÑkZõ‘áOù´?ûÁÿ�¢Öµè�¢Š(�¢Š(�¢Š(;E»šöÆYg`ηw1>TÑE£T4‹9,,¤†R¥šêâaI&w£ ¿@Q@Q@Q@ó]Êž"²²y2Ú\JÃîG„/?GjЬù¬åÙß ¾L6³ÂÜó¹Þ0=1~•¡@Q@Q@Q@5{Ù,,£š%Ffº·„†bI‘ã†8÷«õŸ¬ÙË}cP€Yní¥98ùRdvýÖ…�QE�QE�QE�Ÿ Ý˨xwL½œƒ5ŤRÈ@ÀÜÈ ãêkB¸Í~åü+ð¢O;RŽÂöÏJ1E •T5ÂÂBª–’À98 Ίá|oâk« k'TŽ('³¸¹¶–5IVöuòÌ6àAn»†;x4_ëz†•ãÔ‚]^ «[«ˆ¢‡J†æ!4HȪY¢òK° ½Ëy Ç`€wTÉbŽâ†hÒH¤R®Ž «)à‚Q\ï…uHµ;­I­¼Om­Ú¡MŠ I;²Ê�m8w ü­É®†âHá¶–YfFˆY¥b�@,Iàc¯<Pt~Ð!Ó¤Ó¢Ðôı•Ä’[-¤b'n>b¸Á<}…\¼Ó¬µ ±½³·¹´pA4Jñ#*F8 ¸üXn<+os‰"ŠÝµ»»[­R6Š_³B¯pÑH*7A#ãA¨5OköK¡\\ªZ£é–÷³ÛoX¥¼¿Ö[Äs mc¿ï P}ý…¤kÿ�kÿ�eXÿ�iÿ�ÏçÙÓÎû»~þ7}Þ:ôâ«xoýF¡ÿ�aý Õ9uHŽ`Óàñ=°”çé4;˜yeA&îŒrHÛž;ÕÏ ÿ�¨Ô?ì#qÿ�¡š�Ù¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(#Ÿò'höƒÿ�E­k×=eáýKO°·²ƒÄW"x–(Á¶ˆª�íôcû+Wÿ�¡Žãÿ�aÿ�âhfŠÆþÊÕÿ�èc¸ÿ�ÀXøš?²µúî?ðþ&€6h¬oì­_þ†;ü‡ÿ�‰£û+Wÿ�¡Žãÿ�aÿ�âhfŠÆþÊÕÿ�èc¸ÿ�ÀXøš?²µúî?ðþ&€4,oRþÝæYUf–¬r2ÕMY®zÓÃú•”->!¹ÒÉ)Í´Gæw.ßÃêÆ¬ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄÐÍý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄЃÞÇ¥Wóf†I”ò…B€çß÷‹úÕšçŸÃú“ßÃzÞ!¹ó¢‰âCöh±µÊãoª-XþÊÕÿ�èc¸ÿ�ÀXøš�Ù¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  š+û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�Ù¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  ËȬ`Y¦Ýµ¥Ž´gæwT_Õ…X®zóÃÚô ¾"¸Ú²Ç(Å´_y\ªŠ±ý•«ÿ�ÐÇqÿ�€°ÿ�ñ4³Ecejÿ�ô1Üà,?üMÙZ¿ý wø ÿ�@4V7öV¯ÿ�CÇþÃÿ�ÄÑý•«ÿ�ÐÇqÿ�€°ÿ�ñ4³Ecejÿ�ô1Üà,?üMÙZ¿ý wø ÿ�@5^Âò-GN¶¾ƒw“sÌ›†Ö�Œþ³¿²µúî?ðþ&«ÙxRÓì-ì­üCr!·‰bŒh‰  ÎßA@ ý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄÐÍý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�lÖ7†ÿ�Ôjö¸ÿ�ÐÍÙZ¿ý wø ÿ�V´0év ܽ̒Ló<®¡IfbOŠ�¿EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/GRz4.jpg�����������������������������������������������0000664�0000000�0000000�00000122565�15030617045�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�̈"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÏÕ´M7]‚5K8®àŠQ0†e …€ eOï hUm@Ù.qý¤mʼn–´íòÊ‚wÇ\ñ@c¤Yx@ê:^›§ÛßyËJ€¨ÕÀ@JŽTP=Åtvþ!¾½½Ž©ý›4°kob×ÂÑ€¿ak€êÛcs°òr éšÔ²Ð|!©h‰ Ž“¡Ýi//ž©¼OI»Àilqž¸â›s£x.ßQ‚ÞëMÐ#¾¸”Ï RÁ–Y;º‚2[Üs@xkS¿¾IàÕf±7ñ¬r¼6ˆÊ#Go%›x;[1œt"²¡×ïÞÏLŽÅ4è&½Ö¯¬˜X¢ùmrD›C ±òA#<–<Œ×Ga¥èÚ ˆ4ë 9n;xR#€OE'�Ÿ 5XxGÃAUG‡t©)™GØ£ÂÈq—/Þàs×@ÝŒ5`òÿ�hͤ"mA£}¯$¶“¬v,ß#–Ý€2 c-P]xÇÄV¶òÛ}žÖk¸µSa%Ô2ÊŠ¿gY•¾Î’'.áŽ0Iô®¥|átTUðÞŽª‚c a±òñ‘Áõ¬ÍOÁšv©œÚ<Z$ØóMIâœmd ªä)cÁâ€2®üSã[}6Ò=*ÖçZ—OûuÔ)Ä‹’•ûË…+·\Ço5±â“q5÷„¤²kx®ßR-æ_1T;Œä)‡°#${Ö…—…t›}*ÊÂêÒ õ³v’º‰d1¹bĦAÚ8�t�ÕzûGÓ59­¦Ô4Û;¹m›tqÈÑ7*HùO§ ô *ûƚſ…¥Ô!›H7¶)%Ô,Ž|å¶™¢Ê.ñ°6ÓÉfÁ �ݺ=#U½¸Ö®­/î,6¿™%œ0#nhQöï/¸‡ê¹�)RqÏåÜKðÎÁÍ…Ìž·kbèmäkd1áÆÓ÷sÜwï[zŸá¸{­ÓIŒ¹ 4¶Æ7�Å<0<úƒÞ€*]×âF’F<ÆÒowsÉ[\6ýk›ðÔ¶ð‡Þ[*.±©F¬ë÷æ"i|Îí²uEû¹Àà×jºF‰{¶º~Ÿ=áPÐ߈Q¤ÚGdÆqƒØô54N›m5ý¾Ÿiìã\G ¬’¼Àdþ4‡>±¨^k—öv³iPYéóC ÔWªÅæYX²À(ÃíVÜÊGÈiž#ñ‡à3Ë—Kp¾mJÔ5¼„§ÙÒ £Ÿ0oÞ²Fݤz=î…£êWâÿ�J±ºœFbOnŽÁA\‘œž=ê+o x~ÍÑít-2Hšh­#R±±%`p¤±Èèr}hïÄú”VºËÀld’ÓZµÓíØ«lhæû7-†ûÃÏ<Ž>^•Íßx—S²ñ“5ÂØK}aå‘»Ž'ŽCö VYWs0UóH8'¡9PIóx[ÃÏcöÐt¶´Èo ÙÆcÈÎÜcŒŸÎ¢ø]î$¸ èí4…‹Èlb,ų»'nNrsëš�©&¯©[jv =ö”l!I§H›2Í#¡q!òÁù6ç~ì‘‘êï¡xv÷SŽ:H(„€ �É$�2rrGÅ$^ðôÁ<:—Öë¶Î0Ñ.IÂ2Iéêj}3F±ÒttÒ­`Qf¡‡”Tm!‰,6€ cÀ�À�q@Å·ˆ<K.ž`»MÓµGº)ÚU[Í„D_pŠ9Û ŽeÆlôZn…âÍ[ÄPÛÝÛÉ¥YÅVr]Ár»ùÑG!(Á†ÕfÕʶæR8®•|7¡-œ6k¢éÂÚ <Ø¡©²7þò®0¸¦Ã¡è^À`Òôĺ²Œy;-ã1lmÀÊ‚CtÀÈ>ôÊxoPÔtéì-•ìN—}®êv‹ÄÂT+-Ô¡·nÛÝíÛ·¡=«Ð+"Ûž²’-t *Ì´Vq©È�²8$Èô•¯@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yæ¡ãû]c\²“ÄþÓå±¹[Z]Ú»M2´1ȧáIÉ“o rTœv‡\œž×ÒïY{MkJX5K=£¸Ò^bŸºH€Ïžùc^«ÉÏÒ€5®¼E§i·Öº}ýÁKÉü±„†F@ÎÅSs…*›˜»ˆÉ‘¬xïNµ„€ò%ÕºHe¶—Ëxžâ8dhß\¯™ÕK`ã"©ø[VÔ¤‡~¿C´•Rk-äK‹!`C®•Ï¡ÇVOëk¡ÚhÖ¾"¶K+)à{Q.š]„pȲFŽD«¸‚ˆ7 ¹È$‚�:M;\ÓõKK‹«ib¶sÿ�h‰àh˜(bd Wå`y5‹¨øÞÉtƻӥ-ä]Y¤âæÖXÿ�s4éuÜpÃ1 22;Õˆ<1,–¾$¶Ôï’ârGg@a1#B°í³díEçŽsÇa^ûþ!Ô4h¬çñ›Oͼë1ÓÒ!H¹Q(ù‹"ä‚A9�¡ñ†‹q$1¤×"I¦’ìgFGšÈÀ *Û>`‡ÝÍ,¾/Ña¶±¸7H—ößkµÚM#K– ª[€êHÆFk5ü#ª5íÅòëVËvÚ¨Ô¡a`v'ú7ÙŠ2ùŸ7îñÎGÍÎ1Å-¯„õ=9ôO°ë¨ºV—&›šÅœ¸a‘*ò<˜øïótÈÀôÏY\Ý]$÷ $oziæÖ ¦íá˜1UÜp<î[…ÅkjÞ"ÒôFU¿žEfRåb‚IJ à»SµÚ8õÇh?µ¯Kö^%³§’Žÿ�ÙmûØc…!¸óðF"BØáˆ®¦ûD¾}{ûWLÔÒÑå·[k”–ÛΈÌÈWæ]¬ ÉÜFAÅ�Iÿ� NŒuEÓ¾ÔÞ{Éå+yyFLg`—nÍÿ�ìîϵG‹ôIï¤W´ÌòÄ ZMµ¤‹vô ³ÆÆùAÏ ¥„®á mPI¤ÿ�íjÖÿ�½Y¼ß;]ØÙæüØÙžÙÇ „µkiôÆ›Z´–+-RçQ(š{!Íæå3æœcÏ“œáô9�·aã­úÓJ˜Ëq jQÅ$I%¬£o˜ÅP;mÂî`B’@l|¤‚*Óx›M¶³†ââìºÏu5¬&YIiœ€X°òØ´T9¹ø| ¬E¦XiÏâ;y-lVÌ[£iÇäû4Šêsæÿ�E ÜãŒ*ͯ„u›ììë–Oö-VãRñ.a¿Îów'úî1çɃþï€k/‹´W†ÆT¹•Öô¸…RÖVo‘‚>å ” Ä),�€j{­n }~ÏDÙ7Úï-åž)ñ¨Œ¨;˜ ¼:‘ØueÏ?ƒõØôÔ´OZ#™îgyÓM"Ei¥iKD|ß‚Ì9ÜÆAï·ªi·ZÅ–©a}´öÖ×ûg¶3+ LmœRh—¿ ‘ÇP“¡|@Òõ N¸½™â¾žÆ+©!KI°ìÁ~SæaÜ.±®ŠÇV±ÔtѨÛ\+Z|Û¤pSfÒC ‚¤A`æ¸kŸ†W—Öz­æ³aq‹eöHc“JÞ’ò˜2+JC ± #ŽrAêàðÕªxRç@t·ŠÞæ !•l-ÖÚ5b íêz’sÜÐGü'Ú{x‚c›M{ .YÚÂurÂXcË$~õ\Ê@ا$ kVÓÅÚ]þ§§YZ™Mü3Ë‚Ú@«å0GWÊü„1 †Æ�ಃSVðÞ¯¨_é×Öºä“ÙÁ$ ‹Ë*»Âìó�ù `Œy¨´ï_i³ÚM±™¿‹,e.¦Yˆ~+¨ÁÁq·½�lé"ÒõÖ™t뇕¡Tv Ç”|ìuÞ£r¶Öà ƒƒƒ\î‹ãi/çÔï¯AµÒ­î¤´‚¦Ü åur€«t’”Tܤ�kOÃþÔ4R{ûíVég³‚ÚB¶†"Æ&‡'{dŸ5³ïŒ`qT ð†©ž°¾¹oö«mJ]JÊxìJˆä•¥.®¦S½H™×‚¤×<Ф/ÑnŒ+ÄòÉ0r±¥¤ÅÆÆTpË·*TÈ™dñÍXÖ|E¥è jWº³‚¼›Qq¹Ûbª7.Xà ŒšÇ±ðž¡g⨵ë[;:Íö¸…‰_5¤PùŸ o�†<1$îâÇŠ¼7â;yí!ÕÒÖÎâÎkY¡{_4ãE;— 9ärqƒÍ�Esâ;è?µ0–Çìzåžž¹Fù¢›ìÙ'æûÃí ƒÓåWS\]ׄ5Ë©ã_°O¶êÚ‡üƒùrCå`¯ä!3ÿ�õ㲌8Œ­ s*í÷ dà~&€EPEPEPEPEPEPTu{­6ÂÇíš´öðZÀêþeÃ…Elü¤’qœãïƒÚ¯Q@sss ÑçÕ<#®[=ÝΦnd³³xeŠèì@І*Øo-§©bz‚«êVW~ÓÍŸˆl5M`/âŠXÓÏÔ6ßìM¥>aŽËßø³ÝiÚ¤zŒú„) ÑIasöiD›yo-$`ž Ⱦ‡¯j;ˆ¦’hã‘Yá}’�~ãm ƒï†SøŠ�Âñ»«xn/á¶Žúý •eebyy¼;°ë—Ñü\÷:ÆÇÅ0]-î³}`ÖCÈÀŠ?<ÆÀªîÝòÃÎpDƒŽA¯E¸¸ŠÖÚ[‹‰8bBò;P2IöÅI@n½âK}/Å–ðÜxŽ;XF­`‚/0—fF¥ŠŽT€›Ilƒòá·Œ"¿ð¯…î›Æðéw×Ö‘¼îÕc,ùÌþbAÊ…\|ÇÐzT—C$1É"«Ìû#ýöÚ[ß Çð5[JÔâÕìšêäVy e” Á¢‘£n„ŒnCŽzb€83ÄzÖ£ã“jV `³²ý‚I%¾Ï’UŒC»’Coó `‘€k½µ»·¾´ŠêÖdšÞU‘¶U”ô ÷5biÞ$UÕn-,ôëÙ ·šKy/¿v!' ¿~AãîõöÉ  _èÚo‰ü)§»;{™uY. ¹‘UÛ̶¹MåzüÒ0P{“Šæ§ñž‹«ëóÙxšÖÎ<AejöJДdh­¢“vàXmT—#&Îp@õzn"k—·YÍ+²g¬X)ú­ù�ó…ñºMá êsx¢$šÅf»†‰¥º” ¨¬¤x1¦$c¦Uâ‹éìî´¢ÔšÂËö·žP#û¿g™Ç.¤º5üñ] dêúÕ¯t»¯íËVÓ§7­¿—¶F(SçÞŒqµœpGÞ=À ˆÓ|Q«Ü^k_Úëu©éºÚm¬cXC^2½Ê®á·pÛ9 Œy€ŒŠ«¨ø»Tµ°{ıêÖMsq*Á Ù¹š41)Ú#WegÂË’¥>bs^¯YÚÆ“ý¯mBúîÉâ”J’Ú²îÈ`‡VVcÁg¨Ã[k×¶º‡cÔ|`>Ñ«jW4…¬Ë,^\¾X]ˆSpa�?xo|d‚RÔ¼q=ö¼¶Þ)K„f£,+4PÆ`¹Ñb@»AÉ r’ØÈ ܼv> ðn.#‰^öíÓg›)TŸ*ä*€0+z€<²÷Æ‚ÇZŸÊñµµÕ•»iÓ›mŒ—9”²®B$a\`än˜ŒWkâ{ë½?OµÕ-'“ìÖ÷÷qŹ–ùXŽ ùwã’Žs[Ô„àŒû �ó¹üA®Xx]¾Ôod³¿Ò,çF–T‹l·æ‡(í1Œ‚dÇQQk#óí<]§Xø—펞öMBd Þy`›evˆGrœœ×^|Mj¾¾×ÚÚåmì¾ÓçDBùƒÈwI1óm<ÆØç‘[tæ·¾'Õ¿á%µ¶°×´ÿ�°G»Æ÷3¦íF3þµÑRæ62?vÈŽW½àljÐ]DuÕÖf„Fò\±ù#x?*û§ål²ädœ‚z‰î"¶ŒI4‹TŽ2ÌÁT}I ~5%�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÆjÞ*½Xuo³Ú\Û/X±³Þoö”–H7ªŒ“’²ú¼¸9Üg\Ö§àØµ¯]5NÍo/ ½‘-ü’°„Ã|lå”dŒã(=H Œar±#RKÃzö&Ñ„;Öe€Ü�O™³ È!±ÈÎ+:ß⟆§šö3;GöHvc$LQ‚°Â¹*w0p¹ê29«gÁua¨ÿ�oêâQ¨D¯î6™<¡?ÕghŒlÆs‚NsƒVÁÖ‹as§5þ¡&Ÿ(>U©•BÛdî6 ƒ‚73c/†üW§ø¦ÂæëN ÆÚS ‘ù‘¹ ´0‘Ù ŽCØàƒXº—ŽׄµÍ> Û ¦ÐåÕ¬%¸Ž2$E@Ù�3 &C÷…tö¶³éZt¥®oµYÕK3F$ÂŒ@ONÞç½rÚ„$¾ð–—­ û;Á¤.Q¾ñFUV@…C.bòrpC@ú·‰!Ñõìo^;‰"‹íQ¢ùQ´¯å $°$–Æv†ÆA8V]×Ä=2Æ3q{e¨[Yy÷ÂîUŒFf‡ÌÞŸ9ýÓàãoA©î|·’¬—þ±#³³ðáž <Älyxp�÷æª\|9³»´·´ºÖõ‰`‚ökäBЯïeÜXåbƒ$„`ðXú �Kgñ KÔ´³{aiwvËx,š v†FÞ>q'—½Ãõ!~÷¹©ké¶¶òµµÄÓÜÈ"‚Ö ¾l®T¶Ñ¸…*±$�SÍR¸ðÔ÷:zZÉâ-_x'|ÿ�¸-*FÖS—Ž{(>õ-熭.ôk;íp›ZÝG&f‰ÑJ†ÜÀ‚v’àAÉÈæ€9‹ÿ�jš×ˆ4½FƒS°çAÕ-¼ëfŒÄ6‘#2•r3mÉ*Ë´žqÔ^kÃâ‹ ,çe¼´žsvŒ˜‹Ë1ŽA9<È;JðFâ´àðtVúݶ¯±©ý®! ˜“ ;Ì{ÌŸ»î"‰~]¸1ŽsSÑ¡¨ZßÇweuo Ð$–ÞYÊK°¶C£ hG¸î2(šÐ¼øcNº×`¼·•´tÔîTc¹Ú±‰ mn>yW† >aŽ+{Ã^+Ó¼Ucss§n?f”Ã*y‘¾hn6d`CCC‚ fEðöÉ-¬m¦Õµ[‹{ÓàŽG‰vÆY¤jwX9þלôštÖ¶[¾©{s3©j›ËóŒ @Gû¼÷Í�dÃâÈM†Žm¬u=F]GNût!#Æ¢=Ųʡ¿z§’aE‡m5+9îmtÝIü¸-îb‹ËM÷ÎXFéóàU³¼®Ð 8Ô6ž[ÒÖ×Ä:ÄgL²{vÿ�G$DÛx9‡’<¸ðØÎN`·øwokÁâ j5†ÖÚÕ6¼rÝ™¢Ïî¹Ææ<y‚�yñ/I´Ób»ŒîÐ\\ImÅæÃåÊ[.á)là‘‘ÍOiñFºñ$: ,°_Èæ#’ÂÅ% ¼£*HÌ�üØÙ‘€ÄÖ&¯à먯­ µµ¾Ô-ài®`¹YJ#žiL½fP@2îo™‡a]>—á¹í34ú­Ø–u][Û²­¹¸*7È™]ë–ÉÛ»oµ�]еµ×lÜv7–±ò}©P +{†ÃÁ�Ö?“YµÑu}cO×®lRÇM–h­á†*+¶\Ép£�ŽõKðÉÓ.^äëZ¥Ôò4fW¢ý⢰ BÆ£>IÆâUrØ«"ÑÄZ,úT—÷vp\+G3Zù{¤”«!.€Aìã¯Z�šûXð÷ˆì¬¤¹Ôµøn-.æ¬6ë.Q­‚äñ¾Nã;€äâ‰>'xr;Í2ÜÌäêÛÈ„¼jPO/(\9ÎFv«žqZ—>’çR³Ô?·µH®-l¤³VŒAó‡ÛºF#ó’ˆxÂå  +Ávú(µKWSŽ(`ŠÞHüÈñp±®Ô/òd  ¡\€3š�«â}GZ>)Ñt=(^A ÔSOqwj-Ù‘Q£QĤ È `nÁrs‹–¾)†YᵂÏQ»žg»*1 ¸ÈÌ£ \c¹Qݺܽо×âeu+Ûym"xD1y~\ˆì¬á·!nLiлÆ9¬Ý/Á ¥kj)¯jó4-rV¼,ùò %lA°\ëÆ8ã"€Pñ£ZÛÝKm¡ê3‹{ø¬²|¤³Ì±»¤rÜn œ©û§ukêÚÒio gu}y8fŠÖÔ&öUÆæË²¨rŽHå€ïY7†îi¥¹Öõidb¦g‹0m™&]¸æÃƸ߿#¹Î–§ ¦¥-•Êê¶—¶a–;»bʶ7«VBj’6õQŒb€0n¼e6™«ê3ÜXêsiéV·íý f¸3†*zF¿(,x8kV?[¾¨tó§ß$ßÚiÙaß1mþÐ!ÏÊÑò;炪ê‹QmSÌ×5tR±K ãW„)wt-lòd’Ö˜]³IàØV:’꺔s™EÆ¢Ú'yn ˜ÇÆ>ïp  OÇkð¦¡u§Z꾉>«§ÜÜEÙ4S77BéÀd7ë]>—­G«Ëqök[‘iÄwŽEqêcù·?¼@±5ÏIðâÚ].ßNmYû<dšR�móöw+¸ªêUsè¾¹&Ô>½ÒíoÆ“â=E..вùëŠ)27HD[’À`1c÷I �:ª(¢€ (¢€ (¢€ (¢€ Äñ.—&­„_Ÿf—k%å¶ìyñpä€@rŒAà…#ž•·PÝ]ÛXÚÉuwq½¼c/,Îz’xçÇÂílu:?¬ú=ά.R$!#O²Gá}¤ ¸=8!I¼;á½SKðÕýï„MÍÅÛØ›œÍ�3¤pÀ’DŸ9’¾Ö![yÉ;˜Wgsã&ÖþÉe¿°]6îÒk”ÔíYâM¹û§>hçwðž+FÛ^Ñï]ÓV±ÞW+„bÒ*îd<°^Hê4ÊÁáËé~k>}4Cq"_Åio+ÆÊ¼ ’ �ÈM»z ¡¨xföúkÅO yROCH¼B­£mSfåB²—Ä{ƒnÚxÜG¯iWfÊÓT°žø«¶[•.Ûr'�‚ ÇGMñ~‘w¢Ø_Þ_ÙXKu§Å~ÖóÝ h£u'8ùA8Ý€(?iM}áÛÄÒÖÿ�û?RóÝ1äS ªw>WhÛƒŸ”ÈÈ[x{W3Y]Ûøf}?UmOQšk÷šÜ´pL'1†+!%CMÚ3ƒt'Ómî »·ŽâÚhæ‚EÜ’FÁ•‡¨#‚*ím8jƒLþеþÐ+¼ZùËæíõÙœãßÊøÃSè"êYíõ yfŽ4™.d¶(î¹ùÐ@£9É˾àdqXú6…}¥Ýé’Ûx*KI"×.n®f‰­½¼‚åbÉY2Ûè6ö qÛ>‡cªiú¢Hú}õµÚÄæ9 ¼Ë FTàœj…µ½> Asy¨XAI",†évŒÀüÇ€§pþç  <=,Ú ¾žK¯í+™„eíŒm,ÒE¼6º.6îÊ·+ÐÔÙqáývãÄ—ži]Ò ^ÄÄíªòy‘ì¬Ùß1ÞXBŠÕ×üo£è¾›S‹QÓ._ìÏsm ¾DûR¨$ˆÏ;‰Á�óZ—ÞcÔ÷ú……­¼L²]*…bªÛ\œn~îO=ð�3<g`u->Ö¢K«"Oæy(ÑmVÀIYUמ™È8#ã¢ðoˆn5;«ù–îËXx¤kk»yíÍ´%áØ±–Ùö†O ÷IPÙ½õ½*+‹[y5;$žìfÚ6¸PÓTË~Vèé²ê#X±K8nÚIä¸EE‘N ’Nî=A¡ E¼9#i±IiàųUž'Ôt繈ÿ�h"«‚8b†u}ÎT¾Ü7V/ ͳ\øF[­ȼ1iæKv[mâ‘i�ûÐÊÀ ª™—‚GaâiÞÑ®/^îÁîÙî`µ–ñbk…U-„à’N8À5g\×àÐgÓ á‚+Kˇ‚K™§¬†ICŒû²:Ž£­�pÁ÷þ¿·ÖtS{­6“½‹M,nÖî¶Ê›C“(w,!ÆOC·ÕžêëPµO¹Ž{4Fýñ@’RB†VlŒpFAÁ<z¶›,–ñǨZ;ÜÆfVe&TYF~eŽ9¨ui:V—§{¨[Ec+F©pÒ.ÆÞ@R8Ç9Ï '  7ÿ�„kUŠÒé ð}Ä0Ý .I-b¹·ÿ�Y Ã=ÁÜeå™6®âK7#¶¦Ÿá9$Ö¯#»ðà‹Ã«{4°é¬Ð˜œ´0*Éå«Ûº9ÎÓÞPqœãªÑ|Sa«;Z½Í¤’Ïq²*Ò Ïp¼6Ìôã5£cªéÚ ”é÷ö·b&Ù!·™dØÞ‡àûP4+ûo…zö…k¥H·3 FKQ,|¤ÒÊb!‹` ²)99àþ0ëú~©¬êÖz‚øNt¹·’ÊXnâ$j“îš?õ˜S³pùx`p[€µè4P˜j>¹¾:‚¯ƒÇ-äW“µÌ–ï%Ó%Ú;*ÿ�2˜¼Ü 6í'Ý8šŒYŠ$U±‘ìqÅ:Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+Ï£©Ûx¯Ä:¾ ì´ë¸ll`‡Q‘A’D„*¼[Dd1¸»PŒ�@Ízb h­6§#ÛK/ö™ÍärÝJñÈpv3R¨�@� b€3‹µHµhtkÞ=RYU‹âЕxg‘?•œo"‘´ÁÁ«ž&ñ<¾†É#ÓÞòöè¶ØbY\�£,IŽ'lr�;;Œâÿ�N‡æÚLa¼3ZMçÅ)Ô. ïÆÐY‹åð¹P01ÎŽ©¢Øë) ÞÇ!h_|RC3Ã$g;]a‘ÁÁç½�sRøÏX[ý*Ù<5宫Éjn®šY>S$R/–v2©vês·“Æ×ˆ¯-|Om¥¶›µ¹™­â¹ûWÍænP)Ú¸F-»#;qƒWn<;¥ÝF#šÝÊ,®'‘JÛr•!²§w$Œß5V_è“_=ë[Ü-ÃÎn7G{2bR†2à+€¤© ‘Œ÷  > ê1éÚ™ðü?g¸Ò_XAöÿ�˜AÆÒ<¿¿ûÕÚ3ƒÎJÖ´Þ*ºƒRº‰´¸Í•®§,ërK†™b(á6`ŒÎ€üÜry¤ÿ�…yῳGlm¯ZíÉ#mJäªÀøÝOºp?ï‘è0ÏøjæÃVÕ徆&´šñ.,ÈÔ&ð‘GùŠêìFvXäã'h$6/\hºJ-®u;Ùõ=F(ùÒWR“r>„Qò‘Ó$ ß¼ñÖÞ‹_þÌ™—×·$Å$’<ÂÔ’;í4Èü Ån`H.Õ~Ð×*ãP¸ó#‘‰,Èû÷&âÇ!H<æ¶…¸²6~R›r†3ä#\Ð+'8îÿ�Ðcy­ïÍŸ–·Ü "Fà• òƧ°É9;MI/‹u9Ú÷F‚;Ènì¢c½/“s)‰%FòÁb¡ ÐóÓ:çÃ:+ZKjtèL2ÛGhèAù¢Lì_Ã'ž¿¦ hÿ�ÙséÍo4NÈÒ¼·R¼¬P‚‡Íf/• óqŽ1@þ¥â¦K-ZºY,áƒT¿†ò(f.¯¼7».àL€#ƒŠ±c­OãÍ=uìøfÒ®¥¥ûL®V[p7¦ÕUuÃ#wßêkBãÁÕµ¤¶³›{i^hã“(à‡'ónÜÙÎs½¿¼s£‹cõ­ê¤ÆâÖ'†k‰j>Ýðs±:çîŠ�æ`×u 3Ä:ÚIj×:_öÔ¦f»böæh-‚…Œ©Êy’düÃøšµáïÉâ aíSF¼ŠÉ£y ½h¦ÁX.´j€¶r63Œ’+\øoJ:ËêÆÝÍÛºÈÙžO,º¨Pæ=Û7…�ÛœÍ;Oðþ™¥ÝKqgÆÒ1mž{´hIÉ)b©“×h  -cU’H5€Ïo-Ÿˆ4ëVu¸cæ{BØÂ¥&ÚW¡äõ4Ë}rþËÅ…ŠÀ. ºÖZÖ6šé”ÀFª­ò–Y3ÈÚ[ ñ§uàñ¯Zho ½¸K©öê TÆÆ�8ÚFÕÆ1÷Wû£ h2O4ï ãK4ËpîuŒùv¼àìùr1•àñÅ�EН.4mS·Ò£ò5;d¹æºØ–Á•.í‡sç ÓÈ$^ÃÅ:¼¶v¦m6Íîo5kÝ>�·l¨<Ÿ<©cåä¨eà0ÝÊ+ŸhWv–Ö’ÛOökx~Ï)w2!‹Ý²«€éÀ[#t¡ü¢Iu ÉŠíd†íïc :"Lä—`¡Âó–ÈÆ>fãæ9�ÅÖ|i«iÖúÂ&Ú)­´ÛËÛY>ÖdWû9U}À&ßV�Há¶–/<kug¯A¥ âêE0%ëÚ,Ò¬&3µ„[YTIvŒãJ¾žðò1e!Y"žFº˜§—1̨¶±À‘ƒVÂÚJÝÃt"¸3F‹cw1óU~è”ĸÏ÷b€9Õ×µ=_Zð•üvMi¤ßÝÈa”_1yâ6³ºy… mW3·œÛ×<Cu£êV‘.š“ÙË-¼RÏö®†i|¥ÄaN@%I,T`ñ¸‚ßøGôÀlŠÀê,fó­•'uX›k/ Úì6ôÁÆ* ÿ� èÚûß][Ên$1hn¶«¹O ã4�í3V¼½Õ/mn¬#´H]„9¸Ý,ª®ò›FðA¸889›Ñ¼Oy¥Á³S¶y4çÔ58b½7FYA†k‡ÈG #‰€;ÜÆÓiþÒô½BKëX¦ûC«¦én¥”"³e@ìBÀÀô¤¶ðÆi}=Üv¬d¤fYfy#S!&B±³BÄœí99 Q¼_}­éΗ¥˜õ 0Ç1YãYR[¨Ñ“/y;I �eà [âÛ¯;ÏJôŸ·;í_jýà›ÍòrbÙÂyŸ.wg¾ÜU—ðF‚úoö{Auöa"Hª/ç È·åTU ǬCá]ßQû|vÒyûÄ„5ÄH<Ãm¥ñüdn÷  [/½Ü°ÀÚtq\ÍfÒ,Fäœ\,¾S@NÌ¿ŒýN0+³íÍg¦…¥Çr.Ê!0¹k°àsç2l/õ+ÇëÖ­Em3Ï2oß;}Ò3 … 0 ÂŒÀÇ<õ&€&¢Š(�¢Š(�¢Š(�¢Š(�¬_i—ºŒ2éæÙ®lnÖéaº$E6—k p88eSŠÚªºŽ£k¤Ø½íìŒ!U%Q‹3U  –%ˆ��I$P3.®OÔaÓ4?.ÞÊî6‹í.€M3#qˆŽGî€-Á>c¼a²|3à½F“IŽäé•Ä7.ÑO!fd°e@1Œ ù϶ZÙ“Ç66zÍÜw²<zrXÛ]Å*ÙÌ]¼ÊæPØ£Ê^X(9­y|M¤A¬*[³ÐÈ;¢q!<¦LlÜæÛœãœb€9{oøšØéζ:!’ÓW¾Ô˜‹Ù™ç,ÛW>O3àžxŒuÎ Â)Ñ4x´Æ°Ð/-ü›q/}0“͇hdä/Ȭ ä¡à“ãËIüKeekt«cqoæy³XN¤±ž“c¡•üâ�@8$‘ÁÚ—Åš4›iò\Ê.á-_ýR‰+…(¬áv©m댑œŒP4é5»Ò¬¯m-îc7Ú®-ܪۖN6�üR~RO!q¹wz½?‰­õ‹IÛj-u‰ÐÛ<uA`Xî9 ËŠÓ¶ñ–‡{­.“ks<×mæmòìæ1µÈ“fÌ+|¤îÀ<uª÷¾-·Ò<Qy§j’­ÖÖx¥Kyi‘æFórª¹pÇhùºÐ¾Óµ]6)¢¿ƒNµ¶XâKkk)ZUh!¾vD;~îÕÁÛƒÎÛÃÞ#A¤‰­4wzåÖ¤ãí’¤Ær�Ì?yMÁ>Ÿ äg-gÆ–VÚ>µ&›:ɨXXÜ]Æ“Á Ž_(ÛX…À% Á"´oüQ£é—ÂÎîéÒ@T;$hâ-÷|ÉJÇžÛˆÍ�qú5x|-âÝ>ê(ÞkÒ]JŒ³;$n≓%U›pã©cж¾ñ<^,ºÖÖÛF‘áäKi/$ÁW†‰-å|®>Î0pr$qÇSÓ¿‰t¨îÞÕî$Gt–l¾DœJêFvãótíœÖ…µÌWqa,P;&YJò¬TðG¨<÷ ?UðÞ¹w4)mm¢-¼-a"g”Á8•“+Œ…ç “òóš­wàÝ^xbOôi×Q½¹Š4Ôn-|èî$wù¤‰w#.ü`ng¦xïè ü %¿†5ý"Êø™Y x ®ø·Û�‰$3R»ÎrÍÅnxƒNÔo†we œ—z}çÚš ‰™#|Ã,dÄdÈ;‡µoQ@¦£ÛêA®¥Ì·¤ ñ ò7ÚdUí=Š'ÒºoiwúZiËÍ Í¬ñ$¬R3äÏ»I�Lgé[4PžGá/Mkeoq“m³S¿½ž{{¹ÂÜ,ê6ƒå—í©ê××åØðw…åÐ ²ÜÛÃËC»K¡quæ¢giý÷ú°7 Î3Öºº(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬/D—pJ»¢–þÝOFÆA­ÚÆñ'ú?þÂ6ÿ�ú þ-þvÿ�‘£þ-þvÿ�‘­[‡D¶•äT%¼°Å±Žp’~œúWžÍy4¿ 5ÔK]oí.£¤aºY‹I$Íní»Y0OÊ8‚8�ëáÐ?èoù?áÐ?èoùÎñMÕµÖ™fÞn¿l×�¼éö·{á8t‘Æ„ç‘òH¸<äpkª  oøD´úÛþFøD´úÛþF¨øÚèÛiÖF8u&û}¬€Y[M6#KˆšRÂ58uëÈÎ)ž1y!þÏ»³»ßC2É+9IÔ0-›v¡‡¤ ãš�Ñÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äjž–ðËâûç‚mm Æé$PÜý™Ø:üñ´‹åŒr�Œá'®–€1¿áÐ?èoù?áÐ?èoùÑžûÄž(±‚MbÎ9ô˜áŽìZ\Ž`×Ú&*`$ˆ§œ ¹Çô;›ˆ4Mf øµyôèJnc‚þ;™‹2ªÈï> ó)ÇÌp  “þ-þvÿ�‘ª_Ù6W‹4£cl–þd7ödnÆÌf´<4¡t `.o®/¶KøäŽlol�üa’�<ç4Ëÿ�ùôoúãsü£  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡¬YÝ_éÍogqo¬ÊK\Ûyñ°•dܹϱ«õ[P½‹MÓn¯ç b¶…æpƒ,UA'×€8É| ®Ïi¬ÛÍâkiF©§ =ÞM9™£@Òƒçs<Š3È2IRZέàC]˜K\Ž[c,å­–×T’ÝàtVßÀČÎ]Õ¹ý¹/ýuüƒÿ�Ç(þÜ—þ€ºþAÿ�ã”ìÉçsÄ^Ôõ»6æ-fÖÚk%-`]\‰ ˜ F>keôcõ¤¹ð–¯q. F·f‘Þj¶Ú‘_ìæ%L>V>w9ò#çÞ㑟íÉè ¨ÿ�äþ9Göä¿ôÔòÿ�¢Ì\ñîqž ²¹µñÚ-ô¹#ŠâIÚà\ÙÜ[5š¹/µ<Ç16X >P±¸ž9éu¯ O«jW²®¡6Z”v7Öím½Þ%iOÈû€BDÎ *ݱƒÍ^þÜ—þ€ºþAÿ�ã”nKÿ�@]Gÿ� ÿ�ñÊ,Þ=Îa~E•«XZO¦@om¦¶Žít¤ûJ¤¹ $02pxÆÞ@'uhMá Fèj1\k05®®€jp­‘cyk4DÈ|½Èª§;úd`Ö¿öä¿ôÔòÿ�£ûr_úê?ùÿ�ŽQfñîQÖüo¬ê^}®X$’U „š6-ßï&æã¾G ­«[Y-"ŽUûp$qÄPï 3–/žAF1ØœœñOûr_úê?ùÿ�ŽT1ø›Í’hãѵGh\$R3µ¶†ÇèÊ,Æ¥³7h¬oíùè«ÿ�ߨÿ�øº?·åÿ� ¯ÿ�~£ÿ�âélÑXßÛòÿ�ÐWÿ�¿Qÿ�ñtoËÿ�@_þýGÿ�ÅÐÍý¿/ý�uûõÿ�Göü¿ôÕÿ�ïÔü]�lÑXßÛòÿ�ÐWÿ�¿Qÿ�ñtoËÿ�@_þýGÿ�ÅÐÍ•g®-Þ¢¶2X^ÚÌñ<Éö„PT¨lÇœºþu«@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@·g©êZ›}7‰51-ͬS8H­€ È ÇîzdÕÿ�ìkïúu_û÷kÿ�Æhð§ü‰Úýƒàÿ�ÑkYÚ^»msãýgIW†çɲ·‘m„ÈÍždâQÈ ¦W=y�Ñþƾÿ�¡—Uÿ�¿v¿üf ¹ðÝÅâÆ³ø‹Ua‹*ü–à § ñ­fh~'ÓnŸÅ_ZÉic}[µEˆ¢0Byn€ £>»€äq§àLë>ÐïÞí.¦šÆ<ªÁ³.Á¿8î ŽÇ"€'þƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�ÆkNâHá¶–YfFˆY¥b�@,Iàc¯<W¥kðêž¿¼OÁ†þî!¨-Ä8E[‰< ÌêÈËä¯*AA ƒûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�®gPñtPø'CÔîu¸­.'º´ÞFHà ˜ÒwUoàÛ½²6œû×x rB('ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�¬ïk¶Úg‰¼5fú¼6Ïwzc–ÕæE2F`ŸiÁçAשç6ÿ�[Ô4¯¤êð]ZÝ\E:T71 ¢FERÍ’]€mî[Í�.8ã£þƾÿ�¡—Uÿ�¿v¿üf³õË]OLÑnïañ¤ÒB›•^+b§žø„RxO]¶Õõ/Á¯¢–·è±æG+·„ÿ�o3ÍPõ_ñoüŠš—ýq?ÌPÍËÜ]íø§Äê&?°\Ç4‚Ösn$f£öùu$ïÁÈ<œ?Ükðͨ.º·óï´yod\©‚e?êáÉ+ ¹uAÜH4è•ÿ�#^ÿ�\n”u„¼¿ìÉÚ)õY"k†dSŽu’µ~@gPì¹ÉÉÏ$€xâkÿ�ùôoúãsü£  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Èñ_ü‰Úçýƒçÿ�ÑmZõ‘â¿ùµÏûÏÿ�¢Ú€'ïEè®ƒÇ (¢€ (¢€ (¢€ M.Ëì²êy›¾×r&ÆÜlÄQ¦=þæZn“z×SjP²—B#øŠ7Éü\¢{oŒÒ¢Š+#Ð (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0–ãZ¾Ôµ(¬îì-à´¸XMfò³f(ä$‘*ãÆ1Ú¦û7ˆÿ�è+¥à¶Oþ?Fÿ�!OØA?ôš ~»©Í¤Ú[ÜE r+Þ[[¾æ ,ñÅ‘Ç8ÞOáï@ û7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú|ºœÑx¦ÓJ0ÇäÜYÏp$ w¸Æ1ÏœïŸz¡¤ø¡õ=vM=¬<˜í_fŸÎÜeû4Ë »—gÎÜŽxé@Ó´MÓ-,"ÕôÆŽÚ…ôÙ2B¨�Ÿßõâ¬ý›ÄôÒ¿ð['ÿ�­zËµÔæ›Äº†•,1ª[ZÛÜ#«XHó.cÉþí@ û7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñúͺñ]턚”zLKq–ñÙª]·^t¢%å£R¸fMÄpÁ'ŠØÐõFÖ4¥»x>Ï(–X%ˆ>ð²E#Fà6Fä88àP?fñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?Z’™gÊ _°c\|¾4ÔSAðö©‰çǩحÝÃ9KbV6 û¨dcí‚@C“@Ÿfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?Yמ1Hu;X­-RîÆD³’[µŸVêS%x,¤žF=+¨  ÝöãQÑ¡¹ºò¼òÒ#˜”ª®Ë $tõ5¥\l÷Zo„,n-^5ݪG†Låe¾XÛñò»~8¢ëÅ÷–þ2“Ok2šM½ÄrÜyAÙ¦™TÇϘ¥W.£!ÙÛÖ€;*Åñ{ð–¦Ì@Q $“ÀëKû§ñn§¦Êñµ¼V·mLd’áH'<ñþ´ß¨ jjÀ0A@·ôoú ØàJÛú7ýì?ð%?Æì þø ŸáGöÿ�@‹üOð ûFÿ� ½‡þ§øÖlº÷‹4…´¼·¸+ ÉaªøûpkKûFÿ� E‡þ'øTÖÚVg/›kak˜Æø¡U8ôÈnŠ( Š( Š( Š( Š( Š( Š( ²<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶  ûÑGz+ ñŠ( Š( Š( ¡Ñmf‚ëX’TÚ—‹$G îQKŸo™XséSSôëÈ®Zî(÷nµ˜E&GñGãðqQ=ŽŒ7Æ]¢Š+#Ð (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€24où xƒþ ÿ�¤ÐTšÎa¯ÃZ€º1ÄâEX/&ƒæ2“å²ä‚ Œô##ÿ�!OØA?ôš ~»©Í¤Ú[ÜE r+Þ[[¾æ ,ñÅ‘Ç8ÞOáï@xO}v-i¾Öo¡FŽ6ûlÛX�ÃËß³j“Ç%Aꥳðþ™§ê—•µ¶Ë«ÛÛÌfqÜÛT©¹€'h#'&’mCP‹_·²lrXÌnRã/ N^2¼)#h!‰ÉwªOŠS×dÓÚÃɾÕöiüíÆ_³L°Ë¹p6|ì1ÉÈ玔ÑÖe¯‡ì,õ«^!uöÛ”ÊÒ^LèT@ÌT�Y±€1¸ã5§YrêsEâ›M(Óqg=À1Ü o ãÇ>qÿ�¾}è ¼%¢ÜMu5żÓËr›溕ÙWp|!,|±¹U¾L`¨=Eiiú}®—cœ^\çj–,rI$’I$’I$’I$šç/ü}¦ÙêÚ…”MÒéúuÕõÑ‚åZHŒ£‚wœG*F;Ö¶…«Üj‰{åšZ^Y\}žx£›Í@Æ4m«‘¶Eì9È÷  ÷–‘ßZIm3L±È0L<.9Ï„0ü e i+¢[hè/£°¶]‘Å£p¤'÷KÜÊI ±)F| ¥û8ËOãO³x+DÖÚÁæ»Õ£ƒÉµˆ±ýä‘y„d)lV<)'�“@²xcF–îÊå¬Ud²DŽ�ŽÈЍr€ !X)åw´ò1ZõǯŽÖYì…½’Onëkö¹–f_!ç­ÑUY>%F ¸!�tϰ _GÐôkÖ«ªévWë×1un’„&VÎ7Ž‚·$ÒtÙµu 4ûG½vÅpЩ’5ôVÆ@äô®ú¥ÖŒ³É6 ®óNH‹Q¸Ö¿EW�~µá±ÿ�žú¯þ ®¿øå�X·Ð´‹MJmJÛJ±†þlù·QÛ¢Ë&NNç'$ÉíU|[ÿ�"¦¥ÿ�\OóïøF¬羫ÿ�ƒk¯þ9M i’¡I_Q–3Õ$ÔîY[؃&ö4³EPEPEPEPEPEPEPEPEPXþ-8ðn¸@'}Ç¿îÚ¶+#Åò'kŸöŸÿ�Eµ�Cg}qu3$ÚM墅Ȓw„‚}>IçðÇ-åĶЇ†Î{¶Ý.€õùÙF?±EtA–š­ë:©ðþ¤ œ2[`{ñ-iHÅ#fTg q–öÀüéÔPOö½÷ý šŸýü¶ÿ�ãÕ¡k4—,’[KlǬR•,?ï’GëSQ@\ϹÔn ¸h£ÑoîQq‰bx··H·"Ÿg}qu+$ÚU墅ÈyÚ ôùŽ »Er­íÔÖ¨† ›ÂÇ`hÁ_s½×ô¬­T½†µÿ� K~¤öÿ�'ú<#ŸÞûgŒõõâ·êŤ‘ºÈ¨êÍípJœƒèpAüEDö:0Ïß&‘ŠF̨Ò„\e½†H™¬¯í›ïúµ_ûùkÿ�Ç«^ŠÈï!µšK‹d–[im³˜¥*Yyﵘ{ðOZ§s©ÝÁpÑÇ¡ê(:KÀ¾›¥ó¥E�Q²¾¹»‘–m&òÌó¼$7°Ù#Ò¤¾»šÑ¡ÓîoK£}Î÷QùUª(.VòYÒ7ðþ¥ ³�dy-ʨõ8”œ}5£+´p»¬O+*’#B71ô dû)ôP7íÅߌ¬Ú]Ý–Ý>ëá¢;¿yoÓc·ëŠé+"çþG7þÁ÷ú2Þµè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(#Fÿ�§ˆ?ì ŸúMI¬èü1E¨ £N$U‚òh>`C)>[.H*ÏB21QI¡Kö뻫mgP´ûT‚Y"‰`eÜS#|lz"÷¥þƾÿ�¡—Uÿ�¿v¿üf€%]ÍuíP÷¢ä€ ýº(ávóÿ�,ñþÏ^zóIgáý3OÕ.5+km—W··˜Ìã¹¶©;Ss�NÐ2FNMGý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ½f?‡ì$×âÖÜ]è‘£FûdÂ5Vpò÷lÁÚ¤ü¼•¨£þƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh{­N½Ôöê4ÍhöD<Œcò\‚ë³;~b«“Œ�Î;JÑìt[V¶°‰Ò6s#™%yØ€2Ìä±8�rz�: ­ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ…å¤wÖ’[LÓ,r Ï Žsá ?YÑø_I‹B·ÑRÅ•¶<ö©|ÈqÓd›·® ÀàqÅ/ö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@'„4(æ³™,pöxò±3àåÁq»ìÌ ä†$õ9­ÊÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh¾ÿ�‘z/úí?þzÙªz^œšVœsK2¡cæK·sbÄ ¤ô®PEPEPEPEPEPEPEPEPEPEPY+ÿ�‘;\ÿ�°|ÿ�ú-«^²<Wÿ�"v¹ÿ�`ùÿ�ô[PôQEt8QE�QE�QE�U?ÿ�Çþ¿ÿ�aÿ�Òh*åKco>|‘ WžO2CýæÚ«ŸÉT~ØèÃ|eº(¢²=�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þµè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬ÿ�È®Ø>ýÕ¯Xþ,8ðn¸qŸø—Üp?ë›PŠ*­¥ÍíÌÅ%Ñïmß3ÂGÓä‘éRÞ5ͬ!á°¸»bØòàhÃëó²Œ~9æ·º<¯g>Ä´VhÔuä[Õý´¶ÿ�ãÕ¨ñJ¨Ì#g d*‘“ì2qG2g>Ãh¬ßíGþ…­Sþþ[ñê¿jn.-Ä’ÙÍjäœÅ3!aÿ�|3ÖŽdÊ}‡ÑT­ç1Å¢_\ ÷°¼Oý÷"ŸÒŸe=åÔŒ³i–` ‡á û ŽÆŽdÊ}‹5[BšI/5´y–+åHÁ9 ¿g„àz ’O½{«XÕ¡Ó®o 8)F ûî£J£¦O{isxçÃú ûeÀ™‹Im„ýÚGÚlããQ6¬taá%;´t”S%vŽ'u¤eRB&2ÇÐd“î@¬¿í›ïúµ_ûùkÿ�Ç«3´×¢¡µžK‹u’[Y­œõŠb…‡ýòÌ?Z©u©]ÛܼQhz…Ê.1,O�Vã¶éTûr;PFÊþæêVI´‹Û5 ó¼$éòHÇ?†8©/®æ´Dhtû›ÒÇ`hÁ_s½×ôÍ�Z¢²£Õ¯^DVðí%¶zœLN>‚´äb‘³*4…A!oa’æh*çþG7þÁ÷ú2޵뛊öâïÆVm2îËnŸuƒpÑß¼·é±ÛõÅt”�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÔ¯EPEPEPEPTlo^îóS…•@´¹XTâß'ñr? ½T4û9mouY¤Û¶êéføD1'>ùCúPú(¢€ (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€ (¨//mtëI.ïna¶¶Œeæž@ˆ£8å€'¢²ÿ�á%Ð~Ïiqý·¦ù7ŽRÖOµ&ÙØ¤!ÎçŒ óZ”�QE�QE�QEE=ÌÊq4q+ºÆ¦G ¹ØáTg©'€;дQLÆfhDˆeE Èn r#Ðíl}¥�>Š( ŠŽyᵂIî%ŽcRÏ$ŒT¤“ÀË+ëMJÒ;»¨.­¤ÎÉ :6pyPôTPÜÛÜ4ËñÊп—(G QðÖÇC‚¨©h�¢Š(�¢Š(�¢Š(�¢ŠŠÞæÞò5´ñÏf]ñ8eÊ’¤dw}Á  h¢¢’æÞ¡†YãIgb±#8 !�± ;<v€%¢Š(�¢ŠŠ{˜-•âhâWuLŽs±Â¨ÏRO�w  h¢Š�(¢Š�(ª—Z®asomyko=Ël‚)¦Ti[¦–<ŽMssogm%ÍÔñÁk¹å•ªRO�P´QL–Xíáy¦‘#Š5,î쪎I$ô�ú(¢€ (¢€ (¢€ (¦K,vð¼ÓH‘Å–wvUG$’z �}Q@Q@Q@Q@Q@Q@dx¯þDísþÁóÿ�è¶­zÈñ_ü‰Úçýƒçÿ�Ñm@ôQE�QE�QE�QE�^Úö+©ï!Œ0kY„2dpX¢?Øqøæ¬VV“¦§¯3#({åe$`0û4#Ôdø�Õ¢Š(�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þµè�¤ 2•`#ô´ŒÊŠYˆU$“€�y·‡¯l¯l<£Ã$rê:QCj0d´1ÙÍy‹Õ?xÊz’ÍJšö¾¶Ò]Ø_Ræ;­R 4ã_*ÂÓˆ[äPÀ–Ž$9<ù+¼ŽþÚ]FãOI º·Ž9dB„a°S’0rQúzU-C”¶«¨Þ^¬“ÉqºëËÜ­#—|lE,ÌzwôÀ ûÆ7VñÍgãï,¦kq5äñ@Ÿb‘®"FŒ€  ÆÓ6Öù—Ê$œWE¤k÷m¥øµmoÆ»u¤\H–¼G¾R-ÑÂ7–gÌ.œ÷qÔèo5í:ÃS·Ó§–Cwq‚‘Å’`ÚŠ©¹ãs`{Õ›Ûûm:(åºÆ’M ÛK|ò0D2ÌOÐÞ$xôØ®­üb×ÖÅÝòZÃÿ�Õ*ä¶Bm\°q %7dæ‘üOu z]½Ç‰¡ŽÚëW’ÒP¬*ní…³8evdK¶=Ê6’v+¾µ¿¶¼–î($,ö“y©R»j¾9ü®§#ŽjÍ�xÿ�ü'—qi·ÒÇâÈ.åm;V{n-ÿ�ÖÚÊ »Wæ/ç äÊ€lø‡W6v—_oÖb¹Ò“PÒ%‚òc�ÆíZX÷ B¤jý2ž+´ñ›³ ^iwPAzŸg’KU W!HV�H'NF2/ZÂöö±C%Ä·ŠÍ(Pî}NÐ~€ �àm5ýsSñÄÖ‘jÖY,ÏØüå3´>I£É$äÛÌ…1ÆÜÖ/‡üms‡¬ZâßÝÁ¢éÓ¸a“@Ï,‹tÛTÆ$ØvœŸ”g$’}vªßê6ºlqIvì‰,ÑÀŒ#fÝ‚ 8f'š�óû¿\Xé³Câ¨n´õ»°ŽÛX•aÁófÛ<dª¬m²1» çîšÖÒuûÇÒ¼Z¶wã\¼Ò'’;B|½ò‘n޼°«Ÿ0ºpÝÇPk³fTRÌB¨$œ�)hÆüK­%þŽ–ïã&¼Ò.e´k«­°DÖ’}ªc$&(e}¬ /“ó¤ƒÛx¶Cmà›Yíµ©`‰.¬YõŒ@´mqy Û³bä€ÛnA먠#Õ<Xš]ï‰õM'ÄVÍ,zí¤K§£Bës¾hÜAn‹&6‘ƒg88鼫밺—QÕtûø q²-´ÞcÁ';Ññ a?‡Ùaƒ’k¶¢€8+ísP·Õu†è4ýZM«¬!E«ÃÊä•Ü6 %pÄãäÁÍP²ñEÅׇ|7}wâ§´´Õ-<˽IRße½Ê¤cÉ¢nc);Á9M£í´½ iz–©zºåÁÔgûD‘Oå삪 ›PmD^Iû£¾IÖ (×¼Qâ„Óô˜bÕ ±žêÞè¥ÎëxŒ®’†W[ŽL„1 ó ü0uì¼J‚?;xµ®EvXG¤)·ˆùޱ¢–Û/š8*2œtÚ§‡WTÔÑÔïíˆC$˜Ìr($ò©äüÊTôçZ–vXY[ÙÚÄ"¶·bŠ5舣� €<¶ËÆ2Kâ;ëÇÁk¹d½ck½•cµ’3’úÙù ‚ún­_xÑoÙέâI¼ÍÓSa#EŸÍóÔ`‘6&wdÜžEz6HÖXž6ݵԩÚÅN¡¨ gÆ×ñIÅ{kª½œ?l²synÈ@‰®# Û˜2í ųӎr2¤ø¤Y‹I´¿Az·ºÎ«éˆbeqºæde oÜ[Éþ,*ñÈ'Õ ‚+[x­íãH¡‰G *¨�À ’€8Ÿ�júƬ.¥Ôu]>þl‹m7˜ðIÎô|COáÂ6X`äšç¿µ! ¢XÝx§ËÔŠuß4ù°([¤P¨†æUÇV½^Š�òÍ?ÆÓßÉeeoâhînšÛSdX|2íà¹U·ãi’0ÿ�t�FJã[x³ÄÃÃ÷7­¬iw1É$ÓÇrØO›æ0¶ û G+’X‘ÓÖ¨ ,êÚÄ õMRmFÖ}JÚÊæxo,È’7جѰ%_€ ¡IÎ�¬ÏêæÎÒëíúÌW:RjD°^Lc@Ý«KäHT_¦@c“Åvú¡^é3\Ïo äF$·Û¿cpÀnVŒŽ85nÖ·µŠ.%¸tP¦iB‡sêv€3ô�P–ê^={í{«Ã< ¦j3Û#Ç'…ÐDŠ6ä’ðÄ–Æ@PqRê>0¾³¸Ôí4ï[jH±XÏöÇxQmV—ÌmÉ�˜Xˆ,¯0H5êTP›Kâ‹Ë 'I›VñU”rþúG>\~×ËòËÆ¢L)ÃÕK•Æ6okSZkßa›^: ¿ØÖk[ƒn·Sn`Ñês´; Ûø<WgE�yΉpš‡ÄÅŸSÕ ¶¬t;&}'|[Dç4‘í+¿ä!‚Ï$®�‹ÇZ„vSxÒ+Ýdà ¾f´™ãTyÜ!+‘¸¶BY0sòãÒè !Õ¼i©Zø†]'Nñe•ŤAru ç‚·gþìH°º… FÃr“†Æï˜Wi«ë†™ð¾÷V¹¼¶SƒLy~ÑýÑœ!ÚT8äÆäWUE�yn¡ãˆåŸSžÏÆ–‘E¯ikmmnÁà™`Þù “·|Ì8YÎà ñj]xrÞñZ[ÞNêÈÞ"BÌâ'” l©‘co»óg ¿0#Ñ( !OkúÍÆ… ^ ‚Ánôû ‰$‚[Aó;q½f·pÁ†aÏÞ ×5ýW_u FÅàU‘f°†¸¶>rPÆ0w3n$8®ƒQð¶©{u-Ýýô–—xóì ŒÂøP¸å ¨ r€9>¦º �à$ñ ÷z³Á«Ÿík'ºX¼=ä!óUù-ÓÌùð¿vß›n3T.<Yuk¡ë7ډƩm5×Úd†%6wk´G  |ä·ÈÙa³œŠôê(Ë5_É!Ôìáñ‘ž vÒnþÙ ·–çl¼„Û° þ`pd•81ê~<’Øë6^(Šx[KÔg·GŽ$û=Ä.‚$Q·$ç‡,[AÅz½æ~(ñ Šã^›Mñmµ¼V,:…¤Q˜O+~RXU±Àç÷‹‚23éQÈ“D’Äêñº†VSÀô"E�QE�QE�QE�QE�QE�âÏùµÏûÏÿ�¢Ú¶+#Åò'kŸöŸÿ�Eµ�Iew«Mp«w¥Eo.·~aé´U«Ùn¡·Ýgj—2ä /–1뜳E�bý¿_Çü€­ÿ�ð<ñµE‹öýò·ÿ�Àñÿ�ÄV•œ·3[‡»¶[yrsËæ }p*Å›yw«ErRÓKŠâ$k½„þM-•Ö©4ûo4È­¢ÚNõºó}1´VVþkÈ!V²´K© `£Íå€0yηõ›«­K$ˆš5±16É�¿©Àl“ЃøÖådhßòñý„ÿ�I   c¤“Žc ý:¸?õþ?øŠÚ¢€+YKu5¾ëËT¶—$lY|Á\àUk˽Z+’–š\W€1#]ì'ðÚkJŠ�ϱºÔ札î›´[I—>a'#ŒmüûT÷Ó]Ã�k+T¹—v <¾X×8>ÕfŠ�ÇKítÈ¡ôHIa|®6V´…Ö'1¨w�•Rq“éžÔê(™†çQ›Æzx½Óã¶OºÚRãÌÏï-ÿ�Ùíù×MY?ò8é¿ö»ÿ�Ñ–õ¯@aøÒÒkÿ�kÖ¶É,—éó¬) ìûÐ1ÉÉÀÇ~ërŠ�ò­}š[­zçM‡Å̓lšsÃmz­%Â4åC6ÜÈG›C’æÝ§šzk×^<{«‹ýBá™- ŒþL¶Å0€ÈdòT‚C°HȯA¢€<ûS³—þ¹{§ÛjCVþÅŽ=:á–àZ™Àœ•fÿ�TGÍ Ãq»$|Ù¬«çºH-ç²¶ñ<¶}œ—–÷Ö÷3È“Çw™@À¶i1mŸ' ·“Šõj(Í®/nÞÿ�\Ùk‹e6³÷M¥Ä2Ékö8£&& ‘* „;¶†ÇQR {ìÉ=œÚĶs5¼wÊ“-´±¨Yd‡ÊL ß8Cë^‹E�p3Í­XøRÞîò=PßÇ{enéj³LÏ3¯&ÅÜpê%'ÕJƒ“ŠÎÖ.ïþÛ¬]Û¿‰c¸‡Y´[-–÷F·+™¶cc§Î@ÀÆ7 ú}Cwkõœö—Q‰m碖6èÊè4ç Lò_É.«ªßK©=”em..nÈ;IófòæUPX¼`ª† Ž ŠŸXÒïn!kë×Ö%¿‹]·‘máišl—‘•Äiò0�äà°`yãØéšŸ¤1{Xæi ìó..dÂÿ�t4ŒÄ/°8­*�ò]u-Lk±ZÛø“mî“©£Ar³í È` ü ïg 0 cšÓÖ®æ7ú{é±x«XyyŠèÇ$&p&Þ¸Ë0;¼Ü·�€9cè”P6·+yiÂ$¨²(`³FѸϪ°cSQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘â¿ùµÏûÏÿ�¢Úµë#Åò'kŸöŸÿ�Eµ�kÑE�QE�QE�QE�Sây]U¥mî@ûÇr�áO¬!™µ=|3ýB‚z³@xüI  j(¢€ (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€ (¢€ (¢€ (¢€ (¢€<ÇMðœx¿\þÌÒô‹+[]b{ȾYÕE½»¼*Š˜Øä°9||íòçš’ßèŸ ô 6}9¥¶ðò^Ï Ègy8£ápË´HÜIÁÀ Ù8î,ü=¢iñÝGe£éöÉv6ܬ6È‚aÏ�ù¾ñëê}já? ¬1¾Ò„Q†‚Ê=ªï`cŒ÷õ  KÏk0jwì§}‚ËX´Óš6‰üÙqX6ü)S?÷Nvö£ÂÞ(×5ÍW}Η:<ë)‚mцVGÀ^&f|Œ“”M¤c¶ÿ�áðÞæoøG´Í"ÊOØ£ÉuÎÖéÔdàöÉ«¶úVg{q{makÕÉÌóÅ «Ëþó–ühƒZÂÇWÚƒÄMâO²™婈Üìò³×gÙ¾}½?‹­z=S:NšÚ˜ÔÛO´:‚®Áta_4/¦ügÙ«”�QE�QE�QE�QE�QE�QE�WâËKøLôñhšíÓ]X];[Øê­nŠñ½º¤…ZE@�v�ÙÝ’­]íe¿‡´çñ zë-ÉÔ"¢Gû\»�WËݳ�Ÿ—¨¨€04ÝfÃO×–í×QÔm/má*÷\eÚÖÔ¾ƒµ7»¶�'“€IŸkã OP0Yè5íÌw¬ñËzQ#kiÖ¼²H,Ãh> vÑ›ÁzÄ÷“ÉÑ’òt¹˜‹ùÇïW]@‘†Õ�®8�tâ™ôfIb†ò'EǨÜ.Ñ1Ý&�“Íó}@#(ÿ›Ä—Ö i¡^ý†íFn„R‘÷ÇËòöƒòdHN‡Öç‹eš *Òh'–'‚f7+¹^ê$`qÔftæ—Hðv…¡<m¦ÚËÆ¡V?µJÑð0£1RÀ�7œÍZÖ´ ?ÄC¢·R,¨!º– :Tæ6\@#=È  :)B¨QœŽNOçK@Q@Q@Q@Q@Q@Q@wÄ6Îÿ�öÏq§Y^ÜE©Y-ºÝ´—º‰YKmb”ØŒðzUJoøÆÄ]ýŽÔMa¨L-­œ˜mP=˜£0¨Ã7@vÀ» OCÒu¥u].Êýb$Æ.­ÒP„õÆàqÐRÝhºUõô7×ze•ÅÜ#lS˼‘Eb2:žž´ƯŒ5ÄŠí´™¦Ù’A$QÈ")w9‹.IÛ·pl.Aû¢’óÅþ!¶¸›H‚ÚÒ÷UMAíR[xB£"ÛÅ7ú¹'O›÷»qæ 8=+§oøaáò[ÚCE€6ˆÀ$¾¤ŸÄÔ­áàžÐôƆâ_:hͤee“ûì1Ëry<Ð Q®xnÕõ«Xâ2Æuj$Y#ÝüHHÈeÝÛ¡ÆFEEá}*-"Úö+xŽ´×M4kÀ¶Bªü •/·±r;VÞ™ablo,m®lÈ�Ûͼx>R1Æ)4í+NÑí¶™akebæ+hV5,zœ(<Ê€-ÑE�QE�QE�QE�VGŠÿ�äN×?ì?þ‹j׬gþÝs'û>ãûfÔ±EgY]j“O¶óLŠÚ-¤ï[¯0çÓEO5ä«YZ%Ô…°QæòÀ<çÛz�µEc ý{<èpcþ¿Çÿ�[!I' �Z+_ëøЭÁÿ�¯ñÿ�ÄV”·S[î¼µKirFÅ—ÌõÎ�Y¢³o.õh®JZiq\B�Äw°ŸÃi§XÝjsNV÷MŠÚ-¤‡KŸ0“‘Æ6~}¨B«ÛYEk=äÑ–-w0šLžDãÛ?Ò_Mw ¬­Ræ]Ø(òù`\àûW=a®ëÒê:”i‚éc»»SlGÜù¹bv¡+ŠRQWgUEV’ì¬lR=î*¥±“éžÕ“ý±®ÐüüEW+3öÔû›ôUKÙ¥·Wº¶JzƲoñÀªwZ¦«Ë¥¶‘ðŒm‘®Âãž6œs‘ÖŽVÚŸsjŠÉ±Ôµ¦e½Ó#¶Œ.C¥Ï™“颤¾Ô.áD6V+rÄüÁçòð>¸9£•‡¶§ÜÒ¢°SWÖ‹¨}Ry"ø¦ÊÕ’ì¬lR=î*¥±“éžÔr°öÔû”näqÓìwÿ�£-ë^¹{[Ëû¿Øý³OŽÔ.Ÿu´­Ç™»÷–ÿ�ìŒWQS±¢jJè+•Ó´-3S¿Ö®/lãž_·²ï|“€‰]Us–VÖPk÷—±Ù[¦ Åî$‘QPl«7Óñ e¯øD´úÛþFøD´úÛþF¹3ã#ømámZãÄ6Ñ]\<M#\F¾qóa[ŒçûªdÝ»ÎqŽ/ø‡_Ô,¼aeeo}åFÿ�cò-jßmógdŸ’7~ê0¯ò‘ŒääPïü"Zýíÿ�#Gü"Zýíÿ�#U|yª®à^ôj+a<v“iERÓylQFî¤0'‹5Tà ©iþ$¶Ó‹%µÃI †ã#!rÊÛêOa@¿áÐ?èoù?áÐ?èoùç,¼Q{ãk{xîäKyåPºl°*²Úµ˜˜\7Áó”yÛÛ滋‰#†ÚYe˜A!f•ˆ�±'޼ñ@_ð‰hô ·üð‰hô ·ür+âGÁnÓ|YaÙõ‹¸¦»–òW„K0‰<ÆŽERWÉ`v¨ã®j=gÆZ˜ðæ“ku%‹Mgu,eÑ$7·12,0‚P&˰ڪÄ�FÞ”Ðê>Ò…ö“ö}.?(Ý·Ú6©ÆÏ&\nöß³ñÅhÿ�Â% Ð.ßò5©-Ì0Ir8WÌqï6Öl~JÇð©hþ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘¬¯xoG³ðíõŽ„QM{‘Ó ©ÈäW]XÞ-ÿ�‘SRÿ�®'ùŠ�§y¦Yjž2t¾·IÒ== +ôÈù? «Ÿð‰hô ·üE,‘ÃâËÉe˜AihÍ+#å‰< u犡áŸØßxRòþã^¶k{{û¸ž÷ííŽ1râ<·ÝËÁî#¨4©ÿ�–ÿ�@»ÈÑÿ�–ÿ�@»È×&|a ¼-«\x†Ú+«“§‰¤kˆ×Î>l+qœÿ�uL›±÷yÎ1Ç O,qÚÉ4“¬1*i‹�q’Ù<`uçŠ�Ëÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äk3Ã:ÜÏ„¯îF½¯/b7ÑMQg“Ë9 ¨ýÞÂ2 ƒÈ5‡'Œ¢ƒÂ6w7^%·ûDz´6ÆìÉqÝÇö˜·²œ�ê!|3(†8à¯ÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äk`@ ä„W&ºn¼Iâ#Mñ¢ÝäÆöþdѰµŸuÀv+Ž‹ˆwÜõäsþ-þvÿ�‘¬Ïø_I‡@½’ÏKí còЖϰ®n_ËüLókÑ5ÍŒmµ(ïa–9¦hܤHë J\¨R~aÉÎ+Ò¡fÖ ~·Pµ› ‘gWOF 8#Þ€3¿áÐ?èoù?áÐ?èoùÙ¢€1¿áÐ?èoù?áÐ?èoùÙ¢€1¿áÐ?èoù?áÐ?èoùÙ¢€1¿áÐ?èoù?áÐ?èoùÙ¢€1¿áÐ?èoùÄò’ëÀ†qæG/ØEb~`vg>µÚWoÿ�"?„þºþÉ@ð‰hô ·üð‰hô ·üP¸×m¢ø§èãW‡tÖ-%‘™7 @cù~öJ™HõAÆ~â>æñL me{¥âO #h!ä s! ŒnÈíŠ�ßÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äiþ¹{½ÚwÕmõRÅñynP¤ ;Ê|»€�qpJÍÒõÛkŸë:Lz¼7>M•¼‹l&Fhäó'ŒA�D=2¹ëÈÿ�øD´úÛþFøD´úÛþF¹áâ(muMzÎëŪֱD³%Ò›rlNý¬Žû)%*¸cÁ$žÝ'†®^ï@¶õ[}T±|^[”)(ÀrŸ.à�dÒ€ÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÕk¶Úg‰¼5fú¼6Ïwzc–ÕæE2F`ŸiÁçAשç7IÖõ K¤ÞjðjbæYöAms$<È–dB¦ZFËœðÐÿ�Â% Ð.ßò5£xOJ62}¯KÍû]Îß1Nvyϳðٷة|+ªE©ÝjMmâ{mnÕ lThZH ÝÞPiÀÛ¸gånMt÷0ÝFdàwŒ‘ýåb¬?ü(/þ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘£þ-þvÿ�‘­š(þ-þvÿ�‘£þ-þvÿ�‘­š(žÐìm´ïk6ö‘aÛ°Eè “úQV,?äkÖë·ò’Š�Ù¬ÿ�È®Ø>ýÕ¯Y+ÿ�‘;\ÿ�°|ÿ�ú-¨^Š( Š( Š( Š( ±â²{]CR™™H»¸Y”á(ÓñBجµ¾[»ÛØU ›I„,OñI‘ø8…T70Äÿ� ’Š(­8(¢Š�(¢Š�(¢Š� ?äpÓÿ�ëÂëÿ�F[Öý`ù4ÿ�úðºÿ�Ñ–õ¿XÏsÒ¡ü4 ¯Ö¿ì"ÿ�úVÍs–VÖPk÷—±Ù[¦ Åî$‘QPl«7Óñ©6::+‡²ñ ô=RïÄñØMsk½ø–š/æRd3¸6F26ž•^÷Äz¤ÖnºÄ™ °hÒÞ$1êFYŠ\: Ú‘ Úx “‘@EUÔn­¬¬%¸¼½ŽÊÝ�/q$ŠŠƒ=Ù¸Ÿyý÷Œ¯í¾ Yk¶s=ÅÓé*ójInV8‘€$Éò•PÇ9s@•Eq_ÛÚ‡ü,_ì϶þëí^Oö–¿ñíö_7í9Æïõß»ÎvöÆy®ÆâHá¶–YfFˆY¥b�@,Iàc¯<P”Wmâ«™¾êzž“}£wosÌdGö¶UvÇXJ¿º€zźñ®®º/¦HRïË»CÄz•Ìb&†ÜDŠÊþc¯ÊªÙˆ€r ƒ¬ÿ�ÈSÃÿ�öý&žµé­;#2+;”‘§dzpHüiÔ�QE�QE�QE�V7‹äTÔ¿ë‰þb¶kÅ¿ò*j_õÄÿ�1@Èë?ýƒ£ÿ�Ñ[5ŒŸò:Ïÿ�`èÿ�ôcÔZŽ£r|E¹¶Il/V&x ESo‡r†¹‘¿ˆv ‚Šæou-nÇö7wbÖ+Ö¿¶·bBQÒK¤‹+“•Ê6ps‚q“ŽzVÜQ‚2úPÑ\þ•®L|7u¨ß$“¼—pm¶·wfXîd‰pˆ‰Â®psY–þ&Ô®ü#i«ƒ r¾®¶N¿gtÝ¿ÿ�uÎäm™$Aì1Š�ì袹«Í~çLÔüE稸¶Ót¨oãŠ$ñ-q¹sÎI¯ãš�ékÅ¿ò*j_õÄÿ�1T<-¯j:Ì7vº„ik©Â"˜ªÂ¤aHÛ³±ù;OL ï÷M¯ø3H¼Ô#ŠW¾°‚yР(Ìè¬x=²hfŠ( Š( Š( Š( ¸ëùü'õÓÿ�öJìkŽ·ÿ�‘Â]?ÿ�d ÆŠåî5Ûh¾#éú8ÕáÝ5…ËIdfMÂ@Ðþ_½’¦R=FãÐqƒ­[]Ç­\Gâû]JÆ%{>s1Œ À+¸gål“@eá+á¨i“ÌšôÔ"á–+ˆÚ"È»TìÅ„Þ '€8+‘žMkvÚ/ˆú~Ž5xwMarÒY“p4?—ïd©”Q¸ô�uW oâ©çÕ¼Q©{.‰kakhß¾{RÖ¯#J Ü×,< 9ç;@#=/†®^ï@¶õ[}T±|^[”)(ÀrŸ.à�dÒ€5¨®_ÄZí¶™âo Y¾¯ ³ÝÞ˜åµy‘L‘˜'ÚpyÁFõÀêyÊ¿ñF«iñ l$t[<0Cd’¢Ír²(ÌÁ 3:#1ÎÖM¢2NîE�wµ‘á¯ùÍÿ�a ßý)–¨øWT‹SºÔšÛÄöÚݪبд»!¼ Ó·pÏÊÜšèÒ4JÆŠ€’Ä(Ç$äŸÄ’hÔQE�QE�QE�QE�cXÈ׬ÿ�×oå%XÈ׬ÿ�×oå%³Y+ÿ�‘;\ÿ�°|ÿ�ú-«^²<Wÿ�"v¹ÿ�`ùÿ�ô[P½Q@Q@Q@Q@`ÙÃ,Z®¶òFʲÞ+ÆHÀeû<+‘ê2¤}A­ê¡%Ì3ÜMnàa£û­´6?&SøÕCs OðÄ¢Š+cÎ (¢€ (¢€ (¢€(ù4ÿ�úðºÿ�Ñ–õ¿XþG ?þ¼.¿ôe½oÖ3Üô¨ `h—vÐÝkI-ÄHßÚ/ò³€~âVýsZF•§]ÞëS\ØZÍ/öƒ òB¬ßq;‘Rlt„€ '�u& þвÿ�Ÿ»ûø?ƧeWR¬) Œ‚+?ûFÿ� E‡þ'øPèåŽd«¡þ%9É.í¡r’\DŒ?…œKom¤"h#† I Qž¼ ‚ãIÓnæ3\éö“Jx/$*Ì(x®`ŠÅ<r2B84²Ï iR0Nv'ñ¨mtÛ g´²¶·f-J„N>êÊÒù.ía¸E;•eŒ8Ôf€_Ù’�»€“Ð NÌK1@É$ðP] GF ºUа9[  þUyÑ%£‘UÑVV Š�ÃÕµa©hA/! o˜>%#ìóuç¦qúVär$¨7WCÑ”äÉŸÂÚÄÖÒ¶—h¦ÞS*…�bQ“ Ç# OÔ Ô‚ÞXVxc†%ÎÔB¨ÉÉÀô�Ǽµ‰ÊIs 0ê¬àNŠêÞv+ñHÀd„pN*¼ú>—s3M>›g,­÷žH‰ú’)öºe…”†KKkw#ih¢T$zd �šYá€4©= °üê1fÌ]ÀI8�H94·V6—Ê«wk©ʉcöÍVM HÕÓJ±WRX[  Ž„q@É ¥˜€�É'µAý¡eÿ�?vÿ�÷ðNè²##¨ea‚¤déYÿ�Ø7ý,?ð?€/Ç"Jãut=NA¬/]Û êQˆ„žV6Ï«n!¶…a·Š8¢_º‘¨U@+žñ~•§?‡µ+§°µkƒã)…KçŽsŒÐÄÿ�‘ÖûGÿ�£…<9½Õ¼z”]íûDkgY¶œãlF{Õ­'NÔük'Ûôû[½št{|øVM¿¼~™ÐÁ6Ð$D‘CÚ‘Æ¡UG    É|+áÙìmìfÐ4¹--‹ {8Ìq9mªF'“޵©$1MÁ,Hðº”hÙAVR0AÇjΛÃZ ÄÏ4ú&›,²1gw´Ff'©$ŽMY±Ò´í08Óì-m˜ßöxV=Øéœž¦€MÒ4̓KÓ­,avÞÑÚÀ±)lc$(8Ÿj©/…|;=½ŒÚ—%¥±cgŽ"Ç-µHÂäòqÖ­_if¦ÈÚ†ivÑ‚Ü@²®2:T6þÐí'Ií´m:å$ŽÕ”ú‚E�i��� Ð ¡o¡išŒÚ¶•c ôà‰nc·E–LœÌNHOj·små»ÛÝAð¸ÃÇ*VúƒÁ¬ßøE<9ÿ�@ +ÿ��ãÿ� �–?h‘ióéñèúzY\6é­ÖÙrV\`ž_J£®YZèþ ¾¶Ó-¡²‚8‰H­£ª’rp�rI­ØaŠÞ†Ò(aQ*¨ô�t¬}KÂÕ"¸["Ç̸ɒe¶Ì$œ“¸Ž¾ô·ET±Ò´í08Óì-m˜ßöxV=Øéœž¦›}£iz›«ßé¶wnƒ ÓÀ²ƒ"€.ÑY–ÞÐìîâ×FÓàRH­QYONzæÚ Ëw·º‚9áq‡ŽT ­õƒ@ÑYðŠxsþ€WþÇþ«ikh©�ªª0€ �u•'…ü?,$š˜îìY™­#%‰ä’qÉ«v:e†˜Ž–6ÖŠç, ‰c }ð9  UÆÄë<(îÁT?%Ž�û•Ò^èºV¥*˦Y]H«µ^xÈq’:rk˜ŠÚ >øV†6…Žž l ©/n”ØÅq ùòfŽLuØÀãò¤–æMdôàgó¦ZØY؆–[‡Æï&0›±Ó8Û­6Æù•®ì­®F˹Û"€—¶²8D¹…œôUjWt Èʪ:³TáÑ´»i–h4Û8¥C•tU‡ÐV¦‚+˜ZâIbnCõ€#þвÿ�Ÿ»ûø?Ƨ2†R# ŽõŸý£Ð"Ãÿ�“ü+AcEDPª£@ÀÒ€ 7öjÅMÜ�ƒ‚ ƒƒRE<3‚a•$©F•S} H‘ÙßJ±gbY˜Û¡$ž¤ñVmlm,U–ÒÖ uc–FïŠ�t·Vð0YgŠ6# ;€qY¾†k WíQ¼†úðæqö‰1úcð­+­2ÂöA%ݵô4±+=2EUÓ¼;¤é\ÚØÛ¬žl’‰<¥ ¥Ü±�ÀˆØ  )$H¼Ž¨£«1À¨´,¿çîßþþñ§ÏoÔ&ˆcš#Õ$PÀþ©ÿ�`hßô°ÿ�Àdÿ� �ÐV¡”‚¤dx" 7ö`nàuAS"$Q¬qª¢( ª£�ÐT[BÑÝ‹6•bÌNI6èI?•�\Šx§RÐÊ’�pJ08?…$·0@Áež8ÉÜ m­•¥Š2ZZÃnŒw2Å@O©Å2ëM°¾u{»+k†Q€ÒÄ®@ôäP‘Þ[Já#¸…ÜôUpI§É,p¡y]Qñ1ÀªÖúF™i2Ío§ZC*ôxàUaøSÜ[Aw †ææˆJH”ã§€1ô¹¢›Å:ËE"H¾U·*ÀŽ’QLÑìí¬¼O­Gko b¶%b@£8~Š�è*†¹e.¥ jV0\ÚË $(fBHŒŸJ¿E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�¬ë{OÁy¨\}ƒJoµÎ&Ûý¡ Ùˆ’<¨çîgñ®¢ŠiØ™EIY˜ñýt¯üÉÿ�Æ(Ljÿ�è¥àÆOþ1[ôSçf~Ÿc#ÿ� n•ÿ�ƒ?øÅñýt¯üÉÿ�Æ+~Š9Ø{ }Œ xþºWþ dÿ�ãcÄô Ò¿ðc'ÿ�­ú(çaì)ö01â?úé_ø1“ÿ�ŒQÿ�Ð7Jÿ�ÁŒŸüb·è£‡°§ØÁ²²ÕŸ^‚úúÞÊ¡µš ¹yY™Ú#Þ5ÀYõë[ÔQRÝÍcdËG$0é¾#{„½x…û[!)˜åc/•óþ+È5ÔÖ6þ¿Zÿ�°‹ÿ�è @ÎoR¸û'ƒôŸ)õûÙF¡ˆíctÓ’íA"ìÝ` Œ°džgñ ÕÏŒ,¯öŸ”~Çöo³ïò?×·Ú¼ì|¿êvíßßîó]µ‹â™-ÓGÛr5M¯ PtÑpdSƒÉòp£¯§@zÖ_ˆ!/à«UúßÚ–0]ZÁp.M¼4‘Æ÷  žG®ºŠ�àì§×.|moq5¾«l%•]àræÚ+Cf RGîüÑsÇ÷°?»]­ã¤v7 ˜¢ÆÅ¼…f“çh_˜· ç¥OE�yìöfï»íµ[E f =® ó1òˆSï-¿vìnÉ[Y¸ñ%χ4™VÛU·¹ûÒÅŸ»íaZ´Ã%‚2‡fpä‘^—E�gj7s[_iFÀ%ÍÛE(Ær¢ _ðå´jõ“ÝÞi“+(—-3ü@Ã"`~.áW¨�¢Š(�¢Š(�¢Š(�¬oÿ�È©©×üÅlÖ7‹äTÔ¿ë‰þb€ ¹š;ßÍ-ÂÛE”®ó±�DÈKñÇ^xâ«èZŬž¼¾¹ñ]¥õŒsº‡›ùI…ù$dÄa²OaÃ/~júÈë?ýƒ£ÿ�Ñ[4çGÆGðÛÂڵLjm¢º¹:xšF¸|ãæÂ·Ï÷TÉ»wœãw×rF–ÈþiŒDÌ|€ÌäcøBüÄúcœô©è 2Î;Y|#¨»ñÙÞrщb¾6ÿ�*áW…Ôs’9#8u Bí|¡½Í®´oÖêÓvÛY¥•£Šæ?2I%;KF¬Ø`Ì@È®öŠ�@rõõ®:HSPÕ5Øm5ÙI%œð1x.ŒJç�M uÚyÚ#?6sƒ€k²¢€<¾[F?øšËÈÕî�ÓN¸KKñ4³¼n6앤”*Ÿ9!2ݱšîuMáðÅÆ¥g½B$͉‘†q÷‘€ û kÕ jÁõ=êÊ7Ty“hfè(ýQ@Q@Q@Q@qÖÿ�ò#øOë§ÿ�ì•Ø×oÿ�"?„þºþÉ@4·†_ß<khV7I º†çìÎÁ×ç¤_,cg 88Ífi×ð´,3[ëÂÓí±¼ Z^G+Æ`…?vv‡?¼Y3·‘ÉèA=Å“ᥠ [s}p¹}²_Ç$sc{`0àp ç9ª[Ã/‹ïž µ´+¤]Csög`ëóÆÒ/–1È3†œfºZ(…­ž©¯FSÄ—d‘+± y˜¥‚“™íùÌ_*„è9'¤ðÒ…Ð-€¹¾¸\¾Ù/ã’9±½°Hð8†H�óœÖµÍk¯ x‡K‹ÎÖà¸Y#q%¤7/nË¿”“b˜¾nA/‚£œŽ ei1ê:wŽ¥†9õ BÚæYÚáî`¼DµBYÔ#É!…€;c4ç®{ª(šð«Ã-Ö¥5´Úß”åÙõ8nTF~l²4ê ÝÆUI Ó<êh·s^ØË,ìÖîæ @ÇÊ“º/袴jŽ“dú}œÈÊÅ®n&}$™ÜÀ0zŠ( Š( Š( Š(  kùõŸúãmü¤¢‹ùõŸúãmü¤¢€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+–ŽHaÓ|F÷ zñ ö ¶BS1ÊÆ>_+çüW2k©¬mý~µÿ�aÿ�Ѐ9ÛÃøWN¯üRdv”Áy ­éž,1Ç˜Š››nB¨•pÀgžMMâ/íøLlþËý§å¡ý›ìûþÏþ½¾Õçcåÿ�S·nþÿ�wšíh  _ßÛéú?™q®®¾@‘Ü–…rä.e{g×�Ö‹üG©hŸ[Sµ”\Ü}ƒÌ:£@!Y6 ®®Wb09 àHÏoE�q_ÛÚ‡ü,_ì϶þëí^Oö–¿ñíö_7í9Æïõß»ÎvöÆy®ºòhíìn&–ám¢Ž6wˆ KñÇ^xâ§¢€8oíûؼ ªjZ^·m®IÀH.—Ês lc eò°…39à|¸Èëœ ¯êë¡Âñjad….ü»´1\G©\Æ"haÄH¬¯æ:üª­˜ˆ “ëPKËáiu§ÃåîûeÁ‡9ÆÌDògßý^?·Yz¬˨èlË ë<„º¿g™rñ­J�(¢Š�(¢Š�(¢Š�+Å¿ò*j_õÄÿ�1[5âßù5/ú☠.fŽßÄ÷óKp¶ÑG¥+¼ì@�òÇ<qמ8ªnµnÞÔoçñ…½ÅœsMN7·ß˜G y[òº8eÈÏ]dÿ�‘ÖûGÿ�£¶h‚Ô¼K›àý&öãÅ–2Ë.¡-Üs‰sÚÑdéò’±W�a»k¹â†Âyä¹[x’&vœ‘ˆÔ –Éã�sÏ=ÆÙkòÇá[ÝFÛV †9Ø «imÛÄ12±d‹rò{pˑ֩]x¨Úü<ð¶­¨ëpÚ^Þ6IZI#‹Ï$>yÁÇÉÆ�žÜwôPƒÐŠã¤×e]W]:V¿o«Ïgg;t&T1´(L8\ü­¿'$`Šì¨ Â^(k½'RmgX·hí|¹$ÔÒæ/!Cç÷{‚(FR¼©ÜFñóŒhxÄ~oÃ-/]y–þQ§C$]€8$pl‚;EuU•âKi®ü9}oo’Y"!Pu&€5h¢Š�(¢Š�(¢Š�(¢Š�+Ž·ÿ�‘Â]?ÿ�d®Æ¸ëùü'õÓÿ�öJ�¹.©ñÌ|'¶€|ý"F‡s,°(0$ÝÑŽIsÇzƒAÖ­®ãÖ®#ñ}®¥c‡€½Ÿ¹˜Æ„àÜ3ò¶I®²Š�Àð•ðÔ4ÉæMz jpËÄmd]ªvHbÂo“ÀÈÏ&/TŠïÅ÷Ö¶Þ'¶¾Ž(ÜK¦–„Éo uP€8Q’­¿<‘‚:WKE�p–þ*ž}[Åj—²è–¶¶ûçµ-jò4 ÁrÁcÀ“žs´3Òøjåîô ißU·ÕKÅå¹B’€ì)òî��qÆAÀ+ZŠ�æµÝR+oévqøžÛOº’HÏØ'hqs|†ËUvž£kÿ�Å­§Ä5°‘ÑlDðÁ ’J‹5ÊÈ£3(ÌèŒÇ;Y6ˆÉ;¹ÞÑ@×…uHµ;­I­¼Om­Ú¡MŠ I;²Ê�m8w ü­É­­6øj¯0ËÛq48ÎsåÊÑçñÛŸÆ­Ö^¶út©4lŒonÜùZâFSø‚ã@”QE�QE�QE�QE�cXÈ׬ÿ�×oå%XÈ׬ÿ�×oå%³EPEPEPEPEPEPEPEPEPEPEP\¶—¡é…þ³q{¥ØÜÌ5dÖè퀉’3]Mchëõ¯û¿þ€”°@e*ÀF=ë#þ?ù—ô¯üü+bŠ�¯gag§AäXÚAkwypFsëU®ô þàÜ^i630�É5²;täŒÖBËDÒtÙŒÖ]•¬¬»KÁnˆÄuÆ@éÀüª{Û =F õ¤QÜxè>¸#¯&¬Q@)áFêé¡iŠêr¬¶‘‚¨âµ$%£‘ãpU•†CÔN¢€0¦ð÷…­å·Š]JW¸ÅûÌŸw•XóéZö¶–Ö6ëoio ¼+Ò8P"ÀqYÚÏü…<?ÿ�aÿ�Òië^€3®¼?¢ß\½ÍÞ‘§ÜNøÝ,¶ÈìØ$dð�§ÙhÚV™#Ia¦ÙÚÈÃk4,dB@«ÔP[í6ÃSc¿²¶»DmʳIJ�zd:Õ5𷇑ÕÓAÒÕ”äg þU­E�2X£ž'ŠTY#u*èã!à‚;ŠËÿ�„Sßô�Ò¿ð?ð­z(kd¶´·ŠÞÎØ¢@й98É&¹ßèšLº£{&—d÷~^ï=­Ð¾xçv3]Ecx·þEMKþ¸Ÿæ(Þ•§j~5_ØZÝìÓ“gÚ!Y6æGé‘ÅtÖÐYÛ¥½¬Á $q U_  ËOùgÿ�°tú1ëf€2çðÞ…s;Ïq¢éÒÍ!ÜòIjŒÌ}I#š±c¤éÚ_™ýŸ§ÚÚy˜ßöxV=ØÎ3€3ŒŸÎ®Q@ï´;Tòÿ�´4û[¿/;>Ñ É·8Î23ùUx|5 ÛÌ“A¢i±KGKDVR:@àÖ¥ðCsÁ<I,2 ¯ŠXzzŠÌÿ�„Sßô�Ò¿ð?ð­z(8 †Ú‚’(cR8Ô*¨ô�t•¡øn4žþÿ�HÓ&If’Ñ’z’q’kf±¼[ÿ�"¦¥ÿ�\OózÇJÓ´ÀãO°µ´cÙáX÷c¦pzšmö‘¦jl¨iÖ—m! Ä !Pzã ã¥]¢€2àðÞ…m:Oo¢éÑMÜ’GjŠÊ}AŠ¿små»ÛÝAð¸ÃÇ*VúƒÁ©h  øE<9ÿ�@ +ÿ��ãÿ� ÔŠ(à…!†4Ž(Ô*".@à�AO¢€2æðÖƒq;Í>‰¦Ë,ŒYÝíQ™‰êI#“V¬tË 1,,m­ÎY`‰c }N5jŠ�£{£iZœ‹%þ›gu"ªÓÀ²="¹tµ·›á÷…­¥‚'·°+DÈ °;ré]µqÖÿ�ò#øOë§ÿ�ì”ÓXéZv˜iö¶‚Loû<+ìtÎ�ÏSM¾Ò4ÍM‘µ :Òí£!¸d*\dt«´P\Э§Iíô]:)£;’HíQYO¨ qWîm ¼·{{¨#žxå@ÊßPx5-‘ÿ�§‡?è¥àáZ‘E¤0ƑŅDE¨��è)ôP\ÞÐn'y§Ñ4Ùe‘‹;½ª31=I$rjÕŽ™a¦#¥…µ¢9Ë,,a©Àæ­Q@otm+S‘d¿Ólî¤QµZxB $U]7Gðîõ½Ó´:9"•ãYb´Detbƒ€Fa[‘á¯ùÍÿ�a ßý)–€4n­-¯­žÚîÞ+ˆ¢•«`äd Îÿ�„Sßô�Ò¿ð?ð­z(±Æ‘F±ÆŠ‘  ª£@è�¬É</áùdy$дÇwbÌÍi,O$“ŽMjÑ@ltË 1,,m­ÎXAÆûàsQÞèºV¥*˦Y]H«µ^xÈq’:rjõkáýÆå.m4>ÞtÎÙb¶DeÈÁÁ#‚E[º´¶¾·k{»xn!n±ÌÔþŠšŠ�çt=>ËNñ6µ½¬f+bR‚püà *͇üzÏýq¶þRQ@4QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE� ¯Ö¿ì"ÿ�úVÍchëõ¯û¿þ€”³EPEPEPEPYŠ–PJœ©#¡Æ2?:udkòðÿ�ý„ÿ�I§­z�(¢Š�(¢Š�(¢Š�+Å¿ò*j_õÄÿ�1[5âßù5/ú☠?äuŸþÁÑÿ�èÇ­šÆOùgÿ�°tú1ëf€ (¢€ (¢€ (¢€ l‘¤±˜äEtn °È?…:±¼XHð®¢AÁòOó³EPEPEPEP\u¿üˆþúéÿ�û%v5Ç[ÿ�Èá?®Ÿÿ�²PcEPEPEPEPMDTE 2N�Ç$äŸÎYÿ�\ßö½ÿ�Ò™h^Š( Š( Š( Š(  kùõŸúãmü¤¢‹ùõŸúãmü¤¢€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+–Ó5ÝN¾Ö¡¾ÕlmeþÐfÙ=Â#cbs‚zWSXÚúýkþÂ/ÿ� %�lC)GzÉ>+ðè8:þ–ý~Gþ5¯E�W²Ô,µ(LÖ7p]Dix$ úd¼Š‚ó]Ò4éü‹íVÆÖlnòç¸Dlzàž•~Š�¡g®éŒþEŽ«cu67yp\#¶=pJž÷P²Óa_]Ákm¡ç"“é’zðjÅ<WáÒp5ý,ŸúüükXªYˆ� ’{RÑ@3x‡Â×ÛK&½¥·Ëûl|1FLõôvüë^ÒöÓP€Oeu Ì$$†@ë‘Û#Ч©ÜÍ¡¢Ç…R{ÆŽP?‰|‰›÷Ò©ü+N€3®õýÂàÛÞjÖÓ(Ç5Ê# ôàœÓ¬õÍ'Q˜ÃcªY]JJApŽØõÀ5~Š�­{¨Yi°‰¯ï-íb-´<òª)=q’zð*¢<WáÒp5ý,Ÿúüük^Š�kºÆŒîÁQA,Ìp�õ5•ÿ� _‡?è?¥àdãZôP—¶·öââÎæ˜$†@êHàò8®{ÆzÖ•m j6sêvQ]y?ê$UùÆ>Rs]Ecx·þEMKþ¸Ÿæ(¼÷Öv>4•®î · §ÆË Lþñúf·`ž˜Vkyc–&û¯Sô"±šgñ¬Âh’@4èñ½AÇïÖ¶ã"@‘¢¢Š£�P9µ.Úf†}JÎ)Pá‘çUaõÔ–º•…ó²Z^Û\2Œ•ŠUr¯žöV²9w¶…œõfŒiÑ[AŠã$`”@(·WÖ–*­wuº±Â™d öÍW[Òf•b‹T²y…U[„%‰ìjܰC8h’@:PqùÓÆÑ2ÚÀ¬A€A  d‘!‰å•Õ#@Y™ŽÔ“ØUíýþ‚öøŸãZ ªèQÔ2°ÁdPgÙÏ¥¿ýûá@C<W0¬ÐJ’ÄÜ«£èEfêWÚͽƟ}¨Ùª¸Ù,mr¨ÃÛ®Ej"$h5UQÑT` Æñ*Ek _ÝÅ "á#,Ƥç=y¥k¨Øß3-¥å½Á@ eWÛž™Á¥º¿³± nîà·¾t7c®2iñ[A&cŒž¥ þT²ÛÃ><èc“7¨8üè¤zÞ“4«Z¥“Èä*¢Ü!,}�Í\–Xà‰¥–EŽ4gs€©5ØÚ#[XÈ"053*º•u ¤`‚2 �gÿ�oèßô°ÿ�À”ÿ�½±ÏË‹$n2®‡ Pj/ìû/ùô·ÿ�¿cü*uUE Š@À�` �£&·¤Ã+E.©d’!*È× ŸB3SZêWÛþÇyoq³¼™CíÏLàñÐþTæ±´v,Ö°3’L`’iñ[Á|˜cw]Š*�ŠëQ±±e[»Ë{rà•J©»q“\ŒwvÑ|=ðµÌ—%ºò³€ªÜäô®Ê[h' Í rкƒÎ¹+eUð7„€í?€?Ý –ÇWÓ56uÓõK¶ŒâÞu¨=3‚qÒ}ªéÚ`C¨_ÚÚ 3³í,{±×#=E[¢€2áñ.ƒq2C·¦Ë,Œ.Ñ™‰è�“ZÏ ´<ò¤PÆ7<’0UQêIè*J(#þ¿ÐJÿ�ÀÈÿ�Æ´àž˜x%IanI#`ÊÃÔÔT”P\Þ%ÐmæxgÖôØ¥Šº=Ú+)AðjÅŽ­§jžgö~¡kwåãÙæY6ç8Î Æp*¹E�R¾ÕôÍ1‘u FÒѤ ¸c,\dŒõªzv³áÐÂÎÃXÓ¤yewX£»Gfwbí€O,MlÖf…s5ÖŸ,“È]ÅåÔ`Ÿî¬ò*Á@…�^¹¹‚ÎÝî.§ŽPe䕪ýIàVoü%~ÿ� þ•ÿ�‘ÿ�kÑ@ †h®!I ‘%‰ÆUу+PGZΛÄÚ ¼Ï ÚÞ›±±WG»Œ2‘ÁÁ­J(¥Ž«§jaΟkv#Æÿ�³Ì²mÏLàœt4ÛígKÓRÿ�R³´wUžuŒ°õ5vŠ�̶ñ‡yp–öºÎŸ<îp‘ÅtŒÌzðÉ«×70YÛ½ÅÔñÁ ¼’¸U_©< –Š�ç4=FÇRñ>µ%å½Ôb+`Z UÀ8“¸4U«ùõŸúãmü¤¢€6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+@ÿ�_­ØEÿ�ô­šÆÐ?×ë_öý(fŠ( Š( Š( Š(  w–?kºÓçó6}ŽàϹߘ¤ßë3øUÊ¥}|Ö—šl*…ÝÉ…‰þ"’LÅ�üjí�QE�QE�QE�âßù5/ú☭šÆñoüŠš—ýq?ÌP�Ÿò:Ïÿ�`èÿ�ôcÖÍc'ü޳ÿ�Ø:?ýõ³@Q@Q@Q@QÖlTÒ.¬VAL›C•È…^ª:ÍûizEÕòÆ$hSpBØñ  ÔQE�QE�QE�QE�Ç[ÿ�Èá?®Ÿÿ�²Wc\u¿üˆþúéÿ�û%�v4QE�QE�QE�QE�OM±þεx<Ï3uÄÓçn1æJÒcðÝ|UÊ¥¥_6¡g$Î ÜϤr¼`þ!søÐÚ(¢€ (¢€ (¢€ (¢€1¬?äkÖë·ò’Š,?äkÖë·ò’Š�Ù¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬mý~µÿ�aÿ�жk–ÒõÍ#O¿ÖmïuKiŽ ÇËšá°Q0pNh©¢ªYˆ� ’{VGü%ž?ó0i_øøÐÅ¥í¦¡�žÊê˜I I ×#¶GVï_Ѭ. ½æ­am2€Ls\¢0ÏN Í�hÑT,õÍ'Q˜ÃcªY]JJApŽØõÀ55î¡e¦Â&¿¼·µˆ¶Ðóʨ¤õÆIëÁü¨Í<WáÒp5ý,ŸúüükUÝcFw`¨ –f8�zš�¡©ZÍq£ËnK{Æ–S6©‚TÏ¿Ìê8õ­›Æ~†[xι§1žC+u v³e¾nËŒú;Öµ¥í­ý¸¸³¹†æ$ !:’8<Ž(z+:ï_Ѭ. ½æ­am2€Ls\¢0ÏN Í>ËYÒµ9; JÎêE™`d z �^¢ªßjVdk%ýíµ¢;mVžUŒ×�“Ö©¯Š|<ö–ÌÇ� ÈÉ'ó  j)’Ë<²ºÇ)gw8 $“ØV_ü%~ÿ� þ•ÿ�‘ÿ��kÖ7‹äTÔ¿ë‰þb´íní¯­’æÒâ+ˆ;e‰Ã«`ààŽ Šç<c®ih•œº­Œw^V<—¸@ùãøsš�ÐOùgÿ�°tú1ëf¹éïìì|i!»»‚Ü>Ó43ûÇéšÝ†x®aY •%‰¹WF Њ�’Š£.µ¥A+E6§eˆpÈó¨ úMKk¨Øß3-¥å½Á@ eWÛž™Á  4U{«û;¦îî pùÛçHv:ã& [Òf•b‹T²y…T[„%   ôS%–8"ie‘cYÜàêMQþßÑ¿è/aÿ�)þ4£Y~"µš÷Ã×ÖÖé¾i#Ú«êkF)cž%–)HÜe]A Öuÿ�‰4]6)¤ºÔíSÉϘžj—uAÎhRНkg|Ú]Áp¼™íÏLàÒ]j66,«wyon\¢iU7c®2hÍFgJ¸•b‡R³’F8TIÕ‰>Àµ4ñ[BÓO*EòÎì©4%ý¿£Ð^Ãÿ�SüjürÇ4k$N¯ «)È#ØÐ¨ªkšLR<rj–I"¬­p€©AëSÚßÙß6—p\Æï&@ûsÓ84b¸ëùü'õÓÿ�öJéîµ+U»½¶·fQ,ª„lšäÒæ>xZæiãŽû4®à*—’O€;j*Ž­§jžgö~¡kwåãÙæY6ç8Î Æp*Kí_LÓPÔm-@J ‰Ö2ÀuÆHÏZ�»Ef[øC» ¶Öté¦s„Ž;¤fcè�95zææ ;w¸ºž8!A—’W «õ'@ÑYð•øsþƒúWþGþ5© Ñ\B“A"KŒ«£V Ž´�ú+.oh6ó<3kzlrÆÅ]î0ÊGO¬Øêºv¦é÷ö·b<oû<Ë&ÜôÎ ÇC@ë;DµšÎÂX§MŽ×—R~WžGSǪ°?I}¬ézcª_êVvŽã*³Î±–£&ªi¾*еWXìõk)&i^%ˆ\!v(ÅNv’=G4±EEss»Ü]O ËÉ+…Uú“À¬ßøJü9ÿ�Aý+ÿ�#ÿ��×¢›‰,k$n¯€ÊÊr„̓ŊGŽMwLGF*Ê×q‚¤pAàЭVÇS°ÔÑÞÂúÚíPጬO¾îµ¥i²¬Wú•¬Œ»•'P‘Ó8'§€/QY¶Þ!Ñ/nÞ×XÓ百ìq\£1ú�sW.®í¬mÚâîâxW¬“8E‰â€3,?äkÖë·ò’Š«¡ê6:—‰õ©,o-î£[ÐJ®ÄÁ¢€::(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÆÐ?×ë_öý+f±´õú×ý„_ÿ�@J�Ù¢Š(�¢Š(�¢Š(�¢Š(#Xêžã¥ûÿ�é4õª$F‘£¥ÔÊ ™¤yc£WuV‘¶ 'Ž Àõ8ý¯9ñ©j>.¸¸ÿ�„RâëIŸš–ÙRóËû^x2zâ'€ÿ�VÙÁ £ùˆ$ï_0‚ÁsɸôäS«Î.4O˜ì,cÓî>Ù†îtéua4A Ô‘Áµó¿Ì 4, Ûœ‘ŒŒ‘Ñø7L›L±¿VÓ²í§»óml7£}ž?*5#ä%F]]ø?Çëš�é(®Ä÷wëâI"ÑáÔïö-üqȶ³ËZ¼¯—Ÿ‘ûàƒÉÁ¢ÑO/…5,ÜxšÅá:T….Þè/•w¨ùÈó<Üy¹^œŠ�ôz+ƒð„úåψ¤¸Ô-õ[c,WOyÙs LfCl±òdE¼6ÎãææŸâ{»õñ$‘hðêF÷ûþ8ä[YŒå„-�ÞWËÏÈýðAäà€w5âßù5/ú☮â×P{¼Žÿ�ÄpÚAs(°¶žßPšYÇÌ‚)A‰`¦CŒ9ã¨á›ÄZœÚ½¾¥o4–wOìío™Û,$ü‡o S¿Þæ€;¦·†ËçE˜Ó£Æõ¼ZÜDHÐ$jª£¢¨ÀŸò:Ïÿ�`èÿ�ôcÖÍ�@ÖVŽåžÖbrIŒiÑ[A&cŒž¥ þU-¶ðÏ:äÇMê?:bØÚ#[XÈ"05=�ŒªêUÔ2‘‚È5ö}—üú[ÿ�ß±þbŠ�EUE Š@À�` Àñm•³xgR³Dd1»Ë'5ÐSd‘"ŒÉ#ª"òYŽ�üh±[Ã|˜c=v(ü©%¶‚r ÐÇ! ¨8üë‹ñ=Ýúø’H´xu#{ý‹r-¬Ær€o+åçä~ø òpsdº¹¶ÐXˆ|G$?ÛV²X ­®¦¸É%³LdK‘>7òG @ DK+XÜ:[B¬:Œ*WD‘ HªÊz« ƒ\ΕwæxûX!Ԗݬ­Â<ö³¤&T’3kº…<<]#¦vœ/®¶dc‡Q’o·ÚÈ•´Ób4¸‰¥,#S°7^¼œâ€7ÿ�³ì¿çÒßþýð©ÕU*(U��®L”šþ¦5í±jÑÞý¯™ÂcÏ_²ýŸo ù;³åsŸ½ÍVÓïîb¸ðÜÁâ~ϪJ­s=ÑómšÂ3åNÐD_ÞØ@Çš€=¬m‹5¬‰É&1’jH­áƒ>L1Çž» þUÎxÚèÛiÖF8u&û}¬€Y[M6#KˆšRÂ58uëÈÎ+™–ÛZ¾¿Õ"šó^³BnæeŽá£nãke…c ÐWòˆ<Ç4éÛA9hcŽ…Ð~uÉÛ�< á0tþŸðÆÓuõºðì76š¹ò5IÏW¥e¶6ó*É »'ï]F³… Âã6ÿ�ò#øOë§ÿ�ì”ØÑE�QE�QE�QE�V7‡Ý!ÑîVTE¿½%˜àö™y­šç<i Ú¯‚µk=6ŵ+›«yíbH^!²FGMÄ»([ƒƒ‘ÏÑ�$œÔšDu‘у#�U”äê+Ï´]'T³Öï5kŸÜeÒéçO6’ôËp’@¿ë6æÃ'ÌÀá$Ré:<ãKð¦§á+ß¶i¶ÖѽêImºÝ㑸M»aÛ¸…rœœ€èTU]Fxm¬%šán�²ÛÅ$Žy챂ÇèOjóm.MzH<.<½v9c±Ób ÑM R·¾x õ`m/Ôò™'4êtWÞM¶«ªÛ2ø®]:ãk !Kÿ�ôyl„` …X6ï“÷cbŒdó×Ç4V¾·–ê[û¨ÒÞ=ò}š_´KÀùš4]áR»r9Èë@´W–irkÒAáqåë±ËŽ›VŠhÐH²•½óÁ�«i~§”É9¤±ûV™ú]äÞ$ÔlLJPŽßSŽuœp:»³7±1…L€ä �îì?äkÖë·ò’Чá°F©xyîYYækˆÌrIò¿Ìê@*Ç© Š�éh¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+@ÿ�_­ØEÿ�ô­šÆÐ?×ë_öý(fŠ( Š( Š( Š(  gþBžÿ�°ƒÿ�é4õ¯QKm òA$ˆàs$Gû­µ—?“0ük‚Önï\×â°‡[Xͽ‚³Çkp¹Tº“í^S•Áo)×Os·€B¢¼ºÝõI,f[I¼K·½è´[˜nŒ3)ý™\ºùJÁ|¢Xû†ÓÎEu¾ ûGØo÷ÿ�i}íè?Ú^gŸåyQçw™óÿ�¬óq»¶1Æ(¤¢¸ˆ7W𶜺4:“êA§dkkY¤skp‘îeRƒ÷­SÇð21õ|I€õã£ÁªÉ’E²k¹®RýPÃR‹å¼Œ|ã'Þ+À…ä�z…Åxwû_þϵiù_éŸiûFÿ�³ÿ�¯_²ù9ùÔîݳ¿Þæ®øŠïÈñ7†–8u"ô´íok<‘,F ÐoeRƒ÷S‘Á< €¢±¼[ÿ�"¦¥ÿ�\Oóç°6ŠÊ&Ö Fû Ô¥ž)ä‘&Û7Ú 0æ=ßgâ" m#“M°:ÑÒoþÝý¯°Ü‹¿¶,ë >r}—Ê’AòwîÁ-Ÿ¾KP¢'ü޳ÿ�Ø:?ýõ³XÉÿ�#¬ÿ�öÿ�F=lÐEPEPEPXÞ-ÿ�‘SRÿ�®'ùŠÙ¨ní`¾µ’Úå7à Úë’2? �šŠáþ Ý_ÂÚrèÐêO©‘­­f’5Í­ÂG¹•JÞ´]OÀÈÍߨóÃ<Þ-·ïXé— ì—F"‹sJª¬Íûß3jÊ0GN�zUËéw{ü¬Ä°ê+²·Uy­gXL©$þf×uÚxxºÓ;NÆ×FÛN²1èÉ7ÛídÊÚi±\DÒ–©Àد^@Îq@=ÀiâAâ-E ŽöI±wæ.¡$±ÚŸô„û/”ÅYGî7çbžq»š©¤_߈¼(×ÖÚßÚ›V»’}Ö×r¬vìnÒ ìÑŒ.Zo ví$�8�ôª+œñ䎞 ÕÒïdº–Òhí–ÎdÌc`œF 8äð3\sÏâ‹“ªO¦ÿ�m$²¥ÃLnb•Qc7QùqËo7!Fw`0ÝŠ�õJã­ÿ�äGðŸ×Oÿ�Ù+M¿¿Žëð][käj’´‹+ÜMlÖò¨y›Ê~ú@¸vÈ …6ÿ�ò#øOë§ÿ�ì”ØÑE�QE�QE�QE�VG†¿ä7ý„/ô¦Z×®_Æ‘%—5ˆ,­ï ÄÐ\},¢–G7+°8Œ2휞#§ÔQ^%Ö¥7‹Þïnº,™Ì›VÖ/°ý<&8›í±æ{b£ÓÚÕï¬Òߣ›Å–?>×P1Æ„®as"mu<å¤û¡Ž`P¢QQÜ:%´¯ ¢¡-å†-Œs€¼“ôçÒ¼¯K¸Ö§Õ!òbñHº†mK{ˆbòÚþg›Í�#ì­Ýý ó�¬Q^s5Ψھ¾ºõ¾­ ¹ŽÎ8“%ì¨$&rÌJFÇ»h+¡‰'·²"/Û´Ó]ܵRòÉ ¤òa9b€zí�ñŒÐú+Éîn5©ô$1x‚&YµSl©oq ý¥®7Ùù€&/-›;¾AÀnFµ õ¸|It5Q®Moqu4Etøo€¶ƒæ0ÈØÙÚ€€¥²NN2(½°ÿ�‘¯Yÿ�®6ßÊJ*Ÿ†Á¥àiç¸aeg™®#1É'Êÿ�3©�«¤0{ (¥¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®[L×t}>ûZ‚÷U±¶›ûA—5Â#cbs‚k©¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�×¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�×¢€9}KÅz/Ûô#_Óü¿µ·Ÿ²ñ1³È—¹é»g^ø­øJü9ÿ�Aý+ÿ�#ÿ�×¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�×¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�Ʋ|Kâ=ï×ÖöÚÖ4òGµ#Žé˜’0�$×[E�swz¦Ÿ¦xÒF¿¿µ´§ Cq2Ç»÷Ó'š»ÿ� _‡?è?¥àdãZôPGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ5¯E�dÂWáÏúé_øøÑÿ� _‡?è?¥àdãZôPGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ5¯E�dÂWáÏúé_øøÖn¿âÍh7†Ç_ÓþÕåþïʼBÙöÁ®¦Š�Èÿ�„¯ÃŸôÒ¿ð2?ñ£þ¿ÐJÿ�ÀÈÿ�Æµè  øJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü ük^Š�Èÿ�„¯ÃŸôÒ¿ð2?ñ£þ¿ÐJÿ�ÀÈÿ�Æµè  øJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü ük^Š�Èÿ�„¯ÃŸôÒ¿ð2?ñ¬s·Ãÿ� ÜO4q@ŸÙìÒ;P0œ’xÅvÔPGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ5¯E�dÂWáÏúé_øøÑÿ� _‡?è?¥àdãZôPGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ5¯E�dÂWáÏúé_øøÑÿ� _‡?è?¥àdãZôPGü%~ÿ� þ•ÿ�‘ÿ�gh¾+Ñ~Á/Úõý?Ìû]Î<ËÄÎÏ=öu=6íǶ+¨¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�×¢€2?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ­z(#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ�×¢€9íúÓQñ³qeuÌ]ºùHrädqžGçEt4PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙ�������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Introy.jpg���������������������������������������������0000664�0000000�0000000�00000072363�15030617045�0023073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�£ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ æ-ußjâ[Lkhî§·FŸS‘¼©Z2Jˆ ”'=k§®sŸò¹ÿ�°¦¡ÿ�¥“Pþßâ¿úhßø7—ÿ�‘¨ûŠÿ�è £àÞ_þF­š(íþ+ÿ� &ÿ�ƒyù·ø¯þ€š7þ åÿ�äjÙ¢€1¾ßâ¿úhßø7—ÿ�‘¨ûŠÿ�è £àÞ_þF­š(íþ+ÿ� &ÿ�ƒyù·ø¯þ€š7þ åÿ�äjÙ¢€1¾ßâ¿úhßø7—ÿ�‘¨ûŠÿ�è £àÞ_þF«:ι¥ø~Àßj×ÐÙÛ ¾VÆIè�êO°ô©ì5 =RÆ+Û ˜®me£–& ¬>´Ÿöÿ�ÿ�ÐFÿ�Á¼¿üGÛüWÿ�@Mÿ�òÿ�ò5füAñ%ß…|459¬!Ü$F[øåxòD_7aЗÀ>!ºñG…!Õ/%²–W–Dó,RD‰‚±�¨“æíÜ¥�]ûŠÿ�è £àÞ_þF£íþ+ÿ� &ÿ�ƒyù¶h b][x¤èzÖ›mhæËí‰5­ÛÎß³i$ õ5ÓÚ^C}Lã$cšó?ÿ�ÉW‡þÀû\×uáùÛFþ”³EPEPEPEPEPEPEP=Zûû/G¾Ô<¿7ì¶òO³v7mRØÏlâª}§Äô Ò¿ðe'ÿ�£Åò'kŸöŸÿ�EµkÐGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@¾'O>ö×S†;[«Y„L°ÈÓ+8!Š/gÆ1Ú·"‘f‰%C•u ±¯:Ôäi×ëê?ý'†»ý?þA¶¿õÅ?  4QE�QE�QE�QE�QE�QE�QE�QE�ÎxSþA?öÔ?ô²jèëœð§ü‚.ì)¨édÔ¹^[¢ø¿Ä·~/†Êá÷3ܹӼ•fNrw»åãæ$†íÔW ^êÏopm­tÛÛË€ÄqìŒg¹‘ð¿P >Õ\Câ+Ïõ×vZtdýËxÌòcý÷ƒÿ��4µEp>3ÕôoéðßxƒT×oZy<¸£‚èÄÌG$â#àwϨ«ÿ�„KÆš"êÚ]½ÃżÄßhšO6'\gyÁÁƒÎh¶¢¸Ÿéñè>¹Ô4»Ûëâ’$[ÉT4¨¬J9)ОH¬oø§ÄW·š£\^ vÊÝ!b#H’h·3´ ÏÊ2§<O¢ ³½¶Ô-VæÖU–&àÆê<‚EO@WÄo‡|AÓìà}BK)m$gÕ<Å!€Èô9ãŸZÑð/„!ð?†cÑáº{¬HҼλw3z.NŒšé( â¼’Cá($†Y¢‘obÃÁ~–N8n“8*ŸSôïRü+’I|Ë$²»]NYæ½[·?¼=fO•ϸ¨¾+Ç$Þ‚8bšYö,$ zç†é ¯ô?^Õ/¸ä‹Á¤±Ë­Ôá’k%´qûÃÖùPû �íh¢Š�ó?ÿ�ÉW‡þÀû\×uáùÛFþ•ÂøŸþJ¼?öÿ�Úæ»¯ È#þÚ7ô  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶­z�(¬ÍC\·Ó¯"´x.æšHÚP¶ð4˜P@$ã§$T?ð’Eÿ�@Í_ÿ��dÿ� �Ù¢±á%ƒþº·þ�ÉþÖñ=ºŒ;VÇýx¿øPåƒÿ� e¯ýõ_üð¨%ñ¾ì’ÏTVÆplž€:Z+–>>Ò€'캟ôæõWþvÿ�<õüj�ìè®oŠþƒbj*Bmü-ÿ� zÿ�ÿ�Z€;Ú+Î[ãƒQм·ÊÀàƒlr)ñÓÁQ€L÷¸Ï'ìÇÖ€=&Šó?ø_>ÿ�Ÿ«¿ü?ã]‡…|[¥xËK“QÑä’Kxæ01‘ àxú0 OQÿ�‘§]ÿ�¯¨ÿ�ôžïôÿ�ùÚÿ�×þB¸ GþFwþ¾£ÿ�Òxk¿Óÿ�äkÿ�\Sù �³EPEPEPEPEPEPEPEP\ç…?äsÿ�aMCÿ�K&®Ž¹Ï È"çþš‡þ–M@”QE�ax«Â?Œ´Å°Ö-Ì‘£ïѶ¼mÓ ý;tü…OáÏ éžÑ£Ò´˜<›d%ŽNYØõf=É­j(�¢Š(šñ!²Ñâjº ÒneuF+ÌKƒÛ|c–ÀyH`秃[Ôb†7½Òdu ·Zl‚xœ„‡ç¯�sß+Æ^»Öo Ôtù•®-îBm';”àí>¾ àgwÚ~Ñ¢ÓâšI‚’ìÎxÜNHQü+ž€t÷94�ÓâKR¿º²Õ¤sÑ›:ø²‰¨ÞmQ-­bÒb?zk¦Y¦ý˜Ð”ܹÇ÷MnQ@uñn( øWÓ[Í]B$—Qóv?—ò�~¿ÜŸjµð‡Èÿ�…}oö_²ùhŸgÙ<ß+aû¾oÏ÷¹¥ø¯$øJ !–h¤[ذð_¥“Ž¤Î §Ôý;Ô¿ ä’_FòÉ,®×S–y¯VíÏïY“åsî(µ¢Š(ÌüOÿ�%^ûÿ�ís]׆?äÿ�múW âù*ðÿ�Øÿ�kšî¼1ÿ� ûhßÒ€%±ñ.ƒª]›M?[ÓnîTa·ºIc¯Ê 5©^].›âÖñtš¼ë`ú©•­d–ØJŠÖ‰Ú#`ä]¯•'2ñœâÕ¾—âQáË«YíµÝé{ÐFºš¼­·PÈeó•ˆï?}3•ÀÛ” F ¬X+Tá€=3ÏàE-y¡áŸ}®â]5u3us×ÿ�ÖÒ4Až<”•\œà0Ùôv~Óu(õíbçT]M�¹ hÒß‚Dh£¶!#mb;�À`8Çp�74ísIÖeÓ5K+æ€0¶¸ILdç¶“Œàõô5~¼êæÏ_¹‹\’ V´’ë\´»‹É¾†'x!IrRoîÃ'ÊO;×¾vÁ§é~(G¸ŠK/GYߦé5tbÄÎÕUŒ®Q„a¾3–'�™Ey±>µicgg¨vm5§º¾’ÞýVQjnwBÅ„âGýÊ<xË6[<°\õÓ|Ue}ªIâ;¹eYìV;£c½ˆxϚĥA]‘´pNI�íh¢Š�(¢Š�(¢Š�Èñ_ü‰Úçýƒçÿ�ÑmZõ‘â¿ùµÏûÏÿ�¢Úµèÿ�äuƒþÁÒèÄ­šæ5}^ÇFñu¬÷ò´1=„ˆ¯å³Þbp Kÿ� ׆ÿ�è#ÿ�$ÿ�âhq¾ñúÔ7ê[ð¬FñLJ7ø˜ÿ�ä ?øšŠøu¢ jÿ�× ?øš�Ó®{\ÿ�åÿ�®cùšü&züÿ�Ÿûó'ÿ�Xš¿Š´i¯£»,‘ úŸöhGûô5ÆÖëø—IØßéMÓþx¿øW+ý­gÿ�=þý?øPmwýD_ïåXu¥¬j6ÓEÆÎÄ6Hò›ü+#í é'ýúoð fÿ�þBõÐÕ¿øõÃùÖ…âI%ìΑJUœDmÏéT® ™­ÙDäãË<óô  Šú‡örÿ�’w}ÿ�aY?ôTUó/Ø®¿çÚoûökéÏÙÖ9"ø{|²##jHpÃýTT©¨ÿ�ÈÓ®ÿ�×ÔúO wúüƒmëŠ!\£ÿ�#N»ÿ�_Qÿ�é<5ßéÿ�ò µÿ�®)ü…�T¹ñ.ƒe¨ >ï[Ó`½$³Kt‹'=>RsÍ]¹½µ²«˜`J°ÇæÈ| ÏV=€ä×1u¥O¨xÓTŠ÷H¸—E¿Ó­í^mð˜¤(Ó³RÞf?z :ƒÛ±.t¿Çq éÚ¥õ«ßXÜBf¿ŠNa½i$a¾A´4K�ãHfTf 2IÇ$à~´V,*pÀ‡çð"¼ª/ xÆçKÔÓZ’öñþÝm:AÏ—æC'Ÿòæ.6â ©#q5ï ø·ûkQ—CþÒ¶·º¾YžXïw’†Ú4R¨gNRUrA ³ï´�zµÈD‚ÄÌP£{€N98íO Š( Š( Š( Š( Š( ¹Ï È"çþš‡þ–M]sžÿ�EÏý…5ý,š€7(®#â&£â=>øGþÜ Çte6vBàïXÂØØMƒ·^µÂÛx‹â+^[,òø…`k1fa¢–'„›Ãþ£ø$À×­�{àð“üSþÇó?âöïìÏ3göãí_kÛ³ýGO³üß^ýªõψ¾"­åÊÁ/ˆZ¹ÔÖ: ù¢HA³?ê?ŽLƒý:иÑ^mâ/ˆ­yl³Ëâ®tÅ™†ˆ>Xžoúà“�^µGþŠØþgüOþÝý™ælþÃ\}«í{v¨éö›ëßµ�{ýá×>"øŠ·—+¾!hçSXXèƒæ‰!Ìÿ�¨þ92ôëE·ˆ¾"µå²Ï/ˆV¹Óf ùbxI¼?ê?‚LýzиÑ^ÿ� ?Å?ì3þ'ÿ�nþÌó6a®>Õö½»?Ôtû?ÍõïÚ¯\ø‹â*Þ\¬ø… [Mac¢š$„3þ£øäÈ?Ó­�vÿ�ã’o A1M,{ ½sÃt…ÈWú¯j—á\rEàˆÒXå‰ÖêpÉ5’Ú8ýáë |¨}…y†¬|aâ¨-ô½~/Ϧ½æ–fQ¤Äm7m•„’Lü›­w¿lµ=;áêÙê¶WVsEw(H®`h˜!Ãg #%¹ÿ� �ôz(¢€<ÏÄÿ�òUáÿ�°þ×5ÝxcþAöÑ¿¥p¾'ÿ�’¯ý€ÿ�ö¹®ëÃòÿ�¶ý(Ö<UªÜhÚv¡aª %’ËûJólQ±µŠLy,êà–Œmpá~rFAQ[Zω.ŸûçEIÿ�{¨Io-µü2Y €µšL,{”ŠCŽõÆV‹wk®jðZÞøSG• º¹….RêKº’Q¢S3ÆvOÞÀÛ¹ñ„õØ"¶»uÚr« Út’…u w•(v€%BàaÁš�¡§øÚïS›Nk;$1ßjQÛH·Sí0£Ø­×˵:€O üY�‚½n£²Ù²E|öDõž4Vuìïsœué\oü$ŸRá"šÞÎÒêúþH‘&Ó <×1Œ¿)ÉÉ*÷%z‚µ´¾Ô´]L[8¯4[¸–+1wd}‘‡A¶Eù¾E,ý“Þ€1_Åšžy¡éú£^Í!¼’+©¡Ò¦“íùSº`Æ…w±nTÉÈ~©&Ö½âë­:þËQ±†iôó¦^\Ïirjø†Xà¯ýà;áNd{ë`Ó,-`µ‚ÞÆÚ(mµ¼qΰœÊ�>S†aÇf>´—š^Ÿ¨Ko-텭̖;šsz©#å<G¥�r÷–úïŠt”¹ÐôÛ³ÿ�ö»½¯=¹¶¹b?ÝôË.9“•ù­k>6ŸK׿³cÓ!¸W1¤2ý¯næ3[ÂÀ€‡n Ê÷$ílÆz M H°hÚÏJ±·h™Þ3 º!FpÁ žø¨®<1áû»£us¡i“\3ù†Y-#g/ÇÍ’3ž>ÃÒ€8ýgÆúÅÏ…u‰4½>;{û +™®¥ûP+nc’h1Ÿ7-œ¼È$ ßÔî¯o|V485i4´[%ºW"i®»)Uó—Iã?¼^•ªšŠØ¦‘`¶ŠmFŽYvã$’G|Ô—ú6—ªÛ%¶£¦ÙÞ@Ÿv+ˆE_ `@ NÓÆ:€–ÇO³Ó¦Ö$ *ÞÞM<¦IÞû3‡Ã#·°ø€¨bø‹>™Ñxue¾º¶²¹²µŽý@”\¬…UÕBä¿®r¸äâºÙ|;¢O¼RèÚ|‘ÛXíPˆƒ}à£.{ã­Fžðôv×É ékopg‰lã (O¸colôí@Vž-¿º²Ôd:E¼7sÇmäK~é^8¤ÚYPŒ)É]Çä8á­~mwV’mÌ–—6Ÿ»m>SLgÜ2O};fµSÃZ pKhšjÃ4¢ic[D òì1ËÜóRXèZF™9žÃJ±´˜Æ"2An‘±AÑrqÇJ�ƒÅò'kŸöŸÿ�EµkÖGŠÿ�äN×?ì?þ‹j× Š( Š( Š( Š( Š( Š( Š( 7Ôäi×ëê?ý'†»ý?þA¶¿õÅ?®Qÿ�‘§]ÿ�¯¨ÿ�ôžïôÿ�ùÚÿ�×þB€,ÑE�QE�QE�QE�QE�QE�QE�QE�Wœi>=ðÖ‰ö¨êF ¸u;ýñ›y[º•‡!HèAükÑé² ÄàuÁ #þ·‚è6¿ø 7ÿ�Gü-oÿ�Ðmðoþ"«ÿ�f_ÿ�Ïœÿ�÷ìÑý—ÿ�>sÿ�ß³@?ákx'þƒkÿ�€ÓñÂÖðOý×ÿ�¦ÿ�â*¿ö]ÿ�üùÏÿ�~ÍÙwÿ�óç?ýû4cþ·‚è6¿ø 7ÿ�Gü-oÿ�Ðmðoþ"«ÿ�eßÿ�Ïœÿ�÷ìÑý—ÿ�>sÿ�ß³@?ákx'þƒkÿ�€ÓñÂÖðOý×ÿ�¦ÿ�â*¿ö]ÿ�üùÏÿ�~ÍÙwÿ�óç?ýû4cþ·‚è6¿ø 7ÿ�Gü-oÿ�Ðmðoþ"«ÿ�eßÿ�Ïœÿ�÷ìÑý—ÿ�>sÿ�ß³@?ákx'þƒkÿ�€ÓñÂÖðOý×ÿ�¦ÿ�â*¿ö]ÿ�üùÏÿ�~ÍÙwÿ�óç?ýû4cþ·‚è6¿ø 7ÿ�Gü-oÿ�Ðmðoþ"«ÿ�eßÿ�Ïœÿ�÷ìÑý—ÿ�>sÿ�ß³@Õ׈t¿üJšE×ÚmâÑü§q( çg0«Ó|1ÿ� ûhßÒ¹ì»ÿ�ùóŸþýšêü= °i{&£o0œ0Áí@Ðü=²·¸·»VÕVúç”]«Ä²2Låä…±2ìÌ22 8"¤‡ÀÑÛÁ4QkúÂyó æu0v¤yÏ•ò’±¯+‚H#5ÕÑ@Êx2+{™ç±Öu[)&yÙü–ˆ‚%‘¥Æ3»»)ê7IU« Cak Ù¥Ä²Ûh©‹s6 ŒÂ3’@„w9ÈôçrŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÉñR³øCZUVf6€ª2IòÛ€*“xóÃJ¥›S�æ?øšèꆵͤ\G3¹ £$ü€2?áaxWþ‚ñÿ�ß§ÿ�âhÿ�……á_ú Çÿ�~Ÿÿ�‰¬Oì»ÿ�ùóŸþýš?²ïÿ�çÎûöhoþ…è/ýúþ&øX^ÿ� ¼÷éÿ�øšÄþË¿ÿ�Ÿ9ÿ�ïÙ£û.ÿ�þ|çÿ�¿f€6ÿ�áaxWþ‚ñÿ�ß§ÿ�âhÿ�……á_ú Çÿ�~Ÿÿ�‰¬Oì»ÿ�ùóŸþýš?²ïÿ�çÎûöhoþ…è/ýúþ&øX^ÿ� ¼÷éÿ�øšÄþË¿ÿ�Ÿ9ÿ�ïÙ£û.ÿ�þ|çÿ�¿f€6ÿ�áaxWþ‚ñÿ�ß§ÿ�âhÿ�……á_ú Çÿ�~Ÿÿ�‰¬Oì»ÿ�ùóŸþýš?²ïÿ�çÎûöhoþ…è/ýúþ&øX^ÿ� ¼÷éÿ�øšÄþË¿ÿ�Ÿ9ÿ�ïÙ£û.ÿ�þ|çÿ�¿f€6ÿ�áaxWþ‚ñÿ�ß§ÿ�âhÿ�……á_ú Çÿ�~Ÿÿ�‰¬Oì»ÿ�ùóŸþýš?²ïÿ�çÎûöh?ûB×UÖõ›Û)|ëin“dH ˆ"¯¸"½#Oÿ�m¯ýqOä+‡þË¿ÿ�Ÿ9ÿ�ïÙ®æÅY4ûe`U–%È8bŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ©ê×ÇKѯµšmmäŸËÝ·~Õ-Œàã8ëƒW+#Åò'kŸöŸÿ�Eµ�iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1Z—¶º}«Ý^ÜÃmm7Í4rp2O’fÂaᑟø¨ôŽ9?éÑñÿ�PþÓâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb™ÿ� †søHôŒã?ñûÿ�@ñ‡†1â=#žŸéÑsÿ�PþÓâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb™ÿ� ‡†?ècÒ:ãþ?£ëÿ�}P|aáœøHã¯út\ãÔ�ÿ�´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�¦Â_áœãþ-#=ãö?þ*øL<0qÿ�‘Ï#ý:>ñê�Ú|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒS?á0ðÆÿ�„HÁãþ?£ÿ�â¨ÿ�„ÃÃÿ�ÅG¤qÁÿ�N‹üz€öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ãßøKü3’?á"Ò2;}¶?þ*µÑÖDWF Œ2¬§ Q@_iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ—IÔ.ošú+»X­ç´¸2Ã1•[1¤€‚UOGÆ1Ú´«Î/É*×@'þ>ãÿ�ÒxhÑ袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+#Åò'kŸöŸÿ�EµkÖGŠÿ�äN×?ì?þ‹j�Æø¨»þëk嬙‰>V8÷‹^ u<úeóMİiÐI-¥›O§Ã$°¸ØL;ÈùFð1lÇ­{×Å@áž¶ R| àŸÞ-xœŒR¸¸ŽàMö†ºo¯Fê‹tg™xÛ*䀨å˜ñÕh¶Õ-ãŽ9£i¤Ësÿ�ks%‹‘‘ÕòМ·\.L”:ëÚI úÍ#ý²kx4x DÏ@Cy*¸'®~lû?J‚Þ‘-cÓ Žf¾º°y¤µšE'È•QÔ˜˜£m}¬FåçkA´+G5”v’oóo|?vdÓWœH¹|4-µÏÈ…ì hµ‹ÂYVæyõÛ®l"½…‰Hl Bäð à|Øä ]_xž6¼pËö;YfÑmñ;ò ‚Ä`¹ºñœ‚¯¢XÎgM€Ïq–°h‡| ÿ�Ç͹.~eÊ«ÁëüJ45I¥Ó²íÐ/z˜œãl 8P{ãî€1aÔ­'wÔ!·ÓvÒ¾n^ÖFÿ�–rÿ�4dAc»Ð„6ZÄ(-æ‡P„Û?Û.£F€µ¦rD‘|À´dç#åP21ÔSÓEÒãòTGlbƒä[¹¼=v7Ïœ}–p€rTeC7s÷š4]-{X­#‰¼ÛÇoÝ™4ÖÆB>d!¢ažI'‘Àê 6ºÄÍ$>]ä¨þùâ‹F·Û< ®€‡ûøÚH\rAݜӱ8óàûMÁ¼O³Ú³èÖÂ;Õ”“æ!daÑ›ƒÓ´+6Dút1O3ï–Þ-ðµ¬@.!%òÈN އåì_ý§<æX¬-.EÂ…‚Ð/_DLÐà‰�##*¼õ<�EMR&K˜¤¿Úƒkóh¶û’RqäN ž3·‰9< OeàOê~ ¦ê¶º”Ú]¾ ß›h¨ÚYnr±-Sœ 0pÑ´Õ•$†;„D0ÛLþ¼ßKÈ0Ɇùd¹=E"èÚJl/ A –y|=wºÎSŒ[L< @ –nzŽ �úz)cž$–'Y#u އ!ä{Š}xƒ<_qá1ö;Èn›NÜ^ëO‹I¹Œé*sûÔ-»t†$Î@êµípÍÌÏ©,2(t‘2²‘AAèõçÿ�ò5ëŸõ÷þ“Ã^^qÿ�#^¹ÿ�_qÿ�é<4èôQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘â¿ùµÏûÏÿ�¢Úµë#Åò'kŸöŸÿ�Eµ�füG²¸Ô>ë6Ö±K,Í*Œ¹Ã8©À<W†ÎÍ{yxÊöúŒ÷F錌»-µÄw è“–>‡†Wéºò¿|;nµmÍ®aq$×Z\G eeÇÚ ÇIA Jÿ�Þ9ûÀcg'ھöá/f’-:Ú $òÌ>Ít¾£Ç!®+ãgä¢Ox]a ·jW0o åI³vè÷x |Ã�‹ætµ…ü‹©níôÔ[xNØ5$-Ûø& œÿ� ñޤ·�éèͨ²ÿ�Ä¢h"˜'Íþ»›k¡øœ7²¿xB[Û!œÇse VŽ"†(<Q;5›‘>ßå!£ ’TnHã‘RMwe×óé“$‹‰íáñTû.å'"xIàH9V$ð0:&ŸiEw4÷ž(Òî´ý]lm­m<Ù£´…ž%xÖEᘻœ'Êr3bëHÓ­-µ˜íõŸ*i‘ýªÅM´ê#”£1cû‘åŒ÷ùx'ž´Mg´”ÁÚ–•t×.žO\*j1 ²Uq»häü½B¶;è'†)WW°ŽâéŠCw?‰îwE9û4êŸ{ ŽŸ6N[Xèz\ž%ºÓZñ‘°žÙo$_²O½çóÞWÈÏES»oQ×"¡´Ólo&Òšç[ñƒWN-¨m3y¤*`ÜŸ1>vù¸Ç<òý¡d óa»³´Hdû5²/Šg2éÍÀ,˜Rs´1Á?0ÇÊ­yaÛOaåYáþÍoâ©ø˜äýªØà‚~f%NæÈ铆ÒuœqÙ]®½ã1r/^ÇÌû<ùâgP¡¼žN~\žsÆFw:NŸgc~ÖÚ׌´«•K ÛN¢hã-Ï’6d» |¼mãdšÜZ³Íy¤ÜƒÚ.×þ›…‡R<a?re*¼9áV¥Ý´Íl­§K-à&K™¼OrÄ#?è÷h*À‚B.{AÑÔ´m6Ý5ˆ¡Ö|cåÛZ®¡Ék:rL¤»~ämåîùy-ÏŢ闓ÛEs­xÉãÔ¬ZkÑöIÛÍ‘| §AÜ�fù¹Æ‘Æ@2F¡j¬“ŨÙBÒIö{YÅM;¦b|/Í *TcÇŒ0é<#ã»o M5»ÜiqèÊ#–ÎXÝIlǬÐnP^à” Ì $�r§6ÇO³»³Ñ/.5ß5Íú}žñ–Þv•#mSäãpe¸,}M6=2Ê6=sÆK%Ž –v¤[Î<¸HÑ”'ƒ´Ÿ—ŽB§@B[\ÁykÍ´É4 xäƒ+©ÔWžßÿ�È×®×ÜúO 'ÂØbÓµi6Wš¤Ú}¹·–õš6¤ó áY€H¦;÷4·ÿ�ò5ëŸõ÷þ“Ã@EÈ®£|Þ6dÖi³\<¶ðGÅ#$,dŽBG˜²Wlƒ· SÈ]Ey´ÿ�/-Äz½Æœ±èï¤Ü_[¤W"W¸Ä–ê›†ÌÆGšÀŒœÝvеqñP‚Ä]Â:%ÝìÉqs$«nèj¼!˜2Ȭ¤…ÏB€;ú+…“ÄÚ÷ü%§OX,Ešêífö‚AýžnXygqR\GLÉÎðÿ�еÛM;NÔµû•¹¶¹Ðnµ—XŠù>ÎB�#La]ˆ'ç –Ú€z]Ékz–¯/…-®„ßÙ’j°´–+b–á"%YЃ”}ÃåvëZÞ¯¥ÜêÖ <ZãZ5°Š{‰R܆™Lr2.7.Õ *dùŠ1Í�v”Wgã=JöK‹È4ëVÓÆ‡iªD’݈LÞiû@Äg'<Îp5!×§Ô|s¨§Ù´ëÜÏjž|…¢Žá%hW,B’¦E@8=�tTWœI㋯Y%½Äz–·ªKy$&ÞXPI HRFŒ}ž2AS´}ÿ�™—i#§ð†±®i^_ÛÁ —1D"‘‰)΃p*6Ÿ—óŒñœ�‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ²<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶  z(¢€<ËÇ^�Þ÷:¾‹lΗ3Å>©§À0óùm»Í€ñ¶` p œýîO‘Ë#-·˜.lÇÚôYR)™x¿A/ú¹?»2ílöz¨ú¦¼ÃâïµE©ëœrÞ]Û´w–�·!¼Äþì ªœÿ�=y :ÒnL:~«>.M"1¯E?PŽ&¸\IÎåÛqÙŽzƒåžy&´5éŒ~(ÏÄ}6mö`°Ûÿ�¥þé¾EÃp‡Œžiš«³HÕÖééx†u(OÚX -ðïûÔé˜mþägMOX•âñpÿ�„«Ã¯æÙ! ?¾ýÓ ±þüàöþ.Hãµ�@·óÂm#ÿ�ÂÌÒÁþÎQöÏ&ßiýã~ﱑ×ך©¦^̯áŒ|FÓaÙ¦¸¡·ÿ�EùbýÛe¹'§<ü‡Þ·WZ—þé&ÿ�„·ÃyþËEóþÎ|³ûÖ;qö½ßït=;Õ='X•ÂxñO‡£ò´·Q¾|Ÿ’•ÿ�~2ܳÐñèA¯¦û ÿ�…¦œjò6Ï&ß(|ù?z~n‡ïc¦v¤Ôo¦:ˆø¦Íºê2cXmósû¨~eÃp6ñýÃïZM¬Ëýd¿ð•xwnGÛä©ûD‡yýÿ�Ü9Î8àŽ{”Ôõ‰[Mñ*Ÿxuü˸ÉT€ƒ/î Oßœ1ß•<ö�µ{陵üüIÓ.7iH§l6ãí÷ÿ�ºnÏnx=ª[+ù…æŒáfiqmÓdÌ6øƒ˜?vrÝN;óòz»­k2»x>+ðäžfŽˆ|¸óããäOôƒ†ç¯?yxõ–ÃZ•o´#ÿ� o†Óf—*†ksˆù·ù[ý#–8öû­Ç •}2éâ6›�I8‰¡·Í¯î%å²Ù?Ýç»ø¥ûtßb½ð±ôÞuˆ›g“o—>t_¾7A÷±Ó {f´tbTÑ<&£Å^ŒE&B<´?èòŒ¿ïÆzã¢òGПÛý‚øÂUáÞu¸_orÄOÞ?÷2G<Èê�:φÓ4þ%ñ;>½o­–éP"*ô“Œ!#Š/ÿ�äk×?ëî?ý'†§ð ÓÞx¯Äò¾¥c¨~îÌyÖI¶?»'Þüþ5ÿ�üzçý}Çÿ�¤ðУ×7<þÑ|A ¯ieoªß\}™nc²ù䙆í*¯ G8b3]%p×þÔ5ítç›xu[»Ù§yY\Ç:ÎÇ… ºyýÈÇ–;hV ?ÂÄ—:t>ý«yÊiã„”•;¤Ù·-ó|¤ä€xÆhºÑüÕ¾w¢é*Ëg,‘,–)± F_3®ÕPdRF{æ°îü«êVþ"¶Ô™:êÚ<vÞyv'íhÒ¸r…04ß)ÜJˆ—¯j××/4ù¬¦‹IX¦°Õ`$Nì#’òa2aLc*Œ g ÷�cÖÍáÏ O,“Íáý>I …ßOVl* ¡Nܰ @r#±ÍNðÍí•–¡¥i)€}–E±mŠUó0™Q…a!'d°<æ°-<w.©;jz~ÚOœdƒLŽVhP˜`‰[iŒ�SÉm ùjOFrô¿xŠÏK±Óïl´+Ë{iÒW…ï$Ù*­€¶ØA„ŒQ!àý  þOhr鉦I£iϧ£o[VµC·<„ÆäóŽõ,:&•o§gC¦YGcßfKudAÚ3ÔW—Åð»Uš[A©XéÚÅik ðG©\Eö‰â Ó2F§Ìù€�ç rGijÞÔµj{ÇÒô;ˆßRk²fº‘^H…ªÂ±7î ê$`K�!è¸MD†XàG²BmžÙf»D9£È\%³·¿'¥&’º|ºxÒì…”ÌZ[qnž[±9%—' u®?Qðž¿}Ÿqé±Ce-¼ÑG4›3Å"Ç·Ë“l;ü¼Hä(CáέsÚ[éúqÍku½±¹“˱’o )‹÷=ÂÒ ù¤8 ŒÐq¥økNÒ µºÒ4õÓ¾ÕEn,•£Y¤pˆB…À%˜ ãŒõ­[[ ;&™­- ·3Èe˜ÅO1ÏVlu>æ¸'ðˆ…î¥s ¶Œ†öêÊåÕnäPZÞé¦,tNæR‹ßq’�­øS×.4ù,m´ÉEœ±Îw3£YcvQ„a†D*OQ¸ŽA"€:ê+Î`ðN¯oc£À,49ZËD’Æfyätíå üEœb½œ‚çŽ9±¦xZ[%Òôë‹x–Xå»}ž6x>Å,­(ˆ±EPAòÔ(èÀÁ8�î ž+„/îṖ¶8#ó%ehÖs[Üê÷2‚«yzfŠ3ü "Ž?ÔÆ[þëZ´�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VOŠåð–µhÎíc:ª¢’X˜Û�ÔÖµ‡'‹ôH—t—2¢çkY@ÿ�Ðj?øMü=ÿ�?çÿ�äÿ�âj_ÿ�È)?ë°þF¸ê�ë?á7ð÷üÿ�Ÿü“ÿ�‰£þÏùÿ�Ày?øšäè  é5ßK,’É£É#owk%›ŽIÙÉà~TÓ­xç0Ùs×þ%íÏþ9XtPçöß·nò¬óŒgû=¿øŠµàaŒCd6Œø—·þø¬:(sûkÀØÇ“eŒçþAí×þø£ûkÀÇ?¹²ç¯üKÛŸür°è  íxç0ÙœŒø—·#þø£ûkÀÙɳÈñ/n?ñÊâ€7?¶¼ �,/Oø—·øåÛ^ç÷6\œÿ�È=ºÿ�߇E�t¶Þ+ðš²ÚÍŽXEhë“ï…®]¯ Ô5íbòÕ‹Á-Òr…wbà€z‚? }(ûÃë@—EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT\Ò"‘ã“U±GF*Ê× pAàæ¯Ö‡¬íeÓ§y-¡v:…îYÒe  ¿Ûú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �­ý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �­ý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �­ý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �m®§a}#%¥õµÃ¨Ë,R«=N Z¯=ñ 6=„Ùÿ�£–Óï+äÏï}«¬ðìÒÏ¥ïšG‘¼Â2ìIí@SÛÃr›&dPs†æ«ÿ�eiÿ�óçýð*åOû+Oÿ�Ÿ8ïGöVŸÿ�>pÿ�ß®Q@ÿ�²´ÿ�ùó‡þøeiÿ�óçýð*åOû+Oÿ�Ÿ8ïGöVŸÿ�>pÿ�ß®Q@ÿ�²´ÿ�ùó‡þøeiÿ�óçýð*åOû+Oÿ�Ÿ8ïGöVŸÿ�>pÿ�ß®Q@ÿ�²´ÿ�ùó‡þøeiÿ�óçýð*åFM;L†'–[ktffPÔ“ØUµx[þ~ô¯ûüŸãRø³þDísþÁóÿ�è¶­ìû/ùô·ÿ�¿cü(·öþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÕŸìû/ùô·ÿ�¿cü*­Ãh–·PÚÜ6Ÿ ÄÁš(¤(¯ Q–*'�qÐ �_íýþ‚öøŸãGöþÿ�A{ü Oñ©¢µÓ§‰%†ÞÖHÜnWDRz‚:Óÿ�³ì¿çÒßþýð  ßÛú7ýì?ð%?Æíýþ‚öøŸãO‚2å¥ÛÛ¹†C˜ˆ|¬�8éèEMýŸeÿ�>–ÿ�÷ì…�VþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ�g y³Åæé¾e»¤s&èó¿ÝV‰ìZ¹ýŸeÿ�>–ÿ�÷ì…�VþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ�³ýŸeÿ�>–ÿ�÷ì…Em›yk Õ½½¼Ì‹$n"2‘zz�ûFÿ� ½‡þ§øÑý¿£Ð^Ãÿ�Süji,ôø£y$¶¶HÐfdP¤ŸJ£¦_xkZ2 *ëI¿ò±æ}–HåÙž™Ûœgò  Ûú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �uµåµìFKKˆgŒ¥¢pÀL¨©«Î縚ËÄzì6²¼}®3²&Ú3öx{ ï,YŸO¶f%˜Ä¤’rIÀ  QE�QE�QE�QE�QE�QE�QE�QE�‘á¯ùÍÿ�a ßý)–µë#Ã_ò ›þ¿úS-�kÑH̨¥‚¨$œK@Q@R3*Œ±�dOsÀ ¢Š(�¢Š(�¢Š(�¢Š(Ï<Yÿ�#å¿ýƒþ®«Ãòÿ�¶ý+•ñgü–ÿ�ö ?ú6º¯ È#þÚ7ô  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶­z�¯ý¡eÿ�?pßÁþ5âkQ­Û¤V×ö0˜CK7&P0¨ÃÆA!‡pqKâA§™tm'Dk¥9]YÈ ‘´Ÿïè{sº•ìZ]õÅ‹è:]ÝÛÜÄAic1Äë3†.îج,0|¼pA�ï Ô`kxÍÅÅ¢LToXç ¡»€H| “ûBËþ~íÿ�ïàÿ�ÌÓ4ïêšMž¡m¥Y4P$ñ³Ú b¬¡#µý£Ð"Ãÿ�“ü(?A¾´ë9º€gPr3 çäJÙþвÿ�Ÿ»ûø?ƹí CÒ}cv•bÛu ›t8Ž•Ÿ§á›Ï'‡m,ô)•mgy¶,m*M‘®Â£îðÏÁçå=‡ ·Gñ•ôWoöbZÈ“îº"V˜‘±‚mÚv€Ã;ýéãåÜþвÿ�Ÿ»ûø?ƹCmÊx†+=DYôëÅ‚–ÑJìò!”–˜yŒ>òŽHæ¹;C-¬×_ØÚì2BÈA`"2³O!²ÎA�È7©ØPàeÝ@¯ý¡eÿ�?vÿ�÷ðdxVúÍ|!¢+]@°€d~íj=ÏCÖ4xoSF¶RYãušÒ5utvGR#†R8$qÔõªþÒ4ˆü¥\¾i3® Œ¼eœù`õ8>æ€7æ¿´h$ qi# #̱ÇByÀüÒ±ô½B7˜ëØñ3üí-® Ó4ôhÓjÀÿ�2q&Ôôkßx‹XÓ¼?mkw¥C>b¼´…±"B%qˆe!—Ýêñ¾ðçöE¥ô~Y%»º{8¬ÖÖ)™ ‡L–1å?;°qÁ9Ôÿ�hYÏÝ¿ýüãRÇ,s&ø¤W_U9Ãë÷ÚNseegá»y.&šÄÎæÒŽÞ)îCyÜ98 »†G<s]µ½­½œB+h"‚0s²$ 3ôçšü:ïý}Gÿ�¤ð×§ÿ�È6×þ¸§òÀj?ò4ë¿õõþ“Ã]þŸÿ� Û_úâŸÈPš(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–€8{ß$zŽ#°ðlKux¯™4Il…ÖKhâ!NðTä63œŒ±ÅM >:ݨË,šK˜ã†X¾À&ž5šäŽNUG–ð•ê“™`³ø‡=¬s«\ÛÎ.÷lŠÒÐ$ƒ¹–lれÛNs¸c]Sþá¯Ü®ž5#¦É"ª·úî—Έ–<ãÊ3 >NBžôkÅÞ¸ÕüWaw…Ñ‚2î®m’ÍÚBå6ÂEÀ`A û ~ó�µs ðv£§%´GÂÿ�ÙºŒWVr>¤%·ù"Ž uš3å¹vó9x#¼Üy©¤Ö<wa.—aww4Z–£$1Ý}‹ç¹[k†”(Ÿ(H-ŽO?1ä Ø¶³ñŒ?¯æ¶†K=ãP¸òíä Š6,|ÀñÝ’»T’OÌ�OðûÁé¡Ëy©É¥ÿ�f\Ï=Ê¥«Aj p¼Åã ð‚ÄmÚ6³°xÀ¹õð÷‰RæÕÛD¼œ¶¡%Ý̲µ~5%Œå|ˆXr£ Ùñ…¿ï'Õít¤¹k)­Þ8-l©ƒ�eþq'Ôço—œ|Ø­=nÓÄv¶§† ´‚«rÚÝØ( T²"©ù·òGF(�ЇFÖÛT•$Ô›{ié,1G>ÓµAØ´yÛËmn¹š²xÜOe$RžÛeYšÇvD‡ÎWÙ÷�ì?{ïœt†Í~!o²]6§ýŒÄpl<õ}Ì; ¾VÐ ãxÈÆpjï„lõÛXõ«][G¸dþ}ŵœ­lØi..¢ùç(ðýâFK @4´ñì–6/ª­øº†ì™‚µ ÝÙxS´„¹'h?ÂTØã=â?Ú’I-u ´kpNŸçG ÉjÌ8!KK‘Óùy˜ãÀ¼^¶¶“Bº½¹ÿ�„bâÃdÂÀ-½Ëبɵˆ ²>æ-àçqjÚÖ<#s£ÞAkáWµ²žòÅíôÕû!6Æ9KO8Vc–ŒìÚ7g¸Ã5�tÞ¸¤×Öö5þΌ̮mD pãËÌ„–rHP1ÓåËüP{¬]£Îðl°$K¹#÷&_#ùÂù™9Åhø›Âš¼~ ox~B¶fÆñ`†Ú6šFæ4*UQQ·I¸ SœŽi·±xæoÈöÿ�Ú+¥,ñJ!w³‚Ü@J¡_›iˆÍÇ$ çœ ­þ‡ñ&©.®îš[ÿ�Ç»CŒñ‡G,Çx2€Ý$WO\·…‰†£ª pÝ2#6jû>ðÛ¤“—27sÉu4çž,ÿ�‘òßþÁ‡ÿ�F×UáùÛFþ•Êø³þGËûý]W†?äÿ�múPÍÆÚÜxeD32Û3Â!W9xŠçå;HÆìgksŠtìî4ô¼MV "ÙIeaÜñÝ1H\~ó, NG¦9 ŠåæñÞŸ› ì–Wê\´ÑlBöÉo'—;¿Ï¨ØibsÀ5^óǃL¸Ö¾Ù¢j&×L¹òžæ AJÎÙpFçÉ@Ëd�Šänü_yΣi*ÚkzwÚ‘£e˜Ã– >à@›Ž?‰:üÀ:óÇÖ—-Óu)ópmâx’=³0mÜ®ç +¢Ëddd€²Š¡£j±ëZjÞÅÐ$±<S…ßÇ#Fêv’8e#‚E_ Š( Š( Š(  ÿ�È®Ø>ýÕ¯Y+ÿ�‘;\ÿ�°|ÿ�ú-«^€9_ÛÆÞ–ök&î;gdÔì¾Ò@ç ¯X tVéY~ 6šíž¥a¨i µq Ñ‚ÖÉV9|ÍÄ9²È§`Û'àåWÞñ¾³g¥Üi¢÷I[Ø‘f½’o&9ZÚ8vntGÍûÀxÉÀlTµ? ïìû=#’î5ž}?EyGvy#ŽBÒã÷CpÛäž õcEDP¨ U�z upÚŒõ=[RÓ„ÖAos"[IFó’F´>fIÇ—ÎÌÎ{ö®æ€1´õú×ý„_ÿ�@JÍÒ<E»®ê]Þžñ¡7Â$9ã‚Q„Äçs*Œ0ÆîMihëõ¯û¿þ€•V 6Aâ»æ—NÑä²¼·>t±Ú휰*%rH”Üz »@ç Ð+¤yšÕ¾³k?‡´[;·X¯.>Õ¢¸A34™I‘ç¸+ÄŠ@;ò®¥´úMæ¬Úî“¡ØgJ²›P“ÊCÉ3J’7 »£P7zóY#[šó¾%¿‡ì¬,?´ZÖëNufCåÈ$'ÍaåÞ)Ãg#Þöƒ6Ïê–ö6±qÑÛÜAeµ¶C"ÄuÞ* _Ýì!TdÀ{ÀÚ½¶µáXnm"²†žx+,yH‘Êè˜Ç¨VüsÐÒéV¶? ì.ï€6piË8+¸yk-Ç~â´t)/äÑà:œvñÝ‚ÊÂÝJ¡PÄ#$•Êí;I8Î;UOcþ]'0Çöd?¹s'î‡Ëó9éÉ€9:ãE]3Wº¿ðÄvÚf¤-­ìÖ$rf·†0®ªÅ ;o'Jçâ߉,ôÛ YêCÃVÛ¢–ÚÌiÓÁ íŠK¨•£ Ë èr@>™5M.t?øA4ïk~´ct& h£J›~ù6å2ì1œ(<G¨hÖz'‡µ¹<>¦\ÂñMc-¬eÒÓìïs…¶ ¦lsŒsÔÖ©ªx_Iðü^!o=펤«~ìBÌŠ9Y©Â䂤ã<×u\½î“ Üx¾ÞÊïE²¸{« %Ý5²H�…£@OËÄä}ÞAÆFÜ¢€<ßQÿ�‘§]ÿ�¯¨ÿ�ôžïôÿ�ùÚÿ�×þB¸ GþFwþ¾£ÿ�Òxk¿Óÿ�äkÿ�\Sù �³Erz牯´/ØY\%¹Òµ iE»„>gÚn“»eè1’F*ê6Þ'Ó4¯!fˆJÖÚ”ÑÛ¾wÙ^à,GÌÝœ*œl†ûÀŒPeEr1øãí2éÑÚè·ûî5#§ÜC)‰d¾Îgøû»N37 nN¶â(5‹ûë%³¼µžÌ#2Ý"©tvuW�1 ðØ<Œ@QE�QE�QE�QE�QE�QE�‘á¯ùÍÿ�a ßý)–µë#Ã_ò ›þ¿úS-�eh+¾ÕnÞÎ}:™n.cßå,SKdíà±}D ñȬuø¡$šN—{…¸ßMmkèãEV†)IWp¡Øy»BIFÇJî%Ó-¦’êGó·ÜÅä»-Ä€ªã&÷gÝ0rê?O°¶Ò´Ûm>Î3­´K (\¶ÔQ€2I'�w44SE<~d2$‰’7#2Èô ŸE�QE�QE�QE�QE�QEçž,ÿ�‘òßþÁ‡ÿ�F×UáùÛFþ•Êø³þGËûý]W†?äÿ�múPIüáû˜l#š ×<¶Ìu+Ñ»³nó2NsÉ'©¨Óáï†ã#KkÅDHcU•ÎÂÛ¢÷‰#Ð×QE�sãÁ:ÙÕ¬åx’i&ÃÝÌÄ™éÙdcË!ʓɤÔ<!¢j’^=嬲Æß:‹™U]¼£ ;U€Ævœc#ÎnQ@W>Ñ®üï:£çË òm¾wIPŽpÿ�xNzªNH˯è—Ï5œ¾d’‰‰Žîd áÃåB° — çn72‚r@5ÐQ@tËD´{[•"y^fNòîw1Ë’y$Ÿ©'½^¢Š�(¢Š�(¢Š�(¢Š�Èñ_ü‰Úçýƒçÿ�ÑmZõ‘â¿ùµÏûÏÿ�¢Úµè›ñªªhm’ßN’'ûL’_Z‹%T²&åËú|Àúx¬'YÔµí+TûDš>RExXؼ±´l®Km5HAµ÷.pr€¨ÏEâË+››g²²Ò®ï-ŸÍ‚=BØË¹û*G–Çûüãl#uŸ>©¦é:f‹dóë"ËÎ6€BGØÖä¼Ê¥w–\äu_Ĭ°°Fû6¥}gf5ƒl±Ïq![¦YA$°\çÆ´j†‰¨6¯ iÚ“Â`k»X§1¨]Cmü3Š¿@ÚúýkþÂ/ÿ� %söú—†o>$Ë¥ÙÙhS\ÏgqöÙãXÚá¤I#Sãœ`¶Crvzz ý~µÿ�aÿ�Р772x¾M"ùlf±¹²y£ŒÛ‘!è¤3*ã÷œåWÝÉ�q×îõ= à—FÓg´½[KÙ¿â[%ÔpE0‘‡ ±idF…`F7† ­/Åg«‹Øbðî‹e-Þ‹erêlî2™I˽”¤)Ç_Ê¿‡¯®õ=#XHl|?ÄEy¶+]±H$ÞLŒ7âe!~W,›ˆ9 ·—M©Ù\û´Ò´‹™¯´Ý-šîK¦oµJÑf`I&5´ž�#<@7‚Ú6ðµ·•kcjY£h¬`òbVI]N§*r2Fs‚Ó'†¢ŽéMËé°«ÆÀàÆ4ÿ� ]5߇á-oo†I­¶[&È•+G¹²¶ÍÀdàÉëPè<ÞÒcŽâ[wm6²Ã·z-y]à®~ Š�â¼A•qáïêÐÛ H.�–v‘+ÚÚIÂ,oº5ã_½¹'på«f/ èpø«K²›F³º[.æYúšU)$C9P¸£�•@ž¹ðv«&•~¸e’´Ë{­B$‹O9üìFè’= ýSMÒ Ð|u¥‰ôï5!³�v (dÛrN>R:Ö€-i~!ðÝ–¥äØøbê´¸_lÁˆ„×rCÃy›Äftq€8àãèÅ5·†#ÒáÕ ð½„ u-£gÓá-–¹T� ¯ÌäŒá”œ•ϵ 7Ôäi×ëê?ý'†»ý?þA¶¿õÅ?®Qÿ�‘§]ÿ�¯¨ÿ�ôžïôÿ�ùÚÿ�×þB€3µÛ͵þÓŠ[‰mæIᎠYn$Ãm±«ûv>•GL‹Ã~+¸‹\±KÇxçK¤‘…Ͳ»ù{V@´81»°AsWmío¬5 vXcŽy/$[›_5Ê'ǘ+å7t?|àæõëWß t¯ yz[]ZÙ w’Ißdr$&8åCåòAÃ`ƒÈ9�ÐÛ}3Â^›X‚;¨ôû ÞåÜMsº)-•­ØíÝ»„FB1‚£[vú>‘¢_\jq#Ã5ÑÊæiX´Œàm$¨ùäsÐcyõ®5¼¬5—ˆE¥Cu¨ÚßÛ«$Ó14§ËãÊ Ê¸ œŸ»ž%—Á7ÆoÞÉkmý¥«Û½ºÞÃ};¸�´lˆòrBŽ&€=Š( Š( Š( Š( Š( Š( ²<5ÿ� ¹¿ì!{ÿ�¥2Ö½a{TŸìºö¥o,³ˆ•-Ê«;³°¢'cÔš�Ü¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� H¢¼ßûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ�  |Yÿ�#å¿ýƒþ®«Ãòÿ�¶ý+…hn'Ô¿´/oî.î>J™V5 ¹ÝÀE^þµÝxcþAöÑ¿¥�lÑE�QE�QE�QE�QE�QE�QE‘â¿ùµÏûÏÿ�¢Úµê¶¡e¥¦ÝXLα\Âð¹C† ÀƒŒ÷æ±uK JÏNšâ?jeÐ Š×@ÿ�ž4«©hÚ^³Eªé¶wÑÆÛ‘. YBŸPˆøoB1]Dt];Ë»KrŸeLLàä3Œ|Ç'9=ëŠþÑ×èb½ÿ�¿ßüjíwþ†+ßûñmÿ�ƨÑÀ ¡T��Àµ-y¿öŽ»ÿ�Cïýø¶ÿ�ãThë¿ô1^ÿ�ß‹oþ5@å…€±’õ¼Íÿ�i¸3ýÜmʨǿݠijËu(Óí—ñòâÌßïœ|ßpÚ:ïý W¿÷âÛÿ�Qý£®ÿ�ÐÅ{ÿ�~-¿øÕ�vcÃÓ[ LO –X…¤{dqјcûš•´î.®I±i®ãòn$6èZdÀ\ã,¸�`ñÀ®ûG]ÿ�¡Š÷þü[ñª?´ußú¯ïÅ·ÿ� D··†ÒÞ;{hc†Ô*G…U �pUÓôȬô]&]·Ãl–Ͻ$P¡NWž+…þÑ×èb½ÿ�¿ßüjíwþ†+ßûñmÿ�ƨ±‹ÂžÕáÐt¸Fã³Jü»x qòñôâ« áo³Alt =¡…ƒku`ìh/‘óœwlóƒÔ åÿ�´ußú¯ïÅ·ÿ�£ûG]ÿ�¡Š÷þü[ñª�ê.ü£\ÞÛ]En¶o âw[DHÄì$Iyòäþò4lŒ¯\A^oý£®ÿ�ÐÅ{ÿ�~-¿øÕÚ:ïý W¿÷âÛÿ�P¨ÿ�ÈÓ®ÿ�×ÔúO wúüƒmëŠ!^or‰®'žê[™î$I,¡A$* áTŠ;W¤iÿ�ò µÿ�®)ü…�Y¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¤ 2z -›ý¥ÿ�Ϩÿ�¾ÛühþÀÒÿ�çÔßmþ5¥E�fÿ�`ióê?ï¶ÿ�?°4¿ùõ÷ÛiQ@¿Ø_üúûí¿Æì /þ}GýößãZTPoö—ÿ�>£þûoñ£ûKÿ�ŸQÿ�}·øÖ•›ý¥ÿ�Ϩÿ�¾ÛühþÀÒÿ�çÔßmþ5¥Q]JÐZM*€Y#fé3@¿°4¿ùõ÷ÛØ_üúûí¿Æ¨éÇÄ—Úe¥ÙÔ´¤3Â’•l‡”¯÷«?fñýt¯üÉÿ�Çè_ì /þ}GýößãGö—ÿ�>£þûoñ¨¾Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€%þÀÒÿ�çÔßmþ5rÚÒ 8¼«tØ™Î2O?g}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôVGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�н‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô¯Ed}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôVGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�н‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô¯QÏWP43.èÛ¨Éü«3ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çè_ì /þ}GýößãGö—ÿ�>£þûoñ¨¾Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€%þÀÒÿ�çÔßmþ4`ióê?ï¶ÿ�‹ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çè_ì /þ}GýößãGö—ÿ�>£þûoñ¨¾Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€%þÀÒÿ�çÔßmþ4`ióê?ï¶ÿ�Ï:¥þ—­ÛZê÷¶2[\[M"´+£D�æGÈ"CØt¡ý¿¦ÏÐÿ�¾ü(�þÀÒÿ�çÔßmþ4`ióê?ï¶ÿ�½ÄWP,жèÛ88ÆyÅI@¿Ø_üúûí¿Æì /þ}GýößãZTPoö—ÿ�>£þûoñ£ûKÿ�ŸQÿ�}·øÖ•›ý¥ÿ�Ϩÿ�¾ÛükB8Ö(’4DTzN¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯¨È6ëþ¸¿ò5b«êò ºÿ�®/ü�VÐ?ä[Òÿ�ëÒ/ý�Vghò-éõéþ€+F€2î¼I£Y]Ëkq¨Ãñ åI�ŒþÆ¢ÿ�„·@ÿ� ¥¿æiÚ7ü…<Aÿ�aÿ�Òh(ÄúL¾$—Ãér´¢]Í€?(b‚@e8¿±Àá-Ð?è)oùš?á-Ð?è)oùšÙ¢€1¿á-Ð?è)oùš?á-Ð?è)oùšØ'�œgØW;àßßøŸN¹º¿ðõæŠñ\’+¬æE�|à øéŒŽ§š�µÿ� nÿ�AKÌÒ7‹ü>ŠYµ[p d’ÜX uÍ_\µÖ$Õîn&h¯JÃçÚ$c* ·ï/<1ä×Q¯ÿ�È·ªפ¿ú  –÷0]“[Ì’Äê]A¥®Káïü‹±×(¿ô]m�QE�QE�QE�cÉâ­ )å…õKq$Nc‘w}Öpi?á-Ð?è)oùšƒÂ?ñ婨Vóÿ�G5tÿ� nÿ�AKÌÑÿ� nÿ�AKÌÖÍÿ� nÿ�AKÌÑÿ� nÿ�AKÌÖÍÿ� nÿ�AKÌÒx}F[V¶QêÍùÖÕaxÏþDÝWþ½Ú€6ÕÕ×r0aêiÕáùÛFþ•³@_Œÿ�ä=¤×­×þ…cÖÇŒÿ�ä=¤×­×þ…cÐu ÈÛèßú­*ÍÐ?ä môoýÖ•�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�_Pÿ�m×ýqäjÅWÔ?äuÿ�\_ù�­ È·¥ÿ�פ_ú�­ÎÐ?ä[Òÿ�ëÒ/ý�V�bi†Q}âC�F—í«°9!K}– dŒàfª¯†.nuÔooâ‚îDòÝ´ÛT…ÙºÒ°iàt+Ó¥^Ñ¿ä)âû'þ“AZôÀx/L×5;+¹<U§^鳤å`Xu«¦Þƒ¹iÇ=ÁçÐw³£i>1ÐõNyõõM9¦-ke,å¥ïsÄŒ£k(0KAù—­vÕÕ¸º´šÝžHÖXÙ Äå]AÊ‘È>†€3,<S£jÆ—±Ãp V¶¹>TªGål ò28àÓ—ÄšT×±ÙÚ\‹ÙÝ€"ÑLÂ0{».B÷ˆÏlÖo…¼eáÍôÙ¤Š<ÆSçÄ¡° œ…à ã©ÉïÒÇp H‘QEQ€(̾ y?Ùþ!ò~Íí6ÝäyŸ{hÎíÿ�Åë·åô®ÿ�_ÿ�‘oTÿ�¯Iô\/Á×w°×·É#ãP y—k>Á€ ýÁ臕èkº×ÿ�ä[Õ?ëÒ_ý�ÐÃßùbÿ�®QèºÚä¾ÿ�È»ýr‹ÿ�@ÖÐEPEPEP-¡Ý5‡µÛµPÍýü¡OBVG8ý*{ üM{¦[^yºBùð¤»|™8ÜÇß÷ªÚ-³Þøs_´ˆ¨’{ëøÔ±à‘ÀÏ·5jÁ|Ge¦ZÙ7Js)ïív¨Ç‘í@ ,¾&sçiþØÉÿ�ÅÖ]þ·âk&A!·ÿ�,dÿ�âëZSâ9ÙšPçþ‚RñŠÊÔ4Þ²e¤¦ÐGü„$9ÿ�ÈÏÝü@ñ5µËÃäé W¿•'¦¿\íÏÆA ö ìýÉ9Çüº¿ø¢êéæ £®ìqöÙOlÏæ®~ ø®xeA>Š7‚3ö©xÏý²  yÿ�hB¿²t’3Œm“ÿ�‹®·Âÿ�uˆ>ñTš…­»YÄŠŸg݆ 9É?Ýýk¸ýž¼[4aF¡¢ çÏ—ÿ�W_áO‡z¯Ãÿ�ø®=RæÊv¼‰>ÊìÀ œîUþõ�zw†?äÿ�múVÍcxcþAöÑ¿¥lÐã?ùiõëuÿ�¡AXõ±ã?ùiõëuÿ�¡AXôÝhò¶ú7þ„kJ³tù[}ÿ�B5¥@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@WÔ?äuÿ�\_ù±UõùÝ×þF€+hò-éõéþ€+F³´ùô¿úô‹ÿ�@£@7ü…<Aÿ�aÿ�Òh+‚‹Ã?ÖXŒž%³hÖKbê.ˆ,Š„N3ö~ ¶ Ÿás]¾¹á]3YW‘ôë»v§–ÝY˜Ž[éʰá\YÏž™ÿ�€ëþÿ�·Åϱìÿ�„ªÃífÙæyçw»~>Ï÷|¯“o¯9íSÉ៊†iL~%³XÌ·%ÝU�Iû?%%ñ8­øW_óç¦à:ÿ�…ð®,¿çÏLÿ�Àuÿ� �ÇÃ?Ñ<Kfщm‹¨º ²*:ƒö~ ¶ ŸásPÂ-ñsì{?á*°ûGÙ¶yžyÇçnß³ýß+äÛëÎ{Vÿ�ü+‹/ùóÓ?ðÂøW_óç¦à:ÿ�…�IðëÂ:§„Æ´º„ÖåášÞ;fݱ:|í±761“Žqšéµÿ�ùõOúô—ÿ�@5Êÿ�¸²ÿ�Ÿ=3ÿ�×ü(? ìHÁ³Óÿ�¯eÿ� �½ð÷þEØ¿ë”_ú�®¶¹ÈËÁÚvýNî(a–UŽ2¨Äg �€þT¿ðxoþ‚?ùOþ&€:*+ÿ�„ëÃôÿ�Èñ4Âuá¿úÿ�ä ?øš�訮wþ¯ ÿ�ÐGÿ� Iÿ�ÄÑÿ� ׆ÿ�è#ÿ�$ÿ�âh¢¢¹ßøN¼7ÿ�Aü'ÿ�Gü'^ÿ� þ@“ÿ�‰ xGþ<µ/û Þèæ®‚¸¹t¿ ø¸M&—m¦Ip’︑­�r['-•ÉÏ'5ü+‹/ùóÓ?ð€;º+„ÿ�…qeÿ�>zgþ¯øQÿ� âËþ|ôÏü_ð îŠá?á\YÏž™ÿ�€ëþ¸²ÿ�Ÿ=3ÿ�×ü(»¬/ÿ�È›ªÿ�×»Vü+‹/ùóÓ?ðÂðâÈE¦šä£ð ‹Ãòÿ�¶ý+f¨i/§Yy:³n-•éWè‹ñŸü‡´úõºÿ�Р¬zØñŸü‡´úõºÿ�Р¬z�î´ù[}ÿ�B5¥Yºü-¾ÿ�¡Ò Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «êò ºÿ�®/üXªú‡üƒn¿ë‹ÿ�#@´ùô¿úô‹ÿ�@£YÚü‹z_ýzEÿ�  Ñ Š( Š( Š( Š( ÄßñûáÏû ¯þ‰–¼ãUøüšN¹¥ÍáÜÉgu%±qzpû¦áû®œgóöÏ£ø›þ?|9ÿ�aUÿ�Ñ2×Ê7Œ7Ž<DGQ©Þ6?í«Oå×Úë‡öŽ€ ÿ�Â4zgþ?O¦ç—ùÈíÍ8þÑÇü#‡®3öÆõÇüòüúüW‚¦”a!q×÷Š3߸úÿ�ß_÷Ô›;pÃþÛGOðü§*î¿ðѰíÏü#L}…éôþy{ÿ�‘Í)ý£ ó.äë{ÿ�Ó/oóÈ«&8óSëéרúŸ¨&§oÏè™1éŸä~€{õw€þ(é8i-‘>è§"ÖI7\g(p7c¸ÇôÁ®ê¾´¹¸Óï!¼´’xf…Ä‘¼s e#`ã¯QùñÁô×Ã‰Ðø¾ÕtÍM£‡]… ¶åGW\ܯ¾G€ ‘#¯Ä‹”W` �ðxzëëŽÿ�š—?ýp‡ù=v4�QE�QE�QE�QEÅøÏþCÚGýzÝèPV=lxÏþCÚGýzÝèPV=�wZü-¾ÿ�¡Ò¬Ýþ@–ßFÿ�ÐYÔ,-µM:æÂî1%µÌm¨{©4fŠó­ÛUðïnæ¿F©¤[M§iÒù-!”+…Q¸ï>PÀ;sÞ«ø{T×u-fÊÎOkŽ’ £r_HHų¬‘¼1HM¸ÆÄç© ƒÊäÓh¯:½Õ|[©s"Gìö÷î!O‚uªÄv—}»Hí´³+(oÝ9“xƒÅ)œPßkMzðê^T2iJá⹌[³(mFŽU Ãjcš�õŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯¨È6ëþ¸¿ò5b«êò ºÿ�®/ü�VÐ?ä[Òÿ�ëÒ/ý�Vghò-éõéþ€+F€ (¢€ (¢€ (¢€ (¢€9ÿ�Çï‡?ì*¿ú&Zó¿‹ ?µELj¼;oÿ�¬×viÿ�/í ÿ�žœ âê0ÜŸDñ7ü~øsþ«ÿ�¢e®‚€>¹]ïÌŠ8ÆG·òÇnƒ:ð²¬!öOþ¬¿ü{ÏÙg?óÃþ˜×ž¯·|QøB¾"/«øz8ãÔÞEyí‰UKƒžX¿¯fÇ<ó\“|&ñ9ˆ(Ñ-så•Ïg×lÃþxzÈžüuáJ�pCŠÓ"ùsó6ÏøõŸþzB¿óÃþšž:ôÉPÐ/†Á±3l›" ÿ�ñï6?ÔÈý|œ¯©Î2ÃÑÇ Uމk.óûÛ>ždMõˆãÓž˜,øGâ‘fb:-©s\ùÖ|§_ù㟼Êz玹Ã(<"¦íâòî0²ùñíqŸõâ?ù÷ÏLç°µ ¾‡-˜KûWº‚â~Ó±Ã:²0…e0‡Ž{çç;NãèÃáO‰ËÉý‡k°Ë¸6ϧœñïºém¿)®>x Ûÿ�±­C {¼ëNÉ Ÿõ9ûÀž¹÷ÝóY§Ïî äý»*ã¿æ¥Ïÿ�\!þO]�QE�QE�QE�QE�q~3ÿ�ö‘ÿ�^·_ú[3ÿ�ö‘ÿ�^·_ú@Öÿ� Ko£èF¯Í4vð¼Ó:ÇjYÝŽÔš¡ ÈÛèßú¦ø‚Æ}CI0Ûæ¥Ä…'Äs$…3þÐB¾œÐêú–òiz¡»•de’+[{‡x—;•˜Ä¥£år +ÓÚ´t[ >ÇNS¦+ùÏ2I#Èò–æfrYŽ�äœàÚ²_OÖlõ]F÷IŠÆêÛThæ’;¹ä¶’¬y ¨Ä¨¿) AÏ<×;?u»›Ø./cÒu/³ÚYDâîgo·<I0Ê ghf›#ïª\Žp�=&¡kKg»Žííâk˜Õ‘&( ª¶2u�àd{ óù¾_,š ÖãN3Ùn´Žà¬bò¨â¶’ÊžSF3ŒϨ: ðü–ڌڳZ‹?ßj0”ØÈó£Þ3ÄÌ¥F¨ùzñ!é@f¡¨[ivOyy!HPª’¨ÎÅ™‚ªª¨%˜±�� $€*œÞ#Ó ¿´±Ý‹›¸æÅŒÌLkÄá>R2 ‚ Œ‘\ÏÃ]NKXcû…q$&1šWQ)4rfQB¨ÉüY?8Â×Sâ^ê¾$Òiiq µ9ìåÝ!ŒŒW•P-›8ùF@&Oø~H­eIuK¨ZâºUÑß â?º7/=>aê*Äþ2Ñ {EYînäâec=È’0@, HÂʦG¨®Jм[¥EáÝ–z$’iZKé­»P”,aÃÜz@>_öºñ’¿ð‚ÞK}¤Gu*=Œ^‹¹-o§´—͹•e;>¨ ãk>0ÙÇÊ2×Þjöv$ºÅÃÈ–Q@nü—,¨q%q¸qÛrI#‰CHêŠX(,p2N�ú’@ükñƒŸÄÉ©nŽÎå¦ÓÖÌ]¤Ç~e\)å· $rc®Mdx‡Àš¦»â5 l4G‰™7¤²»•&·#ü0ʘÉœrÀ€zE5äÝU¤m¨ Ác‚p=N?®_ÃZ¥¥ø‹XÔnáÓâ‹PD$ZÊÌL‹$¤»AË,Š:œl1GïìM…áÕ[ áu ¹•ØMû™P³¹‹!·<M÷Xå ,Ç�ôJkÉ2+º«HÛP‚Çàzœ^s ü?Ôt}gA¾ò´¤û­ª^4.Ûå–(n!,Á»rΧ'÷`{…¶ør]tµÔ´ éí.Õîæ}Îoãò¥C$ŠÉ&dVÇ •ûÀ€G¢¼×Lð6¹§øE4‡‹IšSapäÎávé6?w’Î-Ç÷­ÏËó-—æÓô˨†¤ÝÜÉr²±žþsÑPÀJèÈë€ßt+ òÂàÑcž)žTGËDÛ\wS€‘%aèÖj×w—B4ßgkjR,„gÌ.ê!I(Ï?'Ò·(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ªú‡üƒn¿ë‹ÿ�#V*¾¡ÿ� Û¯úâÿ�ÈÐmþE½/þ½"ÿ�ÐhÖvÿ�"Þ—ÿ�^‘è´h�¢¹H<9£kî¿q¨é¶÷3-ê yS$/Ù¡8üÉüêßü Þÿ� —ýû ‚Šçÿ�áð¿ý�¬¿ïÝðƒx_þ€V_÷î€: +Ÿÿ�„Âÿ�ô²ÿ�¿t áúYߺ�è(®þo ÿ�Ð ËþýÕoÁ~‡AÔe‹E³IÖVVòSƒ@5îŸe©@!¾´‚ê Û„sÆAõÁy5À�ŸãB°Æç”U½à)æŸÃ°y²¼›aˆ ìNÁ]M�yÇü ÿ�Ð ÃþýEGü ÿ�Ð ÃþýE^E�yÇü ÿ�Ð ÃþýEGü ÿ�Ð ÃþýE^E�yÇü ÿ�Ð ÃþýEGü ÿ�Ð ÃþýE^E�qš…äÒ5(å‹O‚Ú<åÌA<gk³®'A𾇪®©w¥Û\\6©v ’&IVô«óxKÂóA º% yج`@NHÆ@ãŽyì¡ žŠäuŸ xgKÒ.¯—ÃÖ24)¸!LøÕÉ<áX£yB³Ú ±ÛN š�訮jÛ¼¶ŽæßE²xd‘ü¬ˆÏcØ÷ªÚw…¼3}%ò·‡¬Sì×-�Âgp §>ßz€:ê+—‹Â~šòâÑ4+o6�¥÷Z²®daˆÃt= Çz¡âŸøzÇÃÕ®‘k ÄP—ŽDL2‘Ѓ@½“á饟Kß4#y„eŽOjÖ /ÆòÒ?ëÖëÿ�B‚±ëcÆòÒ?ëÖëÿ�B‚±èºÐ?ä môoýÖ•fèò¶ú7þ„kJ€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯¨È6ëþ¸¿ò5b«êò ºÿ�®/ü�VÐ?ä[Òÿ�ëÒ/ý�Vghò-éõéþ€+F€9ÈõKMþJýäKKkÕy]"y ¯Ù ÉÚ€œ¤ã’x„ñï…dÑ®5xõ»g°·1‰¥B[Ëß´.@ºƒÇ ã \ÝÂO¤6sJú„kåÞ©h™~Ïo¸0~\ãßÏ/…üC¦Cv¶¾ðD–ÆÕÜ[ÛiíÏpªZ1‚víó#’{A�Ь?<pñ¬ZÉc$RÌŸè“�ÑÄ»‚S•ž„©$Ö°ñ‡‡5=-u+]jɬيù(“‚+Àž•ʯƒµøaµ·µÓ¼j²¤qêXâY–?´6åd#mÎà¾ð§‰#†òÓFÒ<obf[DöN2ÿ�Ë@®LeÔàgæ8<æ€:i|qáH"ó_ÄšVÏ0G•»Fù‰pO äàsWˆ´2–n5<­ëùv­ö¤ÄíÀÚœüÇ‘ÀÏQ^a¨ü3ñd—ÚÓÏ„b°¸yš[K„mùÉ‹ÌÌ ¼ªœu'?6mÄð‰­&´Š OÜÚXˆ ³ÜØ‘% <Ù”"…F,{"Œ©æ€=Þæ Ët¸¶š9áq”’' ¬=ˆàÕ=þE½Sþ½%ÿ�Ð só',-m,´}?Ãè‘«¶ <¢d!A ?z�éçæÛ¹¬yßð‰ßý§ËóþÃ'™åçnï,çç  ‡¿ò.Åÿ�\¢ÿ�ÐuµÉ|=ÿ�‘v/úåþ€+­ Š( Š( Š( cöv÷úV©ouË j×™Fè|Õ…§C¦_ëi÷ž–åÊ]ˆehcÛ»™Ñ6’qŒýïϤðüyj_ö¼ÿ�ÑÍ\F‡%÷„¡½ÕtkiªŸ1á™ãŠxÝ\€5‰v‚]VFxé@?Š</¡ÃáBHôØÖ"A�ñÍE¬ØhútóÛ[xR[éRÆK¥Ù ž\Ž*C¼)]ÌIú’0s[ž-ÿ�‘SRÿ�®'ùŠÀñ†›%Þ©+ ?RÔb’ÁÚÃtÑDYn&Ðã–Îü˜Ûƒš�ÍÐÎy®.‘7€.,­)ÒÃ/’©?6ôM àÆsžÜfØÒ47Lñúxyµ-o˵¶MÒIò&Gãüúô¬¿ XÜÆÿ�Ù­Œ×F¯'É é‹†I ‹eQ̬@ÞeÁÉ�VŸ‰<âÝË~c7áeû¢)–3ä‡!ˆ �¤–$chlã¨�]ÛÃÚ¾´!O_Ø-Zi.¯¬ŒCåp«lœ±Ëg ÷ã_Äš]–—à­a,­’x `ÍsŸ Ùoòîü[°Mñ6¹9hîÎϾ0�SÂ+nÿ�­#‘Éë¼gÿ�"n«ÿ�^í@xcþAöÑ¿¥lÖ7†?äÿ�múVÍ�q~3ÿ�ö‘ÿ�^·_ú[3ÿ�ö‘ÿ�^·_ú@Öÿ� Ko£èF´«7@ÿ�%·Ñ¿ô#ZT�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�U}CþA·_õÅÿ�‘«_Pÿ�m×ýqäh¶ÿ�"Þ—ÿ�^‘è´k;@ÿ�‘oKÿ�¯H¿ôZ4‘£ÈSÄöOý&‚µëÕô¦’æïKÔ/­î.eW–8¤@„„ œ0=‘{ö¬ìOÐ_Qÿ�¿Ðÿ�ñ4ÝQ\/ö'Š¿è/¨ÿ�ßèøš?±<Uÿ�A}Gþÿ�Cÿ�ÄÐuEp¿Øž*ÿ� ¾£ÿ�¡ÿ�âhþÄñWýõûýÿ�@Õgkÿ�ò-êŸõé/þ€k–þÄñWýõûýÿ�QÏáï\ÛËo.«¨´r¡G_:A?Ã@?ä]‹þ¹Eÿ�  ëk Âú\ÚEƒ[KÅ]ª€°n�ÇjÝ Š( Š( Š( Â?ñ婨Vóÿ�G5qžÓ†—ãhÊx^ýšó|’js"¬v¥|ÕÚ‘|ÃËã§ÏþÁÏSá»Ëe•´mKP„ÏpóÉJ›ArYˆÜ¾§Ö³ÿ�±<Uÿ�A}Gþÿ�Cÿ�ÄÐIâhe¹ðÕü0FòJñ¨ƒ$œöÉüC±šò{…6Z½õ»i» r2#s+”…ÛsÎü¨FÑÕcûÅ_ôÔïô?üMØž*ÿ� ¾£ÿ�¡ÿ�âhÃÚj[xÓF[ êðÁ ,¢îV>M¸Ap¡O™¹Ï™‘Ï>o<FkøŸK’ïÁþ$µž Oʸԣbº}¿™q${¡Ï– ±ù¹�pqOþÄñWýõûýÿ�Gö'Š¿è/¨ÿ�ßèøš�ÄømpcñMݤ°øÂÙäŽæhá×§&6A,Dº&Ð7sÎN9å·qÜxÏþDÝWþ½Ú°¿±<Uÿ�A}Gþÿ�Cÿ�ÄÔW^ñí´–×:–¡, ®4XaéÂÐMáùÛFþ•³Yš¤öZw•p›y8È<~§@_Œÿ�ä=¤×­×þ…cÖÇŒÿ�ä=¤×­×þ…cÐu ÈÛèßú­*ÍÐ?ä môoýÖ•�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�_Pÿ�m×ýqäjÅ6HÖXž7GR¬3Œƒ@4ùô¿úô‹ÿ�@£X±ø[M†$Š)u4*ªê·@(�ýåTÖ4+[m*y¡ºÕVEÆö­ÉÇ ÏJ�éh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèÔh¯.òeÿ� –­ÿ�ƒ;þ.&_ú jßø3¸ÿ�âèwÆòÒ?ëÖëÿ�B‚±êµQr·=Üò¢2)¸»–]¡ˆ'Ø«ùTôÝhò¶ú7þ„kJ³tù[}ÿ�B5¥@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@fëÿ�ò¹ú/þ„+J«ÞÚ­í¤–î̪øÉ^¼ÿ�J�óº+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€9*+­ÿ�„R×þ~&ý?ÂøE-çâoÓü(’¢ºßøE-çâoÓü(ÿ�„R×þ~&ý?€.èò¶ú7þ„kJ«ÙZ­•¤vèÅ•3‚zòsýjÅ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Introz2.jpg��������������������������������������������0000664�0000000�0000000�00000064265�15030617045�0023160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ý"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ +"çU¼}NK.Ê §\I=ɉ#-ʦB1,G$``cû´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯Ed}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ)’ÞëðDò˦é )gvÔä@ä’|Š�Ú¢±ü-®xzßU6âÜLò(Œ9nFL䪞vç:Ñ@Ÿ«ê-§Yƒ bkÉÜCk 8ó$ à@�,O`¤ÕòB©f �2IíXšFíZíµÙAòYLv{DO2}_�û(^„µ�_Ò´åÓ,V þd¬ÆIæ#Yå˜ýOnÃ�p]¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+…ñž¦uÑáèý0²ê ;ƒÊCÿ�ûÍþÎG®‹ÄšàÐt–#ó®åa ¬óÒSÓ>Š�,O` pvV¦ÖC4ò1’yˆÁ–Få˜ýOnà ÇÀßò*Çÿ�_WúS%xþEXÿ�ëêïÿ�Jd¢€â¶¿º’ÃG²‚ÞT½.×"k†„<I‚cÊ£}íÀ:dwÈ´.|L�GÑÀ�Õ$ÿ�äzuÿ�üz7ýq¹þQÖÍ�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�bý«Äÿ�ôÒ?ðk/ÿ�#Ñö¯ÿ�ÐHÿ�Á¬¿ü[TP/Ú¼Oÿ�@}#ÿ�²ÿ�ò=jñ?ýôüËÿ�ÈõµE�röÞ#Ôï/æ°µ‹Ã“Þ@ –Þ-qšHñ€w(ƒ#¨ëëW¾Õâúéø5—ÿ�‘ëGð÷ˆ´øa°7v0ZYiòÚ[ÜCóÍ4‡nÉ\4caà³�í¹°xÇ8Vþ ñ½”z[Ǭ=ÍÅ¡ß9º×n ÌÞtO‚ ”IW wS°Pmö¯ÿ�ÐHÿ�Á¬¿üP\êÚíˆÝXèP ¥Xcóu‡]ò7 ƒ6ü±ì&¹­?Á¾*†ò¿Öîo":„’ܱÖgŒ4 Ž¡Q5ÚrÈÛK |¸âÏü"þ%c2Éso,3ÝØ]ySêJ!hn ²ì.‡•cP£‚xî¾ú‡ˆ£’8ßLÑUå$F­«H 2p>ÏÏ5'Ú¼Oÿ�@}#ÿ�²ÿ�ò=`x³Ã~$Öuhµ6êÒ tÙá—MY&Â?_;ÍýÉeÈ%�GÁ'¦+›µ³ñ)ð§‰u“[ˆùÐÚÛýªöK™%ó‹[²#¨d »@+Á¾l`€ÜË®k0^-œÖ¾Žé8…õ§T°@v›|à± ŸRSV¾Õâúéø5—ÿ�‘댇Â~+ŸQÒõº‰"†O5]RèÍO-³´Ež0Î Á *øÁ›ùlIá?É¢Iký¥³Qð¾]jëç”.ü½›Qrrc^€:vÔ¼B²,m¦èÙüµS«É’Ûwmìýv‚qè3R}«Äÿ�ôÒ?ðk/ÿ�#×5wá/nj7zeòY¥åÓÜy¿Ú3’»¬¼¦»l¡džŠ�T“ž4Kûk«KèÕ!”H¶Òk×n€ !mŒÆ3æ±Î2Ãþ[ãE Ãí^'ÿ� >‘ÿ�ƒYùµxŸþ€úGþ eÿ�äzg…´½CJ°žFC$­9dc}5Ñ)‚Z\`“¸íPqõ­Ú�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�ÅûW‰ÿ�è¤àÖ_þG£í^'ÿ� >‘ÿ�ƒYù¶¨  _µxŸþ€úGþ eÿ�äz>Õâúéø5—ÿ�‘ëjŠ�òÛ‹ÛÍk_»»Ôa†),dk8 ŠS"GŒ`Ä.KÀP=s5W‹þBÚßý„¦þ”ùšvx­­IyrþTznêIÿ�e@,}‡­�uÞÿ�‘V?úú»ÿ�Ò™(­m#L‡GÒ °™– ríÕØ’ÌÇܱ$ýh  wÿ�ò5èßõÆçùG[5ÿ�#^ÿ�\n”u³@Q@Q@Q@“â<GámSGq7–ÏWr£‘ò6?Ùl0÷Ä\ø#ÄrJêÖ=&ÒãQŽáÞ ÉRËA 0’D_½ åÊv2…̽ÈÍ�z\rG2ÕÔ’7)ÈààÓ«Î[Â^*]KE¹ŠM=a´¹¿¹»5 ¢óÄí* u;W*O@Ä`ŒS4Ÿx³NÑšõgº¼_³yký«,Vëå¡RRQy&H} ½(Òh¢Š�(¢Š�(¢Š�(¢Š�ân|}< zÃG Y¦ˆÊ×ar#vRØÛÇÝ&µ¬uýFk­:+íÙ-ðb›®:…°Ë´`àz×/áÍ/ûo_¿2©6¥ÓɑijyîÊŸEá¹_q]~«ÿ�#ƒÿ�]¦ÿ�ÑM@4QE�QE�G<ðÚÛËqq,pÁ’I*¢’I<�9ª2ø‡D€1›XÓãÙ¸m÷(6ÄNœŸºOCÒ®Ü,Ïm*[És²È…Õ[ ŒŒöÈϨ®:ßáè²µÓ ¦¤÷O¶³†)%¶ß5ºL»š=Àá¼ö8  r( ²ñO‡õ;¨íl5Í6îâPY"·ºI€ÎH�“Ž>Õ¨’G(&7WŠ’§8 à¨5ƒm£kêbìêzz£óGo¦˜üévm ÄÊxèznã±ÅC§xgRÓmu8WÄSÎ×ȤM5´bHeÛµJm .‚2KdÐI‘ÍÉ«ÆÃ*Êrö5æ£g§ù_l¹Ž)`!Ú¤ª3žz *³}úW}à;Ù¯í4닉5.H/“íRCÉdÒ´­…d·G!VDùIæ¨Øü4Ô/|1§+]&‰ö8ỈÛ,§ÍKy­ṳ̈¸ÞDÌÛ³“¶<€Aê”Åš'•¢YQ¤UW(ç‡iÁö>•ÂÜü73jßÚ d&¿IžÀ´ÜJ$_ÌÆ6€B¾õ›ÿ� ’vKxä×-¼¸,’É4Ü‚ÌnïN. lù£¡Ï4éôWžé ›IÕ¬oÒûNy-c·‹yÓ‘„E·>ï45Ã�σÂð+Ш�¢Š(�¢Š(�®.ãÇ“Á%æÝLÓK•î‚#vRÄmà|¤×i^i¡éŸÛÚýü.3ag©\½Ï¤ç»$_NŒÃÓhèÔÔéþ!Ôn_K7š!³‡Qr‘–¹ è|·n]£{ägšè«#Yÿ�§‡ÿ�ì ÿ�úM=kÐEPT.õÍ"Âú ÍRÊÞòà…†Þ[„I$$àRrrxâ¯×/¨xZòæïX6º¤Vöººr¯j^TaŒ4R]¸� ¶$c&€:Š+Í[á\¯%¹:¦œ!ŠS/ÙÓJÛ%á,¸E+ R9Ï/÷°*¯Áû“k/ˆ /B‚dÓÊÈbÜ) æœ[·=¼ù½@©Q¬ñ9”$ŠíÛ"©ÉS€Ø wÁ„z×Ão§=Œ7ö‰nÖpÀ±ýŽGTxçyr7ÌÇËq##¦yïÅIiðêîÏÄ0ë0ê¶ <—…M`±¯Ùü‘þû!:¹Û”ÛÛßZ]Z[]AqÁtªð8n$ 7 ¾¹ÕŠäeðméðö¤ÛëòÚ*Ò(£xí‘„²ÆlŽ<|ŸuJžHÝÍsàkëRÂþëHI$‹X¾Žé"d¸µ§)37çUó pëóà2éê6wSZÅs\BÅ$‹8e #:ô‘ü }jÆFqž}+Í[áMË^Á+ëÐÏod[\Ø`!‚&ýèÞBÀ0í»Ú´mþµ§Ž®|M õ–éa–5·“O,Ÿ$J[ÌåÆJ–Àʼg4ÛÅ,w¤ÐÈ’E"†GFYO ‚:Š}y}‡Â³k—Y¶¼k@Á¾Ó§n{”©óÿ�yû͹ù3£šºxE¼!böŸj¶ž3JC 3*áÉv.ÌyíŒb€:Š(¢€ (¢€<©ST×]Ø*®£1$œ�8®ŸÁšQe:õÊ0–å6Z£Ë83œã±|>ÁGçt0ëÞ-Ö¬˜ Á©K-á#‡bÿ�c-þÈÇñ õ �(¢Š�¥¨hú~«å}¾Ò+ƒ&2ãîç®?!Tÿ�áÐ?èoùÙ¬_Oi§,L¡{ ¶´ÈÎ×`räw¡œû-�7þ-þvÿ�‘£þ-þvÿ�‘¦[ø;Öֱ@4M>_-y“[#»`c,Äd“Üžµ/ü"žÿ� •ÿ�€qÿ�…�7þ-þvÿ�‘£þ-þvÿ�‘§Â)áÏú�i_øøQÿ�§‡?è¥àá@ ÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äißðŠxsþ€WþÇþÂ)áÏú�i_øøPáÐ?èoùÉÔ¼3£G­èÑ&Ÿ Ç,²‰g LFØÿ�„Sßô�Ò¿ð?ð¬ûJÓ<K¡Éa¦YÚÈÒL¬Ð@¨Hò›‚@é@¿áÐ?èoùÉðφtk¯ ØO>Ÿ ’¼@³¶I&ºúä¼3á½ çÃv3Ï¢éÒÍ${žI-Q™ŽO$‘É  OøD´úÛþFøD´úÛþFÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�7þ-þvÿ�‘£þ-þvÿ�‘§Â)áÏú�i_øøQÿ�§‡?è¥àá@ ÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äißðŠxsþ€WþÇþÂ)áÏú�i_øøPáÐ?èoù?áÐ?èoùwü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþzÆÂÓL´[[+t‚fa �X–'ñ$ŸÆ™¨i6ªF·ö±Ü,M½ºqŒÀš©ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�7þ-þvÿ�‘£þ-þvÿ�‘§Â)áÏú�i_øøQÿ�§‡?è¥àá@ ÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äißðŠxsþ€WþÇþÂ)áÏú�i_øøPáÐ?èoù?áÐ?èoùwü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ�ßøD´úÛþFøD´úÛþFÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�dê¾ÑbÔtDO…VkÖI�ÏÌ¿g™°}² þµ?áÐ?èoù¥y¡é:n· Mc¥ÙZÊoKÁnˆÄ}š~2NtÔÈèÑ.též]>onãËdâ@£¯`�úV¯ü"Zýíÿ�#X£ÿ�ÂYŽ­â;Æ?_’ºû««{+g¹»¸ŠÞûòÊáyÇ$ð(3þ-þvÿ�‘£þ-þvÿ�‘ª‘§ü%³ ¦CýfÉâüÿ�}‡x‡ðãêxÆnÿ�Â)áÏú�i_øøPáÐ?èoù?áÐ?èoùwü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ�ßøD´úÛþFøD´úÛþFÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�7þ-þvÿ�‘«ú~g¥ZýšÆÚ;xw3ìŒ`nc’~¤š¥ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�\Ô4»V(â¾¶Žá#1ÇÝlŸÉˆüjü"Zýíÿ�#Nÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�€ÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÓ¿áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð ÿ�Â% Ð.ßò4Â% Ð.ßò4ïøE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü(¿ð‰hô ·üð‰hô ·ü;þOÐJÿ�À8ÿ�ÂøE<9ÿ�@ +ÿ��ãÿ� �oü"Zýíÿ�#Xž ðÞow¡,6 ›RXä ‘½|©N¶@?…nÿ�Â)áÏú�i_øøV>³¡év©áÙìt»+YN¨ªd‚ݱäËÆ@éÅ�kÂ% Ð.ßò5— xgE¸Ó¥y´ø]…íÚÙ?*ÜHª>€�? ëk–Ñ<=¢ÞÙÜÜ]èú}Äï¨^n–[dvl\ÈI< �Ðÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äißðŠxsþ€WþÇþÂ)áÏú�i_øøPáÐ?èoù?áÐ?èoùwü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþ�ßøD´úÛþFøD´úÛþFÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�7þ-þvÿ�‘£þ-þvÿ�‘§Â)áÏú�i_øøQÿ�§‡?è¥àá@ôÝ&ÃG·{}:Ö;xžF••ÞsÔŸSÓòµ\¬øE<9ÿ�@ +ÿ��ãÿ� ç|WmáíÖ;k/iê·y[hÚÎ=¨Þ‘øû«ŸÄ;ÐsErß­–ÏÁV¶êwî.—v�Ý‹‰p8¢€:šÀÓ1¬ë×ÁæÚÓ}•—£G›'âÊ{!ìÕ?ˆïg·°KK'Û¨_È-­›®ÂA-'Ñ3~�w­ (4Û {+TÙ¼kkè�ÀühÅQ@Q@Q@dk„:]å…ÍÊŸ!™ ó2�GlmÉ$�Îz;Ö½2X£ž'ŠhÒHÜmdu0ô õ  ·ŠÙÛÉqsÃcsÉ$‘ª¨õ$·ÍA6o2ÄÑ$ É0ÁÌJävàŽ;t¨"ð® Ë,z=’²§îFú¨è§éZô�QE�QE�QE�QE�QE�QE�QE�QE�QEâ ¨ì™{2Ÿ"ÌÈüb0ÑH€’H�nu÷«Ò_yP´Ò[È‘(ÜÎÏP=s»¥Wñ© ^_Oœ¨›V gÎvùV0?Úbã^C£é/u¦ÚÝËv±ÈêÅ…§”œüªa8ÁéÞ€Kcw•¼—SOª\\$J³˜ ¯åe€Îßûµéž>‚+ŸÜA2,‘Iqj®Œ2ˆò yµ½Ô<SªÙ%ÄºŽ«{6ŸbíQÌv( €*ç®:“Ï©]øbçR°·þ"Ô¤RQÜGº)u`ÀÝå>ù húx� e�t�Ÿñ­_xnÞ÷TMhFc³µf[`¬' ¹ç•^@õ9=;-à+weÖµgŒýäÌ+¸wXÁéAô"º˜aŠÞà†5Ž(Ô"" P0�…�>Š( Š( Š( Š( Š( Š( Š( ±¼A:Y6öd& {ÀÒ·ŒÝxs®Olç¥lÒ2«£#¨ea‚È"€*µñHLÏm*Äqrñ…×;ºUO Ì.tap¨V9®.%#‘¦r­ô ‚>´Áá¬Æ‹cÁÈO%v×!zžzVÎ00(�¢Š(�¢Š(�¢Š(�¢ŠŠââKinn$X¡‰K»±ÀU’h–½®Zx{I—P»,UHXãA—–C¢Žäšó«hî®.§Õ56¨Ý`ÈʃîÄŸì¯êI=é%Ô'ñV®5«…d°‡+¦Û°ä)ë+´Ã§ úæ®PSàoùcÿ�¯«¿ý)’Š< ÿ�"¬õõwÿ�¥2Q@ ×tÛ}CÅZ(™®WÜ€`¹’ÿ�,û£W?á°ÿ�Ÿ[ÿ�÷_ür‹ÿ�ùôoúãsü£¨Ša†Kæ½Óï¬í-¡º™‰[xEˆÍ!ÜOË•¸Æs@ÿ�Â1aÿ�?·þ î¿øåðŒXÏÆ­ÿ�ƒ{¯þ9T/¾!øcKƒÏÔu±Äg!š&˜Æ’ýÐ7/Ë"ýà:ûŒËŽt+‹Ù¬àšåî`’¦­dÊ2º¢n.ª%Á�œ°ÎÐq@¿á°ÿ�Ÿ[ÿ�÷_ürøF,?çãVÿ�Á½×ÿ�¬Ý;⇨êO`¢ö4ÇMjá¤Ä`£,¨,á@<rW@ßðŒXÏÆ­ÿ�ƒ{¯þ9Gü#óñ«àÞëÿ�ŽVÍÿ�Ňüüjßø7ºÿ�ã”Â1aÿ�?·þ î¿øålÑ@ßðŒXÏÆ­ÿ�ƒ{¯þ9\¦¡g=ž½*›é“MŽx¡X†¥w$Ó3ªá7ý¥DNÌØPë´ü§w8‰Y—>Ðï/šúëFÓ§¼eØ×Ú£HWÁb3Œq@-¾¿¡m±IíüNÆëOŠõfQŸk‰ –eÃ8b ”ç•ÆNA4oüQ¥[YYjë½”oÖãÌÕ'–I¿ÑÞU04W,§•U9ÈùˆÈ ×yyàŸ ÞÛ¼O¡i¨Æ1KœAâv©C·‚£§¥QÑ~xwFù¤�fæÒÜ*v¤q¢‚CN2Ã�’�  -ZúÚ?Û]i¶>(Kû¦R+Û›Ôù“¬?¼Ý2.à[„ È<.XT}ZÎÀG{¨Ë«}l爛$¾» 5µÔpm�\ºL˜ëÉÈѥд‰ôètét«,` ÅlöècŒŽ…WÏjŠ? h1#Ñ4Ô6ˆ…´Aò1Ë/OºO$t&€9VkK.±ciâ?·\!û5…Íåÿ�¼g*ñ£³ºyÆ:sƒš¡r×­Æ'…®åšÛRÓf¾DºÔoK¢ … Ÿ7íb¥O· ÿ�aimWû*Çmš<vÃìéˆÆÖTãåp@ê*_ xzÊx'´Ðt»y­óäÉœhÑg®ÒÉéë@^Ì!µC©Þ5Æ¡sgXj7¤")Ì9‘¥ºä±�€¼ó€ v?ðŒXÏÆ­ÿ�ƒ{¯þ9NƒÂ¾¶‘$ƒAÒâxåóÑ£³JÉýð@á½úÖ½�cÂ1aÿ�?·þ î¿øåðŒXÏÆ­ÿ�ƒ{¯þ9Wµ=JÓGÓ忾”Ço72£9ä€�U’I�gš£/Š´ˆt8u–šá¬f‘aFŽÒg}ìû˜ÕKƒ»åÁ’R(�ÿ�„bÃþ~5oüÝñÊ?á°ÿ�Ÿ[ÿ�÷_üraâRž-µÌó‚bŠ@cwÁ`À+�wåzŒrkÐ7ü#óñ«àÞëÿ�ŽQÿ�Ňüüjßø7ºÿ�㕳E�cÂ1§ÿ�ÏÆ­ÿ�ƒ{¿þ9Gü#óñ«àÞëÿ�ŽVÍaijÍΛ¨Z¼sAù¨„H%}ŠêUˆÀ$g8###‘ÿ�Â1aÿ�?·þ î¿øåðŒXÏÆ­ÿ�ƒ{¯þ9U|Cão êÖ—}õÁ¸…çW·òˆÚ…C 3«3 éò¨$ç€pq{FñŸ®Ë“HÏcpÖ÷£ +© ßtž2@9�ÀdP+ã-ÖÀèo—Ï»QÚVâúy׋y˜|®äd8ÈÅ`hò³ÿ�®u×øûý^ÿ�a3ÿ�¤Ó×! ÈÏþ¹Ð—„´kGÅž {¨äfX-0VwLgÍÏÝ#û£üšìÿ�áÒ?çÇþÍÿ�ÅW9à_ùüCÿ�\-?öµkøƒÅUÝ͵¬¦ÎËí÷RÞ]´‘e†WlnÌ~FÏ�9äPÏøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Ьóã«C¨Me“¬K*]}’#öa\ÈGo-Ý•HQƒ’0qTô‰šf·)K-'Z*lÚö9d¶TI£]›öa¸©póí ÏøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�ŠªžñZx“P»Ši †#“móÌ׺6ÒËÃ[œNwWI@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�q¾&Ólt-%/mt©o¤70[ù-©M>l‹ ääîuãŽ3ÍbI­xi5gAcrth¬¤»›Q· ·`ˆ°®I�ONxù²>S^ƒ©ivš´1CzŽñÅ<wWçF „í#8`Ò²‚<<g¸—ì2´E<F.e”œî”lÝ´n<œÃÐ`šÔu؉.SO¼¸ÓãÓï.Ì©up%ßm*E$f6Á¿Þ'§#Ò_j  Vzeõ̲êaØÒ_!Œˆì]v ´ð ‚@ ·£ƒÀ~·IÑmn]'‚{ykùä' Ê>g8Ü@$ŽsÏZ“þ½ÌYv_y«pnDŸÚW;üÓ‹yo3$ùcoÓ>¦€9 ?ø9l Þ²ÃOŽK¨íí/îeYÃÁÊÃ!YFÙ—;”c¹æµu¹|- ëºF•t®&Ôeò†uV ì;Kåƒ0ۑОkZÓÀ^°ŠílçˆA(–&[Ù÷£Ö<ß»T®pB€EXÕ<#£kI|š„%óDÓ§Û&U&/¹€®àóòã'äÐ3o ¹ñ¡¦ÅáÂÐZ\µ·ÚWX¸ûÞBÌŒãnHtS†b èG4ÿ� I¢ø’ÎݦӮ­®æ·ŽäÅÍܱ"HŠè ÅU7í`J‚êl¼7¦éòj[ µ}C›–kÙœ±ÚpÜçkm�epp< ‹Fð– Mºt7(ÑÁöhÄ·“L©AÚªîB•zv�t Â+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍeÝë[kútz]ìþj«5Ì~ZÅ$ŽK8f#¡ˆÎ3@ éçÉŸÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�Y·<-coÕÖ¢ÐÚH¬Ry uWÚP| Î˜¤2‚¸ç=3høãÃãS·Ó–îgº¸šHaXí&a#£p¬ ´ƒ¸‚Bõ8ÐøEtùãqÿ�sñUão éø+W[ÊY-Ù×}̬ƒ‚Ø«6ÿ�tàûC-ì6æh­ÖY ù^I!ó•S—;J€–rj׌n#»øyªÜBXÇ-“:îB§g@ ûh˜�À¤fTBîÁUFI'� ZŸFÒá!ÔXJ¹ÒíyÙéq äG޼/÷…�tžŽHü)ldFO6Yæ@ãÌ¬ãEt4P5ÿ�üz7ýq¹þQÓ.|!¢ÞMu5ͼò½È×¼˜„ùÕÿ�v7â3¹²›yP{Su™¾É¯i7ÔGêíom$ÅKÆB)#85?ü$¶?óÃUÿ�ÁM×ÿ� k[Ót Ѥ7‡õ­E¯ãžòW¶½f2(X¢”9iÕÜm0˜ ñ€H8˵¾øhÚ«ÝÛ˨Ï{qä_HÊoå3™L20ä:† Á¾^§wW—Âú¶©m6¡¹ö± ÅÇoèÉRëµ� œƒœ ôU´_Aï×JÖâ¹xŒá¶Ô#Ä}v� P@ �FG4¥¢ø?­-¯ˆt¸nIÐO ×Ûn tv2ó¹ùVi <rFjߊ<×mÞ;›‹užø¤…”A3c#¶T£Ò5ÍÏG³·Ó Õ>Á*-öé·n<¼|¸% #Ç=*–¿}s¬K¤Ã¢Û]ý©/ ™.¬gŠ8”Á*o%ЂÀíÏ=(&þÕ¸y¬5}H[éóD.îÝ„’3 `œ`+e¾ª;œz=sº¾˜š„ÎÎ¥<NB!’G>j³±�e˜üÌp99«ð’Øÿ�Ï Wÿ�7_ün€1õ]é>+“HþÀ¸¼¶Khî Ť›™C™C+*¢üё̃ï¶çßüS°Ó¥I_NÔnlçÒíµ8šÖÜÈñÅ'šY¥�áUB.NÛ5­y©x_wºLÄ]*Gs$ÚçÎ�áUÉ‹æ �jƒÁ® nnAðìÇî‚ü±ì€ö'Ö€%“ÇVñj©§>¬ÌñÛ¿•Ê!fŽ9yF8Tǹ¹0Áljøžim¼'¬ÏÑØÎé"2°ˆ úƒXÑ\xAîKÅ¡1žÚHÁeÐfÝ¢/Ÿ+ ª0Ç <qRx[·½ð¾­imiªÉ<öSG *änfB�ÉM�r¢ VúúßM²ÖµQs9ÉÝ9Æ1¹ÏÓ ݈íšÛ‹Çzg‡´ ,kÊó½“ÎûæS3*+0!IËgËa‘ßë[^Ñ$Òìžæðí ²lùj>ì`ú('êKõ“¤¾Žž†ÃUÑn¥¢‹ˆäѧ•]”ü¹>Y ŽÇŸj�eçÅ+O}Uo4½Vì—…oË$DAçcË'ƒ‘÷rGp*Õ¯ío'ÔíâÒ53q¦ÇÜÃû’ÊÒF€‰6’Ã-v€H8«oàÄ}ëápp|ÌáŒõ=F>Â’Ñüö™´ðð6ÓDbýׇæÚñ–ÜWˆ°Ww8éžh+‰ºf¡¦ÚêPØÞ-¥Ür=¾ýæ+4P€£vd˜.]—ÊüÔEñ3O¸èÚ6±9ûcX2¢C•¸T24g2Š ,>^5,gÁVÓ5´^Is †<?2™cÊï¹\ìÏlãÚ•­üàð¸`hó.ݸÿ�SÓoN(“:ýïŸqo©jrMu}<v¶ñÞ |×£�‘À�ž‚»¯ÛÝÙE©ØÞjòÛ]ªyÓ¹cͼ,@ÏEÜÍÛ=ë/ÁóÝê³[yý¦átëv€Äa„ÊÇvÆ�©a€8P=MiÛê1éz¾´·V÷ÿ�¾»Ichl&•Y~Ï ä2!U‡^Ô?‹§Óáðô«©Ý^ÚÛÍ$qy¶p¼².6 ª[ ‚¤í çšm/Ârøq´ãâÙ£‰–ÞþY'¿Œ²Æ®&1J q!bœ,hÊ1Ž+_\ºÒµûì®WZޏŠvXô™ÿ�xcpê­ºòîQœ`ñÖ°-ô½oehu_´ðÂÖÀ6˜òUŠ8ûÖä’q`¶N{ä΋£xWHñ,zÄ.iï µ–ÈÅ5å¹S“4ŠT #imçmè¼W{ÑO’HÎpÈÀƒƒƒÈ÷¯/—Æ͒òçÄ,‘Ïj&¸Ò¤_´3Ͷå%ær0FKàä�ooâ 8m¢‰Æ³;¢idÒn7H@ûÇl@dõàè�sž,¸¹_̃S¼µ¶ŠÂ ÃpcPK͹Ž=”síOðŒ¬:Õ­Åö¡$WöwÅks+7–ŠðbG!Øû/›M>(ñÁ¹0\¦‘ ¤wÚ-¤„Í"É+,`:Œ¯Ì ~Mnj—ÇÄšuä°]< is5½´“mfx"’2¿*�Ý®Hh^ Ö¯î,d6Z­í´ÿ�h’ ïMÔ¶ÎIÀfc,ª ŒŒG­ÿ� -üðÕðSuÿ�ÆëƒÔôÛKÍ[P™õŸ7T™ä6ÓørêHÚ!+³iÁ80ÆIäÓ�ßü7v-ã}?Ɇž­íg’Þ-Û{§—*ÄÀƒœ çsDðÖ•áϵÿ�eÁ,?l˜Ï>û‰%ß!êÿ�;1îG\ ôçá+WþÎ_¶Ü…´Š(äøFnüÙÌp˜UÙóÃ(!—åpšÔð}ž• Ëmwi%Ìö&Â8bŽ- ÷ D’È$ܹUa3¼çƒ8  ¯«Ð?ì&ôšzâô «q¡Yƒ<C÷cøÅtÞ2’ãÄ©£Xhðj ?ö†dž[ ¢X#0Ê&ç@27p3ÉÀ®žÛÃ¥¬Vñhö"8"æÝIÀ$s@¿€¤I<KâGVM§*sÿ�=«wÆqiÐøv÷X½Ñ,5WÓ {¨â»Eþ¸íb­´àq×:ÓÕôOÞO§èKksk¡y€èÒ–Üל:óÏéI«êêÚd©ªøNþ{'*’G0µ‘,�L§<‘@i®èO_øRooÞf˜[ÁêÓ²áX¶Öi DøÊ‚2ÛœTVš×„F­ vþ ‘n„ëeæÛé°H`&$ÆITD’5cÓ �Îoga%Ѻ�;\²´6EÏ�uósÐô«XÁ£-Ä©eðøÇ-œè˶²C)ÌêA‚:dûп…aÑdÒaÕ4] 6 øc•|»xâi®ä'g cÁéÍs0Ø|W;\\MéйÛ;¢¯Ï6ã€@è>ÕÒØÝ>™g‡ƒï­-cÎÈ`û$h¹$œ(›$“øÖDº%÷ˆ<h·÷Út¶zTVЇŽáâfžDy.ØmÁ9ë€1‚h¿„t»‹ vÊîâK¥kû™´Ò»yH €†'æÃ}7cµtºÎ£§ÝÚ,G$!à\ÆÌRr3bú³†Ž8çšML^A¯X_Ûé×±Gkq ˆ0ÊÎЕûî¼|ÒŸý³}ÿ�BÖ«ÿ�-øõ�rv¿f–ââôxcdŽêHowIsöu˜"låˆàAòÛœ`šƒã *÷±¾™o#ZÄÓ -¯¼È§E‚yKFÆ1¹A…#' .; ÛÞšÖÊÄ\hþÖ<›…\I%Ì29A«™',e°½N5kQÕ´#—D½ðÆ«"_[J¯›n7Åò£üÂn?ÖÔxé@i¾2šïÄçE»²²¶%Ý"‘/üÆœªoÝl¨Ž0À¯8ªž:õ%iR/³];™£  Á=}MnÁ©^[[ÅxoX)S%Å»±�c–iÉcîI'½cêºMïŠ|A¥µÖ›se¦ÛE0º- Ã4dF;pJÙí‘Þ€0ôÈF]7Ä·—qÁ5ÓùP´Ò7î´ä¤òÎ@ uÆÁ€sW/¾(Ea¥™ÍœMq WOq̯fA‡a «"nÞë"²©ŒóÞº½r;¡6‘ske-ص¼2I,ŠÁL¦FöQÕ×½/öÍ÷ý Z¯ýüµÿ�ãÔÂŒ#ÌDþɵ%죽uœ>q/þ>>SˆûàüÃø~-‰ …ÞÇNC=¬SƵ2¨^X£Û/îÿ�w1,~lyR ¹=„~$¸–î{TðîªfU¤]öÜÎ9ó½^#¹³‰eŸÃšª£H‘¾ØüÎÁq7v`(“íØ[NƒP{%^lù|Ò‚r6‘äÁ—wÞåFûÆgÅw–6l¶öÁ.'lõ6•¥X÷ÆX…UÂ\©=zàW£ÿ�lßеªÿ�ßË_þ=X>"²ÕüMs¥ÛC¥ÞéÑG3Ý¡BÐ’1Ý΂x  7K’]ºÊ\]¥¬ö¶öãí23˜ÖF žTr€w;¸àõ:ÅÕôö‡ÃÐZi–FEµžÕ£·‰•NÈæˆˆ*ž¦Ÿý³}ÿ�BÖ«ÿ�-øõ�R¾×¯ôë½N9m|ä´…¯Sɉ‰’ÜF~AÏ2ù‹Œzq\]ÏÅCIÕ'³¿ÓôÆgÔbµˆ®¦6B¯ O¹˜GÌ`¹Üøw†ÅwRx’â+¸-_ú¨šufwÛrçÎ÷?öÍ÷ý Z¯ýüµÿ�ãÔWÂ^((·¿sIguä2Cr&lV £ûÅHÇ Œ2qQxì·ü#ñªÉ"n»XÇ!BAq‘A«~$¸¿´ŠêÛú«Ã*îFßl2>†jÊñ;êºí®™o¡êV5ÔgíR˜!Ul³²1àŽNz�å×I{«-KRŠæö;]= ¡R~ö~3ü_uæÇÂEzUî…a¨ßÛ^Ý$Ï-»+F«s"Ç•mÊYb#p85OTÑÄ ¸Òt»rû-ü¸b 2Çܱ'©$òMMý³}ÿ�BÖ«ÿ�-øõ�szÆáíãHXt=bîi]í,–ËQu6ÿ�)”¢ï)X ÆoCƒ•%ïÉõkIæþÒ‡RIn^V½V†F$Üv‚íázIãšßñ¶÷¶±^jÞ×–;i£’Þú8Z2T©?º¸¤¡>¦©Éá"KÛ[¿øBõ”žÔ¢¿<°Fn@ù;¿½ß4>•àßë:¬–6—2X$æHCÝ]!ŽX×È΃+ Œ(Î íã´¼iÁðÿ�W‰ K6P]Ë1ÀîNI>ç“PhW‘év×n—áabµ„ˆ÷0ÈVGCó<äœù=X÷ÍGâ›­WTð¾£amá­OϹ„Ä…ä¶Úð3‰IÇ©Å�`Goqª_Ç¥Ù1I¤]òÌ|ˆºúžŠ;Ÿ`qèÖ6ÚeŒ6V‘à…v¢æOrz’y$æ³ü;¡®‰`UÙe½œù—S÷ßÐz(è§¹$ìPEPEGVÔ³l¼Ä͹•„VðçYî¯Ó©'°ö  «»è¥ñæ™eZH-§yHè»¶m\úàŽÃ¢º:æ¬ôµÓõÍ.9'ónŒWƒ4„ıØr�€QÚºZ�â|7ªø‚? i †|ØÖÊ’}¾5Þ6 cŒúV§ölj?èUÿ�Ê„áZ:×Ãz]¸mÂ+H61œ ­�ç¶<Iÿ�B¯þT#ÿ� ?¶<Iÿ�B¯þT#ÿ� 訠/^ÔõÉô£ׇ¾ÍOù¾Ú´y©Ø ší+'Ĉ²hþ[6Ð÷6ÉŸ¬È?­kP% þ¯k¯kñØhŸmˆÞ¡2ý­#Áû4`§>õoûcÄŸô*ÿ�åB?ð«ÚRÔµÂw_)>ßèðéZ”Îÿ�lx“þ…_ü¨Gþlx“þ…_ü¨GþÑQ@ïölj?èUÿ�Ê„áSø@±ðŽ˜Yv±€dg85·Y>EO i{[rµ²8?ï ÿ�Z�¡®\ßZø§J{ ?íÒ+°ÑùËû~r=éÿ�Û$ÿ�¡Wÿ�*ÿ�…hÍ�oY\nå-.n:îxNñßÖ´hþØñ'ý ¿ùPü(þØñ'ý ¿ùPü+¢¢€9ßíЫÿ�•ÿ�“ÃSÝÜêºä—¶cœÏaóD˜Rã‘Åtu“¥¢ÿ�lk’É71¡˜†3ÿ�³P>-ybÐVH!ó¥[Û2‘n ¼ý¦, ž™õ¨¶<Iÿ�B¯þT#ÿ� ÒÖ-…Õ”q—Û‹«i3ŒýÉ‘±øã¡@ïölj?èUÿ�Ê„áGölj?èUÿ�Ê„á]Îÿ�lx“þ…_ü¨GþV+ÝRïÅúRê?ØU`¸*ßiYw“Œ•ÖVMÚñF–K`¥µËëÌCúеq^Õ|A…´„‡Ã^lKeI>ßïã>•ÚÖv�µðæ—npŠÒ$ Œgh;ûcÄŸô*ÿ�åB?ð£ûcÄŸô*ÿ�åB?𮊊�ç¶<Iÿ�B¯þT#ÿ� Í×µ=r}(Çuáï³@ÓÁ¾o¶£íjv&»JÉñ",º?–Í´=Ͳgë2 �Ö®Jý^×^×ã°Ñ>Û½BeûZGƒöh8ÁN}ë­¬ý>ØA{«HwŸt²»ˆb\ã¹üh7ûcÄŸô*ÿ�åB?ð£ûcÄŸô*ÿ�åB?𮊊�ç¶<Iÿ�B¯þT#ÿ� ?¶<Iÿ�B¯þT#ÿ� 訠 O–oil뱌�•Îp}3UµË›ë_éOa§ýºSev ~ržߜŸÃz½á„ø_L Û¶GÏÔgúÔó[ñÖìígn:îxNñÏÖ€3?¶<Iÿ�B¯þT#ÿ� ?¶<Iÿ�B¯þT#ÿ� 訠wûcÄŸô*ÿ�åB?ð£ûcÄŸô*ÿ�åB?𮊊�æ¼=qysâjKë±MåÛ+Îq‡ç"¬øµåBW‚:U½³)à»ÏÚcÀÉéŸZµen«­ê—!ò_ÊŒ¯¦ÕÏþÏOÖ-…Õ”q–Û‹«i3ŒýÉ‘±øã™ý±âOúò¡øQý±âOúò¡øWEE�s¿Û$ÿ�¡Wÿ�*ÿ�…Û$ÿ�¡Wÿ�*ÿ�…tTP'î©wâý)u ì*°\o´¬»ÉÆJë+&íø£K%°RÚåÀõæ!ýkZ€8 êºü^±H<7çD±á$ûtk¸dó‚8­_íЫÿ�•ÿ�¯xro Z@pJÆ3†#5©@ïölj?èUÿ�Ê„áGölj?èUÿ�Ê„á]ÄøT×¥ðõìwò!hðòýº6Ø29À×mYºýºÝè—ÌûÛc-é¹€þµ¥@”7ú½®»¯¥†‰öèê/Ú’,³CÆúsïVÿ�¶<Iÿ�B¯þT#ÿ� ÓÓ턺´·y÷K!û¸†%Çþ;ŸÆ¯Ð;ý±âOúò¡øS%×|A/4ÞXâK;¾¥U’I#]-pÞ3Ôÿ�´nLJmÛ0¦ÙuªõH~­Ã0þîG ƒÂº÷ü$þ·ÕÅ©¶YÚ@±3î +²dœ»sŒqš*¯¿äUþ¾®ÿ�ô¦J(£'&°´±ý³¨qÆm•LZzž›Þ›êýû â"©øÊïS+e¤éšp½7ÅþЦàCû”ÆåÉïnéžø¦®³âäP«àËuP0�Õ�?ïŠ�ØÖ4©¤2E*ÃynKC+F$Qž ²Ÿ¼§ŒŒŽ€‚³&ѵ›ØþÏ+éV16CÏiiJÿ�±»„>çv?ZûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�ém­â³µ†ÚÙ (±¢ç8P0ä*Zå¶üaÿ�Btø7Oþ"í¿Ðþ Óÿ�ˆ ªŠå¶üaÿ�Btø7Oþ"í¿Ðþ Óÿ�ˆ ƒQÓàÕ4ù¬®7yR® S†SÔ0=ˆ }Eb¦•®BžH:%À ™m[­œ1ú2ƒè:T?Û~0ÿ�¡:ü§ÿ�Göߌ?èNƒÿ�éÿ�ÄPÖ‘¥&•k" ³M!šyJ…Þäœ�Tè^µ¡\¯öߌ?èNƒÿ�éÿ�ÄQý·ãú ÿ�ÁºñÕQ\¯öߌ?èNƒÿ�éÿ�ÄQý·ãú ÿ�ÁºñÕW64Ý:FM0i³Ù’J[ÝÂCCžp².r¾€¯3Œöߌ?èNƒÿ�éÿ�ÄQý·ãú ÿ�Áºñ¡¤è³ÚßI¨ßÍ—m”‘ÛCåE g$�I$’,OðŒ[UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@Uaj:ï©KN’Ùg‘OÔ>dScî·aÓpÎF�Š_Û~0ÿ�¡:ü§ÿ�Göߌ?èNƒÿ�éÿ�ÄP˜tKÛ«ØfÔM„6ð:È–öQ]Ôäò@8;@’GÐ×+ý·ãú ÿ�ÁºñmøÃþ„è?ðnŸüE�uTW+ý·ãú ÿ�ÁºñmøÃþ„è?ðnŸüE�uU—­hãUŠŠaowlþdÄŠ *Êq¹Hê2: “ý·ãú ÿ�ÁºñmøÃþ„è?ðnŸüE�I&‘­Ý§ï¤Y!áî-­ËËö|¨}Îï¥t–±YYÁií†Ö4ÎFè+›þÛñ‡ý ÐàÝ?øŠ?¶üaÿ�Btø7Oþ"€:ª+•þÛñ‡ý ÐàÝ?øŠ?¶üaÿ�Btø7Oþ"€:ª­¨XÁ©ØMer ŠeÚvœèAìAÁ±¹ïí¿Ðþ Óÿ�ˆ£ûoÆô'Aÿ�ƒtÿ�â(EÒuØ"ò´Kœ -Ôö¬¯õdS†?B ú•«£éCJµ’6§ši ³JT f p �AÉ'$ãmøÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@®{¦Ë"éŸÙóÙ»—[{؈hI$®¹ùrxR¼tÞ•£\[_¾¡}</rј’+h|¨¢BA8%‰Â䓨`k?ûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�ꨮWûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�ꨮWûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�½©è·ê?ÚZ|¶«;F#š¨|Èå;Oa“ÈÎG C‡}yyºƒXÛÛÁ"Ê-ì¢æGS•Ý#s€@8�r9$pkÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@UÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@úÎŽºª@é7‘ulþd2”F ²Ÿ¼¤uÏ:V³8òdþǵN=½±yÿ�e[åSîwjƒûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�èì¬àÓì`³¶R°À‚4äà r{Ÿzž¹_í¿Ðþ Óÿ�ˆ£ûoÆô'Aÿ�ƒtÿ�â(ª¢¹_í¿Ðþ Óÿ�ˆ£ûoÆô'Aÿ�ƒtÿ�â(£½³‡P±žÎáKC2p¡¡íX+¤ëvèaŒè×J8K‰íŠ8í*ðÇèT{ ‹ûoÆô'Aÿ�ƒtÿ�â(þÛñ‡ý ÐàÝ?øŠ�ÚÑô¿ì»YçóçšC,ÒˆåQ€�=º““ZÊÿ�møÃþ„è?ðnŸüEÛ~0ÿ�¡:ü§ÿ�@~$Ö†…¤=ÊF%º‘„6°“þ²Sœì0XžÊ¤×inÖðŸ6S5ÄŒdžf2HÇ,ÞÜô†jcêÚþ·q}ªZ¥¬¶.ÖpZ¬¾`‹ÞÛ°f8ë›TÔøþEXÿ�ëêïÿ�Jd¢È«ý}]ÿ�éL”P«ÿ�ùôoúãsü£­šÆ¿ÿ�‘¯Fÿ�®7?Ê:Ù Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ùŸðÃåjnû}®ÿ�ìÏ?Íò¼åóÔüØòüÏÓâ³.¾!][Ë{·Ãîöö³Í˜Þ"‚#vRØ#ò“Zº_‰u+»½>+ïÍaú±‰Þᔄ/†QÈà~Ÿÿ� N«6±im¥é7˦î†-׺uÀyÁ}²6ö#ʘlÈ2üÏ5-–©ã95©m.4›/³ ¸ >5‘‘ˆîËmWWAœ1$8 ]…æ²ë^.ÓnîÓOÒÞ_´k;dkÔºž(#û<;„D&ã—Í áB d€ hjº÷l4mBX4›I®à¾ð·ÙætxKçlŒ³° P¹;ƒv®êŠ�âôWQÓô¿ßÝÚj3J—Šöðn$ÜZCƒ)sæ}ÕÀ8Ås’ê >¿Ñõ‹}t_Yjðîì#»q=³Ì­ ƈÎ ªpEÇ85êôP áû)4ïÜÚÏwâ ¸–Æ#o-Ó]5¹ró3ŒŸÝ’À¿6OKn¬ ]µËäÐî!MyîäÒæ–ù,gž4Žà<_*íýÑ‘1p†ÚêµëUs€NNS@µâŸ‹«µÐôÑ­¹žÙntÙÉuy –Ü 1ÜùX Ȩux¥´Y.~Ãs™tíKʆ 6us2L«m t/'œñè´PšIãO=¾¥ö]y‰2‹G¹Ò¯?6d%ÕC3‘Âß ó¹Rk£Ò5}vîßY7Çża­ÐióÆŠ±{ÍÑs±W9'Ž¢Š�óËÿ�x¶(4‹›h˭͵À›:É *ËǺ!&ôKcq襱Èt¯øŸPŠÂò÷NžÎµˆ®`]&àHÙ a²J‹Œ¦@çžyô*(Ë'ñ·ŠôÛ--G”ƒ§Zý Üi·LVåâ°ÞO;]b\I—×O¤kÚÍï… ô°Ã&§orRîÒ+vFD>]…Éyl­Ädàg9®–òÎ×P´’ÒöÚ›i:0÷ƒE¥®Ÿl–ÖVÐÛ[ ÂE UúÀ aµ<Ú \ZùSÍu$wU´­{mäcll2íÚŒ‚Q‘‹ðÿ�ZñƯ$:µ•òAyšG¹°ž#Â[ÚPÌ6„g3à` ¡Á9éP”éëM«è¦âçZ}=µ«õh%¶¿Y Kå¤i ´ê6†AÔóÄ™ôÜÜÝèÉ-Ñ,ÞtËž²D²ºÄÿ�ð$Ù÷­B)V�‚0Aï\EÏ® ¸»H¼>ÒAm<°ùÆñ•-‚8) âŠæ4¯j7Òé†ïÃòÙ[j,VZåÝ´ƒ*9T?LŒ×O@Q@Q@Q@Q@Q@Q@Q@Q@Q@Wü…µ¿û Mý)Ó¼ Ç² .îEoèÎ}}€Ÿ@ 22«®p¥6Iü+¥ðf˜f^¸L“e’ž« çÕðû¡zh¡Ñt¸ô]"ÞÂ9O,ò7݉glvËqÛ4Uú(ÿ�þF½þ¸Üÿ�(ëf¨ê:=ŽªÐµä,í|¶Y ç¯*G ªŸðŠéóÆãÿ�æÿ�â¨fŠÆÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øª�Ù¢±¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€6h¬oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š  š+þ]#þxÜà\ßüUej>Ó¡Ö´xc[•Žy%/Úåù€ˆþ/Q@uÿ�®‘ÿ�<n?ð.oþ*²¼9áí:óö7 s$ÒG–cw/'þú ºŠÆÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øª�Ù¢±¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€6h¬oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š  š+þ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â¨ðþ—ý»â øäPÚuާt÷Ëö‡dè8vÿ�€ŽCìµ_ùtúí7þŠj½§i–zM˜µ±„Eö“‹ÌŘ’I$’I曨é6ZªÂ/"/ä±xÊÈÈTGU ô&€.ÑXßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@4V7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅPÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñT³EcÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüU�lÑ\ž§áÝ6 CEŽ4¸Tžñ£ ¹~eò&l}ïUSøVŸü"ºGüñ¸ÿ�À¹¿øª�Ù¢¹= úmÖŸ,“¥Ã¸¼ºŒw/ÝYäU{°�~§ÿ�®‘ÿ�<n?ð.oþ*€6h¬oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š  š+þ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â¨fŠÆÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øª�Ù¯2Ñôïë÷ÖŽ™Óíµ©/ é!óܤ^ùûÍþÎûÕÚÂ+¤Ïü ›ÿ�Š«ºf•e£Ú›k14+ Å‹;³I$“ë@5Ÿù xþÂÿ�¤ÓÖ½SÔt»=V(£¼ˆÈ±IæÇ¶FB­´®ARF#ñª_ðŠéóÆãÿ�æÿ�â¨fŠÆÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øª�Ù¢±¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€6h¬oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š  š+þ]#þxÜà\ßüUbëÚŸku¡¬ r‹q¨¬Rw/ÌžT‡{ÕGå@ÿ�®‘ÿ�<n?ð.oþ*³4/é·Z|²N—âòê0MÜ¿ug‘T}îÀøPYEcÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüU�lÑXßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@4V7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅPÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñTÂéºi×üY­i¥OØãÔe–õÆS#lð"Ù¦Ez���À�ªZVa¢Á,:|RM+M'ÌX»œe‰$’p�ü^ Š( ‚p2h¬=\¶«xº-ˆ™D—î§îÄOý_º¡"€ µ´OÈúá›ì䱉ex÷'yNÒ3¼ôÏE�ðXÕ¯øEtùãqÿ�sñU°�U  ��©hþ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â«fŠ�Æÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øªÙ¢€1¿áÒ?çÇþÍÿ�ÅV|Ú5Ž›â]KXäVi&S¾w~<¦ìÄ×SY:­Ý½Ž£¦Ítƒc;ÇYX £'¦@`©ÇR�Ö®CÃ^Òî|9c<±Ld’=ÌE̪3“Ø6tÒÞ"yf‰ãæwtG©%¸ªÚÇ.‡k41¡•L‘!]¸F$¯¾R8í@Â+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�cÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�cÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@½Þ‰a§kzֱʮoIyäq³OÙ˜ŽÕÔVf³wmaö ›¥ZÝ12:‚Iár[nÚÇz·%וI$.ˆ£,ÌÈ�¤î sDðö›yisq<SP½ÜVæEñó èZ_ðŠéóÆãÿ�æÿ�â©<(þv‚·HŽâææâ"Š9'‘Ñ¿e?mP7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�cÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øª?áÒ?çÇþÍÿ�ÅVÍÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñU³E�cÂ+¤Ïü ›ÿ�Š£þ]#þxÜà\ßüUlÑ@ßðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�[4P7ü"ºGüñ¸ÿ�À¹¿øªÈÖ4; ;TðìÖÑʲQW-<Ž1äËÙ˜ŽÕØV/ˆ¦†Óû.òåA··½ #1è݉=çQžÙ  ªå4_é·¶—7Å1•õ ÍÅndQÅ̃ `;WHnYP»[È ’Y0ýõYþ.´Qs)®n%ŒŒa‘¦r¬1ÔAÏ|ÐáÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*¶h  oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š­š(þ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â«fŠ�Æÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øªÙ¢€1¿áÒ?çÇþÍÿ�ÅV?‰l4m IiÒÞi.åo&Òw7ï% àŸîŒ'°»uÝ‚ªŒ–'�Zó Dø‹Wm`ç숦-=H#÷Yæ\…Èýнh¨ø{ø2Ú9§yå[‹•y\ä¹ þ”T¾ÿ�‘V?úú»ÿ�Ò™(  mWQM.Á® fYIà œ4Ò7 ƒê{ö'€išFœÚu™H&¼Ì×S2BHô�� v ex‡K³ÕüG¢[ßDe‰RáÂïeÃ�ƒ<Î ‰©á ðÿ�üø·þKÿ�ÅPAEsÿ�ð„øþ|[ÿ�%ÿ�â¨ÿ�„'Ãÿ�óâßø/ÿ�@Ïÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�tW?ÿ�O‡ÿ�çÅ¿ð"_þ*øB|?ÿ�>-ÿ�ÿ�ñTÐTWÐ^[Éos sÁ ÚñÊ•‡¡‚+þŸÿ�Ï‹àD¿üUð„øþ|[ÿ�%ÿ�â¨dð–†­ë*FAH§‘åHèB1*íǵ\ÿ�ü!>ÿ�Ÿÿ�À‰øª?á ðÿ�üø·þKÿ�ÅPAEsÿ�ð„øþ|[ÿ�%ÿ�â¨ÿ�„'Ãÿ�óâßø/ÿ�@Ïÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�tW?ÿ�O‡ÿ�çÅ¿ð"_þ*øB|?ÿ�>-ÿ�ÿ�ñTÐQ\ÿ�ü!>ÿ�Ÿÿ�À‰øª?á ðÿ�üø·þKÿ�ÅPAEsÿ�ð„øþ|[ÿ�%ÿ�â¨ÿ�„'Ãÿ�óâßø/ÿ�@Ïÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�tW?ÿ�O‡ÿ�çÅ¿ð"_þ*øB|?ÿ�>-ÿ�ÿ�ñTÐQ\ÿ�ü!>ÿ�Ÿÿ�À‰øª?á ðÿ�üø·þKÿ�ÅPAErš§‡<)£i—:•õ¤‘Ú[!’WY'rª:œ)'©ãÍc\ÍàIÚ ìõ4•Rd6WùS¶?áêÍò× Ž €è2Åñ<RƲFà«#Œ†¨#¸¬uðŽ‚s§£Æ¹!‘ÙâR:%F;`qè+œ™<µ´æÞõÖæW‚4Š É$óK22(,¬†�àÚŸukà›+K™¬¯ö_3%º¥½ãÈÌ ±RŠ )±Á…>†€;¼``Q\Toƒ.$±m.ѯ¤h­ÄÑÝG½Õ „ØÚv†<ãî‘Ô5á ðÿ�üø·þKÿ�ÅPAEsÿ�ð„øþ|[ÿ�%ÿ�â¨ÿ�„'Ãÿ�óâßø/ÿ�@Ïÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�tW?ÿ�O‡ÿ�çÅ¿ð"_þ*øB|?ÿ�>-ÿ�ÿ�ñTÐQ\ÿ�ü!>ÿ�Ÿÿ�À‰øª?á ðÿ�üø·þKÿ�ÅPAEsÿ�ð„øþ|[ÿ�%ÿ�â¨ÿ�„'Ãÿ�óâßø/ÿ�@Ïÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�tW?ÿ�O‡ÿ�çÅ¿ð"_þ*øB|?ÿ�>-ÿ�ÿ�ñTÐQ\ÿ�ü!>ÿ�Ÿÿ�À‰øª?á ðÿ�üø·þKÿ�ÅPAM’4–7ŽDWÁVV PG¥`ÿ�Âáÿ�ùñoü—ÿ�Š£þŸÿ�Ï‹àD¿üU�H< �û9L*r-ÌŽa爉ÙlzVØT*€��v¬øB|?ÿ�>-ÿ�ÿ�ñTÂáÿ�ùñoü—ÿ�Š ‚Šçÿ�á ðÿ�üø·þKÿ�ÅQÿ�O‡ÿ�çÅ¿ð"_þ*€: +Ÿÿ�„'Ãÿ�óâßø/ÿ�Gü!>ÿ�Ÿÿ�À‰øª�è(®þŸÿ�Ï‹àD¿üUð„øþ|[ÿ�%ÿ�⨠¢¹ÿ�øB|?ÿ�>-ÿ�ÿ�ñTÂáÿ�ùñoü—ÿ�Š  ê†òqáËfùš‹†#lGîÅÇwÁÏû ÿ�xVP� Q°´†Êÿ�Y‚+ê2€ 8“Ï@áWY‚©f ($ôÕxþEXÿ�ëêïÿ�Jd¢àˆäÂvÆDdóežd 0J<ÎèqÛ*Àþ4P‹ÿ�ùôoúãsü£­šÆ¿ÿ�‘¯Fÿ�®7?Ê:Õ¸•¡¶–T†IݲÅÝÒ>èÜ@ÉéÉÔŠ�’Šâ ø—¥ÝxQ¼A ȷĦ4ya,þ\ ;’F v!N �HÒ7Ñ'ðæ«®iÓ>£k¥™ȶPÆçÆò àsœàöÍ�ttWÅ ˜ž[‹ÑoÚÅœR–I’yv+†|€A''jk´³¶¹[‰$IåD9‚Dò•§òKI¹w‡ Ãí'cc$b€:Ê+ÃÞ+Ñ|Ul×:%ợH°º¨`#,£œ0ãÞâ©/krFì’%„쮌AR#lGC@ôW–iú(Õõ¸¬!žñb‹]È·Rü±ç„Îî®A@ǃŠìôKH¬<C¬ZÛ™D+»yYðH|ãq>‚€: (¢€ (¢€ (¢€ +3]ÖWBÓÒñ¬®¯Ï¸ŽÛËݺGŸ}”`³(ëßÓ$e/ô(ä– ×¹±»„IçÛÜ@Ùˆ¤fV ˔ϖ¥Æä ŒÐQEs’øßHV­}n·—ÙP ‹¨³Ã*§ÍÈ„Î6>yê„u¨tk[ètí_ÏÒ5åŽ(­/s!!1—R¤« îÀ#ÔQ\àñׇ™ Qw8iÊÊp~wØ™ù>]Í“Üã5çÄéó_Å{w-»XÅÁ{wÄ~bnBÄ“w ÚI9�éè®zx~âò8î®>Ó9e†'²ZFPK…Jí`Àr¤`àñL¾ñ½‡‰—B}:õça ”ÅåâVeSþa‘!Üdñƒ@%ÊÛüCðô–W72ÛµÔÊ#6ò>HÖE‹r©V“k©Ø b Uÿ�ø§Oñ9²óÃ#J^BJÑüÄŒ+™HlH  º(¢€3<E¥K®xoRÒb¹[f½¶{s3EæWXíÈÉÁ8ç¯å\ü+«Û{‹‰4ÛýNޱ;Ãk¢ÐÉm/š­…˜}æ$ûvŒñ“è4Pyà‹»ÅäÕ-^vÔþðËbÅ'f·6ûUD  œXäž¹Ôñ7‡§ñi¢;»hb´¸i¤Ž{f”L'ˆ¯…~YžyÁíÎýÆÍà{‰u ‰ÓT†Þõ)µŽÞУ«=©¶Àmü6 rØåŽp+KÁž‹ÁþIŠT”+—.Šêœs‡w œdàœà “ÆNñø7VxäxÜ[± ŒU‡ÐŽEqš>†5qm’kÁik‰.Ü]KÉ?v wu=O¢ö O¢°<?m–­­ÚÀd¤ÑW•ŸnbRpX“[ô�QE�QE�QE�QE�QEsšŸŒ ÒuKËK/Qh,­ã¹¹½ŒDÑE—Èß¿�Æùœm'¦ �ttW&~%xTœßÜbÔ9û çË |œ °'‚ ‘ µ¿Zh:þ›¤\Ù\¼ºó,$lÛÕ üò+ÐàH<g�ËY|BðõÌ÷ö²Þ¬šzÜIu Æ8á•£gÈÇË»pAÅ(ø‹áOµÁhú¯•qq2ARÛË3³2†Q™I<RÔQ\¯ü,o ’$¼¹‘ä…nc°¸bÑ1\�œ©$�ÃŒ3’uȳD’!%]C ‚8>Æ€EPEPEPEPEP•Åÿ�!moþÂSJ·§i§^Õʼn±ƒ^¶8aü1À±“þÈí¸Îy$MSYŽüÛ™µYb‚,ã{œ`{¤žÀÚ½AÑãÐô¤µWófbdžl`Ë!ûÍý�ì�¨OQE�bk_&¯¦ßYØ›µ&IeT#p\˜ŒýÓL¸¾Õ.m¥·“÷a%BŒc½`á•ÁSî#µoQ@5ï‡íõ "ÇJ¹ðëXØÆb·‰u]PÆc •ù ^Ià‘Þ¬¶žï¢]híá‹ö°ºeˆê™ùOT æeWmR8Æ+°¢€8“¢)šY¿áÔüÙ¤ódq¬°.ÛO›È*ˆèv®G¢O Z%“Ù]4Q_S ¼¬¦UÜL™lHY¹îÍêsÝÑ@–‘i>‡%Ô–>ÔCݲ´í>«ç—eP þòFÁÚ�$r@ÎI®Ükz—‡õ+|;0–æÖXP›¨q–Bñ{×SE�døwF&–°»,—r·›u(ÎBqŸá�Ð «'öˆ¯î`Òžî ˆ¡ é:. îÈ!ˆõÐQ@ßÚº¿ý —øÿ�Gö®¯ÿ�BåÇþCÿ�ÅVÍý««ÿ�йqÿ�Pÿ�ñTjêÿ�ô.\àT?üUlÑ@ßÚº¿ý —øÿ�Gö®¯ÿ�BåÇþCÿ�ÅVÍËjñÝk¶kiá«Ö…eI€‡RXX:Êw#ƒÁ�Žz€{ ÊŸÂöW1ªMàëÇdSW—Þ¥¹ó2ìU™w6N3Šï¨ ø~&‡P‰ü+¨ºê0¬eõ‚Í,c8RL¹îÝ:îlýã™-ôqm4sÅá}GíûüöÕËJÿ�ì»™K:ð>V%}«µ¢€<þo ÚO$²ÉáMPË3+É ÖÜ3•`é’&ÉÚÀþé錚‚_ ½Æ½¬Þ\xniì5˜#KÛ9/%BÛ_›€6¶íક#ú=ÁGá‹Hµ kôðÿ�Ú­¦óá”êä”sÄf_âÉÞ:>~lÔú†ˆºž¨ú•ß…õ¹qbºÁE>Y%>E”.T±`qÁ$Žy®ÚŠ�ó÷ð–Ÿ"Dà»­ÇF£SÀO-B#ŒIÄŠª I÷°:ÕÍHþÁ¾žóNðÆ£×¼ß3W2«mìv¼¥rX“œg“êk´¢€1¿µuú.?ð*þ*í]_þ…Ëü ‡ÿ�Š­š(ûWWÿ�¡rãÿ�¡ÿ�â¨þÕÕÿ�è\¸ÿ�À¨øªÙ¢€1¿µuú.?ð*þ*í]_þ…Ëü ‡ÿ�Š­š(’ñšî­áëí>ßÃÒ¬×Ñžê- žç Ò·4=&=KŽÑÌ“—šR0eòÌ ì�«FŠ�ç‡ö¦Ÿ®j“C¤½ÜO£¤ñ¯HÂCzбý««ÿ�йqÿ�Pÿ�ñU³E�cjêÿ�ô.\àT?üUÚº¿ý —øÿ�[4P7ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñU³E�cjêÿ�ô.\àT?üUÚº¿ý —øÿ�[4P7ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñU³E�cjêÿ�ô.\àT?üUb^hë¨j²ê7~¾–yUU:¯î¤TÉUh„›ÌpW$÷5ÚQ@xÞÓ™¯˜ø?P&üuÿ�–ýðÀoÞò�$bGCŠÑ¾ÒßQÔ-¯®<9ªý¦Ú"7Zhð™ A ( ’«œç;Fs]•Â/†íÒÆòÉ|)¨‹kÕu¹ûa±.ö,äþ÷ï1'-ÔŽ3Ž(´ðä7ë}máME.AÉ“ûa‰l»ÈCf_˜‘؃Iät®îŠ�óè¼'eÊÜÃá=N)’ÔY#Ç­º•€tŒbnv¦ ®ŠÖóR³´†Ö ܬ0ƱƦò&!@À-“Àêk~Š�ÆþÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*¶h  oí]_þ…Ëü ‡ÿ�Š£ûWWÿ�¡rãÿ�¡ÿ�â«fŠ�ÆþÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*¶h  oí]_þ…Ëü ‡ÿ�Š£ûWWÿ�¡rãÿ�¡ÿ�â«fŠ�ÆþÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*¶h 7žºƒZÕ5ÍVßÉžk©M¥¹e)Œ±#ÍŒ{þÑÙQE�QE�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/MF_Annotaa.jpg�����������������������������������������0000664�0000000�0000000�00000020675�15030617045�0023551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��s"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ç“]—í×v¶Ú6¡wöYRK@«¸¢¾ùôuí[‘£ÈSÄöOý&‚€í›ïúµ_ûùkÿ�ǨþÙ¾ÿ�¡kUÿ�¿–¿üzµè  í›ïúµ_ûùkÿ�ǨþÙ¾ÿ�¡kUÿ�¿–¿üzµè  í›ïúµ_ûùkÿ�ǨþÙ¾ÿ�¡kUÿ�¿–¿üzµè  í›ïúµ_ûùkÿ�ǨþÙ¾ÿ�¡kUÿ�¿–¿üzµëSñÓõhôØô»ûÙÞ1)6â Kün¥ˆÚI Œõ�“ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�¥Oè³_GgoªXÏpÒ´MWQ–FU,Ù]Ùà/ FrF2AŠ|=<°E½¥É%ÁÛ%ädÊsŒ(Ï'<qÞ€ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�ªãï-åêjVòCgòͲd.¢'~MÛŽæ8RG?2æÍ—Œ4[­<^Ï}ie˜@>ÑyÌ…U¶nIw|ÃŒçð ¿¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê§©x +U¼³¸Ó5 ”ÜÜÞ ˆÃN\#~üç q´ž˜5gPño‡ôÇ’;­bÉ%ŠXá–/=KÆÒ0Uܹʌœäô=¨ÿ�Û7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõKý¿¥Éeuk{ êØ+„³q3¡PI]ªIÝÁã­U²ñ=¬útº…üi‘•Ä÷ó@#pzé#/^9 æ€%þÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǫ}7\Óu{‹è,.âžK)DS„`v±PÃðÁëêìkB€2?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê×¢€2?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê×¢€2?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê×¢€3týXß^ÜZK§ÝÙÏqÊVàÆw+—�‚ŽÃ¬m×¥Yßò8ê_ö´ÿ�Ñ—¯@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“A@ôQE�QE�Q^Kª\ø÷@Žæåïoc°Šâä=ÅÓÙ¼§y|—†R ‡ï| 1ùp¤P­V¹á•×¥ÌÚ®£onш䶷xÄn'?2Vçï!SÓž+ G¹ñ·àxÚÏSiuU¹a%× hé’@I¼‘È¡YåA’#Tž ѵ=CÁVZ–™ý·ý¼ÓEæA&Q.·ÌÉ Æ1µ~öFZ€-Eà(ìì¬_SÔe±²gò-œÃµU¢xv‡ $Ž[<õ8F?…ºd¶PZꚪÙÝx­Sæób—sb3n‚.O$/9ÉÎ5ÿ�‚nuDÒm¦Ð^!«Ip‘¨´˜é¶¦ßËòñ.ä!¥Ä›U\�8åV¶4¿iúWŒæ¸ÂÖæÞ->Ùm¯£‚Ý1<m)r 0efÎ�ù0N�  ·?ìî’ò6Õµ5Šê+ØLjaÄiu(–`¤ÇžXq’p(ðD+©Hk:ŸÛšf•§"X2DŒ…|­»H‚>ÙÈàŒÖ%î‰âinŠÞZE©i·S%íÝœDE» Ê`mò°sóDÙùPù8 n­-ê ÚÝ­Æu¥ZÜÝ´––v:sNQq‚dÁÑI}Øçphþ¥àø5]VòòãSÔ7°Gmsd†! ±!r›ðLœ0Îâ:`TZ‡¬õ-CíÒêZŠ\,ކ/“÷ÑL�Ìg 4ã9àsšç.|-s©Úk’Ç¡•¶¼×m¯ÒÊàF¿h…>Îdp…°Žå&áö’æ�ô©¢xCX·ðý½µ¦ýŒñiÛßAçÆ¿Ú3+Â\æ&`¹D™7œ1órzPocáH,%¿š=Bý§¾µKie.ŠÀ)‡R¨0ù•¹úqÅg]ü;Óµ ‹}GQÔ/džXe3Î $4[¶ü‚1}âä9ã9ÀÃ4 ìKûÉíü$ÚEɵ… ‚8<Ƴ«ÈÂ'#b‚‡?{ï08ÄÇÆÒêŠhFæÚÕRÙ`”Ek)-™ Í;®Oú¥Ã•|ŒñHЭôY¯^ÖY|»¶Ì$ HÊD‘ Tc+dr8à Ô®JÒ<BƒÄ×R bÕnæˆZÜJÖñîEÚÊ’•]þf«pG,koE‹[²Ñ.¿¶‹ßÞwŽ4¸ŠV‘vŒ a ðG~[� Ú+Í<ánÊûD›PÓ^Þ{HaYnžX˜ˆRÌBm¾V$ƒ0ó¿»Èç<K Š( Š(  ‹oùu/ûÚèˊ׬‹oùu/ûÚèˊנŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±æðú½õÕÔ:ž¡l×.$‘!‘B–©œ=‘kbŠ�ÆþÀ—þƒÚ¿ýýÿ�ˆ£û_újÿ�÷ö?þ"¶h  oì è=«ÿ�ߨÿ�øŠ?°%ÿ� ö¯ÿ�cÿ�â+f¢¸¸‚Òžæhá‰ZI*©4—ý/ýµûûÿ�Gö¿ôÕÿ�ïìüE7þXn¸Òl®õ2zIl‡ëæ¹ ÃýÒÇÚÛxŠüþþú×K„ÿ�šyòÿ�ßÉ�QôòÏÖ€2µ[ÍCŸÈÕ<s5œø åO{ ¾C´®qïW¬,!Õ,£¼±ñ.§qm ÊKÑ•aêÎEQÔ>øoWÖìumR+›û›E+‹¹ÚT—'#rž0HQ…ùŽA®ÁUQB¨  `�0�  ì è=«ÿ�ߨÿ�øŠ?°%ÿ� ö¯ÿ�cÿ�â+fŠ�ÆþÀ—þƒÚ¿ýýÿ�ˆ£û_újÿ�÷ö?þ"¶h  oì è=«ÿ�ߨÿ�øŠ?°%ÿ� ö¯ÿ�cÿ�â+fŠ�æ'‚ÂÚv‚ãÅ÷qJ¿z9/!VPV­C£ý¦šêrÄßuãž6Sô!*¯Œ¼¡xâÃÈÕmñ:!»‹‰búãØñI¤ø^ÿ�Ãz-¦Ÿ£kŽÚ%A äâ$u#iW\œŸ¼Àg¥�_þÀ—þƒÚ¿ýýÿ�ˆ£û_újÿ�÷ö?þ"˜5«û>5mtQÖ{n£ÿ�¾@gþ�@õ­ [OÕšÆò œ:Æà²FTû�¥ý/ýµûûÿ�Gö¿ôÕÿ�ïìüElÑ@ߨÿ�Ð{Wÿ�¿±ÿ�ñ`Kÿ�Aí_þþÇÿ�ÄVÍý/ýµûûÿ�Gö¿ôÕÿ�ïìüElÑ@ºvŽš}ÕÅѼ»ºštHÙî* ÝÚ´¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨//m4ûv¸½º†Úë$ÒQøž(z+ |H/8ÒtÛÛðGü˜ï¹1¸{ jwÙ5ëïøúÔ Óã?òÊÁ<Çÿ�¿² ô@}èRîòÖÂÝ®/.a·>ô“8ERx¬¯øI#ºãI°¼ÔsÒHãòáúù€ÃýÍßJ–ÛÃZMµÊÝ5·Ún×îÜÝ»O"ÿ�ºÎI_ À­j�Ã6ž ¿é…¾™ÿ�–v)æÈ?í¤ƒoþCüjKo iVó­Ì–íyt§+q{#O"ŸöK“·è¸±E�QE�QE�QE�QE�QE�QE�Ÿ¨èzfªÊ÷¶qÉ*}ɆVTÿ�u× ¿¡E�b +U±ñ-ÖXÇH5ó†=€‡V/HuÛË#[F¹…{Ïg›¨¿ñÐ$R˜÷­Ê(­Ž§c©Äe°¼‚åáŒRÚ}:cV«>ûCÓu)D×6ˆnan˜å_÷d\0ü SþÌÖl[:~±öˆ‡ü»ê1ïãÑe\0ú°ð�Ü¢±·n-8Õt›«`:Ín>ÓæƒxìŠ+BÇR±Õ ó¬/ ºˆ†@àCŽ‡Ú€-QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEs÷ְڵ垣[ÜÇjQZYo|¢K(o»°úúÐAEsÿ�Ú^(ÿ�¡vËÿ�Ÿýªí/лeÿ�ƒOþÕ@Ïÿ�ix£þ…Û/üöª?´¼Qÿ�Bí—þ ?ûU�tW?ý¥âúl¿ðiÿ�Ú¨þÒñGý ¶_ø4ÿ�íTÐQ\ÿ�ö—Š?è]²ÿ�Á§ÿ�j£ûKÅô.ÙàÓÿ�µPAYÚ†¡ym2Ae¥Oy#.w‡HâO÷˜œÿ�ß*ÇÚ¨ix£þ…Û/üöª?´¼Qÿ�Bí—þ ?ûU�J,µÛáþ›©E`„sž››èe¢)÷«žÓ,îÊÛy·c¥ÍË´Ò£¹$`qT¿´¼Qÿ�Bí—þ ?ûUÚ^(ÿ�¡vËÿ�Ÿýª€: +ŸþÒñGý ¶_ø4ÿ�íTix£þ…Û/üöª�è(®ûKÅô.ÙàÓÿ�µQý¥âúl¿ðiÿ�Ú¨ ¢¹ÿ�í/лeÿ�ƒOþÕGö—Š?è]²ÿ�Á§ÿ�j ‚Šçÿ�´¼Qÿ�Bí—þ ?ûUÚ^(ÿ�¡vËÿ�Ÿýª€: +œ—Vñ40¼­áË-¨¥Ž5NÃþÙVÖŸuöí6Öóg—çÂ’ìÎvî�ã?�Y¢Š(�¢Š(�¢Šåìµïj6q]ÛxvÐÃ(Ü…õ,=Ç•Å�uW?ý¥âúl¿ðiÿ�Ú¨þÒñGý ¶_ø4ÿ�íTÐQ\ÿ�ö—Š?è]²ÿ�Á§ÿ�j£ûKÅô.ÙàÓÿ�µPAEsÿ�Ú^(ÿ�¡vËÿ�Ÿýªí/лeÿ�ƒOþÕ@Ïÿ�ix£þ…Û/üöª?´¼Qÿ�Bí—þ ?ûU�t›{áý/P¸ûLÖŠ·XÀ¹…ŒSè$BÙª?Ú^(ÿ�¡vËÿ�Ÿýªí/лeÿ�ƒOþÕ@?[±°ÕRñH5ùú P>¬®jÖ}q3A}¤Íg"®|Á*K ÿ�ºÀîÿ�¾•j‡ö—Š?è]²ÿ�Á§ÿ�j£ûKÅô.ÙàÓÿ�µPAEsÿ�Ú^(ÿ�¡vËÿ�Ÿýªí/лeÿ�ƒOþÕ@Ïÿ�ix£þ…Û/üöª?´¼Qÿ�Bí—þ ?ûU�tW?ý¥âúl¿ðiÿ�Ú¨þÒñGý ¶_ø4ÿ�íTÐQ\ÿ�ö—Š?è]²ÿ�Á§ÿ�j£ûKÅô.ÙàÓÿ�µPAEsÿ�Ú^(ÿ�¡vËÿ�Ÿýªí/лeÿ�ƒOþÕ@Ïÿ�ix£þ…Û/üöª?´¼Qÿ�Bí—þ ?ûU�tU="ÿ�ûSF±Ô ^Qº·Ž/ví›”63ßëW(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬m+þF{þ»Cÿ�¢–¶k´­VVúîÇQ²Š;¶F1ÏdÒ*~ð•}=(”O·ÿ�Â_¨ý‹þ´ÿ�lÅåyÿ�iûØöCç}ÿ�Ýc>~ݼçn>\VD.­/ƒüE©­÷ˆŒª·Ë§[4ÚŒwJÁÛìçkJw»1„_FÏÍ^öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô‹~5m|/ ìÌGÛIÔ®nU®Œ´ˆîK~ìí8ÈÈÍekwWwGP½¸µñ/šð$º=µ—Ú¡Sû¥;%ò¸I<Íàù¼·Þºÿ�³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ� Ä>"Ó5« 84 wí—é¨Ú1þƸ3:Gç(‘¤X‰ýß–_;ÆÜã¾+#T¶Ô!ÖLš™ñÙ¤Ö›pÓf¼uû0± %TÜ@ìr:]¿Ù¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�Пç[]6ýõȼK5ò‡m+7¸A$C&5˜ÁÂÊO dàd{Šô‘©ÚËo|ÊÓIö&hî8dÞ b@ÜÇ Ûœäc5[ìÞ#ÿ� ®•ÿ�‚Ù?øý µñéªiCþá’ñú�â|'sâ¹Ñ§ÔF´²Ç_jN#6âÌܬ0fûP=·•é•<÷û-õ«KØ.®V²æ&†FÌS†‡R1j±¶ñ:®•ÿ�‚Ù?øýfñ®•ÿ�‚Ù?øý�pZ…¥Í¥Ö¬,ßÄæînÉlšSq‘û†•Î×@ËpO>Ù�®t4ÿ�ø–ï]ÓL–¶÷6v?jI4‹·Ù3ócRYQäeÎq‘غï³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�  -wZÖìu½Ml ›ÉŠ@’6™st¬XÍæ**2†aû¬@¾cÀÄþ*×µÍ#VÓãÓmæÖFí*ºló°C Wa"6Õ*§vÒ¤¦µ¾Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€9½#Å>&¼ð}õýÞñjÉ�H¿³§AåºD]„lwHc/(!HÝåñ¡:§‰¤Õ¼/¨ >m× soyÙ¦XöˆÈTŸÜ·”A¿'‚H®«ìÞ#ÿ� ®•ÿ�‚Ù?øý5­<BèÈúž’ÊÃ2Bÿ�¿ôÄAã}¯P[]" ì ¹º‰$÷RÈÛn €Œ£*¨?º í€1]V•©j­©^OÌ–ÌiÐ\C$:t°eËL$Ifß…ŒìÎá¸qœÕ›M/Z°µŽÖÎ÷E··ˆmŽ(t—DAè�Ÿ¦û7ˆÿ�è+¥à¶Oþ?@s6­âöð¦•ô†MÇ3:æ;ˆ§nAó‹`·šq´°äæºñ7ŠÞ’³i­”Ë+^H,‚GU1ª«ylQUöÈAùöŽEtßfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@Ú,êô‘{&§oyiaÚO2iV%Ü0ÆzõžzÖþÿ�"Þ—ÿ�^‘èªÍeâ)à’&Õ´°J’4Ù;ŒÏzÒÓíMŽ™kf_Ì0B‘oÆ7m�gºPš(¢€ (¢€ Æð—üŠšoýqÌÖÍsÚ~‘¯i–ÙA«é­+µKé®[øœP#¢x¦âê]£Åÿ�mG¸¿Šñ¶ÛľÞ&˜Eq¹Pá#ÿ�Y¸ùÆQ²Ö|Gÿ�Ÿâ=SÅòZÇw%ˆG%£¦ÙeD›;­—aUg;rÛJòǽìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�ÇèVñ Æö5Üj–¥dÔ¯6Dç Ï‚¸À%¾D9Ú8�ÖnƒâI¯5m\ø†Iu×u»Ñ f|§rló@R»w!‰^ÍÇUöoÿ�ÐWJÿ�ÁlŸü~£ŸO×n­å·¸Ô4y • Iš[²º‘‚3à‚8Å�Tñ.©sa¯øfÚÓQŽ)/nåŠK96bâ5‚GÏ#p!•Tàoä\yñ-ü7öqj~2ŸK2¦¥ Žx-ƒ ØŽ(cÜÛ“ Am¼ vg†ïtU‘t£áÛ”ƒ µÑLAÈé³ õ5ìÞ#ÿ� ®•ÿ�‚Ù?øý�q:oŠõ•°¸Ö5‰tÝf[ÈaÇ íi3‡C#9e`ÝpzÏëÑiþÖu«FÝ “5½Êº2y £œ‚wáqëÇZµöoÿ�ÐWJÿ�ÁlŸü~£†Ã^·Ë‡QÒ#MÌÛWK ±$ŸõýI$Ÿs@:Ф¹ñã]j°6ž‰ró#4kš¤Ê¶í¼�q,ldËœ `WM«Z]N«$:ÜÚd«Z(âlŒuÌŠÁqôªóØk×0IúŽ‘$R)WGÒä!êóù'Ù¼Gÿ�A]+ÿ�²ñú�ó³ã{½#Á¾ñž!´÷Š×6³KA‚YÊòƦ8Ád0A!¶©<×K¤øàj6¼Ñ#}>[u¹1Å0¿FˆãXþ` 9,Ã8'kìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çèxاˆ.4ðl$û\Xšø!_ÝBØV2]·HãièTå€é_ÅSºÌÖSZYÍp<¹ûeBò¨hÊ`òʃ¸òG×Köoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô‚ÿ�#_ [ë" Ò_Ke&ëü[ÄÑ´ƒsLá[ËNÞ|ÄéœÖN­ãëÛ û™VÞo"ëÃÑê1[´Š’Ú¸ŽêF8(r?vŠIÈV(0wWiöoÿ�ÐWJÿ�ÁlŸü~©êz±¬XIc}©i²[KÄ‘­ŒÉ¼tí¸©èAàŽ"€0¯>%½®µ§&Þ(íîE²]]jQÇï›-0ž;p¤©Ý‘޵¨¾-ºK-rYlíÞãO½†Ú8"œíe–8Y]Ü®Us)Ëmà)ëŠÕû7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú�â,>#j6ñÚÚ\ið^^M=÷œÿ�Ú1D±ywª"î�È�UÉ \1ÖÅ·Äç’ÉdDI5³]IpÚ™”ê|–14¯—–áB‚Hæ·þÍâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€8µø¦A†àXÅ0¸°¶¹±^hÚH.§Ùþ¯%ÈWŒºãæÇˆ>"K¡j2[Ï®øµ‘d";3 Z¬¢Y BB˜òãø°AÞ¼Ð5{ûû ÛKNi줷+g:ª³)RJ‹¬v’>`p ÇSW¾Íâ?ú é_ø-“ÿ�Ð/7Äûx?°üË[EþÑcæn¾ËAr–ûÓäýâ’ûÔü¹DcÚ»8VIïÜZ›fPÆ-ÑP¨pØ-¸s‘‚1ŸZ©öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô�xSþDíþÁðèµ­z§¤X/E±ÓÌ¢Sko@»wíP¹ÆN3Ž™5r€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çõË›ÇÖ´Í&Úýô亊y^ê4F|Çåâ5Þ¬¹;Ù¹„8ÅtVÿ�M±Õm¾Í¨Ù[^AÞUÄK"ät8`Fh“Ä:ÙÓ|9ym,Í6£ug4NË 7iwd/±ŠgÈWxù°xéSUøy¤]éw§yÖæŸ º|!ß|rïMâ@‘3`‰Óîî?»árÕÝÞin¡d–Wº}¥Í¢clB®‹…#³ŸÂz}Χ=æ òêËB–wŠ’A 1BÊ«·¡1!Á'ã4NÏÅ—z•Ý•­žŽÉ,¶QÝÜÇy7öá˪…Il<d7LeNqK¤ø–îO‡–:þ¥BîâÎ)„VÛåÞî   vIa•�ã8±“¹ý‘¦yö³gZy¶‹²Ùü…Ý ãC”c°¨¿°4o²Aiý“aöky|øaû2lŽNNõ\`7'‘Ï&€8¯ü@Õ/ô:Ý´ø.5“}.›v—½žÙR'•\¡˜+¤dòãµÛÿ�ÜÛé:~§m£Ã5µÖ‰&²ÂKÓÆ‘ˆÙб(Ç#$ÇZß>ðÃ\=ÃxsH3;y Œ[™ŽrIÛ’y<ûšsøOÃ’ÅRxJxâŒÅ5œd"IP1ÀÉ'2hžÕ<uuŸ®½„Jö–w×’¼û·›Wɽü¿1FNá×miXx—Q¸ñº5Þ—kÈ·–XÚ+ï9KÇånVýØÚž„9*¹؇CÒ-ÅÀ‡K²Œ\Æ"Ÿeº/š€m Ø0Œ1Å%¾…£ÙÜÇsm¥XÁ<K²9b·Ed]¡phè� +BñƱ6ž÷º­±wÒô¹íà†•互HÃ32vn0P23ÞÕ¿ÄɯZ&ÑmÒ¦¶†yù,­-Ô–¤ªùx`$‰Žr2¤Ë]4ðý¨œ[èZd"xÌSí#_1 ÉVÀäØñL xnB žÒ˜…E¬£8Uû£§AÛÒ€"ðæ½s¬‹…¼²ŠÊx‚?·VÛ°[(£øHÊîSƒ†8­Ú§a¤éºW›ý§ÚYùͺ_³Â±ïoVÚOÖ®PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙ�������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Palettesab.jpg�����������������������������������������0000664�0000000�0000000�00000037355�15030617045�0023675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��· "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ + Qñ0±×£Ñ­ôCP¼{StE±…UcÝ·“$‰Î{ Ñý¿©С­ßÛ?þH  Ú+ ûRÿ�¡CZÿ�¿¶ü‘Göþ¥ÿ�B†µÿ�lÿ�ù"€7h¬/íýKþ… kþþÙÿ�òEÛú—ý ×ýý³ÿ�äŠ�Ý¢°¿·õ/ú5¯ûûgÿ�ÉÛ?\ß@f‡ÃZ¶Ñ#Ärö †G(ÃýwfR(~ŠÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǩ^ŠÈþÙ¾ÿ�¡kUÿ�¿–¿üz“ûj÷p_øFõL‘<Û_þ=@VGöÍ÷ý Z¯ýüµÿ�ãÕNÿ�Åré‰n×^Õ”O:[LJ¶9w8QÄ޽裢²?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê�×¢²?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê�×¢²?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê�×¢¹ËoËw{e‡uc=“"Î¥í†ÒÊsçsÁsûfûþ…­WþþZÿ�ñê�×¢²?¶o¿èZÕïå¯ÿ�¤]jõ†WÃz¡#‰mzŽü¶  Š+#ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�  z+óÄw6W—ÕV#id`öÇ £$àMè+z€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿ�%?ì�ßúP+®®WPÒšëâPêvse<e œ¨•N0èÝÏéZØ×ßô2ê¿÷î×ÿ�ŒÐoiÒêþÖ´ë}?í÷6¯0ed#Ùrml6s‘·Œœ äNñFᯱxOE¿±™®e•ËǦFÍûƒ³rÆDx2 nÚ¦=Çö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@´RøªÒ&[û«6Ò(oä}BòKVO1®3k»œÉ�*všSÝK¦Ã5è+q(ó3ÿ�,·„è3´3ßÌë÷Ïáß+í:ö½6襸" CåCß2VÌCå]ëœdóÀ5·ý}ÿ�C.«ÿ�~íøÍ�kÖG†¿ä7ý„/ô¦Z?±¯¿èeÕïݯÿ�®j¼Ò¼1sxºæ¨ïý¥qP¢Û2W¼xÐdÂq¹Ødô<v ò¡¼E’ÊáÛí(Ѱh0§Íû¿1žœœsÍy»ø—XŠmR /5;CA6°{b°FFåhÙ‡šJØ!8ëÅI¨x“R°‘dmCU{;›÷Ó,eY-wÍv®Sc/ÙðŠYÉû¹ dPV‰áßxwÃig¤é)§^Ïmj&ºµKwd1©WSH#y Þf~e<á”Ôhºo‰¿á1´Õ5¶’ew–í°B±AºXZ=¸;Î化Él0ÀÀää?‰uˆ¦Õ ’óQó´4kg¶+dnVˆý˜y¤ -‚޼Tš‡‰5+ FÔ5W³¹¿}2ÆU’×|×jå62ýŸ¥‘ÀlŸ»’E�zUs6ÿ�mþÃVú0W0þ%Ö"›T‚KÍGÎÐÐM¬žØ¬‘¹Z#öaæ’€¶N:ñZ~1Ò¯#·Ñ·kú”»µ‹Eã·ùI|ÃG¿Æ€;º§«[Ý]è×ÖÖ7f¼šÞHàŸþyHT…oÀàþÈkÚ†§£Ý\¤:¶©s…¢ßjµC¸ìç{~îCŒ¯ ×$ ¡¨x“R°‘dmCU{;›÷Ó,eY-wÍv®Sc/ÙðŠYÉû¹ dPÿ�ejºlW—>ðpүƙ4"TkV’{’Ñùd9s½ÎÌdÁ8à»P‹âAŸSw“$-*-¶,í£Œ¼…¥PîF7 NÜàTâ]b)µH$¼Ô|í ÚÀYíŠÁ•¢?fi( `„àc¯&¡âMJÂE‘µ UìîoßL±•dµß5Ú¹MŒ¿gÂ)dp'îä‘@:¾0>-˜j°\dŸ³ ®±“æo´ps³§5Ø×˜¿‰uˆ¦Õ ’óQó´4kg¶+dnVˆý˜y¤ -‚޼V®¡©Ük[¶­ª&Ÿsw=µÖëRï<!÷†ìÿ�*þê\Ç;z Š�ÔÐ?ätñwýwµÿ�Òu®ž¸M J¼oø©¿©#$ÖÛc·Ëþázæ,qÓ€*„~$Ô¾Ë Äº†ª‰n·XY-XÜ«ËJýyd´ðŸâ�7\‚(MsÃ7wŸUƒ@f@l6߆·UT®Ò±;¼Ñò2( >m¸o—–V>3²—O0]ZYɨ\ÉuhÍjV4{ñ0ryoš•HVá‚à¦ñ.±Ú¤^j>v†‚m`,öÅ`ŒÊѳ4”°Bp1׊ĺijipGy¨ùÚâ´pÓÛž073J~Ì|¢†ÀÁÇ^(©ð‚øœG~|K1wi³ù1 yÊ©GmÉÓ‚·\ŠékÍdñ&¥öY®"Ô5WK v¸ÕIj¦ÙRY"`ŸèçÌ! ˜ÿ�!zäQ§‰u‰fÒàŽóQóµÄ3há§¶ <`nf”ý˜ùD! €ƒŽ¼Poâ¿ùµÏûÏÿ�¢ÚµëÏõS}¨|6Öµ/íÍQ;+Ä–ÞE¶`$ˆHŽ„ˆA#r0ÈÆG¥z�QE�V/‹†|'©ŽÆÐÒÿ�Â% Ð.ßò4³EcÂ% Ð.ßò5•âO èö~¾¸·°Š)£r:d9Š�먢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¬/x³Oð^‚úƥĖë"ǶÝC9-Ó‚@ýkÏ?᣼ÿ�@ÝsþüCÿ�ÇhØ(¯ÿ�†ŽðýuÏûñÿ�£þ;Áÿ�ô ×?ïÄ?üv€=‚Šñÿ�øhïÿ�Ð7\ÿ�¿ÿ�ñÚ?᣼ÿ�@ÝsþüCÿ�ÇhØ(¯ÿ�†ŽðýuÏûñÿ�£þ;Áÿ�ô ×?ïÄ?üv€=‚Šñÿ�øhïÿ�Ð7\ÿ�¿ÿ�ñÚ?᣼ÿ�@ÝsþüCÿ�ÇhØ(¯ÿ�†ŽðýuÏûñÿ�£þ;Áÿ�ô ×?ïÄ?üv€=‚Šñÿ�øhïÿ�Ð7\ÿ�¿ÿ�ñÚ?᣼ÿ�@ÝsþüCÿ�ÇhØ(®Á¿¼?ã}pé:m¦§ À…¦Ýs*aHe]Žyô®þ€ (¢€1ŸþGX?ì'þŒJÙ¬gÿ�‘ÖûIÿ�£¶h�¢Š(Ä^Óõé-ã¼¼žÝÚ9m¶Ã"©¸†@¦Xˆ`r¬IÆÛÁ½X>!±Õnõ- ãM‚ÊT±¼{™…ÍËDH0É ¶6ÏúÒyÇݾFõ�ÊÇ„ž Ô§;Aj·÷nÓ!ÃFËw#+.ùƒ#ƒÎ8=+ª®DÙ›ßÞ¨žNâéd±hošQ¼ö\ ú@fÛÂ.KË®ê¦m@”Ô‹ÂUî”0]·Kå%FBŽ#àã85cSµðŒš•äWºÅò-¼²]G†Þç!žH_gÍ(-›Ê2k5ôƺ—U½þÚðð>3ŒZÌÿ�r¢¢˜ÇÙ›oï›i9_›Ú¬jÚ^^,k,I£ê2kѺ>prí(Y“$`ÈÙlœ¼ r�ãmá%å×uS6 JjEá*÷J.Û¥ò‡’£!Gðqœ±©ÚøFMJò+ÝbùÞY.£ƒCosÏ$/³æ”ÎÀÍ‚Çå5šúc]KªÞÿ�mxxÆ-f ¹QQLcìÍ·÷Í´œŒ/̓íVµ/Í©j#F‡UÑÁÒµ7× ŒÜ“pdiEI£ätór6ð1ÈËmú€IWXÔÞ]Zgµ½2¨ŽKöU.b cf€íÈèk_Æßñí¢ØjÏÿ�F Å– «}KFÔe½ÐRâûX:‰…õªêm~Ì©ļa œ.O×#kÆßñí¢ØjÏÿ�F �ƒÅPè©Äšž¥yj÷Pnb·RÑÏþs±¶&æa»)÷˜g’+/SµðŒš•äWºÅò-¼²]G†Þç!žH_gÍ(-›Ê2jï‹´ó.£qnºŽ—lºýŠér-åÇ—(Ui>hWÌlLãoí9íY¶†×—‡KÆ‹húŒšôAJdÇÉ26['#o€8ÛxEÉyuÝTͨš‘xJ½Ò† ¶é|¡ä¨ÈQÄ|g¬jv¾“R¼Š÷X¾E·–K¨àÁÛÜä3É ìù¥³°3`±ùFMf¾˜×Rê·¿Û^Æq‹Y‚ßîTTSû3mýóm'# ó`ûU[CkËÃ¥cE‰4}FMz ÷GÎ]¥ 2cäŒ-“‘·Ž@m¼"伺îªfÔ MH¼%^éCÛt¾PòTd(â>3ƒ]=¦‹¦Gâyš;Û§šÕêØ9T>õ2¯Ë’[õb[�f¹Hô ÍMµ‹û}GD‘|_¶¹0Ý´‰ "Ý‚þõ¶o'!9è1]=œÿ� T+s¥º>Ÿo@—™ºËi[sE·…>qÝü#×€@ÿ�‘ÓÅßõÞ×ÿ�IÖ±-í|"Ö×Ëý±}$vû 2‚¢Ò!*°û1Ø<À$Dà ü¢Œô· Èéâïúïkÿ�¤ë\Õ¾†×kmý±¢ŸøF­RÖŠè¿ú¹¡˜5ÈÀò¿ãÙn®sÚ€m¼"伺îªfÔ MH¼%^éCÛt¾PòTd(â>3ƒ@·ðа’-wUXšÉ g¶RÅvÚ¯”|å8Úx“ŒàUWÓê]V÷ûkÃÀøÎ1k0[ýÊŠŠcfm¿¾m¤äa~ljLki´»ßí¯øCckXC_•WWQûCm>KmQ†ù²}¨JæÓÂ+kcöÅò[ÞA²)K ¸šRÇí'aòÁ‘ß,vrì3ÔTqXxQ’{˜µíI Ki9L}‚'yƒtX’>6’|Á€x ƆÖöMký±¢ƒâ[Wµ¥ºÙþ²i¦&Ø`ù¿ñòà—¢ö¤¾Ð.áð­õ¥Æ£¢Ã›£O¡ÛÏ%ÙDÄ¢1¾rW÷l#ùFì’y�é<G¦Á¤ü1׬­Ë²&™vÅäl³³#³3ä±$ûšêk™ñ=ÃÝ|1Öî$û>ùt{‡?g—͘Xü¯¸z é¨�¢Š(Å¿ò*j_õÄÿ�1[5‹âßùõ/úâjn>¦€&¬oÿ�È©©×üÅiî>¦±¼VÇþmG“þ¨ÿ�1@ôQE�QE�QE�QE�QE�QE�QE�ywÇÿ�ù%òÿ�×Ü?Ì×Ê5õwÇÿ�ù%òÿ�×Ü?Ì×Ê4�QE�QE�QE�QE�QE�QEêÿ�³×ü”©?ì/þ„•õE|¯û=ÉJ“þÁòÿ�èI_TPEP3ÿ�Èëýƒ¤ÿ�щ[5Œÿ�ò:Áÿ�`é?ôbVÍ�QQ\4ë 6ÑÇ$¹Y$(¸ÈÏ Ù=9<qÖ€9ßéñjp[ÛÍáÛ½Y~lIm$*öÇ™L’&×ã†^F¯==P\ƒØ\j^ »‚Ú1,«ªÍ0…˜(˜G~Òòxù‚•çŽy®¾²<5ÿ� ¹¿ì!{ÿ�¥2Ð ?†µÉï<Ot4fQâ8D0#MtÂÓ#á±óæ,±Ü£ëRk>ÖoL6é…Ž³.¬×M4aociÅ¿]ÀÁà¯'·¦Q@_?†µÉï<Ot4fQâ8D0#MtÂÓ#á±óæ,±Ü£ë[6ÚF©m¬Á1Ú;F÷Q7‹,éK2˶ƒb¸ýÒò{vQ´æi„‘Ʊ<¦Y 3 s¸`mç#‚x玕-�yu¿‡uãáx,$Ñ%[›ŸÛèåžxOØ¥‹x2œ9ÊêÃn[1®@íÕxÛþ=´Oû Yÿ�èÁ]=s6ÿ�mþÃVú0P/hº•õ椶vj]SLKŸÌENCæÄ~ñ[åÉÌCŽãYð¶³za´‡L ,u™ufºi£ {HÎ-úî†w�¸y=½2Š�òùü5®Oyâ{¡£2Â!h³¦6™ ˜Ÿ0ùeŽåZ“Yð¶³za´‡L ,u™ufºi£ {HÎ-úî†w�¸y=½&c*Á!å J+¹UfÇ�{àý *(¥ÀWÀÜäìxÍ�p‹§ë)ªØj#C¹ .º÷ò[¬ÐnµˆÙµ¿Íóí$»o! un§­› R‹_´ŽK.=Nòýµ1¸I„¡c�ùjƒ"\Æ;J(˜Ð?ätñwýwµÿ�Òu®i<-¬É§XÛ6˜"m&Ê;g-4xÔÙ. ”‘‚pBÿ�|f<c$ôºüŽž.ÿ�®ö¿úNµÓЗÏá­r{ÏÝ ”xŽ ÓE0´Èøl|Äù‡Ë,w(úцµÈ/<3ttgeðä- ѬñnÔ‰D‰–å Éû§s©õ ‰Úqq¤q˜o1ÚBOp¸ çœò1×<�yÄžÖ£Óo­—L¾­e%²š<iŒ÷Ê É &Aòg˜GÁéúÇöæ£{ý‡s$0ë‘ê'úTbÍmþ\¿ |ÀoEç<òŠ�âoì.4ß„zôQ¬RµŽ¡7’¬„IæÈ±äqò† Çq]µaxßþDÿ�Ø.çÿ�E5nÐEP/‹äSÔ¿ë‰þu§Y~0ÿ�‘GSÿ�®'ùŠ—Í“ûíùÐúÇñ_üŠÚýr?ÌUŸ6Oï·çY(‘φoÁc+×ÜP[EPEPEPEPEPEPEP—|ÿ�’_/ý}ÃüÍ|£_W|ÿ�’_/ý}ÃüÍ|£@Q@Q@Q@Q@Q@Q@¯û=ÉJ“þÁòÿ�èI_TWÊÿ�³×ü”©?ì/þ„•õE�QE�c?üްØ:Oý•³XÏÿ�#¬ö“ÿ�F%lÐQ\JðÂ^;y'`@òã*䟘Ç^½<TµÅÌ™®fŽ�¼ŽA$�2}IêhZ(¢€ Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–€5袊�Š9]æ™ÞHÖ2ÈÅvÉ‘œ® <täGqÍKQGs³M sFòÂ@•Áhɇl‚=ªZ�+˜ñ·ü{hŸö³ÿ�Ñ‚ºzæ<mÿ�Ú'ý†¬ÿ�ô` žŠ( LíH‘<¬ªXF„rA’O¹Þ•²+(H«c#ØãŠI¦ŠÞ 'žDŠ(Ô»ÈìU@É$ž€ Tu‘у#�U”äê(ÔQE�süŽž.ÿ�®ö¿úNµÓ×1 Èéâïúïkÿ�¤ë]=�ÊëqBÞGG ZU+µ1Œ“žsÆèsŽ*Z‰î`Žâ+wš5žPÆ8ÙÀg ħôÈ  h¢Š�Âñ¿üˆ>#ÿ�°]ÏþŠjݬ/ÿ�ȃâ?ûÜÿ�覭Ú�(¢Š�Äñ‡üŠ:Ÿýq?ÌSª’<«pDùŠæ¾Ýwÿ�?ßTÕÖO‰ÿ�äZ¿ÿ�®_ÔVWÛ®ÿ�çâOûê³µÛË—ÐîÕ§©L[Þ€=VŠ( Š( Š( Š( Š( Š( Š( .øÿ�ÿ�$¾_úû‡ùšùF¾®øÿ�ÿ�$¾_úû‡ùšùF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€=_özÿ�’•'ýƒåÿ�Ð’¾¨¯’~éƒUñóÛµåå¨ûæYÌb~xÈíÍ}ÿ�Lô1x“ÿ�O@)­éOªK¥®¥hu±æZùËæ®@#+œò5ˆõØ|9¢M¨Ë“°eŽxþüÒ»D_rHþuäºçÀ;ÆWºœþ"‘,d1˜Ú]ÓܶÔU;˜àAÇ^1]§àY¼/á›K:ÿ�YÖ_K½‚øÛ]Ü™K¤m—X×=½èÂØxÛQñ=¼·z厑tö ;18w¦U™ÏÌrz€¯ÿ�÷Œèzÿ�ÊD?ãRé:æ™âÙßiw‘\Ûɦ;ÈýâpGP}uTÈÂ=ãú¿ò‘øÖ> þ%Óg½‚_NòÚÅo!Hôh ”Ï#G¦[ïB¼ã¨æ½¹«ÿ� ˨ëzÕÍÍ´ÖÖp[FÕÐÄîèâU†‘�c$ŽŸTñ]¾™=óø‹U1Ú3-ò.‰jZÓo$¿ï0Ão¿5Óÿ�Â=ãú¿ò‘øÔðx^ÿ�N²Š×LÕ-Ö6•¦»këW¹yä8çq•HÀ� Ûº äõê(ÿ�„{Æ?ô=å"ñ¬½Bñki³4>31¨¼»— e…Ä€œ“Ü‚qÛ8¯C¬M�JÚ%ÒÂê’›ÛàŽë¸+}¦\22=²>´ÊÛŸÝYèWQøâo+Z öRth27BÓ ß7*7LóY×zLj,§‘&ñ…ï“絬 ¢Û˜îní0Çóî/¸È�•8<ê-<'ªZi>²]fÑ›A‘O˜l¢ÂÐ7å;²ryÁÀ=CÀ’_ȱ¶«²ÎÚùõ;–Øo†í˜¾ömØu îBà}îIÀ ]µß#Ïž*ÔR[1»QŒè¶ÄØ/f—`‚>a°·�ž‚¤»Ö<Ae<‰7Œ/|Ÿ=­`¸]ÜÇsp§i†?Ÿq}ÀŽ@©ÁàÖûø æYuIäÖcóµÄklð³ÆÕX†òb! \’ýsך—Pð$—ò,mªì³¶¾}NÆ%¶á»f/½›vC;¸{’p(—mwÄHóÇ'е–ÌnÔc:-±6 ٥Ę ˜l-À' «~,ÐüUI¸ñžVµTÙ‘.Ç/ÃpyÁçëaüs,º¤òk1ùÚⵂ¶xYãj¬Cy1„®I~¹ëÍhxÛþ=´Oû Yÿ�èÁ@—šŠì®ôûi|påï§h"+£Â@aÉÏÍÀÛ~5Ný¼I§O} þ7œÉg •MdóãSæå‹¡\rEuÚÞ‘y©_è×6—Ð[g]›–YmŒ¾ncxö‚vü²?<óLýOÂ·š–µ¨^ÿ�jC0ZÇBЗŠKyZXŸ~ü0Þä•Ú2021’ƶ»â$yã“ÅZŠKf7j1Ø›ìÒâLGÌ6àÐT—zLj,§‘&ñ…ï“絬 ¢Û˜îní0Çóî/¸È�•8<ß\Ë.©<šÌ~v¸‚-`­žxÀÚ«ÞLD!+’_®zóRê’þEµ]–v×Ï©ØÄ¶Ã|7lÅ÷³nègrïrN�rí®ø‰xäñV¢’ÙÚŒgE¶&Á{4¸“ó …¸ô¡o?‰®u§¯Œn•i-á»mßÉšhÁ/û²6¿U�ìlŠÓ\Ë.©<šÌ~v¸‚-`­žxÀÚ«ÞLD!+’_®zóZ–¾’ßXŠá¯Ãéö×sß[Zˆ0é4ÁÖ“wÌ¿½—hÆîIÀ OEÐüTþ+ñ4qxÇËš9­Ä²ÿ�fD|ÒaR3òàqÅjZXx²ö}B¼o'™a8·”6‘�ËÒA›¦ÙÓ½jhò:x»þ»Úÿ�é:Õ½;GÔl/õÛŸíi¥?Ú!O²008‰"™ó±§�/9çž�8i5-•¥ä~1½šÚ{(õ dE·Å­¼ŸvIràã†áw•Ž03Q.»â'x#ÅZ‹Ëx7iÑØõîÑfL�Ìw•àƒÐ×E€¯"Ñ ÒßZ…¢m6=&õ’È©¸¶p@¹ì}®à·ÌâvŽ)Éà+¨¦ÒçYÎÑã–³ÊÁYeǘJ�¹8ë“@üšÇˆ™|a{$kší“E·ÿ�B@íApF$.ãò1è3Q®»â'x#ÅZ‹Ëx7iÑØõîÑfL�Ìw•àƒÐ×O'€äû$ÖÑj»þÝíõBÖÁʼ²Jå>aå’ÓÊ?ˆ�ý2¦'€®¢›Kž=f?;DCŽZÏ+dme”oa(äàg®M�aë6ž%Ô~kü&O-¯Ø.|Ûy4˜£c±]^6 ü¤e8èEu>»«Zø|=âH­ÔѬ¯m–+¥_¾ œìuÈ$d‚»¦ án¿hf3?ö}ì²ÊWnù$Y$vÇ`YØã·JËÕÍ¿Ž<m¥ÙéW÷dÑÖiooì'Ù²GP© È:±– =hЪ»»{ 9®îæH-áRòK!Â¢Ž¤ŸJçá þ†/àÉë3ĤԼ?¨YZxƒZyî hÑnõhI#0ÁÈ  ?jZ‡€u[›+¸.`0KÔôî8®c΋þz'ýô+‰¸ø<-áKU¹ñÔ—1@O•f¾Rf$’Ãðè£ı†vÀûÎÙ'êh´ó¢ÿ�ž‰ÿ�} ÏÖæûë÷‹÷=}랪ڇüxËô΀>‰¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(˾?ÿ�É/—þ¾áþf¾Q¯«¾?ÿ�É/—þ¾áþf¾Q Š( Š( Š( Š( Š( Š( Wýž¿ä¥Iÿ�`ùô$¯ª+åÙëþJTŸö—ÿ�BJú¢€ (¢€8CÁžÔ|n­w iÒ´¶2I!kuùßÌQ¸ñÉäòj÷ü+Я¥à2Õ÷ÿ�‘ÖûIÿ�£¶h—ÿ�…oà¯úô¯üZŠãáçƒa„¼~Ó§`@òã·Œ1É?1޽z2x®¶¢¸¸KhL²,…AÆÒ7$º žþœOηðWý úWþ-ð­üÿ�B¾•ÿ�€Ë]EËÿ�·ðWý úWþ-eè|q§JóxoLv·h [©ùVâEQô�øWyYÿ�\ßö½ÿ�Ò™h;þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( J?‡ž y¦Fð~Æ@YÞ=²dg+‚O9‘ÜsRÿ�·ðWý úWþ-tqÜ$³M¬¢ 1hÙTägåb0Ý{ƒÇZ–€9øVþ ÿ�¡_Jÿ�Àe®wÅÞð•œA·ðî›—Vµ‰Ê@£r3€Ê}ˆ¯J®cÆßñí¢ØjÏÿ�F �OøVþ ÿ�¡_Jÿ�Àe£þ¿‚¿èWÒ¿ðk¨¢€99¾x2($‘<%¦ÊÊ¥„inœÐg'ÜïNO‡ dV>Ó V¶LcŽ+§šU‚ &påcRÄ"b�Ï $û“JŽÀ 0nÄE�s?ð­üÿ�B¾•ÿ�€ËGü+Я¥à2×QE�y®‹à/ OâÏÛËáÝ5á·šÜB€Â¤ãÓ$æº/øVþ ÿ�¡_Jÿ�Àe¥Ð?ätñwýwµÿ�Òu®ž€9øVþ ÿ�¡_Jÿ�Àe¨ŸáçƒVâ(‡ƒôçG ZU·jc'<çŒÐçW[Q=Â%ÄP¼Š•ŠŒc9`0½xÉçÁ sþ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( >ñwÃÿ�Yø/]¹·ðÞ›ðé×G"[¨(Â6 ƒê w6V6zmªÚØÚÁknŸv(#‹ôŠÊñ¿üˆ>#ÿ�°]ÏþŠjÝ Š( oÇÿ�ò!k_õ옯#¯XøÇÃÍpŽ¢ØŸÔWÏ¿nºÿ�Ÿ‰?ïª�ꪶ¡ÿ�2ýó®{í×_óñ'ýõQÏyrñiä*HëÍ�}]EPEPEPEPEPEPEP—|ÿ�’_/ý}ÃüÍ|£_mxëÁðxãÃ2èÓÝËhĉ,j 3ŒƒÔdôÈúŠòOøf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�ÛhÀ(¯ÿ�†eÿ�©»ÿ�)¿ý¶øf_ú›¿ò›ÿ�Ûh—ýž¿ä¥Iÿ�`ùô$¯ª+Ë>üñ#ë^7å­ÚÙ<¬n*síýÞ˜ï^§@Q@Ïÿ�#¬ö“ÿ�F%lÖ3ÿ�Èëýƒ¤ÿ�щ[4�QEsZÁ×[PŽÝm4ÍCO˜96²BÛã(¥£vvm¤TÚ$N  –Šâ§ñ.­c¦-ÝÄöö+Ѫ§O‘<¨ÎÖfùep›c`û‰`Av»Z�+#Ã_ò ›þ¿úS-kÖ?‡3ý“>Òû}î ÿ�—™hbŠæ,<Iuw¥x:ñ¡…[\ ç¨î´’—ŸXÀç<Ó‡Rž_j:VØÄvöV×¾wHó©ž@òíÔÐ¥ÊišÛÍaáMIlíbŸÄF#xQ0rlä˜zœyayÏ&±âKÍ?QÔìá†h`°6åÁÇ™s< ø<ª”Vã ž¹Ƕ‰ÿ�a«?ý*;Oê+¨Úé·‹k%ÀÕŸM¸–ÙÇØÚå]±+ÆÕ –ïÍIãoøöÑ?ì5gÿ�£�tôV^©©Mc©h–ñª2_Þ5´…ʲ‚9똀ú!Ô§—ÄÚŽ•¶1½•µÄoƒÒ<êAç< {u4©Er¶Úôºž‡á)®mmž?"¥Ô,¥”´’b�'‘”Ûƒž j[_È|G£¤q$¶6ÓÄUHÁ‘¦RÎ0<‘Œc©  j+>5Õ¦ÐaÕ`‚ÉÛB·Öo£‘Œ«"¹1ÄC ¤Ÿ“»ªŒw®ªßRš_j[*y6öv×(ÀÄÈ󩞃Êúš�ÌÐ?ätñwýwµÿ�Òu®ž¹þGO×{_ý'ZÓÒõ)ﯵ»gX×ì¢Þ&P~e0C.O=s)c   J+˜°ñ%ÕÞ•àëÆ†mp'ž GºÒIþ^}cœðj-K[’ ?Åš¡´´’ïÃÞp´w$¯Ùbœ‚s‘’Ø8# �ë(¬½SRšÇRÑ-ãTd¿¼ki • es×1ô5ÊjðèSj“CdËs¡Ük61¤n KCåÊK|ĉS‘·Ãf€:/ÿ�ȃâ?ûÜÿ�覭ÚÂñ¿üˆ>#ÿ�°]ÏþŠjÝ Š( _â?ü“½wþ½[ùŠùÖ¾†øÿ�$Ó_>–¤þ¢¾NûußüüIÿ�}PWL“î÷‡óËýºïþ~$ÿ�¾©Ñ^\É4hóÈTº‚ uæ€>Û¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿ�äuƒþÁÒèÄ­šÆù`ÿ�°tŸú1+f€ âµgÒ-uéöËÄ1}©dU»ŽþdÝ#feDYFÚƒ±AÁÁ®Ö¸ÝCXšK ×l >\†Ù'ѧ`¥W.Þ`G J®ŽØ #O ÿ�bÙÜÜi÷ÐÁqx‹f¾3yï$©ù¼¹]%™A.[¸Üך]hZF£h·7·ÚßöŽ£¨Erími}lÊ’"GÙÔƒá�>v³nÝœW¥ÐXšk6…w*÷·ÊB9FÁ¹—£>àŠÛ¬M Ìþ»ò]R_¶ßlfBáOÚeÁ*'鑚�Ʋ°ðÄšGƒ…½¾¢¶’ºÉ¤¶Ì % y�cægZºàä�Jô5¨,t™üYª2Åz5Ca¸uº‘Qás* U´RNp,H<“Xz~™$z ƒÄ6r%££YÍýœø¼Ak"¨Ç™ò$ÈÙ'’ÀÆÂZÜê÷Vú­°‘´ëxÚѬš c›÷€À³K•�}Ð21’Ÿeaá‰4 {}Em%u“Im˜K@ò�ÇÌÎ<µuÁÈ�•èjüúN‡¨ø›VŽk[™/ÚÆ´ƒs'—$,ÒÀ]ûA p' òMdiúd‘è~‚ÙÈ–Žg7ösâñ¬Š£gÈ|“#džH; kp<k«Ý[ê¶ÂFÓ­ãkF²vh€iŒRoÞÍ.T÷@ÈÆH —^]?F»ŽÃV’Þ“Yóâº5ªJNÆPÎHÞß8Æ3[~6ÿ�mþÃVú0W?eá¸ÛÃÚ5’øŽ -µ]2-(È– ¿m¶HÝÐ&\ùoå™rÇ äáAºǶ‰ÿ�a«?ý(Þ½k¥Üêzê1Ý4æñ…“Áq$a%Hä¶ÆÇ ŽHèMF,t™üYª2Åz5Ca¸uº‘Qás* U´RNp,H<“Gˆ­d¸Õ¼8ÑêPYÉ ûIrÚ´¿h"PPë·÷m)ÉÏ z`Æ–·ƺ½Õ¾«l$m:Þ6´k'fˆ˜Å&ýà0,Òå@t Œd€gÙXxbM#ÁÂÞßQ[I]dÒGÛfÐ<€1ó3-]pr�%zÔ:Lþ,Õb½¡°„\:ÝH¨ð¹•P*‡Ú)'8$I¬=?L’=ÀAâ9ÑѬæþÎ|^ µ‘TcÌù’dl“É�àca-nu{«}VØHÚu¼mhÖNÍ 1ŠMûÀ`Y¥Ê€>èÉ�̲Ҽ%&•ác Ù´¾DŽÁd¹•°†&c—.w Xη( �[³½Ñ¤ñ¬·QZj)wrZÅoZfû4ïâÑ*oÆWrP ‡Á'5Ÿ§é’G¡ø<Cg"Z:5œßÙϋIJ*ŒyŸ!òL’y  `èÙh‘Çâsö¢É„ï©Åcör¯—>h,Òg ¤´ø� 9'€$Ð?ätñwýwµÿ�Òu©ô»%µ8¯RâKŸ*ÿ�uÔ˜y (ÁÂ|Ž€ÚF�ãh¨4ù<]ÿ�]íôiú=­Ä:ŸŠ&‡U¶˜ÏxÆ,M¬¢”ùÿ�x6s“Ï8�öV“Hðp··ÔVÒWY4‘öÙ„´ |ÌãËW\€ ^†–úÓÃI¦xÎââÛPkufþ׌]Ëûݰ$„ ó0–È>]¹oAŠ­§é’G¡ø<Cg"Z:5œßÙϋIJ*ŒyŸ!òL’y  `®£§yš?Rm~Ú;[Æqtÿ�ÙîM—ú4jÙýçÏû$žG�kTÓtu¹ðí­â_;ÇtRÂE¼›)(…ß.ÛÁl¢8ËnÎH?xÖ5埅¡·Ö,WI¾ç¹\–Îá¥/Îcˆ™� >âEá³ZºÍä·žóµ{Ho ½g±v[©<‰U•G™û¿Ý´§’Ü×97:q†ãĹñ¬aÔ† XéîEœ‹j±²È<ÌȦ§åÛ÷‰Ï`wY¹µ»øO­Ieö�Ò®£ rìò£$n¬®X’X2rO#©®º¹-sK?ÂÝ~ÏÎ3?ö}ìÒÊWnù$Y$vÇ`Y˜ãµu´�QEÉüNÿ�’iâúôoæ+äjúÛâÏÃÿ�×£ÔWÆ~|¿óÑ¿:�Ö© ÿ�˜ë¢ÿ�:Åóåÿ�žùÔÖ’È×°+;dPF}èïZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1ŸþGX?ì'þŒJÙ¬CGžëSŠþ×RšÎd…¡!#G ¥þ yȦejÿ�ô1Üà,?üM�l×?¨[ëWZ“¤iV†6Þ}ôŠÅŠ•;“É!I Ã98Œrjì­_þ†;ü‡ÿ�‰£û+Wÿ�¡Žãÿ�aÿ�âhŸ—ÃÔº}ÍšÛé0›¹^XæIÜ/!F-×ˈ*_9O™®æ±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  šÄÐ £Dº0*<¢öûb»Rßi—�{àý)ßÙZ¿ý wø ÿ�Yx[^´YÛÆ1ÄòÉ6ϰÀØ.åÛ’¾¬h­ŽâMÁ–† 1¦ÐäQs‹¹6º-»À +’D…°@ÁÉÎF²ØêðøÃSÔã‚Åìî, ·‡uˬždM+ Ë噈È$¹ÁÎØ%ÿ�¡Öçÿ�öÿ�üMØ%ÿ�¡Öçÿ�öÿ�üM�P±Ð<Ci¢ø2ÐÁ¦4ÚŠ.qw&×E·xCårH¶#9ÈÖ[^jzœpX½Å„ðî¹u“̉¥a¹|²“1‘·89ÀƒûÄ¿ô:Üÿ�à¾ßÿ�‰£ûÄ¿ô:Üÿ�à¾ßÿ�‰  :ˆm4_Z4Æ›C‘EÎ.äÚè¶ï�(|®IÁc'9ümÿ�Ú'ý†¬ÿ�ô`£ûÄ¿ô:Üÿ�à¾ßÿ�‰ªz‡ƒuÍM-ÖçÆWL-î#¸OôTð¾´¯¯Øjwš–ƒq§Çhécz׋‰Ú2TÃ$X\#dþôžq÷@ï‘ØêðøÃSÔã‚Åìî, ·‡uˬždM+ Ë噈È$¹ÁÎØ%ÿ�¡Öçÿ�öÿ�üMØ%ÿ�¡Öçÿ�öÿ�üM�P±Ð<Ci¢ø2ÐÁ¦4ÚŠ.qw&×E·xCårH¶#9ÈÖ[^jzœpX½Å„ðî¹u“̉¥a¹|²“1‘·89ÀƒûÄ¿ô:Üÿ�à¾ßÿ�‰£ûÄ¿ô:Üÿ�à¾ßÿ�‰  :ˆm4_Z4Æ›C‘EÎ.äÚè¶ï�(|®IÁc'9Vöœ^6¿Ôš;Oìë›+{ua;yÁ¢i[%6cÎ#ïõâ§ö‰èu¹ÿ�Á}¿ÿ�Gö‰èu¹ÿ�Á}¿ÿ�@ÿ�#§‹¿ë½¯þ“­O¥Xêö:Ÿˆî%‚ÄÇ}t.m6ܹ$ˆcˆ,ƒËùÕ[ïŽ9̶ðn¹i}{Œ®„׬1û•P£øxàv«ŸØ%ÿ�¡Öçÿ�öÿ�üM�P±Ð<Ci¢ø2ÐÁ¦4ÚŠ.qw&×E·xCårH¶#9Èuÿ�‡õÛ½3ÆÖKœ£[/öG7Oò†·H˜<¾0#ÝÆîN;f®ÿ�`x—þ‡[ŸüÛÿ�ñ4`x—þ‡[ŸüÛÿ�ñ4.«e­ß\xrê+m<Kcvnnãk§�f""6òþoõ¤òîß#6ÿ�ÃúíÞ™ãk%‹NQ­—û#›§ùC[¤Ì_îãw'³W°<Kÿ�C­Ïþ íÿ�øš?°<Kÿ�C­Ïþ íÿ�øš�“Å­pß5滎(î“sæ$REo)²¤|¥tuÇê×õ=6êÂçÆW-ou Ã*ý‚•`A ž†» �(¢Š�ä~)É0ñýy·óñu}íaiªXMc}oŬ˶H¤VõÍ­ð7ý 6÷Áÿ��øº§²ÿ�ûúê¿ÌWÙ_ð«| ÿ�B͇ýðÆ•>x"7W_ XR‡¨üh­¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢±üVe>Ôc†™ZhŒì ™Q\„gP9%CÀäíÀæ¹iº¥Žƒ%‚éSXÏxë;Ü#Øù°”K¥©ˆí'çÀJçøó@Ey•ý»màÍ6Îå5—·±—F'ÓH‘^9TÜFcÜÑ"¢°~äcqèz­O k0x†=GRu ¡%½Ý—tfw1ùh±æE*Q²7�O€ÙÑ^9àUÕô=*îÇûûL–]Þ[{›M5ö™"FóÆÀ´,2~þã¦w,u_ÍuaÍδžKgTÒöo_´H«3»C·ýW–ÜÀä€Äí�EyFŸã{K?Ú[ ׄÚF/d¾µ`Þxd퀡wc°†.Øùº¯ Ë{}¤j:ÕÎ¥uËsZÞéÂ=Ñ,±‚•ŸtE: ÈÆr(­¢¼^ÒãTÑ´«¨|7g­é‘ìÕnVÚ ‚É?ÚZƒ¾pѧž�ùH­ÛígÄÿ�غ´º}ƶóZÞH,Ìš6Ù.ìÁÕX‡îüÐé•\Ÿ”nÝ@—Eyçü$z½ß®ãµ½ºK5Šd°³–Á¢†îu…YSÍxÜNXuxáêšKâ-ká/‰#ñœ×WrÚH–ð}’C7˜b]žJgò ©�cæm¥ˆ§Ñ^w£ØiÚމawl—Z–Ÿ$¶VZd‘®È®10l,‡nâ[�‰øçêçí¿µm­¢Ôî\£Û\›�™´isÄ-ûÄÀ�lbU·l=€=RŠâ|$oOŠ/§Ô¬Þ;Û"Ãí7ÚI3L>â‘rv¼|GL|§µ�QE�QT5¸¯gÐ5´Ù<»÷µ•mŸ8Û)RçëŠ�¿Eyð‹O³³¸¼ðÖ§ê‰Eq?ös£ˆÚXüÖ—Ê3ä®9Î +>´u;E4Û™µ¢jQC<¶L‚SçFÖ¢f –2ÅNÜ# P£Ñ^s¥_ø’÷Ä–ÖRê:ìzt‰1Žæ]%c2mòYL¤ÃˆÉ&å0vä"2Àµ‹Ù4­+âF§¬]h× §Û-½Õ¶4ìe0$Š„±¢äqÆx �wÔW©ê~ > Ó¤7q[L–Íä-°xÜ´„\ ŸiòÌqíeåw1#æé\V­©x¸®›~tËë½NÎ_9ZM5ÇÙåkk…ž$)ÌaŒ† O,À�{-Ç\j~%Ô<w§ÙMg/ösÍe$§ý4Ü*ä$–íA– 8'#ž0o|E¬ý¨•Ô5ûkIu¦†ýŽ<×¶{&•B#C–Û,n:ÞÏ€=>ŠáüSk5ÿ�à ®uM-î5ÇѤ…b‚Ù¦t¸– *¨$|øç°@Í7U¸ºÓfÓ/|= üww 5ͬ:SaÁ–‘¥ ¡òË�\ì$“ŒêŠóØ-ï,<m­@–·‡I¼½{‹»o°n·–eiÂe¤3.Ò‰9c·½fü-½ñƒ5†­g5¦›ka Å´‘•Ùj¬¤Är02Ȩ`TÏ8¢¸}^›CQû]´—V0ꛋhлKeöQ°rê'f$�sµ¸4“yzn€á‹ GJ±žÿ�7FßMo:4òÈÝ»¡ XÔœÇïPsEy~—u®[iÚœ†ËPÓ..uXfÔ$³ÓYÙYF$hQ‘„™¸Œ© 7·£Væ‰uâ߬•Ρh©§YÜËY/ÙŒä8ž!)Œäb8ž¸8�¥Âêúv›q®êkâ-ëRƒN–+9'ò£òÔWP|–ó„’W!‡5OÅÚ·‹mo5Q¥ÿ�i/—›Xí´ñ2û>ä6ÆÌ†ã”ÏÜ%¶½@EyÅ–¯¯Éâ8ìÍî¾ö’jÉ6娷k]ÂRÞ@�¬ä(Ïê­EáÝ{Ń¥¿ó¯îZK; EÄ– ’+¹ÿ�I0 @$ x`Xàné@™EydZ÷‹"¾2O.ºñG%¡H†•š&¹‘%.V†û8ŠB]ˆÀÁPÈ5¯½¥ìš‡Ûm]u xÕ-lg ÁY6#kGäüÁƒ9yo˜-�zµçæ–÷~!¹ºÓîžó\‰â·ÕmüÇÒÎ$u•>ÎÒGå½Ý‘°»Aut[íNæmÌ×Ï7Û¦Žy/ ò^KaÁ|¸þQ)ˆd¢óœdHmEPEPEp¾*ÒtÝOÇš2ê7Û"k ˜^y4Ǹ¤‡ËË„8YpIrzn¥¿7ú6·¥éŠÚ•î‚-ÒÚæ`nÅäÌ73ª³;ïŽ0y89È�îh¯(ð¥ßŒVçúWÙ®l´˜´«X\Mlèr!+)$ÂvÈ®ÝA…}Àˆ4©|[§è“Ok.»s©/‡mD6÷–{Sí Ò‰—&!ó +´—ÎO™Á�½EaxBãUºðì2ë'uÑwÃdfMÇnåhã!±€~E�[´�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE‘má&×UmN(%ûI‘åî$tG|îd˜¢1ÉÉP Éõ­z( Š( Š( Š( Š( Š( Š( Š( ¡šÒÚæHdžÞ)^ó!g@Æ6Á”ž‡ŒŽÄÑE�MEPEP`nÝœc4´Q@Q@Q@@e*ÀF=ê;kk{+hí­`Ž x”,qDUt��¢Š�–Š( “jï/´n#ãœQE�-Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform10.jpg������������������������������������������0000664�0000000�0000000�00000052445�15030617045�0023361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )²H"‰¤`ÅTB©cøÉú †ÊúÛPÓ­ïíeZÜD³E& Œ2<Žë@(¬‰|M¤Ckor÷gȸlE"Äì¬8ùòÜä|ÿ�w‘Ï5b×Y°¼Ôn, ˜µÅ¿ßS�ppv±lÒpx84~Š‚Òò èZ[i7¢Ë$Dà£}Hü)Ñ\Ã<“Ǫïùr€~ãm ƒï†SøÐ´QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QTtíkJÕüßìÍNÎ÷É!eû4ë&Â{6Òpx=}(õŒÊŠYˆU$“€QÓµÍ#XiLÕ,¯LG k„“g×i8  ôQE�QE�Uyïìí¤1ÏuN"yÊÉ R#\n~„n=EX Š( Ša–12ÂdA+©eBÃqQ€Hƒrçê=iô�QH̨¥˜…P2I8�S-î!»¶ŠæÞTš PI‘°eu# ‚:‚9Í�IEPEÄ–9DIš&Û V£`C‚Њ�}Q@Q@Q@Q@Q@xÿ�ÆgøŒ¶r`€4=¿¾m?wÚ@Ç;ûíÿ�s¶sÅ{eIâÃ4Ë®i‰,lQÑ®ãXFx Œb€1¼4þ#ÿ�„WGòàÓ }ЦI¤ÜFÁŒü½kW‰¿çßHÿ�¿òñ¿ð–øovßøH4¬õÇÛcÿ�‹|6£'ÄP¦ö?ñ ßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ§ÂWáÏúé_øøÒxlŒiG·±ÿ��&ÿ�Ͼ‘ÿ�äÿ�â*݃j…ŸûF;4>Ï#7×;€ª¿ð–øovßøH4¬õÇÛcÿ�‹|6£'ÄP¦ö?ñ  ;¦¸[YZÒ8¤¸ |´–BˆÍ؈ø?Jâ´ÝăÂðøJþ; {Q¡=‰¼´–Ie ±£e•1•.p ¯^k£ÿ�„¯ÃŸôÒ¿ð2?ñ¤,ðÙ Òn/cÿ��äÿ�á¿W1Áf/£ºµ–Ò \Ck Â@®Ñƒ-˜ í!FdnxÉÞÑü;wa¯5ÔÏ µƒíŸf(ì]þÕ:ÎûÁ�.Ò¡F È9ã¥^ÿ�„·Ã{¶ÿ�ÂA¥g®>ÛøÐ|[áµ> Ò€õ7±ÿ��yýßÃbêÉàþËðê²Úê0@ßhܵÄþtL¿¹ãÊçîr1Z÷þº»›W¸mD–[ëÈoùŠüËÆÈÙ…ƒ(pÌ2¬ rp¬®«þ¿ÐJÿ�ÀÈÿ�Æx³ÃddxƒJ=¸½ühö›ÖÚ]¤#<P¢Iä‚pPÐy=3V«þß îÛÿ� •ž¸ûlãAño†ÔdøƒJÔÞÇþ4$·úÌâ7MxƒŒú„ŠÅ{'Û'êiŸiñý´¯üIÿ�Æ(ÿ�„¯ÃŸôÒ¿ð2?ñ¤,ðÙ Òn/cÿ��_´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�¤ÿ�„·Ã{¶ÿ�ÂA¥g®>ÛøÐ|[áµ> Ò€õ7±ÿ��/Ú|Gÿ�@­+ÿ�RñŠó?‹º·Œì‡Ž‘ µÔ^éÄ)§\=ÃKòòLjèpr?*ôÏøJü9ÿ�Aý+ÿ�#ÿ�jø·Ã.w/ˆt† •ȽŒãÔu ü#?‰.|? ž)´´µÔÞKi7 z°èÔGò­Ú¡e­é:”Í †©eu*®öH.Ø/LNjý�QE�QE�QE�QE�QE�QE�æ6º¥üZu¥’kúw™®_½Ü°èÒ3 w{‰#aæBÃ’aè;‘^\žã‹mwRš 'Ó^»’Ò&Å¥‘Ñ\“±P…Ë%~nW-Û)Ω¯ü/³’âÎi5 `¶’öÎH|—˜«£OÖ‚È »Ò¯&½¢ÅúÌ–¶‰kŽYæÓ&‰‘ . neÉ '"“Ãþ,]f5–{hìâ:Mž¦]¦ÈQ8“*I|£Ï|ö¦xƒÆz™áiõq¨éwqˆdšÖ6¼Œ-ÓÆ7lFç-�œâ€"ñ~­ªi÷ÚZé©©$—"ÚÈÏù¨$ B1 »� “Ž3÷K|Em«\x§Lm7P¿³ItÛÈ–HíĤäÄc2ehûÇ’>à�òCt·šŽœÞÞÛÛ g•Sq'<𠪿ð‘è~uÜ?Û:w›f¥®SíIº�:—ùGÖ€9ÛKßOÜße•$k_¶ÚÃp±…b*-X€úÁ¼·P©ü1{«\j¥e¸Õ.¬M±iŸSÓÅ«Ã>åÂG„MêA|Ÿ˜ £æ9®’=JÂYLQÞÛ<‹/’QeRD›wìÆ~öß›qÍ%Þ©§Ø3-åý­±Xšb&™S©Ÿ“÷FFOA‘@gªÉâHqªÏ.³6§6~‘Áo§K+¶h#FŽ<J –fAæ®Ï¬ë×Úù6÷Þ"³Ó¦ÔÖÝ4N#¶kPÞf^AóþR[€ Èî;¦Öl—RûÚíw$M(2üÈfIÆ1 $’1•àƒ‘>*ðõÄPË»¦Iò˜au»B$“•N~cÈàzÐÚÏ‹µ ? ËÅþ˜^Î7¼ØO3Or0$‰Õ¶ù+žÂœŸ˜ÌPë¾$k‰„—^ H¦¼ Ÿ³„¹AÏÜŒ–ƒyù·rÚOÊ}>Š�ó›Ýg^·:`Ó£×n[ 1îlíÞ|[]€E@â!9E`¤ü ¨,G.­âµZÁ ÿ�ˆ›L–ä~Ú(!<™‹†ÈÀA�V1ŒïaȯJ¢€<êËÄúó\xj{«mi#kHÿ�µ¡þÉ}›ÌRnaˆËî„�vw ÜOcð£Kcm¨Eum¥G B¶ö„‘#q.I 89ÆFA箢€<çHñ¹-Ý…¶¥&½ÇëÝJº;üå&V·ËyÜЇÈP2p0M÷ˆ“BðÍÉ:ëÞÊ!›QŒé_.7Ƴ£(‡rík(-ÔÒ( gC¹Öeׯìo¥•íìÝ&hÑ~Ѹh‡ 0PSÓ8SÎkÿ�VÕ†±«@·#‚Þ-@ù"ÓJi ¨a‡ ²<L¡|Å›Ðr uÏu§i–ºU»AhލÎdmò´„±÷bO`�Ï��8«t�QE�QE�QE�QE�VŠ.<ImaxfÊÊîì¾.ä(¡qÔG5¹Xþ#ñV‹á+¼×/~Ënï±_ÊwËzaA4Çÿ�jü]ÿ�¡sÿøßüUghºŸÅE°”ZèÇö»’Kܰ;Ìî\}î·ìlÿ�Âíøyÿ�CþI\ñºæ´ß‰^H. Þ5Ô­šKË™DQ[É´+Îì¤~äõR^ômµ?ŠŸð“DÇ@Ð>×ö7>ÒÛvo\œîëœQ¯jH^hAæE–K–'>bãø½qYíñÀçÄqÜjž@´x̾D™ ]H_õ=0 éÚoâ7î´§ŠßǤÒ#! � H¤Ÿõ# þÑjü]ÿ�¡sÿøßüUghºŸÅE°”ZèÇö»’Kܰ;Ìî\}î·ìð³¼ÿ�Cö¯ÿ�€òñŠ¡£üGð=½”‰?ŽuXœÝ\8U‚B ´ÎÊßêO$Ý(ój?á&‰Ž }¯ìn}¥¶ìÞ¹9Ý×8£^Ôþ*>‘ ¼Ð4ƒÌ‹,—,N|ÅÇñzâ³Ûâ7ψã¹8Õ<hñ™|‰2º¿êz`ÓµßÄoÝiO¿Ž5I¤2FB4�@‘I?êG@ ü(¢þÕø»ÿ�Bç‡ð)¿øªÎÑu?Š‹a(µÐ4íw$—¹`w™Ü¸ûÝnØ ?ágxþ‡í_ÿ�äÿ�ãCGøà{{)ê±9º¸p«„i•¿ÔžH þ=ºPæÔþ*ÂM@û_ØÜûKmÙ½rs»®qF½©üT}"Ay h ™Y.Xœù‹âõÅg·ÄoŸÇr<qªyÑã2ùd1u!ÔôÀ'§j5¿ˆÞºÒž+j“HdŒ„h$�"’ÔŽ€øPEý«ñwþ…Ïÿ�àSñU¢êÂQk hÚîI/rÀï3¹q÷ºÜ°ÂÎðýÚ¿þÉÿ�Æ*†ñÀööR$þ9ÕbsupáV *Ó;+©<Aü{t  Í©üTÿ�„š&:ö¿±¸ ö–Û³zäçw\â{Sø¨úD‚ó@Ð2,²\±9óÅëŠÏoˆÞ>#ŽäxãTò£Æeò$ÈbêBÿ�©é€ONÔk¼u¥<Vþ8Õ&ÉÐHE$ÿ�©�'ð ‹ûWâïý žÿ�À¦ÿ�â«;EÔþ*-„¢×@Ð?µÜ’^åÞgrãït ¸`(ÿ�…àúµü“ÿ�ŒU â?íì¤IüsªÄæêá¬U¦vVÿ�Ry ƒøöé@›Sø©ÿ� 4Lt ícpí-·fõÉÎî¹Åö§ñQô‰æ $dYd¹bsæ.?‹×žß¼|GÈñÆ©ä GŒËäIÅÔ…ÿ�SÓ�ž¨Öþ#xëJx­üqªM!’2 ŠIÿ�R:�Oá@ö¯Åßú<;ÿ�Mÿ�ÅWƒéš¯Ží>&êÿ�Ø)2ës_Îní-FøKù¼r6ƒ‘“Ðw¯gÿ�…àúµü“ÿ�ŒW—haÐ<[¬¡šòmïPšUº³ ëHÄ;nOœzžÝ(ßôI5‰uË×­í`ÔŽ™'¬…Ð1:8úsõ5Õ×᛫=O_³Õ4ýVïP´¹Ó$hÞàŒÞ'Ú?Zíh�¢Š(È~+|X—Áþ"Òt½3l’E"Üê+Œ“àGìH$ç·Ëë^«§_Ûjºm¶¡g ’Úæ%–'Õ†EbxžÞ¿ðû41–}QUÉQ–L¼^ƒò®‰#H‘R4TE £�P¨¢Š�(¢Š�(¢Š�(¢Š�+Œ‹Â:ÜØ׬7Ùê—:Š1Ó†3y»;·Ÿ&û¾‡=ÁY|<½‹KŸN½Ö­®-ßJ¶ÓT&žPnÌѳn‘ƒ½ƒ.0Þ܃(øwéZµ¤SéÖÏ©Ø5”¿eÓ(bv8Ãð~|œ±ÉUäm»Š(SÑõBóA¹]FÚ#¦Üý¢u6ŒÂv14D/ï–6É']Ü•ë‚]¼¤±³¿½†óLÓÒHí`û&ÉJ<mYdÜw®z*äàœ‘]…Í鞊ÅÙçÔ.îZKU‚V.cg)C6å «ìÂä@QŠšóÂvWpXAæÜùV¦E:gç†@CÄï#*Çiäÿ��ŠÞ¢€9$ðmÔW6.5X¦Ž >âÊquf%{ƒ6Ì»àqåF6•9�ŽàŠsøâþö ÝRÿ�L¿ÆEÆ’²$iÁPy£ƒ“¹‹ç c�ÜÑ@D³¬“™¥ÑŸ1*ÆT¢í“¸çqÏ1ÆL´Q@Q@Q@Q@Q@Q@Q@Q@Q@2XbBËH :ƒO¬?xZÏÅ–ÙÞÜÞÛÇù­&òØœc“ƒÅ�jgÙÏ¥¿ýûá\¦Š·©ir°xzÊx†¡xF¸U,>Ó'm‡e•Ð?è1â/üþ&¹Í;À>N—¾/¿¶¸Šòæ&‰µ„BLê29 }IÍ�vn5øK¡ÿ�ŠnÇwØäûJãbs”x”jØrîðÝŒc͇æ[•'ýjÿ�±\;xÀƒÄ1À<eyöshîeþÚL†  ßBN=¨Ö¼àK}-ä·ñ•䲉#´]A8öŸÂ€=;—ý öø¿ün²ü>5ìÙ¶ønÅÇÛ®ù7*9ûD™s·O¹_ø@>ÿ�Ðñ{ÿ�ƒÔª:G¼=”?Œï"qupF´‹•YTãÝ@9ïœ÷ ÙÆ¡ÿ� t?ñMØîûüŸi\cÌNs²Cû]Þ±Œy°üËr¤ÿ�­_ö+‡oøx†8Œ¯>ÎmÌ¿ÛIÁÔ»èIǵ×ü o¥¼–þ2¼–Q$`!Ö‘² ¨'À“øP§cRÿ�¡^Ãÿ�—ÿ�Ö_‡Æ¡ý›6ß Ø¸ûuß&åG?h“#îvéøW+ÿ�Ãßú/ðz•GHð7€ç²‘çñäN.®(Ö‘r«3ªœ{¨=óžôÛ8Ô?á.‡þ)»ß`“í+Œy‰ÎvQâQ¨aË»Ãv16™nTŸõ«þÅpíàÇ�ñ•çÙÍ£¹—ûi2:€7} 8ö£Zð?-ô·’߯W’Ê$Œ:Ò6AuãØ �ôìj_ô+ØàRÿ�ñºËðøÔ?³fÛá»n»äܨçíd}ÎÝ? åá�ø{ÿ�CÅïþR¨éðöR<þ3¼‰ÅÕÂÒ.UfuSu�ç¾sÞ€;g‡ü%Ðÿ�Å7c»ìò}¥q19ÎÊ<J5ì9wxnÆ1æÃó-Ê“þµØ®¼àAâà2¼û9´w2ÿ�m&CPï¡'Ôk^ð%¾–ò[øÊòYD‘€‡ZFÈ. œ{Oá@Kþ…{ü _þ7Y~‡ölÛ|7bãí×|›•ý¢L¹Û§á\¯ü èx½ÿ�ÁêU#ÀÞžÊGŸÆw‘8º¸@£ZEʬΪqî ÷Î{ÐlãPÿ�„ºø¦ìw}þO´®1æ'9ÙG‰F¡ý‡.ï ØÆ<Ø~e¹RÖ¯û÷ü<CÆWŸg6Žæ_í¤È`ê�Ýô$ãÚkÀþ·ÒÞK^K(’0ëHÙÔ`Iü(Ó±©Яaÿ�Kÿ�ÆëÂü3iáKŸ‰šòë÷Çö­Ï•gyt"·Sæ· òáÏl3Ù{×mÿ�Ãßú/ðz•åzWÃK=sÅ:§âm:ÇD‚úx¢¸¸½çB ‘œÇ�õ £,%½B—Z|VhškˆÖ9ăbqÂŒWQ\G…¢ÑìuË=3GÕÿ�´¢µÓ$S#Þ ‡ÿ�XNN=€À…vô�QEÏø›þ?|9ÿ�aUÿ�Ñ2×A\ÿ�‰¿ã÷ßö_ý-t�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VŠ.<ImaxfÊÊîì¾.ä(¡qÔG5¹Xþ#ñV‹á+¼×/~Ënï±_ÊwËzaA4Çÿ�jü]ÿ�¡sÿøßüUghºŸÅE°”ZèÇö»’Kܰ;Ìî\}î·ìlÿ�Âíøyÿ�CþI\ñºæ´ß‰^H. Þ5Ô­šKË™DQ[É´+Îì¤~äõR^ômµ?ŠŸð“DÇ@Ð>×ö7>ÒÛvo\œîëœQ¯jH^hAæE–K–'>bãø½qYíñÀçÄqÜjž@´x̾D™ ]H_õ=0 éÚoâ7î´§ŠßǤÒ#! � H¤Ÿõ# þÑjü]ÿ�¡sÿøßüUghºŸÅE°”ZèÇö»’Kܰ;Ìî\}î·ìð³¼ÿ�Cö¯ÿ�€òñŠ¡£üGð=½”‰?ŽuXœÝ\8U‚B ´ÎÊßêO$Ý(ój?á&‰Ž }¯ìn}¥¶ìÞ¹9Ý×8£^Ôþ*>‘ ¼Ð4ƒÌ‹,—,N|ÅÇñzâ³Ûâ7ψã¹8Õ<hñ™|‰2º¿êz`ÓµßÄoÝiO¿Ž5I¤2FB4�@‘I?êG@ ü(¢þÕø»ÿ�Bç‡ð)¿øªÎÑu?Š‹a(µÐ4íw$—¹`w™Ü¸ûÝnØ ?ágxþ‡í_ÿ�äÿ�ãCGøà{{)ê±9º¸p«„i•¿ÔžH þ=ºPæÔþ*ÂM@û_ØÜûKmÙ½rs»®qF½©üT}"Ay h ™Y.Xœù‹âõÅg·ÄoŸÇr<qªyÑã2ùd1u!ÔôÀ'§j5¿ˆÞºÒž+j“HdŒ„h$�"’ÔŽ€øPEý«ñwþ…Ïÿ�àSñU¢êÂQk hÚîI/rÀï3¹q÷ºÜ°ÂÎðýÚ¿þÉÿ�Æ*†ñÀööR$þ9ÕbsupáV *Ó;+©<Aü{t  Í©üTÿ�„š&:ö¿±¸ ö–Û³zäçw\â{Sø¨úD‚ó@Ð2,²\±9óÅëŠÏoˆÞ>#ŽäxãTò£Æeò$ÈbêBÿ�©é€ONÔk¼u¥<Vþ8Õ&ÉÐHE$ÿ�©�'ð ‹ûWâïý žÿ�À¦ÿ�â«;EÔþ*-„¢×@Ð?µÜ’^åÞgrãït ¸`(ÿ�…àúµü“ÿ�ŒU â?íì¤IüsªÄæêá¬U¦vVÿ�Ry ƒøöé@›Sø©ÿ� 4Lt ícpí-·fõÉÎî¹Åö§ñQô‰æ $dYd¹bsæ.?‹×žß¼|GÈñÆ©ä GŒËäIÅÔ…ÿ�SÓ�ž¨Öþ#xëJx­üqªM!’2 ŠIÿ�R:�Oá@ö¯Åßú<;ÿ�Mÿ�ÅWƒéš¯Ží>&êÿ�Ø)2ës_Îní-FøKù¼r6ƒ‘“Ðw¯gÿ�…àúµü“ÿ�ŒW—haÐ<[¬¡šòmïPšUº³ ëHÄ;nOœzžÝ(ßôI5‰uË×­í`ÔŽ™'¬…Ð1:8úsõ5Õ×᛫=O_³Õ4ýVïP´¹Ó$hÞàŒÞ'Ú?Zíh�¢Š(Ÿñ7ü~øsþ«ÿ�¢e®‚¹ÿ�Çï‡?ì*¿ú&Zè(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¦K S¨YbI�äPiõ‡â Yø²Â;;Û›Ûxã05¤Þ[Œrpx  Oìû/ùô·ÿ�¿cü+”ÑVõ-.VYOÔ/È× ¥‡Údí°ã󬝸Rºý<Eÿ�ƒÿ�Ä×9§xÁ Ò÷Å÷ö×^\ÄÑ6°ˆ@IFAç$�O©9 ÍÆ¡ÿ� t?ñMØîûüŸi\cÌNs²Cû]Þ±Œy°üËr¤ÿ�­_ö+‡oøx†8Œ¯>ÎmÌ¿ÛIÁÔ»èIǵ×ü o¥¼–þ2¼–Q$`!Ö‘² ¨'À“øP§cRÿ�¡^Ãÿ�—ÿ�Ö_‡Æ¡ý›6ß Ø¸ûuß&åG?h“#îvéøW+ÿ�Ãßú/ðz•GHð7€ç²‘çñäN.®(Ö‘r«3ªœ{¨=óžôÛ8Ô?á.‡þ)»ß`“í+Œy‰ÎvQâQ¨aË»Ãv16™nTŸõ«þÅpíàÇ�ñ•çÙÍ£¹—ûi2:€7} 8ö£Zð?-ô·’߯W’Ê$Œ:Ò6AuãØ �ôìj_ô+ØàRÿ�ñºËðøÔ?³fÛá»n»äܨçíd}ÎÝ? åá�ø{ÿ�CÅïþR¨éðöR<þ3¼‰ÅÕÂÒ.UfuSu�ç¾sÞ€;g‡ü%Ðÿ�Å7c»ìò}¥q19ÎÊ<J5ì9wxnÆ1æÃó-Ê“þµØ®¼àAâà2¼û9´w2ÿ�m&CPï¡'Ôk^ð%¾–ò[øÊòYD‘€‡ZFÈ. œ{Oá@Kþ…{ü _þ7Y~‡ölÛ|7bãí×|›•ý¢L¹Û§á\¯ü èx½ÿ�ÁêU#ÀÞžÊGŸÆw‘8º¸@£ZEʬΪqî ÷Î{ÐlãPÿ�„ºø¦ìw}þO´®1æ'9ÙG‰F¡ý‡.ï ØÆ<Ø~e¹RÖ¯û÷ü<CÆWŸg6Žæ_í¤È`ê�Ýô$ãÚkÀþ·ÒÞK^K(’0ëHÙÔ`Iü(Ó±©Яaÿ�Kÿ�Æë/ÃãPþÍ›o†ì\}ºï“r£Ÿ´I‘÷;tü+•ÿ�„áïý¿ø=J£¤xÀsÙHóøÎò'WkH¹U™ÕN=ÔžùÏz�íœjð—Cÿ�ÝŽï°?Éö•Æ<Äç;(ñ(Ô?°åÝá»Ç›Ì·*OúÕÿ�b¸vð?ˆc€xÊóìæÑÜËý´™ @¾„œ{Q­xÀ–ú[Éoã+ÉeFi º‚qì ?…�zv5/úì?ð)øÝx_†m<)sñ3^]bÂÞãXþÕ¹ò¬ï.„Vê|Öá~\9í‚F{/zí¿á�ø{ÿ�CÅïþR¼¯Jøig®x§Tó¼M§Xè_OW±¼ó¢È@!r33¸à£4ôe„·¯ã(RëOŠÍMqÇ8cÌN8QŠê+ˆð´Z=޹g¦hú¿ö”VºdŠd{Ápÿ�ë©Éǰ°®Þ€ (¢€9ÿ�Çï‡?ì*¿ú&Zè+Ÿñ7ü~øsþ«ÿ�¢e®‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÃñElj-¬#o ÙY]ݗå܅.:‚æ·+Ä~(Ó<+eÞ¨ó,2>Å1BÒý@‡ö¯Åßú<;ÿ�Mÿ�ÅVv‹©üT[ E® <k¹$½Ë¼ÎåÇÞèpÀVÏü.oÏÅÿ�þ æÿ�âkšÓ~"xY`¸2kÞ €Éys(ŽFتó» ~ìö#¿Z�¶ÚŸÅOøI¢c hkû€Ÿim»7®NwuÎ(×µ?ФH/4  ó"Ë%ËŸ1qü^¸¬öøásâ(î?á"ñ”- ý•·n.§òúphÖþ x^çJx¡ñˆ¤s$d,–¬ŠOü³ôÑjü]ÿ�¡sÿøßüUghºŸÅE°”ZèÇö»’Kܰ;Ìî\}î·ìð±ü'ÿ�C7‰¿ð¿øÕPÑþ x^ÞÊD—Ä^"F7WZ±iÿ�WÔ‚ ÷&€/6§ñSþh˜èÚþÆà'Ú[nÍë“ÝsŠ5íOâ£é Í@H<ȲÉrÄçÌ\®+=¾ x\øŠ;øH¼Eå GBÿ�emÛ‹©Æ<¾œ5¿ˆ¹Òž(|Eâ)É %«"“ÿ�,ý�t_Ú¿è\ðïþ7ÿ�YÚ.§ñQl%º€ñý®ä’÷,ó;—{ mÀ{Gü, ÿ�ÐÍâoüoþ5T4ˆ·²‘%ñˆ‘ÕÀ–¬Fg`Õõ ‚}É  Í©üTÿ�„š&:ö¿±¸ ö–Û³zäçw\â{Sø¨úD‚ó@Ð2,²\±9óÅëŠÏoˆ>"Žãþ/yBÑпÙ[vâêq/§oâ…ît§ŠxŠG2FBÉjÀ`H¤ÿ�Ë?A@ö¯Åßú<;ÿ�Mÿ�ÅVv‹©üT[ E® <k¹$½Ë¼ÎåÇÞèpÀQÿ� Âô3x›ÿ�ÿ�U â…íì¤I|Eâ$cupà%«†™Øõ}H Ÿrhój?á&‰Ž }¯ìn}¥¶ìÞ¹9Ý×8£^Ôþ*>‘ ¼Ð4ƒÌ‹,—,N|ÅÇñzâ³Ûâ…ψ£¸ÿ�„‹Ä^P´t/öVݸºœcËéÁ£[øá{)â‡Ä^"‘Ì‘²Z°)?òÏÐPEý«ñwþ…Ïÿ�àSñU¢êÂQk hÚîI/rÀï3¹q÷ºÜ°ÂÇðŸý Þ&ÿ�ÀFÿ�ãUCGøá{{)_x‰Ý\8 jÄa¦vý_R'Üš�¼ÚŸÅOøI¢c hkû€Ÿim»7®NwuÎ(×µ?ФH/4  ó"Ë%ËŸ1qü^¸¬öøásâ(î?á"ñ”- ý•·n.§òúphÖþ x^çJx¡ñˆ¤s$d,–¬ŠOü³ôÑjü]ÿ�¡sÿøßüUx>™ªøîÓân¯ý‚“.·5üæîÒÔo„¿˜ÛÁ#h9=zöøXþÿ�¡›Äßøßüj¼§Eø¢|?âÍ_kÞK£]ßÍ7›n+– ä†bWæ8=>¢€>„Ñ$Ö%×,^·µƒR:džtv²@|ÄèHãéÏÔ×W\?…¯mumrÏU±Ô5 »[6B†õ6‘ûÄè6Ï‘èk¸ Š( ÄßñûáÏû ¯þ‰–º çüMÿ�¾ÿ�°ªÿ�è™k  Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+ÅÓ¼]až¤×+oæ³Êc9Æ:Š�Ü®SD¼Ö#³ºKm"¡…îÙóaoô™{m8¬/øRÿ�žÚ¿þ5sšwÃχžDé¯IÄW—14o«e 3ªä×�Pv÷Úçü&·ö,gØ$~Ú:y‰ÎvQâkíq´)Dš,¾l?0½þZ§m•çíà/‡Ä1Û·Ù£¹í…ûáÔœúÅ×€¾[éo-¯ˆZI„‘€¿Û ÜPxÏ¡4êÿ�o×ÿ�èoÿ�ãÿ�ˆ¬Ÿ_k‹¦ÌE‡Û¯Mðý¢L¹ØäWÿ� ïá‡ý ­ÿ�ƒ¥ÿ�£¤xá¼öR=ψ™]\ Û ¿"Ìê§î ÷Îh¾{ísþ[û3ì ¿m<Äç;(ñ5ö¸Ú¢M_6˜^ƒÿ�-S¶ÊóöðÃâíLj[ìÆÑÜ¿öÂýðê�Î} âkÀ_-ô·–×Ä-$ÂHÀ_í…n ¨<gК�õ·ëÿ�ô·ÿ�Àñÿ�ÄVO‡¯µÅÓf ¢ÀÃíׇ&ø~Ñ&GÜìr+Žÿ�…wðÃþ†Vÿ�ÁÒÿ�QÒ<ðÞ{)çÄLŽ.®í…_‘fuSŒ÷P{ç4ß=ö¹ÿ� „-ý‹™ö ß¶Žžbs”xšû\m Q&‹/›Ì/Aÿ�–©Ûeyûx áÀñ vãÄ-öchî_ûa~øu�g>„ñFµà/‡ú[Ëkâ’a$`/ö·Ô3èM�z¿Ûõÿ�ú[ÿ�àxÿ�â+'Ã×Úâé³Ñ`aöëÓ|?h“#îv9Ç»øaÿ�C+àéƨéøo=”sâ&GWö¯ȳ:©Æ{¨=óš�ïžû\ÿ�„ÂþŃÌûƒoÛGO19ÎÊ<M}®6…(“E͇æ ÿ�ËTí²¼ý¼ðàx†;qâû1´w/ý°¿|:€3ŸBx£ZðË}-åµñ I0’0ûa[‚êô&€=_íúÿ�ý�­ÿ�ð<ñ“áëíqtÙ‚h°0ûuáɾŸ´I‘÷;Šã¿á]ü0ÿ�¡•¿ðt¿ãTt�ü7žÊG¹ñ#‹«„ûaWäYTã=ÔžùÍ�wÏ}®Âa bÁæ}‚A·í£§˜œçe&¾×B”I¢À‹æÃó ÐåªvÙ^~Þøp<C¸ñ }˜Ú;—þØ_¾@Ï¡<Q­x áž–òÚø…¤˜I ý°­ÁuŒú@¯öýþ€Vÿ�ø?øŠð_ 7…ân¼ÚÎo>¸uk“7÷-Õ¼Öá~L3g˜óØWgÿ� ïá‡ý ­ÿ�ƒ¥ÿ�òí'á–­xŸT3x›LÓô(/æŠ%½çš5r=ÀûÇ �ú*Ê{é|i¼°ŽÐ. @“ù™ýâ²1]=q‹D°×,ô½S[ë{]2EÝöÏ´0ýâu98ú ØWo@Q@ÿ�‰¿ã÷ßö_ý-t^æÆÞñížx÷µ´¢hŽâ6¾ 玼1ëëV(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬?Iâxì#>‹L’óÎ5û6ûm æ·+Ä~(Ó<+eÞ¨ó,2>Å1BÒý@‡Ú~2Ï—ƒ¿ï©ÿ�øªÎÑn>-‹ ~Égá#Úîsæó¿Ï}ý¦íØöÅlÿ�Âæðwüü_ÿ�à¾oþ&¹­7â'…– ƒ&½â ——2ˆá´mН;°ÇîÏb;õ  mqñkþh‰³ðŸÛ>ÆûFgÙåï\ÿ�sœ~´k׎‘ ½³ð˜ƒÌ‹&#>ìù‹·«zã>Õžß<.|EÇü$^"ò…£¡²¶íÅÔã_N ßÄ ÜéO>"ñŽdŒ…’Õ€À‘Iÿ�–~‚€:/´üdÿ�Ÿ/ßSÿ�ñU¢Ü|[ý’ÏÂF?µÜçÌ3çžûú7MÛ±íŠ?ácøOþ†oà#ñª¡£ü@ð½½”‰/ˆ¼DŒn®µb0Ó;þ¯©îM�^k‹_ð“DMŸ„þÙö7Ú3>Ï/zçø³œãõ£^¸ø´t‰ퟄÄdY1÷gÌ]½[×ö¬öøásâ(î?á"ñ”- ý•·n.§òúphÖþ x^çJx¡ñˆ¤s$d,–¬ŠOü³ôÑ}§ã'üùx;þúŸÿ�ЬíãâØ°—ì–~1ý®ç>aŸ;ü÷ßѺnÝlQÿ� Âô3x›ÿ�ÿ�U â…íì¤I|Eâ$cupà%«†™Øõ}H Ÿrhó\|Zÿ�„š"lü'öϱ¾Ñ™öy{×?Åœç­õÇÅ£¤H/lü& ó"Ɉϻ>bíê޸ϵg·Ä ŸGqÿ� ˆ¼¡hè_ì­»qu8Ç—ÓƒF·ñÂ÷:Sň¼E#™#!dµ`0$R埠 ‹í??çËÁß÷Ôÿ�üUgh·Å„¿d³ð‘íw9ó ùßç¾þÓvì{bøXþÿ�¡›Äßøßüj¨hÿ�</oe"Kâ/#«‡-XŒ4ÎÀÿ�«êAû“@šãâ×ü$Ñgá?¶}öŒÏ³ËÞ¹þ,ç8ýh×®>-"A{gá1™LF}ÙóoVõÆ}«=¾ x\øŠ;øH¼Eå GBÿ�emÛ‹©Æ<¾œ5¿ˆ¹Òž(|Eâ)É %«"“ÿ�,ý�t_iøÉÿ�>^ÿ�¾§ÿ�â«;E¸ø¶,%û%Ÿ„Œk¹Ï˜gÎÿ�=÷ôn›·cÛÂÇðŸý Þ&ÿ�ÀFÿ�ãUCGøá{{)_x‰Ý\8 jÄa¦vý_R'Üš�¼×¿á&ˆ›? ý³ìo´f}ž^õÏñg9ÇëF½qñhé Û? ˆ<Ȳb3îϘ»z·®3íYíñÂçÄQÜÂEâ/(Z:û+nÜ]N1åôàÑ­ü@ð½Î”ñCâ/HæHÈY-X Ÿùgè(¢ûOÆOùòðwýõ?ÿ�^¦Ýøî‰ú¿ö�”k7Úá²À_ÌmÀ†ãfs‚ßžkÙÿ�ácøOþ†oà#ñªò­â£è*Õ”Ky.‹u4ÂK}‘\°i Ù\1Áèqõ(è-õ‰5»×â´‹R:džrÚ1hÁó¦úÿ�S]epþ½µÕµË=VÇPÔ.íntÙ ÔÚGï Ú?>G¡®â€1t›ýJ}oU²½¯ °‰¡–Ýp\1h›$îeF2$ ÁŸÆWñ\º,VÛ.§–ÚË16bxï"´f“æùÁiC€6ðÏzÓ“Àº9š9£ûjÈ—iw™/§”Y‡ îUw0Àä~—ßÃ:D’ÞHÖ¤µàÄ¿¾~9Ý”ýÙ,˜%€=Fh½ñ–¡o¤¤é·Ÿm¡sw˜˜¬‰e(ŠEŒnÊ—'*Il ÖŸˆ|VÞÔŠÍc<ÖQiW:„ÍRì"x —Fb^0s‘WåðΑ=¥¬–¤ÃjIˆyÎ ÉË åÃX1!'4ÍgºF¿?©A<®mžÔì»– br ©Àp3ëé@Þ;6¦š¦î/ÞÊæ�"2ÆVØÜe@r)´€q‘ØSÐhº²kZx¼ŽÚku,Wd­=ãfSøÎ> ÐŠÊ le¸[—v¿¸,d˜·nß‘û²TààŽkOKÒ,´h%ŠÉ$i ²4³<Îî@,ä±áTuà�(õQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VŠ<)§xºÂ;=I®V(ßÌg”ÆsŒu¹\¦‰y¬Ggt–ÚD3B5 ݲ5æÂßé2öÚqX_ð¤<'ÿ�=µüjç4<‰Òÿ�^’ ˆ¯.bhßVÊgUÈ'®� íïµÏøL!oìX<ϰH6ý´tóœì£Ä×ÚãhR‰4X|Ø~azüµNÛ+ÏÛÀ_ˆc·!o³Grÿ�Û ÷è9ô'Š5¯|8·ÒÞ[_´“ #¶¸. ñŸBhÕþ߯ÿ�Ð ßÿ�Çÿ�Y>¾×M˜&‹·^›à9ûD™s±È®;þßÃú[ÿ�Kþ5GHðÃyì¤{Ÿ28º¸@?¶~E™ÕN3Ý@9ïœÐ|÷Úçü&·ö,gØ$~Ú:y‰ÎvQâkíq´)Dš,¾l?0½þZ§m•çíà/‡Ä1Û·Ù£¹í…ûáÔœúÅ×€¾[éo-¯ˆZI„‘€¿Û ÜPxÏ¡4êÿ�o×ÿ�èoÿ�ãÿ�ˆ¬Ÿ_k‹¦ÌE‡Û¯Mðý¢L¹ØäWÿ� ïá‡ý ­ÿ�ƒ¥ÿ�£¤xá¼öR=ψ™]\ Û ¿"Ìê§î ÷Îh¾{ísþ[û3ì ¿m<Äç;(ñ5ö¸Ú¢M_6˜^ƒÿ�-S¶ÊóöðÃâíLj[ìÆÑÜ¿öÂýðê�Î} âkÀ_-ô·–×Ä-$ÂHÀ_í…n ¨<gК�õ·ëÿ�ô·ÿ�Àñÿ�ÄVO‡¯µÅÓf ¢ÀÃíׇ&ø~Ñ&GÜìr+Žÿ�…wðÃþ†Vÿ�ÁÒÿ�QÒ<ðÞ{)çÄLŽ.®í…_‘fuSŒ÷P{ç4ß=ö¹ÿ� „-ý‹™ö ß¶Žžbs”xšû\m Q&‹/›Ì/Aÿ�–©Ûeyûx áÀñ vãÄ-öchî_ûa~øu�g>„ñFµà/‡ú[Ëkâ’a$`/ö·Ô3èM�z¿Ûõÿ�ú[ÿ�àxÿ�â+'Ã×Úâé³Ñ`aöëÓ|?h“#îv9Ç»øaÿ�C+àéƨéøo=”sâ&GWö¯ȳ:©Æ{¨=óš�ïžû\ÿ�„ÂþŃÌûƒoÛGO19ÎÊ<M}®6…(“E͇æ ÿ�ËTí²¼ý¼ðàx†;qâû1´w/ý°¿|:€3ŸBx£ZðË}-åµñ I0’0ûa[‚êô&€=_íúÿ�ý�­ÿ�ð<ñà¾o 7ÄÝyµ:Þ}pê×&8oï[«y­Âü˜fÏ1ç°®ÏþßÃú[ÿ�Kþ5åÚOÃ-;Zñ>¨fñ6™§èP_Í2K{Ï4jä{÷Ž=@4ôU”÷ÒøÒ!ya ]:@'ó3ûÄÿ�dbºzâ</‰a®Yéz¦·Ööºd‹»íŸhaûÄêrqô°®Þ€ (¢€ +Ä3ÛÝèK ®‚mIc)Æõò¥8>Ù�þ·@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aø¢OÇað´Zd—›þq¨Ù·Ûi5¹XÞ#ñF™á[(îõG™a‘ö)Šçè š�ä>Óñ“þ|¼ÿ�}Oÿ�ÅVv‹qñlXKöK? þ×sŸ0Ïþ{ïèÝ7nǶ+gþ7ƒ¿çâÿ�ÿ�óñ5Íi¿<,°\5ï@d¼¹”G £lUy݆?v{ß­�[k‹_ð“DMŸ„þÙö7Ú3>Ï/zçø³œãõ£^¸ø´t‰ퟄÄdY1÷gÌ]½[×ö¬öøásâ(î?á"ñ”- ý•·n.§òúphÖþ x^çJx¡ñˆ¤s$d,–¬ŠOü³ôÑ}§ã'üùx;þúŸÿ�ЬíãâØ°—ì–~1ý®ç>aŸ;ü÷ßѺnÝlQÿ� Âô3x›ÿ�ÿ�U â…íì¤I|Eâ$cupà%«†™Øõ}H Ÿrhó\|Zÿ�„š"lü'öϱ¾Ñ™öy{×?Åœç­õÇÅ£¤H/lü& ó"Ɉϻ>bíê޸ϵg·Ä ŸGqÿ� ˆ¼¡hè_ì­»qu8Ç—ÓƒF·ñÂ÷:Sň¼E#™#!dµ`0$R埠 ‹í??çËÁß÷Ôÿ�üUgh·Å„¿d³ð‘íw9ó ùßç¾þÓvì{bøXþÿ�¡›Äßøßüj¨hÿ�</oe"Kâ/#«‡-XŒ4ÎÀÿ�«êAû“@šãâ×ü$Ñgá?¶}öŒÏ³ËÞ¹þ,ç8ýh×®>-"A{gá1™LF}ÙóoVõÆ}«=¾ x\øŠ;øH¼Eå GBÿ�emÛ‹©Æ<¾œ5¿ˆ¹Òž(|Eâ)É %«"“ÿ�,ý�t_iøÉÿ�>^ÿ�¾§ÿ�â«;E¸ø¶,%û%Ÿ„Œk¹Ï˜gÎÿ�=÷ôn›·cÛÂÇðŸý Þ&ÿ�ÀFÿ�ãUCGøá{{)_x‰Ý\8 jÄa¦vý_R'Üš�¼×¿á&ˆ›? ý³ìo´f}ž^õÏñg9ÇëF½qñhé Û? ˆ<Ȳb3îϘ»z·®3íYíñÂçÄQÜÂEâ/(Z:û+nÜ]N1åôàÑ­ü@ð½Î”ñCâ/HæHÈY-X Ÿùgè(¢ûOÆOùòðwýõ?ÿ�YÚ-Çűa/Ù,ü$cû]Î|Ã>wùï¿£tݻأþ?„ÿ�èfñ7þ7ÿ�ª?Ä ÛÙH’ø‹ÄHÆêáÀKV# 3°?êúA>äÐæ¸øµÿ� 4DÙøOíŸc}£3ìò÷®‹9Î?Z5ë‹GH^ÙøLAæE“Ÿv|ÅÛÕ½qŸjÏoˆ>"Žãþ/yBÑпÙ[vâêq/§oâ…ît§ŠxŠG2FBÉjÀ`H¤ÿ�Ë?A@Ú~2Ï—ƒ¿ï©ÿ�øªð}6ïÇpüOÕÿ�°£\{ù¾× &þcn73œüó^Ïÿ� Âô3x›ÿ�ÿ�W•hß@ñV¬¢[Ét[«ù¦[ìŠåƒHHvÊáŽC¨é@Ah¬I­Ø6¿¤Z‘Ó$ó–Ñ‹F˜3ÿ�×úšë+‡ðµí®­®Yê¶:†¡wks¦ÈPÞ¦Ò?xÑùò= w�QEÏø›þ?|9ÿ�aUÿ�Ñ2×A\ÿ�‰¿ã÷ßö_ý-t�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEaø£Âšw‹¬#³ÔšåbüÁöyLg8ÇQ@•Êh—šÄvwIm¤C4#P½Û#^l-þ“/m§…ÿ� CÂóÛWÿ�Àæ®sNøyðóÈ/õé ¸Šòæ&õ`Œ¡&u\‚zà �îÞû\ÿ�„ÂþŃÌûƒoÛGO19ÎÊ<M}®6…(“E͇æ ÿ�ËTí²¼ý¼ðàx†;qâû1´w/ý°¿|:€3ŸBx£ZðË}-åµñ I0’0ûa[‚êô&€=_íúÿ�ý�­ÿ�ð<ñ“áëíqtÙ‚h°0ûuáɾŸ´I‘÷;Šã¿á]ü0ÿ�¡•¿ðt¿ãTt�ü7žÊG¹ñ#‹«„ûaWäYTã=ÔžùÍ�wÏ}®Âa bÁæ}‚A·í£§˜œçe&¾×B”I¢À‹æÃó ÐåªvÙ^~Þøp<C¸ñ }˜Ú;—þØ_¾@Ï¡<Q­x áž–òÚø…¤˜I ý°­ÁuŒú@¯öýþ€Vÿ�ø?øŠÉðõö¸ºlÁ4X}ºðäßÏÚ$ÈûŽEqßð®þÐÊßø:_ñª:G€~Ïe#Üø‰‘ÅÕÂý°«ò,ΪqžêÏ|æ€;ç¾×?á0…¿±`ó>Á ÛöÑÓÌNs²_k¡J$Ñ`Eóaù…è?òÕ;l¯?o|8!ŽÜx…¾ÌmËÿ�l/ß  çО(Ö¼ðâßKym|BÒL$ŒþØV຃Æ}  Wû~¿ÿ�@+üüEdøzû\]6`š, >Ýxro€çíd}ÎÇ"¸ïøW ?èeoü/øÕ#À? 粑î|DÈâêá�þØUùgU8Ïu�ç¾s@óßkŸð˜Bߨ°yŸ`mûhéæ'9ÙG‰¯µÆÐ¥h°"ù°üÂôùj¶WŸ·€¾Çn<Bßf6Žåÿ�¶ï‡PsèOk^øqo¥¼¶¾!i&Fÿ�l+p]Aã>„Ыý¿_ÿ� ¿þþ"²|=}®.›0Mn¼97Àsö‰2>çc‘\wü+¿†ô2·þ—üjŽ‘à†óÙH÷>"dqup€l*ü‹3ªœgº€sß9 ùïµÏøL!oìX<ϰH6ý´tóœì£Ä×ÚãhR‰4X|Ø~azüµNÛ+ÏÛÀ_ˆc·!o³Grÿ�Û ÷è9ô'Š5¯|8·ÒÞ[_´“ #¶¸. ñŸBhÕþ߯ÿ�Ð ßÿ�Çÿ�^áɼ'ÿ� ;_msM‚mhê×&8ïï[+y­Âü˜f˜óÆk¶ÿ�…wðÃþ†Vÿ�ÁÒÿ�yŽ‹ðÇIÖ¼OªµÏ‰ôÍ?B·¾š(K^Æ÷F²0 ñÌÝz€A ¡ì§¾›Æq}²Â;P4çÙåÏæg÷‰þÈÅtõÄx^O×lô½PŽêÚ×Luo>ÐËûÄêrqô‚»z�(¢Š�çüMÿ�¾ÿ�°ªÿ�è™k ®ÄßñûáÏû ¯þ‰–º �(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+Åxž;Ï…¢Ó$¼ßó@¾Í¾ÛH9­ÊÃñGŠôïØGy©-ËE#ùcìñqž‚€9?´üdÿ�Ÿ/ßSÿ�ñU¢Ü|[ý’ÏÂF?µÜçÌ3çžûú7MÛ±íŠÑÿ�…ßá?ùã«ÿ�à W5§|LðÚCp_Rñ4&KË™Dp[ ŠgaŒ©ìF}ó@mqñkþh‰³ðŸÛ>ÆûFgÙåï\ÿ�sœ~´k׎‘ ½³ð˜ƒÌ‹&#>ìù‹·«zã>Õß<8|CÏö·Š|±jÑ–û8ß’êq½8£Zø‘áË­-â‹VñK9’3‰mÀ^IþAùÐSöŸŒŸóåàïûêþ*³´[‹bÂ_²YøHÇö»œù†|ïóßFé»v=±U¿áhxcþƒ-ÿ�Àaÿ�ÄU#âO‡-¬äI5o««‡;`Fg`~ï\O¾hY®>-ÂM6~ûgØßhÌû<½ëŸâÎsÖzãâÑÒ$¶~y‘dÄgÝŸ1võo\gÚ²âG‡ˆc¹þÖñO–-Z2ßgò]N1·§k_<9u¥¼QjÞ)g2Fq-¸ é?Ãè?:�ê~Óñ“þ|¼ÿ�}Oÿ�ÅVv‹qñlXKöK? þ×sŸ0Ïþ{ïèÝ7nǶ*·ü- ÐcÅ¿ø ?øŠ£¤|Ið嵜‰&­â•cupàGlÃLìÝë‚ ÷Í�k5ÇůøI¢&ÏÂlûíŸg—½süYÎqúѯ\|Z:D‚öÏÂb2,˜Œû³æ.Þ­ëŒûVC|Hðáñ w?ÚÞ)òÅ«F[ìã~K©Æ6ôâkâG‡.´·Š-[Å,æHÎ%·xu'ø}ç@OÚ~2Ï—ƒ¿ï©ÿ�øªÎÑn>-‹ ~Égá#Úîsæó¿Ï}ý¦íØöÅVÿ�…¡áú x·ÿ�‡ÿ�Tt‰>¶³‘$Õ¼R¬n®íiû½pA>ù  f¸øµÿ� 4DÙøOíŸc}£3ìò÷®‹9Î?Z5ë‹GH^ÙøLAæE“Ÿv|ÅÛÕ½qŸjÈo‰>!Žçû[Å>XµhË}œoÉu8ÆÞœQ­|HðåÖ–ñE«x¥œÉĶà/¤ÿ� üè©ûOÆOùòðwýõ?ÿ�YÚ-Çűa/Ù,ü$cû]Î|Ã>wùï¿£tÝ»تßð´<1ÿ�Aÿ�à0ÿ�â*Ž‘ñ'ÖÖr$š·ŠUÕð# 3°?w®'ß4¬×¿á&ˆ›? ý³ìo´f}ž^õÏñg9ÇëF½qñhé Û? ˆ<Ȳb3îϘ»z·®3íY ñ#ÇÄ1Üÿ�kx§Ë­o³ù.§ÛÓŠ5¯‰ºÒÞ(µo³™#8–ÜáÔŸáô�u?iøÉÿ�>^ÿ�¾§ÿ�â«Á´áã¦ø¡«¶€³ {íó}¯ì9òCù»vî<½ÙÆþ:W¯ÿ�ÂÐðÇý<[ÿ�€Ãÿ�ˆ¯0Ò>+\è>'ÔÂË{&‰s4ÿ�ºÙÎÉ Çi Ø<ƒôÈ ¡´S¬sOþÞƒSþÌ“Ïû!o/>btÏ5Õ×ákËmW\³Õ,ïu+›{2FA~›xÑùŒƒØ×q@Q@ÿ�‰¿ã÷ßö_ý-tÏø›þ?|9ÿ�aUÿ�Ñ2×A@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VŠ<)§xºÂ;=I®V(ßÌg”ÆsŒu¹\¦‰y¬Ggt–ÚD3B5 ݲ5æÂßé2öÚqX_ð¤<'ÿ�=µüjç4<‰Òÿ�^’ ˆ¯.bhßVÊgUÈ'®� íïµÏøL!oìX<ϰH6ý´tóœì£Ä×ÚãhR‰4X|Ø~azüµNÛ+ÏÛÀ_ˆc·!o³Grÿ�Û ÷è9ô'Š5¯|8·ÒÞ[_´“ #¶¸. ñŸBhÕþ߯ÿ�Ð ßÿ�Çÿ�Y>¾×M˜&‹·^›à9ûD™s±È®;þßÃú[ÿ�Kþ5GHðÃyì¤{Ÿ28º¸@?¶~E™ÕN3Ý@9ïœÐ|÷Úçü&·ö,gØ$~Ú:y‰ÎvQâkíq´)Dš,¾l?0½þZ§m•çíà/‡Ä1Û·Ù£¹í…ûáÔœúÅ×€¾[éo-¯ˆZI„‘€¿Û ÜPxÏ¡4êÿ�o×ÿ�èoÿ�ãÿ�ˆ¬Ÿ_k‹¦ÌE‡Û¯Mðý¢L¹ØäWÿ� ïá‡ý ­ÿ�ƒ¥ÿ�£¤xá¼öR=ψ™]\ Û ¿"Ìê§î ÷Îh¾{ísþ[û3ì ¿m<Äç;(ñ5ö¸Ú¢M_6˜^ƒÿ�-S¶ÊóöðÃâíLj[ìÆÑÜ¿öÂýðê�Î} âkÀ_-ô·–×Ä-$ÂHÀ_í…n ¨<gК�õ·ëÿ�ô·ÿ�Àñÿ�ÄVO‡¯µÅÓf ¢ÀÃíׇ&ø~Ñ&GÜìr+Žÿ�…wðÃþ†Vÿ�ÁÒÿ�QÒ<ðÞ{)çÄLŽ.®í…_‘fuSŒ÷P{ç4ß=ö¹ÿ� „-ý‹™ö ß¶Žžbs”xšû\m Q&‹/›Ì/Aÿ�–©Ûeyûx áÀñ vãÄ-öchî_ûa~øu�g>„ñFµà/‡ú[Ëkâ’a$`/ö·Ô3èM�z¿Ûõÿ�ú[ÿ�àxÿ�â+'Ã×Úâé³Ñ`aöëÓ|?h“#îv9Ç»øaÿ�C+àéƨéøo=”sâ&GWö¯ȳ:©Æ{¨=óš�ïžû\ÿ�„ÂþŃÌûƒoÛGO19ÎÊ<M}®6…(“E͇æ ÿ�ËTí²¼ý¼ðàx†;qâû1´w/ý°¿|:€3ŸBx£ZðË}-åµñ I0’0ûa[‚êô&€=_íúÿ�ý�­ÿ�ð<ñá½ð”_uïí}&ÞMyµ[’ŸÚ€[«[„ÊmÜ=[¿Jì?á]ü0ÿ�¡•¿ðt¿ã^c¢ü1Òu¯ê­sâ}3OЭ力×±½ÄѬŒ<dó7^ hè‹;‹ùüi½±ŽÛt›v\y›¿xžÃÓWáxt?]³Òô B;«k]1Ôm¼ûC/ï©ÉÇÐ`z íè�¢Š(Ÿñ7ü~øsþ«ÿ�¢e®‚¹ÿ�Çï‡?ì*¿ú&Zè(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬?Iâxì#>‹L’óÎ5û6ûm æ·+Å+Ó¼#a椷-å³Äd9Æz �äþÓñ“þ|¼ÿ�}Oÿ�ÅVv‹qñlXKöK? þ×sŸ0Ïþ{ïèÝ7nǶ+Gþ„ÿ�环ÿ�€-\Öñ3Ãi Á}KÄЙ/.eÁl6(y†2§±÷Í�iµÇůøI¢&ÏÂlûíŸg—½süYÎqúѯ\|Z:D‚öÏÂb2,˜Œû³æ.Þ­ëŒûVC|Hðáñ w?ÚÞ)òÅ«F[ìã~K©Æ6ôâkâG‡.´·Š-[Å,æHÎ%·xu'ø}ç@OÚ~2Ï—ƒ¿ï©ÿ�øªÎÑn>-‹ ~Égá#Úîsæó¿Ï}ý¦íØöÅVÿ�…¡áú x·ÿ�‡ÿ�Tt‰>¶³‘$Õ¼R¬n®íiû½pA>ù  f¸øµÿ� 4DÙøOíŸc}£3ìò÷®‹9Î?Z5ë‹GH^ÙøLAæE“Ÿv|ÅÛÕ½qŸjÈo‰>!Žçû[Å>XµhË}œoÉu8ÆÞœQ­|HðåÖ–ñE«x¥œÉĶà/¤ÿ� üè©ûOÆOùòðwýõ?ÿ�YÚ-Çűa/Ù,ü$cû]Î|Ã>wùï¿£tÝ»تßð´<1ÿ�Aÿ�à0ÿ�â*Ž‘ñ'ÖÖr$š·ŠUÕð# 3°?w®'ß4¬×¿á&ˆ›? ý³ìo´f}ž^õÏñg9ÇëF½qñhé Û? ˆ<Ȳb3îϘ»z·®3íY ñ#ÇÄ1Üÿ�kx§Ë­o³ù.§ÛÓŠ5¯‰ºÒÞ(µo³™#8–ÜáÔŸáô�u?iøÉÿ�>^ÿ�¾§ÿ�â«;E¸ø¶,%û%Ÿ„Œk¹Ï˜gÎÿ�=÷ôn›·cÛ[þ‡†?è1âßüüEQÒ>$ørÚÎD“VñJ±º¸p#¶a¦vîõÁûæ€5šãâ×ü$Ñgá?¶}öŒÏ³ËÞ¹þ,ç8ýh×®>-"A{gá1™LF}ÙóoVõÆ}«!¾$xpø†;ŸíoùbÕ£-öq¿%ÔãzqFµñ#×Z[Å­â–s$gÛ€¼:“ü>ƒó §í??çËÁß÷Ôÿ�üUgh·Å„¿d³ð‘íw9ó ùßç¾þÓvì{b«ÂÐðÇý<[ÿ�€Ãÿ�ˆª:GÄŸ[YÈ’jÞ)V7WvÀŒ4ÎÀýÞ¸ Ÿ|г\|Zÿ�„š"lü'öϱ¾Ñ™öy{×?Åœç­õÇÅ£¤H/lü& ó"Ɉϻ>bíê޸ϵd7ÄÇsý­âŸ,Z´e¾Î7亜coN(Ö¾$xrëKx¢Õ¼RÎdŒâ[p‡R‡Ð~tÔý§ã'üùx;þúŸÿ�НÓ‡Ž›â†®ÚÌ5ï·Íö¿°çÉæ6íÛ¸ò÷gøé^¿ÿ� CÃôñoþþ"¼ÃHø­s øŸS -ìš%ÍüÓþëdW8g$3¤3`òÓ"€>†ÑN°uÍ?ûxZ Oû2O?ì…¼¼ù‰Ó<×W\?…¯-µ]rÏT³½Ô®mîtÉúleýâtGæ2c]Å�QE�sþ&ÿ�ߨUôLµÐW5â{›q¨hgˆ4z¢—ÆTy2ò}:ŠèÑÖDŒOB§ Ш¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+šÓ޽§Cqnº42!¼¹•Þ…,¯3ºœm8á‡zéh Y›ÄGÄ1ßÿ�aÁå­£C·Ž¥Ôÿ�sÚi¼E¨iom‡�f’6ÿ�ñü.¬ƒÚºš(íúÿ�ý�­ÿ�ð<ñCHXÙI èp×WÇøèó;àôa]EË3xˆø†;ÿ�ì8<µ´hqöñÔºŸî{Q­7ˆµ -í£Ðà ÒFßñþ?…Õð{WSE�c}¿_ÿ� ¿þþ"¨iâ+)!}Zêâoøÿ�gqüŒ+¨¢€9foÇý‡–¶>Þ:—SýÏj5¦ñ¡¥½´zšHÛþ?Çðº±þjêh  o·ëÿ�ô·ÿ�Àñÿ�ÄU !üEce$/¡ÀK]\Mÿ�ã£Ìî?ƒÑ…uP,Íâ#âïÿ�°àòÖÑ¡ÇÛÇRê¹íF´Þ"Ô4·¶C€3IÇøþV?Áí]Möýþ€Vÿ�ø?øŠ¡¤?ˆ¬l¤…ô8 k«‰¿ãütyÇðz0®¢Š�噼D|Cÿ�öZÚ48ûxê]O÷=¨Ö›ÄZ†–öÑèpi#oøÿ�ÂêÇø=«©¢€1¾ß¯ÿ�Ð ßÿ�Çÿ�^}¢|5~"Ô¼C¨øfÞÿ�Q»¾žåÅò´p†‘™v¦Ì‚99?Jõª(Ê=VãÄË{{§ÇkY´A’àI–.§¦8·è¢€ (¢€<oâ§ÂY<WâÍ'UÓËûT«o©²ÿ� ‘/Ô(ÛõÙï^¹ceo¦Ø[ØÚF"¶·b‰EUòbŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform11.jpg������������������������������������������0000664�0000000�0000000�00000043503�15030617045�0023355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ� "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +/è““Es3Ç"†F[YH`y|´ÁãM®ZØ^HgUÜcû4»€õÆÞ”¿Eq~!ø¥á¯ %³^½ë †*ž]£ñŒg;€õíšÅÿ�…óà¿ïj_øÆ€=:ŠóñëÁDd6¥úô?ãGü/¯gµ/ü?ã@Eyü/¯­©à!ÿ�?á|ø/ûÚ—þñ N¢¼Ä|zðQ ©cþ½øÑÿ� ëÁYÆíKÿ�øÐ§Q^cÿ� ëÁC«j_øÆø_> þö¥ÿ�€‡ühÓ¨¯1¼FCjXÿ�¯Cþ4ÂúðVq»Rÿ�ÀCþ4éÔW˜ÿ�ÂúðPêÚ—þñ£þÏ‚ÿ�½©à!ÿ��ôê+ÌGǯÚ–?ëÐÿ�𾼜nÔ¿ðÿ��zuæ?ð¾¼:¶¥ÿ�€‡ühÿ�…óà¿ïj_øÆ€=:ŠóñëÁDd6¥úô?ã]7ƒü}¢xàÞ® ²Ùç ¢Ùû±_ºh¨¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š†îòÚÂÒK«Ëˆ­í⤖W ª=I=(jdÓEo M<©J2Îì©5çüCÖ<S<–_tµÆ­²Mbøíc=öŽ®~Ÿ‘[ü'þØ™o<u®Þø‚à‹`æ XÏû(¸üøÏq@¯Åÿ�é—?eMPßÝg>6œ“è|¿­g¯ÄÏjCv‡ðç[¸¾ä—®¶ ûòýk¹Ò4 #@¶úN›meq aIúž§ñ­�ó•×þ)Ë"ãÁZ\ÝDšŠ¹_®4ßøH¾*[*¤¾Ó-õ$=0íœûûפQ@oÿ� WÅú&öÿ�ø8‡ühÿ�„«â‡ý{üCþ5éP›ÿ�ÂUñCþ‰½¿þ!ÿ�?á*ø¡ÿ�DÞßÿ�ÿ�zEæÿ�ð•|Pÿ�¢ooÿ�ƒˆÆøJ¾(Ñ7·ÿ�ÁÄ?ã^‘E�y¿ü%_?è›Ûÿ�àâñ£þ¯ŠôMíÿ�ðqø×¤Q@oÿ� WÅú&öÿ�ø8‡ühÿ�„«â‡ý{üCþ5éP›ÿ�ÂUñCþ‰½¿þ!ÿ�?á*ø¡ÿ�DÞßÿ�ÿ�zEäÚ‰¾$ÅáÍ.;_‡ÐOn–‘,RZó Ã`ž20q^OñW^ñRøÊËQÔ´ÖÐ5bÌ"Þñdo®ä<}+èO xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À³Ç<=©øÊú{û[›™¬â€ÛÉ-ôìÑ–ß’¾{Ê€<gXñ‹õû_Kâ­;È xÿ�f»dòÞä¹%;cŽ@�ç§Ñ×gñáöŸ­OáÔþÐÕmØß˜C‹Ù%*6l1›1ŽžµSþ]§ý þ#ÿ�À‘þÅé?ò±ÿ�¯xÿ�ôIü…o?Üÿ�f®—Cø-káý6ðø«Ä‹X¥1Çp®äŽƒ4–¿íe×5 Câ­}DÂÁÅÀÜÛ·uã¶?Z�æ5?õúwý}ýëB´õŸƒ6¶WBëò}ªø@KÜS1ÈÛ—Ž¿.?Z¿ð¢í?èoñþð /Iÿ�=ý{Çÿ� ŠH?ä+yþäû5tºÁk[ÿ�é·‡Å^ ˆÜZÅ)Ž;€w 8t¤µø/k.¹¨Zkê Ž.æÝ»¯±úÐ1©ÿ�¯Ó¿ëìèZ§¬üµ²¸Òx§_“íWÂ^à™ŽFܼuùqøšÕÿ�…iÿ�Cˆÿ�ð$…�qzOüìëÞ?ýRAÿ�![Ï÷#ÿ�Ù«¥Ðþ ZßøM¼>*ñFâÖ)LqÜ�«¹Àã Í%¯Á{YuÍBÐø«_Qp°qp76íÝxíÖ€9Oý~ÿ�_cÿ�@zЭ=gàÍ­•ƃÅ:üŸj¾÷�”Ìr6åã¯ËÄÖ¯ü(»OúüGÿ�#ü(‹Òäcÿ�^ñÿ�è"’ù Þ¹þÍ].‡ðZÖÿ�ÃúmáñWˆ"7±JcŽà]Èi-~ ÚË®j‡ÅZúˆ#…ƒ‹¹·nëÇl~´ÌjëôïúûúÖ…ië?ml®4„)×äûUð€—¸¦c‘·/~\~&µáEÚÐßâ?ü á@^“ÿ� {ú÷ÿ�AÔ|ÿ�‘¯ÇïÙÿ�è2ÔzÁk[ÿ�é·‡Å^ ˆÜZÅ)Ž;€w 8t®£áç‚íü¯øŠÞ û»Óp–®Ò]_'q×­�zQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@T7wvös]ÝJ±[À†I$c¨$þâoéžÑ&ÕuI¶C¢༭Ùwcþx®Mð®¯ñ&æ-wÆë-¦’}Ž‚ŒTìó¤ŸOä8¥ðž—?Ä_'ŽõØÝtÛweÐôù>ê 8óœx‘‘ôÏ@µê´µ´vÑÛZÃF»R8Ô*¨ô�t©h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9 ?ˆÿ�áѼ¨4£Ø`ÚZiÇ–¸ÏËÖ’ÅüEÿ� >¯¶ /Ìò­÷4˜èøÇËõ¥ðljô¨¼'£FóN,`S‹YO"5î’ÇÄÚRøŸWË>׊ÜôY{Ïh?ˆ~Ù yi`ÿ�i®Í³I÷¼©zü½1šÝßâoù÷Ò?ïüŸüEax‹Äº\·šIg!55fͬ£*QýÞzÖïü%ZGüö¸ÿ�ÀI¿øš�ÉðÃøþ=ʃJ1ý† ¥¦ycùzÒX¿ˆ¿á'ÕöÁ¥ùžU¾àf“ù~´¾ñ6•„ôhÞiÃ%Œ qk)äF;…¤±ñ6”¾'Õä2ϵâ·ý^ÁóÆÚ�‡ÄOâ¶hdX?Úk³lÒ}ï*^¿/Lf·wø›þ}ôûÿ�'ÿ�X^"ñ.—-æ€RYÈMMY³k(ãÊ”wžµ»ÿ� V‘ÿ�=®?ðoþ&€2|0þ#ÿ�„OFò ÒŒaƒii¤XÆ~^´–/â/øIõ}°i~g•o¸¤ÇGÆ>_­/†<M¥Eá=7špÉcœZÊyŽái,|M¥/‰õy ³íx­Àÿ�E—°|ñ¶€!ñø‡íš™–öšìÛ4Ÿ{Ê—¯ËÓ­Ýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄVˆ¼K¥Ëy –rSVlÚÊ8ò¥Ýç­nÿ�ÂU¤Ïkü›ÿ�‰  Ÿ ?ˆÿ�áѼ¨4£Ø`ÚZiÇ–1Ÿ—­%‹ø‹þ}_l_™å[îi1Ññ—ëKáiQxOFæœ2XÀ§²žDc¸ZKiKâ}^C,û^+p?Ñeì<m |Dþ!ûfæA¥ƒý¦»6Í'Þò¥ëòôÆkw‰¿çßHÿ�¿òñ…â/érÞh%œ„ÔÕ›6²Ž<©G÷yë[¿ð•ióÚãÿ�&ÿ�âh'Ãâ?øDôo* (Çö6–š@qåŒgåëIbþ"ÿ�„ŸWÛ—æyVûšLt|cåúÒøcÄÚT^Ñ£y§ –0)Ŭ§‘î’ÇÄÚRøŸWË>׊ÜôY{Ïh?ˆ~Ù yi`ÿ�i®Í³I÷¼©zü½1šÝßâoù÷Ò?ïüŸüEax‹Äº\·šIg!55fͬ£*QýÞzÖïü%ZGüö¸ÿ�ÀI¿øš�ÉðÃøþ=ʃJ1ý† ¥¦ycùzÕÍßk_oKu—˶À·feÆÔjŸ†<M¥Eá=7špÉcœZÊyŽájæ…¨[j>$Ö¦¶gdÛ)-!γ�h£¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯6ø™5Æ¿«è~³‘j®n5 ªZÆrGü‚?à8ï^“^máãý§ñÓÅ·Œ7®™cmeáÞ7?Ôè–¶ÐYZCkmÅ(#Ž4  `튖Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(#Ÿò'höƒÿ�E­6ÃþF½gþ¸Û)+/ò—Âz4>¦¬`bT¹QÌkÐ 0°¦ØøzɼO«¡ŸSÂÅnAÈ<‡ê|ÌŸÆ€/ø›þ?|9ÿ�aUÿ�Ñ2×A\_ˆ¼?eç‡ÂÍ©úš©Ý©Ü·T§ŒÉÁã¨æ·á±ÿ�žú¯þ ®¿øå�ÿ�‘;Cÿ�°|ú-i¶ò5ë?õÆÛùIY~ðõ”¾Ѥiõ0Ícº¥ÊŽc^€I€=…6ÇÃÖMâ}] úž+rÔîAä?Sædþ4ÄßñûáÏû ¯þ‰–º âüEáû(ï<>mHïÔÕNíNå¸ò¥<fNG5»ÿ�Õü÷Õðmuÿ�Ç(�ð§ü‰Úýƒàÿ�ÑkM°ÿ�‘¯Yÿ�®6ßÊJËðLJ¬¥ðž#O©†k…Õ.TsôLì)¶>²oêègÔð±[F§r!úŸ3'ñ  þ&ÿ�ߨUôLµÐWâ/ÙGyáð³jG~¦ªwjw-Ç•)ã2pxê9­ßøF¬羫ÿ�ƒk¯þ9@…?äNÐÿ�ìþ‹Zm‡üzÏýq¶þRV_†<=e/„ôi}L3XÀÄ.©r£˜× `aM±ðõ“xŸWC>§…ŠÜ‚5;yÔù™?�_ñ7ü~øsþ«ÿ�¢e®‚¸¿x~Ê;Ï…›R;õ5S»S¹n<©O“ƒÇQÍnÿ�Â5cÿ�=õ_ü]ñÊ�<)ÿ�"v‡ÿ�`ø?ôZÓl?äkÖë·ò’²ü1áë)|'£HÓêašÆ!uK•ƽ�“�{ m‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühÿ�‰¿ã÷ßö_ý-tÅø‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žkwþ«ùïªÿ�àÚëÿ�ŽPáOù´?ûÁÿ�¢Ö›aÿ�#^³ÿ�\m¿”•—áYKá=FŸS Ö01 ª\¨æ5è˜ØU½Ê+ëQB÷ ¦;c™î$™º?w$þÑQE�QE�QE�QE�QE�QE�QEfëÚ£éCÝEšs$PC6ÐÒK"Æ™=†çö  *+“Ýø{P[OÍjé<>t6²ŽD‘Æc1åØÓFœô-×Ä/ ØÇ`÷zº[ý¾FŽÝeŠEbÊå2•Êap"€:z+7U×ltw‚;¯´´³î1Çok$ìBãqÂ)À†IÀäVm·ü+w.©Õ»6”¥ï8`#PpNHà ñòçž(¤¢¸¨þ#è·W–Vz”h·6—.dXd2ùÑI„UûÄ‘1ùväà[ú–½i¦¦Ÿ=Ä­½Ó>ZH!V% ƒ‚‡jÈ?tŒdä�kQTtíZßT³{«xî–5b¸¸µ’8�ä#¨b9ô汿áax\i7¤š™ŠÎâ•äšÚXò’gËe  ¸m­‚ ô>”ÓÖfáý7IÔõ-BÎÎ¥"ÉtÆFmì €pOz È_‰>{«a¯Zù·ÑyиœòN0½ Aâ›cã{ ­KZwŸÉÒtë+k“=Å´°024ÛÎåÄhA'“@eÃj¿ôøD/u}ýof[Y¥·T´š@Çšª¹w`e¶Žz×E­øŠÏ@ŸNKÑ(KéÌU™bÄl圀p0‡$ô'…$�kÑYZ_ˆôÍbáíí&—ÎDysÛI2ê$UÜ¿í ŽG5¢xÊ}SR&]ÐY˨Oco i“+±‰e$ùŒÀ|–8 òà©äðÚQX6^3Ð5 ‹è/\[ÛÃîòÛËc“;C¨,i�®rF4ÏxkC\ŸdŸf±½0D ¤±JTA‡tn7îÜì: €0=@:+ŠÒ> Ùê”q,wÖ6W{¬å $žIcÛ#c�D ÇhmÜÙÑüaáýT½Ó4½N+›Ë#‰ã@Ão8à‘†ã#4¹EPEPEPEPEPEP!á‡ñü"z7•”cû KM 8ò×ùzÒX¿ˆ¿á'ÕöÁ¥ùžU¾àf“ù~´¾ñ>•„ôhÞiÃ%Œ qk)äF½ÂÒXø›J_êògÚñ[þ‹/`ùãm�Câ'ñÛ42 ,í5Ù¶i>÷•/_—¦3[»üMÿ�>úGýÿ�“ÿ�ˆ¬/x—K–ó@),ä&¦¬Ùµ”qåJ?»ÏZÝÿ�„«Hÿ�ž×ø 7ÿ�@>ÿ�Â'£yPiF?°Á´´Ò,c?/ZKñü$ú¾Ø4¿3Ê·Ü Òc£ã/Ö—Ã&Ò¢ðžÍ8d±N-e<ˆÇp´–>&Ò—Äú¼†Yö¼Và¢ËØ>xÛ@ø‰üCöÍ̃KûMvmšO½åK×åéŒÖîÿ�Ͼ‘ÿ�äÿ�â+ Ä^%Òå¼Ð K9 ©«6meyRîóÖ·á*Ò?çµÇþMÿ�ÄÐO†Äð‰èÞTQì0m-4€ãËÏËÖ’ÅüEÿ� >¯¶ /Ìò­÷4˜èøÇËõ¥ðlj´¨¼'£FóN,`S‹YO"1Ü-%‰´¥ñ>¯!–}¯¸è²öž6Ð>"ý³@ó ÒÁþÓ]›f“ïyRõùzc5»¿Äßóï¤ßù?øŠÂñ‰t¹o4’ÎBjjÍ›YGT£û¼õ­ßøJ´ùíqÿ�€“ñ4“á‡ñü"z7•”cû KM 8òÆ3òõ¤±ÂO«íƒKó<«}ÀÍ&:>1òýi|1âm*/ èѼӆKâÖSÈŒw Icâm)|O«ÈeŸkÅnú,½ƒç´ˆŸÄ?lÐ<È4°´×fÙ¤ûÞT½~^˜Ínïñ7üûé÷þOþ"°¼Eâ].[Í�¤³šš³fÖQÇ•(þï=kwþ­#þ{\à$ßüM�døaüGÿ�žåA¥þÃÒÓH<±Œü½i,_Ä_ð“êû`ÒüÏ*ßp3IŽŒ|¿Z_ x›J‹Âz4o4á’Æ8µ”ò#ÂÒXø›J_êògÚñ[þ‹/`ùãm�Câ'ñÛ42 ,í5Ù¶i>÷•/_—¦3[»üMÿ�>úGýÿ�“ÿ�ˆ¬/x—K–ó@),ä&¦¬Ùµ”qåJ?»ÏZÝÿ�„«Hÿ�ž×ø 7ÿ�@>ÿ�Â'£yPiF?°Á´´Ò,c?/Z¹¡ãâMkíén²ùvØì̸ÃúÍSðlj´¨¼'£FóN,`S‹YO"1Ü-\е mGÄšÔÖÌì‚;e%£d9Ãö` �ttQE�QE�QE�QE�QE�QE�WRÓ­µm>k´-  gk ‚ Ž„=ˆ«U™­ßÞéö‘=…œ7SÉ(Œ,×Q‚rHVcÓ¢©<ö�‘qàxo=Ö·«Ot²BËt혋‹" =¡w¢1ùrvŒ“Kgàˆl%ó Öµe•žV•ÃÄ Ë$+#b>÷r á†ãƒŒb¶Ÿâ­Rkmvy­ôÉ>Ës6kël—|HFáÈýæA‰ÉàVóÇWóøoPÔ4Í:Ý aZ{“•Ç+Ú䩈÷�ät £YÑŽ²§ö•õŒ’~ÈÈ ƒêYXƒèˆˆªø:Ñ4Û5µ Eì¤`¤P-~`ÃË!AÈ`,[Àã"©ÞÙÙjó=…¼—–ú­­‰…o_Ë-2[�C•8�ÍÙFv“€I¬ýGâ=Ý–›é¡Â÷ºóQïŠF^ Œ&8äòÎ÷fU*¤‚;ñ@—ž÷v÷w$ÖÚâd…$ �#yRX~ëålÇÝÀù:rÛ´u?U4¯3XÔa—N1f„ÄW1´eŸ1‘’®ÿ�t/Þ8Æ3üY«I£Â?¨\™#Xîf{¨m¤,VÊæF@8ßó # rªMã«ÛKû 6ëI³º¢îÓü­K|.1“æÉåƒÇL+†<h£ÓtvÓtÙ­§{pò–o´MåïB@(T1Œãn3’rIίë;D„G­jûíí­í­ä-èV þY\E‚@’@wdÇ ñ‹ƒÅ1kºN—schø´rµ½á”Á(I_n<±‘ˆ$ƒ“÷N ¬|shâ}VÎÜÚ„Q.›ʽ†Ý7ä2rÄKq¸¨�ß›Áv·éfÔõ7‚ú/*ú*íºà®ç!wƒŒ!Q€01RÝxNÞöâökBúF»´ŠÖA˜×S³Ç"€‡Vv=qÏNfMã-V J-!´[#ªÉ:E°jDÁµâšUo3ÊÎq‚¥SÈ5}¼Y¿ÃZ©mf­>²!ÐÍ?–ˆòFdäÁÀHÈRIÀš�'ðu½Õž£Ω¨Í.£fl®î£ß$xp8 µHóT}âNMZÖ¼5k¯éö–z…ÅË­»–. ›1<NåÆ$pv׌q\³ë:·ˆ|e¦iMl–°Ú›“:¤‰ºH; <h ŠuùNÐİ`6sÓ_x‰¬üU¦èâÚ)"½c™g;â.I�)·+çp<ô<š�“Kðòi׫y>¥¨\G A —Œ„Å,£b®rQr[,vŽk5<±Gj‰âaM­ü×ñ8û>D²ïßÿ�,pAódãý³è1sÅÓIm¥ZMòC ÔìtrʽÔHÊpyYÖ©xÇ_þÊšÆmB~Ño$’ÛYM(•D[£R=Á ·Ê Æ€ ?À6Z|B/í=Jâ4µµµfh¿v¶ÏæBÃlcæV$ósÈ5µ¦èé¦ßjWKws3j,ò$»6£¬kWjƒÊ¢g$ôã5Åø‚öwµñ^²º¥õ¥Ö—>›™â\E/ Àbò3¦Ip0kgE §ø’ÒÆËS»¿´»Óêf¹ºyÈuxÂ8,NÐáäàa~N�  ðü7¶‚$‰5ýhGv‘F¤Ûü‰jæHT~ç?+yÉ=ó[Ú6‰¹ ¿½–Ø ¶™ÔÇ“«…Mň+?ÞǦØý–ÂÞâê÷V½°TšõãE1=Áݸ«œãn�p+-¾!êfT¸µÑb»†óL°¹²µ‚9 ×R™—h†sÕW�—€z%Âë>>¿ÒtÛI›Ãè.¥¶’y`žýUUÑ‚RDW!cÂñŸ¯–~?Ô§ÐõmZëÃbÖÒÎÊ[ËgþÑþÔ#8Úô9ã•úàñ@Ý»Lð+\Grœåcºã<`;c·çÖ¥ Š( Š( Š( Š(  È¡ÿ�Ø>ý´ÛùõŸúãmü¤¬¿ xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À›cáë&ñ>®†}O ¹jw ò©ó2�¿âoøýðçý…Wÿ�DË]q~"ðý”wž 6¤wêj§v§rÜyRž3'Ž£šÝÿ�„jÇþ{ê¿ø6ºÿ�ã”�xSþDíþÁð赦ØÈ׬ÿ�×oå%eøcÃÖRøOF‘§ÔÃ5Œ Bê—*9z&�öÛY7‰õt3êxX­È#S¹ýO™“øÐÿ�Çï‡?ì*¿ú&Zè+‹ñ‡ì£¼ðøYµ#¿SU;µ;–ãÊ”ñ™8<uÖïü#V?óßUÿ�Áµ×ÿ� Ÿò'höƒÿ�E­6ÃþF½gþ¸Û)+/ò—Âz4>¦¬`bT¹QÌkÐ 0°¦ØøzɼO«¡ŸSÂÅnAÈ<‡ê|ÌŸÆ€/ø›þ?|9ÿ�aUÿ�Ñ2×A\_ˆ¼?eç‡ÂÍ©úš©Ý©Ü·T§ŒÉÁã¨æ·á±ÿ�žú¯þ ®¿øå�ÿ�‘;Cÿ�°|ú-i¶ò5ë?õÆÛùIY~ðõ”¾Ѥiõ0Ícº¥ÊŽc^€I€=…6ÇÃÖMâ}] úž+rÔîAä?Sædþ4ÄßñûáÏû ¯þ‰–º âüEáû(ï<>mHïÔÕNíNå¸ò¥<fNG5»ÿ�Õü÷Õðmuÿ�Ç(�ð§ü‰Úýƒàÿ�ÑkM°ÿ�‘¯Yÿ�®6ßÊJËðLJ¬¥ðž#O©†k…Õ.TsôLì)¶>²oêègÔð±[F§r!úŸ3'ñ  þ&ÿ�ߨUôLµÐWâ/ÙGyáð³jG~¦ªwjw-Ç•)ã2pxê9­ßøF¬羫ÿ�ƒk¯þ9@…?äNÐÿ�ìþ‹Zm‡üzÏýq¶þRV_†<=e/„ôi}L3XÀÄ.©r£˜× `aVô;(¬<K­E Ü2˜íŽg¸’fèýÜ“øPEEPEPEPEPEPEPUu 2ÃVµ6º•µå¹!ŒW1,‰‘Ðá«Uã/†´hoZîÊØÉ{oo¾ìü›d•UÏÞ^U ?^ˆ{PÙ|=¢N²¬Ú>Ÿ"ÌHÙ}œ&r9ÛÛÓµ2Ûó–ymt-2 .#h§x­#S*7ÞV rAë\Âx¿U:Ȳk(Ü­ïØßK8ºÙ¿gÚGÎwÞcn6ñ¿5gHñ.»{}mgsirJ¾[:Û¸Dš6ÜŒîû„mòÏrO\PÚøKÃi‘/‡´•ŽFGtQ€Ì™ÚHÇ$dàöɬ}KÀV—ÑɧŤYڈʴKV*ŲÒFÊ˵˜†(ã®këþ1¿Ó5‹ëheÓ¢{M† >æ77˜*ù É(>WåNp*—ƒ.Ö-ÄÞ"Itýbýn¯Xý†�³¸ŽI6FϽ‰BaX}î´Ù L{m:»X¯ŸNTû4׈³JŒ �á˜d7ÊáÎE1</áô´¸´M L[k– <"Ò0’°èXc ~µÃ¯ˆgÒ|A¯\ßëz¾›MÓͼ±BÂnL¹lÆíÊ>dÎ3͇ñµÃjÒêº}•¥Þ‹sqs ‘—U¹AS!ÁK6GPÁë•�ìÛúÏï£iÍ4J‰†Õ "¡Ê�qÀSÈôíM>Ðõ¯N‡¦›§.Zsiö.|¶3óAõÏ5CÂ(‹_ÒâûEÝ“j^eÂ<VìåŽ]¡ÂnbSu<H¼A=%�d xp[Ån4 (A 3ųj3}â£ãœu«?غWöWöWöeŸöv6ý“È_'Î6cÏ=*õ™‡t8'µžNŽkEÙm"Z hWžòŽOOSR\hZEÝè½¹Ò¬f»q<–èÒ §+óž#ÐÕú(–££éšºÄºž›gz"mÑ‹˜Mê7ƒQÇ¡i©{{öHškdžI‹ !š.clcï)ä1ç sÀÆJçGÓ/o`½»Ó­'º·ÿ�S<°+<_î±…>™¥4ͧiÖ–m;n”ÛÀ±™«m'ëWh  qá?–!áý+ËYUO±Ç€ì�fH�ÔàSφ<>` L0ˆ¼Ù#Ú#Ý»f1»¹ÇLóZ´P+¬ø5u+ëi-ßM†Ö qA.œ$1 ç10uØz ÃåuÎ…¯„´m5ìN•g<S"-Ë\@Ž×E1†”‘ó¶@9=ù­ª(8 †ÖÞ+{x£†$qÆ¡U ��à�8ÅIE�QE�QE�QE�QEÈxaüGÿ�žåA¥þÃÒÓH<µÆ~^´–/â/øIõ}°i~g•o¸¤ÇGÆ>_­/†<O¥Eá=7špÉcœZÊy¯p´–>&Ò—Äú¼†Yö¼Và¢ËØ>xÛ@ø‰üCöÍ̃KûMvmšO½åK×åéŒÖîÿ�Ͼ‘ÿ�äÿ�â+ Ä^%Òå¼Ð K9 ©«6meyRîóÖ·á*Ò?çµÇþMÿ�ÄÐO†Äð‰èÞTQì0m-4€ãËÏËÖ’ÅüEÿ� >¯¶ /Ìò­÷4˜èøÇËõ¥ðlj´¨¼'£FóN,`S‹YO"1Ü-%‰´¥ñ>¯!–}¯¸è²öž6Ð>"ý³@ó ÒÁþÓ]›f“ïyRõùzc5»¿Äßóï¤ßù?øŠÂñ‰t¹o4’ÎBjjÍ›YGT£û¼õ­ßøJ´ùíqÿ�€“ñ4“á‡ñü"z7•”cû KM 8òÆ3òõ¤±ÂO«íƒKó<«}ÀÍ&:>1òýi|1âm*/ èѼӆKâÖSÈŒw Icâm)|O«ÈeŸkÅnú,½ƒç´ˆŸÄ?lÐ<È4°´×fÙ¤ûÞT½~^˜Ínïñ7üûé÷þOþ"°¼Eâ].[Í�¤³šš³fÖQÇ•(þï=kwþ­#þ{\à$ßüM�døaüGÿ�žåA¥þÃÒÓH<±Œü½i,_Ä_ð“êû`ÒüÏ*ßp3IŽŒ|¿Z_ x›J‹Âz4o4á’Æ8µ”ò#ÂÒXø›J_êògÚñ[þ‹/`ùãm�Câ'ñÛ42 ,í5Ù¶i>÷•/_—¦3[»üMÿ�>úGýÿ�“ÿ�ˆ¬/x—K–ó@),ä&¦¬Ùµ”qåJ?»ÏZÝÿ�„«Hÿ�ž×ø 7ÿ�@>ÿ�Â'£yPiF?°Á´´Ò,c?/ZKñü$ú¾Ø4¿3Ê·Ü Òc£ã/Ö—Ã&Ò¢ðžÍ8d±N-e<ˆÇp´–>&Ò—Äú¼†Yö¼Và¢ËØ>xÛ@ø‰üCöÍ̃KûMvmšO½åK×åéŒÖîÿ�Ͼ‘ÿ�äÿ�â+ Ä^%Òå¼Ð K9 ©«6meyRîóÖ·á*Ò?çµÇþMÿ�ÄÐO†Äð‰èÞTQì0m-4€ãËÏËÖ®hFøø“Zûz[¬¾]¶»3.0þ sTü1âm*/ èѼӆKâÖSÈŒw W4-BÛQñ&µ5³; ŽÙIhÙpý˜@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿ�‘;Cÿ�°|ú-i¶ò5ë?õÆÛùIY~ðõ”¾Ѥiõ0Ícº¥ÊŽc^€I€=…6ÇÃÖMâ}] úž+rÔîAä?Sædþ4ÄßñûáÏû ¯þ‰–º âüEáû(ï<>mHïÔÕNíNå¸ò¥<fNG5»ÿ�Õü÷Õðmuÿ�Ç(�ð§ü‰Úýƒàÿ�ÑkM°ÿ�‘¯Yÿ�®6ßÊJËðLJ¬¥ðž#O©†k…Õ.TsôLì)¶>²oêègÔð±[F§r!úŸ3'ñ  þ&ÿ�ߨUôLµÐWâ/ÙGyáð³jG~¦ªwjw-Ç•)ã2pxê9­ßøF¬羫ÿ�ƒk¯þ9@…?äNÐÿ�ìþ‹Zm‡üzÏýq¶þRV_†<=e/„ôi}L3XÀÄ.©r£˜× `aM±ðõ“xŸWC>§…ŠÜ‚5;yÔù™?�_ñ7ü~øsþ«ÿ�¢e®‚¸¿x~Ê;Ï…›R;õ5S»S¹n<©O“ƒÇQÍnÿ�Â5cÿ�=õ_ü]ñÊ�<)ÿ�"v‡ÿ�`ø?ôZÓl?äkÖë·ò’²ü1áë)|'£HÓêašÆ!uK•ƽ�“�{ m‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühÿ�‰¿ã÷ßö_ý-tÅø‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žkwþ«ùïªÿ�àÚëÿ�ŽPáOù´?ûÁÿ�¢Ö›aÿ�#^³ÿ�\m¿”•—áYKá=FŸS Ö01 ª\¨æ5è˜ØSl|=dÞ'ÕÐÏ©áb· NäCõ>fOã@üMÿ�¾ÿ�°ªÿ�è™k ®/Ä^²ŽóÃáfÔŽýMTîÔî[*SÆdàñÔs[¿ðXÿ�Ï}Wÿ�×_ür€ È¡ÿ�Ø>ý´ÛùõŸúãmü¤¬¿ xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À­èvQXx—ZЏe1ÛÏq$ÍÑû¹'ð ŠŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( CÃâ?øDôo* (Çö6–š@qå®3òõ¤±ÂO«íƒKó<«}ÀÍ&:>1òýi|1â}*/ èѼӆKâÖSÈ{…¤±ñ6”¾'Õä2ϵâ·ý^ÁóÆÚ�‡ÄOâ¶hdX?Úk³lÒ}ï*^¿/Lf·wø›þ}ôûÿ�'ÿ�X^"ñ.—-æ€RYÈMMY³k(ãÊ”wžµ»ÿ� V‘ÿ�=®?ðoþ&€2|0þ#ÿ�„OFò ÒŒaƒii¤XÆ~^´–/â/øIõ}°i~g•o¸¤ÇGÆ>_­/†<M¥Eá=7špÉcœZÊyŽái,|M¥/‰õy ³íx­Àÿ�E—°|ñ¶€!ñø‡íš™–öšìÛ4Ÿ{Ê—¯ËÓ­Ýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄVˆ¼K¥Ëy –rSVlÚÊ8ò¥Ýç­nÿ�ÂU¤Ïkü›ÿ�‰  Ÿ ?ˆÿ�áѼ¨4£Ø`ÚZiÇ–1Ÿ—­%‹ø‹þ}_l_™å[îi1Ññ—ëKáiQxOFæœ2XÀ§²žDc¸ZKiKâ}^C,û^+p?Ñeì<m |Dþ!ûfæA¥ƒý¦»6Í'Þò¥ëòôÆkw‰¿çßHÿ�¿òñ…â/érÞh%œ„ÔÕ›6²Ž<©G÷yë[¿ð•ióÚãÿ�&ÿ�âh'Ãâ?øDôo* (Çö6–š@qåŒgåëIbþ"ÿ�„ŸWÛ—æyVûšLt|cåúÒøcÄÚT^Ñ£y§ –0)Ŭ§‘î’ÇÄÚRøŸWË>׊ÜôY{Ïh?ˆ~Ù yi`ÿ�i®Í³I÷¼©zü½1šÝßâoù÷Ò?ïüŸüEax‹Äº\·šIg!55fͬ£*QýÞzÖïü%ZGüö¸ÿ�ÀI¿øš�ÉðÃøþ=ʃJ1ý† ¥¦ycùzÒX¿ˆ¿á'ÕöÁ¥ùžU¾àf“ù~´¾ñ6•„ôhÞiÃ%Œ qk)äF;…¤±ñ6”¾'Õä2ϵâ·ý^ÁóÆÚ�‡ÄOâ¶hdX?Úk³lÒ}ï*^¿/Lf·wø›þ}ôûÿ�'ÿ�X^"ñ.—-æ€RYÈMMY³k(ãÊ”wžµ»ÿ� V‘ÿ�=®?ðoþ&€2|0þ#ÿ�„OFò ÒŒaƒii¤XÆ~^µsB7ÇÄš×ÛÒÝeòí°-Ù™q‡õš§áiQxOFæœ2XÀ§²žDc¸Z¹¡jÚ‰5©­™ÙvÊKFÈs‡ìÀ�è袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Èð§ü‰Úýƒàÿ�ÑkM°ÿ�‘¯Yÿ�®6ßÊJËðLJ¬¥ðž#O©†k…Õ.TsôLì)¶>²oêègÔð±[F§r!úŸ3'ñ  þ&ÿ�ߨUôLµÐWâ/ÙGyáð³jG~¦ªwjw-Ç•)ã2pxê9­ßøF¬羫ÿ�ƒk¯þ9@…?äNÐÿ�ìþ‹Zm‡üzÏýq¶þRV_†<=e/„ôi}L3XÀÄ.©r£˜× `aM±ðõ“xŸWC>§…ŠÜ‚5;yÔù™?�_ñ7ü~øsþ«ÿ�¢e®‚¸¿x~Ê;Ï…›R;õ5S»S¹n<©O“ƒÇQÍnÿ�Â5cÿ�=õ_ü]ñÊ�<)ÿ�"v‡ÿ�`ø?ôZÓl?äkÖë·ò’²ü1áë)|'£HÓêašÆ!uK•ƽ�“�{ m‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühÿ�‰¿ã÷ßö_ý-tÅø‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žkwþ«ùïªÿ�àÚëÿ�ŽPáOù´?ûÁÿ�¢Ö›aÿ�#^³ÿ�\m¿”•—áYKá=FŸS Ö01 ª\¨æ5è˜ØSl|=dÞ'ÕÐÏ©áb· NäCõ>fOã@üMÿ�¾ÿ�°ªÿ�è™k ®/Ä^²ŽóÃáfÔŽýMTîÔî[*SÆdàñÔs[¿ðXÿ�Ï}Wÿ�×_ür€ È¡ÿ�Ø>ý´ÛùõŸúãmü¤¬¿ xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À›cáë&ñ>®†}O ¹jw ò©ó2�¿âoøýðçý…Wÿ�DË]q~"ðý”wž 6¤wêj§v§rÜyRž3'Ž£šÝÿ�„jÇþ{ê¿ø6ºÿ�ã”�xSþDíþÁð赦ØÈ׬ÿ�×oå%eøcÃÖRøOF‘§ÔÃ5Œ Bê—*9z&�öoC²ŠÃĺÔP½Ã)ŽØæ{‰&nÝÉ?…�tTQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�rÿ�Â'£yPiF?°Á´´Ò-qŸ—­%‹ø‹þ}_l_™å[îi1Ññ—ëKáéQxOFæœ2XÀ§²žDkÜ-%‰´¥ñ>¯!–}¯¸è²öž6Ð>"ý³@ó ÒÁþÓ]›f“ïyRõùzc5»¿Äßóï¤ßù?øŠÂñ‰t¹o4’ÎBjjÍ›YGT£û¼õ­ßøJ´ùíqÿ�€“ñ4“á‡ñü"z7•”cû KM 8òÆ3òõ¤±ÂO«íƒKó<«}ÀÍ&:>1òýi|1âm*/ èѼӆKâÖSÈŒw Icâm)|O«ÈeŸkÅnú,½ƒç´ˆŸÄ?lÐ<È4°´×fÙ¤ûÞT½~^˜Ínïñ7üûé÷þOþ"°¼Eâ].[Í�¤³šš³fÖQÇ•(þï=kwþ­#þ{\à$ßüM�døaüGÿ�žåA¥þÃÒÓH<±Œü½i,_Ä_ð“êû`ÒüÏ*ßp3IŽŒ|¿Z_ x›J‹Âz4o4á’Æ8µ”ò#ÂÒXø›J_êògÚñ[þ‹/`ùãm�Câ'ñÛ42 ,í5Ù¶i>÷•/_—¦3[»üMÿ�>úGýÿ�“ÿ�ˆ¬/x—K–ó@),ä&¦¬Ùµ”qåJ?»ÏZÝÿ�„«Hÿ�ž×ø 7ÿ�@>ÿ�Â'£yPiF?°Á´´Ò,c?/ZKñü$ú¾Ø4¿3Ê·Ü Òc£ã/Ö—Ã&Ò¢ðžÍ8d±N-e<ˆÇp´–>&Ò—Äú¼†Yö¼Và¢ËØ>xÛ@ø‰üCöÍ̃KûMvmšO½åK×åéŒÖîÿ�Ͼ‘ÿ�äÿ�â+ Ä^%Òå¼Ð K9 ©«6meyRîóÖ·á*Ò?çµÇþMÿ�ÄÐO†Äð‰èÞTQì0m-4€ãËÏËÖ’ÅüEÿ� >¯¶ /Ìò­÷4˜èøÇËõ¥ðlj´¨¼'£FóN,`S‹YO"1Ü-%‰´¥ñ>¯!–}¯¸è²öž6Ð>"ý³@ó ÒÁþÓ]›f“ïyRõùzc5»¿Äßóï¤ßù?øŠÂñ‰t¹o4’ÎBjjÍ›YGT£û¼õ­ßøJ´ùíqÿ�€“ñ4“á‡ñü"z7•”cû KM 8òÆ3òõ«š¾>$Ö¾Þ–ë/—mnÌËŒ?¨Õ? x›J‹Âz4o4á’Æ8µ”ò#ÂÕÍ P¶Ô|I­MlÎÈ#¶RZ6Cœ?f�ÐGEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPG…?äNÐÿ�ìþ‹Zm‡üzÏýq¶þRV_†<=e/„ôi}L3XÀÄ.©r£˜× `aM±ðõ“xŸWC>§…ŠÜ‚5;yÔù™?�_ñ7ü~øsþ«ÿ�¢e®‚¸¿x~Ê;Ï…›R;õ5S»S¹n<©O“ƒÇQÍnÿ�Â5cÿ�=õ_ü]ñÊ�<)ÿ�"v‡ÿ�`ø?ôZÓl?äkÖë·ò’²ü1áë)|'£HÓêašÆ!uK•ƽ�“�{ m‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühÿ�‰¿ã÷ßö_ý-tÅø‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žkwþ«ùïªÿ�àÚëÿ�ŽPáOù´?ûÁÿ�¢Ö›aÿ�#^³ÿ�\m¿”•—áYKá=FŸS Ö01 ª\¨æ5è˜ØSl|=dÞ'ÕÐÏ©áb· NäCõ>fOã@üMÿ�¾ÿ�°ªÿ�è™k ®/Ä^²ŽóÃáfÔŽýMTîÔî[*SÆdàñÔs[¿ðXÿ�Ï}Wÿ�×_ür€ È¡ÿ�Ø>ý´ÛùõŸúãmü¤¬¿ xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À›cáë&ñ>®†}O ¹jw ò©ó2�¿âoøýðçý…Wÿ�DË]q~"ðý”wž 6¤wêj§v§rÜyRž3'Ž£šÝÿ�„jÇþ{ê¿ø6ºÿ�ã”�xSþDíþÁð赦ØÈ׬ÿ�×oå%eøcÃÖRøOF‘§ÔÃ5Œ Bê—*9z&�öÛY7‰õt3êxX­È#S¹ýO™“øÐÿ�Çï‡?ì*¿ú&Zè+‹ñ‡ì£¼ðøYµ#¿SU;µ;–ãÊ”ñ™8<uÖïü#V?óßUÿ�Áµ×ÿ� Ÿò'höƒÿ�E­6ÃþF½gþ¸Û)+/ò—Âz4>¦¬`bT¹QÌkÐ 0°«z”V%Ö¢…îLvÇ3ÜI3t~îIü(¢¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ðÃøþ=ʃJ1ý† ¥¦ykŒü½i,_Ä_ð“êû`ÒüÏ*ßp3IŽŒ|¿Z_ xŸJ‹Âz4o4á’Æ8µ”ò#^ái,|M¥/‰õy ³íx­Àÿ�E—°|ñ¶€!ñø‡íš™–öšìÛ4Ÿ{Ê—¯ËÓ­Ýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄVˆ¼K¥Ëy –rSVlÚÊ8ò¥Ýç­nÿ�ÂU¤Ïkü›ÿ�‰  Ÿ ?ˆÿ�áѼ¨4£Ø`ÚZiÇ–1Ÿ—­%‹ø‹þ}_l_™å[îi1Ññ—ëKáiQxOFæœ2XÀ§²žDc¸ZKiKâ}^C,û^+p?Ñeì<m |Dþ!ûfæA¥ƒý¦»6Í'Þò¥ëòôÆkw‰¿çßHÿ�¿òñ…â/érÞh%œ„ÔÕ›6²Ž<©G÷yë[¿ð•ióÚãÿ�&ÿ�âh'Ãâ?øDôo* (Çö6–š@qåŒgåëIbþ"ÿ�„ŸWÛ—æyVûšLt|cåúÒøcÄÚT^Ñ£y§ –0)Ŭ§‘î’ÇÄÚRøŸWË>׊ÜôY{Ïh?ˆ~Ù yi`ÿ�i®Í³I÷¼©zü½1šÝßâoù÷Ò?ïüŸüEax‹Äº\·šIg!55fͬ£*QýÞzÖïü%ZGüö¸ÿ�ÀI¿øš�ÉðÃøþ=ʃJ1ý† ¥¦ycùzÒX¿ˆ¿á'ÕöÁ¥ùžU¾àf“ù~´¾ñ6•„ôhÞiÃ%Œ qk)äF;…¤±ñ6”¾'Õä2ϵâ·ý^ÁóÆÚ�‡ÄOâ¶hdX?Úk³lÒ}ï*^¿/Lf·wø›þ}ôûÿ�'ÿ�X^"ñ.—-æ€RYÈMMY³k(ãÊ”wžµ»ÿ� V‘ÿ�=®?ðoþ&€2|0þ#ÿ�„OFò ÒŒaƒii¤XÆ~^´–/â/øIõ}°i~g•o¸¤ÇGÆ>_­/†<M¥Eá=7špÉcœZÊyŽái,|M¥/‰õy ³íx­Àÿ�E—°|ñ¶€!ñø‡íš™–öšìÛ4Ÿ{Ê—¯ËÓ­Ýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄVˆ¼K¥Ëy –rSVlÚÊ8ò¥Ýç­nÿ�ÂU¤Ïkü›ÿ�‰  Ÿ ?ˆÿ�áѼ¨4£Ø`ÚZiÇ–1Ÿ—­\Ðññ&µöô·Y|»l vf\aý@æ©øcÄÚT^Ñ£y§ –0)Ŭ§‘î®hZ…¶£âMjkfvA²’Ѳáû0€::(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<)ÿ�"v‡ÿ�`ø?ôZÓl?äkÖë·ò’²ü1áë)|'£HÓêašÆ!uK•ƽ�“�{ m‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühÿ�‰¿ã÷ßö_ý-tÅø‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žkwþ«ùïªÿ�àÚëÿ�ŽPáOù´?ûÁÿ�¢Ö›aÿ�#^³ÿ�\m¿”•—áYKá=FŸS Ö01 ª\¨æ5è˜ØSl|=dÞ'ÕÐÏ©áb· NäCõ>fOã@üMÿ�¾ÿ�°ªÿ�è™k ®/Ä^²ŽóÃáfÔŽýMTîÔî[*SÆdàñÔs[¿ðXÿ�Ï}Wÿ�×_ür€ È¡ÿ�Ø>ý´ÛùõŸúãmü¤¬¿ xzÊ_ èÒ4ú˜f±ˆ]RåG1¯@$À›cáë&ñ>®†}O ¹jw ò©ó2�¿âoøýðçý…Wÿ�DË]q~"ðý”wž 6¤wêj§v§rÜyRž3'Ž£šÝÿ�„jÇþ{ê¿ø6ºÿ�ã”�xSþDíþÁð赦ØÈ׬ÿ�×oå%eøcÃÖRøOF‘§ÔÃ5Œ Bê—*9z&�öÛY7‰õt3êxX­È#S¹ýO™“øÐÿ�Çï‡?ì*¿ú&Zè+‹ñ‡ì£¼ðøYµ#¿SU;µ;–ãÊ”ñ™8<uÖïü#V?óßUÿ�Áµ×ÿ� Ÿò'höƒÿ�E­6ÃþF½gþ¸Û)+/ò—Âz4>¦¬`bT¹QÌkÐ 0°¦ØøzɼO«¡ŸSÂÅnAÈ<‡ê|ÌŸÆ€/ø›þ?|9ÿ�aUÿ�Ñ2×A\_ˆ¼?eç‡ÂÍ©úš©Ý©Ü·T§ŒÉÁã¨æ·á±ÿ�žú¯þ ®¿øå�ÿ�‘;Cÿ�°|ú-i¶ò5ë?õÆÛùIY~ðõ”¾Ѥiõ0Ícº¥ÊŽc^€I€=…[Ð좰ñ.µ/pÊc¶9žâI›£÷rOá@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Γkâ}3F±°1im­ã‡wŸ';T ýÏjK{OÁ«^ÞùZA)íóäãfïö?Ú®žŠ�åuKêé²ô…ûظ#Ï—æÂ:ãî·úVŽÿ�Ͼ‘ÿ�äÿ�â+fŠ�æt›_éš5‹Hsmo;¼ù9Ú gî{R[Úxž Zö÷ÊÒ¹H—oŸ'7±þÕtôP+ªXxŸPŸMG¤/ØîÅÁ|¿6×sý¿Ò´wø›þ}ôûÿ�'ÿ�[4P3¤ÚøŸLѬl ZC›kxáÝçÉÎÕ?sÚ’ÞÓÄðj×·¾VEÊD»|ù8Ù»ýö«§¢€9]RÃÄú„úl‚=!~Çv.óåù°Ž¸ûŸíþ•£¿Äßóï¤ßù?øŠÙ¢€9&×Äúfc`bÒÛ[Çï>Nv¨ûžÔ–öž'ƒV½½ò´‚.R%ÛçÉÆÍßìµ]=Êê–'Ô'Ódé ö;±pGŸ/Í„uÇÜÿ�oô­þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍÌé6¾'Ó4kæÚÞ8wyòsµ@ÏÜö¤·´ñ<µír‘.ß>N6nÿ�cýªéè WT°ñ>¡>› H_±Ý‹‚<ù~l#®>çû¥hïñ7üûé÷þOþ"¶h gIµñ>™£XØ´‡6Öñûϓª~çµ]Ò,µ(µMF÷QŠn%E·vl œîûÕ³E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform12.jpg������������������������������������������0000664�0000000�0000000�00000061014�15030617045�0023353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ� "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0í/5•ñ3XÞ­”–r[4èÖèÁíÈuUG$ûbûŒ1Þ³WÄz·˜u6[/ìoíOìѼüùÿ�gó7îÛ7øvýÞsZö:%Åü·/¯jwI#3}ža�E'ЬJÇ€ ù ËÓ<öþCê:ÍõÙK“xöÿ�ºX^mѨAÁà…,7mÅ�gÃâ?ÝYè—.”!×Ü 0ðÉ›U1´Êdùÿ�{û´nÌ6kKÖßìZ©ÕžåÒfh®¦‰JÆ@%’@Ù"ädàç“TŸÀÖ­$%u]R8í½ŒI$alØ÷äÉà•Ö�1ŠÕÓôHôí:æÕ.åžI®äeóØc~@ �€�Àâ€2î~"x^ÄÚ ýBK»—Ê.í&…ÜñÎÖ@Bò>b�÷ªÚ‡Ä}#ħ@Ô­nµMÎk‰!db ¢“í¸d`•<f­[ø1-®å5Ý`ÜRYwĦhøÂ#  rA@§,Ç9$Ðþ ·“B¿Ñ—XÕÂî'·X•âżL~dL¡àŒ®[q�œ@?´1)Ž9®î{ û5„ó+ÅYP†Q €HÖ–£¬ØéSÚEy$‘µÜ¢ˆ…Ùw– 2‚,Êâ2Hо eˆÄ<M®‹oØ­n¡N0ÛqÉž¹\s·nM\×¼/¿qm,Úõ·ÙÙ]ÜÇ·zºº>æVP}B8 Ô|g éßͨ_5¼V#¹‘íäÚŽB°\íÃ1¤’AÈïSÂQ£Â?º—†]6r‚)¢‰äÜ]‚(  ¶K1޼U&ðd-&¡+k™šîõ/’\ÂÚU@€ÇˆñT† ¤“sQðòêZ<tºúyW\…hÌ®ñÈ$\îB¸ÞÀ�p�Àâ€(Ý|Bð­Œvw«¥¿ÛähíÖX¤V,®Qƒ)\¦w‚)ö¾>ðµìú”ÚÄI¦ŒÝ(Vù9ÛÇ?8.y u5Ÿ‚!°—΃ZÕ–VyZW3,’4¬ˆøÝÈ+†Ž1‹þµ‚ͬýü–Šé%´"mµ+"È»0 œ2©ËcèH QüIÑlíõ[íjôYYA© +c-¬ÑH߸‰ÈhØoÈgnv€¹¹/,®<A¢éº\âåo.ž)¥òö y%ù%Ç–XL®IÁ<ÒÉàØ›T¸Ô¢Ö58/&ŸÏóc0ü‡ÊH™@1U–8ò<¨#ædð¬Ãɾ½‰,o^ú5ÞŒ Ž$n,¤Þl„óœ·``�¼ñ†™§ë—ZUعŽX Š`Ëm#‰LŒà"mS¹¾CÀÉ?6ØØ/üYc„u?Yù—1ØÃ+´^S«‡AŽ…w!需rxæ“Uð•®«¬ Tß_Zݬq¤onÈ64fM®7)ù€šUÁÊç ñ…›Â–³ø{SÒ$¾½'U /.Ë')dÇîì"…á@�pZ�«¥x£eíÆµrìVQÞÜmÓf¶1FÆ^J;3œyL:ò“ц,¿41hÓ ‹ÂV‡Êû í0uPç1߀¬­œc y^ïÁI~51s®j²iiɧ\Ü Æ»¾aˆ¸c¾LöùÏ.%°ð„6½Æª5]FkÙÙ‹K/•Æä�#AâƒÉÈPx¹m¼¢ø‡R‚G{èl̉i ¾}ƒ…PÍ€_É<’FbÒ|q§½µðÕî’ÚæÊ[Ã+y#ˆÃÃE¹YV yy Ä‚Ã*úxVÝ<%gáÑ}{äYˆ9Î_%Õãþ §r¼ÎzÖZ|:³Â‰õ­^à*Ü€¡_šyVgl¬@ƒæ"¸ÇB£·¿ ø‡Jñ>–º–x·vŒÅЬ¸aÔÀ~¢´ê¦Ÿdö6ÞT··7²¹¦¹+¹»tUUŽ€^¤Õº�+ Å>+³ð•Œ7w¶·× 4žR­œk‚rFF»E�y¿ü.­þ€þ"ÿ�Áyÿ�âªVøËá´RÍe­…IÓŸ½Š�óø]þÿ�ž:¿þ�µð»ü'ÿ�<uüjôŠ(Íÿ�áwøOþxêÿ�øÕ$_¼! ;›S‹ß°“ŸÈôJ(ÎdøåàHœ¤š…Ê8ê­g(#ÿ�¦ÿ�Âöðýî?ðOð¯H¢€<ßþ·€è'qÿ�€’…#|wðRF¥pÄ‚ÒLŸÒ½&Š�òïø_þÿ�ž·ÿ�ø Ʋeø¡àëýzöæö-máhâXUb™v‘»wʬ1ž+Ùë— «jÿ�ÙòY"y6۾ѱèý0E�yÆ¡ñ ÀÏ%Ù ×QVåLÙÑíl¿Ï8ü«#Ç_ü4Þ˜xhk6º§˜†)eª€nÎæ#‘‘Ò½[\OyúG™>–OÛÓnØdë±úüÝ+™øÄš§ü+«¿íyìÍŸš-!a&<ÁÓsb€9†>?ÐüG-ž­i÷©ª2ˆã¹†æwIÈË�ÙB{Ÿ»ÔäVgŒ4Ï3â¾µ§E¨ÛÚÛÛÀѤ7n0J)<’{“]ŸÂDÓÿ�á‡þYôuä§ÛCC!¹ßŽ|̶qœã/¥qÞ&]Oþ¼%’ÐÜýšßyT`˜Ø¸ÀÎZ�Î]1ì<Eá°š®«*\ë6¶ò¤·ŽC#?#ŒzW©x‡Å_ü-¬Ë¤ê×±^DªÌŠ÷.�a‘È8èkÌnÆ¡ý½ál½®ÿ�íÛO/Ø »ŒóÒ¾‚ÙâoùøÒ?ïÄŸü]�yV‘ñ'á¬z-Š_ßê z¶ñ‹‚MÉÌ›FîAõÍ%¿Ä†Ë«Þ¼·ú´d‹È¹àÛøÏûµèOÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€8 CâGÃg’Çì—ú€U¹VŸ›‘˜ö¶G_]µwþ_¯ùý¿ÿ�ɯñ®Ë\OyúG™>–OÛÓnØdë±úüÝ+_g‰¿çãHÿ�¿ñtåZGÄŸ†±è¶)¨5êÛÆ. 7'2m¹×4–ÿ�>.¯zòßêÑ’/ fç‚7oã?î× xa<Gÿ�žåO¥þÃÐÐÈN<±ŒüÝi,SÄ_ð“êûgÒüÏ*ßq0ÉŽŒ|ßZ�à5‰ žK²_êVåZ~nFcÚÙ}vÕßøY ¿çöÿ�ÿ�&¿Æ»-q<EçédúY?oM»a“®Çëót­}ž&ÿ�Ÿ#þüIÿ�ÅЕi~Ǣإýþ ×«o¸$ܜɴnä\Ò[üHølº½ë˨FH¼›žÝ¿Œÿ�»^á„ñü"z7•>”#û CC!8òÆ3óu¤±OÂO«íŸKó<«}ÄÃ&:>1ó}h€Ô>$|6y,~ɨ[•iù¹kduõÛWáeü*ÿ�ŸÛÿ�üšÿ�ìµÄñŸ¤y“édý½6í†N»¯ÍÒµöx›þ~4ûñ'ÿ�@U¤|Iøk‹b—÷úƒ^­¼bà“rs&Ñ»}sIoñ#á²ê÷¯-þ m"ònx#vþ3þíz†Äð‰èÞTúPì0m „ãËÏÍÖ’Å<Eÿ� >¯¶}/Ìò­÷ ˜èøÇÍõ Š?íï4ë;Q¿FŠè4Ä‹‚ {[ ‚py#Šè¿á{xþ‚wø 'øVؿÑ~Û.žÐÿ�h'DêÙØýË]]�xñwÄe@š§…[S–Ú)„Š—PrFÒFñµÇ‘ÜŠöÍZ²ñ‘oªiÏ#Úλ‘ž6Cù0úW‰øßáÔþ4ÕV•¤×†¥pb‹QÀ· æõCî–é÷¹à`q^ùŒ �(¢Š�(¢Š�(¢Š�ókŸjw»»‡ÄZ7Ÿm}d³Imlæ+d{…GÆ_›$çaÚUwqñ AmâÉ—PÒd]6ÐÜØ1<Æ "˜˜2ÌcNe^9ëí5øîµ¶ÒžÆöÚS O“Æ¡.#VUfR‘‚ëÃ?08ÅW_Z¶¤m¾Çz-EÏØþÞU<ƒ>vìûÛó»åÎÝ»¸Í�r:ß‹&ÓuÆkÝG“M’-.âÝZ©"IxÊò#4„ac‹ ÿ�ùqó\м{>£­½£ßh×),zƒ[ÅnLn ¼ás"ý“Èé¬|yhVM'U’;Ç)`éx½?ôÏç㌶_`* ­k{ÛiˆEÍ™ùí®˜G5»cžT ‚G ƒ@瀼Wªx¢æéî®4×µŽÞUµ·te•òY 8@nQƒ»¨ ŠÁÑüd–¶³ÙéÚ¶‰en—·ò¥Åèi#¸v¼œˆSc®Öcoâ$H„)®ß@Ðmí :›\Ý]Ý=°%º0îŽ6ÚÅ?rª‡•^yÎÑɵosÜF[yVDñ–^›•аüøP¦xòêúÒòúöëMÒZÚm*æ êÔò¼„8ù Áû `»=!Ñügw©êÚ;Ýk:e½»ÛjIvˆ¸Vxe@Œ …&2$�îùwu }Š�ò­+âܺŒÖ³èÈñXÛ´Zw”Þn¢Æ%.¶åXÚû£ÚðÈs´Vφ|s.±âTÓæÔ4‰á¸ûw’– ¬‹öyÄi’d`ÛЗ…'‘Ó¼ªZƧ‹¢ßj³Ç$ÙÀ÷$XÜU±ÆHÀ=莻ñ­ôZ¥Ä"ïI¢¼kc¦Íýª8ƒmûQ;À1…ýéù@ÙÆðj¯„/[GøBší™Ó¯ï¦¶K‰¦‚-›¤!wÙKd%··\)ùEzEæ¿ð°oìì4‡¿Ô¼9%Ä×J·ɤxd·2F­$r;.6fcó··8‡Å^)‡†|_ou¨é6ðAiyoýŸ$möB²E!røÚí´¯Éƒ¹@bMz…Éè)›R±×ÉžÇR¹Òæ*ŸÙÀ…L)"ànK3&sÉCÓ æ,<W>«©x^mnÿ�ÃÆVÖ[¶›;í.Ë0 8fE ¬ ‘Ÿ@Òõ¸õk«Èí­n²¼éöä‘«ª€Û¾R$¨pMM§ÚÕÞ–#Mmo Ã1k,"®9ÎA‰³;PˆzÒÛÞ\]\ønÕMÜðB^Wš×|ë …;@`¬Ïøq‘’ĽBåóï4+ÉYo£…-ÕãÄÖó¤`·ï•hÜË´ …SÝkÓ–æ»’ÕeS<H²<cª« OÔ£~U-�yßü&º¤Z6Š×Z¿…⻿½’Ýîà2Miå¬/&ôÜÈNUOÌF[®x«~ñ=߈5ȦšþÏì×zìvq©ÊÊÍ(—knä)\7Ðqƒ»Zñ,4nÂÎîùÒh xí|¼«Ìá#»¨åŠ÷ãp'ŽjÖ—©Ï¨ùÂ}&÷Nxˆnš&Ý‘ØÆî?AäPšÏñ)ì´éŽªh ]ZæTtÉÁsˆ‘pÒ£îÎO̓šë¼kâàxn=GN¹²iæKd™K­Ð_bËó6O°n•½¬êqhº%ö«<RK œq"EÅQKdœÞ¯PV÷]ÛÇqm4sA*†ŽXØ2ºž„Á-PEPEPEPEPP^ZÇ}cqi1añ´O´àá†cÍOPÝý§ìsýÊûW–ÞO›ñòîÇ8Î3Š�óÁð?Â`çjÿ�øÕ€ß <kâ-BÎàø’(ád6ÿ�h›ïnÎJ!ô}ë¨ÿ�‹¿ÿ�R7þMÖe§ü-oøH5?/þÏ´ùpy»¾Õ³>ݽó×9ö  -Oáç‚ —O/‰ñ-Ú£ï‚ïîícÆcë:sÖ±¾!ø Ä¥ŸGMxßùÑ$_mŠácùœ’èyãœæ»m_þ·¦}§þÍßm_'ËûWߨøÝŸáÆzsҹϋð±?á_^ÿ�ÂCÿ�·öo™™ýŸö;;ÆÜoùqœgÚ€!øað÷EÑÇÄZƳq~ѬÑGm§]$QnûÊ™~¾»~µâmJ ~0ë÷ ÐG¶·�5¤ªü"õR»‡â*ÿ�Á/øXÞ\øFp6ÿ�hîû¿ôÃø¿öZÅ_òZ¼Eÿ�^¶ÿ�ú-hïP„ëÞp—8]´vÍ´€°Û’}†I¯Oñ…<#âmf]Rý<J.$UVÙÝ¢áF�Ú¼êóþF ØÁgÿ�¡×®x†o‰ ¬Ê¾µðäšfÕòÚøËæç6v°sŠ�átO‡~ ¹Ðtë‰×Äþt¶±<žTewíÄxÆzcŠm·ÃÏ>·¨@ëâ*8á)¶ ½Ù;³ŸÝç°Æ}ë_@¸ø¶<9¥‹+? Ai’e3ï)°m݆ÆqŒÒZ\|ZþßÔŒv~ûIŽ81Ÿh>Ý¿7×?…�dê<ºx‰|O‰nÕ|wk3\Óžµ¡ÿ� ×ÀŸÝñ_þÞñº›V¸ø´eÓ>Ógá0Âñ|Ÿ,ÏÌ›[²Ý1ŸÒ´¾Óñ“þ|¼ÿ�}Oÿ�ÅP3¢|;ðU΃§\N¾'󥵉äò »+¸¨'n#Æ3ÓSm¾x)õ½B_ùQÇ M°]îÉÝœþï=†3ïZúÇűáÍ,YYøHÚ H¼“)ŸyMƒnì63Œf’Òãâ×öþ¤c³ðŸÚLpùÁŒû@ùöíù¾¹ü('Søyà¨%ÓÄKâ|Kv¨ûà»û»Xñ˜úäœõ­øV¾þïŠÿ�ðóÿ�ÔÚµÇÅ£.™ö›? †‹äùf~dÚØÝ–éŒþ•¥öŸŒŸóåàïûêþ*€9áß‚®t:âuñ?-¬O'•Ù]ÅA;q1ž˜â›mðóÁO­ê:øŸÊŽ8Jm‚ïvNìç÷yì1Ÿz×Ð.>-ibÊÏÂFÐZEä™LûÊlwa±œc4–—¿·õ#Ÿ„þÒc‡Î gÚÏ·oÍõÏá@:ŸÃÏA.ž"_â[µGßßÝÚÇŒÇ× tç­hµð'÷|Wÿ�€÷Ÿün¦Õ®>-tÏ´ÙøL0¼_'Ë3ó&ÖÆì·Lgô­/´üdÿ�Ÿ/ßSÿ�ñTÌèŸüs éׯ‰üémby<¨.Êî* ÛˆñŒôÇÛo‡ž }oP×ÄþTqÂSl{²wg?»ÏaŒûÖ¾qñlxsKV~6‚Ò/$ÊgÞS`Û» Œã¤´¸øµý¿©ìü'ö“>pc>Ð>}»~o® �λøkà×¼Ó ¶ÿ�„Z{µÂÜÆ»v±á�Þº?øRÿ�žÚ¿þ5fê׌ºgÚlü&^/“å™ù“kcv[¦3úV—Ú~2Ï—ƒ¿ï©ÿ�øª�óÏ ü2Ö|M§_h²ÍggáxµyæK‚‰5ܤ˜Sü É8<ô#Š÷ÍH¶Ðt{m2Ñî uÚq3Jä{³.ƒ �WÌ^¼×`Õõá¹õñœš¼ÿ�h´³PÖ-FL›øvð íéÁ¯§4FÕŸG¶mr;Hõ"¿¾[FfŒmÜÿ�?©  (¢€ (¢€ (¢€0ìc×Z–âÿ�OÓ#‹k$sC{$³9UØbP¹à± z04ÍÄ7¶0Z^YØÙiïªJAö‡y”‹“p)A@q …8*®¼Q¤Fº«Iq" )<ËÍöò/–Ÿ7Ì2¿2üó.GÊ})%ñV‘³G<óÄÐÆ²È$´•v+U'+ÆâŒ©$dŸÃž$µ‡D´¶:_Ùt fÏ4›®@¡UlýÞ#väÉÁÅnèÚv¡ekª\Ý¥«ê:…Ã\¼1ÈÆaF‰¼®HÛå¶úñE¿‹´[™#‰.'Yž_$C-¤ÑÈc8.UŒœf¯iºÅޝ rØÌeŽH#¸FòÙAó´ò'iã¨î�yͯ€|Cé²Ka =Ý…®™o ÿ�k²ý–RÎÊ|œ1Sè8äTðÆS¨#½†—-´W·70*^Ooå4“4‰6"Q¹Â•Œ©=#\0é]^£ãÿ� i6÷PÔµ°­ÃÉm(Ý"³+*¹bgçv?hó+´wlè“$Ö+½ÕY6ÜÁÓë¸ÉäÚN‹o­ê·?`m>âæî+˜’êÞB÷Éþ–à+¦UDC€Ê$#žÝ•¯‚.,¬ü?ek£éØY_Éssk%ôÓªFÑ4ePÈ„¿._`ʨîXkÜüDð¥”zt—Z²ÀšŽß²`‘<ÐÀÃ+ÂÃæ<{ðjY<uáè4‹Zâîk}:ßnn'´–5}ÙÚcÜ È:®hsן‰`¾’ËLÔl„ Šü¶m;1– ƒ3�”üƒæä×3uð÷X“I¹´·‹HŠõ­'¶“RY¤Yµ/667Ëã„_æ@Ðk¬ƒÇ~º’Ñ-ïÞQv±4R%´¥1+”s…Ú»JÄr1Ö™¦xçIÕ'û4Qj sö™ 1› È]²´a™¶mU%O$ê�1£ðv§ˆ“UNÑSƒê[Vf [/"Xò¾ëHËun¥AãX|6Õtè­ +ÃËykm§nXÏo6é_>NGš‡inO�Žž…âFçJ±·¹·×Ö¶î²)9IgŽ#Œ‚äuéÒ¹_ƺž£j>'š+7Ðìîåµ6Ë ƒ²Sýû¶ó û»zsš�H¼%«'¿·…†Œ…µO´´ëpþwÙͯcÿ�UÏÍûÌgK¯ø:ûUÖ/®-:_µlû6¡;ºÜé„(_Ü�¤A¼œ±ÎG¯¥ê:Ä:Ì:^¶l¤šêÑî¢k8š0ž["º6æmØóS 1žxÙ<uáè4‹Zâîk}:ßnn'´–5}ÙÚcÜ È:®h‡ü)w¥øgZÓÖßMÒ¯¯¥ºhî´âX#;F[äC˜÷…žc|ž¸´›TM/DÐ"±Ômm"šÙåm®ñI!f#Ê ’®>bJrr6bø‡áK»í>Â×\¶kÍJ0ök±ˆ|çà�r: éU´_ˆZ]æ¦Ý^K+ßOk“Gee<Ê&’0æ5Ø­–1Û’@=3@ÐøV†�%Óô É_I³Óg’âF&A¶æÉˆýõ1’pcPw�ëü7eªiZ“¦^­³ý’Ð[Ë4s³d ¨Àx''å8wZ±©jëc I¬?g†s"È¥XDæ88!‚äàúcŠÓ +^ðæ¡¨A­Y[ÚÙÝ%þ¥g~RöB°¼qˆCÄpÉû>0F1&yÆ+7Tðf±¨øzïF¶Ðü3¥ÚÎæDŽÚga †6_5r 0;GBw^E�yÍ߃u»Í7^YtÝõMFˆâÔâC*¬À,·•±«aHê «’GEá-ïCmZ9¬ôû;[›µ¸·‚ÊVuŒyHŒ(¸Ë!n:—9÷é( Š( Š( Š( Š( Š(  ¼ºŽÆÆâî`Æ(#i_hÉÂŒœ犞Š�óañÃÂdäêÿ�øÕÏ¿ÄÏ^ø‹P½¼¶ÖYdŠd2¡wg!XzŠöšåÂêÇÅÚ¿ö|–HžM¶ï´Fìz?L@m©øûÀSK§˜mu°#ºW“rOÊíaÆ[®H¬_ˆ^9ð•÷„¥‡C·ÕcÔ<èž'ºILcks½ˆè=+ÖõÄñŸ¤y“édý½6í†N»¯ÍÒ¹ŸŒIªº»þ×žÌØùðù¢ÒcÌ76(–ø[ã½]6>ÕtËÈu‹ 3ÛÜLÑË€�Üeþ;î:UiV‘|`×­‘$%µ¹PfryEîNMv? Oÿ�„nøEgÐ×’Ÿm †ç~9ó2ÙÆsŒ|¾•Çx™u?ø\ð–KCsök}åQ‚cbã9ýh•Þ›j5ï GÛ.»i~õ¹RÜ÷ãê9¯Nñоø[Y—IÕ®/b¼‰U™î\�Ã#qÐטÝCû{ÂÙ{]ÿ�Û¶ž^°wç¥}³Äßóñ¤߉?øº�òâ/Ã+]N·»¼¾1ZÄ’…ûN…�ãsÒ’Ûâ'Ã$Ö¯ç’òûìòGˆ´ä‘»w|÷kм0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ñá”òéæÞòøˆ®•åÏÚxM¬SêGJ¿ÿ� /áWüþßÿ�ä×ø×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òâ/Ã+]N·»¼¾1ZÄ’…ûN…�ãsÒ’Ûâ'Ã$Ö¯ç’òûìòGˆ´ä‘»w|÷kм0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ñá”òéæÞòøˆ®•åÏÚxM¬SêGJ¿ÿ� /áWüþßÿ�ä×ø×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òâ/Ã+]N·»¼¾1ZÄ’…ûN…�ãsÒ’Ûâ'Ã$Ö¯ç’òûìòGˆ´ä‘»w|÷kм0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ñá”òéæÞòøˆ®•åÏÚxM¬SêGJ¿ÿ� /áWüþßÿ�ä×ø×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òâ/Ã+]N·»¼¾1ZÄ’…ûN…�ãsÒ’Ûâ'Ã$Ö¯ç’òûìòGˆ´ä‘»w|÷kм0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�pw_>Ç{¦\XÞÞo·»YºÜ0 µá²:‘]'ü/o�ÿ�ÐNãÿ�$ÿ� ÝÔ×[ú/ÛeÓÚíâ[;¹b+« ü!ñP𽎥­I¥ÚÝøVãWš?:‘Ý£^ œ8ëÈî@Å{Ɖ­Yx‡H·Õ4ç‘íg]ÈÏ!ü˜ý+Äüoðêj‹«JÒkÃR¸1E¨à[†óú¡÷KtûÜð08¯|Æ�QE�QE�QE�r3xÚhµxÛ[Õ¿âmnm®›t%Œ{˜…Äz $PNN©!H³7ƒ »»»¹¼Õµ+–ºµ··ev‰B˜|r©HÁ³õÆXñ€ t´P<<!g,3‹ûËÛû™Ú÷S²,˜‰Ë"-UTÍÐw¶sšÓÒô›M"¢´VTšwlá˜äè@J½E�röÞ ŽÒÖ‹\Õ~Ó Ì÷1Ý“˜<æÝ*cÊØU˜–år àŒ�)éÚÝå¾‹Q²µ—P†âÒV– <ß.‘%»nœ ü™æÚQ@Å—‚ Óí´èmµ}R3ej,¼ÅxÃOœª>/@ʽóÍ<ø>6‚T“ZÕd˜Ì“Ã;<AíÝw` …$†`K,8$àWIE�r—^ŽòêK™5ícÌ“ìÛÎèNL™c<Ęã§8���±„Úùg‡YÕw%ßÙCD#Üò™Ysåï Y› 0È8$Ž+£¢€2uíkÖÐ@úåšC<wè¾_ÎѺºnÞÀeŒtæ©]ø2ÂöæCqsxöÌn$ÓK'ÙÞSÕË¿¯ÍÛsÎ+£¢€1´¯G¦^›¹5 ëé–³Ä×n‡É‹ í]ª¹É%²Çš¨|A*I­j²LfIáž öî»°PÂ’C0%ƒp+¤¢€9ááO.æ[ˆ5ÍZ gAç”’3æÈC¹qÂáH�#Š¡aàÓ4øìlüI­ÅmIÇþŒWäáN 8'n‘Î9 ì(  kí ®ôyô¶½¸–ÚâÕ,åYØ1òðC¶q¸»)Á$ã€p9ÎÍPEPEPEPEPEPEPEPP^ZÇ}cqi1añ´O´àá†cÍOPÝý§ìsýÊûW–ÞO›ñòîÇ8Î3Š�óÁð?Â`çjÿ�øÕ€ß <kâ-BÎàø’(ád6ÿ�h›ïnÎJ!ô}ë¨ÿ�‹¿ÿ�R7þMÖe§ü-oøH5?/þÏ´ùpy»¾Õ³>ݽó×9ö  -Oáç‚ —O/‰ñ-Ú£ï‚ïîícÆcë:sÖ±¾!ø Ä¥ŸGMxßùÑ$_mŠácùœ’èyãœæ»m_þ·¦}§þÍßm_'ËûWߨøÝŸáÆzsҹϋð±?á_^ÿ�ÂCÿ�·öo™™ýŸö;;ÆÜoùqœgÚ€!øað÷EÑÇÄZƳq~ѬÑGm§]$QnûÊ™~¾»~µâmJ ~0ë÷ ÐG¶·�5¤ªü"õR»‡â*ÿ�Á/øXÞ\øFp6ÿ�hîû¿ôÃø¿öZÅ_òZ¼Eÿ�^¶ÿ�ú-hïP„ëÞp—8]´vÍ´€°Û’}†I¯Oñ…<#âmf]Rý<J.$UVÙÝ¢áF�Ú¼êóþF ØÁgÿ�¡×®x†o‰ ¬Ê¾µðäšfÕòÚøËæç6v°sŠ�átO‡~ ¹Ðtë‰×Äþt¶±<žTewíÄxÆzcŠm·ÃÏ>·¨@ëâ*8á)¶ ½Ù;³ŸÝç°Æ}ë_@¸ø¶<9¥‹+? Ai’e3ï)°m݆ÆqŒÒZ\|ZþßÔŒv~ûIŽ81Ÿh>Ý¿7×?…�dê<ºx‰|O‰nÕ|wk3\Óžµ¡ÿ� ×ÀŸÝñ_þÞñº›V¸ø´eÓ>Ógá0Âñ|Ÿ,ÏÌ›[²Ý1ŸÒ´¾Óñ“þ|¼ÿ�}Oÿ�ÅP3¢|;ðU΃§\N¾'󥵉äò »+¸¨'n#Æ3ÓSm¾x)õ½B_ùQÇ M°]îÉÝœþï=†3ïZúÇűáÍ,YYøHÚ H¼“)ŸyMƒnì63Œf’Òãâ×öþ¤c³ðŸÚLpùÁŒû@ùöíù¾¹ü('Søyà¨%ÓÄKâ|Kv¨ûà»û»Xñ˜úäœõ­øV¾þïŠÿ�ðóÿ�ÔÚµÇÅ£.™ö›? †‹äùf~dÚØÝ–éŒþ•¥öŸŒŸóåàïûêþ*€9áß‚®t:âuñ?-¬O'•Ù]ÅA;q1ž˜â›mðóÁO­ê:øŸÊŽ8Jm‚ïvNìç÷yì1Ÿz×Ð.>-ibÊÏÂFÐZEä™LûÊlwa±œc4–—¿·õ#Ÿ„þÒc‡Î gÚÏ·oÍõÏá@:ŸÃÏA.ž"_â[µGßßÝÚÇŒÇ× tç­hµð'÷|Wÿ�€÷Ÿün¦Õ®>-tÏ´ÙøL0¼_'Ë3ó&ÖÆì·Lgô­/´üdÿ�Ÿ/ßSÿ�ñTÌèŸüs éׯ‰üémby<¨.Êî* ÛˆñŒôÇÛo‡ž }oP×ÄþTqÂSl{²wg?»ÏaŒûÖ¾qñlxsKV~6‚Ò/$ÊgÞS`Û» Œã¤´¸øµý¿©ìü'ö“>pc>Ð>}»~o® �λøkà×¼Ó ¶ÿ�„Z{µÂÜÆ»v±á�Þº?øRÿ�žÚ¿þ5fê׌ºgÚlü&^/“å™ù“kcv[¦3úV—Ú~2Ï—ƒ¿ï©ÿ�øª�óÏ ü2Ö|M§_h²ÍggáxµyæK‚‰5ܤ˜Sü É8<ô#Š÷ÍH¶Ðt{m2Ñî uÚq3Jä{³.ƒ �WÌ^¼×`Õõá¹õñœš¼ÿ�h´³PÖ-FL›øvð íéÁ¯§4FÕŸG¶mr;Hõ"¿¾[FfŒmÜÿ�?©  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ‚òê;‹¹ƒ ¥}£' 2p;ž*z(͇Ç “«ÿ�à W>ÿ�<{â-BöòÛYe’(V=Ê„mÝœ…aê+Úk— «jÿ�ÙòY"y6۾ѱèý0E�y¶§ãïM.žaµÖÀŽé^MÉ?+µ‡n¹"±~!xçÂWÞ–ßUPó¢xžé%1¬ Îö# ô¯[×Ä^~‘æO¥“öôÛ¶:ì~¿7Jæ>2&¬>]Rk&²óàóE¬L²æ…˜Š�åþøï@×M‡5]2òD"à ö÷4rà�7�ÙCÿ�ŽûŽ•CÄÚU¤_5ëdIImnTœžQ{““]Â3¦·‡a_ O ­ç’¿lW†O´îÇ;òÙ#9Æ>_Jä<LºŸü. xK%¡¹û5¾ò¨Á1±qœþ´JïMµ÷…#í—]´¿zÜ©n{ñõ×§x‡Å_ü-¬Ë¤ê×±^DªÌŠ÷.�a‘È8èkÌnÆ¡ý½ál½®ÿ�íÛO/Ø »ŒóÒ¾‚ÙâoùøÒ?ïÄŸü]�yF‰ñá•®ƒ§[ÝÞ_ ˜­bIBý§€qƒŽ¹éImñá’kWóÉy}öy#ˆDGÚrHÝ»¾{޵è^Oÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€<ûSø‰ðÊytóoy|DWJòçí<&Ö©õ#¥_ÿ�…—ð«þoÿ�òkük²×Ä^~‘æO¥“öôÛ¶:ì~¿7J×ÙâoùøÒ?ïÄŸü]�yF‰ñá•®ƒ§[ÝÞ_ ˜­bIBý§€qƒŽ¹éImñá’kWóÉy}öy#ˆDGÚrHÝ»¾{޵è^Oÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€<ûSø‰ðÊytóoy|DWJòçí<&Ö©õ#¥_ÿ�…—ð«þoÿ�òkük²×Ä^~‘æO¥“öôÛ¶:ì~¿7J×ÙâoùøÒ?ïÄŸü]�yF‰ñá•®ƒ§[ÝÞ_ ˜­bIBý§€qƒŽ¹éImñá’kWóÉy}öy#ˆDGÚrHÝ»¾{޵è^Oÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€<ûSø‰ðÊytóoy|DWJòçí<&Ö©õ#¥_ÿ�…—ð«þoÿ�òkük²×Ä^~‘æO¥“öôÛ¶:ì~¿7J×ÙâoùøÒ?ïÄŸü]�yF‰ñá•®ƒ§[ÝÞ_ ˜­bIBý§€qƒŽ¹éImñá’kWóÉy}öy#ˆDGÚrHÝ»¾{޵è^Oÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€8;¯‰Ÿ ã½Ó.,oo7ÛݬŽ]nÚÀðÙH®“þ·€è'qÿ�€’…nêk­‹ýí²éíö‚qN­Ü±ÕÐÎþø¨x^ÇRÖ¤Òínü+q«M Hîщ /Nuäw b½ãDÖ¬¼C¤[êšsÈö³®ägþLþ•áþO‡OãMWûmØëcS¸0®£m»Ì?êÿ�„·O½ÏL ú�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�T–ߨÜYÜ)hn#h¤�ã*ß¡©ê Árln‘Œ]˜ÛÉ2ç`||»±Î3ŒÐŸ‰ðý.?ð.Oñ®}¾|?µñ¡es¤êoQÂшælÝœ”Ðu®ƒìßçûÁß÷Ìÿ�üMfÚ[üZþßÔ„wžûHŽ8°Ÿi>Ý¿/×?…�dê ¾A.ž Ñõ•ݬrî¶½M¬H^¹§5ñ áÿ�‚´¿ Mq¡iº¾ fŠ8庂é#PÎÉ‘Bô?_Jëõk‹B]3í7ž,oÉòÄüIµ±»+Óý+ø«Ä„ð ÛxŽïæ "óÄK擼mÆåÆhß ~è$v!ÔäÕï5g… Ón–(w.zª|ç®qìzÖg‰µ(%øÃ¯Ü,wAÚÜ�Ö’«ð‹ÕJÿ�­~#F¶ïæü0Ø!5[+ÿ�LGÞÝëQø«þKWˆ¿ëÖßÿ�E­�cÝê{ÂÎçë¶ŽÙ¶vrO°É5éþ!ð§„|M¬Ëª_§‰EÄŠªÂ;´\(ÀÀûW^ÈÃá/û,ÿ�ô:ö-wþ'ö´ŸðÂ-ý›…òÿ�´>Ñçg6v|¸Îqí@¢|;ðU΃§\N¾'󥵉äò »+¸¨'n#Æ3ÓSm¾x)õ½B_ùQÇ M°]îÉÝœþï=†3ï[þÿ�…­ÿ�Ö•ö?øC>Ëö8|Ÿ;í[ölwcŒãÅ6Óþ·ü$Ÿ—ÿ�gÚ|¸<ÝßjÙŸnÞùëœûP§ðóÁPK§ˆ—Äø–íQ÷Áw÷v±ã1õÈ9ëZð­| ýßÿ�à=çÿ�«º¿ü-o;LûOü!›¾Ú¾O—ö¯¿±ñ»?ÃŒôç¥iÿ�Åßÿ�©ÿ�&è‘Ñ>ø*çAÓ®'_ùÒÚÄòyP]•ÜT·ãéŽ)¶ß<úÞ¡¯‰ü¨ã„¦Ø.÷dîÎwžÃ÷­ÿ�ÿ�ÂÖÿ�„kJûü!Ÿeû>Oö­û6 »±ÆqŒâ›iÿ� [þ OËÿ�„3í>\nïµlÇÏ·o|õÎ}¨ Søyà¨%ÓÄKâ|Kv¨ûà»û»Xñ˜úäœõ­øV¾þïŠÿ�ðóÿ�ÕÝ_þ·¦}§þÍßm_'ËûWߨøÝŸáÆzsÒ´ÿ�âïÿ�Ôÿ�“tÈèŸüs éׯ‰üémby<¨.Êî* ÛˆñŒôÇÛo‡ž }oP×ÄþTqÂSl{²wg?»ÏaŒûÖÿ�‡ÿ�ákÂ5¥}þϲýŽ'ÎûVý›ÝØã8ÆqM´ÿ�…­ÿ� §åÿ�ÂöŸ.7wÚ¶cçÛ·¾zç>Ô…©ü<ðTéâ%ñ>%»T}ð]ýݬxÌ}rNzÖ‡ü+_wÅøyÿ�Æêî¯ÿ� [ÎÓ>Óÿ�fﶯ“åý«ïì|nÏðã=9éZñwÿ�êFÿ�ɺ�ätO‡~ ¹Ðtë‰×Äþt¶±<žTewíÄxÆzcŠm·ÃÏ>·¨@ëâ*8á)¶ ½Ù;³ŸÝç°Æ}ëÃÿ�ðµ¿áÒ¾Çÿ�gÙ~Ç“ç}«~̓nìqœc8¦ÚÂÖÿ�„ƒSòÿ�á ûO—›»í[1óíÛß=sŸj�Ç»økà×¼Ó ¶ÿ�„Z{µÂÜÆ»v±á�Þº?øRÿ�žº¿þ5TÕÿ�ákyÚgÚá ÝöÕò|¿µ}ýÙþg§=+Oþ.ÿ�ýHßù7@ká/†ú§Š,5 [ëKO ÛêÓH<µInä`Bc<˜øAÉÁç¡=ïEÑí4 ÛK±ó¾Ín»Ε¤l}XþlWÌ~MrMcS>—ü&ƒW˜Ü=‰ÇÉÈÿ�Y¿ŒoߌöëÎ+é½jÃG·ãZ6¥·÷ÆÌ0>Û¹  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ‚òé,ln.äWd‚6••X… 犞Š�óañ¯@ ìà¿ÿ�²®}þ#øZ÷ÄZ…åÞâ7E  ŽÞD#nìä+Qƽ¦¹pº±ñv¯ýŸ%’'“m»í»ÓP›j~9ð|Òéæ-Ī#ºW}ñMÊíaûμֱ~!xÛ×~–-K×moüèÞ)¯#“ËRÎFp8â½o\OyúG™>–OÛÓnØdë±úüÝ+˜øÆºªü9»:¬¶OeçÁæ­¬n²æ…˜Š�äþøïI×ËÚ®{öÕEŽ+›9§t`£t ”ã©/û¢ªx›J´‹ã½l‰ ‰-­Êƒ3“Ê/rrk´øMsc/† ƒÂ× w ÈŒ øäÉ–Éç<—ÓÒ¸¿.§ÿ� ƒ^Éhn~Ío¼ª0Ll\`g?­�R»ÓmF½ádûe×m#oÞ·*[žü}G5éÞ!ñ/‚<3¬Ë¥ßÚëâ5Vc × 20CûטÝCû{ÂÙ{]ÿ�Û¶ž^°wç¥}³Äßóñ¤߉?øº�òÇÞ¶Ðtè.m5³<v±$…}¥‚€q‡Æ3Imãï&µ3Úë~L‘Ä#'ÜÝœüÙî+м0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ãïM.žaµÖÀŽé^MÉ?+µ‡n¹"¯ÿ�ÂÅøyÿ�>z÷ýñqÿ�Å×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òÇÞ¶Ðtè.m5³<v±$…}¥‚€q‡Æ3Imãï&µ3Úë~L‘Ä#'ÜÝœüÙî+м0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ãïM.žaµÖÀŽé^MÉ?+µ‡n¹"¯ÿ�ÂÅøyÿ�>z÷ýñqÿ�Å×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òÇÞ¶Ðtè.m5³<v±$…}¥‚€q‡Æ3Imãï&µ3Úë~L‘Ä#'ÜÝœüÙî+м0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ãïM.žaµÖÀŽé^MÉ?+µ‡n¹"¯ÿ�ÂÅøyÿ�>z÷ýñqÿ�Å×e®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òÇÞ¶Ðtè.m5³<v±$…}¥‚€q‡Æ3Imãï&µ3Úë~L‘Ä#'ÜÝœüÙî+м0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�pw_¼î™qgm­+Áv²1’)›åÚÀÌA9"ºOø]þÿ�ž:¿þ�µnêk­‹ýí²éíö‚qN­Ü±ÕÐÎþø›«økO¿Ö§²µ»ð¬Ú´Ð¢«$7q1!ó·3‡'ŽH}ãDÖm<A£Ûê–>wÙ®ryÑ4m£סíšñ/¹ÿ�„ËUþØÝý½ý¥qåÿ�icìû¼Ãþ«øwtûÜôÅ{í�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�å¤7ö7w ZˆÚ)�8ʰÁçèjz‚ð\›dcf6òL¹Ø.ìsŒã4çßð¢|ÿ�@Ëü “ükŸo…_í|E¨Y\é:›Åp´b¹›·g%ôk û7Æ_ùþðwýó?ÿ�Y¶–ÿ�¿·õ!ç„þÒ#‡Î,'ÚGÏ·oËõÏá@:ŸÃo‡PK§ˆ4}eD·k»­¯FSkW®@éÍc|Bøà­/ÂS\hZn§o¨¢Ž9n ºHÔ3€rdP½×ÒºýZßâЗLûMç„ËÅò|±?mlnÊôÆJç~*Áñ!<vÞ#»ðãé‚H¼Å±ù¤ïq¹@Æqš�wǺ‰‡ˆu95{ÍE£YáH4Û¥ŠËžªŸ9Áëœ{µ™âmJ ~0ë÷ ÐG¶·�5¤ªü"õR»‡â*ÿ�Á+_ˆÑ­»ù‚? 6MDÊÿ�Ó÷‡·EúÔ~*ÿ�’Õâ/úõ·ÿ�Ñk@÷z„'^𳄹Äzí£¶m¤€Ý†Ü“ì2Mzˆ|)ák2ê—éâQq"ª°†Îí 00~ÕçWŸò0øKþÆ ?ý½‹]ÿ�…‰ý­'ü#ßð‹fá|¿í´yÙÇÍŸ.3œ{PŸèŸüs éׯ‰üémby<¨.Êî* ÛˆñŒôÇÛo‡ž }oP×ÄþTqÂSl{²wg?»ÏaŒûÖÿ�‡ÿ�ákÂ5¥}þϲýŽ'ÎûVý›ÝØã8ÆqM´ÿ�…­ÿ� §åÿ�ÂöŸ.7wÚ¶cçÛ·¾zç>Ô…©ü<ðTéâ%ñ>%»T}ð]ýݬxÌ}rNzÖ‡ü+_wÅøyÿ�Æêî¯ÿ� [ÎÓ>Óÿ�fﶯ“åý«ïì|nÏðã=9éZñwÿ�êFÿ�ɺ�ätO‡~ ¹Ðtë‰×Äþt¶±<žTewíÄxÆzcŠm·ÃÏ>·¨@ëâ*8á)¶ ½Ù;³ŸÝç°Æ}ëÃÿ�ðµ¿áÒ¾Çÿ�gÙ~Ç“ç}«~̓nìqœc8¦ÚÂÖÿ�„ƒSòÿ�á ûO—›»í[1óíÛß=sŸj�ÂÔþx* tñøŸݪ>ø.þîÖ<f>¹§=kCþ¯?»â¿ü¼ÿ�ãuwWÿ�…­çiŸiÿ�„3wÛWÉòþÕ÷ö>7gøqžœô­?ø»ÿ�õ#äÝ�r:'ÿ\è:uÄëâ:[XžO* ²»Š‚vâ<c=1Å6Ûá炟[Ô uñ?•p”ÛÞìÙÏîóØc>õ¿áÿ�øZßði_cÿ�„3ì¿c‡Éó¾Õ¿fÁ·v8Î1œSm?ákÂA©ùð†}§ËƒÍÝö­˜ùöíϵ�aj<ºx‰|O‰nÕ|wk3\Óžµ¡ÿ� ×ÀŸÝñ_þÞñº»«ÿ�ÂÖó´Ï´ÿ�»í«äùjûû³ü8ÏNzVŸü]ÿ�ú‘¿òn€9áß‚®t:âuñ?-¬O'•Ù]ÅA;q1ž˜â›mðóÁO­ê:øŸÊŽ8Jm‚ïvNìç÷yì1Ÿzßðÿ�ü-oøF´¯±ÿ�Âö_±Ãäùßjß³`Û»gÎ)¶Ÿðµ¿á Ôü¿øC>ÓåÁæîûVÌ|ûv÷Ï\çÚ€1îþø5ï4È-¿á#Vžíccp·1®Ý¬xg@àw®þ‡„ÿ�箯ÿ�ÍU5øZÞv™öŸøC7}µ|Ÿ/í_cãv‡éÏJÓÿ�‹¿ÿ�R7þMКøKᾩ⋠CD–úÒÓ¶ú´Ò-R[¹˜Ï&>rpyèGO{Ñt{MG¶Òì|ï³[®Äó¥iV?§AÛó‡“\“XÔφ†¥ÿ�  Õæ7b@±òr?Öoã÷ã=ºóŠúoD°ÑíÆ¸Ö©mýñ³ #϶îhBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ¼ºK‹¹Ù ¥eA–!FH¹â§¢€<Ø|kÐûÄ_ø/ÿ�쫟ˆþ½ñ¡yw£xÄ‘B¨#·‘Û»9 ãÔcñ¯i®\.¬|]«ÿ�gÉd‰äÛnûDnÇ£ôÁæÚŸŽ|4ºy‹Dñ*ˆî•ß|Sr»X`~ó¯#õ¬_ˆ^6ðåß„å‹GÒõÛ[ÿ�:7ŠkÈäòÔ†çs‘œ8¯[×Ä^~‘æO¥“öôÛ¶:ì~¿7Jæ>1®ª¿nΫ-“Ùyðy«k¬„yƒ¡f"€9?…~;ÒuÇ²ðæ«£^ýµQcŠæÎiÝ(Æ]e8êGËþ語&Ò­"øÁ¯["H"Kkr Ìäò‹Üœší>\ØËáˆ ðµÆƒÂĆò#‚ã~92e²yÏ#åôô®/ÄË©ÿ�Âàׄ²ZŸ³[ï*ŒÏë@®ôÛQ¯xY>ÙuÛHÛ÷­Ê–ç¿QÍzwˆ|Kà ë2éwöºÁ¸U˜Âguà Œþõæ7cPþÞð¶^×öí§—„lÝÆyé_Alñ7üüi÷âOþ.€<£Dñ÷€­´: ›MlϬI!DŸi` añŒÒ[xûÀI­_Ìöºß“$qÀI÷7g?6{Šô/ 'ˆÿ�áѼ©ô¡Ø`Ú Ç–1Ÿ›­%Šx‹þ}_lú_™å[î&1Ññ›ë@}©øûÀSK§˜mu°#ºW“rOÊíaÆ[®H«ÿ�ð±~Ïž½ÿ�|\ñuÙk‰â/?Hó'ÒÉûzmÛ v?_›¥kìñ7üüi÷âOþ.€<£Dñ÷€­´: ›MlϬI!DŸi` añŒÒ[xûÀI­_Ìöºß“$qÀI÷7g?6{Šô/ 'ˆÿ�áѼ©ô¡Ø`Ú Ç–1Ÿ›­%Šx‹þ}_lú_™å[î&1Ññ›ë@}©øûÀSK§˜mu°#ºW“rOÊíaÆ[®H«ÿ�ð±~Ïž½ÿ�|\ñuÙk‰â/?Hó'ÒÉûzmÛ v?_›¥kìñ7üüi÷âOþ.€<£Dñ÷€­´: ›MlϬI!DŸi` añŒÒ[xûÀI­_Ìöºß“$qÀI÷7g?6{Šô/ 'ˆÿ�áѼ©ô¡Ø`Ú Ç–1Ÿ›­%Šx‹þ}_lú_™å[î&1Ññ›ë@}©øûÀSK§˜mu°#ºW“rOÊíaÆ[®H«ÿ�ð±~Ïž½ÿ�|\ñuÙk‰â/?Hó'ÒÉûzmÛ v?_›¥kìñ7üüi÷âOþ.€<£Dñ÷€­´: ›MlϬI!DŸi` añŒÒ[xûÀI­_Ìöºß“$qÀI÷7g?6{Šô/ 'ˆÿ�áѼ©ô¡Ø`Ú Ç–1Ÿ›­%Šx‹þ}_lú_™å[î&1Ññ›ë@×ÄoÅ{¦\YÛkJð]¬ŒdŠfùv°à3NH®“þ„ÿ�环ÿ�€-[ºšëbÿ�Eûlº{Cý œA«gc÷,Eutó¿…~&êþÓïõ©ì­nü+6­4(ªÉ ÜLH|íãÌáÆAÉã’_xÑ5›Ohöú¥ök…ÜžtMcèÃõè{f¼KÀŸð®á2Õ¶7oi\yÚXû>ï0ÿ�ªþÝ>÷=1^û@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ayi ýÅ–†â6Š@2¬0yúž ¼[—±¸[7HîŒl!wU||¤Lâ€<ûþO€èqÿ�rsíð«áý¯ˆµ +'Sx¢ŽŒ@·3`¶ìä >ƒ­o+âî|GáÜÿ�׫ñ5i¦|T:þ¤±ëú�¹Ãæ±¶m¬>}¸ù~´“©ü6øuºxƒGÖTKv±ËºÚôe6± ezäœÖ/ÄO�ø#Hð|÷Z&©Zßy±"MuÒF€¸±‘Bôÿ�ëWa«iŸ]3í:þ€ÄÞ(‡e³ ¯µ°OËÓ®sⵇÄ8<u'ˆ5­çMÅæEkWc¸mÁ+ëƒ@øaðû@Ñb°ñ§&¯y¨´k<+›t±E¹sÕSçàõÎ=ZÌñ6¥¿uû…Žè#Û[€ÒU~z©]Ãñà~“ñ Ûȸ3}›Ã.CyÀ±‘OxWªç×…9ΣñWü–¯×­¿þ‹Z�Ç»Ô!:÷…œ%Î#×m³m $ì6äŸa’kÓüCáOø›Y—T¿O‹‰U„6wh¸Q€#ö¯:¼ÿ�‘‡Â_ö0Yÿ�èuëž!‡âCë2·‡.¼9™µ|µ¾ù¹ÇͪG\â€8]áß‚®t:âuñ?-¬O'•Ù]ÅA;q1ž˜â›mðóÁO­ê:øŸÊŽ8Jm‚ïvNìç÷yì1Ÿz×Ð-þ-ŸifÊóÂBÐÚEä‰DûÂlwaqœc4––ÿ�¿·õ!ç„þÒ#‡Î,'ÚGÏ·oËõÏá@:ŸÃÏA.ž"_â[µGßßÝÚÇŒÇ× tç­hµð'÷|Wÿ�€÷Ÿün¦Õ­þ- tÏ´ÞxL±¼_'Ëñ&ÖÆì¯Lgô­/³|dÿ�Ÿßß3ÿ�ñ4ÌèŸüs éׯ‰üémby<¨.Êî* ÛˆñŒôÇÛo‡ž }oP×ÄþTqÂSl{²wg?»ÏaŒûÖ¾oñløsK6Wž†Ò/$J'Þ`Û» Œã¤´·øµý¿©ï<'ö‘>qa>Ò>}»~_® �ÉÔþx* tñøŸݪ>ø.þîÖ<f>¹§=kCþ¯?»â¿ü¼ÿ�ãu6­oñhK¦}¦óÂeâù>XŸ‰6¶7ezc?¥i}›ã'üþø;þùŸÿ�‰ gDøwà«N¸|OçKkÉåAvWqPNÜGŒg¦8¦Û|<ðSëz„¾'ò£Ž›`»Ý“»9ýÞ{ gÞµô ‹gÚY²¼ð´6‘y"Q>ð›ÝØ\gÍ%¥¿Å¯íýHGyá?´ˆáó‹ ö‘óíÛòýsøPN§ðóÁPK§ˆ—Äø–íQ÷Áw÷v±ã1õÈ9ëZð­| ýßÿ�à=çÿ�©µk‹B]3í7ž,oÉòÄüIµ±»+Óý+Kìß?ç÷Áß÷Ìÿ�üM�s:'ÿ\è:uÄëâ:[XžO* ²»Š‚vâ<c=1Å6Ûá炟[Ô uñ?•p”ÛÞìÙÏîóØc>õ¯ [ü[>Ò͕焅¡´‹É‰÷„Ø6îÂã8Æi--þ-oêB;Ï ý¤GœXO´Ÿnß—ëŸÂ€3®þø5ï4È-¿á#Vžíccp·1®Ý¬xg@àw®þ‡„ÿ�箯ÿ�ÍYºµ¿Å¡.™ö›Ï –7‹äùb~$ÚØÝ•éŒþ•¥öoŒŸóûàïûæþ&€<óÂ?u/XêZ—övž¶Õ¦“÷j’Þ;äÇÂN ÏB:{æ‹£Úh=¶—cç}šÝv'+HØú±ý:د˜ü=i®\j×ÿ�ðéÿ�Âi­7Úo-\-‹#>fá‚7o Þ¼ôÞ†š²höË®Ki.¤÷ÍhŒ±“íž—ÐP…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cwp¶vsܲHë m!H×s08¹ö©© ¥˜€�É'µ�pâÞšFáñWþ ›ükžèWÞ#Ônîü7â§ß*«œ¨ËÙ܇\ñø×¬hYÏå¿ýý_ñ®cí—Gź³X_éi†ß?hËdáúa…�pº§Šü5$ºqÃ>,@—jÍæ[N7 ­Âåúò?ZÄø‹âÍ_LºV‰â[ Ñ4MÅì2¬hCƒÉg#·W¦ëwz¹›Iݨè‡êWj¿cò~~•Íü]»»o‡×#R¼Ó.->Ñ™¦å•‡˜:Ä~Ÿ•�r¿ ¼s§ë’ÙøwTÐ魯HÖ8îìf™—ḧå¬8ö_ÄÚU¤_5ëdIImnTœžQ{““]§ÂRÊëÃ6ö~¸Ð`¸Žû]¹·‘g. ?Í—äýá‘Î8é\_‰—Sÿ�…Á¯ d´7?f·ÞU&6.03ŸÖ€)]é¶£^ð²}²ë¶‘·ï[•-Ï~>£šôïø‹Â^ÖeÓ.ôO4j¬^×ΑFx>g½yØÔ?·¼-—µßý»iåá·qžzWÐ[<Mÿ�?Gýø“ÿ�‹ (Ñ<uàë}N‚}ÄÏ4v±#´qMµ˜(ŒIÓ4–Þ9ðzkWó6‰âS‘ÄV)·7g?¼÷ükм0ž#ÿ�„OFò§Ò„aƒhhd'XÆ~n´–)â/øIõ}³é~g•o¸˜dÇGÆ>o­�yö§ãŸÍ.žbÑ<J¢;¥wßܮּëÈýjÿ�ü,ÿ�ÐÅ_÷êoþ9]–¸ž"óô2},Ÿ·¦Ý°É×cõùºV¾ÏÏÆ‘ÿ�~$ÿ�âèÊ4Ox:ßAÓ ŸCñ3ͬHíSmf #tÍ%·Ž|šÕüÍ¢x”Å$qUŠmÀÙÏï=Æ?ô/ 'ˆÿ�áѼ©ô¡Ø`Ú Ç–1Ÿ›­%Šx‹þ}_lú_™å[î&1Ññ›ë@}©øçÁóK§˜´O¨Žé]÷Å7+µ†ï:ò?Z¿ÿ� Á?ôñWýú›ÿ�ŽWe®'ˆ¼ý#ÌŸK'íé·l2uØý~n•¯³Äßóñ¤߉?øº�òÇ^·Ðtè'ÐüLóGk;GÛY‚€HÄ3Im㟦µ3hž%1IAb›p#vsûÏqƽ à â?øDôo*}(Gö6††BqåŒgæëIbž"ÿ�„ŸWÛ>—æyVû‰†Lt|cæúПj~9ð|Òéæ-Ī#ºW}ñMÊíaûμ֯ÿ�ÂÀðOý�|Uÿ�~¦ÿ�ã•Ùk‰â/?Hó'ÒÉûzmÛ v?_›¥kìñ7üüi÷âOþ.€<£Dñ׃­ô: ô?<ÑÚÄŽÑÅ6Ö` 1'LÒ[xçÁé­_ÌÚ'‰LRGEX¦ÜÝœþóÜcñ¯BðÂxþ=ÊŸJý† ¡¡œycùºÒX§ˆ¿á'ÕöÏ¥ùžU¾âa“ù¾´ÁÝ|BðœWºeŦ‹âDx.ÖFó`‘²6°À äÈ®“þVÿ�@à¼ÿ�ñU»©®¶/ô_¶Ë§´?Ú Ä:¶v?rÄWW@:øgâ~³á½6÷Zš ;¿ M«Ï [3¤7‘CäãáÆAÉã¨׽躼î‘o©[Eq3®åKˆLN>ªŸCÛ5âŸáå·ŒµVÖc1ëÇS¸M¨àÛîõgî†é÷¹É<׿g#"€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †îÖë9í.S|ÆÑH™#r°ÁŽ MP^-ËØÜ-›¤wF6»Œª¾>RG¦q@7ü)/‡Ÿô/äíÇÿ�®}¾|:´ñ£gsáÛÉ"Š(Z%€^̶íÙ(O\¦µÆ•ñw>#ðîëÕ¿øšÎ´Ó>*RXõý�\ˆáóXÛ6Ö>Ü|¿Z�£ª|>økºpƒÃzš .Õ%Ýo¨ ɵ‰=òNkâ?ü ¦x6{ E¼±¿ó¢D¸¹Šõ#@\“ ÛÓñôæº[Lø¨²éŸi×ô&ñD;-˜m}­‚~^˜ÍsŸ¬>!Áà+©<A­h÷:h–/2+X »Ãn _\�Ÿá—Ãï h¶úˆ5!«_êO\DLºÂHÈÆÔùÏ=sƒéÞ²<M©A/Æ~ácºöÖà´•_„^ªWpüE_ø¤üB¶ò. ßfðËÞEð,dSÞê¹õáNs†¨üUÿ�%«Ä_õëoÿ�¢Ö€1îõN½ág sˆõÛGlÛH » ¹'Ødšôÿ�ø?Àž)ÖeÕµm+Z–òUUg[Ô(Àà&: ó«Ïù|%ÿ�cŸþ‡^¹â~$>³+xrëÑé›WË[á/›œ|ÙÚ¤uÎ(…Ñ>ü:ºÐ4ë‹­Z{‰mbyY-¯J–* …Æ3éÅ6Ûá·Ã©5½BÑõ“QÂcQm{NíÙùsØuü+_@·ø¶|9¥›+Ï Ci’%ï °mÝ…ÆqŒÒZ[üZþßÔ„wžûHŽ8°Ÿi>Ý¿/×?…�dê ¾A.ž Ñõ•ݬrî¶½M¬H^¹§5¡ÿ� »á—ý5Ïü¾ÿ�â*mZßâЗLûMç„ËÅò|±?mlnÊôÆJÒû7ÆOùýðwýó?ÿ�@Ήð×áÕÖ§\]húÓÜKkÊÉmzT±PI.1ŸN)¶ß ¾I­ê>¬˜"Ž‹kÜ‚wnÏ˞ïáZú¿Å³áÍ,Ù^xHZH¼‘(ŸxMƒnì.3Œf’Òßâ×öþ¤#¼ðŸÚDpùÅ„ûHùöíù~¹ü('Sømðê tñ¬¨–íc—uµèÊmb@ÊõÈ9­øUß ¿è ®à-÷ÿ�SjÖÿ�„ºgÚo<&XÞ/“剸“kcvW¦3úV—Ù¾2Ïï™ÿ�øš�ætO†¿®´ :âëGÖžâ[XžVKkÒ¥Š‚H!qŒúqM¶ømðêMoPô}dÁp˜Ô[^ä»v~\ö ×Ð-þ-ŸifÊóÂBÐÚEä‰DûÂlwaqœc4––ÿ�¿·õ!ç„þÒ#‡Î,'ÚGÏ·oËõÏá@:ŸÃo‡PK§ˆ4}eD·k»­¯FSkW®@éÍh®øeÿ�@Msÿ�o¿øŠ›V·ø´%Ó>Óyá2Æñ|Ÿ,OÄ›[²½1ŸÒ´¾Íñ“þ|ÿ�|Ïÿ�ÄÐ3¢|5øuu i×Z>´÷ÚÄò²[^•,TA ŒgÓŠm·Ão‡Rkz„£ë&£„Æ¢Ú÷ Û³òç°ëøV¾oñløsK6Wž†Ò/$J'Þ`Û» Œã¤´·øµý¿©ï<'ö‘>qa>Ò>}»~_® �λø_ðõ¯4È-4U ÅÚÅ!ž+¸Ô©V8Üê�äõÑÿ�‰ðý.?ð.Oñ¬ÝZßâЗLûMç„ËÅò|±?mlnÊôÆJÒû7ÆOùýðwýó?ÿ�@àÿ�†×þ&³Ôôi5+[? Á«Ï/Ùà+-Ó0!�,rcAד܃^ó¢èöz‘m¥éèékn»#W‘œõ$×Ì~´×.5kÿ�øFáÔÿ�á4V›í7–®ÈE‘Ÿ3pÁ·o^�úoCMY4{e×%´—R ûæ´FXÉöÏ?Ëè(BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¡»¸[;9îY$u†6¤k¹˜œÜûTÔ„…RÌ@�d“Ú€8ñoM#?ðø«ÿ�Mþ5Ï?Žt+ïê7w~ñSïŠUŽÎTeÆìî îxükÖ?´,¿çòßþþ¯ø×1öË£âÝY¬/ô´ŒÃoŸ´e²pý0€8]SÅ~’]8Ç០Kµfó-§†Öárýy­b|Eñf/„&]+Dñ-…èš&ŽâöV4!Á䳑ێ+Óu»½\ͤîÔtC‹õ+µ_ƒ±ù??Jæþ.ÝÝ·Ãë‘©^i—ŸhƒÌŠÓrÊÃÌ b?OÊ€9_…^9ÓõÉlü;ªhwÒ\¤kwv3LË´ fD òV{ ¯âm*Ò/Œõ²$‚$¶·* ÎO(½ÉÉ®ÓáF©euá›{? \h0\G }®ÜÛȳ—ŸæËò~ðÈçt®/ÄË©ÿ�Âàׄ²ZŸ³[ï*ŒÏë@®ôÛQ¯xY>ÙuÛHÛ÷­Ê–ç¿QÍzwˆ|Eá/ k2é—zGˆ'š5V/kçH‡#<3Þ¼ÆìjÛÞËÚïþÝ´òð€Û¸Ï=+è-ž&ÿ�Ÿ#þüIÿ�ÅДhž:ðu¾ƒ§A>‡âgš;X‘Ú8¦ÚÌF$éšKoø=5«ù›Dñ)ŠHâ«Û³ŸÞ{Œ~5è^Oÿ�Â'£ySéB?°Á´42,c?7ZKñü$ú¾Ùô¿3Ê·ÜL2c£ã7Ö€<ûSñσæ—O1hž%QÒ»ïŠnWk Þuä~µþ‚èâ¯ûõ7ÿ�®Ë\OyúG™>–OÛÓnØdë±úüÝ+_g‰¿çãHÿ�¿ñtå'޼o éÐO¡ø™æŽÖ$vŽ)¶³�‘‰:f’ÛÇ>MjþfÑ<Jb’8‚*Å6àFìç÷žãz†Äð‰èÞTúPì0m „ãËÏÍÖ’Å<Eÿ� >¯¶}/Ìò­÷ ˜èøÇÍõ >Ôüsàù¥ÓÌZ'‰TGt®û⛕ÚÃ÷y­_ÿ�…àŸú�ø«þýMÿ�Ç+²×Ä^~‘æO¥“öôÛ¶:ì~¿7J×ÙâoùøÒ?ïÄŸü]�yF‰ã¯[è:tè~&y£µ‰£Šm¬Á@$bN™¤¶ñσÓZ¿™´O˜¤Ž бM¸»9ýç¸Çã^…á„ñü"z7•>”#û CC!8òÆ3óu¤±OÂO«íŸKó<«}ÄÃ&:>1ó}hϵ?ø>itó‰âUÝ+¾ø¦åv°Àýç^GëWÿ�á`x'þ€>*ÿ�¿SñÊìµÄñŸ¤y“édý½6í†N»¯ÍÒµöx›þ~4ûñ'ÿ�@Q¢xëÁÖúú‰žhíbGhâ›k0P “¦i-¼sàôÖ¯æmĦ)#ˆ"¬SnnÎyî1ø×¡xa<Gÿ�žåO¥þÃÐÐÈN<±ŒüÝi,SÄ_ð“êûgÒüÏ*ßq0ÉŽŒ|ßZ�àî¾!xN+Ý2âÓEñ"<k#y°HÙX`r äWIÿ� «@ÿ� ?ˆ¿ð^øªÝÔ×[ú/ÛeÓÚíâ[;¹b+« |3ñ?YðÞ›{­M߆¦Õç…-™Òȉ!òñðã äñÔkÞô]^ wH·Ô­¢¸Š×r¥Ä&'U?Ï¡íšä¼;ð›Ãº&³u¬ÜÅý£©Oq%ÂÉp ¤%˜œ"tÈþñÉúWy@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cwk õœö—)¾ ãh¤L‘¹X`ŒŽG¦¢€<ÿ�þ—ÃÏú¿òvãÿ�ŽV ü-ø}e¯ß[Ýøjù­–8ŒJÞʹ;·|ÈOû=MzõãZ߇+%‡Ù<1ª…k¥ÿ�£jêö¶z]½9¬¯|5ð“xbe𗆵4ÖHÄnÖרUÜ7¼Ó>þ•ïTP…ü7øuáï%–µ«Ç¬^jÁVTŒiwK»œ 'ÎFq’qí\C¦Ú|^×.Þ)màTó­¤F$"ÿ� ]ÃñôµC%¥´®^KxVdÐËßð“i‡‰<.¶w/3Å­ÚJÊH[h~p6äžG$×Òð’Øÿ�Ï Wÿ�7_ün¯‹ 5uqi�d;•„c úŽ*Å�r¾×mm|/¤ÛÍkª¬±YBŽ¿ÙW' 2#¦Ùë–ÑøT­uQ±@¿²®y#~埸®²Š�äõrÚâm(Åkª°Šùdø•\Œ.Çÿ�Wî+Wþ[ùáªÿ�à¦ëÿ�Ö½Êøs]µµð¾“o5®ª²Åe :ÿ�e\œ0@ÈŽ›g®[Gâ=RvµÕDRÅ�Fþʹäùÿ�–~âºÊ(“ÖuËk‰´£®ªÂ+å‘ÿ�âUr0»gý_¸­_øIl熫ÿ�‚›¯þ7ZôP+áÍvÖ×ÂúM¼ÖºªË”(ëý•rpÁ�#":mž¹mˆõIÚ×UKû*ç’7çþYûŠë( OY×-®&ÒŒVº«¯–Gÿ�‰UÈÂìqŸõ~âµá%±ÿ�ž¯þ n¿øÝkÑ@¯‡5Û[_ é6óZê«,VP£¯öUÉÃ�Œˆé¶zå´~#Õ'k]TE,Po쫞Hߟùgî+¬¢€9GU‡Q½Ñâ··Ôw%ú»4ùãU]Ž2YÔw®žŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform13.jpg������������������������������������������0000664�0000000�0000000�00000052512�15030617045�0023357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®CÄ_<3á»Ó§Ïu-Þ¤?寯#4¹ô p± Ð_EyÏü,ËóÛ|7ךÈ3ãýÜçIÆ-2ÖAˆ´-sA;¶™/,ØÅÏO˜súP£ÑUtýJËV±Ž÷O»†êÚA”– §ñj€ (®#\ø«áÝ#Sm*Ô]êú¢¦ÓM‡Íe=0O�s×’G¥�vôW›‰ºü+ç]|6ñ[õÝ8é€kwü;â»§±³¸–ÛQLﱽʘc¯ƒø@eQ@Èø›âO‡<-v,.§šïR8Å…Œ^lÇŒôè8õ"±›âWˆ�ó£øq¯=·$0ûøÎ>æ3ïøÐ£Ñ\NñSÚޢ4ÉÞ‘©žž©’ì}É霟Jí¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š£­jqhºþ©?ú»;w‡¨U'¥�pÞ/ñ­¯xŒxÂs.¶‡Õu5ÿ�—(Ž8Sÿ�=<wýJôžðF‰àÛ™l ì?}w( 4ǹfþƒŠÃøA£=‚ÓW¼%õ=rC¨]JÝ[y%? ¤ø®þ€ dÐÅq Ã4i$N0ÈêaèAëO¢€<³Ä>¹ðóx·ÀÈbH³&££>EÄCï_á`2F?CèZ³kâ ÏV²$ÛÝF$PÝTô*}ÁpkâÏŠl¼15ß…b´žâZh'„ÈÏ9ØÁaèAÏ׃àßu­~÷Åpiï«]C¡éÑÍqnµ6Ðûn+ÇN´ë^9ÕõøŠ�xvæKye_7W¾­­¹pï6QêqØøoÂÚ?„´Å°ÑìÒ€ßy«7RÈ®CàÕ´—^¾ñMÚŸ·k÷²ÜÈÍÔ"±TQì0ØúפP\·Œ|£øÆÛuÌ_gÔ¢Úê|²ÂýŽF7�qÁü1Öºš­¨¥ìšmÊiÒÅé„L…‘_¨Í�r|G©êV×úˆ@ö(‚á€ÀÜ”zäÆqQüEñEýŸØü-áßëd$Ë´<Ø�ãèOlWϺ¯‰||>"ÜÃ%Ķ!¹d°•-”G¿%Bãsòá‡8Ç8¯køafu/x§Ä3Iu%¤Ë¢ÛÏ)Ë…@vÉç,v±úš�êüà]'Á¶;mSí„£7Z„Ã3Nç’I<žßÌó]EP‰¼#¢x¿Ok=fÆ9×I@Ä‘Un£ùù®WÀ:¦«¢ë÷Þ׿{‰¬£é·¯ÖæÛ8Á=ÙxôÉôVÜTí 68$d_(|Gñ/ŽôÄÚµÌvºŠ2ZÝYÅ嬑>FàyÈ ž½{ÐÖV‚­5 ?éQj×SÜê-�’âK‡ÜûÛæ*Oû9ÛøVõ�QE�QE�QE�QE�QE�QE�U+­RÚÓQ±°}íqxÎ#UÚKoAÆ>¤{‘p¸É'ÐÑEQ‡SŠmnïJH³ZÁ Ã;ck,"®9ÎA‰³;u  ÔRd@##¨¥ Š( Š*–©©Å¤ÚÇq4r:Is·îÀÈieXÔœ‘Æçö  ´QY¶šåΑq©¹k{ki.#•¦ÀÙäÈñ¹8'Œ¡#Ú€4¨¢²õMr-2öÊËì×7W{Ù#„ *‰·{±vQµw®yÏ<@”TVÓ‹›Xg TJŠáK)##8Ê’àH÷ªòjqE­ÛiMžuÅ´·(à »chÕç9Ì«Ž=hí™q®ÚA©ZXòÉqvÖdÇ‚"”@ÓáòsÊ.x¨­:�(¢Š�(¢Š�(¬ÝC´ñ&‰q¤ß…µÆÝæ 7ÊÁ†éÊŠâáHxOþ{jÿ�øÔéW›ÿ�ÂðŸüöÕÿ�ð9¨ÿ�…!á?ùí«ÿ�àsP¤Q^oÿ� CÂóÛWÿ�Àæ£þ‡„ÿ�綯ÿ�Í@‘Ey¿ü) ÿ�Ïm_ÿ�šøRÿ�žÚ¿þ5�zEæÿ�ð¤<'ÿ�=µüj?áHxOþ{jÿ�øÔéW›ÿ�ÂðŸüöÕÿ�ð9¨ÿ�…!á?ùí«ÿ�àsP‹¾&i^ ñ†›¬C*[^BdQÂ"2Žqî2}©Þ(™|i E’ÎîÛW´•þÖ.Šª*4C¨Ù'ÌïŒb¼¯Ç.î<K§YxV †µ’×7w³–HŽìO=;�Mv^ð^—ð³Y±êW3ÞXÜùÒylSpx1µ½O'9õí@aº×<5á¨ÔilX[$` JL•PËjÔûOˆÿ�è¥àÊOþ1XÞ(ñ6•7†5ÒYË4D ÚÊ;ú•­øJ´ùíqÿ�€“ñ4ÅOñSTƒQ¾³ÿ�„fÝÚÎáí݆¦p̽HÌ=*ø¹©­Ê@|-çFqÿ�>ÊTùeþЮ:âà˯ë³Çk$RêS::YLÀŒEöª’Lÿ�ÚöÇìZ‡ú‰xû ÙûÑöÛŸò=hµÔþ3ßé:t·³øV#XÈ]O'’üò÷¬Mq-/µíGOðœ6Ók–â9¶êYHl²+‚wGL­r¾4•›ÂWÀÚ_F?wóKg*(ýâõfPmÁ3ýž/ôHüƒ¥„ÞŸîPï„|}{áï ÚhÖ¾ŽX¬wB$}KˆbIÇ•êk]¾.jkr A¹ÑœÄϲ•þY´+ƒÓ¦qÇú Ò$û¶3âöZ$™ÿ�µíصõñö³÷£í·?äzÐyqñwS¶·yŸÂÐA“Oÿ�µT¿ðµµ_ú ÿ�Á§ÿ�j¯>Õfs¥Ü±jäêÖ3ù•«žsÿ�ÏŽ¥ÿ�‚ùÿ�øŠ�šoÛx£Å–~ >‰uåá/ý¥&€÷\€Ä0>£Þ­øKÆw¾¶›K‡Ãéqö»™¯wÉ©cŠäq¸®/ÂÒ²Ük˜µ½|êRŸÝÚJûyèp§ØóZòLÿ�ÚöÇìZ‡ú‰xû ÙûÑöÛŸò=h¼¸ø»©Û[¼Ïáh  ÉƧÿ�Úª_øZÚ¯ý ÐàÓÿ�µWŸj³9Òîصòuk€üÊÕÏ9ÿ�çÇRÿ�Á|ÿ�üE�v|]ÔçWÂÐ|ŽÈs©÷óʹ_øÖ×Ä·š-ޱàè^à\ùÖÒ&¥ÏÈC:1ò¾ëü{Vn3ˆî?еþ‘'ݱ˜ÿ�²ÖF¹+xt›[Õ!罤ªÍò¯Ýr߆hÔî>.êvÖï3øZ¨2q©ÿ�öª—þ¶«ÿ�B´ø4ÿ�íUçÚ¬Ît»ö-@|ZÆ`?2µsÎùñÔ¿ð_?ÿ�@„u9Õð´#²ê}ÁÇüò¡¾.jkr A¹ÑœÄϲ•þY´+ƒÓ¦qÇú Ò$û¶3âöZ$™ÿ�µíصõñö³÷£í·?äzÐyqñwS¶æ CµN5>ôUzN“~5]ÇQXÌkwoá ÉPÊöÍ|õªJí¦\±j+Õ¬fó+^÷áhe¶ðŽ‹ñ¼SGa<n0ÊÂ5zhZŠ( Š( Š( Š( gWðÖ¡y¯Yê6:õå¤bà=ÄJ°C",´Ls¹†A8Ã9$Rë×¾(Óõ8´Í&à@5Íã1–®Xùk°ŒàœÈsŒî� ¼úÜ£Y—N‹G¿”D…À1,lvîw8cž!vƒÁ<ehþ7[û_*òÞ}jÔMÍMÞ[I·ïç•BÀã 6Òq@Ã|/¸k]AÞÎYn¦ ví©]í5 œJœà ÈA•¼¬G¨Æñiz$Ú}½µ´0Ù\ê7òžVÆ·cÎ!I'Ú7m]MCÇî¶]Ûèú‚Ù]h×:¢\o„:ÇFÁ€,ݤ˜¯ÜFÞ£âË}7\d¶Òöo2æ1Š?´JÑEœ¸n]HáN:ô |# M¡ Ä“LÒl’B»M‹3¼¤nËHÌŠIäc;\³gŽfëÁž#{ÍJx¬4÷v·!¹’5& †”±–‘X#g8ÇV¥Ò|ki­kI§ZiÚ‡—"ÎñÞ8ˆBâ'ç÷Œ3‚ òNj¼O5®·¬éïæ§r·å--m–0ë Û[;œ³"à4ÝIÏÎ4_GðOögnu¯²ÚÅ–+¥»˜H!+…‡Èâ0«ÆO�| óTnü¬Mâ›­VÞ &ÙçÔe½Ißí Z}Ÿn<®»±.ÝØÈ÷®ƒKñ¶µsåiºn£qrùSD[IGÞŽ@Îr÷ÚV¢Og¤^K5¾¥Ÿ5«´AÃHÑ ƒæm9®>n¤Œ�`ÃðÚX¼%s¤Çccžâ9®mSSºh¯6ä>ùÍ샅•,:H~Ë ¤m Ž™-åµå¥Å‹Os+8¡xÙ IY¶óq“!ù@�Vå·Œ•ÒH¡Ó5=Bê)'3Ån"f…âX9d… –!yòdÓüq§êz¤–Ö—­Ä« 7¥SÉwkqr |ûùˆç%qØàÐ9§ü5’ÞöI®mì¦Üù—Ì÷“Éý¨Ÿ6ß66«`¨ Š×ƒÁó¯ÃcÂÍ„ãí©f±±x£Y]Þ,‚ƒiRà` ƒØiê^.µÓno¬o§¶°ÇÛ®áD1ZåCüù`ÇÊÇj¶æ«x;RÕ5—Õ/µ½‚!y=½½¼¾G”«¯T¦_wɆÜqŸ»Ç4¨x"úòâR–:<~tQ%µÈ‘ĺ>ÈÕvÛA]Øù' Ž+_[ðõÅ÷Œ´Íf=+H»ŽÎÎh·]¹YŒÈÈËû¶û¥ÎAccÐêh:üü7o ½Å»Ú\ybŸfåmŠÿ�ÀÌ1µÔõö8"£´¼ºoj¶NÏk¥ÄHUFÆw¸VÁ$uÏz�ám|â—M’[ îì-tËxgû\…—ì²–vSääyˆBŸAÇ"·ô/Í¢xƒLÔRÛO2¥„öºâ» îÝÚ&YXlù‰1¶An7ðH¨5ψzv§©$:¶šM•…ÑK:yÓ\Ç´…+Ãø” ù#i¨µ ýKñ…áïíén[[3_xCZyK¹¶�›pù »Ã`÷4�ÍSÀ·—>#¹º‹HÐn¬.55Ô&[™YP- 7Q³É’O,xÉ&£Ñ~êÚ®‰¨j±Y]]iö¶ð-Êê­üµÁYãqÝŒ9Ü�®»Ã·wSiÙ^\™4ëÃl.YULÊbŽ@HP#ÌÚp�ÊžmPEPEPEPEPEPEPEPEPY?ò8é¿ö»ÿ�Ñ–õ¯\ö­a¡âÍ.9žáUlnØ.d„ÿ�¬·êQ#Ú€,x·þEMKþ¸Ÿæ+f¹øzÊ/ j³êd¬D€Ú˾†LØÿ�„jÇþ{ê¿ø6ºÿ�ã”�ß ÿ�¨Ô?ì#qÿ�¡šuÏüŽ:oýƒîÿ�ôe½cøÃÖRA~Z}LbþáFÝNåx}$äûÓ®<=d<Y§Gçê{ZÆé‰þÔ¹Ï[÷ó2=;ñè(3ãoü’wþÝÿ�ô¢:î4ÿ�ùÚÿ�×þB¼Ûã‰igð§Zž)µuò0%Ô'•yž1ʳz÷ÙXørÅ´ûbgÕ2bSÆ«r;úi@xoýF¡ÿ�aý Ó®äqÓìwÿ�£-ëÃþ²’ òÓêc÷ 6êw+Àsé''Þqáë!âÍ:??SÚÖ7LOö¥Îx’ß¿™9éßA@ž-ÿ�‘SRÿ�®'ùŠÙ®CÅ>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�qß ?ä%ãÏûn¿v7?ò8é¿ö»ÿ�Ñ–õç¿ 4[[CÆÂIoÀ‹Ä71¯—<y�ÿ�×¹É÷®²ãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€5<[ÿ�"¦¥ÿ�\Oó³\‡Š|=e†5Yõ2V"@mNå‡_C& lÂ5cÿ�=õ_ü]ñÊ�o†ÿ�Ôjö¸ÿ�ÐÍr:ÿ�’¯ðßþ»_è´­ŸøzÊH/ËO©Œ_Ü(۩ܯϤœŸzå|k¢ÚÃñ?áô -ùI¥½ ^þvaˆÓî±rWþF{Рx·þEMKþ¸Ÿæ+f¹øzÊ/ j³êd¬D€Ú˾†LØÿ�„jÇþ{ê¿ø6ºÿ�ã”�ß ÿ�¨Ô?ì#qÿ�¡šuÏüŽ:oýƒîÿ�ôe½cøÃÖRA~Z}LbþáFÝNåx}$äûÓ®<=d<Y§Gçê{ZÆé‰þÔ¹Ï[÷ó2=;ñè(SÅ¿ò*j_õÄÿ�1[5ÈøŸÃöPøfþE›R,±dÔîXuAƒø×]@Q@Q@Q@Q@­¡ií­.®ÑÌo•&âO,¥7÷lÝ´‘»ÁëYiàưˆ­¯#òR£r¦0¡€ÚD™VeÈçi+ÓŠÅñ'ŒÓCñ.§i¡¤Ãv"ÓV1t`%¸‘$݆V!•ñž7gøª¾Ÿã=B÷RÓg[ý>â/³ê±ËmkÅÜÖò¢Æ#&Cµ™0àß.î¹@:i| áù´›M2K[ƒiio%¬(/gC&7ÆX>æSµFÒH@À¥¹ðN…w7<W¯!H±Ôn"º,þó’­ódó’IÉ$׿5Øôxn®¯|0÷EÕ™šá _-œ#ÆJ³I•Á IÉ^€Û¶ñÆ¿ý£§Ã¨\xnʲEqyö‡’9_zîf…Ae)!‰oàbJŽhOÞÔôÝtjw?e¶•‹›§·º–¶gq�‰y`3nÀféŒàœëÍà­ k˛Ƃén®fóÞhïçG·i(Êà¦T�BàªBŒeGãÇÂi<_%ÖšÓ?íHH…eØ?r~rKy™N äŒŽißøÞþÖæu†ûG”ĉ-­©‰üÝ]CƒlD„Á€ùe$í€:H< ÚÜíìšdØëò*IÆ2èk·ûL {Ó ðV…oa=”V÷"Þv‰äS{;ñ•(Á‹ä0ØŸ0 áTg�V[x“^S{µ·.·Ùï[g+æ°[¶w}Ï/;ý¸éWüU¯Ï¢Ëa ÞXiÐ܉ ê:Š‚&]»P€é†mǰ!êp(cð‡¢R#·»B]Ýu €Ï½·:³y™e,K'nYŽ2Nd‡ÁZ½üw°ÛOÑÜ‹¤ y0E'–Mûq³äÆ1·Œb¹/ê-â_ˆßhԧҌ֚to›@ZE&YÔË gÊn çnJI8êljzÝÌž*Ðnõ:ÓO·Ö®mÒÝ‘…•·¸EvrØÃõ 'zrsŠ�ëo|/£êí{sjí+…ªÏ"G6ÞždjÁdÇû@Ôºo‡ôí"ÊâÎÎ9ŽÄ$‰-̲園äbFI$ã’zšà­<{w¨M¦ÈÚÖ•ë" äŠ#¶{f´i¶ù„Œ¸hÁÉ˨㠡é¼â£âX55ÕŒòÛ\íÑ$-2¾Òì@ÜιÏ%B�º7‡tÍ�J4èçŒK·x’êYwAùØó´ž¸U�Äoá›y©_B×QßjyÍöÉÎgnѼlÁbFݤdàŒšóéþ%=–1ÓµM�´ «\ÊŽ™2.q�’.T}ÙÁÉù°s]w|Xt Ǩé×6M<ÀÉl“)uº ìB~fÀÁÉö Ò€7!Ñ­Sìo7™uqkhÖ‹=Ög¶oßÙ‹Ð’GosT#ð^ƒRƶ’Ÿ0*‡{¹™â r¢6-º0 !­«{ˆ.í㸶š9 •CG,l]OBàŠ–€)éš]ž‘iö[(™#Ü]‹ÈÒ3±ä³3ÌO©$ÕÊ( Š( Š( Š( Š( Š( Š( Š( Š( ¹íYï£ñf–l-íç“ì7{–yÚ ™oÈ!'ÛÐ×!â¯hÞñ‘y­Þ‹Kym.âG1³å·Àqò‚zùPâ›|øcPéšb§”rWP‘ˆçÓÉζ>Óâ?úi_ø2“ÿ�ŒWâ/‹ž¾ðõõµ¶¾4‘íEû<Ã'ñJÓÿ�…Ïðûþ†(ÿ�ðoþ"€.ø~ã__ùzf˜Ãí÷ݨH0wœõ'zuÅLj?á,Ó‰Ó4Ï3ì7X_í0G™o“Ÿ#ƒÓ·sÓóº'ÅÏÚCz³ëè†KÙå_ôyŽUœxOJYþ.øüKcvºú#³¸ßìópÌð•s¸Fü¨ŸæÖŸáN´·z~ŸÈÜñ_<Œ?0¦%œwÙXÜx‹û>Ûn—¥‘å. Ô¤‡ý0¯1ø§ñ7ÁÞ!øo«izV´—³ù>\B WvÙ‘, tõ®®Ïã€"±·üB–5R>Í7÷(OÃ÷ø‚ÿ�ËÓ4Æo¸ÎíBAƒ¼ä©<{Ó®.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çÑ>.xÒÕŸ_D2^Ï*ÿ�£Ìr¬äƒÂzRÏñwÀâ[µ×ÐÁÄnÿ�g›†g„¨ûÂ7å@þ)¸×φ5.™¦*yG%u Ž}<‘üëcí>#ÿ� V•ÿ�ƒ)?øÅpþ"ø¹à[ï_[[kèóIÔ_³Ì2­?ø\ÿ�¿èbÿ�¦ÿ�â( á„ÚÊê6û5…„„ø†äÊ$½tÚùä.";‡¹ÇÐWYqqâøK4âtÍ3Ìû ÖûFLæ[äçÈàôíÜôÇ>sð÷âW„t[ïI¨ë ßk—VÄÁ#y‘1ù[…8Ï¡Á®–‹¾ØÝ®¾†ìî#wû<Ü3<%GÜî¿*�ßñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+‡ñÅÏßxzúÚÛ_GšHö¢ýža“ø¥iÿ�Âçø}ÿ�Cø 7ÿ�@|?q¯ˆ/ü½3LaöûŒîÔ$;ÎGú“ǽr¾5›Y?þ4Ö 8–÷ÉD½vWýÚgs_ÀûU­âçm!½YõôC%ìò¯ú<Ç*ÎH<'¥s~-ø•áKâ‚5;Ma%³Ó¤»k¹|‰–/rrAéš�ôOÜkçÀ—LÓ<£’º„ŒG>žHþu±öŸÿ�Ð+Jÿ�Á”Ÿüb¸|\ð-÷‡¯­­µôy¤j/Ùæ?ŠVŸü.‡ßô1Gÿ�€ÓñwÃ÷ø‚ÿ�ËÓ4Æo¸ÎíBAƒ¼ä©<{Ó®.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çÑ>.xÒÕŸ_D2^Ï*ÿ�£Ìr¬äƒÂzRÏñwÀâ[µ×ÐÁÄnÿ�g›†g„¨ûÂ7å@‰î5ãá›ñ6›¦¤f/™“P‘ˆ„gó×W˜x‹âço¼={km¯£Í${Q~Ï(ÉüR½5ddC•`> Ð¨¢Š�(¢Š�(¢Š�(¢Š�F%Q˜)bBŒdûsU4JgE±Õ-ÕÒÛxî#Y� Ô0Œà×;uáÛã⫽XiúF¡»l¶sÞHë5£,`yi„`˜, ¹;[�W5¥ü:Õtý:(†„’ÛC¦IŽwÃÝZJYä'ÊùLˆÅ 0G@ûXÑ?µ¤¶‘u+Û'ƒpfòʸld2ÈŒ§§8<šÃ¦Æot«%…4Û£ži{º,ÅÁç>p=¹'\%ÿ�ÃR}-,aÓô‘ZêQ[î™Ô[És?› y@`c“ŒUÙ<â+Ï_jWVš07W^lgí²Èm3qy±©„5| À÷Î2¸É�ôbHR@$ÐwªšF¥³¢Øê–êé í¼w¬€ ê‚Fpk‚ѾEf±Gw¥ig‰ Ń^Oqó0P.š�ÃnÞ7“¸+jÛÂ×rx/ú.¢–rÿ�g,1ÝÛyŒð]$q”�’ ‘‚¸Êàäs@•©Å«YµÌ1É­Äöåd;¢•¢n„ŒnClUˆn`¸’xâ•]à“Ë”àm¡°}ö²ŸÆ¼èøZ†ËM³µ±Ðã‡MÔ¥¼µ"w ›¡:ƧÊ;ALÆqÐsóVŸ¯øQÔOˆ"³²Ñ5{•¸ûLŒÂX˜[ˆÁŒä¬œsϘÇ*y Er^3Ðu_xf=:;}1'”1”Í+0·r„+ÄÞ_ÌUŽFBŸB¦³uß kºÔþ ™´Ý eÔ4ˆì­îÝš‡˜óäð13`ŽO–½7| ýÂßøvýuý/YþÏЭm4è÷L©+)ØÑÈ&>W( ›ÇMÅyPNEïi±ÚiòOñ\Úmôéc}‘YŒc=ðXŒŽU>ôÖU6ÔíÖcHf0D»Ô™\Gæ¸<á±÷OlË·˜jo,S[¥™¸”Ly?eœž"}ZQ‘ýÑÅU¼ðž¯>¹6¤4ý+Z]JÑ'¸q•žFùGcHäÝÈìTÙi”:΋cª[«¤7¶ñÜF²�+¨` ÁªWž'Óì›Rç?özÄeòÓ;žBBF¾¬H>aÏ\`x ÂZ…¤)qk¥Ãi¶¶Ò9Œ³Ã¼4¬ j2ÁÇ9'äžÄ¾Õ ÕÑO]MlÚ[h®R›ˆ¦y¿xR%b»¼³Û‰/»<P‰ñ¤"ál±µC«ŸìÜCçÆ|Ìùž^ÎÙß׎¼VAªéñ^Ûòä‡e ÊGb Q\˜ðÿ�ˆ¿á(o´¿íO²ýlþÕ'“ö}Ûÿ�Öùyß¿Ÿ¹Ózè¼=¦Í¤èÉmq"IpÒÍq3Fß2YWÛžq¹Î=¨RŠ( Š( Š( Š( Š( Š( Š( Š( °u+;[ßéqÝÛC: ¶ *�ù–üàÖõsÚµ„:‡‹4¸æ{…U±»``¹’þ²ß©Fj�¯â­HÂúƒ¦•b¬"8e·@G?JØþÀÑ¿èaÿ�€ÉþƒâŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€3|=¡éþý*ű¨\›t8ÎJuÆ…¤iÈ4«†Âè•û:`‘%¾OsùÕøzÊH/ËO©Œ_Ü(۩ܯϤœŸzuLJ¬‡‹4èüýOkXÝ1?Ú—9âK~þf@ç§~=�`|fÑôË_„úÜÖúu¤2¯‘µãU‡ïã+³°Ðtc§[¤Øb\“lžƒÚ¸Œz%¥ŸÂjx¦Ô×ÈÀ—PžUæxÇ*ÎAëÜWecáËÓ퉟TɉO­Èì?é¥�Uðö‡¤<ûô«Æ¡pmÐà8)×<]§ Ò¬v ¢Wìé‚D–ø==ÏçUü?áë) ¿->¦1p£n§r¼>’r}éײ,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøô'Š´="? êšUаˆá–Ýý+cûFÿ� E‡þ'øVŠ|=e†5Yõ2V"@mNå‡_C& lÂ5cÿ�=õ_ü]ñÊ�à¾imÆ£ã6Ÿi(ÄW(áVØ ðGÚºÛ H.ÓiV; …Ñ+ötÁ"K|žçó®7ᆋks¨xØI-øx†æ5òïç âÚãq÷9>õÖ\xzÈx³NÏÔöµÓý©sž$·ïædzwãÐPž*Ðôˆü/¨:iV*Â#†[tsô­ì þø ŸáX>)ðõ”^ÔgÔÉX‰µ;–} ˜5±ÿ�Õü÷Õðmuÿ�Ç(7ÃÚð_ïÒ¬[…À·C€àt®SÆúF›Å‡Ç§Ú$RË{æ"¡_¦21Ít¾ðõ”_–ŸS¿¸Q·S¹^ŸI9>õÊø×Eµ‡âÃè[ò“Kz½üìçÝbä¯üŒ÷ ÃÅZ‘…õM*ÅXDpËn€Ž~•±ý£Ð"Ãÿ�“ü+Å>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�fø{CÒ ýúU‹cP¸6èpœ”ë H.ÓiV; …Ñ+ötÁ"K|žçóªþðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �“ÅZ‘…õM*ÅXDpËn€Ž~•Ô��� Ð ä¼Oáû(|3"Í©X²êw,:Ž ÈAük® Š( Š( Š( Š( zÿ�ʼnaâK} ´mRiî@hf‰#1:ñ¸î. žrôÎF`ñWŠìô;«+95k ^hd˜ÝLˆLP¬1䟛'° x8­«­"Êötšá$i#‘$F:ìeÎÁûÄuÏ9©¯lmõ¨üÈÖXæqxÝdCÇ£*Ÿ|sÅ�yî±â½_Oð¶£ã+mCíVÐ^Ko˜‘Æb’5˜Â¬.òÄ&wciéÞº].]OOñ¶—}ª¾¨·v2]y¯iå<o»~FóxÎOÊy5v_ hÓêgP–мÅü†gò‹ãnóí…±Æí¹÷§é^Òôi¤šÊ GAén$”ªˆ»Øì_öWÚ€0åñå¾df¸Óõ+¿o–S”ÞTV³˜åc–\…Êà�I§9eçÄÓoõKK V¸’Öð[A„ q$ãÊŽF`ªÙ|Å$œpëÔä mðïÃN’£Û^²J³#«jw$˜†”¬èäGsÍ[—Áº$ÓµÃAr'gG2¥ôèû•`î%TŸâ�nÎ(ž¡ã»;ô³KÔîå"ßÌò£<“;mˆ8‘ЂOŽø¨íþ!XÝÚ-[û<sà W/gåÃre•bV‰Ø€Ãs/§8#5OXðmþ¡¯ý¦Ý--ã…#Kź—̳ ¸â¦6 ³`î^s¯?|?qDö×K˜N+ûˆÂ8mÃ`Wì6*§�€ šŽ¼, ¤+§^Ý_]FÒ¥œ_˜vï$³„K¨?7%†3Xv^-¹‡_Õtû» Fà5÷•eµa[ìQÜyÞ>~% ž:Ý+¢Õ4-?X{i/"ËlÅ¡–ä…Ó=@d`pp23ƒš£‚ô8u¿Ž •¸[¯¶öéö‰vlÝ·~ÜlùqŒmãâ€(Åãû)¬Ôz^¤Ê`°¸‰vźU¼m‘mýçPà«g#ŒŽj¬þ6Û«iW  m®­o£m9b¥70ÜC\ƒ€Aiwíïž•¦¾ðê[‹t´¹X‡’�[éÆ,^ ü€ŒÄ¨è8ÇAQ7ÿ 3Ö×§+*àêw8Ä­¾N<Ì|͆>à P–—®K©ßOnÚ=ýšBe¹1�Xm ®Íë‚@ ‚F kÖ%·„ô›F¢[Ýó@Ð3¾¡;²£cvÒÎJ´Ë‚HœÖßA@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sÚ³ßGâÍ,Ø[ÛÏ'Øn÷,ó´@2ßB6O¶+¡®wWÔm´ßiRÝ3ª5Ú‘3ó¾ß²ƒ@¼Sq¯Ÿ j]3LTòŽJê1úy#ùÖÇÚ|Gÿ�@­+ÿ�RñŠÆñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰  ŸÜkâ ÿ�/LÓ}¾ã;µ ó‘þ¤ñïN¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzc–xÄÚTP_†–qºþá†-e<?ìÒÜx›J>,Ó¤Oµln”ÿ�¢ËÔÉoŽ6û�ç~1Í­?Âinôý>(‘¹â¾y~þ<aLJ8î+²±¸ñö}¶Ý/K#Ê\©H;úa\_Æ/i×ß µ«x%™¥#hkyq<g©P;Wecâ%tûe3O‘ƒþ‰/ ÿ�f€(ø~ã__ùzf˜Ãí÷ݨH0wœõ'zuÅLj?á,Ó‰Ó4Ï3ì7X_í0G™o“Ÿ#ƒÓ·sÓ³Ãþ&Ò¢‚ü4³×÷ 1k)à¹ÿ�f–ãÄÚQñf š}«ct§ý^¦K|q·ØÐâ›|øcPéšb§”rWP‘ˆçÓÉζ>Óâ?úi_ø2“ÿ�ŒV7Š<M¥MáB4–rÍ6²Žþ¥k_þ­#þ{\à$ßüM�yÿ�à µ•Ô<mök ñ É”IzéµóÈ\Dws ®²âãÄð–iÄéšg™ö¬/öŒ˜#Ì·ÉÏ‘ÁéÛ¹éŽy/†:öi¨xÙ¦’P&ñ ̉¶ÞFÊ“Æp¼}5ÕÜx›J>,Ó¤Oµln”ÿ�¢ËÔÉoŽ6û�<Sq¯Ÿ j]3LTòŽJê1úy#ùÖÇÚ|Gÿ�@­+ÿ�RñŠÆñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰  ŸÜkâ ÿ�/LÓ}¾ã;µ ó‘þ¤ñï\¯fÖOÄÿ�‡Í5…‚N%½òQ/]•ÿ�v™ÜÆ Wð>ÕÔøÄÚTP_†–qºþá†-e<?ì×+ã]{NŸâwÃûˆä”Ç·†Bmäf4Æ\ŸÃ4Õø¦ã_>Ôºf˜©å•Ô$b9ôòGó­´øþZWþ ¤ÿ�ãâiSxcP%œ³D@ͬ£¿©Z×ÿ�„«Hÿ�ž×ø 7ÿ�@>¸×Äþ^™¦0û}Æwj ç#ýIãÞqqâøK4âtÍ3Ìû ÖûFLæ[äçÈàôíÜôÇ,ðÿ�‰´¨ ¿ ,ãuýà ZÊx.Ù¥¸ñ6”|Y§H&ŸjØÝ)ÿ�E—©’ßmö4�¾'¸×†oÄÚnš‘˜¾fMBF dtŸÌW]\‰üK¥Ïá«ø£–rï�6²œŽåq]…�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘sÿ�#Ž›ÿ�`û¿ýoZõÅøÇšw‹üA£Øêmr°Åku2ýžcÜɰM�mø·þEMKþ¸Ÿæ+f¼—Äü/a ^ÝC.¨dŠ=˺õˆÏ¸­/øRÿ�žÚ¿þ5�uþÿ�Q¨ØFãÿ�C4ëŸùtßûÝÿ�èËzóÍàß…ï"¼ieÕ3äÑ.ÛÖ*±ñ¥›à×…ÓÄvV‚]WÊ–ÒâVÿ�Mlå^0}>súPÏÆßù$:ïý»ÿ�éDuÜiÿ�ò µÿ�®)ü…xÄï…žðßýWV±“Q76þVÁ5Û:üÒ¢œƒ×†5ÔZ|ð¤¶PHÒêÛž5c‹æêE�v¾ÿ�Q¨ØFãÿ�C4ëŸùtßûÝÿ�èËzóÍàß…ï"¼ieÕ3äÑ.ÛÖ*±ñ¥›à×…ÓÄvV‚]WÊ–ÒâVÿ�Mlå^0}>súP x·þEMKþ¸Ÿæ+f¼—Äü/a ^ÝC.¨dŠ=˺õˆÏ¸­/øRÿ�žÚ¿þ5� ?ä%ãÏûn¿v7?ò8é¿ö»ÿ�Ñ–õã^ø_áýr÷ÅqÝɨÓõ©í!ò®™rŠxÝê}룛à×…ÓÄvV‚]WÊ–ÒâVÿ�Mlå^0}>súP x·þEMKþ¸Ÿæ+f¼—Äü/a ^ÝC.¨dŠ=˺õˆÏ¸­/øRÿ�žÚ¿þ5�uþÿ�Q¨ØFãÿ�C5ÈxëþJ¿Ãúí}ÿ�¢Ò³toƒ~¼Šñ¥—TÌw“D»oX|ªÄƹß|/ðþ™ãïivòjßS’ég/tÌÀ")On§4ì~-ÿ�‘SRÿ�®'ùŠÙ¯%ñÁ¿ Øh·P˪"rî½b3î+Kþ‡„ÿ�綯ÿ�Í@†ÿ�Ôjö¸ÿ�ÐÍ:çþG7þÁ÷ú2Þ¼óFø7á{ȯYuLÇy4K¶õ‡Ê¬@üifø5átñ• —Uò¥´¸•¿Ó[9W„ Oœþ”è-ÿ�‘SRÿ�®'ùŠÙ¯%ñÁ¿ Øh·P˪"rî½b3î+Ö#b‰#\íE 3è(ÔQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÏjÏ}‹4³aoo<Ÿa»Ü³ÎÑ�<Ë~AÙ>Ø®†¹Ý_Q¶Ó|Y¥KtΨÖ7j6DÏÎû~Ê �RñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+Å&Ò¦ðÆ¡K9fˆ›YGRµ¯ÿ� V‘ÿ�=®?ðoþ&€2|?q¯ˆ/ü½3LaöûŒîÔ$;ÎGú“ǽ:âãÄð–iÄéšg™ö¬/öŒ˜#Ì·ÉÏ‘ÁéÛ¹éŽYáÿ�iQA~YÆëû†µ”ð\ÿ�³Kqâm(ø³NM>Õ±ºSþ‹/S%¾8ÛìhøÇ6´ÿ� u¥»Óôø >FçŠùäaûøñ…1(<ã¸®ÊÆãÄ_ÙöÛt½,)pN¥ ì?é…q¼A§_|*Ö­à–f•ü¡­äQÄñž¥@í]•Št•Óí”Í>DJú$¾ƒýš�£áû|Aåéšc·Ügv¡ ÁÞr?Ôž=é× ÿ�„³N'LÓ<ϰÝa´dÁe¾N|ŽNÝÏLrÏø›JŠ ðÒÎ7_Ü0Ŭ§‚çýš[iGÅšt‚iö­ÒŸôYz™-ñÆßc@Šn5óá@K¦iŠžQÉ]BF#ŸO$:ØûOˆÿ�è¥àÊOþ1XÞ(ñ6•7†5ÒYË4D ÚÊ;ú•­øJ´ùíqÿ�€“ñ4çÿ� &ÖWPñ·Ù¬,$'Ä7&Q%ë¦×Ï!qÜ=Î>‚ºË‹ÂY§¦ižgØn°¿Ú2`2ß'>G§nç¦9ä¾ëÚu¦¡ãfšI@›Ä72&Ûy*OÂñô<×Wqâm(ø³NM>Õ±ºSþ‹/S%¾8Ûìh�ñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+Å&Ò¦ðÆ¡K9fˆ›YGRµ¯ÿ� V‘ÿ�=®?ðoþ&€2|?q¯ˆ/ü½3LaöûŒîÔ$;ÎGú“ǽr¾5›Y?þ4Ö 8–÷ÉD½vWýÚgs_ÀûWSáÿ�iQA~YÆëû†µ”ð\ÿ�³\¯uí:‰ßî#’SÞ ·˜Ór ÐWâ›|øcPéšb§”rWP‘ˆçÓÉζ>Óâ?úi_ø2“ÿ�ŒV7Š<M¥MáB4–rÍ6²Žþ¥k_þ­#þ{\à$ßüM�dø~ã__ùzf˜Ãí÷ݨH0wœõ'zuÅLj?á,Ó‰Ó4Ï3ì7X_í0G™o“Ÿ#ƒÓ·sÓ³Ãþ&Ò¢‚ü4³×÷ 1k)à¹ÿ�f–ãÄÚQñf š}«ct§ý^¦K|q·ØÐøžã^>¿iºjFbù™5 ‘ÐF1]uqþ'ñ.—?†¯âŽY˼X�ÚÊr;•Åv�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VEÏüŽ:oýƒîÿ�ôe½k×=«XC¨x³KŽg¸U[¶ ™!?ë-ú”`Hö  -ÿ�‘SRÿ�®'ùŠÙ®CÅ>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�7Ãê5ûÜèfsÿ�#Ž›ÿ�`û¿ýoXþðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �ÌøÛÿ�$‡]ÿ�·ý(Ž»?þA¶¿õÅ?¯6øÇ¢ZYü)Ö§ŠmA|Œ u å^gŒr¬ä½ÅvV>±m>Ø™õL˜”ñªÜŽÃþšPÞÿ�Q¨ØFãÿ�C4ëŸùtßûÝÿ�èËzÇðÿ�‡¬¤‚ü´ú˜ÅýºÊðúIÉ÷§\xzÈx³NÏÔöµÓý©sž$·ïædzwãÐP§‹äTÔ¿ë‰þb¶kñO‡¬¢ðÆ ë>¦JÄH ©Ü°ëèdÁ­øF¬羫ÿ�ƒk¯þ9@wÂù xóþÆ[¯ç]ÏüŽ:oýƒîÿ�ôe½yïà ÖçPñ°’[ð"ñ ÌkåßÏ@?ŵÆãîr}문ðõñfŸ©ík¦'ûRç<IoßÌÈôïÇ   Oÿ�È©©×üÅl×!âŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€á¿õ‡ý„n?ô3\‡Ž¿ä«ü7ÿ�®×ßú-+gÃþ²’ òÓêc÷ 6êw+Àsé''Þ¹_è¶°üOø}Ë~RioC¿˜b4û¬\•ÿ�€‘žôè-ÿ�‘SRÿ�®'ùŠÙ®CÅ>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�7Ãê5ûÜèfsÿ�#Ž›ÿ�`û¿ýoXþðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �ÔñoüŠš—ýq?ÌVÍr>'ðý”>¿‘fÔ‹,Yõ;–GPd þ5×PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\O`ñEÆ¿£§….ôûkÑktd{å% { È�)ç;#]µsº¾£m¦ø³J–éQ¬nÔl‰Ÿöý”�àuý;ââè7{­xm턼Xã}Ä{|•¥ý™ñ›þƒ¾ÿ�¿RñºÞñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰ 8Ñ´ï‹ßÙ5¯ ª‹É„›ã~dÜwòtÏJY´ï‹¿ð‘Y+ë^7fÒàÆÂ'Ú|;Áù:ä¦>†ºÿ�ø›JŠ ðÒÎ7_Ü0Ŭ§‚çýš[iGÅšt‚iö­ÒŸôYz™-ñÆßc@gñ.Çâl?µI<C«h3éCÊóãµÄûÔÛŒ {o~™®žÓMøÆlà1kžùk´Ÿ cùgKñ‹Äu÷­jÞ fi_ÈÚÞEOêTÕÙXø§I]>ÙLÓäD ÿ�¢Kè?Ù FÓ¾.4WdÖ¼6ª/&où“qÜGÉÓ=)fÓ¾.ÿ�ÂEd¯­xlÝ›KƒŸhMðïäë’˜úëü?âm*(/ÃK8Ýpòž Ÿöin<M¥iÒ §Ú¶7JÑeêd·Ç}�qÚþñqtƽּ6öÂ?Þ,q¾â=¾JÒþÌøÍÿ�Aß ß©?øÝox£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐŒxËâL·ž).«¡Ã"kS­ñ¸È{Œü̘CòútúWC6ñwþ+%}kÃfìÚ\ØDûBo‡x?'\”ÇÐÔ¿ uí:ÓPñ³M$ Mâ™m¼•'Œáxúk«¸ñ6”|Y§H&ŸjØÝ)ÿ�E—©’ßmö4ÇkúwÅÅÐo÷ZðÛÛÿ�x±Æûˆöù+Kû3ã7ý|1ÿ�~¤ÿ�ãu½âiSxcP%œ³D@ͬ£¿©Z×ÿ�„«Hÿ�ž×ø 7ÿ�@q£iß+¿²k^U“ 7Æüɸî#äéž•Ïø¢ËâJxóÁ©©jºš›Éuý$1¸Ž2wùŸ ÎF1€kÔ<?âm*(/ÃK8Ýpòž Ÿök•ñ®½§Oñ;áýÄrJc‚[Ã!6ò3c�®Oáš�‡_Ó¾..ƒx×º×†ÞØGûÅŽ7ÜG·ÉZ_ÙŸ¿è;áûõ'ÿ�­ïx›J›Ã„i,åš"meýJÖ¿ü%ZGüö¸ÿ�ÀI¿øš�óNø¸Ñ]ý“ZðÚ¨¼˜I¾7æMÇq'Lô¥›Nø»ÿ� ’¾µá³vm. l"}¡7ü“®Jcèk¯ðÿ�‰´¨ ¿ ,ãuýà ZÊx.Ù¥¸ñ6”|Y§H&ŸjØÝ)ÿ�E—©’ßmö4ÇkúwÅÅЯûZðãÚˆÿ�x±Äûˆöù+×£"A!M£q ï\‰üK¥Ïá«ø£–rï�6²œŽåq]…�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘sÿ�#Ž›ÿ�`û¿ýoZõÏjÖê,Òã™îVÆí‚æHOúË~¥=¨Ç‹äTÔ¿ë‰þb¶kñO‡¬¢ðÆ ë>¦JÄH ©Ü°ëèdÁ­øF¬羫ÿ�ƒk¯þ9@ ðßúCþÂ7ú§\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö?‡ü=e$å§ÔÆ/îmÔîW€çÒNO½:ãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€3>6ÿ�É!×íßÿ�J#®ãOÿ�m¯ýqOä+;1è–– u©â›Pg_#]ByW™ã«9¯q]•‡,[O¶&}S&%<j·#°ÿ�¦”7†ÿ�Ôjö¸ÿ�ÐÍ:çþG7þÁ÷ú2Þ±ü?áë) ¿->¦1p£n§r¼>’r}éײ,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøô©âßù5/ú☭šä<Sáë(¼1¨:Ï©’±jw,:ú0kcþ«ùïªÿ�àÚëÿ�ŽPð£þB^<ÿ�±–ëù×csÿ�#Ž›ÿ�`û¿ýo^{ðÃEµ¹Ô<l$–ü¼CsùwóÇñmq¸ûœŸzë.<=d<Y§Gçê{ZÆé‰þÔ¹Ï[÷ó2=;ñè(SÅ¿ò*j_õÄÿ�1[5Èx§ÃÖQxcPuŸS%b$ÔîXuô2`ÖÇü#V?óßUÿ�Áµ×ÿ� øoýF¡ÿ�aý ×!ã¯ù*ÿ� ÿ�ëµ÷þ‹JÙðÿ�‡¬¤‚ü´ú˜ÅýºÊðúIÉ÷®Wƺ-¬?þ@²ß”š[ÐÅïçf>ë%à$g½�z‹äTÔ¿ë‰þb¶kñO‡¬¢ðÆ ë>¦JÄH ©Ü°ëèdÁ­øF¬羫ÿ�ƒk¯þ9@ ðßúCþÂ7ú§\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö?‡ü=e$å§ÔÆ/îmÔîW€çÒNO½:ãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€5<[ÿ�"¦¥ÿ�\Oó³\‰ü?e†oäYµ"Ë@}Nå‡QÔ?uÔ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�W=«=ô~,ÒÍ…½¼ò}†ïrÏ;D�ó-ù#dûbºä|SâmÂÞ$Ò/5»å´·’Îî$vF`[}¹ÇÊ`*�OÜkçÀ—LÓ<£’º„ŒG>žHþu±öŸÿ�Ð+Jÿ�Á”Ÿüb¸ŸüXð5­­üA “IÔQ ƒ'ñZÔÿ�…Åàúáÿ�¿2ÿ�ñ4kÃ÷ø‚ÿ�ËÓ4Æo¸ÎíBAƒ¼ä©<{Ó®.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çŸÐþ,xÖÕŸÄ¡’öyW0Éʳ’Ýô§OñgÀÍâk¥ñ&ìîcwòdá™à*>ïpùP?æÖŸáN´·z~ŸÈÜñ_<Œ?0¦%œwÙXÜx‹û>Ûn—¥‘å. Ô¤‡ý0¯4ø«ñ'Âÿ�Ãm[LÒõ¨®ogò|¸–)m³#JÐøWWgñÀQXÛÆþ"„2ƪG“/÷hCÃ÷ø‚ÿ�ËÓ4Æo¸ÎíBAƒ¼ä©<{Ó®.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çŸÐþ,xÖÕŸÄ¡’öyW0Éʳ’Ýô§OñgÀÍâk¥ñ&ìîcwòdá™à*>ïpùPçŠn5óá@K¦iŠžQÉ]BF#ŸO$:ØûOˆÿ�è¥àÊOþ1\Oˆþ,x÷Ã×ÖÖþ †I¤j(†A“ø­jÂâðý pÿ�ß™øš�çþM¬®¡ão³XXHOˆnL¢K×M¯žBâ#¸{œ}u— ÿ�„³N'LÓ<ϰÝa´dÁe¾N|ŽNÝÏLsç>#xKF¾ñtš†³ }®Ü][Ÿ2&?+p¼gßšé§ø³àfñ5Òø‚vw1»ù2pÌðw¸Fü¨sÅ7ùðÆ %Ó4ÅO(䮡#ϧ’?l}§Äô Ò¿ðe'ÿ�®'Ä< {áëëkC$ÒGµC ÉüVµ?áqxþ†8ïÌ¿üM�Zðýƾ ¿òôÍ1‡Ûî3»P`ï9êOõÊøÖmdüOø|ÓXX$â[ß%õÙ_÷iÌb�síW4?‹µ†õgñ(d½žUÌ2r¬äƒ÷}+›ñoÄo j?<©Zk1Ëg§Iv×Rˆœƒ¢È+“’J�ô/ÜkçÀ—LÓ<£’º„ŒG>žHþu±öŸÿ�Ð+Jÿ�Á”Ÿüb¸ŸüXð5­­üA “IÔQ ƒ'ñZÔÿ�…Åàúáÿ�¿2ÿ�ñ4kÃ÷ø‚ÿ�ËÓ4Æo¸ÎíBAƒ¼ä©<{Ó®.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çŸÐþ,xÖÕŸÄ¡’öyW0Éʳ’Ýô§OñgÀÍâk¥ñ&ìîcwòdá™à*>ïpùPï‰î5ãá›ñ6›¦¤f/™“P‘ˆ„gó×W™ø‹âǯ|={mmâdšHö¢ùR ŸÅkÒ‘ÖDWC•`#¸ QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�W?«iÖZ—Šô¸oìíî¢[¶ <Jàöã8#¯'󮂹íZÂCÅš\s=ªØÝ°0\É ÿ�YoÔ£Gµ�QñO†4|1¨I‡¦#¬D†[HÁúâ¶?áðçý�4¯üü+Å>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�cøÃ°_™4=1ÊßÜ(ÝiÀp:t§\xcÃãÅštcBÓmctÅ~É [àãFOæi¾ðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �æþ1øE±øS­\Úhú}¼éäm–+dF\Ï8 dpH®ÊǾm>Ù›AÒÉ1)$ÙÇÏڸߌz%¥ŸÂjx¦Ô×ÈÀ—PžUæxÇ*ÎAëÜWecáËÓ퉟TɉO­Èì?é¥�gøÃ°_™4=1ÊßÜ(ÝiÀp:t§\xcÃãÅštcBÓmctÅ~É [àãFOæi¾ðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �oŠ|1 CáBH´=1b$2ÚFç×±ÿ�§‡?è¥àáXþ)ðõ”^ÔgÔÉX‰µ;–} ˜5±ÿ�Õü÷Õðmuÿ�Ç(Ï~h5Þ¡ãe¹Ò,&ø†æ8„–ÈÛr8ÂºË x|x³NŒhZ`¬n˜¯Ù#Á"K|c¨ÉüÍr 4[[CÆÂIoÀ‹Ä71¯—<y�ÿ�×¹É÷®²ãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€⟠høcP’-LGX‰ ¶‘‚9õÅlÂ)áÏú�i_øøV?Š|=e†5Yõ2V"@mNå‡_C& lÂ5cÿ�=õ_ü]ñÊ�Çðÿ�†4 `¿2hzc•¿¸QºÒ3€àté\¯t ‰ÿ�­áÒ,#‚yoDÑ¥²“¦7�0qï]W‡ü=e$å§ÔÆ/îmÔîW€çÒNO½r¾5ÑmaøŸðú–ü¤ÒÞ†/;0Äi÷X¹+ÿ�#=èªñO†4|1¨I‡¦#¬D†[HÁúâ¶?áðçý�4¯üü+Å>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�cøÃ°_™4=1ÊßÜ(ÝiÀp:t§\xcÃãÅštcBÓmctÅ~É [àãFOæi¾ðõ”_–ŸS¿¸Q·S¹^ŸI9>ôëYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �oŠ|1 CáBH´=1b$2ÚFç××�B¨�€jä¼Oáû(|3"Í©X²êw,:Ž ÈAük® Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹íYï£ñf–l-íç“ì7{–yÚ ™oÈ!'ÛÐ×;«ê6Úo‹4©n™ÕÆíFÈ™ùßoÙA  ^)¸×φ5.™¦*yG%u Ž}<‘üëcí>#ÿ� V•ÿ�ƒ)?øÅcx£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐO‡î5ñÿ�—¦iŒ>ßqÚ„ƒyÈÿ�Rx÷§\\xƒþÍ83Ló>Ãu…þÑ“y–ù9ò8=;w=1Ë<?âm*(/ÃK8Ýpòž Ÿöin<M¥iÒ §Ú¶7JÑeêd·Ç}�s¿æÖŸáN´·z~ŸÈÜñ_<Œ?0¦%œwÙXÜx‹û>Ûn—¥‘å. Ô¤‡ý0®/ãˆ4ëï…ZÕ¼ÌÒ¿‘´5¼Š8ž3Ô¨«²±ñN’º}²™§È‰Aÿ�D—г@|?q¯ˆ/ü½3LaöûŒîÔ$;ÎGú“ǽ:âãÄð–iÄéšg™ö¬/öŒ˜#Ì·ÉÏ‘ÁéÛ¹éŽYáÿ�iQA~YÆëû†µ”ð\ÿ�³Kqâm(ø³NM>Õ±ºSþ‹/S%¾8Ûìh�ñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+Å&Ò¦ðÆ¡K9fˆ›YGRµ¯ÿ� V‘ÿ�=®?ðoþ&€<ÿ�á„ÚÊê6û5…„„ø†äÊ$½tÚùä.";‡¹ÇÐWYqqâøK4âtÍ3Ìû ÖûFLæ[äçÈàôíÜôÇ<—Ã{N´Ô<lÓI(x†æDÛo#eIã8^>‡šêî<M¥iÒ §Ú¶7JÑeêd·Ç}�)¸×φ5.™¦*yG%u Ž}<‘üëcí>#ÿ� V•ÿ�ƒ)?øÅcx£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐO‡î5ñÿ�—¦iŒ>ßqÚ„ƒyÈÿ�Rx÷®WƳk'âÃæšÂÁ'Þù(—®Êÿ�»Lîc+øŸjê|?âm*(/ÃK8Ýpòž Ÿök•ñ®½§Oñ;áýÄrJc‚[Ã!6ò3c�®Oáš�êüSq¯Ÿ j]3LTòŽJê1úy#ùÖÇÚ|Gÿ�@­+ÿ�RñŠÆñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰  ŸÜkâ ÿ�/LÓ}¾ã;µ ó‘þ¤ñïN¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzc–xÄÚTP_†–qºþá†-e<?ìÒÜx›J>,Ó¤Oµln”ÿ�¢ËÔÉoŽ6û�_ÜkÇÃ7âm7MHÌ_3&¡#2:Ïæ+®®?Äþ%ÒçðÕüQË9w‹�Y@ÎGr¸®Â€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ȹÿ�‘ÇMÿ�°}ßþŒ·­z¡£YêSÃ=ÇÚXUÑ ©a!X©`J0È%¯¥�UñoüŠš—ýq?ÌVÍbOá=.æ†wÔ䉯Uº ûùRÂ5cÿ�=õ_ü]ñÊ�o†ÿ�Ôjö¸ÿ�ÐÍ:çþG7þÁ÷ú2Þ£‡Âz\ÄO© w.Ûu[¡–'$ÿ�¬êh>ÓtœÉ©™QYÿ�µn²ˆ$æt%WòÍ|mÿ�’C®ÿ�Û¿þ”G]ÆŸÿ� Û_úâŸÈV6£àW°–ÇQMBêÒ\o†]Nå•°Ag¨ð« á=QfÕ¨ÀUºàßÊ�<7þ£Pÿ�°Çþ†i×?ò8é¿ö»ÿ�Ñ–õ>Òà"}M¹vÛªÝ ±9'ýgSAð¦˜Ó¤æMLʊȯý«u¬A 3¡*¿ x·þEMKþ¸Ÿæ+f±'ðž—sÃ;êrDã ªÝGýü©?á±ÿ�žú¯þ ®¿øå�qß ?ä%ãÏûn¿v7?ò8é¿ö»ÿ�Ñ–õNÇÀÚš÷/eý»]LÓÎcÔîWÌõfýç$úÕƒáM1§IÌš™•‘_ûVë!X‚@>gBU!@ñoüŠš—ýq?ÌVÍbOá=.æ†wÔ䉯Uº ûùRÂ5cÿ�=õ_ü]ñÊ�o†ÿ�Ôjö¸ÿ�ÐÍr:ÿ�’¯ðßþ»_è´®¶ ép>¦Ü»mÕn†Xœ“þ³©ª÷>Я/­/nc¿–ê̱¶•õ;’Ñ�6Óæq�ZñoüŠš—ýq?ÌVÍbOá=.æ†wÔ䉯Uº ûùRÂ5cÿ�=õ_ü]ñÊ�o†ÿ�Ôjö¸ÿ�ÐÍ:çþG7þÁ÷ú2Þ£‡Âz\ÄO© w.Ûu[¡–'$ÿ�¬êh>ÓtœÉ©™QYÿ�µn²ˆ$æt%Wò�ïÿ�È©©×üÅlÖ$ÞÓ."h¦}JHÛ†GÕ.H?Pdæ¶è�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform14.jpg������������������������������������������0000664�0000000�0000000�00000056335�15030617045�0023367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ýCZ°Ò¦†É™$™Y£U‰Ü°]¡ÊMËùÐ…‡/Œ4H"ie¹š8Ôe™­e�ã´ÿ�øJ´ùíqÿ�€“ñ4³Esöþ5Ð.ĆÞöIDR4O²ÚSµÔà©ùx"ª_|Jð–›r-¯5SÅwl{Y³_¹@]ÆÂØð>@:ê 2måÿ�@­¯øJ´ùíqÿ�€“ñ4³EaEãpÆ+©\+b¶²œ08#îõ”ø¿D,Fæa#)e_²Ë’?w¶Gæ(rŠÃ—Æ$4²ÜÍj2ÌÖ²€?ñÚü%ZGüö¸ÿ�ÀI¿øš�Ù¢° ñ¦ƒr$0^I(Ìo²ÚSµ‡U?/zSÏ‹ôA2Änf2–Uû,¹ `÷{d~b€7(¬9|a¢AK-ÌÑÆ£,Ík(ÿ�§ÿ�ÂU¤Ïkü›ÿ�‰  š+ /ès†1]JáX£µ”áÁw¨4ã=)â‚KÉiA1£[JñŒàmç�oQXrøÃD‚&–[™£FYšÖPþ;Oÿ�„«Hÿ�ž×ø 7ÿ�@4V^1Ðç bº•±F+k)Â>ïPiO‹ôA2Änf2–Uû,¹ `÷{d~b€7(¬Gñv‹î’êX× {iUFN9%p+n€ (¢€ (¢€ (¢€ (¢€ (®gÄ7:•–±¦ÎngƒGi¡‚CjÑnid"‰ãbP’‹”ea¸žx ¦¢²ï5—µÖ-´èô»Ûƒ0VkˆüµŠ0I–pXŒd… @Æq‘\ùø—§y7R¦â #‰‚[ºiÌEñ9ÿ�Pz?ByÇ�ž”ÚQ\]çŒßUÑn~Ë©­µþŸrãM{P“´Ë-º *ØÚØ‘Ç,¾zÞÐõ©5¨d•ô›í=Eç–³×åGb¤qØ<ô  j+›—ÆvÝßÚ½…ðšÊ{hG”wùò˜£eùþépGÍ‚8Å;Nñ…¾¥â 4ˆ´­]0Cݽ¡û0‘~ô~h%w{d  ŠŠÀÔ|Yo¦ëƒL–ÂúB>Íæ\Æ#1Gö‰Z(³— Ë©)Ç^•”~%éÞMÔ©£x‚Hâ`–îšs|NÔОqÀ'¥�v”W ¨øâK»[?ì½7V›P±‚êYíÒ1mæÍh¥W;ƒßøTãzœŒæ®Úxÿ�N»KéWMÖc·¶*"¸–É–+ÂÎD,xbÌÊqœús@eÍxkY¿Ô›ÄR]YÝÄÖš‡•œþP•ìð¾Ü£9gbãà ŸLý/â,7š ¤ú>¢¥¼s_Í£³ßÉ–ù÷±•þPÄ+ À€ÚÑ\¯ˆu=Y|Y£hú|w‰ðÍs<öÞFqF¡O›œ.d°»¹]¹ù± Ží^ )^ÇR”]ZXN÷$DV1tÛ"/†S’àƒµp:à �ì(®GMñLÚÏ‹ôøm­¯aÒ®4Ë›˜å#Ýí’�’G†.¾ð\‡SƒPjþ)Ô _ìöW06—¬ØÚ+'”ßjI è'¬§®ß¼¼çp�­È¿Ä+6Hš>·q=Ä’$°ÛYùÍk²V‰Œ» �oF³ƒŒ×]@Q@Q@·Š¥ñÌwVãÂvú¶åœu&àÙãnÂ8Å`}§ã'üùx;þúŸÿ�НH¢€<ßí??çËÁß÷Ôÿ�üUiøÉÿ�>^ÿ�¾§ÿ�â«Ò( 7ûOÆOùòðwýõ?ÿ�GÚ~2Ï—ƒ¿ï©ÿ�øªôŠ(ÍþÓñ“þ|¼ÿ�}Oÿ�ÅQöŸŒŸóåàïûêþ*½"Š�ó´üdÿ�Ÿ/ßSÿ�ñT}§ã'üùx;þúŸÿ�НH¢€<ßí??çËÁß÷Ôÿ�üUgMqñoþ;"ö~û_Ù.<° û6o‡~~lç;1ø×¬×=«XC¨x³KŽg¸U[¶ ™!?ë-ú”`Hö ÄŽz/lü&-¼¿ÞŒû±í–­/´üdÿ�Ÿ/ßSÿ�ñU³âŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€>XÒî<yÅ`ø}eþÛkù¾Ù&Þcn »›³‚ßžkÑ<LÚ«øÚÕµ¸ícÔŽ–<õ´f1†Þ:gŸóÔ× øGÂÚZÛê²GöèÞMVïÌhµ„.D¬l8ÉÀêy®ÇzU¼ü”’ð¯ØeïfvÎåþ"ÄãÛ4ÉøïþEKŸ÷Óÿ�Bîž&¾ñí¾ªÃZF“waå‚d»™‘÷ää`ÇJð?ÙE†.^rC§pì>ðìIô¯ü#V?óßUÿ�Áµ×ÿ� 7ðö¥ñE-¯E–ƒ È†þäÈd¹`D†FÞÍÐ⦛Sø¨|GdÍ hèZ\Ð\¶Ò›áÜOÍÔ˜úšé|-áû)lõÓjCn§v£n§r¼ Xv““ïÔÔ÷²,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøôÉxƒSø¨úêÞhvÆ?Þ4w,Xoš´¿µ~.ÿ�йáßü oþ*¶|Sáë(¼1¨:Ï©’±jw,:ú0kcþ«ùïªÿ�àÚëÿ�ŽPxPøü$ßÙ.‹>ýzé®üùÙv\»ÕyåG5»6§ñPøŽÉ›@Ðд¸ ¹m¥7øŸ›¨!1õ5cញisÿ� ‡™6 <¯Þƾ^¡<yg]®7öŽIîk¤¸ðõñfŸ©ík¦'ûRç<IoßÌÈôïÇ  KÄŸÅGÐ/Vó@Ð#¶1þñ£¹bÀ{|Õ¥ý«ñwþ…Ïÿ�àSñU³âŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€<ßÃڗŶ½Zƒ"û“!’åx7@sŠÂñUÿ�Ä9<}àÉ5 G‹QŽK¯°EìRRQwï9ã¯Hð·‡ì¥³ÔKM© ºÚºÊð%aÚNO¿S\×t[X~'ü>e¿)4·¡‹ßÎÌ1}Ö.Jÿ�ÀHÏz�Oj@½[Í@ŽØÇûÆŽå‹íóV—ö¯Åßú<;ÿ�Mÿ�ÅVÏŠ|=e†5Yõ2V"@mNå‡_C& lÂ5cÿ�=õ_ü]ñÊ�ój_RÚôYh: ˆoîL†K–Hdmà|ÝÎ*iµ?ЇÄvLÚ€.…¥ÀËm)¾ÄüÝA ©®—ÂÞ²–ÏQ-6¤6êwj6êw+À•‡i9>ýMOqáë!âÍ:??SÚÖ7LOö¥Îx’ß¿™9éßA@—ˆ5?Š ^­æ GlcýãGrÅ€öùªÜïÆÝÚçÂ$È:$7‚6?Bd#ùWCâÙÁá«ùRmH²GS¸uê:ƒ!èk® 5?õ#ŸxWÓáS‰.mn£_rW‰ük²ðïŠt_Ø}·E¿ŽîpÁr£)Áˆ­ŠòˆzFŸá=wIñvˆßaÖn/’ÖKxNü?UdøûóÎ(Õ袊�(¢Š�(¢Š�+>}ÆëS‹Pg’hˆ(s!‰Xta훆~öÜûÖ…rÒÍ|þ3{C}¬­»¡Ç Š‹hÁ‹ïZ3¸îéóõ l   {Ý OÔ5 {ë˜æi­Ê” q"!*Û—r+|7#p85Hø/A1ËÙ% #ù€-ÔÃÉmÛ³÷\óòm®GÚ®½h<%i?öóÄ–±Å©­Î˜ÛCäÜ"Ý•F™ÏÝùŽàKÔ‚óW¿·Ò5;‹¯$Pë— <K¦qnãÊo/ÉÞU”Â¥°q¸ýÖ�,þðî®–×/óÆ¶Í O¡8V‰Îæ?+á‹1c’HSž44iÚ”X$àȪ¬ÓÝK;m\íPdf ÍÀã“^{eâ?t¹d>!S ¦˜.`mÈ–V”¥æâaÝò  ò‘ÏLô­ ëšÕçŒüSTºHÚT[=ªEÒ>X„´bF5v9=@ ‘�6G‚<)%ȉnãDâ RávH­æª¶Ù8*_z¯ð–È5³¦Ûj²êPÂés+lLþ^ò0\Gˆà°>µÅM©ÁâMv8SZ±ÓæÔŒ“^Úio4‡¶ñ¦ÀѸd-À²«cjô [‡Qñ,·}¾¥&©dèæ±ÓÖCpþk€&ʸ‡1ˆ›(˰Ü6â€: GÁú.«-õÜ7-q/“½’öxÁò›t*¸ké'­DžðíÄ,P;Äò±]丅Ã弬?îˆpro#šäµ=K_¿}Z“ÄÛ%å”Ö¬šaF«u‰ÕrCËpâÜòÃr‹‘kÔºe¾÷×m-~Ý|—Qi%Ò(˜›`#x˜˜Ìl2Á@È9ÀQ'„ôi-ÔÛ̱I$s?—u*3ÈŒ\°`K‚ªw“´dœS ð¦n³¬v²fÜQ§‘–3¼?îÔ¶#ù€o“€{ â?·¼Yümru•XMža‡H-Â5ˬ¬ÄFÅ[ìþ[•VX‘ØŠè¼O{«A«¬1\j–vFØ4iºx»2Ϲ²’µ@ØAùAÜß0Å�kÙG¢iºåݽ½Ük©ßí¸šÝïä}ª8˜àmU€3´g¥SƒÀž·H’+)V(Ñcò¾×1ŽE_º²&ý²�8À��‘à8õ&ÖüAw«FÉå…¤·–Ûe¾~Ïc˜Æà®$A†#j‚A'q»á½_S»ñ6¯âjbÄ…{?µØ˜‚0yˆ"‚�òˆÉbrH'�/Ëeáýs^iÖ÷ÎÕ,"{wK]FDhUþò²#Œ€yÊ©ì1„üòèñÜ{pgý³9•R&/Éæä*HãµY·¿Òˆd¿[ J°´šÝâQpƒËÜÈm˜|”]ª¹<’ÉÇ)«Ú\ëž½Ñt›[êj7ò_Zê"ÙÄ^T’™VO4£÷,#ÚHnØÅ�vàøü½ZÓT²i(öâXõ#äÛ#ãr0°‘pãhÆ0*y<;áí~9/‘žâÙâ»imoåXå’ ynW§RŠNJŒrz‚6¡âjÖZ&£™£FEý»XÈŒùbTB3'”Ùl aÏ®·Â‰#.¯yöií­¯5žÚâ1:§—’Q€+¹ÕÛóPEà †;k€Uä|ý¶r_ÌmΗùÔ¶IVÊ䓎Mt4Q@Q@Q@Q@Q@Q@Q@Ý実i%ÕíÄVÖñÏ,ÎTz’xÂÝ|fðŒwf×O’ûW¸�“jÒtì À? A®{V’ú?ifÂÚÞy>Ãw¹g¢�y–ü‚² ÃÓ¾!êÚ–¥gn¾ñ÷ª5ÅÌ^X‰K`³Ø~•·«ê6ºo‹4©.ÕZÆíFÈ™ùó-û(4KÅ7ùðÆ %Ó4ÅO(䮡#ϧ’?l}§Äô Ò¿ðe'ÿ�¬ox›J›Ã„i,åš"meýJÖ¿ü%ZGüö¸ÿ�ÀI¿øš�ÄðµÆ¾,õ+MÓXiÝ“»P‘pÞkd©<g¿A^wã¹uFø™ììÒo°‘.Ù——Æ0síŠô/ x—K†ÏP,à¶§vòž ¬GE¯<ñÖ±eqñÏä1ýƒnLw/b3@g^ðøbàMo&ôÉI˼;ξ•ûOˆÿ�è¥àÊOþ1_4øÖþÞ \G9bÉÖ6Ä;‘_JÂU¤Ïkü›ÿ�‰  O \kâÏQò´Ý5‡öÙ;µ  æ¶Gú“Æ{÷ô=ÅLj?á,Ó‰Ó4Ï3ì7X_í0G™o“Ÿ#ƒÓ·sÓÖð·‰t¸lõ�òÎ jwl1k)àÊÄtZžãÄÚQñf š}«ct§ý^¦K|q·ØÐâ›|øcPéšb§”rWP‘ˆçÓÉζ>Óâ?úi_ø2“ÿ�ŒV7Š<M¥MáB4–rÍ6²Žþ¥k_þ­#þ{\à$ßüM�pÿ� æÖ—þ³iú|™ñ=é“̾tÚÿ�&@ÄG#ߌú é..<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜ç™øiâ :×þ:Y‡›âkÙSm¼•;1œ/Øó]%lj´£âÍ:A4ûVÆéOú,½L–øão± Å7ùðÆ %Ó4ÅO(䮡#ϧ’?l}§Äô Ò¿ðe'ÿ�¬ox›J›Ã„i,åš"meýJÖ¿ü%ZGüö¸ÿ�ÀI¿øš�ÄðµÆ¾,õ+MÓXiÝ“»P‘pÞkd©<g¿A\×fÖOÄÿ�‡Í5…‚N%½òQ/]•ÿ�v™ÜÆ Wð>ÕÑø[ĺ\6z€ygµ;¶µ”ðeb:-s~5×´éþ'|?¸ŽILpKxd&Þ@FcL`Éü3@_Šn5óá@K¦iŠžQÉ]BF#ŸO$:ØûOˆÿ�è¥àÊOþ1XÞ(ñ6•7†5ÒYË4D ÚÊ;ú•­øJ´ùíqÿ�€“ñ4‰ák|Yê>V›¦°þÓ»'v¡"á¼ÖÈÿ�RxÏ~þ‚§¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzcšÞñ.— ž YÁmNí†-e<XŽ‹SÜx›J>,Ó¤Oµln”ÿ�¢ËÔÉoŽ6û�_ϯ7†¯ÄÚnš‘þfMAÙ€Èè #?˜¬»Œ: 2É :f½w*;G¶ßOfÜA à’éZ^'ñ.—qá»èc–rïÕÖP2HîW» �óY<sãmlù^ðͲ·Ý»Ö¤*ƒÐ˜ó“Ôt&­øáí÷öô^#ñޱý³«C“m¦ÛkBOT^çßñ ïè Š( Š( Š( ¡K…{¹mÀù£Ebw)ûÙãÈû½ÀðO8š¸¿øsZÕ.|N-bÓ|WGŽÂ–áÕ–E2üÌ¢2�ýù#Ÿ{å�ë幂 `ŠYUáÌq)êì±þ¬ –¼Ùü¨K–%šG«}ºÖ8$fêÖžKÌC$ 0Àå‡$šçµo [xoK±±¸ƒC²{‹‡™ ½ÔgšÒåÄeK¿œ1¸—R9†lpíU¦x_HÑäG³·”‰ne•a`ˆÕ؈Æ8ÂÇÃøgÁ ׺.®ºtk œÅlóÜÍ ¶Â<«•‰�GYp_-¿’JèôOj6¾Õìg[;S½’ìÇsa!“`•Ýã%Š!ÊÑAÎ�[T¡Ôâ›Z»Ò„r,ÖÐCpÎqµ–F‘Wç ÄÙÈ«‰>¹0Z¿ü#ÞÄeÅÆ—æ?Ù®X…fs;ב¾û|Ùä@< ­¤¹4«�²–É¥¸“1Iou$ác%SdÏl’FAÜ@�ôª+Ë/¾êW:Zéé§è>TVšœVá¥p¶ò\ÏæÄÈ<£,�0y8Æ9°þÔÚå":‡JÔ>Ä×/åŒÙù/_#ó3&{÷�Ð¥Öf¥­Ç§_ØØ-­ÅÝÝæóPl"mÞä»(ÀÞ½ <ð `7†5Y¼ ¡é7"ÆâïNXVæÚi]­¯DhSk¶Üàä?*~e�‚+?Jð-ÕŸŠ´ýNm+C6,å`Y¾Â\ÄPA˜¹ bvswÀ�`€vº¦§“kÄÑÈé%Ìß»!¥•cRrGœgÚ¬]\Áei5ÕÌ«¡’I¢¨$þÇëþ ›RÔgÔ£¶ÓîïÖþÎêÊ{·dkd…ãf‰HFÚcœŽ¦C‘ÀªOà­Zê/Åqo£Äší›Â<™…˜vJÊc'Ì\œ’ c¸Úè‰,mˆ®Œ ²°È õTpN“<èƒ<²w)í±8ëŒ:còG†õ[Ǭ?E´¶†Í¢²•òñÎ<¡†" d ¯‘·uO ë:„Zì g¤Kþ±kËrøh¢‡WQÁa�d~ñ¹ãæ�îè®SIÐõM;Á7ºGÙtµ¤ºû4 +µ¸ŠYÖ3ò�WÙ€¤aGÒ®x;H½Ðt¦ÞGj‚)æxE´…”#ÈÒÆÅ ·vÐ�Æ3€¿EPEPEPEPEPEPEPŽøSC_‹72ø¿Å5Æ–³´zf’$"ÕN ¸XŸþ¾F�õ»K+[ u·³¶†Úû±ÃE@8¯/]/Äÿ� õ+¹4:Mw—2™ÚÆ#þ“fÇïycø—§þ“½¦|^ðf þLÚ¡ÓnÃÛê1˜¹?/ë@Íd\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ò¯Š<<ÖæáuÝ0Àq]Ç·¹Î1\'Œ/¼âÍoIŠOCa ×,n4Ý^(ŽâЀ¬Ù#8ÿ�gÚ€;ÿ�È©©×üÅlׄk^ðLZ5Ô–ÿ�õ;™•2°·ˆ!pçÓhÕÿ�øEüÿ�EsUÿ�Â’ð Hðüyj_ö¼ÿ�ÑÍ^kñþJwýÇþ„µæW¦¡øºk¼KâK­¤ý§MÕTºŸ5Àsò•|¨Rz}ìú ÑÔ´=Qñ$gFñN³¨ÙÉgæ ™o7Jà ”ס”�ïÿ�È©sþúèB¾¤¯|UáÈôík•Ôµ)ʲ“ÎNHŒW°ëþ�ðß…ìR÷Zñ÷‹¬ížQ ÈúŽAr ˆÏe?•�w¾ÿ�-Kþ·Ÿú9ªÍÏüŽ:oýƒîÿ�ôe½x>Ÿ¼›Ÿµ|Jñ%³}®m‹ã�é¼ísû£Ë }MI"|;þضÛñ7ÄÍoöywÌo_r6èö¨>WB7þè rñoüŠš—ýq?ÌVÍ|ç«'ÃÁ¥\ý—âg‰ngÙòC%ë•sèG”*ç—ðÓþŠ¯Š¿ð9ÿ�øÕ�zÂÏùìk¾ÿ�Ù+©¹ÿ�‘ÇMÿ�°}ßþŒ·¯ü*ž?ÛÚ^?×ôÿ�øšÏöo³Ý²ý¢—dψÎ]¹Éã§AZ’'ÿí‹m¿|LÖÿ�g—|Æõ÷#njƒåt#q?îŠ�÷/ÿ�È©©×üÅl×Îz²|<UÏÙ~&x–æ}Ÿ$2^¹W>„yB®y ?èªø«ÿ�Ÿÿ�P°xGþ<µ/û Þèæ®_Ç_òUþÿ�×kïý•çB|>òn~Õñ+Ä–Íö¹¶,WŒ¦óµÏî,0Iõ5•®¯‚GŠü6,¼{¯]Ø—Ÿí—s]3Ih6®ÓòÆÝÇ ðz”ô_‹äTÔ¿ë‰þb¶kç=Y> *çì¿<Ks>Ï’/\«ŸB<¡W<¿†ŸôU|Uÿ�Ïÿ�ƨØ<#ÿ�Z—ý…o?ôsU›ŸùtßûÝÿ�èËzð}!>y7?jø•âKfû\Û+ÆÓyÚç÷G–$úš’Døwý±m·âo‰šßìòï˜Þ¾ämÑíP|®„n'ýÑ@åâßù5/ú☭šùÏVO‡ƒJ¹û/ÄÏÜϳä†K×*çÐ(W©Œ^�3‡ˆáÜz  ~{q@͇¦xËÃ:ˬzv½§\ÊÝ#K…Þà9Ïé[”�QE�QE�QE�VAוõ™4Ûm:öëÉ‘b¹¹ˆF"·vPà6ç NÖSò†ÀaZõ“&‹¤G®.¨êb¾¸`œ\:,ìªHÌa¶»RA Ú€9›/¶Ÿ¦êGT±Ô®¤²}Fuš4„ ­íîŒm·ç^QY3¹ÁÆãZóøÊ(g–Ýt}Nk”Ô›MX#îyx`L€m1ò ö ¡káÿ� ¯-Ịi-a¸ŠîÕå—ÊŽc™¼ÅiInüõ«6ð¦­oæq%äIpf[›mZi3/–",]då¶�¹'§ÔÐKoy¾ ÞëëmCL±»±´†$¾iœ»b  ¨„înÇ5¿Ä;¹äŠßF×™DVŽlöG|Ø'÷.Ä)U›,W€OJ}·Ãÿ� ´KkãBÐB¼Z­ÉQ|ۉ8 ’AÞ8ês§oá=Ö:YÖC,é ç˱99 €sÍ�gè^$“þÙ5Un|Á{s…‘|ì‹·Š(°¿)¸œß½Q·ñ¬ÖˆõM[OÔRÞÇRò…³<Ûh…´RpûXe†˜†�g¥t°xL¶Ó籎6Ó\5ˤ“»âV0²–bTïù¸#‘ÍR»ðN-Ì—V·™<ɽ›k·—åœøÁ@Ž„œàP+¿ 5<A=ö‘x-4‹µ¥‰¢;²—ÁgHe�:-Nûû7NšóìòÜy@*›8.ʽû‘X÷ðýÙ“í×2ù¤wßN|Â#ò¾oŸæÊ�§9Ü�ÎqW%Ót_N:cM%ÄVrª6ËÉ ±È€0 mû°TòrsÏZ�Í>:°þÏšþ;ùmaÒâÕ¤‘V1¶ÞD‘”à¸9ýÓ c®>µzo¥¶¯§é·mìSß’b+¹UÛiÓ’±±äd‚qT×áÿ�‡ÞîÝm¯7V«g,Ú7;L r±æaTr�Àf‚ûŸhgTйÖ!€Ij²j3"!°9ò~þÖr !È$çö‰â]z–ÖÐ4++ Bƒ,ÊQ°OÎ 0#1Ö¨X›ƒ³½Y‡ÚaäÉ òñ¿ï>w þ!ÎE_Ð4¯ìËIÚHmỼ¸{«•·bÑùŒà àp2rp3Ku¥è°M&£w´n'[·žR�${’xÈLŠ�É—ÅSA¯G§ÇasqæëÙÒñâ!öA>ååN0rs“Ãã?*–øWij_]Ë¥_Ev×"ãP0ÝH±ˆæŠ £Óœ¨hÁÊŒûóQiñøUÖd“MÖ-/5®…ùK}a¤o5¦õQ!ÀØÅH�¸4ôÏhºEì–pÝ,ð B4—ÓÊšÛ¤Èw î`縭�`ëŸ,ôíORHum4›+ ¢–&tó¦¹i W;‡ñ(óFÓQjúþ—â ÃßÛÒܶ¶$f¾6ð†´ò—sl6áòw†Áîk²階 ×*a¸¹´IlßkîòÄž[¼l¹ÆNØÎÎ1ëÎ|~ ÐbŠXÖÒSæPïw3<ANTFÅ·Fä#Ÿ¬^ZéÚйŽëU›Iº0‚4\¯—€…Ê©`$ÁÆ2TàgŠ»áÏEâ]0j6öW–ÖîqºUS(þò…cÇnqÓÓšžÏD°°Ó_O¶ŽHàrÌçÏs#³uc!;ËRsSYiÖºŸöXÙò´Î»ØÇ©�œ.zà`f€-QE�QE�QE�QE�QE�QE�Vv§ húÊ•Õ4«+ÑŒ¤@®GБÅhÑ@YøIà3r'ÿ�„n×xmØ ûsœýÝØÇ¶1Yº¯€|;‰tè4ÿ� h“,–w/$S)IW€ÈFɈéÜ×£W;«ê6ºo‹4©.ÕZÆíFÈ™ùó-û(4Çx‹ÀÚ}¿‡ïf_xjHò$Žå‹/¸ýÀþu§ÿ� ÿ�Mÿ�¡ ¿øßüZ(ñ6•7†5ÒYË4D ÚÊ;ú•­øJ´ùíqÿ�€“ñ4áGà½÷‰õû›è Ó4ý.© {h.YYŠÌù ÞQ�€ ^€qèºÎ€</ã(ôí;H±´D°ÉHïMß2å™Ì`“øW«ø[ĺ\6z€ygµ;¶µ”ðeb:-yÏŽu«;‰4rHaþÎP3ƒÃ±í@^ðøbàMo&ôÉI˼;Î¾ŽºMfö1Þƒ¢Ï;‚Ë~ìõÁ·ëɯœ<ko?†.#œ±dëâȯ¥?á*Ò?çµÇþMÿ�ÄÐ+á.áí/ÈðÎ.5+¡™.#·÷Ð!SÏ¥\Ø/ü"þÙ\‚äí8x9?¸ê3ÇÏNóx[ĺ\6z€ygµ;¶µ”ðeb:-Oqâm(ø³NM>Õ±ºSþ‹/S%¾8Ûìh‡‰´«”ðÝû x~ "?<w°ú~à:ÖþȺÿ�¡OÃøù«ø£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐ|9Ó§›þݾÑ.6x’ñŸ9_,Ÿ"þå²£±ãè+¢ŸJ¹)°_øEü< ²¹;ÉÚpðrqÔgŽ;žò>xƒNµÿ�„ÃΖaæøšöTÛo#eNÌg Áö<×Iqâm(ø³NM>Õ±ºSþ‹/S%¾8Ûìh‡‰´«”ðÝû x~ "?<w°ú~à:ÖþȺÿ�¡OÃøù«ø£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐ+á.áí/ÈðÎ.5+¡™.#·÷Ð!\ïŒtùãø“à8Û@Ñai%¼Û S“ØDûçÉÇn¯jëü-â].=@<³‚ÚÛ ZÊx2±¹¿ëÚtÿ�¾ÜG$¦8%¼2o #1¦0 äþ  ÏiW)á»ö>ðü@D~xî aôýÀþu­ý‘uÿ�BŸ†ÿ�ð$ÿ�ò=WñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰ WÃ:]ÃÚ_‘á\jWC2\F%nî þB§ŸJ¹)°_øEü< ²¹;ÉÚpðrqÔgŽ;žæð·‰t¸lõ�òÎ jwl1k)àÊÄtZžãÄÚQñf š}«ct§ý^¦K|q·ØÐiS§‡o™ü1áø”GÌ‘\Ê29È?ˆ®žO øzWß&…¦;tËZFOò¬_ø—K¸ðÝô1Ë9wjƒk($w+]…�r:·Âÿ�ë1•¹ðåŒlsóÚÇä6O|¦2~¹®Zÿ�Ã>(øqjžÕn5MÜ.tmBMåc$ÄýF9ãøJô}S]ÒtH|ÝSR´²Ld‰•3ôÉæ¼ç\ø‹uã®|?ðÿ�OŸPšà&ÕdCµ²‘†mÄr@'˜ÝÒ€=CÖ-µýÓU´Ï“s𪞅O¸ ƒô­ Èð¶„žðÆŸ£G+L-bÒ·WbrÍø’MkÐEPEP\~»¾¾-Ò®­t«;Ëu¸1Ã+^I…L.¢ �nÉÉØ¸&» (É/´«Û½ÃZ4Eñ¼ÑfŽ]QšÕ•."ýj+C+a°¤ôæ»-"o´ëõ¶Ÿ-´¨’ÖH¤’HüÒî±²‡ÎÖGìã5ÔÑ@Yy¯x xcE{Vס¾]Y®t†v’ùa#}Ñ70›8ÆF J‹ŸEáøâ²Ôµ‹3.­xf¼ŸEk™bŒÊÍ ¬[”u –ÁÚN8/¨’ dãšZ�òÉ|Aâ•ñ ‚MBæ’ìXœq[Mû‘åÆ]а‘¦eRÊã 08Ìú^©â€úTÚ®µsöËâ³Êž6ÿ�fŒÄÿ�+e\aeò~r�ÁnXW¯@Эu°Á퓳Þ,s+Ǹ0Ý"ÄX¢¶çSËVà!†AzŠ�åõËÍQ|KšM©ÚX´ñMad³‰¦ÞÁ’Vda…A;s¸üÜW>—:¬~7Ô–ÒMnÚÒÿ�X0É·KcÇöŒN®ñ“FªJ2A5é4P—A®ø­´óÉ®%ÄiJäihf22^íO "îÉdü§ «>³¯Iy¦Ì#×~Õmo©[Ëyý‡)Änb1XÌh¡Ï#í’zÑ  �žƒÖ–€8ÝTºþÕœÝÝø†î"  ¹ÒL gPœ•‹a²NH�9a1Zº¤‰ô¹eÖIivÅUɘyE0 [Ëóð:žqWì58µ FÝ"‘Âä[I¿f1¤€® ãl‹×¯7Ú`{ãfã÷è‚e :Œã+ô<LQ@àK™¬4ÍÒæO\Íš±½ÞŽbŠÖEˆd,†Î6² ³“¸sÔÔZÿ�‰famy'ˆmìÞwe¾Mu¡Ž#”òv¼Î ØHع8`ÇÓè 6Ó/u[_Ü2 kì—zÂÅqº[ž1b‰ç|~ú5\†ÙŒœs[𶝩ÛxßL··MLéÙ x©bd€«$›\:¡9Áù€�äŒe‡[E�y妷­]eî¸ñkÕîmæÝ£•ò­‡›ä¹ÝÊëo™¸ûÝ6¾Æïźƒ¤ {¨ÛêE*ޥΜ©mbû£C!@%`AÒeI?)èTP+ ÝxŠóQ ¨Eqmk"%ØY?Ý‚› ¹ÀÎCƒ&zàšê¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€$à¤×#ªüRðV3Ãs¯Û<Èc·Ý1#äÇzäl,õŒWW:þ¡seàø¦h-lmdØ×ÛN ÈGðž˜úãO¢hÞð÷‡£EÒtk+BƒHáÏÕÏÌ@Õ‡ÅÍSÔ¬¬í,u™>Ù*Eßb"<³m’xëÇJéîäqÓìwÿ�£-ë^¹íZÂCÅš\s=ªØÝ°0\É ÿ�YoÔ£Gµ�XñoüŠš—ýq?ÌVÍr)ðõ”^ÔgÔÉX‰µ;–} ˜5±ÿ�Õü÷Õðmuÿ�Ç(·„ãËRÿ�°­çþŽjóÿ�ÉWû¯þ‡]×…¼?e-ž¢ZmHmÔîÔmÔîW+Òr}úšói[üN0‡½ØtÅpd¼™˜üøûÌÄãÛ8 [Çò*\ÿ�¾Ÿú¯©+å?ÙE†.^rC§pì>ðìIô¯ü#V?óßUÿ�Áµ×ÿ�  Þÿ�-Kþ·Ÿú9ªÍÏüŽ:oýƒîÿ�ôe½ax[ÃöRÙê%¦Ô†ÝNíFÝNåx°í''ß©©î<=d<Y§Gçê{ZÆé‰þÔ¹Ï[÷ó2=;ñè(SÅ¿ò*j_õÄÿ�1[5Èx§ÃÖQxcPuŸS%b$ÔîXuô2`ÖÇü#V?óßUÿ�Áµ×ÿ� [ágüοö5ßì•ÔÜÿ�Èã¦ÿ�Ø>ïÿ�F[× ðÏD´¹ÿ�„ÃÌ›PW‰ïc_/Pž<³®×ûG$÷5Ò\xzÈx³NÏÔöµÓý©sž$·ïædzwãÐP§‹äTÔ¿ë‰þb¶kñO‡¬¢ðÆ ë>¦JÄH ©Ü°ëèdÁ­øF¬羫ÿ�ƒk¯þ9@¼#ÿ�Z—ý…o?ôsW/ã¯ù*ÿ� ÿ�ëµ÷þ‹JÔð·‡ì¥³ÔKM© ºÚºÊð%aÚNO¿S\×t[X~'ü>e¿)4·¡‹ßÎÌ1}Ö.Jÿ�ÀHÏz�ôÿ�È©©×üÅl×!âŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€+xGþ<µ/û Þèæ«7?ò8é¿ö»ÿ�Ñ–õ…áoÙKg¨–›Ru;µu;•àJôœŸ~¦§¸ðõñfŸ©ík¦'ûRç<IoßÌÈôïÇ   Oÿ�È©©×üÅdø—áÖ“â­Xj÷š¤oåŒV×f8Èê�ëÍ/‰ü?g†¯åIµ"É@}Ná×¨ê „¡®º€8m?àÿ�ô÷Y?±–ê@wo»•åÉã$‚qÛÒ»X †Ö†Þ(â‰#Pª>€T”PEPEPEP\N¹á=KXÖõËv[ÚÏç?œ6rÛ€A±]ed%\ª=p½µæo¥éþÒ¤¶Ó,šMbC ‘¾’d­¦Rå›.ÉÀP72ŒdäËÿ�ªÒëë§,WV‹¬Ë3ù‘0–Y | (…'0îVݲ5ãœ/£Ñ@y¤x ô‹½5ít (­ÝOï/'¹kPqòŒˆI'“cÁ#!€æü+kØ`¼ c¥Ü\Ý^A-ÍÍÅýÃ}±#eË¡VTbªS�óž@O¨Ñ@b~_<6>~áùþËöèÒÂ$sN“D¼®€ñíÆ6±ê SÔ?‡ï%ð7ö4ia§ÜpD6€‹p¢]þ_NÖQµˆ;˜€:WME�y¬¾¾–êÖQ¢xv;¹K¤,îm†!š<¯îpK™T°Ø£÷KÔ’iÚ/ÃýBÛUÑ5 V++«­>ÖÞ¹]Bà5¿–¡"�« |n;±‚Ç;€éP%{᛫]jöz\|,ŸÚe™îã&"€ )òààðøÆ~\ÕË…Mý• £ézq·óüÛ›«ÞyW/ŒyÆLnV¡Häåzµç–Öí¼PÚ•ÕŽu�¼I#ÞÌæ$Xc‹ÌEhÎ% Ù,IÜFî7¢+KËØê1¤-k§Ë Ë–F’W‰ˆR@,É<>øã­mÑ@Q@Q@Q@Q@Q@Q@Q@Q@Q@E¥ës|"¼ŸCñ ¬Ïá¹gi¬ux"gXƒc” àçÓžzc§§ézΙ­Ú-Ö—oy ï†@Øúã¡ö5rHãš&ŠTWÁVF =®Sø;àûû³ykiq¤ÝŸùm¦N`#輨ü�wµÅøÊOGâøR.[ϲ]ù£Q/°G¾›H9Î?ZÊÿ�…U|ÑßÇÞ%›No–Ki®7ŒðÈ[ÐŒŽ•‹ªü,ðn•¯XAsq¬,ÚÜ9+q#¶åh@û 0íúPŸ\|Z:è½³ð˜¶òÿ�xb3îǶZ´¾Óñ“þ|¼ÿ�}Oÿ�ÅW-­øÀVÚ-ÜÖ×ZÙ™#Êyöçß+Š¿ÿ� ëáçüþkß÷ÝÇÿ�@ø©ã? ësèwiá«y%ºžgštœÆ®Ò¸a•l¸qÓ5Šï¼k}ã [«ÁáÙn¤ÒÁ‰ì¤‘àx|ÆÁqÉÝž‡¬Ÿ†ë¬x²xtÉæµÑÒYUï.a–SÄ®� ,ÛBõǹ·w¢è^ñMµŽ—sy<'LÝ,·8fÊs…Ú00Aø“@׊ŸÄ L5´Õ¶Ü»Œ÷g#ÉÇZ÷o´üdÿ�Ÿ/ßSÿ�ñUã^5¿·ŸÃÆÎX²u‡ñäW¼x ø_ÅÚdz~¥q¨,1Ì&So ѶଽBtÃ(•ðõÇÅm{ö+? û}É“Í3çÌó~0ßwvqíSMqñoþ;"ö~û_Ù.<° û6o‡~~lç;1øÖ‡à?\ÛݵÍÖ´/g6<ÿ�qd!s…ëŒf¥—À>]zÒ»Öü‡µÜ—Ÿvåh‚ãäÎ0͟€5¼Aqñhè¢öÏÂbÛËýáˆÏ»ÙjÒûOÆOùòðwýõ?ÿ�\¶·à[h·s[]kfd(çÛŸ|®*ÿ�ü+¯‡Ÿóù¯ßwüE�eø‰kÿ� 7ö5¯†Ÿ:õѼûQ›‹Ÿ—xL7ÜéŒóÖ·f¸ø·ÿ� ‘{? }¯ì—X}›7ÿ?6s˜ükðgƒ<¨ÿ�ÂCý£s«¯Ùµ«›{%¦æÛ´¶üÜœçšÙ—À>]zÒ»Öü‡µÜ—Ÿvåh‚ãäÎ0͟€5¼Aqñhè¢öÏÂbÛËýáˆÏ»ÙjÒûOÆOùòðwýõ?ÿ�\¶·à[h·s[]kfd(çÛŸ|®*ÿ�ü+¯‡Ÿóù¯ßwüE�?Ã×µïجü(Sí÷&O4ÏŸ3ÌmøÃ}ÝÙǵaxªo‰ ãï6£káÅÔÖK¯ìõ€Ëå1Ø»ü̶zc÷©ô?øæÞí®nµ É{<i±çû‹! œ/\c5âOx>ÏÆÞ²³¸ÕšÊñîEÛHÓoP¨¥vesÔœã4Úx‚ãâÑÐ/Eퟄŷ—ûßv=²Õ¥öŸŒŸóåàïûêþ*¹moÀ>¶Ñn涺ÖÌÉP;Ï·>ù\Uÿ�øW_?çó^ÿ�¾î?øŠ�‡®>, kß±YøP§ÛîLžiŸ>g˜Ûñ†û»³jšk‹ð‘Ù³ð—ÚþÉqå€gÙ³|;óóg9ÙÆ°ô?øæÞí®nµ É{<i±çû‹! œ/\c5,¾ðëÖ-Þ·ä=¬îä¼û·+D&q†lþ­â ‹G@½¶~Þ_ï F}ØöËW­W‡k^�ð=Ì–·ZÙœ'È$yö“žù\WE'À ½ÂL—ºÜL6^æTŸÖ€=>Šógøa¬éß?‡~ ëö®9ßÈ.ãÿ�¾N�üW“Æ^1ð5Â/ôè5 ˜)ÖtÄ?ºÏy#ì>€{n<P¨ÑPÙÝÛßÙÃyi2Mo: "‘C©TÔ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VEÏüŽ:oýƒîÿ�ôe½k×=«XC¨x³KŽg¸U[¶ ™!?ë-ú”`Hö  -ÿ�‘SRÿ�®'ùŠÙ®CÅ>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�Vðüyj_ö¼ÿ�ÑÍ^sñ#þJ}·ý‡þŽjì¼-áû)lõÓjCn§v£n§r¼ Xv““ïÔןüAÒm­þ$[Â’^:@|É{3¶|æy˜œ{gÇøïþEKŸ÷Óÿ�Bõ%|§ã[(¡ðÅëÎHtáî‡Þ‰"¾•ÿ�„jÇþ{ê¿ø6ºÿ�ã”[Â?ñ婨Vóÿ�G5Y¹ÿ�‘ÇMÿ�°}ßþŒ·¬/ x~Ê[=D´Ú۩ݨ۩ܯV¤äûõ5=LJ¬‡‹4èüýOkXÝ1?Ú—9âK~þf@ç§~=�jx·þEMKþ¸Ÿæ+f¹øzÊ/ j³êd¬D€Ú˾†LØÿ�„jÇþ{ê¿ø6ºÿ�ã”Ë|,ÿ�™×þÆ»ïý’º›ŸùtßûÝÿ�èËzá~è–—?ð˜y“jÊñ=ìkåêÇ6uÚãqÿ�häžæºKYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �ÔñoüŠš—ýq?ÌVÍr)ðõ”^ÔgÔÉX‰µ;–} ˜5±ÿ�Õü÷Õðmuÿ�Ç(·„ãËRÿ�°­çþŽjåüuÿ�%_á¿ýv¾ÿ�ÑiZžðý”¶z‰iµ!·S»Q·S¹^¬;IÉ÷êkšñ®‹kÄÿ�‡Ð,·å&–ô1{ùÙ†#OºÅÉ_ø ï@âßù5/ú☭šä<Sáë(¼1¨:Ï©’±jw,:ú0kcþ«ùïªÿ�àÚëÿ�ŽPoÿ�Ç–¥ÿ�a[ÏýÕfçþG7þÁ÷ú2Þ°¼-áû)lõÓjCn§v£n§r¼ Xv““ïÔÔ÷²,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøô©âßù5/ú☭šä|Oáû8<5*M©Hòêw½GPd ý '‰l|{q«ðÞ¯¤ÚiþZƒÔ%Ÿ~NN@<c××ñÆš‡´[«ÆKÍBî&‚ 2?žIÙÆ•€sÔþ<VCxǺªkŸ®"‡'|Z]²ÀXqÆñƒØõ­oøkáφ|+7Ú¬,<ÛãË^Ý1–b{ǧáŠ�“áî“}¡øIÓõ%T¼Ž"Ò¢œ„,Ŷ÷è{WME�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÃx‹â]¶›¬6ƒ¡i—Zþ¸¿~ÖÓ„‡þºIÑ\wÅP ñsWmÌþÐa#…]ÓÌlõSúV?ÃoJð{_øWÄDišû^<²Mvp·»Êë!àú ÿ�2qìÈÈ ÃÂ^8R±»Ô>!=ÄPÈ­qlš\h³(l•È<dqœVÞ­%ô~,ÒÍ…µ¼ò}†ïrÏ;D�ó-ù#dþÐ×ãOØx?Ä:=î¡äÑËkw­¤>c¾’28â€'ñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+Î5ÿ�ŒÞ¿Ðo-bÓµÅycÚ ÙaGÔî­/ø^>ÿ� f¿ÿ�€?ý•�lxZã_z•¦é¬?´îÉݨH¸o5²?Ôž3ß¿ ¯?øƒ.ªß-ÌöVi7ö@#»g]¾ss¸ÆsÛ^Ð>5xgOKËY¬õvškë‹…Dµíy†Fî¼ó\Œ¾"i:ÇŽ!Ôíí5$…tÑnV[m¯»ÌfÎ3Ó­�cøÕï†.Öð"oL”œ±ûñAüëé_´øþZWþ ¤ÿ�ãò¿Š|Qe©è3ZÃÚ;2d‹jðAëš÷?ø^>ÿ� f¿ÿ�€?ý•�lxZã_z•¦é¬?´îÉݨH¸o5²?Ôž3ß¿ ©î.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜çŠðÿ�Æ?Ø[^¤ºv¶Æ[û‰×ežp¯#0æëƒÈ©¦øÏáçñ•àÓµÏ.+Kˆ˜/˜—xHÀÝÓä9úŠ�ë|Sq¯Ÿ j]3LTòŽJê1úy#ùÖÇÚ|Gÿ�@­+ÿ�RñŠóã7‡¯ôËX´íq^Xö‚öXQõ;«Kþ†ÿ�è¯ÿ�àÿ�e@|3›Z_øL>ͧéògÄ÷¦O2ùÓkü™~3è+¤¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzcŸ3ð/Å]Cÿ�„—í6:¼Ÿn×®¯còm7mGÛ€ÜðÜr+voŒþY^ ;\òâ´¸‰²ù‰w„Œ Ý>CŸ¨ ·Å7ùðÆ %Ó4ÅO(䮡#ϧ’?l}§Äô Ò¿ðe'ÿ�¯8×þ3xzÿ�A¼µ‹N×åh/e…Sº´¿áxøoþšÿ�þ�ÿ�öT±ák|Yê>V›¦°þÓ»'v¡"á¼ÖÈÿ�RxÏ~þ‚¹¯ͬŸ‰ÿ�šk œK{ä¢^»+þí3¹Œ@¯à}ª·‡þ1ø~ÂÚõ%Óµ¶2ßÜN»,ó…y€?7\Eax§âŽ‹©ø÷Áº¬6:²A¦ItÓ$–»]·¢°gæéÍ�z‡Šn5óá@K¦iŠžQÉ]BF#ŸO$:ØûOˆÿ�è¥àÊOþ1^q¯üfðõþƒyk®+ËÐ^Ë >§uiÂñðßý5ÿ�üÿ�ì¨cÂ×ø³Ô|­7Maý§vNíBEÃy­‘þ¤ñžýýOqqâøK4âtÍ3Ìû ÖûFLæ[äçÈàôíÜôÇ<W‡þ1ø~ÂÚõ%Óµ¶2ßÜN»,ó…y€?7\EM7Æ?ˆ¬¯®yqZ\DÀÙ|Ä»ÂFîŸ!ÏÔP]âyõæðÕø›MÓR#Ìɨ;0„gó×Wëÿ�¼= ÞZE§k‹$±íRöX÷;«×¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(+]ðÖ‹âkAm¬é¶÷±»æ/ÌŸî°å+‹ÿ�…Gý˜ÄøcÅÚî‹én³ùЯÑ?RkÒh .ÿ�„[âÕ¼û ñýŒÖêß)›O@Ì=ÆÃÿ�¡~5^mâxñ’7‹´£rm. r}€aP<;êIOÈú׬×=«XC¨x³KŽg¸U[¶ ™!?ë-ú”`Hö Ä'Äøô ×¼ñn—-¸÷ˆ¶ Ç¥ýƒñ_þ‡-#ÿ�ãÿ�‰­ŸøzÊ/ j³êd¬D€Ú˾†LØÿ�„jÇþ{ê¿ø6ºÿ�ã”ò—ˆô/ê?Ê6}OYÊÂK8öm"y2ÜchÜäãÛ\éþ'Ó<SeoâÍF;í@i�«¯,‰æœ+6æ<þ§­z¿…<5§<œÛõêWH̚– 3ã8~zžO©® â“moñ"Þ’ð©ÒæKÙ³ç0ûÌÄãÛ8 ?Çò*\ÿ�¾Ÿú¯ ¼WáýW^ŠÕ4¿]è 1v·Œ?š0HéÖ¾uñ­”PøbáÕç$:p÷ÃïÄ‘_Jÿ�Â5cÿ�=õ_ü]ñÊ�óxÄ÷6×­Ä=RÜ%ýÌl«ì²0.~n¤óøÔÓxÅ â;(ÄmU¥{K‡Y¾Î¹@¯*>n‡p?ð]/…¼?e-ž¢ZmHmÔîÔmÔîW+Òr}úšžãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€9/xÅÚìÓ|EÕ.#HòÑ5º€ÃÐüÕ¥ÿ� ëÅŸôSuü_þ*¶|Sáë(¼1¨:Ï©’±jw,:ú0kcþ«ùïªÿ�àÚëÿ�ŽPxÁž!Ôá&û'޵³k×VòùP©óä]¹•¹á›##Ú·fðŠÄvPˆÚ«Jö—³}r^T|Ýàà"¬|3Ñ-.á0ó&Ô•â{Ø×ËÔ' lëµÆãþÑÉ=Ít—²,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøôÉxƒÀ>(¶Ð/f›â.©qG–‰­Ô‡æ­/øW^,ÿ�¢›«ÿ�à:ÿ�ñU³âŸYEáAÖ}L•ˆS¹a×ÐɃ[ðXÿ�Ï}Wÿ�×_ür€<ßÃÞñ=͵ëCñT· s*À§{,Œ Ÿ›©<þ5…â¯x‚ÏÇÞ ²¸ñ¾¡uqy%ЂéáPÖ¥QI*3Îì€~•éðý”¶z‰iµ!·S»Q·S¹^¬;IÉ÷êkšñ®‹kÄÿ�‡Ð,·å&–ô1{ùÙ†#OºÅÉ_ø ï@ â�ø¢Û@½šoˆº¥ÄiZ&·Pzš´¿á]x³þŠn¯ÿ�€ëÿ�ÅVÏŠ|=e†5Yõ2V"@mNå‡_C& lÂ5cÿ�=õ_ü]ñÊ�óxÄ÷6×­Ä=RÜ%ýÌl«ì²0.~n¤óøÔÓxÅ â;(ÄmU¥{K‡Y¾Î¹@¯*>n‡p?ð]/…¼?e-ž¢ZmHmÔîÔmÔîW+Òr}úšžãÃÖCÅšt~~§µ¬n˜ŸíKœñ%¿3 sÓ¿‚€9/xÅÚìÓ|EÕ.#HòÑ5º€ÃÐüÕl|6ñ”wh‹â–¨e’Ð:ôÇ*dÚ*è|Oáû8<5*M©Hòêw½GPd ý uÔæ¦ÇâƒWеèת\Àmäo¦Ì ýMYÒ>'yzÄ:‹ôy¼=ªLq Jáíç=>Iÿ�õ³šôàþ.ÜhQøú iRY&R¶Pç÷?ðlêsž¤vÍ�w”VO…Òö? i ¨†«gœ9ËÚ2¿¯½kPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE#2¢3»U$œ�+’Ôþ(x+I•â¹ñ £Ê€å-ó1#ä×W=«I}‹4³amo<Ÿa»Ü³ÎÑ�<Ë~AÙ?…béß<3«j6–V)©L×R$qÈ,ßfY¶‚Oažçµlêú®›âÍ*K§uV±»Q²&~|Ë~Ê �RñMƾ|1¨ tÍ1SÊ9+¨HÄséäç[iñý´¯üIÿ�Æ+Å&Ò¦ðÆ¡K9fˆ›YGRµ¯ÿ� V‘ÿ�=®?ðoþ&€1<-q¯‹=GÊÓtÖÚwdîÔ$\7šÙêOïßÐWŸüA—Uo‰æ{+4›û �‘ݳ®ß9¹Üc9íÆ»ï x—K†ÏP,à¶§vòž ¬GE®â³csñ"Þx¤”Æ4€™0:œùÌzš�â<j÷‡Ãkx7¦JNXýáØ þuô¯Ú|Gÿ�@­+ÿ�RñŠù§Æ·öóøbâ8ÙËN±°þ!ÜŠúSþ­#þ{\à$ßüM�bxZã_z•¦é¬?´îÉݨH¸o5²?Ôž3ß¿ ©î.<Aÿ� fœN™¦yŸaºÂÿ�hÉ‚<Ë|œù»ž˜æ·…¼K¥Ãg¨–p[S»a‹YOV#¢Ô÷&Ò‹4éÓí[¥?è²õ2[ã¾Æ€ÜkçÀ—LÓ<£’º„ŒG>žHþu±öŸÿ�Ð+Jÿ�Á”Ÿüb±¼Qâm*o j¤³–hˆµ”wõ+Zÿ�ð•ióÚãÿ�&ÿ�âh‡øg6´¿ð˜}›OÓäωïLžeó¦×ù2"9ügÐWIqqâøK4âtÍ3Ìû ÖûFLæ[äçÈàôíÜôÇ<ÏÃOiÖ¿ð˜yÒÌ<ß^Ê›mäl©ÙŒáx>Çšé.<M¥iÒ §Ú¶7JÑeêd·Ç}�)¸×φ5.™¦*yG%u Ž}<‘üëcí>#ÿ� V•ÿ�ƒ)?øÅcx£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐ'…®5ñg¨ùZnšÃûNìÚ„‹†ó[#ýIã=ûú æ¼k6²~'ü>i¬,q-ï’‰zì¯û´Îæ1¿€9ö®ÂÞ%Òá³ÔË8-©Ý°Å¬§ƒ+Ñk›ñ®½§Oñ;áýÄrJc‚[Ã!6ò3c�®Oáš�êüSq¯Ÿ j]3LTòŽJê1úy#ùÖÇÚ|Gÿ�@­+ÿ�RñŠÆñG‰´©¼1¨F’ÎY¢ fÖQßÔ­kÿ�ÂU¤Ïkü›ÿ�‰  O \kâÏQò´Ý5‡öÙ;µ  æ¶Gú“Æ{÷ô=ÅLj?á,Ó‰Ó4Ï3ì7X_í0G™o“Ÿ#ƒÓ·sÓÖð·‰t¸lõ�òÎ jwl1k)àÊÄtZžãÄÚQñf š}«ct§ý^¦K|q·ØÐøž}y¼5~&ÓtÔˆÇó2jÌG@aüÅG­k^:·Öní´ ÚÝXFȼšýÌ%?'Q†ÊóŽ™§xŸÄº]džY˼{TY@É#¹\ ì(ÍžßâÖµˆ¤»ÐtÃɵÄÝz¨l¯Oqþ^øe¥é:²ëZí¯Ý¼Ôdßåÿ�¸½õÇlWoE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�xö‡¥Ý|cóõí~úâ/ Ú+"ÚS‘Tà¼ÄrO·×}#Ið‡t ŸÙz%…«'I#wÿ�ß_xþuÅ7†¼UàJæçÁqAªhw2¥Ñn%òÞ=L.xއò=jhþ3èvRýŸÄšn­ \ƒµ–òÑ™3þË($|P¤VEÏüŽ:oýƒîÿ�ôe½a‹>1ï%´Æ3‚Ë®'Æ~5ð‰õ]+ì^>¹ÑÒÞ 2æÄJ¬K4XC€8;Iÿ�€Ð¨x·þEMKþ¸Ÿæ+f¾mÕn|>t»Æ=víöq¼Ûdö9«Ÿjðçýÿ�ßsP³xGþ<µ/û Þèæ¯9ø‘ÿ�%>ÛþÀÃÿ�G5xõï‹/tqíôÿ�k÷zY–Fy­îÞ6bdoŸ‚HÃ{–ëZ×Aâ ~ tÏkZ‚›�Ï=Ó0š#æÄrzŽhïŽÿ�äT¹ÿ�}?ô!_RWÇþ)Ð.¬4®%ÖﮕYAŠg%NH÷¯rÿ�…S­ÿ�ÑKñ?þ7ÿ�@w„ãËRÿ�°­çþŽj³sÿ�#Ž›ÿ�`û¿ýo^eáÿ�†š½åµëGñ Ävâ;ûˆŠÇ;�åd ¹ùºœdûš–o†:ÂøŠÊØüDñ!y-.$ÛrxAQót;?îŠ�ôoÿ�È©©×üÅl×ëÿ� µ‹MòâOˆž$¸XãÉŠIØ«{š´¿áTëôRüOÿ� ÿ�ÅPï…Ÿó:ÿ�Ø×}ÿ�²WSsÿ�#Ž›ÿ�`û¿ýo^7à_‡ú¦«ÿ� /‘ãzÇìšíÕ«ýžb<ö]¹•þn]³Éö­É¾ë â++cñÄ…ä´¸LgmÈáGÍÐîÿ�º(Ѽ[ÿ�"¦¥ÿ�\Oó³^?¯ü2Ö-4ˉ>"x’ác&)'b­ì~jÒÿ�…S­ÿ�ÑKñ?þ7ÿ�@w„ãËRÿ�°­çþŽjåüuÿ�%_á¿ýv¾ÿ�ÑiX~øi«Þ[^´¼Gn#¿¸ˆ¬s°VB Ÿ›©ÆO¹¬?xS°ñçƒtù|m®]K}%ÐŽêi‰’×j)&3ž7gé@Ïâßù5/ú☭šñýá–±i Þ\IñÄ— y1I;ocóV—ü*oþŠ_‰ÿ�ð!¿øª�ë¼#ÿ�Z—ý…o?ôsU›ŸùtßûÝÿ�èËzó/ü4Õï-¯Z?ˆ^#·ßÜDV9Ø+!ÏÍÔã'ÜÔ³|1ÖÄVVÇâ'‰ Éiq ˜ÎÛ+ ›¡Ü ÿ�tP£x·þEMKþ¸Ÿæ+f¼_øe¬YèW—ñÄw {ŒRNÅ[ØüÕì�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Sd%B’"ºªÃ Ó¨  sá/ ´Þqðö’eÎíæÊ=ÙõÎ+UÑ­£ñN˜º~…¤ÎZÊèºNKÃÛàñdóéÜ×a\Úé¾,Ò¤ºwUkµ"gçÌ·ì Ð‰´«”ðÝû x~ "?<w°ú~à:ÖþȺÿ�¡OÃøù«ø£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐŽGð’øšëY»´Ó…„WW›o̳99a ùyÇ�Ò£ñn.ã›K;=L°4¶ k†)5¾b|°K}AõÍzW…¼K¥Ãg¨–p[S»a‹YOV#¢×ñY±¹ø‘o<RJc@L˜N|æ=Í�q5{Ãá‹5¼›Ó%',~ðìP:úWí>#ÿ� V•ÿ�ƒ)?øÅ|Óã[ûyü1qlå‹'XØîE})ÿ� V‘ÿ�=®?ðoþ&€1<-q¯‹=GÊÓtÖÚwdîÔ$\7šÙêOïßÐT÷ ÿ�„³N'LÓ<ϰÝa´dÁe¾N|ŽNÝÏLs[ÂÞ%Òá³ÔË8-©Ý°Å¬§ƒ+Ñj{iGÅšt‚iö­ÒŸôYz™-ñÆßc@Šn5óá@K¦iŠžQÉ]BF#ŸO$:ØûOˆÿ�è¥àÊOþ1XÞ(ñ6•7†5ÒYË4D ÚÊ;ú•­øJ´ùíqÿ�€“ñ4Ãü3›Z_øL>ͧéògÄ÷¦O2ùÓkü™~3è+¤¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzcžgᧈ4ë_øL<éfo‰¯eM¶ò6TìÆp¼cÍt—&Ò‹4éÓí[¥?è²õ2[ã¾Æ€ÜkçÀ—LÓ<£’º„ŒG>žHþu±öŸÿ�Ð+Jÿ�Á”Ÿüb±¼Qâm*o j¤³–hˆµ”wõ+Zÿ�ð•ióÚãÿ�&ÿ�âhÂ×ø³Ô|­7Maý§vNíBEÃy­‘þ¤ñžýýs^5›Y?þ4Ö 8–÷ÉD½vWýÚgs_ÀûWGáoépÙêåœÔîØbÖSÁ•ˆèµÍø×^Ó§øðþâ9%1Á-á›y1€W'ðÍ�u~)¸×φ5.™¦*yG%u Ž}<‘üëcí>#ÿ� V•ÿ�ƒ)?øÅcx£ÄÚTÞÔ#Ig,Ñ3k(ïêVµÿ�á*Ò?çµÇþMÿ�ÄÐ'…®5ñg¨ùZnšÃûNìÚ„‹†ó[#ýIã=ûú žâãÄð–iÄéšg™ö¬/öŒ˜#Ì·ÉÏ‘ÁéÛ¹éŽkx[ĺ\6z€ygµ;¶µ”ðeb:-Oqâm(ø³NM>Õ±ºSþ‹/S%¾8Ûìh|O>¼Þ¿iºjDcù™5f# 0ŒþbºêãüOâ].ãÃwÐÇ,åÞ=ª ¬ d‘Ü®v�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VEÏüŽ:oýƒîÿ�ôe½k×=«XC¨x³KŽg¸U[¶ ™!?ë-ú”`Hö  -ÿ�‘SRÿ�®'ùŠÙ®CÅ>²‹Ãƒ¬ú™+ 6§rï¡“¶?á±ÿ�žú¯þ ®¿øå�Vðüyj_ö¼ÿ�ÑÍ^sñ#þJ}·ý‡þŽjì¼-áû)lõÓjCn§v£n§r¼ Xv““ïÔןüAÒm­þ$[Â’^:@|É{3¶|æy˜œ{gÇøïþEKŸ÷Óÿ�Bõ%|§ã[(¡ðÅëÎHtáî‡Þ‰"¾•ÿ�„jÇþ{ê¿ø6ºÿ�ã”[Â?ñ婨Vóÿ�G5Y¹ÿ�‘ÇMÿ�°}ßþŒ·¬/ x~Ê[=D´Ú۩ݨ۩ܯV¤äûõ5=LJ¬‡‹4èüýOkXÝ1?Ú—9âK~þf@ç§~=�jx·þEMKþ¸Ÿæ+f¹øzÊ/ j³êd¬D€Ú˾†LØÿ�„jÇþ{ê¿ø6ºÿ�ã”Ë|,ÿ�™×þÆ»ïý’º›ŸùtßûÝÿ�èËzá~è–—?ð˜y“jÊñ=ìkåêÇ6uÚãqÿ�häžæºKYiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz �ÔñoüŠš—ýq?ÌVÍr)ðõ”^ÔgÔÉX‰µ;–} ˜5±ÿ�Õü÷Õðmuÿ�Ç(·„ãËRÿ�°­çþŽjåüuÿ�%_á¿ýv¾ÿ�ÑiZžðý”¶z‰iµ!·S»Q·S¹^¬;IÉ÷êkšñ®‹kÄÿ�‡Ð,·å&–ô1{ùÙ†#OºÅÉ_ø ï@âßù5/ú☭šä<Sáë(¼1¨:Ï©’±jw,:ú0kcþ«ùïªÿ�àÚëÿ�ŽPoÿ�Ç–¥ÿ�a[ÏýÕfçþG7þÁ÷ú2Þ°¼-áû)lõÓjCn§v£n§r¼ Xv““ïÔÔ÷²,Ó£óõ=­ctÄÿ�j\ç‰-ûù™žøô©âßù5/ú☭šä|Oáû8<5*M©Hòêw½GPd ý uÔ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V>§k©mYj|“ˆmç†D¸¸h¾ûDÀ‚³þ¬úu±E�sZÄ$Õ4‹›§iQ™“nó¨Èqøy{í>#ÿ� V•ÿ�ƒ)?øÅkÑ@¾kâM. ¨ÎŸ¤ÉçÝÍs‘¨È1æ9l¨íœW1âx§Ä*‹YŽK!kå5ô¤“¼¶ìù>øÅz}áú÷ÂëZL–!ôHw•;þÙ+c=<‘^³öŸÿ�Ð+Jÿ�Á”Ÿübµè _Gµñ&—ÔgOÒdóîæ¹ÈÔdó¶?ÔvÎ*Ibñ$šÕ®¡ý¥¼ÐìþÑ“íg>Go/õ®’Š�浈<Iªi6#NÒ£3&ÝçQãðò*÷Ú|Gÿ�@­+ÿ�RñŠ×¢€8o è^&ð×öæûM&ãûOV¸ÔF/ä_,I·äÿ�Rs½kVX¼I&µk¨gi@Ao4;?´dç{FÙÏ‘ÛËýk¤¢€9­bjšE͈Ӵ¨ÌÉ·yÔd8ü<нöŸÿ�Ð+Jÿ�Á”Ÿübµè _Gµñ&—ÔgOÒdóîæ¹ÈÔdó¶?ÔvÎ++_ð¯xg\[]&%Ñ^vhü„Ëæ*¯Éã}ë½¢€9­bjšE͈Ӵ¨ÌÉ·yÔd8ü<нöŸÿ�Ð+Jÿ�Á”Ÿübµè _Gµñ&—ÔgOÒdóîæ¹ÈÔdó¶?ÔvÎ*Ibñ$šÕ®¡ý¥¼ÐìþÑ“íg>Go/õ®’Š�æõh<Gªiw'OÒ¢®Âÿ�Ú6Ñž¸ò:é(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform15.jpg������������������������������������������0000664�0000000�0000000�00000041126�15030617045�0023360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨¥º·‚Í<Q±Ü:�–Нý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÐŠ*¿ö…—üýÛÿ�ßÁþ4hYÏÝ¿ýüã@(ªÿ�Ú_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ð�X¢«ÿ�hYÏÝ¿ýüãGö…—üýÛÿ�ßÁþ4bŠ/-dp‘ÜÂìz*¸$Ôô�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Vwˆ�>Õä}Ž_ý�Ögkÿ�ò-êŸõé/þ€h…|:Ú}³6ƒ¥’bRI³žµXÿ�„Sßô�Ò¿ð?ð«úüƒmëŠ!V(‘Ñ<3 Ë>®$Ñ4× ~è›­#;Wbp8àrk_þOÐJÿ�À8ÿ�› ¯Ö¿ì"ÿ�úVÍ�rZ÷†ôxlL:&˜…ï FÛgÊ—�Ž kÂ)áÏú�i_øøS|Iþ£Oÿ�°¿þ†+f€2?áðçý�4¯üü+3ÞÐn¼/¤\O¡é’M-”/#µœyf( 'Zê«#Ÿò'höƒÿ�E­�ðŠxsþ€WþÇþ…!ŠÛDx ‰"Š;ëÅHÑBªs.� ­ºÈð×ü‚æÿ�°…ïþ”Ë@õË]XÚ_|EU»µ‚áWIʉcó{fºšçæ£ÿ�Ü#ÿ�kPöÿ�@‹üOð¬hšLpXÒì”¶¡n§mº ‚ã#§Jê+ÄŸê4ÿ�ûÛÿ�èb€,`hßô°ÿ�Àdÿ� ?°4oúXà2…hÑ@¾‡¢i2O¬Òì˜. ê¹·C±8t­ì þø ŸáUôõú×ý„_ÿ�@JÙ fãCÒG‹tèÆ—d¬n˜¯ÙÓ‰-ðqsùšÕþÀÑ¿èaÿ�€Éþ ÏüŽ:oýƒîÿ�ôe½kÐ)®éz}–£áÙ-l-`ꊥ¢…TãÉ—Œí]]sþ&ÿ�ߨUôLµÐPEPEPEPEPEPEPEP^Og…wâ/[xãÉþÕ—PtÓþÐH“ìeG•öc×?{>_9ë^±E�y çü@ž)žÕµ²ºëmbÚo•ò´ï/&ûs)n>öIÙÆ®)~-ø±|=ö³®Ä×GIKݦÞ&[ï ¦ôhþr:ç‘Å}'E�x®§ãÍvˆ×º]®¾N…šFžT-¤öï$²†ÙÈ‹ ÀœŒ›uK¦øÓÄóü%´ñAÕ…ÅÍÌñÛ\“ h¶J&eyIXÛ]„–V œí=+Õ,ô-7OÖ5ZÚÜ¥ö¥åý®S#·™å©Á8Z4åŠ5Ï´ùÞ+Ó¥»6ó4BÈG5¾e’Q嬄dóä<&ÐH'6_ø’MFÒËO×­¼‡i6ßj‚i—ËýÂË%d,@UG%ˆÈ)ƒí4P„hڭαñÀ:æ³sê—ê–óÛãChYc‡ ?{#q',qÖº?‹CD±¼ð¬÷-e ÌÞ#³šáæ*Àƒžv/ì3ï^›iwkl—VwÜÀùÙ,.[pyü*ýcLÒšÔuK6¶B.'XÌÇ ¸ŒžGOZ�ñ¯&›iãØG5¹ÓÓÁSº@Bl‚F›r*àqó2²ƒÎXcŒW¾.ñAÑ­-F³¦iVÖvV± {¹H`0ŶhÁ…¹'#Ìf(3Êqó{}汦i÷VÖ·º¥µÅÓl·ŠiÕfÈ@NXäǨ«´Áßx—U·øIu¯i.©¨FŽbybMÌÅKb?‘‚®H+Ãu¯8ñF½>»qc¥ßk¿ÚZx’Â(/ŠÂ«yFZmÁT+›hàcçù cè:(É>"C Añ+ÀpêÙ[A7‰$—”¢ !-¿#‡ÎÝÙ÷®~-ø±|=ö³®Ä×GIKݦÞ&[ï ¦ôhþr:ç‘Å}'E�yßÄK¿øK'ƒN×"ž)'º†¥†4µ„GjdBÎy–“n;wc¥aéž;ñ{ø{PÕ$×mîT=Œ`,¶ŒmQÀûDÏ䣔PÜ)pØæRE{õœz†Ÿse+H±ÜDÑ;FÛXcÏZÌÒü6šv —ÓêwÚ…Ìph^ëÊTd©*hƒ’‹Éð9 s\¸–ëà–¯6¹w§^LÚeÆn-Ü<2° "ebª 'g »§jó‹MNÛDÓ|;ªxJîQoáö:ôÖЙaILH#2"peó ÎyÀÉã5ô-âZ‡‹u=GH²k·¢;[iòÜí…d{}ªÛÛbì+¼¤ ¬¸È5Ðx+Æ÷:׌Ο&¬÷°Okup[¤)%ÀD† ¸²¾N6°À5é´PEPEPEPY¾!ðÖª2Flæéþá­*Î×ÿ�ä[Õ?ëÒ_ý�Ð}‡bm>Øÿ�ijÃ1)À¾AïV?á‹þ‚z¿þIþ5£§ÿ�È6×þ¸§òb€8ýÃñ<ú¸þÑÕÛ÷_–õÆ~DäóÉ­øFâÿ� ž¯ÿ�ÒúýkþÂ/ÿ� %lÐâÅj:£fþÝ~k×8ËŽzõ­øFâÿ� ž¯ÿ�Ò$ÿ�Q§ÿ�ØFßÿ�C³@ßðÅÿ�A=_ÿ�¤ÿ�ÉðLJâ—Âz4‡QÕTµŒ …½pcx×ÖG…?äNÐÿ�ìþ‹Z�oü#qÐOWÿ�Àé?Æ›áH„#ÄÜ%õâî‘‹1ÿ�I—’OS[u‘á¯ùÍÿ�a ßý)–€5ë’½Ó Ô>"ªÌ÷*IÈò.¤„ÿ�­îQ†ëkÿ�šÿ�pý­@ÿ�á±ÿ�žú¯þ ®¿øåcøƒÃÖQÁ`V}LæþÝNíNå¸.=dàû×_XÞ$ÿ�Q§ÿ�ØFßÿ�C�ïøF¬羫ÿ�ƒk¯þ9Gü#V?óßUÿ�Áµ×ÿ�­z(Ðü=dóë�Ï©·î£n§r8Øq''ÜÖÇü#V?óßUÿ�Áµ×ÿ�¦èëõ¯û¿þ€•³@•LJ¬‡‹4èüýOkXÝ1?Ú—9âK~þf@ç§~=kÂ5cÿ�=õ_ü]ñÊ.äqÓìwÿ�£-ë^€9 kGµ±Õ<;42ß3j*â{é¦_õ2ÿ� ¹÷ÅuõÏø›þ?|9ÿ�aUÿ�Ñ2×A@Q@Q@Q@Q@Q@Q@Q@Q@Vn·¨\iöq=¬QI<×À¢V* »’@&€4¨¬mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠ�Ù¨o6}ŠãÍó¼¿-·y;¼Ìc»~mÞ˜ç=9¬-7Qñ§¥Ú_Çk¥"\“*´òdP@?/½Zßâoù÷Ò?ïüŸüE�|õ§Áã­3ÂËmcmâËyâÒ„‹Ct�»ûyà.1Ì I~kÙ~!i°øŽ×AÓ¥µ½x.¯|‘ZHÿ�g k4jïòaäïcO�ãZMGÄqê–ö×J/42ÌÏ“�# #îÿ�ÓAùµ¿Äßóï¤ßù?øŠ�òûÅñ<þ$ð.£y¥ß^ÞÖñ.$KI$Š*îhÝ"³œýÐüñƒTâÅɦè/qâ‰nfÕm—P‚;KÈþÏÖ[œ¾öÞ§ä ®c( w^4ñ–³àŸ>¯}g¦Ë‘bXâšL³ãªûè·ø›þ}ôûÿ�'ÿ�@)¥^üKþÍu‰<Cý¡/‡Ù?Òà›`¹[£Ð°Ú²}œpxÜqœ“Z—mâ…Ôàûü%Øm­Ú-¿š.ÌâÔÄEÑ“?6ÝÅv—äs·Œ×«ïñ7üûé÷þOþ"¨éš¯ˆµH®$ŽÓKA ̶ä4òrcb¤ýÞ‡—w¤ê–>5Ò­í5 JãK»³÷eää<,Ž$<õ‘ABG$œ÷9îë–·Ñõ[MfóWƒOÒúñQn%ûTÇxPñ·€@íNÔ5_iòØÇ%¦–Æòä[¡YäùIVlŸ—§È:�éè¬mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠ�Ù¢©h÷ͩ薃Æ#k«hæ(B–PØÏ~µv€ (¢€ (¢€ (¢€ (¢€ ÍñïøFum„ûØÏLì5¥YÚÿ�ü‹z§ýzKÿ� �ɱ‹ÅßÙöÛotM¾Rã6’çôÒ§ò¼aÿ�?ºþÍÿ�ÇkcOÿ�m¯ýqOä*Å�q:$^+3jþ]æŒÛÛ~ëIN[btýçN•­åxÃþt?ü›ÿ�ŽÔúúýkþÂ/ÿ� %lЯÅâ± ›y£öø6í´”|ÛÆ3ûΕ­åxÃþt?ü›ÿ�ŽÔþ$ÿ�Q§ÿ�ØFßÿ�C³@ÿ�•ãùýÐÿ�ðoþ;Y~‹Ågš9†óE}†í%,`ÆH“­v•‘áOù´?ûÁÿ�¢Ö€+y^0ÿ�ŸÝÿ��æÿ�ãµ'„„ãBatÑ´ÿ�m¼ó%*¥¾Ó.p $Æ·+#Ã_ò ›þ¿úS-�k×%{¡'ÄUûÕ´ 4Ÿ˜ÏnÒ‚<ÞØuÇë]ms¿óQÿ�îÿ�µ¨ßÙ¼Gÿ�A]+ÿ�²ñúÇñ¾¾ °ó5=1‡Ûíñ·O`ï?ëÕ×Ö7‰?Ôiÿ�ö·ÿ�ÐÅ�;ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çë^Š�ä4;}|ϬlÔôÅ"ý÷nÓä9;‘ûáíÍl}›ÄôÒ¿ð['ÿ�¦èëõ¯û¿þ€•³@•Å¿ˆ?á,ÓÔôÏ3ì7Xoìé0™o‘?“Ó¿c×<k}›ÄôÒ¿ð['ÿ�¢çþG7þÁ÷ú2ÞµèÖ¡ÕÓTðé¾¾±šíEù`³x›>L¼äÊÜ~××?âoøýðçý…Wÿ�DË[“»Åo$‘ÄÓ:©eHÈ�I�Ó“Š�’Šåÿ�á%ñýº¯þÙÿ�ñê?á%ñýº¯þÙÿ�ñê�ê(®_þ_Ћªÿ�àmŸÿ�£þ_Ћªÿ�àmŸÿ� ¢Šåÿ�á%ñýº¯þÙÿ�ñê?á%ñýº¯þÙÿ�ñê�ê(®_þ_Ћªÿ�àmŸÿ�£þ_Ћªÿ�àmŸÿ� ¢Šåÿ�á%ñýº¯þÙÿ�ñê?á%ñýº¯þÙÿ�ñê�ê(®_þ_Ћªÿ�àmŸÿ�£þ_Ћªÿ�àmŸÿ� ¢Šåÿ�á%ñýº¯þÙÿ�ñêóºÞ±uàH–çÃwúZ¥ôN·2ÜÀÀ0 €r3gߨÜ(¯4?‹5Ð6­¶¹<ðŽ<«Ïß®=2Ù }¯qð7Äÿ�xˆF/| u,MÖòÔù1‘ê¤ø=�zÕcx“ýFŸÿ�aý VÀ$¨$Hè{VŠäxl,¤H$—P·"(ʆoœp7?2(zŠÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǩ�ð§ü‰Úýƒàÿ�ÑkZõÉxcV½O èȾÔäU±€Y-°ß»^FfQZßÛ7ßô-j¿÷ò×ÿ�Psÿ�#Ž›ÿ�`û¿ýoZõÉ\j×§Åšsÿ�Â;©†7@'™m“™-ùÿ�]Œ z÷øÖþÙ¾ÿ�¡kUÿ�¿–¿üz€<ÿ�ö…ÿ�’ký„"ÿ�Ð^½^¼gãΡuuðñ#›G¾´_·D|ÉÞ¿uøù$cŸÂ½?ûfûþ…­WþþZÿ�ñê�×®Â?ñ婨Vóÿ�G5YþÙ¾ÿ�¡kUÿ�¿–¿üz°¼-ªÞ¥ž¢Ãú”™ÔîÉ+%·ÊÜs(ätôúÐi\ÿ�‰¿ã÷ßö_ý-YþÙ¾ÿ�¡kUÿ�¿–¿üz°¼EªÞ½ç‡ËxRMºšKo˜ùRð1)ç¿8PiEdlßеªÿ�ßË_þ=NV½y[úš` ´–ØQêq18ú �o…?äNÐÿ�ìþ‹Z׬ È¡ÿ�Ø>ýµ¯@Q@Q@Q@Q@gkÿ�ò-êŸõé/þ€kF³µÿ�ùõOúô—ÿ�@4Ÿbþ$û¶Ø4¾Rã3Iœ`³V7ø›þ}ôûÿ�'ÿ�Z:üƒmëŠ!V(ÐßÄ^~¯åÁ¥“ö÷ݺi:ìNŸ/J×ßâoù÷Ò?ïüŸüEúýkþÂ/ÿ� %lÐâñ‘aæA¥öû|mšN»Æ?‡¥kïñ7üûé÷þOþ"¨Óÿ�ì#oÿ�¡ŠÙ  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄVO†Äð‰èÞTQì0m-4€ãËÏËÖºúÈð§ü‰Úýƒàÿ�Ñk@ ßâoù÷Ò?ïüŸüE7žqÑíßn¼Þ#$¨?i—8'µmÖG†¿ä7ý„/ô¦Z�×®Jüjâg½ª?öWÍö„fó{`Šëkÿ�šÿ�pý­@vx›þ~4ûñ'ÿ�Y OydúYo·ÆØdë¼cøºWaXÞ$ÿ�Q§ÿ�ØFßÿ�C�lñ7üüi÷âOþ.ž&ÿ�Ÿ#þüIÿ�ÅÖÍÇèiâ/?WòçÒÁû{îÝ v'O›¥kìñ7üüi÷âOþ.ý~µÿ�aÿ�жh¸Oÿ�ÂY§f}+Ìû ÖÓäÉŒy–ùÏÍ×§ëZÛ<Mÿ�?Gýø“ÿ�‹§\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö½�qšâëƒRðçÚæÓš/íTâ(œõRç«Ùüq]sþ&ÿ�ߨUôLµÐPEPEPEPEPEPEPX~+ðž™ã-%4ÍXLÖË2Ͷ)6À2}95¹E�sº€¼+áͧJЬá‘zLÉæH?àm–ýk¢¢Š�+ÄŸê4ÿ�ûÛÿ�èb¶kÅwÚØYOq4pš…¹y$`ª£xä“À  ê+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��<)ÿ�"v‡ÿ�`ø?ôZÖ½r^ñ?‡áðžšî˜’%Œ Ê×q‚¤F¹gƒZßð•øsþƒúWþGþ4�\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö½rW'ðùñf ×tÃØÝ)oµÇ€L–øÏSƒùÖÿ�„¯ÃŸôÒ¿ð2?ñ ?ý¡äšÇÿ�a¿ô¯W¯øó®iÃÄ‚ÇU±º›íÑ7—Â;ckó€zW§ÿ�ÂWáÏúé_øøÐ½sþÿ�-Kþ·Ÿú9ªÏü%~ÿ� þ•ÿ�‘ÿ�ax[ÄÚ6zˆ—[ÓP¶§và5Üc*eb^„Pi\ÿ�‰¿ã÷ßö_ý-Yÿ�„¯ÃŸôÒ¿ð2?ñ¬/x›@–óÃæ=oMq¦®ånã;WÊ”dóÀÉ�v”VGü%~ÿ� þ•ÿ�‘ÿ�'ü%žó0i_øøÐøSþDíþÁðèµ­zÇðŸ>Ðÿ�ìþ‹ZØ Š( Š( Š( Š( ¨k¨ÒxRDVgkYBªŒ’v�«ôP?gâ}*;tyn,jû$Ü?Ý©ÿ�á*Ò?çµÇþMÿ�ÄÖÍÈèÞ!Ó­¦Õ Íp‚kÖ’<ÚKó)Dû¾ Ö¯ü%ZGüö¸ÿ�ÀI¿øšÙ¢€9sÄ:uÔ6B¸sì6-%áUÁ'îúV¯ü%ZGüö¸ÿ�ÀI¿øšÙ¢€1¿á*Ò?çµÇþMÿ�ÄÖ_†üG¦Zø_H·™îX¬¡GSi/ >íu´P7ü%ZGüö¸ÿ�ÀI¿øš<,â]¥Pád½»uÞ…ISq!‘A­š(�®^öãû?Ç‹w5µë[¶™å ³–eßæç¢œs]E‘ÿ� -üðÕðSuÿ�Æë/\ÖíX-5W1ÞÁ+cJ¹áUÁ'ý_¥utPGü$¶?óÃUÿ�ÁM×ÿ�£þ[ùáªÿ�à¦ëÿ�Ö½Êhúݽ´Ú£Miª šõ¥þ%W?2”AŸõ~ Ö§ü$¶?óÃUÿ�ÁM×ÿ�­z(–Ÿ\¶XÝ-¦ª`ŽÎæ7쫞ž£ý_pùV—ü$¶?óÃUÿ�ÁM×ÿ�­z(”ÕuÕu-;K]D˜µ,&Ÿ<Jˆ"d³ ’^õÕÑE�QE�QE�QE�QE�QE�QE�QE�QE�âOõý„mÿ�ô1[5âOõý„mÿ�ô1@4QE�dxSþDíþÁðèµ­zÈð§ü‰Úýƒàÿ�ÑkZô‘sÿ�#Ž›ÿ�`û¿ýoZõ‘p§þý5°p,.Á?öÒÞµèÊ?h_ù&±ÿ�ØB/ýëÕëÊ?h_ù&±ÿ�ØB/ýëÕè�®Â?ñ婨Vóÿ�G5tÏøGþ<µ/û Þèæ ‚¹ÿ�Çï‡?ì*¿ú&Zè+ÄŠÍyáíªN5E' òe  ú(¢€2<)ÿ�"v‡ÿ�`ø?ôZÖ½dxSþDíþÁðèµ­z�(¢Š�(¢Š�(¢Š�(¢Š�+Ìþ![iÐ|Gð.±ªÛÛ®›ÝÇuwqòãc0ïcÀùòTž‡&½2Š�ñKYOÞ‹ß_Á§Ùëž*ŠÜÉQl¸·kx–IT²œ…”9Ü>\±ÎsU>üBñ‹o-aÕuë{bòŒQ=¼`jkæ8—¶C€�„sÉW¸Ñ@/ÄOÿ�gÉ;êžEãYê2ßÙù1Ä¢HsöqÊäù„*áó»wËŠ­añO_þÓ°[vÝ mCIY·E+«ró© p†ê3ó^ÿ�E�xÇÄOÛjå ñqe6­ f‚�Ð-º©·ü˜%äo/‘ƒž�<×I¨x«Äx?Ã:ŒÔu²²Op#Š+"aF_Ëu dÈË)?ÑÔzV‘¡iº½þη0ý¶éï.3#¾ùŸ›æ'ÀàqZ4å6Þ*Ö=B;¯Ù}º;}ïäþËï£SóüÈ› Ê Õ‰ßÑJŒ“ãϾ Ë¦êóG±žÖ=CËõ@@êž\dJÃjª˜Ù€‚lªZv­eªý¯ìSù¿d¹{YþF]’¦7/ gŽ(Èüwö¿‹•Ö¡Õö§á$¸¸GdÌf\¦ • ·œ¶g¥høÆ?Z|]ðE´ÿ�ÙËæ¾ ÷‰.ϘË æ×sd.zã½]×´ß é­©j³<6ªê"Bòà±ÀÈ@HÉã=2G­UÕ<_¡èú~Ÿ}yzE¾¢è–f($”ÌÎ2¡U“‘ÓŠ�ðÝdÙÇñbKHîc­¼O¢ElNÂéŽ@è�áHE?îŒó]5¯|Qr÷sêþ›¦CÔ‘\Y´ÑÇsnU›j¨’‘†PdgÝŽ çåöŠ(…ñ7ˆµ=?Àº¡es"‹É­#½ÔeUí  ó²UHソ«ÏT›Å^=ðm¶»ö«DÔuíÝ„j·p¢"ã@˶TÇÉ•Áɯ}¢€<?Ç·º^™ñgV¿vVº¯…^kYbf«!d�8 ÈPÓ;Oª…‡Å=ûNÁnuÛvµ %fÝ@®­ËΤÀF¨ÏÌM{ýáóüJÖ|XéÚäSÍýŸsu ÝÁ0ÂÉr±ª >ñòVL’v†ˆügâÔÑ¢˜øŠÑã»Õ¦€^ËqhRÎ�™„K$1É3·\ƒœ� ç#ص}2=cL–ÆIç\« ``J°`FA@à‚B* 'BM.êêòKë»ëÛ¥D–æë`b‰»bª€7·Aßš�àþ0H&ø!<º“Z=ó¥«+G÷ ÅÓqp¦üq¹÷¬­ZßEñ]ìþÔâÓ¼1q­´—±+Û%ÛMÏ•bSå–?('žq^ßE�xŸü&š•üþÔåÕ¯ µ–MT܆…A&q•~ùLeG\å@85Ôü5ñm׈/uKQõ¥¥ÂM$QG½åW/å„(0ƒ ó+nסÑ@Q@Q@Q@Q@Q@Q@TWZ[Éqs4pÁîy$`ª£Ô“À-ckþ)Òü8‘-ä¯%ÔçöVëæO9ôDŸ¯�w"°›ÄšÇŠØÁáE¾žN\¼ˆì#¿‘Áÿ�´p¼w­ÂZn€ò\ÇæÝêSôBíüÉåú±è¿ìŒé@hâ{ëÇÔu”·Ó¬ž=°i‘âI$òÉÓwQµxêMmÞXÚjæÞöÖ ˜IÇ4aÔ‘ÐàñSÑ@ðŠxsþ€WþÇþÂ)áÏú�i_øøV½Ž<'á°�Ò€�²ü)áðçý�4¯üü+^Š�Èÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�Âµè  ¿øVú%Šãúc"°p²/#è~•cþOÐJÿ�À8ÿ�Âµè  øE<9ÿ�@ +ÿ��ãÿ� Aá/ ŽžÒ‡~,£ÿ� Ø¢€2?áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð­z(#þOÐJÿ�À8ÿ�ÂøE<9ÿ�@ +ÿ��ãÿ� ×¢€QÁ C iQ¨TD\*À�‚ŸE�QE�QE�QE�QE�QE�QE�QE�QE�WÎ÷ |K%õûÃáCÝk*‰í‡îçVÙH ‹œt^¢¾ˆ¢€8[;Xÿ�…a¡iÒéÝêVçNûU¯ cäKÈK3…9žç;‡¾9GÁž$±Ó|?cm¦Ë©C£ø….­ü©¢SŒL̪L޹sæcŽ1Î03ì4Pƒê¿|K'‡uÈÅ…ýæ½<ùŠà\Ú¬¤ `~Y7„ ™sƒòºÓÀÞ0¶ñÜXéSXB·Ú°‚u¸‡ö÷*Ûü¡óµsí�ã’5îÔP€ê?<W/‡î"°ÐM¼ÿ�ÙÖ–æsg¾Ž`ïy»~P2äç#®ÛÄÓ›Wðü:46–wñ™RæÄ²ïw*âVÀ';[$cŒät¯Hªícf×É|Ö°ÄCÜǘ¨NJ†ê{PÈ‹*"…E�*¨ÀÐS¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *†±­iºž÷Ú¥äV¶ëÆùÞ=‚ެO æ¹7ÄÞ3âqáÍ ºÊÊõÊÿ�²:B§Ôå¾”¥­øÊ×N½þÊÓm¥Õõ¶�­®>Lôi_îÆ¾çŸ@j·ƒï5»ˆõ]¥ó©—Eœr2§™Xy¸ôÐèš—áÛ²iv‰o;œŽZFîÎÇ–orkJ€UQB¨  `�0�¥¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢±uÿ�i~X’îG–ò~-ì­ÐÉ<çÑr~§�w4´NMq÷¾3›Q»—Lð}¢j·ˆvMxí¶ÎÔÿ�¶ãï°þâdûŠƒû^ñ‡ï<M#išKr4kI~yGý7”r}Ñ8õ&» ;+]:Î+K+x­í¢]±ÅU€ �ç´Co¨&±­Ý¾³­òÜΠ$ÐÇÒ1ïÉõ5ÔQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QM’DŠ7’GTff8 RO¥�Gwwoag5ÝÜÉ ¼(d’G8TP2I5 z¶Ÿ.š²ÞB4÷ˆL·,áSa “ÐcÖ¾cøÁñQü[zú.)]ù¤RGÚœw?ìƒÐ~>˜Ñøueâ=Hx{Ä s{”fãNµ‘ɶF –܃†nr7duïŠ�öñµâÒaðŒB×N'®^Fv°ïäDy“ýæÂýkg@ð–›á÷–æ!-Ö£?ü|jmæO1÷cв0¥n�B¨�€jZ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢±<[â{/øjïY¾9HW 82¹û¨=Éü†Oj�ˆüU¢øNÃíšÕüV±œìRròÙTrOÒ¼Ý~.øŸÄ%›ÁÞ¼»´É wvÅQÿ�,/þ<jøçÆšƒøçÇý¢[¯šÇN“>\Q *{c¢Ÿ©É<MâMø‡âìúIÕõm6ÎÛFŠXÓN¹ò@>a\ccÝ…�K/ˆ~7d¼¢€G!§BG>¿hÕü$?ÿ�èLÐÿ�ïòÿ�òEP_‡àøÆMþß}tõº ý£óî22ã;qŒJ±/Ãxã×ì싼YåMk<ÌN¥óFˆ |½?xÙú �ŸþŽô&h÷ùù"øH~9ÿ�Й¡ÿ�ßåÿ�äŠæ¼SàçÑüUá]6ø–HuK‰#™¥Ô2È. £æ=A­ûÿ�†ÑÚÞip§‹¼XVêå¡rÚ— d~>^¹Aøf€,'ˆþ7«n—ÁZ+ êuÿ�Jò®OÇ>6ñ^§c‘âíPðΑ,›o.ìà3yòd�õÁ9ô=A¬|:M<X˜¼[â¶ûEäp6ýK8V'$|½k;Åž MOíñˆ¯a¿Ö­¬n ¼Ô #Äå·”)ÏËŽ½èÀÿ� >ÞéÑêZky:nf$+w0ìÃ5êv:uŽ™n-ì,íí #·‰cQøŠðxÀþ$ðmÕå•’…[ë8nåL®p0mÄdò 8ëÓ5Ú9Óu_‡×~!Ò5=la,Ñ1ÖnÉÕy¸Èa€=RŠóíE†ËÚ¥Õ½þ´“Ái,‘·öÍÙÚÊ„ƒƒ.:Š—JÐmît{å¿ÖšY-ãwoí«±’TÖÐyEyXo¼5¥]ÜêÓÏ=œ2Èÿ�Û7cs2N¸êj? hñßè×7:†·$Î_slÝŒáØ’z@EyÃya,³êÓºÞ]DöÍØùRyGöUð¨ô=;³©ùú†¶þMô‘Gÿ�›±µ�Iï@EyÃq¨k1K¨kL–÷‹CûfìmSOõ¼üÌÇŸZŽÃGŽoêö²jÙ†ÜAå/öÍß˹I?òÒ€=ŠóØ4X_Ä·Ö¨kF¬íåDþÙ»á™æ sæç‹ùTgGþÑeý¡­ýŸì&]ŸÛ7Ì9ó3Ò€=Šãt»OìßÙAÞ¢ðϧ]<‘ÜßÏp¥–Kp§;�@väzšì¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯ø‡ø»âï…<!.^ÂÝþí?…úà˜ÿ�šö ò(È‹öŸ›Îÿ�–ÚGîr=‡ÿ�Ôë€���t¼£W¼¾³øßzö:cê ѤÉÑæžrÄ õŠóVÿ�’í¨Ø/ýh5usþ²ÿ�Â/?ý”‹äý²…óXîÎq׌u«së:ññVžç³‰•ÈXþÛXƒ';±ÆýõíZIÿ�%>oû'þŽz½sÿ�#Ž™ÿ�`û¿ýo@qãmSW›Æþ ’Mo,WSb7Q1˜á2 Ž:ú×QªkZój) NŒ·¬QMì'yû<Ã{Ž <úUˆòP¾ÿ�×äÿ�Ê:ì5ù hõþßúM=�s> ÖuÙ™æxZx¶ê²æö¸äáxn3ëXÿ�5]føEþÑá¹­¼¿Z<{®âo5Æì ÁàŸSÇÜx›îéöƒùšÂø—ÿ�2ýŒÖ_û=�GâÍ_\¸ðÅôWš8T35ä,�Ü:€y¯;ðæ¡ªxrÛÇþÈ••-æ¹Xšå[FÑà““†Z3òŸç^Ëãù/¾‰ÿ�¡­yn±ûï‹Þ5h¾e‹Ã³ è’œÌPoâ=k^“òKáI⬦ !½„ìNdâ§Ñõ­}4KO Ü: h¸¾€nG8-[^)ÿ�‘CZÿ�¯ ÿ�ô[Túü‹úoýzÅÿ�  �å¼5¬ëÑøWHH¼+<±­”!d°€ã`ÁÁlŒÔ~ÖuØü9j‘xZy0âöÏÎÝ‹fºO ÿ�È¡ÿ�Ø>ýµƒÿ�äV´úÉÿ�£€0ô g^M:Q…g‘~ÛvK ØF ¸‘Ëv9…G k:êWËð´ònÔ%fÅì#iÂåyn~µÒxkþAsÿ�ØB÷ÿ�J¥¨ü5÷µŸû Íü–€0ô­g^]G\)áYÝšõK¨½„l?g„cïsÀZOÖuÕñ.´ëáiÙØA¾?¶Â6aN9݃Ÿjé4où x‡þ ÿ�¤°Tz_üz÷ÒÛÿ�@4‡³¯j<+9Ù[í°å@yðs»äÿ�ß>õÖußøL„Ÿð‹Oæÿ�g•ò¾Ûqæ›;±íŠé-¿äqÔÿ�ìiÿ�£.*3ÿ�#âÿ�Ø0ÿ�èÑ@h·Úïì~ߣɧlÒï6ož97æ[lýÒqŽ:ú×y\¬ò?iŸö ½ÿ�ѶµÕPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^Cñad𷌼/ãøc- ¤Ÿc¾Ûœùmœ~'ã¶½z©júMž»¤]iz„"kK˜Ìr!ôõ„{(Å­Ô¶±]ZÊ“A2ŽD9VR2>•åš¾§kïaÔ­æ4Ñ"uWÏÍ#<V&›¬ëŸ¯N¯A>¥á$?b¿ˆe­òs´æ¼s’¹äU«‹íSÄ_.µïj^¼‰´˜#¶´¿(2IÆÔä0)È8ÀaÇ4u|áÃñ [Oì˜>Î4¤”GÎ7y¬3×ÐU¹üá¥ñVŸ�Ò =•˲ó‚Êð�zöÜ:Á_øYðÉøE?´?³?ññåy^kcßvìûcnøY¿ð’Øîÿ�„Gí_c¸òñö›7ÿ=ó˜ÿ�{P_¼)¡YxßÁ6¶Úl1Áuu2΃8p`}Íu§ü3¡¢¢i*ËzÈànù‡ÙæluõP åõí'â©âßIvþ[Ë3=ͯ”ngÈ'ºãõ«©ÂÍû~‘çÿ�Â#æ}­¼ŸiÆÿ�"\îÏm»ºwÇlÐïx'ÃvãLò´ˆÌÔ!±žT“‘Ö±þ xC@°ÿ�„_ìºd1}£ÄK·?<m»*yèp*]sþ^4ïµÿ�Â%ÿ�Ñy^WÚÖdíÝŸáõÇ5‘ã{ßZ.‘qâ{ß GŸ©[ߥ½¬Ó¤ól` •Ãp ïЀtÞ1ð‡…´¿ j¿Ùvðù(­ædñózàüáK [Á~,ñ]]%ÃXFr(ŠÇ#מ;ýÊÄ׊~)i/qo§®á«F]Óœ\¾à8m™8ÏM¸ùÅzN³·§xR±‡DÑí¬¡Ó¦Œ,Z”‡bÏAä œ{ŒúÐâ?øfßôðé$±ÙLèÃw! õ©ôøbmÂY4{vw¶˜Ü’£=éÞ%¹ñ!ð¶®%Òt¤ŒÙM½“S‘ˆH@ÉöÈúÔÚ5ωF‡§ˆô%“ìÑí-©È F2>ÎqùІ¼᫟ éͤ@òËe »ä±@IëQø[Á>ºðå¬Óé<ŒdËó‡aëW<1sâAá=C¥iO±ƒc>§"± ƒí“õ¨ü)sâ5ðݨ‡JÒž<Ɇ}JE'çnÂüè=Àþ¸Ó¥ytˆ…íÚs÷VâE¯`�¨ôønsªùºD åêÆ™Ï àu«ž¹ñ Ófò´­)—í×™-©È§?h“#ýAà€{Žp:T~¹ñm[ÊÒ´¦Î£)}Ú”‹†ÂäÜ~>”•à K¨ëˆúD ±^ª 9ùWìð¶:ú±?G§ø'Ãrx—Z…ôˆ q6/?.Tç½\Òn|H5-wf•¥3åÞS?g‡ûƒ‘ŒñÉ#dǧ\øŒx›[)¥iFB-÷©Ô¤�|§>G?üh8<á¦ñV¡Ò 1%•³ªó€Ìó‚z÷Ú?*Œø'Ãð™ oìˆ<Ÿìó&Îq»Ì=}*å½Ï‰?á,ÔÒ´£/Ømw)ÔäÚùðAò9=xÇœñ¹ñü& ÿ�ei^wöq´¤Û·ÌçÈëžØühGEðþ•¡øþÄé–QÛyÚ]癳?6%¶Ç_©®ò¸}.]ROXiYÙÛãK¼òþÍvÓnýí¶sº4Ço_»Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ŠæÚÞòÚKk¨#ž ׊T ¬=<ñO|-ð‹xÎö k§ÐJXÛÏ·¸7»Î­ÃvÂ'­{…qZ–•§j~>Ô>ßakwåév{<øVM¹–ë8Èã ü¨É€Ðø¹ì£ø…zª,_µŒ±ýá^wŽ8Î=êi~m×--ÿ�ádÞ7™m3ùþ)µ¢Öìÿ�À+¹_hð±å·þÆÓ¼‘¤#ùeM»¼æÆ1œw«—ÐG‹t膉¦ˆÚÆé™>Ș$Io‚F:ŒŸÌÐ›ÜøË×´ûoøX׿Ã3yæ~bÛ³ûÏâÏþ;R^ü>ònôÔÿ�…“{/rSyŸýWî¤mÃ÷Ÿìíÿ�Wá½ |a£Dº.œ#{k¢È-S A‹ŒsŒŸÎ¦Õ|5 ¦¥¡ªhšj«ß2¸ˆ³Ìpxädø �ó}Wáú[‹1'Ä[Û¥–ê8Š›¹Ÿâûç¥i¿ÃŸhÐCx×ëª^›ÛPÒ^]+‚xÃeFI9ã5Øx‹ÃzK¥ùz.œ›µU¶Ú È$ä:Tž!ðÖƒ› G¢i¨ÆúÍI[Dæ0GN„?�_ê:RxFî kË%UTTŽ9T�/�V<S«i²xCZDÔ-šÂpL¤“å·½Rñg†ô(<1{$Z.¨\2Z #çñRxŸÃZ >Öe‹DÓRD±•ÖÑR#lqÁ  ^'Õ´×𞲉¨Z35Œà2’O–Þõ6‰«é« éÊÚ ak ̼|£Þ¨x—ÃZ >Ö%‹DÓRD²™•–ÑRàƒŽ O£xc@“BÓÝô=1­£,Íi$íž(|-«i±øCEGÔ-–Â�TÌ ƒå¯½EáWNÊú…ª°2d4ÊúÆ÷¨ü1á­o hÒË¢i¯#ØÀÌíh„±1®I8äÔ~ðÞ…?†­d—EÓ¤rdË=ªxÝñ@|9«i©¦LP´SöûÃ2Ž Ì¤wô¨¼9ªéÈÚ¾íBÕwjR‘™”dayëQø{ÃZ ºlÍ&‰¦» ëÅ­œ ™�:��ü*?xoB•µo3EÓŸf£*®ëT;@ €8é@t[M]O_-¨Z�×êT™—‘öhúƒQiº®œ¾)×\ê¡X[í&eÁùNj='ÃZ êZò¾‰¦²Ç|ª€Ú! >Í Àã’Oâj=7ÃzøŸ[´]9‘¾Å6¨Båp1Å�]·Õ´ÑâýEΡi´ØZ€Þrà‘%Æ{û΢:®ÿ� Àí ]ŸÙ¤nó—ój; h'źŒGDÓLkcjÊŸdLd¸ÉNä*3á½ þaö.ågÙöTÛŸ0 ãhbÎòÖïÇÚwÙ®a›n—y»Ë6?{kרצéZv™ãí?ì¶žf—y¿È…c݉mqœzŸÎ»Z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢³¯uýMºK[íZÂÖáÆäŠ{”Gaê94£\¶±¢ëÏâ)uMëMDžÒy#¼‰ØƒÊÀ‚¬:ù¿¥u4PŸ xÌx…µ·h>kZ ]¾DÛp¶~÷^}jY4ɪÛß›Ý|0KDØ!Ú2‹þ™Î»Ê(ŸÃž4ŸW³Ô ö€Ú9cUM‚nsó°)÷Zn®,¦k߃k1™@‚nIÓŸ›ÑÍwtP¨xwÆš€µ} /Ùîqˆ&ä¯o½OÔ4êÉ Þè xfÊÁ7XäWÅꢺûÍ[MÓî-mïu Kiîße´sL¨Ó6@ÂrÇ,¨õ«”Àê¾ñ¦«¦Íe%ö€©(�•‚lŒ½íOÔ´êZUå„—º¥Ì ‚`@e ãæ÷®î©Ç«i³j“iqj¨B›å´Y”Ê‹Ç,™È2òGqë@†¥ x×QÒîì^÷@T¹…áb°MHãç÷§Ùèž5³²·µ[ß•†5Œo6Hßö®þù¾Wöî™æmß³íqçní¹ÆznãëÅHþ Ñcš8dÕìY. ª#\ f˜`ÀÏ.2>^¼Z�åtÝƺn•gaî€ÉmB¥ ˜’@ù½©šW‡|i¥é±YÇ} 2Æ[ ˜žXŸï{×u<ðÚÛËqq,pÁ’I*¢’I<�9¨­5û¾²½·¹³`JÜC*¼dAÃŽ ý(ŒÓôéöÏ ^è4óM“Ç™$g?ÅêÔÝ?þ4°7e/´ûEÃNÙ‚n có{WJ<_á–µ’èx‹I6ñ8ŽI…ì{Žp¤îÀ'cVmõíóO–þÛV°žÊ,ù—\£FŸV€9K]ƶ·7Ó-î€MÜâf ¸"4N>oDËøÒßR½½[í�½ÐŒ00M°1ó{×g§jš~¯mö2þÖöÜ1_6Úe‘w£*HÏ"¥´¼µ¿¶K›;˜nmß;%…ë`ààŽ Š�âcÐ<k«q~/t óA$y`iþ/úh*oü#¾4þÚ—Û´0[ù|‰±Û³÷«½fTf 2IÇ$à~µWOÕ4ýZ›M¿µ¼Š71»ÛL²*¸Á*J“ƒÈãÞ€04}_OC©ë:cÇ œÖè–qȧ2<M“¸ž?uú×UL–Xíáy¦‘#Š5,î쪎I$ôoã/ ÝËå[x“GšM¬û#¾‰ŽÕ˜à7@'ÐhnŠ£m­iW—¿cµÔ짺ò„þDS«?–q‡ÚvËÏNG­^ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ãF´:N¯âÛh×·çWÔ^x&ŽÉ§ŽâÝ•BDÎTÙ‚0åG9èôPÞÏælKý¶Û¼;ìŸØþ_;vüžo¦?y»¥qKqñ<=Àñq¾:JIÌW%…Úßm‘ÿ�>ü‘ѺœšúNŠ�ðÛÝC^ºø¥ªÚé—zô–pêÉ=ÁHm%¶w¸G(ÄíÚ¼0nš»¦ÃãøT¶—¦]ûnIã‹QŠãÏiV™²Ñǹ_qB¹(C0y¯\ƒN±¶¼¸¼·²·ŠêçoŸ<q*¼»Fæ-Ó5f€<£OƒZ·¹òfÔüM})·˜%à³¹·¯û”壓¸ D»ñœŒã6XüY>£i ­Ö¿§é›¤ tÖ÷—$Ü,«ÙÖUŒ€À K mýA =¦Š�ñ=zÇÄzô7Z¶±q-¯-å…"Ši-ãÓÑIYTÈçqç­oø¢÷\‹Ç‘5Ÿˆd†+«ËÄ%û*À\™Ü*²|¸Vó åx¯M¢€<ÎçÇ0ø‹u’ø‘¢ûn¯ò+–‹ÉòTÙ—Þ10œ1çŒ[~Óõ(>"éw÷ÖúÓ´ÞH®®oâ™¶Ý™·ºq…èHÆ:v¯]¢€<àߎ;Ι}ý™ÿ�÷öoö|3Îß³~ݸÙß8íœñ\-Æ“¯E§éZ³]Âz×Ö†æÖbE¸Q¶Wg ’¼±çŸC_@Ñ@'¡ÛxÅîü>5MC_}6iö´"ÖæmæX›oï ³<lü˜¦�{áýœ–àÓu}+QÜ"¸‚êÌ[ºNRI_;TŒŸ‘óÅzuâ>(]WøqâÍ=´‹ëÖ2ÚA§^ *HnoQ]]¼È‚‚6�ÃvÕ<šÓÔ,N©ãS]M7Z´Ñ.,­í^H¬$½ÒKæ¥À€®ò#Ø«Êsž„W­Ñ@‡ƒîµ+Ï êëº|–²›‰‡™ ³ÛÍu�,Æ1ó¤ŒAód v¯&µµñnŸà¯ ÙÛ[øšÚàiº°½ŽÞ;•Û&dkmÁG_îAàŠú"Š�òÏÚë:Ç|,¶Ú´·qê:{ê‰Ê’ª…ýë:®aÀ9ÇGZæt$ñU‡Œæ—M±Öíí¯u½bfY-&H^$û3¸e qÔôÇ¥{ÍÀü7Ͷ‡ws¯^jwãim®¬§W†UVóf2î8? ýÐ3ÇøcD¾î¬ï,õT¾´°ºŽ°–9c¸w”£FB†}Êê2�$ íÔPÏ·Ö,‡WÐî4½;U„ÛøRÂÒþe´˜2âdiQH*ÌáO*Œ†�‚=«ÂÐÝAá«(¯/§¾U³qqnðHãqÛ¹–.Ìrq“É­Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform16.jpg������������������������������������������0000664�0000000�0000000�00000044325�15030617045�0023365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�)"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (®~A=ü:ýl£–h_Rq·F‡p}Ç~õ�« •�ã­�tW;uãÃ¥ß_YêVº§Ø­žîX4û˜¥—ÊO¼àn¯·^)ö>6ðåîiªbÆÚ ”FU¸¹8Fù°23@ôU6ÕôÔ¾’ŵ Ay~l–æeó?¼W9 ïÒ°®þ!ørÛÂRø™/VãNŽcaeÜîn1?Åוç¥�u4Vhñˆo~Ä5<Ýù¦ \¦ÿ�0uM¹ÎïnµŸ®øÊÃú日ß[]툮QP‡z§ÎK4ˆ3‚>aŠçdñ•„~4>û=ɺŽÌÞÍqò!ˆe˜°=p8¨í’-ølD’ŸiB7C"?Ûcà ;KžFxÏ­�lQYÿ�Ûº?“u7ö­•hqrÿ�hM°ŸG9ù…¼SáäŽ9^ÒÕ$‹ÎF7‘€ÑçÁÏ+ž3Ò€5¨ªVšÎ—¨lû¥gs½É_s.7ƒÉôÈ«´�QE�QE�QE�QEfkºí‡tÓ}~ϰȱGi¹å‘ŽGV&€4è¬[_Béxú••ÖŒ¶ˆ’Jú‰‰+Á®È~éÏ<dfžþ*ðìqÇ#ëÚZÇ$~r3^F&q¸ò¹ã=3@ôVdž#ТI^MkNEŠU†Fk¤$<„<ðǰëIÿ� &„-íî?¶´ï&à°‚Oµ&ÙJýí§88©Eeÿ�ÂK å‡öÞ›•€\7úRqé!ç§4«â= Í ]kNcxqjÒ<çoÉÏÍÏgš�Ó¢³WÄ+ØÜ_.±§›KvÙ<âå<¸›Ñ›8ž†³4Úx“H¿Ô,4ûâl¯ZÆKvò¼Æ•vçiW(GÎ9ÝŽj�éh®>/ˆºd–:µóØßÁi¥]\YÝM/”e…w¼þ.Šz@ã"¤³ø…£]j±ØÊ³Ù¬šLzÂÝ]Ò³¹P mç-ŽF8<ôÈYET}SO‹MþÒ’úÙ,6 >ÔÓ(‹iþ-ùÆ=óX¯Ä M¿Ñì¡•µõbße€ªõbwŽ c$@Š�ꨬ-[Äé¦je•¨ê3ÅÜL¶K1ÆÌʤ‡u-’‚xéÒ²/>%iö¦µe>‘«ìÑLo¹HâhâW‘ð$ÞTŽxRGp(´¢¹ëï[ÛN±Yi×ú©6±Þ1°XØ,.X#|Î¥³µ¸\ž:t¦kþ1‡A×tÍé:•õÞ¦²µ°´aŒcs‚^EÁñãž(¤¢°4ÿ�ø~ÿ�D»jPYÚùÍnæõÄ9TàÆÛˆÃ{Tòø¯BƒZM&]RÙ/Õ®ö�%ÆXžƒƒŸ '   Š*¶¯¦Þéí¨Zj“Ù(b×1L­©,8ïXš/Ä kzT7ñjövË)À†êæ$‘Nâ Üq’§´ÓÑ\÷‹<aeàë[K­BÒòk{‰L^e²£ˆRä°,6«û§Û&©ã3Äš.ƒök««½_y­ÂUQ–f,À¹<dàp3€@:+0x“B6ÆäkZqfû9—íI´KýÌ罺шô;†E‡YÓ¤."ºC¹Tá˜`òOj�Ó¢²ÓÄš– |šÖœÖo(…né m!賂ÞÝhƒÄº ËH¶úÞ›)ŒqÒ6Ð[h'›¯©EPEPEPEPEPEPEPEPEP\6›á}y<oo­Ü6c�ŽE¾Käoí#ÒFQUqœ‚ÄôÎ+¹¢€<cÃÿ� ¼C¥Aqk=ΖÑ?‡nôU‘%“véf’U©NŸ8g·©ôŸ…Úþ’g»ŽM)µ ­a² çɲ(â…"ÜTÆDönxØ€ÀŒ×°Q@6‘àyôïßkSùWPMw%弯òe’xü¶O$~í¸|œãŒp1‰'Ãt|ÿ�„9´Ö½óHóÚWXÂyælýÂwvÆ1Ï__T¢€<ŸXøsâ=CÇšì-¥,ëZ~£=ĶZ£¡Sˆð·×ë§ñ…/|O~‘´{i·V#ÌÂT–F‰ÑÕBv¼~ðê}9ìh (Ö¾x‹XÖ.¥{Ë‚çAþÊ’çÎ5¥2yÍ)A\4™]¡¾éÏû5[Wø_®_ý…­mô«fŽßP>f§spdšæÜC¿|‘–ÀÚ­ú{Ÿ`¢€<bÃáG‰-¤yd¸Ò·FúUÄq­Ä…f{(¼²’~ïî>Kg’Ú:oÃ]jÓÅ:N©rúdÖÑ_ê×–þk•_µ(_*0cÃ*…œd“À¯V¢€8YÙO¨ë:æ•t&ÒonKXü²†)/ž ]ãú×oE�QE�QE�QE�W9ã? Kâ]6Émn#‚ûO¾‡P´yT²y±“€Às‚ Žk£¢€8¿xÄ>'Ò¬¾Ð4Û[» BÞú+hî$’)ŒD’’9E;[#¢:×}ðŸÄw2¬©>•ºWÕ§–6ž@±=ì^XHÿ�vr‰€Ù8$“À¯g¢€<\ø{â]À~*í­ï¤Ô,´«x¢Ó̳K¾ÛËF;|±Á›9ãõҿíxØYäÓL¿ð”·ˆ.#y䉞!OÝäär>¹¯U¢€<Â_†s¦¹©]¥µä2Þ Û#.¡snmŸ ¥Dq‚ƒFÙ:Œ.\x7_»··¤Ó¢žXü«Ë¤•‹ló¤p<¿,,¬ðÿ�»`图+Ðè )´ø]¨[øO¶ÿ�C[ûë+‡ß\KìvÛ€W”6·ÝP@ vÀO‚<9©xm|D/™†¯q¨[ˆ%bdƲƒm3×ÚºÚ(Í´Ïø’Û¾5Òî#ÒDúýÍÕÌ ÜŒ±›…ÚU³8P2=0:Ö&£ðŸÄ7÷Ú=ȼÓâþÊÑ,ìRæe3M‰!Ë*‚ˆH`Ia…8§¯]]ÛXÛ=ÍÝÄVð&7K+„UÉÀÉ<Hÿ� _‡?è?¥àdã@î©à‰î<!£éºrÛÙͦj1ê+j÷2Í ¬²3˜ÞFÊ’Ä䎠qÚ±t‡ZöâíY’m9¢·Ô5 û˜–wýÙºP¾\Cg*¡AÉÛ’O»ÏøJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü ühñ†5ÿ�_#ií§YÉ ‘µ®ª'‘.­W È¡1"¶€çx¬Ûïø¢ã]ñ¤°6‘—‰£†ØÊÓÈÒ[Ä‘‰Ùå€ÌÊÄãp�÷5ÚÂWáÏúé_øøÑÿ� _‡?è?¥àdã@޹à}fæ×NÓ´w°´M68!±ÕŒò%Ý´h:íTÄ‚ô,<ƒÅhø«Ãúö¡ãO kºLzl‘èësº;»—ˆÈÓ&Ì ±¾��÷éÇZÝÿ�„¯ÃŸôÒ¿ð2?ñ x«Ã¤€5ý,“ÿ�O‘ÿ��q'áö¿gaÓîô¶Ô§¿¼Ôo.&FTóÆUZ« / >`:®j­ÇÃíµx$ÑžHü-…$w-#Æ]$V߀£*@üc^¯E�r¾Ñu½Û]mEìîno¯^îÜ$„(S"ÆçËtFà§#œgŠòÁðWÅØ'N7.ïìŸìðâæ\nûwÚwÿ�ªôÊ×¾Ñ@߉t[íq´HþÏe%¼7 ÷ñË;.cx$…•0‡w1çnvÆr8é>x„\øYVöÊx´›{˜..dÖgG䂪##)¡#q8ûÇÕh #¸ø]«·Ã]CÖé§&¥v–°=Üš…ĉ$p6åm®§Ë8Ø£'œ�+]ø/âmjyˆ¼Ò­£—U¿¾ÝÄ…•.`'ú±œl9d5{½å:×ßêúŠÑdÒíõMhÞBO'Ùí– ¿2·—’Í·Ÿ”}xçe´ëGâE«YI½æŸm³WµŽ2ÕŠÍVÀsŸv×{E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�óréš}ÍÍüÓØÛK+_Ýnw‰XŸß¿RE}#_<Ûÿ�¬½ÿ�¯ë¯ýô_ûJÿ� e—ýø_ðª±èúaÕnéÖ›D¾BàÒg·°ü«b©Çÿ�!‹Ÿú÷‹ÿ�B’€ý‹¥Ð2Ëþü/øU]KHÓ#Ò¯4ëEuʰAiç¥lU=[þ@÷ßõï'þ‚h¿ØºWý,¿ïÂÿ�…غWý,¿ïÂÿ�…^¢€;߃ÑdžõX¢EH×U”*(Àd}zy÷Â/ù�jÿ�ö—ÿ�EÇ^ƒ@Q@Q@Q@Q@Q@Q@Q@Q@Q@%ÿ�\?ö²ÿ�Ò˜«^²<Kÿ� ¸ì!eÿ�¥1V½�‹á.<)¦ÿ�×üÍmV7„¿äTÓëˆþf€6kùØx£G@Ä+Eq1[ÿ�#^ÿ�\n”t³Y+ÿ�‘;\ÿ�°|ÿ�ú-«^²<Wÿ�"v¹ÿ�`ùÿ�ô[P½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rð¬¼,d–Fµ¼/,¯+¨Ü(Ë1c€®�äúW_E�r?ð¬¼)ÿ�>w¿ø4ºÿ�ã•ø[á1pó}’÷,ª¸þӹ㞾f‹×˜ç=•Èÿ�²ð§üùÞÿ�àÒëÿ�ŽTsü-ðœöòBm/@‘J’5;“ŒŒt2ù‚(ø›ãàŸ AûL³Ç +êIËã¡¿JìU•Ñ]H*à Žâ€9/øV^ÿ�Ÿ;ßü]ñÊ?áYxSþ|ïðiuÿ�Ç+®¢€2ô/i¾³–ÓK…â†YŒÎg”— w9'¢Žõ©E�QE�QE�QE�QE�QE�QE�QE�QE�QEÁüfÿ�’K®ÿ�»þŽJñ=?Â:Dúm¬¯åÞfÄî9 ZöÏŒÿ�òI5ï÷"ÿ�ÑÉ^_¤ÿ�ÈÇþ½ãÿ�ÐE�eÿ�£Ï9ÿ�ð!ÿ�Æ«iþÒ'Óà•ãŸs.N'qýk©ªZOü‚­¿Ü  ÏøC4oùç?þ?øÔ¾ðÖ—Å XùR=µÊÜ™Q¦s»l,G9Èæ¶ê?ÿ�Égðû—ú!èØ¿áðßý¿ò<ŸüUgëþдÿ� j÷v¶>\ñX\o5Δált5ÙVGŠÿ�äN×?ì?þ‹j�×¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(æÚÄßÚ~0ƒD†LÛéq~ðÁ™ðOä»G±Í{×ÃÝKû_áæx[s5”hçÕloÕMWñ†´ÍgF7&›4—ÎÓ™-Œ A1ù²9¶ž{âº=;M²Ò,c±Ó­bµµ%!‰vªä’p;rIühÕQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŸÄ­*MwÀwÚLR¬R^ËmÈÃ!K\F2:ó¨~øÚ#†?é¡#Pª>Êx�`v¯Zñ/ü‚áÿ�°…—þ”ÅZôâ?ð©|sÿ�CV›ÿ�€Ÿýj££|.ñækq‰´øâ‘2¨Ö¹ ~Uï•á/ù4ßúâ?™ *ÿ�…KãŸú´ßüÿ�ëQ£ü6ñFñ B¿½ñŒÒEÃFñÛ—äÚFÞ3ã¿jöêÆ¿ÿ�‘¯Fÿ�®7?Ê:�>Á¯ÿ�Ðvßÿ��ÿ�Y^&±×šÃI­@ñ‹)‹ ²�°Ør3¿ŒŽõ×VGŠÿ�äN×?ì?þ‹j�×¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ø |[£FOú»{©Àϧ–ŸûR¶«ɓƱ.8ƒNsÿ�$_þ5[4�QE�QE�QE�QE�QE�QE�QE�QE�QE�QY:牴@²j—±ÂÒEËK)ôDf?AX?hñwгöXÛÃ:Sqç\ {éGû)ÊÅÿ�Ë{ �Û×¼S¤xqc…Î.&â XTÉ<ÇÑ#\±ü±F©êºªOq¨hÍ¥Û’>ÍÒ†™×œ³ªð°2O\♡xKHðô’OiË}0ýõõË™n%ÿ�yÛŸÀ`{Vå�gëV3ê:o‘m,qL³C24ŠYs«&vãñªÛ<Mÿ�?Gýø“ÿ�‹­š‚ööÛN²šòòxà¶… É,‡ ª:’h7g‰¿çãHÿ�¿ñuSLÓ|G¦i¶öQÝéN®ÐÍ™?øýpÞñäÿ�¾)JlÄèE´’B§ƒ<¬Bqþé|ßS^»@Û<Mÿ�?Gýø“ÿ�‹ª7w‰æÕ¬¯~Ó¤£¤«&Nwíí»ýŸZéè  mž&ÿ�Ÿ#þüIÿ�ÅÕ]ONñ&§¥^XIu¥"\Àð³,dR2>ozèè Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  kC»Æ:£‹eh„ûхlÖ6ëž ”ýáu=;#oç!­š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¬íg^Ò¼?gö½ZúHs…2\ú*ŽXû�MsgVñOŠ>]ÄèZsuÔuópë뾯ÿ�|ÐE­ø‡Iðí ¹Õo¢¶F8Ec—ú"ŽXû�kžû‹¼QÆ™kÿ�æšßòù}{·©Dú¹'ýšÓÑ|¤è·Fü¬·ú« >£|þtçØ1áG²€+¡  ÁúNƒ3ÝÅ—Z”Ÿëu Æón$ÿ�žƒÙp=«~Š(�¢Š(�¯•þ2|IÔ<G«Oáø"žËJ´—kÅ*”yÝOÞpz/ üO8ÇÕæz‡†4¯Š*Ô¥ÔíüÍ#JFÓíä¶<—9 +†á0ªÈÎî(œý›t¡‡uX¯Íst¶êO¤kž??OjöúçüáK_øj Ògž8ÜË œ³Î=á]�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�bøxù«\uóuFzýÀ±ÿ�앵XÞmú)t’òîAôk‰~†¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢ªjZ¥†c%î¥y ¥´cæ–g £ÛžþÕÊøƒÄão…ôß±X¿M[UŒ¨aë3ú‚ÛGÖ€:}WXÓt;½Õ/`´·^²LáA>ƒÔûk˜ï‰<PJørÇû/N?óÔá;ÜzÅÁ>Åð=^Ò¼§Y_.©©K6³¬~Ý|Cý£O»ÿ�tîk§ oFðV›¥ÞJæKSW#þýüɲ»öP?é(¢€ (¢€ (¢€ (¢€9Ïë7Vˆ-ôÜ6±¨È,ìþš·ñŸd\±?ìûÖŽ¢Ûx{B´Ò­K4Vé·{}çcË1÷$’}ÍsšüU1½ñ#Ú~œ_OÒÇð³g÷ó\°¢ŸZíh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š£­Ü}“AÔnAÁ†ÖY2}”š�©á!èíÎ^Î)}YCÔÖÍTÒ­¾Ç¤YZãLÇ‚:a@þ•n€ (¢€ (¢€ (ªZž±§h¶éq©ÞÁi’,Hó8PÎÇ�óê{PÚ*»Ëk Y.¯."··Œeå•Â*rxÈŸê~"cƒtÁ<¯¨ŠÔ{¢ýù /ûTÕßêZ]œ—š…Ô6¶ÑŒ¼³8E‰®Pø«Yñ'îü#¦µn?¶5$háǬQðòû•}êÅmšö=KÄW³kÚ”gtot�‚ÿ�Lá*ýNOk¬ [Nð-ŒW©©ëW뺪ò·7Ø+ÿ�¦Q’1ô÷®¦Š(�¢Š(�¢Š(�¢Š(�¢Š(�®_Çݾ›o¤irlÕõ™~ÉløÏ”¤fI~ˆ™?\WPNMq^Äž ¿ñŒ£6¤$Ð+òÿ�ÛG²«@N“¥ÚèšE¦™d›-­bX£Àc'Üõ>õrŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š§«_eè×Ú‡—æý–ÞIü½ÛwmRØÎ3ޏ  ”VGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½cx´ÿ�Å%ª§y­ž޹q°cß-PXêÚýý»M‘¦…Y¥„†Ô¤tr2ùaÓ*qíT|G>¾úTq˦i$¼µC·Q“™ãÿ�P:úöö ºŠÀ¸Õ5ëi­b“JÓ7]JbŒŸx#??¸ôF«iñý´¯üIÿ�Æ(^ŠÂ»Ô¼Aee=ÔºN˜c†6‘‚êRg�dã÷Ôøo|C4ʺV–Ô0Î¥&pFç…�mQYiñý´¯üIÿ�Æ*ƨ>©¥Ew$ ³:´jûÀ*ÅN==�gø¿ÆO‚ôI5-R`8"2wþêæzõò7üu«xëYkÝBB!"ÚÑ[)úSêÝý†�úSXøC¥ø£Y:¯‰µmKQŸî¤*ë 1¦xUP2ü '½jéŸ |¤í6Þ²f^C\)œç×ç&€8ß„ðiÞ=Ð"Ö|Asq¬j–Rù& ×Ý ¹�mdŒ�¤•ÁÜA9Ï<W°��� Ð Ž x-b[Ã1މ…ð-�QE�QE�QE�QE�W=â_xoÂ(µªCo# ¬#/#d\œ{ô®ü|Ñ®ZA¥èÝê ?¼ª©#ž “úP­Q^;ÿ� çþ¤­kòÿ�ëT‘ü{³@Ï{á-z—uˆ6ãŠ�ì<uyqq§…ôé5 iŒFD<Ál0f“Û vvÓÙYÛéö0YZD±[ÛÆ±EôUQ€?*òÏ|@ðLj¼_ªj×:¬pêw[m¬m®Aʵ\ Ÿ”»6Y€'¶:W­PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ÿ¼K¢hÞÕ-uRÖÚæâÊd†orP…ë×½c|Nñ¾¡¢µ†¼7ŸÄš¶R?å‚3Ó9Î3ÀÚIéÏ-ª|0Ðü#àgÄ#kºé¶--ÌÒ +aAPO8$rÙ<vé@wü.߇Ÿô0ÿ�ä•Çÿ�£þoÃÏúòJãÿ�× ž;ð¢°øO)d£ÀAý)ßðœøþ‰,ÿ�ø&ƒü(§Ðþ1ø ÎÂX§×¶;^]JØç?+Ï#©á;«øÓ5¯Œ^¼:rïHïc–lYÎ0Š Ï)ýà½9®?Lñ§‚¡´u›át×n'`ãH…°­+•\‘ü …Çlb®ÂsàOú$³ÿ�àšð ŸRøÇà+‹ýXµíÉoxÒÊ~Ç8Ú¦ S?sŸ™ÔqëZ?ð»~ÐÃÿ�’Wün¼î÷Æž ’ïNhþMGpZDþÈ„y«åH6ãòU±þÎ{UÏøN| ÿ�D–üAþØj?ü©i…¥·ˆ#3Kk* {y£• ²ú×s¢ÝÛ_h¶w—\BЮÙ"pÊx¯Öügà)ôk¸Ûá…Å¡1°YÆ›>[€K.äŠa´Õ>-§‹ü%kª®ƒ4qɨi×€ö°0!‰ïÁ##Ô‚E�}XÞÿ�‘z/úí?þz§¦xÊ gL·Ôl4R{[„ß‹dÿ�}þgÂdðÍ»”d-$Çkõ½~ �nQE�QE�QE�QE�QE�W›|Hñíþ™{má? Àn¼M~Ü ‹t9ùmÜgž�<c>ƒyŸ§\ÞÍþªÞ'•ñýÕŸå^Uð_N“Z“Wøƒª�ú–­pñÅéJ@ ~ /Ñ©  OüÑôb5-þ'šô§Ìšæì™_¾Õn¿ï6Oã¥r?´Ïø£Áöº£xçWµ2<Š!Œ)U ÄqŸ§J÷zù·áÏƼ9à»]1ü?«ÞÞFó­¡ ‡,O>ôÝYxSÄ×P4ñ ZR&–<Oàv\þ”Û xšò9™¾ ëKåÏ$C œ…b3úVFŸñ‚Þ gOøEµçÌó>VÜóHÍŽ½Fp}Åmx/Ç1kvWïo¢ê¹ŠöPãÊ_”±ÝƒóuäP#¥øx«ÅšGˆu+«×ÓÜCv4”—W$“´“Èg&â/øÅ1xO_×®ÛEfY_ªFv…bêÄ� gŽ;V·„5W‹â7Ž¥eü†Ym3F¥“ÿ�{æã57‹´õñn¯içGÔ Ë:KlÞRæ)V5ÛŸ›Œô=x4Û§ö£j“ÛzûdpÇ >U¾rÌàÿ�Ë/öGëP‰µcâ°þÞ½òE ›>U¾íÅÈÿ�ž]0+ˆøaã)µm $šÊöîæÖÞ+IžVåL’:«/ãšéF²ÿ�ð–<¿Ù:–~«åùk»ýa9ûÝ(bCª®«oj5ëí’A,„ùVùÊ´`Ë/öÏéLõXõk;Uׯ¼¹£•ؘ­ó•ÛŒ~ëý£T¥Öœë–¯ý©Œ[L6ùK“–‹‘ótýE2çYv×´ù?²5!¶†Óå³³§ÍÛ­�iÝjCqeë×ÄO1³¿Ëvã÷^ª)·ÍªÛKd©¯_=À‰³¿k?u×T¯u§k½4ÿ�cêk¶àœ—-û©Íלþ™©ëNóiÇû#R]·A°Ñ/Íò?æëÍ�i_ÿ�jZÛ¤‰¯_fŠ?š+~"©ÿ�–^„ÓuWÕl´Ù®"ׯ‹  ¾:ÿ�<ª–©­;Ú þÇÔ×ý"–‰qĨq÷ºž•·­<º=Â#RLó<J�ù‡ûT§©VÏJ¼º^¾/ "†Šß HÏÔµ-4»»˜õëâðÂò(h­ñ¤Œþê³õiäÐõ:>¦›­¤š%�|§“ót¥Õõ§“E¿C£êiºÞA¹¢\”ò~n”¥fºÅ•¼Ï¯ß†’5sˆ­ñ’3ÿ�<©šiÕo4«;©5ëàó@’0X­ñ’ œ~ëÞªiú܉¦Ú¯ö6¨Ø…V%Áàtùª-Zxô==©¾ÛhÆå‰H?(ä|Ý(î’ú­þ“ku.½|$–0ì+p2}?uOÓΫulòI¯_'š?–+~‹#(ÿ�–^€Vfƒ¬¼Z ŒcHÔ¤Û É~Ÿ5?JÖž;9ö>¦ù¹œåb\s+œ}î£8 ‹Ã7Ww0j wt÷-ëÂ’:¢¡T€v€;žÕ¹\׃&7Ú¬¦)"-¨ÈvJ0ÃäN¸®–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<{„k?´GŠïî@fÓ­…½º‘ƒäRG¿ ÿ�}šê¾0É(×ÿ�ëŠèÅ®NâTð/í÷·˜‡Jñ5°%'“ £“ë¹ò(®¯ã øO¯– *1ϼ‰@_§ÿ�È6×þ¸§òb±,¼C£%…º6§jbPApp*øI4_ú Zÿ�ßÑ@4ßøõúø›ÿ�Fµ\¬èñÛº¾¥j¤Ï+`È:ÐÕ¯øI4_ú Zÿ�ßÑ@/?ãëOÿ�¯ƒÿ�¢¤«•ƒuâî,Yu+RrÌDƒå¸þdU¯øI4_ú Zÿ�ßÑ@üaÿ�"¥ÿ�ûƒÿ�Bïú=”4û”߯™R/ª´@Ð×Î>(×4«¯ ÞÁ¡o$® *,€“ó ÷+¯éÞø[iªMs KÃpZIL`*ãë×Ð{PÀ;¹Ç„u-"gÞºf£$1¶Ý8?úãø×}á_ù¢ÿ�®Óÿ�è×®/අা¸/u)žòe’@náxí•�ÿ�À«³ð›ðì,¤eœ‚;þõèjŠ( Š( Š( Š( Š( gâ+:ü7ñ!BAþΘqèPçôÍPøF±§Â¯ˆ¾ïÄýK±?®kªÕlUÑïtéqåÝÛÉdg†R§ù×™| Ôä·Ñ5ß+SÐî2z£19£vïÌôëòß?äT¶ÿ�}ÿ�ô#_RWΟ >øľ´Ôõ¶}¢I$Vò® .8ü(4ßøõúø›ÿ�Fµt¿ãÓÄÿ�ö—ù M;àß…n-ßûC"y“‹¢8YGèmx;ÁZN‹a{ £ßªµì¹Åì‰Ñ¶º@<ÏZ�§à¯ù)ßë­Ÿþ‹zë´ÿ�ù jÿ�õÚ?ýµÂx;K·—âG"i.ÂÅ-žÒ·’«£õ!²ßŽqZ> ¸Óü3¥xTš{ÀmʈíÓò—jŸŸ'“ø¥�`|TMGÆ) &¿>1ÆdÇéŠô5ÿ�‘ÒOû/þŒjà~xWì~2ß5Ò\^Ã㸒#†içk åUO>µ×®‘mÿ� sÅæÞíû¶~Ý6ìùü[ólâ€6&ÿ�‘†Ïþ½gÿ�Ðá¨îÿ�äcÓ?ë…ÇþÓªrèÖ£]´O6ûÚbÓçÏ }ù— ¦\èö£_ÓÐK}††rI¾˜ž6t;ò:ö  MCþ?t¯úúoý-G«¯Òÿ�ëðèTï´kU»Ó@–û rAÍüçþYHxùøéÚ™ªhö©>š·ß5ØS›éÏð?L¿ÜPž±ÿ�Qÿ�×Õ¿þŽJÄòºú/þ„*ž«£Z¥¤dK|OÚ`5ü笨;¿ÿ�ª™®èö±èײß�û×Ó0ûñ|P–»ÿ�"ö¥ÿ�^²ÿ�è—\ÿ�¥ÿ�^²ÿ�è&³µ­Ö= Pu–ø•¶×ó°û§¨/ƒøÒë5¬z%û‰o‰[iÝ9tõðhWLÿ�UŸýpOýT:ü‹ÚoýzÅÿ�  ©§h¶¯¦Z1–ÿ�&'óÐvQhº5¬šží-ð-m;oçQ÷G@ð  žÿ�‘sOÿ�® Rhßñã'ý}Üÿ�èç¬ÍGµ—@±v–ø…I }2ÀÀ§é:5«ÙÈL·Àý¦à|·óŽ“8ìÿ�¯z�Ùð§ÝÖ?ì%'þ€•ÐW7àèV5hйUÔdÁyÏÜN¥‰&ºJ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ç¼eàí/ÆÚéššÎè'AóÂý˜QÞ¼—WüámGÃúÆŠ|>mÚ8¯WæxSo‡' Ã|ü7{Ýdx¯þDísþÁóÿ�è¶ ÿ�„¿Ã˜çिø)ÿ�Ñÿ� w‡?èŠMÿ�‚ˆÿ�øÝ{ÍóÖ™â¯Åhë'ÁénXÜNÁÿ�²ãl+Ÿêÿ�„¸í·sþïÑ›ÿ�ÿ�ñºö/ È.oû^ÿ�éLµ¯@=^ø«Ãïw§2|–Žà³§ö\cÎTƒgú¾y!±þÆ{UÏøK¼9ÿ�DRoüGÿ�ÆëصŸù xþÂÿ�¤ÓÖ½�|õ©øŸKºÓn`Ó¾ çxœ ¤ÓQCçÈ‹·^ßZ×ðçÂÝOÅ:ž¹ãH-,ìmÑ~Í£Z"ªÊñƒ×©'¡À¯]×ÿ�ä[Õ?ëÒ_ý�Õ?þA¶¿õÅ?  ßðè¿ô°ÿ�Àdÿ� «áHü7Fªˆ²ÌT`æ¿JÛ¬o ÿ�ȽývŸÿ�F½�lÑE�QE�QE�QE�QE�W•|Eðv¯eâ<}àäαj�¼´POÚãp;œpGR1Ž@ϪÑ@W‚>&è^5„EŸbÕW‰tû†E#®ßïŒúsêyÏ€æñï‡|#i§ÙøBÞòÝKºNÚŒh[sÓ<W¢ø¿á_†<c1»»¶{]G^Z6Ç'±aѾ¤gÞ¼ëDøuⱤZÏ¥ü@¿·Ô•·‘–>OçÇè(gNñÄ$¶qí¤_>bOö¤c dbÃð9…3LñÄŠàCà‹i¹”±:¤c Xä~ŒÕøî[wh¾ ͉åR¾Aä‰÷»OãQØ|?ñìS+|C¼‚!q*¿“,‚xqÔóÖ€ ]»ðŽ·âÏx³Mû�¿’Ü,0ÝC+D9�o¸u<ÔúV5¼Z—Å_.­6“v<-m2Ê-· iØ(;™AÈ^qœ@ëšê<9ðBƒU¼»Ö&¹Ö®àœ {·;OîѲW¿Þ#’GN+»Ó#ÔõTE ‹,aUF�%àP8oîWZº+¢ßÇ´#`x2 4¸ÿ�–˜Çø}*ºê?ð—;ÿ�cÞîû/|;±æ7?ë1Ç5³ü‡ï?ëÖýZª¿ò:Iÿ�`åÿ�Ñ@K¨ÝvÑ¿±¯Ó�»àÉù¢çýf8Çê=é—:…Ñ×ôö:=ð"ÀBðå¾çOÞcsÞ´æÿ�‘†Ïþ½gÿ�Ðá¨îÿ�äcÓ?ë…ÇþÓ  —ÚÑ»ÓIѯ”­É ƒæýÔœÞ~<úS5MBé§Ós£_..Á�¼7Èü I×ëéZz‡ü~é_õôßú&ZVÿ�_¥ÿ�×àÿ�Ѐ)êºÓZF|ƒí0³ÁÚTã‰;ô¦kº…Óè× Ú5ô`ó3ÃóI ­=cþ<£ÿ�¯«ý•ˆ?äuô_ýP-kQº} PVѯifx0¿)äâB*]cQº}ýN|€ÛH 3Á…ùO'f¯ë¿ò/j_õë/þ€iuÏù�j_õë/þ‚hž¨Ý.™h‹~ÀB€0x0xó%E¢ê7I¡iêº5óm ¯åŒÈçZÚgü‚¬ÿ�ë‚è"¡Ð¿ä^ÓëÖ/ý�Pf¨]&b«£ßH*«ÃƒôÌ€þ”ý'Qº[9�ѯœ}¦àå^ó9Ç2véøUÏȹ§ÿ�ש4oøñ“þ¾îôsо‘¥ƒVw…ác¨É”r¤‘:í$~µÒW?áO»¬ØJOý+  Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±üXðn¸È:|ÿ�ú-«b²<Wÿ�"v¹ÿ�`ùÿ�ô[Pÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…kÑ@—‡¼1áùtÙšM Lv׊ ZFx2�:t�øV·ü"žÿ� •ÿ�€qÿ�…ÿ�\ßö½ÿ�Ò™k^€9-[ÃMKBTдÅW¾ep-#‡Ù¦8<r2ükÂ)áÏú�i_øøQ¬ÿ�ÈSÃÿ�öý&žµè˜×|/áèü?©:hZbºÚÊU–Ò0AØyU‹ øu´ûfmK$Ĥ“g<j½¯ÿ�È·ªפ¿ú«:üƒmëŠ!@?áðçý�4¯üü*ÿ†mâ‚4Š5–p¨Šç?@+v±¼+ÿ�"ô_õÚýô³EPEPEPEPEPEP^máÿ� è·z¤óÙn•Ó,ÞkŒœŸC^“\ž—¤ëún›˜µÓe.Ýÿ�m‘sϧ”q@g„t9­]¤±É¨>kô°Åè3Jð–‡<7&K-Ån¦Aû×È­nÙéúý¤ Ù4ÆÌ²IŸ·H>û³cýOmئØéšýœr¯Ù4Çó&’\ý¶AÌN?ÔûÐ=—„t9.µkˆî ó_åF½êM2ËÂZš–¥Ye"•5ø5>¾¦·môý~ îäû&˜ßh”I·H6áqþ§Ÿ»ŸÆ›o¦kð]ÞOöM1¾ÐêÛ~Û Û… ÿ�<yé@ñøGC:ÍÌ&Ç÷ko æ¿´€ÿ�°ªãš/ü%Omö/Ü‹%“ošÿ�{yÎsÒº$ÓõõÔ&ºû&˜|È£oÛ¤ãisœù?íþ•Ò5ñ­¶£ö]3›q—öÙ;1lçÊ÷  ©|#¡jÖcû¶·™ˆó_’ ?‹ý£QÜøODMv²ÄrE30ó_’6c¿¹­çÓµ÷Ôa»û&˜<¸¤oÛ¤çqCœù=¶~´ÙtÍ~]JÚïìš`òDÛöÙ>mÛ{ù=¶þ´{á;­9VÇK‚®<×äyRïzLÔ¼%¡Ã6žËK û×älsŽ¾Â·n4ý~yí$û&˜¿g”É·Hweqþ§½ŸÂ›w¦k÷RZ·Ù4Åò&ãí²ß+ ©ÿ�j€1õ?èpÚ£Gc‚n R|×èeP‹Ðšfµá-ßH¸–+-® `ù®{zݼÓõû¸?²i‹‰c“?nýÇVÇúžûqMÔtÍ~þÂ[o²i‰¿7Ûd8ÁþxûP>¯á þhìvɼŒ§Ís‚‘üTjÞÐàѯ¦ŽÇl‘ÛÈÊ|×8!IÅ[Wúv¿{§\Ú}“LO>&wÛd;w3'Þ‹í?_¼Óîm~Ǧ'G»íÒdœy>ô“aá ]:ÖG±Ë4HÄùÏÉ µQéÐçÑl&’Çt’[ÆÌ|×%A?Å[¶¶:ý½¤0}Lo-3öép1ÿ�<i–v¿e§[Z}“L"$wÛ¤Ú�Î<Ÿj�ÁÐü'¢\èvSKeºG‰Yšã'ó©4¿èsZHÒXå…ÄêšýWø½�­7L×ôý6ÞÓìšdžJÝöÙqíäÓ¬´í~Òìšcî–I3öÙßvl©í»�ïZAciªÛۦȓQ*äœ|‰ë]=cø{N»Óá½7¢-ÅÓN …Tc%WžjØ Š( Š( Š( Š( Š( Š( Š( Š+SñN‘¤kMìÓ­õþ~Ëv²Éæc® )u9<N�lQYúf·c«Í{›ÊÏe7‘p$·’-€qó¨ÏŒŒ{ŠÐ Š( ©ê¶?Úš=öžd1 «y ó�ÎÝÊW8ïŒÕÊ(ìÿ�ýmÿ�ð�ñt}ƒ_ÿ� í¿þ�þ.¶h vËDÖ¬`hb×aÚÒÉ1͈ûÎìíü~¬jÏØ5ÿ�úÛÿ�à�ÿ�âê[¯iv^ ±Ð®'xõôw¶ŒÁ&Ù‚[·f@‘œôõ‡Sñ^£\Åoq4RMs¤xµ•Õæe2©‘ïÇz�¯q¢kW3ÚM&»ëYLÑâÄ}⌜üþŽjÏØ5ÿ�úÛÿ�à�ÿ�âꎧñÃ:4{õ ù`=ƒYÌJ'˜cË�™_œmÁÁÎ=k§ ~ïG×/l§µ“]„G4m°Á?ÇïO‡K×a‚8—]ƒj(Q›Ð ~·k–?¼+ýƒ>¸5':d¤¹[IŠ‚IPF•È#pã<g4¡ö þƒ¶ÿ�ø�?øº·£éÇJÒâ³iüöBÌÒmÛ¸³<väÔöwq_ZEu”G*îQ,McÝ\ˆ©è�¢Š(�¢¹{Oˆ~¼º6ñ꣋“fZ{9¢ŒN?å‘w@¡ÿ�ÙÎk¨ Š‚ÒòÚþßí“Ç<%™ÆÙ•Š°Ï³? ž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ âü_£ê“x»Âž"Ó¬ôzCÝ í£•VY£7§Î ÚS]K#(r„‚.2=Æx +ñ/…µ½b{ñ 3É7‰"Ô'„Í x-á’6%À%Äy*¤ŒpO‰áïø’+Zø‹D¹¼±µ±žÑí£½ˆIi9œÈ—Ûñ÷  *w.­Ñã_XiŸéºŒ’Üh:Ƀ\q KæZ4Ѝø òä8#á>Ú^*ñ®½á½GB’"——–š•óG+*—X¡2Ƈ •Ú»y$’4ÍËð÷ÅM§É šW|¶zŒZ…çŸ þ×’lýœòÙY*Ù|mÛòæ«XxÆ6Z…ÐÐn6ÛêMÙÛwunRìÞuwÛŸïcšÓŸâŽ¿¡ßZêzŠ­åŒ¾µÕ&±‰‘$–t‹z>ÍÝ;I #<]ÏÄ[ÏYYimáËÖ‚ò[™Ãå#¬ámæ›aܤ‚L!FûÇÛ�uàmæëÇZµõŽž­¥iú¾¯Ò£Fæ'T[,8 ¹†@^zòj[†Úâø#ÃÖ÷zLéwÒG«[Á5³Kqï,¦BÑ6ÀüÁ°@#¤½ñÅö«âŸ¶{$:6«ÌÓÅq³Ìb…eÙ¹”ã“°àƒÃ‚©®>+IgáýOT¸Ñ ß¦­¤×6ñjB‘Ü1U„âEÀ%:`‚Ð+o]Á¡nÚ ìÈöûZê{‹fº¸o:6Ûæg© IYT�ÀJ±½ÿ�õ«öÐ<Í:â×O‚Ñ­4Émã{Išmé0oDÊã>Y%I!I^ ÛŸë?Åô½^H­­nôÅ’ • k;\ùJ|á` )l7sޏ«ßÅØ4[­cv…}=Ž™#[ÉuHWÏp¬vlU%‚ƒ¼¶‡‹áßkú_‰|y¥4·V7Z“jÚ€š"góX¤ûûqŒ€:WSñLÕµ7ðÐÒtyï¾Ã­[ê7 °¦,å~w\±ÝÇn9"›ào^¿ñ¯Œ4½jo’ÀÙ¼࣋66vPêˆ\�,3€;ä’×YÕÆfÂ÷U¸Šæf¸’ÆÂH"—ЀL~\Ê…Ã((_$ž¸\b€9‰ž ñ¿â=fëFðû¼Wº,6~hžß2ÝG1$„M¹#¨ô溇þÕ4=oR¼ÕÅ鼔̯pe€ÛÝ+K½ip8ýáàd0­üfÖ5/Ïu¥Ùc] 9u8gIÒã+öÁjcex±ÎY²=½vñ|G¹¹µ¸x4DÚj:}Éžð¤)$%p<ß,Œ¾ñ·pUà‚ÃŒ€`xgÁ~!Óµ» CNóÖ;ñ«Ýù±7öØ”Ÿ)vîÏëÓ¥V ñ³ÃxM46Ü’ááYá�ÿ�¤y»ËoÁ@sÓŒWKmñ6mGJ×u -ãìÚ}ÅÕ½ÌÂEŠo%в³†8È ÏÆrT‚>$ñ†»aðFÛÅP¬jrÚÚÍ#ÆÀª 2T2IÜ>SÓqäàdšñ÷„¼Qâ?_êºO†îmä›I·Ž&k›tu»K”}ùõnP߀àÒÇáGidÞK‹g×/¯í"ºº… $ŒˆCD$Ã(~£ ®r=:­âtšŸ‹-tôQnó__iæd»óËj¡›‚‹•*î{w¤ñ‰uo|AŽYu øm#´[È8À€Ü4ñ‰7íÜ<IœŸã?€ŸÜøjs«Zê^!¶½šÛD‡M}HºÛÜyO ?<aŒÁ‚>åfPŽ\zã>ðÿ�𦇭êWš¸½7’™•î °{¥iw£€£Í.¼< Æ�æ.<C ·¼O©ëeµü–RéöÚe»XŽå7Ò,M.T/A»©IÆ5õ/ŒSé,Æ÷Â÷,vßʲÎÑʱnß#ÆCTnSŸ—¥�eø—TÐ|IáÙô9l£Ö¼C&¢/¥¸€¬²;7™òŒcžµ±‡µÆø”š›øv$±}BàÝ]›„’I­Í¿—É`|½Ä–Œ¯)æ®[|O–úí4»][Y“U¼Óc·{½±1¶Pò9“a a†Þ¿'‡¾'ËâVÊËLÐÃ-ÝŠ_«Éw´¬^q†\ŸyYN~aÜt ‡þ+³ðUŽ•…­ßR¶³¹T¹{¨Š¤ï>C…Þ6¿”ÙH!A�W¾#Y‘ VÆWØã#ò®gþ,¸×5;Í>m5-n,®g‚å~Ð_`M›|ƒ!Ãätà¼ÔPEPEPU5]F#G½Ôîlíä¸/]¨¥Ž?Vé“CÌA2,‘H¥d2‘‚ �r:.»â ­ÃÄš›é0hׯòx’9–°ÙÔù…ˆs÷sò®2zÕ+‹š¥Œ—w6:¤1­¼7Н{žÖW³¨Ên*1÷†GË[:‚¬ì4öÒÿ�´5#ÉhOžU1$l¥Jä(v$�ÌØü+ëá‡{¦Kcq©jίm’Èd‹|VѸt…O—»‚œXíÐÛ‰šN¡«Ã¥Ca© Ù¦»¶Xž8Æ'¶]ÒDNünÁíär+2/^—Mkóeª¤¹ù⌠Mä™1ætYÓ߸sWì¾iš~¿·©ª5ä÷:‚«¼[YÕVP@î qÓµsšÁ+eðzéšþ£ro^ßì²½Œ¨Qa 8D/@,UŽyÊðqÅ�u:ÇĽÃæÑ5x/,¦¸æüµxãWÙ¼‚ÿ�0's“ŽÄ‹)üŸ#EÕåûB´–ûß*ýí¹—ï3ÄœýÞ5¯ü+o}«XêË}m¨ZBmÍÄ ¦ˆJ8*F àB+.‡V—?jóõ½bOµ*¤ùhx«œû¯¼2~¿ÏÞà`ò|JðÜ>#»Ñ%¹)5¨”Ë))´ãócvþ»nÓ‚$b³ü7ãÛïxøi‹f ÑîtQªZàÙpA‘PDŒ¥HËä8çq|§¥î­*Ü^ M[y¼°Þ¦ Óc?+¸½pØéÇà;[²Õ`Ô5 f³ÓJ&hʘ·(8@r9Èé@IñOŽ BfÒõQ½ÅÐ-jgŠ + .ÚX6ÒGLÕH~+èÁpém¨yÑËi VþRy—-r›áòþ||Ë“óŒsŠj|)Ò‘®ÜjúÉ–îÆm>Y^h̹vRÍ$äœ1ÉÁÆxm¯ÂMÕÌ‹¨j k)#wx³Ú.ÈYqP¹9&€,x+ĺï‰ômlÜ­Œ:…†¯.žŒ-ÙSjlË2y„îù›€øè3Þ³m<oâtêï „© ßÞÚyQ@Áa@VBZ\u?0î3Žx=_‡¼/mᱪý’òî_í;Ù/¥óŠ’É÷ŠáGzV]—ÃËK-_Ò×ZÕ¥ƒ\’InÚCàò HÊD@Â0@ìæ€9Åø±.¬éë­-¢é×Þ¶Õ#¦É|ù]SËÜòl ’Ç-€SÁ%ž$øÉü"÷º—„¡SX¤2Ý=ÌáˆHþXŠÈ¤>yw.ÜÛŸá6‡quis%ö¨f²ÓàÓíK6ë +#®ïî\ää|ÇŒcj¿ t½bßVŽëRÔ÷jñÀ—ò+Ds nG?»ÀnÜ�1Ú€6<[¬]èš\7VÞTq™Â\]Knó¥´{XùŒˆC0ÜzŒnÉàæ/<UâeÖ|#¥Ùßx~oíØî‹]Çm$±~éw«&% ¥F2psÉ®¿TÑ$Ô£¶Ù¬j6S@¬¾u©ˆ4€pde=3À=1\òü1ÒíÆƒýªjºös%‘âm¦\ùŒÛãl–ÏÐv€2¢ø‹©Üé»å]?I’ÖþçN¿¼¹†Ií¢ž"›Wåe*®ìp6㜊Ýñ§Š¯ü'ðñõå‚Þæò$‡Ì1ІvPÍ÷+“‚O#¶i²|9Ó†•.›k©ê¶–·1¼w‰¨Æïy%ÚBèÇqÉù—{]ð^¯x9<-$÷Vºb$QâÙ×yHñµrêÜeTúñ×­�PÒ¾%i·ˆ-ôD³Ômîæ¹º´hÓhšÜ‘ W<€A¡Ï\ñT5ÿ�k¶?ßÃÖ×:e½ŸöZߤӨK;î2ˆ‚²¨ÁcÜc§½YÓ¾ézn¿m­Gªj²]Á}s~<LJkKpª²äÇ(àc«Z_A/GŠF¥~—bÔY˜Ê0´;· ¡lç;³ïŽ(†Ö¾%x“JÒ¼ZÍi§%ÿ�‡Fž$G…Ù%iÀF$ÎÝÇr÷ÛÁéÙø{Çú‰õ«­+N•Þ{uwÉ(DН±˜�Å— ¾A�ƒš£«|1ÒµŸøH~Õ©jƒûzKw¼Øñ så¢þï…uÉ;G=s· xbÛÃfxìo/ ”’<‘ÙÊêÑ@]·6Ï”6 ÉÁcŒœc4·EPEPEPEPEPEPEPEPtú—s¥ö1Hºð0Ïœ„ú(«jÞÑ5ÍB íJÈÜOo¶ñnš@«ªRA°0_™X‚qžž‚¶¨ >ãáƒîãÏ¥Ë" D² o§À2§ßèAúŠÞ¼ÐtûùtÙ.Rv}6Q5©[™Wk·' 7ñ‘óg ‘ÜçJŠ�æ/>x^ùìÚ}5Ȳâ·Dº™É.6«…;·Ù0àäqP7ý…Å‹i’ýšá!ŽhþÛ?ï." wä… ô�z 먠kRð†õ‹©îu )§š{U³‘ÚòpZe`œ?rƒÇSœç'/ŸÀÞº{Æ›Og±ˆîPÜK²l ¡™w`¾?½ë¢¢€24Ï éZF©{©ÙA*^^¬iq#ÜÉ'˜#]©ÌF@ã=zúÔ6 дÝN-FÞÒCu ºÂó\Ë(„7Þ«± žû@­Ú(_…^ Td7îÚ#ŒÝLSË2y»vïÆ7üØìkDøÃÇNK±J-”ÈÌ«w02™2yŒ2nÀÎòsÞº(ßÂ:¬zŒPÙƒQYæ:O)ƒýü&í©»¾Ð3M½ðv…¨xb ÝY»éª*[ ™WåOº Ü@ã‚OAè+vŠ�åìþxcOÔàÔ­¬&[È.eºŽV½ˆ–@ŒAr ` õÅ_»ð®¨]ÞÝÚ¼Ó^BNy nˆÛ”lÝ´a¹ ò}Nvh bo‡Þ¹¼Ô®ç°–Yõ"­tÏy1ÞÊr¬|)\|¥pTd ŠŠÿ�á·…uI%’þÂâåå·[i[û‚^ á“æsó¨osÉ®²Š�å—á×…Õg a2´×-vÒ-ìáÄÌ0ί¿r–iÎp*Öà¿é:¼:¥…·»†ØZFÉ<›V»nÛŒóÓ¯=y­ú( ÚMåŸÚïõxì¶/Y~Ó-aŠƒj}îsç[´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform17.jpg������������������������������������������0000664�0000000�0000000�00000042754�15030617045�0023372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�$"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +Ê<3qãÏørÇX1µ¶qù‚ìt}œ‘ŒïééZßÙž=ÿ�¡æ×ÿ�‰ÿ�Ç(Ðh¯'Ón<{¨kºÞ›ÿ� •²fË~gö:3|JùÆþ1»Mkÿ�fx÷þ‡›_ü'ÿ� A¢¼£Ä·=ðö….¥ÿ� ­Ç—$1ùØè™ß"Çœï=7g§jÖþÌñïý6¿ø$Oþ9@ƒEyèÓ<z?á:¶>çDÿ�ŽV_‡n<uâ-I<em�’IcØtdll‘“9ßßn�õj+Ï¿³<{ÿ�Cͯþ ÿ�ŽVOãßøK°ÿ�á2¶ÿ�µùߨéÿ�=6mÛ¿ñÎ �õz+Ï¿³<{ÿ�Cͯþ ÿ�ŽUMRéºMí÷ü&¶²}š›gö2.íªN3¼ã¥�zeá;˽GÂ=ýü«-ÕÕœSÈè›]CcÙÇá[�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEç_ ¿ä›h?õì?™®²¸¯ xwâáË*8|6ékÀÒ\ϸòzâ<V¯Ù~!ÿ�Ï¿…ÿ�ð*ãÿ�Ð? ÿ�ÈóãOúùµÿ�Òd®²¸­;ÿ,u½gPX|6[Q’'`×3àlSŒGžÝëWì¿ÿ�çßÂÿ�øqÿ�ÆèŸÄŸù®¿ëæÓÿ�Jb®²¸¯øwâ½¢K§É†Õ^HŸ1ÜÏŸ’E~ñãøkPÚüCÇþÿ�À›þ7@ r ¿äFµÿ�¯›¿ý)–­‹_ˆ˜·ð¾{âæãÿ�Ö_‡<;ñAÑ"Óã‡Ãl©$¯™.gÏÏ#?hñüTÚ×+ÿ�5cþàû^­}—âüûø_ÿ�®?øÝfÂ;ãÿ�øI¿¶öxgÌûÙ<¿´ÏŒoߟõ}h³¬¯ÿ�ȧ¬ÿ�׌ÿ�ú,ÕO²üCÿ�Ÿ ÿ�àUÇÿ�ªºž•ñ PÒ¯,š qÄJÜÏ‘¹Hã1ûÐKàù|9ÿ�`»oýµ½YžÓæÒ|-¤i·% ö–PÁ!C•܈àúdV�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Q\Þµã]3J¼þÍ·Yµ=a¾îb¢I~¯Ù݈ |ãCàO®®t¹¯ã2ˆ™c à±ÁÀÈÇN¤W‰j´ˆn.›¤iö`ôiKLÃèr£ô¯Z¿ð¿ˆ¼oc5¿‰¯£Ò´É—þAšy9î<Ù˜sƒƒ…�qÔמü>ø -¾µ5ÿ�‹ÚÒv[kPA;Oþˆz…ê{ñÔcáÂü@ṉ̃ë¾$Ö®¬ô<î‚ÚÙV¹üT Üs^ÏHª¨Šˆ¡UF�� Z�(ªš«]¦‘xtó¾ò\[y§äóH;öÝŠó©|{qáï kºÄ—º½Æ™%º]éš’Ei=™s·ïE× YHàŒ†4êW“jߵ˸4ùôø†Ÿ</]æÙeIcºP2ß;G•Éà2'ž1¯áÏŠðYÁ¨ì– ’»Ír|Ò#F.bM€H¡”§ <•’èTW•ËñSUºÓ´‹›/5·öŽ©ei—fUŽHçË ¬Ñ.N†+¸.àApk¡ñ'ˆ5};â…t‹5ˆÚjQÞVp<׎-ʤì%@;y¹ÈãΊà<ñ4xËT¶²:A³ûN˜uŸígʳ˜YHÚ0w)Áç#Ó¥Sð׊u¨uûý#W¿7fòK‘¤M$Q¡Ì7R@Èv( @玛ÐÒè¯$ðÏÄ}R×á߇õ-Inu½gZžàGŰ(ˆ¸ bcÑ>RrÇ$(âû|Y5ÏìÉ<9$Nolìÿ�{rUÕî¢2C¹ eHÚCáíº€=2Šó _ŒQÑí¯,t3$çKŸVº‚K½‚x¥hÛkl;Ø”8^:‘W,¾$ê»êãGðâ]®7Gu÷–ÒE4hˆ3ó6•ìOS@‡Ecxk_$ÒÓQŠKiR6‰–BÛ·F®ßÂ1´±_ªž+f€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®{Zñ¦“¢Ý �Òßê¬2šuŠyÓŸr£…ì@ †¹ÍgƺV“yý©jÄ|º}‚y²ý[ ÷b+;û3ž'çV¼ÿ�„MoùqÓ¤rãÑçèŸDð*è´]Jðí—Ù4›(­b'-°eœú³Xû’M�s¿Ù*ñ?Í®_ÿ�aéÍÿ�0í2\ÎãÒIû}À«£Ñ´+ÃöeÒla´„œ°ysêÌycîI5£E�QE�QE�VÔ4ûmRÂ[+ÈÌ–ò€C²F G t5Š| á¶Òõ:]<Ío©kÃ=IJI9R –‘˜¹Æ9ãµttP.>ø\YËkýŸ!Š[ß·¶næÝöŒæ†ßØ'G¯QVlüáû  ’ÛOØ-×lPùÒ—äòóå–Ù»a+» žy5¿E�s‹à? ¥„"ÂCmor—PF×S ˆIR™o ÍòŒOwPðÖ•ªkšµÜ½õœrEo*ÜHžRÈ¥_X�H8ÝŒôçj(›Ñ<á¯_[ÞiV[ÏonÖÑ7Ú¦p±3—+†r1¹‹têj{oè–‘ypÛL0óȲ5ÜÍ"4ÔrÅ”·^ä’0NkvŠ�æmþøfÓG¶Ò­ì%ŽÒÖsqlòmðHz˜äß½3è¤OšŽ_‡šýï¤Óæk—¸Šé¤7Óç͈}ÿ�á @ôºª(’ោa°‚Æ=-ÖÞèŠ.æÎÇ9d'~JÉBJç'šü+ý§©xVÚÚßZ½†{¹¦h\!�¡ˆP!vŽ8íÅtÔP J·Ñ4{m>ÖâŠ?$t1%›Ù&¯ÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QYš÷ˆ4¿ éRjZ½äv¶©Ææ<±ìª:±ö§ExêüFñÏdqà_ ¬vH–¥Àou>ÃuZO|h’=ÒxÏH‰ØçbZ£™0ЬQ^Qÿ�ׯoú´¯üÿ�ŒÒ ügÁÇŽ´¢{fÎ?þ3@±\þ·ã-#D¹[’[ÍMÆcÓì“οà#îvÀ÷¯*ñ çÆ ÑYŒêZ¾ngÐÙcÓÓvÍÊ=¨®ïá–³àÍWGsáX#¶•pnà¤õ‘‰%ÿ�ÞÉþ”7öw‹<SΫt|;¦7ü¹XJêAé$ØÂ}Ÿö«¡Ñ|=¤øvÔÛé61Z£¹Q—ú³Xû’kNŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢±|Usè© Ñ¬‘I}f®Ž2¬¦æ A¨4µE`_xWë§Ü²è:X"& ‹8øàûU} Âþ“Ãúk¾…¦3µ¬E™­#$ƒ“Å�tôW'áï hé³4š˜ì/¯´Œœ ‰�:��—JðÖƒ.£®$š˜Ëê¤`ÚFB¯Ùál8b~¤ÐO<ñZÛËq<‹1!wv8  d“øW„iPÃñWÅoâŸ^ÇkákK†‡J±¸”F·u$ÏbÞ¤íè*߯{]+Bѵ/±iÉqko <vÈ¥ JåˆÀà•R3ïT<uàÝ'H‹áÖŽtøâñ]°Œ#LÁ%ˆäòIühÛ#Öô(bX¢Õ4ä�UE¸@zšwöþÿ�A{ü Oñ¯Ôüáˆ#¶1i1){˜‘¾wåK`Ž´ºÇ€¼/m¢_Ï‘Ë´Ž½ø!I­�{öþÿ�A{ü Oñ£ûFÿ� ½‡þ§ø×Žÿ�¼ðŸý¢ÿ�¾ßüj–—à/ Ïi#ˤDÌ.g@w¿E•Ô½€€=¿ûFÿ� ½‡þ§ø×•øÿ�ÃqYÝ7<uk¼¾·´uu¸ˆýâU{úú€OQXzg€ü1<w&]&&)s*/Îü(lÖ´>xgC_ˆ¾.±m*Ò[[xm|˜¦ŒHre±»=M�z·„¼Kgâï Ùë6g :|éÞ72Ÿ¡üÆzÛ¯øe ØY|Sñ/…¯4ûK«k<Ðyð+¬ñÎGeï7­z–«á­-GCHô=1V[ÖI�´Œ_³ÌØ<r2 ý@ ®Šä<OáÅ Êñèzb0–¹m#™PÕ¡}á_®ŸrË é`ˆ˜‚,ããƒí@ôW1¡x_ÃÒxMwдÆvµˆ³5¤d“°rxªö>ðûxŸW´=0¢ÅnUM¤xœ P_EpZ'†ô)<q☟EÓš8¾É塵B1’p1ÆkBãÃ,Ó¢˜#k¦+öHðH’ßê23@mÈëžÐ"ŸHèzj¿Em¶‘Ãcðxäp)|Má­ÛÃWóA¢i±Ê‘®–‘‚{P[EdÂ)áÏú�i_øøVO†<1áù¼'£K.…¦<c35¤d±1®I8äÐ[Er^ðLJåÓfi4-1Ø_^(-ià\È�éÐ�áI¦xg@}w[ô=5’9b¦Ò21)8ãŽh®¢¸ŸøF´øXGö&›äÿ�eïòþÈ›wy¸Î1×éÞ"ðÎç‡Äz&š‚MMUÂÚF7/•)Áã‘?*�í(®KÄ>ðüZl-…¦#ë5%m#˜Á:Hüi|Oá ë2Å¡é‘È–3²:ZF „‚84ÖQYðŠxsþ€WþÇþ‘á èøgO–]M’Fˆg´Œ“ÏsŠ�먮KDðÖƒ4Ú°—DÓ\G~È›­#;Wb:rh·ðLJϋ5Ž…¦ÖÆÕ‚ý’<d¸ÉÆ:œÈP[ErWðøñfдÁXÝ1_²G‚D–ø8ÇQ“ùšn¹áÇ>ŽCÓ=ú+m´Œdl~(¯¢¸ßxg@ƒÀþ šMŽXôÛ†GKHÁR#b pkoþOÐJÿ�À8ÿ�€5è®KÃÞðüºlÍ&…¦; ëÅ­#< ™�:��ü)tŸ hjZ꾇¦2Ç|ª€ÚFB³Âp8àd“õ&€:Ê+Šÿ�„wCÿ�„÷ì¿ØºoÙÿ�³<Ï+ì‘íÝæã8Ç\qSj~ðúkÚ.‡¦ye ¢Ò<6"cÏÐ_Er^!ðLJâÓahô-1ßY©+iàÜÆéЂGãKâ høOY–-LŽD±‘ÒÒ0T„$qÁ ²ŠÈÿ�„Sßô�Ò¿ð?𬟠økA¹ðÕ„Óèšl’¼Yg{HÉ'=Î(­¢¹-'Ã}K]WдÆT¾U@m#;GÙ¡8p2IüMþðùñf£дÃØÚ°_²G€L—8ÇSù �ëh®NãÃ�ñfŸÐôÁXÝ3 ´‡€F:ŒŸÌÕxkA†ó@hšj 55G jƒrùRœ9j�í(®KÄÞÐm¼54&›©*éi ç±ÅkÂ)áÏú�i_øøP½ÉxcÛÂz4²èZcÈö033ZFK䓎MðLJåÓfi4-1Ø_^(-ià\È�éÐ�á@mÉi>ðûêZê¾…¦2¥òªiÚ>Í Àã’OâjÄz>—¦øÏOk 6ÎÕ›OºÜ`PœIoŒà{ŸÎ€:Z(¢€ (¢€ (¢€ (¢€ Èñ/ü‚áÿ�°…—þ”ÅZõÕ¬¶ÏmsK ƒ Ž2 �3Pÿ�m×ýqäj¶ÿ�"Þ—ÿ�^‘è« h`éVøú„|> ¥[€8� �†¿ä7ý„/ô¦Z4où xƒþ ÿ�¤ÐSÂQ…Ò­ÀÉ</s@ð‡‡Á$iVà““…êhÊÿ�h 6¹Ò'”)"Õ-¥$/*gÿ�ñ«ïâ¿Õ¾jëå\M$ÊÙãk$dÖ»½gáÿ�‡µ}"òÄéðÂ×´bd28#èy¯'ø¡xkZy| ã}%?·´y@ZwŒÏçå(Ãv�ë•ÁèwXº·1Zbxú\?Æ?¼)uÛ«sáíL â$ÚK€p×Eÿ� Káçý ßù;qÿ�Ç(ÿ�…%ðóþ…ïü¸ÿ�ã”›ö»oùø‹þûŸ£][‹3<Cý.çøÇüözè¿áI|<ÿ�¡{ÿ�'n?øåð¤¾нÿ�“·ür€9ÍêÜEw™âésþñ©¾:¿Å/²0e0Ùàƒ‘þ®·áI|<ÿ�¡{ÿ�'n?øåsž3Ó< ð³A¸“KÑãΠžU¥¹šIY› Ç ¤þ'€+ü>¹]Kãÿ�Œ¯áæÜÃ$ ã£x”ãòýkÕ5Ÿù xþÂÿ�¤Ó×ðÛ᥎…á a­XÅ6«pL÷ ËF[&}€÷ÍuçÂ$¥[’FW¡ ñWü‹Òÿ�×h?ôjVŽ¡ÿ� Û¯úâÿ�ÈÖkxCÃì0ÚU¹…h>ÐÁÒ­ñô4g@ÿ�‘oKÿ�¯H¿ôUì?äkÖë·ò’xGÃê�U¸€�¤ðò»8ÒmÃ68<â€(h?ò?x·þÜÿ�ôQ­;ŸùtßûÝÿ�èËzˆx;ë#:éÁÛˆ^N:fÿ�‡‡÷þÊ·ÜÛÎ?È ×ÿ�×è¿öOýèñoüŠš—ýq?ÌRx}±*ÜàäezÂe*ÚU¹¨+@U‘áOù´?ûÁÿ�¢Ö›ÿ�–ÿ�@»ÈÒ/„<>ªt«p `�¼@ð×ü‚æÿ�°…ïþ”ËMÒ¿äa׿ë´?ú)iÂQ…Ò­ÀÉ</s@ð‡‡Á$iVàž§oZ�¯ÿ�5þáûZâoøýðçý…Wÿ�DËRÿ�Â!áíûÿ�²m·cÛÎ(oxyˆ-¤Û§#+ÐО%ÿ�\?ö²ÿ�Ò˜¨ñ_ü‰Úçýƒçÿ�ÑmLox}†J·# ò½Å Ვm*Ü© ¯PÕcxKþEM7þ¸æhÿ�„K@ÿ� ]¿äiÂU ºU¸  @  ¯Ö¿ì"ÿ�úS­¿äqÔ¿ìiÿ�£.)ƒÂ\ãJ·98^¦x?ÃÂBãI·Ü@àòqüÍ�Isÿ�#Ž›ÿ�`û¿ýoM×ÿ�×è¿öOýé?áðþàßÙVû€À;yÇùàÿ�9RÚM¹Úw ƒÁ øßþDÿ�Ø.çÿ�E5nÖ#øCÃÒ##é6̬0T®A”ïøD´úÁù�w†¿ä7ý„/ô¦Z4où xƒþ ÿ�¤ÐSÂQ…Ò­ÀÉ</s@ð‡‡Á$iVà““…êh¿üÔû„íj³ªÿ�Èàÿ�×i¿ôSSáðöýÿ�Ù6Û±Œíç§Â$¥[’:½(þ%ÿ�\?ö²ÿ�Ò˜¨ñ_ü‰Úçýƒçÿ�ÑmLox}†J·# ò½Å Ვm*Ü© ¯PÕcxKþEM7þ¸æhÿ�„K@ÿ� ]¿äiÂU ºU¸  @Ñ¿ä)âû'þ“AE·üŽ:—ýƒí?ôeÅ0xCÃà’4«pIÉÂõ4Â!áýÅ¿²­÷‚vóòh÷?ò8é¿ö»ÿ�Ñ–õ[ÄßñûáÏû ¯þ‰–¦ÿ�„CÃûƒe[î�íçäR7„<<ÄÒmŽÓ‘•èhÞ-ÿ�‘SRÿ�®'ùŠÙ¬Vð‡‡ÙJ¶•nAê Òÿ�Â% Ð.ßò4�ï È¡ÿ�Ø>ý´xkþAsØB÷ÿ�Je¦/„<>ªt«p `�¼BøCÃê0ºU¸'…îhÚ7ü…<Cÿ�aÿ�Òh)näqÓìwÿ�£-éŸð‰h?ñ*·çØÕ‹-IÓ®~Óga 3m)½G;N2?AùP•Q@Q@Q@Q@Q@Q@Q@q?øskã(ྴ¸:v½fCZßÅÃ…lsŒô=GnàöôPÛ|Lñw‚ÐÙxï×QÀvZÁw$Š;žçñ_¥lÇñãÀOfÔ.£'øZÑò? EzY5žt˜³i6$“’MºsúPÿ� ÛÀ?ô¸ÿ�ÀI?Âüvð?ä'qÿ�€’…ox£á߇|S¢K§O§ÛÛ9ŠæÞY"~Ä9£¡¯”|Káíá÷ˆNº’XNøf‰ˆI“³/¨õº�÷»W:Û5§ü-¨ê·íE¶>§§Ô­^ðoÃ+Õ׋¼ovº–¾çtPõŠ×Ó‰±Àí“Ísÿ�üOâ\^A©j°Ë¦ÙDp£Y Æ6€vŒ“Üz÷ �(¢Š�+Í<{ã{\±ºµk¦Ó´Ë˜×SXí%h$6éBì ™‚’2\zW¥Ö\¾Ðf†æ)tM6Hî¥óîí‰¤ë½Æ>fäòyæ€9­'ÄÚî³ã?èÖ³i"ÓJhYg0»#šèF$Á*ÀdðtÅsÚwÄz÷ÂZF¹qq Ù& ³9W‚Y%€Hfa|¸ùðFÐNsÅz5Ÿ†´<N,´M6ØO•0†Ò4ó¦ÖÀä{h𿇖ÖUдÁo™"ˆZG²7=YF0 õÊÙøÓZ»Õ4(ZÞÊ+}wK†òÌùN̲æ321Ü –žÜÙñΡwˆ|)¤}®k-/Sº–;˘e1>V=ÑÄ`®öÈÈ ñÁ­»eîDð>$ a`–©Ùü >ÖCc8Ç5«yci¨Ú½­õ¬Vï÷¢ž0èßPx4Äjz­Ï†uM3Ãú=ø¸—VºŸZ¬¯sŠc;Ãq‘¹³óÍqw_uôÒÆ£§¤Ùj~L±É»þ>ų¦Cô$ïVÇ�ƒÖ½‚Oh’鉦I£éï§¡ÊÚµ²”ú„ÆåPÜxO×r4—>Ò¦vEšK8Ø”\aI# ÀÀöç65ÈŽ¸nµM%<vòÙ öîÆ+{hC3$Háœp çåË[ Mãmtø‚}R àHÏ‚ZŠÍô)&õbCÇï�ÃuÇ=Ž’þñ�¾6n›)Óç&édÓ|¶Š@ –!Ðü¤gý’;Tž¶ðG‰ô§ÔtmNžÊe6¦VÓ<¡*)fdQ•õ�y¼Ÿ|C¬êú5³½µ¤CXÑ÷ Q"4±]Âe(Ç!pAã ‘ÀÇ2ê_<Q§]Mzf™|ñßê6bI#,ÖªŒ$åÏ_•ëòðy¯J¿Ð¼ ZI­\è]ºX…˜ÜE¦«<A1†°ÛÈèlU+¯x[ÄžŠm'KÑíÖíRêÚëû23Ãm|•!N@dÆ€%ð^¥¯ø‡IÔäñ ²Ú¯Ú¤¶µò­f³’HGnË©lð8#ëˆðŒóßü#Ðo®µ­RMR}bæs©Íæ17‚6Œüý<œ’½?‹æºÛx4Ÿ†–ÚÆ¯ukkkrÑFë¦é ´DnÚÞR*X¶ “Îz Ù¾¶ðÖv5‰´ËHo§“ËYíì<ˉ\‚H»<g€hÏ`ø¯­A®½­õ„öÑ]êÖöh$sg”2åØ|Á‚ãžyÏj»kãßÝÂSDþÌö·»$h­Õb2<r.ðKƒ…0îàc±Ñto ^ÛÛjÚV‡¦¢ïy!”iË ˆùÚÇ ¡•²¸<ÅWÓí|ªÝjú ¦‘¦¼–S#_Ú>šDŒ F!+!†xïÍ�yÄÿ�uäÓÓQM6Á`þÉ‹Sh$Gßµ‹g@Û±É;Õ±ÀÀ õ­™~$x‡ìŠQ4•™|Vþwxd(W$ y€Œw9ìEzÇ„ü9w#Isáý*gdXÙ¤³‰EÆ’: aXúÇ‚<'ªÝYioke2].ªm­"Š3rb;s*í;Ó2`ÿ�½Ö€9½;â/ˆu¨ü--ôÛi¼Emw•¸†FKNÎritÏø·YV¹¶Ò-"°’ybIÙVG‹ËfR¾Pœ<¬@€8»µ¶´ð½Þ´ö°iÚ{ê:"ăý µV#àc' x¦kzW…,4ýCUÕ´m9­ñç^JÖ +8ÄÀ)-€O88  Xücª%ÌÎút–j&ìñ;³ö_8ùo»ä9„tÉA¸1<{OøâzMKŸLµ³O«<ÛÈUˆD]Ô¦.¯ÆÉCÔí:ù5ŸéÚ,^4d±†Ó`‰5²>`\ùa8]ã‘·ãÕ«g ø~KH¦¶Ñ,cŠVJ­b±¶ò>ùR ‡Áîƒ@‡Ã½Fÿ�Qø!gww¬H—óÃsêR$3HˆÌÍ’pvõô®GVÔ›íº~›÷ˆ4ýF/Øiú·öÜòÇåÊ®O—&ü•`ìW½– HµÓL·Ò¬¢Óß;­RÝMž¹P0j£x;Âïj–­á½Û£HŒERÜp?*�â4ëÍZy|a ZkMmi}m™uqtÁäfQ$¶Þw-œ)Mܰݞµ<¥½ïÂ\é×:żöKx®.oÞY­n";RmIJqÎOÒ»¦Ð4gÒ×L}&Á´õ9†Ù CþŒ~”á¢i#J:PÒ솜F §ÙÓÉ#9û˜Ç^zP—hZÅö¨x9¡Õ®o Ô´/µh¯ï^U„¬*ë1g$ÆÉ^0½x¨µ‰Zéð'‰n`ºÓ×QÓ­l&ó­mÜ,jb6ìw»XH8;¾è¯S°ðþ‹¥Ã4:~§ÚE8Ä©ol‘‰L0�gñ¨ã𿇡·–Þ- LH%ŒE$kiW@rŒ`ŒóŠ�嬼qzþ8µÑ&¹Ò®!¸»šÍE¬rÝ ¿™#—ÜTÅWËÆFáógŽüeâ ê3ÃcikqšsÝÙïØ´‘:™•ˆp0#;ã¦9èzøü9¡Åx.ãÑ´ä¹$-ª nÆsŽ3W¥¶‚r ÐÇ! Ê7 <7sØ÷ 'ñÇ‹5ý7Tðåõ•ìQÃqaª^$>Sª¸ŠÜÉ‘wá¾]œÁÉöÝ玼CáÛ«Mljnvð…¥ôöÓ¼žD’Ise‚¾Ò#Œäàgîw&•wwÝΙe5ÌQ´QÍ%º³¢APHÈR tÁ>µIüáy>ÿ�†ôvÌb/šÆ#ò a~ïAì(o9Sc"##@UFÐéN Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ïx7Kñ¾†ún¥e ¸QóÀÿ�Þ_ê;×CE�q6_ ¼?gá½;LŽ9!¼°jv­å\¬‡–pãžI?)ÈíŠ?µ¼Má/—\·moIAÿ�!;±qõ–÷‡«'å]µKJÕôírÅ/t»Ønퟤ¸aŸCè}5v¹}[Á6·òjÚ-Ôº&²ßzêÐ “{Mùd^}êšxÆÿ�Ãò-·ŒìÒ2B¦­i—³sþÞ~hN#Þ€;J)‘Kñ$°È’Fãrº0!‡¨#­>€ (¢€ (¢€ (¢€<ÇIðÖ·k­ÿ�l*ke–Kõ¿´ia/s¸{›}¸}»‰sÜGÀÁ®:ÛÁ2ÀÚ~‘ÿ� :…•ÌPO=ä,±Í$û÷¢‰>VNÙ!†“ïôP‘^x7S¼Õ> ^7†dÿ�‰°þÈh5»C+q&±l’zëTí¼'ãSà©4+4ï„ØIç,–ê÷QFˆ$¶ ³)Û·�¸ÚØ9óí4Pƒk_ õé´?ÚÁ¦^jqkgŽ×—æ[EY·K*ÁW×åp�Ïê^-·ºÔ4ëD‹G¿¹92†²ºŠ›IBü¬¬Î»)äŒÔžŠ�ñox'źþ“᛽GL¶Ôu›}?P¶Ô&‰Nùbe€œÖ98èr@ªzÿAâ}.òm7ìB)t©èÜDÅ#¶µ1M Äì@ÈÀçî´PÜx/\ jZ~ŒÖyžÑÝ^K>ú4g2#°-‡‘‡ù!ÁÆN†¼w£üBÓuA§ÎÚtZÚ ¯$§†c;0 ýYØ �ùs^›E�x~¹à=vïâ.¡ªÛø`µ„ú݅Ϙ%·íãŽD¸à¸?9`p~÷~k¥ðÿ�‡üAcðçךlÇYûÕª[ùñ1c!p„6ý¡@qÔðñÒ½.Š�ñÏø+ÄW~ñ&™¦érK¥sÕ…Ÿ›µ³ÈÉ,áÉ}¸VBÒyã äjé~ÕOõ=sWÓõ–s$°Æ&µ1¼/_²ÊÎJž†òóÎz“éÔPÍ‹ðÏÆéáï²&ƒ*Ý%!$^@?Ò’ûÌGÏ™Õ`ùCvWeá_øŽÏUÓnµ=)„C}ý±;Ë cÍÉŠ2œíÎ>|ŒŽkØh Ó<>àM.¬­lüogv“[$ó¡k¡Ç ±ÊˆåǨãÐöM:Æ-7N¶²€¬k€p:ñÜõ¥žÆÎêâÞââÖ f·bÐI$aš"F Ry•b€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ l‘¤±¼r"¼n ²°È`z‚=)ÔP7ƒ.´Y¤¼ð]òé®Ä³é“‚öSÿ�(æ"}Sò5>ãx ôzWˆ,äÐõWá"¸`ÐÎé”Ãåo¡Ã{WWU5-.ÇX°’ÇR´†êÖA‡Šd §ÿ�¯ïÚ€-Ñ\QÐüEáBdðÝÑÕtÅäé„ÇÌAé ç$ºùâµ´/izìïf¦[=N1™tëÔò§O}§ïö”‘ï@ôQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘¯xcIñ$ ¥jHÎa¸ŠM z£ŽTÿ�“ZôPšoƸÔ-þÊ|Q¦Yʱ,†AêŠÿ�0 D €úÖÑ|u7ˆ|Ó¥ÚiÓ¬J¦L_¸(X°ÚÊaʰÚrªc¨ØÚkšÔw7¶ð¹»BIUN>Ï8&¼ãâV«¢ifï\°» ­ùPEg5Œà;¹i7ÆC(P2?Â8È ‹Å?çðƒ£«JË{;Ör Î~èsÆq×V²|d×§ˆ>«¦èBtyRÙnUR£“µÈ?8þ/\âðßFÓ<9r÷ú–§m>±{j³ÜÜM:’ŽìÅzôÏ©öÅvž)ðõ¶¿içëÚ\Xµ˜2ò5ÆZ,u=ð#@ žø³ä§Ç1ï™]”‰_�.3Ÿ“ý¡N›Âÿ�`–Þ6ñÔdÏ!q+ðv³sòz)®ÒçÆ>mrÂAâM¢Å0fÑ`³;½>ûÆ^{½5—Äš;¹,Ä_Dv*A“óqÉñ 0éŸôImŠxÂÊé§—ÊXæÁ;K`î…=*üüGáÛÛ}+ƾ‚ÖyŸb_¬æ8œdá\qœ’à+Uñ†f»Ò|¯i2m½ Û/c8[ŒŸ›ÔøÔž->ñ€úuíå”ÐË4 ât܀Ƞ²œð@'Ÿ­�nÜx“T‚Énÿ�³4ùab›Z=Aˆ`Ä�AòyŠ}Þ½¬YÙÏs&“bRÚF ~ù ñûšñÏ ëáËÍKÀºŽ¡Í´Ç6›wæ© š§n~œã¶zW©k:Η&‡¨"jVlím U©$í<u  +­wX´´šåô«‘#HÁoß$ž?sOXÖd\iV`Πÿ�üf²õ}gK}ùR³fky�u$§Þ¬[ëzP¶ˆNȃ#í éõ  šö±ygÌzMˆI£Y5ûä3Ïîi¶>!Õïìa»‹I±T•¨k÷È×÷5CFÖt¸ô==R³W[hÃ)Ahã­EáýcL‹Ãö &£fް¨*Ó¨ þt­m¯kQ4‰¤Ø€$xþk÷ê¬Tÿ�ËPi-|A«Ý¤ŒšMˆÊñ×ïÕNü±éÅgéZΖ–rÔ¬Ôý¦ààΣƒ+zúTz>±¥ÇÐ}JÍI»™†gQ\àõ  Xuíbyn#]&Ä$¶oß“µ[Üú0¤‡Ä¼÷70.“bÝ‚±7ï‚J†ã÷>†³ìu-o52Ú•˜ r “:ò<¨ÆG> þU†±¥®©ª³jVaZT*Lëƒûµs@«¯k y-°ÒlwÇHOÛßbÀËö M§k×w:óiWv@â×í"H®L€Ûq‚‹Yk:X×.ÜêV{ ´ 7ž¸$4¹}ÇçNÒ.í¯> ;Û\E:+Äá€>oµ�vtQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�r'N±»×5©.l­æqtŠH•Ž<ˆ¸Éæ5Ò¬§øÑá 5m-ÒÕ“Îx„`+Îy�s÷GZôæQ}wZ6—V±Gö¤ÊËlÒùsëü«Ê¾%=þ‡ãÿ�xŠêâŽÑ£ŠY£·eXÕÙú®òOÏQž”éi£éð‘ÍömžÁiòÞüãå~5Ò4é>-=³XÛùIGˆÀ]Þf3Zõ“U“_‘“P°bÖq°qhÅJ—|`y¿®kŽñO€üG«xâ=JÓ[±†y¬Ly6¬�TeÈÁ-Ô¸ç=¨“ÃÚ8Õ-ãm®Æ‚V+åŒ<3ùÒ\øG[Û%]6Ø+³1ÏÊkro‡^1MVÖ6ñže’)v·ÙŽ�2:wãò§]|7ñŠ]YoñžÎò²!Çå;’xôR?�äüE¢é–°éï…¼l×ð£@2¤ò>•ﮥ¥œe4Û5?i·(àÊ€Žž•店ÃO5Æ™î¿a4oz˜ nFC6xë÷Oõéú¬:À´}õ‰iƒdãŸ51ÿ�-}qÿ�Ö :ø«¥Xé~-ðn£mgAîÌ"F :îLq߆ν#YÑ´¸ô=AÓM³W[i °Aiç¥y‡Ä¯µ_‰žÑæÚv±aw#EnUc,Ë€à¹ÏÜ^ãï{צk0ëCÔ —Ö,Ÿf“p['§¡óN?*�“WÑ´´Ño4Û5e·‚ PAÚ}ªÅ¾‰¥h‰Ó,‰(2~ξŸJ©«C¬ ø½ý‹'ÙäÜÉÁ#iè|ÓŠ±oµöh±`ÁŒÙ?§ýu tmK“CÓÝôÛ6v¶Œ³’vŽzT^ÑôÉ|?`òiÖní ’Í’OåNѡև§˜ï¬U>ÍÐÖNHGSæŒþU®t õЧ’»CY»=Ïš3ùPúV¥½œ…ôÛ6?i¸0)àJàž•£érAt_M³b.æQ˜à8)t¨uƒi&Ëë>Ó? dçŸ5óÿ�-}sÿ�צiêæ Ÿ.úÅGÚæÎë79;ÎOúÑǵ�Mc£imy©†ÓlÈ[åFp8õ'ó¨ì4}-µMU[M³*² P`\Ý©ãŠ[uƒw©m¾±\ÄÙ9Éò£éûÞ8Ç­2Æ\êš [ëÂTÜM›O–½›ÇZ�š-K:åÚ6Ï`¶„…ò�–—'§°ü©ÚEµŸÄ[kx`S¥dˆ('Í•PëÛ—@_Xïû49?b|º\qæý{ÿ�õäÑÒí> 8»ž [û/ƒ&0š;j�í(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ã%Ö´í;_Ö¡»»Hd7HÁ[=<ˆ¹ý sÞ!—Ã~'‡UÓ/oâ\ÚB‰ (êÒÃŽ •?¥vÿ�òÖÿ�ëñ?ôžŽùÞ׬ú´ãÞñÜ~Õ_Ãþ+ºXż+mg|1¼jÄ®O¦Ð`àŠô·ñ>Šúͤ˨ÂÑ‹iaœd´Dvö?•7[ðæ“âmb{-^Ê;˜EœewpÈw¿*Ã~•ÄMð¯TѵX ð¯‹¯ì#x¥t†bYPL¨Á’÷a@½Ï‰4v×,%ñH¦ yà˜íìi÷¾%ÑžïNeÔ"!. 1çåH==H®oüD]RÒ6ñÎéž9 Iµ¾P6ätï‘ùS®¼ñ.,–Ong˜¬gk|å¹ÏO@Gã@¾«â=[(¥üL#¼øÏËqžž¤V/Ž~&è:FÑYÝÇ{©ù±<6±‚rUÕ¾cØqõô¬ ß�xÒiì Ö<upöó\„g NÇ9#°#ñ®›Løoáÿ� ÚÃqm\ß‹¨ ¼¹;äÊ€íì¹öçž´Êx6ÊÏMÒ/uÝnþ9|GªO“n$˜£óU¶úgŒŸLÚ½Wñ.6‹z„Lïo"¨ä•8íZ:ÿ�ü‚[þ»Cÿ�£V¤×?ä©׬¿ú  ½WÄÚ4º=ôi¨DÎöò*žISíSÛø£D[h”ê1×ÓéWµŸùjõí'þ‚jÍ·üzÃþâÿ�*�ÀÒ<K£C¢ØE&¡º[Ƭx!F{Tz‰4x4¥¿‰dHT2œð*ÙÐÿ�ä¦ÿ�׬_ú�¨¼9ÿ�"æŸÿ�\€3ô¿èÑZ:¾¡“q;`ç¡•ÈíèE3Iñ&7"Kø”µÔÌ3žArAé[?üyIÿ�_Wú9ê=ýEßý~Oÿ�¡š�βñ.Œ—z“6¡pO<*1éê 2ÇÄš:jz›µüAd• žy5ž¢¶4ÿ�øýÕëéôLUŸÿ�!m_þ»Gÿ�¢–€3¢ñ.Œ5«©N¡Æ·…Aç’\ö÷O¡ê6šä’Îu™KÚJö>hÿ�½ü‡ï?ëÖýZŠÇþJØ+ÿ�jÐ[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP-õÆ¿­=¶¨ö¨.XQò|ˆ¹Ë ÿ�úª¬Zv¨u«¥ä¡Å¼$¿Ù£än—íƒùÖ“Üý‹ZÕÄÖ·ÄKrŽ”²+/“ä2©T«Ǩ*ë3›=OË{x‘[û:ã’­!#î´?:�¤šv©ÿ� Éý¹.ñj„¿Ùãäo~1óš|ºv¨5«U:ä¥Í¼Ä?Ù£àn‹#ï‘ùTë|½-ɳÔü–¶HÃgO÷ƒ1#îzO“PVÖ-§zŸ––ò£7öuÇš2Üÿ�dþTJçNÕ¹`§\”¹Šl?Ùãù~æxÇéO½ÓµAw§×%b×)û4)ò¤ç§¦GãV./ƒë6S­ž¦bŽ9UÛû:~ Ùàö4ëÍAeºÓÝ,õ2±\sýqÀòs÷=X~tŸªéúšÜiAõ¹\µà M¼ciòßžœ÷MªiÚ¢Ú!}rWh€`ÛF92¦NÇŸÂ¥ÔïEÅÆ˜ÑYjl!»H³§WËqŸ¹êEK©j =ª$Vz›0¸…Èþθ,ªÄýÏ@h–µ§j‰¦1}rY͈m6ñùh¸è?~¯§j‰¢ß³ë’º y !¶ŒnO§Õï…ÖœÑCg©³™"lgN8)?Áè ?UÔçG½‚+=M¤’ÞDEþθ%HîPmWNÕG¾g×euò¦Ú1¸m<t©íôÝXÛDF½(Ù¢ã¥?SÔãI¼†+=M¤’EÙ×$©ø*x5H’Þ5k]H€ý›qéþå�fév¨ú-ƒ&¹*!·Œª hÎÑ´q’*=OÔßA±hõ¹cC ‚Þ3´zdн¥j m£ÙA-ž¦²Go:ÿ�g\ ÷*=øZh–vóÙêi,qeþΜàþ @ézv¨ÖŽS\•Ú'ÑžD¯“Ó¹çñ¦i:v¨ÐÜ”×%@.¦ xÎNó“Ó½]Óu‚ÕÒ[=MXÜLàg\V`~ç¡Í.ø[Ãp²Ùêj^æYþ%Óœ«9 ýÏJ�‚ËNÕ Þ¤\•JÜ�ÇìÑÇÊžž˜…2ÇNÕSÔÂë’«,¨¾ÏÝûµöãÒ®Ùê Ö ïg©…–à:ìëŽG”‹Ÿ¹ê§ò¦YßµFW³ÔÂM"2ìéù5ø=A "ÓµC­](×%-á%þÍ#t¸ÇlΦÐíîmü"ÜÞµÓ/!š5L4qòÔ‘ê ºÅÌæÏSòÞÞ$Vþθä«HHûŸíÎ¥ÒL—>7{´µ»Kq¦ù^dÖÒD7y™ÇΣ'×QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEr¾=×ï´+O]8¢]jZ”zÜH›–ßÌ$ï€;÷"€:ª+‰¿Ö5o ëVGÚä×ï5ÂÂ+¿.ÛËò•žfy#ÁL ™ãñ¬{¿‹êšF‹©ÙhŸh·Õlo.£]ymZ©iP‡Œ)ç°Ð§Q^V>1Ë5ävö¾fº±¶ˆÉ}³?l„Ë 8Œã€CuÇmÕ~Ïâ„ú¤>}3BYŸÄ÷/n’^ye%ƒ;ÑŽÂ1ÁÃwôè´W¦|J¸Õ࿸²ðÝô–ð«y‚Kå˶ano+�Œ—ÂÕn7 µfÇÇ—3\‘y¥ZÛÚ¤rHÓG朼#ËUà)ùƒ)ÎT’ÛQ^ciñJë[“NÓ-4 ËKýdc4ŒÑÇåyEÚEy!Ú΃(VRHùˆ9­ø³S½ø=mâmH>¥¨§‘ÕDe)+ªŽ�Qœvï@õç²üKž+kF]&ÖieÖ—DA¨o'xÕЇòþeù¶¶@*AàÖ-ßÅ{½{ÂfM ÊK-FMçWy È~Ë24|n„›Æå=AÅ�zåçú§Šï¼à‹½UŽ-[RHŒâhÇrÆÑç!¾_”‹\cqôŸiñ.tÕ®ÞOµM4¯cc8Ž!k}3Ì­HvÐ! ¸îáºr��õz+Ënþ0ÉjÆ! +ÜFugO¶à$Öh$•AòùR„n2x u®ÇMñ‰ôËhôýV]FæÒƶIc{‹xÜ#ò‡8ù\ ‘˜PCEy]ˆ¼K/†<q« Yæ—CÔµ x"’8‘|˜£I"<–RwÇ=r0ü?ñ[ZµÕnìïÅÆ³qqm§Ëen°…(e´3Ëþ¦"Çœ�6žÙ dиQ^Cãωºè:Ãxz6ãG‚ÊâêyÂ®Û ‰ãlü­’r¤0žAì|o©_é‘[ÜÃy{g¦D’5õÍ„Í,6;#«~ìbMÛA<Ù ¶ŠóÔüA¨xþÃŲ%œžMR9ÒÖ’KæÜs;|Äžx"›Œõ_À:ˆæšïM´’ ŸSŸN·ŽY *ÛRB’+~è쑎#åí“@£ETÒ¥ûF‘e0»[Ï2ßí*¡DÙPw€8�õǽ[ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªjz]޳§Éa¨ÚÇsk&7G È89؃È#‘Vè vox~ââžÚæV·Ç<—Ó´èpGó�Á#±ƒQÞ|>ð½üvQϦ•´–¶ÑÅq,kR)WPªÀ|ÀOSë]5y‰þêw¾(¼ÔôƒmrOe¨ ‘Wþ>ár­ŸöLG'Ô®@+ø‹À^ ‡Rµ¶‚üè÷&ÛU»ß-É-mó Æ@©€v†píÖº-'Hð]潦›ƒPð Xcˆ=ÄbÔH0 û€9o›#'Šá¼ðÛVÕõ[ûCìߨY[ÊÒBžlésœ|ÙËR¹ }ÜtÆMKÁž$—Çóë6^’A¬éW0츷R¶öñ<r€œ•Àî(¸¼¶ð^ƒ«&‹?Ÿgq­É¾8c’åbwÞ¤”*vFÛögiRI\õ–¶ Ó¼_‡ \6±å=ضw¹�pÊò¾âcÜÀ°,ß1ߌ幇Ǿ¿ñ&¥oµŒ¦5Ón’;å’0-îKÃ,'ƒ}è0HïÙÇ1­øsÅ“øž÷P_Kz×^þÏšHïbáå¾ýá�%FxîüÔè6Þð혴öR§Øå2Ûw10!ÿ�•pÇå^zVv“¤ø.÷HÕ|cnòYX2¥å„¦qå—%× üà•, œwï\Dþñ ¶ö0Â,‰¿‰Öõ"àDOò•ù‡°K(à¶OqV­ü+âMâ6£ªi¾ß¡½ÝŒqZ4aኈʤɕ)ÁPy;º8�îÿ 1Blgù/F 1}8ÿ�IÀiùù~'ŸÌÖO†ü5àkHš-Òckiö.Ui.axÃ᥅ƒØËƒÀ$ã5ÆŸ‡>$fg¹†öæoíD“QCql-õ;_?y¤,ëO�8 ×À:.«áÛG.–mÚãXº½°¤Œ¬‘¸Pƒåc·î÷ÇQ@t”ðŽ®úF›§}¹†Ž‚çOÉ»‰.2»ae\6Þ¬6± ©üOmá.¡]vÜ$úÕıʱ˙&B|‘¾?¸à»a²§¯8s á¯Þé¾#ÒLšÏAºÒ$ŠËOÔ."˜ÅxAÛå23mˆq€Ç‚�.ËῊ x‹ø`ùÞh÷2@.-Çš-­Ý'flŒðrrhÖæømá;…dÓ$"š4"ò`q0"RÄ?ÌÎ ŽIç[1Á¥øgÃË�Yév0m ,ÌDQ¨þûx9¯9Ð|¬éVžŠÿ�Kþѽ²ŽšâY"x­”NòaIa":+”Üj« Œ=Gᧈnü-â[ymn®u«–>\¯=°·ºÿ�IYÔàI¼ ė€H�¡ÏáxwN¹ÓæK¨muû¡o25íÌŸhšLõ;ɰAn28'$ ü%k¹ Ó$ŽBa"e¼ŸÍC”kïܸRGÊGâ²¾!ønëZ´ð¤z‡–é,5H.'…L*"·AóÆ70?(ÀàíúW;ð·ÁÞ&ð߈´ûSI’Ú¢=ÌŸh‰˜\³¡!\“ˆ¶¨8ã§J�Ú×gøsww­Øjp_I,1C¨°ÚßTŒî‹Ì1®01Äò;‘Wõ»Ÿj“[ê\]ÈÒ] m’íI¹¡²OWÈ<òpj¶‘áýT|Rñ6§y¦ÞÁ§_Kjö× q—'“F rÄ19/nq\ŒÞñKèßb±ÑšÅäñ£jðŸ>¶¶Û@V!\ò3÷W'å>Ù�ôË¿‡þ½¿²ØÌ³ e³Mäñ/½"ØŽgw=ê}CÁz§ P\Y:ÁÙb·¹–1q–6PËìA‡ðÇÃ7¾Ò§MBØnåX–užX'‘ $b ÍK?ÎxÏ#'» ííá´¶ŠÚÞ5ŠGh0@À�zRQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ��������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform18.jpg������������������������������������������0000664�0000000�0000000�00000036262�15030617045�0023370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��Ê"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ä}_R—P½¶±Ò£ž;IV‘î„yc?iã+n²4où xƒþ ÿ�¤ÐP~߯ÿ�Ð ßÿ�Çÿ�GÛõÿ�ú[ÿ�àxÿ�â+f³ìµÍ;PÔïôÛ[÷š~ϵE±”ż¹ÈÇ!Iã¶=E�Vû~¿ÿ�@+üüEAk­k7°´°h2,’DI¾ÇÌŽQ‡)ýå5ÐVG†¿ä7ý„/ô¦Z�oÛõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüElÖMŸ‰t‹ýrçF·»Ý¨ÛÆ&’‰Ðì'Ô°—$r¤ŽhŸo×ÿ�èoÿ�ãÿ�ˆª¶Zö­¨G+Ûh°2Å3Àù½Æ«SÔk£®Â?ñ婨Vóÿ�G5�Oöýþ€Vÿ�ø?øŠ>߯ÿ�Ð ßÿ�Çÿ�[ ÊŠYˆU$“€eé>#ҵ˻ëK ‡{›Tº†H^'ˆ°%rAÁ�àŽ �Göýþ€Vÿ�ø?øŠ«e¯jÚ„r½¶‹,S<›ÜaÑŠ°å=Aæº:çü#ÿ�Z—ý…o?ôsPÿ�o×ÿ�èoÿ�ãÿ�ˆ£íúÿ�ý�­ÿ�ð<ñ³Tmu:÷U¾Ó-®’[˺‰AýÖðJäôÉ xê;õSíúÿ�ý�­ÿ�ð<ñVË^Õµå{mX¦x7¸Ã£aÊzƒÍtuÏøGþ<µ/û Þèæ  þ߯ÿ�Ð ßÿ�Çÿ�GÛõÿ�ú[ÿ�àxÿ�â+f°4x{Ä÷×–Z6¡ö©ìÿ�× Š’>ó(z@}¿_ÿ� ¿þþ"ªÙkÚ¶¡¯m¢ÀËÏæ÷tb¬9OPy®Ž¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÔ?Ûõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüElÕ+-ZÇR’D²œ\ÉV’5-àpFüm$ Š�§öýþ€Vÿ�ø?øŠ«e¯jÚ„r½¶‹,S<›ÜaÑŠ°å=Aæº:çü#ÿ�Z—ý…o?ôsPÿ�o×ÿ�èoÿ�ãÿ�ˆ£íúÿ�ý�­ÿ�ð<ñ«<ÑÛ[É<Ͳ(”»±ì�É5á¯øoÆ\E ê&ííÔ4¿èòÆ. v?•�Zû~¿ÿ�@+üüEWµÖõ‹Õ• Ñ`a­ æ÷e8#”õ®†±¼7þ£Pÿ�°Çþ†h�û~¿ÿ�@+üüEo×ÿ�èoÿ�ãÿ�ˆ­[‹ˆm-¥¹¸‘b†$2I#œP2I>€V6ã _½k=6õ¤¸ ‘Ix‰À‘w¨Ü„ãæ\ŽhO·ëÿ�ô·ÿ�Àñÿ�ÄU{]oX½YZ Jоoq†S‚9OZèkÃê5ûÜèf€·ëÿ�ô·ÿ�Àñÿ�ÄQöýþ€Vÿ�ø?øŠÖšh­à’y¤XâK»¹ÀU$“ØVVâÄ<zmÙ–EfØð¼LÑ·Ýu£rÌ2­�'Ûõÿ�ú[ÿ�àxÿ�â*½®·¬^¬­‹¥h_7¸Ã)Á§­t5á¿õ‡ý„n?ô3@Ûõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüEYÔõÍ;F{4Ô.|ƒ{p–¶ùF!ås…\€pO¿¡=Vÿ�„«D:çö7Û‡Û¼Ï+o–û<Í»¶y˜Ù¿o;sœv íúÿ�ý�­ÿ�ð<ñ^×[Ö/VVƒE„R´/›Üa”àŽSÖºÆðßúCþÂ7ú íúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"¬êzæ£=šj>A½¸K[|£ò¹Â®@8'ßОƋ-sNÔ5;ý6Öç}柳íQle1o®r1ÈRxíQ@¾ß¯ÿ�Ð ßÿ�Çÿ�Uíµ½bí§XtXÁ)†LÞã �8å9àŠèk@ÿ�_­ØEÿ�ô íúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"¬Üëšuž±c¤Ü\ùw×ÛþÍFýîÅ,Ø8Ç�dóéê*?éúåÎow»Q·ŒM$-¡ØN©`.HåIÐ>߯ÿ�Ð ßÿ�Çÿ�V´}Aõ=8\ËoöyÒÂñï߆ŽFŒóœ•ÏãWë#Ã_ò ›þ¿úS-�kÑE�QE�QE�QE�QE�QE�QE�QE�VFÿ�!OØA?ôš ׬&òÖ=[Ä*÷0©þÐ^Àÿ�—h�oW á}?Xµø—âýRóF¹¶°Õ~ËöiÞXX&2‡*®XnÎG:àñ]—ö…—üýÛÿ�ßÁþ4hYÏÝ¿ýüã@+#Ã_ò ›þ¿úS-_þвÿ�Ÿ»ûø?Ʋ<9}fº\ÀÝ@ÛïO2ùù–€7ëƒÑ"×çø{ªj6p¼&Ö-FKø¤"Ý *‹d‚ÌwIô®ÓûBËþ~íÿ�ïàÿ�?´,¿çîßþþñ  ÏøGþ<µ/û Þèæ­í /ùû·ÿ�¿ƒükÂwÖ‹g©nº€gU¼#2žsPG;ɼ^lФ¤a‚ï8àdð3\W…´MZêÚô¶—:e†£mŸcwr“»]êU˜žý��Wcý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÐŠçü#ÿ�Z—ý…o?ôsVÇö…—üýÛÿ�ßÁþ5á;ëE³Ô·]@3ªÞ™O9¨¢ºŽim&ŽÞo"g–9JîØÄpØïƒÎ+†ðW†µíÇ^+¿ÔͳÙÞ¥šÁ<1ì˜ã*HS#²ã¡Ý’ÄäÒ»oí /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ€,W?áøòÔ¿ì+yÿ�£š¶?´,¿çîßþþñ¬ ßZ-ž¥ºêVðŒÈ:yÍ@Ñqi1Š#,‚6Û¾Âç�ݳëÚ¹¯iºŽž.ŒðßÙØ:D-ì/ïԖí3|„yx‰< âº/í /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ€,W?áøòÔ¿ì+yÿ�£š¶?´,¿çîßþþñ¬ ßZ-ž¥ºêVðŒÈ:yÍ@ÝœúލÙZÏä\\ZË Rÿ�Ï7e 7àH5Ã|8ð׈<?{71ÝYé0iQ[½¥ÅØd¼ óÍ Û##·ËË}Þ+Ð?´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ��±\ÿ�„ãËRÿ�°­çþŽjØþвÿ�Ÿ»ûø?ư<'}h¶z–ë¨u[Â3 éç5�t̪êU€e#Edh¶wIªê7ÑysÝ\l‰KVÞ?–1OS½ñÛÌçŠÐþвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒühÅcxoýF¡ÿ�aý Öö…—üýÛÿ�ßÁþ5áÛëEƒPÍÔ:…Á|Ц±×Z%ý½¼VòÏ-´‰w#1; ÿ�dž¾Õç ¼%­øwY’[»³°m6(^;™£™ÅÈl·’ÊX¬± Ç©é^“ý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÐŠÆðßúCþÂ7ú­í /ùû·ÿ�¿ƒük÷֋¡›¨u ‚3 þù  }JÎ GJ¼²¹…¦·¸á–%8.¬¤F2:×à¿]èž$›W»º¹h ÓÓJÓ­î^7’;u`ß9E œŽ$¬{vÿ�Ú_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ð�X¬o ÿ�¨Ô?ì#qÿ�¡šÑþвÿ�Ÿ»ûø?Ʊ¼;}h°jº€gP¸#2ïš�Çø‘¦êú£xhiZEÅð°Ö­õÌr€Gì¨órÇw¸9"°WÁãk‚ÔÛ²ÙÂEöã2`G³ýNÜîÝ»åé·ëÓÿ�´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ��±XÞÿ�Q¨ØFãÿ�C5£ý¡eÿ�?vÿ�÷ðcxvúÑ`Ô3u�ΡpFdß4ñ#MÕõFðÐÒ´‹‹áa­[ê3˜å…�Ž-ÙQæ:åŽî;prE7ÂÚ~±mñ'ÅÚ¥î‹skaª‹_³M$зú˜ÊÁ$$dœŽ:uÁâ»?í /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ€,V6þ¿Zÿ�°‹ÿ�è Z?Ú_ó÷oÿ�øÖ6ƒ}h'Ösu�ΠäfAÏÈ”â?Xºø—á RÏF¹¹°Ò¾Õö™ÒXT:0ƒ ÎíÆO:dñMÑ"×çø{ªj6p¼&Ö-FKø¤"Ý *‹d‚ÌwIô®ÓûBËþ~íÿ�ïàÿ�?´,¿çîßþþñ  ‘á¯ùÍÿ�a ßý)–¯ÿ�hYÏÝ¿ýüãYÞe}"WF ­zA ´Ë@4QE�QE�QE�QE�QE�QE�QE�QE�Íéº>™q¬x…çÓlåíùžcÍ´õ¤ŸÆºJÈÑ¿ä)âû'þ“A@`hßô°ÿ�Àdÿ� ?°4oúXà2…]äHY¢Ì• mûžÃߟ¡® o‰’ÚøYñ%ƆRM&ùìgµYÊꛑör»˜sŽÇÒ€;ì þø ŸáY>д‡Ó&/¥X±û}àÉ·CÀ¹ÓÒºzÈð×ü‚æÿ�°…ïþ”Ë@`hßô°ÿ�Àdÿ� ?°4oúXà2…]ŸÍò[ÈØ%# \dê@ëN3ê+€‡Åþ&“Àζði‘Ýé÷ †) 7±Æp¥~ïœä¸ò<�v_Ø7ý,?ð?°|+¢i2Yê%ô»&#T»QºÝ�™°:t®“J¸¹»Ò,®o-þÍu4É4þY9PY‘øVW„ãËRÿ�°­çþŽj�¿ý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€Éþv7Éo#`”Œ)q©®=8Ϩ®xž_‡úÖ´m,EîŸqp<v²Éäq+¢ÜÛˆÏN€—öÿ�@‹üOð¬ èšL–z‰}.ɈÕ.Ôn·C€&l+oÃzÂkþÓuTx_íVé#˜²ÇÌ žxlŽyâ©øGþ<µ/û Þèæ  ÿ�Ø7ý,?ð?Âì þø ŸáRê’\æÏ%¤¶ÐʈXKt F˜å€ ‘Ǩõí\­ŸŒõøcˆõ-5aÕZÂ{¿± ÊY³ÎJ©P§ŸïÔŠ�é°4oúXà2…`øWDÒd³ÔKévLF©v£uº3`té[~Ô¦Ö|+¤j— Ï{e Ä‹!C: d“ŒŸSTü#ÿ�Z—ý…o?ôsPÿ�ì þø ŸáGöÿ�@‹üOð©uI.aÓg’Ò[heD,%º£LrÀHãÔzö¯;ºñçŠGƒ|?©-ž—¦__£=Óêv÷&Ú!»j|у°°!†ò;Ðý£Ð"Ãÿ�“ü+º&“%ž¢_K²b5Kµ­Ðà ›§Jë!óDùå »Fò€…-ŽqžÙ¬/ÿ�Ç–¥ÿ�a[ÏýÔûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü*]RK˜tÙä´–ÚQ nhÓ�œ°8õ½«Îàø«<Z^†š¶ŸöJöɯï[ìòɸr¢Bˆ a°1’�Ï-êßÿ�`hßô°ÿ�Àdÿ� Á𮉤Ég¨—Òì˜RíFët8fÀéÒº›IÒêÎ ˆ¦Žhå]eî¸#!‡'ƒ×­bøGþ<µ/û Þèæ  ÿ�Ø7ý,?ð?Âì þø ŸáRê’\æÏ%¤¶ÐʈXKt F˜å€ ‘Ǩõí^}/Š~ Üø'Lñ–¡ZI-¾û›{ñ6÷‘¤ÛĪxÜ6à1êãž´Þ`hßô°ÿ�Àdÿ� Çðö‡¤<ûô«Æ¡pmÐà8+¦‹Ì ˜¡—hÞP¥»àÕ“á¿õ‡ý„n?ô3@?°4oúXà2…Ø7ý,?ð?Â¥Õ$¹‡MžKIm¡•°–è0 Ë�A#QëÚ¼§Rø§â?Aѯ®´›M>Kí>K’óÀòFÓ*‘LJ˱·± o±4ê?Ø7ý,?ð?±ü=¡éþý*ű¨\›t8ÎJßÓgšëK´¸¸H’yaG‘b“z+…oâè{Õ ÿ�¨Ô?ì#qÿ�¡š�±ý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€Éþ.©%Ì:lòZKm ¨…„·@´i€NX z^Õå—uë]#N¸¿±Óô«‰´yu6ûj>Ë—G!mâù†×dÆw}à0hÓ¿°4oúXà2…cø{CÒ ýúU‹cP¸6èpœ•¹£j#WÐôýMbh–òÚ;u]êÜf©øoýF¡ÿ�aý Ðì þø ŸáGöÿ�@‹üOðª^1Ôõ-Â÷ú–”°½Í¬-(Imä˜>BíB?ÞÎR1Ó‚o‹×2é÷Úµ¤viÚ=¾Ÿ&¢;´¯r@adÙŸâ$Å�zWöÿ�@‹üOð¬hzCÁ¿J±lj�fÝ�sÒºšÆðßúCþÂ7ú  Ø7ý,?ð?Âì þø ŸáT¼c©êZ7…ïõ-)a{›XZP’ÛÉ0| …Ú„½œ¤c¦ ¯Žîo5oA�²–×ÄVóÉ;ǹ¼§Š̨sýóŽFFÓß Wý£Ð"Ãÿ�“ü+BÐô‡ŸXÝ¥X¶ÝAÂæÝÄã¥u5 ¯Ö¿ì"ÿ�úPì þø ŸáGöÿ�@‹üOðª^1Ôõ-Â÷ú–”°½Í¬-(Imä˜>BíB?ÞÎR1Ó�øÏW¹·ð}ö™ym­KW0Ä\Ë"6@ „A_NFx�ë?°4oúXà2…Vð´i$Q"¤i}xªª0 ™p�ì+j²<5ÿ� ¹¿ì!{ÿ�¥2нQ@Q@Q@Q@Q@Q@Q@Q@dhßòñý„ÿ�I ­zå4ýCR‡Yñ âM:ÿ�h/η¯ü»Â÷�Æ€:N »­2æ µ³º’2±\4^g”OñmÈÎ>µÀÝü5ÖõÝø^÷űOËÇûß쥌E0}ªˆê7,rOë]ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñT©j· kÝK·@’H£1«7r– {dýk7Ã_ò ›þ¿úS-7ûWWÿ�¡rãÿ�¡ÿ�â«'ÃÚžªºlÁ4 Ü}ºðä\Ä97>÷cÇá@.§eý¥¦\Ù}ªâ×ÏŒÆf·`² =J’ßdž0.‘ýœ<Yâ­¢d”Nu2£ ¶p£$àc“]ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñTsIÓWHÒ­ìææäB»|û©<Éd9Égnä“Ö³<#ÿ�Z—ý…o?ôsTÿ�Úº¿ý —øÿ�X^ÔµD³Ôh3ȧvI1 +drݨ¬Ôì¿´´Ë›/µ\Zùñ˜ÌÖìD©RA�ûâ¹3À'I¶Xm|YâbÁóæÍwÌT ùã#hä€A'š×þÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*€-hš-‡´k]'M‡É³¶]±¦I=I$“Ô’I?ZÎðüyj_ö¼ÿ�ÑÍSÿ�jêÿ�ô.\àT?üUax[RÕÏP  Ï :Ù$\Ä0L­‘Ëv ‹Ä:"ø‡F›L{ûÛå#t¶R*I€s€ÄíXçáîqá™tMNK­X8”-ö¤ËquuÚY—å`�ÁÇEiÿ�jêÿ�ô.\àT?üUÚº¿ý —øÿ�@´M"×@Ðì´›%"ÚÎ…7¹€ÜØ�=IÇ$“YÞÿ�-Kþ·Ÿú9ªí]_þ…Ëü ‡ÿ�Ь/ jZ¢Yê4äS»$‹˜† •²9nÔÑx‡D_èÓi{c¤n–ÊEI0pƒ€}«ßÀ0Ãf,æñ¿yjèñÜÅwt’‹µ~¢BS=>\©SŽ3Z¿Úº¿ý —øÿ�Gö®¯ÿ�BåÇþCÿ�ÅPÍsþÿ�-Kþ·Ÿú9ªí]_þ…Ëü ‡ÿ�Ь/ jZ¢Yê4äS»$‹˜† •²9nÔÑx‡D_èÓi{c¤n–ÊEI0pƒ€}«š? ´Æ€¬šÆ·-Ô–ÒÙÜ^Ír²Ïso!ËDìÈ~^8Àv5Ðjêÿ�ô.\àT?üUÚº¿ý —øÿ�@VVpiö6öV±ˆííâX¢AÑQF�ü�áøòÔ¿ì+yÿ�£š§þÕÕÿ�è\¸ÿ�À¨øªÂ𶥪%ž Až@u;²H¹ˆ`™[#–í@ˆtEñ6˜÷÷¶1ÊFél¤T“�çˆ8Ú¨éþ¶±Ó¬¬¥ÔõKñkx/ ·×Y&pÐìG!NÒ�Ç(¾àÙþÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*€6kÃê5ûÜèfí]_þ…Ëü ‡ÿ�ЬêzªÁ·@ópN.b;Ïz€7<C¢/ˆti´Ç¿½±ŽR7Ke"¤˜8 AÀ>ÕË7Â-Ô´šÞ½5ͲY\ÜÏt’Ës¶Ln]pTzé?µuú.?ð*þ*í]_þ…Ëü ‡ÿ�Š   }3Nµ°´M–Ö±$1&sµ�~€Vw†ÿ�Ôjö¸ÿ�ÐÍÚº¿ý —øÿ�YÔõU‚ÿ�n;æþàœ\Ä0wž>õ�nx‡D_èÓi{c¤n–ÊEI0pƒ€}«*Ù®Š4‹íSVÔìÌždË}r$kƒœ# Ê0Üã� hjêÿ�ô.\àT?üUÚº¿ý —øÿ�@ ªˆ¨ŠT`�0�¬ ÿ�¨Ô?ì#qÿ�¡š?µuú.?ð*þ*²<?©ê«þÝwÍýÁ8¹ˆ`ï<}ê�ÞÕ´©u3naÕµ 9¡bI³hÿ�xÆ:0#ðÈ®j?…^·-íVæÚĬ+sgƒË»òœº2 “Áï[ßÚº¿ý —øÿ�Gö®¯ÿ�BåÇþCÿ�ÅPÍcxoýF¡ÿ�aý Ñý««ÿ�йqÿ�Pÿ�ñU‘áýOUX/öè¾oî ÅÌCyãïPö­¥K©›s­¨iÍ M›GûÀF0ÁцEsñü7Òío´ › ýFÉ4%u²·…¢1®ÿ�õ…·FY‹Ž¼ý0kgûWWÿ�¡rãÿ�¡ÿ�â¨þÕÕÿ�è\¸ÿ�À¨øª�Ù¬mý~µÿ�aÿ�Ðí]_þ…Ëü ‡ÿ�ЬSÕV}_n;æýÉÅÌCiØœ}ê�ÞÕ´©u3naÕµ 9¡bI³hÿ�xÆ:0#ðÈ®dü/Ó#’Álu{O³±ˆC•àŽMÛ˜8Û–ÜI-“Î{Vÿ�ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñT³Yÿ�\ßö½ÿ�Ò™i¿Úº¿ý —øÿ�M𣼚#<‘¤kÛÂÑ’ Cö™2288  º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÈÑ¿ä)âû'þ“AZõ‘£ÈSÄöOý&‚€5èªz­óiºd÷ko5ÃF#†6‘‰$º€±98à x­÷Šõiþü@ÔcÕu$½³×š;YÈ’Š$HÜ)l§U'$s@íYÿ�\ßö½ÿ�Ò™k_9‘á¯ùÍÿ�a ßý)–€5èªz­óiºd÷ko5ÃF#†6‘‰$º€±98à y §‰'ÔüãY/uûëk¤×.môé¦ì|¶*‚ÜÛvÁ,œ`d°ÉíUÏøGþ<µ/û Þèæ«¾›íÓœêj-Ñò&ÊNê6³ƒÜ ÍRðüyj_ö¼ÿ�ÑÍ@OU¾m7Lžímæ¸hÀÄpÆÒ1$÷P g'�œÁ¯+Ñ5-SÅ^ñ­´ZµïöªëqéÆk‰lŠª¢ì�àÛ‚L|`Ÿœ æ€=‚¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÔßë ¯øFÔœ\o–ÙCµÆ7»/ÊXã®J“žàÓ¼#ÿ�Z—ý…o?ôsPAESÕo›MÓ'»[y®011´ŒI }ÔˆÉÀ'�ðkÈ´ÿ�jká/LgÕ¥¹Rԭѱ…²$Kå.6Èä6п1l Ó\ÿ�„ãËRÿ�°­çþŽj_ÞI¨x Ã÷SI4³I§@d’pÛÝö ÌKrrrs߯ æ“Â?ñ婨Vóÿ�G5�tVn·©*É&\˾A6öÒNc$±HÕ˜€§R3ÍxΛªk> øW¢ê7άM¨»¹ÔZÇS6·’(™°È2%E\Œp£•Å�{Åsþÿ�-Kþ·Ÿú9«vÄ0GgpŠs¶æ8Iî}ë Â?ñ婨Vóÿ�G5�tVn·©*É&\˾A6öÒNc$±HÕ˜€§R3Íx‡¾!x’ãúJ;Mw¶™y«j2MpÖò]„¸qåÇ.Ã÷WiÂãû»†  «Ÿðüyj_ö¼ÿ�ÑÍZšEìzŽ‹a} KW6ñ̉6w¨eÏ~y¬¿ÿ�Ç–¥ÿ�a[ÏýÔÐQYºÞ¦t«$˜As.ùdÛÛI9Œ’Å#Vb�HÎ5ä,Z—‹>hڵNJ¼Go«I4–‘ý–é¡Y¦’å€gãçUR>é�*0c�ÜkÃê5ûÜèfµ¢ŒC DØ"… ìYŽ;’zŸzÉðßúCþÂ7ú  š+7[ÔΕd“.eß Œ›{i'1ƒ’X¤jÌ@Ó©Àæ¾zƒÅ^"Ôü)¦Îšî¡qs•yw{¸–ÞHÀ¹p.UÁQ6Ð@çoÈG€>—¬o ÿ�¨Ô?ì#qÿ�¡š± \ ¿ éw+s-ÊÍi‚y+Ê ¹€èOR=꿆ÿ�Ôjö¸ÿ�ÐÍ�lÑYºÞ¦t«$˜As.ùdÛÛI9Œ’Å#Vb�HÎ5áVZÿ�Šî¾Øx‚æûU¹µûÔI%½Ñ†Q¨µÃyNÀ²™“iU»ÀÁxÅ�}XÞÿ�Q¨ØFãÿ�C5kD{é4 9õ5 ¨5¬Få@Æ%Ú7Ï5WÃê5ûÜèf€6h®OÇöú…ö‹ ž™y%¼Ï/˜ÂßRûĈªIXœ£ çƒÔf¼Ê÷Ä:½µ†±yc¨êìúM®.‘ÝÓ¹ žrƒ‰Xî*r1Æ(ÞkÃê5ûÜèf¶kÃê5ûÜèf€6h®OÇöú…ö‹ ž™y%¼Ï/˜ÂßRûĈªIXœ£ çƒÔf¹ÅÔ'·ñOà {=KTkFÒêI’ö༓n ½‹çñÇ  O¬mý~µÿ�aÿ�жk@ÿ�_­ØEÿ�ô  š+“ñý¾¡}¢Ãg¦^Io3Ëæ0·Ô¾Åq"*’V'(Ã9Á à`u®ZúþÞßþskâ»Ë7"¹Æ©©aæ´)’’!#Ì‘˜€0 Î{@«Yÿ�\ßö½ÿ�Ò™k^²<5ÿ� ¹¿ì!{ÿ�¥2нQ@Q@Q@Q@Q@Q@Q@Q@dhßòñý„ÿ�I ­zå4ý;gÄ2ýF3ý ¼Evè9·„ôß@(«¬« hpÉ Î‡¦M“µË¤–‘²´ÍÃHA¹îÝMGÿ�Ü_ôÕÿ�ð:Oñ£þ¸¿è'«ÿ�àtŸã@–ÖÖöVÑÛZÁñ(X≪(è�Y¾ÿ�\ßö½ÿ�Ò™i¿ðÅÿ�A=_ÿ�¤ÿ�Éð÷‡â“M™Ž£ª®/¯ zàqq õëÅ�uõ“qáo]ÆñÜè:\ÈóµÃ¬–q°i[ïHA±ÀËu8¦Â7ýõü“ühÿ�„n/ú êÿ�ø'øÐ¥µ­½•´vÖE¼J8¢@ªƒÐÀ‰áøòÔ¿ì+yÿ�£š§ÿ�„n/ú êÿ�ø'øÖ…´¥³Ô Ô5E۩ݯÉxã8•†O=}趬©ü1áû•eŸBÓ%V®XIi3ct‡#ïœ ·SŠþ¸¿è'«ÿ�àtŸãGü#qÐOWÿ�Àé?Æ€5Ñ4TE Š�UQ€ ¬ÿ�Ç–¥ÿ�a[ÏýÕ?ü#qÐOWÿ�Àé?ư¼- E-ž N¡ª.ÝNí~KÇĬ2yëï@µSM'MŽÞîÝ4ûE‚õÝî£XT,ìã\c XpIÎ{Õ/øFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ��Õ‚mmâ··Š8`‰GjQ@À��ŒV„ãËRÿ�°­çþŽjŸþ¸¿è'«ÿ�àtŸãX^Ð"–ÏP'PÕn§v¿%ãŒâV<õ÷ Ú²¢ðÎ Z4Z›³ÏÙJÚF<Œ’Çg.I'Žæ£ÿ�„n/ú êÿ�ø'øÑÿ�Ü_ôÕÿ�ð:Oñ  šçü#ÿ�Z—ý…o?ôsTÿ�ðÅÿ�A=_ÿ�¤ÿ�Âð¶¶z:†¨»u;µù/g°É篽�vÕ”ÞÐÊÞÍ´=5­m˜´HÊDIÉ*¸Âœ’xïQÿ�Â7ýõü“ühÿ�„n/ú êÿ�ø'øÐÎ00+Ÿðüyj_ö¼ÿ�ÑÍSÿ�Â7ýõü“ük ÂÚRÙêê¢íÔî×ä¼qœJÃ'ž¾ôÛU;m#L³·¶·µÓ­ ‚ÕËÛÇ « À”�aIÜÙ#ûÇÔÕ/øFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ��Ù¬o ÿ�¨Ô?ì#qÿ�¡š?á‹þ‚z¿þIþ5‘áÿ�Å$äê:¢âþá~[×Þzõ ²¾’ÚÚÙô- µ$ÛÄlã+ ''`Æ'ž;Óá‹þ‚z¿þIþ4Â7ýõü“üh`�ª@� �;V?†ÿ�Ôjö¸ÿ�ÐÍðÅÿ�A=_ÿ�¤ÿ�Èðÿ�‡â’ òuQqp¿-ëŒáÏ=zÐaTmtM*Å K=2ÊÝmÁˆmÕ`’NÜ2I<zš©ÿ�Ü_ôÕÿ�ð:Oñ£þ¸¿è'«ÿ�àtŸã@5á¿õ‡ý„n?ô3Gü#qÐOWÿ�Àé?Ʋ<?áø¤‚üGT\_Ü/Ëzã8sÏ^´ÒjF™«†¥§Z^y-¾/´À²loUܸ¢}'Mº½‚öãO´šîßýLòB¬ñºÄd~Kþ¸¿è'«ÿ�àtŸãGü#qÐOWÿ�Àé?Æ€6kÃê5ûÜèføFâÿ� ž¯ÿ�ÒdxÃñIù:ލ¸¿¸_–õÆpçž½h¤Ô43V KN´¼ò[|_idØÞ«¸qPÝøwD¿¿ŽþóFÓî/"ÛåÜMj"m9b20yü#qÐOWÿ�Àé?ÆøFâÿ� ž¯ÿ�Ò�lÖ6þ¿Zÿ�°‹ÿ�è Gü#qÐOWÿ�Àé?Ʋ4?ÄóêãûGToÝ~[×ù“Ï&€:MCHÓ5aÔ´ëKÏ%·Åö˜Mê»Á÷^ëÃzõúßÝèºuÅâmÛq5ª<‹·îáˆÏ½*/øFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ��Ù¬ È.oû^ÿ�éL´ßøFâÿ� ž¯ÿ�Ò7‘4Fˆ;¸KÛÅÜí¹Ž.d'¹÷  º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÈÑ¿ä)âû'þ“AZõ‘£ÈSÄöOý&‚€5êŒÚÖ•mÒÏ©ÙÅ'l®óªˆÏ£x<¾•ñÛX¼ð±o þÓ’"œ1†ð§Ô®à=Íyˆmõé¾ø—AƒOÕo4á%œ:m)£¸eR(xÒ5Ú«´€Ì£<òr(Ý+#Ã_ò ›þ¿úS-iZÜ%ݬW¬ª’(`²ÄѸÕX§Ø€k7Ã_ò ›þ¿úS-�kÕ wH³†Y®µ["‰Är<·ªŒz)$ðx<{VGÄ;mbóÀ:ž€_ûNH@ˆFpÄnŸR»€÷5çÓ\j–žÖôY´}sPÑ%ØiOþ•-ï‹D� pˆ<äâ€=•dEt`ÈÀe9zŠÁðüyj_ö¼ÿ�ÑÍV¼/å i‰ •Ý”1Û$q[Þ.Ù£ET8ìØ"ªøGþ<µ/û Þèæ €œ šÍ›Ä-´QK>±§Å²yQ´—(¡ßû “Éäqï\çÅ ?SÕ<1mkaö“nÚ„Ú+j»åkLŸ3jàî?tíÁÎÁé\~ªšÖ½à GCÕ¬õW¼yäm*dÒ0.a‰Á'ÄXŽ„&3Üe®Â?ñ婨Vóÿ�G5ki†õ´«6ÔV4¾0!¹Xþè“hܶsY>ÿ�-Kþ·Ÿú9¨ '&ªWN[ošþÔZEŸ2à̾Zc®[8ÊüPÓõ=SÃÖ¶i6í¨Aý¢¶«¾V´Éó6®ã÷NÜàŒ•ÁxªÓÇzßÂíbÚãN7¶Âã˲SCy$+:ynm’,´tù02H<P¹W?áøòÔ¿ì+yÿ�£š·b24(fDIJ‚êŒYCw�2=ð>‚°¼#ÿ�Z—ý…o?ôsP@NMf]xB±¶K›½kN··w1¬²Ý"+0ä¨$àŸjç~(iúž©á‹k[´›vÔ þÑ[Uß+Zdù›Wqû§npFJãgµÖõ½28u[Ë«ëi®±ÖïBŽKk˜7(Œ\)‹÷ÁqŸÝáyö ˉ,i$n¯€ÊÊr„JÁðüyj_ö¼ÿ�ÑÍ[ꪊ@U�€`xGþ<µ/û Þèæ €œ šª5+µk¡{lmÔíiD«°BsŽõÊ|PÓõ=SÃÖ¶i6í¨Aý¢¶«¾V´Éó6®ã÷NÜàŒ•çW0øòãQ]J÷ûSìö÷k ¼b³É0|BgƒË"=ÉÆJ®Ð:¯9�÷„u‘у#�U”äê+Â?ñ婨Vóÿ�G5jéO{&‘dú”iûA¹HÏʲí€öÎk+Â?ñ婨Vóÿ�G5�tàdÖE׊ü9bÝëúU¸“; ב¦ìuÆO8ȬŠ~§ªxbÚÖÃí&ݵ?´VÕwÊÖ™>fÕÁÜ~éÛƒœƒÒ°!Ñ/<G᥃Ä:$w·SêMccyu§*Mž>c.Ñä±@àp¼”ã8 RŽD–4’7WÀee9 B¥dxoýF¡ÿ�aý ÖÀT*€��v¬ ÿ�¨Ô?ì#qÿ�¡š�Ù'&²î|M YF’]kzlÈÅQ¥»C0ê'“\÷Å ?SÕ<1mkaö“nÚ„Ú+j»åkLŸ3jàî?tíÁÎÁé^]­iž+Õ&šâóNÕC‹+»;Ȭ›ûo0yVóÀŠ<Ãqß„ÆGB(èUetWF ¬29V?†ÿ�Ôjö¸ÿ�ÐÍYÐb’éËf–RGiµ¬g+@{…éøUo ÿ�¨Ô?ì#qÿ�¡š�Ù'&³fñ‰l±4úΟÌæ8‹Ý"‡aÕW'“Èàz×9ñCOÔõO [ZØ}¤Û¶¡öŠÚ®ùZÓ'ÌÚ¸;Ý;ps‚0zWuáßë6W·Ùž]FâÞçE´†ëMòÖ[“)3ãbÀã“Ó8 òg¨¸ç#"±¼7þ£Pÿ�°Çþ†jÞ‰a&— éÚ|³äµµŠ”õrª·ãŒÕO ÿ�¨Ô?ì#qÿ�¡š�¿©XéV¦ëQ½¶³¶RšâU=XTÇŠ<<Ö°Ý.»¦yä1E(»dŽ:ªœàžGŸ¯ÚX]h×RÓS‚iþÊÐyÞc($�˜; Á漟Wð–¡£)DÒeš ¿ ]X$6¦D†þi<ÆùTa–Àn� ŒŠ�öºÆðßúCþÂ7ú«µº±ðÞ—i}'™yœQNùÎé�cžüƒUü7þ£Pÿ�°Çþ†hÞ¥¬éz4I.«©YØÇ#mGºb }b2h]kJx-§]NÈÃvÁmä®Ù‰8pÄ’ë/Æzmµþ3I£Ûj—ˆ¾]œwÂuI\… T‚�‚O` f¹_éÃMÓ|¦iºuýÄ:^³g;}–ÊYü»xA Ä¢žyu= L¬mý~µÿ�aÿ�жƒ(aœžFåXúúýkþÂ/ÿ� %�[Ôµ/F‰%Õu+;äm¨÷S¬A ,FM2?h²Éiz½ƒ½âîµU¹Bg¨3óJÎñž›m LÒhöÚ¥â/—gŰRW!C € “ØÈ®CÄðYéú¿…´(<7®ÝÚèòÃsöã2¢ì^R@U3ž‚€=F²<5ÿ� ¹¿ì!{ÿ�¥2Ö½dxkþAsØB÷ÿ�Je  z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çl5M:ËYñWWö°Hoì–eS³AÎ ®Š¡’ÒÚW/%¼NÇ«2h§öþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÕŸìû/ùô·ÿ�¿cü(þϲÿ�ŸKûö?€+oèßô°ÿ�À”ÿ�Éð&™0}VÅOÛï  ̄¾•¿ýŸeÿ�>–ÿ�÷ì…G“§@…"±·U,Î@ŒubXŸÄ’h/íýþ‚öøŸãGöþÿ�A{ü Oñ«?Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�VþßÑ¿è/aÿ�)þ5ƒá]oIŽÏQªY):¥Û ×2 ̓ץtÿ�Ùö_óéoÿ�~ÇøTPhúm²ºÃanݤ`#³“ùÐÛú7ýì?ð%?Æíýþ‚öøŸãV³ì¿çÒßþýð£û>Ëþ}-ÿ�ïØÿ� �­ý¿£Ð^Ãÿ�Sükºޓž¢T²RuK¶®d›¯Jéÿ�³ì¿çÒßþýð¨ ÑôÛeu†ÂÝ»HÀF9f9'ó ÿ�·ôoú ØàJÛú7ýì?ð%?Ƭÿ�gÙÏ¥¿ýûáGö}—üú[ÿ�ß±þ[ûFÿ� ½‡þ§øÖ…u½&;=D>©d¤ê—l7\ È36^•Óÿ�gÙÏ¥¿ýûáQA£é¶Êë …ºv‘€ŒrÌrOç@ÿ�oèßô°ÿ�À”ÿ�?·ôoú ØàJYþϲÿ�ŸKûö?Âìû/ùô·ÿ�¿cü(·öþÿ�A{ü Oñ¬ ëzLvzˆ}RÉIÕ.Øn¸Afl½+§þϲÿ�ŸKûö?¢ƒGÓm•Ö tí#å˜äŸÎ€#þßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ�³ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPoíýþ‚öøŸãX>Öô˜ìõú¥’“ª]°Ýpƒ ÌØ=zWOýŸeÿ�>–ÿ�÷ì…E¦Û+¬6èÚF1Ë1É?�Gý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Ʊü=®i þýVÅs¨\›„ÎZè³ì¿çÒßþýð¨âÒtè¬mÔ;—lF9brM�Eý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Ʊü=®i þýVÅs¨\›„ÎZè³ì¿çÒßþýð¨âÒtè¬mÔ;—lF9brM�Eý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Ʊü=®i þýVÅs¨\›„ÎZè³ì¿çÒßþýð¨âÒtè¬mÔ;—lF9brM�Eý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Ʊü=®i þýVÅs¨\›„ÎZè³ì¿çÒßþýð¨âÒtè¬mÔ;—lF9brM�Eý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ5gû>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  ßÛú7ýì?ð%?Ʊô-sHIõÚ­ŠîÔ®ndlNz×CýŸeÿ�>–ÿ�÷ì…G“§Bd1ØÛ©‘÷¾#¶�Ïè(/íýþ‚öøŸãGöþÿ�A{ü Oñ«?Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�VþßÑ¿è/aÿ�)þ5[ÂÒÇ6$±:Éß^•t9}¦^A­/ìû/ùô·ÿ�¿cü*h⎠* èª0�:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform19.jpg������������������������������������������0000664�0000000�0000000�00000037743�15030617045�0023376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��¼"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *…þ±g¦Ï 7hifVtH-¤™Š©Pǧ�n^¾µ_þ[ùáªÿ�à¦ëÿ�н‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãt¯EciÅʵ=àWû*ë àÿ�«ö?•;þ[ùáªÿ�à¦ëÿ�н‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãt¯Ey~·ñßÂú³s¦\Økm5»b¶ª€äÑÝXuîgÿ�ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{ãÿ�ðÑÞÿ� n¹ÿ�~!ÿ�ã´ÃGx?þºçýø‡ÿ�ŽÐ°Q^?ÿ� àÿ�úëŸ÷âþ;Gü4wƒÿ�è®߈øí�{æ~øåák0év–:ÒO(b¥í”x™�ôÚÿ�ÂKcÿ�<5_üÝñº�×¢²?á%±ÿ�ž¯þ n¿øÝð’Øÿ�Ï Wÿ�7_ün€5è¬aâ8¹A§¼�Jÿ�e]dœõ~Çò§ÂKcÿ�<5_üÝñº�×¢²?á%±ÿ�ž¯þ n¿øÝð’Øÿ�Ï Wÿ�7_ün€5èª6½¦¥,Ñ[ùë,*¬é=´° § v·#ÐÕê�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ȹÿ�‘ÇMÿ�°}ßþŒ·­zȹÿ�‘ÇMÿ�°}ßþŒ·­z�ˆÜ@.VØÍ¸d2,[†â €X¸ŸqRט¾§¥ÚþÑf'¼µŠWðð¶*dU-;\ þù\:‘Šôê�ȶÿ�‘ÇRÿ�°}§þŒ¸­zȶÿ�‘ÇRÿ�°}§þŒ¸­z�§&¯¦Å©G¦É¨Z%ü‹¹-Ze°õ œ‘ÁíW+ÉüQuðþëâFk-żZõ®¡îÖÖîÓÏ78Z@1Œí'qà(dãÖ(ç!¥Øk´ö£e©ZCwjåËE2†RD�޽zÿ�ü+Ÿб¥ÿ�à2×–iŸòuwÿ�öÓÿ�IÅ{Õ�qrøGឣ6•áøï¥ŽÙÖ1+ýòjïü+Ÿб¥ÿ�à2×/âÛ›]cÆ~µÒ%´¾’ÇZV¾Ó„DI�spHÁ@ïò“·®1^Ÿ@,ü Þ(¿€øoM1%•³ª}pžpOâ!Zð®|ÿ�BÆ—ÿ�€ËZÿ�ò7ê_õáiÿ�£.+^€9+Ÿx ÌFn´ ,‹fX‘w»*Œõ$ôMMÿ� çÁŸô,iø µÅ|A›Q—_ðÔ—ÚUäIŠ,ÒÖo2# F p H[{ýâYT��Ïo\ ‡þo_À|7¦˜’ÊÙÕ>θ Ï8'ñ ¿­?øW> ÿ�¡cKÿ�Àe­ ùõ/úð´ÿ�Ñ—¯@=׆>Øêi÷šw‡-ïeÛåÛÍå$¸àaIÉÉàVü+Ÿб¥ÿ�à2×/}Œÿ�þÝc¨izž¡ôO¦\éÑ›‹tùTɤo�/žW¯Byôú�á`øáñEüÃzi‰,­Sìë€Ìó‚«ù Óÿ�…sàÏú4¿üZзÿ�‘¿Rÿ�¯ OýqZôÉKà?Á,QM hÑÉ)Ähð .}�=joøW> ÿ�¡cKÿ�Àe®×RÖìþ#ÝL.YõK¯}†]:HÔŸì°»’d$nU’AÚIçšöj�á`øáñEüÃzi‰,­Sìë€Ìó‚«ù Óÿ�…sàÏú4¿üZзÿ�‘¿Rÿ�¯ OýqZôÁÁáÿ�…—Zöu½§†&¾ÜÉöhÚ“pÎFÐs‘ƒ‘íZ¿ð®|ÿ�BÆ—ÿ�€ËT4ßè±üBy4Í*ÆØi6¸–h`Uy'›Ÿ™‡,U<ÿ�Ï^õÛP Ãÿ�7Š/à>ÓLIelêŸg\gœø…_ÈVŸü+Ÿб¥ÿ�à2Ö…¿üú—ýxZèˊנ"ß¿ o/ä°¶Ó|;=äyó-â4‰UŠÐÿ�…sàÏú4¿üZòχhÇZVð´Ö0hl¥9¸Ñ‰l9€ó1ÀlãwŒŸz ‡þo_À|7¦˜’ÊÙÕ>θ Ï8'ñ ¿­?øW> ÿ�¡cKÿ�Àe­ ùõ/úð´ÿ�Ñ—¯@e·ƒþ^^Ïek¤hÝ[ÿ�®‚%ž?÷”r?¹ÿ� çÁŸô,iø µÃx;Ãz­§‹ôU–ÞëOÐõäÔàv"è\V7$�]NXí,Á<û�p°|?ðƒx¢þá½4Ä–VΩöuÀfyÁ?ˆUü…^¸ðm-丹ðö 1®ç’HQUG©'€+VßþFýKþ¼-?ôeÅr_%¶áN¨³¼K,@Œ³ù¨Ä/¾ÕcÇ`hJ÷ÁŸ4ß+íÚ6…kç?—ž‘¦öô\õ>­ÿ�¹ðgý _þ-pþ;¼·»Ö®õ!s Γá;»M:D"D–í¤"œ¹p?)ô¯Mðì7vþÒaÔ 7±Ù—õ2¿\ЇxcN³Óiùìì­¢·¶ƒÌò¢vªfß°íÔþuô-ÅÄ–ò\\Í0F»žI*¨õ$ðxÿ�'W{ÿ�m?ôœWwñÎ[hþê‹;IJÉ$ �r2Ïæ£¾ûU Ažâ eVžhâWuLŒ31¨ÏrH�w©kË>(ëz,¶ÞÔQ²x[ÄV· p²©-æ0oî©+“Ø‘šõ¥ŽâšH¤PÈèÀ«)äGQ@vßò8ê_ö´ÿ�Ñ—¥qq¥¼—3G ®ç’F ª=I<Y¶ßò8ê_ö´ÿ�Ñ—È|s–Ú?„ú¢Îñ,²I@Œ³ù¨Ä/¾ÕcÇ`h»Ô5];I‰%Ô¯íl£vدs2ƽb2}ªÐ!”2Aw¯4ø•¬øÿ�Ãpbÿ�M‘µZ;¿,ÜTœ4©°0Gld€ ÆqÜxlY é+§4­b¶q-³Jvˆ NyÉ<Ð-¿äqÔ¿ìiÿ�£.+^²-¿äqÔ¿ìiÿ�£.+^€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^¹­[N{Ï鬺…å·üKîF u‰ õS×w?AW?°%ÿ� ö¯ÿ�cÿ�â(fŠÆþÀ—þƒÚ¿ýýÿ�ˆ£û_újÿ�÷ö?þ"€mÿ�#Ž¥ÿ�`ûOýqZõÈ[èrŸj)ý·ª‚,mNï12s%Çäè1úšÖþÀ—þƒÚ¿ýýÿ�ˆ  š+û_újÿ�÷ö?þ"ì è=«ÿ�ߨÿ�øŠ�ñ}3þN®ÿ�þÚé8¯z¯ž4ëoÚjöÓí÷a†ÿ�ô€ËæŸÜ×öé^Ýýƒ/ýuoûúŸüE�lÑXߨ2ÿ�ÐwVÿ�¿©ÿ�ÄQýƒ/ýuoûúŸüE�:ßþFýKþ¼-?ôeÅk×%o¢J|W¨'öÖ¨±µ;¼ÄÉËÏÁù:qúšÔþÁ—þƒº·ýýOþ"€6h¬oìè;«ßÔÿ�â(þÁ—þƒº·ýýOþ"€oÿ�#~¥ÿ�^Ÿú2âµë’·Ñ%>+ÔûkTXÚÞbdåçàü8ýMj`Ëÿ�AÝ[þþ§ÿ�@4V7ö ¿ôÕ¿ïêñ`Ëÿ�AÝ[þþ§ÿ�@·ÿ�‘¿Rÿ�¯ OýqZõÉ[è’Ÿê ýµª,mNï12róð~Nœ~¦µ?°eÿ� î­ÿ�Sÿ�ˆ  š+û_úêß÷õ?øŠ?°eÿ� î­ÿ�Sÿ�ˆ [ÿ�Èߩׅ§þŒ¸­zä­ôIOŠõþÚÕ6§w˜™9yø?'N?SZŸØ2ÿ�ÐwVÿ�¿©ÿ�ÄPÍýƒ/ýuoûúŸüEØ2ÿ�ÐwVÿ�¿©ÿ�ÄP­ÿ�äoÔ¿ëÂÓÿ�F\V½rVú$§Åz‚mj€‹S»ÌLœ¼ü“§©­Oìè;«ßÔÿ�â(fŠÆþÁ—þƒº·ýýOþ"ìè;«ßÔÿ�â(Öÿ�ò7ê_õáiÿ�£.+^¹+}Sâ½A?¶µ@E©Ýæ&N^~ÉÓÔÖ§ö ¿ôÕ¿ïêñ³Ec`Ëÿ�AÝ[þþ§ÿ�Gö ¿ôÕ¿ïêñ�ëùõ/úð´ÿ�Ñ—¯\•¾‰)ñ^ ŸÛZ "ÆÔîó'/?äéÇêkSû_úêß÷õ?øŠ�Ù¢±¿°eÿ� î­ÿ�Sÿ�ˆ£û_úêß÷õ?øŠ�ñíþN®÷þÚé8¯ kç&ÁÛöš¼´û}Ú°ßþ|Óû€zãÝ+ݰ%ÿ� ö¯ÿ�cÿ�â(fŠÆþÀ—þƒÚ¿ýýÿ�ˆ£û_újÿ�÷ö?þ"€mÿ�#Ž¥ÿ�`ûOýqZõÈ[èrŸj)ý·ª‚,mNï12s%Çäè1úšÖþÀ—þƒÚ¿ýýÿ�ˆ  š+û_újÿ�÷ö?þ"ì è=«ÿ�ߨÿ�øŠ�u·üŽ:—ýƒí?ôeÅk×=¤Ú5—е8šîâä›FßpÀ°ýåÇÅt4�QE�QE�QE�QE�QE�QE�QE�QE‘sÿ�#Ž›ÿ�`û¿ýoZõ‘sÿ�#Ž›ÿ�`û¿ýoZôÉCñH—ÅãÃMkªCu"»[Í5›,W!-垬�œ`ã‚x­Ÿx‚ÇÅ:Κd6w ¤]¥‚;!8ì RG·¥rßkñ5×–úçÀ² [HæŽÖñõ(Õ ’vD!T\–ÀÎ9Ì¿ ô½[@𖉬érÙ]Y-,R,¡äwÊ”fèœ{f€:oùu/ûÚèˊ׬‹oùu/ûÚèˊנoêž1Bºð–¡wQLö 21¹ò×$lè™ãï7— f®ø;Æ^%¼Ö,5 }PÒ¥&‚I„ªw‚ÊC€àgŽÄrsTËâx–}DAá_³lxà[ƒ2¦ U-³h¶–Âäã†4|§ø¦Äß7‰?±™Ä‰ý–%ÌŽs½¤2rOÝ�1Ð �ò3þN®ÿ�þÚé8¯xvØŒØ'hÎdŸ¥x>™ÿ�'Wÿ�m?ôœW¼H\FÆ5VµY° ì ÁÇähŽÑ|o¨j>'Ô4ÿ� Ýé×–ö¿k€=ÂH&ˆ¶ÐI*’OLžéWü/â{~ÿ�X³ŸNKs¦Îùð\ùðNYw|µy^21ÆEeiv?!¿Ô¯/WÂÂYãÌ^Aœ³¸ "ÈÌ8@»þèêsŽNoxG²èz¦¹ªÜ-´êóG+ÚZ1haظख%˜£­�j[ÿ�Èߩׅ§þŒ¸­WmˆÍ‚vŒáFIúVU¿üú—ýxZèËŠÕ¸Œj­ j³`؃ÈÐ# xÖóSñ]÷‡õOÜéÁmöÈžYÒA$;¶‚Jð§=²z7<UÏø¾ø‹\Ò ´’8ô±nDîß넪Ì\p0yÏjDZð÷‹µ+­M<I6‹ki{ ºG˜×†ŒªT ]À¸;ŽG'7<-á=GBñ‰µkÍHÞÁª Q É´J|¨ÊŸ0"*ޏ{uæ€6mÿ�äoÔ¿ëÂÓÿ�F\V«¶ÄfÁ;Fp£$ý+*ßþFýKþ¼-?ôeÅjÈ\FÆ5VµY° ì ÁÇäh‰Óþ Ü>·«éš×‡®t‡°±mE^[„‘d€d•áO¶OCÏ£àßê¾&µžêÿ�D·ÓíÔ¨‚H5H¯lç<Æ01Ç~sYvg Ϋ>¥…ÜÂDküÆIKõaw}ÑÔçœëøcÃϤ]_ßKgac5òÄ%µÓØ´!6dUù›w?(áGS“@mÿ�äoÔ¿ëÂÓÿ�F\V«¶ÄfÁ;Fp£$ý+*ßþFýKþ¼-?ôeÅjÈ\FÆ5VµY° ì ÁÇähÏ[âªéš¦¥eâ]ïGk[u¹€´É)¸F}Šß”1'¦Hl‘ƒ]®©.¯¦EzlRQ•6×"uÇûà`žÇæ¼ö÷ÁÞ7×/ã»Õ›ÃQ=­ì:„e3––H›äŽFaÄa ”u9Ç&ºßøno é×épñ¯õ ¯Þ( 1Àd#÷hHP�ç¿€.Ûÿ�Èߩׅ§þŒ¸­WmˆÍ‚vŒáFIúVU¿üú—ýxZèËŠÕ¸Œj­ j³`؃ÈОÿ�ÂÅ×ÛZ½ÑÀ—ŸÚ±D·öï{Y¡-·s8Põã'Fs]/„uíCÄ:eÅÎ¥£*hn¤¶òП%îPÞÜ8Ïݬ­ÃÇ0êz•檾S< ä›31v”qÈÎ8F~èêsŽNz=K.ƒe§oÞðD’ÏI.ß‹�†ßþFýKþ¼-?ôeÅhÝÎöÖrͼ—ŠJÃ79ìHû+:ßþFýKþ¼-?ôeÅ_¿7‹a9ÓÒ¼Ø|•¸r±–í¸€N>‚€<í¾,Ïie¨ÿ�jxf}>þÆú )ašèPÌ Wy‚áTÉ ¼¸Îk¯ðŸˆ¤ñ.•5ä¶ÐÅs%¸Û/›»<Èßzpp3ƒ\ŒžñÆ¥£\ZêW‰Þö§†È̱ß($ËîÀ° 6\cÑøÂóøOB¸±žXy-ÊA 3El®F"BÀ£p2Iâ€4mÿ�äoÔ¿ëÂÓÿ�F\VÜïmg,ÑÛÉp褬1csžÀdϹ³­ÿ�äoÔ¿ëÂÓÿ�F\Uûóx¶= {͇É[‡+nÛˆãè(·ø¥q¶îÓPðÜÖÌ:¶š–r܆G–|”̪§ I 1Œæº¯ ø<Icw/Ù͵͕ä¶7PïÞXÎ+`n‚^•ÍÙø[Ä:Ž“iâ«?Ü™¦YáROïyÌ®äoÜ>@6‘€È�WGá/ ÃáMì1Ï%ÌòÌ÷W2gtÓ9Ë1É'ÐrIÀ'­�Moÿ�#~¥ÿ�^Ÿú2â´æwŽxâ2¸*cõ<Ve¿üú—ýxZèËŠ»¨ý¼ió,[Ü~è]“Ÿâ+ÏLô 1>$H¿ÚÜi.`ÔmôÛSç™ou4Ý�—`ÆÑË|§çŠé<5âüEaq0‡È¸´º–ÎêûÄsFØ`#¡‚8ÆŸ†—2K}ªæÆÛS›U´Õb³…ØÛG$�¥¶ƒóîr[oŽ+ªð‡‡¥ðõ…÷Ú^&¼Ôu õ ‘ %älíR@$��É8è(É´où:»ßûiÿ�¤â½öwxáwŽ#+ò  ?SÅxÿ�'W{ÿ�m?ôœW»ê_o|ÇKÆ÷ºE„dçøŠóÓ=(•±ñì²ÙxžæóG)€ <¶w"x®�ŒÈÛ„ù”‘Ž2+¥Ðµ1­xMÕD^H½µŠäF[vÍèã8Î3\RxR‡Fñ›Û¦¥âXÄeŽWÖÿ�»(Í¿fI;ÝÏÈ2p8ë]G„4ýGI𦛥ê‰j·6ñÛµ™¤GT@¡²Ê¤Ž˜?Z�–ÛþGKþÁöŸú2â´çwŽxâ2¸*cõ<Ve·üŽ:—ýƒí?ôeÅ]Ô¾Þ4ùŽ–-î?t.‹ÉÏñç¦zPµ›˜µ¸ì|#&¡y¦N°g|¯ù]ÌVVUåFP¤å€õÇGá/GâÏ Xk‘[Il—h[Éä© TóÜdãÈGàïék¯_h‘èPjìñµÅ´³MöxP©ØQ39f%°¸ÏµÚxnÛS´Ðm`Ö‚Þ *ÑéÊËnŠ ¨œÇ^ù ÛÈã©Ø>Óÿ�F\V½d[Èã©Ø>Óÿ�F\V½�QE�QE�QE�QE�QE�QE�QE�QE�sZ¶¯e§xÏM[—‘HÓîOË ¿Y ÇÝû§ü‘W?á*Ò?çµÇþMÿ�ÄÓ®äqÓìwÿ�£-ë^€1¿á*Ò?çµÇþMÿ�ÄÑÿ� V‘ÿ�=®?ðoþ&¶h BßÄÚPñf£!š}­cj£ý^¢KŒñ·ÜV·ü%ZGüö¸ÿ�ÀI¿øšu·üŽ:—ýƒí?ôeÅkÐ7ü%ZGüö¸ÿ�ÀI¿øš?á*Ò?çµÇþMÿ�ÄÖÍòíß~ÐZ—ˆ®¢º–É—lQbC˜BƒµÊ÷õí]÷ü4W„è®߈¿øív7 ðÖ­ã}RmCC±º‘¬ídf–ıyÁ?RGà*ßü+Я¥à2Ðÿ� áúkŸ÷â/þ;Gü4W„è®߈¿øíwŸð­üÿ�B¾•ÿ�€ËGü+Я¥à2КÅñû©¯]ß?Yò¦¶‚·)9ýçOÞÖ¯ÃExGþÚçýø‹ÿ�Ž×QÃß·Šoà>Ó )elêŸg\gœõ!Wò©ÿ� ßÁ_ô+é_ø ´Áÿ�ÃExGþÚçýø‹ÿ�ŽÑÿ� áúkŸ÷â/þ;]çü+Я¥à2Ñÿ� ßÁ_ô+é_ø ´æ±|~ðªk×wÇOÖ|©­ …@†-À£JNyÓ÷ƒõ«ßðÑ^ÿ� v¹ÿ�~"ÿ�ãµÔAð÷Áíâ›ø†ôà Y[:§Ù×™çýHUü…j·ðWý úWþ-�pðÑ^ÿ� v¹ÿ�~"ÿ�ã´ÃExGþÚçýø‹ÿ�Ž×yÿ� ßÁ_ô+é_ø ´·ðWý úWþ-�y¬_¼*šõÝñÓõŸ*kh!P!‹p(Ò“ŸÞtýàýj÷ü4W„è®߈¿øíu|=ð{x¦þá½0–VΩöuÀfyÁ?R!ZŸð­üÿ�B¾•ÿ�€Ë@ü4W„è®߈¿øíðÑ^ÿ� v¹ÿ�~"ÿ�ãµÞ·ðWý úWþ-ð­üÿ�B¾•ÿ�€Ë@kÇï ¦½w|týgÊšÚTbÜ 4¤ç÷?x?Z½ÿ� áúkŸ÷â/þ;]D|Þ)¿€øoL0¥•³ª}pžpOÔ…_ÈV§ü+Я¥à2Ðÿ� áúkŸ÷â/þ;Gü4W„è®߈¿øíwŸð­üÿ�B¾•ÿ�€ËGü+Я¥à2КÅñû©¯]ß?Yò¦¶‚·)9ýçOÞÖ¯ÃExGþÚçýø‹ÿ�Ž×QÃß·Šoà>Ó )elêŸg\gœõ!Wò©ÿ� ßÁ_ô+é_ø ´Áÿ�ÃExGþÚçýø‹ÿ�ŽÑÿ� áúkŸ÷â/þ;]çü+Я¥à2Ñÿ� ßÁ_ô+é_ø ´æ±|~ðªk×wÇOÖ|©­ …@†-À£JNyÓ÷ƒõ«ßðÑ^ÿ� v¹ÿ�~"ÿ�ãµÔAð÷Áíâ›ø†ôà Y[:§Ù×™çýHUü…j·ðWý úWþ-�pðÑ^ÿ� v¹ÿ�~"ÿ�ã´ÃExGþÚçýø‹ÿ�Ž×yÿ� ßÁ_ô+é_ø ´·ðWý úWþ-�y¬_¼*šõÝñÓõŸ*kh!P!‹p(Ò“ŸÞtýàýj÷ü4W„è®߈¿øíu|=ð{x¦þá½0–VΩöuÀfyÁ?R!ZŸð­üÿ�B¾•ÿ�€Ë@ü4W„è®߈¿øíðÑ^ÿ� v¹ÿ�~"ÿ�ãµÞ·ðWý úWþ-ð­üÿ�B¾•ÿ�€Ë@àÿ�iÚÇí'ˆb[ˆ¬®B«$Y~ço*›»ŽÙ¯ ÿ�á*Ò?çµÇþMÿ�ÄÖ6‰áèÞ8¾›MѬíeŠÊÝãh£�¡vXL…�ý+²  oøJ´ùíqÿ�€“ñ4ÂU¤Ïkü›ÿ�‰­š(·ñ6”<Y¨ÈfŸkXÚ¨ÿ�E—¨’ã<m÷­ÿ� V‘ÿ�=®?ðoþ&mÿ�#Ž¥ÿ�`ûOýqZôÿ� V‘ÿ�=®?ðoþ&øJ´ùíqÿ�€“ñ5³E�sÚMý¾£â­NkfvAch¤´l‡>eÇf�÷®†²-¿äqÔ¿ìiÿ�£.+^€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€8 OÅš¤Ÿ<)§éÒÅ‘©µê³´aÇ•àøMÇŒœg8#: 5ûÿ�|?ÓuMÑ®îZbå*€&u�@�‡4]|9ðìšÝ†±chšUí’Î#}>cÜÒ¦Íî ̽W<Ô•s·ðfŒºM–¡}se&îÌgÊÉ,ÁJ¢žI'œûb€,ÛÈã©Ø>Óÿ�F\V½d[Èã©Ø>Óÿ�F\V½�yæ·â½noxcMÑg·ƒNÕ>Ú«,±oóŒPå_±Øä`ÛzàŠÐð$¾*ûf½iâ+øµ+k[•ŠÊý-Ö;‚dWŒ)Â÷ä0ÉÅ?Pøiáë½VËT±ƒûòÐL].a.d]¥›(rÊ2Tö$š»áoEáo´Öµ­LÌAÕ.üï(.xNÐsÏÐzPËoùu/ûÚèËŠÔ–Xà…æ™Ö8£RÎìpI'°¬»oùu/ûÚèËŠÔ–(î!xf$ŠE*èê ²ž õÂZx—ZÔ~(6Œ²-®.‚o­ãxráŒáß8 ííÈÆîFEIà-{QÕ5ïX_j3]E§]GÝÛ¬W1)RI}ŠªTv‘É�“ÔU³ðÛ@‡Z›UÒÖ]â[±cLXàT`1@OõœÏM¼b¶4OÚè’ÞܤÓÝ__:½ÕÝÉS$ÅWjçhU�€��[Èã©Ø>Óÿ�F\V¤²Ç/4αÅ–wc€ rI=…eÛÈã©Ø>Óÿ�F\V¤±Gq Ã4i$R)WGPU”ðA¨ ?߯ķ²¼o³è¿Ø'PŠïÀ ãvâ: þðÍ\ð—ˆ5SÇ^.Ó53A§-‘··Eºócg`[«™íÇf/†þƒÄjÑi6‘‰l¾Å%’[D-w‡ÞcÛËäœôŠ· ø/FðÖµ«jzU¸¶mHD$·!ˆF¤-UFÜä“ÉÉæ€-[Èã©Ø>Óÿ�F\V¤²Ç/4αÅ–wc€ rI=…eÛÈã©Ø>Óÿ�F\V¤±Gq Ã4i$R)WGPU”ðA¨ <“ÅúëøþòÂÙ É©ZY¬@Ë$žvÄ-œHw Üò8¹ðçPÕ¯´ãÖuûëûÈ0Ö—ºTv2Zä1„$0nÇ$|µlü6Ð!ÖgÕtÄ—H¸šÀØãLÛªáüÅÚ¼IÀéŽ1[šNŒšY’G¼º¾º•9.®Š™;WåU˜ôêÄœæ€#¶ÿ�‘ÇRÿ�°}§þŒ¸­IeŽ^icŠ5,îÇ@ä’{ ˶ÿ�‘ÇRÿ�°}§þŒ¸­IbŽâ†hÒH¤R®Ž «)à‚Q@G≺æ‹ãË}6ÞÕ^-GMŒé¶NYî%¸òÑä'|ªÇnGP#¿ðv½ˆ4yfIÚáín–ê$ŽH¦LnB©1ŸSש¬k߄޺ÖÓV·µm6â(R8WOHáH$,Ê¡?Öd“‘Ž1]& YøvÊk{F–F¸¸’êâiˆ/4ÎrÎØ�dû�8àPm¿äqÔ¿ìiÿ�£.+RYc‚šgXâK;±ÀP9$žÂ²í¿äqÔ¿ìiÿ�£.+RX£¸…áš4’)«£¨*Êx ƒÔP™êß‹u߈c@Ò5XôKI´_í¤{5šEx@Å\}âÝ$`7<Šé¼.±qáén5`ê¯%Ü¢ÞäÛ$¡Vاb*Xg' )°ü<Ð,µéõ2ßû2âm=´ý–1Çh·„ÿ�YÐn9Šèôû4Í:ÖÂÕvÛÛD°Æ¾Š ú �¡mÿ�#Ž¥ÿ�`ûOýqZ·iörÝ\6Ø£8$ô�¤“€�ä’gÛÈã©Ø>Óÿ�F\V…å•®£i%¥í´76Ò <3Æg<©àБk^7ñ|§Š¡ŠH M6çMQk–(fGi[Æ$˜€‘p={?†ºí爼3=õåúÞâúh¡vˆG2D¤Y•@Q'r�Ç"«ËðŸÃFööîÕ'°’ææÚê1f#me€„ÀÎâHmÀžk¢ð÷‡l¼5e=½›K#\Ü=ÕÄÓ0/4Ï÷°�ÉÀà�8é@·üŽ:—ýƒí?ôeÅh^ÞA§ÙËupÛbŒdàd“Ð�:’N�’HŸmÿ�#Ž¥ÿ�`ûOýqZ–Vº¤–—¶ÐÜÛH0ðÏtaœò§ƒ@G«xûÄÖz÷ˆm'•lí-oô»w’8‘Οo:;Ë!%HfQ’ ƒÐzö¿<CwâR{¹ÒëìZÅ”7ˆªÔHFÙ>_—‡Ž*]7ÀZF‹©j÷º;M§6¨"Åh±GB5+ˆÀO—9ÉïžA»¥éVZ.›Ÿ§[¬°Œ".O¹$žI'$“É&€*[Èã©Ø>Óÿ�F\U½Vâ{M"öâÖžæ(âŠ5Ë;€p�õ'RÛþGKþÁöŸú2â®êV_ÚZtöj¹µóWoŸk&ÉSÝ[€<–ÏÅÞ ±ÓÖÖóÄW×Z¥î¯e¦ïtx¬åÓÄʼn“hܯ¹Tà’FGzî¼ ®Ýëz~« ôžuÆ—ªÜé­9@¦a ®@àÎ02 K7‚¬®ìZÛÛ뻲ðÈš„¬ž|m -R¨å%ÝçqÎsZz‡i iíijÒ?™+Ï4ÓdšWmÌì@$žÀA@[Èã©Ø>Óÿ�F\U½Vâ{M"öâÖžæ(âŠ5Ë;€p�õ'RÛþGKþÁöŸú2â®êV_ÚZtöj¹µóWoŸk&ÉSÝ[€<ãBñ¿má/ß^ø‚êûTÓ-qg©héföÅcwToœ>8;ˆùMw^¾¸Õ<¢joæ\ÝiðO3…s´jÌp8“Ò©Ïàø.ô=GM¹ÕueÔ-ÖÖâùÚ/=¡>æÀ0Î>î~v9Ï5ÃÚ*ø{D¶Ò¢½º»‚Ùp½ÖÂèŠ�UÊ*‚�Æ}è–ßò8ê_ö´ÿ�Ñ—oU¸žÓH½¸µç¹Šx¢rÎà�=IÅT¶ÿ�‘ÇRÿ�°}§þŒ¸«º•—ö–=ŸÚ®m|ÕÛçÚɲT÷VÁÁ 3Ðî¼]©èšÌcÆÓA©Zìyµ4(­ä³]¬ÃäRUƒãïå€ p 5Üx.ç[¼ðv™qâ8„Z´‘níÇ'nGbWi#±&¨ßø5ž$×¢Ìb[Ø.#ŽyV<ìBËAf<’ÄœÖÞ…£¦…¤C§¥åíï–X››Ù|Ù¤%‰Ë6zãè�Cmÿ�#Ž¥ÿ�`ûOýqZõ‘mÿ�#Ž¥ÿ�`ûOýqZô�QE�QE�QE�QE�QE�QE�QE�QEÍê±joã-7ì7vìû®'µiå¤é"ÿ�³ôÁëž.ý›ÄôÒ¿ð['ÿ�¢çþG7þÁ÷ú2Þµè#ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çë^Š�ä­íüAÿ� f¢§¦yŸaµËgI‚<ËŒ yü½ûŽ˜ç[ìÞ#ÿ� ®•ÿ�‚Ù?øýßò8ê_ö´ÿ�Ñ—¯@fñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?ZôP%ooâøK55=3Ìû ®[û:Læ\`cÏàõïÜtÇ:ßfñýt¯üÉÿ�Çè¶ÿ�‘ÇRÿ�°}§þŒ¸­z�Èû7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú×¢€9+{ÂY¨©éžgØmrßÙÒ`2ã¯~ã¦9Öû7ˆÿ�è+¥à¶Oþ?E·üŽ:—ýƒí?ôeÅkÐGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�Ö½É[ÛøƒþÍD OLó>Ãk–þΓy—óø={÷1ηټGÿ�A]+ÿ�²ñú-¿äqÔ¿ìiÿ�£.+^€2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè JÞßÄð–j jzg™ö\·öt˜#̸ÀÇŸÁë߸éŽu¾Íâ?ú é_ø-“ÿ�Ñmÿ�#Ž¥ÿ�`ûOýqZô‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãõ¯E�rVöþ ÿ�„³QSÓ<ϰÚ忳¤ÁeÆ<þ^ýÇLs­öoÿ�ÐWJÿ�ÁlŸü~‹oùu/ûÚèˊנ ³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�­z(’··ñü%šˆž™æ}†×-ý&ó.01çðz÷î:co³xþ‚ºWþ dÿ�ãô[Èã©Ø>Óÿ�F\V½�d}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øýkÑ@•½¿ˆ?á,Ô@ÔôÏ3ì6¹oìé0G™q?ƒ×¿qÓë}›ÄôÒ¿ð['ÿ�¢ÛþGKþÁöŸú2âµè#ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çë^Š�ä­íüAÿ� f¢§¦yŸaµËgI‚<ËŒ yü½ûŽ˜ç[ìÞ#ÿ� ®•ÿ�‚Ù?øýßò8ê_ö´ÿ�Ñ—¯@fñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?ZôP%ooâøK55=3Ìû ®[û:Læ\`cÏàõïÜtÇ:ßfñýt¯üÉÿ�Çè¶ÿ�‘ÇRÿ�°}§þŒ¸­z�Èû7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú×¢€9+{ÂY¨©éžgØmrßÙÒ`2ã¯~ã¦9Öû7ˆÿ�è+¥à¶Oþ?E·üŽ:—ýƒí?ôeÅkÐGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�Ö½ÏéI{е1}qòý†Ó %Ç™qÆ ·=yÏá]d[Èã©Ø>Óÿ�F\V½�QE�QE�QE�QE�QE�QE�QE�QE�d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ôúõìúg‡u;ûh¼Û‹kIfŠ?ﲡ ~$T?ò8é¿ö»ÿ�Ñ–õ¯@UðÛV¾›SNÕ ²ßè±k ªG¹ec`Âí¸ãÚ�^‚¶> ÜIuð£Gšiši™® Ží¹‹ä9$óžk­ƒAÑímî ·Òla†ìsvè«6Fð ãš]3CÒtU‘t­.ÊÁe È-mÒ ätÎÐ3ÔÐ{oùu/ûÚèËŠŸ^½ŸLðî§m›qmi,ÑGýöT$ÄŠ‚ÛþGKþÁöŸú2âµèÈü©ÜÝÎÚ^µ47QУÖ&ÕâfŽTY ¾ã·8Û´�¼�k[á~™¡éwÞ!Ö ºÓ®'ŽH,¡»Õ�#s6N ¶ãƒÎsÈ8í#ðմz6ž–÷g7-ª˜ÿ�¶1†üiúf…¤h¢Q¥iV6\y‚ÖÝ"ߌã;@Î2:�¯mÿ�#Ž¥ÿ�`ûOýqSë׳éžÔïí¢ón-­%š(ÿ�¾Ê„ø‘P[Èã©Ø>Óÿ�F\V½�y'€u©Ð±×¦´¹[ý-b][sFëæ¸S ŽXƒÀ ´azV—Ã[_°ø»Ç¿cŠØGy fßè¸1’<µÇÊØ ¿»˜®Þ?hÛ\ÛE£ééÑÍÄKlf>®1†üjÕŽŸe¦Z­­…¥½¥ºýØ­ã ú�1@-¿äqÔ¿ìiÿ�£.*}zö}3úý´^mŵ¤³E÷ÙP?* oùu/ûÚèˊנð_‰õ=<²^Z®±ww¢C¬‹Ûhdy‹Já|™�Üp§< T8\֟ë³uñ#ÇlÓÞLJéÿ�=Õ¼¶|§Ýò8âptÈæ½ ÃHÓt³1ÓôûKC3o—ìð¬{ÛÕ°OÖ¤†ÂÎÞòæòH#ººÛö‰’0]£ ¹‡-ÀÏJ�¡mÿ�#Ž¥ÿ�`ûOýqSë׳éžÔïí¢ón-­%š(ÿ�¾Ê„ø‘P[Èã©Ø>Óÿ�F\V½�xß„5­E­îtûë½=îµ.¬5¹w)‰æ;<¹X±�+t ´az]Ã-×ÃwZÆœš=…Ð[y^ëO¹–Xnc`û1æ32†ÈÏñÎEv1xE‚ÞæÞOŽ £›ˆÒÙÌÛ�a¿±a¦ØéVÂÛN²¶³·"+x–5Ï®@­¿äqÔ¿ìiÿ�£.*}zö}3úý´^mŵ¤³E÷ÙP?* oùu/ûÚèˊנž?á*ñ ¥¾“£‹˜ïÄPÙ\ͯFæÛ%Ì›]–ÀÁJ€�kÖ>êrê%ôØÛZ˧j3Ø3Z«ç1<ÅÜIç¦I' ó[±ø{D†ÚæÚ-OH.Žn"[d 1õqŒ7ãW-,íl-cµ³¶†ÚÞ1„ŠŠ=� �ζÿ�‘ÇRÿ�°}§þŒ¸©õëÙôÏêwöÑy·Ö’ÍßeB@üH¨-¿äqÔ¿ìiÿ�£.+^€<SÃÃâpš‹JÚ÷G‡^žþ7xÜîle`Ýò•AÇZîþhVZ'„¬,þÉüÒ^¤%™ŠFç÷`–$çË œ÷Ítú‘i Ô6ÚUŒ1]çí º*Í‘ƒ¼ódzÕäEB¢€T`è(*ÛþGKþÁöŸú2â§×¯gÓ<;©ßÛEæÜ[ZK4Qÿ�}• ñ" ¶ÿ�‘ÇRÿ�°}§þŒ¸­z�ù»PÕo®tÝ+HÔn`º¾Õ¢±Õ!¾Ìå~Ëu—Ç•œð»@>\ñ^¡ð}‡ü"Ú”FÝ­§‡W¹Š{u}ÐÅ #)¤@`ëšëWÃZ [\[.‰¦‹{–Ý<BÕ6ÊÞ¬1†?Z»igk§ÚÇkem µ¼c ({À  ûoùu/ûÚèËŠÍø­_x{áö±ªiƒý2‡–ØÎÍ̪[ì†'ð­+oùu/ûÚèËŠÕ’4–7ŽDWÁVV PG¥�x¼¶úÕþŸªxvkKá êV3ßOùcVµ(et‘¥b r nm¼öWað£íMákÉäŠX4ûJâm. zÅhÌ<µ'ïc`Œq]Tmd,­ô«­ù‚íÑP7÷¶ŒûÖ†00("ÛþGKþÁöŸú2â­júU®¹¤Üi—ÁÚÖåvJ¨åK.y\Ž@=;«mÿ�#Ž¥ÿ�`ûOýqZôáÒxwNÑ4Ÿ;B°Ú6«â‹;+„2;‡³Ìm¸¹'kK»Ø«Æ»¯†2Ntn݆,­uËË}<•êÿ�(_öAܰ®´é–MþÍ66ß`Ù³ìÞRù[}6ãöÅKmkoemµ¤AcjEU€�  Ûoùu/ûÚèËŠµ«éVºæ“q¦_k[•Ù*£•,¹år9�ô8ìj­·üŽ:—ýƒí?ôeÅkÐ’ØxwIðÿ�€|yªhï§ÛÏ ÊÚ4sÉ»l2 [w2y„sŒm®ëÀ¿ávïø•Ûdç<ùKšÓ—GÓ'Òÿ�²åÓläӰ옰@ÙŒp@=:Šv¥éúE·Ù´Ë [+rż«hV5Üzœ(< �§mÿ�#Ž¥ÿ�`ûOýqVµ}*×\Òn4Ëàíkr»%Tr¥—<®G ‡U¶ÿ�‘ÇRÿ�°}§þŒ¸­z�òÿ� øCÂZ~â[“Ó¼?ytboô¹<ü„´…·mi<ÃÁAç_áVŸc¥øZâ×OÕ¢Ô-¾Û,‘¬WuµFÁXw© ¸'Ø×U>‡¤]i‰¦ÜivRØ&6ZÉn㦌ʤӴ­;G¶6Úe…­Œ‹˜­¡X”±À' �ÏŸj�§mÿ�#Ž¥ÿ�`ûOýqZõ‘mÿ�#Ž¥ÿ�`ûOýqZô�QE�QE�QE�QE�QE�QE�QE�QE™ªèVÚ´öóË=äÀ®ˆö·/ ÚåKTŒŒ¢þUKþoú ëŸø4›ÿ�Š®‚Š�çÿ�á¶ÿ� ®¹ÿ�ƒI¿øª?á¶ÿ� ®¹ÿ�ƒI¿øªè( a<jš„×ÚÚÞd‰##ûJ\ü¥Ï]Ù?§oÄÔÿ�ðˆÛÐW\ÿ�Á¤ßüUtP?ÿ�·ýuÏüMÿ�ÅQÿ�·ýuÏüMÿ�ÅWAE�s à‹TÔ&»þÖÖó$IÚRçå.zîÉûý;~&§ÿ�„FÛþ‚ºçþ &ÿ�â« ¢€9ÿ�øDm¿è+®àÒoþ*øDm¿è+®àÒoþ*º (˜OZ¦¡5ßö¶·™"HÈþÒ—?)s×vOßéÛñ5?ü"6ßô×?ði7ÿ�]Ïÿ�Â#mÿ�A]sÿ�“ñTÂ#mÿ�A]sÿ�“ñUÐQ@Âx"Õ5 ®ÿ�µµ¼ÉFGö”¹ùKž»²~ÿ�N߉©ÿ�á¶ÿ� ®¹ÿ�ƒI¿øªè( þoú ëŸø4›ÿ�Š£þoú ëŸø4›ÿ�Š®‚Š�æÁ©¨Mwý­­æH’2?´¥ÏÊ\õÝ“÷úvüMOÿ�·ýuÏüMÿ�ÅWAE�sÿ�ðˆÛÐW\ÿ�Á¤ßüUðˆÛÐW\ÿ�Á¤ßüUtP0žµMBk¿ímo2D‘‘ý¥.~Rç®ìŸ¿Ó·âjøDm¿è+®àÒoþ*º (Ÿÿ�„FÛþ‚ºçþ &ÿ�â¨ÿ�„FÛþ‚ºçþ &ÿ�â« ¢€9„ðEªj]ÿ�kky’$Œí)sò—=wdýþ¿Sÿ�Â#mÿ�A]sÿ�“ñUÐQ@ÿ�ü"6ßô×?ði7ÿ�Gü"6ßô×?ði7ÿ�]Ì'‚-SPšïû[[Ì‘$diKŸ”¹ë»'ïôíøšŸþoú ëŸø4›ÿ�Š®‚Š�çÿ�á¶ÿ� ®¹ÿ�ƒI¿øª?á¶ÿ� ®¹ÿ�ƒI¿øªè( a<jš„×ÚÚÞd‰##ûJ\ü¥Ï]Ù?§oÄÔÿ�ðˆÛÐW\ÿ�Á¤ßüUtP?ÿ�·ýuÏüMÿ�ÅQÿ�·ýuÏüMÿ�ÅWAE�s à‹TÔ&»þÖÖó$IÚRçå.zîÉûý;~&§ÿ�„FÛþ‚ºçþ &ÿ�â« ¢€9ÿ�øDm¿è+®àÒoþ*øDm¿è+®àÒoþ*º (˜OZ¦¡5ßö¶·™"HÈþÒ—?)s×vOßéÛñ5?ü"6ßô×?ði7ÿ�]Ïÿ�Â#mÿ�A]sÿ�“ñTÂ#mÿ�A]sÿ�“ñUÐQ@šV…m¤Ïq<SÞO,êˆïuró¨X¨‰ÀùÛó­:( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ�����������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform20.jpg������������������������������������������0000664�0000000�0000000�00000052747�15030617045�0023367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *µä·q,_d¶Žwy°’S¢à’Ù Þ˜Æ;ö¯?Oв‡1xÎãBÙ̧ditÎC‰¼­¬DXP@,§à‘I¢¸¨þ#Y[ø›_ѵh™Ò¤"’&{†¹FÒdF©¸mEÉê<àf»'ŠêÞ+ˆ$Y!•ÆêrHÈ ú@QE�QE�QXÞ%Ö.ô-"ïR‚Æ;¨­-fº˜<æ.#]ÁF²O>˜Åsíñ [}?ÃW—z@5ù­"·òî ×'sy`^>_â ðpÜÑ\6ñ7L»þЋWDÓnlõ)ì hïpˆ iKs¹€Žy®æ€ (¢€ (¢€ +ĺÅÞ…¤]êPXÇu¥¬×SœÅÄk¸(¶IçÓ®rãâÕ®‘áëÙtXÃkÒZÇh¢éÊ:çþV©ÀÆ9#¡�¼¢¸¯ |KÒ<K¤iw3âÆöü-AiV3æ: i…RþYÚôÅv´�QE�QE�Q\·Ž<Wwàí÷Y].;ËKHãfÝtbfg&Ð67L‚Nk3Å?î¼-w ”ú,rÝKÝÊtëG^i!ü¬ 0ÛØØƒ@åÍxwÇGˆ"ÓÒ9„w×vÑÎmÀfTfd1‰6…gU`Jƒœs]-�QE�QE�W+â^ønëMO옧ƒPÕ-ôØd7et åvë“í\ÿ�о+Oák‹ËYtšêÊÅoníl‹µ§ŒbÃ[<u#¨"€=*ŠÉÓ|K¤j÷óÙXÞ §„1a岫mŒQˆÀa´•$Á浨�¢Š(�¢Š(�¢¹-SÅºŽ›â­BþÇ·wÕÞímåkÒ»D »,g½‰ÇéX·?^ßÄ«£ÿ�aòº•Ž›;½Ë#G%ʳd)æ ±†sópG€=ŠÉÓ|K¤j÷óÙXÞ §„1a岫mŒQˆÀa´•$Á浨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(+¥¸{YVÖXâ¸*DrK‘U» ©#Û#ë^x¿ ¯?áT·_€Àdn… ÍóJ•óy;ûäqÆ;פV‹õÛxvæúÊÓí—ˆŒÐÛçö©vü•XûàôÉjŸ WUñv£âKNÒk››˜eŠÞçN[ªGG²D/ûÌ©åpFG·¡ÙÛ%•½¬k¤1¬j±F@�*ŽqÀ*-'TµÖô‹MNÉ÷Û]D²Æ}ˆÎ¸è}êå�QE�QE�ex—J¸×|7¨i6÷qÚµìnÓI ”*8*ØPËÎ Áϱé\äÞ¼¹Ð¼%¥O¬ÀSÃ×–÷;ÒÈ©¸ ¨¼Èv¹Éç'œ•ÜW ãok:Š|?¥éòXGmªGrd–{)n# ÈXÝI1Ž0O4‘kðr(u«^çP°¿¹º½¸¹ž;Í)e„¬ÅIUFsµ”©!òzàƒßÔk ÁšÕ爼!¦ê÷öðAsuwŽ  ä€Aõ�gŒãµnÐEPEPW‰t«wÃz†“ow«^Àöí4™B£‚­… ¼àœð{•ÌÞxQ»ðß…´“®[+x~ê ”˜X1yl`¯›ÇÏ''¦:Ww\ƒø‡WÕ|e«hØm×HŠºžò'—ÌyT²¢ª²àm¶OÐЄ¾[xVîÆà^Ù_¼ ¢V»ÓUÛrÊί &&ù°~öpôê‚Å®›O¶kä‰/ JgX‰($ÀÜžqœâ§ Š( Š( kÇ~¸ñŸ…®4(µìb¹d3JÖÆbUX8 7®TrsÆxïY>.ð£âë2âmrÚÞ[;+«WÙ`Ì$kˆŒNÀ~P8=Íwuäãâ7‰,tw]Ô"Ò§Ó4]mô»˜míäŽV]ÍV20Î\|»�ÚðwÃoêÜÅqew²4ýìÚzý¡dؤ۲¨ØÎÌdóÉÏ}E�QE�QEËxÏ·Þ)m캭½Šé—ñê $³3–<í.“‘ÔñȬü/»ñޝ{zÚô6‹u¦Ç§År¨³,Û³æŽK¯§Czôzó_ øÇÄšÖµwe-ÖµÖ§Ó¼•Ó¦ÌÑC‚î$óŠ«m'�ƒÎ;t�Üð‡-¼#yw%»YJ’´†)~©rªï¼£ÌdPGÝp1×QE�QE�QE�rºï…/õoè:ü:µµºhþo—nöM!“Í]²eüÅþ1Ç“ž•‡ð¾çPñœúüšìJ’ê¶Z‘·[‘öeeDßæwV98ëÎ;W¡Ì%0H dIJŒêYCc‚@##=²>µçŸ|_â?Ùéz…ÔúJÃ:É%Õ¬VS#ƤJÈÒ²±.ƒ#o4±á[xFòîKv²•%i Rý…RåUßyG˜È Ž8ºàc®¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+›ñ‡4cX±ŸWάkme4M˜Uœ¸áPóœaqŽH=%r!×cÓõí:+åòŽٞ¼™ã6³wpÿ�.~òz€4|#áKoè£I²½½¹µYãlŒcÜrUvªàg'¤ÖõCh÷YÂ÷Q,W €É¶àŽ@=ð{ÔÔ�QE�QE�W+âo Ùë Ñu)õKO¾µ2ÁcöO/¤‹Ÿž6ä¢Os]UqÞ!×ÖÇX°Žî"$µ¾ó!ZáÚuM¿íÊc×¢€7¼= ØøcBµÑ´Ôt´¶R;nnX±$ú’IükN¢¶3µ¬&åQn )•c$¨lr=FjZ�(¢Š�(¢Š�+šÔ|?`þ(Kû}JûLÕo!òäkB¸¹Ž>páÑ—#wa¹à×K\N¯¯µ§Šm’{ô›TœE 䛑&ÁÓÛ-•=pTöæ€;8b‘v¡C;cŽäžI§Ó"ó<”ó¶‰vû:g¾3ÚŸ@Q@Q@pvÿ�ô[[ù,®u}Vò;ëÉ5yl'hü©¦ ›¶F¤€Å>RØö8®ò¸»ÿ�5¿Šâ‰íÁÔ ¶º†`×–ßÉ`ºGSÛköZ�í(¤]ÛFìnÇ8éšZ�(¢Š�(¢Š�+…µð–›{=”>'×Pê7Rê“@ �JùA!Ü!Ü îP@aÁã½wUÄÞø…ãñM¤^BQ!»´Ž×wúÇi-Ú6Ï÷J|äó€¬9*h¶¢Š(�¢Š(�¢Š(“#K‘¬¯2•&7!#¨È##Ü\ß„t-7Á¶ñøbËR¼¹DÓÃÐBbœîÃ".AbN '𮞼ý5éÛÇë·_í±ý‰­Á8yÛ‹îþç—ûÁß§èQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�GWÔN—§›•·{†ób‰bF Y¤‘Prxê¯VG‰äý„,¿ô¦*�oö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñU³Y:çˆì<>ÚzßyÛµ Ȭ­Äq–̲ ž€u'ž€õ jêÿ�ô.\àT?üUfj— u}¥>¡ái$¸Šäµ‘kˆŽ%òØöoî«xÈÀ®²²5Ÿù xþÂÿ�¤Óеuú.?ð*þ*í]_þ…Ëü ‡ÿ�Š­šç<]ãKY¥Íí–¥uåþÅle§÷Üä\ñÉç¶y  _Úº¿ý —øÿ�\猾#Ïà­&;íC×'ΓʉEÄxfÆpJäŽí]¥…õ¾§§ZßÚ>ûk¨’hŸÜŒB+Çÿ�iù´Ÿûí6 ®×Æ~0½³†ê‡îÐÍÉb•# àŒŽ Mÿ� W¿èž·þ`ÿ� Ùð¯üŠ'ýxAÿ�¢Öø‚?é³_Ëa}w ´Ó}•ùq¯V%™AÇ $ûP7ü%^6ÿ�¢zßø9ƒü+3Q×<C>©¤Üß|7yî,\ëå\ÆÅº }ÕcÏø®ëO½‡SÓmoí÷.aI£Ü»NÖ�ŒŽÇ¨ëòÐ?ëýÿ�ôšz�Æÿ�„«ÆßôO[ÿ�0…ð•xÛþ‰ëàæð®Â¨k:Åžƒ¤Üêwò··°2Ç�œÜðhžÿ�„«ÆßôO[ÿ�0…dx‡âˆ<+aî¯àY`‚ID(Ë©Ç!.AlaTžŠ*îôFcG±ÔíÕÖ Ëxî#Y� Ô0Œàú×—~Ñ_òO¬?ì+þŠ–€:=;Ç>-Õtë{û?�;Û\F$ޝ ’§§?µÿ� W¿èž·þ`ÿ� ³ðçþI¿‡ëÂ/ýU¿xš? Á+UÔ䙈X4Ëo:@�åˆÈÂŒŸR(/þ¯Ñ=oüÁþ—}­ø‚MkK¿¼øo›øšHl¤:ÌY ÈK>ê7^œã­w¶7&öÂÞèÛÏnfdògP²G‘¬8aÜf³õù hõþÿ�úM=�cÂUãoú'­ÿ�ƒ˜?ÂøJ¼mÿ�Dõ¿ðsøWaYÚ–·g¥ÜZZÊ^[ËÆ+om î’LrÄ€Éb@´ÿ� W¿èž·þ`ÿ� ÉñÄïø_OKí_À²Anòˆ•—TŽBX‚@©=þUèˆÅ‘X©BFJ¶2=Ž8¯(ý¡¿äÚÿ�ØJ?ý%�ni>?ñV¹¥Á©iþ’KYÁ1»jÑ! :0rZ»ÿ� W¿èž·þ`ÿ� ‡áü’½þ¸¿þŒjŸÄm¼7¨Éi&¯ß,a<Ë›1$([¢—,�<ÌPÂUãoú'­ÿ�ƒ˜?³.õßsOÔn~íÖÖS«ÂOÌ¥ØtÇÝFäôä¼ú9�ãƲuù hõþÿ�úM=�cÂUãoú'­ÿ�ƒ˜?ÂøJ¼mÿ�Dõ¿ðsøWa\†·ñGÐõ+û)íï§þÎò~Ý4©K4àX3g#î†Æy ÿ�„«ÆßôO[ÿ�0…exƒâoˆ¼/§­ö¯àI ·iJ˪G!,A aTž€þUèµå´'ü“˜ì#þ€ô±£|BñF¿¤Á©éÞ’[I÷ynÚ¬HNÖ*x`äÕþ¯Ñ=oüÁþGà¯ü’=þÛÿ�èù+[Vñî‘£j—VWÝ:YõÌh¦+O8â?3,ŸöAÇ|PøJ¼mÿ�Dõ¿ðsøVeιâõë=N†ÀjNgo7öÄ$• ÈW¦:#ŸqߟC¬cþBšý¿þ“O@ßð•xÛþ‰ëàæð£þ¯Ñ=oüÁþ×;ˆÐ¹ @ùT“ùkœƒÇZ=×…-¼Eoö‰m.çû=¬a�–y ¦5UR@Ë0ã$qÉÇ4Sþ¯Ñ=oüÁþ™®üIñ†ôÿ�·j¾x-÷l 5Xœ“‚ØÂ©=þUØèšÝ®¿`×V¢Dòåx&†PÃ*¬Œ# ŽÄzá~:ÿ�É>õõÿ�´¤ ƒÂÞ;¹ñn‡«§øvëÉs´†¸Œa†2H$s×Ö×ö®¯ÿ�BåÇþCÿ�ÅW ðÄ #v @»˜ªXõ‡5ÚXxËHÔ|Þ*…çR¤ÒhŽí‘³+6Ñ“Ÿ§\PßÚº¿ý —øÿ�YRÊÖÞ#ƒW“î§sØ#—íQÊ7K·°8Br}1žÕÑéZŒ:Æe©Û^[Çqq† êdø5OYÿ�§‡ÿ�ì ÿ�úM=�7ûWWÿ�¡rãÿ�¡ÿ�â¨þÕÕÿ�è\¸ÿ�À¨øª×w¡v @;T±ü‡5ÏZxÓLÔ< ¾&²†úæÊBâ ·/4Å]“ ƒ“’¤ŽœrqÎ�-jêÿ�ô.\àT?üU$zÝâßÙÛ^hÓÛ-Ü­JfÀ`Œü…9膙á/éÞ3ÑßRÓRâ4Žf‚X®cÙ$r(« ‘œÐ÷©µŸù xþÂÿ�¤ÓнQ@Q@Q@Q@Q@Q@Q@Q@dx—þApÿ�ØBËÿ�Jb­zÈñ/ü‚áÿ�°…—þ”Å@õÃ|IÓuLxgû'Išÿ�ìÔŒþ\ÑGµ"ÎWçuËÜcŽqÆ{š(‘;I ;Äñ3(&7 ²Øà‘‘ìH¬½gþBžÿ�°ƒÿ�é4õ¯YÏü…<?ÿ�aÿ�Òiè^¹/O®>œ4Ý+Âòëv÷jRïñZà¦Xäî¡<ç§[E�SÒDãG²6‘ÙÏä&ûX˜2Àp>@G/LŽ8¯#ý¤äNÒì!ÿ�´Ú½¢¼_ö‘ÿ�‘;Iÿ�°‡þÓj�ô¯ ÿ�È¡¢ׄú-kÇú~¡¯h×Z¾‰5ÜwVç˼K¤mçþà°b£‚vç=1[>ÿ�‘CDÿ�¯?ôZÖ½�SÒmn,´kK»ƒss¼qË;u•Õ@,~¤øÕMcþBšý¿þ“OZõ‘¬ÈS@ÿ�¯÷ÿ�Òiè^¹ø{ZÖ´Ý@éw–ľ›=¼vsÛ,î¬ Gó#0!rÁ€ú_E�cøJÆëLðn‰az.­¬ †T¬¨ƒŒc à×~Ñ_òO¬?ì+þŠ–½v¼‹öŠÿ�’}aÿ�aXÿ�ôT´Û|9ÿ�’oáßúð‹ÿ�AWÆz,zÝíœW¸Ô£HŸÊ¾¶½H$´sè )ç�äg§CÒ­|9ÿ�’oáßúð‹ÿ�AÓÐM*ÞæÓG²¶½¸ûEÜVñÇ4ßóÑÂ€Íøœš§¬ÈS@ÿ�¯÷ÿ�Òië^²5ù hõþÿ�úM=�k×™üAðf¡­ø†]F 5u(¦ÑeÓáO1Ú\—Þ“üäp;•ËqÐצQ@´k[‹O´»Ÿí0[GÓùhê 3~$^gûCÉ;µÿ�°”ú.JõšòoÚþIݯý„£ÿ�ÑrPGð‹þI^ƒÿ�\_ÿ�F5më¶7Zö‘j±`—Bæí÷þ¬n1œœÉ´ô#ä=2+áü’½þ¸¿þŒjí¨�¬cþBšý¿þ“OZõ‘¬ÈS@ÿ�¯÷ÿ�Òiè^¼—Æþ ñ·ãFÆÉVtû/öV£ ‘Æ-¶¶eóÁ!äÏð€ ™5ëTP^QûBÉ9‡þÂ1è^¯^QûBÉ9‡þÂ1è@?ä‘èößÿ�GÉPø³áéñ·rmžæÎÛRh®æD1\Ç ¦ oÈ9P~÷J›à¯ü’=þÛÿ�èù+¾ ²5ù hõþÿ�úM=kÖF±ÿ�!Mþ¿ßÿ�I§  ;‰ieŽžDBË !…ˆ=9 {×’è^ñ |=¥]é[ê>Õ¢ÔM<$]*ÌîU\€v¹ûÛF@úׯQ@·´+½OÕ%¾É¸Õ5KE .Â$a„$pH�g&¹ÏŽ¿òO‡ý}í)+Ó+Ìþ:ÿ�É>õõÿ�´¤ ü ‘áøMæÅÏ"\NË  !‚Ä�ONH¦—Ãzˆ´ï·Þ¹Ð.SU[;›h£˜ÌÒ`« 0ïîÇN3Oøÿ�$¾/úû›ùŠõ�çü õ§‚ô‹ GO–ÆîÊÒ+Y#‘ã}ÅWp(Ì0qÆp}ªÎ³ÿ�!Oÿ�ØAÿ�ôšz׬gþBžÿ�°ƒÿ�é4ô¥q#Ãm,±@óȈYaB¡¤ p ±�Ó’©¯;ð$(ðÂÈ4·ðµÄÚ½‰uŽÜÝÛªM¾G|‡p�aœóéžÞ“E�s‡QƒEœjzè³½ËÈÐý©.^fl3Lî€ ÌŸÇôÅhk?òðÿ�ý„ÿ�I§­zÈÖä)áÿ�û?þ“O@ôQE�QE�QE�QE�QE�QE�QE�QE�ƒâëKkÝ®­âž?í ?–T 9¸Œ±#èMoVG‰äý„,¿ô¦*�?áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð­zâ<yâ/xq`¾Ñt­>÷OYcŠhå‘þÑ3;%H$žz`f€:øE<9ÿ�@ +ÿ��ãÿ� ÉÕ¼1áôÔ´%M LU{æWÒ1¸}šcƒÇ# ÀTú‰®µ_øŸCšÚ¢ÑŨGF,ÒQœ“œc�(Æ=y5Yÿ�§‡ÿ�ì ÿ�úM=�ðŠxsþ€WþÇþÂ)áÏú�i_øøV½pÞ?Z}–÷Õ²âxá]5­CµÛ3|ÙýÐN�+ݨ¢ÿ�„Sßô�Ò¿ð?ð¯ ý¡4]+Lðž—%†™gk#_mf‚BG–ÜJïbZüLµ·›R¶¾Ðî`–k‹xíDaQÄ?%‹7'œ?Ê1\‡í#ÿ�"v“ÿ�aý¦ÔÛxgÃ:¾Ñä“CÓ^G±…™šÒ2X”$âµ?áðïý�t¿üü(ð¯üŠ'ýxAÿ�¢Ö¹í}üeiãMM;R¶›KººO¦‹Q˜à/1”òHöÀË(ç4Ðÿ�Â+áßú�éøøV^­á5- WCÓT=ó+iÜ>Ï1Áãž@?…g\kz­ŸÅ'D}VCgym<²[Ïj«…W* u]Û‡%ƒ1àWK¬ÈS@ÿ�¯÷ÿ�Òiè�ÿ�„WÿôÒÿ�ð?ð£þ_ÿ�ÐKÿ�À8ÿ�µë‡×߯Vž4Ѥӵ+i´»«¡úhµŽ�2óO$l ²Žs@ü"¾ÿ� —ÿ�€qÿ�…y_ÇíJÓ| c5Ž™ek+jq©x Tb<©N2Nå]…ÿ�Šõø…á; 'Dѵ'¼v‚×TY .ãÁqž„gý¢¿äŸXØV?ý-�tü9¡Üü>Ð'ŸEÓ¥•ìbg’KTfc·©$s]ü"¾ÿ� —ÿ�€qÿ�…gü9ÿ�’oáßúð‹ÿ�A¯¿Œ­<i£I§jVÓiwWB)ôÑj3�eæ2žIØeæ€:øE|;ÿ�@/ÿ��ãÿ� ËÕ¼3 &¥¡*èzj‡¾e`-#‡Ùæ8<sÈð¬m7W×'ø’Öº†¯¨ØØ¼³ ]2}&5ŠåP6\Xð7à€{t®·Xÿ�¦ÿ�_ïÿ�¤ÓÐÿ�¯‡è¥ÿ�àáGü"¾ÿ� —ÿ�€qÿ�…kׯ¿Œ­<i£I§jVÓiwWB)ôÑj3�eæ2žIØeæ€:øE|;ÿ�@/ÿ��ãÿ� òÿ�Z&“§xÚk2ÊÖS¨F¥à·Db6IÆ@éÀ®ÂˆõËat—6vº›Oý‚41\Ç !Ë>Koà¸P>õe~ÐßòNíì%þ‹’€4¾ø{E¼øe¢\\èú|ó<NZIm‘™¿xÝI5ØÂ+áßú�éøøVÂ/ù%zýqýÕŠÇ6Þ*ÒÛEÔìä³»œÄúsZÝD-3IÉ8ã¦JŒÐMÿ�¯‡è¥ÿ�àáYz·†tÔ´%]MP÷̬¤cpû<ÇŽy�þK°ø¢ÛÅÚ…–±â£¬ÚÚÚÆYFŸ¸I¤$•É$*ç®>q]±ÿ�!Mþ¿ßÿ�I§ þ_ÿ�ÐKÿ�À8ÿ�ÂøE|;ÿ�@/ÿ��ãÿ� ׯ<Ô'ñ凌¤K}JÂ÷OšÆâsnöâ(ì™Tù;¤Î[sàdž@sŠ�ë?áðïý�t¿üü+Ì~<hšNðþ¬´»+iMüj^ tFÆ×ã t­O†~/Ö<C¯Ok¨êM*ŧG4¶÷0ÆçÁxZ0àÆ0Ä“ójÚþIÌ?ö‹ÿ�@z�±ð@ѯ~h×zE…Äïçî’[dvlO $dð�®ãþ_ÿ�ÐKÿ�À8ÿ�¹‚¿òHô?ûoÿ�£ä¨5Kßi-šHníµ]5¬.nšÆ;PŸf(‡Ê]ÿ�y˸“Ί�ë¿áðïý�t¿üü+/VðÎ€š–„«¡éªù•€´Œng˜àñÏ ¹ï‡Þ3Ô5¿E§\jK©Å6‹¡4žZ)´¹/±àù�àv –ã©®×Xÿ�¦ÿ�_ïÿ�¤ÓÐÿ�¯‡è¥ÿ�àáGü"¾ÿ� —ÿ�€qÿ�…kךxÅš¯†üs»ê2Igý›w{-¬öª±ÌbŒº¬«»pÁ,Ü �í?áðïý�t¿üü+ξ5hZE‡ÖzU¼¿iÆømÑT‡¨¶¼âV÷_³Ó5;¿µÿ�hhkHæ%O!¶´ch^F3“ÁÉ5Wã¯ü“áÿ�__ûJJ�£ð3AÑõ†ñO{¥XÜÌn¥dÖèí€G#5é_ðŠxsþ€WþÇþÂü�ÿ�’_ý}ÍüÅiÜëzµ—Å'CmZO²^[O,\Z*ÄåW* u‹KnƒÜ �éÿ�áðçý�4¯üü+'VðLJÓRЕ4-1Uï™\ HÆáöiŽŒ€Ià={Qׇ‰N£$nÖíÍŒ>\{�Ž0€zœä“É=k_Yÿ�§‡ÿ�ì ÿ�úM=�ðŠxsþ€WþÇþÂ)áÏú�i_øøV½yÞ©­kö¿´íÛYØ—Ö—yw–KäUÊy,£sä²³ô^£#�oü"žÿ� •ÿ�€qÿ�…P»Ñt­7ZÐ%°Ó,­dkçRð@¨Hû4ç§©x_}³^´ñüZ•µ­ÊÅe~–ëÁ2 «Æá{òdâ·5Ÿù xþÂÿ�¤ÓнQ@Q@Q@Q@Q@Q@Q@Q@dx—þApÿ�ØBËÿ�Jb­zäþ$\êv¾ ¸—G¶3ê ql`Qƒ‰ÈWƒ×æ�cÞ€:Êä¼MáÏk:œ7W‹SH¶…~XWKŽvÜA·»ppH�ŸS^VÞ*øã¸íПnxÍ’ôüé?á*øçÿ�@&ÿ�À%ÿ��õ]ÂZŽ‘ãmo_mbÞx5c›kö&VE‰JG‰<ÃÈ’WŸAZÚÏü…<?ÿ�aÿ�ÒiëÅ?á*øçÿ�@&ÿ�À%ÿ�©yâou§µÆŠË*\¶cQºO)Áyù ŸÂ€>®WÄ~$ÔRîOøŠÀ$~ZÁ§^,ã¾@L’{äבÉ㎶A”œgåÓƒ*oü&Ÿÿ�èqÿ�‚Ê�õËGcâA­?ˆüCtÂF“ìwŠmrT¨ýÚ PxôÀ®ö‘ÿ�‘;Iÿ�°‡þÓjçÿ�á4øßÿ�@ üWñ_ø…«i±x¿M’ÖÍ'Ý =§•™6‘Œ÷ã<PÓ~ÿ�‘CDÿ�¯?ôZÖeï‚ûÄ‹­Kâ?.ÙþÅÚ¥³9P/+ë“““Íx¾™ã?Œ0iVpØè7oi°8Ò™ƒ PçñŽj×ü'ÿ�è^¼ÿ�ÁC…�{E‡„m­5k}NëPÔ5+›Q"Ú5ìŠßgc~ݪ È�e²qÅYÖ?ä) ×ûÿ�é4õâQxóãDdîðÅĹþþ“'–*Ïü\–êÁçð¬‰$S—·Ù’ï庑ן”¹Ç¶{PÑUÊÞø!o¼HºÔ¾#ñí‘ìQݪ[0S…ò¾¹99<וÂÁøËÿ�BŒ¿ø*›ühÿ�…ƒñ—þ…ðU7øÐ¬�xq<I¦k¶št7Zy••m!Ž$˜È»I“ –Ç$r0I®'öŠÿ�’}aÿ�aXÿ�ôTµÎÿ�ÂÁøËÿ�BŒ¿ø*›ük‘ø‡âë~‚ÛÅZØX-ÒÉ­e$9#€¹cŽ…Ž=¨èo‡?òMü;ÿ�^è"™{à…¾ñ"ëRøÄ ¶D±Gv©lÁNB Êúäääó^+áÿ�|UÓü7§Ûi^–ãN†KyWL–Mè óõ£ÿ� ãý ø&ž€=ŸOðÊY]¤ó꺞¡åJòÛÇ{*¸˜%HPÇåfQ¸œ}j]cþBšý¿þ“O^'ÿ� ãý ø&žª]ü@øµ-̓ÏáIÒH§/�þÈœo-ÔŒwùYΦ{PÑÕÊÞø!o¼HºÔ¾#ñí‘ìQݪ[0S…ò¾¹99<דÂÇøÇÿ�B…Çþ §£þ?Æ?ú.?ðM=�zÞ“à-#FÔí¯-ÞéÒÈÌlm¤u1ZyÇ2yxPÜÿ�´N;b¸ïÚþIݯý„£ÿ�ÑrW*>#ücøCî±Ñ®?ƹ¯ˆž3ñçˆ<;Ÿ‰¼1ý™b·+"Ïö áÌXÜìGBÜuâ€=Ëáü’½þ¸¿þŒj¹{à…¾ñ"ëRøÄ ¶D±Gv©lÁNB Êúäääó^'á|JÒ|)ac¢ø@ÞéС\fÜɼn$ÊÀIzVßü,ÿ�‹ßô!Ÿü]ÿ�ñtíºv•˜÷¯Èò^\µÌ¯!– �8€ªª=€ëUµù hõþÿ�úM=xßü,ÿ�‹ßô!Ÿü]ÿ�ñuNóâGÅY®´÷ŸÁ$†à¼ ý•t<ÇòHå¹ùYΦz@C×~ÛOªÜÞßxƒÄ7Ñ] ÖSÞ³0t(G–ª�À<c¦y¯ü,ÿ�‹ßô!Ÿü]ÿ�ñu\ü^ø¤¬U¼ àƒ¦]qÿ�ЯxwÁw‡/Vö+›Ë»˜ìÒÂ.I†ÝNV5Ú«ÆqÉÉã­q¿´'ü“˜ì#þ€õÉÂßø£ÿ�Btø,¹ÿ�âë—ñ÷¼kâo%ˆ<?…¸Y«g4D¸ �˱ ãÚ€=»à¯ü’=þÛÿ�èù+J×ÀÂßÄ-¬¿‰¼Eq#;Éöi®ÔÛ†*T, _—<z:×…x7â?t Yiš/†¢¼Óáó<©ÚÆy åÙ̬Ã8«wþÿ�Åú ÿ�ÁeÏÿ�@ç¦è–zeÍÝÔAä¼¼`×2œÉ&€�:��œš‡Xÿ�¦ÿ�_ïÿ�¤Ó׉Âßø£ÿ�Btø,¹ÿ�âê+‹¦ŸO’ëÁÊ%·¸2DÊáC±‰×n 9ùY”ôMsvþ ±[èîõ ÛýVHc–+q"¸…%â@»T1–ÉÇåð¸¾"ÿ�ÐŽðãühÿ�…Åñþ„sÿ�€wã@·áÿ�iþ¸iíæº¸”[Çgܸc ºR%À(Éë’{“\ŸÇ_ù'Ãþ¾¿ö”•ÈÂâø‹ÿ�B9ÿ�À;ñ®cÇ<aâ? cÃ`µówùßf™9ØÃn: �õ€òKâÿ�¯¹¿˜®ÂÃÂÖšµ¾§u¨j:Í ‘múE³‰1¿nÕä�2Ù8â¾xðÄoxgÂé§h¾þг;‰þÍ3åQ•ãŠé%øÝãø1çx28÷tßk8ÏæhØ</àè|)>¡%¶­©]­ýÃÝOÙˆ©™ÈÝ ÙN:gÕwYÿ�§‡ÿ�ì ÿ�úM=xwü/oÿ�Ð¥oÿ�€óÿ�T»ø×ãK›› dð´ÖÓ™cDß;Ý1×ÑØþôr¿ðƒ@ó‹™õ½bâî(åŽÒæYc2Y‰q¼Ævu –Ü@éŠòø^Þ9ÿ�¡Jßÿ�çÿ�?á{xçþ…+üŸühÙ|-á¼-ö‚šÖµ©™‚(:¥ßåÏ ÀÚyúJ¹¬ÿ�ÈSÃÿ�öý&ž¼;þ·ŽèR·ÿ�Àyÿ�Æ™ÆOjzÖŽ—>‚àe" †âÈñ‘Éì®Çð ¢è¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+#Ä¿ò ‡þÂ_úSkÖG‰äý„,¿ô¦*�×¢Šò?šÄÍá sOÙ¨[Ç AµÒÒ_*ášDÎe °(RF Xã €zådk?òðÿ�ý„ÿ�I§®WÂOŠþ?ˆÏ#Æ‹§yI#³b�n@ÜÇŽÄ×U¬ÿ�ÈSÃÿ�öý&ž€5袼ãf±3xC\ÓöjñÂmt´—ʸf‘3™Bì ‘‚À–8Ç ¹^/ûHÿ�Ȥÿ�ØCÿ�iµlZé‡ã®¥¦kÑǨåKûW¿ó&»•—åS;” Ë�P�ÁÆ?í#ÿ�"v“ÿ�aý¦Ôê>ÿ�‘;Cÿ�°|ú-k^²<)ÿ�"v‡ÿ�`ø?ôZלüAÖ¥»×¼7 ¦£nx¢Î$‰¬æH¥EfËù…69$ ª¬Nz’�®ÖF³ÿ�!Oÿ�ØAÿ�ôšzán µã_†îì ·’ÚêÒïVSeÝ•FãpyÞ£ /<ÿ�gÝk?òðÿ�ý„ÿ�I§  z(¯"øƒ­Kw¯xnMFÝ ñEœIYÌ‘JŠÍ—ó lrHUXœ õ$�]¯ý£¿äžiÿ�öÿ�EKO»Ö¥Õ>.xY“Q·&MCýâÎhV5a1½�vä–*H8Á,ý£¿äžiÿ�öÿ�EK@ÇÃù&¾ÿ�°|_ú®¢¹†ÿ�òM|9ÿ�`ø¿ô\WÄj[½{Ãpºj6éŠ,âHšÎdŠTVl¿˜Sc’@ÚªÄàg© �zídk?òðÿ�ý„ÿ�I§® IЭíþ'C¯ÜYi“ê7W o©ØÝÊÒ@Á…‘  Ù¹@ÁÆFO=î³ÿ�!Oÿ�ØAÿ�ôšz�×¢Šò/ˆ:Ô·z÷†átÔmÒYÄ‘5œÉ¨¬Ù0¦Ç$µU‰ÀÏR@�õÚò?Ú+þIͯý„âÿ�ÑrTñ.­yâ-ïUŠÞîO5ógcyÚoÙØ¯—ËFI-ÎjÚ+þIͯý„âÿ�ÑrPKðþIFÿ�\_ÿ�F5võÄ|ÿ�’Q ×ÿ�Ñ\§Ä½Mõ]SA±˜j–‘/‰mm I£IÝ ¦Æbq´)'8É �{dk?òðÿ�ý„ÿ�I§®OÁ> ðö…ã=jóAÓ…­½¬Ia»Íy7Êq$§.O�‡Ã~f³ÿ�!Oÿ�ØAÿ�ôšz�×¢ŠñëŸÚ>5ðíÅ亾Ùõbèl¦…­Z¬›ÐÌJä@Î0H·×“~ÑòMàÿ�°Œ_ú•—ð}ÛŦ‹tŠY´n-äµÂÇs “‰gPN.@''£}N§íÿ�$ÞûÅÿ� I@?¿äè_öñÿ�¥W WŸüÿ�’C¡ÛÇþ”I\§‰u=G_ñÿ�…ÒÕõéâÕ#·ŠæÎhV6Åb`]�vÉ%Šä ã8Á ×YÏü…<?ÿ�aÿ�ÒiëξÙêž0¸¶{Ø[XèðÚjj$GŽ}@6L¹BC1C’OÌ7 ×¢ë?òðÿ�ý„ÿ�I§  z(¯½ÒOñ>¡â[{'SÔoRûû?R°º•¥‚e‚FExË8P*22y�özóòOý}í)j§ÃRðx£O†È±]xNÎöø£d5ã9Ûý¶²zœU¿òOý}í)h¿�?ä—Åÿ�_s1^£^]ðþI|_õ÷7óÍ+A·ƒâl:õÍ–‘©>¥sp–úܦXF!dBÅlÜ `ã¹�õJÈÖä)áÿ�û?þ“O\¿ÂÙÚoøLƒÎò”ñ5â)y € Q’sŒ ¥uÏü…<?ÿ�aÿ�Òiè^Š+È¡ðí€ñëkZŒUäzœ×I¯§ß̲Û$Ê�#7®6œt$�õÚÈÖä)áÿ�û?þ“O\‡Âý3CÒï¼B<?¬Au§\OYCv.ª�FælœmÇœ*çq×ë?òðÿ�ý„ÿ�I§  z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Èñ/ü‚áÿ�°…—þ”ÅZõÏxÊÏíº$}¦âßþ&4±¹¸zþ9ú@ W¾°³Ôì䳿´‚îÖLo†xÄˆØ Œ©àà€ Åÿ�„Oþ¦ {ÿ�úÔÂ'ÿ�S½ÿ�¿ýj�¿‡4;]Mõ;}N‡Pvfk¨íQefo¼K’NNyç5³ÿ�!Oÿ�ØAÿ�ôšz©ÿ�ŸýL÷þÿ�õ«/Uð¾ÍKC_íÝm·ß2å®òWýc‘ÇŒ}  Ú«ßXYêvrYßÚAwk&7Ã<bDlFTðp@?…bÿ�Â'ÿ�S½ÿ�¿ýj?áÿ�©ƒ^ÿ�Àßþµ�\´ð¿‡ì/Åýž…¦[ÞH¸†Ò4“'ƒóžrsõ¯-ý¤äNÒì!ÿ�´Ú½þ?ú˜5ïü ÿ�ëW’ü~ѳ<+¦Ký§©]î¾Û¶î1GÈÜŽ´ì¾ÿ�‘;Cÿ�°|ú-jýÕ…÷‘öËH.<‰Vx|èÃùr/ÝuÏF8#‘\†¼/çxWG—ûw[Mö0¶Ô»Â®Pp8©ÿ�ŸýL÷þÿ�õ¨RÃDÒ´¹f—OÓ,­$˜æW··XËŸöˆ?VÖä)áÿ�û?þ“OU?áÿ�©ƒ^ÿ�Àßþµeê¾Ù©hký»­¶ûæ\µÞJÿ�£Ìr8àñ¡4ÛU{« ;ï#í–\y¬ðùчòä_ºëžŒ2pG"±áÿ�©ƒ^ÿ�Àßþµð‰ÿ�ÔÁ¯àoÿ�Z€6¦°³¸¼¶¼šÒ .­w}žgŒ‹pÃmcÊäpqÖ¼ŸöŽÿ�’y§ÿ�ØV?ý-wßð‰ÿ�ÔÁ¯àoÿ�Z¼³ãÞ‡ý™à[)¿µ5;½Ú”i²êãÌQû©N@Ç^?S@›ðßþI¯‡?ìþ‚+ º°³¾ò>ÙiÇ‘*Ï.Eû®¹èÃ'r+‚ð†¾Õðÿ�AŸûoY‹Ì±‰¼¸®ö¢ü½�Ǻ?øDÿ�ê`׿ð7ÿ�­@vZ“¦\Íqa¥ÙZO6|Ù`·HÚNsó2yõªúÏü…<?ÿ�aÿ�Òiê§ü"õ0kßøÿ�Ö¬½WÂû5- ·u¶ß|Ë–»É_ôyŽG1ô&€;j¯uag}ä}²Ò "Už:0þ\‹÷]sцNäV/ü"õ0kßøÿ�Ö£þ?ú˜5ïü ÿ�ëPµ¾‘¦Ú_O}m§ÚCyqþºâ8Ud“ýæ'ñ¯/ý¢¿äœÚÿ�ØN/ý%w_ð‰ÿ�ÔÁ¯àoÿ�Z¼ÃãÆ‡ý›à+iÿ�µu;¬ê¯—uq½GÉ'8Ç^(ºø?ÿ�$£@ÿ�®/ÿ�£ºû« ;ï#í–\y¬ðùчòä_ºëžŒ2pG"¼×ág‡>ÛðÓD¸þÙÖ ßŸ. ­¨¿¼nƒWaÿ�ŸýL÷þÿ�õ¨v k{Uu·‚8DŽÒ8îv9f8êIäžõ›¬ÿ�ÈSÃÿ�öý&žªÂ'ÿ�S½ÿ�¿ýjËÕ|/³RÐ×ûw[m÷̹k¼•ÿ�G˜äqÁãBh¶ªÓéöWWV÷Wvó\[K$JÏá†ÚHÊäpqÔV7ü"õ0kßøÿ�Ö£þ?ú˜5ïü ÿ�ëP¦£iz@”išm—šÛ¤û4 óêv“^iûDÉ7ƒþÂ1èWoÿ�ŸýL÷þÿ�õ«Ì¾;h_Ù¾†í]Rë7ñ¯—uq½>ëóŒuâ€:ÿ�‚_òHt/ûxÿ�Ò‰+¶¹Ól/n!¸º²¶žh¬2K³Fmp¤ŒÃƒŽ£­y‡Â}»ánsý±«Ûïóÿ�uos±È8ã¦~µÛÿ�Â'ÿ�S½ÿ�¿ýj�Þ‚ÞXVxc†%葨U€¬ÍgþBžÿ�°ƒÿ�é4õSþ?ú˜5ïü ÿ�ëV^«á}š–†¿ÛºÛo¾eË]ä¯ú<Ç#Žú@µP²Ðô2æk‹ .ÊÒy³æËºFÒsŸ˜“Ï­fÂ'ÿ�S½ÿ�¿ýj?áÿ�©ƒ^ÿ�Àßþµ�kÙiz~›ç}‚ÆÚ×Î2_"MíýæÀäûšó¿òOý}í)k­ÿ�„Oþ¦ {ÿ�úÕç4ìÿ�‰¿µµ[Ÿôœl¹¹Þ¿ê¤9Æ=¿Z�Õøÿ�$¾/úû›ùŠô+-IÓ.f¸°Òì­'›>l°[¤m'9ùˆ<úד|д~G?ö¶«m›©G—ms±8#œc­z7ü"õ0kßøÿ�Ö  úo‡4=g›KÑ´ë]v³ÚÚ¤LËר³ÿ�!Oÿ�ØAÿ�ôšz©ÿ�ŸýL÷þÿ�õ«/Uð¾ÍKC_íÝm·ß2å®òWýc‘ÇŒ}  Ú²“Ãkt©¡éŠ.Á ZF<àNNþ>nyæ©Â'ÿ�S½ÿ�¿ýj?áÿ�©ƒ^ÿ�Àßþµ�iéš‘¢‰F•¥XØ qæ [t‹~3Œí8Éüê¾³ÿ�!Oÿ�ØAÿ�ôšz©ÿ�ŸýL÷þÿ�õª¬º'öf¹ Ëý©©]î½uÙuqæ(ÿ�Fœä uâ€:Ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Èñ/ü‚áÿ�°…—þ”ÅZõ‘â_ùÃÿ�a /ý)Š€5ꜚ­ŒZ’iÆp׌»ü˜Ô»*ç˜�v®{œ ¹^9m£x’ËÇ·Û¦¨—÷>$óç˜yŸd›JÙÀcþ¬²ãhxgÓ ªÚk:uþ¥{§Ú^E5ÝCsù[ó·'¦NÓÇ_ÌUmgþBžÿ�°ƒÿ�é4õÉxVI¢ø·ãifÓõ(­õ´[[‰,eX¤0ÄÊør»qž‡8nÙ®·Yÿ�§‡ÿ�ì ÿ�úM=�kÕ95[µ$ÓŒá¯wù1©vUÎ70�í\÷8r¼rÛFñ%—n'·MQ/î|IçÏ0ó>É6•³€ÇýYeÆÐ>ðϧ@C³ñdž¯üK7‡mux%ÕaÜÝCu^XÆÒG9�’0}+Íÿ�iù´Ÿûí6®Ž FÏWø›a'ü"šôrié5½¥ôÚq‚Ù).åÏ' mQâ?Þãœý¤äNÒì!ÿ�´Ú€=GŸò'höƒÿ�E­[“U±‹RM8Îñ—“—e\ãs�ÕÏsU<)ÿ�"v‡ÿ�`ø?ôZ×™ÛhÞ$²ñíÄöéª%ýω<ùægÙ&Ò¶pÿ�«,¸ÚÞôèéIâ½õètAxEüêí 42*Ì–Øåv¾0s‚qƒNÖä)áÿ�û?þ“O\„qßk¿´mrÎÓS†ÊÒÚæص;CÂH %‡ÞcŒ”'å^O8®¿Yÿ�§‡ÿ�ì ÿ�úM=�kÕ95[µ$ÓŒá¯wù1©vUÎ70�í\÷8r¼rÛFñ%—n'·MQ/î|IçÏ0ó>É6•³€ÇýYeÆÐ>ðϧ@Sº×4Û-bÃI¸»D¿¿ßöh0KI±K1àp�“Nµåÿ�´wü“Í?þ±ÿ�è©jÜú?‰Åßj\åÉ~÷7¶“I2 ð…Pù‰D@�.[<óœ“SöŽÿ�’y§ÿ�ØV?ý-�w ÿ�äšøsþÁñè"·$ÕlbÔ“N3†¼eß䯥ÙW8ÜÀµsÜàVÃù&¾ÿ�°|_ú®ÛFñ%—n'·MQ/î|IçÏ0ó>É6•³€ÇýYeÆÐ>ðϧ@AÇ~›ÅáxõúʱSl°HpBî?>ݽ=ýºÕ½gþBžÿ�°ƒÿ�é4õÊèÝÂV·:\¾$†ÖK‹ƒ¨Ùjð°…C`ð³ ÞÀBAž1ÏU¬ÿ�ÈSÃÿ�öý&ž€5ꜚ­ŒZ’iÆp׌»ü˜Ô»*ç˜�v®{œ ¹^ªè1[Öÿ�±¿µ ׯµ©\\‚âÒM<ÂD{›ý^å8�˜gÓ ³Ùê¶:„óEg8œÀÅ$xÔ”VW~6îäg"¼¿öŠÿ�’skÿ�a8¿ô\•gᆛ¬iš”Ë©m£E¢Â—6÷â@©¨nýç”øHÉ%~R[Š­ûEÉ9µÿ�°œ_ú.J�é~ÿ�É(Ð?ë‹ÿ�èÆ®žë[Ó¬îͤ×J.33ƪ]’?ï°Pv¯¹À®càÿ�ü’þ¸¿þŒjäaÐüEoã›·ŽH^^xŒËs!lçÒJ`+Ÿõe—î€~aŸN€ï‡>!ø[Å·òXèz™»¸Ž3+¯Ù¥@3–P:‘Þ´uŸù xþÂÿ�¤ÓÕm î|E­j×0Éï[E‘ Ÿ*<’àÑßžáTæ¬ë?òðÿ�ý„ÿ�I§  zΓ]Ó#¸º®Ó}¢¹ ° ùØ '�œ8­ðß è^'Ó¼«C§ê735¾¦uû[²âÒöFÝäl-òù�”=>à­¢øÃBñãZi·­-À„\ä‚H‹ÄN‹½Fä'ø†Ep_´Gü“x?ì#þ%Eð£EÕ´ßÉ,öw«`tˆ£fÔ-Þ7´œ>M´&O™¡cHéÎj_Ú#þI¼ö‹ÿ�@’€6~ É!пíãÿ�J$®ÇûkNûeÅ ºVšÙw\m¬#ùØ )ÀÎ Ç|ÿ�’C¡ÛÇþ”I\…ü3¯G%¾“zºÄ1ÜC©§‰K‰ 37¤‡9Vrr™8^}À=cEñNâ $L¼ódDYJ<O4m÷]C¹fÖ—Yÿ�§‡ÿ�ì ÿ�úM=qÞð–«§x™µMBrö–:Tz6žÏoä<УoÞé¸àŽ‚pN~ÇYÿ�§‡ÿ�ì ÿ�úM=�k×'§üKð†«¯ÇWj BÞP@K|åvà<çÖW¬è×zZÁ[Ai¤IcbÅ !šu;™xÆV5È鹇ÐöâmÄ *é—‚v‰UØÙ FÎ×]ÀnCƒ†á¾<É<õõÿ�´¥£ÀN¤<K§êwviþµÒ&K˜Z=÷(û›n~ò¨xpwpM?äžúúÿ�ÚRÐ~�É/‹þ¾æþbºm;âW„u}ûÃVóõîžP·”  %¾b»p6žsŠæ~�É/‹þ¾æþbºû{I.|k$ÆÙá±Ò¬Å½¨1•G’\3²ñ‚R5ÈÏÞaÇ4©¦ëv°.ŽwÊÚÎÖÓ4g!d�¹èH :};UmgþBžÿ�°ƒÿ�é4õÉ|-’hçñ\W:~¥h×zíÕüîÆXVH\¨R ¨ãîõö®·Yÿ�§‡ÿ�ì ÿ�úM=�k×)§|JðŽ¯¯ÿ�aØjÞ~£½ÓÊò”·ÌWnÓÎq]]sKlgñtóËi$zn“cä[¯’vÈòa¤(�ù‚¢"Œg–a@h^7ð߉¯î¬tmZË›^eD 03Œ‚@ 3ŽW#‘ëV5Ÿù xþÂÿ�¤Ó×+á[ûmgÇ÷ú¨ð¶»§Ý½˜·Z…‡Ù⣠*œå‰Ï aTáçªÖä)áÿ�û?þ“O@ôQE�QE�QE�QE�QE�QE�QE�QE�âvTÒ"g`ª/ì‰$àô˜«f¢¸¶‚î‚æ扱º92œŒƒî�3ûBËþ~íÿ�ïàÿ�?´,¿çîßþþñªßØ7ý,?ð?Âì þø Ÿá@´,¿çîßþþñ¬búÌêšP/ØŸÞ?ѧ«ßØ7ý,?ð?£“Ã:¯¾bZ'Þ˜FÒ½‡<1ëý(ïö…—üýÛÿ�ßÁþ4hYÏÝ¿ýüãU¿°4oúXà2…Ø7ý,?ð?€,ÿ�hYÏÝ¿ýüã^7ûEÜCsá% š9X_çj0c-½+Öÿ�°4oúXà2…QÔüáf(â¿Ðì¥HßzNpG;qž àÐá[ëEð†ˆ­u�"Â�Aqûµ­í /ùû·ÿ�¿ƒüjœ^Ðà…!G° …Qöt8ÚŸý£Ð"Ãÿ�“ü(Ïö…—üýÛÿ�ßÁþ5‘¬_YS@"êûûÁÇú4õ{ûFÿ� E‡þ'øTrxgB•âwÑìKDûÓ(ÁÚW°ç†=¥�]þвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒüj·öÿ�@‹üOð£ûFÿ� E‡þ'øPŸí /ùû·ÿ�¿ƒükÈÿ�h‹ˆ.|`M¯ý©ÚŒãÊ—Ò½OûFÿ� E‡þ'øU-OÁ>Ö Ž íÊXã1TDæÁíÆx'ƒÇå@߯mcøqáä{˜UÖ U¤�ƒ¶ºí /ùû·ÿ�¿ƒüj·…ô KhíàѬ(Ô*/ÙÔàr3Rÿ�`hßô°ÿ�Àdÿ� �³ý¡eÿ�?vÿ�÷ðdkÖgTк€~Äþðqþ=^þÀÑ¿èaÿ�€ÉþžÐ¥xô{Ñ>ôÄ 0v•ì9á_é@´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ�­ý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€ÉþgûBËþ~íÿ�ïàÿ�òÚæ ‡–©ÑÊÿ�ÚQ¨Áú¹=+Óÿ�°4oúXà2…RÔ¼á^Ý ¾Ð줉Ì " Îþg©â€0>Þ[Eð³AŽKˆQÖ'YÀ#÷Ú»_í /ùû·ÿ�¿ƒük>Ïž°´ŽÖÛE°HcUò±Îz‘šŸûFÿ� E‡þ'øPŸí /ùû·ÿ�¿ƒük#X¾³:¦€EÔ ö'÷ƒôiê÷öÿ�@‹üOð¨äðÎ…+Äï£Ø–‰÷¦ Qƒ´¯aÏ zÿ�J�»ý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÕoì þø ŸáGöÿ�@‹üOð  ?Ú_ó÷oÿ�ø×”þÐW0\|:‚8fŽWþшíG ~äž•é¿Ø7ý,?ð?©ê^ ðÖ¯n°_hv2D¯¼(ˆ'8#øqž§Š�åþ Ý[Áð—DŽkˆ£qçå]À#÷òv5Þÿ�hYÏÝ¿ýüãYÖ>ðîg¥®‰açj˜±’Iä‚z“V?°4oúXà2…�Yþвÿ�Ÿ»ûø?Ʋ5‹ë3ªh]@@¿bx8ÿ�Fž¯`hßô°ÿ�Àdÿ� ŽO èR¼Nú=‰hŸzb;Jöðǯô  ¿Ú_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ðVþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� �³ý¡eÿ�?vÿ�÷ðyŸÇ;«yþªE<R7Ú¾ê8'ýT•èØ7ý,?ð?ªj ðÞ©n°^h–2FpQ^pGðã±4Âü¹··øgsOn.æÊ»€zŽÆ½;ûBËþ~íÿ�ïàÿ�ÌÓüá½.Ô[Yèv m¦nO¹É«_Ø7ý,?ð?€,ÿ�hYÏÝ¿ýüãYÅõ™Õ4.  _±?¼£OW¿°4oúXà2…G'†t)^'}Ä´O½1Œ¥{xc×úPßí /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ«`hßô°ÿ�Àdÿ� ?°4oúXà2…�Yþвÿ�Ÿ»ûø?ƲµK«yõ¬SÅ#}½ÎÁ8û4õsûFÿ� E‡þ'øTie¬Ë5¾i «ÑãU‡â�]¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®;Æñ_ê1Ágo5Å•´W6Ž÷1Œ‘îG¨^\ûì÷®Æ¨êÖO¨YÇ lªVæÞb[Ò9‘ÈüB‘@Ó'¹¹Ó¡’ò&ëfLq½I¯û$ŒƒÜV袀 (¢€ (¢€ ä<sî¡ ­„2Okh.­^k˜¸bÍpˆŠ§Ô\úm_Zëꎭdú…œpÆÊ¥nmæ%½#™Ä)�ºT÷wzè|«´&9@Ve8Ü¿ì¶2=<ÕÚ( Š( Š( ¸ÿ�¥Õæ”,"3Ãh^9.g‹ ‘檪)É;‰`ýêì*†³`ú–˜ö±º£3ÆÙnŸ+«å@ ¤My.ž‹¨G¶î"b•‚ád*q½Ùa†™ÇQW¨¢€ (¢€ (¢€ ä~ »âÊ,vÍ Ku:À@©å‰ç­ê+®ªÕƒêz5Õ”n¨ó&ÐÍÐPhÏxl|A[í6îaiH�NÝc˜Hìr;V…PEPEP\¯þ×7†/ìí¼Øâ{9游L¨‰€ú¹ cû»û⺪£¬Ù>§¡j²¤—6ÒB¬Ýe ùÐz+Þ Gµ¿4ö²|öN ²rÏûA»b´¨¢€ (¢€ (¢€ åü~÷á=BÖÐH‚KIÞyÔqI$¼Ç ;à±þê*޳dúž…¨XFÊ’\ÛI ³t”€Oç@h‚îY,¯ŒöåG;Ëxð 6{œ7ûJOB+NŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(;‡’+idŠ/6EBÉq¼ÀÏl×%cã+û¯ëºCèÑ)ÑM©¹’+·²Ì…ÉDÅ@éÔöçŠìk‘Ò<'ªi~,ñ½ý³i+k+0ý”DÑ)HÎ|Óù†OB´á‹Vúíê­å„Z}‹i2j¿kk²áQ'0•e(¸9V=OoZît­^ËZµk›YÑ$1:ÉFè㪲8 §‘Á¨¯5Ò¾ ¥”¶Wºù¹´y4¥ò­<¦P×à9%Û$1#ßøgB_iÈ&ž¾÷6+i¶�ÜPóN!@4QE�QE�Ay%ÄV¬ö$óä䨧$ –ÁÀž‡¥qVÿ�.eÒ<CªK¢¢Úèw·Vs˜îšFf…r Ä€Oðç'Œã»mÅNÒc‚F@5Áéþ�Ô¬ü;â­&MvÖ_øH&žáå]=—ÉyÆÙ0<Ó‘Žƒ#©=(�´øjÚÝ¥ž¡d¶–·z,´7 3Jíæº¢Ä# ¸¶æ c$àqÎg§jš­„WÖ3 ­¥G�އyAEy¶¡ðmu;>kj6þÎÒm´Ûd6”˜YX<Š\‡V!N8lgŽ}FÓSHÒ`±Ž;HÖ ~[;a@’IÛ'hÉ=ÏÔÐê(¢€ (¢€+^KwÅöKhçw+ %1ª. -­éŒc¿jóôø«(øsŒî4!œÊvF—Lä8›ÊÚÄE…ÁºqŽ ôK¥¸{YVÖXâ¸*DrK‘U» ©#Û#ë^x¿ ¯?áT·_€Àdn… ÍóJ•óy;ûäqÆ;М¬­üM¯èÚ´ÌéR@‘I=Ã\‰#i2#TÜ6¢äõžp3]ŒÅuoÄ,Êãu9 ¤d}¯9Õ>®«âíGÄ—¤×770˽Μ&·TŽ6dˆ_÷™R9ÊàŒoC³¶K+{XÖ5HcXÕbŒ"€�U(ã€:PôQE�QE�cx—X»Ð´‹½J µšê`ó˜¸wVÉ<úcÏ·Ä)môÿ� ^]é4׿´Šß˸g'\Íå€xùˆƒÁÇIâ]*ã]ðÞ¡¤ÛÝÇj×°=»M$&P¨à«aC/8'<Ç¥s“x òçBð–•>³O^[ÜïK"¦à@6¢ó!Úvç'œžp:PhßtË¿íµtM6æÏRžÀÆŽ÷�ˆŠ”°A±78˜�8çšîkË­~Eµs«Üê÷7W·3Çy¥,°•˜©*¨Îv²•$>O\{ú�QE�QE�rÞ8ñ]߃´ Ýet¸ï--#›uщ™ž@›@ØÝ2 9¦^øÂêÃÅ_‡¦Òãº—Ú .Ê"8÷©Ýå÷9u\gœŒÏã¿ \xÏÂ×ZŒv1\²¥kc1*¬×*99ã<w¨5/ j:Ÿ‰|=®K«Û-Æ Â„K&Û,³G°·úÌ…)ÛÉàüÜð[Â_ôé]Ìø±½¿$ PZUŒùŽˆ@¡T¿–v†Á=q]­y„¾[xVîÆà^Ù_¼ ¢V»ÓUÛrÊί &&ù°~öpôê�(¢Š�(¢Š�å¼q⻿hºÊéqÞZZG6ë£3<6±ºdsYž)ø‡uák¸l§Ñc–êX.îP §XÚ8"óIå`±†ÞÄÄ×ñß…®<gák -F;®Y Òµ±˜•V냕œñž;ÖO‹¼¨øºãL¸›\¶·–ÎÊêÕöX3 â#°_”‚Ns@ÞñÆ‘â´ôŽaõÝ´s›p•£Y bM¡YÕX çàWK\ƒ¾Ûx?PŽæ+‹+½‘§ïfÓ×í ˆFÅ&Ý•FÆv`ã'žN{ê�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+Äþ#ƒÃ:l7B÷Ý\ÇgknŒÍ4‡ ¹=;’}­ªÄñO†áñ>›»Ü=µÅ­Ôw–·¡ŒSFr­ƒÔrA†€&Òoµ{››ˆ5]&+##$°]yñÊX¶@%‚»Fr?еkšðï…îtsWÖoõ(ïo5//+¹†(B Š]ÈÝÁny#5ÒÐEPEP\§Ž¼c/ƒ-4Ë‘emqíòY4—ŸgHYÁ!Ù¶7Ê6¶Olw®®¹øVïÅ)£‹]N+Óuõ2Z™·Évƒ‡\N}xé@¼)ã–ñO‰µÍ.ÞÖÁ¬ô±úu¦¡ö…œÈ M  nù¸#õrÚ…o´kúýÆ«orºÀ‹}¼vf3‰v¦ÈÙùIÏœŽ•ÔÐEPEP\玼Q/ƒ|'u¯G`·«lÈ$…§òŽÖ`™ks–c¦y®Ž¹Ïx^_xNëAŽýl–åÉ3AæªÁðåç*9ÏLñ@–os%¤Oy P\•Ì‘Å)‘Tú*¤þB§¨,Òæ;H’òh§¹ ‰$Š#±õ YˆüÍO@Q@Q@s<ñMσ<16»›üì¢xÚäÂÀ3~FÏ,3œq]=q?|3¯ø»NŸC³¸Ó¢Ò/"gy·‰¢t™_rààªãiÛÏ9í@œ&V‚6™%* ¢6à­Ž@8øJ}PEPEP\ Ÿ¯¿á,Öü=b×ZsD,š‘G¼yz*/”pv‚X“…îqÍwÕæº×»c[×õ6Öm]Qà’:{™,žÛÆë2ÁsžÄãŒp@= ÆK¹lb’þÞ+k¦\É SU b«ŸÈUŠ¡¢Úê:LÚ¦¢ºäckÝ,O™èJ‚@8ëƒø ¿@Q@Q@r¾ñ]÷Š'ÖV}* (tËùtöt¼2´’ÆFâ–¸\ƒœûWU\&àŸh£TŽ×Äö‰§©I¨\ÒØJB7ª7œBŒ ´‘Ö€;º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ�������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform21.jpg������������������������������������������0000664�0000000�0000000�00000116564�15030617045�0023366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�°"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *9æŽÚÞIå;cK¹�œ�2xšÆ¶ñ†‰y©\iÐÏpnížž6²™|£(Ì{‰@#Ö€7h®Fñ·‡¼A¨?L¾i®ZØÝ*5¼±†ˆ>ÂÀ²€Fî8=Aô®‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª§R³ªéfá>ÜЛ~c`¥¾™ Pª(¢€ +Zñ~‹áýFÖÃQžånîÕžÞ(l¦˜È–Ç–’$ušÐÒµ[sLƒRÓnRæÎpZ9S8` ¯=A…�[ A¨5çú&—ªÅãßj‡‡n›«Gn ß-» D1*WÌ8ßž3Æ:í¯A¨®® ²µ–êêd†”¼’HØUQÔ“é@;iß üq¾›iR[¥ž—ök˜þÓnßiÿ�NiÌK–e9F|m%H<u÷o iŸØþ²°Åà«�·J ±!XÇòp�^��v¤Ò¼S¤kWKme<Í+ÄgE–ÖX|ÈÁQ½ ¨ ¹eäds[4�QLšU‚ &pÅ#Rͱ ž�É'Øs\îãï ëÒÚǧê,ÆïwÙŒÖÒ³íÎá:¨r0r8Å�t´QE�W?¨x×CÓ5·Ñ®%¼mE! }>âså“ÿ�»B çŒö<u­«;¸oì­ï-Ø´¬±³)RU†A €G¡  ¨¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+É5}Ƴø‹Jñu¦‘›Ø/ä§þå%[B•i¼òŒ ¨ á™×Öϰmõx]º—í¬^ÆÉámß!2É2‚¾í„•�n©, •*HÎQKEçž<ÑõCÆžÔl4‹ëÛM6;Ï´=¥ÜPH ±„P¥¤SFIéƒß‘[þÒu ÀÚV™ªGmí¼EdKeÌHéÆpFHêrjƱ¨¨¼Ó ·¸!×QŽÒ2r30VÇb0}+^Þâ»t¸·‘d†A”u9 =Gµ�K\ç<=qâ¯êš-¬â‹˜Ç–ìp7+�‘ØíÁö5ÑÔSÜCl¨Óȱ«ºÆ¥Žf8êNÔÐf}¨Þlú škGÖi&‰Án8c6WŽ­´ð8ôجmüOo$3\o¹û]áUfËyirè?�6[4�É£‚I&•ÕIXЀ\Ðd“î@¯ð·ƒ<Fþðfƒ©hï§ R:…ÅÜ—>üI#¬q„f';ÆìíéÞ½ð+ ÛV‚M~æAxÊK+'€îù¥’` û¶~€7h¢Š�ó/èzÕÏÄËZSŸNm ië5•Ô¹—Îó:<ªvcƒž¼ñŽkд¹¯.tØ&¿³WN¹{a +ž°àœc§G]¿XíDV÷n#½²Y+Ü"óìFáùÖ¥½Ä7Qy°H²G¹—rœŒ© þ Š�–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*­Þ§a§´k{}mlÒg`šUBØëŒžhÕr¶~–ÛÆ‹\+é{RK{\sÙ“þèó\êý¶­lÿ�oèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@þ(ðµÆµ}csct-˜H©xw^ 7+þ°n`§¶ò{ 颊8!H¢EHÑB¢(ÀP8�J£ý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ4£Uµ u+ ìçÜ#™ ’‡ ¾Œ§±Ä ¯ý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ4á-ëE´¹—Sž;JêâI%–0B„2;*¨=ÎÍŽÅÚº*ÎþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ®VÃÂrZx¾ãQiÑ´Á5­¨êåÝ!b}‡˜ûß=6ŠÙþßÑ¿è/aÿ�)þ4oèßô°ÿ�À”ÿ��Ñ¢³¿·ôoú ØàJÛú7ýì?ð%?Æ€3<Yá˽n+wÓoÚËË/¬"UsŽ>ò• ¹ï‘ÑoZZÃcg ¥´b8!Ah;(ªoèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ4£Egoèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐý¿£Ð^Ãÿ�SühþßÑ¿è/aÿ�)þ4£Egoèßô°ÿ�À”ÿ�?·ôoú ØàJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐ^ÖþÎø1´»‚à'Þ1H\UŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+ƾ.iÖš·Ä_ØßB&¶–½ñ’Fp€Žœõ½–¼â“ÊŸ|ÐD%Cy„/´“×€2ÿ�á]xOþ€ñÿ�ßÙ?øª¥€<.ÚÝÔIÊKx]WÌ~ 4 Ÿ½þÈü«£û^«ÿ�@¸¿ð+ÿ�±ª1]jÛ÷„i±nû,_´ô¥ÁÎ߯å@ÿ�á]xOþ€ñÿ�ßÙ?øªæ>ø7ÃúÇ„-¯oôÔžáÞ@Î]Æ@bC]ïÚõ_úÅÿ�_ýr_ n/ãðE¢Ác±ù’aÚ}¤üç¶Ó@jžðżúbÅ¥F¢k±ƒÌ™v9ÇÞõ´á]xOþ€ñÿ�ßÙ?øªv±s©›'v‘z ÿ�¤ç'Ë~>ï©ö½WþqàWÿ�c@¦x;@Ÿâ.·¦Ë§#YÛÛÄñE½ð¤ª’sœ÷5ÒÜ|<ð¢ZÊë£ÆP|×ë÷«+Ižü|Pñ­Œm1¶‡t~~«ŽqÍuwWZ¯Ù&Ι[sö¯o÷hNø}áY´ËIdÒ#gxQ˜ùÉ* þ*ÁñOƒ|?§êþ†×MH㺾N¡Üï^8äÿ�*ìô»­Pi6AtÈŠˆíXÈÚ?Ù®sÆí­ø\Ëclº€(û·8û¼P¿ü+¯ ÿ�Ð?ûû'ÿ�T¬¼áynõ$}&2±\Aæ?ʱ÷½XŸÆº?µê¿ô ‹ÿ�¿û£au©‹ÝSn›&éw´ãɻϠ øÃVÔîí´¤Žxmãq#¤&¤ðÿ�€¼1yá½.êãJæšÎ)$s#ÌP~÷©«þ.¹Ô›Â²Ë§Fˆm_s œàc®6óRøjçS_ èâ=:'AeV78ÈØ0q·Š�ϸð…ÓW±…t˜Är$¥×Ì~HÛâ÷5{þׄÿ�èýý“ÿ�Š©®®u?í½<6 Â9°>Ó×îÿ�³ZkÕèþö4ð·á÷…uÕñ7öžÏÙ5‰­àÝ#‘Œax?κß|(ð=Ÿ†uk«ÁðÙÍ$n$“å`„ƒ÷½Ec|!ºÕb_}›LŠ}ÚÜÅ÷]lØÜd}ÓŸ­vž'¾×ÂzÊÉ¢Àˆlg Âø,äãg4_þÿ�€è\·ÿ�¿²ñUÃjÿ�ü'oñƒÃš4Z4K§ÝY\I4GòƒƒÙãêÿ�o×ÿ�èoÿ�ãÿ�ˆ¯>Öîõcñ»Âò>•Ü-…ÈHEÞC 6Ní¼~TÑÿ�Ÿðý –ÿ�÷öOþ*²ô?…>º†ôÍáøÇ{<k™$áUÈïzWeöýþ€Vÿ�ø?øŠÈðýö¸°_ìÑ`lßÜ›Ð0wœ¹@ñsáׄü=ðî÷QÒth­o#’ ²¬ŽHÀ=Xކ»ŸøSþÿ�¡rßþþÉÿ�ÅW9ñªïV—áú]éQ[Âe‡2-Þò?x;mè?o×ÿ�èoÿ�ãÿ�ˆ :…_XÚ¯‡àIgs#§™',¯�S÷»oδÿ�áOøþ…Ëûû'ÿ�V./µÏøK4æ:,ÅÐ öáÈó-òs³éùÖ·Ûõÿ�ú[ÿ�àxÿ�â(Ê>ü:ðŸˆ~Ùj:¶Õä’JV‘Á 9£ÐWM®ü(ð=®Ÿx~syk"I>ëϰûÝÁ#ñ¬ÿ�‚·z´_ lÓJŠâ,Ø‘®öûÃÛi®¯Ä7Úãi°‡Ñ`Qöë3‘|?hîw8_þÿ�€è\·ÿ�¿²ñUÀi_|)qñ·^ÐåÑâm6ÛNŠh­÷¾Ï—“œç¹ïÞ½wíúÿ�ý�­ÿ�ð<ñæÚ=Öª>>øŠEÒâk“¥Äu€£÷|îÛÏn1@_ü)ÿ��ÿ�йoÿ�dÿ�â«/Ãß |y£G=LJày ’‚ÆI: âô»/·ëÿ�ô·ÿ�Àñÿ�ÄVG†oµÅТè°:ù³|Æôùjý¶P|Cø{áM]ðe¾Ÿ£EWú¼v÷*®çÌŒ•ÊœŸsÒ»ïøSþÿ�¡rßþþÉÿ�ÅW-ñ6ëU“Ä^7\P²ëq˜•n·ïmËÁ;F>¼×£ý¿_ÿ� ¿þþ"€8è>x¼M}jÞ€Á´ˆždœ3<áÞî*Óÿ�…?àú-ÿ�ïìŸüUX·¾×?á,ÔXh°66 ¯Û‡̸ÁÎϯåZßo×ÿ�èoÿ�ãÿ�ˆ áF™g£ø¿Ç¶6- ¾†8ãªð9úšõ:ó/†O4ž6ø€óÄ"”ên_pSµ¸ÎkÓh�¢Š(�¢Š(Ì~:B—> Ó-åÇ.±nŽÆA Mÿ� 'À?ô ¸ÿ�À¹?Æ£øÞÅ|'¤0RÄkVÄ(ÆOÇ5Úÿ�lßеªÿ�ßË_þ=@sqð_Áø³N°]:³Ícu3¯Ú¤Ét’Ü)Î}$oεáDøþ—ø'øÖµÖ­z|q¥?ü#Úa¦Þ’Û, –¼Þã©Ï#çÛ7ßô-j¿÷ò×ÿ�PŸ|)Ñl¼=ãïé:tm´–K3 õ<žI¯X¯2øy+Ïñ?â,’[Ëní-Žb”©eýÜv’?"kÓh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯ ø£q ¯ÄïÍq4qD°Þny*““^¿^CñBhàø¡à©&‘#ŒCy–v�Ýúš�wööÿ�Akü OñªkšH×ïê–[ ¬�7Ú†—#¯¸üëOû[Mÿ� …§ýþ_ñªêšxñã}º×iµ€ç. ß/¿¸  ÛÚ?ý¬?ð%?ƹ†š¶›ià‹Hn5 XeI”’eR>sؚ쿵´ßúZßåÿ�ä>jVþ´Žk»xÜI&Uä�œö&€5µoJ{$¦§dÁoC6.àyoÉçÞµ·´ú XàJgk:žž×:A[ëbø‰WåÉÏZÕþÖÓè!iÿ�—ühŠÒu]9>(x‚áïíV -¡ !™B± ¹ÁÎ uwZîŽm&U±$ÆØá=>µËéökñOÄ35Ü'¶€+™Òv¯Cšënµ]8ÚLý©&6ÿ�–Ëéõ  º^¹¤&‘d­ªØ«nvzç<c«i³ë~xµ Y-@4…&RqÉç]>—ªiˤY+_Ú‚ @A™xùG½s~2Ô,¥×<*ÑÝÛº¦¢ÊÈQÇ'ž(«þÞÑÿ�è-aÿ�)þ5CO×4•½ÕKj–@5Ò•&á9LC#ŸP*ÓþÖÓè!iÿ�—üj†Ÿªië{ª“}j])̼&!ëí@<]¬éSxCVŠ-NÎIÕ¢N¤“Ž€f¥ðη¥Eá]95;$t±…YZáARdšOêvø?WHïmÚÖ@eRIÇÖ¥ðÆ§§Çá=úÙ]l` ­*‚ÁÁæ€ë[ÒN·§¸Õ,Ьsd‹„ÀÎÜw­ííþ‚ÖøŸãTîµM<ëš{ ëR¢9²|åÀû¾õ¡ý­¦ÿ�ÐBÓþÿ�/øÐ_„îd¾,û^«c›®O$~mÂ&õ8à žG½v¾'ñ?‡æðž³zî˜ò=Œêª·q’ÄÆØ�g“\ÏÁGY"ñ{£F×§*Êrã‘]çŠÿ�äN×?ì?þ‹j�?á+ðçýô¯ü ükÏu½F“ã…îÓV°kh¬.VI–å !!° g�׬כëßò^¼'ÿ�`ë¯äÔØÿ�ÂWáÏúé_øøÖ?‡üO Eø“\Óµýà ×qŒ‚ç¯JëëÃê5ûÜèf€<ÿ�ã^¿£_ü0¿·³Õì.'ia"8nQØâAžÍzü%~ÿ� þ•ÿ�‘ÿ�qß¿ä”j?õÚýµéÉ\xŸÃçÅštƒ]Ó kct¥¾×2[àg=Näk[þ¿ÐJÿ�ÀÈÿ�Æ‹ŸùtßûÝÿ�èËz× &ø)¯èÖ ,-ï5{ yÖY‰Žk”Fã‚s]gˆ|OáùtØV=wLvÖlBÝÆx1’zô�øV'ÀŸù%wývŸÿ�F5v>%ÿ�\?ö²ÿ�Ò˜¨�ÿ�„¯ÃŸôÒ¿ð2?ñ¯6ѵí>?xŠõõkµ“K‰sp‡—Àlàžå^Á^_¢ÉÅø›þÁ0ÿ�í*�îá+ðçýô¯ü ükÃ>'Ð"ÐbI5Í1K1Ú×qƒÌ®Gzëë¿ò/Eÿ�]§ÿ�ѯ@sñ;^ÑîüEà7¶Õ¬fH5¸ÞVŽáF»—–Áà{šôøJü9ÿ�Aý+ÿ�#ÿ�â>+ÈÍð÷þÃÑèK^@•¿‰ü><Y¨ÈuÝ0FÖ6ªíqà‘%ÆFsÔd~bµ¿á+ðçýô¯ü üh¶ÿ�‘ÇRÿ�°}§þŒ¸­z�ó/†wÝxÛâöóG4/¨DRHØ2°ÚÜ‚85鵿ÿ�¿ä~ø‡ÿ�a¿ô¯H  ºŒ7wtðØÞ ;§B"¸1 mØí$ô¬è´Ýy/RY<B²[‰Ã´?aAº=˜1îÏwÍ»ðÇzÛ¢€ (¢€<Ïãs*xSHf!TkVÄ’p]ßöþÿ�A{ü Oñ®ãr«øSHV”ëVÀ‚2]ßöÿ�@‹üOð  ;­sI>:Òd¥‘EÓoT·Ú�™mp3ŸcùÜþßÑ¿è/aÿ�)þ5‡u¡é#ÇZLcK²Úmëû:`‘-®1î3[ŸØ7ý,?ð?€8O‡ÓÅsñGâ4ÐJ’ÄÒØít`Êw'B+Ó+ÌþA·ÅˆÐÁEËcµB¨ýÜ�¯L Š( Š( Š( Š( Š( Š( Š( Š( ¼wâ…ôÿ�|Vðn•¨– Ë{¤•¡p­„B댂>ÕìUæ5’â/Œþ{Xy„7Ûci6ýÑÏ88ãÚ€*ÿ�Ã;ø3þ~5üOþ"³áø áñ剟Uò¡µ‚e>zgs¼ çäéˆ×õ¯Pû~¿ÿ�@+üüEdÛßkŸð–j,4X ›PWíÃæ\`çg×ò WþßÁŸóñ«ÿ�àBñÈ|2ø=á¯øÓYÔ¦ÔêY$V̪¸W pTöíÿ�o×ÿ�èoÿ�ãÿ�ˆ¯>ø+w«EðÆÁ-4¨®!͉ïa?¼=¶š�ËÖ~xJÂãHŽõB.ï…¼›§C…1»qòuÊŠÕÿ�†wðgüüjÿ�øŸüEt~"½ÖÚó@ߣ@„jjT Ðw*^>çùö­ß·ëÿ�ô·ÿ�Àñÿ�ÄP†é<7}ñKÄ>–]@XéöÐK ,Ê—U''nSں˯ÙóÁ°ÙÍ*ÜjÛ’6a›„êû”hzªürñl‰¥Ä× el$„Ý` ؘ;¶óùW}}¯>ä�<¦ÉûpãƒþÅ�yæ—ðÁ÷ºE•Ô³ê¢I ImÂc%A8ù=ë›ñ—Áï h:ç…lìæÔ Z¦¢-® “)!8û¸QƒÏ½zþ‡}®é¡4HE¬Xc|FÁÎ6WñïVøÏ¥E®® j.÷ol Ú1õæ€þßÁŸóñ«ÿ�àBñŸ§üð…Õî« “ê»mn–ñ:gi†'çäë—?¥z‡Ûõÿ�ú[ÿ�àxÿ�â+'I¾×¥®•Ñ`bo”°ûpOÙáãîsÆã@uâÿ�¾м«ê¶“êfâÒÕæŒI:•,FFÁÅMáŸÖ<)£êw3ê‚{Ë.$ : èàlé“]‡ÄÝiþxgÑáŠ#c(g¡Š§œl« ½ÖÓÀ~X´h$Œi–ÁÞ…,<¥ÁÆÎ>”ÅÝ|ðŒ:æŸf³êžUÄs3“:g+·ù?Ú5£ÿ� ïàÏùøÕÿ�ð!?øŠêo¯µÃâ} �â+«öÑÏ žvqZÿ�o×ÿ�èoÿ�ãÿ�ˆ ð?Áï xŽóÄñ^ͨ*éšÄö0yS(ÌhxÝ•9>üVþ¹ðÂw‡õ+è'ÕL¶Ö²Ì§B7*3òtÈ«ÿ� nõhõ}*)‹x†å¤ w³cg•)Ï׊êüO}®7„õ•“EØÎ…ð8YÉÆÎh•ÿ�†wðgüüjÿ�øŸüErŸÁï YüOм9Ú±¾´šiY¦]á`íÀzW·ý¿_ÿ� ¿þþ"¼û[»ÕÆï ÈúTKp¶!!y 0Ù;¶ñùPÿ�Ã;ø3þ~5üOþ"³´€¾¾Ší¥ŸT+¹¡]³ ùUˆÁÖ½Gíúÿ�ý�­ÿ�ð<ñ‘áûíq`¿Ù¢ÀÙ¿¸'7 `ï9r€<ŸâoÁï xCÀ÷zΛ6 ×QI¨šeeÃ8€£±®¿þßÁŸóñ«ÿ�àBñŸ®õi~ߥޕ¼&Xs"Ýï#÷ƒ¶Ñ^ƒöýþ€Vÿ�ø?øŠ�òù¾xA<Agb'Õ|©­g™ž™Üù:bFý+CþßÁŸóñ«ÿ�àBñÕ\_kŸð–iÌtX‹ íÑæ[äçgÓó­o·ëÿ�ô·ÿ�Àñÿ�ÄPˆ|2ø=á¯øÓYÔ¦ÔêY$V̪¸W pTö¿¬|ð……”sC>ªY®­á;§B6É2#\1«ÿ�nõh¾Ø%¦•Ä"Y±#]ì'÷‡¶Ó]_ˆoµÆÓa¢À£íÖg"ø~ÑÜîp(•ÿ�†wðgüüjÿ�øŸüEqzoÂ/]üZÖ|/$º‡Ø,ìc¸„Ëæm™ÉÛŒ|ǵ{§Ûõÿ�ú[ÿ�àxÿ�â+Í´{­T|}ñ‹¥Ä×'Kˆ<&ëGîùÝ·žÜb€,ÿ�Ã;ø3þ~5üOþ"³´?€¾Ôt¤¹š}PHÒH§lèFQü€W¨ý¿_ÿ� ¿þþ"²<3}®.…E×Í›æ7 ËWí²€<Ç|7áÝc––Rê «©¥¥Ç›2’•n`óï]Ÿü3¿ƒ?çãWÿ�À„ÿ�â*‰·Z¬ž"ð!¸Òâ…—[ŒÄ«u¿{n^ Ú1õæ½íúÿ�ý�­ÿ�ð<ñåðüðƒø‚òÄϪùPÚÁ2Ÿ=3¹ÞPsòtÄkúÖ‡ü3¿ƒ?çãWÿ�À„ÿ�â+ª·¾×?á,ÔXh°66 ¯Û‡̸ÁÎϯåZßo×ÿ�èoÿ�ãÿ�ˆ ?ø=£[x{Ä^8Ò,̆ÚÒöã2[[©�W¬×™|2y¤ñ·Äž!§P‹tjû‚­Æp3^›@Q@Q@añÑdik ž\§X·øÎÓ‡ÁÅX> ø‡8V›â{£ãE£DèÃ?•Eñ½ŠøOH`¥ˆÖ­ˆQŒžŽkµþÙ¾ÿ�¡kUÿ�¿–¿üz€<êëÀÞ+oi°MñQk™,.œ\%¢&À¯nB†èÅ”Ÿ÷jŸ†ºû>çø“âzí!¯«u«^ŸiOÿ�ö¤i· Fd¶Ë%¯#÷¸ÀÀêsÈÆyÆßöÍ÷ý Z¯ýüµÿ�ãÔçÿ� ôçÒ> |@±’þêýâ–È›·ß,™IXþ8ú õzó/‡’¼ÿ�þ"É%¼¶îÒØæ)J–_ÝÉ×i#ò&½6€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó]ÛXügðÍÝÄVð$7Û¥•Â*æ"Iàr@¯N¯7ñWü—�×ÿ�ýh±ÿ�„¯ÃŸôÒ¿ð2?ñ¬›ø|x³Qëº`¬mT7ÚãÁ"KŒŒç¨ÈüÅuµ‘mÿ�#Ž¥ÿ�`ûOýq@ü%~ÿ� þ•ÿ�‘ÿ�yïÁMF°øaaoy«Ø[βÌLs\¢0̇šõšó?òJ4ïúí?þŒj�Ôñ‰´ o<>cÖô×êjîVî3µ|©FO< ‘ùÖïü%~ÿ� þ•ÿ�‘ÿ�Vñ7ü~øsþ«ÿ�¢e®‚€<‹@×´xþ9øºîMZÁ-¥²¶Xæk”ä"dÎ w×Þ*ðëi÷*ºö–I‰€ò>x>õÈøsþK÷Œ¿ëÆ×ÿ�@Jô]CþA·_õÅÿ�‘  ÅÃúj>»¦+­¬A•®ãƒƒÍq¿uýëÄþ’ßV°™ ÕÃÊÑÜ£×– ð=ÍzFÿ�"Þ—ÿ�^‘踉Ÿò5ü?ÿ�°ÐþB€;øJü9ÿ�Aý+ÿ�#ÿ�ÉÒ|OáôÔµÖ}wLU{åd&î1¸}š‘Ï# À×[Y7ü…<Aÿ�aÿ�Òh(šø…âM çáçˆ ƒZÓ¥šKU#Žé˜í<�&¬x'ÄÚ¿€¼; ÚÞ›±é–Êè÷q†V( ‚x5sâGü“_ÿ�Ø>_ýÕÉ<ð×ý‚­ôRÐ ïè â}"E×4‰Àfqàd&2s[ð•øsþƒúWþGþ4Ûÿ�ùôoúãsü£­š�òo†þi¨xÙ®u{DÞ!¹’#%Ê.ô'†\žG¸®³Äþ'ðüÞÖc]ÓG±UVî2X˜Û� òkáGü„¼yÿ�c-×ó®ÇÅò'kŸöŸÿ�Eµ�ð•øsþƒúWþGþ5çºÞ¿£Iñ¿Â÷i«X5´V+$Ër…س€kÖkÍõïù/^ÿ�°u×òj�ìá+ðçýô¯ü ükÃþ'Ð"‚üI®iˆZþá†ë¸ÆAsƒ×¥uõá¿õ‡ý„n?ô3@ñ¯_ѯþ_ÛÙêö´°‘7(ìq Ï�æ½ þ¿ÐJÿ�ÀÈÿ�ƸïŽßòJ5úíþŒZôŠ�ä®<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò5­ÿ� _‡?è?¥àdãEÏüŽ:oýƒîÿ�ôe½kГ|×ôk†÷š½…¼ë,ÄÇ5Ê# ÈqÁ9®³Ä>'ðüºl+»¦; ë6!nã< ˜É=z� ü+àOü’;þ»Oÿ�£»ÿ�È.ûYéLT�ÂWáÏúé_øø×›hÚöŽŸ¼EzúµŠÚɥĉ9¸@ŒÃËà6pOò¯`¯/Ñ?äâüMÿ�`˜ö•�w?ð•øsþƒúWþGþ5áŸèh1$šæ˜Œ%˜ík¸ÁæW#½uõá_ù¢ÿ�®Óÿ�è× 9ø¯h÷~"ðÛjÖ3$Üo+GpŒ#]ËË`ð=ÍzGü%~ÿ� þ•ÿ�‘ÿ�q¿äfø{ÿ�aè¿ô%¯N JßÄþ,Ôd:î˜#kU ö¸ðH’ã#9ê2?1Zßð•øsþƒúWþGþ4[Èã©Ø>Óÿ�F\V½�y—Ã;ˆn¼mñ{y£šÔ")$lXmnAôÚó‡_ò?|Cÿ�°Œ_ú W¤P]GíÃNŸû0[í‡É%„e»nÛÎ>•ñGÛSÎ]ìžxÞQ¥ßäì䌌oßøcߊۢ€ (¢€<Ïãs*xSHf!TkVÄ’p]ßöþÿ�A{ü Oñ®ãr«øSHV”ëVÀ‚2]ßöÿ�@‹üOð  ;­sI>:Òd¥‘EÓoT·Ú�™mp3ŸcùÜþßÑ¿è/aÿ�)þ5‡u¡é#ÇZLcK²Úmëû:`‘-®1î3[ŸØ7ý,?ð?€8O‡ÓÅsñGâ4ÐJ’ÄÒØít`Êw'B+Ó+ÌþA·ÅˆÐÁEËcµB¨ýÜ�¯L Š( Š( Š( Š( Š( Š( Š( Š( ¼ƒâ‡‡l¼Yñ?ÁZ& Ó-­Ì7›Ì,¾TÞ0H=Ôv¯_¯0ñ¬—|gðÚÀ³Ì!¾ÛI°7îŽyÁÇÔWþßÁŸóñ«ÿ�àBñŸÀO?ˆ/,Lú¯• ¬)óÓ;å?'LF¿­z‡Ûõÿ�ú[ÿ�àxÿ�â+&Þû\ÿ�„³Qa¢À\ØÚ‚¿n2ã;>¿•�r¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®Cá—Áï x¿ÀöšÎ¥6 ·RÉ"°†eU¹‚§°¯oû~¿ÿ�@+üüEy÷Á[½Z/†6 i¥Eq–lH×{ ýáí´Ð^³ð#ÂVDpϪw|-äÝ:)Û“®TV¯ü3¿ƒ?çãWÿ�À„ÿ�â+£ñî¶×šý#SR ^ƒ¸ùRñ÷8ïϵný¿_ÿ� ¿þþ"€<7HøAá»ïŠ^!ðܲêÇO¶‚XYfP亩9;pzžÕÖ]~Ïž †ÎiVãVÜ‘³ Ü'P?Ü£@»ÕWã—‹dM.&¸k+a$&ëÄÁÝ·ŸÊ»ëëýxé÷ èpå6OÛ‡ö(Ï4¿€½Ò,®¥ŸUMHÛn* ÇÉï\ߌ¾xkA×<+gg6 bÕ5mpd™I ÇÝÂŒ}ë×ô;ítxM ¢@Ê-bÃà26q²¸ïˆ·z³øŸÀ¦}*(upcQw»{`pNѯ4�¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬ý?à'„.¯uXdŸUÛkt°Ç‰Ó;L1??'\¹ý+Ô>߯ÿ�Ð ßÿ�Çÿ�Y:Mö¸5-t®‹|¥‡Û€Ú~Ïsž0�ó¯ü ð¦…àý_U´ŸS7–¯4bIÔ©`226*o üð–±áMS¹ŸTÞXÁq IÐ(g@ÇgLšì> ÞëOðóÄ > QC8½ Tm<ã`ÍXðUî¶žðêÅ£A$cL¶æô)aå.6qô .ëà/„a×4û5ŸTò®#™œ™Ó9]¸ÇÉþÑ­øgÏÆ¯ÿ� ÿ�ÄWS}}®éè°\m_¶ŽxLó³Š×û~¿ÿ�@+üüE�x‡þxkÄwž'ŠömAWLÖ'±ƒÊ™FcCÆì©É÷â·õÏ€žÓ¼?©_A>ªe¶µ–d :¹P‘Ÿ“¦E_øcw«G¨xØÛéQL[Ä7- k½›<¨ùN~¼WWâ{íq¼'¬¬š,†ÆpÌ/ÀòÎN6s@¯ü3¿ƒ?çãWÿ�À„ÿ�â+ÔþxjÏâ~…áÈ¦Ô õ¤ÓJÍ2ï €ãn�ãÒ½¿íúÿ�ý�­ÿ�ð<ñçÚÝÞ¬~7x^GÒ¢[…°¹ »Èa†ÉÝ·Ê€þßÁŸóñ«ÿ�àBñ¤|ðôWm,ú 1]Í íʬ@þµê?o×ÿ�èoÿ�ãÿ�ˆ¬ßk‹þÍÍýÁ9½yÈû”äÿ�~xk»ÖtÙµºŠHÕDÓ+.À<uÿ�ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¤øÕw«KðÆý.ô¨­á2Ùïy¼¶Šô·ëÿ�ô·ÿ�Àñÿ�ÄP—Íð â ;>«åMk<Ì|ôÎäx€ÇÉÓ7éZðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®ªâû\ÿ�„³Nc¢ÀXÝ�¿n2ß';>Ÿk}¿_ÿ� ¿þþ"€<Cá—Áï x¿ÀöšÎ¥6 ·RÉ"°†eU¹‚§°­ýcà'„,,£šõRÍuo Ý:¶I‘ø:á_ø+w«EðÆÁ-4¨®!͉ïa?¼=¶šêüC}®6›}n³9Àóöˆð>çs@¯ü3¿ƒ?çãWÿ�À„ÿ�â+‹Ó~xrïâÖ³áy%Ô>ÁgcÄl&_0³lÎNÜcæ=«Ý>߯ÿ�Ð ßÿ�Çÿ�^m£Ýj£ã].&¹:\Aá7X ?wÎí¼öãgþßÁŸóñ«ÿ�àBñ¡üðŽ£¥%ÌÓê‚F’E;g@0²2àô½Gíúÿ�ý�­ÿ�ð<ñ‘á›íqt(„z,¾lß1½þZ¿m”ä~8øCá¿ë´²—Phõ]M-.<Ù”„¨;p£Ÿzìÿ�áüÿ�?¿þ'ÿ�P|MºÕdñ Æ—,ºÜf%[­ûÛrðNѯ5èÿ�o×ÿ�èoÿ�ãÿ�ˆ /‡à'„Ä–&}W栅 ”ùéÎòƒŸ“¦#_Ö´?áüÿ�?¿þ'ÿ�]U½ö¹ÿ� f¢ÃE€¹±µ~Ü8eÆv}*Öû~¿ÿ�@+üüE�pô{mÄ~7ÒlÚF·´½†(Ì„ÀVê@ëæ_ ži<mñçˆE)Ô"ݾà§kqœ צÐEPEP˜|tYÁÚZÃ'—)Ö-Â>3´áðqV‚þ!ΦøžèøÁhÑú0ÏåQ|ob¾Ò)b5«bc'‡ãší¶o¿èZÕïå¯ÿ� :ºð7ŠÛÅšl|DÔZæK § h‰°+Û†P¡º1e'ýÁZ§á®¾Ï¹þ$ø‡ž»H_ëÅjÝj×§ÇSÿ�Â=©mè™-²ÀÉkÈýî00:œò1žq·ý³}ÿ�BÖ«ÿ�-øõ�yÿ�½9ôˆ,d¿º¿x¥²æí÷Ë&RC–?Ž>‚½^¼Ëáä¯?Äÿ�ˆ²Io-»´¶9ŠR¥—÷ruÚHü‰¯M Š( Š( Š( Š( Š( Š( Š( Š( ¼ÇÆ—vÖ?üswq¼ öéepйˆ’x+Ó«ÍüUÿ�%ÃÀõÆÿ�ÿ�Dš�ìá+ðçýô¯ü ük&ßÄþ,Ôd:î˜#kU ö¸ðH’ã#9ê2?1]md[Èã©Ø>Óÿ�F\Pÿ� _‡?è?¥àdã^{ðS_Ѭ>X[Þjöó¬³×(Œ3!Çæ½f¼ßàOü’;þ»Oÿ�£€5<Eâm[Ϙõ½5Äz𻕻Œí_*Q“Ï$~u»ÿ� _‡?è?¥àdãU¼Mÿ�¾ÿ�°ªÿ�è™k  "Ð5í?Ž~.»“V°Kil­–9šå9™³ƒ]õ÷м:Ú}Ê®½¥’b`�¼ž½r>ÿ�’ýã/úñµÿ�нPÿ�m×ýqähBñG‡£ðþš®éŠëkek¸Á`àó\oÄ]Fºñ?d·Õ¬&H5pò´w(Â5Àåˆ<s^‘ È·¥ÿ�פ_ú�®#âgüÿ�ì4? Çþ¿ÐJÿ�ÀÈÿ�ƲtŸø}5-uŸ]Ó^ùY »Œnf„dsÈÈ#ð5ÖÖFÿ�!OØA?ôš �æ¾!x“B¹øyâ Ö´éf’ÆUHãºFf;O�É« ñ6oà/Ã6·¦Ç,ze²º=Üa•„J ž \ø‘ÿ�$×Äö—ÿ�A5cÀŸòO<5ÿ�`«_ý´BûÄúxŸH‘uÍ0¢Ep…Üx ŒœÖÇü%~ÿ� þ•ÿ�‘ÿ�6ÿ�þF½þ¸Üÿ�(ëf€<›á†¿£Zj6k^Â7ˆndˆÉr‹½ á—'‘î+¬ñ?‰ü?7„õ˜ã×tÇ‘ìgUU»Œ–&6À<šÄøQÿ�!/ØËuüë±ñ_ü‰Úçýƒçÿ�Ñm@ü%~ÿ� þ•ÿ�‘ÿ�yî·¯èÒ|oð½ÚjÖ m…ÊÉ2Ü¡D$6làõšó}{þKׄÿ�ìuüš€;øJü9ÿ�Aý+ÿ�#ÿ�Çðÿ�‰ô ¿kšb¿¸aºî1\àõé]}cxoýF¡ÿ�aý Пük×ôkÿ�†ööz½…Äí,$G Ê;H3À9¯Bÿ�„¯ÃŸôÒ¿ð2?ñ®;ã·ü’Gþ»Aÿ�£½"€9+ø|ø³Nkºaln”·ÚãÀ&K| ç©ÁükÂWáÏúé_øøÑsÿ�#Ž›ÿ�`û¿ýoZôäß5ýÃá……½æ¯ao:Ë11ÍrˆÃ2pNk¬ñ‰ü?.› Ç®éŽÂú͈[¸Ïæ2O^€ Äøÿ�$£Nÿ�®Óÿ�èÆ®ÇÄ¿ò ‡þÂ_úS�ð•øsþƒúWþGþ5æÚ6½£§Çï^¾­b¶²iq"Nn#0òø œÁü«Ø+ËôOù8¿Ø&ý¥@Ïü%~ÿ� þ•ÿ�‘ÿ�cøgÄúZ I&¹¦# f;Zî0y•Èï]}cxWþEè¿ë´ÿ�ú5èÎ~'kÚ=߈¼öÚµŒÉ·ÊÑÜ#×ròØ<s^‘ÿ� _‡?è?¥àdã\GÅoù¾ÿ�Øz/ý kÓ¨’·ñ?‡Ç‹5»¦ÚÆÕC}®<$¸ÈÎzŒÌV·ü%~ÿ� þ•ÿ�‘ÿ�ßò8ê_ö´ÿ�Ñ—¯@eðÎâ¯|@žÞhæ…õŠIV½6¼ßá×üßÿ�ì#þ‚ÕéWQžê×Nž{+3{rˆZ;a ŒÈ»¹¸SYÑjšãÞ¤Rxu£€Î#iþÙÛÍÆM½HÝòã¯~•·E�QE�yŸÆæTð¦ÌB¨Ö­‰$໿íýþ‚öøŸã\'ÆåWð¦¬)Ö­d»¿ì þø Ÿá@wZæ’|u¤È5K"‹¦Þ©o´&2Úàg>Çò5¹ý¿£Ð^Ãÿ�SükëCÒGŽ´˜Æ—d´ÛÖ+ötÁ"[\cÜþf·?°4oúXà2…�pŸ§ŠçâÄi •%‰¥±ÚèÁ”þîN„W¦W™ü>‚+oŠ?¡‚$Š%–Çj"…Qû¹:^™@Q@Q@Q@Q@Q@Q@Q@Q@yÅÙx³â‚´MA¦[[˜o7˜X+|©¼`{¨í^¿^aãY."øÏà7µg˜C}¶6“`oÝóƒŽ=¨¯ü3¿ƒ?çãWÿ�À„ÿ�â+>€ž^X™õ_*X&Sç¦w;Ê~N˜Zõ·ëÿ�ô·ÿ�Àñÿ�ÄVM½ö¹ÿ� f¢ÃE€¹±µ~Ü8eÆv}*�åáüÿ�?¿þ'ÿ�\‡Ã/ƒÞñí5JmAn¥’Ea Ê«…rOa^ßöýþ€Vÿ�ø?øŠóï‚·z´_ lÓJŠâ,Ø‘®öûÃÛi  ½gàG„¬.4ˆáŸT"îø[ɺt8S·'\¨­_øgÏÆ¯ÿ� ÿ�ÄWGâ+Ým¯4 ú4F¦¥@½qò¥ãîqߟjÝû~¿ÿ�@+üüE�xn‘ðƒÃwß¼Cá¹eÔŽŸm°²Ì¡ÉuRrvàõ=«¬ºýŸ< œÒ­Æ­¹#f¸N ¹Fwª¯Ç/Èš\MpÖVÂHMÖ ‰ƒ»o?•w××úñÓîAÐàÊlŸ·8?ìPži�<{¤Y]K>ª$š‘¶Ü&2T“Þ¹¿|ðÖƒ®xVÎÎm@Ūj"ÚàÉ2’»…<ûׯèwÚèðþšD”Zņ7Àdlãeqßnõgñ?LúTQ:êàÆ¢ïvöÀà£^háüÿ�?¿þ'ÿ�YúÀO]^ê°É>«¶Öéa¦v˜b~~N¹súW¨}¿_ÿ� ¿þþ"²t›ípjZé]&ùK·´ýž>ç<`þ4ç^/øáM Áú¾«i>¦n--^hÄ“©RÀddlTÞøá-cš>§s>¨'¼±‚â@“ PÎŽΙ5Ø|A½ÖŸáçˆ}¢62†qz¨ÚyÆÁš±à«Ým<áÕ‹F‚HÆ™lÍèRÃÊ\lãé@]×À_îiök>©å\G393¦r»q“ý£Z?ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®¦úû\>'Ò Ñ`"¸Ú¿mð™çg¯öýþ€Vÿ�ø?øŠ�ñüð׈ï<OìÚ‚®™¬Oc•2ŒÆ‡ÙS“ïÅoëŸ<!§xR¾‚}TËmk,Èt#r¡#?'LŠ¿ðÆïVPñ±·Ò¢˜·ˆnZ@×{66yQòœýx®¯Ä÷ÚãxOYY4X Œá˜_圜læ€9_øgÏÆ¯ÿ� ÿ�ÄW!©üðÕŸÄý ÑM¨ëI¦•šeÞÆÜÇ¥{Ûõÿ�ú[ÿ�àxÿ�â+ϵ»½Xünð¼¥D· arwà “»o•�/ü3¿ƒ?çãWÿ�À„ÿ�â+;Hø áè®ÚYõ@b»šÛ:•XükÔ~߯ÿ�Ð ßÿ�Çÿ�Y¾× ýš, ›û‚szó‘÷(Éþ&üðׄ<w¬é³j u‘ª‰¦V\3€x ;ëÿ�áüÿ�?¿þ'ÿ�IñªïV—áú]éQ[Âe‡2-Þò?x;mè?o×ÿ�èoÿ�ãÿ�ˆ /›à'„Äv"}WÊšÖy˜ùéÈñ“¦$oÒ´?áüÿ�?¿þ'ÿ�]UÅö¹ÿ� fœÇE€8±º~Ü9e¾Nv}?:Öû~¿ÿ�@+üüE�x‡Ã/ƒÞñí5JmAn¥’Ea Ê«…rOa[úÇÀOXYG43꥚êÞºt#l“"7ðuÿðVïV‹á‚ZiQ\B%›5ÞÂx{m5Õø†û\m6ú, >Ýfr/çíà}Îç€9_øgÏÆ¯ÿ� ÿ�ÄW¦ü"ðåßÅ­gÂòK¨}‚ÎÆ;ˆØL¾afÙœ¸ÇÌ{Wº}¿_ÿ� ¿þþ"¼ÛGºÕGÇßHº\Mrt¸ƒÂn°~ïÛyíÆ(Ïü3¿ƒ?çãWÿ�À„ÿ�â+;Cø áGJK™§Õ$Šv΀adeÁèzÛõÿ�ú[ÿ�àxÿ�â+#Ã7ÚâèQôX|Ù¾czüµ~Û(Èüqð‡Ã~Ö<)ie. Ñ꺚Z\y³)! PváF>õÙÿ�Ã;ø3þ~5üOþ" ø›uªÉâ/.(Yu¸ÌJ·[÷¶åà£^kÑþ߯ÿ�Ð ßÿ�Çÿ�@_ÀO?ˆ/,Lú¯• ¬)óÓ;å?'LF¿­hÃ;ø3þ~5üOþ"º«{ísþÍE†‹scj ý¸p<ËŒìúþU­öýþ€Vÿ�ø?øŠ�à>èöÚˆüo¤Ù´oi{ Q™-€­Ô€+Ö+̾<ÒxÛâÏŠS¨Eº5}ÁNÖã8¯M Š( Š( 0øè²?ƒ´µ†O.S¬[„|giÃàâ¬üCœ+Mñ=Ññ‚"Ñ¢ôaŸÊ¢øÞÅ|'¤0RÄkVÄ(ÆOÇ5Úÿ�lßеªÿ�ßË_þ=@uuào·‹4Ø&ø‰¨µÌ–N.Ñ`W· ¡CtbÊOû‚µOÃ]}ŸsüIñ=v¿×ŠÕºÕ¯OŽ4§ÿ�„{R 4ÛÐ#2[e’בûÜ``u9äc<ãoûfûþ…­WþþZÿ�ñê�óÿ�…zsé> XÉu~ñKd ÍÛï–L¤‡,}z½y—ÃÉ^‰ÿ�d’Þ[wils¥K/îäë´‘ù^›@Q@Q@Q@Q@Q@Q@Q@Q@y.í¬~3øæîâ+xíÒÊás$ð9 W§W›ø«þK‡€?ëÿ�þ‰4Øÿ�ÂWáÏúé_øøÖM¿‰ü><Y¨ÈuÝ0FÖ6ªíqà‘%ÆFsÔd~bºÚȶÿ�‘ÇRÿ�°}§þŒ¸ þ¿ÐJÿ�ÀÈÿ�Ƽ÷ি£X|0°·¼Õì-çYf&9®QfCŽ ÍzÍy¿ÀŸù%wývŸÿ�F5�jx‹ÄÚ·ž1ëzkˆõ5w+wÚ¾T£'žHüëwþ¿ÐJÿ�ÀÈÿ�Æ«x›þ?|9ÿ�aUÿ�Ñ2×A@E kÚ<ü]w&­`–ÒÙ[,s5Êr2g»ëïxu´û•]{K$ÄÀy<zä|9ÿ�%ûÆ_õãkÿ� %z.¡ÿ� Û¯úâÿ�ÈÐ…âGáý5]ÓÖÖ Ê×q‚ÁÁæ¸ßˆºþuâÉo«XLjáåhîQ„kËxæ½#@ÿ�‘oKÿ�¯H¿ô\GÄÏùþÿ�Øh!@ü%~ÿ� þ•ÿ�‘ÿ�dé>'ðújZë>»¦*½ò²wÜ>ÍÈç‘Gàk­¬þBž ÿ�°‚é4Í|Bñ&…sðóÄA­iÒÍ%Œª‘ÇtŒÌvž�“V<âmßÀ^†moMŽXôËet{¸Ã+”A<¹ñ#þI¯ˆÿ�ì/þ‚jÇ?äžxkþÁV¿ú)h…÷‰ôñ>‘"ëšaDŠà3 ¸ð29­øJü9ÿ�Aý+ÿ�#ÿ�mÿ�üz7ýq¹þQÖÍ�y7à F´Ô<l×:½„"oÜÉ’åzÃ.O#ÜWYâø~o ë1Ç®é#ØÎª«w,Lm€y5‰ð£þB^<ÿ�±–ëù×câ¿ùµÏûÏÿ�¢Ú€øJü9ÿ�Aý+ÿ�#ÿ�óÝo_Ѥøßá{´Õ¬Ú+ •’e¹BˆHlÙÀ5ë5æú÷ü—¯ ÿ�Ø:ëù5�v?ð•øsþƒúWþGþ5áÿ�èA~$×4Ä-pÃuÜc ¹ÁëÒºúÆðßúCþÂ7ú ?ø×¯è×ÿ� /íìõ{ ‰ÚXHŽ”v8g€s^…ÿ� _‡?è?¥àdã\wÇoù%ývƒÿ�F-zE�rW'ðùñf ×tÃØÝ)oµÇ€L–øÏSƒùÖÿ�„¯ÃŸôÒ¿ð2?ñ¢çþG7þÁ÷ú2Þµèɾ kú5‡Ã {Í^ÂÞu–bcšå†d8àœ×Yâø~]6]Ó…õ›·qžÌdž½�þ‰ð'þIFÿ�]§ÿ�Ñ]‰äý„,¿ô¦*�?á+ðçýô¯ü ükÍ´m{GOÞ"½}ZÅmdÒâDœÜ Faåð8'ƒùW°W—èŸòq~&ÿ�°L?ûJ€;ŸøJü9ÿ�Aý+ÿ�#ÿ�Çðωô´’MsLFÌvµÜ`ó+‘ÞºúÆð¯ü‹Ñ×iÿ�ôkМüN×´{¿x íµk’ n7•£¸F®åå°xæ½#þ¿ÐJÿ�ÀÈÿ�ƸŠßò3|=ÿ�°ô_ú×§P%oâj2wLµª†û\x$Iq‘œõ˜­oøJü9ÿ�Aý+ÿ�#ÿ�-¿äqÔ¿ìiÿ�£.+^€<ËáÄ7^6ø=¼ÑÍ ê’6 ¬6· Ž zmy¿Ã¯ù¾!ÿ�ØF/ý«Ò(®£z4í:{Ãosr!BþM´~dŽÊ½ÏµgEâA-ê[cëZq˜ö„ ÊoÜ[?s¶ï^+nŠ�(¢Š�ó?Ì©áM!˜…Q­[IÀ=wÛú7ýì?ð%?ƸOʯáM!XS­[È<=wØ7ý,?ð?€0îµÍ$øëIj–EM½RßhLeµÀÎ}äksûFÿ� ½‡þ§øÖÖ‡¤i1.È#i·¬Wìé‚D¶¸8ǹüÍn`hßô°ÿ�Àdÿ� �á>OÏňÓA*KKcµÑƒ)ýܯL¯3ø}Vß~#CIK-ŽÔE £÷rt½2€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òвñgÄÿ�hšƒL¶·0Þo0°VùSxÁ ÷QÚ½~¼ÃƲ\EñŸÀokÏ0†ûlm&Àߺ9ç{P_øgÏÆ¯ÿ� ÿ�ÄV|?< þ ¼±3ê¾T6°L§ÏLîw”ü1þµêo×ÿ�èoÿ�ãÿ�ˆ¬›{ísþÍE†‹scj ý¸p<ËŒìúþTÊÿ�Ã;ø3þ~5üOþ"¹†_¼5âÿ�Úk:”Ú‚ÝK$ŠÂ•W ä žÂ½¿íúÿ�ý�­ÿ�ð<ñçßnõh¾Ø%¦•Ä"Y±#]ì'÷‡¶Ó@zÏÀ X\iÃ>¨EÝð·“tèp¦7n>N¹QZ¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®ÄWºÛ^hôhMJzãåKÇÜã¿>Õ»öýþ€Vÿ�ø?øŠ�ðÝ#á†ï¾)x‡Ãr˨ >Ú ae™C’ê¤äíÁê{WYuû>x69¥[[rFÌ3p@ÿ�rïU_Ž^-‘4¸šá¬­„›¬vÞ*ﯯõã§Üƒ¡À”Ù?npØ <Òþ�x>÷H²º–}TI4 #m¸Ld¨''½s~2ø=á­\ð­œÚ‹TÔEµÁ’e$'w 0y÷¯_ÐïµÑáý4&‰(µ‹ o€ÈØ9ÆÊã¾"ÝêÏâ™ô¨¢uÕÁEÞííÁ;F>¼Ðÿ�Ã;ø3þ~5üOþ"³ôÿ�€žº½Õa’}Wm­ÒÃ'Lí0Äüürçô¯Pû~¿ÿ�@+üüEdé7ÚàÔµÒº, Mò–niû<<}ÎxÁühμ_ð7šƒõ}VÒ}LÜZZ¼Ñ‰'R¥€ÈÈØ8©¼3ð#ÂZÇ…4}Næ}POycÄ'@¡ 2k°øƒ{­?ÃÏ,ú<1Dle âô1Q´óƒ5cÁWºÚxë‘2Ø#›Ð¥‡”¸8ÙÇÒ€8»¯€¾‡\ÓìÖ}SʸŽfrgLåvã'ûF´áüÿ�?¿þ'ÿ�]Mõö¸|O¤¢ÀEqµ~Ú9á3ÎÎ+_íúÿ�ý�­ÿ�ð<ñâø=á¯Þxž+Ùµ]3XžÆ*e²§'ߊß×>xCNðþ¥}ú©–ÚÖY4èFåBF~N™áÞ­¡ãco¥E1oÜ´®öllò£å9úñ]_‰ïµÆðž²²h°"Ã0¾Ë98ÙÍ�r¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®CSø=á«?‰ú‡"›P67Ö“M+4˼2Œ¸Jöÿ�·ëÿ�ô·ÿ�Àñÿ�ÄWŸkwz±øÝáyJ‰nÂä$"ï!†'vÞ?*�_øgÏÆ¯ÿ� ÿ�ÄVv‘ðÂ7Ñ]´³ê€Åw4+¶t*±ø:רý¿_ÿ� ¿þþ"²<?}®,û4X7÷æô ç#îP“üMø=á¯xïYÓfÔê)#UL¬¸g�ðv5×ÿ�Ã;ø3þ~5üOþ"“ãUÞ­/Ãô»Ò¢·„Ëd[½ä~ðvÚ+Ð~߯ÿ�Ð ßÿ�Çÿ�@_7ÀO'ˆ,ìDú¯•5¬ó1óÓ;‘â'LHߥhÃ;ø3þ~5üOþ"º«‹ísþÍ9Ž‹�qctý¸r<Ë|œìú~u­öýþ€Vÿ�ø?øŠ�ñ†_¼5âÿ�Úk:”Ú‚ÝK$ŠÂ•W ä žÂ·õ€ž°²ŽhgÕK5Õ¼'tèFÙ&Doàë†5à­Þ­Ã´Ò¢¸„K6$k½„þðöÚk«ñ ö¸Úl!ôX}ºÌä_ÏÚ#ÀûÎ�r¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ®/MøEáË¿‹ZÏ…ä—PûŒw°™|Âͳ9;q˜ö¯tû~¿ÿ�@+üüEy¶uª¾"‘t¸šäéq„Ý`(ýß;¶óÛŒPŸøgÏÆ¯ÿ� ÿ�ÄVv‡ðÂ:Ž”—3Oª Ií�ÂÈÊ?ƒÐ õ·ëÿ�ô·ÿ�Àñÿ�ÄVG†oµÅТè°:ù³|Æôùjý¶P‘øãá†ü;¬xRÒÊ]A£Õu4´¸ófRB íÂŒ}ë³ÿ�†wðgüüjÿ�øŸüEAñ6ëU“Ä^7\P²ëq˜•n·ïmËÁ;F>¼×£ý¿_ÿ� ¿þþ"€<¾€ž^X™õ_*X&Sç¦w;Ê~N˜ZÐÿ�†wðgüüjÿ�øŸüEuV÷Úçü%š‹ æÆÔûpày—9Ùõü«[íúÿ�ý�­ÿ�ð<ñÀ|Ñí´øßI³iÞÒö£2[[©�W¬W™|2y¤ñ·Äž!§P‹tjû‚­Æp3^›@Q@Q@añÑdik ž\§X·øÎÓ‡ÁÅX> ø‡8V›â{£ãE£DèÃ?•Eñ½ŠøOH`¥ˆÖ­ˆQŒžŽkµþÙ¾ÿ�¡kUÿ�¿–¿üz€<êëÀÞ+oi°MñQk™,.œ\%¢&À¯nB†èÅ”Ÿ÷jŸ†ºû>çø“âzí!¯«u«^ŸiOÿ�ö¤i· Fd¶Ë%¯#÷¸ÀÀêsÈÆyÆßöÍ÷ý Z¯ýüµÿ�ãÔçÿ� ôçÒ> |@±’þêýâ–È›·ß,™IXþ8ú õzó/‡’¼ÿ�þ"É%¼¶îÒØæ)J–_ÝÉ×i#ò&½6€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó]ÛXügðÍÝÄVð$7Û¥•Â*æ"Iàr@¯N¯7ñWü—�×ÿ�ýh±ÿ�„¯ÃŸôÒ¿ð2?ñ¬›ø|x³Qëº`¬mT7ÚãÁ"KŒŒç¨ÈüÅuµ‘mÿ�#Ž¥ÿ�`ûOýq@ü%~ÿ� þ•ÿ�‘ÿ�yïÁMF°øaaoy«Ø[βÌLs\¢0̇šõšó?òJ4ïúí?þŒj�Ôñ‰´ o<>cÖô×êjîVî3µ|©FO< ‘ùÖïü%~ÿ� þ•ÿ�‘ÿ�Vñ7ü~øsþ«ÿ�¢e®‚€<‹@×´xþ9øºîMZÁ-¥²¶Xæk”ä"dÎ w×Þ*ðëi÷*ºö–I‰€ò>x>õÈøsþK÷Œ¿ëÆ×ÿ�@Jô]CþA·_õÅÿ�‘  ÅÃúj>»¦+­¬A•®ãƒƒÍq¿uýëÄþ’ßV°™ ÕÃÊÑÜ£×– ð=ÍzFÿ�"Þ—ÿ�^‘踉Ÿò5ü?ÿ�°ÐþB€;øJü9ÿ�Aý+ÿ�#ÿ�ÉÒ|OáôÔµÖ}wLU{åd&î1¸}š‘Ï# À×[Y7ü…<Aÿ�aÿ�Òh(šø…âM çáçˆ ƒZÓ¥šKU#Žé˜í<�&¬x'ÄÚ¿€¼; ÚÞ›±é–Êè÷q†V( ‚x5sâGü“_ÿ�Ø>_ýÕÉ<ð×ý‚­ôRÐ ïè â}"E×4‰Àfqàd&2s[ð•øsþƒúWþGþ4Ûÿ�ùôoúãsü£­š�òo†þi¨xÙ®u{DÞ!¹’#%Ê.ô'†\žG¸®³Äþ'ðüÞÖc]ÓG±UVî2X˜Û� òkáGü„¼yÿ�c-×ó®ÇÅò'kŸöŸÿ�Eµ�ð•øsþƒúWþGþ5çºÞ¿£Iñ¿Â÷i«X5´V+$Ër…س€kÖkÍõïù/^ÿ�°u×òj�ìá+ðçýô¯ü ükÃþ'Ð"‚üI®iˆZþá†ë¸ÆAsƒ×¥uõá¿õ‡ý„n?ô3@ñ¯_ѯþ_ÛÙêö´°‘7(ìq Ï�æ½ þ¿ÐJÿ�ÀÈÿ�ƸïŽßòJ5úíþŒZôŠ�ä®<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò5­ÿ� _‡?è?¥àdãEÏüŽ:oýƒîÿ�ôe½kГ|×ôk†÷š½…¼ë,ÄÇ5Ê# ÈqÁ9®³Ä>'ðüºl+»¦; ë6!nã< ˜É=z� ü+àOü’;þ»Oÿ�£»ÿ�È.ûYéLT�ÂWáÏúé_øø×›hÚöŽŸ¼EzúµŠÚɥĉ9¸@ŒÃËà6pOò¯`¯/Ñ?äâüMÿ�`˜ö•�w?ð•øsþƒúWþGþ5áŸèh1$šæ˜Œ%˜ík¸ÁæW#½uõá_ù¢ÿ�®Óÿ�è× 9ø¯h÷~"ðÛjÖ3$Üo+GpŒ#]ËË`ð=ÍzGü%~ÿ� þ•ÿ�‘ÿ�q¿äfø{ÿ�aè¿ô%¯N JßÄþ,Ôd:î˜#kU ö¸ðH’ã#9ê2?1Zßð•øsþƒúWþGþ4[Èã©Ø>Óÿ�F\V½�y—Ã;ˆn¼mñ{y£šÔ")$lXmnAôÚó‡_ò?|Cÿ�°Œ_ú W¤P]GP´Òtéïï¦ÚÛ¡yd ª:ž9¬è¼_ Íz–qê nql©å¿2Þ§]¼ÖÝ�QEæ™SšC1 £Z¶$“€8zîÿ�·ôoú ØàJpŸ•_šB° §Z¶xzîÿ�°4oúXà2…�aÝkšIñÖ“ Õ,Š.›z¥¾Ð˜ËkœûÈÖçöþÿ�A{ü Oñ¬;­I:Òc]FÓoX¯ÙÓ‰mpqsùšÜþÀÑ¿èaÿ�€ÉþÂ|>ž+ŸŠ?¦‚T–&–Çk£Sû¹:^™^gðú­¾(üF†’(–[¨ŠGîäèze�QE�QE�QE�QE�QE�QE�QE�QE�ä<;eâωþ Ñ5™mna¼Þa`­ò¦ñ‚Azýy‡d¸‹ã?€ÞÖža öØÚM¿tsÎ8ö  ¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬ø~xAüAybgÕ|¨m`™Ož™Üï(9ù:b5ýkÔ>߯ÿ�Ð ßÿ�Çÿ�Y6÷Úçü%š‹ æÆÔûpày—9Ùõü¨•ÿ�†wðgüüjÿ�øŸüEr ¾xkÅþ´Öu)µº–I„3*®È=…{Ûõÿ�ú[ÿ�àxÿ�â+Ͼ ÝêÑ|1°KM*+ˆD³bF»ØOïm¦€2õŸ°¸Ò#†}P‹»áo&éÐáLnÜ|r¢µáüÿ�?¿þ'ÿ�]ˆ¯u¶¼Ð7èÐ!š•ôÇÊ—¹Ç~}«wíúÿ�ý�­ÿ�ð<ñáºG ß|Rñ†å—P:}´ÂË2‡%ÕIÉÛƒÔö®²ëö|ðl6sJ·¶ä˜fá:þåÞª¿¼["iq5ÃY[ !7X6&í¼þUß__ëÇO¹C€)²~Ü8àÿ�±@y¥ü�ð}î‘eu,ú¨’hFÛp˜ÉPN>Ozæüeð{ÃZ¹á[;9µ©¨‹kƒ$ÊHN>î`óï^¿¡ßk£ÃúhMQkß‘°s•Ç|E»ÕŸÄþ3éQD뫃‹½ÛÛ‚vŒ}y ÿ�†wðgüüjÿ�øŸüEgéÿ�<!u{ªÃ$ú®Û[¥†<N™Úa‰ùù:åÏé^¡öýþ€Vÿ�ø?øŠÉÒoµÁ©k¥tX›å,>ÜÓöxxûœñƒøÐx¿ào…4/êú­¤ú™¸´µy£N¥K‘‘°qSxgàG„µ húÌú žòÆ ‰NC:8:d×añ÷Z‡ž YôxbˆØÊÅèb£içjÇ‚¯u´ð‡V- #e°G7¡K)pq³¥�qw_|#¹§Ù¬ú§•qÌäΙÊíÆ>Oöhÿ�Ã;ø3þ~5üOþ"º›ëípøŸH'E€8Šãjý´sÂgœV¿Ûõÿ�ú[ÿ�àxÿ�â(Ä<ð{Ã^#¼ñ<W³j ºf±=ŒTÊ37eNO¿¿®|ð†áýJú õS-µ¬³ iÐÊ„Œü2*ÿ�ýZ=CÆÆßJŠbÞ!¹i]ìØÙåGÊsõ⺿ßká=edÑ`D63†a|–rq³š�åáüÿ�?¿þ'ÿ�\†§ð{ÃVô/E6 lo­&šVi—xd;p•íÿ�o×ÿ�èoÿ�ãÿ�ˆ¯>Öîõcñ»Âò>•Ü-…ÈHEÞC 6Ní¼~T�¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬í#à/„o¢»igÕŠîhWlè>Ubðu¯Qû~¿ÿ�@+üüEdx~û\X/öh°6oî Íè;ÎGÜ 'ø›ð{Ã^ð=Þ³¦Í¨5ÔRFª&™YpÎà(ìk¯ÿ�†wðgüüjÿ�øŸüE'Æ«½Z_†7éw¥Eo –È·{Èýàí´W ý¿_ÿ� ¿þþ"€<¾o€žOY؉õ_*kYæcç¦w#Ä>N˜‘¿JÐÿ�†wðgüüjÿ�øŸüEuWÚçü%šs�âÆèûpäy–ù9Ùôüë[íúÿ�ý�­ÿ�ð<ñâ ¾xkÅþ´Öu)µº–I„3*®È=…oë<!aeÐϪ–k«xNéвLˆßÁ× jÿ�Á[½Z/†6 i¥Eq–lH×{ ýáí´×Wâíq´ØCè°(ûu™È¾Ÿ´G÷;œ �åáüÿ�?¿þ'ÿ�\^›ð‹Ã—µŸ É.¡ö ;î#a2ù…›frvã1í^éöýþ€Vÿ�ø?øŠómëU|E"éq5ÉÒâ ºÀQû¾wmç·  ?ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬íà/„u).fŸT4’)Û:…‘” ê?o×ÿ�èoÿ�ãÿ�ˆ¬ ßk‹¡D#Ñ`uófùèòÕûl #ñÇ øwX𥥔ºƒGªêiiqæÌ¤„%AÛ…<û×gÿ� ïàÏùøÕÿ�ð!?øŠƒâmÖ«'ˆ¼n4¸¡eÖã1*ÝoÞÛ—‚vŒ}y¯Gû~¿ÿ�@+üüE�y|?< þ ¼±3ê¾T6°L§ÏLîw”ü1þµ¡ÿ� ïàÏùøÕÿ�ð!?øŠê­ïµÏøK5,ͨ+öáÀó.0s³ëùV·Ûõÿ�ú[ÿ�àxÿ�â(€ø?£Ûh#ñ¾“fÒ5½¥ì1Fd ¶·R�¯X¯2ødóIãoˆ<B)N¡èÕ÷;[Œàf½6€ (¢€ (¢€<Ãã¢ÈþÒÖ<¹N±nñ§ƒŠ°|ñp­7Ä÷GÆ‹Fˆц*‹ã{ðžÁK­[£<?×ký³}ÿ�BÖ«ÿ�-øõ�yÕ×¼VÞ,Ó`›â&¢×2X]8¸KDM^Ü2… Ñ‹)?î Õ? uö}Ïñ'Ä<õÚBÿ�^+VëV½>8ÒŸþíH0Óo@ŒÉm–K^GïqÔ瑌ó¿í›ïúµ_ûùkÿ�ǨÏþéϤ|@øc%ýÕûÅ-77o¾Y2’±üqôêõæ_%yþ'üE’KymÝ¥±ÌR•,¿»“®ÒGäMzm�QE�QE�QE�QE�QE�QE�QE�QE�æ>4»¶±øÏà;›»ˆ­àHo·K+„UÌD “Àä^^oâ¯ù.�ÿ�®7ÿ�ú$Ðcÿ� _‡?è?¥àdãY6þ'ðøñf£!×tÁXÚ¨oµÇ‚D—ÏQ‘ùŠëk"ÛþGKþÁöŸú2â€øJü9ÿ�Aý+ÿ�#ÿ�óß‚šþaðÂÂÞóW°·e˜˜æ¹Da™8'5ë5æÿ�ä”ißõÚýÔ©â/hÞx|Ç­é®#ÔÕÜ­ÜgjùRŒžx#ó­ßøJü9ÿ�Aý+ÿ�#ÿ�­âoøýðçý…Wÿ�DË]�y¯hñüsñuÜšµ‚[Kel±Ì×(ÈDÈ œﯼUáÖÓîUuí,“�ä|ð}ë‘ðçü—ïׯþ€•躇üƒn¿ë‹ÿ�#@Š<=‡ôÔ}wLW[Xƒ+]Æ;šã~"ëú5׉ü %¾­a2A«‡•£¹F®,Aà{šôþE½/þ½"ÿ�Ðq?äkøÿ�a¡ü…�v?ð•øsþƒúWþGþ5“¤øŸÃé©k¬ú÷ÊÈMÜcpû4##žFA®¶²4où xƒþ ÿ�¤ÐP5ñ ÄšÏÃÏAµ§K4–2ªGÒ31Úx�MXðO‰´ xvµ½69cÓ-•Ñîã ¬"PAðjçÄù&¾#ÿ�°|¿ú «ÿ�’yá¯ûZÿ�襠 Þ'ÐÄúD‹®i…+€Ì.ãÀÈLdæ¶?á+ðçýô¯ü üi·ÿ�ò5èßõÆçùG[4äß 5ýÓPñ³\êö‰¼Cs$FK”]èO ¹<q]g‰üOáù¼'¬Ç»¦<c:ª­Üd±1¶�äÖ'Âù xóþÆ[¯ç]Šÿ�äN×?ì?þ‹j�?á+ðçýô¯ü ükÏu½F“ã…îÓV°kh¬.VI–å !!° g�׬כëßò^¼'ÿ�`ë¯äÔØÿ�ÂWáÏúé_øøÖ?‡üO Eø“\Óµýà ×qŒ‚ç¯JëëÃê5ûÜèf€<ÿ�ã^¿£_ü0¿·³Õì.'ia"8nQØâAžÍzü%~ÿ� þ•ÿ�‘ÿ�qß¿ä”j?õÚýµéÉ\xŸÃçÅštƒ]Ó kct¥¾×2[àg=Näk[þ¿ÐJÿ�ÀÈÿ�Æ‹ŸùtßûÝÿ�èËz× &ø)¯èÖ ,-ï5{ yÖY‰Žk”Fã‚s]gˆ|OáùtØV=wLvÖlBÝÆx1’zô�øV'ÀŸù%wývŸÿ�F5v>%ÿ�\?ö²ÿ�Ò˜¨�ÿ�„¯ÃŸôÒ¿ð2?ñ¯6ѵí>?xŠõõkµ“K‰sp‡—Àlàžå^Á^_¢ÉÅø›þÁ0ÿ�í*�îá+ðçýô¯ü ükÃ>'Ð"ÐbI5Í1K1Ú×qƒÌ®Gzëë¿ò/Eÿ�]§ÿ�ѯ@sñ;^ÑîüEà7¶Õ¬fH5¸ÞVŽáF»—–Áà{šôøJü9ÿ�Aý+ÿ�#ÿ�â>+ÈÍð÷þÃÑèK^@•¿‰ü><Y¨ÈuÝ0FÖ6ªíqà‘%ÆFsÔd~bµ¿á+ðçýô¯ü üh¶ÿ�‘ÇRÿ�°}§þŒ¸­z�ó/†wÝxÛâöóG4/¨DRHØ2°ÚÜ‚85鵿ÿ�¿ä~ø‡ÿ�a¿ô¯H 縆Öžâhá…^I*¨õ$ð*ºêúc̱&£hÒ³ùaêIlgn3×ãÒ§¹µ·½¶’Úî§·•Jɨ\zx"ª®‰¤¤ë:ivK2Éç º·nìã;¶ñž¸â€/ÑEæ™SšC1 £Z¶$“€8zîÿ�·ôoú ØàJpŸ•_šB° §Z¶xzîÿ�°4oúXà2…�aÝkšIñÖ“ Õ,Š.›z¥¾Ð˜ËkœûÈÖçöþÿ�A{ü Oñ¬;­I:Òc]FÓoX¯ÙÓ‰mpqsùšÜþÀÑ¿èaÿ�€ÉþÂ|>ž+ŸŠ?¦‚T–&–Çk£Sû¹:^™^gðú­¾(üF†’(–[¨ŠGîäèze�QE�QE�QE�QE�QE�QE�QE�QE�ä<;eâωþ Ñ5™mna¼Þa`­ò¦ñ‚Azýy‡d¸‹ã?€ÞÖža öØÚM¿tsÎ8ö  ¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬ø~xAüAybgÕ|¨m`™Ož™Üï(9ù:b5ýkÔ>߯ÿ�Ð ßÿ�Çÿ�Y6÷Úçü%š‹ æÆÔûpày—9Ùõü¨•ÿ�†wðgüüjÿ�øŸüEr ¾xkÅþ´Öu)µº–I„3*®È=…{Ûõÿ�ú[ÿ�àxÿ�â+Ͼ ÝêÑ|1°KM*+ˆD³bF»ØOïm¦€2õŸ°¸Ò#†}P‹»áo&éÐáLnÜ|r¢µáüÿ�?¿þ'ÿ�]ˆ¯u¶¼Ð7èÐ!š•ôÇÊ—¹Ç~}«wíúÿ�ý�­ÿ�ð<ñáºG ß|Rñ†å—P:}´ÂË2‡%ÕIÉÛƒÔö®²ëö|ðl6sJ·¶ä˜fá:þåÞª¿¼["iq5ÃY[ !7X6&í¼þUß__ëÇO¹C€)²~Ü8àÿ�±@y¥ü�ð}î‘eu,ú¨’hFÛp˜ÉPN>Ozæüeð{ÃZ¹á[;9µ©¨‹kƒ$ÊHN>î`óï^¿¡ßk£ÃúhMQkß‘°s•Ç|E»ÕŸÄþ3éQD뫃‹½ÛÛ‚vŒ}y ÿ�†wðgüüjÿ�øŸüEgéÿ�<!u{ªÃ$ú®Û[¥†<N™Úa‰ùù:åÏé^¡öýþ€Vÿ�ø?øŠÉÒoµÁ©k¥tX›å,>ÜÓöxxûœñƒøÐx¿ào…4/êú­¤ú™¸´µy£N¥K‘‘°qSxgàG„µ húÌú žòÆ ‰NC:8:d×añ÷Z‡ž YôxbˆØÊÅèb£içjÇ‚¯u´ð‡V- #e°G7¡K)pq³¥�qw_|#¹§Ù¬ú§•qÌäΙÊíÆ>Oöhÿ�Ã;ø3þ~5üOþ"º›ëípøŸH'E€8Šãjý´sÂgœV¿Ûõÿ�ú[ÿ�àxÿ�â(Ä<ð{Ã^#¼ñ<W³j ºf±=ŒTÊ37eNO¿¿®|ð†áýJú õS-µ¬³ iÐÊ„Œü2*ÿ�ýZ=CÆÆßJŠbÞ!¹i]ìØÙåGÊsõ⺿ßká=edÑ`D63†a|–rq³š�åáüÿ�?¿þ'ÿ�\†§ð{ÃVô/E6 lo­&šVi—xd;p•íÿ�o×ÿ�èoÿ�ãÿ�ˆ¯>Öîõcñ»Âò>•Ü-…ÈHEÞC 6Ní¼~T�¿ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬í#à/„o¢»igÕŠîhWlè>Ubðu¯Qû~¿ÿ�@+üüEdx~û\X/öh°6oî Íè;ÎGÜ 'ø›ð{Ã^ð=Þ³¦Í¨5ÔRFª&™YpÎà(ìk¯ÿ�†wðgüüjÿ�øŸüE'Æ«½Z_†7éw¥Eo –È·{Èýàí´W ý¿_ÿ� ¿þþ"€<¾o€žOY؉õ_*kYæcç¦w#Ä>N˜‘¿JÐÿ�†wðgüüjÿ�øŸüEuWÚçü%šs�âÆèûpäy–ù9Ùôüë[íúÿ�ý�­ÿ�ð<ñâ ¾xkÅþ´Öu)µº–I„3*®È=…oë<!aeÐϪ–k«xNéвLˆßÁ× jÿ�Á[½Z/†6 i¥Eq–lH×{ ýáí´×Wâíq´ØCè°(ûu™È¾Ÿ´G÷;œ �åáüÿ�?¿þ'ÿ�\^›ð‹Ã—µŸ É.¡ö ;î#a2ù…›frvã1í^éöýþ€Vÿ�ø?øŠómëU|E"éq5ÉÒâ ºÀQû¾wmç·  ?ðÎþ ÿ�Ÿ_ÿ�ÿ�ˆ¬íà/„u).fŸT4’)Û:…‘” ê?o×ÿ�èoÿ�ãÿ�ˆ¬ ßk‹¡D#Ñ`uófùèòÕûl #ñÇ øwX𥥔ºƒGªêiiqæÌ¤„%AÛ…<û×gÿ� ïàÏùøÕÿ�ð!?øŠƒâmÖ«'ˆ¼n4¸¡eÖã1*ÝoÞÛ—‚vŒ}y¯Gû~¿ÿ�@+üüE�y|?< þ ¼±3ê¾T6°L§ÏLîw”ü1þµ¡ÿ� ïàÏùøÕÿ�ð!?øŠê­ïµÏøK5,ͨ+öáÀó.0s³ëùV·Ûõÿ�ú[ÿ�àxÿ�â(€ø?£Ûh#ñ¾“fÒ5½¥ì1Fd ¶·R�¯X¯2ødóIãoˆ<B)N¡èÕ÷;[Œàf½6€ (¢€ (¢€<Ãã¢ÈþÒÖ<¹N±nñ§ƒŠ°|ñp­7Ä÷GÆ‹Fˆц*‹ã{ðžÁK­[£<?×ký³}ÿ�BÖ«ÿ�-øõ�yÕ×¼VÞ,Ó`›â&¢×2X]8¸KDM^Ü2… Ñ‹)?î Õ? uö}Ïñ'Ä<õÚBÿ�^+VëV½>8ÒŸþíH0Óo@ŒÉm–K^GïqÔ瑌ó¿í›ïúµ_ûùkÿ�ǨÏþéϤ|@øc%ýÕûÅ-77o¾Y2’±üqôêõæ_%yþ'üE’KymÝ¥±ÌR•,¿»“®ÒGäMzm�QE�QE�QE�QE�QE�QE�QE�QE�æ>4»¶±øÏà;›»ˆ­àHo·K+„UÌD “Àä^^oâ¯ù.�ÿ�®7ÿ�ú$Ðcÿ� _‡?è?¥àdãY6þ'ðøñf£!×tÁXÚ¨oµÇ‚D—ÏQ‘ùŠëk"ÛþGKþÁöŸú2â€øJü9ÿ�Aý+ÿ�#ÿ�óß‚šþaðÂÂÞóW°·e˜˜æ¹Da™8'5ë5æÿ�ä”ißõÚýÔ©â/hÞx|Ç­é®#ÔÕÜ­ÜgjùRŒžx#ó­ßøJü9ÿ�Aý+ÿ�#ÿ�­âoøýðçý…Wÿ�DË]�y¯hñüsñuÜšµ‚[Kel±Ì×(ÈDÈ œﯼUáÖÓîUuí,“�ä|ð}ë‘ðçü—ïׯþ€•躇üƒn¿ë‹ÿ�#@Š<=‡ôÔ}wLW[Xƒ+]Æ;šã~"ëú5׉ü %¾­a2A«‡•£¹F®,Aà{šôþE½/þ½"ÿ�Ðq?äkøÿ�a¡ü…�v?ð•øsþƒúWþGþ5“¤øŸÃé©k¬ú÷ÊÈMÜcpû4##žFA®¶²4où xƒþ ÿ�¤ÐP5ñ ÄšÏÃÏAµ§K4–2ªGÒ31Úx�MXðO‰´ xvµ½69cÓ-•Ñîã ¬"PAðjçÄù&¾#ÿ�°|¿ú «ÿ�’yá¯ûZÿ�襠 Þ'ÐÄúD‹®i…+€Ì.ãÀÈLdæ¶?á+ðçýô¯ü üi·ÿ�ò5èßõÆçùG[4äß 5ýÓPñ³\êö‰¼Cs$FK”]èO ¹<q]g‰üOáù¼'¬Ç»¦<c:ª­Üd±1¶�äÖ'Âù xóþÆ[¯ç]Šÿ�äN×?ì?þ‹j�?á+ðçýô¯ü ükÏu½F“ã…îÓV°kh¬.VI–å !!° g�׬כëßò^¼'ÿ�`ë¯äÔØÿ�ÂWáÏúé_øøÖ?‡üO Eø“\Óµýà ×qŒ‚ç¯JëëÃê5ûÜèf€<ÿ�ã^¿£_ü0¿·³Õì.'ia"8nQØâAžÍzü%~ÿ� þ•ÿ�‘ÿ�qß¿ä”j?õÚýµéÉ\xŸÃçÅštƒ]Ó kct¥¾×2[àg=Näk[þ¿ÐJÿ�ÀÈÿ�Æ‹ŸùtßûÝÿ�èËz× &ø)¯èÖ ,-ï5{ yÖY‰Žk”Fã‚s]gˆ|OáùtØV=wLvÖlBÝÆx1’zô�øV'ÀŸù%wývŸÿ�F5v>%ÿ�\?ö²ÿ�Ò˜¨�ÿ�„¯ÃŸôÒ¿ð2?ñ¯6ѵí>?xŠõõkµ“K‰sp‡—Àlàžå^Á^_¢ÉÅø›þÁ0ÿ�í*�îá+ðçýô¯ü ükÃ>'Ð"ÐbI5Í1K1Ú×qƒÌ®Gzëë¿ò/Eÿ�]§ÿ�ѯ@sñ;^ÑîüEà7¶Õ¬fH5¸ÞVŽáF»—–Áà{šôøJü9ÿ�Aý+ÿ�#ÿ�â>+ÈÍð÷þÃÑèK^@•¿‰ü><Y¨ÈuÝ0FÖ6ªíqà‘%ÆFsÔd~bµ¿á+ðçýô¯ü üh¶ÿ�‘ÇRÿ�°}§þŒ¸­z�ó/†wÝxÛâöóG4/¨DRHØ2°ÚÜ‚85鵿ÿ�¿ä~ø‡ÿ�a¿ô¯H Š«¨éöº¶=…ìfKiФˆ© û©~³¢ðއ ê^GfÂtœ\«yòq M€ãv1··NøÏ4·EP™üneO i Ä*jØ’N�áë»þßÑ¿è/aÿ�)þ5Â|nU i À2jØFAáë»þÀÑ¿èaÿ�€Éþ‡u®i'ÇZLƒT²(ºmê–ûB`-®sì#[ŸÛú7ýì?ð%?ưî´=$xëIŒivAM½b¿gL%µÁÆ=ÏæksûFÿ� E‡þ'øP ðúx®~(üFš RXš[®ŒOîäèEzeyŸÃè"¶ø£ñ"H¢Ylv¢(U»“ é”�QE�QE�QE�QE�QE�QE�QE�QE�W|Pðí—‹>'ø+DÔeµ¹†óy…‚·Ê›Æ ºŽÕëõæ5’â/Œþ{Xy„7Ûci6ýÑÏ88ãÚ€*ÿ�Ã;ø3þ~5üOþ"³áø áñ剟Uò¡µ‚e>zgs¼ çäéˆ×õ¯Pû~¿ÿ�@+üüEdÛßkŸð–j,4X ›PWíÃæ\`çg×ò WþßÁŸóñ«ÿ�àBñÈ|2ø=á¯øÓYÔ¦ÔêY$V̪¸W pTöíÿ�o×ÿ�èoÿ�ãÿ�ˆ¯>ø+w«EðÆÁ-4¨®!͉ïa?¼=¶š�ËÖ~xJÂãHŽõB.ï…¼›§C…1»qòuÊŠÕÿ�†wðgüüjÿ�øŸüEt~"½ÖÚó@ߣ@„jjT Ðw*^>çùö­ß·ëÿ�ô·ÿ�Àñÿ�ÄP†é<7}ñKÄ>–]@XéöÐK ,Ê—U''nSں˯ÙóÁ°ÙÍ*ÜjÛ’6a›„êû”hzªürñl‰¥Ä× el$„Ý` ؘ;¶óùW}}¯>ä�<¦ÉûpãƒþÅ�yæ—ðÁ÷ºE•Ô³ê¢I ImÂc%A8ù=ë›ñ—Áï h:ç…lìæÔ Z¦¢-® “)!8û¸QƒÏ½zþ‡}®é¡4HE¬Xc|FÁÎ6WñïVøÏ¥E®® j.÷ol Ú1õæ€þßÁŸóñ«ÿ�àBñŸ§üð…Õî« “ê»mn–ñ:gi†'çäë—?¥z‡Ûõÿ�ú[ÿ�àxÿ�â+'I¾×¥®•Ñ`bo”°ûpOÙáãîsÆã@uâÿ�¾м«ê¶“êfâÒÕæŒI:•,FFÁÅMáŸÖ<)£êw3ê‚{Ë.$ : èàlé“]‡ÄÝiþxgÑáŠ#c(g¡Š§œl« ½ÖÓÀ~X´h$Œi–ÁÞ…,<¥ÁÆÎ>”ÅÝ|ðŒ:æŸf³êžUÄs3“:g+·ù?Ú5£ÿ� ïàÏùøÕÿ�ð!?øŠêo¯µÃâ} �â+«öÑÏ žvqZÿ�o×ÿ�èoÿ�ãÿ�ˆ ð?Áï xŽóÄñ^ͨ*éšÄö0yS(ÌhxÝ•9>üVþ¹ðÂw‡õ+è'ÕL¶Ö²Ì§B7*3òtÈ«ÿ� nõhõ}*)‹x†å¤ w³cg•)Ï׊êüO}®7„õ•“EØÎ…ð8YÉÆÎh•ÿ�†wðgüüjÿ�øŸüErŸÁï YüOм9Ú±¾´šiY¦]á`íÀzW·ý¿_ÿ� ¿þþ"¼û[»ÕÆï ÈúTKp¶!!y 0Ù;¶ñùPÿ�Ã;ø3þ~5üOþ"³´€¾¾Ší¥ŸT+¹¡]³ ùUˆÁÖ½Gíúÿ�ý�­ÿ�ð<ñ‘áûíq`¿Ù¢ÀÙ¿¸'7 `ï9r€<ŸâoÁï xCÀ÷zΛ6 ×QI¨šeeÃ8€£±®¿þßÁŸóñ«ÿ�àBñŸ®õi~ߥޕ¼&Xs"Ýï#÷ƒ¶Ñ^ƒöýþ€Vÿ�ø?øŠ�òù¾xA<Agb'Õ|©­g™ž™Üù:bFý+CþßÁŸóñ«ÿ�àBñÕ\_kŸð–iÌtX‹ íÑæ[äçgÓó­o·ëÿ�ô·ÿ�Àñÿ�ÄPˆ|2ø=á¯øÓYÔ¦ÔêY$V̪¸W pTö¿¬|ð……”sC>ªY®­á;§B6É2#\1«ÿ�nõh¾Ø%¦•Ä"Y±#]ì'÷‡¶Ó]_ˆoµÆÓa¢À£íÖg"ø~ÑÜîp(•ÿ�†wðgüüjÿ�øŸüEqzoÂ/]üZÖ|/$º‡Ø,ìc¸„Ëæm™ÉÛŒ|ǵ{§Ûõÿ�ú[ÿ�àxÿ�â+Í´{­T|}ñ‹¥Ä×'Kˆ<&ëGîùÝ·žÜb€,ÿ�Ã;ø3þ~5üOþ"³´?€¾Ôt¤¹š}PHÒH§lèFQü€W¨ý¿_ÿ� ¿þþ"²<3}®.…E×Í›æ7 ËWí²€<Ç|7áÝc––Rê «©¥¥Ç›2’•n`óï]Ÿü3¿ƒ?çãWÿ�À„ÿ�â*‰·Z¬ž"ð!¸Òâ…—[ŒÄ«u¿{n^ Ú1õæ½íúÿ�ý�­ÿ�ð<ñåðüðƒø‚òÄϪùPÚÁ2Ÿ=3¹ÞPsòtÄkúÖ‡ü3¿ƒ?çãWÿ�À„ÿ�â+ª·¾×?á,ÔXh°66 ¯Û‡̸ÁÎϯåZßo×ÿ�èoÿ�ãÿ�ˆ àþm xÆúM›HÖö—°Å‚Ø ÝH½b¼Ëá“Í'¾ <ñ¥:„[£WÜín3šôÚ�(¢Š�(¢Š�óŽ‹#ø;KXdòå:ŸGÆvœ>*Áð_Ä9´ßÝ"- ?Füª/ìWÂzC,FµlBŒdðüs]¯öÍ÷ý Z¯ýüµÿ�ãÔçW^ñ[x³M‚oˆš‹\Éatâá-6{pÊ7F,¤ÿ�¸+Tü5×Ù÷?ÄŸó×i ýx­[­ZôøãJøGµ ÃM½3%¶X-y½ÆSžF3Î6ÿ�¶o¿èZÕïå¯ÿ� ?øW§>‘ñ⌗÷Wï¶@ÜݾùdÊHrÇñÇÐW«×™|<•çøŸñI-å·v–Ç1JT²þîN»I‘5é´�QE�QE�QE�QE�QE�QE�QE�QE�W›ø«þK‡€?ëÿ�þ‰5éæ5´·¾øÏà;k¨–X^íÈÝ"$~¢€=>²-¿äqÔ¿ìiÿ�£.)¿ð‰hô ·übZøcDoê°6i¶n«ƒ€L— Ÿüt~TÚW›ü ÿ�’Q§×iÿ�ôcW_ÿ�–ÿ�@»Èן|ðþ“¨|1°¸»±ŠYšYvœHhºñ7ü~øsþ«ÿ�¢e®‚¸xkF·ºðÈ‹O…ºÌq¾ù”Å)Çè+¦ÿ�„K@ÿ� ]¿äh‹ðçü—ïׯþ€•躇üƒn¿ë‹ÿ�#^QáýJ—ã—‹ìÞÆ&·†ÎÙ£ŒŽ”Lãó®úûš é÷,4È1ÐІÿ�"Þ—ÿ�^‘踉Ÿò5ü?ÿ�°ÐþBµ¼#áãÁzÒé°¼’iÖîìAÉ&5$×/ñÃúM¯‰ü 1F“êá$�}åÀàЭVFÿ�!OØA?ôš oü"Zýíÿ�#\ö…á_ø¢'Ó¡dŠòp ÛDN?hKâGü“_ÿ�Ø>_ýÕÉ<ð×ý‚­ôRÖÄ è¶¿<A<t),v2²° í5cÁ^Ñ.<áÙ¥Ó`y$Ó-؃’LJI  Ûÿ�ùôoúãsü£­šà5ß èÑxÓÂǧ±Í-Б@8` $gñ®›þ-þvÿ�‘ CáGü„¼yÿ�c-×ó®ÇÅò'kŸöŸÿ�EµyçÃé7z‡–âÆ)>!¹Ž0Ãî¨<]7Œ|1¢[ø#_š-6’=6áÑ€9FÄ�í+Íõïù/^ÿ�°u×òjëÿ�áÐ?èoùóÍwÃúL<+f–1-¼¶7,ñíŠ�õÊÆðßúCþÂ7ú£þ-þvÿ�‘®gÁÞÑ®?·üí>òõ›ˆÓ üª6àPoŽßòJ5úíþŒZôŠò_^Òtÿ�†7÷–1E2Ë£‘™zü"Zýíÿ�#@¹ÿ�‘ÇMÿ�°}ßþŒ·­zâî¼1¢/ô¨F›�ôÛÇeÁÁ"K`þ<:Ûÿ�„K@ÿ� ]¿ähøÿ�$£Nÿ�®Óÿ�èÆ®ÇÄ¿ò ‡þÂ_úSy·ÀýJÔ~ÛÏwcÒ›™Fæà5t>?ðÞià˹íôøc•e·Ã(9ž0C@ýy~‰ÿ�'âoûÃÿ�´«·ÿ�„K@ÿ� ]¿äkÌôKÚÄ-eµIÖ,p1súš�öZÆð¯ü‹Ñ×iÿ�ôkÑÿ�–ÿ�@»È×=௠è·>Y&Ó¡wû]ÚäƒÐ\È�ü€—ñ[þFo‡¿ö‹ÿ�BZôêñg⥽ŒQ¬úäQÊ}å,¼ôøD´úÛþF€mÿ�#Ž¥ÿ�`ûOýqZõÂÃáüD¾·:t>Jé6 +¡ÿ�„K@ÿ� ]¿ähøuÿ�#÷Ä?ûÅÿ� µzEyÂØ"µñŸÄ!@‘G©"ªŽ€aø¯P Š«¨ÙCNžÐ]\Ú™¯Ÿlû$ÝNáYÑxpÅz—?ÛzÃ…œMå=È(p›v·î={ö  º(¢€<Ïãs*xSHf!TkVÄ’p]ßöþÿ�A{ü Oñ®ãr«øSHV”ëVÀ‚2]ßöÿ�@‹üOð  ;­sI>:Òd¥‘EÓoT·Ú�™mp3ŸcùÜþßÑ¿è/aÿ�)þ5‡u¡é#ÇZLcK²Úmëû:`‘-®1î3[ŸØ7ý,?ð?€8O‡ÓÅsñGâ4ÐJ’ÄÒØít`Êw'B+Ó+ÌþA·ÅˆÐÁEËcµB¨ýÜ�¯L Š( Š( Š( Š( Š( Š( Š( Š( ¼ßÇÚ7Фñ¿†üEá½.ßP:dW ñÍp±ŒÈ»yɉ<zW¤Q@kÿ� ÅŸút¯ü/ÿ�T¢¿ø­·u©i…î-¡·)ý ˜6•ûÝOš!^¯E�y¯ü$èIÒ¿ð`¿üUs¾ ·ø§àï Ûè°x>Âháw`ó_Æîb…ñÞ½²Š�ò-^ã⮯.™$žÓc6‹v¡uùŠ«.ÍÓç?•iÿ�ÂAñgþ„+ÿ� ÿ�ÅW¥Q@#§Ú|R°ñÖ±âeð…‹M¨ÃO_DZB*Ÿ?ÃÞº õ¿‹ÛÉ ðV–©RF ¼dcûÕéÔP”i‡Åm'E±Ócðf˜éio í¨&X"…üÞÕ•â;Š~ Õ4+Ù|aiW‚éwñÇŽ/ÓŽÕí”Pšÿ�ÂAñgþ„+ÿ� ÿ�ÅV}ßÅ[KT½_é¬Ú„É+©Ô V5æô@õª(ȼCuñW^ðËàÍ:4¼¡fPBÀ0ÆF[©4Kÿ�ŠÚ6§iqø3Mt³µŠÝYõÜB(PNâ½fŠ�ò+늷ÚΕ©7ƒ´Õ}9ådA¨&z9ù»f´ÿ�á ø³ÿ�BN•ÿ�ƒÿ�â«Ò¨ ð½¿Å? ÜkrÅàû ©¨Ë|âKøÆÖs’ÓëÍjëÿ�µ}ÿ�L“Ášdiym%»:ê •¥I7^kÕè 5ÿ�„ƒâÏý :Wþ ÿ�Š®rþÛâ•ïŽtŸ·ƒìm> aXÖþ=ŒIùóž{W¶Ñ@kÿ� ÅŸút¯ü/ÿ�Yš=ÇÅ]íþ_ƒ´Ù>Ùy%ÛnÔå/Œótâ½vŠ�ñ?[üSñ…î4Yüa s:1xoã,6°?Äøí]ü$èIÒ¿ð`¿üUzUåßüV—[µÔσ4ÀööÓ[„þÐL#DÄýî£Ê™«¿ð|Yÿ�¡'Jÿ�Á‚ÿ�ñUéTPˆøÓâ—‚ü5oá £IMó_Ææ9þÅhë÷uým6_i±$MA \uoöq^»E�y¯ü$èIÒ¿ð`¿üUsv?­>!ê,_X™ï-Õ¢7ñì�läùÏÈ?:÷(Íá ø³ÿ�BN•ÿ�ƒÿ�â«?E»ø«¢é¢Ê?é²(šiw6 €æIB>÷bدZ¢€<CżK¨è7sxBÆ&Òo’ñwñåH8l¿N;WKÿ� ÅŸút¯ü/ÿ�^•E�y*]üUOÏ«é¦Im#µ)ý ˜Ø½×ç?•hÂAñgþ„+ÿ� ÿ�ÅW¥Q@wðËBñ›ªx£TñŸŒú­ÚN‘G2È8 žA>£­z%PEPEPñCÃ·Š¼9gi¢›QwoÖ.Xª¸È÷#õ¬ß´üdÿ�Ÿ/ßSÿ�ñUéP–Ioñ~]^ÛRkOùÖðKnŠ}¥dhÙ‰ù³œÄ¸ç¹ü-ý§ã'üùx;þúŸÿ�НH¢€<ÿ�áï‡<K¥ø‡Äú׉“OK]íÙVÅØ òÕÁá¹y{žõèQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@PÕ5Ó…™KI.>Ñu¹ʾXoã9# z}*ýdëºTšªéÂ?²ÿ�¢ßÃtßh‹I;yCÚ€5¨¢Š�‚öàÚXÜ\ˆÌ¦šA `g�ž9¤°¹kÝ:Úé¡hh’CJÚHÈ$gqMÔ­š÷J¼´O/tð<cÍ]Ë–R>aÜsȦé6m§èÖ6Oäî··Ž#ä&Èòªʽ—Ža@(¢Š�¡k¨½Î¯¨X›I#[AYË)Yw‚N�9Ç9ø«õ“a¥Iiâ-_Ro²ì½òâÛ/ȤퟘsÇsëZÔ�U ½Eíµ]>Ém$•n̦VP!Ú»¹äç§«õ“¨iR^kú> ¿eÙbf/æÅºO6-³òŸ^¹PµQ@5­Eô"{ä´’í¢�ˆ#eV|8,@ïÜÕúÉñ6•&¹áë½6/²ïœ(k‹Ì‹†æ\ŒŽ=kZ€ (¢€(iš‹ê&ô5¤–ÿ�fº{p]”ù¡qóŒÏCƒÅ_¬J“KmLÉö_ô»ù.—ìñlá‚¿Ÿ™øäñÛÒµ¨�ªÚ/ý¾4ϲI°Ú›´î] îÛ³Î{çâ¯ÖIÒ¤>.]cýÊ×ýWï²d ÷ó÷8鎸=¨ZŠ(  Ö¢úN‘=òZIvÑ�D²«>H wîjýdø›J“\ðõÞ›ÙwÎµÅæEÃó.FGµ­@Q@4mEõm*×´’Õ¤,<™X®¯U$sŒþ5~²|5¥I¢hú|¿eߟ²ÅåÇó;7 “Ï<úœžõ­@PµÔ^çWÔ,M¤‘­ ˆ¬å”¬»Á'�ŒcœŽüUúɰҤ´ñ¯©7Ùv^ˆyqm—äRöÏÌ9ãŽ9õ  j(¢€(jš‹éÂÌ¥¤—hºŽÜ„e_,7ñœ‘=>•~²uÝ*MUtáÙÑoáºo´E¿„$¼Œ?¡íZÔ�QE�QE�QE�QE“®ê²iK§þËþ• «}¢]œ9 íàåýzÖª¦œúˆ³ w%¿Ù%[Ì ü àQÏ¥_ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+…×þ)隉.t#¢ë·÷–è’Hl-VU€#øÁïé@Õæÿ�ð¸ì¿èNñþ ÿ�LOŒú|…‚xGÅìQ¶¶Ý5N¡ùúÐ¥Ñ^g?Æ­6Úž øº(cžI4åUQêI“KÆ:âš x¾H¤PÈ馩VSÈ ‡äP¥Ñ^j~3éâEŒøGÅâF‚ÿ�f®HÉÆþƒ#óïø\v_ô'xÇÿ�ƒÿ�‹ H¢¼Âß㆑w$ÑÛx_Ås<²UŽÁÆÞŒœcRIñŸO†6’_ø½FK6š Ç}�z]æÿ�ð¸ì¿èNñþ ÿ�PIñ¿HŠêY</â´¸˜M§ y02v3'Ò€=>Šóø\v_ô'xÇÿ�ƒÿ�‹¦§Æ}>U-„|^ê RWMSÈ8#ïõøP¥Q^cuñ»J²·{‹¿ ø²ÞÆéeÓÕrp2L˜š‘>3XHŠéá20ʲéªA£ç J¢¼ÓþNçy?ð‰x»ÍÛ¿göjîÛœgúfŸÿ� ŽËþ„ïÿ�à°ñtéW˜ZüoÒ/ci-</⻄V(ÍžŽ ‘'_j•þ3éñ(i<#âôRB‚ÚjŽIÀ©$Æ€=*Šóø\v_ô'xÇÿ�ƒÿ�‹¨Æý ^‹#ዲž`ƒû=7”Î7mó3Œñš�ôú+Íÿ�áqÙÐãüþ.™Æ}>hÖH¼#â÷F ºjôétW˜]üpÒ,"Þx_Åvñ– m=z ™:Ôÿ�ð¸ì¿èNñþ ÿ�@‘Ey¨øÏ§™1á™+ýš¹�çúÈÓ¿áqÙÐãüþ.€="Šó OúEýºÜYø_Åw1 IžŽ§yb¤tEžñzjÓTnlgçäàÊ€=.Šóø\v_ô'xÇÿ�ƒÿ�‹¨㆑%Ü–‰áµÌ@4®ž…Є¯™(Óè¯6?lUK7ƒü`�$é‹Çþ?HŸ¬$Etð‡ŒeYtÕ QóÐ¥Q^aqñ¿H´h–çÂþ+„Ìâ8„šz.÷=s'$ú Ÿþ—ý Þ1ÿ�Á`ÿ�âèÒ(¯5_Œú{³ªxGÅìÈv¸j§�àüüNÿ�…Çeÿ�BwŒðX?øº�ôŠ+Â^*±ñŸ‡âÖtè®b¶‘ÙÜ WNBGë[”�QE�QE�Q\/¼a®x{Yðö• i–·×z³N¡.$(–ðr�ûǯ¥QþÞø¯ÿ�Bn‘ÿ�ƒÿ�ÅP¤Q^^ž(ø¦÷óYéX¢IY~Ü8W.Îïöò÷«Ûßÿ�èMÒ?ð`?øª�ôŠ+ƒðOŒµísÄúÞƒ¯é¶zdp»‹y¼Á™à3Ó¦ÞPEPEPEPEPEPEPEPEP^o ÿ�Ézñgýƒ­’פW’G¢G­ütñ<R_j6‚; f cvð3|«Á*yëu ¯Ö¿ì"ÿ�úVgü 6ßô0xŸÿ�3eh¾·–mX{Ä‹åß2 š´ËŸ‘N'ž´³ñ#þI¯ˆÿ�ì/þ‚jÇ?äžxkþÁV¿ú)k’ñç‚íì¼®Ý.·âLVR8Ž}VWFÂôe'{TþðM½ß‚4 –×<E—M·¤:´¨‹˜ÔáT�;Ò€:ûŸùtßûÝÿ�èËzׯ?ŸÀöëâ›·¼HCÙ\¾ã«M¸aà9�îäwÀô­Oø@m¿è`ñ?þfÿ��ç¾ÈÏñþò6®ÓÅ¿ò*j_õÄÿ�1^YðëÂßøƒÆÑ6¯­Â-µ‡ˆ5¾£$m Ër䙽Ï5Õø—Àööþ¿”kÞ$r±¶MZfSÏpO4è5æþ*ÿ�’áàúãÿ�¢MnÂmÿ�C‰ÿ�ðs7ø×â? ÁoñwÁvW×nb¼&i5)XöÄOÈäåsßE�{EdxkþAsØB÷ÿ�Je¬¯ø@m¿è`ñ?þfÿ�ËÐ<o6+{ĉ‹Û´ÂjÓ(ùn$À=N2OrI üiÿ�’G®ÿ�»þŽºÍþE½/þ½"ÿ�ÐyÅA¦|3Ö/Y×®1"ºÔå–6̨9V8=<WK¢øÚm N”ëÞ%RöѶÔÕæUQÀàPÇüÔû„íjè«Í¿á ·ÿ�„ïìßÛ¾"Ûý™æoþÕ—úÜcvsjÝÿ�„Ûþ†ÿ�àæoñ  ?‚¿ò*j¿öºþk]‰äý„,¿ô¦*òï„þƒSðæ¥3êúå¹MVâ=¶º”‘)ÆÞHSËzžõÔkþ·‡N‰Æ½âGÍí¢aõi˜|×Œàž£9±�РW›Üÿ�ÉÆÙÿ�Ø´ô{Öçü 6ßô0xŸÿ�3psøNøék¦ÿ�kë…A3yçR“ÎÎa´Iœíã;zf€=¢±¼%ÿ�"¦›ÿ�\Gó5™ÿ� ·ý 'ÿ�ÁÌßãY^ð=½Ç†ì%:÷‰´@íV™TsØÅ�Tøçÿ�"-¯ý…-ÿ�›W¦WŠ|_ð¤:Wƒí®W×.IÔ M—zŒ“ ÎyÚÇô5ßÿ�Âmÿ�C‰ÿ�ðs7øÐ­·üŽ:—ýƒí?ôeÅkןÁà{vñMü?ÛÞ$,­ŸpÕ¦ÜróŒœ6ð;dúÖ§ü 6ßô0xŸÿ�3�aü ÿ�’Q§×iÿ�ôcWQâoøýðçý…Wÿ�DË^oð{Âpj¿ ìnßW×-™¥˜yvš”Æ0äpªp+¡ñ‚mà»Ð”k¾#7RT%õiX¯î¤9\žGb}hÑëÍ|?ÿ�%óÅÿ�öµÿ�ÐV·¿á¶ÿ�¡ƒÄÿ�ø9›ükÑ<'ßüO§_\U‚ÊÝÄɨȳ>UxgÎXzÒ€=‹Pÿ�m×ýqäj¶ÿ�"Þ—ÿ�^‘è¹ÛßÛ%…Ãx˜â&8:ÄĽA¢øÚ]Nëþ%RöѶÔÕæUQÀàPŠÿ�òðýŒ¶¿Î½"¼_âG„àÓïü««ë“}§^·„›JI `Ÿ¼™?+Ì9ÞÂmÿ�C‰ÿ�ðs7øÐ®ÿ�!OØA?ôš ׯ?Òüo&£­¡×¼H¾Uê +«L £ÂrÇ<žqŸ@jÔÿ�„Ûþ†ÿ�àæoñ  ??òJ4ïúí?þŒjôŠó?òJ4ïúí?þŒjôŠ�(¤fTFw`ª£$“€Qî@#U± … ‹„ä1ž½ÏOZ�¿EP™üAž+oŠ?fžTŠ%–ûs»Qû¸ú“]ßöþÿ�A{ü Oñ®â \üQøs ñ$±4·Û‘Ô2ŸÝÇÔîÿ�°4oúXà2…�dÛëº@ñv¢çU±Øl-@o´& \du÷koèßô°ÿ�À”ÿ�ɷдƒâíE•c°XZ¿gLd¸Ééì?*ÖþÀÑ¿èaÿ�€ÉþÁø:â¯^=šÞh扡±Úñ°e8„‚=ëÓk̼o ¯Æ¯Ão pİØíHÔ*ŒÂ Àõé´�QE�QE�QE�QE�QE�QE�QE�QE�W’G«É¤|tñ<‘é:Ž¢^ÂÙJXÆŒÉò¯'s/ëuæúü—¯Ø:×ù-�nÂmsÿ�Bg‰ÿ�ðþ;YZ/Œn"›V#Â>$“}ó1 ?/ÈœÞõãõ¯A¬mý~µÿ�aÿ�Ѐ8¿x¶âïÀZí»xSÄ6ÂK)Í<L¯V"BqøŸÁÞ/¸¶ðFn¾ñâ-6ݰÁI1ÊL àõ·¾$É5ñýƒåÿ�ÐMXð'ü“Ï Ø*×ÿ�E-�sóøÆàø¦Â_øD<H Ù\¯–`‡seà9½Æ9úŠÔÿ�„Úçþ„Ïÿ�à<?üvµnäqÓìwÿ�£-ë^€<Oá׉¦²ñ¤_ ëwFãXy [ÃhN[å|È0ßLzêüKã‰ü7ð‰" ä‚«Ï|JjŸÂÏùþ ÿ�ØvOæÕÚx·þEMKþ¸Ÿæ(3þkŸú<Oÿ�€ðÿ�ñÚàüGâyçø»à»Óá­r&·Šð i!ŒK6èˆù�ƒŽ§$që^Ñ^oâ¯ù.�ÿ�®7ÿ�ú$Ðçü&×?ô&xŸÿ�áÿ�ãµ— xÆâ:Uñ$™½»mÉ$ ÜHq̽Fp}Á¯@¬ È.oû^ÿ�éL´æÿ�üS>£ðÏXµ kÖk ‹3ÝCƘ•%d'œc§R+¥Ñ|es…§F<âY[F»ÒÞ­…Þô¦|iÿ�’G®ÿ�»þŽºÍþE½/þ½"ÿ�Ð�pÿ�ð—ÜÂwöøD¼E»û3g“äE¿ýnw¬Æ;u­ßøM®èLñ?þÃÿ�Çj×üÔû„íjè¨Åþøž};Ú”Iá­rð>«q&ûXce\íùNéÌ;ÿ�:ê5ÿ�ÜM§D§Â$¶¹à„‹ˆÎ8—©Æ¹_à¯üŠš¯ý†®¿š×câ_ùÃÿ�a /ý)Š€2¿á6¹ÿ�¡3Äÿ�øÿ�®Î~:Zêðk×A1}ÜGœÇxf6öÎsžÕíæ÷?òq¶ö-ýô¹ÿ� µÏý ž'ÿ�ÀxøíexkÆ7xnÂ!áJ 7Ç%[žÙ”W Ö7„¿äTÓëˆþf€<·âÿ�‰¦Ô¼møo\±PüÛ¸cT8ÏË•œžÜWÿ� µÏý ž'ÿ�Àxøísÿ�ÿ�äEµÿ�°¥¿ójôÊ�óø<cp<S/ü"$%¬­—ËC¹póœŸÞã<} jÂmsÿ�Bg‰ÿ�ðþ;Z¶ßò8ê_ö´ÿ�Ñ—¯@/ð{ÄóéŸ ìmSÃZåò¬³>ÒÚ6Ë“Áiãé]ˆ<_q5Þ„O„¼G—©+€ðD þêAµq'^sÎ8“àOü’;þ»Oÿ�£ºÇï‡?ì*¿ú&Z�§ÿ� µÏý ž'ÿ�Àxøíp:'‰§‹ã?‰ï‡†õÉk+u6© fhð«Ë3�Ø&½ª¼×Ãÿ�ò_<_ÿ�`û_ýh^÷Æ—-ap¿ð†ø™s ›xp8?ôÖ Ñ|esƒ§F<âYÛF»ÒÞ­…Þô®ËPÿ�m×ýqäj¶ÿ�"Þ—ÿ�^‘è€<£âG‰ç¾¿ðs7†µË_³ëÖòq `ÌAû‰‰XöÞ»ÏøM®èLñ?þÃÿ�Çkâ¿ü„¼ÿ�c-¯ó¯H ?Òücq£­°ð‡‰̽V*°C”ÿ�G„a¿{׌ý­OøM®èLñ?þÃÿ�ÇkWFÿ�§ˆ?ì ŸúMkЛü ÿ�’Q§×iÿ�ôcW¤W›ü ÿ�’Q§×iÿ�ôcW¤P2«£#¨ea‚È"³WúªªèÚpUXÕ@µL�‡(ò=JÓ¢€ (¢€<¿â?Úÿ�áeü<û‘öŸ6÷Ëóó³>\}qÏJë¿â³ÿ�¨þF®Wâ ñ[|Qøs4ò¤Q,·ÛØ*ÝÇÔšîÿ�·ôoú ØàJ�sPÂ]ÿ� V¡ìO7ì6»³æíÛ¾|cß;³øV§üVõÿ�ÈÕ¾»¤j.u[†ÂÔûB`‘%ÆG_qùÖ·öþÿ�A{ü Oñ ?ð7ÛáqøïûGìÿ�jòl·ýŸvÏõCÝÏL~5ê5æ~¸†ëãWf·š9¢hlv¼lOî@àŠôÊ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+×~Ŭx¦óÄÞ%×4««´D”X\y@…P�àggµßQ@oÿ� ¢÷þŠ'Œðbi‘ü#¸ˆ¹â‹ÈÛßmù›¦O©à~UétP™\ü–öÚKk¯ø¶{yT¬‘K|Y]OPAàŠX>Ïko½¿ü]  HãŽüª¢€��¯L¢€<Ðü#¸3,Çâ‹Ì¨¥UÍùÜà¡Ú¹úJü*‹ßú(ž1ÿ�Á‰¯H¢€<¶×àºØËq-ŸüSo%Ìžlï æÃ+ÿ�yˆ1÷5<ßî."h¦øâé#a†G¿$î z]æÿ�ðª/è¢xÇÿ�&«Kð`O}o}7Ž<S%ݰaïy™" 0ÛXŒ®GkÔh 7ÿ�…Q{ÿ�EÆ?ø14ȾÜB…"øâøÔ³1 ~@,Ä’~¤’O¹¯K¢€<¾÷àÑԬ䴿ñ׊®­¤Æøg½Þƒ‘•#áSGð–ê(Ò8þ ø½#@UuÐé^•E�yŸü*¾ÓöŸøO¼[çìòüß·Ûs¹ëŒóŠ“þEïýOÿ�àÄפQ@]eð`i±<V8ñM¬næFH/6sÕˆ’}ji~ÜL%øâù2°~H ¤~ €G¸¯K¢€<ßþEïýOÿ�àÄÕcð`6¤5ã›å‹É&ó÷¢<çfìgnyÆq^£E�y¿ü*‹ßú(ž1ÿ�Á‰¦CðŽâÞ%Šˆ.Ž5TKò�ÀW¥Ñ@[}ð]uH‡üSw`â;‹Ï1C‡‘ëV¿áT^ÿ�ÑDñþ MzEæƒáÀ™¦<^%u Î/Îâ£$}æÇÔúÓÿ�áT^ÿ�ÑDñþ MzEåÖ—h¶šwŽ<Sgl¤•†ÞóË@IÉ€K/ÂçhÚ_øºCù;dz3îkÓ( 7ÿ�…Q{ÿ�EÆ?ø15V?‚âBkø¼q┽BËp·˜’E62@÷¯R¢€<Ù¾ݺ•oˆ~0e#@E$ n¢#â‹Ò4UWP (�•éTP—]üí^xãÅ7 o(š5æóƒ£®G =G5gþEïýOÿ�àÄפQ@hŸî#y> x½ZVÝ![ò ¶�Éõ8�}�§ÿ�¨½ÿ�¢‰ãüšôŠ(Á¾¶ðg†­ôKK‰n"…„’¸–bOO­oQE�QE�QE�aø‡ÁúŠþÍý¹¦Ç{ömÞNöa³v7}Ò:í•bŸðý –ÿ�÷öOþ*»z(ˆÿ�…?àú-ÿ�ïìŸüUð§üÿ�Bå¿ýý“ÿ�Š®ÞŠ�Áðï‚ü;áIn$Ðôij{¢R®í¸Ÿxœu=+zŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform5.jpg�������������������������������������������0000664�0000000�0000000�00000055000�15030617045�0023273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��»"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ­}¨Yiv­u¨^[Ú[©¥¸•cAõ$Vk–ñ±e± jQÜC3\[]ØØµß‘*¡Q¾5S•ew_Ǩê�/Íã ÛE³øHŠ9Ó|.÷Ѩ‘rFT–äd‘ÜU«½{F°³ŠòóV°¶µ›ý\ó\¢#ýœ¼¶KUµß‡Z¾­á«ËW´ŠþMF :YR*N[ˆÎÞHÝÏ­T³Óµè·W6ún©m¨›«Û½"Ñtöºˆ[ÌËþ‰*¨"=ÞZ¶r¸Ï^ €{3^Ú%˜¼k¨E«(q9l*zÝ0}iðO Õ¼wò¤°Ê¡ã’6 ®¤dGÞ¹_›†øQ é’Çyq¤4ÆÎ˜Ç+ÄTFª€ðã=�éW|\x A†X.-æ·°‚ b¸âtt@¬ °¨<ô=¨¡¢Š(�¢Š(�¢Š(�¢Š(�¬Çñ‡ü¶¬éËy³Én×H$EQ’Jç Éö­:ó]*òö߯-®“¨I£Hn¯.Ö÷Lt}>fË&M£Í37Ê»<p�;m;Äš±3C¦kZuìª2RÚé$`=p¤Ô–zÞMgcªØÝ]B –.Þ<ÊG<s^+á+UoøÆ T·Õ´=B[Û¹f³’ •š Îó d\û⻟µô —N‹O»mÖÁVÎòþÁ­§€–èÙ` Š�p¹-Ö€;aªéÇS:`¿µûx]æ×Î_7o®Ìçø«uç×1]ü[ÒØøw]c¦‰!·¼ŽÀ­©yGïå'• �$žkÑè�¢Š(�¢Š(�¢Š(�¢Š(µö¡e¥ÚµÖ¡yoin¤–âUÔ’gMã ÛE³øHŠ9Ó|.÷Ѩ‘rFT–äd‘ÜUö[¥Ä35ŵ݋]ùªãU9VWuüzŽ£†’ãUmwáÖ¯«xjòÕí"¿“Q†ÃN–T€Ê…S„VÁb3·’7së@¥w¯hÖq^^jÖÖ³«žk”D£ƒøTòêPiÿ�ÚÞ[Çe°Iö‡•D{OFÝœc‘ÍxÝž«øEº¹·ÓuKmDÝ^Ýé‹§µÔBÞf_ôIUAîòÕ³•ÆzõÓg¼û„¬¤½Ón­äxcàÓ­MÃZ3&ÔUl…ägé@V—v×ö±ÝYÜEqo(ݰ¸tqêàÔÕÅü.Ó5Á£L¾„ŵÔÉb^/.G¶Ý”yøX’ăÏ#<×i@Q@Q@Q@Q@Q@Q@Q@â-;ùlYÓ–ò%g’Ý®HŠ£$•Î@“íI§x“BÖ&htÍkN½•FJ[]$Œ®šât«ËÛD¶ºN¡&!º¼»[Ý1Ñôù›,|™64HÌß*î<ðqÀãü3¥j­àÿ�ØÃ¡j–ú¶‡¨K{w,ÖrA²�ò³DÀÞd ƒ Ÿ|PµYëºF£y5Ž«cuu&X`¸Gxðpw(9ñÍkºE¾©™>«c¡&6Z=Â,­ž˜Br*ã¼×Ðx‚]:->í´[[;Ëû¶žX£e€2(�Àvä·ZÏÖ´+_ŬÚU¥Á¾–+ˆ$›PÒÑÛ²E%½ÎÀHÞmÜÜ3(Ñlum;Tó³õ [¿%¶Köy–MèØ'ëW+˾iZ”^$±»{»;? Úé—)qCæ]£’H à üÃ#æë^£@Q@Q@Q@Q@‡%HòÖñ—‹-­ô‘y5‚]êâ{5OwŠï*‡aa.äq¼p^€Ôè¯7>.ñ$ŽM¨2\Ä«ö>MT’59ù‡ïŽO¦NÓŽ¢•|_â‘§µcyh¤êš þm«�26y¹>¤¸g€z�G¢¼ÐxÇ]Žq%Ò˥ȅãÔãÐå">Oßn�›‘ÇÍŽ¥íâÏÅû‹É–×Ìu[[µÐ¦hçÉS™¾V=6÷ÏÊsÐÒ(¯7ÿ�„³ÅÞA®¦ 4vÏ¢Îc¹�ºþnqÈ' Ç#CâßÊø¶½›M—D•X)?x8ç¡�ä)îAèéWœ/‹¼Dò´Ö…¯!WÙsÐfÚœ6ùÜúN}3À©ôïêHnï冊èÌ·všT±˜[wG˰ØFG#ø±‚H QQ[\Gwk ÌD˜æE‘ ô#"¥ Š( Šç<mmm{áøí.ŸbÏ}i°m­–Ú}v–ü3^mw`Ú^©9¼].Ùbº6^Ii#ExÁAʨÇkó@ìxÛ@ÙExœ"Ü\Ë-½¶™ éRÒésØÜì“—¹Æ}G?0ä2(ìVÚqmiawÀŸM–ÂãεÈè§?Ž cû§Ûè¯1Ø}‰cÅ…ýbÚX] íHþ÷BBôÏ-ýày4L¶MæM4Bª b €9ǻϊŸöN(Û¨¯‘-šþ?=4»µ!b™tû“àç A9Ï· ?„‘šH–ßí¯$VúU­ùɧËerb¸Æ?x„d¨Ç_™sŒ�{eâ­šEpÖ¶v©íDÖù×aÎ9ç‚ÛN>R:¿ø…ô£ŽÖæÞïF3“0ŠÂç϶ésËŽùaþ×`T¢ªéÚ¦­§Å}c0šÚ`Lr�Fì;óÔµ@Q@å^"хΡ­ê|6—Ò>«œ–wto˜¡'i“s7|dóƒÈÂʼnµkY–ÊæÞ'd–álnÍ„‹ž$ÚyÛÓ#'Ô0%¨ܨ¯lÙ!R鱯ªßX‚Âà+gH¿wæã±SÛiÀ§¼vÇPS,zU…ð;Q†Ÿr`½é‚räñaœ€{]â‹qu$°Ûiv×¥I“MšÆäÇ6ßFçQÏÌ ôd)f–ó}–ÎÂâ2�ŸKšÂàK¸sÀ¶?ºGBíÔWˆyZØ„alu <ÈA™l.…Å¡¼‚Bôþøî’ ÖÅ­¡i¿g º jÞÂq·§úÁ÷yÿ�t¡Ç!N(Ûè¯:¬7öf ¯ÙîãÓîL7]•' ç· k½ðߌ#Ô¦M7S+®ìÛ"KyQ$U܌Ñ׮¨ÕQE�QE�QE�QE�QEsž6¶¶½ðüv—O±g¾´‰X6ÖËN€í>»K~ ŽŠñ;»ÒõIÍâévËÑ´‚òKI+Æ ŽUF;_œ‚�ÏcÆÚ!âæYmí´ÈoJ–—KžÆçd˜<¼mÎ3ê89ù€' Û(¯Š;¶œ[ZX]Àp'Óe°¸ó­r:)Ïã‚ØþéÆS‡Ø–<X_Ø ]¥…ОÔït$/LòßÞ“@ÝExŒËdÑ@.dÓD*¡ Ö °¸œq û¼ñØ©ÿ�dâŸ"[5ü~ziv7jBÅ2é÷& Á΂sŸn #4ítW‰Ä¶ÿ�my"·Ò­oÈ&M>[+“Æ1ûÄ#$}F:üËœa­šEpÖ¶v©íDÖù×aÎ9ç‚ÛN>R:o¢¼¯Ãþ!}(ãµ¹·»ÑŒäÌ"°¹óíºdòÀc¾XµÛÒ´íFÓVÓâ¾±˜Mm0&9�#v ùê �Z¢Š(�¢Š(�¢Š(�¢Š(ܤàŒpq^Sµ–¡[ëÅ.ô©¼?*Ç?–sal@—�¤(Qœ¸ú¬›<¶ó1³vî˜ïšò½1gÒ4½æÌÍ©iÓh3Û†Öà‹}æ>î¹ÇÉÔ íì´—s¦ý‚+(å2\ÆÚz^MîfX«pÛŠä2gíà}à@-L’KSuÉu¤Úß0_/QŠúäÃr9Â8ä¡#¯ÊÝq;,šu„·:!û]”¾f’70g!š"}’œcœ`ü§kU[ya¾ŸC¸šm Eº»Ó¢‘]¤ °:Œ¾QÝÀ9?tçp?¶¦ý¼‰4« ÀÅ¥·}FäÁx;° u÷á‡ñ)¨à’ÄÅ7Ù£ÓD! Ï¢Ï8Ç^c?wŸ©CþÉÍY–÷6›%»Ôî´¸ðÞDº•¸»´u'Ï{`:‘Æz—T%a¸½Õ/ç·VÍü¥¯xÃã<z·³Œ Â]?ìlû¬/ì7ƒöf¿ºÚ0ôèNÞ¸å‡bÜ %–Åmá77º}ÔŸ#R‡P¸Ûgûü~ Ž>aÔ›/¨Î—1Ésª\éH» Ô`ÔmLrŽ¡dàs÷K`ÿ� ð©©\ExâÞþæËV %SªZ›{¬pNFì¿xqÀ €WšK_>$šïK‚ì ê°ß\˜åç„qÎ3èp~V¢¬¶ÇQ"9t­>øÎ¡rmï¸ëœg?ˆaŽC(æHoŽÙml'ºH²Eæ—qªZpÓ?.O@UŽAÚri¢“X”K½BïHA‡³›R¶ûE»)È*Ìq€@À#‚¤Œ �±¢kÙÏ6úU«íÅÆ•=ä¬ñ1sÔ§<í9#ÓtOé¾!¶y´ë'–BËx›Ñ‡ù¶Ey\º xbžóSÔ.ìP†µ»‹S¶ûE±<|ØÉö-Ç£¦&¥*O׺¥Ú^01ÛjVÚ®Ö^¡e€=‰ÚOB¤€�=šŠå<?ã(.ä‹MÕžÚÓQ8X¶Ý$‰sÛ*ÊH ¸yôÈæºº�ç<röIá’5 †É¯-1r>ÑâÞ‹Œäž+Ž“:c´À_ø}µ¬4ò“,ˆ<ž’ é´ýî£6s‘ÚøÆáít(¦[wVþ̺F2ûEÄgå_â==늶b•5 ‹­ 빨uœÅœ`õ3ÇH €gÜÃp–_kG¼Ô´ïíˆ,ŒZœ©%˜Bû^6Ë.Å'3÷â ‹«¸ZÝïnã7$ƒUƒÄxا²|‡�ñ“€‡ý“ŠÔÑüËceªh¢K›Fñá:gã䏿0ØØÁsòq÷NI’(ßRx®t7(×—W¿j²D»ÄRÙQ„r+@ ~÷'p�Ç{«Øï•ͽž«"©7iâ&û=Ö8Ã|½}`Þ„€ia»¹²ÃfðÙʵ͜¾$ýÕÈ=]@2}A=~eɳ§Zɩ顴K]n÷Hfe¹³ž=4I”6Jã´dÈ ÕE•ÅÖž[ìþ#½Ñb2¥‡Û-d^ õ·?ìº÷Ýž�(Cq$¶“Cqɧƻ&Ñçñ2:yyP»}*qò‘ŠV¾’K´O7ÛôõuxGü$Oö›Fñ³y#?ÝÞ;îÏ2ÛÝãÔ/ÓZ{D`Özªi£jžÒíão$§¸\ sÙjp\E-ä:Í®«01Aw:q·¸þèuàn=”±=v“Í�gMyp‘Á5åìs?+mªÁâ?š8À|!à÷8 qȲÝ^Çv®­íuYQ@Ô#ñò.1Ñ\m>¼Àóòžµ|Yj]4VöZÅ®µ2‰%´•tãorÞØØ>¬‘Æå<QŸvd–ÃN°ÖÞ$cöí2ê=4Vïြ�67b¸4Ÿ«^Økeì­àc$ö÷^ ó-ï²ü˜Ý7)â½Bñf›­Æ±}¢Þ Dq-‘YѽˆûëèË^x–7V,±ÚøŠ÷F„‘ vlµ‘y÷·#åqÔÈ© Wb(µ+¡¯>Ÿ³Ô­NYaìD…sòñó1!OFQŒ\¢¹}Ä7±G¶¿g5¶ü$Œ•rxÆï-ØF힟tö<àuæz¤0\ø‹U›N¹X5¨u«@c“!eO*¾budÜ 9àòA¤d„ñEo+é>"“Y–¼¹Xó©_6=ËŒöÉû¤‘Wuƒi{¯ÞÙܳÔ×]·k;•v 0±ˆÁ8�²öÈ8ÍR”½ÕΙ¦jže½úø†c£l»ÎÙrPœímÀf6ÎG÷†h„M¨Eq<PEö ’J·6wû$WXfWxÉ@2XNOûC'5 72Kg,q,réÑ®Ù4™üE‰" ñ³*ÑŒÈ?Â{WC¿h‹MÐõ¸1çkW‹¢ *ÈC\£Ë)7òÿ�8`2ä ´ó«O©›¹å•,/l£±EmŽWd›ÑpIÇÊIVÈÇ<� O}#Ø­Ìóý¾Å\<,<Dßi³n™#fìŒã…Ü;ç“K=åÄko-åìrJr–Úµ¿‰9Iaœ8è§£%†«ou]Á¬ÙëS7 œm®qŒ^ãÙKíb3BÙjpݼ6–:Ͷ¯0Ïe0ÓŒâ1¶�Ï<²©=7/J�¡%Õò^…ûU½¦­*¯újx…ŒXþ X7÷I§Eur·òÅg$6Sï2\ZÉâSå]Õ•‚¸úƒŸï/J»›tÞnŸaa®Il„‹Í6æ=4<`÷v~^�Oð‘Š`²¹º±;m|Gy£B¤0òì>Ùm"þrÿ�¾\µž�(Aq$–ó[À‘5‚!IôyüE‚§þ™åBíüÔö#šS,¶y%û~œ¬!>"´Ú0ï‚›‰†7ö³Wå‚á P¿]n]9=ž§jºhhÁí!\¼rÄí?Ä9t–Zœ3C5ôZŶ§.aµ½Š8ÛÏŸº$\“ž±ïµ¹4±áÿ�ɦÁoµwa6œÄˆµ(õ5¸uQïó€�Ç u=ý½Í½ä =´ñÏ}Ù"pÊ~„W” -R ÃZÍž·:ù’[ºiÆÚä ä¡À±Õ€,8ÜÅihW:ž‘zöÚ^­L#9ºÒoÊ1â>xJ²àuÆÆÉû§&€=*Š¥¦j–Ú­·ee;e†A¶H_ººö#ÿ�®29«´�QE�QE�W9ã—²O ‘©6Myh³ù‹” öˆ÷ô\g$ñ]`xÆáít(¦[wVþ̺F2ûEÄgå_â==芓:c´À_ø}µ¬4ò“,ˆ<ž’ é´ýî£6s‘B愲ûZ=Þ¥§iO—•©Ê’Y„/µã`²ìRxä ýàx¿l>Å*jZA×r,!P6þë9‹8Áê gŽ6Afæ[-SE\Ú7ˆ/ Ó8%Ç1†ÆÆ ŸàºrH]ÅÕÜ-n÷·q›’ AªÁâ<lSÈY>C€xÉÀCþÉÅu{ò ¹·³ÕdU&í<DßgºÇo—¯ ,Ð l,O~^ènU¯¯ï"º²D»¼·¶Ta›�È 'æÁ;ªŽk&§¦†Ñ-u»Ý!™–æÎxôÑ$]þPÙ+ŽÑ ‚P ÐÝÜ‹Ùa³xlå ZæÎ_~ê䮄 > ž¿2äŒE Ä’ÚM Ç&Ÿì›GŸÄXhÈéååBíô©ÇÊF*ø²¸ºÓË}ŸÄwº,C†T°ûe¬‹Ô²çý—^û³Ãå·º1Ǩ_¦´öˆÁ¬õ;TÓFÕ=¥ÛÆÞI;Op¸œ×ÒIcö‰æû~ž®¯ÿ�„‰þÓhþ6o$gû»Ç}ÙáÓ^\$pMy{ÏÊÛj°xæ…N0x=Μrh½–§ÄRÞC¬Úê³qç{î‡^ãÙK×i<Ò -R ¦ŠÞËXµÖ¦Q$¶’®œmî@ûÛ�gÕ‚’8ܧŠ�¡-ÕìwhêÞ×U• B?"ãÆÓëÀ,?)ëVtýZöÃ[/dlío'·ºñ™oxå—äÆï|äq¹O4:}Ù’[ :Ã[x‘۴˨ôÐU[¼[†ðp�ØÝŠàÔicqub˯ˆ¯thAYÇaöËYŸy r0>WAlŠ�ô= Åšn·Åö‹x5ĶFugFö#ﯣ.Aü nב˜®ÄQjWC^}>&g©Z.œ²Ã؉ çåãæbBžŒ£=¦âØ£‚Û_³šÛ~ FF‹Ê¹<cw–ì#vÏOº{p�:Š(¢€ (¢€ (¢€ŽÕ'àg©¯(Ñ’?°h·ÞxZC¡Î/mŠ«:‹pãòÎCsŒ6zî¯WmÁ @ c€N?Zò}3f§ŠÖôÝjÛïç "Î@ »ûñ°-‚AÏB  ÷X®-ïnô)#‚qávû}´‘•6Ü0aÕ_!‡^:‚ lëñ2“Å—úS>yŒ‚úÎx€ó. �þ-¡vÈ¤ŽŸxVMѤSn麕¯„›##÷¨å$d¨?ÝaZ¾!Ùª]øu:n¹m¡ ŠP|Ôh/°ÿ�L ä‘Ç�€h5oõ]sT±Ý¦kvéi°O8bÌT‡RaÓ¿êµImueÔn–ÂâdÖÑ]Ù 2=‰ù°Aã(<`FÑk[Û©j°j©Ž»³û,жCþóæhÉûÊF F鎇ªKÉ-gÕ.,|Gkho†¹nRCî&_&�ÁKt%pJqŸâÆh& m]ZâÎÆ+£1ÃÝéWU¸P­ÁhÁb6žq€ŸîœšlvºœÖ-klºî¸ô¨~ÓhÑ·çÝ‘Ô †']oˆto ¥æåiº2†Ô•dÙC+åJpxé?!SÏ¢øLx¯OQ¦h¢&±¹,`ðc<uå±õ4ÅJš”öq\Mq}s¥Ä7C¨Ã¥Áç@Ààï!óŒ1ϨaŒš’xµu¸†îþ{»vámu(4«}’«t áy'€I¨ œÂÇFð¡ñ.¬¦è¾PŠÜ 0E€Nüã¥&¢øMífŠØ¾T4(s€8éŠ�äD:ìû¤ûMŽ­8*©ý•‚ï?ˆ Ø›‡û@rØmõ¸¤žÞΤ½qæ\i“évâ7†hÉb1î ê$ïì …^qÓ´µboßäE¿‘œçÎÖ–¿£xQ!°1iš(&þ�Å`‹î—Ž”ÇEkª5¬¶–i¨]YÆÛn¬æÒ óí{€¹>„ Ž0Pðt‰5}6¸¼þÕÖ´}›VàZF²Û2œ0p–¹?2ãy5£{¢øPx›IUÓ4QEq¼"ÁÆÌgsN·Ñ|'ÿ� ^¢‡LÑ|¡ejÊ<ˆ¶î/>Hã®çè(OÅW2ËáË{­4Ãt 픈ü³´G€¬88ç‘\tY»Ô$ÔôÐj^Äö-±Xù9ÄŠ3µ¸ 8È?í Vœ–‰‡õ(tf·´T×í¼‘JbÏ›Q—'<xëYGn£¬ˆÜ¦™âXµ¢U—ç<®ÙÇ™@ÈàŒÿ� Ð4¸ÅÝü7ºSGi®.¿v.-§o”ü— UO\Q Î9Æà1Ri _ëö³iÆ=;Ä1ͨ›¨¤]ÁÇڪɾœ°½8<QéÛ5JÂÎv:~¿»|ÑÜÄ™ »g-å–:n�2žzg§ÓÁÔµ+OÔ|ËNM ¼ƒåYÏ$˜‰ÎFCž:‚4[JÓì<M6‡ZAm¬Zé³»‹«U•\ " ¸‰";ßAÏ*ARk]ZâÒá4];OÔZt¶ÑxxÜ#ÂØÛ¹–M®§ n° ýÞ•§£*êÓõ€ÖWQØ\›Ød æ>øH1“ÑðrAûÀÓü'}ªÛjšJÜi2]²øzÙÉ=ÊC#®ÓØŽyäuÀ�È‹M•-M‡RŽ f°>v·”Á[;É\íl0U'ƒŽ 7lwÙxzÆáZ@·tþb!le‚4àò>RÁ}6÷î­õkÑâÍEÿ�áÔËPS̶ÈÄ—ÿ�®Æ}{l·CÕ¯V}cÔßuû“¶Ko”ìNeëô  é¶ði†“ey£:¼<ž‘e¶@3•4’Û‡©í%ÞŒcŠ;[Í*ÓÈR‚I<4É2ÈX*†_0)Ée7F_^Œj—Ÿð«.bþÁÔv2aæï·ÚÆçýnqøfµüC«^¾›oêh>ÝfrÒ[v¹Œã‰'§ãÎ:Ð.–d¿†;ÂÒéÓÃá‡"å@$‡C&3€r0qœ«œ6=6G¾’UдÛmM#,öŸðŽHÐN¹!Xüä®OñŽw�+·ÔõkÖ×´F>ÔÔ¬²áL–ÙoÝ7OÞãóÅ «^ÿ�Âa3ÿ�Â=©îûcg™mœyÏúÜcñ  5—íW~°’@Á.tɼ6Űì>aÁÚÀ…ÈS‘ÂäšÛÐ5{ï[Æ-àšã@ŽID°&“,/i†!¶1v ¡Ãäs‚x¿¤ê׫©k¤xwSb×ÊH[|¿èÐŒÍ׌ñž£ÜUµ[ÏøC5„þÀÔv´šŽ_Ì·ÂæisŸÞ率·  ½OP‚îâò-BÜ2ó[´–å%3 +sº6ÚA ÀÎzZì}š;+ qRãG>!”}¶g�–Q‰z`ç8ÀõÚ@%°Mug¥y—‘-ÖŽú…‰œ2n–ôkrr aÓ` ÃÅžs¦C§\Z¸¿ðûkÒ”†%ó^5Ù/Ü#>bmÉÛÉãŒä�c`µÓmuµŠóÃÇY¾h—.ñö¥"aÎáü^gnwc‹tæþÍ:j`j ‰|»™<Ö‰ ˜o7®ôèwu9ȪM4¾™m¢ßél×ú#ë­œ £\]�aé”Û“³“‘òõÅ7@WÓäЯô}÷¶}¹Š0X�L9èze`ä 0ivzV£ì.öÆûN²Í6–·2Z X÷ðYÓ2©%”÷‡+ZM.m%KiWZCFÒµËøvEšÝ1¸þh, gæ-¸µÚÍœ?eðî•y :][Íá믴Ú°¨Ø€Jcþëî9*p î’Mt—z­áøe<g@ÔBc²ù¦K} y?{ýnqߦ}¨”ºÑÊ,6wš]¢Æ ­¾¥†JÍæ€®»ÂœçÑ”ã8ËßK3jQGq£iö—‘’måƒÃ.Rê1Œ‡C'Ó#gånMv¾ Õ¯^ ÞÔÓöän’Û“¼qħš/µkÓâ}!‡µ0DWS%¶[„éûÜqï@DZd²^M<z›o©Å2ÙÂ9#[Ì `ä®J·Ì9 I˜P]Meáë‰u[6o 1X˜¨fØ|Óƒµ—åÈSþÎI®êßV½,Ô_þÝL±±µ<ËlŒIqÏúì`ç×±öɤê׫©k¤xwSb×ÊH[|¿èÐŒÍ׌ñž£ÜPý™Zcyz=•æ”ìþd’xrA-²Œ‚UüÜ<–Ü;À¥¸Ò@¶†ÞçJ´kFØ!Ô“ÃL“$ŒÀ(`$�‚J÷·teîz«]Rðxö?ì D©Šï÷‚K}£-'ý5ÏNÝêÖ§ªÞ·‡,øRP.lHc%¶'ˆþ·<ô^q@¤v—vš­¬ƒO¶Ó¯¢“eýŸ†Ý‘‹+¯˜9*­‘‚0r¤ï†üE>¤ÇOÕ-d¶ÕbC#¯ñÇ"nÀtÝÎ9œƒÛªjÚµëjZ>ÔÔ­ó –ß7ú4Ãuç<ã¡öY]ÏuñŒÚuÕ™Ovˆç÷ݶ;P[EPEPX1k¨ô8žÒ4–U¿³o)Î<Ïôˆð¡¿„“ŽNk~°<cÄšBÒq âþÌ£2R~Ѥg‚h‹‹7z„šž’ @kØžÂå¶+'8‘Fv·ý¡Š‹KŒ]ßÃ{¥4všâë÷bâÚvùOÉp@•TõÀe ãœnó·QÖDnSLñ,ZÑ*Ëó‚žWlãÌ dpF„išvÍGR°³ŽŸ¯Å®ß4w1&C.ÙËye‡Î›€ §ž™ÆA éÁ/µ{ ôóŸâ(õ ÿ�´Ã(Üo˜¨p1½~ò‡9ÁàŠ‹JÓì<M6‡ZAm¬Zé³»‹«U•\ " ¸‰";ßAÏ*AfÓ:Ž££é÷âKV-GQhomÆÕs¾bÆ&9ã#°i4e]BãÃ:~°Êê; “c{ |Çß 2z>nB#?x�̆Ú×V¸´¸MNÓõ€]-´^7ð¶6îe“k©È°¬?w¥$Zl¯u4Ñhl:”q5ðãµ¼ – ÙÞJçka‚©8äq¯á;íVÛTÒVãI’í—ÃЈÞÎHðñîR‰vžÄsÏ#®Eo«^j/ÿ�î¦XØÚ‚že¶F$¸çýv0sëØûd…ƒMÛÄö^±¸V-Æ?†˜ˆ[`‡Í8<”°_M½ã:m¼Fá¤Ù^hί#Ï'‡dYm å_Í€Áä¶áê{wš­z³ëðö¦û¯Ü²[|§bps/_¥e RóþeÌ_Ø:ŽÃ¦L<Ýöû@ØÜÿ�­Î? Ð9w£âŽÖóJ´ò ‡RO 2L² ¡—Ì rYGF Ñ—ÕòéfKøc¹Ñì-.‘ñm<>r.THt2c8#ʰ9ÇoâZõôØCxwSAöë3–’ÛµÌgLy=?qÖ›©ê×­¯hŒ|=©©Ye™-²ßºnŸ½ÇçŠ�â#Ód{é%] M¶ÔÒ2Ïiÿ�äë’ÎJäÿ�Pxçp’ 5—íW~°’@Á.tɼ6Űì>aÁÚÀ…ÈS‘ÂäšîV½ÿ�„Âgÿ�„{SÝöÆÏ2Û8óŸõ¸ÇãNÒukÕÔµÒ<;©±kå$ -¾_ôhFfëÆxÏQî(@Õï¼=o·‚k9%ÀšL°½¦†ØÅØ2‡ Hc‘Î àW£Û\Gwk Ì$˜¦E‘ È#"¸ˆµ[ÏøC5„þÀÔv´šŽ_Ì·ÂæisŸÞ率·®«ÃÇ>Ò‰g·È(JŠ( Š( mÅNÒc‚FFkÊm ê~±Õ‘¬n¢Ðfk+¨eÀ‘¶ÛàÆ½´6ä ñŸ¼ z³r¤gu«Éíäò4ŸÚø…a¸ÓfÐ$÷AOÊH·*$ÇÜ*@@@$އ¨v¤cšÜZø‚8¢¸_ 1°¹Ê‰)*TõWÆàW8#=A"µüLê¿ð‘Xx˜C$ßÙ1}Šõ¢¼‹ö„Ÿùg)ÉÎvŒËù%Ó´ùíõbo¬¦ð©Xgò²bÏ($Ѱéœ˜ìø‡ÎÒ!ñE­ÏŸ©é²è‘ª\0óÝOÚv ;ºç??P1»8/@kÌðO¬éºñ7+#Xˆ5Mƒ"CåÕÉ‚pÃ�‘ÆÒBÔײ˧ÜßXëIgý¹j~Üb’!ƒå‘pvãæ Ï p ZÈ}(ëp°mKC•,·K#ù¯eòg&HÈÈÏ,8Îá’$Ùs¦ÜÜe©hÍ­Z‘& *~æ]ŽÍµÐ‚F09 ðk_ºð©»Ð¼«�’™1¦²å|©8ûœóŽ*yî¼'ÿ� My_b¹Ü?³[–ß8ÙÏñsÛñ«^"Õo^óÃå¼?©&ÝMH %·Ì|©x”óßœ*{Zôø³NøGu0ÂÆèó-²s%¿?ë±^ãß�–W^$ÕKX@b1A°f±ÁùóÆÎ;Q ÝxLC}æØ@OÛ§+5ŽyÇð~•£c«^êì<=©’b·Ê‰-²¼?_ÞãŸj<?«^¤û|=©¾oî Û%·yã™G4Îý§Âÿ�ð«¶ý†µbãö{g“×vÏ^ù­zëÂf*Â�~Ýli¬2»Æƒô¦ÿ�j^¦ò¿°uŸØ{|ï2ßn<½þ·v;ôϵiøƒV½x,7x{SL_Û‘ºKnNñÇžh:öëÂgÄšQ[B)÷ìÖ?&8ÙÏzt^ÿ�„¦ü›<¯±[mÙ­ÃoŸ<lãøyïøUûíZôøŸHcáíLÆÉm–á:~÷{Ó­õkÑâÍEÿ�áÔËPS̶ÈÄ—ÿ�®Æ}{l€c¼z}燯ã³ÙÄþ!¶íy,æÁÊ©q“‚ã¥Q™ïÓIÖƒ¬ç_Bå«·“µ³òIÐí<ñ¸d Jx'ðΰú•Œñ[>»n'ŽM¥£O6 “±oî’k*Y#¶F‡Shõˬçí²8…òå¦Ì»H"AèKx€-¦¬´­t9€ø†ïËÔ•ÄaßmÀ+ƒ›°F8=»€û.+Ý;OñYtów¨¤7ìÛI´ •Ë}Ã!†HÆ“fÇkú¥÷‡Ž»z¾kîšD.|Ä î/Ô`ç#‘>šßÙw:{¿üL4›SUU_5¡Ï ’rL©ŒíÉûàt§[TЭ<F±\i2é· Ó)ù3$y¸á61 #’>é2xM5»=WHX ® ­áØZ#q3@È…‡ÊJ£Áèp8ÆrFK|>eÒA¸ŒKªiiw$À€Höèdƒq^ò'O“’9ÆF7ÁúuÂê:Ci¾È%ðô2*yê‡p ¨r퓃08�5½Çˆ?á,ÔHÓ4Ï3ì6¹_í0™qƒŸ#“×·a×<7C¸×ÄúÆÍ3LboßvíBAƒ±8¹9üQoc®ÂY¨¨Ö ,mIo°ŽG™qÿ�_ΓC±× ú¾ÍjÅû†Í9;Ÿ¿Å�e‰õÏøU—+ý§yÙ“ÿ�o}Ûv6Nß'öÏãZþ!¸ñÓaó4Í1WíÖx+¨ÈyûLxêÇÓߥc‹=gþeËÿ�kÃäÿ�fLLcäÆw~¸­oØë‹¦Â_Z‡Û¬Æˆý¢<¿ØàЩÜkç^Ñ iš`a,»@Ô$ þ麟'Ö„¸×ÿ�á0˜ÿ�fižgØ#Êÿ�hIŒyÎ|ž¾Ø¤ÔìuÁ®èµ¨ eÚßboî›¶þhKsþ —ûj3ìßb<ÇãèúMLj¥®ìÓ4ÂÆùwƒ¨È0~Í÷ŒcÓ©ôÉ¡úïü!šÀnå™5Íö÷Èýô»°<žpsŽF}ªî“c®K] ­@¤_(cöw³ÃÏß㌨Ee­Â¬7öÄ>X“PÜŸbâisÎþ2sôÍ�aإ宜·ö¨§b'°V ¹Å½¹&68Ãç ©8<}ÜrèÔ‰,um¼‹'ˆæótç>XgÛ)èÃ1ÉŒŒ‘œuªÖH’ö i/tòmæb±ÜÆ · YFxÝüKó.îzàÊ<»íJÒæÈ%‡ˆ“^M¤FÙŠï�á×!€qÓ-Žâ€.iè^]7UÑ }­õÛß´éÓI±Kâèüß.Mœg¡ÈÎp‹A{ý.ûB1Ū½ûmœìT;o,€gcí<88xRYõÝ(ÀcÓ|I±z$ ¥ÁBn› –<åwFN6’E3IÚzŽ‹ »išíºÞ‘*®åqæäc8ÇÀŽçîœ�§oä_i:}Æ‘"Ùêqxna{ ±ãÍ �zàŒíz¼Úé.ç×áYN§MÓ„?Øì ‹÷Ý·Éë·ÉÆqÛ?s—TÑô{{˜çÓu+o \43#`L¡ *Uº:‘»rG<•«¡»²Ö‡Ã9Ü똱ؘþÄ3·Ééþèÿ�ˆ.5󇙦iŠ>ßoº„‡'xÀÿ�R8÷¢úã_ÿ�„ŸH-¦iÄW@Ô$ ð™Éòxü'ˆ,uÅ‚Ã~µfþÜ Yƒ¼`ýú/¬uÁâ} jæ+­ö!Ç ž7ó@·¸ñü%š‰f™æ}†×+ý£&�ó.0särzöì:çƒI¸ñ�Եݚf˜Xß.ðuÙ¡à~㑌zu>™-·±×?á,ÔTkP6¤·ØG#̸ÀÆÿ�¯çF“c®K] ­@¤_(cöw³ÃÏß㌀(ZÏ®ÿ�Âz§¼«¼±¿}Ãæ“<y?^üûU­Nã_>° ¦é¡>Óc‚5 'Ï‹y=Î3Ïý*­–²|zÃX„D"»Ê}ŒdüÒgýêÖ§e­ØÖ`(nlp¿bÏ‹ïìp}ñ@ukKBߦi…ólQäýšnî8ϯAëYI¨Iñ¾ßkkþÉùD-.}ß(¸¦êÖ:àÔ´ ÚÔ Mó?aiû<ÜýþxÈüil ¾‡â+ ÛØî‰Ò~RyxýïÔÐ]E’º]ëMþÖÔÉ…Ùœyñn9Â60ô=hZŠ¡>˜g“Oa{ØßqXåÀŸåÆ$ãæûr*ý�ÏxÎî4H"k‡·‘õ 1ˆÀ:¹¸•Ï“‚ã¥t5ÍøèÚ âú&’ѯ-ØíO´G’qÏåÍ�r=úi:Ðuœëàè@<µvòp6¶~I:§ƒž7 ¦¬´­t9€ø†ïËÔ•ÄaßmÀ+ƒ›°F8=»€’ɲ4:›G¨øv]g?m‘Ä„/“ÿ�-0>eÚAB[ûIJoìØíc¿T¾ðñ×oWÍ}ÓHƒeÂâAϘ„ÅúŒär�$lRiZwˆ‚˧RýbÔöþd o#\›¹ ¸#<RéN¶©¡Zxb¸ÒeÓn+¦SòfHóqÂm b@G$}Ò2]dÇKþÊw#Pðûj€UU2¼Qï˜{ù±ã’yaÏÞ™t…Ðn#êšDÚ]É0 =º ÜW¼‰ÓääŽq‘…�ðškvz®°]A[ð´Fâf‘ ”•F ƒÐàqŒäŒžŠÞãÄð–j$išg™ö\¯öŒ˜̸ÁÏ‘ÉëÛ°ëž9Ÿé× ¨é ¤jû —ÃÐÈ©çªÀ2¡È g¶N@Ààt–ö:çü%šŠj�âÆÔ–ûäy—ßõüè�Ðî5ñ>±³LÓ›÷Ý»P`ìNîNG¿”'×?áV\¯öväfL ý½÷mØÙ;|œgÛ?jhv:áŸWÙ­@¸¿pÙ²'bs÷ø¬¡g¬ÿ�¬¹íx|Ÿìɉì|‘±¸Îï×±â63LÓ~Ýg‚ºŒ‡Ÿ´Çþ qœ}=úSu;|ëÚ!m3L %—h„„Ý7SäñúÑâqtØKëP0ûu˜À±Ÿ´Gƒ÷ûMNÇ\îˆZ€±–]­ö 6þé»oæ€.5ÿ�øL&?Ùšg™öò¿ÚccóŸ'¯¶)ÚMLj¥®ìÓ4ÂÆùwƒ¨È0~Í÷ŒcÓ©ôÉbXëŸð˜L¿ÛPyŸ`Œîûéæ?ßK¤Øë‡R×BëP)Êý„Çìðó÷øãð  QO®ÿ�¬¦éÞY“QÜßo|ßK»Éç8ägÚº¯gþ­+p�ýŽ€sü¹8¬µ¯øCu†þ؇Ëj“ìCœM.y߯N~™®³ÃÙÒ²r~ÇOü�P•Q@Q@ÅB’Ä’zb¼²ÂÎm/KÐgÓ£kÛ;LóY4™ ¥m÷´Yõ$„àóŒÏ©³BÇ8'5åšmœšu†…y¡*L’èSµÍ›I…$}œHcì’n9 ðJv’Z€2<Ãg¦ÜK¤³ê:|žu–3/kÔ0\ó…n¨y8è¶µDû·‰gðèŠïG›DF{q'1+‘˜³À Cõ8Æ6œ¹Ä­Õöt\'…Yn×Ëÿ�XÊ0É*õ Œaº”ò¼XIs?‹®´øÎ™|4eký>tg$\lާ�m‘x=ì�÷d'Y¾ðëG>–æÉ¥³AƒŸ4ÿ�«Î60`AC’~é/H÷ÜÝê>–/±I¯Û‰,eSyž\$‘òî÷’{ädRjyÔouíGLó,ockue:í7˜FÙ�Ï< H¹Èé¸Yã]WUÔ.íæ›IÖWZ´Iàb®BùP€]3µ†àJ¸ëÎ ½â+|ÞxÌÓtÕ#SR›u [Ê—ƒû‘ŒóÏÒ§¸¸ñü%šq:f™æ}†ë ý£&ó-òsäpzvîzcœïéZú]è"Où…µ%~ÃØÞT¼õ猌{Õ‰ôŸiê|M™ ÑWû|�ðdc=ò?/z�žÆã_ÿ�„ŸW+¦i…ÌVûÔ$�pøÁòyü…¸×Äþ^™¦0û}Æwj ç#ýIãÞ«Yi> >%Õ•|M‡[î°Fwpøã<cúÑ i> xo¼¿lþpÐ#9;ÎO^ôWÏ×?áSmþÎÓ¼ì<oû{îÛäuÛäã8íŸÆ´üAq¯˜,<Í3LQöû|mÔ$9;Æú‘ǽbeë¿ðª¼ßøH¿Ñÿ�±7y?bO»ä}ÝÙÏN3ZZþ“â†ÇÌñ6ðoàý1ƒ¼`õí@o®5ÿ�øIô‚Úf˜Eq´ BB œŸ'ÈÓ­î<Aÿ� f¢F™¦yŸaµÊÿ�hÉ€<ËŒùž½»¹â¥î“ââ]%[ÄÙsÆ×ûco ž3Î¥: 'Ä'ÅZ‚bAcjYþÁ ¼øÏlÏÚ€+Ü^\ZèZ¥Íí¦<AlÒ¥«¶,#åVnçž•›~UÈÕ4K«)uÝßb”G.aÎøÏEnOÇZ×¶µÔ“FÕ#,Ú•Ä:ÜsÊQ7t¡í^…°¸ÆGô9 =Úëz³ õÒM›“sÉÁŽ@Cq׆�´7’ÌÙ_i)$ÖKâ Å} "£À|¹þà8ØB˜ÏŒcœÏ£y–·ú~§¡,—vÒ\êlúqm›�œçÊ -ñà?„’K4¸£Ô®moôÆ[-m5ûÄ‘f+”¸qÈ=À9ÈÉÚy9M$I?ˆ­¤ÓÒ-?Ä >¢×0Ê †ä Î2Ø—ª‰�ÈÇ ãm�?Ã(a“DÔ|8v{ £ubòRÂH7…ˆå9烜dµ3Á¶V§«iÏaqqnߨ0ý¥mfhH˜ ¹GBx>üsš‡Bê†.”ë§ëésý¥%‰TIÁ þ$9l:ž1ׂµ[Ã÷~»ÕtíûKi"ðô•ÔÒ0‚6²3pÊFH#Ü@�ëmü?ñf£öŽ«…±µlýµòs%ÇSžœ~¦“CðüO>®?´uA¶ý×å½qŸ‘9<òk6ø@?á(¿Ýÿ�Ï‘ö+m™ò6îß>ìvÎ6çðö¦èßð€yÚ¯ÿ�Ö>ÜÞ^ÿ�#îìN™íœþ´�ƒBþeÌÿ�oÔ²4É›gÚßoÜn1œcÚµ¼Cáø£Óaa¨ê­›ë5Ã^¹ÜF=zó\¸ÿ�„þ¥Çü‹¿nþΗoú3~ÆÆ;ç8­]{þìè¾Ïÿ�Îÿ�¶ÚgËò3·íîéÛnsíš�ÒÔü?ëº"ÿ�hê‡|²Œ›×$~éºsÅ áø¿á0š?íSÂ6Ýö×ÏúÇã9éYzü Ûz7—ÿ�וæËæíò6ãËlnüq×½ ÿ�ü%’çþ¯³ý…1þ£fííŸl㫤ø~'ÔµÕþÑÕFËå\‹×ÿ�£Âyç“Ïòªh1ŸëhjyY5—탉¥ŒóœsëQéð€hë^oü#;>Ú¾Vï#~ÏÝöÝ»§|Õÿ�áÿ�„GVÏü#ŸhßåçÈß6]˜ïÓn=±Š�«jöö±iw[{õÔld·“îɳ[©xßHî:ŒÃš.WºÒìõ"Ð]/ˆf[mbUÉ"@G9 Å‚ü‡*ØïŒ [Å6•§é·ÖïÛï,®,刬‹ I”`«8àÓ QM#[ 7]D¹ÓŸÄ/Û¦Û²L¬ªVUà9êÓÏN”<¯$Ñt½PKmzšÝñƒR·Cþ“’‡‡v3g#ûÃ5žîëAÒõÔ0°{ß±ê>Ï2C'æ9m97T9í¾Ág¦Ûjq ïm^Œ2´“Aƒt9ê]Gßß÷—óÔG§I´:<zËCáù’ô%à åÈ3æž…z éžqÄ´Òðþ‹gâ( ŸMöÄ%C9[rƒÖ91œá²0rJŽŠïAŒ|3žoí O#GgØooúœãéíXî4¿iK~_PÒçðÍÀFòƒ=¸d·È“ûу´ÆF~l€Z®Ý ÿ� êm¿ðŽ}·û%±#Ìó<¯ÏvÐAâÅj:£fþÝ~k×8ËŽzõ¢ûÃñ/‰ô„þÑÕè®Mëä`'Cž+/]ÿ�„ɲò?áÏÛ ßåùwxÎqÛh¼ÿ�„þ=+gü#^O•?™·ÈÛŸ“íëÆ€5mü?ñf£öŽ«…±µlýµòs%ÇSžœ~¦'Ãñ>¥®¯öŽª6_*ä^¸'ýÏ<ž•fAÿ�ü%û¿áò>Åm³>FÝÛçÝŽÙÆÜþÔið€hë^oü#;>Ú¾Vï#~ÏÝöÝ»§|ЭtÏ€¯eþÐÔÁ]¢ñöœ4³Vµ=%ðíƒÿ�hj‡76#ñÈž!Ó>üzV%·ü ¿ðƒÞnÿ�„sí^UÖÜùó¹ö㿦? ±¨ÿ�Âýeåÿ�Â7ç}¢Ë~ß#v<ø÷çÛ϶s@Z·‡âMKB_íTï¾eɽrGú<ÇŽx<:[ =l>"²­ÍÔÛ´œæâvÞöÍeêŸð€hè¾Wü#;>ÚÞnß#~Ï7ÞöÝ·¯|U­þÿ�øX’`ÿ�flþÉùþÃåã>hë³ð âŠ( Š( °<ct,´(îdD¿³g.æ .#$…·N€ÏJ߬Es.”†ÖÝ®+«yÞ4 9HåYÐx-òô$uü ~UÈÕ4K«)uÝßb”G.aÎøÏEnOÇZ­¡¼–fÊûII&²_^+éåÏ÷ÆÂœÆx<cæÊÂÏvºÞ†ìÂ}t“fäÇÄDrpFcÀœuáÀÄZ\QêW6·úc-–¶šýâH³ •Ê\8Ždžàädí<œ€?Kk6•©èbK«i5=@¶šNÍ¿<ßêÃcËm¿Àp þé$”ðÊdÑ5žÂèÝX¼…T°’ áAâ9NA9ààg-QéÛ§Öìd°H¬<D5 ö¸‚]Æ€nr�Þ:  ¯qÆÚ“áu CF—JuÓõÈt¹þÒ’ÇĪ$‡`¶OëÁZ�gƒl4­OVÓžÂââÝ¿°aûJÚÌБ0*rŽ„ð}ø<ç5ÓÛø~#âÍF?íW cjÙûkäæKާ=8ýMr^»ðåÞ«¤oÚXÛI‡ Œ®¦‘€Äµ‘›†R2Aàà‚Ôð€ÂQ»þŸ#ìVÛ3ämݾ}ØíœmÏáí@Z‡âyõqý£ª ·î¿-ëŒü‰Éç“YCBþeÌÿ�oÔ²4É›gÚßoÜn1œcÚ—Fÿ�„ÎÕ|ïøF±öæò÷ùwbtÏlçõ¬Áÿ�?ü+Kù~Ýý.ßõfýŒwÎq@Gˆ|?zl,5U³}f¸k×#›ˆÇ¯^i5?ĺÚ:¡ß,£&õɺnœñYº÷ü ÙÑ}Ÿþÿ�m´Ï—ägoÚ#ÝÓ¶ÜçÛ4ÝGþí½Ëÿ�„kÊóeóvùqå¶7~8ëÞ€5ÃñÂa4Ú:¦„m»í¯ŸõÆsÒ—IðüO©k«ý£ª—ʹ® ÿ�G„óÏ'ŸåYIÿ�ü%’çþ¯³ý…1þ£fííŸlãí/þíkÍÿ�„ggÛWÊÝäcoÙáû¾Û·tïš�’-3àÝbOí O+&¡òý±ðq4£‘žsŽ}k¬ððdž´¡’qg_÷p1ÿ� ÿ�Ž­ŸøG>Ѿÿ�ËÏ‘¿l»1ߦÜ{cßxwoü#NÌlû;qÓ�iQE�QE�W7«xvD¸¸Õ41wòDé,ÄW!€Î¸çjüã®à@é( Ô![ï·i%Óõ; ´7q²�K&CG"ôe#£èTúêkþF·/‰F£jÖŦ†¯‰ñ´n1°ûñ¨<`ä�ð:Ïx>ÏÄ>}Àžk=EíÑ.âcòÆÙÊ²ç §' þä¼BÑê2x’Ó_¶ŠÛS‹EWµxäâB‚ä—…ºŽO8Ü+É�«®†}_Q‡WxíuµûYÞÛ‚#œy™#Ôrbby\‚vîn~ͬÜZk0,ÂkvåÞG@èb[Ë`ò�%3•Èë€ÔšÌïúÖ‘â“5Á±Ž+¤Œ¬sbB@oùç&;g‚WÐ&¡Óî¯lµh×PÒ»mþ—tUÞ3äÃòÈäm8 2O;ºä€ox‹ÃöQÞx|,Ú‘ß©ªÚËqåJxÌœ:Žj{YiÑùúžÖ±ºbµ.sÄ–ýüÌÏNüz Á×Ͼաùº0_íóvZ ÊyRuùyÇéSÎ|ÿ� =†Û]ÈûÎð-SníðmÈÛ×±øÐ­‡¬›Äúºõ<,Vä©ÜƒÈ~§ÌÉühðÿ�‡¬¤‚ü´ú˜ÅýºÊðúIÉ÷¬›3àOøHõMöº/“åAåƒj˜çÎߥð'“{çÚè¤ýº}›­Pü»Î1òôÅ�?ûÏþ7Ú<íGöüi\mÏ‘Ÿ»¿n=±ŠÓñ‡¬£‚À¬ú™ÍýºÚËp\zÉÁ÷®_> ÿ�…aÿ�ÚGÛ¿±¾÷Ù“™äõÎÜç=ëK]>òl¼‹]·A¿mª—xÎ~^˜  kïY/‰ô„êxh® 'S¹'€™‘øS­ü=d|Y¨Ççê{VÆÕþÔ¹Ï2\wó2G;sêkðøþ=/e®‹äùSù€Z¦ ù1‘·ëKðü$÷û­t_#ìVÛµM»·Ï»o\mÏá@/…­£´þ؆6•‘uÁ–V‘¾âuf$ŸÎ›­xkíW‘êºd‹m©E"ÊCgʹ*P;àr=ÀÅGàÏìÿ�³êßÙiZh¾ÁO¸�®–€<£Mê×¶žD‹¦ø†vóÞ%e¸m¬:I Œö°AécNòµ[NÒõ4–ÓP†çStšS-瓾ïƒAç˜`Œ÷š¾‡k«ýžW/ 嫵»„$ FB8*rq\Dv¬u+Bñ,"9Úkù º¶,ìòùŠñsŒçnr=O4SIß-džm5yM”Ëap,5+w ½ËÃÀn «e[#'_ ê·Vz¦·úuÃ2øvìãi–DÜl•=ˆ=BF -ȵþÁ²ñÁ6>›sW.¹G $,£SïºIÏ &³¦jšBÙFš¢?‡¡t[›%¡RÀ•Üî�ôÈÈ8 ’ßÄj2gj¸kUÇØŸ#\uéÏèi4?D“êçû;T;¯Ý¾['8ùƒÇ£·Ô<Iÿ� ^ Ã@³2PÉý¥ÀçÁÏ•ÎyãÛÞ›¢j$Yµ/@³boضu,m;õ|öæ€( v?øU—0}ƒRÉÓ&]ÿ�d}¿q¹Î1zÖñˆ"“M…Fª®/¬Û-dàqqôëÅa‹ï¯¹Oì;O³ÿ�fL ¿Ú…ØÙ;|¿Ó5¯â CĦÂ$Ð,Ñ~ÝhA–yûDx껜 öÎhMOÄ6»¢7öv¨6K)Á²pOî›§О ‹þ ¤þÎÕ0l#]¿b|ÿ�¬~qŽ•¥¨xëš)mÍ\K.Å–w~鳓åñÅ ¨x“þù›ûÏÍû`§ö—óœù¥�O¤ø‚$ÔµÖþÎÕNûål '$£Â9ãƒÇòªkÑëÿ�gêyi5›ìo™¥<œqŒóéV´­CăR× hlÆùKƒ©ciû<<ÝsÆ}ñÚ¨Eâ/øCµu§”dÔ7?ö+™¥ÝÇ—ÎG^qÚ€:2Ê×SðvkyÍo-”;£qþÂ}ˆ8 õf¹ nѼ16•o©H.ô95c1º¸;ž-ÑK¹%ù—’wúgwMÇ·ðñ'Ã:Qaƒö8rÎ>AZDd`ЙY}£BM"â{Íu«Ý–ñ&ù`íC)Ž]6å±Ëpqœ€#Ñ`’ÒmSЀ»‚à_;Ùù FãÌå¢'…b1ÇÝ8ìIjß½Ð.tÍ:ëBæÓ-®Þâm1^èåVhrF9Ÿ/¡'¼çD„ý«FÕ¼>É$³æžÖF*’‘ ÈÁÿ�W&03ŽÀ0î�3ì_ìÞÓntWkËcá딺²i0m›m¿˜PrA(Håqžz;½z3ðÎx³õ<“y³}¿êqœã§½`F-u]LºÒ®>Ë©Ûøjt¹X û�#•O%HbTû‚ v®¯üD~·B´c°2ÿ�hó·Éë·ËëŽqŸÆ€4üA⤂À ;T\_Û·Ídã8qÇN´_x‚&ñ>ÿ�ÙÚ ÛÀÁ²|œ„è1ÍC¯ê$hl|ÍÍ�¿€®5,äïêÿ�Z/ui,Ú˜Eqµ´²„Ï>_¨{D<Y¨Éýªá¬mWb|ŒIqÔc§?¡£IñI©k­ýª÷ÊØNHÿ�G„sÇåQ[ê$ÿ�„¯Pa Y™ ¨dþÒà óàçÊç<ñíïF•¨xjZáM͘ß)pu,m?g‡û®xÁϾ;P;]z1à+Ø¿³õ2LWcp³}£-'|U­O_‰¼;`ŸÙú Å͉ɳp'ˆõÇ·µBÖÿ�Ä#À—¨4+C Šï2hò>i3Ç—ÛžüÕJÿ�ÄgÃÖ!´5Ascµ†£’Hž, y}ζ{ÐÝ[Ä>¥¡7övª6_3`Ù8'ýaÇž-† ·ÿ�Y–ÚêºN1qFOï{f¡ÕuKC/ Y« æ(¥ÇìópuÇ9öÇz~›q©ÏñΣ§ÃhÃIùDW>vG›þêâ€;(¢€ (¢€ (¢€9íkÃ_j¼UÓ$[mJ)R>UÉP@߀ã‘î+‰ÓD:µí§‘"é¾!‡]¼ßÀw‰Ynk’FH##ý¬zz½fjú®¯öy\¼7–¬^Öî18= à©È=Å�pvm¯}¤é:’Ki©E©j2$Й;æ%á~à7xù†Ì:Nùn<3i«Êl¦[ a©[¸]î^ u[*ÙÉ8>ÌçPÑôÀcïï&†ê&Ø“ï2:¼lcpX¹ÈìO5‹r-°l¼F°M§O¦ÜÅË®QÃIË(Æä»î’GCÅ�Õn¬õM!oôë†eðì+ÙÆÓ,‰¸Ø*{z„ŒèmüAñf£'öv«†±µ\}‰ò1%ÇQŽœþ†¹¿ &³¦jšBÙFš¢?‡¡t[›%¡RÀ•Üî�ôÈÈ8­û}CÄŸð•ê 4 3!±µ ŸÚ\¾|ù\çž=½èMÄ$ú¹þÎÕë÷o–ÉÎ>DàñÁ¬¡®Çÿ� ²æ°jY:dË¿ì·î79Æ1ïWôMCÄ‹6¯åèlMûÎ¥§bqþ¯žÜÖP¾ñü*û”þôû?ödÀËý¡È]“·Ëý3@ž!ñRi°¨ÓµUÅõ›e¬œ.#>x¤ÔüAkº#gjƒd²œ'þéºqÍGâ CĦÂ$Ð,Ñ~ÝhA–yûDx껜 öÎiº–¡âC®h¥´ 5q,»jYÝû¦ÎO—Ç2x‚/øL&“û;TÁ°vý‰óþ±ùÆ:Ré> ‰5-u¿³µS¾ù[ÉÉèðŽxàñüªÔ<Iÿ� |Íýgæý‚0SûKŒyÎ|¿Ò¥j$–¸S@³f7Ê\KOÙáà~ëž0sïŽÔV-z1àÝb?ìýO-&¡ó}ð34§“Ž1ž}+¬ðñφ´£‚3g_÷qÑ_ø‹þí]F…iå5 Ïý£Êæiwqåóƒ‘לv®ÇÃÄŸ éE†ØáÈ8ù�iQE�QE�QE�UcG±×´É´ýFšÞQ‚Oªž ŽÄUê(Î|Ciq¥YêPëLoìo¬IxñŒ�’–p8ƒ÷±´ã¤€b/ôKûØ"†[ý5uË]§ÌÝq !Icó®0ÎáŽwg#Ò]XÚ9]eaAê®:çÂ×úd‰€ –ÊKØ®žÚêfO!(+˜@»qòñŽ8� ñ·,—š:.¨›55l4ió~ê^Ïןҧ¸×%>,ÓŸûUXÝ ¾ZdæK~GÏÐcõ>©kâMF}2A§é)ö;±rAÔd;€G\¨ãïçð©%‹Ä’kVº‡öv”óBSûFNw´mœù¼¿Ö€)Øë’êïý‰ªÑ[ü¢4ÈÀ~¿=×%H/ñ¢j›ûƒòÆœeÏ­[·‡Äj÷·ÇNÒH¹H”'öŒŸ.ÍÝüŽû¨Ó!ñ&ŸÊ;I:æYÆ57¶qþ£µ�`lÉÿ� ŸÉþÇÔñý‡³ÍòÓgúŒgïgúV§ˆ5É^ 蚢âþÜüѧ8qÇßëGög‰á þÀû“¿û;ì^wö„˜Ï—³v<ÇoS‡Äš„vÊ4í%<›˜§9Ôd9ØÙÇúŽôRû\”øŸHìMPmŠãå1¦NBtùémõÉG‹5þÄÕI66£o–™’ã“óô9ý Z¸‡Ä“êöWÃNÒ@¶IT§öŒŸ6ý½üŽÛib‹Ä‘ëWZ‡öv”DöðÂûFN64œùüÏÒ€$ðµÁ¹Ä­°Ô_÷s�|‰××AYZí¢_I~–ñÍstÓ„‚S"¨*  ÅWŸ—Òµh�ª÷¶6Ú¤–—¤ÐH>daø‚=8 ŽAbŠ�âZÆO ê¿Ún|;¤öË;¦æ€Hѳ…�Cóú›Üq|'¦ê6š®’š~¦‹ž†E[È,U!ÔíÏ qœ0¨‘ƒ\Òx.ÊÛSkËÛûbò’ yGîÜB‚§h'œ`(½½¿ˆ?á,Ô@ÔôÏ3ì6¹oìé0G™q?ƒ×¿qÓ·C·×ÌúÆÍOLR/ßví>C“±9¾ÜÖ‚ø[eä·c[Õüé#HÙ¼ÔåT±Q÷=]¿:K f™¢Öõe3HeÞ§,@ûž€P6 ×?áV\·öŽäfLJ}÷mØÙ¼ìgß…kø†ßÄM‡ÌÔôÆ_·Yà. çí1àÿ�¯<g_nµcþȲ[KþÙÕ¾ÈÑ4&?5>á÷=êkŸ }®%ŽmoWdY@<ÔûÈÁ”ýÏU€3õ;}|kÚ mOL,e—i|€Ý7QçsúP–úÿ�ü&í=3Ìûyoìù11øÇ×ß5~_ ® žMoV2@KF|ÔàAþC@ð°­v5½[ÏhÄE¼Ôû ’Üõ&€)i6þ :–»³SÓ åÞN!Éû4<ßð1^‡×„Pk¿ð†kjZw–$Ôw/Ø'÷ÒîÁó¸ÉÎ88÷­Ø|-äKq$zÞ®âA$‡ÍNX*®~碨ü*1áÖÆk1­jÞDÆBëæ§&F,ßÁܱ  gþ­+qýŽ1ü´ª+[xìí!¶ˆ1¬i““€0*Z�+ RðþíIu(Åoª  ﺸl€r�Ç#ï´îÑ@Uuj—V–VAæÓõ­+Ã×1\��o”B�nÒDß>N¸!‡7pk¿ð¬§c©iÆìv%ƒîÛäôÝçc8ïºo@³×m|«2)•#¹„í’0à ô#¨9ŒŽPG&–Úkk:·ÙÍO¹·n>ç¥�Sñ¾¾ °ó5=1‡Ûíñ·O`ï?ëÔ_[ëÿ�ð“éµ=0¹Šãi|€9w?˜«÷>kÍ­êÌ#‘e_Þ§ § ýÏZ$ð°–ê—Öõc,!•ÍNc?Áì(•½¿ˆ?á,Ô@ÔôÏ3ì6¹oìé0G™q?ƒ×¿qÓšM¿ˆ¥®ìÔôÀÂùw“§Hr~Í#÷ü cסõÀ¼¾Ùy-ØÖõ:HÒ6o59U,T}ÏWoΈ|-äKq$zÞ®âA$‡ÍNX*®~碨ü(Ö wþÒ58Eå]åMƒî?4™çÎúöãÞ­jvúøðåmKM)ö›§È>|XçÎìqž9öëZ àøÓO’ÁuX[ÈY<Ôä9%¿ƒÜÓåðšÍm¼šÞ¬b£ujpQƒ/ðv*(ž­oâ©h[õ=0±¾m„iÒ ³MÉýÿ�#ôê=0K(õþ"·Ûî­g?Ù?)‚Ù¢Çï»åÛ5zo yòÛÉ&·«—·ÉóS†*ËŸ¹èÌ?³a Ecª>¢×·—W-ƒué ›·`aGz�Ö¢Š(�¢Š(�¢Š(�¢Š(½í¶£i%¥ä)4™~ B#FEr-c'†õ _í ·>‚Ò{eÓs@$hŽÙ‡B€!ùýÍŒn=µd`ЗøOMÔm5]%4ýM9<= Š·4þX,2ªC©Ûž@$ã8`ŽÞßÄð–j jzg™ö\·öt˜#̸ÀÇŸÁë߸éŽl'‚ì­µ6¼±½¿±/) ·‘Dq®íÄ(*v‚yÀàv¦_ l¼–ìkz¿$i7šœª–*>ç«·ç@ú¾¾gÖ6jzb‘~û·iò‰ÈýðÀö沄çü*Ë–þÑÓ¼ìɉO°>í»#wŒûãð®’ßÂÂÙ¦hµ½YLÒ_÷©Ë~ç ü!ÿ�d¶—ý³«}‘¢hL~j}Â#î{ÐÛø€i°ùšž˜Ëöë<Ó¤ý¦<õçŒãëíÖ›©Ûëã^Ñjzac,»HÓä�~éº;ŸÒ´.|-ö¸–9µ½]‘dI�óSï#S÷=TI|,&¸‚y5½XÉ-óS‚Aø= �PK}þ ‡öž™æ}‚<·ö|˜Ç˜ücÎëïšv“oâ©k»5=00¾]äéÒŸ³CÈýÿ�õè}p. z×c[Õ¼öŒD[ÍOº }ÏRiað·‘-Ä‘ëz¸{‰’59`ª¹ûžŠ£ð  ( ×á ÖÔ´ï,I¨î_°>Oï¥Ýƒçq“œpqï]W‡³ÿ�Ö•¸‚~ÇHþYíŒÖcZÕ¼‰Œ…×ÍNLŒY¿ƒ¹c[Ö¶ñÙÚCm"8cXÓ''�`P´QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙhdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform6.jpg�������������������������������������������0000664�0000000�0000000�00000054547�15030617045�0023313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��µ"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ã~"K§eÙÃ}§[1ž8õA›K’ŠAŠ_b#¯Ì àã²¢€<êç—šÏÃ;KI°Òtémõ¹²¾Û²$*|½Ûÿ�€É¸¦q׊hº·´ð̲ê²Z][YÝ^ͤéZØl^س(ŒG»‘((vpHÓ#ߨ +Ä÷VVÿ�ï¦hÿ�³¡:)ðÜ>×…Ì?»LŸã ´ù­‡·P]ü:ðãÛÏÊšm¼nѸl:Æ¡”㸠‚;]-�QE�QE�QE�QE�W‘é—Þoùmo¦j±Þ Ë©5¸°R¼WyãËÃ2®HÀ�c¹õÊ(ç/KamáoÜè-×à¿–M_ìƒ/ö ò—óöÿ�²nï»χSi1ø²ïO°·ÓïÞ �ã]°ë:3ÝÜÓ~’O</Jõ(Ëoµ_ Iñ»LXµ‹V³ŽKya†9îä” #°BƹnOW©QE�QE�QE�QE�QE�q¿%Ó¿²ì῾ӭˆ˜Ïz Í¥ÉE Å/±‘׿Ppqƒæ·W>¼Ö~ÜêZM†“§Ko¨=Í•öÝ‘!SåîßüMÅ3޼W¾Q@.­í<3,º¬–—VÖwW³i:V¶¶,Ê#îäJ œôÁÈõ[Ë­Ùj,nŸ=´Q$:’–Ž"È6¤ ‘œt9#‘Ôu®¦Š�á~­Õ¿€âÓîbÂX\ÍmopŠÝD¬H•sÎÒIÇl8®êŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÈôËï7ü¶·Ó5XïåÔšŠŒ\X) ^+¼ñåá™W$`�1ÜñÞ–ÂÛÂÞ ¹ÐZ1¯Á,š¿Ù_ìAå/çíÿ�d&Ýß…}E�ywé´˜üYw§Ø[é÷ï€q®ØuÇîî?鿉É'ž¥gøƒN¶Ô|y¨êZ_Ø5]r(§Š(Ì—:l©nÞQeÞQиÆv™Æ3ÛØh "ø]ÿ�#%·öfßìÿ�øFíµ6tþÑÞwoÿ�¦»wnïÓ5ë´Q@Q@Q@Q@Q@Û‚ Ç�œ ןGñ2g´ŠwÑa†FŒLÖÓ_„›Ê ê¥>uÁw>Aè-¸©Ú@lpHÈÍy5®ÝJ×ÃVz¬_`½·Ðå’Âé•‚ÀT¦z¶ÐwFÀ÷ûÀæ€7æøŠbŠ‘i¦Ég.3<Z²7–Ú]™Ôöç84ù> ´‘Ã5¦˜±L•rºº4l}…ùO¦x<`çŠäSûJÎæÔÉ4‘k7öé4^E¹µ¼díз40_£Ímce¨¬ì7ÝéWÛ ž Gž�ëÐm'®ÒI ¡> Jo^Î[=2À&2úºyrö_f3ê½G¡–Ãñ iÒd]?M[¸~õ¼šÄj[Ý[nzqØàç¼v÷2ÚÉikm«Þiñ·“X[ý¢ÔõrK{@ÁRxH·Ù¬ÒZïJ‹æŠö >ÙÁÜAÉÇsœõ É œ|DylšæÞÂÂCbXª‹*zü¥y?N£¦xÉ/Äo.Ú+Ä´Ó¦´¿$z¢–‹ýäÙ¸^2;€2G58¼+ÛöÔccÕmôû`Ž­ÐJÛŽ{’§¨ÚHLZ¤7Á¥ŠþÇY˜lB4ûsoyŽ€Ž>lŸx…€9�馸„mî"YmtϳÌ—ršº<yôbåö'ƒëž*ÞŸã«yuv°Õ…€(Z×QIR^G�€�8Ïž8s\lPêO,vš„ò/™s¦OcmåJ:3Fz“ËÁÏÌ9 ½ËC-•¦«sd‡Z}ÆŸmç[瑳$ñÇ Àî¤` �õôt–5’6WF•”äziÕçZˆµ2#C­jú:¨Œ;[F&µeà«;›óó r&½Þâ«xî-åI¡‘C$‘°e`zGQ@QE‡âÇÔcЉү•ãÜÛÄ“yjào•åXŒ7׊â ×|K6³5Œskr\Z±[»Tk °�fH]‘wŸºW¸ÉSÁì¼g\èD×[ÈÚ…˜ŠHßk+}¢>Fx$ œG+ˆ¼·‹Rœh~"„;ɯ~îõ#Û­äãåÎv?C´ðsÆá�.Á¬kì%¾Š_]i û"ÓþÑn㪲`“צ—xEÕµû{7¹»¼ñ éÒ`ÛjãM )éæ@ûùÁî¾¶Vñßo­4{†îK;kÈü>fK¶G)²Tð‘ÇÊ3ü$r¡RÒxdþÌÒ­5GVO—Â×& ­¿Ä‡’1ž¡AçæSÅ�nɨø¢"¶½¹×í¯fm¶×+œÖòžÀƒ¤ÿ�svObieÔ¼TÍš6¿o¬ó>Í1ÓŒ3¨ûÁ$À'ê+žW‘\ü6¶±} ÚiNÁd¸Ñ®<)6øTç%>bqÀ,ゼКu‡ØÍ­½…ž£cæ˜çÿ�ŠZëí6GÁƒ¹ç-¼vÝÀ ‹ûOÄ—þ]‹ø¥€ye8ÓRESÑÐã‘×nÌ0i°jþ –I.í¤ñ5Öš›„ñˆôñsnã¨)‚[·Ê@aÔnÈ–ÎÂK„±éòéʆHõ¨|+:¼L ÿ�Y‚ŽÙÃ)Ç̳̽YÙ›˜¤¼µÓl¼¶Qo„çò®ƒpÔœdúc¿ÊÀž�6ÓWס´’îæïÄRé2Ü^À4âуÇï�È�w|€;ŒÄ:¦ž¶öºý–¡ ¹›l”j"`q·w–øOaóg±=,àâGÓt«M·"Z¿…®M½îr¼’1Ü… ;†¦ÃioÎöÚNœo“è·œíÁxÎãŒã‡¾Ó“@ÓEy—‡µ¹´$Kk=ö—…gÓàЮ¢žÈ°ÎÕÉ`FNâ¬s‚v“À¯DÓõ ]VÆ;Ë)„°H>V�b<‚E�Y¢Š(Î<C«kúf£ªÜKP}*+ÈícKíüÛvhã|ñë—#¨#9É"ºêþ${+h¥½×"¼¹æÎê5ÓžÚãÓ¸Á`~æâ} `Ôú”wvº®§}§Ê×VÃ_¶XäÌ"€æ6'†ÎARqÓîãœI4Ë -æÕ4}/O¼›QÖ&µ–ÎúÉ\gç~hÜ#€Iï� ™u/¼±ZDÞ ƒVU=¤ÇN1̽ü¹6ŒãûÀw^E8j~$¸¾+bþ$sÅݜ릤¨;2r88ã Ù…s‘XØ5¡´†ÆËP³Y WxZäÜÙ7÷K+díîwíf’k]>KŒÉ§>œ±ù‘kxV`ÈGy9 |2œÀcŠ_Ä4·°Iâk­1¢Å§‹›wTÇ‚[ýÜíg†¦±®Áh÷wWž!“J—ÞþÜi§`?óÓ‚�ßÈ¡qÎ$Öv{ ÞYé–.Ž«my„î<›°Ý”·Þ>˜ã?+riÎzem3K²Õ:­Œž¹6÷›Fw/R:õ ûÀ€(qõ/ÛÛG¡u¯ÛÝÌåmnÑ4æ·”ÿ�àHÚN~æþ{1=]GÅLÐÙ‡×íµ»ü‰³Œ3¨êð9Àê+žTޏ0ÚZÄgk]'O’åÔIq£OáIÉŒ‚ÑÇÇ!û'4&Ÿ`-^ÚÛO²Ôm|Ý“Ä|+r.,òÀ`ÁŽ3ž[p àPI­â7ÕQmSÄÍlËöÍ6ìéñ–_Ta‚GQ0Ý7)ÙèºÔZݣϼöφ9 ¸Ú$‡fUcÇžý1^K%žŸ%„JÑi÷b¡eÖ!ð¬âHIûø 1ŒüÀãæ^¤ÚAõµáZd6š½§…®g òìq¸ ¶HÆÃ|¬ À�ö*+šÐ<Ro$NÕ¡–×SbÁ¬æ‚œs˜Œƒ=:©ä`õ×K@Q@Q@Q@aø±õô"t«ãex÷6ñ$ÞZ¸åD9V# õâ·+žñœ s¢A\Io#jb)#}¬­öˆùà2pAt 6 wijk3XÇ6·%Å«»µF°Ë�d…Ùpû¥{Œ•<kû o¢—Ä×ZH~È´ÿ�´[¸ê¬˜$õé…eÇCž)^[Å©N4?Bä׿wz‘íŽVòqòç;¡Úx9ãpÈÒØÛÇze¾´ÑìV É,í¯#ðù™.Ù¦ÉR7ÀbG(ÏðIPºº¶¿of÷7wž!}:LmBÜi¤=<ÁÈ�8=Â÷Y5AV×·:ýµìͶÚåcÓšÞSØq´ŸînÉìMa%¤"ðÉý™¥ZjެŸ/…®L[‰$c=BƒÏ̧Šl6¶±} ÚiNÁd¸Ñ®<)6øTç%>bqÀ,ゼÐA.¥â¦h¬Ñµû}`/™öiŽœaGÞ &?P \ò¼ŠwöŸ‰./ü»ñKòÊq¦¤Š§£¡Ç#®8*ݘ`×:šu‡ØÍ­½…ž£cæ˜çÿ�ŠZëí6GÁƒ¹ç-¼vÝÀ¦Ëga%ŒBXôùtåC$zÔ>^&ÿ�¬Á Glá”ãæ^䢃Wñ²Iwm'‰®´ÔÜ'ŒG§‹›wALݾR£v@ M_^†ÒK»›¿K¤È?q{�Ó‹F¼ Ýò�î2q&³³71Iyk¦Ùyl¢Þþ/ Ïå]à#©8ÉôÇ•<Î~$}7J±ÔÛr%«øZäÛÞàg+É#ÈPøaŠ�í4_êšzÛÚëöZ„‚æm°jR5¨‰ÆÝÞ[á=‡ÍžÄôx´6–ñ¼ïm¤éÆñÐI>‹qáYÎÑœŒî8Î8{í95¹áínm ÚÄÏ}¥Å!Yôø4+¨§²,3µrX“¸«à¤ð(ÓhªÚ~¡kªØÇye0– ÊÀìAAàƒÈ«4�QE�QE�QE�Œ7!PÅIÈê+Ê!q“ Zxa›O—A[Ým#i?f*q”…Á$}Ó×Õ¤Øb3o—´îÝÓó^Yaö#KФv›RÒ§ðôÄÇ´;Û+-¾ïúéO—ž£��g_I.›e,·úuœžÄ˜wTf�Ǧpy75ïXé ö³›FÓmâA¬¤žâÍ\°BÅw.Q†àð7Œe9–]3N’K3QÓ§ð›‚@Ín¬J÷áÎ@'�µ­©¯Ø-|Gqáí—z<Ú1…$æ?i„ž©˜ûdíÆzài¾bý²îÎÙ#U0jðèX|ãå‘K€3é‚§9N;ý�ß™&{ >ô1XÂè7f îËç>¼ಎv¯b†Ñžkí#„.=B{tÌŒÊÂ0‡ wpP®3Ÿ»ƒœ»«2ÒÙÄ—š\úaâQq⫈儩èªê¥q¸Ã Ž1ŒPh‚´²B¶ß<dɤ͡ÝùRs‚èC“ÏcÀ9ù”"éio"[%­ÜLËçéÓh7B[PGDýçã‚Øþéà ’]gI[d¸ºÖ4íBØÈÞQâÛsgFâ¥Cg.à:ƒÉ¢mSNŽH"º×t¹/íõ{ÌZ0NBÈ6œgœ?ìœPet“o"âÚþÇs»؞ч¯Î М–õ ɤ—û)Ò#q}f-–0ÐkPè79íăx^~Œ§ý“Š™µk{å&µ£Yê…UÚú?\5½ØQ‚­Ô޽ +t‘šXum1îæ[=OG±1ÈMÕ¤ž/œÃv««Ç×=þeäPiæÿ�}Ķ6K XfMìÃz1°/œûc#øXŒÕ½+Z“I’gÓní4ÝBPÍ&˜t[¿"äŒ~ñNâG_¼ž~eéŠ1jš<–˜®ô—Óyrh—-•Jíp¤~,§iä“[Ò º¸Õ´íBÄºË Ü‹›Cë‚¡Ž;awö¨Õ|;âK/Ú±¤K¨B‹‹y¡h¤ˆþëv=ˆ${ñ[5â‡YÓ­&´{oI¹¸ V×TÅR»Áœ`H¥X÷;6|Àwì4oˆÖl]?]Õü<“+»-MeŠcÜ@òÏN ç<g�86G蚆´—Öjìr´G’X}ÁŒüÙõÎ+¹ÿ�‰{Ic­bóDmsk^ÎÀ²'”c¦1ûÏb[OiãKˆí¼>²M“@/­<ÕDÞB}¢2NÞ­Ó�“ž•ÅÁÿ�Ö[­+Ú ky[X˜È<ž±só. ù=€_îÐmÓ¢·ƒRT¼ðûk·ªÒI™]e‘ 9Þ„|Åû`çÖ™w DIå]êúd÷3˜7ê÷JÖb y€¡mÉ€ n\ÿ�ä?E2X ?QÒ7^i ¯^°…�d.0bÎ06ç({Œƒ>‹¾Úÿ�MÔô@÷v’ÜjlÖÙµ|óÌA±±±Œ¡ÀãøI$€cMwi AöÍZÂì–e¶Õ`ñdæ[`Ý7aO_ïÛ󌕖î¹HßTÒíõ7Bê°ø¦àÅ0RHG$z:¬M= nŽ™¤7…µ Ñ'¶š{Ë(Œ`3FÑ«#äýæHà9Á;« ?Z›04{rM:áÈžÒè騌§�ìVûœíÛ†Ïlæ€.%å±Ô$ŠÖÿ�KÓîÉ' ⻓è#·÷¸õ 1È#Ž «#™-¥ÓbµEd¸Ñ§ñ\ÁdÎNc8 óg®YOC´æ©ŸÚÍl¶¢ïÄW:2)Ý ï§}¦RHd$–=8)Ê“À§Iã8'1Ë}¨xŠ{(6½¥ÔRiËs 8lHÇVÈÈá—$È¿ÓÞÅ®æÆûMʰÓäñUÈžÕ”õP@$.2 wRx²^ÙGÝê–Wñ–?f¿ÅWh³Ü1–síœpI¬|gþ’·WºŽ¸—ëº;këc¦ítÆ@•Ccбò “€‰ã7‚Wž+ÍjÓY™A”«é­oqƒŒž@ÜFyaÓæ rÝ[¤°Ç>­¦&¢ñì‹XƒÅW’ ß8SŸ”© 6º¬všÆëKíÇRR$’I|M4Ö·Ü`’ ž}!‡xrÓÆ n’A§O­ÆÎÀÝØO.›ä¾áóydð;“…!¹È’|[jöÂÊŸ\hÀ2ÍkrÚo› Ç’I�…ÀÇ[€(Ö<?âÍ7_g¶ŠâÙuWtÖÑÜ,¸ÿ�iXpéŸâ£ +z¼*OÁ:)»¾ñÆ›W¶dÓ…Ý»ð0pK-•8È`FMu>ø¥g‘Øë’Ì#yJCªNöÛXHˆ\„Ç ¸ §©Û@ ©@%×u[Í*à&£»j’[HÅc˜yPíÞ¸Èä6$×ï*€òïµ K«–^ M~EžÞbHÆÙЉ2ðÀ8Î>l¢­êa©ë×±Ç/Ù5…Ö­žÒà(%£1@2§îÈœW<eI�j¤¬o¯ôÛÀÖ:Úkó˜o`åa¶]Æ6`A‚åÛ Œ�µn Õ„ñI.™â)5+¸¥òçt%—�Å ™cÊÈ#œr+2×ÎóbkmàÌí5µï‰®£ŽôµIQ“‘÷Èþ x©nÆú]JÔĶº‚ëWÍ ý²ìY?ãëqŽvØÌmœŒ}áš‹O yuáý3[ o({ß²_Âþ_™'™ÁCÕ9ùNAÞ€‘Õ„–ó%¼šjÙ"4w$þ+˜ÿ�\ÎàçÕÿ�²sJoìÉ®$»²Ô4àÊéfþ)¹Œ;€T¨-è[F­®jö–úê÷•ÕÕô_j²»µšÒßh!Ü´YVùÕHÎÖã®vŒ™<m«,ñÜÜÍ{§µ’+Øo,l½@‘B`èÍŒçÀ¼×¶Qך­â³m¨Ãâ»:Ð0ÇÎ6Ÿ¦BcûÃ�š%»."Ž]WL‡R’0±êðx¦àÇ "9 ØNÖàd/µh.Þ[g¼µÕ&UiÏÛ¬Lààœy`o=3Ë3¸ H|e –ÖÅ/c˜ý®Â{ë†ùyjŽç�©ç š�Û[Ës¨´vú†™§_LÇÅwÞû€ ÈÎ0aÊ9ŽÞêÅÖXí&Ómí£WKÎ\äæ6À_›=rTç)ɬeñܶ&Ì J}%Ökë4LARcÝ”`€TàK/ï§$½—S¸µ…•­¦ŽþÅn à™„e‰õ<qÃÉ  u¾ÓÞÅåûE…îšÿ�Ķ_\,Ö̧øA c r{©#ºM Æ–ÚE².¡¬i—z[œÅsªnnaÏiCª³£ ep2:µpòøßU3Åsw=÷Û”´v÷¶÷¶ps…ðWØœÓßøMµx®ŒñIym«Íó&[Û³Ü`–_, Øàd–¤@=ö ⹂9à•%†E’FÁ•”ò#‚*Jð}7ÇÚ†™¨—±·¹ÿ�Y¾êÂçQ³JYNLeQvœüįƒ¸d“^«áOé^-Å«ù7ÐßÙJÃÌœg‚C/L0ã‘Ðñ@Q@Q@sž86G蚆´—Öjìr´G’X}ÁŒüÙõÎ+£®{Æ—Ûx}dš &€_Zyª‰¼„ûDd½[¦0'=(‹¹ÿ�‰{Ic­bóDmsk^ÎÀ²'”c¦1ûÏb[KmÓ¢·ƒRT¼ðûk·ªÒI™]e‘ 9Þ„|Åû`çÖüKYn´¬_h-­åm`c òzÅÏ̸'äö»MÑL–OÔtךCk×…,!@ËŒ³Œ ¹Êàc €6ò† yŒWZ¶—qy2ÛïÕî•­<—u nܘMÀ¹}Xr3æ»´… ûf­avK2Ûj°x²s-°n›°§¯÷‚íÀù€ÆNΔÚm#SÑ|Ë«9u-AŽŸ÷6ósllm½Pà?„䘴5º:fÞÔ'DžÚiï,¢1€ÍF¬HŒ#“÷™#€Hçî  Énà[”õM.ßSxÔ.«Šn S$„q‚@ç¡#©ÚÀôr^[BH­oô½>ì8’pÞ+¹0^‚0[p{PÂ1œ[oÞ5šÿ�fG¨6ä“5Íæž”ŠÑüAÛ·=³šŒxÎî{#lF«q¤¢¨–úÄÜBÀœ2’›¸ÇÊ�c ôµÕŒ‘Ì–Òé±Z¢²\hÓø®`²g'1œù³×,§¡ÚsH/ô÷±k†¹±¾Ór¬4ù<Ur'µe=T Œ‚ÝÔždIã{éãŽkÙ5YíáekKˆ¯ìâ àaˆBÇÜðá‡SJþ7Õñ]]K~ºˆ 7Ð^iáy H¡1´z3c<ŒÀ¼—¶QÁ·z¥•üeÙ¯ãñUÇÚ,÷ e†Üûd'†V[«t–çÕ´ÄÔ^=‘kxªà£€rAƒ€{ç sò•$<oªÁtÓ@×Öº¬Ê¦g¶ ð@É�ÜG�ä°ãïÉ5[{¿‰³ue5öžbpÀçËÌ{Fy'�ƒÎ@94ÐZê±Úk­/´kIH’I%ñ4ÓZßq‚H*yô†}à9ô/ø³M×Ùí¢¸¶]FÝ5´w .?ÚV:gø‡¨ÈŠñ¥ñ•ÛÙµ’&§6ªË%¤÷¶XØ‚„¦p;�8à©è(“Æ÷³Û+^>­qe×¶•oìEÕ»`X!ryäðpH`y4ôå>ø®-ÌVž%–vDÔþу’v‰R#òãîîÆ@ç§±Ï M ‹$R(dt9VAE�>Š( Š( 'j’s€3ÀÍyN¶Ót;﹊M µYù¸Pà[ù›?¹&H$ ‰-^¬I H8éë^O¥ywñhÓèò-ޝ‡äÍ<åU· wR2VEô@+@ìˆlî®ü<ðo ?Û­\±‡ãø$èza»ýíÃ_VÙzÞ.Ôt³!´,¦‹n÷"ãpqÕ$�à眂Êœ®© Ô¶Æm7R¶ð¡Æè?z c ÙчFŽ:Vµõÿ�ø›\x¢IDÚN³k¡®c•Ú7c´±¯8È$}ÖP53öûÏj:VûKÈÚÄ]Xλæt á¸uÎG÷†+ŸÕ¥7¾,Önã{½6ùõ+hn-÷¨p†Fr1Ä0ëÎ ­ýd KSÕÅâ7_,ü­’n¾n¯O2<•$ÁÆppk›×öÝø·R‡T‰-µaªÛá v—È€ÆAÀb½FFz@ê:SYêC©_,·W+ Ì~uØçŸ—“òŽM<h¢ÛXŽÚBõ"¹†iePë†`ÑŒãn9ÜsëMÖ4”K$}®øî½›–8ýÛôô54ºJ ~Í>Ù}ͬç?ilðÑwüh m æ÷K7׆Ê8ãÛ d*7n$`¯Nju–‹öûic¹Ô¯ä\ºÆL‹¹vœnsŽùÍ>×IC­ê öËî#‡‘rÙ?z'IGŠëý2øbîQÅËâ4JM:I|+®ú•齊ÀÎ’PC÷áÎ3Ú­ê:Aµš ¨µåžY¢…Ü:å°àü¼ûg¥TþËOø@|ßµÞçû/vß´6ßõ]1éíWum%+_ôË㛸‡7,ˆP[H6ºÌÁ¨ß"Ý `~fpq·ç“Þ›ƒ½¼ÒþÛvl…¼oäBŸ;H`®1òŽ:T—ZJ oO_¶_sÜ›–Èû´è´”:ýâ}²û‹X~ÒÙå¥ïøP¶=õ·/ 翈-à‚9¥Ë˜–XEcÇSÆxç ’ÒÞ¾«¢—Þuò&Ó¥>Z³ù99~îN£=yÏAáë{ˆü«Çe?ïÓÄÐ3’áÏ›o€Ç®3ŽœñO5i¦„&›âHõ7;ÁO(ãpy‘î Á8ÚI�šJïmõMùz‘ñั¸“j±Ùp@‘Fv¾Ü€Ã=yÜ�Ãôqö½rÖóFò­5¥¹ÔMí¥ÁážHY6çEÏA÷€ÅE¦Ô5;(æ›âHõËÓ¸.ðSmÁ8Î<Ø÷pz“÷I©ôÑý©­é¶³³éºÝ¼ú›-ÄKò¹ûA'a<Iw§‘è€áͺþ6‘*Øki“ýª)£âP« þ$ ®§·S´­pž¿ÓâÃíÞE³®”ˆßiÚ›¾~'ï wã¨"»íµ.¼;eyçišŒ:mËZÝÂÃðc'†ãvèØsFð¾Ô%·›N6s’ºJ„hÈwðxäzZ�Ú‹Rз®ØÞé¾Yµ€æÇŒî—=ýÇéI¦j: ˨o½Ó@7LW2§#jôç¥M¬ƒ_¼±ßsk�ÇÙ›<4½¿n—«"˨¡ß×lx¶c•zÐhÔ4OøAæízŸö)�_17giÇÎjþ­©h-gŽ÷M'íVçå–>‚dÏLÕAª'ü ³EöKÜ›)ﳶߺ{úV†¯«#ÙF>Ç|?Ò­Ï6Ì:L†€!½Ôtªi¥otÒ¢I7*`|‡¯4.£ ÿ�ÂA#}·MòþÊ 51íïÖ¤½Õ‘µM1¾Ç|6É'Ù²~CÒ…Õ“þìwßñèƒflýöí@ °Ô´yª½Ó@7JW2ÇÈòcéÏ®jªjü#š‚Í;Ì/w´y©“™$Æ9ôÆ*ý†¬‹{ª±ß×Jx¶n?sçòª‰ª§ü#šŠ}’÷æ{Î~ÎØ’N¦€44Y¢ŸÃZn©A$QËy¦{ØÛ ì¶ÃÇ)  ñœðzŠ¿u,4½uL¶Mâ)vê;Äa›l£·$É2àz`ŒU "w¶ð¢jvñÜè’ÜiÞt¬1²[d:cæM¼dr1Îs‘u÷i‘iâR—Þ:ô¸'3Iì”s×ÍŒ©'=F?‹<�XâÚÛJÓü@‰q£rð-ü® Ð\cknùƒ®�Çð e‹-‚éÚÿ�—w¢8½E¹‘Kǘ?×{ó1žqÆ[m2×F¸…Æ¡áçÖ/|¸bO6H—@lÆ|Èöåˆå‡mÙ�3BߥîÀI¨é­ë X€v…<À ‹ûËŒzíÏ @æ¼.tíË})¾ÓåðýÇ”Æ<¼!–Øøá¸ldót-QO¨hgÁr ¼Ó¼ïìò‰Svï/§\ç5&­±Ð|9s¦J÷–sè,ÖÞh"¶ßÌ1“Ï\e ÀÁƸÕPø*XþÉ{Ÿì⻾ÎÛÕõÏ¥�K«j: Ek²÷M$]DNÙS¦ážý(¹Ôt­X0½ÓJåÜD©÷qžjM[VGŠ×ýøbî#ͳâ]jÈu½=¾Ç}Äspm›'îÐ"Ô´íë¶7ºo–m`�ù±ã;¥ÏqúQa©h"óT-{¦€n”®e‘äÇÓŸ\Ô±jÈ5ûÇû÷6° }™³ÃKÛñ¢ÃVE½ÕØïŽë¥<[7¹ŒsùP|††<-r†óOóJO…2¦ï¼Øïô©¯u骷šqq5© J™À•3ßÓ4Ø5T¹ì—¹1ÜsövÇ,ýêkÝYGµ_²_ Mjrm›J†€ÿ�RÐMæ–V÷M ]1lKÉ“¯>¸­ÜXÜ|U¸k­åA¢L ¬3çO³oõdkÝ,ýŽømºcͳsû™jx*én¾*ÎË ñãD#ÆPÿ�¯´ëQE�QE�ãn!У–Ú=Òþͼ­ÁYñq O'x­úÀñ‚\¶‡³‘u¿³($F?h»ã8éÏÆCº[×ÕtRûξDÚt§ËV'' ÝÉÔg¡Ï9àˆ´”3ÞÛêš9òõ#â Áqcq&Õc²à"Œí}¹†zó¸…5i¦„&›âHõ7;ÁO(ãpy‘î Á8ÚIÍ0¦¡©ÙF4ßG®^Áw‚›n ÆqæÇ»ƒÐŒŸºM�K¦u©ØÞèþ]¦¶ºÿ�Û,î†;æ!e žvð$\ÿ�À€ÅÛ¨ßèÓi­†¹™?Ú¢š>%á ²âB Úê{u;JÓ¬±©êšE¤ÌÚv½¡¨•¸‰2¬<ɉòɼwN°È4º"ÿ�j]xvÊóÎÓ5tÛ–µ»…†$;á ÆO ÆíѰ8ç Œ1�á|9¨i‹s¦ï&Õ×E…Ú¶¦ücÃ:î8 ŠÚ‹Rз®ØÞé¾Yµ€æÇŒî—=ýÇéYÔ&·ŸK6SetXB4 d¹<r=ÁïëÖ·"Õk÷ö;îm`û3g†—·ã@階‚²êïtÐ ÓÌ©ÈÚ½9éTF¡¢Â4kÓüÿ�±Hù‰»;N8ÎsZZ^¬‹.¡þ‡|w]±âÙŽ>UëTF¨Ÿð‚ÍÙ/rl¤¾ÎÛ~éïé@õmKAk8Äwºi?j·?,±ô&{úf’÷QÐN©¦•½ÓJ‰$ÜD©ò¼ÔÚ¾¬eûðÿ�J·<Û0é2miö;á¶I86Í“ò”ê:ü$7Ûtß/ìªóSÞÞýil5-^j…¯tРҕ̱ò<˜úsëšzêÉÿ� ö;ïøôA³6~ûv§XjÈ·º¡ûñÝt§‹fã÷1Ž*�Î:†‰ÿ�ƦŸlÓüÒo652s$›qϦ1^Çàüè8éýoÿ�¢Ö¼|ê‰ÿ�¾¨Ÿd½ËÎ~ÎØ’N§ñ¯`ð> ÐOýC­ÿ�ôZÐÕQ@Q@s´í pHÍyU–5[_Zݤún£o LÖÓÆüKòÛà¡èà®íѰãž:5z«(e*s‚1ÁÁüëÉ?²éZñû^˜Úot¨D–¤‹r •û¡N�c¯Íб�¥¶öm¬F,ï¡ð³5”ðË6Põår3èßxsZþ%hæ›Ä6^#HcÔGCeu dYYEÉÊàc’ dœ€ßysYŒ¿fÓ¥¶×|»«Y|/‹[¡�žcc…`ØÆ;zŠÛñ!“LÅ:¾ýBÊM5Ší¢ÄA¸Ø%Ç}ÙÄ€ÀÎ$u‰¼Õ4Ý|+]3Y KøP¨fyþYÉ´ž3ƒÎ;Íø‘þÍâVÏ\Ùv¿ÚöÇím�Øø·‡†Q­³©Àœc¥tºç™¥6¹e¨yšŽ“"Ù+]ÊC4)æ¿Þ\doëÓwv®wYIô¿êpÛ‰oôñªÚ”ËæL¿¸€“÷×�sžs’@MTø_ÏÒü¨4à>Ø<Ͱ(Êì~¼tÎ*YO…·-q›å}šmÃÈ\gtXíõýjα©»\i'û6ùvÞƒÊ/?»~ÍÖ¦—Ts¯Ù·öe÷³»'拟½íúÐ}±ð·öÅöè4ß/d[qŸ›8ãéF–|-åÜù°i¤ýª]» Sòî8íÒ¯ZêŽ5½A¿³/Žc‡€‹‘÷¿Ú£IÕbºÿ�‰eófîSÂ/1ãïP&|5ÿ�Gú?í_Ù½|•Ý¿ËõÇ\ÕÝPø[˶ò ÓAûT[¶À£åÜ3Û¥/ö“ÿ�Âåÿ�g^ãû/ný‹·ýW_½Ò®êÚ£´V¿ñ,¾\]ÄyEçæ}ê�£r|-ý±c¶ 7ËÙ.ð \gåÆxúÒÄ|+ý¹u˜4ß+ìÐíBã;¥Ïo§éWnµG:ÞžßÙ—ÃÍÁEÉû¿íS¢Õk÷ý™}ͬnÅÈù¥çï{þ”wËg'‚µ8ìî–ÍÄð-´ 7™oŒ)á±ÉÚAtâ®;ÍN-3VÝmª t´¶ÊUXù8&69ÁáI³Ç÷€&«è2ÚOà½au‚[ÜxšÞ;…Á’ß!º€0Z–òÛû4Éi~y  wæ‘Ùžx1r9eùÜ»rsÔ�%ˆûLÖV¯æÇ7ü$W†Få lü©q÷cä9xd -vÉ©išgˆØþÙ¨­®¢åù’›‚cÊ“vqŽF%E{)¡·¶³‡Vho|=&»y¶ùßyÁK€<ßPrÌIÆ2lÚ¦ÜÙŪ¾Ð^mM7ºZ$óÈo79Þ÷õ9àn éMÿ�„~ÇÄ«YI§Ü-­à%>c$wþ©Á8 F'ÄxYõ(&Ó‚ÃÐþÉ]‡ÌòÈ]ý$z÷®ëDi4”ÐØ}KD›J¹|¿1­ã/âßóÒ>‰�œätá|)mz’éßd¾céJÊ'ˆË°oåA ¼g×8éÓ�ߊëSþß¼#M‹wÙ`Êý§ Ý.vý*n—s©‰u ºlG7mŸôœ`í^>í>(µoíûÀ/l·ý– Ÿ±¾1º\qæýi4¸µc.¡¶öÈ¥¶sfç'jÿ�ÓZ�Ï:ü ³/ö|~_ؤþÑÎ6žq¶´5{­LÙG»M‰GÚ­ùûNyó“îúÕ©ÿ�,Çí–~WØdÊý•·ciïæJÐÕâÕ…”{ïlˆûU¿K7ùÉùkë@ ½¹ÔΩ¦¦Ä’L´õùû4-Χÿ� ‡û6-ßdO—í=··9ÛN½‹VþÔÓ7^Ùó$ÚE›€>C×÷¼Ð±jßð‘H>Ûe¿ì‰ÏØßÞݼÚ�,.µ1{ªmÓb$Ý.áöœ`ù1ñ÷yãQ.u/øG5ýÂ÷™o´ôýä™ãoj¹§Å«}·UÛ{dÚ—vlÜäù1týïbª$Z¯ü#š‰ûežÍ÷™dlŸÞIž|Î;öãÞ€4<9-ݯ†lo,åûm’ÞiÂ{E;äW¶Ä˜Îy=ACÇÁì+öìÝSDg¹°“Ä3ìåFvËÌ{±±±œ¡À'tç4ü=gç‡loôéÖ-V­2"Ç;\}–Û *w]Ù õààœÌ¬eÕ­$´XìüB5éLörÈÞLãl¸ló ‰�ÈÎþ�¿§«Äº^­¡ù“‰5ÛÓ.›#ycv.ºÿ�U&Ïá8‘œ}êAÞiZŽ€U®Yï~×a3•„€‘ùg&Ò9Æ}Cì|»ë½:ãNhì|Cµx.`›$sö¶@1• ãæÁàŠfŒQÕ4–²a¦ëð%盾=Á×ÍʆéæGË�AàçŠ�æu_²M¤èWZ+Gßö Âß@à®æT¶2ÿ� s¿0 ÔbŸqs©Â*:1öqþÓÎ<¾¸ÛFµ"ê:_‡TE6©[xvpìP~õÁ³žøê ?tÒÜEªÿ�Â)7–~_öqù~ÈÙÇ—Ó>g_|~cV¹ÔÌV»´Ø—ý.,¤ç'pãîÑus©ÿ�méäé±Íöž¿wýšv¯¬"µß{dÒâÆ,Üs¸ÓZ.¢Õ¿¶ôðol‹ys`‹7Àû¹ãÍ +­Oû~ð6-ßeƒ+öžƒt¸9Ûõü¨°ºÔÅî©·Mˆ“t»‡ÚqƒäÇÇÝçŒRÅ­ý¿xí–ÿ�²Á“ö7Æ7KŽ<ß­|Z·Ûu]·¶@ý©wfÍÎO“OÞñÆ(”:—ü"—*4èöywo´ôùŸ<m©¯nu3£Úƒ§DεÁûO_Þ¦?†¢‚-SþK’/,ü¿.ã+öFÏÞ|óæJšö-Wû×uí‘_:×�Z09óSùŸçÚ€%¿ºÔÍî—»MˆtÛGÚs“äÉÇÝãŒÖ§‚¤¹“â¬ææÝ`oìC€²oÈóǰ¬ÍB-[íºVëÛ"~ÔÛqfãÉ—¯ïyã5©à´ºOŠÓ‹©¡•¿± QÆ<ñسP«ÖJŸÿ�bÝ]3ûWsý˜“È#?&óÙÆ3Žý3ZÔP ÿ�µ¼Í?ìâȦÿ�ôï0¾Bíÿ�–xï»{µ_¢Š�+ñ¢¬šý±­%}BÍa•Xíã�ðØäà‚8éÅtUÏxÐÙ!¿›i¯¬ãue7ä7l`´Æ»ÍN-3VÝmª t´¶ÊUXù8&69ÁáI³Ç÷€&£±išÃJÕüØæÿ�„ŠðèÀ|¡#ퟕ#î>ì|‡ ï €·–ßÙ¦KKôkÍ�k¿4ŽÌóÁˆ{‘Ë(‡ÎåÛ“ž¢+)¡·¶³‡Vho|=&»y¶ùßyÁK€<ßPrÌIÆ2@,B|Ë'K×XŽ«~-õ$/̘̓‘.Mý�àä`õPšSF?á±ñ*ÄÖRi÷ kx O˜ÉÝĪpG‘‚ Å:ißÙÑj/´Ô5Þêdx×|ÊD¹Îõï¿·9àf—Di4”ÐØ}KD›J¹|¿1­ã/âßóÒ>‰�œät�â|6úœéaa†è‡–B’8<‘Ó=ën+­Oû~ð6-ßeƒ+öžƒt¸9Ûõü«Ã6·±Í¥ý’ý ¾‹q—fHÊ‚xÏLç:c‘E«oÞ{e¿ì°dýñÒã7ë@ Òîu1.¡·Mˆæí³þ“Œ«Çݪ"çQÿ�„eþÏËûƒÚ9ÆÓÎ6Ö†—¬eÔ6ÞÙô¶ÎlÜäí_úkTZ§ü ³¶Yù_a“+öVݧ¿™ý(þ¯u©›(÷i±(ûU¿?iÏ>r`}ßZmíΦuM06 D’`}§¯ÈÙ§êñjÂÊ=÷¶D}ªß¥›Ž|äÇüµõ¤½‹VþÔÓ7^Ùó$ÚE›€>C×÷¼ÐVçSÿ�„†Cý›ï²'ËöžÛÛœí§X]jb÷TÛ¦ÄIº]Ãí8ÁòcãîóÆ(XµoøH¤m²ßöDçìoŒonÞm.Ÿ­öÝWmí?j]Ù³s“äÅÓ÷¼qŠ� nu/øEõAýŸÂo77Úz~òLñ··5ìÿ�‘'AÏý­ÿ�ôZ×µOøEµCöË=™¼Ü>ÈÙ?¼“8>gûqï^¿àÿ�ùtõþηÿ�Ñk@TQE�QE�#(e*zƒÎ+Ë´ùnô=?@{—šûM“Ãóm`›¤¶Vùݽ8Á�9#ÔH ¥XÁ½q÷ú=LJßí–1Ïy¦Åk5ºÙ¡Ý%ª¾ÒLc« ò×äê£;s€.êÒ]2ÆgÒ\ØÏá6imÚ^#VsEž1žvtäã…ôËgeâY4Mú†&ˆˆÑýå ÿ�IPÜíRQ¾eÎMµB{cke=Ö‡äÉo?…]î .vœä;GÙ[#$t$à’k[\XuSâ­SCºû4«£'Ú¡hð%?é’d8+ �=GG à¶#V¹Ð|»½AdæرŒ<Ÿ`A_ÏÆÓÍêI×u;Élúkêöûm¹D äÂIR+ó ‘Æ8‹Qóf¿ñÞXÞ£Y5æ™0fc'\އ bEÈ<äÓZÿ�OñF¯}hÓXÜZÙe¶¸NŸ¹‡ï&G;·aù‡r0h]b]TÜi;ì¬ûhÛ‹¶9>[õýß­M4º·öý™6V[þË>ÛÝyò¾•±ª.4÷¶Dý´mÅ£ -úþóŸÒ¦š-[û~ÌÛ-ÿ�eŸìoŒn‹<y¿J�KYuoí½@‹+"Þ\9ñð>ö9ò¨Ò%Õ„W[,¬ú\¹ÍãŽwúeE¬Z·öÞ ío.“fø?{y´ijÆ+­—¶Cý.\æÍÏ;ý5  >n©ÿ�>ÇgåeãwÚ›vß+®<¾¾Ùüjö¯.¬bµßed?ÒâÆ/ó¸Ó*£åjŸð€çí–~Wö^vý•·mòºgÌëï¯jñjÂ+]÷¶Gý.,bÍÇ;‡ý5 ê][ûoO&ÊÈ7—6�¼|»ž|ªX¥Õ¿·ï²²ßöX2>ØøÆéqÏ•õ¤º‹VþÛÓÁ½²-åÍ‚,ßîç6–(µoíûÀ/l·ý– Ÿ±¾1º\qæýhO÷ÁšßöŒ1ˆâ7 Ì‘*·g,H(PrHjÈY´°ðî¹Ñ£×xCI4?¹ê½K¦;}áŽ3Ðj|0I?²uÔ¸häs«ÊªmSû¸ûZÔt ­k[ ÚdBæ]5G̘R €ýú³Ç.:oL‚HÏTÑOÛm&ׯOözºˆä.0ѓ¹ùxVãîòhÐe{í>÷HI®lEƤKÚK\MÈN ¥IŒãÛà®—-ž³¡9˜Ïâ Ök9\¤rü—8#1É·# ÉÆáÆDšZEªjö7ºD«e¬%Τ'Yÿ�^XE:ƒèÝAÈÎAõ�o†Uì›@Ôt,ÞÛI§]¬|Üćò³÷_8ÊAû¤’x?ÚC4¶/a}5¾í0D 0êÛOr9ç½wM©hòéQ¥†µ›;]A:Ÿ*éD…Ë ŒâEäÚV¼÷@: ÔúyÔ|˜t´WóßÊ%ƒps‘¸c¡çôà­‹O¹þß¼_í‹ÐE¬vÈr~ixÿ�Wÿ�]&—arÒêÕïWl~Uçý]eEmá/í» nl¼¯³Ã´ý³Û¥Ï;¿Ý¤Ó­¼$d¾ónl€-³7˜ùv¯û\÷  ÅÇü ³?ö­æß°È|½°íû§¹ŸÖ´5}>ål£'X½oô«q‚ÿ�Ïdçˆûu®l[ø_þÙ[íjû„µüÛ¶œqº¯j–Þ‰å\ÙûDÅæ~_57¦hVöÂäjš`:½é&I0JC‘òŸ»¡l.á"‘µïsöD;¶CŸ¾Ü«ÅdÝÛxHj:xK›-…ßy™�l8ÏÍÇ4-·„¿·di²ò~̸?lãvæï»Ó¯§é÷&÷UX½ºPHH~oÜÅÉýßáøUD±¹ÿ�„sQoík̼Êì‡Iÿ�LóÏõãRÊÛÂFïRó.l‚‹åæó_*>Ÿ7<æ«%·…°o‰¸³óƒ]lkçýcíãw<cë@Fƒg߇´Ù­åÚ¼séž\Œ¤1ŒÛ[¨,œoŒº6;djä’GªÏ§iz€{=U|C3‡€~ì¹x\Ž@ld`Ãg¦ÐtKm[À>“sAy›lÖ×qæD|µéž8S*ÂÔ-¦:F‡®Æc»›[k˜îm·$r†ŽSº7ÎQÁ#å'#±aÍ�@‰,“è–z‹=¥âkW«k­Bª’nr§#ÅÀýÙÈaÓ<€ºgüL/t 7Uó,¯Pß[ÛvØ$3¬Dç`å<uÜ*XfòJÓ|ASéÏ­Þ¢ÞÍ·d¹ûR•”pË06ŸcÅVµ· ¤Aª£_èGí¸%YåµAËó2‚>eêx�÷ˆ]çÑ|-i­B²hWÎê90²’–åv÷W�GCž €ë‹‘à™_ûZð¯öq;6CŒy}?ÕçŽiºûOkáï ǪIæŸ/‡çóòÈ ÛHR£8Ác›5·…á‘–âÏí?`$µó¿ËôÝ×=¨{W°¹X­s«Þ¶nâ¤<|Þ#¢êÂäkzzÿ�kÞ’c› R»ÿ�Lë'S¶ðŽÛʹ²'í1nÅæ~]Üÿ�Þþ×± seå—yœgåÇ;¾´¯Ÿsý¿x¿Û ‹XíäüÒñþ¯þº4ý>äÞê k£J Íû˜¹?»ü? ÉŠÛÂ_Ûw@ÜÙy_g‡iûg·Kžw»E•·„Þ¥æ\ÙËÍæ2¾T}>nyÍ�Z‚ÆàøR念¯�Ü|›!ÁùŸþ™çõ©¯l.FjN¯zAš×å)eOúgÚ±a¶ð·ü#W®,üý“íkç9lq»éS]ÛxPivÅ.l¼Ï6ßp™8ów½3@Z†Ÿr/t u‹Ó›¦�”‡åý̼Ýþjx. ø­8’îk‚tBwJûñÇÊ¢¹[Ûo ½7˹²*n™‹Ìá|©:üÜsŠè>Ç¥GñJäiRBñÿ�bÆ)¼ÁŸ={äûP°ÑE�QE�VŒÜh�]¢µ±¼µ3oMÈ#£9~ÁBƒ’xÅoUkëëU¯î­í╼µ3Ȩˆ'hÏS€xö4ç!fÐnÃúçF]â5 $Ðþçªõ.˜í÷†8ÏA™=ž©¢Ÿ¶ÚM¯^ŸìõuÈ6\a£'…;sòð­ÇÝä×Au£Ë`Ö—¾d»Ò!º[©,!!ŠaH&Ó£gË<p6ã¡ÀÒã‘¥³Öt'3üAzÍg+”Ž_’àçf96ät8Ü8È�MW±—K½ÒVk›©_‡Ò‚’Ô†—„S‚§iÆ gþW²mQг{m&tf±ópBÊÏÝ|ã(Hî’Iu„pê—Úmþ“"Yk)©_¬Ë*å‡Ï3ç@yàõÎFNÓë†Ä“jZ<ºTia­G¦Î×PN§ÊºQ$!rè#8‘y@`v• 'Âv–óM§6}-¸m"3(€£ 0Ã+9äãóßž†->çû~ñ¶/A°Û!Éù¥ãý^?ýuËh­ ÝÜi‡Q[ºhð£ùïä–a€r7:xú`iÅmá/í» nl¼¯³Ã´ý³Û¥Ï;¿Ý  ].Âå¥Ô1«Þ®.Ø$<ü«Ïúº ,n?á™ÿ�µo6ý†Cåí‡oÝ<}Ìþµmá#%÷›sd�¹m™¼Ç˵Úç½Rþÿ�„6VûEŸÚ¾Ç!í6í§n “WÓîVÊ2u‹Öÿ�J·)üöNx·ZKÛ ‘ªi€ê÷¤™$Á)GÈz~î²µKo Dò®l‹}¢ âó?/š›¿‹Ó4—vÞŽžæËawÞEæ@3óqÍ�k-…Ïü$R/ö½î~ȇvÈs÷Ûõx¥Óôû“{ª¬^Œ]($$?7îbäþïðü+!m¼%ý» ûM—“öeÁûg·7}Þ˜¥²¶ð‘»Ô¼Ë› ¢àyy¼ÆWʧÍÏ9  ÆãþmQ¿µo0 æSl88’N¿»Ï?^üb½Áÿ�ò$è<çþ%Öÿ�ú-kÃM·…¿áÔOÚ,üðnü±ö¾OÎûp7sÆ>µî^Çü!:g[ãþý­�mQE�QE�Wˆx‹Ç?4/ж’Âk)\C-å±òá¶b>wd „C•,»^ßPý’ßíwä§Ú1“1@IÛŸL’hñƒ®§}KUЧ.ïtù-¦µ)ˆ®K–Î~F<`ûsž£']kâ­BÆ[>þ×E.!uÁ'£•:6T.tà©Á öÂëAc.‘žÃ9“M ž¦xî)í·½]SDÒüc§Owctöײ۽ŸÛ":/Ì R!Æ@,r‚¡�€[W1kÚн´íjØYyx`]?{‚Ñ·GŒü½F:n�Œ[Äeñ†£¨VWûVÝVæÔI‘ NyÀ °çà¶ ®·^‹í²ê0ë–ég©¹´6’Dßx¤˜i!r=eO#8 ŽO+â9Ì!Õ¬uÖŽBukbnöl†LAŸ•¶àx98éÀºÆ˜ëq¤í+æÝz.¼~íù/Zš]-Æ¿f¿ÚwÜÚÎwo\š.>ï¿éYz¨ð¿Ÿ¥ùSéÄ}°y›gS…ØýyéœT² ÿ�nZâ}7Êû4Ûž¸Îè±ßëúÐÛ]-η¨/öðÄpòr~÷û4i:[´W_ñ3¾\]Ê8uçæ<ýÚ£l<-ý±}º}7ËÙÂg\gæÎ9úQ¥ yw>lúh?j—néÔ|»Ž;ô þÍø@|ÏíÜeîÙ½vÿ�ªé÷zUÝ[KuŠ×þ&wÍ›¸‡.¼|ß»X˜ð×ü!ë´ÿ�µfôó—vÿ�/Ó=sWuAáo.ÛÊŸM'íQnÛ:Ÿ—pÏ~”zëKq­éëý§|sÜ—\»þÍ:--οx¿ÚwÜZÀwo\Ÿš^>ï·ëY÷#ÂßÛ;gÓ|½’ï"uÆ~\gŸ­,C¿ۗYŸMò¾ÍÓç®3º\÷ú~”è? ¢0ézäfG^_È$þî>¸® ûCñ½ŸÅ«ûkg]O£%ô†Þf“Ë…Øåã;ƒ€�' œ•Üü(û/ö6µö6­ÿ�µåØc`W\}®ûæ€9'ðå”Ò[ëÞš¸vA‘š ¶`êÛðNç`r½ÁÏiñO\°;izõ¼Ú‹J¬€ºœº+Ž’FCq×iv×ZTö·2j1HîîžÙÉÜûž»ý°?Þ Š²Ûéþ'e™Lö͆B¿ =«7\ŽC)Ǻ°f€9=ÈÖçðö¨E=•õ¶›rðËm;·Á‰!~‡ÙÜ0 óÁøVúKYôáy „ %oo ˹w÷ SÛÓ§®¤C§)Ö4}\·òžÚÎâ;kÈßjË!xJ´OÕ$¹ÛÔ�ya“^máYµy´àmEÐþÊ_-¢p‡nÿ�â zŽœuàñÒ€:µ{a¯Þ?•{ƒk�ÿ�³ÃKÛf{ÿ�œRiz½²Ë¨f+ßšíˆÅŒÇøWýŽ(Šöÿ�û~ñ¿²eÜm`|èø¥ç¯×ò¦éw·â]CL­›¶'÷Ñðv¯hÕmÿ�áš/.óq±gìsmû§¾Ü~5¡«êöÏe^ÿ�ÇÕ¹æÆaÒd=Ò³…åïü ³'öd›>Å ßæ¦1´óŒæ´5{Ûö²Œ6“*µ[œùÑõó“¯á@î¯lÚ¦˜Â+Ü,’g63÷A³šW¶ÿ�„ŠGò¯qöDñã6~ûvÙšmííùÕ4Ât™AIçGÏÈ}è[Ûÿ�øHdoì™w}‘ß:>›Ûž´�ý?W¶[ÝT˜¯~k¥#3ùcçäã¥TMZÛþÍE<»Ì³Þcý ls$öàNõjÂöü^ê„i2’n”‘çGÁòcã¯ãøÕD¼¾ÿ�„sQ_ì¹6—¼ËyÉÆd“=ûPž1¸ñnðÿ�ÁÇ…µÈ‹ÙZÚMmš5òÈBÎr½9Ê×á­>OøRÞÓÅ÷Iªj¶Óy—(cµ´»H „ÛÈ pÝó¸qƒZÞ PÞðîåm±ç×ÊZ»¨é){*]A3Zê.Ø®c8ëµÇGLÿ� ú‚4ÈÞYËáÉ4»=Sm悺„ÒµìÃsF%Š}Ë8äÝ'úΘûÀu9ú;\h$èf½Ò¿ÓvÃo–Ù|À \réÐã–ã<ÜØê¯$ãMÕ`[{ò§ 9Šà­¾êyò0N;øzO_ÛßèñI>›n$Θ‡˜·à³CŸ¦|²qýÜt q¬Ù­Ž…ỽ$‰a¸ðýËËoæf0vÛïhÿ�ºÄœ‘ЕìI%.5kcà™bòï7gÏØ¦Æ|¿]¸Ç¿J]nÊ;}Ã÷Z1Œ<šл€±]EºÈ1ügïqÉ\y¦Ü^_J‡K'öqüäÆ<¾¸ÎhÞ¯«Û<V¸Š÷‹¸63â©EÖ¯lu½=¼«Ü,sg63gø{l曫^ß´V»´™Wqûèù;‡hº½¿:ÞžN“("9°¾t|ýßz�|Z½°×ïʽÁµ€ÇŒÙá¥í³=ÿ�Î(Óõ{e½ÕIŠ÷æºR1c1ÿ�–1~N:RE{ý¿xßÙ2î6°¾t| Òó×ëùQa{~/uB4™I7JHó£àù1ñ×ñüh¤­¸ð¥Ì~]æLwýŠlrÏßn*kÝZÙ´{U^äMjy²˜%C×gÿ�® ‚ò÷þK•\…Lw98ùŸÞ¦½½¾:=¨:T  ­p|äç÷©Žýè}CW¶kÝ(ˆ¯~[¦'63ùc(ãäç­jx.î;¿ŠÓ´k2¢ûØ^3þ¼v`+*þöüÞédé2‚.˜çGÉòdã¯ãøV§‚¦žoг™íZÜ€¬êÙýøçƒ@±EPEP\·ÄO xRÒ‘A¹1ù¶ÇÒTù”~8Ûôc]Måÿ�ü&¿ ôŸø™Á½ðW¹Ô"ˆêäüãŽNí¼ê/<' W±jú K{ä¸{·ÝŒNêÀïàáÛ:g¡Ó ŒƒÔÂ67Z t˜Ìú~s&œ/V„öÿ�®gî•èÀ}¤i©jzgÇKñ÷ÆPèãVyUÇI#98 ãïm çƒäksø{NÔ"žÊúÛM¹xe¶ÛàÄ¿CÆìƒîyìnltÏ[Ûj6³´wvå¾ÍyÛ¿FRü{\Ô:rcGÐuË)í¬î#¶¼ö¬²„«DýRL+½@–4ç^¾–ÖãK°¾?±a=¼/.åÈÆB‚AoÏr-^Øk÷å^àÚÀ?ãÆlðÒöÙžÿ�ç…á¹µyô°Ö«t?±aòÚ'vcpcÔtã¯^:VäW·ÿ�Û÷ý“.ãk�+çGÀÝ/=~¿•�^¯l²êŠ÷æ»b1c1þÿ�cŠ 5[øAf‹Ë¼ÜldûÛ~éï·]Òïoĺ†4™[7lOï£àí^:Õy{ÿ�,Éý™&ϱH7ù©Œm<ã9  _W¶{(ÀŠ÷þ>­Ï63“!î”—º½³jšc¯p²IœØÌÜ=ÎhÕïoÚÊ0ÚLª>ÕnsçG×ÎL¿…6ööüêša:L ‰$Àó£çä>ô�åÕí¿á"‘ü«Ü}‘üxÍŸ¾Ý¶f—OÕí–÷U&+ßšéHÅŒÇþXÄ9ù8éL[Ûÿ�øHdoì™w}‘ß:>›Ûž´ë Ûñ{ª¤ÊIºRGÉŽ¿ã@Ž«oÿ�¶¨ž]æXÞ`ýŠls$NÜ¿‡zõÿ�œø'A?õ·ÿ�Ñk^>o/áÕû.M¤Þe¼äã2Ižý¿¥{ƒÿ�äIÐìoÿ�¢Ö€6¨¢Š�(¢Š�(¢Š�+&ÿ�I‘®[QÓ&[]Gh XàtYuöaó¦AMNÿ�Q‹U³°Ó¡µwž ¦f¸vP4ch=|ÏÒ›¿Äßóï¤ßù?øŠ�‰ÎŸâkitZÌÅu${iÌ„$Æ23Ñ×§Cƒ‘^}â=\Ò5idžÞóV¶»¾†áommÌŽ¡¬± È8ŒÀ`ÿ�²p+¹Ôtí{S¶ú\rÄwC<W,·ªŸ˜9pAU¨ŠRY#Òdp 3ù² ǹÆÎ(ÌõIg¸ŸMh´m„7bI?âQt0»gý_©,·6µkp4­oÊKy‘›û"ë‚Íý_û'ò¯Jßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ 4·ždÕïgm'[È‘oì‹®HÝŸùgî(Ó'šÞ;‘.“­©{™âQtr¥²úºô½þ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠ�òŒÝÂöì}oí_ÙÞO—ý“s÷ü¼c>^:ÕÍNy®#¶i:Û¹Ûþ%C $ÿ�«¯Kßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ 4¸žgÕì§]'[1Æ’‡oì‹® Ûùgìib¸™u««ƒ¥k~SÛŠßÙ\•i êÿ�Úzõï‰,l.nÚ×Ie‚&”¨žL œ}Ïj×ÓnšûK´»dÓÂ’”!K(8Ï~´Êü6†â-/W’{[«a6©$±­Ì 2ŒÚàp{v®ÒŠ(�¬ýKI‹P)2»[Þ‘ußLõŒ§ºžÔ4( }®"¾ÿ�‰'ˆí"Y¦ÿ�VÃ>MÉæ6ÎUÆ3·;†2 uqð­üG¤j´[í2æÂ+"~]%DÝ»klR3ÆGQžO¨^Y[j¯kw M ã(ø9z@ ŽA,h"‰#RÅT˜±ãÔžI÷4å©àß%ü×{¼;ºH’2¾tøKœýÏöÿ�JK_xâÙ®?‡[ΔÊs4üd¹í^«E�yðÿ�°ŸKó<=± hwùÓgŸ¹ïV.ü㋸V6o¨Yc“"iÿ�Ãcî³^©E�yTþ ñÄ×VÓ—ðè030tüåHþç½Áž8‹^oðîæˆE·ÎŸs÷=ëÕh +·ðoŽ šê@Þ&âQ!iøÂ*ãî³úÔKào®qgæx{lÆb[Λ#Ìfcü·W¬Ñ@¾ÓåÒ|5¥i³²4Ö–pÁ#FIRÈI�ã"´¨¢€+_éöº©·»ˆICHeaÑ•‡*ÀòÁ”·÷Z µyLÖ9Äz‘�lôÂÿ�¾�Sßo}êFUu*À2‘‚È"€8ßx=xI¥N–¹‰ãó æ)Õ€H£×jüÞP�¬ <âÇÑŸMþÓÑ|¶·0nò%Î6íÏÞë^‹§iiqÉ «H¶å³²î§p¾ÙÀíÅ] 1»ð7‹®–%mKD\©(ÄõSŸïQ/¼]%í½ÉÔ´MЫ¨D¸;±þ×µzuæIà%ü×_Ú:&é"HÈò%ƹþ÷ûfˆ<âè&ºj:!7‰`—‚WûßìצÑ@XŸüZš\–#SÑ6:Ȥùçæ$Ÿâ÷§ÍàOMi¹Ô´@#xœ¿ÀÊÃø¿Ù¯P¢€<Êøºy­d:Žˆ ¼¦Aˆ%ä”eþ÷ûU«áë_‹&Öõ[ÛwXý‘#µ×ø÷äî'Ò»Š(�¢Š(�¢Š(�¢Š(�¢Š(&ûHsvÚŽ™0µ¿ ÈÌW�tYuöaóq•,ŽâËÄ6óiš•Ÿ—p€ìæê¾ŽŒ:®z:ô#± šBŠ\9Q¸c2?AùP–µñ—«yš6§a5„vâÞÝ/ÕüÈÐ…% pzã¯LÓÓÁ^3Kù®¾Õ n’$Œß`.}?Û5ê4P—[x'ÆvÍpËu :S)ÏÁ Ojƒþa¾—öÍc@ÐïýöpAéï^±E�yuß‚¼gw Æ×Z� ,rdyÝQÃßìÑ7‚|g5Õ´æë@f�yÜåHô÷¯Q¢€<¸x'ÆcPk¿µhš!?}ŒO§½þ ñœ]H.´n%|îE_OökÔh (>ñ‘Òî¬~× íŸÎË~û#ÌfcÛ¶êôÁô½NÓäuwµµŠuèÅT)#ò«ÔPEPEPEPEÏüŽ:oýƒîÿ�ôe½rž:ûUÖµm¡é•ô®¦Šd’+©#K HÉó&Ú¤ Ä ž§ñ].²ºœÕ†¡§iË|±Ûωç¬EK´L=ÕšÄÔ4çÕ®Ö£ðßK¼¸ )–â[yÐe”š�¡ñ>ûìoot]Vñ^ÓÉ[{È.ÜHØ™c$¸9|‚Ù$œõô5ÈøûZÖü17‰´í Y»“N¶Ó­næ¹’imfk…O-e/¼S»’x`f½xo.´È´Ë‡ö3XE.ÖKˆ$ÇL!\ dö¨³Ÿû;û;þ¾—öþgÙ¼Û/÷¶íÆy<Ыñ^Ó¼qy¡¬:cÛëÙiË!‰Ãmº‰ÝXüøÊçûÙþ­¦|Tñ³¦x}´ýÖ}BúÎ{¹ãVUFLc*†ISg�±9r8ùHÉ,ºažæK™¾iR\I ™åy-Ë3Œá‰+’ÜžzóJšsÇo º|7ÒÖ%3EËn98ùÔmÀn#ž(š³øŸâ)<Eý—%®“.ou[`ÒZD$F,ÎB«n�ç§'=ª=Oƺퟋtn®cž“Rk‹H$·vh­P’!‘Ã7Ì à‘‚'<t©£¤n>i Á™l,0Çîõ#ƒëRÚØËcs ŧÃ6Þx7yRÅ5º4{³»i ‘œœã®M�qú‡Å¯iº<—m¥Nÿ�ÙVšÂùQI±#šeŒÀÇúÁ¸Ý>Sò×{ào_xŠß[]F;e¸Ó5{;uº²¬‹Ü6 $Ÿ^Õžt¼ÛKl~éF ¤É’ßk¸Î¸'“Ͻ\°:–•çgxÒÏÎmòýžêüÆõmª2}Í�nëÿ�ò-êŸõé/þ€hÐ?ä[Òÿ�ëÒ/ý�V&¥âkÝ*òÑ|-µ§ãêðYHô÷®ƒI·’ÏG±¶”$6ñÆø9   ”QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform7.jpg�������������������������������������������0000664�0000000�0000000�00000033412�15030617045�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��Ï"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®bãÇš5œÞ"ŽïíÂ>‘=ã: 00NI�z}áŠÂÒüWa¨Ã©´±Ïa6–GÛmÞíf*sOCéXÑüQÐÚ$2[_ÃqpKem$h%¼I˜¬MŒ?ˆ©ñ@µÄÉñGCXŸeµü×G<·¶ÑƆK4…¶ÈÒøÀ?Ý,Ol×Q>µ¥Úé±jW:¬31ÜM*¢0a•Áb=¨õÍ[xëE“VÖ´û¹NœÚC“O{$qÄþh-FÞs3Î#ޏӛÄ:%½ßÙ'Ö4ø®r‹ä½Ê+åþàÚN~nÞ½¨JŠÍoè‰`oÛXÓÖÈIåƒr‚0ùÆÝÙÆìöëH¾#ÐÞìZ&³§5É”Â!H\È9)·9ÝíÖ€4謽#ÄZN»-üzeôW-a?‘q±³µ°â9ÆzdØÒ'‰ü?%¹¸MwLhQ‘nã*$=9ÆãéÖ€5h¬ˆ¼UáÙ¤òâ×´¹r¦Ô¼ŒÄà g© €=iË⽫Ý&»¦5ºJ!iEÜeCÑ ÎN´«EG Ä7ÌG(G1¾Æ µ‡N:éRPEPEPEPEPEPEPEPEPEPEP3¤ij6×77Z›J××kòjW -ÄŠ *¸���Àªÿ�ü#V?óßUÿ�Áµ×ÿ�£Ã_ò ›þ¿úS-kÐÆ…¥Z[Éqs{¨Ã jYä“X¹UP:’L˜‹} J»·ŽâÚ÷Qš2I±rÊÀô ‰0EY×ôéµM!­í™Ë43 ‘Š«˜¥Y±�­³iàðON›KÒÞåÌÓM;ˆØ²¡–Vª’*»öŽ�p(?øF¬羫ÿ�ƒk¯þ9Qø~/³ÝkvÂk‰"†ùV?>w˜¨6𱜓Œ±8Ïs[u‘£ÈSÄöOý&‚€5ëU¶Þ&Ómeží 6w2·º’Ì� ØÃ8 Ý}MoVEÏüŽ:oýƒîÿ�ôe½�C.£Á,qM¨_Ç$¤ˆÑõ›_�“€dç�ô¡ŠÃÃóéͨëÝIb ³\¦¹pb�u%„¸ã¿5WÆÚ¯â$±´°‘Û#JfžK‡IIo,b„ &,2Ã%qÆr+ÜhºÙ²–²ÚCRŽöUŠå¼›o%b(¹( +˜¶GšN@+eáÖ{D]fä½â–µQ®\fprŸ½ù†=*KM+D¿ó~Ç©ÞÜy2¥òu«‡Øãª¶%àûƃÁºœW0»Om²y¢žë¶`1ÞIu¶/—æReòÎvüª8íZ~ðõí’BÛ,í¬bò¤-æ$>f%|¨Ã·™Èû£“@ ñ‡meáVêÞïUI᳚HÜj·'k$dõÔÖGŠÿ�äN×?ì?þ‹j× Š( Ч«]Kc£_]À¨òÁo$¨¯÷K*’öȯ.ðÿ�Š~,x“BµÖ,l|&-nT´b_=[�‘ÈÞ{Š�õÚ+Ëlõ‹×Ð4ÐØøCjË$Gqœ|Èìü~ªh·Ö>/\Ïw v>Ýk(ŠL™þñE~>G­�z•婬|^}Bk!cá6£•¹Ÿ\¸Çë~”>±ñy5l„<Ù¢’Uæ|mB€ÿ�¬‹úЩQ^[q¬|^¶žÒ,|!ºêSx3ýàŒüüþˆJ/5‹Ö0,ÓXøCkKCiœüÎê‹ü~¬(Ô¨¯-¾Ö>/iú}Íìö>ò­âi_iœª 8ùýK.£ñ†^V±ð~ÔRÇ~ƒþ@›Ey}®«ñ‚òÎ ¨¬|!åÍÈ»ŒààŒŒüÞôËkâö¡h·0ØøCËfeŒàåX©þ?PhÔè¯,µÖ¾/^5ÊÅcá ÛÌa}Æqó�?NEk_¦¾¸³[y¶êŒù3ã œcçö4êuåڟýo]¾ñÀ½m: OGmä¼7;Âöà÷)A @'Žœõ¨¿·¾.lf}‡Â?hû?Ú?å¾Ý»¶õß×4ùu¯‹Ðß[Ùµ„<Û…vLñ…ÆsóûŠ�žïž#ûNµrñéÍ7ŠfŠÓR†&•Ö U„ÄZ7Ú¿8 Íó�; œVkü'Õî¯4]RêçO]CÃöÖVÚzG#˜çîX´„®P°8À SV‹Öml²ØøC7SiœüÄÏÏÓƒEöµñ{O´k™¬|!å«*¦rrÌ©Q>êö·šÖ©ks§¶¡â kÛmA$‘Äp ‡ 2.T `…Ϩ®‹Ä>š÷IðÍžŸ2ˆ¢×2Û ˆ¼¯(æH²ÊqèrAàšËºÕ~0YÙÏu-„<¸ciiœœ“›ÚŸ£ñ†hRU±ð~×PÃ&~‡þ@|$ÕßÅ:º5‚Ú†µH4ôÔ.# ví™Wz¤÷³’ =åñÂÝs]ºœiŸÙVÖ¿ØVúL -Ì¥Ç<rî?»'B£’O÷«–×ÅíFÆÈ,|!åJ»—qœßtÛ wâî£ÒAcáC<6ï<|ÈÅOñôÈ  ëðÃ]infô÷ ®Ýjkmüð¬±\&ƤD …@à€AÉޱMð·_#û}¨Ò"µSÓ.á„ÝÌÅb´‰£Û“9l©É'§$õ­ }câõÌ÷pÇcá Ö²ˆ¤ÉŸïWãçôqúКÇÅçÔ&²>óaŠ9[™ñµËü~±·é@‡|+©è–^-¥²‘µmJêúÐÌ«æ¨d\„ àœŽõÇÞü5ñuç†5-§ÑCßÚiöЄ™Ñ-E³`1Hf$Œò7c'�Ö>/&¡ ‘±ð‡›4RJ¼Ï¨Pãõ‘Z.5‹ÖÓÚC%„7]Jb¼ŸŸŸÑé@w^ Õn<wq®%¶Œ–’h`;;94HS`o$uðN+¹ð½Ö jÖ¾)»°Š ZÎÏL°ûv×,…�Äkò™ `O#…ÉàÕûÍcâõŒ 4Ö>ÚÒÇÚg?3º¢ÿ�« /µ‹Ú~Ÿs{=„<«xšWÚg'j‚N>A@‰£ÚMe¤[ArâK »§uà4¬w9€±'z¼Óí¿ÿ�çÇÁßœÿ�üUAc¬|^Ô4ûkØ,|!å\D²¦ã8;X3óú�õ*+Ëlõ‹×Ð4ÐØøCjË$Gqœ|Èìü~ªk Wø‹ñ3I×-´1cá{íZ~–vI<ŽƒûÏó€£êGô o¢³4í³¤Dþ!kí,£eŽ?örÌňõãéÜéÐEPEEss ¬·72¤PB†I$s…E$“Ø^P|}ãÍoOÔ5ÿ� i:4~·ó 5!(šxÐd¸ À`qÓÓµ�zåæRê?a…åkíE,pgè?àTË]WãåœQXøCËš5‘wÁÁù½èÔ(¯,°Ö¾/j60ÞAcá*UÜ»Œàãþû¥³Ö>/_@ÓCcá «,‘Æqó#²7ñú© R¢¼²×Zø½x×+„3o1…÷ÇÌ�<|ý9A­|^¸»º¶Ky–Ì«&LøË(aŸÐЩÑ^ZšÇÅçÔ&²>óaŠ9[™ñµËü~±·éZñG‹î¼syáÏZèñ´:x¼WÓÄÜ(³~Þ”èTQE�QE�rº…iwgs<“j ï¨^äE¨ÜF¿ñó'EW�~´ÿ�á±ÿ�žú¯þ ®¿øåÿ�\ßö½ÿ�Ò™k^€1ŸÃº|h]§Õˆ'n©vÇòf¡±ÑôKO¶¾´¼Õ%¶¹‰f†AªÝÈÀ82gGZÙ»K—´‘l抂?w$ÑO©PÊOæ*†ô©´/ iºL÷ItöVén&HŒAÕÕùK6Ð3Ï''Ž€ŸðXÿ�Ï}Wÿ�×_ür ðå¬vWšü4Ì‹¨. Ó<­Í´Ää“ùÖõdhßòñý„ÿ�I   z§}¤éÚ§—ý¡§ÚÝùyÙöˆVM¹ÆqqœÊ®Q@ðŠxsþ€WþÇþÂ)áÏú�i_øøV½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…kÑ@ÿ�ð‰øsþ…ý+ÿ��ãÿ� Ø¢Š�(¢Š�Î×ÿ�ä[Õ?ëÒ_ý�×'ð‹þI^ƒÿ�\_ÿ�F5ušÿ�ü‹z§ýzKÿ� äþÉ+Ðë‹ÿ�èÆ  ÿ�È.oúÿ�½ÿ�Ò™hÑÿ�ä)¯ÿ�×úé4xsþAs×ýïþ”ËFÿ�!Mþ¿Óÿ�I  ßþFýKþ¼-?ôeÅò7é¿õáwÿ�£-è·ÿ�‘¿Rÿ�¯ OýqEÇüúoýx]ÿ�èËz�5ù hõþÿ�úM=#ÿ�\?õÿ�eÿ�¥1Q¬ÈS@ÿ�¯÷ÿ�Òièñü‚áÿ�¯û/ý)Š€È¡­ÿ�ׄÿ�ú-ªýÿ�üƒ®¿ë‹ÿ�#T<Uÿ�"†·ÿ�^ÿ�è¶«÷ÿ�òºÿ�®/ü�WÐ?ä\Ó?ëÒ/ý�Uo È¿ývŸÿ�F½YÐ?ä\Ó?ëÒ/ý�Uo È¿ývŸÿ�F½�úýgþÂ/ÿ� %ò5kõÆÛù=úýgþÂ/ÿ� %ò5kõÆÛù=�Wÿ�š‹ÿ�pŸý«V/ÿ�äjÑÿ�ëÏòJ¯ÿ�5þá?ûV¬_ÿ�ÈÕ£ÿ�ןä”�kßëôoû§þ€ôx§þEùë´ú5(׿×èßöOýèñOü‹òÿ�×h?ôjPþEÍOþ½%ÿ�Ð X°ÿ�u¯ýqOä*¾¿ÿ�"æ§ÿ�^’ÿ�è¬XÈ:×þ¸§òáOùtïúâ?™¨|'ÿ�z—ý…o?ôsTÞÿ�‘WNÿ�®#ùš‡Âñç©ØVóÿ�G5�XÑÿ�ä)¯ÿ�×úé4[ÿ�Èߩׅ§þŒ¸£Gÿ�¦¿ÿ�_éÿ�¤ÐQoÿ�#~¥ÿ�^Ÿú2†ùôßúð»ÿ�Ñ–ôkòÐ?ëýÿ�ôšz.?äoÓëÂïÿ�F[ѬÈS@ÿ�¯÷ÿ�Òiè�ñü‚áÿ�¯û/ý)ŠÈ¡­ÿ�ׄÿ�ú-¨ñü‚áÿ�¯û/ý)ŠÈ¡­ÿ�ׄÿ�ú-¨^²<+ÿ�"†‰ÿ�^èµ­zÈð¯üŠ'ýxAÿ�¢Ö€<ÛYñ¦«o¨[ø7EòôÛÝFúóþ&׿,H¦æ^#ÏÞ~ßRS‘è>ð>•àëY>˾æþãæº¿¸;¦ºœžÃ=¿™æ¨ é~+ð¥Ö›ªÛ‰akûÒŒ8x›í2á”ö"°4¿jßµ4L×Z,­åéúéþHçô ýFH�õJ*‰Ól.µ;mcfû¨¡há™dlllÀ;Np9ÇÒ’ ÂÚMAါj¾ç21Þvíî~^lPú*®§Úé:tQ˜í @‘¡rÄîÄ“øšµ@Qâ‹É¾"øÒOYNðhÚvÙu©TíyŽr±/|g?à3Úx‚Ú /j¶¶Ñ$0C¦Ì‘ƃ ª# �+Ǿ¾–òø\üG§¯1òÞÃÞ&õ8èB‹,<aðÓWÔló‚Æt¹¶¿‚6Ê0þG¸ ¶ÿ�þA×_õÅÿ�‘ªúü‹šgýzEÿ�  ±ÿ� ë¯úâÿ�ÈÕ}þEÍ3þ½"ÿ�Ð�Vð§üŠºwýqÌÓ¼9ÿ� ¹¿ëþ÷ÿ�Je¦øSþE];þ¸æiÞÿ�\ßõÿ�{ÿ�¥2ÐtõúÏý„_ÿ�@J4¿ù5ßúíþŠZ4õúÏý„_ÿ�@J4¿ù5ßúíþŠZ�u¿üú—ýxZèËŠæôÿ�ù/:Ÿý€"ÿ�ÑÕÒ[ÿ�Èߩׅ§þŒ¸®oOÿ�’ó©ÿ�Ø/ý@…EPEP)¢hò\Ú]Lº¾¥�mB÷÷qHWý&N™SZ_Øÿ�Ð{Wÿ�¿±ÿ�ñï È.oû^ÿ�éLµ¯@ߨÿ�Ð{Wÿ�¿±ÿ�ñ`Kÿ�Aí_þþÇÿ�ÄUÝUCiw*lPú"”wû?9 ƒß'¬ÿ�ؾá»{G±–ÇcHE´Œ„ÆÙ°3(PI (Ú€ý/ýµûûÿ�QxnØÚ]ëðµÄ×j ûɈ,Ñ ë€+z²4où xƒþ ÿ�¤ÐP½Q@sž;ñD~ðn¡¬¶Ó4I¶Ýøån{ŒœŸ`k£¬½sÃz?‰mâƒY±ŽòŸÌHä'hlc8“‚3@?¼kk㟠éE²;¤ýÝÜ ÕH?¡ê>¾ ×U\¿€ô3KðÕ¸±Ó­-nýžîHaTid‰™¹$î yõ®¢€ (¢€ (¢€"¹·ŽîÖki†b™7�ã Œóµøà 0tÛƒînäÿ�ôš(Íÿ�áDøþ—ø'øÑÿ� 'À?ô ¸ÿ�À¹?ƽ"Š�óøQ>ÿ� eÇþÉþ4‰ðý.?ð.Oñ¯H¢€<ßþO€èqÿ�rð¢|ÿ�@Ëü “ükÒ( 7ÿ�…àú\à\ŸãGü(Ÿ�ÿ�Ð2ãÿ�äÿ�ôŠ(Íÿ�áDøþ—ø'øÑÿ� 'À?ô ¸ÿ�À¹?ƽ"Š�óøQ>ÿ� eÇþÉþ4‰ðý.?ð.Oñ¯H¢€<ßþO€èqÿ�rð¢|ÿ�@Ëü “ükÒ( 7ÿ�…àú\à\ŸãGü(Ÿ�ÿ�Ð2ãÿ�äÿ�ôŠ(Íÿ�áDøþ—ø'øÑÿ� 'À?ô ¸ÿ�À¹?ƽ"Š�óøQ>ÿ� eÇþÉþ4‰ðý.?ð.Oñ¯H¢€<ßþO€èqÿ�rð¢|ÿ�@Ëü “ükÒ( 7ÿ�…àú\à\ŸãGü(Ÿ�ÿ�Ð2ãÿ�äÿ�ôŠ(Íÿ�áDøþ—ø'øÑÿ� 'À?ô ¸ÿ�À¹?ƽ"Š�óøQ>ÿ� eÇþÉþ4‰ðý.?ð.Oñ¯H¢€<ßþO€èqÿ�rð¢|ÿ�@Ëü “ükÒ(  ¿è^Ò“LÓŒâÒ2|¸æ™¤Ø=l=ºV¥PEP\>¹ðÁž!ÕçÕ/ô¶ûTçt­ïfõ d÷=븢€<ßþO€èqÿ�rð¢|ÿ�@Ëü “ükÒ( 7ÿ�…àú\à\ŸãGü(Ÿ�ÿ�Ð2ãÿ�äÿ�ôŠ(Íÿ�áDøþ—ø'øÑÿ� 'À?ô ¸ÿ�À¹?ƽ"Š�óøQ>ÿ� eÇþÉþ5¹á_‡ðeü÷º-¬°Í<^S—™œmÈ= õºÊ(�¢Š(�¢Š(”Ð ×›OœÁ©i©Ûï0¯§»øù“<‰‡jÔû7ˆÿ�è+¥à¶Oþ?G†¿ä7ý„/ô¦Z×  ³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�«Z¼‘ŤܼËtÑìà E‘¥Áãåüùÿ�wšÏðtWÐø^Ù5;\›áÝœ§šþY;þ¹·†ù€àäƒ@}›ÄôÒ¿ð['ÿ�¨<8·)y¯-äÐÍ8ÔsÃOú4–b8Çs[Õ‘£ÈSÄöOý&‚€5袊�(¢Š�Áµoì¯ÜÙ°Ûm©µ@Ý„ÊÈžÙPŽ=x{ÞªZ®šš¥Ÿ’\Å20’ Ôe¡}×Ôt x& ÑõsæÚ] ƒSµÂÜÁÛžŽž¨Ø$¨8 €©EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+¡Á­µËZê|PB÷jKbò0ÿ�I“« ”ÈVŸÙ¼Gÿ�A]+ÿ�²ñúdzÐE®»©[Å$ÒMå"[•Vw.Ø-8ˤÓÿ�±¯¿èeÕïݯÿ� ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çèþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh�û7ˆÿ�è+¥à¶Oþ?Pxqn’ó_[É¡šíÜðÄcSþ>RÌGçSÿ�c_Ð˪ÿ�ß»_þ3V4Í0i¢è›»‹©nfó¤–}‰Ø¨Tc;Pú(¢€ (¢€ ÌÕ´¨®mæû.£oŸ"éWqPq•aüHØ_¡Ó¢€2tÍa§›ìŒ"ÓTA–‹$¤ ux˜ýåýGp8εU¿Óíu;o³ÝÅæ&C)«#Œ¬9Vˆ ŠÍ-¬hãX³v­ÌcÜp²qµºpÇš�Ü¢¨iºÎŸ««ýŽà4‘K ©Ib>ކSõ¯ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP _FÓõÛe©[ùöâD—fö_™X2œ©‚_ª¾™ý­b-~Ý{eûēͳ›Ë“å`v烌ܿ@Q@Q@Q@Q@Q@5 MÕ$»´Gš1ˆçRRXÿ�Ý‘pËøT†¹`ö~§ìc¤ŠüßA* îÊçÞ·(  OøH%¶ùuM"þÔ̱Gö˜ÐÇ–Ý•j厹¥jm²ÇRµ¸~éªX}W9ëWêö“§j` ý>Öì‚xVL~b€.QXÃÂÚjqnomGe¶¾š4ð�ûJC¼ˆbꪣ¢¸‚Aø–ˆ±üèfŠÅþÎ×W…×ãeìd±Rߘ`?Jµa­ ‡í÷ö—1mÀZ4Oœõ$ÈÀñž0(û2¢3»U$œ�*…¾½£ÝÚ%ݶ­c5´’’hœ  Ïnµ¡^mcáÝwC¿ñUŽ™‹ó5M›îý¦XØyxéµ\ŽÙSÞ€;Øõm6mRm.-BÑõS|¶‹2™Qxå“9æ^Hî=jÛ2 Ë0Q2N9'õ¯‚Û]°Õ´ÅŸŠf¼—ÁËÓ­¼²N·8gEg|ÄÃîóWï­uíOJ²ŠKy~/·*Ž÷/!°¿¼ÜØvÁn~d'b€=®¨êÖ•¤´K©jvVFc¶1s:Ǽú Äf¸^ë’øÌ‹Ë?Åe=­Ô’É© vùÿ�hZ#d{c ACµƒ¤Uß&mâf½©êºuå厧io Œöör! ’ PÌCd€§¹ ö)cžšHC#¡È`yÔSëÇüI‹!Õ¯aÑ­µk_.+ðìÁŬj­ÀLÆ08ùû¶¹»ŸøM&»¼†ñcZÉq¬ÃÈ—X0A³ÉoúhHóØñ@A«+¢º0eaAÈ"¢·¼µ¼ó~Ís þL†)|§ ±ÇUltaÜkÅô¹|A§'†à·Ó|R¢Ö-*UÄâ£'7-°p«ò¹@ \ÿ�Ù|Ug}ª.›oâÈ ¸¾ÖeÊGv»ÐÀ¦Ñ³¼dSÏSÐñ@D}²×í¿bûL?kòüß#xó6g¶õÛž3Ó55xcÅâ ‹û­I­|D·‡ÀË Ì°\£ÿ�hB0 œ¼OñV Óøú[÷µkï[Ã=­»¤rÅz¤Îlÿ�zÊñ£8 1 I p9 £g¸†Öšâhá‰~óÈÁT}I¨%Õ4ø4Ïí)¯­£°(²}©æQÃŒ6òqƒ‘ƒžõÇ^¶ï‚·vðM{«\I¥Kiæ$SO4×6ʰ2ædÃåèqЉVy>µ˜±¾ûbèb6­g ›Îy{Dew›¾1ŽsŽh±ÓuÝ#Yt­VÆûËûÿ�e¸Ivýv“еiykl—6w0ÜÛ¾vK ‡VÁÁÁAäÚ™u{¨ø:í4ÍRÆ-A{]Zi-e·’RaUXP`;•`Í•œ`æ¸6é^Ž oÛÏ”$HV ¢ì_ž6‘ƒ˜’>éï’(éÚ+Ä<ßÍiuh%ñ½‚x†è‰-n¤™,Ù?pÊ’W@Û‰ ÜqG—ÆV¾/%ñEŤ:Æ™™ µÈŽXLL.Ûg*xS·¹ùhÛîï-l-žæòæktÆùfpй8'ɦ¯ñEž¯{ðãÄq[øšöøµ§’òGu™ßÌ%ÿ�tÙÚBä¶Òb'fܧÇGOÊ<D5/±ê?ÚÞ_Ú<¯7Ÿ±ý—o{f|¿áÎîôîÕžšî‘&ªt¤Õl[QÍ ¸C0ÀÉù3žœô®áuLj›UÖb×Yò^ÓO–¨E(Q)€} )qÇïÝz Ã×î|W¼‡ÁÚN¡'ž·l/tö‰ôéÙ²æ X&ýÒ` ÄdsŽ�´UDÕ4ù594Ä¿µmB$ó$µY”ʉÇÌS9‘Î;Šó]Qï­ô-=tÔñì\O?“!žPˆ~H$“r©~Ê䜠W-«'Œn¼C¥ê–V:ÂÜ/†líõKŸ±L¯¿ÏF™WŸ$#ÆpGPî·úŽ•h×zí½²k‰V4ôÉb,wörÏÝÀòÉ𑬀³'÷€Ï#‘ÏNkÃC:·Ãó¢ë“ß‹›y!’â{f†FRNÒQÉ`ÀmÆãž<×;cˆôÿ�…ײê6÷ÿ�Ûvö¦Â1§¨yÙ#b‹"ݹlŽ£dâ€;ëÍSOÓæ¶†öþÖÚ[§òíÒi•gàm@OÌyQVëÄ/íõbÓIÓçÓ5í–þ1·’2ÜÈéd±¨2™™C(,Ìß1sŽ6ñ•áóñ YãćP>?Ó|öO¶ ¦ ©”?’Ò:öæ€>„'&³à×´{›Æ´ƒU±–écóŒ)p…Âns·‘ÏNEyÞ«m¯‚zú[__ÝÞH¬ñ}¦Òh&޳Ìl®ò6Ìä±Îp8�ÕWðø‡ÆW7X¹±¾´ÒìåÒu5¶BrÉ¿YJË+’Hÿ�tàÐtýNÃVµZmõµå¹%D¶Ò¬‰‘ÔeI«Uâÿ�cñ G†C{¢Ã,—òÊlm%¸X®šñÝC,n¤¡Cò—Ê`ò9jK¢xÂ/¡»ÔdÒãÕ%Q#^MóÛ\Cœýî¸ù}ÈÆ;€z¥!e°ÜA g’_æ?:ãüPÚËi̲Ã-µ¼WKä6{™ä¸Œ+ñ/”‹$Cî¡›�äg<ĺ©©øæÑä:í„øHAÛ\˺Úì¸Èy¿IŒã4é·š¦Ÿ§Ím íý­´·OåÛ¤Ó*4ÏÀÚ€Ÿ˜ò8¢§yâŠXã’DW”‘±ÁbH§þã> ¶ñ6§àßζ7ók‡Z´¸d+$É�… eØò¨¥þ|œd?9Á5¶þ&? ®ÍÍö¥6»5Õ‡Ùmîíf‰à».ý#¶ð@')„�’�·QE�QE�QE�QE�Q\Iÿ�„KþûsûílL}»Êß³ìÐãïóŒçõ©ÿ�âÜÿ�Ô«ÿ�’ôÐjö·÷–"-7Rþθó¼ÿ�!eùC˵¸ädg¶sWëÿ�‹sÿ�R¯þKÑÿ�çþ¥_ü— ¾Šä?âÜÿ�Ô«ÿ�’õ/‡?°ÿ�á'Õ¿°³¾Ïö+Mÿ�aÙ³vûŽ»8Î1@UQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@fjºŸ¬Ëo-ÚÜ ­Ã¥¶º–ÝÔ67 Ѳœ«‘œp+NŠ�­aak¥ÙGge Ãov ÉêI''’I$’y$Õš( Š( Š( Š( Š( Š( Š( Š( ›qÃŽ$TAÑT`ÂE�QE�KVÒluÝ2m7RƒÏ´›ãÜËœÕ Œµ]¢€I )cŠFzÒ†Š7‘$hÔºgcÊç®j}�QE�QE�QE�QE‘£ÈSÄöOý&‚£Ô|Qg¦ëQi’Ãpîâ$Èd>t†8·eƒÎ¥~Pqߤѿä)âû'þ“AMÖ<3§ëWÖ—×1†º²;íŸbf7uƒ-ÁÁÆvä ƒ@ú¿tÍQ’Ê{[Çd¹ŽÍdŒGµî]Ò—1V$ëóqD><Óf¹¶€ZÞƒ#"LÅSÎó< ²|ù$˧È2H|Þ Óµà¾ÕÄwºœv¢ÝîM¬Cy*ÛiRyù[pŽ�§Eà]¤*Y'—¤¶ûE(¹GÉmÛ±»ïà3ÛŠ�é+"ÛþGKþÁöŸú2âµë"ÛþGKþÁöŸú2â€5ëÅúÖ§ x~{í'DŸWºAÄ0ÿ�hޤEŸnµ½E�yÂxÅkWz¥…Õë¥Â¢Eh!-ÆWêzúäñÖ½ûfûþ…­WþþZÿ�ñêІÊÖÞyç‚Ú(¦¸!¦t@ „p Ôýjz�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üz¦µÔ®î.R)t=BÙ9–W€ªñßl¬}¸ëFŠ�FÜQ‚2úW¢x×S¸±Ô"ÖOµÔt«ùb¿Ùùimï2€\œ2ã=Hâ»úśš<ú–­%°iõkE³»ç‡Œ™ ƒì«é@u‡Äû‹Ü,ÖG¡`ÿ�l[ƒj~ÔËæ*»#+å‡ y�ã=Sâ4vVVRE¢ß5ÍÆ±’öÒ´JñI Wä‡*IF`ã'Šcü+Óf5j3’º:´SFŒ-Õ÷¨Ü9{ƒMMÃ;_ ^ê8ÂkaÃÆ Ý(Á#ÓÝqLP®‘âëMgU}>;+ëvÛ3Ã%Äj«:Äë•‹�—ïÎr3TÄ:¾«ã-[@ÐþÃnºDP½Ô÷‘<¾cÊ¥•U—hå²~† ü>Ó¼?¯.±¡©Ü]‹y-Iº•$ÝÉæmc°1ÂN{@¯^øRÞã\}fÒþûM¾š%†âKFLN‹¡ÕцFN�Þô—yñÃEvµÕá˜ÜÙEluiíT5½“Í€¡‹0lÓ�ñ‚qT'ø¿£B÷3TÂoP£$@y–©¾TÈsÈ\ô úñZzŸÃU½¸žy¯„w‹ßÛ¬ ¥ï’s”²–$`tažù¬Æø?¢És$ò꺼$÷“ɺH@fºŒG7HÇ@Æ:Pí+â$–ºKÝi:„{¤’Ȫ†Zà…ŒnÝ– Ä}ÐpÝ·3ôߊ�Årú¦—t¤ø‚mÙ-Ñ2$P +æLnl‘•ùr;jÊü*ÒDš{WXìóhÖÊóFÂ6¶F@)Çä ÔŒàÓÇÂý0GkjÛ“Z:é}Ð宎9?»ÆÑƒÀï¼`*Çâõ¶£©M=¶›tÚ4ZêÜÆ‚á¶Må¾?y· ÁÁÊœ1™¥ø×á¨å–gª½ÊD. {žŸæ\.<¾pHnØÍI¦üÑt»[‹x5]`¤ÚdšWÏ$$¤Hdp¿»êX·'<1öÆ6­ðžÛO¿¶šÊcT¶’(â¹Eû Œ¾LB(p“ B6ÉÎrÇpÜÝø™ßáåÇŠlmš04翆 2ȸ ±ˆ�t<gð®Róâ6¬ll~Åob·cÃð‘^yÈ쌠/î£RNîI8Àà×Q…}«øèšÕÔ¶²ÜE$5 ˆ8„– Ÿp >^ÐÅT çn8ª/ðÓK“M³³mKS͵ƒi†pñ &´8ýË‘ ð@ ï@ ¨øÒævð•®‹Ýx’'¸†KÄgHcHD§*¬¤“•Gzãì>5]êš%î½ocm†ŸöŒ2+4’<Òo)ƒ�¡q‘sí]ü+ØŸU’óû[Q·X˜°Î¬l@ŒÆâ=èB«)�®ÝÎrxj|+ðäGol. ²1À—6‘Ⱦ]ß’Û£2åI$OÊF{Ðw†>#^kZ¦€n-í—OñÛ~À±# aû;c÷ŒX†Ü ž�Áãšl¾.ñEÇ|E YÜèÐ:Kxìüû ŸÏi£2vY@L#8çÓµtZG€ôU‚úÝî]m<ÿ�±[Hêb´ó›tžX 'ûÄã¶*];Âiž+Õ<A¥~óê… Í¼žQ‰¶ ±ãm>o®h+Rñø:F³&›eqoyeeuyl÷ð*ámÈaUÃ’Í·ï2-Ä}<xÏÄ:–�xíÒC î$E-—il䃓Á¨SáN”vãWÖL·v3iòÊóDî`•˲–hÉ'$áŽN3ÀÂÛ|(Ñ-,¦´†ûSXŸìÍY#_&X*L›P~óŽIÎsÈ逸§ÇÒ[|,“Æ~û4ª… ¥ÜeÃ(‰—äqÈcÔ8ïœÔ7þ8Öt ÝIÔímnïì4fÕíg³ŒÇ±‚Tµ¹8~@8çº/øFßÄþêZ– Öò•3N†1,»[pÉÙ´ À•GAÚ«?€ìgµÕÖëRÔno5[o²\_ÊÑùÂ~D(äô^ùëÍ�ai?´Ë¸¬`¼Óµïæû$2‰<¿:â6 ¿¼'‚zcæÇZ²ÿ�<-“¥j/%ÂC¨Æó"È$Y<¶f ã8lŒ&æ8$5¿ÁíÞxfM_Y/ öwKÃÃZÆc‡þYt H>µwFøc¦hi˧jº´2Ø$±E0’-í ½¢oÝà®ì°8 àôÀz¿Å}CÕ/,/ìµ4’Îî;I!GPÒ!xÈÚäÊ­Œ ñȈ¾%céz>§ý5­Þ«œó]ùn‰.âêÑÈAã8 °ùXq™uO…z^­¬Þj³júÄwWW¶÷Ìa’%Ù$ ËßÝäG\ôæ¥Ô>i¶ŸŽ¡}¨\Û¦¡ý£"1‰Dòí ‡ v‚0¡s¸’I9  óü\Эl^îæÇT…ÞÅWŽ=Ïk+„IÔoû›Š‚>ðÈùk¥ð߉¬üOm{-¤705•ä–7\*†IcÆáò’är r÷_t;Ý2[KVu{h¬–C$[â¶Ã¤*|¼mÜä‚Çhæº Áöš®³oíô««ÝKw;JÉ•’A‡)µF;zã¦øöX,õ OÄÚlöûï,#·’;»9K�ƒ9óä€à(cŒpjôÿ�¬­bv¹Ñ5¸Z–K”’ÝÙãŒ)gc¿k 8?!byãƒIqðÓHÔMû뺎©5íšØ´·R d…\:…ØŠ2Éäu¨µ†6:ýªÛêºî¹v‚Ûì­æMÌ¡ÕÁ G€àªüÀq‚H&€3.¾*G x¿ÄšF½äle·[/³(äDÒ¶ö’@Ÿ(�u<�Iº½oW¿“Ák~÷Ô]Û-ÄlË2mÝŒS’½9ëŠÉ“á–›'ˆ®¼Aý«ª®±<ÑL.Õâ 0|½»J¶`s]œIåB‘ïgÚ¡w9Élw>ôÇÚxãí-ž·Mwc=´†Òek‰N\*…ﻦG5VçÇ—â ÛXZ+éú¸¿I –,\Ç-ª¶äVó6d¸ÛÜpNìSà=*=-Æk½>Ú+ã|¦ÖE¾òûX2•dçX€=*¦ðÓIÑ/4í¯µCûGØ ‘ã(¾~íû°ÞãžÂ€2-¾7xfx¢‘í5+ež×íP……«çyÌÂá¹b $+Oñþ™«I§.i{t/cYD#ÄJdh‰l¾X++n)¸�2x œ> xzÞKg‹QÖÚEåZ‘4y€yÆ`TùyÈrH'>ù®ªë©{s§Íu«j3}ã—k±+£— Ø*rpv 8  ú(¢€ (¢€ (¢€ (¢€3®¼?¢ß\½ÍÞ‘§ÜNøÝ,¶ÈìØ$dð�¨áðçý�4¯üü+^Š�Èÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�Âµè  øE<9ÿ�@ +ÿ��ãÿ� ·c¤éÚ_™ýŸ§ÚÚy˜ßöxV=ØÎ3€3ŒŸÎ®Q@Q@Q@Q@Q@Q@Q@Q@Q@5ÝAôŸêZ”qyÒZZË:Ä?Œ¢ñÆ+Í´CRÖµ¯ éz¦§y Ž¥¡ RI! {˦*LaІPªÙ ¤q^®Ê®¥XR0AVT~Ñ—G‹H›O·ºÓá?º·¹‰eHÇeàv ñWŠõ}îãìÚ–¥y§hÞ$³ŠÞDº}÷´M$ÖÎAýæÖE\¶OÍŽõ¿áŸj²|CƒQÕ®î$µ¿ð´z‘²°[‰¢FyÑWl ¹Ü�•øŽMzsxwDh­"mO1Ù¶ûT6©ˆƒ”ùO‘éE¯‡´[¸îí4‹ {ˆ£ò£–+dGDäí ÉãÞ€1WÄœþ)ŠÍÒÛO¸ÂÛyö²y²““¼ynI‰ÑNÕ$6xg†|}ây|-á½Rõìn¢Öe¼ƒwÙØ<w;¤ò#È|b»z0=Z½Oû#M§ö§ö}§ö†Ý¿kòWÍÆ1øÎ0�ëY©á”ƒX·–ÖKk}"ßý™š*}£q>pa‚žF;@csã-Bø£âMN2ê]\Y¥¬w—Š6Ï#„W•BïnÛÆ@Ø {m]Ô›âh÷P´pÝèpê­q ¶œÈQÐ8$x<q•$u9èeðÎ?Ú¼íM“ír,·;í#>sŒáŸ#æ#'úššÏG³²¾¹½†!ö›…Dy"gj tQ“ǹ  ôQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform8.jpg�������������������������������������������0000664�0000000�0000000�00000022440�15030617045�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��¨"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬¯Ïq” ­ÃÛË%Õ´>j*–UyÑàЭ‘ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ½‘ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ½‘ý}ÿ�C.«ÿ�~íøÍ?ÃóÜ\iDÜÎÓËÍÌ>kª†`“:)!@ÂŽ€P¥Q@Q@Q@Q@Q@Q@Q@Q@V?Š<Igá-ãZÔ"í-öùžB†a¹‚Ž È�lQ\Æ­ã½'FÕg±¸K—[_#í·1ª˜­<æÛ˜KÉô“Š“Ä>3Ó¼9uöi໹md½™-QXÃn„•·0ùA=²O8ÑÑ\ü,Ïý«dß`óþÍý§µ~Íçy~o—Û³·¾ÜvÎj÷‡¼g§xŽçìÐAwm3ZÇ{ ]"©šÝÉ *ícò’;àŽ2(¢¢¹¯xëEðÖ“¨I)¾]=Ñ/ ±’9%ƒyÚ ©qŽH¼ôëZâ /¶yš½‚}ˆwºåÙóÀßÏËøâ€4h¬È¼E¡Ï,qE¬éÒI$¦DºBZ@2P òØ9ÇZ%ñ&…³E.µ§G$2,2£Ý (í÷U†xcƒ€y4§Ea7Œ¼8/tû4Öl¦›P•¡·ή”FAÀé©©­í_LÓ$‚=CQ´´{†Û ÜN±™ÑA#'‘Ò€.QYÅ^1<£_ÒÌh¥ÝÅäxU ’sÀ @Ï©Å9¼Qáõ(]Óy<”î?™ðÑÏ-‚8ëÈõ  Z*”zΗ-Ä–ñêVo4Rˆ$gRÉ!„#9 @<uàÕÚ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+#Ä¿ò ‡þÂ_úSkÕMOMƒV°{;ƒ*ÆÌº) :²0u!‡ ‚ ÐWõìjÚŠ_Geq ¬­m#•ù¦J( Á%€ïYQøši|`‘ǨÄö Û´e ™µóEØlnÇ›û¼ço¶y­_øDm¿è+®àÒoþ*ƒáR:®¹ƒÿ�QI¿øª�åŸÅº”“^½¶¤ i<âžS.ŸºŽ8æo!àw›/¸|œqOðÇŠ5}C_†ÚæûÎS{5ºA¶1çÙ,LÑÞüªÎáW‚æàWG‚ìm Ž5 f(bP‘Æš”ʨ `�p�íOÿ�„FÛþ‚ºçþ &ÿ�⨠¬ È.oû^ÿ�éLµ[þoú ëŸø4›ÿ�Š­]7NƒJ±K;s+F¬ïºY ³31f%$’Äк(¢€ (¯<ñ‡Œ|O¦øÞÃÃ~Ó4û¹n¬Öë·eèÌÈ#°�zåÓøâµ´Ö±Iáïî¹”Å._–ÏÏÍèIwâOŠÖKMáï,© âåÏÌÇø¨Ô¨¯-½ñ'Åm>Ê[¹ü=áñK¹ˆ¹rqÿ�}T²ëŸ¡‰åø{j)cþ’ýü €=6Šó o|X»´†æ/øxÇ2,ˆM˃‚2?Š™eâOŠ×ö«q‡¼>cfe¹qʱSü^ Ð©Q^[mâOŠ×mp±x{ÃäÁ)…órãæ�ï{Š!ñ'Åiî®mÓÃÞó-™VLÜ¿¨aü^†€=JŠòÑâOŠÇQk/øG¼=ç,Bb>ÐøÚIwzƒD¾$ø­õ½£x{ÃÞlêìƒíÈ\gÞâ€=JŠò»ÏüU²’Ñ&ð÷‡ºœA.劳{ŽÓ¯<Gñ^Ê–_xx+KC~guEþ/VêUÉ|Iðî©âÏ]èZWØÖ[¶|·R²**º¾FÔl’T q×9í\Õ÷ˆþ+ØX\ÞMáï­âi\‹‡$*‚O¹éV?¶>-ÿ�лáßü þ*€®ü;Õ5Û½l»ØÃoâ5±þÒgf·kvˆ¾@0�díÇ\T:‡„üUâOUÕ&]*›« ­ –•Ú;I€*IpK‚§�àpE>#ø¯amy‡¼<b¸‰eBn¬nã­~#ø¯{ K‡¼<Ue’#›‡2;#ªš�¡ÿ� ZOìøE¾Ûü#ÿ�Ú_Ú^~æûNÿ�#ËÙ·qŸ›vïlWOàÿ�j:>·mªj’ÚltXt[uµv`ñ£n26åc…ùFqÏ&² ñÅk™®¢ÃÞÝm(ŠLÜ¿ Q_›ÑÖ„ñÅg¿–Ìx{ÃþtQ$¬>ÒøÚåÀçwª5�fj 5y</«éÍa-ÕÓ2C¨\jòZág õ‘åÇË×9Èç:–_ µ?CñŠ ;‹ËËK«K[Ù¯î9Žw,CÄAHðI9Lî#¶I(þ#ø¬—ñYŸxΖ'•GÚ_P <îõu¢üV¶šÖ)<=áý×2˜£ÅËòÁùù½¨×á?Š-o­.VM¾Ïw¤\íûL£?c€ÄÃ>WÉÍXÔ>jòxcVÒmšÂ[»—dƒP¸Ô.3äµÂÎA‡k"Ë—®s‘Ît®üIñZÉbi¼=áð%•!\\¹ù˜à¾$ø­§ÙKw?‡¼>"‰w1.N?ïª�Døq¯éþ6´×&—LC­j:Š9¤fòî£T 3—gÐæ¶<áx–y†‘6—oÚl–fk€Âe.êXgkŒªWNrqŠ¡.¹ñjžWð¢–?é/ÐÀ©¶Þ ø±wi Ì^ðñŽdY›—d�O§x[·ð¯Œìn"ÒMþ¹sy5³¬îË Ü(YŒ`¸Ï“éT5O‡~&ºðå–›c&‡m:ècM¸¹ùŒ&P1Üc;‘‘1ÑXœœRÙx“âµýªÜCáïË2‚nr¬Tÿ�¨4Zø“âµÛ\,^ðñ0Ja|Ü8Ã�÷¹ê(gB´µÔ~!jºÅÂùQªAl†Ûè÷&àH[œsòŸJîkËbñ'Åio®-ÃÞó`Tgh~gîö4ÏøJ>*ÿ�kfÿ�Â=áÿ�´y~>ÐøÛ»o]Þ½¨Õh¯-—ÄŸ¢¾·´ox{Í]}¡ù Œó»ÜR_xŸâŽ™c5íö‹á›{hT´’ÉvÁTßTêtW—ü;ñ§üksö»'L³Ð”n¶Kºl‘‚ÜýHÀ÷<W¨PEPEÅøãÆ×: Õ†‰¡Y&£â=A³«œ*F>ôŽAr:Ú€;J+Ëbñ'Åion-ÃÞó`Tgi|a³âö4|V:ƒXxÎX„Ä}¥ñ´’;½A R¢¼¹üGñY/â³>ðÿ�,O*´¾6¡@yÝêëDþ#ø­m5¬Rx{Ãû®e1G‹—å‚3óóz#P¨Ñ^[sâOŠÖn²ø{ÃàÏ(…1rçæ Ÿï{[¿üV²…e›ÃÞ ÒÇÅËŸ™Ü"ÿ�« �õ+Ëo|Iñ[O²–îx|Eîb.\œßU[]ñŸÄÿ�è·:¶¡áým-”4…'v w©ëtUM*êKýÊòTT’{xåtS¥”çVè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Šl’$Q¼’0D@Y™Ž�©4�ê+‘ðÄ 3Ç–—²Y~îkYÙ?1'ˣȂ>½u�QE�QE�æºÇüœƒÿ�`i¿ô&¯J¯5Ö?äà4ûMÿ�¡5�ušÇü…4úÿ�ý&ž›â?õý„mÿ�ô1NÖ?ä) ×ûÿ�é4ôßÿ�¨Óÿ�ì#oÿ�¡Š�<Wÿ�"®£ÿ�\Oó£ÿ� ë¯úâÿ�ÈÖwŠÿ�äUÔë‰þb´oÿ�äuÿ�\_ù�¯ ȹ¦פ_ú�ªÞÿ�‘~/úí?þz³ ȹ¦פ_ú�ªÞÿ�‘~/úí?þz�4õúÏý„_ÿ�@J4¿ù5ßúíþŠZ4õúÏý„_ÿ�@J4¿ù5ßúíþŠZ�þGI¿ìþŒz/ÿ�äjÑÿ�ëÏòJþGI¿ìþŒz/ÿ�äjÑÿ�ëÏòJ�‡Ä¿ñùáßû ¯þ‰–¬xþApÿ�×ý—þ”ÅUüKÿ�žÿ�°ªÿ�è™jLjÿ�äýÙéLT�x«þE oþ¼'ÿ�ÑmZõ‘â¯ù5¿úðŸÿ�EµkÐG…äPÑ?ëÂý´xsþAs×ýïþ”ËG…äPÑ?ëÂý´xsþAs×ýïþ”Ë@ÿ�!Mþ¿Óÿ�I ¢ßþFýKþ¼-?ôeÅ?ü…5ÿ�úÿ�Oý&‚‹ùõ/úð´ÿ�Ñ—�\Èߦÿ�×…ßþŒ·£Xÿ�¦ÿ�_ïÿ�¤ÓÑqÿ�#~›ÿ�^ú2ÞcþBšý¿þ“O@ ñú?þÂ6ÿ�ú£Åò*ê?õÄÿ�1Gˆÿ�Ôiÿ�ö·ÿ�ÐÅ+ÿ�‘WQÿ�®'ùŠ�Ñ¿ÿ�u×ýqäj¾ÿ�"æ™ÿ�^‘è¬_ÿ�È:ëþ¸¿ò5_@ÿ�‘sLÿ�¯H¿ô@¼-ÿ�"ü_õÚýôh?ëõŸû¿þ€”x[þEø¿ë´ÿ�ú5èÐ×ë?öý(�°ÿ�‘«Xÿ�®6ßÉê¿üÔ_û„ÿ�íZ±aÿ�#V±ÿ�\m¿“Õù¨¿÷ ÿ�Ú´WÅÚÔ¼³ÕîbžXmm®dt7¹»è?™è&¹?h·xžæ?쵎‹m0hò8Ý9[ýŸä2}ÏŠtpçÏòJã5o êÞÕfñ'aó-¥;õ 8Žqýè‡ð·SøgîLwµÓ¬÷;Ãmk–!5`{k€Is ›ƒˆCH˜qœ/¯•‡áßh^>ðü“[,wî<««;”£=ÒD9ÿ�[rXYÌÖÍ-¤ÖͺÑ‚b8ÆWû§Ž;P–êÝîžÕn"k„PÏp]Tô$u¦¨ÎÕ/$¼KhVêDó„ÙFp u dà{ÔôÏøÓŶ~ ðÔú½Ø.ÀùpB:Í)jN„“è `ø·zyºñ/ˆÎñ.«óÜ1ä[Çü0¯ � ý¥uºî‡§øF¹Òµ8Ö— µ”õ±±k€ð–µ¨xK__xžv— Q~—Q‘±þúôý=2ØXÈÕ¬×oäô'üŽ“Ø:?ýôXÈÕ¬×oäô'üŽ“Ø:?ýô�ëùôßúð»ÿ�Ñ–ôkòÐ?ëýÿ�ôšz.?äoÓëÂïÿ�F[ѬÈS@ÿ�¯÷ÿ�Òièº÷úýþÂ)ÿ� =;Äò ‡þ¿ì¿ô¦*n½þ¿Fÿ�°ŠèNñü‚áÿ�¯û/ý)Š€â¿ùuú☬/‹¿òJõïúâŸú1kwÅò*ê?õÄÿ�1X_ä•ëßõÅ?ôbÐY È·¥ÿ�פ_ú�­ÎÐ?ä[Òÿ�ëÒ/ý�V�QE�QE�QE�QE�QE�Ÿ®éëÚæ“5ÄöðÝÆb’KvŸ¼ ŽFGNõ¡E�y·€~xž%ÕgÓÚïív’ˆQ¤¸'t/?Ì£�üŇü�ôšÁ½a¥øªÒõ²¶úŒbÊVÏ *’ÐçÓ;¤\÷%¥oPEPEP\—Š>è¾-Õ­µ=B[èîmá0£Zܾ\“Îz“]mçgàφ˜©kÍl•9Ruàã~Ðß<4øÝy­¶Fu8>µè”P¿Á :•{Ím”õQr )ø5á²7ºá·ö‹×¡Ñ@x¿|4ªo5° `¨¾�¤_ƒEÚ—šÚA¨¸¯D¢€<í~ xis¶ó[ŽN5äúÐ> xiY˜^k`·R5潊�ó¿øSß¿íšÞìcwö‹ç”ƒ,Þke—8?Ú/‘^‰E�yÛ|ðË•-w­1S¹s¨9Áõ7ÁŸ 8Ã^kl2¢çr?ZôJ(ÎÛàφó[ea‚¢äNÿ�…7áÏùþ×?ðbõèTP¯ÁŸ "*%涪£� EÀ…ø3á¤[ÍmFIÀÔ\rNOë^‰E�yÚüðÒ–"ó[ŽN5äàè(<4$/öÍoq�ý ùÀÎ?™¯D¢€<ìüðÑ?Û5½ÀöƒçþB†ø1á¦*Mæ¶JœŒêÁÁÔ×¢Q@vß<4àn¼ÖÎ#:ƒžEðcÃR!G¼ÖÊž êkÑ( <?¼6A÷\Áÿ�¨‹Ð¿|6Šou°�ÀQqŠô:(Î×àdž‘v¥æ¶£Ðj.(_ƒ\í¼ÖÆã“Eù>µè”Pƒ X^ka›?Ú/“Gü) ùžgÚõ­øÛ»ûAóL×¢Q@v~ xh°cy­–\àÿ�h¾E;þ߇?çû\ÿ�Á‹×¡Q@G‡þèÖ†­¥Üjq]ù…®‹ Aêóþy®ÞŠ(�¢Š(�¬_øSIñvš¶:´ è’ b’6Ù$L;«ž•µE�yØø1á Å…æ¶±“ý¢ù4˜ðÖýÿ�lÖ÷c¿´_8ô¯D¢€<ìüðÑpæó[Ü�ÿ�h¾@=ü¨?|4ÅK^kd©Ê“¨¿ãð&½Š�ó¶ø1á¦ÆëÍlí9Ô_ƒëC|ðÓŒ5æ¶Ã àê.y#õ¯D¢€<íþ xiÔ«Þkl§¨:‹i“üðÅÌ ·zÓ#uV¿fð9èôPV¶ñÙÚCm"8cXÓ''�`T´Q@Q@Q@Q@Q@Q@Q@u> SOšÊä1ŠQ‚TᔃÀö €Aì@ªz>£,­.›¨:iÚæ`cÎC÷eQØ7qÙà­YšÆŽºšE43]BØ–¶ºA“=Ać£)ëì@ NŠÉÓ5†¸¸m?P„Zêq®æ‹9IWûñ7ñ/ê¹ÁŒëPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMCMµÕ ]G»knÔ•xÛ³#TûŠÍûV©¢®/RMNÉåæÞ<΃ý¸Çßú ÏûëvŠ�«§êVZ­°¸°ºŠâ,à´mœB;cÍZ¬»íÂúè^l{{à6‹»g1ËŽÀ‘÷Àþëd{Upž"ÓÛ%¶¯Î˜·œ¨þ(rŠÄ_éñº’Ϥɜbý<µü$Æ5±±ÏË‹$l2¬‡ c@¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(FAê dIá]æ3Gb-fo½%”líõhÊ“øÖʼný…y m´ñ¥ÂÊ"˜~%“qÿ�¾©ßfñ$wSÓ& ’ÁÔþ,%Çþ;[4P/Ÿâd\gé9ût‘~žS:šõæ™únš‘Ù5f¹�Â2}²>µ©E�Ã|I{í&ÏMñ=Õâäݤ—ÖÐÎê“Û1ÚùE8b¹gÐ×sL–(î!xf$ŠE*èê ²ž õÂjº¶¡ky¡è¶›„Þ&žåÞ{©f"Ú%~ÅÚêÈåpÒ0Áq^ø«hß t{Ùõ [™£²¹¼ºkö’ââl]£N*¾cdŽ+Úîì,ïü¯¶ZAqå>øüèÃìoQ‘Á÷¬Õð†V$‰|;¤ˆÑYQ~Å7ÞåïßÖ€8‹¯ëÖ¾8ñNœ—ÚhŽÖ}:ÎÆ+˜Ø Ó‚Ä€lòŒnÀÁ\zMÅ7zßÃiüEeW7b ¦·X‘•'hšEB¹PÛÚI#v+j èWLíq¢éÓ®dµFÜî‘ÎÞު݅ž‚ÆÒ X‹1ÁE,zœæ€<¹5¡¡|1Óüuý¯¨jZÙ–y­Þùš+™]v²³µV6rH@óKyñÄVZØÑ™4™§X³Ó$ºŽ R ˜‹« ó  á†Nr>íz4^Ña¹¸¹‹GÓãžäžT¶@ÒƒÔ1ÆX}já?!€xJÀæHcû{csŒ²Œ`#Ò€<ÚËâN·ªÇà-Aæ°±ƒT]BkèÊ‘û2¿‹|ªG?ì Ü*§ˆþ ë—ŸüG$WÖq_iðé× 5ŒrÅ´\>|µbù$(FÞ8eb6Šõˆü3 C0E¢i© ÍkiXÙ†¨ÇŽ:Ô'Áþh ÚAˆ€<³cÜ ã½²3@ñ_¿ñ…¾…<zXIµOMóÒÖ5u“Cw€W=<×¢üZñ>“àødÙ_´Zgö‘’éei\ónP¶þN ã€1ƒ^Ú¾ðÂ0dðæ¬ 0"Æ Aa†?w©Z`ðO…ÑB•ÚGØ"Á\çw¦yúÐ-eãj?“ :DW³Ã<íg+ìŠ4VGóC„Ì…°¯ƒš˜Éq¯üM×4mSP½³±Óí-ä±·µº{c8pL’–B¬ÛXmÆqíSÃðæu±|²iqÆ·ßlI ÒÖ;±‡Þ#óÃýÏá %x'“ž¯RÑ4­eQuM2Êùc9Aun²…>ÛÅ�xÜ?üO¥Yˆ[+ûs&¬¶w—q3<ñÙ§˜’®¡ƒ §Lås“Òº'â»­ëÚe¥Ž[½•Õé. ªÜ.Y•šE8L€Ž[‘òœg¶ºðÖƒ|Ñ5Þ‰¦Ü4Q˜c2Ú£”CTdp¼ž:sNÃú,RZI§¤–k¶Õ–Ù€z!ÇÊ>˜ ^Ssñ‚êÂã\Ôì4õðÙ¾>N¡,QÃ0›g™´0^rÁî+—¸ñÇ‹­ôojÓ]F—3éšÌÐ̶sLÈÒ*º† ¡Hà`’yα^x_Ãúñ¾¾Ð´Ë«³ßÏiÉÇO˜ŒñO¿ðʒê:6y$iå£ÜZ¤…Sû °8ž=èˬ>-ë“êvóÙé¾\÷ú\lWG{”c,~dÁôlôZ}çÅ?Çá­SÄpéI¦ÚÊDflvÜ,- .íÄ0mÅ c Õèßð†ø_þ…½ªŸøñ‹ªŒ/ðöJ–ãÂÞ¼yÞçAÒç{†3KgXt-‘Éäòh…¶ñÿ�ˆnlõFeÒ :f§{gqt`‘Ð$6¹ŒHTï;œÛòàñ˜Þ6×ìþ1ë¾†æØ›© ×k#[Z"Û4¤l>fàpFH'«Òÿ�áðØ9ÿ�„{IÏ™æÿ�Ç”ûÝ>÷ž´é¼/áûµyú™/ÚÜIq¾Ò6óœg ù1<ŸS@Guñ§_M,j0éÚzGý‘§äË›¿ãì[:d?BNõlp0=kÓ|d.¦°¶ŠÆbe™žÖ;Ƶ{¸•NäIT‚¤Vê3·€I«·ðåÜ%χô©‘cf’Î6%RHè00=…Y¾Ð´NÚ+mCJ±»·‡ýTWé"§n€<çÁ>:ºñòéþ"M2Å`’fÖdv»š9Y·•}ßòÏîòw#­Cã»í_Kñ Ûmÿ�b_j6²é*<"<¸Ïœn ýݸ(Aô¿ìÜÚÜÿ�dØùöŠÞ_³¦èWÑ2£éUÏ„¼6UÔøJ"MÛÇØ£ù·Nxç$}q@ÃOøƒÄ?ÙÖ`%Ó­íâ·º»–E2ùŸfG󴛟{d`Gï¸òýj]KBø‘¥ÕôÖ"³{{hÌò2[]§98E)Ïû¦»k} H´»ŽîÛJ±†æ8„ 4vè®±€€ÈP��t«r<nñ£4Mº2Ê FÁ‡¡4ÁjÞ1¸Ð<Oi£Cqe%¢\Xؘå2Os$“±3îÄd"—݃ÈÈ®×Çþ$ðåî±gmwå±Õµ¡Լ뇉- Ỹå< väóšöÛŸè··†òëH°žé‚ƒ4¶ÈÎvœ¯ÌFx==*á?qoÿ�þ•ä‰QØãÚ€ ØÇÞ �OR�qz7Ä-ZÖ´«;]&ÞHšÆÂêýƒ*m –t/(!P‘ÀY é•8Êx“X¿¿¼ø…j.n­"ÐtxÞÑ­åh‰•â’S&å äUü©Ïw‡ôX¤´’=OI,×m«-²�ôC”}1M»ðö•{-ÕÕœ34ð‹{„‘¤ñƒ¹C©HúЛÏ}­xoÄ:&“«ÜêwÂÖYç´½ŠâE[ûT¶šO.`Ö•]#䃑Ïs›6_|Q'‡-<A{¦YÁ¦Iqjd•P9û<ÙRURf9GÚ2À ~U ŠôÈìm"ŠÚ(í`Hí@è±€!Jƒø~RGŽ* ]J±Šh­4Ë+xæ2TŠÝPHùÎæ�rsÜÐ-áojºßëörE,3½œÐØéÓÊË:;†ùSÌ;v„ç¦Iè* SÅZíœ>$c&Ÿ ÙXÞ]YÅä3³ˆH·‡*ãæ\)F`0ÓÝÇqƨ‹£'’~¦©Ç¡é1\]\G¥Ù$×jVæE·@ÓÔ9ÆXž´Áøž#'Ã67²Y\li\Û\ýƒ4À¡™_çÁ"6-Æ2AéÒ¹xëÄ–Zþ¹áý2Þ]ZXµ‹çí·;Ï‘F¢%ye] Ç9ltä‘êö6:ËÜ á:tQ„°°ŽÕ#[?”ØËÔ6:cŒš™|-áä‰"]KXã˜Ü" 8ÀYH�¸á¸õàPG…õk¹¼]âÍ bò[isÛµ´’BÍr™îç€éŠëj–Ÿ¥Zé†åàCæÝJf¸•¹i\€2~€�@] Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Perform9.jpg�������������������������������������������0000664�0000000�0000000�00000125334�15030617045�0023307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�]"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +–ø…·>X Ôo4ùd¿³„\ÚNÑ: .#¹gåvàñÓÒ¸ GÅÚç…u;‰µ˜onuM#H¤Xæ‘m/‡o3„h8’Mø>Ø�öŠ+Éï>#øŠË[3&“4ñëzd—QÁ ŠAsuda ¡\0ÉÎGÝ®›À^8>*ðÖw}k,W÷ÑÈÌ-í&kuÙ#¯2࢓åçk6y£ •æ^ GñW†Æ³­kº•¦ª÷òGsZƒÄ–ûf*-ü°ÁFTœoù¸5Êxâ'ˆâð“ZË<“ÛørëYŽê÷Ì–Gxî¤MŽw‚ÀªàtÇzP¼Q^,Ÿ¼Fž×õIaÒ]ô¨4«•D‚E-Òuÿ�XpWpÁö9ñBÿ�â&²ž1Ón®\éú†¯§Ü[Ø|›…‚%)#üýÓ!cÔá}€ x¢¼ËWø‘«Úë7Qi:d¥†Ÿc í̱C4r+6øËJ�,„“Œ¯©à½kYÕ>'ZO¨_fOÂÉ©}’ eû<ló(Gv‚Œ1““ŽM�zÅçZÆ –^7³šþ÷P{+íJ+[)luT‚e�&€¬¬Êľ ù°p�'ŒþÒÕ4ïø›X±ÖõIukIa§ÛO,Éq’0 òÝŠžŽq»Ž´ïWiº‚AñÎÚþ÷Pš]Iîn4Û‹}AÞÖâ òÞ í‘H�É\ç9è´�QE�QE�QE�QE�QE�Q\oÄ­VûJÐ, ËÚEu©ÛZ^^!­­Ý°î èz öÝ\çídðõ÷†ßGñ¨ã^±·{yµ9¦Q n å™_ ėЪÑ^-'ÅŸ?†¼7ªÃ‘j–:”ó#Á#{EvHpÛ@Áɦ­üYñ•g Ê[iR†ðýž´Èbs,©‘ç«î° õ g¢¼ƒÁ^4žÃTñ.—yswr–ú®¤Ö­vï1–8U6ÁŒÇ XƒžGSOÓþ x£^“CÒçÓ-lÓÄ*Ïöòbu)‹«ñ…rPõ;A�\¢¼ãáÞ£¨ü³»»Ö$Kùá¹u © Œ’¤DffÉ8;zúW+â}bK_‡þ0[[ÍsN×t™lÖáW–uÙÀ ¥²U•›*qŒ”@ãEyEÔÚ¥¯Œõ húÕĶO§Á<fîõÙ¡¹2ón'%L‘«ó’W9+sÞ!·Àºö©`š”²é²]y¶—÷MrñÍÑ,…˜²d Ÿ¼h»¢¼·Mñ~¾ëáý'OûÚþ†šÔóê%‚Ü3˜‚6IÎPËY>ñ~µkã ü:.ÅÕµö½«ZÃ5ô’O%¸‚(Ú0 ~SŸ»õäP´Q^)¡|Yñ6«§\ÜKŽŽž¹Öc o&ÅpÑì?½äB{°ôÁÍÕ>$kz¥Ö—#‰!{][HE¦I"5ÌP4Í &üHrª¼ðsÐdоÑ\Ä^"º¿ð$:Þ–Ö—WS*ùJ %°ÚÎ eË ¥—s.2¹ãŒÖ¼[«Ãâ?\6±e¬é©›¶X&Ž!ä+n2F_$¨\m=[“‘€Z¢¼ž/ˆ¾-–]6Ò"Æ{û»y/ͺâ2°]‘±’e &ÆÞOÍŒ¯ÉŒ‘­ñgZÕô+\é3Æ&µ/Èbd1 Î0Ùrn@= ŠÀðÞ«w¨é—²jW6â{yŒr h ?»Vë3€Ãvr©Ozç<#{{gñÄZ%ÍÅÕͥż:ƒ5ë]E?p€ÍÊ–l½08àd€zÆøsÄÚž¡âí[@Ô¤°Y´ög_"&hˆêKžTîWŽ­fø’úïIøá›û{Ë©´Ë«—Ó® †ôº™~MÐýÕ ‚K}}À=Šãußjz?ôÍ%¤°M?SPLñ3<s†û‡¡‚˜cœ¯ñLÞ§„®®t­BkkûdC|`q 6d`£‡Ê‚0ÜzsÁ�#Bñ%Íßħ"N4ýCBƒX&5»³”)푃U8ï]½�QE�QE�QE�QE�QE�QE�TWW0YZMus*Åo4’ÈçFI>À Æÿ�„ßÂXÏü%&?ì!ÿ�@ÔVü&þÿ�¡£Dÿ�Á„_üUð›øKþ†ÿ�ñT§¨éz~¯mömNÂÖöÜ0o*æ‘w‡ Ï&¥šÒÚá·Oo­å´Yt v67/=ŽG| Çÿ�„ßÂ_ô4hŸø0‹ÿ�Š£þ ÐÑ¢ÿ�àÂ/þ*€&ðà‚‡ô¡ d†?±Ç¶78Ë(Æàr=*öŸ¦Xi6¢×M±¶³·°ŠÚ%2zœ(5—ÿ� ¿„¿èhÑðaÿ�Gü&þÿ�¡£Eÿ�Á„_üU�\—ÃÚ%ÅóßM£éò]È…w¶C#) ±#b¢¶ð¯‡l¤Zè:\#hƒEgË:œŽ‡& ÿ�„ßÂ_ô4hŸø0‹ÿ�Š£þ ÐÑ¢àÂ/þ*€ÿ�g…¼¶þ­cmÜ¿a‹8ÛÛµ(ðw…į(ðÞŽ$}ÛœXÅ–Ül¼ä®iŸð›øKþ†ÿ�ñTÂoá/ú4OüEÿ�ÅPÅðîˆjë£iêÖŠRØ‹T=BqòŽz -|=¢ØÝÇwi¤X[ÜE•±[":''h dOõOþ ÐÑ¢àÂ/þ*øMü'ÿ�CF‹ÿ�ƒ¿øª�ººŒš¡ÕH°]@’MضA)'ý¼gõ¨¬ü-áí>ð^Yh:]µÐÎ'†Î4~züÀf«ÿ�Âoá?ú4_üEÿ�ÅQÿ� ¿„ÿ�èhÑðaÿ�@l´ N¼’òÇH°µº“ýdÐ[";ýX šÑ¬øMü%ÿ�CF‰ÿ�ƒ¿øª?á7ð—ý /þ "ÿ�â¨zŠÂ6ð™ 褞ßo‹ÿ�Š­Ú�(¢Š�(¢Š�(¢Š�(¢Š�dÐÅs Ã<I,N6º:†V„µ”<%ᵆG‡´‘.d‰”{csÕ”cƒÀäzVÅ|)áÓgŸö—öh™ž8~ÇÄfb0 H¨ÛÁ¾pCxoG`PFscù_»Ð`qíV5èzEÊÛêzΟe3&õŽæå#b¹# 1ªÂoá/ú4OüEÿ�ÅPöþð휰Ëm épI†Xž+8ÔÆç�²8'‘è)ñøoB…vÅ¢éÈ<ß? jƒ÷Ÿßé÷¹<õª¿ð›øKþ†ÿ�ñTÂoá/ú4OüEÿ�ÅPè4-"×L}2ßJ²‹O|îµKt6zå@Á¨?áðïöqÓ¿°t¿°—ó ·Øãò÷ÿ�{n1Ÿzƒþ ÐÑ¢àÂ/þ*øMü%ÿ�CF‰ÿ�ƒ¿øª�²¾ÐMm9t=5lY·µ°´ŒD[Ô®1ŸÂ®ZiöVkgggooj 1* ¯Ê++þ ÐÑ¢àÂ/þ*øMü%Ÿù4OüEÿ�ÅPÑxWDŽÊÒÎM6ÖâÞ͉´K˜VO³ŽÁ €;RÛøSÖ—Ü[hT3ÄæHäŽÎ5dsÕ œ}ªøMü%Ÿù4OüEÿ�ÅQÿ� ¿„³ÿ�#F‰ÿ�ƒ¿øª�ø?ù>Ò pUÿ�Уù9 ü½Ï&‘<áxçŽtðÞŽ²ÆT¤‚Æ ÊWîvñŒ zS?á7ð–ähÑ?ðaÿ�Gü&þÏü'þ "ÿ�â¨ôZ˜úd:MŒz{œµª[ ‰ŽsʃȪ |)áÉÒ›@Ò¤X#1BÎ2#Cœªäp¼žšƒþ gþFÿ�ñTÂoá,ÿ�ÈÑ¢àÂ/þ*€'žŠ @Ò’¥óãlã ’` àc°=xgPÑ´½\Âu-6Î÷ÉmÑ}¦“Ë>«¸OJÏÿ�„ßÂYÿ�‘£Dÿ�Á„_üUð›øKþ†ÿ�ñT¥i¤éÖMeg§ÚÛZ>íÐC ¢6zå@Ç=é4ÝLÑáht½:ÒÆ&9dµbú Vwü&þÿ�¡£Eÿ�Á„_üUð›øKþ†ÿ�ñT¡‹¥AwÜ:eœw1+$s$ ‰, I>¤šHt=&ÛR—RƒK²Šþ\ù—In‹+çÕÀÉüé4í{FÖÓLÕ¬/ž0 ­µÊJTz¤â´(Þ‹¥_»=æ™gpÌÈä͹,™ÚyFN=2i/t='Rº†êûK²º¸ƒýT³Û£¼}þRFGáWè  VÚU­¶¥w¨ª»º ²JÜ‹¨=dþg9«´Q@Q@Q@Q@Q@Q@Q@^5ÿ�‘Ä_ö ¹ÿ�ÑM^a¤j­ðëÃÚT·«-ׇu("0ì*^ÒåÐ3Fw0[|ÌðœƒÁ½;ÇñÚ[þ%—<Û&¯1Óxì|¡kq­Ö—wµ­®_YÎU6ò´ €§ø—ÝN@4-|K7†¦’ |=­.‡+n$¶v8ò¾þ<²OËÓí錞%—ÃRɾ֗C•€¶@€Û;yYß,Ÿ»ÓíéŒPPÖ´}No<v7zKHÖ–Wz›¸f4³¹\üÁd“Áxäb¯ÆÞ.±X¼7©Ã¢Ý[ÝFñÁ5ÌÒ°•ps 6Þ\/¨€ÎI @ kâI<7$¶óx{Z]V n²@™·v8ò¹|ydýÜô'oL`³ñ$¾w³›ÃÚßö$¬ÔIy·f8ò~þ6FÒNFvúRÄÞ-²H¼7©Ã¢ÝÁsG×3JD˃˜™¶rá}FX òCR'ü%–‘Åá­V îÞæ&Ž ®¦”‰—ŸÝ3låÂŒäà3É @Ÿ‰%ðÛ½œÞÖÿ�±%`¶¢H#Í»1Ç“÷ñ°’6’r3·Ò‹/MáÇ{9ü=­ÿ�bJÁmF »1Ç“÷ðP“ò’r3·Ò…@#ðέ‰wÌLMu<¤\(ë;r\/9 d òA¡[Åü3«C¢ÝÅs$ÝO) :Æ[nK…ç8<p�YøŽ_´–Sø{Z:$¬ÔKo`f8òOÏ‚„Ÿ—'Œíô¥²ñ$¾'O¸ðö¶Ú4¬#³ó¡BÑ3dy$—Á_î’sÎÞÃ(¯âÈ~Õ Ñn¢¹…’ ®g”‹…c-·&@¼ä€Häd†ÀŠâXü1«Á¢]Ås,\Ï) :¡m¹2(ç8‘’�ËÄ’øx>ãÃÚÛhÒ°ŽÏÎ… DÍ‘ä’_ºIÏ;{ –^$—ÃÄé×ÖÛG•„v~tZ&l$’ø+ýÒNyÛÎP7ŠÐ'…õx4K´¸€ˆf¹š\\¨ê…‚s"Œ€‘Èèp™ñPT𶱉x—‘ ×3K‹•T°NdQƒÐ÷‡ àlüDú�m2ëúÓè³ ž-l!²ø)ÙrsÎÞp2Yø•´�t»ßëO£ÎÂ<’›CeðËýÜœvó€I»ÅX_ khwiqKs4¸¹QÕr™`ž?xt8ø­vø_W‡DºYá>L×Ê>Уªî ?x£8£‡�Ÿ‰[@K½ðþ´ú<ì!±Á)¸ä6_ ¿ÝÉÉo8–~%} :]§Ò'a ˆžË.àGÙ|0þîNH;yÀ%VO±ÿ�„cWƒE¹ó >T×J>Ô£¨ ýbðOCч|üXßñLkh·^t'ÊšâiGÚTu‚ÿ�¬^ èz0èp�–ž$} 6•{áíjM"á„6+qe—p#Èl¾v\œvó€IgâitmÚEÿ�‡u©t»†òl|ø›Ü>_¤’Hà䌑dñcŸøEõ{}èËbšâY€¹A× ýbðOCч±¿Å’ám^ äËbžyfiP{0Oõ‹Á=FÀŸ‰eÑ÷i‡‡5©t«†òl|ø›Àù|B’I#ƒ’2u¼â9tE4 BÇR´Òæ}šUÅú°‘ű`OL„œ‘òõ9>g‹'Ýá}bßD¸i`ÌSO4£íJ:•!Ö/àœ0öFo]+øSZ¶Ñ.LÐ.[‰¥jAÔ‚ýbðN� ᇰ¯Q\o„5­JÚH¼7âi#:ªGºÖåX”¾ŒHbd_âðÂqÙPEPEPEPEP˜øÓE“Yø‘iöK¦´Ômt†¸³¹Rw ˜˜J°=A5”þ-Ã"[躔~#Ñå1»Ú¢JÌOÎ DûHär¨#SÅ‘j2üT‚m%ÂßZh¦eÎé|ì˜ö±ì@=:âHÏ7†Œ4U6úÝ…åÊ<|¥ã{¦-m0Ïæz×4zïijk¶êöþÖíuÍ=² ÀŒ €J7Î FÆFÁ�ˆµ]tø§L’ðî¹m«Ú©F)Ÿ%ÙFäoœa‘‚0@!,îüSâ‡ÄzE¾Š—°‚âØË*HÅ~õ¼ÊÉÃ)é’0NsµŽeGñn¬`ñ—o¢-ÜJÑK›*¼ º  Ã+g#iï‚rÏi¾+¿’(t=CLÕ“Äš{ìë)ZFP ”]ÿ�.cï.�ã߉f×mÕíü=­Úëš{dA!�”oœ†; Œ‚šÎâOXA¬YE¤[ßÛ±¡šHçWBvÛ“åulã$`’>ëÅ¢k¾*ñÛÞÚ[éëÚbn­¤wîve+Óp8ämlƒ€H µÍV?hÓYÉánRØmm°£y@%OÎ F㜠Œ0Á�Œ7ÅÚ•ÂC¤j^¦ž*Ó‹}Ž)KJ€RPYK1»F×8Ç@âÝXÁâ.ßD[¸•¢–6Uy@'tA†VÎ2FÓßç3ZѼKãK+}jÂ-"ßQµ$ÆñK"N®„þíƒ' ­‘É$ºÇ w~&—\‰f²ðþ³m®iÍŒˆ„N@-üà˜ØcÓ# 9ªëÚ°ñŽ5´Z»k«Úƒh£LÂäQˆpÛƒïò°ä ¥¢kÞ+ñä—öVÚL暦»I$–6¹Až ‘½œAVAØü]ª›éPè¢áÇ$"y•¦QœÃ"²€[8$§<àš�ÁÓ¼c¨jæ^éZ’x¿K-äÊ©óTc"E, î?Âö7¯<K6· ÏeáíjÛ\Ó›�ˆ„N@-üà˜ØcÓ#k@¬­cEñ7Œ ²ñ˜ºM¾¥i“Ã<«.åÎbue�0;† É‚hÑ5ßøšáõm:ÛHƒWÓÔÁyfòKN£8VR0>lí$‚§ ãæ¥¨x…üChZ×úվ³bJ!B#r£tO‡ caL¬9¹½?Ä×–þV“6ªÇªXÊSIšHÕ¤(f¶›æ—Áêʰӣx»TkéPè¿hXÚ9!J¦uæVQ‡VÎ #iÈÎ ¬ícGñŒôÔÕm ÒP…JÅq4r’„§r’£çi8Úr‚£yâYµ¸V{/kVÚæœØ@Œ"rhŸçÆÃ™XrQñ¤|c¥:[èZý–·d@@ˆ8mŒCça!H8ì¬j£¢k~-Ö55¼zPÖìmöÍ$GP„9]¸ #¥ à+qÅÚ£[øJ‡EûBÆÑÉšU3¨'0º²Œ:¶pINFpM�cYxÆûXŽ+yômNé î1@›d^2K±ÆÜ€í[ž$›ZHï,<=­Ûkz{ÿ�P„+ C'Í’Œ1Î?ºÃ ¬½WFñG‰—Šô„Ò-õ[0Æ6†YVI6ä42+ ÎWޤPíZñ?‰Kø‹HµÒ"Ôm[ßX´²¤’íÎ#u+€ÙÉFÏ ž �hÞø’ãYX¯ôÏëvºþšÄ+teG †OŸ&6ìÝaÈè¾ñ>#Ó>Ð-å³»‰¼»»)¸’ÞLTúŒAî5çh|Y¨<^&Ò!Ñ(¤Ð$Òƒp«ŸÝ8eul’6œƒÁ4ûI<Uw{kâ½. äXÊ\[Ã<Š×qް¸dÂȧ;IÆÖÈ<(Ö¨ª>¯i®é‘_Ù;¤È*ãkÆÀá‘×øX‚;Wè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Çò x“þÁw?ú)«Ëôù?µôÏøc_·Ä§dÐK!n ’íuaÊȇ`aØíaÁõÈâOûÝ覯1³œx@ðŽ“#Ë¥êö’ŵ×Ô Iš9“<21A‘ìÊzP鲿Þñ¢çP]×\Ø'T·‹lŠ{H¸BÀt,àÕéóëÖ¶Ú7‰õÍf;ù ŽòÑÒá<«¨ð<e‘"dnÈ#p$4Z%ñ•â»=]b´×¬gûGú;dÆÂÚ5YPžv>ÓÁìJžk5 µñ§…¼- ^§Øu;y#_™BZJÑÊ ðñ±E%}ŠžE�lÁá‰u ¥ÐõïëFò3çBë:‚²Ç”ʲœdg*ps‚ $“Qšm ]ñ²×°âh™'Œ,èË,yBU”àœ©ï‚ ÌX|)ª[\蚟‡-´ßX2™†£µÂ« •|´;¢lƒµû­H ð~·¦µœþ:n³nUÛìÞ•¶0'kí|ѶÊØÈÈ8# BßÃ2ê3K¡ëž#Öì$O¥Â*ξYcù VS€Fr§Ø‚K Ë©Ë6‰®x‹[ûtM$è«2ùf(JpÉ*}ˆ&‡Ùü!­éfÖ 7X€«·Ù¼?3yn ÚØ|Ѷ ÚÝFAÁG„u)­eðßön³…¿‡¥-Á;XÍ`ü­ÔqÁ�_¶ðÌš”²èºçˆµ¯·ÀÂxÙ&EY7Ë4yBTƒ€FISìA%·†¤Õ%—E×<A­‹ûv!IÐ,ÊË4yL‚%O|M„5­1ídðßön³o‡aoáù_ÊpNÖ CóFØ<0„p|­i­m'††¬Ûì°x~gòÜgk"ù£l•±‘èG�­¼3&©4š>¹â ljÌ'’t *ƒòÍ)AàŒ’§ÔIiá·Õe“F×<C­ NÕ„é¶xÔH ü“Åò9àó•<r&€‹Áúæ–Öïá¯ìÝjØ«ºCáù_É“¥•bù£l•±•ô#€EàýsL6íá¯ìÝjÔ«ºEáù_Ê“¥•bù£l„pz×Ãrj²I£k~"Ö—Tµa2ž0²(?$ñ|¤B3•<t •µðÔš³Ë£ë>!Ö×S´a2•™È ü“Åò9àŒåNAà‚h˜|­éfá¯ìÝfØ«ºEáù¤òdçnà±|Ѱá±{Â4>Öô£ð×önµlUÞ8¼?+ùRs·xüѰçAèàý¯†¤Õ^M#Yñ¶º¥› ¬ÈÀ?$ñe „g*rYønM]åÒuŸkIªÙ2Ì6ΛXñ™ÇPyÊœƒêh¼>Öô³økû;Y¶*ï^•ü©9Àp!ù£aΩ΄5½,Äžv³jÊï~šAœà8X¾hØv8$pàõŸ†äÕÞ]'Yñ´š­“,Ãl鵇;'ˆ”Î:ƒÎTåO$²ðÜš¹}/Yñ·­dÂQ¶xö¶ <YLàôë•9Sêh<^×4¿.? fë6¥]âOË'“&8/š6Ž2<0<^ÖôÍ‘xhiÚÕ¡WxWÃóH"“,bù£aØó‚�_³ðÜÚ¿™¥êþ"ÖâÖ,˜J6Λ[¨Iâù3´òÎAÊŸRYønmadÓ5oëpëL%ÂΛOP“ÅògiäuÈ9SïFH|#­é`CáŸìífÔ«´#ÃóH"“ X°ÈñìAà„– kZZùþÎÖmHw€x~Wɹ XNä`{ó‚Á�_³ðÔºÆí;Wñµ³§È³®&B»†v\E”ÎÓÈëw)÷îü3â µ.•ª¢A®Y¨óã_»2hýQ±Óªœ©è ói ð–µ¥©ƒÃ?ÙÚÍ©Wh‡åq˜û’‡ Œ×‚'‚çAšÚ;ÍG¸Ð¼EdC•·Ñ.?väg˗ˈnéׂ�=’ŠÂð¯‰àñ>™ç%´¾„„¼² Io!Á´ƒ•8äz»@Q@Q@Q@]â»JÇâÔº}¹ºX40×6ª2òÃçÞ_«Žø#©ÏßÛ«x>ëÅ:ù°ÝÝÌ×p ÿ�¸¾Öû ¬^1Ó+z kxÛÅ6Þø¿§]_)ûÆ’-å”õ9™ˆsí•çÛ‘œ`åêKq¤xkRÕm$-íüív³ör.›lÑú©CìÃø²—ã->ÆvÚ†ˆ×3ØO¥­ýìzl¾\·Q¤›7'¬Š£rv•àÕ‰~h³iVÚþƒ¬kWú|Ÿ½!»Ì“GŒNθåHÉÁ^ _»¸´ð¿Å³©ÚÛ´šeÎŽn/ÊÀ­2†Tu\„-VnyÍXô}D{ŸÜéš~¥ Þ_\­öûd™­±q"¤ñä¦6†QÛæäP^ü.Ò’Æ gGÕu«Û&ýíÄpÞfI£#ïÆp2ÀsƒœƒŠ¡â/„ö¿Ø«¯xOTÔ.æ æ÷Ìñ>ë�p:rHéÈ�ÕÕ<[ðÿ�GÕe—EÐì5¸nP¼–gNØ`YÓ„ r `‘Ô×7>ƒ©ë2Ëy©éðŽi3MæJ–º¬Öë·—ÝåðŸ(È0NBõ  ôðï„æÐ-üCgâ N(7¨YÍ©"ÏÀ�í'�²ð@çrô䊯«Xü=ÓÞ›jW\¨팒)�nFÚåàẀG[Uð MaªZÙëzΛΡos§ÜÂvu2+ì@�‰ì9Á$u¶¶žÓîcÕ¬4·h7)™š]yE±ýj»ÆAN0Ã<Gz�à¼M€à·Þñn£. ­óÅp³fU8>ÅÇNrz{€Œpø [mJ×ÄÚ¬LÄ5ýŒ×¥fÆ0J6ЗÓÀqƒ]ÄÖžÒµF¾_ ô{ºåfðô¿è„õªZ,ydW±ÁZ¹¿xsözÄZþ™áë«­-‡ú~žt»˜S2FÛ'Ô û€ iþèOg¯¡ëz¾£f{¸í¯ƒÈèGÞM£–QÎÒ2@ÀÁÆjx‹á=´BkþÔu+¹6‰dF¹,ו”œœûr0qu_ø"í¡Õtyµ¸ti™&ŠÆáÒÛù÷4xdà‚7dy¬:v¥àf’uÐ-|M£ó$u ËÆ rÛä‹å¬:œu4ÑØxBÕt;蚎½5©lßÚ-ßï×’¸^]x8çrô=3£yð·I‚Ò _IÕ5«ËÄ· æ^XÈÿ�Y ó0ë·Ã§8Šø:ÛÄPëZv‹—))¨èwV*þX—ˆà¨Æ=¾˜?/už±ºþÖ¶ÐRï@¼IdmB–Œ?]¢Ç–q‚£¡äpN�3|Að’Èi ­økUÔ®_a—&ãÌ.¬Î…@'ŒdHéÈ�ÔÒ|£jº2kmö¶æÆ«cîéWóÆBüüa‡zôä`ôSCàýS’ôølË£\ü÷‡åͱ÷Õš/õgºŽ‡pN0|O¦hš³ˆôm[‹K^XÜh’¬!R ÆAÇø[ý–8�Ô¼ø[¤Ái¯¤êšÕå‹â[„‚ó/,d¬Œ…ù˜uÛÎáÓœŸâ?…v¶zL~!𾣩_&·‹¬½Ì=rŽ�äÇ9ü0t­î<m9Õ­´¹Ð®ò×M FR 1ãgeínGâÄÐø?DÔä½>2è×?=ÇŸáù@³l}õf‹ýYÁ€ ˆ< _h–¾#Ñ5]vçM“/y ]þø rFßLr¼ä9Ænßü.Ò-m ÕôÝWZ»Ó›÷·+ æ^HÈâT |ÄHÁ,:r�4ukøoÄk¯ØørKÍäcQ³¸Ðå l?ç´FH¨õ\ÿ�Mº±ŸØ]ÿ�iÁ ¥Öz ²Jú ¥mN8ts Mº>éÁ€ ½F_Â5¯^ÞêºEÈß[K(˜ÉÄ@uG;—Ž¡kÓ­.íïìá»´™&·™‘ȇ*ÊFAãR[øCEÔä»o ùš5É/9¸ðüÃìo¼¬Ñ«8Á_á<Ž ÆÖ—â/ j¡,àÔ#ðÕÓ–94ˈcÓ¤<ùŠÍQ¼¹ùIÜ8-€Q¢€A�ƒzE�QE�QE�QE�QE�QE�QE�`øãþDØ.çÿ�E5y»sÃÞ ½Ñ^+}nÆAjxó°­¤ŒÑ8ë±ö¯#³éþ1†KëðD»¤“M¸D_Rc`yzÄ¿Ù> ñ…Ýj1ª[K�ªÜµ—r0ÿ�ž‹µÕIèXƒÁày`>#Ò¼I«Û¤šn³g<€¤œ•Å´"HdÇÞF*p}•‡J‚Ù×\ðÿ�‚¯´fŽ nÆAjt?![I¢qýÇØ¼ú0aRÜ!Õm|KâŸLLåŒSÁ *·0‹h·FÀýÙïÚ{6TðN"HÓûÁ^$Ða[­AU –“bܵ—r·ý4]®ªOBH<t�°±É¬E®xšÁM×ôËÆeY†~í´"H%ïFÅNöe>²ÙjÚߌmíõ­'MÓlµ) l³j2oAÁh¥O#X`Žzí`j´ëý©mâ_xzmÒ—1Ï ä-ÌÖ-ÈÃødC»‡rž Å}[í¦h:ÿ�ƒ.=NòÜ[ÜB´¤q–(Êà1v2‚FG*xè´&ñˆ _OÒ´»-NÍÌ/æj2oQ‘¾ WÈ䣃†ލ³ëþ"û>±§izUž§fæó5 ¨ç‚Uò9Ç<0$uÏ·Òõ«ý;þ¯ø¶æêââ%ócVèò¢õBãÍ^@Ï— ‰[Eפ´oè~-»»šhÔKÙ@­2)ämÛ*ò>až6’;�[> ñÁ¬éºV—k©Ù±…Õõ) €Ï«ä�}G<08ê-ψ<@°k:f•¥ÚêVŽÐº¾¥!qƒûËyWÈ�úŽx8`qÖ«èšóÚŸè^.»¼–x×ÌD²Lñ©ä*˜¼ãpÏI‡Ñ5Öµoè~.»¼’xÔÊ‘Ù@¦xÔô ·bòFxÚHìm.¼A¯ýŸZÓt­.×P´s ¨Ú”›ðÏo*ù÷ðpÀNDºñˆ×\Ó4­2ÚúÙŒR+ê2 Þ[ʦÎzsÁÁæ£èšóZ·‰t?]ÞI<jeHì S<jzÛ1Fq‘ž6’;#èÚ÷ÙO‰4?]޵¡b±Zx×#…Û1y#<mÈã�#¹ñ¾-µÍ3KÓ-¯­˜Å*¾¡&ò üöò©€sžœðpA œ‰sâ|Zëšf—¥Û_[“ŠÚŒ›ÊƒóÛʦÎzsÁÁ‚sRM^§Äš‹n¯Zå¦Xl­ÃOç•pdQÓ#'r8ÂI¢ëÂØø—BñmÕó\¢Ö+pÓĽÔmÁ‘A=FN6äq€ bëÄZè¶×´­+K‚úØ´RÆÚŒ›ÙAùíäSèIùO àœ‚çÄZàµ×ô­+K‚úßtrÆÚŒ›ÙGß·‘L ¦OÊÜŽ ÍItM}m‰4?]_5Ê!a²· <Cº»LŠ ê2q·#Œèºú[Ÿè~-º½Jp±YÁºh”cr®Ìv#$ ¹àPźñ¶-µý/JÓ!¼ƒ1MjRouç·‘L�8$ü§žA9çÄZе×ô½+L†ò Ç,M©I½Ô¾ÞE0�à“ò·= ÍI´OEñ‰âÛ«Ñr¨÷+87Myf €vÆHsÀ¢mÄÛŸèž,¹½[¡܈l Ý4@cr.̱ mÏ€-­×ˆµŸ³xƒJÒ´È®á)¡:‹ï‘A; ‘L 8$­Ï œ‚çÄZɶñ“¥éqÝÂ)b:‹ï•A; ‘Z† œd­žÄæ¤Ú'ˆ"·>!Ñ<Ysz·B7¹ÙAºh€Æä]˜.b2@Ûž$º.¿on|E¢øºêò ’\¬6Pn–01½n Ž1–È€.-ψµ†¶ñ‘¥éqÝD9á:Œ›æUÎè$SáÕ³‚OÊsØœ‹sâ-`Úø‡HÓ4¨îb9¢þÒ}Ó Îè$S�ëgŸ”ç±9©>‰¯ÚÀÞ!Ѽ]uyÈInV 8 š0>ú.Ý¥ÀÇËŒäDú'ˆ- oèÞ.º¼†è$·K œ¦Œ.Æ»p\ qŒ°Î@n+¯êw6ž'Ñ´Í-.¡+ˆF¥&éãÝnêaP®8$ü­žÄçÑ´]bÓ^ÒâÔ,‹ùrd2H»^7 ޽˜AÕåÓè~ ´¼A£ø¶îò+ ’Ý,6pš0¼<k·ÀÇËŒäW´Û]SÃS¿Šlµ‰5ÛÅI/­’Þ8ÚXñÄÑì�vÇÌ£BЩQPYÞ[jpÞYΓÛLã–3•e=5=�QE�QE�yO$ÒÛâ”V:Ô%ôûímðv£5ÁØX»ó�vb¾µÃÚêמÓn¼%ª#ɤÜ]JšU黸!ѱÓO±>‡åô%“üV‚ÛSHÚÛPÑÑUÊÊþibŸ] žzãŠã5(# ½ðƱ {W½œiwìw³²Ý8dv=%�1Ïñ)=ÃPÄ^ ø·3Ï"é3é&87Œ¥˜yÆ›´{�ž…ÂôÅyíþ¹«j–:†ƒ¢LÐxA5)ݬ'djò±HÃvCÁÇ-‚p@£Q´ñ«ãë__êq‰ÒÓ¦¼Vÿ�[nœ3êØÇN�9äžâ‹BðUï…ní—û>[¹âÓîÈœ%ËŠ^�ó�RGf^œ© :ÿ�[“áе=E°²½·t‰ž{èËJC"åK)nI8ÇzÛ°ñ_ÄmI†5𽌚eÔ€ZùŽ4Y>ìjÂLlì¹õ=?OÑ´åøÑ¬øw\¹¶·ZPµ€ÜÇ睊Ãu;AëXö“jÞ¿>Õµ««_ ^Ïqokrmâ•~YZ2z£#'c ÷  ›|Kðå‚ÙËá;1c,Þ\ÎÙH·ôˆ3…Ï Ô.z Å‹]ñïÛKÛ‰¼5oo£ÞO¸ÛL ÂÍœ„Úÿ�(>‡#Šô#¢k¦àøwTñ}ÓÙÝDVÎW³·u¹@¿21*O˜=~aÈèp“ø[–Y<1¬ø¶êK+¸ŠZ¼–p0¸@>dbT·˜½sœ‘ópÈi^1ø…¦èvþG†¬&ÒnäÛh]ÃFŠý# $ásÀ Ó;sÐU‹|Kðå‚ÙËá;1c,Þ\ÎÙH·ôˆ3…Ï Ô.z ͹°Õ~jëámK\¸‹Âz™o.è[Ç"©80pvàã8#®ïQ]×ö.¸ÓŸj~0¹’Îî-¶r½»­Êå *Nð9Î~aó‡� ޹ã_‡îêÿ�Ã1Á¡ßMóÚ»æ]¿ºAb úsZîôÝKÄšM…œQ[h:& Ûl¥:„¦(‡ËcvžB‚8û¤ýÑK?‡µ©¥“Âú׋.¤²»ˆ¥«Ég „”bT·˜½sœ‘óqÄMc«|>Ö„µMvæ j[„BÞ7P[ ¸'œ×u�hx§ÀZ•ÂÛÛ_éÚ5¿/—eü ÚvcÌ„ð™cnáòçFÖüMð›Xkö’ØÞ0(÷8·8.¬¿ÞsÓßщ®µÁðî©ã §´ºˆ­œ­g‹” ó!%Ió�ç9˘ƒŒýgÁ:†´éáŸøžâhXoÓg’Òæ^T¶7 �äüß2äö`�4­.|Wáø­´ç²ÐæÓ.Ü¥›½ü¯!‡Ë+•9!21—?w+o/‹¼6 Òç°ÑdÓ®d1Z™/¦dƒ=!fòsƒÈ\ŽÛsÓ>qá}GW·Õ&øwâ]r}>ÿ�F…ÞP’r³© ‚§<qŒq^‰&‡®Íu/†µ\µ½ÄXµw²·e¹@9RJgÌ^½rGÌ�ì‰â†sÝýƒM}Q“l¶Ëu$‘[¹À XÆÈèr’z+¿hPZØ= ãJ½m¶R5ü¯A€++•9;21—?w)&…®Ïu/†µŸ\½µÄDZ³Ù[²Ü ©%3æ/^¹#惎qô}[ÂúŒ^Õ¼E<~Ô¥Á´…Ð19òŸr§=0p8Æ;�tðIâß$:MÆŸ¢K¦ÝHb¶óofdƒ=!fòrAÉ ‘ÐmÏLá#x›á¹kk‹&OêWcG»‘á°fêÌY¶z w=IÚ“C×fº—ÃZÇ‹.ZÞâ,Z»Ù[²Ü ©%3æ/^¹#惆͠ë—3ÍákÅ—/ks[f{(nc”$¦D‹×®HùààKy¼YáèàÒg°Ñ%Ӯݢµio¥há BÍäòH\ŽŸ.IÆV|YáÔƒH¹ÓôItë§h­Œ×²´p‚ fòy$.GO—$ã8ÙΗ©'‚u¯Ü.y•¦NÖ°ºÊX\²’®8ÚsÏÁÀ­‰t=vâêo k>-¹k{˜Èµw²·e¹ŒT’¹ó©ç$aë€ Ï _jþž _ŽÖ=*âC4/2Ú·mÝ™í<„'¦äüµèµãÓhZåÍÌÞÖ¼Yrö÷1jÒY[²ÜÆ*I\ù‹Ôó’0ÀõÇcáR÷K¼Ã:õÛ]\ì'O¿`ÞF*ßôÕG_ï›ûØ�ì(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Ï×cðî¦îp«i)'‚ò BÑ|) øžÆIgÑîn{»X~q¼ÛH¾rcщ¨ÐW¶ÉKÇ"†GYHÈ õæ:¶—/ƒu}=Ë<-ö¶•Œ‡wØ™£‘1ÿ�\Én}è*öI­SÄúî ºÒ®‹»X°T£ZÄÂâ?ö†âXû¨ÍxíâðöŸàÿ�Y d´˜D÷¶p(`íö9G÷‚nÜÞ�wÇrïàuñBÚÀ‡Ã7RºÉ´íã!Ž?å› þÎLšvœ…tÿ�ßMrA¹h¦‘d$ý’w´§´lX±ì¤М�[¾y쇊uÍ"Au¥\HEÝ´$(Ö‘0¸Ä Ýw/=Tg‰×üPlµÝ:?9–õm>ÓzU|ÈO#jïˆËÆAÂðH5×ê“Íàë_Ékl§B’IÅsmpöÑ0n¿qÙö‘ü'‰Ç)ðòÍ|+iá¿ßK²Õne3JS …•$Î{m>Ç€ Û߆÷³Zßk÷úãêCt¯¨Id€æ'†9Zt9ÃãÌ5Ÿ}áÛym|isqHê¶ÌTÿ�ÈÁÇq×9>“¬–ð¶ãXmí•t––‘!ÿ�Díc!°?図…ôSŽÇŽ®?ù$«ÿ�`!ÿ�¢(Âï¼/à‹Y-žÛÆw7í&Û€¶ì5=0À£®9Æ áoZIlöþ3¹¸·i6Ü·`ñƒÑÀ# ê:㑜`ý¯É>Ôÿ�ì/þŠ5?‹?äN×?ì?þ‹j�ùâÿ�ÂÞ´’ÝíügsqnÒm¸ nÁ㣌0¨ëŽFq‚_ø[Á’[½¿Œîn-ÚM·mØ<`ôp1†�õqÈÎ0~‡ñgü‰Úçýƒçÿ�ÑmG‹?äN×?ì?þ‹j�ùâ÷ÂÞ´žÙ ñÍų¾Û¶ì z8a€=G^r3ŒQ{áoZOlÐxÎæâÙßmÆÛv=0À£¯9Æ+èÈ›®Ø>ýÔx³þDÝsþÁóÿ�è¶ ž/|-à‹YíšÜOjï¶ãm»ˆŽ>`QלŒã^ø[Á³Û43¸žÕßmÆÛv= |À£¯9Æ+èÈ›®Ø>ýÔx³þDÝsþÁóÿ�è¶ ž/<-à‹[«cŒîg´v)9Kvz>Ã.x r3‘š/<-à‹[«cŒîg´v)9Kvz>Ã.x r3‘šú#Å_ò(kõá?þ‹j<Uÿ�"†·ÿ�^ÿ�è¶ ï<-à‹[«cŒîg´v+9Kvz>ù—±‘œŒóEç…¼kulañÌöŽÅg)nÁâÏGÁ2ö r3‘žkèÈ¡­ÿ�ׄÿ�ú-¨ñWüŠßýxOÿ�¢Ú€>x»ð·íní¼¯\Mg#™’݃Ä{61ó/cŽFAçœ~ð=­Ý·•ãK‰¬äb³2[°xfÆ>eìqÈÈ<óñ¯ü‰úû‹ÿ�¡ <kÿ�"~£þâÿ�èB€<ïÂÞµ»¶ò¼iq5œŒVfKvìØÇ̽Ž9žp]ø[Àö·vÞW.&³‘ŠÌÉnÁâ=›ù—±Ç# óÎ=ÿ�Æ¿ò'ê?î/þ„(ñ¯ü‰úû‹ÿ�¡ �ð“¢øVÂþÆÞ×Ç÷çM•Œs4HèÖìyƒ€Tž0FAäg›7ÂÏè0}§Âþ?Ô%¸‹”´¾$Äø9,¹ã®=Åt¾>8ð.¬Oüñÿ�Ù…w”ç~ø‹s­j—ñ=Ó<MjaÆu%—“Î9ÆH#‘Æqè•ä솑ýã{1²ÿ�L½HÝ—ƒ$G'èAð3^¹«<)*£¨e>Çš�}Q@Œt ox‡ì,éÿ�ÿ�2)Pá¢Iò°>¢¸Õ¢ÿ�„Zð÷ˆ—Q²¸š´/ÚGÚ‰ic#€Á‰œv5ìÚÎŽoÄwV®°êª”ôaÝÕOéÔ{ùÄ 6Úóán«5õ¸‹TÓîå” üÑ. Æ{‚¯ô4ç¾ðõÇ|K~ú½ÌÐßßX½ýæì8‘g c¶U†8àqŽ vú~·­àcºïÉ®ØÝ;JÛ€ó‰¹$Ë�r‘ÇN=p1>YÁâ-fÂÚ#=…î )‚àb›í â@::•“x!™kgVÓ¢ñƒ®çc·ŠôKùË4Y ™._ gïDIlÝHõ=#I—SøÑ®é^!‘'Ÿû ¹‡÷låZ’¯÷$À ÇFVŒÑ[k^ºðŽ»¹¯F¨DWlª­r­|QæŒtVœí‘Ù«ŸðßÚ|iñwSžò9´bßL 6×1´HX÷”óòœ‚¬F{×U.¹á'³â¶ñ›®2Æ……¼Ï|@’0ß}æðpAäP—È4¿j†|U¡I©KfÞöÖåãuR2¤ íîô94è<Yà™4±m}á Ǻ TÜAvêIìáK­ßŒûW}áë«Û¿—'Rµ[kèô¯.tC”, üÈ{©#<Œàò wIÿ�%>oû'þŽz�ð1âÜèÆÊÿ�Â7†è¡OµCvàç )bïŽF}«/úÿ�‡ìôë› {@¸¿$“ou ÃE,c·Ë¼u}E} ŸòSæÿ�°2èç¬=KþKÆ‹ÿ�`yô& #ƒÅž “K×Þ¼{ ¥MÄn¤žÎ± ÝñÈϵD|Oà«­¬¯|'yö½…~Õ Óž‚@¥ˆ¾9…{êÉO›þÀÉÿ�£ž„ÿ�’Ÿ7ý“ÿ�G=�|ÿ�àmO“oѼU`ʸ鬲+Ä�8Ê)#9}r+µ°o…—6SØê’Æ—Q‹w Ü(ÇË*ŽB·ª‘Á¨Æz=[þN+Bÿ�°;9«¨Où)óØ?ôsÐÏÞ%û~”m¤GX¦6÷í â8Û:îû­‚Ù^Ì;޽‡[áóÚßhþ!–3=¹"×U…æzí}™;]}Çלíük‰d}A˜s›lËì~ÒÃù]f†Ìÿ�´öbK ÄI'$Ÿ:€8Ëø[w§Mg©É7±‚ê&¸ÄŸÝ•Nû'¡r0Klÿ�áUÞ铨ê¯Wqæ?´Ä×eùeA“ƒþÉèAŒêñÈ÷uÿ�`Èôl´Eÿ�#Ý×ýƒ!ÿ�ѲЋxpü?k[íÄ2¡žÝˆµÕby‡ž‡;_fN×_B1õç:– ð¶ïNšÏS’8ob%ÔMq‰?»* œöOBä`ŸAòYý‹ãÿ�J jEÿ�#Ý×ýƒ!ÿ�ѲДYÿ�¬¾Òç±Õ$ŽÈóº…®1',È2pÙ=#‘ŒÒÐáÔÖzV¿"-å±+¥ λ(\®;©Ϩ5ì‘È÷uÿ�`Èôlµ—ü–Kûâÿ�Ò‰(Ϭ_ámÞ5ž§$pÞÄJ ˜^ãlŸÝ•Nû'¡r0Kô»†OjÑ]Ü‹=NÕÿ�u}m%À˹<|§¾Bä`ŸR‹þG»¯ûCÿ�£e¢/ùî¿ìþ–€‡þ;´ñT7{ÞCq©Øñ,‘!E¸¢Ê ôÏuì}ˆ'µ®GJÿ�’¨ú„[èé«® Š( Š( Š( Š( Š( ¢¹·†îÚK{ˆÖHdR®ÐƒRÑ@I­Ù·€ô­gN¸®4-B~Ëpã“)‹h†OöHU éŒtéÖ³xw_ðç‡/ˆ¹Ðd¼±O9b›y£û4™ûÜÈ¡3Ôv¯Z¿±¶Ôì'²¼…f¶ IŒ†¼¿RÑÞËWÓü5â ]èr™Êîn­”*°¹ìêH*ÝNñu�ÃfM/Lñ‡†§W]6æIíì.¤¶ÉE´{`bz »Bdó´¯\gœøeâ:è~Õ’'¶¶¼žæ…/ƒÊpx!‹¹ëó/až•eK ÆÞÖek›‰ææÖâáF.–8zSb±èy =¸½sÁz’êšjéñÕ¯ -pZ„B-Ääð³(n™;\IÀoyq†4Ÿh3ù¿Ù³¤ÑXÝLû€“ìh~ÎÄôÂí ž œTð¿‡ÿ�áW­×ö™öìa'öH÷ïòs»8ÎsÎkÎfñÞ¥§xk^ðçŠ|?{>¡{¼ŸA©n9e ŽHõІ_Ø[øB;&мD®lÖßÏ“V¹XrSnà»¶‘Ü.1Ž(Õõ¯ xv/ê3Ç ii2é²:ȶq† "$qœç½Mâ øn ë3Cáý*9c±‘ÒÊ0ÊB pkÊï<{§ÝxrâÞ?ø y¶ÌÚ­ËD2„n ¾ ÷ÇLTÚ·,.´këuðçŠãimä@ój·LŠJ‘–ð@îéÞ'ðŸ†àðž³4>Ò£–;Ù,£ ¤! ‚øOÃpxOYšéQˌ쎖Q†RAƒ^c«xòÂëF¾·_x®6–ÞD6«tȤ©`_àñF­ãË ­úÝ|9â¸Ú[y<Ú­Ó"’¤e|;ƒÅ�zw‰ü'á¸<'¬Í‡ô¨åŽÆvGK8Ã)H Á£ÄþðÜÖf‡ÃúTrÇc;#¥œa”„$@àטêÞ<°ºÑ¯­×Þ+¥·‘ͪÝ2)*FXÁ¸<Q«xòÂëF¾·_x®6–ÞD6«tȤ©`_àñ@â øn ë3Cáý*9c±‘ÒÎ0ÊB phñ?„ü7„õ™¡ðþ•±ØÎÈége! 85æ:·,.´këuðçŠãimä@ój·LŠJ‘–ð@îjÞ<°ºÑ¯­×Þ+¥·‘ͪÝ2)*FXÁ¸<P§ø—Â~ƒÂº¼±xJŽD²™‘ÒÊ0T„$qÁ£Ä¾ðÜÕå‹ÃúTr%”ÌŽ–Q‚¤! ƒŽ y†«ãÛ öðߊãimä@òê·LŠJ‘–ðG¨<QªøöÂçG½|7â¸Ú[y<º­Ó"’¤e|êéþ%ðŸ†àð®¯,^Ò£‘,¦dt²Œ! phñ/„ü7…uybðþ•‰e3#¥”`©H ãƒ^aªøöÂçG½|7â¸Ú[y<º­Ó"’¤e|êj¾=°¹Ñï`_ ø®6–ÞD.«tȤ©`_zƒÅ�zG‹ü)áÛ ßË¥Å"ªít³Hù‡B/ð§‡mü+,—Š«µÒÎ5#ææzߎ¬o4{‹tðïŠbg�ŸTºtŽ¡ŸoÇV7š=źxwÅ13€Ϫ]:GPσ@™âÿ� xvß·òÁ iqHª»],ãR>aÐG‹ü)áÛ ßË¥Å"ªít³Hù‡Byž·ã«ÍâÝ<;☙ÀçÕ.#¨gÁ£[ñÕæqnžñLLà�óê—Nƒ‘Ô3àУxïÂÞ´ð>¯qm épÍI#³YNG ‘^‘£�º€´ú¯›|Eã‹ïÞÚÇáï@òG´Is©ÜÉóÕ•œ‚>µÚØüSñN¯¥Á¦ø[À×ír,kº8Ž2��ò�>¼°ühßÇÑ«&…à›&¨j—Ñ»"œ˜ãPHì2s“ýÃ^¹K) "(UÊóÏ�ü9ºÑuI¼Oâ{ïí/Ý/2VÜ‚ª{œ`g�À㯣PEP\ü ¾(ðíô6à-ì2v‰{…?Bî=+®¢€>fø_m©ë;®ì. [D²ŽÞ/ú¹?}342î•eêt®†õ#Õ>\kPFmuËMRxÞ&~c2Þ’`—W§ˆT>$ŠçáwŃ©Û|š¼ÛœˆÖ\唞ƒ’Hô ìjö¿¡¼Þ}oLš”—Š/­cý, êŒ;H¬Ëµ½ ^A�å|I¬Mñ*OxN bÕ-tĸÔìdÉ`Uü¹"eþ!´!ã¨Ãq]›¨Yx»Á–Úæ”b‹_³ÕCù-!LסÄR2ÑÊrUÈäV%Ôf¿ø«¹áŸ*p|>³ÍnTºA;+FOðÈ01ž…œ ã˜Õ¼?-–œ¿|-+Ú„’\ز%Qv|¿”r9‚žÙàŠ�ÕÓOñ_Ç)Úÿ�LÔix–Òò%&U* Œdà÷#ƒ]jø[Ãßð±¥¶þÁÒü¤¤‚/±Ç·wœÃv1ŒãŒ× á}WOñïÆ'Ô¢K«xæÒ³"Cq$.².Õ ¼eI#Wt¾±ÿ�…-¿ŸªlJ>µnwgÎa÷¼ÍØöÎ(�_ x{þ4¶ßØ:_4”Eö8öîó˜nÆ1œqšÆÔ<9¡§Æ­"Åtm9mJ’G€Z ˜3|Åq‚}ëe|9cÿ� [?TØ4”|ÿ�jÜîÏœÃïy›±íœV6¡ Ù§Æ­"ÌM¨ùO¥H厥pdÎæèå÷ì(e|-áïøXÒÛ`é~@ÒRAØãÛ»Îa»ÆqÆh_ x{þ4¶ßØ:_4”Eö8öîó˜nÆ1œqšÖ?ð±¥·óõMƒIGÏö­ÎìùÌ>÷™»ÙÅ áËøXÒÛùú¦Á¤£çûVçv|æ{ÌÝlâ€9½OÃú,´]=4}=l¤ÒZG¶È#fÌß1\`ž>ºE𷇿ácKmýƒ¥ùII_cnï9†ìcÇ®oSÑ-ãÖ‹d&Ô<§ÒYËBs 9›¤…÷Ç@q×ÔÖõÎ¥XxæîK«ÍJH4ežI[U¹@•òKy›±Ó8öÍ�pô+ñ†™¡ie•´ºŒp [¢c2È Ÿ»“è+·‹Â¾‹âšØ NkTÐUÄMj…KùøÜF1»g­q¾³¶ñçÄ«Í^àj §Z[“§‰/§2à>ÐÞa}㫜ÆN=k´²ÿ�…°m|ýOËþÃgûNç~|ò>ÿ�™»ìçñš�Òž>4¹€èW’4èœGö8ö†2H Æ:à}¨Âž>4¹€èW’4èœGö8ö†2H Æ:à}¨ÃV'Æ—0ùú®Ñ§DÙþֺݓ$ƒïy™Ç3Š#ðÕ‰ñ¥Ì>~«´iÑ6µ®·dÉ ûÞfqÇLâ€3G†4ø[ÏûLû/ö—Éû${7ùänÛŒgf´£ð§‡.`:•ä:'ýŽ=¡Œ’qޏŸjͲÿ�…°m|ýOËþÃgûNç~|ò>ÿ�™»ìçñšÒÃV'Æ—0ùú®Ñ§DÙþֺݓ$ƒïy™Ç3Š�#ð§‡.`:•ä:'ýŽ=¡Œ’qޏŸjÍO x|üXžÓûLû0Ðã”CöHö3¸Ý·Î�­(ü5b|isŸªítMŸík­Ù2H>÷™œqÓ8¬Ôðõ—ü-‰í|ýOËrgûRç~|÷ÌÝŽ:gñš�Òž>4¹€èW’4èœGö8ö†2H Æ:à}¨Âž>4¹€èW’4èœGö8ö†2H Æ:à}¨ÃV'Æ—0ùú®Ñ§DÙþֺݓ$ƒïy™Ç3Š#ðÕ‰ñ¥Ì>~«´iÑ6µ®·dÉ ûÞfqÇLâ€&Ðt;Lø·qŸamgö9Kh„jXÎÃ$.ãô¯F¯:ðþñjê8éÕ´$bn.¥œçÏnò38éÓó¯E Š( Š( Š( Š( Š( Š( ©jÚM–·¦M§ßÂ%·™pÀõ„Äv5vŠ�ñLv…­økÄŽg’t–ïJÔ Îë�ÏiF9ùƒÄÕk³>±â øST3Yê+q½à%CŒy17¡Áã± ¤zúö½¡XxH›LÔbß œ† Œ§±µæZ•–­uâ;K½¸[}{Lµ¸›NÔqˆ®É1�H÷PáÔtê;P+Ó¯á¿é:ïÙÛY²ßvR"GݵŒ$ÉèÜ‘“ÛO—Má½^óápûG‰ç’Í´…Ú5”vˆƒÝ·<`sœñžµ ô+â? øÎöêÞM3Y±–Y [’ô(‘×?Å›цä _Gñ_ü+5 ìŸØãŸ:_3g“é·±ïŒÐý£]ðZ_x?S×n-´»‹eÓÝ`ã˜2å’ÊYrr¼ê z‰4/Åám^I|cw4ke3<FÆÜW!23ÓŠÃñχuÿ�øŽ£k¢ªØÛ›¨fŠi|ÔÚ™8Êc0GNž€ÖF—ãOê^×ü9©¦žš–™a2\ý­Ýf’0„1äg ÷ ÏÄšˆbð¶¯$¾1»š5²™ž#cn€‡+™éÅ$мC…µy%ñÜÑ­”Ìñp9\„ÈÏN)þ% êÿ�hƒCýŠo0Ç4Ŷì9ÆSÅ% êÿ�hƒCýŠo0Ç4Ŷì9ÆSÅ�3Äšˆ"ð¶¯$¾1»š5²™ž#cn€‡#!23ÓŠ<I¡x‚/ jòKã¹£[)™â66à8r2#=8§ø•ü`|+¬}¢ Cö)¼ÃÓÛ°çLgx•ü`|+¬}¢ Cö)¼ÃÓÛ°çLg�Ïh^ ‹ÂÚ¼’øÆîhÖÊfx¸Œ„ÈÏN(ñ&…â¼-«É/Œnæl¦gˆØÛ€à!ÈÈLŒôâŸâWñð®±öˆ41ئó sL[nÜe1œQâWñð®±öˆ41ئó sL[nÜe1œP|E ø†? jÒKã¹£[9‹FlmÀpäd&FzqGˆ´ÇáZI|cw4kg1h͸Œ„ÈÏN)þ# êÞ|‡ìSy†9¦-·aÎ2˜Î(ñøÀø_VóàЄ?b›Ì1Í1m»q”Æq@ ñƒâü1«I/Œnælæ-±·ÀC‘™éÅ"Ð|C†5i%ñÜÑ­œÅ£66à8r2#=8§øü`|/«yðhB±Mæ昶݇8Êc8£Äoãá}[σBýŠo0Ç4Ŷì9ÆSÅ�Uñf…¯Ãá‹é&ñ}Ôñ…]ѵ•º†ù‡p¹£Åš¿†/¤›Å÷SÆwFÖVêæÂæ¤ñkø¸ø^ø\Á¢v®ãÒ–ûæWxµü\|/|.`Ñ;WqŠiK}áÓ+Š�Åš¿†/¤›Å÷SÆwFÖVêæÂæhZü>¾’oÝOUÝY[¨o˜w š“ůâãá{ásˆ!Ú»ŒSJ[ï™\Qâ×ñqð½ð¹ƒDí]Æ)¥-÷‡L®(¯ôMzßÁZ¬·-ºº…aËÂÖP(q‘ÆUA…zžŽ1¢Xúvÿ�Aåþ9êÂò [y¼0Í)|dtqšõ Àg?èÑÿ�è"€.ÑE�QE�QEâ iÞ-Ðn4}N=ÐJ2¬¿z7Ob?Ät5àÍ{«|6Õ¡ðï‰dv±Y¡’ÏPUù."ŽE`­èFÐ3Õsƒ•Á¯¤k7]Ð4¿ériº½œwV²uW©õSÕO¸ {Ë]+âtþ&ѬÖm:}!&Ô|–ÚÒ°i@Ï,»°FãÉë^ɦÓ|kâˆnŒ¶zšÍªEËï"÷åž0?…RÞ=W›3øÆ .$¼ðeÁÖtc–—M¸?:P8ÉÇuÁÿ�dסüA±Óá³ÐäŽâÎÒKëYd‚ä`YÈ—Èì§þy°àà«g€ Íkᦋ¯|FUÒoä°·¿Ó[Q2ZÈÇÌUù:aX6î¿N*ªüˆø¹ôŸøHï°¶ sçl¹®Þ½8Ítv¶¯iñ9_Â7:}Õ¬úL²¤RÎLædÞ#(l6Þ€³c°­”ù/Ú¿²“#ΗfÏ5»íÎsš�ãàÔGÅϤÿ�ÂG}…°[Ÿ;`ÝÌ…võéÆk:ïáLp|F°ðïöõã-Å‹Üý¤¯Î¸$môâ½_ÅŸð°¥>F‹ö¯ì¤Èó¥Ù³Ínûsœæ¹m¾6´øÃ¦. ú]ö¢l$²3$bNK| äôèªüˆø¹ôŸøHï°¶ sçl¹®Þ½8Í ðj#âçÒá#¾ÂØ-ϰnæB»zôã5Óßêúî‘ã™®u¼;i ÒžêDgšØÁ+’ÙÏÊOñKT¼ú.Ÿg¬Ý½šÚªÙ,Ìœ9lüÊ Á>˜÷ [x|#ñªx¶k?²é-zu á¶!Œ®#?™¬»X5Š^1»Ó­üGs6—¸I禮HŒ±«d�ˆFæàî{ žëž.ñ§âÅÍ.¿³ÅسóLh°‰p#%¼IêO=Ew:m—ˆt¯ýŽÃOÐ-ÌZJ*Ã’ˆ–?5¿ÙÎìç4WLð†³¤ø¹4›MÛé#‘tø8Í`q×'wRO&œ4/ÿ�ÂÐ6ßð˜\}«ûIö¿°Ažq6íی󞵢¯âÏøXRŸ#EûWöRdyÒìÙæ·}¹ÎsUƒø«þ©>FößìAÇ/—åùç¾Üî϶1@Çáÿ�ÜD<mr&1›û:ß%|É0¸ÛŽ'=y¢?ø˜ø¾â!ãk‘0°‰ŒßÙÖù+æI…ÆÜpA9ëÍZü_ÿ� •Î Ðüÿ�ìø²<évíó$Çðç9ÏéDoâÿ�øL®q‡çÿ�gÅ‘çK·o™&?‡9ÎJ�ƈÿ�áhoøL.>ÕýŠ$û_Ø ÎÏ8›víÆyÏZ¿‡üL|_qñµÈ˜XDÆoìë|•ó$Âãn8 œõæ â¯øZ¤ù7Û±t¾_—çžûs»>ØÅhÆþ/ÿ�„Êçh~ö|Yt»vù’cøsœçô  ±øÄÇÅ÷\‰…„LfþηÉ_2L.6ã‚ Ï^j‚h^#ÿ�…¡5¸ñÀº4nnþÁJyÎmÛ·ÉÏ^kf7ñü&W8ƒCóÿ�³âÈó¥Û·Ì“Üç?¥g#ø«þ¤äA£}·û<:_/ËóßíÎìç¶1@Çáÿ�ÜD<mr&1›û:ß%|É0¸ÛŽ'=y¢?ø˜ø¾â!ãk‘0°‰ŒßÙÖù+æI…ÆÜpA9ëÍZü_ÿ� •Î Ðüÿ�ìø²<évíó$Çðç9ÏéDoâÿ�øL®q‡çÿ�gÅ‘çK·o™&?‡9ÎJ�±áK JÃâ­Üz–³&©)Ñ–W·Ž"«çŸ—�ê Ͻzey¿†Žª~,]k%’Mý†›E£³.ß=ºî�ç9ý+Ò(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬x~×ÄZp¶™Þãa-µÔë-äOóǯE�xv«¤j÷_ð‘C#AmâÁ †AÄZ£@±äîŒËýÆ8<[cPÔ“áÀ±o ê`®‘ä™|ÛmŸêq»ývqߦ}«¼ñ'†í¼EdˆîÖ÷6û[¸ÇÏ wǪ‘Á^„{€Eá­R]éïªÛ¢µ¿’vÚÚ íàïúàP=­jW’xP‹û PPÚd‹¼½¾Ñû£Ïç†kˆø©áíCZ€ø‡MÐ5; ûXneym¶ËÒ;%,HRG�ä=+Óî|%®ÝiSiÏâ;o&X F›ÎÒ»ç§\UëïjZ†Ÿse.­�Žâ&‰ÊÙœá?½�pøøxÃáî«se¡ß¾l¦ŠáÒK}‘?–sÁ”>Þs¹#µt(Õ/ÂZÊ6ƒ¨ÆÆp]žß û¶äâRqôç¾:ðÆ©ðãRº×ôéÕô=aZÛTŽrüo »Ü‘Èã€Ezƒi:§‰ü8ÿ�gñ—-Ž£jʳE¦?(êFFgëÏz�¡âRñü%¬£h:Œa¬gÙíð¿»nN%'AGŠ5KÇð–² ê1†±œg·Âþí¹8”œ}lj>×µ=2îÂ]oMXîax]“L|€ÊA#÷ýy£QðÖ½©é—vëzjÇs ÂìšcäR ¿ëÍ�cø£T¼ k(Ú£kÁv{|/îÛ“‰IÇÐRøŸS¼—ÂzÌgAÔP5Œë½¤·Âå'“ù ×Ô|5¯jzeÝ„ºÞš±ÜÂð»&˜ù”‚GïúóKáÍ{QÓ®¬¥ÖôÕŽâ…™tÉ2 ¿ëÍ�aø“X¿—ÂÚ¼máV öS)‘äµÚ¹CÉÄÄà{j_j—áMa[AÔc c0.Ïo…ù'“ù ÜÔ|9©êeÝ“ëê·¼E…‘8 ¤gýg½C¨øo^Ô´Ë»u½5c¹…áf]2L€À‚Gïúó@>%Ôï$ð®°‡AÔP5”À³Io…ù'“ùT^$Ö/åð¶¯xgUˆ=”Êdy-v®Pòq18ÀšÜ¿ð潨é×VRëzjÇq Â̺d™ßõæ¥Ô|9©êeÝ“ëê·¼E…‘8 ¤gýg½�s¾-Ô/®<+Ðuʹ¤·ÀÃÚRjjºÇ„µ(£ðΧ˜²Y-Š‚<혞݅tz‡†õíFÂk9u½5c•v±M1ò¶g©ïü7¨êRZÍ«À#“¶ÙH}þø cÅz®¡sá‹èáÕ" ƒ2I-®ÕÃÎ&'òïjwrxRýBÔ"Wçw·Àù‡¤¤þ•Ñê^Õ5:{6Ö-ÐJ»K}ˆœäJ¯ªø[]Õ´Éìf×4äŽ`2i‘‚ŸÚ€0<q}{wàZì;ø·Às$’AµyœJOä zÿ� K œÿ�£Gÿ� Šçµ? ëš®™qa>·§,WQÊiŽé™Íuvÿ�e²‚ßvï*5MØÆp1š�šŠ( Š( Š( Š( ¼ûÇ> ²½ˆÞgÛÜÛ4ñIwÇ–EwCÔ¡®kÐh š.>‹_¿ö+jgLšØÜZͧO–3½FÆó2<ƒžW¸&„ð·-<LÐéúιö‘f¬¯vÐ4žXsòÿ�¯a´z÷éÞ½Åü+$Ó^i—qÛC$l'ˆ¸F$´d`gÛñâ¼ÞÕßYœ:ôËö³•6]Û³þ³®hÆ_Iø ž'!u+Ç¿k!™-wyAÏÈ2}sÍgÝxSÆ—2ÒãÖoµ³sqm(Šh$€Mµ,ªDØÇÎIzW»AáM]5ƒ©Í¯[É7ÙþÎ�°ÚîÝÿ�=:æsáË­fÃT“V‹í)*E‹O— ‘¿Ÿº(Ä$ø_Ú¥í‹éÚì÷§y°KwqnYe߀Çl¸ÙÐ`’y>Õ£ðŸXš=vkÐo´û²\Ej±FY–bw°f\ž@'œ‘žõëÒx[XþÚþÓ‹Z³}ŸìådÓÙ†7nÏŽkÌ>!hºç€|KkñÒæÒq+ mA`´hÓ`3)–Îqʯ­�oÿ�hÝÂáó±o÷ÿ�`mòwÁ¿hÎïõ›qÛ®}ªâêWð±å“ûPÝý‹åoƒv<æçýn1Û®}«FÇÃŽ¥­Áâë?é³}£N[hŠé¯å´EüÀßëóžjèð–¸5öÖ?·4ï=­E®ÏìÇÛ´9lÿ�¯Îrhu+¿øXòÉý‡¨nþÈEò·Á»ssþ·í×>ÕMõKÄøµç Qw:ß%d·ß>ws.Üs޹ö®¨xK\ûkÛšwžÖ¢×göcíÚ¶×ç94‰àÝWþíéu»C8²ûHôöUÛ¿~y”óš�ʃS¾oÜÌÞÔ>$òÚKmÜI!Ïãúæˆõ;¿øMn_û PÜtèFÍöùÌ“Ÿõ¸Çãž+}ü7¬Q¯¡Ölƒ´"²iìÉÈÄÃÖ¢_ k««É© oMó^€¯öcíÚ¬Ìúþ¿1 Iõ;Äø³çQw:O%d·ß?;¹—n;uϵiÁ©ß7ŒnfojHNŸym%¶î$ç‰qŽ}sZÑø;Uÿ�„˜ë“kv†±ýŒ$z{*íß¿<ÊyÍY ë#Tkèu› 턬š{0Àbr10õ |j—ÑøÊy‡‡u7ݧĻKlŒI!Ï3Ž}k.=VûþµÅÇü#ºžÿ�ìHÁæ[oÏs»ývÜusÇNõÚEá½dj.³d]¡Xvǧ²Œ'<Ê}h¼]iõaªAö··[bßc8ذßêÆ€0 Ôï›Æ737‡µ$'O‰<¶’ÛwHsĸÇ>¹¢=Nïþ[—þÂÔ7:³}¾@ó$çýn1øçŠß ë#Tkèu› 턬š{0Àbr10õ¨—ÃêêòjC[Ó|×`+ý˜ûv«3þ¿¯Ìh7B–{ŸŠ×SÍc= " Yš2OïØçäfükÐ+Ò¼;}iâ9µ‹íFÞæG´[UŽ F„�¶I2>O>ÕÑPEPEPEPEPEPEPEPEPEPEPmBÂ×TÓî,/ IínÇ,n8e5ã~¿ºøIãSàÝbf“ú”†M.òN‘1?tžÜàCƒÀc^Û\׎|cã M¥Ý€’žÚ|dà §b;Š�éh¯.øWã+é&¹ðO‰óˆ4¬¢³žn"=Èç¸ úרÐEPEPEPEPEPEPEPEPEPEPEPEPEPTµ}*Ó\Ò.ô»èüË[¨ŒR/|ãÐŽ úÕÚ(Ǿj·~ñ¥ðÛ[”´ÖŽÒé²·Ib?1ðù€÷aÚ½†¼·ã'†.fÓí|e¢ šÖ„ÂmÊ2^rAõÛË}7z×máZø¿ÂöZÕ¯Ê'OÞGžcpÊ~‡ó=èrŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 5ø©à{­^oøw0ø“I"Hš>³¢ó³ÜŽHõÉøÞø{ã‹_xm/£+ØHŠòß<Å'·û'¨üGPk¬¯Ÿ>!^ÃðÃâtZï‡n¡Ioâß©i¤df?8Ià‚3Ѩè:+…øMâûÿ�ø1µ=I¢7iu$/å&Õ ÃŒú0®ê€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€•]J° ¤`‚2¯ÐY¾|W—ÃÓžñy¶,OË ½þ'С5íµÆüMðbø×ÁóÙÄ�Ô-ÏŸdý1 w>Œ2?#Ú€;*+ƒøQãFñw„Õ/_N"Úõï8sýìû†®ò€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€IÀ÷¨ ý˜$¸AVo‹Ô7„µ5a•h#Ô¢²ßD²Ðžm.ÞûJ'&F·Y'¶ÿ�xà™ß–÷T¥:…ëyoÿ�Wüi´,¿çîßþþñª@ðíý˜+¥i“ÛL€†[xÙ]OBzÇ:-‡‡sö.ÚóH'kuy­Gû|eÓý¿¼?‹#,�:í /ùû·ÿ�¿ƒüi¡dFEå¹õÕƪǡèSD²G¥éÏ€ÊËn„0=8äV,¾³Ñe{‹ ÒîÅŽélŒ^?V„‘ÿ�Ž?»Ž„¥þвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒük:ËMðî£j·6šv,M¶A‚:‚È ðA䵑?†mt)亱ѭ¯´ù¼ÖFib'«BOQëÿ�€ãHQý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÖuŽáÍJÑ.ìôý6h8u·N£‚x ò eIáË=FšßG¶½Ó ,öÿ�gWšßÞ>2ëþÇQü9áh¥:…7–à×Uÿ�_í /ùû·ÿ�¿ƒük>ßHðæ¡f“Ûéšdöò¯ ¶èU‡CÛð¬Fðõ§†˜ÈšM½þŽNZ?³,“Úû¯’?nXvÜ8�_ö…—üýÛÿ�ßÁþ4hYÏÝ¿ýüãYOáÿ� ëZX0ØØ½´ê9í£U>¡•€ªØéú\ñÙë:^œÑ»ƒPˆ©!<„sÓû¬z`´Ñÿ�hY ¦[óÿ�MWük›ñ?„|âô?ÛöRÏ·jܤ%_O˜œzjÖ»ð®{lðM£ÙaÕ!Uaî�A÷5޶~…"Á¬i–3Y1Û¥öXÆßEœ…>Ž>SßiÆà Þðž™à Kû Mqn¬îgij2ŒíÁƒ†à/8+°þвÿ�Ÿ»ûø?Ƴ¯|' j¯o>‘g±¿Š8UOb¬� QXÑÙXh2­®·¦ØKfÌ PÚÆ£$à$À +t‡ÊßìœÔÿ�hY ¦[óÿ�MWüi´,¿çîßþþñ¬Ûÿ� h£[ͤÚ(<«Å ££Œ¬A¬˜,ì4iÒË]Ó4ç†F m© TUž‰(ý³÷XôÁ;h§þвÎ>Ùoÿ�Wüi´,¿çîßþþñ¬Ëÿ�è:…±†M.Ö2ä–U6õRÿ�Xô ŠÏ·²Óôûˆìu­'M̲ äµEŽsÙXcä“Û£ ÏÊ�:/í !ôË~éªÿ�/ö…—üýÛÿ�ßÁþ5{á=Pµ{yô‹=üQ¨Ê{`zŠÆŽÊÃA•mu½6Â[6`°j†Ö5'&�a[  >Vÿ�dà§ûBË8ûe¾ëªÿ�/ö…—üýÛÿ�ßÁþ5‹ªx/G¿T–ÚÎÖÎö.b¸ŽÙÿ�u×u=Ôþ‘%ßöf§¡éÖš ]Áºîux˜˜z¼½Æ0Hòêš{³ª_Ú³!ÚàL¤©À8<ñÁñ§ÿ�hYÏÝ¿ýüãXºƒ´«‡K«+[èþëý™YvDãrþDv#œ¦m¢ÝNÖWz…¦£î{v2ôß`oO~ÈÈŠ�ÚþвÎ>ÙoŸúê¿ãKý¡eÿ�?vÿ�÷ðcjž ÑuGŠÆÖÒî#ºˆmÓ*}c§ºž>‡VÓáÒþغf¯¡é¶º‘ÆRÝ|«:´D޾¨~aî0Ä¡þв9ÿ�L·ãþš¯øÒÿ�hYÏÝ¿ýüãXz‡ƒ´Ù'ºu…½ê öÊb˜uד˜{Œ©v›o ßHö³h–Vº„J Ö²[¦åÞSŒ:Ì>‡ �nGwm3ìŠâ)Ú® ÅMX×>Ó\¤ÖVñi÷±sÕ¬J޾Ç §ºžÔe«J·k§j±¥½ógÊt?º¹�d˜Éï’‡‘ÏÞ1�Ö¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(æø½<ñ{XÔ¼+;Å,Ñ<д`!¸Û÷€#nÚÙëÝ>íðïZ½ñ€t[Q‘d¼¹šGU ààp0ø}áïZìÕm1p£ÝÃ…™?àXä{Š»á xVÇChŠÊ%Û·p.Xq“Ž´·EPEPEPEPEPEPEPEPEP7‹äTÔ¿ë‰þb¶kÆ(dð†¨Ù €€ËŒqš-5{‹+È´Íp$sÈÛ-¯b£éþÄŸì½Tž@�‡R‚OAw¬i }–${‹»pŽ�,Ï÷©ÇÝc×î«Ój·‘Nñ§‡õ)•X"In‡¨Ì ãê¦x¯þDísþÁóÿ�è¶­I’9!t˜xn„wϵ�r q©èóµÖ™áÍIl˜—¹²ym‚ìñâSµº’¿u÷I$ë[x‚êîÖ˜|7ª˜¦E‘ ’Ôd‘ÿ�-ªŸ…ï…z!'$è°dÿ�Û«–6v·ÞÓ`½PöÆÖ$m÷dÊøÎ8ïÐädPF«ubn5?Ãú•µÂ!’á^Ko*áTd0‡#ý¡ÅkÛë·óÛE/ü#: Þ°%µ8ÈÏüö¬Û}*-#Â^!ŠÞ1om0žh,×l† ü •/·±r;WCow:,0J ŽHXFAQ‘‘@®­s¨is®éšý¬È¦[¸å’ØArŠ9/‰IV�pàÀ0�Vä:íü°«Ÿ êèOZKl‚8ÿ�žß­rÑ[+BñÖŽ¶–ÖñGo%Üihù†5–_,.Â<¢Åz|ùãv+±×u&Ó4ÿ�5b¹v‘Äa­íd¸1ç?1HÕ˜€¦3€p@9ªßj:Ýkzw‡õ(<´iîày-¼™ÕFYŽ%%_ï�sЃÆ7"×/å‰_þ}]3ü,ö ü\¶‘w ϯ,ïlO«.na’6 Í9ë�$àŒúƒ‚¦³§[H¸° oç¨S E~22 ° ‚2=A4ÊjwºŽ‚gÖt¿ê0Ä[̼´’Ka Ù<¸Ä¤¤ò ÜgæòêwW<3øWR’)«ÆïjÊÀõyØ"¹»d¾ñœ¶Ö-„ïn$°·E?ʼ à7ϵ±Ÿ™Ò¶¼f×rZé–· l·÷ëo4Ò)e åÈø $3"¦ÝŒŒÐõ]WÃΈt-Vm%äH£Yf·imÝÜ"(>qÞ…˜y_R8]§Õ¯$FGðƦÈÀ†V{Rô?¾¬xoŸPðMŒÒAo ¦§o-°ÄDÇ|±îAýÖÙ¸{Ö¶|Ie£Üi3]kZu½ýµœo8†â!*ä¡X»Œò}h�êZ·‡/²ø{Q}&I£‡ìóOn ±wTYœ®X|‡�v`욥ÜÑ<Rø_SxÝJ²3ÚÀõyÜŠÍ:RhžÒ´å†8L7V;ãˆ�ÍÔlø€7Iñ#s¦é–ɵÄÓj(‘Z^Ç½ÑØäÇ/û;C0àüÊœ”QuWÂûäBÕ$ЕK42ÍndµôòÏœw'û'îö8ÂÙõ›«y-î<+©K ŠUãwµe`z‚ ÜŠÁ¶6ßðª'‰$q*Φ)>S‰˜:)lV «Œ¡zÖ¿Œ,g¾°² `5H®ÖKÛÈ¿h‡cŒ|ä)Ã|1�ì  ˜5mW÷ö¶‡DÕ&Ò®äòmÒim̰I´°@ÞiܘS÷ˆ+ޤ寣quo%½Ç…u¡‘J¼r5«+ÔfäW+¢}£þ_…uάævÜD8¸ò†{/f=±Iuomq«êV7K›Å%â1Ê:>"ªÞ¡¦‚Rpzе¶­«h·ÖöO¡ê“Ø\¹ŽÛΚݦ‰Â³ìÝçëµ[ˆ#Ëgy5K¹¢x¥ð¾¦ñº•dgµ!êó¹Ïé^TZ¤6v˜}§ˆe†ÑWî¢}…ÙÕ}ÈÒ(±ŽÕ¯b±ˆzê¦m2ÅŸœù—C?\cðÅ�eÛj¯‡õ+[H4-NM.îC6óMn^ÝÂ3â6óNSß+cn88ÂMJi5[CowámU—!‘–kexØtea6U‡¨¬`³Ñ-¾ZøSU Ð�÷¸Û«ºU•åï‹m®U^ÐjèÒDNUÿ�Ñ-‰ ;‚Ù$w=s’v>!×ìo¡ÒõßÜùŠæ ¡-²É"®3½›w Œ@=@*ö£4Úœ+þÕÃÆÛâš9­–H›ûÊÞwù‚AÈ$V^¤Å¤ø‚Î[ÛM%ÜÐY©À¶B€ %Kã±r;U¿ ØÚ꺴’§¶:ž /þ­À¼›j‘ÝzqÈÇc@°ñ±ɧjZü·LŽðËÛ64( 2ù¸V˨À$£By5[6µ¼ð¦©,D‚?{l °èÊÂl«Ä`ŠÁðrµ¾«o¥IhtäÔmó¥â Ëm(œD›6ÿ�Â3ÅZÑu%Ò¼+Áî­«_†ÖÖK)~Ù>djÌ@Ž1œÈ�›M×5»Ñ¥_èš•Þèš[kƒ%°•ÑJ†.Üé󽞃ÚÔÞ}N8üÏkO ÝÄ3Z¬·ªŸ;ó ô Ö® º¼´HEÞØÛY\ÜÃ,lA¾B9p 8#=ÁÈ8 ¥¡i˪øûNŠçìñË©j‡DW>Û/˵HùH<h]?ŪÞ+Qðíû_¤F`ð½¸Y#Ý´1o”çªäýjåõÔº•£ÚÞxSS–ÁÁ–ØAÈ ‰²A ŒŠåü‚ׯ×úrÛXD¶¯n$°·E?μ à7ϵ±Ÿ™Ò¬]ÜÍcaãOìùÅ»¶·mœú•’4’Lö*Û> š�ØÑu]V^=QÓo|¹"ymï. û¨a G9 º�îyž¢¸ M/ü$ɧÍ¢¾›寙h…#”¡¾à 1çÚrÇæSÍw�QE�QEÏèh¸nn$’Úf‚a”îÔá—*„piá4Ñ?ç¥ïþ ®?øÝPÓ´»°Ï©é Z’ß^Wâ;¤Rü’cônª}A èÚøËBš#öJÖÂé I­.çHå…ÇU`Oê8# �C'<= ‘G%ÍÒ<­¶0Ú}À.qœ““€OáRÂi¢ÏKßü\ñºMC[ð–©fö—šÖ•$/ƒ¶ *AÈe!²¬#GŸ§øÛK³¿þËÔõí6e#6·ësÙT ˜8Yà¨Ç*�4á4Ñ?ç¥ïþ ®?øÝ6?è‚c¸»p¬T•Óî8#îu­ÿ�ÂWáÏúé_øøÖþ³¢XÝÍ«èÚÞ’×2`ÜÙ›èÕ.€ã#æÂÉŽt8¸ÁP ?øM4Oùé{ÿ�‚ëþ7Q'¼9%̶ÉutÓÄ’1§ÜnPz6w©¬¼oá‹û8îb×tôWÙ-Ê#©îIÈ#Ò±üIqáíXèiÞ(Ò¬u»@~Ëv.ã ŽñÈ3óF{ŽÝG¸¿ü&š'üô½ÿ�ÁuÇÿ�¨çñ燭¡2ÏswkŒ»é÷� œrvU?|EÐõk7[íBÂÃQ·o.æÞK¤Û¸6pèz‚+ZOøfhž)uÍ!ãu*È×qÀõg‘@ÿ�Âi¢ÏKßü\ñº?á4Ñ?ç¥ïþ ®?øÝdYø£FðõÒY{O¸Ñä;måûb3ÚÑ¿91ú7ðô<`×Aÿ� _‡?è`Ò¿ð2?ñ  k㯼¯Ü]´‰ê4û‚W=26qšü&š'üô½ÿ�ÁuÇÿ�ªZ¶« ]Ký‡‰4‹}RÝHŠV»l‹ÔÇ ”?˜<{:g޼=k¾][Oµ¸C²h%»(ÃÐç ¾Œ8?˜�ôïiz­Ù´µšS8C&Ém¤ˆ•FõÁ#§­j×/«êžÕ @|G¦Áuy–×Q^E¾õò;x# ÔÞñUž¯3éÒÞØÉªB»m'G*ôóñê§•<ŒÑQE�QE�QE�QE�QEâßù5/ú☭;»K{ûY-náI aÑÆA¨u].×YÓf°¼Vh%;«At Š¡¥s¥Ïž²êÑ»ƒP µ$'€²Â9éýÖ=0HZ�Äñj…õk;>ÿ�M–Êhàº�¼Ð„—»/a'Qü]Ú¶µB+”¸°»ðíõí³Ž­o£>ŒÜ¨©|Wÿ�"v¹ÿ�`ùÿ�ô[U;¡üHÒHǘÚMîîy Kkæß­�@/môÍ{=?Â×ÖVËíŠ h£EÈ$œ+b ±½·Ô|)aeá‹ëÛckhæ¶ŠHß 0p̓ëÒ£ŸÃº$'–k&Ê‹; gšæ8ey&Ê©gÆXáe'$ýài\Fáóœ >Ðó·ìä~xý(�»¸³Ò¼-©Úiž»°·kyX¥½¬Q b„![ØsíW¡ÕVëFŠÖçÚ•Ä@¨ñÉlŽ1Ђø"¸GnÚþ¹u<ÍRÛÂ×€º³£]‘ =`|¦ìwy88%{=HF59À“í¬ ç¿b¸ÈüñúP=fòßOðN¯eaá‹Û±NEmq¦c<á[Ê·¿·åÿ� ¯ÿ�~£ÿ�âëÎ~'XßÂÚ•ÐÓš[›‰£6:‚H™ŠÜBðc;ñ…™ÎR$ä î<WáÛbÚmЫjR([k¶ûÖXÿ�–ˆßÁŽ[¼p Æ0OÄ:¨‹ÂÔøQ·G´¹cˆcU êÌÌpÝØ’OrI­ ûÛmVÔÚê>¾¼¶b †âÖ)‘ÐᘊàüS ¤^×5€#ÿ�„…õIí¼ÜþðÄeeç®Ï³ûzZî<WáÛbÚmЫjR([k¶ûÖXÿ�–ˆßÁŽ[¼p Æ0GÄ¢ÁáÛKjÐ,;QVÑgÐ7µ/5(µI-/¼1¨][H0ðÏo£}A|Ãñ·—ý¹)]ï¡ßdƒÉkL~·æk[Xðõ…Ϋiy*š”wqÜ> x’(Õ1îþë³gL1n¼ šÞ­åhÖÖðè”GyfD1ª¨[ˆð ã¦�úV¬ÚÏÚ"1MáÝRXÉ«Áƒ‘ÁQ\÷‰<;c©¥jP¬70êVÍwv8{­Ó ¹þ>Nÿ�öv��µõX\ê¶—‘B©©GwÃê‰"Xïî°6tÃëÉ�¯ârWÓaDÕSý:Ìå£LqqÇßêzUÛíB NÑí/ü-wløÝ öÑHŽ™°k˜ñ=„z7Œ4««{;uMNê i)šGûDRù’®>`<² çåߎŒ�èµX\ê¶—‘B©©GwÃê‰"Xïî°6tÃëÉ�£âQað奿‡õh ˆ« jˆ0� ÀúV½Æ®.¢1\xwT–#ÕÊŸ¨ßÍpÞ ×#¿×ƒ¼:œRK¤ßF"ŸO¸‰c[b¼²<%‡�•\œ®{ cÃÖ:­¥äPªjQÝÇpúâH£VÇ»û¬Í0źò@(x‹[‘îü?ÿ�]Q6jjÀ4ió~êQóõçô«Á£[¥ÒAài"[±‹•KL3ŸŸ óu=}kYÑ™ñAÔ öW2_êo–{D[¨ÀŠB�”rÑ…ÁéòóZ"Ò¡ÒZ}{G¶Xõ+ k›‰®qóÞ?’ûbsü1 áØ��P—z„V7¶³ðÝý¥¼7­åüh }žq…PØïŸÀÕ¥R_Ï~ž o.–kc�’E=C6ì{æ±ôy&¶×ôÝ&i-.ü‹˜®–þÝH7[[¯õ™fËü™Îy¸¥jÞxKHº×mf[HÆO·ÎÝoC«&Cÿ�-'v`ÁÅ�Q’K "óE‹KðΟÔFŽÚÒ(„öi‡El^­‹-b¹‰|Â;¢  :ßr7ß6<÷ªzV“¦Xë6·š^kcδñ"[B±«$V³¦p ¾$9ô"âMLµ¤-%ƒÛZÝI}©[ßÌsÆöïøLj °Óµ2ÖÇÂw6–Îûhm!_p@NÐØ<síWã¶Ñ"Ó¥Ó£ð#¥ŒÌKeÓໄ®ìÀçÚ¹¿ÛÇgã;{y,m,/…—™4{´uaòJ˜þ6ÃnÏ?*õc»­øY%¹iô-–Z°‚á_PÎמI"uDvþ,;ÿ�g`��h_P†-N¶‹ÃwÑÚ®u¶[xÂí/@PØÇ¯Ö¯i³Øèм:_„.ìbvÜÉkg JÍÓ$+ šä|)bÄMBÌhï¥i‡KhÚÈJ¥V|Ãç`ÆÄd©ˆ“œœ‚pI©Œ6º”žº³´‡I}jî"¶|Û¥†P•À ™aŒ²t>h<nÅ�nK¨Æ¾$²‰|9~°½•îøE¼`9y`g$nÁÉ$œõ-ß&¥KM=:M=<ëe+‰$¶]:°èÅw`ž5SÃb$ñ}Í•¦Ÿj×ÐZ?*&,™Õ}ÈÒ(±Ò§Òtû}ƺžž¶V°ÙjK8X$;G”ÛXʤ}÷ó~ö~`„í$€V·ÔÖÓÇ–ÞÔ!†='ËH#†5Ú<ÞÀ6�­TÒl¾ÕöOÍoö°Vçʱ<áφùºž¾¦²| wKá¢NIð¥®Oâµn÷I·Óüujëk vú´ZÏ$•šFÇš^Q™@Œ låwà}ဠ|ðCâ­&ÊÏB¸Óm£°»TÈHãP^ÀS€2=:‘]}pú>‹i¥|D3éöñÙXÜéÓí"P‰¹d‡t¡ »p9òÁï]Å�QE�QE�cøkþAsØB÷ÿ�Je¬[}*âMCWÕt§XµHo0äˆîc‡Ê“Û$•nªI<‚Af•mw¥Aw«é©%ÄRê†öÅNL˜¹y‘zH�^Œ¨«áK»{øõ[»YVX%¿fG^ãËOËé@Z^§©ldXä†hÎÉíå’Æv°ürà‚$–þÂ×S²–Îò!, 2“pA‚#@"¸ÝCÂÖÚ׉uA-­$Ô­eˆEö¨„‘ʾRæ7”ö#•<Žàéé_…õhi°]@Þ]ͬ¶qo…ýŽàŽÁjÎöçG¸ƒKÕç3,­²Òý†§´rvc¿»`ñ[Õ‰?ƒ¼3qÃ'‡ô²Ž¥[ˆ=ˆÜV%—‡ômé4ÍWEÓfÎÛ;÷³çôŽS·‰=£ÿ�½Á�ÚÔ4»›m@ë8QtØV¬ÛRíGŸáßîž0WGNÔ­µ[_´[1 1GGR¯ŽªÊy =*Ÿü"žÿ� •ÿ�€qÿ�…dj¾Ò’tÔ´­K7Q.$µ{hÄW)ýÓÆÿ�ºÿ�Èè¡â ZH5 þÅ­Zö[Åã¼n?Š3Ü~#—Ãþ#]UæÓïaûµhÚ¬Øç³¡þ$=ˆú‡MѼ)ªÙ‹‹}M•’9,cW‰ÇTuÇ =?¡KÄ?´=ZÍÇO°°ÔmÛ̶¸ŽÕ6îþë®0èzh®tY‘Ô20!•†A†¹¥gð|‹¬Ïáæ8ŽF96ôV?óÇÐÿ�Còஆàðî¬ÓéÚ†4›-rÌuhm# ŽÒFqóF{ݾùðŸ†È øJ ÿ�Óœá@ÈȬ­cHkÖŠòÊakª[ƒäOŒ‚Xäć¸íÔ`€k›o è^y$¹Ñ´ùôG|ùhŒöDŸâ$dÅïÕ;åy^„xWÃl¡—AÒˆ# ‹8ùý(]X]M%†hM®¡lBÜڹɌž„âCÕXuö &­¤Á«Ú¬r3Å4Mæ[ÜDq$Œ§ô ðA ‚ ‹«øC½Ž9l´­6ÖúÝ ŸcBê².>e>GPA£LÒ¼3~ÒÛMáÍ*ßP·íÍi+žŒ§ȯ >‡�44Zwºm+UT‹T‰wƒÜÆ8ó#Ïá¹z©=ÁìÖþÐäŒm:ÚÂá<WVp¤RÄáVô9 ‘RiÚ´Âüé:¢,Z‚®èxŽéWOB?‰:®{‚ �Ø¢Š(�¢Š(�¢Š(�¢Š(�¦M W¼3Æ’Å"•tu ¬PAê)ôP#®Øjš‡µ;¥Ôl®-e†(wfkvd �IùÓ$u;—ý¡ÂË#éÒꩪÉàÛ—ÔPa.ÚÊ2ñŽvG޵ÔÑ@ÝÖ¬~ËxÑøwSYfŒ‡a`¹Û’'ŠÍ³[ ½7H—RðmÍÕÝ¥¼KÓÙBï�}ÒÍ•ägµvÔP­}—Q‚êëþ ¹53k$0Ý=¤&EÊ�}ÙžÞ´ö}êØÍ¨ø6æêîÕE,öPÈñ‘ƒò±lŽFx®¾Š�äuÛ©5 SŽjföæÎ[xäx£Èܤü â—P‹GÕ®–ëQð<·— ¬·6Hà@˜œW[E�qZú[êV:ŒÐøFìêÓÙKoÓZÃæ ÈT û²5cP‹GÕ®–ëQð<·— ¬·6Hà@˜œW[E�p¾#·³Õ-®®“Á·«4["»{8|ÕíÃîÜ8È«²E£Íª R_Êú€`âí¬ 2†ýÙÈÀç5ÖÑ@¥§é†D½°ð4ê?l‚v¹ŽÂ”2;á³’}kFH´yµAªKày_P ]µ„Pá߻9æºÚ(‡½ŠÖ(Yô¿][\Íym<ÒCi m IÑØ± ’p¤óVä‹G›T¤¾•õ�ÁÅÛX@e :û³‘Îk­¢€9ÞK©i7+†õ&¼04QHÐǹC, ïȪ’;í”é"ÑæÕ©/å}@0qvÖC‡~ìä`sšëh öÖÚý6çIðmͬ‰¨ ‹§‚ÎÙÇ— $•nNXu­xt{MEµoË ócs„ )-÷ŽàÙç'<óšëh -Ú+;(i~½´·‚ùî&K{X£0J›°­‚rËSÛÅ£ÚjGR¶ð<°ß’Ìn£°e%¾ñÞ999çœ×[E�rWwÒý§FžÔã‚Òí¤dHcPªa•8ý\RAm¨6¡¤Šõ‹¹ŽÂ–Îì°ló“Ÿ\×]E�q¬n±a.•á»+XÖs*[ZÅ,Á0p¬?/Z³:5® Ú…¿æ‚ù‹uŒ )-ÇxmÙ999ï]uÆ\H’ê–ª|+|ÚrÙÜÁ, mF2<'w`ƒ±³Vâ—O‡Lm2/]G`à†µK8DD¹MØý+¨¢€8Ô˜ZêÖcðµü}½•ÄLVñ".÷„€61„jšÒ-¬'°ƒÁEe?úët±c“ýå ƒø×YE�p¶�i~'Yôï ^ÙéË`aX­í¢C™w(`*ôk¤Ãö¿+Á3§Û;l`x=wüß6}묢€9J±µñ,7_†n¶s$̶±@$fxŠóÂ?^ŸuÔQ@Q@Q@ÿ�\ßö½ÿ�Ò™kM¶»Óu=sRÓ•¦„êö«Çï>D>d~’rr:7±Á©´-ZM8M¢‘Çc>¥v–×+œ+›™É?ºKgièsŽ7jhëõ¯û¿þ€”[ÃwöÚž§¬ÞYÊ%‚Ya*ÀcþY( ƒÈ ‚<‚4ßéÜkz$ë%Å´ó\µ´²ÛLÑ4‘y2¸F ò(#=9ÇSYÉm{¦ø§^Ôô¨ÌËçDnìÏRüéé ü›¡çjÜßÚêsøjòÎQ,_¹Vòí8 ƒÈ äyhnt[+;i.nµ­J#žYuUQêI8ŸâÛ§…5w{ÝJaœ¯²[·eb¨HÈ'‘‘SüF»´³øu⻞(Dš}ÄQ™ Ò4lFz’N�«~"º·½ð&¯uk<sÛ˦ÎñËWS`‚8"€¾…T(Ôõ|þŸ'øÕ;+=R–x¬|Iyu$ ¶dƒU.c>Œp~µÑʨкÈp…HcœqßžÕËh×þÖ<P·zN¥¦Ï%­“ZÅ ”Èíå–BK' ¨\ãoZ�Ž Ûß*Þêhée´‹{ i7<£æçœyc››Ö®^éúV›äý¿Ä7¶¾sùqyú£&öþêäò}…]¶ÿ�‘ÇRÿ�°}§þŒ¸¬ï¶•6q¦Þêº}…Åì}¥C¼©üJ©Íž>ï>œâ€0ücá»kKPŠ÷RŸÚ–ö¢sxûÖ) ç8"º¿øFâÿ� ž¯ÿ�Òax’âêïÃþ¹½·û5ÜÚ®Ÿ$ðÏ7, /àr+³•ãŽy™V%R]œàÜœö  84;ë6ßYÔn b˺=AÝI« ƒŽ ý fø[ÃÐ?†4ö[íN%1 G㪨Ï@3Àö©þêV—‡îžÂî ”]Rü“ °êW\ã¦U•‡±´|%ÿ�"¦›ÿ�\Gó4J+=}F]:^I}̖ɪ“"u ‘Tïü9mÿ� >¿mÔŒçÎûl›Ô�¿(9û§9#¾¥H—¾Ô<Q¦ÙÙêZi¹Ó%™’n§iY]J‚[�3³drØ=jßÿ�Èףןå�U¾Ó4Í.ÔÝjýý¥¸ n56=I³üKáÛCá›ÍA5 JYlí仵޻l‘P•u9ÿ�õ‚GC[ž!»Ó­4òoõ+9¤Ìp\^»>PÄqž+ÜLŸî š%ìú]żaQ<Q«¤n‰ 2*¶#u�v´QE�QE�QE�QE�QE�QE�U{Ëë=>5íÔÑ3„4±8'¹=Gý¯¦¹q¨Úmµ.àù눛•¹ùO#ƒë@(ªÑêSY=ìwp=ªoÝ:È .ÂCeº AôÁ©!º·¸y’ ã• “Ê”#c|ÚØèpÀãЊ�–Š*k«{Ø|ëYãž-Ì»âpË•%Xdw}Á  ¨¢¢[˜êKdš6¸‰Uäˆ0,ŠÙÚHêÚØõÁô  h¢™,±ÛÂóM"GjYÝØU’Iè(ôQE�QE�QPÝ][ØÚËuw<p[Ä¥¤–W ¨rO�PÔQE�T6×V÷°ùÖ³Ç<[™wÄá—*J°Èî ûƒKss•¬·7SG¼J^Id`ªŠ:’O�P´UkýFÇJµ7Zí½º ·¬h éË+>xjÖ8ãÄ:LIpžd-%ìj%\ãrå¹dzPÍŸy¯hÚu¤WwÚµ…­´ßꦞåýÖ'ð«fæÜ@“™ãÈT$›ÆÖÜ@\ù$ë‘@ÑE�QLycãG‘¥m±†` ¶ Àõ8ý§ÐEPEPEPEP‡mæƒwmsM··É$n2¬¦æ\‚+ ×máÝCQÓïZGÓdÔLVײ>âµ�ŠR}x ç©àóÚÖw2x{Qm>ÿ�oد.¤’Îì $ŽÎa“Ñ·1Úz7N7I¤ÛAxºýµÌI4ßÈ’Fã*ÊcL‚(m+þF{þ»Cÿ�¢–³5½­õý"óK-..oØÊ²Fd…ßìÓ|å)ÝŒ‚3ß8§¤Ýÿ�Â5â-RÎí¦“My¡Š+Ù_q…Œkµ%=ps€ç¾rA=³ÿ�!Oÿ�ØAÿ�ôšz�Coâ02u]+ÿ�²ñúÇñÖî<ªÜ&±¤Ïk&Ÿ3††Áñ"ÉÊ·žG#¡æµüA=êG6úMÞ¡o+´-«ÂhÆù² ÃwÁ<1ÎG9¤Jó| €½¼ððP²%€·Àa´žQžpy�ñ@/Ù¼Gÿ�A]+ÿ�²ñú¢5 öÕ›J_øxêJ»šÐZ7œ3’ŸhÎ0Aé]-qVW6«âèÃúãj\\Oý§f· <vß+¶ðFLmæ]¹Á xâ€,[ÛøƒþÍD OLó>Ãk–þΓy—óø={÷1ÎŒÿ�Û–Ê­q­èÑ+0E2iî ±ègëRÛÈã©Ø>Óÿ�F\W%ã[Ë«Iw¢Ö×piªÚE¹Du¼¸.þd 0',#åÃ�Äç  ¼kº ÐüíGNpu«@»,pÛø'3n3ê+§û7ˆÿ�è+¥à¶Oþ?Y~:ÿ�Q ØrÏÿ�C­ýR{»}2ylm^êäÝÄ…A$œdneSÎ ãB5×fyR-kGv‰¶HOrQ°÷ü08ô#Ö²ü-o¯Ÿ iæ-OLTò†iò1úùÃùS< ,§RñD/¥ÞÙ©#“tð³6¶ùËvËn'§Î9Î@Ùð—üŠšoýqÌÐ;BþÓQƒN¹ñ?‡¡¾œfi-er>U7=OJ«}o¯ÿ�ÂO¤ÔôÂæ+¤iò�8LäyÜþb¡ÔîmañJI¢k.¬÷G{¥¥Âʦ"U]š>L{cËnä�sšÜ¿ÿ�‘¯Fÿ�®7?Ê:�/EI&¯¤¢(,ÌÚt€�:’|úÉñësx;W˜júTÖía3f+ù×Ënç‘øàÔ¾;Útí5n/ZËN7éöë‘·FÊ–Ü ãÍgp#Ôb ûeåÿ�½NâúO:cex«>Íž|kæ,rí è¸ãæ ÆŠ( Š( Š( Š( Š( Š(  ßi+®hÚc9ŒÜDU$7ê¬=Ã� ä4=3_—\·¾Ôm|¨µˆ"»ÔbãÓÁ€Š=Øóÿ�\›¥w7÷Ði¶R]Üù¾TxÝåBò·' €±äö“ÿ� žƒö›HäŒ×qÁ,.¶Ò²œ•ˆ— µC@ÉñÖ€<ú=S^³Ó5t²O…º‡WžÚì‰Wȸk’öÅO”.®ä†$téZóêZ»Ûxš}-JÆKV EÔº<®ñÀÖ°¡‘!uB6FH‘Ó=Ÿ‹­õOÛéZ{™mZÊây%kiŽHQLr0 ëó¾Jç9õºþ+Ñ£ÔM‹\Éæù†âÚSË1(]…ûmÎìñŒÐ&°šÄÞ�³f¿Ô^þ;«WšâÖÄG<‘‹„ÞþAƒ³-·¹Ê×5§êž#²Žñ4ȵ‚·GS¸Ž!Õ-ÜÞo‰—r)fhžWÚÍÉ ¼iqãïZØC{-äÿ�gš´FËe;ù›Bæ_˜Œdã9«Sø·Fµ’å.'ž¶´7²‰-&\B¡K0Êó´:ä •ÈÈGE¸×£ðUÜÒ]K«ê±Ç+[Is§›‚å¢'+ó|¹!~Ï>_TÒõ}jW½×ï%»ÓìÔÒ†èÈ–}êÂWx8*Ì÷ÆGYŠ4ûÛ‹(í&—÷×fË-¬‘°‘ai¶ûJ 0$GN ˆ¯|sáý6+éoî®lã²Çœ÷63ļ’£idòAÆÜçÈÛjzø‘ï®ßÄ0ÜÜèÖ1ºÛé…–+¡$‚r…±ƒŽÄ! 0 W ¹ÔõyþÏzb¾M{û,‚‘ZºÊ.öc ›rG™Ü cœãšKÿ�ˆ:T–ºsè·kx÷—vq+-´¯I¦D;œ ±¶ÒÄ ät5ÑM©$:ݾžÌCKk5ÀQmÁ5$0<cÌ`“¸`ŒrÇZëúÌþ0Õµ³¥Ë©Þm!ãm a!c`Dÿ�/-ÀÎGzÓÕµ}NÛÆúe½ºjgNÈKÅK$Y$ÚáÕ ÈFÌ�$c,5ôOé^"Wm2âIBGÇÌ·’,Ç&v8Þ£r­‚28>•>£¬ØéSÚEy$‘µÜ¢ˆ…Ùw– 2‚,Êâ2HÉx‹YÖìüW"Ù¾±ö(>Áˆ`ÒÌÑM¾vq?,[[åaƒøŠË»Öüa“s< ¬>¨-g76gJ+i|¶òþÎâ?Þ7bõ“*K¸®÷P×ôí2ê+[‰&k‰áÒLʹÀf§j猶Qoxyw{Ù8b’o5­eȈ2ííÛ �và@<=©ø‚{«Ëo&kÛhoB‹½R7²—Èhâ9E‡3 |¿uryÍbÞ]ë€<FoÆ·.¡6™4iÇLÄqNêT$%cÝ"äãpgä‘]Gü&šSÜXEÞJnïc™Z)FOJݧ$cw݈¥ñÖ‰acöBòEýåÀ+œ®È±Jѱe@ä#ic€O<g«âs´ßkíg¤Öí1ÒÈöòZe$ÛäòRà`0ùò9ª±øƒÅ*tÙn\ž–×0&ŽY%•ä"ïqdm …#§¥v1xÏB’eˆÜÏ ™ä·?h³š’G™ƒ@÷gp-€Fqœjxß@ybˆÜܤ’ËQ¬¶3¡c#mF|…ˆþîX ò2Ãéú·ˆ¡¶ÔÂ-b×óYÀtY6û™$ß!‘Ýå¸dPT1I'Š]N/ê~ Öl®u}Rå—1‚hôAo%üŒ4O+2�¨ÀFm仓ÝZøÇF¾–Ú+Y/&{‚BªØOû¼HÑ3)û¿|øû¦ ×|Augâ}C²]’^¬“I;ØËpŠˆÈ¸ù I¼NŒ˜Pâ[»6¶ÒçšßUÿ�]çÛÏgc$Ò[¾Âx‚�«2œ¯ìyPjfÓWÐïot=BÞ!¦ßÆñÚésH ¼ð˜ò¨­°ºÆÏ´Ÿ—8>ýñ¶†È9o%s#EäǧÎÒP¬Ù@›”"ĆóQØø®&ñ&©¢Þ±0Þù‚;iÈ¿fŽ}¥ùMÿ�4œd8 ZâÓ¥–y4}ZÇÏ–â}:4ÖºH¡u^c@v‰?3.7c#ºMjúúÇÁúUÌv7–·B{-¥”/;DždfdÄ`’¢1 Î;qÉ-·ôF²±–{Ö?h·†g™-%F$PÊd`bÈ €íÐõ=jöâ}'UÔd°´žV¹Íʽ´±ƒå¿—&Öe¶±�àœdzÐÜÞÜ}´^Ýj×2)L½õˆ¶@ß6Dk±I òã•÷8¢Òx¶=Mí„—[‹‰mDâ(€Û E8ùzD3ž•ÒëÍŽƒbou$ŠÙNÒ“o’BB€ ,xäÒjšÕ†Ž±}²IwÊHŽ( ’iHHÔ±Œœ`gš�ãôíkVž}âs®ºË­\Á4rérF«lâ`"Rî¶%›ŒƒÓŒB<S§]yÖ·ZìÓÆú´a%±F ¹Câ1¸·H¿0” ` Jí4¯AuâCHºr“-àŠË²¨‘ ´sᘂ¡þi>RAÂôâœ|}áÕŽ'k«¥«2ap Û8—3¸JÊ¥~ðÜ8Á€0>ßâ(tmµjâI¯d[›û}�Å/!r „£ì>g– •\óÁÕÍBãXÕ>é7ŽÚ¦¨ZÂ[ÁohDêDÑùߺd'±´çhàƒƒ£¨xÂÒtMB ˜—K¼¼šÚâKˆž6@ÎÄa°UƒÃ´‚3Ôc4¶¼+¨ê¦A«*Þ¤&g†xd…‘�É'zŒ9Áçã£ëZòÞ[\j ª¶GÕm%Ó Ãj1gu@ÒüÁT�Ò <Šî-. ¿²‚òÙüËyãYb|¹XdzÀÑ|KˆõÝVÂ2iðYÛH¾}¤³™LÁ¹ Æ„0ry=º\``PEPEP7v–÷ö’Ú]“[Ê¥$ÆC\Θ&ðôÖz„­.{sºÖùرG!TE)=Î×þ#Áù±»¬¨®m ¼µ–Úæ$š T¤‘¸Ê²ž Š�DZ‚+gÄPOK ’D®U” ‚QX—±êz±¡Y%µÆ§¦‹×kVI΋ýaå1v]À•lç�ƒÈ­iÑKáNíu Þm.öhÖÚòF,СV9‰ü•ùÏŽH'_Yÿ�§‡ÿ�ì ÿ�úM=�Û7ßô-j¿÷ò×ÿ�VO‰õk×ðž²áÝN5kÁv’Û û¶äâbqôÑj6·–¾MµüÖ.X<(Œàz.õe玪xÏ~G.Íw/ßMu©O¨+ÁyäM:F­å*²¯úµU í,:5�nlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÕ¯\/‚uÍOVÔäKÝMåxàcui4(%Þµ¹UHH7ßÃÎr�Û}Zôx³QøGu2ÆÆÔó-²1%Ç?뱃Ÿ^ÇÛ:ßÛ7ßô-j¿÷ò×ÿ�Qmÿ�#Ž¥ÿ�`ûOýqY4Ön4Ù¬­ÓVþȆxní¦4`f@ž\?8#çÜçÔìÀ š�Ïñ¦©y$ýQ‹nµhÃ|–çq÷F%<Ÿ|R+§þÙ¾ÿ�¡kUÿ�¿–¿üz¹­gQ“Xð—‚õ9£Ëy¨é·ƒ¢—!ˆýkµ¼Šií$ŠÞå­¥q2*³'¸ Î:dž ô  ÿ�í›ïúµ_ûùkÿ�Ç«ÂÚµêxcOUðö§  2ÉmƒÏ¼ Ö‡‡ùnõe¸Ö.µ+xgX!k˜áR ¨.A‰–ÛÈà¡©¼%ÿ�"¦›ÿ�\Gó4�ïí›ïúµ_ûùkÿ�Ç«ûV½>'Òø{SEq…2[e¸NŸ½ÇõSJ×5;¯M§Í©ºùWS«ÙÉ $AØ`.æðXãçà`g¡¿ÿ�‘¯Fÿ�®7?Ê:�wöÍ÷ý Z¯ýüµÿ�ãÕ•â}ZöO kÞÔãV±˜y-° ¡äâRp=5oÅÚ¤š]•‘ßÙÖ÷kÍþÔ?eBŽC|à¨Ë*&X7ÖU¾­q­ü$Ôo®¤Yf6w±4ª»D¾Y’0øí¸ l{ÐmEPEPEPEPEPEP_ˆmm®´yEæ§&›oY$¹I€s†. í=EpãGð…®o8ñûEbVÚÞÞC}gå•´“̉Œ|ìfç’OÍv>*kQ¢¼µ½¸¦‹"Ê,±°pÈá�$íeSÐôèGËI¨È³h—³é:ˆ†jiLñiSy“EöISÎx‘ !/"¯ Ø ŵ¯‡´¸4­j/Ç™§[=•»µÌ?g1>Ì!r9Ç”˜;³òòNNPøwI¼³šþ×ÄI¤M#_ªÁ<-l’îó<õb„ðãÌÁb›†JšÃqlº½Æªt}fÂÆæâ)-ÛOw•.Q$;BªÌªé O™sògŒƒ[7wZŠ|/Ô.mtû›-Gì—Ö [vy™aÆJ–;X©ÎÝĆ€1u\Ç•¤ÚAªÞÙYX}’;¤šÕY”°ýÔÙÆ0¨ƒåÎáÀòN½Ï€µ’iõMoP[ÛË7µºû1‹Ë * •#ß`„ #$‘ŽÉχµ »Ý~ðËq­I #<qÝißf‚%,6�Z5bÛO÷›£d!ÂÔZÇŠ,õ©Í¢ÏwgÑ\"*F‘81´9Ûœ«þ÷v~ïš�ü!ÐZêQjsø‹TóPKÓæµ¸G˜Ä-À?º2˜xÁÁ©%ðg4’Ëâa˜În"?èàÁ.FH‹' ”÷ ¤ŒVú¾·z—›q¯\5Ž­g {4§h3Ô$YqòÜ”‘‚=PšÚ¬^ ¶ñ=Üö·:Ô5µ–VØ4 X¿0Œü†`#n~QÏÊß=�usx>Þ[Kˆ§¨£\]Cy4Á£gyâd*ÿ�2?ÕF0Ü.�rûBûf»m«.¥{o5½´ÖÉ>^²m,Nä'9D#œe$2ÛRñL>–kSVº¼–úÕVDðù‚[tiTL¢2xTÜwíÆq†l֓Ϭêß uÔÝ©j¤WÐÀòZ˜'˜+?’BQ–O/•QÉ8ÁèfÓÁ3hÖnº?ˆ5î~Åoa — ¬qBħW$qî¨8a¥¯x^-~âÚYµëo³²º%¹nõut|:7̬ ú„q\݆©â'¿·ãY’at¨m®4°–òZnÎiDk¶_/ç+¸|ÿ�/–oêšâÝøTêLšŽ&D’ÚÙ³Mµ‰ÑˆÁ¡Ç¥�Zºðú\k1ê‘êÖ³ù+â@·©fUpTãßvŸ˜óXw^Òn-Fƒ.·¨ ¼¢ÎË΋6ÑòœÇ”Ü@I eËmÆ …‰<PÒXÏ0×#h­ôßµ[&ŒÆ9&iJÞ|¢p©†X ô$qZš*k-ãÿ�W—P–[.í&…¬¶Áe3InÞZº à„` ±Î̃ób€6!ðlQ^ý±µN[·¦¡½Ì?ëµ£;HëÆA¹}cÀ÷iv¶¶ë¬jγ¿Ú[Eù§—Ì–)2¼¢Ã8³½�Uû­[Ä0ê³³I«,±^06Qiže©³ þµe’dòþ`»É/òì5‡¨ëþ-OèÒG}ªÁ{u§&ÿ�‰b¬‘]ŠVExp°†Þ¼zÃ�€uÍàx5ûN±w<³\5å¬%E»ÌmM´…A]áZ2F7v`ç+uàë7·P×5)¥Cv·WDßG"ù’dŽ/¾¶�æ¨Øø‚ùüRBÏ«]hobûgþÏÞ X™$ã‹ L§9+� pˆ¼M™ ¿ÿ�„†yÊiW£H¥$3¶Fq ¨ŒO'ô ÎÛÂÚKlÑk: Žä¸h·Å‰]åi[qò÷�YŽB•ÈàäTú¾•lu8µûbæÅ,m&…‚¼Iö—f,¤ŽQC mùäu_ÄêI¥ê^ V3s ™¬A°ÒF)朕 »œíŽO<G‰õ?jR_j ÿ�Y ½¾˜ªú„Íæ)GŒ«˜ÁQ�ÚÇÌ=6à�mEàkkòSĺÄFê`íûËuiå…$+!¶F9\´A,M‰<’j²j+¯jÑÌ÷í~|©)‡ÈÌGÊÏLœžiþ!Õ¦¶¹ðíŲj†Úk—7"ÚÊYˆÛÉè•ý዆�ƒŸCX^ñ>¥gi5ljæÕÚÓ-.e–ëIxÄ3±q: ‘.UvyÎcœ€ ;/‡v6:oölz¶ªÖ2B°][³Å¶íj‚?vª™B¤ªŒää™-¼tù¾×i®ê†æ8îÄ^aƒhk‡¹ÿ�Sÿ�=°àãàÃâËŸ¦½§C¥ÞÜYYlÞÍ”o~Ñ nbs‘å c HžF+ž:׊†ÝV Z]öëì’iÑ¢Ãu ò8KGûÄ;ÙrKäA g¬x\x‡C·ÓuMJìí‹Ë¹{p‘‹œ¦ÖÜ¥X�rHÆ= G©XØMubfñöº¦ž«ÚXVW°P®¥ ~ñ£\�£%~\W7ªk¾$6²úwöã\µû6–ÇKÁ1ýcu1pžiuÜÀ7,:Ó<G~e×ï'‹MÖ$ŠTÑdFM*åÞ¼ÒôN £©#¯QŒ‚(¤‹ÁQE¬.¥ýµª³Cû@Dí O3Éò1þ¯q_+åëžùÏ5ZëáíÕÒÎ5V.æK˜’6‡lm%Â\°Œœy±«rIíœqO²»ñ(Õ5K ©tö23B×.°Gr’•hÁtŠ˜ÔH§ É êHC}¨§‰Ê^Í«ˆÄÞÖÎ̽¬¹Ëbo+t‡vq† IQåõ4�Ñà{;Ý:Á_Ô¥¶†îmF'SnÂWŸqbO•‚¿½“ÇúÃÏ ‰ì<ogcwaq¬ê×öWk*ÏÔ±ís *ìJ"±$1ïŒóŒóXº³©Ïÿ�ȼºñ,35œúÑÛÊ’ll`Î`ÊÙfbê0>öD}çn/dK½Jö8ç¹Ùp‰¢„þÎA»T¸O¸…]ÛX�ÅŽ1Š�ìtÍ:ØêÓkVú¬÷5ºÙH7DÑŸ&I9ùTÁž@yÇPFG5Íx)íü9-µÑºiâÔ/wÉunayw\Èë&6¨!••²£àtÀéh�¢Š(�¢Š(�¢Š(9àŠæ ž$–£Æë•e<Aê+“¸´¾Ðït¤s=æ‘mz^HäžxÁ2ì`ªK(, 7^@9ÆOaE�bËâaxÄz¼e”¨tÒ®w.{ŒÇÖ²uMBÅ|{¤iöz«§½­¼Ùw#?»*£&<zWaE�dÂKcÿ�<5_üÝñºÀÑ-ômæ)¢—ÄW onÖ¶‘\i“•µ„•%‚GÈœ±c…5ÛQ@¬íªø¢þàÚê¾T–VÈ­ý•sË+ÎHÇ—þÒþu>£«iú•£ÚJºÌpH Ê#Ò®•Owyy�Œç>„WGE�p¾(¿‚ö×EƒOÓõ2¶º¥¬Ì‹¥\(H‘²HÌc€;º?øIl熫ÿ�‚›¯þ7ZôP=§êÚf›f¶ÑE¬:‡w.úUÉfgbìN"%˜š«áÝjÞÇÃÖV·6šªM{]²®NáutPko£Zë ~²ø‰ãŽæ[¸lßLœÃ Ò†:þçvN÷à±yÀjó\¶“Äz\ëkª˜¢Špíý•sÁ;1ÿ�,ýu”Pοi< ÛàÉ“s¸lÄ@?¬½N÷OOßée†¨3c,Eý—uË d˜ú’y$õ9&»(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(¦£©ZéVËqxì‘4©+9.ìFË>¤V#üBð¤Z¥Æ›.³W–ðùóC":”P2s‘÷€<¯Þ•¥¯èƒ_Óã´kû»!ÄWK_/qhØ:½`2«tþÛ âkÞs¥êâÂK딽,ÇMB#Üä w§ÞÁf Í·w¡ä�]´ñŽ™©ÞÚÛÙIr Ý›GØMï/.ÏÞÁÚ»³ƒÇ¦Mãï Û%½˜+¸HœYÎRv,˜&%äòY„o¾Ñ ÍåÖ£i­è¾‚9ž¸–RùÌ©_,„P¬äavÚ¹øses…±Öut´Ó®c¹°·W„¥«FrIŒ’A¸¶«oâýîkXm¤»šKƒòªXÌ|¿£>gÉû¯~}¼©ô«¯ˆôÍUŠöiD…<°ÛI1DÎ7¸[bç?3`pyⳬ¼¶2Âɯjî‘ÜÉrbf„+³Êe`JÆÌÙ FAÁÈâ®ê^KýDjjWú}ËB •í$…`êØÁfÁ\0Üy  '‰¦×¼S©ÚZ²6Çj6Rþýš4}ë1!�ùÆ‘†Sbñ¥ß‰ÒÆÒF–Å4û›©¥û$£&)"Pcr6ȸwÎÍÜÏ­ïøbÛÃr^ +»¦·¸dam.Ã;#XÔ&6F‹É?twÉ5dð]±ŠÊ+}SR´ŽÊÊ[ Ù ìã% ãÊLÿ�9ÉÈöž/Ó/õ]:ÆÐ\Ëöøn%Ž_³Hª¦êùQ°†$ØÁ�YAÐÒµ›n¥°’GXe0È$…âd}¡°UÀ?u”Ž9Yw‚­´Ém¤ƒTÔsn.U1¶á•äF?CŒ`ƒÀù~ZŸEð¦ml×W:„üÜÇz±2ÈÛd¨¹ÜŠ ƒÁÆq’I�߬[¿èš=Ȱšs”_Ë·‘¢ƒ?tHê¥#ÈÆ7Æ*ko h6Wך&›ö¨RÞH­QZ%‰@Ê‚]ÉûÇÔÕ=CÂ6º…Ýì}} ¾ �¿³‰Óʺ„ù²¥†T;r�Í�hZkš}íµÍÌ30·¶.³K,O)Fe™€iF1Ía_øÞÖt©­EËYÏzm®7é·aSo,Šb] ·1¯*¬?hiþ¶³ðõö‰syw¨ZÞ´í1º(‰‰2�cU,Îzdn=°y<!$ÇNi|I­<¶´ÑHÍbÆ6ŒnýÖÜg;ŽIÀÀÉãMGRîVó ¨F“asŸ!·mÆÖ ÙÀ<Îx›Uðö£i­j6MpúƧ\º‡PE2Û–‚‹*«’ÉÁozÕƒáý•¼60¦©©ùvZ@h¿x¶Ò™`Ýû¾ªIc#®O5^†ö×Ó@þ Ö‚MÜ/ƒoÊ]H$˜©þ&‡lPŠøÇÃöámmZæEŒ˜£K=>y„À; !R« hÈŠé+–_2Äb&×E·ìV·P§m¸‹äÏ\®9Û·&ºH¡häÚy$>åWÛˆÆÐ6®�8àžrrÇœ`� h¢Š�)¯J»dEuÈ8a‘rà@4ê(�ªèÖSkk.“è!h#aq @ŒrÃ`m‡$ ’3ò¯ Åú(�¢Š(¦¦ZéVí¢:£9‘·ÊÒÇ݉=€<��â­ÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Performac.jpg������������������������������������������0000664�0000000�0000000�00000017502�15030617045�0023517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��€"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +'Pñ.“¦jQé×wL—rDfX–rPgå½3þ­#þ{\à$ßüM�lÑXßð•ióÚãÿ�&ÿ�âjk/iš…çÙ-îÜ2Þ'Œ•Fà3ŒŽž´§EPEdê%ÒtÍJ=:îé’îHŒËÂîJŒü ÷¦ÂU¤Ïkü›ÿ�‰  š+þ­#þ{\à$ßüMMeâ 3P¼û%½Ã‚†AÄñ’ €HÜq‘ÓÖ€4袊�(¬CĺN™©G§]Ý2]É™bX]É@qŸ”ôÏøJ´ùíqÿ�€“ñ4³EcÂU¤Ïkü›ÿ�‰©¬¼A¦jŸd·¸cpPÈ#xž2T €Î2:zÐQ@“¨x—IÓ5(ô뻦K¹"3,K ¹(3òƒÞ™ÿ� V‘ÿ�=®?ðoþ&€6h¬oøJ´ùíqÿ�€“ñ55—ˆ4ÍBóì–÷ n oÆJ‚#pÆGOZ�Ó¢Š(�¢²ué:f¥wtÉw$Fe‰aw%Æ~P{Ó?á*Ò?çµÇþMÿ�ÄÐÍÿ� V‘ÿ�=®?ðoþ&¦²ñ™¨^}’ÞáÁC âxÉP@$n8Èéë@tQE�VN¡â]'LÔ£Ó®î™.äˆÌ±,.ä 8ÏÊzgü%ZGüö¸ÿ�ÀI¿øš�Ù¢±¿á*Ò?çµÇþMÿ�ÄÔÖ^ Ó5 ϲ[Ü1¸(d¼O*Àg=hNŠ( ŠÉÔ<K¤éš”zuÝÓ%Ü‘–%…Ü”ùAïLÿ�„«Hÿ�ž×ø 7ÿ�@4V7ü%ZGüö¸ÿ�ÀI¿øššËÄf¡yöK{†7 ‚7‰ã%A�‘¸ ã#§­�iÑE�QE�QE�QE�QEEsq¥¬×3¾ÈaF’FÆv¨'j�–ŠÁƒÆZÕ¼sÁu4‘H¡‘ÖÒR‡îÔ¿ð•ióÚãÿ�&ÿ�âhfŠÅ>+ÑÀ$Ï>ý:Mÿ�ÄÖ¥­Ô¶‘][J²Á2×£)ä�šŠ( Š( Š( Š( Š( Š( KQÓ¡Ô¼|"”º:iAâš3‡‰Ä¼2Ÿ^O±‚$VΨÍöƒ¦êAýr²Œ%ÊãOÌn^ªOpA4æ£ÿ�Ü#ÿ�kUÏÛ¤ºäܤö±=ż«ÃE"©!ÿ� ‚AÈ$PµTÔtèu+q¥ÑÑ·Å4gŽŒ§×“ìA ‚ ¥ÙëWšE•Ôž"Ÿ|Ð$‹Xz•ÿ�½[þÊÕÿ�èc¸ÿ�ÀXøš�—NÔfûAÓu ‰~‹¹YFåñ§æ7/U'¸ Jä¼A¢jM¢ÜÜ>¿9–Ò6¸……´A‘ÕI¹‡ÔŠè4yåºÑ,.'móKm»cb “­�súŽ¥ãá¥ÑÓJÑœ<N%á”úò}ˆ$A"¶tíFo´7R—軕”a.P~crõR{‚ £ÿ�5þáûZ®x–Ý%Ð/&å'µ‰î-å^)I ùA"€5ª¦£§C©[ˆ¥.޾)£8xœte>¼Ÿb H¬m.ÏZ¼Ò,®¤ñûæ$lZÃÔ¨'ø}êßöV¯ÿ�CÇþÃÿ�Äкv£7Ú›©Kô]ÊÊ0—(??1¹z©=ÁêW%â Rmæáõù̶‘µÄ,-¢ ŽªH …Èô> x$WA£Ï-Ö‰aq;oš[hÝÛËœ}hŸÔtèu/¥.ŽšPx¦Œáâq/ §×“ìA ‚ ³§j3} éºD¿Eܬ£ rƒøÓ󗪓ÜMù¨ÿ�÷ÿ�ÚÕsĶé.y7)=¬Oqo*ðÑHªH`È r ­U5:JÜE)ttmñMÃÄã£)õäûH ‚EcivzÕæ‘eu'ˆ§ß4 #bÖ¥A?ÃïVÿ�²µúî?ðþ&€%Óµ¾ÐtÝH"_¢îVQ„¹AüiùËÕIî'R¹/hš“h·7¯Îe´®!amduRA.G¡õƒÁ"º yn´K ‰Û|ÒÛFîØÆX¨$ãë@þ£§C©xøE)ttÒƒÅ4g‰xe>¼Ÿb H­;Q›íMÔ‚%ú.åeK”ÆŸ˜Ü½Tžà‚hÿ�ÍGÿ�¸GþÖ«ž%·It ɹIíb{‹yW†ŠERCþAƒH  j©¨éÐêVâ)K££oŠhÎ'O¯'Ø‚A+K³Ö¯4‹+©<E>ù I°õ* þz·ý•«ÿ�ÐÇqÿ�€°ÿ�ñ4.¨Íöƒ¦êAýr²Œ%ÊãOÌn^ªOpA:•ÉxƒDÔ›E¹¸}~s-¤mq hƒ#ª’!r=¨$ ÐhóËu¢X\NÛæ–Ú7vÆ2ÅA'Z�çõ:KÇÂ)K£¦”)£8xœKÃ)õäûH ‚EléÚŒßh:n¤/Ñw+(Â\ þ4üÆåê¤÷Gþj?ýÂ?öµ\ñ-ºK ^MÊOkÜ[ʼ4R*’ò$‚E�kUMGN‡R·J]|SFpñ8èÊ}y>Ä ‘XÚ]žµy¤Y]Iâ)÷ÍHص‡©POðûÕ¿ì­_þ†;ü‡ÿ�‰  tíFo´7R—軕”a.P~crõR{‚ Ô®KÄ&¤Ú-ÍÃëó™m#kˆX[DTA ‘è}A ðH®ƒGž[­Ââvß4¶Ñ»¶1–* 8úÐ?¨éÐê^>J]4 ñMÃÄâ^O¯'Ø‚A+gNÔfûAÓu ‰~‹¹YFåñ§æ7/U'¸ š?óQÿ�îÿ�µªç‰mÒ]ònR{XžâÞUᢑTÀÿ�A ä(Zªj:t:•¸ŠRèèÛâš3‡‰ÇFSëÉö AŠÆÒìõ«Í"ÊêOO¾hFŬ=J‚‡Þ­ÿ�ejÿ�ô1Üà,?üM�K§j3} éºD¿Eܬ£ rƒøÓ󗪓ÜN¥r^ Ñ5&Ñnn_œËi\BÂÚ È꤂\Cê ‚Et<òÝh–¶ù¥¶Ý±Œ±PIÇÖ€9ýGN‡RñðŠRè饊hÎ'ðÊ}y>Ä ‘[:v£7Ú›©Kô]ÊÊ0—(??1¹z©=ÁÑÿ�šÿ�pý­W<Kn’è“r“ÚÄ÷ò¯ Ф†ü‚  ‘@ÕSQÓ¡Ô­ÄR—GFßÑœ<N:2Ÿ^O±‚$V6—g­^iWRxŠ}ó@’6-aêTü>õoû+Wÿ�¡Žãÿ�aÿ�âh];Q›íMÔ‚%ú.åeK”ÆŸ˜Ü½Tžà‚u+’ñ‰©6‹spúüæ[HÚâÑGU$BäzPH<+ Ñç–ëD°¸·Í-´níŒeŠ‚N>´vŠ( Š( Š( ³µÿ�ùõOúô—ÿ�@5£YÚÿ�ü‹z§ýzKÿ� �ÄÒ-æÑtM>þÆ'–Î[hžîÑJ’ƒ2Æ={²½Ô|Ù ÓÛÜCwoż©,2(dt9 B SÐ?ä[Òÿ�ëÒ/ý�V–·‘øÚ]?MÔd°µšËí’D‘#©”É´° Üõ pO=I$®¬K‹y´K‰/ì"yl¤b÷vqŒ•'¬±^ì£ïu6C;û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�Ô·¸†îÞ;‹yRXdPÈèr„–¹-ÚóIñ­ÎžÚƒÜZÜYý±£h‘ÊdÚXmêGBrz’k­ Š( Š( Š( Š( Š( mœ/Ä”Và¾vä}ìJ3¦GçZzÿ�ü‹z§ýzKÿ� ›QÓ¡Ô­ÄR—GFßÑœ<N:2Ÿ^O±‚$V-ö£7ö&«¦êAý,¦eeK”~tüÆåê¤÷© È·¥ÿ�פ_ú�­ÎÐ?ä[Òÿ�ëÒ/ý�V�gkÿ�ò-êŸõé/þ€hÐ?ä[Òÿ�ëÒ/ý�Q¯ÿ�È·ªפ¿ú£@ÿ�‘oKÿ�¯H¿ô@Œá~$¢·ôƒ·#ïbQœ}2?:Ó×ÿ�ä[Õ?ëÒ_ý�ÔÚŽ¥n"”º:6ø¦ŒáâqÑ”úò}ˆ$A"±oµ¿±5]7R—ée3+(Â\ Có§æ7/U'¸ MþE½/þ½"ÿ�ÐhÖvÿ�"Þ—ÿ�^‘è´h;_ÿ�‘oTÿ�¯IôFÿ�"Þ—ÿ�^‘èþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  �Ìg ñ%¸/¤¹{Œãé‘ùÖž¿ÿ�"Þ©ÿ�^’ÿ�è¦Ôtèu+q¥ÑÑ·Å4gŽŒ§×“ìA ‚ ‹}¨Íý‰ªéºD¿K)™YFå?1¹z©=Á€jhò-éõéþ€+F³´ùô¿úô‹ÿ�@£@Úÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@kÿ�ò-êŸõé/þ€hÐ?ä[Òÿ�ëÒ/ý�Pc8_‰(­Á} íÈûØ”gLδõÿ�ùõOúô—ÿ�@56£§C©[ˆ¥.޾)£8xœte>¼Ÿb H¬[íFoìMWMÔ‚%úYLÊÊ0—(üéùËÕIî$S@ÿ�‘oKÿ�¯H¿ôZ5 È·¥ÿ�פ_ú�­�Î×ÿ�ä[Õ?ëÒ_ý�Ñ È·¥ÿ�פ_ú�£_ÿ�‘oTÿ�¯IôFÿ�"Þ—ÿ�^‘è€3ÂüIEn énGÞÄ£8úd~u§¯ÿ�È·ªפ¿ú©µ:JÜE)ttmñMÃÄã£)õäûH ‚Ebßj3bjºn¤/ÒÊfVQ„¹@‡çOÌn^ªOpA šü‹z_ýzEÿ�  ѬíþE½/þ½"ÿ�ÐhÐv¿ÿ�"Þ©ÿ�^’ÿ�èþE½/þ½"ÿ�Ðÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@˜ÎâJ+p_H;r>ö%ÇÓ#ó­=þE½Sþ½%ÿ�Ð M¨éÐêVâ)K££oŠhÎ'O¯'Ø‚A+ûQ›ûUÓu ‰~–S2²Œ%Ê?:~crõR{‚ �ÔÐ?ä[Òÿ�ëÒ/ý�Vghò-éõéþ€+F€3µÿ�ùõOúô—ÿ�@4hò-éõéþ€(×ÿ�ä[Õ?ëÒ_ý�Ñ È·¥ÿ�פ_ú�  Æp¿Q[‚úAÛ‘÷±(Î>™iëÿ�ò-êŸõé/þ€jmGN‡R·J]|SFpñ8èÊ}y>Ä ‘X·ÚŒßØš®›©Kô²™•”a.P!ùÓ󗪓ÜH¦ÿ�"Þ—ÿ�^‘è´k;@ÿ�‘oKÿ�¯H¿ôZ4¯ÿ�È·ªפ¿ú£@ÿ�‘oKÿ�¯H¿ôF¿ÿ�"Þ©ÿ�^’ÿ�èþE½/þ½"ÿ�Ð�hÑE’¾ÒWEºÑų ¦vš?9òÅÎ[æÎáÏ¡튞}ÂæM=怳iï¾Û0Øvíì~n|Õú(�¢Š(�¬ýyY¼;©ª©f6’€d“°ô¡E�fxnD›ÂúL‘°dk8ˆ#ýÁT?æ£ÿ�Ü#ÿ�kT÷óh—_ØDòÙHÅîìã*OYc½ÙGÞê>l†§oq ß㸷•%†M2:†^4ÓÑEÎÿ�ÍGÿ�¸Gþ֮йßù¨ÿ�÷ÿ�ÚÕÑPEPEPEPEPEPYÚÞm®é’Ù\MÊ|¹c8x˜‚7)õÁ>ÄA"´h  ]T³³‚Ö/\ypƱ®m¡Î�Àþj›û+Wÿ�¡Žãÿ�aÿ�âkfŠ�ÀºÐµKË9í¥ñÇ—4mbÚ.„`ÿ�½lYZ­•½¢1d‚%Ku!F9üªz(�¬íoF¶×tÉl® &å>\±œ<LA”úàŸb  ‘Z4P®ƒªYÙÁkˆ®<¸cX×6Ðç�`µMý•«ÿ�ÐÇqÿ�€°ÿ�ñ5³E�`]hZ¥åœöÒøŠãËš6±mB0‡Þ¶,­VÊÆÞѲAÆ¥º£þU=�Vv·£[kºd¶W“rŸ.XÎ& Ê}pO±ƒH­(×AÕ,ìോÄW\1¬k›hs€0?‡Ú¦þÊÕÿ�èc¸ÿ�ÀXøšÙ¢€0.´-RòÎ{i|EqåÍFض‹¡?Ãï[V«ecohŒY ‰cRÝHQŽ*žŠ�+;[Ñ­µÝ2[+‚ɹO—,gFå>¸'Ø‚AÈ$Vk ê–vpZÅâ+.Ö5Í´9ÀÃíSejÿ�ô1Üà,?üMlÑ@Z©yg=´¾"¸òæ£l[EÐŒá÷­‹+U²±·´F,D±©n¤(Ç?•OE�­èÖÚî™-•Ádܧ˖3‡‰ˆ#rŸ\ìA ä+FŠ�ÀµÐuK;8-bñÇ— kæÚà áö©¿²µúî?ðþ&¶h  ­ T¼³žÚ_\ysFѶ-¢èFðûÖÅ•ªÙXÛÚ#H"XÔ·RcŸÊ§¢€ ÎÖôkmwL–Êà²nSåËÃÄĹO® ö r £E�`Zè:¥œ±xŠãˆ5smpðûTßÙZ¿ý wø ÿ�[4PÖ…ª^YÏm/ˆ®<¹£hÛÑt#ø}ëbÊÕl¬mí‹$,j[© 1ÏåSÑ@gkz5¶»¦KepY7)òåŒáâbܧ×ûH9ŠÑ¢€0-tRÎÎ X¼EqåÃƹ¶‡8ø}ªoì­_þ†;ü‡ÿ�‰­š(ëBÕ/,ç¶—ÄW\Ñ´m‹hºƒü>õ±ej¶V6öˆÅ’–5-Ô…çò©è Š( Š( Š( Š( ¹É<&#×åÕôÝJ{ %ˆÇ$QÆ%·Á'®8''©$ôtP7öV¯ÿ�CÇþÃÿ�ÄÑý•«ÿ�ÐÇqÿ�€°ÿ�ñ5³E�cXhS[kOª]js^NmþΡãD »·æ¶h¢€ (¢€ (¢€ (¢€ (¢€ (¢€2¼K%´~Ô~Ùw%¼4R\Ç÷¡6ïMÙü+Á5‹Ÿ Lú\iš +mâ[®5 ¢Îú ®de€TH2FJäž+é (Ç,>Æ,<] zŒv>¹¾¶M&yÁ6¡Â‡•q<†u pBHœ×]ðÖöÂïÃsÚi6º\+{*¸µ?èÓ�¢È»`8ìkµ¢€<Ûá¥cx<a­äcÄWRıÊ÷ †Ü!H§t¯I¢Š�Êñ,–ÑøkQûeÜ–vò@ÑIsÞ„8Û¼}7gð¯Ö.|53épM¦h0­·‰lb¸Ô,‚‹;è6¹‘”�Q É+’x¯¤( °û°ñt1ê1ØøJæúÙ4™çÚ‡ UÆ@òÔ)Á A s]gÛí>ëÂw×ú]¶“l—“,†Ñˆ¶—h�Í ÀÄd ŒÐýk·¢€<Çá~§áËÿ�ø¢}øH—“$ßc†+eQ°6XºC¹ˆ\Ž¥zuPW‰d¶ÃZÛ.ä³·’ŠK˜þô!ÆÝãé»?…x&±s᩟K‚m3A…m¼KcÆ¡dYßAµÌŒ ð�ʉHÉ\“Å}!E�x凨Ň‹¡QŽÇÂW7ÖɤÏ8&Ô8Pò®2ΡNR �óšêþêtþ¿»ƒJ·Òmc»œKö2~Ï6ÀšÈÀqØ×qE�yÃö‚/ˆ^$:1³»Ðõ!½K»�VdO$®HÞFXãŸP2�ôê(  ¯Ém†µ¶]Égo$ —1ýèC»ÇÓv ðMbçÃS>—Úfƒ Ûx–Æ+BÈ(³¾ƒk™Aà• ‘’¹'ŠúBŠ�ñ˱‹C£„®o­“IžpM¨p¡å\d!Bœ¤ç5Õ|<¿‚ãÂ…Ö• ÛÙ´wS…‚ͶÛÝÈ $$€>8�sõ®æŠ�ó/�^ß\üOñȾµ¼†QŸ¹n3å¸G`fI�g$¾›E•âY-£ðÖ£ö˹,í䢒æ?½q·xúnÏá^ ¬\øjgÒà›LÐa[oØÅq¨YwÐms#(<�2¢A’2W$ñ_HQ@9aö1aâècÔc±ð•Íõ²i3Î µ<«Œä3¨S‚‚@<溯‡š•„¾Ô/m4»]&®§ÞmAkiJ� Ñ Æ@�Cõ®æŠ�ó_…ºF—e{«]iéawç$Mý±dò•ºÜ\²²ÈîÔŒ°Sx+Ò¨¢€2¼K%´~Ô~Ùw%¼4R\Ç÷¡6ïMÙü+Á5‹Ÿ Lú\iš +mâ[®5 ¢Îú ®de€TH2FJäž+é (Ç,>Æ,<] zŒv>¹¾¶M&yÁ6¡Â‡•q<†u pBHœ×CàÝKÌøy­^赕Ô2]y0ÚdÛ]LˆÉ÷nBãZô*(Êþë7÷zØ®šÛRwÓ#¼¹ÔÑΆáß m1,ß0Ç�m�/Ýê”Q@^%’Ú? j?l»’ÎÞH).cûЇw¦ìþàšÅφ¦}. ´Í¶ñ-ŒW…Qg}×22ƒÀ*$#%rOô…ã–c.†=F; \ß[&“<à›PáCʸÈC:…8!H$Îk«øw&Ÿ¬xFý-tˆ4Ëy.ç‚E²$[Î@ e„àacwP à è:«®Þè6ÖÕ¦QþõäßågÌl¹'ýc2ã8ýØ®îŠ(�¢Š(�¢Š(�¢Š(�¯)ø}£A¯y÷vöÄñ¤6¯£\ö’ÉÚž»¾›ƒ‘Ž}ZŠ�ùÂÍt§ÒüJ<8֣şð•Ký‘ö<y¾O™>ï>FÝý~Zîukí>%Ú7Ùì5‹›­J(L8"ûM’5Ì_úaò#–''8­E�y¯Å½FÆÂo‹È-ä_ÚJûä D Iv9?p„žƒŠâ4Ö™´ÆÒŽï5–²uÃ22~ÍæÀölÏnœWÐ4PÎoögü$þûO•ÿ�Ïö\Ûþf~Ïöÿ�&õùãÌÝŒçœãÚ½‹á‡ö¡øk¡ÿ�lyŸmòï7;¶n>^sÎvm®¶Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Performad2.jpg�����������������������������������������0000664�0000000�0000000�00000036742�15030617045�0023611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ý"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çîüT–ž!:/öUì×F5–3ÂU9û¥ä^r¯Ç_”žœ×A\óZÙêž(Õín'ŒXÙ‡]Ü£ . ŽU‡‚8"€#“Å—6×Ékwá­R3í·s%±Y8nóp9Âç'ä /|GežÞÕÞÊQíÙÔz…YIoÃõ®Zîí4›á¯kzƒèMuuŸåÁ(‰Vw]³‰›d>qØ…À%ÇR—I’$‹ÄÚíÞ–/HÓÃþÑ-óÿ�ív�ê¢ñÕÝšÜÙø{P¸GMÑ2Ïkµý9*+?Íy4ÖéáÝUn Àš{`Éž‡nTöaÁí\ÉžÕc“Qðÿ�‹u3-à ZÍ|™ýOËo…cýðNAì©¥k/ “ø“_¶Ô­~`eÍ}ÖTãÔ«cÚ€:9<Ysm|–·~Õ!3>Ûw2[“Æï7³œ.rq‘ž@’÷ÄwöQyíá]]à@L¥ÝG¨U”–ü?ZåF±±É¦ø‡ÄZ£G)òÖa§Åä\ç ÚÖ䫲sìO8yÔ¥Ò$‰"ñ6»w¦ Е§‡ý¢Zæ/þ<?ÚìÕEâ+«»5¹³ðö¡pŽ›¢ež×kúr&<TV~+šòi­ÓúªÝA4 öÁ“= Ü©ìÃڹ“=ªÇ&£áÿ�êf[†:µšù3úŸ–ß ÇûàœƒÙRÿ�JÖ^'ñ&¿m©ZüÁÊ%š û¬©Ç©Vǵ�trx²æÚù-nü5ªBf}¶îd¶+'Þng8\äã#<%ïˆïì¢óÛº»À€™J=»:P«)-ø~µÊb)c“MñˆµFŽSå¬ÃO‹È¹ÏAµ­ÉVÿ�dçØžpó©K¤IEâmvïL ÿ�¡+OûD´Ì_üxµØª‹ÄWWvksgáíBá7DË=®×ôäLx¨¬üW5äÓ[§‡uUºƒhíƒ&z¹SÙ‡µs&{UŽMGÃþ-ÔÌ· $uk5ògõ?-¾÷À=9²¥þ•¬¼2OâM~ÛRµù‚5”K4÷X9SR­j�èäñ]͵üv·žÕ 3¾Ûw2[•“Áo7³œ.r@ÈÏ tµæƒXŠXäÓ|Câ-Q£”ùk0Óâò.sÐmkrU¿Ù9ö'œZµÖNy þÛÕõ]%WaŠk<ËûDˆƒH¿ˆaâìè4U 'Y°×->Õ§OçÁœØÊÓ f¯ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\¬úlÒx×Q»Óg׫aj~a˜§ùç¼(‡#qzªå%¹½Ó<m©ÜùR^Y5©•QA’¾p ¨uà’9nxÏJ�͇SŠëÀ%´•D7Ѧ¦Ó[1É�Ë7*p7.xÜ8È#ƒÅhêqj>û:èsCö9åØ,¥¦hð¬ÇÈ׌); ÆËÙNmå­Ž³ðÓW»Vl:œÖ×6̳«ÄuàÖÞ¡w¹áûZ5YEûywqŒC8û<à¸ù#å'œðO8�†ßNֿ߬è:ÞLá™á$7Ó.<âQÁàìÀà�ϳêž#!%Ô¬luk>@þÍt¸¶'ºŸ<†Cö‘±ƒœSðÝ®¡ã ëˆ4í6K¨­-åtº·VK’Í2䃴â5ÑÜ0ÀªV‹­ìàðD0ÜÛ2î1­´SBÄd«œú«`õ  )¦ñÈÚf»w£ {ÝE;é®ðÜÆÖÌÀ+Ÿîžbz�Úø¯Ãð(‡Q´¿ÓÃÀØI$ÖëØ(ó³"BKÛ¸%`¶±X­u¿�i¹•¼¸îV+eŠSØ7dcèN è{Mû×Àp^iØ-å:[É<?îžL‹þÉËÄð�¼:f¸åµ [ÑØÜ)v‰ldX.[Õ¿|v¶x,¼�ýŸTñ .¥cc«Yòök¥Å±=Ôùä2´Œà”tKKñ¯¡ø6Ã.9Fû3A0W?#u‡ õ§>¤ë^m‰ð$6z…¾¬fIc=™{:g¾ ž‡¸  y¦ñÈÚf»w£ {ÝE;é®ðÜÆÖÌÀ+Ÿîžbz�Úø¯Ãð(‡Q´¿ÓÃÀØI$ÖëØ(ó³"BKÛ¸%`¶±X­u¿�i¹•¼¸îV+eŠSØ7dcèN è{Mû×Àp^iØ-å:[É<?îžL‹þÉËÄð�¼:f¸åµ [ÑØÜ)v‰ldX.[Õ¿|v¶x,¼�ýŸTñ .¥cc«Yòök¥Å±=Ôùä2´Œà”tKKñ¯¡ø6Ã.9Fû3A0W?#u‡ õ§>¤ë^m‰ð$6z…¾¬fIc=™{:g¾ ž‡¸  y¦ñÈÚf»w£ {ÝE;é®ðÜÆÖÌÀ+Ÿîžbz�Úø¯Ãð(‡Q´¿ÓÃÀØI$ÖëØ(ó³"BKÛ¸%`¶±X­u¿�i¹•¼¸îV+eŠSØ7dcèN è{Mû×Àp^iØ-å:[É<?îžL‹þÉËÄð�¼:f¸åµ [ÑØÜ)v‰ldX.[Õ¿|v¶x,¼�“«%ú& Bh¶‘v²Ÿï“•'8`H휃\1Ñ-/Äz¾‡àÛ ¸åìÍÀA\üÔnƒÔb§ŠÚÃP ·ðR麵¡·kx§„öu?ľü©è{Š�ôJ+”´ñ±eqmi¯hÍ�šA_,ÑùL{n�Œ}2rzë Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹»}Jøƒ¨ÙN Écj-÷‘‰ÀiÉ+ƒÔdðp~RqŽk¤®y­lõOjö·“Æ,lîîQ„—G*ÂÁ@åî›qoà¯_i³26§ö›i 1Ê<Ù†áýÇ�u`Ž„mjW:ˆfÑ`’-ê5ŽâÖtÃÆßeœíeìzG‚ 5…5åÖ“à-zÞõ^{þÒŽÁó27›0ÄÃÜôqÇ8 c-ÐxŸM:¾ui"ÛjñÒ; ¾_³ÌÛX’:uäàƒÍ�S·žoø¯P[§žïN6¿é-ó=²ïŸgv^¿?P1»<µG{ z‚µ _í3‹»9/å¶¼·œ¬Ri@㪪6ò0 Åí#Ry<i¨Zj%­ù°¶ÄaÁY‚É>^3Ô¯Ì:€GqÜá\ØÝéÞñúk´s©,ÖNp¨<Ù†èð+ÐöÁÉ .ÊÐǤø’ãY[£`{‹ˆnÀRNСˆàQ¹ýáɨȚTéöYüYy§)€Ax%ƒÝ @?Ù<ŽÄðµÐêϦø‹ûxžÙõWS•du¶œàŽH±†©\ßkN¯%„úÒ‹¢ŽAw% svuQ1ÈÊ7Î8ãæÛÁ` £“qj^Õ<B²ÊÅœ‹{ÖŠàŽ}©ÜcpäcqŠr¾…«˜£»›ÅVš¬(dXÌwM4ùK¡~SëÐô#¨­ û Ý;P’òé–Wò.é"–Hî;뿯Þxî*¿_ŒE{â>ÎþÙ·�bE’&þôn$Ã)õpè VêÆ¥²ñ þ"kw5»0^g p‘“åcœc•=ŽNÐæDÒ§O²ÏâËÍ8áL Á,èJ�ÉþÉäv'…©Ÿ[¹†c§êþ*Ñ嵘lK¡oÇ #e]ÿ�!?÷Éõí¦›»í^-Ó¯4õ?4Q¥éžd˨þé9îç… Œ:MÄm©xTñ Ë+r-ïZ+‚8!ö¦CqÑŽAÆ)Êú®bŽîoZj°¡‘c1Ý4Ðgå.„!ùO¯CÐŽ¢¦æÊÚ¶‘ã};‰—.¾R,sœqæ.þc±¸c b˜/ã×ã^ø§O³¿¶mÀ‘d‰¿½‰0Ê}G0ê(º±†)l¼C?ˆšÝÀnÌ‚ÃddùXçåOc“´9‘4©Óì³ø²óN8S�‚ðKº€2²y‰ájgÖîa˜éú¿Š´ymfè[ÆñÈÁYWÈOýò}A;i¦îû@E—‹tëÍ=OÍÔi`_úg™2ê?ºN@û¹áh#“qj^Õ<B²ÊÅœ‹{ÖŠàŽ}©ÜcpäcqŠr¾…«˜£»›ÅVš¬(dXÌwM4ùK¡~SëÐô#¨©ƒù²¶­¤xßGŽâe˯”‹çy‹¿†ÆìnÁȦ øõøÄW¾)Óìïí›p$Y"oïFâL2ŸQÁ :Š�…n¬aŠ[/Ïâ&·p#[³à†pÇ>V9Æ9SØäíVz§ü#eb³^Ô´ÖnbŸOºyíú‘™>dû§‘Î áj«ëw0Ìtý_ÅZ<¶³ ‰t-ãxä`¬«¿ä'þù> ´Ów} @¢Ëźuæž§æƒj4°/ý3Ì™uÝ' }Üð´ÞØß[jVQ^Y̲Á(ʸýAAàƒÈ#¬Wž‡óem[Hñ¾ÄË—_)9Î8ó 1ØÜ1ƒ1]‡â½;PHí.5 eÔÓ $&DÛÕ0He=ˆ'Ðàñ@ Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r³é³Iã]FïMœ[^­…©ù†bŸçœb@:ð ŒqÆAê«”–æ÷Lñ¶§såIydÖ6¦UEHùÀ* eׂHå¹ã=(6N+¯�x–ÒUßFš›MlÇ$,Ü©Àܹãpã ŽoV³›@Ôô9,IôÑ|ÄX ËD~Ï6LDŸ»ŒžÃn>é§ykc¬ü4ÕîÕ„›§5µÄM‚3,Ç*ñGB85£w¨]Á®x~ÇVVQ~Þ]ÜcÎ>Ï8î>HùIç<Î�$Š=7Äzõû†ÀÖ±±WÄ—<©«‘؃{ŠÁ“QŸLð&»i©†hûJ8/øÃ¹–a¶@�Äô?tç·&qu;Í!â†çìV¯,.1Ñ/8ùÈ …�8Éä0â³âÔ ¿øuâh|»˜—RûE¬„ˆ´“8#Üd �ix—Loí½ÿ�N1Á¨µã)wÇ(ÓϺŒœz4}@_x·UŠæÙ­®–ÂÕd·—ž’\d©èéÈù‡®@¥ªÃqáíKB1´×ZJ^±X™&·ÿ�G˜a{º“ŽXc<gì–:ÿ�‰.îbŸ$iö’ZÞ[¸Ý2\r­éêAèA  ¸ÒëGÐïu+K{K»H§ºŒZ\ O"'–Ø?&�;uR1´èꥨÂ#›LÑ”îŽX¥‘^6õV Çò=GŠÚ£Úx3TÓõA²V¹¼Ýˆ®í2dî7_”žG žqßÿ�hYÏÝ¿ýüã@¥œzÌ×:]Æ› ÎöÐÇæÈû€—xn &?‡§Nj´í_CºµµŽËG’Úöãʆ$väG$‡i)§g�ç�Ù°¾´)Ö ºƒ+l0sÃÓµ‹ë3ªh]@@¿bx8ÿ�Fž€3_ÃÚ·öŠß[Ùh¶ò“ûåßdãý¥)Œú0Á÷Çz~£âM ÆîM+EˆÏ \DñÊë$%”U‚pyú‡"»í /ùû·ÿ�¿ƒük#·Öká Zê�E„�ƒ ã÷k@vqë3\\éwnƒ;ÛC›#î]Ẁ˜þ9¨"Óµ}êÖÖ;-KkÛ*d‘Ø[‘’¤¦vœœtfÂúÐx§X&ê ­°|ÁÏNÖ/¬Î© uý‰ýàãýz�ÍjßÚ+}oe¢ÛÊOï–7}“ö”¦3èÃßTéú‰4+¹4­#<)qÇ+¬–PAV ÁçèzŠì?´,¿çîßþþñ¬ ßY¯„4Ek¨ ƒÝ­�eÙǬÍqs¥Üiº ïm ~l¸ w†êcøztæ ‹NÕô;«[Xì´y-¯n<¨a’GanDrHv’™ÚvpqÐ`` › ëAâ`›¨0b¶Áó<=;X¾³:¦€EÔ ö'÷ƒôiè5ü=«h­õ½–‹o)?¾XÝöN?ÚR˜Ï£ |qQCc©x‡D°½m/F…æŠ;˜eŠYXY”0*Á8#?CÐäW]ý¡eÿ�?vÿ�÷ðdxVúÍ|!¢+]@°€d~íhM ÷S{‹­;UíqiDÍ%Ü’ Œ—·­mÖ—4Sx§Yh¤IʶåXÒJÝ Š(  í{Y·ðþ‡wªÝÑÛÆ[bõvì£ÜœƬX_C©XCyï.UÜ 2žêñ ŽÄÇñ„7^Ôn&.ße²¹tŒ”±‰†ãÇP ÇÔûc^ÎÂ+nšp·™š2~Ub�b£¶HÉ÷$÷4jŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹»}Jøƒ¨ÙN Écj-÷‘‰ÀiÉ+ƒÔdðp~RqŽk¤®y­lõOjö·“Æ,lîîQ„—G*ÂÁ@åî›qoà¯_i³26§ö›i 1Ê<Ù†áýÇ�u`Ž„mjW:ˆfÑ`’-ê5ŽâÖtÃÆßeœíeìzG‚ 5…5åÖ“à-zÞõ^{þÒŽÁó27›0ÄÃÜôqÇ8 c-ÐxŸM:¾ui"ÛjñÒ; ¾_³ÌÛX’:uäàƒÍ�S·žoø¯P[§žïN6¿é-ó=²ïŸgv^¿?P1»<µUÔ4ûMKáî³x­¶x¿µ ˜[ ´Í1##ï#qx< ©¤jO'5 MB$µ¿6ØŒ8+0Y'ËÆz•ù‡Pî;œ+›½;ÀÞ ŸM`öŽu%šÉΛ0Ýþ�åzØ9$nçR¸:ï‡ì587«|ì²F †uÓÈ{FPò?Ú1aÓîl¼gª]h«»YÛK=£|©pKÏ’ð?zœŽr&ÕŸMñö ñ=³ê.®§*Èëm9Á2:b U¶¼›@ñeüz¤ïqfl­Uo™@ò—ÌŸh˜ÇçÀ Ø< «ym©|;ÖÓhÞ—7‚ky�ß7.Á\sƒ‚=½+«þÀÑ¿èaÿ�€ÉþÈêZ\^ ÔïQÞ Èî/•gˆ€J›©>VìËß8<ŒßþÃÖÿ�èm½ÿ�ÀKþ"€+XèzAñF®‡J±*±[áMº`d>{Sµ} H]OA ¥X€×ì tä}šsƒÇ¨•P²ÑµƒâmYŠ/Ö+}ÏöX2ÙŽ6cëNÕtmeu- 7Šoµó&ÖÜl?g˜ä|œðçÖ€:?ì þø ŸáY>д‰<#¢»éV,íafkt$Ÿ-y<Tÿ�Øzßý ·¿ø oÿ�ÄV_†tmfO hîž)¼Æ¨-mÈQ°q’™ãÞ€-ØèzAñF®‡J±*±[áMº`d>{Sµ} H]OA ¥X€×ì tä}šsƒÇ¨•P²ÑµƒâmYŠ/Ö+}ÏöX2ÙŽ6cëNÕtmeu- 7Šoµó&ÖÜl?g˜ä|œðçÖ€:?ì þø ŸáY>д‰<#¢»éV,íafkt$Ÿ-y<Tÿ�Øzßý ·¿ø oÿ�ÄV_†tmfO hîž)¼Æ¨-mÈQ°q’™ãÞ€-ØèzAñF®‡J±*±[áMº`d>{Sµ} H]OA ¥X€×ì tä}šsƒÇ¨•P²ÑµƒâmYŠ/Ö+}ÏöX2ÙŽ6cëNÕtmeu- 7Šoµó&ÖÜl?g˜ä|œðçÖ€:?ì þø ŸáY>д‰<#¢»éV,íafkt$Ÿ-y<Tÿ�Øzßý ·¿ø oÿ�ÄV_†tmfO hîž)¼Æ¨-mÈQ°q’™ãÞ€54{;k/ëQÚÛí‰X(ΰ®‚¹¯ÚÝZx“ZK½F[ç1Û$‘¢0üa�ÒÐEPGŠÿ�äN×?ì?þ‹j׬ß[MyáZÖÝ “Mg4q þ&(@™­*�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+•ŸMšOê7zlâÚõl-OÌ3ÿ�<ã×…�0äcŽ2U\¤°_ÚøÛS¼Ó›VžÒGÿ�[óÎ2ŒN€^Ý99Á;€l:œW^�ñ-¤ª!¾56šÙŽHY¹S¹sÆáÆA*Þ­g6©èrX$“é¢ùˆ°A–ˆýžl˜‰?w;=†Ü}ÓBâ+ sá¶·>Olú›©dÖîd•¶·u$•<yÈ­K½Bî sÃö:´j²‹öòîã†qöyÀÿ�qòGÊO9àžp$Qé¾#ׯÜ0ž°´x¥Š¼n$¹åHåXŽÄƒÜV šŒúg5ÛML3@ÿ�ÚQÁÆ̳ ²��F'¡û§8àà¹4ëˆük©Þi7?bµyaqˆ®‰yÇÎ@Èl(ÆHÇ!‡Ÿ¡ÿ�ï@ËåÜĺ—Ú-d ¼E¤˜€qÁã ààðhKĺcmè—úqŽ E¯K¸&9@¶˜€àx ÔdãÐÉ£êûź¬W6Ímt¶«%¼¼ô’ã%OGNGÌ=ppr-VjZ¦ºÒRõŠÀÉ5¿ú<à ÝÐ œrÃà ?d±×üIwsù#O´’ÖòÝÆèÉ’ã•oOPrB �`Így¥ø+VþÏ .šnoÙœ)€ ™�1˜àepGCØÿ�lßеªÿ�ßË_þ=\{jiàÍSOÕÉZæðCt"¸o´É?¸Ý~Ry‚yÇý¡eÿ�?vÿ�÷ð�s:µèñ>®ÃÃÚ™&+|¨’Û+Ãõýî9ö§jÚµëjZ>ÔÔ­ó –ß7ú4Ãuç<ã¡örÂúÐx§X&ê ­°|ÁÏNÖ/¬Î© uý‰ýàãýz�±ý³}ÿ�BÖ«ÿ�-øõdøcV½O èȾÔäU±€Y-°ß»^FfQ]/ö…—üýÛÿ�ßÁþ5‘á[ë5ð†ˆ­u�"Â�Aqûµ  ûZôxŸWaáíL“¾TIm•áúþ÷ûSµmZõµ-ŸêjVùˆKo›ýa‰ºóžqÐû ¹a}h<S¬u VØ>`燧kÖgTк€~Äþðqþ=�XþÙ¾ÿ�¡kUÿ�¿–¿üz²|1«^§„ôd_êr*ØÀ¬–Øoݯ#3¨®—ûBËþ~íÿ�ïàÿ�Èð­õšøCDVº€a� È8ýÚÐ}Ž­z<O«°ðö¦IŠß*$¶Êðý{Ž}©Ú¶­zÚ–„O‡u5+|Ä%·Íþ0ÀÄÝyÏ8è}…\°¾´)Ö ºƒ+l0sÃÓµ‹ë3ªh]@@¿bx8ÿ�Fž€,lßеªÿ�ßË_þ=Y>Õ¯SÂz2/‡u9l`ÖKl7îב™ÇÔWKý¡eÿ�?vÿ�÷ðdxVúÍ|!¢+]@°€d~íhšÌ·^&Öžk‹6[ “´dž$çäf­tU…¥ÍÞ)ÖZ)Eò­¹Vt’·h�¢Š(�¢¹}kÄ—šgŽü/¡Çk¬}«ÍvS¾?&-ã8ä‘Ôv>¼`xcâ5浪hâÞÙtÿ�}·ì 0–³¶?xňmÊ à 9 G¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®nßR…> ê6Sƒ²XÚ‹}äbprJàõ<”œcšé+[mGÄú­µÜBXšÂÌàäD—G ƒÈ#yÏêZJMà}zþÞF¶½Oí5iPq* ¦;ta××$‚2s¡©^[뎋¤ê¶kßÛÍi!Þ®¿fŸçFþ5Î9àƒŒ…<V<×—ZO€µë{Õyì_ûJ8oÌÈÞlÃsÑÇàŒ·Mâk(u ½)DÍû–'*è~Í9XtäcÐäq@¶óÍáßê tóÝéÂÆ×ý%¾g¶]óãÌîË×çê7g–ªº†Ÿi©|=Öo¶Ïö£Ás a¶™¦$d}än2ƒÔ/Xjé¾3¼´ÖeŒ¼¶v±ÁvŠU%ýäûCöG9#Á#Œghȹ±»Ó¼ â ôÖhçRY¬œáPy³ Ñá W¡íƒ’@6îu+ƒ®ø~ÃS€Cz·ÎË$`˜gQm8܇±äe#ý¡ó>æËÆz¥Öб+µ´³Ú7Ê—¼ù ÿ�ñסÉÈç"mYôß`¯Û>¢êêr¬Ž¶ÓœÃ#©�ö ÐÕ[kÉ´_ǪN÷fÊÕVù”)|Éö‰ˆü~|À݃É�ª·–ڗým6ésx&· ñrìÇ88#ÛÒº¿ì þø Ÿá\Ž¥¥Áuà­Nõ༎âùVxˆ©º“ån̽ðsƒÈÁ­ÿ�ì=oþ†Ûßü·ÿ�â(µŽ‡¤jèt««¾Û¦Cçµ;Wд…ÔôºUˆ ~Á€·NGÙ§8<zùU -X>&Õx¢ñ]b·Üÿ�eƒ-øãf8þ´íWFÖWRÐÃx¦ñË_0RmmÆÃöyŽGÉÏ�Ž}h£þÀÑ¿èaÿ�€Éþ“á} H“Â:+¾•bÎÖf·BIòדÅOý‡­ÿ�ÐÛ{ÿ�€–ÿ�üEeøgFÖdð¦Žéâ›ÈѬa*‚ÖÜ…)ž=èÝŽ‡¤jèt««¾Û¦Cçµ;Wд…ÔôºUˆ ~Á€·NGÙ§8<zùU -X>&Õx¢ñ]b·Üÿ�eƒ-øãf8þ´íWFÖWRÐÃx¦ñË_0RmmÆÃöyŽGÉÏ�Ž}h£þÀÑ¿èaÿ�€Éþ“á} H“Â:+¾•bÎÖf·BIòדÅOý‡­ÿ�ÐÛ{ÿ�€–ÿ�üEeøgFÖdð¦Žéâ›ÈѬa*‚ÖÜ…)ž=èÝŽ‡¤jèt««¾Û¦Cçµ;Wд…ÔôºUˆ ~Á€·NGÙ§8<zùU -X>&Õx¢ñ]b·Üÿ�eƒ-øãf8þ´íWFÖWRÐÃx¦ñË_0RmmÆÃöyŽGÉÏ�Ž}h£þÀÑ¿èaÿ�€Éþ“á} H“Â:+¾•bÎÖf·BIòדÅOý‡­ÿ�ÐÛ{ÿ�€–ÿ�üEeøgFÖdð¦Žéâ›ÈѬa*‚ÖÜ…)ž=èSG³¶²ñ>µ­¼0!ŠØ•‰Œáû è+šðý­Õ§‰5¤»Ôe¾s±I!Æ]-�W!{ã“oãuðå¶wwå˜êâ‘„>nv’ …Ëeàñ»f‰ñKT³Õ5îÒ÷^¼µÕ®ãO&æ-¬M ,1Í–'æ =Xd �ïõC¬xŸJפÕu.t½ÿ�fŠ+ËÆ!£$î\ϰy¨ôé:6«õ»ÜºÚyÿ�b¶‘ÔÅiç6é<°O÷‰ÇlW%7Æ9­ç»·—ëæÛ˨ÁòßeZK4H3åð¥ÏïZö_RÖtÛ-öt¹·´žâHÑßìÂáw&v¡]ª1¸³/¶ì�w´W”Üüb¹‚k»cáøÖx$Ô ÝöÒËæÙÆ$ùfÖR0zçŒw­ï øËUÖþ™m ÞYÅ;Ïö’¦MЉ7Ä…0Ë’€Û”ç‚�bÜQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V5æ›sk}.«¤í7ö›i p``ÿ�Ðô=èFÍÇM42|=ñHçÍX¯Þh]v¼&C$Y{sÐõ‚ &­g6©èrX$“é¢ùˆ°A–ˆýžl˜‰?w;=†Ü}Ó±âC®YΩ3Ú^IÀ.c”`AVļô=:‚5qª¼úæaÙµ¾v1ƒ”•E´ã|mÜr2:ŒŒŽA ,¥°ÖõíM“Ê»³¸ÓmUƒ.åaæ\‚¬â=¹¹¾Û£ø ^Qîô¶þÒpKKmûÙ‡ÌỈܟ¼;î®ÜšuÄ~5Ôï4‡ŠŸ±Z¼°¸ÄWD¼ãç d6�ã$cÊ¡£ ïÿŃÜ#R3Û9â-$Ägî2€/köIqªè¶4 y5ÙÛ6KE:ýšb7?7º€xÈàÏ£êûź¬W6Ímt¶«%¼¼ô’ã%OGNGÌ=pprmsN—JÖtk½&2ë%û´š~ð¨îmæ%ОÈÝÇ Äóƒ–¤4ÿ�x—Pš'’)íìíBJ¿$ö²y—‡¦TŒŒ‚ �cÍgy¥ø+VþÏ .šnoÙœ)€ ™�1˜àepGCØÿ�lßеªÿ�ßË_þ=\{jiàÍSOÕÉZæðCt"¸o´É?¸Ý~Ry‚yÇý¡eÿ�?vÿ�÷ð�s:µèñ>®ÃÃÚ™&+|¨’Û+Ãõýî9ö§jÚµëjZ>ÔÔ­ó –ß7ú4Ãuç<ã¡örÂúÐx§X&ê ­°|ÁÏNÖ/¬Î© uý‰ýàãýz�±ý³}ÿ�BÖ«ÿ�-øõdøcV½O èȾÔäU±€Y-°ß»^FfQ]/ö…—üýÛÿ�ßÁþ5‘á[ë5ð†ˆ­u�"Â�Aqûµ  ûZôxŸWaáíL“¾TIm•áúþ÷ûSµmZõµ-ŸêjVùˆKo›ýa‰ºóžqÐû ¹a}h<S¬u VØ>`燧kÖgTк€~Äþðqþ=�XþÙ¾ÿ�¡kUÿ�¿–¿üz²|1«^§„ôd_êr*ØÀ¬–Øoݯ#3¨®—ûBËþ~íÿ�ïàÿ�Èð­õšøCDVº€a� È8ýÚÐ}Ž­z<O«°ðö¦IŠß*$¶Êðý{Ž}©Ú¶­zÚ–„O‡u5+|Ä%·Íþ0ÀÄÝyÏ8è}…\°¾´)Ö ºƒ+l0sÃÓµ‹ë3ªh]@@¿bx8ÿ�Fž€,lßеªÿ�ßË_þ=Y>Õ¯SÂz2/‡u9l`ÖKl7îב™ÇÔWKý¡eÿ�?vÿ�÷ðdxVúÍ|!¢+]@°€d~íhšÌ·^&Öžk‹6[ “´dž$çäf­tU…¥ÍÞ)ÖZ)Eò­¹Vt’·h.oiS뉭5³. ¨ËÏõ :© àFàqYvÿ�</i?Ÿo§ÉÇÚ$¹3­äÂFy�¹÷î`ÛFT’§Óšê( =¾øAÝÝôə瑋_\Zu )??VP­ hmÍÅœËi Á-ԼƧ*¯ó~ð/`ùÆ1Šè( Gþ„|Ó+i’³™'•‹ÞÎÛže )9~w¨�ç­héÞÐô«‹IìífF´P°+]JéË#1]Û2»±œ3ÍnÑ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W-ã]ZM.òÖiẵ˜Æ$‡qÂI€r ‚T0By(b<ÐSEaèwkeÞ$¶úŽ ˜å¸’e”�hÉ,½8àŒòrw(�¬í_E´Ö’ÙnüÑöi¼øš'(ÊûAr1¸‘ŒrhÑ@µ«Ýèž!¸—Z™d¶¹‚ h/‚í£Ê@—#0�GÊHìHZÍÔôË{ß�ëw º;«sª§ŒáÔyÓeIî§©àñÜ;‰bŽxž)cY#pU‘ÆCÔÜW¬iw¾ð~³khûK–Þí„@~ö×ÌÞß/÷Ðnä˜rFz� Jàë¾°ÔàÞ­ó²É&Ô[N7!ìyCÈÿ�h|Å÷:l—3¿¹²¹6·±XZì|GeÆVDÈÜ¡ˆæ¤×#°×‡1ÝYÏ|YYƒþ9 ¬9#FG"¨Û^M x²þ=Rw¸³6Vª·Ì yKæO´LGãóàìHxÔb»ð6·§^F‘_,×%»|ÊÃí/–B@Þ œg dWcý£Ð"Ãÿ�“ü+–Ôìá¼ø}ª3ªù±^_<2í£o´Ê7.z>„Ö×ö·ÿ�Cmïþ[ÿ�ñZÇCÒŠ5t:U‰UŠß mÓ!óÚ«èZBêz]*Ä¿`À[§#ìÓœ=@üª…–¬jÈ<Qx®±[î²Á–È|q³Zv«£k+©ha¼Sx寘)6¶ãaû<Ç#äç€G>´Ñÿ�`hßô°ÿ�Àdÿ� Éð¾…¤IáßJ±gk 3[¡$ùkÉâ§þÃÖÿ�èm½ÿ�ÀKþ"²ü3£k2xSGtñMähÖ0•AknBƒŒ”ÏônÇCÒŠ5t:U‰UŠß mÓ!óÚ«èZBêz]*Ä¿`À[§#ìÓœ=@üª…–¬jÈ<Qx®±[î²Á–È|q³Zv«£k+©ha¼Sx寘)6¶ãaû<Ç#äç€G>´Ñÿ�`hßô°ÿ�Àdÿ� Éð¾…¤IáßJ±gk 3[¡$ùkÉâ§þÃÖÿ�èm½ÿ�ÀKþ"²ü3£k2xSGtñMähÖ0•AknBƒŒ”ÏônÇCÒŠ5t:U‰UŠß mÓ!óÚ«èZBêz]*Ä¿`À[§#ìÓœ=@üª…–¬jÈ<Qx®±[î²Á–È|q³Zv«£k+©ha¼Sx寘)6¶ãaû<Ç#äç€G>´Ñÿ�`hßô°ÿ�Àdÿ� Éð¾…¤IáßJ±gk 3[¡$ùkÉâ§þÃÖÿ�èm½ÿ�ÀKþ"²ü3£k2xSGtñMähÖ0•AknBƒŒ”Ïô©£ÙÛYxŸZŽÖÞÅlJÄFpý…tÍx~ÖêÓÄšÒ]ê2ß9ŽØ‰$‡ã�®–€ (¢€2üA,é°¼R<lo­”b V¸Œô }jVG‰äý„,¿ô¦*× Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ·úu¶§oäÝG¸X«ÆÃ£+U‡¨¨ôØõ_MÊ!MÀ^Eÿ�m@Àaê8>ƒ¥^¢€9}kÄ—šgŽü/¡Çk¬}«ÍvS¾?&-ã8ä‘Ôv>¼`xcâ5浪hâÞÙtÿ�}·ì 0–³¶?xňmÊ à 9®“Wð„:ljô­zMWQ‚çKßöh¡ò¼±¼aò2NåÀ<ñÛšHð“£j°_[½Ë­§Ÿö+iLVžsn“ËAäÿ�xœvÅ�tôQE�`_èMìzž”ˆfŽS;Ù»Šg*ÊXrM¬Ã=yGÔ-õOj¯º•±µŽhf]¯o¸%XzàPA5ÑÖn£¤-Ü«ym1´Ôc]±Ü ÎG÷]=Ôy &k;Í/ÁZ·öxItÓsx†ÌáL�\ȈôÇ(p;‚:Çûfûþ…­WþþZÿ�ñêæîîšËÂ:¶•©·Ôsqq·?$ªó3îÞxuÀÈÏgý¡eÿ�?vÿ�÷ð�s:µèñ>®ÃÃÚ™&+|¨’Û+Ãõýî9ö§jÚµëjZ>ÔÔ­ó –ß7ú4Ãuç<ã¡örÂúÐx§X&ê ­°|ÁÏNÖ/¬Î© uý‰ýàãýz�±ý³}ÿ�BÖ«ÿ�-øõdøcV½O èȾÔäU±€Y-°ß»^FfQ]/ö…—üýÛÿ�ßÁþ5‘á[ë5ð†ˆ­u�"Â�Aqûµ  ûZôxŸWaáíL“¾TIm•áúþ÷ûSµmZõµ-ŸêjVùˆKo›ýa‰ºóžqÐû ¹a}h<S¬u VØ>`燧kÖgTк€~Äþðqþ=�XþÙ¾ÿ�¡kUÿ�¿–¿üz²|1«^§„ôd_êr*ØÀ¬–Øoݯ#3¨®—ûBËþ~íÿ�ïàÿ�Èð­õšøCDVº€a� È8ýÚÐ}Ž­z<O«°ðö¦IŠß*$¶Êðý{Ž}©Ú¶­zÚ–„O‡u5+|Ä%·Íþ0ÀÄÝyÏ8è}…\°¾´)Ö ºƒ+l0sÃÓµ‹ë3ªh]@@¿bx8ÿ�Fž€,lßеªÿ�ßË_þ=Y>Õ¯SÂz2/‡u9l`ÖKl7îב™ÇÔWKý¡eÿ�?vÿ�÷ðdxVúÍ|!¢+]@°€d~íhšÌ·^&Öžk‹6[ “´dž$çäf­tU‡¥ËÞ(ÖZ)×ʶVtzÜ Š(  ÿ�È.ûYéLU¯\w¯ï4ˆáŸÊšîÒ{«EHcPY&[„`£ÙÀ#žŒ£ûÕÓéÑ]C§Â—Ó‰®°ZWQ…ÜNH_öFp;à äЪ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8ÛO>±âËßÚi—©2ËhÚ”q»,3,a‰9ŒÆ8bIÆWÉ|;ø«¨ëz~‘cyawª_9 }y ^dÒ*±Ç°(T‹2qÈ݃G_ é ª]êQ[É ÕÚ‘;Cq$jçnÝÅU‚ïÁÆün÷ªzW€|5¡Ëk&™§5«Z¡HÌw2˼¾æýà IóŽØ >oŒs[Ïwo/‡WÍ·—Qƒå¾Ê´–h$gËáJ3ž1Þµ<5ñ5¼W~éšÑ·’>.ÌÙÞJ˶G”Uù¶çqlÿ�'A¾øAÝÝôə瑋_\Zu )??VP«ºW|=¡–þÌ´žÔ<^SïgÁvƒøÜà7Þ¡çW¿näðÍÍõ–…,j4·^b€n~ÌAPƒ$?#žG§Jô]ÄWÚ–·s§^iY˜Éÿ�J-!*ÁAØÑ®Q²Jº’0v“ž¿ <¶ßg;~ÌmvÉÈòŒžnÞ_¦ÿ�›ëÍlGáû="iõ-2ÎI¯Ìl¨“^ÈW Áœ.òÁ7à 3ê�6èªZn©mªDí t–&Ù4²BÞŒ½½B9Žjí�Auek}Çwm è§pYP0ן©ª¿Ø7ý,?ð?´h  ßøG´PIþÇÓòzŸ³'øP|=¢’ ÑôòG#ý8ý+JŠ�ÎþÀÑ¿èaÿ�€ÉþƒÃÚ*¨UÑôð� dãô­*(7þí±ôüž§ìÉþh¤‚t}<‘Èÿ�FN?JÒ¢€3¿°4oúXà2… ðöŠªt}<ÀÙ8ý+JŠ�Íÿ�„{EŸì}?'©û2…ÃÚ) O$r?ѓҴ¨  ïì þø ŸáH<=¢ª…]O�p�¶N?JÒ¢€+ÚØÚX«-¥¬êÇ,!Œ 'ßbŠ(�¢Š(�Æh¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ËÕtȧ"þ;Ÿ°ÞÛ¡Ûv:•N¹§PAÁ:/Œ’÷Å+¥]\[yÓÀ|µ·™e…Ý2Û£q×rJœòû‚ ìª7·†Yc–Hcy#9Ge©ö=ºš�’³µ=rÇJhâ™ÞK©Gîm`C$²}ss€;‘Z5Çêÿ�´»ÍRm^Ò$ŽövÝp’³˜®1Î*} œw*ÔØv¢¹Áà_mÓp}§“ÿ�Š¥ÿ�„Ãôÿ�ÈòñTÑQMŽ5Š4�U€S¨�®+Vñ­ÆãmGJ¸‚Óìü?.²]’’mÙ×ÀcÓ¸ôçµ®bçÁwž.›ÄWü’ÍfÖZ·•ä5¹91‘åîÆîs»>øâ€3<ãMCXÖ­´½V+A-ö‹µnÖ¨Ê7m¦6ÜÇ,2¿0À9< ð÷ƒ4ï]}¦ îîg[Xì¡{§V0Û¡%b]ª>PO|“ÆMtt�QEfO ÙÜÎó<Úˆg9"=JáðUpà(N©VÌêm§4Þ]ØX¤Lƒ%3÷ÀÏ;sŽõSþ«ùïªÿ�àÚëÿ�ŽV6£à„Ö/7Wqé‘::ªêWI3 IgÂ�xàîh°¢‘"* £q$þ$òih�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯5ñÄK¹ĶE…ì'L‚åWSŽuŠxaópÛ£1…8ÛË'øFA¯J®~óÁZüú„ÓYÈQM—k Ô±$Ã%•.Hãv2A#84Êø#âE÷‰!°³M"æê_²"O~QÖ3r-ÖFÞV?-‰À!‰Ïð`Œå/Ç@ts¨¿‡'ØP /A>Q¹û3ÿ�ÞÈÇ9^•ßéþ Ð4—fÓìäµÝÀË Ôª¥U6) 67…ãÞ÷¬¿øTÞ û/Ù¿±äò>ÏömŸm¸Ç•æù»~ÿ�O3æúÐKât¶×úÜ6>¹¼ƒI‰nI‘#ß ~c†qEd˜’Ø@ ÖN¡ñzí¼!â=JÇHŽ­. £ón7«%Ú«FØ >eÜ2½=ëµ›À¾¸ûfû9À½ˆEtöt »rà8 Åx,~b É95]>xN;;ë1¥±·¿†.c{¹˜H€"¿BŒƒÅ�XÑ|E}©kw:uæ™™\Ÿô¢Ò¬å$«©#�gi8eXxsKÓu¿¶†arÊɺK™$ ƒ0Uf!rUIÀÀÏJÕ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Performae3.jpg�����������������������������������������0000664�0000000�0000000�00000031774�15030617045�0023613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ñ"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ã~"K§eÙÃ}§[1ž8õA›K’ŠAŠ_b#¯Ì àã²¢€>uÒ®|{ã[kWJ³Ò,&ðÃ?ØæÁxn ÉÇ—‘Ÿ0§)»i\ VÕÍÓÚ|;ðôž,{^ÊÂY›JÖÅìlØ@¤óç…E�à‘¹¸ä‘îPâ{«+ƒwÓ4ÙЋxnkÂæݦOñ†Ú|Ö‡ÃÛ¨.þxqíçŽeM6Þ7hÜ6cPÊqÜAˆ®–Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Šæá--&¹—>\(Ò6N�ɯ›|_6„µí>ÞßJ¿¸‚ÒÝíõÛ?½9k„ýÜßôñ´3’HÝÂò+éz(È­J‹Ä~$m ðZx6Ma¸¸±ÿ�xnÝÊï‹oË•C–+߯5¹ðÊçOšã\‚ÇLÓa6ÒCš†’1i}ò’@Ã$0òzšô(Ë|1ªøbóã­.‘¨©º{O²=¤1ÈD¬¹çw#i9 O'½z•PEPEPEPEPEPœ|Q¼Ò­…¼×ͦ\Ígo,«¥jc÷wªØGÿ�ML)ÁûÇŽr<áá“Qñç—m¦ ÖV'F·L}®+Ÿ³œ¤xù÷‰6‡Ç9Îkèê(Æ|U{inšdÚüί•¥¥î8ÿ�I26 –ÔâËØ„ŒsÛ|G]óÂóéZ®¡§ÙK‘ZË~3“oQȇcÔ€ô=…ÍøæòïÀ:$·öRYÜ‹UF†RK�¿*“ž~`sÏ5ÒQE�QE�QE�QE�QE�QE�å:µöŒŸíìöÅÍÖ¥&}¦Éæ/ý0ùÀË“œV¢€>p³])ô¿5¨ñgü%Rÿ�d}o“æG»Ï‘·_–»ZûFO‰vö{ bæëRоÓd@óþ˜|ˆàe‰ÉΫQ@iãOO´øÇà$’öÞ_¶ùêÒ…#t;bÜ3Ý‹ÏRH‹uÝ_Ö¼74—PÜxVÞþòÛW3«,I:B|µ0œgŒ‘ŽÕêU ½¬¾g’›L®d‘‰$» ’y<�=€ óÇŽ§³Ãþÿ� _öügŸŸ´eý˜g9çÊÇáŸzßðÛ¿á)ðÏý¿âiÿ� 6?Ö¬ýÏ›øíÛžÝ8¯n¢€ (¢€ (¢€ (¢€ å5ÿ�jZ_ˆ#°µ±‚k_²‹‰§vlÂ7•ÉU•é’ÇSÆHêëÿ�šÿ�pý­@Gqâ9¢IbFxÝC+­Ä„0=;yýþ&ÿ�Ÿ}#þÿ�Éÿ�ÄS%ÓntyëE@ð1-6œHUby-èí÷Xÿ�t’Õ£§ê6Ú¹šÙÉÚÛ$W‡Ue<©ö>Þ´G‰¿çßHÿ�¿òñoñ7üûé÷þOþ"¶h  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÙ¢€9¹õ?i×qM¨Xؾ–xž[G‘䇯ÌT¯+Ó§#“Œr:fŠæž RX¤PÉ"0e`zGQO¬[&âÆw½ÐÚ8ÝÛ|ÖR!œ÷#êÜÿ�xñÁ�TU ;VƒQßW‚î,yÖ³ I}Gp{0È=_ Š( Š(  ývúm/A¿Ô-ãŽYm`yÄrmˆÈé céÚÆ¿¨ù±‹]2 ¨HÚÍ4‚H³Ó )0$pkGÅò'kŸöŸÿ�EµO©i1j9–G·¼‡>MÔ\:g¨ôe8Sp;€@mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠuž­4WI§jè^7Ê€ˆnÜ'£`d¡9ãp­z�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(‰¿çßHÿ�¿òñÒx¬BÆ mÈ:žP·Üâ·h  ­X:ŒF¸Å®§ÿ�H´n©ÏyOf׊ժ:Ž•m©¢wÇ<Gt7²D}Tÿ�0rBª1j·:d©k®l Ä,Z„cH{òÍÏ¿Ê{ rŠ( Š( Š( FïÄÚ´õ嘴±ŠÊÖÞ;Éåp…Ìhû[�í?8�žLçŠÕßâoù÷Ò?ïüŸüE&™sßxŽ£I"{åWGPUµƒ ƒÔT^U߇mÖkÝ$u€eæ¶ìwtÿ�g–²0 mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÓµº‚öÚ;›Y’h$IäSP6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüElÑ@ÛüMÿ�>úGýÿ�“ÿ�ˆª±k:®~cñ ½œRq å³»FžMÀl>çå<r Ått×D–6ŽDWFYXdz‚(ÔV³½Ð¾}-ïOzÀ°ßõ…ÿ�aŽ=Ɔ¡k©Û}¢Ò_12UYuVSʰîPª(¢€ (¢€ (¢€ (¢€1<IâáØmf6ݤò˜’FP„gɘVÉíJHµ­Nx’X´ dÀet»„†¡w"¥Öä)áÿ�û?þ“OQK¦Üé3=ÖŠábZm9›j9<–ˆžý¾ë¸$µ�?ûWWÿ�¡rãÿ�¡ÿ�â¨þÕÕÿ�è\¸ÿ�À¨øª½§êVÚ¹šÙÊÛ$Æ×‰û«©åO±þF­Ð7ö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñU³E�cjêÿ�ô.\àT?üUU¼ñ©`«5dž®… ÿ�]2O˜†GÌUI$uÉ1é’::(ÍÌ <¤±H¡’D`ÊÀô Ž¢ŸX³é7=Þ†ÑÆîÛ¥²‘ Äõ#�ùn¼¸=E½;V·Ô·Æ¡àº‹u¬À,±}GqèÀ{@袊�(¢Š�(¢Š�+ÿ�šÿ�pý­]s¿óQÿ�îÿ�µ¨¢¬½GH7‹ë¾É©*…ÊÈ£ø$^7/_q“‚2s©E�fiÚ¿ÚnÆòi¨ Ë@Ç+"ÿ�~6þ5ýGp+Nªjm¶§n"¹C”mñȇkÄã+Aÿ�õt5‡«¯[k_Øe²¾•-þзrÜ´ÓvѹV6ó×  à�tôVGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP½‘öŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ãcRÒmõ/.F/ Ô90]BBÉ=p{ƒÝH ÷©Ã«\ió%¦¸#‚C{Ä3Ðÿ�«sèNbOO´øþZWþ ¤ÿ�ãϯ\BðÏ£hòÅ"•t}EÙX ƒ"€6è®:ÒmoÃڥŽ¡Ò¯'ÑF/ži-Ø«7ÊÍå0‡‚Iàã'ü$º·™ç}ŠËìÚ_bÏœþfß´ù±·ïŒÐ[EPGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÕ¯@^YÛßÚ½µÜ+,/÷•‡§ B ŽA¬µ]ø{å¿’K½,}ÛÂ3%¸ô—ûËþØéü]Ú·¨ £¬ˆ®Œ¬§ QN®gSŠãÂÖ“ê:J$–I—›N‘Ê Éå¢lœœ•Á¶sí>#ÿ� V•ÿ�ƒ)?øÅ�kÑYiñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@ôÙ#Žhš)Q^7Yd0ô"²¾Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb€ û-÷‡òÚzÉ{¦½d[2À?é‘?yØ'ýÓÀZÖ±¿µÔ­VæÒa,D‘*GPAäÜT>Óâ?úi_ø2“ÿ�ŒVUîŸâ9.þß§ØéVWüj2LðÈž@Ýìrv8È eËê3Ûie±µ[›³?˜²ÎÅÊm§.NO°­MR¸Õ,%–ꢚ+‰!e‰Ë)ØØÈ$@´QE�dhßòñý„ÿ�I ­zÈÑ¿ä)âû'þ“AZôu¥Ois&¡£ŽwmÓÚ¹Ä7'ÔàþØ÷Œ[ÓuX5%‘Qd†â{i†Ù">„zz{W«?RÒb¿hçIÚú|›¨±½=fSÝOê�W;gªx†âkËìÍ1䲘A$†úHćËGÜÊm ‡pr2z›iñý´¯üIÿ�Æ(^ŠÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ�׬»ýOro¬f6Zˆ�yê»–@:,‰";LûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ�uްd¹ŒÏPÁ+íÑÌñFø‡¶ã'V¹ûèuJÕ­®ôM&X‰S”#¡AGb0EG¢\kvz’i:ÂÛJ²C$ÖÓÇpÒH5+&cPÇ÷ƒ 1Àäg’ÒQ\–â]Zôè’]ÙY%¾¦ S9tÌ/(à®ÜÇ^õÖÐEPEPF³ÿ�!Oÿ�ØAÿ�ôšz׬gþBžÿ�°ƒÿ�é4õ¯@zŽ‘ö‹}c7Ù5$]¢`2²(è’/ñ¯'ÜdàŒœ®Ÿ«ý¢àØÞÃöMIq€¶VEÇq½yã<‘ZuSPÓmµ;qÊ£oŽD;^&Xrÿ�«¡  tW8úÆ¥£\[X_ØÜjopæ;k«A™p¬ÄH¬Ê€SÐẀ>è¹ý³}ÿ�BÖ«ÿ�-øõ�kÑYÛ7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõ�kÕ GI·Ô„nÍ$QdÃu Û$DõÁîu ƒŽAªÿ�Û7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõ�2ZâÂt´ÖÖ8ÙÛl7±‚!˜“À9ÿ�Vÿ�ì’AìOAµX“jwW¼3x[R–']íYXĹŒº–«áßœhº›è¨2ëq5»=¨ÿ�a„¤ºÿ�²yŽ0´ÚQ\¾µâ»Í2þòÞÛEkȬíÖye+ pðµÐX] í:ÚñP ž%”+u]À΀,QE�W;ÿ�5þáûZº*çæ£ÿ�Ü#ÿ�kPEEP\ïüÔû„íjè«ÿ�šÿ�pý­@Q@Q@Q@ÿ�‰¿ã÷ßö_ý-aÿ�Ì#þæýÉV牿ã÷ßö_ý-aÿ�Ì#þæýÉPyEPGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÕ¯@Q@Þ-ÿ�‘SRÿ�®'ùŠÙ¬oÿ�È©©×üÅlÐEPEPEP c÷ô÷¯ÿ�ômnøOþ</ì!qÿ�¡šÂ±ûúû×ÿ�ú6·|'ÿ�¿ö¸ÿ�ÐÍ�oQE‘£ÈSÄöOý&‚µë#Fÿ�§ˆ?ì ŸúMkÐEPFÿ�!OØA?ôš ׬þBž ÿ�°‚é4¯@Q@Q@d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö½d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ð5¡ÿ�È;ÁöÏÿ�Hå®ò¸=þAÞÿ�¶úG-vŸö—Ù—û(Z57}¨°_/?66ó»ÇlÐÊ*œŸÚ_ÚÐyBÓû7Êo8±o;ÌÈÛ·øvã9Ï=(³þÒûMçÛ… ·óGÙ<‚ÛŒxë3Æìç§  ”QE�dk?òðÿ�ý„ÿ�I§­zÈÖä)áÿ�û?þ“OZô�QE‘¬ÿ�ÈSÃÿ�öý&žµë#Yÿ�§‡ÿ�ì ÿ�úM=kÐEPEPXÞ-ÿ�‘SRÿ�®'ùŠÙ¬oÿ�È©©×üÅ�`ëŸñýâûGÿ� K]6ÿ�"Þ—ÿ�^‘è¹sþ?¼Qÿ�`èÿ�ô k¦Ð?ä[Òÿ�ëÒ/ý�PQ@s¿óQÿ�îÿ�µ«¢®oQc¥ø¶=béJéÏeöWy¾ýÙî®?‹;àr@:J) ¡”‚È#½-�Îÿ�ÍGÿ�¸Gþ֮йßù¨ÿ�÷ÿ�ÚÔÑQE�QE�QEÏø›þ?|9ÿ�aUÿ�Ñ2ÖüÂ?î`ÿ�Ü•nx›þ?|9ÿ�aUÿ�Ñ2ÖüÂ?î`ÿ�Ü•�w”QE�dx¯þDísþÁóÿ�è¶­zÍñ ­Å÷†õ;;DWžâÖH‘Y¶‚YHëøÿ�úºÔÚv©m©Äíe’6Ù42 ²DßÝeìB9ŽhåQ@Þ-ÿ�‘SRÿ�®'ùŠÙ¬oÿ�È©©×üÅlÐEPEPEP c÷ô÷¯ÿ�ômnøOþ</ì!qÿ�¡šÂ±ûúû×ÿ�ú6·|'ÿ�¿ö¸ÿ�ÐÍ�oQE‘£ÈSÄöOý&‚µëÖäišþ¡òWQºYmfë‡É6g³æ2pzƒÁ88Þ Š(  þBž ÿ�°‚é4¯Y7ü…<Aÿ�aÿ�Òh+^€ (¢€ (¢€ ȹÿ�‘ÇMÿ�°}ßþŒ·­zȹÿ�‘ÇMÿ�°}ßþŒ· kCÿ�w‚?íŸþ‘Ë]åpzüƒ¼ÿ�lÿ�ôŽZï(�¢Š(�¢Š(#Yÿ�§‡ÿ�ì ÿ�úM=kÖˆg[K½îeu´·¼i.'ÆR0J€·p2ãœ`rI¸e ¤FAèh¢Š�ÈÖä)áÿ�û?þ“OZõ‘¬ÿ�ÈSÃÿ�öý&žµè�¢Š(�¢Š(�¬oÿ�È©©×üÅlÖ7‹äTÔ¿ë‰þb€0uÏøþñGýƒ£ÿ�Ð%®›@ÿ�‘oKÿ�¯H¿ô\ιÿ�Þ(ÿ�°túµÓhò-éõéþ€(FŠ(  Ú…ý¶—§Ï}y ŽÞÜí×ð¹'€;“XzwŠ$y#·×´ÿ�ìÉ.N-Ù¤DûºFÍ€NÅOýÒÝ·¯,íµ I-/ Ž{yF׎E ¬=Á®Rÿ�LºÑ­åŠhdÕô^)Ξô äÌŸ›ö»�j+­�™t¸ÚãNÎdÓÁù¢°“Ûþ™ž?»Ž­c}m©Z%Õ¤¢X›# AAäx àƒÁ®OOÔ.t{xç³™õ}ÆWcy³Û¯ª² þéù‡mÝ+[ìñj!5Ï^B³L2ÄÃtdÃÝ÷—9m�oW;ÿ�5þáûZ´tÝ^=Až "{[è@3ZËËþÐ=Of}@Îÿ�šÿ�pý­@Q@Q@Q@ÿ�‰¿ã÷ßö_ý-aÿ�Ì#þæýÉV牿ã÷ßö_ý-aÿ�Ì#þæýÉPyEP;âYàÔÞ 9¯í­x½xœF<…@xv–0ÆO1†ÇÄ0Å«é¢+¥#»‰rp1ȇê‚q´óLÔü:Ïvú–‘2Ùê ̪Ã÷7^Ò(ïØ8ù‡@ÅaDÒM©É-™mÄ( Ïk7ÍÂŽ`8‘:"üÃÇ+@>Ÿ«´—?ÙúŒ"×Q�™ÊN£«ÄßÄ=GÞ^ã«\ä…ˆ‘´­VÕ­5gÙÙþlùk ƒ€'ï ž@Î*dÔ.´WX5‰<ÛBBŨ…Àà,Àp§ý±òŸöN�“Å¿ò*j_õÄÿ�1[5âßù5/ú☭š�(¢Š�(¢Š�(¢Š�á,~þþõÿ�þ­ß ÿ�Ç…ïý„.?ô3XV?@ÿ�zÿ�ÿ�FÖï„ÿ�ãÂ÷þÂú  êÎÖuUÒl„‹s+yVЃ,„p=‡“Ø{VSÔtË]VØCu![|n¬Uãl`2°äO#ÔÐu®©k««é½¬q]È„=¬¿<s¨êÑ’>qø;Å!–ïüNÓ^é¤Ç/5°ÿ�o¼‰þ×Þ÷rÃ'Rìaû6¾>Ña¸µ$ MØÉ·ý[Ò.ýÞ»o¬Ýh¸‹XÜØÿ�¢f1é0�¶=Bã$¤ŠXç…&†D’'PÈèÀ«Ђ:Š}a¾Ÿ>›#_hA$†SæKa¼åÏ%¢=Ï_î·|º´týJÛS€ËnÇ(Û$Ô«ÄÝÕ”òÿ�¯¥�SÑ¿ä)âû'þ“AZõ‘£ÈSÄöOý&‚µè�¢Š(�¢Š(�¬‹ŸùtßûÝÿ�èËz׬‹ŸùtßûÝÿ�èËz�æ´?ùx#þÙÿ�éµÞW¡ÿ�È;ÁöÏÿ�Hå®ò€ (¢€ (¦KO Ã*îŽE*ËêP-¿Šôû‹ãnë$0I'•mw MÃVÏ98Ýü9¡¬n´2é1™ôüæM8`ýL' ÿ�®gM½mÞ—6‰hÖÍnu-®ÃO2[tÆ6•ÇïPøÞêÃP¸Ò­ã–ÚI5]†Scy“B¿ìž²/·Þ·p�Kcm©Z­Å¤¢HÉ*x «ªÀòî"¬ÖZE¨mÖ´¸£¹‘F]~hn@ãlŠ;Ž›¾òûŒ©·¦êñß;ÛMZßÄ35¬‡æQýå=fCƒ�!Öä)áÿ�û?þ“OZõ‘¬ÿ�ÈSÃÿ�öý&žµè�¢Š(�¢Š(�¬oÿ�È©©×üÅlÖ7‹äTÔ¿ë‰þb€0uÏøþñGýƒ£ÿ�Ð%®›@ÿ�‘oKÿ�¯H¿ô\ιÿ�Þ(ÿ�°túµÓhò-éõéþ€(FŠ( Š( wPðìÜ˨èN–÷rÓ[HH‚äú°qÿ�Ûˆn1‹lì÷÷é,tÍm0ך}Èù&ì ¨àç¦zs¸ µÞVv¯¢Zk§¾+ˆ²`º„í–{©ü²Aî �eÅucâf× >›­Z 껀šñº6èèzªz0ÏM#ñ·ŠÍôúR^"Xý›Ï·™e>fàÛY²¼uóК«¨Dм~$_-•ÿ�Ðõ{rc]ý=bôÁù[ ';iúw‰µÉ­í#H­.…ij {ɉˆ\C\IµAÆKà¸�¿ý««ÿ�йqÿ�Pÿ�ñTjêÿ�ô.\àT?üUTþÑñüúé_÷þOþ&íÿ�Ï®•ÿ�äÿ�âhßö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñUSûGÄóë¥ßù?øš?´|Gÿ�>ºWýÿ�“ÿ�‰  Úº¿ý —øÿ�Gö®¯ÿ�BåÇþCÿ�ÅUOíÿ�Ï®•ÿ�äÿ�âhþÑñüúé_÷þOþ&€z5}[QÑ÷èò[Ekz.%‘î#`G"ôœå…Wok;þί`lÿ�´ÅîòÎ$ÛöŸ?Æ3Û­^²ÖuS­ÛXßÚÙª\G#«Á+16õG÷«¡ Š( ¨jº5–³Gwßo†hج·÷‘‡ þ‡¡Èâ¯Ñ@&§ Ù¢Zx•|ÛQ 6Ú¼#ËòÛ¢—#˜_œn)ÏUÎÚ¿µq¤/Ù|@VçO‘u-£�1:Žýð6žá{õN‰,mˆ®Œ ²°È õW+s¢^h[¤Ñã7ziÿ�Y¦³|ÑþI<cþ™ž?ºGB�ÝgGÔ­ôK›= íÄ{RÑ¥ `ÏC“‚Ÿì“Àû§�-jÿ�jêÿ�ô.\àT?üUsZN¢–7°Çáé„ú{¬q§¸*-ƒ–ù¢;°¾Y’p kNËZñ兽гÒÔMÈžN2þï½�ijêÿ�ô.\àT?üUÚº¿ý —øÿ�U?´|Gÿ�>ºWýÿ�“ÿ�‰£ûGÄóë¥ßù?øš�·ý««ÿ�йqÿ�Pÿ�ñTjêÿ�ô.\àT?üUTþÑñüúé_÷þOþ&íÿ�Ï®•ÿ�äÿ�âhßö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñUSûGÄóë¥ßù?øšdÚ·ˆ¡‚IM¦–B)bòvîÐh4-`XéSD–Ñ][“$3¹#¾áó.yVׇ´ë­7O–;Æ„Ï-ij7’IQ¹‰�«ºuѾÓ-.Ê3Â’•;w(8ýjÍ�QE�!”«�A ÷®nãE¹ÑÁ—FO:Ï«i¤´Ó</û‡åô+ߥ¢€8½:w´FºÐ›j¬úd¿»òØuýSÿ�°p§ýœî­D[=þ&zMÉ´ÔáýÛ±L2ž¾\ñœdsÐò3•#96µM +ÙÅí¬¦ÓQQp‹àtYø×Û¨ÉÁ¹«ÙÖÚãÎÔ\èÚ½¼LRé>hæAÉ�ô‘{”#pÎF€4´Ùõë;½RK³5ÍДnã*@†8ò2AÁ(HÈqZÚº¿ý —øÿ�Y‘kÚüÓEoýe À³†âdšgYÚAŒ8â<‘Øœdã5cûGÄóë¥ßù?øš�·ý««ÿ�йqÿ�Pÿ�ñTjêÿ�ô.\àT?üUTþÑñüúé_÷þOþ&íÿ�Ï®•ÿ�äÿ�âhßö®¯ÿ�BåÇþCÿ�ÅQý««ÿ�йqÿ�Pÿ�ñUSûGÄóë¥ßù?øš?´|Gÿ�>ºWýÿ�“ÿ�‰  Úº¿ý —øÿ�Q[i^xŽÚòçL{8 ´ž"Ï2>æwˆ€“Ú6¨´|Gÿ�>ºWýÿ�“ÿ�‰«:6«w©^Y_ÁmÁ 2«A#0`æAƒ:y­�eèþÖm‡ ãØ}34,åäÄ/à€ÞÏ^Õ×ÑE�QE�QE�ƒ Éï{£:ApÄ´¶ï‘ÁîHq¿ÛêŒoQ@M³¹¾šãK'OÕS›» ‘„—¶]GãTÏOâÆÚÕI¬|L¢ÞušÇVµ† 4ñ½£!õSцrŽ©£Úê©—|wa¹ˆí’"º}prpkš¿‰á–mu|¶Wÿ�CÕ-þA¼ðzÆç¦ÊÝ9ÎÚ�žþûQµÔtxµ;+‰¾ÍxÒ›Ë+g•$O"TÉT ÈÛAŽr ä øIl熫ÿ�‚›¯þ7Y)â‹Û¹¶»´7ó[Ë K=¹T4‡X1¸$ ŒxÈsþGþ…ÛŸü ‹ÿ�Š  _ð’Øÿ�Ï Wÿ�7_ünøIl熫ÿ�‚›¯þ7Uá!Ôè]¹ÿ�À˜¿øª?á!Ôè]¹ÿ�À˜¿øª�µÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãuWþGþ…ÛŸü ‹ÿ�Š£þGþ…ÛŸü ‹ÿ�Š  _ð’Øÿ�Ï Wÿ�7_ün³<A¬Á¨h––Öº£Ï4{QN—r¹9õ1€?³ÿ� £ÿ�BíÏþÅÿ�ÅSá'¹ŽâÙ.tK˜cžt„IçDÁK@lâ€3<Ea®¶£«?IK¸o¬Ò“íKV àä÷…uZM¼–z=´  !·Ž7ÁÈÈP \¢€ (¢€ (¢€0ücâH<#áMCZœ+}ž?ÝÆÇd‡„_Ä‘ødÔ~ ñe—<3m¬Y¥ÆÙáÎL2¼‡ùPAïRø›Âz?‹ì¡²ÖíÞâÖ)DÂ%™ã€ ´‚x'󬯇>Ò|=ᨿ³¬…µÄ Gx|Æo2hÉF8$ãæ Àéš�ë'‚«y ¸‰&†E*ñÈ¡•ê<T¯ô-7S[uº¶ -Áìv` Ò8àqíZ4Pü"'üûMÿ�Rÿ�ñTÂ!¢Ï´ßø/ÿ�[”Pü"'üûMÿ�Rÿ�ñTÂ!¢Ï´ßø/ÿ�[Ném$ލР31À�u$׈xãºÏÄíGO¼.tJ}šq#ýK(Ú£Ø8>ŒG© Uÿ�„CDÿ�Ÿi¿ð*_þ*øD4Oùö›ÿ�¥ÿ�â«rŠ�Ë²ðæ•§^-ݵ³,ê¥¼ÎøÆâ}fø·ÇZ?ƒgÒ¢Õ$*u %H#÷kÞFÿ�d ýk¦¯0øðËIñF±g«ê7úŸ™$ÐÙù1ÊŠ‘ÆN>PPrsÉ=ý°éùÈÈ¢©i:riE®Ä÷ÛF"In4Œ£¸€2qíWh�¢Š(�¢Š(±Zù— x„— gH�À zœqY àÝ 4TKIU� ]K€?ïªÞ¢€0ÿ�áÑ?çÚoü —ÿ�Š£þ þ}¦ÿ�À©øªÜ¢€0ÿ�áÑ?çÚoü —ÿ�Š£þ þ}¦ÿ�À©øªÜ¢€0ÿ�áÑ?çÚoü —ÿ�Фohl¥ZÖRÁj—ÿ�Š­Ú(8!ŽÚÞ8!@‘D¡G`�©(¢€ (¢€ (¢€ Š{h.•VâåTu‘Dˆ+)Èažàò KE�f_ø{LÔîþÕunÍ?–#Þ²º ’ÚFpXþu[þ þ}¦ÿ�À©øªÜ¢€0ÿ�áÑ?çÚoü —ÿ�Š£þ þ}¦ÿ�À©øªÜ¢€0ÿ�áÑ?çÚoü —ÿ�Š£þ þ}¦ÿ�À©øªÜ¢€0ÿ�áÑ?çÚoü —ÿ�Š«šn‰§é2M%”7˜*ÈÍ#9`¹Àù‰é¹¿:Т€ (¢€ (¢€ (¢€ (¢€ dÐÅq Ã<i,R)WGPÊÀõ¢ŸE�cIá}4èé¦[,¶$Âu0?Ì6ì峞}{qØT?ð‹ú êß÷õ?øŠß¢€0?áôÕ¿ïêñÂ,?è7«ßÔÿ�â+~Š�Àÿ�„XÐoVÿ�¿©ÿ�ÄQÿ�°ÿ� Þ­ÿ�Sÿ�ˆ­ú(þaÿ�A½[þþ§ÿ�BøR´[Ë6§©N •fXä•v–S‘œ(ï[ôPEPEPEPXv'û3Ä7z{°_wké¿*Çï½½ nU cO}FÈ,ˆnáq5´År#tÈã ‚TŽáˆï@è¬íV]RÝÃÇä^Û·—ul[&ÆqžàŽAî5£@Q@@ ‚2PkŽÏÆ“F¨¨·šte€îd`ßú=?![•…âPlÖÏ[@s§Kº`;Û¸Û/à£Û1@´R++¨e!”Œ‚A´�V7Š[fˆ%þnífsŒáâ6cù[5GZ±:ž…¨Xƒsm$ ç,¤Z�½ERÒ/†©¢ØßãoÚ IJÿ�t•ÀñWh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(VÒ%žâ=OL‘-õXWj»çdéœùRcªúªyÁ±¦êÑjádk{Ø@óíeû鞇єöaÁú‚…QÔ4«}KËy ‘\BI†âÛ$DõÁôõ ãhõ€ÚµþˆëP=ŰãûBÒ"ÀYc)õ\¯s·¥m[\ÁymŬÑ̓rIV Ž´-#*º•`HÁdKE�`é ðxzgÄaKéÎÇïÂ:Çžì=Jí<Õ½TµM2 ZÈÛÌÒFCŠh›kÄ㣩ìGäy ‘T´ÝZdº]'W-DåËŒGx£øãô8ä§U÷$jŠ(  /°µŸTÑÛ!í.ZhÁa˜™`ÆDÿ�¶f·k ZS¦êúú«‚3èàbÿ�ø¿Ý/߸ rB(h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+ãÃVßi’ïMšm.òFÜòZSêñQϹ½­ª( oõÝ8mÔ4Ô¿Gü|éÇ }Ú9Eg>ÕrÇ^Ó5ͽ½Ú}¤rÖÒƒËõ€aøŠÑª·ÚmާŠúÎ ” M|Qž†€-U{ë ]FØÛÝÂ%Œœ€IOb¤r¤v#V`ðóZø–jú…šÄM ž?ÊPÄe+@>&µ 2éz‚w ÉjÃðýà'ñ_€_F\m“W²^„Q|ádùVöcWtÝkOÕË;ÒÇİ8),GÑѰÊ~ U?íë¸�ûg‡õ8†>g„G:çØ#?÷ȪZ–§ámGgöª<.Ÿêæ»´šÙãëÊÈÊ¥{òï@9”«�A ÷®j;‡ð“ýžõ™´/ùwº Ÿ±ùç'ûø_°áºkÃ{fœi>8´*òh®•}²_ósÒ´a»ñ +m£Þ¨<ËãÅŸm¾[óÿ�  ˜'†êžÞX副VHØ2°ö#­I\þ›k4¯Ú?áÓìžl‰®à• ˜ÆyÂÙ wþUÐPEdx«Q»Ñü'«êv>OÚl­$¹A:FØ¥°@ òxÏá\ŽãÍR ¿ §ˆ–ÀÛkúkßAqiÇäˆJèêÎû€S÷J�ôZ+Êõ?ŒÞÙXÂ+j³]]jvÖL×[#Yƒl$ îm­…%HÚwm8¢_ˆv‘Ù^Ms¥êA¬ígºb±"‰ÒT™£ à€¥Ãí$tÍ�vTW–ë÷ø;ZÕ¼?e$7zLvSɧ)$wX)·Ë“ƒµäñÓ_†|S7ŠGˆ &²m6þ[äŸk†tQ’B¶xcÈȃœà§¢¼«ÃŸõûÂÚæ±›%†¿~tý–‘<r[J]ÑYØ8%x\{Ô¶_ †mNcI½I ¾¾†¶Ž3˜íQ^@ٗ缾')Çñ@¡Epëñ_ÆÏP¹?jlͨĪ‰ç …ß R̼åÊàœU9þ3xr ÁµÔžj—†Xã—Êi¼‚Ü?;dùN>£#š�ôJ+Ï|_ñ-´MW¼Ót›©ŸO—Êk‰U „«@ã–ã g¨ÊóZsüFÒ!Õ^Åm¯eU½:hºSÊkÍ»¼€Kƒ¼ôÉsÆh¯¢¼òËã¨Ígµ†¨Ó^À.-Q’$óW{!ùš@ªC#˜Œ�ÎF{ÛKµYÁqäË›¿•2ítÈÎÖˆèE�MEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSÛ[Ü®ÙàŽQ‚1"ë×­g¿†<?+n“BÓ½ZÒ2•jÑ@Pxg@µ–9mô=6#!‘ã´J‘Ђ«EC[Ò£×t;Ý&iæ‚ÈZ ¡Â0øÈÈéÞ°´¯‡Ú^ö´]_jf²6ÂõÓ@T)Uª9�Ç,Gzë( -þYI§é6­ë&×HºŽêÊ3$'Êhóå®|¼•\3Î$àa–Ÿ ´{[‹©›PÕn^êÂ}:Sq21h%b쥶n$1$1$ö$€vôPƒš1Òõ8êúÏÙõ­a¸d9d·�D3åq€N¸®§G𽮄5Ÿ°]]¡Õo%½³+yRÈ>b™_`pÙé[”P ü4Ò´ôÈEþ¥}k¥»Kcmw$f8dbI|")fË6 ŒñŠÎ“àî5ÌÓɬk,óKy3åàåî£ÌÕwP1é^‰E�p6ß 4KT¹UÔµf3% W2Æ'¶P°È„F0Ê9È990ýwá^›â;››OZÖe–âÉ,d`ð.bYVaÒ.õôWwE�q:çÃ;Eu£­k-Êyo†€žbÉ·>VHÜŠFsŒ`` ó|9Ò%Õd¾[›è‘¯Ž¤-QÓÊK»|ð ¼uÁ%sÎ+¯¢€<óNø?¤i/löZÖ³·³{Ë@á¡iR¬­ ó9<ƒÛÒ»½>Ê-7Mµ±€»Em B†FÜÅT�2{œµbŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ����hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Performaf4.jpg�����������������������������������������0000664�0000000�0000000�00000034562�15030617045�0023613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ� "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ +–¹ñ>¤Þ#ºÒ4Í*ÎåíZ5O¨y•u æ,~[nŒnÁlç*ÀŠÃÐ>(M©Øh–£¡­Ž®\›;Yâ¼óŠL”,Šc\n(pAo|P¢Ñ\Ö—âkÝW]¸³ƒMµûµÌ¶ÓÉöïôˆJdxvp®@Úw†.«âì¿hYùŸÛhÙ8—_•ó•Ç9à{ŸN@: (¢€ (¢€ (¢€ (¢€ (¢€ (¬_ëÇ@³¶•aÞæåmÕ®n<ˆc%X‚òmm£åÚ89fQÞ€6¨®¼uâ!â_ìáKSzºiÔ™U'1‰ {Wà±##8’:U¤øƒ£¤hWÚ5¤lG+B/®þÌ£ ·|ÈI .9ØÇ<PkEP–îýtd¹OC~Ñ6²\U}¹*dÁàŒàÕ?ø„x¯Â¶à´’Ð]¡o!Ûq\1^¸  º(¢€ (¢€ (¢€ (¢€ (¢€ (®ZÇÄú–§«ÝÚÙiVo´ó[ÈϨmš7MÛL‘ygj9v°8í@MçZÅ µ; RÔt5±ÓµË“gk<WžqIƒ2…‘LkÅ-ïŠè</âkßâãû6ÖŒ²Ë÷›$nT±ìdäe°AÒÑ\½ç‹ÞÇÇšg†¦²‡f£²G8»Ó`ÏÍÞt1'ž:Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢³<C¬ C¸Ôš!(ˆ ÚϱFç ¹›jÙcƒ€   :+†Ö<q¬èÚ~“<ºŒ²êz¤zt>VªZ&óc8‹%N”Žù©Sâ�[ wízoÙµ=hb»¶ió‰HÙ'›·ý^ bÅr“Š�í(¬½"ÿ�Q¿Ó¤žîÆÖ ƒ·¼óâ™0 ¸}ŠprGÝíU|âdñ‡„ìµèíZÕ.Œ›agÞT,Œœœ»søÐõæmñuödèÆH5¹ä·ÑäûV>Ðé2Ä|Á·÷c-FîJЇâ@»k; =1$×./î´ö³{­±Ç%ºî”ù»F6‘òó¸t òŠÈðLj-|Uá«nÍY`»pFêŒ VSô`GáZô�QE�QE�QE�QH rB)h�¢Š(‹Ö<¨ë:ÝüÚÜ š}á¼³Ûaûä<â6—Ìù¢Éå@Ž3Ò¨x{áŒÚVŸ¡išŽ¶—úv‰r×v°Ggä–˜³0i»givÀ}ó^‡E�qÖž ¼ÿ�„¿Oñ£¬Es5„2ÂËÉy•Æ13ïo3oa…皟]ð¥þ­ã=_‡V¶·MÍòíÞɤ2y«¶L¿˜¿Â8àòsÒº¢p2i•Ð:0eaAÈ"€Š( Š( Š( Š(Ï8 Š( ±üA¥_ê¶ë•õ­ºtš+»?´Å2°Þ½1ë[Pši? µ=PµºÒüR¨ÖúWöR´öG™ ¥ó@ ¼�­ χ-ÿ�”^Ó5(-ôhm¤ŠêÈ\1bÅŒªw¨Y2Äçgœq]ÝÏê~½¸ðjhf°Ör¬ oöÙàÈ •$XIõ<UŸ iZ†£¥ž§«iÜ+ß‹e·P¼UxP�+X:—(n�¹äœÐþT´�QE�QE�QE�QHH$à{ÒÐEP\\^ Ô[ÅzýÞ··v6óAnÑØym qç·˜|мÞyë]¥æú?ÂË› GÑï<@·6Z<¯sd°ÙyL'%ÊÈäÈÛ¶—$·ß5¹¡x>çMñ]߈ïõ8no.mÕÒÖÏìѸVÝæ8ÞÛ¤í»#Ž1]e5Ýc]ÎÁWÔœ �åµ/\ëzåÞ­©Ã=ž~/¬áŠÏË–6„iwÉžH ÀÉ⺺( Š( Š( Š( Š( Š( ¨jö—×–ˆš}ôV“,‹Moç#®*ɹr}E_¢€<Øü,¹‹FÓ¬m5Øb{=oûo-`L^h9XÒ1 ÙÉùrzõ·gàëëíè5˜Û[Ô®k»©l÷E"¢X¼ à„ ¾O½uÔP1á Má_^iöš„osqq-ÒÈÖØ†~v¤A¸AŽw¯5•áÿ�ø‡Â^Ñ4M7^†h,¯wÌßaTómÙ‹:1gbY°Ëßh#5ÞQ@fßeÇ´cƒDžK?²ƒä;̲Ÿ0îýàÊà·ƒÖ´!øl-ÏP³Õ=rßPºÔñíwFò\.ÙG•¼aq·7GZï(  øz×¾±Ñ,ÙžHö‡~®I,Ì~¬Iük^Š(�¢Š(�¢Š(�¢Š(Ît/ XÚèVz®‹a~“G¾æÎkxÙØ÷h™‡ÕIÚ{m9'¥°Ñ<'©Ú‹‹]JdÉVSbŠÈ겕ʰî5cÂ_ò*i¿õÄ3RßéK“¨iÒ‹MG�6å'¢Ê¿Ä=Þ^Ç‚�ÏøE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü*M7W[¹žÎêi¨Æ»¤·sœï£{ŽŠÓ  øE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü+^Š�Èÿ�„Sßô/é_øøU8tá·– ÚÀ¶ò¿™>œÆ®q÷£?ÂØtü§ýžMttP=;TµÕ"g·r3¶Xd]²DßÝu<ƒüÇ# ƒW+7QÑ㽑n ™í/ã]±ÝE÷±×kŽ¿ìŸÃš†ÓX–+¤Óõx’ÚñÎ"‘ ònÜ'£°yëÀf€6(¢Š�(¢Š�+‘ñ7‡¬µÿ�éqÜÆžlvWO­¾Ö�V0ù×±Áud\ÿ�Èã¦ÿ�Ø>ïÿ�F[ÐM–• ‹µÓµ_ é÷Ì–Ëg•rS#®9(yãæ:ßðŠxsþ€WþÇþ~öÆÛQµkk¸„±6Ar#AäÈ<ŠÉûmׇØGªH×oDÔÞ„zLoúh8þö: ÿ�áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð­`C(e ‚2ïK@ðŠxsþ€WþÇþÂ)áÏú�i_øøV½qàÍ äŠâÏN´Óï mð]ZÛ¢:7å†ÇÇšš×WšÚæ; f4‚áÛd7 Ä'Ñs÷ý†çж ­šŠæÚ Ëi-îaŽhd^92°÷€%¢°vßøýX›QÒ‡ðd½Å°öï*û}ñþÞp6-níï­’æÖdšUÐä�šŠ( Š(  o"¿ƒ5Åu §OŸ Œƒû¶¬3á]'ÃÄ“ Ù_é9ç6i%Å·èZDüصÛ{Åò'kŸöŸÿ�Eµkп‡<-uož‹£Í Š$ŽÖ&V¡EKÿ�§‡?è¥àáL¹Ó.tû‰/´M‹ÏbçlS“Õ”ÿ�ûô?Ä;‹ºv©o©Ææé,GlÐJ»d…½{{„r Ð_øE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü+^Š�Èÿ�„Sßô�Ò¿ð?𦷄¼6êU¼=¥#(ÿ�¶h v + ıiÐ5ÖŒ™ÿ�DŒ~úØ’Sþz/S´üÝp[…­»+ÛmFÕ.­&I¡~އóÐŽ„A©ë"óG‘n^ÿ�I™m/›™ ÅqŽÒ(ïÛpù‡@Å�kÑYš~°—sµÌ-g¨¢î{i$ï#tt÷;€x­:�(¢Š�(¢Š�(¢Š�+„]&ò}SVÔ"¹Ôn¡Žõ£{Ôf„Ú­˜¶¸²Çå<UïÝÖ6þ¿Zÿ�°‹ÿ�è @ì4½Sµ·z«&J²RéYuVS&U‡py«_ðXÿ�Ï}Wÿ�×_ür¤4—'PÓ¥º�ÆRp:,«üCÐýåìpH/Óµu¼™í.akMB5Ý%³¶r:nFþ4÷Bâ€"ÿ�„jÇþ{ê¿ø6ºÿ�ã”Â5cÿ�=õ_ü]ñÊ×¢€2?á±ÿ�žú¯þ ®¿øåðXÿ�Ï}Wÿ�×_ürµè qt;éï´ynî‘Áól.¯d‘['%£21 äúð}W$Ö¾ªZê´–îw!Û,R.Ù"oAþ}FAÍ\¬ÝCGŽòe»‚W´Ô#]©uÇ÷\?Ù?QƒÍ�iQYšÄ‘]¦Ÿ«Ä¶·Žq ŠssþãŽJzãp«^€ (¢€ (¢€ (¢€1¼%ÿ�"¦›ÿ�\Gó5³XÞÿ�‘SMÿ�®#ùšÙ  zŽ™m©Â©:°xÛ|SFvÉy[±ýÈ9Š¡§s¦N–zÙ\9 ú.Øå=•Çü³sÿ�|·nNÑ·Lš®`x'‰%ŠE*ñº†V¨ õ�ú+ð·†4 ¼1§É6‰§K#D <–¨ÌÇÔ’2O¹­øE<9ÿ�@ +ÿ��ãÿ� �×¢²?áðçý�4¯üü(ÿ�„Sßô�Ò¿ð?ð  z†îÒÞúÙí®¡I¡a‘ÆA¬ïøE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü( ×þÿ�XgÔt±üx/ql=ûʾÿ�|·ÔlÛ\ÁymÅ´ÑÍ ƒrIVÄVoü"žÿ� •ÿ�€qÿ�…Uðõž¬ë¶ö6°ZÂ'ˆˆàŒ"äĤœ(¡¢Š(�¬‹ŸùtßûÝÿ�èËz׬‹ŸùtßûÝÿ�èËz�פ A¨4´P±ºÐI—IˆÏ§ç2ià€cõ0“Àÿ�®gî•èÚ–7öº•ªÜÚJ$ˆ’:`©UäÜEY®cQÐô›ÏÙIu¦Ú\4¶&O:%pÅ^�¤‚1ŒõÇÓÑYðŠxsþ€WþÇþÂ)áÏú�i_øøP½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�kÖEÞ‘,WO¤J–׎s,n“sþøý±Èï¸ Qÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�K§kÞÈÖ³Âö—ñ®é-eûØé¹OG_ö‡ãƒÅiW)¬øE±:eÍž‘ao:êáe†Ù†\g ×W@Q@+ÿ�‘;\ÿ�°|ÿ�ú-«^²<Wÿ�"v¹ÿ�`ùÿ�ô[V½�›©i {*]A3Zj ±\Æ2qœíqÑÐ÷SõÒ¢€2¬5gk¥Óõ8E®¡‚TLsÕ£c×ÝOÌ>˜'V°¼ikowà½en!IBYÍ"nÚÊ„†„õ7ü"žÿ� •ÿ�€qÿ�…�kÑYðŠxsþ€WþÇþÂ)áÏú�i_øøP½‘ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�\Ô4Û]NŽå (Ûã‘«ÄßÞVƒÿ�êéY£R»ÑE­8–Ï8RU ÐLÛ)ï·€fÿ�„Sßô�Ò¿ð?ð¤ÿ�„OÇþeý+ÿ��ãÿ� �×9¡µ‰áHb·Ñ#H¡Žöñ4Pªª.d��:�;VÝ�QE�QE� ¯Ö¿ì"ÿ�úVÍchëõ¯û¿þ€”³Tõ.ÛS‰pË$m¾£;d‰¿¼­Øþ„pAUÊ(ßS¹Ó®"±ÖŠfF ò ±ÌOEaü{tnÇ'hÚ¨î-ặ’Þâ$š«Ç"†V¨ õËèš¼ï©Ç5æªëëEþÓ¸PˆPÇ'¯>¤ÐYEdÂ5cÿ�=õ_ü]ñÊ?á±ÿ�žú¯þ ®¿øå�kÑYðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9@7V–÷ÖÏmu M Œ28È5Ž^ÿ�Ãäù†}GKïò÷ãÜu•}þøï»¨Ÿþ«ùïªÿ�àÚëÿ�ŽQÿ�Õü÷Õðmuÿ�Ç(JÞæ Ëxî-¦I¡nI#`ÊÃÔR×1¦é6º/‹š rÜÙÉ<©%Ô’†“z øv<ã½tô�QE�QEá/ù4ßúâ?™­šÆð—üŠšoýqÌÖÍ�QE�cxKþEM7þ¸ækf±¼%ÿ�"¦›ÿ�\Gó5³@Q@Q@ci_ò0ëßõÚýµ³XÚWüŒ:÷ýv‡ÿ�E-�lÑE�VEÏüŽ:oýƒîÿ�ôe½kÖEÏüŽ:oýƒîÿ�ôe½�kÑE�VEÏüŽ:oýƒîÿ�ôe½kÖEÏüŽ:oýƒîÿ�ôe½�kÑE�QE�QEâOõý„mÿ�ô1[5âOõý„mÿ�ô1[4�QE‘â¿ùµÏûÏÿ�¢Úµë#Åò'kŸöŸÿ�EµkÐEPGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÕ¯@Q@Q@Q@ÿ�\ßö½ÿ�Ò™k^²<5ÿ� ¹¿ì!{ÿ�¥2Ö½�B·Vïtö«q\"†xƒ‚ê§¡#¨Ô¬ ¤—böØÛDH’a*ìB89làbž¶v©y%â[B·R Gœ Ê3€[©'Þ¢Nš,&±} ³˜±–ßÉ_.BÇ-¹qƒ’rsÖ€-«+¢º0eaAÈ"–‘UQBªŒ��´�V6þ¿Zÿ�°‹ÿ�è [5 ¯Ö¿ì"ÿ�úPÍQ@chëõ¯û¿þ€•³XÚúýkþÂ/ÿ� %�lÑE�QE�QEŒÿ�ò:Áÿ�`é?ôbVÍc?üްØ:Oý•³@Q@Q@Þÿ�‘SMÿ�®#ùšÙ¬²]øwçÓ¢{­/«Ù™ Ì9ê¿ôÌÿ�Àºv,ïmµ Tº´™&…ó‡SÜ} ‚ Œ�žŠ(  o È©¦ÿ�×üÍlÖ7„¿äTÓëˆþf¶h�¢Š(�¢Š(�¬m+þF{þ»Cÿ�¢–¶kJÿ�‘‡^ÿ�®Ðÿ�襠 š(¢€ ȹÿ�‘ÇMÿ�°}ßþŒ·­zÍÔ´¯µÍ嬿×P…JÅ8]À©Á(ëüHHpGPAæ€4¨¬½?Wóî …ô?dÔTn0–ÊÊ£øãl ËùÜ ŒêPY?ò8é¿ö»ÿ�Ñ–õ¯Y?ò8é¿ö»ÿ�Ñ–ô¯EPEPEP7‰?Ôiÿ�ö·ÿ�ÐÅlÖ7‰?Ôiÿ�ö·ÿ�ÐÅlÐEPGŠÿ�äN×?ì?þ‹jרn­`½´–Öæ5– ¤ˆÝOV7Únü9òßI-Þ’Ëvß4¶ÃÒ_ï'û}Gñwz�ß¢šŽ’Æ²FêèÀ2²œ‚B :€2<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶­z�(¢Š�(¢Š�(¢Š�Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–µè�¢Š(�¢Š(�¬mý~µÿ�aÿ�жkK[ÍîæöÆ7¼³¹”ÍskœÊŒ@â'ïPÿ�ÀOHõ^ÊúÛQ´K«I–X_£/¨à‚:‚EX ±´õú×ý„_ÿ�@JÙ¬mý~µÿ�aÿ�Ѐ6h¢Š�(¢Š�(¢Š�Æù`ÿ�°tŸú1+f±ŸþGX?ì'þŒJÙ Š( Š( ²/4™¢º}GHt‚ñ¹š'$CsþøÀÈã;€ÅkÑ@úf­£æBѽ½ì8óíeÆøóÐñÃ)Áà ƒø4*†¥¤Ã¨ˆäÞö÷päÁu‘×{©â«ZjÓAtš~°‘ÃvçΙÜÿ�»ŸºßìO¡`  ð—üŠšoýqÌÖÍcxKþEM7þ¸ækf€ (¢€ (¢€ ÆÒ¿äa׿ë´?ú)kf±´¯ùuïúíþŠZ�Ù¢Š(�¢Š(¦¡§[jvâ”'kÔ•xØteaÊ‘ê+6-JçG‘-u©ÀÄ,:ˆPªÄôY@áßî±ô$-nÓdŽ9¢x¥ExÝJ²0È`z‚;Š�ud\ÿ�Èã¦ÿ�Ø>ïÿ�F[ÔU߇y·Y¯4žð ¼Ö£ýŽîŸìòÃør0¡EÔ¾'ÒnmfI “N»)"‚<Ëz�Ý¢Š(�¢Š(�¢Š(ÄŸê4ÿ�ûÛÿ�èb¶kÄŸê4ÿ�ûÛÿ�èb¶h�¢Š(�¢Š( ôë­F¸Ñ£ómXî—MÜ{´$ð­þÉŸöNIÓÓõmNÛϵ“r†(êÊU£aÕYO*ÃÐóV«.ÿ�Hin´4ù…¦¢�M¹I”tYWø‡¡ûËØòA�gŠÿ�äN×?ì?þ‹j×®WZÕÅß…5ë;¨M¦£›;=»¶r<¶Ñ¿3Ütî⺪�(¢Š�(¢Š�(¢Š�Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–µè�¢Š(�¢Š(�¢Š("÷I–;§Ôt‰ Öÿ�[ÿ�©¹ÿ�|ÆŽG}Àb§Óuhµ$-ÛÞŸk/ß=£)ÁÃp@Ъ–•¢#}ïÔ$˜.¢À’"zã<p2§ ÷~±´õú×ý„_ÿ�@J[MVk{¤Óõ„Hnœí‚á8†çýÜý×ÿ�`ûà°„Ð?×ë_öý(fŠ( Š( Š(  gÿ�‘ÖûIÿ�£¶kÿ�äuƒþÁÒèÄ­š�(¢Š�(¢Š�(¢Š�* Ë;mBÖK[¸Rh$dqúýóÚ§¢€1 ðž™mC šœq Âªê— ôó*OøF¬羫ÿ�ƒk¯þ9ZôPGü#V?óßUÿ�Áµ×ÿ�£þ«ùïªÿ�àÚëÿ�ŽV½‘ÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�㕯E�dÂ5cÿ�=õ_ü]ñʵ§é6š_œm„Û§`ò<×LÌ@�|ÎÄôŠ»E�QE�QE�QE�?…´©õ¾òî!¸`ÀµµÜ°¸‚ÇÀdí\žûG¥lÑ@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9ZôPGü#V?óßUÿ�Áµ×ÿ�£þ«ùïªÿ�àÚëÿ�ŽV½‘ÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�㕯E�d/†´åšY¯åhd ›Q¸‘CAÚÎAǸ­z( Š( Š( ŠÏ³ÔóUÔmÒ5û=¡Ž/3<´¥w8Ç VŸRGjР ¶§ë–f×P·Æs‚«.FÖ# pyƒÁªÿ�ðXÿ�Ï}Wÿ�×_ürµè  øF¬羫ÿ�ƒk¯þ9Gü#V?óßUÿ�Áµ×ÿ�­z(#þ«ùïªÿ�àÚëÿ�ŽQÿ�Õü÷Õðmuÿ�Ç+^Š�Èÿ�„jÇþ{ê¿ø6ºÿ�ã”Â5cÿ�=õ_ü]ñÊ×¢€+XØÛé¶‹kj®±+3|ò3±fbÌK1$’I<žõfŠ(�¢Š(�¢Š(�¢².<I§Gpö¶î÷×jvµ½’y¬§ÑˆùS¯ñ‘ZÀäŒ{�Z(¢€!»´·¿µ{k¨Rh\a‘ÆAÿ�ëûÖ-§†%°ó…¯ˆuhÖiL¬üà¼ñ<�2I'’k ¢€2?±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš×¢€2?±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš×¢€2?±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš×¢€2ì´VµÔüúåìÞI…|ñ ¤‚q±œ×5©E�QE�QE�QE�QE�QE�QE�QE�VMþ³6™tßiÓ.šÇ�‹»eó¶úï~qõ‡©­E�V±Ô,õ+qqcu Ì$‘¾' AÇB=*ÍdßxwO½¹7j²Z_µÚ?•)ôÜG=˜íU¼ßéDù±G¬Úã‡l7*=Ôõ?Ý4¿EféÚöªJÐ[϶édµ™Ls'¹FÁǾ0{ZT�QE�QE�QE�QE�Uk;ØoDþVàÐLÐȬ0C)þD`b*ÍbÅþƒâéâé¥n'^å¬XGüJ4_÷Á  ª(¢€ (¢€ ­¨ßE¦i·7ÓçÊ·‰¥`½H8æ¬Ö·þŸªiš89G“í—#þ™DAQøÈc㸠ï@t )¬thçl“3Üs™\–À@ö´è¢€ (¢€ (¢€ (¢€ (¢€ *«»kv¸»¸ŠÞûÒJá~¤ñY?ðÉyòèÚ]Íð='}ž®÷aîŠÂ€7*†¡­iÚQE¼»Ž9dÿ�WËI'û¨2ÍøTŽ•ªêêz³Cëm§Ç¡”åÏÕvUý?HÓô°ÿ�b´Šs™$/!õf<±÷$Щk7ãn–-c=.u&Ûøˆ—æ?F(h>ûg:ÍýÆ¡“Ÿ#>TÛË_¼=œµnQ@[ÛAiAm pƒ hT{À©h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)j:FŸ«Ä±ßÚG>Øن3ê¬9Sî5›ýŸ­ég:múßÛùuÔXïÑg�Ÿûì9>¢·è  H<Of'K]N)´«§;R;Àd>‰ %ûŸP+n£žnaxg‰%‰Æ$PÊÃЃֱ‡$ÓÎíP’Å@âÒPf¶ú$ú#(ö4¿E`]içf½¦Éj£¶[=¹÷$ Éÿ�P£ûƶ­®­ïmÒâÖx§‚A”’' ¬=A�–Š( Š( ±|Kþcª½tÙÖåý2åeü£g?P+j³µíFÃIЯoµ0æÆ(‰œ$M!Øx?*‚qÏ=€äàPæŸ þ$Câë³¢YÚLÐé¶c̾™€2ÁSåõ#$œõ+Òè�¢Š(�¬= ý6ûSÖ %g—ìöÿ�õÆ"W?‹™=ÁZã>,üFÕ<6ž–¶Mo¨A:l‡ŠUÛ†8 osŽ¢»/ßE¨xONšßL¼ÓmÄ*‘[Þ(Y(À8ð{‚zâ€7h® Þë»þßý¹/“ý±öo²ýž-žWÛ<»¶îû½óšï(�¢Š(�¢ÊH Œ‚;Ö}þ»¦é²ˆ..A¹a•¶…L³0õ¨,G¾(F‚p2kíºî¡Å–ŸŸÿ�–úƒoÂ$=?Þu#ÒøF`ºùµ›«Tÿ�Ï;‚ÛÊ\!ÿ�cï@“Äú{JÐiâmNu8hìPHú3’O³04Áˆµõ“[i0÷`âûé†Å>Û\{ÖÔqÇ kH©Œ*¨ÀØS¨&×ÚmµÊÝÉ]Þ/+sxæiÿ�²[î}Úµ¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ƹðÍ“Ü=݋ͦ^9ÜóÙ0MçÕЂŽ}ÙI÷­š(Ágñ¿Žm>+¼i𖝣Úÿ� N¶–,s*·Í(€Á‰ù³‚`x÷ˆÜIH�ÀJ‘ŸPyE�QE�„R¬`ƒÞ–Š�æü9à}š¶­¤Aöí3I ãdew}ÁØÄãòãŠé(¢€ (¢€2µ_i:åå…Ö§eÔ–Ò[‰U€3އ§~üõµh¢€8?ù„ÜÁÿ�¹*ï+ƒÿ�˜GýÌû’®ò€ â>'ËâÖðËØøGM’âæèšá&Dh¾ÐÄǦGO­vôP—|.ÒµÛ¯C¦ø•µ{§9·K_õHð ê°+Ãòò z5†—a¥Bb°³†Ù Ë.ãêOsîjÝ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÁÿ�Ì#þæýÉWy\üÂ?î`ÿ�Ü•w”�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�UgSFÑîµTº@…¶ƒŒžƒ' ÆIàO¯PFF �r6šî«¥"Ë­ï¬eÍÝ”Gý<Ê2Z1ÙÇ cp<µupÍÌ <¤±H¡’D`ÊÀô Ž¢¹›çFv¹Ð=±%¥ÒÙ‚§©0“Â7û'ä?ìòk7N•¡óo|4ê¸ý³Iœykæu#a“¾qµºsº€;º+7HÖí5˜ŸÉßÄ$ ífe„žÌ=:àŒƒØšÒ Š( Š( Š( Š( þa÷0îJ»Êàÿ�æÿ�sþ䫼=8 ŠðojŸ£ø‹ Ã¨[‹mê–²‘¾Ï)óWY�Ý’{0÷ {ûÚ|Gÿ�@­+ÿ�RñŠ�×¢²>Óâ?úi_ø2“ÿ�ŒU_I4µéÒim®aÓ¦™$·™‘£‘c, ¸Áê¦PCEy†ïõ[M_ÁVö½ÕÙÖt6¹Ô£¾¸{¥‚A ²Mó6å çnÐ@<ãk•о-x›Hð¼“ýŽýbÓ?´î3©¿6æ2åÏ8 †Ç�c­�} Ey?ü,ßHam§YϪo]é14kˆÜBÚò¨ÜÙïö$p¦3ñ?ÄVþ)M2îÇMHÆ«¦ÙLŠº-ÜM&‡*Y ‘nÀP®Q^Aãø~k×myigj¶’ùv±È’F’K·åHC©Ç.2ÁU=ßõ×Ó Ô"´ÓÖ=BÓQ¸¶¡s%¡´ÉÄÿ�8ݼ)Á#­�{Â|=ñ¶£â»ýZÛP‚Ö?²ÛXÜÄ`V[˜<Ý­’rW¦F3è+‰Õ®|A xO_¿:¦­}£ÜÍ H—r6â)åH8mÆ&Ø8ž„иÑ^UÄ]L[ê±ÛO¤ÎöºEÞ§k±%•V8%¨y â]ø™ví*sš¡año\ŸS°·žÏMòç¿Òà“b¸";Ø £có&'£g¢Ð²Q^B¿¼KpO‹k¦£© 6Òæb ÛÉçýꬻÜmÎØðH‚ ÝøY5üúoŠ-ou «—´×îí"’YžV L…Ž$O¾y A¢¹­MNçQš ­JyF’ÆÒçrDÔ¬©"Èp€®#táHb9Û“?‹nå´ÑÐÛßßYÏ$è‰%¨¹çï~ïËrÀ.Xásòõ½Er«â»£i·«`&óÒDYž#™0")»i`rN6 1œXŸXÔ÷Ã+%´1ŨÊÉ1‚ìHþÏ,yçO“;C½FA�訮rßÄ:„ºôvRéÖQZKs-¼süÊûÎBy{Iù~èrÀHH®Ž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬írúÒËK—írL¢pa-‰HÌ=¼ïëŒtÆxÆhûÈ‘ã{ªî!F㌓Ð}k+Wðü:”«y­e©F»c»ˆHþ㎎ŸìŸ¨ ó^=ào†Þ Ó~-Ç}â¹¹µ´¶{«Yç›ÎË7ʨÍÓzî$㌨#‚+Þ(ƒ¸S6¡ ¾¨‡J×"ÎöݾY‡Så±á‡18휭­?ÄRAs®"[Ý9 Ò ¹=€ÏÜöý VÍþŸiªY½¥õºOõGÇ ƒÔyrJäõ+;Òh5HßWÐ\ò¼~d°/ý5_ùhƒûàdcyj�íh¯<KÝSKƒL‚}fM>Úñç’y±åŠ% ±Ÿ’y-Ï#!I8«Ú²Ðëoÿ�|Ûÿ�…�wWý«'ý¶ÿ�÷Í¿øQý«'ý¶ÿ�÷Í¿øPqEpÿ�Ú²Ðëoÿ�|Ûÿ�…Ú²Ðëoÿ�|Ûÿ�…�wWý«'ý¶ÿ�÷Í¿øTúN¯s'‰-,Æ¿£ °ÊÒ"¬YR»prœ÷4e¼)»Ü5˱iöá{ö_*-»¼ï;ní»±»ÞºŠ(  £4´Q@Ayek¨ÚIi{m Í´ƒ ñ‡FÏ*x5=›eáÝM‚x,4m>Ö…+4pZ¢,€ŒÀ Z¨<á@…†4P¥v‘ö°W9ÇÝéž~µ»E�dÂ+áß³Ïoý¥ù3È%š?±Ç¶GÃ0Æ <ŸZkxGÃO3LÞÒZVq#9²Œ±qщÛÔdóï[4PAð§‡Ö[VÐ4£o,‚Y"6qìwˆÆ �ž}éïá­I.ä“DÓ]ï.Y­™Æsóñóræµ(  ý?AÑô™žm;I±³•Ð#½½ºFÌ£ %@Èë]J²²žÊÓL²‚Òà³MVê©!a†, `’�=qW¨  sá/ •u>Òˆ“vñö(þmÄž9É�Ÿ\S?á ð¿ý z?U?ñãU_áì8•·E�f¿‡tI%¹•ôm=¤º`×Ö¨LÄ‚ç1žjk'NÓ çO°µ´7d˜Á ¡‘¿¼ØŸsW(  †ðÞŸº“JŠ-òé·Myam Êç9;‹#ÉÏPzÕ{ ©[ßjZ¥Ö­%®ãn/­­O’Çdd…YOoÑ@qxg@‚fšMŽV.K¥¤a‰q‡äâ^õþðÍÒB—Ò&X#ò¡Y,£ad«•àd“êkfŠ�σAÑ­µÔmô›¯œ±k˜í‘e%‰-–<’IõÍhQE�QE�QE�QE�QE�Q\î§ãèúÄšUíÕÂ^Å�¸xÒÊyÅœy…• …‚ÙÀ=h¢¢³Ä:KϦCìr>¨ŽöF0YfU]ÌCÁ’+N€ (¢€ *•¶­ey©ßiÐO¾îÇËûL{lÞ»—’0r= «´�QXú÷Što FÖo~È—rù1HÑ»!BÀ¾¹bÐÔöºå…æ±w¥A$¦òÑI‘ ‘T+çiT+ƒÐž‡ÐÐQ@—âi~ÒÎ¥¬NööjáU‚IB“Ó;3ÆO u"¬jZ¶›£[­Æ©¨ZXÀÎdº™bRØ'�±8ãØÐÊ* ;Ë]BÒ;»+˜nm¤I¡pèÃØŽ Fš®œú£é‰jÚ„iæ= ™Lª¼|Å39㸠 tQQÃ<7(^ c•²F +aÇpÀ‚;E�IEPY6/“|Ú•üÂóQ`Ue+µaCü®NÑÇ'$“Ôð�Ö¢€ (¢€ (¢€#–g�MH@ê?:û>Ëþ}-ÿ�ïØÿ� ±E�Wþϲÿ�ŸKûö?Âìû/ùô·ÿ�¿cü*ÅBX´¨. ·–;4šrD1²¨i;G|jìû/ùô·ÿ�¿cü+Éþ4ø[Å^'ÔtWðý³˜´Øæ¸k„”!Y \Îâß'ëÑ|"uðµƒêš¶¥rñû]¼eE?tàõ8êp>‚€4ÿ�³ì¿çÒßþýð§Gim ïŠÞ$lc*€TÔPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^w«Øëöÿ�§×¬ü96¡bt/ìäaq+Êeó2Áœ0LpN ô½Š�ð}gá~·o¢x[LµÑÆ©.¥ê0Ý\,¨ógü¥ÙI #8ŽsPXxÆ6Z…ÐÐn6ÛêMÙÛwunRìÞuwÛŸïcš÷ú(Çm|­C¡x²;ëÛíRúÖêc5·ÙîÙßtR½29ü ½€ÄÒþø’Þþökß Ér²ÙÚ,QMqlð5ÂÀ©3H¾fA. óP‘^ûE�xž£àMz_ŠƸÞû_†ç¹äÓ<èÛˆÓÌÁ}¿,‡~‚wgƒ©|4ñ³éæìǼ½] qv·0®ë¤»Yåœ6RcÜGðàpkèª(–ñNŸ>±7‡b}KÛ1xÏ}<XŠ7·–#¸3 Ø2ƒòç…8çà5/�xŽÇX’ÞßN‹_Òc‚8ì äëˆB-ÁŽ9cfhW˜ ÙÈ\ {EâÞ(ð_ˆõ7‘®…-ÅÕžƒsg#ÜA–™­öD 2e±*ïÏ d¹Æ$|e.ªÍ}¥_fL–Mw WV®óJ–¾T®ŒÈ_Ì%²ÃœdÀúŠ�ñ?ü=ñ¥e⣰ŸTšâÃNƒJš{ˆŒyL¾r3_™ˆÜH&½[X2;K¸ô‹›Ë˜eGM–ÈÈÌ º¦B»/Þ?{½kQ@µ‡4kkc¹©iZ5ürH­cs¨B%‰7Ÿ/~Å6±äòk2îM{RÕ¿¦Z¥Å•¼ñ}’(ÖîòG7Ú*°wá—</~åÅh¶z½¤ñÉy§ërCö9Dq>¤®ÐüĈܙ¿y!þ3ò‚F ªVöúôžM>çGñ<:„²5H„Ò[³ÌÑ©”\omªcR ©Î0X^…E�døj«}ïa¸†}Ò1ŽæèÜH » ’sÁdã¦N3ZÔQ@Q@Q@Q@Q@Q@cKáØVæK:òïM–F- ¶pcv=IÃ&Or�'Ö¶h  ›{m~9£óõ]>hTÀiî®Ã¿Íç`}¿…kQE�x?ö–©§xÄÚÅŽ·ªK«XxªK >Ú{ùfKˆ„‘–ìTðÌsÜu­=7ƾ#Óá¹i´»–çÆ³h¤Ü$Œ±«µ£gʪA;2x8Èë^Ÿgáoi÷‚òËAÒí®†q<6q£ó׿4ßøDü6#Hÿ�áÒ¼¸å3¢ýŠ<,‡p1ëÏ^¥�yv™ñŸV¸Ó&¾¹Ó,™F€ú¢GðD©rmÊ’IÊ’7zÆOZ·«üFñ~–ks§é‘Ium4~d{· xêøŽw�:’»wÝ’+Ñí¼)áË9V[]J‚EF^+8Ô„lîP@èrr;äÓ?áðÁX×þÍ#ljȃì1aU³>^ÉÈ÷4ÁjÞ7ñß…&½Š]?OŽçH7â7wg6fv "È6Hì+(ùWp'îÕ>'ë6:ζðM“¦éR]%Àv¸¿k”\˜›wg’Cdç¥zað‡†HÁðî’G—åcìQýÎ>_»ÓǵX>ÑZkI›H°2Ù KW6ɺ| z Pžè5»ïÙèw°iÍo6§©i¯$1º6mQ]\eØaƒlçµ7P:Ö™âê°ßêWÚW¢Öÿ�NK™ –ðµ¼2yÖä¡V‘òtè+¾·ð§‡-.#¸¶Ð4¨g‰Ì‘ÉœjÈç«A8ûUË]+N±¹º¹´°µ·žíƒ\Ë*1ÁrXòzúš�ó Çwú}—†lÞòÎâ9áÒ ˜LÒÏu,÷C,Y÷b2s€Àî�Ž*…ÏÅŸZÝ^Û5¾’íúµª8†@ ÙD²†#ÌèÊvíÏœö¯U èʲɢi¯"""»ZFHTû€t\ Øâ ÿ�„7Âÿ�ô-èýXÿ�ÇŒ]Xa¿‡¸àúÐÿ�µÙ'±Ðc¹·¶Òmu+ØÕÔ1Yc.ŤS…à�Ë>SŒž ÖµSâu¤ú…öaÔü,š—Ù –_³ÆÏ2„w`(Á#98ä×¢§‡4(šÕ£ÑtäkE+lVÕ„I ÇÊ '§­-¯‡´[¸îí4‹ {ˆ£ò£–+dGDäí ÉãÞ€2/®/×\{µk¤†y£´,q´ÿ�¦Æy“Œ$Œõ(~†þTƒO¹šIžH™šT�²�>ðH÷èj…ÿ�†t‹û[È[O´®ÜI,«k1}Ùuef‹U…ä¸ýÖ©¯j­“­²½·³he@`°ÁÁàŽ@  ­Ä—ãÃ÷æQq{f#”iÂÖ ">2 h”eHu&ÕäH³wâME´øï#±Ž+cªÛZ[f¼Ñ f¢;X—ÁC‚’cbãÃZ ܾmΉ¦Í'–±o’ÑìR ®HèØׄü7}+Ëyáý*âIÈï5”nYÎ2Ä‘É8ûPOø‡PÒ'•mtë)à†ÛíÍsä倾Ë÷›jóÔà㣬¹¼3 \›s>‰¦Êm‘#€½¤må"çj®GÊN�éšÔ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/RIS24sai.jpg�������������������������������������������0000664�0000000�0000000�00000015234�15030617045�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��Í"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€$‰‘Õuf8¡þвÿ�Ÿ»ûø?Ƴ|SM£G¨¯ßY«+ †æ,‚*Ïöÿ�@‹üOð  ?Ú_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ðT“CТä“KÓ’4™šÝ�P:’qÒ«ZYø[P²7¶VÚ5Í Îg…"tã¯Ì8â€5?´,¿çîßþþñ£ûBËþ~íÿ�ïàÿ�Ë–Ó°éƒS–ßFO(² §H„Emý0r0sÞ«YKàF汓Ã×Q[©yž ˆÔrKÐ{š�Ýþвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒüjŒ:G‡îcI Ó´ÉQÑdVH#`ÊÝ9±¬¨u‡×Kkï†e¸fÚ±$°3–ô�æ€:?í /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ«`hßô°ÿ�Àdÿ� FдDm+OQ2mÐrNoZ�µý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÕoì þø ŸáU5O éßiÔíôk+rÁ|Û”Š5Üz ¶x4©ý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�øÕ M/×ö±ÝYØiWòÑË 1º8õ ›ûFÿ� E‡þ'øPŸí /ùû·ÿ�¿ƒühþвÿ�Ÿ»ûø?Æ«`hßô°ÿ�Àdÿ� ?°4oúXà2…�Yþвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒükÁÒj§JEЛQÍ ™†OÉ×§=*ûhZ" ¶•§¨È6è9'·­�Zþвÿ�Ÿ»ûø?Æ•/-dp‘ÜÂìz*¸$Õ_ì þø ŸáYz¾“¦Ú^h²ÛiöÉý ƒ|pªŸ¸ýÀ –Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÿ�È.ûYéLU¯X¾*‘!ÑRiØã½³wl}Õ1’~€ Òÿ�Â[ ÐRßó4wU»K.æíígº¡Ao’IäQÉ9Åyž¯uðçÄvúG‡u µý¶æö N&´–Y¥Œà[Īû•xr»ˆŽséÿ�ð–èô·üÍð–èô·üÍ�qɈà̺mæ‹(ðØ¶… –Y®šS�EFƒÉNO?1ÁR8û 'S“EÔÝ´}aŠx6-=&{9`™.@ÿ�tEU2.ìØ< #5ì?ð–èô·üÍð–èô·üÍ�p_ 4SNñ©&§i©BHÒ’¹óB¶ãÍ_›ÊäñÕrqŒœò/i­ùä3økQ¾Ð®¼Q5åå‰ÓfIä™LrÄÄ Œ©ÊŽqŒà1¯kÿ�„·@ÿ� ¥¿æhÿ�„·@ÿ� ¥¿æhÏ/5MâéÞÚßÅPZÍ=Ôr\e) BÔˆ¼¸qåœÊCûÀ®ª-cOÕ5èž]¦½"Aâ‹g¸Ý%Ñv· H«!óU÷‰ÚÀ•8 פÂ[ ÐRßó4Â[ ÐRßó4ä: ñÔ~ÖîžóÄ[Yñ•­ÖÝÂàt‘\£'“¼mE ÓvXzÿ�‰ÚTÏðPÓtØu]Fâåâhcd–âs™–B€�½0uÍâÿ�ª–mVÜÔ–¥ÿ�„·@ÿ� ¥¿æhʼ{≵ëû¿ Gâ„·þÉ·šÞ8­n‘>Ö.P°®?Ô–Êã¸$S£¾ñ(´¿³žÏÅ÷ ¹}%ª ¸‡Ì¶“4ÀyYò÷°1^§ÿ� nÿ�AKÌÑÿ� nÿ�AKÌÐÉuâ[½kLŸU×5‹;+h4éµåÞÀ! 7¿”›2͆.ì»GN3ŽÛáü^%:Þ¥7ˆ/¯üìÌ’YÍi(„71¼r³˜ÈÙÆØÕÚädÞ½Ô/§»¹¼÷Lñ‹É–)Š€£|A‚?�™OA[Ÿð–èô·üÍ�q6wÊx”Á¢iWi:^]¸Ô´ö‹û:íƒåÌÀ Gc3€zÀæ“â‹ÝA—PŸ^¼•uË /­MµÌOn«¿Î`ÅØºîÛ“ ¸Bäë¿ð–èô·üÍð–èô·üÍ�lÖ6¿þ¿Eÿ�°ŠèGü%ºý-ÿ�3YÚŽ»¦jwú-½•äsËöõm‰’pòhª¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Å¿ò*j_õÄÿ�1[5âßù5/ú☭š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ËÖoï,ÛO†Æ($šîäÃû÷*ªRHO�ŸàÇãQoñ7üûé÷þOþ"¬ÿ�ÈSÃÿ�öý&žµè‰¿çßHÿ�¿òñoñ7üûé÷þOþ"¶h  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄU9$ñǘÞU·‡¶gåÝq6qïòWKE�sgŽÿ�çÛßø?ÿ�G™ã¿ùöðçþOÿ�ÄWOE�sgŽÿ�çÛßø?ÿ�G™ã¿ùöðçþOÿ�ÄWOE�qº§Ž5M6{)!ðò$Ë´²Ï9 ß³¿Äßóï¤ßù?øŠÙ¢€1·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â+fŠ�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(‰¿çßHÿ�¿òñoñ7üûé÷þOþ"¶h  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÙ¢€1¬µOûoû;Q‚Ñw[´èöò3t`¸!€õ­šÆù`ÿ�°tŸú1+f€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®9¼S¨é÷ºÜ·°¥å•ž§o„fÝ*BÈÎÒJÓªp<ôÎ�0þ"x^ûZñ÷ƒn-®.Ñ®Lwˆ’2©XÁdÔ¯š¹ÿ�këÓk‡ÿ�…›¦ýƒíÒhº²Â¶ßå’ ‹yÈ—^€Fà½ìr*kωe•Χºv¦cÓVC<È‘0Ê0M»wï‹.ÝÊ7¸|¼ÐeERÒuÕ´»{õµ»´.|‹ÈLRÇÎ0Êz*í�QE�QE�QE�QE�QE�QE�QE�QE�y¥Ç‡µøûm¨ «¯ì¿ìÓrÑy­å™íÛÓûõ¯K¤Ú¥ƒ`n�€qÈä Z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢¾tøûâ]{FñÕ¾—­êV06™´v·O–óe!HÀ>€>‹¢¾ ÿ�„ïÆô5ëŸø1›ÿ�Š£þ¿Ð×®àÆoþ*€>߬‰|+áÙçšy´ .Igq$²=œe¤pr‰œž¦¾7ÿ�„ïÆô5ëŸø1›ÿ�Š£þ¿Ð×®àÆoþ*€>Å‹Áþ€0‡ÃšDaÆÛ,cSÕN¡Éâ²àøs¡Ã¯Í«º™žW•Ú €!ó ¬V0î¸' ìÀqÇ'ÂwãúõÏüÍÿ�ÅQÿ� ߌ?èk×?ðc7ÿ�@lÚÚÛØÚÇkio½¼K¶8¢@ˆƒÐÀ5|Aÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüU�}¿E|Aÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüU�}¿EPEPEPEPEP\¦±âËí#UÔã:LéÚeœW×7ð‰|§2V?/¯’çÆF1ÉÅuu‰yá=ÿ�V“Rº‚y.$XÖE7s¤T$ hƒl` 'z’{š�­}ãJû[jË v÷OjYm'|2B³6à#ãä%ä¨7Ä_ Ç„š“Ç{$­ [=¤Ë)p¡±°¦y ¸ãæÈÆj{ÿ�è§Ú>Ùms ¸î%nC;Åä±Àqÿ�,þLt 1šH<  ÛjjÅ|·’ Iqý¥rdmUù˜É–áW¯M õ ²ñÆ©GlöWS‹‰<¸Äv“¨ù#fUvÉn8\09¤‹Æú+"'”;» Xígr¸•âPÿ�»B°`Uwu-²ð‡tæˆÚÛ] ŠH¥D:…Ã&è•U RäA‚1ò¯ ©ÀúíÛmr ±|‹éòÌdiw1ßó#³‚sµ‰#€ h7zRêV×73[<ën¾UŒììì‚E0›È(ÁÆ0AÍt Á”0ÎÏ#ò®n�øvÛMŸO†Úé-'òüȆ¡qƒå§–£ïð6�¤�àc¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¾`ý£¿ä¡éÿ�ö ÿ�FË_O×Ì´wü”=?þÁQÿ�èÙhÇ袊�(¢Š�(¢Š�(¢Š�(¢Š�ûþŠ( Š( Š( Š( ±/.µi|@tû ‹("KUš{W•‰.ˉzÛ¬dÿ�‘ÖûGÿ�£€öoÿ�ÐWJÿ�ÁlŸü~š°ø…‹Õô’TàãM“ƒÿ�ëf¼·T³ñô!ÖeðýµÕ•ýãÈÎÎb6Ån‹*#ȹ,c—!˜qƒ€ÜPwöoÿ�ÐWJÿ�ÁlŸü~š°ø…‹Õô’TàãM“ƒÿ�ëñ†«â'ZQ ôzi»³·.¤kHIJ É·ÌÜHHþLeŽí¤ “,Vþ/—]ºÔ4ËNßJ¾¿‚ñ¢skH‰ö5,À¶õ.‘ÜeNÜH ïìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çê…ý—Š$ñ4SÙÞìÒD‘—‹íq.TcxØmŽyãÍìWµ/h³jz³½†q¢,çH5”xUQÞEW;üÍ€œà!°xÁ4¹öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãõÁéþÕbñÚãÑMœ—V³XEæÄ²’7Sp¿+õÀ0ù3÷¾lW©Ð\kV:ž™ÝæŸqÝÃBë›Äˈ¤L¬: ;Öídk?òðÿ�ý„ÿ�I§­z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+æÚ;þJŸÿ�`¨ÿ�ôlµôý|ÁûGÉCÓÿ�ìþ–€<~Š( Š( Š( Š( Š( ¿è¢Š�(¢Š�(¢Š�(¢Š�+?äuŸþÁÑÿ�èÇ­šÅ½²ÕS]:Žö7W¶X.”‚› ¨?Þ  ªÀÕu v×UXl¬£žÕÂ0“Ê$®w)î!ÌMÛäßÝsSoñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄP.©â«ËKU[K˜-£Ôâ–g6W>tñÿ�h°!FìÆ¢G!_��8v‰¬ø•<w$w¶—k4ßc¸vÓ§X”$·¥$¾â®Ñl ùÞ¼äìwø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â(•µïŠÅMo=–ÝÌp&û$Cå�í;ÅÛ7\säóè½F>¼ºöåüšgöÓ[ˆo 5ÀP<øwù*xgò|ݦ`ƒœ±\t»üMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñÇxXx‹þéÕö ɼ¿´ù¾QÓ|§ò·îù|ÿ�3fsûÌg<f½*±·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â(ÚÏü…<?ÿ�aÿ�Òië^°M¦·y©é³^®Ÿ“´ÍäÈì͘¤ŒTãÏá[Ô�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V^¥á­Y¸[SDÓo§T²]Z¤¬$àã$œ{šÔ¢€9ÿ�øA<ÿ�B¦‡ÿ�‚èøš?áðý šþ ¡ÿ�âk ¢€9ÿ�øA<ÿ�B¦‡ÿ�‚èøš?áðý šþ ¡ÿ�âk ¢€9ÿ�øA<ÿ�B¦‡ÿ�‚èøš?áðý šþ ¡ÿ�âk ¢€9ÿ�øA<ÿ�B¦‡ÿ�‚èøš?áðý šþ ¡ÿ�âk ¢€9ÿ�øA<ÿ�B¦‡ÿ�‚èøš?áðý šþ ¡ÿ�âk ¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<÷Å>2Ô4OÍ¥sÃÚu˜ÓEê5ý¤ï&wìÁ*ê˜$uwm§­h¿Ä 7CÓl?á+»³°Ôn-ÃE3&ÍÛw)` ÎAÛÝx Rk_tÍ{Ä7ÅõåóµÅ‰Óåµ?% Îí¸)¸ÿ�6Cd9ÇðêÇK]1­uan4èZÚ+†–6‘àb’ÙLq€v< �»eã½QŸLŠÒæIN¨Ó­‹X,æù˜$qŒu8Ïl×=«|[Ñ?áš÷G¼íd[ÈžòÚ_+Éû@€³¾þTÎpzsUÏ®´?ø8è¶wshzSßI!ya mö…ÆÔ@l“ÁÀ#µ|ðóÚEÕu¤·6¦ÏËYbâ?ÏÛ“?ë9Ï_z�êo|u¡i÷´7ṠHØoˆ˜Bw¡$CÆ;ñÖ OhZŒq[é:”S_]Ë5­¨HŒêf±;H ªIÃ�AÀ9¤—áö•s{âK‹»›Û‘âD¼ŠG@Ša6mPAQÓ$ûæ¬7ƒmå›G¹¸Õ5‹í&G{kÉZ3&62¶)R vÏÎhÞ×n<MàÛ ^î[9g¸ó7=’H±²2¢O›¢Œç¾{WEX¾ðͯ„<;o¢XÜ\Ïkn\Æ×K ÌXŒªŽ2Onõµ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/RIS24saj2.jpg������������������������������������������0000664�0000000�0000000�00000065677�15030617045�0023204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�‡ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª¾³e¡Y­ÝûL°´©0ÛÉ3sµFÔRy$ÇRq@èªN³c­ÛË=„®ë¦VHž'À«#€ÊpAÁÅ_ Š*«¨,l绺•b·‚6–Yà"¨É'Ø@QPYÝÇiÌ+2Ç $ àx\sŽQÀaøŠ‘%YEÁ¶È@'�ðHär9Èê �>Š«¨êÚN™u¨Þ9K[Xši\)b¨£$àdžNò¬oäÈÛFÔ$‚y p8<œ àu"€ERÔµ[M&(¤»y Š$Š•ä|…D Äàp'Wh�¢Šl’G O,®©)fv8 ROa@¢™«*PàeùЩÈ$éÇ¡ŒƒO Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( °¼]¦j¾†¶šj[´ÂîÚr'¸xFئIH ŠÄ° ÆsÛÚ(ÎdðV½#}žøi:Õ¼“yþGWd ‰%Ädy±ìÚ¬2X1û‡šÒŸÁWtémõÍå­µºË<Ñîiçƒî;¿0y¸"»J(˜ð÷‡$Ðõ›ÆƒNÓmldS‰a•žâc¸_(1»‚ÏÛ@Áæ[áÞ¤t=RÈC¤ý¢ãK–ÀËæ>/¥b¥ng8‘6’1¸å#ŒzmÆx‡E6þ±›ÇÓ,Ö‘¡6Ñ!´J– Âo(*2vð;c‡7÷DöŒzuÛE:Miq$ÎÌÁm£…•ÆÏ”HcËàž$lr¯Eº¼µ±„Íws ¼C«Ìá~&³O‹|;Ÿ—Z±c9Žep>¤gÈÜøõ“ÄÒ[ÚiɪÙKiÑ¿œ‹´FÑíØ«áJŽB…É5Ók–ÅôúÍ¥¾žÒYÎó]G5˪°h$b‘Ü3&yî9ãBÓ_ѵ ¼›-ZÂæ_îCrŽß5£@Q¤ü6Ôìµm {+ÃÒA`–k9óšVŠ£’\q¸™ca“Ï™#³ÿ�½Ö#[Q¾Ž^'neóäS~#ž9LÒ,þ÷”ï‘+ØkÔ( '½øu­Ü[]Fš_‡„“Û_D$7r¯4þd-þ£þX®Bú8Ûß_[ð^«­jšÕÃÁ¥Dš†™uc¼JìÌ]bòYø6ã<n,0IÐh .O‡ºÌ–mo=¾Œ€‰£¶òçÿ�fnžIVKÝŒ0ÛòŒDœã+[0øOQ_ÿ�m5®—GS’ìΓ1ŸÉ6‚<°>gF°O5ÜQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V׉âf–"í¢$K }–Ð㯙1F;…Üø  ‹ËÛm>Î[»É’x—sÈç� óOÄÞ*ñfŸ|<'¦ÝÛÚ*²Ax�yÛo.à"äàà㪞+‚Ô|eyâoYG¨ióXE;ùPÉú:ŒC”,7Œ ùëÑI"·/>$ë¶z.¡s±¥3ÚÜb‰m׿]Ê2>~˜'ò zçáÇŽo5%¼¹Ñ®ç—c–kø]ÉÊã“.{®Ÿ |t!·S¢\e%,ßéÐôçþš{ŠÐ_Œ¾(7R!¼Òö„R?ÑøÉ-Ÿãö|gñSEhÆóK̘ßþþÉ<üÞ´VO†^8xoûã2çfo¡þàóÓÔWWáûŠ^¹‰mô»‹‹RÚâò^Ø ™2¼néŽzæ¹ÆøÓâ± Ì.ô¼¬¡Gú?lýê™~2ø ÝH†óKÚHÿ�Gã$¶ØP¸é:à¾qi{i&ªÄg38èJ0ù]sÜtã fµ«ç[ˆÚ牧Ó-¯õ:ÜïóRæ8BɈ؂ n=b H>Óàÿ�Áâm.GYb{»IM½Ðˆåwâì°ä~#µ�t4QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QY7þ!³³º60¬·ÚŽ3ö;@@;É ƒÝÈ­Xמ#·Žíìtø%ÔïÐáá¶ÆØý4ü©ô'v:PeêºÇͬÝý–Ôÿ�Ì>ÅÈÈô’^¾‹´v;…lÙÙZéö©kgo½¼c HWè�caÞêß7ˆ.Õá=4û6d€{;pÒþ;Wýš§ã ›+7OÒ E,îe ,6ñþŽœ²…Q÷IØ„z9®²¸‹K¿Á׈í4v¶±Þ†s\I!Èÿ�žKÓÓž¢€¿|%Kqm ‘fò?ìóáŠ` zñV_ƾOµ+i³n¢Y¿â\xàœž=³\ ðW…~Ú·ƒâf™ç}¨Üƒ¾ß·—é¿Ö´¥Ðt9—Pcñ3KÅäb)NmðÒ?¿èh¦¸ñ÷ƒ¬ä‡ísDÓ¡d/§‘¸.=¿Úd\ü^ð²ªCeqs*1Q rã#ø°ç\·Œô]=ï—ÇÖ×vÎ-­bhHÍ´ÃtÊŽÕ§Ão EeÉñ'Lï;,°ÍÔò_'ë@*üjð Þ—:¡l~ñXÅÉëÙÏ5°Ÿüî…cmÒ&à~Âz qÓýªâ%øuàÙVä?Ä­4‰T+fK~8ÿ�~±tøVø]-ïŽì-'²ºšÕJÍ ™£JHàH#¼çš�õ8~$øc pÛ»1“ÊÀçvJñÇÖ˜ž1ðì~:Ó¢ÓÖ[[›ŒZ]FÖ¦%u|˜˜ñÉ6iMqxÃ6’A5ŸÅ--dŠo5 ­ŒäŸùèëT5`¹»ÖŸÅº]åÄ$…´ûÛvbñË”b¸ç)cèJ�ú4@#¡¢° ñ>“mPÞÜK`ê¡?âa[‚zp̱ú[qÉѬ‘:¼l2¬§ c@¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢ŠÀMvþ-m¬/´‘R@f¶–5œ†UØë´c»#–V9ùM�oÑ\ô¾'aððø®0Çû/ûD[<¸ãÊó6î�öã8¦Oã.®²4Vp\MpžD«2ù%7 è$RI#”ò@IEgÏ­ØÚÅbó4éöã¶Ý ´›Ù¶ÚWnåmªÇ àúU|i¡\Ä73ÈÒJÑ[9‰B1,6eWFw)¤E�oÑ\²|DðÁ¹µ¶šýí®.®ä³‚+‹y#i$GØq•û»¸ÜxÎGP@ÒØ6©Á)h,–_1åŽHÑZ2Êà¤à20$Œt  z+ïÅÚ5•ô–SO9¸ÌL‘ZM'ÎI°mC–Øw‘’˜ž3ðûî+¨|«h/7˜\+DBU¶áŽ$å?:ñÈ  ê+–‹â?…$–Æ#ª¤¾­­’{i¢i$VÚF�o—'ÀŒä:š�(¢¨jzÕ†’#sbYr"‚5/,¤vT\³~Žô~³5-zÇL•-Ýž{Ùc³·_2g¡GAþÑÂŽäU#»­Þ1Ñl[øc!îÜ{·+Ðn?í)­=7H±Ò!xì ï;¤rÅÞFõwbY¹&€3>Ç­k\ßÎÚU™ÿ�—[93;öåwé#ûæµ´ý6ËJµÖ±[ÂJƸÉîO©=ÉäÕª(�¢Š(�®Äú-ý÷,¦±kUy4Éý °$¨NþzÖ»Êå¼wa,ú,z…±¸éòyçìÒ:HÑ`‰!¾éÝÔ æ+ðKÄj–ÃûKJýÓdüÒtîûÖ½¯Âÿ�ZèWÚh»Ò[í2ùËÈ1Âîÿ�³\Ôž5šöâKñ{Ù=´ †ð†ˆ•äLfºÈÿ�´ÿ�µ®7Â[ö_"//þ?ñ¿t›ýúl <MðÄ~#¿k†½Ò¡×È�<„çqlýßzæ¼;áÿ�ØG¦A©éPêUÃEwi,æ#(t<�C ÷Ê®ëšÆ¯¡xFËP¹—Äñ\G&y/#_0ÂÀ,@ÿ�Y·¡®Áž¸Ô´™õË­;U¹–Y“ì­´í¸ ™ t^N7½›¾(­ñÃ=GÃÚ]ÕΡ¬éKç8ò!C#K;á@D@¹f$t¥YÑþ x qw§A-Ä{ä†Frѱ9Úp¸à`pjUð¡´ñ#êZnŸ®Á$Vñˆ¤{kÓ¹‰“xßëÆÎAÇ= gè—Þ.VÒíõ©|Y—phåk°d"6<c“Î:PÄ|F‘Ú¯ö–•û–ÉæOî‘ýßzЇúî‡á›û[‰ô顺¸EýÛ9bd1Æ�@ëŽý꼟Ûÿ�a½Ùÿ� ŸöÁäÿ�Çÿ�úëœÀw{Ö׆¬5-Oâ <—Z¿ö^Ÿn³Kô³á§%Â|’û|Ù6Z�õR)V�‚0AïYámÈd‚ÏìržL–25»îc#wãšÖLˆÔç9§P"éZÍ¡ÿ�Cךdý^£l²þ£Ø»ñ êzݧü~h^zÿ�ÏM>ådüJɰ ÝøÖÝ޾)Ñ÷ˆî.þÅ!à%ômlIô`¿ Öº²º†RHÈ äI$i,mˆ®Œ0Êà ¥cŸ iÌÖvï§»–°•­ò}J¡ ߈4µEbg붬M¦¶—)ÿ�<õ ecôÌ}Jµ «jÖƒý;A’EdÓçY€ú«loÀ@tVD>(Ñ¥•a’õmgnÄkyÑd OáZùÈÈ Š( Š( ³.|I¡Yê#NºÖ´è/‰�[Kt‹/=>RsÍiתxrï\ñ®¤—qê0h—Zu½¼ ÛùWEVd|æP1(�®ÞÏÝ Î)c™ Å"H¡™IFRAPAÜS..­íæxáW‘bS# ìBªŒ÷$€½pK¤xŠôYÝ\Å­Àö÷·u²ja|ûf¸/%ÆåB¹$äª2÷SPG¢ø’-*äÜíê7²ê–sÉÅí»ÂW)+=¸ÊìB©÷Xƒ’£Z€=*Š( Š( Š( Š( Š( Š( Š( Š( Š( °…mn¥Ÿû^æ]fÚVÞ¶šŒòEg‚ F@àdœkvŠ�æ,þøoOÐ%Òm4ËxDöOšî(cK‰ceÚÅTeŽ'¹ç¿ì®%¹–çUÔç{»[‹[¦v„yÂdDvlF0Ûbˆ ¸`ã®zê(RðøÔåÒ¤—S¿ôçiÄcW1´{Ÿ(yÚï÷v˜ú fCàhíàš(µýa<ù„ó:˜;Ò<çÊùIXוÁ$šêè zÓÂ0Xê-yk©ê0—–Y%‰^=’‰%iJ“;C»A 7œqH¾€xJÿ�ï©êA|g3\1‹Îýó3IŒ Q’íü<nã¶:*(“o½û`ñ²·k7»À¶ÿ�\`û°anjӒk2óáôzn¶ÆçSÔÞ /°Ek4–üÀÞPe£ D¬¹ du�ñßÕkíBÏLµk›ë¨­àå` “ÐR{¦€9o øZîÑc¹¸¹¼±dwU$Fyá-¿ žcJÛ‘ÃòÄ“]6£ªØé0 ¯®%cµžFþê¨Écì5–/õ­gåÓmN™håòú/Þ°ÿ�bú¾1ýÓW4íËNœÝbK›ö{Û–ß3LôQþÊ€¾ÔLͯk_ñîŸØÖ'þZ̡œ¬VÜ}TV†™¢Xi&I-¢-q.<Û™œÉ4¸þó¶Iƒ ìhQ@Q@Q@Q@Q@mâU×ü+lÚ~«=·‡%”î)%lò¬v’èHBûvœàd¯.y«Ïj°Ùê²Eã Ò[Ì«�Ûjw©HÉ?êùå›§§µ{d‘Ç4O¨¯©VF PGqXfÃTÑ“þ$Ηv‹ÒÂêB¥¤Rààz+;¢€<KÆWSøÎñ4;ÏÆÚtQ¥Ø26´›™HÊçiÿ�ëT>ñLj­†¦¶ºöz`‹ËÏÙ E@±’æÔ¹Í{|ž4Ò¬¦ŽßWé7}Øï#À?I²ûê¯Gâ]e-·¦ÈÁ+v‡ŸÎ€<–óÇš¬6z¬‘xÃt–ó*À6ÚêR2Oú¾yfééíIuâ»CZ—K¼ñ\sé¦Ñe>bZdÞG_/�ê:׫hDíƒRŠñÿ�çˆ7/ÿ�|Æþ•½Öõ7ÙeaýlG7WØ2÷!Sú¹\tÐXx“Æ—~‘káßM©^J?{hËo$±¨V%‹²ä(;GÌz3Íz÷…^Ûû9ã[ǹÔ7o¿y£òå32Y06Œ��Æ6ŒŽjþ¤Ûi¾cÆd–æb ×36ée#¦O ì£�vCH´Ôš9eVŽæ |«˜[d±çчoPrphý‰öÝKH;u(šöÐt½¶çQÿ�M#úd²¢µ­®­ïm£¹µž9àe$‰ƒ+b:дQE�QE�QE�2hb¸‰¢š4’6duî cÿ�Â)¥BwXG6šÝ¾Á3B¿÷‡ñS[tP!²ñ¯üzêö÷‹ýËû`ÿ�ÀâÚýðiN±©Zƒöý㬖2­ÂÀísø!­ª(&×ÄÚ5Ü¿Ž+ƒÒÞä%ÿ�¾ý+Z¢¹µ·¼…¡º‚)ân©*SøÉ>Óâ;´ù.´Æ”ì‘ûdsæ´·Eb_ZǾ£i~ƒ¢^Bbsõ’?—ÿ�!Õ[¯ ÄúÁì€äËé4xõ�!ÿ�¾(¥¢°´ÿ�øcT*¶zíƒÈÇ&œ$Ÿ÷Ãa¿JÜ9¡�´QE�QE�QE�QE�QE�QE�QE�QE�QE�!íKA¬ŸxŠÇºÖ¯¨>!ršFì£Üÿ�‰í@ˆ¼K¤øWI“RÖ.ÖÞáAå¤nÊ£¹ÿ�'ŠùïÅß´µ©M%¿†âmŸA4Šf¨_Ñë^{ã?j^5×PÔ%mƒ+ ü±/ ¿ÎIë\å�jj^#Öõ—ß©j·—më4ÌßÌÕ¹~ìòsÃšŠŠ�è´ßx«HhMŽ¿Âr‘ùħ⧃øƒ^»àïÚægŽÏÄVÖîäö„a ?\ü¹ú즼Š�û26·<6š\#N3¨)s«/—¼ùãs1÷/pOJܱðõ­­Òß\É.¡¨wu†dÏP€�±e=ó_:|'ø˜št‘ø[Äâ+½ é¶F× :Û±ìCq°ž¾}kèoøGžÏæÑµ+‹þCþþÿ��c•ÈË@”Vö®«aƧ¤´ÑùyÓ‰”}LG>‹¿ëZ~­§êŠÍcwžd>Œ§•>Ä �¹EPEÍÕ½œ-5ÔñAõy\*ÄдV/ü%Z\¹->¢GCcÌ„ÿ�¾£`üXRhë·?ñé¡¥ºãïjj§þùŒ>(nŠÅ:n·rÒµÑãîéöЇñi ™ú€? …4™9½Šm@÷û|ï:Ÿ}ŒJÀ �|þ(Ñ ”Ãý¥ Óƒƒ±3Ëÿ�|&[ô¨Î¹{qÆŸ _JInJÛ§âùƒþø­h-൅a·†8b^‰…Qø –€1|¯]g̺Ӵõ?à opÿ�ƒ±@?4ŸðÇ>´5MR÷=žä¿÷Ì!üA­º(ަi„›>ÖÙ›ï4Pª–÷$ “õ¥’]2âüYÈö’Þg±Vp €N:à_ÌUÚó;Ý^¹Ó4ißö®›siqqot°˜/ 6O˜Œ´nÄ Ûƒ9 JWG,ÕŠ­ƒœCN¬‹çÿ�„£VœdY´6ñ¨<2ù…Øzü­Ïû8íZô�QE�VEΆ¢âKÍ.s§Þ¹Ý#"îŠcÿ�M#à1ÿ�ha¿ÚǯE�cE®µ¬©m­À,fr' ºÞSØ+ñ´Ÿî¶ < Ýkf™,QÏÅ,k$n ²8È`z‚;ŠÆþʽÒ~mPö㮟rç`ÿ�®oÉO§+Øë@”Vu†³m}3[2Ékzƒ/kp»dÔveÿ�iIõ£@Q@Q@Q@s,ñΙá8v̲Ý^°ÊZ[¡wÁèÍ€v¯¾;ƒZš½üðy6VQºÈ„8ÊÆ£¤aÝW#Žä¨ã91{nmµmB9&’âau*É<¸ß)FæÇ�éÀè0(r/ˆºV«(³xŽàÊB¥ŽŸ,1O •ùä='û£8­ÛOø~Äî´ð6¿ u݇¤ O©;rOkŽÑä?¥ÿ�×ä?ú1kܨËï¾+ø^ñü»ß ë·SÚHm¤F<t¬‰þ"x:Øy–:/‰ôy?†K! ç¯1îòÛþ¦³o¿ä%{ÿ�_2ÿ�èf±5ÏøõO÷èÐ<9ñ£Jº½[ U/!SÂjZPÿ�×EËíódƒ×åêhë"+£V Aµòu{ǃŒ¾ðöŒï3¾‘y K‡9û$¬�?ó͉ÂÄv?(uEPEPEPEPEPEPEPEP_1|ñdš—Š@‚SöKÔR2O¾8ô úšúv¾ñV uoj×ç­ÅÜù±  Š(¢€ (¢€ (¢€ úóàÇŠÄß­…Ä›ï4ö6’’y` 'þ@Ïr |‡^Íû=M¨M¬kZeÿ�Ù#–Ý'w‰äm£nNùûƒ@LÖ¼|3æ£k3ÙCt£÷R4Â9׿ÈÀ‡ðRÂ5o6~ß}©_“ÔMtÈ„zãÚ„}V¯XéZv–¥l,-­Aê ‰S?\h––±jÃû u-f?ÔßÚù tág}‡òVB}idñFº’²jz}¯‡£.nËÝÄG©hö¢ÀœWiE�aE£ÏKuâÛ¨œ hÉl=CF7ãþj{ è¶Ó ÓMîü·|Ùï·Ë~´É<1§¬­=›L¸c–’Åü°ÇÕ“û²šg›â;ýlú´�}è‚ûáŽÆ>û—é@”VUŸˆ´ÛË•´2½µã-nÐÃ)ÿ�t67uÈ÷­Z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�©¨i–z¤+ÈDNä`J¼mýåaÊŸpA¬íÚ¾€ÂMZÄn1qÀ”}0ÞÌkrŠ�«a¨Újvþ}œë,yÚqÁVî¬*ø8"­Veö‰owsöÈ^K;ð¡EÕ¹ˆ޾̶*¿öÅÖ•òë±"B…¸>N?颜˜¾¤•ãï â€6覣¬ˆ®Œ¬§ QN Š+Å·RYx?XºŠi!–9dI#8e`¤Œ­�`GáÙ|Qyq¯ WÓ¼çh`[ #@`Š®w#’þíTdø=§Í4’Éâ´’1wcqK’ÕzןYjÊÎh¼Q­,q"¢"Ü�ª�À�mé^¥¤xVâ÷E°º—Å^#ó'·ŽGÛv¸Ë(''½�gEð{O†håÄþ%Y#`èÂâ‚Aÿ�UëZ¿ðÜÿ�Ðñâ¿ü ‡ÿ�W?ã_ ÝhºL76¾,ñ7™%ÊÆwj'*ǰ‚¼»[ÕõÛ8ü‹x†[¦‘#Ëê/²2ä�©9ééϦ@;cÂ>Ó5I,§ñŠîµwÉmdEÄŠXç,#„í'¯8¦é~ðWˆoŸ‹<N—Ê7}Žõ– Hõ $ ‘î3\¦‘¦]é¶ÄYø‡[·óXÉ(‚ð ‘ÏV8êO©­KÏâoéÖÞ!Öäbdx&’ñ ‘P²ºç¡ �ì¿áEè?ôñýÿ�‡ÿ�VÄ ;°ÿ�„»ÄÍdËû;\BP§M¤y]1Y¾ðÛx›Â–•þ¿âhoX<W ¯*(–7hß�›”ãÚ¼Ã^¹Ötÿ�êVPx§ÄB{™"MÚ¬ÄíV µ�} áë©®t¥ŽéËÝÚÈÖÓ±ê̇ÿ�àC ÿ�­Zòÿ�ƒ“Ë%¾ª³ßÝÞLþLò½Ôí+n&DêßìÄŸ«Ô(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯„üGgýŸâ=BПšÙœàçŸ×5÷e|yñsB“Iñö«>Â!¹º’MØ8ÜØŒúáÁú@Q@Q@Q@{ìÙi3xY¼ û„´X˜çø‹‚?E5âõoÀ >…àv½¸M·:œ¾iãF¼(?Žãô"€=JŠ( Š( Š( /,­u f¶½¶†æûÑÌÔþ²¿°.,†tmR{P:[ÜfæÉŽõÊê=«rŠ�ÃþØÔl8Õt‰JùyÓópŸŠ`H°VÖ´týRÃU„Ëaw Â)Ãyn Sèè>Çš·Y×ú›©J'¸¶åFæ1L£ÐH¤0Ù  +ìzîÍüzŒCþXßøJƒÿ�BBO­ÄöÖÄ&¯oq¤¹ãuÐIúJ¤§àH>Ô¹E5dEt`ÈÀe9zŠu�QE�QE�QE�QE�QE�QE�QE�b>‡%‹™´)ÖÌ“¹­sm!ïòŽPû®9䆩m5ÈÞå,µZÂý¸X¥9IOý3~ôá€ê¢µª»;këg·»‚9¡¼’.A  «+ÄÖRê^Õì`]Ó\YMVd ~¦¡û.©£œØÈú˜ÿ�—Iäýòúg!ûßî¹ï÷À«Ú~­i©‡;,ÑãÍ‚U),dÿ�yO#ëÐöÍ�x5ªk—–ÜÁáMnHfdGH«)ý0kÒ´¯^Øèö6rø#Å&H-㉊ÛC‚U@8ýïN)°ëzþ…}} ÙxhjØ“4S}½!&,É…aœ/)ÿ��®nïã¯s¶š…ÌWeóZõD|`qÐïÈ øçÅz—ˆôÅÒô¯ x’;¸.RI™í#o)J·e‘¾nA�ãרðWúFºúRÛÙø?Ä)4R¤ñ´–yÜêÁ²Ç$’py÷®ëOø›s£Ú%­·ƒf%سÉ&¦…åsË;¶ÞXúÿ�õ…]ÿ�…½ªÿ�Иÿ�ø2ÿ�‰ =Òµ+ýBÄKeázê5c<›Ô0깨ô«°xž÷Âz­¦±árÝ"$bâÔF$‘‘•W%¹äŒãœgƒ][Zßø×_²ð5åÔä–»Óõõ¶y6’§vÜ錑šò¯‹m펧d×Zv¥kx"i^KÝ[í¬ë¸ ÿ�Çâ=(ؼ ®jðu†“uàßMuwžD¶ˆ†‘ݰL ‘–Ç#µpÞ‹âmK^Ô/¡ð–´±\ÜÉ*…�ÌHί5¿¤|zÔ.4»Rþ3Õ$™oÕ¸c·g98®öïÅž*°³žòëÁ"+x#i%s«E…U'§   /ƒZeõˆ×¤¿±šÎ_6 S¨ «?8'´«ùשV?†­n!Ò~ÑyŠòöF»ž2rcg9Oû+µ?à5±@Q@Q@Q@Q@Q@Q@Q@yß‹|mã8üE£Ì;¢ðÞÚLÚ!'®Óäàõg’1^‰XÈ|ŸÌ1ÿ�:r`ÿ�×)ÿ�þ·p‰õ}"ûCÔ§Óõ y ¸…Ê:8ÁÈÿ�õƒøŠ£_gøëáÖ‘ã›"·Kä^ªâ;¤ñÐ0þ 2qÜdö$š¼_ð§Ä¾‘ä’Íîl—‘s�Ü€{‘ÓñÁ>”ÂÑRMÖï²xž'Ævº•8üj:�(«Všuíü±Åii4Ï+m@ˆNãè?*õÏ|ÕµIc¼ñ)m:˯1çH8íüúóÇJ�æ~|<ºñ®½²ÆÉ¤Û8k‰OñcøÜþyè~¼†íàŽQcŠ5ˆ£T �¥TÒ4}?AÓ!Ó´»T¶´ˆa#OæIäŸsW¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¤ A¨4´P+øbÊ) ºd“éR“¸›' Œ{æ" dŸR¹÷¦ý£ÄvŤ:¬#þZZ Ø÷ÎÓîCeí[”Pe—ˆ4Ûëj—Uæ3ö[„0Íîv0q‘ïZuZ÷O³Ô­ü‹ëXnbÈm“ `èFzzÌþü±ÁÑõi¡Aÿ�.×€ÜÅøDƒÛéÚ€7(¬?íËÛ5}"xËÍ–nbú�‘ïœZÓ±Ôlµ8<û¸nbÎ Dá€>‡µ�Y¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ªŽ‘i©”y‘’â/õW¶Écú0ç ð{ƒWëUÕnïû#Hú“¨i%q˜í#?Æþ¤óµ:±€$�r¾*º×­[ìöAo¯í"vû|(CE Œš0%°ÛüJªªœù¶“öo°(¶9ÁÄ™9mý÷{ÿ�ž˜¯ t­. &Ïìðvf2K4§t“Hz»äþ@��¹o|/ð÷Š/¢ö©¢3J›‚ÎðȪFà}A ÓžÔåòÿ�¯·ÿ�xÿ�è&¦®¬|?ð]“lÖ¼!ql@ÿ�›{›‹‹v÷ʶåÿ�¨æ´,¾ü0ÔˆV–w$ÿ� ZŒŒ!%�t~ÿ�‘:Çýéôk×|X™u/N†e´_FÁ,Çór¿ðôkÑt¹®î4¥ŠÞÞ6‘³w(àN2ýx5Ïi¾ø&‘j²hí«jžPi£°–Y±#r˸0EÁ$|Ì:PŒèºtšh’&”<m&ä�tÿ�¥}B%'¾A΋k&æ—µäªx ë‘’‰€Ç�ç˜Óþøz[è¯.´k(c9[4æg=ŒŒN?à+ø±W£GCE*F€*ªŒ ° QE�QE�QE�QE�QE�QE�QE�QE�V5ùò¼W£KÚHnmÿ�òßÿ�iÙ¬mxùwZ%ÇðŨ®àqIýd³EP¥àÏ êûþÝ¡XLÏ÷ŸÈUcõaƒúÖ}·ÃÚJ%·ðõ¬n;ßã[Ú¾¢ºVœ×%7»I©8 $’,h ì7:äöIµòu©´(íåþÐKV¸ŽYe+³p1aƒ*uäàœ�½§èúf”iÚu¥¦ï½äB©»ëÍ]ªš^¡­¤ÙêVùò.àIãÜ9Úêgð5n€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ̾Ð4ÛùþÑ$UÞ0.­ÜÅ0ÿ�©cǵiÑ@fñœsmy©?ê¯�†P=¤A´ûŸVïJž'³‰ÄZ¤SéR“€/T,döÄ ˜É>›³í[tŒªèÈêX`‚2 �@ ä„RÖ!ðÅ­¹/¤\\iR¶¬<¢}â`S¿$�O­!¼×´ìý²Â-Jÿ�-¬É1ïœ~NIô  Ê+6Ã^Óu)½½ÈJ2ÖÓ)Še¦6±ïŒV•�QE�QE�QXÚ¶­:].•¥*KªJ»‰q˜í£<y’cñÚ½XŽÀ�VÔnŒë¥é!P‘w<®2–±Ÿùhã¹ëµˆŽÀ-iZU¾‘iä@]ÙØÉ4ÒÉ4‡«¹îOä��`�(Ò´¸´›C I$Ò»'žS—šCÕ˜þÀ����Uê�(¢Š�k:+*³¨g8PO'¿NûMÒïÝþÊÎá›…Ä®O~2=¿JÉÕ-õ3¬joi"Ç4úO“¦K'ÝŽàKgë˜O¸ŒúU,o“E³‰-õKkÇÔ­åßÞ §UÐÌC†l)A ëüXÂä �~»áÍ>§ÛèºlrÞÝ¢³GlŠÂ$ýãòpBlÿ�Šë€ ¡T��ÀµbÁþã ¹¹1éÖël¾žd˜‘ÿ�%ÿ�ßGñÛ Š( Š( Š( Š( Š( Š( Š( Š( Š( ±¼RvhFcÒ ›iÛýÔþŠkf²üK \øWW^K)•p3ÉCÖ€5(¨­§K«Hn#û’¢ºó،ԴZþÆ JÍínØÅX8*ÊÁ•‡¸`÷š¾°Kù5(üèµ)E7 <¸S ]åP±Q’ŠqŒeAë[tP6–°ØÙÁimŽ#X£AÑUF�ü…ME�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEVÿ�L±Õ!_ZCp€åDˆÓêcî+7ûP°Òuic¥¶  Â~H~,ÀzVå‡ý½sb1¬éWÀu¸¶ÍÌšê=Ù�÷­[;ëMBÜ\Y]Cst’©üEOYwžÓ¯. ×”Öׇ­Õ«˜e?V\nÍ‘í@”V•â 8~êx5x@û—�A?ýö£cm«õ¬ÝKÇ0[Í–µžµ>C¨qŸÞ3‚U‡ ¬KŽ9 _WÔîc™4Í)]JeݹùŽÙ:y’c·\/V#�H±¤é0i­lòÍ+y—œÉ<‡«1ý�����N——jPJ÷ÊÞd÷2c|Îz±Çà��� ¿@Q@Q@5Ý"¤‘‚¢‚ÌÄà�;Ó«Å,dÒœ‰5)’Èzíõ˜÷‰á@ð²3h‰{*²Í¨;^¸n«æʧýÔÚ¿ðÙ¤�*…P��Ô´�QE�QE�QE�QE�QE�QE�QE�QE�QE�R2«©V”ŒFA´P?„Ü·„´ÌY㵎''»¢…oÔجo ºmÌ= 7÷IAç»(ÿ�¾JÖÍ�QE�QE�QQ\\Ák–âháŒuy(üÍ�KEchdíƒPKÆþíŠ5Éü£ @ñ’Ÿô] W¼aHI] �lÑX«â ¹‹B¶‰}.µ ­ù$n?ZQ‰¥97ZM·°¶’×z*�Ù¢±†—¬K“?ˆ¦OO²Zăÿ�þqø‡@’C™õÍZ_¤Éþ‹E  š+þ9†MFAé&§rãò2bá/cçѬ¦ãž!)üÛ4£qgiŸ´ÝÁ:ù’Çæj”ž'Ð"m²kšbg wþ´ø<?¢Ûmô}>"AŽÙŸÀUè †�D1$`õ gò  ¯øK|9·rëÚk砎韠&ø·Aí¨Æç²Æ¬Ì~€ šÚ¢€1OŠô€?×\àßüM?þ[ùáªÿ�à¦ëÿ�Ö½‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãu¯E�dÂKcÿ�<5_üÝñº?á%±ÿ�ž¯þ n¿øÝkÑ@ÇÅ:Zœ9¼Œÿ�vK ÐþE'ü%š 8{Óza’0~›”VÕŒ<Yáò~mfÊ?yf?6Å8x¯Ã„àkúQ?õùøÖ½!”«�A ÷  QkZTìV-NÎF8IÔœ~u{9N]#Mœ6Ÿi §˜ªgÂ~=41O÷’Õ¡"€6(¬QáM!a†âßœÿ�£ÞM?ï—•«Ù-”±XiÚ«j³®bˆßÉ"F½ ’-„™<r@ƱªOo,Zv›Ï©Ü)(¯Ÿ.èe“Â;¬xÈ“MÐí¬,æ†Oô¹®Në¹çPZáˆÁ-Ûà/@0gXx^÷OŽGĺƒÝLCÏ,°Û°‘ñŒãËÎ;»�qVþÍâ8Ç˪é²ÚKÿ�À„¸ÿ�Çh‡ÃPÚÚ=ÝΖGH ! úyM•ýݧ޷ëzyÅþš—ÐùxÓŽ{˜\ä÷Yϵ?í%‰~m;KŸY/^2~Šb#ÿ�¤Ö¡æãÃzˆÀùš ‘GÓ÷ýó@´ýoMÔäh­.‘§A—ÁŽTíFÀ2þ V…s:†§áíF4]^Ææ=œ«Ýéó'–Ou—ný5œ…Üø¦ÖùFÑn¦[‘ô)óÕ‹ý(ª¢°ÿ�á!’ÈíÖtÛ‹ :ÜF<û®õQîêµ­kwm}n·—\@ÿ�vHœ:·ÐŽ(jÄ“ý7ÆQGœÅ¦Ú™Xvóe%TýB$Ÿ„‚¶ëÃ'í6wZ©ë¨Ü¼ééå GÅ[êÆ€6袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÆÑpš®¿L^¬Š=š¿ö`Õ³XÖ Gã-Mz l­¤ä<ÊO岬êzŶ—夋,÷2çʶ·MòÉŽ¸€îÇ�w"€4*½î¡g¦Áçß]Ám÷æ üÍd¬ Õ~k›„ÑíHm¶ËpGûRQ~Š§ÙªÝ—‡´» þÓ¢ÉwÞêre˜ÿ�ÛGËcÛ8\x’;Œfiº…ø=8|¨þ»å*÷\Ñÿ�5ßýtÔ?ïÝ?þÈÿ�ßCë[tP'ü#òLA¿Öõ[‘¸“ uO$#~dÔ°xcC¶q"iV(ÿ�–ÒF$“þûl·ëZÔPŒ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬xž8mâO´ê—Y[[D³ì@íÈì9  Z¶«%¬‘XØB·¥À&(˜‘¨àÉ!~dð=¤Òt˜ô¸ew•®/';în¤i[ú(èpâN&“¦x ‘äš+ në‹§A-̧¶ú¸€ì¿¼�{’kGþ]2c»Pêmßíó4¨O¯–v?-ljôW1ͬج å‰Ô¿p äþTÁâ1ÉòÖþ\u1i×âÖ¤ðZÄ"·†8c5 ?!RÐGü$¶?óÃUÿ�ÁM×ÿ�¦Â[¡/úíA-†3ºéüÜ[TP{MBËPBöWv÷(:´2¡¨ït7Rÿ�í>ÒëóÞæ*ß鄞mÖ›lóDÞXYú‡0?CUN‹fwiZÍÂÿ�,/³sÿ�$þG± ÿ�„^Æÿ�@žûO9È·N~‘±)ÿ�ŽÖUσ¯’áîìuHÅÓ´Í“3ÿ�¼ð•VïÆÃÚµ£×^ÎEƒ\·[b.÷ÛÈO@$ m?ì°ôÝ[TçÖ³ãmG¹ŠëMKá0û<76ò)‘ðªp™'8§Ö·tønhíô¨§:mÄ1¬Ia~† T€ 7àtô«÷ÿ�é¾)Ó,ÀÌvˆ÷ÒñÆìãëºCõAZ7úmŽ©nmõ +{¸&9âW_ÈŠ�µE`/‡îtÈÔh:”–Ñ ÂÙÝfx1è2w ì6¶÷OJ–Û^xîÏY³m:åØ,o¿Ì·™½L}‚±ì �mQE�QE�QE�QE�QE�QE�QE�QE�QE�QEÆx±�ñ.”±,íuym=¼+©`@ñ0,c`Jª™Œô^9¨m¼)k§øŸO·{íRy®4û‡º¸mFuyÞ7€)8~�ó�p7V‹lu:ÇY²¹Dt†IÛ XFÊUÙyÝŽ§oðU4VööÏW‡ÄvÒ…¶’8,WI mCóþ­qõ ë^Ÿ¤h—ú›>¯*ÙÛIpc]Zë.K`~ó©Åq2øŸHµ‚ÞÖâöî gûBÚÖîÒë[™4‘ãÐ,í¹v>àÙ `çÅzÓµÖR­®[F6Ÿü~ªÙxwPÓm’ÚÂÿ�Nµ²Å–¨ªOR�lÍ�]ÿ�„jÇþ{ê¿ø6ºÿ�ã•“áÝÞ÷Lš[‹½UÝo¯"ê·#åK™GvUð­O°kÿ�ô·ÿ�Àÿ�ÅÕM?AÖ´Ûg‚-z­<Ӝؽ$!þ?W4ÎxÝ×ÃSéÏÔÙÖi&­ÜÆÒ²lÛ d³#nb‚Û0£Àn¾"‚í5¨%Ì ’u»—XÚMÙ…†àRHöá”äò§'5×}ƒ_ÿ� í¿þ�þ.°kÿ�ô·ÿ�Àÿ�ÅÐGˆôh,­l^ÞóU¤Ô-¡r5[“”i0æNàÖÏü#V?óßUÿ�Áµ×ÿ�ª:‡õ­J8]z!¸ŽàbÀ}ä`ÃøýE\û¿ÿ�AÛü�ü]�r7z\~"Ôáo]Åo £µÅ³k æY°eèß“Ÿ3pË.;Š¥ ½‘³ÐIñü¯s=Îþ''eô^q?/³ û²üðG»û¿ÿ�AÛü�ü]`×ÿ�è;oÿ�€ÿ�‹  7F‚ëvÒ^jÍ ¹ƒÊ_í[Ÿ—rdÿ�ËOZ“Äm¶•§ÁqÚ‹3ßZ[‘&«tFÙgŽ&Æ%€ä¥OmáýjÛQ½½]z%ÙBàØ «´cç¥Ô<9}«BêWÚuäQ¸‘çJY\d˜àòy÷ AÛR“]¾ÓüÛË…n%\¾ â(be å¾Ð«/˜­¸m#n0A=: WEk?_^Ku©G©C¦É+4ZÐU”FI* §€Ý‰?ia깘RÈ™±æ“§_7|üã'éMÔ´-oSÒîì%סÜÂð¹ 2Þ€.Â5cÿ�=õ_ü]ñÊòû9u NæÒãMÕuKû9/å·ŒÚêìÉ [ɼÐdß´[ùl­¹nϧ}ƒ_ÿ� í¿þ�þ.“û;]Ü[ûrß$`Ÿ°þ.€9ïiš}ÅŠï5x"($Õä2[>X:Ÿ-Æ… »æÊ·&¯Ï¢Û§Š´û5»ÕE¼¶WRºjÜòÈð?ë;oδþÁ¯ÿ�Ðvßÿ��ÿ�Udе¹5[}@ëÐù°A,*>À1‡hØÿ�ý3Îøål´ÒÖ-kP²–ê[…!õ;‰ *ÚÌÀ„ó2ØEÂõ,ø«“‡[šÏK·º:–¡©Û‹›2f×%S6Ĉ¬IÉ+·˜å@U'aL‚¤ŸXû¿ÿ�AÛü�ü]`×ÿ�è;oÿ�€ÿ�‹ Â5cÿ�=õ_ü]ñÊÉðî‹o{¦M-ÅÞªî·×‘u[‘ò¥Ìˆ£‰;*øV§Ø5ÿ�úÛÿ�à�ÿ�âꦟ ëZm³Á½ VžiÎlÞ’Fÿ�«š�ÂñZÿ�c^Áke=Îéìå™MÆ©vpë=¼jï”‰Û ‘– 7 “YVz„óµ–é'`Ý.•u Õi ×R[€€Îv4~^çS¿€xÝ]e÷„%Ôî~Ó6‘w?•äù·<r7—ÏÉ’ÙÛÉã§&…. kFŠçJŒÙ¶¥4„@=B|ß(>Ø  þ#Ñ ²µ±{{ÍV6“P¶…ÈÕnNQ¤PÙ;ƒRxƒM¶Ò´ø. ›Qf{ëKr$ÕnˆÛ,ñÄØÄ£‘ô©õëZ”p$ºô CqÀÅ€ûÈÁ‡ñúŠ]C×ڴ)¥}§^E‰.t¥‘UÆ@`Ž'Ÿz�ætøï5/jZ\wÆ%UœÚHo¯\~îUŒ’EÀó1œ8ýÙVÀùÍtZ‚—Z=¼÷×—ÒÏ&æA¨]ÄŽ…ŽÂÌÄevœn=i`ðÅݵíÍí½Þ™ÕÈÄóǤ¢¼¿ï0l·ãWM×#EDÖí•�ªºx�AóПè—=׋RkÍVê{}PÙi–íª\€\î§tã$ö�žÕ³„­´ GD77w·Ú¦©tÖ··Í}p’2ˆ&”Û Â†Œ�x<’yªö¾¾Ñ<iÂkhÍ©Ksw¹ì†ÕŸ 0þ¥\{fºk¯__\Û\Ýßi׌ZÞY´¥v…Ž2P–ÊžOA@αe¬éV:Åë^)¶²Uš9Måñ~o26hÏË…ýâç©Â1[þ$Ñ-ì¼-«ÝÛ]ê±Ï”ÒFãU¹;YPy“ÔTQø8§3ƺLÒ‰Œ‹¢DÈ3†ÎìîäóדWu- [Ôô»» uèDw0¼.E€È ¤ã÷  ît.ÖÒk‹‹íJbFy%}^åV5%‰2`�9æ¸[#g} ø>ñüesk}} ³Ënú»…»'oœ0_vìå@B0Üz÷ìÿ�ýmÿ�ð�ñt}ƒ_ÿ� í¿þ�þ.€9ßiÖWú¾±×5mJ(] Ë­1‚2Åó•`w.Ѹ39åNFHçÑmÓÅZ}šÝê¢Þ[+©]?µnydxŸõƒ·çZ`×ÿ�è;oÿ�€ÿ�‹ª²hZÜš­¾ uè|Ø –`ôlþ™Š�£âÍ6=#Ã7w¶Sj>zÔ<º½ÐH•¤Uiï8 ¤±8</C\ú=ý¦t<My¥\ÜÜlûºäŽ—ˆ²”r¬ÌÔ)·;”àƒÜ}ƒ_ÿ� í¿þ�þ.°kÿ�ô·ÿ�Àÿ�ÅÐ'…´Ùcxä—SxÜemV䆨#Ìé\,š=OŸQ¿Ô¦°½¸šÚj öWI#AµÀØÊ€ Œ†ÀÉ �ï¾Á¯ÿ�Ðvßÿ��ÿ�\~«áÍ[Âÿ�î­-µ„»îf‚?°áÞfŸÌ@0ÇŸ1†8ô  ëC¢_/Œ/Ä÷úgØõ1b—CWpñ¢F»W26ÜZ\«�{‰¼ rúΣ.©^\ÝL±;ùöZåË Ê™|¢PÂD;˜2“Œb» 3AÖ´Í.ÖÆr D±ƒö“Ôü“×5oìÿ�ýmÿ�ð�ñt‘â 5Ó>Ïy«'¨C ˜Õn~d$䬬o,<ga¤ÏÕÎr©‚m^àµÃÉ)FÄlXJ±€¬Ë‘ò¾N@Åtz‡‡õ­DZ‰uèGÙîáq`9eéüuy,5Àê_[…“?0[ ÇyÅ�WÓdm+QƒNûQ¹ÓïžÆFmÆ2 ïâR2ÊI' Àœ]a\Êš—Š,m *ãKf¹¹qÎÇhÚ4O©Yˆê�ÞÝ Š( Š( Š( Š( Š( Š( Š( Š( Š( °åÒ¯t¹} â1-&Ÿ9"&'’caŸ(žü>€’krŠ�Ƶñ-œ“-­òK¦^±Ú-ï�MçÑ%_þIõÅlÔWð]Àð\ÃиÃÇ"†Vàðk'þÑiŸìFïOD*ÂX~;G²  º+í^"²ÏŸ§Úê1ƒ÷ì¥òd#þ¹Èvÿ�äJwü%ñ¨Ey§6pMÝ»*¬ƒ1ÿ�ãÔµEW³¿³Ô"ól®à¹ûðÈ~`ÕŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÎÖtéÙ*Å †î ö³Ÿ.P Á©Õˆ£IÕ“S‰Ñâkkè0·6²ž&þªppÂ?4jŽ¡¤ZêM’‡Žæ,ùW0¶ÉcÏ\0íÓ*r9€/QX~gˆ4âDÁ«[Ž \cÝXìcî>”ôñV’c»ôù[€—ñµ¾O .·üš�Ù¢šŽ’ xÝ]d2œƒN Š( Š£­iš^>ߨ[[±û«$ 3}R}…R:õÍÙÙ¤éwþ{])µ„~.7Ÿø @D…RÌ@�d“Ú¹ôx›Q†XÃÊQ*JFîa÷JúƇœô,8^dþÆšù|ï]Çqüßd‰LvËßæ“&?Ú;{í#ø§CÌ0ßGu*pa±V¹uú¬aˆü¨fŠÄþ×Õn‡ú0ÏI/æX¢ïÍEÙzÅè?ÚÑ…ü±Ó¢qè]·1ú®Ê�»¨ë~’Š×·IõqòÒH}Y°ÖrÍ­ëG÷Q6‘`Ù%®œ²¼¬VÜÙSZ~§iEÚÎÕY?ÖLļ’¼í–oÄš¿@¬l-´ÛQoi—%$³1êÌÇ–cÜœ“Vh¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3o<?£ßÊf¹Ó-dœÿ�Ëo, ÑÇÌ?ULJD'6ZÆ­j=Ïž?ò0|~µE�b}ÄVàù:½•ÈêȆ?WG�ß4¿lñ#2èö3(?òï~۾׌ÿ�}VÕŠu똆n|=ªÄ¹ÆåX¥€I±øRŸéh31½·_ï\XOÿ�ßL€VÍ•‰ô ›dzޜό”ûRnQœŠÓŽHå@ñººžŒ§"›4Ü&É¢Iû®¡‡ëY¯áoÈÅÛCÓKŸãû*üñ‘@ÔV(𦒙¥Ý¸9âÚúxG>È╼7�ÿ�S¨êð÷Ô%|øoË¥�lÑXÃC¼QˆüI« Îq‹výZ"h:F¨§÷~$¾#þšÁnß–#³Eb?_O»¯@Ø<y¶�çëµÇéŠq¶ñ'Õt¯ø–Iÿ�ÇèbŠÆ0ø•H+¨i2{šÔÖO;&ÑËc€a”Ïu�mÑX¡üO˜4‚{âiøš]þ&ÿ�Ÿ}#þÿ�Éÿ�ÄPÍ¿Äßóï¤ßù?øŠh)wb[G‰xÚ�–Cï“•  º+Ëñ3qö½!?Úû4ÃÌüéM·‰8Æ«¥{ÿ�IJOþ?@V1³ñ Ÿ›Y±LÏ-9‡çºSH4­a¾ÿ�ˆæõò­"�}2ëš�Ú¢±ÿ�±¯óŸøIµ_§—kÿ�ÆiŸðŽnÿ�[¬ëqþ•³ÿ�@€6鮋"u ¬0U†A’|3§· .¦àõWÕ.X¨2bxKÃßÇ£YLzîž!)üÛ&€(^Øx&Õ˜Ü.e&wIÝúõܤÕ[Îð«> Õu[²xÅž£{qÿ�¢Ý¿Èö®ž×L°±ÿ�Kk|Ï(•?«TÇÓ¤!ml<YpOL]]ÃúË"b˜ÚD·8Qá«©U~êë˺ôîJ?OOô¢€9‹-S³,tû?èÁ‡?g´i‰üA‹ùUÓ¢ßθºñ ÀõKtŠüBãþú­ª(|)¢– qgö×!¯¥{’·˜[…kÇpƱĊˆ£T`ÂE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�cÞxmuØt˜ôÛû©]#’I`TòáGr›sFAÎÐØœf–ÓÅ>¾ý—ZÓåû;:Ìás\îÜ3ÀùIÏ ÏJ¯©hšž¡¬ÛÜ Z¬aš9–!i™”©•eÞ0¯Œ0*x$dgŒeø}6í}%Õa’ßS»¬³å¤ÍpåÈ‘wNàŒ�Të¥uÍ!ⳕuK&Žõ¶Ú¸¸B.Ñ~côÍE/‰´Ò]oMã :½Ü`©$¨Ï<d‚>£ƒqà›™-4Ûk[Ý6Ê9#˜Ãk¥ùq—Iã›äUmRc�‚[=s‘Y÷5k«[ˆ?·ìOm¨[³e± ^L%‘‡ïúŒ_Nsš�í¤Õ´Øu(ôÙu D¿•wGlÓ(•Ǩ\ä³´ŸXkê3é±Ës ”Æ2üç‚+’9\( †Sš©uá)nµ™.šþ?²Owo}4Û/çB)I7|Š|µÈÁïÈÉͽFÔôîÏûNÚ[©nn.!œY²¤fYB y‡vÛø‡²@#‹ÆMjÒ\Ú^ÚN—ÑØIk2)‘$vT¬T¯ï£;# ;ñWu~ÇA’ÃûAÄ]ÌÐý¦GTŽ"#y2åˆÀ"6\V%÷αeêš‹ýµn!”Í`ÓÚÆÉ«& k1Žç$•,ÆÑVµ_ }ªhntûù`ºŽðÝzòÞDIŽXʬo 13p¸/ PƒøH†x¡žþÚ&žäZÛ–™14…�¸'ž@ÁÁÎ8årûïhºdÆCXÓí%�1K‹”€ pHã ß‘ô®wHð,úD¶Þ^­ÃkÜ(mNà‰iöMŒÛù&0§vÌ ÁÖ­á;ÍO_—P´vò½hZ̳쵙¦ Ì�f9;x¡ë@qëzLÖmy©döªÊ­2Ü!@XP[8É ¤z†½gÞxÓAµ¶IâÔ­.ÔÉ·Ù®csK"Ʋ·Í÷70ɬ];Àšw†ÆšÌ¦YÜ™^Èà‹a ªíó;‹x²sýî9�Wÿ�…yª¹‰å׬KÁ$ÓÆSLel—‘]’ÃÎ9PÑ*ÁÁ<æ€;µíy!Ž-ZÂGž#<*—(L‘Ž®£<¯‘Å6/h³ÜAo±§É=ÀÝ ir…¤r ‘ô®kKø}ý‘©Ë¨[Üi²]IæJ'¸ÒÕäŠw,I÷‚‘e¿Õúg 2M]Ó|+¨ivš%¬­ O¶‚Úy>ÁûË„ˆü 7™…dr˜®Òs@O¯hÑêŸÙ’jÖ ¨`·ÙZå¸ ¸™Î6‚zt¦Ãâ-æêX5>[™—tP¥Ò3È1œ¨$cÒ¸Í6Æù<{¨]ØÚO’µÔ%îläH­Cm"PÄ8vŠ#µX`÷>lÜÒ~ͦÛYY¾­ö½¤Ò¯Øö»Ël¨±²>ó°n9ù°Fã@,^%Ðn-Ì:Þ›$neK¤+ó1UärÊÀz•#µK¹¤\Ïj–RÍqšÒá¥AüJåxê8®>ëÁ:…ˆ¾šÎå/óQµ™bòy1¦ ×D’_æÇ›/L€Î_Ã+4¹¿všÑ–ù'ó%ûý¦%ß¼Ã1bcOœü¸8ìFM�tZoŠ4ÝgQÔ,ôÙRðÙE­-¼±È¼È‚ïduh¾+ѵÝ:ÎîÓP¶Ýu:ÀÓ§˜…I±”† rE.›¢=Ž·u¨´ð=½©†,/”ÒÃæ=D¸Çm£šç,ü 6™gijÓ5äê¶–ÉwKn-á·  °.IvI$BîáÂ@}γ¥Ù[Esw©YÁo0ݲΪ®1» “‚1Ϫ9õí.ÒB.¯í`í–[ˆÕXÉ»jŒ¶rväqÎxÎ(x‹M¼½¼ðÿ�ØaŒ¥­óË+º†HÐÛO%w)ošEÒ³“ÀaDÖ}š\šužœ ksæª[–*Þfÿ�¼w·!F>R9€tëÚEÔEk©Ù\Mqš¢¸Fi ò8<ô©tJ-gE°Õ GHomã¸_‚º†�ãŒà×9ià©mu…ÕãJšð@ˆ³>’¾dr*l6ß”B1”ø+“[žÒ¥Ðü7¦é2Ü­ËY[%¸™bòê ªväàà ó×ò  :(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯wy”hÒ’ZGÆ‹Ë;€~§ØO¬Vn­§½äºmÔG2é÷_iTÿ�ž™ãeú푈í:u  3xËG[m-.Ryc†IgxeGX<hÂ@*A•O# >•ÐWsàW:m½Œq˜¢Ò®4ƒ˜v»E123nåÀŒžŸ31<f»Z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢±üIö¹´Ï°YZ ‰¯’Êò<Qˆñ—Ý"«Ê‚ ã9aõ�W/¢\ÜÉàçƒÄW&âÈ5½Ê,RIö€‡“ ”Âó’1Ú¹{6þ-!O…ôŒi¯«ZÜ‹I„öFä,&|¬.Ià Ò6Ó€(ÓÉ=zR× âÕÖe¹Ó.e´kXí5'0Ýéa¯n6¶¸M͇ –h8ù¹#ª×¾$™%‰ÓQ´¾[M!î.,¬7þyûR#˜Ø8TpÛyêܸP¤Q\•þ«©E¯ë±ÆuAii§Âð´ó"´íæØv~óh0¶Õ'œŽÄV^•ªë²Éb—×zè‘¥–ÜÆºHPê'‘RYÂ~ïËoà†'h�ô+Ç“Uñͦ€“6¡­ ˜4€RÑ´;ÜÜ´}ZP¿)YNÝ¥yE wdµwÚ•ÝŽ÷†#»ºI¯Ï‘¬‹˜ÐÁ&ЧîŽörqÁl÷ ŽŠòCÄ~)ÝËo/ˆ_³ßÉK¡³$sí´L˜OG’Ù<�S©‹]ñ'Œ~Ù¨G¦ÏªA‹¾ÙåÒö4O™†Ñ¾-¦1¶Ä’Ä6Tœí \¢¸»;½nãÆ6«±q.ж±´@i¢Hïգɘܮwð€À9âf»¾‹BÔ¦c{£&¥$K[o:H£ µ°<‡;H‹rh®¢¹/ÞêW—Z×qÉÅÆ‹æji$F2—£ • mÉ7]¾€Vn«êmkæÿ�lÃÞ\GöDÑŒqº›™6Ë#´\f6‰Üüìp�;ú+•ÔõMR/év¶Ë¨g—Ý*Ø–„«E)æ„<‡X—ï�2rAºÞ©â8¥Ô-tûýa]®>k¡¡ùÑÙÅ»)61åG '›åáhÑ(®[DþØ)_ÞßOlt›b›­DP<Ûä60J>giláÎAÀÛÄë7%Ôô„¶Ô\hfkí(#Òˆ$oH±óaòüÖ9ÅůÑ\†µs«Xj¶Úf…ÈŽ"âHãK0-ÌècFdÙµr€¨#€:dg6ÖïÅs¤ÒZ]j“Û+Dªol#·œ¼‹"8Úc�¬napÀ`ã,hÐi ©ÅqWZ†»Ÿ¦ÝÝMªÃ3%´²ÓÄì´°F ¥–B Øñó¨1x¢ÛW¿Ô H×bÖÏUÓžÚÖ A"Mš’V}…Sæ TÉu�wt„Œž½+Ïô­[T’òÝ]µ«x仸ˆ[G£Ñ”ÜɶY¢ÀÌm”èÇç'hÊÒµ]jú_êš‚j»‹{Ï6=<æ)ÊáePQ�Ù¹àÁ=Øó…àÕ¨¯?Òõ>Ÿ5ÌÒÞ»A¨Æˆ—–BÙ®!–(À1®6Ììxç ‚ORÑuãÔueþѹDR­ÛHÂǘŠnRaòÊÞYgòÀ?7@€z ç§ZZóiì5/xþ$Õe»šg{YÒÏl×­ PUR0\%Tcðy Ó®uK=2â 4ë6ÚM¶ #&аÍ©Y¤Ž no?p8CÁ'oJ�ôÊB@êq^^Úÿ�‹•g}a ohŠaÑ™„Ê÷¬ŽØ‰¶‘n"€FãýšÒ¸¼¿½ð”×ÖúÕÒkp•/§:ÎÐÅ~dhÕ_Ü bvϾ(¿¢¼ŸRoj^¿Mb÷V˜M¨Ú¬–vÚ Þ18óP®'`-»ih;ŠŸK‡_´Öµ‹ei4床8 ˈÚßÈ‹æ· Yc *HbôÜI�ìh¯,Ñ5/¥†›ªÍ¨ªÛo{d Ъùæi„Y‘Œ€¤*9bkOź¯ˆ£…íÖÎåfmòY-¬lÚúÝî7 ‚3#B7nfåÀãð$Ð)AèEyí®»©Ïã‹·ßÝ&аÎÑY}ˆs„R¨ªÑù¬á|âÊU\dnZÆð´ž$ü1§4úô6±iër¦ùk6ó‰"$Åó d·äã{À€T×(®Ä‰"Ö/ÒÍõ8–‹ìñ[éë,S[•_6O0©ÄªL›P°ÎÕù[wßUñÚY£^kbÚMFeûbi¸kAlÌãòHVó°£ä]À—“@‡Eym†¿â¢Ù>§·y$–RÜÂú ýôFEP"É! œ‚Ø)œ¡Â›¢ÿ�[i4ÒÚ‡ˆäŠßPm˜i"=ñ˜f;U<œ”Þ±Ž�aØò ‹Ey~®x‘×GD‹Vµ o¤Ç%¢èÌù#-Ú’bùc�äÆc­àÝSY¿ñ.¦š¾©+F#͵›ChØ‘ƒIÈ$d ä€XõvÈ?) êŠò fãĺž–Úƒk Íoý¥z@q‚â-é">l>_šÇ!ÁØ “¸¡õ»x#µ¶ŠÞTŠ$Šª���`ì(J(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ­w¨YXyl¼··ó çJ©¸’O<jÍs¾+ð̾'[( ò[ZÂÓ4Éä–y<Èd‡åmÃfW9ÁçoLr¥o¯h× íµk á2ˆ‘\£/˜z&AÆãéÖšþ!Ñcû>ýcO_´ãÈÝrƒÍÉ mçæäž†² ðŒÍ¢×ÚŒr_^Ekqmkäˆü‚ÍíÜÙpÍ’sƒ€0�Å1¼qm Ç¥êQ@áäk›O>D‰ÈbŠÛ×£no›rò2§€: Í[MÓç‚ ÝBÒÚk†Û sL¨ÒŸE䟥QÐüQ§x„_Ë`û­l¦hZçÍŒ£²’X°X.AdÕ/øIõË»™ù ‚úÍlo"’ßÍ-³01ÃcåÛæÃvã ¿áí*ïDÓ.-î®â½w»¸ºV†ÜÃ6F”® ¶HglŽ1é’"xG•Uíõ;)ãÜCÉÔec3&[æé´gŒœôÉ _xyíÍÂëºa„:Gæ ¸öîa•\ç#;×) øR·µðÍì×vö—Ú}­¬wímæåA,[w,˜ÏúD¹aœáxã›ü:‰¡¶€K¦Ímo3È–÷šbÏT8Ú\s¹r„}ÀvàŠ�èSÄúX½»´ººŠÊh/š­Ì¨žt†(åù9ù¾YWßÚ­ø‚ÛC²¼¸–)§6–’^K XO$pqÏ88èkü#ª­þ¡sm¬ØÄ×—>j³i›žò¢jŸ4q g‘´‘Êž�¿­xqµIuu‹WÒÿ�³e`2aÇ›µÀ'ŸõÍ‘êß�I­iÓE Ö÷pÜA,ßgA"º 9Iƒ‘©©jöžÕo ‹P¹Œ]ÛŸ-/Z?x3°„`X0OºrÞœUDðÅÂÙ´3ÜÅ4×zœ:…ÜÑEä hŒl¡sc>J’z±ö«:׆#Õï’ño&µ™@1wt}ѱõÚKñßy ‡Äš%¦¨º'ŸmhÞµÝ$iÉ'˜¨± ó)¸¦1SGâ_HRhµ½)Œòyëwós°òFz{×9â_‡×"}BªÛZØ^Cgmå-“#†ÞF*¿˜9fsÎÞ�óSª É5ÖlQ–$¶’át¼~é3·jù¼>NI;”á~L(ÔÚj}ì÷1ÙÝÛO4åÜ,2+4mý×�ð}2MkJŠÙ®dÔì’Vf•§P¡U¶±'8Àbô'—áo Eá‘p#û °X¬º‚Hóœæ°ÏÞã<’2sK?†e {öä€Ý]%ÀY`ó0fP)ŸsîÎA>Ôa¼S¤Å©½”÷pÀ<«y!žY‘cŸÏ2XÎ~f>Kqß¶jÏöî¾þÕ±ß4i‰~Й’gÌ^yLs¸q\¿€5 {¶å±òlôëhìå6rù±³~÷æÜK:ŒŽ_§|9‡O–"eÓn„V)h²]ii$˲/(m· T É‚ Ý‚»�uöº…í‡Û­/­§³Áo´E*¼xNàqÅW‡Ä:%Ä~dÆŸ*y~nä¹F9;²O•¹ö>•R-Tÿ�„~öÂãT¶–îçvÙ…–"@@|¶v,89Ëçæ<€�ý§Ã»˜­õ˜.µ‹{ˆõ £ìFEÌ·piH»§pTã*�õ$­“]ÑâÓbÔ¤ÕlRÂRwMp‚'' œ‡½Wºñg‡l/šÊó\Ó­®V4Ç=Ê!ÚÙ FO9Çê=EUšßÃÖÚ}ƒéV“Á'˜­›¶$0m‘,ŠS!!óÉÎA"³¯|}?ˆíõÈ5˜é4µÓ&[‹*J¡˜³m »§AŽà@:;½{G°./5ks‡:ájœàœžÁÁöªš§Šô)좒îg½–á†)£.Ë,‹È°,™a’3Ås×?Zb#…œ–°ÚÙÚÛ[Þiþzm·æ‚àI»Í~qòr¹: à¤Ky!¶¸¶d¼³»!lÀµ¹ˆ„@mB"�/mÌrs@Ö§¦ÛÜ ;»ëH¦’&A,ª¬Ñ¨ù›i9*rzUh5mËÿÚ·– £ZÅÄÖî¦ÑxÂíã¦Ò³5¿ Ýëäÿ�Ú«'+o-™»0ÍV;ÀeÄÌpGõÔíáëË¿ jº6£©Ç4º„3CçÃlcX•ãÙ—bqÉå' �>)ðÆ¡}7Ÿw§¤ö—E–C IæÄw¤«ó w­XõíY'Ž=ZÅä·Í™Vá ‰?¼Ã<s\f³ðóXÖc¾Y|Ca^ÜËq+.”Ùí>É´~ÿ�´eûÇ=87$øyÿ�ÚÆY´Ó%þ_íKO81er®å™åû‡|¤�uë6 ¡Í¬Çr—6@÷kb% Š %vçwCÒ ÑuÔ×4ù®¡²»€Å!ŒÅ6ÍÌB†YY‘ 9 Œäj²øvH|+ý‘gqk§ËÁìl„P©ïºØ!†ìÇžjxE4i~Ñ5ìÒÎ$gŽi%·´‰Jãb[‰1Ôó““Ô``Æ•âýYÓ,¯­nà)s»¡ž=Öù‹Íăw/P2FsÓ$XOè/¤Ûê£Y°[ L7pª€IÁ$r6¶GQƒž†¹­'áýæ—w£\ fÞFÓ|ˆð,Jù±C ° ?¼áöÏ&[œ¼�0o/„µ4o X[jÖ¡ô!òI5‰q)<(J‰0®Iç’J�Ü‹^Ѧºû,Zµ„—/î–å üÈd^3žP Ò¢&ÐÝÄpë|Ó3ˆãŠ;¸Ë;‘€nåˆäzçm|saw¢ÜÚëÒì-­@’̰‘áŠx•Î`¸|¯¨^x9­ið÷SµKH·lš xtØ04ÆÉg!•~o;‚ÌNN:vï@&™âíTðüzÒjV°Úc–c4è>ϽCç ØaÁ5b_è0Æd—[ÓcE!K=Ú� �œõ ÌW+Ãbº4vsßÙÝM v°ÄgÓƒÀÑ[«ª b.w’$läch«¶^ ¿Óí/£·Ô4Å–{ŹƒYXíÕaXB*, ‘�ÈeêÜ`â€4£Òô-3VŽò(Y®î¤’Xó;ȈXfIYŠÆ's(ÝŽK`݇^ÒkKë{¨$Ÿìþu¼«",”x9ãê@ïYº§†¤Ô`µI®¤‘†>™q$j±³$Â0Ò(+œtÁ8èS ^É¥ÛY]ÜZÍ ¼·¸š{{o³‚°²:»›$˜Ôq‚p�  [^ÆÒi’êê uˆFZIfEP\«ÉÈ$Žà‘Œó…Ƙt¯íQ¨Ú;nÿ�µùëåmÎ3¿8Æ}ëY𞡪kW7±jÖÐÁ?ØröFB¬í2Þ`Îæb1õ«Þ¿¶ðÒé‹©Û›£{%ܳ›3å±yÚb¢=ù\À;‰€6.µ}6ÆÆ;Û½BÒÞÒM»'–eHÛwÝÞ޵U<Q Iu=ªëV}»ˆåŒÜ(eb»€Á>€ŸÀúQ‡Ãw–žÒ´kkëCs§EQÝOfΤ"ÈA"•b§Üö8¬ËŸÞÝ]“\ŒÛ½ÇÚg_±bGsd-« ¹\·Ýà‘ØPJ<C¢·cO6~o“ö´§—ætÙ»8ÝíÖ²¬ÓÁþ¸’8ïì­gŽ2¥nu Í CªùŽLh2§hÂôã¥fOðúi<+&‰î•d³,«;Ùé ¾øŒ{‚¬ƒƒÉÎLSMàíeõs¨¦·§ N u ¯¥» ÿ�eÊ¿ëÇÊ-î}(±ŠXç…&†E’'PÈèrAuúÎÐ4¶Ñ<;¦é-8œØÚÇmæ„Ù¼"…8Î=kF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÏÕõxôˆ­É·žê{™¼‹{x6ï•ö³`eQò£’¡Tµ=*ÏX¶[{ØÙÑHŒ’4nŽ:2ºÊy<‚:Ð=£x¶ïÄ)k;+) Ó-íD³½ÄKæ ’ÆS‰2…^q²U¾èÚY¶¾3’÷\„Car4™tË›è¥x—uÈá ÑaÉ*D‡†U?tô5³¦øcIÒ5¾±‚X§’ææVR‹‘˜®w;±œ³üÇ,›Âz,ñÇÛH+w¶c¹•q9RÊ»Xm1Ž›F1@V>>‹P’ôA¢jE-`YXî‡%Ìò@cÿ�YŒï‰þlíÂ’H-ª<C Ι¢ÝÙ)?Û&1kæŒ`4M.XDF8î@ç5^?x~vŽÚåØ32ßN "F—9ßý÷sÿ�oSW“@±·Ó,,-¡N*Öyv(ª•,rFÖ+Œô$ q€ KOÞjÚý½¶Ÿdécs¦Ü]ÚÍsä£Â‡'a¼ª~éèjî­âGÃ˯é>VåÓN¡�¸BÊTGæ�Àyuã=êàðîŸ C%¢Io5½¼–Öî’¾!Ê– ¤íäLqÆÑŠY<9¦M¡O¢<2:hÄ/¸,(]ŠCeW €yõ9�¡?ŠF—¨E¥ßÛ\\\¨´VÑ*@¦âFŠ3µ¤,u#1¦MVñ‹n´ÍJ{ ]6Wkf°w™¶2È—>IEÃÀ|1•9Ç¼Þ Ñî;©"¼’d6íºMBá·´[|6Ö%¹ÎIÉÉ©õ? iÅêÞ^C9|¯š+©bÊrñä#�ÛY‹ ç“@Vþ:†äÌÑišŒÄ{QbH›Ìž6,æ]˜ nëÔr n­x“[Ô¬E·ÒìËÏ©ÝùI#WÈr†D$áFày8VŽßÀ´2›xµžQóºj·AÏÎÏ÷¼ÌçtŽsŸãoSZSxsKœiA¡•WJe{5ŠâHÄd.Ѭ7 ¹\6F  È×Ä ;fÆúúæk™ ZÇ+rm†íòþ³ O© Kmãë˜fs¦jQI °Ã$2,[ƒËs%ªŽ$#‰b`yèAퟩxq{èÂ-ã-4W7“I-¥Ã¹g•÷,›² ^s×$VÔžðü³M)´^k•º“˽H²4Šp fp½18É  tÏÁªk—:\Zf«·Sºî[R-™ÁÃ"È ”äÓ àœU/øªë@†æ;’àiWš„w ´Åªpë¸1ºŽ?¼:Œ‘¢þ°²^[=Õ¬òÜ%Ć™³+~MÛà6¶ œúÓõ¿ i^"@ºœÈRAû»‰!&96ïBQ†U¶.AãŠ�ÈOˆo¬$hºá¼[‘op±Ú E®åVG•‘ˆT`àƒ×ƒ0kC[ñ,¡io<sIöˆÉDŠ0ÅØÍ +‚Xcæçvr6œ¶ßÁz®¤úŒP] É$2I+_NÆRBŒ>\î\"áN@ÀÀ©µ éæ¡m}¨C<— Y.åˆ.\|¨À™ò:ªú �§cãK[é^?ìÍF[{™À‘#;ͼ‚9£\å•ȇ<T§ø§ÅodñézÄ÷R¾Ï‡|L.>φ&@¿ëp¹V#zsWað‡  Óº)b;õ+—ÂÈâI1™ 8 XrHÎk+Tð=Á½·MAoméa¸šîg–ÒáÝ™åDmË&r ^sÔ(wAñD!kϲéÚ¤1Û‘åÍujbŽéNpÑ1á”ã¯G­7Bñ2ë"Õc²¼)5¤Wñ¢Xâ“|jÿ�*—.>ðì@9‰®XøMÓ`¹‚Ò9¢Šãvå2›³‘[÷c$œ&yªÚo„4m&kI,á¹_± Kt{Ù¤HÀR£ÎW!I\ã8ã8 n|W¥äÖÂÊîòq¨á··‹aq‚^@W$:€G8ðüO²žš- [¸F’!Ú[,ï*<1Ê_b1*f9þúã' mMà­{éo^+Áq,írΚ…Â~õ£1�8 v£Ààb’/øz…`³š'ËòÌWs!]‘¬KÈ|ãbªŸï³Š�†oÉ'ˆìtÛ[Y?í&±»’dÏØÞáva²6u^äpj«|F°]6ÿ�Q:>¶,ìÛ>{Ùùi4{YŒ±³0 €)=rr0 #:iàí=D_¬"ä]›ÐßmŸb›7mß·>]¸À^1Ž*)¼ áë‹i-¤´¸6îd&!{8@êª ¤1ùF¾3@_ø²ÏN7Ë5­ë=›ìxãŒ;¾UJ”PrÁ‹ª s¸ãÖ.³ñH¼/y}¦hÚšßçÉzð^ZͪáLÊΧ clm,p¤ãº{­K½Št¹µùöëm+;±vI*7g9“œç<æ¡“ÂúDÖSZK²G=±µœ½Ì¥æˆçåwݹ¾órI#qÇZ�¡â?KáÍfØMm$úkX\Ý\y ‘yO.I`6•‰�ÇéZšn·©,‘Eo<oH’‰ƒ#”ÃaÞÁeì@ÏqI©øwKÖ$¶’ú•­•’<O"å[nå`oS±r­p*m;Ok7»ši#–æê_2WŽ/,(U�džGRyÏN€oY‹]EþÉ{lmm®çY&‰\[Hb˜€²dílpJäƒé%׎-¬õ FÎ}#U `»¤u‰8b{�rÍæ1Ú£$08Á©-¼§ÿ�e_Xê%¯ì—FVW’/ÝÏ3JÑŒ>T|À»hÍ[¸ð®wK‹ye DÅîe%”…Ù'äR 䑃“@ôßͪëLiesgm{aupö÷ÖÍ Äo° À"Võìs]-bÿ�Â+¥}¢ ·¾|ò[G/ÛçÞñ»-¿$œ/Ìrß*óÀÆÕ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�ÿÙ�����������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/RIS24sak3.jpg������������������������������������������0000664�0000000�0000000�00000035103�15030617045�0023163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��– "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�ö-KÄ7¶÷i¤iГIJ(mJL€Ã<þãÞ§ûOˆÿ�è¥àÊOþ1Shò-éõéþ€+F€2>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb¼â—Å/xsâ>­¤é:ÏÙì`ò|¸¾Ë íÝ 1å“É'“\ü.߈ô0ÿ�ä•¿ÿ� ª>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb¾Wÿ�…Ûñþ†ü’·ÿ�ãtÂíø‡ÿ�CþI[ÿ�ñº�ú£í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+åø]¿ÿ�èaÿ�É+þ7Gü.߈ô0ÿ�ä•¿ÿ� ª>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb¾Wÿ�…Ûñþ†ü’·ÿ�ãtÂíø‡ÿ�CþI[ÿ�ñº�ú£í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+åø]¿ÿ�èaÿ�É+þ7Gü.߈ô0ÿ�ä•¿ÿ� ª>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb¼Ûà_¼EãíïíýCíŸeû?“û˜ãÛ»ÌÝ÷g;W¯¥{�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb³®µýz×ZÓô¶Ñ´Ó-òJèãR}ª# Nqßp®¢¹cþJ…ÿ�ë…ïþƒ�h}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÖ~»©ÿ�bx{SÕ¼Ÿ;ì6’Üù[¶ïØ…¶çÆ3ƒ@}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅx·ü4×ýJ?ùRÿ�íTÃMÔ£ÿ�•/þÕ@ÓöŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ãâßðÓ_õ(ÿ�åKÿ�µQÿ� 5ÿ�RþT¿ûU�{OÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒW‹ÃMÔ£ÿ�•/þÕGü4×ýJ?ùRÿ�íTí?iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1^-ÿ� 5ÿ�RþT¿ûUðÓ_õ(ÿ�åKÿ�µP´ý§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅx·ü4×ýJ?ùRÿ�íTÃMÔ£ÿ�•/þÕ@ÓöŸÿ�Ð+Jÿ�Á”Ÿüb´øþZWþ ¤ÿ�ã¯E�d}§Äô Ò¿ðe'ÿ�£í>#ÿ� V•ÿ�ƒ)?øÅkÑ@iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1ZôPGÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒV½‘öŸÿ�Ð+Jÿ�Á”Ÿüb©éšÎ¿ªZ½ÄZ>šŠ—ÛÚ”™ÌR´dÿ�¨èJ=tu…áùÜØSPÿ�Òɨo´øþZWþ ¤ÿ�ã†ëÄ@t½(ÔNOþ1Rê”ÑÜ >žù—q p‘/÷œÿ�!Ôו|EøüAm¦jÚDšü²Ú­×™%ç“î»V0„S“Í�z;ëz¤go ©ô:Ãý¡MþÞÔ¿ç–ÿ�ƒ†ÿ�ã5âËûAiˆ¡WÀŠ£°¼_þ3Kÿ� §Ѓkÿ�‹ÿ�ÆhÚ?·µ/ùå àá¿øÍÛÚ—üòÐ?ðpßüf¼_þNÿ�¡×ÿ�ÿ�ŒÑÿ� §Ѓkÿ�‹ÿ�ÆhÚ?·µ/ùå àá¿øÍÛÚ—üòÐ?ðpßüf¼_þNÿ�¡×ÿ�ÿ�ŒÑÿ� §Ѓkÿ�‹ÿ�ÆhÚ?·µ/ùå àá¿øÍÛÚ—üòÐ?ðpßüf¼_þNÿ�¡×ÿ�ÿ�ŒÑÿ� §Ѓkÿ�‹ÿ�ÆhÚ?·µ/ùå àá¿øÍXŠÿ�]œŸ£ÈRš£Ÿý¡^ÿ� §Ѓkÿ�‹ÿ�Æk·øqâ½'â[j޾H–ÃÊ"K{œ³7ó•TÁ=óš�ï~Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb ’æÿ�A`×r5ÊþöêØá—ß­n£¬ˆ®ŒXdr  Ÿ´øþZWþ ¤ÿ�ã}§Äô Ò¿ðe'ÿ�­z(#í>#ÿ� V•ÿ�ƒ)?øÅiñý´¯üIÿ�Æ+^Š�ÈûOˆÿ�è¥àÊOþ1GÚ|Gÿ�@­+ÿ�RñŠ×¢€0®u]jÅa–ïKÓÄq Ñjì¾d‹ @8,2+v²<Kÿ� ¸ì!eÿ�¥1V½�ghò-éõéþ€+F³´ùô¿úô‹ÿ�@£@ |mÿ�’½®ÿ�Û¿þ“Ç^^ñ·þJö»ÿ�nÿ�úOq`¸ûÛ6¯•×ï ØÎ3ޏÏõ  ÔQE�QE�QE�QE�{ÿ�ìËÿ�3Oýºíjú¾ý™æiÿ�·Oý­_@PEPEPEP\Ʊÿ�%Âÿ�õÂ÷ÿ�AŽºzæ5ù(>ÿ�®¿ú tÓ×?ã¿ù'ž%ÿ�°U×þŠjè+Šñæµÿ�moD²;M‘^ã?,K":î<t=HèhãZ+«ÿ�„:Ûþƒ–¿šñtÂmÿ�AË_Í?øº�å(®¯þëoúZþiÿ�ÅÑÿ�u·ý-4ÿ�â蔢º¿øC­¿è9kù§ÿ�Gü!ÖßôµüÓÿ�‹ RŠêÿ�á¶ÿ� å¯æŸü]ð‡[Ðr×óOþ.€9J+«ÿ�„:Ûþƒ–¿šñtÂmÿ�AË_Í?øº�ûRŠæ¬üUqu{¹ÑnÐHáKíl(=ÎTp>µÒÐEPEPEP\Îxš…u ÉVCRr=qw7ÓWmσçød×.‘¾‡P“4Ñè¶/geæ\×—͸|ucÛè:¥|åûGÉCÓÿ�ìþ–¾Ÿ¯˜?hïù(zý‚£ÿ�ѲÐÑE�QE�QE�QE�W¿þÌ¿ó4ÿ�Û§þÖ¯�¯ý™æiÿ�·Oý­@þ@e*ÀF=ëHOÔnôŒŸ%Ol é ý=ˆ­ªÇ»ù<W¦²Žd¶ýÐPÖ€6(¢Š�(¢Š�(¢Š�Èñ/ü‚áÿ�°…—þ”ÅZõ‘â_ùÃÿ�a /ý)еè;@ÿ�‘oKÿ�¯H¿ôZ5 È·¥ÿ�פ_ú�­�ùãoü•íwþÝÿ�ôž:á’âcnÖ¾tžIù„{ŽÝÞ¸õ¯²5¿…¾ ñ±>­«hßh¾Ÿo™/Ú¦MÛT(á\ÀYçà—ÃܺVìÂö|~^€>@¢¾®Ðþx ÷I‰î¼> Üe¡¸Åäà•cüFG±£ÿ� Káçý ßù;qÿ�Ç(ä +ëÿ�øR_?è^ÿ�ÉÛþ9Gü)/‡Ÿô/äíÇÿ� (¯¯ÿ�áI|<ÿ�¡{ÿ�'n?øåð¤¾нÿ�“·ür€>@¢¾¿ÿ�…%ðóþ…ïü¸ÿ�ã”Â’øyÿ�B÷þNÜñÊ�óÿ�Ù—þfŸûtÿ�ÚÕôsþðO‡|ö¯ì ?ìjÙç~úI7mÎß¾ÇÜÝ=k  Š( Š( Š( ¹cþJ…ÿ�ë…ïþƒtõÌkòP|/ÿ�\/ôè§®â_ú‡u[ìâ;&òÊoL˜£côeeõÒ»šÈñNˆ¾#ð®§£±PníÞ4-Ñ_)üð …è¯vÓg4Ô´ËkØüXUg_iÓyRG*{Ô? ³ÿ� Ëÿ�SwþSûm�xïÿ�ðÌ¿õ7å7ÿ�¶Ñÿ� Ëÿ�SwþSûm�xïÿ�ðÌ¿õ7å7ÿ�¶Ñÿ� Ëÿ�SwþSûm�xïÿ�ðÌ¿õ7å7ÿ�¶Ñÿ� Ëÿ�SwþSûm�xïÿ�ðÌ¿õ7å7ÿ�¶Ñÿ� Ëÿ�SwþSûm�}EPEPEPEP\Ž›h÷¾ Ôà‹iÔu?Þ[Ù˜~ W]X^ÿ�-Çý…5ý,š€4´ËøuM6 Ø)2úãð5ó_íÿ�%Oÿ�°Tú6ZöÝ$\øzçQ·âÊÞà—yxÑÀdtÔTT'Ö¹¯|,¶ø¡­[k–¾#KXã´[m‹kæçí’w®ÏŒcµ�|¯E{ÿ�ü3/ýMßùMÿ�í´Ã2ÿ�ÔÝÿ�”ßþÛ@E{ÿ�ü3/ýMßùMÿ�í´Ã2ÿ�ÔÝÿ�”ßþÛ@E{ÿ�ü3/ýMßùMÿ�í´Ã2ÿ�ÔÝÿ�”ßþÛ@E{ÿ�ü3/ýMßùMÿ�í´Ã2ÿ�ÔÝÿ�”ßþÛ@^ÿ�û2ÿ�ÌÓÿ�nŸûZøf_ú›¿ò›ÿ�ÛkÐ>|2ÿ�…sý©ÿ�í·ù_òíäù{7ÿ�¶ÙÎÿ�n”èlßmñ=ÍÂóœ"Ø7c#Í  )·š¬·³ „“‰n±˜à^ŒÞƒó­+ (´û4¶‡%W’ÌrÎÇ’Ä÷$ó@h¢Š�(¢Š�(¢Š�Èñ/ü‚áÿ�°…—þ”ÅZõ‘â_ùÃÿ�a /ý)еè;@ÿ�‘oKÿ�¯H¿ôZ5 È·¥ÿ�פ_ú�­�(¢Š�ƶÿ�AñEݾŠþ!vœÿ�ËDÛƒÛåòýõ[5ç|K«xZÓLÔ´í:9„S7ú[±"&(˵c †'9ê£Ú»O êê¾ÒuÊù×VpÍ&Þ›™8üI  :(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ5ù(>ÿ�®¿ú uÓ×1¬ÉAð¿ýp½ÿ�Ðc žŠ(  m}‹QÔôÌ‹/ÚáìJIoüˆ$ú+f¼wâ޵⟠ø‡MÔl§H4©�‡ÎŠ?›;•™œõÚÆ8Ü=sìT�QE�QE�QE�QE�QE�QE�QE�QE�V„ä qÿ�aMCÿ�K&­ÚÂðün?ì)¨édÔ%é>%°»è—¨l¥?í É>Ã«ŠžëBÓî¦3˜šÏü¶·sþ%qŸÆ¹o‹xƒþºÐ.Lmhâ{ˆÑvE!·)# ©�ñÛ?J½ðÆþãSøu£ÝÝÜËsq">ùerìÄHÃ’y=(`h…F«©ãÞp˜¥þÅoú ê_÷øñ5©E�eÿ�b·ýu/ûü?øš?±[þ‚º—ýþüMjQ@Ø­ÿ�A]Kþÿ�þ&ìVÿ� ®¥ÿ�‡ÿ�Z”P_ö+ÐWRÿ�¿Ãÿ�‰£û¿è+©ßáÿ�ÄÖ¥—ýŠßôÔ¿ïðÿ�âi‡Ã¶’¶n®/nÇ÷'¸b¿÷ÈÀ­z(8`ŠÞ%Š’(×…DP�üIE�QE�QE�QE‘â_ùÃÿ�a /ý)еë#Ä¿ò ‡þÂ_úSkÐvÿ�"Þ—ÿ�^‘è´k;@ÿ�‘oKÿ�¯H¿ôZ4Yµ–â6¼·[ ’u2®b\gs ü£94.£bò[F·–ì÷H^ÝDªLÊIAŸ˜`ç"³&ðw‡î/µ[ÙtÔkZo{&ö̱ãn:ü¼ÊàñšKh·šMÜ:r¤úD& ó1FFÒ:üÜ÷³Ö€8Ëi_ƾ)Ô´}Þk4‰ŠÛ{‹B£?+*¼?Úõ(Á®~M>ßÃ&‹H¸×®…ŽŸ‘¸ "˜¢F’Es(uV.Ca@OÊEvÚG‚õ=XºÔlî4äy™ˆ‰VeŒdòJïù˜àe›=8Åt;<Mÿ�?Gýø“ÿ�‹ ?ÄÚ^™k­‹K­jãÃö?eÃuö¬}¢bÌ=òîQ´8'++ÄqY[ø{ÂW‰¬Üé/¨àÌ×7«:g“-¼8VÞ¨02û{‚=g‰¿çãHÿ�¿ñtlñ7üüi÷âOþ.€0­,4«[k·ö×ÓºiÉw:Ã,ÂG>XfÂoàžxϵ[úäqj7Vš¹qakq‰JÊÑi¾ržk? òôéž›g‰¿çãHÿ�¿ñtí2ÇQ‡U½Ô5í]¦‚UmÑ”(F‘²w×Ìý(FÒîÞúÖ;›I£š RHÛ þ55aøi„£U¹„ƒeq~òZ•èɱ˜zƒ"ÈAî}ër€ (¢€ (¢€ (¢€ (¢€ æ5ù(>ÿ�®¿ú uÓ×1¬ÉAð¿ýp½ÿ�Ðc  iuÝ* U´¹oàKä·7- 6D }*šxÇÃÓZé÷뎚”†#¿ýtƒ£¾sÇÔÜV“éZ|šƒ_½•»^4&ݧhÁss°ž»sÚª h«gim“d±Ø±{4…9Éܘ)ÉÎG9ç­�yâ”ñ•î¹§øªá…¼NÛžÚâÙm” ‡ç÷j�ù³!,pxŠ»g>‘ÃßkWn®µ²·êRDiJ«à‚FT—b pºb¯è~ ×¼?usqg}¤ï™˜…h')'8UóqŸV9cëÐ ß+Æóû¡ÿ�àßüv€9 UÒuk ËÁ£È±Ú_/TžCHH`à¶XöåÓœ95.·oh>k:ÊÅq¤]ÚÚHѱ½‘ÊN‹Ê|ÿ�)ýà)Ðç¶2+ªò¼aÿ�?ºþÍÿ�Çhò¼aÿ�?ºþÍÿ�Çh…±µ±¸Ð®#kûÛ›È5‹ÏpVU‚[ˆUI1Ž®¥Êº€ œuº­?F‡ÇÚn‹ö†Qq§\ÎöÆõ÷–Y!°ù·t3{§ûµsTÒü[¨ZÅÝh’,wV÷b-åL’c~æÆvc;Mk}§Äô Ò¿ðe'ÿ� #PÕtKEÔÚ+(^;-LiÞtšÔÉo$JÍ#�|°îúŸŽ*ÖŸ5…ýŤ'@¼€Ü¢:ù—óåw¢:;|¦lúHî u¿iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@{â{}:ÂûWûVµ{£›$cg ã}úùa‰_7vò[r\¯=s]V«áÍ6-GAEŽáD×Ì’w)Èû4ͽê þ±öŸÿ�Ð+Jÿ�Á”Ÿüb¨ßCâK˽6q§iKö;“9Ú2ùŠHñþ£õ™ü(.ËOÑ®<w«èÂá¤[[Y…¸½}ñ»´Ûó†ÏÝžznÞ¬ ?è—º¼:bÉÕɆ9#Öfs*ý¡àÆ žc ¨ÊyÍzÚ|Gÿ�@­+ÿ�RñŠ>Óâ?úi_ø2“ÿ�ŒP9§ÛØ^ë §I£ÜBè̬ÿ�Ú‘”fŽŒ,:dJ;©®fÆ+Wø•w¦ jk«Xõ ûÝndŒZ‰IÚ 8B˼±HÏ5é?iñý´¯üIÿ�Æ(ûOˆÿ�è¥àÊOþ1@g…|QeqªËy§hºü:|–«¹gFvF8/°»1ÂLu¯Dµ»·¾µŽæÖdš RDl‚+/O´ÔÛ]ŸQÔ ´ZÙ D·¸iI!™‰9EÇQëQè ¯ªøíÊC|ìDH$Áè~n?ˆ6yÍ�oQE�V„ä qÿ�aMCÿ�K&­ÚÂðün?ì)¨édÔ»Ö¨húE¦…¦®Ÿa—j’H胢ïvr°,q튿E�QE�QE�QE�QE�QE�QE�QE�QE�QE�dx—þApÿ�ØBËÿ�Jb­zÈñ/ü‚áÿ�°…—þ”ÅZô È·¥ÿ�פ_ú�­ÎÐ?ä[Òÿ�ëÒ/ý�V�QE�QE�Ïí¸×õ ØÍäÖúe¤¿gÙjå$ÀÉ|Ê ¸RTóÚº žÛRÒo®ï4Ût½·ºa,¶†A¬›BîF?)(Êœs““œPq—ÁÊJŸAÁÄSpïõ5ŸÀò`O®ÚÜ 9òîµ§™ÕB§ñSÁú¾¾çGÓÛæ=!¬ÙÞý®T•pNhÿ�<ûT=ðÅæ½â ‹MÞðC§ÜFóÎcPX¼Lˆ­¸:>@® í.;ÀT¾)ðÚ(U×´•P0�¼Œ�?:_øJü9ÿ�Aý+ÿ�#ÿ�Â×t©µMF íKÃ/¬YÉdˆ–Ð3YM–.Ådqp$/ŒƒYÞ#ðåî£áï [Üøyoî,°×q[-»,?èÎ…NÁJùŒž¼&z@wü%~ÿ� þ•ÿ�‘ÿ�Y²ÖôJf†ÃS²º•Ws$ìLJ§§G¨i> µˆZ õ+M9[ ²TŒ|›Ï« n?Zç4íWŚݕÝ߇m­nΘæKi/°ßë8ž˜޼‘@íKLÕ!Õ ‘ãŽXe†CÐL»^'�¬#¡H ‚ ®ÐEPEP\Ʊÿ�%Âÿ�õÂ÷ÿ�AŽºzæ5ù(>ÿ�®¿ú tÓÑE‡}=ö£«¶—§Ý›8íãYnîQ¤ù‰Ú‰¸å$’Ür)?‡íc‘ÖOë÷ÊÚ‚‚ çÇzzUÛØ¯tÍaõ;+6¼‚æ5ŽêÙVE*NÙq¸b㦿£.¿wk{á}Béïo&f¸a“É  ì¹4ÑaÙù›5üð¥þ²ÿ�¡³Wÿ�Áˆÿ� Ƴ·[?‡ž˜h˪̶V×+s¤¼’+«3È @‘·6 rw ³GkëË Ë‹¿ XFöæò¿²Z6;‰ó¢PÇ÷Œ€$_•ó€�naYÐÙ«ÿ�àÄ…ØV_ô6jÿ�ø1áYÞŽn~k2\hPê‹IÓ­Içªà4{2ÅLƒ#ýœgŒÕhZz[ßÚ]èRFñÎ$í°´ªbu<¹$ˆà’¬w#(òè–,¡—ź±d¨¯?¥/ö—ý š¿þ GøViÖü6ðÄðémćL.Ö¶-+”ßJ[b“·ËdžqÔW|P›©Åm¤øfÎâ?²4óIýŽó>lh0WˆF•ö¸ù`q¸�Òþ²ÿ�¡³Wÿ�Áˆÿ� ?°¬¿èlÕÿ�ðb?²cŽôé67gšs¼¢C4cMØÀ$¼Œr¾dAŠ«r¨$æ¤ñfN•öý!¿³JHo¿²mXJ%ù|±û¬É³ýfvž»sÅ�h¶‰b£-âÝXS©/øRÿ�aYÐÙ«ÿ�àÄ…`Ë¢ééðí]´e…ê$kˆ™Œ_l ¥‹ÿ�2`á¹°zVÆ¿¥i¶ú熣ƒF$¾´{ñˆ¼‰Ty…T¨cEÞ™ìH�›û Ëþ†Í_ÿ�#ü(þ²ÿ�¡³Wÿ�Áˆÿ� Ä×åšËZ»µÓ¼3fÖp,�Ü Yö³‰K4 °“¡”“÷H«:}µõÅŤw~ÒàY‘R,ò‹¢> Î>R&CïåŸâ"€5#Ñ4åcçx“S¸ŒŒäÔˆSÿ�|àþ½ëvÉ´ø!ŽÒÅ­’4H¡*�ÀW™üDðý¹Ö­?³´»ðãN¸ iö“˜Ú}ñù ùxŒ6<Þ_+¼1ŠÑŸR)ã{M?ÁSÛ5Ž¡±.ü¸áŽéM´Ù Üg׎J’(Ѩª:n«o©¬¢5’)á`³ÛÌ»d‰±ô=ˆÈ=‰«Ô�V„ä qÿ�aMCÿ�K&­ÚÂðün?ì)¨édÔ»UµØôÝ2îþevŠÚ™Õ�,B‚HÇ<UšÈñ_ü‰Úçýƒçÿ�Ñm@öÍ÷ý Z¯ýüµÿ�ãÔlßеªÿ�ßË_þ=ZõÏxª}h[$:¸’å¹rò¼JUB¶âÇ/�ò3@¿¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñêä¬u+ÛÏ[ζšäVók¾hYìîR¦„ÃepÏãžÉ÷¦Y¾¥oñòá¡ñé¿Úfm÷ W�Sü†7Í;Óî¹! �vÛ7ßô-j¿÷ò×ÿ�U{\\Íu ^ÕKÚÊ"”o¶X¢¾?×sòºŸÆ·ëCÿ�¿‰?ì$ŸúIo@þÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«BòàÚYÍ:Äò´jJÇ–f=€�úW5 vÛTÒìõ‹=C̶Ôdši¬R{˜^Ýífàȱ®H•”ÛÇÉŒõ ³ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�®V¨7„ü$55ÖÖÉtõ]HZ,ët.Fx÷»r%ÎÞ§nx®ŸÂ†fðô>tW‘âY–5¼yc•‚3>|²€Øn@ v .üQ5Œ–©?‡uek©„�öÇ/µ›ë¸áMZþÙ¾ÿ�¡kUÿ�¿–¿üzªø£þ?¼5ÿ�aeÿ�ÑWC@Û7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõg_jÌ>'¶ž+)$ÑÖAg6Ã!“sŒù‚//Cm÷à üw¬-êêMVº‡][o#XóKÛ\®îÕ ÁÆwyA¶ãæÎ�ußÛ7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõrÿ� ª,åþÒmaØ­ Ig\\m8/žKÜ•ù@æ»ú�­§ÞÇ©i¶·ð«¬W0¤Èa‚°gù«5‘áOù´?ûÁÿ�¢Öµè#Ä¿ò ‡þÂ_úSkÖG‰äý„,¿ô¦*×  íþE½/þ½"ÿ�ÐhÖvÿ�"Þ—ÿ�^‘è´h�¢Š(�¢Š(�¢Š(š‹ÁÛÄ"·Öõ¸a_¹^aTz:Sÿ�áÿ�©ƒ^ÿ�ÀßþµtTP;ÿ�ŸýL÷þÿ�õ©¯áU ¿ˆµÕQÔµî�ý+¤®z+85ÍsS}EEÄ:|ëm³ó&(ä.Ëйó0 è�Æ2r›ö-ÿ�Ìïÿ�ƒd©läðæ‰vúŒ¾(k©LFö«õ”ØU’qÐdñVST±Ê-ü9y4qK$>dvÑí%£c,8Êš«uãME¼ŽÞîÅì.¦_ÝÇ)‚'pN8@HÈ  =Ks{©ê­ ðAw"#™ 1D@7•<©$ž8Ué[•Ìj^9°Ñ£I5KK«áéáˆ1ô¤¨ï~ iZm½½Åü3ÚÃr3“É,£�åI“ Á=h«¢°ÓÄ$+,z&«$l»•’8È`y|üÖ†ŸªYêhæÖmÍX™JI=OÔPÊ(¢€ æ5ù(>ÿ�®¿ú uÓ×1¬ÉAð¿ýp½ÿ�Ðc žŠ( °ÓJÕí.ïd±ÔìR™Ìû'±yIUÜ%\ýßJܬ]^{»JÓG±º64o=ÅÂ�]"R«µAbÃ’·|PþÍâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~³.ì<'¦Üy:ަ"¸e‹Í^]åzóÉœp}¸5| ÿ�A›/ü7ÿ�  ¯³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�¬\øþƒ6_ø8oþ9F| ÿ�A›/ü7ÿ�  ú^¯éZMž¯¦¼v$ϦɒB‚׊·öoÿ�ÐWJÿ�ÁlŸü~±sà_ú Ùàá¿øå ¶vëv'Áàÿ�ßÊ�Ûû7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñúÅÏè3eÿ�ƒ†ÿ�ã”gÀ¿ô²ÿ�ÁÃñÊ�»ªèºö­`m&Ö4ÔC$re4Ù3”uqÖUwìÞ#ÿ� ®•ÿ�‚Ù?øýbçÀ¿ô²ÿ�ÁÃñÊ3à_ú Ùàá¿øå�m}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øýb+ø ”2ëv%HÈ#X8#þþRçÀ¿ô²ÿ�ÁÃñÊ�Ùû7ˆÿ�è+¥à¶Oþ?Mf­>¡aq¨ÙI¤Í0Ž '™ŒoÞ2·9=;VF| ÿ�A›/ü7ÿ� ÿ�ÂA ¬X2žmX~£Ì  ;YRïÆW“Z°h­íÚåÔä4»Ë*gÕbGý4½YúEÞ‘=¨ƒF¸±’Þ�e›£,c°Âð;Ö…�…áùÜØSPÿ�ÒÉ«v°¼#ÿ� [û júY5�nÖ_‰¡–ãºÄ0FÒÍ%ŒÈ‘ Ë3 �=I­J(þH¿è«ÿ�à ŸáGü$‘Ð3Wÿ�À?¶h  oøI"ÿ� f¯ÿ�€2…ð’Eÿ�@Í_ÿ��dÿ� Ù¢€1¿á$‹þš¿þ�Éþ—¥k&ÛQÖå—JÕÂ\Þ¬±°¿*-áLôþò0ü+­¢€1¿á$‹þš¿þ�ÉþÂIý5ü“ü+fŠ�Æÿ�„’/újÿ�ø'øQÿ� $_ô Õÿ�ðOð­š(Šñ°÷W$¶ú6±(µÔViؾByR.yã« Óÿ�„³þ¥ý{ÿ��¿úõÑQ@ïü%Ÿõ/ëßøÿ�×£þÏú—õïüÿ�ë×EE�s¿ð–Ô¿¯àÿ�^øK?ê_׿ð ÿ�¯]—á¨e¶ð®ñ´sGe :8ÁVÜÔ¢Š�Èñ/ü‚áÿ�°…—þ”ÅZõ‘â_ùÃÿ�a /ý)еè;@ÿ�‘oKÿ�¯H¿ôZ5 È·¥ÿ�פ_ú�­�(¢Š�(¢Š�(¦M*Á“8b‘©fØ…Ž�Ï�d“ì9¬m/Åú6²c3\¹–5š!%”ñcbª Ü™uË €I€7(¢©6«h·—–›¤3ÙÀ—"ÄÌB>ð¤`|ÄùoÀÉâ€.ÖMæ‘9¿mCL¼wr(ID‘y±LpY2§pÏ0=Ž@³¤jÖz晥§¼i:î‰ä…â.½ˆÁê0G"­Ç$r©hÝ]C%NFAÁPA…�pž‡ÆŸl³u»ÑŽ·÷ßmEŠE‘Ÿ'ÝÉ?Å’9sW<_á[^Õ­¥²’Ê+h¬.-ßÏbÞkHñ6Ça òvŸ˜9#‘ΔúG…ßZ[9ôm9ïë/d¤È”;Û‚wH¹ç'vjÇü"žÿ� •ÿ�€qÿ�…�gÝéšÐÕcÖ-í´Û‹©¬RÖâÞ{—D„‚ÌLRØKr£!¦*ž­áÝrãEðÍ´&ÊêëM!îä’êK_1þÎð’†4b2Ç އ˜¼1á©P²øM�3/Ï`Šr ‚½8àô#‘iÿ�ðŠxsþ€WþÇþ.“a&™á›:_)äµ³Žòãùª8_N:zW™ø"[í$xŽò×ÃñMsk ò­íìÖ ç"2]ÚU'®ÆÈà=«Ñÿ�áðçý�4¯üü*ÅŽ…¤i— qa¥XÚL뱤‚Ý#f\çœgµ�d[xZ›TÐíeðµÌP_Ú™®® À‹'Æ|¶äç·^œVü/¬jZÞ›5Ω¡Ï£Î—Á4Ë Æ Hü=+nŠ�+˜Ö?ä ø_þ¸^ÿ�è1×O\Ʊÿ�%Âÿ�õÂ÷ÿ�AŽ€:z(¢€ ÉÕìoê×RÓ<“{l s1Tš&Ád,ÚrªC`ãÇ&µ¨  _ëvÞ=Ž<)y,wpÚCu+O-“ÌŸ÷Ÿ)l¯'®>î8$Võ”«ã½^åôù£²–ÆÖ®KÆRG¦fÀ Xq*Œ•tûfMZÂ8&»ÖÛZ¼ÓcŽÔ †ˆDPGwÜwÆÇíÒªiAõ«gžËÄÚæÄ-„öPÀÁ°îÉn­ÑéÞ€1®_ÇÒi6ò[EuÛÏvÍ›MÑ3ýIÕL~^wì%óÐÖþŸˆ“Xe½¹`‚·îÁ`¬ÅIsó+¨=0a'øªÏö5÷ý º¯ýûµÿ�ã5OT†ML¹Ô¯¼S«Çil†I]míÜªŽ§ 8Oh›³ðæ¡gñó\Ñ y52Âeh’cÀ‘™CË e‘š6ÁùÃ�X]€í·ˆmÞá—R¸"+ºCµ~Q¸“Ó’©2Y]Ii Òø[òæTHØÆPÁ¹zŒä ¼ç4–žžÄÜ}ŸÄZ²ý¢fžL¥±Ëœdÿ�©ö›gˆtÿ�‡¾°µ³º‡T…l­®•^1F…Vf%˜©±Œœ²ñ× ÑÇÍ…ãê%ÅÌfŠ9 ¾%`OžˆPqvùÁÎ}ïkèVKy¨x£ZXZT„¬á˜—sµFÔ·'’@u wq´Û¨àiäñF©J»Ùž;U 1’Naãñ  WZn½yá ‹;›6 Z5l0ŒO:ïP6yª­þï™íMð¦™ö KR’ßÃQh62ÅHB¯$€É½”Ì1‚˜'ž[=±§ý}ÿ�C.«ÿ�~íøÍU´¶šökÈ`ñF¬ÒYÍäN ˵ö+ã˜9ù]NGÐìÞøo%®Ÿ5ÄVÐÃ5ÌÈñ¨… ›ÇÈfå¥S……=ð }übÚÕØÒ¢½M5C´ß!"S#Gæg¡0Ÿ 1ØÕ‹A¥iÖÖ°ë¾ @‘Á¥É8*ð«À铌ÉÀkþ?ú˜5ïü ÿ�ëPs‹ñ`Æx·5¼&íS`U›iIBåIÛ—Y_õDaüBðÅæ·¬YÍi ½ûǦÜ@·A­×dÎñ˜ò]ƒ¨]²È7 ÿ�/S]'ü"õ0kßøÿ�Ö£þ?ú˜5ïü ÿ�ëPâi ?­eM^ÞÜ¡PUõ}¥3ü;DlÈ'kåŒk¦—⇇!Ðîõ†7¿dµÔ?³ŸÍ»ÍõÓóƒíœ ·ÿ�E·öŒÖ5–»ƒý\­t û§ååÙ<{WOµqŒ g=;õ  k_é·ž,¿ðÔ^ö…Œ)4Ùˆ„ÚØ# ÜüÃóö8g„ä qÿ�aMCÿ�K&­ÜsšÂðün?ì)¨édÔ»EPEPEei‡]:2Ë+^«l`¶òÕ¶y›L›vÙómÎpzV­�QX'Æ:"êSX4×K<7ÕÙ¬g‰HSÌ)³q ¸çpÆr(zН§ß[êšm®¡hþeµÔ)<.TÈÀ2œGu«�QYú–·c¤ÜYAxÓ‰/¥òmÖ+i%ÞøÎÅ;xóŽ=«Ï$hÈ®ê­#m@N êp ü �:Š*­†¡m©Ú›‹W/–HIe*CÆíŒxeaøPª)*Æñ©L´mB@8'’ƒÉÀÎR)ô�QE�QE‘â_ùÃÿ�a /ý)еë#Ä¿ò ‡þÂ_úSkÐvÿ�"Þ—ÿ�^‘è´kßÃ÷V¶Ñ[Ãâ=Ub‰ òíŽ ùcRÿ�c_Ð˪ÿ�ß»_þ3@ôVGö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@ôVGö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@“DP§b»RØàÀÏ|¥yöŸàKý7ÂZU¼0Z>¹hö‹$ÓjWÆ"†Tv—Rcå±T(Ïpzßìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€8Ë߆¡Ô ¶Ót¶¶¼™f{ss,!Ó{–ƒz.å,$gçÈ ®1Ñi.§¤ësÅ´þ˶³¶ír³„Ê@bÈNßÞãvIùsŽp4±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš�áo¼¯ßxkKÓ¥²Ð丱ХÒÖG»…•¼ “/îr ˆ·á›�ñš³kðáà×m®ä±Ód‚ û‹¨LwS@Ð3ÎÒ,¡cP¶Œ«b5Ãc"»ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€8û?x†ÚS0±Ð•ÞßRŠP·rüßieUȈ(]™÷È`É£øP±¼³kÛ=æÖ&?5Á²i’exqÛ"¡_”b5ÁÁ+]gö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@&¥àOêV2Á5–„ò}ŸRŠ{¹”÷7 ,n?sÁˆŒwÆ1Oøoo§ê—ÖÉÔ÷pgíáÚ%³ys¾ ›Ì ˆ†FW'¸þƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^ŠÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^ŠÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^¹cþJ…ÿ�ë…ïþƒhc_Ð˪ÿ�ß»_þ3U'𬷕¦¡/ˆucsh²,-¶Øm€Üy8?tPEEdc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4sTK©t»ˆìⵚáЪÇwŸ)óÔ68##¡ú•ÆÜxOZÔÔê6úUå¼RÌ™=Ì1ºÆ–R›™Ð£‘•Ú tߨ×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍ�rzÿ�ƒu½OQÖ®- ÒíúmΞ®÷+0D#wýÙå<·ã$|Ù$Ñ'‚5¦Ñ|Qmkumbº¡™mô»yÚ’ˆ»±ƒÌ ÎB Ç\±=gö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@Z¥¯Šõ{–:5´‘^Z\DP•ò#˜Hùo$c!B€ûÍ“ØòW 5[é•§°Ñ|†k·»‚;é£ûhšèJ‘;¤a•c\àóÏðàšô/ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€(jú& Þ°Ó4˜m<ë[‹IwR ©&Ðå]›ýX\‘ß>ÕÌ/ÃÝN{}V)í4kv½Óõ8 Ìò–æ6ÀÄ¿,C “’pvߨ×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍ�púoÛÝ/A6vº^Ì·Ö“\¸¿’d†På¶2ŒBìÚ  1ä�­k¾ ×5K-~ÆmmïîÌö¥î$ Z¬¶Ñ)Œ6qž* 뿱¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš�å,ü¬ÙhÁ–ŒºªÝYË=â\ȦìC(‘¤ùyÀï÷8kš×ü's¥¤Wzšh60Ï5ÒI+\±ŠwšëíÇ>bPcDFQ–fãnyõìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€*øÞÞÓÁ:M­¥£ÛCR£ RûIL�3¼‚ùÇ;³ÞºÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^ŠÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^°¼#ÿ� [û júY5Mý}ÿ�C.«ÿ�~íøÍV²ðÌú| ·ˆõeF–Yˆ)l~y¤cÌ=Ù‰ ‚ŠÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh^ŠÈþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æh#RÑ|E¨j7¢ l4Ûyãš#wo3´Ò«DÉ芅 ¬U·†' Œ�xÊÕ<¨^ø:M"ÓIÐleÝbžO*9|¢‰2þïïnçdpw®³ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ� [Dð^¯i«5Üe¥´‘^‰.´ÉD“3Mv³"âHv•D  ~ùÀjæá¸µÍ_QÔ’;×{ˆî,™õv»Ç q«K ¢Ä1ܪÄÀ(­ßìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€9 ø‚Ñü5,¶º,’èÖ‘Ú³‹©3*,ÄS&.³£ûã Ö< õö(ï¬t‰là³³‚[Xµ ˆDóD®ä²F§xÜ œÉôìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€*ø‹MÕnçÐåÓ ±¸ûÓO2]Ü<AÁ‚H°0Ÿõ¤óýÜwÈâ,¾jq ?̃F‚K8m#ó!vvi#·¸î9ŒbMÒÄË×>JäŒ zö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@ž—àK: Þ-'J‚ÖÖþK»Ø¾ß=ÀmдyO1wÜTàƒ–ÎE-gÀ¾'Õôb¿Ù·I{qwÚ]HÏnÒÝyù_ÝuÚYsÁ÷Ã]Ïö5÷ý º¯ýûµÿ�ã4c_Ð˪ÿ�ß»_þ3@ì>Õ,âÒÃGЭÚñî.­áº‘bw‡Ý¼\1Ébs\¹à¶Ò¬m4íYô[4ŸO‚Ô¸b—2ä’Ѩóš›9'äÏ8Û^Ãý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐÍ)¢mÉ ²kM¼e-1vŒ!Q•`tÅ[¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€ÿ�È.ûYéLU¯X²hNbZî¥qsG7”én™:ä¬@ã*:[T�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/RIS8sag.jpg��������������������������������������������0000664�0000000�0000000�00000022542�15030617045�0023021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��Í"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ªz†§k¥¤-teýôžTk +3m-€¨ è¬zv  ”VGü$¶?óÃUÿ�ÁM×ÿ�£þ[ùáªÿ�à¦ëÿ�н‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãt¯EdÂKcÿ�<5_üÝñº?á%±ÿ�ž¯þ n¿øÝ�kÑYð’Øÿ�Ï Wÿ�7_ünøIl熫ÿ�‚›¯þ7@ôVGü$¶?óÃUÿ�ÁM×ÿ�£þ[ùáªÿ�à¦ëÿ�н‘ÿ� -üðÕðSuÿ�Æèÿ�„–Çþxj¿ø)ºÿ�ãt¯EdÂKcÿ�<5_üÝñº?á%±ÿ�ž¯þ n¿øÝ�kÑYð’Øÿ�Ï Wÿ�7_ünøIl熫ÿ�‚›¯þ7@ôVGü$¶?óÃUÿ�ÁM×ÿ�£þ[ùáªÿ�à¦ëÿ�н›g®Øß^‹8…ÚNÑ´ª·sC¹T¨$P /çZT�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VF³ÿ�!Oÿ�ØAÿ�ôšz׬gþBžÿ�°ƒÿ�é4ô¯EP=§øãÚ®§e¨ù·gÙÿ�s"¤û>ÿ�—!P¯·;IÆ)º·Žü=¡ê³iš…ÝÄwpÁö™,§$=<ÂÊ…vƒÁlà yç…¼âÝ'Ķ·–ÖVzS¯Ú¾Öó„¹³ß(mbY‰�l”è:ãkÆ~ñ6©âûë¸4›‹´›ÃgJ[«kˆ­ãk†“yb.ï+’ ÙéÏZ�ô7ñ^…›_R…GØF£½²ìäàI¿qžÙϵ;^ñ>“ᥴmVy¢s òí¥˜¼‡¢·Ì{üã¥yŒ>xY¸»6º%·›ÿ�Õ­—›Ãrݤñ;lQ±YA p¸éŠí~"蚦©¥øb Hņ«o{,vÒÂ(”«½‚îù†1‘Å�uz7‰4­}®“N¹i%´p—É Ã,,s€Èà2çâµkÇàðï‹MÔôÝc뫼ú¤I¨‹˜c{Ûuoùh›†â€°¤3Ç2è¾Ö„z'ö¿†c–ê vÌá{[xþÕ$ŸºüÈö£�6ä0 Œ0�©iymoö‹IãžÌãl‚ÊÅXgÙ…O^£|3ñ ¶áë+û¨¡µŽå.OžØKí6ô¸ #î]ËûÀ·ð÷…§‡âo‰õ‹íɳšhgÓ'/Ä‚#ÌX_9äsßš�é¬üW£ê ¼Ð­fõ2Äd˜,Yr»yŽyíšÚ¯'Ôü;¯\kIðÜ÷úõ¤0ØIçÛí2E Œ1@Wæ!ÆF;+˜°ð'Œlµ; ¡ Üm·Ô4›³¶î þêÜ¥Ù¼êï·?ÞÇ4ïôW„jžñ¼·,šT¶SÃ$Öב<Ó]Kv†0ò˜¥@PHouÀS-| rÐI¤ÛXÝ bÔÚûV±†H\Å:2Â"VybÚ…\…fÊç#i mÔõk=Ý&¼y�’Ai/+Èø'j¢Ìp àtö§i𕮝§Å}dîöòçixÚ6à• «�AÈ®o]Ó.χt«ôÝOPkx×ÛÞEݼ¨VMìʬÇ,±ÉàƒŠäuxÃ[›Ä-qq$6rGwý›-ºIÁ2L<ÕÚÐhþ`sŽ Õ­ï-®Þá-çŽV·—ɘ#gcà6ÓèpÊž¸¯‡¾»ðíÇŠEÞŸ°½Ö§º¶‘ 2ÆÁòœ€>n1“]­�d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö½d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ö½�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�®¥×Ÿ¤ÜÚÙMyökÃ$‘ÂȬÁ*doe]{÷­Š(#ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�­z(#ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�­z(#ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�­z(#ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�­z(o\Asoo'‡5Q%Ã2Æ7ÛrB–?òÛŽ©ÿ�¶o¿èZÕïå¯ÿ�¦ê¿ò0è?õÚoýÕ³@Û7ßô-j¿÷ò×ÿ�Qý³}ÿ�BÖ«ÿ�-øõkÑ@WWÓ_ZÉkwá-BâÞA‡ŠchèÃЃ6 C§:iæßLð]Ý”$î1Û-œkŸ\, WGE�dlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÕ¯E�dlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÕ¯E�`À÷×Þ&´»—I»³‚ ;ˆÙî–w„€HÇ¢5oQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Q\楧Yê~0¶†öž4°‘•_ >b ÐGEcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò4Â% Ð.ßò4³EcÂ% Ð.ßò5•†4VñV¡ Ó¡1%•«ªs€KÎ üvÈP]EcÂ% Ð.ßò4Â% Ð.ßò4³EaMàÏ\DÑK¤Û²620~¾µWþׄèmÿ��tôW1ÿ� ëÂ?ô¶ÿ�Ç¿ÆøW^ÿ� ·þ=þ4ÓÑ\Çü+¯ÿ�Ð Ûÿ�ÿ�?á]xGþ€Vßø÷øÐíWþFþ»Mÿ�¢š¶k›‡À·•e‹D¶Y8nN?Z·ÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÑÿ�–ÿ�@»ÈÐÍÿ�–ÿ�@»ÈÕì?Kñf”lmR$7ödnÆÌf€:z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨//mtëI.ïna¶¶Œeæž@ˆ£8å€'¯=“Æ.¿"ðÙÒ¦ó>ÆÊ·A°Æ@“LŒ+Zî¬oìõ;8ï,.໵“;&‚A"6  88 ¨7‡¬ŸÅ±ø¨ûjY58þáóõ?™  z(¢€ (¢€ (¢€ (¢€ (¢€ +-|K ¾¦tÅÖôÖ¿c6¢í ¡‡ðìÎsíŠÑŠh®¼2¤Š²0 2’¬8î ŽÄ�}p?!¿ø¹¬xxi×qÜÃkHí·`XÚFß×8a4xã¹ü{úŶðÝ¥¯Œ/üFŸñóyk»ŒtØX“ø‚ƒþ@TS Ñ,é•άëa¹•HÔ€Yr}Ç­>€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ªšŽ©§éßiÔïíl­ËónfX×qè2Ä ðhÝp¾'ñ–—¢xÿ�BÓ.–å¯%Ö(ã‹w˜eeEÁéÕNrF+±±ÔlµKUºÓï-îíØàKo*È„ýA"¹ëýLñŒt}z+›yåÐäžV7‰@ØèËœàò3@UÁ,g‘Næ*9êFr>¼ÈÓè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ª÷ÓIoe,°ÙËy"Ž-â(O`]•2*ÅäVŠíôý>¤ëÐk=..Z4Œ4.Vä…Yöá¢ÀryÀ<ÖªiÞ*[&TµÖÖâÚöF1I©ÆÄ[ý­YVOÞ‘+rË–fÁN™!«Ò( %¶—_Õ$×ÚÂëT‹TÔ¬¥ŸHóï€Â'ÉdT•–7Ù$H2ªF̃’øï|!kªYøvuy¦’è;‘ç±*¤ù’ç€K± œæ¯ØhºV•$ÒiÚe•›ÎwJÖð,fCêÅ@ÏãW¨�¢Š(�¢Š(�¢Š(�¢Š(Ïu-/XÔOŠt¡áé„z­è’ÚþY ò¡Þ„¸_phË·Ó8ç³h~+]>Hlô½z ßSò|½]yÒ\ù¶®ØŸæ ÜNsœŠõÊ(ʵ='ÇPÍšºµ¯ö“È‹5âM8‰ EVR.*³ c>0Ëò°jÔÚgŠ×Zº–;mt¤—Ò6-N1ÙÚÏa)ÊBŸ´|ë•ÊÄW¥Ñ@ge¤ø¥u,6…´ÃL¾µ·º¼¿YÄr?’Ñ3+M!4oœãnOe¥}¢øÁÅÑ´´ñÆlî…”gZ]ðÌD>O˜|ÿ�œ‡YÛ9a¶ESœm³E�r~·Õãñ%ô÷vš”v“«ÈòõdUbàª",Œ ÈÈTÆ�ùÉ-]ePEPEPEPEPEPEPEPEPEPEPEP\÷Œíï®t(£Ó¬f¼¸[ûIü¸^5`±N’±F œ!ž¤vÍt4P­hº”7¶†‰i¨¬ÒÜÇu{WqÄ¥¼ÈDžbTv0«®rÀlàdîþ Ñüeu©jgGŠîÆÚ}TÎd†XüÉì±D’(&B¼Eг ‚¹VåkÔ( 6°ð®¥m”'²Ô¤–ÏÄ7S2j$ !O²Do <È·/üü6NíOi¾*²¾Õ$ñܲ¬Žv+ѱÞÄ<gÍbR ®ÈÀÚ8'$ö´PEPEPEPEPEPEPEP‡þÐúî±¢Â9ý“ªßXyßió>ÉpñoÇ•Œí#8ÉëêkÄ?á;ñ‡ý zçþ fÿ�â«×ÿ�i¯ù•¿íïÿ�h×€PAÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüUsôPAÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüUsôPAÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüUsôPAÿ� ߌ?èk×?ðc7ÿ�Gü'~0ÿ�¡¯\ÿ�ÁŒßüUsôPyà¿xªëÇ^·¸ñ.³4êvÉ$r_ÊÊêePA°Ab¾Ã¯ˆ< ÿ�%Ã_öµÿ�Ñ«_oÐUïÎ4ë¢?ç“ÿ�#V*¾¡ÿ� Û¯úâÿ�ÈЇáÉáý6I4-1­b,Íi$”“ŠÐÿ�„Sßô�Ò¿ð?ð©´ùô¿úô‹ÿ�@£@•õ§ƒ´ÝrÇK¼Ñ4xö$†YmáUfFv Œ–>` {/ÊQ¢²ðô4Ü„ŽÜÆ©*±'ÐôäŽ37‰üeâË„’ûP¿Š4ƒÈÀÑ…Ç›¤ä¡l–†>ý€2s•uðâ ]%áÒn\̶ò[Ç‹ ¼L$’6v>T?+â$‚œä çáòßXÂ,¼<Ö×°Í,7ª–æ1º+ níûÁÀô>•nhþZéÖw÷pxrÖÖö1-´·1C•HÜx þ5aà ñX¾£«ÜÄöí›X-¥ŽE\ÍÁ&Gt®d‰X±#Œu'¢‡Â–1èzv’×:‘ƒO…a…â¾–Ýʨ 7Y7`ÔZ�ÍÕm<+¦hëªÅák=FÌÇç,l ±Ÿ3’7.~\“ØÌ‹PðmÄ! ðŒRÍ!ŒÚÛ­…¾û¨äWd’<œm+§æ á3ÖßèÏwamioªßØ­¾Ü<F9]ÂŒ æd“w®O$òMdÃà; kdŽ ýB9¡1‹[•hüËhãWT>Lm ,‹ópçœà€ v…u-:Úþ×CÒžÞæ$š'ûcr0»èEXÿ�„Sßô�Ò¿ð?ð­ 84í>ÚÆÕ<»{h– ¨�ÈTô̶¦iž-ÒÃN´´g†à1‚Œ·ÜëÍtÕÿ�#^ÿ�\n”u³@Q@Q@Q@Q@Q@Q@Q@swz^Ÿ©øÎE¿±µ»TÓР¸…d ™8ÈâºJÁkˆ`ñ¬ÞtÑÇ:<o`3ûÇõ  ÿ�áðçý�4¯üü)’xSà h_þÇþ¥ý¡eÿ�?vÿ�÷ð2Kû,ô¸?ïàÿ��Ìÿ�„WÿôÒÿ�ð?ð¨.|/áà‹ Lö´ü+[íöó÷ýüãUî¯ìÊ/ú\ç   øF4úéŸø øVnµáÍ;D)¢éÊwõ¨;jßûu§üýAÿ�fk—¶¦Ò<\ÂyÚAèh—þÁÑÿ�ècÿ�€éþ›­hºTvˆSL²Sæ•Gcí[Ÿk¶ÿ�Ÿˆ¿ï±YšåÕ¹³LOýàèãÐÐ3ý—§ÿ�Ï…¯ýù_ðªÆ›b–A’ÊÝNñȉG¯µk}¢ùíýô+?Yž#b�•Î?ˆ{Ð7ö;où÷‡þøŸ¬[@–A’Ôï…Ö´üØÿ�¾¿gëR!±�:Ÿœt?Z�ç¶/÷GåP](ì@�ñÈúÔù¢¡»#ìÍÈíüè7sxþuè?I?tL“Òãÿ�DI^{^ƒðGþJî‰ô¸ÿ�ÑP×ÔQE�QE�QE�QE�|ÿ�ûMÌ­ÿ�oûF¼½ÿ�öšÿ�™[þÞÿ�öx�QE�QE�QE�QE�tÿ�’‡á¯û Úÿ�èÕ¯·ëâÉCð×ý…môj×Ûô�U}CþA·_õÅÿ�‘«Ùe£q¹`{ƒ@4ùô¿úô‹ÿ�@£X‰á8Ö4·™Q@ ¢îP�¾õ;þ]#þxÜà\ßüU�?^‡W–Ú!£Üù(䪪Ê@|09(Å[À#¸®jK_\j÷ «5œ7Z¬·ýšGŒ´3¬{‡ÌxWç<Â=ú/øEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š 8¸Ð<oka G§Ù^}£NÒí¼’%µ+ms­ÔN˜fä;IO<g‘€qâ OÞ\[Ë¢]5¤>Pó#kÈb!óÜ5¬ù8ÀÈ`=»›ÿ�ðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@Ÿ´ ßYCo¥X)ÔÔîƒQ“`[R?6|À{ƒ€åȬ ¯j³ØH–º)¶¶™®>ÅaæÅÿ�É^8;ŽoÊñÌÿ�!'÷½3šî¿áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€6h¬oøEtùãqÿ�sñTÂ+¤Ïü ›ÿ�Š ÿ�þF½þ¸Üÿ�(ëf³,ü?¦X]­Õ¼'U*®ó;àg‰ô§@Q@Q@Q@Q@Q@Q@Q@UºÓ,/^îÆÚáÔ`4±+=9jŠ�ÎþÀÑ¿èaÿ�€ÉþÂ?£Ð"Ãÿ�“ü+FŠ�Îÿ�„Eÿ� E‡þ'øQÿ�þŠzèúþ'øV›ÿ�ö‰ÿ�@}?ÿ�“ü)‡46ë£iÇëjŸáZtP_ü#Zý4ßüOð¤>Ю‡¦Ÿ­¤áZ´POü"þÿ� ™ÿ�€‘ÿ�…!ð¯‡[®¥Ÿ­œáZôP?ü"~ÿ�¡Jÿ�À8ÿ�ÂøGÃM×ÃÚIúÙGÿ�ÄÖÍ‹ÿ�†è\Ò?ð ?þ&ƒàï ¾Òý¸Åÿ�ÄÖÕ‰ÿ�w…ÿ�è[Ñÿ�ð/þ&§´ðÖƒ§Ý%Õ–‰¦Û\&vK ª#®F?Ô¢€ (¢€ (¢€ (¢€ (¢€>ý¦¿æVÿ�·¿ý£^_GþÐú±­ÿ�Â9ý“¥__ù?ió>ÉnòìÏ•ŒíÁëèkÄ?áñ‡ý šçþ ¦ÿ�âhŸ¢ºøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âhŸ¢ºøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âhŸ¢ºøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âhŸ¢ºøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âh�ð'ü”? ØV×ÿ�F­}¿_x/Á~*µñׇ®.<5¬ÃZ³É$–ª¢‰T’I\�9¯°è�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢±|M WVpÍI—Ð+£¨*ÃxàƒÔT¿ðŒhôÓ?ð?ð  Z++þþ€zgþGþÂ1 ÐLÿ�ÀHÿ�€5h¬¯øF4úéŸø øQÿ�Æÿ�@=3ÿ�#ÿ� �Õ¢²¿áÐ?è¦à$áGü#ý�ôÏüü(õåí®i%ÝíÌ6ÖÑŒ¼ÓÈg±àU=;Äš±3C¥ëZuôª72ZÝ$¬© M`øÏÃzBx#\ûj÷mc2@¶¶!å22›B®s¸ŽGN½«Í¼;£ê }£Ç¨øDÎåé÷?ÙO‚ïË ët¬¿7Ì8v㜎¤€z¢¾м%¨›j–W²i“Jµ¡]*he·˜DBâL³<lø$ǵ�4z%ö±àO kú}õÔ³ÙêÉw%”Ns(ó±aL>�8ìà �úN+ËY®g¶Šæ.-öùÑ+‚Ñî]èÈäg­M_3Aá­R/ xšx¼?¬ÿ�hˆ´scæXÎdi¤àÉ\ïÝü?wýšéµŸj6þ%ž=ÚX­’ÕgÒšm6K”šC½ž)[pTå€ÌªÄ�6àŒgVÓfÕ&ÒâÔ-P…7Ëh³)•ŽY3>eäŽãÖ®W‰ø‘Áã)ï´;Ç·—Ã)ö¦¿²vE¾2îpK®à{p;W«ÿ�Â1 ÐLÿ�ÀHÿ�€5h¬¯øF4úéŸø øQÿ�Æÿ�@=3ÿ�#ÿ� �Õ¢²¿áÐ?è¦à$áGü#ý�ôÏüü(VŠÊÿ�„c@ÿ� ™ÿ�€‘ÿ�…ðŒhôÓ?ð?ð  Z+šÔt]*Â÷HšÏL²·—íÊ7ãccñ+¥ Š( Š( Š( Š( Š( Š( Š( Š( Š*†¶HÐ5µ—þhýÎhÞФд÷}NgkhË3Z¡$íž*÷ü#ý�ôÏüü(V³¢ñ‹>¤Úl:½„—êHkd¹C(Ç\¨9ý+7Zð†—y ê6ÖV›äÖ²GÂÕ—!Rºv85æ×~MCáÆ›á› Ïiâtû<rÝI§•X]L“Êìp@nwt lªí}f—[½Ô <åÄ1™�i ýí£©Ç|t¯»ÐZŒZ¦™¥ØK-½¾­`dˆ#4ÚËníq»øW'nÞ˜?wÖ~ƒàýV| "ðõïöº[êßn7Ö²»$û7˜\l�¶1ëÁî(èú+æ½GÚÔ~¹“Nеs2éÖ ’ÊS)ÔüáæùcnL^^üû¿»ŽqDÚ6©×à‹ÃüïmuxúI6r$l…ãÛwHUw°GùHu PÑ6º¦Ÿ}ssmikqqhÁn"†ev…Žp•<¾†­×™øOÖ3üCñ­ÌþTÓ$6BÄÝiæ8Î"a'–Gñqí]¿ü#ý�ôÏüü(VŠÊÿ�„c@ÿ� ™ÿ�€‘ÿ�…fÙéöZw,¬í푴̲Á 'Íêp(§¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(+^†â[Kv¶¶{‡Šê)Lq²†*¬ ÆâëGöµïý ÚŸýü¶ÿ�㵫E�ek^ÿ�н©ÿ�ßËoþ;Göµïý ÚŸýü¶ÿ�㵫E�ek^ÿ�н©ÿ�ßËoþ;Göµïý ÚŸýü¶ÿ�㵫E�ek^ÿ�н©ÿ�ßËoþ;Göµïý ÚŸýü¶ÿ�㵫E�ek^ÿ�н©ÿ�ßËoþ;Göµïý ÚŸýü¶ÿ�㵫E�cͨÝÏ¿‡µP’)VÙ5ºœŽ˜}Ç5CA¶‡Ã:Tz^‘ámRÞÊ6fHÌ2m$äà´äõ$ãÞºz(+ûZ÷þ…íOþþ[ñÚ?µ¯è^Ôÿ�ïå·ÿ�­Z(+ûZ÷þ…íOþþ[ñÚ?µ¯è^Ôÿ�ïå·ÿ�­Z(+ûZ÷þ…íOþþ[ñÚ?µ¯è^Ôÿ�ïå·ÿ�­Z(+ûZ÷þ…íOþþ[ñÚ?µ¯è^Ôÿ�ïå·ÿ�­Z(+ûZ÷þ…íOþþ[ñÚ?µ¯è^Ôÿ�ïå·ÿ�­Z(ê[ýJóM_ìkËt†èK$³IÕP¬?†Bz‘ڷ袀 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ©ªA%Ö‘{oY`t@N2J*ÝÏé×Z½ž™ijú Åá…#b.bÁ!@þ÷µYþÓÕè?þÅÿ�ÅV½‘ý§ªÿ�Ðü ‹ÿ�Š£ûOUÿ� ÿ�øÿ�ZôP?Omyqyoá1ÕÎß>xä^]£s–Àéš³ý§ªÿ�Ðü ‹ÿ�Š­z(#ûOUÿ� ÿ�øÿ�Göž«ÿ�@ ÿ�ð&/þ*µè  í=Wþ€ÿ�àL_üUÚz¯ý�'ÿ�À˜¿øª×¢€2?´õ_ú�Oÿ�1ñU^ÊBãÅO©\Ø5¤ËÈåG,Û÷ =«~Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/RIS8sah2.jpg�������������������������������������������0000664�0000000�0000000�00000062456�15030617045�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�” "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®Kâ5Ü6^ŽioÚËþ&iæ-ëÚîV©‘!|²ùô�žÔÖÑ^g¥ø©´íâ½’Öî=Sì÷‰¬È×Ù*ÈJ—bᤊ|®XæuÀ«ÐxË[X-nn¬ kypìöð; JñË"’ßt&Eã;\Œf€;ê+—´×î—ÅI¤_êP•âR¶P+Ãya™‰ßÂä6>\c6NÚåo|w«\xcZ¸[Í: cÒ'ºÌQ°“Nv…·—.A‘·§åås´ŒdÔ¨®>ïR¹Ðô?ÅaªXJ—Ò˜MýÑ–h˜%™d Ò–*L` »pÜ`Eã­bçK»»²m. ¸.c[ÛkŸ2S µ¤R3`H6ˆÜÈȰg ŸEyü_ª[íØÇ£ÛÚC¤I ÜIÜÒ4$¤¶àdß…êNAç¦zÍÄ–Zeχ¯í#·¿¹p%’m«³ìò8q†—!G΀:J+ÆãñÅÿ�‰5é·ö“j—­e<éfÒDàÍî`,³†<qŽÉ•d>§ü,›øÖÕ¦¹Ñ”Ý<ñu{xãh%ËüÎäpFÞ!c·4êWœê?ž×^—N:ׇí’;÷°2\)Êíµ4Äy£å˜Êú‘ó0h/ĽCPÒn&²¹ÒÖvðüº„qÆ…Þˆâ…Ê_œù¯Ž–ä�U¢¼Ðøöe½¼³‡WÑÇpUõ„lÌ-àeP‚_Ý—g 1ºn‰Ìúïu_XÙLúd_i¼û+Ø€MÌx²[†$ïÇÉ!1Ÿ—¯¡ ‰EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEƒ¯xÇFðô3µÕÉšâÜö¶Ã̘Ĩû£Ý°=èRëO¶¼¹³¸ž2ÒÙÊf€‡a±Ê2€p~WaÎzÕªóKox“Ĝ֚F—ghƲ;\Éæ»HÁOíVf“ãgX“OŠ955èÊ…šÕQv_¼ z/­�zõã×?¼C¦ÝÝBfÓù.•“‘ÐÇåúŽÞµØÃãÛ{MQtÏZÿ�f]4bE”H%€©$\�S�´ØQH¬®¡”†R29RÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEGSÕì4ˆ’KÛ˜ÛcŒÒJßÝD\³` �^¬ÝK]°ÒäH%‘¥¼f+HÉ4žá8õc€;‘Ts®ëgå ¢Øžä+ÝÈ>œ¤Cë¹½”Š.¡´ð®4še¢½õìQù®Î÷1Úžc’Y†NI$áA=¨‘ñO‰õ7½‡N»½—Bµ•ÂÎÖ‘¼óDܤŒ0YA!S ù‹‘…lû}3áÄ:%÷“}®=Ü›·D¼Î1øLg§_Zèo¾êwÖÖ’k¶˜†àÜ´¿ÙÌ^Y ²–cçc'y<ÛT1|8Ô¡ðíþŠºý¡‚òV‘Üé͹IÇOßcøh;Lµð½˜é—þ!ûG–¾`€^çnN3…Î3š«¦Ùü6Xgjá•Gú1„^noôÂw=;WE£xTÑ/练]³wš%‰„šs`$ñ‰½ê–‘ðÃPÑî4ù ñ³µˆÂÓ› û¶Nq7£f€1îlþy·_iÔ5¿4Í™‹‹ÍÂN:ü½zU­BÓáÿ�öžuýížH�L/wy{Ž:®qœþµjóá]ýíÍÜòx†ÙZê=‚éÍ€rïºqWuo‡šž±« F}zÑ$,SNl`36y›¯Ìh…®»¢x?N±ŸD½Õ'Ó&e_²]Z\0•XnÝ ²�­€[ÚÀ‡šô‹+ËmFÊËI–ky”<r)á®ëáö©w¢éZ[ëÖb;g–ÃNmͶ6Œg÷ÞŒOÖ¬øSI½ðf£ýw~—¶z‹I5´‹”"˜|Ï 7Þ\°çøÖ€;j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨®.`³·’âæhà‚1¹ä•ªRO�PµZÿ�Q³Òíêúæ;xTã|ŒžÀz“ØMdlê:ÁÙ¡Zyvçþb7¨DXãÈi>§júVl|=kkt·×RK¨utC2g¨GËöP3ß4[íÚεÆnÚe™ÿ�—ËÈÿ�|ÃÖ8OO¬˜#û†®éš –™+Ü"¼÷² KypÛæzì?ÙQØ Ó¢€ óïˆöz†µ{¥iz}›Þyk-ܱ$ˆ…HÚˆÙfQüoÐנו|DMXxÖÕ´ùuuGÓ°Fœ%É+!Îï,gø‡Z�mŸ…n¡Ó|= Þ»i¬Â}°‰íÎü@èqûî~r§ðª×žÔfе«h¼%v.®níXÜ[áíÀ'Î㡪בëú)¶¸ñ‘Ô—öÑ‹Þ?rÛºŒ}ý½*S]>ÔÚYüd5a3 U {Ê|¸íZ�–ÃÃ÷>}KW×ü5sýŸ  bßh¶m,XãÍôÇNµ›¤xYÕl´{oBÔÝUCYZÏ )åyL3y¢F¶ÂAÚHÅUÖ-õ©t pjmâ©-ÒÖ7Dnü¶Ä™“9~èïÅ]ðãø‚é´i¯®ü^ö’ yäO¶0 ÄÄTr mäP^¥ð·ÅÏ}&‡£_ÛÄÓf i¯`xÚ>8lÊH=yÍt´Õ5[„ÖÁ‰yc5¸„ùSÅIÜ8ØÒ· ñÉ*Ž ¾)ûUø´›ÆFsˆÛÎcÊûgÖ²ôdÖÞûQ¸Ò%ñ?öEÅÔÒÛ½²ÝlÞ°,JŽXã$õõç4¯«éÒZh:5Œ¾Ô¬ï- k¹”F°¶!doÞ‰6òÄH«šs¦hsjÿ�Øò;[_¥ìw°ÝÛʉìÞ2²“Ê 8�ýêuäzÀðöˆmn<duåý¸b÷ܶî£oJÈ“Bø[[¾Õ-üBºÆfÏ4@˜ð1¹¶ãs“õ  h¬Oì[ûQÿ�íví�û±^¨¹ñ'ûîwâAþ“¦ZߨêöSùnßHäÂûù@tV ñV›ÿ�‰‡Ú4ÃÜß@Ñ ÿ�¶ŸêÏàÆµ ¸‚êšÞh扺<lOâ(Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€!ºº‚ÆÎ{»©V+x#ie‘Ž*Œ’}€SL×,5{Iîl¤•Ò1ʯo$r# ‚Œ¡³†R8䎴šõ¥åö‰sk`müù@]· ˜Ý7 èØ€Ë¹sƒŒçáÿ�êš}œqÏ©IcWM*YÙ:N†,&#ye‹{ò­ó § Œð �oÚjv·Ú]¦¥lÏ%­ÜqÉ ,lK,˜ÚqŒór8'5f9#•KFêê©*r2ú‚ü+Íô¯kZNƒµ´ZTwHúheŽâEŽO²¸f˜Ÿ/"I� F0�1ï¢þ¼ƒÃrivVZHi5ïí%Ú5h~Óç â3óì :m{ÜÓD‘™Z êdU Éž@9Á#ÐàþF¼ëZð6¡¨x£ûQtâÝâHf¹tóË%×äà)Ü£vF Í;_ðÖ³x÷RÙé3™ì--îb3Kn&14†H÷¢—XÛzrNa@A�=™«4)* êBŒõRØŒ×)áo ]èQë&[ 5ZâPlÒ;™%Äk q„wtÝɈ1ûßxõÇ8:—‚<CáÍ/Oxt‰®,ô)4ï6[¹0.Ê :Ÿ(œ ˆ°<ÍŒd€zeå·ƒ5ˆmu ³c£YÚÃz58–Òê]öê‚ ðÎ!’s!ûÙ9¥áß ÚêþÕ4ëm:ðMuoqu,4V—È#Ùäùñ ÙR¾c`ó¸¨�öJ*¦™f4ý.ÖÍT"Áƪ$g �À›æltÉäÕº�)•³ªI'� ğĉ5ÃÚh¶çTºCµÚ6Û'ÒIy�ÿ�²¡›ýšbøvME–o\‹âáf‹²Õûd>îHîÐ�þ!ŸQc‡mîöV1ڧѱ™?à�ŽÅ…IoáÄ{ˆï5‹–ÔïîŒÈ»a„ÿ�Ó8†@?íÍþÕm*ª(UT ��´�QE�QE�W+âÿ�2Î÷JÕWQ—O†6’ÖyÐG„IXº°|h3⮪ªêZ|®›qcrÉ ±S†_Bb=ˆå)ã¶ÒôIÏ¿ux"º_ôOÝLJç_Ë÷W“ëïYºßµ‹+ý^+/ù°ÛövÙjÛÿ�tÔGÏÌXqéŠêçñGŒ´ë]mn¢ÑŒúTo Þ$ <A7, Œ1 =ˆ#µA£xçÅZÖ¯%ŒVš4f8<âXÊsób€"½ñd6Ú¤ñË㆓OŽÁçr¦Í‹0lm»äã<w¯ðŸÄiö1ØXj±Ça ÁV9<•Û¸1ڥѰ¿/¦ŒŠê<yñľ ðlZ[XZ"ê²$dÚ¬…º‚“Á$î3Z^ֵ߆Úî…oa¥<–MæÏ+4…žF‰$9Ç‚ñ»øÐkøãÅZÆ™ªCªx®-:ÔE Q…䘈ÃyaÑfIûÝóÈ®òÇW³Ó5;}ËÆ©•ˆ1„{<+ >_§ãÞ¥×<mâ#T‹OšÏE˜MnÒœy¸Æí¸æ±WÅ'Ñ4#ZÓàÒb´ÔäT~e1!dgʃÊ}ÌaNÞs·<Ð~‘ñ \»¹Òïž\w3m¸o.Õv.Æ9ÉŽ@ú×S§6»ªI¤'‰äÔ#}J(–övW·X£šBÛ#¹ >µ,þ%ø’ïJÕnžßE¶¸±Im¥2î$AÎÒ¯c‘Æq]„N¡­*x“X‚8.%‡Éµ†<íHIÜ_“œ¹ ø"ûÐUE5²’@$qõ§PYøcFšV™lRÞv9ií­ä?WŒ©?‰­z(i­¯üxëÓ2öŽþGЮÇüØÐ·úõ¨ÅæÒãÓîA'ܤ›1ô Õ·E�b§ŠôBÝÍ&Ÿ!ãmüMo“èÀVü ­ˆäIcY#uta•e9}iH ¥XÁ½c¿…to1¥·´û¬rÒXÈÖÅ«ydnüs@4V Ó5»Oøó×|õÿ�žz…²ÉøaS»ñ£ûSYµ$^èM*ùi§Ü,£êUö0ú ß�mÑXñx§Fy„Þ IÏH¯Q­Øý€gðÍk‚ƒÐŠ�Z(ªÝôºf¨ßÛÃçÍkk,ÑÅýöU$/âF(ýÇÛ^ê6žˆ­â¬Gª‡ÝG"IæÆQAåU~mßë>¹1|KÕ.ZÊÞÓÂÂêööÊßQ†õ$QöyCKHª7®ÃòŒäs‘ƒ€F¢¹ŸøªãB‘<5nÓìê~ѱ„p´A€¤3bP@ÈÉã­TÕ|]¦¾¢mtŽ[]DYÈ$¼÷AˆF#?!/†'îòrTpØÑ\¯ã aô}(ØÅ§Xܘ55»ŠLÜÄ„²yDn�Á#3‘]ör2(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Šðýwö‡þÄñ§¤ÿ�Â-ç}†î[o7ûCnýŽWv<³Œã8É p¢¾ÿ�†šÿ�©Gÿ�*_ýªøi¯ú”ò¥ÿ�Ú¨è +çÿ�øi¯ú”ò¥ÿ�Ú¨?´ÑÁÇ„p{gRÿ�íTôó5Ïí#âf“6ºF‘zJ²9üïò¦ÁûHx¥dãJÑäLtHåCù—?Ê€>›¢¾~_Úi‚ޱɎ?÷ê—þkþ¥ü©öª�úŠùÿ�þkþ¥ü©öªÊÔh[ÍNçlš,°iØ­íu.IpÒùe‚ÿ�¹´ûš�÷Ûï[[]µ…œRêˆÆmmpLyèdbBÆ?Þ žÀôªãEÔ5Ÿ_»ÜôÓ¬–/¤’pÒ}>U=Ô׋YþÑVºm¢ZØx&hTä$wørOu<óëÏ5ì/Žlu 'O¼Ô­æÑÚöæŒ]ÿ�ªmê˜|‡¯�ßìƒÅ�t°A ¬ ¼Qà ©jTz�:T”g#"Š�(¢Š�(¢Š�(¢Š�(¢Š�Áñ?…l¼Mh«:F·QäÌñ‡�ªÃø÷ ‚½ÐðO‡‚¿ˆt8t˼,–ÒË€s”tRÅzóÃm–ycŠ5êò0P?X—>"ðö£–×V†@Uâµ·k´aèÛ—óâ€9{3ðÒæU‚ÏJó$·Âťܒ€äÂ}i‘^|/ÔR®þè]6à™>\ñòt~B¬Gá·Žíîü7¢_éÈY§»Š8œ61QÏ@«U4?†:®•5ÀÖíìóäÄlÚPÆN[zîá½?•�>}Gá‚\H×j%„ùO¿M¸Êœ”üy]\ü1²šÛOºÓ¼©†Ö‚ÝôËÇ9Qµvd÷9øSÝÍÌú–¹{+\MçH¶ÑÇ “Ǩb:†» ;ÃÚV•;ÜZÚ/Úœm{™XÉ3C#ØöÎ(•ƒÀšNµ2Os¡C§é„©iŒM;c†“p (9àn#•®ˆÃ«hç6Ìú¥ë ®Âö\èØ?í•·E�RÓõK=MÚË—ŒâXJI=*~£š»T5 ×Qt™ÃÃwÄWP6Écp¸Ïðœ©î Sû~£¤qªDníâöÖ3¹Gý4ˆdÿ�À—#¹ (nŠŠÚæ Ëhî-fŽh$’HØ2°õu©h�¢Š(�¢Š(�¢Š(’Åñ4RƲFà ®2÷|+¥FÌöQK§H{ØLÐ.}J)ØkjŠ�Äû¿jsk¬Cwþ ûa¼ûh÷Á£ûcSµl_è{Ëc2Ü ü×üÖÝ#2¢–b@É$à@Ο/ƒæx-m´»;«Å+4Z­´³ƒÔ2:«0>àÕõð—†ÑJ§‡ô¥RÈÄ (ÀÜ€„=:¨$LñU.ua­«ÚéšDz­¶p÷,Ôý†2}UHí‘TaðeêÌ’Å«ÿ�e�säé1´Qm®íúìOP û½ÎûZ´ÔîA’KXd†8U“çhضÎàb\ñÍ8h::És ÒlCÝ7 -Ó3ç6A ç±5Y´}D/Éâ]Kwo2b?"õ¦·ü$–Cpk Q�åµ´ŸË«o”{Їðæ‡)¸2hÚsý¥9÷Z¡óQqµ[˜ Ó´"Š;xRcHâB¢"€ª£€�PÓµ»mBF·)5­âŒ½¥ÒìP2Cö”‘ïZT�QE�QE�QE�QE�QE�QE�QE�WÄ;ÿ�’‡â_û ÝèÖ¯·ëâÿ�ÉCñ/ý…n¿ôkP?EPEPEPEPEP_nø"8æøqáÈ¥ExßI¶VF <•àŠøŠ¾ßð'ü“Ï Ø*×ÿ�E-�)ðȲùôÙt²|…m±öò‰Â÷ }i¶õ 4c[ÓF:ÞX<_VLoOÉ€îÕ½U/µ];LP×÷ö¶ŠzæXÁüÍ�>ÎúÓQ¶W0ÜÂN¸uϦEX®:ö]Qº7zež¨Úƒp/4Ëwˆ¾=d`#qì凵55ZZJÇG‚õ<¶–TŽäå£Bcsþë§°4ÙÑ\–›ys®LðIâo"å^ÎÚÈ[Lƒý¥›{cý¡€{Òÿ�„SI{ú‡¨¾¸yÔÿ�À•€=ω4[IL2êvÆ|ãÈüÉ?ï…Ë~•ñÓô T¹áäˆ[(>âR­ù)­[kKk(D6–ñAè‘ U€©¨>&¹<&•`¾¬dºcø,øŸÆhWSãíúö£0ïmÓð(ûî¶è  ˆ|/¢C(˜é°M8é5È3Éÿ�}¾[õ­|``QE�P×u!£xRÕ oV²ÜlþöÄ-Ò¹+ÝcUðÞ»«Ìb}JÒÏI³»½ó.Êy=Ï™$i´‚Ä ;FÑ„ôÛÜ[Åwm-´è$†d1ȇ£)#ò¬‡ð¶u=½ÕüoquI q4ˆ“"1($@ÛdÁ$üÀŒ“ŒPßl{oE¦–/夷)“Æ­ø58í´úÖµSKþÔ}BVß/—äÄ�À2 ä2Ù_L›”�QE�QE‘s¡q%æ—9°¼s¹Ê.è¦?ôÒ>?í 7½6=tÚÊ–ÚÜÆg`‘Ìu¼¤ô øIþë`ç»­lÓdŽ9¢h¥ExÜdaÃЊ�u‡ý•{¥Ú$ÊmÀçO¹cåÿ�Û7äÇôù—° Ö­Xkv׳›IKKåkK€ñê¸$:û©#ñ  *(¢€ (¢€ (¢€"º¹‚ÊÖ[«™V("RîíÑ@êkÞÊÈ/uhÚ;¶ÚkŒnžaÝP‡…ï–éâ?i°øª-2ý¥k;[‰’(Œždäæ5lt 0øîJÆ­ÂÊðÿ�­ïþ?øP_Œ +?ü> æi$HÕE£ä³0P:z‘Z_ð•Úφ«ÿ�€Oþ½E`ÿ�ÂWiÿ�>¯þ?øT¾8Ótûcsui©ÇeRÍdàÌvõ"€6u.ÓT…b»‹vú9•x›ûÈÕ>àÖ}•õÖ¨&“ªÈÓsö;âDÝO–øàHÐ0€0@Ìÿ�…•áÿ�[ßüðªšŸŽ¼5ªiòÚÈ÷ÈXe$[GÝŽU׎ €GÒ€;ª+šòøÃ¶Ú†ÍÌw%S†<ã<Œö"¶¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯ˆ<wÿ�%Ä¿öºÿ�Ñ­_o×Ä;ÿ�’‡â_û ÝèÖ ~Š( Š( Š( Š( Š( ¾Çð]¶¿qàO„Ôl¬íÿ�³-¶íL’íò—f` ãý“_WÛþÿ�’yá¯ûZÿ�襠 †ã˜æÿ�SÕoN1‡º0©ú¬!þ"­ØèzN˜þeŽ›io!ë$pª±ú¶2¿E�QE�SÔt?V‰c¿´Šp‡r_™ª·U>àƒYƒMÖt¡3Qût�qi©1,=–p øsï[ôP$^&µŠEƒU†m&áˆP.ð#rz”„žÃ;½…mç#"™,QÏE,k$n0Èã B+ økì?6ƒ}.™ŽE¾<ÛcíåòúæR€7è¬íËý7åÖô¹1ÿ�/–9ž/«(Óþù zµì¯­5U¹±¹†æû²BáÔþ"€,QE�QE�QE�QE�QE�QE�U[í:ÓR„Ewʪw)ä27ª°åO¸ Õª(¾Š¼yš½ŠŽ‡ê1ú,£òo÷iXj6šœ&[IÄŠ§k® ²7÷YN ·±�ժοÑm¯¦[•i-oT�—vä,€px!—¯ÊÀlЇý©}¤šÌ"KqÓPµBP×Dä§Ôn^ä¯JÙŠXç‰%†D’7•Ñ =AhôŒÊˆÎìTd’p�¥¬_;6ƒ%”lV[÷K%#¨0V#Ü!fÿ�€ÐŠC¨K«´ú¬À‡¾™î0{+1Ø?Ú? –«iÊSLµBrVSÆ9�Vh�þBgý„m?ôzW³×ŒGÿ�! 3þÂ6Ÿú=+Ùè�®gâü‰×õñkÿ�¥×M\ÏÄù®?ëâ×ÿ�J# >¢Š(´ø]vbÕu<·É*Et‹þ×(çòצW“|8Éñ¤Øû«§>ïÆHñüš½f€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ øƒÇòPüKÿ�a[¯ýÕöý|Aã¿ù(~%ÿ�°­×þj�ç袊�(¢Š�(¢Š�(¢Š�(¢Š�+íÿ�É<ð×ý‚­ôR×Äöÿ�?äžxkþÁV¿ú)h ¢Š(�¢Š(�¢Š(�¢Š(�¬‹ß é÷W-y’ÆýºÝÙ·—#znìÿ�G =«^Š�Âó¼A¥ŸßA±lúË|Cp£Ýì¨eöSVôí{MÕ$hmî1rƒ2Z̦)“ýèØß=«J©j:FŸ«Æ©iÛcr0ñŸUaÊŸpA  ´Vöv¹¥œéš‚ßÛŽ–º“Àz,ê ßjçÜSâñE¤r­¾« ÚM˪·€Üú$ ”o¦sê�nQE�QE�QE�QE�QE�QE�V4º¶™î´iþÁ;ÏÝÖòŸö£ãý¥ úç¥lÑ@úàIÒÓV·:}Û¶Ø÷>èf=¼¹0'û¤+uãÓ.ÿ�Ó<[§ÛõK^ñÿ�ÙwÌQþjgü«ZâÞ»w·¸†9¡mxäPÊÃЃÁÇh–Z…Ƨ©é ·rm£³¹‘‹yPüŸ»”äŸÍ 6F�¨æ€8ýþÓ_Õtû]6îá-î™”ÛÂ]U$>b=€ÿ�€šû+Yÿ� ©ÿ�€­^—q©Û®¨5‹e–;¸"òµpIø¶1$È ¸$WU‘ÍK«Æê]NCЃÜP….—¬-ÝŒ‡BÕvÅ{o+bѸU•žž€×¥ÿ�lújßøÿ�á]eÉÿ�lújßøÿ�áX~/¸¹Õ<75¥¦«<Í5»ûŽdcÛÐôŠ(Â?²µŸújŸø Ôek?ôÕ?ð«ÝëźܚN”°YÚµû‹[<þõ¸ÞG÷S;°Çz�åþÚJãYÕ%†HƒÎ¶q,‹ƒû¬ï?÷Û²ýR½¨hºM¶…¢Ùév€ù6±Ô·VÇV>¤œ’}I«ô�QE�QE�QE�QE�QE�QE�WÄ;ÿ�’‡â_û ÝèÖ¯·ëâÿ�ÉCñ/ý…n¿ôkP?EPEPEPEPEP_oøþI熿ìkÿ�¢–¾ ¯·ü ÿ�$óÃ_ö µÿ�ÑK@Q@Q@Q@Q@Q@Q@2X£ž'ŠhÒHÜmdu0ô õ§Ñ@#ÃfÃæÐo¥Ó€ä[æÛo,Ÿ{!JC¯^飿™$Q¯[Ë,ÏÔ€7§â¤ïw­ú( KÛ]BÙ.l®a¹þì°¸u?B8©ëóÃV7-yoæØ_1ɺ²-Øÿ�¶1µþŽThñ•´[G¬[²Ú ÂS¯õVS覀7è¬í;]ÓµYkôˆÆd¶•LsGþôlïŒV�QE�QE�QE�QE�RÖ5¥h×·ûw›xZEOï°/ԜƓF°þËÑl¬Kox!TwþûcæoÄäþ5K_ÍÕÖ“¦EÅÚÍ(ôŽÞgé½c_ømÐ=CK³Õ#Eº‡sFwE"±I"oTq‚§Üæ-týwÂDY†Õô'bÍn¡VâØ“’Pp¬½IQ޼¹ìè  –¥Ž©½•ÌsyglŠ3èÊySì@5n³¯ô-7Rn.-ȹEÚ·0ÈÑL£ÐH„6=³Šª4mRßÓÄWeD»†9€PâM�mÑXÆËÄN�mjÅ:ç0oüzV¥4øp\¶u=SP¿_ùâò,Q} ÆpömÔ%ƽNözZ BõN"ÝÂ餜„úrǰ5‡£é-wãIµ é…ÝÖ›ç'‘rR5ÏÊ©sçI"ºɬ¼9 Í<VÑÅmk)Ù2N�÷4š.™£Ã ˉ.Ü´×23’ÎG¶IÐ�;PQ@Q@Q@Q@Q@Q@Q@|oâÏ x“Tñ·ˆo,|;«Ü[ɪ]’)Oï[¸WÙoÿ�¿Ü[ò-µXþÓ ž0Aÿ�O,ãý—4ñÿ�ü ž0ÿ�¡S\ÿ�ÁtßüMð‚xÃþ…Msÿ�Óñ5öýñü ž0ÿ�¡S\ÿ�ÁtßüMð‚xÃþ…Msÿ�Óñ5öýñü ž0ÿ�¡S\ÿ�ÁtßüMð‚xÃþ…Msÿ�Óñ5öBjåï5† #Á¥â'Ž(÷É$žZÊp$ít�¤ž¼b‡ü%i>‡©jÑÛÜ[dHË{mqå– ¨²7(̧÷laºðhäoøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âkíú(âøA<aÿ�B¦¹ÿ�‚é¿øš?áñ‡ý šçþ ¦ÿ�âkíú(âøA<aÿ�B¦¹ÿ�‚é¿øšûÁpMkà_[ÜE$3Ŧ[$‘È¥YD ‚ ƒÆ+rŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�¥¨éª"ÞÚÇ)Œæ7èñŸTaó)÷Vi°×4¾tÛõÔ-Çüºê,Ce™A?÷Ú±?Þ¿E�bCâ‹5™mµ8¦Ò®˜íT½RCè’Q¾€çÔ Û¦M W¼3Ä’Äã Ž¡•‡¸5‡ÿ�Ûéãv&œKWu±öòÉÊde¿E` zóNùuÝ2HËåžg€ûô÷ÊíÞ­›KËkûd¹³¸ŠâIbpÊßB8  ¨¢Š�(¢ªYˆ� ’{P-¯úg‹¯§Îc°-ÚGÄ’ã¾EmÖ'…UŸCKéj=éÎrFÜ€û„Ø¿ðÛ Š( ±µë‰ãF³\ˆ¯¯ü™ˆþâÃ,¸ú©õ GzÙ¨.íòŽv²°tpQÈ#üôÈ wÃÚ­ÿ�ˆmí¯n¥ÒΙ¨@ÒEhŠÂâ#‘ò³!È …]¬1ÍiønòkÝ<ìZH®.-··WLñ†>ìƧ‹FÓíeºžÊÎÚÎêë™®-àE‘Ï©8ù×52%®•§m]°ÚÛÆI$ðªI'ó$ÐN¥ÿ�_Øé`f 5 ¯vˆTÿ�Àƒ?±‰}k~±<1 §Éª\©[­NOµ:°å€#Cþêßqï[t�QE�QE�QE�QE�QE�QE�QE�V7‰í¦“Iûe¬fKÍ>E¼GV)÷{²OølÑ@ÚÝC{gÝ´‚H'dÇFVò55`ø{ýëQÐÛ…µ—϶Ï{yIeð'ÑWÖ·¨�¢Š(ë@KŸíxÓAª¡¦’ÞM’$=ÊqÝü¾j§ü"j–:¥—Û®nbÕä z×%3·ËXØ(DQó"*ã ê=KE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�wị‡»¶2é÷Îr×6M峟W+'ü Ø¢€0>Óâ /‹«Xõ{aÿ�-­1à{ÆÇk{•`}¯iºî›ª³Çkr è3%¼Šcš?÷£`Z5GRÑ´ý]_Z¤­Ìrr²F}QÆO¸ ÐêÅñ[±Ð&³öË~Éd„uk,=ÕK7ü£û»¥œé÷ë¨ÛùvÔ$ÑfQŸûíXŸï Ë›Ä6·ž.Òlµ“L–Õd¹1^PÒ°òã à•l«Lx9ùzz�v‰kjU�ÚE�QE�QE�Vˆÿ�âa5–€¼­ó™.‡¥´x.³‰ôsé[õáñý£y¯7+rþE§µ¼d€GûÎ]óÜô  ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€05üiÚ†›® >Ët錤 Ÿ÷dœö½MoÔ¶j7W)¾ ˆÚ)÷V#ò5Ÿá»Éît…†ñË_Y¹µºcÕ8ßÿ�]®=˜P½Q@Q@ÓÃmK<©k÷Ø(Rk$ø«K°´ú‰ìl i“>›Ôl‹ �Ú¢±´uË’E¶„°/÷¯îÕÔ„™ú? Aeâ)ÀûF³gn§¨´²;‡ü G`ïš�Û¢±á¶ëÍcWº?õô`”!(Ð3iv÷Gû×`ÜÎLš�žãÄz£ì¸Ötø[û²\¢ŸÈš„x«Isû™.®�þ+k)¦š!¥mgkd…-m¡OU‰Ò§  aâ $?èÚ¯0õ0¤_ú5ÔÐu]^Oõ>¸Oúùº…?ôzÙ¢€1lj[¦iIœaŽ¡#cðòGó Gâi7:M¿°·’lãé[4P7ØüDàoÖ¬Tÿ�,´æÿ�¾¥jA¤êì�“Ä—#ûÆ+XWòÊœ~9­ª(ûÿ�9ÿ�„›Uúyv¿üfèWNs'ˆµgôÁ…1ÿ�|Æ+fŠ�Å>g#ÌÖõwPs·í3øªƒúÒÿ�Â7ýõü“ükfŠ�Æÿ�„n/ú êÿ�ø'øÑÿ�Ü_ôÕÿ�ð:Oñ­š(þ¸¿è'«ÿ�àtŸãGü#qÐOWÿ�Àé?ƶh  QáéauÝ\À̇‰RiWC»LˆüG«('8"Ý¿VˆšÙ¢€1ÆÏüTÚ©ÿ�¶v¼äiÒõ¥ÁO9#´–‘•?–ë[TP0´ñpºÎœÃ9̺kÿ�ŽÌéA&ŒðúDã×dþ=_òýkfŠ�Ç7~"^N§0ôRr߬ ~´‹«êŠ?{á«ÒßôÂâ݇æÒ/ò­š(xˆ#m¹Òuk|u?d2ü„^øJôU OvÖ§þŸ ’ß_1F+fŠ�¡i®iƒ²Õ,®XôÜ#ŸÐûŠÏÒ`ƒT¸Ö¯.!I¡¹¸6в(eh¡ù x#ÌóOãV<Ey}§Û^ h@“B¯¸£#¹ãñªO‚t?H³¶û1†â(Ue–Òg€»ànlÆÃ©ÉüM�Oÿ�äºyÝ ê2Ø(ék(3Û} deÆøH.ôï—]Ó$·Aÿ�/v™¸€ûœ éï¹p?¼jS M?c×u[qýÆ•'‰•Y±ô"#Ä–ã÷wúmàÁ5³ÂÇêêì?ñÊ�Ôµ»¶¾¶K›;ˆ® q•–­ô#ƒSWuap—2]·‡ï,/XîkÍê6Ü}]g™ÿ�F¦/ŒæÒ˜Gªî#è¢k)Ïý²› 玨üöZ�íè¬í3]Ó5€ÂÆí$‘F^%AþÒ6Z4‹âk™—NM>ÒCæ¥ ´…׬`‚^A¸½jÛ[Cgi ­´k¢Ç/EP0�úX¶?ñ4ñEæ y·°Semèd8i›óž £úÖý�QE�QE�QE�QE�QE�QE�QE�QE�QE�!þËñ„rp-µxü¦ö¹Œ§êцöÉk~²üA§Í¨èÓGj@¼ˆ¬ö¬{L„2gØö&€5)²I14²º¤h 3±ÀQêM`ÞxÃM³ðý–ªî£íÊŸg†I2Y±ÃáBÿ�=1Üà‘wá›écºñˆô{Ù-¾ÚŸfˆöÛl;´Ù9é·¥�kÿ�ÂKöáÂ]O'hÏ“l=üÖ0÷@ôÿ�ìÝn÷ûYÈzŧBý ’n'ê¡ Iÿ� _‡�À×ô¯ü üiá+ðçýô¯ü üh�‡Âú4r¬òY-ÕÂýÙïÜH>!$~­zÈÿ�„¯ÃŸôÒ¿ð2?ñ¤-ðÙ$iDŽúl|~´±Ecÿ�ÂYáÏú4¯ü ühÿ�„³Ã|ÅA¥sÓý6?ñ  Š+¼[áµRÍâ$�2I½Ö—þ¿ÐJÿ�ÀÈÿ�Æ€5è¬øJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü üh^ŠÇÿ�„³Ãyþ +'œ}¶?ñ¥ÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢±Ç‹|6Ã+â$Q{øÒÿ�ÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãH|[á¥Æïé#'7±òïª�Ø¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+x³Ã‡§ˆ4¯ü üh-ðÙ$iDŽúl|~´±EdÂWáÏúé_øøÑÿ� _‡?è?¥àdã@ôV;x·Ãj¥›Ä:H�d“{­/ü%~ÿ� þ•ÿ�‘ÿ��kÑYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½ÿ� g†òü$VO8ûlãKÿ� _‡?è?¥àdã@ôVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯Ecøm†WÄ:I¢ö?ñ¥ÿ�„¯ÃŸôÒ¿ð2?ñ üAþ“>•¦EÍâÉ ôŽ/Þô,¨§ýêÛ¯2Öþ XÅã#‘s§ÞÞ­ ‚Ýå¼D¶‡{n•ä|ôÂÀ9$:fœ,<7ª*ËãÙk±ÿ�U¿K{D'²Ä­ówrÙö ¿PñŸ†4¬‹ïi0ÎQ®“w~\æ³ÇÄß|á¯Û¿¿µ¶þx§i÷>ÒUqáËMŸtÁ$Gâ iÂYáÌãþ +ÿ�#ÿ��¯a㯠jd ?ér¹èŸj@ß÷É9­ÖX爫ªIŽA�†Ö¹½Bÿ�ÀÚ²²ê7ž» 0~Ñ,/üÍs¯¥øFÀ´Þñ}–ƒt§”‚ù$¶sèð3mïü;O=h¤Ô<á½A’A§‹9ã;£šÅÚÝ£oï „ ûâ³u4ñG…4ó5–¯³ t†+mN=³–s±BÍÅxd韘u¨´/ˆÖ¨¾â½&Úù|Wv·ˆö·Kœ¤œ£èÜ÷бqâ}Qñ]²>¹¦‹-6??q»Œ,— ¨óµ7“îëÜP½V±Ñì,ôAn4û´I¾P¢âBr̲Q‹1-€Ùç ®¦°î<Ká[‹i"¹Öôi u"D–î"¤wÈ'¬_ímA]Äl¶£—ÓeÔc*ý1foÿ�²NÓþÏZ�í¨ªz^§i¬é°jR‰-æ]Ê{PGbzÕÊ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�äô9l<m®ÆÎ ùqÍiÿ�–QÊîÒãýéA'‹è*çŠ~ö‡ÿ�aX“S¼KáÈõÈíçE‡í¶ŒZ9rŽÞñÎÓÈä8ÁË´Ó|'u枦Ÿ¼ûÀÃ?‰IÝsïƒÅ�vUçZ­âÈ´ká{¤^Þ^é`€C"ÊÂC"<dT*¡YÒ$Sƒ]gü"Zýíÿ�#Gü"Zýíÿ�#@xa5ü+¤Å«,«©Gi]y®®ÆP 1, $œ÷¨ô_ù xþÂ)ÿ�¤¶ôÂ% Ð.ßò4Åðw‡‘—I·Îæ8<œëè�Wñ®Ÿ©ê]ªi¦ä˜®–Yã¶1 $@­€<ßÝœ9ˆnSß‘£éþ.‡ÅÖ÷º‹ŽhbŒ¦#¨·‘?å ´Ü|…X÷ÑÂ% Ð.ßò4Â% Ð.ßò4�ž1ÿ�‘#_ÿ�°mÇþ‹jÚ¬9<áéchßI·dpUiÿ�ð‰hô ·ü�Tñö«¥;h77²A:J·Ð4 Ûmpq—u`ñm*Áâ¹Ëÿ�ZÜWþ(]Gr"“–ƒw¤&g”çïœ7+׺ïøD´úÛþFøD´úÛþF€pIñ®’HÁþͼÈôýåµ'Œæ¹ƒÁZÓØ­Ù½û«l,ÑÞ_4© ´ -ÄsÛ©àƒ¼<eY“o½T¨8<Œ÷öÿ�øD´úÛþF€0¥³ÖîükÄ7L¸!Øý¢x¼ˆ<‚¦3PÌ…\6Dƒ8À·ü=aö ;…zRK—d[Ë™guQ…4¬Íƒ·v?Ú¦ÿ�Â% Ð.ßò4Â% Ð.ßò4ƒ?äZþ¾®¿ô¢Jç¯ü?¨j§]YtÖ‰YKËhn£ŠâÄ[d„‡A ùK#8ÜTƒ°àœ­t‘ø;ð Hô›uPIÀ¹É§ÿ�Â% Ð.ßò4‰á]ô^>“r—piâÖmSt^]áù -‰ ŒA\.å¹ä ÔñOÞÐÿ�ì+òjŸþ-þvÿ�‘¦?ƒ|;)BúM»lmËx>´�ÏÁ{q¤ÚÇa§Í{2ê6“2Äñ©DŽt‘Û.Ê>ê€s–²Gsá]qµ_Mg¥Ihn·ÿ�¤G4;îÜ£•FÎX¼AÇï€NÕ;I®çþ-þvÿ�‘£þ-þvÿ�‘ øi5(ô dÕò/¸ „ {y{„&í›s·ŒçS4_ù xþÂ)ÿ�¤¶ôÂ% Ð.ßò4Åðw‡‘—I·Îæ8<œëè�3_»¸·×<5 |RKçûA·†GŒEäJ£Ì* æ4XÝéžÄ5¶>(cp¨<Pµo³´¢ä·ñå ÏÊ>}åp~LÍz‡ü"Zýíÿ�#Gü"Zýíÿ�#@ ãù5ÿ�ûÜè¶­[™R I¦HÉ30‰Ü€2vªå‰ô“Ú²$ð‡¥£}&Ý‘ÁVA§ÿ�Â% Ð.ßò4ÁÂúÝØðˆœxJöqÝí[ˆ‡™¸¬ÅȆËG+ƒ Éï¼=aö ;…zRK—d[Ë™guQ…4¬Íƒ·v?Ú¦ÿ�Â% Ð.ßò4Â% Ð.ßò4�—_ò;é_ö ¼ÿ�Ñ–Õ‹îî-4›WµKæ”ê6€ýŽ$o,N.á'o–9àôê@§Ÿxxʲ&ßz©Ppxïì)ÿ�ð‰hô ·ü�eLm¿á$Ô˜Üx…cŽ—,7†'9R"heP";›q=W5§á$»ÃVËz.„¡åÇÚÝžBžcl$·ÍÊí 6X IÓ¿áÐ?èoù?áÐ?èoù�‡ÁŸò-Gÿ�_W_úQ%szŽ=ÿ�ü$PßøNúî½LKjÑKm¹AfdÝ0ÚÛ¢b 7Ž¢ºxüáØP$zMº¨$àÜäÓÿ�áÐ?èoù�â¾Û]ËâŸjWKæöîÙå1¼žg˜¾Tq‘—¬`d6Ê:šë¼S÷´?û Ãüš¹ýwÀQÙjc\ðö™kq!P—šdÌU.TtdoàtÉàŽ¾µ÷ÃÝJxíolíôÍI&ÇSS¨þÛŽØ©"€=¼²ÛÃÚÛhWoˆ4KÝb6Ù²E{O69Îï:xغpNÂŒÇ̶x⻑áO²†]2Ü‚2iáÐ?èoù�Ø•Œr=+Bÿ�ljÿ�ì&ŸúIoN>Ð�ÉÒíÿ�#\Æ¥yðïG¸{t‚ÖóQ•²,lÜO#`�6©88®½�cüg¶&;}J}-¦´±µm·$ÂWÏ{‹r‰±›sec)“Ûðï†<G¤]h÷–Ù#•k‹bÖæ( LÆpÃs F5Ë9Z†�dVŽ•àa­êÑköo§ZAÍž”½ƒùi3 c¢‚@õ&ºÏøD´úÛþF€Æ?ò$kÿ�ö ¸ÿ�ÑmU|k§êz†—jši¹&+¥–xíŒBI+`7÷gcb‚÷ÅX“ÁÞ–'ŽM&Ý‘ÁVA¬[› íå³Ð4«;ÛÅ;^LçÕØHþâüǾÑÈ�¹á/·%þ£ô{.|›Y/0ACvP‰JàŸ”…ŒØ‚ºªÎÑ4x4=1,ábç%å•€ #ž¬qÇ  �À£@Q@Q@Q@Q@Q@Q@Q@Q@Q@UÔ4Û-VÔÛ_ÚÅq 9 "籄v#‘V¨  /ìÍcM_ø–jk‰z[jYcA2üãêÂCNÿ�„…­xÕt»Û,g2¬~|_]Ñä¨÷pµ·E�U±Ô¬u8<û Ë{¨ºo‚@ãój³o¼?¤ê2ù×Z|?iÕvÊ>ޏaø¯ý…ul?â_®_£¤wnSñ. Ÿûî€6¨¬MÞ'¶'1é7뎪ÒZ·ä|À1øQý½ylðö§þ'‹Ë�Ž\ÿ�ß4·Ebÿ�ÂY¢#m¹½ûÿ�§èžÛÿ�F­+MBÊý7ÙÝÛܯ÷¡8ý �X¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ª·úe†«nmõ+kÈOü³¸‰d_ÈŠµTï5}7Nÿ�íBÒ×þ»Ì©üϽ�s‡á§†â%´èï´§ÏÞÓ¯æƒEVÛúS¿á÷ø  ýßí#åŸÖ´ÿ�á+Ò\âÖK‹Þq›;Yg\ÿ�¼ŠT}IÅÛ:œøž¼ädIu4Q'ã†g÷Í�e¶Ð'ÉÔŸTÕIãý?RžQM»¶ãð®‡MÑ´½'LÓ­l£Æ6ۨך§³Ä·-6•`¿ÝHä¹?ƒ÷ɤ>k?´uNìqfû:~Q${14{PÖ4Ý(/Û¯`·gûˆî?û«ÔŸ¥QþÛ½¼ãKÑndñ=ïú,“'þ9qW¬4}7KÝö kbßy¢ˆ+7ÔŽOãWh ô OþCš‹ÜÄzÙÛ)†ìÜ—¡m§ûµ³ÚÀ[Å0 Ú‘Æ¡UG ¥IE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�›wáíýÌ—šE…ÞwËlŒß™­*(x[L@DúØv[{ùãQïµ_oé@Ю#âjÑ/¡h¥ýdë[4P(Óõè›÷ZôRK«ý’”§‰¢é6‘uÿ�l¤ƒÿ�fzÙ¢€1߈“–Ñô÷é¢Äÿ�ãÐú궬¿ë¼7vë…Ì Ïü ×óŠÙ¢€1޹t€yžÕ“=?Ô?þƒ)¤ÿ�„’0?y¥jèGQö'lß9ðÍmQ@ÿ�ð’ØggÕðSuÿ�ÆéŠtµ8ÞÆ}%ÓçB4³E�bè\†Ô2?†Td?“�iÅþA—ÕíPggÀüÍmÑ@ð•øsþƒúWþGþ4ÂWáÏúé_øøÖ½ŽÞ-ðÚ©c¯éx<]ÆOåšhñw‡ÙC.«nAµµE�bÿ�ÂY¢„½óq×Ê…äÇ×jœR¯Š4×Ï–º„€u1é·?1­š(ø–Ç­¶ªÇ°þʹüãÅ7þ Çèú¼‡©ÿ�D)ňµE�cnñ¹O ê̾¥­×ôiAý)©¬9ýׇe_úø»‰x÷Ú[šÙ¢€1¾ÓâFûºV–€÷}FBWê8?Ÿã@‹Ä²ro4›öE¬“~¾b*Ù¢€1†™¬Ès?ˆ]qki~[÷ÿ�ŸÎƒáù$?é:æ¯?·œ°ÿ�è¥ZÙ¢€1…t‰ûDÝÑnîå)Š·e£iziÍŽ›gjé„ ŸÈUê(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(“JA$ÒG–b8�dð+Ì,µ¿°h³hž#û|ñ\ié>¥u;Þ[2K>Æl6‰tR€¸ÛœR##Š�ói¼y«O¤Ú]i—ž"ëP¹¶K›Ç’;}±JÊ«½KeäP¬½^¹œÿ�ä:ŒK{£—qÚ¶X|³\¼.. 2Þx\gq“èôPá/M¯k°XI¨è÷k,‹C)‚ábWæFùdV.£°[­sšÏŽõ;Í!#}[J°K–·ûC ’94ò×#Á)óAݱݷ)C¶'À=~Š�áüyzºn“¦iÿ�ÚdI.e–òKu#\Ìá·‡%Õ—æË œf³u_E£xbóuΩöýi“˹V³Ÿ *E.yeŒá¶Ì¸ȯJª÷7Övv¯uuuñç|ÒÈ$ð9 ?¾ñ­ùID7Z~¢¶šDóÇpO³‰ç)*´{À)$`á€'î‘¡ã¯ÜxbàÇmy¥ÄSL¹¿d¼³´mH׸/½”uåz]²º>펭´í89Áô§P™ÁñQoíï®tuºµ¼‚È7–Ñ©w½šÊ™ â$Š\g€üœk.óâ Σooöæ…œJÓY³'”°j0Bd“÷§1I;í8ùTüÄr=‚Š�óy<u¬¡Ò|Éü=e ©,·77ÒI\D’²n·?À¢L1?+¯¹4Ý^'‡n/5M$Õm`”Z¤nfy†TýçE<d+wÝ´ žòŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Ëñ,÷v¾Õî,7‘YLð×ÌJþ¸®ÅÍw?…¼Um®Ú}…†˜ÑÚZ¤Q‘w¶Ü]‹©b ,ƒa\'ž•镼ÚÀÄœAì:PGžá2´[fms¦Ë,̤%dˆDòóßÕ¹QGoSK2¯ïeÆö'$Ð{“ǹõ5-�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QT4ífÏT¹¿·¶v2XÏäLqó`QÉõSé@袰ü=â‹O MµµÜ"Žt7 K›¶:ícÁØÜ0Ç dPåBÇU†úãR…c’&Óî~Ï)“�夛† ãl‹×¯,…¼æÙ7šæ:BYKlrr¤ƒ‚ê2 ðM�Z¢ŠBʸÉ=2hh¨­®a¼´†êÚE’ ‘d×£)}A© ¥˜€�É'µ�-´âæÖ•¢¸RÊHÈÎ2¤ƒø=êZ�(¢Š�(¨,îâ¾·ÀKDX…~ÌÆG·ô–×°ÝE#£cÊvŽ@Üeêóú{Њ*{…¸¶‚`6yÈ)e$dgRAü õ5�R� è=j9n`‚X"–UG¸sJz»,@ÿ�€«€%¢ŠÌƒ[Žë]ºÒ൸Úm#`Š7eå·U”ð¤sÖ€4袊�(¤$ ÐzÕ=SS‹IµŽâhät’æ oÝÒʱ©9#Î3í@h¨mîRâ5~U.È2Ês†+œ‚G8ϯ¨" Ö58´]ûUž9$†Î¸‘"Æâ¨¥Ž2@Îï@h¢Š�(ªZ¦§“kÄÑÈé%Ìß»!¥•cRrGœgÚ¡Ôµ¸ôëûµ¸»»¼ÞcŠ €„M»Ü—eס'ž  :(¢€ *–©©Å¤ÚÅq4r:Is·îñÒȱ©9#Î3ߪ[ûØ4Ý:æþéö[ÛDóJøÎÔPI?4bŠÎÒµtÕ#9¶šÒà"ÊÖ× ŠŒX#ŒÃ µ±Îxä ¹ ÌOR«¼yrü ´6¾ÖSøÐ´QP¥Â½Ü¶à|Ñ¢±;”ýìñŒä}Þàx'œ�MEQ½Ôâ±½ÓmdŠFmBv·×U„O/Í“œºÎ*ÊÜÀ÷rZ¬ªg‰GŒuUbÁIú”oÊ€%¢Š(�¢¡º¹KKif~|´/·r©8í– NHô]]ÛÙ[Mss2E 1´²;@É'ØPÔT0Ü,ï:¨ÿ�S'–Nå9;AìN:㎘Á3PEPEPEPEPEPEPEPEPEP¿jû ÿ�aò¾×åŸ'Î$&üq»�œgÚ¼ûSð·½ô:fª·É¨i¦Ü.¦éÃå:˜aŠî“ïrwu¯@½½¶Ó¬ä»»™b‚1–sõÀêI$�$œW'¬øòŽÊßGóÍíÕàµa>—rín<¶“sÀ¹ÈCÆFHÈVÀ‡„´K½ µhæ²Ó¬ínnÖâÚ Y–1å"0ÁE,…¸ê\þ9žð†µ§[]Å>®tö™£s&šRC4€?™+ ¢eC!d%T`àòk¥»Öìtˈmo® Ï$-6VÙ± ‡r@!T\’x“Žj”^4Ð¥ÈûTñÑ€³YÍa#„FPÈ !fQ¼eyó@wþ ½ŸÅºœ6zYioa½†ùåu¹AQ!ƒü¢î<9ùI¥Ðü%}a7„nomt·¹ÑôÉtùäI˜q¤‘±ŒqÜy¬<çbèE´÷e–XcŽ+9¤‘¤Šº„T-AíÐÐf¯]kV6:l7÷/$qM·ËO%ÚW,2FrØþ3ÁãŠ�å®<-ªNþ$i4­oí+Ô’4¬Û  ²¾b;I0«ã 71¦L~ðuöŸ{`ÚŽ—¡ÍäÚ%¬÷ÆGšyU!ò°F6†À$nÛ‚Ãi'}[ºñ²^kšF™¢;yæ´óK§O'’#dRŒ£i‰d· Á#æ\ïÝkúm•ÅÔ3´okO90¹XãrÁX°ÆQ¹ÏNqŠ�á<;ðÚçJÔt[›»=6I4è"Š9á½ ¹A‡)ª£ù‡.wc íã¯Sámÿ�Gѯ’êÃLPšæâeÓ3$Šò<ˆ®æ5 )¯Ý8#®rx÷C±Ž!¨]Í“M<q±˜î1ÌÑ”CÀ®0OP� U¸|c ]øŽ_[j‘a#.mÊ6WŒòp@ä®s@(øu­Ëciî—áÛ™ììtÛHžK©üzÊYù0eD¨vgŽE_ëâÞÂÖ- Óu)o,Ø\8xÐÝ –5ýÏÈ ~è…è�ê2µÓéþ"y¼¡kW…"›PŽÈÉåÄYÎcv@%ðN2 Î0kê>>ÑítÍZâÙ®..4ûk‰Ì&Òd[c…b˜;_ Ägnrp9 7ÒtX5½Rçì'O¸º»Šæ$º·”É<[äóÚÜ*ºeTD8 „sÛÕ<! §†ô%ÓⳂÊ1!u¶‚ê[„8È& ç' ôêM=?ÆVpÙºÍémƒ3&—qvû¾êË¿w”ßeÈÁUÉ|c¢Ã ÊÒݲ½ÃÚ§—a;—•7îE b<©3Ž›~”ÍÜøSY¸Ñü1ioo§´šÂ×R²I¾î0FÂÈ±à‘‚wåk§Ò¬î þÛ»1/›}vg†X…aŽ Á 1‹wLáºgŠe§Œ´;û‹Ë[‹™a‚8¥}¶SîdŒ‹³s«`à¨#ƒéUu_i¶@ñ´ïÖ—>¥ Ôv¯,b(Õ[qÆ8Ãç¯aYr•á?jZ5Þ•-ö—¡yÖ–qÛK}Ï,äG”nvƒµIÃc–I;«CVÐu[¿éšÕ½¾˜a± VIÝ$GCˆÏ�Ès‚Wta¨þ*Ñ“Rû\Éçy†âÞC“þy‰vì/ÛnìçŒfŸ¢x—Jñ»i—J8æ>e¼‘f93±Æõ”íl‘Áô  ‹ß Ý\x¢ëP·³ÒàóádþÓ,Ïw1O—‡Æ3òäî¬=#áÁÓ“*i:LrÙêIy*Éî‡Ê‘EiTí}ÎŽ±Œ±àÛÿ�½¬ÚuʦtùõYôùvòM3yQM’ª™9óa#OñÛSOñ ¦¥}o¬«5½å«ÜÛJ ‚Dn© `yN1œ’  ŸøbçWÕÖìXéz¥¹¶ }JGAlá˜ùÑ•Vùˆ`Ý?"á‡4ÏxRçú†©=í¾,×-ÍB"MÄÁbÌÊ nḣ ß3Ÿ©Ý>#ÒÖÿ�ìMpâãí?dÚa| |¿7nvã”äàö9¬¥ñ•¬~'k ™JÙÜZYÍg"ÚË’óÉ*bFÁ ’‘»o-ŽM�aCàLÙÄ÷šG‡î¤[»¹e°–gkyÒiL‘³9‡;âÜÈ £ F âÁør,âT»gû9YK–9L¶»IçlEŠóÉP¢¶ ø…á[«»Ë[mY&žÎT†dŠ)«»ˆÔ /Í—!r22@ïV-<iáëï6o©#j«˜Ö­«Œàä�«Ôw§xV];ÅI¨¦›¤2°/5ù,nYÙmªWäÎx|`Ÿ—'uC¯ø6mKQŸRŽÛO»¿[û;«)îÝ‘­’š%!hmŽr:™G¶o<aáý?Äv¾ºÔâUº�ÅnCsÓ$ {F{S4&·3%ÅÑ+Cä­”í6åUcû ›ðÔçÞE�sºg„5h5;k«Ý#ÃòIìÓ-Ã\I+×/?îÕ¢�0ór ò%‡Ê2¬ôƒâÿ�j  O¦öÝZ™.8u™çEG*§ ¶Ts²>Ç#¯AkâÉ4ËÇ)m5­œ¶Ž-eÎù¤•6ÈØ!rQ�Ý·–Ç&¶nõ{++Èìçy>Ñ$/:"BîJ!PÇå¡uã¯Ì(—ƒEÕ­ü_/‰5+]w³’ ¿&wfd"6ÜÙˆoØce äü¼ƒ“ƒNµá m­¦¶½±óÖ+8Úg†;‹f)H™`2çæ"pG^’_è6qMqy~V×í"¥KY2aŽQ–PÀåd ËqŒ‚L¯ã¯.«c¤Q!ԵĖÐM ŠÄ0ùwÒ{Á4ÍŸ‡rÃiCc¦KymyiqbÓÜÊÆÎ(^6hFVm§cüÜdÈ~P�·¯xvãPñv¬E¤h×±ÚYOûl…_ÍfFB?tø PŒç#Ìbf½¦x‡€,üK¨…MÚZ_܈‡÷BFÚ é×ÔËâ d»‹M¸gþÒeQ"Am,±Âì2ÝTªÿ�ÀˆÈæ€8Û_�_Ã¥ip]iZûçÇi4Êâ8¥L´ÆÂ<—uÛ»…#`øÉ†?‡:Ô¡ŸPÓôMSeürMqw+n [AnÊàÄFK¨—nHÝÆ{×hþ!|%y­?î…¤sùØC áfY>PA`Œ‚@íV¬µÛGQ¸²µûKÉnYdÚȱnVÚʲ ÄRzJ�ç¿°¼B>hú?—§I©ØÉdd/w'•"ÛÉç•»-åŽ6ñ¸òqÎ2ü8º‹Dñ-²ZéÒ_ê¶Ò@ד^Îÿ�iv?,²#)XÙzü¡¹EuÚŒô"ùµ æ·ŠÁÄw2=¼›QÈV ¸f!Ô€2H9è¶ñžyj×V÷þeºÛ¥ËJ°É±brÁ\¸(àç¦Óœb€1í|<ñ¿²ŽËAYtømÝ´•ˆ¼N#2/™SoBNæ%â©ê¹“ĺž¥—¡ßZ]ÜùÍgxÅ|ÃfLFÃr4r2ä0ýóýÓÉÝÔ|á&ÀÞê‘¶¶µ¸y-¥¤VeeQ·,C#Œãã"§‹ÆzÐÝ\%ÜŸcµ¥–í­äX6©ÁÛ)]®A=š�ÄŸÁÚÂø'SÒbÕÚêk»Imá³¹e[[o0ñ±ÄFSå©Âîcœœ§â &òÂÃÄ7—éÚnŸy¤[ÚæÒéÔÅ8’BIÄ8Zá²þ‹’ã·n/‰ŸO†þ M浕$‘dŠÒg ±•3a2w®KcéS\xçE°Mn]Fil­ô‹„·ži p¬ÌŠãgËó›¢äô=Àh>þÔQ†‰áÛ«(õ/·Ý4Rm³œy!H¢+Û¸»g€[ó½„|)}¢j6×—ðiÏpº-®5Ä.Í'™ |JUÔ¡9 ƒ8>ÿ�â•%®œú-ÚÞ=åÝœJËm+Æi‘çlm´±È9 ^ÖüLºˆlmî÷gÜY\ÎæYf‘^7„ò…Û#d•ãš�ç"ð ºlqÍa¡Mw ª×»9þØPrverH|~ðnQØb¨j_5kÈeH¬t%í.ã¶·k‰6XK0ˆ!‹÷G„13ƒ…ù¥lŸ@´ñ“&Ë[¿5¼ÔˆmðÌÑùŠAÇ*SæÜ8Çz–}jÂÚö[9euž$ŽFO%ÎVGظ a²ÜqœwÅ�q÷žÕnl¼I:Nms«YÏÚwiåÇ.æ ÁW,qód…ÆÀ1K7‚ïoìüE úNƒi6«e<fâ)iZi9RÌѩڭÏVè»Bc·©øªÖh´é]ÚßÙÛ\Ç=¼‹„šåa%s·wñá†FTõ«#ź1¿û\Ê“‹™m™k**ËbVRÅBÝÀ“†*N �ròøCYŸJÕ,N— ÇÖ§ey²]?”‘B°«Ç$c"ÜŒHzcæä¼Gáño¾…© ]˜me¹&4Šk‚éöuhÔy¨»mÎ�^8¯D²ø“áMM iºŒ·ÌÇig4® ã$ª¡!y1ùyë[Z®»c£¼Ý}¥¥ŸqŽ;{Y'bŽN�Ü2N"€,iŽ’iVn–f¶t aGÈTpééV«›¶ñ¾“=ºu½Œýª{U„YLò»DåX¬j…™FH)8$EMÿ� Ÿ‡ü™&þÐýÌVâæI|™6$g~›n1¸Á9ʑ׊�Þ¢¸mWâ~ƒÿ�…߭ìËk4¶ê–“H 8óUW1®ì ¶ÑÏZîh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ž«¦[ët–7&A•`ѶÖGV ¬§±  qXgÁQ¾£i©K®j²_ÛL²ý¡Œ¤ ®ŠŒ[B…–Qò€xNs‚6µ‹øô½òúI£`‰ŸÍ•K"pX3בõÄhþ<¹ÔîtئÖt8$’v‚[t‰žiØNÈ6(—ä ‚7÷˜“…çUðŶ±«Ç}wwtaSX½’ì˸ó7|»òv§FpzœÀ¾µ’ãÔ5CQi-^Í$ºtÝ O´°Bˆ¼åPîl¶TsÅVñ‹á¾Òá[»üù“í\© a2¢3«nBf' Àä’%Ö5ùl¼O¦Ø.­¦[Ar#" bi.. 9R¸Ç!_$í$y|%iå]-å北2FòI#‘v¶EeÁêr9<õ«WÚ7Úm•£]ÞG-“+ÛÞ$€ÎŽªS~XÄ«0;qȯ;ŸâSÙiÓ;TÐ @ºµÌ¨é“!‚ç "á¥GÝœŸ›5­ÿ� ÍÝߌNš—š2ik; ·¡•°„Iæù¢@ƒq!v•ÈÎ~`�: /Ág®A¬&­¨Ét« ˜¹ˆ‹“ Œ1|GÁÄ1³h1×5§Ò.uOkQÞXÝG£Ýé–ö†`ðùwVt#%À"m¹ÀèüýÒyoø»P’ é63hcNM2Ò9Vâi>Õp|°¬a Œ[= ¶võ®·^×.¬¼Gc¦Å«éVBåSdW4ÓÌìåp :áG€ÝÉÚHx2lѵ]F`.¤¼ŠI<ðLòyŒÈDcÅúç‡aÈÀ­ü8¶—wSÛ꺌QÜ3Éöuhü´•ÆEÊg$’pI\ó¶¹ Æ÷¯§xjÕµ-6÷P»Ñe¾š%CçK${?t£ÌáÈ2‚p~h˜à�TVoˆºÍ¿„î5‹ß K{¼µ¬vFiRP˜ÀÛŠí›å�“ÏÜÎ�ëσáÿ�„KOðêjÚŒpX´- Êù>v!pñƒ˜Ê¥SørvŒçœçÍðâÖ{y “^ÖLsCyŒÛò—R &ê»°Ûµe\|@º¸ñZiºï‡ÊMMtød• § j&nY”0/˜À�d‘Îx:£Æ¯sà]^·šÆ#~"[›§Ì–ö,ÈYË€Àá\lÁa‚Ã$s@çðd&àM«jm ê*jîˆ%î&dÄyRUBŸ,¦@¿‚RÚ$]{Vv³¿žþ9ìûŒ²‡œEŒ~öSŒìS\Ö¥×íô ;ýKD[iõ¦·3I’×QmÙÕÕA”ÞU1¹†ý¤€ߊ–Ê/ˆš*¼qïU´X£û²ç¶ ¿¦1ûáÞ2¾”±oðö Kx`‡ÄÊ$vpYmþh¡ghÃ~ëœeô ó“ÍIuà +ÓKþÕÔâ‚ÚÂm53æ¶” 1œÆG4�ãw““T<UªM·ÃºÄ  Io«:yú¿”鵤ãsyrãi$(ÔîǶrŒu Ý3Å[.,mõ‹m]D!çmr7¨'~«¨9Ûç¹ä©O‹ålê­ne&Ñl7·ùßêó»ÌýæÜìÝÎÜqSøwÂ0xru’ OP¹U±†Ác¹1X¡-åýÔS‘½¹Ï9úU/xž]2ÏàgFŽMNSÞ\FL%D!‘J>RÊ£ï¾9õÁµø‰¨\&›1ºÒ/¡Ò®c‡ËbÌ“Êa¹@|ÎLlnÆ09Í�usxYf"ŽúæÌÛêßÚÏlÌäo:²LÒõw©ôß[é×ðÏ[h%Š2͹٦K3¹îY•OçëÇuñ/SDºžßUðëÆ‘jsà ‰Ë¸´— ™rÒ'Ì�Nt™|S.™¯ëÒè“隊\êPΚd µÍÌokn Ñ2¶6 $©k|ÀÐo©xWLÕnç¹¹I|É’$}’»rêF:œÔ¯STðdZ¦«s~úΧNms>NÄû<†HÀÝ<9f9'9ÇLÍÚü@ÔbðÃjš¦¥á…g¿µ‚)-%‘¢D–@®¯¼®$DÜäÀSt:»u{â;í6ïWÒ®%·WÖÊWk¹ØÈØÎ~éUëÁ`  ÍàX¤°[µíbÞÖ)㞣xH‡d‚EUÝʇU#vHÚpH:–Z v:œ÷_Þˆ&•§6{×É7Þaòîç$à±\œã5Ï.­ª¶`‚K+{›»Ëÿ�2êþ6’$H%òãj²üÌ›X|ÝÎ Vðf©®‰áiEÔK§·†D·’™ÈÚ‚Ç #| ÿ�¹ƒÓ€¢Ç&­>¡£kö€¿h‚ RVQ…c•,+�@²,þ[Ø]‹Ëm{XŽì1c8h76åE}ÃÊÁÜ"‹<uŒ‚I=†r2( cQðTZ–¥=ëkZ¬&o².6„ªýžC$X-có–c’s“Û�.©i¨ÜxçJ– k´²Oº†[è^¨ò4L£kßòÄòòËÛv:j(—´ð.Ÿgm}f——­cvÈßdo+d["X“a ¸mT$æ5>¹²</²ñî¢ÖµH¤–4Yö4X™Ðado“†�»…8�‚8­ú(ÓÃV¶¾_ =ÅÅͳk-ó•ó EJ€J¨)Àã°ÎNM6×Ãò[êrjCQºY®=Ý´l¢ åT‚¥”áTaX (È=÷(  )<3 Ï„®ô®f/Vo´ÍÐÄÌìòíÜ�—nÇ�úóRéz é×ò]ɬêWÌñìÙrb ž2ØD\ž;ç!p+bŠ�æŸÁ°É6£1Õõ/:òõ/’@bÚU@€Çû¾›¦v@õ$š1èW^(Õío¡ÔI¹Ó-í^îYaavUæi€;À"|pª8`06ç³¢€9{oÇik E®j¿i†æ{˜îɃÌsn•1ål*ÌKr¹ðF�Éàø'‰sªê“ÅqÅŽISÊÁ”… Ì ‚ –Ç8àœôtP'¨ø=U^xƒY‘žÎ{)txæÛæqå`#Aò€8Î2I6eð|µÔŸÚšŠÏqqЙLA¢ž8Ö/1~Le‘@ ‚½pk£¢€9ɼo-¥ÄSÔQ®.¡¼š`ѳ¼ñ2™ê£n� ¹«h ªßZÞ¦£{cqo°‰- `¼r.§z62cNFǵè cGðü6¾ kÈôÙ,a³´K u2«$È™ØàqµIP[æÃ0é×fëIµ»Õ,µCý¢Ì:ÆU°|d0î2ªG¡�Õê(Ž›áìMq0×õ”–âHd‘Á€’a”Ë-ûŽN3É ^¼ðe…ö­5ô÷W†9§ûD–“Êi ¹¶c÷wsÁ»dcœôtP4Þv³ŠØø“[+Ê̇vÀ0ý_|aÿ�Ú­gF:ÊBŸÚWÖB2Iû# .©eb£.v"µ( lø6a-®«¨ÚÜ%ÍÄðψ´Bwó%ŒŒ©Bøl0b<Ux|§Ã%ùþÑÔš;Ø'‰ž<+,(•X&íþd’>I#.xÀP:Ê(›ŸÁÖ÷VzŒ:¦£4º™²»¸v|‘áÀà&Õ#Ì|mQ÷‰95ÐÂÆò¼¬ªÈàrS€O°ÚŸE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Ï [>¢n®oﮢûOÚÒÖfŒÇ·‚ |�…,@À㺠(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(8àŽ'•Ñ´­¹Èþ#€3õÀð¡`‰gyÂ5Ô+7rp>œŸÎ¤¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_DFSDal.jpg�����������������������������������������0000664�0000000�0000000�00000041553�15030617045�0023352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��÷ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+_ßÛé¶utα+*|‘´ŒY˜*€ª $’½Qÿ�„–Çþxj¿ø)ºÿ�ãtx—þApÿ�ØBËÿ�Jb­z�Èÿ�„–Çþxj¿ø)ºÿ�ãtÂKcÿ�<5_üÝñº×¢€2?á%±ÿ�ž¯þ n¿øÝð’Øÿ�Ï Wÿ�7_ünµè  øIl熫ÿ�‚›¯þ7Gü$¶?óÃUÿ�ÁM×ÿ�­z(#þ[ùáªÿ�à¦ëÿ�Ñÿ� -üðÕðSuÿ�Æë^Š�Èÿ�„–Çþxj¿ø)ºÿ�ãtÂKcÿ�<5_üÝñº×¢€2‰tï24tÔ"ó$H•¦Ó®#]ÌÁTd�d9=ë^²<Kÿ� ¸ì!eÿ�¥1V½�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�dx—þApÿ�ØBËÿ�Jb­zÇñ6ᣫ¬SKåÞZHË M#m[ˆÙˆUœ�Oµ/ü$¶?óÃUÿ�ÁM×ÿ� zù¤Ç‚x†áÍÄ#íÛF…T3SäºYƒá³œòŠÈÔ<[ã%Ómo-´vžûΓ~ž4«ÈüŒBçæ—vÙ@m£ aò6€@#¸ÿ�„–Çþxj¿ø)ºÿ�ãtÂKcÿ�<5_üÝñº�å.¼Yâ«!¡É.š³,𬚂Úi’lýühvSå´µ”‘åc±u]SÆÂF¿;¯'Žiíô‹Õdˆ_F€U .Á—æ …CÙ¯Eÿ�„–Çþxj¿ø)ºÿ�ãtÂKcÿ�<5_üÝñº�æt=w_kË ìå·¶i&Ý<Úm܆p.%P2ÌL»XÜ ~6â«x“íÿ�ð•êÿ�Ùÿ�ðý·ì6ßÙ¾OÚ¾Éö¬Ë»wü±Û'vï||Ù®¿þ[ùáªÿ�à¦ëÿ�Õ{/é:…ªÜÛ&§$LYC.—rA*JžDxê �s—Zÿ�‹'´½òíÞ Å”ÐM“q¹ {‚²¡Œ±,ÊŠ¶à•b0:_[Ômõè/­î`‰lüÛ+‹K !—æóP²UÚ‡¶KŽ+kþ[ùáªÿ�à¦ëÿ�Ñÿ� -üðÕðSuÿ�Æè„‹Zñ˜`‡ÃúN£q ÷¬÷zÂߺƒ±¸ic<�[”Žzãµðœú¤ÚmØÕÝÞê-Bê5-lÐæ1+ydn'r”ÚC0@ä‚Lßð’Øÿ�Ï Wÿ�7_ünøIl熫ÿ�‚›¯þ7@‰äý„,¿ô¦*×®gWÕàÔm­í­­u6•¯­çÓn@[ˆÙ‰f@��’{WM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@säKµÿ�®÷?úQ%tõÌ|=ÿ�‘.×þ»Üÿ�éD”ÓÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE‡Šmf ÐØêr vMñÙ»)*ÅN9Ÿÿ� $_ô Õÿ�ðOð£Â¿ò/Eÿ�]§ÿ�ѯ[4ÿ� $_ô Õÿ�ðOð£þH¿è«ÿ�à Ÿá[4P7ü$‘Ð3Wÿ�À?ÂøI"ÿ� f¯ÿ�€2…lÑ@ßð’Eÿ�@Í_ÿ��dÿ� ?á$‹þš¿þ�Éþ³E�cÂIý5ü“ü(ÿ�„’/újÿ�ø'øVÍÿ� $_ô Õÿ�ðOð£þH¿è«ÿ�à Ÿá[4P7ü$‘Ð3Wÿ�À?ÂøI"ÿ� f¯ÿ�€2…lÑ@ßð’Eÿ�@Í_ÿ��dÿ� ?á$‹þš¿þ�Éþ³E�cÂIý5ü“ü(ÿ�„’/újÿ�ø'øVÍÿ� $_ô Õÿ�ðOð£þH¿è«ÿ�à Ÿá[4P7ü$‘Ð3Wÿ�À?³£ñݤÊ^ÄǸ¨xôÉ ’Ôê«¿ò/Eÿ�]§ÿ�ѯ@á6‡þ€#ÿ�Á\ŸáGü&Ðÿ�ÐÄø+“ü+§¢€9øM¡ÿ� ˆÿ�ðW'øQÿ� ´?ô�ñþ äÿ� éè cþhèâ?üÉþ…àÿ�¶“á˜,îü=â%™%ˆd‡†•Øvô"½Š�æ?á6‡þ€#ÿ�Á\ŸáGü&Ðÿ�ÐÄø+“ü+§¢€9øM¡ÿ� ˆÿ�ðW'øQÿ� ´?ô�ñþ äÿ� éè cþhèâ?üÉþÂmý�<Gÿ�‚¹?ºz(˜ÿ�„Úú�xÿ�r…ð›Cÿ�@ÿ�à®O𮞊�æ?á6‡þ€#ÿ�Á\ŸáMoZFSÍѵø•Ýc&›"®æ`ª3îHu5‘â_ùÃÿ�a /ý)Š€ÿ� $_ô Õÿ�ðOð£þH¿è«ÿ�à Ÿá[4P7ü$‘Ð3Wÿ�À?ÂøI"ÿ� f¯ÿ�€2…lÑ@ßð’Eÿ�@Í_ÿ��dÿ� ?á$‹þš¿þ�Éþ³E�cÂIý5ü“ü(ÿ�„’/újÿ�ø'øVÍÿ� $_ô Õÿ�ðOð£þH¿è«ÿ�à Ÿá[4P7ü$‘Ð3Wÿ�À?ÂøI"ÿ� f¯ÿ�€2…lÑ@ßð’Eÿ�@Í_ÿ��dÿ� ?á$‹þš¿þ�Éþ³E�cÂIý5ü“ü*ÁªÚ›ˆTU‘¢e–2Œ¬§jåcxoýF¡ÿ�aý ÐÍQ@Q@Q@Q@Q@A{{o§XÜ^ÝÉå[[ÆÒË!íU'Žx=EqoÝ´¶Ó x¥C©î¤`Ê€9Ïk:v³á½úuÒ\¤W+²g�—f>»YOâ+¨®OáÏ„‚üä4âid•Çñ’çiÿ�¾BþUÖPEPEPEPEPEPEPEPEPEP·¶úuÅíÜžUµ¼m,²NÕQ’xç\÷€µ;YðÞý:é.R+‰•Ù3€K³Ÿ]¬§ñÑÜ[Åwm-´è)PÆê{©#ò®cáÏ„‚üä4âid•Çñ’çiÿ�¾BþTÖQE�QE�QE�QE�QE�QE�QE�W-ãJÑ4Ë1©ÞÅkæÞÛ22ž6~}”øWS\‡Ä_'tK+&U& B É=|½Ûdÿ�ÇŽ=…�uÍÄÏnŽE§d‘ÖŸF00( Š( Š( Š( Š( Š( Š( f ¥@2p3\Ÿ¼C¤k°êƒK¾Šë˽–Wòóò«»'ê®¶¸ÿ��x5<¶�ûn§-Äx=!Î#_Àgó Š( Š( Š( Š( Š( ªéÚ•ž­f·– qnÌÈ$N„«aøEG¬ÙÝê=Õ¥•ÚZ\L›wŒÈ¼Sœd`œö®0ü6ž8¯ìíõ{vÓ®5(5mï,Þå xÙY¾w›soÛ†'³61š�ô+‡ÿ�…qg»S_+Fû5íṴ́ÿ�e."ˆFˆb? ˜ãlà ƒÇ#h>“Oñ­Äë#géðÙµÓ ~è¸Iv‚X2†•NãÎáŒã€ÒŠ( Š( Š( Š( Š( Š( Š( ™4«LáŠF¥›b8<’O°æŸL˜JÐH°º¤¥HGuܱÁ###Û#ë@W‹4}n5{ ç}è’"½¤Ñ³ÆäuWPY90@ä+j¸¾]µ¦‡æ±iq&жÑY¸ÓŠ…Ž)"sÁ”íä -œ¸æ©Z|'{=E¯!¿ÒCsÊ”ÑÊ´l—/8ØDß("Cÿ�aTväÓ)’ʱ fAe_‘ ’�àœòzÉÀå÷ã–Æ{dÔíwËs5Ã\Ïe$Ò“$n€’Ó`2ù›²¡rcŒãåçGQøg.©§jVójt÷0ܽݮ•åÊŽŽ]˜9¶æ'�’B®@“@…YÚ¶¹§hbÕµ+ƒ\ζñ9™|Æû °.}[¸­Oágö–ŠšÛtظšqåixŽ"ðy DžoîÀ?¼ês Æ+¬Öt&ñ‚4Jxd†hÂ^m€/Pn;>l0åˆÆ3Þ€4ìîá¾µK›ræ'Rñ²=pÀ{ÔõŸ¢Y^éÚ-¥ž¡~/#ݼ¯3W'œuç“Z�QE�QE�QE�QEªøŸJÑob³¾’åf–&DVsJ¢5 3D!@,¹$Œdg¨­(na¸#ÉbêcYÕNÆVÎn‡§cÇ£8ºÎ‡ªßk¶º–Ÿ«[Yù“Z”–ÈÌÄJѳ0>b€G”˜È#®sž0o>Ã4oooq`¶¾^Gs§ùÇm£1]çÌ™ƒl'äãÞ€;ê+Êaø0M<ͪٴV‘Û£C „,íp%}“‚eÃýìÿ�àŽ+R÷ᤷZþ©©¥î”±ê-'o&”X2·’T1 Øhr0L’p7pߤ«#È 81¶Ó¹à ŽG##9A§×œÿ�­ck$'R°Q$Žø‹K¤E¢†3$h$ÂL<Êã….ÿ�/5­¦ø*m7ÇW~$ŠöÉRí¦ó­ã°(ì®±�<Ï3¨hCgo&I8¸�Þ³×´íBY"¶–G’+†¶‘ )In ‚£ô9<ŠÒ¬K=òÛź†°÷¶Ïmwo"Ù-J:,C7Äï ü£ '÷yÛ Š( Š( Š( Š(  M3Åš6±wökIçóKHª'´š�ì„«…2*†*A ã¶"•f…%@á]C�èQ€>ª@ ûšäl¼|PÕ,ï!‚âîîÞ§”_6àË¸È ­½@šA´mÈ<žõˆ~w¦N÷ºDæÆÖÚÔ­Îd,0ËßûáÂ\Ÿúç]¼€ze2YV^WU±…Øè O°¯5ÒþghšÍ‹êðÝ\jV+dn浑™�UPv¶»A\�T÷#Š[Ÿ…ÝiòÙÉ£lhîb‰¿±w4ÊÒ0Xó1Ù±¥b àü¨:L¨.®á³Dy‹áØ"„œ’}”ØŸ`3\UçÖ¼Mm[P´ ©Áq Øe³,÷H|ÏÞñˆþîÁëVÓÁÚ”> »ðå¶³kmçO+$ÐX²,PÉ!vˆ — |Ì †R� IÕìuÍ9/ôéŒÖ² !6 €ÈÈëÐö«Õ›¡Ø^iºx¶¼º¶œ£b!kjmãŠ0�TU.ÇsÞ´¨�¢Š(�®{Æ^.µð^Šš­í­ÍŹbe¶ ]r Ý‚Fzz÷®†¼ããPfðmŒ1êplØûwÍ­Ù½ ï@ÿ�ÂòðÞqö+ï¼ëþ¾ÏªŒŸùoÜt=ð2x¡>9xiöâÎøndQº{1÷ÆA9Ÿê„ðq^ ÛÚÀ¥[Ͷ¢HüËF6¶>G\)–LºŽQÀ#ƒƒ¤P˜òï]Ü•f"ñ™†éIf ²}ñÑ“‘Í�{7ü/o ì öC7ÿ�­´Îm<yýsÛ®9éÍ=¾8øm\©²¾$3¯deFO>B:Œx<W‹¬úıÃv•‘LmyÃ7Ë Sæv1ëʵ7}Ìjso/ª~V¢?*3È?¼ÈÌ廣ôâ€=©>9xiöâÎøndQº{1÷ÆA9Ÿê„ðqLÿ�…íá¾Ã¨`¦ÿ�õ¶™Àm§?®{uÇ=9¯c©;Þó1fË-árì7M‘æ`¹A‡^ŒœŽhYõ‰c†ì1+"˜Úó†o–§Ìì2"cוj�÷­â׆õ½f-L¶³Ï#CO4 ¯ ÇÊ r¿\ü§£'Šîëäv76W¶Û#c‹Ñ“åOï2#ó9nèý8¯jøe㻫õOëâq#·¹ž'C1 “îÿ�–ª9ëó/Íë@EPEPEPEPEPEPErú§Œ“JÖ%Óä².P)Y<åPAïÓóªßðŸEÿ�>#ÿ�âÿ��ìh®;þèçÄà\_ãGü'Ðÿ�ψÿ�À¸¿Æ€;+Žÿ�„úùñøøÒÿ�Â}üøü ‹üh°¢¸ïøO¡ÿ�Ÿÿ�qkhž'²Ö¥’ýÕÂså3†Ü=A�Û¢Š(�¢Š(�¢Š(�¢Š(�¢‘÷lm˜ÝŽ3Ó5ÀÚxîþâ!˜,Ä€ ®ÙI>ÿ�*‘úÐEq?ð˜ê?óÂÓþýÏÿ�ÄQÿ� Ž£Ÿø÷´ÿ�¾'ÿ�â(¶¢¸ŸøLuùáiÿ�~çÿ�â)?á1Ôç…§ýûŸÿ�ˆ ÞŠâá1Ôç…§ýûŸÿ�ˆ£þ-@míOÿ�ÄPmEghÚž³gçD r.°¿Þ½·¡ïZ4�QE�QE�U kS:6u©}–[”¶O6H¡Æòƒ–*RN;â¯Ò ŒƒÔ�Éð÷Š4oiÂûF¿Šê/â pñŸFSÊŸ­k×ßøBo…^ø¯ÃÇum+{g4`´q4€¯’FË ç‘ÏQ[zouM^Æ;Û¬g‚AñÃ;§­�z-Âÿ�ÂWâùò¶ÿ�Àkð£þ¿Ï•¯þ\…�wTW ÿ� _ˆ?çÊÛÿ�®?ÂøJüAÿ�>Vßø qþÝQ\/ü%~ ÿ�Ÿ+_ü¸ÿ� |^/Öc•ZçNI! óˆ ˜>=FáŽ(·¢¡´»‚úÒ;›iÈ7+ š€ (¢€ óÿ�Œ–ßx1F¯½ÜSϽK"Æ2¸íÇ dö¯@ €Ad ÐÇ$g· æù›“``BÛbÆÄè_oBx•=ÅW…-¡‰RXáò )lyd¢üþK·ÎÅUò‡*ÜW¥üHøzÞ»:ž™tk‡ À¿fft"7n«Ê6°ûÇC^q'Íf[8U\ÑíRØ„6ø›‘½z‡oÊ·-¹–ÕdÉ,ÆÝB+0ýã”û'ÜAò”ê­ó/‹ º¶áo9R±´HÌú& —nÒ/ûBµtËO´^uŸ‡‘c¿ÍÕÙ Ìg~Ÿ¿ýÓÇ4i  =ˆ³ðç™ö6 ]·nó°6}í¼cû¼ûPQ·³òÂ…ânå@7Gœ’ì™cqS•n)ÞU¹m̶«&If6êY‡ï§Ù>â”§Uo™x­Ùlü8.eËÃ|û �ÖXŒÆÜ/Ý?Äxâ› Ÿ‡MÄA¬¼2W̳Îíe€ÁS¿'Ëà÷¿º}h a·VÜ-ã*V6‰¡ÿ�DÁ`2íÚEÿ�hS¢H hÞEòÈ)4 #í r¸µK¸ÄoÕ1µ¸­'´ÐžÄYøsÌûF®Û·yØ>öÞ1ýÞ}ªÔ¶~2eá¾}Ð�k,Fcn—ÈîŸâ<q@ÁðßâøŽÒ5YPk0§•n”¸Ê¸‘s‡\c<އ_3h6Ú*x›Gk[] '†šQ­µ3$€’7m]ƒ$Ÿ¼3òž9¯¦h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Í|P¡üUz2GË ~Ñœq“ü'Ѻ€xjÇ·ˆB<Ó“È fgAùÆî+{ÅP2x–êWPáFF#'h1ø—ûî9íXsÛ‰©pÚ� 6Oaž„ãîŸâu í·óÖûþÿ�ür¶Ýÿ�ÏYÿ�ïûÿ�ñÊ-ã‰ÿ�w"EæB®z€!lÜóš±öH?çšßýÏ@þÛwÿ�=gÿ�¿ïÿ�Ç(ûmßüõŸþÿ�¿ÿ�«dƒþy§ýñÿ�Üô}’ùæŸ÷Çÿ�sжÝÿ�ÏYÿ�ïûÿ�ñÊoÚîÄÑ̒ʳDÛ£ÈÌTûeÈ«_dƒþy§ýñÿ�Üô}’ùæŸ÷Çÿ�sÐyáÏÇ­Û˜å ô@y±ÁÞ_oåùgr¼¢8šÚxîlßȸˆåC�> @2=«Ðt-r-fÔ’WQñ4<åO¨Ïc@ÔU-WWÓôK?¶jwqZ[oT3Jp žOAõ5=¥å­ýºÜYÜÃq }Ù!pê~„q@QE�QE�W‹Cl“YÂÊ8RÙÀ`qÔãÛø—®0ý{MyµžÐyQ–xJ£®0Áº¨'׺?pqÒ€(ïU%d[tqÔOÌ|¼Š<Ƚm¿ï”ÿ�âjÌ™͉¶²ÿ�t”gž\ýåÏÊy¹Ÿhrù¹0ýçÓ™è+Ì‹ÖÛþùOþ&2/[oûå?øšÚòßÒoüÿ�Ñå¿¤ßøÿ�ÿ�  _2/[oûå?øš<Ƚm¿ï”ÿ�âkkËI¿ñÿ�þ?G–þ“ãÿ�ü~€3´ýRM*ù/-d€:Œ2�‘{ƒ€+Õ4VÛX°K»g[†^èÝÁ¯<òßÒoüÿ�Ô¶WzE÷ÚíØ6ð‘*û“#ŽÆ€=2Š«§jÚ¥”wv²oÿ�5=ÁZ Š( Š(  È¥{õ¶å¢×‹]XMá«÷Õô«ušÂR íˆE“nå¤[ëǧQϸøžÎkÿ�ÝÛÛ¡yX+*ƒÉÚÁŽ=ð+ΉR›ƒ)R„çˆãÓûê9Só/VÓP·¿´ŽêÖ+ianWXãÁ÷î§óüúÁÿ�~£ÿ�ãuÏ]Esá]F]NÂ'Ò¦ôË ìLLy2(F\¶9ë‡õÎ:‹MNÖúÒ+«eÁ*†GW“àM�AæùõƒþýGÿ�ÆèóüúÁÿ�~£ÿ�ãuwí ÿ�<Oý÷'ÿ�$Ñö„ÿ�ž'þû“ÿ�’h—˜?çÖûõÿ�£Ìóëýúÿ�Õß´'üñ?÷ÜŸü“GÚþxŸûîOþI èšôÚ%Ùo,µ”§3D¸àð7( �#¸ï^—o<WVñω"‘C+„W˜ý¡?ç‰ÿ�¾äÿ�äš¹¡ëߨw%Óea¹F?px”yŽH=Çâ=(Ѩ¦Ç"KÉ«£�ÊÊr=4ê�(¢Š�Žx!º·’Þâ$–T¤‘È¡•ÔŒAà‚;WÍÿ�¼/„®ÍÕžé4»– nç%âl¦ÈKíÚì~¸[=þ”ªº–g«é·uü =¥Â剺2Ÿ§#ê9ón‘{¨­¾žóYP·ËÒÕ€Ägn8çÃýáÍ{¨ÿ�e°ûf³·ì,0tµÆ>Ñœg3Î}x¯o‡á¯† HÖ;{õˆÂãUºØ0˜Äœm=;RŸ†¾1ùfÚÿ�aM›µn±·;±þ³¦yÇ­�xÔ×Ú™º˜›Ýs?h¼':Bƒ“Ïz‘ÔvÓ`¾ÔÅÌ$^ë`ù–Æ’¤ð‡o{÷«ÚOï ³0ê‹3uk¾K 1ÿ�[Üp}iß +X5�ABÕnø(0¿ò×°éé@÷ºö[¶k;~ÂÃK\cíÆqÓ<ç׊·5ö¦n¦&÷\ÏÚ/ ΠäÄ3ÆÞ¤u‡5ì§á¯…Ì~Y¶¿ØSfßí[¬mÎì¬éžqëN?¼6ÌXè,ÌIÕ®ù,0ÇýoqÁõ Ñîï¤×ô¤–ëTxÍþ—¹fÓ–48<e€ã½z×ÑuÌ[|?ðå¥Ô71[]™!’9ÌÔndPÑýÂU¤ íí‘]=�QE�QE�QE�QE�QE�PÕô¨u{?&Bc‘Nè¦_½v#ü+Îom&±¸–Þæ(ã‘>ú ì(OÞ±1ê(ÜŒt¯U¬ícIVµ »Ë¸ˆ–‚`2Pÿ�PzÞ€<£S±µÔ„0ßF²ÀnapåWvÒ>vC}Ç0zŠgü!þÿ�ŸMÿ�îÿ�øªÔšÚk-NÚ3ÇqáLq v\‚FÕ<:žJç§ ö­ï´jÜÕÿ�ð[ �q¿ð‡ø[þ}4ü»ÿ�â¨ÿ�„?Âßóé à}ßÿ�]—Ú5îjÿ�ø-†´jÜÕÿ�ð[ �qËá/ ¡È³ð÷ã{v™§ÿ�Â+áùóðïþÝußhÔ?¹«ÿ�à¶>ѨsWÿ�Ál4È x`Œ/cþ¾î¿ÆŸ£øÂ7ž$µ·}G–ŠBËk$¬2Üz×YöCûš¿þ a§iR\?‹l|ñv“.>Ñl‘ztÛÖ€!Ôþx+Q²6ÑiKc¹”´¶‡kväç�3ÆkgÃ>ðׄ2Ú6˜Jà 33;·âÄãðÅt”PEPEPX~ ÐWT„Ï ¼EÚ7p²®yGõž‡‘[”P“²¸“8˜?˜Tƒ‚áÀÆÓþ؃zÆðÃÇ/‰üL’ÞÇ i%·–­fn×NÞ>AžqïƒÈ¯Oñ‡…úµå¤jnÂâHÏ p£±=˜ vþ^má¹oø·ìËq&&¶ÞVï쬒8aŽ[¨>àúÐKåÚÐRßÿ�ýj<»Oú [ÿ�àƒÿ�­W|­Kþ}ïðt?Â+Rÿ�Ÿ{ßüð  ^]§ý-ÿ�ðAÿ�֣˴ÿ� ¥¿þ?úÕwÊÔ¿çÞ÷ÿ�Cü(òµ/ù÷½ÿ�ÁÐÿ� �¥åÚÐRßÿ�ýj<»Oú [ÿ�àƒÿ�­W|­Kþ}ïðt?Â+Rÿ�Ÿ{ßüð  OmîÇWlaò³Âÿ�o¥tµÎø<8°¾+ûl™ '˜z/ñwú×E@Q@Q@r^%ðîLš•Š6âCÏ c’Gü´OöÇqч¿^¶Š�ò-£nTÆP¯8ÈB¤õöBqþãzU­"dÓ"@Ž€F’“cæ?ÇŽÈ­ïè&ÍŸQ²Vùg™dÂHåÔwSüKÐÓHûAÓ"ò„Û2øòµo%~ñ臑ýz÷  ü»I?ðDŸáG—oé'þ“ü*|]ÿ�vïÿ�ÂŒ]ÿ�vïÿ�€ òíý$ÿ�Á…]¿¤Ÿø"Oð©ñwýÛ¿ü 1wýÛ¿ü �ƒË·ô“ÿ�IþñÛýž\ 3°ÿ�ÌW·®8úÕ¼]ÿ�vïÿ�£¸f—+u‡9×vôïô ÏBUOéÁT(û4g�c’ šÐª'ü€4ïúõ‹ÿ�A~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3u= ËVšÞk„a, •’6*Ät‘Î)ŸðŽéßݺÿ�ÀÉ¿øªÕ¢€2¿áÓ¿»uÿ�“ñTÂ;§vëÿ�&ÿ�â«VŠ�Êÿ�„wNþí×þMÿ�ÅQÿ�îýÛ¯ü ›ÿ�Š­Z(+þÝ;û·_ø7ÿ�R[hv—kurùÊ¥U¤žGÀ=~óÑ¢€ (¢€ (¢€ (¢€ (¢€ óíHÓ5?ˆž5k»x¦qqhSqíöhóÏùW ×˜ü:ð[x{âoŒdA%ÊÇh{qæ°MÈ?à4Úÿ�Â'¡cÙþ¿ãGü"šý!ýƶh  oøE4/úCÛ×ühÿ�„SBÿ� d=ýƶh  oøE4,çû2^ÿ�ãGü"z?äëþ5³E�W²°µÓ ò- HbÜ[jôÉ«Q@Q@Q@Q@f§‡ôdR•dA$üÐ)êsÜú«JŠ�ÏþÁÑÿ�ècÿ�€éþ`èÿ�ô ±ÿ�Àtÿ� Т€3ÿ�°túØÿ�à:…Ø:?ýlð?´(  ÿ�ìþ6?øŸáGöÿ�@›üOð­ (±Æ‘F±ÆŠˆ *ªŒ�@:Š(�¢Š( ¥˜€�É'µcÙø«G»Ó ÷‘ÚAö–µ?la «ØC§©U½cMÆ“s§µÔöËp»X žGά¸# ä ®n?‡m©¾]?P¿°µ¼»‚ðÚZ, RDÊÈQ|¯—”B}vó@?ð—xkÊyá"Ò|´wûlxQÇS»¼¿÷Ðõ«Ñêºt×gŠþÕçÂ7–³)l0%N3žB’=@>•—ÿ�¬hÔ%:¥ùûuâÝÊŸºÚc…»û»U:äüƒž¹«¢øE4­bÖr¨Ði¶ØYHd-,‘¨�FС—æ�Œä;t ãÇv×—Öoa¨}¦Òö+6Œ,`ÈÒºø+™¢Ï9ÆG5¥ÿ� _‡»Ïý¿¥y(Ê­'Û#Ú¥‹� Î%÷O¡ªÒx?M¸žâk§žæIµ8µEi ƒ ш„ڣåÛŒ’3Ï5œÿ�í åÝÄZÖ­ ÜΓ´(`(¬—-r˜Ý8Èç’xlŒ`å×|7k-˜þÖ²–Úâo%®â»„Ãnæ6‘¿åܶðr~µ§uâÅÊ]ë}»„Åe¹D>Yà?'îûô®nßᥪÚyZî°Ò`·“ý1¤I* ÿ�SƒòÏ ÉœƒÔKqð¿B™¦1IsneÓ—MfE…Ýbù+¼lÊJeN=3ƒ@}µÕ½ì =­ÄSÂÄ$NIƒÈã‚úŠš™ 4PGJò²¨S#ãs:œ�2}€ú�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Ìñ«.‡á½KVŠÙnZÊÙî -/–Pna»�㎿f'Šä¶¸–ËW³ŠÎú9­Sl2¼ñ2ÜHcŒ‡‚2ÈãæU�[z¦™i¬é—:môm%¥ÊåE‘²ž£*AÁèyäqYQøkÃÿ�e–!æH‘\Ç<ò=ü¯'› žd…Ë¿) ǃŠ�¬>"x`É"5íÄ~T‹-…Â,ldhÆædFôeÉ dÖ‘~#øRMZ=Mä°–I"Y£µ™ÀdRî •‚Üã€O@iÃÏ Ln­®¤0óѵ+–W"C0ܾf Þìü÷b{ÒK០j6ÖÚÊÓ¥²JñZ Rbê„_&â ž%F2E�[¸ñ¦oyöwšXÂM,RÍ5¬ñĦ8Ýßl†=Œ@¸Ü8œŒÜøëÃÖVKwsus&W„ﱜ2:§˜Á×fäù>˜”Ðfšþðç›çÜ[ÜJÇå&çPž@ÙF‹;r²8çûíÜšu×|?{d,îm®e‡Ì’FÝ>çgÊbí¿sŸ/äù‰Âœ �èè¨íàKkh­ã.R$¦IÛ�`e˜’ÇÜ’Oz’€ (¢€ (¢€ (¢€ (¢€ Èñ&­u¢é‘ÝYÙÃw+ÝAmåÍpaPe‘bpFèιã¦~‡^³õ"ÃZ°Úˆ”Û¤‹>c¸’¬‡r¶äe<^ €0¢ñåœ_[êЛ+:)d½XÖYÕD²2LJ]³#Œ¹\d‹ ãÿ� 4=ô°Åo³HóÙÍ ˆäÆô*ä)Q’ sHÞ ðÍÕ¨L’Eso%¾å¿›÷Ñˇ|°|¹m‹–É$(À¤OxjHØýšâxæIF$Ô.$R&`òÈ™U²?ˆך�Koˆ~»hÄŒŽ%€Ü#‹I¶²mwÈm˜Î"—Œç1°ÆAù¼s£ÁsevŸl†I`GÓîDÒl*Hü¬¶$÷Šöþð–·:ê6·3_InÉÚ!Ö'«"¶ÐXJyÛ3õê$9Îã›øÃŒÖ%à¹Z,‘ÚÈ5 …‘<Â^B¬;›œ¶rGãŠ�µ‹´KZÛL†íÞêê$š [ɲDtgR$Û°åQÈçøÐÖÝ` ÿ�hÚß­¬ñÜZD]äÈ‘ˆ•–08\wÆvÎrs¿@Q@Q@Q@Q@r:oŒo&š©éÛ[Ü]]YÃ%­Ë\±–Ü˸òÔò!»³€0 ®º¹ë øM¼d·YÅˬ®«&¡4Ž‚FýãÆÉBY¹eÁÉëÍ�Wâ‹8åžàÜ][EqAcs(u’6‘v0æÊ£ã€~Fà@Ž/‰¾¸ißV7‰™`µšB¤áPžK(ö,äR§|3çÚ¼QÝ$¶±Ç¹‹S¸S­‰:(‘×þÙêj°ð‡ƒ4{dÓCµ”/5¹KsªÍ2†ýÎÌûÅ£ã±AÔ¯�µèÖZx»Y¦•ÇíñºZNñù%IWwHÛbœ£ v©§ñŽ…möã-Ü¡lRI'ak)c`²!pá€Ûs·¾*¼¾ðìÚm¶Ÿ%µÓZ[@ÖÑEý¡q…ƒ¿‘µ™yÎíqR¿ƒ´ ¨o3o+ÅÇ./%Ã$Œ@¸”9�¶Ünïš�ÕÓ5;M^Á/l¤g™Ð£`ÈÅ`!”‚íVꆓ£YhvÒÛØ,˳<ì%¸’c½ÎX娑““ÆI=I«ô�QE�QE�QE�W#âMoµýÇáïµÀ×6¡r<» ´°€Û˜3czœ�x¿×Q@a¨x‹Xµð•Þª|GºíX-ì.`KpnayÀoõŠpGeì„’qšÔðâxøø’×'+¤ˆ÷~M»;›i•ÕY1³;¡ç¥wtPEPEPEPEPEPEPEPEPW&ám&6©Ü„cÊÅP¾8 @$ ã$ô5ç à_-·ˆìšúÖ[]sN"c%ÉWŽø¡RãË…Œ çæ!rs’+Ó( >ÁºÔZ鸎_.Ê{ô¹¹T×.ؾȰ´|/ÌDƒxrA!@ù{Eyàß\ÛéÒG}wÖ¢þ5ŸûRãt+<é$G~ÜÌ#T ±ð­ÏèÔP›Ià¿Éý¡m5ê\ÙµÌ~v¯s¼yW0å;3„È'$<žV]3Áþ*µ½Žkíjâÿ�ý<Ë!“XDX¬ió´`FÎPrsŠôJ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬¯Ùꆚ,¬8Äòª\ÊÎ$ùÊެØãk œ‘Z´Pé~ ×`ÓtM?PšÞXt}IÞ†þhݬÚ9P+E×zã�Œ¨'3x[Â:Þ A} x Ò¡µ†8µ«¢¦tWV|ïLì(Áõå°xʼnÊkȹ¸µQ-Ü:¥Îd™lÒJm>lbC&w6FkUü-âK½/K[›˜#Ô,5K‹˜å]Fy6Ã*Ìæ( 4fUX`¬xÈ Ew´P០xJ¼Ó$Ôõ;‹å…[í>³<¼á±µh¬ þó;G<ïh¢€ (¢€ (¢€ (¢€ (¢€ á/ü9≼aiâ;k‹%–Þåáû4—ìJŒˆ7ù…€l*ã9㻢€<Æçáþ»s:á#¸ÛªG ßÛQ˜þÑ2É œ)åpC/F8bIé§©xKY¾ƒS…& a,0É«\¾Ù¡œË.©hƒ (däl îè <³ðŸ‹-u}>âMSí™ò5kŸ•Òª|§~XpÇi-�'‹ ûx¶ÎÞÖÖeò-´Ø­RÖßYš·¦dˆ‹a±À©\í�€ zSK‚k]*Ò ’ ñ‹)Y^A¿6ÉfÏ,sëV袀 (¢€ dÞa‚A ¢K´ìgRÊ­Ž �Œl­>™,QÜBðÍIŠUÑÔe<Aê(Ïì|q«AáøõU-.Z}ë#ìåMº€„«£Ëóq&AÜ»„n�Íi[|D´¹¼{s¢êÑîb¶–Wl¤¸{e'’G›/�ž3Œs[øcÃöÖ3ØÁ¡i‘Z\cÎ-#XäÇMÊãP¯ƒ|.’ Ãz:¸èÂÆ G;ºíõçë@ûüTÒÖÂKõѵdzI¥ˆNm‘ArHÎ…Ün]±HxçåÁ�¶©âÕÓõAaýŸyÿ�ñ}«Ï›$i¦Ur3*©`¤)=ñƒvo ør๛ÃúT…ݤmöqÎà Ç#’G÷§ ø}¦Šc¡i†X•76‘å1°ŽàcÓP;sñCLµ´K—Òuf…âʰó ŽYVLy A)ÇÞù0@$¯ã_TÐôUÕ4¸ ºX$V¸¶t&IaÏÌ"!€ÞHÎAÁ«2xKÃr†x{IpÎÒÖQœ³ 3têGSÞ¯®b°ÛB¶Vâ+UÛn‚%ÛÛ·1ò¼qÛŠ�ƒG¼}GDµ½6Ó›ˆ„©-º,†’Gâ3íT<;©êzƒÝ[ê"ÑntùÚÚëÈF ï…tdË¡ ç–Æx«¶~Ò´ë¨n,l-íZÞ5·ŒFŠŒÁ˜\YAüñÔæ)<-¡=¦¡lšMœ1ê#ý3È…ciù',TO'ž ’A€(ø§YÔôÉm-t¯±½íéòí⸘dÉ#Ãlh¼ŸR@ÈÈÏC‚[xäYEu >ëduxª:—‡´MjD“UÑôûé#Q®­’R£Ð¯Åvð¤0ƑŅDEUG��: �}Q@Q@Q@Q@Q@Q@>6ÓæÕ¼­iöÖ_l¹¹³’(aÊ ÈFåÈ †Î{qÍs‘hÚ­¨–mC“K³–úÀ¦–¿e!V9KO+.â‹”+‡vèÔñ“T®¾"ëM½¬úœÇöûØå{Kv>m½·Ÿ¼¦é�GFHbr’¥ñÇLÑ"ÕdÒõ)`yî­Ù"—­Ä¦MÙ b Á9± P4[âj=ÓDšœŒ%FµYÿ�³¼²¿h2É´†ÿ�Pb?/;ÃsŒfi×âRxJÇËžömo̧) Œ`/”ÞZ°.ÊG›°eH% dŠ¿yñK-qã›J»K x. ìm~}»D-ßÌ$Kµ£1Ü)‚ùíÔ òüB°MJúÎ-'WœYÝÅg%Â[ªÂey0Ù€8g@G^s‚2h"äxæãSóíí/” e–¾û †ÐL�™v‰Kn9ûuMOþö*fÿ�i}¬\LSÍû˜bò?v%þ ™ð>OùgœüØ®›]Õ5M>ÆÞúm sOg‚æ"ò#Mp‘¾Y_o ýyHª’øÞ 5hï,¯%¼Ñ 3_,  ¡Œ‘†ºC1�œüŒ:Ž@:{ykh¥’Ý4R-#•%I8$zRWmñO¸×áÐÆ•¬. òæŒ[¬‚×îÒ²3(S½yã<â» �(¢Š�(¢Š�(¢Š�(¢Š�+‘ñ¾‘ý©u HÞþÛ†ÒòIg‹F`‘1‰]AË´mÿ��ÏP+KÅz–£¤é\ébÕ®öÚßeÒ±VÌ‘uR?89ç§C\Ú|Gk(õK½SO¸k[{Ùm£KhUdˆÇh.]dß Øó�+ÁÙþР W:_,G‹MKÐ±Ç ˜Û›7û:=Ül"V›æ%`Þ§))½1ÄæÐä~ÛóAhZiã±vIqp"Up¬îÊï#ø¹·õˆ–šv¡©ZI¢êÒ9&–i#òâXØfPH <mÓ<ãª×¿Ãú†µ»i;[Ú^-®m!dÿ�GI„EL…Œ˜fçN ñ@ |BQ¼—U–ÑÑ–)cM=J !‘Kq¸‹•ÃÀ1ç¡4^EãõÖ[(¯/¦À7¹±fûXÜv»`Ýó`É;�ºʼn­_‹Hô]ZÕÄÜHo"Ž#9.å/¼Ñ:ão\‡4˽KY¶ñ%¦œ¯e"Ooswµ`mû"–� ŠJÜœ ÀqŒÐ=6OG㫵¼‚öMF™ai ¨H€XŒmò!¼õç'<¼k°®E~ Ùͦé÷ÖšF©sô­I¬²,FFVß �€®<20ôÍ øçMñeÝÄ:e®£äø»šØ¤d)گ݆áqøÐMEPEPEPEP^i?†¯ˆµ‹» Ëew6«Ü¼-lÈXâ"ü剤¸W]¿¼ÜÜæ¯ø³Æχ®¼@a‚Î[K 2+¸\ÂìÑÈþp@æBaÆF6ïRr"íÏ­tùuKk½:ý®4¸&šàÆ‘‘aX]Ê&q¶áƒŒŽ£ŸŠ/ˆˤÂ#Õ ³K;Xîã³]8C ˜Æ ä`tûøÚ)f?ä…¥ 42 !A 6º÷f³³ü¿¼ç�(OFÅjßü@‘´=Rk 2êÎöÖÆöî¨GE!µp’¡ÊNC3Àç œS'Ä‹5„ÑÓEÖŸR,Ë-´vèæÜ€¤\ zàî g’(®šÞ4’æ¿ZŽþÒŒÊtñ½CHbsÙr¦%ÀÚ¡'޹ÚL ð´ñ\Eq¥˜Éq !Ü‚‚Û»ÌßÇ÷;Wm¦jóx‡ÃðjZtf.’9`7¨¯º6 Û¶Æÿ�Ý$`r:c®,3šÎÍo5x„–óê6›8q±âšd]ûœçx�ÀûÇÅ�lxZMaôvMrˆï#¸™î ;¥‹y1¹ò‰Pv§ ñŒµ\aø“¦Ek{qw¦êv«kï‰62ù3dTíȨç�ç##8é´Eum.ÞýmníËŸ"ò±óŒ2ž‡Š�»EPEPEPEPEPEPEPEPEPEPEPEPEPôm./±E¦Ù¥¦Xù „ËåÆ9 ÀúäúÕOøD<3öe¶ÿ�„wIòÙÖ/±G´3�¬@ÛŒ�'¸­kz¬z‡{«MÓÃg O"@¹Eb78={U<Ufîð^[ͧ^$°Ämo$‰™X„*C”lí~‰;�O"xGÃQìòü;¤¯–ÁÓm”ck��#åàà}…Ksá½ òygºÑtéæ™•¥’[Tfr¿t’G$vÏJŠ/xjy–|E¤É+8Q/c,Xç �n¼==üSáèíaº}{K[y™’)Zò0ŽÃ¨Sœ23Š�³¨èúf®±.§¦ÙÞˆ›tbæ“czÀàÖ}ï…­ïôÍbÊ{ëÓýªÓO1"9ýÚ¸ 8Çž˜œøŸDþÒrj¶^ $.âßUfmÊ[wN@ޏÀ$#x«Ã©k ÓëÚZÛÎÅb”ÞFFBœà‘‘œzÐÙøgE²ŠÉbÒìwÙäÁ/ÙcVF#æaµ@V=öZÔQ@Q@Q@Q@Q@îì,õ/m ¹HäYQfŒ8Wg¡E}£éšœ- þ›gwH%dž‘K´1uÇô«µ‘­ëߨ²éñ.™{-ôÍKjbp&˜ê>ê9ÿ�€ý2ü!^8ÿ�ŠcEà?Ð"àcÝô�}*ÛxwDyÞwÑ´öšH¼‡Ú¡fØN9\�1Ó¨§|?å۽Ƨkf&Gm·—ÂÈQü¶VV`s¼2ðÊ‘ž™µŠ<=-¤×QëºcÛA·Î™nã)ﻸç=³Ö€'²Ð´6s=†•ck1ŒDd‚ݶ‹3´`qÓŠeÖƒ¦ÜÝË}ö8"Ôž&‰uáAq*GÊä0ª?øJ|=›ý½¥æÙwN>Ùî— e¹ùFH÷"˜<YáóqägNXŠ9¼‹dÉPìä…ÈãŒó€ º‡ƒ4ÝN×Jµ»’Ym´ûƒra‘"t¹‘ƒiC!;Üü»ybF01±m¥iÖwrÝÚØZÁs2ªÉ4Pª»¨è $ÔËmgK¼¿šÂ×R³žò ùÖñN­$x8;”Œ5z€ (¢€ (¢€ (¢€ (¢€*ÿ�fX}¢æãì6Þ}Òî$ò—tʹÆX�qƒTï|/áýJíîï´-2êåÆií#waŒrÄdñÇÒµ«™“ƶvúå½å…õ¥­ÚÙͨOå u‘•rD…€"DÁ*ÌÁ  öþðí¤%¶¥ÂÑÙÆ¥ƒ 0$AZQá,PÄ4-0Gï)¤xpÃmã=ñÖ¡ÿ�„ÇÉFã]Òí¤’›ÊšúÁYwÃFÞr r Õ™üI¡[móõ­:-ЉǙt‹˜GäýÓ‘ÏJ�µo§YZX k;xl•J xâUŒ)ê6ŒŸÎ³ÓÃ]¹´ŽÊ±³·”Ìlí"H¡•ò¥YÔ/U*¤G#œŽ)ãÅ>N5Ý3÷ñ´°ÿ�¥ÇûÄ\îeç6¶HéƒéM¶ñVƒsf÷#XÓÑ"‰%œÈ’®ÝåXœŽsƒØš�ƒFðv“£ÛßGä­ëßË,—S]A’o1‹2±T]Ë–88Î:b¶mmmìmcµ´·ŠÞÞ%ÛQ DAè�à K;Û]BÑ.¬®a¹¶“;&†@èØ88#ƒÈ"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  Þ•»¡Þé3O4ÞBÐHð† ÀŽFGNõ”Þ‚hÜÜjºŒ÷2\[O-Ô†/2Aù‘F@Œ(@ÜáTO<šé( o…ú}Â^G6·«¼WŒ­p‡ìà9[‡¸ˆr?y#žàã°Ä’|2Ò[ÖÚw×¶öp4­þ¼m!’„–ÄX'c°Î2s’I�×kE�r3ü?µ½%oµ­Zê]šhUž)"s„‰pYf’0I#Ð�ÝGáíž©§½¥Ö¯ª1–igž``3½¹·9ýÖш‰Q´S“ÍvPvñ46ÑDóI;¢idÛºBÞ;@=x�zRQE�QE�QE�QE�QE�‘­è?ÛRéò®§{a-ŒÍ<Mj"9rO˜Œ>ë¸ÿ�}1¯E�rWŸìn†ÍKR¶@”4M½ÌépÎåãbY¥‰öã§'4½&M9,n5-Fæà¶‚!2Û°E€¹‹åò¶¶<ÇplƒÎO5×jð­þÝayŒ¶ò ‰%ò™ò¤mü$ôÏnµçú~›â6ê8ôŸM£i’n ’X­ÔŽ1‚ë¸ÄP å—r8äkþÍšê^C¬jp»†#KmŠ Â *˜HE¼8ô)îrë߇v7úƒ^ÜjÚ³Í&œº\¤Éó-†w#9rIfÎìô#¥bjÖ2Ô,nc{ o$v7šyº6 ÚÈ—ä¡PŠƒ»Ì2{u~ O'‡£ÿ�„šw›R.K—†(ÊŽ8ÄNÊFsƒÁ#�Ðm¼! ¯Šåñ ꚃ\Jò³ÀÞW”D‰â=رóg)É99訢€ (¢€ (¢€ (¢€ (¢€ ædðd2ê7—rk›%ÕÚÞµ¹0ùi2ª,n?w¸ìòã 1#* ×ME�q‘|9´‚ãNž oV‰ôø-à·À·`å3º#Ÿ–isþ÷l @>è‹ Æ·w¡ßN]5¦)nÒyA<±‡1§aÚvàÉ滪(—Ó¼ºeÏŸ½«ß<„ Ò—cœD2ÈîÈô �(Ù|1Òì4)4hu=Sì†Æk÷4E¡ŠVV—iòù.Td¶qü;k¶¢€34-t+)mRöêíd¹–çuÏ—•i»±Tcs1éüGœ` :( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_SDam.jpg�������������������������������������������0000664�0000000�0000000�00000043171�15030617045�0023137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�! "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )•óµÁÁÁèih�¢‘™W˜ œ ž¦–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Áñ>–5«k{Uû<ïÂåìnî®R×åËÐʹq[Õ“©øoKÕîÒîê)ÅÊGå¬Ö÷RÀá3»£e8Ïnôçþ Ó4[ïZè>Ó£±ÄZÀŠ[uTÀÑ·úA 2Q/zbºGÓtŸø¯F¶Ð­`°iD¯}ª„ŒÛ,móº3æy@1å†zÖ׃4;ϰn·¸„Ø+-©µ½šÜÅ»ï`ÆëÉîO&­ÙøwI°µ¹··³U[¥ÛpìÌòL1É,ÜÔÐ0<;¢Åâ;fÕtëkË‹Ûö»Óµm¡¥Ó,LÇU¶ãå*œ€q»»¬m7º>“r—–ò‡‰JD%¹–U…OF®Ä ÿ�t Ù Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ëUø™5ö­.…àm3ûsS‰¶ÏpÇm¥·ûÏü]�bOumGÄ!µøáû‡‚{”óµkÈÇ6¶Þ€ÿ�y³úÞ»_ø{LðÆ—¤Û,ÑßyÏvcÝ­�q)àïˆz·ï5Ÿ}‡#þ=ô«@ª¹ÿ�làþ`Ó¿áYëÿ�ôR|Eÿ�}ñ¯H¢€<ßþž¿ÿ�E'Ä_÷Ðÿ�?áYëÿ�ôR|Eÿ�}ñ¯H¢€<ßþž¿ÿ�E'Ä_÷Ðÿ�?áYëÿ�ôR|Eÿ�}ñ¯H¯ƒÆž"kýBÄx¦uÕWÄ3ištW–p‹9£”#¬aƒá»0$íç4Ô³×ÿ�è¤ø‹þúãGü+=þŠOˆ¿ï¡þ4k_-ôkÍcv‡}=†™+[Ëw9Q0 B±Ù±T– ýÙþI¬|Q»Ñl|I%LJãk¯›?µB·ÿ�+‹Ž›Ëç\ä§Óþž¿ÿ�E'Ä_÷Ðÿ�?áYëÿ�ôR|Eÿ�}ñª:—Änâ &±Óà´–?å ט%ÀÁ1p­“ÈF3ž'·ø·ss¡i:œ~wþ×Þ,âŽáågh÷ù „‰˜c` s»'h€ ÿ�áYëÿ�ôR|Eÿ�}ñ£þž¿ÿ�E'Ä_÷Ðÿ�ÉÔ>$júµî‰u£Ãq¦ißð‘Ûè÷kpÌ™œ•6Œ²û †–ÈéŽÃÅÚÞ£mâ øNŸìm¬M0–ôF®bH£ÞB†w·@H#ƒÁ  _øVzÿ�ýŸßCühÿ�…g¯ÿ�ÑIñýô?Ƶ¯µÍOÃ7º~ˆÒwTÕ®&ûÚ ÛŠ(•ŸÌtB2NBó¸ W//ÇÑ/£Ð쎟¢Ïö¬8ŒÜ}™ÆÝ˜Ü²tÃr:P—ü+=þŠOˆ¿ï¡þ4³×ÿ�è¤ø‹þúãK'Å¡lN|BþxÚû�N>ã†òÎP÷àèk>Çã}¦££ÜkÚ4‡OÓÖÜêŽ÷{v™ÊíýæÉ9^?*�¿ÿ� Ï_ÿ�¢“â/ûèð¬õÿ�ú)>"ÿ�¾‡øÒY|YëÃM¾Ñ~΂ëP´’h®¼Ý²Z ‘ð¥*TŒxÇzd?îç´Ó.G…çŽFöÞÒÞI¥’$s:³FUšHm¹ ‚àПð¬õÿ�ú)>"ÿ�¾‡øÑÿ� Ï_ÿ�¢“â/ûèU➣©Càû½7DV‹[KÙd¶3”ý™_1¡Û‚I�ƒß¡Ûœ×uáÍb}oO’æ{{x%1…‚àÊ�<îDe`IYA÷Çÿ�³×ÿ�è¤ø‹þúãGü+=þŠOˆ¿ï¡þ5éP›ÿ�³×ÿ�è¤ø‹þúãGü+=þŠOˆ¿ï¡þ5éP›ÿ�³×ÿ�è¤ø‹þúãH<­k£íðøë]±GàA™UÇä÷¯I¬¯È/÷›ùÐÿ� Ï_ÿ�¢“â/ûèð¬õÿ�ú)>"ÿ�¾‡ø×¤Q@oÿ� Ï_ÿ�¢“â/ûèð¬õÿ�ú)>"ÿ�¾‡ø×¤Q@oÿ� Ï_ÿ�¢“â/ûèð¬õÿ�ú)>"ÿ�¾‡øÖ÷|A} i:xÓ¼µºÔu(4ôžUÜ–þa9‘‡°™Ÿ6«­øwÆúF…& úÔ:µµËÆnR8ž bPÃ-�#lã•$^”Gþž¿ÿ�E'Ä_÷Ðÿ�?áYëÿ�ôR|Eÿ�}ñ¬ ¯ŽSxRóP´Ðã¶»þÎ[ëo2äÊ» ÏÙ˜r²rqÎGJ×ÿ�…‹©éž+ñ©ZÇ,ÑÞéÖuœS,Mq72ùa¶¹$©Ç@=@,³×ÿ�è¤ø‹þúãGü+=þŠOˆ¿ï¡þ5Vïã –¬b½ÄgP†tûnMf‚IT/•(AVã'‚ZØÐþ#lêÚU³iik¨Ù‹Þ+LOÙüòÞP_¸Ë»vrG4Gþž¿ÿ�E'Ä_÷Ðÿ�?áYëÿ�ôR|Eÿ�}ñ©ü+âSþ¿ßjSÉ©I¢j—Ð@ hŒñBŠU~E�“Ï8ïPGâ-WGð—޵}r[«g¶K«>;h„dJ¸Ž8Ø.õ!Ý2Y›¡é@ü+=þŠOˆ¿ï¡þ4³×ÿ�è¤ø‹þúãEßÅ»Sû"ã@ˆji©[iÓÄ·ä¢=Äeá`þ_̧i À+ÛuWÓ~0VÂâæ iB“ZE{ÌoX¥h¤BB£yÈÆvæ€,³×ÿ�è¤ø‹þúãGü+=þŠOˆ¿ï¡þ5ŸÅè®­Y[Fhõ.lmím¾Ó””ÞGæBYö|Ÿ(;¸8Ǩnþ0ÉjÆ! +ÜFugO¶à$Öh$•AòùR„n2x u  _ð¬õÿ�ú)>"ÿ�¾‡øÑÿ� Ï_ÿ�¢“â/ûèXƒâkj•–™ ]]5Å­­Ä¬< 7 ¹7”(ãs1\ Í/ãš¾›wq„°Éƒ6³{½Á–)'F ÈpyÈÇJ�·ÿ� Ï_ÿ�¢“â/ûèð¬õÿ�ú)>"ÿ�¾‡øÖ‡„üeªëF‚ÿ�L¶…ï,âçûIS&èD›âB˜eÉ @mÊsÁ�1î(Íÿ�áYëÿ�ôR|Eÿ�}ñ£þž¿ÿ�E'Ä_÷Ðÿ�ôŠ(Íÿ�áYëÿ�ôR|Eÿ�}ñ¤o‡þ2³f™ñ+R2©È[Ûu™Øäñùôš(ÌÆþ,ðL±¯Ž´¨.t¦mŸÛ:PfTôó#<¨Ç¶kÑì/í5K/¬n#¸µCÇ,g*¦’8扢•ãpU‘†CB+ÊÞ'øOãAlÍÿ�v¹qä´ ~[ –èWÑÓØú �õj(¢€ (¢€ (¢€ (¢€ (¢€ (¢€<Óáj7‰¼Y6}WT‘ccÉGÂ.}²Gà+ÒëÍþÿ�É(Ó¿ë´ÿ�ú1«Ò(�¢Š(�¢Š(�®FO†^–ÒîÖ]2Y!»¹û\Ë%ì홹ýà%ò¬sÉ'¡ÍuÔP=7¼;q%ãͧ—¨å Ä›&ÀÀfMÛKãøÈÝï\þðð¾½âïí«{[[[T޵Í$ @»W{0'†ÈbAç­z Éÿ�¶ð®Ð¿`¸À½þп¸é?ó×ïýïz±€¼5o£Zi0i樂Æ{P—SÉ$”“võÎO�ãšé( noxnwW{ [Ä¿.¥Aö„]«&›û÷Íjjú&®ÛG£l&XäÄÁ™7HeopA­ (çÁºåœ6׳8†C,s¹¼õr6“çnó2GæäqY÷_ <xfÒƵK2‰u2/’¬ Up�Ü¡½Ï'’k®¢€8Mcán“} ´:t²ØF5˜õ{¬Ë,¦âEÜ -»–^x‚µáß…#û0M!-Ò4XÖY8C”óv$Áäšéè ZÛáÏ…m/⾋N“í1Ï-Ê»ÞLù’PF!œƒ¸(9¿ð¯<3äYÁö+ •ÂÜÛF/îÃ"œ©Q¿� œÀÉÀä×QE�rð|;𵵕…¤Zc,:y˜Ú¯Ú¦&/4b@üá‡lâ¶´½ËF‚X¬’EIæÈÒÌò»¾ä³’Ç…Q×€�íW¨ Š( Š( ²¼9ÿ� X¿ÞoçZµ•áÏùÅþó:�Õ¢Š(�¢Š(¦¥¦YkXê6ÑÜÛIÑÈ29؃È=ª–á+J»{ËX$kÖÊ7WÜÈ©×hiˆ\ö Ø¢€8 ü%Ð4 ¾‹©F5Fš/"âá÷ÇæF%2ª…Þv�Ç?)#'šÛoømßPwÓÝäÔ).${™YËÅŸ-•‹e äà©®ŽŠ�å&ømá;…dÓ$"š4"ò`q0"RÄ?ÌÎ ŽIçK¤ü8ð¦‡skq¦é¶’´°u3Ý# ‘ó(�úàg8®ªŠ�ËѼ;¥ø~Þê 6Ù£Žîáî§ß+Êd•À Ĺ'œ ¡<7´¶£NÝi*²›GžFuÙb‰Ôò WGE�rçáß…Ù`Ýa34Kx’Ù̆e�+³ïÜÅ@ÀÜNqŒš£'ÂÏ Á¦][iÏaq.>ÿ�hšQRî,64˜a¹Ë`÷æ»j(‘Ñþh:o†£Ñç¶LVqr^Eye‰¬ŠwŒ€¼#oj|ß ¼'p°,šd„B“F„^L&JX‡ù™Á ±É#ð+«¢€9Ø| áëg·{{9 {{ajäÈÆ%ûªÄ>_omÙ#ÀªÖ ¼'¦qi¥²/Øä°Únæe0HÌÏÈÁ,Çêk«¢€0´ïhzUŤöv³#Z(X®¥t 傘®í™]ØÎ æ·h¢€ (¢€ (¢€ æ¾ hqø‹ÀzÆœèÚÙ¤‹Œ‘" ÊGâæk¥¦º,ˆÈã*À‚q@çÃÝjOøEÔæmóKlVÎw:Œ¦ºZóŸr3ü&ÒÕŽBI:¯°óXÿ�2kѨ�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Íþÿ�É(Ó¿ë´ÿ�ú1«Ò+Íþÿ�É(Ó¿ë´ÿ�ú1«Ò(�¢Š(�¢Š¡®»GáýIÑŠºÚÊU”àƒ°ò(ýÉhÞÓgдùdK†‘í£fcw/$¨$ýê½ÿ�¾“ÿ�<®?ð.oþ*€7è¬øEôŸùåqÿ�sñTÂ/¤ÿ�Ï+ü ›ÿ�Š  ú+þ}'þy\à\ßüUð‹é?óÊãÿ�æÿ�â¨~ŠÀÿ�„_Iÿ�žWø7ÿ�Gü"úOüò¸ÿ�À¹¿øª�ߢ°?áÒç•ÇþÍÿ�ÅQÿ�¾“ÿ�<®?ð.oþ*€7è¬øEôŸùåqÿ�sñTÂ/¤ÿ�Ï+ü ›ÿ�Š  ú+þ}'þy\à\ßüUð‹é?óÊãÿ�æÿ�â¨~ŠÀÿ�„_Iÿ�žWø7ÿ�Gü"úOüò¸ÿ�À¹¿øª�ߢ¹-6Î-;ǯmlÓ¬ ¦y†7Ýwy¸Îžq]m�QE�•áÏùÅþó:Õ¬¯È/÷›ùЭQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@Q@Q@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@gkÿ�ò-êŸõé/þ€kF³µÿ�ùõOúô—ÿ�@4ÿ�"æ™ÿ�^‘è´+?@ÿ�‘sLÿ�¯H¿ôZ�QEWS½þÍÒ¯/Œ2Möho*1–}ªNÑîq\Mÿ�Ä ^ÆÛK¸] LºƒS¾‚ÆÖ{m`¼nÒîÁÜ!Èo<wÍvÚ½ÍÕ„°ÙÝý’äàÇ?—¼!W##Œc=ëÏ®>ÞÍxo£×í`ºmZ UÒ=4ˆ°© ?7#;‰c¸–8éŽ@6ÇÁl5ϵé¿gÔ´Y¡ŠîÙ§Ìj%#džnßõx%‹È N+¡Ño¯µ &šþÎÞÙ÷‘Ù®¾Ñ©€C«í^Ov¬KOÞØÿ�hßA¬Fu­Já&»º–ÏtR*!E‹Ê@÷³ïV</áY|-áûË [ô{›‰æ¹Y ¾Øa‘úˆ7;wzóÍ�Oaâ«;ÿ�jTt¹´…&Wn“)b¬WÙXm>ÿ�J¦ÿ�ü+RK&£*G­ ®ÖS‡UÎÏ”†e㨬ˆ~ÜÚkº³i¯2^éêëtòG4ÂïyùÆ×˜ˆÁÉ8Q÷Ž}�Šçá…åׄ¼E¡I¯Â·©FY…ýÙfV*ÍõEÁÏLõÏ�,>7ðô÷±Y¥ìž|Œ©µ­ePŒÎQC’¸ḆžÙÍ[Ó<K¥k/²Âáåa,°`‘6¼DrŒ`°õÏÏëÔõ}r=E¼GåÇÅȶ[L)hí¤‡‘˜îÃd‚6|!§Æ÷ú¶¾¶wÖ?ÚSûì^[ÂáBÈÀ¶QN{íÖÑE�QEƒü”cÿ�`Ÿý­]-sQÿ�ÉF?ö ÿ�ÚÕÒÐEPY^ÿ�,_ï7ó­ZÊðçübÿ�y¿�jÑE�QErš~žúœš„óêZ’²ßM¬WnŠª¬@�ÇÕÑX?ðÇÿ�A=[ÿ�Ÿühÿ�„~?ú êßøÿ�ã@ÔVü#ñÿ�ÐOVÿ�Àçÿ�?áþ‚z·þ?øÐõƒÿ�üôÕ¿ð9ÿ�ÆøGãÿ� ž­ÿ�Ïþ4½E`ÿ�Â?ýõoüñ£þøÿ�è'«àsÿ��oQX?ðÇÿ�A=[ÿ�Ÿühÿ�„~?ú êßøÿ�ã@ÔVü#ñÿ�ÐOVÿ�Àçÿ�?áþ‚z·þ?øÐõƒÿ�üôÕ¿ð9ÿ�ÆøGãÿ� ž­ÿ�Ïþ4½E`ÿ�Â?ýõoüñ£þøÿ�è'«àsÿ��oQXžiM…ÔrÜM?“{<Hó>æÚ®@žµ·@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@Q@Q@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@A}j·Ö6ŽÌ‹<Meê2?:žŠ�æmü3ªÚÛEoŠï–("²Ûœ�0?‚¤þÀÖèl½ÿ�ÀKþ"º*(þÀÖèl½ÿ�ÀKþ"ì gþ†Ëßü·ÿ�â+¢¢€9ßì gþ†Ëßü·ÿ�â(þÀÖèl½ÿ�ÀKþ"º*(þÀÖèl½ÿ�ÀKþ"ì gþ†Ëßü·ÿ�â+¢¢€9ßì gþ†Ëßü·ÿ�â(þÀÖèl½ÿ�ÀKþ"º*(þÀÖèl½ÿ�ÀKþ"ì gþ†Ëßü·ÿ�â+¢¢€9ßì gþ†Ëßü·ÿ�â(þÀÖèl½ÿ�ÀKþ"º*(þÀÖèl½ÿ�ÀKþ"ì gþ†Ëßü·ÿ�â+¢¢€0´¿Oe¬Éª]ê÷󵸷Q,Q UÝ»øgšÝ¢Š�(¢Š�++ßò‹ýæþu«Y^ÿ�,_ï7ó  Z(¢€ Áðÿ�ú­GþÂ7ú­êÁðÿ�ú­GþÂ7ú  z+Îô߉w·š¸³›Ãñ¬cY“Fv·¾2Ê’ É“Ë1¯î½[<zzï'ü5 ­ü¤Æí/Ù& æ+„1³%÷2ƒæ9àPMEp>)ø©¤èz$—úXMVX’9e· $[#fØ o-‚¶î66ÓÃz`ìë^:Ñ4hõ%iž{«d‘ Š';™y@ávî A#9Prp9 –Šóm/âýŒ·Vñëv¤Å6ÿ�œL²ª¬Ž¨€þèpwŸîçzéÇŽ¼8Ö zºƒ4KröŒ‹o)Jƒs¯—·Ê9<`OÑQ\>¯ñ/N³Õt›=1"ÔÒóP‚Âyc‘Õ`ipT†ØQøÉ*ǯ‰õø¼1 ]j³A%ÀKbûÏ“¢†b{�h^ŠçµŸéZ6›¥_Èf¸ƒU¸† So>ó&0xÝÉÇSŒ�MR¶ø“á駺ŽY.àê §+Ég.ÙfU T§¨ÚpxéÈ ºŠó[Ï‹ÖÐë_dµÒÞ{!gd÷òE ûB3‡·n3“Æ:×Csñ¶¶Ö7êna¾‚K›i#µ™Ä‘Æ s•C AäwÔÑ\©ø…áõÕ ³3Ê#—KþÕûSBëÁÆÖ$Ž2 üF:*Õ¿´ «ˆíẦi6ìs‰™¶¨”ýÖ[¿n{PAEP_†ã×Pÿ�°Çþ†kn±<3ÿ�º‡ý„n?ô3[t�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QE�QE�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QEWÔ.¾Ã¦Ý^lßäBòìÎ7mã=ºPŠ+ž³Õ¼A{covšF˜©<k"†Ô¤È 3Ïî=ê¶ø‹þ:_þ ¤ÿ�ãµEbý·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� N—ÿ�ƒ)?øÅ�mQX¿mñýt¿üIÿ�Æ(ûoˆ¿è¥ÿ�àÊOþ1@TV/Û|Eÿ�@/ÿ�RñŠ>Ûâ/úéø2“ÿ�ŒPÕ‹ößÐ'Kÿ�Á”Ÿüb¶ø‹þ:_þ ¤ÿ�ãµEbý·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� N—ÿ�ƒ)?øÅ�mQX¿mñýt¿üIÿ�Æ(ûoˆ¿è¥ÿ�àÊOþ1@TV/Û|Eÿ�@/ÿ�RñŠ>Ûâ/úéø2“ÿ�ŒPÕ…a­_ËâÒo´ûhZý¥d‚í¥oÛ‚ kŠÝ Š( ²¼9ÿ� X¿ÞoçZµ•áÏùÅþó:�Õ¢Š(�¬ÿ�ªÔì#qÿ�¡šÞ¬ÿ�ªÔì#qÿ�¡š�Ïð‡…¯<1.²gÔá¼S¿“P*–†#’cpÎöÊð01ëɬ?øUí6‡«i÷š´3½ö°u„°‘ÌH%Z6vœcŽ ¯C¢€<Îÿ�á"\éšõ•¦£ga·°¸Km;dq¼/¸4h$AÏ<ç5nëáŠÍs®Ïæž²êé&ùæÒÄ“@òGåÈc“x!' Øž¤dA¢€<§Uø=yªÚÇo'‰!DM ÓŽ|¸¥I­ûÄ ü \? üÇžkNÎægÖ'ÕQ.4Ñ$™B¼o“ç ‚3^•E�yÈøWöx¡·°Õ`¶¶‡^‹\H… "® `�!# �08®“Ä“Ä:„-s|WOŠ Z§4¬1¼É¨Jíãf9¹äc¢¢€<òÏá¥å¿…´]‰ÿ�±µXµY¾Å· )‡˜r2Ç<p9Å$ÿ� nvh5Øãˆø“þe¼‰?çžDƒåëÎ=?D¢€<ïTøcq©x‡PÖÿ�·+›JÏQE–V&¶GDVgÎðIùz^"¼øI è—c«µ¿öM­å·™%¿™ç ¤+!Æá´å‰œ{פÑ@s?„»Š®µ†dO®‡'—m´²£‡IXà‚£#œúŠÐÓü>Ÿqc-½æ—iäH1Óô‘jÒí °ÊÉÀp�`Á‡ SŒvÔPEP_†ã×Pÿ�°Çþ†kn±<3ÿ�º‡ý„n?ô3[t�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QE�QE�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�Vv¿ÿ�"Þ©ÿ�^’ÿ�è´k;_ÿ�‘oTÿ�¯Iô@èò.iŸõéþ€+B³ôù4Ïúô‹ÿ�@¡@Q@Q@ç>7Ñí5ŸhP[êI§ë©§ÝMe:°Þ%W„ +üJWÏÈî7úW3½s C©I4máÛÛ½^Su´nó¬¢fX™ÁçrYAå·àrM�{eàºÿ�Å ~Í#º³ÖàÏü#ÖZ›Û¢e-4i$]7�UËÃ*÷ü,Íkum±h^!º±mJcK ™€»ÝT3dn)ÎÜd}àí”U]2K‰´›9.Ú¹x¥h3å—*7ÈnsŒŒâ­PEPEP òQý‚öµtµÍGÿ�%ÿ�Ø'ÿ�kWK@Q@exsþ@±¼ßεk+ßò‹ýæþt«EP\î„e v#Dd:¥È”³Uw7*0wÛF8$çŒа|?þ«Qÿ�°Çþ†hâI¨”Bö¶¡ÊDX – 1oÞ€vrySÆãÁ Ö‡“Qå-mK„”¨7,`ߺìà2òǧ€­[¢€ ßwçãɇÉóq»Î;¼½™Ý¿{Ë·8ÛónÏËQ¤š‰D/kj¤E€¹býèg!W•<n<jÝQäÔB9K[Rá%* Ë�X7î;8 ¼±çiàëRo»óñäÃäù¸ÝçÞ^ÌîÆß½¿åÛœmù·gå©è  ‰&¢Q ÚÚ‡)`.X€Å¿zÙÈUåO'ZMD#”µµ.R Ü°ƒ~è³€ËËvž�~µnŠ�ƒ}ߟ&'ÍÆï8îòögv6ýíÿ�.ÜãoÍ»?-F’j%½­¨r‘åˆ [÷ œ…^Tñ¸ðBu«tPG“Qå-mK„”¨7,`ߺìà2òǧ€­I¾ïÏÇ““æãwœwy{3»~öÿ�—nq·æÝŸ–§¢€*$š‰D/kj¤E€¹býèg!W•<n<hy5ŽRÖÔ¸IJƒrÀ û NÎ/,yÚxúÕº( ÷~~<˜|Ÿ7¼ã»ËÙØÛ÷·ü»s¿6ìüµI¨”Bö¶¡ÊDX – 1oÞ€vrySÆãÁ Ö­Ñ@~ÿ�mCþÂ7ú­ºÄðÏüzêö¸ÿ�ÐÍmÐEPEP›ü ÿ�’Q§×iÿ�ôcW¤W›ü ÿ�’Q§×iÿ�ôcW¤PEPEPEPEPEP›ü ÿ�’Q§×iÿ�ôcW¤W›ü ÿ�’Q§×iÿ�ôcW¤PEPTu¸¤ŸAÔb‰ Èö²ª"õbT€^¢€9M'Yû.co.•« "·}‰ø!@=ªïü$ÿ�Ð3Vÿ�Àÿ� Þ¢€0á þš·þ�¿øQÿ� ô Õ¿ðÿ�·¨  øH#ÿ� f­ÿ�€/þÂAý5oüð­ê(þÿ�è«à ÿ�…ðGÿ�@Í[ÿ��_ü+zŠ�Áÿ�„‚?újßøÿ�áGü$ÿ�Ð3Vÿ�Àÿ� Þ¢€0á þš·þ�¿øQÿ� ô Õ¿ðÿ�·¨  øH#ÿ� f­ÿ�€/þÂAý5oüð­ê(þÿ�è«à ÿ�…ðGÿ�@Í[ÿ��_ü+zŠ�å´Ù&¾ñ¼—Ëcy²éÂ÷4`¿™œ õ⺚( Š( ²¼9ÿ� X¿ÞoçZµ•áÏùÅþó:�Õ¢Š(�¬ÿ�ªÔì#qÿ�¡šÞ¬ÿ�ªÔì#qÿ�¡š�ã´r'ø—ãÛ=CVÔÒÚf‚6ÔfE…$ˆ´¬ƒx †Ç#îôÍeè~8Öôo íHCq-¾‘ö˜ “Ìy¦`c]í1v 2ùu²æ½2ûAÑõKˆî5 *Æîx¿ÕÉqn’2} ŠtZ.•ÅÍÄZe”sÝ)[‰ 0=Cœe‡Ö€8[ÏxžÃJÑ'º²°‚}CYMý↫º9€Žg ƒÕK6G9£®øÎûKÒ¬ ‚Ü>¯>¡o¦Ë4ö3Åk’ ‹¼/˜€©û¬z¯<Œô'Âþ6ööçBÓ<‹g2AÙ#Û¬£SÀäzUû»;[ûsoym Ä$‚cš0êH9Ž �xÞ…âÿ�h¶·ÚU·›ªjøšöÂÝîæi„ijB,ªy< ¿'æ<ŸëÞ(-ãMµ‹‹)´È´Â–pÎá"…,‹²M»<¿;°q€q^Ø|1 5¼öí¡é¦‰|é£6ˆVI?¼Ã·'“ÍG'„|51”Ëáí%ÌÄ4¥¬£;Èè[åçñ ?±ø¡­-…í­„Öë{ªY¹·ÑØÚF$ ¹v0`1Ï<çµ&Ÿãïë²hšdÚe­¢xYà½ÞB¬B"î E1u~0®J§h èxWö·Ü[è:\3ÄæHäŽÎ5dsÕ œ}©ñøsC…vÅ¢éÈ<ß? jƒ÷Ÿßé÷¹<õ Wáv³,Ÿ´Ý_X¾šwD¸’{‹‰ ŽBÍ'RrN�ð°l¼{«ZŸZ]¼±ßG`ú¾™öë9!ˆòñp¤„eÀ# ò{^’žÑcÒ_JMÁtç;šÐ['”Ç ä¦0N@=:ŠI<7¡Mv·rèºt—+”³5ª »Cc8Á#œP–ÁãoÀÖŒu+¼Ÿÿ�m2ËjHš\Žì/P@å¾_M {^×ï|?à»ùo!¶ƒYÖ,•£±2Å'‘4yØÎ±Ü:ü§Œsè2xkAš(â—DÓ^8áòÑXó€c…Ï8éO:Œc²Œé6,[}¢ý™1nÙÎcùN@<c¥�x÷~ x‰<<ÉìöºƯÝß™+K‰TÇ)ß“¿/#�wÅ*üOñN£qej&Ó-Œº†’gû·QœÒЧ$ȯbµÐô›¸K=.ÊÝ.'XmÑ£Ã`sÇÕhü%á¸Nbðþ”œ©ùlã¯ÝíÛ·¥�qú?Ž|M­Új¶ú=¬v-d‘ÐuœFQ—ÎÜí´î�ˆùsó®ÓÃ×ójz,7WA4ÅäGh"x—*ì¸Øä²°Û‚ 8 òií hÎ÷nÚEƒ=æ>ÒÆÙ Ÿ#7>µnÖÒÚÆÖ;[;x­íãR(P" ô�p(†ã×Pÿ�°Çþ†kn±<3ÿ�º‡ý„n?ô3[t�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QE�QE�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QE5ÝcFw`¨ –f8�zš�uŽ<Yá² Òˆ?ôùøÒÿ�ÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��kÑYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��kÑYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��kÑYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��kÑTlµ+S‘£°Ô¬îäA¹– ÖB©�Õê�(¢Š�++ßò‹ýæþu«Y^ÿ�,_ï7ó  Z(¢€ å4m_MµþÒŠãQ´ŠA¨Üe$™Tœö&ººì­drïm 1êZ0I  ÿ�íýþ‚ÖøŸãGöþÿ�Akü Oñ«ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�PþßÑ¿è-aÿ�)þ4oèßô°ÿ�À”ÿ�¿ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPíýþ‚ÖøŸãGöþÿ�Akü Oñ«ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�PþßÑ¿è-aÿ�)þ4oèßô°ÿ�À”ÿ�¿ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPíýþ‚ÖøŸãGöþÿ�Akü Oñ«ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�PþßÑ¿è-aÿ�)þ4oèßô°ÿ�À”ÿ�¿ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPíýþ‚ÖøŸãGöþÿ�Akü Oñ«ÿ�Ùö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�PþßÑ¿è-aÿ�)þ4oèßô°ÿ�À”ÿ�¿ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPO…&Š{ Ùa‘$µ ‚®Œ#yèEoS"Š8SdQ¬h9Ú£Ÿ@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@Q@Q@Q@Q@oð'þIFÿ�]§ÿ�Ñ^‘^oð'þIFÿ�]§ÿ�Ñ^‘@Q@gkÿ�ò-êŸõé/þ€kF³µÿ�ùõOúô—ÿ�@4ÿ�"æ™ÿ�^‘è´+?@ÿ�‘sLÿ�¯H¿ôZ�QE�QL˜JaBÈ’•;Ô²†Ç€FG¶GÖ¼¿Ã¿uëÂúÞ¯œöõñÓöZDñ½¼…Ý僂Pç…ǽ�zÈÉñÉ-õ)†™¨gkstžb"}¢8,…2Ù,>ðRAÈ¢Òþ!Ayk¤½Î• ÞÁk$²*¡†¸!c·e·1t7mä�Ίä>!ø‡X🅵 sO.–±Å¶+ˆ‹»Ê¨yW\�Ó­Y½ñIÐu8´ý^%’å'šÚ{X‚ÆËod;œøÎ;gŽpÓQ\iø‘¥EâfÐnlµ k¤»†Éä‘#1¬³!x†UÉù‚œ`vçoÃþ=Ñ<M¬Ýizt¬ÓÛ«¾IB$U}Œ@ YpØûáI‘Í�tôQE�QE�`Çÿ�%ÿ�Ø'ÿ�kWK\ÔòQý‚öµt´�QE�VW‡?ä ûÍüëV²¼9ÿ� X¿Þoç@´QE�QX·¾+Ò4ûél®&ŸíczÅi4r29U#§½�mQ\ÿ�ü&Úüõ½ÿ�ÁuÇÿ�£þmþzÞÿ�àºãÿ�ÐAEsÿ�ð›hóÖ÷ÿ�×ünøM´?ùë{ÿ�‚ëþ7@Ïÿ�Âm¡ÿ�Ï[ßü\ñº?á6Ðÿ�ç­ïþ ®?øÝ�tW?ÿ� ¶‡ÿ�=oð]qÿ�Æèÿ�„ÛCÿ�ž·¿ø.¸ÿ�ãtÐQ\ÿ�ü&Úüõ½ÿ�ÁuÇÿ�£þmþzÞÿ�àºãÿ�ÐAEsÿ�ð›hóÖ÷ÿ�×ünøM´?ùë{ÿ�‚ëþ7@Ïÿ�Âm¡ÿ�Ï[ßü\ñº?á6Ðÿ�ç­ïþ ®?øÝ�tW?ÿ� ¶‡ÿ�=oð]qÿ�Æèÿ�„ÛCÿ�ž·¿ø.¸ÿ�ãtÐQUìo­õ+om$ó-æPñ¾Ò¹CÈüjÅ�QE�QE�y¿ÀŸù%wývŸÿ�F5zEy¿ÀŸù%wývŸÿ�F5zE�QE�QE�QE�QE�QE�y¿ÀŸù%wývŸÿ�F5zEy¿ÀŸù%wývŸÿ�F5zE�QE�¯ÿ�È·ªפ¿ú­Žâ®­¥·™wE*uÉR0FE�fhò.iŸõéþ€+B²ã𦙠IRjI(UUÕ.@�t÷”ÿ�øFtÿ�ùíªàÖëÿ�ŽPÿ�Οÿ�=µOüÝñÊ?áÓÿ�ç¶©ÿ�ƒ[¯þ9@¦F–#Y^&e*$LnBGQFG¸"¹ ᾕ¡G¦B/õ+Û]-Ú[+{·ŒÇ ŒI/„E,ÙfÁbqž1]ü#:üöÕ?ðkuÿ�Ç(ÿ�„gOÿ�žÚ§þ n¿øå�sV¿ 4‹iî¦mCT¸{« ôéZy‘‹A+`[fâCCObH�Sáf’$°sªêïöjÖêóFÂ6·F@)Çä ÔŒó]Gü#:üöÕ?ðkuÿ�Ç(ÿ�„gOÿ�žÚ§þ n¿øå�Tñg…í¼a¡I£ÞÞ]ÛÚJÊÒ‹R¤ C�K+`dÆ•KSÑ®u=_G±¼´–îÆÁ’ðj4k!7 ŒŠ É$`VÇü#:üöÕ?ðkuÿ�Ç(ÿ�„gOÿ�žÚ§þ n¿øå�rQü;k¿ˆº¯ˆõIլ亳»³·†OùkMiANʼn[ë]ƒá›oã±»¼6rHòGg#«EvÜÛ>]Ø''Ž2qŒÕ¯øFtÿ�ùíªàÖëÿ�ŽQÿ�Οÿ�=µOüÝñÊ�Ñ¢³¿áÓÿ�ç¶©ÿ�ƒ[¯þ9Gü#:üöÕ?ðkuÿ�Ç(FŠÎÿ�„gOÿ�žÚ§þ n¿øåðŒéÿ�óÛTÿ�Á­×ÿ�  Qÿ�ÉF?ö ÿ�ÚÕÒÖmŽƒa§^½ä p×/”džêYŽÌç{ úV•�QE�•áÏùÅþó:Õ¬¯È/÷›ùЭQ@`éßò1kßõÖýµ½X:wüŒZ÷ýu‡ÿ�E-�kÑE�Q^S©k¾&‹]ø€m¼A"CáØ`ºµ¶–Þ‡…¤ds°9.Rj _⦫£k^ϧ+égÃÖÚ›Ú ‚º™fHËd¦wøÛœ3x ]¢¸ âaÔüQg¡Í£ùÏ{{`ò­Îð“[(fÀÚ2¥X`ðs‘ŽõBçâóC¤ê¼^º“M´n.¤]âó¶oÉ*³dg%H"€=:Šà4oˆ×š¾¯=‡övÆÛQm>ie½!Õ·”Þ^€;¶±BAÝÎ04ŸŠú˜¾ñ6Ÿq§%íî“q{s2} FYÂUpŒ#ýãd¶8äŠ�õê+Í!ø¸“ëPY¦›y¯¬mVquÎÛ¸Œ¾Âž€î\ñØšßñ¶¥¦Eosååž™H××60G4°tØìŽ­û±‰7`Àíš�ë(®×ÇÍ©3M°mil`µkûè¥X‰ó“rÈ‘ã 07˜`3\÷‰þ"ê²ø\¾Óü½+UÓ#³¸ÄÇtÏ&Ð’nL+€ êChÖh® Nø6­üö>¾–ÚÆÞ}’ì—lÂ&ÜÞ^/„2ªÜdm®»EÔ$Õtˆ/eŽÞMß,ùÉ€Ä9=Á~Š(  Ï ȧ¦ÿ�×üëj±|%ÿ�"ž›ÿ�\Gó­ª�(¢Š�(¢Š�ó?òJ4ïúí?þŒjôŠó?òJ4ïúí?þŒjôŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ó?òJ4ïúí?þŒjôŠó?òJ4ïúí?þŒjôŠ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�++ßò‹ýæþu«Y^ÿ�,_ï7ó  Z(¢€ ÁÓ¿äb׿ë¬?ú)kz³®¼?¢ß\µÍæ‘§ÜNø ,ÖÈìp02HÍ�Z¢³ÿ�áðçý úWþÇþÂ)áÏúô¯üü(*�xjëS¼Ô.,f–{×Wºy1Žr¿w|{ö0…&³ðÿ�Ã> ½šóSÓäži [y»™Ĭ&Õp�  à£5­ÿ�§‡?è_Ò¿ð?ð£þOп¥àá@6ß¼3gªÅ©Ác2^Ås-ÚKöÉÉÈ�‘°_pP<QuðûÃ7¶—v“iò}’î_6kt»™"gÎâB+…\ À ÐV·ü"žÿ�¡Jÿ�À8ÿ�ÂøE<9ÿ�Bþ•ÿ�€qÿ�…�eZxÃv7Ò^[ÙN³Kr.åÍìì²LpvRåX†�Œƒ‚¨áZøOÄ­÷O,’Ìÿ�k›|¦LoÛòÊÛFT’§Ò¶ÿ�áðçý úWþÇþÂ)áÏúô¯üü(_‡^šùï_N“íqÉe»™@’ Dd�øC�ŠÑÖ|-¤kòoÔ`šBbòXGu,Jñç;\#�ËžÇ"¬Â)áÏúô¯üü(ÿ�„Sßô/é_øøP üáÛ‹¯´6œͰ´q ¯Éê¬Ô�`qT[ោšÆâÈé²ýšá!Ždûlÿ�¼X¸Œ1ß’p3Ðè+wþOп¥àáGü"žÿ�¡Jÿ�À8ÿ�€)Åàý¼H-e†;·ó%Ž+©QCn Y6#%”WÅiiÚu®•b–vq²@…˜vv,ÌY‰f$±,I$’I5ü"žÿ�¡Jÿ�À8ÿ�ÂøE<9ÿ�Bþ•ÿ�€qÿ�…�hQYÿ�ðŠxsþ…ý+ÿ��ãÿ� ?áðçý úWþÇþ�Ï ȧ¦ÿ�×üëj¢··‚ÒÞ;{hc†Ô*G…U€�©h�¢Š(�¢Š(Íþÿ�É(Ó¿ë´ÿ�ú1«Ò+Íþÿ�É(Ó¿ë´ÿ�ú1«Ò(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Íþÿ�É(Ó¿ë´ÿ�ú1«Ò+Íþÿ�É(Ó¿ë´ÿ�ú1«Ò(�¢Š(�ªš­Ì–zEíÔXó!‚IpÈÈRF*·YÚÿ�ü‹z§ýzKÿ� �ÉÓWÄ7º]¥ÓkVêÓÂ’,G”ïûÕ¯²kÿ�ô·ÿ�Àÿ�ÅÔÚü‹šgýzEÿ�  Р Ÿ²kÿ�ô·ÿ�Àÿ�ÅÑöMþƒ–ÿ�ø�?øºÖ¢€2~ɯÿ�Ðrßÿ��ÿ�GÙ5ÿ�ú[ÿ�à�ÿ�âé5ßi^Õ'š!w0‚.ÚY‹Èz §“ØwçñŽ‚Ú-Ö¯öð,íGpÆ' ’×Ôå‡gš�›ìšÿ�ý-ÿ�ð�ñt}“_ÿ� å¿þ�þ.µ¨  Ÿ²kÿ�ô·ÿ�Àÿ�ÅÑöMþƒ–ÿ�ø�?øºÖªw:­•¦¥e§O6Ë»ï3ìñíc¿`ÜÜëŠ�«öMþƒ–ÿ�ø�?øº>ɯÿ�Ðrßÿ��ÿ�ZÔPOÙ5ÿ�ú[ÿ�à�ÿ�âèû&¿ÿ�AËü�ü]kQ@?d×ÿ�è9oÿ�€ÿ�‹£ìšÿ�ý-ÿ�ð�ñu­E�ai׺¬^,}*öò ˜MÚ’ßË`Ûöãï1]%sQÿ�ÉF?ö ÿ�ÚÕÒÐEPY^ÿ�,_ï7ó­ZÊðçübÿ�y¿�jÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEæÿ�ä”ißõÚýÕéæÿ�ä”ißõÚýÕé�QE�QE�QE�QE�QEæÿ�ä”ißõÚýÕéæÿ�A‹á¼vm6Òòâ 0ˆ9?Ö½"€ (¢€ Î×ÿ�ä[Õ?ëÒ_ý�ÖTÕ-¤½Ò/mb*$ž œ ²3íÍ�SÐ?ä\Ó?ëÒ/ý�V…aiñx’ÇMµ´:v”æR-ßÚ2 í�gýGµYó<Gÿ�@½+ÿ�RñŠ�Ô¢²üÏÿ�Ð/Jÿ�Á”Ÿüb3Äô Ò¿ðe'ÿ� wâ6™ªêká³¥é“_ jßPœG,HDqîÈÙrNî>‡8®KÅ×u¯øÂò=G]º´{[:,Û,8FbÁC0ݤýîü×§ùž#ÿ� ^•ÿ�ƒ)?øÅgˆÿ�è¥àÊOþ1@'qð÷ÅuzÐxnHàžãWÛ¹·�A<KödÀ“YAltSÍtÚ/ƒ¼@Þ!Яµˆ5¶¶6Q£CqlM¼°²¬…·6ÇäþìüÀá»môo3Äô Ò¿ðe'ÿ�£Ìñýô¯üIÿ�Æ(ÅÃßvƒá»˜ìF­¨LÑÁul¬-e˜cÁr¬¡ƒ“NH=j÷‹<âb ®‡¤E¥\ÙÁ|³Í‘F¨²Ù’ Ù •S)ÁÀ¯[ó<Gÿ�@½+ÿ�RñŠ<Ïÿ�Ð/Jÿ�Á”Ÿüb€<šëÀºäºœ¾6ÚYÖí.cÓDТÛ$e.ßÛûÒAÚ¤ço8«¾ð†¹§é¾‹Sðô’^زG$—Á,p ¹y7!½+ Èla€ôÏ3Äô Ò¿ðe'ÿ�£Ìñýô¯üIÿ�Æ(RŠËó<Gÿ�@½+ÿ�RñŠ<Ïÿ�Ð/Jÿ�Á”Ÿüb€5(¬¿3Äô Ò¿ðe'ÿ�£Ìñýô¯üIÿ�Æ(¬òQý‚öµtµÏiúv¬Þ)}Zþ("ûÙ• ¹iI;÷dæ5Àüë¡ Š( ²¼9ÿ� X¿ÞoçZµ•áÏùÅþó:�Õ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š©ª^.¤^ß;Khf'°U'úPð'þIFÿ�]§ÿ�Ñ^‘\Á{F´øO¢+¦×‘e”û†•È?÷Î+½ Š( Š( Š( Š( Š( 0Ñæÿ�„â¾§£Ý/Kñ4¿mÓäþsÞ'ÕþÊ;×§Ö‹¼'aã ´ëÒñº°–Þæ#‰-åuÔúÿ�:ãtŸj>¹Mâ"<NË]r4&Þé{o |­ëúã©�õ *½•ýž¥l·67p]@Ã+,SøŽ*Å�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�•áÏùÅþó:Õ¬¯È/÷›ùЭQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S]Ö4.ìTd³�(Õç?uifÓ-<¥¸m_Ä‹p£“ý䄨únô«^!ø¡¦ÙÏý•Ḉ5ÙÈíl›z#ò8àßÓã­Oà¯]iw—>#ñÊÞøšýq4«þ®Þ>ÑF;ÆO|~`fc—¦Zéö˶ XR×ÑT�?AVh¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †îÎÖþÖK[Ëhnmäx¦@èÃЃÁ©¨ <»ø+àÙ®ZâÎ Ý2FûÆÆí£ð9�{ T_ð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4•Ð?è1â/üþ&½"Š�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4•Ð?è1â/üþ&½"Š�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4•Ð?è1â/üþ&½"Š�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMZÔ~èºã]Mªëˆì�+ îÅàz®úŠ�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4•Ð?è1â/üþ&½"Š�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4•Ð?è1â/üþ&½"Š�óøRºý<Eÿ�ƒÿ�ÄÑÿ� W@ÿ� Çˆ¿ð`øšôŠ(Íÿ�áJèôñþ ÿ�Gü)]þƒ"ÿ�Áÿ�âkÒ( 7ÿ�…+ ÐcÄ_ø0?üMð¥tú x‹ÿ�ÿ�‰¯H¢€<ßþ®ÿ�AàÀÿ�ñ4‚>‘×í·Åô@çʹ¾b§òÁýkÒ(  ½Ú7†í~Í£i¶ÖQœnò“ÿ�Þn¬}É5©E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_SDan2.jpg������������������������������������������0000664�0000000�0000000�00000020724�15030617045�0023221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��²"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (ªö÷Ö÷sÝÛ䴔C8ÚFÇ(²Ï_•Ôñëëš�±E^þëì:uÍçÙç¸ò"y|›tß$›A;Q{±Æ�îhÅUÕcÄhío8’{Y.£›åòÈGEeë»póôÆ^  ôQYwúвÖtý-,.î§½I$Ý Œ,1£F¬ï½ÔàW… zñ@”Vf¯­Ç¥=´+iu{wrXCmj{f˲¨ޤu©ª·~*µ¶ð›øŽK»»8âi¥ŽE–5@wä;(Êí Œç#€hvŠ( Š( ŠÍÔõs§<qC§ÞßÜH¥Ä6ª™ 1’YÙTu“Ø›JÔíµ6+ëRþT›†×]¬Œ¬U•‡f #Ô�¹EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP™Ák¤ßßÙÝAáMµ;«ø¯&kÝ:X¦ƒ2+×$ØDylíÛŽâå–“áý'Æ:Ì—¾ækôº±»‹Fi€D@•‘„"Uœ‘ÉÏ|× Q@GŽ¡°›YðãÜØj´nó\YXO+¤ o2•ó"B@g1‚ äç8ÀÈ‹Åö: økae¡M"]ÚÌÖ6é2¹Žslo,!16ãÔ…Á'¾k¼¢€9nîMÂ7‡J‡PÈ’5’)-¥µšHãJ¨$Ul´{”ÆN3Á¬]->i’hú¡§éͧ]BY´ù`„L^ÁR£a+|ì�b�‘^ƒE�y^—£ê0ê¶j0E¬¤¨g¼Ã—&Y~a»7~qŒ« ðxÁûƒ¥çü”=þÁWÿ�ú6Òº §y¤éº…Å­ÅîŸis=£ï¶’hUÚÈ9BFTåAÈô”¯<šw‰4i­nn-!¶¹´›ì°4ΆF…Õ¶ ,GîHàn«"úÖâ×àçˆþÕ A4özÙ…¾ôbfšP§Ü�ûŠîꮡ¦XjÖ¦×R±¶¼·$1Šæ%‘2:0#4j‘†T€pHëKE�p1ø[I‰r3Rçó¿#ô®úŠ( ^׆›4V‹ UÜ×úl÷+çZ0ßè©ÏCoA{Y4hZÊÚêÞϵ.¡x¥'{eÙ\˶HÉÝžõ¥E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�T7rÍ ¬’[Û›‰”|‘ ¸ýO²–×Ä£7Z„rŸùea•Çý´”`ÿ�ß±õ  º*;xš xâi¤™‘@2IÏîp�ÏРΛÃ:ÌòOs£ØO4¹žkurOÔƒ@´U+KÓžÃM³´wf‚Œ°ô8ûí6ÃS‰b¿²¶»NåKˆ–@®  TV1𮉿|V lÞ¶®ÐôØG×ë[4�QX-wâ0nº²·Õ-×ïKc˜¦þ¹1!¿Ï íZ¶öú¢ÜÚ³4lHã#)2°H=ˆ  4QE�R++¨d`Êzr a -ÖæÕõÝ@·XŒ¦G°{>ï­�nVÎ888= P½Öì¬.¼ßiiHÜIf8ÿ�€)ô«Vzm°·±´‚Ö�IÁEÏsV(:Ó[µ½¸Eú¹Î Ú|ñ/í:�?:·uu»O*ÊȽD0¼­ø*‚OåSQ@ÇÅZ<gÜÉkïwm,óu­±ÜB“C"IŠe<‚ê)ôPEcÏ¢ÜGq%ΙªÝ[J。•¼øç$mnT{#-]°šòXX_Z­¼ÈÛO— tö”ðqì@?^¤ÝQ@œV"è—×$>©­ÝËÎL6èÑ¡_Þ~oøPÝgÞëºF?‘{ªY[M·pŠYÕ\P¤äÔö:}¶›n`´Œ¤e‹±bIêI$’jÍ�fÙxƒIÔn½ôSJrB¦sÇZ¹uu•³Ü\ȱƒ,íÐTÔPBx§Ãò0U×4íçø Òü‰ÍjÇ"KÉ«£ «)È#ÔD)"+©ê¬2 Æ‘F±ÆŠˆ£ ª0�úP¨¬‹7RK‰.4Ý^D,ÛµÜbX~ƒuÿ�¾ˆ•kN»»¹YöÁí'Œ€Øpñ¿º0ä¨Sí@h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+úîæÿ�TþÉÓæòD@I{r£&5?v4ÏÛ®yÚ£Õ”ÖÕT±Ó¡ÓÍш»=Ìíq+¹Éf8T{(  tQE�QE�QE�QE�QX5¼Ö4ïjwÚˆê6Й£YSx`¼°Æzíø  ];P‡TÓâ¼·Ü#•Æ2‘Ø‚>â³µ©æ¼½¶Ð­f’¹F–æhŽ(€p{3 n#•¯ øUñÅþ#øƒe¥M©*é²É=ÍÌÛǃÎpJîr:澌ð­Ë܈ÔLè±´˜ä¨$Ÿ@Xþt�–ÖÐYZÅmk CJ8ã\*ÐRÑE�QE�QE�QE�QYÚþ˜u¯ßé«<–ïsF“FÅZ6#†sÁÁ Ñï罊ê;´Dºµ¹x%0§da’z£!ëÜÕmfyï/bЬå’'ŒËsqÃC8ùOgs`õ?-|;Óõ ïŒ:6Ÿ©<ÏsizÏ*ÌåŠ4 ±ëî•õÒZÁÜ·KʪŽýÊ®v Üß™ ··ŠÒÚ+kxÄpÄEP0KE�QE�QE�QE�QEEsOi4)+ÂÒ#(‘>ò1‘î(¦Ÿ¨½Õî¡g4B)­& 0r6PÈãõÝOµhWǰÝx²çâU¿‡õmkQ’éµ(¬î7\¾ 1ëÊòHúç½}…@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Eqsoi šæx¡ˆ‘ÂÌÔµÀüY‚+ F†x’XŸY·WGPÊÃÁ­�uÿ�ÛzOý,¿ð!?Æí½'þ‚–_øŸã^Yÿ�·‡¿è¥ÿ�àáGü"Þÿ� —ÿ�€qÿ�…�zŸöÞ“ÿ�AK/üOñª:/‰¬/ô->òçQ°K‰í£–UY•B»(,�$‘É<^uÿ�·‡¿è¥ÿ�àáGü"Þÿ� —ÿ�€qÿ�…�zŸöÞ“ÿ�AK/üOñ£ûoIÿ� ¥—þ'ø×–Â-áïú�éøøQÿ�·‡¿è¥ÿ�àá@°šžŸ"îKëf_U•Hþtïí /ùû·ÿ�¿ƒük˾ø#Âú¦‹©Í} i×&¯w´–êv¢ÈB¨ô�tØÿ�·ðWý úWþ-�tÚ_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ðsÿ�ð­üÿ�B¾•ÿ�€ËGü+Я¥à2ÐAý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�ø×?ÿ� ßÁ_ô+é_ø ´·ðWý úWþ-�lsI##T²?öðŸãAÖ´‚:‘¨3§ø×‡x+ÃÚ%׃t¹î4}>iž¼’[#3ž¤Žk{þoÐKÿ�À8ÿ�€2¾x{Mð·Æ0¼´[­‹Y¿œ¡vÊá€?—ð¯WÓu«1¬õK,Ý©·ßp¸ÙäE¼ôÝ¿ñÍyçü"¾Î°tÏüü)áð÷ý�t¿üü(Ôÿ�¶ôŸú YàBÛzOý,¿ð!?Ƽ³þoÐKÿ�À8ÿ�ÂøE¼=ÿ�@/ÿ��ãÿ� �õ„Ôôùr_[2ú¬ªGó§hYÏÝ¿ýüã^]ðçÁÕ4]NkíN¸‘5{¸•¤·SµBG  ®Çþ¿‚¿èWÒ¿ðh þвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒükŸÿ�…oà¯úô¯üZ?á[ø+þ…}+ÿ�–€:í /ùû·ÿ�¿ƒüi?´,¿çòßþþ¯øÖü+Я¥à2Õ{߇> K ‡_ ia–& ‹eààÐB5Í$ŒRÈúøOñ£ûoIÿ� ¥—þ'ø×‰øOÚÏ„´™§Ñ´ée{TgwµFf8êIÖÏü"Þÿ� —ÿ�€qÿ�…�\¶Ðt«Ž“x–+ë1eu§<…„Ë…¸Ü¨Ã¯S»Üæ»]#^³fÔVëT¶!/B^eŒ…#ò$¥y÷ü"Þÿ� —ÿ�€qÿ�…ð‹x{þ€:_þÇþêÛzOý,¿ð!?Æí½'þ‚–_øŸã^Yÿ�·‡¿è¥ÿ�àáGü"Þÿ� —ÿ�€qÿ�…�zÂêV¡’öÙ”ô"U#ùÓ¿´,¿çîßþþñ¯9øàO j> °»¼ðö=Ä6é$·RN%p?@tßð­üÿ�B¾•ÿ�€Ë@ö…—üýÛÿ�ßÁþ4hYÏÝ¿ýüã\ÿ�ü+Я¥à2Ñÿ� ßÁ_ô+é_ø ´ÐhYÏÝ¿ýüãGö…—üýÛÿ�ßÁþ5Ïÿ�·ðWý úWþ-q?<á}:×ÃæËB±¶3ëÃ)† …ÐÅ)*Híá@­ý¡eÿ�?vÿ�÷ðÚ_ó÷oÿ�ø× áŸúÛþ¿ãGü Þÿ� =¿ëþ4¥®øV;:xwİÍÙfI ÑY‰£¶õïƒ^§ý¡eÿ�?vÿ�÷ðx×ü Þÿ� =¿ëþ4 áŸúÛþ¿ã@Ëý¡eÿ�?vÿ�÷ðLŽ’ xÝ]OFSkÅ?áðÏýíÿ�_ñ­ï‡ Åš¿‡ O*ÒæÞ;ûX;TƒåÊí™ühÓ袊�(¢Š�* ËËm>Îk»ÉÒ xT¼’ÈØTQÔ“SÕ rÃûWÃú–Œý®ÖX1þòþ´ÿ� #Á_ô4i_ø´ÂÈðWý Wþ­/þɪøB½{H ’YEæf!÷€ݽA­ÿ�ìû/ùô·ÿ�¿cü(Ÿÿ�…‘à¯ú4¯ü Z?ádx+þ†+ÿ�Vºìû/ùô·ÿ�¿cü(þϲÿ�ŸKûö?€9ÿ�øY ÿ�¡£Jÿ�À•¤ÿ�…“à¯ú4¯ü Zè³ì¿çÒßþýðª×öcNº"Ò ùOÿ�,Ç¡ö  Vw–Ú…œ7–s$öÓ xåC•u=©ë—øoÿ�$×ßö‹ÿ�AÔPEPEPEPEP\'Å?ùèö¶þO]ÝpŸÿ�ä¡ÿ�ØnÛù=�gQE�QE�QE¥ð«þEíWþÃW¿ú0×u\/¯ùµ_û ^ÿ�èÃ]Õ�QE�QE�x€ÿ�äFÒ?ë‡õ5ÑW;à?ù´úáýMtT�QE�QE¥ð«þEíWþÃW¿ú0×u\/¯ùµ_û ^ÿ�èÃ]Õ�QE�_Pÿ�m×ýqäjÅWÔ?äuÿ�\_ù�ñÿ�È—£פÊ·+ÁŸò%èßõéò­Ê�(¢Š�(¢Š�ßøeÿ�$ûLÿ�zýõÖ×%ðËþIö™þôÿ�ú9ë­ Š( ¸ŠŸñéáûÅÿ�¢f®þ¸ŠŸñéáûÅÿ�¢f  TQE�QE�›s9Ó<YáUz­÷ؤQÕ’q³ñÃ?…iTˆ×þ ýwYhQ}¡Áæ@Dc꩹½‹-�zU=GPtQHmn®<É’¶Ñ î8ÜÀtQÜö  ”U]Jøiºt÷†ÚæäD»¼›XŒ’¿²¨êjʶôVÁÁ"€Ч¦jS³"ÖêØdòî¢1¿ÊÄg±ÆAî«”Èü;>F‹¨éyÓuk»eçø|Ã"çþ"×]\‚ ¼Ô|O¬Aòé÷ú™û0þÿ�•Äòfd8úWa@Q@WÔ?äuÿ�\_ù±UõùÝ×þF€9ÿ�†ÿ�òM|9ÿ�`ø¿ô]Erÿ� ÿ�äšøsþÁñè"ºŠ�(¢Š�(¢Š�(¢Š�(¢Š�+„ø§ÿ� þÃvßÉë»®âŸü‚t?û Û'  ê(¢€ (¢€ (¢€4¾Ƚªÿ�Øj÷ÿ�Fî«…øUÿ�"ö«ÿ�a«ßýkº Š( Š( ðüˆÚGýpþ¦º*ç|ÿ�"6‘ÿ�\?©®Š€ (¢€ (¢€4¾Ƚªÿ�Øj÷ÿ�Fî«…øUÿ�"ö«ÿ�a«ßýkº Š( «êò ºÿ�®/üXªú‡üƒn¿ë‹ÿ�#@?àÏùôoúôùVåaø3þD½þ½#þU¹@Q@Q@ÿ� ¿äŸiŸïOÿ�£žºÚä¾É>Ó?ÞŸÿ�G=u´�QE�WñSþ=<1ÿ�aØ¿ôLÕß×ñSþ=<1ÿ�aØ¿ôLÔJŠ( Š( o.¢±²žîvÛ ´Ž}�5Ó|;Ò%Ó|)ÍÚm¿ÔÜßÝÕZLOø _ÀׯZ}»Ãú¦ ó­¤AR§è¾¿þÔð†œ›‹db}J\нQ@Q@s~7Õ.tÿ�›m=öêzœ«adGU’N ÿ�Àsÿ�Àk¤®8©|Yx£é«-œGþZ4ìË$£ýÐ?àGÖ€:]#L¶Ñt{=2Í6[ÚıF=€ÆO¿z¹E�QE�U}CþA·_õÅÿ�‘«_Pÿ�m×ýqähŸøoÿ�$×ßö‹ÿ�AÔW/ðßþI¯‡?ìþ‚+¨ Š( Š( Š( Š( ¸OŠò Ðÿ�ì7müž»ºæ¼má«¿iV–ÖW±YÜ[^Gv²K‘I@Üõõí@Å¿ðƒxËþ†M'ÿ�Ïÿ�Ç(ÿ�„Æ_ô2i?ø.þ9@ E/ü Þ2ÿ�¡“Iÿ�Ásÿ�ñÊ?áñ—ý šOþ Ÿÿ�ŽPQKÿ�7Œ¿èdÒð\ÿ�ürøA¼eÿ�C&“ÿ�‚çÿ�㔣ð«þEíWþÃW¿ú0×u^áßø£A±žÞ/[GçÝKrêš`a¹Û'Ÿ?…lbø·þ‡ðTŸü]�uW/ý‹âßú!ÿ�ÁRñtbø·þ‡ðTŸü]�uW/ý‹âßú!ÿ�ÁRñtbø·þ‡ðTŸü]�yÏ€ÿ�äFÒ?ë‡õ5ÑU]+á§Šô}.ßO¶ñ&˜av&ý=Éǹó*ßü Þ2ÿ�¡“Iÿ�Ásÿ�ñÊ�J)áñ—ý šOþ Ÿÿ�ŽQÿ�7Œ¿èdÒð\ÿ�ür€Š_øA¼eÿ�C&“ÿ�‚çÿ�ã” ã/ú4Ÿü?ÿ�  …_ò/j¿ö½ÿ�ц»ªóÿ�ø'Å Œöñx²Ú?>ê[—TÓ ÎÙ8,ùü+cûÅ¿ô8Cÿ�‚¤ÿ�â訢¹ì_ÿ�Ðáþ “ÿ�‹£ûÅ¿ô8Cÿ�‚¤ÿ�â訪ú‡üƒn¿ë‹ÿ�#\ÿ�ö/‹èp‡ÿ�Iÿ�ÅÔsh,š ">0‡¥OüJ“¸ÿ�~€8?È—£פÊ·*¾ðßÅš^›oaoâM,Ão7éîN¯ï*Ïü Þ2ÿ�¡“Iÿ�Ásÿ�ñÊ�J)áñ—ý šOþ Ÿÿ�ŽQÿ�7Œ¿èdÒð\ÿ�ür€Š_øA¼eÿ�C&“ÿ�‚çÿ�ã” ã/ú4Ÿü?ÿ�  ï†_òO´Ï÷§ÿ�ÑÏ]mpºƒüS¢h¶ú|^-·D‹qÚºb°˜±Á/ž¦´¿±|[ÿ�C„?ø*Oþ.€:Š+—þÅñoýÿ�à©?øº?±|[ÿ�C„?ø*Oþ.€:Šà>*ǧ†?ì;þ‰šµÿ�±|[ÿ�C„?ø*Oþ.²5ÿ�ø“ÄÙ%ÏŒbcº[¨öRýð¬£8vc@¨©?á^x§þ‡[oüþ;Gü+Ïÿ�Ðëmÿ�‚aÿ�Çh:*OøWž)ÿ�¡ÖÛÿ�Ãÿ�ŽÑÿ� óÅ?ô:Ûà˜ñÚ�޶>ËŸ�ÚÚ7ß°žâ͇¦ÉXüwmeÿ�¼ñOý¶ßø&üvº?x^ëºuíµÞ¨ºŒ—Wvd[o$)ePFÝÍÝsøÐKEPEP\wŠs¤ø¿Ã:úñ“6•vAê“`ÆO°‘þú®Æ²|M¡Gâ_]é2LÐyà™FLN¬\PÀ�Ö¢¹a¢x»ò8Cÿ�‚”ÿ�âé±|[ÿ�C„?ø*Oþ.€:Š+—þÅñoýÿ�à©?øº?±|[ÿ�C„?ø*Oþ.€:Н¨È6ëþ¸¿ò5Ïÿ�bø·þ‡ðTŸü]2]Å“Bñ?Œ"ÚêTÿ�Ä©:ø�?á¿ü“_Ø>/ýWQY~ÑLJ¼7§hâs8³a•Ú_hÆqÚµ(�¢Š(�¢Š(�®OJñ`¼ñ|Úk™ÅµÌlÖFK9"BÑ’,Œ¡d ¥\'€}««eWR¬) Œ‚*©Ò´â-°µ"ÌæÔy+ûƒŒ|œ|¼qÅ�súw‹®oõHmOµŠ)>ÚL¦ð¢Öáas/¾àÞÇ8ëQÙøÚY¬åº¹Óc†{õ³¹‘.Œ‹¼I"HÁ¸*)‰à°æ¶-<)áË Ö{-J¶™T¢É œhÁNr¡ÉÈ÷¢? ivÂ4±µ†Â�êÒÃiq¬ÛNP>8œ‚E�i[<²ÚÃ$ðˆfd ñݱˆäg¾=jZ( Š( ¹ÍÅ2kVÉ5€¶‚þѯ´ùṵ̂€—]£c~ò3Œ· × ŠèëHðŦv'Šæêq&ÞÖ9ÙJÚÂHcxPq•_¼XáTg€6袊�(¢Š�+/JÔ¦¾¿Ö­¥XÀ°½ñ”nS2äó×2‘ø Ô¬7Cf«©ß.£y0Ôfɾ_–ŽPÚ¾ê(äžž¼ÐµQ@Q@cYêÚ”šûi׺R[ÂÐ4ðÜGsæðWl‹´lc»#ÃsÅlÖeŽ“=ž¡=ÔºÍýÚKœA: =ŠF¬p8c×ך�Ó¢Š(�¢Š(�¬;=nîoÜivˆ©$†÷Ìp7�‘•R„䑂ÃÏLîV]¦ˆ¶ú«êW×W·;(šãËÙƒ2(E^ Uå²~QÍ�jQE�QE�V}¦ª·š­ÕšDDpCË6x;H¼AåõïŸL¡Xzo„4#\¸Õôý2ÒÖæxäÀˆ+;0 ‚Ûþcžv/¥�nQE�QE�V.¬Ý^k—v3ÚCmAŒ;ä:e ·~Ã]¾êÍ÷—8'µY6ZµÕR¹Ô//î¼¶†&¹òÀ†6efU¢Œ«’r~QÍ�kQE�QE�W7á¿Úx’wXXź?:Þa‘Xs(fYNGÝÎ22rp:JÃÒ</k£^$ñ]]̰ÂÖöÌÊRÖ&eb‰…DûÅŽ ñ@”QE�QE�QE�QE�QE�ÅÞ!§]~5±-´—¥RAö¯²ù‹ Œ’˜ÈÛ=Æ{Zç ðu„zlVW7W‚GûJ)g(&ó¼ã‚Š£irN1ÜL�t4QE�QE�QE�QE�æþÔ#Ðü9©YhÞÔ"Õç¼¾–Ž<1¹i¥0—‘‘P.Ï,}ì׊ôŠ(ΗVñ"ÛHV}jM9§d¼“J y�+'šX@mñù¶æ®Í©kiâ-Ê9õ†µd]ÌtЃÇ.ÙKÈW"dÉܸéÜQ@M¤jž$‚ÒÊ †¼Ø,Vþôé$ÜDÃípBaÄ›XÂ�!ÎÖf95oVÖ¼[o¤Û²I«-Úé·³m¤ùž|Ë* PãËmŒé¸²ŒcŸ»Á¯N¢€‰cI0V€e*yõ}:Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ��������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_SDao3.jpg������������������������������������������0000664�0000000�0000000�00000041766�15030617045�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��à "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (ª:–­m¦* wÉ<¹ÛB»¥”ŽÊ¿–IÀI€/UKýNÃKˆKy²1™d ¸ú õ>²þͯjà›»£ÚžZ‘%ÁíHAUú('ѪöŸ¡išd†kkUûC 5Ĭd™þ²1,@Oˆ%¸û7EÔnÇi1n™ÿ�¶¥Xp¦³ôÿ�Þk³¼f¡á¯6>dX/ë Î9U Ïñ®®¼ñ|'â9 †)×M¶6×·—qIk}0’O´I)(\F¥¬Äñœ²/J�êÓ_‘‚I®ÙFÄd4ò¤ÔüÒ7¨üê½üSév­u©øÆK+uãÍ•-¢MǦK§é‘X'Áþ ݧL÷k=Å´¶#j·â)fGˆ† –eJœòNÓ’@Æ’èzä^²µqg¨j—²K—W³)X‹I³.$ê¹!²7g9  Öñj6i}e⨮-]w,ÆÞ)#+êŽjIψ,¡iåÔ´g‰[̵’�©5€ü«½ð7‹5Oí%¿×†ëMšÚ+k{¶†ä`áwƱüü•%ÁRp~R+£ñ&¨ëÚ®Œ­6rÄË|EÎù8L*+I‡º³�Ã�Žx  ÿ�ÚZݾ>Õ ‰‡­…âÉù‰¦iðx›K–d‚ižÊáÎØÚcè»À ÿ�&“ÂÖúÕŸ‡,­uù-¥Ô`ŒG$ÖÒ3¬¸à1,ªrG^:Ö¤ðCs C<I,N0É"†VàДV xoìdÉ¡^˦?üð̶>Æ"p£ý‡ޖ væÎd¶×¬…›1 —‘>ûia¸à¡>Œ�ì�nÑE�QE�QE�QE�QEàdÐE`É­Ýê.bðý¬w8kùØ­ºŸöqóJÝÂöÜiWÃ1Ý·™­ÞOª9ë ‡e¸ö¯ÊGûû½�K/‰ôµ•¡¶™ïçS†ŠÆ6œ©ôb ª÷ˆ¦G]¸cöm Oï_Þ*Ê1'ó¯QÁÅ ih0¨Š�Ø ç<w¦>¯áøm“GþÖ+k3[þëî$Êò¬e^P:ã<îÇBhè‡Ä²Zÿ�Jƒ?À¶rKøš¿ú 'öf¶Ä—ñ )ì"³Œü{qýk•³Ó¼W¦Ü!Òìî,tã}˦†¶hâ·fdŒä’¤–@íÀãë;OXÈ‘DÚ”‰©$’yïhÑÜ[½Ñ<¾1 ,Êwt�PSý‘ª®6x’ðŒsæ[ÀNP,¼CÂkVOÇY´âôWüúW5­è·Íâ«CMð¼W7ÆHÞ Fñáh“£*w c#t¬yãq4i–>2’ÃÃsëW²ÞÛêl÷ËvÐþäÂëóvVPät!Š’vî�'™âhÍm¥^/÷’i-ÛðR®?ñáõ¤>"koù i•šãý`ˆNŸœEˆìrÚw†®âø•u«'‡þË j2NoK@‘Uc 2†m¬6á‹›è”ZËQ²Ô¡3XÝÁs8- €>‡µY¬ÛýLÔ¥ó®-T\…¹…ŒS/ÒE!‡Ó5DÇâ æ·f?圥bºQþËp’})õc@KMÕ-uHYíÙ•Ðí–¤‘7÷]O ÿ�>£#š»@Q@Q@Q@Q@Zÿ�P´Ó-MÍäë @àÉbz*ËØ “Yç^Öm"]ͺMuû—«v§±bOª �Ý–Xà‰¥–EŽ5fs€¹¬ƒâ­.@ßayõ?çÆIôÞ£`?V±xcM$׫.¥p¼‰oßÍÁõU?"÷TVÀ���À�  oí]br>Íáécø¯n£Œã†CúR–ñ4§ˆt‹aéæÉ?þÊ•ÆxÚ†›r—~}&x.¯î&•Ü5ÜR4ÆFÇ ‘¾#—À_/ƒVšÓÆž]”· ©\=–¨Ò-íI­ÚÕ‡Ì8C‰˜®8;Ny Õ-¿‰ åµ=%O Ó¤8ü|ñŸÊšcñ2‹"pèòEŸo¾ØúóXbÇ^¼ðž­a®ÙÝjoö˜Íº-ã’x±vâ>ÌX�Ê�9šÌÓ´ÏÛj–Úm„z€dÍ ­½±vÎßšEó Æ~ö {ù�•ÁÀ�ëÍ߈âæM"ÂeLí¸ÿ�ÀZ0?ñê?á!hqöíUµ÷âàäçó²-t­j_†~™t':¬p[­ÔSÌ›åêezaÕYCg8`O9­ ØZXÙÊlü?ýˆ’¾M¶"Œí‰™àh݆·¥êŒVÊþÞye£Iõÿ�yzÄUú¥¨hún¬Šº…½ÎÞPÈ€²U=A÷žÚF§§¶ý#Ty#ò稳L‡ýÙÖ)÷%ǵ�nÑXö:úKt¶:¬ºuûglS¤¸ÿ�žr•ýqÃÕElPEPEPEŸ¬êGL°ócŒKs+¬6Ñ2V8POaÜžÀÚ€+êz­À¾M+J%ÔCÈòcµŒœo|u'*ƒ– ô�‘cNÒ ÓšI·<÷“ç]̓$˜è8à(ì£�viTzU«&ó5ÌÍæÜÜ8ù¦õcíÀ�t��:V…�QE�QE�QE�QE�QE�Ù#Žhš)Q^7Yd0ô"E�sÒEuá•3Z,·zBòö€–ØzÅÝs¨w ZÝ·¸†êÚ+‹yXePñº†R2>•%`@« kq٧˧êNæí Æ ²Ep€ìU¿¼0¿EPEPEP7WPYZKus*Å(^Ià*ŽI¬Hmn|H¾~©ÛéŒsžã *öiþ¿óÏ {'…VDñ²ë'ͦé“ÙŸ–{‘ƒ’;¬|cý¬ÿ�pWA@ª¨¡TP0��RÑE�QE�QE�QE�QE�QE�fê:<WÒ-Ô25®¡ÄWq¸î°èéê§ê0pDzf­,·rišŒ+¥oÂgË:y‘“Û$§•$g ‚u«;XÒÿ�´­Å'“{nÞm­Æ?ÕÉŒsê¤wÐGHÔ—VÓ#»T1¹,’ÄNLr+u?F~z€ (¢€ (¢€ ËÕµ°Ë •¤?jÔ®säÛ†À :ÈçøPw=Î�É USPKÓäºti‘Ä¿zYáP{– ~5_FÒžÅ%º»O©]×3 ãŒáˆ¹ ©<’h,4e†à_ßËöÝK÷ì¸Xê±.NÅúr{“Z´Q@Q@Q@Q@Q@Q@^Ù[j6¯kyMýäq‘ì}ˆêjÅ’êçÃ#7²Éu£îÇÚœî–ÐÓCüQÿ�·ÔFXt4„R¬`ƒÞ€�C(e ‚2ïKXjRM·úá›OÉÿ�WŽZ 2ÿ�³‘ÑEoÐEPX—J.üca ¥•¬—8'þZ9¡üÍð*Û¬PÞWÙXcí:h(}|©ì}<åüÇ¥�M«jWvW66ÖVÜMw# ó§1*…BÄä#ÓÒ¨éÚî§«Û}§L‡A½· WͶÖEÜ:Œ¬g‘Vu_ùtúí7þŠjÀ³ÑüW{¥Éi¥CçMsr²Ûê·Ûå¥ ¹aV@7à°$œtàuïõèÞ4};GW‘¶¢¶¨à±Á8¸äáIúéOûOˆÈÈÒ´¯üIÿ�Æ+‘Ñüâ[-nÆæóRë‘tÍ©Ü4¥Úª’¿6âr§1Ôæ«ÿ� âÔ];}q Š [8¯V=Nà I$r×Q"´gpÁVLàžh±·ÔµËÈŒ¶Ö<±‡h÷&©!•аÿ�QÔ0 ûн£ßË©iÿ�hš‚Ušh^4È Ç#FpÄ ƒ·=Zãt¯ø‡NÔ´²5YSO³¹¹•¡‹Qsæ,—H ¡£&bUœ²à‚Ù9®«Ã_ò ›þ¿úS-�kÑE�W?«x¥t››´’Ð}žÑ#yîeºŠÓy!A.øÇâ+ ®7]Ó¯5„ñ~—`-ÍÕ‰ "ïY±!Xð 8Ç$Ær�5¢Öµ;ˆRht dŠE Ž—p•e<‚nE?ûWWÿ�¡rãÿ�¡ÿ�â«m+Ƈˆ-/§–ÊÂÚ„y6ºœîUËI”òÑd2)Ù†&ÐAÉ"¹ýOIñŽc¨½ÍäÌ—×(Sìw——&ÞÌÿ�v4*ym,Žcýã@ºkz”"&ƒ+4m±ÂÝÂJ¶`üÜ~„Sn5ýBÒ5’ãB’$i5g»„ìÁU~÷RHÜ×1 x_^žÊÆ]Fk…ê !Yµüæ·6fÙ˜œ²34t+¸ò§5RÇÀ~-ÆÚ®µöÇ‚æÂx"mNàÆ •Ÿ+ó™<²À„cÇRh¸‡[ºþÒµ³¼Ò'µûIa4n2ªXƒ´ç £Åq3ørîâ1™ìÀ¼‡Ýâ"@?»O±5Ìèº.³£ë¶Ûœ÷ÒOy4ˆÒ]‚þéó´×ËSÇÉ–kªñ<«…uiœYË€:“°àrx  4u’5‘U€ úƒN¨­aû=¤0“j™õÀÅK@Q@Cyr–VWRRÚF®�ÉþU5PÖíÞó@Ôm£RÒMk,jÁ$©€!ðÕ£YxnÂ'ÿ�\bÌsÒ¿ÎçñfcøÖoˆ|kcáÍV ¡ 4°„“ÝÅn˜ÝŒ# Ÿa[zMÒ_hö7qcžÞ9T€C(#ù×â>ÿ�Sñ|pi©l÷)impÌ­âJFåV<ìÇNùí@V~&ºÔ#Y,´Ÿ´£ ‘Zø$€À†èJ°ØúU¯í]_þ…Ëü ‡ÿ�Š®_Å^ñf­ªÝM¤ßCcm,©åêsÂÂUŠànÂ&1æMyòFzà$ÞñdÅV=^kHQ7+:ÄÎË—Úd’&.¡ÖFòðߌŒPk¥jÚvçÈxÌ’'È%Y‘†G•5v²<5ÿ� ¹¿ì!{ÿ�¥2Ö½�QE�QE�rÇÅ7~zFaÑ`7SÛZGw«¥¸1Hc;SÊ99�àŒŠÒûOˆÿ�è¥àÊOþ1\÷Øu{¸t«*Ú°kZ…Ì‹wtðîËÜÄ•ÿ�ç©$ÿ�²9È­«ø{Æ÷÷7—VÚ•µ´³ÀËǨαÂZ„ÚvÉûÑ&6àÀUöŸÿ�Ð+Jÿ�Á”Ÿüb£Šÿ�^™KE§hò(b¤¦¨ä ¨ê ûƒ\ýŠl¯ô«I¥Ôå²I8K;«¹„ènÒ#6Õ]Á�Bf8ÛÓ’4"ðg‰T_No‘nfšâê·*˹å1 à Â>˜ÊçoC@SjZâÝ¥£XhââHÚDˆê’ndR¡˜# ,£ñ-ž©¨¶´4ëû X [´ë$m.pÁpAq÷½ëˆµð‹-í yu÷ŸTtös^¶¡6ì´²˜Ã#ÎØ™K’Hb âºMÊëNÖ4Û;Û‰n.bÒ¤W–Y¼æoÞ§WÚ»Ž03´g(CM_±øŸX´^"¸Xo”z3ÿ�~”ý\ÖÝbÁ‰|kzÊÔéð#ze¤”ãêÌVÕ�QE�QE�aß(½ñf›lÙ1ÙÃ%ã/o0â8óëÃJ~ ±«jWvW66ÖVÜMw# ó§1*…BÄä#ÓÒ¢C³Æ³ë´èögý‰v?ïâçð£Uÿ�‘‡Aÿ�®Ó覠 Úv»©êößiÓ!ÐomÃómµ†‘w£+äTï¯Fñ£éÚ:¼µµGŽ ÀýÇ' OÐJ³ÑüW{¥Éi¥CçMsr²Ûê·Ûå¥ ¹aV@7à°$œtã+þ×?µtý@ëpj\‹™SVžWdk ªØù°·ó•9ˆž§4Úý§ÄddiZWþ ¤ÿ�ã¾¥®^De¶°ÑåŒ;G¹5IܬU‡úŽ¡ÜWÿ�/‹QtxíõÆ‚(-lâ½Xõ;€$1$‘È#\aDŠÑÃY3‚y«ºWƒ|C§jZY¬©§ÙÜÜÊÐŨ¹óK‰$PÑ“1*áNYpAlœÐ_¤ê7Í}ݬVóÚ\a˜Ê­˜Ò@A*§£ãíZU‘£ÈSÄöOý&‚µè�¢Šóü^±ð7‰²umõâh–X®-[zž>é#Ãì=h¤¾ñݤºœ† * >d†K«íHÛŒ´q¾Oîˆ2ò~µf+í~âš;H’)2:j’e<‚ƒ‘\ꋯxCű鶿gŸU>TQjÄcZ@¹}¡ð@;±ôu&Ò¼a¨x‚Òúyl¬-¡xG“k©ÎáU\´™O-C"˜aòm’(wí>#ÿ� V•ÿ�ƒ)?øÅF—úô"&£³FÛ.¨ä«`6î88 ý®SÒ|c§Xê/sy3%õÊûååɃ÷³?ÝŠž[D‡Ë#˜Á?xÕíÂúôöV2ê3\(Pi ͨÏç5¹³6ÌÄà‘œy£¡]Ç•9 ¦ãR×-#Y.,4x‘¤HÕŸTìÁUÔu$€=ÍjºÅ¥Ý”wºeŠCsp ß û»)*Ç;L+Ÿ»ë\]€üZ#µ]kíÍ„ðDÚÁŒ#+>Wç2ye€#ÇŽ¤Ö–Ÿ¢ë:<–ŸÛœ÷ÒO«¤ˆÒ]‚ü’gh1¯–§“,:ÐGâØ‰ðô÷‘ßéä_BG]Ñ|Ä÷”2ýÖØ!”2Aw¬ßH±x[W‘¸T²™Ð!«¶q4Vñ9ˤj¬}ÀÅ�MEPXž!†X…¦¯lŒòéÒ’5ë$ 1*Üã r€w­º(…Þ¦k–ð=ͼqÞBçæŽª}Áª¿ð‰hô ·üSÞÞ¹"@N3å_þ|\ž‡þ˜“Ðÿ�8û¸ÛÒç#"€<ÿ�⦃áoêÚªiÖé:BRÜàçÍ•OàH?…sŸ/ìü]¡}ŸYðë­í²ÿ�Çé·a ÊçÝŒÇ~£¸Á,1NKH·.õÔ{Ö?‡ÿ�qs¬éùâÞýäAê³)?÷ÛÈ? �wü"Zýíÿ�#Z6VVÚuªZÙÂÀ„•D�’IüÉ'ñ«PEPY—žÒ5 ¦º»Óà–vP¦F^HüëNŠ�Æÿ�„K@ÿ� ]¿ähÿ�„K@ÿ� ]¿äkfŠ�ùÃÃqøˆüRÕ4X¬í.´xõY ó5ÎÈÔ30UqÎýƒ…ç§@9¯vÿ�„K@ÿ� ]¿äjíî—i}a5›Ç²9NòbùY_;ƒƒÙƒ�ÀúŒÕmþyLÚ}ùÚ6˜0&C²¨ôlŽÌs€HÚxsG±»K«m>§Œ’(år0qøUm`¶¥¬Xhñ·îãu½½ÇhÐæ5?ïH÷°«:¾°4ó­´?kÔ®8‚Õ[õw<íAÝ¿’@/ÑôÆÓ­ä3Íö‹Û‡óngÆ7¾�À”��€îrHQ@Q@Q@Z�m6{­ ^»¬É?zÝŽ@î1)ŽÀ!þ*¹ éZÊÜ^ØA<ê›G_˜.sŒúf“XÓþ(¦µ˜[êÍæ[LF@=Õ‡taÁˆÁ�„ÑõuÔÒX¦„ÚßÛ·6®rc'¡øõ :û@�ÁñOƒí$ð¾¥ý‰g ¾¨°3ÛH±†ù×0Ù8Ç#½y·Â Ûÿ�ÞJ5ë)l¼²`f¶hå¹`p|²Rø¸8ÈõãÞ«>ïDÓîôä±6ë 1Ð� aѺG·¿bhÅ••¶j–¶p¤0!%Q�$’2IüjÅaYê—ZuÜZf¶Á¤ìµ¿ .O+ÂIíѱ•î£v€ (¢€ (¢€1äð®…,²Júe¹y¤s·ï3Iú’I¦Ÿ x}T³i–à’HéZò˼ÓH‘ÄŠYÝØP:’OA\ï•7‹yÕáÐ?†^ûž®:¬^‹ÕóΆ�ðæÐüE¨üRÓ4¶¼yt ˶{{«hD1Ï3€@àc<ƒFAï¿ð‰hô ·ükùiò|‹ò}Þ>ïãÓŠu�cÂ% Ð.ßò4ø´½@[F+h-p“,Àc˜çی֣ºÆŒîÁQA,Ìp�õ5ÏFòx¦î9B²hvòBx7Ò)ÈlÏ FG÷Èî˜߇-îÊkëÅd»Ô&72FÝcR�>ªŠ€ûî=ëbŠ(�¢Š§«iúZ+_ÞÛÛû¾lK{�y'é@(¬C¯Ïrvéš5õÏK2}š!õ2aÈ÷Uj>Éâ Üý£Q¶Óã?òÎÆ/2Aÿ�m$?÷ìP|DͧÍc®®vX»%×µ´˜ßð±¹öCUµOÃÚÐŽ!ju¶‰·F-!3*·CûÁò)ëÕ‡zº¾ÒYÖKÈP•y!ŸÔ+eWþT´•ü/s™tX鸎ÆäŸõð AÙ¿ yÆà ÿ�øFd½Éðþ—¦ÆOÞºc<€{Æ„(ÿ�¿†¼ûÂÿ�d‡â§ª» Úãu´q’Ÿj,sƒÂ.qŽäc±¯u¢€1¿áÐ?èoù?áÐ?èoù±¨kšv™*Áqr ËŒ¥´Je™Ç¨Ab=ñЍ.µíH²ÙŦ@å­ïï%Ç´Hp>¥ò;¯j�¿ic§h–“}š(m-Ëe í\àÄŸ`?*¡ÿ� ,w³E³ŸS?óÚ?’Ü{ù­Ã÷7j¡®èpZ螥s4Úõµ¬³C%é$n¨J•‹0A¹÷5pÙL—±Ùjbáã2,~]®J‚?ê}H ÿ�fjÚˆ?Úz—Ù¢=m´ÒSF˜üçê»+3Qøká­GWÒ5 ,cVÓeyví @Á•/‚ òOOJžÞEºeÅš± 4*˜-÷I|—ù|Œà?ã9<Uè´Ë©´^)ÔÝC2’©jFTGúž ‚? �šçÃz5åÜ·WtO)I òÄ�£?€ð¨¿áÐ?èoù¯km5ä÷ÁâY¤³˜A00Û ®Q$Ç0óòȧ#Ö®øz{‹(›«‡¸–;«˜|×U Ê“º.B€3…� ¿áÐ?èoù?áÐ?èoùÙ¢€1¿áÐ?èoù|Ñmnb¹‡M&‰·Fàr§d~ÖµPÕ5h4¸£Þ¯-ÄíåÛÛÄ2ó>3€?RO�rHGįî,´8y72 ®ˆþ t ·ýöÛSèÌ{Víeèº|ö±Íw~ë&¥vCÜ2ýÔîÆŸì¨'¤±êMjPEPEPJ°‚zÂ:mö‰óèf³êtÙ_h_úâÿ�Áþáù}6Öõ—§ø‚Æþãì…žÖü µ•ÈÙ0õÀèÃý¥%}êøöñ¶?†ÿ�Oõãt22'ÿ�Ç}«CPÓ,u[o³ßÚÅqrEÎÓêP}Ç5ËëzEæ“q¤ßéÚ¬û ¼X|›ìÜ"‰G”>bDŸy“«ž€ãÔ³¢±§­Ú’/t#2þ³N¹YÔ¬›ú Ô¿ð•é)ÅÔ—G¿Û-e…Gü ”)ü(jŠÊÄÚÙòµÍ5ñýÛ¸Ïõ«k©X:†KÛfR2•H?­�Z¢¨K®i01YµK(È!î`~&ª·‹|=œG¬ÙNßÜ·”Lß÷ÊdÐ͉ÿ� NJØhÚ¥×y û:©˜¡ü¤1ø’÷†šÃKŒõƒs.=™‚ªŸø �Ö»¼¶°¶{›Ëˆ­àA—–W «õ'Šå5+GÄ&+¯ZÉö¡Œ:ÚùI #˜ÕÜêØ¬ cjÛÃvÝ¥åÏ›z‡)qxþc!õA¡ÿ�p ×  GbtïµZy­,ì~Ñ%ÁÌÆE$2ÉèTä`p:ŠØ¬-@ýõˆû¸þÐAü8 oU�ÿ�;€†PÊAdÞ€Š( Š( Š( ¨jZL‰Ž]ò[Ýß&ê‘ç¨äTàeH 㧯Ñ@ÛWšGÉ®Û~àÌFÕKDßNZ?¯+þÐé[V÷0^[¥Å´Ñσ)$NXz‚85-cÍá«u%Ý™›N»åæ²/yõdåû²š�Ò»´·¿´’Öîš FׯA„—W>q¥3Üi"¿~^ßÑf=×ÒOû럘ÏبÚÖ¢ïPXþ(}}Q=OEÔí•”†Í·ÚQ‡õ%øú@™ÈÈ¢¸5ñ.‘áwfÕ-åÑÉù¬ž@³ÙóÖ4l3GþÆ2¿Ã‘òŽ®×_ѯQ×U±™]w/—p§#×­�hÔ—–Ú}œ·ws$6ñ.ç‘Ί©¨xƒIÒìe¼»¿!ŒdáÁ$ö�I'€&¹ë}_J¿½‹R×u6ÜFÛì´÷¼öIóa¤üÂç'æ Ú\x’hï58^ 1d¶°a¤#‘$Ã낱öÀ-Îôu‰ÿ� ^”à›V¹½ôû¤³)ÿ�*•üÍQ×.Æ,ôAlÿ�Y¨\*þ!cÞOЕ  ºÈ¿ñ•ɲˆK}¨c?c´_2AîÜổõNòÂAl÷#ñ—h>üp0³„vÜ_ÿ��úRXjÚe­°µðî“qs$±Ûˆá'»yµÜ‚OÖ€,&—w«:Ï®l=:6ÝŸY[þZ7·ÝŒ@jܬ0<Kz>fÓô¸ÏdÝu'æv*ŸÁ…/ü"öSó©Ïwªâò\Æ~±(XÏýó@Oâ}"ÚÞ;±ur‡ š5ÄŠÚT¯ãQÿ�hk—¼Yèégÿ�–º„ÃwÔGìý )­x-áµ…a·†8b_º‘¨U@*J�Äþľº$êZåÜŠO0Ù²Çø&Oü~®Xhšf˜í%•ŒÊÿ�~PƒÌ÷œüÍøš¿E�QY·úö›¦Ì¶ó\o»a”µL³0õ ¶=ñÜЕAz¶c2߈M¡B%ãa^û³Æ>µ—ö{Qèö±iPŸùiw‰f#Ú4;WØ–>ëN‹Ã6&d¸ÔmNåVKÖúª�Oº¨4ƒ½}c¹<?gsâ5T•|”0ú™¸™ÝÜÃ[ ¿¦´Þ'…æ›[Û ’Ùiû h÷dvÄ¡¾žYö®¢³5-OÕ%[‰¢hîÐmK¸Å2@ëƒc{Š�ŸOÒ¬4¨š; HmÕŽ\Ƹ.}Xõcîy«•†-üC§€ ¼¶ÕbîÞ"\×DOÓ`úÒÿ�ÂDmÁŽ‘©ÚüKnnûƒì÷€ ø°àÝp“€4ùÿ�ô[V-ä:UÖ³®ž(µŽö…tÿ�K&/$¦3›°’þ|döÅnCâ]ìùI«X³°Á…æPüñ‚„ä~"®‹ "–ä„F´çRxkO–}:åü[¢ý¢Öîk‰$.dY/#»Ú?{•ÃÆTžñžM][ÀÞÔ¡Š8|Q¥Y´r\âh#ŒJ±It·(ŠÛþRŒ¤ŒaÛšô»›}>ÖÖk‰m ÄŒìDKÐ šñoƒÞ8ÖõëÇÓ5]KûBÛ“QH÷�“#¼¼t=€:)¼áÇ`‘xƒF‚ÑoÅòZØ£ü¨£%BN§vbÜ ÈÛ!«ºð´‘Í£I,N¯ß^2ºœ†i—jÅÙÑ4õÝztûeõ›bÖª'Š4UO/Oy/z :ÙçOûé¨üH  Ú ÀɬO·ë·‡šDvH审0,=Äq–ÏкÓO†…óo×oeÔÇüûòí‡ý²x{9z�ˆ´d{}|à•k²qk÷ã#û©ŸBW­[Ó´…³•®î&7z„ƒ\¸Æ÷Q?ÙRIÉ:‹*"…E�*¨ÀÐS¨�¢Š(�¢Š(�¢Š(�¢Š(�¬¿Z½ß†õ¡œBÒB?é¢üÉÿ�Z”P6—1^ÙÁu ÌSƲ!=Õ†GèjjÄð¦"Ð’Ç<ØK-˜ÂÆåSó@‡ñ­º�Ž[xgÇ rmé½AÇçT΃£IÒl =I¶Oð­ (œZN�Ä:}¬c9ÂB£ŸÀUÊ( Š( Š(  A¨5‡`N…~šL‡ýr³Üÿ�ÆLè+þÈ#øyݪº…„”–·¶>d8d`r¬§³ÔPª+/G¿ž_6Âÿ�hÔmp%Ú0%C²¨ôl;GlJ�(¢Š�(¢Š�(¢Š�(¢Š�(¢šî‘FÒHꈣ,Ìp�÷4�êâõí/NðôƒS¶°¶ž‰‚Ë¥´*æwn3�ÇË&$}Ö�“·–«÷Þ8Ò-Ù °i5kÙIX-ìËæ0ê7‘qÜ–ª:nŸâ‹›£ª^Áai¨H»CÜ1¸û2wHãB�÷mä±ë€€ðÞ‡¤ë5û›œå"µH�K<T©�ù££À�g;—:¾‰£È`{‹x§n~Ï î•¾‘ ,Xz‚n&•õõ[™ïÛXþÏot� #ˆ‚žü1,GÈ­ŸK¥µ¬°éú|ztа[›1Æñ?û@pAêd š�oöÆ¥yìÝ}§¤×ò d#ýÜ4™ö((þÌÖoú~´`B9‹N„Gø}Ì~«¶¶è  «O é6w r–k-Òô¹¹fžaô‘ÉoÖµh¢€ (¢€ +2ÿ�_ÓtùþÍ$æ[Â2--ÐË1÷ع {œSUÌÚþ¢†t˜OI.14çèŠv/±,Þë@óÏ ¬=ıÅ ´’0UQîOJÇ#ûw%„ú€=.îmþ¾c˜{¢½I†lán¯LÚ•Ò¬×Íæl>ª˜‡ýÕ±@gIÔµu]QãˆõµÓ³ ý ™ó ÷RŸJÑÓô»* …¤6Ñ“– ©=I÷<Õº(�¢Š(�¢Š(�¢Š(+‹k{¸ü»˜#š?îȇäk0øOç%t=9œ–ŽÙŸÄ�kbŠ�ÃohLŽŸbeÆyOû¡±X÷^Ðtßi²ÿ�eÛµ¥Úµœ‰"ï_0ñ±ÝŸIž¥–»JÍ×ì%Ô´K›{rè-³‹2ñ“í¹V€i èö ,ô›wtCùZWM¾‹SÓ-o¡GqÈ¡º®Fp}èEZ Š( Š( Š( Š( Š( Š( Š(  ]7ýÄÚÕ®xœCz¿ð%1ÿ�Aÿ�{ÖÕb_³x¯Hºþˆç³ov J¿ŠOûê¶è�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(/X°ž_*þÃhÔmrbÜp%CÑ1ôl{lZ}ü”wVû¶>AWd`pÊó#ÔUªÂ¿B¿}Z1þ9Ú?€ãqô�ÿ�dü<€nÑH rB)h�¢ŠÈŸÄÚD3½º]‹«”ûÐY£O"Ÿu@Jþ8  z+ûC\¼âÏGKD#‰u À?Q{³ô,¦ìKë¦Î¥®]H½á³eóRdÿ�Çèýþ«§éh­}olîù²-ìê}…Pþßšè¦h÷×@ôšdû4CêdÃîªÕrÃDÓ4Æ/gcR°ÃJ2?ûÎ~füM_  O²x†÷þ>um>3ÿ�,ìbódöÖAƒÿ�~Åfjšv“e,0›7Öõ™Akho¥i±‚îÊÄ€‘–�z�IÁ×Õ5‰!º]7M‰nu9�mŒNÈç÷’Ðpp:±È›IÒ#ÓIV¹¾ŸæîAóÊFqþꌜ(àÄôX<—wR‹Fa‰'Û´*öŽ5þqߩɿµh¢€ ËÕte¿–+Ëy¦¥�Ä7H2qœ”qühqÊŸ¨ÁÁ­J('KÖævÓõE®«îxA%$^ždl~ògñÁŒëUSI¶Õ­Ö9·¤±6ø.";d…ñÈ{~„dA"°WÆ0i:‡ö&·*˪qäýŽ3!º8ù&6Àä6R �ନ®nmìíÞâêxà…^I\*¨÷'Y>f¿¨ÿ�«†&üSb{ƒÿ�S±O¾çúSíü5aÂÝ]ùºÚ¬÷Ïæ>¨¸ Ÿðñ ߺ6=ðíq'î-ÿ�ï¶aîŠÂì}GP�êú¤;Ûiù?Ϙ߃(>•¹E�U°Ól´»"ÂÒh³’± \žäúŸsÍZ¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÃÑص=WH9Û¿k€ùå1$ÂA/†ßjܬ=hý‡UÒõa ~Çpxÿ�W)IúH#Áš·(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Å8‹HKìscs Ñ>ˆ®<Ãÿ�~ËÖÝWÔ,ãÔtÛ«¿Õ\Âð¿ùXTðõ䚇‡tû©ïÞó½¤?PQ@Q@Q@Q@}¯iZlÞEÕôKpFEºò·Ò5ËÀUQ¬êW˜þÍÐç(zM~âÙ1þîOÀ   º‚òêÒÎÙæ½¸† p0Ï3…_Äž+/û3Y¼éúפªÓ¡þß{ªí©­<7¤YÎ.Íf¹"âåÚyGÑä%‡ç@þ›âHtÛ±¤ØZÞj6RiòÃØ×‚L>d…Q‚…%v’vñ—¬x’ôÍa¥Æ{&ë™1õ;OàãëZ–©bö³îˆet8hÜ«©ìÀ€GÒ«hú„×k+૨Úaf 0²)ÎÙTu°xìC/8Í�Aÿ�ÅœüêsÝê‡9+y.c?X”,gþù­x-áµ…a·†8b_º‘¨U@*J(�¢Š(�¬]GU¸ší´cßûùÜnŽÌ[ûÎr0OSÖ;ÝFëS»—JѤòÚ?–êÿ�he·ç”LðÒã<t^­ÙN¦§Zév‚ÚÒ=‘î.Ä’ÌìNK3Y‰ä“@ézU¾“lÑÂ^I$móÏ)Ý$Ï€79îxÀ���W¨¢€ +.÷Ä:u•ËZy¯szM­ª¥›•s´VÀ÷¨7kú‰ùR"Ü÷|Opû´>ùqí@·WvÖ6íqwq¼ ÷¤•Â*ýIâ²F¿-÷.›=à=.'ͼ÷Ó Ì=ÑX{Ô¶¾Óà¸K«%ýâ­Íëù®§ÕAùSþ�V½�aûPÁÕõYY;ÚØæÞ#ìX#ß@ëV¿°4Ÿì·ÓN·K79h£@ƒvs»#6yÝ×<ç5¥E�sÑ_Ýxzd´Ö%3iìB[êMÕI Ÿ°98Ðô88ÝÐÓdŽ9¢x¥ExÝJ²0È`z‚;ŠçÒ<&?å­Ö‚>¯-ˆþoÿ�¾—Ý~èIE2)cž$–)HÜWCÀô ÷ú�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�©ªXGªiwV±U¸‰£Þ½T‘ÃpyJ‹B¿“RÑm®f]—JNƒøeBVAø2°­ ÃÓÇØ<M¨Øž"¼Q}ù¸I@ú}d4¹EPEPEPEPEPEPEPX¾Dšµ‡kkù}Ö\MùfF…mV"²øÖQ–þÁX½ 12ß4·ENÿ�VÓ´´V¿¾·¶ ÷|é–>€§ØPÊ+þ ®Ž4½þèùk2}š!îL˜b=ÕZ²ø†÷þ>5m:3ü1y²ûi ÚïÝ�l»¤Q´’:¢(Ë3�=Íc·Št×s›Sm°ˆÊ¹ô2‘OÕ… á]%d¼…õTä=ü>ª«eTÿ�ºl€B¨�€j�ÅûGˆïGî,ìôÈÏG»s<ƒëd/å!£þÓt?âkªßÞñƒ“È‹þùnG³­º(­Ž›c¦Bb°³·µŒœ•‚0€ŸSަ­QE�QE�•¬XO)‡P°ûFÓ&0NÈqº&>ƒÙ‚žpAÕ¢€*é÷ðjv1ÝÛîØù\a‘Ã+Ì ŽÄµX7ãûP}^0³ç#ûAHÈ �?û 7ðœî’î$cÍ�-sÓ_\ø‚åì´™šŸeÖ ‡–#¬pŸ^Ìý Ëgky|XZ+Y$‡C¬·(v½çb±‘È®_«1·&·¤éŒºe¯ï§…­Œ~cF£€ ¯8À-ï@VVVÚuœV–¬0D»Q Ô÷Ïz.ï-l-šâòâ+xïI+„QøšÊ?ðjC'G€úâ{Œè´?÷ðTÖžÓ­®VîT’òõz]^9–Eÿ�w<'Ñ@×§¿ûLšéOü¼ÜæÞô,7·±U úÐt;ËþuVic=mlóoÐLï–ÁþïjÜ¢€+ÙXZiÖâÞÆÖhAÈŽ¹õÀïV(¢€ (¢€ (¢€ (¢€9él.´ ÞïGˆÍ`ì^ãM^ªIÉx{ç%:7QƒÛ…®©gÝ”Ë4ч=ÁAàƒÈ<³X—ÚMŵ䚮ŠU.ß›‹Wm±]àÏ÷_ÇЂ1€ º*†•«[jÐ;Â9bm“ÛÊ6É ÿ�u‡ò=ä5~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ãñ&,ÒËYgÎSÿ�Lä“>Àÿ�öÌVåEqoÝ´¶Ó x¥C©î¤`Ê€%¢²<7q,º2[ܹ{«&kIØœ–d8 Þ]¯ÿ�­z�(¢Š�(¢Š�(¢Š�À¾Ô5I<PšM„Öp ²ûKI=»JIß·.?Z±öoÿ�ÐWJÿ�ÁlŸü~ªÍGÿ�¸Gþ֮Ѐ2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè  ³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�­;†™m¥kxÒIÂHå›À{àãÐÖ—ŠàoiÞ"Ôí䵎òçò­ã’è uÜ3±2~^§në@¾Íâ?ú é_ø-“ÿ�Öuþ—âiu2î-GLf·™ƒ‘`ëˆÙæ~Fvp1Ðب.~#hé©Fg–Í&hÌ‚ `-~Ó”y0rvŒdç›ïãm+«ËY.æI¬Ë¬Èö“•1‚)óœÍçvõÆs@®|=â‹Ù÷Üx²!üûÛØ4)ÿ�},ÂOü~¦°ðÝþ–í%”ú$R·Þ”iRýç3î?‰¨¼7ñ Dñ âéËr±jŽ×lÙ?—¯c¹FÒBnÚpÃ=8®²€2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè  ³xþ‚ºWþ dÿ�ãõ^Êÿ�UÅ-¤ßÏe<bûJ¼Í~ÜÈÙ¿\ïüÔû„íj�訢Š�+—ÒRÖýÄšõô;ûˆ(b·Ú¨’QóDOAÜ×Q\ÿ�„ãËRÿ�°­çþŽj�³ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÖ½‘ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÖ½aÝj:„>5Óôä–ÐiÓØ\\È&óCDñ/¿�8ðyàC¢Þ²•oj„‚ V¼ÿ�äÆ>¹{ÒåñF¦úB «kåA’£nÔgòùA†q‚Ëæø…¦Å<±%•üÅe1BbpÂt·`™qŒI"›ns‘‘Í:×â}ªiv¶7ÒI©Z¥Ô/ˆ•U3 Ü †è0HA g&€,_xJ]F‚ãĺߒ?åœM@C²!‘ìxö©lü3&Ÿl¶ÖZåý´ ÷c†ÞÑ~ç­þ)[.©y¤ß˜áE’]ä©“ÈÍ€ }Ü äø•¸½¹m'S’ÃìörXC°’âìÌgùÑUÎP¬@Œí# ‘Ò€:ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf´­§K«Xn# TWPë´€Fy¡ö©h#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(Â÷WwZ}ؼº{™ ¾¸euUb©!UÎÐp=+n¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÕÐPEPö¡ªIâ„Òl&³—ÚZIíÚRNý¸‘qúÕ³xþ‚ºWþ dÿ�ãõSþj?ýÂ?öµtT‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãõ¯E�d}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øýkÓ&˜$2,ÅO–Î¥”68$ í‘@Õ߇õÛB B=gN¶¼‹ e‹MqæGÏîÜðËÉ÷Ehý›ÄôÒ¿ð['ÿ�¬;ÄäzYÔ5K:h›UþÍTµ²xÙH½û6ãºfÈlg»ŸâÇ$ß4Ûv½i´½Q-¬¦X®.vÂQO%¸| 7ó"qÀÏÆ({ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�ÇéÞ×cñ–/£±¿²Ê/à0Ê1ܯ¡}ëV€2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè  ³xþ‚ºWþ dÿ�ãõ^Êÿ�UÅ-¤ßÏe<bûJ¼Í~ÜÈÙ¿\ïüÔû„íj�訢Š�+ oQ¼Ô­æŸo µÉV['•ŽNK T¥oÖ6þ¿Zÿ�°‹ÿ�è @û7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú×¢€2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè  ³xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�¤Õ¼K§èÚž›auqM/–Šó*· !IËeŠŽ=sÚ²õÛi ª­í»/Ù.¤·‰”;#ì³[¢ÎÁNß”°èO�ó€ ­ô[k·QêšHŠíQ¤Ùò¬Q·v<îêŸáUÿ�³xþ‚ºWþ dÿ�ãõHøëBMrãGšk˜¯!mðörìfcŒ>ݸÝ<C¯ñƒÐ‚hŸ‰~†mJk«¿#K²ŠÙÅãÅ(´­(T¦X~èËryàÐßÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�ÖœÅsoð¸x¥PèëÑ”Œ‚? ’€2>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~µè  +ýV?¶“=”ñý‹í*ð[4Dûps#dVýs¿óQÿ�îÿ�µ«¢ wþj?ýÂ?öµtU¡Ms­.«k©Ïg8·û1TJîÝü@óš?²µúî?ðþ&€6h¬oì­_þ†;ü‡ÿ�‰£û+Wÿ�¡Žãÿ�aÿ�âhVâ¹¶–ÞBá%BŒc‘‘°FH*}Áv¬<  ÛÙ-œqßýkm©Ü°SîªfCµG ž•kû+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�¦Þ�ðÓÛ-±°“ÈUØ"sÇÙÅ·@øÏ’6g®=ù«/á MFk÷³gº˜(yy Êùd0Ë`6aˆîæ5çŠöV¯ÿ�CÇþÃÿ�ÄÑý•«ÿ�ÐÇqÿ�€°ÿ�ñ4�i¾Ò4‹ù¯l`ž)¦‘æ}ªVG‘É,å ÜI<ã88é[5ý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄÐÍs¿óQÿ�îÿ�µªÏöV¯ÿ�CÇþÃÿ�ÄÑa¡Mm­>©u©Íy9·û:‡*îÝü sš�Ù¢Š(�®Â?ñ婨Vóÿ�G5t†¾³ŽYÞ ½J<Ï;¤WŽ«½Éf gŒ’hrŠÆÿ�„n/ú êÿ�ø'øÑÿ�Ü_ôÕÿ�ð:Oñ  šËÔ¼5 ë7 qªhšmôêK«T•‚äœÀœd“sQÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÐæð¿‡î$’I´-2G••¤g´Œ—eû¤’9#·¥fŸ�è§Q7*†;c³ý8¡HFÐ� ¼/¦í§' ‚jÿ�ü#qÐOWÿ�Àé?ÆøFâÿ� ž¯ÿ�Ò�J|5 ›³Mò7#y_dM¹UÚ§ÆBð=³xsC¸GIô]:U‘U=ª0e°# ${“Pÿ�Â7ýõü“ühÿ�„n/ú êÿ�ø'øÐª¢*"…U� �)kþ¸¿è'«ÿ�àtŸãGü#qÐOWÿ�Àé?Æ€6h¬oøFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ��ƒÂ?ñ婨Vóÿ�G5tKKÒ­ô{F¶¶2²´¯+4®]™‹1$ûš»@Q@ïüÔû„íjè«ÿ�BšçZ]V×SžÎqoöb©:•Ý»øç4ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄÐÍý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�LžТˆÅ‹§$fqrQmP0é&1÷Ç÷ºÔ#Â>V <=¤‚ ‹(ø!‹áõ$ýNhþÊÕÿ�èc¸ÿ�ÀXøš?²µúî?ðþ&€4,tû-.Õmtû;{Ku$ˆ­âXÐ×€�«5ý•«ÿ�ÐÇqÿ�€°ÿ�ñ4ejÿ�ô1Üà,?üM�lÑXßÙZ¿ý wø ÿ�GöV¯ÿ�CÇþÃÿ�ÄÐÍs¿óQÿ�îÿ�µªÏöV¯ÿ�CÇþÃÿ�ÄÑa¡Mm­>©u©Íy9·û:‡*îÝü sš�Ù¢Š(�¬mý~µÿ�aÿ�жk hW°ÝÝÍg­Ü[¥ÌÆfÈ‚±�pJç �Ü¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  š+û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�µ}£Xê0ÝÃwÉÚ*L<× IÁùpI?.9¬ÛßèŒ7q]ÚÏ*]Ü™½˜Äb'!òŠ01Æ8cû+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�ŽhWZ¢êSYÈ÷k*Ï¿í2ຈÀ%w`ÿ�¨ˆò:Ƨ¨¦·ƒ4#·m¬ÑŠ(c0ÝÍ#ß°!WvùŽ1ÃÓŠ›û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�׎5†$‰*Œç�S«û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�Ù¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  ßóQÿ�îÿ�µ«¢¬k kmiõK­NkÉÍ¿ÙÔ<hWvïáœÖÍ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�TÔuM?H¶ûN§kenX/›s2Æ»A– gƒPCâãN“QƒXÓ屌€÷)r’p`p9â¹oŒv·Wÿ� 5K;«Ë»†…b†Ú•‰£ )ç§ç\ÄMR×¥ñµ¢i:ÌV×¶‘–“E%ÝÊÎÈbÀm«e˨Æ9Å�{ÍâzÔ¾*â ù³ÿ�„Ÿû(k–*‚8îZ/³<n.Êñ¡‚à»Á\Um%üy}¢xfëÍzÀ¤¤÷aq4¢äM˜üÅVBÊcÚ>ääägîµ ·–°ÜÁm-Ì1Ü\nòbg¤Ú2ÛGSÉÇJðë ü^ž%?‹cÓÚûW„;ÛÜ˲ØÄ¦Õ¶È0HrÛI猊ž[OMâÍ çJ²×æÙ5 ³ß ¦·m@…¿ÌjdÜ6±'#©R¦€=Šð FOÇáû™4áâ£2éÖ ‘nL§Só‡›åަ//~@ýßÝÇ8­ 7ˆ‡‰oüøªkd×,b™nãEµóAy‡åuÛË/ð”‚p@=žŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ����������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_SDap4.jpg������������������������������������������0000664�0000000�0000000�00000031412�15030617045�0023221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�@ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +ñ¯Š¯ü+¨h’ƒfº]Ýò[]¼ðÉû¤læO4©Ž�V>½qÙPEdê)ðö“tmu{K³¸�1Šâò8ÜÐáˆ5Wþ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: +Ÿÿ�„ïÁÿ�ô5èø1‡ÿ�Š£þ¿ÿ�Ðסÿ�àÆþ*€: (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9íkÂ6ÚüòGQÔ%Óæ1™tÝéöw(C/ðo€H Ç5ÐÑE�y3h:N¿ñë[ƒWÓíïaH…Ñ'Œ8VÜ£#=ðk±ÿ�…oà¯úô¯üZçô¯ù8-{þÀ°ÿ�èK^‘@¿ü+Я¥à2Ñÿ� ßÁ_ô+é_ø µÔQ@¿ü+Я¥à2Ñÿ� ßÁ_ô+é_ø µÔQ@dŸ <&Úµ¼ëáÍ(Z¤¤‘}œ|ÎÍVÆ1ÀWð*·ÿ� ßÁ_ô+é_ø µ½%òÇ«[Ø%¦‚Yƒç€£~>`üªÕ�rÿ�ð­üÿ�B¾•ÿ�€ËGü+Я¥à2×QE�rÿ�ð­üÿ�B¾•ÿ�€ËGü+Я¥à2×QE�p~$ø{àûo jóÁá½29¢²™ÑÖÝAVH#ß5•ðßÀ¾Ô¾èw—¾Ó®.f· $²@¥˜äòMw^+ÿ�‘;\ÿ�°|ÿ�ú-«áOü’ïרÿ�Ð�Yÿ�…oà¯úô¯üZ?á[ø+þ…}+ÿ�–ºŠ(—ÿ�…oà¯úô¯üZ?á[ø+þ…}+ÿ�–ºŠ(—ÿ�…oà¯úô¯üZ©Ã ®¯s;øsJ6¯I~@ù]ZBçÇ!À}«³ªé{ê3Ø€Þl0Ç38ÚåÀǾcoÒ€9ÿ�øVþ ÿ�¡_Jÿ�Àe£þ¿‚¿èWÒ¿ðk¨¢€9øVþ ÿ�¡_Jÿ�Àe£þ¿‚¿èWÒ¿ðk¨¢€9øVþ ÿ�¡_Jÿ�Àe® ã‚ü3£|6¾½Ót+ K¤–²ÃV�¸‘í^Ë^oñÛþIF£ÿ�] ÿ�Ñ‹@‘EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP›é_òpZ÷ýaÿ�Ж½"¼ßJÿ�“‚׿ì þ„µé�QE�QE•qŸéÒb‹ct¥±À&K|}NäkV˜eŒL°™JÊYP·Ì@À$A¸~cÖŸ@Q@Q@+ÿ�‘;\ÿ�°|ÿ�ú-«áOü’ïרÿ�Ðmx¯þDísþÁóÿ�趬_…?òK¼=ÿ�^£ÿ�B4ØÑE�QE�VMº0ñv¢åNÃajc‚D—¨üëZ˜%ŒÊÑS"¨f@y�äG¡Áü�>Š( Š( ¼ßã·ü’Gþ»Aÿ�£½"¼ßã·ü’Gþ»Aÿ�£€="Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š©>«§ZßAcqkÝÇú›y&U’O÷TœŸÂ­Ð›é_òpZ÷ýaÿ�Ж½"¼ßJÿ�“‚׿ì þ„µé�QE�QUµ è4Í6ëPºb¶ö°¼Ò°¨,A^quñXkhZÊÚÊ9¿á“Är¤èÎ<€FÈT«œŒåŽF†€=[“[µ¿Ãm4%1É.Ñ,þuv¸¯xÖãIø\|a¥Á –··¸ŽH+)@Áàþ­yâìïéšÊ©U‚gµuê²Du> «dØ=sÀýQ@Q@+ÿ�‘;\ÿ�°|ÿ�ú-«áOü’ïרÿ�Ðmx¯þDísþÁóÿ�趬_…?òK¼=ÿ�^£ÿ�B4ØÑE�QE`ë¾!þÍÖt=S{«Ï"F_¢G‘±Üã�VÏl ꥋG­Ý_—f¶†˜äiI?˜?*ÄÐ|Iy©øßÅ:ÄPt²ù2F¤3ùÈÎwd‘Æ�ãßׄ>#¾?ŸÂÛ-ũю¢³>`4Fó‚:žÇ§ M…á_i÷nñˆî¬/f°ºEû¢X›¯±>ÙÇ=kv€ (¢€ óŽßòJ5úíþŒZôŠóŽßòJ5úíþŒZ�ôŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óωãOºðÕÅ®£_x’ÊÞuŠîDS 6†<s^‡YÚž£kMjºE…ûDŒÝ[$¥ëÀã  %ñ§‰u_�xâþ}6öâîÚÛ@ŽäÙßÝK4ežõcÈø`„�}¹ÎM\Ðü]â8,üA#ÞÙȶºî¡·W)$© q¶“rÅó1,7lùNr=&ïÂÞ¿ç¼Ðt»‰¤@$Öq»2Œ`G ``{ jøOÉ@¾Ò–$”Ì‘‹8¬‡p1Ã|«Ï^¥�aø‹Å:Å¿Œ­ü7¢Ã`.[Om@½öà“�û|¤ ­Œ±o›�t5ÅÞx¿Zðÿ�Äí~ÆÎì\ZÝk]„q_I$ÉoöˆdfhÆñ´n pFc×/´3Th[PÓ­.Úݸd1·ªä¥T—žžæK™´ *K‰$<¯gfqœ1$d·'ž¼Ð•è_|Mªé×7Å££§‡.u˜ÂÛÉ€ñ\4{ïyPžÇ,=0suO‰Þ©u¥ÈâH^×VÒ$i’HsÔ 3BÉ¿ª¯<ô5ìgÁþ%ÉðæK‚¯þ…Ì Éåîy4‰àï Ç<s§†ôu–2¥$1R¿tƒ·Œ`cÒ€25-~ãQøI¨ëºuì"àé“N“FŒ¡U‰P7nV+œðÃ8íT<!âMfé|;ìÖ¢ÖêÊß"<’Ü9´·ï¯»'c¯* 9Àì#Ð4h´§Ò£Ò,NåíÙLsžS<Ûµ-¾ƒ£Ú]Çwm¤ØÃsbæŽÝÑ� 0 �0�yU÷|G£|MÖì"¹µžÞm_MÓ¢Št‘–<2È<Ì ØûÇûµ¿oâ‹ß| ¾ñÇìWϧ]ÊÊWË’"áJwPg¾9®º_ øn{·»›ÃúT—/'šó=”eÙÿ�¼XŒ“ïSÇ hÑiO¥G¤X&!ËÚ-²˜ç<¦0y·j�òˆ~'ë:_†ë¼ñèÚ^•-лÞÓßµÊ.Z7ÝÆ3É!²sÒº;Ox†o ÚjÓ>‚ª= °`_�Ì~xÚ=Ù‘ÓJî9áq]£xEi­&mO2Ù ŽÕͲfC”AŠˆx_Ãëk%ªèZ`·–A,‘ Hö;ŽŒF0O¿Z�óø|u­kz—³ï¬a·Ö$ÔD’}•ÊKöpê­´¸`­ÃmÎAÆIÆ+–ðÅ}<-ä±Åt4'íBëÌ{‹ï>áÔyM»£Ù#b½°øsB1GÑtãlî‰öT³Œ9^ôؼ1áøÕâдÈÚÓ?f)i0ä’vqòòIã¹ @ø‘­ßxÞÏC½ƒNkyµ=KMy!ѳjŠêã.à  {g=ª/x¯[‚O=¥‰´+4µ ÜÎI’or«ÀôÚ}ëÐmü)áËKˆî-´ *âs$rGg²9êÀN>Õaô{)5I5óåƒìópš<’Á댜}Oj�ãü%­ /x—B¹Õ š}½Í¬zl—·fI%’H¼jîIrÎ2HÝ\ß|A­Úkž-¹¶»ºŠ}û/û*Ú9™#ŸÎ“n@q&rWqŽ1^•'…46†Êô»H ³¹[¸b†EYTä0Àà䑌ã# ݸÒtë»è/ntûY®íÿ�ÔÏ$*ÒGþë‘øP=á}Zîox³B˜¼–Ú\öím#ä³D¦{…9Ç `:bºÚ¥§éVºa¹xù·R™®%nZW Ÿ �ÐWh�¢Š(�¢Š(Î<usþ,ÐmúíêY]¥ø¸°°/˜ ±«ÊH £;›è=+Ñ袀<¶ßM±Ô¾?k‘ßÙ[ÝFº<,«<JàËÈu¯N‚m H ‰"†1µ#Bª@A^w¥ÉÁkßö‡ÿ�BZôŠ�Ë›Ã: ÄÏ4Ú&›$²1gw´Œ³É$‘É«6:V¦}…­ “þÏ Ç»3€3ÔÕº(Ž££iÚ¬R¥íœ2™ {s# .#pU”7P&¹qðâÎãI±³»½¹Im4öÒšâÕ•æÌàyrSŒ…Ûƒœàó]µÃj? âÖ,µ]*ïZÕ"Ño.Ê‘–ˆp©½Å$!Ú;¦sɰ|2gñ.•«^ݽËi6ÒEjÒÞï(Pò>ÕPÕÆ�Ç$ûV¤¶-&·k¨y€,óBS’íg>ÞYüêí�’þðôŽÎú˜ÎÇ,Íi$úž+ZŠ�¯eag§Ba±´‚Ö"ÛŠAE'×�uàTº&“©L&¿Ò쮥UÚ{tv®2GNOçWè _ÄaámjâÏI°¶™tû€$†Ù†clòk;áµ…ž£ðŸÃÐ_ZAuÙƒysÆs“Î t^+ÿ�‘;\ÿ�°|ÿ�ú-«áOü’ïרÿ�Ð�mÂ)áÏú�i_øøV½PGü"žÿ� •ÿ�€qÿ�…S¾ð…‹_èÚ†™omeq¤Ü<±$QGYdŠ@dcœuQ]ÇŸ¬7þ Ô­uÝ\^ëQœ‰¢ˆ)Q¶2Œ±nB£€F}òy§Øx!¬¼Ckâ)uÝJïUƒOKóLKÑ® <²Ã.7“¸œž¸âºÚ£“Ç®Ýß–SÖи(Ò’ò ü�SðLJ£ðí…ÌbA-Ííä××R€òÈÙlAÀÀUë½'M¿š9¯tû[™bÿ�VóB®S¿Ž*å�ÉbŽxž)QdÔ«£Œ†‚î+/þOÐJÿ�À8ÿ�µè mm-¬m’ÚÒÞ+x;b‰*ääà$šóŽšNšŸ5=A4ûE½i¡ÍÈ…D‡çQ÷±žœWªW›üvÿ�’Q¨ÿ�×h?ôbФQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEäÓAk$¶öÍs*àˆUÕKóÎ 3R>¢³í<I§\Ý%œ®öWÍÒÒñ<©ýÜðÿ�U,=ë^ ¼²µÔ-šÚöÚ˜ïG2Sø�žŠÀþÀ»Ó€:©-ºùt»ÍÄØdïOl6÷M(×î¬>]sJšÙGü½Z“q÷$�ëï¹@¦€7¨¨-/mu d¹²¹†æû²ÂáÔýâ§ Š( Š( Š( Š( Š( 7Ò¿äàµïûÃÿ�¡-zEy¾•ÿ�'¯Øý kÒ(�¢Š(�¢Š(¤—Â=bÛOòòg·–mùé±£\cßÌý*ÝeÏ ­â­>q’ÊåÀà1xú­ùÔ Š( Š(  ÿ�È®Ø>ýÕ‹ð§þIw‡¿ëÔèF¶¼Wÿ�"v¹ÿ�`ùÿ�ô[V/Ÿù%Þÿ�¯Qÿ�¡�ìh¢Š�(¢Š�*¬wË&«q`‡†¦-؇i�‡–:µYpC*ø«PœÆÂ'²¶Er8,r@> 2þb€5(¢Š�(¢Š�+Íþ;É(Ôë´ú1kÒ+Íþ;É(Ôë´ú1hÒ(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�È»ðÖsr÷p¤–7¬r×VOåHÇý¬pÿ�G *þ#Ó>ôpë6àõŒˆ.@úݹücúVõ•câ-6úäZy­mzF~Ét†O®±¸{®G½jÕkí:ËS¶6÷öÜÜì™�{ž‡Þ²°õ ;-¢ê²*v´¿&â/¢±>bÿ�ßDîÐýƒÿ� ¶'n¹¦Ï`[¨Ÿmÿ�}¨ÊwUõ³msoyn—³Ç<.2’Dᕇ±�–Š( Š( ŠÇ¿ñ%žâM#Bž)þÕªù¿fuPS÷i½òs‘Æ;wøØ 7Ò¿äàµïûÃÿ�¡-zEy¾•ÿ�'¯Øý kÒ(�¢Š(�¢Š(&¹…n£µgi¤DõU*þ×ó©k"çþG7þÁ÷ú2Þµè�¢Š(�¢Š(#Åò'kŸöŸÿ�Eµbü)ÿ�’]áïúõú­¯ÿ�È®Ø>ýÕ‹ð§þIw‡¿ëÔèF€;(¢€ (¢€ `š6à¦TUvLò$øí?•>²-¿äqÔ¿ìiÿ�£.(^Š( Š( ¼ßã·ü’Gþ»Aÿ�£½"¼ßã·ü’Gþ»Aÿ�£€="Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±®|1§Ép÷Vžvxç-qbþYsêëÊ9ÿ�}Z¶h  ?ÄZgÛì[þ²ÛÎ>¨Çc}C/²Õ½?Än¥7ÙâœÇvZÖá S/¾Æ�ãÜdzÓªš†—a«AäjÜÆTJ€í> ö>ãš�·E`TÓptYÞÿ�.š‰3/Ñeÿ�X¿R\{RÂL,@]zÂ}0ô3ŸÞÛ}|Õ(÷p”™â/ëšü3®YG§-ÏÞ&¹t’O96�Œ´ ŽyéÇZ쪵Û3x'ŒÛ2yÁM g9éŠfŸ¨Yê¶ßX\Çsk2îŽXÛ*€<TÐõ=kã®·›â­EÓ!Ëa‹/Ê6rGæ·á_x³þŠf¯ÿ�€ëÿ�ÅRéßòp:÷ý¡ÿ�Ж½€<ëþ÷‹?è¦jÿ�ø¿üUð¯¼Yÿ�E3Wÿ�Àuÿ�â«Ñh :ÿ�…}âÏú)š¿þ¯ÿ�Gü+ÿ�ÑLÕÿ�ðøªôZ(ÍÏß4Ë1ø“ª™UJ«ý™rÁ#;º£òÿ�øWÞ,ÿ�¢™«ÿ�à:ÿ�ñUØÏ,ƒÅ:|"F=•Ë2ò’� £qüÏ­jP¾ñgýÍ_ÿ�×ÿ�Š£þ÷‹?è¦jÿ�ø¿üUz-ç_ð¯üYÿ�E3Wÿ�Àuÿ�â¨ÿ�…}âÏú)š¿þ¯ÿ�^‹E�yV½àO[øwSžoˆº­ÄQÚJï @ HTüÝJ¡à/x“Qð.yiãíJÂÞX7%¬P)X†O�æ½7Å_ò(kõá?þ‹jÌøSÿ�$»Ãßõê?ô#@ð®¼Yÿ�E7Wÿ�Àuÿ�â¨ÿ�…uâÏú)º¿þ¯ÿ�^‘E�y¿ü+¯ÑMÕÿ�ðøª?á]x³þŠn¯ÿ�€ëÿ�ÅW¤Q@oÿ� ëÅŸôSuü_þ*£ üN·p>$ê¢gEF³.J©$½Ø³~f½2²àžVñMý¹‘Œ)elê™à3<àŸÄ*þB€8¿øW^,ÿ�¢›«ÿ�à:ÿ�ñTºñgýÝ_ÿ�×ÿ�НH¢€<ßþ׋?è¦êÿ�ø¿üUð®¼Yÿ�E7Wÿ�Àuÿ�â«Ò( 7ÿ�…uâÏú)º¿þ¯ÿ�\_ÅOxƒGð åíÿ�õ VÝ$ˆ5¬Ðª«àONµï•æÿ�¿ä”j?õÚý´éQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�SK¨p…†ò žHÉýGçN Š( 2ø© \Ãá;¡áM"äê7ÍäκydVÞÏ;X‘ÆHÏ=kÆ<ª|Bøk|d]Vm=Û3ÙÜZH"“Ô©ÇÊÝ>aíœô¯­( ðOˆ­|Qñ“WÕ-"ž—F‰Z„Øñ°uHö5ëuçzwüœ½ÿ�`hô%¯D Š( Š(  ’X‰5{kÿ�3%‡f:ïhÎsíåþµn©Kzñë–¶!T¤ÖÓL[¸(Ñ�?ò!ü…] Š( Š(  È¡­ÿ�ׄÿ�ú-«3áOü’ïרÿ�Ðiø«þE oþ¼'ÿ�ÑmYŸ ä—x{þ½Gþ„h±¢Š(�¢Š(�ªqØùzÅΡægÏ·Š ›~îÆ‘³Ÿ3ô÷«•N;ï3X¹Óü¼yñO¿wÞÞÒ.1íåþ¾ÔrŠ( Š( ¼ßã·ü’Gþ»Aÿ�£½"¼ßã·ü’Gþ»Aÿ�£€="Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  Ö¯~"ŒvÚÕ¦ƒvÖêñAiæ ó­C(‘±»©,§žGË×m{ªÊdg¨¬›ŸùtßûÝÿ�èËz× Š( Š( 4Ó¿äàuïûCÿ�¡-z%yÞÿ�'¯Øý kÑ(�¢Š(�¢Š(:ki[Ä–7A3 vw³z3<$Éò­…®¡KÈíñ<±¼ˆ¸<ª• sÓ‚ëùÔÔ�QE�QE‘â¯ù5¿úðŸÿ�Eµf|)ÿ�’]áïúõú­?È¡­ÿ�ׄÿ�ú-«3áOü’ïרÿ�Ð�v4QE�QE�™¼«â‹û’„C%•´jý‹+ÎX~—ó­:‰nak©-UÁš4Y=‹?‰Fü¨Z(¢€ (¢€ óŽßòJ5úíþŒZôŠóŽßòJ5úíþŒZ�ôŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2.äqÓìwÿ�£-ë^².äqÓìwÿ�£-ë^€ (¢€8{â4&«©Áö:ËGû/öÉŸkAö†ÂmM§~ äp{×o\F¿ðæ sUÔçû“e¬}—ûNÛÈÜÓ}²›pÙ‘€xlÚ»z�ò¸õ7ãæ¹%õí½ª6 «O* 'rð 5é÷0^[¥Å´ÑÏ Œ¬‘8eo¡à4ïù8{þÀÐÿ�èK^‰@“øC¶àŸZÓ¢•׎K¤VSèA<U‹WNÔüϰ_ÚÝùxßäL²mÎqœ3ƒùUº(¢æ®¢·’xÒiƒyQ³€ÏŽNSŽõyãoØÃ ×€ò¦WxÝ!y 'ʧ‚~ùÂûÕÍnÎçPðþ§eg/•uqi,PÉœlvBþŠòåð®µ6asa§¼òMáðíű‘"k[Ž2î—;³ŒžÁÍ�zž«¯éz-´ÞÜíK†Û ÅJòœùUfàÀàS¬5½3Tx–Îê9ŒÐ-ÌXÿ�–‘ã_Q’ô$gç1éºüzÿ�‡:<·Iàèþ˘®ãÿ�OYm¼²ë¸€¬¬ƒ*Ç8p{Š<+á OEÕ| `Ϲô;+×Ô¤C•r EžäN==èÕ kOhHÑÉ®i¨èÅYZî0TŽ#=km†TÔ4VËS°Ô‘ÞÂöÚéPጫ…>ø<TwºÎ•¦Ê±_jvv²2î <ê„\ÓƒW¨ _Äþ{ábÞÓW°¸ì.6ÇÊ;6#bpÏ@j·Ã[Û[„ÚÅåÌ6Ð-°I¤ – rx­¯È¡­ÿ�ׄÿ�ú-«3áOü’ïרÿ�Ð�mÂWáÏúé_øøÖª:ÈŠèÁ‘€*Êrõê( ø¯Ã àëúX?õùøÔßÛÚSZ¥Ì:…¼ñI0‚6‚A&ù!Üäãœvž+F¸ïXÝ7Œ¼« ͧXÜÜ-Ò¦XJFçØ7íº€:-sNÔ5;ý6Öç}柳íQle1o®r1ÈRxíQU[Åš"ë-¤}·uðsʼnʙ6ïò÷ãfý¼íÎ}«‘Óã×ôOxëÄ áÙ½ôVïgæÞ[Ʋ#(C6òSvr :àñXö×nî-^âÆK;I|Jž(’æiy(bÛ²çvðß)ãnZ�õ›+ÛmFÒ;«I–X$Î×_c‚¡AäEC{«éšl‰ö£ijî2‹<ê…‡°'šç>é×–:f±=ÒºE¨k7w¶±8ÁHþN;g¿àUØP]Ö4gv Š fc€©¬¯øJü9ÿ�Aý+ÿ�#ÿ�×¢€ ´½µ¿·w0ÜÀÄ$2RG‘ÅyŸÇ]SO?u-<_Ú›á,ÛyËæOÝÎzsô¯S¯7øíÿ�$£Qÿ�®ÐèÅ H¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þµè�¢Š(�¢Š(Í4ïù8{þÀÐÿ�èK^‰^w§ÉÀëßö‡ÿ�BZôJ�(¢Š�U;NiKµ6Š�©.£$z奀E)5´Ó=AFˆÿ�‘ä*îöªd’j_—`ðÃ$!{ì„“ïû±ùš³@ó;Sh¢€ (¢€2<Uÿ�"†·ÿ�^ÿ�趬υ?òK¼=ÿ�^£ÿ�B5§â¯ù5¿úðŸÿ�Eµf|)ÿ�’]áïúõú ÆŠ( Š( ¨Åzòk·vTG ´îK´ §îÇæjõUŽÅcÕn/Ã’óA%{�!ñóå@¨¢Š�(¢Š�+Íþ;É(Ôë´ú1kÒ+Íþ;É(Ôë´ú1hÒ(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�å>"\kš„nu]ôÛÜiãíRDZg…yu;”ãå‚9âµô+¶ÕlbÕÒâV´¾†9íáuQå£( ð3“œòN=ªÎ©¦Zk:eΛ}Iir†9Qdd,§¨ÊpzyTz>e é‘iÚrK¤#¤“¼»` ’@†p(É¿á.ñN› x“Ä/­Ë|º/ˆdÓ…„ÖÐ…ž$h�(ŠÞgÏ×8ã¥iéß5›hnZúÂ+Éeñ\ÚH.Db匈þeÎàX€qÎJë¬þøbÆìÜÃa+9¹7ef¼šT3ž²”w*_ý¬f|;ðÀŽ8Å„ûcÔ¦§í³çíG½'~K|£¯N}N@9]?ãU¥ÝŒ·³èÓCèͪ¦ÙómœÀc#hÇÎ8<äsÒ¤¿ø±}§Goö K“Ãy",óËï³F%b¢HUŠ<1Qó1Æk¡³øcàû ¢ßH!E«Ùì{©L.Å™ ³Fæ-Èàò9ŸqðçÃkl·6wS}š „ɨ\1Xä]޹2w_—è�è�aj¿õ9<=qy¦é1@I7ÐKsu²Lo;r!Œ¬s´€ÙÜ9P¿5QO‹SZxwí¦ Ñ§iÚ|ú­ÃÜyEdºE)±BܶN1ŒðJëá߆$³[F²¹6É’±ûª»<¾þ̦zí$gÓ§ø{ák”$ÓÈ`ŠÝU.e@ÑÆ1po+ضHê �cø#âhñ–©mdtƒgö0ê1?Ú<Ï•g0²‘´`îSƒÎG§Jïë›Ñ<á¯_[ÞiV[ÏonÖÑ7Ú¦p±3—+†r1¹‹têk¤  ‹ŸùtßûÝÿ�èËz׬‹ŸùtßûÝÿ�èËz× Š( Š( 4Ó¿äàuïûCÿ�¡-z%yÞÿ�'¯Øý kÑ(�¢Š(�¢Š(Œ·²G®ÚX…_*kiæbGÌ 4@cÛ÷‡òz³æ´•üEexª<˜­."sžŒï ^>ˆß•hPEPEPGŠ¿äPÖÿ�ëÂýÕ™ð§þIw‡¿ëÔèF´üUÿ�"†·ÿ�^ÿ�趬υ?òK¼=ÿ�^£ÿ�B4ØÑE�QE�U¯^MvîÀªˆá¶†`ÝÉv”ÿ�ÇæjõgCk2x–úí“Kgo6G,¯1a޼_΀4h¢Š�(¢Š�+Íþ;É(Ôë´ú1kÒ+Íþ;É(Ôë´ú1hÒ(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ȹÿ�‘ÇMÿ�°}ßþŒ·­zȹÿ�‘ÇMÿ�°}ßþŒ·­z�(¢Š�(¢Š�óM;þN^ÿ�°4?ú×¢WŸëñr|A¾ñ7‡u"!uk±Žö9€¸'îûŠ—û?â·ý|-ÿ�€óPwEpŸ`ø­ÿ�A_ à<Ô}ƒâ·ý|-ÿ�€óPwEpŸÙÿ�¿è+áoüš°|Vÿ� §…¿ðj�ìÞò$Ô!²;¼Ù¢’Uã¨PÕ×õ«ç¡üR}Fã«xc͆)!P ›\¡?î×õ«`ø­ÿ�A_ à<ÔÝÑ\'Ø>+ÐWÂßø5Ùÿ�¿è+áoüš€;º+„ûÅoú x[ÿ�æ£û?â·ý|-ÿ�€óPIâ¯ù5¿úðŸÿ�Eµf|)ÿ�’]áïúõú¬kýâ–¡¦ÝYKªø_˸…â|A08`AÁíÖ«èøŸáíÏI´Õ|1ö{Xü´ß ÌqœòxÏ_J�õ*+ÏþÇñcþ‚¾ÿ�Ày¨ûÅú øWÿ�æ @¢¼ÿ�ì?è+á_üš±üXÿ� ¯…ðj�ô …n¢{Ùm~ú(ÒV\tV,þhß•p¿cø±ÿ�A_ ÿ�à<Õ]4Ši¨Í|5o ùÓE-û‰±µ ‘øæFý(Ò(¯?ûÅú øWÿ�æ£ì?è+á_üš€=Šóÿ�±üXÿ� ¯…ðj>Çñcþ‚¾ÿ�Ày¨Ð+Íþ;É(Ôë´ú1jÇØþ,ÐW¿ø5cx§Á¿¼] Ë£ê:·†Å¬¬ŒÞTS+|¬ÁÁô Y¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þµè�¢Š(�¢Š(�¢Š(�¢Š(�¢ŠÍñÛ¿áÕ³3ý¡ö9¾Ë·¯›°ìÇü ¥EyÂïù-¿³6ÿ�gÿ�Â7ký©³§öŽó»ý5Û»w~™¯] Š( Š( Šó¯Ž76öÿ� õ5’x⸕¡[pμÔܹ;7g³^kuo{kÕ¬ñÏo*‡ŽX˜2ºž„Á-Q@Q@W–øcUðÅçÆZ]#QStöŸd{Hc‰YsÎîFÒs„$žOz�õ*(¢€ (¢€ (¯,Ò'³oŒÉ¨ø~K;û-BÂ[{Ö´ÜÑãmÛçä†wl('BH©ÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE‘sÿ�#Ž›ÿ�`û¿ýoZõ‘sÿ�#Ž›ÿ�`û¿ýoZô�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE‘sÿ�#Ž›ÿ�`û¿ýoZõ™©hjw¶×Osy¶ñÉ›yŒyPœã“÷õ¨á‹þ‚z¿þIþ4³EcÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÐÍÿ�Ü_ôÕÿ�ð:Oñ£þ¸¿è'«ÿ�àtŸã@4V7ü#qÐOWÿ�Àé?ÆøFâÿ� ž¯ÿ�Ò�lÑXßðÅÿ�A=_ÿ�¤ÿ�?á‹þ‚z¿þIþ4³EcÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÐÍÿ�Ü_ôÕÿ�ð:Oñ£þ¸¿è'«ÿ�àtŸã@5¤kºV½“iwÐÝ$Nc“Ënc`q†TñÞ«ÿ�Â7ýõü“ük˼ðgTÑüK/ˆ5M^{6ó£µ³˜ï‘Kg¿BuϨ j¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯9ñF·®øwÆp[ˬcDÖT[A!Ž tÙÉ�1;å#;wdnàð3^XšŸ„´]fÖþÛQµ’âöF¸G¹— °åqó| p¸ñQÕôˆ</™«ÜZµöµo§\H±BìñÉœ·Ì„xÀ“Á®g_ñωtƶËr—WZ͢Ũ”DfŽm§Bg�à(ù³Æ}VðŽ®ZØ[j0ÜÍ„‹-±“##¨Â¾åpKÄ’G>µÇ<7u Í¢M§³XO(žtûD¡¦î‘ÃnsÌOAè(Ž›ãÖóÝÛËáÕómåÔ`ùo²­%š $òøR‡ƒŒçŒw­{/‰‹©k:m–‡{:\ÛÚOq$hïöap»“;P®ÕÜY—Ûv.·Âÿ�;»¾™33¼ò1kë‚KN¡%'çêÊ�5¡cà­M¹³¸³³’m!X"eº—˜ÔåUþoÞì8ÀÆ1@iø¿t5TÓ¿ái'këÍ?÷7eÀ–ßiv G›\6@-ÁùOx|]ñJóÃ~Ô.à…4»Øïâ+;…¸4c€ÅJð~b ¼õ?ð¬<#ö„¸uÀ.$ºY¡pM&ÐïŸ3;ŽÕÉö«?|/yöOµé†àZ$ÉšâW�K¸ÈH-†f,Ic–Ï9ÈÏÝ|Q»±ÕF‘s Dº’jVÚtñ¥ñdG¸Œ¼,¯åüÀí!¸Ú®§Á~&OøFÃ^KVµaÿ�rÏ¿aWd<àg•=…U?ü.Ëë ™ º[ÄÞÎd3(]Ÿ~æ*âp3ŒdÖ¶ƒ ižÒ£Òô‹v·²™’#+É´““‚Äž¤œ{ЕQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/SDS_SDaq5.jpg������������������������������������������0000664�0000000�0000000�00000075352�15030617045�0023236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬WºÑ¬~Ñk¢ßjÓË´Ù•÷;˜ºûPµçv^0×5ÉþÏöI4ÙŠÒn÷Kÿ�¥\~1WGaycFtMv噋´—¬Äñé0�qÐ�(¡¢²?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê�×¢²?¶o¿èZÕïå¯ÿ�£ûfûþ…­WþþZÿ�ñê�צ»„Bä�ÉÚ ?äÖWöÍ÷ý Z¯ýüµÿ�ãÕ ×QÃbo.È´‰"óe3º'q¨Ç99Çh¦­Új:DšŸÏmoÎ’›œ!ŒÅ##–ç�ߥBÞ#´C›Y–¨ì‘ÆÍÍ0<.ÔÎîI�äWö^"ø]«Gev·VÇW¹{¯²8vû9ÔGÀå¡$Ü0õ©Y’æÇZ}'P¸Õ4;iôûè¤3µÖ9üˈÑÉ%€HÐíÉÁb=¨«_Z&•}{ykwföXóífE3)` €˜6ì€0O<u®i:Âj«2›[›;˜,Ö×!D‰‘~Ve Žàž„u¸Ëû˜5ËwXÓ$û^Ÿoý–L° ë)¶¹iåGÞ;)Æyö­ÏßZë*ÖµM:t¸°6Ö¶«<G1É"™ö°ààJ€ã¸Çj�èRç}ô¶¾DÃˉ$óJ~í·T÷a³$v ¾µ,’$JGTRÁAcŽIÀ‰ W–ø«ÄÚd ×,ÓÄÂÔãJŽO/PÚГy"Ümù¾R#eÝŽœUõÛÍ{­^Â~{>ÚM"ùÈÕdsnȃ‡Üª#òØó…Èaƒƒ@¹Ey¯‰5½3OÔíä¶×w³´‚Km4êÒÂ×�9!ÐÆä¸J°l€9ù‰=ŸÚ|Gÿ�@­+ÿ�RñŠ�×¢²>Óâ?úi_ø2“ÿ�ŒQöŸÿ�Ð+Jÿ�Á”Ÿüb€5謴øþZWþ ¤ÿ�ã‹®-ÖûTµÒlYbÝ zkb\nŒŒóƒ‘í@æ°k~6 Ñí¢Õíóó–`�ÿ�fS *G¿Îxõ¯B±’ò[8ÞþÞ{’2ñC1•WØ1UÏå@(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢¹øšO hP^@›å’ò‚íÎSvçãÝ€÷"€:z)•Ô2ÊFA Šò¿ÚGá²vRoâ^€=2÷N²Ô¡òo¬íî¢þäñ‡‘¤°Ó­´È ŠémÁVp½8]Äítxæ¼7Gø ý¥¢X_Â]}Úm£›Ëä.å¶iš?À¶Õ º‘¼[}“w5°äFås÷ûã4ïôW‚KðÇ­Zéÿ�ð—ß=¼Óòzlh×ßßÌý)5€çKÒ.o—Å×ÒSpC3øï |¢¼Gþãþ§+ÿ�ûñÿ�ÙÖvð-µH.¤oßGäÝÍl�‡9¹\ýþøÍ�{ýóeßÂ3mñOð¯ü$×Ì.ìžìÜíÆÝ¤»wsÓ®{Ö¾±ðézEÍòøºúC naÆôï”Wˆÿ�Ã<Ôåÿ�~?û:ÎÑþ¶©ÔâÛèü›¹­€ç"7+Ÿ¿ß ¢¼_€Æ=j×Oÿ�„¾ø‰í昿“ÓcF¸ÆþþgéI¬|:^‘s|¾.¾Â›‚qŸÇ}�{åâ?ðÏõ9_ÿ�ßþÎ¹Ï üÿ�noñEìÙš½Æœ»cÝæöüçæàÝ(é+Á%ø cÖ­tÿ�øKÞi‹ù=64kŒoïæ~”šÇÀs¥é7Ëâëé )¸!‡üwоQ^#ÿ� ñÿ�S•ÿ�ýøÿ�ìë;GøÚ¤R7‹o£ònæ¶�CœˆÜ®~ÿ�|f€=þ«½œ—‰xö°5Ò.Õ£Õ}u“ù׆KðÇ­Zéÿ�ð—ß=¼Óòzlh×ßßÌý+?Æ?ßÂÞÔu´ñUõÃZFDÑm ó×qÇZ�ú.Šùî‚ /„£Öÿ�á,¾ ö"ïÊò¸Ç¿nwþ®CÀâ}âO·ÝÆ~ÒÀ„“¯Ê¾ úÐÖtWÍÒ‹Ä¿¶ˆj·Û]\ŸÞØÇoz[õ¼·Ó®¦MVû|q;®d@'Ò€>¢¾wò.è)ÿ�GøUkAy+܆Õo¿w1Eýàé€}=èé+Àt&º‡ÆzgP»–9.ä‘Á ¾ÞõïÔ�QE�V~µ­XøL“QÔžXí#ÿ�Y$pI.Á×$"’O´+žñá ðóĤöUÐçþ¹5�li÷Ðjv1^[ „2‚WÎá|g£€Ã§qÈç¡«5Ê]I©j^-Ô,-uùl,àÓmîȆ;äylº·ÊKÇûG‘ÅOc¯4ß-5ëëØ,ä›JŽê[–rDíbÛA�Ÿ»žzPITî5[+]BÒÆk…[«¶d‚<X…g=:|ªÇœt5…á»ÛïøHuM.ïT—PŽ K[˜äaWS)˜û¥n#R23óu5cÄL£^ð’–Ž«!<Ÿô+Ÿñ�kÝjV–SC òâiÉò¢E.*‚p22z Œõª—^#Ò¬µTÓ'º+tÛ2¢'eMç ½À*…qíšã5ƒc­x»ÄÚ«A}§¤ÞÍ£FIíÖ%p‡p,ÊÒ¨ÚWæ¯JŸ_xíô¿ˆ1K"%ÜáÔ†;í£ŽÛe|{æ€:˯éVZªi“ݺm™Q²¦ó„ÞàBǸŒöÍ\½¿¶ÓãŽK©<´’hàVÚHÞ쌱'Žk‡×Þ;}/â Rȉw8FµáŽûhã‡öÙ_ù­Ï‡>@“êZ~ÙHË?l‡æÁàã¯4ÒÑ\LÍâF‹ÄZN›­=Õíœ0Ïgy$0î26òÐHtEä( J=3ZÞÖ_ÄvÍ«Å$‹a,q¤0:€UÀÌ„œÇaŒúЛïémèµ»ºd}ÊŒâ 8Ù±´<J!9 Fr)×^#Ò¬µTÓ'º+tÛ2¢'eMç ½À*…q횯­ÙÛê:uîƒE[ÄaxÙÿ�Wä;ýâ7üú æµÙbHñú¼¨.nB=¡Ï$=´qÂGý¶WǾh­ºñ•eª¦™=Ñ[¦Ù•;*o8MîT,xˆÏlÑuâ=*ËUM2{¢·M³*"vTÞp›Ü¨Xð7žÙ®O_xíô¿ˆ1K"%ÜáÔ†;í£ŽÛe|{æ}ã·Òþ Å,ˆ—s„kPNï¶Ž8qÿ�m•ñïš�î¯o Óìn/n¤òííâie|µdœO�ô©ëÆww:‚u»ë;§µ¹µ±šh¥P¤‡T$}àGP*Ûêz‡‹õ>ß^›O´·ÓmîC ,wÉ$À¶][€"´yPUžqEy<^!Õ"¶¼ñIÔæ3 i×ÍfDbܼžx$ü…«|ÿ�)¨$Œ¹c{âë7Yšö÷O¿?cûMŠAp³J¼œ¬1+)௑Œœä�w”WšK«x“HÑ/õ u{»„¹Ô¢³°}RÞ;A/°yŽ•·—PYHû§n:Ú‚óÅ6·f›«k–«5Ö¨Öþe«Ç,‚m,Š˜Qw‡Œ`„ 2pAª÷—ÖÚ|QËu'–’K*ÛIÝ‚ ã¦X“Ç5KQ¹ºÐü)yw½õ »+)% êNè„ò� #°k“ÖÒôxq$“Å ¨-Íæ—, Öñ 7‘eÔ CÆdü§æ=€=ŠóýCSÕô]FòÉüA5ÄvÓé3gŠm—M ±¶ÔnÕëK­êº½–­­ÙÚkÒ`6•ä—†û!¹º’)�£ R7dûÐEsšEÍ忊um*ïS{衵¶º‰¦HÕã24ÊÉò*‚?t¤dgž¦Š�è袊�(¢Š�+‹ñ:&£­Æ®ªðéïd¤dšî,¨Hÿ�)+´¬_ÃZzÉH¯.£dÒ0P Ÿ´D2}N�€ ®ÃBŽÎF&[{&'©±U'ê[þ\í ÿ�$Ö?ûEÿ� ½z¢CO#Ç#JÛä* lÉõ8�}�ô¯+ý¡äšÇÿ�a¿ô £ÃÚâøOFXôXŒXß‘åŒlâ ðµî¶¶z‡—£@àêwd“zšÙs·­Yðljü?„ôhä×tÄ‘,`VV»Œ"5È#<ƒÂÞ&Ð!³ÔDºÞš…µ;·®ãS+zô"€%¸¾×?á,Ó˜è°7@/Û‡#Ì·ÉÎϧçIâ‹íq¼1¨ 4X G,/AÇ>›)÷'ðùñf ×tÃØÝ)oµÇ€L–øÏSƒùoŠ|O MáB8µÍ1Ý¢ *ÝÆIçÓ4­öýþ€Vÿ�ø?øŠÂðµî¶¶z‡—£@àêwd“zšÙs·­oÿ�ÂWáÏúé_øøÖ…¼M Cg¨‰u½5 jwn]Æ2¦V õèE�s:Þ¬~:è’6•¹D¡aû^C.æçvÞ>˜®«ÅÚãxcPh°"ŽX^ƒŽ}6W-©ëú3üvÑ/V°kTÒ%F˜\¡EbÍÁlàjê¼Sâ}o jÅ®iŽíVî2O>™  o·ëÿ�ô·ÿ�Àñÿ�ÄV…¯uµ³Ô<½S»$›Ð0|ÖÈû½kþ¿ÐJÿ�ÀÈÿ�ư¼-âm=DK­é¨[S»pî1•2±¯B([‹ísþÍ9Ž‹�qctý¸r<Ë|œìú~tž(¾×À“EÄrÂôs鲟qâŸiÒ wL1­Ò–û\xÉoœõ8?‘¦ø§ÄúÞÔ#‹\ÓÚ"­Üdž}3@ßo×ÿ�èoÿ�ãÿ�ˆ®á¥Þ¯ü&gÒa—w‰¯ZM×{v?É•)ȵÞÂWáÏúé_øø× ðÏÄ-§ü&iÖ4ø|ßÞË™r‹½Ì0ÉäZ�è®/µÏøK4æ:,ÅÐ öáÈó-òs³éùÒx¢û\o jMCË ÐqϦÊ}ljü>|Y§H5Ý0ƶ7J[íqà%¾sÔàþF›âŸèxcPŽ-sLwhˆ ·q’yôÍ�k}¿_ÿ� ¿þþ"°¼-{­­ž¡åèÐ8:Ù$Þƒæ¶GÜíë[ÿ�ð•øsþƒúWþGþ5…áohÙê"]oMBÚÛ€×qŒ©•ˆ=z@Ü_kŸð–iÌtX‹ íÑæ[äçgÓó¬_ŠWšÄŸ õÔ¸Ò!†�Ý"Þo+ó¯m£5¹qâŸiÒ wL1­Ò–û\xÉoœõ8?‘¬_Š~"Ðï>k¶öÚΟ<Ï� WHÌÇzô�äЛKÝh|3 ‡û@“í£;|ž¸ÙéÚ¼áü·) Î!¶YWíM’eÛÎÕíŠ÷»OhKðÊ s­iÂa£ªÍÒnÝäãÎsžÕàŸïm-´Ò{¨bctÄ,’8Ú¼ó@óÏ}ý§hM’gd˜_»íK©Ï|t›ÀÖHÈ|Ÿ?8ùOµêzyÔí_[ &Oš¸wÞ—TÕ4÷Òoo­™Œ�)$í>ôgÏ¿ÿ�Ÿÿ�ïÿ�ÿ�cU,g¾y‹$?é?¿èv¯µ\þÖÓ¿è!kÿ�—üj¥Ž§§«Þn¾¶¸$fUäm_z�ÓÐ¥¹èkeŒ} r%ÝüIí_BWÏzí¥ÇŽt‚ê[í„1ûÉé_BPEP\ÿ�>Æž¸ž÷L³Ô"‰£o.ò,Qå‚™Ypx@ÅŽ9À8®‚³5ûVÏI{À_Þ$‘âÔȱ™P¸1�¤œŸJ�äì|+±M:ƒäY-3i©[éja“-ó#F!p{9$öÁH—ÄÀVé¦hº]Í‚\>idÖØŽEÈ™wF8cÁUúf´4Û{ë-FïU±ðÍÞŸ[·›¦‰  upYvº…ƘòÅmÜ”f _Zx;KÐàðìÖWÖÖÚ½ÝíÄÙP)p#wgÆ �…ÏŽÀ´ûØäÕnš‡í^(šÖÞKo*kتRE $a˜Œmo™Nq‘]\ú.©µ¶«ªèú|—±D¬'¹¶F’|Ø À•Á$õàæ¹‰tûØ­‡n<>£¦ééZ]ü7PÆB¬h%¤FÊA”qÓ×£»·ÕaðKÛmµmYl<§Ž|,WRìÃn¬sÁõÇ�Ï·xKW’WíZ%ì–’ˆ¢»ó"Ã!èªüícèi·ZŸƒî^ßU»¾Ð¥h<’Ë Àm¤«“Æ‚AëÅr:­‡ˆn/.®bð­ä©rºSyFæÔ6×/,Šß¼î£|t7‰¨Iã-õ<9u%°ž+‡ó-ÇÙÞw„üÊdÉÚ"mÅw}î7s@RÜø_P×#IfÑîu{0dYâyàKâQïVšïEÖ4ø•î,/l¯NÈÁt’9Ï'¨n„ãž•ÊEk®Í¬hóM᯲%ž±q4¦Þh<³Å2 @Ü’dV|àç$Ú熴I,5ýJ‘H´¸y¬ùO:†‘}‚’Äc´Äv  YÒËG¶‡HÑîtwÌÀÐ.ÖE9r±+&xêGNõ>—y¤E¦ÙGe¨ÚMªÞD‰27ž@%˜Ã¤ãÞ©x«I¾¾M:ÿ�HòÆ©§Ý,™‘¾IU½¶18õQT¼5áëßI{¥®¬¬ÚC¦(aæ2ÈÈH�ïÊ®Hã=  Éà{ý^µx<+q«ê-;[Ü41I愛ʌnnYþêàY•£ kñU¾‰{vtiµóeЄ4o=¹t vƒ—P7VN‹k¯ØÞØê3xnðäÕ‘íÅŹu71ÜFÙó6‘…*yÈ=ˆæ™¢iº½¦™àK'ðÅÍ»éNì‚[m©‹i!fùdËng ÀÎÏ<P§Ž¯ìô“§_Éa¹INÝFm!ïVÍ�åŽÂrHæÏ8ÅGw3j·6k¡j¥ÄR]EªÉdZ8¢M¹h×y`I‘ßã$ûWE©j7öWÇk¢]j ;¤‚XPF{nêqôÍsöº÷‡ Ò¯m,>Û5·ÛkKiv¥Ì¢b±—*¤+ª(É.O±�ŠþýüUe¤éÙºT×Mq%Âj6ÿ�i†lâ)0™]ÇÌ` ä`}ªö•¢ø\Ñã¾héwå=›†²Äf"bhúP* qUm4WG·ÒµEÓþÙ}½7v–ó `.¥¶ÆrªJº äŽ3C»á› ;BŠ+ÕDº–Y®fDmÊ,¯+(=ð\€1<%uá]kEÒna¶ÐSPNŽW¶¶X·Z,ˆÔ(å,r?:žîÃEŸÂ’YøetâÔX,Hª‚Úw q‘’:ö¬ï 蚌vþµ»ÑŽœú \· ,L.’c*›¬Ä9,åGµÏ h’Xkú”)">‘ipóX 9òžu "û%ˆÇiˆí@:Õ•·…-mî_J²Ó’î7·º†ÖÂmBÆ8ò§tª¢<œ€!pþõ\¹ÓtíJÃúU†™ák渆k¨®_K k+³sGì‚ÅâÜ箿RÔoì®!Ž×DºÔ@wI° ŒöÜÔãéšçít+ïA¥^ÚX}¶ko¶,Ö–Ò*íK™DÅc.UHWTQ’>\Ÿb0ñ§©Å¤Úi±ÙÁv. Ë\£K?gq (*[÷Œr89ö©tm+ÃÚ¿†ŸÃÚTp¼În­¾Ëˆ\FÍ’ àÊÃ$gNÓIÕt{}+T]?í—ÑÓwio2êQ;lg*¤«ªHã8ô;^³»Ò¼6ê ׬óÝË,ï%‘å(¤.FIð  ë+o Ea5íÜo¥–Ù§†8–;ˆÖFUFc÷È ¡‡#p8ãVþóᎅŠÝ'†ÛO¾˜Å•€ÀZ4'“÷p mö,£½g[ÙkbÑã·ŽÖÞ ½¿š=«Š_´a™v’ Âñœ‚þÉ2¥Ž¶5©µ1áÛ¤Ž? å‡Ï·ß$&ÄÛ\I·;þb ¹È  ;¸~X_K ä~¶»|Ä™mÒ@1ÆAç§LÑ\ÝŸ„a–ß[ðÖ·<w:ÜÚkŒ°ÊËnncFFÐ2;Ñ@¥EPEPY%ÿ�\?ö²ÿ�Ò˜«^²<Kÿ� ¸ì!eÿ�¥1P½yGí ÿ�$Ö?ûEÿ� ½z½yGí ÿ�$Ö?ûEÿ� ½�z…?äNÐÿ�ìþ‹Z­áøòÔ¿ì+yÿ�£š¨xcC–O èÎ5½UXÀv¬‰…ýØà|* h’Ég¨­j‰Níp’'8•¹?'S@÷?ò8é¿ö»ÿ�Ñ–ôßÿ�È©©×üÅdÜhriÉý·ª’lnŽï121%¿äèsú OhrÇáAηª>"?+H˜<÷ù(°®Â?ñ婨Vóÿ�G5Oý/ýµûûÿ�X^Ñ%’ÏP#ZÕÚá$Nq+r~N¦€3u_ù8-þÀ³èM]‹äTÔ¿ë‰þb¼ûSÒd_Žº%·ö® Ki·œ]7¯ÌÜ·ü+ªñF‡,~Ôëz£â#ò´‰ƒÏ’€; çü#ÿ�Z—ý…o?ôsTÿ�Øÿ�Ð{Wÿ�¿±ÿ�ñ…ámY,õ5­Q1©Ý®Dç·'äêh~çþG7þÁ÷ú2Þ›âßù5/ú☬›QâÍ9?¶õRMÑÝæ&F$·à|AIâXü1¨9ÖõGÄGåižÿ�%�vçÿ� ?æuÿ�±®ûÿ�d®Ÿû_újÿ�÷ö?þ"¸_†šD—ð˜cVÔaòüM{ò¤A¿>fÊŸ˜÷ òçþG7þÁ÷ú2Þ›âßù5/ú☬›QâÍ9?¶õRMÑÝæ&F$·à|AIâXü1¨9ÖõGÄGåižÿ�%�vÏøGþ<µ/û Þèæ©ÿ�°%ÿ� ö¯ÿ�cÿ�â+ ÂÚ$²YêkZ¢cS»\$‰Î%nOÉÔÐýÏüŽ:oýƒîÿ�ôe½`ü\ÿ�’Uâúà¿úÔףŚrmꤛ£»ÌLŒIoÀù:þ‚±~)hÒ[ü3×f:¾¥0Xòå‘ ·Î½p¢€:?ù%vÿ�ö_ý_;ü8ÿ�‘zãþ¾Ûÿ�@J÷+MCðÎ ¿¶u0Ž­å‰oúœãîô¯øjÓh3°¹ž,]0Û�}ÕõÕOÿ�![?÷$ÿ�Ùiuoùß×¼Ÿú ªsذÔíÛn¹I9ܹwÚ—S±eÒoí·G9ÁeÁùOµ�kÕ+õ—¿õðô£ìÿ�?÷÷Òÿ�…T±±b÷Ÿé·CpËÏʾÔ¹¤ÿ�Èï ×Àÿ�Ð’½ò¾{ЭZèÜÏ'ú@âBûÉè+èJ�(¢Š�*†±©®‘¦IxÑ4Ì"Ž% $‘Õrze™F{f¯Õ=WL·Ötɬ.·ùRàî¶²2ÊÊ{À}E�rzÅö¸×Þ–ãD‚øõwŽ(ã½Èl®|Í€ªç¨+Ÿ“€xÍûOÞÉ©Ûi÷šT0LÚ“é×;³"Æâ×í(ÈJ êWƒ¤Z’÷Ã*ñXÜÝx‹TY4ÙßÚ™ ˆ“çýÖСÇ�}âO<Ön— iÚÊ^^ÙëÚÛ\i‹¿>X’ ¸XDXUxT12®X‚9æ€,Â]ª-ÏØŸD·7ßÚßÙž\wħü{ Ÿ3qŒlÏê;æ³5¬WzUî±j–2é:ܶ×^L¦eÁÓå”mªH!ã<‚9éšÙ“Á5Ò]G­êÑ\-ùÔ ŠÐ±iL^O;£#?”Π—À -û^7ˆõ“#^µó-Š™ >G ÃÓÊùqè}y  ¤ñ¿o¤Ç{uáë[wšuŽ4}K)ÇÌ™Ö"pË¿–޵ÑXÏ-Οm<ñ$SK»Æ’yŠŒ@$�n�÷Ç5ÌXx û.Î+[/kðÅ ¦X�xD`QAˆŸ7Ý ´cïi>—GÖ"šßS¼’Å,Þ·š]Ë$­1Ë´�¾fpC�� 2�Ïk÷š­ÍÀÒ ºÓ µiîdšìFYFK$iµ‹°Q’ÑÈç®,êwÚWƒô$Ø,4ë`Âtb¶ð+¶HÉà(êOÐã'�åø‡ÃÚf¡¬M Þ¯ªÚ¾¹htæ·€*P©#pJ6Ö æÎA®²h Ž6•åeP¦GÆç u8�dû�(Ê4½NÎóFñ]•¦¹ü·Zõ´rÍÈgx&û$RH6ž™�Ç+[UµJ:Öƒ¦Çö]6_ì¿Ý[ü‹¸¹h& º6 <c©=ó]|ž²šb) ¬š¬¢iþlaq‚„ Œ”ƒÉ'Óàð­œv:Œww—²j�}¢æáÔHBŒ.ÝŠ¡võžzó@ôX4êú=„ÛéñÛZÝEKµ#y ÈÁ@à D‡¹'½c®µ}áýKÅ÷‘éqÜiVºŠÍu(¹Ù$köKvr‘í!±Ë²õã&º-+O³Ñu {û«ÍOPV¦ºÁwH¶®>ET|ÅàÄóɨ®|%mu¨^Ü=ýúÛ_H²ÝØ«'“;**|ß&𠢂�qÈ94 ÏŠæµÖu].]=EÅ´Ïd<óþ˜®Û�/ÈD˜S×”÷­»ëÔ­´ìË02¢1ùÀçi=pN3ê2:YséƒVñE¥íÖ›,J2y:~ü¸_º‰Ú1Ÿ˜•Riê¶ ©é³Y­íÍ‘”`ÏjTH£¾ +zt "ûJ‹O°ÖcÒcû{saf°[æ4R÷;‰#…R’*ñ”cïIªÚÇ¥kAÓcû.›/ö_î­þEˆ\\´ÇÝ1Ôžù­û &ÖúÓTÓ®5­CSD?c•gXâ6Ì_ åÆƒ8d`ÜöÁ«xVÑ,µ{««Ëéu ‹›‡Q!�aBìU ·¨Àóך�æ5kH´Á­øOˆ[i“e&±b7-Á@û£bq¼O|Öþio£ø—WÑôûxíôèí­n£‚%Ú‘¼†dp p8‰NrOz±…mËQ·ºº¼¾—PÀ¸¹¸u.ÅP»zŒÏ=y«:>‰’÷S»«Û«¦Všæé”»Uª¨�v�u$äš�ÉÔuµÑõ?Þ¾œ.¤AvγœÏ7$!aH(ý3Üž8£¯ø¯^Ó4­IdÒ-moWG¸Ô-˜^™@òB ,`1HÆCcªÖÿ�‚ãÔn5¹n5½T®¯f,¦|€±Ä ÷YH2IáÎr@"¦±áË’µÍW¸Ž{Y4²$[nJ¡ cˆmfa d|€C«xóQÒgk?øG&¾¿·d»†Ãíªî'jÆë¶€H,sŒšµ®øÂ÷O»K}3HŠõƒÚÇ(¹»kfŒÜ>ÈÎß-‰�ýãÆ=,§ƒÒ-D_¦»«¥Ü‘,R«Ä Ú®vï< 28ï\üÞN·â§¹°“T·–Ñ~Ëe2é1ÍÜ®DÏ1°}èU~á<äP…Çg‹[úíäQ\¥­ÔöÐÜ8Î7"Œ‹žIu<–¶tMgQÖ$yL‚ $šæÝ¥eß̆f‹„Ø>S´œç>Ýê®›áG‚f½ŸQº†{À’ê6v²k,á3.WzƒŽÌ2"®øwÃßðŽÁq êÚ…ôsLóâóÊùÝÊìEûÌÄrlPk¦¯ev‘iúMµÌE®oŸݓò¨ÚÄ‘€I ˜c<àªÚ§„F£¬K©Á®ëtÒÄ‘H–’G±‚+Ä‘¶ÎzbŠ�è袊�(¢Š�+#Ä¿ò ‡þÂ_úSkÖG‰äý„,¿ô¦*�ׯ(ý¡äšÇÿ�a¿ô¯W¯(ý¡äšÇÿ�a¿ô £ÃÚâøOFXôXŒXß‘åŒlâ ðµî¶¶z‡—£@àêwd“zšÙs·­sšÆ¿ØxsK³¸Ô§Yíí"Š@-d8e@8õ‡¾3ø'O¶½KFuioîgLZÈr#2žž„Paq}®ÂY§1Ñ`,n€_·G™o“ŸOΓÅÚãxcPh°"ŽX^ƒŽ}6W-7Æ¿¿ˆì¯RŸÈŠÒâ'?e“†w„¯ôFü©<Añ«Àú†{io¨ÎÓKÔÖA“õÅ�zÛõÿ�ú[ÿ�àxÿ�â+ Â׺ÚÙê^ƒ©Ý’Mè>kd}ÎÞµ›ÿ� ÛÀ?ô¸ÿ�ÀI?²<=ñŸÁ:}µê\j3«Ks:bÖC”y”ôô"€%Ôîõcñ×D‘´¨…ÈÒ% Úòw7;¶ñôÅu^(¾×À“EÄrÂôsé²¼Îÿ�â§„çø»¤ø‚;éNo¦Éo$Ÿg|‡,Ä ¸Ïzè¼Añ«Àú†{io¨ÎÓKÔÖA“õÅ�zÛõÿ�ú[ÿ�àxÿ�â+ Â׺ÚÙê^ƒ©Ý’Mè>kd}ÎÞµ›ÿ� ÛÀ?ô¸ÿ�ÀI?²<=ñŸÁ:}µê\j3«Ks:bÖC”y”ôô"€; ‹ísþÍ9Ž‹�qctý¸r<Ë|œìú~tž(¾×À“EÄrÂôsé²¹i¾5øüGexº”þDV—9û,œ3¼%xÇ¢7åIâ^Ô4 ÛK}FvšXö 6² Ÿ®(Ð~߯ÿ�Ð ßÿ�Çÿ�\/ÃK½^?øL>ϤÃ.ï^´›®öì“*>S=jßü/o�ÿ�ÐNãÿ�$ÿ� ä|ñcÂü$ßo¾š?·ë×WÖûmÝ·Dûv“Áàðy G¸¾×?á,Ó˜è°7@/Û‡#Ì·ÉÎϧçIâ‹íq¼1¨ 4X G,/AÇ>›+–›ã_ßÄvW‹©OäEiqŸ²ÉÃ;ÂWŒz#~Tž øÕà}C@½´·Ôgi¥jk Éúâ€=íúÿ�ý�­ÿ�ð<ñ…ákÝmlõ/FÁÔîÉ&ô 5²>çoZÍÿ�…íàú Üà$ŸáYøÏà>Úõ.5Õ¥¿¹1k!Ê<ŒÊzz@…Åö¹ÿ� fœÇE€8±º~Ü9e¾Nv}?:Åø¥y¬IðÏ]K"a0 Ò-æò¿:öÚ3Yó|kð;øŽÊñu)üˆ­."söY8gxJñDoʲ¾!|]ðwˆ<«éZuüÒ]ÜÄ$kgPNàz‘Ò€; KÝh|3 ‡û@“í£;|ž¸ÙéÚ¼áü·) Î!¶YWíM’eÛÎÕíŠõ+Œ~ ÀqiM¨L.×LÅ>Í&7ù[qœc¯zñïx—LÑ´y­ïfd‘® €#-ÆÕ¾†€:éç¾þÓ´&É3²L?¯Ýö¥Ôç¾:Màk$ ä>OŸœ|§Ú²eñ®†÷öÒ‹—ØŠá”ÝñŽÞÔ·þ5ÐçÓ®¡ŽåËÉ ª)¹$;Pÿ�Ÿÿ�>1ÿ�ßÿ�þƪXÏ|óHÒÐí_j§ÿ� Þÿ�?Rß–ÿ� ­iã]'¹/rã̘ºþéº`Oj�êt)n_Ç:�šÙch‰w{WЕóo…|G¦k<Т³™ÖqÈWø—×èké*�(¢Š�+Å:œºG‡§¼…Ö&E™×p…^UFŽáCÿ�€ÖÅG8„ÛÈ.JŸ0I»qÎsÆ1@wây5&ð·4¹õÉç†ËK71Ý„„Háâ—ta6ÿ�œ¨VÃŽ{×cw7ö'…îg»Ö˜ù;Fò4b½HfXÂ+‘À8ÎkÓ&ð¦©q«èéo᫯XÃox¾DQ4Èí2¶þJn s€~j³¬x“ÂÚG„#—zö}Ë¥¥¼^dF؇uFùA‘î`;Ó­�dÜëz¾=ý—öô³ùRi/ÅÄvûÕnnZ)„P»v(aÜg­l]¦­ˆ4í <Kv¿i±¼§0[ù»’Hv`y{x0éȼÕ-'HðÕì5[]Ãki ù–v±ìEg”«Ù M¥y<™9#±mmà½Vö -!Ð/.´Ø£òZ$†Gµyi(£¨Æ�í@0ëm¯éOoâ6¿²Ô5 ›&a…#@‘Lß&òÊÑ�I%Nr�T¾Õu‹½A´MBòG¿Ò®%ûtÞRq €à( ¸8<w‰ÅiYÚøGPÚ\: òE1žK˜#ŠO.pÎňdózóT|#«CÄÌ ªéš±K{YžóOPsPÆ@wÆ< qœåϨ  þ"e÷„”° uYäÿ�¡\ÿ�ˆüëA×5K¹|;~ú˜º‹YóâÄÄŠ,ØFÏò°¬‚6Ü[–:Tþ=½Ð4>]^ò=µ»+w¸°þÑŽ6•Ú0\,y!³¸q´ðkJÑtÿ�ê—+ý‰lâ(MÄÑìKìÒgÍoî«·<ä7µ�Qð½ýíýž½{¯†·¼¶ieÓÚÂ[·…` œ«n-“ýÞ‡—×5mFOêQÇâYï­ï¼7{¨G2C [L~^ÓUܨÂFr[Ž#5ÙÛjž µ¹žêÖÿ�@†{¹|™¦ŠhU¦“û¬AË7=4é¬|¡MmöºŸ,…ÒÝ^8bfÞ0áÆw{ÐVòÝÙx»KÓ_Y¸¿†]6îi<õ„u–ßc~í}ÙtÆ=ù¬­[Õ/Ã÷Ϫý¢-hH·^Tkö&;å]ß# ·–å‡N•¦xEÕbt‹Ã–Œ$EU‚)£, :H$c¿5m‡…-µ»‹6,ZµômçÂ|¥žá0IÜ¿yÆ'9à�ç4M[X[j—úëÜ®²¿éVíI†µ–|®Õ ” É ŽÙ­o Þ^ý£ìú®²÷×wVÂâ$ „ª¶áhÀ%øø|°ã“ÍCe§ø2ÏJ‹T»²ð­¼ÝL¶÷Pà D˜••v¹…±ü@â´-ÓÂQ-²hzBܦðñ­üÔ9ÈÆáŽs@ÍôúŽŸwã]ZÃWh^ÏPŽD°1ÆÉrßc¶Â1*_/®Ò9õéN›ZñN¡âMA´Ûí2ÖÇK¿Kyíînv– Idò n`ÇiÓƒƒžŽòãÁÐKmâé´(ä—þ=õ)Ú_à”õãÐÖ¤š6—.¦šœšm›ß Â]4 eQè�röº¦³‰ï|7u{#\5Ê]ÚÜùQŒÙ–\ÆU”ÆO_Þ!¨ÿ�·5G¸þÑ‹S&·ý™&”bM¢?;ÊÜ7ïØDÙÝ·onõ«§jz`7ú½çˆ´‹¿³þæIàtŽ;TÜHW%Û I�’Fp8ŸáMBÃ]ŠoÎ|>èÐ#¥Õ´j'´]›ž)ä,yU+Ÿ»ß q@#Ôõ¤ÓWX}zGQâ`- ˆÚ}öm¤íݸ/ÍG=ˆ¨õ§Õ5[4Ô¤Õ$†ÖZÛg,1”dŽþ8Áf+¼1*À`Žõµÿ�Ãë»:hl<,º=ݤגÏ$/“<m� 碾.9æ{×[¨Íá9tå¾ÔåÑ^Æé•–{–ˆÅ3 m!›†< }(—‹à¸ŸUð´vú­ÞŸæjRFÏn#$æÖvë9\tÇÌxÎÁÓçÔ4ý#ûRÛ[qn|I5±±Dbd—RxÛ,T¾ì9`CÀà×e¯¥Ç‡n®&Ó Õ£‚¹ŠÙÑd²©e FOcï\ž‘¡ZjÛ4z/„o´û ó-ÝžšÁ>ß—tdÝòÙSÆ0¹ øZñN±«[ê†ûLH{É­¦³{œºífUUO 2ÈæFg€‰^{¢ZøŠu¹ñ½§…dÔ¾Ósm N{yfòfx¿×ùŒFï/<©Æ}«JÍwo¢µ“[i¿Ú^j¼ÚŒfE†XÈS Ëó–ÞÜîÏS@…CIŸQžÖOíKh­îRVLBå‘”}ÖóÈçºv¢€/ÑE�QE�VG‰äý„,¿ô¦*׬ÿ�È.ûYéLT¯^QûBÿ�É5þÂè/^¯^QûBÿ�É5þÂè/@áOù´?ûÁÿ�¢Ö«xGþ<µ/û ÞèæªÐå“Âz3oU@Ö0«"av8'JƒÂÚ$²YêkZ¢cS»\$‰Î%nOÉÔÐýÏüŽ:oýƒîÿ�ôe½7Å¿ò*j_õÄÿ�1Y7£Åšrmꤛ£»ÌLŒIoÀù:þ‚“űøcPs­êˆÊÒ&=þJ�ì+Ÿðüyj_ö¼ÿ�ÑÍSÿ�`Kÿ�Aí_þþÇÿ�ÄV…´Id³ÔÖµDƧv¸IœJÜŸ“©  ÝWþN Aÿ�°,ßúW_âßù5/ú☯>Ôô™㮉mý«¨ÚD­çMëó7�íÆ? ê¼Q¡Ë†5:Þ¨øˆü­"`óßä ¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÕ?ö¿ôÕÿ�ïìüEax[D–K=@kTLjwk„‘9Ä­Éù:š�ß¹ÿ�‘ÇMÿ�°}ßþŒ·¦ø·þEMKþ¸Ÿæ+&ãC”x³NOí½T“ctwy‰‘‰-ø'CŸÐRx£C–? ju½QñùZDÁç¿É@…yÿ�ÂÏùìk¾ÿ�Ù+§þÀ—þƒÚ¿ýýÿ�ˆ®ᦑ%Çü&Õµ|¿^Æ|©oÆÏ™²§æ=è¼¹ÿ�‘ÇMÿ�°}ßþŒ·¦ø·þEMKþ¸Ÿæ+&ãC”x³NOí½T“ctwy‰‘‰-ø'CŸÐRx£C–? ju½QñùZDÁç¿É@…sþÿ�-Kþ·Ÿú9ªì è=«ÿ�ߨÿ�øŠÂð¶‰,–zÖ¨˜Ôî× "s‰[“òu4¿sÿ�#Ž›ÿ�`û¿ýoX??ä•xƒþ¸/þ†µ5Ƈ(ñfœŸÛz©&Æèîó#[ð>N‡? ¬_ŠZ4–ÿ� õÙŽ¯©L�|¹dB­ó¯\( †ÏþI]¿ýÿ�DWÎÿ�?ä^¸ÿ�¯¶ÿ�нÊÓEü3‚oíL£«ybDÛþ§8û½+Á¾Ú´Ú ì.g‹L6Æ@u}E�uSÿ�ÈVÏýÉ?öZ][þ@÷ßõï'þ‚jœö,5;AöÛ®RNw.GÝö¥ÔìYt›ÆûmÑÄpYp~Sí@õJÃýeïý|ýhûÿ�Ïýßýô¿áU,lX½çúmÐÅÁ2óò¯µ�ni?ò;èõð?ô$¯|¯žô+V‡Ç:73Éþ8‚>òz ú€ (¢€ Èñ66«¡Ki ‡&X]â'TIUÞ<ôù•Yyãæ­zÄñ…ÂÚx3Z¸’Ñ/!ŠÆgšÝå1‰#K.à Œê(•ñ7‡µ]KWÔn,t‰„2ç»*Ý-¹¹0M1x÷£†VÛ"nŸ&20(¹Ñnì4Bº?…u?2ïS´½ž)µ$š\Ã4R3;K1eh Ç Î+¨åóx©´‘§@–¨@7Ýì•Á~øâÙ‡Pß!;<`skYÕ_LŠÕ-í…ÍåäâÞÚ“ËV}¬çs`íQÉ8'ކ€9r×]ÕÆ^¢êXZ³ÏoûÉAœ’œ߃“Ù¾‹ÄzVµ¯L‘XxzãNŒè·V›åšUwxYc>T…‚â&\Ž›Ç¾7ÛÄ:êÝZXÛ®£qmq8‰õÝ&HÓïˆÎC Tƒ€{*–™ãÙµMvÞÎù¬'‘âËûP®Fæ& › \žF@ç�`ð£O¦ÞÍ…{aur-…Ìwú£]=ÊE*»D ‘×aPê üü€+¡Ó¬î"ñ¾©}ý˜öö·Z}¬bbcÃIÍB±9Û"`ãϱ5¯kVZ^¬­¤ÚÚ_G¤Üêßé¾qQÀâ@ ãÌR¦áÖ®ë^1¿ÑVÖÖMí:´±<ò[YµÄñ¢+`|ñÀÍ“ž2Š3OB@!ñ‡ï.ôÏÀšÛgÕ­ŠÚ>äùq�DŒî#3ƒÓçÏQYÞ!‹Ä“ø¨[øSQ#SÑcÓíÙ®-GïÚ2[÷Üß_º}³·'ˆï5[Xm¬<<n.¥±K»«=FSm䣖 e.J8�€>RIS4Oû#àþ™«:™>É ErÀŸ½²Ü7ô  MwOÖ/ßÅ?eð•Òý¿A‹O´c-¨ýà3d­à9ý³?ìåÚ¯‡nµ½~êëTðî¥wa©ZE‘«ä}”¶èæT˜+¡Èl®ò2x®‡TÕ5ÚØÁocõÄêí5ÅÕßÙâ2(ö7ÌÄ €0¤d` ÇmkQÐ/<g}m¥Cu§Ù_ ›‡k¿)•E»8B6æÆ[’ “×9  š†•¬#Æö1x^æiõE1ÚN³Û•qöX¡³K¸�ÈÌ7 à篦ͭŮÍwiák¨Þ[˜¥•Ú{fŠUª³cÌÞ³Ê |¤¨ÉÁÍiêÞ"¿ÒµH£“J„éïs·Ú ౕÕ,ANT3€Ie<Æq<M«]ê‘Ú½¶“ é¶úõ±¾{²«¥ähå#ÛÊî2w׌Pz]޽köNoNÍoy©ù– <B—3ù©*3fTe,ÌØÈÆ_§hÚ–«è.t n­ím¯ò`–-âxäD]î¤ìD):cñsNñäšž¿¾…~útòÉß­¼ûT®FæÌA¸HÇ‘9ÅIuk½kÄ~ÔWI†2âöVµ¼ûFf‘ ¥ÁPÑíUÇÌ0Çh¥Ž³•¸—Â7Ë2ͨ²47…¡Iç2ÙZMŒŒ¬ ã$ú쯬õ [Á÷63¼Vº•݃Bí%"™ã •=pñô§kZ†¥b!þÎÓ­îËî.÷ŸgDÆ0¹ ÌY²pヒ8ÎZx®îú=éZTs¾«¥¶£ Ïuå å|¬B7üö^Fyë@¬¡ÕSMiü7-¬¶zkY›Hf‡7L^2»ý¡ccqS‡<zéø& Û?èö:Œ¶Wvvq[IŽ’ˆ°(Ì0qÇ9ö•¦xömS]·³‡A¾k äx…òÁ>Ô+‘¹‰ˆ&ÂW�‡'‘9Åë vïQÖ«i0Ú}¦Ö[ˆÄw¾sFEe“ 8óTü¬Ã¯<P…c­XÜøM.ü/të¤iØK(žÙ€—÷�:fLàˆ[œó ÍgAá­^Ym./ü;©5¦ûøÞÆ×T[ybY®Zd`c™Q”«e-W¡è^¾“PÑ–I›tÑM=¬ýö†Wˆ·âPŸÆ¹ßˆžÒ/¼5âföÂÞæöxày£äíI2gî¶OQÏ€6£´ºÑ<mtkÅÍ¥¡–m1uʃ²=ìsè¹'ô¬{(5rßXÂ÷:4ê®ú‚›ˆí£cŒ†måHwÛ€¸Î Å_xSFÐmVÑt‹k[¯¶éñm#HV_ôØqÐ�QŸF9«×^5ºÒ¾Ý­¤ï ælæ{‘0¤Té`A‰òé@hž#°Ò¥´ÿ�„Jí.¤¼»¸W¸»¶¨–âIWs$ŒÜ�áCRIk«h–6_öñ ÊÜI©ùMm™äó +€ÊÌò|¹ãš-ük©\hít|95µÂÞ b/[x•,&óá26çËÎâ2�æ¢Õ|u§¼p[øzëP»ŽÚ)îá´Y¦\gdo,®GûEçÐo¶Z~<sÃ%¬p^ÒÎIDmÕ Aùƒ¶  ·‰bI�e ¡€e*F}Aèh QE�QE�U bÎ[ë(á‡n庶˜î8ùc™¿)«ôP^QûBÿ�É5þÂè/^¯^QûBÿ�É5þÂè/@G†/µÅ𞌱è°: ±¾#Ë8ÙÅAákÝmlõ/FÁÔîÉ&ô 5²>çoZ³áø~ èÑÉ®é‰"XÀ¬­w*DkFx5…¼M Cg¨‰u½5 jwn]Æ2¦V õèE�Kq}®ÂY§1Ñ`,n€_·G™o“ŸOΓÅÚãxcPh°"ŽX^ƒŽ}6Sî<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò4ßøŸ@›Ã„qkšc»D@U»Œ“Ϧh[íúÿ�ý�­ÿ�ð<ñ…ákÝmlõ/FÁÔîÉ&ô 5²>çoZßÿ�„¯ÃŸôÒ¿ð2?ñ¬/ x›@†ÏQëzjÔîÜ»ŒeL¬AëЊ�æu;½XüuÑ$m*!r4‰BÃö¼†]ÍÎí¼}1]WŠ/µÆðÆ $Ñ`D1°½úl®[S×ôgøí¢^.­`Ö©¤J0¹BŠÅ›‚ÙÀ>ÕÕx§ÄúÞÔ#‹\ÓÚ"­Üdž}3@ßo×ÿ�èoÿ�ãÿ�ˆ¬/ ^ëkg¨yz4§vI7 `ù­‘÷;zÖÿ�ü%~ÿ� þ•ÿ�‘ÿ�ax[ÄÚ6zˆ—[ÓP¶§và5Üc*eb^„P·Úçü%šs�âÆèûpäy–ù9Ùôüé<Q}®7†5&‹!ˆå…è8çÓe>ãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#MñO‰ô ¼1¨G¹¦;´D[¸É<úf€5¾ß¯ÿ�Ð ßÿ�Çÿ�\/ÃK½^?øL>ϤÃ.ï^´›®öì“*>S=k¼ÿ�„¯ÃŸôÒ¿ð2?ñ®ៈ4[OøL>Ó¬iðù¾'½–?2åz˜a“È>´Ñ\_kŸð–iÌtX‹ íÑæ[äçgÓó¤ñEö¸ÞÔš,†#– ãŸM”ûø|ø³Nkºaln”·ÚãÀ&K| ç©Áü7Å>'Ð&ðÆ¡Zæ˜îÑnã$óéš�Öû~¿ÿ�@+üüEaxZ÷[[=CËÑ pu;²I½Íl¹ÛÖ·ÿ�á+ðçýô¯ü ük ÂÞ&Ð!³ÔDºÞš…µ;·®ãS+zô"€%¸¾×?á,Ó˜è°7@/Û‡#Ì·ÉÎϧçX¿¯5‰>ë©q¤C &ºE¼ÞWç^ÛFkrãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#X¿üE¡Þ|2×míµ>yž�8®‘™ŽõèÉ  6—ºÐøg ö:'ÛFvù=q³Óµx7ÃùnSAœCl²¯Ú›$Ë·«Ûïvž$Зá”çZÓ„ÃGT1›¤Ý»ÉÆ1œç=«Á>ÞÚ[h3¤÷PÄÆéˆY$ qµyæ€7çžûûNЛ$ÎÉ0<þ¿wÚ—Sžøé7¬/ù>~qòŸj'Ôôó©Ú0¾¶*LŸ5p>ï½.©ªiï¤Þ*ß[3�&RIÚ}èÏŸÿ�>1ÿ�ßÿ�þƪXÏ|óHÒÐí_j¹ý­§ÐB×þÿ�/øÕKOOW¼Ý}l3pHÌ«ÈÚ¾ô§¡Krþ9ÐÖËû@äK»ø“Ú¾„¯žô;ÛKè Ô2·Ú c÷“Ò¾„ Š( ²üC¢¯ˆtK*[Û«H.PÇ3ÚìèÀ†\º°�ƒØgÞµ*ޝqsm¦É%œ–‘ÜD®ÉòÁf9cÏ 1¸àdg4’¾ÍÚMs¯ëQ,ñ\›iZ-¥M¸o–0Ã%CV I<`â´õjÖ(¤š{y`”OÅ»$2�@eÈ#¡ ‚ EsPø^{¸´æm?íÚí¦¼æÖEB¿c7*â3&A)RÇ>¢«GâŸOª46z4¶¶Wki}4b8Õˆ eu-q¹1¸¥#7<�o7…Kkz~«ý»ª‹‹8š"¹„¬êì¬ûÁø¶ ùvà(Û·­¶Ó^híõDXÉ#ʶ>rˆ¢w$’„(p2Iq�öªßÛz¼>#°†itÙ´ëëÙ­mâ¼[#•Á2–ÚÍû¢B¤ã'ØÓ5=Z_O£%Œ6ŒÒ¥¬ ‰$ÚÃc K| bT(*}pM�R‹áí’ZAi6­«\ÁŸ>ši#9·”(e$ 9 ×’jìþYç±¼þÚÕ#Ô­#hEò4BIcb G_/aøFÏ^j¿‹u½_F·¾½ÓåÓL}“]Ío,RK4›w>VQ‡ wdçŽ9«©øŸWÓÓÄ7رk-ëÉ0ùL$œ4H¿9p¨CJ$@< �è£Ña‚è]A=ÄSù 0c*†f]ÛÉœçý£QØø~Ö˱xu¥šæÊ;O±îœ®ö‹nÐÐÝã§oZ¡áKÄ×w—pëúBÚDª¯m0òп]ÊQf—§Ëógœô¯©ëWÚÝô[iÑÚé·Ar·Håå܉#e` ÆU²Au ]h7WÑÁ,úÞ£a-¼ o+[<F;…8˰‘b2FOSощ}c‹/“MÖJÛ[›v „X6FÆ2I*Ї’xõÉ­/í½^ØC4ºlÚuõìÖˆ¶ñH^-‘Êà™KmfýÑ ¡FÒq“Žrp?átñ_ø9  i¼ ÏtÍ®ë8¹¹‚í×̈4% ¸Ì}Ìk•û¾€q‰õ N–?ì¿íY¬ÍÕâÞÃrE»ÍIDä u$êXŽzšÉѼUâ]cW¶¸‡CðO<‘†h•£UfU}Þy-–�òÔŒõ8æ¿Ö5[ÁZ½Á±M.öõæ··HœOk;ƒg,U²¤’Œ š�ÙµÑ4¿ \9:ÝŽ“<·ia=ÄkdîËò‡Ú ,Ab£9ÅZO Û,zBÁ}w\â{HÐÆT-ã ’¤”Ù#/\ãñVuÃ\]·¨Ì[Œ÷%]¯úVüK¨øzƒIûW&ÖImÖò&e¹u*…eùÎî:öÀê@¶¡£Zêºü‘ê÷–×¶P´O ¬Éƒ˜8ue8ÎÎ`ñ׊¥eà˜ôû[}wVQ£Ú}ŠÉ€¬‘nRUÿ�u“‘© ƒ„ÁÉ4V/ê)i{¥­ØÒ,LóKi!›w€±‰Py䱯:ñ%Ÿ‰µvÖÈé)§ÛÜɤ[j’¥Ò³‡óƒb5Ã.Ül¹ÝŒ¯ËÍ�iXxFÛMy£·Ôuc$*ØùÊ"‰Ü’J¡ÀÉ$ ÄÚ Ó<š$š};§ª^I¦ÚËio̱mhßaØÄ ècL7^9ÏJ¯ÿ� &©x4FÛìvZ=Õ¥½ÜÒ]Bò°ÞAt,¬D!3 =±Í¿M«Üi·’ê·Ö÷@_ÝÅ•lѲˆîeC’]²>Q€�Ú n´OÑMŒ6*/n@ÒÉ2F@K‰$%œ° œnbÃc¾iþ Ñ“Ä:%Ö•-åÕ¬Hb•í¶d †\º°�ƒŽ™÷¬c[ÕôýLK ºlšrßZÚ< 7ïž4,Ò Œ €…ÚÙ9ã:ãÅZý¶•ý£åXÜ 5ôÈ-¢„«´«rУîyBãNÞ2p7 ð»}á—Ôt´«sTfŠxçƒÉæw·•OÝÉÛÉ<æïmµËË«Ý_Tš[”U·Ä†…ËÆñ•ŒÁ™Ï9qÈ<b _œ魡i§éz»òâ{•%‡amË S9/•#o™ÐϨGˆ|Gy£ZÏjº|3 o!»žKYfExeh—+‡UrŒKe¶àsš�¿q¤Û»ÛÛŸjêQN™gƒÎ‘ŒlDl†2Ÿws:gÞ›iàK=:è\Øjº­¬®›.Œr§úPÞÏ—Ê»`¦ÒÀÀ´×CÒîõõ„Yd»Iƒ+0‰£VÛ\ô­z�j"Çƃ  �3žê(�¢Š(�¨/ È´“ìb?´ˆÌŸuIã$w®;ã=EtnÖSh‘=ÀS嬮Q v€H@h’½Ôõ_ \jOq¨IªÚA¤Üj gŠ4h<mOݪ‚® ã##Ë<šdÚ¾«áhn×V¿:”ƒG¸Ô•š$Mß1À>OÞ&3“ÁÉ=¬ÛXê—Ñ]é:õ¶“ö…¬«;Û_<ÒÎ0°mA¼wldù¢/ꚬ³Ÿ½“!ÓdÓPZ³1‘eÛæÈÛ”m-±>Q»êh´Ú¾«áhn×V¿:”ƒG¸Ô•š$Mß1À>OÞ&3“ÁÉ=¼ããtÚ®á M+VÔZþK¶[¥‘¢DòÞ?–E]€|Ÿ½Lg'ƒ’{z„^Õ5Yg>#{&C¦É¦ µfc"Ë·Í‘·(Ú[b|£v1ÔטüoÒõ£àë}G[’Ƚ¬‘Ú@-Y›ÌÝ–’FÜ£i&4ùFq¼hØü)ÿ�"v‡ÿ�`ø?ôZÕoÿ�Ç–¥ÿ�a[ÏýÕCòxOFq­ê¨ÆµdL/îÇäéPx[D–K=@kTLjwk„‘9Ä­Éù:š�ß¹ÿ�‘ÇMÿ�°}ßþŒ·¦ø·þEMKþ¸Ÿæ+&ãC”x³NOí½T“ctwy‰‘‰-ø'CŸÐRx£C–? ju½QñùZDÁç¿É@…sþÿ�-Kþ·Ÿú9ªì è=«ÿ�ߨÿ�øŠÂð¶‰,–zÖ¨˜Ôî× "s‰[“òu4›ªÿ�ÉÁh?ö›ÿ�Bjëü[ÿ�"¦¥ÿ�\OóçÚž“"üuÑ-¿µu[H•¼âé½~fà¸Çá]WŠ49cðÆ ç[Õ•¤L{ü”ØW?áøòÔ¿ì+yÿ�£š§þÀ—þƒÚ¿ýýÿ�ˆ¬/ h’Ég¨­j‰Níp’'8•¹?'S@÷?ò8é¿ö»ÿ�Ñ–ôßÿ�È©©×üÅdÜhriÉý·ª’lnŽï121%¿äèsú OhrÇáAηª>"?+H˜<÷ù(°¯?øYÿ�3¯ýwßû%tÿ�Øÿ�Ð{Wÿ�¿±ÿ�ñÂü4Ò$¸ÿ�„ö£—âkØÏ•" øÙó6Tüǽ�w—?ò8é¿ö»ÿ�Ñ–ôßÿ�È©©×üÅdÜhriÉý·ª’lnŽï121%¿äèsú OhrÇáAηª>"?+H˜<÷ù(°®Â?ñ婨Vóÿ�G5Oý/ýµûûÿ�X^Ñ%’ÏP#ZÕÚá$Nq+r~N¦€7îäqÓìwÿ�£-ëâçü’¯×ÿ�ÐÖ¦¸Ðå,Ó“ûoU$ØÝÞbdbK~ÉÐçô‹ñKF’ßáž»1Õõ)‚À—,ˆU¾uë…ÐÙÿ�É+·ÿ�°"ÿ�èŠùßáÇü‹×õößúW¹Zh²†pMý³©€tuo,H›Ôçw¥x7ÃûV›A…Ìñb醨È ªù Ùÿ�¹'þËK«Èûþ½äÿ�ÐMSžÅ†§h>ÛuÊIÎåÈû¾Ôº‹.“xßmº8Î .Ê}¨^©X¬½ÿ�¯ƒÿ� ­`ùÿ�»ÿ�¾—ü*¥‹¼ÿ�Mº¸#†^~Uö  Í'þG}þ¾þ„•ï•óÞ…jÐøç@&æy?ÒGÞOA_BPEPT5O׬ Ž¥š ë FFVS•`ÊAÔ¿E�s3xóÜý¥ ¾Y¼ï´oS¹Cæì æ|²›hÆî½}M^o èï«Ëª}•…ÔÅZm“ȱÊTaKÆc‘‚A<VÅÏÛø'@´¹†âÞÎXÞ¶¼ˆ-ÜÛc• Uw`¹² `ç‘RØøKFÓµ½·‚ãÎIXÄ·“InùÜÈŒåTÌ2 pH­º( Sðv…¬^]]^Ù»Ëwmö[‚—F²ÅΕXŒœ2;m¯‚ô+GÔ-îeŠ»K›ÙçI�ÊîW8P3Œ€0+~Š�ÍÒt-?DˆÇc `(3\I33±!G â’oi“êãTx]áC2Lè²û»Ð0WÇmÀãµiÑ@âxÃÑ:´V—¹{¨ü«ÙÐG+† È™ Ù €sÒ›ÿ�‡ÿ�³#Ó¼›áiɺDÈ"RÁ·gÌÎw Þ’9$ž–Š�dzð¾a¨K{kjÑË,­3 žC˜z¸ˆ¶ÀÇûÀO>ÒËY‘ ¨,§ûE²¥Äб¾xPØÆ†Þ˜$b±ü3â‹íkÆ^,ÒgŠØYéÁ¼‘¹Ë«I @èu´�W)â ëßZŸ°jrÙ¤c¸Óµ/³˜äfù¼ÔÞ»—0@b>n:WWE�s> ´O2ãPº¿¹Ô&ˆÛËr·óÆZÌQ×å Øœ·X> Ð>Åeh-%X¬¡û<;næVÏ6`Û?ÙbGµoÑ@WÞÐõ¶¸¹¶›sݼqÝÍRF¹Ú­°F'‚ ^°Ñìt¹î¥³ŽHÍÔ­4ªfvMìIbªIUÉ$ dòjýÏÜø'@»º»¹–ÎQ%ÜÑÜMåÝÍ´¨AY«�m0�ñMƒÀþ·ÒîôÁi<–wn%–)ïg˜oÜ[z—rQ·–\y=tTP¾Ðç†Ö9mçvµ›Ï†sy7œ¯ŒgÍß¼ðq‚HÅAÿ�‡×g—oyÆ•—ÈÔn#ÇšÛœ|²”·;zg<rk¤¢€"¶¶†ÎÒ–(!EŽ8Ô`"€°™icocçù ãÏ™§“tŒùsŒã$àqÐ`{UŠ(�¢Š(�¢Š(�¢Š(ñ^·w¡êÜܾF…¨^ÇæBw†„ÀvïÝ÷[w ʃÎ+?Ålj´½+T¶žïNYßB»¾†k[yÂðÚC»>oÊxÚG!« Õ¼¢k—²^jÝË,5³¿ž410“b¸\ Œr@'šCའ§K Üî-d³ÿ�H¿¸”\aЇr<g>ƒÐP}^ïÄÖ¶qAq¦<å%k›³c+F¤cË”º©÷0zsÇû@Ëÿ� àšHžúGCÀ«AEwsø7F¸[Q"ßî¶¢ŽEÔ®UÊ1«83ŽÞ'¥p_-¡³øUkkmÅ7Gj0B8�{�(ÚüUmáÍ.~jwGi$Ër H�|½Z‡Ãþ=ñMµµêÃðïS¸s#2Ü(ØÍ#Ÿw¨<~ÙøcÄþ‡Âz4rkºbH–0++]Æ ‘äž AáohÙê"]oMBÚÛ€×qŒ©•ˆ=z@ÌÞ?ñSxŽÊsðãSYRÒá´®\3ÂK}Þƒhð!Mñ¼Us ÞÃ7ÃNÞ7 +\©=~íu÷'ðùñf ×tÃØÝ)oµÇ€L–øÏSƒùoŠ|O MáB8µÍ1Ý¢ *ÝÆIçÓ4‰ÿ� ÅßôLu_ü _þ&²|?ãßÛ[^¬?õ;€÷÷23-ÂŒÒ1)÷zƒÇá^“ÿ� _‡?è?¥àdãX^ñ6 ž¢%ÖôÔ-©Ý¸ wÊ™Xƒ×¡æ×þ2ñ Ÿt­MüìZl‘&žgäRÇ.ÞƒéÚºxûÅW: ì3|9Ôíãxðҵʃ×îÓõ=FŽÚ%âêÖ jšD¨Ó ”(¬Y¸-œí]WŠ|O MáB8µÍ1Ý¢ *ÝÆIçÓ4‰ÿ� ÅßôLu_ü _þ&²|?ãßÛ[^¬?õ;€÷÷23-ÂŒÒ1)÷zƒÇá^“ÿ� _‡?è?¥àdãX^ñ6 ž¢%ÖôÔ-©Ý¸ wÊ™Xƒ×¡ÌÍãÿ�7ˆì§?55•-.aûJåÃ<$·Ýè6ÿ�ßxûÅW: ì3|9Ôíãxðҵʃ×î×_qâŸiÒ wL1­Ò–û\xÉoœõ8?‘¦ø§ÄúÞÔ#‹\ÓÚ"­Üdž}3@Ÿð±|]ÿ�DÇUÿ�À¥ÿ�âk’ð'<G§ÂMöOjÿ�i×®®&òç öynèËÉ\}ëØ?á+ðçýô¯ü ük…øgâ Óþ´ë|>o‰ïe̹EÞ‡fdò­�V›Çþ*oÙN~jk*Z\"Ãö•ˆxIo»Ðmþ)¾ ñ÷Š®tØføs©ÛÆñá¥k•!¯Ý®¾ãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#MñO‰ô ¼1¨G¹¦;´D[¸É<úf€1?ábø»þ‰Ž«ÿ�Kÿ�ÄÖO‡ü{â›kkÕ‡áÞ§pþæFe¸Q±šF%>ïPxü+Òá+ðçýô¯ü ük ÂÞ&Ð!³ÔDºÞš…µ;·®ãS+zô"€9™¼â¦ñ”çáÆ¦²¥¥Â,?i\¸g„–û½Ð?àB²¾ øßĺŸ€õ{;ß�ê:}¼±�÷RÜ+,Cp9#oáø×¡\xŸÃçÅštƒ]Ó kct¥¾×2[àg=Näk⟈´;φZí½¶³§Ï3ÀGÒ31Þ½�94o㯯€â³_‡º“[0D.…Âí)åc~6ôÇ5ãÞ Õo¬ty¢µÑç½CpXÉ€Ú¼töýkè»OhKðÊ s­iÂa£ªÍÒnÝäãÎsžÕàŸïm-´Ò{¨bctÄ,’8Ú¼ó@e×õV¿¶sáË Ê®yƒ-œ{v¥¿×õY4ë¨ß×Q«Bà¹aAž•­>§§NÑ…õ±P’dù«÷}éuMSO}&ñVúÙ˜Àà2’NÓï@?á"Õÿ�èX»ÿ�¿£ü*µ¦¿ª£Ü•ðåÓî˜±Äƒå8t®‹û[Nÿ� …¯ýþ_ñª–:žž¯yºúØfà‘™W‘µ}è_ ê—×Þ<Ð’çHšÍDã #ƒŸ™}«é*ùïC½´¸ñ΀°]C+} p’?y=+èJ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢³|A«Å x{PÕ¦ÆË;w›øˆñ8�q Ûµ¯k þ¦ëZxcaÑ„c]½&¸o„:LÚWÃ]0Ýö›Í÷²“Ô™r“ï·mw4�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEW½¼ŠÆšmÛZXáF~iQ °  å´/ü“Xÿ�ì!þ‚õêõå´/ü“Xÿ�ì!þ‚ôèÿ�‘;Cÿ�°|ú-j·„ãËRÿ�°­çþŽj¡áY<'£8ÖõT cÚ²&÷còt¨<-¢K%ž Fµª&5;µÂHœâVäüM�oÜÿ�Èã¦ÿ�Ø>ïÿ�F[Ó|[ÿ�"¦¥ÿ�\Oó“q¡Ê<Y§'öÞªI±º;¼ÄÈÄ–ü“¡Ïè)<Q¡Ë†5:Þ¨øˆü­"`óßä ¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÕ?ö¿ôÕÿ�ïìüEax[D–K=@kTLjwk„‘9Ä­Éù:š�ÍÕäà´ûÍÿ�¡5uþ-ÿ�‘SRÿ�®'ùŠóíOI‘~:è–ßÚº-¤JÞqtÞ¿3pÜcð®«Å±øcPs­êˆÊÒ&=þJ�ì+Ÿðüyj_ö¼ÿ�ÑÍSÿ�`Kÿ�Aí_þþÇÿ�ÄV…´Id³ÔÖµDƧv¸IœJÜŸ“©  ûŸùtßûÝÿ�èËzo‹äTÔ¿ë‰þb²n49G‹4äþÛÕI67Gw˜™’ßòt9ý'Š49cðÆ ç[Õ•¤L{ü”ØWŸü,ÿ�™×þÆ»ïý’ºì è=«ÿ�ߨÿ�øŠá~i\Âa[Q‡Ëñ5ìgÊ‘ülù›*~cÞ€;ËŸùtßûÝÿ�èËzo‹äTÔ¿ë‰þb²n49G‹4äþÛÕI67Gw˜™’ßòt9ý'Š49cðÆ ç[Õ•¤L{ü”ØW?áøòÔ¿ì+yÿ�£š§þÀ—þƒÚ¿ýýÿ�ˆ¬/ h’Ég¨­j‰Níp’'8•¹?'S@÷?ò8é¿ö»ÿ�Ñ–õƒñsþIWˆ?ë‚ÿ�èkS\hriÉý·ª’lnŽï121%¿äèsú Åø¥£IoðÏ]˜êú”Á`Ë–D*ß:õŠ�èlÿ�ä•Ûÿ�ØôE|ïðãþEëúûoý+Ü­4YÃ8&þÙÔÀ::·–$M¿ês»Ò¼áý«M ÎÂæx±tÃld÷WÔPU?ü…lÿ�Ü“ÿ�e¥Õ¿ä}ÿ�^òè&©ÏbÃS´mºå$çrä}ßj]NÅ—I¼o¶Ý@ç—å>Ô¯T¬?Ö^ÿ�×Áÿ�ÐV°?üÿ�Ýÿ�ßKþRÆÅ‹Þ¦Ý \Ã/?*ûPæ“ÿ�#¾ÿ�_ÿ�BJ÷ÊùïBµh|s s<Ÿé‰#ï' ¯¡(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯3ø«púåÞ‰à+7>~±p²Ý•ë¬gsõ+Çû„W jÚ­–‡¥\êzŒë¥²‘Û°‡©=�îkƒømaw®jzÄ ^*çT->ë¢ýßŰ úg½�z4q¤1$Q¨HÑBªŽ€‚E�QE�QE�QE�QE�QE�QE�QE�QE�QE�VG‰äý„,¿ô¦*׬ÿ�È.ûYéLT¯^QûBÿ�É5þÂè/^¯^QûBÿ�É5þÂè/@G†/µÅ𞌱è°: ±¾#Ë8ÙÅAákÝmlõ/FÁÔîÉ&ô 5²>çoZ³áø~ èÑÉ®é‰"XÀ¬­w*DkFx5…¼M Cg¨‰u½5 jwn]Æ2¦V õèE�Kq}®ÂY§1Ñ`,n€_·G™o“ŸOΓÅÚãxcPh°"ŽX^ƒŽ}6Sî<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò4ßøŸ@›Ã„qkšc»D@U»Œ“Ϧh[íúÿ�ý�­ÿ�ð<ñ…ákÝmlõ/FÁÔîÉ&ô 5²>çoZßÿ�„¯ÃŸôÒ¿ð2?ñ¬/ x›@†ÏQëzjÔîÜ»ŒeL¬AëЊ�æu;½XüuÑ$m*!r4‰BÃö¼†]ÍÎí¼}1]WŠ/µÆðÆ $Ñ`D1°½úl®[S×ôgøí¢^.­`Ö©¤J0¹BŠÅ›‚ÙÀ>ÕÕx§ÄúÞÔ#‹\ÓÚ"­Üdž}3@ßo×ÿ�èoÿ�ãÿ�ˆ¬/ ^ëkg¨yz4§vI7 `ù­‘÷;zÖÿ�ü%~ÿ� þ•ÿ�‘ÿ�ax[ÄÚ6zˆ—[ÓP¶§và5Üc*eb^„P·Úçü%šs�âÆèûpäy–ù9Ùôüé<Q}®7†5&‹!ˆå…è8çÓe>ãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#MñO‰ô ¼1¨G¹¦;´D[¸É<úf€5¾ß¯ÿ�Ð ßÿ�Çÿ�\/ÃK½^?øL>ϤÃ.ï^´›®öì“*>S=k¼ÿ�„¯ÃŸôÒ¿ð2?ñ®ៈ4[OøL>Ó¬iðù¾'½–?2åz˜a“È>´Ñ\_kŸð–iÌtX‹ íÑæ[äçgÓó¤ñEö¸ÞÔš,†#– ãŸM”ûø|ø³Nkºaln”·ÚãÀ&K| ç©Áü7Å>'Ð&ðÆ¡Zæ˜îÑnã$óéš�Öû~¿ÿ�@+üüEaxZ÷[[=CËÑ pu;²I½Íl¹ÛÖ·ÿ�á+ðçýô¯ü ük ÂÞ&Ð!³ÔDºÞš…µ;·®ãS+zô"€%¸¾×?á,Ó˜è°7@/Û‡#Ì·ÉÎϧçX¿¯5‰>ë©q¤C &ºE¼ÞWç^ÛFkrãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#X¿üE¡Þ|2×míµ>yž�8®‘™ŽõèÉ  6—ºÐøg ö:'ÛFvù=q³Óµx7ÃùnSAœCl²¯Ú›$Ë·«Ûïvž$Зá”çZÓ„ÃGT1›¤Ý»ÉÆ1œç=«Á>ÞÚ[h3¤÷PÄÆéˆY$ qµyæ€7çžûûNЛ$ÎÉ0<þ¿wÚ—Sžøé7¬/ù>~qòŸj'Ôôó©Ú0¾¶*LŸ5p>ï½.©ªiï¤Þ*ß[3�&RIÚ}èÏŸÿ�>1ÿ�ßÿ�þƪXÏ|óHÒÐí_j¹ý­§ÐB×þÿ�/øÕKOOW¼Ý}l3pHÌ«ÈÚ¾ô§¡Krþ9ÐÖËû@äK»ø“Ú¾„¯žô;ÛKè Ô2·Ú c÷“Ò¾„ Š©¨êºv‘möJþÖÊ ã̹™c\úeˆ®Wøáàý=Ì63\ê×ø,¡%sîÍqš�ôš+Ë4Ÿˆúö±«[M4^Ñta&fûn¬’\:wÚáO³ñ¯B ÑHky¡ûJ�hÑYßÛú7ýì?ð%?Æíýþ‚öøŸã@4Vwöþÿ�A{ü Oñ£ûFÿ� ½‡þ§øÐý¿£Ð^Ãÿ�Süj•ϼ)hÏñ.‘NMìyÓÎhz«ß_Zi–3^ß\Gok ï’Yj¨÷5Á^|_Ò®${_ 麉/GlàaŸö¤#îVÛÁ"ñ­ì:Ĉ’ÊA Ù·îìelüÇÛ'ê"€)[ ¿Œ^ †îx&·ð5„›âŠUÚڔùÜýn¤íõµUE  *€�À›QÁEkhª ÀP:�; }�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘â_ùÃÿ�a /ý)еë#Ä¿ò ‡þÂ_úS�k×”~пòMcÿ�°„_ú ׫ה~пòMcÿ�°„_ú РxSþDíþÁð赪Þÿ�-Kþ·Ÿú9«€Ð|ã[Ÿé“Áñ2òÞ-"xáz‘”.|Îp8¨¼?à?ÜÛ^µ¿Ä›»eKûˆÙE€mî²0gÿ�YüGœ{ЦÜÿ�Èã¦ÿ�Ø>ïÿ�F[Ó|[ÿ�"¦¥ÿ�\Oóç3xÆ«â+(ÄËÆ™í.fþÏ\¢«Âqæw,§þïI¯ø Æ–Ú ä×ï.bHòÐ=T8ôÏ™@Á\ÿ�„ãËRÿ�°­çþŽjäá]øëþŠ¥ïþ —ÿ�ŽVO‡üã;›kÖ·ø“wl©q(° ½ÖF ÿ�ë?ˆóz�ÜÕäà´ûÍÿ�¡5uþ-ÿ�‘SRÿ�®'ùŠñ‹ïxª?‹ZV™'.dÔ%Ód–=DÙ€Ñ c” ¿}sÞº À^4¶Ðo&¸ø—ysG–„éê¡Ç¦|Ê�ö çü#ÿ�Z—ý…o?ôsW#ÿ� ïÇ_ôU/ð\¿ür²|?à?ÜÛ^µ¿Ä›»eKûˆÙE€mî²0gÿ�YüGœ{ЦÜÿ�Èã¦ÿ�Ø>ïÿ�F[Ó|[ÿ�"¦¥ÿ�\Oóç3xÆ«â+(ÄËÆ™í.fþÏ\¢«Âqæw,§þïI¯ø Æ–Ú ä×ï.bHòÐ=T8ôÏ™@Á^ð³þg_ûï¿öJ£ÿ� ïÇ_ôU/ð\¿ür¹/ø3Åšü$¿añýÖŸö}vêÞ}–AþÑ*íÝ1ùÆ dqÎ1Ö€=’çþG7þÁ÷ú2Þ›âßù5/ú☯9›À>5_Y@~&^4Ïipë7özå^Ë3¹e?ðzMÀ^4¶Ðo&¸ø—ysG–„éê¡Ç¦|Ê�ö çü#ÿ�Z—ý…o?ôsW#ÿ� ïÇ_ôU/ð\¿ür²|?à?ÜÛ^µ¿Ä›»eKûˆÙE€mî²0gÿ�YüGœ{ЦÜÿ�Èã¦ÿ�Ø>ïÿ�F[ÖÅÏù%^ ÿ�® ÿ�¡­r³xÆ«â+(ÄËÆ™í.fþÏ\¢«Âqæw,§þïY~?ðO‹´ßjך‡Ä+­JÒ(’ÑìB Fà0[yǯNÔévòJíÿ�ì¿ú"¾wøqÿ�"õÇý}·þ€•èÖþñ‹x+Åøv¶‡L‹O° ò³åîßÓgä>Òµ+í"Ylõ©,c•1¬A;WœäzÊ€;¹ÿ�ä+gþäŸû-.­ÿ� {ïú÷“ÿ�A5ÍË kBþÙ‰¦.Êå_ìãåÆ3ü]ÿ�¥-þ­G§\¼ž&šDXœ²p7�GÞ ¾©X¬½ÿ�¯ƒÿ� ­bÿ�Â;®ÿ�ÐÕ7þþ*«ZhÓ½ÈOL›f*ßèàî8ýê�í4ŸùôúøúW¾WÍ~ÒõèOy¬Éz¦q„h‚ãæ_sþE})@> ðW†üTöÖmvà�% ¬€zRlלjß³¾‡$†mS¹±“GqÜÇŸ¡Áüɯe¢€<7JøYªØj¶ö:Ç„¼5«é’¸Io­à–$îÅr2}”~5Ýÿ�Ÿðý ßÙ?øªíè #þÿ�€è\·ÿ�¿²ñTŸðý –ÿ�÷öOþ*»z(ˆÿ�…?àú-ÿ�ïìŸüUð§üÿ�Bå¿ýý“ÿ�Š®ÞŠ�â?áOøþ…Ëûû'ÿ�Lþ†-ÿ�äYÿ�®òãòß]Õ^ÆÆ×M³ŠÎÊÞ;{x”*Gà(«Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@dx—þApÿ�ØBËÿ�Jb­zÈñ/ü‚áÿ�°…—þ”Å@õå´/ü“Xÿ�ì!þ‚õêõå´/ü“Xÿ�ì!þ‚ôÔxbû\_ èË‹ ±€+à2<±ƒœT½ÖÖÏPòôhNì’o@Áó[#îvõ«>ñ?‡áðžšî˜’%Œ Ê×q‚¤F¹gƒPx[ÄÚ6zˆ—[ÓP¶§và5Üc*eb^„P·Úçü%šs�âÆèûpäy–ù9Ùôüé<Q}®7†5&‹!ˆå…è8çÓe>ãÄþ>,Ó¤î˜c[¥-ö¸ð ’ß9êp#MñO‰ô ¼1¨G¹¦;´D[¸É<úf€5¾ß¯ÿ�Ð ßÿ�Çÿ�X^½ÖÖÏPòôhNì’o@Áó[#îvõ­ÿ�øJü9ÿ�Aý+ÿ�#ÿ�Âð·‰´lõ.·¦¡mNíÀk¸ÆTÊĽ gS»ÕÇ]FÒ¢#H”,?kÈeÜÜîÛÇÓÕx¢û\o jMCË ÐqϦÊåµ=FŽÚ%âêÖ jšD¨Ó ”(¬Y¸-œí]WŠ|O MáB8µÍ1Ý¢ *ÝÆIçÓ4­öýþ€Vÿ�ø?øŠÂðµî¶¶z‡—£@àêwd“zšÙs·­oÿ�ÂWáÏúé_øøÖ…¼M Cg¨‰u½5 jwn]Æ2¦V õèE�Kq}®ÂY§1Ñ`,n€_·G™o“ŸOΓÅÚãxcPh°"ŽX^ƒŽ}6Sî<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò4ßøŸ@›Ã„qkšc»D@U»Œ“Ϧh[íúÿ�ý�­ÿ�ð<ñÂü4»Õãÿ�„ÃìúL2îñ5ëIºïnÇù2£å9Ö»ÏøJü9ÿ�Aý+ÿ�#ÿ�á~øƒE´ÿ�„Ãí:ÆŸ›â{Ùcó.Qw¡Ù†<ƒë@Åö¹ÿ� fœÇE€8±º~Ü9e¾Nv}?:O_ká@I¢Àˆb9az9ôÙO¸ñ?‡Ï‹4黦֯éK}®<d·ÀÎzœÈÓ|Sâ}o jÅ®iŽíVî2O>™  o·ëÿ�ô·ÿ�Àñÿ�ÄV…¯uµ³Ô<½S»$›Ð0|ÖÈû½kþ¿ÐJÿ�ÀÈÿ�ư¼-âm=DK­é¨[S»pî1•2±¯B([‹ísþÍ9Ž‹�qctý¸r<Ë|œìú~u‹ñJóX“ឺ—D0Â`¤[Íå~uí´f·.<OáóâÍ:A®é†5±ºRßk�™-ð3ž§ò5‹ñOÄZçÃ-vÞÛYÓç™à#Šé˜ï^€š�³i{­†p Ñá0ÿ�c¨}´go“×=;Wƒ|?–å4Ä6Ë*ý©²L»yÚ½±^÷iâM ~Anu­8L4uCºMÛ¼œcÎsÚ¼áýí¥¶ƒ:Ou Ln˜…’@§Wžh~yï¿´í ²Lì“Ïë÷}©u9xÉù“çç)ö¢}OO:£ ëb¡$ÉóWîûÒꚦžúMâ­õ³1Àe$§Þ€,ù÷ÿ�óãýÿ�ÿ�ìj¥Œ÷Áï1d‡ý ç÷ýÕö«ŸÚÚwý-ïòÿ�T±Ôôõ{Í×ÖÃ7ŒÊ¼«ï@z·/ã�Ml±´D»¿‰=«èJùïC½´¸ñ΀°]C+} p’?y=+èJ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+#Ä¿ò ‡þÂ_úSkÖG‰äý„,¿ô¦*�ׯ(ý¡äšÇÿ�a¿ô¯W¯(ý¡äšÇÿ�a¿ô @ð§ü‰Úýƒàÿ�ÑkU¼#ÿ�Z—ý…o?ôsU hrÉá=Æ·ª kÕ‘0¿»“¥AámY,õ5­Q1©Ý®Dç·'äêh~çþG7þÁ÷ú2Þ›âßù5/ú☬›QâÍ9?¶õRMÑÝæ&F$·à|AIâXü1¨9ÖõGÄGåižÿ�%�vÏøGþ<µ/û Þèæ©ÿ�°%ÿ� ö¯ÿ�cÿ�â+ ÂÚ$²YêkZ¢cS»\$‰Î%nOÉÔÐn«ÿ�' ÿ�Øoý «¯ñoüŠš—ýq?ÌWŸjzL‹ñ×D¶þÕÔ m"Vó‹¦õù›€vã…u^(ÐåÃoT|D~V‘0yïòPa\ÿ�„ãËRÿ�°­çþŽjŸû_újÿ�÷ö?þ"°¼-¢K%ž Fµª&5;µÂHœâVäüM�oÜÿ�Èã¦ÿ�Ø>ïÿ�F[Ó|[ÿ�"¦¥ÿ�\Oó“q¡Ê<Y§'öÞªI±º;¼ÄÈÄ–ü“¡Ïè)<Q¡Ë†5:Þ¨øˆü­"`óßä ¼ÿ�ágüοö5ßì•Óÿ�`Kÿ�Aí_þþÇÿ�ÄW ðÓH’ãþ jÚŒ>_‰¯c>Tˆ7ãgÌÙSóôÞ\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ó|[ÿ�"¦¥ÿ�\Oó“q¡Ê<Y§'öÞªI±º;¼ÄÈÄ–ü“¡Ïè)<Q¡Ë†5:Þ¨øˆü­"`óßä ¹ÿ�ÿ�Ç–¥ÿ�a[ÏýÕ?ö¿ôÕÿ�ïìüEax[D–K=@kTLjwk„‘9Ä­Éù:š�ß¹ÿ�‘ÇMÿ�°}ßþŒ·¬‹ŸòJ¼Aÿ�\ÿ�CZšãC”x³NOí½T“ctwy‰‘‰-ø'CŸÐV/Å-K†zìÇWÔ¦ �>\²!Vù×®PCgÿ�$®ßþÀ‹ÿ�¢+ç‡ò/\×Ûè ^åi¢È~Á7öΦÑÕ¼±"mÿ�Sœ}Þ•àßíZmv3Å‹¦c º¾¢€:©ÿ�ä+gþäŸû-.­ÿ� {ïú÷“ÿ�A5N{ ûm×)';—#îûRêv,ºMã}¶èâ8,¸?)ö  z¥aþ²÷þ¾þ‚´}ÿ�çþïþú_ðª–6,^óý6èbàŽyùWÚ€74ŸùôúøúW¾WÏz«Cã�›™äÿ�HHAy=} @Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r:åÌÐj³YË+˜®'ÓîmÄ]F’(ö»?W5×Wñ.Êþ]"Â÷Iéð^ÜgåyPôó"}–€7ü;q5õÅü²3%ÍÔ¯ž‹m‰b¨êƼÿ�ö…ÿ�’ký„"ÿ�Ð^½BÊÒ+ {8!·‰bAèª� ¯-ý¡Ø/ÃhAþ-F ?ï—?Ò€:¯ _k‹á=cÑ`t0c|G–0q³ŠƒÂ׺ÚÙê^ƒ©Ý’Mè>kd}ÎÞµÎhüaáÍ.ÎãRg·´Š)�µá•�<ãÔT>øÏà>Úõ.5Õ¥¿¹1k!Ê<ŒÊzz@…Åö¹ÿ� fœÇE€8±º~Ü9e¾Nv}?:O_ká@I¢Àˆb9az9ôÙ\´ßüþ#²¼]J"+Kˆœý–NÞ¼cÑò¤ñƯêí¥¾£;M,{PYO×è?o×ÿ�èoÿ�ãÿ�ˆ¬/ ^ëkg¨yz4§vI7 `ù­‘÷;zÖoü/o�ÿ�ÐNãÿ�$ÿ� Èð÷Æéöשq¨Î­-ýÌé‹YQäfSÓЊ�—S»ÕÇ]FÒ¢#H”,?kÈeÜÜîÛÇÓÕx¢û\o jMCË ÐqϦÊó;ÿ�ŠžŸâî“âï¥:u¾›%¼’}ò³6ã=ë¢ñƯêí¥¾£;M,{PYO×è?o×ÿ�èoÿ�ãÿ�ˆ¬/ ^ëkg¨yz4§vI7 `ù­‘÷;zÖoü/o�ÿ�ÐNãÿ�$ÿ� Èð÷Æéöשq¨Î­-ýÌé‹YQäfSÓЊ�ì./µÏøK4æ:,ÅÐ öáÈó-òs³éùÒx¢û\o jMCË ÐqϦÊ妸×àwñ•âêSùZ\Dçì²pÎð•ãˆß•'ˆ>5xPÐ/m-õÚicÚ€ÚÈ2~¸ Aû~¿ÿ�@+üüEp¿ .õxÿ�á0û>“ »¼MzÒn»Û±þL¨ùN@õ«ð½¼ÿ�A;ü“ü+‘ðÅh_ð“}¾úhþ߯]_[í·vÝíÚNƒÁæ€=âû\ÿ�„³Nc¢ÀXÝ�¿n2ß';>Ÿ'Š/µÆðÆ $Ñ`D1°½úl®Zo~Ù^.¥?‘¥ÄN~Ë' ï ^1èùRxƒãWõ öÒßQ¦–=¨ ¬ƒ'ëŠ�ô·ëÿ�ô·ÿ�Àñÿ�ÄV…¯uµ³Ô<½S»$›Ð0|ÖÈû½k7þ·€è'qÿ�€’…dx{ã?‚tûkÔ¸ÔgV–þætŬ‡(ò3)éèE�vÚçü%šs�âÆèûpäy–ù9Ùôüëâ•æ±'Ã=u.4ˆa„À7H·›ÊüëÛhÍgÍñ¯Àïâ;+ÅÔ§ò"´¸‰ÏÙdáá+Æ=¿*Êø…ñwÁÞ ð¯¥i×óIwsX‘­A;êFJ�ì-/u¡ðÎ<&ìuO¶Œíòzãg§jðo‡òܦƒ8†Ùe_µ6I—o;W¶+Ô­þ1ø.?Å¥6¡0»]0[û4˜ßåmÆq޽ëË~ÞÚ[h3¤÷PÄÆéˆY$ qµyæ€7çžûûNЛ$ÎÉ0<þ¿wÚ—Sžøé7¬/ù>~qòŸj'Ôôó©Ú0¾¶*LŸ5p>ï½.§©éï¤Þ*ß[3�&RIÚ}èÏŸÿ�>1ÿ�ßÿ�þƪXÏ|óHÒÐí_j¹ý­§ÐB×þÿ�/øÕKOOW¼Ý}l3pHÌ«ÈÚ¾ô§¡Krþ9ÐÖËû@äK»ø“Ú¾„¯žô;ÛKè Ô2·Ú c÷“Ò¾„ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŒfŠ(�ª:®¦ë–bÓU±‚òÜ0*t »‡Cƒß“W¨ _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( _þ¿‚¿èWÒ¿ðhÿ�…oà¯úô¯üZê( Xü6ðQÿ�„_Kÿ�Àu«v> ðΙ‚ÏD²†2ÛŠ¬c“€3ú Þ¢€2ÿ�áÑ?èkÿ�~ÅðèŸô µÿ�¿bµ(  ¿øFôOúÚÿ�ß±Gü#z'ýíïØ­J(6/hðΓE§[$ˆC+*‚9´¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Utilsaw.jpg��������������������������������������������0000664�0000000�0000000�00000031427�15030617045�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ó"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ) ©Cš�Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€¸R}«”¶ø¤\[¤Ÿ:’9RFAî:×Vzùý¿ãîóþ¾¦ÿ�ÐÍ�{&ŸâÍ3Q¼[X\ùŒ �Jô{ûÖí|éqku=ý¬¶RO ̤ŽhT±Còõ¨õþºõ_xÌêÊtÝR/²jÐ`IpvtÏU4ÛQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEäÞ;ºžJ‘Lè¦Ò#€Üg-\Õö±«ÃnÎùÖpë³{¹ÈàOZè<ÿ�#¼Ÿõçþ„õÏ ‹ÌFš!*+ØX€HéÈæ€=?Àþ7ƒÄÖ­opŸfÕ-ð·ÎyÔz©ê váK_¶Û^ZY‹;È丆g-Žêw ŸB?*öí=Ú]:ÚG%™¢RIîq@h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�CÐ×Ïçþ>ï?ëê_ý ×С¯ŸÏü}Þ×Ô¿ú  #šXsåHéž»XŒÖφg–oYy²»áŽ718â°ëg¿ò2Yÿ�½ý(Ù袛æÇ户¯˜WpLó\zP¨¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(®k\ñ¦™¥\6›lfÔu–S²ÂÁ<ÙAõnÈ=Ø^aá|Mñ^¿p¾/×5M;L´“d©ˆ Éž^ÜuoË=€=ÒŠŽ"µ·ŽP$Q¨DQØ€*J�òÿ�Èï'ýyÅÿ�¡=sµèž.ð¥â{ûJÇY·²S ÄÑËhe'œä:úÖü*ŸÐÑcÿ�‚Æÿ�ã´̧ß_¨¯sÓ?äiÿ�\WùW™…^ ü%<ú7ÿ�¯P³­¬ Ø3G©`0 Ò€'¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š3‘‘@sÓxÂ7<ÓøkJ–W9g{D%©$WCE�s_ð¯<ÿ�B¶ÿ�€iþbËÁ^Ónã»±ðþ™msÊK ²+/n»E�®x[Gñ ŽMBÓ70ÜÝBæ)âÿ�vE!‡Ó8­š(ûŒ|?Í…ì^"²òï~D7J=eÿ�¼£ýêµ§øçIº¼M>üO£êmÒÏRO)ŸýÆûŽ?Ý&ºj«¨é–½›Új6p]Û¿ÞŠxéü �Z¢¸ÿ�øCõïð¦¹-¤CŸìëüÜÚŸeÉßü±í@ñ¬úAø·GŸJ·A›‹6÷Þ£rÀÔ}h°¢ ´¼µÔ-RêÎâ+‹yRX\:°ö#Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +\ñ† Î–“Í%Σ ýÖŸf†k‰>ˆ:sïYÇž)ùµ+¦ðæ˜Ç‹K'y"ÿ�·7Hþˆ ÿ�j€5u¿iZ%ÒØækíQÆcÓìcógor =ØYGKñ_Špu›¿ì0ŸøðÓåÝs ô’qÂýÀ«¡Ñ<;¤xrÕ­ô«íÕÎdq’òŸWs–cîI­J�ÎÑ´+ÃöeÒla´„œ°ysêÌycîI5£E�QE�Q\ŽâíGQÔ­íî´{hažêæÔ=µñ™ãhEft1®Ô&2ye¨ÓÆ©ÒZö]Ê-ÚŒ––Ô[ÊSÈŒò¿“ò.è°0%—¦h²¢¹[ÅúŽc¦½Æ„¿lºYYíÅàÀdÇîãmŸ¼‘Ê.;O#×PEPEPEPEPEPEPEPEPEP“ø3EÑn¦¹Õ`ÿ�„VK-Rùæhì\Ášb…§FÜm mQ³$cðçŽ.-|#¤Ãeu¥ÿ�¡é–‰ „ªÍq©‘ o0`º<m|2ÛEz5ŸŠ<=¨Ýý’Ç]Ó.®yýÌq»ñþÈ9­j�ó OÇ·s¾­og¬éP-­å“Cqå"k¯*eu2dì Ÿ—‡Æ!ª{¿­®½}§Yë¼ï­}™ä¹@Û"ûɽ‚ºDˆcÉ=€í^‘T/õÝ#Jž5VÆÎY¿ÕGqp‘´œãå Fyô ;âF«¨Ë¢¥ŒÚ< oe)I#iËI`¬‹åù{[†ûØÆs€nøâßN¼ñî‡i%ž‡w}>uG©Ëåàùle!Y‹Þíïá‡5Ój>¶Õone»¿¾{K ö%£0¸ �”Þ ÈV�äúšè(Îî¼K©xsþ%úÆYôËxbŠÚò77ZÁ©f…ƒ€ l¯Ý˜àsY3üJ{-:c§jšhV¹•2d0\â$$\4¨û³ƒ“ó`æ½|SáæEuí,‹A›’/#ýÈÎ>~~^xç½O¦ëšN²®Ú^©e|©÷­ÂJë´œPG†uYõ wÄË©[]A Ô&Ò8— ½¼n;Žå%Ž*ç'8^š¨XëºF§u5­†«cwqúØ ¸I>qó�r9õ«ô�R ŒƒÔZ(–¼ð›ö—½Ñ&¸ÐoÜîi´æŽÛˆåñ÷¨?µ¼Y |º¾”šÕšñöÝ%vÌ«[±çþ�Çé]…“¢øŸFñ 9Ó5§’?õœ¬±û26ZÕ‹­xSE×Ý%¾²_µGþªî1OõY†ž+ iþ1ðÿ�:}ü^!±^–Ú‹®Tz,Ê6·ü {u ÆŠå­<£®­çhwÁKmM|­ØêQòQÇ_ºMméƯi±j:]ÜWV’Œ¤‘ž>„uØò(õQ@Q@Q@Q@Q@Q@Q@®ø«Gðèu ¿ô™ÔÚB¦Iæ>‰ååŠÄÿ�Š¿ÅGø¼/¥7û²_J?T‡÷›é@:÷‹4˜¢¼¤½˜â d2ÜLÙŒsøð=ëÈñ‡ŠGúD¿ðŒimÿ�, e–úE÷~R/Ãq¢¶ô/ èþ6Ÿiþ“/ú빘É<ÇÕäl±üñ[4“¡øgGðä —e-!̳´²ŸWs–cõ5­E�QE�QE�QEçðü:¿¶½‹T¶×m­õˆnç™.¢ÓÈY"šF‘á•<ßw9ÁÈ+^kJÏÃ~%Óí þ!Óðnç¹!ô¶da4##/“†~#�`ç5×Q@Uÿ�€§½Ñltñ¬m0$ñÈïj+‡ÝîS!\FyØ8æ»Z( Š( Š( Š( Š( Š( Š( Š( Š( Š( 0/ý©á;ÍTmRmBö[IfÓ¥…-ZK©$Š2E 6†WÀ$œc?Šu~æ÷Ä:}ˆÖ…¬š]Ôp*X¢åQ ~\‚>C4d±ç�m8ϤQ@V‘¬êrxÆ;gmj])í {ïtÓóÀˆ£nX—‡šNN ao‰®£‡Xº6úN£u¨›hâ šÚõ3,m R±Ìß1eÆrw íè 2ßâýGÃþ+K»ûöº{³ÙG¤ùf”µ"˜çÎ Ó ªœ îtû’4ù¦jm+bîÛÉr|µ8brzž8bÃŒm”P–]:Ëá jÃJÑug´þÁž ´érÅ<,À,vë• (9Î@;vä±ÏòÝ&±â};TÓ4›øÍ‚Ì÷7wOlfŒÄÀ@ЬÙrÓËëÍv”Pá ¢ût6Ú~›¨G§Ce¶9u ¶’Ûæ]°ê ‹ŒœŒão,w vtQ@Q@Q@Q@>%ðõ—Š´ ý¤K{€x¶‡\åKíÓ¹®+Âß .|©5LJ¼St–ÒßYÞ[¬±Ê=ö•ô?—étPÛšÏÖ¯¦Ó´ß>Ú8䙦†YªæIV<’<nÏáZ‘â_ùÃÿ�a /ý)Š€¿Äßóï¤ßù?øŠ7ø›þ}ôûÿ�'ÿ�[4P6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüElÑ@ÛüMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ³E�coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍ¿Äßóï¤ßù?øŠ7ø›þ}ôûÿ�'ÿ�[4P þMSE´¾–%ŠI£ ȸìp*†½câJx­´½VßL°eýýÂEæ\“ýÔÝò(ÇñOµKá/ù4ßúâ?™­š�ÄÐ|'¤xtÉ-¹’òng½¸o6âcêÒOÓ§µmÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Q\&‘ñ?NÖ´»{ûkp±Ì¹ $ÛYH8 Œv Š�îè®Oþ›ù÷Oûÿ�ÿ�Ö øêØu‚1õœ…�u”W%ÿ� å¯üò‹ÿ�øVά®®’²Ä R}Àç>ÃÒ€5(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¨.o­,Æn® €zË _çX×^:ð•—ü|x›HCýß¶F[ò4ÐQ\ü,ﺃo©ÉuŸº-lç›'Ûbá”iá¯ÜŒdÒÚ0Üv2 ºŠóøÛÅxbúïHð~§i$j \Ý<§Ì?å’»3ddp8ÍWð7ˆ>)kTšÖ¦[YL·à•‡²Ç?U€=B²<Kÿ� ¸ì!eÿ�¥1V½dx—þApÿ�ØBËÿ�Jb  z(¢€ +žñF«{¥^hiÍÂÜ_¼ZÛˆ÷L¿f™ÀÈ Šs¸t5¨øä^ÙiÒè–×í÷šp–ìG• Ï$-å¾æÝ¹¢}Õ8Þ¼Š�îh®Bñ«y©¤ú„ZŒ0Ýê×66öçìÞP¬ÿ�ÝËç÷'vX ØÛ•ÎmØüD´½kR4]^nÒEšU‡jÇrû!s‰IÃ0#�1’�æ€;+Ô<g¦éPêWÑ\Ái¦Ý%­ÕÃ*”FdFSÃ*D¨:u=:Ô2xÚ gH¯4mVÒyL~DS$Y™^Tˆ2‘!�–0A!†áÅ�uV.‡®\j÷úÅ´ÚlöcO¹H¥hÎýФ˜ùXò7ŒöÁ\rÕ�cxKþEM7þ¸ækf±¼%ÿ�"¦›ÿ�\Gó4ÝmüP“Åýƒ,XýïÛæ–6·b·õ  º+‘þÖñÜ'xSJ¸±˜5‚¸¸h¹¥>#ñb¿À— `˜u;vÀõùŠÐ[Er+ã]A ‹ŸxŽ2Ç ”êq/ô xþ+çxoÅÜé28çfh®¢¹ø•á¡´O&£lÍœ ô»”éïåãõ¥¼¹üCk~‚`Ñÿ�è@P[EsðxëÂ7;|ŸèÌÍœ/Û£ ùšÐ‡]ÑîHj¶2–é²á?‘  )¨ë"F §¡Sjž»¤ê·Vš•¬×vÎcš”#aÔê(BŠ( S\ñ¬Z&´úsÚ³²Ä²ï Á ‘Ò³¥ø¡§Û¨’æÙ¢‹pV‘›…ÉÆO+ñÿ�üŽòל_ú×15›_„¶XÖMî «Œó’xÆ=hè {ˆ® I¡pñ¸È ä–¼oÂz†­à»”´¸Cq¡JÛP,é,–„ö±%=ûwõ¯a†UžæLíu 3èhôQE�QE�QE�QE�QE�QE�QE�ò¿…“À°2’¬B8 ïjú¢¾Vð·üˆPÿ�»/þ†ÔØ%ýÙE?h“§÷ª+?µµÝŦº¾v‹4Èûö’``ŸöNzö=zÔi÷è*Ìc-Úl7É.ÒI Ý‘Œ cÚ€&Ô´ÙtÙ³ !qº)—îȾ¢½À_ñá/û‘ÿ�ìÕç0°‹C’ÒéiÁ¡œ¸‹ üªO8ö$×£x þ<%ÿ�r?ýš€:ÇuÝ‚¢‚Y˜àêkëÇ^²ÿ�i»öÈË~@æ·XÚ9]eaAêªVÚ&“dA´Òì ÇO*Ýû �Àÿ�…áPmõ9.³÷E­œódûlC@ñü2‚m<5â{‘Œ‚º[FŽÆBµ×Q@€ñWˆî9³ð¥³³]Þ[Ãôã{Òƒ©xú䑇t[1ØÝj&‹ú×_E�r&ÛâÁµ/Y¯sœÓ0ÿ�¾¤QÓÚøG<]*qã©ûßeÒà#Û~üW]E�r#À³HÚüaâyÉí¼XGNÞZ.?:AðÓÃ’sx5+çî×z¥Ä™õã~?Jëè bßáσ-˜²xcKf$’e·YàY­›mJ² Úé–PÐÅn«Žý…^¢€ (¢€ (¢€ Èñ/ü‚áÿ�°…—þ”ÅZõ‘â_ùÃÿ�a /ý)Š€5袊�ÌÕt ?ZšÎkÕ¸2Y³<©aØÌ»Iùdí$dç�œu5N/h0iK¦Ck<vŠb`‰y2Ñ1Á÷ev&s…QÐ[ôP8<  ¬pƱߪÃr÷qãS¹%|ï`|Ìó¹³ÛæoïÆ¿ü8VÚñcX!·U]FämHŸÌˆÞq±¹R98êk§¢€9m7Ãs>§¯¾µii-íâOoÜÉ(eXR!æ#(\â5oâåºü ™$ð‡¦a’Þñ•YûFãrl;•U¼Ìª†‚‚*§�Ž–Š�©m¦ZZ_Þ^ÀŽ“Þ²¼çÌb®Ê¡ÚNÐvªŒ€3ž•nŠ(Â_ò*i¿õÄ3[5á/ù4ßúâ?™­š�(¢Š�(¢Š�) ¥XÁ½-FmJ¹ÿ�_¦YKÆ>{un=9Ÿ?‚<'sŸ;Ã:;’1“c@úíÈ­ê(“o†> g.¾²±ŒÂ gð+‘ƒöðÚkWŒºŽ¥óÎòÅ Ä@±!wrÇ�ã9Šõª(¶Ÿc›c¤/;ÇÀk‰ÞW?VrIüêÍPøÿ�þGy?ëÎ/ý ë­‰zŽŸã†—pÀ^Î=¾cŸ™«“ÿ�„“Eÿ� ¥¯ýý¬Ÿ}~¢½ÏLÿ�U§ýq_å_<'‰4]ëÿ�KN¿óÔWÐúSÒ,ÙH „ß@袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+åo È…û²ÿ�èm_T×ÈZˆ´« ǧ]]ù7J® ˜‚’ÄŒà{ÐvŸq~‚\0ñp�øH,¸ÿ�¨|¿ãGü%ÿ�õ0Yà¾_ñ CþA³×EþF½#À_ñá/û‘ÿ�ìÕàšŽlb†hoµky‘ʲ˜­%B¤g×9ë^Ýð¿W°Ötyî4û…š5ØŒFAV¸ ò(»¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š¥ªêú~‡§É©ÝÅkkÞ’VÀúSì94=Ýݽ…œ×ws$6ð¡’IáQ@É$× kñkCÖ¼A‡á«{­bñÉÝ$iåÁ¼ÌíÈÔ)ÏAÔT²oxö&ˆ$ú†å]¬Î¸½¼CÔ�Ô¡õ?1†kGÁ~�Ñ< ow•™.e/$Òœ¾Ü©Ÿî¨üù4ÔÖv¹eq¦y6'‚dóI |¹RLsÎÜ~5£E�coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍ¿Äßóï¤ßù?øŠ7ø›þ}ôûÿ�'ÿ�[4P6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüElÑ@ÛüMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ³E�coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍŸ¡ØK¦h–vS2<°ÆÙ3´ŸlÕ}z?‚ÜX‰",e¶½¶N0©ÊÏ8#žElQ@­¯Ž¬â»ŽÃÄ6³h:„‡j%áOý3˜|ô$7µuYÈȨ.ìíu Wµ¼·ŠâÞA‡Šd¬=Áâ¹_øD5 üß jíkÿ�˜]þé­O²ï‹¿Ý$³@É[øæ;K•³ñ>Ÿ6…rÄ*K1k)?Üœ|¿ƒm>ÕÖ++¢º0eaAÈ"€Š( Š( Š( Š( 4Q¹ËF¬}HÍ'‘üòþùƒ¬xƒQ±Ö£Ó´ý* ·0¬ÙžóÈ2Ĉl`ì¡wJàõªÏâ]wíºÂÛøzÞæ×K¹ò$1jÏyI()ˆ);d^7õÈç¸OäCÿ�<£ÿ�¾E<���`€W/kâË­OWŠ3M·žÁÄ2yïyåÊÑHŠâd‹a܃pî Œq]M�QE�QE�QE�QE�QE�QE�—¯ÜÞÙé2ÜÙM/.ï5´—�(’2ýsǽjV‰otû[xPñ8ЖF8>ŒÃ®eSê9\Ç4Iµ}y¬ô=B$Ó^ Ãl³Û!iüÌox¤nØÚw*“‘X×¾-µ·ñΙý›ÛCºF»M:KJvÂ0NL«(ÉÀ2rsŠÕ±¶Òoæ±]Ų%¤6Â(,´ùí¥ˆÅÕ8%ûª’‘Èâ®·„ HíÅ–§¨ØÍÞIíÞ=÷ ?>ä#;™Îå�‚Çf€ewg¬Á¥œÚkÚ<«vOšàÇ÷qÆÐ“Üœ m5_[Õ¬4ØÛÝÚEýŸqes;˜liãx@? 8]²6I^09¤o‡Þ µ¹´»}L`€Ú*IoI7˜ÕKî\³ü¡T“Ÿ‡;ªíÏ„¬Y¬N™<Ú0³ŽhcM5"|¹YY×iBYåpsžy  ø“B¶Óîµj·VÑ_[Ú/Ù¬‹ŸÞ¬EHÛ¸¸"PÀ€3 Õºþ·áÏØEe§[O¥Ëi=ÍêC±<jY0pØóÛŒá[$ žXÚØ_XÛêñÛÜÜ[\FŠbÿ�Ex<±—òt†w;’K­çеßÚj:‰âº»°·–giuˆÈåwP g(‡‚9Aï ÚOŒß_CªÞZ¼'PKK ¬í%Ù"¼PÈ…Û. “:($¨'§\ ©âëIµÙ4µK˜¤‚üÙ¹{W++}˜Ï…np ãw 8ùÔÕÏ�èßl/¡y§ý¦ô]¬Éƹ2«£|ÃÉ Ædâ¯Màøe×SV]WQ‰Öõ/ŒbòÚU€@IÌe°Ñü¤:ä`ó@Å1Ó_Q7¡,ÒØ]¼ÒFè"Hä ©O<t©4é^'Ò×Rѯîј ‘U— :‚ÔT á}9´ÍCO_9!½™§r²|ѹmùCü8˜™'Ö¯éöOcmåK{s{!;šk’»›·EUP8è�õêM�[¢Š(�¢±|Kâk Y[]ê¬3Ü­°|à+0$è8Æ}ý*ü'¢ÿ�ßÕ ¢Šåÿ�á8Óýþþ­ðœiþ‹ÿ�V€:Š+˜_X;…U˜à*òiu[=kÄik–¨4½&TÝs$�ý©Î~â1á?‹–ôÅ�7YñŠ[j £hv¬k˜ù­¡`#·ÞšNˆ=¾ñì9¨ô¯;êI­øžíu]]èT)Ö~ÐÆzöÏÌ}«sFÐôßéëc¥ÚGm�%ˆ^K±êÌÇ–'ÔóZ�QE�QE�QE�QE�QE�QE�QE�QE�QEðCuÁqsBãkÇ"†V„µÉŸM¢–›Áú“ig%„àÍdçýÂs}P¡®ÂŠ�ããñ»é,–þ0Ó›G¢õËe!ö”“>Žêk­ŠXç‰%†D’7•Ñ =AidŽ9¢h¥ExÜdaÃЊäçðGØ%k¯ jRhs3okdO6ÎCß0“…Ϫüh®¢¸ÿ�øL¯4Gø»I{éý§i™¬Û݈¢ÿ� {×WmsoymͬñσrK†V Ž �KEPEP7®èƱ-ÄëP[é· €ÄÖ^dÑ0êñI¼n˜%[dT á½x_jïmâ+{[mNçÏqž|øÇ”‘�’Jƒ¶5ä¡ç'Úºº(“Âz„sYÛ.¯hö3Å%¥ºYbx’01›~6œ`ü™*JæºÊ( Š( Š( Š( Š( Š( Š( ¹‰^ïÃBÔá)©4s§Ù™Þû<É“û·P H£æ =²:êÀñ%ö¯ky¢[iSÙBoîÞÚGº¶y¶â %‘?ç‘‹=¹�æµÅÖ4]gM#PÔoVÂñ^ôX–ÿ�YqnÙ%TG梓jœQF>` }KZñD:=ðÒæ×®ÉÚÚ}ÔÚHIžP’ŠTò†#ȱrX륇_Ôt­NM?Ä1ÛÈM³]As§C+yª®ˆËäüì�ÎïcRÅãM&{ëx>Õ$w–× 2ÚË„°WVr¬ ƒ‚«( ÜÚ†¥g&¹ykò$ºÎŸ5¼cN”âØˆ »TE»DÊÊrFÅà1ËS>#ñL+,rê®Ïo¨4+y£ºE G8û6  -ãÉ9 p:CÒµ›-j f²yH†S ©4 Æàµ‘À`pÊy5ÊE¨]jZ}àñ„ÚddvÞuݲ¤¶óÙÈ®¬¿>ó½x8‘ä¨Å�'„5m~ò[¥k†Ô]�ñꎖ·Öø�0Ž(0å˜MÅxEèKCCÓõK»kÍF(Ü\iwº•Ιes¦ÉlÏ,²NSt²dÎ.23ÊÖž…â¿ ˆ4ét no¢ÕoM‘¹ <ò 6p$gð�þ.€–è ®®I®/t£.™"Á<‹˜šòÕð¿ïFJ7áhÏíõ­}<YáèÖoÞi“LãPk½!¡òÄÁWäA{),rh;ÈÎ*]j^'Ô4ýfÕeלÝXj¢m(Ä"t—ý+ù@åâÝœ’IÆ0kKDñÖ¥>Žoõ9,š3¢VG·±–#jv©ÚQÜùˆc¹X}ÃÓp5×^xŸIÓõtÒîg•.ßÊà[JÈ<Ö)ç Uw0*2G<Pûß§[7›<¹‰yq—#ñÕ×jícÜm=‡J±XW0Ñ-/¤³¸žâ9Ñ‚ík)°äȱ‡fot\© �õ«ÄzZÍ$/4É4vérѽ´Šþ[ªB•É9Ú9‚(VŠ( .øõÿ�"§ý… þM\`»ž×Q·ÈT:¸a€AéØ×gñëþD+Oû Aüš¸Yÿ�ä#iôä(J}Võmåe•C$-x8úU:æ/[Œ)i¯ÛÆKqÂ\§gOóõ¬æUt(ÙÚÃqSÜ&›*BÐÚ\[\Û¶è.aºùã>ÙR0qÈ#�û%+©Û«L ‚9"½§Fÿ�=¯û•äs\Iu¬XÜM´Ë'”]•Bî9ëŠõÍþ@ö¿îPê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€€Ad ×)sà[[{©/ü7y6ƒ}!Üÿ�e­å?ôÒòŸ¨Ú}묢€8åñ^­ å<]¤ùVàãûWM 5¾=]>ü_R÷­«/h:•ì6vZ½ÅÄð}¢(â”1xòFᎼƒùV½y/ˆ¾Aªxšoi ¸Ò/^A*m×lL?»´©:õÎIÍ�zÕ›¡E¬[é‘Á­ÜÛ]]Çò›‹t(%Þ*~éõÁ#éÒ´¨Rñ>—¤ßýŠîb“ùbP»z©$uúƒUŽ402n§ú×ñþGh¿ëÁô6®Nö15”ÑÜ •õÏj�ú’xÃÆr I^1á_øRâ +ZóÛK„µ½™Nc?óÎBGäÝþµì‘H³D²!XdhôQE�QE�QE�QE�QE�QE�‘­è'Z—O™uKÛ lfiâ{QË”hòDˆàü®ã§ñ}1¯E�s/àÈeŽV›XÕe½—`kÙ$¤Ø­»`]žXBzœñž‚¡_�ÚCkÚ¾«laj²BÑ+m¹I"ÿ�«ÀÔ‘Œr8®²Š�ÄѼ3m¢Ûê0Ãus*ßÉæÊd®ÖòÖ2T"(½ºôÅQÿ�„Þx$MKYÕµ'kcm×2Æ,¯•(‹ónD;›qùG¾zš( ü5æÇbgÖ5)®l®…Ôw.Ño-å´{J„Ù´«°8PyÎsÍhÉe<šQ³ÚLWoÛbósë‚›3ÛîÕÊ(áåšèϦK¬jÓÅýœÚ\/#B fÚl`e‚(,Áš–÷ÀËu%ÌÞ!ÖÒGjŒËöq“o'›ãÉê±=ŽãÆ1Ž®Š�â®þÚÝÝÇvúþ²·¹e•~ÎXþö9€$Âwx£#98ÉVöŽú§Šôë‰ì¥H´À]o<åÅÎáþ¬¢œà:£ò�Ê.3“Ž’Š�(¢Š�òï_ò!ZØRäÕÂÏÿ�!O£ÿ�!]×Ç®<jOA©ÂIô�>My6§â{&’ tíFÀÉìý¡œ uM�uTWÿ� ußüÿ�h?÷ÜßüMð—]ÿ�Ïöƒÿ�}Íÿ�ÄУ¯ü„tï¤_νƒFÿ�=¯û•óÖ™ã=*iôã{¨YÇ:2#ùnÅ8n¹`01ëÒ¾„Ñäkþå�_¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(É>"ÿ�Èíýx/þ†ÕÍ«`ÊH äÚºOˆ¿ò;Eÿ�^ ÿ�¡µsT3]Ü:•k‰YHÁÉWµh_ò±ÿ�®+ü«ÃëÜ4/ùXÿ�×þT¡EPEPEPEPEPEPEPEPEPEPEPEPEr*ñ«¤ëúu•¤ðEmuk<ÌßÙò¢v)õ#�¯_˜Rè^-wÓu nx‘w5¥¬¦o ÊYw/ûÃòŒž=‰ š÷O²Ô¡ßZAumÁ'Œ:ƒë‚:òj‡ü"žÿ� •ÿ�€qÿ�…Dž.Ñ;YÔ»n§û2fÚPR]Ê»$trÊ0ûrXzÔG‹­5«å†¹‹‹ÀcšÕÔ¹‚TГޛÇ�[XPÏøE<9ÿ�@ +ÿ��ãÿ� ?áðçý�4¯üü*¿Ž¼;uc%äW²˜QaaºÒey¹”B¤ÜU€ÚH>•¡¦k6Þ Òd¼Ò%r¤¼qÉqk$`:ðrŽˆ ÁÆ:œŠ�þOÐJÿ�À8ÿ�´à‚h"H¢Aµ#Bª@Jóï |C’ö9õKÝ6î+›¸s¥ÛÊ^ÚvØE³ i ¹ ä†Äm•ÔÙxŸOÔµ ³œ<ÊÈÖî® m° ᑇ˜¹R¹;ã€nQ\¬Ÿ´#¦}¾Õ¯.bZ©T²œ1IßdnªS,§æÁPrF8ÕPEPEPEPEPEPEPEPEPEPEPEPEPE…ÿ� Žˆ5Y4Öžå.#¹ŒÒYL± ˆSÍ)³q ¤ Üîê(vŠÃè±Í¨Äó\«iÎ#¹&Ê`ªä¨T ³ÇzaT’w š…üsáè­Væ[¹âžD"[9‘ÓËÆòêSr*î\³�G4oV𮃯L“jÚE숻U§ˆ9ÓŸ©¬ïøVþ ÿ�¡_Jÿ�Àe®¢Š�åÿ�á[ø+þ…}+ÿ�–º;{xm-£··c†%ˆ½€Tolšœ:s9SC$ñ¦Ó‚ˆÈ¬sŒpdN3žk6÷ź>Ÿ¨µ„ó\›„e„VsJªì»‚D*©.rr8äPݦxÏBÕæ¶ŠÖêek´mö›I­ÄêFìÆdEÇ?.x©íüQ¤ÝkÙpÏ3\ï’0~Ë(‰š?¾¢R» \@l‚ �lQE�QE�QE�QE�QE�QE�QE—â-6ãWÐnlm¦X¥“aóµÂ¸bŽv°N;1®6/ê+«é÷ ¤hÚr]¬·d3¹†5K2$fóC„¹AÉ%‡£Q@Q@Q@Q@7z»ñ޲5È%´…áX"òü¹ÙYƒnBÜ”N„}ÑŽù£'ƒmä¹¾¹þÔÔV{›Õ¾ŠEhµ™cò³ÉÐÇ„!÷©$Ö×l#Ô<m¥ÛO{¨ÃnúeÜ®–º„Öë¹$· ÄFê2×מƒš‹gÓm|ÕÕí?µ–Æ+É.1+DíÀBl’²JçËêI  KŸZÝ2HúÆ«çyës$»¢&YÔ¡IXʆ_)�Ú�Âà‚8©­¼žª·ðkZ¢2ý¯d_¸(¿i2Lf,ýð¬2x FAÌÔ|k©hÉâk‹‹)áÒîÂC»d‘âÉ3œyg$vËJ…Üw<Oo%ìvÞ˜$i÷˜ííšéNc'̧%[Ž»qК�æ5?6›¥ÁŸ>±©…ŽÒÐÄ$µE ¹f“z(.¥ˆåÜZÞð¢Zج·öP&£‘,ï^(ÞòÜKI†˼¬pH;¹ÎNsàñ|º}¶›§èºeæ´$’ê{½F$’’V‰yïJ²°àã�ò3½áWVÕtÙ'¼¶´WMJêÙ¼¹Øâ(呯Á–ÊŽãæÈ'm�2ßÁÖöþÓôuÔõþÍek+²Ñ‰ Ú¥@¤,¿2œ‚sše¿ƒ"¶ÕÓUYÕ>ÙåÌ’ÈL'Îi‡—€ÀEáG–£È4üM¤E'ˆ´9PÕ£†¢aš8uIáM‚Òf ªŽ |ñ£drO|S´¯j ªË£Zè²Ë§Ù†´‹S»Ôc-4ñ¯Ýt9“œ}ü~ö1Í�ß--mºë:³"ÛZ[DXØÖÖO21%[=r'#¥uà`œûšà›Æ~"¸ÑgºMÎÊâ FÖÍ¢žü±f’dFé C®œ†,ÀÏ}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yž©¤ø¬ëÚ¶£§iÓ¼IªÅz–WAäj¤0ÇÁÜY$Vˆº–�p¹ä`zeÁFu‚Þ 7>¾š ûènRº¶V*!‚3‚²ü®­`r *޳¤ø£S³×J˜´op¶É-Ä&dVX„bäîÛ$D¬ÕK}X^—E�rþ;¶Ö¯t/²èp]5ä…¶Omwä\#lfù×rî##Ÿun•­Câ[¯hYéZÚD‹§´Q&£F ÌÍr16Ö&"A#ŽÆ½Š�á´=V²ñN“©_E¨\NÚuÌ…Ä·‚HRvx\ã/ò!òÜ�Š8Ù‘ÔÔ÷­&»4Ú‡.’O´¡–ån¡û=Ü+Œ’…÷y›FÕ;G!rÛx®ÊŠ�óý#O×.ü9áëA›O]1lÚæîâx[æƒi"!±;ŠmËmùY¾•¥¥ `ëÑ”Ðn4ÛVšW½inbx%á¶¼J¬Y]›ä(Áläà×]E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�fj^Ðõ™Ò}SFÓ¯¥EÚ’]Z¤¬£9À,in|=¢^,+u£éó¬1˜¢Û#ÐõUÈàAZTPeLJ4;»ƒ=ΧM1*ÆI-Q˜•TäŒð ÐRÝx{D¾±·±»Ò,.,íñäÛËlxTŒ8â´¨  hZDËh²iV.¶_ñê݃ýÎ>^ƒ¦*Hô­: ‘XZ£™ÍÉe…A2A“8ûÄ7uÁ5nŠ�£¨hºV­$jZe•ãÛ’ÐµÌ !ˆœd©`qÐtôá¤i£P—P} ½•<¹.+æ:ÿ�t¶2Gµ\¢€(I¡é3E,RévO¨‘Èn„:'ÝR1ȇj¼���0@)h Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Utilsay3.jpg�������������������������������������������0000664�0000000�0000000�00000136554�15030617045�0023327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ���"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Žyâ¶‚Iç•"†5.ò;aUG$’z ’¸‹NÏ¡hº{±[=G\´´¼9ÀòY‰lûeE�kÅã!yoö½3ÃúÖ¡bFVê¢Euþò¬’+°ô!N{f“Mñ½¶µ¢ßjZ^‘«]}Šé­eµ¤sïUVl+ºôÜ3œç�×JÁ£€ˆ *᫜p2Àü rÞ ×“^¹×^ l¶£%µÛùጷ1ª+�é´(ÎGAÅ�C¢|A_èZÒü1¯Oe’ì· . µLÙ8 åšv‰ã×ñ­¥xS]¸±Ÿw—.ëDÝµŠžpz‚:VÁ/ù$:ý¼éD•ð¶óÅ6ÿ�´ã¤ieÌiÉåÔ$fó¤ÿ�–b3œ€7óÇ#<�zv‡«¦»¤Ç¨GksjI#h.”,ˆÑÈÈÁ€$uSКÂÔüxº_‰m4 <9­Kyzdû#F-ü»€ƒsf˜cœ6µt:CÉ.e,ã÷Ò@'Ê.T8I®ÇoyÅ/‡­aÝí-‘Ï1‰÷ œ°V#Œÿ� ôã­�tðø¦oík >óÃzʼn¾wŽ)çû;ÆQŸ c•ˆÈCŽ*Y|M›ÄSiš”0C“Km,J“¢&w¬Àt\õäU,îüMqâ7¶Ôll,íÅ™’Ýà™®Ë¸I)ÐxóéÌéÚõÿ�‰ÿ�g½OYÔäG¼¹Òõå(àÊ �=�ð @ѵ(õOÕ!FŽ+ÛhPÀwæ®×˜éþ$»±ð¿´ 6 ©¯/´h¦Úy>lq$)÷DÌ©’[©Ï�ð{oøBãŧTÔ­µë;ŸìÕÚö7w†ØNßÞGX¯¡�q@}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@WŽ_é~Ðþ<¤š¾aht!vŸiòâ‹í_h 8 …ß´~ ëÍ�{ã›Á#Õ|-%•Ɖ¨êý¥½Ñµž9%’Üä0}§%~èç§´þ*øoDkÏý“d%“ÄVNÂà;‡–xåp `ô T¢¸ÍkÀvQXMwáX—CÖ!RöòX*7`2HÇÊÊqƒ‘ï\7î´ßüÿ�„Â}6Øj~L;'7ÄßhXÝUºíÎþ=èÛ(¯3Ô¬~ê¶£H´‡ÃRÜß°µ‡û1mÚtfà8)ÈÇ\ûw¯E½±´Ô¬å³¾¶†æÚQ‰!™£¼ƒÁ  è¯ð%§ÃÍ>OZkÑxj)müCw¼z“½ ]¡Bùœí6=ó],çÀÚ/ÃSSk)O†utÖö±0\æ8ÆÝ„m£R2@ù¿ �ô‚Ê¥C0ŽÔã<~�Òמx®“ã'Ãé–4Ydˆw€·Éκ½GÄ+gs5µ¦}©Ü@çŠÈG˜é’î “‚v‚O·"€6(¬Ïëú‰ôh5].c%´ÙÆåÚÊAÁVˆ5§@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@eø‹@²ñ6‡q¥_‡ÌÃÆÀå]OfZ”P1hž4°…md6¨¨»Vò[‰-¤oBÈ#pO®íUtk>Ñuse%…ö«©êSj.&g‚Þ\eAØ·ÐgÚ»(Ï| øËÁþ ‡Aû.ƒu5©"o·Lªw»9Ü<“зcϵh|3ðö·á/Á ëOah[ÈšÎw}áÝœî ‹ŒãçÛöTP\ˆtj^;еÛ;m Zè­p"ŠkÙCβ¦Â[‡�` Ü÷5ßÑ@^µÚÙLl#‚K°¿ºIä(…¿Ú` è y·àïi? o<"h¯pÐMmÂÝË´¤ÅË–VA]üc9ïŒsé´P–KàI¢øj{[Í3Oñ‡bÖòÇ+ËÌ;‘&PÎÞ€7Sê1ÚxzÓÄ¡šïÄ·ö/rWbZé¨ë ‚X—%™¸êp�Î&·è Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼|Wá÷ý „‹¬Y4g@ûL ´îò÷tݎ߇^+Ö( ,ø¹â=Ò÷–sêvÉsiâ;»ˆ|ÀZ(Wv]€è9}i>*ø“D[Áý­deÄW®¢e; ˜yápÀäõ¯T¢€9SÇzt¶S[øjtÖõY¥¼VÍ@ç€Ï"åFA$šà¼k¦ø/à'ü"ê6ßÚ^L; 7ÊÞzÉ#*õÛüûWµÑ@‘6“âm:ÊþÚhomD«qo<NnSÔß ‚>¢®^^ÚéÖ’]ß\ÃmmËÍ3„E9'SÑ@_ðƒ\Òµ üaok}³Oâ »Øâ ó<P,€u*OúzÑñ‘tÝàÅ$VþsƶÐÁs礌w�dû^¡E�y'Š<cá¹¾'|>Ô"×,Î%¾yg©HÄ‘BÇørÀŽzsY÷×¾ðçÄŸÂs£Û\ÙjΩ\iâåHò˜Á ǰ�L÷Éöº(Âÿ�`m~—£.•`ò‚!n óûÃnNx#8�÷­ª( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¢Š(“×|pš&±&ýŸ$ì‘£—6xÆ=«;þbÐ"_ûþ?°<sÿ�#¥×ý{Ãÿ�³W=Ф‘Ççª8™ÓƒVO±èð³þÿ�ßñþÂÌOúKÿ�ÇøWŠ1E‘Éý½Œî¾ã¿ÿ�…˜Ÿô—þÿ�ð£þbÐ"_ûþ?¼ÿ�¸¢È?·±×Üwÿ�ð³þÿ�ßñþÂÌOúKÿ�ÇøWŸâ—Yöö3ºûŽÿ�þbÐ"_ûþ?ÂøY‰ÿ�@‰ïøÿ� à1F(²íìgu÷ÿ�ü,Äÿ� D¿÷ü…ð³þÿ�ßñþÀb“Yöö3ºû@ÿ�…˜Ÿô—þÿ�ð£þbÐ"_ûþ?¸ QŠ,ƒû{Ý}Çÿ� 1?è/ýÿ�áGü,Äÿ� D¿÷ü…yþ9¬»ëÙíõ›+toÜÌ®]Bdü¸éE‘tó¬mGd×^µ=SþbÐ"_ûþ?ÂøY‰ÿ�@‰ïøÿ� òA«´:­â\1ФeËÃbF?J¶ú¼1¦^ ÔïØ(ã9ÉãYK5̶û¾g¨ÂÌOúKÿ�ÇøQÿ� 1?è/ýÿ�á^PuØnlZK ï)·iÂíP22A>¢›c®,¶<‰$³ù(òùIаÍCþÔÌlÞšy³ÿ� 1?è/ýÿ�áGü,Äÿ� D¿÷ü…y¾©ÕäÖÑA90¾É¨ 3ëš¼F3ÎñÐv“_qèð³þÿ�ßñþÂÌOúKÿ�ÇøWŸ‘KŠ,‰þÞÆw_qßÿ�ÂÌOúKÿ�ÇøQÿ� 1?è/ýÿ�á^ŽiqEoc;¯¸ïÿ�áf'ý%ÿ�¿ãü(ÿ�…˜Ÿô—þÿ�ð¯?‚(²íìgu÷ÿ� 1?è/ýÿ�áGü,Äÿ� D¿÷ü…p¤Ç4Yöö3ºû@ÿ�…˜Ÿô—þÿ�ð£þbÐ"_ûþ?¸ QŠ,ƒû{Ý}Çÿ� 1?è/ýÿ�áGü,Äÿ� D¿÷ü…yþ)qEoc;¯¸ïÿ�áf'ý%ÿ�¿ãü*Þ—ñ5-^ÓOþÌ’#rå™A B–éökÍ1ÍjøcþG þ¾ÿ�E=:p™Î*­xS“Vmt=¢Š(©>À(¢Š�(¢Š�(¢Š�+Ô~!ÝÙj·¶qé:ÛÌÑiØÇ|m®ú¼C\ÿ�‘—Wÿ�¯Çþ”Ñäg8ª¸j tÿ�Ìê?áeßÐ*ßÿ�ÿ�‰£þ]÷ýmÿ�ð!¿øšâ±IŽj¬™þÛÆÿ�?à¿Èí¿áeßÐ*ßÿ�ÿ�‰£þ]÷ýmÿ�ð!¿øšâ±IŠ,ƒûoüÿ�‚ÿ�#¶ÿ�…—}ÿ�@›üoþ&øYwßô ·ÿ�À†ÿ�âkŠÅ¢È?¶ñ¿Ïø/ò;_øYwßô ·ÿ�À†ÿ�âhÿ�…—}ÿ�@«üoþ&¸œsKŠ,ƒûoüÿ�‚ÿ�#µÿ�…—}ÿ�@›üoþ&øYwßô ·ÿ�À†ÿ�âk‰‚)YöÞ7ùÿ�þGmÿ� .ûþVÿ�øßüMð²ï¿èoÿ� ÿ�Ä׊LsNÈ?¶ñ¿Ïø/ò;oøYwßô ·ÿ�À†ÿ�âhÿ�…—}ÿ�@›üoþ&¸¬REmãŸð_ävßð²ï¿èoÿ� ÿ�ÄÑÿ� .ûþVÿ�øßüMq$Vv®×P[­Õ»¾ØX4±(:wíÖ•‘pÎ1Ó’>þKüGÿ�…—}ÿ�@›üoþ&øYwßô ·ÿ�À†ÿ�âkÎVì:M¨$’Ij‘åQ�;ð2HþURO,v—c‘£†4rU†îƒ>£½F‘̳);F_‚ß±ê?ð²ï¿èoÿ� ÿ�ÄÑÿ� .ûþ6ÿ�øßüMy¸ÕíÛì¤\Ì» ƒs€s޾ÕPøš&iVÙÊÅn.9` ‘¯Y9Žg-¥øDõ?øYwßô ·ÿ�À†ÿ�âhÿ�…—}ÿ�@›üoþ&¼Æ]{Ëk­¶NëmÈä8R3ÅkE"ÍJ™Úêdv4Y<×0‚¼¥ø/S¸ÿ�…—}ÿ�@«üoþ&øYwßô ·ÿ�À†ÿ�âkŠÅ§deý·þÁ‘Úÿ�Â˾ÿ� M¿þ7ÿ�Gü,»ïú[ÿ�àCñ5Äâ—YöÞ7ùÿ�þGkÿ� .ûþ6ÿ�øßüMð²ï¿èoÿ� ÿ�Ä׊1EmãŸð_äv¿ð²ï¿èoÿ� ÿ�ÄÑÿ� .ûþ6ÿ�øßüMqX¤Å+ þÛÆÿ�?à¿Èí¿áeßÐ*ßÿ�ÿ�‰£þ]÷ýmÿ�ð!¿øšâ±IŠvAý·þÁ‘ÛÂ˾ÿ� M¿þ7ÿ�Gü,»ïú[ÿ�àCñ5ÅbŒQdÛxßçüù¯ü,»ïúÛÿ�àCñ4Â˾ÿ� U¿þ7ÿ�\N)qEmãŸð_äv¿ð²ï¿èoÿ� ÿ�Ä×Má?Mâ8/kT·kyDxI ʃž@õ¯#ÅzÃøõÕ¿ëå?ôZÒhõ2ŒËˆÄû:²º³èŽöŠ(©>¤(¢Š�(¢Š�(¢Š�(¢Š�J)h $ñÌRÂerÂ7*mâÁ p~õsþ[ÿ�Ï7ÿ�¾Mv^/ñ¯aâ‰í-/^Ø"ªõ9ÏQíXŸð–ëÿ�ô—þù_ðªW>/1† â§í%$ïÑ/ó2<·ÿ�žoÿ�|š<·ÿ�žoÿ�|š×ÿ�„·_ÿ� œ¿÷Êÿ�…ð–ëÿ�ô—þù_ð§©ÅÉ—ÿ�<¾åþfG–ÿ�óÍÿ�ï“G–ÿ�óÍÿ�ï“Zÿ�ð–ëÿ�ô—þù_ð£þÝþ‚rÿ�ß+þj™óËî_ædyoÿ�<ßþù4yoÿ�<ßþù5¯ÿ� n¿ÿ�A9ï•ÿ� ?á-×ÿ�è'/ýò¿áF¡É—ÿ�<¾åþfG–ÿ�óÍÿ�ï“G–ÿ�óÍÿ�ï“Zßð—ë¹Ûý«&}0™þT¿ð–ëÿ�ô—þù_ð£Pöxç—Ü¿ÌÈòßþy¿ýòhòßþy¿ýòk_þÝþ‚rÿ�ß+þŸð—ëÛ¶ÿ�jÉž¸Ú¹þTj˜ç—Ü¿ÌÉòßþy¿ýòhòßþy¿ýòk_þÝþ‚rÿ�ß+þ‡Åúè V@OLªóúQ¨r`?ž_rÿ�3'Ë|ÿ�«ûäÕytØæ»ŠéáÍ!æÏ^:Vññv¼¼RP=Õ—þíxôÕ%ÿ�¾Wü(Ôj8ê§?¹™ÍI¢ÚÏ,ÒKjîÓ(Y7n!€éǵ"èVj¨£æ6Ü­–Ü1ׯJé¿á-×ÿ�è'/ýò¿áGü%ºÿ�ýåÿ�¾Wü)Ï„ÛÚÏî_æsÃö*ˆ«dÊJ »‡ÊzŽ:jOøGìFE‰_-BŒn€úþ5ÔÂ[¯ÿ�ÐN_ûåÂøKuÿ�ú Kÿ�|¯øP?i…ÿ�Ÿ³û¿à˜0iñÛK4°Àêó6é Üjqÿ�Ï7ÿ�¾Mjë„àjÎO  þïøKuÿ�ú Ëÿ�|¯øSÔÎQÀ·yNrÿ�3 Æÿ�óÍÿ�ï“G–ÿ�óÍÿ�ï“Zÿ�ð–ëÿ�ô—þù_ð£þÝþ‚rÿ�ß+þj.L¿ùå÷/ó2<·Ïú·ÿ�¾M[ÿ�Ï7ÿ�¾MkÂ_®îÛý«&ìgW?Ê—þÝþ‚rÿ�ß+þj˜ç—Ü¿ÌÈ¿üóûäÐcùæÿ�÷É­øKuÿ�ú Ëÿ�|¯øQÿ� n¿ÿ�A9ï•ÿ� 5LóËî_ædyoÿ�<ßþù4yoŸõoÿ�|š×ÿ�„·_ÿ� œ¿÷Êÿ�…ð–ëÿ�ô—þù_ð£PäËÿ�ž_rÿ�3#Ëùæÿ�÷É£Ëùæÿ�÷É­øKuÿ�ú Ëÿ�|¯øQÿ� n¿ÿ�A9ï•ÿ� 5L¿ùå÷/ó2<·ÿ�žoÿ�|š<·ÿ�žoÿ�|š×ÿ�„·_ÿ� œ¿÷Êÿ�…ð–ëÿ�ô—þù_ð£PäËÿ�ž_rÿ�3#Ë|ÿ�«ûäÖ§†"ø¿H>[ágbNÓÀòÞŸÿ� n¿ÿ�A9ï•ÿ� Ñðÿ�‰õ«¯i–³ßÉ$3JË"2¯#Ëcéê-N¬0KIJ÷VÑ™êTRÑR}¸RRÑ@ E-�”´Q@ ^9­é:“x‹UuÓîÙéÙYabrê7> Òm.¤¶žõhȘ$© ÐzQÂS¢ÿ�Ïúß-þÖ êÑÍ˾»MBWJ÷ÐòoìOþ·Ÿøÿ�áGöF§ŸùÞà;ÿ�…zÏü%:/üÿ�§ýòßáGü%:/üÿ�§ýòßáOÛCù—Þyê½.òþ¾G“djô ¼ÿ�Àwÿ� ?²5?úÞà;ÿ�…zÏü%:/üÿ�§ýòßáGü%:/üÿ�§ýòßáG¶‡ó/¼?Õz]åý|&þÈÔÿ�èyÿ�€ïþdjô ¼ÿ�Àwÿ� õŸøJt_ùÿ�Oûå¿ÂøJt_ùÿ�Oûå¿Âmæ_xªô»ËúùMý‘©çþA·Ÿøÿ�áGöF§ÿ�@ÛÏüð¯Yÿ�„§Eÿ�Ÿôÿ�¾[ü*–±â«eÒ.›H¾µmAc&¸G(Ì;`óÒmæ_xªô»Ëúùa›¨MK…ÛÆà2°ðAïÒŸý‘©ÿ�Ð6óÿ�ßü+ºðW‰Œ~²]~æÒ å@¦ðŠ8�ç9oZßÿ�„§Eÿ�Ÿôÿ�¾[ü(öÐþe÷‡ú¯K¼¿¯‘äßÙŸýo?ðÿ�ÂìO?ò ¼ÿ�Àwÿ� õŸøJt_ùÿ�Oûå¿ÂøJt_ùÿ�Oûå¿Âmæ_xªô»ËúùMý‘©ÿ�Ð6óÿ�ßü(þÈÔÿ�èyÿ�€ïþë?ð”è¿óþŸ÷Ë…ð”è¿óþŸ÷Ë…Ú̾ðÿ�Uéw—õò<›û#Sÿ� mçþ¿øQý‘©ÿ�Ð6óÿ�ßü+Öá)Ñçý?ï–ÿ� ?á)Ñçý?ï–ÿ� =´?™}áþ«Òï/ëäxôÞ¿’ÉíM¼Š6]£e³p>˜ª–þ»fÓ.fV�û#*œzŒu¯lÿ�„§Eÿ�Ÿôÿ�¾[ü(ÿ�„§Eÿ�Ÿôÿ�¾[ü){hw_y¢áÕe)~äxüžº›a“F¹bƒ M³p?*lÞš|t9ß °n´còúté^Ôºæ˜ú|·âò?²ÄÛ^Np§Žæ?:©ÿ� ~ÿ�A8#þ¢•õG<²<=7iU’ù£Æ#ð…âßÏrúeÓ¬ªª#6… ÓVöF¦?æyÿ�€ïþêßð—èô‡ò?áGü%úýáüøQrg“agñUzÿ�#ʲ5?úÞà;ÿ�…ÙŸýo?ðÿ�½[þýþ‚pþGü(ÿ�„¿@ÿ� œ?‘ÿ� wdaà¿çëûÑå?ÙŸýo?ðÿ�ÂìOþ·Ÿøÿ�á^­ÿ� ~ÿ�A8#þÂ_ ÐNÈÿ�…aý‡‚ÿ�Ÿ¯ïG”ÿ�djô ¼ÿ�Àwÿ� ?²5?úÞà;ÿ�…z·ü%úýáüøQÿ� ~ÿ�A8#þ]‡ö þ~¿½Mý›~%}‚ïÌ*X/ùÇLô÷§ÿ�djô ¼ÿ�Àwÿ� ên¼Yx>!Z½½ö”Ú ·e’fGóSJõÆIÆk­ÿ�„¿@ÿ� œ?‘ÿ� .Øx/ùúþôyOöF§ÿ�@ÛÏüð£û#Sÿ� mçþ¿øW«Â_ ÐNÈÿ�…ð—èô‡ò?áJáý‡‚ÿ�Ÿ¯ïG”ÿ�djô ¼ÿ�Àwÿ� ?²5?úÞà;ÿ�…z·ü%úýáüøQÿ� ~ÿ�A8#þ\?°ð_óõýèòŸìOþ·Ÿøÿ�áGöF§ÿ�@ÛÏüð¯Vÿ�„¿@ÿ� œ?‘ÿ� ?á/Ð?è'äÂØaà¿çëûÑå?ÙŸýo?ðÿ�»¿‡6WVvºŸÚm¦ƒÌ¸R‚T+¸lQ‘‘[ð—èô‡ò?áW´ýVÃVIÆå'XÛk•þŒãò¤ÙÛË0øj¾ÒœîíÝh¢ŠG²QE�QE�QE�QE�QE�yŽ¿ätºÿ�¯xöjç«ÐüMàÍGWñº…´¶Â)"DÛ#0 ®}õ¬ŸøWzÏüö²ÿ�¿ÿ�ÄÕ&|fc–bêâ§8Bé¾ëüÎJŠëá]ë?óÚËþþ7ÿ�Gü+½gþ{Y߯ÿ�âiÝØøßù÷ø¯ó9*+­?õ2f²þº7ÿ�TG…%##VÒÿ�¯“ÿ�ÄÑpþÇÆÿ�ϿřEoÿ�Â)7ý´Ÿü ?üMðŠMÿ�Am'ÿ�Oÿ�@cãçßâ¿ÌáœñgœÑ>Ák·xŒ‘»w®:⦞þá®-Äqͬ›ÃMåe8Ç�óÎ+´ÿ�„Roú i?øøš?á›þ‚ÚOþŸþ&ƒw–ã¯JöVÝy.¥ªÇHé¶FŽC•ˆ’H8BF8¸§µÝøºŽH¢K†6Lá–. ™ôëǵwø.dY%Ô4vu ö’=:TËá)B®©¤�.øí#W—âl­G_—ùœÔ¯M³ÉܶLcçµÚP“óqÜ{àãÞ«y—·wZl—PIæC} -åû¼ÅzGü"“Ð[Iÿ�À“ÿ�ÄÑÿ�¤ßôÒð$ÿ�ñ4Å.;QüWkV¯�š{S¾XÝ 28|yàa—ñâ©Awyk`ÙÉO,ždÆ_žÌò¯Aÿ�„Roú i?øøš_øE&ÿ� ¶“ÿ�'ÿ�‰ ˆeøÕJëÕyÿ�]O?[­^[³–U[Q Ìß&~é'¦Goz#Ôµ9-f•!•äX1<v¶yÁ8Ïãžk¿ÿ�„Roú i?øøš_øE&ÿ� ¶“ÿ�'ÿ�‰ ¯ìü_üø_篨jN"hL»tV-jAU#ž¿‡8­-&âæ{Y~اzJè n僥vðŠMÿ�Am'ÿ�Oÿ�Iÿ�¤ßôÒð$ÿ�ñ4S-ÅÊ<ª¾hóÍ*8J¹ŽêÖV-q)Tò›qñŽ8¦Ãs¬YÁ ­È8ˆm‘b2îlžŽàcükÑ¿á›þ‚ÚOþŸþ&xRoú i?øøš x,kmº7»¾ëð8X¯u_µÌuæ<.Ѹc�ç§~ç5Z]OS6Kn³ù¡)%©_ 0½ÿ�.µè‡Â“Ð[Iÿ�À“ÿ�ÄÑÿ�¤ßôÒð$ÿ�ñ4 eø´ïìN¨ó»Û«û;›— $ bÒ,ÍoŒ>s´Ÿ§j†öçXŸMÛÉ$Šö‹!t‹k+œp¼s‘šôi¼×<2êzCÆã ¦äò?*t~x£XÓTÒB(´žåH¸àqqIûWøN[ÛâÓ¢ P,*Öíäîó[¸<qÎ8§iÓêw:„ëtÞTql!\6Wæ\Jî?á›þ‚ÚOþŸþ&øE&ÿ� ¶“ÿ�'ÿ�‰¦dòì_+Jåä`Q]ü"“Ð[Iÿ�À“ÿ�ÄÒÂ)6ä-¤ÿ�àIÿ�âh9ÿ�±ñ¿óïñ_æ`Q]ü"“Ð[Iÿ�À“ÿ�ÄÒÂ)7ý´Ÿü ?üMýÿ�ŸŠÿ�3Šé­ü}vÌ-¯ôÙŠà°IÉÆzgåö©ÿ�á]ë?óÚËþþ7ÿ�EÐcãçßâ¿Ìä«SÂÿ�ò8hßõðßú)ëgþÞ³ÿ�=¬¿ïãñ5{Eð.©§ëöÓÍkå[È]‚;rŒ¼p?½JèéÁeXºxˆNP²Mu_æzQR}°QE�QE�QEåºïüzÇývOýR«ºïüzÇývOýR¯ŠÇ¼ÏÔû<û¼=QÞŠ;×)ÒQE�V}æ¢aÔm´øP4ó«>Xüª«ŒŸsÈâ©Ýj×·W6Þe³¼V­:¬#±žù­#JRØÎUbÎôW9¥x‚}B{ÂG)ž-ÀJ›|Œ‚sÔ•{]Ôn4Ø­ÜF|딃‚p¸Á¦èÍMAî%Z.kcTPk!¼I§¤Í i‹,ÿ�g$BØó1?•uÛ,…Ò´› ÞF6ÁóŒÚ“¥Qt)UƒêiQÞ²‡ˆôÖ·Šd•ÜJŽêª„¶ÔûÇÔ§_ÓÄjâG`щp¨I z{âeS³k楑X:†È¥™`h Ñ@z(ïE�hù':çý}ÿ�ì±× k°òNuÏúûÿ�Ùc®<×Ü`¿Ýáè¿#ñÞ/ÿ�}ûÿ�0ª°ê\ÂoÌ„qšµY·:kɨ­ÌÖEòîWûëØ~ßC]GËÓPwRп Ë<+* Ã#ràÓëŸ×QÚîЕO%“ ¸.O�Œó []"I/âU"²¬j¯!,®wÓ4ý^ŠnV¹¿E`Ç£]´vë,ˆ²G¸I2±&`AÄ©K¥_ÚØHó<dE`Ð.F,íØô qÃS“·::º†æê 8L×ã ÇÞ²´› kkÀ|¤6Á$@äùÇ'=Ç?]º³{édŽp¢ÛaU�‚[=râƒ7J©Êå§RÛÍ{7º®òr~ñôG,rîòÝ[kmm§8>•€4‹÷¶ÓãœA#YO¹Yœåã�:ã•F¾¹[…ù!ò¾ÚÓ¶ÙÜ„”Œ{Ðiõz6Öz›—ZŒI#Î$TM¹m„ŽN*Ð9Ï^hW3hG E†t‰bVœ9?LÒÜhWæ½»G^'XC¹S’sؑDZ¢Ò÷ìÿ�á¿ÍýÆì’Çß1Õw6ÕÉÆO §×8úãî-Ø‹ÿ�´ª8 ‚Î*UÒ¯ÍĆF‰Æ÷d”JÁ°s…Ƕqœöé@ VÒfõe¦ÜÛY\A7—p”¢»c°=½+bƒ Œ]“¸W ü0ÿ�][þ¾Sÿ�E­yõzÃøõÕ¿ëå?ôZÒg¯¾|™ÞÑE'Û…Q@Q@Q@Q@ EdÝêW«¬ >ÎÚ ÙšbòÌWœáF�<g©©Lº¾î-löî?òݺmãø½ÇÓŸj�Ò¤¬Iu‹«i„W'L‰þRÊ×D œœmþ÷ÔsíQ&¿)Û¾](«Ý‹²qœïÇËÛŒzûRæC³: +Ÿ]~l.ét ~]ؼ<|ß7ðö#ÔúQý¿6ßõºNqÿ�?‡®ï÷»Ï×z9—p³7.?ãÚ_÷ò®Lû&Ïþ¡?ô[òkÒ´n¢M$å\�oÉÎø{®Iô5-ìáŒÇÖa2Ƥã€Îß\ú{Öô+Âî'Ç`z 0=9b²óp×6¢=ÍÈÔ[;vðqŽ»¸úsíMHíŽÍ÷`›ñ©¹Àç~8íÆ=}«§ë´Éäaè(Àô‰¹Tß=˜8]ØÔÜàîù±òö#ÔúQåÛíÿ�_g»oOí7ë»ýßîóõãÞ®ÓF. ¬O^ÜY˧*1†Îiö]\(ÿ�V¸8ç¶N{VÓGnlžÌœ6Üên3ó|¹ù{Œ“èh’+R$ =›œ(mI¹lÏËßœú{ÒxÚm#9‹›¤‡Äö–vó\4s[Jí¶à4xùŽygŒV…üE;hz=£Èuqm$¦æíÎÖ*ämÏsý+´ûž…¼¶°�îþ& 26ü¹ù{¶AöçÚ“ì:vÕBtÿ�,ý Ø/<mþ÷N}ª>· Ü|Œá­õýBëÄIu­ºÉ¤´¦ÚêR#Þ²‘•ǨCV&ñãG2ý¥ŠGç˜Øý:ûûWeöK 3+Ølÿ�h±*1óãåìq_jAic##LÚyb9þÑb@ÉÝ—œq_j>·áÈÌ ܽƩâÞáåH¯±wݱJ)Àô&“I™õH¯[T¹kk´žHÄ)/—å(8R=r0sÍt1ÛYÆ7+Ø#°öêL2Û¹þ~^~¼{ÒKkdùbÖáNÒÚ‹uÝÀû½6óõãÞšÅÀ9Î6»%‡§ÄñÜKgh&3]¶Ós×îã©ãó"³?á%{MgRÔ;–„i¶ó‹6oõlÌÀñÛdûWo5­‹’wØ9]þY}E½FÏáã<çÓÞ‡µ±ó]Õì ãqÔ[,1òçåîr õ¤ñpîŒå5OÜé‚`--nBY&ŠR#!Ø. Çœý+£Xg»ÓÌwl±HÇ–¶r8Ï'ž•?Øtí¾^tÿ�/9Çöƒcîðq·ûÜ}9ö©+\¨3Ù…Êç“p6üÝ»6�õ”Ö2C‘œ†‹:Íyâ f½”¦Ÿ|ÞXó‰ @v‘ÎG&²5_\j:Eä1¨¶•-໎X&<†¹ôÇÿ�ª½ KÈ!¬#.SÌ)¨·|ïþqÆ=}©ËO ÿ�g.UCÔ{æw¦0}ÏçSõ¨Z×Fq$ׯ†‘¨Û’°Ëlm.­%;X;€TŸïc<zØÿ�„¨>±%Œq[«Gr d–P²0?Ä«ÔÃñ­ógbaòÉÓÊã;¢Ûwnãø»Ï×zW´±ÞÒ#iæE Ž¢ÀõFvñ‘œú{ÓúÜo{‡#%Àô=°/²âÌ€_nu73Çsœú{ÐÑÚî8¸´Æ[ñ2~›xíýî·>Õ§×i‹‘† £=;\ŒÜZc#8ÔŸû¼öþ÷N}¨Hí‰]÷cînƦç~8ìq_j>»L9`z 0="GlBožÌ}ÍØÔÜã“»vǯµ;}£3Ùçÿ�ÄÍúîÿ�wû¼ýx÷£ë´Ã‘—¼9ƽÿ�^°ÿ�èRWU\}Ìzt“Mm&še’=¤É¨3gk£îð6’O¿õ}õùFÿ�.](ã~ÌÞž›3òñžséï\UjFsrE(³ ¢°_“sm—J#/·7g‘·åþí}<ÓâÖ®'"ôÇwl*­Ù$ü™àmë»§>Õ˸ìÍÊ+9&Ö ]Ö¶`|›±;|¿6>^Ç�zJŠ-Nò-RÖÆúÚk˜‹#E8l2˜pHä`€}ñLF½%f€ (Í –“4P—k¿ò5êÿ�õÙ?ôLuJ§ñÊÅâÝaLw |èùŽqþ¦>àYÿ�nOùáyÿ�€’ÿ�ñ5ò8Ì-yWœ£Õû3ëpxŠ1¡æ¯nè³Gz­öäÿ�žŸø /ÿ�GÛ“?ê/?ð_þ&¹¾§ˆÿ�Ÿrû™ÑõªξôY¢«}¹?ç…çþKÿ�ÄÑöäÿ�žŸø /ÿ�GÔñóî_s¬Ðþu÷ »±·¼1´ª|ÈŽèäS†CìEW“Fµ–Y¥‘¦ie„ÀÎdçaêXûrÏ Ïü—ÿ�‰£íÉÿ�</?ð_þ&­a±khKîdºØg¼—ÞŠ‰ ÙF¶‚?5ÑvÅ"ÈCmþé=DZ«†™¦°­ÃIˆd¦ÇÛó†ŸöäÏú‹Ïü—ÿ�‰£íÉÿ�</?ð_þ&ŸÕñw¿$¯èÅí°Ö·4~ôR>±gg&mÍp.ïúÀ0è)G‡ìVó°'7�ù‡;Ï_Þ•p_'üð¼ÿ�ÀIøš òÏ Ïü—ÿ�‰§ìqŸË/¹‹Úaš?z1n|0£ÈŽÐ/ÙãßòI+ “ž*¹ýo!ŠI¤›í ä†C˜£±¨«ßnOùáyÿ�€’ÿ�ñ4}¹3þ¢óÿ�%ÿ�âiºXƾ }ÌJxUö—Þ‹ ¨U�` QU¾ÜŸóÂóÿ�%ÿ�âhÉÿ�</?ð_þ&²úž'þ}Ëîf¿Y¡üëïE“EV7Éÿ�</?ð_þ&·'üð¼ÿ�ÀIøš_SÄϹ}Ì>³Cù×Þ‹=èªßnLÿ�¨¼ÿ�ÀIøš>ÜŸóÂóÿ�%ÿ�âhúž#þ}ËîaõšξônC Ü|?Öa”;Þ�¥º¶>µ†|+«ÏÕýðÿ�ã]‘ —Á›uüpèTýØûÑ5÷yeðñSZ¤¿#ás<ˆ”êG›Wo¿ÈãáÕ¿çîÇþøñ¤ÿ�„WVÏü}Xÿ�ßþ5ÚRw¯CêôûwöF þ}þ/üÎ7þ][þ~ìï‡ÿ�OøEuoùú±ÿ�¾ük¦Ö58´m"çQY£7^§°gjz­î™¦Ãy4¶Q—tS›¶ÄpwôãšN%Ð?²0_óïñæeÂ+«ÏÕýðÿ�ãKÿ�®­ÿ�?v?÷Ãÿ�_¶ñ.5MZ Öa¶ž(­ö)Ý!u. ääÔZ¿‹>Ë-´vˆL¢ò;{˜%ŒùX Œ÷Ç¥/eJ×ìŒüûü_ù•?áÕ¿çêÇþøñ¥ÿ�„WVÿ�Ÿ«ûáÿ�ƶ?á*ÓDnÌgWŽcÄÑèøÝÈíÇ9ïUí|HoüC§ÛÚäÓ¯,é©ÀzôäÑì©öF þ}þ/üÌïøEuoùú±ÿ�¾ühÿ�„WVÿ�Ÿ«ûáÿ�Æ´µ-næÏİi¾m¼PMjó‰ ©zÔpxº(4¨®u‹i¬æhÞF@„€ŠØÝϯqG²¥{öF þ}þ/üÊ_ðŠêßó÷cÿ�|?øÒÂ+«ÏÕýðÿ�ãZø˜E­êP]¼Kgp<. îc&p:óROâ»xîì­á¶¸•®n~ÎNÝ»ÝÙäóÇ¥Êd`ÿ�çßâÿ�ÌËÿ�„WVÿ�Ÿ«ûáÿ�Æ—þ][þ~¬ï‡ÿ�Ó°ñeÝ£O,RÁ›©-£FÁg(y#Ÿjײ½ŠþÕn!Þ’0êT‚š£IìÙ/ù÷ø¿ó9OøEuoùú±ÿ�¾üiáÕ¿çîÇþøñ®Ê–ŸÕéöìŒüûü_ùœ_ü"º·üýXÿ�ßþ5Ùü;±¸ÓâÕ¡¹’'´!Ì`-}h­ ÿ�Çέÿ�]£ÿ�ÑkXb)B0º7Ãà0Ô'ÏN63¥¢Š+ˆï (¢€ (¢€ (¢€ (¢€1ÿ�ŠÄŒÿ�ËLÿ�¶=ëb±”ÿ�ÅbÃ?òãëþØ÷­š�ã5<ÂOÿ�\¡þMQàz “Sÿ�‘žÿ�þ¹Cüš£¯Çÿ�¼ÏÔ÷0߈`z 0=W!¸`z 0=´�˜‚ŒAE¥�g¦« þq´†K•…Ê;F7 dòGµ>ÛT´¹´†ä¸e]Ê“á ãMQµÑ&Óí.l­g‰ìægtŽe;£.I# ò2sëYÖ [Ký:yå‚émm <ØòÒ³wrO¥oËK]Lï>ÇOö›}ì¾t[”e†ñ=ùªz޵e§i·WÅ„élžd‰ +0_\f¹kï]EÍßÚcÖ "Ž™ ƒŽ3€AÅ$> ›QÐ-C´vWL6Œ¢2 ,|ÁžqŽ=ÍZ¥KFå¡.sÙ#®þÑô漇l¡P9Eudg“€~¦¬yð‚ŠòF®øÚ¬Ã'õ®RãÁ“Mo«D·6è·ö°ÁÂ2 nëÎjÓxjðßI'ÛmÚÞcºKöИÛ<;ôɨp¥Ò_ÖŸðF¥>ÆÝî¡mbФ§2ÎÛ"‰ZCÔà})‘jJ÷Íi-¬ðȱù»F¹ÇÞö¨õ-+í·¶7ÑJ#º²f1³ ÊC 2‘žüsíQêºeÞ­¦Mi%Ú[—ÁV‰IäyÉäqȨJWù”ܵ4êÔ¡qq PpX8À?As«iÖ‘Å$×pªM(†3¸ÎN0+Õ|&«æÊ÷ñM/’R3åâ6Ýœg–=3éD¾˜™Ìw6èTMF4òŽÕÚ0Sïê+EN—Yå>ˆê…ͱ,O ~~Pã<uã5KSÖ¬ôÝ.ãP'ÏŠÜeÄ1­c'ƒ³k«£Ï M}?œ“E.žAÇ?SK¨xNmB Òn`†âêÑmH‰�çyäö‚”aJêòЧm³ªki:r_M 2/ÈAb�ïêEI ¾sG4ªo2».θÆAàÕ-wEŸWУӒh£!£gfRAØAÀïŠS¤Î#¸Ž(ì9×£FÌã<ôÅJPåóåråî­§iöòÏuwqÄ|¸ÈÏN:Õ“qn ƒ4@·ÝË~œ×-sá ‰´mCJ[ȾÍq´ÂòFZHÈ à¶~eãÐT³øbòmJ[–»µxg(ÒG$,Û ÿ�sæÀPj¹)[âþ´ÿ�‚.iö:5¹·y|µš&sŸ”8'޼f£¸½†iflÆ1Ê#¨?™ ƹ{oËm5¼©qlén‰Xˆ,®Ù×¶JI<+hºŽœ—Èî4U¥„D’2søgŠ~Εþ/À9§m޵® •d–4fè¬ÀúÑö›3Êó¢ó3›ÆséŒ×=uáy®Ž¢wE~qt%áe�~ìçÆG¡ªcÁ2G;Ê—0:œWÊÆ3¸�l'=ñ×ÜÒP§meø Ê}ŽËÐQž‚Š;Öè(ÀôQ@ £ÐQK@ ž‚’mi?õôô[Ò÷¢ù i?õôô[×Fýâ¨Ê¿ð¥èvõ~øñ>Ž»ñ˜çùwc</mÃ?‘ü+b±ïß'Ñ×~3ünÆx^Û†#øWÙ ±EPEPEPrâ}«óÿ�/ ÿ�¢c£>õ©sáû™5+»¨®áU¸u}¯%pнC³úÓ?á¾ÿ�ŸËoûôßüUzñã›!¦róêš–©³=¿Ù%òãWeÚòObIÇn+ õëÙ4m>â+Ûžu•¶y$DRéæ*@ôéž3^‰7„¥¸‘dšK'u Ð@ôÎê¼á#O1FûÑ>Ìp­× nëïC¯áfrË⤞ [ˆíßì—w-j’¤™‘ LqÈ?Nõ•áï]Å¡i2ê±™…à‘~ÕæÛ—qù— ×5è1ø=¢œÏ°II,]mÈ$ž§ïu¦ÅàÏ öz!mˆàõïÞ—·ïÌ8kI¤k)rYÝ[ißlŽ@ẫÔ³î=ëzÒúAáÛ;—c%Ķñã?Æì£úÖÂø$£HôÅGO-€µÀ+ýÓÏOj²ž¸Ž(ãIìÕ#ÆÅ¶éóqMb!Õ…ŽCÅw7šgƒîn »‘. E"PFIÈùÖÞ¥o¤éqs+0Š!˸Q“Þ¶®¼'-ô&©l§ˆœ”’Ãò-LO´NdF±V*P·s·Óït§õˆ_Fg#wãôá^Z‘ÖÆâ)"—z1ÀÛ÷‡=*iüN ZžS:EÇr8aÃðã­í+Âÿ�hÒ¡š%Ó¢K˜T´knq‚3·¯NjUð4In H´Å…_xAk€×ëKëî8»_M«k:Öï$÷Báf·,,œuúŠ·®^Ý[ø¯E´Š{Ôsù±BFIEHÏNµÖGà•ŠHätäx‰(ËlARz‘ϧËàöžî;©ZÅî"û’´²ýî){x[Vg|E©h–%5X÷M:/˜ˆS‘¸(<ûãõ_þ³·=ì’ÌÚqÒb»X +3ã¯Ó¯5ßÜxA¯^å¬&d)’ܱ�õµFž TbȺr“”H¶?sû½z{QíãüÁcÔ<WyY¥½¤*f½†fœ0*ù9éÐŽZ-ü_,füßCêc€G&àXŸ¯ZìÀ¥·ÙÖ-1`ÞË¿.áÐã=iÍà„q0dÓXO4\ïÇLóÍXóŒÍ3PmB áòY$(THqß ÕìûÕËo Ïg Ám-”1/DŽ ~ª_øGï¿çòÛþý7ÿ�V±4û…™”?äZÕÿ�ëùôêCšŸUÒ …oàža)¸db™L}ÅÀç?ÃX‡B°þìÿ�ø'ÿ�^]|Ú–mJ-ß]š8YVWOcSš9ÍfaXvü “ÿ�Фþ°ÏÝŸÿ�¤ÿ�â«õ’‡ò?ÀÛû:§thÍ w¼3F²Dà«# †„Vlž±šÒ;I~Ðö±ººBÓ1PTäwΧaXvü “ÿ�Фþ°þìÿ�ø'ÿ�Câ<;ÞðìêÑþÓ.f»–häi.¥I¼Â º}Ö^~R=©ÓxoN¸;åIo5&óŒ‡~åû¼ûdñïNþ°þìÿ�ø'ÿ�Gö‡÷gÿ�À©?øª_ëùàÙõ;¡’øgLšU•£—Í´¦A) ìFÓ»žxâ‹ éÚmŤöÉ*µ¤- ÊHTc’9>´ÿ�ì+îÏÿ�RñT¿ØVÝŸÿ�¤ÿ�â¨ÿ�X°ÿ�Èÿ��þÏ©Ý>‘m&³ªÍ7Ú¢ŒÄ¸í zŒ~¡Ôü;§êó<·i+3Â`p²• ‡œc?­/ö‡÷gÿ�À©?øª?°¬?»?þIÿ�ÅQþ±áÿ�‘þýŸSº!“šTÆà˯ç¤q¾el€ŸtƒžõïøFl·Ü×O%¼ÞzJ÷ Ï»ybz`ã/ö‡÷gÿ�À©?øªOì+îÏÿ�RñT¬Xoä€gÔîŠçÂZW’bT¸A盄d•£õ*AÈÎy­[;Hìm–w•îw,ÌORI9&©aXvü “ÿ�Š¥þ°þìÿ�ø'ÿ�Bâ<:ÚðìúѧÍÖ_ö‡÷gÿ�À©?øª_ì+îÏÿ�RñTÿ�ÖJÈÿ��þΩÝ|Ö…¿ãçUÿ�®Ñÿ�èµ®kû Ãû³ÿ�àTŸüUox.Ö+I5háÞÏCó;1ÿ�V½É5pÎ)bß²„Z{êgS *Qælë(¢ŠØç (¢€ (¢€ (¢€ (¢€1Aÿ�ŠÄóÿ�.?û8­šÇ_ù[þ¼öq[Ák¶ uâ«ç77QbF!˜ èÝ…SþÆOùÿ�Ôð)«_Sÿ�‘žÿ�þ¹Cü𣝒ÇÎK4ŸSÛÃE:Q3?±“þõü j?±“þõü jÓ¢¹=¤»›r£3û?çÿ�Qÿ�À¦£û?çÿ�Qÿ�À¦­:(ö’î¨ÌþÆOùÿ�Ôð)¨þÆOùÿ�Ôð)«NŠ9åÜ9Q™ýŒŸóÿ�¨ÿ�àSQýŒŸóÿ�¨ÿ�àSV{IwTfc'üÿ�ê?øÔ×Òáˆn“S¿Aê×dZÕ®sÇ=Ï…n¡ŠžV)± œî…]7)IE½Å$’nÅñ¤FÊu@ƒÐ‹¦¥þÆOùÿ�Ôð)«˜¸Ô¼B“]›S:ÁÔ o³àÄÀo=3Ç?•Z]O]M>ùYnd–;ñ2‹nL'61Ó¨ÈéZºU?™ÍÆïö2gþ?õü j?±“þõü j湯ÇokÊL²™îö[“#F¿êØ ŽFN9©µõÑkg½¦‘d·;îmm ˜›8ÚW‚áøÑìªwxv:Òás&§~ƒÕ®Èþ´‰¦A.|½Nùñ×má?Ö³¼[ ÅׂåˆÁ$×n±ü‰Nì‚xÇzf­jײißÙV²G{ѳ\ùf5HÇß N7ddcš˜¦Òn]ÆÚOc_û?çÿ�Qÿ�À¦£û3ÿ�úþ5`¦©â 'š6ŽâãiFÏ±îˆ¨ÎÆž{{ûRE«x†+4{»;–Qri Œ;ö}äR#w^8÷§ìê24{ÿ�ØÉÿ�?úþ554¸dݳS¿m§km»'ÐóÖ±`º×îu‹Squ £ÛÈÏ3Z(mÁ†Üç 3Åg¶¯¬ÚI o#[ míË @ •È`1É8<ÓT¦ôæœWC¬þÆOùÿ�Ôð)¨þÆOùÿ�Ôð)«—ó<BÚÆ—%ËݽœW³¨t‹i’=Ÿ!‘@ã’GOz»¡âc·}’ÇwçºÜÛ¼?»HùÃ+cž1ŽNsC§5öÔ£ØÛþÆLÿ�Çþ£ÿ�MGö2Ïþ£ÿ�MU|,ú¥Æ“ Ö«q)¸‘~x^ ôç¦+v±›”dãrâ“W±™ýŒŸóÿ�¨ÿ�àSQýŒŸóÿ�¨ÿ�àSV˜ ÔûIw*3?±“þõü j?±“?ñÿ�¨ÿ�àSVèç—påFgö2Ïþ£ÿ�MGö2Ïþ£ÿ�MZtQí%Ü9Q™ýŒŸóÿ�¨ÿ�àSQýŒŸóÿ�¨ÿ�àSV{IwTfc&ãÿ�Qÿ�À¦©l4å¶ñ‘ »¼“$m–rËþ­ûUîôÿ�ÈkIÿ�¯£ÿ�¢Þº0““¯ z£*ñ^Î^‡oX×ïè뿎~7c</mÃ?‘ü+f±ïÛ'Ñ×v3ünÆx^Û†#øWرEPEPEP ­xòëL×o4ø¬a‘mÙW{HAl¢·þÍTádßÐ:ßþþ5`ø³þGMcþºÇÿ�¢c¬Š«Íñt±„%¢}—ù¯ü,›ïú[ÿ�߯£þM÷ý­ÿ�ïãWGz,Žoí¼wóþ üŽ×þM÷ý­ÿ�ïãQÿ� &ûþÖÿ�÷ñ«Ô/SN°šíÔ²Æ3´wçùÕKÛÛ‹+XçymÔ³(*ÊØç°#½Fͳ ÚÒßM—ù“ÿ� &ûþÖÿ�÷ñ¨ÿ�…“}ÿ�@ëûøÕåWZäÖ×÷Ð3Æ« ÆbÌd—f yãÒ¶íÞI-¢ycòäe“9ÚqÈ¢Èu3\œT¥=ü—kö;¯øY7ßô·ÿ�¿TuI­é7Zm時â2¶f{ƒê:×&°"Õâ¶`Ÿg”˜ÖMÜùƒ±‡‘õ׈°ÔOÙdafP‘óÿ�õÑdR̳&ÒRßÉw·æv¾ñ#xKÃöúM„N‘ ¼¯+‘V5µÿ� &ûþÖÿ�÷ñ«ÍßYešÇ›|DH@A ŸÊ©Å®J×° S=¼¶h(ˆrwc¦z{Qd̳&¯Íø/ò=SþM÷ý­ÿ�ïãQÿ� &ûþÖÿ�÷ñ«Íá"°ò¥•ZFHâY˜…þpçJºÜ?k¼ŠHÞ4¶üçÅú�?*,…ý§™÷ü——š='þM÷ý­ÿ�ïãQÿ� &ûþÖÿ�÷ñ«Î%×lá”ȇvÐq“ŒðzUÕœ4Š¡ »ƒc¦}h²"Y¶cw/Á‘ÝÂɾÿ� u¿ýüj?ádßÐ:ßþþ5qFŠ,ˆþÛÇ?à¿ÈíádßÐ:ßþþ5ð²o¿èoÿ�¸®ôQdÛxïçüùý½'ˆ<wu, Gr±mVÈ8Úsÿ�RÇÐäX¾j’6â«}“´?v>ÓSvÓþyÞà¿üM|îsêFË¡ú>KUÏ ÍêÒ§IÞ³¿·m?ççþËÿ�ÄÒnÚgý]çþËÿ�Ä×É>Ç­Ì»šTVoöí§üó¼ÿ�À9øš?·m?ççþËÿ�ÄÑÉ>ÁÌ»šUÉøˆÿ�Å]áÿ�,ۤ߻vß»òîÇ¿LÖ×öí§üó¼ÿ�À9øš?·,ÿ�ççþËÿ�ÄÕÓRƒ½‰—,•®r—W÷:o‹u{¨àË”ER0Åwo;ÈÈ$jññ=é‚7‰â•%¹XÒU·�»I ç9ïÓ·ZÝþݳÿ�žwŸø/ÿ�Göí§üó¼ÿ�À9øšÕÊö¼ µ¶‘ËÅâCPÒâ†ö±4ö“”ÂÄ4ªÅB~SŸÇŠ­¢ø†þËCÓlL~C­”f7žÍ~Œ8Aãk±þÝ´ÿ�žwŸø/ÿ�Göí§üó¼ÿ�À9øš|ú5ìôþ¼…Ë­ùŠV§ªjö£o#Á­œ¨¡|¦Ý"•Éù³Ø×CY¿Û¶óÎóÿ��åÿ�âhþÝ´ÿ�žwŸø/ÿ�XN2“Ò64‹K©¥Efÿ�nÚÏ;Ïü—ÿ�‰£ûvÓþyÞà¿üMO$û™w4©k3ûvÓþyÞà¿üM/öí§üó¼ÿ�À9øš9'Ø9—sF´ü)ÿ�:¯ývÿ�E­s_Û¶ŸóÎóÿ��åÿ�âk{ÁwQÝÉ«I/žƒ÷‘²õkÙ€5éeQ’Äjº3“Ó¥¡ÖQEôÇ’QE�QE�QE�QE�cù›þ¼öq[Ž¿ò97ýxìâ¶hœÔ4;éõ‹‹ÈÜÇ*"âF`A\úëPÿ�`êŸôçÿ�[ÿ�‰­«­kL±œÁuo  Qä�àô8¨á%Ðÿ�è+iÿ�EpÕÁa§7)­_™Ó Õ㣷¡—ý…ªÓŸýüoþ&ì-Sþœÿ�ïëñ5©ÿ� .‡ÿ�A[Oûú(ÿ�„—Cÿ� ­§ýýÙø>ß‹ÿ�2þ±‰þ‘“&‰©¤lÿ�è‡h'kñ5ÎÁy¬\[Å2ØY…‘€n›8#?Ü®Òè†Þ@5[BJùj=+‚ÓüO¢G¦Ú£êP+,(x è¡–`%~uø¿ó%â1?Ò.ùÚ×üøÙàSñyÚ×üøÙàSñü%:ý-ÿ�3Gü%:ý-ÿ�3]Ùooü™ÿ�˜¾³Šþ‘'­Ï—þ7ÿ�G­Ï—þ7ÿ�Qÿ�ÂS¡ÐRßó4ÂS¡ÐRßó4de½¿ògþaõœWô‰<íkþ|l¿ð)¿øŠC>²ªXØÙàsÅÓñÏøJt/ú [þfø¯CPHÔà$vÝÖ쌷·þLÿ�Ì>³Šþ‘Ÿ¬ßj°4öVö3D¬P°¹p2:Žc«~vµÿ�>_øßüErž×mô} ­{Cp×2H œm îNO~éPDHT>¹wixe«1*Ðçî˜þœcÛ5 *ˬ´ü_ù‡Ö1?Ò:{»;ëöFºÒ4éY>ã5Ëd}Êmæ¥{¢iÍqsgaoi"å°¹>‚:æì5ƒo>þÐ\¤Fg®VàŸºvãå>ý«&yfŸIÕ-T·u»´…#îKm•X=;×½,ËíkäÏüÃÛâoÿ��ô'¼Õb„Í%¥‚FK5Û�ýñUW]»{ˆmÄ"Yóå+\º—ÀÉÆcçT5½SHÕt˜!VµIa–9‚;®Tƒµ°:U‹i×vì©wiop¼¹¤pþ[@#ßÚŸöN]}¿þaõœOôïuk[y'šÎÉ"K3}©¸©û”ÛMCT¾´†îÚÒÊH&@ñ¸ºaz¹\’j½¼EµH"”YÉ Òý¤ºÜ¹\ÏNyÏáQØßEoceks¨[Ëoœ¶þTw% SâÈêöÅ/쬺ÿ�þLÿ�ÌXÄÿ�Híüíkþ|,¿ð)¿øŠÇÕu/.TmJËOÝlêÊÍq!òÙ¸S‘SXÚ=Õ¼ZÑ›V×–æ$¶‰QÅË�e\î;GÔ}qW¼]¬iº¦Š-l¯­d”ÜE!Ý&Ñ…`ÇùSþËËÒºZÿ�‰ÿ�˜¾±‰þ‘»o¨j—jæ;6ØÅ—Û:Ž=^þ]J]9-¬MÜQ‰^?´¿ Nÿ�WŠÆñ·i¨=˜³Ô­Ö1¼Í‰ÊJáxè¥`Û´M)žûS‚[‡ÒÒ×ÌK¶VY”“¸‘‚G"“ʲôì£ÿ�“?óÖ1?Ò;xõ{ùu)´ô¶±7P ‘ãûKð§¡ÿ�WíV¼íkþ|,¿ð)¿øŠá¤»u»ºš-rÕ®N†Ü\™6™$F%»ddf·4 O·[‡¼¿Š#"kŸ7p�úP²¬¹î¿ògþbúÆ'úFè›Zÿ�Ÿ/ü oþ"ƒ6µÿ�>6_øßüEGÿ� N…ÿ�AKÌÑÿ� N…ÿ�AKÌÕÿ�de½¿ògþaõœWô‰<íkþ|l¿ð)¿øŠ<ík?ñãeÿ�Mÿ�ÄTð”è_ô·üÍð”èYÿ�¥¿æhþÈË{äÏüÃë8¯éyÚ×üøÙàSñyÚ×üøÙàSñü%:ý-ÿ�3Gü%:ý-ÿ�3GöF[Ûÿ�&æYÅH½¥Çªê7“Û5½¤Mi&|ö`CÜÿ�fµ¿°µOúsÿ�¿ÿ�ÄÖ_†üI¢júOí;p†Þ% Ï€Hi8çê+¨ÿ�„—Cÿ� ­§ýýÅW-ÁFmEiêÿ�Ì¥ˆÄÿ�HËþÁÕ3ÿ�.÷õ¿øšu¾¨.¥eq3[íå26ÇbOÈËÀþõiÂK¡ÿ�ÐVÓþþŠ’ß^Òn§H-õi&s…EÜgøR† )Ej¼Å*õÜZ–Þ†cj è뻎~7c</mÃ?‘ü+f±µÇŠ4uÝŒÇ?±ž¶áŸÈþÞr›4”´PEPRÑE�xÏ‹?ätÖ?ë¬ú&:È®×VдÍCÄÚ¼÷V¢I<ô·°ãÉÐÕøE4Oùñ_ûøßã^m\Ú•)¸8½· VÄÔ•uQ%-vg%IÞºïøE4Oùñ_ûøßãIÿ�¦‰ÿ�>+ÿ�ük?íº?Êÿ�/õ2¿üý_s9#Ichä@èà ¬2ªm¥[I ÂâF…2Æd$9ÝÂ)¡ÿ�ÏŠÿ�߯ÿ�?áÑ?çÅïãÛT•þǃñ1øk/¹œ)ÒmZ{™F¹P²‡bCÓŠž D·µèÒì�³’À}O5ÚÂ)¢ÏŠÿ�߯ÿ�?áÑ?çÅïãÛT•þ|!Šjβû™ÂÍ¥[Od¶’+˜”‚â äsÖ™&‹g0¸,Œ.�æCóc¡ú×yÿ�¦‰ÿ�>+ÿ�ühÿ�„WC'a_ûøßãGöÕå€× bÖÕ×âpÑévñÉ<ƒÌß:ä%ÉÈ?™¦G£ZCåÖE1Eä©s³9ÅwƒÂš'üø¯ýüoñ øSDÿ�Ÿÿ�¿þ4mQþWøú¥‹ÿ�ŸËñ8´>e*`*¦!Tr ¨9�àÓŸE²‘¦/9UdÎÞëÔz×{ÿ�¦‰ÿ�>+ÿ�üi?áÐó°®ë£ÛT•þÿ�TñŸóý~'ý‹ha10•Ôç%äf'·95j;dˆ¦ÍÊ6*†8é]Ÿü"š'üø¯ýüoñ¤Ñ?çÅïãÛT•þË„1RÞ²üNJ–ºÃáMþ|Wþþ7øÒÿ�Â)¢ÏŠÿ�߯ÿ�?¶èÿ�+ü ÿ�ÔÊÿ�óõ}Ìä{Ò×Yÿ�¦‰Ÿøñ_ûøßãKÿ�¦‰ÿ�>+ÿ�ühþÛ£ü¯ðõ2¿üý_sáÿ�ùuúÿ�ú u¬j­œ>Õmí£òâ[õÂäœ|±úÕ£\9­EQÂkª¹õùU‡£ì[¿-—ÜŠÚ½µÖ©s§F%ûE°PÈ@�ôç¾jñ N+ÛMÔm|CªjJ–î—iƦBÚ^;æ«]h:•ÝÅÔ—RZܭղƲ>Ìã9)ÇCœö9¼÷7£ÓOø'z”­±Ó’ÔQÜy“M—"ùXùØa[#±ï\ ö›uý¨öÎn.B�gÞBƒ’´€~kZ êyªÜ[\A¹ž ¢Ë2‘ÁG‡Ú©ÑŠZËúÐ^ѽ‘Ö#¹ªŸÚ¶ßÛ#JËý¤Ãç”í+œu®vãÃ:Ä0'úH$•ÞËíBë·9Ï~ï©´_j6žsu42‹m?ìŽÁ‰flç<j^ΚMóšWµ™õ‹K{ódYÞåbóš8бTÎ2jÕ½ÔWVÑÜDÄÇ Ü¤Œ>†±õ}]Jíä0[8XÀ‚a#E4OÎNå:qõ¬é|7¬0f»´¿lÊ×!”£©ÎôÛÿ�ÖéÖ’…6–¶`å$ö:쎙æÃÈÇÖ¹ðÃmHeŠ;›¹CÚΠʦ3ƒœzÓÃZ³[ùˆÖpÎ&GhRILsRcœŽ¹àvÍÊÌòìv;†3‘ùÔW7)ik-ÄÊF¥›hÉÀëÅqïàë©®a’Eµ­µÄm‘ÙCÉ÷HÏ\^•»i§ÞÁá(´Ù9/Ð@Î\ífÛ·9Æ}éJœ­+‚”ŸAÃĚؠ½s4V“€RwŒ„ç¦OoǬqÈüëšMQ àHöñÇöqo4À–;qƒ´`r}úT6Þ¾¶Õ2e‚kE˜K²I'›€ÜƒÓÿ�­TáO[>à¥.ÇW‘ëÒ€r2k‹Âš¬6ױèF†a@ù™\±Rp R äóÖ¶´«ûÅá²Ï›|±Â͵:®z’qǦTâ–’¸Ô›Ý§áOøùÕ¿ë´ú-k6´¼)ÿ�:·ývÿ�E­we?ï&sã¿„t´QE}9ã…Q@Q@Q@Q@Ê?â²cùpÿ�ÙÅlÖ0ñY1Çü¸uÇûcÛúÖÅ�xÿ�GüV×_õïþÍ\î¥t^=ÿ�‘Úëþ½áÿ�Ù«¯ÌÞ§ê~…”ÿ�¹Sô J0=(¢¸D0=)i)hµõÚØYKtèΑ.æ שyÆŒÒ$làŒã#=*=NÑïôéíÂT¦â3€k* ¼âëtІ"Lùwf9üq]ãJQ÷ÝŸü7ü–¬ëF~än­øëÿ�ï7VxY ¬¨QN yðù~g›ÌãváŒýk%´9 ßž4R#€#È]  cßR}"âЩ‰šB×->匶̮1ŒóN4©=9¿«*õ£«‡ãæt>|!ù±í=pÅ2æåm­$¹*]w¸ä{V4:$ÆÞØÆÉ D¬ž\ˆYYIÎHÏñ­9l™´–²ÕI‹Ë ·Æ: ™BœZ´¯©q©VQw´ÓÔcjÑÇkÔ°Ê–ò�|ÎPzg*Ù¹IS4`’7 â¨>—,Úlz|³¨€"£ì_™ÀížÙªÍ ;^$ÿ�iPs(>ÅvàóÆ«–‹ÝÛøs×[FûvùšßÚOn—Ï”ÿ�u‹c?K,ÑCM#ªÆ£%»b±‡åû%µ±ºB°£ Ä|ÃÎzþ•nm)ßAO$j›\ŒT‚3íÅ)B•Õ¥¥ÿ�Æ¥~WÍ møö%mMRîÞÛìòï¸Vdή})ñj0¼òA hfw²ÉÇËêB*²¸¸Ô,ﲑ4ëå°ÎKpyJŽóF{Æši.Ït©òþULäŒwÏ­>ZZ&íþwÿ�!sWWi__Âßæ]“P´‰¡V¸3>ÄÁÎML&‰¥òÖD.:¨aŸÊ±SÃòG:L·JYn¾ÐBG+‚:ÔhrC¨Áv×*Æ)$lñ¸?ãŠ:6ÒC\Eõ‡^ý Óê0Á{¡ViKÀúž§Ú¤Šò"Wf»ŠHB°⡼²{·!Ì2BW\±çÔ Ú›! zY’Ýàf‘7¿^Ô£N*îÌrxÉÚ7EãªÛ ö´v ˆÄ‚F`8àþ5ýêXXÉvèÏcsÆqY©¡22“4oþŠ-›|yéÜsïVn´¯7A:\RíS{ǽ7<ѳÓKþ¢RÄrJë]mú"EÔ£ûTV邏!xúØ#ØÓ¬õ(/,–ëýR+‰ƒéU—H"öÞä4q´+´ùjAconõ ®‡-¯ÙÙnUš&U“å`ç=;zhµ£×þþ�”± Z­?á¿àšÆxU4±…n„°ÁªñjPÉus,Û²©g ÈÈÅg®$$.— Œ’$±oR³òŒñŠUÐçŠþK¸®Ô32aY2¤ŒëÇQÒ… :ûÀêb.½Ï]»™±çFIUugÂf›osÒ3F~ëe=TŽ Õ ])­/ÞìKÛ‹F£‚O¦z~jm>ÑàšîâO•îd°í��?*%$ìÍc:«ÆÛÿ�×褢±7(Àô¢–€=+[ Âe£qÿ�-Ûÿ�E=d÷­o ÿ�Èå£×vÿ�ÑO]X/÷ˆz£‹1ÿ�t©èÏm¬mA±ânÆcŸŒõá{dgò?…lÖ6 Øñ>Ž7c1ÏÆzð½³Ïä ûSó“fŠ)(h¢Š�(¤¥ "çþCú¿ý|'þ‰ŽŠ§©êpÚx“WâºfóÐæ;wqþ¦>àTÛ–ßóÂûÿ��äÿ�âkä1“ÄNË©îP’öQô4ê+Ÿf—ÌÆÍ‡v}1T·-¿ç…÷þÉÿ�ÄÑý¹mŸõßø'ÿ�\ÊìkÌ»œN…ªê6Z^›ghV1%½Ì³<°30uc°žã¯¤ø“Tžx~×”›LûYXà`c”¹×Ÿ§^+ûrÛþ}ï¿ðOþ&íËoùá}ÿ�€rñ5Ó9ó^ðÜÊ1·Ú9x¼Y¬‹KéÞ6)iгDÈ ³meü8ã×­X&Ô–Òâà*M \¤jë.‘˺ ž¹­lÞj}ý±‚æÒùã$}–PA‚’ÒûN²VZê�·Þf¶™˜ýI¡Ê6øÏù‰4ËÉ/´y¦ºdtË…q dìpÃ?¥s:Z7cI’ãíûdòü âmÛ›nçÓ¯Õÿ�n[gýE÷þÉÿ�ÄÑý¹mÿ�</¿ðOþ&¡JJö[”Ò}N{ûw[²öW¨±] X›Ì0¼‹4‡ï ¨##ÓŠü$ZÚÍ|§OóLpÉ$"4$1R0pzñß±­á®[Ï ïü“ÿ�‰ ë–ßóÂûÿ��äÿ�âiópVþñÎÝø›Rbk+ÜCi,Ý 8pAÆHëíÞ›«jÚ–“©j ‹Y¥¶ÒZu¹û9]̇ž˜çõÒn[Ï ïü“ÿ�‰¨/u ?P´–ÒæÖùà™J:ý–Q¸£N2³ø4Z|G1«k~!}"äÚJ%V±Žq=¼4NYANùÈ$ñÈÅjÜkÚˆ{È ùKRð„ŽqéÏëÞµ`Õ¬­ Ž­ïÄq¨Ud”àªOíËoùá}ÿ�€rñ49täþ´_Þ34MKXÔµ{Øî¼«xm•ä’X2Fìö<dzWMYŸÛ–ßóÂûÿ��äÿ�âhþܶÿ�žßø'ÿ�YN2“º‹‹Ini÷¢³?·-³þ¢ûÿ��äÿ�âhþܶÿ�žßø'ÿ�Qì娮eܺâCáMgÊ*$ûjí.23²>µH¦¹ÿ�=ôïûòÿ�üU[¶n|%ªÊ‹"©¿^$B‡îÇØŒÔæ½sq…%ýÔrá•å?S;f¹ÿ�=ôïûòÿ�üU&Ís?ëôÿ�ûòÿ�üUSÖ¥¹]gNŽVtÒ]_í ™ûÿ�Âދ֡Ô. Ñ£¸Ô´ï:à°HÞ5fx£¹|{“JãQnÞ~Fí¥sOf¹ÿ�=ôïûòÿ�üU&Ísþ{éß÷åÿ�øªçïüQªYÎb…-g„ÝA ]í!dûÜÕ{žœÓ-|Y©5í¼S­£FڛؾÅ`J‘ çÛúÕû–½‘>Ò7¶§G³\ÿ�žúwýùþ*—f¹ÿ�=ôïûòÿ�üUs1ø¯U{¨‹%I5,¾ãp ¯N?Z–/ÝdYÜÜG ^lòÃ5ÆÖ1ǰ 8ÝïÅEÑ_ðÁí#Üè6kŸóßNÿ�¿/ÿ�ÅRì×?ç¾ÿ�~_ÿ�Š®^ãź¼m0l•¦µàaü쯀£$G5¡¤k—ž+š)çÛk%„CÞ76K`÷Å'Ji6ì qnÚ›5Ïùï§ÿ�ß—ÿ�â©6kŸóßNÿ�¿/ÿ�ÅW;y!ÿ�„öò8ÞQ¦«žfXüÍütïÒ­O«I¦ÙCý˜ÑÜĨæX²Y×—R~òƒž;ö£Ù½-×È9–·6vkŸóßNÿ�¿/ÿ�ÅRl×?ç¾ÿ�~_ÿ�Š®jïÄWöú­¼ð] ËWÓ^tŽ(HYd Ž;ç㯷>/½MêúÑìî<³\#¥› §8ä}}iûšY-CÚDé6kŸóßNÿ�¿/ÿ�ÅQ³[ÿ�žúwýùþ*°_ÄúœcPˆCo4Ö·«�)òù‘”Ý Æ{rqøÓdñÀÔ,g[žGÒ世Mã ðçÅ/e>È9ât5Ïùï§ß—ÿ�â©vkŸóßNÿ�¿/ÿ�ÅW;}âJÚÁ®­VÚí>Â×%‚2ù.1„ažù ¹§¡kW—ڭݕ؀ùpC:<@Œï¯$ç9¨óY N-ؽ³\ÿ�žúwýùþ*·ü.„š·ÚÚ“ÏNbR£Zú“T«OŸñó«×hÿ�ôZ×fU+â>LíHéh¢ŠúcÈ (¢€ (¢€ (¢€ (¢€0g¸ŽÓÅžtÛ•Ñc Ÿ˜È�ëVÿ�·´í»¼Ù1´7ú—è_g§÷¿Ç¥Sº¶ûoŠ|‰f¹XVňHåd\³`ž1Î;犺tkbۼˬî-ÿ�Ývúú~¼õ  mNÏÂÚ•ä—·ÐÈóì*ÎaÂ6ރК¬úƒcߺÖQ³ÌÝÌÿ�ÁßÌ}{T·“GgªÉg2y ïk×ùJŽ9í×ÔóP¥Î͸´ŸåòñBC÷3ŒñÏ^}{× Zø8ͪ–¿¡×Oë\«‘»zŠÚƒP°6²ü»³Ìÿ�»èhþÁðní¿e—9¬ýJïÿ�Ðí"Üm ¤ÿ�.ÜgPýÖÜ;zž}G‚ãåÇÙ'éùIýíÞž¿§+?¬`|¾ïøÿ�¶w—ßÿ�rè> v@¶²åŠÌýYw/è? Dм&Ͷ²û6ÿ�¯|¿Èý)ãp`m'ùƒBA÷›qíê8ôR½Ï™¿6“üûóBA÷±œqÇN=;QõŒ—Ýÿ��?Û;Ëïÿ�‚4èÞ X¼Ãm.Ý¡óûþ…¶ÖœúƒcZÖQ°9ngþ1õ§-ë,Þ`³—vælç#%vž1Ó¯4Ô¹òöi9ØPŒê»œgŽzóëÞ¬`|¾ïøþÙÞ_ü[Aðj k.P°<Ïü#'ô4`x;vß²ËÅzÏ×nïåMKŠ€Z\|¡@Ρ!û­¸gŽy<úŽ(óþ]¿d¸ÆÝ¿ò“¦íÞž¿§(úÆËîÿ�€íå÷ÿ�Áºƒ\¨²åŠÌÿ�Ä»‡è(M Á¯·m¬¿6Â9Ÿøó·ù~Ö¸ÞK˜08Ô$y·Þ£AÅ+Üï/›IþbäãP}ügqÓNÔ}cå÷ÀöÎòûÿ�à€Ð¼Àk.)ëÿ�‰¶Öì?mÏÙeÆ ÿ�–ý›oó¡®K&Ò~K5 ?‰vžÞ==h' ý’|äùIÙvúz~¼õ£ë/»þ�¶w—ßÿ�Bðb-k.9<Ïü'õ4¯¡x57îµ”lßžgþ þt‹s±”‹IþR„gPýÐ@íïϯzD¸Ù³“ü›1BC÷I#<sן^ô}cå÷ÀöÎòûÿ�àŽ:ƒ•Š›Yr©æ~¡wÒ ø5ˆQk.I�s?R»‡éMYð¡E­Æ� ÿ�! ;6ïO_ÓŽ”4û•´¸ÁjwmÞž¿§(úÆËîÿ�€íå÷ÿ�Ášƒ_fÛY~}˜æâåHºƒ)²á‚Ìÿ�Äp?QCÜy›ói8ß¿8Ô$x‚qÇ8ôíC\ïf&Ò˜¹8Ô$x`ööãÓ¨£ë/»þ�¶w—ßÿ�?°üŒýš\c?òßûÛBðb†&Ö\(byŸø[iýhûO9û$ýsÿ�! ?»·ÓÓõç­ s´©“ü¥HΡ'ð®ÑÛÐóêy£ë/»þ�¶w—ßÿ�Wм›÷ZËòo'™ÿ�ƒ¿ŸãCh> RÀÚË•,3ö]Çô¦­ÆÍ˜´Ÿä(Fu ÜÎ3Ç=yõïBÜl ¥ÇÊ ê¸võ?ˆâ¬`|¾ïøþÙÞ_üÃ@ðqm¿e—;‚õŸ©]ßÊ„Ð|åÚËó•™ÿ�ˆd~‚›çü¥~Ëq»ä!'MÛ½=N:P÷Ãiq󆄃ïN8ã§”}cå÷ÀöÎòûÿ�àŠšƒ\![Y~p„s?ñùQý‡à ‹Yp@?òß¡m£õ¡îw—&Òœ¹8Ô$x�qÇ8ôíC\’Iû$ù%ü„$î»OoOÈóÖ¬`|¾ïøþÙÞ_ü:ƒmeÀÉ?ëû6ÓúÐÚƒSvëYFÝùæà 7óü{P.H ‹Iø ÿ�ÈBNË·ÓÓõç­ s°®-'ùvBC÷<sן^ô}cå÷ÀöÎòûÿ�àŠúƒSxkY~]ùæá?¡£ûÁÁŠý–\ƒŽ³õÛ¿ùR%ÆÀ˜´ŸäÙŒêºIãž¼ú÷¤áBý’ã�cþB{w§¯éÇJ>±òû¿àûgy}ÿ�ðG.àçeÖ\³*Žgê˸~‚„м&Ͷ²û6ó8ûùÛüҚו”Ú\a•”ãP}æÜ{zþCŽ”¯sæoͤã~üãP}ìgqÓNÔ}cå÷ÀöÎòûÿ�à‚è~ `¬-eÃ*°ÿ�_Ñ›hýEOi¦øKO»ŠöÞ h2èäLÛy1çÜ‘úÔ tY˜›Iþbìq ûÊöôzE>ÞåQ´‚Kk”” ·ÎvŸ)‡O¢þ|õ«§_ä”-OøÏë|¯™»zkºz-,ƒnüþåÿ�€€Ý½OãT¦»ŽïÄÚgdeŒ\#Œ�`Žqëèjêh¶ÈT‰nþ]˜ÍËŸº¥GCÏ©äÕ/²;ÄlVó]e†D‘^Vu;�ÚNAç“ÎF}ûwœfõQ@Q@Q@¨AŠ5k\´—T*5Ëò£>ƒëM´Ô ½{ˆÐJná$YP¡ŒŽ½x=ª­æ™qoãÍsT³’6ûCÅðË‘÷bM¥H}ã‘Þ°ï¼%}zgy.üÍB+”år±Æ˜%×ó¯”Å›ÄNîÚžÍIR‘Øo^>eç§=h. ãpϦy®?Wð…ÕÝÓµ‹ÚÛB¢/ (e)±÷Àïê1øÕ7ÃÓjjCÉû+¦°ÓÃrC,Šù2:ôÁ¬8ߘÕÎIÚÇe¥jֺū\Z—Ú²<d:ímÊpxúÔö÷"x|ÖáŠâPàâ¹-;Â7¶7–7;í·Ãws4¥ID—$/NÙ¢ÛÂÚ­¥•¤I-œÞD—àœ1ŽE‘·œd2ç§Jþì¿­à}à§;j޾ââžy8Pngc€S:Õº5¸’+”[‡Äí Á'¦}?Uk½�_xXèÓJ˜ÕC 8R¤àö º‹~ñåèqƒ"â³J*ò-îRØÜ2:ŒÓdžbyd•4]ÌÄð£Ô×+…o ½¤SM –Õœ›”È{€A_އ ž½*Ÿ‚/-íb¥¶çK–Êr2|ÇlísÇ8«T©õ™<óþSµ‚æ ˆ#ž)Qâ‘C#ÃÐÓÙÔgœ2@ë\‡„eKû oc´xm¬©DÉË‚|Žß­Kmá‹ÈÅšâ#%¥ÃMö´È–e9ùŽùçéIÓ¦¶Ô¥ØÝÓu[}[MÖ«)ˆ–PpÙRAãê*µŸˆm/ìâ¼·†éíä}ŠþQë§#®3Mðæ—s£h‚ÎS’¬’8*NÓ¹‹Þõ™¢xr÷HÓ-¡Ùm%ÔHë!•ö|äçåÇ<5>Zw–½tô×þ�¯=¨Ë. }j+[ÛkËaqo<rÂIÔä?Q\ý·‡®muDºX¬Ú,e·l•ˆŸâ‹Ž î:Vu§„5K-+OµŽ['û!•Z&.©0sÄŽCèTéÿ�7õ¨ùåØí‹¨êÀ~4»†q‘ŸJá®üu:Þ{Pe±KxŽ_÷r+¸g'¿®x­H<;{ˆ#ÔÊÈó#$¸a°/>‡Ô:vÒ@§.Æü"dgdx‚¹\H�Î3ô©‹¨,Ô×aámBÎX]å¶žžwkY2Q–Cz}áÓñ5Y¼ sæ ÓC4bž�$'äw9\qÑzõ^Êþ!sÎÛ¸ÿ�‘gWÿ�¯åÿ�Ðc§š¡¤[Mgà+»[‡47Fî ;ˆŽ!žjùÕÓ˜+F’þéŽë?P¤��ý)qíIŽzWšu•.õ kIa·l¼ógË…Y±ÔãÐzÓ-õ¦»šÙíæ‚HT;P ú7CQ^é 6¯mªÛº¥Ô´8u%]‚G±ÈëQjÚUî­aäý¦;wYE ¥•¶œá½Aô­Rƒ¶¤7#LMnP8’"¤à6áŒÒ¬Ð9 ’ÆÅ†@ k”¾ðd——¢ï}º3^Crð>^# ulò}…6ÏÁ——–“¬– Á¨Kwò©£‚<¾~•~ξ"yå}Ž³Ï·ÜG›yþ!Û­8ËŒI½Ãdcó®:K öÒ±·•5Ó ‡æGäéÐgô©"ðý¾™aWvÆ[G”„‘Äêç8ÀÁv¡Ó§ÒÖ¿×ÌåØêÚkuÆébaÍEý”·òØÇ4ms «IꡳŒþF¹+ŸÉ8ºì×ÎÓþȸˆïݸÞžµ³¦h7õÆ ÒÂéqm N¡NàÑ‚2¡ÍÒmJïþ¥}‹gZ‡ûb}.;K‡¹‚%™¶ªà©8}EIe«Y_,ûÆð>É£™v4mŒò¯¯z¦ºMô^(»ÕãkvI­’·6’rN=ê•Ï….'¸’ðÝD×sÜÇ4å¢;v !U{‚3×½´ß[h¾þ¡yö7[Q±±Y}¢/´L†DŒK(ÆOëVX¤b#tr¼¤W#¦x6÷Lº³/`v·†x2ÑþàG=ºU¯øZçFÔÖòK˜\}Œ[:F„CnÜ=>”J$¤ sꎟÐ~T`ƒô£Ô¸ö®sP­/ Çέÿ�]£ÿ�ÑkY˜ö­? ÿ�ÇΫÿ�]£ÿ�Ñk^žSþñòg7øGKEWÔ@QE�QE�QE�QEŠüV$ãþ\:ãý±íýkf±€ÿ�ŠÈœˇ\¶=¿­lЩÿ�ÈÏÿ�\¡þMQÕOëZv›âËØï.–'ha '# è*ü%zý#ÿ�¾ü+ä±Ð“ÄÎË©îa¿…fŠÆÿ�„¯Bÿ� „÷Ã…ð•è_ôþøoð®Og>ÆæÍ-bÿ�ÂW¡ÐB?ûá¿ÂøJô/úGÿ�|7øQìçØ š+þ½ þ‚ÿ�ß þÂW¡ÐB?ûá¿Âg.ÁcfŠÆÿ�„¯Bÿ� „÷Ã…ð•è_ôþøoð£Ùϰ¡¨Ü/ˆ,t˜t·<­9û¸ùW<gœÒ]^Í¢Jó^Ý‹‹yš8­âØÄŒHäôÁãžÕLj|7vª'»†M§+º6ÊŸPqÅDúÇ…f·x%žÞHŸï+ÆÍŸN¢µKdâüô!ÆZ…ߋ㲻6Sióý¨\ÅnQYHÌ€•;½ ž0†æêÚ°ž/>êK=Å”…•3‘Çn:Ôo¨øFDEymØ$‚UÊ>CŽœuÔ½ðtnޝn%3)üHz·N§Ö®Ð·ÀÉå©}ÇEã$šh4»ŸßÜKm.œÉr:ôàóV-üYmuic$VÒ™¯<Íœd8lŸ¯¥T[ß##+Û‚’4¨B?ÊíÕ‡Mwà¹,ÒÑþÈÖñ±tCaXõ#Ž(q§Ò/ú¿ü�Q©ÜuÇc¶3Òî³§ÚåmMÛO~H ÕÝ7\›Pñõ€·E¶‚eI7|Íæyª yàÇ µÃÃä0òÛ?îôéSE«øRÞëíQMn“ˆÄ~`³´t;Rjvƒ¿ü0Ôj_VGqª_Çâëë{‰-¢±K„ŽÔ°bÄ’=ªåÖ´ú5½¸½Gd\}£åQ¿²°wëÒ«6«áF¼{ÃqÚdP¯(W @è3Ž”ƒSðFA4 l6> “’:w4híx¿¸9g¨·~)—OÕä‚òÑ#¶ŠÈ\»,››%¶ÓqR^x­l,帛N¸Â<j•ù·œ3Žõ_í¾ ýÞM©òâ0®è˜á?»Ó¥1.|£Z ´XÔ6 NÝ©Ú{¬\µ;–_ÆñAróYÏ[]›Y‡ …ݸ‘ž1Î’oÚAx²ÌÓ¥¿öwÛݬ…r=9-Î=)ŸÚ^#‰mÃÊþc¶ÇË61žqÅ8j~¬‚KmË?tØÿ�wéE¡ü¬|µ;ŽÔ<]—5Õ„Àý˜ÝF#emèÏ=ˆÈ«úV¶ºåÝ¡µ’ ­‚3 ‚¬2"²¾ÝàãlöÅíŒ. m£øztö«ú×…ín$ž ˜RY+¸FËÀϪ\cËepQõ:!A¬aâ½ þ‚ÿ�ß þè_ôþøoð¬}œ»XÚ¤ïXßð•è_ôþøoð£þ½ ?òþøoð£ÙϰXÙ¢±¿á+пè!ýðßáGü%zý#ÿ�¾ü(ösìÍ-bÿ�ÂW¡ÐB?ûá¿ÂøJô/úGÿ�|7øQìçØ žôCÿ�!­'þ¾þ‹zÆÿ�„¯BÏü„#ÿ�¾ü*}7^ÒõiZݤ²›’B…#þY¿¨®œ$$«ÃN¨Ê¿ð¥èzMc_¦|O£¶Ìâ;›nqÂ÷Úqùƶký3â}¶gÜs·8á{í8üÇã_^x&ÍQ@Q@Q@>š]Fîê+ÔApáÊ4;¶Š½wîÔðÝÏü_øøªèè®Yà°ó“”£«6Ž"¬U“9ßøFî¿çþ/ü?üU'ü#wYÿ�ø¿ðÿ�ñUÑÑSýŸ†þAýf¯óïü#w_óÿ�þŸþ*“þ»¯ùÿ�‹ÿ�Ïÿ�]gá¿>³WùŽsþ»¯ùÿ�‹ÿ�Ïÿ�Kÿ�Ý×üÿ�Åÿ�€çÿ�Š®ŠŠ?³ðßÈY«üÇ9ÿ�ÝÖãþ/ü?üU/ü#w_óÿ�þŸþ*º*(þÏà }f¯óçü#w_óÿ�þŸþ*øFî¿çþ/ü?üUttQýŸ†þ@úÍ_æ9ßøFî¿çþ/ü?üU'ü#wYÿ�ø¿ðÿ�ñUÑÑGö~ùë5˜çáºÿ�Ÿø¿ðÿ�ñTŸðÝÏü_øøªèè£û? üõš¿ÌsŸðÝÏü_øøª_øFî¿çþ/ü?üUtTQýŸ†þ@úÍ_æ9ÏøFî³ÿ�ñà9ÿ�â©áºÿ�Ÿø¿ðÿ�ñUÑQGö~ùë5˜äumXøVþÞiDââu‘ð›ð®:ŸîÖðö—ÿ�>ƒþûoñ®ÃÅ_ò�›ýäÿ�Ð…aò³oÝʆŠÇn ÞRrîs“Aáø5°kIšäEæìD‘²21Ö£µÿ�„böòÚÚÚ?1îbi¢ ¾ÒªpyõµOs¢ÝÜø¹uÂÙ‹CnJLUòNsÀéøÕ{ M«k.•¼ÖöS@ŠÌÜ;sÀÏQÉÎy®ãeï;Û¹ÓgØÐ¸Ñt›{w˜Ø¼z¬e™Ðf¥Ò±ÿ�ƒþûoñ®Qü­?Qn!Sum hÍ„‘ÌÙÇqøÕ‹ß j—7šÔMK5ż¶çÏlÆgš|«þ~Zyúý»þSrëJÑ­<¿2ÍÉ¡7·@Onœ ­§CáíU"’ÒÚFŽU/²ÈªÀO½th"‚åNœ ýq\½§‡µ[Ûé 41^@ÙÜ”o-´�çœ%xë+;÷*JÏDlÂ?¤ÿ�Ϩÿ�¾Ûüj'Ò48把5–\ùhel¶:ãšË_^ËmµÒ+IÚS*Éù„ídž{Œõ¢?_ýõí,#’ÈJ³,lpÁ±†/^3Öªßßþ¾ñÛ¥»Ë]ÂîÚÖ{Y<Û’V ¡Ûq$d{TÖúVtd fêÑ>ÆoSœÆzõ¦kšMÞ£ªé7¢låi2”fÊ‘ïMŸG¹¸´~RÅ˾9…Ã4±¥Ç'=ü})]r¯yßÔvÕèX—HÐàx–X£F•¶F ­–n¸ûT£ÃúVqöQŸ÷Ûük¼5¨Éý“$–ö>u…ãJä1z•#qùxnrGJDðÖ¬Zt¸ky¿Ö”¹óäW}ÀàÆ^¹#Ž•V_Î/ûtßÿ�„{Jÿ�ŸQÿ�}·øÔRèºL-6.þcm ¾çž`[xKS‚%ÍEWÓ’Úr“°-(l—Î=8«1øwUEÒ÷Ok~n·-Ü`€0OàKþ^ÿ�ºmÿ�Â?¥geÿ�}¿ÆøG´¯ùõ÷ÛbÇá­H­ºÍ<fx.^SxŽCÏÏÈÃg ON)žðÆ£¤ÞiSJñ‘¼Ñ]•‰³eO#œ Mhß8uøMßøG´¿ùô÷Ûoø.Î )5h­ãØžzdŸùf¾µN´ü)ÿ�:¯ývÿ�E­uåR“Äjú3 lR¥¡ÒÑEôÇ’QE�QE�QE�QE�cÿ�‘8ÿ�—¸ÿ�l{ZØÅcÿ�“ˇ§ûcÚ¶(Çüyÿ�#µ×ý{Ãÿ�³W;]ävºÿ�¯xöjçkãs÷©úŸ¡e?îTýŠ(®#Ñ ®÷¨·_eL“…ÞʸùG©5bª5ŽÝA¯ap²ºpÃ!€éô5påûFu9¬¹¤:+Åq)–6·òßiópàƒÜsOkË`ÄA[8;Ç8ëUîl%¹’Þo´m–Þ£nPñ‚þµOûEäW"DÜ’I#)N aŒ@+UOVìc)ÖZ(ÜÕK«yÔž&;w`0<zý)Ÿo´Æ~Õ�É;ÇOZ˳ðñ´6¸È…âÿ�WÛSL‹Ã~RBžtg˶x?ÕõÝÞ«ÙÑ¿Åýkÿ�ï#Úâ-ð~>Ÿð~ãqç†5 ò¢‚2 `3Lû]°“a¸ˆ>@Û¼g5–t)[„¹MÑÀ a$AÕ€ïŽÆ£—ÛÍÖÙ‘|ç‰ÁòþîÌ<RTèõ—àS«_¤?/óÐÖ·¾·»’há;BÛÆ ‹S3\]A¬ŒöÌÆáÎFF? [+³¹¼—Í ·ù»và©À e¾Ÿqmw{p“Ç›§ ‚‡åÀǯ56§wnÊÞº_õë5®®þšÛô&ƒSµž7Í€ÅdùJ°ê§.¡h÷R[,Èe°Ï�ù¬é<<­·,diY“%ÙÆ ãút¦Çáù"I.Çï-VÜ“?w¡ëWÉCùˆö˜•dáý[ÔÙŠh¦Å"8iNëUŠÞÚæuåŽß>c.:Ž g©Ý7K:}ÅÌÆmþxL®Ü`¨Ç©ªßÙf^i¡ÀŠffIHÉŽH#Ö¦1¥Í«ºÓþÜT§YÃHÙëÿ�ï.I©­ºÅ%Ä2G„'zgÒ§{Ûh÷îž1°ÃpÈ­V›N{¸"·¸˜yT²"à¾:dúU?øG˜Ü¤­u¦^‘ã!Æ=qÅ5-jìtýØÝiÿ�ÓP´–Þ9ÄñˆäRÄ Š[ÛØ¬,ÞæPÅtg­eIáÙ%³ŠÝî×j[˜2"ì{õÿ�ëV¡¶—ìQÁÁ]å2±ïJQ¤š³¾¿€ã:Í5(ÙÛñûÆG¨Äጃʌ*°‘˜l9ì¦ßj°YEæq.%X˜#±ÀÍSŸÃÉ4Wh%‹…Q²$Â);±ëI&€ó}©¤ºçš9Ž#À;uèjÔh^íÿ�ZÁ3”ñ<¶Q×¾žð>ób)✆D‚Q泿·#ÝLÖò¶r’r¹îz±i`¶×77’à©`£ 000*‰ÐKCy ›™ …Œ|¡>œö¨‚¥wÌôÓþ u~Uʵ×þv=J95f ÷œ`©8« sŠMûØaÇÖ³%Ќһ5ÓíkAmœ|ÜîÏ­èfäù’\ìœF±«Æ˜+ŽüŠn4]½ë O¯îÜ·>© 3ÚÆ¿½Ã#žjµÛà7ŸÓÀ;‡5—>…%Ñ…¦º]é/šæ8ödã`þ´³è’ÝC Ít ‘)U‘iÁ#Ðã·N”ù(éïz‚©ˆMû¾›yfê5ºÏ•‘)žŽ¸©ª„ör\ê6’·Ú–`ÄòìF?*¿XIE%c¢M»÷Ð)i(¨4õ­áoù´oúîßú)ë'½kxWþG-þ»·þŠzêÁ¼CÕYû¥OF{f+PLø£Gm™ÄwíÎ8^ûN?1øÖÍcê Ÿhí·8Ž~vç/}§˜ükíOÎMŠ1KI@(ÅPŠ(¥ Å¢Š�1F(¢€ 1KI@(ÅPŠ(¥ Å¢Š�(Å-%�b–’€ QE-�&(ÅP/Š¿ä7ûÉÿ�¡ Ã"¶¼_ ‹Ãwf Èp«’~aÐW"u¸¿çËPÿ�ÀVÿ� ùüâ-Ô»ž¥sS˜æ³¶âÿ�Ÿ-Cÿ�[ü)?¶âÏüyjø ßá^?³—c»™—º¥ô^+›NIä}ˆN‚;pìqéÈâªAâZ×Q³]Z%ˆ6%ÄöѨÈu`¸=3Åi‰ôá©HiºÛ yfO"O»éŽ˜¨¯F‘¨Îf¼Ò/¦sˆ–¶“îHÇNºW.‰Ç¡“¾éÝø¾Õ´Báê³xÖBˆ¬FüFx#š°<]köÓnÖ—J«yö&”…Ú$##¾pjµÐžámô¥Æß4}žOŸoÝÉöÀ§y.IþÈÔ 3‹‚L’d¾´rÓ·Âÿ�«Á Ϲ¯«¸­e¸·¸,0»•òÃ`2:ôk+OÖ¦‡@±Õu4]ÅX’ šÞžßáWn5+[»y-æ°ÔZ)Ö_³8ÈúЍ²I[i¯d  Ú»�Lgž+8¯vÒ]›Öé“MâX­`3ÜØÝC Èc‘ÝFã žø=3Mm~ãûoK°ûĽŽI 4ŠJ…ǧÅEnº=´k:Múªîãìò烜õüi±E£Aö_/H¿eÝä³Èvnê·Š®X+þ¾b¼»“ë×¶Þ!ÑìàœG ãH²,6®AІç]ŸFÖd³½+uµ{”xÐ,‰´µ‡NsÁã¡©n¦Óo.ẟMÔZx3å8‚@S=qŠcX.!“G¼‘.1æïµr_2O<Q¬“õpw»³+Ëã5v-,Üߥ”¢FieÜõ⯯‰í±œÐ̯$Í9•rðªfÛB;³¢Þå¥Y‹}šL—Q€ÙëœS£‡DŠágMñdYLÊE«ðä`°4Üiô‹çÜéqKŠËþÛ‹þ|µüoð¥þÛ‹þ|µüoð®g.ÆœÈÒÅiøSþ>uoúíþ‹Zæ¶âÿ�Ÿ-Cÿ�[ü+ÁW+tú´‹Ñ=%Œ¡ÿ�V½zYT$±®ŒäÆ´éeQ_Ly!EPEPEPEP5©Þ-‰–Tž=­9‰‘Ù¼µ`Y¾U=ºsÉ¥þܾ)û6ÿ�»þ¦ln9þž_þ=Å[Vÿ�ŠÉ—wü¸gnïöÇmßû/ã[4Âê–zµã]\ØÚKrê]£¸\¼€ààÎ}øªßغCÿ�ªÓ->õ{–ä}ÿ�õYüŽïN+SU¸º>"»…nî#Š8â*‘ÈT †ÍWó.¿çþïþÿ�òkã°Ôê8NkÉ…*X‡ã;/VSþÆÒ˜ôË\7ÜÜ·#ï|©Ÿø9ôÐ4m¯öe®Þ¿vç8û§ñó?ñÞjç™uÿ�?÷÷øÑæ]Ïýßýþ5—ö–ù?iìq_óóñe/ìmy“LµÚ¼¾Õ¹'jü²cßqõ4¿ØºLë´ËO“ýfÕ¹?wýf=x#¼ÕÏ2ëþîÿ�ïñ¥ó.¿çþïþÿ�?´°ŸÉø ö8¯ùùø²Ðtæ>Zi–>wÝä\íÞ>fçÓf1ïÅ'ö6“'i–™~#Ü·#—ÿ�WŸNϧw̺ÿ�Ÿû¿ûüh2]Ïýßýþ4ia?“ðAìq_óóñe/ì}ùLµÚܦäº7Ê™ÿ�ŸAƒGö>÷¿³-¶ýï¹u¿p~;ÿ�ñÞjï™uÿ�?÷÷øÑæ]Ïýßýþ4ia?“ðAìq_óóñe?ì}9“LµÂòûRèð¿+ãþF=G4ŸØÚBgÍÓ->NjÝSýf?1·×š¸'™”j7E—¨œŠ_2ëþîÿ�ïñ£ûK ÿ�>ÿ�/cŠÿ�ŸŸ‹)bé+Ãé–™6çªüÏø1êx£ûI< 2ÓwO»uŒŸ˜ãŸø÷tËrMýÞ?뱪马‹&±+ X¤d\ä; zž(þÑÂ?ùwø ö8¯ùùø²/ì]%øL´Ëp›–ärÜÇŸø9ô8£ûH“ýV™kóÿ�«Ü·Cïq}9>œUß2ë?ñÿ�wÿ�eÏüÿ�Ýÿ�ßãGö–ù??cŠÿ�ŸŸ‹)cèÇæ]2×iù—)u§å÷ߟÚ£/ÌÚe®Õù› u£ål{ïÆ=¹«)w$’Éjw-$xÞ¢rJç‘‘Ú¤ó.¿çþïþÿ�?´pŸóïðBö8¯ùùø²—ö6‘úÝ2×äÿ�YµnÝâLzòF=y£ûIC‰4ËL¯µnO+̘ÿ�€‘Sšºe¹&þìÿ�MV¬ddkRœgí]ÿ�:c„òïðAìq_óóñc?±tžŸÙ–›º}Û®¿xÿ�ãŸø÷ŸØºKpše¦[…ÊÜõo™3ÿ�>‡Š½æ]Ïýßýþ4‚KŸùÿ�»ÿ�¿Æí,'ò~~Çÿ�??RþÆÒ$ÿ�U¦Z|üG¹n‡/þ¯>ïN(þÇÑß”Ó-v·)¹.‡å\ÿ�ÀÁÏ æ®™.¿çþïþÿ�_2ëþîÿ�ïñ£ûK üŸ‚cŠÿ�ŸŸ‹(ÿ�cèßxé–Û~ñù.³·îÇþ;Í/ö>ŽœË¦Zá9“j]‡Ç¯ÌF=FjÄWrLÒµ;—1¶ÇÛ9;[Ðú—̺ÿ�Ÿû¿ûühþÑÂÏ¿Á Øâ¿ççâÊ?غL|K¦Ze8“jÜžS™1ëÁõ9 èºHá´ËMÃ…¹ÆGÌ߆Ξ§Šº$ºÿ�Ÿû¿ûüh2]Ïýßýþ4ia?“ðCö8¯ùùø²Ÿö.’x]2Ó'…ÊÜõ?2ÿ�ã™Ï¿ŸØºCŸÝé–™nrÜ¿ÌyüÝéÅ^ó.¿çþïþÿ�O2ë?ñÿ�wÿ�ÚXOäü{WüüüYOûGõze®în[‘÷¸>Ÿ09ô hú1ù†™k´ò>K¬íû¿žÿ�üwš¹æ]Ïýßýþ4y—_óÿ�wÿ�ÚXOäü{WüüüYOûF_šM2×jüϵ.sµ~WǾò1ê9£ûHýv™iò¬Ú·'î¬Ç¯Q·×š¹æ]Ïýßýþ4¾e×üÿ�Ýÿ�ßãGö–ù?Çÿ�??RþÅÒ“‡Ó-7/ÊûVäËó>=¶SÅMi§ØXÞEsk§Ú%ÌDùo²äílî?ç™?ð.*o2ë?ñÿ�wÿ�>Öæî=cM_¶Ü²IpQÕä$0òÜãó´¥Â΢Œafü‘)bT”î½Y£ý»xüGö|·ÜÝ Ãï|Ñçåþè9ô8½ØÔ¼Ga$“۫ůF6GxÜ.Þ¹ÈÁÈc#5ÓÖ6 ØñFŽ»±˜çãv3ÂöÜ3ù½sÎ6h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÅñWü€&ÿ�}?ô!XF·|Uÿ� ¿ßOýW;uÝ[I³ª¸ÚLmµ±ì{WÏg?Å¡ê`>b[x•eñöl¨‹èM¤¡³æ2ýà}qíNoiˆÓ+7?e–S ’qÁ?ˆæ­Þh67°ÚÇ(‘~Êáâxßk‘Yºo…ÄO¨ÿ�h0¸ŽæøÝ¬AŽÜñ€Ã¾¼åìZ»:¿x´Dñx»LœÅ·í ·ÕexHO4m'ëT´ßK=µ™½–8¦ŸQ–Є•pŒÀ çå8É©´_ %¥³Ç"Ü2ÞIu«ŠÌI£5n? é±­ºªÍ‹{–º2ž$läþ§zmÑWKúÜKÚ=I£×ìå 곘Z6‘%Ž®ïíÞ³.¼oc¹{xfšQ4´xÚWÍ?)ÿ�ëU¸ü'¤B“"Å(†PÀÅç¾ÄÝ÷¶®p¹ÉéPÂ/ J»C34¾X . $Är¤sÔR°¾·ö–èXÿ�„†ÒýJ+‹‚©…Lf" ³ç�üÄŸJmÇ‹4ÛIZqë,qLD¶_îž;Z–_ isÉxóE$v#óKHO)÷ô#Ö‰ü5§\ó,¯(–9|Ó!ÞY>æO ô¤·þ­ÿ�¼èZÓ5K}ZÞi-K&V‚E‘v”uêüE`ØxƒP½[Ä2@—^½¤CìÎQˆ8x­Ý7O²°7‹fç3NÓL<ÍØ‘ºý;qPÛø~ÒÒ)â‚[¤[‰Y11ÉfêsÚ’tÕÿ��jNÂzÙ¯žÅa¸7HØh¶`íþÿ�ºûÕ;Û\Ã4“A,näµ-#&sŒ} «Rx~Åž™§@þbKæÃÛw]¾Ý*©ðî…:ɹ̗åLw$2Js–Bäô¦½ºƒç_é±°CÙÃ$û»d"1æ§ÄÚd·v¶±ÌÍ%Ìi,@.2¯ÊžȤÿ�„_MóB'. {}Í3Èÿ�{$õ'Ö•<3¦*Ú)‰ÜZ„XC¹;B}ßʇì<Ã÷žDvÞ"µ{«˜f–e»6ѱmÁ2yÀç< CâÝ7ÎŽÜ-Ë\<’°’áÔd©Ž9©…ôÃq%ÆÉDïqö¯0HC,˜Á öÈ#¥?þÍ?íP\„O *¸s’ì0Ì}N0(½0ýásMÔ-µ]>ëG-˹ ?•nxSþ>uoúíþ‹ZÁÓ4Ûm"Â;@ËY¬Ûˆç=k{Ÿñó«×hÿ�ôZ×nWo­>]¬Î|eýާKEWÓ@QE�QE�QE�QEŒþ+&]ßòáœnÿ�lvÝý?جpßñY2îÿ�—ãwûc¶ïéøÖÅ�qºŸüŒ÷ÿ�õÊäÕbxÃ[½Ó<cwµ½¼ŠÐBI‘ØüÞ•ÿ� n«ÿ�>V_÷ñÿ�¾K¿Úg¯Sèð˜jÒ¡F7GiI\gü%º¯üùYßÇÿ� ?á-ÕçÊËþþ?øW/š:~§ˆþFvtµÅÿ�Â[ªÿ�Ï•—ýüð£þÝWþ|¬¿ïãÿ�…¾h>§ˆþFvtWÿ� n«ÿ�>V_÷ñÿ�ÂøKu_ùò²ÿ�¿þrù úž#ùÚTs›kY&X¤” ÈŽ5Ë1ô¹/øKu_ùò²ÿ�¿þÂ[ªÿ�Ï•—ýü𦢻 úž#ù!µÔ´z×UŽ'¸ŽðywѬHýÞŸJ§e{¯_µá´½¹’âßWx5y!€;Ž:ŸÆ¬Â[ªÿ�Ï•—ýüð¨-üEyj$ú^›‘‹8Fa¸úœMt*ªÚÚæ_ÙøŽ‘ct[íwQ·´¹ŠîâwòÅr²F¢#³Ãïp1Š4ˆ5‹ -m¦Eüír†!f*OqÔt§ÛøŽöÎ3¶—§B„–+2Œžü ›þíWþ|¬¿ïãÿ�…9VZÙ+Ãÿ�˜–_ˆë> ϵ´®öš‚Þ%¼‚D"?-¤þŒ÷ú~u™w‰®¡)4wíW–²¡_•ŒòÓ¾N8­øKu\ÿ�Ç•—ýüð£þÝWþ|¬¿ïãÿ�…%Y'tÞ_ˆ}àI-LjRóX6ðNðùÐy9Eåc÷›Ovõóø‘nTYËwö½„+4`Ê"#÷™Èè1ß­ź¯üùYßÇÿ� ?á-ÕçÊËþþ?øRURèƒû?ü¬Ùð䚉²»MSÍgŠêU‰¤PâÏÊxëÅah–WÖ7Ksm:Æ×ÓLm c,e‰=³Á©?á-ÕçÊËþþ?øQÿ� v«Ÿøò²ÿ�¿þ*¥¯kj?¨WÓÝzĺªê‘—ï§Ë)ÆÕH›Ñ½cô=k2ÄkÚnžP[߸þИÜ6ÉåÅ dŒŽ™Ç5cþÝWþ|¬¿ïãÿ�…ź¯üùYßÇÿ� ¥UZÖBþÏÄ+!üNÒŽmAc|®„ÂŒá¾@p8íš»ψßQÓ¤xä6ï?hŒ®Â­´ï=ÁúJ€ø·Uÿ�Ÿ+/ûøÿ�áGü%º¯üùYßÇÿ� TÖÈ_ˆþV,øo§Y¡¸6'Q4ˆdì Œr7g'­7þ*c{m“Ý­£ó"F»ö`ye¸á³š_øKµ\ÿ�Ç•—ýüð£þÝWþ|¬¿ïãÿ�…ÕvAýŸˆþVtšúmÍõ5e¾182í;¾•¦kŒÿ�„·Uÿ�Ÿ+/ûøÿ�áAñn«ÿ�>V_÷ñÿ�±’M·th°x„­ÊÎÒ“½qŸð–ê¿óåeÿ�ü(ÿ�„·UÏüyYßÇÿ� ž_4?©â?‘¥%qŸð–ê¿óåeÿ�ü(ÿ�„·Uÿ�Ÿ+/ûøÿ�áG/š©â?‘-qð–ê¿óåeÿ�ü(ÿ�„·Uÿ�Ÿ+/ûøÿ�áG/š©â?‘Ÿz!ÿ�Ö“ÿ�_Gÿ�E½qŸð–ê¹ÿ�+/ûøÿ�áW´_ê*Ñíî-­£ŒÜ1ݱ?êŸÖºp‘ýü5êŒ18ZÑ£&ã¥]¬mA±âwc1ÏÆìg…í¸gò?…lV6 Øñ>Ž»±˜çãv3ÂöÜ3ù¾Àù£j’Š(h¤¢€ ZJ(�¥¤¢€’Š(i(¢€ŠJ(�¥¤¢€ (¢€’Š(i(¢€ ZJ(�¥¤¢€1¼Uÿ� ¿ßOýV ®¯U°žŸ%¯šbÜAqƒž•“ÿ�Ôÿ�ô_ûñÿ�ÙW‘™`êâ'O¢;°•áJ-H˪××_c´’q’•$hX“Û[ßðOÿ�A%ÿ�¿ý•'ü#SçþBKÿ�~?û*ó–Uˆ¾©}çW×iw<îÞ-CCñ$w³ÚjK‹Ÿ)ZO.QÑúpãðVÓU×ïMÙµºy§ƒVkaÙÀŒÂÉfÇOZôÿ�øFî?è$¿÷ãÿ�²ªÖ¾ [1(¶»Ž!+—“m¾71êOÍÖ·ú…}ÜU̾³O£v<ãGÕµÝFÞÊá.áô°ÜÄ` Y†íÀuù¨4EÕ¬M† )y÷Œé%±rIŒî#åŠôûO­„&+K¸¡Œ±b©o“Ôýê±ÿ�ÝÇý—þüöURÀ×Õ(+Ãÿ�˜,E=/&yÄz¾¸Útó-¶£ö•¶Ä‘=ª€“dr‡ø‡'žáT®®<Eug"Ì·ª°j–å^(ˆg·à±é’ö¯Tÿ�„jãþ‚Kÿ�~?û*?á¸ÿ� ’ÿ�ßþÊ¥`q ÝA}àñ4ŸÚg›¥þ·úKYš·¢ù«m¶AQ–1ŽôOyâ5¾‚(¤œÙ½÷–&û6\ÂP’XcŒ7�ãšôøFî?è$¿÷ãÿ�²¤ÿ�„nãþ‚Kÿ�~?û*_PÄ"Öi39Ý_\hÌÚª?ž’ȇ|[K c´ãäc¥`hV‘GàŸ±^iWr^}°ý•¹‘Šœ1Á9¯Nÿ�„nãþ‚Kÿ�~?û*OøFî?è$¿÷ãÿ�²¤²üJ½¢µwßúî?¬ÒÓS˯.|U¦i0ZÀ³Íyob¬Yb޲ɻ‘»¹ Æ8õ©Eγg>½"& ï%ÌFß0ï UÜG°9dJôßøFî?è$¿÷ãÿ�²£þ»ú /ýøÿ�ìªþ£ˆþDOÖ)38ÿ� Ýjw÷k©ÆêñÝ:DΛKÇŸ”ûýq[u©ÿ�Ôÿ�ô_ûñÿ�ÙRÿ�Â5?ý—þüöU„ò¼Dì—ÌÑc)%k™5§áOøùÕ¿ë´ú-ißðOÿ�A%ÿ�¿ý•_Ñôƒ¥¦kŸ9®9;6…O¥veøÔ+sÍic N&HrÄÔ¢Š+Û<ð¢Š(�¢Š(�¢Š(�¢Š(7üV%wËŽq»ý±Ûwôükf±ÃÅbWwü¸g¿Û·Oƶ(Çüyÿ�#µÏý{Ãÿ�³W=]o´­JçÅ×Ûé÷sBÐDÅ 2’7ddVö&¯ÿ�@›ÿ�üð¯’ÇЫ,LÜbÚ¿cîòÌMá!M'nè£E^þÄÕÿ�èÿ�€Ïþbjÿ�ô ¿ÿ�Àgÿ� äúµoäs;þ·‡ÿ�Ÿ‹ïFló,´“Ž€u'°•cªN%»¶¼Í™cÂíÞžƒ>‡Šèåðî§6Ï3F¾m¹slü^•Ï…u –2>‹{ç*²W%Aôâµ… ¥iAýÆ14ÛRHéæµþº÷ü${màì¤ q KàdƒéÅ6ë[‘¬åQ ÛÈöms ƒtÁôí[0ø+Q‡Kûéwû¼¯+Íû#nÇåSÛøFþ E·mõÇ–#f6¯óØñ[:);ªo~ÌÁb•XíÝë-® §mŠÎç#iè:zóV¤ÖJKB7n@›e0nþ¾½»q[+á[Õ`ÃB¼ÈO/þ=_îútéM_ܤ^RøzäG¸6ÑfØÈèzT:-ëìßÜËX„´ö±ûÑÏÛëÒ]ßZE *±ÈeWÞÜ‚‡Sìõ”‘!VFšyeTY\9ä~•¼<'v¥HðýÐ*Å”‹F'©é@ð¥àŒF4½¡·öWá½GiºWÑSsóÿ�÷ 5í«­½y“ûÎþî±¥œ†B² €N£=þµtÞ}§C7°|T鑯Ej ^–V:æUJ©û+ðQÒž<5¨ o³ ôC»³ã*eEéËM¯“.8ˆëÍV/æ¿®ç/öË´ðÜ:—Ú‰›Éud8éëϵOý¾¢â(M»#ˆó»£Î§§¯µo'…¯cØB¼>àû+ü¿N8 øVñ¥2èÈX9o²6wzôëU웽龽U¢­ËZ=:§ë÷œå®¿#é–÷3@¦I‹áú'ñíV¥ÖhÚ‰*чT>§ŸÆµÇ„n@�xzç�–èÁ={T‡Ã7ÿ�d6¿Øw‚»LbÕÀÇåJTnû=»„£gZ;w[÷9ë™nâÔôè Ób}þfÐ�8¦Ï©Ë§jC$Ÿh„@eçä� éÎxúVúøNÿ�÷fMþFŒaíܲLâž|/|bxŽ…vQþú›Fù¾¼sG³–‰ÓoåæÚµU/û{ËcšHòÇ0*·Ú– 7±î¹È⬦·j kå<­¸`FTgü÷­“á+¢ÿ�„~çƒôFê:”«áKµHºÐpÛà FÎ}zPèÝiN_sâ,õ­û­Œ}B[Ä»‹ìç|*„Él‡ÐŒðGZ­º¡!BLåâ–O0üŸpò¤v=«¥—ÃZ„ÎMõœ 6ÏœzgÇð­äˆŠúÓ*d(6òç®8¥RåJTßÜ9W‡3”*Çï^G1±s>¥!xe°ûG\ ÿҮ]j 7†åÔ-Yâo Ê™ Þ¶Ç…oÌhCbí\Z0ÀôéÒ¤—ÚŒÐ$ÑoZ"0PÛ>1ùS•)6š¦ôòè(Ö‚Œ“­|Öç/¡sæš²4‚+•Ù@Áb2ã~¼Q§êÒyòÚÊÆiÞæT‹q 6¯½t©á‹øÝ]t;ÀÈ0§ìÎvý8â›ÿ�¥æþÁ»å÷ÿ�Ç«ýï^iºm«:oîõ«ÓU£÷úqkÉ91Çû@LnáyS‚ïUΰÑëm|Å-¼ol@PÄŸâü+¥——s"$¾ºuOºÑŽ?JI<)y+9“A»bê³jüÐt¡R·ü»pJºvýôtó_×õ±5e:—Ø^6G'‰àñž=jKÇšêòÒ^^Ù”oƒ Ç­j¯†/ã`É¢^+ŽöWÈ>½)mü7©Û‡)¤êämÎínùcïÅfèJÎÔßÜ÷5Ž&Éʬwî¶í÷•è«ßØš¿ýoÿ�ðÿ�ÂìM_þ7ÿ�ø ÿ�áY}Z·ò?¹›ýoÿ�?ÞŠ=ëWÂßò9hßõÝ¿ôSÔØš¾äÿ�€Ïþ©áT‹ÅšTÒé·‘ÅÌÎï*¨òÜrO¹Ñ„¡UWƒq{®‡&?BXZŠ3MÙõG¯Ö5ûcÄú:ïÆcŸØÏ ÛpÏä Ù¬k÷ljôuߌÇ?Ë»á{nüá_`|³EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÑE�QE�QE�QE�QEÎjpÏwâ%‚¡ÊÚù¾l’J>`ß Â¸Ï'œ‘Úè7?t}ŸwýtÙÚ>qü]|οìñVÂÿ�ÅbÍ·þ\q»oûcŒíÿ�Ù¿õ±@uÌP[\5µÝåšI€dA4ùþfþ.2ãlŠ‹Ì´“ýmõ—Ïþ³l³¿þ·7ßNjMOþF{ÿ�úåòjñ¯šÎYSQZ…,g+î/™jÜÉ}e–ûûeœ}ï•ñót zi<Ûo½öûÝÖÏŒO/ÿ�æÆÆ°þÚŸò"þ¡áæZ¦ wÖ;—”Ý,än_–<üÝ6“ŸSÍí#ÿ�U}eò«Ý,çîó~ny'>¼QøÑøÑýµ?äAõ÷ýœß»{ë_'îñ<û¶™yÝ×~síÅí‰o¬°üI¶YÇ Ì˜ù¸ä zsGãGãGöÔÿ�‘Ô#Ü<ËgæKûÍËí–qËpøù¿º=hómþ÷Ûìwýïõ³ãwÝ?ÅÓËÿ�ǹ£ñ£ñ£ûjȃêîe²óýŽW”Ý,ç‘ò¦~oîç>§š7Ú'ú«û,/î–sªÏÍÏS»×ŠÆŸ^hµ©´Ä³g’+qq¼Êª¬¹Ç~†«é¾-µÔï-bŠ‹FºÈÀ ÁH#úô­?µ+Zü‹ï'êtïnc¡ßh¼%õ– ™gè¿2gæþþsê8£}§C}e·§úÙóƒóâþÿ�þ;ÅfÜkvie,ö÷VҘʂpƒž™'§Z”ëjÜ}œêÂmÁ<¿4gqíŒõ¥ý¯Wùõ(1w}£q%ý–‡Û,ã†æL|ßÞƒ4y–¯þ¶þÄïÿ�Y¶YÇÞâL|Üp=9ª·—2Ûm1Û4À‚X†�(<æ¨i:úêš|ƒ[=µ¤ñy‹,’.8Áç­ 7ª×7"ûÃêP½¹Ÿ6ݾf¿±Ü~fijãqùN>n›?^h2Û/)c¸r¹–|n*çæé³9÷æ©®­`̪·°–bBü’HúŠƒþ 5¯­lÒè<×JÍÐH!qž_Úõ“ó©Cù?2Õ?Õ_Ù|Ÿê÷K9û¿êóósÁ9õâö‹ÄwÖX^t³ž˜óóxœúŒVN¡­ýƒU±°û3H×›¶?˜�FNsSA«Dà–ûåòâ-(a)ÇðOjÚÕm~E÷‡Ô¡{sí:}ºËoOõ³ôûÃø¿¿ÿ�ŽñFûFáאּxlK?FùŸ7÷ñAÅeËâ-.+‹H>Ô¬÷R¢Ù’ “üªÃj¶³+ÞÀ¥A't€`½ûQý¯Y}Ì>¥æ.y–¯þ¶þËæâM²Î8oõ˜ù¸è6úsG™lÜÉc¹¹}²Î9?+cæþæ1ïÍRXÓfI+ûwX”3•” ô'šlš¤[T†h$Ècɘ)àsüGÚ—ö½_ä¨Ãù‹þm¸ù…ýŽÿ�¼?{>7”O/ÿ�æ2Ù9ŠþÇ+Ì{¥œò¼&~n~RsêqU?´ì|óÛ! ü¥Çn½ûw¤µÕtûÙ<»[ëyßní±Èã¦x4lUß“ó¨Ãù‹›íˆ¯ì€^#Ý,ç…æ<üÜòN}x ½˜áo¬¶ŽeŸ82ÿ�]ùÏ·­ëSýµ?äCú„{‹¾Ðð×Ö[O ‰gè~fþ/ïãÜRo´sûËë,7ßÛ,ã‡æ\|Þ môæÆŽýhþÚŸò ú„{‡™jüËc–ûûeœ}î$ÇÍýÐ1ès@–ØüÆþÇqäâYñ»îÿ�{§—ÿ�sGãGãGöÔÿ�‘Ô#Ü<Ûdæ;ûËó&eœËò¦~n› Ï©æ—̵ýMõÙþ¯t³Ÿ»þ¯?7=N}x¤ühühþÚŸò ú„{†û5ùc¾³Ú¿*nšrv¯Ì™ùºï'>£Š|Kmq<vñÞÙ³ÊJ*‰§¸ßóuÞ ÿ�wŠg~´ÿ�ÈkIÿ�¯£ÿ�¢Þµ¡›N¥HÁÅjÈ©‚Œ å}Oì+·ÿ�Xm°ßlӽ̘ù¿¼=i- šÇ_²K¨awž9\I²ü…ßà Ÿ—1ƒ]%cßø©ôsŽ‘ÏÎ=—ÛúƽÃÏ6(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Z(¢€ (¢€ (¢€ (¢€ (¢€1•â²fÛÿ�.8Ý·ý±Ævÿ�ì߇zجu_ø¬™¶ÿ�ËŽ7mÿ�lq¿¦ïýlЩÿ�ÈÏÿ�\¡þMQó\§Ð·®q4ÉþÊÊ?‹Ð×7å·üüÝÿ�àKÿ�|Ž=Ãë3»ëýu>«—Õ©‡ŒâÕŸõØôþhæ¼ÃËoùù»ÿ�À—ÿ�<¶ÿ�Ÿ›¿ü ñ®Kûû¿à_Ùuû¯ÇüOæŽkÌ<¶ÿ�Ÿ›¿ü ñ¨ ŸfS¨ÊN}±¸>ÿ�5 •í»þž[Un×ßÿ��õnhæ¼²7I]Ò;Û‡d8p·Nvýy¥r#dW¼¹Vs…åù?íí¯Ýÿ�?³jÚ÷_üÔ¹£šó-¿çæïÿ�_üj)eЉoçB~k·zýê#Úÿ�wüyme«kïäwRx}gñ#ê³¼R£[ˆ<‡„�9ÎIëL¾ðïÛ53y×ÙÇØÞÑQ#hbFxã1\TeeÏ—{pøë¶éÎ?Z–ßóówÿ�/þ5§µ³ÝýÄÿ�dÔku÷¿ò7¥ð’Öú¨6o"‚7>PÀòŽA÷ÅOsàßµM{+^k«¸.Ž"û¦00=+šòÛþ~n¿ð%ÿ�Æ¢i¡I m¨N®J›·Î>›ªÖ"Oi?¹y’%å[µ÷¿ò=>xÞ[y#V Î¥C3íX1øSo…mtSzÙµeh§XÇPISzž+‘¨xï.]Ouºr?;Ëoùùºÿ�À—ÿ�Î54MýßðKyUYku÷¿ò:Óás=›[]\G"»™Çn";ð•ÚxÆ>¦¤Ã÷BûM½›Qó.,£x‹y ±ÔgƒÀæ¸áÏÍßþ¿øÓ_Œ½åÊ{§ÖŸ¶¾—ü¿²j.«ïäw:¦†ÚŽ­a}çFžò±<[ƒçšlº\Ú)å„Ù³spí}ç çœ×·8]ºŒ­»îâñ¹ú|Õ?–Ùÿ�›¿ü ñ£ÚrÙ]éä *©-S_{ÿ�#­ÿ�„j忲ÚML¼štÌñ9„r¥ví<ò@ïUãðiŽÞka~ܬ‹{d.›Á¿Rƹ¯-¿çæëÿ�_ühòÛñówÿ�/þ4þ±çø þÇ©å÷¿ò:UðZ•î•ÐÙGfÊaá•9ëÔÔ©á/,i _HÂÆé®x,Ná¹'8ï“\‚KŒ/çbz»sÿ�³SäÄ1´’Þ\¢(ÉfºpëM×–Í¿¸K)¯u÷¿ò:Èü$‰ikf÷m-½œÍ5¸dùÁ9ÀfÏ dý{Ñ£øHiZdËw¿ì6¯l—á›vO=k”EÞ¡–êè©\¿?­DÓÀŽÈÚŒÁ—ïvù_šlÝÕßÝýw왫6×Þÿ�ÈõQškÊÌ‘†Môû¤ûƒíOó}9æ¥1·üüÝÿ�àKÿ�cî.¯îÿ�‚ZË+=šûßùŸÍæ¼¶fKx÷Í{qgk§ùÓÄlåæïÿ�_üh÷7»û¿àû2µíu÷¿ò=?š9¯/Ûómû]Öìgi|ÿ�:_-¿çæïÿ�_üh¼;¿»þfVî¿ò=?š9¯0òÛþ~nÿ�ð%ÿ�Æ-¿çæïÿ�_üh¼;¿»þe×î¿ò=?œÒCÿ�!­'þ¾þ‹zó-³ÿ�7øÿ�ãZþF_èÄÍ;~ý¸y™‡ú§ìMt`Ü>± >«§üŸ—V… ɵ¢ÖÇ·V=øÏ‰ôsŽ‘ÏÎ:p¾ßÔ~5³XڀωôsŽ‘ÏÎ:p½ñýGã_b|™³IKE�%´PRÑE�%´PQKE�”´PQKE�%-PQKE�”´PIKE�%-PQKE�%´PIKE�%´PRÑE�%´PQKE�”´PQKE�%-PRÑE�QE�QE�QE�QE�QE�c*ÿ�ÅdÍ·þ\q»oûcŒíý7~ëf°§Zø«í/ ­Z,Aã„·Ìd Óþǧzµý¹k·w“{¡¿ãÖNï³Ó×ôç¥�y—ävºÿ�¯xöjçk½ñ³­O©-åÔ�ÄÇý#ýÆ*H Œä·Üô¬ÇðR¦üêw'™œir¹ŒãžzñëÚ¾o—b*×”â´~hû ¿7ÂQÃBœåª]™ÊÑ][x)T°:ÇË»8Òä?uwþ‡SÅð….qý§qÔùÉýÝÞ¾Ÿ¯k›û'ü¿Š;?·0_Íø3”¬Óå¹Ôud‘dŠ  6Àw�0pOJô¥ðR» ÇÌP ér¼»‡AÏ¡àÒ'‚ÖM˜Ôîý˜Î— ûÄžxéϧzÒž]‹…íüש•\ßRÜÒzy>ÖýO0[KË9õ!k û]áXÜ’ª 1ç­I Ö­DÂl-Óùœ˜°vú÷ÅzIðtk˜u+¬m ¥KœÛÓ=sÛÓž”çðZ ru;ƒ°98Òä?t€qÏ=xõíZ<-ï÷®Ö0YŽ=*5ò}ïØó]<jËqf× pÊÍ(œ8?!þUsÄÏq¤\¤0™'‘B€£“Ïÿ�®»öðR¡`u;”°8Òä?tdãžzñëGü!+»oöÆwÿ�dŸÝÝëéúñÖ¥à1njj [Íw¹k4Àªn›¨ÝüŸk}ö¤†ÞKHdÚOïÖ0˜Çj³®¤ FŒÝU;ÒBeÏ�Ññ^’¾ V*§qó:\ƒªîý?#Å"x-_n5;›aÒä{8Ï<tçÓ½Àb’·"ûÐK4ÀÉ·íÜÿ�Èó»XgïÚ+‘Û*ƒ#gkr4é#‘|H.L4"ئð¹Ëg8¯B V�Nã§.Oâm£¿¯_AÍð…®3ý§qПùÉÙ¶úúþœô£ê¶ïʶ¶ãY¦+s½ï³ÿ�#Í%¶¾ŽæêêÚ"IÞ1å!°>ó‘ïÓŽj+x5C{e5ÜS¿”ó)ú~á<ר7‚ÕC©Ü|¡ÉÆ—!û§¿¿½©_ÁJ›ó©Ü|»³.C÷@'ó×Z¿©âínE÷ù[¹›Ìp¿´sï~Ç›é‡Uû|fåf4m¼9»ŽžÞ•2MfôÜ);‘~ÏÆr¸ä|ס¨b¿ÚwŽ4É;.ïïz~¼u£þ•fQý¥>I�gK“©]Þ¾Ÿ¯/Å6ß"Õth¸æ¸(¤½£vwÕ>Öþ¼Ï2²µ•|/„–.Ó”eÚÀ�¤“‚O¶{SZ-jŽ(ÌÒyF,Úëüg¯ó¯OO+ìÆ§qólÆt¹ÞÎ3Ï9ôïH¾ V F§qó#:\ƒïþÜúwªú–.í¸-]÷ÿ�‚GöŽÉ*Y%³éò<ÂÖJÚÙ¢\†kÇfmàü„ñß8éÓ¥§‹Çж_ÄÏsµ•Ð òqÈöÅw¿ð…®3ý§qÓ?ò “ûÛ}}NzP|ªNã€Ç.Oám§¿¯OQÍ)àqsÞ {ïÿ�ºyžJklÿ�ÈóX,®¡šíã“ÈXÜbp@Hà+¼Ô-bæØÃ4SÖ-›Ùpeìzר¿‚Õ7çS¸;wç\‡îã8çž¼zö¥o*–S¸ùK.N˸÷ôýxªúž/~E÷ÿ�Á#ûGk*ŽÞËÈó½. Øf·¥âÜ,©)?ÛúûTooqý½}8IcŠHÖ0Ù#9ëõ¯H ]ØþÓŸ;‚ÿ�È2Oîîþ÷§ëÇZÁJå�Ôî>b gK}ᑞxéÏ¥GÔ1|Íò-|שÚxUw£¾Ïµ.·°¼†-! ¹ÞY =p¤霎XA¬4pÞ—Cwž$ Æx8Ûøã­zBx-\!ÇÌŒér¼H玜úw£þµ*öÇ ùËݶúúþœôª– -à¾ÿ�_?2c˜à#¢¨þçÒË·—æyuäZæ•4mmr$d@É!VÃJã·ä*ËM­™UfŽäH2Ýce·p?Zôƒàµ�“©Üq“Æ—'fÛëëúsÒ†ðZ¦üêw.üãKýÂïïǯj>¥Šµ¹ßÿ�_ÚXßÚ=­³óòó<êóí/¦Y©u1 Œä›æÉ±œÖØé]Sø%¾u)ò»²F—!û£'¿¿´¿ð„¨b?´î2?ä'÷wzú~¼u¬§–â¤­Ëø£xg(¶ùßN§êr”WV¾ VeSŸ,Ê£:dƒï.áü^ƒŸCŠ॓f5;¿f3¥È>öqžxéϧzìœWòþ(×ûsü߃9Nõ«áoù´oúîßú)ëU|¬NãæUa.A÷›hïê9ôô«šO†bÒõ›=Iﮥ[V2yk¦È¥ºÇŒä÷lý9é[a²ÜM:Ñœ–‰÷G638ÂUÃΖ­>ŒôÊÆÔ>'ÑÎÜâ9ùÇN¾8üÇãS¶·l‰†óåßœZÈ~é�ã~={U9¦¾%ÓdŠ ¶À.Ýá*Ât%zb3ŽõôçÆÔQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�%Q@[ãMSQ·ñmÄ_ÝCÁ Ì »'°¿¶uoú ßÿ�àCÿ�iøçþGK¯ú÷‡ÿ�f®~© ™âkGR1›JýÙwûgVÿ� ­ÿ�þ?øÑý³«ÐVÿ�ÿ�üj•ìp}sÿ�?ÞË¿Û:·ýoÿ�ð!ÿ�Æí[þ‚·ÿ�øÿ�ãT¨¢ÁõÌGüü{.ÿ�lêßô¿ÿ�À‡ÿ�?¶uoú ßÿ�àCÿ�R¢‹×1óñýì»ý³«ÐVÿ�ÿ�ühþÙÕ¿è+ÿ�þ5JŠ,\ÄÏÇ÷²ïöέÿ�A[ÿ�üñ£ûgVÿ� ­ÿ�þ?øÕ*(°}sÿ�?ÞË¿Û:·ýoÿ�ð!ÿ�Æí[þ‚·ÿ�øÿ�ãT¨¢ÁõÌGüü{.ÿ�lêÙÿ�­ÿ�þ?øÔrëúŒ8óu«ÄÏM×L3úÕnõ Ò·ù{Ü#ÀÉäv¢ÅG]»:’ûÙv_Nq¹w!Æ~[¶<zõ©¿¶uoú ßÿ�àCÿ�q©k…ìâ·ŠX¯cØ´ Ár7~§êQjñ´‰`n\")ÙÔî;²AéÛ×4Ž®jÎVg»ZÉôêuâ[ȃùšåÚùd+îºa‚zµ7öΪæ+ÿ�þ5ÆßÛê7VúœMί,FÝHt`¶?²´Íó«%ÈO0Þ2»6zyÏá@9V庬ïþ/%þÕlêßô¿ÿ�À‡ÿ�³«ÐVÿ�ÿ�ükžÑ!»[_2úYÚrXŒ“Ž�ô­AL橉ÄBN>Ñ»y²éÖuoú ßÿ�àCÿ�Û:·ýoÿ�ð!ÿ�Æ©(±\ÄÏÇ÷²ïöέŸù ßÿ�àCÿ�Û:·ýoÿ�ð!ÿ�Æ©w¢‹×1óñýìº5[þ‚·ÿ�øÿ�ãAÖuoú ßÿ�àCÿ�R,\ÄÏÇ÷²ïöέÿ�A[ÿ�üñ£ûgVÏü…oÿ�ð!ÿ�Æ©QÞ‹×1óñýì»ý³«ÐVÿ�ÿ�ühþÙÕ¿è+ÿ�þ5JŠ,\ÄÏÇ÷²ïöέÿ�A[ÿ�üñ£ûgVÿ� ­ÿ�þ?øÕ*(°}sÿ�?ÞË¿Û:¶ä+ÿ�þ5§á½[S—ÅzTRê7’E$Ì®32°òÜò¸Ï÷­O Èá£×Ã觤uà1U劦¥6Õ×V{M%TŸ~-%PEPKIE�QE�QE�-%PEPKIE�QE�-%PÒQE�´”PEPEPÒQE�QE�´”PEPEPÒQE�QE�´”PKIE�-Q@Q@Q@Q@Q@ E-ÇkþmoZ“Q]DA¾4Cƒ~6çœîµ›ÿ� Ê_ú /þÿ�öuètS¹ÃW-ÂÕ›œávýO<ÿ�…g/ýÿ�û:?áYKÿ�A…ÿ�À_þνŠ.Ìÿ�²0_óí~?æyçü+)è0¿ø ÿ�ÙÑÿ� Î_ú /þÿ�öuètQvÙ/ùö¿ó<óþ”¿ô_üÿ�ìèÿ�…e/ýÿ�û:ô:(»ìŒüû_ùžyÿ� Î_ú /þÿ�öt²—þƒ ÿ�€¿ýz]‡öF þ}¯ÇüÏ<ÿ�…g/ýÿ�û:?áYKÿ�A…ÿ�À_þνŠ.Ãû#ÿ�>×ãþgž²—þƒ ÿ�€¿ýð¬åÿ� Âÿ�à/ÿ�g^‡Eaý‘‚ÿ�Ÿkñÿ�3Ï?áYKÿ�A…ÿ�À_þÎøVrÿ�Ðaðÿ�³¯C¢‹°þÈÁϵøÿ�™çŸð¬¥ÿ� Âÿ�à/ÿ�gGü+)è0¿ø ÿ�ÙסÑEØd`¿çÚüÌóÏøVrÿ�Ðaðÿ�³£þ”¿ô_üÿ�ìëÐè¢ì?²0_óí~?æyçü+9è0¿ø ÿ�ÙÑÿ� Ê_ú /þÿ�öuètQvÙ/ùö¿ó<óþ”¿ô_üÿ�ìèÿ�…g/ýÿ�û:ô:(»ìŒüû_ùžyÿ� Ê_ú /þÿ�öt³—þƒ ÿ�€¿ýz]‡öF þ}¯ÇüÏ<ÿ�…e/ýÿ�û:?áYKÿ�A…ÿ�À_þνŠ.Ãû#ÿ�>×ãþgž³—þƒ ÿ�€¿ýð¬¥ÿ� Âÿ�à/ÿ�g^‡Eaý‘‚ÿ�Ÿkñÿ�3Ï?áYËÿ�A…ÿ�À_þÎøVRÿ�Ðaðÿ�³¯C¢‹°þÈÁϵøÿ�™çŸð¬¥ÿ� Âÿ�à/ÿ�gGü+9è0¿ø ÿ�ÙסÑEØd`¿çÚüÌóÏøVRÿ�Ðaðÿ�³«šOÃ÷Óu›=AµA(¶rþX·Û»*Ë×qþõvôQréå˜JrSŒ,ר”RÑHïŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(�¢Š(ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Utilsaz2.jpg�������������������������������������������0000664�0000000�0000000�00000023755�15030617045�0023325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ó"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€*Ýi¶7Ì­wempÊ0¦X•ÈÙöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…h*ª(UT ��´PEPEPEPEPEPEPEPEPEPEPEP7 Oµr–ß4‹‹t“çRG*HÈ=ÇZêÏC_?·ü}Þ×Ôßú dÓüY¦j7‹k Ÿ1` ^ƒ¯zݯ.-n§¿µ–ÊIá¹€4‘Í –(~^ u£ÿ�×^«à¯YN›ªEöMZ "nŽÎ™ê¦€;j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ô5óùÿ�»Ïúú—ÿ�C5ôèkçóÿ�wŸõõ/þ†hHæ–ùR:g®Ö#5³á™å›Ä–^l®øcÌN8¬:Ùð¯üŒ–ïJ�öz(¦ù±ù¢-ëæÜ<ã×”�ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ç¦ð„n&y§ðÖ•,®rÎöˆKRH®†Š�æ¿á^x3þ…mÿ��Óü*Å—‚¼/¦ÝÇwcáý2Úæ3”–dV^Ü+vŠ�+\ð¶âš…¦na¹º…ÌSÅþìŠC¦q[4Pö/ø› ؼEd?åÞüˆn”z,Ê69ÿ�yGûÕkOñΓuxš}øŸGÔÛ¥ž¤žS?û÷ºMtÕWQÓ,5{7´Ôlà»·½ñ‡Sø�µEqÿ�ð‡ê:)ßáMr[H‡?Ù×ù¹µ>Ë“¾?ø cÚãYô‚#ñn>”nƒ7mï½Fäÿ�¨úÐaEAiyk¨Z¥ÕÄWò ¤°¸uaìG=�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�y&‰âDÓ¢ƒÃú‡‡l®oõÛøn¥•¶D¯rñ3t8Ú±ªäã1NˆZË$Z…­îŒ«}£Ø\GÞõ‚ÚIQ+³«±B·^0Jà–ô¨õÝ"mQô¸µ[ÔS;­á «Ž¹Lä~U~€<Ó^ñÞ¹¦išaŽM ^\ÙÉ7˜¢I⸕]UR1¹+g"C•¸ùª=Oâ·¦M®É=χ#·Óm¥Ù *ÜÉ*¦QÊghŽFÀ_›øÔn'ƒÚkz…çÛdÕom#X|¹b£ò''z6ÓÏ,¥OžW´ñWƒtý2Þ oh±Y@«o5¶¨U�.Ku—㉴»ŸØ\k:eÕ¤º•„‹;ªˆ$ŒÜÆI™†<¢Ù9 ®ãÒ©Xßèz^¥¨ßøbâÖ :G»’-d——Ê(…éæoØGs]Âêúké§R]BѬî7Be1ë¿8ÇãNÓõ; ZÔ]i·Ö×–ä•ÛJ²&GQ•$f€<æßÇ·rϧ^]kZU´ÓR[„ò‰F–PDØ»‰�Éù7`Á—±ðv¾Þ"ÐEÔÒÚ½ÔsÍ ÂÛ…ùdeVÛ¹¶î@®O $`Öý�QE�R ŒƒÔZ(–¼ð›ö—½Ñ&¸ÐoÜîi´æŽÛˆåñ÷¨?µ¼Y |º¾”šÕšñöÝ%vÌ«[±çþ�Çé]…“¢øŸFñ 9Ó5§’?õœ¬±û26ZÕ‹­xSE×Ý%¾²_µGþªî1OõY†ž+ iþ1ðÿ�:}ü^!±^–Ú‹®Tz,Ê6·ü {u ÆŠå­<£®­çhwÁKmM|­ØêQòQÇ_ºMméƯi±j:]ÜWV’Œ¤‘ž>„uØò(õQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ¥ì‹©2èº-ûÊd»™¢¿±x’Úb‹Ç3( ²I€[!óò…Ågé¯âyäЮucXºDÕU§Û¢}Ä ÆÊC@û¾�ÉÜH ¾E�bê/x>ãípßj6ÒZš? ­ÄȈù© A?(�çŒ ã[Rd×4‹“¥ëYZß,†ù´iÖg_²\ÆCƱî;ZHÀm øÚMze篳&µ©K¢ê–ÚEôÖ ‚Ѽó4lÌnD ùCr|¬G^›Â×ÜÙ]Ë%œ)ºo.Ym»Ü®ÕýëF@*IÈä íÎ� Vå�QE�QE�QE�QE�QE“â_Yx«@¹ÑïÚD·¸�‹huÁÎT° Ý;šâ¼-ð¢çÁ“\x{Å7Im!ýõåºË£ßi\7ûCùq^—E�¹¬ýjúm;Móí£ŽIšhaE‘Š®d•cÉ Æìþ¡Y%ÿ�\?ö²ÿ�Ò˜¨»üMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ³E�coñ7üûé÷þOþ"þ&ÿ�Ÿ}#þÿ�Éÿ�ÄVÍ¿Äßóï¤ßù?øŠ7ø›þ}ôûÿ�'ÿ�[4P6ÿ�Ͼ‘ÿ�äÿ�â(ßâoù÷Ò?ïüŸüElÑ@ÛüMÿ�>úGýÿ�“ÿ�ˆ£‰¿çßHÿ�¿òñ³E�PÑ/äÕ4[KébX¤š0̈ۀ>ǯÖ7„¿äTÓëˆþf¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢¸ø¿PÑüI%¾ß(@’ Ô’ojƸøŸ¨éöþ|Öë4jÃxAómÏ8�rqÚ€=^ŠÎÑu«-{L†þÂt– Wr²šÑ Š( Š( Š( Š( Š( Š( Š( Š+„Ò>'éÚÖ—omn9—!d›k)ŽÄ@ÝÉÿ�Âsoÿ�>éÿ�ÿ�úÔ[°F>³ð ²Šä¿á<µÿ�žQà@ÿ� Ùѵ•ÕÒVX‚ A¸çØzP¥Q@Q@Q@Q@Q@Íõ¥˜ÍÕÔYd üëëÇ^²ÿ�i»öÈË~@æ€: +‘ÿ�…áPmõ9.³÷E­œódûlC@ñü2‚m<5â{‘Œ‚º[FŽÆB´×Q^oâ¿x² _]éÔí$AK›§€”ù‡ü²WflŒŽªþñÅ-cÊ“ZÐ4Ëk#ɖ༰ö@Xçê P¨VG‰äý„,¿ô¦*׬ÿ�È.ûYéLT¯EPEsÞ(Õot«Íí"¹¸[‹÷‚k[qé—ìÓ8�¹�a‘Nw†±õ‹Û-:]Úý¢žóN݈ãò¡Yä…¼·ÜÛ·4Rº§ב@ÍÁè^#Õo54ŸP‹Q†½ZæÆÞÜý›ÊŸû¹|þäîË»r¹Í»ˆ–—­jF‹«Ã ÂÚH³J°íXî_d.q)8f`F2@ÐcEsº‡ŒôÝ*Jâú+˜-4Û¤µº¸eRˆÌˆÊxbÅH•N§§Z†OAléæªÚO)ÈŠd‹3+Ê‘R$ �òÆ$0Ü8 ¢ŠÅÐõË^ÿ�X¶›MžÌi÷)´­ߺ“+FñžØ+‚N@Ú  o È©¦ÿ�×üÍlÖ7„¿äTÓëˆþf—W>$ÿ�b¦”ÐíùþÚòÝžÛAÆ(bŠå÷xóþxøoþþÏÿ�ÄѻǟóÇÃ÷öþ&€:Š+—ÝãÏùãá¿ûû?ÿ�FïÏ ÿ�ßÙÿ�øš�ê(®_w?ç†ÿ�ïìÿ�üM¼yÿ�<|7ÿ�gÿ�âh¨¢¹}Þ<ÿ�ž>ÿ�¿³ÿ�ñ4nñçüñðßýýŸÿ�‰ ¢ŠóÏÉñ xVøØE¥}«jùÙï)Ÿ;‡Ý ¸é×=³U</Ų##ƒH6ÝXܶÙÈöò²¿˜ N¢ŽÜÑ@Cãÿ�ùäÿ�¯8¿ô'®m¡´hÒÔH¬ÌA8�ç ®“Çÿ�ò;Éÿ�^qèO\í�]Ñ'›ÂºÏÚô‹äšÊá³udèÈ2OßN QÀ=~¾Ýk7ÚmaŸnß1cÓ"¼>úýE{ž™ÿ� «Oúâ¿Ê€-ÑE�QE�QE�QE�QE�QE�QE�WÊþfOÀÊJ°Y àƒ½«êŠù[Âßò!Cþì¿úP`—÷eý¢NŸÞ¨¬üJÖ×wšêùÚ,Ò#ïÚI‚Ù9ëØõëQ§Ü_ «0=Œp´si°Ü$»I$ƒvF0@`1j�›RÓeÓg Ì$…Æè¦_»"úŠô_Ç„¿îGÿ�³WœÂÂ-KHK¥¤s†râ,ƒò©<ãØ“^à/øð—ýÈÿ�öj�ëÖ4gv Š fc€©¬¯xJËþ><M¤!þïÛ#-ùšÞtIchäEt`U•†A¨"©[hšM‘ÓK²ƒ<«t\wì(þw„]A·ÔäºÏݶsÍ“í± ÇðÊ ´ð׉îF2 émn; ×]E�rÅ^#¸æÏÀz–ÎÍwyoÓìJ¥ãë’DÑlÇcuª<™ü/ë]}È›oˆWÔ¼9f½ÌVsLÃþú‘GOj?áñtªÇޤOï}—K‚<mûñ]uÈÍ ?kñ‡‰ç$s¶ña;yh¸üéÃOIÍàÔ¯Ÿ»]ê—g×øý+¯¢€9‹‡> ¶bÉá-˜’I–Ýd9ÿ�f¶m´M*ȃk¦Y@GCº®;özŠ�(¢Š�(¢Š�+#Ä¿ò ‡þÂ_úSkÖG‰äý„,¿ô¦*�×¢Š(3UÐ4ýjk9¯VàÉfÌðn¥‡c2í'äa“´‘“œqÔÕ8¼ Á¥.™ ¬ñÚ)‰‚%äÊwDTÆwݕؘ9ÎG@oÑ@àð.‚±ÃÇ~« ËÝÇNä•ó½ó3ÎæÏo™¿¼sü?ðâ@![kÅ`†ÝUu‘µ"2 ?yÆÆåHädã©®žŠ�å´ß Ìúž¾úÕ¥¤¶w·‰=¼ks$¡•aH‡˜Œ¡sˆÕ¿‹–ëò‚d“À>š†K{ÆUddoíɰîUVó2ª \ªœd:Z(¥¶™iiy{:OzÊóŸ1Š»*„i;AÚª2�ÎzUº(  o È©¦ÿ�×üÍlÖ7„¿äTÓëˆþf¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Ç~$}º™`Ñ5{èžÒ1æYY<ª-Á c<ô®SíZŸý ž&ÿ�Á\Ÿá_FÑ@:-Ö¦Ið§‰qŸúÉþïúQݤY±WL‡k¡V<ƒìjå�QE�QE�QE�QE�QE�QE�QE�WÊÞÿ�‘ ÷eÿ�ÐÚ¾©¯´iV>Nº»òn•\1;%‰À÷ í>âý:¸aâà�ðYqÿ�PùÆøKÿ�ê`²ÿ�Á|¿ã@‡üƒfÿ�®‹üzG€¿ãÂ_÷#ÿ�Ù«Á4ÿ�ØÅ ÐßjÖó#•e1ZJ…HÏ®sÖ½»á~¯a¬èóÜi÷ 4k±Œ‚¬7pAäPwEPEPEPEPEPEPEKUÕôýO’ÿ�S»ŠÖÖ?½$­ô§Ørh{»»{ 9®îæHmáC$’9¢’I®×âÖ‡­x‚-ÃV÷ZÅ㓺HÓË‚5y™Û¨Sžƒ¨©dþÞñìMIô Ê»Yq{x‡¨�ÿ�©Cê~b; Ö‚ü¢xÞî=*72\Ê^I¥9}¹;S?ÝQùòh©¬írÊâÿ�Lòm!:OÉæ’ùr¤˜8ç¸ükFŠ�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(‰¿çßHÿ�¿òñoñ7üûé÷þOþ"¶h  mþ&ÿ�Ÿ}#þÿ�Éÿ�ÄQ¿Äßóï¤ßù?øŠÙ¢€1·ø›þ}ôûÿ�'ÿ�Fÿ�Ͼ‘ÿ�äÿ�â+fŠ�Æßâoù÷Ò?ïüŸüEüMÿ�>úGýÿ�“ÿ�ˆ­š(?C°—LÑ,ì¦dyaŒ+²gi>Ù­ ( Š( Š( Š( Š( Š( Š( Sį«Å¨}¢b};KŠ-4C*¤‰c8u,nÜÆ>bÄ UUM~ïPñ,¶Þ'šßû>÷Ë·‚{x ¸Co ¸r>3# ï�uﳨøGFÕu /o`žI%UIP]Ê‘J«Ð<jÁsü@ÔSø#Aº»º¸¸·º”ÝKç\D÷ó˜e|ËE¿aáTcn0�è(ÇSÖ57W¸Ô®tí:ô[IºÁÂC¢î†V+æ,…Ë�rÜÖð†Š5C¨yŒÆu¸òÍÔ¦1qµüÞ^FnAë[”�QE�QE�QE�QE�QE�QE�W=ãnëAÒa»¶{x•®9§¸‰¥HP«Û•›æ ¼7<] s¾-:/٬Ư¯G¢¼s™mn ÌP¶ðŒ·Ì[å‘?{é@Yjšì¶6þ]´¾ž·W˜Ì«€Š¤¸%ç¾Ïzå¢ñ•£Úhk.™s^i0êw³Å§IqºÈ¼�±‚FX7,@NI®‹CÓt“¢K‡õvh$Ž(#»µš9ŒKjŠªÄ2ðy–'¿ ¶ð\6Z}­–±ªZ½¥ªY}¢&‹ÌšÎÄ|ÆWåÉÃ( 2yæ€f]@Þ*=9í¡‚ÓÚ™ƒ;äíB7,Æ@Îþ¼V_ÛõIüµgg¡Ë4bFx¾Îغ+#"¢ æ'lq v‘Á5ÐÙøn /CV•yua¾ä–-äQžyˆË€ (È' 9Ï5“ii¤_I› øÆX§²óhln-¦‘Ü³É ts¸³xå­�^ñDðhzDwñYÚ·–±JØÈLrN‘¶Ð¼îÃ’:ò:£?t;[«Ë5vŠÞÎææhÉã—0˜Ã+!bä2ôpÙ�éÜøGI–ÆæÞÚÝ,f¹–+‰®í"&’X¤$ŒÅHv3óœŸZÇÔü¤AÖ¡ªë×±C-¥Åµô÷CL³ª#³±@â8€Û´-F:‚¥­êºšÍáåÒ%¶…5;£ ›ë9•|‰&fô*؈‚‘»¶0c»ñî‰og©ÏÜÍ&Ÿó¼bÒTÞ!m’fPk`·98 ¿Ø¾%·±¸³ñ˜tW7 ueslÿ�7–ÈZ_‘”|¬ý˜ú 0|=³dš9µVx¦‚öÝãv„·m¾o»9݆ñN(õÏŽ¼5g«YéWz¢[ßÝÄ%Š ãt`¤dnʇٰ}ª»|Gð¬v·WRê2ÅokK$²ÙN‹µÎ©d÷`ãnr# T×~’#u{i5Ì–àKlÒD‘ÞÈ‹„2/å'�¸R:©W7áßÞ²í->Ž#·@×1Kù^YxÄaZQ´Œÿ�tdä°ÒüS£krDšmÓ\ù°¤êÑÁ&ß-·í%¶àdÆã’9R:ñ[‰¦øsû;\¹ÕN­¨ÝKqo»Çpc)„fe#jÎ^C×9ÀP6è�¢±|Kâk Y[]ê¬3Ü­°|à+0$è8Æ}ý*ü'¢ÿ�ßÕ ¢Šåÿ�á8Óýþþ­ðœiþ‹ÿ�V€:Š+˜_X;…U˜à*òiu[=kÄik–¨4½&TÝs$�ý©Î~â1á?‹–ôÅ�7YñŠ[j £hv¬k˜ù­¡`#·ÞšNˆ=¾ñì9¨ô¯;êI­øžíu]]èT)Ö~ÐÆzöÏÌ}«sFÐôßéëc¥ÚGm�%ˆ^K±êÌÇ–'ÔóZ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�W1âË¡iªxfá­ofŽ BIek[9n iöYÓ$F¬GÍ"ÇØã§¢€<òòyWº×t/VÓà’ÔZÍ<ZyY®%iP¬žS#6#Q ,ÑŸõ*¤—ˆ#“KÔµ¯3Ãk©Û˾œXÈë2“Ê´cx (%�ÉVôê(•ðŽ£«Ma« L_\=µÉû+ÜÛ^hŒHÃþYÆ Þ]xPF0G®­åݶ—:øgGÔ Úi¬-d¿Ó)mréû”ÎùA`yŒÇpǤÑ@sl|@m¼9q}¬j÷Ë®L÷èÆÕÞ‚@ífÚj–Ú£ž 0í#½Š×A[¹žþê5,Ïfæy;s lûJÒ¢€<wM]Zß©=­¦´o¬<*Ö‘³é²C-½ÖضÅØPYsœ0]~c[ú׈õ„ñžÀë˧Ç„«nš,Œ’‡œ‹€ÄÂ\ˆ£ms×W¡Ñ@[©ø›Ä‘k;íˆFŸ<¸dþÆgh6ܬ3ƒ LÀ’ùÚ0Aùk¥Ô§×lu½:ÖÞêææÏR‰mÄ­Aí¦_¤o”}èÃðF «­ªi¥YÇ«Kª,möÉ#³™€£ÑIÚ¾ä�NzPÊ(¢€<»ã×üˆVŸöƒù5q‚î{]FÜC!Pêᆧc]ŸÇ¯ù­?ì)òjágÿ�§Ñÿ�  )õ[Õ·•–U |µàãéVt똼Qlb0¥¦¿oi-Ç r?ÏÖ³™UУgk uÅOpšl© CiqmsnÛ ¹†ëçŒûeHÁÇ ŒPì”®§n¬a2‚äŠöþ@ö¿îW‘Íq%Ö±cq6Ó,žQvU ¸ç®+×4oùÚÿ�¹@¨¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�òï_ò!ZØRäÕÂÏÿ�!O£ÿ�!]×Ç®<jOA©ÂIô�>My6§â{&’ tíFÀÉìý¡œ uM�uTWÿ� ußüÿ�h?÷ÜßüMð—]ÿ�Ïöƒÿ�}Íÿ�ÄУ¯ü„tï¤_νƒFÿ�=¯û•óÖ™ã=*iôã{¨YÇ:2#ùnÅ8n¹`01ëÒ¾„Ñäkþå�_¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢¹ýGPÕbñ~™§ZÍf–3ZOu8’Ùä”ùO•B‘0þ½óÅY>!hGLû}«^\Ä$µR©e8b“¾ÈÝT¦YOÍ‚ äŒp(¢½Óìµ(D7Ö]DpIã úàŽ¼š¡ÿ�§‡?è¥àáYÑüEðœ÷ÖðëË=“ˆæŠ(Ûqm  ™xÂgšdŸ¼# Vr\jßg’´0 í¥ˆ³+mnA�7ŽAàЧü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþj×V³¼¿º²¥ií_Ë›08TmªØÜFÜíu8s\Œ~!ñ=¶‡y¯Ý¾“saeqt—6ðÚÉ ¢(&xÙÕÌŽ팶ݣÓ4ÒÂ)áÏú�i_øøVœCmAIH6¤q¨UQè�éX—þ/Ó,¬5»•7É£Âe¹„[È­›r£r’Œ7 ¯ÊyàÕËOi׺ӢyÖìÀ.DSZË)òäåÔ é•ꥀ PQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~"Ón5}æÆÚeŠY6_;\+†(Øçk�Tã³ãbð>¢º¾ŸpšFm§%ÚËq¦C;˜cQ±³ ò@fo41Aû”’Xz5�QE�QE�QE‹©xxêÕ®«¯¨YOm–è¶â…\©l‡ŽIDïü#ß96ß--mºë:³"ÛZ[DXØÖÖO21%[=r'#¥Xñ]«_\[¢_Ü"A ²Mik~Ö’ºœbEu#%6·ÊÄ)ÝÉàUxÊïY¹ŽßNÒdŸIyvúµÍôjg•Sv/õƒ#œàžøÇ4·á­tHìô÷Õu u¹FŽÙ%· h·æ/1TT Í Á ¾ð}ÔñËs{}c2D2!–hïÛ;a1¤mÈAùþñ95±á SRÖ|1¥jZ„ѽ݌3–†bÙf<ãiêpI3bXx~ñ½å§ö®¶éiecu}^áËq¼²—ÚCÐ#èh¤Ò´A¥j­Ø¿»¹:•À¸xçòöÄÁB�›PmT^Iûƒ¹$äÁàhcì×:Þ­ybn$¹k9šÝä2¶ï.5fØ¥±Ûâ³¢ñÞ¹wey{iá%¬`ÉjÍ©Fê%m®Dj•†GÊG¶AÀ7´ßëúæ…–PZj7R*^Y64AH!�' Œó7?(Ü"øÓþ&â]ORukW´º´G1øÁWÌp 'ƒÎp1=Ÿ„’Ó_MeµNâéQ£ýù„«#ܧƒ‚cFàŒÆ ôTPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPv¥ hÚÌ‘Iªi67Ï"6º·IJg®7Ž‚¥IÓaÔP‹O´K×@r°¨‘”t±’8UÊ(¥–•§i£¶£hOÜB©òä¶82Ì~¬}i‹¢éI«>¬ºe’êN6µàDÌ0 ãqà× «ÔP´M& ‰§‡K²Ži¤Ë"[ i†bIœžiÑèúdOnñé¶höìí, Lÿ�x¯)=ñÖ®Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ�������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasaz.jpg�������������������������������������������0000664�0000000�0000000�00000036670�15030617045�0023365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��å"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3u=\i×Öéesw=Æò‘Û˜Áq’K²Žã½Aý·{ÿ�BÞ«ÿ�-øõ3Sÿ�‘§Fÿ�®W?É+V€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¢€3¶ïè[Õïå¯ÿ�£ûn÷þ…½WþþZÿ�ñêÒ¯8ñLj>$i¾hðÿ�†-'¶.c˜ÜIQÊAöÃPg&¿wO#øsU €±>e·Aÿ�m«VÎé/lmîã #ž5‘Cu†F}ù¯+ð!]ø9µ %äî“ .'½[YÎØ|¿—޼žõ·£kž6M OX¼g$bÚ0Žu ¥†Ñƒ+¥�wôWý½ã¯úì¿ðx¿üj¤ƒ[ñ«Î‹7ƒ,∜3iX¨õÇ•Í�u´UmB›:æ;“krñ²Å8PÞ[ã†Ãb+‡ÐüWªÜøN=Jíf{ë]šmͳŒI|ÓI-°í�•9�Œ9à•Å�z çúG‹µ{-/LMRÝoe—PžÎâå®Q]H¾6Ë„HÀ|n-„÷ T’xÛWÓü5u«^iVs/oc";Ò§Ê·ys€S%ñ` ‚q*3€òŠå<is®ÛÏ ¦ƒ½ÅÅóDðÍ´s²…bAeɈ.T‚7ÏÏÚx÷R·Ó5Ýb[Y® ¶¿xܑͥÀö‹ªM$kµ3#2Ô¹,Z€=.Šã§ñ†ªšäÚl:-›íÔ[OŽGÔJî³}¥X(íR™®¯Z¯¥|HM_\Ó´ø4k£Õ­µÄ³ª»‹s<FD BmÛÀRÅÉR ¹¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Sÿ�‘§Fÿ�®W?É+V²µ?ùtoúåsü’µh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�® ÏÄ3ǧé> ¾×§ò¯Þ]2;4tÜ!‘ÌHÊ»•“aÉf9ØG®ö¨G¡ijO©G¥X¥ûçuÒÛ •³×/Œóõ GNøƒ¨jÖšt¶¾É}p`Œ]\I`iÕÕš²áI�Ž  Q½ø´b¶3Ùø~{”M6+ùŽ÷ ™ ”)e” .Ü’ b�dŽ×þo’/ì/ËÚDO±Ç…fᘠpNOzGð§‡$Ž8äÐ4§Ž(ÌQ«YÆB!9*8$â€3õjZUÍ„wšE°Žæt‰ž;íÅUæH••vÜÈ¥³€’@+¤êš—ü!÷׸:­õ­Åôq£‰§\Jˆ¹EÀ%QG É­y´=&âÞÞÞ}.ÊXm”$½º2Ä£ •xÝ•-Ž›c¥ÀÐiöVö³—1Ûı©cÔàÉõ Ä>6Ônüöý #o=ÆŸq¨Ãp%_’(Q 6 w>ݸ�ºH|Eu7Š.tS§Â…`–[y~Õ»yÊÈu ògÎB9'23©u¤i—ÖÉmw§ZOkµ"–eQŒ`08¤‹EÒ­îÒî2Î;˜×bL(u]¡pjô�v [þ4ÔaÔ´Ëd:­´OçÁw¼†xd”ÁµJÄÝOÞàn�µvõ™‡t8‡FÓãhèY-PÎIÊàqË1ãûÇÖ´è�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(½ÿ�üƒ®¿ë‹ÿ�#MÐ?ä[Òÿ�ëÒ/ý�S¯ÿ�äuÿ�\_ùnÿ�"Þ—ÿ�^‘è€4h¢Š�*±´’Þ[wµ¡”–’6ŒrNI#¡$ÔôPWü#:’!þÄÓ|°í O²¦±¶1Ô•RO}£Ò¤“@ѦŠh¥Òl9å3Êl„I!aŽX‚FO85£E�T“JÓ¦{G–ÂÕÚÌæÔ´*LcäãåàÆ:R]é:uüOæŸkq¿˜ë4*á›nÍÄÉÛòçÓŠ¹E�b¿ƒü1!bþÒ±%·XÄrqŒŸ—ÓŠµƒ£ZÏm=¾“a Ö±˜­äŽÙ¢Cœª>QÉàzÖ…�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEËø‘µ%ñŠtÈ­$›Ë¹ÊÜÈȸÂwUcúRùÞ0ÿ�Ÿ ÿ�&ÿ�ãUoSÿ�‘§Fÿ�®W?É+V€9ÿ�;Æóã¡àdßüj;Æóã¡àdßüjº (Ÿó¼aÿ�>:þMÿ�ƨó¼aÿ�>:þMÿ�Æ« ¢€9ÿ�;Æóã¡àdßüj;Æóã¡àdßüjº (Ÿó¼aÿ�>:þMÿ�ƨó¼aÿ�>:þMÿ�Æ« ¢€9ÿ�;Æóã¡àdßüj;Æóã¡àdßüjº (Ÿó¼aÿ�>:þMÿ�ƨó¼aÿ�>:þMÿ�Æ« ¢€9ÿ�;Æóã¡àdßüj;Æóã¡àdßüjµµø4».îKyi…ff!U@îI sY-⣠æóCÕ­?ÒmíÏš±™¤òу,„Œà’7(�ó¼aÿ�>:þMÿ�ƨó¼aÿ�>:þMÿ�Æªëø“BŽ)å}kNXíåÌít€G!èŒsÃ{jkMcLÔ.e·²Ôm.g„$PήÈL€r:Ðgãùñпð2oþ5Gãùñпð2oþ5ZwšœV7Úu¬‘JMüÍr(UÄo&œò±·@zUÚ�çüïÏŽ…ÿ�“ñª<ïÏŽ…ÿ�“ñªè( Îñ‡üøè_ø7ÿ�£Îñ‡üøè_ø7ÿ�®‚Š�çüïÏŽ…ÿ�“ñª<ïÏŽ…ÿ�“ñªè( Îñ‡üøè_ø7ÿ�£Îñ‡üøè_ø7ÿ�®‚Š�çüïÏŽ…ÿ�“ñª<ïÏŽ…ÿ�“ñªè( Îñ‡üøè_ø7ÿ�¨.õ/Ø[5Åä>·H $·òª‚N&.ä]=y7Ž| âÿ�ˆÚ¢Csym£è6Ïû˜Ke‘¿ç£ªü¤ú Ü©  kÆÞ!†î}ËIÓ5M@FÞ|67r7Ù—™*ý Éô­=_ñzh:r'‚|Ä[X‚¸Õb†ÑÎâµ4?ÃáoeDñÊa÷̈Œ­ƒó0Åê{ÖÆÿ�"Þ—ÿ�^‘è€0á!ñý¿ùW‡ü*Huÿ�<Ȳø'ÊŒœ3ÿ�jÄÛG®1ÍutP\†‡&©«ØiÚ¼¾$’ßíÑ3I`!ƒlLÈ~D%wCŒî-‡ŒW_Yߨ7Û'¼þȰûU”šo³&ùTðC62Aî �r:_Ž5$Ò¼?ö­9/%¾Ó!˜Î·H,æÚI¿ÕíÚŠÞKį=�‘vËÆ—Óê[\iVFdHn%ûkŸ*G *`§qÊœ>Ìï]»³Æïü#:— ØznÈlKöHñùŽcó7OïZH</áûY`–ßBÓ"’Ý‹BñÚF¦6=J8?J�Ö¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Sÿ�‘§Fÿ�®W?É+V²µ?ùtoúåsü’µh�¢Š(�¢Š(�¢Š(�¢ŠÊ×<K¢øn¦Öu,ÒVÙ•¾ñÆxŸò=hVŠä?áiøþ†K/Í¿ÂøZ~ÿ�¡’Ëóo𠾊ä?áiøþ†K/Í¿ÂøZ~ÿ�¡’Ëóoð ‡WÓSVÓžÑähŽøåŽE)"8tl¸eSjȿеÍOM÷ZÝŸœ·v÷ ñę́2,€móI$²®Nìc j¯ü-?ÐÉeù·øQÿ� OÀßô2Y~mþ¾»û}ÝÕ¾§e—`…[OoÜyÙv”•pvÜ2’6çýæÌ¶6§áy~Ô†mb2†/²Ù[Å–c¹¦s$ª™È9%É õü-?ÐÉeù·øQÿ� OÀßô2Y~mþjþÃWפÑïíÝtw°¹kƒm}j³»1âäÅ6Ð6ÈÇ‚NqÓ–¹øZ~ÿ�¡’Ëóoð£þŸ¿èd²üÛü(¯¢¸ÿ�øZžÿ�¡’Ëóoð¥ÿ�…§àoú,¿6ÿ� �ëè®CþŸ¿èd²üÛü(ÿ�…§àoú,¿6ÿ� �ëè®CþŸ¿èd²üÛü(ÿ�…§àoú,¿6ÿ� �ëè®CþŸ¿èd²üÛü(ÿ�…§àoú,¿6ÿ� �ëè®CþŸ¿èd²üÛü(ÿ�…§àoú,¿6ÿ� �ëè®CþŸ¿èd²üÛü(ÿ�…§àoú,¿6ÿ� �éïÿ�äuÿ�\_ùnÿ�"Þ—ÿ�^‘è¹;ÏŠ>’ÆáÄveš6�e¹8>ÔÝ⇂mô->|Gf’Gm:’rPé@ý›¢kúWˆìšóG½ŽòÙd14‘瀎}ˆüëœ×5ßÛxšïMÓî4øâHm6›4ä¼òKé*„PbÎâ:60Häµ¢¸kÿ�‰6^m@kÑZ óiFPU·ŠV|³€Gï �ÄKqTõj6¾—P¶Š ­XhH†bÐmfdiLªUHÙј‚ù�ô E¢¹ŸëÞ&ý‹kkv×Wm ¶óEXd”ˆØ±FHéXö?”Øjú­Å¼·ze­ÙŽ7³¶ØÐD°G3™·¾.ò¤ T€¤ð�;ê+—›ÆÑŪͧ.‡ªË4wd¥d”Cç…Recù8`àÔ6|?{­iºTRÈ.5"ž-û<ØÌˆ¥wnÉQÔ  €@:ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9oYÝ^øƒEŽÏR›OGp|ØcÉN0êE'ö»ÿ�C–£ÿ�€–¿üj¯jò4èßõÊçù%jÐ9ý®ÿ�Ðå¨ÿ�à%¯ÿ�£û]ÿ�¡ËQÿ�ÀK_þ5]2c"Ã!…å J+¶ÐÍŽ88ø?J�çÿ�°5ßúµüµÿ�ãT`k¿ô9j?ø kÿ�Æ«Óâ%äºƳ>‘eöH4Á¨H¶šƒÏ$[Óti"ù#i#9 ¶ÜdñÍlê~4°³½[+R—WKy´Ñ’ñ…KlU¶•vC,d¨9†Hã þÀ×èrÔð×ÿ�Qý®ÿ�Ðå¨ÿ�à%¯ÿ�¥µñ\W¾2}Þ’$¶–St ŒI¢:` Sƒ å\à‚^Ô¤Òì"š8Ãù·PZ“¿iΕb8 \gãÞ;ø…ªøOÄðhv^(¼½ŸaûK5½¸»‘~XI=‰ã¡æ»]'Àzš^ rëÅ÷së«%ÊÚÀUWv0èv/=±ž¦·t/躒öÒÈI¨LÅ徸>dîÄ’NãÓ9í]�sŸØïýZþZÿ�ñªÏ‡Nñ ž ¼ÓÏŒ/ü¸-`[ìv¹&G•Hÿ�WÓ÷có5ÙÖ5·üŽº§ýƒ¬ÿ�ôeÍ�UþÀ×èrÔð×ÿ�Qý®ÿ�Ðå¨ÿ�à%¯ÿ�®ŽŠ�ç?°5ßúµüµÿ�ãT`k¿ô9j?ø kÿ�Æ«CÄZ¤š‡5Z+e¹k+w¸0´žXuA¸Ø88u¬OÜ^ +û ášáíþ×g~ÓÄŽ¼®˜¯÷~R(÷ö»ÿ�C–£ÿ�€–¿üjì wþ‡-Gÿ�-øÕøÂÎúïJ]4 ›kÛ¦µ’GßÂÂNÆL°eN2‘i|?⸼A¬êvvð¯Ù­#†XnT¿ïÖC ÎÖEÀ3‚¥”‚4�ŸØïýZþZÿ�ñªóŸˆÞ7Ô¼ caНïnå>eÄgµ_*/\ùGæ' ôÔW©Ýê×6šþŸ`Ö*Ö·¬ñ­À›çWTgæ<}Ì)³ÔŽAª:t^}bKA{«Nþd—·x’LöÛžÀÚÍè~ ÕµScâmOÅ·3ê`xía1ÀŒ3„Wålp[j“]/ö»ÿ�C–£ÿ�€–¿üjº:(„ðý¯ˆõhµ›Å÷Èmµ íWm·*€OîúÖÇö»ÿ�C–£ÿ�€–¿üj™à¯øöÖ¿ì5yÿ�£ tÔÎ`k¿ô9j?ø kÿ�ƨþÀ×èrÔð×ÿ�WGX>&×®´#§ {[9…äï IwxmÒ"±<¹$Füb6\zðö»ÿ�C–£ÿ�€–¿üjì wþ‡-Gÿ�-øÕWµñª(¶:½´V+-„ÚƒJ“4±‘ãU*Ûvá 8ÀaÀ#æ%¿¬gŸTbYYAÉ9ó7»I$±ymMèâHŠíÁ$‘Æx  ?°5ßúµüµÿ�ãT`k¿ô9j?ø kÿ�ƪç†5·ñƒ¥%°¶w–hš ìÀåxÏ,ªyÙžTœQiž!kßêZ-ÄÁqisG²ãÌ2Få†HÚ6‘´d Àn^hÄ ¨xkB»Õõê ol…ú%®XöQû¾¤à­yÿ�‚µ/üZ´¼²¾ñ=Ý¥„Q…º†(¢LI8Ö5Â` Œ’sŒ�kÖ<Cá/ÅRÚee¹´¶méi¼¬Lý70± Î:ñÍkÚYÚéö©kgm µ¼c (WèË7…µM?F’ÚÛÅW‘[C*C•ª¨P�¸®—ÃÀ é@ÄYÃ’{ü‚Ÿÿ� ë¯úâÿ�ÈÓtùô¿úô‹ÿ�@£YðéãÄ ®…¹ƒF±³ ¹B2€@=Û˜Œ¯“ךԢ€0&ðf…=ä×ooqö™®~ÔÓ-ìÊâM» R* €¤.�04ø@:kéæÖslþx`o&,DÇ2®íû¶±#8Ï=k¡¢€3§Ðì.¥Óe™&wÓ_}«™>VÚS-ó|çi#æÏSêj½÷…4MFÚêÞâÁ|«©ÞâuŽGÌ‘¢13¤uBTúçÖ¶h qü  Ép× ÿ�œÓƒ ÔîCyž_•¿"NÏ—>•cNðŽ‹¤Ü[Ïcm,/ n›n¥!£@BRØ} àÓ·E�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�aêò4èßõÊçù%j×7â‹ íCÄ:$V´ºd¢;’eŽä$b>0àŠgü#&ÿ�¡î÷ÿ�Ö¿üE�tôÉ‘¥†HÖW‰™J‰‘Ôd‘î®oþÐ÷{ÿ�‚ë_þ"øF<Mÿ�CÝïþ ­øŠ�| ·‡Áóøiµ;ùme¶bw‰’�»Da„`îH'æ<ôÆl¿ t‡ÔfÔòò+¹®#¹’dŽßÌ2£+îÞb,dV*Üô5þÐ÷{ÿ�‚ë_þ"¢“@ñRÇøþìI.v'ö}®æÇ\ F}(ÃøjM>ýu]*i%¹‡íUÄëí,’åÄLãæPï# :÷HÔ¼I¦-¶­)Ò^;˜çO컥Ÿyƒ¡-,u�và‘T?²õí/ìßøY2}¿g™ö_²Zy»½³fqÿ�lj¿è{½ÿ�Áu¯ÿ�@$HшÒ<¬ª‘ÀÜÇÔà“ì�§×1ÿ�lj¿è{½ÿ�Áu¯ÿ�Gü#&ÿ�¡î÷ÿ�Ö¿üE�tõmÿ�#®©ÿ�`ë?ýsTáñ7ýw¿ø.µÿ�â+"Ûþ#oêPÞ O´v—ìÙ`d¸q³IÏûGÐP}EsðŒx›þ‡»ßüZÿ�ñÂ1âoúïð]kÿ�ÄPƵ¥G®h—ºTÓÍ7´2<C„a†p#‘‘Ó½fÞxJFÞÂÝNú²Êò»°…Zä¼mmŒû·dùvœwÈ¡ÿ�„cÄßô=Þÿ�àº×ÿ�ˆ£þÐ÷{ÿ�‚ë_þ"€!Ò¾éš*iÉcuu Ø\ý¥q@žkymmˆnÂ;Œý㸒IÁÛxnçò ë‹XlE­õІ(àˆ¹L2BÌYw‘ÏPy9«&•¬I©I§'ĉZú4=²ÙÚ0ÅvdG4–z^­¨É<v_d¹{wòæX--ÄßÝ`ƒìhF-þ÷TƒWÔ/î,îP6V“G5¾ÐÛ°áWù°7`Œà€WC\Çü#&ÿ�¡î÷ÿ�Ö¿üEðŒx›þ‡»ßüZÿ�ñÓÑ\Çü#&ÿ�¡î÷ÿ�Ö¿üEðŒx›þ‡»ßüZÿ�ñ�¾ ÿ�mkþÃWŸú0×M^kàíÄ76Ú»Eã+»pšÅÜlÆÝ·²ÈAs”àœgJèÿ�áñ7ýw¿ø.µÿ�â(§¬oAþÚ–ÂUÔï¬%±™§‰í<¬—(É“æ#ò»øÓÿ�ðŒx›þ‡»ßüZÿ�ñÂ1âoúïð]kÿ�ÄPš÷‚ôïHŸlžå-–ÎK1kÅc”b~é98ÈÁÇÈ8Á9§§ü<Ó4áp ¼» 2@¥+x‘L±º¬q( “Ó<ƒROáÿ�ÛBÓOñî8×g°µ�dà¯晫iË _|I–ÐNÁ"ûE¤{ØôQ¹O·Z�½o§ëZoi¤Am©[É4·-.¡~`u’YÝBÇnÃnXIÏÌG@*æ™ ‹Á{q}y}t±¼Q½Ó#QÙY‘J¢äeW–ÉùEbÙéz¶£$ñÙ|I’åíßË™`´´su€^±«ðŒx›þ‡»ßüZÿ�ñÓÑ\Çü#&ÿ�¡î÷ÿ�Ö¿üEðŒx›þ‡»ßüZÿ�ñ¿ÿ� ë¯úâÿ�ÈÓtùô¿úô‹ÿ�@ÍÞøgÄ«ap[Ç7¬LJ>Ûžrº/‚¾ÒC6æp‚Äc'`æ€4袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Ìñ°¾ðî¡«¼&e³¦1«`¶Ñœgµ`ÿ�ÂQâßú'·¿ø3µÿ�âêÏÄù&¾#ÿ�°|¿ú ®¢€8kÿ�ø¶ßN¹›þ;¸<¸ü×ÔmX&;ˆ’\W=ð×âoŠ|Vc‹QðœÒÀx:•®#‹êD„﵉ö¯YeWR¬) Œ‚(�*…P��Ôÿ�#^ÿ�\n”u³\¿‰5'ÒüE¢Lšuíñ1ܯ—fŠÌ8NpXqKÿ� Œßô)øÿ�£ÿ�ã”ÓÑ\Çü&3Чâ?üÿ�ŽQÿ� Œßô)øÿ�£ÿ�ã”Ó×'­xoS¼ñ…–±cy䯋rÿ�¤È…9YÜÔH­´îÆÝ Œš—þ¿èSñþGÿ�Ç(ÿ�„ÆoúüGÿ�€Ñÿ�ñÊ�gü"ÓOâ¸õ‡žH"j–ÝeWI%XŒ(Ã(~B3óc#ˆõUÌÂc7ý ~#ÿ�Àhÿ�øåð˜Íÿ�BŸˆÿ�ð?þ9@=ÌÂc7ý ~#ÿ�Àhÿ�øåð˜Íÿ�BŸˆÿ�ð?þ9@=aZÈý«ÿ�Ø.Çÿ�FÝÕ_øLfÿ�¡OÄø ÿ�¬[o̾4Õ&ÿ�„c_%ôë4òż{—\œ‘¿¡ÝÇû¦€=Šæ?á1›þ…?ÿ�à4ürøLfÿ�¡OÄø ÿ� žŠæ?á1›þ…?ÿ�à4ürøLfÿ�¡OÄø ÿ�  PØê±ø’kÔŠÎ… QÜ93±e>k€+*«�wnå†;HÓo ÖµMFñm¢+QC †B2ÿ�1rªFw‚w§ÿ� Œßô)øÿ�£ÿ�ã”Âc7ý ~#ÿ�Àhÿ�øå�tôW1ÿ� Œßô)øÿ�£ÿ�ã”Âc7ý ~#ÿ�Àhÿ�øå�tôW1ÿ� Œßô)øÿ�£ÿ�ã”Âc7ý ~#ÿ�Àhÿ�øå�Eàøò×?ì;ÿ�£šºÊó/ø¦[kM` k³oÖo$ÌVñ¹”§.>aÐ×Mÿ� Œßô)øÿ�£ÿ�ã”ÓÑ\Çü&3Чâ?üÿ�ŽQÿ� Œßô)øÿ�£ÿ�ã”7‹ô;­wO´KG[k¡q囩-„Ÿ#®<ÈÁe ¸`@<¨¬ÝSÂ:†³¢ØZ]꺄e-ìN¤Mˆ‹+22X®@#xdйÿ� Œßô)øÿ�£ÿ�ã”Âc7ý ~#ÿ�Àhÿ�øå�ZÑt«ÛM[Q½»[xÒt†bŠC) ü1vU<‡'!H$¸Öísð˜Íÿ�BŸˆÿ�ð?þ9Gü&3Чâ?üÿ�ŽPOEsð˜Íÿ�BŸˆÿ�ð?þ9Gü&3Чâ?üÿ�ŽPþ¡ÿ� Û¯úâÿ�ÈÕmþE½/þ½"ÿ�Ð`ÞøÂf°¹_øE<D¹‰†M´xúi[¾mÞÒ›f΃Ô|‚€4¨¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�åþ$É5ñýƒåÿ�ÐMtÚ_ó÷oÿ�ø×?ñ#þI¯ˆÿ�ì/þ‚hÿ�…oà¯úô¯üZ�Û¸Õ´ûkig’ò.$.ØpN�Éâ³ü=ã/øª-ú.«otØÉˆ6Ùê‡ ?*ϸøgàÙ­¥Š?é°»¡U•-×r8aî:Ö…~øK²Es›__Æw ›Ã¼©õUû£ëŒûÐIÿ�#^ÿ�\n”u³X×ÿ�ò5èßõÆçùG[4�QE�VMÌÚ¼~ ³Žfúl›„èca4ci!ÃîÛ‚Ø]»sÎsÁ­T%Ðô™õ4ÔåÒì¤Ôv­ÓÛ¡•FÀ|g$uîh”zŽ¡ŒŽ—q%«ZMf÷0*ÂË Øè§-¸†?<.21»’7*¥¦•§iòË-•…­´’…<0ª�`dέÐEPXVŸò?jÿ�ö ±ÿ�Ñ·u»XVŸò?jÿ�ö ±ÿ�Ñ·t»EPEP]¾¥4¾)Ôt¶Xü›k;k„`íÒ<êÀóŒ~éHàu5“¨^Ï­j–ÒÛ-ÄrG²7/·s—;‰Ø…1Ž„jçö.•ý£.¡ý™eöÙvù—>Bù·rØÉÆÕǦ¥Ie¦Øi«"ØY[Z¬®dA v=Xàr}èÕQ@Q@Ÿ€ãË\ÿ�°íÿ�þŽjë+“ðüykŸö¿ÿ�ÑÍ]e�QE�dk3k0ÜY,Ù4m*¬ÑOd-ó2°`jóÈ9éÇ«£jZµõޝ¯c.£etöÈR'Š2|´uÞ¥Ÿ<1ÈÇC4¯´=#T¸‚ãPÒìn烘d¸·I>sò’ ŽÔŸØ:7özØdØ}‰3¶ßìÉå®záqŽr:�äíüg©I=¢+YΈðGvE»FÒ´·R[ó/–c,Ç.äœ×yT—GÓKIM³f¥mX@¹HÁqòŒzb®ÐEP}CþA·_õÅÿ�‘ªÚü‹z_ýzEÿ�  ³¨È6ëþ¸¿ò5[@ÿ�‘oKÿ�¯H¿ô@4QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�U ilG¹]NÌÞYýí¸¶k‚ã#-A-Î:zò/ ÉâOxvúÓOðÅž¡.k%¤‘Y<q<‘© †ùg9?jñÓ ÙEpz—Š^ÏB[é®áY¥›Î¹·°i\áÓÊIQ¡BÈÂ'*Ú R׋E’{—ÕÒe¹±ó|­/{£´„]ÄŠ#%áHðVLOñ7J�ôÊ+˵»Mj/X]M5ýÌú}ÌÚ\®”³b7±yÌÑÆ?å»)¸/ʹ­v^»½»Ò$kö¾yRvE–ö ȸ!|¸Î2HÉE䣀oÑXzâx©§‹þùôháÚ|ѨC+±lñ·c¯õ¬¯+âOüþøSÿ��î?øí�Yø‘ÿ�$×Äö—ÿ�A5ÔW—xê/ë‡P»ðÓYýŠO9mígY íçi2ÔW§Cæˆ#óÊvå [ã=³@¢Š(Ÿ×ü3mâOM’ö3%­²Í¸,Ïe‚ã'¡ïP½ð×üùÜÿ�à}Çÿ�]=̽ð×üùÜÿ�à}Çÿ�Gü+ß ÏÏþÜñuÓÑ@Çü+ß ÏÏþÜñt½ð×üùÜÿ�à}Çÿ�]=̽ð×üùÜÿ�à}Çÿ�Gü+ß ÏÏþÜñuÓÑ@Çü+ß ÏÏþÜñt½ð×üùÜÿ�à}Çÿ�]=̽ð×üùÜÿ�à}Çÿ�T!øk¢.¿yrö³}ŽKX#‰Eüû„ŠÒ—ÏÏœa£Ç=NýµÌ½ð×üùÜÿ�à}Çÿ�Gü+ß ÏÏþÜñuÓÑ@Çü+ß ÏÏþÜñt½ð×üùÜÿ�à}Çÿ�]=̽ð×üùÜÿ�à}Çÿ�Gü+ß ÏÏþÜñuÓÑ@Çü+ß ÏÏþÜñt½ð×üùÜÿ�à}Çÿ�]=̽ð×üùÜÿ�à}Çÿ�Gü+ß ÏÏþÜñuÓÑ@ðÇI²†ýu i忞h|»éÆ"g%ÃqŒÿ�3Zÿ�ð¯|5ÿ�>w?øqÿ�Å×OE�sð¯|5ÿ�>w?øqÿ�ÅÑÿ� ÷Ã_óçsÿ�÷ü]tôP1ÿ� ÷Ã_óçsÿ�÷ü]ð¯|5ÿ�>w?øqÿ�Å×OE�sð¯|5ÿ�>w?øqÿ�ÅÑÿ� ÷Ã_óçsÿ�÷ü]tôP1ÿ� ÷Ã_óçsÿ�÷ü]ð¯|5ÿ�>w?øqÿ�Å×OE�rwü:öÒ¤v—Ù\ßÜc8ãøëH´k ÂÍñ¾ÞÞ8›<ªÔõéWh Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âGü“_ÿ�Ø>_ý×Q\¿Äù&¾#ÿ�°|¿ú £þ'…ÿ�çþoüŸÿ�ˆ ¢Šän¾$øj I¥ŽîYdHÙ–?²L»ˆ%8Ï­cx;ãG†ü[q‰K›FNÞXË«ö]Aý@ ›]»Õ­õí&-.yüØç2EqtСÀLª>HÉíR}¯ÅŸôÑðo/ÿ�#T—ÿ�ò5èßõÆçùG[4…ö¿ÐEÿ�Á¼¿üGÚüYÿ�@]ÿ�òÿ�ò5nÑ@_kñgýt_üËÿ�ÈÔ}¯ÅŸôÑðo/ÿ�#Víq¬uañ�±þÐ,ùàHmŸÙ¿ï7íð=¾Ô«ö¿ÐEÿ�Á¼¿üGÚüYÿ�@]ÿ�òÿ�ò5VÓ¥yüeq4)ªIlö¤É%ÒOQ>SjF„lĹpXîÀé¨ í~,ÿ� .‹ÿ�ƒyùµø³þ€º/þ åÿ�äjÝ¢€0¾×âÏúè¿ø7—ÿ�‘«&ßRñkx·Q·þÌÒ˜%«ù'U—bn’ànìýNÜ ¼œñÙÖ§üÚ¿ý‚ìômÝ�kñgýt_üËÿ�ÈÔ}¯ÅŸôÑðo/ÿ�#Ví…ö¿ÐEÿ�Á¼¿üGÚüYÿ�@]ÿ�òÿ�ò5nÑ@_kñgýt_üËÿ�ÈÔ}¯ÅŸôÑðo/ÿ�#UH^H¼w<±U­ ±Žs œÀ³M›USòîù£À\Ù$'‡ «ë,Q{VhÊ\_yÈ]òûÑ#“�*ü¸dUw}¹ ý¯ÅŸôÑðo/ÿ�#Qö¿ÐEÿ�Á¼¿ü[´PÚüYÿ�@]ÿ�òÿ�ò5kñgýt_üËÿ�ÈÕ»E�p>Õ|]wmª³Xi·>^«w3격@²±pr«Ð8ì:WCö¿ÐEÿ�Á¼¿üT<ÿ�Zçý‡oÿ�ôsWY@_kñgýt_üËÿ�ÈÔ}¯ÅŸôÑðo/ÿ�#Ví…ö¿ÐEÿ�Á¼¿üGÚüYÿ�@]ÿ�òÿ�ò5/Œæ¹ƒÁZÓØ­Ù½û«l,ÑÞ_4© ´ -ÄsÛ©à¥â››{ÝJÍ®ÚÈí¶lmnƒÄåAÉn ÷Xm'ƒÈàçÚüYÿ�@]ÿ�òÿ�ò5kñgýt_üËÿ�ÈÕ_Ãf6Õµg‚}e¢còu®QÁmÍJ a²>T%FÐxÝ]-�a}¯ÅŸôÑðo/ÿ�#Qö¿ÐEÿ�Á¼¿ü[´P7w{âIJ¿±ôeÄlw.¯.GGú5jèRË?‡ôÙ§mÓIkHwg,PÏ~j}CþA·_õÅÿ�‘ªÚü‹z_ýzEÿ�  �Ñ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(—ø‘ÿ�$×Äö—ÿ�A5ÔW/ñ#þI¯ˆÿ�ì/þ‚k¨ î ŠêÚ[y—|R¡G\‘•#qíYú'†ôoZýŸGÓm¬£Ç>Ra›ýæê߉5¤î±£;°TPK3�=M$RÇ<K,2$‘¸Êº0 b(ž×õM?Iñ&‹>¥kg ŽåD—3,jNŒ±?ü&þÿ�¡£Eÿ�Àø¿øª’ÿ�þF½þ¸Üÿ�(ëf€0¿á7ðŸý /þÅÿ�ÅQÿ� ¿„ÿ�èhÑð>/þ*·h  /øMü'ÿ�CF‹ÿ�ññTÂoá?ú4_ü‹ÿ�Š­ÚÏ—Sò¼Ei¤˜sö›IîD»¾ï”ñ)\c¿œsÚ€)Âoá?ú4_ü‹ÿ�Š£þ ÿ�ÐÑ¢ÿ�à|_üUC¤ø–ãQñ5ö“.œ%°r²ý ³0W R a³U›!¶ž+£  /øMü'ÿ�CF‹ÿ�ññTÂoá?ú4_ü‹ÿ�Š­Ú( þ ÿ�ÐÑ¢ÿ�à|_üUbZøÃà ã}Vsâ= Búuš,†ú-¬Ë%É Ür=Ç­w…iÿ�#ö¯ÿ�`»ýw@ü&þÿ�¡£Eÿ�Àø¿øª?á7ðŸý /þÅÿ�ÅVí…ÿ� ¿„ÿ�èhÑð>/þ*øMü'ÿ�CF‹ÿ�ññU»E�aÂoá?ú4_ü‹ÿ�Š£þ ÿ�ÐÑ¢ÿ�à|_üUX‡Q¿oI§Í¦¢Zy 4WIq¼ðÁvºm É+‚Ù zŠ«áYø¢ fµßÕI)"t)òcs¸�C�H+‘Á84�ïøMü'ÿ�CF‹ÿ�ññTÂoá?ú4_ü‹ÿ�Š­Ú( þ ÿ�ÐÑ¢ÿ�à|_üUð›øOþ†ÿ�âÿ�â«vŠ�ó¯x·Ãv¶šÊÜx‡I„É­^È‚KØ×r4¤« žAƒÞºøMü'ÿ�CF‹ÿ�ññUCÀ?ñ宨vÿ�ÿ�G5u”…ÿ� ¿„ÿ�èhÑð>/þ*øMü'ÿ�CF‹ÿ�ññU»E�aÂoá?ú4_ü‹ÿ�Š£þ ÿ�ÐÑ¢ÿ�à|_üUX×5i´Èí#´´K«ÛÙþÏo “yJÌ#y_k`m»p;Ö>¡ãˆí´];Tµ±7]iϪº¼¾[Gj‹;çUÂñžy¡ÿ� ¿„ÿ�èhÑð>/þ*øMü'ÿ�CF‹ÿ�ññU†|N|Bdf-¶‚ö%ßæ[Í¿Ëcò­û¶ÊóŽ95ÐÐü&þÿ�¡£Eÿ�Àø¿øª?á7ðŸý /þÅÿ�ÅVíÍ_x×§ܪø›F,b`�¿‹$àÿ�µZ~e éL¬ZÎ9lkPÿ�m×ýqäj¶ÿ�"Þ—ÿ�^‘è€4h¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�¡­i6úö‰{¤Ý4‹oy C#D@`¤`àF Æÿ�„2Oú¼Iÿ�iÿ�ÄWQE�q÷þž}:æ(¼Oâ‘âuT–ív1 €äéë\Çï„Z—ƒ¥K«¿ÞnÈf²±b¶ìÚÜ>oÉMz½ÿ�#^ÿ�\n”u³Y:¾6£sism©Oa=°p¯hûƒc ‡R?„U_ì=oþ†Ûßü·ÿ�â( ¢¹ÿ�ì=oþ†Ûßü·ÿ�â(þÃÖÿ�èm½ÿ�ÀKþ"€: Ï›E±ŸZ‡X‘gûl05¼n·2*„c–m9 ã?*ÿ�tc?û[ÿ�¡¶÷ÿ�-ÿ�øŠ?°õ¿úoðßÿ�ˆ  o…ô#P’þÎÞU¹:–’æY�ÞÁŸhv!K0 Ä�XŒœšØ®û[ÿ�¡¶÷ÿ�-ÿ�øŠ?°õ¿úoðßÿ�ˆ ‚Šçÿ�°õ¿úoðßÿ�ˆ£û[ÿ�¡¶÷ÿ�-ÿ�øŠ�è+ ÓþGí_þÁv?ú6î™ý‡­ÿ�ÐÛ{ÿ�€–ÿ�üEVO ê±êsê â»ß>xc…ÏÙmùTgeþ u‘¨©¢¹ÿ�ì=oþ†Ûßü·ÿ�â(þÃÖÿ�èm½ÿ�ÀKþ"€: +ŸþÃÖÿ�èm½ÿ�ÀKþ"ì=oþ†Ûßü·ÿ�â(òèVI©Ë¨,—Þ|„39##ß°tLŽ„Ñ¥hfˆÓ¶Ÿnb3m™]𫪻‰Ú£saW�dàUì=oþ†Ûßü·ÿ�â(þÃÖÿ�èm½ÿ�ÀKþ"€: +ŸþÃÖÿ�èm½ÿ�ÀKþ"ì=oþ†Ûßü·ÿ�â( ¢¹ÿ�ì=oþ†Ûßü·ÿ�â(þÃÖÿ�èm½ÿ�ÀKþ"€)øþ<µÏûßÿ�èæ®²¹-3Áú–“ÂZøªùEÅÌ·R¢Àrò1f<§©«¿Øzßý ·¿ø oÿ�ÄPAEsÿ�Øzßý ·¿ø oÿ�ÄQý‡­ÿ�ÐÛ{ÿ�€–ÿ�üE�iêšMž³j-¯£w\:”•£eaÆC! 8$pz:«uá"ò("žÕš;s˜M"…f}ÂrŸtã‘U¿°õ¿úoðßÿ�ˆ£û[ÿ�¡¶÷ÿ�-ÿ�øŠ�ÐÒô=;E s˜‚Ù‘Ÿ�g 7µFN` œZÏÿ�aëô6Þÿ�à%¿ÿ�Gö·ÿ�Cmïþ[ÿ�ñÐQ\ÿ�ö·ÿ�Cmïþ[ÿ�ñaëô6Þÿ�à%¿ÿ�@‡üƒn¿ë‹ÿ�#U´ùô¿úô‹ÿ�@/‡õ™¢xÛÅ—¥]JŸôK~‡þ[v6«c§ÛZ#3¬,A›© �Éü¨z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +Ì®|eâ«]3Q¿M¹û _Èð&™4`¥´¯á+MµŽUX¨Û¸uÆtµ¯‰6éúL±_J´žáE‡Ú éµ\8ëŒç¶‘@ÝÇk1¸°ñM­µ¤³XÇ,_:Ûoo0Z½Â¤D>KíUùvwpA®‡EÕ“ZÓÅävÓ[©b»%hØñï2ŸÀÐ…Q@Q@Q@Q@Q@Q@ÅÏ‹à·ø‘cá3·}Ο%ÖsÎðÃjÿ�ß+!ütõãÚ‚®î¿h[MTkeZÿ�h* l…Ž6HŒ9ßüAÉÝÛ'ƒ^Ã@Q@Q@Q@Q@q~�ñ˜ñmLjã, Óõ7†,w‡¢Ä«Wc2`’5‘£fR¡×ª’:zòσþ µðÕ÷ˆî­¯n¥Ù}.žc®ÖXÈ*çï|ÇÛš�õj(¢€ (¢€ (¢€ (¢€ B@“€:“KTõ[95öÆ+ƒo%Ì ÌqŒ²‘¸2Fs@¼_|=>¢„f;Ùà8ùC“þCdüs]]yoÁ/ ·‡´]VT¿iážöHDM] ¼e³žw�;c½z•�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�`EàÍ+PÓ+³e¨nûLOpá·ÍŒ¹+¸³nÛÙç4à­H/ kk*þ?.ê1{0YF�$€ÿ�x€o¼Ã9'&º (çÂ-ܱË4ÑÖ@Vòeˈü Çó6ÂT“’G\Õí/H²Ñ –+$ ¤2ÈÒÌó;¹�d³’Ç…Q×€�«ÔPkûC}c-°¹¸¶2 yÖîEç<+þÉ?èjñ'þ§ÿ�]EËÿ�Â'ý ^$ÿ�À´ÿ�â(ÿ�„2Oú¼Iÿ�iÿ�ÄWQE�rÿ�ð†Iÿ�CW‰?ð-?øŠ?á “þ†¯àZñÔQ@¿ü!’ÐÕâOü Oþ"øC$ÿ�¡«ÄŸøŸüEuP/ÿ�dŸô5x“ÿ�Óÿ�ˆ£þÉ?èjñ'þ§ÿ�]EËÿ�Â'ý ^$ÿ�À´ÿ�â(ÿ�„2Oú¼Iÿ�iÿ�ÄWQE�q§áÜ'T]Lø“Ä_lX ¸—íi‘`Å~çL¨?…Zÿ�„2Oú¼Iÿ�iÿ�ÄWQE�rÿ�ð†Iÿ�CW‰?ð-?øŠ?á “þ†¯àZñÔQ@¿ü!’ÐÕâOü Oþ"øC$ÿ�¡«ÄŸøŸüEuP/ÿ�dŸô5x“ÿ�Óÿ�ˆ£þÉ?èjñ'þ§ÿ�]EËÿ�Â'ý ^$ÿ�À´ÿ�â(ÿ�„2Oú¼Iÿ�iÿ�ÄWQE�rÿ�ð†Iÿ�CW‰?ð-?øŠ¯kðþ/;ìÞ#ñ>|­4».ovêÇääœu®ÂŠ�åÿ�á “þ†¯àZñÂ'ý ^$ÿ�À´ÿ�â+¨¢€9øC$ÿ�¡«ÄŸøŸüEð†Iÿ�CW‰?ð-?øŠê( _þÉ?èjñ'þ§ÿ�Gü!’ÐÕâOü Oþ"ºŠ(—ÿ�„2Oú¼Iÿ�iÿ�ÄQÿ�dŸô5x“ÿ�Óÿ�ˆ®¢Š�åÿ�á “þ†¯àZñÂ'ý ^$ÿ�À´ÿ�â+¨¢€1<5á›o ÙMkiw{q²´ÇíR!˜–b0RI­º( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasba2.jpg������������������������������������������0000664�0000000�0000000�00000064651�15030617045�0023417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��¼ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷=CSµÒã‰îŒ¿¾“Êb…åfm¥°=NÕOþm?þxêŸø*ºÿ�ãtšçü„¼?ÿ�aÿ�ÒiëJ€3¿á&Óÿ�玩ÿ�‚«¯þ7Gü$ÚüñÕ?ðUuÿ�ÆëFŠ�Îÿ�„›Oÿ�ž:§þ ®¿øÝð“iÿ�óÇTÿ�ÁU×ÿ�­­¨]5Ž›uv–òܼ¼«C/!PNÕ÷8ÀúÐøI´ÿ�ùãªàªëÿ�Ñÿ� 6Ÿÿ�<uOü]ñºÅ´ñŒœ×¶P¯ÛîeŠ&±¸{¤Ø4¥²#vP§–@9Œãb×Ç^½h ¹ÏŸäùlÖSª‘1ÄM’€cÀcÆxÎx  /øI´ÿ�ùãªàªëÿ�Ñÿ� 6Ÿÿ�<uOü]ñºÇ»ñÖœ†Élîd¹¸HÊK°mCt¶²0,˜,’:‚„ƒƒž„fÄÞ4ÑÓIÕõ y&¸].štHX¨Ý‚¹Q¹IG†Wå<ðhCþm?þxêŸø*ºÿ�ãtÂM§ÿ�ÏSÿ�W_ün³müg¦Ëos2ÜÁ µâÚ {i¼éXÂ’ñÍàáÏ<)n&ohkŸÚäied¶•£"cˆ˜fŒœgŽ´sþm?þxêŸø*ºÿ�ãtÂM§ÿ�ÏSÿ�W_ün²ïõýjzûO°Ñ-¯#³¶†å˜ßä‘d2( žY‰¸,;sÏÚøÇE¼’Î(®%3]Û%Ì(-ÜîVŒÈ« ï(¬Bç$@á&Óÿ�玩ÿ�‚«¯þ7Gü$ÚüñÕ?ðUuÿ�Æë2ÃÇ-õ–“;IqnÚœhðÇ-´ ä*î;p ³ H HÁ9§¨joa©i6¾BÉ¡pöæO32!’PqŽA‘Ôc#­�ð“iÿ�óÇTÿ�ÁU×ÿ�£þm?þxêŸø*ºÿ�ãu£E�gÂM§ÿ�ÏSÿ�W_ünøI´ÿ�ùãªàªëÿ�Öÿ� 6Ÿÿ�<uOü]ñºÒ´º†úÎ »gßñ¬±¾ܬ2= %gøSþDíþÁðèµ  .õû ;Ç´“íO:*³¬sM´ã%œ‹þm?þxêŸø*ºÿ�ãu§üzÇýq¶þOZÔÿ� 6Ÿÿ�<uOü]ñº?á&Óÿ�玩ÿ�‚«¯þ7Z4Pwü$ÚüñÕ?ðUuÿ�Æèÿ�„›Oÿ�ž:§þ ®¿øÝhÖ‰5ûÍ[8lôøn¤¹ßµ®n¾ÏeÛ„ß±¾vÝò‚�;O4{þm?þxêŸø*ºÿ�ãtÂM§ÿ�ÏSÿ�W_ün³O4Èo/-î–æ6†ù¬bòíf•¦u&l*¡#†lâ ‘š’߯š Ò#Ãw+#½º+Y@>yÛ Wî±û¹àœÐïøI´ÿ�ùãªàªëÿ�Ñÿ� 6Ÿÿ�<uOü]ñºÉ6°70H\¶w7éÖD‘ ’'ŒÂÈÒ}rÇCS/Œ´¹/l­á[ÉVî ‰’Hìå;|–Tue •`I0F,�Ðÿ�„›Oÿ�ž:§þ ®¿øÝð“iÿ�óÇTÿ�ÁU×ÿ�¬ë_iRišUÕÓ¼êq]¬)’ì.TUà“•\à±�ž*î‹âM+Ä í¦Ï$¡bŽoÞA$YŽ@J8Þ£*v·##‚;PŸð“iÿ�óÇTÿ�ÁU×ÿ�£þm?þxêŸø*ºÿ�ãu…eâíMÖ+›ýÞ >K÷Óüû{ã+Ç œÀ !>Vq€A'‘ÅY¹ñÖ‹ ¤÷½ÍÈ‚â$X­e-ûÙ|µerë¸0r RO©ÿ� 6Ÿÿ�<uOü]ñº?á&Óÿ�玩ÿ�‚«¯þ7MÒ|A¦kr\G§Ü4o04/°nr’Œ222¤gŠv™©¾¡wªÛÉÄÖbÛ+&ààÅ¡º q(ç‘ÔÐÿ� 6Ÿÿ�<uOü]ñº?á&Óÿ�玩ÿ�‚«¯þ7Z4Pwü$ÚüñÕ?ðUuÿ�Æèÿ�„›Oÿ�ž:§þ ®¿øÝhÑ@ñø—N’æ |_G$ïåÇçióĬØ'™�Þ¯ß_[é¶R]Ý;$1ãqTg<‚O$t“®ÇÖ‹ÿ�aÿ�Фñgü‹³×X?ôjP¿á&Óÿ�玩ÿ�‚«¯þ7Gü$ÚüñÕ?ðUuÿ�ÆëFŠ�Îÿ�„›Oÿ�ž:§þ ®¿øÝð“iÿ�óÇTÿ�ÁU×ÿ�­(;þm?þxêŸø*ºÿ�ãtÂM§ÿ�ÏSÿ�W_ün´k²ñµÄÖòïJŽÞ9.ím".Œ’#Í(FY—ËS r   ÿ�øI´ÿ�ùãªàªëÿ�Ñÿ� 6Ÿÿ�<uOü]ñºÊ>?ð⣻]]*Ʋ;°¸�,o²CÊtFá¿»ÔàUÆñ>œ×§O·‘ÞüÜKiRA*!"”/°…ÊÀô#;sƒ@á&Óÿ�玩ÿ�‚«¯þ7Gü$ÚüñÕ?ðUuÿ�Æë3Jñ®—¨Ûiža’Ûë(îŲÅ$wÄeØ.ÒÛC¼1 H§´Ë¨ôéÚ+˜-ï4ç¿ß4)P$TUÛûÂÆPÜçåÀ!  ¯øI´ÿ�ùãªàªëÿ�Ñÿ� 6Ÿÿ�<uOü]ñºÏ¹ñ¿‡í#†I®æ ,p¬¶s0XÑ‚È[vì$ ‚½ñNÕõZÓ]´ÒôÝ*Òí®-f¹ß=ëA-£VPO’|ÕÇ#¿Lr{þm?þxêŸø*ºÿ�ãtÂM§ÿ�ÏSÿ�W_ün³í<g¥Mˆ¹imnnÝ¡<Lþ\‹/’U™AUýàÚ Œu¨£ñÞˆ4÷¼º{«X–æ{cæÚKÖ&`íÂýÐ’ÝH Š�Õÿ�„›Oÿ�ž:§þ ®¿øÝð“iÿ�óÇTÿ�ÁU×ÿ�£ZÔßI´‚á`Y–K»{gM¥D²¬A‡8.8ã<Ö�gÂM§ÿ�ÏSÿ�W_ünøI´ÿ�ùãªàªëÿ�Öÿ� 6Ÿÿ�<uOü]ñº?á&Óÿ�玩ÿ�‚«¯þ7Z4Pl/íõ+Eºµfh™™~xÙb¬ °AŽÕf±ü3ÿ� ™ëþ÷ÿ�Je­Š�Æ×?ä%áÿ�û7þ“OZU‰â›Å°ŸB¸xg•WPa²Þ&‘Îm§(äÓ?á+¶ÿ� ^·ÿ�‚É¿øš�Þ¢°á+¶ÿ� ^·ÿ�‚É¿øš?á+¶ÿ� ^·ÿ�‚É¿øš�Þªz¥‡öžŸ%§Ú®-K•"kf "`À‚AGpk7þ»oúëø,›ÿ�‰£þ»oúëø,›ÿ�‰  ÿ�ð†Gº Fµª ˜¯ù®“ºYZ',<½£ €9Éɪpü:¶·ŽÞ(õí`Gvq*“nAKW/?ºìÇ>§½jÂWmÿ�@½oÿ�“ñ4ÂWmÿ�@½oÿ�“ñ4›wðòÒêõ.Fµ«B#¸’â(£hv#=Â\0ˆ’<ØÕ¹'¦:qWŸÁÖ“>´f¾¾•u{V´¸Wt;c-!Nܾs’p0; “þ»oúëø,›ÿ�‰£þ»oúëø,›ÿ�‰  Ëà¸ÇÚ$mkU{¹®Öõn‰„I¢$²^cùH Lj)¼dî¿gÕ5+HR+8c‚DKWߣ'†$œ“œúUïøJí¿è­ÿ�à²oþ&øJí¿è­ÿ�à²oþ&€}á_¶ëZŠëz­©º†;y¡·h•4,Tc.¼Èç!ùºôÄ’øZÑõ.tÓ kh™|¥ ’&0ÊHÊJÊpFp½À¦ÿ�ÂWmÿ�@½oÿ�“ñ4ÂWmÿ�@½oÿ�“ñ4Xø&Øé^˜5]HA¦ybº,â7ãÜ6`í1(Ál“¸Õýg@:ÅÞŸr5[ë&°”Ͷ`¹FL¶ôlü®ã›×Cÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐõƒÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐõƒÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐõgøSþDíþÁð赪?ð•ÛÐ/[ÿ�ÁdßüM]ð™Ïƒt3‚3§Ûõÿ�®k@ZÈ׬×oäõ­\¼ÚÌZoŒ5d’ÏP›t6äkG”©PqV¿á+¶ÿ� ^·ÿ�‚É¿øš�Þ¢°á+¶ÿ� ^·ÿ�‚É¿øš?á+¶ÿ� ^·ÿ�‚É¿øš�Þ¬-oÃë“HeÕ5-æ·û5Å´ž\É’y „ƒó• ã½'ü%vßô Öÿ�ðY7ÿ�Gü%vßô Öÿ�ðY7ÿ�@¦ðdrê²j+­ê±Jצø*yRS‘Æb'?—Ÿ^µ^×áõ¥¥›[.³ªºýžÒÞ&sa[Wó!+ˆ†HbOÍœçžÕ£ÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐ;oCk7˜ºæ®ÍåÝÆ2ð©_´¿™#±‚ðð@íÅOiàø,d‚[mSPŽH ÞÖOK—8Ç—ŒPÃŒc‘ÅKÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐ8¼c ¥…¼zŽ¢ÎÞ pۣ̫€¿ÉŒÆÇ#ÏñnkÃރó,jW÷*¶Pجw"¢(‹yuäonsÎ~”ïøJí¿è­ÿ�à²oþ&øJí¿è­ÿ�à²oþ&€ °ðd6rGçkí¼wOx–· ŒLÒ ‘©l;�’Ç Iüm=ÍõÃjzˆ–ñ¡rÛ£&6Švž"¹C÷Yˆ²6àcV?á+¶ÿ� ^·ÿ�‚É¿øš?á+¶ÿ� ^·ÿ�‚É¿øš�›LðôZf±y©-õäòÝ ŽE‘”ypBƒÁ•ÀÉéØQ¥hJÔõáªß\ý¾_:XglWÚ¨ íEa…E^Iàs“ÍCÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐõƒÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐõƒÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐúçü}h¿öOýêOÈ»7ýuƒÿ�F¥bßkÐßêZ$ c©ÄN §uÅ”‘¯Ü~ì1ZÞ2˜Aák™J;…’¶5,Ç÷©Ð´¯E`ÿ�ÂWmÿ�@½oÿ�“ñ4ÂWmÿ�@½oÿ�“ñ4½E`ÿ�ÂWmÿ�@½oÿ�“ñ4ÂWmÿ�@½oÿ�“ñ4±yl·¶W­$‘¬Ñ´eãl2‚1{x®uüÐÊ'Öõin$’ÚF¹s˜E»™"^#Û€Ç$ã'¹ÅZÿ�„®Ûþzßþ &ÿ�âhÿ�„®Ûþzßþ &ÿ�âh*‡6×òÀúþ²X®á|~RæA$ÃýWñ0ü;b®Üx69µQ¨¦µªC0¸[½±ù;L³—ÁŒòcàŽÀcþ»oúëø,›ÿ�‰£þ»oúëø,›ÿ�‰  ö~ ¶²:&ÍSRuÑÒ4¶WhÈ!D†Îé)RF2{ŒÕøWöfßM€êÚ¡M¶û-°ÝÈ¡ãt?êùehb#ýÁrÙÐÿ�„®Ûþzßþ &ÿ�âhÿ�„®Ûþzßþ &ÿ�âh…ç€,ï-E¹Õu8Ú\ÚKå´Y”\8y™³ù™€<`ÀUýCÃ/g|ºî©kqklö¡à|êå –Ý|ÄÆœŒccš?á+¶ÿ� ^·ÿ�‚É¿øš?á+¶ÿ� ^·ÿ�‚É¿øš�e׃¬®,llã¼¾¶†ÎA*äV/ •&ÞûÕ²ÛÓ9ÿ�i‡ze߃-o4kÍ%õAm.î.'tGŒcÎó7 ù9]Ò³ Ù ãžMÿ� ]·ýõ¿üMÿ�ÄÑÿ� ]·ýõ¿üMÿ�ÄÐúÞ‚uÍ6 )5Këa±Lf·òƒ»ÆÁÔÈÃï*·�r=8­H‘£…¤yYT#¹©À'ØXŸð•ÛÐ/[ÿ�ÁdßüMð•ÛÐ/[ÿ�ÁdßüM�oQX?ð•ÛÐ/[ÿ�ÁdßüMð•ÛÐ/[ÿ�ÁdßüM�oQX?ð•ÛÐ/[ÿ�ÁdßüMð•ÛÐ/[ÿ�ÁdßüM�]ðÏü‚eÿ�¯ûßý)–¶+ Â3 �Ì©" /o,ˆU†neàƒÈ>Õ»@Úçü„¼?ÿ�aÿ�ÒiëJ³uÏù xþ ÿ�¤ÓÖ•�QE�fÝkÚu–¢–Ë ¹‘ÑV 6Õ,T¤Ú Øâ9«i>-Ñu¹aŠÊæmóÅç@'µ–:<gryŠ»Æ9\Ôµ¦½?ˆ-nmm4Ù¬íø|ûÉ#q)YŠˆ˜”²›Ìyà ½DÖtý?AMe,c¶ðõ°Øl[™n`h³·ËRÖc´$ãÓ›TÖì4XZ[ù$Ž5†IÙ’,q€]ŽÐp�#¯áV-/`½y>fa“Ëq$M €z0àŽzs\ö³u'‹<-¬iZ4-ÕÍ«ÛçR´¹³E)RÀ¼_1�“€=3Œæ³µÿ� k> ×ôMV[˜­…¢5¼ò\H¯¾7hIl…Ú@’8Ý‚A�&¸øm«=¥ÌPi>ŽI`¿‰\\8ØÓÎ$…ø‡¬#!}Ï­+_ ß^x¿Z»†ÖßKlwûj+‰\Éb‘•L  •‹–Ï,;УÔW70ÙÚËsq"Å(d’F8  d“øWši? ¯ì­4{{Ø4ÛèíïŒ×I<à¡ 0·–«Œ¶àåOVA–%‹ ðÊYx«O†ßL·³Õ¬Z uÜ…”4Û$u+Ô¬‘å²NcãŒ�èWœ¯õ }Z‹]ÃÉj—­v-ÄÌ¡K1o$*8ØX+gØåF*­×Ã;ë h:t_aµº³P—ém(U¹+–²‰ÀS “† NwH£i$eDPY™Ž�©&²ôïéZ­÷Ø­f˜ÜyFeYmeˆ<`€] ¨ ¹aÊ’9ª&òËÄÚ=Þ‚§Uîl¤ç¹Ó. á—imÒF«»œã5•­è^+×ôký:óû!b›N–ÙbY‹G,Ͱ,§0îŒ&‚‚Ù$sÆh²k¸ú+&|\KʉƒÊ¡PÇ=8.¿ŸÖ¡Óµ[=PÝ‹Gµ¤æÞu’Œ¤U±‡�‘†Rà‚0k•¼ð}Ü—«.›g¦ibmîÎâKi<sÎQƒ.#•Y$©ùÉÀètü% Ï 6­²°³´ººK‹xlåf û˜ã`AEÇ1çŒçwlrÒQE�V…?äNÐÿ�ìþ‹ZЬÿ� È¡ÿ�Ø>ý´ §üzÇýq¶þOZÕ“iÿ�#^±ÿ�\m¿“Öµ�×uÝ‚ªŒ’zN¦È\FÆ5VµY° ì ÁÇähü_£G¦> Óܘ#¹ŽÊc"ÌH †0›Á%—s¹qÔUÝ/Z°Öc•¬¦fh[d±ËÅ$gÑ‘ÀeüErÒhž'ŸEž9-tq.£k|ì/¥)+E*9Ëy9_–(ÑF�É$õ½ óhºÖ­®C ºÔ#ŽƒK³¸¼HÒ"Änt;‰”òUr�84­sâ :ÒðZLóùí/’ª–²¸gòÌ»A A;ž==jýµÄwv±\ÂÅ¢•ˆJ•%HÈàò?ÀÕáÕ5[¿_é6öÍmkrnä²Km! ‘b$JO̓òŽr9mSáÖ­{⋵[Üÿ�jÁ4Vþ|¡TyB¬Š!,|²»”ï8Ç ¹&€=6Šñÿ�xT:^±qƒ¢„f¹¹Ž+Id’PÈÄ"EŒ“.%ê2Àwähê5MOKŠ(¤´³ˆßÉtÖò•‰áXÆÇx[L™òÁ ç€=>¢k˜Vé-LŠ'‘E<•R¡Ð_ÌWoà—ω^ëNÒ¥šùÙìç.Å›t(Œ%ÚŠT3F¶“ì;s—ày­¯t©/tí"x,Æ¡BÛ¼¸g™d`1ò®èöü 88ùh¼¢¼®/‡úäVIÓ¼?+$\ešæA浜Œw·îO/ ߌ‘ZzG„[Â'ԵבΚwa²ˆÈâ7Øfá.ÁJðC~Q–$´Ôµk=&8ÚíäÌ„¬qà Í#2v¢Ç®í7R´Õì#¾±—Í·°V(TåX« ŽGj¸{föÓZУo>Í&¶h5;yì䛕/A5ÁÚÖJûÂú®¬šÕ Òõ -¯çžìNØ ‹"£Ä_>E'p]Æ1ž¹� ߈tËãVži>Ãlò$ÒG’1¹Gʪ“€ÊÙ8ÆsŽkR¼Îóáö¥yávÒäµÒFÅÔ’ÞÜLæMÌ›â~ï†,¸ÇBH=«Òa2˜c3*$¥FõF,¡±È‘ïô ÑE‘®ÇÖ‹ÿ�aÿ�Фñgü‹³×X?ôjTzçü}h¿öOýêOÈ»7ýuƒÿ�F¥�iÑE�U ífÃMºµ·»™£’êEŠ/Ý3.æ8PÌ “ÀÜFO&¯Öˆ¬õ«éì£Óí´ù­"M(¹ºx‰‘H1œ,m¸+�ØÈÉÈÙxËCÔ.£¶†âáY^ÚâÊhQäRU‘]Ð)`A9µ®ï`²ùÞff“ËAM!-‚z(8àzq\•‡üA%¼Z~¡—’j©4Ö÷2K+r× Lj’¶N@<s[pøŠ-DK›kznÄe£[ë ›H˜ŽÆG‹ðÉö  Z^·a­B²ØI$‘´1άð<a£Œ7@=?Я5Ô| ®ê¾ðæ‘<ö°É¥F š(.NÉ”D#YÞÚã! ž.<¨6µ5ïöFv¨µÓ™Ø4ñ_$£â>gVê3ëÖ€=*Šòí;ÁÚ”~!Ó¢–ÊÍg²Ó´±q©~ð’ðI.ÿ�)Š�ìè[$¬:Óaøo¬ÚÚ^«Éc¨ÜK¨Ar Üûc”G9—s€•©1’Kä7\�´ê}MEmq ݬW6ò,L‚HÝNC)}ErzwƒF•âù/,ôý2 &[ymäŠ6`ò+JîR¤¦9�°ø�ç<íŸÃ­SN³°Š×NÐ&šda3§ï­&g2ŒCËHŽA<’>læ€=NŠóY¾ÞMáK‹(­´«öÔ^|Û¶äžÜÎÒ¬.Z"�ÈÁG_psÓiZ…¶gc Ü Z{›xã„Ëö ‰Ðœ feˆ# qÓœs@ ñN‘s©Å§Åq+O32BÆÚA¬ – !]€§¡=+F{¸-¦¶ŠgÚ÷R¡'sgÇ>TcÏ¥r–Zˆìì´ýv›&•cBI–¼ˆFÈ‘º4GfIMÌô<sU4]éVž1éÚ<wº\€ßϬ ª-Ú ©òÁbC+qʓր; mVÎïS¼Ó¢y>Õf±´Èðº�¯»iRÀc ©# Š»\wƒ¼+yá½JâIa±Mao³C+'ž&”´® —dòH#¿Zìh�¢Š(;Ã?ò —þ¿ïô¦Zج ÿ�È&_úÿ�½ÿ�Ò™kb€9Ï]½ŒºÄvW7Œº`¥Û6ÓŽ72Ö ÿ�„¦óþ…þø·ÿ�ãÕ£®ÈKÃÿ�öoý&ž´¨œÿ�„¦óþ…þø·ÿ�ãÔÂSyÿ�BŽ¿ÿ�|[ÿ�ñêèè sþ›Ïúuÿ�ûâßÿ�Qÿ� Mçý :ÿ�ýñoÿ�Ç«£¢€9ÏøJo?èQ×ÿ�ï‹þ=PÊošÈxW_ûBÄ%dÙoÂ@?ë}TþUÕV _òP.ÿ�ìþ–€"ÿ�„¦óþ…þø·ÿ�ãÔÂSyÿ�BŽ¿ÿ�|[ÿ�ñêèè sþ›Ïúuÿ�ûâßÿ�Qÿ� Mçý :ÿ�ýñoÿ�Ç«£¢€9ÏøJo?èQ×ÿ�ï‹þ=Gü%7Ÿô(ëÿ�÷Å¿ÿ�®ŽŠ�åmük%ÓΰøW_v·—Ê”ƒå|õ¾Œ?:Ÿþ›Ïúuÿ�ûâßÿ�T¾ÿ�Ïÿ�ØQ¿ôLU½@çü%7Ÿô(ëÿ�÷Å¿ÿ�£þ›Ïúuÿ�ûâßÿ�WGE�sŸð”ÞУ¯ÿ�ßÿ�üzøJo?èQ×ÿ�ï‹þ=]ÎÂSyÿ�BŽ¿ÿ�|[ÿ�ñêÒð‘ÝàÍàŒéöç¨ýÚÖgøSþDíþÁðèµ  Kb};ƲE¢jWá¡·ùí"‡ë½×üбÿ� Mçý :ÿ�ýñoÿ�Ǫí§üzÇýq¶þOZÔÎÂSyÿ�BŽ¿ÿ�|[ÿ�ñê?á)¼ÿ�¡G_ÿ�¾-ÿ�øõttP9ÿ� Mçý :ÿ�ýñoÿ�Ǩÿ�„¦óþ…þø·ÿ�ãÕÑÑ@çü%7Ÿô(ëÿ�÷Å¿ÿ�£þ›Ïúuÿ�ûâßÿ�WGE�sŸð”ÞУ¯ÿ�ßÿ�üzøJo?èQ×ÿ�ï‹þ=]ÎÂSyÿ�BŽ¿ÿ�|[ÿ�ñê?á)¼ÿ�¡G_ÿ�¾-ÿ�øõttP9ÿ� Mçý :ÿ�ýñoÿ�Ǫ¿Ícg=ÝÇ…5ô‚ÚY¥¿Êª2OúïA]Mcx¿þD­{þÁ×ú-¨¯ü%7Ÿô(ëÿ�÷Å¿ÿ�£þ›Ïúuÿ�ûâßÿ�WGE�sŸð”ÞУ¯ÿ�ßÿ�üzøJo?èQ×ÿ�ï‹þ=]ÎÂSyÿ�BŽ¿ÿ�|[ÿ�ñê?á)¼ÿ�¡G_ÿ�¾-ÿ�øõttP{â ï5] |?«YÔWܬ[3å¿,Œ}{v­Ï;Cá;éÄO(€$î©ÅQÕÛ#²“Px‹þ?ü9ÿ�aUÿ�Ñ2Õßÿ�È®Ø>ýÔ“ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔP3ÿ� „ßô*x‹ÿ�£ÿ�ã”Âa7ý ž"ÿ�Àhÿ�øåtÔPGƒ® ׇ¼ó°/oÅ0Ó72ðÀÏã[ÕáŸùËÿ�_÷¿úS-lP6¹ÿ�!/ÿ�ØA¿ôšzÒ¬O]=”ÚñÙÜ^:ê[.Ù·œq¸Ç^µü$÷¿ô(øƒþø·ÿ�ãÔÑV7Š­$¿ðõͬ7Ö·a`žÉœI„ü¤íþõÏÎj·ü$÷¿ô(øƒþø·ÿ�ãÔÂO{ÿ�Bˆ?ï‹þ=@‚îon´-Ú½ä:’Êév.C…iÁh·qåž«·Œ{æº*çá'½ÿ�¡GÄ÷Å¿ÿ�£þ{ßú|Aÿ�|[ÿ�ñê�è«/ù(ö ƒÿ�FËQÿ�ÂO{ÿ�Bˆ?ï‹þ=Xqø–èxîå¿á×<ÆÓ"NÈ7�%“æÿ�[Œs޹àñ@õÎÿ�ÂO{ÿ�Bˆ?ï‹þ=Gü$÷¿ô(øƒþø·ÿ�ãÔ�xÔÜAáÙoìšüÞÙ0žÞ%‘Ìî½"tL–Fû§#9ã±§…6º4ì%_33‡Wù¹å[•ë÷N1Óÿ� =ïý > ÿ�¾-ÿ�øõð“Þÿ�Уâûâßÿ�PEEs¿ð“Þÿ�Уâûâßÿ�Qÿ� =ïý > ÿ�¾-ÿ�øõ�Iá¿øüñý…ÿ�DÅ[ÕÀøwÄ·Bë^hü/®K»SrÁùq‚§2ŽxÏŠÜÿ�„ž÷þ…ßÿ�üz€*xŽ25íÞ'Ö±wxÆí­MÇ—_g•Y>DaŒõüݳ\ÝÏŒ|{„óœ\N‘Û&—y;H¤eÜÃjäºÆ¡”²Ÿ3<m"ºÿ�øIïèQñýñoÿ�Ǩÿ�„ž÷þ…ßÿ�üz€9»¯øŠ¢ÂD†MHÚ¤’hw`˵3+¤%Ã’^™ù{÷šd÷7ZMÅå¿Ù®¥h3Ÿ-Ê‚Ëø¹ë­T^Ïo=ß5yæ¶}ðI-½«´Mê¤Ëòž"¬ÿ�ÂO{ÿ�Bˆ?ï‹þ=@gøSþDíþÁðèµ¬ßøIïèQñýñoÿ�Ç«GÂG> ÐÎΟoÁÿ�®k@ZÈ׬×oäõ­\µÆ­q§x¿UXt]KP ¹-h"!~ÿ�{­Oÿ� =ïý > ÿ�¾-ÿ�øõ�tTW;ÿ� =ïý > ÿ�¾-ÿ�øõð“Þÿ�Уâûâßÿ�PEEs¿ð“Þÿ�Уâûâßÿ�Qÿ� =ïý > ÿ�¾-ÿ�øõ�cøµu_Zj6-¬Íd¡!Ôí-|â­8Úñþ5#æÛÎÒj÷Š57‡ïnô©u'¿Ò' µŠbÒÌ¡XBè£,ŽA8 Îx«_ð“Þÿ�Уâûâßÿ�RÞ.vø?_9á-úÿ�ßê�ÙÓ›]v¯™™Ã«üÜò­Êõû§銵\ïü$÷¿ô(øƒþø·ÿ�ãÔÂO{ÿ�Bˆ?ï‹þ=@Îÿ�ÂO{ÿ�Bˆ?ï‹þ=Gü$÷¿ô(øƒþø·ÿ�ãÔÑV7‹ÿ�äJ׿ìqÿ�¢Ú«ÂO{ÿ�Bˆ?ï‹þ=Y>*ñ%ÜžÖÑü-®Ba8i$X6 òÛ“‰IÀëÀ4ÜTsÂ.-å…ÐH… FÅXdc ŽA÷ƒÿ� =ïý > ÿ�¾-ÿ�øõð“Þÿ�Уâûâßÿ�P3sªë–1k·ú%–§s<z„pZ¦¥ á‰mÚCH#Æ÷D“î‚~bza¼ñ-M1aŠVƒf…zâY8Yc¸pÌó b�ýÖqó]gü$÷¿ô(øƒþø·ÿ�ãÔÂO{ÿ�Bˆ?ï‹þ=@ºo‰u«ÏÝižLSiðܘ™’ÂhÚ(ͺL¬ò³ݹÂÀnw`+´®R×USÜOiàM^ ®_|òEoj+z±üǓɫ?ð“Þÿ�Уâûâßÿ�P¾"ÿ�ÿ�ØUôLµwÅò'kŸöŸÿ�Eµsz޵s¬xvt VÅ´Ôù·KOõRñòÈÇ<úv®Å§ ×HãO¸àu?»j�Ñ¢¹ßøIïèQñýñoÿ�Ǩÿ�„ž÷þ…ßÿ�üz€:*+ÿ�„ž÷þ…ßÿ�üzøIïèQñýñoÿ�Ǩ¢¢¹ßøIïèQñýñoÿ�Ǩÿ�„ž÷þ…ßÿ�üz€:*á/|;u¢Öì´o6ÎâUŠþñ€Ìªv]€[ªä®:ž¸È³ÿ� =ïý > ÿ�¾-ÿ�øõð“Þÿ�Уâûâßÿ�PºŒV¾&ð­ÔwZUܱHE«lI‹# ÛAÊîVÝŒ`æ¢Ð.o-t½"=SK¸‡U¾R/JØ$ÊŸ39F )Û…#=TŠ?á'½ÿ�¡GÄ÷Å¿ÿ�£þ{ßú|Aÿ�|[ÿ�ñê�À¾Ñ5H5Mnã@ÐÎhtè!Òî$óQ§ÞUC’ I°7� 8îÍA|¾öYu9äX¿h¡±Œ»ùññµÝ€o+ÍÎÖÛ»fZè¿á'½ÿ�¡GÄ÷Å¿ÿ�£þ{ßú|Aÿ�|[ÿ�ñê�ã´}_ÆøÅ´y¯®äšØÃ4ÐMö, q(&O/æÜa£·8R3êuÎÿ�ÂO{ÿ�Bˆ?ï‹þ=Gü$÷¿ô(øƒþø·ÿ�ãÔÑQ\ïü$÷¿ô(øƒþø·ÿ�ãÔÂO{ÿ�Bˆ?ï‹þ=@Îÿ�ÂO{ÿ�Bˆ?ï‹þ=Gü$÷¿ô(øƒþø·ÿ�ãÔÑQ\ïü$÷¿ô(øƒþø·ÿ�ãÔÂO{ÿ�Bˆ?ï‹þ=@>ÿ�L¿õÿ�{ÿ�¥2ÖÅ`ø>f¸ðù™à–{ÛÆ1Kéþ“/Œý ­ê�ÈÖä)áÿ�û?þ“OZõÎø«S²Ò'Яu …·¶MAƒHÙÀÍ´àt÷¨¿ábøGþƒ¶ßø÷øPO\ÄÄ)ãÈÅ“A ³5ÆžòBÙÃ.ÖÃ… Ní䌲ã(ÿ�…‹áúÛãßáGü,_ÿ�ÐvÛÿ�ÿ� �çï|Gw¡} x™†˜.áŽML$–@¤å”0M¹ßHUƒÞ>bXc¸Ð®nï|?¦Ý_ÃäÞOk“Ä6HÈ À’+þ/„è;mÿ�…ð±|#ÿ�AÛoü{ü(§®b?ù*wö‹ÿ�GÉGü,_ÿ�ÐvÛÿ�ÿ� çSÇ~ç»:Í¿ÙΑBL67 œ‘ÓЊ�ôš+˜ÿ�…‹áúÛãßáGü,_ÿ�ÐvÛÿ�ÿ� �ƒEñ=¾¥á+«é<Acûeì^¼‘ìUI¤ž¡N#Þãç5‰mâQîô˜ãÔga!€B“¤DêJ×RG3‚#_•"U•JùYIº/øX¾ÿ� í·þ=þÂÅðým¿ñï𠞊æ?ábøGþƒ¶ßø÷øQÿ� Â?ô¶ÿ�ǿ€Çωÿ�ì5/þ‹Šºzóo øïÃÓø„ͬ۠›W–XòæR‘€z{è¿ábøGþƒ¶ßø÷øPüG© =WJ…<Im§O,èœíI¼0ÞNa1Èé‹­yšæµo&»å¬^Y‚GòŒq¾$2 d ’¡(rT`–;¸“þ/„è;mÿ�…ð±|#ÿ�AÛoü{ü(”¼ñf§œÍg®=ÀVº6÷¥!hïçE„Åo Ž^Eã-˜Ø8Íz•sð±|#ÿ�AÛoü{ü(ÿ�…‹áúÛãßá@=dxSþDíþÁð赬ÿ�øX¾ÿ� í·þ=þÂLÁš)Ê>܃ëûµ °ÿ�‘¯Yÿ�®6ßÊJÙ®>hºŒ5hµMB+W’ r¡Áä�þƒÞ¬ÿ�ÂÅðým¿ñïð ž©ê³Åm¥ÜÍ5ø°‰³Ý£ÊÛæsõ{Äÿ�…‹áúÛãßáGü,_ÿ�ÐvÛÿ�ÿ� �«´‡Á 4Þ.³ûA4zŒS[¯˜¢B’­îQ[ FìãVvâ}V}wO†öõ´qý¢Îx" 6bVºa÷ùÙˆÅG#¯5·ÿ� Â?ô¶ÿ�Ç¿ÂüDðvÛýïð –¢¸‚9à‘%ŠE’#VR2#¨"Ÿ\¤>?ðe¼Á³iQ¨DDR¨� p*OøX¾ÿ� í·þ=þoÆz«h~ Öµ8®’Ú{k9^_n»NÁópIm äâ¨ø³_·µÑÖk=v8%ÂËVÒDÓÝ©ªE½XݾSžÄuÿ�…‹áúÛãßáGü,_ÿ�ÐvÛÿ�ÿ� �« kz…÷‹ï,æ»ócOµ ­6 ûŽeH9�7ïc,ÿ�1=8À®Æ¹øX¾ÿ� í·þ=þÂÅðým¿ñïð ž°¼oÿ�"ˆÿ�ìsÿ�¢šªÿ�ÂÅðým¿ñïð¬ox÷Â×~ ×m Ö­äšm:â8ÐnË1€=hÐ(®cþ/„è;mÿ�…ð±|#ÿ�AÛoü{ü(3WÖÒkR‚?ZÛ,VìdµimRKyw.Í»‘ˆxnYqŽ‚MWÄ2AàÝ:æ]e­5&¶†imÕ"ŽîåÙ3å¤n+±ÏË´ò1‘Ö¯ÿ�ÂÅðým¿ñïð£þ/„è;mÿ�…�UÐ5½BûÅ÷–s]ù±§Ú„Ö›}ˆÇ2¤€÷±–˜žœ`Wc\Çü,_ÿ�ÐvÛÿ�ÿ� ?ábøGþƒ¶ßø÷øPþ&ÿ�ߨUôLµgÅò'kŸöŸÿ�EµszŸ‹ü?¬ëµÓµH.'þÓVعÎ<©GqêEt^.`ž ×]Žtû‚O·–Ô³Esð±|#ÿ�AÛoü{ü(ÿ�…‹áúÛãßá@=ÌÂÅðým¿ñïð£þ/„è;mÿ�…�tõÎxÏPþÎÒUÓÄvú%Ã1IpÑ‘û+yƒîõ'n¬ð±|#ÿ�AÛoü{ü(ÿ�…‹áúÛãßá@ ñ±äêZTvÐIÞö(¤±‡Ê‘¥FuÞJ_ ¬ *Wh;Žì`Òðg‰noÄͪj1H¯±>fÄû=Ü…Ä–ƒ�d¡TÀ9o›’jÿ�ü,_ÿ�ÐvÛÿ�ÿ� Žox2áUfÖm$UepI”äA�q@5ÌðÚÚMqq:A HÏ$®ÁV5%‰<�<×!kâT¼øm¥jW"³°½ºÓášK§x×/µ|Í ‚ îÊýÖÁ8ÚOwþ/„è;mÿ�…ð±|#ÿ�AÛoü{ü(ÃÅ—ƒ^³·ïknV?:ÎôDŒ–æÐKö—m †ó”q…ÎxÍzr“øûÁ—0Iúͤ‘H¥]I PF9'ü,_ÿ�ÐvÛÿ�ÿ� �çuOK ËØxæ™!dû5¼?ey¼á¿tAåÁÀÚœ9*Ãzèµíe-õ.ÞßYU•®Ò)4ûfŒÍ6æPI ¬v(;›NÜÝ?ábøGþƒ¶ßø÷øQÿ� Â?ô¶ÿ�ǿ€*ø[Ô5“to.þÒ½¼²|ˆ¿e¹3ζù@ÿ�Wµ:å¾nI®Æ¹øX¾ÿ� í·þ=þÂÅðým¿ñï𠞊æ?ábøGþƒ¶ßø÷øQÿ� Â?ô¶ÿ�ǿ€:z+˜ÿ�…‹áúÛãßáGü,_ÿ�ÐvÛÿ�ÿ� �Ðð×ü‚æÿ�°…ïþ”ËZõƒàû¸/ü>níeY`šöñãuèÀÜ˃[Ô‘¬ÿ�ÈSÃÿ�öý&žµë_¸†Úÿ�@–âhâŒj —‘‚þ?sW?¶ôŸú YàB�_¬8õB?.âKV´šÍî`U…–A±ÑN[q >~x\dcw$]þÛÒè)eÿ� þ5LIáu–êPú8’ïþ>\³7ûçø¿�æâ(ÔüA6“¡^é+˜ÞìÉç"–K‡ráp(�È È3×Ù蚃jú©<&»µŠsê…Ô6ßÃ8ª×—^ÔmžÚöãJ¹‚Bâãub1‚Aà‘ùU‘­i ¡WS±� �'N?Z�¿\ÄòTî?ì þ’¶?¶ôŸú YàBsQêúgü,ë‰?´m6%Ýç®3ç?Í�v”¸)Úlp À&¨ÿ�mé?ô²ÿ�À„ÿ�GÖ4ichäÔleiЂPFh†“}ªê:v£ ]ØRÖäÛ³-«y16ÔlmóI•ÁÎåë‚‚+|U¬Ãueß`™ÑZfŽÝã7 spðÆÑ#mÚªÝÁí[ÖÒø^ÎÞ+{Y4x „±Š8ŒJ¨H 휜ãÔÓžãÃR\[\<ÚKOj ÛÈÍhA!UãÒ€6hªÛzOý,¿ð!?Æí½'þ‚–_øŸã@þÿ�Ÿÿ�Øj_ýtõÅøCWÓãÄ¥õEݬÊË™Ôdyqò9®—ûoIÿ� ¥—þ'øÐ>$Ô.t½ {»3n.£HüþT–u\c+–;°FNFs\­ÏuX|?ix‰d÷?e½»¸' âÚEC ®ì¤­»%•aóc5Õ]êý¬–·—zmż£l‘M$nŽ='©ˆ|±ÁÅ¡·*ШXq\í*;“ŒtÉõ  cÔuüdt»‰-ZÒk7¹VYÇE9mÄ0ùùáq‘Ü‘¹Xð]xrÖê{«{*+›‚ ÓFñ«ÊGMÄr³ý·¤ÿ�ÐRËÿ�ühýdxSþDíþÁð赫ÛzOý,¿ð!?Æ«xLçÁº?³àÿ�Ñk@ aÿ�#^³ÿ�\m¿”•³\ì…•§‹u…¹¼·…Œ6ØHžÔÖŸöÞ“ÿ�AK/üOñ  õÈœÛH-^4ŸiØÒ!uÔ¨#?L¨ª¿ÛzOý,¿ð!?Æ¢¹Ô´+Ëi-®¯téà‘v¼RÊŒ®='PM·‹¡µð|z¶³y§Á3K5¾æ"'•×oÎN#9nAÁn ËðÏŽoõéô™Z;?²ÞyVòDZu™¬ÅËHqX9gw~ÕÓÅyáØR4ŠçKcŒÂŠ ‡(ô^8¦I?†f»{É&ÒZéâ04å£2Ïðë·Û¥�mQYVz†‡aeogm¨Ù$ñ¬Q¯ÚTíU$ú ›ûoIÿ� ¥—þ'øÐêò_E¦M&œmÅÊŒ«\ ¢ÔãrçŒðYG¸¬«­KTºð½†§¤_X«Ïr¹±wìªS%‡RØÏãV﮼9ª[}›P¸Ò®à$7•pñȹFiÿ�oÐ7—û^™¼íù¼ÈóòýÞý²qéš�ËÑ|G}¨xŽ[9ã·û+‹¿$FŒ$ˆÛΰŸ0’Aß»rà ß­u5‘ ߇-®ç»‚ãJŠæã|Èñ«ËŽæœ{Õí½'þ‚–_øŸã@ë Æÿ�ò øþÁw?ú)ª÷öÞ“ÿ�AK/üOñ¬Oëdžñ &£fÎÚeÈUYÔ’|¦às@UCûoIÿ� ¥—þ'øÑý·¤ÿ�ÐRËÿ�üh ]ñ£§xªÂÂݬ…œ†?˜ŒÎ<ÙYHaåçSµƒ6TíëNßÿ�Â\tØã¶û'ÚÍŽÖFóCý—í\ç_ðcÏ~Õ~âO Ýß[ß\¾5å¿ú‹‰ M$_î±ä~ˆÞŽé®‘´e¸hÌFU1(I%s×’qêh|7¨ß_¦¥£%´—W­lZÞˆ±eK6³Œt9n²l¯|=¦Ú­­Î—kn™ÛFˆ¿@8©ÿ�¶ôŸú YàB�gx›þ?|9ÿ�aUÿ�Ñ2ÕŸÿ�È®Ø>ýÕ™¯jVZ‡#·½¶™ÿ�µíŽUc&^ÀÖ—‹ × §ÜdŸúæÔ±EPþÛÒè)eÿ� þ4mé?ô²ÿ�À„ÿ��¿EPþÛÒè)eÿ� þ4mé?ô²ÿ�À„ÿ��¿HÛ¶6ÌnÇ隣ý·¤ÿ�ÐRËÿ�üiYÑÝR±ea‚ èA�ei¾#k}7W¸×ï,"þͼ6Ï2©·A•Œ®íîÁI2÷ˆät9ŸðÄÿ�ßÄÆ;búÆš Ìä¤o*Ìv U^œ±ÎqÅuvsøgNHÒÆ]"Õ#R¨°4hIÉ ‘¥ðÃܵËI¤†‡ìæmÑoòÿ�¹»®ßn”·Xzv¡¨Üjš¾Ÿs5 ¹·T’ㅶƼ!fÞw“°äaÇLj{=CC°²·³¶Ôl’ xÖ(×í*vªŒ’}Alþ³£µmyDì±”4™ÎòñdzÐ=©x£_Ò-¥ódÓn¤†;»¯1-$‰fŠßË ©•ˆ‘Ø’>_ºk½¬YæðÅÒB—é,y±,ßûËžÉäsÍ>Öó@²{§·¿±®¦3Í‹…ùœ¨Rzú(  £â-Dxôi¬¿³ÌžHÂ1“‘æí/»ûì)Ê|Û³òÓtÿ�jºŽµseÚ"H·Ÿf&&f…­çXOš7€Á÷nP6ð:ž£H¿…›S:›6ŒoÊyf蘼ҸÆÝýqŽÙ¦*xERåUt@·H±Ü�"Ī·÷€�hdžu+[A†îí 7dÑH`FEݬ‡å$~^FHÎpHÁ:õ™©¡ÚÁ÷Út0Æ¡R8æEU �Rmé?ô²ÿ�À„ÿ��¿EPþÛÒè)eÿ� þ4mé?ô²ÿ�À„ÿ��¿EPþÛÒè)eÿ� þ4mé?ô²ÿ�À„ÿ��¯á¯ùÍÿ�a ßý)–µëÂÒ$Ú<’Dêè×÷¥YNAi—kj€0|Iek¨^h×¶ÐÜÀÚƒŠhéŴäd*_øD|5ÿ�Bö“ÿ�€Qÿ�ñ4ígþBžÿ�°ƒÿ�é4õ¯@ßðˆøkþ…í'ÿ��£ÿ�âkÂ×ÁÚŽ±6›†,QÐJc™ì!òçòœG.Â2~G`§ rxÍvU‡ká‹k-FæöÞîéd”Kå.P­·šâIL`¯ñ8 wnäqÅ�`Mÿ�¤M:ÂÌ—ÚVÊ×̹}¬çb–@Tfùöä ŒÖÕ‡‡¼%©iÖ×öº’ö÷1$Ñ?Øc‘€ ýßB)³ø> ™å»—UÔ›PiHïCD$„ ‘UPØÙ¥©?9ç8#rÆÎ ;O¶±µO.ÞÚ%†$ª�ò›ÿ�†¿è^Òð ?þ&¹´ðLJÏĹíÿ�°´Ï$hñ¸ì‘í ç8Î1Œàk½®b?ù*wö‹ÿ�GÉ@¿áð×ý ÚOþGÿ�ÄÒ7„ü4¨Íÿ�æ”ØÀ²'ô­ªF‘”1RF d{ó@}……ï´ËËÏøCmákI'·}>‘™@?&ÂÊÝ@áºäqM%ðq–Ê9<#i¸ò÷Ÿ²ZºÛy²¢ó 1;©Q·w=q]%¯‡•­Ävú­ú\\Ìg¸»Ä&I LcØ0x ËÎyÍ8|§A=´«sx|¦W™YÔ‹§Yšui>\äJîãnÑ–éŒ �¹ÿ�†¿è^Òð ?þ&øD|5ÿ�Bö“ÿ�€Qÿ�ñ5³E�p^ðLJæ¸ñ—BÓ$ë¢n´Œí_.3Ç“ǽtŸðˆøkþ…í'ÿ��£ÿ�âjƒ¿ãçÄÿ�ö—ÿ�EÅ]=�bŸ xh)#ÚQ tQsúVéá(¼1iâ¼͕Ų]Ÿx¢e ¹#8p¹>€×gqMm,I4;¡U–=»£$}ḑ×G¨5ƒ…×C°Òm|AªÁ”qÅ*[3A…t$1ÛøA뜀U‹JðÌšóé/àûX_Éi¢¸’Â*eVUm¤d‚  õ§ÿ�†¿è^Òð ?þ&§¶Ò¦ƒVšùµkÙ’EÚ-dX|´ÇLŒ?¯ˆù¥@ßðˆøkþ…í'ÿ��£ÿ�âi|$ø7CU�§Û€oÝ­lVG…?äNÐÿ�ìþ‹Z�Î&•©ø»W}CL²»u†Ø+\[¬„pý2 _ÿ�„GÃ_ô/i?øÿ�E‡üzÏýq¶þRVÍ�cÂ#á¯ú´Ÿüÿ�‰ªz¦‡áM'O{ɼ7¦:«",qØÅºGvй�d³�2@æºZ§ªé°êút–s<‘«2:Éãt`èëFC*‘G �s"ÓÂOáã¬Gá+IY‘­ÖÂ*:9GVÎme`Im¼qQ['ƒ®5h4ïøEl‘å"?4Ù[´k1‹ÎòIR~/æÈqüU¼ž0iIag«jŠ7³Ë”d‘ÝË»’Ñ‘¸±cÀxãb­§ƒ4í>î즹… EòmÃ)$X|…—•$¸ˆä‘ŽÙæ€-Â#á¯ú´Ÿüÿ�‰£þ н¤ÿ�àüMiÙÇ<6Vñ\Ïö‹„VY¶ó[“ÎM@Ö© xkLÓå»ÿ�„SO¹Œ˜á´·VÇs—*£äU;»/ ZèÖz’ø>ÖUºË°‚6@Ã#yª¦3‚ Îx5Óê}föñÞOh[¬°-ŽãçVý+.ë¶÷4Z2_ÞÛéqÀ–¦Ö#×…WnÆfBø#‚Cî9  » _j:ÄÚl^±GA)Žg°‡ËŸÊq»Éù‚œÉã5³ÿ�†¿è^Òð ?þ&—Oðݦ«M¨E5óù¾\R)šâIv`ó¸ rO#Œ+b€1¿áð×ý ÚOþGÿ�ÄÖ'Œ|-áè<¯Íƒ¥Ç,zmÃ#¥œa”ˆØ‚í+ Æÿ�ò øþÁw?ú)¨OøD|5ÿ�Bö“ÿ�€Qÿ�ñ4Â#á¯ú´Ÿüÿ�‰­š(š¼Ðü)cy§ÛKá½4µüío-ŒX #y>n:mºgœUk½7Ãz½½„ž ·e¸Ü#¹M>ˆº¡rŸÞÎÕ8;qž3ž+oSÑ—SÔt«Æ½º€éÓµÂGÍ’1FOŸr“®ã‚>ñî máµ4¼þÜÔvª²ù-ösžþVጎÎÑœó ½HðίÉ>´²–Ús°ÝX@6Õl‚›”‚NA?˜5£ÿ�†¿è^Òð ?þ&­i:lº]³C.¥w~YËy—Kažß»DœœO=jý�qÚׇô]?TðäöZE…´¿ÚŠ<Èm‘L§ØVÏ‹T7ƒ5Å`:}À ÷ýÛUÇï‡?ì*¿ú&Z³â¿ùµÏûÏÿ�¢Ú€ÿ�†¿è^Òð ?þ&øD|5ÿ�Bö“ÿ�€Qÿ�ñ5³E�cÂ#á¯ú´Ÿüÿ�‰£þ н¤ÿ�àüMlÑ@ßðˆøkþ…í'ÿ��£ÿ�âj ïøONÓîo®´";{hši\ÙGòª‚Iû¾‚º ¯}e¥§ÜØÝ&û{˜šSûÈÀ‚?"h—±±ð­ö›yt<!m¶ncžÍôèLÊáUÂár *èFñ ãœRÓ%ðv§˜ð¤ 3˜Dijñ¬Â3/”Z6a¿ËøÈÇ|ñ]%—‡Í…­Ìpêú‡ŸrKÍtâ•ä¨sû½¹ Š£Œ`r æ¨iÞ°Ò®þÓmyzdó$¹"GF tèQ®ËŸ0«ýÜ»@ÿ�áð×ý ÚOþGÿ�ÄÖ^Ÿ¦x^þóPµ>´¶{"»Œ¶06pT¦î~_ºpÃ# dWOgðÙ[Ås?Ú.5YfØÌ`9lO8o ‹k«ÛÅÔ¯Zòïb½Ã·*!b¨�M¸Û’ sÉ<P)5çƒm¬ÅÍǃ`Œ~õÞ?±Z³Å [|Éœ+ª»×#ïŒýÚêáð×ý ÚOþGÿ�ÄÖ|Þ°¹þѨK<Í/Ú®£ßt’*+Æà&Ð…bŒaBœ Á랂֘^èÜ]ÖI‹Â¥ùI´ ™žCžyÇj�ÓCð¤ZÕ¾–ÞÓ|û‹yn…Œ[vÆÑ«Æs™W·­S’ÃÃQê³ißð„DÒ¬ <.4û}—YT„9àå×ïíóšÝŸEøŽÛZû}ÚIom%²[¯—å«19BÙÊ'ñcärsö×Ú.fÿ�„‡TÌñy@l¶QÀù”ùYÏS‚HË:`–‘¢x_XÓc½ÂÖá™Ñ¡¸°‰]£�#ªžA õ¯Â#á¯ú´Ÿüÿ�‰«Úm“éöÚ½ä÷e2<éÖ5b; Fª£8¥[  oøD|5ÿ�Bö“ÿ�€Qÿ�ñ4Â#á¯ú´Ÿüÿ�‰­š(þ н¤ÿ�àüMðˆøkþ…í'ÿ��£ÿ�âkfŠ�ÄðœÚèo¼Qà w׊‘Æ¡UGÚeàÀ·Yÿ�\ßö½ÿ�Ò™k^€9ÿ�YE¨]h6Ó<ê¨1& ‡…ø¶œðèCÀÓÿ�áÓççZÿ�ÁÝçÿ�©µŸù xþÂÿ�¤ÓÖ½�aÂ#¦ÿ�Ïεÿ�ƒ»Ïþ;U£ðþ‰.¡=‚^ëFæã–DþÙ½G,çÍÁÉGéé]5bǤ_Åâ]OVKûm—vÛE Z±1yeØ37™ódÊüaxÛÏn+ŸÍi%Ìz¯ˆ8ö CRÜá÷d]Û¤RÈeaO<݃Ã=Õ¼W^ëC*×\¼!”Œ‚›ÐŠÇ°ðý‚™“]„ÞÇr—òý‡G$lî‚O™Ý%lTeT…ç®Ò´ètËL·,a³·ŽÞ2Ýv¢…ü�fÿ�Â#¦ÿ�Ïεÿ�ƒ»Ïþ;\âxbÀüIžßí¶Á¤Fùþ׺ݟ9ÇÞó7cŽ™Çµzsÿ�ÉS¸ÿ�°,_ú>J�µÿ�Ž›ÿ�?:×þï?øí5ü)¥ÇH÷ZÐU“ý·yÀöַ鮣!_ia¸ã4ÇÚÚxbóOº¾R×R I SùÚ®¡Æà´£È2àcÃÍ,ö>µ½´³¹¿×a¸ºÇ–«_ñ¸áw! ¸ð7“À犱wá}CSÐ.4ÝGPÓå’{„¸ycÓÙUÊ2ºïF•·|ȹçFÐZ§cà°ýQO! -sÛmäܽÄKÏû¤W¿7Êdc4±ÿ�Ž›ÿ�?:×þï?øíðˆé¿óó­àîóÿ�ŽÖíçÞðÅ„÷"q«/W•f¯t™\}q Üyêr}ë¤ÿ�„GMÿ�Ÿkÿ�wŸüvªø;þ>|Oÿ�a©ô\UÓÐ5}áíN³’îê÷[Hcb5›Ö<œ��”’I �I5›2xJ [Ù5mmmö® HÚpÅÇ™” xbÀ=q]>·¦_KkE›È”KñJSxI#‘dBW##r ŒŒŽâ¹»¯Msd–ÇTCÃwÓ}”æTº“̸çùI`»O;F~öx�š×MðÝî§q§[ê:Û]@ t:½úƒƒ†ÚÆL6 �í'€qZ?ðˆé¿óó­àîóÿ�ŽÓ4¯ 7[’ý¯°¯Ú~Í‹i‹í¬ÒîmÇ~]F8sÖº �Âÿ�„GMÿ�Ÿkÿ�wŸüv¥ð àÍ àiö㓟ùfµ±Yÿ�‘;Cÿ�°|ú-h,è–šŸ‹õw¸–ý Ãl�¶Ô'·¨ÔƯÂ#¦ÿ�Ïεÿ�ƒ»Ïþ;RXÈ׬ÿ�×oå%lÐü":oüüë_ø;¼ÿ�ã´‡ÂZb©&ç[Àã[½?ûV·ª;…™­¥[y9ÊÈ…Õ[ Œ€{dgÔP!=¯†-ô‹-Qµyí/‚S§¨JónBëµË”Ó€i-mü+{}ogm«kRKqͽþÇV]àó6î+ómÎìsŒSçðeü¾Ò|<5[B–Ǽ¶’p‹±w/šã†p eL¶^¸²Ô ºþÕû@…–çl°|ït¶¿fóƒ´ å09ç4þ7þ~u¯üÞñÚ?áÓççZÿ�ÁÝçÿ�­{?´ýŠßí¾WÚüµó¼œìß›nyÆsŒÔÔËê:‰¥ÙµÕÕ׈<¥ê!ÕoåcôT±õàté^’ÞÆxu fe¿Pö¢=nô™T®íÀy½1ƒ“ÀÈ®ƒT‚úæÁáÓî µ¸l6hU¸Ú®‡8ﻊæ<AàWñ½„w–Qµ¥³[©ŽÀáíÜÑ'îÜУdìÁûÙà[]7ÃwºÆo¨ëmu�%Ðê÷êk0Ø$´œÅhÿ�Â#¦ÿ�Ïεÿ�ƒ»Ïþ;LÒ¼0tÝnKö¼¿iû4"-¦/´J³K¹·ùuà`qÏZè( þ7þ~u¯üÞñÚÄñ‡…´ø<¯Ì—¹hôë†õ‹·RDlyV”‚=ˆ ×qX^7ÿ�‘Äö ¹ÿ�ÑM@ü":oüüë_ø;¼ÿ�ã´Â#¦ÿ�Ïεÿ�ƒ»Ïþ;[´P#y¦ønÃQ¶°¹Ôu´¹¸ F¿Ú÷ärp»˜IµrxˆÉàdÔsÙø^ÛS}>}WYŽá#26íbø w‘¿ÌÛ»oÍ·9Ç8Ç5¥ªx`êZäwâðG }›í0·~Ï3MÖÜ6aØçƒ‘ÇCPð7öµÝñ¾Ô¬ïY¤‚( 0•í®àåÏIÆÜ}îr:Pš^ k6­sc}®¼jå>¯+ 2´Á‘È ô5{þ7þ~u¯üÞñÚ±¡é3i‘ÝÉwv—W·³ý¢âháò•˜F‘Œ&æÀÛ÷<ä÷­Z�âõÙiÚ¯‡'‚mIßûQF.5;‰×ýT§î¼„vëŠÜñh àÍuNptûÁÁÿ�VÕ_ÄßñûáÏû ¯þ‰–¬ø¯þDísþÁóÿ�è¶ áÓççZÿ�ÁÝçÿ�£þ7þ~u¯üÞñÚÝ¢€0¿áÓççZÿ�ÁÝçÿ�£þ7þ~u¯üÞñÚÝ¢€0¿áÓççZÿ�ÁÝçÿ�£þ7þ~u¯üÞñÚÝ¢€8ù,<5“.¨Ú޹öHåh—V¿-æ,¦"D›‰óÜÉéUôñá-Rò;KMW]yäÜ_TÔ ¹Ü„³€`’‡ �'«øWT_ ]hòëŽ÷Ípf]<…-$þs)C!ÊΤd0ÁdÖÐü q¢ÏŸÚÉp±N÷©µ+‹ƒ €w“å¬D(C“ÆK�Øÿ�„GMÿ�Ÿkÿ�wŸüv³,ì<55ìPê:â½ p&Õ¯âØ§8žA”;[ 25ÕYý§ìVÿ�mò¾×å¯äçfü|ÛsÎ3œf°§ðþ£¨YkšŽ£e$Z”FܼM‰ ¥K[$+�“ƒš�ͺ·ð½•¥µÕÖ£¯E Ï11ÕoÎWŒ¹BUFY°FHÍlÂ#¦ÿ�Ïεÿ�ƒ»Ïþ;\ü ÊXKnº•¼Fä\Cr°Yyp˜'X–TŽ=ÿ�»'ÉVÝ“ó3sÇiköÝ÷_k0óÙü AòöŒnÉ?6íÝ8Æ:P4tß hiQÖþÚFBkßíÎ7mßæmÝ·æÛœãœb«¼~Ž{È_UÖÄ–`™Gö®¡Î)|ÏÞÄ) ’ �ò@­Sá†ÿ�„™µQz¾GÚ~Ú-Ì9"ãìÿ�gÝ¿wÝòÿ�‡yÏjÍoK#Hòj‘—Þk=¶¤e’æ;§,7êe‰H^0¹=h톢jvQ^YßkRA ;Xë7ªx8 ƒ( ‚ €A³ÿ�Ž›ÿ�?:×þï?øí]ÑtÏì1mZo:C,³Ë ]¡ä’F‘È\œ Îp2p;Ö…�aÂ#¦ÿ�Ïεÿ�ƒ»Ïþ;Gü":oüüë_ø;¼ÿ�ãµ»E�aÂ#¦ÿ�Ïεÿ�ƒ»Ïþ;Gü":oüüë_ø;¼ÿ�ãµ»E�aøJµÐšÌŒ‘ß^(2ÈÒ1æ^¬Ä’}É&·+#Ã_ò ›þ¿úS-kÐ OL¶"îâÖ[i¼è¥ƒa`Û¬÷j¯ý}ÿ�C.«ÿ�~íøÍkÑ@Ø×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍkÑ@Ø×ßô2ê¿÷î×ÿ�ŒÑý}ÿ�C.«ÿ�~íøÍkÑ@Ø×ßô2ê¿÷î×ÿ�ŒÕAáIF®Ú ñ­ö¶€[—Ùm‹'Iæº*(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(±ð¤ºs]µ·ˆµe7sµÄÙKc¹È�žaã…U¿ìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üf¯iöQéºm­„,í´) 9bª�Ç~*Í“q¡¼š”÷Öúµõœ“¢$‰ ÂTíÎÏç½'ö5÷ý º¯ýûµÿ�ã5£qwmh#77CæÈ±Gæ8]îNŒõ$ôæ«§iÓ[C{km-Óùvé<ʆWàmPOÌyZ�§ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÕÇÕtäÕL{ûUÔ$O1- Ê%eçæ œ‘Áç>âþÎÒx`¹»‚§ÝåG$ZM£smóÉÇA@?±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñšÔDÓ¼T3"«´a†åV$GP VÁö>”ú�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^Š�Èþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�Æk^«Ý_ÙÙXµõÝÜZ"†iå,`„±8Ç"€(c_Ð˪ÿ�ß»_þ3Uïü3>§§]X]x‹U{{˜žT%°Ê0 Œˆr8&­Øx›@ÕeiÚÞ›y!m»-îãçã O8V?E>•v[ÛX.­í¦¹†;‹’ž@R£-´[“Ž‚€3ÿ�±¯¿èeÕïݯÿ�£ûûþ†]WþýÚÿ�ñš½£euwsioyo5Í©Qq r«<%†Wzƒ•Î3×û»»k Y.¯."··ˆn’Yœ" õ$ð(;ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�«W:Æ™g§Ç¨]jVpYH¥Ì³ªÆÁ†W NGOZ·‰,i$n¯€ÊÊr„J�Êþƾÿ�¡—Uÿ�¿v¿üfìkïúu_û÷kÿ�ÆjðÔl›R:p¼·7Ëœm„«æˆóûs¹ã8ÅY  Sáç–îÎâïYÔ.ŤÞ|qʰ*ïÚË“²5=÷­FÊ=OL»°™bº…ávB�ÊA# ŒóéCjK¨&ž×–âõÐȶÆUóV œ‘ïVh#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�­z(ž™§®—b-Vygýä’´³mÜÌîÎÄí�ucÐ ¹E�QE�U _Z°Ð¬Íæ£+Ån>ó¤/&ÁÝ›h;TwcÀîjýbxšÂ÷UÓþÁoieuip.£¹¹’°Ž6”V$û}hYh¶ñÍ}$вÈ"b…åyíT@YŽ 'µ-Ž­e©³-mÐ !ò¥Ý°Àc;Ž£XZ¦‰¬>¤ØAö=HÚÄy¯.d·”ʪª³$ˆ¬U¾þ}wc5ƒ©ø#[¿¹‘æ¶ÑoZXô¿>{‰Yimdg‘ʈˆÕÊuà~TéSMÔí5{¼²‘žï^6Œ†G(À«�A ¬9«Ç|C§ÿ�f.£ë:,±XÉq{š·­þ‘—^lqAC‡u åíàmr8 ‘¼ß¼Aw«i×·WvÐÇmys9ŠÚç˜üË£pà'wͰ³ }ì1Z�ôú+‘Ô|+s{¥I5ïöÔ6²»Èš›$L„˜ÊI† 7!±‘ϘÃp¬-Wáö§y©Mpi7¯EÁ{‰]^å~Ò“3÷g4F…zü²7Ýû¤Òè¯"¾ð&©c ë9Ñ´Ÿ)´­NŠÅÞYdieómÐ'”3åí £<nȾÿ�ü!·ÒhOØô¢’j_mþÉgqhј|¿-‰Lýïß}Ï¿ùÐ}Ey­Ç€µuÔ »† "îætÄ[ë™Ý'wµ´Žq`ȧgÞ<}+2×áf«o«Ãwvšf®©w,Ò‹Ùð·É0”[’2®K3çËQœ��¬-Ì/u%ªÊ¦xÑdxÁåU‹'êU¿#X–~4Ñ/îá¶ï·Í3ÁɦÜÇH¥ƒ/˜Ñ…È*ïPEexOÂwÚ6¥g{¨[i’\&m§Ës³J$„¸%I@HudÉ$° “@ðÖ£hºŒš¥Œ“Hnü”Kée†T¸ædthÀL«•#9@<­Î•§´–’À.’6%®àBãq$vÆ}ª£ø“KM7MÔLò=I¡[YVÞF eÀvä YF[$ átO‡Þ Óu#R¸»¶‘ôý> dŽ+ª­Mܘ ß!ˆpNpåTÔ¿ðëMÐÄéWÚe®m%Ã……­¦ÞíòÉý꣨ J¢¹oøvçÃÂö9mtûh$)å-«™ˆÝ¹Š)$äuÜÜY³ÇS@Q@ïŒã¿›G·‹NÓ'¿˜_ÚNÉ ‘&ÔŠxåbLŽ£„ w#·5CÆÚ%׉í´KD°œFn$–y<ÈÃZfÚXÕÍË+ȧåÝ÷O¶{(ÍJñ]ÀÖüý>æ=OQС…5 [¨âHîãóÜ�V@à$k0vœñÉÏñ‰â}oOÔ-£Ðu]³ê6ÂãP…Œ)&žð…ÏœJ¨ÉÚ>P¤àcŠõºÍÖµGÒ- ¸Xe’òÞÙÁ“iQ,©aÁÎ ƒŽ8š�æ¬tÍz/ßO¦Á6öq¬ú³}¸nŒÍ¹0·ƒbDù²A*ýI¤šwˆš x‘©}ª[ce¾QÖÂ}Û`³ žI1“òüÀ6{ÿ�kshVÏ ¬s´³ˆKO9†A wÈá[jðpyeéÖ³?á<²´ÕWLÕm®-¯ ­¼Û ‚ke‘efJG†Ú"b}îp2¤P7«hþ.’‚ mî™z‘˜uPž\Í(kA'ïFöD3|Á³ÉjPMbÞ{Xî-¼C w:㥭¯öÀY¦¬˜•Þ&#hË�Ì0 Œâ»†ñ†„·:eºÞ<’êiÚmå“zÈ BJ© W9lpŒz)Å[éòCnš™K+Ùîg·!y•Lw âá@Ug�ÁFX´c¥ø®=FÙµ½¹ l¢æH/BG" P­¦ñ‰Æ\Iòñ¼t¬(ô®‡öX!Õ£™­l Ë\êBf–T..DdNwáЭʓϦjZÞŸ¤Imìæ7¹}‘*ÆÎIÈ;AÂ‚Ê ‘“ÍgÝx×@³¸’ ¯$ó#”BvZÊà¹p˜RªCaÊ¡#!X€pHÇè?‹m5;_íµÛ”7ågž]E5«Zl'ʶÓçüÿ�.HÛéZèzœ?¦ÐWNºmQ´—³û<·K#4¦=„‡g*' n^�v¶<:m§¸7w Iq!{Ô„ÂHpS$£W<V‹4a§µñ¸—ÊYþÎPZÊeó1»h‹nòvüÜ»ÏNh˜Ôt}næëIÕm,µí#y<Œ×rÀ š5´‘"¸GÚê•ÆÝÄÝɧ‡´Ûb ËÉ ÔÌó™$Œ›u6²BÄ3Nìê^@Ü`ýì*«]e·¼=yyöho˜±fA#[ʱ#óp$*þïçò¼ŒŠbøïÃÏoÑÝ\ȳÈbc±ÝœGæchMܧÌ8ù‡#"€2ü¤ën·w>©ozÒ\鶉=ÝÅÒʯsÌd7–T>b•� Œ•‰q xžçÃÒÛßÙê·’}«O‘âMICÉ,So¹š6óWdl¡B&Wk�B©®ßNñNŸªëO´É›(o£œ@þSÇ.í¤608^çžq÷[ºgu+íCÈ—IÓÖ4’åg[}E渊8$hšO+É×�ÉÏ�à€¥«ØÜZêšF£c§5ô0MoöH×—µ×Ìe_”!^H8sÖ°ôÿ�ê°jÚ=¼ðj1iþEÛÜ}Pò¡ÞàM Y¶ÅßBC(ät´¿4ë OªØ¢O}™ý¢öLîŠ@dtYvfPë#+3ZW¾,ŠßÅúv +;\ÈÑO .>ΕGÜ(ĪtÞnP%«è>.mRúïNKèKk¨AÜ—ja^xž—Ê~ê2¤€>lýê¹£èž":žªu§µ×âU¾òDLeG…]VáÙö…‘weÉ¡‰ç‰E�sœw³x¿MdÐn%µ´8^ÆðóLl[. 7NIÝç§< )pS´Øà€M�SµÕlït׿·y$·C"¶!}á£fW1»!•†1œŽ+6/ø~'ˆ!¾i4Ù$X’D·•˜*¨Œ.ü’FÞrCšÃZ晤^Á¨[iÂv¹¹¹€[Ý»«¥’]¬LJWÂ䞸+”³ø¯iš%´²éòMÓ¤kgÒ>Ù£2HFN]`ˆ}ÑÎ~ n£_k"_+Ëó1å6üc?s³þÎ3Ûª1ø‹I—J}N;ÅkD²Köp­‘+2¹\nä+qŒðx®Qü'¬Ãâˆõ{M?Dùu&ÔAk—WV’ÌA,`ˆOÀ}ÜnÀÈVqøu©7‡î,ä°Ð¥¼ŸÃiw‘³±o]àùY †»bQƒÁ�¡Erç†5MZÁk´ÔC\¬óé·Î‹m³c«D¯AÈÕpÇ1©àæ±¼Uà O[ŸSkuÓ[íP²G-į½A·òDäoÝ«þüçx½@‘EyÅŸïíüB—¯£h0Ùù.%X'vaÚy/_$ ùŒ€O¿5Wž Ôÿ�áò¤µ´±’îÇOSdw¨•¡;¤óÁ@U¥Ëp`âé@£Ey~«ðëS½°‚ìôY%M6öÕiœ}šI¥D#ýÑùaj<ªÖ 5¸t딽m>þê{ë{—ÜþéÄs™Yˆá·•&<’Ä«u� Tk˜Vî;V•Dò#H‘ç’ªT1úËùŠÄ—Æš$7óÙ»ßy°\-´¬4Û“r¸S `Èe9Î0Àô5‡¡x2÷OÕ4{»;FÛ`×苌Æç™e‹ËÌc”ãÇÊ�lƒÉZÑÓ|?¨'‹õJú+ak%ỵx/d,‘^"U nÜH'#&€:KKÈ/¡im¤Þ‹,‘‚>trŒ9ôe#ð¬áâ ØZÞ‰§û=Õߨ£²ËÄÞa‹k¹OœmË`g¿5ÂGðã[{ý*i.,ím¬®n$K{;ŒD—&ud-ä°¨Ù•\nÁ+Sk’Kö¹í´‰nÒù.­·]HE¾/ÞéöŸ+ º¸Œñü yÎ�¦Ö~Ÿ­Xj—W–ör¼’Y¿—10º¨`̤+a‘ÚN y¬OøfóÄ_eû+Û~î)¢hfC¾Í·1àËÓ´q÷ÏÌ;Øð^ƒ/‡ô«»yìtëYf¾¸¸ÿ�AbÊÉ$…×q(¼¨m9ì�.Ùx—IÔ/Í•µÓ4ß6Âꤻ~÷–ä“ö“ŠÑº¸ŽÒÖ[‰D†8Ô³¢iÑT'Øk´ð¾©¦—¦ÝG§Ma£Fëm™µßî^YT¦ms»òyÇj­càF·ð†‰¦Í§iMshñ6¡9òo|¸Z%,Û2O(ü¯qï@­…õ¾§§[_ÙÉæZÝD“BûHÜŒSƒÈÈ#­Iq<vÖï<»¶ ÉÚ¥àI>Ó^;}ðŸÄ7Ú|PÍua$‘éXF¦à„‰Ò&‹9032‰0 a€áŠ©Ÿ„úv€Ñi:~mzËæuvX<Öåþu]ØÎ~m¹éÅ�\Ó5;McOŽúÆC%¼…”FB ±VX`A«u‡ámmÂæ)J§Ú.^ám㙥K}Áw"»�X üËž+r€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Éñ„<Ac«j7–KñÜo´ò÷æw£ U<zzdVµ©hRj+hWZÔ­%·£imÌY˜0�ïVŒ©û¹à dã’~Z&§c}m¬j¶­c0[ÇBQ(ä>ôd“¶izž­ì1×Q@mmá=_Iñ&œ–Ú2ÛiâÚÚÞêá­jƒ ù^UR }á“‚ÙÕ ´V¾µ½¹¸º»¸·šYCÝG›¼ÉL¬¸1` åˆ+†ˆÝŽ+´¢€0ƒô›k«;&!£µ«HBéÑGJ$Ù½]vAòÓœòŒŠ¥yà»–œjZ”¸7$MØXηrTG9Ï+zÊ(†¿øxÇJÔ£³Öo§¹¸±¿¶†;ƈDí·ÈÌR ܾÓÇL`µª<! ²*Ú– /šïíÆü<fe›Êò²>M˜òþO¹Óßšé( 6/†Úd;"MKRûN&…¢òø·û6Ìù{¶ù?'ÞÏ|çš4ÿ�‡n“mc{iö)ÍÄoVÈÌÆ6ˆoÄXl#¸Éäîäž1ÙQ@…-ô -šÚþöQ„Z~ÉŒd<q1–¹DŒ8 Ô3NÑü44k{¸£Õ¯î<÷–DyÖÖí+³ÈP¬c«¶ì6áÀâ·h ?Ó¾h^{gmuzÝ«Z¼Ì–æeFP¶O+pÊŒc8äœgšßo @Ú¥¾ 5+å–+¤¼`<¬M2Áäo“ø£àÜbº(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ���������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasbb3.jpg������������������������������������������0000664�0000000�0000000�00000042713�15030617045�0023414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��å"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )•F`¥ˆ 1“íÍ`i^0Ó5]2=D m-Lr<ÏvR1lQö2Éó§ ûpy ‚ŠÂÒ¼a¢jÖ¶s%õ¼ y,±[C4ñ‡˜Ç#FÅ�beIIÈ"Ÿcâßê%·Ö,Œ’Ï%¼Q4êGF*ÁW9=3ÇPAï@TW1¬xãOÐïµ+K»KÝöbô²*m™s„%†X¤88$#c8«ëâ­ìs&³§Cr¦ó.âT„«b¸<g±  Š+&?xz[I®£×tǶƒo2ÝÆR=ßwqÎ{g­j#¬ˆ®Œ¬§ Q@¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ª:¦±c¢Á×Ò:$²yQì‰ä,ÛKc è¤þz±µÏù xþ ÿ�¤ÓÐð›hóÖ÷ÿ�×ünøM´?ùë{ÿ�‚ëþ7[4P7ü&Úüõ½ÿ�ÁuÇÿ�£þmþzÞÿ�àºãÿ�ÖÍÿ� ¶‡ÿ�=oð]qÿ�Æèÿ�„ÛCÿ�ž·¿ø.¸ÿ�ãu³U$Õ4ø®&·’þÕ'†?:Xše ‘ÿ�y†rާŠ�£ÿ� ¶‡ÿ�=oð]qÿ�Æèÿ�„ÛCÿ�ž·¿ø.¸ÿ�ãu§öË_µ­§ÚaûKFfXwå�°^»r@ÏNEK¹C„,7Hä×ù΀1ÿ�á6Ðÿ�ç­ïþ ®?øÝð›hóÖ÷ÿ�×ün¶h  oøM´?ùë{ÿ�‚ëþ7Yº×Å è6Iww-ï–Ò¬_ñã*ò{å”�'׎®®¸?øk:M¥ÜÆ È4óì?<ò€ƒû �rÚãØ JÖâñ\3ë—¾+ñš—S1¶²Ó!c0•A>K‚çœdãµiCi¦Ïs ºxÿ�Æ‹$Î#ÌM€±à µ¸ñ5ÞéÚuž‘§Ãa§ÛGmk íŽ(ÆŠ¥âõZwý„mÿ�ô1@ŸðÜÿ�Ðñâ¿ü ‡ÿ�Qÿ�Ïý+ÿ�À¨øÕv4P&‡áÙtY¦’MXÔÄŠ&¡2:§ºíEæšÞÒ¼­F8ã’/·Þ%쬌 £+©PAÜ›°A–õ­Ú(“ÀVˆ»VÔåo>ÛoäžÚÜF œàçŽ*Fð5›¹Ý©j&!{öèâÌ[c“íh;wœyž¤ñÆk¨¢€9ýSÁúnµ.®Ú‹Ï<Z¥¬V²ÂÅBƱ—*S Ù‘ŽI<ŸÂ©Éà;Y ¯ý¯©¬³V’Aäå¼­,dæ<}ö$ñÎ�õÏYE�p§á^“&œ–7–£s p[A™mØ"À\Åòù[[cƒ¸6Aç'šÝÕ<2u Kk]kUÒb´O-FœñÄ`¸#¼��5»E�qßðÜÿ�Ðñâ¿ü ‡ÿ�Qÿ�Ïý+ÿ�À¨øÕv4P˜Im¦Å<°ŸøÕž)'ÙpX« ‹r#JÍÔ¼Moà·³Ö!ñV¿©Ú¬â+»=Rãn7FÞR�ë÷°O ^‰áßùÏÿ�a ßý)–¦Ö´M;Ä:\ºn«j—6²™±ìAêõ£|LðÞ·¦Ç}k-ðË.Óc3A#’ŠGlõïWÿ�á6Ðÿ�ç­ïþ ®?øÝ`|=ðmß$Õt”¸7Z<Ò‹›9XèHÚèã×pGžJî(þmþzÞÿ�àºãÿ�Ñÿ� ¶‡ÿ�=oð]qÿ�Æëf¢¹º·²¶’æêx ·‰KI,®Pz’x€2ÿ�á6Ðÿ�ç­ïþ ®?øÝð›hóÖ÷ÿ�×ün´VþÍÕ™nàeXÄÌD€Îó÷N=8© ž«x®-åI •Ç$l]HÈ Ž#½�eÂm¡ÿ�Ï[ßü\ñº?á6Ðÿ�ç­ïþ ®?øÝl++¢º0eaAÈ"–€1¿á6Ðÿ�ç­ïþ ®?øÝð›hóÖ÷ÿ�×ün¶h  oøM´?ùë{ÿ�‚ëþ7Gü&Úüõ½ÿ�ÁuÇÿ�­š(/V²ÖmšâÆV’4sn£*ÂÜv«µ‰áßõºÏý„_ÿ�@JÛ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±µÏù xþ ÿ�¤ÓÖÍs~-Ô­t™t+ËÇd5’6sÍ´àp ŸÒ€7h®gþ†ÿ�çòçÿ��.?øŠ?á`xoþ.ðãÿ�ˆ šŠæá`xoþ.ðãÿ�ˆ£þ†ÿ�çòçÿ��.?øŠ�髟Õü6uéš¼3ˆZ{{µÛŸ´[¶gýö«ø¨á`xoþ.ðãÿ�ˆ£þ†ÿ�çòçÿ��.?øŠ�ɺ𧈈$Ô"¹Žq4wvîòêsÄÑÇ,±ºyJ¨DeV=§i¸$çŠað†¾N™îÖyíཱུiT¸GK24D0\³*)SžIÚrHÙÿ�…á¿ùü¹ÿ�À þ"øXÿ�ŸËŸü�¸ÿ�â(CÖ:†›¢¥¦¥qö‰ã–]²™šRc21Œ` ! ©'=:šÖ®gþ†ÿ�çòçÿ��.?øŠ?á`xoþ.ðãÿ�ˆ šŠæá`xoþ.ðãÿ�ˆª÷ß</ac5Ü·w%"RÄ >À”'§$P]Y ÿ�U§ØFßÿ�Cç°ü@ÄÚµíÝŸŠot°Ú¥¶™ç<ì^F-í àñ’io5¨\iÖ¶þ<Ögš[èM&(À;Æ&Ü sŠ�õú+—ÿ�„kÄô=j¿øgÿ�Æhÿ�„kÄô=j¿øgÿ�Æh¨¢²4}/RÓ啯¼Ayª+( “Áa¨òÑIük T½“Sð·öÛOq2ê{¡>dLX¤?3‡ái8Îy4ÛQ^s¥YxÓNÒô;8#»·†×NŽÎâm]UÖÕ‡˜‡;‹ B ÚFxÇ5«áeñOö«hêÂ×Éb¢í슆Ü�É]ňËu 81æ€;+Ì4ÿ�jvŸÙwé¢íu;ûÖ°v‰ž-ÂãÉ1ÅC çE<a‰“Q_ˆé¤<6Rj^%̾TÀXñl¦ðxȸãåäÎrphÒè¯9Óÿ�ábIâ»q;ÞC ¬û‰¹†Éåt(™I<·@o0LƒÖ»-cMÔ5'ìíÖ•³vÿ�³Ã žfqŒùˆØÆLuçµ�jQ\¿ü#^ ÿ�¡ëUÿ�À+?þ3Gü#^ ÿ�¡ëUÿ�À+?þ3@ü;ÿ� Ùÿ�ì!{ÿ�¥2Öµy=Ž¥ö»´ŸÇºÌE}t®‘éH2'“'p· ç¯<c¥#|H·ð¶³nÚ—‰.õmæ'Wk;È–ÞUåHÛV.9 àôÍ�zÍÊ[üHð½Õ´SÅ{pRE§ì3žöLT¿ð°<7ÿ�?—?øqÿ�ÄPMQÜAÕ´¶ó ’P££te#Â¹ßøXÿ�ŸËŸü�¸ÿ�â(ÿ�…á¿ùü¹ÿ�À þ"€)ZøCQ²ðÝŽ–º¤’›yñ#¥ÃÛ¼¶È®±Gæ'̸Ê1ÇRt5SCð¯ˆì—BŽî桱·K+˜­µ)ÌsB°4yQB¾ý‘‚6ãulÂÀðßüþ\ÿ�àÇÿ�Gü, ÿ�ÏåÏþ�\ñ“áÏ x‡H}�KwE§Ä–÷&¥<±Ï…”‘(P|¬=àq]ås?ð°<7ÿ�?—?øqÿ�ÄQÿ� Ãóùsÿ�€üE�tÔW3ÿ� Ãóùsÿ�€üEð°<7ÿ�?—?øqÿ�ÄPMEs?ð°<7ÿ�?—?øqÿ�ÄQÿ� Ãóùsÿ�€üE�ixwýn³ÿ�aÿ�жëšðn£mªA«]Ú;</¨¾ FÈ~âv` t´�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V6¹ÿ�!/ÿ�ØA¿ôšzÙ¬msþB^ÿ�°ƒé4ô¥EPEPÐdÖ\>&Ðnl:Þ›+y«î6>càýâx©©õ{í]ÿ�N<k·’5>ònR»‡¸Îk÷IÖõ :$Óôkia»³}ÐÜ9(fYN?t6ýÌä Çæã²¢ºº·²¶’æîx­íâ]ÒK+„T¤ž�® ø5ø¯$¾/fÏ’[jï¶ö2� ãnШHPA$zîhzN§§èwÖ×b+›™¼¥¸¿šå]J€7´ƒŒÙUP 1Þ€6í¯ìï ·pNB«‘¾VSÁèG ÷«Ìø7Ã÷Þµ¼Òä{y4Ô›}‹+±•P”pT”ð¤òàqŠé¨�®3âG†õ?hÖ¾±•mí®nïn[‘'8 žX¶ÜöMvtP7†<-¥xCGM3I·ò¢s»rò·vcÜÿ�‘Nñú­;þÂ6ÿ�ú­zÈñú­;þÂ6ÿ�ú  ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€0¼;ÿ� Ùÿ�ì!{ÿ�¥2Õ?ø+Hñ¶luH¾tÉ‚á8’=ÁôõƒùUÏÿ�È6û^ÿ�éLµ­@§ÃÍTðç…SBÕJÉ%„¯¡Èšw+Ln+ƒÓo¦ ê袀 «©ØiVÿ�hÔo­¬àÜ̸•c\žƒ,@ÍZ¬MgN¿“U°Õ4èín&´Žh~Ïu+FŒ$Ù– ªÄ0Ùòœ†aÆhBÓTÓõ $ŽÊúÚåãUgXfW*¤€x\Uºà5¯ øŠûR½¹Ó¦´ÓÄš|0[µ­ôДš?9eDÃ&éºA Èç{ß ø†í&Š|4×+,�ëwh üù ° Š7&1¼µ�u·¦ŸguµÍý¬#H‘K2«²¨Ë0ä€:žÕb)cž$–HÜnWCÃÔÖ¹ŸøfëÄVñY}š;›3çÚÜLìJÌ8UncaÜò;é-ŒæÖ#t‘¥ÁAæ,LYcœ#>€%¢Š(�¢Š(/ÿëuŸû¿þ€•·Xžÿ�[¬ÿ�ØEÿ�ô­º�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+œñf¡o¥Í¡]ÝDK¨|¨^VæÚq÷P*èë\ÿ�—‡ÿ�ì ßúM=�gÂu¡Qÿ�ÁU×ÿ�£þ­ ûúþ ®¿øÝttP9ÿ� Ö…ýýGÿ�W_ünøN´/ïê?ø*ºÿ�ãuÑÑ@çü'Z÷õü]ñº?á:п¿¨ÿ�àªëÿ�×GYÞ+ðååеµ×ô©î åEy>r0z>¦€)ÿ�Âu¡Qÿ�ÁU×ÿ�£þ­ ûúþ ®¿øÝnKykͽ´×0ÇqpXAÈJTe¶ƒÉÀäã ¤ŽúÎe¢ºÅ»˜æ+ >S€ Vô8 àúŠ�Äÿ�„ëBþþ£ÿ�‚«¯þ7Gü'Z÷õü]ñºè!š+˜#ž RXdPé"0ee# ‚:‚;Óèœÿ�„ëBþþ£ÿ�‚«¯þ7HÞ<ÐK4š€P2IÒî°?òt•‡ãmNûÂz…†Žªo¯"6ѳ¶ÕŒ?ÊÎOmªXñÏÐ/Å OjÖöžÕïtëa3]ÝC¦´ò³BĪcp£ø‹èzuíä×ÓéÖÑx×_–I/ Th©©.0w5¸çÒøáÖ“à=<­°ûF£*ââõ× ýö¨þÏoÏ5µâõZwý„mÿ�ô1@áñýZ¯þYÿ�ñš?áñýZ¯þYÿ�ñšê(  KÔ´ùekï^jŠÊ¤ðACê<´Rå¬|(Ÿð—x‡U¸ðéÚá®,n’V‘ÛʉCFå‹+oI[Ÿ3'œŠô (É­´_ø3]Ó<Ah·v’¶ÖVAj‘¬ÞZ€Êë Á ’AP£iè+¢ð~Ÿ¯Úx—P½Öíçi/´û_6å¾Îg¥ßˆÎ⸑v³p'€+·¢€<¡<­[Ûi—66 j`Õ¯.šÓ04–âC8ŠH‹ÂÉåç˜ÔsvðüEXôáÔ™£2-Ñ„X~õEÒì?9soæŒ Û:s^•E�p#âêº2ÜI<:|rÎ/ °ÚÉ$Éæ·—æmp1mæ0Nàr¸®¯XÓu GÉû»u¥lÝ¿ìðÃ'™œc>b61ƒÓyíZ”P/ÿ�׈?èzÕð Ïÿ�ŒÑÿ�׈?èzÕð Ïÿ�Œ×QE�y…ìÖIum/¼A‘_]+¬:"J¤‰äÉÜ-È9êpp #Ž”–?¬|;¬Üé^!Õï/¡”Ç%•äšsC) v²:_º~`ÁyŽ£èÿ�lÿ�ö½ÿ�Ò™k™ø‰ðÃLñÕ©JÚk1.!»†¢¸î¾ýGè@6á:п¿¨ÿ�àªëÿ�Ñÿ� Ö…ýýGÿ�W_ün´´~t ªÇ³PXU.Fìƒ bpH${Ñ sþ­ ûúþ ®¿øÝðh_ßÔðUuÿ�Æë£ª:–·¤èËjº•ŠÊHŒÝ\$AÈëÄg¨  ¯øN´/ïê?ø*ºÿ�ãtÂu¡Qÿ�ÁU×ÿ�­«MBËPd²¼·¹FA"´2«‚¤z¬ö>•júb[]\¶£h°Z9ŽæS:……Æ2®s…##ƒê('þ­ ûúþ ®¿øÝðh_ßÔðUuÿ�ÆëzK«x§Š '‰%˜‘là3 üxì K@çü'Z÷õü]ñº?á:п¿¨ÿ�àªëÿ�×GE�sŸðh_ßÔðUuÿ�Æèÿ�„ëBþþ£ÿ�‚«¯þ7]…àûû}J^æØÈbmEñæDÑ·ÜOá`ü«¤¬Oÿ�­Öì"ÿ�úVÝ�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�®ÈKÃÿ�öoý&ž¶k›ñn¥k¤Ë¡^^;¤ ¨JFÎy¶œúPíÌÿ�Âá¿ùû¹ÿ�À þ"øOü7ÿ�?w?øqÿ�ÄPMEs?ðŸøoþ~îðãÿ�ˆ£þÿ� ÿ�ÏÝÏþ�\ñÓW iá~¤ÚÃt5qz¦Fm‚tóȸòÇ%dhÊò¬0N1ŠÔÿ�„ÿ�Ãó÷sÿ�€üEðŸøoþ~îðãÿ�ˆ v/x¹@óu±=ÂÞOp—SÞ4žNëy¢C~PÙƒ2’»ˆù8<ñ½áíXÐc×6Cm1º¸K›Q>¥4¬[ÉŽ6Y$xË� yæàã'ü'þÿ�Ÿ»Ÿü�¸ÿ�â(ÿ�„ÿ�Ãó÷sÿ�€üE�_ð®Ÿy¤øOIÓ/ÄêÎÖ;g0H]b…ªy�c‚qÎ2uë™ÿ�„ÿ�Ãó÷sÿ�€üEðŸøoþ~îðãÿ�ˆ šŠæá?ðßüýÜÿ�àÇÿ�Gü'þÿ�Ÿ»Ÿü�¸ÿ�â(¦¬ªÓ¿ì#oÿ�¡Š¡ÿ� ÿ�†ÿ�çîçÿ��.?øŠ£¨øÃDÔçÒí-.'iŸQ·ÚÒd|wd€;º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€0¼;ÿ� Ùÿ�ì!{ÿ�¥2ÖµqšgŒt=6+Ë;«‰Öxµ Àálæp?Òd=U={»ÿ� ÿ�†ÿ�çîçÿ��.?øŠ�騮gþÿ� ÿ�ÏÝÏþ�\ñÂá¿ùû¹ÿ�À þ"€:jç<U¤jZ¬ºAÓÖ ¶·O4Ì÷O…hd‹ä*ÏïKsº~ÿ� ÿ�†ÿ�çîçÿ��.?øŠ?á?ðßüýÜÿ�àÇÿ�@Þ#ðψõLi:›X[\ _-a¿’&Ê4†\Œ!ÜT6vdŽMgj^ñ£§ë6­}[á0U[ùSÌsm)$¬‘Ø19)§Ìö®‹þÿ� ÿ�ÏÝÏþ�\ñÂá¿ùû¹ÿ�À þ"€$Õ,µ»íK÷Ûiê–W?i»ÝvùÃ$L±þëæÍ$·;@ÀÎGE\Ïü'þÿ�Ÿ»Ÿü�¸ÿ�â(ÿ�„ÿ�Ãó÷sÿ�€üE�tÔW3ÿ� ÿ�†ÿ�çîçÿ��.?øŠ?á?ðßüýÜÿ�àÇÿ�@5Ìÿ�Âá¿ùû¹ÿ�À þ"øOü7ÿ�?w?øqÿ�ÄP—‡Öë?öý+n¹¯êÚ¤½Ý£³Âú‹à´l‡î'f�×K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@çº{â=[ÄòÜx‹Z·[]bKXbµ¸TEŒG�SÝmÂ'ý ^$ÿ�À´ÿ�â(¤‚☄¶óG,d‘¾6 2:ò+3Yÿ�§‡ÿ�ì ÿ�úM=y¿ƒ~jºµ>©wâ«Ës,í!¶Óœª¸$‘ænÙô}`cSððÎÓÛ“ÿ�^ÓÐÅQ@Q@dŸx|;!×tÀë/WíqäIýο{Û­kWÿ� êÃì1Øÿ�jêfŠ -3Î<9òòTì^IÞ1Ãhfønæá-àñ•,îâ4Ž;ØÙ™É (�䓃ǵXÓõÝV–H´ÝVÆöH†dKk„ Î9 N9W7ËX®eœkº¹2Íò-ðΗ/r§ýNGïdsÇcŽ€b-ÂæŸ$ú‡ö…”›ÜÝ‘ã7VñA<ÆfU ä¶âÛ2Y˜|¼cv�XúœQëpiM¢iíå¸ð6£VsœÊ½½jíaAáû¦×lµ«ýfyní ’"ÞŠÙ•Ê–ùHg)ÿ�Xy_BAÝ Š( ±¼Iþ£Oÿ�°¿þ†+f±¼Iþ£Oÿ�°¿þ†(fŠ( Š( Š( Š( Š( Š(  È.oû^ÿ�éLµ¯Yÿ�\ßö½ÿ�Ò™k^€™QK1  d’p�¬ËhrA¶·¦Í%Ã…c»ŒŒ:…�òG|U½FÆ SL»Óî6÷P¼…8%YJœÜÀÁ6âê ‰õmJåã0ù‚O$ „2"¶1÷\“•Á?ÄZ€4 ño†înÞiRÎî#Hã½™œ’€I8<{U?]Ñõid‹MÕlodˆfD¶¸I ã¤ãEsqü8µŠæYÆ»«“,ÑÏ "ß ér÷*Ôä~öG<v8è"Ñ|!®iòO¨hYA©½Íщ3uoÌfeP¾Kn-³%™‡ËÆ7`�uêqO¬Ýéb9V{hb™€ÚÉ#H«‚zÄÙÈ©o5}3O¸† ÝFÒÚióåG4ê&:íäþ‡†uX®5 HøŽs«ÞZ­¶ô¶‰mâØÌÈR2¬ß.÷áœçqÉèVαá+Mjúk™®îá6Ÿb¹Š"›'‹ç¶å$æ?*TóÖ€%>0ðÀâ= ÕŸ·EóóŽ>nyãëO>+ðàû6uý(}¨n·ÿ�L÷£vܯ?7Ì1Ç~+ ëáÅ­ÝȺ—]ÕþÓ¼HÒ³åœ< 'nGÙ � 'N[5o>Ïq¨ÙÛhLú8†ùnÝån%7R¤®€vìܧU†þÇ ¦¡vö6o<vw޽ ·Û½¾›ÙWó#ó¥Ó¯¡ÔôËMBÜ8†êš0ëµ¶²†ŽJÇ—G×µIí5=~Ý!‘q»MÓÄ2uä+Ì¥Hà¿mYÛ›K8mÌòNcP¦Yq¹Ï©Ú�ü�Ð@ÑE ¯Ö¿ì"ÿ�úVÅݵ§—ö›ˆ¡ó\G˜áw¹8 3Ô“ÐVV†¥ß\PÌ¥µ—¨ýÚr+Î5Ï‚w—Þ.°×-|U7•wÒ-ô…¥‚|¹�à€>PWhب®_þÉ?èjñ'þ§ÿ�Yϧ]è^4ðìI¯ëp]µÂÍ ÝÀt`±è¹¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Žðü~øÇþÆ¿ôL5Ø×˜x{Y×4íkÅÐ鞸Õa:ì¬ÓÅy A[ʈmð=�9éÍoÂQâßú'·¿ø3µÿ�âè±®sÅv ©Ï ÚµÍÕ¸mA™k1ŠA‹iÏ 9¯?ðGÅOkº´öWšþÕ'hþÙgˆÄ`11s±Ñ‡Jô½`çSðñÆ?ÓÛƒÿ�^ÓÐøBaÿ� ÿ�ˆÿ�ði'øÑÿ�L?ôñþ $ÿ�éè cþ˜è?â?üIþ4ÂýüGÿ�ƒI?ƺz(˜ÿ�„&úøÿ�’ð„Ãÿ�Aÿ�ÿ�àÒOñ®ž¼çþ.´Cþž.Ê¿˜¿è>P› ³iûßgÎýÙýïÝÇz�ßÿ�„&úøÿ�’ð„Ãÿ�Aÿ�ÿ�àÒOñ®jѾ"Ǩ³Nš¼¶âæ&û;kEö—+•!³ösçxn@êÿ� ø£T{›»ëëëýOFK‹«EšHî3"NDEÕ å),\’˜ëÈEÿ�L?ôñþ $ÿ�?á ‡þƒþ#ÿ�Á¤ŸãQÇ5Ρã/SµÑ¯WN0Iy2,?3¼,»£vñå0å:°Ç‘ÕÐ1ÿ�L?ôñþ $ÿ�?á ‡þƒþ#ÿ�Á¤Ÿã]=ÌÂýüGÿ�ƒI?Ƴõ? E§K¥Ü®¯­NWQ·ýÝÍûȇçTðk·¬o¨Óÿ�ì#oÿ�¡Š�Ù¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(‰Ò|)üwM¬k5 ÓåÛêkþ“ áG¯ÿ�ÂýüGÿ�ƒI?Æ´<5ÿ� ¹¿ì!{ÿ�¥2Ö½�sð„Ãÿ�Aÿ�ÿ�àÒOñ£þ˜è?â?üIþ5»©›Ñ¥^4Foü‡û0—îy›NÝÞÙÆk³ÿ�„ÛíÖEÿ�´þÎ^# »ûÌ>p“Ëço—/Ëçvwñ@¿ð„Ãÿ�Aÿ�ÿ�àÒOñ£þ˜è?â?üIþ5ÍZ7ÄXõiÓW–Ü\ÄÑ£ÿ�gmh¾ÒâEr¤6~Îc#ï È_á_jsw}}}©èÉquh³CiÆdIȈ¢Ú¡p<¥%‹€2Sy�è¿á ‡þƒþ#ÿ�Á¤ŸãGü!0ÿ�ÐÄø4“üj¦§sˆ5½y|=ª®›&ŸÄæ$I'x¤›v!fD«Ê ÚÙÍŸÂVu\hÞx¶û!0´_g)öŸ‰üÏŸËÿ�W/Ÿ½žÔ/ü!0ÿ�ÐÄø4“ühÿ�„&úøÿ�’sgâ0¸…­F²mƒä«fù¬žd9ÑwmûN6œªÏ;ª½î±ã(u /HŽþñ5yà¾tµ“ì9$ëöy%Çð˜Ø‡ß!Ú8&€:ÿ�øBaÿ� ÿ�ˆÿ�ði'øÑÿ�L?ôñþ $ÿ�UÕìõý"æÒß@ÔuF+Ÿ²Ýé²@Û'í4lg;wgŽ:dmèVíg iö¯Ñ-ã‹dî@@ÙI¸çŒç“Ö€2?á ‡þƒþ#ÿ�Á¤ŸãGü!0ÿ�ÐÄø4“ük§¢€9ÏY :-^Ùn.nj/ûË™LŽ~DêÇ“]aèŒQõÇTiu EÆ[÷iÀÉ?S^gâ?Š9ÓüY¦i‹àù,-g½ŠÊÂF¹Ë±eÿ�V¥³Ž§ê(Ú+—×ÿ�äxðýt»ÿ�Ñ«ÂQâßú'·¿ø3µÿ�âë1õmkQñ÷…“SðÕÆ’Š÷E[¸f|“Ɖ�z%Q@Q@Q@Q@Q@W9âßMá˜ôùÚÊH®§h^[ËÆ·Hqɸ‘ñˆØtàãß�ÈÇñB¶³Ó[½¶ÓnµÞHbóL¨È¤â@1´N2LäV„>2Ñ'¸†=ÊI+*-Œñí,ÛSqd0!K`1  ê+ŽÖ~#hún‡wj·7SCÏ»Ú\Eæ‰YãÛµ”©$aIˆÈ®ŠÇX³Ô®®­íMÃ=¬†9Yí¤DÜ +²…|~é4~Š( ;Àñûãûfÿ�Ñ0×c\w€ÿ�ã÷Æ?ö0Íÿ�¢a®Æ€UQB¢…QÐ\ÿ�Šf½¶›CžÃN’þhïÉ0¤Š‡ÞaÍÀëÞº(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�⪎£ªëײé°ÜøVæÒí ró¸dŽHVÎ+µ¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8­/Vñœ7p[øRâ꿼)0¼†0àÜHAÚÄ×½^þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9íÿ�ÿ�Еsÿ�ƒ þ*íÿ�ÿ�Еsÿ�ƒ þ*ºz(˜þßñ/ý W?ø0·ÿ�â¨þßñ/ý W?ø0·ÿ�â«§¢€9ß Ky<Z¬×Ú|–3> çÉ‘ÕÈœ©ÁÐQšZ(�®__ÿ�‘ãÂ?õÒïÿ�Dê+—×ÿ�äxðýt»ÿ�Ñ€:Š(¢€ +’ñgŒfðÎ¥ioöm8Áqm,ÿ�h½ÔÝA£RœDüŸ5qÈïÓŒÊÿ�<?iu†¥z¶z¬–Épö%ZGMÀa2 †lœ'°9 ¢ŠÂ·ñ†‹sp Šk¯8ƒ„kÔî ælåï6 Û>ö9Æ+:ëâ’N:xží¯gµU m<@E<Š‹.ã1ódd€ÛXE�uÔU 'X³ÖíM͉¸hAÀy­¤‡wºïQ¸{ŒŠ¿@Q@eë>Ó5ÿ�³iC,¢ÙÙâ q$@¥NB0Ý•,0sÃКԢ€9‹_‡¾²‚8-ôù#†8äˆF.æ*c~Z6ðÈNNÓ $ Õ˜|¢C5¼Â§x 3_O&v6ä Îð¬IPÙ NF+zŠ�çÏ‚´°–É­gh%‡ y1fe‹îà ÆyëVm<1¥YÅ{qO"ßD!¸ûEܳ@.ļÝ1’IëZôP/ÿ� çÂ_ô‡þûþ*øW>ÿ� ,?÷Ûÿ�ñUÔQ@?Ãk+};þË;H„Vñkó* $…L>µÜWà?øýñýŒ3è˜k± ¢–æ$‚9+Îæ8‡÷˜+6?%cøTµÏøšÂÏSºÐmoí »·mA‹E<bD$[NFA ‚ŠÂÿ�„#Âô+è¿øÿ�Gü!ÿ�¡_Eÿ�À¿øš�Ý¢°¿áðŸý ú/þ�Eÿ�ÄÑÿ�G„ÿ�èWÑð/þ&€7h¬/øB<'ÿ�B¾‹ÿ�€ñ4Âá?úô_ü�‹ÿ�‰  Ú+ þ ÿ�Я¢ÿ�à_üMð„xOþ…}ÿ��"ÿ�âhvŠæÃ ]N=9¼7£ ©"y‘›¨bÜp]8Îy«_ð„xOþ…}ÿ��"ÿ�âhvŠÂÿ�„#Âô+è¿øÿ�Gü!ÿ�¡_Eÿ�À¿øš�ݨ®.aµXÌÒH±®{³ùÖ?ü!ÿ�¡_Eÿ�À¿øšÌÖ<-áí=´Ë›-K¶5}²Ãg0ùÇBh°¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(+{˜n£2@áÐ;ÆHþò1V~-r:/…<;kuuy iW7j¥åšÎ7v?irHÉ­øB<'ÿ�B¾‹ÿ�€ñ4»EaÂá?úô_ü�‹ÿ�‰£þ ÿ�Я¢ÿ�à_üM�nÑX_ð„xOþ…}ÿ��"ÿ�âhÿ�„#Âô+è¿øÿ�@´W1†<6¡q`žÑͼi,ˆtØÆË9+‚ GééV¿áðŸý ú/þ�Eÿ�ÄÐí…ÿ�G„ÿ�èWÑð/þ&øB<'ÿ�B¾‹ÿ�€ñ4»Es‡†<¦Z=ÕÏ…ô¯-zˆt••ÏÑ ^j}§„üe寇49mî#Yb‘l"ã ‚>^àŠ�é(¬/øB<'ÿ�B¾‹ÿ�€ñ4Âá?úô_ü�‹ÿ�‰  ˆ.a¹i„20Èc“ÂÀÈŠ–¹ï XÚiˬ[XÚÁkê/¶(#£äN€q] �ÅøÇL²Ö<UáK-BžÙå¹-Ä$ŽžõÚW/¯ÿ�Èñáúéwÿ�¢ �ð®|%ÿ�@Xï·ÿ�â¨ÿ�…sá/úÃÿ�ÿ�Š®¢Š�ÁÕ¼ ë Ôlä™a·6¨‚æTO(à•*¬䪞AåWÐbüáÈ 0%”â# @Wí³á•S??,¼mcó.Åt´P^Ñáº+Ñœ<ǾŽâž^ü—?¼ÙòùŸ{f¢ohN†ÀZÜ%¼1E½X$O¾1¸>㱎W'åíŠèh  :^‘e£C4VI"¬Ò™¤2Lò³9�g.Iè c Å^¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ó'‹›ZñqÐ.4Hí·eÞ/à•ß•pQÔc{g9­ï+âOüþøSÿ��î?øíÿ�ßÿ�ØÃ7þ‰†»�ñÏÙ|]V™ï®íãÒLîBj¹•ÊäýÀ§xö Àq^—¬gûOÃÙäý½³úöž¶+Ÿñ2^Iu ­„ðAqý Ûdž*ôió•¤þtÐQX_dñgý´_üKÿ�É4}“ÅŸôÑðQ/ÿ�$Ðí…öOÐkEÿ�ÁD¿ü“GÙ<Yÿ�A­ÿ�ÿ�òM�nלÿ�¬͢@Ú…eWCqý›û×Ü÷ÌÞg7 ·å—no”溟²x³þƒZ/þ %ÿ�äš>ÉâÏú h¿ø(—ÿ�’h´øNöz‹^C¤$†æ+•)£•hÙ.^q°‰¾PD†3þ¨íËü+á]kC¹»Õ¬ô{ k‰..£Km³“™QÞX¼ÐåFÕUÚ»AqÏë>ÉâÏú h¿ø(—ÿ�’hû'‹?è5¢ÿ�à¢_þI âÒµ«ŸéúÝíÕ…º[ÚÍnö0ÄòœHP’&%sÌHÕŽ7rèk ìž,ÿ� Ö‹ÿ�‚‰ù&²x³þƒZ/þ %ÿ�äš�Ý¢°¾ÉâÏú h¿ø(—ÿ�’hû'‹?è5¢ÿ�à¢_þI  ÚÆñ'ú?þÂ6ÿ�ú¨þÉâÏú h¿ø(—ÿ�’k3X·ñ 6˜×º¦—4Q·Üé²DÇçÎÀ~F€; (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2<5ÿ� ¹¿ì!{ÿ�¥2Ö½r:5¿ˆžÖ鬵].s¨^ìŽm6IÒdêÂuò£öOÐkEÿ�ÁD¿ü“@z™Ôt«Ë<–ææ„MÃǹHܧÔg"¸Û?‡f¾²ºûN™·x˜‹M3ÉÁŽBùŒù‡ËgÎÙ;Ô[ÿ�dñgý´_üKÿ�É4}“ÅŸôÑðQ/ÿ�$Ð!iðìõ¼†ÿ�HI ÌW*SG*Ѳ\¼ãa| ‰ gý…QÛ—øWºևsw«Yèö×\]F–3:Ûf '2£¼±y¡Êª«µv‚ãž3Ö}“ÅŸôÑðQ/ÿ�$ÑöOÐkEÿ�ÁD¿ü“@!ÒüQ¡©ëfçI×VqÛÃd°ÈñÄÑ»²˜²–½|‹Ô`q†<Ià¿øHu_¶È#Shm±-¯šð¿÷°>ñåIóòpÙÚ¼qWþÉâÏú h¿ø(—ÿ�’hû'‹?è5¢ÿ�à¢_þI WTøV5Mtãy¦C‹‰çýÞ•ˆ¢ó-ü±'›û°?ÖN\ã¥dÝü.¼“Ä諜-.bæ½¶ÓR5µv�"S9e|Â''öOÐkEÿ�ÁD¿ü“GÙ<Yÿ�A­ÿ�ÿ�òM�G*x¯Q´žÚH´)p·\Kx}ÆÝ‘ÇñÈôî5ôëW²Óm­]¢f†5Bb‹ËN>UÉÚ¾ƒ'¹ëYŸdñgý´_üKÿ�É4}“ÅŸôÑðQ/ÿ�$Ðí…öOÐkEÿ�ÁD¿ü“GÙ<Yÿ�A­ÿ�ÿ�òM�.ˆ¾¸#eY¡&ÖeÜòÓŒŒÄW™x“HøÁ'ŠôÉÓQµ¸ÓVö' bLPÆ7õÉ잣sp:Šô %Ú.°·ÓÁ4ÿ�Ú/¹à„ħ䢖b?:èhŽò¾$ÿ�Ïï…?ðãÿ�ŽÖc§ŠWÇÞþ߸Ѥ‹}×–, •$ç;ݸ¯D®__ÿ�‘ãÂ?õÒïÿ�D�ê(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�óxŸIðþ¯âÛmRy šMrY‘~Í+îC@ª‘Ôè?ábx_þæÿ�À)ÿ�øŠê( 2ðÿ�Ç ë›i·‘Üé÷‚SC"HAÀÃ(ÈéÜ íuƒOÃÇÖýºÿ�×´ôº?…ô/™JÒí­d”–’DOÉäå'ó¨<Kw„ú%äë)‚òdh¡y ƒo2ƒ…ã$èzŠçÿ�á4Ñ?ç¥ïþ ®?øÝðšhŸóÒ÷ÿ�×ün€: +Ÿÿ�„ÓDÿ�ž—¿ø.¸ÿ�ãtÂi¢ÏKßü\ñº�è+Îáiÿ�¢%ÊØXuwiþõvýË'—òÜß,Yçk|ÜWMÿ� ¦‰ÿ�=/ð]qÿ�Æèÿ�„ÓDÿ�ž—¿ø.¸ÿ�ãtÉÚ|[Iõ¶š×HŽ4¹ŠtÖ3+ܽ¹tSÜ@ç‘ò:œóŠÝðÏe×õË­.{ h%·û@so{ç˜Ú¼¢$fï¼½r銿ÿ� ¦‰ÿ�=/ð]qÿ�Æë9ü ºaÓe°žîÌÜ=ד}§]]+YÇš‚K1ÿ�S@× †ˆz~†5H3=…Ìf]7ùŠÐ˜øûÙ(f8îžÕÒW1gâ iÖ‘ÚYE=µ´c TèŠ3žGSÿ�Âi¢ÏKßü\ñº�è(®þMþz^ÿ�àºãÿ�Ñÿ� ¦‰ÿ�=/ð]qÿ�Æè ¬o¨Óÿ�ì#oÿ�¡ŠƒþMþz^ÿ�àºãÿ�Õ OÄZv«&kgöǘßÀØk�Id�qï@}Q@Q@Q@Q@Q@Q@ÿ�\ßö½ÿ�Ò™k^¹+ĺn—ÕçÛt¿»%EŒì0×0 ªAz½ÿ� ¦‰ÿ�=/ð]qÿ�Æè[S½n•y~a’amÌbˆeßj“µG©Æq¶¾Ó}emöm2Qrñ(kMSÎÞ$§îÇ–7²ctƒŠAæ·?á4Ñ?ç¥ïþ ®?øÝðšhŸóÒ÷ÿ�×ün€9;O‹i>¢ÖÓZ鯗1BΚÀfe{—·.Šc€(ò>GSžq[¾ñ¬ºþ¹u¥Ïam¶ÿ�hmï|óC7”DƒbìÝ÷—®@=1Wÿ�á4Ñ?ç¥ïþ ®?øÝbÇ?WL:l¶ÝÙ›‡ºòo´ë« %bK8óQ°If?ð#êhFßÅV+ãMoMŸ[³û=¼æ7š1ä9’U“'‚09¦áýêg‰<iÿ�þ«öi¬¶†ëÝyO0þHiódù9\¼½sBkþ‹KþÌŠÖXì6”û,zLëÓÕvˆñƒ“‘ß&®Âi¢ÏKßü\ñº�æ5OŠgMÑQ:eÇúDðþïUýÔ¾]¿Ÿº'ò¿x8òÏBóœÔ|\0ÞË�°ÒgX¼ÂßYyÁÛî¾wa8 ¹dqž3]wü&š'üô½ÿ�ÁuÇÿ�ª2ë¾›Z·ÕÜêFöÞ'†'·B1†À»NH^£øG   oßÁ¦èSÜÜjÿ�ÙH8 Äwe_4É>£×§QcB¹–ï@Óî'¹†æi-ãi'ƒý\¯´ndÿ�dœ‘íŠç4ÝKÁ4Ï6—¥Gc+®Ö{]X™—® X†Eiÿ�Âi¢ÏKßü\ñº�è(®þMþz^ÿ�àºãÿ�Ñÿ� ¦‰ÿ�=/ð]qÿ�ÆèMÖ'×$lí]BF8œÓ°ë\>§ñßÖž!µÒ,­®îÌ—)÷ D �HR ±'FqÁæ»_ \%äz¥ÔK(†k÷ẖ4e†ÄÃ�zƒÚ­êѵ[Û[Ûí2Ú{»YX'ddl¤!‡=@ã¥�eÿ�ÂÄð¿üÿ�Íÿ�€Sÿ�ñ“7‰4½Ç~M2if0½ÓI›y(09e­wÔPEPEPEPEPEPEPEPEPEPE#2¢–b@É$àTíµ2ö yíuIâ¹bIêË+�I Aùˆ�ôô4vŠ­g¨Ùj++XÞ[Ý,2˜e0J®AÕ†žjÆå.P0Ü�$gOä*�Z(¦K4VèiR5,¨Ø�YˆU÷$€rE�>Š®·öm{ö%»€Ý˜Ì¾@y›m-·9Àn3ëÅ%þ£c¥Z›­FöÞÎÝH[‰V4ôåˆfŠ‚ÚúÒð)µº‚pÑ$Êb6c|ìqál‡*z�(¨,ïmu U¹²¹†æÝÉ ,2BA àŽ8 ¨©è�¢Š(�¢Š(�¢ŠMÊ\ a¸�HÏ ŸÈþT�´V=¯‹<7}z–Vž Ò®.Ü•X"½Ýˆêƒ’x5¤/-M½0›Cš'<½˜ÎíÝ6ãœôÅ�MER]cLy¬¡]JÍ¥¾C%¢ Ô›„qhÆ~aŽr3Ç5v€ (¢€ (¢€ (¬øŠÛÃvö—\IÅÔv¦HB•‰œáY÷0Âç#=hbŠÉ¼ñ¥†{}p­6²ƒI,Q‰˜c„gp½r¿1^A¦i)ѵ«®­o  Ö‘ÞInò§›n¡‘A;x#ÛÞ€6h¬}'ÅZ¶–§OÕì§’ê:(Vu2ïòg<ƒèA­\kzU­Ë[\jvPÎ¥E%«ç'?1àzö  ÔW?wãoØÍr·Œ ²Û'óWË{2 Îxû…ŽpztŸBñ>™âØZÌ©uH²YÉ,fhöHђʬ~RÊpsƒÅ�lÑ\ý—‹ìo5ý[Ek{«{­0nÌ«¶UÚ¬JcÆyÁùǾ¦ø×G¾ÑáÔ®çM&9­Öé#Ôn!Ì T,¤8RY@$ŽHÅ�tTVñŽ“ ü–w²›—P:r –EIå, © ~R®¸ÎHÉ¡¥jözΜoí$ mæË“ †òähË IBAôÅ�_¢³†¿£5­½ÐÕ¬ ½ÌžL‹”Ù+çTç Ù`sÅW.ðÓg"ÒN1œ^ÇÆ[hþ/ïqõâ€6hªkšMΠöú¥”·±–W·ŽáE+À¨9dgÓ5^_xv�Æm{KŒ,¼ŒaÐe”äõ’;P½AõÍ&9R'Õ,–G€Ü¢5ÂÑ“ åqÎî•Jxn ¾:æŸ%ªKO,W(ê!wp9Éì è(rŠÀÖ<RšEü‰¥__­d»[< Ž2¡Éi%Nžbß^ǵñv—0¹ûS8Ú[Aqt/#û8”¸U˜…oä̸'4»E`iËaªÞH8ôë³·›4(&cH†6gC,‰Ì:óŠÓÒu(uÇT·Y Ûxî#Y� Ô0Œàúš�¹EPEPEPEPEPEPEPEPEP\.á]_Fµñ-®Ÿ,i 7è|ÿ�©y“sèLãØ·­wTP–Üx{Ä0é:äz]¦¹ Ä·¦âÍßTMìMš"´æáeˆ ¬ØÃ†­­hZ…߉®õlõÕš¢j~FÖI¤óQ€rнv° »ŽîòŠ�ägÓüEðÒÒßθ¶ñ$°¹?h d¸ŒÊÌ‚®TƒÎ0ÜÖDžñ¶ŠÑÜ›ÝVæ-jÚâKÞ°$ë3æ8�º�ºž™‹E�yß…üCl×k§é:ȸŽ=[ì×Qjª Ë5ÂInFf * Ê@ç ä“Úøž;ëÈ4ƃE½ÑÀ{iàY¬æ µN$mŒ0ò)äLñ]Eæ7Ú?‰>×$‘é:‚É-¾’²>~ÆÜ$cÍR©åÈT.�''ë;V¸Ö­¬mm5ñ­®›%ÅÕëC¨§œ¶†çt%gÿ�ºGŒŒ“–Ï$.}~¨ÝèºV¡yåî™esuoþ¦i WxùÏÊÄdsé@sãfÔ´ö¶K­6Å/®æ’5’7 ÉxÓ+:¬ê¬†7Øs¼ƒ» œ5tÚ‡‰d½Ò¾Õr÷–é+™ÛHÿ�B(s^VÞƒ†9>SŠë¨ 4ÕtI©LñG«ËÛCÈmõ1ËÚQ“Ë_1v·Fà ¹™N†mõ·‰4ÝYžæ-zÎt­M¾Ó6¬k |ËM»ff ±©R@ÉÜ-Û×h û?ÄhO¶-U­ŸRó…¢êCímkäãhŸÌÀý÷ï>ÿ�Üãýš§q¦øº-J †·ÕîçŠ3|–ú’¥¼’¤‡ídDÒ¨ÃFBà® Çzôª(È­t.¯ š³ë7vÿ�k”Ü¥–  GŒ¤ÁYí òZ”*mÙÀÎKtžÒµ‹}jÛQÖlï–æMÒÚâY/ ¸ŒÊ%Ü‹! [r2å¹RH=ÍÃxwHÔ WϪiºŒ ײÁhÒÛíÏq$ªñ4o¹$ ÛrÄcwrkÃÚ?ìu î’ê+ -2Þ´I#pÍL’Fß¿ –l2¶×þ² Àúå¾ð÷ˆ¬ç𴺆¨nÓ¤‚#Û#0Á Ø´ v 0[Ífl€IV˜¥E�QE�QE�Voˆ4[x~ûG»ÿ�Sw F[*{0÷}+JŠ�ûðñšÇI†+‘çi³ –KˆÌ¢fòÞ6.2 'ÌfÎ~÷<Ö?…üuáËÍ6fÕm®#²³{1v>Iue€n$H~lÀ $wÐ v”P¦xïN—@oí[W]!b@Ãa˜G°‚Íæg&9G' È�*׉¼ gâ]@^Éu5´ÂÛÈÌ@rÂE’'>èÁˆíWUE�rz—„.¯5Ë›}NÞÞ9c±X"kBþSZÎfBÇÌÁ,À”ãñËt?ê:V³m>¯kp‘}»tqØËý¦e™¾o5±†PŒýk®¢€9 <,Úìú¼š’}¤ßµä-ˆ þs.q·%;gŠü>ÔæðÝ–’uëPöÚTúGœ4æùíäX—îù¼8ò‡ÍœŸ”u®úŠ�ä¢ðž¦º™Ô%Ö-^íDÔ@[UÏÙM³&<ÓÕ0AÏt#ŠK)Ò/lõ NâY®~Ø¢KY&·‰Vá¤fÌ>c#02¾Œð¿Ýºê(Ô|qªiðA>¥j“ýžâÒæX,v,±M³Ì*›þI?v¸| ?/8—_õ[›K‹íûÁ¨@Íý–Ä…¼”I!¾ê1…ýs^‡E�qºo†µ&ñö©}$qZǨ ¸!§±$·%S>gÈFrÍTµø{{cw¦Ü[kVÛ´ÿ�.8Dºy`bŠ)£Œ6%|\HY¸ÜBð1Ï{E�yî•ðÅô»û Ó¬,óYÚC ‡†UO2Ú(ä³û­† 9lÜj[/‡úŠ[nZ·•i§[ÂÃNaƒg7›0ó~mÄÀc¶Ç=íÍkžŸ[Öì/%¹±{H-ä¶žÖâÄËæ¬9V.ÆýÒí889<ÕxãÄ:­ÕçöÀ¶YÔ‘ÀêѼ#)gYˆ>kýݤ|¸#ö”P¤|?—H€E£lÉ ò^ÛFm¤{m¾Í±·JņÌÎAúWKáÝ*]Ãzn“-Êܵ•²[‰–/,: Ú§nN�Ï=*Ó¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ�����������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasbc4.jpg������������������������������������������0000664�0000000�0000000�00000034711�15030617045�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��‰ "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (ªz®¢šN-ìË2¡QåÅ·s`  Ĥu"€.QXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�Qý·{ÿ�BÞ«ÿ�-øõ�lÑXßÛw¿ô-ê¿÷ò×ÿ�TSø’[HÄ·:© [Õ …­È]̤õ#   ê(¢€ (¢€ +m}ÓQº²·ÑïîÚØ¨’HZ¹e �ß"ž‡Òí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÆþÛ½ÿ�¡oUÿ�¿–¿üzí»ßúõ_ûùkÿ�ǨfŠÎÒõq©ÉuY\ÚKlê’GpPžT0 £0è}kF€ (¢€ (¢€ (¢€ (¢€ (¢€ Åñgü‹³×X?ôjVÕs?$xütèÅXMm‚úøè~Š( Š( Š( Š( Š( €IÀ÷¬i³^ÙCseo©XJ.mœp)žÁ”²ç¶ìö®bïAñzÝ„Ñ4²ZÙݼ‘¥²À«óÚJ­7Ïóoó¤a·%v‘ÁÁÀEy½œ>>iîÛTqäÜ$(ÈJ¤ý™£'Ë-‘p¹ ŒÀÎOcá¬À5æfÔCÊœFHÞY>_Ë’›IÇz�×¢Š(�¢Š(�¢Š(�¢Š(�¬ÈOúíþJجÈOúíþJ�ߢŠ(�¢Š(Nÿ�‘‹^ÿ�®°ÿ�襭zÈÓ¿äb׿ë¬?ú)k^€ (¢€ (¢€ (¢€ (¢€ (®6çÃúµ¤—±é+ vËp·VeU Äò¸í òåWÍeÏÊû´Ø‚dFqÅ-yµž™ã=: >ÊÍõÐj=Ô§ìE)/˰Á!ÌNXÀcoj»¡ÇãXµ=/E賎Ö8õ!;Ú¼eÄ ”®d-æªó’nØ òŠ( Š( Š( Š( Š(  ­þCÚ÷ýv‡ÿ�E-nVÿ�!í{þ»Cÿ�¢–·(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®Wâ;ð5ë*4„MlB®2$ ê«—ø‡ÿ�"Ußýw¶ÿ�ÑñÐí½Cþ…}_þþÚñú?¶õúõûûiÿ�ÇëfŠ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶h  oí½Cþ…}_þþÚñú?¶õúõûûiÿ�ÇëfŠ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶h  oí½Cþ…}_þþÚñú?¶õúõûûiÿ�ÇëfŠ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶$jZ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶h  oí½Cþ…}_þþÚñú?¶õúõûûiÿ�ÇëfŠ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶h  oí½Cþ…}_þþÚñú?¶õúõûûiÿ�ÇëfŠ�ÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~¶h  oí½Cþ…}_þþÚñúËñ­{6ŽÑ¿‡u8¦ƒ2I%±UýêuÛ1?®¶±üQÿ� ?ë´ú5(~Š( Š( 6 ^x<[â{}þôÇ,ž„(Ì*Gß‘OéZ_Ûz‡ý ú¿ýý´ÿ�ãõSDÿ�‘×Å¿õÞ×ÿ�D-t”ý·¨Я«ÿ�ßÛOþ?GöÞ¡ÿ�B¾¯ÿ�m?øýlÑ@ßÛz‡ý ú¿ýý´ÿ�ãômêô+êÿ�÷öÓÿ�ÖÍý·¨Я«ÿ�ßÛOþ?GöÞ¡ÿ�B¾¯ÿ�m?øýlÑ@ßÛz‡ý ú¿ýý´ÿ�ãômêô+êÿ�÷öÓÿ�ÖÍý·¨Я«ÿ�ßÛOþ?GöÞ¡ÿ�B¾¯ÿ�m?øýldqÍ-�cmêô+êÿ�÷öÓÿ�Ñý·¨Я«ÿ�ßÛOþ?[4P7öÞ¡ÿ�B¾¯ÿ�m?øýÛz‡ý ú¿ýý´ÿ�ãõ³E�cmêô+êÿ�÷öÓÿ�Ñý·¨Я«ÿ�ßÛOþ?[4P7öÞ¡ÿ�B¾¯ÿ�m?øýÛz‡ý ú¿ýý´ÿ�ãõ³E�cmêô+êÿ�÷öÓÿ�Ñý·¨Я«ÿ�ßÛOþ?[4P7öÞ¡ÿ�B¾¯ÿ�m?øýÛz‡ý ú¿ýý´ÿ�ãõ³E�axjæ[­c^’k+‹6ó¢ýÜíoõKýÆaú×IXz?ü‡µïúíþŠZÜ Š( Š( Š( Š( Š( ¹ˆò%]ÿ�×{oýuÊüF,¾¼)HÂkl"c-ûøø PGEcmêô+êÿ�÷öÓÿ�Ñý·¨Я«ÿ�ßÛOþ?@4V7öÞ¡ÿ�B¾¯ÿ�m?øýÛz‡ý ú¿ýý´ÿ�ãô³Ecmêô+êÿ�÷öÓÿ�Ôž&º±µ{™ü1¬“е«N: ³Þ€: å<a¦_j‡æÓì ÓÙ]KqöÈ¢A"ªœ°bÚ<……9ÇÒþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~€9;=#]‹Å77GGžºÔ¾Ñ=ümlùˆX˜”.æ-•›%A_ºÇ=H¦5·Ä»w"ÔZå’9 <¶¶Â9dÇÈ«+"ð§*î-Ÿ—muÿ�Ûz‡ý ú¿ýý´ÿ�ãômêô+êÿ�÷öÓÿ�Ї5Ç…åÕÿ�¶“V¹këáq ÂØÚEð¡Ü-‘•e#3ŒŒòkü?}>·ª_龚ÂêçRŽòßVDn Ä6–ß—)'Èê�2e°r+´þÛÔ?èWÕÿ�ïí§ÿ�¨/<Mucj÷3øcX&7kV<œtg½�röpøø§»mQÇ“p {!*“öfŒœ,¶EÂä‚09;z­pÚlz7‰­õ õ)Hf-¦HÑI;lÝ$haæ2›°Ø à‚+SûoPÿ�¡_Wÿ�¿¶Ÿü~í½Cþ…}_þþÚñú�ätmü?­Ž—k¢jw•ÔkËp÷VòJì…vn$D­`ã21Œ°ú¯‰u=CÄðè7ÑO”¯k m…ÌrùvÇ 2¹e-sä ÁA#7öÞ¡ÿ�B¾¯ÿ�m?øýÛz‡ý ú¿ýý´ÿ�ãôcA]Et;EÕ¤ioÂbghÒ6cž¥Q™AÆ2‘ž•£XßÛz‡ý ú¿ýý´ÿ�ãõ牮¬m^æ k$Æâ­jÇ“Ž‚l÷ ‚ŠÆþÛÔ?èWÕÿ�ïí§ÿ�£ûoPÿ�¡_Wÿ�¿¶Ÿü~€6h¬oí½Cþ…}_þþÚñú?¶õúõûûiÿ�Çèf±üQÿ� ?ë´ú5)?¶õúõûûiÿ�Çë3_Õ/î4–‰¼9ªB¦hI‘ÞØª*œ²“Û° Ί( Š( SDÿ�‘×Å¿õÞ×ÿ�D-t•ÆY_ÝYøãÅbúõZkožÝ¡�~á8ýäŠ*ÚþÛÔ?èWÕÿ�ïí§ÿ�  š+ûoPÿ�¡_Wÿ�¿¶Ÿü~í½Cþ…}_þþÚñú�Ù¢±¿¶õúõûûiÿ�ÇèþÛÔ?èWÕÿ�ïí§ÿ�  š+Ÿ‡Ä·sÝ\[Gá`Ëo·ÌíF7 Œ7=;UíKþ…m_þþÚñú�á?áÖ‡…¤Ó‡YìeÕói¦X7ûq”ÆFÿ�,§’Ë»ït­T²ñ¢Ú[Ëi4ön³Ý¼¶o« Nï ,3ƒ´¨|N>nOMý±©Э«ÿ�ßÛOþ?GöÆ¥ÿ�B¶¯ÿ�m?øý�qcKñÕõ’ê·+owgqå-ai¶\«È$Ø ¨ ®Æçw¡ÕñEÕ·Šôd²´Ðu Iâ½µ¸x.´ç·SL& ÈD$ eÆrwzdÖÿ�öÆ¥ÿ�B¶¯ÿ�m?øýÛ—ý Ú¿ýý´ÿ�ãôÇC¥ø¾Æêôˆo4Ý6kÔ“ìhö¥¹hÕÐîËnÀ’@•ššÂãÆ\úÚšj‡O‚Ö(õ4Ãr ù%K"Äfo4!$da‰à]>%¹¸¼¹µ‹ÃZ»Mm·Í]ö£ná‘σǥXþØÔ¿èVÕÿ�ïí§ÿ� _Ó´ÿ�Þè:’xeõ(à½eº7–+ ¬>L«‚·¨y°û¤õ¡ºÖnô¿‰bÕá0iÚØXÉ•‰ãk… #ia2qÀ13qÍtßÛ—ý Ú¿ýý´ÿ�ãôlj_ô+jÿ�÷öÓÿ�ÐF¾3ÿ�„ŽÑµY”iÂÆ1<qA§Ø7¶ýþ`mù�+·¾k¯¬íKþ…m_þþÚñú?¶5/úµûûiÿ�ÇèbŠçàñ-ÍÍÕÕ´^ÕÚ[VT™|ËQ´• ?å·<x«Û—ý Ú¿ýý´ÿ�ãô±Ecÿ�lj_ô+jÿ�÷öÓÿ�Ñý±©Э«ÿ�ßÛOþ?@V?öÆ¥ÿ�B¶¯ÿ�m?øýÛ—ý Ú¿ýý´ÿ�ãô�ýþCÚ÷ýv‡ÿ�E-nW7ỉ®uy籸³:/ÝÎÑ–ÿ�T¿Üf­t”�QE�QE�QE�QE�QE�W?ã_ù$ÿ�¯›_ý(Žº å~#F%ð=älXšØ¬Tÿ�¯¡Š�èë–ñ–˜÷vöÏg¡¶¡v×v†IÄ CÂJÀ™x 0�g$óZ¿ðŠi¿óßWÿ�ÁÅßÿ�¤>Ó€'ÎÕϰÖ.ÿ�øí�qמ;µ¼¿†ÊKˆ´Øî`ŠÂ -¥°e CÊÙÏ—¼m*>m¸8Ȭû½cÆZ7‡Mηye+g ’_°e§iJ\Ç2»Jê[ÚI +³Ó´'TÓÞîÜë¸I¦€ÆúÅÈmñHѰÿ�]¼‡ôªºl¨úRÂuåžžu v}Zä,yY÷ÉÇN¼Ðׇ¿µ?°íÿ�¶w}»/¿vÍÛw›¶|»¶mÝ·ŒçU»ÿ�ù]×þF©ÿ�Â)¦ÿ�Ï}_ÿ�üv°ü]á›|;+,Ú¡&{t!õ[—4ÈB:@…y&¹à»»ÍgY¼_ ÝOúÕ¥ÒÛ*iæ+˜PGæ1.|ÀNɸܹóFGÌõèÿ�ðŠi¿óßWÿ�ÁÅßÿ�£þM7þ{êÿ�ø8»ÿ�ã´Ãxøö®Ý,Íö8gŠ[$K[W‰"GVgbhPÄ®ÐwÚÝk×Rñ?Štønôßµßk:uÓÜCp²éò­²½¬¨±‰Sû¥#pÀ`¸È)>•ªhúF“oó¾¶ñÉq ¾cÕîŽÖ–EIÌ£Î3ŒÕïøE4ßùï«ÿ�àâïÿ�ŽÐ/AªG©ë“ê {7WOkÃÄÂ50FÂH*áÏ Ë³ÿ� ë¯úâÿ�ÈÕ?øE4ßùï«ÿ�àâïÿ�ŽÖ‹¼3a‡ee›T$Ïn„>«rà†™àÈGBh°®'ź4·ÚÜwPøaui–ÝV§xZÜ;ì3È;ãÉ<d WEÿ�¦›ÿ�=õü]ÿ�ñÚ£ªhúF“oó¾¶ñÉq ¾cÕîŽÖ–EIÌ£Î3ŒÐ mªxóY²½—Ãú¬·pGw=¹ºhìÜá. ¡…A@O”2ÞaPr õÍoZÅñÏ«}ªóä>JÚí­ÔÜžc¡.O™·Ìù\m Œ1·¤O¬ÝéaõµžÚ§fm^ëk$"®—=bläÕJæ-×N×/d_lÑY…Ò ^ãq LJþûlqÜæ€.xÂóJðóØ^ÚÍ‘^Ý2˜³*<Ï"¾"%FCŽ00Aà VÝÿ�üƒ®¿ë‹ÿ�#Tÿ�áÓ羯ÿ�ƒ‹¿þ;X~.ðÍ„>•–mP“=ºú­Ë‚dƒ!  ¹_éGQÔ|97öö¬VwÍ4ß- .£‰só´mŸ¹ž V·ü"šoü÷Õÿ�ðqwÿ�Çhÿ�„SMÿ�žú¿þ.ÿ�øí�yüšoí§Ô.ìÒq©_ZÙ ï<»FѼ¾jD›”7)S'%A�U‹ËÝ jÅÿ�´d·¹±¹ŠÚPlâ /•†ÖÞ¡¤¯$>AË«XÒt]I¹Ô®¥×t.Ë«vî@ë€%ç×ð«qxgIžš+­Uã‘C#®³vCÈ#÷´£iæ}Ž7Íó<µßçmßœs»gËŸ]¼zqM¾ÿ�}ÏýroäjŸü"šoü÷Õÿ�ðqwÿ�Çk+Ä^°¶ÑžhæÔˤÐ$Õ.]Ö§Ui?ˆ Š( Š( sHÿ�‘ŸÄßõóþ“Ç[ÁÕ¼¶ó¢É ¨Qч ¤`ƒøW)i¡ÚßøÇÄ÷M|¬g·\[ßM�âÝ;Fà½ê/YÛø{D:…¼Z¥ã á„Äu»Õ?¼‘cl.ÌC2ð’3Œœ—s¥x’µÛ½Gm*þmB3o)Ki$û/“ r×ÌÙÐçk#¿HoÄ…º¾ïªI•/ÙJ¦žªeÂc$1,Éç‚2HRòiÖºÖ‡ޝ¨ëªiZu…âÚ$²k™+2+ó„uù]8ÁÏÍØlE­ø:K¹­Æ§­»¤ÑD<›ÍJOõ¡|²Øáw–œÃ �O¡êúæ¥ãÍJÞé§Ól¯ wIöm#[«ù?xd’¹åp¬2H®ö¼ÞßWÐŽŸq-Òë©wk|¶WÖú¥ü»K\½ºº¶Fõ&6<£oÞâºÿ�øEôÿ�ùøÕÿ�ðqwÿ�Ç(ý·ü‡o?ëÚý ZÑ®BÇÂZ|zþ¤~Óª‘$PIÆ«rûë‚D™?w¿­jÿ�Â-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;@¼JšƒkžžÇE¸½[K¶ši¢’† bÛóº±ù¤VàïUo›Séú‡ü"׳@š\ðÜl–Û™$0º§Í(Ý)×=2Ã#_þm?þ~5ü]ÿ�ñÚÍÓ4«BïU·s«DÚ}ض$k—l0Ç(oõƒJ=¨CÁ¶÷–^ Ñlõ Y-o-l¢·š)†E NTAÆG=ÎEnV/ü"Úüüjÿ�ø8»ÿ�ã´Â-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;@éò6øýëoý]qW†ì_Å:üf}Slfßj·@œÇžH“'ñ­ßøE´ÿ�ùøÕÿ�ðqwÿ�Çh?ÅvR]ßéo‡®/å·'[¸ž0`ÁAy”1�1Pr¹<bŽ·c-þ·c'ƒ.®e†ò:ËmûÍÑ•0;4 ”9\-ƒÓ$ïÂ-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;Y:f•Þ«¨Ù]Áª[‹Q$±ø‚îPá÷pß8Úà(%ye œÐ§„l_Nðݽ£ØËc±¤"ÚFBc ìØ”($…Ží[•‹ÿ�¶Ÿÿ�?¿þ.ÿ�øíð‹iÿ�óñ«ÿ�àâïÿ�ŽÐZ'üŒ¾&ÿ�¯¨?ôž:ß®'GðÝ‹ø‹ÄHgÕ�Žâ6ê·@œÀ‡’$Éëß>•¹ÿ�¶Ÿÿ�?¿þ.ÿ�øí�fx»K¹Ôõ%ít´MgsÒÞ'© g,ÂE,£‚£à7ª:î•uªkÚ~¦|*ò5´-öæÙŒèð²˜CÉ*Ì2­û²<œWCÿ�¶Ÿÿ�?¿þ.ÿ�øíbi6V×ú步ܦ¥–& ¿xûÖMø$3)äí¸sÃ�lx;JŸEð½µ…ÄkÆó0BŠÒ»*¤¨!Xå qŠÝ¬_øE´ÿ�ùøÕÿ�ðqwÿ�Çhÿ�„[Oÿ�Ÿ_ÿ�üv€Jÿ�‘‡^ÿ�®Ðÿ�襭šç|;c†³¯C Ü2ùМÏq$Íþ©‰ØŸÖº*�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+•øŒÅ<xËHDÖÄ"ã'÷ñð2@ýkª®câü‰w_õÞÛÿ�J#  ¿Ûš‡ý º¿ýý´ÿ�ãôÙ5Iãt_ ë1³¬–y_q™ˆÏÔVåG9 o#à$˜Ô³;� 'ð L°Õ4«Iíà·ñsy­3ï’]4”ydóÀ ;‹@Þx鈴}÷F»ÒfŽÃÅ“¦—fÖPC<ºnÃmá¶°cþ®>rÈ=NmhšŒ)¦ê°É‰šÕçŒOkveŽ<"ùHî¾abrÃÆâùr)èÈuMþ&iciŒ¦îÞðDñ6ý‘1‘Bå2?xøs去±@Oöæ¡ÿ�B®¯ÿ�m?øýaø»X¾“î¯á½R!ö‹c¹äµ#‰ã8âbyéøöë]µ`xÏþE©?ëê×ÿ�J#  ·5úuûûiÿ�ÇèþÜÔ?èUÕÿ�ïí§ÿ�­ª(Žñê ´†Ù´X¤SÇ>m$ÓòÏ«¦wÈÝTñŒãœŽ+_ûsPÿ�¡WWÿ�¿¶Ÿü~©øÝÀÑ„k.¯Ķ tØ®Äÿ�ßa ’@ëµ¾Vè}GH½¶•ÈkuÆ€1ÿ�·5úuûûiÿ�ÇëÅÚÅôžu ê‘´[Ï%©OÇÏOÇ·Zí«Æò-Iÿ�_V¿úQ�Ký¹¨Ы«ÿ�ßÛOþ?Y ]CÄÛ6‘âKŠxçͤš~YãutÎù£*ž1œs‘Åv5ÌøÝÀÑ„k.¯Ķ tØ®Äÿ�ßa ’@ëµ¾Vè}@kZêGXÔu1aâ´–úÝ-Ê$ºpXU™6|ùÈ.ýIûç9ÀÅI´[ë?]³–ÓÅÍ´û®›ÌÓ�c2¯Í€ *©ê~PA$鮢¶þ-»»Hü@ÑGhÂ{vµ¹x¤rÊAŒòò£+û³–ÜInjƒ\Â¾äø¥í\Æ©“|¯æ ùhØ.õV$dG•ãvÒÐÛêúœ6ÑDþÖçt@­,’Yn÷ŽÙ€ÉëÀÐ Çñv±}'‡]_Ãz¤CíÇsÉjGÆqÄÄóÓñíÖºm ÍþÀÓÄòÏ4«o¼·˜ä…�³)ÁRzà€Fy¨xÏþE©?ëê×ÿ�J#  ·5úuûûiÿ�ÇèþÜÔ?èUÕÿ�ïí§ÿ�­ª(×mäñ¶[ÿ� k2[@]«gɬ˴3+ÈÜ®I\cž¹Sü6·žЭ´ˆ4]Al»"{©ì™Õ;.VUàvâ¢øç¢y-¬*ýªO<é«tÃËò$ÆñnAÇ™åc'×¶êèôµÂ9¥ý¸L/>Éž'`dl·Álç8ï@¿·5úuûûiÿ�Çë+Äz½ìÚ3Ç'‡u8¦ƒ2I%±UýêuÛ1?®¾±¼Uÿ�"ô¿õÚý”³EPEPiª]ZøÇÄðâß^(žÜù–ï6éÇï$Sùf§ÕÙõË%´¿ð¦¸Ð¬‰(^A §*w%À<稰«šGüŒþ&ÿ�¯˜?ôž:ÐÕ 7Z5õºÂómäAKå3åHÚøIéžÝh“mÍÅæÿ�xåÂ]JÍ©ÆXL¼+£}«102¸àÐ�0uÜßëÃU°Ñõ»ÌÒ5ÂK*ÉÀÞöÐÚ¨0ÊËò;TW/¨ørM:ÛNÓäðÿ�ö…âÀ¶öË`—gÉ”’A-Êë “¼‚¹Û›rGñY­ïK]Æ“Ÿ$F¶ö¶îª¸_1¢/ ,ÙÝ•(ôj�Ò‹ÃÚt&ržñ3íó ÕPä¬Þz°Í× %%回Nz_í½Cþ…}_þþÚñúçntßKâ½þî)®à²»^"[tDíZ9$9mû„®rªÄmˆ®î€9{jkúÿ�„_UÌq@˜ÛgøÛ'3üXàžŸ…jÿ�njô*êÿ�÷öÓÿ�Õ›oùÞ×´úµ£@¿Ûš‡ý º¿ýý´ÿ�ãõ™¥!Ñ®/g²ð§ˆ—² nkøfÞÀ`žäàãŒpt7öÅׇ¼qi†nÖMNVû f[a»}ªC¿ýncžpÀ€N@Ôñ<º¾¡§ÛGmá‹Ù¤ŽîÆè=°d 2K"Ò 0W‚A'®9  _íÍCþ…]_þþÚñú?·5úuûûiÿ�Çê®êøóX¹}&{{¬­âŽéž-’ÉÌXíW-È•pJºsŽ3ÒP¥kËâ}džõFf6ùA%®S÷}ó69ö&··5úuûûiÿ�Çê#þFßÿ�½mÿ�¢ë   _íÍCþ…]_þþÚñúÍÓCiWÚø[Ä&IÎ\ϨÅ89;D—,=öã8‚³IlkòNéxcO²HÖ¦;‚»ñ)_; ß1,X©8AÉÕ´Û‹¿ Úè’øWP¼HmáŠ)ZâÙå‹ ‚ùiT TópÇ ‘œ€tÛš‡ý º¿ýý´ÿ�ãônjô*êÿ�÷öÓÿ�Õ ?á8ŸQ>šÈ›f…ï<Èv\ÊÙm®]ˆÚîQ»ž@®¦€8X¾_x‰‡†õG/q *²Zå?pƒ3cߌõü+sûsPÿ�¡WWÿ�¿¶Ÿü~¢Ñ?äeñ7ý}Aÿ�¤ñÖý�bÿ�njô*êÿ�÷öÓÿ�Ö~šÍ¤™šÓÂZæù±½æ¼·™ˆ»žà ³aG'šÆÿ�„zf>!ü,ßgÕ<”A-é“tÅKùn>d ±ÞyÏAK¬èZ¥÷‚¬ü5&„..`²†(ï·ÂñE0¿xÞ`�Œn_Ÿ#š�ê?·5úuûûiÿ�ÇèþÜÔ?èUÕÿ�ïí§ÿ�¬û"oøX:Êéc‡ì’[I+³rÅã(à¡,Fó�#¼]U�s¾¹–ëYפšÆâͼèw;F[ýRÿ�q˜~µÑV6•ÿ�#½ÿ�]¡ÿ�ÑK[4�QE�QE�QE�QE�QE�V-¢¼ðµÍ¼ÁŒo,�…r§ýrt ‚? ߬¯[\]èSEkO6øÝcVP[lŠÄÄ€õ"€"ÿ�„[Oÿ�Ÿ_ÿ�üv‘¼/§ª“çë8ÅÞOþE©?¶o¿èZÕïå¯ÿ�¨æÕoå‚HLJµˆË©Pé-®åÈê31¦A¥êšuõÜ0x‰Îf†KwÖ¦ÞΪ ËpPðÃØ ãªi·z&§u¦B–þ%ˆj>h†I5™J†~àBÜá€(r0ÜŠž×M¾²ŽëÈ´ñBOw–žq.žåù›ÛwíWîãÈ$æ“OÑÛN¼´t_L–’I4K%ŽÄš@þdƒkƒ–ó#;~n``þm?þ~5ü]ÿ�ñÚÃñw†ìaðëºOªö‹aóê·N9ž1ÐÈGíoÿ�lßеªÿ�ßË_þ=Y^!¸ÕuM­-ü7© ÐÉóËlTsÿ�-½Ð—ü"Úüüjÿ�ø8»ÿ�ã´Â-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;OþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�ǨÄzW‡tÆ¿<AqÞyÌùAë‡sô\±ì jÿ�Â-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;YºìwZý§Øît]z+G “Á–[n† ¾é ÝJ‘ëZ¿Û7ßô-j¿÷ò×ÿ�P?áÓÿ�çãWÿ�ÁÅßÿ�¬?xnÆ»¤ú¡?h¶>«tã™ã „wü:Öÿ�öÍ÷ý Z¯ýüµÿ�ãÕ•âWTÑÚÒßÃzÍ Ÿ<¶Àa%G?òÛÑM�iÂ-§ÿ�ÏÆ¯ÿ�ƒ‹¿þ;Y^ ³Ò¼;¦5üéâ ˆþóÈÖgÊ\<럢å`kcûfûþ…­WþþZÿ�ñêÊ×cº×í>Çs¢ëÑZ8dž¤²ÛpŒ0U÷HHêTZ�d6zT¾$—Ddñs¤áemfs *6ÎYNX}å\àã8ªM&’§WO²x—ÍÓ6SûrA½[v1¹Ú8RHb¬8äU™,¯%ÔnoßMñ'Ú¥‰á†Q-ˆ6±»+2ÆCô%ïîÆ8ÆMBºeêý®AgâoµÝÖ[²úy‘£Mûc#vÒ£Ìnª[ž¼ �ÖÓô=/RÓmoá›[X®aI‘dÕîÕ€`y¼k3ÅÞ±‡Ã®é>¨OÚ-‡ÏªÝ8æxÇC!ÿ�µ­aw>™§ZØZx_UKkX’“Ͷ;Q@�gÎô©ø†ãUÕ4v´·ðÞ¤$3C'Ï-°IQÏü¶ôS@_ð‹iÿ�óñ«ÿ�àâïÿ�ŽÑÿ�¶Ÿÿ�?¿þ.ÿ�øí?ûfûþ…­WþþZÿ�ñê?¶o¿èZÕïå¯ÿ�  ÝWKÒ´˜afmzâk‰D6öðj÷&IŸim«º`£åV$’� y©4í ÊþÐO$^!³}ÅL7:½ÈqƒþÌÄî ¦ê¯u«C ¶ƒ­ÛÍo(šÞâ m¾Ò»—t¥OÊÌ ‚ñV,õ FÖÕ!“DÖîœ}é§’Ï{ŸS¶P£ð�P¿ð‹iÿ�óñ«ÿ�àâïÿ�ŽÖWˆü;em£<ÑÏ©–Y  Iª\È¿ëSª´„ÄVÇöÍ÷ý Z¯ýüµÿ�ãÕCW¸ÔµM<ÙÇáíB&yb;å–Ûj"±'“ЀÐMEPEPi¡ÚßøÇÄ÷M|¬g·\[ßM�âÝ;Fà½ë[þ}?þ~5ü]ÿ�ñÊ­Ôôïës îêÚîX¤†X%‡•H!äR9SÚ®ÿ�jêô-jŸ÷ò×ÿ�Pu¬ÙéÞ¾Ôõ ]F;ˆ^ím­ ×ïæ3‹wd‘˜¨ýÚå~ñ|Ë’3Zw¿‚mµÍ=µ­aîìÝ#žoõ YØ*‘ŽrÄ/ÈH©Ç†ôñk=·ü":ëE8™dWÔÕ²³Ê2nržHÏZwü#Ö^\‘ ø€$’Ç;ªêª7I\âçïeT–êHäŒÐôÅÐ5}Qì¬ç×]E”É9Ô¯DrG.í¸%ý?‰þëcgþ}?þ~5ü]ÿ�ñÊÍÒtè´6‰´ÿ� kQ­–Ñw_E ò•™•p×;K¶ äÅkjêô-jŸ÷ò×ÿ�Pe„´øõýHý§U"H “Vä÷׉2~ïZÕÿ�„[Oÿ�Ÿ_ÿ�üvª[j:ªj·wxcR<qGÛÛwHóxåñߥ^þÙ¾ÿ�¡kUÿ�¿–¿üz€ÿ�¶Ÿÿ�?¿þ.ÿ�øísÚ|ÞÔ|]¨xrÝM®¬âYrºõËoä«¢\©S´½é]'öÍ÷ý Z¯ýüµÿ�ãÕƒgÖ™tž׌ú`ZÈú’1@ç/œÜÙ=wg€@(oþm?þ~5ü]ÿ�ñÚ?áÓÿ�çãWÿ�ÁÅßÿ�§ÿ�lßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÔÏé^±ëñ™õM±›|ªÝsy"LŸÆ·áÓÿ�çãWÿ�ÁÅßÿ�¬Û VÛ]ÕïdðÞ¥å]˜|°%¶Ïʘ9ý÷­jÿ�lßеªÿ�ßË_þ=@ ÿ�„[Oÿ�Ÿ_ÿ�üv¹OHšÎ¯-Ý–£h\ì’/ÞË“þKd1N­’6–ã® �õßÛ7ßô-j¿÷ò×ÿ�V.“¦Ûhwr]XøO[YÜ8/5ôSmÞûßnûƒ·saŽ1’2h_þm?þ~5ü]ÿ�ñÚ?áÓÿ�çãWÿ�ÁÅßÿ�§ÿ�lßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÔ£ønÅüEâ$3ê€Gqu[ N`CÉdõïŸJÜÿ�„[Oÿ�Ÿ_ÿ�üv³tÛVÓXÖnäðÞ¥åÞM‘b[l€±"þûÕMjÿ�lßеªÿ�ßË_þ=@ ÿ�„[Oÿ�Ÿ_ÿ�üv°l¬N¥|Íig¨¶–·2Û5ËxŽíeݲ;y[±·z>lž¸Åt?Û7ßô-j¿÷ò×ÿ�VdP¬£ê1x[[IÝ‹²­ì""Ç«y_hÙ»ý­¹÷  øE´ÿ�ùøÕÿ�ðqwÿ�Çhÿ�„[Oÿ�Ÿ_ÿ�üvŸý³}ÿ�BÖ«ÿ�-øõÛ7ßô-j¿÷ò×ÿ�POØÅa¬ëÐÂ÷ ¾t'3ÜI3ª_âv'õ®Š±tHîÛPÕ¯.lf³[‰c1¤Ï1 ©?#0êzÚ Š( Š( Š( Š( Š( Š( Š( ŠÂ×õ-BÃRÐ`²{UŠúõ ¸DÎÅ2Kòê>Q\œ˜Ø9V¿´ûË+;Ô±½†ÒyÚ)$œ 1¨´7jØVl†ês‚0@;*+…¾ø†²xnöîÇLÔlïWM¼½‰5aÏ!Tüê[8&HñŒç>Æ®GñÎ[™­“©‹ä–8£¶>NéÌ‚R»I³†LîeÆÜuâ€:ê+>>µƒZ}6æÊïÌkÄ·SÆDA…°Ϙr7ÝÆ2£¿O”“wEñl$ŸT´Ó­®-å±L×*âX•_wTÉVÚØ#¦E�ttWœÃñéü=áûùŤÎmS÷Lâ(¾Ë%Ïî×p9d‚Kc<ƒÒ­ëŸV×ÃÚŒÖeéÕ-๳H±7’b¼„I´ DNÖ'æàd@݃aâ«}OZ¾Ó-´íHµ›ìk‡·Ù¤6רäá¶Èëè dêZÏŠGŽ&ÑôÕ³k‚Ús)²ó "F‘ý¡X‰Qºò2@;J+Ín|mâðÆŸ©A.‘ö‰¼9q¬Ìm#(xü¦€%$+’O*Oµu/©êPøÇMÒžæÁ­¥Ó¦¹¹ #h—*|ÂOš$l<œðÐÑXþ(Ôît¯jº¶žÖæ{K9.có”¼m±K`€Aä p{çž•ÌÜx£Äv–Ú…¼¥Éyo¬ZéÑ\­¬‚ rsšH#ÏÈ;°vœd¾¢¼òøÂ Kª¥Î<«ª=`N3bðÛdn¹'†�ByÜ#Ö<aâ=!tÑ4ºd2Kkq5ÊÜY8ɱ"«ÄJDË—ËŒò�£ÑX:©{y©k±_OdÐYß­µ©†6BU¡ŽQ¸—`Ç÷¡x;IÇ8òøæI¯[N´ ºžíaµšòÞXâ²9ó`¥Æb`6œñÜÐmEq:î©ã =.dÒï®ï/žØ­½ƒe“ÉiT…{”�-ùÈÁët饟M¶–vC;D¦R‹´oÇÍ…ÜØç<dãÔК(¢€ (¢€ (¢€ (¢€ (¬Í{Z]OKDzº¼<Vâ;]›÷Háﲌe{úf€4謶ñ&ˆ”jÖNéq«¤s«²Ë#mD †'·±ô5"kÚDåŪYI'œmÄip…Œ gËÆ~þ;u  +Fñ¦­iqÞÁªÙ!6©w4s™lŒ þðòã Ô¿ð—x|3Ötô„G‹p×qˆÜ9p¡Nî~ã{ÙÁÀÕF=gK›T“K‹R³}B5Üö‹:™TqÉLäGnⱿá8±:ššØßŽÿ�û;ìacóŒþw“´|û1¸õÝŒPOEe·‰t$³¸»:Öö{gòæ—íQíÿ�ºÍœìj-ÅFµ¥Å{íºnµŠêX^dó-ÒD¾`åà÷  š+&ó_†Ç]ƒI–ÖäËqk%Ä2¨O-ö2©%².˜È wœñXú7Ä?[³²¿ƒMÔâÓo"ŽödŒD$fÚ¨p峸…Î6îã9 ºŠÌ×µ¥Ðtô¼{+«ÀóÅn#µÙ¿tŽ>û(ÁfQ׿¦k*ZÏofñiZ“Ouw5—Ù¶Ä$ŽX„…ƒ~ón“& ’ \f€:Š+†ºø›kck Õç‡õkki®¥³IçšÎ8üèˇRÍpàÆà@8ã9Ñ6ƒû^ßN:F§ºh­¥2¯’è‹9*„í±•*IÎÜÔQYš´ºöž÷‰eufymÌw[7îÊ?Üf ¬:öôÅU—ÅV¢8VÒÎööêg‘c´e!ÜÇ{*ªáä‘ëë@´Wª|B¶Ñæ°†ûEÔ šú9$ž[HyGÉ™'P[æR“ÀŒàã° Š( Š( Š( Š( Š( Š( Š( Š( Š(  :Ž‹¥jþWöž™g{ä’Ñ}¦“a=×p8<ž• ¿†´HÄvÚ&› ŽÕ T6�ꑟBEjQ@ÃÂ>Px{Ic0•Qà¦íÛ~ïÝÝÎ:gšzø[ÃÉm-²h:ZÁ)S$BÎ0®T’ ÁÁf#ê}kZŠ�Ç øn[–¹“ÃúSÎͽ¥k(ËÈ9'Î@9öSHðV›¤‰Õ¤šõ&…àxîR-²²¢(|ã«î<žy9èè  Çðæ‡,VñI£iϱ 5ª�¨ÇË€1éJžÑc±)£éëhÛ Ã|¸Ç=ýkJŠ�¡‰¤ÛÜIq—eÒ”2H–èÊýÜ2qLT‘iz|:”Ú”V±ßΡfºXTK"Œ�ñ’SØUº('þoywQÿ�`é~]Ùá~Ç& îÆ>n@<÷ª¿ð‚x?þ…Mÿ�Ðÿ�ñ5ÐQ@á=Y¥{ˆ®®c”ö×7³ÍnsÎ<‡sa·À«–‘¥[µ¾¥ÙYÂÎ$hííÒ5.1†!@û ¿E�d?…<9%£Ú¾¥5³Íç¼-gF—o#-‚FzóK…ü?lc0hZd^\ol´v£grŒÉÈï“ZÔP%·ƒ¼/gp³ÚøoG‚eÎÙ"±‰Xd`à…ÏBE]¸Ñt«´T¹Ó,¦U‹ÈX€ ìä}ÜÇN^¢€1æð—†î-`µ›ÃÚL–öû¼˜žÊ2‘îÆí Œ àgp+NÚÚÞÊÚ;kX#‚Þ% Q UE�€*Z(�¢Š(�¢Š(�¢Š(�¢Š(�¬Í{E]{OK7½º³ <WK]›÷FáÓï« U=;zf´è F×áý•©»oímNV¹–)œÃñÝ=Ò‘ˆÇü´‘óœðØì0ˇ:n™=¼¶÷¶Æ ÞtEn¹v㈋.Ud|$ß1l v4PmðÃK¶‚(Ž©ªÌ µ[[v‘âÌ(¯©\F2C@‡æÈûÙ5&±ðæÓ]¹’{ÝsWg’í0�Ê#š<ÿ�ªà‘q7NíÆ01ÙÑ@^‹á]SOñ…έ4ФyA8ÈÒFØàGåªÄĪ`[vÞ17ü+ë/°ùVÕæa9» ˜Î. ÎHòö­9û¾Ý+®¢€9]?À:fœÐ²]^ÊöíÓ27”‘¤ˆ‘·BÍ ù<Žrá‡Ú_„’Q¦\\‡xi#€È câ0Xð8bÀv�WYE�eÜèPÝë±j³\\7—i%¢Û|žVÙYÛîîÜ|´þ,|½:ç'Lð›¤Ãggky~4»GIbÓšD0ùˆC'nòw øÝ·w8®ªŠ�æo<=­k6¿dÕõè–)ãm2ÃÈI‡BL²J¤Pq´tã ØÓü'c`š~ùînç±»žò+‰Ê‡2MæoݱUH>sœcŽ+zŠ�äÿ�áÚ-„^#Öb6×ÓßÄT[²Í¿XH#÷²àïŸEÂOà K›ß·K«ê­xÃ7¡W„ÄX«¡ŒæH9R¸�¶Š�ætÿ�¶Ÿm5·ü$ZÄö󙢔[¾W.í•„’ÍÁ$ Ü#_�év·íy¤Oq£Iÿ�,×OHcŽ,€jÊüûSvAÎÅ<bºª(œ¿ð¤—×Öןð‘jÐO¬–¡£[c½]•œ°hHÉ(0�Q€2sÐÆž\h›™¶€71É>çÞE�QE�QE�QE�QE�QE�ÿÙ�������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasbd5.jpg������������������������������������������0000664�0000000�0000000�00000057176�15030617045�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�- "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ +/^Ö—@Ó–ñ쮯O¸Š×fýÒ8Dû죙G^þ™¦x/ˆmti4ëØå¸µ{¥¼¿)U ‡RC“¸AÀ#æàžh^І;”’êH“#– ¤|ÙÀÀ9w<€9'œM@V>'·žÛQ•lîĶbÒ[v$i ]»~laƒ©# Ðå…câe¿ÕMœZV¢ K�¾dÉ2DHeáËŽA�•�ãŠÜàƒƒƒŽÔ�´UgS‹EÑ/µYâ’Xlà{‰,n*ŠXã$ àõ=ÕÜVh)9’Euf'€?ŸÐÚ€'¢Š¥c©Åu¨ÛLjö"ÚMàa˜Å€® ãl‹×æ€.ÑQ-Ìw%ªÊ¦x‘dxÇUV,Ÿ©FüªZ�(¬Ëýn ?Ã÷úÌ‘HööQM3¬e™cÝ’¸lr ×"´è�¢²â×ìf†òu/äZ\ýšYHÂîÂå‡?tÁ>Äôæµ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(/Ä:dú¶ŽÖÖ²GÂOÌFPJŠT•Ccœ€v5ËkžÖüI{kªiZÍeÅ ƒÝÉ$Ry… ;»CŒ-p¦6“œ€G{E�yæ­á vþâD[ í%·Ó"xÚy#\ÚÌÒº„ò˜`ìƒæ8�g9Àä¼Gáño¾…© ]˜me¹&4Šk‚éöuhÔy¨»mÎ�^8¯p¢€3tTO± ÓK‹NIÒ7XB…-F$P�V\lÀ'…öæðéǬG8Kw„ ›|­•3å?§ß?î§¥oQ@aÑ<C{{+ÝÛiѺMÃÛ\KºùY#Y"ì#*Ń3 ¸\k*÷áýÆ£¡ÙØÜhú*[Ctò¾—ku-¼ª™"IpTŸ¸#uzEåן õýµ-¼:|ú…õœ¶‘ßϨÝ+yrG³ËhðË„É ’Äí�’Ã_KðÎ¥§Ý[]ÜØX#é-ÛËkpóMpbo5¶Ã.AžuE�q÷^ yRŠ`[i§[B]Šîq#ødØFG HÝzV&¥ðÿ�P—JÖ´7NЭ4ûëÓu‡aöbm–-è¢,›†?½ÁR2}.Š�áµ j:†­{©.“ Ë%þŸmkp—23m1Êîà7”w) œ‘Ö%ÊôÅÍW_ è¶:&«¡-å…¼vï-ž›ws›P�âE‡‘‚@'‘“Šëh 1¸øw©jš6³kªÚéÍqÚéêÓ»¥¤“M,¢PLc ™UN@ˆ`üÄæ u+öÔ,¯->‚$Xî­® –gC¿nä\8ÁÁ#¡ÊZ(‡“𭾉â==µ‹«Øõ$6¶q´p¨‰Zãóˉ0T†èq´/«©´’í]F&Óã‚�ct¹GæáŠá·.Ñ‚¡Tg,Ç9 ôPEPEPT5XÒX I]â0U†AªýRÔ¿ÕÛÿ�×Ìú�qW·š]u{G s ¢Ág HÛâÞ~g][�`95BÏÇ]hºµûx2Åd±)²Ô­;›½ þãNáÆ+·µñ^‘y«ê:M½ÜO©XÈckO:1,¤F®J.ì‘óíÉÆXvÍ7Iñ~ƒ¬èK¬[jv‹j!ŽYüÉÐmêYpÄ#s‚ ë@rø˜O—¨ K‚´ûÉç®íäZ9mÔHn# ò#ô¯#Œ5ñ&Ž|Yl¼?äHcD•o¦‘ž0ë²Y~eù·ƒŸjìí/-u Xa¹·e%…ãb85Uµý'06¯`³ …µ1›” &n‘ã?|ö^´—âëhôïëWºm… ½·±šXXÀ§k*H$c ‚F+ i°i¶WOðÄŸjyí)©)±‹fÞãÉáÎîocÍtrøËEMzÏG†ò «›‰$‰þÏqý™’6“®ýË‚ŒŽq‘”»ñdžìâ±õ›µ»¹ke¹K¨ÌHë9ÜÛ°ÊÕ”w è?ÙÚæ‹o¨ÿ�cÁoçnýÛ§£È8åN2pA®µâÞñkNt+mKK[ö…¡š).#1Ë ‰^ˆ�¸ œ–<^‘6³¥ÛÍi Ú•œrÞcìÈó¨ióÓ`'æê:Uê�ó;ÿ�ÛXé7“ iÖ—‰m,Qê¤ ¯ʲ¤U�ÛFG,â»M& ?SÒ-o›I´…§Œ9Œ¥ žÁÓ*ÃÜت—Z®euokwkoqrÛ`†Y•Sè œ±úP£x’ÏTñN£¤\xjÂÊÞÐ9ûCÞ[4˜SŒ¼�ïŒÈ'?…eZøöÂ]> î<;£ÛÍsmmu7ŠbH¦óé¤ò‡–¢ÚÄ+�]S^‰k­iW׳ÙYêvWv䉠†uy#ÁÚw(9<sÞ¬]]ÛXÚÉuwq½¼c/,Îz’xÆøhµØuÉ®à°aÔÚ( K±¬fŸj:Æ›Ó.Øb3‚2OZƒþ};þ/ì¿ì-7þ?~Çäù«öϽ·Îû>Ïõ=÷îéÎ+«—ÄÚ¶÷Skzlv÷*ͯwIBŒ±RN×)çÄ(¾û ÕìáÛþŽnSÌù—pùsžT=†hŽðÔ~"›X¹º—FºH+{9¡˜@‹,ˆ¹Q ° ¨ffÞ9zWmý“§Ð>×þü¯øUTñG‡äµ¹º]ÓÞÔq*ÝÆR"Nãœ/'Õë;ë=F>Æê ˜wó :îdqx ÿ�²tïúÚÿ�ß•ÿ� dúVœ-å"ÂÔ‡þX¯§Ò¯Ôwñí/û‡ùPZm¯ýqOä*ÍWÓÿ�äkÿ�\Sù ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@RÔ¿ÕÛÿ�×Ìú]ªZ—ú»úùÿ�B  ‘h&ßX¾Ô-õ[èEó &¶Q‹Ì¬aÆè˵ØÈéXëðãIwØ$º»žßì6ö!&H\m™¢r x,7·PAÏ õ£VŲëw¢ÆkÈ` Á¡¦Ùˆ@JÜon_pýßð‘ŽsY‡þÓo"Cý¤7˜UÞàX™Q¼äóŸ!Êóqæe²WÞ€; Dµðþ•ŸhÊB["¢É=NØ‘òQNmݵ•ÔŒ“o þ¤7îËãhŒ}ý¤®sÓ·]Õ¿n`’Âò;Ùí1=¾ø–ÅÈó\#N²|¾SDcÈE ÿ�(©|/c¯éz‡‡-®´»ß²Zh‰eq#›6Ž ¶@~F æíÊ:°ä€@Í�X»øa¥ÞÚYY˪jŸc°v{;pÐí‡*ÊWý^]~nC–Î0r k/‡vZm²Åaªê6¬—bö9!ŽÙ<¹¼¦„² ‡` m#n>P@$³Ã6:Ö‘³otšÌ«çÝÏoóYyrošIÅŒ0rgÌ‚OATmÆ1h¶° -NÛeÕÛ\µ¸ÓÅܪò—‰ÀÏ‘’ùœ[$g9 ZŸÃ½;UÖ«>¡|/E"ÊܲÉÝŽ¬Ñ^Q[h! ÎTä竹¶·½¶’Úêç·•Jɨ]OPAàŠáSþñ<SÍç‘n–¤ÛÀ-v\æå¼àÅŽà‡‚«¹N:÷7†Aepb|¶Ø!ÙægmßòîôÝÆzñ@ôÍJÑc’=+L²°Iç[X ÇÔ…5«ü>Óuuµ‰o.á»ó#•4ŒoÝŒŒñ³(Tí ´r§'<߇´Oh^Ó­­¬õKiI'R;íO.ÄÃFÇ÷l…·å¤&CZñ>«¢%Ó_Gl`·½¢Ù”æ+;Îà|°ÞfÀG#`ÎH�ٰ𥾕}ü7—³M^>Öò¿{ö™Yáñ +ÈÇBHâ±å×toøGPi—æ/VÎ[i#€Ê“«¨#3!Ãá¸ö5Ü×aá ­?âN¥«C"®}wRCÇ7j3M­¸ú¶=(l´âÚ>c»–Ÿ©È‘_YÙX¤ t DÅÐ'I‘wÔdõ$)eß„m¯µ»ýJæúñÖúÌXÍiˆ„f0ÚO0s#¶Cõ>€Ê&â)|Q¦êZv‹q¡Üµà“X•o#k;¸y݈•É27b ŽrOZÉ×|!â-NÛQþÍÐÞÉîå[›¿:ks,äʮФ€‘"cvª1µW•8�´þµº³»·¸ÕõIZâÅ´å˜ù!á¶b F¸Œ/!@Ëlt óRøwÄ6O¨jž/x.t3sOx°Æ%d+åaq´tÚ¼cŒæ¸-GáΧ;h¤Zĺ4qN²Zùöh´’F A_)@ä/æQ÷OjKxÛOñþ¯â ;KžêÙîlJÛM=±[ÔŠ»1pUù”àrr@Æ�²Ôwñí/û‡ùS!žY.eí%Š4T++²rs�$‚¸Èž3Í>ãþ=¥ÿ�pÿ�*�´Óõ›{$°ÖŠbSä_ÀG…dÚÀ{¶ê˜ë:•ž´´9³X8¹L»…“ðkOOÿ�m¯ýqOä*Å�gXkº^¥)†Öú'¸-nÇdª?Ú°Ãñ£Uo´ÛN!ý½Ê)ʉ£´úŒô>õš<:öƒþ%zµý˜"y>ÑÓl™ {+-�nQXŸjñ‘ÿ�HÓíuÇü´²—Éÿ�Û9ßü‰øR§Š´¥eŽòY4éXà%üMO¢³|­ÿ�&€6¨¤2†R# Žô´�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�UkÛg¹‰97IÁdÜ89é‘üêÍOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽQåê?óõkÿ�€Íÿ�Ç*åOËÔçê×ÿ�›ÿ�ŽR<‹ÆÈnípÀøöoþ9Wh íâò-¢‡vï-çÎ*J( Š( šè’ÆÑÈŠèà ¬2÷ê(¼-¦ÆÌö~™!ç6˜—>¦?¸ÇꦓÈñ—ú›»=N1ü7H`—êd@Tý6­mÑ@ƒÄbØcTÓ/ìë!‹Î‹ë¾=ÁG»m­+-BËRƒÏ±»‚ê,ã|\ýEY¬ÛßéWóý¢{(ÅÈésb˜}$B~t¥EsÐÅw¥x†ÆÍu;«›;˜¦cÖ×1•Û¯€Çï¼Zº�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�d³E†šTIÀ.À ÑÑL»¢‘$\ã(ÀŒÕ}GJÓµ‹am©ØZß@8Šæ•C €pÀŒòy÷£NÒ´íØÛi–¶P.b¶…cRǩ€3Àü¨Y.í¡}’ÜDŒáœŠ#»¶™öEq¶3…pN*Ž£áW¸ž‡¦ÞÎh’æÒ9L°'iÞÐ4‹ƒq¦hzm”åv™-­#ˆôÊ€q@2Í+ºY5Î2ì�ÍEöû2p.àÿ�¿ƒüišŽ•§kÂÛS°µ½€0qÌ+"†žOçYkào£_ hŠÀä§Ä?÷Í�o�$œÔš¯ý¡eÿ�?–ÿ�÷õƧ’4–7ŽDWÁVV PG¥`ÿ� àÿ�ú4?üCÿ�ÄÐôr$¨7WCÑ”ä‰ï-br’\ÂŒ:«8Qgei§ZGick ­´`„†Â"äç…I¬ëß xoRº{«ïéWW÷¥žÊ7vú’2hN+˜'$C<rÉàãò¥–x`�Í,qç¦ö?QÓ|?¢èÎï¥èú}‹¸Ãµ­²DXz fŸ©èzN´±®«¥Ù_¬D˜ÅÕºJž¸Ü: �°·ÖŽÁVêbp�MLw`ª£$“€bÛx7Âöw1ÜÚøoG‚x˜<rÅc²0èA kZâÞ »y-îaŽh$R¯ŠXzx"€ý¡eÿ�?vÿ�÷ðN¬®¡‘ƒ)är ` àÿ�ú4?üCÿ�ÄÖäðÚÀ[Ã0Æ6¤q¨UQè�àPúÑ«]@¬2�A§Å<3‚a•$‚QÇåY> ð½åÌ—7^ÑçžV/$²ØÄÌìz’Jäš»¦hºV‹‘éZe•‚Hw:ÚÀ±>¤(  2ÜÁ4ñÆO ;ŸÎ’;Ëi\$w»žŠ® 5ORðö‰­H’jº>Ÿ}$cj5Õ²JTzÀàTV>ðæ—v—z~¥Z\ !f·³Ž7\Œ0�ô  Y$H¼Ž¨£«1À¨?´,¿çòßþþ¯øÒÞØYêv­kiÕ»ýè§ŒH‡êÅdø@G…t0GB4ø¿øš�Þ9¡¿³îûø?ƦŽ4Š4Ž4T�UU @¥a7¼"ìY¼-¢3’NŸ$ÿ�ß4¹ÑL»¢‘$\ã(ÀŒÓ$»¶…öKq7£8¢Ó´­;G¶6Úe…­”‹˜­¡XÔ±êp  ð?*«¨xcÃúµÏÚ5- L¼Ÿónm#‘±õ`M�hEuo3mŠx¤n¸WÓ¥š(4Ò¤jNv�f³´ï h:<æ}3DÓl¦#i’ÚÑ#b=2 ³¨éZv±l-µ; [è\²¨ažO>ô�ñfHîO�yƒüjrB©f �2IíXIà E"É…ôDu!•—OˆGBÚÛ–(î!xf$ŠE*èê ²ž õö…—üýÛÿ�ßÁþ54r$¨7WCÑ”äÁÿ�„Áÿ�ô*hø.‡ÿ�‰­›;+M:Ò;KXmm£$0F'<(àrM�{k”{˜U‡Ui�"Ì’!ž9ä„pqùVe焼5¨Ý=Õ÷‡´›«™>üÓÙFîßRW&¦Ó|?¢èÎï¥èú}‹¸Ãµ­²DXz f€/Kq ó¦Ž<ôÞÀgó¦-õ£°Uº˜œ�$“Uõ=HÖ–5Õt»+ñ&1un’ìÏ\nÀüª·ƒ|/gsͯ†ôx'‰ƒÇ,V1+#„¹€6]Ö4.ìGRN�¨´,¿çîßþþñ§ÜÚÛÞÛ=½ÔOƒ¨X{ƒÁ¬OøA<ÿ�B¦‡ÿ�‚èøš�ßVWPÈÁ”ò9 këEb­u�`pAd’ xm`H-áŽcR8Ô*¨ô�p+"ãÁž»¹–æçÃZ<ÓÊÅä–K™$’W$ŸZ�׊x§Å*HRŒ)%¹·‚Ë<q’2¸_MÑ´½'‹KÓlìcs–[X ÇÜ(¥áÍY™&Õ4m:úT]ª÷V©+*õÀ,�]ŽòÚW Ä.碫‚M>Ic… ÊêŠ?‰ŽeØøSÚ]Ú]éú•ir€…šÞÎ8Ýr0pÀÒ¯_iöZ«Zê–÷vÏÐÜF$CŽ™@ ý¡eÿ�?pßÁþ5c9€¾ðаe𮆂4ø¸ÿ�ÇkyUQB¨  `�0� ?´,¿çîßþþñ©c–9“|R$‹ÓrœŠÃ>ð‹1fð®†I9$éñsÿ�ŽÖ®Ÿ¦Xi6¢×M±¶³·°ŠÚ%2zœ(4$—vоÉn"Fôg�ÒÅuo;ìŠx¤lgàœV~¡áê×?hÔ´-2ò|c͹´ŽFÇÕ4í7Ãz;O¥èºuŒÎ»K[T‰Šä d=¨BY¢CM*F¤à`kÎõ/Œz‡ã«¯êÈÐAŒÅy‘ÈF ÆF}ñ]棥iÚ۶Ôì-o  Es Ê¡†@8`Fy<û×”êŸ4íoÇwzÃÁa¡‘†ÇOŒFX„³µA`zN{P_‰>&x¢ßâMŽ™¥éÚUúÊÄisÆÎÉq¸‹ÁÆÒ ­^ç˜"A)S&Ѹ¨À'¾¥bi¾ ðæ%Œš~mo%‚º[:/ÌÀ sÔ’�ääõç“[´�QE�QE�QE�QE�QE�QEÌø¿J±Ö¦ðý†¥l—6²jL^'Î-§#§¸ü+ÿ�пkù·øÖž·ÿ�!o ÿ�ØEÿ�ô–ⶨ’ÿ�…cà¿úí6ÿ�?áXø/þ…û_ͿƯøµ.£ÒR²{?N•nÌ1HÊ'ÖF@?6Svþ-µÉx«TÖÚൻ[ ú\º—›pÒùŒ8Háï–Ȩ¥ºÎ8äš�Þÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳư®ü{}pÚ´z~§¤*[\YnF@°ËvÐI¼yƒ%B†còãqpÕÐxkÅg[ñ±§ý¦Æhm‘%·k|†Úd•[,rËå©' ‚øÇB@ÿ� ÇÁô/Úþmþ4±ð_ý ö¿›q:7‰ Óõ4»þÑÔgˆÞj0ÛÉý©%Ô’$’ˆ­Y]ˆŠMžS!¸Ç'$VÖãkR¿¶µ¼Ô|.¦m’E%©šD»V|4Q–+¶T,0ßyxàsþ‚ÿ�è_µüÛühÿ�…cà¿úí6ÿ�ç?ád߯¶­5ÎŒ¦éàGˆ£«ØÈóÇA._æp#‚6ñ ¸Á­'ÕõkŸh-swkol5{‹3it•¶[Ü�ï—ÚUÊUÛÀ)óÐü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ5fÓW…¾"êÚIÔ4ëIRÔÌ Vß>ò<¾V}Šú×I@—ü+ÿ�пkù·øÖV­ðçÂjZ qèVÊ“ß4r€[æQm3c¯÷•Oá^…Xºçü…ü7ÿ�a'ÿ�ÒKŠ�Ìÿ�…cà¿úí6ÿ�?áXø/þ…û_ͿƺÚÁñj]G¤.¥d÷~*ݘb‘”Oÿ�¬Œ€~l¦ìü[h‡ü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ5ƒâ­SXOk‚Öílƒérê^mÃKæ0`á#‡¾["¢–ê78ã’i|KãÛÛ]}ôí3TÒ#‡|kæI‘¢>}²>ÿ�Þ.AYݸåŒÜå@7áXø/þ…û_Í¿ÆøV> ÿ�¡~×óoñ§økÅg[ñ±§ý¦Æhm‘%·k|†Úd•[,rËå©' ‚øÇBxmÄiúš]ÿ�hê3Äo5mäþÔ’ê ÉIDV¬®ÄE&Ï)Ž\c“’(¶ÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳưí<q­K§ØµÖ£áxžñæ1ßÀf–ÓåR’¥emÍÆxØxÏËLÿ�…‹¨E¢jzŒÒé$ÛérÞ‚:›+…*Ú|¿.å°ÚISÈÈÿ�ü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ5•µªßøÃóÜ_ÙGfúµÅ¨¶€:;ªÛÜlwÌ…Y_jº½ y­c6›/Žmã´ñ#hBÏö½<ß–!C„ò3…ÚJ¶àùpIÍ�'ü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ5ÖÑ@mâ/‡žµ½ðúA¢[¢Üjb)@-ó'“+`óê þ¹ÿ� ÇÁô/Úþmþ5kÅ?òðÇý…×ÿ�DM]�r_ð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÕÿ�¥ÔzBêVOqçéÒ­Ù†)Dñ¯úÈÈæÊnÀ?Ŷ³®/µ5[8mfŠÝµ_>é®/ÌŒ Ù²Ô«•`x#àпáXø/þ…û_Í¿ÆøV> ÿ�¡~×óoñ®7Kñþ£ÿ�¤pZj63ÜCᆻGpÒN.a‚a&_æfóãܶHv‘âç½ñ’h§PÒîàk72ÙJ7›‡<nJ̲¨;›'�±ð_ý ö¿›ð¬|ÿ�Bý¯æßã\…µËXüIdeÕïÍ´ú•õ´WOªIuorâi+wWb"}†7B9qŽNH«v¿5Ë‹ÃÅ߆lbšI2;M!·tÆ-®WlÍ“Œ|€xÈGÿ� ÇÁô/Úþmþ4±ð_ý ö¿›súßÄ]GI]Nc.’¦ÔÝ!²•\M–®b‘Îð%eE\æU�±È«zöµªÍ*bþÊÞÎ×TӘä—I$Ð’èD˜òðå!ƒm~˜Å�jÿ�±ð_ý ö¿›ð¬|ÿ�Bý¯æßãI¯Þ¥¯‹ôfµ¾2]‰–9ôèï˜;Äà¦ï#•*¥·—8 '^Ç® Kþ‚ÿ�è_µüÛük/Uøqáu8ô+eY¯Y$o™E¼Í޾ª§ð¯A¬}gþB¾ÿ�°ƒÿ�é,ô•ÿ� ÇÁô/Úþmþ4±ð_ý ö¿›uµ—â+ ­KBº·±¹–Þónûy#•£Ä‹Ê‚Tƒ´Á4ÿ� ÇÁô/Úþmþ4±ð_ý ö¿›DšÞ¡q¦[jÖ¨mdÕçŽûvó’Ø–t 9.¬£d²sX>ñ…äWÚ~Šú¦<“jÖÓ™ ¼ˆþmÓFÀ´™Ùû¤PIÝà ü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ5‹áÿ�^]ÍáKk½CJž]JþÚ©ŽD‘â–A¼ƒ¡àå‰û¸ Ywzå­5I¦Õïã²¶ÖâŽ[¸õI$†ÑL17—,¶,o'œ›ñòG×±ð_ý ö¿›ð¬|ÿ�Bý¯æßãXVþ<ÖdµšâêÚÁ%òÛ,ªÒÉýœ¤9"íNÐ*«Ã(ËzsVn¼q¨Y߬Wz4K[¬‘2¸iâtS%ÔL\{˜Aâ6Ë Š�Ôÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳƹ_ÅZæ±ðþâî» 3'‡ÿ�´šdYÙ1BÂA‡B‡$çï ÛÔ×Iã}cT°‚Å´ûé­ÚòȵŤ€û®cSß"œ2’8ã%@4�ÿ�øV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛük­¢€<¯Æ^ðÿ�‡§ðµî‘¦EirÞ"±ˆÉl•/ÈäôàWªWñ3ýO…?ìf°ÿ�ÐÍw�QE�W=ã .M·²³·ºšæîæ4S ×*€Á˜¼Ð©hÔ€FzséšèkÅš­¶—¡¹Ÿ[G’gH¡ºy"R¬XtóAR1’F:g§PË\ë*Ñ<-¤Ûizt³_<“%ÌÚ¤w7"Ü«ýÃå+Hàä…ðU'&µ¢Ö¼E>¹Ÿ40ÙXK¿öeÍÌw¢´…& eòxÉ©5/ÙéšfšöwVÚˆºYW·WK3yXVýâ!ØŸ•U~l` KoK{¬ÛéØÙÚܲ@ó[ê7ÿ�gœyˆ®Dq„c&ÐØ'*73Á h"×o®gŸSÓ^ÞÂ;WšHÅ„É-¼€ŒD2OÚ ]Çtj@9ª©â? /Ú‘æ¸X0º%Ú5¨Ã#Â[Ìp£ �¾ñ�šM âDZõî¦!±‚+ KGºŠåERß‚Ñ÷ÎrF9^EMiãSƒdÖ5 Ïï@7‹X Òc%LžPÚÜ( xühoÃs6Žg¼3}¦Iå2 b– rÔ–U HçŽ+f¹MgÆVú5†˜ÖóYޛؙ¢ºžñb‚@sûÅF í»åU_›ÅD<m<—";! òÛ[Î’ê.-ç”n1¶YW’ €qÈÅ�vSdb‘»ª4Œ ‹Œ·°É?ST4ÍJêý¤:%þš ¦éàmùôò¤~žøë@µ¿ù xoþÂ/ÿ�¤·µ\·Ä 8n¼7I¸Kä ‚gŒG$® Å%@•‰¨¬_ ø7MÕ´U¹ººÕë<öòu9Â9ŠWˆ²‚ä€Û7“Œõ4ètW%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�uµ‹®È_Ãöý$¸¬ÏøWz7üýë?ø4Ÿÿ�Ь_øMÓ|+©ê¶·ZŸÚtûI®¡2ê¸ ‘1ùÆ=3èHï@Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP[Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP[Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP[Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP[Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP[Er_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅP¯ÿ�ÈCÃö_ý5tuÀk ôö±W²¾½K¨ä ]Þ\L¡°G ²)ÉÎ2=jÝ—ÃÛ ,-ÞömV+¶‰LÑÇ«Nʸ»y ÒŠä¿á]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š ¶Šä¿á]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š ¶Šä¿á]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š ¶Šä¿á]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š ¶Šä¿á]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š ¶±õŸù ø{þÂÿ�¤³ÖWü+½þ~õŸüOÿ�ÅU_áµ›Ø3é·z€½‹ç„Ü^Ï*ƒ‚šœHÎáÖ€;º+Ð|£kñ¼Ô̲G‰„:¬åUùdPKr†…hÿ�»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�u´W%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üU�Tø™þ§ÂŸö3Xèf»ŠòïxsGðÆý­j÷w¶9¾´IuuËÞ¦@¤…–*:ó€kÔh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(+›h/-¤¶º†9à•Jɨ\ ƒÁ[[Agmµ¬1ÁJ8¢@ª€t��©h Š( Š( Š( Š( Š( ªj:^Ÿ«Û}›S°µ½· ʹ…d]áÃ3É«tPVöðZ[Emm pÁ„Ž(Ô*¢Ž��p�ô©h¢€ (¢€ (¢€ (¢€ (¢€ (¢€)êZN¬[-¾©§Úß@¬Eu Ê¡€#8`FpO>õb!µ·ŠÞÞ(á‚$ q¨UE��8�1RQ@Q@Q@Q@Q@Q@W½±³Ô­^ÖúÖ «wûÑOto¨<±E�Eoo¥º[ÛC0Æ6¤q¨UQè�àT´Q@Q@Q@Q@Q@Q@ï¬,õ;9,ïí »µ“áž1"6#*x8 ¬QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Göˆç´÷Уíÿ�Ïhÿ�ï¡\~´Ö–^Òä}RÏGó®=ÌÑGóŽÛ7:²©;s¸ƒÂ‘Á Œxüm:„5¾§ ÜH¯©\\[Y´Ì£<q9fJ–ù8à g"€=#íÿ�Ïhÿ�ï¡GÚ!ÿ�žÑÿ�ßB¼Îÿ�Æ’MŠí ðý¥Œºe…ÔÖ÷&îÚYCƵžßï¨$2<g­jê>)µ°´¹vÓ´¹†øZ˜.u$‹ËRŒá¥o,ˆØ…$/ÌèÔÛý¢ùíýô(ûD?óÚ?ûèVnŽún±£Úê[Ù:Ol¦z¬Tn=kÓ<UåiÚÓê:EÕΟwpŸg¶¹V¸UûKFžd~PØŠ»Nü’Tn#&€=íÿ�Ïhÿ�ï¡GÚ!ÿ�žÑÿ�ßB¹Ÿ ë^"kÄþÏÓOÙ¶¤XN.­¥ÝžM‹–ù†8Èõª~%Õ?°üW£[ˆtX¬.í®7ý¾ám•¥\7–Ù`¬Ø\ÙlãhÈeöˆç´÷Уíÿ�Ïhÿ�ï¡^mâH­|_¨i—Vú}Õƒj¿b·›ÍŒKE˜G儆åu [væ Î*÷ƒ<IŠæ½ŽãöVf#/mîX糪Ñ·³Æ€;/´Cÿ�=£ÿ�¾…h‡þ{Gÿ�} ã¼iâ8¼)%‚AáÛ;ÑrÄ4“ÞAf‰Œp\cžzU+¯ÙZj·P¾…döp\ý“|Wó´ße7AqÎ1óòÃ=€;ï´Cÿ�=£ÿ�¾…h‡þ{Gÿ�} óßø€kÞ8‚Ø&•öÒæ™­ì®#¹E‘eˆÍå+$€HÁ—$}ÞüÏk^k4þÏÓGÚwÿ�¤_Î-m¢ÛŽM†9ùF9Áô ›íÿ�Ïhÿ�ï¡GÚ!ÿ�žÑÿ�ßB¼ÎëÄÇQ×ü1mmý™¥C³M ÅÄQË)Y’5U î –(Òüò»yôìû/ùô·ÿ�¿cü(O´Cÿ�=£ÿ�¾…h‡þ{Gÿ�} û>Ëþ}-ÿ�ïØÿ� ?³ì¿çÒßþýð  •ÑÆQ•‡±Í:¨XE7×é*.ôáFÜ~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9É|I¥xwMÒ«wª^ÈaIf‘Q„wË#äÆyå”w«#Åz@×Î5ÜP\´0Íneš0·K)p¾WÍ– Ær1ÜuÍBú2ë>–EíÕ”örý¢ í¶VØñžYH+#GzŽÿ�ÁÐj7“]ͪjyRÑ ¨‡å6ò™£a˜úï$žÇ8ÇL�l[êúeÕüöú¤×®·Žui#ÿ�yAÈüi÷:•”ÐEwyo— R–US+HPO'éXºW‚t^¸ÕíVi‹’¿f€m,rÄH#œŸW5¯©éÉ©Úy <Öî<sÀÁd‡u$Ó#§BE�bêþ?ðÖ“£¾¢5[+Õ4ÑÃiy I2)!ŒaœÆ€sò2x«º§Šô]*×S–mBÚItÛv¸¹µŠd3*œl$`ž�Î2Hõ¬ÍKáþ¨Amõý¦¡ ÃuonÑ•*S—F`BÐÇ óTí¾èÖ­tc¼¾ÅÕ¤ÖS|°)xe\0fXƒ9ÈS½‰l¨ä‚À€u6úÞ“w¦¾¥mªYM`™ßuÂ4K޹pp1õ«w¶º¤wvW0ÜÛH2“A taœpÃXš—„cÖtHôÍOU¾» 0˜M4vå‰�¬žW–ËÉáóƒÔW<; [økJm¤óËn²<ˆ%6n;˜ Š£‹61Æâ���Gyâ[[K¥„[ÜÎ Ôvm,!v¬®F–àNÀÏpER>:ÒÖõàx.Ò8îf¶’äªÑãVcœ1';Hç�‘—Çà»$Ô!»7úƒ¬òjÀÒ'—’oÞ� ’ ‘$‘ÆŸé×vvË{}ÙIVHš=Ï+Ê“(A`èLrAPúv­{¨øÂòÛdööVvQ™!˜G“,ŒÄ©$aS¦ŒqVu?éš.³ªJ¶IqnóÅws,qÀÅ£Élïýâœc 4}ßF¸¿¸Šâæy¯¥Y§’áÃÊŠœ` (8è 8Àâ™«è «Üy¿Ú×ö‹ä˜ vâ¥åÇÏ› <mÇ9�¹³¥Ï2Ã¥g$¯+B¨“©f‘Wy@ûÁNâ:ãž•mñ@º³ÖïRqö=Ÿ8š´‘òª¹nJ»•wq·9§[xÆËQµº³Ôux­eŠh­£1Hß?29‰v›¹#šzx1‡u]MsTš×Ró|Æqn?5ÝåØV >r휃áÛ@,|Y¤Ýxz-r{»{¨–æî ™ÉÞŽÉœƒÀnÕfè–ÓC úÆŸ³¢ÉIrŠÒ+ªÊ äÀ#©ª·„-5íÛOÕnç½’ÞC"]\Ao#î9ê†#àãît÷æšž¶‡RÒ/`¿º€ivío ¼PÛ¬L¬T¾TEò–Ø ì+€8ÆN@5-µ½&óQŸNµÕ,§¾€5´WÒG‚Ü ä`9õ«õ‡gá±e¬¾ º¶ êòI!µo$DK’y+v8˜ã·(•¯ü„/ÿ�ßOý�UÚ¥kÿ�! ÿ�÷Óÿ�@v€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2uth÷:lÙ×—¨Nmâû7—ò°F›{®ÔsÆ~éöÊÛk‰qâ ý¬®¡’ÎçiåÙåH’ T†'ª8äº}³ˆ4ëÛßìÛ­8Û›½>ïí1Çp̱˘¤ˆ©e¯’ pk–Õ<!¬kËkWÚ_‡înÞ(íÒÞâi%ŠÝ»ÅûÆ&FÈÚ„��a“ò…çUêdòÉܧ'h=‰Ç\`àñÓ&jóÝKÂÆ¡­ÜM>—¡]éÏ«@EsrçÌO²}Ÿc/’@ä+õ<ñÛ5Ç^é+o©éöºizö—mcÖ†o:æCÝ‹dtRDƒfî äƒ‚2�=ɉU$)bp:šÅ°ñ5¶¥¦ÙÞÁit>ÕrÖ¢$Ô°pÃvÝœxéZvpù:ýš }ÒÈû`9 –'qà|ÍœŸry=N-¿‡f²×õ=FÞå|›•ó`·#ˆîB»ýDüYýhm Ä˯:˜´­FÚÞXð\Ü$b9œ »]ˆ<ƒ† qÚ¶Á 2#ÔW|;¯_Û^-þ¡Åð%„R´SùŠÞcæ1³X`+îÝónR÷ÀƒèÏq§é^]Š0KX.ç·ŠÎO0²Éˆ/˜p@ „Œ¹Å�vÚ®§“mÄÑI"Is·îñ•idXÔœ‘ÆçÇ>Õ<×qAqoeˆDH$ý¯¸õæ‡áÖ­km{ö}<ßÝ]Á-Åëê—*÷+ë0r»c/Ê7ißÐ<7u¤^iÏq§ØCIwk"Ù;:Ê%18šMÊ sä•n¼°9Ç�³ªZV§­f×0Ç$j·Û• îŠV‰º1¹=±\Âøm¤’ý–æÒÞè¶‘HI,×Ì1Àüíiéƒå¨=ÍdŸëPÙi¶v¶:p麔·–¤Ná£St'XÔùGh)˜Î:~`JТÛÜÁw–ÞU‘¼e—¦åb¬?~!!T³�$ö¯9¿ð£7„¯t+K-!s¨]܉w0)æ—1È�ýbnUú Ã1ÓÆßèrX_ DŸ(Æ4ë¶¶ózcÏòBìÏñãç¥�^¿ÖaÓ¼7s®M ­½£]¼hQŸj¦â ´œÇõ¢N>ž•æÓü;¾Ô|—©Á¥Ý]Á¡.›l$•Þ+YÐ2‰Ð˜ó–2xv`k¹Òîõ+»[†¿Ó¢´ž9Z8Õ. ‰*€0ÁŠ)�œŽW¶FA€T³ñ47òY\Ø_XLµ*mo3v ³v0ÁÁ�‘Êâχµ)®'žx-­%¾½²™íìåi"‹ìòù­!b«—p”t^¼šét¹'av’éñÙ¤wR,^[äL¤îó1´`–-‘Ž œA 袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�âuí;S¼Ò¼9s¥›òöWfiÄÛ‰v˜%rùÿ�! ¸=™»Š÷Ö#ƒÅsë]­ò£[iÑÍû'úfɟΓ˜* É�WYk¥km ¶Œ`ì3úT»µ?ùçiÿ�}·øP9¡Eãñmûk¯&”Åüˆ…œ Œü»$YL¤ã®ôõ©þ i·Ú¿…þÃcowpÒÝÛ™¢µ0ЬŠÒç¤mŽç�‚¥«sv§ÿ�<í?ï¶ÿ� 7jóÎÓþûoð 2[oÙˆíô˜®á‚8![(ÂÙ,+ò âè˜Û¿Ô|¸éV­&ñ„z”°^Zê2ÙÇôh‰¬÷JÆRÖ΀‘‚#àæ\®2éݩÿ�Ï;Oûí¿ÂÚŸüó´ÿ�¾Ûü(Š}7ÅzŸÃÈ“R“S:â]YÏ,X³VÌRÄïåmÌxùY—yå€È vÒkzg‰§¹Óõ-&-J-FÛH¼ŒÜOö/6Y™¢h¢—fÒcl”#&»mÚŸüó´ÿ�¾Ûü(Ý©ÿ�Ï;Oûí¿Â€-Dí$(ïÄÌ ˜Ü‚ÈOc‚FG±"¸;Hüw/†õB×¾©æ‘kö¸lŸù¬T¨‚´ž^Ðw²®zzžËv§ÿ�<í?ï¶ÿ� 7jóÎÓþûoð H'WGÒ’âãQ–_Þ‹Ùm-졺ÎWËÊ»¼;q¿vÓŸ»€9¥´OE«AÒÝÍܪ¼’ AjöÀòHP%•ç³wN+¬Ý©ÿ�Ï;Oûí¿ÂªêWú†™¥Þ_É «¥´3*»d…RH{P9¦7‡õW¯Æ¨%"Ò;å³ÊóIL$ƒ'•€wawcŒd“Ã:~³¦ë~!Ö.ôÝBswmh± ƒf·3¼f`Á¼’#È €~îxÀëwjóÎÓþûoð£v§ÿ�<í?ï¶ÿ� �»ERÝ©ÿ�Ï;Oûí¿ÂÚŸüó´ÿ�¾Ûü(íKv§ÿ�<í?ï¶ÿ� 7jóÎÓþûoð ×þBÿ�ï§þ€*íT³‚xå¹–ãËÝ+d�P;Õº�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+ÛÏm¨Ê¶wb[ ±i-»4„®Ý¿60ÁÔŒ‘kr°fðéǬG8Kw„ ›|­•3å?§ß?î§¥�,ž&UÖßM‹JÔgMÝD‘˜¡wPà6\>0Ë’žµ»\­Î›âŸ$ë•ow(ËÏö–·‰£Ùµ³ó.Kàgv2+œ¸øw{¨èñ[êZf‘)…ÍÄÖ‘_Ís$’4‘“*F­º2ì¡J‘ŽxÏ�›YqëÖ¯=ô%%I-/È©2HÑÇ ÛƒÈÛ ëŒ`ö®6ïÁÝζ÷Jº\p=ºÚLÑÏ*Ésh…ŽD/.ß,¤ç †½§øN}Ri­ll­tôÖ—P†ÚÉ öŸfpSb†;øÎFzÈqT¬u8¯îµxã‘Âä[I¼ 3£Á<m‘zãœ×9uà·‘u(¡–¶šq5´ Ø®è÷’?†M„dr×¥bj_õ t­kHÓtí ÓO¾½7P(vf&ÙbÞŠ"À`é¸cûÜ#$Ñ¡¹‚âIãŠUw‚O.P?¶†Á÷ÚÊ–¸Wð¦¢Ñøˆ'AgÖnmç•$‘™YV8ÕÑ•ÎÔA.r£'7tm]|7¢Øèš¬:„·–ñÛ¼¶zmÝÌrm@‰F �œFN(jÿ�[ƒOðýþ³$R=½”SLëFfX÷d®…$AõÁÈ­b¨Ì¹�«ŒŸaž+Ìî>êZ¦¬Ú궺Dó\Gvºz´îéi$ÓK(”ÃfUS"?1¾Óîõï.¡½Óã·ŽËš9Ì‹+2åÀÊ)ùOäGC�$Ò5(uÇT·WHomã¸d�0WPÀ3ƒPjZÜzuý‚ÚÜ]ÝÞo1ÅÀB&ÝîK²Œ ëГÏ�×eðÒöÛOÓÊØè°^é‘Úˆ¼™mä°ËùÒ·– 9X݈·$qV¬¼sk§I.…áË›kHõHç çÜyÑ�A”í€íBÚèZÜzý€¿·µ¸ŠÒNmå›f'CÑÔ+ÿ�h)ö­:òÛ_†3­‡‡á¹Ót–m:Ýct‚öxQ'\µ/–ªdv�n Žƒæêk£·°Õô[Ïjé£i×WWk-šCpÂGŒ¤q²3¾B|°øÉ\±É�n ©ªE¤Á ÓE+Ç-Ì6ÙŒµ¥‘cRrGœgúRkz¬z‡{«MÓÃg O"@¹Eb78={UØjº–Ÿkm¥Åfåom®%7S´xXfIp»Q²NÌsŒg<Ô> ƒW×t_èY[ÅçZk[™n$¦T!‹�™]¹í¸ŽAÈ�^xÊm>%ß…µ¸™j›­X³I >ìä ³É}Ž$Öüeƒ3Çu£ênO—QgˆBTGß0s ù—zät9àš®Þ<>ñiº^•¤j2KmpñÚ/ú9’ –T ¤‚WíØUMoÃþ#ñ ¦£%ÌZU­ÌšMÖ›m wRHŸé=îîbR1åŒ(Sžy  íOÄGJÐàÔçÒ5ieв'’fG‘ 9“gÞe1ëõÆÄl^4vF˜Q±•ö8$gèkÖm|e«ÚÇÓt;›{¿ÚS9vŠxåÆï m!ÞÏl4ÕõM>)nuû¡…™ô¥¸¿|á‹Û p1òãÔò�WÖ|gy©Á&ª\&›d·×À!Ø";ðFéû·ãÂ}²’xÞÏìúdöºv£y ÒDžDiº)QÚ'VpÁññƒÊãÒ±5+-gÄòx–]&ÖÙlµM)t´mCí6’£¨˜ï1¼+þz|½z´þ–_iÚɬÑÍöFÖ"^9eû<‘R@9f3¸ž@  Óü@6ÖúÄþ×’4°»ôV„Ls‰Ïð2œŽ2@ëÅ]¹ñd¶:n¡áÍ^Ö+f¹pílåÑ~öÝ“0È8$dŒž+6÷@ñ Þã[!–«­™>Èÿ�k•Ýp~ðy\|±ïàžNßöª¼¾ÕB×´Ý?ÃÞÑ—RÓä¶Å•Ëáä`UY±�»ž„“À  ™|e ¶«ÜÝé´ÚMºÝ\ZÈ"2Žì:•£Ý¿ñgå=ëzÎwº´Šymfµw\˜&*]=ŽÖeÏКóÛøª;=zÎÊ]9ìõÛ9k{«ÙXÙÎèP˜¤ò‰xðGÊÀc·¿Gu‹5K[‹9ít›'‹Êi-駱A¹€b»¡PMøÈ?6ÞÀäON×ôíSI—S‚lZDÒ, Û·a ’; ÃÔ{Ö5׎£³Ó¦Ô'ðö¶–in÷)1Š %Wq y™S´‡ N:gНmàËØeñ „ú›ÞiÝ®É^m‹<s11 j˜)³ß)ß56©§ø³W𦫣ÜÅ£ù×62Z¥Â\H¬êSqO/÷xœþœu  (<E!i?´4MGL±–é eÁ`¼˜¥|uïŽ2{Ü® ¼5¬éöÞдxu+&µ?ÙS3±‘²ªì<˜ÔäžIÀ®ºÒIÿ�µu›OŽÒ囆+†Ü»F …Qœ°#ä�/ÑE�QE�QE�QE�VGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÔ¯EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE—5µî±7Ú#ß²Þ-¿1ËIž‡ØP¥ý…¦ÿ�Ï·þ>ßãGö›ÿ�>ßøû�hÑYߨZoüûãíþ4ai¿óíÿ�·øÐdx¯þDísþÁóÿ�è¶©¿°´ßùöÿ�ÇÛüi²x{K–6íC#‚¬ · þ4§Egai¿óíÿ�·øÑý…¦ÿ�Ï·þ>ßã@4Vwö›ÿ�>ßøûØZoüûãíþ4£Egai¿óíÿ�·øÑý…¦ÿ�Ï·þ>ßã@4V-Λiew§ÉoÍÈRC·#cq×Ú¶¨�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢™,Ñ@¡¦•#Rp °4E4S.è¤I8Ê0#4�ú*)n­à}’ÏmŒáÜŠHï-¥p‘ÜBîz*¸$ÐÔS$–8P¼®¨£ø˜àT?Ú_óùoÿ�WühÍ€‚ ô" 7öjH7p:ƒ   TqOà˜¥I�êQÅ$·0@ÀM<q“Èàgó  h¨öÖG—0³вMJî‘¡yQGVc€(ÔUí /ùû·ÿ�¿ƒüjueu ŒO ƒhh¨úÑ«]@¬2�A§ÅqùòfŽM½v08ü¨J*9n!ƒtÑÇž›Ø þtž´v ·P3€€’hz)•³°U’N�¨?´,¿çîßþþñ  SQÒD«©èÊr D÷¶±¹G¹…XuV(z*(®`ˆ†xä#’ÁÇåK,ñ@–TŒ…Ø Ð”UqfÄw'  œ$à¤ÐÑU¿´,¿çòßþþ¯øÔÑËÈ'WSüJr(ôT2]ÛDå$¸‰uVp ,WVó6اŠFë…pM�KE2Y¢…wK"F¹Æ]€¨´,¿çòßþþ¯øÐš(ªÿ�Ú_ó÷oÿ�øÐŠ)‘M˺)EÎ2ŒÍ6[«x[l³ÅuÃ8€%¢¡ŽîÚW ÄNÇ¢«‚iòK(^WTQüLp(õÀîKܼh˜ôÚXÿ�ìߥp~*ø³¤x?Å–zV¥=•Ͱ›í6ÿ�)·2á”rF�9ûítÍVÃY°ŽûM¼†îÖO»,.ocí@(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�‚æØ\=»+äËæ:ðF?Zž²ĺoö¼údÒù0Qæp¯À<Ç¥kÐEPEPEPEPEPEPMGJÓµ‹am©ØZß@8Šæ•C €pÀŒòy÷£NÒ´íØÛi–¶P.b¶…cRǩ€3Àü«ÅúU޵7‡ì5+d¹µ“Rbñ>pqm9=À¨?áXø/þ…û_Ϳƀ6µ/ èZÌë>©¢é×Ó"ìY.­RV ’p q’x÷¨ì|)áÍ.í.ôýJ´¹@BÍogn¹8`éY?ð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÐI}§Ùjv­k¨Z[ÝÛ>7Cq‘:dEd àÿ�ú4?üCÿ�ÄÕ/øV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛüh«Ž4Š4Ž4T�UU @¥bKàŸ Í+K/†4Y$c–g°ˆ’}ÎÚÏÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳƀ: 7FÒôhž-/M³±ÎYm`Xƒp TZ—‡´MjD“UÑôûé#Q®­’R£Ð±?áXø/þ…û_Í¿ÆøV> ÿ�¡~×óoñ  [? xkNºK«i6·1ýÉ ²~„.EhÞYZê6’Z^ÛCsm ÃÃ<aцsÊž s?ð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÐßøA<ÿ�B¦‡ÿ�‚èøšÜ‚ÞX xc†ÆÔŽ5 ª=� å¿áXø/þ…û_ͿƲµo‡>ƒRÐcB¶Tžù£”ß2‹i›¼ª �éî|á{Ë™.n¼7£Ï<¬^Ie±‰™Øõ$•É5sLдJ4­*ÆÀK0ZÛ¤[ñœghÆOçX?ð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÐö§¡éÒÆº®—e~"$Æ.­Ò]™ëÀã8•S¶ðo…ìîc¹µðÞñ0xåŠÆ%daЂ Öoü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ4ÔÏo ÔÄ1Í ƒkÇ"†V„ aÿ� àÿ�ú4?üCÿ�ÄÕ/øV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛüh¦³²µÓ­#´²¶†ÚÚ1„†Â"Œç… μ𗆵§º¾ðö“us'ßš{(ÝÛêJäÖWü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ4·¦ø{DÑdy4­O±’AµÚÖÙ",= P2*]KFÒõ˜’-SM³¾Un YBŸ`À×?ÿ� ÇÁô/Úþmþ4±ð_ý ö¿›�hEàŸ Ã*ˆ4XäS•d°ˆ}ŽÚÛ’4–7ŽDWÁVV PG¥rŸð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÐßøA<ÿ�B¦‡ÿ�‚èøš×±Óì´ËUµÓí-í-“;a·ŒFƒ=p�¼ÿ�Ä_<%k{áôƒD·E¸ÔÄR€[æO&VÁçÕAü+sþ‚ÿ�è_µüÛühZÿ�¾Õ.ÚïQÐ4»Ë–�4×qÈä– š~á­GœÏ¦hšm”Äm2[Z$lG¦TXßð¬|ÿ�Bý¯æßãGü+ÿ�пkù·øÐE¨éZv±l-µ; [Ø\²(aÐáäþu–< á�AÐÁÓâÿ�âjü+ÿ�пkù·øÑÿ� ÇÁô/Úþmþ4ÖÖð/„Y‹7…t2IÉ'O‹Ÿüv¨ÿ�±ð_ý ö¿›ð¬|ÿ�Bý¯æßã@¥iÚ=±¶Ó,-l ,\Åm Æ¥S…�gùUmGÃZ±8ŸSÑ4ÛÙ€Ú$¹´IL°&±¿áXø/þ…û_Í¿ÆøV> ÿ�¡~×óoñ  k øwK»[½;@ÒìîT³[ÙÇ€F�jõöŸe©Úµ®¡iowløÝ ÄbD8éAÍÿ�±ð_ý ö¿›ð¬|ÿ�Bý¯æßã@‹>éþ&ñuͲÙèú,6¡fŠÆÝc’Y7±8�móôÆ==ÃþÐü1¥7IÓâ‚Ý¿Ö74§ÕÉå¿Ìÿ�…cà¿úí6ÿ�ËÕ~xBGDŽ= ÙVkÖI[æQo3c¯ª©ü(µþÉÓ¿èkÿ�~Wü(þÉÓ¿èkÿ�~Wü+žÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳƀ:ì;þö¿÷åÂì;þö¿÷å¹ïøV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛüh¡þÉÓ¿èkÿ�~Wü(þÉÓ¿èkÿ�~Wü+žÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳƀ:ì;þö¿÷åÂì;þö¿÷å¹ïøV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛüh¡þÉÓ¿èkÿ�~Wü(þÉÓ¿èkÿ�~Wü+žÿ�…cà¿úí6ÿ�?áXø/þ…û_Ϳƀ:ì;þö¿÷åÂì;þö¿÷å¹ïøV> ÿ�¡~×óoñ£þ‚ÿ�è_µüÛühÂø+M}b{û•«°1Û…Û È•tŠ¡T*€ �: òÏx;ÃþŸÂ׺F™¥ËxŠÆ#$e²T¿#“Ó^©@Q@W=ã .M·²³·ºšæîæ4S ×*€Á˜¼Ð©hÔ€Fzséš�èh¯:¹Ö<U¢x[I¶Òôéf¾y&K™µHînE¹Wû‡ÊV‘ÁÉ !àªNMkE­xŠ}r->ha²°—ìË›˜î Ei L ,@Ê7äñ’;P_ErˆµÛë™çÔô×·°ŽÕæ’1a2Ko # “ö‚WqÝ�ÎjªxăAKödy® .‰vj0ÄÈð–ó$(€o¼@&€;š+‡}gX±ðÌs³JâêRæm*òtP®GË’è�¨-·“ƒŒWac,³éöÓN¬²É³«G°†  äíç¶N=M�X¢Š([ÿ�·†ÿ�ì"ÿ�úKq[U‹­ÿ�È[Ãöý%¸­ª�Áñj]G¤.¥d÷~*ݘb‘”Oÿ�¬Œ€~l¦ìü[k’ñV©¬'‡5Ákv¶Aô¹u/6á¥ó0p‘Ç_-‘QKuœqÉ5étPšÝøöúáµhôýOHT¶¸²0ÜŒa–í “xóJ… ÇåÆâ8á« ð׊ηâ-cOûMŒÐÛ"KnÖù ´É*2¶Xå—ËRNñŽ„õTPŽhÞ$ƒOÔÒïûGQž#y¨Ão'ö¤—P^H’J"µev")6yL„r㜑[ZŽ5­JþÚÖóQ𺙶I–¦iíYðÑFX®ÙP °Ã}åàsI¢€<¿þMükjÓ\èÊnžxŠ:½Œ<q´åþgò8#o±ÛŒÒ}_V¹ñV‚×7v¶öÃW¸³6‘‡I[e½Àù}¥\ u]¼Ÿ1ÍwÔP7i«Âßum$êΚu¤©jf«oŸy žß+>Å}k¤¢Š�+\ÿ�¿†ÿ�ì$ÿ�úIq[U‹®È_Ãöý$¸  ªÁñj]G¤.¥d÷~*ݘb‘”Oÿ�¬Œ€~l¦ìü[kzŠ�óOjšÂxs\·kdK—Rón_1ƒ 8uòÙ·Q¹Ç“Kâ_ÞÚëï§iš¦‘;ã_2HŒóí‘÷þñr ÎíÀ,d†ç+éTP+á¯oÄZÆŸö›¡¶D–Ý­òi’Tel±Ë/–¤œ. ã á´oA§êiwý£¨Ï¼Ôa·“ûRK¨/$I%Z²»›<¦B9qŽNH¯c¢€<ÚÓÇÔº}‹]j>‰ïcüim>P…!9*VVÜÜg‡Œü´ÏøXº„Z&§¨Í.’M¾—-áˆ#©²¸R¡m§Ëòî[�¤•8Œúeç±ëZ­ÿ�ˆü?=Åý”vo«\Z‹h£º­½ÆÇ|ÈU•ö«¨ÛСšÖ3i²øæÞ;O7ö„,ÿ�kÓÍùa"8O#8]¤«n�—œ×YE�QE�sž)ÿ�‡†?ì.¿ú"jèëœñOü„<1ÿ�auÿ�ÑWG@>-K¨ô…Ô¬žãÏÓ¥[³ R2‰ã_õ‘͔݀‹mg\_jj¶pÚÍ»j¾}Ó\_™!A³d*©W*ÀðF69Á®¾Š�ò /Çúü"‘Ái¨ØÏq†íÃI8¹†Y„™™›ÌsŒrÙ uÚG‹ž÷ÆI¢CK»¬ÝüËe(Þlbð]¸a+0^Ê îlœv4P’x[\µÄ–F]^üÛO©_[Etú¤—V÷.&‘b·uv"'Øct#—ä䊷kñ\¸¼1\]øfÆ)¤C#´ÒwLbÚàevÌÙ8ÁÇÈØŒú…æZßÄ]GI]Nc.’¦ÔÝ!²•\M–®b‘Îð%eE\æU�±È«zöµªÍ*bþÊÞÎ×TӘä—I$Ð’èD˜òðå!ƒm~˜ÅzÈë÷©kâý­oŒ—beŽ}:;æñ8)»ÈåJ©måÎ ױ먢€ ÇÖä+áïû?þ’Ï[¬ÿ�ÈWÃßöý%ž€6+/ÄVZ–…uocs-½æÝöòG+G‰•©i ;‚kRŠ�ãS[Ô.4ËmZÕ ¬š¼ñÀŸnÞb²A·%Õ”`Œ–NkÞ0¼ŠûOÑ_TÓ§’mBúÚs!w‘ͺhØ“;?tŠÉ;±¸`gÔ( 8ðÿ�/.æð¥µÞ¡¥O.¥mTŒÇ"HñK ÀÞ@ÁPðrÄýܬ»½rÖÇÆš¤Ój÷ñÙ[kqG-Üz¤’Ch¦›Ë–Û7“ÎMøùH#Œ õº(Ímüy¬Ék5ÅÔþµ‚Kå¶YU¥“û9HrEÚ 6UW†Q–ôæ¬ÝxãP³¿X®.ôh–6·Y"epÓÄè¦K¨˜¸(÷1 ƒÄm–è4P•êþ*×5‡÷pÝØY™<?ý¤Ó"ȬîÈùŠ :9'?yÞ¦ºO륄-§ØßMn×–E®-$„Ýs˜ŽùᔑÀ ï*®ÂŠ�(¢Š�áþ&©ð§ýŒÖú®â¸‰Ÿê|)ÿ�c5‡þ†k¸ Š( ¹ïj­§i¶ðÛÝÏ ýåÌpÛ%³À&”î‚yÿ�!;s×¾;‘] çW>?ºÐ<-¤Ë%¿ö¶£w$ѱº¹†ÄFQðRWl •rh1V VçøŠcñ6¢&’ž|ƼóoâF¶iUX*¯&\ûËò’0 <WuE�qžñ—ü$úݺA-¬ÆfX#¼Y&p ®Ù£Ù˜ØnÎ:È®§P»šÎÔÍŸs~ùɶhÃýxê¸üjÕZÆæ[»Eš{‹)œÁpÑ—^{˜Ù—ž¼³E�QEË|@³†ëÃq´›„±Þ@°H&xÄrJâ�ìP‚T X‘‘:ŠÅð߃tÝ[E[›«­PN³Ïo!‡Sœ#˜¥x‹(.H ³p8ÏS]õÍ´–Ò[]CðJ¥dŠT ®PAàŠ-­ ³¶ŽÚÖà‚% Q U@:��P/ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üUu´P%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üUu´P%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üUu´P%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üUu´P%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñT»ѿçïYÿ�Á¤ÿ�üUu´P%ÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñU‹âßéºo…u=VÖëSûNŸi5Ô&]Bw’&#8Ǧ} ëÑꦣ¥éú½·Ùµ; [ÛpÁ¼«˜VEÜ:0#<š�çá]èßó÷¬ÿ�àÒþ*øWz7üýë?ø4Ÿÿ�Š®¢ÞÞ Kh­­¡Ž"P‘Å…TQÀ��•-�r_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅW[E�r_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅW[E�r_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅW[E�r_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅW[E�r_ð®ôoùûÖði?ÿ�Gü+½þ~õŸüOÿ�ÅW[E�pßÃ}=¬U쯯Rê9D×w—(l¬ŠrsŒƒÆOZ·eðöÂK w½›UŠí¢S4qêÓ²£àn�îäžk¨Ô´;X¶[}SOµ¾X8Šê•C�FpÀŒàž}êÄCko½¼QÃH8ãPªŠ��p�b€9oøWz7üýë?ø4Ÿÿ�Š£þÞÿ�?zÏþ 'ÿ�â«­¢€9/øWz7üýë?ø4Ÿÿ�Š£þÞÿ�?zÏþ 'ÿ�â«­¢€9/øWz7üýë?ø4Ÿÿ�Š£þÞÿ�?zÏþ 'ÿ�â«­¢€9/øWz7üýë?ø4Ÿÿ�Š£þÞÿ�?zÏþ 'ÿ�â«­¢€9/øWz7üýë?ø4Ÿÿ�Š£þÞÿ�?zÏþ 'ÿ�â«­¢€9/øWz7üýë?ø4Ÿÿ�Šª:¿Ãk7°gÓnõ{Ï ¸½žU59 ‘íwu^öÆÏRµ{[ëX.­ßïE<aѾ ðh‰Ð|£kñ¼Ô̲G‰„:¬åUùdPKr†…hÿ�»ѿçïYÿ�Á¤ÿ�üUuöðZ[¥½´1à cjG…U€K@—ü+½þ~õŸüOÿ�ÅQÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñUÖÑ@—ü+½þ~õŸüOÿ�ÅQÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñUÖÑ@—ü+½þ~õŸüOÿ�ÅQÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñUÖÑ@—ü+½þ~õŸüOÿ�ÅQÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñUÖÑ@—ü+½þ~õŸüOÿ�ÅQÿ� ïFÿ�Ÿ½gÿ�“ÿ�ñUÖÑ@]ãOhþÑÿ�µ¢M^îöÇ7Ö‚i.® YaÔÈ£ rÅG^p zW¾°³Ôì䳿´‚îÖLo†xÄˆØ Œ©àà€ ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasbe6.jpg������������������������������������������0000664�0000000�0000000�00000061506�15030617045�0023423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�0 "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®{WI.üU¥Ø-ý媽•ÔçìÒmÜQàQœ‚<ÃÔw †²5Ë‹èåÒíìn#·{»³Èñy˜Q ¯Ó#º t:EÜ3Fÿ�Ûú›ÆŒ ‰Ö®= ò·cèsïQk’G£á÷‘Õj ó1Àÿ�iè~Á¯ÿ�Ðvßÿ��ÿ�PÜÅ«Ù[½Å׉,à…^IlÕUG©%ð+_ûBËþ~íÿ�ïàÿ�Äñvý[šž—¦ÜiÍq{m%°77^Z u*[*¬IÎ1Ϩ  '‹Wµn<Ig‘Ö4ó,Õw18 2ü’H�{ÑZ¼·ÛÇâK7š ‘­š–@s‚FüŒàãèk3ÄkZ¥„6öã@n,îO™©:ᢕ%uȈäAÀàäŽÕnÄܧ5=Jæ])4û‹8-¢1Þ–—1<¬ )@DÇ£msÀï°kÿ�ô·ÿ�Àÿ�ÅÖ~ <Ci{¥@ºÝ¹—M°Ž�†Y3÷ýct?Ú_ó÷oÿ�øÖ6³{jú¿†öÜÂØÔ_8ùu¸Ö€,}ƒ_ÿ� í¿þ�þ.¡‚-^äÊ ñ%œ¦'òäòìÕ¶6Úpüqî+~°<=c«ZjZõÆ¥ ”i}x—0 k‡”€!Ž"tkõ@ñŸ¼Gl/bñ%½Þ›zÌ —)ØÈ¢)?Õ~5wìÿ�ýmÿ�ð�ñuoP‘"žÁäuE,Ç�~éêoí /ùû·ÿ�¿ƒüh"Hµx§Š <If“LHŠ6³PÎ@$…ùàÇ`h†=ZãÍò|Ke'’Û$Ùf§c`?ÄU}pÜÞkz ÖRéMicxngi¯J> RDB¨FRܰÉ\qœŠÚCêöZ¾±qpt!oyö#Ô]˜n‘(æ 1)'žÿ�tdärjD~*ÓœÎÌ‘µSæ2çp_ÞrFÖÈ6ŸJ·ö þƒ¶ÿ�ø�?øºål,uÈdÑÅÁðúÇg¬Ýj34z£±)?Ÿò¨0Œ•ûCu#;Mß/wý¡eÿ�?vÿ�÷ð�s÷ãÄ6—º\+­Û‘wtбûàd“?ÕçVÖÛYyžñ £KÐYÊq‘¿ŒàþTÝ^òÚ]_ËÌ.´[…påÖzÃÒü9â‹/Ãâ n,˜^Dñj–ÿ�hʨL^I)m£?|çæ p3@Z8ñ£e$ï­Û©[«˜0,GHæxÁûþŠ+Cìÿ�ýmÿ�ð�ñu_ö±éW ÷0«hßpd�ÿ�ÇÔµ³ý¡eÿ�?vÿ�÷ð�bDú„÷óXEâ­>KÈ4¶éj¦HÁèY|Ìõªí¨È]ÎÞ4Ò+7òîd0ÆþëŸ3å>Æ›+jÄ3êÇ »Ãg#_¶â•˜:ˆþ]ÅA'schÀäš­·UYµK¸àðò]Ü,pÀF¤Ø&ð¹ýÇÊT;Ãd¹ä��ÚŽÓ[–4’?[<n+-ˆ!èAßÒŸö þƒ¶ÿ�ø�?øº~%¦Ÿ¢ØÙ4¶P}žˆE ûÒ0 �¡Ž �� g®J½ý¡eÿ�?vÿ�÷ð�sÚ8ñ£e$ï­Û©[«˜0,GHæxÁûþŠ*k‡Ô,îmí®¼U§ÁqrÅ`Š[UV”ú(2eÒ¦ð”±Ë¤\yr+ãQ¾ÎÓž·R‘I¯ØjW÷V1ÛYéóY¤ñÍ;Ü\4n7 ›TFÛ‚‘»—$c @ýƒ_ÿ� í¿þ�þ.³ôqâFÊIß[·R·W0`XŽ‘Ìñƒ÷ýWNî‘¡yQGVc€+Ÿð½õ¢é3†º€íã̃¡º–€,xN»n�êM€ÿ�âë0jŒlÒðxÛF6¯/’“ùQìi?¸ÌÁonµÐÍhÐHâÖF*@G˜cŽ„óÇàkŒšÏS¸Ñµ ym<:óês³^/ö£xÙUH äq•E\mà.wx�Û¹’þÊâÞÞïÅztܰG-²«JGP É“øRض£ª[ý£OñNŸwâ¾e½ªÈ»‡Q‘!GV:ž¥ŒRÃáéÂʳ\ï¿d£}ÑàyLX #+ÏÆs{ÃŒö‘ßK©¶—ÕÝÉžAixeW;UrK"cåU\`ð¹$’hר5ÿ�úÛÿ�à�ÿ�âë-jîÚÇíÇ‹´­?}ÝÌýªŒ?•3§¤áAük¯þвÿ�Ÿ»ûø?ƸwÓu-gJ°“H[)…¦µ¨Ï'xðîbYüµÝÛî^�5o^†çGX5ëY"¿¹1o[ Fß"Y??p~u¥ö þƒ¶ÿ�ø�?øºÌ’Øh¶¾ ±¹šÖ— º¶S© vè;WIý¡eÿ�?vÿ�÷ð�bßii–wâ‹ KdÆé§´XÑsÓ$ÉQ]]]XÚÁuwâý.ÞÞr2Ínˆ’26“&GLUínèϦ¼:|Ö2K!ØÂ[Ó‚ WUbvâ¹»ý/PŸÂ‘xb+Ý!¬ÅŒVfïíF)k?–« òŠ�ÙŠ[éõ ´ø|W§I{†–Ù-”É= (“ r:Õ¿°kÿ�ô·ÿ�Àÿ�ÅÕ hü`úÅÝÝ„pEm%¬ ÙȬèÁˆe26`…$6F~讃ûBËþ~íÿ�ïàÿ��çïLjm/t¸W[·"îé¡cöÀÉ&~ÿ�ªίuT³kÖà’Mˆãÿ�¨µ{Ëiu,w0¹þÑnÁÿ�—Yëro3È“ÉTivÉ [d€x zÂMCU·7wŠ´ëÈ2[Ú¬‹¸uYÍE¨Ú^éP.·nEåÓ@Çì#€!–Lýÿ�XÇçW|5¥^iêß…ÅõÙºhâ•¥Xòˆ›DŒªÌ>Lä€@è7_žµ ù’¢ÄÅÏÌÀqö[š�—ìÿ�ýmÿ�ð�ñuNI¯bÔWN“Åšj_2Ù­HPu`¾fqÁçÚ·´,¿çîßþþñ®sSŠâûÄ–W©s¦­¶žd–ׄ™¡xöºm€[;Á'�Œrhö÷w7z|º…·Œ4¹¬¢Ï™sѦ:儘ïL]FGe|i¤7ÛŽ-1 gí8ýßï>n}3U´øõM.ÖöHeÑ¥¹¿»{©¡—P}±æ4@«/—¹¹Lä¨À íVå4ý'Mký;ìö÷¢þiþØK†o/nÌJ0vïb§?>3@/Ø5ÿ�úÛÿ�à�ÿ�âê…øñ ¥î— ëvä]Ý4,~Â8$ÏßõAù×Aý¡eÿ�?vÿ�÷ðck7Ö‡UðéP5'÷ƒôYèˆÕnÛUþÍ_¸ó<­Ë£ÈbÞJy ìÜ;Ù¹ ]\Þieï$I'K‹ˆYÑ6Ìè2qÂŽõŸ¦Û.öUƒ\²:\“ËsövˆCÈìì<ÝøÛ½˜ãfyÆj׆_H••ƒ)¿½ ƒÒe  š+.}&îy¤q¯jQFí‘k�U€ù[±øçÞ©i°Mcâ››VÔ/.¢k(åÅͶö��Ú€:(¢€ (¢€ (¢€ (¢€ (¢€ ǹþ=1°24û°ý´¶­ŠÈ¹ÿ�‘ÇMÿ�°}ßþŒ·  z‚êÎÖú5ŽîÚ„VÜXÀqŒà÷äþu=ý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€Éþ£E�g`hßô°ÿ�Àdÿ� ?°4oúXà2…hÑ@ߨ7ý,?ð?Âø{D%IÑôü©ÊŸ³'ÛŠÒ¢€)ÿ�diŸô´ÿ�¿ þdiŸô´ÿ�¿ þrŠ� ú&“ M.É€9­ÐàþTßì þø ŸáZ4Pwöÿ�@‹üOð£ûFÿ� E‡þ'øVý£Ð"Ãÿ�“ü(þÀÑ¿èaÿ�€Éþ£E�gÂ?¢îVþȰܧ*~Ì™ÔqRÿ�diŸô´ÿ�¿ þrŠ�ÍÑ8Ñôñ’IŲu<žÔ¿Ø7ý,?ð?´h  ïì þø ŸáGöÿ�@‹üOð­(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+F2± Jœ‡­�QBÒ!E¥X $’Ý?•?û#Lÿ� u§ýø_ð«”P&Ñ´¶R­¦Ù{ü*%ðöˆ£ £éàdž-“©äö­*(;ûFÿ� E‡þ'øQý£Ð"Ãÿ�“ü+FŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…:=H…vÇ¥Ù"äœ-º“Ôô«ôP 4-"]¾f•bûNWuºœqMþÀÑ¿èaÿ�€Éþ£E�g`hßô°ÿ�Àdÿ� ?°4oúXà2…hÑ@ߨ7ý,?ð?Âì þø ŸáZ4Pwü#ú.åoì‹ Êr§ìÉ}G/öF™ÿ�@ëOûð¿áW(  Ùgý­?ïÂÿ�…G&ƒ£ÊTɤعS•-n‡N+BŠ�ÎþÀÑ¿èaÿ�€Éþ`hßô°ÿ�Àdÿ� Ñ¢€3¿°4oúXà2…Ø7ý,?ð?´h  ïì þø ŸáH|=¢1èúy*r3lœž•¥E�g`hßô°ÿ�Àdÿ� »¼6°¬6ðÇ K©…Q““€=êJ(�¬dÿ�‘ÖûGÿ�£¶kíã‹ÃåǦÁÏ|´’ÿ�ñ4·EPEPEPEPESS¿KÓn/¥I$Ž.R077°É?S@ë"çþG7þÁ÷ú2ÞšuD—Ã:˜làošØĉòªpÝÞÜøÏOZd–`i÷X/*>ïÞ[ÿ�tŸòh¥¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�®/â‡&·ý‰³C}Qm®¤–]‹nJ!†D°S—hϹž WiE�yýíŒì4ÿ�Ã¥Iv#ŽÆ/à·{gòÌa¹‰Ï\䌄8šÈм7â*Æy ³ž N=Ú$š;' r]šãf <©ˆs¸œ=^Š�ãô%ñ,†öÛÜÝÚ®*I² ©˜eùQÛ©‰p[nwcŒÁðµŒ4¥ðö–š]Þ›¤ÛYÃow"¢_.a,£ ÌO™ä0õË’ â½:Š�ó~%ZøkRûÚ%ÔWNH¬  kòÜ Jd;ùË>ð?ÙÏJ‹P³ñý®¯«ÏáÛ[¸~Ó}Ñý¡¬Ì(Š™¤ó;¾\tdשÑ@}r¾1H¾Ñig©OxºMÚF÷mc½n]âò‡ÈBíž ¹Ëp25x£N¾Ò¬ou ‹I’I%ž'û!¸¹ƒí ³j(o1ÌCnØöÙ<ð¬Q@?<4þ&o A.™=À†ä½ÕÛÇi#ÛÆae!–PÈÄ»!!U‡ÈHÁ YÞ ð…Ä_Úöºnâêz:\wù1$O0npH!pѰõ`c^“E�y`Ñuðç]ðÔ>¸…®þÛ$(d³†’Vh1‰O(> cËà’ÆǧÚÇæ«i±åÁ vfèíP;ZùŠƒHÎÑQ@Wá_ \&µÜ~}&7‹Q2O*À¢užå$‚9¹ ÊU”mè=jÖ—àKk;ï ¥ï…m.E¶Žm¯®„p0KŒAµŽâˆòäÃ($o㩯J¢€<jÛÁWpè$¶‡Á·]j6÷ÑÁ¦œ±Æ$•šWFó>Qå’6|½|=§jIÿ�„#ÎK QïÖK6µEXÞÝ"Æò-ÃùE•~RcÜ 8¯T¢€9O\k–:ÒÙ GòiÏ´Ì"qóHd˜øm¤¨R~N<òúƒÚëÂ:…•Ï‚>Ûâg$CTÝl~Õ;)Q.ö?Þ!ðÀmÇ^­E�s> Òÿ�±ô»‹UÒ®4øÌæ@."´ä%@$­¯îûžôÉ騢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ȶÿ�‘ÇRÿ�°}§þŒ¸­zç%ÒtÝSÆ7ÿ�Ú}¥ß—§ÚìûD+&ÜÉqœdt•�ttV/ü"Z ¦ž‘ÞhÏÓå#jO ÆÑi3!–Io®’1#–(‹;ª®I$€€6袊�(¢Š�(¢Š�+ƱøCTvû«'é[uâÀƒµ¼Œÿ� Oÿ�¢Ú€6+"çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þ€5袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+"ÛþGKþÁöŸú2âµë"ÛþGKþÁöŸú2â€5ë#Ã_ò ›þ¿úS-kÖG†¿ä7ý„/ô¦Z�×¢Š(�¢Š(�¢Š(�¬ÿ�È®Ø>ýÕ¯Y+ÿ�‘;\ÿ�°|ÿ�ú-¨^±/·¯ŒtfVM­Ú0õÉ„ÿ�ìµ·XšÌ:€ÕôÛÛ5º¬ÈêÓñ»nNºz �Û¬Ý_RŸO6QÛZ ©®î /–#w$œÈ:d:óÍ¥éñBXoa¨;:÷|œí»ñ¦ë?òðÿ�ý„ÿ�I§ ý¿_ÿ� ¿þþ"·ëÿ�ô·ÿ�Àñÿ�ÄVÍsþ7¸žßÁš³Y­ó^µ¬©köäy|â‡f<°Hù±ÏAÞ€'û~¿ÿ�@+üüEo×ÿ�èoÿ�ãÿ�ˆ¬Ÿëçû>ØÙÚë‚awc6môû’L&di ¹â0ᕆyÆ2qVôëéeñæ±måêBÐY[ùm5¼Ëš¯7™±ØlκyÇÚpoíúÿ�ý�­ÿ�ð<ñVë]Öí.,¡}×sSã‚#y?¹è†º:ÆÖ¿ä-áÏû¿þ’ÜPöýþ€Vÿ�ø?øŠ>߯ÿ�Ð ßÿ�Çÿ�[5ây"‹BœÌº‹©à.ž&óKvæ]Fy$zwè@íúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"¹½Zõ¤ð­‹ËâQ¼*—ÖöWJÍ!_õ¬#RN0IFÉ€í©a?›ã‰Ú#­"}™–hîbœ[³–R (m�¯ÈrÛŽAÛš�Ðû~¿ÿ�@+üüEUº×u»K‹(_A„µÜÆÅøàˆÞOîz!®Ž±µ¯ù xsþÂ/ÿ�¤·�}¿_ÿ� ¿þþ"·ëÿ�ô·ÿ�Àñÿ�ÄVÍcx¡”hS#}¸Dk$[±>AÏRÖ€·ëÿ�ô·ÿ�Àñÿ�ÄQöýþ€Vÿ�ø?øŠåµ™õ9|g¥ù:âx†;(JɸÃ\y|†š,)9ù@pXb¶,~Ó/Ä ™ þÑ i$s­Çž±yÁãØQ_ä`W~ xÆì’(Gíúÿ�ý�­ÿ�ð<ñVë]Öí.l`}ד˜Sã‚#y9ù=#5ÑÖ.¹ÿ�! ÿ�ØIÿ�ô’â€íúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"¶k›ð½ô·zŸˆ‘ãÔ–¿V¶7¶óF FØd#ÌYx3žŒ2�·Zî·iqe è0–»˜Â˜¿ÉýÏD5kíúÿ�ý�­ÿ�ð<ñrõA»Ó‰�‘pHöýÔ•frÞF%À I1©fv�Oá@_o×ÿ�èoÿ�ãÿ�ˆª·Zî·iqe è0–»˜Â˜¿ÉýÏD4žröwÌ­ªù vÍ ji:ÉQ°€v³Èö‚qVõ¯ù xsþÂ/ÿ�¤·�}¿_ÿ� ¿þþ"·ëÿ�ô·ÿ�Àñÿ�ÄV­Ãˆí¥vT$ˆÁ,xì$ý+ðTwic¨´æøÛ½ë=™½i¼Ï$¢v˜™æÞ0Ç®Hà@º×u»K›A„µäæÅøàˆÞN~OHÍZû~¿ÿ�@+üüE&¹ÿ�! ÿ�ØIÿ�ô’ⶨíúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"ªx‚ú[oxn(cÔ˜=ë}¤ÛÛÌñŒ2¨ó ‚€y†#ótëÀÕ] [fÕõØ&¶ÖŒ}ºÕ籸 ± hó´²ôó\ÜŒ}á _·ëÿ�ô·ÿ�Àñÿ�ÄQöýþ€Vÿ�ø?øŠäôÍjñæÐQ ñoíËşΰ»ì­ö'Ì,˜ÛóÛà·LvÚqè´Î]kºÝ¥ÍŒ ÂZòs büpDo'?'¤f­}¿_ÿ� ¿þþ"“\ÿ�¿†ÿ�ì$ÿ�úIq[Töýþ€Vÿ�ø?øŠ>߯ÿ�Ð ßÿ�Çÿ�T<O.5M%"}a.ÄnÎ+†‡`q¹dØ Ãåýá‚[#Õѵ]ÕQ?á"6÷UûM¥ÉXËÈ­"ànàL¯È¸�¶(gíúÿ�ý�­ÿ�ð<ñ}¿_ÿ� ¿þþ"¸ÛY÷On —Ū[SY`[ߊStN]~pø<Éò¯˜pß-z]�s—Zî·iqe è0–»˜Â˜¿ÉýÏD5kíúÿ�ý�­ÿ�ð<ñk_òðçý„_ÿ�In+f€1¾ß¯ÿ�Ð ßÿ�Çÿ�GÛõÿ�ú[ÿ�àxÿ�â++V{ƒã[ -WUò­ÖC|±‹ Dar¥å“¶ý£ 7äŽpªz=ܶ:&¢—ÑkÒÚ]^HmEw$É”‡s2|ÛÆ Îs·�Š�è~߯ÿ�Ð ßÿ�Çÿ�GÛõÿ�ú[ÿ�àxÿ�â+‘·‹Ww‡mØë'RŽûÌf/u±í~Òsæ9;så`í›-·½Íz=�s—Zî·iqe è0–»˜Â˜¿ÉýÏD5kíúÿ�ý�­ÿ�ð<ñk_òðçý„_ÿ�In+šÒ|A®?ŽVK­;P&« -¾mç?exœ…2«D¾W˜ ê[ ½?]Öõgž-«<Мߎ±ÈÑŸàõSEÖ»­Ú\YBú %®æ0¦/ÇFòsÑ rš¿œt3ÉmaWûoSóΚ·L<¿2çŹg•ŒŸ^Û«¤‹í_bðOÛ„ÂóÎO<NÀÈ$ûÛ·Álç8ï@?o×ÿ�èoÿ�ãÿ�ˆ«zF úžž.dƒÈK,/ýøhäd<àdes\î™’xŠS©>ººšÝÌÈ#3‹6·ÜÞPã÷?snsóîϵløkþAsØB÷ÿ�Je  zȶÿ�‘ÇRÿ�°}§þŒ¸§Ïq¯$ò4Í>X;Y¯Ý]‡û¾I�ÿ�À¿ƒJQ“]¿¾¾²[U’ÚÞ 0“qF•‰Èþz/Që@u‘á¯ùÍÿ�a ßý)–µë#Ã_ò ›þ¿úS-�kÑE�QE�QE�VGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÔ¯EPTu=* U I<mo/Á)•¶²õÎÃñ«ÔP7ü#qÐOWÿ�Àé?ÆøFâÿ� ž¯ÿ�ÒlÑ@ßðÅÿ�A=_ÿ�¤ÿ�?á‹þ‚z¿þIþ5³E�cÂ7ýõü“üj¼%k<¶òI¨êÅ Éûsü¬U—=}Æ·è  oøFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ�Ù¢€1¿á‹þ‚z¿þIþ4Â7ýõü“ükfŠ�Æÿ�„n/ú êÿ�ø'øÔ3xJÖymä“QÕ‹A!’3öçùX«.zú1oÑ@ßðÅÿ�A=_ÿ�¤ÿ�?á‹þ‚z¿þIþ5³E�cÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÖÍÿ�Ü_ôÕÿ�ð:Oñ¨¤ð¥¬³ÛLú†ªÏm'›k×8m¬¹çÙˆükzŠ�¯öiçöãþùÿ�‰£ìÒÿ�ÏíÇýóÿ�V(  û,Ýù^mõØòŸÌRŒ¨s‚:…š±öiçöãþùÿ�‰«P³Kÿ�?·÷ÌüMP¹ðô7wöײß_™­¤ób| m¬™ØÞŒGNõ¯E�Wû4¿óûqÿ�|Çÿ�ÄÑöiçöãþùÿ�‰«P>¡áèu9íf¹¾¿ßlæHŒSùxb¬¹ù@ìÌ?OøFâÿ� ž¯ÿ�ÒlÑ@ßðÅÿ�A=_ÿ�¤ÿ�?á‹þ‚z¿þIþ5³E�cÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÖÍ7„­g–ÞI5 YšÞC$dß?ÊÅYs×ј~57ü#qÐOWÿ�Àé?ƶh  oøFâÿ� ž¯ÿ�ÒðÅÿ�A=_ÿ�¤ÿ�Ù¢€1¿á‹þ‚z¿þIþ4Â7ýõü“ükfŠ�À›ÂV³Ëo$šŽ¬Z ‘Ÿ·?ÊÅYs×шüjoøFâÿ� ž¯ÿ�ÒlÑ@ßðÅÿ�A=_ÿ�¤ÿ�?á‹þ‚z¿þIþ5³E�cÂ7ýõü“ühÿ�„n/ú êÿ�ø'øÖ͆|/ln­nPÕKY|طݳ�ÛYzƒÃøÖ§Ù¥ÿ�ŸÛûæ?þ&¬Q@š~Œšd µåØGšIˆvWù‹7%OrN(»Ñ’ö{9¦½»/i/ÖU¶²òóÃëZtP³Kÿ�?·÷ÌüM%…Œ:u§Ùà.SÌy vÜK;—bOÕY¢€ (¢€ Æð¼‹&“;!Èòþ"êPQ[5á•UÒ§ �ÚÇÜÝJM�lQE�QE�QE�V/Œ ƒÁ:ùˆ'öuÆÐÝ3å¶3[U‘â¿ùµÏûÏÿ�¢Ú€5袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�âþ ëSèÿ�Ø‚ }4Ÿ´ÝI¬òBÐC#çt±¾0êƒÎüu Šv^>½ŠóJÓ/¬í<Û½: ±u-уpky¤gxÌgËPðmnNÑ"Ÿjô (Çl>%êÖÖ±^Ü=®¢N›k?Ù×Q‚%ó.B|Çh”G° ÝÆåypGM¨øÙï¼âÝFÊâ->m"6H§Iã˜ù“iJƒ½ÄdsÈ`0q]åæÓ|MH†±e§5–¢ún5ĆùXÝ´1C#ˆ€ ‰‰x&7P3V¦øš‘ê·–cO¶Ey¼ÒjQƒ;I*¦v�Y�¸Èù•I+¿¢€<»JøžñÝKg$pjˆ.u²Û]†¸)\Iò‚‚íRžzµ}ñ4YK§;6‘!¼ŠGª"Æx"RÒóœ �×z=ÁéŸ?µµ}ÎÛN€C¨ZGró5ç0Ü*p@NX1'îàWou«³ã :Ê×S’çGšêk(Z90Uâ ,lWq$<˜ÏÊÞ_AÉ­©|9¥Íª¶¥,2¼ìé!V¸Ä]1µü­Û7 £ ·#šÕ 'µñ^¸º$Sßk¯²–VóYéoQÞ‘†6nÿ�XÍnÝ™9®ëÆÚ„ÚO‚5­BÚ÷ìw6ÖrK ØC‰�ÊŒ8 å°¸Ç~9­ễÚ®¦ú¾§C¨;35Ôv¨²³7Þ%ÀÉ''<óš�á`×µ{Ý;RM+IJjPÅ­ÙÙÁ¨Á¼Ž±Iö3;Sa_ÞËÎÜ‚œçœQºñü¸Õ"ñë5ÌzÑÓÀ™¬£Œ(»1€Ì ;sï ÁÆ7´}nŠ�ò=KÅÚŒK¥%ŸŠÞwk©®ÌÚÝ©håŒ+ñ™+É‘RDG«g£ð×4›½g[‚_ÙÞ¡¾ §Âfƒ"/&9À€PÎë¸ç>NA'¹¢€89üe¨,:œfÚ[iYb¹±yR6ÿ�Di9%UGmÁùŸ6ÍŒ`V&½â)l²ŸKø•Ò]ÝœÜ\XŠ¢‰”[¸\2Æ>éåð~ð#Õè  :-ȼÑ,nä]o œ2°ã–Ê€§'œ€ì�«ÔQ@Q@Q@Q@Q@Q@Q@Q@Q@dxkþAsØB÷ÿ�Je­zÈð×ü‚æÿ�°…ïþ”Ë@ôQE�QE�QE�‘â¿ùµÏûÏÿ�¢Úµë#Åò'kŸöŸÿ�Eµ�kÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VG†¿ä7ý„/ô¦Z׬ È.oû^ÿ�éL´¯EPEPEPY+ÿ�‘;\ÿ�°|ÿ�ú-«^²<Wÿ�"v¹ÿ�`ùÿ�ô[P½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@bxMô2@ÉwtäŸ5ćúÖÝcxWþEè¿ë´ÿ�ú5èfŠ( Š( Š( ³<F‹'†5doºÖSôØkN³µÿ�ùõOúô—ÿ�@4fÀçNµ'þy'òb«éÿ�ò µÿ�®)ü…2}WNµ¼ŠÎâþÖ©†èà’eWqœd)9#4n²u»ËÛgÓ`°{x建0—ž&‘UDR?Ý ¼å�ëÞµ«\ÿ�—‡ÿ�ì ßúM=�7Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÔ¢€2ü¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­J(/Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÔ¢€2ü¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­J(/Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÔ¢€2ü¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­JEea• Œ‘Áî84™åøþ‚šWþ dÿ�ãôy~#ÿ� ¦•ÿ�‚Ù?øýjR� 8ô™åøþ‚šWþ dÿ�ãôy~#ÿ� ¦•ÿ�‚Ù?øýjQ@~_ˆÿ�è)¥à¶Oþ?G—â?ú i_ø-“ÿ�Ö¥—åøþ‚šWþ dÿ�ãôy~#ÿ� ¦•ÿ�‚Ù?øýjQ@~_ˆÿ�è)¥à¶Oþ?G—â?ú i_ø-“ÿ�Ö¥—åøþ‚šWþ dÿ�ãõÚµ«=SLŠîïOž ¹ÚY¼L¸ŠG+¨Nõ±YZ¯ü…¼?ÿ�_ïÿ�¤ÓÐås–wZþ¢“Ï î› Ku<(c#°Xåta0É!sÐu®Ž°¼;ÿ� Ùÿ�ì!{ÿ�¥2м¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­J(/Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÔ¢€2ü¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­J(/Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÔ¢€2ü¿ÿ�ÐSJÿ�ÁlŸü~/ÄôÒ¿ð['ÿ�­J(/Ëñý4¯üÉÿ�ÇèòüGÿ�AM+ÿ�²ñúÓ,ª@$Ç'©ëK@~_ˆÿ�è)¥à¶Oþ?G—â?ú i_ø-“ÿ�Ö¥ !†AgPg—â?ú i_ø-“ÿ�Ñåøþ‚šWþ dÿ�ãõ©E�eù~#ÿ� ¦•ÿ�‚Ù?øý_ˆÿ�è)¥à¶Oþ?Z”P_—â?ú i_ø-“ÿ�Ñåøþ‚šWþ dÿ�ãõ©E�eù~#ÿ� ¦•ÿ�‚Ù?øý_ˆÿ�è)¥à¶Oþ?Z”P_—â?ú i_ø-“ÿ�Õ öæÿ�KónÌFtžxXÄ…¼¹]�’FBƒÔÕºÎðÏü‚eÿ�¯ûßý)–€6(¨/^ê;Iʧ¸)²˜•¡`­Ê¼÷M×þ'Oã´Ô<1§Úie†–V q™Wv>›hÒk¿ò/Eÿ�]§ÿ�ѯNûOˆÿ�è¥àÊOþ1RèWv µß”' #8‰Ë(ÜìØ€O_A@TQE�QE�QE�É¡Žâ !™Å"”uaÀŒiôP(ðŽ€�J·�t5Ïkß¼+â-RÚîö Ö+xÊ h$ØŒIÉ,GÍžƒ‚+»¢€)ézU–‹§Åa§À µˆa# [êI5™â"F¯á~zêoÿ�¤w5¿\Ç‹î¾Åy᫳Ïq·ToÝÀ›œæÒàp( ¢°?á(?ô�Öÿ�ðñTÂPè­ÿ�à(ÿ�â¨~ŠÀÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅQÿ� Aÿ� ·ÿ�€£ÿ�Š  ú+þƒÿ�@ oÿ�Gÿ�Gü%þ€ßþþ*€7è¬øJý�5¿üüUð”ú�kø ?øª�À¸Ðn¾Õ¨ÊþŽûZ󦸰ÖdhYc;‹@¤³‰ Ú¤*vûš†ù¾ Ÿ„±Ká|n&dy ‘”D-Ï–²Ë<™ñ÷Üà×Kÿ� Aÿ� ·ÿ�€£ÿ�Š£þƒÿ�@ oÿ�Gÿ�@µ¾¯â”ñŒ+ÝÍ™îRϲù†ÔIh aO½vœ/\OÓì¼gͤñÜišiº½šxÒ+iX‰n%‘rÆO—롾l†ëÓÂPè­ÿ�à(ÿ�â¨ÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅP4{?'†î­µRI5r_Ê»xaU^Ü* c×#9-Ž1Xwºo‹.õË Bs;EmtòÅo·Û =¤«»s�Ìë$›1Ê•ÁÁ9Æÿ�ü%þ€ßþþ*øJý�5¿üüU�rÖpøø§»mQÇ“p {!*“öfŒœ,¶EÂä‚09=†°<?�×™›Q(vqfA#ydù.Jm'ê¿ü%þ€ßþþ*øJý�5¿üüU�oÑXð”ú�kø ?øª?á(?ô�Öÿ�ðñT¿E`ÂPè­ÿ�à(ÿ�â¨ÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅPýÿ� Aÿ� ·ÿ�€£ÿ�Š£þƒÿ�@ oÿ�Gÿ�@õ•ªÿ�È[Ãÿ�õþÿ�úM=Uÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅUY5£¨kú'KÔ­¿Ó]·ÜÀãÚ~3“Í�v…áßùÏÿ�a ßý)–·k‰Ñ¼Cö{k¸WGÕg ¨Þ¯™ ¸doô™zÐ_E`ÂPè­ÿ�à(ÿ�â¨ÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅPýÿ� Aÿ� ·ÿ�€£ÿ�Š£þƒÿ�@ oÿ�Gÿ�@ôVü%þ€ßþþ*øJý�5¿üüU�oÖŠì.u TŠÓíÖñ܉.¬wªýª-¬6eˆS†(Ø$³­'ü%þ€ßþþ*øJý�5¿üüU�a[Øëv­¢hèÚD²E$Öª-U·âc"«1Œ.Ï(ýàwuªFçÇV×·¯ocÂM‰ÀE¸¹“ÍÙÜ�¶òÎAÎìóŠê¿á(?ô�Öÿ�ðñTÂPè­ÿ�à(ÿ�⨓ÓfñV· xkV6âöäH/"œ˜P"¾žÉ—�Ž ò· 9äVŽ“gãƒý•.£«^’Ÿ¶Dm-#2&àWî³Ü­ÊôÃVßü%þ€ßþþ*øJý�5¿üüU�3^‡Ä3ÿ�d]m†AÎ#Ý 0IFÜ3Àhðxjæ,ôÏéÐiöVo¨FƒP™î¥?b(ñIxî]† brÀ&�#{WUÿ� Aÿ� ·ÿ�€£ÿ�Š£þƒÿ�@ oÿ�Gÿ�@Z~5‹SÐô^‹8ícR½«Æ\@Á™JæBÞj¯9 †íŠï+þƒÿ�@ oÿ�Gÿ�Gü%þ€ßþþ*€7è¬øJý�5¿üüUð”ú�kø ?øª�ߢ°?á(?ô�Öÿ�ðñTÂPè­ÿ�à(ÿ�â¨~ŠÀÿ�„ ÿ�Ð[ÿ�ÀQÿ�ÅQÿ� Aÿ� ·ÿ�€£ÿ�Š  úÎðÏü‚eÿ�¯ûßý)–¨ÿ�ÂPè­ÿ�à(ÿ�âªÏ„&ûF€fò¤‹}íãl•pËþ“/v4»EPEPEPEPEPEPEPX"ÿ�¿…ÿ�ì(ÿ�úGs[õâ/ù ø_þÂÿ�¤w4±EPEPEPEÅÜx–k?êvoYìãµ¶ýÎý’y<âK7Û±ÜN7ƒÀ4ÚQ^ccãÝB ÃrÃ$Zíåæ’÷·(n¢…ÙüÈ•€ 2¥Ý@ûŒHÍi^|D¸´Õ†žº,37ÙáÊšŒ{|É6ãÌ#3ÀÁâ€;Ê+™ðÆ«q©xJæïQ¼Ž ˆîocšhäWá'‘F¨*…Á+È�‘Írþñ¥èÑ!ÔY·ÖcþÈKËÙ.8RÎà˜ÿ�tÒE�;ä;J–_=hÓ¨¯8·ø›s5¥ÍÌ–l#ˆÅÚ‘Urg¸…±'–só@¸ùz0$ŒàlkÚåÍÏÂé<Ic{.•9Ó?´#Ú#rŽcmêAŠŽ�'¶3@}ÎZêsÙgÃԺݽþLƒ<|œ©Ú|¨Âãf÷¾Â= `]üN–ÞýlÓB¿ÚžÜ¹¿Ž4'–#†p“÷[„c’b€= Š( Š( Š( ²µ_ù xþ¿ßÿ�I§­ZÊÕä-áÿ�úÿ�ý&ž€7+œð§ü‚.ì)¨édÕÑ×9áOù\ÿ�ØSPÿ�ÒɨrŠ( Š( Š( ŠÁñ¶¥&àgQ‚øY\[Z<ÎvHȸpAÜØ\cœñÎ+|U#ø¯K³ŸSŠÒ²¼yâ“b-̱y`6Xåíi#îð æŠó­/â&¡'‡¤Ô.´xY!Ó¡ºŽEÔPµË8NȪ˜,w±ÀL0x’Ëdž¯­hýŽ>ÒkÏ&ç7©)•¬’*¦ÕÃG»n$Vä®1@ƒEq-×â› 6ñWö<2ØO9Œ¬ ¾Dx„c¥Žàò|ªA;8Æ fê¿u=*Ú($ÒlN Úiº’#zDJ-žr-Ÿw÷n£æäœg4é4W-¤øÈjž1ºÐVFŽ(d™.-¯<Òv4c›ÒDŠF z­®\ÞGã?M‡ÄóY­íœóGg‹pHÚ Š Äφ )<“òñŒ�쨮?Pñ¼Ú~‹k¨¾ß¾šHL 6×¼’º—“¾'Œç½\ðФñDwÒ>œ,ÖÚo-?Ò£˜¸çïæ6ã”nGÒQE�QE�QE�Vw†ä/ýÞÿ�éLµ£YÞÿ�L¿õÿ�{ÿ�¥2ÐÅQ@Q@Q@Q@Q@Q@Q@`x‹þBþÿ�°£ÿ�éÍo×;â›]Bóö÷¶Ñ\@u&&):œZÜc ðhnŠÇÿ�„KÃô/i?øøW?­h6VZŽŸok¢xl&¡xÖñyºXb€[K&I 3óÆ�p}y âŠòÙ<Mà„Óä¿OÍ%¢K,k7öT²ã’Fd.˹vÅ'N~\ ¿5ç…¡"3à-×mk�²´Ü²ã$¾ÜÎAÏb �zÏiú…5=6×P¶Ð4³ou MkÁ*À0ÈÇŽ÷Âk½4 M]·$¶‘€ßº`ñÈç8õ�ö –ŠÇÿ�„KÃô/i?øøWšÃqåÝÚß xz+©ÞZÍx4x¼·ŠÜLO—‰Ë‡"ûÉ›¾Ñ¼ب¯0‡\ðtÖ±_7‚µ«ÚÉp«s¤A8Y!L‚Ì�_ß+n#nw ¤Pº‡N©¤;x6Ê-3QIcÛ&ŸoçG"ÜCÈY\©‰š`8ôah½¿ðÝ%Ö££i÷—¡Rk‹T‘ÔH�°$ ’Ò®GúV­éÒÝMá-6Ñ£»¸¶Øö¶DR´yùsýÞ}ÁÆF ³{á5ÞšF…¦®Û’H[HÀoÝH0xäsœz€{PKY°xwDµÔßR·Ñ´øoÝ™šê;TYX·Þ%ÀÎNNyç5ü"^ÿ�¡{Iÿ�À(ÿ�¹]CM°³×%DðÒi±M+ÓRI¦gUÂoÞnÌØP˃òüÜà�wmg ß%ã3"\ÈÛT¤.vîí»ÇÅC¥iVz-ˆ²±I�ï&$™åbÎŘ–rX’ÄžOS^tž'ð+ý‰G‚%7©°[ǤÁ, ŠXK„-…¶ˆc¥VÔ|Iái4=JçEðBIuoÄð=ÎÃ"Còä²îŒÚw ýÓ@·Ecÿ�Â'á¢2<?¤ÿ�àáT¯|!áÆ»ÓHдÕÛrI i û©ŽsPj�éh¬øD¼7ÿ�Bö“ÿ�€Qÿ�…s:öŸ£éý²Ãñék§]_ÝoÒ–IvÀcÈB‘/u?w¾x�隷,‹Wðå¬÷0êží ©KkK]")'XÄJZ@¬Ã0ä©éŽ5aõO Éɵð,&âÚòÞÚHf´µRD—MlYHb9’9øNhÒë+Uÿ�·‡ÿ�ëýÿ�ôšzgü"^ÿ�¡{Iÿ�À(ÿ�£Ñlµm.êÏJ²µž;†+$és €ŒÓž”Ñ×9áOù\ÿ�ØSPÿ�ÒÉ«£®7BðÞ‡wgwqu£i÷¾¥|^Y­‘Ù¿Ò¥êHÉ ®ŠÁºðŽˆÖäZhZ"M‘†—OGP23ÀÁ<gõÅqË{áë¡“Rð¶Ÿx÷w÷VvÐiz:¼€A<¨ÎÃ'åÚ¨N9ðG@O¢¼ÞÛUð…ÅãÛŸùB;ˆíå•ìm6ÆÒ\=²“‡$66^=ñŽjþˆ|%­ê/b<¤ NPÜØÛâO&_*Llfû®@çÏæ€;š+þ/ ÿ�н¤ÿ�àáUtxhY>íK››ƒºK8Øÿ�®~2GAÐÀ@™ÿ�w†?è\Ò?ð/þ&±áÑ<8<O©é×ÐÚÖÎÚåì1©G™HbxÀò—:š�êê9à†êÞ[{ˆ’h%B’G"†WR0A‚í\%ý–i¢xÆí<7áÖ›Ci<œéɶ@¶±Î¹Ë‘GN•Õÿ�Âár2<9£ÿ�à _üM�M¦èšNŒ².•¦YX¬¤­ºDŽ™Úzš½YŸð‡xcþ…Í#ÿ��bÿ�âk#Ã~ðäú\Ï6¥HÂþõ{8É ·2ªŽG@�Ð@ÚŽ“§këo©éö·Ð+‡XîaYT6È Î çÜÓàÓí-,…¥¼v¶ª¥+aå*×nÜmêzbªÿ�Âáú4ü‹ÿ�‰¬AáíKos xkû3ììáÆžˆðɸmVcò¾åÞÜ�Wo9È4¸Úœói²´RïÓYšÛý"L+2•,Ãvˆ,2Ù?3zœéW Þµjñ6‰áDXÚãû#pæß&ìÈWä”®Kã;z_…´ ­&Î{Ï è‘]É 4ñGg,r`nPqÎ#ð  ú+3þï й¤à _üMdøwžŸL™åÐ4©_Þ /g!Væ@£§@�Ð �êh¬ÏøC¼1ÿ�Bæ‘ÿ�€1ñ5Î#D‡Æo¦ÜèþÎ{).biˆŒŒ•/’ïóò©}îpÚÑ^{ý•h÷ºõ’h3YÇ ön4T>b¹“åÛæ�ç÷x2óœ¨ÀÎöƒáï êÞÓ5|5¢ .í"‚X P]esŽ{ó@%gxgþA2ÿ�×ýïþ”ËMÿ�„;Ãô.iøÿ�Iá8!µÐÞ x’c¾¼TŽ5 ª̸��  º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ç<Us-­ç‡I®ÜêL0²?è·7²¯æEtu…¯ÿ�ÈkÂßöý#¹ ÿ�lj_ô+jÿ�÷öÓÿ�Õ;œ^ÞÛÞÝxî{»s˜'•lšH¹ÏÊÆlŽ}+«®Æ÷Ûø3Vk5¾kÖµ•-~Ã/œPìÇ– 69è;ÐLºfp\Íðݤ.í#o‚Àîvf9—’G÷ª7Þ±¼6Hž¾µ¶¶¸ koœ"¸`…˜¦C¸fÆ}†5|O¯Ÿìûcgk® …݌ٷÓîI0™‘¤*çˆÃ†VçÉÅ[Ó¯¥—ǚŷ—© Aeoå´Öó,j¼ÞfÇa³8h~éçgiÀ‰ªßÆŠ‰áMUQFVK@�ô¿ª:†»¨G{¥!ðÆ¨ ·L€4Ö¹'É”ñ‰<wÀÆyÎë«Zÿ�·‡?ì"ÿ�úKq@ÿ�lj_ô+jÿ�÷öÓÿ�Ö:iZlo§ÃR­¦hÊÛØ’eÇïxo•yëÀô®ÞŠ�à/ô Ý6[(üwf$O,Kkž®«¼92‚Ã$Aî*¾›áM/O³ky|w¹Ë»‡N$g*¬Šª¿(8U9=I5Ñø‚ú[oxn(cÔ˜=ë}¤ÛÛÌñŒ2¨ó ‚€y†#ótëÀ×I@ÕµÝÅŸ›ö_ê0yÒ4ÒùMf»än¬Ø›–=ÉäÕmC]Ô#½ÒøcT[¦@k\“äÊxÄÇž;àc<ç�õÕ­È[ßöý%¸ ¶5/úµûûiÿ�Çë6æÞ;›æÔ¯R+µo‚XÓŒÊy³‘]s~ ¾–ÛÄ^Šõ&zßi6öó<B# ª<  aˆüÝ:ð4‰¤h6:>‹k¥§/nb¶*Ë%Äzyvuá]ˆàq»«­ghË2·ÃÉŠÎÌòƒŽ$fbß¾ä‘Á'­I¡klÚ¾»ÖÚÑï·Z¼ö7V!mv–^žbK€;‘¼3‘¦kW6‚ˆCn^,þu…Øeo´y>adÆßžßºc¶Ó€Š FòÖÞ+{jpÁŽ8ÞÍU ��Ÿ�Úªjî¡à2Ý2�ÓZäŸ&SÆ&<ñßç8®¬mkþBÞÿ�°‹ÿ�é-Å�Cý±©Э«ÿ�ßÛOþ?TnÒ;ûȯ/<uquíŽy–ÉÝ c6@äþuÖÑ@_ö}ŽöøW2ngI y6,œ#­ê¹8=³Å14­6?3gÃR¾jì“m½€Þ»ƒàþ÷‘¸Ǩ­Eâýw^²Ö­§Òtëë‹-.xìPÃ1k¥”Â5”"Ù6‘ƒÎ+ºÄ±¤Š+�À2•<úƒÈ>Æ€0¿¶5/úµûûiÿ�ÇêÕîäÖ4ˆ'ЯìÒk–_6y *‚VÆF9ù}1ï]-dk?òðÿ�ý„ÿ�I§  zã4-Vò+;¸ãÐu„]Jø b’Ü+¥KÓ|ª0+³¬ ÿ�È2ãþÂ7ßúU-�2MZòXÚ9<-ª<n ²³ÚÀõyÕš–vZGiÃéÚ)|øáXlB$Ÿß æà7¿ZgŽ49õ«¯yÍö[ó4—0-³=ºyN¹|©ùÙ OÉ‘ÈZåü?¢øÃEK;=>ÆãJÓÅÜ·I/5Ái£-‡‡Ë( ¨ 2`®À(¥F޲ ᲇ!…µ†G;ºù¾¼ýi4 øG~ÔöþÕæººžI¦º›ì"W.ÅÈ,’.FâH8Î:b¹ë¶~ Ó4Yä1¥µ´Zm¸±>k´Z/(üûL‡%Ôì H€Zµ<1¥øÂÖÃÃÖWðj0Å¥Þ@­‰mpÖÿ�c(Êv±Ü©6G?1Fna•�í¶oÿ�èYÕ¿ïå¯ÿ�ªš.½%ƒ°ðƨqur¿,¶ØâgåŸOBF èê 'þ<Ÿþ¾'ÿ�ѯ@?¶¯ÿ�èWÕ¿ïí¯ÿ�¬Ãmd×W7Gáô¦âéJ\Jb±ß2’ |ܰÈŸA]e2RV"3! NÅÆ[ØdϹ Gû3Jòn!ÿ�…n|«—:}žÃl¬3‚ÃÍùˆÜpO©õ­H5;«[x­íü%©ÃH8ã{ETP0�l�¨üí¶‡47ÚlÚ|Ÿo»•!•ãcåÉ;ʘòـ¸\gªžØ'¡  oí«ÿ�úõoûûkÿ�Çë#ÃZ½òisðæ© þн;–Klne$s0ät=²8Èæ» Åð·ü‚'ÿ�°•ÿ�þ•Ë@ ýµÿ�B¾­ÿ�møýeµ­‹Ý\Ý7ÃÙMÍÒ•¸˜Ãc¾PH$1órà uôÖÔsóo'îÚO”üˆ@-Ç@Iþ"€9ì½+Êž/øVß»¸`ó§Ùì1+ Xy¼‘“Éõ5©o©\Ú[EmmáJ"P‘ÅZ*¢Ž��M€¥Càë°³¾زhé=ÛN¶ŒbÚ™U"Äì¡~PO#,XàfºJ�ÆþÚ¿ÿ�¡_Vÿ�¿¶¿ü~²|9¬_&™0_ ê’·Þ¬–ØÜÊHæaÈè{dq‘ÍuõáùÏÿ�aïý*–€í«ÿ�úõoûûkÿ�Çê†Û|ÝŸø@îszstvY~üÿ�·ûï›ñÍuÁ"ÚR°™˜!Ä@€_Ž™<sÓš�å¾Écö7³ÿ�…{/Ù^_9¡òlv4Ÿß+æà·¿ZÓÍò¨Uð¶¬��IiÇþFª~ ÑåÒ,uöÂ+«Ö¸†×ljbBˆ»HŒ”r·Ýê0O$×M@ßÛWÿ�ô+êß÷ö×ÿ�Ó|)#K¢< ÂÍ}xLr,‡í2ðv’3ô$VÝdxkþAsØB÷ÿ�Je  z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æüU—:‡†bŠîkGmQ±4! ¯ú%ÏMêËíÈ=k¤®oÅW–º~¡á››Û˜m­ÓTmÒÍ D\Ú\’x(×ö¡ÿ�CV¯ÿ�~­?øÅUÔ,îtËGº¹ñV»å¯Q ¥¼®~ˆ–寵Zÿ�„ÇÃô1éøÿ�T5èךl–úwŒ4+9ß6YÒP¸eB¾x .îa±ÑàÕ¦ñž²l'eIã´·‘|²vÛ©‚ c€3É4@ͬI¤§‹µ±z‘™v5¥º«( 1V6û_€;IÁ#8¬‹­FÎm-4è|uáXí„qÆÑ<*c*£  -‡”“ÀÁ'&®ÚëšRxõ ¿xz{qŠ(•‘$AÁ94‚ 8A’œ P×ö¡ÿ�CV¯ÿ�~­?øÅdêú5òêz�>%Õ\µû�Í®Pýšs‘ˆzðG9'¾Öÿ�„ÇÃô1éøÿ�Y:¿Šü9&§ 2xƒJeŽý™ÊÞFB³N2yàdõ"€5¿°õúµûõiÿ�Æ(þÃÔ?èjÕÿ�ïÕ§ÿ�£þ ÐǤàt_üUð˜øcþ†=#ÿ�¢ÿ�â¨>ü2æÖ ¿kq½Ì‹dZ[²ncµC0·*™'q< ÐþÃÔ?èjÕÿ�ïÕ§ÿ�¬}c]Òu»#oã/Ái ‹,°Êé+;C ”:Œ«�ppp+cþ ÐǤàt_üU�Øz‡ý Z¿ýú´ÿ�ã“«è×Ë©è�ø—Ur×ì4v¹CöiÎF!ëÁä`žø#[þ ÐǤàt_üUdêþ+ðäšž€Éâ )–;ög+y >Í8Éç’ÔŠ�ÖþÃÔ?èjÕÿ�ïÕ§ÿ�¬ûðtË›X.ü]­Æ÷2,Q‘inɹŽÕ Âܪdœ Ädð+Cþ ÐǤàt_üUcëÝÙxv HdYe†WIYØ‚L ÔeXƒƒ@Y·Ûî/ ƒÆ×›f§Y--ã¶v°Ýn7)ÚØeÈ8<Õ8µkI^42×ÕžäZ&ysmI7Z,¶åÆìnÈÆi–zͬ­ÅìÞ;ðÌ‚l‚ˆŠ¤¨ KÛ…$ gæîÙ¢»·Fn<áYSíBêp°…2°ÆMÉà d0¿/Ë@wö¡ÿ�CV¯ÿ�~­?øÅdêú5òêz�>%Õ\µû�Í®Pýšs‘ˆzðG9'¾Öÿ�„ÇÃô1éøÿ�Y:¿Šü9&§ 2xƒJeŽý™ÊÞFB³N2yàdõ"€5¿°õúµûõiÿ�Æ(þÃÔ?èjÕÿ�ïÕ§ÿ�£þ ÐǤàt_üUð˜øcþ†=#ÿ�¢ÿ�â¨æþ =kû"ãÆò^f â_ŒIXó ¶Ø70*2ÜGQ[_Øz‡ý Z¿ýú´ÿ�ãÊj/¡ê-Áñ¾¿ú/îCFey�Y|Ü ÆF òýÞ8ë]_ü&>ÿ�¡Hÿ�Àè¿øª�?°õúµûõiÿ�Æ*Þ›wi®x~Iõ»ûÔûs*á Ù§çäNsW¿á1ðÇý zGþEÿ�ÅU¿hÚž¹áø4ý^Âîa|ìc·¹IfŸœN9ÔW¡iW³ÙÝÊž Ôm•µ+â"…-ʨûT½7ÄÍù“]¥qš'‰t+K»{½oN·ž=Jø<S]"2ÿ�¥KÔ‘@êÖ÷z>™-ô¾#×&HÊÃfX–`£¬ ’2I� ’@B F=±.¥âýKHº˜þêÖþM9d€Ê0$àMij>#ðÞ¡a%²øºÆÑŸžÛP…dB<HíŽAf¸ËÍ7Ã÷:µºéï¦<)}+êvë<Æo+*G±SŒíØrÄõÎà¬ÜY®ìüA˜m›ìí™lx—û‡÷?{Û­G¦\®±«êu‹õIÞÁ"ieˆXº|åÀ\¬D†6È Ç­s‰á†Ñù[|A¥þêå®tÖo×9F܇xäà¶Xva[š,¾Ðo¾Ñiâë6ŒYEd-ä½·Ø#Œ±ŒðØdžAç'€7¿±5ú5ûõiÿ�Æ*¦‹¡êbÁ÷ø£UíW8 ±óŸa'8Æ{g¦[ÿ�„¿Ã?ô1iøÿ�UôŸxdY>ïéJ~Ñ? y?ë_žOOCÜs@N‰¨€Oü%:ÁöZñŠÆS.=Cþ/Zÿ�û<&ËrKöŸ³dþëîùÆxæ¶$ñw†^7Eñ>•0 :ÞÅ•÷$gê+–6þ:"éð±HŒ_›ó/Ûl·™L¢oùçŒ Füc©#¦��ݽ·»°½Óídñ&ºÍ}3A$V{CˆÞLÑòÆÝºâ—K¶»Õ¬šêk‘ªÏ4 ²Cf4R4mÒ1¹9éY——>¼›L•¾!*>Ÿ3O[ëC½Ø:å·!ÏÉ# ^jÞ«x[@Óä´_YÞ‰.%¸2]_[î #p6,ÌÝ?ˆöÀ�¿Øz‡ý Z¿ýú´ÿ�ãá­úM.b¾%ÕcP½R;\.eó äã'¶OVÇü&>ÿ�¡Hÿ�Àè¿øªÇð׊ü9—2K¯éQ±Ô/\¼Œ­s)¯B#ØÐ³èÚ‚#7ü%ÉÚ ÂÃhIú~â¹Ùu[È4»ëéu(°™£»‡ìúyxB¢¹~k.×Sò’Nzd:)<]á—Ñ|O¥FÌ·±e}ÆIúŠæ÷xsû;ìð±ÿ�忞қ»Ìzà+iù¾lã9êN�4u·hïmæë~$ž¥HZh-ì™bg`©¸ƒ±åð)úDwÚº]ÄûÄ6sZÎmæ†æ-ÊÛU"e «©È=ýAªW~¸[5ÿ�…ˆZ–`Eõ› '–,„ä´ƒ~j括øgG¶’ñ¥ñ’BæK«Û`Àž¿ê¹9 “ž½0§ý‡¨ÐÕ«ÿ�ß«Oþ1Y>ѯŸL˜¯‰uXÇÛïՎ׋™A<Ây8Éí“Æ­ÿ� †?ècÒ?ð:/þ*²|9â¿C¦L²ëúR1¿¼`ò0p×2zô ‚=�j¶‹¨ª“ÿ� F°p3¦Oþ@®ZMzh´[½Qõ_ˆìîMµÄa4ÒÈ@Bíqó…,ÙÈÆAÓÍâß Ë‘éQ—R¡Òú-Ë‘Ôd‘‘\ä‘x:m:{¼ko$Wr4—äÞÚƒ{¹“ ò¢Œ SÆsžhþ°÷š-ÅŒsk¾!™næXHc°Â;ц<Ÿá$àSô3w®ÛÜɈ5ûf¶¸ky#ž;C�¤à¤L¤a‡C× àƒU/.<-¨%¼w^;ŠH q F¿µù¤Y<Ärvä2c (swGÖ<%£C:§Š´ë‰®fóî.'½€<¯µWq µAÚŠ8¦zäЗö¡ÿ�CV¯ÿ�~­?øÅ'„ãht7æyÝo¯–@¡œý¦^NÐ~€ _øL|1ÿ�C‘ÿ�ÑñTžž­ ç·•&†KëÆI#`ÊÀÜË‚àŠ�Û¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬gþBžÿ�°ƒÿ�é4õ¯Y:å½ì’i—60G<–—fVåòò¦ƒƒÝÅ�kUbòæÃJžîÖÞ+‰b]þ\²2)¯*Žzz)ªŸo×ÿ�èoÿ�ãÿ�ˆªzŠjÚ¥ºÁs¡áîð¶GûHǶq@ Ô¼Y5Ÿ‚-¼M„2Å%´wRÄ÷%v#(nQ<ã'j÷,\‹\¸>/}k8‘ £]C:ÎÅ™U‘H(PËÿ� 7Nq‘œiônwøekÄ!X‘"(«´!@R¸à©=Á«vÖº¦£>¡‡ÐÜÍ»sÉ«<CX e!*¤…�J�êkZÿ�·‡?ì"ÿ�úKqGÛõÿ�ú[ÿ�àxÿ�â*…ùñ Ýî—2è–àZ]4Ì>Ü9#ÇÜõqùPQEc}¿_ÿ� ¿þþ"·ëÿ�ô·ÿ�Àñÿ�ÄPuírãEŸMÛgÖ×wqZ¼;#FÒ8U l*z÷eô'·\µÝ®£}íχÑåƒûYÄy ¹IŒ.Æ!€ H b´>߯ÿ�Ð ßÿ�Çÿ�@5­È[ßöý%¸£íúÿ�ý�­ÿ�ð<ñBüø†î÷K™tKp-.šfnƒ ‘ãîz¸ü¨¨¬M{\¸ÑgÓvÙÅ5µÝÜV¯#NÈÑ´ŽH ž½Ù}IÅ;íúÿ�ý�­ÿ�ð<ñŸwk¨ß_Á{sáôy`ÆÅþÖqCnRc ±ˆ`$  º^¹s}­júdöPÃ-€‰ÔÇ;?˜²oÛÈ¥OÉÛpç‚pqï· ŸIµE]Y4¹Ê^¹ØíåíeÌ+ŸõgO—vFV âÞC$~&B[•Û0Û““´lŠX‘ƒÍ6 [iâ™<9¹â`ÿ�½Öå; ³†È‘†ÕÃ6HÚ¸Æ�vµ­È[ßöý%¸£íúÿ�ý�­ÿ�ð<ñBüø†î÷K™tKp-.šfnƒ ‘ãîz¸ü¨¨¢±¾ß¯ÿ�Ð ßÿ�Çÿ�GÛõÿ�ú[ÿ�àxÿ�â(šŽ³¨G«I¦é:l7·[¥Ìþ}Ñ€*;: R·11¿�c“Ím!fK®Ö ¹Î¦k–Ô,oõ;˜®n<>x×h’ bHY—9ÚÅ�ܹþ‘íZ"û^�¡[€:~?øŠ�Ú¬gþBžÿ�°ƒÿ�é4ôß·ëÿ�ô·ÿ�Àñÿ�ÄTºÎ¡ªéOq¦Cm­ËLî.¼Ãƒ ˆ�GwÐV†T.—p�ÀþѾ?ù5-o×/§Ç¯i±\[®“o2Ë™’O¶mܲLî¼m88a@wn±ÙNïqödXØ´ù_Ý }ï˜Ç^F8¯-¶ñíâxgBœë0Nd}Î¥¨Ï<„Ì©,*‹Ó°nÝʲ¤“^…ö½þ€vÿ�ø?øŠ>ׯÿ�Ðßÿ�Çÿ�@-ÇÅé-ìg»}Ú$ŽæhV9õTYXGÈIEV*߻۵±Ë§'vG_áÍ~MgS×!2YIoiqµ{y·—†H#‘\Œt;‰#ørmý¯_ÿ� ¿þþ"µëÿ�ô·ÿ�Àñÿ�ÄPµUÑbHt÷X×j›«–#ÜÌäŸÌš§ö½þ€vÿ�ø?øŠƒO¸ñµ³G.‡lXÍ+Œ_Ž#0þB(¤ª:έi¡h÷Z쩽ºnbîÐ ’�${š©öýþ€Vÿ�ø?øŠ>߯ÿ�Ð ßÿ�Çÿ�@ñ\ÚÛjšVªV=kM¹džc å±Ýa—€Bœ1Á^y5ØV7Ûõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüE�lÖ/…¿ä?ý„¯ÿ�ô®Z_·ëÿ�ô·ÿ�Àñÿ�ÄV~Ž|C§YIè–ìZêæ|ý¸t’g¹è€:šÁñ¶¡6“àkP¶½û͵œ’Ã6â@2£9l.1ߎj_·ëÿ�ô·ÿ�Àñÿ�ÄQöýþ€Vÿ�ø?øŠ�¥à­NmRÃPy5?í8¡½h »YG±ª¿,Ã!FW’¹=5c}¿_ÿ� ¿þþ"·ëÿ�ô·ÿ�Àñÿ�ÄPÍcxcþA3ÿ�ØFûÿ�J¥£íúÿ�ý�­ÿ�ð<ñCH>!Ó줅ôKv-uq6~Ü:I3ÈÜôj�ê*–³sug¡êV6ÿ�h¼†ÚI ‡þzH•_Ä€*ŸÛõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüE�UðÅÜw­4x«ûq®õÙòœÝ¨+þëe†95ÑÖ7Ûõÿ�ú[ÿ�àxÿ�â(û~¿ÿ�@+üüE�lÖG†¿ä7ý„/ô¦ZoÛõÿ�ú[ÿ�àxÿ�â*mÖæÓJ)yG;ÜÜLȼ(’gp3žPQ@Q@Q@Q@Q@Q@Q@Q@Q@‘â};\¶Ó.-çUžÚ[£xZ5‚(ã*¹g 9t÷‡¡Â?‹<=‰›[ÓÄrÂÓ¤¿iO,Æ®¶ìã˜/^¹�lQX÷~&Ó-nímþÓ ¾uÃA#Ç2·"&Ìœü£dgó©añW‡n& {K”NÅ"òï#o1‡$.$dp(^ŠË´ñ“wö4]BÕ./-Öæv¸O1£+» 9Ï##޵^çźD~Ô5»+¨µ[KÚIÆŸ4rnoâ!yÁ#Š�Ü¢°®<[¦Û_ØÛK½RêÒKƸvDŠÞ$Ú HÌÃ.£�O8Òê^/Ñ4Ø,%mFÖ_·ÍV«Â0’Er üÊ7d‘œ�hrŠ©eªéÚ’#ØßÚÝ#†(ÐL®)ÃΠ�úf¹>(XÜK4Q躙– ‘k4Bk6’9LÂ�¬‚rËûÂHÁƒŽh¹¢¹¶ñŒ+¯.’4Iœßÿ�g™À‡Ëy"|ÿ�¬Ý·Ë;³ŽÄc8FßZ[Þè¿bºI- Šá®g”ë!`»pų”qʺ}F@4è¬}s^þÄ’Â%Òï¯å¾™ ‰-<¬ïÒ`ùŽ€|¨çþôÎ}¿ío£Ó[OÒµ+ÆÔ,šöŒD¬ò­¾EÃ~ö3èAÈ8 ¢Šâ.>%ÚZin«u¡j¶öZ‰_³M<Öq£ŒÈ¤³NåCc$Œ3Iñ´¶¬4õÒ5;vÞ#2Éä¼jÆ0Ç# 2á±·'ÏÔQY:6½±¤Í¨›+»8á–h^;…ÃDÅî3 V{zb¢ŸÄÖémdöÖW——7ŠÏœ ‚\.îÞÊ«´°,9 PÝǧÄ+oøHmô;R³¾ŸË*—RÚFJ»2î gÜàlì p3‚Ïa@Q@Q@Q@CPÖl´»« k·™e¿›È·ÛÉ gÆpJ© À'-€O@jãËo»ª´µ8,pN©À'ð4�ú*­þ¡o¦Á×LÊ<P) OÏ#¬h8é–`3V¨�¢£‚xî#2DIPÌœ©^UŠž½²=QÅ,Ò¬I3†)–mˆXà ðI>Ú�}Šti¬´›È®ÚH5i;#21•ˆ-÷Bå@ I,��â¯ê7öúV™u¨Ý¹KkXšiX)b¨ ’p9< �³E‰'‹tX–ížæPm/Ætû4¥’g Û·$6åôä`ÐÝ‘câ#Q¿û­Ë´ÇvÂÐH‘Ë·ïynÊLwÚN*=oź7‡gXu9®csÜæ+)¦QË"äg'ŒŒõ·E`ê3Ðô¶¹77¶.fhlæ•R& U÷"·ÜôNjñΉñÀë« ¤¥X¿±¯ íR¾V@—?ï/¨ÈIE`ŸhƒR¸ÓŒ×_j·wÓì3àºGæVÙ‡mŸ0U$‘È®[ëÚmÖ€šäwi¯œ³I&S³m`·ñŽ´¥Eeê~!Ót™#ŽæIÞYºÅkk-ÃíÄV5bÜŒU]/Æ:>³{öK¾’MÛ 6›p‘«lƒ#FeH#'ÃÈ  ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÏøB\y“ꚪ›)ì^+cWŠm¾`;ãc“±9ch÷Îm÷Ã-+Q‚Ò;»ë鬷S#J–î \H$“r4En�¯úcµ¢€9H¼k É$z¶¤»/íTyC³…Ç•÷V/”Ä’išOÃû]Q»Ô,õ­Ynï@R³BL¥T*“û¼1»Œd“œŽ+®¢€8‰>[ü–z­ûOeg­¬s˜LDE ± |E’1<™õÝì)4]'…u] Q¼{{}E?Ù®<ùFWcŸ6HÆC Ugʦ;Š(“¿ð…õÜwÚZ•»#Hûaxð]äŽRß2ðÄÀ ¯ ‚AŽçá¾w¦Kc%ÅîÙ•Ò‡Mò®3˜RdwÎÐ; vP?‡ü9kỳ²•ü€YŠy0ÆŽ>b#E�c€3“œžj¤>¶Ãòéjó‡ºkµºÆ&ŽS0Ÿr•@¿ëì#·N+£¢€9WðB³Á2xƒWŽî;Ǿk•û9yfhD;˜4Ex*¨÷8"Xü#4Z«ê âmkÍ–(a˜³âDŒ±�Ÿ'#%ܤ}ãŒ��éh VëÃZæ­wg6§âT‡ìR4ÖçJ°XHQ“,fyÆ�{=…^Ó|+a¥Ç§}šK?OÓŽ ìT¿”vrF6–Zó·( Y|±iz„ Õá]“k*‹rÿ�êÌK»t$¨Ì£÷²rpDv>³°ÔƦº¶©-ÿ�Úspíf3¶0 l¨€®8Ú í<×[E�rÖžŽÞÝ­.5ÍRþÁå’ilî’ØÅ+I!‘÷„ 3dgã)ñø"ÆÑTi·—šsE,²[A‹e“ix‘JòÉPÛH<ó]5ÍÈuy5/øI52háŠTŶ×H‹2õ93¹Ê~n1Ž–Š(�¢Š(�¢Š(�¢Š(Ä5ö«q¥MemjÖ-pV{C8˜ž,pë¶Gõçœñ‹ðˆŤ¶±oû«¥¸Yc±dÜ>Ê-äC‰s‰0ˆ`I-êôê(€¶øsqhÛê–Q¢ ‰E‹¶Ä¶˜Ï·sLX†r'…U‘š¯gð©muöÕ æ˜ñ¹¬Ž’<‚C1ló1æ€@Ûƒšôz(Ï¥øqy,úd§X²Ýas5ÒÄ´ýù.Öäíýï˾Xÿ�eßÖ›à jÚ=î¯tÖØÜ_Æs=Äq1YC1L¤&TùØ–vW8Qþï¡Ñ@~ß ®WEÓ4ë}Ê[$X÷ý”“³=»þqå³ ³–ù°pprË…^hsé×7–Œ$[‘¥€[xTHâßò²y{‡ÍÖGéž=Š�äü'à¥ð¿œßh‚æI® òJÐɽ˜«ÙyX;¹*�#£­HÞk‰ï漿W{Z I 0y{#ØŽXî[¦OóÀ®¢Š�äì|)}¦®ž‹¨Cwk£#.Õ¡0ÞSD‚YAmÀ+•ÈA×$1GZðωüQ$Íus¤éÚuƲ’øºO³ÌmÇÉÚG–˜á»æ»ª(™Ôü"/­ü@°Þùë:zع1oH€órÊ»‡_9Ž3מj¦½àýC^Ô4ÛÛ›ÝY,­d„%ÞÓ'šì…¥Aç„yj’F[“ž;(Œ ÕáÖï5›_Åì÷"`Ä´E<¤ˆ«§š7F„0*AÝÔ 4ÏjPè¶&§­Eq¦YÁ–VòÙÊâ5Ú¥¤Y‰Ï xÀã§5×Ñ@¥—…µ])­å°ÖàûDvÉg#]Y4«$1»´CU!”HÀ¶ã»©‡ƒ¯m<Yu¯M{¤Í-ÍÇšò (­Ê ‰c¬ÞiÂá#iÉ,F21ØQ@Q@Q@Q@Q@Q@Q@ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vdatasbf7.jpg������������������������������������������0000664�0000000�0000000�00000055552�15030617045�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��Í "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¬uZ]n÷OÓtË)–Ñc/%ÍóÂIpN¬OÓ´½Eb}«ÅôÑÿ�ðk/ÿ�#Ñö¯ÐGÿ�Á¬¿ü@tV'Ú¼Qÿ�@}ÿ�²ÿ�ò=jñGýôüËÿ�Èô·Eb}«ÅôÑÿ�ðk/ÿ�#ÒéÅõæ­¨iº…½´Ö‘Ã&ë{¦™\I¿Ö4 ž‡­�mQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�W?¤ÿ�Èáâ/÷mô®‚¹}IÔüiâÔ4»+·U¶ ×é!!éh®®oÄ^Ëâ/ Éi¤Ïs­ëKqsÄ¢(ÚbÁÜáŽEb�<)êp*ËøGà Ãz;>8 gñÚjއ¢xgZðþ›ª i0‹ÛX®DfÒ6Ù½c;Fqœf€"-ªOãK ÷ðÝÜVñØ]ÛÍ/nAfxš1þ³'"8.;d‹¾ ‚öÛCší6m>O·ÝÊÊñ±òäåLylÀa\.3ÕOlæ^<Ñt};ưÁ–—SGnË+B60›hŒmÛµ’gÿ�Pƒz‚åkH¬M¢<qi†co§—kpîeivö&ûÎÑçÉï×3NF� §kžÓä{×ÿ�ëÒËùÍ^,:2ùÛcÐ…ºý¯λh„)§Î{B%ãϼ–_Ü Œ×¥ü#Ч×Ä)IºØL# ®$òòÂD?,Rn'tIòFNÁ¤Ð¦ÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�W/¦½àñψV8 h<»b]¦*Û¶ »HÇ^sØqÏEsúOüŽ"ÿ�v×ÿ�@j�Ó»‚kÛI-¦ˆ,r ¬a»’'dz ?*+M&—o¦ØZ¤v–˲${¹$*½†çàt< À­:óËû bëÃÞ8´Ã7k&§+}†3-°Ý¾Õ!ßþ· ‡Œ±Ï8`@' �M⟠ëºÎ¾š…”ÖðÆ«k”­ç†IY‡”Û¶ù›p¡À.²�¹çøiâV´{su £[KnVM^b^_1•ˆ„173C9�+DŸ%uþ'—WÔ4ûhí¼1{4‘ÝØÝ'¶ &IdSºA† ðH$õÇ5oNŠõ|y¬\¾“=½ŒÖVñGtÏÉdæ,v«–äJ¸%GÝ9Ç�ã_áÿ�Š^íç:‹ok‰§2aÄ»¤‹Ë2-¶‰vþíH]© ÿ�y[_´ËÝTÖ4ËöC$6ö[V)ÚX£@ŽŠ‘îU*€'�î=Ë1$žò¹í7þG½þ½,¿œÔÐÑE�QE^þèXé×7e7ˆ"yJƒŒíãô¬›-KĶ6÷qéb¤ñ,ŠR“ 0Ï?¸÷«ºÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@Ú|Gÿ�@­+ÿ�RñІOZ¸ó|›-O%¶I³Us±° ààƒƒØŠÝ®_H³ñ%–¯¬\\ZiBÞþóí Gy#0Ý"QÌ@bRO<1þèÈã[Õ Ì ÐLRIå#ÿ�l6Ö}Û6ƒärÛ¾\uÏkí>#ÿ� V•ÿ�ƒ)?øÅsgBñGü"ë§‹MíÛ'Q?éòì öÁt>Nsœ§N€79Ú;º�Á½Ô¼Aecqw&‘¦2AHÁu)2BŒñûjf™«ëú¦•g¨E¤i‰Ô :«jRdPÀÜuæ´5ÿ�ùõOúô—ÿ�@5_Â?ò%è_ö·ÿ�Ñk@ûOˆÿ�è¥àÊOþ1U-uÍNùîÒ á­Ÿdë°ÎboFÄ)ö5ÑW/aa®Å­^ÝϦèéÂ[˼‘Ù¢@þZãÉP0Xçï}óè�hñdÆÍ/¾6¯/’“ÿ�n'÷y8-íÖ´þÓâ?úi_ø2“ÿ�ŒW?6‡¯ÜhÚ…¼ºNˆóês³^/ö„^6UR}ŸŒª*ãos¸“Çj›¶.üÀÝ·¦}¨RÕõý/J¼Ô%Ò4ÆŽÖÕ5)2B©bî:ñO²Ô¼C{aovšF˜©<K"†Ô¤È 3Ïî=ê_È—®ÿ�Ø:ãÿ�EµXÐ?ä[Òÿ�ëÒ/ý�P?iñý´¯üIÿ�Æ*¦½¨ß½ÊYÅ \5«lœC¬3˜›Ñ±Êx=}+£®WOÒõûmnÿ�T’-85ìiÃö©$ #l*Æ0@bã)ÑpH$œPá/“ìI{çøcì¯/’³ÿ�nü'÷y8-íÖµ~Óâ?úi_ø2“ÿ�ŒW7sá]rç@Õ4òl’Mbáå¹oµÈßf  ÚÆ<Ì2„íp£.p+»  ÍKÄV7ri:c$´ŒR“$(ÉÇî=«WOºûv›ky³gŸ K³9Û¸Œ÷ëUõÿ�ùõOúô—ÿ�@4hò-éõéþ€(FŠ( Š(  ÷÷BÇN¹»)¼AÊTgh'¥cYêÚýí½Òib¤ñ¬ŠR“ 0Ï?¸÷­ þE½Sþ½%ÿ�Ð C ȹ¦פ_ú� }·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� V—ÿ�ƒ)?øÅiÑ@Ÿmñý´¿üIÿ�Æ(ûoˆ¿è¥ÿ�àÊOþ1ZtPgÛ|Eÿ�@­/ÿ�RñŠ>Ûâ/úiø2“ÿ�ŒV™ößÐ+Kÿ�Á”Ÿüb¶ø‹þZ_þ ¤ÿ�ãvêê Y.neX¡w;·@*ž™®ØjòÏ£N%· eŽ{Y`e §lЧiçÚ€í¾"ÿ� V—ÿ�ƒ)?øÅmñý´¿üIÿ�Æ+NŠ�Ìûoˆ¿è¥ÿ�àÊOþ1GÛ|Eÿ�@­/ÿ�Rñбe©Zê^GlìÏg9·Z6B’VÇÌF×RÈ ðjÝ�f}·Ä_ô Òÿ�ðe'ÿ�£í¾"ÿ� V—ÿ�ƒ)?øÅiÕ-;U³Õ Ø´y ZNmçY!xÊH[p e Ž#€!ûoˆ¿è¥ÿ�àÊOþ1GÛ|Eÿ�@­/ÿ�Rñм·0½Ô–Ë"™ãE‘ã•V,Ÿ©VüK@Ÿmñý´¿üIÿ�Æ(ûoˆ¿è¥ÿ�àÊOþ1ZtPgÛ|Eÿ�@­/ÿ�RñŠ>Ûâ/úiø2“ÿ�ŒV™ößÐ+Kÿ�Á”Ÿüb¶ø‹þZ_þ ¤ÿ�ã§E�c^jÚý•ÅÔšFšÉm#Ô¤É 2qûj×Óî¾Ý¦ÚÞlÙçÂ’ìÎvî�ã=úÕþEÍOþ½%ÿ�Ð M È·¥ÿ�פ_ú�  (¢€ (¢€ ã?²t;¿x’ïWÓ´û„‚+v2Ý@±DlIËé]qÿ�`þÖñ/‰ì.!i*Zn)w$.p¤ã(;7=:�æ®Ç„üGðÓ]ÕtJ†âÙg‡ýÖ ž7CÁR£ HÚÃv+Ï%‡F_;lz·_µàù×m…1´ùÀohD¼yã÷’Ëû„1šömsÁ¢ëMñ Ó,íÓQÖ¡òîâþsœm®^>P8È®mþø¥îÞs¨¶ö¸šs(ÖKºH¼³ "Ûh—oîÔ…Ú‘ð¨÷”À¥¶œnÑ%ƒMÜn!IDš'ÜbÝp$n À~îÍpcÝ!ªÉ‰´GŽ-0ÌmâtòínÌ­.ØvÄßyÚ<ù01ýúæiÈÀèq|:ñ<^I[›dòþÈUS“Ë_#;TÀwwF„Ÿœ–”ÍÀ¿ÃOµ£Û›¨]Ú[r²jóêòùŒ¬D!ˆ‘¹˜‚ÈZ$ù(…–|í±èBÝ~׃ç]´BÆÓ罡ñçÞK/îÆkÒþÅSëâ$Ýl&†Wyya"–)7º$ù#'`ÎÒj³ü?ñKݼçQmíq4æQ¬8—t‘yf@E¶Ñ.ßÝ© µ#áP?ï+káö™{¢jšÆ™~Èd†ÞËjÅ;KhÑR=Ê¥Pàǹf$’ÞQE�QE›âáUX¦Î`A°ÖN‡áOKáý6I4 )Ý­bff³Œ’J ’qZÞ!ÈðΫ´ßc›�œ ì5‘¡ÜøxMé:K'ÙbÚ[S6 d}œãó  ¿XxOJñ†ìZÇA·{ûÖ†Ki-`HÌ2• Ýþ´F Ž¤Þº¼á‰à’ðö–E*JZ¢0c†�}ÁȪú†³¯iZ}Åýæ—¤ÇmoK+Jfت2N±8�Tw:¿ˆþÔtÈtý-Bky&ƒ}ü̸Rª[þ=À82&FAæ€ ¾—@Ód“@ÒÞGµ‰™šÎ2X•$ⱬôŸ ÍãË>Ю‘-ØÍ§‹;bÐHví »À »vòFYqŽ•§¦êZíœCG];J’ãOµ‡ÍþpJʬÙ¹Éúg¥\±ÕµýKO¶¾´Ó4ym®bY¡jrÈÀ86ùäÖ€)x§ÂÞƒÂÔ±h:\r%„쎖q‚¤FÄqÁ©t?øjOé®þÒYÚÖ"ÌÖQ’NÁÉùj?IâYü/«ÂúV’‰%”Ê̺œŒT# y?LЇo|C/†t©!Ò´³ÙÂÈ_R12ñ4c¢x~ãâͽ†‘y`–’ [+f³«Æ±‡BAc†-»’1·½sÂ^‹Ãú”‘ø{IGKYYYl£‡TÚ†³¯i–us¤éÞZõÞÏ+Ÿ¢%±cëÀíYW~$Ô5kxô¸mt­ú½«}’Q{pc4e†ìÛwlù¶ç8Å�hè^ðôžÓ]ô-1­b,Íi$ìž+CþOÐJÿ�À8ÿ�°l|C¨é©ŠöV ueh¥€¹¹ýâ¦Ô&?ôl>¨!I :Öž›­ë½„wÖ:~—%¼…€-2Uа*Öà‚A�‚(ÓxKÃl¥[ÃÚIR0A²ŸÒá? €�ðþ”�è”áUµ-__Òô«ÍB]#Lhí`yÝSR“$*– ~ã¯û-KÄ7¶÷i¤iГIJ(mJL€Ã<þãÞ€'ÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�«_êúî›f÷WE‹FDsÌÿ�‚%±cø ¥‹o®.´ûx¬tömB!-£ýªãË•J“ìÛwm¶“œ”­ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…c]xÂþÊö{9´»o´C”¢=Û—@T›mNð .vçç¥gªk—öV÷–ºv“%½Äk,N5)pÈà óphcá? Aðþ”Aê ”áZÑÆ‘F‘ÆŠ‘  ª£@è�ô¬;ÍKÄV7ri:c$´ŒR“$(ÉÇî=«WOºûv›ky³gŸ K³9Û¸Œ÷ë@h¢Š�(¢Š�Î×ÿ�ä[Õ?ëÒ_ý�Ô:ü‹šgýzEÿ�  —Ä9Õv€[ìs`†°ôK Néz['ÙbÚ[R6Ž£È8üè§¢±þÓâOúé?ø3“ÿ�ŒQöŸÐ'Iÿ�ÁœŸüb€6(¬´ø“þ:Oþ äÿ�ã}§ÄŸô Òðg'ÿ�  Š+í>$ÿ� N“ÿ�ƒ9?øÅiñ'ýtŸüÉÿ�Æ(}wM}[J{X¤XåYbž6a•ß‹"†ö%�>ÄÖf£§ëšÞ…wi{›o+´E!ŠáåŽeG É#RÀ(@S€Ç¯J¹öŸÐ'Iÿ�ÁœŸüb´ø“þ:Oþ äÿ�ãÄê¿5;Û`ŽÏE’DÓomU¦™ÇÙÞiD‘ÿ�vr°…<@µ{àMRoÍhºE¸¾†í¢š‘£³ÈµU`ÞH`hå‘G,܃Éô´ø“þ:Oþ äÿ�ã}§ÄŸô Òðg'ÿ� 7Ä~×uëëé>Ñk¬Ú‘ºX£¸! ´pKBá|°À…8,pÊ@jÙÓ¼+§xæMe‹Y\ÄVáYØÉæ*ª¬Ëòã{�Á‡c©Îv~ÓâOúé?ø3“ÿ�ŒQöŸÐ'Iÿ�ÁœŸüb€2/|ÒêÚýíÒ[RÏl`'0ÝÞ30#§ÈT}wüø{{>«XÛiÚ-ªÜ]‹4Yä+lMªÃ¹@Œ�ÂDV‚ØÚpk³ûO‰?è¤ÿ�àÎOþ1GÚ|Iÿ�@'ÿ�rñŠ�ÁÖ¼ú¶½q©K¥h÷?i´µ‰ÅöUã•ÙÇ ó++“ÆcL©:/ Ù^i¾Òì/Þ7»µµŽ ^7.®È¡wd€NqžGÆ£ûO‰?è¤ÿ�àÎOþ1GÚ|Iÿ�@'ÿ�rñŠ�Ø¢±þÓâOúé?ø3“ÿ�ŒQöŸÐ'Iÿ�ÁœŸüb€6(¬´ø“þ:Oþ äÿ�ã}§ÄŸô Òðg'ÿ�  Š+í>$ÿ� N“ÿ�ƒ9?øÅiñ'ýtŸüÉÿ�Æ(Æ¿ÿ�"æ§ÿ�^’ÿ�è¦Ð?ä[Òÿ�ëÒ/ý�V¹qâ# jAô½-Sì²î+©HHOAä Ö燷 é[€ ö8rÈ`  *(¢€ (¢€ çôŸù<Eþí¯þ€ÕÐW#o¢i:Ÿ<@ú†—evê¶ÁZâÝ$#ä=2 �uÕËøžÁ¯µM$¦ƒ=ãÁqÂú7…M¶×�»†�ãæÚ+‘ƒ‘ˆ<C¢èº>•%í§ƒ´[ÓÜñ41ÄXz'ÈÛœ“€¼{ŠÖÿ�„CÃ?ô.é?øÿ�@×V·þ'°Ô%ð¥äRÛ¬»®Ök|°*È#,%Ý´ƒ¸.1¸©Êàš½àë°³¾زhé=ÛN¶ŒbÚ™U"Äì¡~PO#,Xàf¼ÇÇVe㟳Gc¥ÛÄËl& (D¦m¢1´.ÕIŸýB ê ²×(‘X›DxâÓ ÆÞ'O.ÖáÜÊÒí‡lM÷£Ï“ß®fœŒ@N×=¦ÿ�È÷¯ÿ�×¥—óš¼"Xteó¶Ç¡ uû^vÑSOœö„KÇž?y,¿¸@#¯KøGO¯ˆR“u°˜F\Iå儈~X¤ÜNè“䌃;I M¢Š¡«ëz^do5[è- •±¸úÔŸaÍ�_¢¼KÅ:çÄøšÊÛÂK¨iÚ-ðÛ×6‰@ß# ªrÎ è¯Sðƃ'‡ô”¶¹Ôï5;Ææ{»¹YÙÛØv¨ÉÂÔäÐþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  O¨ êªÀ6sà†¸\xoÃ>Ò/…tÛÉZf¹ ¦y¥`|Ù D8 AlƒÍ�w^&Ònuß_é6·‘ZØ^ÞI¤€Ë„u*ØPËÎ<z©&‰¬ËâUõ{ -¬eµhÒÁv“Ë,à™Nø…Áã#$Úx~ãâIg¤hæÞ] æ‹6hð–2¦×*1ž¨8ïXšl:Ï‚u¹ïü?áèîF…¡ YéË' Œ:³ô)ÃdAùF@;Ëm ^ƒX¿ÔÛ[°’k›mP5€FƒŸß|Ù2É1Õy9ÑðÞ•6…á­7Ižé.žÊÝ-ÄɈ: Ú¿)fÁÚyääñÐqÉ¡iFÓúmŽ…áø®ï¬Líuy¦¬«ûµ+´,íægïtV<â¦Óü5£ÿ�Âe 7:.ŠÌtò-µšKù¸, þ½�uÚÿ�ü‹z§ýzKÿ� ¯áùô/û[ÿ�èµ¥>ðÛ‡ô¢(ÿ�Âá/ ª…_é@€”|~”kW¶¿¼Ód·Ó¯!³øóe…¥{€Ѓïž+%4].tö¦ž¶ÖPìŽ$Ó˜}…w!óp£°I ‘œ’jïü"žÿ� •ÿ�€qÿ�…ðŠxsþ€WþÇþItoýº[É5½9æû7‘ ÿ�f6c<dŸß`‚FHI!yÂàéèš|úf•­ÍÄ3ʬÌÒC ‰I$’v–c’I$–$’O|T?ðŠxsþ€WþÇþÂ)áÏú�i_øøP|]ÿ�"^»ÿ�`ëýÕc@ÿ�‘oKÿ�¯H¿ôP7„¼6ÊU¼=¤•#(ùý(ðØ�é@€YGþcY±¹Ôtçµ¶žÚ#!ÄŸi·3#§uÚO>¹â°Ï„/R],Ûjñ¢é6ë“Éj^P|£2>ðH;¶à|Àñƒ«ÿ�§‡?è¥àáGü"žÿ� •ÿ�€qÿ�…�fjÔ/µkCûJÄ<µªÆú{2˜•ŠÈ£{ ¿+ ¸ËpsÆþ—`š^“g§Ç$’¥¬ É!Ë0U =ÉÅSÿ�„Sßô�Ò¿ð?ð£þOÐJÿ�À8ÿ�€&×ÿ�ä[Õ?ëÒ_ý�Ñ È·¥ÿ�פ_ú�¨„ü6AÃúQ¨6Qÿ�…kGEG*F€*ªŒ Ò€E`ëÞµÖî"½K»Í?S6C{g1WQœí*r®¹ìÀþ“ý·â |¾ Óÿ�µôõÿ�˜ž—ózËo×êP‘í@¥ƒeã_ ê3XÃi­ÙÍ-öán‹'Ìåq¸c±Þ  íþE½Sþ½%ÿ�Ð C ȹ¦פ_ú�©µÿ�ùõOúô—ÿ�@5ÿ�"æ™ÿ�^‘è€4(¢Š�(¢Š�*¦§©ZèúeÆ£|í­²%uœªŽ§ ÀêxàsVë'Å:}Ö¯áM[L²ò~Óyi%ºܪ êW$€O�“Ó·ã@ —ÅZ<6ué¹–Hu h!¶–G‘¶–ÆÅRÃNr0sŠÒµ»‚ö–Ý÷¢É$Dà™£}Hü+Š_ ëv•¥Õ‡Ø&Š Mï’Ú{‡`I!‘]ˆÛ¬“HÝ�¨ǥð±öm9á´Ña¹Óïn&D9ŽX&¸2÷c cʯbhÒY‚©cœžOåU4½RÓY°KÛ'w™Ð"xØ21F\2‘‚;W¥ü<Õ,¬uˆ.¯£ºkÙãvß( t‹?˜DŠ"K)1’ZBAô�VƇpžÓ?²u 9Ðý¢ââÓ,nn¢X¤™ÝT²E€Ãv6ú�{Е—Œ´=Bê;hn.å•á®,¦…E%YÝ–€skfâæXÖIäXÑ#Ž2ÌÁT}I ~5Çiú¿5¬6„Zd+ª>¦e†âI%lܵ VòB““À< Ö}Ç€.ä:¼ia£½­Ôö³Ç’¹Y§•Œ™¹’&ÍótÇ+€�=³¯õÝ?L˜Ew$ªÄÄ2¶ò8Ì’yh2ªFKqé\Má-CWÔfµ·‹N¸DÄZrM<…IJáÌj…™ŠÈŽIù?»¶u™¯<M£Dš°ßõ¼Ò R+‹."•%†ˆ“’€g=qŠ�èìîá¾¶1–eùãd`T• «�G õ=r_ØñÞ|@]HA$Oš¥ú´əԫÂRF�9R_‘Ó œp+—°ð6£{¦ëqÙEo¢¬ÿ�Ú°²£¤“»/‘J�"í\nùd?J�õZ+ÂZ,Ú‡¡°÷:»¾Ñ"ºÇ¹‰Ú¥cŒmàP:[”�QE�QEŸ¯ÿ�ȹ©ÿ�פ¿ú©´ùô¿úô‹ÿ�@¿ÿ�"æ§ÿ�^’ÿ�è¦Ð?ä[Òÿ�ëÒ/ý�PQ@Q@skÝx…c‚ƒË¶%Úbv÷iëÎ{9ã§®Iÿ�‘ÃÄ_îÚÿ�è @u]u¨âŽò9BÄÛÓìÚŒöç=91í'ñ«Ëö˜â ¼�(¯œ@öþ³\i-~Aà‰Ý/ iöIÔÇpW~%+ça›æ%‹'9# ¶µáküš˜66šÕ„PêRašvV|Áó/¹Ýq k%þx•­ÜÝBèÖÒÛ•“W˜‡W—Ìeb! DÌÄÎ@ Ñ'É]­¦Ü]øN×D—º…âCo QJ×Ï,X\ËJ J ˜†9ŒçRÂÆOøN'ÔO‡æ²&Ù¡{Ï2—²¶[k—b6€»”`nç(’‡þ){·œê-½®&œÊ5‡î’/,ȶÚ%Ûûµ!v¤|*ýåm|>Ó/tMSXÓ/Ù ÛÙmX§ib:*G¹Tª�œ¸÷,Ä’{Êç´ßùõÿ�úô²þsPõáâ{‹ˆ¬ô&±´Ó3j‘ã9è‘ 8ç,qíPiÒôÛÑ©]´ú®¯Þþý¼ÉýÁ÷cÊã]-�QEST¶’÷H½µˆ¨’x4.p2Ê@Ï·5ÎC¡ß›8b½ðׇnæK$²’in™Œ‘.ÛrvîÛÓ5×Qžq@D~Ö!×£¼‡DÐcÓÓM}<X¥ãˆö³†<1Œ1Žõ,ú¡‡µ-'Ið燴Ծ‚H›ì×Mîd+¸…·Æk²¢€9A¥j—%¦—©øA¿†Ñ6Ü^3¡e�nÚÖäU­;LÔ—Ä¿Ú7v¶¶é`-#†Öá¤ÆwxÐŽ+¡¢€ «w©YXMi ÕÌpÉw/“¹Ç˜ûKmøSV«€ñׄ|Aâ™'k;»{Skå>˜EÀ½ žLÀ̸ `#r8Ï�ýÅEá[»¿^êúÆ‹ Ü<útŒJÎ~ÓwE°”®îH89ÀÊ›áÌïðöÇHOÑâÖ"·ò¥œHû<Å¢I•¶\d®WæÁ΀=*Šä4Œ5}Ymä‚9LfHd•EØ ’I0”¦Ñ¸ Ÿp:ú�(¢Š�(¢Š�(£<âŠ�(¢Š�(¢Š�ó|°ñ~¾úÜ:µÆ›xÊ¿ê¡B¡‡Fãi'Üœûô®×Ã6ZÖ›¥-ž¹©C©MËÚFcyƹ?7¸<ÿ�=š(7Ä9Õv€[ìs`†°´KŸNéZS'ÙbÚ[S6Œdyokÿ�ò-êŸõé/þ€jþEÍ3þ½"ÿ�Ð�VûO‰¿è¤àÒOþG£í>&ÿ� F‘ÿ�ƒI?ù®Ýjºu”½BÖÞR„–eF!›jðOvàzž*{k«{È{YâžÎÙ"pÊpppGA—öŸÐ#Hÿ�Á¤ŸüGÚ|Mÿ�@#ÿ�’ò=lÑ@棫ø‹LÒîïåÑ´¶ŠÖ™Õ5I2B©$ô~¼Sìõ?ÞØÛÝG£éJ“Ʋ(mRL€Ã<ÿ�£ûÕÿ�È›®Ø>ãÿ�EµXÐ?ä\Ó?ëÒ/ý�Po´ø›þGþ $ÿ�äz>Óâoúiø4“ÿ�‘éÓø¯Ã–ÒÜE>¿¥E%¹Û:Iy˜Žq†ñÏÖ€½´6ü]BlÌ^p¸/ËÆwîé·ç¦(7í>&ÿ� F‘ÿ�ƒI?ù´ø›þGþ $ÿ�äzÒ¼¼µÓí$º½¹†ÚÚ1—ši"Žœ“À©‹*• À8POSŒñø@šŸˆì¬®.¤Ñô¢FÒ0]RL£'èþÔÍ7Wñ§¥Ú_Å£ikÔ)2+ê’dP@?èýy­=þEÍOþ½%ÿ�Ð Wð—ü‰ºýƒíÿ�ôZÐ}§ÄßôÒ?ði'ÿ�#ÑöŸÐ#Hÿ�Á¤ŸüW.õ2ÂîÞÒóQ´¶¹¹`°C4ê)'�*“–9 qWhí>&ÿ� F‘ÿ�ƒI?ù´ø›þGþ $ÿ�äzÙªÃP²mDéÂòÜß,~q¶¯š#Î7mÎvçŒô  ]GWñ™¥ÝßË£im¬/3ªj’d…RHèýx§Ùê~#½±·ºGÒ•'dPÚ¤™†yÿ�G÷«-ÿ�‘7\ÿ�°}Çþ‹j± ȹ¦פ_ú�  ßiñ7ý4üIÿ�Èô}§ÄßôÒ?ði'ÿ�#Õ½K[Òteµ]NÊÅe$Fn® äuÆâ3ÔT£P²mDéÂòÜß,~q¶¯š#Î7mÎvçŒô  ÿ�´ø›þGþ $ÿ�äz>Óâoúiø4“ÿ�‘ëf2±`¬ S†�ô8Ï?Ìkw>#:¢$Ò´¥O²Ë¸®§! m9Àò:Ýðöãá+p¾Ç@9�ì¿ÿ�"æ§ÿ�^’ÿ�è¦Ð?ä[Òÿ�ëÒ/ý�PQ@Q@yî¹o¦Ûê1Ö®ô-?U—O´†àGt‹Ê¬lÌlp=:õ¯B®8éë¬x‹ÅzeݲMas ´r¨¹x™C•ùF@>Ç‘Å�`jºv‘}à/Oÿ�¦•§ê"HÙmRc¼"°dÝ1?0á•sB óyaÑ—ÎÛ„-×íx>uÛD!Lm>pÚ/xýä²þá�Œf½¯Uð¬àí[DÒmm–Kô`íy{4›Ù€RÎä3·Ê�ëœ�2;rÏðÿ�Å/vóE·µÄÓ™F°â]ÒEå™ÛD»v¤.Ô…@ÿ�¼ -´ãv‰,nãq H²$Ñ>ãë€Øù#p0f÷vkƒé VH¬M¢<qi†co§—kpîeivö&ûÎÑçÉï×3NF�¯C‹á׉âòJÜÛ'—öB¨šœžZùت¦û¸óº4$üä´¦n�þx•­ÜÝBèÖÒÛ•“W˜‡W—Ìeb! DÌÄÎ@ Ñ'É@,°èËçmBëö¼:í¢¦6Ÿ8 í—<~òYp€F3^—ðŽ("Ÿ_¤ &ëa0Œ2¸“ËË ü±I¸Ñ'É;v“UŸáÿ�Š^íç:‹ok‰§2aÄ»¤‹Ë2-¶‰vþíH]© ÿ�y[_´ËÝTÖ4ËöC$6ö[V)ÚX£@ŽŠ‘îU*€'�î=Ë1$òŠÁ×¼Cu ÜE#è——šaLÍwg‰žñ˜®9Êç•HÖô½~È^iWÐ]Àx-giô#¨>Çš�¿EP\6¹y«[6±%¬·±\ZÊ8¥§Úìebó2» 3rsÊõì{šL Û°3Œf€<â]oÅm¡[5°Õå%½ŒHúfÙ.$Iqj²©ŒŽHÎZ@>òô§hZ׊[THˆÔ¯Ì«zz‹YÂ….@L©ÊZçA  ¯F¢€<Û[¼×-<G¨M�Õ`¸š-)¬´ö¹‰�š_´"9‡ ª’nÉϧÝú†¥âókk`ÚÜ·ÐA©[¢I§l²Ï’Ò)‹�´9`@PY0:•oY¢€<ïG¾ñMî§£ZßßêVéqmpòKœJnYPÄ$y-Óc´~jœª´ašvZ¾“§iãK·Õ-­V¹ßdšK0=þrÙBÀy–P¡~ërví>¡E�yƱ«øÂ+]V[~n#¿XM¸±ÂÃmæ°à ‰üÂÑì$m©Ýòöª¶É®Ýø³Ãz–»Ïskv±/Ù´æ1ˆ¤²pÒ™ a×36Ò¬@RTc5ê4PxŠïV²ñ^«&žúÊWKe¶Ó ÈO/žªÞSroÏ''ãtêºãü3Õ®£}SûfØÝ%¬§<¥do ùF<Ëåä…Ç'¦8î( 4]ñ4zËEm&·zŸl–8RïH1E$&Óz³¸…vâãGËœçïV:ÿ�Äe4—Sk 0Ó®&Š84†“ý%DF8ܵ²ŽXÊ>\¸ù‰´Q@{ý³¯=…ò¤úßÙãÕDl:I+jmÃe"1�ÿ�¿Êga!y?Þ£C›Åš½Ž²/uký3Q…U`Y¬#HÞÏÊÍïfóW†<c9È'Ъ Ë+]BÒK[Ûhnm¤ÆøfŒ:6FAàò _L¼ÕnâðµíÎVîõšK¨x>\gbFT�G˜!99åð8®¾š·Pp v©Ô�QE�QE�Q\‰¾&øSÂ7e«j,—ª¡þÏíƒÓ1ùšÔðψ“ÅRêvú}í¥¤¼À׈¨Ò¯÷‚‚p¾„ã>˜Á uÿ�ùõOúô—ÿ�@5ÿ�"æ™ÿ�^‘è¦×ÿ�ä[Õ?ëÒ_ý�Ô:ü‹šgýzEÿ�  �Ìñ„’é ;JšúãíÖ’È!x‘„pÎ’œ™s°=[°É¬Kí/ÅxØÝÄ×Qè†�ÂÚÞE\’æFØ™B»3+ó(Î_uâÝGû#A’ÞÞôÞjÚ\N"Óå™#…äd{•J†TœÜgñ6«â}GJñäú]½¯ö‚O§E4Â`ŒŽ>ÒÌ@ÚIFŠI<3 þ.�9»m#Å‘ZÚ-ÅŸˆŒ‚ 8O!Ö—Dsö¶?¿èÑà�;ó€y­ÿ�†GUŸC‚þõïZÚçO´dkË¿=¤›cdS¹¶«e>Sƒ•9<Ϭxæ],Ar,#–ÒâÂâêÜü·”¤±*d°¬»É9À8ÚsR/Ý^X^Î,ìmç´ÓŽ ¶ñê q,›@%v¢íØÙ*~IÁЦñoü‰ºçýƒî?ô[UþEÍ3þ½"ÿ�ÐWñoü‰ºçýƒî?ô[UþEÍ3þ½"ÿ�Ð�p ÐüIz<i¥®µjE…´Vïaä\fÞ8ræLȹ(IÁ_—Ãf¡ÔôOêcÄæt¾6÷Ös%šNŠ¿:/–…¼ý¨ÈÀîÂ�À¶Yòoÿ�oK=§‡.åñ¾›y¨¦:|æ£^<0ÞX°m îëžu_ê:W'Òíí´}:) ¶dqö–bÒH"4RIá™ñpËkòêšÖ§«¨µÖYu [½;Mµ‘s�VWA6Ѱ¤çs.þ¹TÎÒèÚÍÆ£m$ún³ö[Mp]B²êjd5¡Fù„ÙÀ›$©?uˆ�‚VŸ¨ëö ºÕ·‡´ð÷ÖIp›"žä¤°ªîvQµJɼ–'�ão/‹Ç·W–³‹;yí4ã¨-¼z‚ÜK&Ð ]¨»v6J‡ß’p@ô�ëµÿ�ù5?úô—ÿ�@5_Â_ò&èö·ÿ�ÑkV5ÿ�ù5?úô—ÿ�@5_Â_ò&èö·ÿ�Ñk@•®©/‹–â×F“íâkÆ–‚[u`ì·‡BÒ*:ã'ÌØZøžÿ�MÖ·w|´-¢žïP2¬Ž·dD#ÉB±«®ã·%”äã#jëźöFƒ%½½é¼Ô%´¸œE§Ë2G È<È÷*• ¨9;¸Î9âmWÄúŽ•ãÉô»{_íŸNŠh-„Á}¥˜´’’xfAü\�bÇ¢xð\èñ0»±iAÁxš GÚNõÙ”ÉiN9Æï˜léšN¯oãÄÔníïf£¿‰îåZGš'€"Ê.=§ >a“ëOÖ<s.– ¹Ëiqaqun þ[ÊRX•2X�ŠV]äœàœm9©n¯,/gv6óÚiÇP[xõ¸–M »Qvìl•¿$àèÓx·þDÝsþÁ÷ú-ªÆÿ�"æ™ÿ�^‘è«ø·þDÝsþÁ÷ú-ªÆÿ�"æ™ÿ�^‘è€3<f—óé–°Xi7ƒ‹ë[†ÉìX§ŽFϘëÉ @ÆyëŠåum Å­ª^ÝéÉxoå¶Ô ŽíîÔÅyâxDj_)û¨Ê’�ù°O÷«{Wñŧ|I­”³žÔ]Çm¼.#x™ãïu.ʤ×x—ƾ%—A²Ñu[[‹i.Èx’U s¶™ÕU°rÅ•6÷›½�sz/Œ³aT]r{•Ó®Ö6‹Pyw êÖáÇÚ[vÌ8,Yò¥A-ȇ‡të›MÄww-õÄW4·AÓo‘•…`êù8@$�w¾)¼¶³’vÓâƒìú…½É–cµ“¬e”íù؃GLñ½Î±i-âi¢Ù`Ô`´ýª9Œ©,‹,æ7\î(Ü€=è§×ÿ�ä\Ôÿ�ëÒ_ý�ÔÚü‹z_ýzEÿ�  ‡_ÿ�‘sSÿ�¯IôShò-éõéþ€(FŠ( Š( ¹ý'þG»kÿ� 5tÈA¡é§5ù5 *ÆñÕm‚µÅºHGÈz �uõÊø§H›VÕôo#KóÒ°‹lJ²é’|Å%G Àn3U<U¥xúÚ¤>Юc€n™d"Âz‚#aŸ®Ñê¶ÿ�áðÇý šGþ�Åÿ�ÄÐ%ÖŸ}©x¯NÕφÞÚK!7›,nMÄf9cWVßÅNÖù0I?0ÁZ<ºEŽ¢ÀXEuz×ÚíLHQi’€îVû½F äšó/é:5ŽM¼Z~—m-°•hAB%3m¡v€d™ÿ�Ô Þ »-r©‰´GŽ-0ÌmâtòínÌ­.ØvÄßyÚ<ù01ýúæiÈÀôísÚoüzÿ�ýzY9«Â%‡F_;lz·_µàù×m…1´ùÀohD¼yã÷’Ëû„1šô¿„qAúø… I7[ „a•Äž^XH‡åŠMÄî‰>HÉØ3´š�ôÚæµiz•éÔ­}+Wí`Þ\þøû²fð®–Š�ñ?üGñ¯|Kie¨ÙGªiÖêZæî 7ˆ\£cœªºàýÒTçvõx‹KñN©¤Ü¬öÒuÇÞFî¬;0ÏJÕ¨¢·‚‘â†8ÚC—dP Z�–ŠÏ׉ÔÈ8"Ò\þá¬Âþ“Ãúl’hZc;ZÄYšÒ2I(9'ÓÑYðŠxsþ€WþÇþ›¦éÔ.µkvðÆ“é÷BÛ"Ú6fåî q(ç¥�u4W #ðÿ�ö$z‘ð–‘Ωýšñù1ü§íŸeÞÎyù±Çfº/øE<9ÿ�@ +ÿ��ãÿ� �×¢¹sÂþÃú”‘èZb:ÚÊU–Ò0Ay…|1 Má Yt=1ä{­#%‰rIÇ&€:ê+–Ô4Xj:M¯ü#:K¦¡rÖûþÍ1‘ ’çyˆŽ£­XÔ¼ _iW–qhúe´“Àñ$éec,¤FsÔPCEs…ü='‡ô×} LgkX‹3ZFI;'Šn¿¤x{Dðö£ª¯†t™þÅm%ÃDm£MÁ±ÚyãÒ€:š+–—Hðô^#µÒO†t’·6“ܬÂÚ<)âR¥v÷óÎ{RE¤h2ëÚ†”</£‡µµ‚å$0&JÒ®ÙòãÉ>½hª¢¹ GðÞµáý7UÒá¶±\ˆÍ¬m³zÆvŒã8ÍA⟠høCZ–-LŽD°‘ÒÒ0TˆØ‚84×Q^q7ƒ¼)á=óSÑ´rnR>d0«m!CÉó ¶ÝÙ dÖÝŽ§éß™4û+kXßIÜE¼J›×Í�u”QE�PÕõ½/@²7š­ôJØÜ}�êO°æ¹¯í¿øŸåðþŸý‘§·üÄõH˜ÃÖ+~¿Bäjé§ÑtËV RâÂÞ[èd3Èš1œü¤ô縫ÔÀ?Â=óZ°Õõ{›íZöسJ÷²ï¡—B©É  yÍwÀ���t–Š�Î×ÿ�ä[Õ?ëÒ_ý�Ô:ü‹šgýzEÿ�  —Ä*Ã:ª°MœÀ‚8#a¬Â^—Ãúl’x{IwkX™™¬£$’ƒ$œPüPÇ•‰)bÄ™'$þ'ŸÆ™um嬖ò™r 7•+F߃)~©Âáú4ü‹ÿ�‰¬Ý7BðÞ¡u«[·…4hßOºÙ±°“0Ç(?pc‰@Ç=(£DXÑQ*(ªŒ�=$°Ç:…•¨`À™ þŸÂ¸Ñmá¿ìHõ#àíSû5ãû<)ûgÙwƒåóÏÍŽ8ã5ÑÂáú4ü‹ÿ�‰ ¼[ÿ�"n¹ÿ�`ûýÕc@ÿ�‘sLÿ�¯H¿ôXÞ)🇠ð޵4>Ò£•,'dt³Œ"6 ‚§Ðü%á©|?¦É'‡´—vµ‰™šÊ2I(2IÛ@ñC V$¥‹:dœ“øžeÕ´w–²[ÊdÈ0ÞT­~ ¤ø¥ÿ�w†?è\Ò?ð/þ&šþðØBcð֌ώYÆüvš�ÓDXÑQ*(ªŒ�=$°Ç:…•¨`À™ þŸÂ¹ý Bð¾µáý7UÒ!¶±\ˆÍœM³zÆvŒã8ÍhÂáú4ü‹ÿ�‰ ëÿ�ò.jõé/þ€j¿„¿äMÐÿ�ìoÿ�¢Ö³¼Sá?Aájh|?¥G,v²:YÆ ‘AƒSè~ðÔ¾Ód“ÃÚK»ZÄÌÍe$”$í  ø¡Ž+Rň2NIüO?2êÚ;ËY-å2äo*V¿Rü `kú†´Oj:ªøWFŸìVÒ\4FÖ4ÜK‡ž=(—BðÔ^#µÒO…tb·6“ܬÂÖ<)âR¥vwóÎ{PFˆ±¢¢(TQ…U�z IaŽu *PÁ€=2Aü?…s‘h~—^Ô4¡á==­¬)!¶%iWlùqäŸ^´ý Bð¾µáý7UÒ!¶±\ˆÍœM³zÆvŒã8Í�[ñoü‰ºçýƒî?ô[UþEÍ3þ½"ÿ�Ðcx§Â~ƒÂ:ÔÐøJŽT°‘ÒÎ0TˆØ‚ŸC𗆥ðþ›$žÒ]ÚÖ&fk(É$ É'm�o¤1Æò: Vîr?ˆã>ø�~ŸYŸð‡xcþ…Í#ÿ��bÿ�âjž« xCHÒî5 ­DŽqi-aEÏ@ 0�dàdñÍ�lYÙÃc•�}¥‹$#1=Ë1$þ'  ©äxÝÐ3Fw!?ÂqŒ|?\׆ôÏx›ÃÖZŧ‡4*æ=ÅEœM±‡ ¹ ‚AgÚµáðÇý šGþ�Åÿ�ÄÐõÿ�ù5?úô—ÿ�@56ÿ�"Þ—ÿ�^‘è±õÏ xn/êRGáí%meee²ŒBqZþUO éJ *‹8@�`°P•Q@Q@s:k\øˆGMÛ_™¥ çcvÚtÕÏé?ò8x‹ýÛ_ý¨Ö§¤G¬–úÔH‘çä[ÉQ\‚®ª�u#ø[#Ú¯îºÿ�ž0ÿ�ßÓÿ�ÄÔõçŸðLÇÄ3¿…›ìú§’‚È%£8u2n˜©-ÇÌ„;Ï9è(š÷ƒüK«ø’}J³¶‰žÕ‘#Ôw˜Ù^AäJïÜ‹¡À.$�-c¿ÃOµ£Û›¨]Ú[r²jóêòùŒ¬D!ˆ‘¹˜‚ÈZ$ù+sUеMGÀ~ŸBßA[Gp^#ŠD@›çmáIÜ2¿¼$v­ éYëºÞ¤Ú_ölÞNØDº7¹ò‰Rå!ÎyÏ�P&ÿ�üR÷o9Ô[{\M9”k%Ý$^Ym´K·÷jBíHøTûÊÚø}¦^蚦±¦_²!·²Ú±NÒÅtTr©T8qîY‰$÷•Ïi¿ò=ëÿ�õéeüæ †Š( Š(  ßäxgUÚo±Í€NvÉÐî|F<?¦ˆô­)“ì±m-©H 2<ƒÎµõÿ�ùõOúô—ÿ�@4hò-éõéþ€(¿Ú|Kÿ�@'ÿ�’ò=aÚxnúÊö{È4ka<òdwñ%ãîr› a£ ¸tÂÿ�tcµ®7Fµ¸³×uY£ð¥åœ¸YXMnªûÈ|,¤³¹l;OÜÏB@Sàûƒ¥®›ý‹ÙVäÝ„ÿ�„žû>i`Û·y{‰Ü7uÀl·RMtiñ/ýtŸüIÿ�ÈõÇK 4¾½³ÿ�„&ò5¼¼iVÚ7´dʨó"vÕ8Q†;Ë6�8>…Š)uÚÄ €sƒõ g\¹ñðþ¤JÒ•>Ë.⺔„°ô@ÏçSx9ïO‚´-ööàý‚ bv<lþLõúÖŽ¿ÿ�"Þ©ÿ�^’ÿ�è«øGþD½ þÁÖÿ�ú-h5 -SQ±¾º·fžÆO6ßËÔ&U¹(¸V8$rA#¡"®^^\YXÜ]ÉoH#i,§$(ÉÇËíX¶v <ys¨.ƒ=¢ý¡kâðí¹Ë+e¶¹v#h ¹FÑ»ž@­}þE½Sþ½%ÿ�Ð �bøv÷Ä2øgJ’+K1=œ,…õ)Pc @pRkλ¦K§j6œö³ ²$zÝÄ[ÇB¤¤ Aäg½^ðü‰zýƒ­ÿ�ôZÒøž´èSÃýý¯¿å„FTû°‘ÕHqŸLz€ SáýDê6÷í£Û5ͽ±µŸÄwŒeB° Å‚N’A$¨$äQÃá‹ëyîg‹He¸·[YþkÜùjr ~ïåÇ8#nn~c˜í´©­õMXü3}æéÖì“Û—aåHþfâ1É�/ƒœÅÆÊYµëÍN_]«Ibb•|Ûl^(Åù¿1€wó‚�iéVšÖ‰¥Ûé¶.™¥ºì‰YžB«Ønx ÀèxU<Uqâ#á lK¥ék°Ÿs.¥#<¶ÉÈ>Ù©áÓ¼7ohö2Øìi¶‘˜Ã;6�Fe !@c…�{Sü]ÿ�"^»ÿ�`ëýÔ•aáø5Ù¾¡fÜé1ÙL‰¨L¨Ð W'»œqœSt»/ìßÃa ";H4@‘fáå`Ü ¸Éõ&¹¯xjï\µÐf´ðÿ�Û4'n·@¢)_É1’]ƒ¨P’|È7 ÿ�/$×gÿ�5þáûZ€:*(¢€ (¢€ (¢€3|C‘áWh¾Ç68Øk#C¹ñ ðþš#Òt–O²Å´¶§ $lÈû9Çç[ÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@[í^'ÿ� >‘ÿ�ƒYù°í<7¨Y^Ïy‹j'žC,Žþ%¼}ÎSal4D·Ž˜_îŒvÕÆèÖ·zî«4~¼³‚÷ + ­Õ_b¹…”–w-‚Çiû™èH�¨|ttµÓ°íþÊ·&ì'ü%ÙóKÝ»ËÜNá»®eº’k£ûW‰ÿ�è¤àÖ_þG®>]¥ðÕíŸü!7‘­åãJ¶Ñ½ û&UG™ó¶©ÂŒ09ÞY°Áô„,QK®Ö dœ­�r)¹ñð†´%Ò´¥ŒØO½“S‘ˆ[dä Ÿlб¡ÜøxMé:K'ÙbÚ[S6 d}œãó­È—®ÿ�Ø:ãÿ�EµXÐ?ä[Òÿ�ëÒ/ý�PoµxŸþ€úGþ eÿ�äz‚ïþ;ÛI-¦ÒtÕŽAµŒ:Ôñ>=™ ?+¡ªzª†ÒîTØ6  ôE(<ïö~r¾N1@ºU¦¹¢ivúm†‰¥Çin»"GÖ§ªöžp:ž�àUϵxŸþ€úGþ eÿ�äzo„l_Nðݽ£ØËc±¤"ÚFBc ìØ”($…Ží[”Çx¦çÄgÂЗJÒ–3a>öMNF ym’2}²*ƇsâAáý4G¤é,Ÿe‹imN@HØ1‘ösδ<]ÿ�"^»ÿ�`ëýÕc@ÿ�‘oKÿ�¯H¿ô@úÅŽ·®é’éÚ†‹¦½¬Ãl‰¹qñЩ)�$yÁïU‡õ3¨Ûß¶h×6öÆÖ6^0• Àƒ 8RI’ “ nxž´èSÃýý¯¿å„FTû°‘ÕHqŸLzŽvÛJšßTÐ%Ã7Þnh^É=¹vQAæn#Rø9À,@†u yîg‹G·Yn-ÖÖGÿ�„ž÷>Zœ¨»ùqÎÁ›Ÿ˜çKJ´×4M.ßM°Ñ4¸í-×dHúÔò^ÃsÀN@3ÀÀ Í6Rͯ^jrø2íZK«æÛbð±F(çÍùˆ (Ü� ¿œ+sÂ6/§xnÞÑìe±ØÒm#!1†vl�ŒÊB€Ç �ö  ¯ÜøŒøCZéZRÆl'ÞÉ©ÈÄ-²@òO¶EXÐî|H<?¦ˆô%“ì±m-©È 2>ÎqùÖ‡‹¿äK×ìqÿ�¢Ú¬hò-éõéþ€(·Ú¼Oÿ�@}#ÿ�²ÿ�ò=T¾·×µ³}§FÓÙçKˆü½nxþué° ÃŸºrq]-rþ=ÒäÖ<9¬ZAÕo­f0+„I•œþô…å®;îÁàš�‹FÒu]n—MдȅÔíq0}râ]Ò7,ß<'÷Æ3Zjñ?ýôüËÿ�ÈôÏéóé^¶³¹¶û4ˆó0‡rŸ-ZWeoÊÒ2å�Ví�rÚåω‡õ!&“¤ª}–]Åu9 aÎÙÆ1ZþÜ|3¥n�7ØáÈ ‚—_ÿ�‘oTÿ�¯IôFÿ�"Þ—ÿ�^‘è€4h¢Š�(¢Š�+ƒÔl´‘¬ø¿UÔ4KMIì­"R[t‘ÛlLÛW òqŠï+œ6ZÝŸˆu;Û;M:æÞñaϼx™v) Dÿ­�ršß…íáðnµq>›á™û=¦µ“KÒ•dFÁ#™·Ž˜?.}y¬°èËçmBëö¼:í¢¦6Ÿ8 í—<~òYp€F3^Á©xwTŸÃ𶓦øoÃvÚ0ºJÑ^:«32Á-Ô·SÜzçßÀ-{·Ÿíã{\Ï?š5§î’/,ȵÚ%Ûû°BíHøDûÊ�àÒÛN7h’Á¦î7¤‹"Mî1n¸ ’7`?wf¸1îÕdŠÄÚ#ǘf6ñ:yv·æV—l;bo¼í|˜þýs4ä` ô~ø®# YíFlÈDեآ ìUSnwwF„Ÿœ–”ÍÀ?Ã_5›Û™íZÚ[r’kSáæóXˆ!ù¦ ‡r�V‰>Z�â%‡F_;lz·_µàù×m…1´ùÀohD¼yã÷’Ëû„1šô¿„qAúø… I7[ „a•Äž^XH‡åŠMÄî‰>HÉØ3´š¨þ�ñkݼÿ�oÚæyüÑ­8—t‘yf@E®Ñ.ßÝ‚jG ÞWQàO ê~ŠìjRBL±ÛÇp\4©Ç͉¹ª€ÍÝ™‰&€; (¢€ (¢€3|B¡ü3ª«�TÙÌ#‚6ÈÐü%á¹|?¦É'‡´—vµ‰™šÊ2I(2IÅoj–Ò^é¶±OÆ…ÎYHöæ²´åñ%Ž™ihtÝ)̤[¿´dÚ�Ïúj�›þï й¤à _üMaéz^ƒ}­júdþС–ÀDêc…ÌY7íÈh”©ù;nðN7þÓâ?úi_ø2“ÿ�ŒV,¼·É‹fd!‘õû§lÃnLDíÛ¢–$`ó@SÍ¢Ûø{UÕÀÞߥݵ½Ì@.Ü*+nV0Ÿœ :¨ï»'´ÿ�„;Ãô.iøÿ�XÇÃWMj–Í¡Ù4JÅØ6½tLĨSæ“eT.pÀ¥n}§Äô Ò¿ðe'ÿ�  oøOÃxGZšéQË„쎖q‚¤FÄ@àÖ·‡4ë¼3¥¤vVè¿dˆíX” •öõªšÌ>$Õ4=CO];I®­¤€9Ôd;w)\ãÈ÷­=& ë-ÊÖx­üØ HßdÌW* pJOJ�ÏŠý‹ßC›J´D6u êùfUdR �rÿ�ÂÍÓœdfOèúeׇ5´iÖsyvÒºy+m`‡dp}êŶ‘¦£>¡°73nÜò^K PÄ!*¤…�Jv±£y£^ÚÚÁjfž‰|Û†U†2HB{úP…¼'áÉü!¢Ë/‡ô©${Ýìã%‰I$ã“Vu hT÷v¾Ðî%‰wùrÚª)¯+žžŠiú<>$Òô=?Nm;JÚÛGq¨È7mP¹Ç‘ÇJv£m­ê–ëΗb\80kW¶GûI8öÎ(Ö/\^xqOƒ4%µÖíıÈ#ž6òL¥qåmaŒ‡Ï}¸ÒjvÚE†·u¦ÇàHc²{Ø].ôFEmÀ@Ä}î6ïéÎÜŠÑ—Ãw30/ éáV5Š8Ó\¹T‰Uvˆ" ‡nWr€pHÏ&‰ü9{ss-Ìš=·#—2/ˆnÔ¡$ˆÆÅ$ ªà ƒ@ôx_VÑ,5%ðÆ»¶Žp‚Ò&Û½Cc!pzõWÅ>ðä>Ö¥‹ÃúTr%„쎖q‚¤FÄqÁ­[s®Ú[Emo£iCã5�U�ät«k0ø“TÐõ =tí&6º¶’�çQíÜ¥s#Þ€3íÌiþÒ4«}6Úk½<Ì'¹¶ó#QÇ”¬¤³y™0ÀV<â¦Ó`ÙãØ¥š;?µIj˜B|îÙçH4­RãD´Òõ?è7ðÁ&Û‹Æt,  ÛZÜŠµ§iš’ø—ûFîÖÂÖÝ,¤pÚÜ4˜Ãîï�1Å�t4QE�QE�QE�fø…CøgUV�©³˜Gl5‘¡øKÃrøM’Oi.ík35”d’Pd“ŠÞÕ-¤½Ò/mb*$ž œ ²3íÍeiËâK2ÒÐéºS˜!H·hÈ3´ŸõÔ7ü!Þÿ�¡sHÿ�À¿øšÃÒô½ûZÕôÉü¡C-€‰ÔÇ ?˜²oÛÑ)SòvÜ9àœoý§Äô Ò¿ðe'ÿ�¬X<;yo!’=ÌÈC#ë÷NØ!†Ü˜‰Ú¶E,HÁæ€0§›E·ðö«ª?¼=¿K»k{˜€]¸TVܬ`?8uQßv0Oiÿ�w†?è\Ò?ð/þ&±†®šÕ-›C²h•‹°mz虉P§Í&,Ê6¨\>á€JÜûOˆÿ�è¥àÊOþ1@¾)ðŸ‡!ð†µ,^Ò£‘,'dt³Œ"6 ƒŽ XÐü%á¹|?¦É'‡´—vµ‰™šÊ2I(2IÅI¬ÃâMSCÔ4õÓ´˜ÚêÚHFC·r•Î<z—N$±Ó--›¥9‚ˆ°Ô¤Ú�Ïúj�›þï й¤à _üMCuá/Gk+Ûø_E–eRQÒ5V>„„$ ?CV~Óâ?úi_ø2“ÿ�ŒU{ØõÝBÎKK+Oò¤o+Xš&ëža ?@þÑü3¯èPê-á]w‘4µÀ)#!Á(§ªçè@<V¯ü!Þÿ�¡sHÿ�À¿øšŠÊ-oN´K[]JH’Õ%bI$’I€’I$’NI$š±öŸÿ�Ð+Jÿ�Á”Ÿüb€1|Sá?Cá jX¼?¥G"XNÈég*DlA±¡øKÃrøM’Oi.ík35”d’Pd“Š“Y‡Ä𦇍ië§i1µÕ´:Œ‡nå+œyõ.œ<Ic¦ZZ7Js)a©H3´ŸõÔ_XðÖa¥OwkáMâX——-ª¢:ò±¹é覱mbðõÅç‡ø3B[]nÜK‚8Ùão$ÊWVÖÈ|÷Û€Moê6ÚÞ©n°\év!õq d´ƒlâª.…z—):hZr”ˆE fàG„(6GäíC´•Ü Í�S—MÑcñ-ÆŒ¾ ÐþÄ÷vÒÔy›Y†OËËõRøÇ ·á½Ã:þ…¢ÞÑ`gy£KXÜ’2Šz®y�Ž„ÅG†®âŽdM×÷±ùEψnË¢åIÆ<¦J©;HÎќ֥”ZÞh–¶º6”‘!$ªJÄ’I$“$’I$œ’I4›âŸ ørkRÅáý*9ÂvGK8ÁR#b8àÕÂ^—Ãúl’x{IwkX™™¬£$’ƒ$œTšÌ>$Õ4=CO];I®­¤€9Ôd;w)\ãÈ÷©táâK2ÒÐéºS˜!H‹ JA  ÿ�¨ö  ¿áðÇý šGþ�Åÿ�ÄÕ gB𶑦5Ùð¶“3y‘ÃKgß$’,h¹ÛÀ,ê3Û­i}§Äô Ò¿ðe'ÿ�ª÷±ëz…œ¶—z.“,Œ:6¥'?ùƒß=¨®™ám.xåþÔðni*¶[ÇèãA1¡œŠ¿ÿ�w†?è\Ò?ð/þ&«iöÚÞ—na·Òì™IÜZã[¸É÷y!f?\ûOˆÿ�è¥àÊOþ1@ºç„¼7‡õ)#ðö’޶²²²ÙF!8­*§†t¥PEœ �0�Ø*Ž¢<I}¦]Ú 7JC</c©Hq¹HÏúzÕÒížËI²´©’6+ЕP=¸  tQE�QE�QXž&Ô5->ÆÒÒ##LÒIOäŃ—ò‘•Ÿ °`7g¶(nŠãO汎õ¯4é/ °ÑàÔç¼ÓÚ3üÍÅäoîØ¯^çøwZÔ¼m“íy¡êÈa³žø® %¢…Ñd#÷½@‘[ïÅ�uW+¯xÓû*â[{Mþýặ¶–H‚ÖI^!åîg>ÙŒáyŽq1ñ„?Ú_`þÉÔ|ï¶Icÿ�,q楸¸ýgGŒü§ÔÛxÈIEq7Ÿô};E±Õ¯ìïím¯Ñe¶ó¼•2Æc¼Ç�Œî$áCìâ•'…%‰ƒFêXt ò �>Š( Š( Š( Š( Š( Š*–¯ª[hšEÖ§xX[ÛFd}‹–8ìrzêhí™'ˆôXl­/.5[+{{ÈüÛwžuŒJ»wewœ“éQ¯Šü8öò\.¿¥bPÒH/#Ú€¶Ü“œG׊�×¢©I¬iȑ˩Y£É §PZ!ÕÀÏ+ïÒ®ÐEPEPEPEPEPEPEPEPEPEPEPE‰uâ‹;/®‡q Äs=›ÞG;:!Ã(;³¸dc§4·E`j~-±Ò”·ËÆ¥4PÇldˆK‘•d. ˜³v>•5ç‹|?ci5ÔÚÅ“Â[Nëp„E#0P¯ÏË×'=�'µ�lÑU-õ]:êö[+{ûY®áPÒÁÊΊz äïVè�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(¯"D»¤`«2N9'�}I TW7¶¶B#us iVüÙTêǰšÏÖáï4I£É‚ ý÷� å 2¢ñí#Æ}±žÕÆÜé~%ŽâþÓµKëW¾±¸„ÍœÃzÒHÃ|ƒhh–,(�Æ2 Ñ\!xeI3!d`@e%XqÜAˆ5Ÿ«h~µ%¼—©qæ[î<RÀʆce$ y~ Ú¦§ÛÙ][ë¶6vÝßß›}A¢ÞK³$n̳‡|Æ%B',N ›§Iñº[]ǧA¬[ÜOo~‚[ÝMfE-p¯mç1V‡MÀ–8�ޱ xVÛMšMTÇc`l“N•šõí¢ò;#8un`\1Á"§Õü3¡j–övzšÈê±=œ¯eG•>xË &V<ÄçfOLתøoÅ7þ }Ãj7NöWÉä-À†A+íòRg}è£ÌS™ ©9 ×Oâk[ûÛ¿]Ûéz„Â å’æ(.’&‰ÚHðx ¾ç\'lž@.Üx?D¹y^X.7̱ ofRæ"¦78q—R‹‡ûÜu¤ºðv‰y¨ý¾XnEϘ%ßôñâ?(>ÀݳåÎ2GZçücâ+kˆ5‹-e•ô‹es>¤²³Ý¨Må·šJ<TeIàòq´í/Æ6«§´¶!yãL2³ë鿤‡ílTÏÊ´x�`Œó€y èx?D]/NÓ–ÚuƒN?èl·s !# }ûpqŒãÀ·� ¡@À�W•[èž:K[Ïí u;©›P·p–·b c[‚Ò:9¸û¦SfÔÛò’ UÍ/Nñt3\G¾¯lïe¨E÷úŠ\F²4ÀÙ¾kœ¬y Ûrr2O`J¦»¢c{É 2zŸJó½+EןĖßm·×áÒ&ÚXÜЩhÄ¥f%Îä¸änùeE<Ö¶÷w~ñ/Øõi5(gy¡Ñ§¼§tŠrIËàv„=9 D¢Š(�¢Š(�¨`º·ºmçŽP„+yni*Ue?Bz¥â;k»Ï jÖ¶ Vòk)£€ƒŒHP…ýH®M+X—Vš[m']]6}a®‰¶ÔÖ%³Y¬xÀ™X~õ…8Úé@™¹K” 7� äÓùÊ›,±ÛÂóM"GjYÝØU’Iè+ÌWBñ{i÷QÃ{»?‡­m~Ñ%ð(.ci¡‚ÉÌJ°c•$æ×…4oÚê×Skqë“Á´s[¿ †Uisí2g*ñ€X|¼±Ï$Ðàž«x®-åŽh%@ñÉWR2#‚ç5“â m{ìß"Æ7g¸‰<ÅyŽÜ.$ŽD($ž¹ã¥rz‘â=:_ o³Ô¢ŽÒÎÞÖþ#}…Á,l<°ûNBû†æ àcMíÇ3hv1ÛOªAyö†:‹Å”»ù{D°91ï›Ëf�gî0 ô Káøü7¡Oâ­6G²¾–êÒÖkM²MÕ¢@f$…Y$;¾l|¹v´ßK‹w§NÂâî=Iî„Éd^_<ÆÈ\q#�ARÔŽFN}Α®7tÝFâ˸íïÕÃÇp«P7‰”\|Þs³;N8ÅQ»Ñõïݴz^¹öu§¹‘íuUˆËnlÖ,q2·úÔV�ãjŽ1Ò€5mü)$áM>Xä˜hPþÒlI")åÜÍ“ˆØÿ�ËÔt®Ò¸›«_Ü|=Ðà–×R:ÔOeöÅ‚õ#”ìuóÉq V ¡øÜrXqéÏ/Ç kwŸo¬[Nö—±¤×ºšL™7 ÖÀ~ùˆqu-€rÃ$ã Õ¨¯(»Ñ<gý™*ë³Ü6ñchµ·òîEkpãí-»f,ùR –ä 3é¾0˜Þ­¥¶³o¸™¬VmMâvŠŽÂV-ȳ“'"Eœa@=:›½<Ï/pßÛsÎ=k͵Ë-BüGs5ö«¥Ü5ò¶‰$º£yW R2"XÖCÃIŸ)QÄœ usZ] CÃñ¤ŽÓA4“Þ>K€®O ‰Ç @Q@Q@Q@Q@Q@Q@Q@Q@åZ—Œï´?LÔ_R³†î_ \ê&Òé‰ sºÚÀ:ç9‘ Ãc#ŠšóÇZ‘dkm[IœÙëÚSm)sY4ѨaÁgÌ`äåÀ8à©�ôúÅ×|5k¯^i7S;Ç6rfFN®¥J¼gý–gÔ W ¤|DÖµKMÉ.‹c.£|m¦Ãfܸ¤ä«,€FUŽNõá ÛO¾ñu惊&³Ôìn^ÏSmÑ]I$½,£”Åßû°Ò$ÀdáH <PS¯øRm[QkÛ[èmåo²gζ2àÛÎfM¸uÆI úŒzU9|tn5 aÕ-¢lð ±ÂÂmîžâ0BÈœ©ÆÒpsœÕ×<s}a>ºÖ aršu¨–O˜Ïp„êCa¢Øà?75…â?ë—Ãã7m§K-íÀ½†à¨sß,DÐÌ@wÝ»Ü Œj�î`ðÜðx¸kbö+Êš3n¶»Ió%ŽàÜÐîÉR~b3ÀÇC^{ãO>‡©%Ý–­§„åå¼1)4Šð”$·.ð¸ä|Ç'‘[ñ1Õ­uå—TÒ¥“MŸ`»·SäˆÌ)"»)rp 2Ÿ˜gaéØª¢¼'ÃÞ$1iÑM}ã´Í7ö%çò/–ÏrËq +g ê0¿ì¨�¯Mñγ¬hþ%¹–Â;itȤ–ÙD,¨Ïˆd_1›-µyeLî /�K¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(Þ‹¥j^^é–W7Vÿ�êfšwœü¬FG>•zŠ(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(‘C ²$¹-…''õ&ŸE�QE�QŒÑE�QE�°G:ªÊÕX8¦G ãØóõ¤¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vgroupsa.jpg�������������������������������������������0000664�0000000�0000000�00000040010�15030617045�0023375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��æ"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ +šñ„Ý6ƒo:ï†]QUОyRœÄ ›þM þ~F€7è¬øE4/úAù?áпèäh~Šóûi¼!?ÚüÝ%mÜ–·&è¢J¨mìwà!pÚf#ðþ}žUæ‡'˜2›.Ðîço7<>§ÛÑ\S'€–Ö+¦ºÑE¼¥Är›¤ØûF[v'Ò¦‚ÇÁw:Œšt ¥K}`öÑέ*‘×*F;Ð_E`Â)¡Ð2ÈÑÿ�¦…ÿ�@È?#@ôW%­xcE‡AÔeN…dKiXg …85ÒØÈ6׿îS¯ÐPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®VNÔõÍz[ÛHç‘oQŸ</Ù¡8üÉü誢°?áпèähÿ�„SBÿ� d‘  ú+ÎôûŸ ^JχfÓbyg†;‹Ï,Fï q"å$lcËsóc!I«Ñ'¤ ¾“ Îb{¨÷*2oáˆÆÐNA €H$s@µÂÞËà I.fŸI(–æä*N¬ÏyT°úTâî$6ËtW¾Ô˜‰[KÜ‘‚zæ€;:+‘¶Óü{)ŠÓû.y�¤S«Nì þÃß'ÐÕÿ�øE4/úAù�ߢ°?áпèäj½®•c¦xÆËìVÉ�“OºÞ?6$·Æ3ùÐOEPEPEPEPEPEPEPEPEP3ã˜,ß@žêxà…5U-$®W÷2õ'бÿ� W‡è=¥ÿ�àdã[rE˶XÒEÎpʨ¿³ì¿çÒßþýð  ŸøJ¼;ÿ�Aí/ÿ�#ÿ�?á*ðïý´¿ü ük[û>Ëþ}-ÿ�ïØÿ� CadM¥¿ýû_ð ÄøcR¶Õî4ísI‹TÔ#…VÔQ�1¸`ÊØm€0ÁIö¬ýMÑ…——®xÂÊ\Auh¶ðê2˜n6™7È#Fw.»·�½ºò[z÷ź=âAiá;K-kT»RФj<¨P¦I›*Ià êí4è–λ·´’ä ¼pVlr@9ÀÍ�p—ú_ƒõ=&k¯#<÷q-н¶»4ÝÂì�Ävð£×¯5“oâ{ÍWSñV›2­ÒÏf©¨Bw7Ù–ÜÉ(¸rªNíùú dëïC¢ê¯¥øºÏN²235ž¢‘„¶¹N»IoõrÕIç×QfšV£eåœV³[N‚H¤HÔ†R2â€(ÂUáßúiøøÑÿ� W‡è=¥ÿ�àdãZßÙö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�sZç‰ü?&©"kšc;ZÊVî2IÚx×K§ÿ�È6×þ¸§ò‡O²#ÎÜúä¿áVq@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r¶úÞ•§kšü7Ú•¬¦õ$÷ ŒGÙ çôàþUÕT2Z[Jåä·‰Øõf@M�cÿ�ÂUáßúiøøÑÿ� W‡è=¥ÿ�àdãZßÙö_óéoÿ�~ÇøQýŸeÿ�>–ÿ�÷ì…�pº}¿†,%-ÉŽYç·^Zâ f.^E ƒ-ûÇÆíÀn#ª£FðYÓgÓ¥ñlsZM¦Ûé¦9/m°±BIŒŒ(;f<䜌c¶¥s hËêMah³Ê!‰¦ ¡œ‚@Éö±4mIüK« /K´Ã‘lžžñùÉaþ3÷»ô‹o¤x2ÖÊþÆÛEglð\ÛÅqi1hü³ ƒcmÇÝÂä}Útšg„fµ¾·“ÆJëwoqnXÞÛÎáç+„êì2sœgåÛ]n½eyšeЬ4Ù¯#pæ ˜À ê‡ÝcØœQT4ø_W’ ]¶öš¤ŽÑ6›s¥Är*îe)ì9Èàö4oy ÿ�ÂSý¯u¯hÎmíE´ ô2L8%¤Q… ümí#té[ßð•xwþƒÚ_þGþ5­ýŸeÿ�>–ÿ�÷ì…Ùö_óéoÿ�~ÇøPOü%^ÿ� ö—ÿ�‘ÿ�V¶Õ´ÝOÆV"ÃP´»1é÷[Ä,›s%¾3ƒÇJßþϲÿ�ŸKûö?Â¥¼/¾+x£lcr ”5Q@Q@Q@Q@Q@…­IxúÆ™em¨OgÉ3ÈФlÍ´.ά;ž‚—û+Pÿ�¡—Tÿ�¿V¿üf€7(¬?ì­Cþ†]SþýZÿ�ñšFÓ/щ5\“ˆm‰ü„<ÐíÈéwK¬ÛÛ\iþ,Õ¦ŠåH›ì°(*­µ³˜'85¥ý•¨Ð˪ß«_þ3@”VöV¡ÿ�C.©ÿ�~­øÍÙZ‡ý º§ýúµÿ�ã4¹Eaÿ�ejô2êŸ÷ê×ÿ�ŒÑý•¨Ð˪ß«_þ3@•ÇüB·ñ&«¡Ã1*O˜î/d“b[Åü^åNÀÉ㊗ZƒTÓtk«Ø|G¨´¦åWŠØ©ç¾!ÕÐ ð×áÊ|=Óî¢þÔšök².P$jTº9=Ï$óÇ»š( sÆþ‡ÆÞ“FžúâÍÖO2 ‘œªçœqÈ×7ð×ÃÞ&ð3Ká½Q£¿ÑÉ2ØÞÀÕ­©åsÔuÏ<Šôz(�¢²¼G=žÖáíå{«h|ÔUfUyÑàÔÙZ‡ý º§ýúµÿ�ã4¹Eaÿ�ejô2êŸ÷ê×ÿ�ŒÑý•¨Ð˪ß«_þ3@”W!exš‹2Úø³W‘–éìØHT¬¨ e9·ÀÉã§<ÖŸöV¡ÿ�C.©ÿ�~­øÍ�nQXÙZ‡ý º§ýúµÿ�ã4ejô2êŸ÷ê×ÿ�ŒÐå‡ý•¨Ð˪ß«_þ3GöV¡ÿ�C.©ÿ�~­øÍ�nQXÙZ‡ý º§ýúµÿ�ã5k÷3ÞøgJ»¹“Ìž{8d‘Ès2N�äö  *(¢€ (¢€ (¢€ (¢€ (®OI¦­ý¡<šýü";ûˆ8b·Ú¨’QóDOAÜÐYEaÿ�ejô2êŸ÷ê×ÿ�ŒÑý•¨Ð˪ß«_þ3@”Wc­Úê2<vÞ+׋¯™…“MH̆2Cªn¶ÙH …ÉÈé[ŸÙZ‡ý º§ýúµÿ�ã4¹Es×w6‘¬—*Ô£FtŒŽÔe™‚¨ÿ�SÔ±ñ©²µúuOûõkÿ�ÆhrŠÃþÊÔ?èeÕ?ïÕ¯ÿ�£û+Pÿ�¡—Tÿ�¿V¿üf€7(¬?ì­Cþ†]SþýZÿ�ñšfš×Öþ$¸²ŸT¹¼€Y¤Ê'HV.Àà¢/`:Пx·á߈¾&ø¨\ê·CHÐ,‰ŽÒûɤù¤Ú¶S�ã­zͨ±°·´Y$•`‰cIÌc'� ñØ žŠ�+Éþ ü&Ô|CâEñN…®Éo«Å±£ŠãýZ”.Æ+ÈÎ9$׬Q@šÞ£{£[É«X›-D —î ¡ÇR¤d=G×kNŠçî…õ牮­"Õ®ìà†Î  Ž–w˜K£ˆ´ÐQXÙZ‡ý º§ýúµÿ�ã4ejô2êŸ÷ê×ÿ�ŒÐåÄÇ«[É«I¦kksÿ�fo2Â4ÍÀ`žc[„,A�yÖµãÓï¥RËâM\�Ì¿4êr ƒN8=äph~ŠÃþË¿'ĺ§ýûµÿ�ã5µÕå¬7VÞ)Ô¥‚dY#‘cµ!”Œ‚?sЃ@ ‡ý•¨Ð˪ß«_þ3GöV¡ÿ�C.©ÿ�~­øÍ�nQXÙZ‡ý º§ýúµÿ�ã5¦¡§êúB¶µ{uÍËC,SÇ�R¾D®9HÔƒ”^ôÑÑE‡©ÿ�ÈÓ£×+Ÿä•«Pj:=Žªb7—hså²»!\õåH<àU?øDôùá?þÍÿ�ÅP™ÿ�žÿ�<'ÿ�À¹¿øª?áÑÿ�ç„ÿ�ø7ÿ�@gŠ< *è×PèÑ=Ë\ê‚óÈh¢•aR­¹V9]Ávc†<oÈåAé?%—N/}—g3Z[Û¥ºXòü‰«;y‡w˜ŒVE•;wdìx4 Kk+k ­GW¼ÿ�[/e ã»±-„AÝZÛo i‚غÚJf ‘Û¦ÁltÝ»¦{â€9›Ï‡ ,ZCÚjp^i刕ôýêA¹ŽáUH "´{Bî8F#Þà_ O¤j7º¥ÅœZi’k¤ŽÒ8cVhäœÈ#£°}«…Q…Ú zÕ¿E kŸh¶šÆîÃU´8»°žî]ñz0;°èz†Ò·áÑÿ�ç„ÿ�ø7ÿ�@tVgü"z?üðŸÿ�æÿ�â¨ÿ�„OGÿ�žÿ�à\ßüU�Eâ¿ùµúåýEoÖ!ð–ŠÃk+®AÚ÷2°?P[¶è�¢Š(�¢Š(Äßò ‹þ¿ì¿ô¦*Ѥ½±¶ÔmÖî!$,T•É© G ‚ü+7þ=þxOÿ�sñT§EfÂ'£ÿ�Ï ÿ�ð.oþ*øDôùá?þÍÿ�ÅP]÷…bI|EfdyõK6ìÁö/›°©`A,`œŒmÎy®?¿o·[WNÓ-¢¶¼Oçi‰.·BÑ:ŠfH#«rTc-èŸðŠhÃþXOÿ�rÿ�ñU€±èw~':.™§]^ýŸ?oº[ÙV+CŒ„'wÌç”tœP5ßÂDºÓZÛûJÑ&Ûå¬ßÙÙʘe‰Ç™óLÂ`Í&FLhvñW'ðî£ñ u;›kxc†ÞÉßPKd <ñ;³ˆÿ�x^ Á•NàÙPW<vµÝËJÒÞòÏE¼Ôž2 ÛÃ}*ÈSøŠ‚ß1øxÍ?HÓ|/®é°êkI=´¼+ ¹uR d0î"€:*+3þ=þxOÿ�sñTÂ'£ÿ�Ï ÿ�ð.oþ*€4ë?Ÿò'höƒÿ�E­3þ=þxOÿ�sñU©ik œ–È#‚Ö(ÐvªŒϰ  ¨¢Š�(¢Š�(¢Š�(¢Š�+šð¯üzjö¼ÿ�ÑÍ]-c?…tgšY~ÊêòÈÒ?—q"ÌrN’y  *+3þ=þxOÿ�sñTÂ'£ÿ�Ï ÿ�ð.oþ*€9;ÿ�‡wÚ®‹>—¨k6rÂe»¸ƒnœG—-Á“s°2ÛDÏ·pv“œRê¿ âÕâÖ{«%}Bù.ÃEbÉ€£r²uc±Ã/Í“ôê…taÖ‡ý½Ëÿ�ÅVŽš¿«ÝA¦i÷3é–À£ên”E$ Œ¤7Î9aÀ#Ð1ðÒ!kuO§LdžâžãO2Ì»&Y<¹¤Ì‰…(Á q“ÜO†Æ=1ìÖþʼnžÒPï§n ä9}î¾gÍ+çkÉ‘¹xÀ­Ùi~·†õô{ë«�Çí“Ay)kdÇßÙ»,¾¸äpkNÏ@ðî¡i Õ™yíæMñI쬮¾ ‡  >ðìZv¿ªêØ}‚ G°)³€¥@œ(uH†#aàgž¢³?áÑÿ�ç„ÿ�ø7ÿ�Gü"z?üðŸÿ�æÿ�â¨N² ÿ�‘ÒûGÿ�£ÿ�žÿ�<'ÿ�À¹¿øª³§èzv—<“Ú@É,ªÝåw%A$˜œu4£EPEPX‘ÿ�Èã¨ÿ�Ø>Óÿ�F\VÝfßhn£wö«˜§òÄeÒgBT@;HÎ 7ç@è¬ÏøDôùá?þÍÿ�ÅQÿ�žÿ�<'ÿ�À¹¿øª�Èÿ�„RúmZòkVÓîµ(µ¶ŽÌ¤›âX„kæÚ<”' 9è+:ÛáÊÅ=³Íu`Ñà ä`C§yn¦yüå1±s³ËllàãŸ^:øDôùá?þÍÿ�ÅUMKFðÖ‘§Ï¨3ÛÚÀ»¤•ï&Âû믷S@æ…ðº [,Ïaw µá¹²yrIx÷ÌÞ[¶pÄeNÊ)Ú'Ã_ìckþ›a7Ùàò²tì?paØÇÌ9ˆÿ�¬hÿ�ŠB[#8­oéVÞœo§Ñotø¤ý'½—Ì’.6».ïž~S“Œzâªß.…¤x†=;UÓ®­-.v­ž ×²˜e“ÆÇwîÛÓ<7cž(¶™àTÓ¯|?n-£Æ™lãP‚4…o��tÉbÙŽÝÐí#<â»ÊËÑŽq üuÿ�K—ÿ�Š¥ÿ�„OGÿ�žÿ�à\ßüU�iÖV«ÿ�!oÿ�×ûÿ�é4ôïøDôùá?þÍÿ�ÅT–ÞÒ­.ẊÞO:Z6yä}¤©RpÌGF#ñ  j(¢€ *¥ö«§ia¡kh$$!¸™cÜG\dŒÕ?øJü9ÿ�Aý+ÿ�#ÿ��ׯ?ø¡©ë³icÃ^²žçUÔT¬²Æ0¶Ð 3ž·AÏMǨÔÿ�ÂWáÏúé_øøÑÿ� _‡?è?¥àdã@×Âÿ�_ø;G˜k7×zœåTÍæd‰T{uQŽ��zï+ø³Ã`|A¥�:“{øÖ»2¢–b@É$à@{ñ_Àz4«s¢Íko¨A¹YäZX˜`ǼtS×}ªÏÃ]g\“J:Ь§µÖ´õQ‘uà:°áˆèpOcÞº!âÏ ñ”AèEìãKÿ� _‡?è?¥àdã@ôVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯EV±Ôlu8Zk Û{¸•¶3Á*È`\qî*i¦ŠÚ 'žTŠÔ»ÈìU@É$ž€ô�ú+#þ¿ÐÁ¥àdãGü%~ÿ�¡ƒJÿ�ÀÈÿ�Æ€5è¬øJü9ÿ�C•ÿ�‘ÿ�ð•øsþ† +ÿ�#ÿ��×¢²?á+ðçý WþGþ4ÂWáÏú4¯ü üh^ŠÈÿ�„¯ÃŸô0i_øøÑÿ� _‡?è`Ò¿ð2?ñ 1ø…mâÿ�ˆ>"¶Ñü0’ÙétÁåÔäso8î¤rÁ: ¹ù³è zw…ô8ü9á») ÐDG‚=‹#ãæ|dœ“É$òhÿ�„¯ÃŸô0i_øøÑÿ� _‡?è`Ò¿ð2?ñ  zñˆ~ñzx½<Yàé`&7YÍ”GËf•WÈ'l…†AèH8Áê}~ÎþÏQ·7p]BI_2 ®GQ‘ÅU¹ñ‰erö×zÆŸñã|RÜ¢²ä2 ÈàƒøÐ~Öÿ�á ÐíïÚÖkK‚6\ZÎ…^ GÞB=zàƒÞµ«#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��×¢²?á+ðçýô¯ü üj{M{FÔ.½–­as9„pÜ£±©À9  (¢€ (¢€ (¢€ (¢€ (¬©|O A4Ë®i‘Ët{¸Ã+#<é@´ŒÊŠYˆU$“€dÿ�ÂWáÏúé_øøÑÿ� _‡?è?¥àdã@Eâ-ÆŸ|`·šx“Iðåžø-§¹fŒÎÄŽa˜8ã°+Žz×·ZZÃeg ­¼QÅ (#vª€0�…gÂWáÏúé_øøÕ‹-oIÔ§0Øj–WR…ÞR „v 3€zd΀/׆k ñ§ƒ> ?‹|9zŽ—ç;6›i”+ œºÏ8+Ÿ˜ŽÕíÚ®¥„:…ý­ †âeqq’3Tÿ�á+ðçýô¯ü ühî¨AªéÖ÷Öż™Ð:‡]¬=Aˆ<ØŠµYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½Ž|Yá° > Ò€I½ükb€ *ö­¦éf1¨j–†\ùh™cߌg#8ÈüÅTÿ�„¯ÃŸô0i_øøÐ½‘ÿ� _‡?è`Ò¿ð2?ñ£þ¿ÐÁ¥àdã@ôVGü%~ÿ�¡ƒJÿ�ÀÈÿ�ÆøJü9ÿ�C•ÿ�‘ÿ��kÑYð•øsþ† +ÿ�#ÿ�?á+ðçý WþGþ46»«Å¡h÷„‘K;F¿»·…KI3ŸºŠ$“Åy'‚|ã SÆâïùA4ßh:lÄÈw…"2«°ŒäŒtÏ5ê¿ð•øsþ† +ÿ�#ÿ�?á+ðçý WþGþ4¯Yúî–šÖ…}¦È°0¹…£|^b#‚W#88=GNµ^'ðüÓG Zæ™$²0DE»Œ–bp�䓯+F{ˆm`yî&ŽcžI*¨õ$ð(ż aã†~%šËÄ &¡ j2eµXʰKÑ]óÊ‚0 #x5íµ‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��kÑYð•øsþƒúWþGþ4ÂWáÏúé_øøÐ½^ÎúÏQ·7p]BI_2 ®GQ‘Åÿ�#^ÿ�\n”u‰/õkKÍÛJ¸±„ßݽ¼wlóm %‘?ç‘‹=¹žÿ�þF½þ¸Üÿ�(ꇋo¼*–—-­Ùéú­Æn÷at†YÖ02Ω!`g<t lüqØôǽ±œµåÁµií¶4(þy[– ±ÛH†õ¦Ùøñ]-Íî{oçê؉Äé[ƒÃîå°8œöÁ7Äþ¿þÏ’ѯRsäÛK@à“ sÈR3…ÉRs€2E?À[ÅЗÃeîåi¡ Ìò+n,ñ0nsÉš�Òñ_ü‰Úçýƒçÿ�ÑmWõùÝ×þF±5mRÏ[øs©jv,Ö—:\ÒFã¸1·ÐŽ„v ŠÛÔ?äuÿ�\_ù�§£y‡Âšx…Ñ%û {Ô²«l$2=²>µÌè>0Õ$²±ŸVŽÖí¯tuÕQ4øŒM|¿Ý0’B >gÊÛ—;ŠÝ³»Ólü`úµÅ¤Ogr5ÛªÆC Nî9éŠÌÑî|Óêº-®Ÿ¤X=¼£íf8ÎED•f¤î ¤1zb€ñâÍ=‘ƒG½’ÞâÖîgæ!$r[Ê‘4x/‚w1Œ•Á#$t&¯»¥G¨AÑ#¼‘´s�‘”à‘ÊGzÇÝà©íí ÌZ ¾Š)¾ÎLhøf`‘‚pK) ã9=jørâî]/D¹°fH–ìÇfSc,Œß8ÛÁÉ“þÐÏQ@hßòñý„ÿ�I £Åò'kŸöŸÿ�Eµ7ü…<Aÿ�aÿ�Òh)þ%‚[Ÿ jðAI4¶S""Œ–b„�=É  ´VGü$ÿ�Ð3Vÿ�Àÿ� ?á þš·þ�¿øP½rßÛÚ¤~3ºÐ&Keó+› MóÃ’&ó}å#�Œx­/øH#ÿ� f­ÿ�€/þî@eYN“ªJ«ýòÆ@8èp?!@ö¿lï!’htmU¡Žh!2~㦓Ë@{•!°H ¹¦“ǶpÚ^ÜK¥êH¶–óÜ2‘ 2,p¸“F89ÆpvxSÃZeËÍ&‰ª_n]¡.´ˆö˜6â%ÞÀŽ÷0ÉÁäç£:Íw0ðÕØ–ñv\¸ÒŽéצíù‡Ö€*ÜüB±µD‘ô­LŲêID$D¶ÓySýæN åÎAÉÈ®¾¸&Ðü9ý¯e}‡o¡ŠÑdòì£ÑÐ@]öæB¾^wþí0ÀŒmùé¿á þš·þ�¿øP½‘ÿ� ô Õ¿ðÿ�ÂøH#ÿ� f­ÿ�€/þ�Ïdž£ÿ�a[ÏýÕkFÿ�§ˆ?ì ŸúMWðŒS&—vó[Í›P¹™d(ÛZV*H=2 XÑ¿ä)âû'þ“A@úþ©¬Úø†ÒËNºÒà·’ÂâîF½Û'ˆcrÈ¡AõÁÆÓ×<f7ĈÛBº¼Mõ.¢ÒTŽ)Œa$TDgPCdm2(9�õÀ=*Þ¿¨ø.XWXÔ-tU-.b´–ël"òÙÈ¡˜g¸ÎqÖ¬ý«ÁöˆþÂò!§º-ÆIËd1ÎpûyÏ êppjÃÄÐÞëÏ£½…í­È§V›Ë(áJ�£·*dPs޼gûÿ�ùôoúãsü£¬æÕ<áùCÅ6‡k<,‘bßÊWˆLÊBòªNÒOL ö­ÿ�ùôoúãsü£  š(¢€ (¢€ (¢€ (¢€ çü#ÿ�Z—ý…o?ôsWA\ÿ�„ãËRÿ�°­çþŽj�‹Åú¶¯¥¶’šK[o»¹’YmZvù`’Q±D‰“û¢1Ÿâ˜8zo<?M«ž;]NM>ùa´!߆thGšÝNß½ýü6äö—ú>™ª´-¨é¶w†Ý ¸dòÛÕwƒÀééPKá­yI´M6GwyžÕ gqµ˜’9$pOq@é:ŠêÚ]½úÚÝÚ —>Eä&)cçe=VçþG7þÁ÷ú2Þ´mmmìmcµ´·ŠÞÞ%ÛQ DAè�à ιÿ�‘ÇMÿ�°}ßþŒ· ßÿ�ÈףןåkMæ$º$»NÆu,ªØàÈöÈúÖMÿ�üz7ýq¹þQÖ´±Gq Ã4i$R)WGPU”ðA¨ Ãþ(ñý¦‡q¨$Me�¢ÓÙV) ±œd›‚YpÈQ Eï xò-rm/O’ÆðßÜi¶÷—3Ál~Ë É“a|¤Œà¦s[‘øc@Š CÓK˜£[H¡q‡Ú1¸pqÔu©­ô=&Òâ‹m.Êà‹ÈŠHíÑZ8ÿ�¸¤ …öPÿ�È®Ø>ýÕ¯Y+ÿ�‘;\ÿ�°|ÿ�ú-«^€1oäoÓ?ëÂïÿ�F[Öck=Ÿˆ´Û¿²]Ï Ú\ÄÍo “k3ÀFqÓ![ò§ÂAý5oüð  zã5ïë:V­¬42iϧé–0^˜ó¦óU1«ù˜ ûŸ—ä9,¹Üÿ�„‚?újßøÿ�áYÒ }LjsxVâMAH"éô‚eéóíÏZ�{ø¸C¨ÍftËéåþÑkÒ%…~ql³Œ–—2n ñè@#&žŸñÃU¸X,4fi$’E„uŒLˆB¼ˆÎêA ÞÕ`ÿ�a¡t|)9¸YÀ—û#çœeó·;¸õàSÈX¿„$bÓ}¡·hÙÌ¿ß?/Þ÷ë@éÞ=ŠêcÖ•{‹vm¤pcdˆ—·ˆ¶'sÆWåü¸&VñݬVÑ\Üi:œ6òÝÉd²0…‡œ"”!d'%¢*8Á,¾¼9N„—‹x¾n–F™fA$o¼Á¶çqîzšˆG¥DöËi£j–v°JgkK]7ˆi2gP¼TAŽs@h9�ãÆ–²?á þš·þ�¿øQÿ� ô Õ¿ðÿ�€Ä_ò ƒþÂ_úSIâßù5/ú☬ÝKRmJkh4ÝL9½µrd´uUUž6bI�šÒñoüŠš—ýq?ÌPÍqöº¿‰.|O«ZÆl¤±ÓîL~\vMæJžT2móLáVCç`epv“‘Û°¬øô-‹»ˆ´«šðº‘mÐ4àõq–ß4ÆiŸSìqËiu{%ÝÔqÙ¦›bÅÌMkÁgMí¢lÓÖ½²c𷇢·X#Ðt´…e,kgQ 1¸�zÖµ�sþÿ�-Kþ·Ÿú9¨£Â?ñ婨Vóÿ�G5=ÿ�üz7ýq¹þQÕ=SÁv¯w{-ÍÍàŠð9–ÝynmÌ€íÝ»Ê;q»o|gš¹ÿ�#^ÿ�\n”u³@l¾ ‘¯-!7?j±k©¯/§¹p'šG¶{`¡Q�Øã‘ŒlèIÈ—Bø}§xnæ ´ËÛ¸Lh±Ê‹º­Â©%C…ˆr7™pǹ5ÖÑ@Σ¥G¡ü3¿Ò¡žiá³Ò¥‚'›ný‹ Чnry­íCþA·_õÅÿ�‘ª+ÿ�‘;\ÿ�°|ÿ�ú-ªþ¡ÿ� Û¯úâÿ�ÈÐ$:kк¸µšÚ(§†{}›Ñ¼¢‡‡VS•vƒ×תCàx4‰£¼Ò&™æµ ö¶w2�‘mÖÜ1`…óå(^¤g¹­ÝþE½/þ½"ÿ�ÐhÐkð«I¶/w<¿o‚ÂÖÕç…"âHBÈŒèYNTpÓÜê4ý l56Ô ýÝÄòZGi/š" GwW!pß¼qÆLóZÔPFÿ�!OØA?ôš ׬þBž ÿ�°‚é4¯@Q@Q@?Äkýa­¬´OLñj×fKñ±bwqÏÌþZ{î5Ô蚬î‡cªÛÜÝÀ³(ôÈÉÜ? ç¼1ÿ�¯k¾$ošì»ž<¸ïX{4¥†Ø¾ÿ�‰6¿®øe¸Š)´lGo"rK(öYDƒè€:ú(¢€ (¢€ ÈÑ¿ä)âû'þ“AZõ‘£ÈSÄöOý&‚€3!ð„lÖI†[T†RÑï·Ki<ÈU>L¬O,œòMd¯ÃH/¡m©ÊÍÌÙЬ’3¤³ÌÒH¯—–k†6•Àíœ@¢€9X| gma=…¶£ £ÏÌPư·•&Yƒ'îó‚êÓ•ä€hßÿ�ÈףןålÖ5ÿ�üz7ýq¹þQÐÍQ@Q@Q@Q@sþÿ�-Kþ·Ÿú9« ®Â?ñ婨Vóÿ�G5�tQE�‘sÿ�#Ž›ÿ�`û¿ýoZõ‘sÿ�#Ž›ÿ�`û¿ýo@ ¿ÿ�‘¯Fÿ�®7?Ê:Ù¬kÿ�ùôoúãsü£­š�(¢Š�Èñ_ü‰Úçýƒçÿ�ÑmZõ‘â¿ùµÏûÏÿ�¢Úµè�¢Š(�¢Š(�¯9ѼK¨Oñ [¹çcáýNi´Û,v¬Öà÷ÎDãß`ö®ŸÆz´ú7…¯æÛkfƒ«O!Ÿ‘9úYšÏ… §Ã˜t­'&÷HŠ;‹îÓÆêä0?ïš�쨪:6©o®h¶Z¥«f ¸Vdç aœ}GJ½@Q@cx·þEMKþ¸Ÿæ+f±¼[ÿ�"¦¥ÿ�\Oó³EPEP?áøòÔ¿ì+yÿ�£šŠ<#ÿ�Z—ý…o?ôsQ@ßÿ�Èףןål×=­ßÙéÞ$ѧ¾»‚Ö/.å|Éä¹Âq“V¿á+ðçýô¯ü üh^ŠÈÿ�„¯ÃŸôÒ¿ð2?ñ£þ¿ÐJÿ�ÀÈÿ�Æ€ÿ�È®Ø>ýÕPÿ�m×ýqäk›ñ7‰´ kíé²K%ŒÈˆ—q–f(@�É5Ñêò ºÿ�®/ü�WÐ?ä[Òÿ�ëÒ/ý�VsŠ<?‡ôØä×tÄuµ‰YZî0A2ÍhÂWáÏúé_øøÐ½‘ÿ� _‡?è?¥àdãGü%~ÿ� þ•ÿ�‘ÿ��7ü…<Aÿ�aÿ�Òh+^°¼9wm}y¯\Z\Eqê ¶X\:œ[@㨭Ú�(¢Š�+ Æ:ĺ'…ï.­FëçÞÍ;¼ò‘ûéú[µÈj?ñ=ø‹§iÀn´Ñ"þиô3¸) Ÿp<Æÿ�¾hwÃúDZ‡ì4¨Idµ…c.O.Øù˜û““øÖŒq£êº'ŠWåK9þÇzÀË´ä)'Ùd·Ó5×Õ=_L·Ö´{Í2íw[ÝÂð¿˜c#Üu  ”W9à}N}GÃÇ|ÙÔl¬os×Έí'þ�o£ èè�¢Š(�¬þBž ÿ�°‚é4¯\Íž¹¤éÚ߈!¾Õ,­e7ÈÁ'¸Db>Í8'§€:j+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��׬kÿ�ùôoúãsü£§ÂWáÏúé_øøÕ«éšŸ‹t•ÓõK¶H. ‹yÖB£ääàœPMEPEPEPEP\ÿ�„ãËRÿ�°­çþŽjè+ðæ¿£XEª[ÞjÖÓ Vì˜æ¹D` ÍŽ Í�vVGü%~ÿ� þ•ÿ�‘ÿ�ð•øsþƒúWþGþ4¯Y?ò8é¿ö»ÿ�Ñ–ôÂWáÏúé_øøÕ8um;Tñ‡ö~¡kwåé÷[þÏ2É·2[ã8'Áü¨Õÿ�üz7ýq¹þQÖÍsÚÝýžâM{ë¸-bòîWÌž@‹œ'5kþ¿ÐJÿ�ÀÈÿ�Æ€5è¬øJü9ÿ�Aý+ÿ�#ÿ�?á+ðçýô¯ü üh�ñ_ü‰Úçýƒçÿ�ÑmZõÉø›ÄÚ Ç…5ˆaÖôÙ%’ÆdDK¸Ë3 �äšë(�¢Š(�¢ŠŠæâ+KY®gpÂ$Žz*’*�åo¿â{ñÆÇ¬ô(>Ý7¡¸ˆpžc~"ºúå|m+è“k—qïu¹ÚþEo¼ˆØ'ü0ƒ¹®ª€9¤kZç†â;iþÝd:£ÎK`{,‚AùW_\‡‹ÉÑõ­ÄêvÅo?Øoˆïo9 û,‚3ô&ºú�(¢Š�+Å¿ò*j_õÄÿ�1[5‰âöTð–¦ÎÁTBI$à �Û¢²?á+ðçýô¯ü ühÿ�„¯ÃŸôÒ¿ð2?ñ  z+#þ¿ÐJÿ�ÀÈÿ�ÆøJü9ÿ�Aý+ÿ�#ÿ��­áøòÔ¿ì+yÿ�£šŠgƒ%ŽãL¿šH¤ÔîÝU”ÌØ Ž¢Š�è袊�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Âñ‰àðw†.µË˜x­Ú0bF›sªñžãvqíX? 5;ohš—ˆc.×:ž¡,“oFácŒ÷‚ ^G&´>!øbãÆ>MD1Ü]Dn%<”‰Næ#߀¹­ý+K³Ñt«m6†ÒÚ1h;üÏr{š�¹EP“êÞ:ÓüñfçKXgœkF×͉P †rÂ3 $anqžS¸õŠáþ$ø/i¶÷vꫬi² ­dÇß�‚c>Çzv'=Å�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�å?<wc­nb¸‹ûE­–k¨Áqä<˜‘¯Í¸ªí;¥zµqø+ŸŠW¾0ÔU$ò¢Ž;HAºCï’@üO¡ ÕcEDP¨ U�z uPW‰í¬o<-ªÛê[¾Å%¤‚r‘—e]§$(ä‘ÔcœŠä~üBOé“Z42 ­2Þ¸ÈÄîÁe@ù3Ï÷½«Ðë‡ðß"ð§uKMUKÕmô �Ì­ÈìÄ€:r=(¸¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬¿Í-·…u‰à‘£š;) °BAàÖ¥dx¯þDísþÁóÿ�è¶  3xY¢‚I\ñ ¬ªXF—£s: €2}ÈÎé:v§mÅÆ³â}*)¬Åü/¨_D‹%¿Ë™+0�oL‚A†Ez$ÈÒÁ$k+ÄÌ¥D‰ÈHê2È÷W3§ø×O±ŠØjº”æ U²·–cè IE \6ÅI�s@’ÅqmøãQæÚK¨¥þÔ_-¢B6ìcÿ�ã­èkRÓÃÖ×ö±ÝYø§Y¸·”nŽXu�èãÔ0h_YÄ–Ë¥¨Ãä¬1ëq2Í"¶c<oAŒ`ã#5±¢èðhzy²·–Y#ó¥›2•$4’4Œ8Ìq@¼0³E¥m-åÅз½xã’á÷>ݨpN9䚤Údº¿ˆµ}ú¾©mGµÆÄ�Æ ãrkG@ÿ�_­ØEÿ�ô£Jÿ�‘‡^ÿ�®Ðÿ�襠kW·þÉÕmôõ¹ñ…ì“[ÉrÖò"#eWÈfV$€ ;¸Ï8FŸÃƒK¹ÔSÇ:”°Û[ ¹–=IYÒ2RP Œ‚1‘ÎEtz¿†¿µµ[}Au}FÊHmä¶ jb’FV|–F`I9·ŒsœóðûJ0Í�¹½Xd°¸Ó–5hÀŽ B«ògå RsÓœÐvzn•¨ÜÉmcã=JæxÐ;Ũ®Ê§H Œ´©t}kFxõVá'ºxdŠæãz2ù·LuÊ)ü*å†"³Ö£ÕŸP½º»H¥„´ÞP ²21ÈT^ñ®1Š›Yÿ�§‡ÿ�ì ÿ�úM=�kÑE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEÏkV²ê>!Ól†¡}i ´¹•¾É7–Y•á<s€íùÖ~·¤G¡hwº´Úωg†ÎžD‚ñK”Q–#v'¯jÚ¹ÿ�‘ÇMÿ�°}ßþŒ·«Þ•»¡Þé3O4ÞBÐHð† ÀŽFGNôÆZî¶$—Þ)¶žft·‚mRؽÁEfo/l„66í ‚Fp2E­ÛKñ œØx¯Yi%¶Šå­Ž¢¦h’E »ÔgiÁ¹?†ÄñéµKå—O–I’TXU¤•ÑлÜâG<�2rAª>ø£ø2YdÓZgi"X‹N‘Â…}P9ÎÐpI\ô€+ëš Ú^‹u}oâ lÍo@÷{— ÷äV÷‰f–ÛºÄðHÑ͔Ύ‡X! pj/ÿ�È©©×üÅ;Åò'kŸöŸÿ�Eµ�Tÿ�„Oþ¦ {ÿ�úÕÍ,Ðn÷M7~-E²”Çqtú…¸Š0¹fý›dC»o¹Ç8ôzijðâÙjz­üz•ëK¨±ra"(‰˜Ï—Ÿ»c X£ š�æ-åÒ%»6÷'Öì³´ñKqªD#gß°FÊHc˜Øq×d×Aÿ�ŸýL÷þÿ�õ«O…:$×|ÓÝÞÜ k{Xt‚DB¬J´DïbN3ž„Wu@^Y¢‹R¶–òâè[Þ¼qÉpûŸnÔ8'òMnÖ6þ¿Zÿ�°‹ÿ�è [4�QE�QE�QE�QE�QE�QE�QE�QE�VGŠÿ�äN×?ì?þ‹j׬ÿ�È®Ø>ýÔ‰¿¶>ÃoýöþxûGÙ|Ÿ;ÊÚßsÎýÞwìÎïáÝŽq\†•kâ/ë—Ú”Ÿ`Ó.nµ)ÐÛ‹Tci<‹ÁIç©<›rO&½*Š�òËø‹5†™qbá,[G³e‚+[tÝ!EóyfSƒæÚ» }Åu³Öáñ$÷Z„º¤–“é°*ý±­¾Y–IwXº6ÖB ü§-“ÂÕÑ@ÚúýkþÂ/ÿ� %WüŒ:÷ýv‡ÿ�E-úýkþÂ/ÿ� %WüŒ:÷ýv‡ÿ�E-�r7ZW‹µoÜG©Ãq%ä6çýÌI£œ4í M€ló~c– Áª }ã[ÕÕíôËÀÚ´ h“7‘lóB¾uÎäþÚA’ÅKmØ©…zµçSÙøÚòÂá.æÕ>Õݼ‘‹_±Ç±%ÂÙ’\?– *çná€H8=v³ÿ�!Oÿ�ØAÿ�ôšz׬gþBžÿ�°ƒÿ�é4ô¯EPEPEPEPEPEPEPEPEPEPEPEPEPEÏüŽ:oýƒîÿ�ôe½kÖEÏüŽ:oýƒîÿ�ôe½kÐEP7‹äTÔ¿ë‰þbâ¿ùµÏûÏÿ�¢Ú›âßù5/ú☧x¯þDísþÁóÿ�è¶  z(¢€ (¢€1´õú×ý„_ÿ�@JÙ¬mý~µÿ�aÿ�жh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬ÿ�È®Ø>ýÕ¯Y+ÿ�‘;\ÿ�°|ÿ�ú-¨^Š( Š(  mý~µÿ�aÿ�Ð+þF{þ»Cÿ�¢–ý~µÿ�aÿ�Ð+þF{þ»Cÿ�¢–€6h¢Š�+#Yÿ�§‡ÿ�ì ÿ�úM=kÖF³ÿ�!Oÿ�ØAÿ�ôšz�×¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š("çþG7þÁ÷ú2Þµë"çþG7þÁ÷ú2Þµè�¢Š(Å¿ò*j_õÄÿ�1Nñ_ü‰Úçýƒçÿ�ÑmMñoüŠš—ýq?ÌS¼Wÿ�"v¹ÿ�`ùÿ�ô[P½Q@Q@ÚúýkþÂ/ÿ� %lÖ6þ¿Zÿ�°‹ÿ�è [4�QE�QE�QE�QE�QE�QE�QE�QET½Ôí4é-#º‘‘®æCˆÙr �^‡“@ê½ýœZŽuc>ï&æ'…öœ¬8>¸4¶÷pÝ4Ë 3d1>P¸�HŽzõ•O@ߨÿ�Ð{Wÿ�¿±ÿ�ñ`Kÿ�Aí_þþÇÿ�ÄVÍý/ýµûûÿ�Gö¿ôÕÿ�ïìüE;Iñ>‘­Ç$–7.ѧ–|É`’pä„(]@pÄ`È=«^€(éz\zT3F“Ï;M)šI'`Y˜€;�:Ugðú˨\^C©_Ú½ÁS"Á"…%T(8*{ZÒI1<²º¤h¥™Øà(I=…:€1¿°%ÿ� ö¯ÿ�cÿ�â(þÀ—þƒÚ¿ýýÿ�ˆ­š(û_újÿ�÷ö?þ"–ª_ZÝM©ê-læHÒi®âŒ™ÀQÙÚ¶( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*¦©©ÚhÚeÎ¥}#Gil†I]cg*£©Â‚p:ž8к+ûÆz&šªo%¼„5›_|Ú}Ç©˜üœmÈÈ<ŒŒ‘E÷49Qî.åòÞͯÖH­&‘ @gܪGÈÈÈäPÝGFMFîÞè^]ÚÍrF­nê¹W(H9º-Aý/ýµûûÿ�IŠô™¥– ÷k$IºIc:$8NI<c¯#ƒSêþ Óô3j·¦ëuÛ˜à[{9§g`¥ˆÄjÇ;A<öÐÐ?Øÿ�Ð{Wÿ�¿±ÿ�ñ`Kÿ�Aí_þþÇÿ�ÄT°x‡O¸6aMÌfòv·g´–α´„aÔò£r{‚:ŒV¥�`Ïáu Aq¬ê²Âÿ�~6•0ÃÐá+ZþÎ-GNº±Ÿw“sÂûNÖ\¥£x‹LñÈÚl²Ê‘ª¾÷·’%elíd.£z§ ¹u­9$ŽžY]R4RÌìp¤žÂ€2?°%ÿ� ö¯ÿ�cÿ�â(þÀ—þƒÚ¿ýýÿ�ˆ­š(û_újÿ�÷ö?þ"ì è=«ÿ�ߨÿ�øŠÙ¢€(éz\zT3F“Ï;M)šI'`Y˜€;�:W¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Í×ô¯í­æÉdò¦` 甪CFÿ�ƒ?…iQ@cñLµ“@Ò´‹ûËD’Q;9¹}±Ìå~r€‚<ÝÒAAÎ�EMmá Ëëî×EÒmḾŠò .ã*l-’/³ÌxŒ‚ªû@`Î2}"Š�óm/áíæ“âH&œÖÑí’åArùíkòê±Ü¢‚NqŒsÆÃýïIðägŽÒêçJ³­XbxãmÒH9,ªÃýÍwP qáMcUÑ.¬µMb7sÁ§¬¯5º˜¦/ÌÑ‚ªê6ì @ç®ãYšÃ­CSðÌvíi¢Áªý²þF•]™R •v«ùa‰_9Ü�|±ÈíéÔP?îïl|G ݦ”×z•½ÔpêÝ¥>o)€¦6Æp‚xPB©Îso>ji&¸4› ÖßP²žÞF‰!yâ¶G8X±„kvaóþsêPoàãâ×d²³ýÜ*°ÉÜÊÖ¿.5ˆ�ŽŒImÇ,r쨢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ï×´Ïí¯êzP—Êûm¤¶Þf3³zÎ;ã5¡E�pº×‡üOâ [ö»‹H·¸}"ëM·H®¥tf¸1î‘ØÆ €#P¯Zwˆ<¨j &Ÿ-´mw¤^Y}–Was\˜·º°Rvþì’1ÉçÇÅÉ_hÚõö¡e­Ó­õ;)cgw‰áa‰UŸË žNß—£ûÌ*ÏŠt;Ýr} a‹{Kï´]}-´¡|§÷mÝŸÞÕs·†8é( <“Áþ K£ ›ÙAdš‰¸‚c{+Ía6€àÇËäùœ·'<óšÜð‡ÃšÎÞÊÒÎwf“ʆîk˜Œ„cvé0À*:zžµÓÑ@4ºF¬š%òjÖЖh_N´ÓŒ—)Ê1`à”]ˆ[gË€ªÉùC¬x{Áª[ÚiÚ:-ýŒ°É}31™¤hŠƒ·gÊ<Í­Äu;wÕßÑ@l߯cƒÄ/ic¦A¨Ù=¥½ÂßN”ŒÇ·b¬]”d….I«gƒu;?Á© 3D´¶R’èk—2$-m䘔y*0Ò~õ¹w©æ½Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vgroupsb2.jpg������������������������������������������0000664�0000000�0000000�00000030120�15030617045�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��» "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +œÒfñ©£ØêÚ:T_j·Ž/û:FÛ¹Cc>xÎ3Ö®}›ÄôÒ¿ð['ÿ�  z+#ìÞ#ÿ� ®•ÿ�‚Ù?øýfñýt¯üÉÿ�Çè^ŠÈû7ˆÿ�è+¥à¶Oþ?GÙ¼Gÿ�A]+ÿ�²ñú�×¢²>Íâ?ú é_ø-“ÿ�Ñöoÿ�ÐWJÿ�ÁlŸü~€5謳xþ‚ºWþ dÿ�ãô}›ÄôÒ¿ð['ÿ�  z++E»¾žMJÞþKy%´º¬BÑ«)Š99RÍÎ\޽…jÐEPEPEPEPEPEPEsšLÞ#Õ4{CûGJ‹íVñÏåÿ�gHÛw(lgÏÆzÕϳxþ‚ºWþ dÿ�ãô¯Ed}›ÄôÒ¿ð['ÿ�£ìÞ#ÿ� ®•ÿ�‚Ù?øý�kÑYfñýt¯üÉÿ�Çèû7ˆÿ�è+¥à¶Oþ?@ôVGÙ¼Gÿ�A]+ÿ�²ñú>Íâ?ú é_ø-“ÿ�н‘öoÿ�ÐWJÿ�ÁlŸü~³xþ‚ºWþ dÿ�ãô¯Eeh·wÓÉ©[ßÉo$¶—B’Z5e1G'*Y¹Ë‘×°­Z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�Èð§ü‰Úýƒàÿ�ÑkZõÌèwšž› i¶3xoS2ÛZÅ ”–؂ʀ~û¦E_þÙ¾ÿ�¡kUÿ�¿–¿üz€5ë“×.õÛ/ØÁm<ͦêp=²‰ÙnWæW$pIOzÒ“]»†&–_êiÌí5¨ =Ió©¶þ!¸»¶ŽâÛÃú”ÐÈ¡’Hæµ*À÷M@•÷ÅQe¨k¶‚ÏMfÒ!žGYµ_.W1ìòˆËƒ•Ú[iâ¬ê_î´÷¼4«™-áy–8u"ZTX âEWú¢ƒnÿ�ùèvã5hÁa¾­ý¦ž× È•æ_2þ'$pC2F×Ì2�ê}kOþ)þÖm?°u´„ó<Ÿ>Ó~Ìãv<ìã<f€9Ùþ% Ðìµ;Xt©cŸQ¸Óåy5]‘Bñ‰XÈ#9±î¾sšìô»ßí-&Îÿ�É’´À“yR 2nPvŸqœV%ùmJîÆêëÂúÓKa)šÜ¥Ü(È+’àà‘Îx$w5ûfûþ…­WþþZÿ�ñê�×¢¹É|Z°ê1éòé‘ÞÈÒÝîm޹ÆB™òFAsûfûþ…­WþþZÿ�ñê�4où xƒþ ÿ�¤ÐV½dhqÝyúµÕÍœ¶Ÿj¼Ç¬ŒÛD1&NÆaÕ½kÐEPEPEPEPEPEPG…?äNÐÿ�ìþ‹Z×®gC¼ÔôÝM±›Ãz™–ÚÖ(\¤¶ÄT�ã÷Ý2*ÿ�öÍ÷ý Z¯ýüµÿ�ãÔ¯\ž¹w®Ùx¶Æ iæm7Sí$H~Ër¿0’¹  s‚HÊ{Ö›kwˆŒïáÍQUFI2Ú€ýþ¨í|G=í´w6º£< ¤‘ÍjÊÃØ‰¨“¾øª,µ vÐYé¬ÚD3Èë6«åÊæ"�]žQpr»Kc£m<UKâ=Öž÷‘¦•cs%¼/2ǤKJ‹œH£Êÿ�TPmßÿ�=Ücæ«oŸ¤Þ¾·qáÍ^ŽV›Ì¹Ô¡0Å#åY•çb¸Œ€>ñë{ûfûþ…­WþþZÿ�ñê�æ'ø”ƒC²ÔíaÒ¥Ž}FãO•äÕvE Æ$ec Œä:Ǹp>úuÎk³Òï´´›;ÿ�&H>ÓMåH0ɹAÚ}Æq\î¯}m5î—q©èœSÛÜo²Ýoe*G�\�çiaƒž Íklßеªÿ�ßË_þ=@ôVGöÍ÷ý Z¯ýüµÿ�ãÔlßеªÿ�ßË_þ=@ÿ�!OØA?ôš ׬;¯?Vº¹³–ÓíW‚Xã•‘›h†$ÉØÌ:£w­z�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¨çžX{‰c†žI*¨õ$ô®FOK¬HÖÞÓ[Wpvµü„Åeÿ�®„fB=¨ ¾Yc‚'–i8Ðngv�(õ$ô®BOK«ÊÖÞÓ[WpvµüŒb²Œÿ�×LfLz ?QKŸU•.üa¨¾³*ËdʲˆûDÏW-ô×ÇpıDŠ‘  ¨£G ÇÅàyuiçÆ:£ë.å±Eòl£?õÈŸ®OÐW_QÁE khª ÀP:�AO¢€ å×þJ¤¿öOýÕÔW.¿òU%ÿ�°"èö ¢Š(  Ícú7ˆ òu}2ÖñGÝ3F—ýÓÔ~ÏêZCð¿‰ï¬Ð}Û+ÿ�ôË~¹ÀÜw¨ú5v”P|Mâc_ð»ÝB½o4I<ñõ0¶~«[DñŸ‡|Bæ-7U‚K€pÖÒÊ}ãl7é[µ“­x_CñÕô«[²>ëÉÞ¿î¸ù‡àhZŠâσu#æðÇŠo zYjƒí{(f"EF4£Å>#ÑÆßxZicotWûLgÜÆq"Á¨³¢±4_øÄ,SLÕmæ˜}è l•~±¶~"¶è�¢Š(�¢Š(�¢Š(�¢Š(�¬ýg[Ó¼?§=þ§r°[¡$ÌÇ¢ªŽY`9¬ïx®"â=6ÆÝõ=rq˜4ønÇ÷än‘ þñü3Uôo Lu×<IršŽ²9ˆ*‘odð§¿«Ÿ˜ût  ¥jÞ8q?ˆ"›MÐ3º6ÙnGf¹# ïåø8Åv±E¤0ƑĊP:�AO¢€9ŠòNµ_ûcÿ�£’ºúä>(É:ÕíþŽJëè–©¤iÚÝ‹Ùj–P]Û?Xæ@Ãê3ÐûŽk˜ÿ�„wÄ>ùü1©ý¶ÉyþÉÕd,�ôŠ~Y}�mÃé]¥Ëé~9Ó®¯“LÕ!ŸEÕÛg~ù‡þ™¸ù$îœû ê*ž©¤éÚÝ‹ÙjvP]Û?Xæ@Ãê3ÐûŽk—ÿ�„oÄ>ù¼/ª‹»!ÿ�0½YÙÕG¤SrëènJ�í(®[NñÕŒ·©¦kVóèZ«p¶×Ø )ÿ�¦R’Aô9ö®¦€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +ž/Ò<£>¥«OµzE ó$ÍýÕÿ�ïXvž<¾ñM¤/àí[…•kýD-¡$r?½#BŒd}ê�í§žX{‰c†žI*¨õ$ô®Eüku­»[ø7L:Ÿ;[R¸&(ϳãt˜ô@~´è< 5Ò󟄚åÊÉlëåÙÂÙ„pßW,~•×",h¨Š�ª£�A@ŒŒéyâÝBMråNä¶uòìá?ìÂ8o«–?Jë‘(Ö8ÑQaUF�ÂE�QE�QE�˯ü•IìŸú=«¨¯²‡ÄŸðÒw6Mª]5‚Bnˆ-mˆÜ±ôû¢GÆ=¨Ûh¢Š�(¢Š�(¢Š�(¢Š�ÆÖ¼' x‹iÕ´«k™f+¶UÇ÷]pÃð5ÿ�ž¿£óáß\˜—³Öíqv‘"øÿ�ÊŠ�âÇ‹õÝ+â_ ]$KÖûIoµÃõ(�‘GüÖî‹â Ä*²u[k§_½¾$O÷á—ñ¯Xz߃ü?â"SÒ­æ˜r· 6L§ÚEÃ΀7(®,x[ĺ(χ¼U,ðŽEž¶ŸhO •q"®ê5}åñ7…¯mãotÃöÈ=Ø…EU ÒŠÊѼK¢x†/3HÕ-o�ûË€²ÿ�¼½WñoRÔ¬´‹ oµ ¨í­bydlÿ�×ö  UÆÞx—Pñ äÚO„6ŒwZÌ‹º sÝcòÖOoº;žÕ�ƒWñþént °âß&;«õÿ�lŽbŒÿ�t|Ì:àì¬ìí´ë8¬ìíã·¶…BGJTz�(;Ãþ°ðí¼‹l[©Û}Õäí¾k‡þó·aÐv±E�QEÈ|Pÿ�’uªÿ�Ûý•×וü}œ^KË ¹aŠ”Q¡ù^6韣„üëºðŒZ„>ÒSU¸’ãP6È÷I÷‹°ÉèN? �Ú¢Š(�¢Š(¦£¦XëOe©YÁwlÿ�z)2Ÿ|þõËÂ1®øoçð¦©çÙ¯üÂ5Gi#Ò)¹töpúWiE�rºŽì$¼M7[·›BÕ¥½þIÿ�\å$ƒèsí]UUÔ4ÛZÍí5H.íŸïE<aÔþ¹_øEuŸ|þÕ3j¿óÔÙ¥ƒ‘É÷ãú|ÃÚ€;J+Ïu_‹zw†à|I¤jZeóJ¨mÚ?1Iù$_•ÕG^‡Ú»«ë]JÆÛ+ˆî-¦PñËeXzƒ@(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢°nÅõç‰ÚÊVêγIvÀ‘Ì]†ItcД½Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4¯Edc_Ð˪ÿ�ß»_þ3Gö5÷ý º¯ýûµÿ�ã4Ïk? ¼=â]eµ=~]CR”ð‘KrR8—û¨©·ñÏ©'šêtmNðþ—™¥[-µœYÙ± d’y$ž¤š¯ý}ÿ�C.«ÿ�~íøÍØ×ßô2ê¿÷î×ÿ�ŒÐ½‘ý}ÿ�C.«ÿ�~íøÍS¼‡QÓ/4¶íõÂMx°ÉÑÛíe*ÇøbrC@Q@Ìèvzž¥ i·Óx“SÜÚÅ3„ŠØ�Ì€œ~ç¦M_þƾÿ�¡—Uÿ�¿v¿üf€5è¬ìkïúu_û÷kÿ�Æhþƾÿ�¡—Uÿ�¿v¿üf€5êˆÒm\}cËÿ�L{eµ/ÿ�LÃÇæÕ[ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�  z+#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�  z+#ûûþ†]WþýÚÿ�ñš?±¯¿èeÕïݯÿ�  z+B{¯?V¶º½šóìׂ8ä™QX)‚'Áت:»vï[�QE�QE�QE�QErZ§Šnïõ´? ÅÞ¡Ùu{'6Ö?ï÷äôAÏ®(—Ž­<"²@5 oµÛ’E”6Ceä­êHeQ݉Ú?Já<Gà?A ÚêQj—®§„C§H|ñd­“½dvÝ@qRyãÍzLJ¼/i ™®ZYouK®nµ Že—Ûý””p+v€<óÀ~/ñMÚG¦øÃÃZ…¥æ�[è퉆O÷ÂýÆý>•ètVW‰oî4Ï j7¶¥EÄ03Æ]w�{dw  Z+Îÿ�·|Kÿ�A;Oüÿ�ìèþÝñ/ýí?ð ÿ�³ D¢¼ïûwÄ¿ô´ÿ�À/þÎíßÿ�ÐNÓÿ��¿û:�íµ&Ó\Ò§Óo£ó-§�:úà‚?P*õyßöï‰è'iÿ�€_ýÛ¾%ÿ� §þötè”Wÿ�nø—þ‚vŸøÿ�ÙÑý»â_ú Úàÿ�g@‰Eyßöï‰è'iÿ�€_ýÛ¾%ÿ� §þötè”V?…µ ­WÖ·—\>ðæ5Ú§k²ôÉÇ�VÅ�V>º÷^~“mk{5ŸÚo rI £1Q¯½XuEíÚ³uÓ{¡iévÚÆ¿xx­ÄvÑÙnÝ#„O¿Œe{údпx+ÃÞ0HW]ÓÅ×DÞk¡Lã8*G üª xNð`š-"îýlå%¾Ç4ÂH•¿¼¹ñç¾xªvú»Ûo|]¨é’-ÇÙ^ ÿ�±Dë6lÿ�VA%YHÚNA¥þÕÓVêîÚ_Ï ¶·"ÖE™ìÓ÷¥C‹“ƒ¨#± ÆŠçuK JËH½º‹Äº™’EÝ© HÏî}«WGž[O¸÷Ë-´ní€71PIÀã­�]¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬dÿ�‘ÖûGÿ�£¶k÷NÕ?·£§\Y¨ke’â&nŒÍU‡÷¨jŠÆÙâoùøÒ?ïÄŸü]<Mÿ�?Gýø“ÿ�‹  úŽŸmªé·:}äbKk˜š)÷R0kɵÛø/CÑà}F+}BHå´kˆ¤µŒ´Páar×+ÅïûÃo>•³Äßóñ¤߉?øº£}©ëZuÝ…µÍÞ”²ßLa€ iNç [{ŽÐ3øÂúÞkÛiu±e%Ê=²2X¬ïhð)ʆWŽCãäcÁ`15Ìž5³Õ´ù®¦›û1­`:ŒUŠÕü©–fL6̽¿^ô›<Mÿ�?Gýø“ÿ�‹£g‰¿çãHÿ�¿ñtƒðÓS×µ =KV¹–âÞæÖ !–a�c)Sæíð;pæv{WoXÛ<Mÿ�?Gýø“ÿ�‹£g‰¿çãHÿ�¿ñt³XÚÿ�úýþÂ)ÿ� =<Mÿ�?Gýø“ÿ�‹¨dÓµËÛ˽¹Ó¼‹k;bpÍ…a€KüT¿EPG…?äNÐÿ�ìþ‹Z×®oLÓ¼I¦iVv u¥:ZÀ«4e‚¨??µ[ÙâoùøÒ?ïÄŸü]�l×'®x^kÏØêÖk•<aª+õ}õ#Ô‚ ý$ö­=ž&ÿ�Ÿ#þüIÿ�ÅѳÄßóñ¤߉?øº�ó‰üSâkŸkºF›¨]½Ê ¨të{SbÃÍ^c.ûÈ‘B°%ò‚ ’ô”=g¼M6êùs ½³Ì,ʯî *6>oŸ…é³ËﻚչÕõËmvÇG3i¯wy’¨KyDLe˜ïàe”RkKg‰¿çãHÿ�¿ñtÆjºß‰¬ôÝ «FÃR»Õ®m„ lL×0•á#vcr‡‘Îx9R}KûoöMŸö——öÿ�!>Óåýß7hÝlæ°-5}rïZÔ4•›MK«8{y�tq•eùù}A­ž&ÿ�Ÿ#þüIÿ�ÅÐͳÄßóñ¤߉?øº6x›þ~4ûñ'ÿ�@Ñ¿ä)âû'þ“AZõ—£X^Yµü×ÒÁ$÷w"cä!UP"Ž09$ÿ�Ô Š( Š( ¡»»·°´–êîxà·‰KI,ŒTz’k;Ä$Óü9k—fI'™¶[Z[¦ù®û¨ƒ’A܊´ðÞ£â[¸µOÆÂKM7Ý '³L嬟øèìZ�‰®u“ƒÜi'æ¼K›áé<Çþùùlu®·KÒ¬4]>+ 6Ö+[X†(×�{û“ÜžM\Æ�QE�VäKÕÿ�ëÙ«z²¼KaqªxkP±´n'„¤aÛjçÜàâ€8Š*Çö‰èiÿ�¿ý…Ø^%ÿ� e§þÿ�ö®éI­è·6B´‹û·þãŽU¿r¾!Ô5]NÓÙn#´¾¼÷F7�*ã™~V ÓhÁn¹çÐÿ�°¼Kÿ�@ËOü ÿ�ì(þÂñ/ý-?ð7ÿ�° ")|Cu—0¾§ög™Z+j²´ 9�Œ•é%ƒø–ßQa«I ±6îd¹S�Žòã9Å…a0ä ç<‘ÑÜE­[ëvzCi¶íyw’¢¥ÞB¢c,Çg,�õ&´?°¼Kÿ�@ËOü ÿ�ì(Îì[Yñ5röÛÂO ˜© FÜ(PÛHÝóØWCá«°´»V²ûrÜ™"€ìʮՄ% ð¿SÉ5§k·u¬_iI¦Û­Ý’Æò+Ýãr¸%Y~NGgÔÐþÂñ/ý-?ð7ÿ�°  ôUì/ÿ�Ð2Óÿ�û ?°¼Kÿ�@ËOü ÿ�ì(£ð7ü‰ö_ïKÿ�£^ºÇð¶Ÿs¥ønÒÎñQnyuFÜçfëž lPF³ÿ�!Oÿ�ØAÿ�ôšz“]Ñ—]ÓÒѯn¬ÂOÀ’ÛfíѸtûêÕONÞ™³ÿ�!Oÿ�ØAÿ�ôšzÎסñƽo¤m&‘"Ä“& 12™œLç#ËÆÍŸÅÜPwàkí.æÂ}CPe»›¹wG¾á¤@…˜ìÀ!T´�j5/Yê‡TYõ-DC©ƒöˆPÄq…!,3 ìEïŒçŠä¼-ÿ� ¨xW@Õ¦•D^\imp¶ÎûRÒq#¡Œ#Vª±!þr;…]²_ˆâçþ&s]<u&ácš¼k‘³i‘ÈxˆÎr@qŒÐm¯¾ÔÁbÄYÊ2zŸÒèò-éõéþ€+ ÎÓQ±ðN¿¦÷RL%¿hÞáãbÑ3»FT§b¤pØ ä`�nèò-éõéþ€(FŠ( Š( Š( Š( Š( Š( Š( ¸ïÈÍà¯û ¿þ“Ë]qÞ2ÿ�‘›Á_öý'–€;(¢€ (¢€ (¢€ (¢€ (¢€ B@“€:“K\§Ž®æ“NµðõŒ…/µÉ~Ȭ½c‡šOÁ2»-�EàÀu«ýSÅÒä¥û‹{ ÿ� ¤D…#Ó{¡Zì*KX,, ³¶ŒGokH:*¨À©¨ŽñüHµ}/ÅÉòÅlßbÔ­¬Œ0ÇýÉ6·Ðµv5^úÊßR°¸±»ŒIoqE*Œ¬0Gäkžð-íÁÒ'ÑoägÔtY”ÎÝe@ŠOø9õÍ�u4QE�QE�QM’Há‰å•Õ#E,ÎÇ@êIì(ÕËk~,‘5м;nšŽ¹€dRH‚Ì;ŽžÊ>céÞ¨>±ªøÙÍ·†å’ÃCÉYõ’¸’qЭ°?ˆó¶z×O¢hzw‡´Ô°Ó-ÖT–nrÒ1êÌÇ–cÜš�ÎÐ<)—tú®£rÚž»2í–úeÆÑýÈ—¤iì?k¢¢Š�(¢Š�(¢Š�(¢Š�(¢Š�) �N�êM-rž:»šM:×ÃÖ2¾×%û"²õŽfi?Èì´ƒÖ¯õOK’—î-ì3ü6‘MìYþ…k°¨m-`°²‚ÎÚ1¼¬Q 誣�~B¦ ;Åÿ�ñ"Õô¿'˳}‹R>¶²0Ã÷$ÚßBÕØÕ{ë+}JÂâÆî1%½Äm¨z2°Á‘®{À··HŸE¿‘ŸQÑf6S;u•�)?àHTç×4ÔÑE�QE‘¬ÿ�ÈSÃÿ�öý&žµë#Yÿ�§‡ÿ�ì ÿ�úM=kÐEPv¿ÿ�"Þ©ÿ�^’ÿ�èþE½/þ½"ÿ�Ðÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@£EPEPEPEPEPEPEP^gñÅú‹ã [j­ Ö·†îTò$lDÑJ†Õ9Ëq“^™^qñÁ?ð‘øÛÁššÇº;k—\dÔW>Ù‡ü P£ÑE�QE�QE�QE�QE�WáÏø¨<[ªx™¾kKléšiìU[3H?ÞmϤ~õÏünñ&±¡hZ=¾s<•åøTò9gP¤Ç|³%v>Óotiv£ ¼7vöê’GÝS霜·©Ï'&€: (¢€ ãµïø§¼e¦x‰~[+ýºf¢{)$˜$?G% ôzWc\ÏÄ-;SÕ¼ ªØéÛÍy,8HçΜ¤‡TôÈÓQ^mðSÄš§ˆ¼#xu»™gÔm/ä†C0õHcŒÃÕé4�QEywŽ>2ÚxWÅ0è6v‘_O´‹‡i¶$66p~­è ÿ�\×´ïéæ÷R¸G¨€ny\ôDQË1ôÍG¢jž4™/<Q YhêCA¡‡É“†¹a÷,|£¾kCCð›Á~5­zèjzáYJâ+U?Á õo¼{žÕÓÐQ(Ö8ÑQUQ€�è�§QE�QE�QE�QE�QE�QE�Çxsþ*êž&ošÒÛ:fš{VÌÒ÷¤sé½sÿ�¼I¬hZo \Ï¥y~<ŽYÔ)qß,É]ôÛÝÁF¨Ão ݽº¤‘Á÷Túg'-êsÉÉ ‚Š( ¸í{þ)ïiž"_–Êÿ�n™¨žÊI& ÑÉB}$•Ø×3ñ NÔõoê¶:D6ó^K9ó†ç'iaÇU=2�tÔW›|ñ&©â/ÞnæYõKù!Ì0àmRã°ÇµzM�QE�eëz]Ʀ–mi~l®-n<ô”D$ÏîÝ û9üªö?‰?èjÿ�Ê|ã]Îÿ�cø“þ†¯ü§Çþ4cø“þ†¯ü§Çþ5ÑQ@½ß‡¼Cyg=´ž*ýÜÑ´m>>„`÷÷®†ÆÕltûkEbËKcÔ…�gô©è Š( Š( Š( Š( Š( Š( Š+Ñü) j6×WwšM¬÷j›ätÉl\Èè�vW•¶•cm­ß ôm[ }b 1 ŽÍ’v¤,9‚WÎäm#Ž”é'ðŸöÕ¶›‚Žö¹ò¥2$ ÌsºÈ¤HAìï× xÉP@=JŠât  ¶¸–/ Çk%´þDÐÜěն+ºÌ*êx=ýjþ•£éÚ?Œ.¢Ó¬âµì#fX†>có@=Q@Q@Q@ÆxoÁ¾ºð¶‘q>i$ÒÙBîíK1@I?szV`.mN§¢è7]Þ_Z"ZY´RGöv˜o;¤`Ê ¨æ€=ëC²½×,uk˜üË›‘-·tŒ¾70¤(ì3ëZ5æ þì Ǩ=Ìs$JðnӃÕ9]§ƒÓ=ðΣxCÄ×Åá˜íd¶ŸÈš˜“z¶Åq÷Y]O¿­�vÔW7áý2ËIñ³mam´]»yqŒ ù8®’€ +‚ñý•µþµ£Ew M·º`®23ºŸÔ×9ÿ�Þÿ�@Ûûæ€=BËE±Óõ;ûûXDS_”k€¼+ºänÇ÷ˆ8'¾hWÏZµ¤†¢ÑØimickɉ o2Mæ@P6üýß)É`=ê]JMÄjQ®º{KYnSr IDxÝ‚#—9�úf€=úEg‰ÑdhÙ”€ê*}Fr?:æô�xo÷/yi§¬º„Žd’úèù³»’w7BO¦+Ìmm´+U´æÐÌŒ È¨U‚• V<‚ê9ü3ZŸðèßô ·ÿ�¾hØ(¬ßÀ¶ÞÒ­Ð’‘YŠ[®ÍiPEPEPEPEPE‘â¿ùµÏûÏÿ�¢Ú€5è®roxlÁ ‡EÓÒ]§c<;•[ÙZà´‘¦%–™6«á3P“RÓQŽ-.ØDñnòþFÊAÿ�YÃnØÜq@Ÿu¡Ù^ë–:µÌ~eÍŠH–ÛºF_˜R öõ­ó Mq#[ø/í6gO´¾·xR ò‰Ì˜]×'èÞÙétÏ xCVÒ¬õ+]ÐÛÝÀ“ÄZ®¡†Gcƒ@UÏøRÎÞÁ5k[HV#Ô$h0lN•ÐPEsšÖ•a¬x§K·Ôm"¹…l®Ü$ƒ 6ûqŸÈŸÎ°üIá]6ÒóE¶Ò´­vöò=Ý“M´$”Dÿ�žDuþ,ö䯲ÑltýNþþÖ×åà/ î¹±ýâ ïZæ6cÂcÓ÷¼¸6­=´hУùænX6Çl gÖ’Íü(éno|ö?P–ÄH©¤en [»–ÀàsÛ€z}ÅøÂ²ðõíͶiñG¹$DÁS‘È5ÚPEPEPEPEPEPEPEPEPEPYÿ�\ßö½ÿ�Ò™k^¹X´ŸíÏÞéþjÅæj7M—ÌC¶ñÛk®Fäm»Yr2   ÑÙxnÓÅAbÒì¡×.!{¯=,‚É"UvóBòr둜üÊzøo÷0àè:q[`Y,Pcaez ¶L1#ƒÏ1ªü7ûn‘§[¥å±–Æ+¤LÙΑdÌîY6C–Ú8çE>ɬAcwy4š\еñŽÕ -l'žI‘¢*Ȫྼcf€=Ú3N»û%¬6¶ÓÜ+LcŠ5C MªX€9Æä÷Q?äuŸþÁÑÿ�èǬÀñéZ®—¨ì•–Ê+ˆœZiž@K°†¼m¬ žAÃ5¬Ÿò:Ïÿ�`èÿ�ôcÐÍQ@Q@Q@ÿ�‘;Cÿ�°|ú-j¶Ÿ¦xZSRÓ¬4}> µ… âG`#G.ìe¶€êv88'¡ªÙé?ÛŸ 4­?ÍX¼ËFËÇæ!Ú¶ºänFÛµ—# ‘šÉO†ÿ�fÔ,uï-¤–Íc!VÈ+“Ë8Žßû˜Ï›å•Ã|Š{ÐT4îÙ£mÅ¡3hå³P Š nÚËÉÀ 7qÐàÕ‹htÍ:ïì–°ÚÛOp­1Ž(Õ 6©b�çgÜWŸ§Ã95ˆ,nï&“Kš¾1Ú¡%­„óÉ"24RY\÷׌cŒÖþàxô­WKÔöJËeÄN-4Ï H%ØCÞ6ÖO ‡aš�Ö°ÿ�‘¯Yÿ�®6ßÊJÙ¬kùõŸúãmü¤­š�â¼gÿ�#ÿ�^·_ú‘Zþ3ÿ�‘ƒGÿ�¯[¯ý ãµíúÕ¾¡ç¢ù^_ ç]Ž[äl›³µ¸9�(HaÑ5Mb;&›ÌòÅÃZ~ô2¶Â9]ÃíŒô«gKÓÙ¤ccjZ@êä¹`ÿ�x9ÏZå®<#5¾¦·6éþuòÎÌ‘,eÚVfi¶\€¬‹€ Ž„ëo%¬ÞbÝA>gy]n­ÞU“q, ˜Þ1€ËŽ àÐIce¥¦&±´´M…ã J»Hl0UÁúTöw¶Ú…°¸´™e„³(ué•$Ô˃B–ËE¾Óì®`®'–T‘mÈØ²9b 2@%ApRèzš%Õÿ�—ze²¹—ÍŽVf‰°>c;Î2sÞ€=cFÿ�Ÿÿ�^Ñÿ�è"¯Uþ@Zý{Gÿ� Š½@Q@Q@Q@Q@dx¯þDísþÁóÿ�è¶­zÈñ_ü‰Úçýƒçÿ�Ñm@’ÅÄ/ Ѥ‘H¥]AVSÁ¢¹ý;OðšÁŸ¢ØÇ…É[˜¢Óv™P6B„Ë’ !¸Îi¾,ðŸü%fÿ�JŠ&9cýí¿›·~ßÞGó ’®ß•ùÛ¹¸9®kÆ_®/î5­NÆ(.îutˆ% ÖÂÝwLσ$Û·;†FH�€vçúxèÚq{xÄP·ÙS1 Îxà ž©«6&Æ8žÊÀAvl haP« Ú¬ò²œz\5÷ÂäºÖõ-QuKÛ‘;Gwm$ñº€G•*y¡r¸U*@äâºoøn=ûUž/²Ô%Š]ZùE ı‘Ç*Jî±fäç4&þ¿Zÿ�°‹ÿ�è [5 ¯Ö¿ì"ÿ�úVÍ�d\ÿ�Èã¦ÿ�Ø>ïÿ�F[Ó<Moáó¥I¨xO´»³±V”µÅŸÚ<¡üLkÜàtÔûŸùtßûÝÿ�èËzÂ×<�ºÖ«¨Ýµüq-ì2ÄX[fdn`Ùænæ!Ÿ3ËÛ÷ùÍ�tré:D·¤º]¬’,`FÍj"ÆÀ¨ÝŒ.  ú‘ÐÓáÐÄÒÏý§y²IæÉ'ÙSs¾íÛ‰Ç'w9õæ¹ ÁZoˆ'APZ½…ÔFîÊ$·Zcn!Œ32ò]ŽN79#©4…–ú$¶9ŸO¼‚ÚðÜØ¼£9$¼{æo)Û8b2§åÒxŽæÏ^][J²Á5°’9ä:œG±·ë›Eÿ�„wáqѼȥû˜‡ÌŠ(>?ˆ®OÌz“žI'¾+¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( ²<5ÿ� ¹¿ì!{ÿ�¥2Ö½dxkþAsØB÷ÿ�Je  z(¢€ ÆOùgÿ�°tú1ëf±“þGYÿ�ìþŒz�Ù¢Š(�¢Š(�¢Š(#Ÿò'höƒÿ�E­kÖG…?äNÐÿ�ìþ‹Z× Š(  kùõŸúãmü¤­šÆ°ÿ�‘¯Yÿ�®6ßÊJÙ +Æò0hÿ�õëuÿ�¡ÁY¯ã?ù4úõºÿ�Ðଊ�(¢Š�(¢Š�ï´oùiÿ�õíþ‚*õcxGþD­þÁÖÿ�ú-kf€ (¢€ (¢€ (¢€ (¢€ Èñ_ü‰Úçýƒçÿ�ÑmZõ‘â¿ùµÏûÏÿ�¢Ú€5袊�(¢Š�ÆÐ?×ë_öý+f±´õú×ý„_ÿ�@JÙ  ‹ŸùtßûÝÿ�èËz׬‹ŸùtßûÝÿ�èËz× Š(  oÿ�È©©×üÅlÖ7‹äTÔ¿ë‰þb¶h�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬øFtàò2>¡™#ÊË¥p‹¹˜³ªà ’O½lQ@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9ZôPGü#V?óßUÿ�Áµ×ÿ�©ìt[-:æK˜>ÒÓH‚6yíö8äž•¡E�QE�QE�QE�bÅá]2R_RŽ(Ô*"j—!UG��$àSÿ�á±ÿ�žú¯þ ®¿øåkÑ@ðXÿ�Ï}Wÿ�×_ürøF¬羫ÿ�ƒk¯þ9ZôP?H³Ó$šKa9’}¾cÏs$Ìvç»�É«ÔQ@š¯‡ôÝnX$¾ŠVx,mÄ‘náò0Îv¯_J¡ÿ�>…ÿ�<¯ðesÿ�Ç+¢¢€9ßøAô/ùå{ÿ�ƒ+Ÿþ9Gü úüò½ÿ�Á•Ïÿ�®ŠŠ�çáпç•ïþ ®øåðƒè_óÊ÷ÿ�W?ürº*(;H,, ³¶M–öñ¬Q&IÚª0O'Þ¦¢Š�(¢Š�(¢Š�(¢Š�(¢Š�*»Xo¬ç´¹MðOE"dÊÃdsÐÔÔPGü#V?óßUÿ�Áµ×ÿ�£þ«ùïªÿ�àÚëÿ�ŽV½‘ÿ�Õü÷Õðmuÿ�Ç(ÿ�„jÇþ{ê¿ø6ºÿ�㕯E�TÓôË]."µYÉ!‘̳<¬Ìp ,ä“Ðw«tQ@/ô{=Jxg¸ûBË º#Áu,$+, F¢õôªÿ�ðXÿ�Ï}Wÿ�×_ürµè  øF¬羫ÿ�ƒk¯þ9Gü#V?óßUÿ�Áµ×ÿ�­z(ü-¦J…%}FXÏT“S¹eob ˜#ØÖÍPEPEPEPEPEPEPEPÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vgroupsc3.jpg������������������������������������������0000664�0000000�0000000�00000027024�15030617045�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��°"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÎÕõ6Òâ·1ÚIu-ÄëFŒªrA9Ë:)­Æ×ÿ�×è¿öOýè�þÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*¶h  oí]_þ…Ëü ‡ÿ�Š£ûWWÿ�¡rãÿ�¡ÿ�â«f¹_íýR?Ýx~d¶_1"¹°Dß<9"`ÿ�7ÞR0Àù׊�ÑþÕÕÿ�è\¸ÿ�À¨øª?µuú.?ð*þ*±m~#ÙÞC$Ðhº³CÖð™?qÓIå ?½ÊØ ¤\ŒOˆVqÉ>ª†–o!8ƒ—¥»ÿ�Ë^6Ë"!'®r»†M�kÿ�jêÿ�ô.\àT?üUÚº¿ý —øÿ�YW¬-,tÛÓ¦êRZßiÇSYcX±aràÈTH„…¯®º€1¿µuú.?ð*þ*¡º×u;;I®eðíÀŽi‹˜IÀ?Å[õ¯ÿ�È·ªפ¿ú  V7K}amvŠÈ³Ä²…n 0Zž³´ùô¿úô‹ÿ�@£@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axše·]*âEÅú4†8ÙöŽ2B‚qÈ­©¦ŠÞ&–i8ÔeØ�¹5ÊÏñÃþ{Ûiou­Ý)Á‡I®1õqòÅ…�jÂU¤Ïkü›ÿ�‰£þ­#þ{\à$ßüMcý·ÇzǺ^ ÀGúÛù¾Õ7ÔG«š€WP;üI¯jºÉ'-Kö{ûõRhÏü,o }¯ìŸÛPý§8ò|·ßÿ�|íÍ\>&Ñ «)yLŠ¥UþÅ.@8ÈgCù »¥èšV‡mäizu­”@`¬*g뎿r×:¥÷Ž.¥Ó|?q%¦‡ï5ˆøi Åo‘ùÉÐvÉæ€1t-áå­ÝıÌ5FŒ˜¤Š}9cmÁ¾a+¹Á3îa“ƒÉÏO-׃§k¶—M·‘¯1ö’ú[“>Fÿ�ÝüØ }+JÒ¬tM6?M¶K{XF4™>¤žI<š¹@m©]ü9´ÕtË›ÛÛk84ØäKm>K%Ku20fpCnU9t÷9éí<uá»ôßg¨ý¡qÐÁ#Œ~ ] *º•u ¤`‚2 s·Þ𞣠–}Åf"h#òdÿ�¾Óõ  _ð•ióÚãÿ�&ÿ�âj†µâ].}Q†).I-¤UQi/$©�}ÚƒþG´ûÅþŸŽR6º1¯¶Ùƒqíš_±øúÀþãUÑ5XñÒîÕíŸþú˜ã´¿¡#Gáý5JºÚÄX`ƒ°pjýqÿ�ð”ø–ÇÚž¼hÇ]2î+‘õÚÛ…*üKðÌmåê7ZLÙÇ—©ÙËoÿ�2íýh¯¢©Øjúfª›ôíFÒñqÖó¬ƒðjå�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�V6±âßè TÕ­må'û¥o¢.Xþ±ŒuSåðï„ïæB8ºÔȳ‡Ø€Ù‘‡»@•SÔµm7G·ûF§mg÷î%XÁüI®høź¿:ÏŠÂyµÑ òÎ?ë´››ò W4ß�øgL¸K¦%Õï{»æk™‰õß!$~  ð°­õ—Ãz6©®1û²Ã“oøË.ÕÇÓ4_ëëïôÏÛœ–‘›¹Àô.ø@~Šk±¢€9~èo*Ϭ5æ»p¤ú­Á™Aö„÷Íu6öðZ@°[C1 ÂÇ…Qô¥¢€ Žyáµ·’ââTŠÔ³ÈìT¤“ÐT¦©e£iÓjÌvö°®ç‘ÏüO šä Ó/¼su¡¯[Éi FÁí4‰àƒ‘%Àôî#ÿ�¾³Ò€#ÍçÄf yö^îpc›Téê2ŸÀ°ô»{kh,í£¶¶†8`‰BGjQG@�è*@¨U��0�íK@Q@Q@Q@#*º•u ¤`‚2 -Î_øÂz”‚K؉AÈ–¼™?ï¤Áýj—ü FÌěŠӶò‘›¿´Ä¾Û& Ƕk°¢€8ÿ�±|@°'ìúƉ«'¥í£Û?ýõ0ÿ�Çhÿ�„§ÄÖ8þÕðEã á¥Òîâ¹P¬Q±øWaE�r ñ/Ã1·—¨Ü]i3g^§g-¿þ<Ë·õ®ŽÃWÓ5Tß§j6—‹Œî·dÿ�€“VÙUÔ«¨e#k¿ð„õ)—±ƒ‘,1y2ßIƒúÐGEqÿ�ð1ÿ�oxƒNÛÊFnþÓûl˜7Ù£ì_, û>±¢jÉé{höÏÿ�}FÌ?ñÚ�ì(¯ÿ�…¥ãû/ßÚÏàÛ‹ý>)<¦‚Ê $1•�1IB|ÀœžGp2+ØtLjútwbÎòÌ· ä)úzýA#Þ€/QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEgjz·öl¶­•ÍÜ×NÉvæ0xRĒ죴£Edlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÔ¯Edlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÔ¯Edlßеªÿ�ßË_þ=GöÍ÷ý Z¯ýüµÿ�ãÔ¯Edlßеªÿ�ßË_þ=QÏ«jo‹‡µ8å*B;5«>¸óÆhΫ¯é:$–‘êWð[Iw2ÃHß4ŽN�¯R9è;ÖUÿ�Ä XÜDÔ>ßz1‹M:6¹”“Û?W—ë/<Aª>¥ªÜøžîíÏ2H,¸€v�öWªéò&Ø[éÞ ¼´€Ë;qh‹ù ¨‡öçŒu~4 C¦Bs¶çZŸ ÿ�~cÉüØQÿ�^¥©óâ?j7ˆzÚØbÊ;ƒ³çaõzÚþÙ¾ÿ�¡kUÿ�¿–¿üz£—Äۘ΃©Á“GšÏnB™QI )8Ë€Ðôo è>\i:M¥£²$cÌo«Ÿ˜þ&¶+;WÕÓHKRm..¤º¸ñEÍÅŠ³s½”…=êí›ïúµ_ûùkÿ�Ǩ^ŠÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǩ^ŠÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǩ^¸¿‰^?ƒÀŽìGÅýÄ‚;kw8 ‚ ±Ç8õ"·¶o¿èZÕïå¯ÿ�®cQðÝŽµâ1­ë>ÕµãA¼72Ú´0(þêyØ$žIlþP<#ñúZøÇW‘%¶ÞͦéªIŠ×i+½òùzóŒÞµè5Œšµäh¨žÔÕ�ª¯j�ƒ÷Ôïí›ïúµ_ûùkÿ�Ǩ^ŠÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ǩ^ŠÁ»ñŬ—7>Õc†1—}öÇ×lÖõ�QE�QE�QE�QE�QE�QUõùÝ×þF€jDd^[‘ÿ�]Wüi´,¿çîßþþñ¯ð§…4 ¿ éW=œ³IlŒîñX‘ÔÖÇü!žÿ� ‡ýùìÚ_ó÷oÿ�øÑý¡eÿ�?vÿ�÷ðx<¶~†æ{y4‹u’dqý&7*ï ˜c·æÀÏô«¶ð~§–ÏH±–2ªÁŶ†‘ŒàŽ;w kþвÿ�Ÿ»ûø?Æí /ùû·ÿ�¿ƒükÇÿ�á ð×ý�ì?ïȬ}š÷šâˣٺèã ;WɈà{d“øÐ¼hYÏÝ¿ýüãGö…—üýÛÿ�ßÁþ5ãÿ�ð†xkþ€v÷äVbiž “R}=t{ar’еƒª— ¼¨b»IÛó`œÐ¹ÿ�hYÏÝ¿ýüãGö…—üýÛÿ�ßÁþ5âvZƒõ£’×G²t1Ú•ÆÓ´ƒ0s‘ƒÏ®Âá¯úØß‘@˱̻¢‘$\ã*ÀŠ}yŸÂ»];Zñuµ¼p@—6Ácpîôú’ôÊ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�+Uÿ�‘‡Aÿ�®Ó覭šÆÕäaÐë´ßú)¨fŠ+Ë<1áÏYø¾Úîý'\3붺WŽäm#Cg“‚¹Q´Ý(Ô誷º†œ¡¯¯­­Aèg•S?™ªCÅ^*XkÚYQÔ‹Èñüè^Š£e­éZ‹ì±Ô쮟û°\+ŸÐÕê�(¢Š�å|oñE𠵤ڸº‘®Ý–(­£ Çh$�W¾yúÖ§†¼E§ø¯A¶ÖtÆsk8;D‹µ”‚Az‚*—‹ü¢xâÊ mfo!ËÅ,OµÓ=@>‡#ØV–…¡iþÑ­ô2*ÒÝpªNI'’IîIæ€9/‹Z…æáÝ9ì®®-ÚMAcvƒSŠÁ™|©N<éP2 àŽqQxjòæÿ�áv“qw<³ÌÚ¤@É5ÚÝ1P�fT_�‘ÇS~1C4þÒc‚ ‰ä:šá-ô¸õ?¸›¤2­õ=:Ó<$Â%$ŽHÝuT ’Ú-«)þÒèa_–3þÈàPQâoøýðçý…Wÿ�DË]sþ&ÿ�ߨUôLµÐPEyU§†¼^¾7[éVpEöù/¾Ô¾SÛïÉ@›‹`§Êo¶êôÛËû=>1%íÜÑž4æM�X¢²м:À‘¯id¤^GÇךšÓÄ-üÞMž¯aq.q²”vü  (¢€ ç<eãm#ÀºLz†¬gd–Qq@¡Î3À$ �9æº:Ãñ_„té#MÖ i!W#FÛ]q~„Æ€ái~5ÐÆ­¤™¼1¢t™6º8Á €HèAàžµGâUå͇€¯î-'– –Kp$†ímX<`âWS ‘“Ç<Ö§†|1¥xGFJÒ 1[+%Žæv=YsÀü…c|RG“áæ ‘Ç$ŽÓZ…H­é˜ý¢>-òÈÙ<�æ|%¨Þj_ |D÷·SÜ4Wm4ú”Wì«åDØó¢HË€8Î+ÕëÈ| Ð|2ñDsÁq‚õ²—\z{ÜÁÖÉUú޽kר�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�ªú‡üƒn¿ë‹ÿ�#V*®¦‹&•xŒ2­‚=¶š�òÈ—£פÊ·*þø7Uð6‰{¤É%ÍÅœrJâöuÜÄdœ�~´¦øeðÚ îà}&àÍksK]]»rÁÉbJ0rr(ÛIº·½Õ.¾ÕlÏw/›6§t'b§'Ì0£Óœúâ—CÑ[CPErÊILAåãÉÏÞ�çNOAŒšÙ±øgðÓQÒ—S¶Ó$k2ù{t›v’¬3‚¤AªðxámËÛ4Û‰âØ]¤«syå¬Ewwݵ2@b   kÃßñýâû Ÿý töŸ ¾ÞÛ%Ä:$þTƒr3^Ü®áØàÉœ}kÿ <)?‹ü[`útÿ�f²¸¶[t[ë…ØÝ¹“’Iç4£Y–\¶šž£w4ÐL·S 6´xELnÜsò ì9Ï®+E¼!ðÊ8u)f¶¼4Ô]îï£Ø‡vna¹NÖÁ\ƒƒŠ–O|9Šæî ,¯TÙ¦éä7w¾Rôù|ÍûKr>PKsÒ€2t½6âÂïQšk˜eK¹ÄÈ‘ÀcòþP¤gqÎvƒÛ’Ç¿ufóá×,,VîãGÕ61�$7ÓIÏû»7éÇz§£øGá–½8‡Nµ¿‘Ìm"ù—7ñU![ivŠ–€åIÁÁ   ÿ�äcñý}[é:×¢W)àÏi~»ñ ¾—nÐÇöä\4Ï! [ÄÝ\“Õ›óúWW@Q@Q@Q@Q@Q@Q@Q@cj¿ò0è?õÚoýÕ³XÚ¯üŒ:ýv›ÿ�E5�I|Úô·M ‚X[Û€1upÍ+9ÄChüKþü#†äÄÏVÔoxåÞDM±mÈöbÕ¹E�yoįY|,Óì®t_X5í쎢sUM gq\1'#ö>•Õ|?ñdž5ð…®µ-“YË#2<|•%N7)=Tþ‡#œf·¯ôÛVÛìÚ•µä å\D².G|0"¦‚m`Ž x£†Ô*G…U �p�rŸ´VÖ|0ÑA¦-ýÂÍ„BÛCq»½ë–øyá{Ã÷:­Å¥ƒØFë,ïJì¸ É»¥Š‘ƒÈçîžõŠ(†›«[ê^dj¨p'µ˜’"zdw³AìM_®Çšö§Ím–×Z²üñýŠo*kxû¶þÀã…<1#�‘£¤_ê÷šlºmöŸ­YÊ>I.Zʸà‡*¬ FÄÁí@=×"à&™¥ŒŽXê§“Ïæ? €èš†¤¸ÖµFh[[�mãaèÍ’íø2ƒÜPñÇìŸð‰inþÏò?µwö‡Ú<Ÿõ3c>Gï3éŽýx¥ðO“ÿ� Eû?Ù¼Ÿí8ö}—Ìò±ý£ügÏ÷¹õ©~.fÃÂÚ*Y<Ö¢-E?²êqéÌŠ ˜�&pUF8Ç~”xIÞO…KÉ$’;j¨Yå»[¦cý¥ÔÌ¿,‡ý¡Á £ÄßñûáÏû ¯þ‰–¯ß>°Óˆ´ø¬’" ››‡f*}jïûízÕÇï‡?ì*¿ú&Zè(ø~[®u=cP¹ÏX¡“ìÑ  ff®Kâ&±§|3ðäZ¶•áëoe¸XRGˆ §îf1鎿éÝ®¡jö·¶ÐÜۿߊhãwä �r? üoqãÏ >§wd–³ÅpÐ8Œ’€W=>ö1“ÓÞµ|m¥lxCSµŽÉ.îZÝ„1•RwÛ= lÙÙZéö©mem µº}Ø¡Œ"/ÐO@;à/ëº7‰/o­4÷ÒÚ…ò®ÕZ)Ûvvü¬JtŽž‡¥zŽ›«Ç}#ÛM Ú_Ĺ–Ö\nûÊG¿í¡Áâ´kñæµ£é¶Cwn÷z‹ö°[ËåLž² 1Ó=úsœP_Erz¥ªjd7šN¡i«Zœ©Žø{ˆØ º‡q°zäç5ª×#Ú6iz^{îÔdãÿ� súP½q?üŸøVz§Ú>Íäù–ÛþÕæyXûDËùñþï>•²ÚN©©.5]TÇ ëm§#Ñ¥$¹ú®ÊÆø‘zwÃ;Èlƒ[$2Úù~EÚÚ2¤GÈ™¸CþÑúš�ã¾ý“þ?‰~ÃýŸä}¹öÿ�gý£Éÿ�Sqçþó>¹ïÓŠözòM4ÿ� ¼Q$óÜO!½l½Æ© ç÷0uš0¾ƒ§Jõê�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�*¾¡ÿ� Û¯úâÿ�ÈÕŠ­¨Ú]ØÉ…ÆG_ºhá¿ü“_Ø>/ýU¶Ñµ4ñ«ªÛêv¨o,á¶‚7³fòLeØ30oæWã ü<ðsÆxÁŸmð…uÿ� /ˆàól£* ý±¦W¢¼ Øÿ�„f;mj /þŸ™îmå¸FkåeÛF¬9\ƒ™W·¯¥�kKáýFëE‹O—Z¬¥ÚItûEO1‰8ÊÊeä“Õ‹`†*Œ¾óôË-MQΓeböQ(„ †V…¡ùåB¶v„ª’N+[°‹MÔ~Åÿ� _Œä¹û+ÜùV·µ]å�SûÅ<�’;²ÒÂõS§Áã¯6¡ºÜ=¡¿´2r¡ÂòÈs‚¹#åäsÍ�v>ðïü#væh$3ÜÊÛ[ù!*«„smnãÏ,Ì{ÖW…ÿ�äñ×ý}Yÿ�é,uWMÐõmVÞvÿ�„›ÅštÐËå4wbçî«dyHÃaß<+ ÃþÕ¦ñŸ‹àOêðÉŰ’dŽ Ón„Êc€p1Ž�tº¯€æ×R7Þ º†;ôòe‚Â㉣är$3k]JäcŽ*}cÁ³ë’Ü5ö¥ŠaH O±Œ²Ç(3Ø—æˆp 3€êÉ´‹Z•õdñˆ-³Âîiì¬\H;J•FÉù~éÃr29ROøIG‡´ýf߯ÚÅÄñÇ,HšeŠWPÀ»8T^£«uàf€:ý#ÃÓé>m/cÙ²E‧”]ŽÑ¸áFà„(5_Eð¬ÚGˆïu3¨G$«¢ÛÇmå †]ì†ØÕ¯ÊyÜpk™Ó¯5íGKžûHñ¥æ´‘˳eµ˜÷ˆbŠ£#qƒÒ£³Ô|K¨ki‘x£Q‚I¢IA›Hµ!7F$Ãm“v1Æà¥7|»³Å�w:7ü…<Aÿ�aÿ�Òh+^¹Zj6wzüz–©ý¡/Û~αdýžœ/±Qÿ�÷®¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÆÕäaÐë´ßú)«f±µ_ùtúí7þŠj�Ù¢Š(�¢Š(�¢Š(™ñO‚í<HÑ㽕êáâ%¼yåH<§iì}A íiz]ž‹§Caa†Þ!…QÉ'©$õ$žI<“W( Š( :øÅ ÓøwIŽ.'êk„·ÒãÔþânÈB·ÔôëLð’< 4”’9#uÕP2Kh¶¬§ûK¡…~XÏû#Püqû'ü"Z_Û¿³üíEÝý¡ö'ýLØÏ‘ûÌúc¿^)|äÿ�ŸÑ~Ïöo'ûN=Ÿeó<¬hÿ�™óãýî}h­ñ7ü~øsþ«ÿ�¢e®‚¹ÿ�Çï‡?ì*¿ú&Zè(�¢Š(�¢Š(�®oÅž¶ñ4)*Kö=J¶+µMÇnyF\Ëßàò;礢€3t- ÇÃÚbXØ¡é$s—•ÏWcÜŸÓ€0�¥E�WñIO‡š‚G’;Mj"´[¦cöˆø·Ë!ÿ�dðk±®'âß“ÿ� ÏTûGÙ¼Ÿ2ÛÚ¼Ï+hïù>?ÝçÒ€9C4 ¼Qð\A ½l¥Æ—žã÷0u†2U~£¯Zõêñ‡dÿ�…Oâ_°ÿ�gùn}¿Ùÿ�hòÔÜyÿ�¼Ï®{ô⽞€ (¢€ (¢€ (¢€ (¢€ (¢€ ­¨°].혀.I=¾SVj†·ÿ� Gþ½eÿ�ÐM�pžñ< Ú]ø‹N‚â(ÒH¤C#äVï<Y૽~ßW_[Á,²Z¤Q\@cÛ!VfùÙDïqÉÎÂßù&ÿ�¯5þf¶<K®ÇáÏßj¯\Xo%[ÂŒž{z�âgÕ>¾§.§kão±ßÈ|øµc&ÅvÜê©)tPÇF6ŒcYj ´íNÒò×Å–qÇhÅkö¸ÌaÖ ?#vï+ ÷±À8Ï5¿®xÑô],®ôü%ÁÛhQ¤–Yȼ´¾EPÄà–é•�ƒVn¼E‚æÊÂÎÿ�MžÕ®!š;Ò’ÊEÁ˜ö…'j䏯á@-<à{HLIâ­1w–¹\’ÌXþ¤×;áïxR߯¾0º›Ätp]\Z´4ê@¶è¤©ï‚®ßÃì¾ ÓeºšÒ;fŽv‹ls4ŠØ�çæDaÉ †PrQ‚r</ÿ�#ÿ�Ž¿ëêÏÿ�Ic  iõ‡—’^K{ãDž{¢»¦MOìîªÂ 0ìùGšüç<ç—[ðèèQxÚ4¤O$Û%ämº ¡|’ì¥ö`v`Üã8À‡‰5{­H“P·³†é!¥Yn 8AÔƒµ†ÞÚ¾¬;]×cÑ#´cN×–ö»U±³Í•c O¶ìã¾>¤�qz^¯ðïIµ½·ƒÆ®—Véiû˸³ ¸$i…(v�œ·<“RŸxø¡uÓã[s"1u¶7qùJÆ?,‘òîoðîÛŸ›æ´oü|šV³&©Ú¥£�f IŒvêpf”,xUÉPb¿{,»H®Ò€9Ÿ ëz^·}â ´»û{Ⱦܺ xFx÷V®š¸ï ÿ�Èÿ�ã¯úú³ÿ�ÒXë± Š( Š( Š( Š( Š( Š( Š( ±µ_ùtúí7þŠjÙªZŽ‘eªˆEä&C Œ¬Œ…I<©¡ 3â„õÏÚAˆñ$«m,aÞá¢òݥà Ÿ–)þõ®2ãᗋ廸’$µHä¹Ôd>Þÿ�"O[uû¿òÉaõâ½kþ]#þxÜà\ßüUðŠéóÆãÿ�æÿ�â¨Émþx¾+»y%KWŽ;:Iíïó¤¸_»ÿ�-X†?Nj—ü*dý›Î¶ûOöwÙ¼ïíÿ�_ö¯7Íû½|¯Ýúþìÿ�ðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@KqðËÅòÝÜIZ¤r\ê2FŸo‘'ˆ-ºýßùdÀ°úñE¿Ã/Åwo$©jñÇs§I"}½þt‚"· ÷å«ÇéÍz×ü"ºGüñ¸ÿ�À¹¿øªÇ·>¼šHmµ«)åYÝ"Ö™UFX$à�9=¨Ì?áTxãû'ìÞu·Ú³¾Íçh?úÿ�µy¾oÝëå~ï×ð«· ¼_-ÝÄ‘%ªG%Σ$iö÷ùx‚Û¯Ýÿ�–L ¯è_�”…Æ»`VvÛþÙ8ç_ÞrsÇzÇJð¶¨f}Ò]˜d¿gÔd“ËoFÜc@coðËÅñ]ÛÉ*Z¼qÜéÒHŸo ˆ­ÂýßùjÄ1úsT¿áTxãû'ìÞu·Ú³¾Íçh?úÿ�µy¾oÝëå~ï×ð¯gÿ�„WHÿ�ž7ø7ÿ�Gü"ºGüñ¸ÿ�À¹¿øª�òK¯…þ-žòy’+5F¹Ôf‰>Þÿ�»Iá —þY6[ñâ»=B¿ð4ýHF.R±-åÊd |è6H³oøuðŠéóÆãÿ�æÿ�â©SÂÚBKŸg•š9Eßs+�ÊC)Álá@üMÿ�¾ÿ�°ªÿ�è™k3â'‡u_éÖé^QxŒå„“ð^ÞHÑ�ý×uoø tú–•e«ÃWÐù«‚Tò•pÈ*AèOçT¿áÒ?çÇþÍÿ�ÅP’Ûü2ñ|WvòJ–¯w:t’'ÛßçH"+p¿wþZ± ~œÕ/øU8þÉû7möŸìï³yßÚþ¿í^o›÷zù_»õü+Ùÿ�áÒ?çÇþÍÿ�ÅQÿ�®‘ÿ�<n?ð.oþ*€<–ãᗋ廸’$µHä¹Ôd>Þÿ�"O[uû¿òÉaõ⋆^/ŠîÞIRÕãŽçN’Dû{üéEnîÿ�ËV!Óšõ¯øEtùãqÿ�sñUn| y4ÛkVS˳ºE¬32ªŒ± IÀ�r{P˜¨ñÇöOÙ¼ëo´ÿ�g}›ÎþÐõÿ�jó|ß»×Êý߯áWn>x¾[»‰"KTŽKFHÓíïò$ñ·_»ÿ�,˜^+о) vÀ¬í¶#ý²q!Î0¿¼äçŽ*õŽ•ámPÌ4û¤»06É~ϨÉ'–Þ‡8>Æ€<Æßá—‹â»·’Tµxã¹Ó¤‘>Þÿ�:A[…û¿òÕˆcô橨ñÇöOÙ¼ëo´ÿ�g}›ÎþÐõÿ�jó|ß»×Êý߯á^Ïÿ�®‘ÿ�<n?ð.oþ*øEtùãqÿ�sñTä· ¼_-ÝÄ‘%ªG%Σ$iö÷ùx‚Û¯Ýÿ�–L ¯ü/ñjÝ[<ñYËw:lÏ_¹DVuû¿òÑðÿ�‡5ëðŠéóÆãÿ�æÿ�â¨ÿ�„WHÿ�ž7ø7ÿ�@?†<1¬xOá^±a®I·²LóS&å*€d~\~ê5ˆÞÑd]¯m+¯uk©H?P[šÛ Š( Š( Š( Š( Š( ¨k„ R$à YôWꆸÐ5 FAµ—ÿ�@4Æ|5ñ…kðßA‚ãZÓ¡™-T<r]"²œž'"´õ‹ß‡º£¤ÚÞ¡áÛ½˜›Û¨dTïò†$.p3Œg9À¬ï†^Ñgøs ]K£éò\=ª–•í¹<òN3V/ŸJÑ|G4:µ®–lÚâ'{E‰‰# #1R B`•ÆîH�†æçáÜÍ4Þ!Ò ¸7]ok@hˆ“÷CÔ&ÐG®É⇧ýõý�Ú-£YˆF¡Ñ��7B^+ßR±Ô¼ þ!´Óü?Aqp.%[E¸T†9]AU »˜ª«}á× ZZn®º¾«¨ivÚu½Œèg[)'µI!u‚QŒB¸bw…;8a‚y4�šO‹þhvÒAaâM9VY<Ù[ó3»`.YÝ‹G'€�íXÞñ×…-ükã ©¼A§GÕÅ«A#N¡d nŠJžø Џu­BßRÒmæ‹C’+ƒ šD²dÊË3$ga1nP»rsåNε¥áHÒ/xå#EDV˜Uý(®­ãχZ¤b×Pñ¤±)ËF—2“ŽŽá×ý–Èö¨'ñGÂÍ_Q[Ë«½"þõd–xL΀t YIU“À$œdæºË½^êÓÄZ~œÖp›[Òê·h!ê3ãa\…ìÛ»íÀ$QÕüY&‰wv·–�AJÖÁ$fšåšHãP!wȠņGËÈ fïTøa,%ÕëÏ,Ä™%in¤w^†6l’cçýY;=«x|Oðq _$ôÖoþ"¤¼ñUðÑíõ]'O´Ô­d8k§·—z± Šåv¶w”ÆÓœs k²øƒM–êkHíš9Ú-±ÌÒ+`Ÿ™‡$‚AÈ=F �ç| ©ÚjÞ3ñµÝ”$\Úf“8¶UèÀªk¼®;Âÿ�ò?øëþ¾¬ÿ�ô–:ìh�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¯6Ó<+ã=?_†ýŸFžÊ;›ÉÅŒ·.Dm4’8xßÉʰ#FOÀôš(Ïl|3â›M´†×CŠêÛM†ÁîÅܬO•¥Å¶Eä‡i¶œÖ‡<)á–¾k×¶ÄÉ qÇo+È«³~JîPcC¼b!¸'Í‚wWeE�QE�QE�QE�QE�æÚg…|g§ëðß³èÓÙGsy8±–åȦ’Gù9VB„rÉã8“E�yí†|Sc£é¶Úèq][i°Ø=Ø»•‰ò²²¶È¼“°í –ÃsšÐð'…/ü2×ÍzöØ™!Ž8íåyvoÉ]Ê hwŒD7ù°Nê쨠Š( Š( Š( Š( Š( Š( Š( Š( ¨kò�ÔëÖ_ýÕúdÐÇqÌ‹$R)GF ÁP)ð·þI‡‡¿ëÍ™®– :ÊÖê{«{;x®n3MJ¯)72æ¿áVøþ…›ûàÿ�ð«| ÿ�B͇ýðÆ€: J»š)®tË)¥ˆ«Fò@¬ÈWîHã8ô§Ç¥éðÞ\^Ecl—W æXT< p62ßsŸð«| ÿ�B͇ýðƨjþøq¡iϨj^±†ÕUä;…Ü@Û’Hç  ¾]JžîÚîm2ÎK›Q‹yž/ôF#+øW/ᢠøã‘4ÑÆMÕ¦°ÿ�EÖ«Üx#á½¢–ŸÃ¶h¢ê+B~Í!Y „¡.£=<š»'ÿ�éñy“xwKDŒ4‘—f  gÔ>¦€6¥·ÑgÕ#Ôe¸G¹JÆZíŠGAeMÛU°HÜ�8$fªI¢xjf¸iå¼ñˆ™æ¿’FU0YÉO™U²¸9Pz€jøVþ ÿ�¡_Jÿ�Àe£þ¿‚¿èWÒ¿ðhØÓ<;ý”º[w³Q òÞà¶ï00rĶX¶÷É$“¸ÔºM®‰¡ÛI„è«,žl-ÛLîØ –wbÇ…QÉà�;Vü+Я¥à2Ñÿ� ßÁ_ô+é_ø ´SÂ’$¾<ñËÆêèn­0Êrú*WgYº?‡´Å,zF›mb“0i €N+J€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «©éÖÚ¾—u§^Gæ[]DÐʾªÃñ«TP {ðçÏŠÁâÔ¢{Û(í|««ÛO=–HfóL‹‡]¦BpÀ@#Æølú« ×’Z\2ÿ�g~ëΆf¹O3á¶7 àuí]íÍxk‡ÃÚ•ý๷o·G›¾J™U¤&Ln<¶ðû£šéh¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vgroupsd4.jpg������������������������������������������0000664�0000000�0000000�00000034607�15030617045�0023503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ü "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÃÄRÎe6Ú§<QÍ$>j5¸V(å€ÒƒŒ©ênV‡ä?ý„/ô¦Z�“ûr÷þ…½WþþZÿ�ñê?·/è[Õïå¯ÿ�­*(7ûr÷þ…½WþþZÿ�ñê?·/è[Õïå¯ÿ�¬ÿ�]êšf©¦I&Û)Òk¸#\ÏoœH£ B’Ã?-`Éñ}?ÄÃÃ÷1Ø ’<Ö{íD[²#Fd(Œ®Õÿ�W×vFí¸æ€:ïíËßúõ_ûùkÿ�Ǩþܽÿ�¡oUÿ�¿–¿üz¹];â,—Í£–Ó¬Ñ5(­åŒ%ùy™¶‹åí2 ªÉÎfø¢Éý¥ š~Ý„ÑG,Oªm é홉ò²•ÏvU<qÏûr÷þ…½WþþZÿ�ñê?·/è[Õïå¯ÿ�¤ðö¯ý»¡Ûê&‡Í.6¬žb®Wr¶å;r§ ƒŠÓ  ßíËßúõ_ûùkÿ�Ǫm7X7÷·6’i÷vsAr•¸1ÊåÀ £·xÛ®;UÊ̲ÿ�‘¿Sÿ�¯ Oýq@TQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Âéž(ŽÂ+Ëc£ës˜õ Áæ[éï$mþ“!ᇻªÈð×ü‚æÿ�°…ïþ”Ë@_ð™Åÿ�@ÿ�à®Oð£þ8¿èâ?üÉþÖQ@Ÿü&qÐÄø+“ü+"{ÝëUþÒ›Ã^){1%*mn|¢éŒbݰ°Ú0JçZ¾2›VѼ5®êðëæÙmí¦žÝL|Œ<´ËŸ[¯'ÌÇaYø³ZÑuËÔÔš'·Ž+X¢’æT¶³,ÿ�hc7š™U–9þބ�Ùÿ�„Î/ú�xÿ�r…QÕuÍ;ZµKkïøâIReØÏÞ‡rœ¡‚ú€{U+ïˆW+ªèÒýŸì6 Á4Ê'¸i,šdŒFS?b 2à® Yð×ÄKÝiÖï§XX›õrƒûU'”à1Ê$hAÀ^wÁã¯Kþ8¿èâ?üÉþÂgý�<Gÿ�‚¹?·´Ë[ûXJßê?m}±€þJÇÈE p¿Þ`Í휕z€9?øLâÿ� ˆÿ�ðW'øSü;ª®­âZU²¾µ eh»o-Ú?=ÁȨ÷®¦²-¿äqÔ¿ìiÿ�£.(^Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹]ÄNŸksmw}3¥ýád|‚3q!˜ þ5ÕQ@ßð–èô·üÍð–èô·üÍC«xÛÃZ$¾Mö±l·à[ÄÆY‰ÿ�®i–ý+8ø»[Ô¸Ð|!"—:£­œ]§2ÿ�¯ÿ� nÿ�AKÌÑÿ� nÿ�AKÌÕ½'ûSû=?¶E˜½ÉÜ,ËÀíÜš5«Ù4ÝQ¿‰U¤¶¶’dWèJ© n(§ü%ºý-ÿ�3Gü%ºý-ÿ�3Vô[Ù5-N¿•Ud¹¶ŽgTè ($nhÕ¿µ?³ßûY›Ü‚𰌌ó¼ô  Ÿð–èô·üÍð–èô·üÍcÂm¨i_/‰ü1¨X ÆëË!öË©(7¨ú¯ÿ�_Gñâ|Ý#Sµ¼P2D2eúŽ£ñ á-Ð?è)oùš¯¤jšŸŠµIì§Y¢Vˆ]zg}ÁÇê?:èh Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)“J°Bò¸r¨¥ˆD.ØŠ$ûš�}â^-ø—ãéõ(¢ð¿‚õ»{eVy®4ÉL—�•ÆÜ"žž¾â»µÐ¼_¬ }[Å §Âàm£ZˆØ ÏYw6~Š?Àª½Ô,´Ûsq}wokë$òQø“Šæâ6rÆ=ÛQ×dĶ՞0}åm©ÿ�Tö_<3ip.¦Óÿ�´/ÏÚµ)êLúæBqø]:ª¢*"…U� �(ûOµqˆl4­ã}Ô¦òqî6 ?V4Â5ŸøƒWÖ2rоÍníœ[sø“]›¤ø{FÐbò´.ÒÉqƒäBªOÔŽOãZTQ@rŸ5ë_xT¹»ŽgŽh^ÔyJ V‘J©9#Œ‘]]`xßDÿ�„Á:Æ’t—Ì"ÿ�–ƒæOüx �§ðã]µñ4»›4™c†¶&U –B±ž2å]]`x'Cÿ�„oÁ:>’Wl–öÊ%ôÐüÏÿ�[ô�W?¬x'úìßh½Òâc%nàÌ3©õó ú×AE�q¿ðŽø³G9ÐüOöèAâÓ\Íü¦L8üC‰ÿ� ¶¡¥|¾'ðÆ¡bƒ¯,‡Û-þ¤ Þ£ê¿ý~ÊŠ�ÌÑüE£x‚7HÔío ‘ ™~£¨ükN¹ýcÁ>×fûEî—»+waO¯˜˜oÖ¹ÍJñ—…ô;Ë¿ ë÷z·–Ÿ»°Ô-Å̹<e$]¬HÎpÛº~`‡EyW€¼wââ!Òügáma%û©©Ea#+×EUãýáǨšõZ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�++ÄSÜ[é­nÞWº¶‡ÍERʯ:#`0#8cÔÕ¬È&/úÿ�²ÿ�Ò˜¨?ì­Cþ†]SþýÚÿ�ñš?²µúuOû÷kÿ�ÆkVŠ�ç5m%ìÒ÷ÅZ¬Fòu¶€ýž #tRD ã¾)&”ÛÚÇs/Šuu†K•´Vû,ëZO-AýÇ�¹qã‘Íhx‡D‡Ä:$úlÒ<%ö¼S ù¡‘HdqîXšï—Uº¶º¶º·†âÑm…³ÜÚ™ü††_0ùÔÿ�u¹äÈÅ�jËis°E/Šu$yÜǘírì±÷?ÝV?…Ký•¨Ð˪ß»_þ3\ͷĶ׭uau`dŠæ+—tíªî«2»Ÿ†o9NyÁ‰8­ øTøQ¿»íöÔÍŽ _%LªÎL˜Üymà÷G4û+Pÿ�¡—Tÿ�¿v¿üfì­Cþ†]SþýÚÿ�ñšÕ¢€(øv{‹ µÕÃÜJ—W0ù®ª•'t\…�g :ZµáŸùËÿ�_÷¿úS-lP\Ο¥©EqrÚõü?é—1,qEoµU&tP7DOEI®š°¼;ÿ� Ùÿ�ì!{ÿ�¥2Ðÿ�ejô2êŸ÷î×ÿ�ŒÒ6™~ˆÌ|Iªà œClOä!浨 cKº]fÞÚãOñf­4W(òDßeAUm­œÀ0A8ÁÁ«|sj–Ÿj´ñF¬ñy’E–··B£�FXtíUO‚-OÕ¬¡¸u‡P»[Ÿ-×tq€ë#G·#(Ì#Œ‡"²íþÉ�´_·Ø*ØÞ›«#šQ Sqç´`ù‡å9)Æ>SÐÐGoisw–ßÅ:”ˆã,±Ú‘¹X«õ=˜øT¿ÙZ‡ý º§ýûµÿ�ã5Ì§Ã„Šæ9bº°‹ìúƒ_[4zvÙ#Ýqç2È+ˆò�ùF1Ú»º�ÊþÊÔ?èeÕ?ïݯÿ�¨bû}ˆ¬-¤Õîï ¸Šbé<pŒÛ‚ F§¹ï[u“wÿ�#^ÿ�\n’PíQ@zÔ—¬i–VÚ„öqÌ“< FÌÛBà|êùíGöV¡ÿ�C.©ÿ�~íøÍŸü:7ýr¹þIZ´•ý•¨Ð˪ß»_þ3Y“Ý¥¶¥>Ÿ7‹5u»‚ÛíoÙa?ºÎ7 ÃsÆMuªxvÛSÖ´½Qäxç°gûŸòÕ}Æöܨßðz�€¤Ë©Å¦ŸjÂêXáÛۀȬªÇw‘Œ‚ëÆsÈâ¥kK•»ŽÕ¼S© ‰¤Hü»\²©PÇýO@Y1X7?KêóßÛÞX¯Ú–æ;¯?O2¼ñÍ"Iµ›ÌÙ°*äp¼c½3þÂ,61­Õƒ‹XîàÄÚvñäÏ*ÈFñ·`Qµ€:oì­Cþ†]SþýÚÿ�ñš?²µúuOû÷kÿ�Æi<9¢ÿ�Â?¢¦š&YcŽY^=±ì#8@2p6ÑìkP§g©Ùi7—Qø“R2CÈ¡¢¶Á!Iýϵlé]h¶6ée·Ý±Œ±PMU×ÿ�ä\Ôÿ�ëÒ_ý�ÔÚü‹z_ýzEÿ�  �Ñ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬?,Ï¡¢ÛÈ‘Ìo¬Â<ˆ]AûLX$2=²+r²<Kÿ� ¸ì!eÿ�¥1P_bñ'ýôŸüÉÿ�ÉÏöÕCuâ�û¶ùº{®íªXã7áT“ì í]Csgmx.`ŽeÀuR§óV#èM�rÐêóÜ^ÉeŒ|1%Ü@™ Kbd@99Qs‘Žõ=Ö¥¨ˆÍ—Š<=r%C$f &}ê \r2Ï­.• \ÛøƒW¿½³±)%àºÓÚ;‡fŒý 9R€)*‡Oß#¶Nv¡k^¸Önl¬¬n­o]Ge쌗$ñ¡)ÎFq‚O�@É5+¸uUÒåñw†ÓQb�´kB%9ä|ŸiÏ?J’JáKCâÈ )dÇç^Yx¸ûÃ#¨Å=´›Ÿ]ê7–¶Ré²[Z¤YüÅ– $‘Xdziù¤àîã`=ø~¤ßÚøÇU¾kk(ô»¸£)åÎÍ!˜d4Œ…‚˱Nÿ�ª^»Ž�Ôë7ɾÓÄ:Âa[tZ{¸Ã(e<\t ‚=A§û‰?è/¤ÿ�à®OþH­[k+[%+ko*B‚#P£ ¡@ãÐ�°©èÂk2hn·$“ ëÀïR~Ó/!I8Ù5¹Yÿ�\ßö½ÿ�Ò™k^€ ä´[]rK[§´Ô´è :…æÄ–Áäaþ“'V(?®¶²<5ÿ� ¹¿ì!{ÿ�¥2Ð_bñ'ýôŸüÉÿ�ÉÏöÕCuâ�û¶ùº{®íªXã7áT“ì í]Csgmx.`ŽeÀuR§óV#èM�ròj·çÍñ‡†S³ºÔŒm 7ü¼ö, ú=iͨÞ%…½ûø·ÃkgpÁ ¸6„G+à+}§ðx•bóKÕÅ–—öÖziÓíln E{†Wy$hœ¢2� É?6qÆ'ÃívÖËD¶GÓ§ŽÂ;#åIpè±K‘4̘Œîßä&3Œsß û}jKŹkox^uµRó˜­Ë”u-‹Ÿ”{šÒŠ~pÆsF+bšl‡ 8¸êj­á¿ Ékkv5«¸’{½Í2˜n&iYt\ �ƒ´jé"‚(–Õ3;Ë’~¤š�Çû‰?è/¤ÿ�à®OþHª?gÕañ~oﬧC Î's#g·jê«ÿ�þF½þ¸Üÿ�(èfŠ( o^Šú_è«asožUÎZxQŒGØ:ÿ�:±ö/Ð_Iÿ�Á\Ÿü‘O¿ÿ�‘¯Fÿ�®7?Ê:Ù rçûjÈ!ºñ‡�}Û|Ý=×vÕ,q›ŽpªIööªI¬Ë%ÜÖ±øÏÂïs ³K Ûñ…bÃí9�NzWUsgmx.`ŽeÀuR§óV#èMsšvyo­ëW÷6:{ù—jÓJܹ(ßgH0˳ •NHÝÑÎ9�®u©F˜53ã? <¿–.¾Ì|¢ÿ�ÝßöœgÛ4–úÜ—~wÙ¼iái¼Œ|»}Þ^Nì\ñ’@繬ø´'„´­Ùè;4Õ±Ãý¾bfky#|ÿ�¨ùCñŒ7ÞëÆ·‡´wO`—vºLÛáµ¶¸’U2¥6—Œ`¹qÈ#ä�]Jí‹ñw†ÉRÀhx+¿wü¼öòäϦÆô5}m<Fêu!”Œ‚4É#ÿ�*èSÁ£Ëo®YØ5ÃÞ]\ ™”,ÒHøÜȧ LëÓ¦}H®ˆ�ª@� �;P+®YøˆxR/«il‚Ö]ÁtÙ#aè|óŠÙðöáá+q¾ÇHìºÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@£EPEPEPEPEPEPEPEPEPEPEPEPEPLšd·‚I¤Ý²5.ÛT±Àà ’}‡4údÂV‚E…Õ%*B;®à­Ž ÙZ�ÈÓ|Y¢êòX%…ãNoà{‹r°IµãRJápYF#ŽkBçQµ³»²µÙe½‘¢€ylC2£9�íV<‘œW>[®Ÿc ßþþÛMŽÂB`Ì7Üñnçp·TaŸ™N3À¦iŸ N•ªØêPj†æÚøÝk•£xÚÞ#æ~î •^v>÷J�ïÄh]ƒNÕ,!ÍEc{o©iö×Ö’y¶×1,ÐÈ‘€*pyäÖ¹Ÿ ø._ YjÉa¨D÷wÓ™…ÌðÈü’H2)— yÆWfp2+gÃzTÚ†´Ý&{¤º{+t·$F êƒjü¥›hç““Ç@©Y%ÿ�\?ö²ÿ�Ò˜«^²<Kÿ� ¸ì!eÿ�¥1P½Eqs ¬aæ}¡˜"Ž¥˜ð�ÍKYºµƒÝϦ\Äß¼±»û@Bp$7‡×l„ujöúÛO…%º“ËåŽm¤üò8DtË0éÍEw«ZY^ZÚJfk‹“ˆÒ(L ¹¶‚y3`{Ön±áɯtÿ�³i÷æÙ›Q†þG»ó.1ȲPÒ ŠY€v�ÎCõm#QÕÑ´-¢ŽÞe¸!möd}ÈyŸ*ðq–†W4sX×4ý×íZŒ²Eñ:BòÙ¶ƒµGv8¹£QÖìt©­â»i•®cŒ¥¼Ž›˜…PΪUI$¸Œž•ZþËYÔ4khïN·ºd_¶ mxd8ù•@‘\ú“‘Á¤Ô´‹íEì ·Ð¬v³­ÃˆmÊË##nUW/… ¬;?w4­ñ\À“A"ÉŒ«)àÔ•›¡éí¦i¿g’@ò´óO&Ó­,­)Qì7à{ZT‘á¯ùÍÿ�a ßý)–µë#Ã_ò ›þ¿úS-kÐYÿ�\ßö½ÿ�Ò™k^²<5ÿ� ¹¿ì!{ÿ�¥2нQ@·>*Òm/g²–K£s fSvS¹u))µ˜ ¹ÆyÅO?ˆ4Ø4ÛKÿ�6I`¼ Ößg‚IžP˸ˆ¥±ŽsŽ;â©_húÍÝå܃QÒü‰b1D“i¯#F„À·œg¢ŽvõÛŠe÷‡/®¼?‡ª‹h¶ñÛÉ4Öæ[†U\¼!À!¶œp{�kA«Z\êséð™žxeaùjxù|Ìl-ÈùAϵ]¬˜t›‘âI5k‹È oÀc³+#;Ømàá@ËqÍkPX×ÿ�ò5èßõÆçùG[5ÿ�#^ÿ�\n”t³EP5ÿ�üz7ýq¹þQÖÍc_ÿ�ÈףןålÐUî/­­n- šM’]Èb€m'{„g##ò£}*ÅckzMö£¤]Z^ÛÛ:áî rÛ|Ö1<@d:í�Hþ¼ã¦@,ë柠Úý«Q–H þ'H^@ƒ»6Ðv¨îÇ�w5.¡¨Á¦[}¢ánY7Ž´“¹'ýˆÕ›ôª7öZΡ£[@·zu½Ó"ý°KhóÃ!Ç̪ˆBçÔœŽ Y6úÍž¡os<1™’ÞXP†XÊ–ýàÛºcjÒê+ë8.à,až5’2ÈP•##*ÀÁèFjjj"EÇ…EU@À�v§Pv¿ÿ�"Þ©ÿ�^’ÿ�èþE½/þ½"ÿ�Ðÿ�ü‹z§ýzKÿ� 4ùô¿úô‹ÿ�@£EPEPEPEPEPEPEPEPEPEPEPEPEPP^"Écpmö”hØ4~ô÷~b=9 sSÔsù¦ÞO!Ñ%Úv4ŠYCc‚@##=²(Ë´Ïø‹G³Ð®m!âËEÅ ‰§·™žßÍXÙ‰C•IŠdà3NÒ�¹k§xÆhšŽ±ÍÊYjNc~È<»g‚HÄ’A2‚ë½PìÀùA Réõ7:+jvp¯Û4¥½’+hX´Ï#Àˆ™œ( ×HoºPäàƒZv¾=:®¿¦Yiö l÷óX_Ksb)’ $1©Y>ø(2B²N4�í?#Zÿ�„¦Ùµ7i[ìö1Å+¦OÈ­æaпë6ž ƒZþ±};Ãvöc-ŽÆ‹i Œ3³`fP ’8PµWÑ|Y‰ôûùô»{»Qnæ8®/íJÅ1É“æ× Ž úâ­øWT»Ö<? åòF—^lÑH#ŒÆ3¯Ý%ˆ?/#'œà‘Í�lÖG‰äý„,¿ô¦*׬ÿ�È.ûYéLT¯X“E||KrÊèˆÚz­‹È…Ò9·IæPFr <d°G5·Yú¦¢ÖSiÖñ¨3_Ý}‡ ˆÞF'þcß‘a«mâÝVîçN–X›M´…naò‘.&¦g؆BËŸ5@ÝýÓÏ�˜´ˆ¥Ò5=Nìh3[[^ÜÁ€±=Ä’`ò»#c”ݸ�^Õµ-N]:â]bûU¼ÍŠþÒdºãäBvðsărñßœUñWŒì¼;=…§ÚìEåÍÕ²43΄2Lœ.rp7ôN}°%ü6Ö¯N•rmÂÖ(fY"ÄÒFÓ3�7äJ£,Ý=±ž"ãÀ:¶›4IfšŒXUbH!I%Ú²æâXås®Lˆâ¤à¶U¯Dñ&­&‡¡M}¹¸˜<QE@ËÉ"ƹÉ�¸'‘Àê:Ö\:Æ©©Ùé—šmÌE=Á¶š Ë"ÓIe’P©´FøáÁÇSÜ]ÖúÖûH„ÅäE"½d2*Ì<¯-C¼@s×Iê+¥ª6£ý«§} ¦ÇY¦·u7Å#FØö܇Õ~€2<5ÿ� ¹¿ì!{ÿ�¥2Ö½dxkþAsØB÷ÿ�Je­z�+#Ã_ò ›þ¿úS-kÖG†¿ä7ý„/ô¦Z�×¢Š(šñ6’úž¥£¼RÏ=µÜS}²O,,® Œî@8Ú0H¾\Šš}ÃQ×íõ;ÙfXå\KfcÇ–«¸dí(ÎqŸNù[Fñî¡â9læŽÜZIö¿$"°’#o:Â|ÂI~íË€0~µÊÍñÄ) N¶6Ïnúzj~lVSJ#)já•ìlÈ~QÆW‘ïÃÚ5®‹gq¦Ÿm`³Ü¼¦ h–4…S…ã%UI÷ÍkÖ=­Æ°ÚûG8´:kÛ—#e– 2»Q˜±•,x ·®A­Š�+ÿ�þF½þ¸Üÿ�(ëf±¯ÿ�äkÑ¿ëÏòŽ€6h¢Š�Æ¿ÿ�‘¯Fÿ�®7?Ê:Ù¬kÿ�ùôoúãsü£­š�+™ñ=ŒwZŽ™1ðýÕü–Ó$ÉynЫ[”`ØI€oâÚW çŒtÕ“«M«ÃwbtãfдȷÍhË ì¬Ú¹<ƒžœq ºÆ•câ­ÔÝèñOçeŽú/n¯ç ®=9ȬßZ\x‡FkK}âäÚß…hÝa!€ŒâDI[Ë•ràaˆþ#Ã(©¼kâ-G@[V°k 9f›í(ÎB&Ï›”ª ß3üÛr>VÏÚ»ßG¥Ï&œð¥Ê)e3De^9ÆÐéŸûèPhvòÚhuµÄB¢µŠ9"Y (<¶=jýPÑ/›TÐ4íAÌe®­bœ˜·l%”7˸ŽxÈÍ_  íþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  5ÿ�ùõOúô—ÿ�@4hò-éõéþ€(FŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ™,QÜBðÍIŠUÑÔe<Aê)ôP#£éd¶GN´6‰…`0/–#8ÊÆ6ü£ŽœJ„xsBÜNÙ•à?eOÝ2ýÒ¼|¤vÇJÓ¨&Žå®mÞ+„Ž-çFcÜd`�Ùùppzô  ÃAÑŽݸÒl|‹ÆßsÙÓlíêãcîjäCkp[Å0Æ¡R8Ô*¨�€*J(�¬ÿ�È.ûYéLU¯Y%ÿ�\?ö²ÿ�Ò˜¨^ ¹´†íe\˜ÜHŒ:£„žA#¡©è  :–¥ë1$Z®›g}m¹ê”)õÁ©þÅj-ºÛİüß»üÙÏ9ÉÏÔÔôP£i¿Ù°iÏe¶D!Ž)HmÙ›?ÃǸ©¡°´¶·† kh`Ž�VŠ5QÆ>QŒ –!(:;äòˆTc<pIíŽÿ�—J}�Ckk •²[Û¦ÈÓ ëÔä’{’I$÷&¦¢Š�Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–µè�¬ È.oû^ÿ�éLµ¯Yÿ�\ßö½ÿ�Ò™h^Š(  k¤é«u5Òéö‚âfW–Q ï‘—î–8É#±=)°èÚ]»1ƒN´‹t¦vÙ ®ézï8·{­^¦(—ÎrΆ"ÅCÎrsÏnÃý€*C¢éVúœºœe”Z„À¬·I¬®8à¸=SØUê( ±¯ÿ�äkÑ¿ëÏò޶kÿ�þF½þ¸Üÿ�(èfŠ(  kÿ�ùôoúãsü£­šÆ¿ÿ�‘¯Fÿ�®7?Ê:Ù ³õ HÕ¦ŠmGJ²»šõR\[¤”°$séZPcø{FšÊÊÎãL´¹‚ÅUm–â%—ÊÚ�Kƒ€9ëN}J–+¨fÓí§Šî´MчG“ 7m<g ¿–zÕéD¤/”è§p-½ esÈŒwíèiô�€Pª��`Ú–Š(;_ÿ�‘oTÿ�¯IôFÿ�"Þ—ÿ�^‘èþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  �Ñ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¨.¦šˆÃj÷åTp®«±IåÎHÈp9ô©é¯"G…Ž2OAõ QE�VG‰äý„,¿ô¦*׬ÿ�È.ûYéLT¯EPEP"v’=ÍÄrF×#<g‚G=Ôú( Š(  È.oû^ÿ�éLµ¯Yÿ�\ßö½ÿ�Ò™k^€ Èð×ü‚æÿ�°…ïþ”ËZõ‘á¯ùÍÿ�a ßý)–€5袊�)Šìft1:ª€D„Œ6sÀç<c¸xÍ>Š�(¢Š�+ÿ�þF½þ¸Üÿ�(ëf±¯ÿ�äkÑ¿ëÏòŽ€6h¢Š�Æ¿ÿ�‘¯Fÿ�®7?Ê:Ù¬kÿ�ùôoúãsü£­š�(¢Š�d®Ñ…+É– BÀ'©É¾¾€Ó袀 (¢€3µÿ�ùõOúô—ÿ�@4hò-éõéþ€(×ÿ�ä[Õ?ëÒ_ý�Ñ È·¥ÿ�פ_ú�  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ´ñŽ…|m…µäŽ×7oeýšPDÈ d`W(@V?6Ê}+v¸—øv—°ý£S‘oRkÙZæÖ3ÿ�´ øÚXò†áÊœñÏ÷�u—ú®™RÝ»"K<vêÂ6ožF€àÄ ž9Ô—Ö÷ Ÿh‚9„n%@èk¯!‡¸ìzןÿ�¬)+ÝE}§Gv'·¸·Û¦£E"¿îcüöüÿ�7Íœñ[¾ðhð”¢Áx³Í};MçH’$ä‚àÈCy* ;ÐŒ¾)Ñá¶Šáî˜E,²Â‚BCFå$,åUXY°¯"˜<]¢YnêFHÜG…¶•™ÉÉ.çRˆe¤çƒXCÀw’ékw¬[É$¦ú)¤ŽÉ5½Ü‚I)”á·•òp8Úz™m| 5’[IoªF/,lekRV(aŽhÑ]wüí¶âL¶W'rØC4w0G<.²E"‡GSÊFA—â_ùÃÿ�a /ý)Š®iZt:Fe¦[–0ÙÛÇon»QBŒþ©ø—þApÿ�ØBËÿ�Jb  zŠ[˜a’(Ýñ$Ͷ5êXã'ð½KY·Z|’kÚ~§gìðÍnñ“ü2Ûp÷%Fj�tºæŸ³“,²-åÆ| a}ŽB–*$ÆÍÛA;sœ â¦:¢ê‰¦×í¯ N°÷1©U-ùºÆ³bÑ/moí>Í iÖÊÛ!»Žk›€Í»-ç¼Ä÷Ç*p¹�ŒÕð¶¡oªÍ®ÛëS\ê¢ÚX`†ê(ŲùŒ¬À„Pûr‰Œ¹`«PåÝÝ–‡§´òFñÛ¡$¥µ»ÈrI$„I=ÉÀõ&¢ŸÄlm¥ÿ�$Ö÷ZÛìð<Í(eÜ ª)b1ÎqÇzMSK¹¹g¸Óï~ËzÑwLe–›²r²"îí¿ïÆqTµ-QÔt5Ò´,­íÚ%Šc ‰ �&/Þb3Ói!¶ã¹æ€7"¸Ši%"m®½×¸üÅKY¶º|‰¯êœq 6é9ùc26ãîL¤}}•�dxkþAsØB÷ÿ�Je­zÈð×ü‚æÿ�°…ïþ”ËZô�VG†¿ä7ý„/ô¦Z׬ È.oû^ÿ�éL´¯EPkûø4ÛGº¸ר‚™ÿ�@Xþ³®üA¢iÚtZÜ²íµ»‰$Q[»æ<eYÊ©*€6w6�ÏlÔ×úCÍñ³¸Ïxdû_™qP1…ˆÈª™ÝÆO'5RmT]ÛK´Õ-JB©I}fó™£T ‡Ä©–$OCœc®@4,5«JîêÖÙåóívù©,D@lía½Få;[ 25~²t­&æËRÔ/î¯ynö.Èa1F7`í,Ùs» ÙÚ¼ Vµ�ÿ�#^ÿ�\n”u³X×ÿ�ò5èßõÆçùG@4QE�c_ÿ�ÈףןålÖ5ÿ�üz7ýq¹þQÖÍ�Bÿ�Z±Ó.m`»yQ®dX£aŒ›˜…PΪU2Hq=*ýcëzMÞ«-™†ö+x­¥Yñä‘e÷€ªq†9RFFhuÝsGÑÄV|ÌȻʹFA2ªvª’¤±ÀÕ­OV³ÑíÒ{בVIq¬P¼®ìA8T@Xœx=« ÄÔ¼Ia¦‰µ+{;¨#&}–ÆU¿<D²•e*v“‘†9SWµ-ã[µš æLW^mŒð´‘¼ &®ü³Ž§‘É­kuí¤7VÒ¬°L‚HäSÊFA5TÓ4ë}#KµÓ­C-¢X£Ürp9=Í[  íþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  5ÿ�ùõOúô—ÿ�@4hò-éõéþ€(FŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ²<Kÿ� ¸ì!eÿ�¥1V½dx—þApÿ�ØBËÿ�Jb  z(¢€ (¢€ (¢€ (¢€2<5ÿ� ¹¿ì!{ÿ�¥2Ö½dxkþAsØB÷ÿ�Je­z�+#Ã_ò ›þ¿úS-kÖG†¿ä7ý„/ô¦Z�×¢Š(�¢Š(�¢Š(�¬kÿ�ùôoúãsü£­šÆ¿ÿ�‘¯Fÿ�®7?Ê:�Ù¢Š(ÿ�þF½þ¸Üÿ�(ëf±¯ÿ�äkÑ¿ëÏò޶h�¢Š(�¢Š(�¢Š(;_ÿ�‘oTÿ�¯IôFÿ�"Þ—ÿ�^‘èþE½Sþ½%ÿ�Ð ü‹z_ýzEÿ�  �Ñ¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¬¯Cq>’¢ÖÝî%ŽêÚo)C2¤èí‚Ä áOR+VŠ�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÈþÙ¾ÿ�¡kUÿ�¿–¿üzí›ïúµ_ûùkÿ�Ç«^Š�ÊðôiD][½¼²]\Íå;)eWÝrT‘œ0èMjÑE�Ïé2ßéë5œº-ëys $ƒaW™ÝO2èõtPO¶Oÿ�@ë¯ûê/þ.¶Oÿ�@ë¯ûê/þ.­Ñ@>Ù?ý®¿ï¨¿øº>Ù?ý®¿ï¨¿øº·E�Tûdÿ�ôºÿ�¾¢ÿ�âèûdÿ�ôºÿ�¾¢ÿ�âêÝSí“ÿ�Ð:ëþú‹ÿ�‹¬´kíCÄ62ivp[E0w¸’’Ûp�Iö5¿E�QE�bk y³¦_[ióÞG L’,eÜçez½õÃÆ¬ÚUädŽUšÉÈ«´PO¶Oÿ�@ë¯ûê/þ.¶Oÿ�@ë¯ûê/þ.­Ñ@>Ù?ý®¿ï¨¿øº>Ù?ý®¿ï¨¿øº·E�Tûdÿ�ôºÿ�¾¢ÿ�âèûdÿ�ôºÿ�¾¢ÿ�âêÝ…­Ý_Ï¥^YÛèWó<öï²É�PJ3ºPJÑÒ-ä´Ñlm¦–xãppB€jå�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�VF­«]Z_ZiÚu”Ww÷1Ë2¤ó˜cXã(– Ç9‘�NsØ Ö½PÔôk-]bûZK¾Z9`žHdLõÃÆÊÀã8=è=|[§@æßSY^Ek„*ïL#óY<Ý¡ öç;yÆ*?øN¼>‘®n‘Ò7’E’Âá j›7Ê|€ ØÂº·Cš±'„49nylŒŒèQÑæ‘‘³”X¡m¥Ì!r7cŒÔ1ø#@ŽvœÚÏ$°Èf½š_1$UWÎü„A–Ï£øF�*ZøêÒ{ûÙ-¦† mN== A9i7¬L¬SÊÞ¤ù¸�® �nÃS§¼7&’5U½˜ÙyžY—ìsaNÅ“,6eWc+n8\sSIàÝUºWŽôýªxnf?Ú�´±�#|ïà«Ó®ÕÎvŒU‡á߆mífµŽÎçìóÅäÉj ŒžXL˜"ªç®Ô�—ü;¦^^[j—ObÖ÷«d­<.®cGʽ0ã'·£):Pø£JŸH“UY.VÍS|–s!rĬŸ$€6ƒ’p*¬~ðæ­sý¯nZy4\Û_Ë1DpUñ÷P#÷¶á³Š·†4˜´Û=`˜ÛÜÌ'—}̬æA´†[r‘±q‚1´cLxº ­sIÓ´Ûw¸[ø§™æ‘%ˆD‘2£ ÏΰU¶àŒ Pi[üA²›V²¶’Öx-o$¹·Žyc0ž+„ƒaMœ+[�ü§¶m<3¥XÞZ]ÛÃ2Mi‘DMÔ¤m‘·É¸Öl1f’ϨÝx÷“4³[]ï2<£f¡pYåY˜¨Y�\Ȫüc �^ÐüS¢x‘ïGÔ#»k)|«ŠÃcsêG‘‘ÅkÖ~•¢Øh‘KŸ‘E#™ fgtRI'b±!I8\zV…�‘â=^ëCÑï58l£¹‚ÎÒ{™CÎc?»]ÁGÊÙÎ<cë^¨ë=–»¦K§j +ÚÌ6È‘Îño ’Œ Fp{Ð-ç´-"öm;X½ŽÛR‚¹–Ú’r°©'~U?¸7ŒžÃ4õñ÷‡ ‰þÕt±ÛÃ,ò—°¸\$NBNv1€ÉNOwàí÷í>|'íVÂÖãmìÉçF�}®7dn98$g“YÚ‡ÃÍ.m*þÛN’âÖêîÞæÜO=Ô÷+ÜÌDm& có½ƒ@·Ä_ %ݽ›êl—wÑÇlö³,¥€iB› ŒìŒg5bèS­ƒ­ÅÈP(-d{)Ñ$ß·aÜP�z€I�“޼UX<+áÍ:òÌM)‹W¸WU•u £šé¶‚ýd.à[hÆjä~ Ðã´³µ[iü‹5‰mÐÝÌDb7ß2ÿ�ÂÀc>€t�P[?hw2G­wm4·[Æ“Y̸ùݳn ²¼�àæ‹Ÿˆ~³‚)îõ-¢–soOi4a¤ ÈÊ7 û¬¤îñœdfk¿x~ø(žÖãåž[•1ÞÏY$‘er ¸À2"¾€ M±ðφîl­¤±/<0ÝKs Ä:„®D¬ÄK‰ç·n\àœäu  -C^Ó´»ëK;ɤŽ[· ò±`  UI$¸Œ’)4=n zÆ[»x§‰#¹šØ¬Ñ2ÑÈÈN|¿‡CÈ †¦ê·)qy ’I—È ßÌCµX †�ç†x«m®™ñÚ#¢M<—­#8ó$bÎFâv‚Äœ “Ç4nŠ(  𦡑¤ÞêW;¼‹Hy6Œ¨¥Ž®e^iéækúlvQÈBÛ‹IžòI‚vlHÃn ¤¡†ç5»,QÏ Å*+ÆêUцCÁzV/ü!ú7ÙE¿—xQ\IBà¼D£Ë}û£fR Å�V_ˆu»d¿•’Òs+ 9ˆ�„¸;0À,±±+Ÿ•ÁèsO»ñ߆´ý6ÏP¼Ô޽äío–ŒŠÅYJ•ܸ`AÜ;ÔðãÂîdÿ�B¹U’7‰Ò=BáÆÈˆÉ´HÒ‘Æ»zaÐU¸¼¡Ã) Ãu%Üoöéˤ’}ò~ì1É+¤’HäÐã½Ͳ-õÌww–+ ÙOîž@Êv|êBÎzôÓ%ñî‹“ö·¹oö|wá3”1º3+î)ò¶[nT@éVãðn‰ ¬6ÑEw0MçÀ©:ùµ“÷x‘v» «ÏJY| Í¦G§=ú4VGO@&8·;sðÛ¶ ué‘К�„øßG‡P½³»{‹gµ»6›å¶“dŽ!6Ü}ÒxÎN8ê2ísÅ+ ßîm×ìƒM¸¿ûFç%LM•dTf ûÕ%†pùx¥¼ð¥Î¤· Á`’æ;«¸d /,AN¥›A |ÃëVuo i:ä¯&¡ Ò3Ú½›l¹–0ar ®€ùŠ®OR�(ªøÏLš]-mã¿‘5£k†Æd]Â6}ß2 ®¨ã©Î‘ÐÖ5¿…t‹e…b†|Ãyöäv»™œM°¦íʼn#a+´¸ã³@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~+Ó5[HŽÛL”Å8º†Fa{-©òÕÁuß'æPW>lõ¹¼%ã‰`´[½ihÄ+q,¥ÇïcHÕ »�RåL†aó©r£ dúUçGÁ¾']OÓíµV²Ž×T¹¹“캔‚Iá’F‘7ÊÑ1,¥È*A Œ–ñÔx[KÔ4« áÔd2JÓ–F7Ó]˜%¥Æ ;ŽÕGZÝ¢€ (¢€ (¢€ (¢€ ½Šiìn"¶›ÈâeŽ\gc€ØïƒÍpIᧃ¡Ó?¶§}M<Ù>Ù.¯1+)P#ù–5.›²Åtù«Ñ( 1¿ðgŒ/4[{qyö”3¼æùµ›œ´Ÿg–%t_/÷_4»Š)Û…ÇC[Þ2Ñ|I®éV ¥\Ça|‹#NÑêsÂªÍ *€Q?xB–„Æ>b+°¢€8Eðߊç’òKM`7.°êS°|αr€B0ñA–ݸ€F*®“àßÙjºc>ªÐé–wWRµµ¾¥!2¬“´ªÒïˆù§P‚GMÁ²H¯E¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙ�������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/dox/userguide/graphics/Vgroupse5.jpg������������������������������������������0000664�0000000�0000000�00000023677�15030617045�0023512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��ã "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ï]Mcá½RòÙÂOœ²ÆÄ†T$¼Š�Ñ¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  š+û+Wÿ�¡Žãÿ�aÿ�âk.âòK]J}:o]-Ü¿lxÿ�³Ôþç8ÜL7<`dÐ[Eb/W øH®9õµ‹ÿ�‰¥þÊÕÿ�èc¸ÿ�ÀXøš�Ù¢±¿²µúî?ðþ&ì­_þ†;ü‡ÿ�‰  š+û+Wÿ�¡Žãÿ�aÿ�âhþÊÕÿ�èc¸ÿ�ÀXøš�Ù¢²ü?qss¥»›Îš;›ˆL›BîÌèŠԠŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ²<Wÿ�"v¹ÿ�`ùÿ�ô[V½dx¯þDísþÁóÿ�è¶  z(¯>ñ:Ôú‡ŒcÒVÜt˜~ÎæD7;fÉÎ�`<Œ„8<ƒÎpè5ªxrÛTÖ´­Uä’)ôö¹ÿ�-Q‡ÜomÊÿ�÷®OPñ?Š´ýnm:ÏOyìÕÖnGº“ËýôJK8r%[Èû†Ü˜ÈªPøÓÇrËcèŸ:i§y´«ØVmÞd%pƒ<Ðg‡þk$ð^éÚ}š´Oö««¤}ÐÌ#_.rd ‘ö¹ÙÊõOðÎÑâÖmüûd¶Ô-n-‘"² È%`Ê\îÄžVÐ#]«Ç½tz½µæ£¥^Ãgs$7qHÙ<#zíeV9ùÔž HÆA¬KWñ5•¦™u¦é›¥Ô®<Û˜¯y~Íl`DcÔŸ0lžE�sן õ õM>ÊE²–Ýb¾/©Å`‰ö>d™V53nWVóv¸.õ<šõzósÄ>)“ ¨ÙÙ\ù²Ý^Âm¢Ó.cŽqnÅsæ&æH‰l +ƒ›Ÿ‰üY„š~››ד WeÑT‹qÛ+:dÊ@;cL©o›¡ úŠå´][ÄW·)sglLsÄÞ{UŠ&ݸ¬ŽNà ÀT^~÷§S@ÿ�\ßö½ÿ�Ò™k^²<5ÿ� ¹¿ì!{ÿ�¥2Ö½�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�‘â¿ùµÏûÏÿ�¢Úµë#Åò'kŸöŸÿ�Eµ�k×?ˆüFþ »ñM½Î–bÂ{¸íÚC,EbfUgó0X.ÁŽ}+½¬™|/á鿏šm L’[‘‰Ýí#-(Î~bGÍÏ­�cßxúÞÇZ—JmU–ẴfÜ#¢ ÛšP Ë÷öŸ˜q[V:Ë_jVƒM¼„[Ëå™eh‚¸ù¾p¡ËíÊà£9ÈÉ¿„ü7+3Iáý)Ùþñk(Énxÿ�e!éW!Ò4Û{¹nàÓí"¹•üÉ&HU]ßn,IÁ#>„ÐSkñø†}An&‘ãšÍ„M†·Çï7|ßyJ‘žÏÕKÙjO Ûi:¾n.µ¹–Ýbþíä!v�¡XŸÔt®¨Ç•e(¦ERªøäŒ€}ä+:/hP]¥Ü:.Ìr4©2Z uvf A8=ñ@í·Ä‹K›x^-Y¸wÓã¾³[‡KÆ%ò·’“aÎ;Žœñ]–²·¾]alo#F…¦[wUó™FHÀ FX�@Ïqœ€°ø{D·•%‡GÓã‘"òUÒÙXó€Âût¨/¼/¥ê <Õ¼‰6”0ÚßOoI;£ÕX’Ç$‚Oz�Ï>9·z}§ö6®×7ˆ\ÇQÊ-þfEó]¢îe |ÝzãœmhzšëZª¬f%½µŠäFNJ‡PØÏ¶i°øE·kF‡H°ŒÙ‚-J[ ò2rv`|¹É銷kkocmµ¥¼Vöñ©HTz�8á¯ùÍÿ�a ßý)–µë#Ã_ò ›þ¿úS-kÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY+ÿ�‘;\ÿ�°|ÿ�ú-«^¨kvRêZ£a E–æÖXP¹!C23Œñ“@è¬I¯õëx^iôý(eõGUQîLÍEñTÔnž…áØu¡»kÜYß8·O¬¯ ¡ÿ�€– @¢±cºñ3 /¤i*ÝÀÕ$8ÿ�ÉzÚ|Gÿ�@­+ÿ�RñŠ�×¢°ou/YXÜ]ɤiŒDÒ0]JL£<~ãÚ¡Ñõ½{YÑ,5H4}5!½·Žáõ'ܪêˆ:àÐIEd}§Äô Ò¿ðe'ÿ�¤7>$ÇV•Ÿû Éÿ�Æ(bŠàõ/ëºÑMcÂÑÙÚÐ@_<¶ãýâ–O«(õ¹c¬jú¢]ØZh—Vî2²Ã«;©ú�Yð×ü‚æÿ�°…ïþ”ËZõ¡ÙÜØé†+±î'–'.«æJò� �œ8£@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R3*#;°UQ’IÀ€Šå.|{§Ipöz µÖ¿x§k&ž¡¢½cˆ×ó'Ú¢W‹µîu}V=Ñ¿åÓI;¦#ѧaÇüGÖ€6u¯h¾ 5=B(eõp ¼²»å›ðý³â½w+£h«¤Z·KÝcýf=VÝNsþû/Òµô_ èž,úu„ipÿ�ë.d&I¤ÿ�zFËζh“‡ÀV73%׈îî|At§rý¸!û.~ Ÿzê£"cFT`è:Š�(¢Š�Î×ÿ�ä[Õ?ëÒ_ý�ÕÉ<ð×ý‚­ôRÕýþE½Sþ½%ÿ�Ð Pð'ü“Ï Ø*×ÿ�E-�tQE�ËßxJ–íïô§¸Ñ5äÜé¬#ÞÛ¼§ë]EÇKÅþãSÓc×ì—­Ö˜w =Z8cþãÀk_DñV‹âñé÷¨×ÿ�­µçˆÿ�µa‡å[5‘­ø_EñC©XG,Ñÿ�«¸\¤Ñÿ�»"á—¯c@ôWý—âÝ+S\²ý“Um“賨ç¿ßSÛšžÏǺYºKf+ Pn’ˆÕÏû‚QÇ£~ÔÑFr2( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹-kâW…tC¢_êAo1pŠ]aÀÈGB{“ÓŽEtz›ê2Ú¥åÍ™`ÍlTH|\gЃ\F•ðgÁúN­oªGä÷°L· 4÷NO˜§!Ž1žyç­�hÿ�ÂIâs+áÍ­íÏMCYÝ ê°Þ7㲜¾Qe—Å:¥Ö» 9Iû›U>ЧþZºê(+{x- H-¡ŽPa#Bª`8-PEPEPEP%ñ:Æöÿ�áδšuÍŽÔVædh$df ó2ðy ¡†=ë/൥õ·Ã=:]Bîây.s,k4¥ü¨¾ê"äü«µA�p3]û¢ÈŒŽ¡•„TvvXY[ÙÚÆ#··b‰EUò5Q@Q@Q@Ayek¨Z½­í´76î0ÑLÕ¾ ñSÑ@yðUÎûÏ k3é€r,.3qf}‚1ÜŸðô£þýäñf‰5”cƒ¨ØææÔû¶øÇO¼¸÷®ÂŠ�̃Äz-Ѳû>«g0½,-Œs•�¤pH§ZÓ¯,ñ¿Ák?kqêÚn¤š-Â(âÞÍpÎ ;ÉVS»§>»? YxMÓÅ—ˆ5 ]I¢Žò5d‘Çûjxϸ<÷ç’ÐQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QEs·Ö:ÔFæí¼T––ŠZOÞYG¶$äòÄô¹ô  =⣫xznï@¶±³œæªM¾=§tŸ*ü¡�àà¨Üq•Ú{Õ;”9àäW--¶± ìRøÒº¸ a¬¢ ^Xªç$þ•cûÄŸô5å>?ñ  næÞÙ³&+KyPc£;ÌŸ¢/åYž2ñ5߆l´÷°ÒãÔ®ï¯VÎ+w¼K`Y‘Ø|îÏÉ€;’�ç�æÁ¤ø„ø«PQâlH,mK?Ø#äŸíƒùûT¥ï•oXøúÈ-‰ÅÙ6Ðbßþº|ß/ãŠ�ÕÓ5ù/5¹ô‹›k{{Û{xî%‰.¼ÂŠãåts¸8>€!ÏÎ�Ü®j7_¸‚9àñzKŠ$K™YHÈ ƒÈ"­Yéšì‘Kuâ/´À§/Ø‘7ŒtÜG<þ·EPEPEPEÊM%³¥¼Ë Ä|²2o ødf€9oøÊçÂFÝ£°²»I¢ž@’_˜e>L2Lä'–Ù]¨sÃ:‚9Íbj¿fµ¿´±Ó4K{û»Ÿ!54·/$žp*¥—k�`+œŒ—Lgp­éu) &oé‹Y+‚ðÆ<—oº¯™>R{Öy}q§ÌðÞøÃK·–4Y%·EeVmªH2p p=O€:Kg–KXdž&fE2DvÆ#•Ï|3RÖ}®§ å¯u(®bÚ@D¶òÈ9çq÷ãÞ´(�¢Š(�¢Š(�¢Š(�¢Š(Åþ o xbëXKX.bò,|ÈÀ…vrxãœu®r‰j|«ê×vÚ]®­¦ŒÚCjÊÒ ŽO,‡`Ÿ+3�CœüÜtúÕ¾ suo¯¦™i E¥ó-ÑÔc$±f#ʳ$ƒVŠþ <mn—³)x­ÚÎ#¨êUs’µ�Pÿ�„òñ´x/ã³Ñeyµ8ôß%5v8‘Ù@aÆö,£¢©9' wUÊY[êúŒrIcãk{¤ŽC´p¸WTx#Òº;n ³Ž+»¯µN¹Ý7–w?Ý8  QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�…âÍ7M¾Ðo¤Õ®îíl⳸Yä·Ô,Mƒ*ä.q¹[F n×=â˜t ‹uƒW³¶¼º– ÒÚßÌŽ;™¦&XY™Hù>öqÔгà xƒJIõ EîQ$hãX‡—'ÊA2² �ð¥€'€Får­¨ø|kÞ·¸7#W –v—,e„4R1y#gëµdMÄ +‘šê¨"ÛþGKþÁöŸú2â³o_O¶_^ͮޢïŽÒãe¼nÖîUJ$cÊ,䉗 wŒ¿$Ö•·üŽ:—ýƒí?ôeÅakSxrÓX¿Ñ®4û›Û½V!uqkæ1IÎÒ  ì#VÙnÄd¯’:P¿…µRÓÅ–‹w-ÌZ|qÂ^Xä¸S¹”oÈFkv±¼?¡iZL/u¦ØIfoHžVm€d„ ¸ª¹¸^2MlÐEPEPEPEP#ªC¡\.¸—¾,¬Ï 7cíÈmG;bݳrîÉÆâX• ’iºêhM¨O£ãaqä,RAöËxY˜Ø+¸3`�ÝFN¤œÃ®(uÙu~þ¸ž+K²Š?u²?7Ë@#8[—/ËÎá·‹º·Š|7¦êa©j²-Ú FO)Û #}ÕÇÝ*_‚p9 ¦Š§§j–º¢NÖ¦_ÜJa•eâepÆ×�ô`AÆ<UÊ�(¢Š�(¢Š�(¢Š�(¢Š�¡­éðjÚþ›u,‘[ÝÀöò¼XÞÁSŒ‚3ƒèk1iϦÍoâNG»‰î´ùÂ&Q£\3Á$d©;ÈädWC®ÛÚÝh—PÞéƒS¶+—´"3æ`ƒÿ�-^ÎIÅr’Zhm­išCZkVÓ]@g´hîÌqXnˆ-dÂ0Dp©��àš�Þð¬šmÅÝæ—©¾¥ÕÛÊó´ˆß>� �ŒÜäœÚå|uáû½ y<9i-­ ¹*ñÊû›xDÇñ6�M€.FÐávàuT�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�TpZ^ÀöW‘C<S) Êd^ùSÔr*zip&H$pqÇ¿Nôµ­œ1Ãkm D»#H*¢ú�:åSQE�d[Èã©Ø>Óÿ�F\U£¦é“Ý Ãei%ˆMå)uüë»�œä~uVÛþGKþÁöŸú2âµUÂ@<9túШ¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ļð–‰~×&êÍ¥ûMÀ¹˜4òa¤ùYÆì�cùà‚*;ÏxwP»–ê÷KŠæYJ—3³8%B€pI�á9!€+r/+iò¶mÜs³{<þ9ÎiôRÃN·Ób–;s9Yei›Î¸’c¹ºà»°ÀëÇ5nŠ(�¢Š(�¢Š(�¢Š(�¢Š(’˜ü¶lòÛå!ñƒž1Ï®qYðíÔ×3\h–2ÍrXË+À¥Ûp¾n£ †¶Â.H8ÈzñÚ@ÃVèR’5$±¸É=OÔÔ”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŒÁ˜ç�dà!Ö²ôÿ�ézµ”v3É<ÄóFË™eCµ¸ÛAãœö  ¶…n¤ºTicwõU,T~Ûó©j½õ¶¥§[j’y–·1,ðÉ‚»‘€e88#‚:Óí®a¼´†êÚU– ‘dŽE9¤dìA  h¢Š�(¢Š�(¢Š�(¢Š�(¢ªê7£NÓnoM¼×Þ&”Å�Ü’?�Z¢¹kψ%‡Ž·4Œ,ͪ]E™"V›r–òÐ3Ò+î1œÖ–­âD[Ÿí RÒmàk‡€Ì¾o–P™Éü¨^Š£g­iZÌ–Ö:•Ìñ wŠ ÕÙTò �䑃W¨�¢Š(�¢Š(�¢Š(�¢Š(�¢±/<Okc®¾‘-­Ñ¹fò"¡6Ρ‚•B[%Á+Á¨¦Éâý-vM&KØhmdº¸ÏËuFE"O›(x¤d`ŒóÅ�nÑX²x·Ãñ\[DúÅ6Ò]E/ž¾[D„mÙÆ9ÿ�Ç[ÐÖ¥¥Ýµý¬wVw\[Ê7G,.z‚845Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W›iÞ#ÖgÓ´k¨µo·[6©}ݪÄx!%Œ¨Bçʈï@2ñÓ “\|¿¬.#YUíæÔM÷Ùnbó`åXÊdew»È9á¶úW;Æ‘ãˆiúg˜gò݆­û°…íÕdV1d©ûH<úV¯†~$?ˆµó¥*Þ$A2Éq¥‹¾7eÊ.¼goÆN1@ÿ�…vóizåý”ï£Å1Ltì3,n Èp#ùcÐí ¡|::-Þ‰r/lŒºR,"H4ÿ�)æˆDñ•cæ¬ûÉèXg_ÅzÞ·ÿ� a êGí—ºtÓ¥»Û<M"´[šE c!¤ÎϘ„ÈѼ֦°ñYŠ}e“IšDÍqKyÕYŒÛœ8Á,ÄãnÑ‚Ü�v4WŸ]ëz½÷ÄC§hz»ÜZ {;§Š&µ0Ç»‰X’<Ô²í$eÆx"¶¼1ª>£}©Y6±ö×Ñç6såfg >ö£i\ìÀÀܜ〞Š( Š( Š( ŠåuT½“ÇVihÚˆ„éWhU2­³·™–»¾âÉ;Ã<`;Gñ'ôÍ;OÓf°¸¸[A—MܯÅáyó@I%l‚£1‘é@„ßtGÒ›N€ÜZÀÐÝA˜YIÜ]Få`1µBñZv­à[Mq6ꦣ)òÚ2Ù‰IÝnð1â>¥dvôÜx�q\âxÃÆ¯£I*hñÖ‚ÒAçi7‘ÇÈ$ó‘”ny6A”òÐg€MvÀ>¥£Lº‰ž,ª™×Î…ÓåV*¬¤;sžW錃@Xøb+=j=Yõ Û«´ŠXKMå�Ë##…Eïã­Úò»õ;m Á×V¿ð“>¨ÇÌÔbº{Æ ÉlþbÈ$È@Òù`gœ¯CUõí»ýza>"3jè¢3=õµª[,¾ P*Üu rG?)Í�zåSK‚æ×I³·½¸ûMÜP"M>1æ¸P¿“øÕº�(¢Š�(¢Š�(®gÄ¢ìëþR_Ç'Úåóš• ò¼‰8˜/Ƀ'”îzí#“\Üz¯Š|?œ+iwp³_Î×1Ígsy"@nÙY•°6ÄQ‚r=蹿Ñ,u=CN¾¹ˆµÆŸ#IŒ\}GCUSÚ²&ð=¤—éw§¨Z•k‚c‡ÉÚÂyY ¨=r:Ž+Ò|aã9Å»^èÙw$=²iP‘›O85بÄß¹9žx®ŸÂZ¦µ©éÑK®CMæe ´¸Hp|©äŒÎ2�D¾³‰-– KQ‡È7X(b;ÖâešElÆxÞƒÁÆFkcEÑàÐôóeo,²GçK6e*Hi$ip˜â¼¯ìšâÙ¾¡,Þ%ŽÉucÃú„—ÇöÐw´{r‘­¨uàÛ†~ptzÖ§öÿ�Y]@ž*‚Ñ´ËÈË[YÝ YIEÌ[@ÜÎFåÎBðNÊ�ô+ÌžÝnˆBx¶;_í'¶™…Æ ¦X<‰‘—w˜‹ç4c/ÈÛ×h¯JŠ1 )g`Š3±f8îIê}èôQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�fjºÒi’[Û¥ÕõåÀc­¨Mì«Í—ePåÉ$}áT"ñ–œ’Κª¶‹äC®u9cˆ1åE\†#9…^AUí[DMRkk”¼º±¼¶±\Ú”ÞªØÜ¸ue íS‚Ý›qàÕºº¹¹—\ÕL·C Œ<ŽV"ä y]ÌŸ÷±Ç�»‹¼55Ê[Eâ%îÖ4‰oc,Îßu@Ý’OaÞ¤Õµû]"ÂÖŠk«y.£µgµÚþ[;ù`‘HB¹9=:ã'Jð%¾Œ¶QÚkZªÁgå¬Q]ˆT‘8lÄ[qÅkêš Õ¬íí¦¿»E†î+½Ñù`¹ŽA"#eÚ/L”s×  ñv“%Õä3¥·º[U’êhÑ.£Y–wÙYö<ÓcñŽƒ5î§mý§f!Ó㉮nMÌ~R4"„-»†3q÷‡­UÔ¼¤êRÜÉæÝÛ§”Ü@•dH’D;”áH†>˜ ŽÍV¸øi£\[-»Osä¤ð"2C"ªÂdØJ¼lâW°9àõ  «½ZßF¸Ñtøtùä†þO³[µ¨ŒEØË€Ù`BìF#h<)öeñ>‹k<°Þj–VÇÙ‡Ú.cMòlF!rÙÎx8>Ø ˜u/ %úi+oª_ißÙlZßì‹-å˜Á!ãaÂ3€�æ>ƒ¬ü–w_iæ«-ÃÝ‹¹¥ÃºS²4(HŒa‰2ÇZ�ß²¼ƒP±·½µIoqËŽŒŒ2â©êަE¢h¶ZTË,6p$¼¤(£ œ�:�:Uê�(¢Š�ÌÖµgÒâµK{asyy?Ùí¡i<µgØÎw6Ðç§JËÿ�„žþÃQŠ×\ÒãµmqqºÎi.ɼ 6ªÆäÎxÛ‘·Ðæ¶õ-.ÏW´û5ìFHÃR®ÈÈã+) §Ük2_h³•i’úGXØ;êW,Þ[Xn2däªó×å‚€+Añ×Q‡¶žþt-°t»§ùùÊqÞ9^£Ž+K_Ö_GðÁkö‡Ó yš¢w6iíœÏ¸ <áå£[{ÅF ®£pÜåÛ¤ŸÄÄ“ëߊ×Ô4‹=WM¼ÓïRYmoYÓÏuܤ�TAP@äÉõ4ÏiŸ´Ë˜$7í¬®ˆlÌ—pÎË¢‘Po¦DÆ,p5ªž,ÑìX½#í»¼Ðȹ"Uˆƒ•ùH’DB-ŠKï èÚ”±Ëyó<vÂÕ ]Íòǹ_›ïnD;þöUyàUAàÛTÖ´Û„hÆ›§Á"EfÊìí+ÍÆV¿ÌwćrI'�}Ÿ<5¨;%–¤nnZЬò¹óB3•�/?*9Èàí85sDñ6™â [yìeùÑ B<L¬ ¢?9û²¡ô;¸ÍEoá ÖêÒænCÙÈÒÛ©½™’&e*p…öà+0 Œ�Ç�dÓô/[h^`€FF–ð*+~îÎÄ%™‹’3‘ÀQŠ�§gâ‰ÛÂ:–»¨ØÃhl^é^(®e>Cº1,#ÈÝñƒíV—Åzdš¼:lbí§–éíC›9R/1QÝ€‘”+`Fßtš¨¾ðúÙÜYùZƒÛ\,‹,Rj·N¬$;œàÈpX“’9;Žzœß_ iK¨ ï*á®Dëp®÷r¶×UtØlŽ6Žãh^Š( ¹ë­sU—Q½µÑt‹{Ñ`ëÃ\^˜˜QdÚ€FÛ¾WS’TsŠèk*ëúmÞ¥ý éqÉ�;[ÝË›Õÿ�@ÇÚU¥ —XilÙ®î-”¥¼Òǘî$„eÕ ‚Þ^@8<Ö‡ŠtÍNI’ÕuÐÇæ¸“M¸Ž>hÆXä½Hä UCà?2Ä­mtË­2ppæA)o¿Éóî{Õ« é:k³Ú­â»BÐî{ùÜ…fÜq¹Îžw}躎³~š³izFoyu q7Únº";:¦G$“ñŒ u棃Æ:I‚äÝLmç³·yîÓË‘–1í}¸#|¬W8=qVuIº?Ú:‹Inmcb×Q^IjR1óÎŒ¿(äàœu¬¸ü5á í:æê.k-Mš+ù r,Ž7*0|.÷vÜn=s@fñχmíí'žùâŠíci-¥\Dûò¿&$eS»;Ѥøëúó@4›ç½ó‰ȵ•¶rF_ û°H8/€pqP\|;ðÅÒ,Ww2 .B>¡pAß(•ò<Îs"«÷¯ÚxSI²¼†îî¾Ñì=ìÎ]A$ÜçxœÎÞØ  úŒôÍFâáËBédŠEmí<°�T¯Ê Â@$÷ä/wCâý>[Å· 12]›XÊC!Ë aqó£¡à çŒw[ h–ÒêRGfÙÔ³ö óÈêùwáK¿<Žß(±§ é©,—6ñ2]³|²<Ò°[(ÄÇÝ£b€/iú•¦©n'²—͈…`áH2‡G÷XÆ­Õ-+OM/OKeØ[,ò4i±YØ–b'$àdà`dÕÚ�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�(¢Š�ŠàÌ-¥6ñÇ$á–’¹Efǘ@ÏSƒC\]†‰â¸<-£h¯•öi±_: BbeH] ‡Jãr¡yyÉãžæŠ�ã´ êún»m}w0xÒ+¨$jwLÁÚGýàÀ9ò(†3]PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙ�����������������������������������������������������������������hdf4-hdf4.3.1/doxygen/hdf4_footer.html��������������������������������������������������������������0000664�0000000�0000000�00000001246�15030617045�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- start footer part --> <!--BEGIN GENERATE_TREEVIEW--> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> $navpath <li class="footer">$generatedby <a href="http://www.doxygen.org/index.html"> <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li> </ul> </div> <!--END GENERATE_TREEVIEW--> <!--BEGIN !GENERATE_TREEVIEW--> <hr class="footer"/><address class="footer"><small> $generatedby  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/> </a> $doxygenversion </small></address> <!--END !GENERATE_TREEVIEW--> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdf4-hdf4.3.1/doxygen/hdf4_header.html��������������������������������������������������������������0000664�0000000�0000000�00000004731�15030617045�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen $doxygenversion"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <!--BEGIN PROJECT_NAME--><title>$projectname: $title $title $treeview $search $mathjax
Please, help us to better serve our user community by answering the following short survey: https://www.hdfgroup.org/website-survey/
$projectname  $projectnumber
$projectbrief
$projectbrief
$searchbox
hdf4-hdf4.3.1/doxygen/hdf4_navtree_hacks.js000066400000000000000000000174231503061704500205730ustar00rootroot00000000000000 // generate a table of contents in the side-nav based on the h1/h2 tags of the current page. function generate_autotoc() { var headers = $("h1, h2"); if(headers.length > 1) { var toc = $("#side-nav").append(''); toc = $("#nav-toc"); var footer = $("#nav-path"); var footerHeight = footer.height(); toc = toc.append('
    '); toc = toc.find('ul'); var indices = new Array(); indices[0] = 0; indices[1] = 0; var h1counts = $("h1").length; headers.each(function(i) { var current = $(this); var levelTag = current[0].tagName.charAt(1); if(h1counts==0) levelTag--; var cur_id = current.attr("id"); indices[levelTag-1]+=1; var prefix = indices[0]; if (levelTag >1) { prefix+="."+indices[1]; } // Uncomment to add number prefixes // current.html(prefix + " " + current.html()); for(var l = levelTag; l < 2; ++l){ indices[l] = 0; } if(cur_id == undefined) { current.attr('id', 'title' + i); current.addClass('anchor'); toc.append("
  • " + current.text() + "
  • "); } else { toc.append("
  • " + current.text() + "
  • "); } }); resizeHeight(); } } var global_navtree_object; // Overloaded to remove links to sections/subsections function getNode(o, po) { po.childrenVisited = true; var l = po.childrenData.length-1; for (var i in po.childrenData) { var nodeData = po.childrenData[i]; if((!nodeData[1]) || (nodeData[1].indexOf('#')==-1)) // <- we added this line po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l); } } // Overloaded to adjust the size of the navtree wrt the toc function resizeHeight() { var header = $("#top"); var sidenav = $("#side-nav"); var content = $("#doc-content"); var navtree = $("#nav-tree"); var footer = $("#nav-path"); var toc = $("#nav-toc"); var headerHeight = header.outerHeight(); var footerHeight = footer.outerHeight(); var tocHeight = toc.height(); var windowHeight = $(window).height() - headerHeight - footerHeight; content.css({height:windowHeight + "px"}); navtree.css({height:(windowHeight-tocHeight) + "px"}); sidenav.css({height:windowHeight + "px"}); } // Overloaded to save the root node into global_navtree_object function initNavTree(toroot,relpath) { var o = new Object(); global_navtree_object = o; // <- we added this line o.toroot = toroot; o.node = new Object(); o.node.li = document.getElementById("nav-tree-contents"); o.node.childrenData = NAVTREE; o.node.children = new Array(); o.node.childrenUL = document.createElement("ul"); o.node.getChildrenUL = function() { return o.node.childrenUL; }; o.node.li.appendChild(o.node.childrenUL); o.node.depth = 0; o.node.relpath = relpath; o.node.expanded = false; o.node.isLast = true; o.node.plus_img = document.createElement("img"); o.node.plus_img.src = relpath+"ftv2pnode.png"; o.node.plus_img.width = 16; o.node.plus_img.height = 22; if (localStorageSupported()) { var navSync = $('#nav-sync'); if (cachedLink()) { showSyncOff(navSync,relpath); navSync.removeClass('sync'); } else { showSyncOn(navSync,relpath); } navSync.click(function(){ toggleSyncButton(relpath); }); } navTo(o,toroot,window.location.hash,relpath); $(window).bind('hashchange', function(){ if (window.location.hash && window.location.hash.length>1){ var a; if ($(location).attr('hash')){ var clslink=stripPath($(location).attr('pathname'))+':'+ $(location).attr('hash').substring(1); a=$('.item a[class$="'+clslink+'"]'); } if (a==null || !$(a).parent().parent().hasClass('selected')){ $('.item').removeClass('selected'); $('.item').removeAttr('id'); } var link=stripPath2($(location).attr('pathname')); navTo(o,link,$(location).attr('hash'),relpath); } else if (!animationInProgress) { $('#doc-content').scrollTop(0); $('.item').removeClass('selected'); $('.item').removeAttr('id'); navTo(o,toroot,window.location.hash,relpath); } }) $(window).on("load", showRoot); } // return false if the node has no children at all, or has only section/subsection children function checkChildrenData(node) { if (!(typeof(node.childrenData)==='string')) { for (var i in node.childrenData) { var url = node.childrenData[i][1]; if(url.indexOf("#")==-1) return true; } return false; } return (node.childrenData); } // Modified to: // 1 - remove the root node // 2 - remove the section/subsection children function createIndent(o,domNode,node,level) { var level=-2; // <- we replaced level=-1 by level=-2 var n = node; while (n.parentNode) { level++; n=n.parentNode; } if (checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData var imgNode = document.createElement("span"); imgNode.className = 'arrow'; imgNode.style.paddingLeft=(16*level).toString()+'px'; imgNode.innerHTML=arrowRight; node.plus_img = imgNode; node.expandToggle = document.createElement("a"); node.expandToggle.href = "javascript:void(0)"; node.expandToggle.onclick = function() { if (node.expanded) { $(node.getChildrenUL()).slideUp("fast"); node.plus_img.innerHTML=arrowRight; node.expanded = false; } else { expandNode(o, node, false, false); } } node.expandToggle.appendChild(imgNode); domNode.appendChild(node.expandToggle); } else { var span = document.createElement("span"); span.className = 'arrow'; span.style.width = 16*(level+1)+'px'; span.innerHTML = ' '; domNode.appendChild(span); } } // Overloaded to automatically expand the selected node function selectAndHighlight(hash,n) { var a; if (hash) { var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); a=$('.item a[class$="'+link+'"]'); } if (a && a.length) { a.parent().parent().addClass('selected'); a.parent().parent().attr('id','selected'); highlightAnchor(); } else if (n) { $(n.itemDiv).addClass('selected'); $(n.itemDiv).attr('id','selected'); } if ($('#nav-tree-contents .item:first').hasClass('selected')) { $('#nav-sync').css('top','30px'); } else { $('#nav-sync').css('top','5px'); } expandNode(global_navtree_object, n, true, true); // <- we added this line showRoot(); } $(document).ready(function() { generate_autotoc(); (function (){ // wait until the first "selected" element has been created try { // this line will trigger an exception if there is no #selected element, i.e., before the tree structure is complete. document.getElementById("selected").className = "item selected"; // ok, the default tree has been created, we can keep going... // expand the "Chapters" node if(window.location.href.indexOf('unsupported')==-1) expandNode(global_navtree_object, global_navtree_object.node.children[0].children[2], true, true); else expandNode(global_navtree_object, global_navtree_object.node.children[0].children[1], true, true); // Hide the root node "HDF4" $(document.getElementsByClassName('index.html')[0]).parent().parent().css({display:"none"}); } catch (err) { setTimeout(arguments.callee, 10); } })(); $(window).on("load", resizeHeight); }); hdf4-hdf4.3.1/doxygen/hdf4doxy.css000066400000000000000000000126431503061704500167550ustar00rootroot00000000000000 /******** HDF4 specific CSS code ************/ /**** Styles removing elements ****/ /* remove the "modules|classes" link for module pages (they are already in the TOC) */ div.summary { display:none; } /* remove */ div.contents hr { display:none; } /**** ****/ p, dl.warning, dl.attention, dl.note { max-width:60em; text-align:justify; } li { max-width:55em; text-align:justify; } img { border: 0; } div.fragment { display:table; /* this allows the element to be larger than its parent */ padding: 0pt; } pre.fragment { border: 1px solid #cccccc; margin: 2px 0px 2px 0px; padding: 3px 5px 3px 5px; } /* Common style for all HDF4's tables */ table.example, table.manual, table.manual-vl, table.manual-hl { max-width:100%; border-collapse: collapse; border-style: solid; border-width: 1px; border-color: #cccccc; font-size: 1em; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } table.example th, table.manual th, table.manual-vl th, table.manual-hl th { padding: 0.5em 0.5em 0.5em 0.5em; text-align: left; padding-right: 1em; color: #555555; background-color: #F4F4E5; background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.3,#FFFFFF), color-stop(0.30,#FFFFFF), color-stop(0.98,#F4F4E5), to(#ECECDE)); background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 30%, #F4F4E5 98%, #ECECDE); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#F4F4E5'); } table.example td, table.manual td, table.manual-vl td, table.manual-hl td { vertical-align:top; border-width: 1px; border-color: #cccccc; } /* header of headers */ table th.meta { text-align:center; font-size: 1.2em; background-color:#FFFFFF; } /* intermediate header */ table th.inter { text-align:left; background-color:#FFFFFF; background-image:none; border-style:solid solid solid solid; border-width: 1px; border-color: #cccccc; } /** class for example / output tables **/ table.example { } table.example th { } table.example td { padding: 0.5em 0.5em 0.5em 0.5em; vertical-align:top; } /* standard class for the manual */ table.manual, table.manual-vl, table.manual-hl { padding: 0.2em 0em 0.5em 0em; } table.manual th, table.manual-vl th, table.manual-hl th { margin: 0em 0em 0.3em 0em; } table.manual td, table.manual-vl td, table.manual-hl td { padding: 0.3em 0.5em 0.3em 0.5em; vertical-align:top; border-width: 1px; } table.manual td.alt, table.manual tr.alt, table.manual-vl td.alt, table.manual-vl tr.alt { background-color: #F4F4E5; } table.manual-vl th, table.manual-vl td, table.manual-vl td.alt { border-color: #cccccc; border-width: 1px; border-style: none solid none solid; } table.manual-vl th.inter { border-style: solid solid solid solid; } table.manual-hl td { border-color: #cccccc; border-width: 1px; border-style: solid none solid none; } table td.code { font-family: monospace; } h2 { margin-top:2em; border-style: none none solid none; border-width: 1px; border-color: #cccccc; } /**** Table of content in the side-nav ****/ div.toc { margin:0; padding: 0.3em 0 0 0; width:100%; float:none; position:absolute; bottom:0; border-radius:0px; border-style: solid none none none; max-height:50%; overflow-y: scroll; } div.toc h3 { margin-left: 0.5em; margin-bottom: 0.2em; } div.toc ul { margin: 0.2em 0 0.4em 0.5em; } span.cpp11,span.cpp14,span.cpp17 { color: #119911; font-weight: bold; } .newin3x { color: #a37c1a; font-weight: bold; } div.warningbox { max-width:60em; border-style: solid solid solid solid; border-color: red; border-width: 3px; } /**** old HDF4's styles ****/ table.tutorial_code td { border-color: transparent; /* required for Firefox */ padding: 3pt 5pt 3pt 5pt; vertical-align: top; } /* Whenever doxygen meets a '\n' or a '
    ', it will put * the text containing the character into a

    . * This little hack together with table.tutorial_code td.note * aims at fixing this issue. */ table.tutorial_code td.note p.starttd { margin: 0px; border: none; padding: 0px; } div.eimainmenu { text-align: center; } /* center version number on main page */ h3.version { text-align: center; } td.width20em p.endtd { width: 20em; } /* needed for huge screens */ .ui-resizable-e { background-repeat: repeat-y; } /* Style external links -- nav-tree is different */ #nav-tree .label a { padding:2px 16px 2px 2px; } a { outline: none; text-decoration: none; padding: 2px 1px 0; } a[href^="http"]::after, a[href^="https://"]::after { content: ""; width: 11px; height: 11px; margin-left: 4px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5z'/%3E%3Cpath fill-rule='evenodd' d='M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0v-5z'/%3E%3C/svg%3E"); background-position: center; background-repeat: no-repeat; background-size: contain; display: inline-block; } hdf4-hdf4.3.1/doxygen/hdf4doxy_layout.xml000066400000000000000000000124001503061704500203510ustar00rootroot00000000000000 hdf4-hdf4.3.1/doxygen/img/000077500000000000000000000000001503061704500152605ustar00rootroot00000000000000hdf4-hdf4.3.1/doxygen/img/HDFG-logo.png000066400000000000000000000032311503061704500174330ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞ`IDATx^íZklUþff§»Ûny´å!Ò*ֶЄ¤)[ˆP0…à‚B ˜@‹~ˆ$QP*‘BРЀ Qš€‰"¨¨%Ê« ÛÇîÎÜ{ÍîË]v¦öÞ¤é½÷Üs¿9çûÎ=3¥„¡I "@¤€à€^Ì$(T@¨€P¡Bz1B… 2(d°‹@ø2¤SB( Éa,ƒC‘ ÈŠelt¢ƒP Ò,a€¢Š$ñm 3UQÒ.ãV)¥Ð4 P–ýJ:‘„ ” b}#.^o1æ»e .{ÏŽ.€dÉ5 ÙÀãk>FSgÿE‘·CA¿¬ ò ,?ÓFŸ’\8²l>„$žÿÒäCÙ+G »2¸U\z·’d@(Cyý§¸`à’$ì[þfX€ì¶?ˆüÕº ÉœV S† Ãò°sé8<2¨/Jr8¥õ»]*þlðoD@OÀ³!1#:âƒÿç¿Ë ÈRe¬|¦¯zGA–yìů~à(쟅\Ë8ht´)nB¸å¢Aì`Àâò¡xkÉxÜq?% 3†aý³àTíåDž[Åç¦A‘=Œ1ìZ0 §%œO‚¦éðµjø¹©[ŸÇ©ßn‚ÄÌâ¹¶ªæñHˆî?@¾X5å%mQO0O¦jÄ_·¥€ÏDA p>¨©ÀâÊâ$‰ÀßPŠF°£ñG¼}ü"î„4èfØ»\1•åùLuJ@" _­«BEé`[ÄNN Àþå L¯kas> ŽÓë„®køèäeÔî;‡ ™*†é‹õ•èçÉ4¦_jòaDýá( †¯ëªP1â!›D()œzúe8àLÁÆÉvã¾Ð"ùnn/ÔP³ý$/ü1Ï%37C5‘FÍ=Lnäÿf¨øD#×¥âìÖYFz% Ã–³‰êoÊ(|-®>„6JãŽëG²*ÃŽŸÜpž)ƒ<µL€òúC‘:À˜)§ÚÀ8£˜ùÆ œ¸t­;\Hi#\̤ Ó7Ååmݶ1'¹-Õ£0ÿéBË:ÚÒ|[t¦M'Wv`mÔnŸ… ÆEM¬/±{ô(ªâŒ«ÃÓCÌÔÚ#ÓìF@H ¡áãõøþòéˆ ~äùÍL8xеW/cô²¤`Eõë(/žd©!ŸPK{3j·=o8eHº „àÔG°ûØf£Õ1Î{ u‹v!Ûí1ë¯ë¿¢îýùp˜ ž ÄÜa›µÛfZ€“R”è8þí|öÍ‚­Ñ§/ÉX5w+F¨HÓµ0ü{o"À6ÏjG,¬\…ÉOÌIÈÞ?l¶ éú;³?]á¤}ò’$aÆØÌòä˜öÏ?uNŸÁÈÎìo„2hzÈ€G ¡‰EÃØáÓðâÌup;³âÀ{àHOœÑüù;nTñ¢zê2ƒö[bÿKx/PCÑR,½úM©>=AÝ{ "…Wås6¡¼d’å‡èokÆšwfƒÐØæVò媒LW6åä£`p1Ê Ç£¨ Ì8øÝÞE\5Tà…ˆ ð ¶¾f†w¹â/Fô`ö߸)²nXªãÃí-BtS£S×þ¼ÚsðKˆqA¢`Œ@Vø…)ý}Áx1B4˜ýC19Iò÷ âûñ}€ø>@|Й‹_g9ç¾['HP  AA‚‚ï;j¾‡ * T@¨€P{Hº÷ÝVBz» ü 4Õ7}€Z¤TIEND®B`‚hdf4-hdf4.3.1/hdf/000077500000000000000000000000001503061704500135705ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/CMakeLists.txt000066400000000000000000000007461503061704500163370ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_HDF C) set(CMAKE_DIRECTORY_LABELS “HDFâ€) #----------------------------------------------------------------------------- # Option to build HDF4 Utilities #----------------------------------------------------------------------------- if (IS_DIRECTORY "${HDF4_HDF_SOURCE_DIR}/util") option (HDF4_BUILD_UTILS "Build HDF4 Utilities" OFF) if (HDF4_BUILD_UTILS OR HDF4_BUILD_TOOLS) add_subdirectory (util) endif () endif () hdf4-hdf4.3.1/hdf/Makefile.am000066400000000000000000000005541503061704500156300ustar00rootroot00000000000000include $(top_srcdir)/config/commence.am if HDF_BUILD_FORTRAN FORTRAN_DIR = fortran else FORTRAN_DIR = endif # src folder in root Makefile, build other folders now SUBDIRS = src $(FORTRAN_DIR) test util DIST_SUBDIRS = src fortran test util # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall hdf4-hdf4.3.1/hdf/Makefile.in000066400000000000000000000550321503061704500156420ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = hdf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/commence.am 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog @HDF_BUILD_FORTRAN_FALSE@FORTRAN_DIR = @HDF_BUILD_FORTRAN_TRUE@FORTRAN_DIR = fortran # src folder in root Makefile, build other folders now SUBDIRS = src $(FORTRAN_DIR) test util DIST_SUBDIRS = src fortran test util all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 hdf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign hdf/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-am uninstall uninstall-am .PRECIOUS: Makefile # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall # 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: hdf4-hdf4.3.1/hdf/fortran/000077500000000000000000000000001503061704500152435ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/fortran/CMakeLists.txt000066400000000000000000000204051503061704500200040ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_HDF_FORTRAN C Fortran) set (HDF4_HDF_SRC_CSTUB_FSRCS ${HDF4_HDFSOURCE_DIR}/dfanf.c ${HDF4_HDFSOURCE_DIR}/dff.c ${HDF4_HDFSOURCE_DIR}/dfpf.c ${HDF4_HDFSOURCE_DIR}/dfr8f.c ${HDF4_HDFSOURCE_DIR}/dfsdf.c ${HDF4_HDFSOURCE_DIR}/dfutilf.c ${HDF4_HDFSOURCE_DIR}/df24f.c ${HDF4_HDFSOURCE_DIR}/dfufp2if.c ${HDF4_HDFSOURCE_DIR}/herrf.c ${HDF4_HDFSOURCE_DIR}/hfilef.c ${HDF4_HDFSOURCE_DIR}/mfanf.c ${HDF4_HDFSOURCE_DIR}/mfgrf.c ${HDF4_HDFSOURCE_DIR}/vattrf.c ${HDF4_HDFSOURCE_DIR}/vgf.c ) set_source_files_properties (${HDF4_HDF_SRC_CSTUB_FSRCS} PROPERTIES LANGUAGE C) set (HDF4_HDF_SRC_FHDRS ${HDF4_HDFSOURCE_DIR}/dffunc.inc ${HDF4_HDFSOURCE_DIR}/hdf.inc ) set (FORTRAN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #----------------------------------------------------------------------------- # Add Main fortran library #----------------------------------------------------------------------------- if (BUILD_STATIC_LIBS) add_library (${HDF4_SRC_FCSTUB_LIB_TARGET} STATIC ${HDF4_HDF_SRC_CSTUB_FSRCS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_HDFSOURCE_DIR}/hproto_fortran.h ${HDF4_BINARY_DIR}/h4config.h) target_include_directories (${HDF4_SRC_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_options(${HDF4_SRC_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_SRC_FCSTUB_LIB_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_SRC_FCSTUB_LIB_TARGET} STATIC) target_link_libraries (${HDF4_SRC_FCSTUB_LIB_TARGET} PUBLIC ${HDF4_SRC_LIB_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_FCSTUB_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_FCSTUB_LIB_TARGET} ${HDF4_SRC_FCSTUB_LIB_NAME} STATIC 0) set_target_properties (${HDF4_SRC_FCSTUB_LIB_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE C INTERFACE_INCLUDE_DIRECTORIES "$/include>" ) set (install_targets ${HDF4_SRC_FCSTUB_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_SRC_FCSTUB_LIBSH_TARGET} SHARED ${HDF4_HDF_SRC_CSTUB_FSRCS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_HDFSOURCE_DIR}/hproto_fortran.h ${HDF4_BINARY_DIR}/h4config.h) target_include_directories (${HDF4_SRC_FCSTUB_LIBSH_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_options(${HDF4_SRC_FCSTUB_LIBSH_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_SRC_FCSTUB_LIBSH_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_SRC_FCSTUB_LIBSH_TARGET} SHARED) target_link_libraries (${HDF4_SRC_FCSTUB_LIBSH_TARGET} PUBLIC ${HDF4_SRC_LIBSH_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_FCSTUB_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_FCSTUB_LIBSH_TARGET} ${HDF4_SRC_FCSTUB_LIB_NAME} SHARED "F") set_target_properties (${HDF4_SRC_FCSTUB_LIBSH_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE C COMPILE_DEFINITIONS "H4_BUILT_AS_DYNAMIC_LIB" INTERFACE_INCLUDE_DIRECTORIES "$/include>" INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 ) set (install_targets ${install_targets} ${HDF4_SRC_FCSTUB_LIBSH_TARGET}) endif () set (HDF4_F_FORTRAN_SRCS ${HDF4_HDFSOURCE_DIR}/df24ff.f ${HDF4_HDFSOURCE_DIR}/dfanff.f ${HDF4_HDFSOURCE_DIR}/dfpff.f ${HDF4_HDFSOURCE_DIR}/dfr8ff.f ${HDF4_HDFSOURCE_DIR}/dfsdff.f ${HDF4_HDFSOURCE_DIR}/dfufp2iff.f ${HDF4_HDFSOURCE_DIR}/dfff.f ${HDF4_HDFSOURCE_DIR}/hfileff.f ${HDF4_HDFSOURCE_DIR}/mfgrff.f ${HDF4_HDFSOURCE_DIR}/vattrff.f ${HDF4_HDFSOURCE_DIR}/vgff.f ) set_source_files_properties (${HDF4_F_FORTRAN_SRCS} PROPERTIES LANGUAGE Fortran) #----------------------------------------------------------------------------- if (BUILD_STATIC_LIBS) add_library (${HDF4_SRC_FORTRAN_LIB_TARGET} STATIC ${HDF4_F_FORTRAN_SRCS}) target_include_directories (${HDF4_SRC_FORTRAN_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_definitions (${HDF4_SRC_FORTRAN_LIB_TARGET} PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) target_link_libraries (${HDF4_SRC_FORTRAN_LIB_TARGET} PUBLIC ${HDF4_SRC_FCSTUB_LIB_TARGET}) set_target_properties (${HDF4_SRC_FORTRAN_LIB_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY} ) if (WIN32) set_property (TARGET ${HDF4_SRC_FORTRAN_LIB_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif () set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_FORTRAN_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_FORTRAN_LIB_TARGET} ${HDF4_SRC_FORTRAN_LIB_NAME} STATIC 0) set (install_targets ${install_targets} ${HDF4_SRC_FORTRAN_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_SRC_FORTRAN_LIBSH_TARGET} SHARED ${HDF4_F_FORTRAN_SRCS}) target_include_directories (${HDF4_SRC_FORTRAN_LIBSH_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_definitions (${HDF4_SRC_FORTRAN_LIBSH_TARGET} PUBLIC "H4_BUILT_AS_DYNAMIC_LIB" PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if (WIN32 AND MSVC) set_property (TARGET ${HDF4_SRC_FORTRAN_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS} /DLL /DEF:${HDF4_HDF_FORTRAN_SOURCE_DIR}/hdf_fortrandll.def") endif () target_link_libraries (${HDF4_SRC_FORTRAN_LIBSH_TARGET} PUBLIC ${HDF4_SRC_FCSTUB_LIBSH_TARGET}) set_target_properties (${HDF4_SRC_FORTRAN_LIBSH_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE Fortran INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY} ) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_FORTRAN_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_FORTRAN_LIBSH_TARGET} ${HDF4_SRC_FORTRAN_LIB_NAME} SHARED "F") set (install_targets ${install_targets} ${HDF4_SRC_FORTRAN_LIBSH_TARGET}) endif () if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- INSTALL ( FILES ${HDF4_HDF_SRC_FHDRS} DESTINATION ${HDF4_INSTALL_INCLUDE_DIR} COMPONENT headers ) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (HDF4_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF4_SRC_FCSTUB_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) #INSTALL_TARGET_PDB (${HDF4_SRC_FORTRAN_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) endif () INSTALL_TARGET_PDB (${HDF4_SRC_FCSTUB_LIB_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) INSTALL ( TARGETS ${install_targets} EXPORT ${HDF4_EXPORTED_TARGETS} LIBRARY DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT fortlibraries ARCHIVE DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT fortlibraries RUNTIME DESTINATION ${HDF4_INSTALL_BIN_DIR} COMPONENT fortlibraries FRAMEWORK DESTINATION ${HDF4_INSTALL_FWRK_DIR} COMPONENT fortlibraries INCLUDES DESTINATION include ) endif () hdf4-hdf4.3.1/hdf/fortran/CMakeTests.cmake000066400000000000000000000134571503061704500202620ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## set (FORTRAN_SRC_DIR ${HDF4_HDF_TEST_SOURCE_DIR}) #----------------------------------------------------------------------------- # Add test fortran stub library #----------------------------------------------------------------------------- if (NOT BUILD_SHARED_LIBS) add_library (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} STATIC ${HDF4_HDF_TESTSOURCE_DIR}/forsupf.c) target_include_directories (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}" ) set_target_properties (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PROPERTIES LINKER_LANGUAGE C) TARGET_C_PROPERTIES (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} STATIC) target_link_libraries (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PUBLIC ${HDF4_SRC_LIB_TARGET}) H4_SET_LIB_OPTIONS (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_NAME} STATIC 0) else () add_library (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} SHARED ${HDF4_HDF_TESTSOURCE_DIR}/forsupf.c) target_include_directories (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}" ) set_target_properties (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PROPERTIES LINKER_LANGUAGE C) TARGET_C_PROPERTIES (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} SHARED) target_link_libraries (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} PUBLIC ${HDF4_SRC_LIBSH_TARGET}) H4_SET_LIB_OPTIONS (${HDF4_HDF_TEST_FCSTUB_LIB_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_NAME} SHARED "F") endif () #-- Adding test for fortest add_executable (fortest ${HDF4_HDF_TESTSOURCE_DIR}/fortest.c) target_include_directories (fortest PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (fortest STATIC) target_link_libraries (fortest PRIVATE ${HDF4_SRC_LIB_TARGET} ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (fortest SHARED) target_link_libraries (fortest PRIVATE ${HDF4_SRC_LIBSH_TARGET} ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (fortest PROPERTIES LINKER_LANGUAGE C COMPILE_DEFINITIONS "CMAKE_INTDIR" ) #----------------------------------------------------------------------------- #-- Adding test for fortestF set (FORTEST_FSRCS ${HDF4_HDF_TESTSOURCE_DIR}/fortestF.f ${HDF4_HDF_TESTSOURCE_DIR}/forsupff.f ${HDF4_HDF_TESTSOURCE_DIR}/manf.f ${HDF4_HDF_TESTSOURCE_DIR}/mgrf.f ${HDF4_HDF_TESTSOURCE_DIR}/slabwf.f ${HDF4_HDF_TESTSOURCE_DIR}/t24f.f ${HDF4_HDF_TESTSOURCE_DIR}/tanf.f ${HDF4_HDF_TESTSOURCE_DIR}/tanfilef.f ${HDF4_HDF_TESTSOURCE_DIR}/tpf.f ${HDF4_HDF_TESTSOURCE_DIR}/tr8f.f ${HDF4_HDF_TESTSOURCE_DIR}/tsdmmsf.f ${HDF4_HDF_TESTSOURCE_DIR}/tsdnmmsf.f ${HDF4_HDF_TESTSOURCE_DIR}/tsdnntf.f ${HDF4_HDF_TESTSOURCE_DIR}/tsdntf.f ${HDF4_HDF_TESTSOURCE_DIR}/tsdstrf.f ${HDF4_HDF_TESTSOURCE_DIR}/tstubsf.f ${HDF4_HDF_TESTSOURCE_DIR}/tvattrf.f ${HDF4_HDF_TESTSOURCE_DIR}/tvsetf.f ) add_executable (fortestF ${FORTEST_FSRCS} ) target_include_directories (fortestF PRIVATE "${CMAKE_Fortran_MODULE_DIRECTORY};${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}" ) target_compile_options(fortestF PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if(MSVC) set_property(TARGET fortestF PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (fortestF PROPERTIES LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY} ) if (NOT BUILD_SHARED_LIBS) target_link_libraries (fortestF PRIVATE ${HDF4_SRC_FORTRAN_LIB_TARGET} ${HDF4_SRC_FCSTUB_LIB_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_TARGET}) else () target_link_libraries (fortestF PRIVATE ${HDF4_SRC_FORTRAN_LIBSH_TARGET} ${HDF4_SRC_FCSTUB_LIBSH_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_TARGET}) endif () #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES 8bit.dat bitio.dat gr_r24.dat greyjpeg.dat jpeg.dat litend.dat nbit.dat tmgr.dat tvattr.dat ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_HDF_TESTSOURCE_DIR}/test_files/${h4_file}" "${PROJECT_BINARY_DIR}/test_files/${h4_file}" "hdf_fortran_files") endforeach () add_custom_target(hdf_fortran_files ALL COMMENT "Copying files needed by hdf fortran tests" DEPENDS ${hdf_fortran_files_list}) ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME HDF_FORTRAN-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove fortest.arg Fortran_err.dat GRcompressed.hdf GRchunked1.hdf GRchunked2.hdf manf.hdf slab1wf.hdf slab4wf.hdf slabwf.hdf tdf24f.hdf tdfanF.hdf tdfanflF.hdf tmgrf.hdf ) add_test (NAME fortest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set_tests_properties (fortest PROPERTIES DEPENDS HDF_FORTRAN-clearall-objects) add_test (NAME fortestF COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (passRegex "All Fortran Interface Tests Passed") set_tests_properties (fortestF PROPERTIES DEPENDS fortest PASS_REGULAR_EXPRESSION "${passRegex}") hdf4-hdf4.3.1/hdf/fortran/Makefile.am000066400000000000000000000002611503061704500172760ustar00rootroot00000000000000include $(top_srcdir)/config/commence.am DIST_SUBDIRS = # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall hdf4-hdf4.3.1/hdf/fortran/Makefile.in000066400000000000000000000545621503061704500173240ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = hdf/fortran SUBDIRS = ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/commence.am 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog DIST_SUBDIRS = all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 hdf/fortran/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign hdf/fortran/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-am uninstall uninstall-am .PRECIOUS: Makefile # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall # 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: hdf4-hdf4.3.1/hdf/fortran/hdf_fortrandll.def000066400000000000000000000053721503061704500207220ustar00rootroot00000000000000EXPORTS ; DFFF DFISHDF DFACCESS DFOPEN DFIISHDF DFIACCESS DFIOPEN ; DFR8FF DFR8NIMAGES DFR8WRITEREF DFR8READREF DFR8ADDIMAGE DFR8PUTIMAGE DFR8GETIMAGE DFR8GETDIMS D8WREF D8NIMS D8RREF D8AIMG D8PIMG D8GIMG D8GDIMS D8INIMS D8IWREF D8IRREF D8IAIMG D8IPIMG D8IGIMG D8IGDIM ; DF24FF DF24READREF DF24PUTIMAGE DF24ADDIMAGE DF24GETIMAGE DF24GETDIMS D2NIMG D2RREF D2PIMG D2AIMG D2GIMG D2GDIMS D2IRREF D2IAIMG D2IGIMG D2IGDIM D2INIMG ; MFGRFF MGGNLUTS MGGCOMPRESS MGSCOMPRESS MGWCHNK MGWCCHNK MGSCHNK MGSCCHNK MGRCHNK MGRCCHNK MGGICHNK MGFNDAT MGSATTR MGSNATT MGSCATT MGSXFIL MGN2NDX MGCREAT MGCGNLUTS MGCGCOMPRESS MGCSCOMPRESS MGCWCHNK MGCWCCHNK MGCSCHNK MGCSCCHNK MGCRCHNK MGCRCCHNK MGCGICHNK MGIFNDAT MGISATTR MGISCATT MGISXFIL MGIN2NDX MGICREAT ; DFUFP2IFF DFUFPTOIMAGE DUF2IM DUIF2I ; DFPFF DFPREADREF DFPWRITEREF DFPNPALS DFPPUTPAL DFPADDPAL DFPGETPAL DPRREF DPWREF DPNPALS DPPPAL DPAPAL DPGPAL DPIRREF DPIWREF DPINPAL DPIPPAL DPIGPAL ; HFILEFF HCONFINF HEPRNTF HESTRINGF HISHDFF HGFILVER HGLIBVER HXSCDIR HXSDIR HOPEN HCONFINFC HEPRNTC HESTRINGC HIISHDF HGFILVERC HGLIBVERC HXISCDIR HXISDIR HIOPEN ; DFSDFF DSRSLAB DSSSLAB DSWREF DSGDAST DSGDIST DFSDGETDIMSTRS DFSDNUMBER DFSDREADREF DFSDSTARTSLICE DFSDGETSLICE DFSDADDDATA DFSDPUTDATA DFSDSETDIMSTRS DFSDSETDATASTRS DFSDGETDATA DFSDGETDIMS DSP32SD DSNUM DSRREF DSSSLC DSGSLC DSADATA DSPDATA DSSDIST DSSDAST DSGDATA DSGDIMS DSIRSLAB DSISSLAB DSIWREF DSIGDAS DSIGDIS DSINUM DSIRREF DSISSLC DSIGSLC DSIADAT DSIPDAT DSISDIS DSISDAS DSIGDAT DSIGDIM DSIP32S ; VATTRFF VFFDATT VFSCATT VFSNATT VSFAINF VSFFDAT VSFSCAT VSFSNAT VSFFIDX VFCFDAT VFCSCAT VFCSATT VSFCAIN VSFCFDA VSFCSCA VSFCSAT VSFCFDX ; VGFF VFGVGROUPS VSFGVDATAS VSFGETBLINFO VSFSETNMBL VSFSETBLSZ VFFNAME VSFFCLS VFDTR VSFCPAK VSFNPAK VSQFNAME VSQFFLDS VFADTR VFGTTR VFGTTRS VFNTR VFINQTR VFFLOC VHFMKGP VHFSCDM VHFSCD VHFSDM VHFSD VFNDCLS VFIND VSFLONE VFLONE VFENTS VSFSIZ VSFGFLD VSFELTS VSFGINT VSFSEXTF VSFWRIT VSFREAD VSFFDEF VSFSINT VSFSFLD VSFSCLS VSFSNAM VSFDLTE VSFGID VSFFND VSFEX VSFINQ VSFGCLS VSFGNAM VSFSEEK VSFDTCH VSFATCH VFISVS VFISVG VFINSRT VFSCLS VFSNAM VFGNXT VFGID VFINQ VFGCLS VFGNAM VFDTCH VFATCH VSCGBLINFO VSCSETNMBL VSCSETBLSZ VFFNAMEC VSCFCLS VDTRC VSFCCPK VSFNCPK VSQNAMEC VSQFLDSC VADTRC VGTTRC VGTTRSC VNTRC VINQTRC VFLOCC VHMKGPC VHSCDMC VHSCDC VHSDMC VHSDC VFNDCLSC VFINDC VSLONEC VLONEC VENTSC VSSIZC VSGFLDC VSELTSC VSGINTC VSSEXTFC VSWRITC VSREADC VSFDEFC VSSINTC VSSFLDC VSSCLSC VSSNAMC VSDLTC VSGIDC VSFNDC VSFEXC VSINQC VSGCLSC VSGNAMC VSSEEKC VSDTCHC VSATCHC VISVSC VISVGC VINSRTC VSCLSC VSNAMC VGNXTC VGIDC VINQC VGCLSC VGNAMC VDTCHC VATCHC ; DFANFF DFANADDFID DFANLABLIST DFANPUTDESC DFANPUTLABEL DFANGETDESC DFANGETDESCLEN DFANGETLABEL DFANGETLABLEN DAAFID DALLIST DAPDESC DAPLAB DAGDESC DAGDLEN DAGLAB DAGLLEN DAIAFID DAILIST DAIPANN DAIGANN DAIGANL hdf4-hdf4.3.1/hdf/src/000077500000000000000000000000001503061704500143575ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/src/.indent.pro000066400000000000000000000003071503061704500164400ustar00rootroot00000000000000-bap -sob -l78 -c1 -cp8 -bl -nce -cli4 -ss -npcs -di12 -nbc -psl -i4 -ts4 -lp -nip -lps -T uint8 -T int8 -T uint16 -T int16 -T uint32 -T int32 -T intn -T uintn -T float32 -T float64 -T VOIDP -T dd_t hdf4-hdf4.3.1/hdf/src/CMakeLists.txt000066400000000000000000000242511503061704500171230ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_HDF_SRC C) if (POLICY CMP0087) # To evaluate generator expressions for install(CODE) and install(SCRIPT). cmake_policy (SET CMP0087 NEW) endif () LINK_DIRECTORIES ( ${HDF4_HDF_BINARY_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ) set (HDF4_HDF_SRC_CSRCS ${HDF4_HDF_SRC_SOURCE_DIR}/atom.c ${HDF4_HDF_SRC_SOURCE_DIR}/bitvect.c ${HDF4_HDF_SRC_SOURCE_DIR}/cdeflate.c ${HDF4_HDF_SRC_SOURCE_DIR}/cnbit.c ${HDF4_HDF_SRC_SOURCE_DIR}/cnone.c ${HDF4_HDF_SRC_SOURCE_DIR}/crle.c ${HDF4_HDF_SRC_SOURCE_DIR}/cskphuff.c ${HDF4_HDF_SRC_SOURCE_DIR}/cszip.c ${HDF4_HDF_SRC_SOURCE_DIR}/df24.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfan.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfcomp.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfconv.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfgr.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfgroup.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfimcomp.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfjpeg.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfknat.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfkswap.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfp.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfr8.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfrle.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfsd.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfstubs.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfufp2i.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfunjpeg.c ${HDF4_HDF_SRC_SOURCE_DIR}/dfutil.c ${HDF4_HDF_SRC_SOURCE_DIR}/dynarray.c ${HDF4_HDF_SRC_SOURCE_DIR}/glist.c ${HDF4_HDF_SRC_SOURCE_DIR}/hbitio.c ${HDF4_HDF_SRC_SOURCE_DIR}/hblocks.c ${HDF4_HDF_SRC_SOURCE_DIR}/hbuffer.c ${HDF4_HDF_SRC_SOURCE_DIR}/hchunks.c ${HDF4_HDF_SRC_SOURCE_DIR}/hcomp.c ${HDF4_HDF_SRC_SOURCE_DIR}/hcompri.c ${HDF4_HDF_SRC_SOURCE_DIR}/hdatainfo.c ${HDF4_HDF_SRC_SOURCE_DIR}/hdfalloc.c ${HDF4_HDF_SRC_SOURCE_DIR}/herr.c ${HDF4_HDF_SRC_SOURCE_DIR}/hextelt.c ${HDF4_HDF_SRC_SOURCE_DIR}/hfile.c ${HDF4_HDF_SRC_SOURCE_DIR}/hfiledd.c ${HDF4_HDF_SRC_SOURCE_DIR}/hkit.c ${HDF4_HDF_SRC_SOURCE_DIR}/linklist.c ${HDF4_HDF_SRC_SOURCE_DIR}/mcache.c ${HDF4_HDF_SRC_SOURCE_DIR}/mfan.c ${HDF4_HDF_SRC_SOURCE_DIR}/mfgr.c ${HDF4_HDF_SRC_SOURCE_DIR}/mstdio.c ${HDF4_HDF_SRC_SOURCE_DIR}/tbbt.c ${HDF4_HDF_SRC_SOURCE_DIR}/vattr.c ${HDF4_HDF_SRC_SOURCE_DIR}/vconv.c ${HDF4_HDF_SRC_SOURCE_DIR}/vg.c ${HDF4_HDF_SRC_SOURCE_DIR}/vgp.c ${HDF4_HDF_SRC_SOURCE_DIR}/vhi.c ${HDF4_HDF_SRC_SOURCE_DIR}/vio.c ${HDF4_HDF_SRC_SOURCE_DIR}/vparse.c ${HDF4_HDF_SRC_SOURCE_DIR}/vrw.c ${HDF4_HDF_SRC_SOURCE_DIR}/vsfld.c ) set (HDF4_HDF_SRC_CHDRS ${HDF4_HDF_SRC_SOURCE_DIR}/H4api_adpt.h ${HDF4_HDF_SRC_SOURCE_DIR}/df.h #${HDF4_BINARY_DIR}/h4config.h ${HDF4_HDF_SRC_SOURCE_DIR}/hbitio.h ${HDF4_HDF_SRC_SOURCE_DIR}/hcomp.h ${HDF4_HDF_SRC_SOURCE_DIR}/hdatainfo.h ${HDF4_HDF_SRC_SOURCE_DIR}/hdf.h ${HDF4_HDF_SRC_SOURCE_DIR}/herr.h ${HDF4_HDF_SRC_SOURCE_DIR}/hfile.h ${HDF4_HDF_SRC_SOURCE_DIR}/hlimits.h ${HDF4_HDF_SRC_SOURCE_DIR}/hntdefs.h ${HDF4_HDF_SRC_SOURCE_DIR}/hproto.h ${HDF4_HDF_SRC_SOURCE_DIR}/htags.h ${HDF4_HDF_SRC_SOURCE_DIR}/mfan.h ${HDF4_HDF_SRC_SOURCE_DIR}/mfgr.h ${HDF4_HDF_SRC_SOURCE_DIR}/vg.h ) # Internal headers end in _priv.h set (HDF4_PRIVATE_HDF_SRC_CHDRS ${HDF4_HDF_SRC_SOURCE_DIR}/atom_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/bitvect_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/cdeflate_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/cnbit_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/cnone_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/crle_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/cskphuff_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/cszip_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dfan_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dfgr_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dfrig_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dfsd_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dfufp2i_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/dynarray_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/glist_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hbitio_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hchunks_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hcomp_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hconv_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hdf_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/herr_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hfile_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hkit_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/hqueue_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/linklist_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/mcache_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/mfan_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/mfgr_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/mstdio_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/tbbt_priv.h ${HDF4_HDF_SRC_SOURCE_DIR}/vg_priv.h ) if (BUILD_STATIC_LIBS) add_library (${HDF4_SRC_LIB_TARGET} STATIC ${HDF4_HDF_SRC_CSRCS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_PRIVATE_HDF_SRC_CHDRS} ${HDF4_BINARY_DIR}/h4config.h) target_include_directories(${HDF4_SRC_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES}" INTERFACE "$/include>;$" ) target_compile_options(${HDF4_SRC_LIB_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${HDF4_SRC_LIB_TARGET} PRIVATE -Wno-implicit-function-declaration -Wno-typedef-redefinition) endif () target_compile_definitions(${HDF4_SRC_LIB_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_SRC_LIB_TARGET} STATIC) target_link_libraries (${HDF4_SRC_LIB_TARGET} PRIVATE ${LINK_LIBS} ${LINK_COMP_LIBS}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_LIB_TARGET} ${HDF4_SRC_LIB_NAME} STATIC 0) set_target_properties (${HDF4_SRC_LIB_TARGET} PROPERTIES FOLDER libraries INTERFACE_INCLUDE_DIRECTORIES "$/include>" ) set (install_targets ${HDF4_SRC_LIB_TARGET}) # add_custom_command(OUTPUT ${HDF4_SRC_LIB_TARGET} POST_BUILD # COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ # DEPENDS ${HDF4_SRC_LIB_TARGET} # ) # install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/lib${HDF4_SRC_LIB_SYM_NAME}.a)" COMPONENT libraries) # set (install_targets ${install_targets} ${HDF4_SRC_LIB_SYM_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_SRC_LIBSH_TARGET} SHARED ${HDF4_HDF_SRC_CSRCS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_PRIVATE_HDF_SRC_CHDRS} ${HDF4_BINARY_DIR}/h4config.h) target_include_directories(${HDF4_SRC_LIBSH_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES}" INTERFACE "$/include>;$" ) target_compile_options(${HDF4_SRC_LIBSH_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") target_compile_options(${HDF4_SRC_LIBSH_TARGET} PRIVATE -Wno-implicit-function-declaration -Wno-typedef-redefinition) endif () target_compile_definitions(${HDF4_SRC_LIBSH_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_SRC_LIBSH_TARGET} SHARED) target_link_libraries (${HDF4_SRC_LIBSH_TARGET} PRIVATE ${LINK_LIBS} ${LINK_COMP_LIBS}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_SRC_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_SRC_LIBSH_TARGET} ${HDF4_SRC_LIB_NAME} SHARED "DF") set_target_properties (${HDF4_SRC_LIBSH_TARGET} PROPERTIES FOLDER libraries COMPILE_DEFINITIONS "H4_BUILT_AS_DYNAMIC_LIB" INTERFACE_INCLUDE_DIRECTORIES "$/include>" INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 ) set (install_targets ${install_targets} ${HDF4_SRC_LIBSH_TARGET}) # # add_custom_command(TARGET ${HDF4_SRC_LIBSH_TARGET} # COMMAND ${CMAKE_COMMAND} -E create_symlink $ $ # DEPENDS $ # ) # set (install_targets ${install_targets} ${HDF4_SRC_LIBSH_SYM_TARGET}) endif () #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- install ( FILES ${HDF4_HDF_SRC_CHDRS} DESTINATION ${HDF4_INSTALL_INCLUDE_DIR} COMPONENT headers ) #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (HDF4_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF4_SRC_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} libraries) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF4_SRC_LIB_TARGET} ${HDF4_INSTALL_LIB_DIR} libraries) endif () install ( TARGETS ${install_targets} EXPORT ${HDF4_EXPORTED_TARGETS} LIBRARY DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${HDF4_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${HDF4_INSTALL_FWRK_DIR} COMPONENT libraries INCLUDES DESTINATION include ) endif () #----------------------------------------------------------------------------- # Option to build documentation #----------------------------------------------------------------------------- if (DOXYGEN_FOUND) # This custom target and doxygen/configure work together # Replace variables inside @@ with the current values add_custom_target (hdf4lib_doc ALL COMMAND ${DOXYGEN_EXECUTABLE} ${HDF4_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${HDF4_HDFSOURCE_DIR} COMMENT "Generating HDF4 library Source API documentation with Doxygen" VERBATIM ) if (NOT TARGET doxygen) add_custom_target (doxygen) endif () add_dependencies (doxygen hdf4lib_doc) endif () hdf4-hdf4.3.1/hdf/src/H4api_adpt.h000066400000000000000000000142221503061704500165060ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_API_ADPT_H #define H4_API_ADPT_H /** * Provide the macros to adapt the HDF public functions to * dll entry points. * In addition it provides error lines if the configuration is incorrect. **/ /* This will only be defined if HDF4 was built with CMake */ #if defined(H4_BUILT_AS_DYNAMIC_LIB) #if defined(hdf_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFERRPUBLIC extern __declspec(dllimport) #define HDFPUBLIC __declspec(dllexport) #define HDFLIBAPI extern __declspec(dllexport) #define HDFFCLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFERRPUBLIC extern __attribute__((visibility("default"))) #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* hdf_shared_EXPORTS */ #if defined(hdf_fcstub_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFPUBLIC __declspec(dllexport) #define HDFLIBAPI extern __declspec(dllimport) #define HDFFCLIBAPI extern __declspec(dllexport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* hdf_fcstub_shared_EXPORTS */ #if defined(mfhdf_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFERRPUBLIC extern __declspec(dllimport) #define HDFPUBLIC __declspec(dllimport) #define HDFLIBAPI extern __declspec(dllexport) #define HDFFCLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFERRPUBLIC extern __attribute__((visibility("default"))) #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* mfhdf_shared_EXPORTS */ #if defined(mfhdf_fcstub_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFPUBLIC __declspec(dllimport) #define HDFLIBAPI extern __declspec(dllimport) #define HDFFCLIBAPI extern __declspec(dllexport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* mfhdf_shared_fcstub_EXPORTS */ #if defined(hdf_test_fcstub_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFFCLIBAPI extern __declspec(dllexport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* hdf_test_fcstub_shared_EXPORTS */ #if defined(mfhdf_hdiff_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFPUBLIC __declspec(dllimport) #define HDFLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* mfhdf_hdiff_shared_EXPORTS */ #if defined(mfhdf_hrepack_shared_EXPORTS) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFPUBLIC __declspec(dllimport) #define HDFLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFPUBLIC __attribute__((visibility("default"))) #define HDFLIBAPI extern __attribute__((visibility("default"))) #endif #endif /* mfhdf_hrepack_shared_EXPORTS */ #if !defined(HDFERRPUBLIC) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFERRPUBLIC extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFERRPUBLIC extern __attribute__((visibility("default"))) #endif #endif #if !defined(HDFPUBLIC) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFPUBLIC __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFPUBLIC __attribute__((visibility("default"))) #endif #endif #if !defined(HDFLIBAPI) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFLIBAPI extern __attribute__((visibility("default"))) #endif #endif #if !defined(HDFFCLIBAPI) #if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */ #define HDFFCLIBAPI extern __declspec(dllimport) #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */ #define HDFFCLIBAPI extern __attribute__((visibility("default"))) #endif #endif #else #define HDFERRPUBLIC extern #define HDFPUBLIC #define HDFLIBAPI extern #define HDFFCLIBAPI extern #endif /*H4_BUILT_AS_DYNAMIC_LIB */ #endif /* H4_API_ADPT_H */ hdf4-hdf4.3.1/hdf/src/Makefile.am000066400000000000000000000050231503061704500164130ustar00rootroot00000000000000############################################################################# ## Library to build ## ############################################################################# include $(top_srcdir)/config/commence.am lib_LTLIBRARIES = libdf.la FSOURCES = df24ff.f dfanf.c dfanff.f dff.c dfff.f dfpf.c dfpff.f dfr8f.c \ dfr8ff.f dfsdf.c dfsdff.f dfufp2iff.f dfutilf.c herrf.c hfilef.c \ df24f.c dfufp2if.c\ hfileff.f mfanf.c mfgrf.c mfgrff.f vattrf.c vattrff.f vgf.c vgff.f CSOURCES = atom.c bitvect.c cdeflate.c cnbit.c cnone.c crle.c cskphuff.c \ cszip.c df24.c dfan.c dfcomp.c dfconv.c dfgr.c dfgroup.c \ dfimcomp.c dfjpeg.c dfknat.c \ dfkswap.c dfp.c dfr8.c dfrle.c dfsd.c dfstubs.c \ dfufp2i.c dfunjpeg.c dfutil.c dynarray.c glist.c hbitio.c \ hblocks.c hbuffer.c hchunks.c hcomp.c hcompri.c hdatainfo.c \ hdfalloc.c herr.c hextelt.c hfile.c hfiledd.c hkit.c linklist.c \ mcache.c mfan.c mfgr.c mstdio.c tbbt.c vattr.c vconv.c vg.c \ vgp.c vhi.c vio.c vparse.c vrw.c vsfld.c CHEADERS = H4api_adpt.h df.h h4config.h hbitio.h hcomp.h hdatainfo.h hdf.h \ herr.h hfile.h hlimits.h hntdefs.h hproto.h htags.h mfan.h mfgr.h \ vg.h FHEADERS = dffunc.f90 hdf.f90 dffunc.inc hdf.inc if HDF_BUILD_FORTRAN libdf_la_SOURCES = $(CSOURCES) $(FSOURCES) include_HEADERS = $(CHEADERS) hproto_fortran.h $(FHEADERS) else libdf_la_SOURCES = $(CSOURCES) include_HEADERS = $(CHEADERS) endif # The following is a workaround. Since Fortran is included in this # Makefile.am, automake will always try to use the Fortran linker, even when # fortran has been disabled in configure. The Fortran linker gets confused # when shared libraries are enabled, so when Fortran is not enabled, # this replaces the Fortran link macro with the C link macro. if HDF_BUILD_FORTRAN # do nothing else F77LINK = $(LINK) endif SUFFIXES = .inc .f90 .inc.f90: if test -f $<; then \ sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $< > $*.f90; \ else \ sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $(srcdir)/$< > $*.f90; \ fi ############################################################################# ## And the cleanup ## ############################################################################# DISTCLEANFILES = dffunc.f90 hdf.f90 hdf4-hdf4.3.1/hdf/src/Makefile.in000066400000000000000000001246021503061704500164310ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ subdir = hdf/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__include_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = h4config.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)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdf_la_LIBADD = am__libdf_la_SOURCES_DIST = atom.c bitvect.c cdeflate.c cnbit.c \ cnone.c crle.c cskphuff.c cszip.c df24.c dfan.c dfcomp.c \ dfconv.c dfgr.c dfgroup.c dfimcomp.c dfjpeg.c dfknat.c \ dfkswap.c dfp.c dfr8.c dfrle.c dfsd.c dfstubs.c dfufp2i.c \ dfunjpeg.c dfutil.c dynarray.c glist.c hbitio.c hblocks.c \ hbuffer.c hchunks.c hcomp.c hcompri.c hdatainfo.c hdfalloc.c \ herr.c hextelt.c hfile.c hfiledd.c hkit.c linklist.c mcache.c \ mfan.c mfgr.c mstdio.c tbbt.c vattr.c vconv.c vg.c vgp.c vhi.c \ vio.c vparse.c vrw.c vsfld.c df24ff.f dfanf.c dfanff.f dff.c \ dfff.f dfpf.c dfpff.f dfr8f.c dfr8ff.f dfsdf.c dfsdff.f \ dfufp2iff.f dfutilf.c herrf.c hfilef.c df24f.c dfufp2if.c \ hfileff.f mfanf.c mfgrf.c mfgrff.f vattrf.c vattrff.f vgf.c \ vgff.f am__objects_1 = atom.lo bitvect.lo cdeflate.lo cnbit.lo cnone.lo \ crle.lo cskphuff.lo cszip.lo df24.lo dfan.lo dfcomp.lo \ dfconv.lo dfgr.lo dfgroup.lo dfimcomp.lo dfjpeg.lo dfknat.lo \ dfkswap.lo dfp.lo dfr8.lo dfrle.lo dfsd.lo dfstubs.lo \ dfufp2i.lo dfunjpeg.lo dfutil.lo dynarray.lo glist.lo \ hbitio.lo hblocks.lo hbuffer.lo hchunks.lo hcomp.lo hcompri.lo \ hdatainfo.lo hdfalloc.lo herr.lo hextelt.lo hfile.lo \ hfiledd.lo hkit.lo linklist.lo mcache.lo mfan.lo mfgr.lo \ mstdio.lo tbbt.lo vattr.lo vconv.lo vg.lo vgp.lo vhi.lo vio.lo \ vparse.lo vrw.lo vsfld.lo am__objects_2 = df24ff.lo dfanf.lo dfanff.lo dff.lo dfff.lo dfpf.lo \ dfpff.lo dfr8f.lo dfr8ff.lo dfsdf.lo dfsdff.lo dfufp2iff.lo \ dfutilf.lo herrf.lo hfilef.lo df24f.lo dfufp2if.lo hfileff.lo \ mfanf.lo mfgrf.lo mfgrff.lo vattrf.lo vattrff.lo vgf.lo \ vgff.lo @HDF_BUILD_FORTRAN_FALSE@am_libdf_la_OBJECTS = $(am__objects_1) @HDF_BUILD_FORTRAN_TRUE@am_libdf_la_OBJECTS = $(am__objects_1) \ @HDF_BUILD_FORTRAN_TRUE@ $(am__objects_2) libdf_la_OBJECTS = $(am_libdf_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/atom.Plo ./$(DEPDIR)/bitvect.Plo \ ./$(DEPDIR)/cdeflate.Plo ./$(DEPDIR)/cnbit.Plo \ ./$(DEPDIR)/cnone.Plo ./$(DEPDIR)/crle.Plo \ ./$(DEPDIR)/cskphuff.Plo ./$(DEPDIR)/cszip.Plo \ ./$(DEPDIR)/df24.Plo ./$(DEPDIR)/df24f.Plo \ ./$(DEPDIR)/dfan.Plo ./$(DEPDIR)/dfanf.Plo \ ./$(DEPDIR)/dfcomp.Plo ./$(DEPDIR)/dfconv.Plo \ ./$(DEPDIR)/dff.Plo ./$(DEPDIR)/dfgr.Plo \ ./$(DEPDIR)/dfgroup.Plo ./$(DEPDIR)/dfimcomp.Plo \ ./$(DEPDIR)/dfjpeg.Plo ./$(DEPDIR)/dfknat.Plo \ ./$(DEPDIR)/dfkswap.Plo ./$(DEPDIR)/dfp.Plo \ ./$(DEPDIR)/dfpf.Plo ./$(DEPDIR)/dfr8.Plo \ ./$(DEPDIR)/dfr8f.Plo ./$(DEPDIR)/dfrle.Plo \ ./$(DEPDIR)/dfsd.Plo ./$(DEPDIR)/dfsdf.Plo \ ./$(DEPDIR)/dfstubs.Plo ./$(DEPDIR)/dfufp2i.Plo \ ./$(DEPDIR)/dfufp2if.Plo ./$(DEPDIR)/dfunjpeg.Plo \ ./$(DEPDIR)/dfutil.Plo ./$(DEPDIR)/dfutilf.Plo \ ./$(DEPDIR)/dynarray.Plo ./$(DEPDIR)/glist.Plo \ ./$(DEPDIR)/hbitio.Plo ./$(DEPDIR)/hblocks.Plo \ ./$(DEPDIR)/hbuffer.Plo ./$(DEPDIR)/hchunks.Plo \ ./$(DEPDIR)/hcomp.Plo ./$(DEPDIR)/hcompri.Plo \ ./$(DEPDIR)/hdatainfo.Plo ./$(DEPDIR)/hdfalloc.Plo \ ./$(DEPDIR)/herr.Plo ./$(DEPDIR)/herrf.Plo \ ./$(DEPDIR)/hextelt.Plo ./$(DEPDIR)/hfile.Plo \ ./$(DEPDIR)/hfiledd.Plo ./$(DEPDIR)/hfilef.Plo \ ./$(DEPDIR)/hkit.Plo ./$(DEPDIR)/linklist.Plo \ ./$(DEPDIR)/mcache.Plo ./$(DEPDIR)/mfan.Plo \ ./$(DEPDIR)/mfanf.Plo ./$(DEPDIR)/mfgr.Plo \ ./$(DEPDIR)/mfgrf.Plo ./$(DEPDIR)/mstdio.Plo \ ./$(DEPDIR)/tbbt.Plo ./$(DEPDIR)/vattr.Plo \ ./$(DEPDIR)/vattrf.Plo ./$(DEPDIR)/vconv.Plo \ ./$(DEPDIR)/vg.Plo ./$(DEPDIR)/vgf.Plo ./$(DEPDIR)/vgp.Plo \ ./$(DEPDIR)/vhi.Plo ./$(DEPDIR)/vio.Plo ./$(DEPDIR)/vparse.Plo \ ./$(DEPDIR)/vrw.Plo ./$(DEPDIR)/vsfld.Plo 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_CC_1 = 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_CCLD_1 = F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) AM_V_F77 = $(am__v_F77_@AM_V@) am__v_F77_ = $(am__v_F77_@AM_DEFAULT_V@) am__v_F77_0 = @echo " F77 " $@; am__v_F77_1 = F77LD = $(F77) AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = SOURCES = $(libdf_la_SOURCES) DIST_SOURCES = $(am__libdf_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__include_HEADERS_DIST = H4api_adpt.h df.h h4config.h hbitio.h \ hcomp.h hdatainfo.h hdf.h herr.h hfile.h hlimits.h hntdefs.h \ hproto.h htags.h mfan.h mfgr.h vg.h hproto_fortran.h \ dffunc.f90 hdf.f90 dffunc.inc hdf.inc HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ h4config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/h4config.h.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/config/commence.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog lib_LTLIBRARIES = libdf.la FSOURCES = df24ff.f dfanf.c dfanff.f dff.c dfff.f dfpf.c dfpff.f dfr8f.c \ dfr8ff.f dfsdf.c dfsdff.f dfufp2iff.f dfutilf.c herrf.c hfilef.c \ df24f.c dfufp2if.c\ hfileff.f mfanf.c mfgrf.c mfgrff.f vattrf.c vattrff.f vgf.c vgff.f CSOURCES = atom.c bitvect.c cdeflate.c cnbit.c cnone.c crle.c cskphuff.c \ cszip.c df24.c dfan.c dfcomp.c dfconv.c dfgr.c dfgroup.c \ dfimcomp.c dfjpeg.c dfknat.c \ dfkswap.c dfp.c dfr8.c dfrle.c dfsd.c dfstubs.c \ dfufp2i.c dfunjpeg.c dfutil.c dynarray.c glist.c hbitio.c \ hblocks.c hbuffer.c hchunks.c hcomp.c hcompri.c hdatainfo.c \ hdfalloc.c herr.c hextelt.c hfile.c hfiledd.c hkit.c linklist.c \ mcache.c mfan.c mfgr.c mstdio.c tbbt.c vattr.c vconv.c vg.c \ vgp.c vhi.c vio.c vparse.c vrw.c vsfld.c CHEADERS = H4api_adpt.h df.h h4config.h hbitio.h hcomp.h hdatainfo.h hdf.h \ herr.h hfile.h hlimits.h hntdefs.h hproto.h htags.h mfan.h mfgr.h \ vg.h FHEADERS = dffunc.f90 hdf.f90 dffunc.inc hdf.inc @HDF_BUILD_FORTRAN_FALSE@libdf_la_SOURCES = $(CSOURCES) @HDF_BUILD_FORTRAN_TRUE@libdf_la_SOURCES = $(CSOURCES) $(FSOURCES) @HDF_BUILD_FORTRAN_FALSE@include_HEADERS = $(CHEADERS) @HDF_BUILD_FORTRAN_TRUE@include_HEADERS = $(CHEADERS) hproto_fortran.h $(FHEADERS) @HDF_BUILD_FORTRAN_FALSE@F77LINK = $(LINK) SUFFIXES = .inc .f90 ############################################################################# ############################################################################# DISTCLEANFILES = dffunc.f90 hdf.f90 all: h4config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .inc .f90 .c .f .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 hdf/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign hdf/src/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): h4config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/h4config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status hdf/src/h4config.h $(srcdir)/h4config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f h4config.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}; \ } libdf.la: $(libdf_la_OBJECTS) $(libdf_la_DEPENDENCIES) $(EXTRA_libdf_la_DEPENDENCIES) $(AM_V_F77LD)$(F77LINK) -rpath $(libdir) $(libdf_la_OBJECTS) $(libdf_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitvect.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdeflate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnbit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnone.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crle.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cskphuff.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cszip.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/df24.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/df24f.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfanf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfcomp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfconv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dff.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfgr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfgroup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfimcomp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfjpeg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfknat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfkswap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfpf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfr8.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfr8f.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfrle.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfsd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfsdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfstubs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfufp2i.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfufp2if.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfunjpeg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfutil.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfutilf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynarray.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbitio.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hblocks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbuffer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hchunks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcomp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcompri.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdatainfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfalloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/herr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/herrf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hextelt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hfiledd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hfilef.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hkit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linklist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcache.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfanf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfgr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfgrf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mstdio.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tbbt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vattr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vattrf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vconv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vhi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vio.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vparse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vrw.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsfld.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< .f.o: $(AM_V_F77)$(F77COMPILE) -c -o $@ $< .f.obj: $(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(AM_V_F77)$(LTF77COMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || 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)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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) $(HEADERS) h4config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/atom.Plo -rm -f ./$(DEPDIR)/bitvect.Plo -rm -f ./$(DEPDIR)/cdeflate.Plo -rm -f ./$(DEPDIR)/cnbit.Plo -rm -f ./$(DEPDIR)/cnone.Plo -rm -f ./$(DEPDIR)/crle.Plo -rm -f ./$(DEPDIR)/cskphuff.Plo -rm -f ./$(DEPDIR)/cszip.Plo -rm -f ./$(DEPDIR)/df24.Plo -rm -f ./$(DEPDIR)/df24f.Plo -rm -f ./$(DEPDIR)/dfan.Plo -rm -f ./$(DEPDIR)/dfanf.Plo -rm -f ./$(DEPDIR)/dfcomp.Plo -rm -f ./$(DEPDIR)/dfconv.Plo -rm -f ./$(DEPDIR)/dff.Plo -rm -f ./$(DEPDIR)/dfgr.Plo -rm -f ./$(DEPDIR)/dfgroup.Plo -rm -f ./$(DEPDIR)/dfimcomp.Plo -rm -f ./$(DEPDIR)/dfjpeg.Plo -rm -f ./$(DEPDIR)/dfknat.Plo -rm -f ./$(DEPDIR)/dfkswap.Plo -rm -f ./$(DEPDIR)/dfp.Plo -rm -f ./$(DEPDIR)/dfpf.Plo -rm -f ./$(DEPDIR)/dfr8.Plo -rm -f ./$(DEPDIR)/dfr8f.Plo -rm -f ./$(DEPDIR)/dfrle.Plo -rm -f ./$(DEPDIR)/dfsd.Plo -rm -f ./$(DEPDIR)/dfsdf.Plo -rm -f ./$(DEPDIR)/dfstubs.Plo -rm -f ./$(DEPDIR)/dfufp2i.Plo -rm -f ./$(DEPDIR)/dfufp2if.Plo -rm -f ./$(DEPDIR)/dfunjpeg.Plo -rm -f ./$(DEPDIR)/dfutil.Plo -rm -f ./$(DEPDIR)/dfutilf.Plo -rm -f ./$(DEPDIR)/dynarray.Plo -rm -f ./$(DEPDIR)/glist.Plo -rm -f ./$(DEPDIR)/hbitio.Plo -rm -f ./$(DEPDIR)/hblocks.Plo -rm -f ./$(DEPDIR)/hbuffer.Plo -rm -f ./$(DEPDIR)/hchunks.Plo -rm -f ./$(DEPDIR)/hcomp.Plo -rm -f ./$(DEPDIR)/hcompri.Plo -rm -f ./$(DEPDIR)/hdatainfo.Plo -rm -f ./$(DEPDIR)/hdfalloc.Plo -rm -f ./$(DEPDIR)/herr.Plo -rm -f ./$(DEPDIR)/herrf.Plo -rm -f ./$(DEPDIR)/hextelt.Plo -rm -f ./$(DEPDIR)/hfile.Plo -rm -f ./$(DEPDIR)/hfiledd.Plo -rm -f ./$(DEPDIR)/hfilef.Plo -rm -f ./$(DEPDIR)/hkit.Plo -rm -f ./$(DEPDIR)/linklist.Plo -rm -f ./$(DEPDIR)/mcache.Plo -rm -f ./$(DEPDIR)/mfan.Plo -rm -f ./$(DEPDIR)/mfanf.Plo -rm -f ./$(DEPDIR)/mfgr.Plo -rm -f ./$(DEPDIR)/mfgrf.Plo -rm -f ./$(DEPDIR)/mstdio.Plo -rm -f ./$(DEPDIR)/tbbt.Plo -rm -f ./$(DEPDIR)/vattr.Plo -rm -f ./$(DEPDIR)/vattrf.Plo -rm -f ./$(DEPDIR)/vconv.Plo -rm -f ./$(DEPDIR)/vg.Plo -rm -f ./$(DEPDIR)/vgf.Plo -rm -f ./$(DEPDIR)/vgp.Plo -rm -f ./$(DEPDIR)/vhi.Plo -rm -f ./$(DEPDIR)/vio.Plo -rm -f ./$(DEPDIR)/vparse.Plo -rm -f ./$(DEPDIR)/vrw.Plo -rm -f ./$(DEPDIR)/vsfld.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES 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 ./$(DEPDIR)/atom.Plo -rm -f ./$(DEPDIR)/bitvect.Plo -rm -f ./$(DEPDIR)/cdeflate.Plo -rm -f ./$(DEPDIR)/cnbit.Plo -rm -f ./$(DEPDIR)/cnone.Plo -rm -f ./$(DEPDIR)/crle.Plo -rm -f ./$(DEPDIR)/cskphuff.Plo -rm -f ./$(DEPDIR)/cszip.Plo -rm -f ./$(DEPDIR)/df24.Plo -rm -f ./$(DEPDIR)/df24f.Plo -rm -f ./$(DEPDIR)/dfan.Plo -rm -f ./$(DEPDIR)/dfanf.Plo -rm -f ./$(DEPDIR)/dfcomp.Plo -rm -f ./$(DEPDIR)/dfconv.Plo -rm -f ./$(DEPDIR)/dff.Plo -rm -f ./$(DEPDIR)/dfgr.Plo -rm -f ./$(DEPDIR)/dfgroup.Plo -rm -f ./$(DEPDIR)/dfimcomp.Plo -rm -f ./$(DEPDIR)/dfjpeg.Plo -rm -f ./$(DEPDIR)/dfknat.Plo -rm -f ./$(DEPDIR)/dfkswap.Plo -rm -f ./$(DEPDIR)/dfp.Plo -rm -f ./$(DEPDIR)/dfpf.Plo -rm -f ./$(DEPDIR)/dfr8.Plo -rm -f ./$(DEPDIR)/dfr8f.Plo -rm -f ./$(DEPDIR)/dfrle.Plo -rm -f ./$(DEPDIR)/dfsd.Plo -rm -f ./$(DEPDIR)/dfsdf.Plo -rm -f ./$(DEPDIR)/dfstubs.Plo -rm -f ./$(DEPDIR)/dfufp2i.Plo -rm -f ./$(DEPDIR)/dfufp2if.Plo -rm -f ./$(DEPDIR)/dfunjpeg.Plo -rm -f ./$(DEPDIR)/dfutil.Plo -rm -f ./$(DEPDIR)/dfutilf.Plo -rm -f ./$(DEPDIR)/dynarray.Plo -rm -f ./$(DEPDIR)/glist.Plo -rm -f ./$(DEPDIR)/hbitio.Plo -rm -f ./$(DEPDIR)/hblocks.Plo -rm -f ./$(DEPDIR)/hbuffer.Plo -rm -f ./$(DEPDIR)/hchunks.Plo -rm -f ./$(DEPDIR)/hcomp.Plo -rm -f ./$(DEPDIR)/hcompri.Plo -rm -f ./$(DEPDIR)/hdatainfo.Plo -rm -f ./$(DEPDIR)/hdfalloc.Plo -rm -f ./$(DEPDIR)/herr.Plo -rm -f ./$(DEPDIR)/herrf.Plo -rm -f ./$(DEPDIR)/hextelt.Plo -rm -f ./$(DEPDIR)/hfile.Plo -rm -f ./$(DEPDIR)/hfiledd.Plo -rm -f ./$(DEPDIR)/hfilef.Plo -rm -f ./$(DEPDIR)/hkit.Plo -rm -f ./$(DEPDIR)/linklist.Plo -rm -f ./$(DEPDIR)/mcache.Plo -rm -f ./$(DEPDIR)/mfan.Plo -rm -f ./$(DEPDIR)/mfanf.Plo -rm -f ./$(DEPDIR)/mfgr.Plo -rm -f ./$(DEPDIR)/mfgrf.Plo -rm -f ./$(DEPDIR)/mstdio.Plo -rm -f ./$(DEPDIR)/tbbt.Plo -rm -f ./$(DEPDIR)/vattr.Plo -rm -f ./$(DEPDIR)/vattrf.Plo -rm -f ./$(DEPDIR)/vconv.Plo -rm -f ./$(DEPDIR)/vg.Plo -rm -f ./$(DEPDIR)/vgf.Plo -rm -f ./$(DEPDIR)/vgp.Plo -rm -f ./$(DEPDIR)/vhi.Plo -rm -f ./$(DEPDIR)/vio.Plo -rm -f ./$(DEPDIR)/vparse.Plo -rm -f ./$(DEPDIR)/vrw.Plo -rm -f ./$(DEPDIR)/vsfld.Plo -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: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am 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-includeHEADERS 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .PRECIOUS: Makefile # The following is a workaround. Since Fortran is included in this # Makefile.am, automake will always try to use the Fortran linker, even when # fortran has been disabled in configure. The Fortran linker gets confused # when shared libraries are enabled, so when Fortran is not enabled, # this replaces the Fortran link macro with the C link macro. @HDF_BUILD_FORTRAN_TRUE@ # do nothing .inc.f90: if test -f $<; then \ sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $< > $*.f90; \ else \ sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $(srcdir)/$< > $*.f90; \ fi # 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: hdf4-hdf4.3.1/hdf/src/atom.c000066400000000000000000000464461503061704500155010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE atom.c - Internal storage routines for handling "atoms" REMARKS Atoms are just ID's which allow objects (void *'s currently) to be bundled into "groups" for more general storage. DESIGN The groups are stored in an array of pointers to store each group in an element. Each "atomic group" node contains a link to a hash table to manage the atoms in each group. The allowed "atomic groups" are stored in an enum (called group_t) in atom_priv.h. BUGS/LIMITATIONS Can't iterate over the atoms in a group. LOCAL ROUTINES HAIfind_atom - Returns a pointer to an atom_info_t from a atom ID HAIget_atom_node - Gets an atom node (uses the atom free list) HAIrelease_atom_node - Releases an atom node (uses the atom free list) EXPORTED ROUTINES Atom Functions: HAregister_atom - Register an object in a group and get an atom for it HAatom_object - Get the object for an atom HAatom_group - Get the group for an atom HAremove_atom - Remove an atom from a group HAsearch_atom - Search a group for a particular object Atom Group Functions: HAinit_group - Initialize a group to store atoms in HAdestroy_group - Destroy an atomic group Atom Group Cleanup: HAshutdown - Terminate various static buffers. */ #include "hdf_priv.h" #include "atom_priv.h" /* # of bits to use for Group ID in each atom (change if MAXGROUP>16) */ #define GROUP_BITS 4 #define GROUP_MASK 0x0F /* # of bits to use for the Atom index in each atom (change if MAXGROUP>16) */ #define ATOM_BITS 28 #define ATOM_MASK 0x0FFFFFFF /* # of previous atoms cached, change inline caching macros (HAatom_object & HAIswap_cache) if this changes */ #define ATOM_CACHE_SIZE 4 /* Map an atom to a Group number */ #define ATOM_TO_GROUP(a) ((group_t)((((atom_t)(a)) >> ((sizeof(atom_t) * 8) - GROUP_BITS)) & GROUP_MASK)) /* Map an atom to a hash location (assumes s is a power of 2 and smaller than the ATOM_MASK constant) */ #define ATOM_TO_LOC(a, s) ((atom_t)(a) & ((s)-1)) /* Combine a Group number and an atom index into an atom */ #define MAKE_ATOM(g, i) \ (atom_t)((((uint32)(g) & GROUP_MASK) << ((sizeof(atom_t) * 8) - GROUP_BITS)) | ((uint32)(i) & ATOM_MASK)) /* Atom information structure used */ typedef struct atom_info_struct_tag { atom_t id; /* atom ID for this info */ void **obj_ptr; /* pointer associated with the atom */ struct atom_info_struct_tag *next; /* link to next atom (in case of hash-clash) */ } atom_info_t; /* Atom group structure used */ typedef struct atom_group_struct_tag { unsigned count; /* # of times this group has been initialized */ int hash_size; /* size of the hash table to store the atoms in */ unsigned atoms; /* current number of atoms held */ unsigned nextid; /* atom ID to use for the next atom */ atom_info_t **atom_list; /* pointer to an array of ptrs to atoms */ } atom_group_t; /* Array of pointers to atomic groups */ static atom_group_t *atom_group_list[MAXGROUP] = {NULL}; /* Pointer to the atom node free list */ static atom_info_t *atom_free_list = NULL; /* Array of pointers to atomic groups */ atom_t atom_id_cache[ATOM_CACHE_SIZE] = {-1, -1, -1, -1}; void *atom_obj_cache[ATOM_CACHE_SIZE] = {NULL}; /* Private function prototypes */ static atom_info_t *HAIfind_atom(atom_t atm); static atom_info_t *HAIget_atom_node(void); static void HAIrelease_atom_node(atom_info_t *atm); /****************************************************************************** NAME HAinit_group - Initialize an atomic group DESCRIPTION Creates a global atomic group to store atoms in. If the group has already been initialized, this routine just increments the count of # of initializations and returns without trying to change the size of the hash table. NOTE: The hash size MUST be a power of 2 (checked in code) RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ int HAinit_group(group_t grp, /* IN: Group to initialize */ int hash_size /* IN: Minimum hash table size to use for group */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ int ret_value = SUCCEED; HEclear(); if ((grp <= BADGROUP || grp >= MAXGROUP) && hash_size > 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Assertion necessary for faster pointer swapping */ assert(sizeof(hdf_pint_t) == sizeof(void *)); /* Ensure hash_size is not zero, positive, and a power of two */ if (hash_size <= 0) HGOTO_ERROR(DFE_ARGS, FAIL); if (hash_size & (hash_size - 1)) HGOTO_ERROR(DFE_ARGS, FAIL); if (atom_group_list[grp] == NULL) { /* Allocate the group information */ grp_ptr = (atom_group_t *)calloc(1, sizeof(atom_group_t)); if (grp_ptr == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); atom_group_list[grp] = grp_ptr; } else /* Get the pointer to the existing group */ grp_ptr = atom_group_list[grp]; if (grp_ptr->count == 0) { /* Initialize the atom group structure */ grp_ptr->hash_size = hash_size; grp_ptr->atoms = 0; grp_ptr->nextid = 0; if ((grp_ptr->atom_list = (atom_info_t **)calloc((size_t)hash_size, sizeof(atom_info_t *))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* Increment the count of the times this group has been initialized */ grp_ptr->count++; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (grp_ptr != NULL) { free(grp_ptr->atom_list); free(grp_ptr); } } return ret_value; } /* end HAinit_group() */ /****************************************************************************** NAME HAdestroy_group - Destroy an atomic group DESCRIPTION Destroys an atomic group which atoms are stored in. If the group still has atoms which are registered, this routine fails. If there have been multiple initializations of the group, this routine just decrements the count of initializations and does not check the atoms out-standing. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ int HAdestroy_group(group_t grp /* IN: Group to destroy */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ int ret_value = SUCCEED; HEclear(); if (grp <= BADGROUP || grp >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); grp_ptr = atom_group_list[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Decrement the number of users of the atomic group */ if ((--(grp_ptr->count)) == 0) { unsigned i; for (i = 0; i < ATOM_CACHE_SIZE; i++) if (ATOM_TO_GROUP(atom_id_cache[i]) == grp) { atom_id_cache[i] = (-1); atom_obj_cache[i] = NULL; } free(grp_ptr->atom_list); grp_ptr->atom_list = NULL; } done: return ret_value; } /* end HAdestroy_group() */ /****************************************************************************** NAME HAregister_atom - Register an object in a group and get an atom for it. DESCRIPTION Registers an object in a group and returns an atom for it. This routine does _not_ check for unique-ness of the objects, if you register an object twice, you will get two different atoms for it. This routine does make certain that each atom in a group is unique. Atoms are created by getting a unique number for the group the atom is in and incorporating the group into the atom which is returned to the user. RETURNS Returns atom if successful and FAIL otherwise *******************************************************************************/ atom_t HAregister_atom(group_t grp, /* IN: Group to register the object in */ void *object /* IN: Object to attach to atom */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ atom_info_t *atm_ptr = NULL; /* ptr to the new atom */ atom_t atm_id; /* new atom ID */ unsigned hash_loc; /* new item's hash table location */ atom_t ret_value = SUCCEED; HEclear(); if (grp <= BADGROUP || grp >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); grp_ptr = atom_group_list[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((atm_ptr = HAIget_atom_node()) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Create the atom & it's ID */ atm_id = MAKE_ATOM(grp, grp_ptr->nextid); atm_ptr->id = atm_id; atm_ptr->obj_ptr = object; atm_ptr->next = NULL; /* hash bucket already full, prepend to front of chain */ hash_loc = grp_ptr->nextid % (unsigned)grp_ptr->hash_size; if (grp_ptr->atom_list[hash_loc] != NULL) atm_ptr->next = grp_ptr->atom_list[hash_loc]; /* Insert into the group */ grp_ptr->atom_list[hash_loc] = atm_ptr; grp_ptr->atoms++; grp_ptr->nextid++; ret_value = atm_id; done: return ret_value; } /* end HAregister_atom() */ /****************************************************************************** NAME HAatom_object - Returns to the object ptr for the atom DESCRIPTION Retrieves the object ptr which is associated with the atom. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ void * HAPatom_object(atom_t atm /* IN: Atom to retrieve object for */ ) { atom_info_t *atm_ptr = NULL; /* ptr to the new atom */ void *ret_value = NULL; HEclear(); /* General lookup of the atom */ if ((atm_ptr = HAIfind_atom(atm)) == NULL) HGOTO_ERROR(DFE_INTERNAL, NULL); /* Check if we've found the correct atom */ if (atm_ptr != NULL) ret_value = atm_ptr->obj_ptr; done: return ret_value; } /* end HAatom_object() */ /****************************************************************************** NAME HAatom_group - Returns to the group for the atom DESCRIPTION Retrieves the group which is associated with the atom. RETURNS Returns group if successful and BADGROUP otherwise *******************************************************************************/ group_t HAatom_group(atom_t atm /* IN: Atom to retrieve group for */ ) { group_t ret_value = BADGROUP; HEclear(); ret_value = ATOM_TO_GROUP(atm); if (ret_value <= BADGROUP || ret_value >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, BADGROUP); done: return ret_value; } /* end HAatom_group() */ /****************************************************************************** NAME HAremove_atom - Removes an atom from a group DESCRIPTION Removes an atom from a group. RETURNS Returns atom's object if successful and NULL otherwise *******************************************************************************/ void * HAremove_atom(atom_t atm /* IN: Atom to remove */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ atom_info_t *curr_atm = NULL; /* ptr to the current atom */ atom_info_t *last_atm = NULL; /* ptr to the last atom */ group_t grp; /* atom's atomic group */ unsigned hash_loc; /* atom's hash table location */ void *ret_value = NULL; HEclear(); grp = ATOM_TO_GROUP(atm); if (grp <= BADGROUP || grp >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, NULL); grp_ptr = atom_group_list[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(DFE_INTERNAL, NULL); /* Get the location in which the atom is located */ hash_loc = (unsigned)ATOM_TO_LOC(atm, grp_ptr->hash_size); curr_atm = grp_ptr->atom_list[hash_loc]; if (curr_atm == NULL) HGOTO_ERROR(DFE_INTERNAL, NULL); last_atm = NULL; while (curr_atm != NULL) { if (curr_atm->id == atm) break; last_atm = curr_atm; curr_atm = curr_atm->next; } if (curr_atm != NULL) { if (last_atm == NULL) /* atom is the first the chain */ grp_ptr->atom_list[hash_loc] = curr_atm->next; else last_atm->next = curr_atm->next; ret_value = curr_atm->obj_ptr; HAIrelease_atom_node(curr_atm); } else /* couldn't find the atom in the proper place */ HGOTO_ERROR(DFE_INTERNAL, NULL); /* Delete object from cache */ for (int i = 0; i < ATOM_CACHE_SIZE; i++) if (atom_id_cache[i] == atm) { atom_id_cache[i] = (-1); atom_obj_cache[i] = NULL; break; /* we assume there is only one instance in the cache */ } /* Decrement the number of atoms in the group */ (grp_ptr->atoms)--; done: return ret_value; } /* end HAremove_atom() */ /****************************************************************************** NAME HAsearch_atom - Search for an object in a group and get it's pointer. DESCRIPTION Searches for an object in a group and returns the pointer to it. This routine calls the function pointer passed in for each object in the group until it finds a match. Currently there is no way to resume a search. RETURNS Returns pointer an atom's object if successful and NULL otherwise *******************************************************************************/ void * HAsearch_atom(group_t grp, /* IN: Group to search for the object in */ HAsearch_func_t func, /* IN: Ptr to the comparison function */ const void *key /* IN: pointer to key to compare against */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ atom_info_t *atm_ptr = NULL; /* ptr to the new atom */ void *ret_value = NULL; HEclear(); if (grp <= BADGROUP || grp >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, NULL); grp_ptr = atom_group_list[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(DFE_INTERNAL, NULL); /* Start at the beginning of the array */ for (int i = 0; i < grp_ptr->hash_size; i++) { atm_ptr = grp_ptr->atom_list[i]; while (atm_ptr != NULL) { if ((*func)(atm_ptr->obj_ptr, key)) HGOTO_DONE(atm_ptr->obj_ptr); /* found the item we are looking for */ atm_ptr = atm_ptr->next; } } done: return ret_value; } /* end HAsearch_atom() */ /****************************************************************************** NAME HAIfind_atom - Finds a atom in a group DESCRIPTION Retrieves the atom ptr which is associated with the atom. RETURNS Returns atom ptr if successful and NULL otherwise *******************************************************************************/ static atom_info_t * HAIfind_atom(atom_t atm /* IN: Atom to retrieve atom for */ ) { atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */ atom_info_t *atm_ptr = NULL; /* ptr to the new atom */ group_t grp; /* atom's atomic group */ unsigned hash_loc; /* atom's hash table location */ atom_info_t *ret_value = NULL; HEclear(); grp = ATOM_TO_GROUP(atm); if (grp <= BADGROUP || grp >= MAXGROUP) HGOTO_ERROR(DFE_ARGS, NULL); grp_ptr = atom_group_list[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(DFE_INTERNAL, NULL); /* Get the location in which the atom is located */ hash_loc = (unsigned)ATOM_TO_LOC(atm, grp_ptr->hash_size); atm_ptr = grp_ptr->atom_list[hash_loc]; if (atm_ptr == NULL) HGOTO_ERROR(DFE_INTERNAL, NULL); while (atm_ptr != NULL) { if (atm_ptr->id == atm) break; atm_ptr = atm_ptr->next; } if (atm_ptr) { /* if found, add it to the end of the cached list */ atom_id_cache[ATOM_CACHE_SIZE - 1] = atm; atom_obj_cache[ATOM_CACHE_SIZE - 1] = atm_ptr->obj_ptr; } ret_value = atm_ptr; done: return ret_value; } /* end HAIfind_atom() */ /****************************************************************************** NAME HAIget_atom_node - Gets an atom node DESCRIPTION Either gets an atom node from the free list (if there is one available) or allocate a node. RETURNS Returns atom ptr if successful and NULL otherwise *******************************************************************************/ static atom_info_t * HAIget_atom_node(void) { atom_info_t *ret_value = NULL; HEclear(); if (atom_free_list != NULL) { ret_value = atom_free_list; atom_free_list = atom_free_list->next; } else { if ((ret_value = (atom_info_t *)malloc(sizeof(atom_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } done: return ret_value; } /* end HAIget_atom_node() */ /****************************************************************************** NAME HAIrelease_atom_node - Releases an atom node DESCRIPTION Puts an atom node into the free list RETURNS No return value *******************************************************************************/ static void HAIrelease_atom_node(atom_info_t *atm) { /* Insert the atom at the beginning of the free list */ atm->next = atom_free_list; atom_free_list = atm; } /* end HAIrelease_atom_node() */ /*-------------------------------------------------------------------------- NAME HAshutdown PURPOSE Terminate various static buffers. USAGE int HAshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the HA routines. COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend --------------------------------------------------------------------------*/ int HAshutdown(void) { atom_info_t *curr; /* Release the free-list if it exists */ if (atom_free_list != NULL) { while (atom_free_list != NULL) { curr = atom_free_list; atom_free_list = atom_free_list->next; free(curr); } } for (int i = 0; i < (int)MAXGROUP; i++) if (atom_group_list[i] != NULL) { free(atom_group_list[i]->atom_list); free(atom_group_list[i]); atom_group_list[i] = NULL; } return SUCCEED; } /* end HAshutdown() */ hdf4-hdf4.3.1/hdf/src/atom_priv.h000066400000000000000000000210241503061704500165270ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: atom_priv.h * Purpose: header file for atom API *---------------------------------------------------------------------------*/ #ifndef H4_ATOM_PRIV_H #define H4_ATOM_PRIV_H #include "hdf_priv.h" /* Do swap using XOR operator. Ugly but fast... -QAK */ #define HAIswap_cache(i, j) \ atom_id_cache[i] ^= atom_id_cache[j], \ atom_obj_cache[i] = (void *)((hdf_pint_t)atom_obj_cache[j] ^ (hdf_pint_t)atom_obj_cache[i]), \ atom_id_cache[j] ^= atom_id_cache[i], \ atom_obj_cache[j] = (void *)((hdf_pint_t)atom_obj_cache[i] ^ (hdf_pint_t)atom_obj_cache[j]), \ atom_id_cache[i] ^= atom_id_cache[j], \ atom_obj_cache[i] = (void *)((hdf_pint_t)atom_obj_cache[i] ^ (hdf_pint_t)atom_obj_cache[j]) /* Note! This is hardwired to the atom cache value being 4 */ #define HAatom_object(atm) \ (atom_id_cache[0] == atm ? atom_obj_cache[0] \ : atom_id_cache[1] == atm ? (HAIswap_cache(0, 1), atom_obj_cache[0]) \ : atom_id_cache[2] == atm ? (HAIswap_cache(1, 2), atom_obj_cache[1]) \ : atom_id_cache[3] == atm ? (HAIswap_cache(2, 3), atom_obj_cache[2]) \ : HAPatom_object(atm)) #include "hdf.h" /* Group values allowed */ typedef enum { BADGROUP = (-1), /* Invalid Group */ DDGROUP = 0, /* Group ID for DD objects */ AIDGROUP = 1, /* Group ID for access ID objects */ FIDGROUP = 2, /* Group ID for file ID objects */ VGIDGROUP = 3, /* Group ID for Vgroup ID objects */ VSIDGROUP = 4, /* Group ID for Vdata ID objects */ GRIDGROUP = 5, /* Group ID for GR ID objects */ RIIDGROUP = 6, /* Group ID for RI ID objects */ BITIDGROUP = 7, /* Group ID for Bitfile ID objects */ ANIDGROUP = 8, /* Group ID for Annotation ID objects */ MAXGROUP /* Highest group in group_t (Invalid as true group) */ } group_t; /* Type of atoms to return to users */ typedef int32 atom_t; /* Type of the function to compare objects & keys */ typedef int (*HAsearch_func_t)(const void *obj, const void *key); #ifdef __cplusplus extern "C" { #endif /* Global variables exposed by HAatom_object */ HDFLIBAPI atom_t atom_id_cache[]; HDFLIBAPI void *atom_obj_cache[]; /****************************************************************************** NAME HAinit_group - Initialize an atomic group DESCRIPTION Creates an atomic group to store atoms in. If the group has already been initialized, this routine just increments the count of # of initializations and returns without trying to change the size of the hash table. NOTE: The hash size MUST be a power of 2 (checked in code) RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI int HAinit_group(group_t grp, /* IN: Group to initialize */ int hash_size /* IN: Minimum hash table size to use for group */ ); /****************************************************************************** NAME HAdestroy_group - Destroy an atomic group DESCRIPTION Destroys an atomic group which atoms are stored in. If the group still has atoms which are registered, this routine fails. If there have been multiple initializations of the group, this routine just decrements the count of initializations and does not check the atoms out-standing. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI int HAdestroy_group(group_t grp /* IN: Group to destroy */ ); /****************************************************************************** NAME HAregister_atom - Register an object in a group and get an atom for it. DESCRIPTION Registers an object in a group and returns an atom for it. This routine does _not_ check for unique-ness of the objects, if you register an object twice, you will get two different atoms for it. This routine does make certain that each atom in a group is unique. Atoms are created by getting a unique number for the group the atom is in and incorporating the group into the atom which is returned to the user. RETURNS Returns atom if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI atom_t HAregister_atom(group_t grp, /* IN: Group to register the object in */ void *object /* IN: Object to attach to atom */ ); /****************************************************************************** NAME HAatom_object - Returns to the object ptr for the atom DESCRIPTION Retrieves the object ptr which is associated with the atom. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ HDFLIBAPI void *HAPatom_object(atom_t atm /* IN: Atom to retrieve object for */ ); /****************************************************************************** NAME HAatom_group - Returns to the group for the atom DESCRIPTION Retrieves the group which is associated with the atom. RETURNS Returns group if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI group_t HAatom_group(atom_t atm /* IN: Atom to retrieve group for */ ); /****************************************************************************** NAME HAremove_atom - Removes an atom from a group DESCRIPTION Removes an atom from a group. RETURNS Returns atom's object if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI void *HAremove_atom(atom_t atm /* IN: Atom to remove */ ); /****************************************************************************** NAME HAsearch_atom - Search for an object in a group and get it's pointer. DESCRIPTION Searches for an object in a group and returns the pointer to it. This routine calls the function pointer passed in for each object in the group until it finds a match. Currently there is no way to resume a search. RETURNS Returns pointer an atom's object if successful and NULL otherwise *******************************************************************************/ HDFLIBAPI void *HAsearch_atom(group_t grp, /* IN: Group to search for the object in */ HAsearch_func_t func, /* IN: Ptr to the comparison function */ const void *key /* IN: pointer to key to compare against */ ); /****************************************************************************** NAME HAshutdown - Terminate various static buffers. DESCRIPTION Free various buffers allocated in the HA routines. RETURNS Returns SUCCEED/FAIL *******************************************************************************/ HDFLIBAPI int HAshutdown(void); #ifdef __cplusplus } #endif #endif /* H4_ATOM_PRIV_H */ hdf4-hdf4.3.1/hdf/src/bitvect.c000066400000000000000000000537071503061704500161770ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE bitvect.c PURPOSE Provide an API for dynamically-sized bit-vectors or "bit-sets" REMARKS These function manipulate ordered sets of "bits". DESIGN Each bit-vector is stored in memory as an array of unsigned 8-bit integers (uint8's in HDF types), which can grow as additional bits are flagged in the bit-vector. Each bit-vector is stored with the lowest bits in location 0 in the array of base type (uint8s currently) and the bits in "standard" C order (i.e. bit 0 is the lowest bit in the byte) in each byte. This does make for a slightly strange "bit-swapped" storage, but is the most efficient. The data structure is optimized for finding the next zero bit an array and caches this location when appropriate. It is NOT similarly optimized for finding 1 bits as that is not a use case in the HDF4 library. */ #include "hdf_priv.h" #include "bitvect_priv.h" /* Base type of the array used to store the bits */ typedef uint8 bv_base; /* # of bits in the base type of the array used to store the bits */ #define BV_BASE_BITS 8 /* bit-vector structure used * * All values are set to be 32-bit signed integers since that's what the * API accepts (negative values are reserved for errors). Bit vectors * larger than 2Gbits would require an internal API change. */ typedef struct bv_struct_tag { int32 bits_used; /* The actual number of bits current in use */ int32 array_size; /* The number of bv_base elements in the bit-vector */ int32 last_zero; /* The last location we know had a zero bit */ bv_base *buffer; /* Pointer to the buffer used to store the bits */ } bv_struct; /* Table of bits for each bit position */ /* (This will need to be changed/expanded if another base type is used) */ static const uint8 bv_bit_value[8] = { 1, /* bit 0's value is 1 */ 2, /* bit 1's value is 2 */ 4, /* bit 2's value is 4 */ 8, /* bit 3's value is 8 */ 16, /* bit 4's value is 16 */ 32, /* bit 5's value is 32 */ 64, /* bit 6's value is 64 */ 128 /* bit 7's value is 128 */ }; /* Table of bit-masks for each number of bits in a byte */ /* (This will need to be changed/expanded if another base type is used) */ static const uint8 bv_bit_mask[9] = { 0x00, /* 0 bits is a mask of 0x00 */ 0x01, /* 1 bits is a mask of 0x01 */ 0x03, /* 2 bits is a mask of 0x03 */ 0x07, /* 3 bits is a mask of 0x07 */ 0x0F, /* 4 bits is a mask of 0x0F */ 0x1F, /* 5 bits is a mask of 0x1F */ 0x3F, /* 6 bits is a mask of 0x3F */ 0x7F, /* 7 bits is a mask of 0x7F */ 0xFF /* 8 bits is a mask of 0xFF */ }; /* Table of "first zero bit" for each byte value */ /* (This will need to be changed/expanded if another base type is used) */ static const int8 bv_first_zero[256] = { 0, /* "0" - bit 0 is lowest zero */ 1, /* "1" - bit 1 is lowest zero */ 0, /* "2" - bit 0 is lowest zero */ 2, /* "3" - bit 2 is lowest zero */ 0, /* "4" - bit 0 is lowest zero */ 1, /* "5" - bit 1 is lowest zero */ 0, /* "6" - bit 0 is lowest zero */ 3, /* "7" - bit 3 is lowest zero */ 0, /* "8" - bit 0 is lowest zero */ 1, /* "9" - bit 1 is lowest zero */ 0, /* "10" - bit 0 is lowest zero */ 2, /* "11" - bit 2 is lowest zero */ 0, /* "12" - bit 0 is lowest zero */ 1, /* "13" - bit 1 is lowest zero */ 0, /* "14" - bit 0 is lowest zero */ 4, /* "15" - bit 4 is lowest zero */ 0, /* "16" - bit 0 is lowest zero */ 1, /* "17" - bit 1 is lowest zero */ 0, /* "18" - bit 0 is lowest zero */ 2, /* "19" - bit 2 is lowest zero */ 0, /* "20" - bit 0 is lowest zero */ 1, /* "21" - bit 1 is lowest zero */ 0, /* "22" - bit 0 is lowest zero */ 3, /* "23" - bit 3 is lowest zero */ 0, /* "24" - bit 0 is lowest zero */ 1, /* "25" - bit 1 is lowest zero */ 0, /* "26" - bit 0 is lowest zero */ 2, /* "27" - bit 2 is lowest zero */ 0, /* "28" - bit 0 is lowest zero */ 1, /* "29" - bit 1 is lowest zero */ 0, /* "30" - bit 0 is lowest zero */ 5, /* "31" - bit 5 is lowest zero */ 0, /* "32" - bit 0 is lowest zero */ 1, /* "33" - bit 1 is lowest zero */ 0, /* "34" - bit 0 is lowest zero */ 2, /* "35" - bit 2 is lowest zero */ 0, /* "36" - bit 0 is lowest zero */ 1, /* "37" - bit 1 is lowest zero */ 0, /* "38" - bit 0 is lowest zero */ 3, /* "39" - bit 3 is lowest zero */ 0, /* "40" - bit 0 is lowest zero */ 1, /* "41" - bit 1 is lowest zero */ 0, /* "42" - bit 0 is lowest zero */ 2, /* "43" - bit 2 is lowest zero */ 0, /* "44" - bit 0 is lowest zero */ 1, /* "45" - bit 1 is lowest zero */ 0, /* "46" - bit 0 is lowest zero */ 4, /* "47" - bit 4 is lowest zero */ 0, /* "48" - bit 0 is lowest zero */ 1, /* "49" - bit 1 is lowest zero */ 0, /* "50" - bit 0 is lowest zero */ 2, /* "51" - bit 2 is lowest zero */ 0, /* "52" - bit 0 is lowest zero */ 1, /* "53" - bit 1 is lowest zero */ 0, /* "54" - bit 0 is lowest zero */ 3, /* "55" - bit 3 is lowest zero */ 0, /* "56" - bit 0 is lowest zero */ 1, /* "57" - bit 1 is lowest zero */ 0, /* "58" - bit 0 is lowest zero */ 2, /* "59" - bit 2 is lowest zero */ 0, /* "60" - bit 0 is lowest zero */ 1, /* "61" - bit 1 is lowest zero */ 0, /* "62" - bit 0 is lowest zero */ 6, /* "63" - bit 6 is lowest zero */ 0, /* "64" - bit 0 is lowest zero */ 1, /* "65" - bit 1 is lowest zero */ 0, /* "66" - bit 0 is lowest zero */ 2, /* "67" - bit 2 is lowest zero */ 0, /* "68" - bit 0 is lowest zero */ 1, /* "69" - bit 1 is lowest zero */ 0, /* "70" - bit 0 is lowest zero */ 3, /* "71" - bit 3 is lowest zero */ 0, /* "72" - bit 0 is lowest zero */ 1, /* "73" - bit 1 is lowest zero */ 0, /* "74" - bit 0 is lowest zero */ 2, /* "75" - bit 2 is lowest zero */ 0, /* "76" - bit 0 is lowest zero */ 1, /* "77" - bit 1 is lowest zero */ 0, /* "78" - bit 0 is lowest zero */ 4, /* "79" - bit 4 is lowest zero */ 0, /* "80" - bit 0 is lowest zero */ 1, /* "81" - bit 1 is lowest zero */ 0, /* "82" - bit 0 is lowest zero */ 2, /* "83" - bit 2 is lowest zero */ 0, /* "84" - bit 0 is lowest zero */ 1, /* "85" - bit 1 is lowest zero */ 0, /* "86" - bit 0 is lowest zero */ 3, /* "87" - bit 3 is lowest zero */ 0, /* "88" - bit 0 is lowest zero */ 1, /* "89" - bit 1 is lowest zero */ 0, /* "90" - bit 0 is lowest zero */ 2, /* "91" - bit 2 is lowest zero */ 0, /* "92" - bit 0 is lowest zero */ 1, /* "93" - bit 1 is lowest zero */ 0, /* "94" - bit 0 is lowest zero */ 5, /* "95" - bit 5 is lowest zero */ 0, /* "96" - bit 0 is lowest zero */ 1, /* "97" - bit 1 is lowest zero */ 0, /* "98" - bit 0 is lowest zero */ 2, /* "99" - bit 2 is lowest zero */ 0, /* "100" - bit 0 is lowest zero */ 1, /* "101" - bit 1 is lowest zero */ 0, /* "102" - bit 0 is lowest zero */ 3, /* "103" - bit 3 is lowest zero */ 0, /* "104" - bit 0 is lowest zero */ 1, /* "105" - bit 1 is lowest zero */ 0, /* "106" - bit 0 is lowest zero */ 2, /* "107" - bit 2 is lowest zero */ 0, /* "108" - bit 0 is lowest zero */ 1, /* "109" - bit 1 is lowest zero */ 0, /* "110" - bit 0 is lowest zero */ 4, /* "111" - bit 4 is lowest zero */ 0, /* "112" - bit 0 is lowest zero */ 1, /* "113" - bit 1 is lowest zero */ 0, /* "114" - bit 0 is lowest zero */ 2, /* "115" - bit 2 is lowest zero */ 0, /* "116" - bit 0 is lowest zero */ 1, /* "117" - bit 1 is lowest zero */ 0, /* "118" - bit 0 is lowest zero */ 3, /* "119" - bit 3 is lowest zero */ 0, /* "120" - bit 0 is lowest zero */ 1, /* "121" - bit 1 is lowest zero */ 0, /* "122" - bit 0 is lowest zero */ 2, /* "123" - bit 2 is lowest zero */ 0, /* "124" - bit 0 is lowest zero */ 1, /* "125" - bit 1 is lowest zero */ 0, /* "126" - bit 0 is lowest zero */ 7, /* "127" - bit 7 is lowest zero */ 0, /* "128" - bit 0 is lowest zero */ 1, /* "129" - bit 1 is lowest zero */ 0, /* "130" - bit 0 is lowest zero */ 2, /* "131" - bit 2 is lowest zero */ 0, /* "132" - bit 0 is lowest zero */ 1, /* "133" - bit 1 is lowest zero */ 0, /* "134" - bit 0 is lowest zero */ 3, /* "135" - bit 3 is lowest zero */ 0, /* "136" - bit 0 is lowest zero */ 1, /* "137" - bit 1 is lowest zero */ 0, /* "138" - bit 0 is lowest zero */ 2, /* "139" - bit 2 is lowest zero */ 0, /* "140" - bit 0 is lowest zero */ 1, /* "141" - bit 1 is lowest zero */ 0, /* "142" - bit 0 is lowest zero */ 4, /* "143" - bit 4 is lowest zero */ 0, /* "144" - bit 0 is lowest zero */ 1, /* "145" - bit 1 is lowest zero */ 0, /* "146" - bit 0 is lowest zero */ 2, /* "147" - bit 2 is lowest zero */ 0, /* "148" - bit 0 is lowest zero */ 1, /* "149" - bit 1 is lowest zero */ 0, /* "150" - bit 0 is lowest zero */ 3, /* "151" - bit 3 is lowest zero */ 0, /* "152" - bit 0 is lowest zero */ 1, /* "153" - bit 1 is lowest zero */ 0, /* "154" - bit 0 is lowest zero */ 2, /* "155" - bit 2 is lowest zero */ 0, /* "156" - bit 0 is lowest zero */ 1, /* "157" - bit 1 is lowest zero */ 0, /* "158" - bit 0 is lowest zero */ 5, /* "159" - bit 5 is lowest zero */ 0, /* "160" - bit 0 is lowest zero */ 1, /* "161" - bit 1 is lowest zero */ 0, /* "162" - bit 0 is lowest zero */ 2, /* "163" - bit 2 is lowest zero */ 0, /* "164" - bit 0 is lowest zero */ 1, /* "165" - bit 1 is lowest zero */ 0, /* "166" - bit 0 is lowest zero */ 3, /* "167" - bit 3 is lowest zero */ 0, /* "168" - bit 0 is lowest zero */ 1, /* "169" - bit 1 is lowest zero */ 0, /* "170" - bit 0 is lowest zero */ 2, /* "171" - bit 2 is lowest zero */ 0, /* "172" - bit 0 is lowest zero */ 1, /* "173" - bit 1 is lowest zero */ 0, /* "174" - bit 0 is lowest zero */ 4, /* "175" - bit 4 is lowest zero */ 0, /* "176" - bit 0 is lowest zero */ 1, /* "177" - bit 1 is lowest zero */ 0, /* "178" - bit 0 is lowest zero */ 2, /* "179" - bit 2 is lowest zero */ 0, /* "180" - bit 0 is lowest zero */ 1, /* "181" - bit 1 is lowest zero */ 0, /* "182" - bit 0 is lowest zero */ 3, /* "183" - bit 3 is lowest zero */ 0, /* "184" - bit 0 is lowest zero */ 1, /* "185" - bit 1 is lowest zero */ 0, /* "186" - bit 0 is lowest zero */ 2, /* "187" - bit 2 is lowest zero */ 0, /* "188" - bit 0 is lowest zero */ 1, /* "189" - bit 1 is lowest zero */ 0, /* "190" - bit 0 is lowest zero */ 6, /* "191" - bit 6 is lowest zero */ 0, /* "192" - bit 0 is lowest zero */ 1, /* "193" - bit 1 is lowest zero */ 0, /* "194" - bit 0 is lowest zero */ 2, /* "195" - bit 2 is lowest zero */ 0, /* "196" - bit 0 is lowest zero */ 1, /* "197" - bit 1 is lowest zero */ 0, /* "198" - bit 0 is lowest zero */ 3, /* "199" - bit 3 is lowest zero */ 0, /* "200" - bit 0 is lowest zero */ 1, /* "201" - bit 1 is lowest zero */ 0, /* "202" - bit 0 is lowest zero */ 2, /* "203" - bit 2 is lowest zero */ 0, /* "204" - bit 0 is lowest zero */ 1, /* "205" - bit 1 is lowest zero */ 0, /* "206" - bit 0 is lowest zero */ 4, /* "207" - bit 4 is lowest zero */ 0, /* "208" - bit 0 is lowest zero */ 1, /* "209" - bit 1 is lowest zero */ 0, /* "210" - bit 0 is lowest zero */ 2, /* "211" - bit 2 is lowest zero */ 0, /* "212" - bit 0 is lowest zero */ 1, /* "213" - bit 1 is lowest zero */ 0, /* "214" - bit 0 is lowest zero */ 3, /* "215" - bit 3 is lowest zero */ 0, /* "216" - bit 0 is lowest zero */ 1, /* "217" - bit 1 is lowest zero */ 0, /* "218" - bit 0 is lowest zero */ 2, /* "219" - bit 2 is lowest zero */ 0, /* "220" - bit 0 is lowest zero */ 1, /* "221" - bit 1 is lowest zero */ 0, /* "222" - bit 0 is lowest zero */ 5, /* "223" - bit 5 is lowest zero */ 0, /* "224" - bit 0 is lowest zero */ 1, /* "225" - bit 1 is lowest zero */ 0, /* "226" - bit 0 is lowest zero */ 2, /* "227" - bit 2 is lowest zero */ 0, /* "228" - bit 0 is lowest zero */ 1, /* "229" - bit 1 is lowest zero */ 0, /* "230" - bit 0 is lowest zero */ 3, /* "231" - bit 3 is lowest zero */ 0, /* "232" - bit 0 is lowest zero */ 1, /* "233" - bit 1 is lowest zero */ 0, /* "234" - bit 0 is lowest zero */ 2, /* "235" - bit 2 is lowest zero */ 0, /* "236" - bit 0 is lowest zero */ 1, /* "237" - bit 1 is lowest zero */ 0, /* "238" - bit 0 is lowest zero */ 4, /* "239" - bit 4 is lowest zero */ 0, /* "240" - bit 0 is lowest zero */ 1, /* "241" - bit 1 is lowest zero */ 0, /* "242" - bit 0 is lowest zero */ 2, /* "243" - bit 2 is lowest zero */ 0, /* "244" - bit 0 is lowest zero */ 1, /* "245" - bit 1 is lowest zero */ 0, /* "246" - bit 0 is lowest zero */ 3, /* "247" - bit 3 is lowest zero */ 0, /* "248" - bit 0 is lowest zero */ 1, /* "249" - bit 1 is lowest zero */ 0, /* "250" - bit 0 is lowest zero */ 2, /* "251" - bit 2 is lowest zero */ 0, /* "252" - bit 0 is lowest zero */ 1, /* "253" - bit 1 is lowest zero */ 0, /* "254" - bit 0 is lowest zero */ 8 /* "255" - bit 8 is lowest zero */ }; /*-------------------------------------------------------------------------- NAME bv_new PURPOSE Create a new bit-vector. USAGE bv_ptr bv_new(num_bits) int32 num_bits; IN: The initial number of bits in the vector RETURNS Returns either a valid bv_ptr on succeed or NULL on failure. DESCRIPTION Creates a new bit-vector with a certain initial # of bits. COMMENTS, BUGS, ASSUMPTIONS * If num_bits is set to -1, then the default number of bits is used. * num_bits must be positive or -1. --------------------------------------------------------------------------*/ bv_ptr bv_new(int32 num_bits) { int32 base_elements; /* # of base elements needed to store the # of bits requested */ size_t array_mem_size; /* size of the array in memory */ bv_ptr b = NULL; /* ptr to the new bit-vector */ /* Check for invalid numbers of bits */ if (num_bits < -1 || num_bits == 0) goto error; /* Check for requesting the default # of bits */ if (num_bits == -1) num_bits = BV_DEFAULT_BITS; base_elements = ((num_bits % BV_BASE_BITS) > 0) ? (num_bits / BV_BASE_BITS) + 1 : (num_bits / BV_BASE_BITS); if ((b = malloc(sizeof(bv_struct))) == NULL) goto error; b->bits_used = num_bits; b->array_size = ((base_elements / BV_CHUNK_SIZE) + 1) * BV_CHUNK_SIZE; array_mem_size = sizeof(bv_base) * (size_t)(b->array_size); if ((b->buffer = malloc(array_mem_size)) == NULL) goto error; /* Zero the initial bits */ memset(b->buffer, 0, array_mem_size); b->last_zero = 0; return b; error: if (b != NULL) free(b->buffer); free(b); return NULL; } /* bv_new() */ /*-------------------------------------------------------------------------- NAME bv_delete PURPOSE Dispose of a new bit-vector. USAGE intn bv_delete(b) bv_ptr b; IN: Bit-vector to dispose of RETURNS Returns SUCCEED/FAIL DESCRIPTION Disposes of a bit-vector created by bv_new. This routine is responsible for completely cleaning up the bit-vector and disposing of all dynamically allocated space. COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ intn bv_delete(bv_ptr b) { if (b == NULL || b->buffer == NULL) return FAIL; free(b->buffer); free(b); return SUCCEED; } /* bv_delete() */ /*-------------------------------------------------------------------------- NAME bv_set PURPOSE Set a bit in a bit-vector USAGE intn bv_set(b,bit_num,value) bv_ptr b; IN: Bit-vector to use int32 bit_num; IN: bit to set bv_bool value; IN: bit value to set the bit to RETURNS Returns SUCCEED/FAIL DESCRIPTION Sets a bit in a bit-vector to a bit value. Also extends the bit-vector if the bit to set is beyond the end of the current bit-vector and the bit-vector is marked as extendable. COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ intn bv_set(bv_ptr b, int32 bit_num, bv_bool value) { int32 base_elem; /* the base array index of the bit */ int32 bit_elem; /* the bit index of the bit to set */ if (b == NULL || bit_num < 0) return FAIL; base_elem = bit_num / BV_BASE_BITS; bit_elem = bit_num % BV_BASE_BITS; /* Check if the bit is beyond the end of the current bit-vector */ if (bit_num >= b->bits_used) { if (base_elem < b->array_size) { /* just use more bits in the currently allocated block */ b->bits_used = bit_num + 1; } else { /* allocate more space for bits */ bv_base *old_buf = b->buffer; /* ptr to the old buffer */ int32 num_chunks; /* number of chunks to grab */ size_t new_size; size_t extra_size; num_chunks = ((((bit_num / BV_BASE_BITS) + 1) - b->array_size) / BV_CHUNK_SIZE) + 1; new_size = (size_t)(b->array_size + num_chunks * BV_CHUNK_SIZE); if ((b->buffer = realloc(b->buffer, new_size)) == NULL) { b->buffer = old_buf; /* Could not allocate a larger bit buffer */ return FAIL; } /* Zero the bits, for the new bits */ extra_size = (size_t)(num_chunks * BV_CHUNK_SIZE); memset(&b->buffer[b->array_size], 0, extra_size); b->array_size += num_chunks * BV_CHUNK_SIZE; b->bits_used = bit_num + 1; } } if (value == BV_FALSE) { b->buffer[base_elem] &= ~bv_bit_value[bit_elem]; if (base_elem < b->last_zero) b->last_zero = base_elem; } else b->buffer[base_elem] |= bv_bit_value[bit_elem]; return SUCCEED; } /* bv_set() */ /*-------------------------------------------------------------------------- NAME bv_get PURPOSE Get a bit from a bit-vector USAGE intn bv_get(b,bit_num) bv_ptr b; IN: Bit-vector to use int32 bit_num; IN: bit to set RETURNS Returns either BV_TRUE/BV_FALSE on success, or FAIL on error DESCRIPTION Gets a bit from a bit-vector. COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ intn bv_get(bv_ptr b, int32 bit_num) { int32 base_elem; /* the base array index of the bit */ int32 bit_elem; /* the bit index of the bit to set */ intn ret_value; /* the variable to store the return value */ if (b == NULL || b->buffer == NULL || bit_num < 0) return FAIL; /* Check for asking for a bit off of the end of the vector */ if (bit_num >= b->bits_used) return BV_FALSE; base_elem = bit_num / BV_BASE_BITS; bit_elem = bit_num % BV_BASE_BITS; ret_value = b->buffer[base_elem] & bv_bit_value[bit_elem]; ret_value >>= bit_elem; return ret_value; } /* bv_get() */ /*-------------------------------------------------------------------------- NAME bv_size PURPOSE Report the number of bits in the bit-vector USAGE int32 bv_size(b) bv_ptr b; IN: Bit-vector to use RETURNS Returns number of bits in use on success, FAIL on error DESCRIPTION Report the number of bits currently in-use for a bit-vector. COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ int32 bv_size(bv_ptr b) { if (b == NULL) return FAIL; return b->bits_used; } /* bv_size() */ /*-------------------------------------------------------------------------- NAME bv_find_next_zero PURPOSE Find the next zero bit USAGE int32 bv_find_next_zero(b) bv_ptr b; IN: Bit-vector to use RETURNS Returns offset of next zero bit on success, FAIL on error DESCRIPTION Find the next highest zero bit. COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ int32 bv_find_next_zero(bv_ptr b) { int32 old_bits_used; /* the last number of bits used */ int32 bytes_used; /* number of full bytes used */ bv_base slush_bits; /* extra bits which don't fit into a byte */ int32 i; /* local counting variable */ bv_base *tmp_buf; if (b == NULL || b->buffer == NULL) return FAIL; bytes_used = b->bits_used / BV_BASE_BITS; /* looking for first '0' in the bit-vector */ if (b->last_zero >= 0) i = b->last_zero; else i = 0; tmp_buf = &b->buffer[i]; while (i < bytes_used && *tmp_buf == 255) { i++; tmp_buf++; } if (i < bytes_used) { b->last_zero = i; return (i * BV_BASE_BITS) + bv_first_zero[*tmp_buf]; } /* Any extra bits left over? */ if ((bytes_used * BV_BASE_BITS) < b->bits_used) { slush_bits = (bv_base)(b->buffer[i] & bv_bit_mask[b->bits_used - (bytes_used * BV_BASE_BITS)]); if (slush_bits != 255) { b->last_zero = i; return (i * BV_BASE_BITS) + bv_first_zero[slush_bits]; } } /* Beyond the current end of the bit-vector, extend the bit-vector */ old_bits_used = b->bits_used; if (bv_set(b, b->bits_used, BV_FALSE) == FAIL) return FAIL; return old_bits_used; } /* bv_find() */ hdf4-hdf4.3.1/hdf/src/bitvect_priv.h000066400000000000000000000037251503061704500172370ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: bitvect_priv.h * Purpose: header file for bit-vector API *---------------------------------------------------------------------------*/ #ifndef H4_BITVECT_PRIV_H #define H4_BITVECT_PRIV_H #include "hdf_priv.h" /* Boolean values used */ typedef enum { BV_FALSE = 0, BV_TRUE = 1 } bv_bool; /* Default size of a bit-vector */ #define BV_DEFAULT_BITS 128 /* Define the size of the chunks bits are allocated in */ #define BV_CHUNK_SIZE 64 /* Create the external interface data structures needed */ typedef struct bv_struct_tag *bv_ptr; /* Useful routines for generally private use */ #ifdef __cplusplus extern "C" { #endif HDFLIBAPI bv_ptr bv_new(int32 num_bits); HDFLIBAPI intn bv_delete(bv_ptr b); HDFLIBAPI intn bv_set(bv_ptr b, int32 bit_num, bv_bool value); HDFLIBAPI intn bv_get(bv_ptr b, int32 bit_num); HDFLIBAPI int32 bv_size(bv_ptr b); HDFLIBAPI int32 bv_find_next_zero(bv_ptr b); #ifdef __cplusplus } #endif #endif /* H4_BITVECT_PRIV_H */ hdf4-hdf4.3.1/hdf/src/cdeflate.c000066400000000000000000000607741503061704500163100ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* cdeflate.c - HDF gzip 'deflate' encoding I/O routines None of these routines are designed to be called by other users except for the modeling layer of the compression routines. */ /* General HDF includes */ #include "hdf_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* Define the [default] size of the buffer to interact with the file */ #define DEFLATE_BUF_SIZE 4096 #define DEFLATE_TMP_BUF_SIZE 16384 /* functions to perform gzip encoding */ funclist_t cdeflate_funcs = {HCPcdeflate_stread, HCPcdeflate_stwrite, HCPcdeflate_seek, HCPcdeflate_inquire, HCPcdeflate_read, HCPcdeflate_write, HCPcdeflate_endaccess, NULL, NULL}; /* declaration of the functions provided in this module */ static int32 HCIcdeflate_init(compinfo_t *info); /*-------------------------------------------------------------------------- NAME HCIcdeflate_init -- Initialize a gzip 'deflate' compressed data element. USAGE int32 HCIcdeflate_init(info) compinfo_t *info; IN: special element information RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcdeflate_staccess and HCIcdeflate_seek --------------------------------------------------------------------------*/ static int32 HCIcdeflate_init(compinfo_t *info) { comp_coder_deflate_info_t *deflate_info; /* ptr to deflate info */ if (Hseek(info->aid, 0, 0) == FAIL) /* seek to beginning of element */ HRETURN_ERROR(DFE_SEEKERROR, FAIL); deflate_info = &(info->cinfo.coder_info.deflate_info); /* Initialize deflation state information */ deflate_info->offset = 0; /* start at the beginning of the data */ deflate_info->acc_init = 0; /* second stage of initializing not performed */ deflate_info->acc_mode = 0; /* init access mode to illegal value */ /* initialize compression context */ deflate_info->deflate_context.zalloc = (alloc_func)Z_NULL; deflate_info->deflate_context.zfree = (free_func)Z_NULL; deflate_info->deflate_context.opaque = NULL; deflate_info->deflate_context.data_type = Z_BINARY; return SUCCEED; } /* end HCIcdeflate_init() */ /*-------------------------------------------------------------------------- NAME HCIcdeflate_decode -- Decode skipping Huffman compressed data into a buffer. USAGE int32 HCIcdeflate_decode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to read into the buffer uint8 *buf; OUT: buffer to store the bytes read RETURNS Returns # of bytes decompressed or FAIL DESCRIPTION Common code called to decode gzip 'deflated' data from the file. --------------------------------------------------------------------------*/ static int32 HCIcdeflate_decode(compinfo_t *info, int32 length, uint8 *buf) { comp_coder_deflate_info_t *deflate_info; /* ptr to deflate info */ int zstat; /* inflate status */ int32 bytes_read; deflate_info = &(info->cinfo.coder_info.deflate_info); /* Set up the deflation buffers to point to the user's buffer to fill */ deflate_info->deflate_context.next_out = buf; deflate_info->deflate_context.avail_out = (uInt)length; while (deflate_info->deflate_context.avail_out > 0) { /* Get more bytes from the file, if we've run out */ if (deflate_info->deflate_context.avail_in == 0) { int32 file_bytes; deflate_info->deflate_context.next_in = deflate_info->io_buf; if ((file_bytes = Hread(info->aid, DEFLATE_BUF_SIZE, deflate_info->deflate_context.next_in)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); deflate_info->deflate_context.avail_in = (uInt)file_bytes; } /* end if */ /* Read compressed data */ zstat = inflate(&(deflate_info->deflate_context), Z_NO_FLUSH); /* break out if we've reached the end of the compressed data */ if (zstat == Z_STREAM_END) break; /* break out if "inflate" returns reading errors */ else if (zstat == Z_VERSION_ERROR) { HRETURN_ERROR(DFE_COMPVERSION, FAIL); } else if (zstat <= Z_ERRNO && zstat > Z_VERSION_ERROR) { HRETURN_ERROR(DFE_READCOMP, FAIL); } } /* end while */ bytes_read = (int32)length - (int32)deflate_info->deflate_context.avail_out; deflate_info->offset += bytes_read; return bytes_read; } /* end HCIcdeflate_decode() */ /*-------------------------------------------------------------------------- NAME HCIcdeflate_encode -- Encode data from a buffer into gzip 'deflated' compressed data USAGE int32 HCIcdeflate_encode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to store from the buffer const void *buf; IN: buffer to encode RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to encode gzip 'deflated' data into a file. --------------------------------------------------------------------------*/ static int32 HCIcdeflate_encode(compinfo_t *info, int32 length, const void *buf) { comp_coder_deflate_info_t *deflate_info; /* ptr to skipping Huffman info */ deflate_info = &(info->cinfo.coder_info.deflate_info); /* Set up the deflation buffers to point to the user's buffer to empty */ deflate_info->deflate_context.next_in = (void *)buf; deflate_info->deflate_context.avail_in = (uInt)length; while (deflate_info->deflate_context.avail_in > 0 || deflate_info->deflate_context.avail_out == 0) { /* Write more bytes from the file, if we've filled our buffer */ if (deflate_info->deflate_context.avail_out == 0) { if (deflate_info->deflate_context.next_out != NULL) { if (Hwrite(info->aid, DEFLATE_BUF_SIZE, deflate_info->io_buf) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); } deflate_info->deflate_context.next_out = deflate_info->io_buf; deflate_info->deflate_context.avail_out = DEFLATE_BUF_SIZE; } /* end if */ /* break out if we've reached the end of the compressed data somehow */ if (deflate(&(deflate_info->deflate_context), Z_NO_FLUSH) != Z_OK) { HRETURN_ERROR(DFE_CENCODE, FAIL); } } deflate_info->offset += length; /* incr. abs. offset into the file */ return length; } /* end HCIcdeflate_encode() */ /*-------------------------------------------------------------------------- NAME HCIcdeflate_term -- Close down internal buffering for gzip 'deflate' encoding USAGE int32 HCIcdeflate_term(info,acc_mode) compinfo_t *info; IN: the info about the compressed element int16 acc_mode; IN: the access mode the data element was opened with RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to flush gzip 'deflated' data into a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcdeflate_term(compinfo_t *info, int16 acc_mode) { comp_coder_deflate_info_t *deflate_info; /* ptr to deflation info */ deflate_info = &(info->cinfo.coder_info.deflate_info); /* set flag to indicate second stage of initialization is finished */ if (deflate_info->acc_init != 0) { if (acc_mode & DFACC_WRITE) { /* flush the "deflated" data to the file */ intn status; do { /* Write more bytes from the file, if we've filled our buffer */ if (deflate_info->deflate_context.avail_out == 0) { if (Hwrite(info->aid, DEFLATE_BUF_SIZE, deflate_info->io_buf) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); deflate_info->deflate_context.next_out = deflate_info->io_buf; deflate_info->deflate_context.avail_out = DEFLATE_BUF_SIZE; } /* end if */ status = deflate(&(deflate_info->deflate_context), Z_FINISH); } while (status == Z_OK || deflate_info->deflate_context.avail_out == 0); if (status != Z_STREAM_END) HRETURN_ERROR(DFE_CENCODE, FAIL); if (deflate_info->deflate_context.avail_out < DEFLATE_BUF_SIZE) if (Hwrite(info->aid, (int32)(DEFLATE_BUF_SIZE - deflate_info->deflate_context.avail_out), deflate_info->io_buf) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); /* Close down the deflation buffer */ if (deflateEnd(&(deflate_info->deflate_context)) != Z_OK) HRETURN_ERROR(DFE_CTERM, FAIL); } /* end if */ else { /* finish up any inflated data */ /* Close down the inflation buffer */ if (inflateEnd(&(deflate_info->deflate_context)) != Z_OK) HRETURN_ERROR(DFE_CTERM, FAIL); } /* end else */ } /* end if */ /* Reset parameters */ deflate_info->offset = 0; /* start at the beginning of the data */ deflate_info->acc_init = 0; /* second stage of initializing not performed */ deflate_info->acc_mode = 0; /* init access mode to illegal value */ return SUCCEED; } /* end HCIcdeflate_term() */ /*-------------------------------------------------------------------------- NAME HCIcdeflate_staccess -- Start accessing a gzip 'deflate' compressed data element. USAGE int32 HCIcdeflate_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcdeflate_stread and HCIcdeflate_stwrite --------------------------------------------------------------------------*/ static int32 HCIcdeflate_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to deflate info */ info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* need to check for not writing, as opposed to read access */ /* because of the way the access works */ if (!(acc_mode & DFACC_WRITE)) { info->aid = Hstartread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); } /* end if */ else { info->aid = Hstartaccess(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, DFACC_RDWR | DFACC_APPENDABLE); } /* end else */ if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); /* Make certain we can append to the data when writing */ if ((acc_mode & DFACC_WRITE) && Happendable(info->aid) == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); /* initialize the common deflate coding info */ if (HCIcdeflate_init(info) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); /* Allocate compression I/O buffer */ if ((deflate_info->io_buf = malloc(DEFLATE_BUF_SIZE)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); return SUCCEED; } /* end HCIcdeflate_staccess() */ /*-------------------------------------------------------------------------- NAME HCIcdeflate_staccess2 -- 2nd half of start accessing a gzip 'deflate' compressed data element. USAGE int32 HCIcdeflate_staccess2(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcdeflate_stread and HCIcdeflate_stwrite --------------------------------------------------------------------------*/ static int32 HCIcdeflate_staccess2(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to deflate info */ info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* Initialize the gzip library */ if (acc_mode & DFACC_WRITE) { if (deflateInit(&(deflate_info->deflate_context), deflate_info->deflate_level) != Z_OK) HRETURN_ERROR(DFE_CINIT, FAIL); /* set access mode */ deflate_info->acc_mode = DFACC_WRITE; /* force I/O with the file at first */ deflate_info->deflate_context.next_out = NULL; deflate_info->deflate_context.avail_out = 0; } /* end if */ else { if (inflateInit(&(deflate_info->deflate_context)) != Z_OK) HRETURN_ERROR(DFE_CINIT, FAIL); /* set access mode */ deflate_info->acc_mode = DFACC_READ; /* force I/O with the file at first */ deflate_info->deflate_context.avail_in = 0; } /* end else */ /* set flag to indicate second stage of initialization is finished */ deflate_info->acc_init = acc_mode; return SUCCEED; } /* end HCIcdeflate_staccess2() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_stread -- start read access for compressed file USAGE int32 HCPcdeflate_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using the deflate scheme. --------------------------------------------------------------------------*/ int32 HCPcdeflate_stread(accrec_t *access_rec) { if (HCIcdeflate_staccess(access_rec, DFACC_READ) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return SUCCEED; } /* HCPcdeflate_stread() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_stwrite -- start write access for compressed file USAGE int32 HCPcdeflate_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using the deflate scheme. --------------------------------------------------------------------------*/ int32 HCPcdeflate_stwrite(accrec_t *access_rec) { if (HCIcdeflate_staccess(access_rec, DFACC_WRITE) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return SUCCEED; } /* HCPcdeflate_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_seek -- Seek to offset within the data element USAGE int32 HCPcdeflate_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified intn origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. --------------------------------------------------------------------------*/ int32 HCPcdeflate_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to gzip 'deflate' info */ uint8 *tmp_buf = NULL; /* temporary buffer */ int32 ret_value = SUCCEED; (void)origin; info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* Check if second stage of initialization has been performed */ if (deflate_info->acc_init == 0) { if (HCIcdeflate_staccess2(access_rec, DFACC_READ) == FAIL) HGOTO_ERROR(DFE_CINIT, FAIL); } if (offset < deflate_info->offset) { /* need to seek from the beginning */ /* Terminate the previous method of access */ if (HCIcdeflate_term(info, deflate_info->acc_mode) == FAIL) HGOTO_ERROR(DFE_CTERM, FAIL); /* Restart access */ if (HCIcdeflate_staccess2(access_rec, DFACC_READ) == FAIL) HGOTO_ERROR(DFE_CINIT, FAIL); /* Go back to the beginning of the data-stream */ if (Hseek(info->aid, 0, 0) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); } /* Allocate a temporary buffer for decompression */ if ((tmp_buf = (uint8 *)malloc(sizeof(uint8) * DEFLATE_TMP_BUF_SIZE)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); while (deflate_info->offset + DEFLATE_TMP_BUF_SIZE < offset) { /* grab chunks */ if (HCIcdeflate_decode(info, DEFLATE_TMP_BUF_SIZE, tmp_buf) == FAIL) { HGOTO_ERROR(DFE_CDECODE, FAIL); } } if (deflate_info->offset < offset) { /* grab the last chunk */ if (HCIcdeflate_decode(info, offset - deflate_info->offset, tmp_buf) == FAIL) { HGOTO_ERROR(DFE_CDECODE, FAIL); } } done: free(tmp_buf); return ret_value; } /* HCPcdeflate_seek() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcdeflate_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from the deflate compressed data element. --------------------------------------------------------------------------*/ int32 HCPcdeflate_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to gzip 'deflate' info */ info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* Check if second stage of initialization has been performed */ if (deflate_info->acc_init != DFACC_READ) { /* Terminate the previous method of access */ if (HCIcdeflate_term(info, deflate_info->acc_mode) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* Restart access */ if (HCIcdeflate_staccess2(access_rec, DFACC_READ) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); /* Go back to the beginning of the data-stream */ if (Hseek(info->aid, 0, 0) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ if ((length = HCIcdeflate_decode(info, length, data)) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcdeflate_read() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPcdeflate_write(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to the deflate compressed data element. --------------------------------------------------------------------------*/ int32 HCPcdeflate_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to skipping Huffman info */ info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* Don't allow random write in a dataset unless: */ /* 1 - append onto the end */ /* 2 - start at the beginning and rewrite (at least) the whole dataset */ if ((info->length != deflate_info->offset) && (deflate_info->offset != 0 || length < info->length)) HRETURN_ERROR(DFE_UNSUPPORTED, FAIL); /* Check if second stage of initialization has been performed */ if (deflate_info->acc_init != DFACC_WRITE) { /* Terminate the previous method of access */ if (HCIcdeflate_term(info, deflate_info->acc_init) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* Restart access */ if (HCIcdeflate_staccess2(access_rec, DFACC_WRITE) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); /* Go back to the beginning of the data-stream */ if (Hseek(info->aid, 0, 0) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ if ((length = HCIcdeflate_encode(info, length, data)) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; } /* HCPcdeflate_write() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcdeflate_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. --------------------------------------------------------------------------*/ int32 HCPcdeflate_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcdeflate_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcdeflate_endaccess -- Close the compressed data element USAGE int32 HCPcdeflate_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free encoding info. --------------------------------------------------------------------------*/ intn HCPcdeflate_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_deflate_info_t *deflate_info; /* ptr to gzip 'deflate' info */ info = (compinfo_t *)access_rec->special_info; deflate_info = &(info->cinfo.coder_info.deflate_info); /* flush out buffer */ if (HCIcdeflate_term(info, deflate_info->acc_mode) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* Get rid of the I/O buffer */ free(deflate_info->io_buf); /* close the compressed data AID */ if (Hendaccess(info->aid) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcdeflate_endaccess() */ hdf4-hdf4.3.1/hdf/src/cdeflate_priv.h000066400000000000000000000054111503061704500173400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: cdeflate_priv.h * Purpose: Header file for gzip 'deflate' encoding information. * Dependencies: should only be included from hcomp_priv.h *---------------------------------------------------------------------------*/ #ifndef H4_CDEFLATE_PRIV_H #define H4_CDEFLATE_PRIV_H #include "hdf_priv.h" /* Get the gzip 'deflate' header */ #define intf zintf #include "zlib.h" #undef zintf /* gzip [en|de]coding information */ typedef struct { intn deflate_level; /* how hard to try to compress this data */ int32 offset; /* offset in the de-compressed array */ int16 acc_init; /* is access mode initialized? */ int16 acc_mode; /* access mode desired */ void *io_buf; /* buffer for I/O with the file */ z_stream deflate_context; /* pointer to the deflation context for each byte in the element */ } comp_coder_deflate_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t cdeflate_funcs; /* functions to perform gzip encoding */ /* ** from cdeflate.c */ HDFLIBAPI int32 HCPcdeflate_stread(accrec_t *rec); HDFLIBAPI int32 HCPcdeflate_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcdeflate_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcdeflate_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcdeflate_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcdeflate_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HCPcdeflate_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CDEFLATE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/cnbit.c000066400000000000000000000604201503061704500156240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* cnbit.c - HDF N-bit encoding I/O routines None of these routines are designed to be called by other users except for the modeling layer of the compression routines. */ /* General HDF includes */ #include "hdf_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* functions to perform N-bit encoding */ funclist_t cnbit_funcs = {HCPcnbit_stread, HCPcnbit_stwrite, HCPcnbit_seek, HCPcnbit_inquire, HCPcnbit_read, HCPcnbit_write, HCPcnbit_endaccess, NULL, NULL}; /* Local Variables */ static const uint8 mask_arr8[9] = {/* array of values with [n] bits set */ 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF}; static const uint32 mask_arr32[33] = {/* array of values with [n] bits set */ 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFFUL}; /* declaration of the functions provided in this module */ static int32 HCIcnbit_staccess(accrec_t *access_rec, int16 acc_mode); static int32 HCIcnbit_init(accrec_t *access_rec); static int32 HCIcnbit_decode(compinfo_t *info, int32 length, uint8 *buf); static int32 HCIcnbit_encode(compinfo_t *info, int32 length, const uint8 *buf); static int32 HCIcnbit_term(compinfo_t *info); /*-------------------------------------------------------------------------- NAME HCIcnbit_init -- Initialize a N-bit compressed data element. USAGE int32 HCIcnbit_init(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcnbit_staccess and HCIcnbit_seek --------------------------------------------------------------------------*/ static int32 HCIcnbit_init(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_nbit_info_t *nbit_info; /* ptr to N-bit info */ int bits; /* number of bits in number type */ int top_bit, bot_bit; /* bits around a range of bytes */ int mask_top, mask_bot; /* top and bottom bits in mask */ int i; /* local counting variable */ info = (compinfo_t *)access_rec->special_info; if (Hbitseek(info->aid, 0, 0) == FAIL) /* seek to beginning of element */ HRETURN_ERROR(DFE_SEEKERROR, FAIL); nbit_info = &(info->cinfo.coder_info.nbit_info); /* Initialize N-bit state information */ nbit_info->buf_pos = NBIT_BUF_SIZE; /* start at the beginning of the buffer */ nbit_info->nt_pos = 0; /* start at beginning of the NT info */ nbit_info->offset = 0; /* offset into the file */ memset(nbit_info->mask_buf, (nbit_info->fill_one == TRUE ? 0xff : 0), (size_t)nbit_info->nt_size); bits = nbit_info->nt_size * 8; /* compute # of bits */ mask_top = nbit_info->mask_off; /* compute top and bottom ends of mask */ mask_bot = nbit_info->mask_off - (nbit_info->mask_len - 1); top_bit = bits - 1; /* set the initial top and bottom bits */ bot_bit = bits - 8; memset(nbit_info->mask_info, 0, sizeof(nbit_info->mask_info)); /* set to 0 */ for (i = 0; i < nbit_info->nt_size; i++) { /* initialize the bitmask info */ if (mask_top >= top_bit) { /* mask offset is above current top bit */ if (mask_bot <= bot_bit) { /* entire byte is in mask */ nbit_info->mask_info[i].offset = 7; nbit_info->mask_info[i].length = 8; nbit_info->mask_info[i].mask = mask_arr8[8]; } /* end if */ else { /* only top part of byte is in mask */ nbit_info->mask_info[i].offset = 7; nbit_info->mask_info[i].length = (top_bit - mask_bot) + 1; nbit_info->mask_info[i].mask = (uint8)(mask_arr8[(top_bit - mask_bot) + 1] << (8 - ((top_bit - mask_bot) + 1))); break; /* we've found the bottom of the mask, we're done */ } /* end else */ } /* end if */ else { /* mask top is below current top bit */ if (mask_top >= bot_bit) { /* mask top is inside current byte */ if (mask_bot < bot_bit) { /* mask top to bottom of byte is in mask */ nbit_info->mask_info[i].offset = mask_top - bot_bit; nbit_info->mask_info[i].length = (mask_top - bot_bit) + 1; nbit_info->mask_info[i].mask = mask_arr8[(mask_top - bot_bit) + 1]; } /* end if */ else { /* entire bit-field is inside of this byte */ nbit_info->mask_info[i].offset = mask_top - bot_bit; nbit_info->mask_info[i].length = (mask_top - mask_bot) + 1; nbit_info->mask_info[i].mask = (uint8)(mask_arr8[(mask_top - mask_bot) + 1] << (mask_bot - bot_bit)); break; /* we've found the bottom of the mask, we're done */ } /* end else */ } /* end if */ else /* mask top is below bottom bit, just continue */ { } } /* end else */ top_bit -= 8; /* decrement location in fill mask */ bot_bit -= 8; } /* end for */ /* mask to 0 the bits where the bit-field will go */ if (nbit_info->fill_one == TRUE) { for (i = 0; i < nbit_info->nt_size; i++) nbit_info->mask_buf[i] &= ~(nbit_info->mask_info[i].mask); } /* end if */ return SUCCEED; } /* end HCIcnbit_init() */ /*-------------------------------------------------------------------------- NAME HCIcnbit_decode -- Decode n-bit data into a buffer. USAGE int32 HCIcnbit_decode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to read into the buffer uint8 *buf; OUT: buffer to store the bytes read RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to decode n-bit data from the file. --------------------------------------------------------------------------*/ static int32 HCIcnbit_decode(compinfo_t *info, int32 length, uint8 *buf) { comp_coder_nbit_info_t *nbit_info; /* ptr to n-bit info */ int32 orig_length; /* original length to write */ uint32 input_bits; /* bits read from the file */ uint32 sign_mask, /* mask to get the sign bit */ sign_ext_mask; /* mask for sign extension */ int sign_byte, /* byte which contains the sign bit */ sign_bit = 0; /* the sign bit from the n_bit data */ nbit_mask_info_t *mask_info; /* ptr to the mask info */ int copy_length; /* number of bytes to copy */ int buf_size, /* size of the expansion buffer to use */ buf_items; /* number of items which will fit into expansion buffer */ uint8 *rbuf, *rbuf2; /* pointer into the n-bit read buffer */ int i, j; /* local counting variable */ /* get a local ptr to the nbit info for convenience */ nbit_info = &(info->cinfo.coder_info.nbit_info); /* calculate sign extension information */ sign_ext_mask = ~mask_arr32[nbit_info->mask_off % 8]; /* sign mask has all 1's in upper bits */ sign_byte = nbit_info->nt_size - ((nbit_info->mask_off / 8) + 1); sign_mask = mask_arr32[(nbit_info->mask_off % 8) + 1] ^ mask_arr32[nbit_info->mask_off % 8]; buf_size = MIN(NBIT_BUF_SIZE, length); buf_items = buf_size / nbit_info->nt_size; /* compute # of items in buffer */ orig_length = length; /* save this for later */ while (length > 0) { /* decode until we have all the bytes */ if (nbit_info->buf_pos >= buf_size) { /* re-fill buffer */ rbuf = (uint8 *)nbit_info->buffer; /* get a ptr to the buffer */ /* get initial copy of the mask */ HDmemfill(rbuf, nbit_info->mask_buf, (uint32)nbit_info->nt_size, (uint32)buf_items); for (i = 0; i < buf_items; i++) { /* get a ptr to the mask info for convenience also */ mask_info = &(nbit_info->mask_info[0]); if (nbit_info->sign_ext) { /* special code for expanding sign extended data */ rbuf2 = rbuf; /* set temporary pointer into buffer */ for (j = 0; j < nbit_info->nt_size; j++, mask_info++, rbuf2++) { if (mask_info->length > 0) { /* check if we need to read bits */ Hbitread(info->aid, mask_info->length, &input_bits); input_bits <<= (mask_info->offset - mask_info->length) + 1; *rbuf2 |= (uint8)(mask_info->mask & (uint8)input_bits); if (j == sign_byte) /* check if this is the sign byte */ sign_bit = sign_mask & input_bits ? 1 : 0; } } /* we only have to sign extend if the sign is not the same */ /* as the bit we are filling the n-bit data with */ if (sign_bit != nbit_info->fill_one) { rbuf2 = rbuf; /* set temporary pointer into buffer */ if (sign_bit == 1) { /* fill with ones */ for (j = 0; j < sign_byte; j++, rbuf2++) *rbuf2 = 0xff; *rbuf2 |= (uint8)sign_ext_mask; } else { /* fill with zeroes */ for (j = 0; j < sign_byte; j++, rbuf2++) *rbuf2 = 0x00; *rbuf2 &= (uint8)~sign_ext_mask; } } rbuf += nbit_info->nt_size; /* increment buffer ptr */ } else { /* no sign extension */ for (j = 0; j < nbit_info->nt_size; j++, mask_info++, rbuf++) { if (mask_info->length > 0) { /* check if we need to read bits */ if (Hbitread(info->aid, mask_info->length, &input_bits) != mask_info->length) HRETURN_ERROR(DFE_CDECODE, FAIL); *rbuf |= (uint8)(mask_info->mask & (uint8)(input_bits << ((mask_info->offset - mask_info->length) + 1))); } } } } nbit_info->buf_pos = 0; /* reset buffer position */ } copy_length = (int)((length > (buf_size - nbit_info->buf_pos)) ? (buf_size - nbit_info->buf_pos) : length); memcpy(buf, &(nbit_info->buffer[nbit_info->buf_pos]), (size_t)copy_length); buf += copy_length; length -= copy_length; nbit_info->buf_pos += copy_length; } /* end for */ nbit_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcnbit_decode() */ /*-------------------------------------------------------------------------- NAME HCIcnbit_encode -- Encode data from a buffer into n-bit data USAGE int32 HCIcnbit_encode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to store from the buffer const uint8 *buf; OUT: buffer to get the bytes from RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to encode n-bit data into a file. --------------------------------------------------------------------------*/ static int32 HCIcnbit_encode(compinfo_t *info, int32 length, const uint8 *buf) { comp_coder_nbit_info_t *nbit_info; /* ptr to n-bit info */ int32 orig_length; /* original length to write */ uint32 output_bits; /* bits to write to the file */ nbit_mask_info_t *mask_info; /* ptr to the mask info */ /* get a local ptr to the nbit info for convenience */ nbit_info = &(info->cinfo.coder_info.nbit_info); /* get a ptr to the mask info for convenience also */ mask_info = &(nbit_info->mask_info[nbit_info->nt_pos]); orig_length = length; /* save this for later */ for (; length > 0; length--, buf++) { /* encode until we store all the bytes */ if (mask_info->length > 0) { /* check if we need to output bits */ output_bits = (uint32)(((*buf) & (mask_info->mask)) >> ((mask_info->offset - mask_info->length) + 1)); Hbitwrite(info->aid, mask_info->length, output_bits); } /* advance to the next mask position */ mask_info++; /* advance buffer offset and check for wrap */ if ((++nbit_info->nt_pos) >= nbit_info->nt_size) { nbit_info->nt_pos = 0; /* reset to beginning of buffer */ mask_info = nbit_info->mask_info; /* reset ptr to masks also */ } /* end if */ } /* end for */ nbit_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcnbit_encode() */ /*-------------------------------------------------------------------------- NAME HCIcnbit_term -- Flush any data left to the dataset USAGE int32 HCIcnbit_term(info) compinfo_t *info; IN: the info about the compressed element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to flush n-bit data into a file. --------------------------------------------------------------------------*/ static int32 HCIcnbit_term(compinfo_t *info) { (void)info; return SUCCEED; } /* end HCIcnbit_term() */ /*-------------------------------------------------------------------------- NAME HCIcnbit_staccess -- Start accessing a N-bit data element. USAGE int32 HCIcnbit_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcnbit_stread and HCIcnbit_stwrite --------------------------------------------------------------------------*/ static int32 HCIcnbit_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (acc_mode == DFACC_READ) info->aid = Hstartbitread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); else info->aid = Hstartbitwrite(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, info->length); if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); if ((acc_mode & DFACC_WRITE) && Hbitappendable(info->aid) == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); return HCIcnbit_init(access_rec); /* initialize the N-bit info */ } /* end HCIcnbit_staccess() */ /*-------------------------------------------------------------------------- NAME HCPclre_stread -- start read access for compressed file USAGE int32 HCPmstdio_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using a simple RLE scheme. --------------------------------------------------------------------------*/ int32 HCPcnbit_stread(accrec_t *access_rec) { int32 ret; if ((ret = HCIcnbit_staccess(access_rec, DFACC_READ)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcnbit_stread() */ /*-------------------------------------------------------------------------- NAME HCPclre_stwrite -- start write access for compressed file USAGE int32 HCPmstdio_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using a simple RLE scheme. --------------------------------------------------------------------------*/ int32 HCPcnbit_stwrite(accrec_t *access_rec) { int32 ret; if ((ret = HCIcnbit_staccess(access_rec, DFACC_WRITE)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcnbit_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcnbit_seek -- Seek to offset within the data element USAGE int32 HCPcnbit_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified int origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. --------------------------------------------------------------------------*/ int32 HCPcnbit_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ comp_coder_nbit_info_t *nbit_info; /* ptr to n-bit info */ int32 bit_offset; /* offset of the bit to seek to */ (void)origin; info = (compinfo_t *)access_rec->special_info; nbit_info = &(info->cinfo.coder_info.nbit_info); /* only seek to an even multiple of the NT-sized elements in the dataset */ if (offset % nbit_info->nt_size != 0) HRETURN_ERROR(DFE_CSEEK, FAIL); bit_offset = (offset / nbit_info->nt_size) * nbit_info->mask_len; if (Hbitseek(info->aid, bit_offset / 8, (int)(bit_offset % 8)) == FAIL) HRETURN_ERROR(DFE_CSEEK, FAIL); nbit_info->buf_pos = NBIT_BUF_SIZE; /* force re-read if writing */ nbit_info->nt_pos = 0; /* start at the first byte of the mask */ nbit_info->offset = offset; /* set abs. offset into the file */ return SUCCEED; } /* HCPcnbit_seek() */ /*-------------------------------------------------------------------------- NAME HCPclre_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcnbit_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a RLE compressed data element. --------------------------------------------------------------------------*/ int32 HCPcnbit_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (HCIcnbit_decode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcnbit_read() */ /*-------------------------------------------------------------------------- NAME HCPcnbit_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPwrite(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a RLE compressed data element. --------------------------------------------------------------------------*/ int32 HCPcnbit_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (HCIcnbit_encode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; } /* HCPcnbit_write() */ /*-------------------------------------------------------------------------- NAME HCPclre_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcnbit_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. --------------------------------------------------------------------------*/ int32 HCPcnbit_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcnbit_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcnbit_endaccess -- Close the compressed data element USAGE int HCPnbit_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free modelling info. --------------------------------------------------------------------------*/ int HCPcnbit_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; /* flush out n-bit buffer */ if (access_rec->access & DFACC_WRITE) if (HCIcnbit_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* close the n-bit data AID */ if (Hendbitaccess(info->aid, 0) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcnbit_endaccess() */ hdf4-hdf4.3.1/hdf/src/cnbit_priv.h000066400000000000000000000072061503061704500166740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: cnbit_priv.h * Purpose: Header file for N-bit encoding information. * Dependencies: should only be included from hcomp_priv.h *---------------------------------------------------------------------------*/ #ifndef H4_CNBIT_PRIV_H #define H4_CNBIT_PRIV_H #include "hdf_priv.h" /* size of the N-bit buffer */ #define NBIT_BUF_SIZE (MAX_NT_SIZE * 64) /* size of the N-bit mask buffer (same as buffer size for now) */ #define NBIT_MASK_SIZE (MAX_NT_SIZE) typedef struct { /* structure to hold bit vector info */ int offset; /* offset of the bit information */ int length; /* number of bits in the information */ uint8 mask; /* mask for this bit vector */ } nbit_mask_info_t; /* N-bit [en|de]coding information */ typedef struct { int32 nt; /* number type of data we are encoding */ int nt_size; /* size of the number-type in the file */ int fill_one; /* whether to fill with 1's or not (0's) */ int sign_ext; /* whether to sign extend or not */ uint8 buffer[NBIT_BUF_SIZE]; /* buffer for expanding n-bit data in */ int buf_pos; /* current offset in the expansion buffer */ int mask_off; /* offset of the bit to start masking with */ int mask_len; /* number of bits to mask */ int32 offset; /* offset in the file in terms of bytes */ uint8 mask_buf[NBIT_MASK_SIZE]; /* buffer to hold the bitmask */ nbit_mask_info_t mask_info[NBIT_MASK_SIZE]; /* information about the mask */ int nt_pos; /* current byte to read or write */ } comp_coder_nbit_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t cnbit_funcs; /* functions to perform N-bit encoding */ /* ** from cnbit.c */ HDFLIBAPI int32 HCPcnbit_stread(accrec_t *rec); HDFLIBAPI int32 HCPcnbit_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcnbit_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcnbit_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcnbit_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcnbit_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI int HCPcnbit_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CNBIT_PRIV_H */ hdf4-hdf4.3.1/hdf/src/cnone.c000066400000000000000000000225351503061704500156340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* cnone.c - HDF none encoding I/O routines None of these routines are designed to be called by other users except for the modeling layer of the compression routines. */ /* General HDF includes */ #include "hdf_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* functions to perform run-length encoding */ funclist_t cnone_funcs = {HCPcnone_stread, HCPcnone_stwrite, HCPcnone_seek, HCPcnone_inquire, HCPcnone_read, HCPcnone_write, HCPcnone_endaccess, NULL, NULL}; /* declaration of the functions provided in this module */ static int32 HCIcnone_staccess(accrec_t *access_rec, int16 acc_mode); /*-------------------------------------------------------------------------- NAME HCIcnone_staccess -- Start accessing an uncompressed data element. USAGE int32 HCIcnone_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcnone_stread and HCIcnone_stwrite --------------------------------------------------------------------------*/ static int32 HCIcnone_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (acc_mode == DFACC_READ) info->aid = Hstartread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); else info->aid = Hstartwrite(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, info->length); if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); if ((acc_mode & DFACC_WRITE) && Happendable(info->aid) == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); return SUCCEED; } /* end HCIcnone_staccess() */ /*-------------------------------------------------------------------------- NAME HCPcnone_stread -- start read access for compressed file USAGE int32 HCPcnone_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using no compression. --------------------------------------------------------------------------*/ int32 HCPcnone_stread(accrec_t *access_rec) { int32 ret; if ((ret = HCIcnone_staccess(access_rec, DFACC_READ)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcnone_stread() */ /*-------------------------------------------------------------------------- NAME HCPcnone_stwrite -- start write access for compressed file USAGE int32 HCPcnone_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using no compression. --------------------------------------------------------------------------*/ int32 HCPcnone_stwrite(accrec_t *access_rec) { int32 ret; if ((ret = HCIcnone_staccess(access_rec, DFACC_WRITE)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcnone_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcnone_seek -- Seek to offset within the data element USAGE int32 HCPcnone_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified intn origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. --------------------------------------------------------------------------*/ int32 HCPcnone_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (Hseek(info->aid, offset, origin) == FAIL) HRETURN_ERROR(DFE_CSEEK, FAIL); return SUCCEED; } /* HCPcnone_seek() */ /*-------------------------------------------------------------------------- NAME HCPcnone_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcnone_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from an uncompressed data element. --------------------------------------------------------------------------*/ int32 HCPcnone_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (Hread(info->aid, length, data) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcnone_read() */ /*-------------------------------------------------------------------------- NAME HCPcnone_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPwrite(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a data element (w/ no compression). --------------------------------------------------------------------------*/ int32 HCPcnone_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (Hwrite(info->aid, length, data) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; } /* HCPcnone_write() */ /*-------------------------------------------------------------------------- NAME HCPcnone_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcnone_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. --------------------------------------------------------------------------*/ int32 HCPcnone_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcnone_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcnone_endaccess -- Close the compressed data element USAGE int32 HCPcnone_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free modelling info. --------------------------------------------------------------------------*/ intn HCPcnone_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; /* close the compressed data AID */ if (Hendaccess(info->aid) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcnone_endaccess() */ hdf4-hdf4.3.1/hdf/src/cnone_priv.h000066400000000000000000000046731503061704500167040ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: cnone_priv.h * Purpose: Header file for "none" encoding information. * Dependencies: should only be included from hcomp_priv.h * Invokes: none * Contents: Structures & definitions for "none" encoding. This header * should only be included in hcomp.c and cnone.c. *---------------------------------------------------------------------------*/ #ifndef H4_CNONE_PRIV_H #define H4_CNONE_PRIV_H #include "hdf_priv.h" /* "none" [en|de]coding information */ typedef struct { intn space_holder; /* merely a space holder so compilers don't barf */ } comp_coder_none_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t cnone_funcs; /* functions to perform run-length encoding */ /* ** from cnone.c */ HDFLIBAPI int32 HCPcnone_stread(accrec_t *rec); HDFLIBAPI int32 HCPcnone_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcnone_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcnone_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcnone_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcnone_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HCPcnone_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CNONE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/crle.c000066400000000000000000000553251503061704500154620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* crle.c - HDF run-length encoding I/O routines None of these routines are designed to be called by other users except for the modeling layer of the compression routines. */ /* General HDF includes */ #include "hdf_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* internal defines */ #define TMP_BUF_SIZE 8192 /* size of throw-away buffer */ #define RUN_MASK 0x80 /* bit mask for run-length control bytes */ #define COUNT_MASK 0x7f /* bit mask for count of run or mix */ /* functions to perform run-length encoding */ funclist_t crle_funcs = {HCPcrle_stread, HCPcrle_stwrite, HCPcrle_seek, HCPcrle_inquire, HCPcrle_read, HCPcrle_write, HCPcrle_endaccess, NULL, NULL}; /* declaration of the functions provided in this module */ static int32 HCIcrle_staccess(accrec_t *access_rec, int16 acc_mode); static int32 HCIcrle_init(accrec_t *access_rec); static int32 HCIcrle_decode(compinfo_t *info, int32 length, uint8 *buf); static int32 HCIcrle_encode(compinfo_t *info, int32 length, const uint8 *buf); static int32 HCIcrle_term(compinfo_t *info); /*-------------------------------------------------------------------------- NAME HCIcrle_init -- Initialize a RLE compressed data element. USAGE int32 HCIcrle_init(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcrle_staccess and HCIcrle_seek --------------------------------------------------------------------------*/ static int32 HCIcrle_init(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ info = (compinfo_t *)access_rec->special_info; if (Hseek(info->aid, 0, DF_START) == FAIL) /* seek to beginning of element */ HRETURN_ERROR(DFE_SEEKERROR, FAIL); rle_info = &(info->cinfo.coder_info.rle_info); /* Initialize RLE state information */ rle_info->rle_state = RLE_INIT; /* start in initial state */ rle_info->buf_pos = 0; /* start at the beginning of the buffer */ rle_info->last_byte = (unsigned)RLE_NIL; /* start with no code in the last byte */ rle_info->second_byte = (unsigned)RLE_NIL; /* start with no code here too */ rle_info->offset = 0; /* offset into the file */ return SUCCEED; } /* end HCIcrle_init() */ /*-------------------------------------------------------------------------- NAME HCIcrle_decode -- Decode RLE compressed data into a buffer. USAGE int32 HCIcrle_decode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to read into the buffer uint8 *buf; OUT: buffer to store the bytes read RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to decode RLE data from the file. --------------------------------------------------------------------------*/ static int32 HCIcrle_decode(compinfo_t *info, int32 length, uint8 *buf) { comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ int32 orig_length; /* original length to read */ unsigned dec_len; /* length to decode */ int c; /* character to hold a byte read in */ rle_info = &(info->cinfo.coder_info.rle_info); orig_length = length; /* save this for later */ while (length > 0) { /* decode until we have all the bytes we need */ if (rle_info->rle_state == RLE_INIT) { /* need to figure out RUN or MIX state */ if ((c = HDgetc(info->aid)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); if (c & RUN_MASK) { /* run byte */ rle_info->rle_state = RLE_RUN; /* set to run state */ rle_info->buf_length = (c & COUNT_MASK) + RLE_MIN_RUN; /* run length */ if ((rle_info->last_byte = (unsigned)HDgetc(info->aid)) == (unsigned)FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); } else { /* mix byte */ rle_info->rle_state = RLE_MIX; /* set to mix state */ rle_info->buf_length = (c & COUNT_MASK) + RLE_MIN_MIX; /* mix length */ if (Hread(info->aid, rle_info->buf_length, rle_info->buffer) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); rle_info->buf_pos = 0; } } /* RUN or MIX states */ if (length > rle_info->buf_length) /* still need more data */ dec_len = (unsigned)rle_info->buf_length; else /* only grab "length" bytes */ dec_len = (unsigned)length; if (rle_info->rle_state == RLE_RUN) memset(buf, (int)rle_info->last_byte, dec_len); /* copy the run */ else { memcpy(buf, &(rle_info->buffer[rle_info->buf_pos]), dec_len); rle_info->buf_pos += (int)dec_len; } rle_info->buf_length -= (int)dec_len; if (rle_info->buf_length <= 0) /* check for running out of bytes */ rle_info->rle_state = RLE_INIT; /* get the next status byte */ length -= (int32)dec_len; /* decrement the bytes to get */ buf += dec_len; /* in case we need more bytes */ } /* end while */ rle_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcrle_decode() */ /*-------------------------------------------------------------------------- NAME HCIcrle_encode -- Encode data from a buffer into RLE compressed data USAGE int32 HCIcrle_encode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to store from the buffer const uint8 *buf; OUT: buffer to get the bytes from RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to encode RLE data into a file. --------------------------------------------------------------------------*/ static int32 HCIcrle_encode(compinfo_t *info, int32 length, const uint8 *buf) { comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ int32 orig_length; /* original length to write */ int c; /* character to hold a byte read in */ rle_info = &(info->cinfo.coder_info.rle_info); orig_length = length; /* save this for later */ while (length > 0) { /* encode until we stored all the bytes */ switch (rle_info->rle_state) { case RLE_INIT: /* initial encoding state */ rle_info->rle_state = RLE_MIX; /* shift to MIX state */ rle_info->last_byte = (unsigned)(rle_info->buffer[0] = *buf); rle_info->buf_length = 1; rle_info->buf_pos = 1; buf++; length--; break; case RLE_RUN: /* check for end of run */ if ((unsigned)*buf != rle_info->last_byte) { rle_info->rle_state = RLE_MIX; c = RUN_MASK | (rle_info->buf_length - RLE_MIN_RUN); if (HDputc((uint8)c, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (HDputc((uint8)rle_info->last_byte, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); rle_info->last_byte = (unsigned)(rle_info->buffer[0] = *buf); rle_info->buf_length = 1; rle_info->buf_pos = 1; } else { /* run is continuing */ rle_info->buf_length++; if (rle_info->buf_length >= RLE_MAX_RUN) { /* check for too long */ c = RUN_MASK | (rle_info->buf_length - RLE_MIN_RUN); if (HDputc((uint8)c, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (HDputc((uint8)rle_info->last_byte, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); rle_info->rle_state = RLE_INIT; rle_info->second_byte = rle_info->last_byte = (unsigned)RLE_NIL; } } buf++; length--; break; case RLE_MIX: /* mixed bunch of bytes */ /* check for run */ if ((unsigned)*buf == rle_info->last_byte && (unsigned)*buf == rle_info->second_byte) { rle_info->rle_state = RLE_RUN; /* shift to RUN state */ if (rle_info->buf_length > (RLE_MIN_RUN - 1)) { /* check for mixed data to write */ if (HDputc((uint8)((rle_info->buf_length - RLE_MIN_MIX) - (RLE_MIN_RUN - 1)), info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (Hwrite(info->aid, (rle_info->buf_length - (RLE_MIN_RUN - 1)), rle_info->buffer) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); } rle_info->buf_length = RLE_MIN_RUN; } else { /* continue MIX */ rle_info->second_byte = rle_info->last_byte; rle_info->last_byte = (unsigned)(rle_info->buffer[rle_info->buf_pos] = *buf); rle_info->buf_length++; rle_info->buf_pos++; if (rle_info->buf_length >= RLE_BUF_SIZE) { /* check for too long */ if (HDputc((uint8)(rle_info->buf_length - RLE_MIN_MIX), info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (Hwrite(info->aid, rle_info->buf_length, rle_info->buffer) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); rle_info->rle_state = RLE_INIT; rle_info->second_byte = rle_info->last_byte = (unsigned)RLE_NIL; } } buf++; length--; break; default: HRETURN_ERROR(DFE_INTERNAL, FAIL); } } rle_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcrle_encode() */ /*-------------------------------------------------------------------------- NAME HCIcrle_term -- Flush encoded data from internal buffer to RLE compressed data USAGE int32 HCIcrle_term(info) compinfo_t *info; IN: the info about the compressed element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to flush RLE data into a file. --------------------------------------------------------------------------*/ static int32 HCIcrle_term(compinfo_t *info) { comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ int c; /* character to hold a byte read in */ rle_info = &(info->cinfo.coder_info.rle_info); switch (rle_info->rle_state) { case RLE_RUN: c = RUN_MASK | (rle_info->buf_length - RLE_MIN_RUN); if (HDputc((uint8)c, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (HDputc((uint8)rle_info->last_byte, info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); break; case RLE_MIX: /* mixed bunch of bytes */ if (HDputc((uint8)((rle_info->buf_length - RLE_MIN_MIX)), info->aid) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (Hwrite(info->aid, rle_info->buf_length, rle_info->buffer) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); break; default: HRETURN_ERROR(DFE_INTERNAL, FAIL); } rle_info->rle_state = RLE_INIT; rle_info->second_byte = rle_info->last_byte = (unsigned)RLE_NIL; return SUCCEED; } /* end HCIcrle_term() */ /*-------------------------------------------------------------------------- NAME HCIcrle_staccess -- Start accessing a RLE compressed data element. USAGE int32 HCIcrle_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcrle_stread and HCIcrle_stwrite --------------------------------------------------------------------------*/ static int32 HCIcrle_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (acc_mode == DFACC_READ) info->aid = Hstartread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); else info->aid = Hstartaccess(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, DFACC_RDWR | DFACC_APPENDABLE); if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); return HCIcrle_init(access_rec); /* initialize the RLE info */ } /* end HCIcrle_staccess() */ /*-------------------------------------------------------------------------- NAME HCPcrle_stread -- start read access for compressed file USAGE int32 HCPcrle_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using a simple RLE scheme. --------------------------------------------------------------------------*/ int32 HCPcrle_stread(accrec_t *access_rec) { int32 ret; if ((ret = HCIcrle_staccess(access_rec, DFACC_READ)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcrle_stread() */ /*-------------------------------------------------------------------------- NAME HCPcrle_stwrite -- start write access for compressed file USAGE int32 HCPcrle_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using a simple RLE scheme. --------------------------------------------------------------------------*/ int32 HCPcrle_stwrite(accrec_t *access_rec) { int32 ret; if ((ret = HCIcrle_staccess(access_rec, DFACC_WRITE)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcrle_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcrle_seek -- Seek to offset within the data element USAGE int32 HCPcrle_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified int origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. --------------------------------------------------------------------------*/ int32 HCPcrle_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ uint8 *tmp_buf; /* pointer to throw-away buffer */ (void)origin; info = (compinfo_t *)access_rec->special_info; rle_info = &(info->cinfo.coder_info.rle_info); if (offset < rle_info->offset) { /* need to seek from the beginning */ if ((access_rec->access & DFACC_WRITE) && rle_info->rle_state != RLE_INIT) if (HCIcrle_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); if (HCIcrle_init(access_rec) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); } if ((tmp_buf = (uint8 *)malloc(TMP_BUF_SIZE)) == NULL) /* get tmp buffer */ HRETURN_ERROR(DFE_NOSPACE, FAIL); while (rle_info->offset + TMP_BUF_SIZE < offset) /* grab chunks */ if (HCIcrle_decode(info, TMP_BUF_SIZE, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } if (rle_info->offset < offset) /* grab the last chunk */ if (HCIcrle_decode(info, offset - rle_info->offset, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } free(tmp_buf); return SUCCEED; } /* HCPcrle_seek() */ /*-------------------------------------------------------------------------- NAME HCPcrle_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcrle_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a RLE compressed data element. --------------------------------------------------------------------------*/ int32 HCPcrle_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (HCIcrle_decode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcrle_read() */ /*-------------------------------------------------------------------------- NAME HCPcrle_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPcrle_write(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a RLE compressed data element. --------------------------------------------------------------------------*/ int32 HCPcrle_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* special element information */ comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ info = (compinfo_t *)access_rec->special_info; rle_info = &(info->cinfo.coder_info.rle_info); /* Don't allow random write in a dataset unless: */ /* 1 - append onto the end */ /* 2 - start at the beginning and rewrite (at least) the whole dataset */ if ((info->length != rle_info->offset) && (rle_info->offset != 0 && length <= (info->length - rle_info->offset))) HRETURN_ERROR(DFE_UNSUPPORTED, FAIL); if (HCIcrle_encode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; } /* HCPcrle_write() */ /*-------------------------------------------------------------------------- NAME HCPcrle_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcrle_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. --------------------------------------------------------------------------*/ int32 HCPcrle_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcrle_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcrle_endaccess -- Close the compressed data element USAGE int32 HCPcrle_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free encoding info. --------------------------------------------------------------------------*/ int HCPcrle_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_rle_info_t *rle_info; /* ptr to RLE info */ info = (compinfo_t *)access_rec->special_info; rle_info = &(info->cinfo.coder_info.rle_info); /* flush out RLE buffer */ if ((access_rec->access & DFACC_WRITE) && rle_info->rle_state != RLE_INIT) if (HCIcrle_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* close the compressed data AID */ if (Hendaccess(info->aid) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcrle_endaccess() */ hdf4-hdf4.3.1/hdf/src/crle_priv.h000066400000000000000000000101471503061704500165200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: crle_priv.h * Purpose: Header file for run-length encoding information. * Dependencies: should only be included from hcomp_priv.h * Invokes: none * Contents: Structures & definitions for run-length encoding. This header * should only be included in hcomp.c and crle.c. *---------------------------------------------------------------------------*/ #ifndef H4_CRLE_PRIV_H #define H4_CRLE_PRIV_H #include "hdf_priv.h" /* size of the RLE buffer */ #define RLE_BUF_SIZE 128 /* NIL code for run bytes */ #define RLE_NIL (-1) /* minimum length of run */ #define RLE_MIN_RUN 3 /* maximum length of run */ #define RLE_MAX_RUN (RLE_BUF_SIZE + RLE_MIN_RUN - 1) /* minimum length of mix */ #define RLE_MIN_MIX 1 /* * Notes on RLE_MIN_RUN and RLE_MIN_MIX: * (excerpt from QAK's email to RA - see bug HDFFR-1261) * * These are [small] optimizations for improving the compression ratio. The * algorithm won't encode a run of identical bytes unless it's at least * RLE_MIN_RUN bytes long. So, we can assume that all runs are at least * that many bytes, and subtract RLE_MIN_RUN from the actual run length, * allowing encoding of runs that are a little bit longer than otherwise * allowed (i.e. runs up to 127+RLE_MIN_RUN bytes, instead of only 127 bytes). * Similarly for RLE_MIN_MIX - there must be at least RLE_MIN_MIX bytes in a * "mixed" sequence of bytes, so we can encode a little bit longer sequence * of mixed bytes (127+RLE_MIN_MIX bytes, instead of only 127 bytes). */ /* RLE [en|de]coding information */ typedef struct { int32 offset; /* offset in the file */ uint8 buffer[RLE_BUF_SIZE]; /* buffer for storing RLE bytes */ int buf_length; /* number of bytes in buffer */ int buf_pos; /* offset into the buffer */ unsigned last_byte; /* the last byte stored in the buffer */ unsigned second_byte; /* the second to last byte stored in the buffer */ enum { RLE_INIT, /* initial state, need to read a byte to determine the next state */ RLE_RUN, /* buffer up to the current position is a run */ RLE_MIX /* buffer up to the current position is a mix */ } rle_state; /* state of the buffer storage */ } comp_coder_rle_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t crle_funcs; /* functions to perform run-length encoding */ /* ** from crle.c */ HDFLIBAPI int32 HCPcrle_stread(accrec_t *rec); HDFLIBAPI int32 HCPcrle_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcrle_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcrle_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcrle_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcrle_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI int HCPcrle_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CRLE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/cskphuff.c000066400000000000000000000604511503061704500163420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* cskphuff.c - HDF "skipping" huffman encoding I/O routines None of these routines are designed to be called by other users except for the modeling layer of the compression routines. */ /* * This piece of code uses Semi-Splay trees to Huffman encode a raster * image file. */ /* General HDF includes */ #include "hdf_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* Internal Defines */ #define TMP_BUF_SIZE 8192 /* size of throw-away buffer */ /* functions to perform skipping huffman encoding */ funclist_t cskphuff_funcs = {HCPcskphuff_stread, HCPcskphuff_stwrite, HCPcskphuff_seek, HCPcskphuff_inquire, HCPcskphuff_read, HCPcskphuff_write, HCPcskphuff_endaccess, NULL, NULL}; /* declaration of the functions provided in this module */ static int32 HCIcskphuff_init(accrec_t *access_rec, uintn alloc_buf); /*-------------------------------------------------------------------------- NAME HCIcskphuff_splay -- Splay the tree around the source code passed USAGE void HCIcskphuff_splay(skphuff_info,plain) comp_coder_skphuff_info_t *skphuff_info; IN:ptr to skphuff info uint8 plain; IN: the source code to splay the tree around RETURNS None. DESCRIPTION Common code called by HCIcskphuff_encode and HCIcskphuff_decode GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static void HCIcskphuff_splay(comp_coder_skphuff_info_t *skphuff_info, uint8 plain) { uintn a, b; /* children of nodes to semi-rotate */ uint8 c, d; /* pair of nodes to semi-rotate */ intn skip_num; /* the tree we are splaying */ uintn *lleft, /* local copy of the left pointer */ *lright; /* local copy of the right pointer */ uint8 *lup; /* local copy of the up pointer */ skip_num = skphuff_info->skip_pos; /* get the tree number to splay */ /* Get the tree pointers */ lleft = skphuff_info->left[skip_num]; lright = skphuff_info->right[skip_num]; lup = skphuff_info->up[skip_num]; a = (uintn)plain + SUCCMAX; /* get the index for this source code in the up array */ do { /* walk up the tree, semi-rotating pairs */ c = lup[a]; /* find the parent of the node to semi-rotate around */ if (c != ROOT) { /* a pair remain above this node */ d = lup[(int)c]; /* get the grand-parent of the node to semi-rotate around */ b = lleft[(int)d]; /* Exchange the children of the pair */ if ((uintn)c == b) { b = lright[(int)d]; lright[(int)d] = a; } /* end if */ else lleft[(int)d] = a; if (a == lleft[(int)c]) lleft[(int)c] = b; else lright[(int)c] = b; lup[a] = d; lup[b] = c; a = (uintn)d; } /* end if */ else { /* handle odd node at end */ a = (uintn)c; } /* end else */ } while (a != ROOT); } /* end HCIcskphuff_splay() */ /*-------------------------------------------------------------------------- NAME HCIcskphuff_init -- Initialize a skipping huffman compressed data element. USAGE int32 HCIcskphuff_init(access_rec) accrec_t *access_rec; IN: the access record of the data element uintn alloc_buf; IN: whether to allocate the buffers or not RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcskphuff_staccess and HCIcskphuff_seek GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcskphuff_init(accrec_t *access_rec, uintn alloc_buf) { compinfo_t *info; /* special element information */ comp_coder_skphuff_info_t *skphuff_info; /* ptr to skphuff info */ intn i, j, k; /* local counting var */ info = (compinfo_t *)access_rec->special_info; if (Hbitseek(info->aid, 0, 0) == FAIL) /* seek to beginning of element */ HRETURN_ERROR(DFE_SEEKERROR, FAIL); skphuff_info = &(info->cinfo.coder_info.skphuff_info); /* Initialize RLE state information */ skphuff_info->skip_pos = 0; /* start in first byte */ skphuff_info->offset = 0; /* start at the beginning of the data */ if (alloc_buf == TRUE) { /* allocate pointers to the compression buffers */ if ((skphuff_info->left = (uintn **)malloc(sizeof(uintn *) * (uintn)skphuff_info->skip_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); if ((skphuff_info->right = (uintn **)malloc(sizeof(uintn *) * (uintn)skphuff_info->skip_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); if ((skphuff_info->up = (uint8 **)malloc(sizeof(uint8 *) * (uintn)skphuff_info->skip_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* allocate compression buffer for each skipping byte */ for (i = 0; i < skphuff_info->skip_size; i++) { if ((skphuff_info->left[i] = (uintn *)malloc(sizeof(uintn) * SUCCMAX)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); if ((skphuff_info->right[i] = (uintn *)malloc(sizeof(uintn) * SUCCMAX)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); if ((skphuff_info->up[i] = (uint8 *)malloc(sizeof(uint8) * TWICEMAX)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* end for */ } /* end if */ for (k = 0; k < skphuff_info->skip_size; k++) { for (i = 0; i < TWICEMAX; i++) /* initialize the up pointers to point to their parent in the tree */ skphuff_info->up[k][i] = (uint8)(i >> 1); for (j = 0; j < SUCCMAX; j++) { /* initialize the left & right pointers correctly */ skphuff_info->left[k][j] = (uintn)(j << 1); skphuff_info->right[k][j] = (uintn)((j << 1) + 1); } /* end for */ } /* end for */ return SUCCEED; } /* end HCIcskphuff_init() */ /*-------------------------------------------------------------------------- NAME HCIcskphuff_decode -- Decode skipping Huffman compressed data into a buffer. USAGE int32 HCIcskphuff_decode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to read into the buffer uint8 *buf; OUT: buffer to store the bytes read RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to decode skipping Huffman data from the file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcskphuff_decode(compinfo_t *info, int32 length, uint8 *buf) { comp_coder_skphuff_info_t *skphuff_info; /* ptr to skipping Huffman info */ int32 orig_length; /* original length to read */ uint32 bit; /* bit from the file */ uintn a; uint8 plain; /* the source code expanded from the file */ skphuff_info = &(info->cinfo.coder_info.skphuff_info); orig_length = length; /* save this for later */ while (length > 0) { /* decode until we have all the bytes we need */ a = ROOT; /* start at the root of the tree and find the leaf we need */ do { /* walk down once for each bit on the path */ if (Hbitread(info->aid, 1, &bit) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); a = ((bit == 0) ? (skphuff_info->left[skphuff_info->skip_pos][a]) : (skphuff_info->right[skphuff_info->skip_pos][a])); } while (a <= SKPHUFF_MAX_CHAR); plain = (uint8)(a - SUCCMAX); HCIcskphuff_splay(skphuff_info, plain); skphuff_info->skip_pos = (skphuff_info->skip_pos + 1) % skphuff_info->skip_size; *buf++ = plain; length--; } /* end while */ skphuff_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcskphuff_decode() */ /*-------------------------------------------------------------------------- NAME HCIcskphuff_encode -- Encode data from a buffer into skipping Huffman compressed data USAGE int32 HCIcskphuff_encode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to store from the buffer const uint8 *buf; OUT: buffer to get the bytes from RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to encode skipping Huffman data into a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcskphuff_encode(compinfo_t *info, int32 length, const uint8 *buf) { comp_coder_skphuff_info_t *skphuff_info; /* ptr to skipping Huffman info */ int32 orig_length; /* original length to write */ intn stack_ptr; /* pointer to the position on the stack */ uintn a, last_node; /* variables to record the current & last position in the tree */ uint32 output_bits[(SKPHUFF_MAX_CHAR / 4) + 1], /* bits to write out */ bit_count[(SKPHUFF_MAX_CHAR / 4) + 1], /* # of bits stored in each stack location */ bit_mask; /* bit-mask for accumulating bits to output */ skphuff_info = &(info->cinfo.coder_info.skphuff_info); orig_length = length; /* save this for later */ while (length > 0) { /* encode until we stored all the bytes */ a = (uintn)*buf + SUCCMAX; /* find position in the up array */ stack_ptr = 0; bit_mask = 1; /* initialize to the lowest bit */ output_bits[0] = 0; bit_count[0] = 0; do { /* walk up the tree, pushing bits */ last_node = a; /* keep track of the current node */ a = (uintn)skphuff_info->up[skphuff_info->skip_pos][a]; /* move the current node up one */ if (skphuff_info->right[skphuff_info->skip_pos][a] == last_node) output_bits[stack_ptr] |= bit_mask; /* push a 1 if this is the right node */ bit_mask <<= 1; /* rotate bit mask over */ bit_count[stack_ptr]++; /* increment # of bits stored */ if (bit_count[stack_ptr] >= 32) { stack_ptr++; /* increment stack position */ bit_mask = 1; /* reset bit mask to lowest bit position */ output_bits[stack_ptr] = 0; /* initialize stack location */ bit_count[stack_ptr] = 0; } /* end if */ } while (a != ROOT); do { /* output the bits we have */ if (bit_count[stack_ptr] > 0) { if (Hbitwrite(info->aid, (intn)bit_count[stack_ptr], output_bits[stack_ptr]) != (intn)bit_count[stack_ptr]) HRETURN_ERROR(DFE_CENCODE, FAIL); } /* end if */ stack_ptr--; } while (stack_ptr >= 0); HCIcskphuff_splay(skphuff_info, *buf); /* semi-splay the tree around this node */ skphuff_info->skip_pos = (skphuff_info->skip_pos + 1) % skphuff_info->skip_size; buf++; length--; } /* end while */ skphuff_info->offset += orig_length; /* incr. abs. offset into the file */ return SUCCEED; } /* end HCIcskphuff_encode() */ /*-------------------------------------------------------------------------- NAME HCIcskphuff_term -- Flush encoded data from internal buffer to skipping Huffman compressed data USAGE int32 HCIcskphuff_term(info) compinfo_t *info; IN: the info about the compressed element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to flush skipping Huffman data into a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcskphuff_term(compinfo_t *info) { comp_coder_skphuff_info_t *skphuff_info; /* ptr to skipping Huffman info */ intn i; /* local counting variable */ skphuff_info = &(info->cinfo.coder_info.skphuff_info); skphuff_info->skip_pos = 0; /* Free the buffers we allocated */ for (i = 0; i < skphuff_info->skip_size; i++) { free(skphuff_info->left[i]); free(skphuff_info->right[i]); free(skphuff_info->up[i]); } /* Free the buffer arrays */ free(skphuff_info->left); free(skphuff_info->right); free(skphuff_info->up); return SUCCEED; } /* end HCIcskphuff_term() */ /*-------------------------------------------------------------------------- NAME HCIcskphuff_staccess -- Start accessing a skipping Huffman compressed data element. USAGE int32 HCIcskphuff_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcskphuff_stread and HCIcskphuff_stwrite GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 HCIcskphuff_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; /* need to check for not writing, as opposed to read access */ /* because of the way the access works */ if (!(acc_mode & DFACC_WRITE)) info->aid = Hstartbitread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); else { info->aid = Hstartbitwrite(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, 0); Hbitappendable(info->aid); } /* end else */ if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); if ((acc_mode & DFACC_WRITE) && Hbitappendable(info->aid) == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); return HCIcskphuff_init(access_rec, TRUE); /* initialize the skip-Huffman info */ } /* end HCIcskphuff_staccess() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_stread -- start read access for compressed file USAGE int32 HCPcskphuff_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using a "skipping" Huffman scheme. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_stread(accrec_t *access_rec) { int32 ret; if ((ret = HCIcskphuff_staccess(access_rec, DFACC_READ)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcskphuff_stread() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_stwrite -- start write access for compressed file USAGE int32 HCPcskphuff_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using a "skipping" Huffman scheme. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_stwrite(accrec_t *access_rec) { int32 ret; if ((ret = HCIcskphuff_staccess(access_rec, DFACC_WRITE)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcskphuff_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_seek -- Seek to offset within the data element USAGE int32 HCPcskphuff_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified intn origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ comp_coder_skphuff_info_t *skphuff_info; /* ptr to skipping Huffman info */ uint8 *tmp_buf; /* pointer to throw-away buffer */ (void)origin; info = (compinfo_t *)access_rec->special_info; skphuff_info = &(info->cinfo.coder_info.skphuff_info); if (offset < skphuff_info->offset) { /* need to seek from the beginning */ if (HCIcskphuff_init(access_rec, FALSE) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); } if ((tmp_buf = (uint8 *)malloc(TMP_BUF_SIZE)) == NULL) /* get tmp buffer */ HRETURN_ERROR(DFE_NOSPACE, FAIL); while (skphuff_info->offset + TMP_BUF_SIZE < offset) /* grab chunks */ if (HCIcskphuff_decode(info, TMP_BUF_SIZE, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } /* end if */ if (skphuff_info->offset < offset) /* grab the last chunk */ if (HCIcskphuff_decode(info, offset - skphuff_info->offset, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } free(tmp_buf); return SUCCEED; } /* HCPcskphuff_seek() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcskphuff_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a skipping Huffman compressed data element. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (HCIcskphuff_decode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcskphuff_read() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPcskphuff_write(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a skipping Huffman compressed data element. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* special element information */ comp_coder_skphuff_info_t *skphuff_info; /* ptr to skipping Huffman info */ info = (compinfo_t *)access_rec->special_info; skphuff_info = &(info->cinfo.coder_info.skphuff_info); /* Don't allow random write in a dataset unless: */ /* 1 - append onto the end */ /* 2 - start at the beginning and rewrite (at least) the whole dataset */ if ((info->length != skphuff_info->offset) && (skphuff_info->offset != 0 && length <= info->length)) HRETURN_ERROR(DFE_UNSUPPORTED, FAIL); if (HCIcskphuff_encode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; } /* HCPcskphuff_write() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcskphuff_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPcskphuff_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcskphuff_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcskphuff_endaccess -- Close the compressed data element USAGE int32 HCPcskphuff_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free encoding info. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HCPcskphuff_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; /* Clean up the skipping huffman data structures */ if (HCIcskphuff_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); /* close the compressed data AID */ if (Hendbitaccess(info->aid, 0) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcskphuff_endaccess() */ hdf4-hdf4.3.1/hdf/src/cskphuff_priv.h000066400000000000000000000056211503061704500174050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: cskphuff_priv.h * Purpose: Header file for skipping huffman encoding information. * Dependencies: should only be included from hcomp_priv.h *---------------------------------------------------------------------------*/ #ifndef H4_CSKPHUFF_PRIV_H #define H4_CSKPHUFF_PRIV_H #include "hdf_priv.h" /* The maximum source character code: */ #define SKPHUFF_MAX_CHAR 255 /* One greater than the maximum source character code: */ #define SUCCMAX (SKPHUFF_MAX_CHAR + 1) /* Twice the maximum source character code: */ #define TWICEMAX (2 * SUCCMAX + 1) /* The root node in the tree */ #define ROOT 0 /* Skipping huffman [en|de]coding information */ typedef struct { intn skip_size; /* number of bytes in each element */ uintn **left, /* define the left and right pointer arrays */ **right; uint8 **up; /* define the up pointer array */ intn skip_pos; /* current byte to read or write */ int32 offset; /* offset in the de-compressed array */ } comp_coder_skphuff_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t cskphuff_funcs; /* functions to perform skipping huffman encoding */ /* ** from cskphuff.c */ HDFLIBAPI int32 HCPcskphuff_stread(accrec_t *rec); HDFLIBAPI int32 HCPcskphuff_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcskphuff_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcskphuff_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcskphuff_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcskphuff_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HCPcskphuff_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CSKPHUFF_PRIV_H */ hdf4-hdf4.3.1/hdf/src/cszip.c000066400000000000000000001060461503061704500156620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* General HDF includes */ #include "hdf_priv.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* internal defines */ #define TMP_BUF_SIZE 8192 /* size of throw-away buffer */ /* functions to perform szip encoding */ funclist_t cszip_funcs = {HCPcszip_stread, HCPcszip_stwrite, HCPcszip_seek, HCPcszip_inquire, HCPcszip_read, HCPcszip_write, HCPcszip_endaccess, NULL, NULL}; /* declaration of the functions provided in this module */ static int32 HCIcszip_staccess(accrec_t *access_rec, int16 acc_mode); static int32 HCIcszip_init(accrec_t *access_rec); static int32 HCIcszip_decode(compinfo_t *info, int32 length, uint8 *buf); static int32 HCIcszip_encode(compinfo_t *info, int32 length, const uint8 *buf); static int32 HCIcszip_term(compinfo_t *info); /*-------------------------------------------------------------------------- NAME HCIcszip_init -- Initialize a SZIP compressed data element. USAGE int32 HCIcszip_init(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcszip_staccess and HCIcszip_seek --------------------------------------------------------------------------*/ static int32 HCIcszip_init(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ int ret_value = SUCCEED; #ifdef H4_HAVE_LIBSZ /* Sanity check to make certain that we haven't drifted out of date with * the mask options from the SZIP ricehdf.h header */ assert(H4_SZ_ALLOW_K13_OPTION_MASK == SZ_ALLOW_K13_OPTION_MASK); assert(H4_SZ_CHIP_OPTION_MASK == SZ_CHIP_OPTION_MASK); assert(H4_SZ_EC_OPTION_MASK == SZ_EC_OPTION_MASK); assert(H4_SZ_LSB_OPTION_MASK == SZ_LSB_OPTION_MASK); assert(H4_SZ_MSB_OPTION_MASK == SZ_MSB_OPTION_MASK); assert(H4_SZ_NN_OPTION_MASK == SZ_NN_OPTION_MASK); assert(H4_SZ_RAW_OPTION_MASK == SZ_RAW_OPTION_MASK); #endif info = (compinfo_t *)access_rec->special_info; if (Hseek(info->aid, 0, DF_START) == FAIL) /* seek to beginning of element */ HGOTO_ERROR(DFE_SEEKERROR, FAIL); szip_info = &(info->cinfo.coder_info.szip_info); /* Initialize SZIP state information */ szip_info->szip_state = SZIP_INIT; /* start in initial state */ if (szip_info->buffer_size != 0) { szip_info->buffer_size = 0; /* offset into the file */ free(szip_info->buffer); szip_info->buffer = NULL; } szip_info->offset = 0; /* offset into the file */ szip_info->szip_dirty = SZIP_CLEAN; done: return ret_value; } /* end HCIcszip_init() */ /*-------------------------------------------------------------------------- NAME HCIcszip_decode -- Decode SZIP compressed data into a buffer. USAGE int32 HCIcszip_decode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to read into the buffer uint8 *buf; OUT: buffer to store the bytes read RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to decode SZIP data from the file. --------------------------------------------------------------------------*/ static int32 HCIcszip_decode(compinfo_t *info, int32 length, uint8 *buf) { #ifdef H4_HAVE_LIBSZ accrec_t *access_rec; comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ uint8 *in_buffer; uint8 *out_buffer; int32 in_length; int32 out_length; int bytes_per_pixel; int32 rbytes; uint16 tag, ref; int32 len1; int32 aid; int32 status; size_t size_out; uint8 *cp; int32 good_bytes; int32 old_way; SZ_com_t sz_param; #endif #ifdef H4_HAVE_LIBSZ szip_info = &(info->cinfo.coder_info.szip_info); if (szip_info->szip_state == SZIP_INIT) { /* Load from disk, decode the data */ if ((access_rec = HAatom_object(info->aid)) == NULL) /* get the access_rec pointer */ HRETURN_ERROR(DFE_ARGS, FAIL); /* Discover how much data must be read */ if (HTPinquire(access_rec->ddid, &tag, &ref, NULL, &in_length) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); if (in_length == -1) HRETURN_ERROR(DFE_INTERNAL, FAIL); if (tag & 0x4000) { /* this is linked list -- get the length of the data */ aid = Hstartread(access_rec->file_id, tag, ref); if (HDinqblockinfo(aid, &len1, NULL, NULL, NULL) == FAIL) { Hendaccess(aid); HRETURN_ERROR(DFE_INTERNAL, FAIL); } in_length = len1; Hendaccess(aid); } old_way = (int)(szip_info->options_mask & SZ_H4_REV_2); if (old_way == 0) { /* special case: read data encoded in V4.2r0 */ old_way = 1; good_bytes = in_length; in_length = in_length + 5; if ((in_buffer = (uint8 *)malloc((size_t)in_length)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); cp = in_buffer; *cp = 0; cp++; INT32ENCODE(cp, good_bytes); } else { /* V4.2r1: in_length is correct */ old_way = 0; if ((in_buffer = (uint8 *)malloc((size_t)in_length)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* Allocate memory for the uncompressed data */ bytes_per_pixel = (szip_info->bits_per_pixel + 7) >> 3; if (bytes_per_pixel == 3) bytes_per_pixel++; out_length = szip_info->pixels * bytes_per_pixel; if ((out_buffer = (uint8 *)malloc((size_t)out_length)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* Read the unompressed data */ if (old_way == 1) { /* this is encoded in V4.2r0 */ /* the preamble isn't in the file, so read only the data */ if ((rbytes = Hread(info->aid, in_length - 5, in_buffer + 5)) == FAIL) { free(out_buffer); free(in_buffer); HRETURN_ERROR(DFE_READERROR, FAIL); } if (rbytes == 0 || rbytes != (in_length - 5)) { /* is this possible? */ free(out_buffer); free(in_buffer); HRETURN_ERROR(DFE_READERROR, FAIL); } } else { /* HDF4.2R1: read the data plus preamble */ if ((rbytes = Hread(info->aid, in_length, in_buffer)) == FAIL) { free(out_buffer); free(in_buffer); HRETURN_ERROR(DFE_READERROR, FAIL); } if (rbytes == 0 || rbytes != in_length) { /* is this possible? */ free(out_buffer); free(in_buffer); HRETURN_ERROR(DFE_READERROR, FAIL); } } cp = in_buffer; cp++; INT32DECODE(cp, good_bytes); if (in_buffer[0] == 1) { /* This byte means the data was not compressed -- just copy out */ szip_info->szip_state = SZIP_RUN; memcpy(out_buffer, in_buffer + 5, (size_t)good_bytes); szip_info->buffer = out_buffer; szip_info->buffer_pos = 0; szip_info->buffer_size = good_bytes; szip_info->offset = 0; if (good_bytes > length) { /* partial read */ memcpy(buf, in_buffer + 5, (size_t)length); szip_info->buffer_pos += length; szip_info->buffer_size -= length; } else { /* read the whole data block to the user buffer */ memcpy(buf, in_buffer + 5, (size_t)good_bytes); szip_info->buffer_pos += good_bytes; szip_info->buffer_size -= good_bytes; } szip_info->offset = szip_info->buffer_pos; free(in_buffer); if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; } /* Decompress the data */ /* set up the parameters */ sz_param.options_mask = (szip_info->options_mask & ~SZ_H4_REV_2); sz_param.bits_per_pixel = szip_info->bits_per_pixel; sz_param.pixels_per_block = szip_info->pixels_per_block; sz_param.pixels_per_scanline = szip_info->pixels_per_scanline; size_out = (size_t)out_length; if (SZ_OK != (status = SZ_BufftoBuffDecompress(out_buffer, &size_out, (in_buffer + 5), (size_t)good_bytes, &sz_param))) { free(out_buffer); free(in_buffer); HRETURN_ERROR(DFE_CDECODE, FAIL); } if ((int32)size_out != out_length) { /* This should never happen?? */ printf("status: %d ??bytes != out_length %zu != %d\n", status, size_out, out_length); } /* The data is successfully decompressed. Put into the szip struct */ free(in_buffer); szip_info->szip_state = SZIP_RUN; szip_info->buffer = out_buffer; szip_info->buffer_pos = 0; szip_info->buffer_size = out_length; szip_info->offset = 0; } /* copy the data into the return buffer */ if (length > szip_info->buffer_size) { /* can't happen?? panic?? */ free(szip_info->buffer); szip_info->buffer = NULL; return FAIL; } memcpy(buf, szip_info->buffer + szip_info->buffer_pos, (size_t)length); szip_info->buffer_pos += length; szip_info->buffer_size -= length; szip_info->offset = szip_info->buffer_pos; if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; #else /* ifdef H4_HAVE_LIBSZ */ (void)info; (void)length; (void)buf; HRETURN_ERROR(DFE_CANTCOMP, FAIL); #endif /* H4_HAVE_LIBSZ */ } /* end HCIcszip_decode() */ /*-------------------------------------------------------------------------- NAME HCIcszip_encode -- Encode data from a buffer into SZIP compressed data USAGE int32 HCIcszip_encode(info,length,buf) compinfo_t *info; IN: the info about the compressed element int32 length; IN: number of bytes to store from the buffer const uint8 *buf; OUT: buffer to get the bytes from RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to encode SZIP data into a file. --------------------------------------------------------------------------*/ static int32 HCIcszip_encode(compinfo_t *info, int32 length, const uint8 *buf) { #ifdef H4_HAVE_SZIP_ENCODER int bytes_per_pixel; comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ int32 buffer_size; if (SZ_encoder_enabled() == 0) HRETURN_ERROR(DFE_NOENCODER, FAIL); szip_info = &(info->cinfo.coder_info.szip_info); if (szip_info->szip_state == SZIP_INIT) { /* Need to initialize */ bytes_per_pixel = (szip_info->bits_per_pixel + 7) >> 3; if (bytes_per_pixel == 3) bytes_per_pixel = 4; buffer_size = szip_info->pixels * bytes_per_pixel; if ((szip_info->buffer = malloc((size_t)buffer_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); szip_info->buffer_size = buffer_size; szip_info->buffer_pos = 0; szip_info->szip_state = SZIP_RUN; } /* copy the data into the buffer. This will be written in 'term' function */ memcpy(szip_info->buffer + szip_info->buffer_pos, buf, (size_t)length); szip_info->buffer_pos += length; szip_info->buffer_size -= length; szip_info->offset = szip_info->buffer_pos; szip_info->szip_dirty = SZIP_DIRTY; return SUCCEED; #else /* ifdef H4_HAVE_SZIP_ENCODER */ (void)info; (void)length; (void)buf; HRETURN_ERROR(DFE_CANTDECOMP, FAIL); #endif /* H4_HAVE_SZIP_ENCODER */ } /* end HCIcszip_encode() */ /*-------------------------------------------------------------------------- NAME HCIcszip_term -- Flush encoded data from internal buffer to SZIP compressed data USAGE int32 HCIcszip_term(info) compinfo_t *info; IN: the info about the compressed element RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called to flush SZIP data into a file. --------------------------------------------------------------------------*/ static int32 HCIcszip_term(compinfo_t *info) { #ifdef H4_HAVE_SZIP_ENCODER comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ uint8 *out_buffer; uint8 *ob; int32 out_buffer_size; int bytes_per_pixel; int32 current_size; accrec_t *access_rec; uint16 tag, ref; int32 len1; int32 aid; SZ_com_t sz_param; size_t size_out; int32 status; uint8 *cp; szip_info = &(info->cinfo.coder_info.szip_info); if (szip_info->szip_state != SZIP_RUN) return SUCCEED; /* nothing to do */ if (szip_info->szip_dirty != SZIP_DIRTY) /* Should never happen?? */ { if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; } szip_info->szip_state = SZIP_TERM; current_size = 0; if ((access_rec = HAatom_object(info->aid)) == NULL) /* get the access_rec pointer */ HRETURN_ERROR(DFE_INTERNAL, FAIL); /* Discover how much data must be read */ if (HTPinquire(access_rec->ddid, &tag, &ref, NULL, ¤t_size) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); if (tag & 0x4000) { /* this is linked list -- get the length of the data */ aid = Hstartread(access_rec->file_id, tag, ref); if (HDinqblockinfo(aid, &len1, NULL, NULL, NULL) == FAIL) { Hendaccess(aid); HRETURN_ERROR(DFE_INTERNAL, FAIL); } current_size = len1; Hendaccess(aid); } /* Compute how much memory is needed to hold compressed data */ bytes_per_pixel = (szip_info->bits_per_pixel + 7) >> 3; if (bytes_per_pixel == 3) bytes_per_pixel = 4; /* temporary buffer for compression -- leave extra space in case of overflow in the SZIP algorithm. (This number corresponds to the current internal buffer of szip lib.) Sigh. */ /* allocate one byte to indicate when data is written uncompressed */ /* allocate 4 bytes to store the amount of data written: after compression may be less than the previous size */ out_buffer_size = (szip_info->pixels * 2 * bytes_per_pixel) + 5; /* heuristic for tiny data -- really shouldn't compress stuff this small, but there isn't any way to prevent it from getting here */ if (out_buffer_size < 1024) out_buffer_size = 1024; if ((out_buffer = malloc((size_t)out_buffer_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* set params */ sz_param.options_mask = szip_info->options_mask; sz_param.bits_per_pixel = szip_info->bits_per_pixel; sz_param.pixels_per_block = szip_info->pixels_per_block; sz_param.pixels_per_scanline = szip_info->pixels_per_scanline; size_out = (size_t)out_buffer_size - 5; *out_buffer = 0; if (SZ_OK != (status = SZ_BufftoBuffCompress((out_buffer + 5), &size_out, szip_info->buffer, (size_t)szip_info->buffer_pos, &sz_param))) { /* Compression Failed. Analyse several cases, and clean up the mess */ if ((int32)size_out > out_buffer_size) { /* Should never happen */ printf("PANIC: overwrote memory\n"); fflush(stdout); } if (status == 2 /*SZ_OUTBUF_FULL*/) { /* SZIP internal overflow: data not successfully compressed */ /* Write out the uncompressed data */ *out_buffer = 1; /* 1 = don't decompress */ cp = out_buffer; cp++; INT32ENCODE(cp, szip_info->buffer_pos); memcpy((out_buffer + 5), szip_info->buffer, (size_t)szip_info->buffer_pos); free(out_buffer); szip_info->szip_dirty = SZIP_CLEAN; if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; } /* compress failed, return error */ szip_info->szip_dirty = SZIP_CLEAN; free(out_buffer); if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } HRETURN_ERROR(DFE_CENCODE, FAIL); } /* Compression Succeeded, write out the compressed data */ if ((int32)size_out >= out_buffer_size) printf("PANIC: overwrote memory but returned OK?\n"); fflush(stdout); if ((int32)size_out > (szip_info->pixels * bytes_per_pixel)) { /* The compression succeeded, but is larger than the original data! */ /* Write the original data, discard the output */ *out_buffer = 1; /* 1 = don't decompress */ cp = out_buffer; cp++; INT32ENCODE(cp, szip_info->buffer_pos); memcpy((out_buffer + 5), szip_info->buffer, (size_t)szip_info->buffer_pos); Hwrite(info->aid, (szip_info->buffer_pos + 5), out_buffer); szip_info->szip_dirty = SZIP_CLEAN; free(out_buffer); if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; } if ((current_size > 0) && (((int32)size_out + 5) < current_size)) { /* SZIP freaks out if there is junk at the end of the good data */ /* need to have enough data to overwrite the existing data */ /* allocate a buffer, fill in the good data. The rest must be zeroes */ if ((ob = malloc((size_t)current_size)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); *ob = 0; /* data needs to be decompressed */ cp = ob; cp++; INT32ENCODE(cp, size_out); /* how much to decompress (< total size)*/ memcpy((ob + 5), out_buffer + 5, size_out); Hwrite(info->aid, current_size, ob); /* write out at least 'current_size' bytes */ szip_info->szip_dirty = SZIP_CLEAN; free(out_buffer); free(ob); if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } return SUCCEED; } /* Finally! Write the compressed data. Byte 0 is '0' */ *out_buffer = 0; /* data needs to be decompressed */ cp = out_buffer; cp++; INT32ENCODE(cp, size_out); /* whole buffer needs to be decompressed */ status = Hwrite(info->aid, (int32)size_out + 5, out_buffer); szip_info->szip_dirty = SZIP_CLEAN; if (szip_info->buffer_size == 0) { free(szip_info->buffer); szip_info->buffer = NULL; } free(out_buffer); return SUCCEED; #else /* H4_HAVE_SZIP_ENCODER */ (void)info; HRETURN_ERROR(DFE_CANTCOMP, FAIL); #endif /* H4_HAVE_SZIP_ENCODER */ } /* end HCIcszip_term() */ /*-------------------------------------------------------------------------- NAME HCIcszip_staccess -- Start accessing a SZIP compressed data element. USAGE int32 HCIcszip_staccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns SUCCEED or FAIL DESCRIPTION Common code called by HCIcszip_stread and HCIcszip_stwrite --------------------------------------------------------------------------*/ static int32 HCIcszip_staccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (acc_mode == DFACC_READ) info->aid = Hstartread(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); else #ifdef H4_HAVE_SZIP_ENCODER { if (SZ_encoder_enabled() == 0) HRETURN_ERROR(DFE_NOENCODER, FAIL); info->aid = Hstartaccess(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref, DFACC_RDWR | DFACC_APPENDABLE); } #else HRETURN_ERROR(DFE_DENIED, FAIL); #endif if (info->aid == FAIL) HRETURN_ERROR(DFE_DENIED, FAIL); return HCIcszip_init(access_rec); /* initialize the SZIP info */ } /* end HCIcszip_staccess() */ /*-------------------------------------------------------------------------- NAME HCPcszip_stread -- start read access for compressed file USAGE int32 HCPcszip_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using a simple SZIP scheme. --------------------------------------------------------------------------*/ int32 HCPcszip_stread(accrec_t *access_rec) { int32 ret; if ((ret = HCIcszip_staccess(access_rec, DFACC_READ)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcszip_stread() */ /*-------------------------------------------------------------------------- NAME HCPcszip_stwrite -- start write access for compressed file USAGE int32 HCPcszip_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using a simple SZIP scheme. --------------------------------------------------------------------------*/ int32 HCPcszip_stwrite(accrec_t *access_rec) { int32 ret; if ((ret = HCIcszip_staccess(access_rec, DFACC_WRITE)) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); return ret; } /* HCPcszip_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPcszip_seek -- Seek to offset within the data element USAGE int32 HCPcszip_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified int origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. --------------------------------------------------------------------------*/ int32 HCPcszip_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* special element information */ comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ uint8 *tmp_buf; /* pointer to throw-away buffer */ (void)origin; info = (compinfo_t *)access_rec->special_info; szip_info = &(info->cinfo.coder_info.szip_info); if (offset < szip_info->offset) { /* need to seek from the beginning */ if (szip_info->szip_dirty == SZIP_DIRTY && szip_info->szip_state != SZIP_INIT) { if (HCIcszip_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); } if (HCIcszip_init(access_rec) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); } /* end if */ if ((tmp_buf = (uint8 *)malloc(TMP_BUF_SIZE)) == NULL) /* get tmp buffer */ HRETURN_ERROR(DFE_NOSPACE, FAIL); while (szip_info->offset + TMP_BUF_SIZE < offset) /* grab chunks */ { if (HCIcszip_decode(info, TMP_BUF_SIZE, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } } if (szip_info->offset < offset) /* grab the last chunk */ { if (HCIcszip_decode(info, offset - szip_info->offset, tmp_buf) == FAIL) { free(tmp_buf); HRETURN_ERROR(DFE_CDECODE, FAIL); } } free(tmp_buf); return SUCCEED; } /* HCPcszip_seek() */ /*-------------------------------------------------------------------------- NAME HCPcszip_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPcszip_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a SZIP compressed data element. --------------------------------------------------------------------------*/ int32 HCPcszip_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* special element information */ info = (compinfo_t *)access_rec->special_info; if (HCIcszip_decode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CDECODE, FAIL); return length; } /* HCPcszip_read() */ /*-------------------------------------------------------------------------- NAME HCPcszip_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPcszip_write(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a SZIP compressed data element. --------------------------------------------------------------------------*/ int32 HCPcszip_write(accrec_t *access_rec, int32 length, const void *data) { #ifdef H4_HAVE_SZIP_ENCODER compinfo_t *info; /* special element information */ comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ if (SZ_encoder_enabled() == 0) HRETURN_ERROR(DFE_NOENCODER, FAIL); info = (compinfo_t *)access_rec->special_info; szip_info = &(info->cinfo.coder_info.szip_info); /* Don't allow random write in a dataset unless: */ /* 1 - append onto the end */ /* 2 - start at the beginning and rewrite (at least) the whole dataset */ if ((info->length != szip_info->offset) && (szip_info->offset != 0 || length < info->length)) HRETURN_ERROR(DFE_UNSUPPORTED, FAIL); if (HCIcszip_encode(info, length, data) == FAIL) HRETURN_ERROR(DFE_CENCODE, FAIL); return length; #else /* ifdef H4_HAVE_SZIP_ENCODER */ (void)access_rec; (void)length; (void)data; HRETURN_ERROR(DFE_CANTDECOMP, FAIL); #endif /* H4_HAVE_SZIP_ENCODER */ } /* HCPcszip_write() */ /*-------------------------------------------------------------------------- NAME HCPcszip_inquire -- Inquire information about the access record and data element. USAGE int32 HCPcszip_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. --------------------------------------------------------------------------*/ int32 HCPcszip_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { (void)access_rec; (void)pfile_id; (void)ptag; (void)pref; (void)plength; (void)poffset; (void)pposn; (void)paccess; (void)pspecial; return SUCCEED; } /* HCPcszip_inquire() */ /*-------------------------------------------------------------------------- NAME HCPcszip_endaccess -- Close the compressed data element USAGE int32 HCPcszip_endaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free encoding info. --------------------------------------------------------------------------*/ int HCPcszip_endaccess(accrec_t *access_rec) { compinfo_t *info; /* special element information */ comp_coder_szip_info_t *szip_info; /* ptr to SZIP info */ info = (compinfo_t *)access_rec->special_info; szip_info = &(info->cinfo.coder_info.szip_info); /* flush out SZIP buffer if there is unwritten data */ if (szip_info->szip_dirty == SZIP_DIRTY && szip_info->szip_state != SZIP_INIT) { if (HCIcszip_term(info) == FAIL) HRETURN_ERROR(DFE_CTERM, FAIL); } /* close the compressed data AID */ if (Hendaccess(info->aid) == FAIL) HRETURN_ERROR(DFE_CANTCLOSE, FAIL); return SUCCEED; } /* HCPcszip_endaccess() */ /*-------------------------------------------------------------------------- NAME HCPsetup_szip_parms -- Initialize SZIP parameters USAGE int HCPsetup_szip_parms( comp_info *c_info, int32 nt, int32 ndims, int32 *dims, int32 *cdims) comp_info *c_info; IN/OUT: the szip compression params int32 nt; IN: the number type of the data int32 ncomp; IN: components in GR, 1 for SD int32 ndims; IN: The rank of the data int32 *dims; IN: the dimensions int32 *cdims; IN: the dimensions of a chunk, if chunked, or NULL; RETURNS Returns SUCCEED or FAIL DESCRIPTION Computes the SZIP parameters for dataset or chunk: pixels -- total elements per compression pixels_per_scanline bits_per_pixel This is called from GRsetup_szip_parms and SDsetup_szip_parms --------------------------------------------------------------------------*/ int HCPsetup_szip_parms(comp_info *c_info, int32 nt, int32 ncomp, int32 ndims, int32 *dims, int32 *cdims) { #ifdef H4_HAVE_SZIP_ENCODER int32 scanline; int32 npoints; int32 sz; int i; int ret_value = SUCCEED; if (ndims <= 0) { ret_value = FAIL; goto done; } /* compute the number of elements in the compressed unit: if chunked, compress each chunk. If not, compress whole object */ npoints = ncomp; /* for GR24, treat as 3 D data for szip */ /* get npoints */ if (cdims == NULL) { /* the whole array */ for (i = 0; i < ndims; i++) { npoints *= dims[i]; } } else { /* elements in a single chunk */ for (i = 0; i < ndims; i++) { npoints *= cdims[i]; } } c_info->szip.pixels = npoints; /* compute the pixels per scanline */ /* start with the n-1th dimension, allow for components of GR */ if (cdims == NULL) { scanline = dims[ndims - 1] * ncomp; } else { scanline = cdims[ndims - 1] * ncomp; } /* apply restrictions to find the correct value */ if (scanline < c_info->szip.pixels_per_block) { if (c_info->szip.pixels < c_info->szip.pixels_per_block) { ret_value = FAIL; goto done; } scanline = MIN((c_info->szip.pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE), npoints); } else { if (scanline <= SZ_MAX_PIXELS_PER_SCANLINE) { scanline = MIN((c_info->szip.pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE), scanline); } else { scanline = c_info->szip.pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE; } } c_info->szip.pixels_per_scanline = scanline; /* compute the bits per pixel from the HDF NDT */ if (FAIL == (sz = DFKNTsize(nt | DFNT_NATIVE))) { ret_value = FAIL; goto done; } c_info->szip.bits_per_pixel = sz * 8; done: return ret_value; #else /* szip not enabled */ (void)c_info; (void)nt; (void)ncomp; (void)ndims; (void)dims; (void)cdims; return FAIL; #endif } /*-------------------------------------------------------------------------- NAME HCPrm_szip_special_bit -- Removes the special bit that signals szip revised format USAGE int HCPrm_szip_special_bit(comp_info *c_info) comp_info *c_info; IN/OUT: the szip compression params RETURNS Returns SUCCEED DESCRIPTION A special bit, SZ_H4_REV_2, was introduced to indicate that the szip info was stored in a new way. This bit was set in the options_mask field of the szip info struct. As a result, the value of options_mask became incorrect when the special bit was not removed from the options_mask before returning to the application. This is used in SDgetcompinfo and GRgetcompinfo. --------------------------------------------------------------------------*/ int HCPrm_szip_special_bit(comp_info *c_info) { int sz_newway = 0; /* indicates the special bit presents in the options_mask */ if (c_info == NULL) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* if the special bit presents for SZIP compression, remove it to return the correct options_mask */ sz_newway = (int)c_info->szip.options_mask & SZ_H4_REV_2; if (sz_newway) c_info->szip.options_mask = c_info->szip.options_mask & ~SZ_H4_REV_2; return SUCCEED; } hdf4-hdf4.3.1/hdf/src/cszip_priv.h000066400000000000000000000063271503061704500167300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: cszip_priv.h * Purpose: Header file for szip encoding information. * Dependencies: should only be included from hcomp_priv.h * Invokes: none * Contents: Structures & definitions for szip encoding. This header * should only be included in hcomp.c and cszip.c. *---------------------------------------------------------------------------*/ #ifndef H4_CSZIP_PRIV_H #define H4_CSZIP_PRIV_H #include "hdf_priv.h" /* Special parameters for szip compression */ /* (These are aliases for the similar definitions in ricehdf.h header file) */ #define H4_SZ_ALLOW_K13_OPTION_MASK 1 #define H4_SZ_CHIP_OPTION_MASK 2 #define H4_SZ_EC_OPTION_MASK 4 #define H4_SZ_LSB_OPTION_MASK 8 #define H4_SZ_MSB_OPTION_MASK 16 #define H4_SZ_NN_OPTION_MASK 32 #define H4_SZ_RAW_OPTION_MASK 128 #define SZ_H4_REV_2 0x10000 /* special bit to signal revised format */ /* SZIP [en|de]coding information */ typedef struct { int32 offset; /* offset in the file */ uint8 *buffer; /* buffer for storing SZIP bytes */ int32 buffer_pos; int32 buffer_size; int32 bits_per_pixel; int32 options_mask; int32 pixels; int32 pixels_per_block; int32 pixels_per_scanline; enum { SZIP_INIT, SZIP_RUN, SZIP_TERM } szip_state; /* state of the buffer storage */ enum { SZIP_CLEAN, SZIP_DIRTY } szip_dirty; } comp_coder_szip_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t cszip_funcs; /* functions to perform szip encoding */ /* ** from cszip.c */ HDFLIBAPI int32 HCPcszip_stread(accrec_t *rec); HDFLIBAPI int32 HCPcszip_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPcszip_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPcszip_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPcszip_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPcszip_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI int HCPcszip_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_CSZIP_PRIV_H */ hdf4-hdf4.3.1/hdf/src/df.h000066400000000000000000000135301503061704500151230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: df.h * Purpose: Header file for single-file HDF routines *---------------------------------------------------------------------------*/ #ifndef H4_DF_H #define H4_DF_H #include "H4api_adpt.h" #include "hdf.h" #define DFSETERR(error) (DFerror = (DFerror ? DFerror : error)) #define DFTOFID(df) (int32)(df->list) /*-------------------------------------------------------------------------*/ /* Type declarations */ typedef struct DFddh { /*format of data descriptor headers in file */ int16 dds; /* number of dds in header block */ int32 next; /* offset of next header block */ } DFddh; typedef struct DFdd { /* format of data descriptors as in file */ uint16 tag; /* data tag */ uint16 ref; /* data reference number */ int32 offset; /* offset of data element in file */ int32 length; /* number of bytes */ } DFdd; /* descriptor structure is same as dd structure. ###Note: may be changed */ typedef DFdd DFdesc; /* DLE is the internal structure which stores data descriptor information */ /* It is a linked list of DDs */ typedef struct DFdle { /* Data List element */ struct DFdle *next; /* link to next dle */ DFddh ddh; /* To store headers */ DFdd dd[1]; /* dummy size */ } DFdle; /* DF is the internal structure associated with each DF file */ /* It holds information associated with the file as a whole */ /* ### Note: there are hooks for having multiple DF files open at a time */ typedef struct DF { DFdle *list; /* Pointer to the DLE list */ DFdle *last_dle; /* last_dle and last_dd are used in searches */ /* to indicate element returned */ /* by previous call to DFfind */ DFdd *up_dd; /* DD of element being read/updated, */ /* used by DFstart */ uint16 last_tag; /* Last tag searched for by DFfind */ uint16 last_ref; /* Last reference number searched for */ intn type; /* 0= not in use, 1= normal, -1 = multiple */ /* this is a hook for when */ /* multiple files are open */ intn access; /* permitted access types: */ /* 0=none, 1=r, 2=w, 3=r/w */ intn changed; /* True if anything in DDs modified */ /* since last write */ intn last_dd; /* see last_dle */ intn defdds; /* default number of DD's in each block */ intn up_access; /* access permissions to element being */ /* read/updated. Used by DFstart */ /* File handle is a file pointer or file descriptor depending on whether */ /* we use buffered or unbuffered I/O. But, since this structure is a */ /* fake, it doesn't matter whether I/O is buffered or not. */ intn file; /* file descriptor */ } DF; typedef struct DFdata { /* structure for returning status information */ int32 version; /* version number of program */ } DFdata; #ifdef __cplusplus extern "C" { #endif /*--------------------------------------------------------------------------*/ /* Global Variables */ HDFLIBAPI int DFerror; /* Error code for DF routines */ /*--------------------------------------------------------------------------*/ /* Procedure types */ /* prototypes for dfstubs.c */ HDFLIBAPI DF *DFopen(char *name, int acc_mode, int ndds); HDFLIBAPI int DFclose(DF *dfile); HDFLIBAPI int DFdescriptors(DF *dfile, DFdesc ptr[], int begin, int num); HDFLIBAPI int DFnumber(DF *dfile, uint16 tag); HDFLIBAPI int DFsetfind(DF *dfile, uint16 tag, uint16 ref); HDFLIBAPI int DFfind(DF *dfile, DFdesc *ptr); HDFLIBAPI int DFaccess(DF *dfile, uint16 tag, uint16 ref, char *acc_mode); HDFLIBAPI int DFstart(DF *dfile, uint16 tag, uint16 ref, char *acc_mode); HDFLIBAPI int32 DFread(DF *dfile, char *ptr, int32 len); HDFLIBAPI int32 DFseek(DF *dfile, int32 offset); HDFLIBAPI int32 DFwrite(DF *dfile, char *ptr, int32 len); HDFLIBAPI int DFupdate(DF *dfile); HDFLIBAPI int DFstat(DF *dfile, DFdata *dfinfo); HDFLIBAPI int32 DFgetelement(DF *dfile, uint16 tag, uint16 ref, char *ptr); HDFLIBAPI int32 DFputelement(DF *dfile, uint16 tag, uint16 ref, char *ptr, int32 len); HDFLIBAPI int DFdup(DF *dfile, uint16 itag, uint16 iref, uint16 otag, uint16 oref); HDFLIBAPI int DFdel(DF *dfile, uint16 tag, uint16 ref); HDFLIBAPI uint16 DFnewref(DF *dfile); HDFLIBAPI int DFishdf(char *filename); HDFLIBAPI int DFerrno(void); HDFLIBAPI int DFIerr(DF *dfile); HDFLIBAPI int DFImemcopy(char *from, char *to, int length); HDFLIBAPI void *DFIgetspace(uint32 qty); HDFLIBAPI void *DFIfreespace(void *ptr); HDFLIBAPI int DFIc2fstr(char *str, int len); HDFLIBAPI char *DFIf2cstring(_fcd fdesc, intn len); /* prototypes for dfconv.c */ HDFLIBAPI int DFconvert(uint8 *source, uint8 *dest, int ntype, int sourcetype, int desttype, int32 size); #ifdef __cplusplus } #endif #endif /* H4_DF_H */ hdf4-hdf4.3.1/hdf/src/df24.c000066400000000000000000000360011503061704500152620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: df24.c * Purpose: read and write 24-bit raster images * Invokes: dfgr.c * Contents: * DF24getdims: - get dimensions of image * DF24reqil: - use this interlace when returning image * DF24getimage: - read in image * DF24setdims: - set dimensions of image * DF24setil: - set interlace of image to write next * DF24setcompress: - set the compression to use when writing out next image * DF24restart: - restart looking for 24-bit images in a file * DF24addimage: - append image to file * DF24putimage: - write image to a file * DF24readref: - set ref of 24-bit RIG to get next * DF24lastref: - return reference number of last RIG read or written * DF24nimages: - get number of images in file * Missing: * DF24writeref: set ref of 24-bit RIG to write next * * Remarks: A RIG specifies attributes associated with an image- lookup table, * dimension, compression, color compensation etc. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfgr_priv.h" static intn Newdata = 0; /* does Readrig contain fresh data? */ static intn dimsset = 0; /* have dimensions been set? */ static int32 last_xdim = 0; static int32 last_ydim = 0; /* .....gheesh......... */ #define LUT 0 #define IMAGE 1 /*-------------------------------------------------------------------------- NAME DF24getdims -- get dimensions of next image RIG USAGE intn DF24getdims(filename,pxdim,pydim,pil) char *filename; IN: the file to get retrieve dims. from int32 *pxdim,*pydim; OUT: ptrs to the X&Y dims retrieved intn *pil; OUT: ptr to the interlace for the image RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Gets the next image's dimensions and interlace from the file specified. GLOBAL VARIABLES last_xdim, last_ydim, Newdata COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24getdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pil) { intn ncomps; intn ret_value = SUCCEED; do { if (DFGRIgetdims(filename, pxdim, pydim, &ncomps, pil, IMAGE) < 0) HGOTO_ERROR(DFE_NODIM, FAIL); } while (ncomps != 3); last_xdim = *pxdim; last_ydim = *pydim; Newdata = 1; done: return ret_value; } /* end DF24getdims() */ /*-------------------------------------------------------------------------- NAME DF24reqil -- get next image with specified interlace USAGE intn DF24reqil(il) intn il; IN: the interlace requested for the next image RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Requests that the next image be returned in a particular interlace scheme. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24reqil(intn il) { intn ret_value; ret_value = (DFGRIreqil(il, IMAGE)); return ret_value; } /* end DF24reqil() */ /*-------------------------------------------------------------------------- NAME DF24getimage -- get image from next RIG USAGE intn DF24getimage(filename,image,xdim,ydim) char *filename; IN: file name to retrieve image from void * image; OUT: buffer to store image in int32 xdim,ydim; IN: dimensions of image buffer RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Retrieves the next 24-bit image from a file. The image is stored according to the current interlace scheme and is wedged into the upper left corner of the buffer. GLOBAL VARIABLES Newdata, last_xdim, last_ydim COMMENTS, BUGS, ASSUMPTIONS image buffer is assumed to be 3*xdim*ydim bytes in size. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24getimage(const char *filename, void *image, int32 xdim, int32 ydim) { intn il; int32 tx, ty; int compressed, has_pal; uint16 compr_type; intn ret_value = SUCCEED; HEclear(); if (!filename || !*filename || !image || (xdim <= 0) || (ydim <= 0)) HGOTO_ERROR(DFE_ARGS, FAIL); if (!Newdata && DF24getdims(filename, &tx, &ty, &il) == FAIL) HGOTO_ERROR(DFE_NODIM, FAIL); if (Newdata) { tx = last_xdim; ty = last_ydim; } /* end if */ if ((tx > xdim) || (ty > ydim)) HGOTO_ERROR(DFE_BADDIM, FAIL); ret_value = DFGRIgetimlut(filename, image, xdim, ydim, IMAGE, 0, &compressed, &compr_type, &has_pal); Newdata = 0; done: return ret_value; } /* end DF24getimage() */ /*-------------------------------------------------------------------------- NAME DF24setdims -- set dimensions of image to write next USAGE intn DF24setdims(xdim,ydim) int32 xdim,ydim; IN: the dimensions of the image to write next RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the dimensions of the next image to write to a file. GLOBAL VARIABLES dimsset COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24setdims(int32 xdim, int32 ydim) { intn ret_value; dimsset = 1; ret_value = (DFGRIsetdims(xdim, ydim, 3, IMAGE)); return ret_value; } /* end DF24setdims() */ /*-------------------------------------------------------------------------- NAME DF24setil -- set interlace of image to write next USAGE intn DF24setil(il) intn il; IN: the interlace of the image to write next RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the interlace of the next image to write to a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24setil(intn il) { intn ret_value; ret_value = (DFGRIsetil(il, IMAGE)); return ret_value; } /* end DF24setil() */ /*-------------------------------------------------------------------------- NAME DF24setcompress -- set compression scheme for next 24-bit image USAGE intn DF24setcompress(type,cinfo) int32 type; IN: compression scheme for next image comp_info *cinfo; IN: additional compression information for certain compression schemes (currently only JPEG) RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the compression scheme of the next image to write to a file. A list of the different schemes may be found in the hcomp.h header file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24setcompress(int32 type, comp_info *cinfo) { intn ret_value; ret_value = (DFGRsetcompress(type, cinfo)); return ret_value; } /* end DF24setcompress() */ /*-------------------------------------------------------------------------- NAME DF24restart -- restart access to a file USAGE intn DF24restart(void) RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Restarts access to a file through the DF24 interface. Next read/write will start with the first 24-bit image in the file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24restart(void) { intn ret_value; ret_value = (DFGRIrestart()); return ret_value; } /* end DF24restart() */ /*-------------------------------------------------------------------------- NAME DF24addimage -- append 24-bit image to file USAGE intn DF24addimage(filename,image,xdim,ydim) char *filename; IN: name of HDF file to write to void * image; IN: Pointer to image data int32 xdim,ydim; IN: Dimensions of image to write RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Appends a 24-bit raster image to an HDF file. Will create the file if it doesn't exist. GLOBAL VARIABLES dimsset COMMENTS, BUGS, ASSUMPTIONS Array image is assumed to be xdim * ydim * 3 bytes EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24addimage(const char *filename, const void *image, int32 xdim, int32 ydim) { intn ret_value = SUCCEED; /* 0 == C */ if (!dimsset && DFGRIsetdims(xdim, ydim, 3, IMAGE) == FAIL) HGOTO_ERROR(DFE_BADDIM, FAIL); dimsset = 0; /* reset to new rig */ ret_value = (DFGRIaddimlut(filename, image, xdim, ydim, IMAGE, 0, 0)); done: return ret_value; } /* end DF24addimage() */ /*-------------------------------------------------------------------------- NAME DF24putimage -- write 24-bit image to file USAGE intn DF24addimage(filename,image,xdim,ydim) char *filename; IN: name of HDF file to write to void * image; IN: Pointer to image data int32 xdim,ydim; IN: Dimensions of image to write RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Writes a 24-bit raster image to a new HDF file. Will overwrite existing files if they exist. GLOBAL VARIABLES dimsset COMMENTS, BUGS, ASSUMPTIONS Array image is assumed to be xdim * ydim * 3 bytes EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24putimage(const char *filename, const void *image, int32 xdim, int32 ydim) { intn ret_value = SUCCEED; /* 0 == C */ if (!dimsset && DFGRIsetdims(xdim, ydim, 3, IMAGE) == FAIL) HGOTO_ERROR(DFE_BADDIM, FAIL); dimsset = 0; /* reset to new rig */ ret_value = (DFGRIaddimlut(filename, image, xdim, ydim, IMAGE, 0, 1)); done: return ret_value; } /* end DF24putimage() */ /*-------------------------------------------------------------------------- NAME DF24nimages -- determines number of 24-bit raster images in a file USAGE intn DF24nimages(filename) char *filename; IN: name of HDF file to check RETURNS Number of images on success, FAIL on failure. DESCRIPTION Determines the number of unique 24-bit raster images in a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24nimages(const char *filename) { int32 file_id; int32 group_id; /* group ID for looking at RIG's */ uint16 elt_tag, elt_ref; /* tag/ref of items in a RIG */ intn nimages; /* total number of potential images */ uint16 find_tag, find_ref; /* storage for tag/ref pairs found */ int32 find_off, find_len; /* storage for offset/lengths of tag/refs found */ uint8 GRtbuf[64]; /* local buffer to read the ID element into */ intn ret_value = SUCCEED; HEclear(); /* should use reopen if same file as last time - more efficient */ if ((file_id = DFGRIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* go through the RIGs looking for 24-bit images */ nimages = 0; find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_RIG, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { /* read RIG into memory */ if ((group_id = DFdiread(file_id, DFTAG_RIG, find_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); while (!DFdiget(group_id, &elt_tag, &elt_ref)) { /* get next tag/ref */ if (elt_tag == DFTAG_ID) { /* just look for ID tags to get the number of components */ if (Hgetelement(file_id, elt_tag, elt_ref, GRtbuf) != FAIL) { uint16 uint16var; int32 temp; /* temporary holding variable */ int16 ncomponents; /* number of image components */ uint8 *p; p = GRtbuf; INT32DECODE(p, temp); INT32DECODE(p, temp); UINT16DECODE(p, uint16var); UINT16DECODE(p, uint16var); INT16DECODE(p, ncomponents); if (ncomponents == 3) /* whew, all that work and we finally found a 24-bit image */ nimages++; } /* end if */ else { DFdifree(group_id); HGOTO_ERROR(DFE_GETELEM, FAIL); } } /* end if */ } /* end while */ } /* end while */ if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); ret_value = nimages; done: return ret_value; } /* end DF24nimages() */ /*-------------------------------------------------------------------------- NAME DF24readref -- set ref # of 24-bit RIG to read next USAGE intn DF24readref(filename,ref) char *filename; IN: name of HDF file uint16 ref; IN: ref # of next 24-bit RIG to read RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the ref # of the next 24-bit RIG to read from a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DF24readref(const char *filename, uint16 ref) { intn ret_value; ret_value = (DFGRreadref(filename, ref)); return ret_value; } /* end DF24readref() */ /*-------------------------------------------------------------------------- NAME DF24lastref -- return ref # of last read/written 24-bit RIG USAGE uint16 DF24lastref(void) RETURNS Last ref # on success, 0 on failure. DESCRIPTION Returns the last ref # of a 24-bit RIG read to or written from a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ uint16 DF24lastref(void) { uint16 ret_value; ret_value = (DFGRIlastref()); return ret_value; } /* end DF24lastref() */ hdf4-hdf4.3.1/hdf/src/df24f.c000066400000000000000000000347701503061704500154430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: df24F.c * Purpose: read and write 24-bit raster images * Invokes: dfgr.c df24.c * Contents: * d2reqil: use this interlace when returning image * df24reqil: use this interlace when returning image * d2sdims: set dimensions of image * df24setdims: set dimensions of image * d2setil: set interlace for image * df24setil: set interlace for image * d2first: restart 24 bit raster * df24restart: restart 24 bit raster * d2igdim: get dimensions of image * d2igimg: read in image * d2iaimg: write out image * d2lref: last ref number * d2scomp: set compression to use (short name) * df24setcompress: set compression to use (long name) * d2sjpeg: set JPEG parameters (short name) * df24setJPEG: set JPEG parameters (long name) * * Remarks:A RIG specifies attributes associated with an image - lookup table, * dimension, compression, color compensation etc. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfgr_priv.h" #include "hproto_fortran.h" #define LUT 0 #define IMAGE 1 static int dimsset = 0; /*----------------------------------------------------------------------------- * Name: d2reqil * Purpose: get next image with specified interlace * Inputs: il: interlace to get next image with * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIreqil * Remarks: none *---------------------------------------------------------------------------*/ intf nd2reqil(intf *il) { return DFGRIreqil((intn)*il, (intn)IMAGE); } /*----------------------------------------------------------------------------- * Name: d2sdims * Purpose: set dimensions of image to write next * Inputs: xdim, ydim: dimensions of image * il: interlace of image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetdims * Remarks: none *---------------------------------------------------------------------------*/ intf nd2sdims(intf *xdim, intf *ydim) { dimsset = 1; return DFGRIsetdims(*xdim, *ydim, 3, IMAGE); } /*----------------------------------------------------------------------------- * Name: d2igdim * Purpose: get dimensions of next image RIG * Inputs: filename: name of HDF file * pxdim, pydim: pointer to locations for returning x,y dimensions * pil: location for returning interlace of image in file * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * *pxdim, *pydim, *pil set on success * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24getdims * Remarks: none *---------------------------------------------------------------------------*/ intf nd2igdim(_fcd filename, intf *pxdim, intf *pydim, intf *pil, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DF24getdims(fn, (int32 *)pxdim, (int32 *)pydim, (intn *)pil); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d2igimg * Purpose: get image from next RIG * Inputs: filename: name of HDF file * image: pointer to space to return image * xdim, ydim: dimensions of space to return image * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIgetimlut * Remarks: space is assumed to be xdim * ydim * 3 bytes *---------------------------------------------------------------------------*/ intf nd2igimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DF24getimage(fn, (void *)_fcdtocp(image), *xdim, *ydim); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d2iaimg * Purpose: Write out image * Inputs: filename: name of HDF file * image: image to write * xdim, ydim: dimensions of array image * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIaddimlut * Remarks: array image is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ intf nd2iaimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *fnlen, intf *newfile) { char *fn; intf ret; if (!dimsset) if (DFGRIsetdims(*xdim, *ydim, 3, IMAGE) < 0) return -1; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFGRIaddimlut(fn, (void *)_fcdtocp(image), *xdim, *ydim, IMAGE, 1, (intn)*newfile); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d2setil * Purpose: set interlace store with following images * Inputs: il: interlace to set * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetil * Remarks: none *---------------------------------------------------------------------------*/ intf nd2setil(intf *il) { return DFGRIsetil((intn)*il, IMAGE); } /*----------------------------------------------------------------------------- * Name: d2first * Purpose: restart 24 bit raster file * Inputs: * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIrestart * Remarks: none *---------------------------------------------------------------------------*/ intf nd2first(void) { return DFGRIrestart(); } /*----------------------------------------------------------------------------- * Name: d2lref * Purpose: return last reference number * Inputs: * Returns: last ref number * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIrestart * Remarks: none *---------------------------------------------------------------------------*/ intf nd2lref(void) { return (intf)DFGRIlastref(); } /*----------------------------------------------------------------------------- * Name: d2scomp * Purpose: set the compression to use when writing the next image * Inputs: * scheme - the type of compression to use * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24setcompress * Remarks: if the compression scheme is JPEG, this routine sets up default * JPEG parameters to use, if a user wants to change them, d2sjpeg * must be called. *---------------------------------------------------------------------------*/ intf nd2scomp(intf *scheme) { comp_info cinfo; /* Structure containing compression parameters */ if (*scheme == COMP_JPEG) { /* check for JPEG compression and set defaults */ cinfo.jpeg.quality = 75; cinfo.jpeg.force_baseline = 1; } /* end if */ return DF24setcompress((int32)*scheme, &cinfo); } /* end d2scomp() */ /*----------------------------------------------------------------------------- * Name: d2sjpeg * Purpose: change the JPEG compression parameters * Inputs: * quality - what the JPEG quality rating should be * force_baseline - whether to force a JPEG baseline file to be written * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24setcompress * Remarks: none *---------------------------------------------------------------------------*/ intf nd2sjpeg(intf *quality, intf *force_baseline) { comp_info cinfo; /* Structure containing compression parameters */ cinfo.jpeg.quality = (intn)*quality; cinfo.jpeg.force_baseline = (intn)*force_baseline; return DF24setcompress((int32)COMP_JPEG, &cinfo); } /* end d2sjpeg() */ /*----------------------------------------------------------------------------- * Name: df24reqil * Purpose: get next image with specified interlace * Inputs: il: interlace to get next image with * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIreqil * Remarks: none *---------------------------------------------------------------------------*/ intf ndf24reqil(intf *il) { return DFGRIreqil((intn)*il, IMAGE); } /*----------------------------------------------------------------------------- * Name: df24setdims * Purpose: set dimensions of image to write next * Inputs: xdim, ydim: dimensions of image * il: interlace of image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetdims * Remarks: none *---------------------------------------------------------------------------*/ intf ndf24setdims(intf *xdim, intf *ydim) { dimsset = 1; return DFGRIsetdims(*xdim, *ydim, 3, IMAGE); } /*----------------------------------------------------------------------------- * Name: df24setil * Purpose: set interlace store with following images * Inputs: il: interlace to set * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetil * Remarks: none *---------------------------------------------------------------------------*/ intf ndf24setil(intf *il) { return DFGRIsetil((intn)*il, IMAGE); } /*----------------------------------------------------------------------------- * Name: df24restart * Purpose: restart 24 bit raster file * Inputs: * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIrestart * Remarks: none *---------------------------------------------------------------------------*/ intf ndf24restart(void) { return DFGRIrestart(); } /*----------------------------------------------------------------------------- * Name: df24scompress * Purpose: set the compression to use when writing the next image * Inputs: * scheme - the type of compression to use * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24setcompress * Remarks: if the compression scheme is JPEG, this routine sets up default * JPEG parameters to use, if a user wants to change them, df24setjpeg * must be called. *---------------------------------------------------------------------------*/ intf ndf24scompress(intf *scheme) { comp_info cinfo; /* Structure containing compression parameters */ if (*scheme == COMP_JPEG) { /* check for JPEG compression and set defaults */ cinfo.jpeg.quality = 75; cinfo.jpeg.force_baseline = 1; } /* end if */ return DF24setcompress((int32)*scheme, &cinfo); } /* end df24setcompress() */ /*----------------------------------------------------------------------------- * Name: df24sjpeg * Purpose: change the JPEG compression parameters * Inputs: * quality - what the JPEG quality rating should be * force_baseline - whether to force a JPEG baseline file to be written * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24setcompress * Remarks: none *---------------------------------------------------------------------------*/ intf ndf24sjpeg(intf *quality, intf *force_baseline) { comp_info cinfo; /* Structure containing compression parameters */ cinfo.jpeg.quality = (intn)*quality; cinfo.jpeg.force_baseline = (intn)*force_baseline; return DF24setcompress((int32)COMP_JPEG, &cinfo); } /* end df24setjpeg() */ /*----------------------------------------------------------------------------- * Name: d2irref * Purpose: Internal stub for setting ref of rig to read next * Inputs: filename: name of HDF file * ref: reference * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRreadref * Remarks: *---------------------------------------------------------------------------*/ intf nd2irref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFGRreadref(fn, (uint16)*ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d2inimg * Purpose: Internal stub for getting the number of 24-bit raster images * Inputs: filename: name of HDF file * fnlen: length of filename * Returns: # of images on success, -1 on failure with error stack set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DF24nimages * Remarks: *---------------------------------------------------------------------------*/ intf nd2inimg(_fcd filename, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DF24nimages(fn); free(fn); return ret; } /* end nd2inimg */ hdf4-hdf4.3.1/hdf/src/df24ff.f000066400000000000000000000210731503061704500156040ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C C------------------------------------------------------------------------------ C File: df24Ff.f C Purpose: read and write 24-bit raster images C Invokes: df24F.c C Contents: C d2gdims: - get dimensions of image C d2gimg: - read in image C d2aimg: - write out image C d2rref: - set reference number to be used for next get C DF24getdims: - get dimensions of image C DF24getimage: - read in image C DF24getimage: - write out image C DF24readref: - set reference number to be used for next get C C Remarks: A RIG specifies attributes associated with an image - lookup table, C dimension, compression, color compensation etc. C----------------------------------------------------------------------------*/ C------------------------------------------------------------------------------ C Name: d2gdims C Purpose: get dimensions of next image RIG C Inputs: name: name of HDF file C xdim, ydim: locations for returning x,y dimensions C il: location for returning interlace of image in file C Returns: 0 on success, -1 on failure with DFerror set C *pxdim, *pydim, *pil set on success C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2igdim C Remarks: none C----------------------------------------------------------------------------*/ integer function d2gdims(name, xdim, ydim, il) character*(*) name integer xdim, ydim, il, d2igdim d2gdims = d2igdim(name, xdim, ydim, il, len(name)) return end C------------------------------------------------------------------------------ C Name: d2gimg C Purpose: get image from next RIG C Inputs: name: name of HDF file C image: pointer to space to return image C xdim, ydim: dimensions of space to return image C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2igimg C Remarks: space is assumed to be xdim * ydim * 3 bytes C----------------------------------------------------------------------------*/ integer function d2gimg(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2igimg d2gimg = d2igimg(name, image, xdim, ydim, len(name)) return end C------------------------------------------------------------------------------ C Name: d2aimg C Purpose: Write out image C Inputs: filename: name of HDF file C image: image to write C xdim, ydim: dimensions of array image C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2iaimg C Remarks: array image is assumed to be xdim * ydim * ncomps bytes C----------------------------------------------------------------------------*/ integer function d2aimg(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2iaimg d2aimg = d2iaimg(name, image, xdim, ydim, len(name), 0) return end integer function d2pimg(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2iaimg d2pimg = d2iaimg(name, image, xdim, ydim, len(name), 1) return end C------------------------------------------------------------------------------ C Name: d2rref C Purpose: C Inputs: filename: name of HDF file C ref: reference number to be used for next get C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2irref C Remarks: C----------------------------------------------------------------------------*/ integer function d2rref(name, ref) character*(*) name integer ref, d2irref d2rref = d2irref(name, ref, len(name)) return end C------------------------------------------------------------------------------ C Name: d2nimg C Purpose: Determine the number of 24-bit raster images in a file. C Inputs: filename: name of HDF file C Returns: # of images on success, -1 on failure with error stack set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2inimg C Remarks: C----------------------------------------------------------------------------*/ integer function d2nimg(name) character*(*) name integer d2inimg d2nimg = d2inimg(name, len(name)) return end CEND7MAX C------------------------------------------------------------------------------ C Name: df24getdims C Purpose: get dimensions of next image RIG C Inputs: name: name of HDF file C xdim, ydim: locations for returning x,y dimensions C il: location for returning interlace of image in file C Returns: 0 on success, -1 on failure with DFerror set C *pxdim, *pydim, *pil set on success C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2igdim C Remarks: none C----------------------------------------------------------------------------*/ integer function df24getdims(name, xdim, ydim, il) character*(*) name integer xdim, ydim, il, d2igdim df24getdims = d2igdim(name, xdim, ydim, il, len(name)) return end C------------------------------------------------------------------------------ C Name: df24getimage C Purpose: get image from next RIG C Inputs: name: name of HDF file C image: pointer to space to return image C xdim, ydim: dimensions of space to return image C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2igimg C Remarks: space is assumed to be xdim * ydim * 3 bytes C----------------------------------------------------------------------------*/ integer function df24getimage(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2igimg df24getimage = d2igimg(name, image, xdim, ydim, len(name)) return end C------------------------------------------------------------------------------ C Name: df24addimage C Purpose: Write out image C Inputs: filename: name of HDF file C image: image to write C xdim, ydim: dimensions of array image C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2iaimg C Remarks: array image is assumed to be xdim * ydim * ncomps bytes C----------------------------------------------------------------------------*/ integer function df24addimage(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2iaimg df24addimage = d2iaimg(name, image, xdim, ydim, len(name), 0) return end integer function df24putimage(name, image, xdim, ydim) character*(*) name, image integer xdim, ydim, d2iaimg df24putimage = d2iaimg(name, image, xdim, ydim, len(name), 1) return end C------------------------------------------------------------------------------ C Name: df24readref C Purpose: Write out image C Inputs: filename: name of HDF file C ref: reference number to be used for next get C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: d2irref C Remarks: array image is assumed to be xdim * ydim * ncomps bytes C----------------------------------------------------------------------------*/ integer function df24readref(name, ref) character*(*) name integer ref, d2irref df24readref = d2irref(name, ref, len(name)) return end hdf4-hdf4.3.1/hdf/src/dfan.c000066400000000000000000001517331503061704500154450ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfan.c * Purpose: read and write annotations: labels and descriptions of data items * Invokes: df.c * Contents: * * DFANclear: - reset DFAN interface * DFANgetlablen: - get length of label of tag/ref * DFANgetlabel: - get label of tag/ref * DFANgetdesclen: - get length of description of tag/ref * DFANgetdesc: - get description of tag/ref * * DFANgetfidlen: - get length of file ID * DFANgetfid: - get file ID * DFANgetfdslen: - get length of file description * DFANgetfds: - get file description * * DFANputlabel: - put label of tag/ref * DFANputdesc: - put description of tag/ref * * DFANaddfid: - add file ID * DFANaddfds: - add file description * * DFANlastref: - return ref of last annotation read or written * DFANlablist: - get list of labels for a particular tag * * DFANIclear: - clear Lastref, label/desc entries and directories * DFANIopen: - open/reopen file * DFANIlocate: - return ref of label/desc of tag/ref * DFANIaddentry: - add entry in annotation directory * DFANIgetannlen: - get length of annotation of tag/ref * DFANIgetann: - get annotation of tag/ref * DFANIputann: - put annotation of tag/ref * DFANIlablist: - get list of labels for a particular tag * * DFANIaddfann: - add file annotation (ID or description) * DFANIgetfannlen: - get length of file annotation * DFANIgetfann: - get file annotation *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfan_priv.h" static uint16 Lastref = 0; /* Last ref read/written */ static uint16 Next_label_ref = 0; /* Next file label ref to read/write */ static uint16 Next_desc_ref = 0; /* Next file desc ref to read/write */ static char *Lastfile = NULL; /* pointers to directories of object annotations */ static DFANdirhead *DFANdir[2] = { NULL, /* object labels */ NULL /* object descriptions */ }; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* ** Prototypes for local functions */ static int32 DFANIopen(const char *filename, intn acc_mode); static intn DFANIstart(void); /*----------------------------------------------------------------------------- * HDF object (i.e. tag/ref) label and description input routines *---------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- NAME DFANgetlablen -- get length of label of tag/ref USAGE int32 DFANgetlablen(filename, tag, ref) char *filename; IN: filename: name of HDF file uint16 tag; IN: tag of data object assigned the label uint16 ref; IN: reference number of the data object assigned the label RETURNS length of label on success, FAIL (-1) otherwise DESCRIPTION Calls DFANIgetannlen to get label length. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This routine should be used to insure that there is enough space allocated for a label before actually reading it. EXAMPLES REVISION LOG *---------------------------------------------------------------------------*/ int32 DFANgetlablen(const char *filename, uint16 tag, uint16 ref) { int32 ret_value; ret_value = (DFANIgetannlen(filename, tag, ref, DFAN_LABEL)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetlabel -- get label of object identified by tag/ref USAGE int DFANgetlabel(filename, tag, ref, label, maxlen) char *filename; IN: name of HDF file uint16 tag; IN: tag of object of assigned the label uint16 ref; IN: ref number of object of assigned the label char *label; OUT: buffer allocated to hold the label int32 maxlen; IN: size of buffer allocated to hold the label RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetann to get label GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS The value of maxlen must be at least one greater than the anticipated length of the label, because a NULL byte is appended to the annotation EXAMPLES REVISION LOG *---------------------------------------------------------------------------*/ intn DFANgetlabel(const char *filename, uint16 tag, uint16 ref, char *label, int32 maxlen) { intn ret_value; ret_value = (DFANIgetann(filename, tag, ref, (uint8 *)label, maxlen, DFAN_LABEL, 0)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetdesclen -- get length of description of tag/ref USAGE int32 DFANgetdesclen(filename, tag, ref) char *filename; IN: name of HDF file uint16 tag; IN: tag of item of which we want description uint16 ref; IN: ref number of item of which we want description RETURNS Length of description if successful, and FAIL (-1) otherwise DESCRIPTION Calls DFANIgetannlen to get description length GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This routine should be used to insure that there is enough space allocated for a description before actually reading it. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int32 DFANgetdesclen(const char *filename, uint16 tag, uint16 ref) { int32 ret_value; ret_value = (DFANIgetannlen(filename, tag, ref, DFAN_DESC)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetdesc -- Reads the description assigned to the data object with the given tag and reference number. USAGE int DFANgetdesc(filename, tag, ref, desc, maxlen) char * filename; IN: name of HDF file uint16 tag; IN: tag of object of assigned the label uint16 ref; IN: ref number of object of assigned the label char *desc; OUT: buffer allocated to hold the description int32 maxlen; IN: size of buffer allocated to hold the description RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetann to get description GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS The value of maxlen must be at least one greater than the anticipated length of the description, because a NULL byte is appended to the annotation EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANgetdesc(const char *filename, uint16 tag, uint16 ref, char *desc, int32 maxlen) { intn ret_value; ret_value = (DFANIgetann(filename, tag, ref, (uint8 *)desc, maxlen, DFAN_DESC, 0)); return ret_value; } /*----------------------------------------------------------------------------- * File ID and description input routines *---------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------- NAME DFANgetfidlen -- get length of file label USAGE int32 DFANgetfidlen(file_id, isfirst) int32 file_id; IN: HDF file label returned by Hopen int isfirst; IN: 1 to read the first label in the file 0 to read the next label in the file RETURNS Length of file label if successful, and FAIL (-1) otherwise DESCRIPTION Calls DFANIgetfannlen to get label length GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS When first called for a given file, DFANgetfidlen returns the length of the first file label. In order to get the lengths of successive labels, you must call DFANgetfid between calls to DFANgetfidlen. Otherwise, successive calls to DFANgetfidlen will return the length of the same file label. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int32 DFANgetfidlen(int32 file_id, int isfirst) { int32 ret_value; ret_value = (DFANIgetfannlen(file_id, DFAN_LABEL, isfirst)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetfid -- get next file label USAGE int32 DFANgetfid(file_id, label, maxlen, isfirst) int32 file_id; IN: HDF file label returned by Hopen char *label; OUT: buffer allocated to hold the label int32 maxlen; IN: size of buffer allocated to hold the label int isfirst; IN: 0 to read the next label in the file; 1 to read the first label in the file RETURNS On success, length of label; FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetfann to get label GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS If maxlen is not great enough, the label is truncated to maxlen-1 characters. EXAMPLES REVISION LOG *---------------------------------------------------------------------------*/ int32 DFANgetfid(int32 file_id, char *label, int32 maxlen, intn isfirst) { int32 ret_value; ret_value = (DFANIgetfann(file_id, label, maxlen, DFAN_LABEL, isfirst)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetfdslen -- get length of file description USAGE int32 DFANgetfdslen(file_id, isfirst) int32 file_id; IN: HDF file description returned by Hopen int isfirst; IN: 1 to read the first description in the file 0 to read the next description in the file RETURNS Length of file description if successful, and FAIL (-1) otherwise DESCRIPTION Calls DFANIgetfannlen to get description length GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS When first called for a given file, DFANgetfdslen returns the length of the first file description. In order to get the lengths of successive descriptions, you must call DFANgetfds between calls to DFANgetfdslen. Otherwise, successive calls to DFANgetfdslen will return the length of the same file description. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int32 DFANgetfdslen(int32 file_id, intn isfirst) { int32 ret_value; ret_value = (DFANIgetfannlen(file_id, DFAN_DESC, isfirst)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANgetfds -- get next file description USAGE int32 DFANgetfds(file_id, desc, maxlen, isfirst) int32 file_id; IN: HDF file description returned by Hopen char *desc; OUT: buffer allocated to hold the description int32 maxlen; IN: size of buffer allocated to hold the description int isfirst; IN: 0 to read the next description in the file; 1 to read the first description in the file RETURNS On success, length of description; FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetfann to get description GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS If maxlen is not great enough, the description is truncated to maxlen-1 characters. EXAMPLES REVISION LOG *---------------------------------------------------------------------------*/ int32 DFANgetfds(int32 file_id, char *desc, int32 maxlen, intn isfirst) { int32 ret_value; ret_value = (DFANIgetfann(file_id, desc, maxlen, DFAN_DESC, isfirst)); return ret_value; } /*----------------------------------------------------------------------------- * HDF object (i.e. tag/ref) label and description output routines *---------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------- NAME DFANputlabel -- Assign a label to the data object with the given tag and reference number USAGE int DFANputlabel(filename, tag, ref, label) char *filename; IN: name of HDF file uint16 tag; IN: tag of item to be assigned the label uint16 ref; IN: reference number of item to be assigned the label char *label; IN: label to write to file; a single string of NULL-terminated text RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetfann to write out label GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANputlabel(const char *filename, uint16 tag, uint16 ref, char *label) { intn ret_value; ret_value = (DFANIputann(filename, tag, ref, (uint8 *)label, (int32)strlen(label), DFAN_LABEL)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANputdesc -- Assign a description to the data object with the given tag and reference number USAGE int DFANputdesc(filename, tag, ref, desc, desclen) char *filename; IN: name of HDF file uint16 tag; IN: tag of item to be assigned the description uint16 ref; IN: ref number of item to be assigned description char *desc; IN: description to write to file; a single string of NULL-terminated text int32 desclen; IN: length of description RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIgetfann to write out description GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS The parameter desc can contain any sequence of ASCII characters. It does not have to be a string. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANputdesc(const char *filename, uint16 tag, uint16 ref, char *desc, int32 desclen) { intn ret_value; ret_value = (DFANIputann(filename, tag, ref, (uint8 *)desc, desclen, DFAN_DESC)); return ret_value; } /*----------------------------------------------------------------------------- * File ID and description output routines *---------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------- NAME DFANaddfid -- Write a file label to a file USAGE int DFANaddfid(file_id, id) int32 file_id; IN: file identifier char *id; IN: label to write to file RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIaddfann to write out label GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANaddfid(int32 file_id, char *id) { intn ret_value; ret_value = (DFANIaddfann(file_id, id, (int32)strlen(id), DFAN_LABEL)); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANaddfds -- Write a file description to a file USAGE int DFANaddfds(file_id, desc, desclen) int32 file_id; IN: file identifier char *desc; IN: description to write to file int32 desclen; IN: length of description RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIaddfann to write out description GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS The parameter desc can contain any sequence of ASCII characters. It does not have to be a string. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANaddfds(int32 file_id, char *desc, int32 desclen) { intn ret_value; ret_value = (DFANIaddfann(file_id, desc, desclen, DFAN_DESC)); return ret_value; } /*----------------------------------------------------------------------------- * Miscellaneous other routines *---------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------- NAME DFANlastref -- Return the reference number of the annotation last written or read USAGE uint16 DFANlastref() RETURNS Reference number if successful and 0 otherwise DESCRIPTION GLOBAL VARIABLES Lastref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ uint16 DFANlastref(void) { uint16 ret_value; ret_value = (Lastref); return ret_value; } /*-------------------------------------------------------------------------- NAME DFANlablist -- Return list of refs and labels for a given tag USAGE int DFANlablist(filename, tag, reflist, labellist, listsize, maxlen, startpos) char *filename; IN: name of HDF file uint16 tag; IN: tag to use when searching for ref numbers and labels uint16 reflist[]; OUT: array allocated to place ref numbers in char *labellist; OUT: array of strings allocated to place labels in int listsize; IN: size of ref number list and label list int maxlen; IN: maximum length allocated for label int startpos; IN: Starting position. Beginning from the startpos'th entry, up to listsize entries will be returned. RETURNS Number of ref numbers found if successful and FAIL (-1) otherwise DESCRIPTION Invokes DFANIlablist to get label list. Where there is no corresponding label, the position in labellist is zero filled (C) or blank filled (Fortran). Revised 04/17/90 so that it returns all ref numbers for the given tag, rather than just those that have labels. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG Revised 04/17/90. (See DESCRIPTION.) *------------------------------------------------------------------------*/ intn DFANlablist(const char *filename, uint16 tag, uint16 reflist[], char *labellist, intn listsize, intn maxlen, intn startpos) { intn ret_value; ret_value = (DFANIlablist(filename, tag, reflist, (uint8 *)labellist, listsize, maxlen, startpos, 0)); return ret_value; } /*------------------------------------------------------------------- Name DFANclear -- Clear DFAN interface Usage intn DFANclear() Returns SUCCEED if ok; FAIL otherwise. DESCRIPTION Invokes DFANIclear. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS When a file is re-created in a single run by other interface, such as DFSDputdata(), user should call DFANclear to reset DFAN interface structures. EXAMPLES REVISION LOG *------------------------------------------------------------------*/ intn DFANclear(void) { intn ret_value; ret_value = DFANIclear(); return ret_value; } /******************************************************************************/ /*----------------------- Internal routines ---------------------------------*/ /******************************************************************************/ /*--------------------------------------------------------------------------- Name DFANIclear -- Clear label/desc entries and directories Reset DFANdir[i] and Lastref USAGE intn DFANIclear() Returns SUCCEED if ok; FAIL otherwise. DESCRIPTION Reset DFANdir[i] and Lastref GLOBAL VARIABLES Lastref, DFANdir COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *-------------------------------------------------------------------------*/ intn DFANIclear(void) { DFANdirhead *p, *q; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); for (p = DFANdir[0]; p != NULL; p = q) { /* free linked list space */ q = p->next; free(p->entries); p->nentries = 0; p->entries = NULL; p->next = NULL; free(p); } for (p = DFANdir[1]; p != NULL; p = q) { q = p->next; free(p->entries); p->nentries = 0; p->entries = NULL; p->next = NULL; free(p); } DFANdir[0] = DFANdir[1] = NULL; Lastref = 0; /* 0 is invalid ref */ done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIopen -- open or reopen a file USAGE static int32 DFANIopen(filename, acc_mode) char *filename; IN: name of file to open intn acc_mode; IN: access mode RETURNS File identifier if successful and NULL on failure. DESCRIPTION GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This is a hook for someday providing more efficient ways to reopen a file, to avoid re-reading all the headers EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ static int32 DFANIopen(const char *filename, intn acc_mode) { int32 file_id; DFANdirhead *p, *q; int32 ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check if filename buffer has been allocated */ if (Lastfile == NULL) { Lastfile = (char *)malloc((DF_MAXFNLEN + 1) * sizeof(char)); if (Lastfile == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); *Lastfile = '\0'; /* initialize with 0-length string */ } /* use reopen if same file as last time - more efficient */ if (strncmp(Lastfile, filename, DF_MAXFNLEN) || (acc_mode == DFACC_CREATE)) { /* treat create as different file */ if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); for (p = DFANdir[0]; p != NULL; p = q) { /* free linked list space */ q = p->next; free(p->entries); p->nentries = 0; p->entries = NULL; p->next = NULL; free(p); } for (p = DFANdir[1]; p != NULL; p = q) { q = p->next; free(p->entries); p->nentries = 0; p->entries = NULL; p->next = NULL; free(p); } DFANdir[0] = DFANdir[1] = NULL; } else { if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); } HIstrncpy(Lastfile, filename, DF_MAXFNLEN); /* remember filename, so reopen may be used next time if same file */ ret_value = file_id; done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIlocate -- get ref of annotation of given data tag/ref USAGE uint16 DFANIlocate(file_id, type, tag, ref) int32 file_id: IN: pointer to HDF file int type: IN: DFAN_LABEL for labels, DFAN_DESC for descriptions uint16 tag, ref: IN: tag/ref of item for which we want ref of annotation RETURNS ref of annotation on if successful; 0 otherwise DESCRIPTION Searches through directory for annotations with given tag/ref. (If there is no directory, it creates one.) GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS BUG: When FORTRAN calls this routine with type "label", the string returned is incorrect in length by one character EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ uint16 DFANIlocate(int32 file_id, int type, uint16 tag, uint16 ref) { uint8 datadi[4]; int32 more_anns; int32 aid; int32 nanns, i; uint16 anntag, annref = 0; DFANdirhead *p; uint8 *ptr; uint16 ret_value = 0; /* FAIL ? */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, (uint16)FAIL); anntag = (uint16)((type == DFAN_LABEL) ? DFTAG_DIL : DFTAG_DIA); /* if no directory for this type of annotation, make one */ if (DFANdir[type] == NULL) { nanns = Hnumber(file_id, anntag); if (nanns == 0) HGOTO_ERROR(DFE_INTERNAL, 0); /* allocate directory space, and space for entries. */ DFANdir[type] = (DFANdirhead *)malloc((uint32)sizeof(DFANdirhead)); if (DFANdir[type] == NULL) HGOTO_ERROR(DFE_NOSPACE, 0); DFANdir[type]->entries = (DFANdirentry *)malloc((size_t)nanns * sizeof(DFANdirentry)); if (DFANdir[type]->entries == NULL) HGOTO_ERROR(DFE_NOSPACE, 0); DFANdir[type]->next = NULL; DFANdir[type]->nentries = nanns; /* fill directory table */ if ((aid = Hstartread(file_id, anntag, DFREF_WILDCARD)) == FAIL) { HGOTO_ERROR(DFE_BADAID, 0); } /* end if */ else more_anns = SUCCEED; for (i = 0; (i < nanns) && (more_anns != FAIL); i++) { if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &annref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) HGOTO_ERROR(DFE_INTERNAL, 0); if ((int32)FAIL == Hread(aid, (int32)4, datadi)) HGOTO_ERROR(DFE_READERROR, 0); /* get data tag/ref */ DFANdir[type]->entries[i].annref = annref; ptr = (uint8 *)&(datadi[0]); UINT16DECODE(ptr, DFANdir[type]->entries[i].datatag); UINT16DECODE(ptr, DFANdir[type]->entries[i].dataref); more_anns = Hnextread(aid, anntag, DFREF_WILDCARD, DF_CURRENT); } Hendaccess(aid); } if (!tag) HGOTO_DONE(1); /* find annotation that goes with this tag/ref */ for (p = (DFANdirhead *)DFANdir[type]; p != NULL; p = p->next) for (i = 0; i < p->nentries; i++) if (p->entries[i].annref != 0) if ((p->entries[i].dataref == ref) && (p->entries[i].datatag == tag)) HGOTO_DONE(p->entries[i].annref); HERROR(DFE_NOMATCH); done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIaddentry -- add entry to annotation directory USAGE int type: IN: DFAN_LABEL for labels, DFAN_DESC for descriptions uint16 annref: IN: ref of annotation uint16 datatag,: IN: tag of item of which this is annotation uint16 dataref; IN: ref of item of which this is annotation RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Moves to end of directory and appends entry. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int DFANIaddentry(int type, uint16 annref, uint16 datatag, uint16 dataref) { int32 i; DFANdirhead *p, *q; int ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* move to last entry in list */ for (p = DFANdir[type]; (p != NULL) && (p->next != NULL); p = p->next) ; if (p) { /* not new list */ for (i = 0; i < p->nentries; i++) /* check all entries */ if (p->entries[i].annref == 0) { /* empty slot */ p->entries[i].annref = annref; /* store entry */ p->entries[i].datatag = datatag; p->entries[i].dataref = dataref; HGOTO_DONE(SUCCEED); } } /* need new list or new node in list */ /* allocate directory space and space for entries. */ if ((q = (DFANdirhead *)malloc((uint32)sizeof(DFANdirhead))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); q->entries = (DFANdirentry *)malloc(DFAN_DEFENTRIES * sizeof(DFANdirentry)); if (q->entries == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); q->next = NULL; q->nentries = DFAN_DEFENTRIES; if (!p) DFANdir[type] = q; /* set pointer to this new node */ else p->next = q; /* store entry */ q->entries[0].annref = annref; q->entries[0].datatag = datatag; q->entries[0].dataref = dataref; for (i = 1; i < DFAN_DEFENTRIES; i++) /* mark rest unused */ q->entries[i].annref = 0; done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIgetannlen -- get length of annotation of tag/ref USAGE int32 DFANIgetannlen(filename, tag, ref, type) char *filename; IN: name of HDF file int32 tag, ref; IN: tag/ref of item of which we want annotation int type; IN: DFAN_LABEL for labels, DFAN_DESC for descriptions RETURNS length of annotation if successful and FAIL (-1) otherwise DESCRIPTION Calls DFANIlocate to get ref of annotation. Calls Hlength to get its length. GLOBAL VARIABLES Lastref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int32 DFANIgetannlen(const char *filename, uint16 tag, uint16 ref, int type) { int32 file_id, annlength; uint16 anntag, annref; int32 ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!tag) HGOTO_ERROR(DFE_BADTAG, FAIL); if (!ref) HGOTO_ERROR(DFE_BADREF, FAIL); if ((file_id = DFANIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* get ref of annotation of tag/ref */ annref = DFANIlocate(file_id, type, tag, ref); if (annref == 0) HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); anntag = (uint16)((type == DFAN_LABEL) ? DFTAG_DIL : DFTAG_DIA); /* set type tag */ annlength = Hlength(file_id, anntag, annref) - 4; /* 4=len of data tag/ref */ if (annlength == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_BADLEN, FAIL); Lastref = annref; /* remember ref last accessed */ if (Hclose(file_id) == FAIL) /* close file */ ret_value = FAIL; ret_value = annlength; done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIgetann -- get annotation of tag/ref USAGE intn DFANIgetann(filename, tag, ref, ann, maxlen, type) char *filename; IN: name of HDF file uint16 tag, ref; IN: tag/ref of item of which we want annotation uint8 *ann; OUT: space to return annotation in int32 maxlen; IN: size of space to return annotation in int type; IN: DFAN_LABEL for labels, DFAN_DESC for descriptions int isfortran; IN: 0 if C, 1 if Fortran RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. GLOBAL VARIABLES Lastref. COMMENTS, BUGS, ASSUMPTIONS BUG 1640: Added isfortran flag to avoid termination of the string with the null character when the routine is call from FORTRAN. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANIgetann(const char *filename, uint16 tag, uint16 ref, uint8 *ann, int32 maxlen, int type, int isfortran) { int32 file_id, aid; int32 annlen; uint16 anntag, annref; uint8 datadi[4]; /* to read in and discard data/ref! */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!ann) HGOTO_ERROR(DFE_BADPTR, FAIL); if (!tag) HGOTO_ERROR(DFE_BADTAG, FAIL); if (!ref) HGOTO_ERROR(DFE_BADREF, FAIL); if ((file_id = DFANIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* get annref and anntag of annotation of tag/ref */ annref = DFANIlocate(file_id, type, tag, ref); if (annref == 0) HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); anntag = (uint16)((type == DFAN_LABEL) ? DFTAG_DIL : DFTAG_DIA); /* find DD for that annotation */ aid = Hstartread(file_id, anntag, annref); if (aid == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_BADAID, FAIL); if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, &annlen, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); } annlen -= 4; /* first four bytes were tag/ref, so they don't count */ /* check length, if not enough space, truncate annotation */ /* In C labels need space for null terminator, descriptions don't */ if (isfortran) { if (annlen > maxlen) annlen = maxlen; } else if (type == DFAN_LABEL) { if (annlen > maxlen - 1) annlen = maxlen - 1; } else { if (annlen > maxlen) annlen = maxlen; } /* read annotation */ if ((int32)FAIL == Hread(aid, (int32)4, datadi)) { /* go past tag/ref */ Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_READERROR, FAIL); } if ((int32)FAIL == Hread(aid, annlen, ann)) { /* read the annotation */ Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_READERROR, FAIL); } /* add null for C */ if (type == DFAN_LABEL) if (!isfortran) ann[annlen] = '\0'; /* terminate string properly for C */ Lastref = annref; /* remember ref last accessed */ Hendaccess(aid); ret_value = (Hclose(file_id)); done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIputann -- put annotation of tag/ref into file USAGE intn DFANIputann(filename, tag, ref, ann, annlen, type) char *filename; IN: name of HDF file uint16 tag, ref; IN: tag/ref of item of which this is the annotation uint8 *ann; IN: space to return annotation in int32 annlen; IN: length of annotation int type; IN: DFAN_LABEL for labels, DFAN_DESC for descriptions RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Checks for pre-existence of annotation, replacing old one if it exists. Writes out annotation, and updates directory.. GLOBAL VARIABLES Lastref. COMMENTS, BUGS, ASSUMPTIONS If the given object already has this type of annotation, it replaces the old annotation with this one. EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ intn DFANIputann(const char *filename, uint16 tag, uint16 ref, uint8 *ann, int32 annlen, int type) { int32 file_id, aid; int newflag = 0; uint16 anntag, annref; uint8 datadi[4]; /* to hold data tag/ref for writing */ uint8 *ptr; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!ann) HGOTO_ERROR(DFE_BADPTR, FAIL); if (!tag) HGOTO_ERROR(DFE_BADTAG, FAIL); if (!ref) HGOTO_ERROR(DFE_BADREF, FAIL); if ((file_id = DFANIopen(filename, DFACC_RDWR)) == 0) HGOTO_ERROR(DFE_BADOPEN, FAIL); anntag = (uint16)((type == DFAN_LABEL) ? DFTAG_DIL : DFTAG_DIA); /* check if this tag/ref already has this type of annotation */ annref = DFANIlocate(file_id, type, tag, ref); if (annref == 0) { annref = Htagnewref(file_id, anntag); if (annref == 0) HCLOSE_GOTO_ERROR(file_id, DFE_NOREF, FAIL); newflag = 1; /* remember to add ann tag/ref to directory */ } /* * if annotation exists, reuse tag/ref and rewrite new annotation */ if (newflag == 0) { /* does prev annotation exist? */ if (HDreuse_tagref(file_id, anntag, annref) == FAIL) { Hclose(file_id); HEreport("Unable to replace old annotation"); HGOTO_DONE(FAIL); } } /* put annotation */ /* Note: cannot use DFputelement because need to write data tag/ref */ aid = Hstartwrite(file_id, anntag, annref, annlen + 4); if (aid == FAIL) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_BADAID, FAIL); } /* write annotation */ ptr = (uint8 *)&(datadi[0]); /* first, write the object's tag/ref */ UINT16ENCODE(ptr, tag); UINT16ENCODE(ptr, ref); if ((int32)FAIL == Hwrite(aid, (int32)4, datadi)) HCLOSE_GOTO_ERROR(file_id, DFE_WRITEERROR, FAIL); if ((int32)FAIL == Hwrite(aid, annlen, ann)) { /* then write the annotation */ Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_WRITEERROR, FAIL); } /* put annotation tag/ref into directory if new */ if (newflag) { if (FAIL == DFANIaddentry(type, annref, tag, ref)) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); } } Lastref = annref; /* remember ref last accessed */ Hendaccess(aid); ret_value = (Hclose(file_id)); done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIlablist -- Return list of refs and labels for a given tag USAGE int DFANlablist(filename, tag, reflist, labellist, listsize, maxlen, startpos) char *filename; IN: name of HDF file uint16 tag; IN: tag to use when searching for ref numbers and labels uint16 reflist[]; OUT: array allocated to place ref numbers in char *labellist; OUT: array of strings allocated to place labels in int listsize; IN: size of ref number list and label list int maxlen; IN: maximum length allocated for label int startpos; IN: Starting position. Beginning from the startpos'th entry, up to listsize entries will be returned. int isfortran: 0 if C, 1 if Fortran RETURNS Number of ref numbers found if successful and FAIL (-1) otherwise DESCRIPTION Where there is no corresponding label, the position in labellist is zero filled (C) or blank filled (Fortran). Revised 04/17/90 so that it returns all ref numbers for the given tag, rather than just those that have labels. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG Revised 04/17/90. (See DESCRIPTION.) *------------------------------------------------------------------------*/ intn DFANIlablist(const char *filename, uint16 tag, uint16 reflist[], uint8 *labellist, int listsize, int maxlen, int startpos, int isfortran) { int32 i; int j, k; int32 file_id, aid, len; uint16 ref = 0; DFANdirhead *p; uint8 *lp; /* pointer to label */ intn nrefs, nlabs; uint8 labeldi[4]; /* to read in and discard data/ref */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!reflist || !labellist) HGOTO_ERROR(DFE_BADPTR, FAIL); if (!tag) HGOTO_ERROR(DFE_BADTAG, FAIL); if ((file_id = DFANIopen(filename, DFACC_READ)) == 0) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* clear labellist. pad with blanks for Fortran; add null for C */ if (isfortran) memset(labellist, ' ', (uint32)maxlen * (uint32)listsize); else memset(labellist, '\0', (uint32)maxlen * (uint32)listsize); /* find all refs for this tag; store them in reflist */ nrefs = (intn)Hnumber(file_id, tag); /* how many times is tag in file? */ if (nrefs == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_NOMATCH, FAIL); aid = Hstartread(file_id, tag, DFREF_WILDCARD); /* set search for refs */ if (aid == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_BADAID, FAIL); for (i = 0, j = 0; i < nrefs && j < listsize; i++) { if (HQuerytagref(aid, (uint16 *)NULL, &ref) == FAIL) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_NOMATCH, FAIL); } if (i >= startpos - 1) reflist[j++] = ref; /* store next ref in reflist */ Hnextread(aid, tag, DFREF_WILDCARD, DF_CURRENT); } nrefs = j; Hendaccess(aid); /* get directory of all labels */ nlabs = (intn)Hnumber(file_id, DFTAG_DIL); if (nlabs != 0) { if (DFANdir[DFAN_LABEL] == NULL) { /* if no dir info create dir */ if (0 == DFANIlocate(file_id, DFAN_LABEL, 0, 0)) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); } } lp = labellist; /* Look through all labels. Get those that correspond to the tag, and match them with corresponding tag/refs in the reflist. */ for (p = DFANdir[DFAN_LABEL]; p != NULL; p = p->next) { /* for each ann dir */ for (i = 0; i < p->nentries; i++) { /* for each tag in dir */ if (p->entries[i].datatag == tag) { /* if this tag==our tag */ aid = Hstartread(file_id, DFTAG_DIL, p->entries[i].annref); if (aid == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_BADAID, FAIL); if ((int32)FAIL == Hread(aid, (int32)4, labeldi)) { /* data tag/ref */ Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_READERROR, FAIL); } /* look for corresponding ref in reflist */ for (k = 0; k < nrefs && p->entries[i].dataref != reflist[k]; k++) ; if (k < nrefs) { /* if ref found */ lp = labellist + k * maxlen; /* get pos to copy to */ /* note len on read may be too big, but OK for DFread */ len = Hread(aid, (int32)(maxlen - 1), lp); if (len == FAIL) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_READERROR, FAIL); } /* ret now contains actual length read */ /* pad with blanks for Fortran; add null for C */ if (isfortran) while (len++ < maxlen) lp[len] = ' '; else lp[len] = '\0'; } Hendaccess(aid); } /* tag == our tag */ } /* for each tag in dir */ } /* for each ann dir */ } /* nlabs != 0 */ if (FAIL == Hclose(file_id)) /* close file */ ret_value = FAIL; else ret_value = nrefs; done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANaddfann -- Write a file label or description to a file USAGE int DFANaddfid(file_id, id) int32 file_id; IN: pointer to HDF file char *ann; IN: annotation to write to file int32 annlen: IN: length of annotation int type: IN: DFAN_LABEL for labels, DFAN_DESC for descriptions RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Calls Hputelement to putput the annotation. GLOBAL VARIABLES Lastref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int DFANIaddfann(int32 file_id, char *ann, int32 annlen, int type) { uint16 anntag, annref; int ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!ann) HGOTO_ERROR(DFE_BADPTR, FAIL); anntag = (uint16)((type == DFAN_LABEL) ? DFTAG_FID : DFTAG_FD); annref = Htagnewref(file_id, anntag); if (annref == 0) HGOTO_ERROR(DFE_NOREF, FAIL); /* write out annotation */ if (FAIL == Hputelement(file_id, anntag, annref, (uint8 *)ann, annlen)) HGOTO_ERROR(DFE_PUTELEM, FAIL); Lastref = annref; /* remember ref last accessed */ done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIgetfannlen -- get length of next file annotation USAGE int32 DFANIgetannlen(filename, tag, ref, type) int32 file_id; IN: id of HDF file int type; IN: DFAN_LABEL for labels, DFAN_DESC for descriptions int isfirst; IN: 1: start with first one; 0: get next one RETURNS length of annotation if successful and FAIL (-1) otherwise DESCRIPTION Uses isfirst and Next_label_ref (or Next_desc_ref) to determine which annotation to pick up next. GLOBAL VARIABLES Lastref Next_label_ref Next_desc_ref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG *------------------------------------------------------------------------*/ int32 DFANIgetfannlen(int32 file_id, int type, int isfirst) { uint16 anntag, annref; int32 aid; int32 length; int32 ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Identify tag for this "type" of access; determine which ref to key on. */ if (type == DFAN_LABEL) { anntag = DFTAG_FID; annref = (uint16)((isfirst == 1) ? DFREF_WILDCARD : Next_label_ref); } else { anntag = DFTAG_FD; annref = (uint16)((isfirst == 1) ? DFREF_WILDCARD : Next_desc_ref); } aid = Hstartread(file_id, anntag, annref); if (aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &annref, &length, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { Hendaccess(aid); HGOTO_ERROR(DFE_NOMATCH, FAIL); } if (type == DFAN_LABEL) /* prepare for next call */ Next_label_ref = annref; else Next_desc_ref = annref; Hendaccess(aid); Lastref = annref; /* remember ref last accessed */ if (length >= 0) /* (length == 0) => no length found */ ret_value = length; else HGOTO_ERROR(DFE_NOMATCH, FAIL); done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIgetfann -- get next file annotation (file ID or file description) USAGE intn DFANIgetfann(filename, tag, ref, ann, maxlen, type) int32 file_id; IN: id of HDF file uint8 *ann; OUT: space to return annotation in int32 annlen; IN: size of space to return annotation in int type; IN: DFAN_LABEL for labels, DFAN_DESC for descriptions int isfirst; IN: 1: start with first one; 0: get next one RETURNS Length of annotation if successful and FAIL (-1) otherwise DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. GLOBAL VARIABLES Lastref, Next_desc_ref, Next_label_ref COMMENTS, BUGS, ASSUMPTIONS If maxlen not great enough, ann is truncated to maxlen-1 chars BUG: If ref is high possible ref value, setting of Next_label_ref or Next_desc_ref behave unpredictably. EXAMPLES REVISION LOG *---------------------------------------------------------------------------*/ int32 DFANIgetfann(int32 file_id, char *ann, int32 maxlen, int type, int isfirst) { uint16 anntag, annref; int32 length, aid; int32 ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!ann) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Identify tag for this "type" of access; determine which ref to key on. */ if (type == DFAN_LABEL) { anntag = DFTAG_FID; annref = (uint16)((isfirst == 1) ? DFREF_WILDCARD : Next_label_ref); } else { anntag = DFTAG_FD; annref = (uint16)((isfirst == 1) ? DFREF_WILDCARD : Next_desc_ref); } if ((aid = Hstartread(file_id, anntag, annref)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &annref, &length, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { Hendaccess(aid); HGOTO_ERROR(DFE_NOMATCH, FAIL); } length = (length > maxlen) ? maxlen : length; /* truncate if too long */ if ((int32)FAIL == Hread(aid, length, (uint8 *)ann)) /* get the annotation */ { Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } if (length > maxlen - 1) length = maxlen - 1; ann[length] = '\0'; Lastref = annref; /* remember ref last accessed */ /* prepare for next call */ if (FAIL == Hnextread(aid, anntag, DFREF_WILDCARD, DF_CURRENT)) { /* If no more of them, set Next_ ???_ref */ if (type == DFAN_LABEL) /* to one higher than current value */ Next_label_ref++; /* so that next call will fail. */ else Next_desc_ref++; } else { /* Otherwise save the next ref */ if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &annref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { Hendaccess(aid); HGOTO_ERROR(DFE_NOMATCH, FAIL); } if (type == DFAN_LABEL) Next_label_ref = annref; else Next_desc_ref = annref; } Hendaccess(aid); ret_value = length; done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFANIstart PURPOSE DFAN-level initialization routine USAGE intn DFANIstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the shut-down routine (DFANPshutdown) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFANIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&DFANPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end DFANIstart() */ /*-------------------------------------------------------------------------- NAME DFANPshutdown PURPOSE Terminate various static buffers. USAGE intn DFANPshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the DFAN routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFANPshutdown(void) { DFANIclear(); /* frees the directory lists */ free(Lastfile); Lastfile = NULL; return SUCCEED; } /* end DFANPshutdown() */ hdf4-hdf4.3.1/hdf/src/dfan_priv.h000066400000000000000000000046501503061704500165050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------------------ * File: dfan_priv.h * Purpose: header file for the Annotations set * Invokes: df_priv.h * Contents: * Structure definitions: DFANdirentry, DFANdirhead * Constant definitions: DFAN_LABEL, DFAN_DESC *----------------------------------------------------------------------------*/ #ifndef H4_DFAN_PRIV_H #define H4_DFAN_PRIV_H #include "hdf_priv.h" #define DFAN_LABEL 0 #define DFAN_DESC 1 #define DFAN_LAB_BLKSIZE 64 /* default blksize to use for labels */ #define DFAN_DESC_BLKSIZE 512 /* default blksize to use for descriptions */ #define DFAN_DEFENTRIES 16 /* no of dir entries to add at a time */ /* * This structure stores an entry in the label/desc directory * for a label/desc in the file, it gives the ref of the label/desc, * and the tag/ref of the data item to which the label/desc relates */ typedef struct { uint16 annref; /* ref of annotation */ uint16 datatag; /* tag of data */ uint16 dataref; /* ref of data */ } DFANdirentry; /* * This structure is a head node for the directory, which is organized as * as a linked list of arrays. DFANdirentry is the structure of an * array element, while DFANdirhead is the list element */ typedef struct DFANdirhead { struct DFANdirhead *next; /* list element */ int32 nentries; /* Number of entries */ DFANdirentry *entries; /* actually an arbitrary size array */ } DFANdirhead; #endif /* H4_DFAN_PRIV_H */ hdf4-hdf4.3.1/hdf/src/dfanf.c000066400000000000000000000410721503061704500156050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfanF.c * Purpose: Fortran stubs for annotation routines * Invokes: dfan.c dfkit.c * Contents: * * daiganl_ : get length of annotation of tag/ref * daigann_ : get annotation of tag/ref * daipann_ : put annotation of tag/ref * dailist_ : get list of refs and labels for a given tag * dalref_ : return last ref written or read * daclear_ : reset annotation internal structures * dfanlastref_ : return last ref written or read * * dfanaddfds_ : add file description * dfangetfidlen_ : get length of file id * dfangetfdslen_ : get length of file description * dfangetfid_ : get file id * dfangetfds_ : get file description * daafds_ : get file description * dagfidl_ : get file id length * dagfdsl_ : get file description length * dagfid_ : get file id * dagfds_ : get file description * * daiafid_ : add file id (intermediate routine) *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfan_priv.h" #include "df.h" #include "hproto_fortran.h" /* conventions used in forming names of routines: ** ** dfan: hdf annotation routine (addfds) ** add: add item to file dfanfds ** get: get item from file dfanfds ** f: file dfanaddds ** id: id dfanaddf ** ds: description dfanaddf ** len: length dfanaddfid ** l: length (short forms) dagfid ** da: dfan (short forms) gfid ** a: add (short forms) dafds ** g: get (short forms) dafds ** i: intermediate routine (not in user interface) daafid * */ /*--------------------------------------------------------------------------- ** Routines for handling tag/ref (not file) annotations *-------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- * Name: daclear * Purpose: Call DFANIclear to clear Lastref and DFANdir[i] * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIclear *-------------------------------------------------------------------------*/ intf ndaclear(void) { return DFANIclear(); } /*----------------------------------------------------------------------------- * Name: daiganl * Purpose: get length of annotation of tag/ref * Inputs: filename: name of HDF file * tag, ref: tag/ref of item of which we want label * type: DFAN_LABEL if label, DFAN_DESC if description * fnlen: length of filename * Returns: length of annotation on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetannlen, HDf2cstring, DFIfreespace *---------------------------------------------------------------------------*/ intf ndaiganl(_fcd filename, intf *tag, intf *ref, intf *type, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFANIgetannlen(fn, (uint16)*tag, (uint16)*ref, (intn)*type); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: daigann * Purpose: get annotation of tag/ref * Inputs: filename: name of HDF file * tag, ref: tag/ref of item of which we want label * annotation: space to return label in * maxlen: size of space to return label in * type: DFAN_LABEL if label, DFAN_DESC if description * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetann *---------------------------------------------------------------------------*/ intf ndaigann(_fcd filename, intf *tag, intf *ref, _fcd annotation, intf *maxlen, intf *type, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFANIgetann(fn, (uint16)*tag, (uint16)*ref, (uint8 *)_fcdtocp(annotation), (int32)*maxlen, (intn)*type, 1); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: daipann * Purpose: put annotation of tag/ref * Inputs: filename: name of HDF file * tag, ref: tag/ref of item of which we want label * annotation: space to return label in * annlen: length of annotation * type: DFAN_LABEL if label, DFAN_DESC if description * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetann *---------------------------------------------------------------------------*/ intf ndaipann(_fcd filename, intf *tag, intf *ref, _fcd annotation, intf *annlen, intf *type, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFANIputann(fn, (uint16)*tag, (uint16)*ref, (uint8 *)_fcdtocp(annotation), (int32)*annlen, (intn)*type); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dailist * Purpose: Return list of refs and labels for a given tag * Inputs: filename: name of HDF file * tag: tag to get list of refs and labels for * reflist: array to place refs in * labellist: array of strings to place labels in * listsize: size of ref and label lists * maxlen: maximum length allowed for label * startpos: beginning from the startpos'th entry, up to listsize * entries will be returned. * fnlen: length of filename * Returns: number of entries on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFANIlablist * Method: call DFANIlablist * Remarks: none *---------------------------------------------------------------------------*/ intf ndailist(_fcd filename, intf *tag, intf reflist[], _fcd labellist, intf *listsize, intf *maxlen, intf *startpos, intf *fnlen) { char *fn; int i; intf nrefs; uint16 *tempreflist; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; /* create reflist with true uint16s to maintain compatibility ** with machines that allocate more than 16 bits per uint16. */ tempreflist = (uint16 *)malloc((size_t)(*listsize) * sizeof(uint16)); /* 1 for isfortran */ nrefs = DFANIlablist(fn, (uint16)*tag, tempreflist, (uint8 *)_fcdtocp(labellist), (int)*listsize, (int)*maxlen, (int)*startpos, 1); if (nrefs < 0) return FAIL; /* move ref numbers into caller's reflist */ for (i = 0; i < *listsize; i++) reflist[i] = (intf)tempreflist[i]; free(fn); free(tempreflist); return nrefs; } /*----------------------------------------------------------------------------- * Name: dalref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFANlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndalref(void) { return (intf)DFANlastref(); } /*----------------------------------------------------------------------------- * Name: dfanlastref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFANlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndfanlastref(void) { return (intf)DFANlastref(); } /*--------------------------------------------------------------------------- ** Routines for handling file annotations *-------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- * Name: dfanaddfds * Purpose: add file description (Fortran callable C version) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANaddfileann *---------------------------------------------------------------------------*/ intf ndfanaddfds(intf *dfile, _fcd desc, intf *desclen) { return DFANIaddfann(*dfile, _fcdtocp(desc), *desclen, DFAN_DESC); } /*----------------------------------------------------------------------------- * Name: dfangetfidlen * Purpose: get length of next file ID (Fortran callable C version) * Inputs: dfile: pointer to HDF file * isfirst: 1: start with first one; 0: get length of next one * Returns: On success: length of next file ID; On failure: -1, with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetfannlen *---------------------------------------------------------------------------*/ intf ndfangetfidlen(intf *dfile, intf *isfirst) { return DFANIgetfannlen(*dfile, DFAN_LABEL, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dfangetfdslen * Purpose: get length of next file description (Fortran callable C version) * Inputs: dfile: pointer to HDF file * isfirst: 1: start with first one; 0: get length of next one * Returns: On success: length of next file ID; On failure: -1, with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetfannlen *---------------------------------------------------------------------------*/ intf ndfangetfdslen(intf *dfile, intf *isfirst) { return DFANIgetfannlen(*dfile, DFAN_DESC, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dfangetfid * Purpose: get file ID (Fortran callable C version) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANgetfann *---------------------------------------------------------------------------*/ intf ndfangetfid(intf *dfile, _fcd id, intf *maxlen, intf *isfirst) { return DFANIgetfann(*dfile, _fcdtocp(id), *maxlen, DFAN_LABEL, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dfangetfds * Purpose: get file description (Fortran callable C version) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANgetfann *---------------------------------------------------------------------------*/ intf ndfangetfds(intf *dfile, _fcd id, intf *maxlen, intf *isfirst) { return DFANIgetfann(*dfile, _fcdtocp(id), *maxlen, DFAN_DESC, (intn)*isfirst); } /*----------------------------------------------------------------------------- ** Versions with short names **---------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- * Name: daafds * Purpose: add file description (short form of DFANaddfds; Fortran callable) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANaddfileann *---------------------------------------------------------------------------*/ intf ndaafds(intf *dfile, _fcd desc, intf *desclen) { return DFANIaddfann(*dfile, _fcdtocp(desc), *desclen, DFAN_DESC); } /*----------------------------------------------------------------------------- * Name: dagfidl * Purpose: get length of next file ID * Inputs: dfile: pointer to HDF file * isfirst: 1: start with first one; 0: get length of next one * Returns: On success: length of next file ID; On failure: -1, with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetfannlen *---------------------------------------------------------------------------*/ intf ndagfidl(intf *dfile, intf *isfirst) { return DFANIgetfannlen(*dfile, DFAN_LABEL, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dagfdsl * Purpose: get length of next file description (Fortran callable C version) * Inputs: dfile: pointer to HDF file * isfirst: 1: start with first one; 0: get length of next one * Returns: On success: length of next file ID; On failure: -1, with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetfannlen *---------------------------------------------------------------------------*/ intf ndagfdsl(intf *dfile, intf *isfirst) { return DFANIgetfannlen(*dfile, DFAN_DESC, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dagfid * Purpose: get file ID (short form of DFANgetfid; Fortran callable version) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANIgetfann *---------------------------------------------------------------------------*/ intf ndagfid(intf *dfile, _fcd id, intf *maxlen, intf *isfirst) { return DFANIgetfann(*dfile, _fcdtocp(id), *maxlen, DFAN_LABEL, (intn)*isfirst); } /*----------------------------------------------------------------------------- * Name: dagfds * Purpose: get file description * (short form of DFANgetfds; Fortran callable C version) * Inputs: dfile: pointer to HDF file * desc: description to write to file * desclen: length of description * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL users, utilities, other routines * Invokes: DFANgetfann *---------------------------------------------------------------------------*/ intf ndagfds(intf *dfile, _fcd id, intf *maxlen, intf *isfirst) { return DFANIgetfann(*dfile, _fcdtocp(id), *maxlen, DFAN_DESC, (intn)*isfirst); } /*----------------------------------------------------------------------------- ** Intermediate routines called from user's fortran routines **---------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- * Name: daiafid * Purpose: intermediate routine to add file ID (Fortran callable C version) * Inputs: dfile: pointer to HDF file * id: ID to write to file * idlen: length of ID string * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran user routines DFANaddfid and daafid * Invokes: DFANaddfann *---------------------------------------------------------------------------*/ intf ndaiafid(intf *dfile, _fcd id, intf *idlen) { return DFANIaddfann(*dfile, _fcdtocp(id), *idlen, DFAN_LABEL); } hdf4-hdf4.3.1/hdf/src/dfanff.f000066400000000000000000000355471503061704500157700ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C C------------------------------------------------------------------------------ C File: dfanFf.f C Purpose: Fortran stub routines for annotations C Invokes: dfanF.c C Contents: C dagllen : get length of label of tag/ref C daglab : get label of tag/ref C dagdlen : get length of description of tag/ref C dagdesc : get description of tag/ref C daplab : put label of tag/ref C dapdesc : put description of tag/ref C dallist : get list of labels for a particular tag C daafid : add file ID to file C C dfangetlablen: get length of label of tag/ref C dfangetlabel : get label of tag/ref C dfangetdesclen: get length of description of tag/ref C dfangetdesc : get description of tag/ref C dfanputlabel : put label of tag/ref C dfanputdesc : put description of tag/ref C dfanlablist : get list of labels for a particular tag C dfanaddfid : add file ID to file C------------------------------------------------------------------------------ C------------------------------------------------------------------------------ C Name: dagllen C Purpose: get length of label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want label C Returns: length of label on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daiganl C------------------------------------------------------------------------------ integer function dagllen(filename, tag, ref) character *(*) filename integer tag, ref, daiganl C 0 is DFAN_LABEL dagllen = daiganl(filename, tag, ref, 0, len(filename)) return end C------------------------------------------------------------------------------ C Name: daglab C Purpose: get label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want label C label: space to return label in C maxlen: size of space to return label in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daigann C------------------------------------------------------------------------------ integer function daglab(filename, tag, ref, label, maxlen) character *(*) filename, label integer tag, ref, maxlen, daigann C 0 is DFAN_LABEL daglab = daigann(filename, tag, ref, label, maxlen, 0, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dagdlen C Purpose: get length of description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want description C Returns: length of description on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daiganl C------------------------------------------------------------------------------ integer function dagdlen(filename, tag, ref) character *(*) filename integer tag, ref, daiganl C 1 is DFAN_DESC dagdlen = daiganl(filename, tag, ref, 1, len(filename)) return end C------------------------------------------------------------------------------ C Name: dagdesc C Purpose: get description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want description C desc: space to return description in C maxlen: size of space to return description in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daigann C------------------------------------------------------------------------------ integer function dagdesc(filename, tag, ref, desc, maxlen) character *(*) filename, desc integer tag, ref, daigann, maxlen C 1 is DFAN_DESC dagdesc = daigann(filename, tag, ref, desc, maxlen, 1, + len(filename)) return end C------------------------------------------------------------------------------ C Name: daplab C Purpose: put label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which this is the label C label: label to write to file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function daplab(filename, tag, ref, label) character *(*) filename, label integer tag, ref, daipann C 0 is DFAN_LABEL daplab = daipann(filename, tag, ref, label, len(label), 0, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dapdesc C Purpose: put description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which this is the description C desc: description to write to file C desclen: length of description C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function dapdesc(filename, tag, ref, desc, desclen) character *(*) filename, desc integer tag, ref, desclen, daipann C 1 is DFAN_DESC dapdesc = daipann(filename, tag, ref, desc, desclen, 1, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dallist C Purpose: Return list of refs and labels for a given tag C Inputs: filename: name of HDF file C tag: tag to get list of refs and labels for C reflist: array to place refs in C labellist: array of strings to place labels in C listsize: size of ref and label lists C maxlen: maximum length allowed for label C startpos: beginning from the startpos'th entry, up to listsize C entries will be returned. C Returns: number of entries on success, -1 on error with DFerror set C Users: HDF users, utilities, other routines C Invokes: dailist C Method: call dailist C Remarks: none C------------------------------------------------------------------------------ integer function dallist(filename, tag, reflist, labellist, + listsize, maxlen, startpos) character *(*) filename, labellist integer tag, reflist(*), listsize, maxlen, startpos, dailist dallist = dailist(filename, tag, reflist, labellist, + listsize, maxlen, startpos, len(filename)) return end C------------------------------------------------------------------------------ C Name: daafid C Purpose: add file ID to file C Inputs: dfile: pointer to HDF file C id: id to write to file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function daafid(file, id) integer file, daiafid character*(*) id daafid = daiafid(file, id, len(id) ) return end CEND7MAX C------------------------------------------------------------------------------ C Name: dfangetlablen C Purpose: get length of label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want label C Returns: length of label on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daignal C------------------------------------------------------------------------------ integer function dfangetlablen(filename, tag, ref) character *(*) filename integer tag, ref, daiganl C 0 is DFAN_LABEL dfangetlablen = daiganl(filename, tag, ref, 0, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfangetlabel C Purpose: get label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want label C label: space to return label in C maxlen: size of space to return label in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daigann C------------------------------------------------------------------------------ integer function dfangetlabel(filename, tag, ref, label, maxlen) character *(*) filename, label integer tag, ref, maxlen, daigann C 0 is DFAN_LABEL dfangetlabel = daigann(filename, tag, ref, label, maxlen, 0, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfangetdesclen C Purpose: get length of description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want description C Returns: length of description on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daiganl C------------------------------------------------------------------------------ integer function dfangetdesclen(filename, tag, ref) character *(*) filename integer tag, ref, daiganl C 1 is DFAN_DESC dfangetdesclen = daiganl(filename, tag, ref, 1, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfangetdesc C Purpose: get description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which we want description C desc: space to return description in C maxlen: size of space to return description in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daigann C------------------------------------------------------------------------------ integer function dfangetdesc(filename, tag, ref, desc, maxlen) character *(*) filename, desc integer tag, ref, daigann, maxlen C 1 is DFAN_DESC dfangetdesc = daigann(filename, tag, ref, desc, maxlen, 1, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfanputlabel C Purpose: put label of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which this is the label C label: label to write to file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function dfanputlabel(filename, tag, ref, label) character *(*) filename, label integer tag, ref, daipann C 0 is DFAN_LABEL dfanputlabel = daipann(filename, tag, ref, label, len(label), 0, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfanputdesc C Purpose: put description of tag/ref C Inputs: filename: name of HDF file C tag, ref: tag/ref of item of which this is the description C desc: description to write to file C desclen: length of description C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function dfanputdesc(filename, tag, ref, desc, desclen) character *(*) filename, desc integer tag, ref, desclen, daipann C 1 is DFAN_DESC dfanputdesc = daipann(filename, tag, ref, desc, desclen, 1, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfanlablist C Purpose: Return list of refs and labels for a given tag C Inputs: filename: name of HDF file C tag: tag to get list of refs and labels for C reflist: array to place refs in C labellist: array of strings to place labels in C listsize: size of ref and label lists C maxlen: maximum length allowed for label C startpos: beginning from the startpos'th entry, up to listsize C entries will be returned. C Returns: number of entries on success, -1 on error with DFerror set C Users: HDF users, utilities, other routines C Invokes: dailist C Method: call dailist C Remarks: none C------------------------------------------------------------------------------ integer function dfanlablist(filename, tag, reflist, labellist, + listsize, maxlen, startpos) character *(*) filename, labellist integer tag, reflist(*), listsize, maxlen, startpos, dailist dfanlablist = dailist(filename, tag, reflist, labellist, + listsize, maxlen, startpos, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfanaddfid C Purpose: add file ID to file C Inputs: dfile: pointer to HDF file C id: id to write to file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL users, utilities, other routines C Invokes: daipann C------------------------------------------------------------------------------ integer function dfanaddfid(file, id) integer file, daiafid character*(*) id DFANaddfid = daiafid(file, id, len(id) ) return end hdf4-hdf4.3.1/hdf/src/dfcomp.c000066400000000000000000000321541503061704500160000ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfcomp.c * Purpose: File compression * Invokes: df.c dfimcomp.c df.h * Contents: * DFputcomp: compress image and write it to HDF file * DFgetcomp: read compressed image from HDF file and decompress it * DFCrle: compress string using run length encoding * DFCunrle: decompress string using run length encoding * Remarks: DFgetcomp and DFputcomp constitute a general compression interface *---------------------------------------------------------------------------*/ /* This module (dfcomp.c) used to be in charge of the general compression * information but hcomp.c now supersedes it */ #include "hdf_priv.h" #define R8_MAX_BLOCKS 32 #define R8_MAX_LENGTH 512 /*----------------------------------------------------------------------------- * Name: DFputcomp * Purpose: Compress and write images to HDF file * Inputs: file_id: pointer to HDF file * tag, ref: tag, ref of compressed image for writing out * image: image to be compressed * xdim, ydim: dimensions of image * palette: palette associated with image * newpal: modified palette, produced if compression scheme is IMCOMP * scheme: compression scheme to be used * cinfo: additional information needed for compression * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF programmers, DF8putrig, other routines * Invokes: DFCrle, DFCimcomp, DFaccess, DFwrite, DFIcheck * Remarks: IMCOMP modifies the palette associated with the image * Hence the palette and newpal arguments * This is a general compression interface - to be used anytime image * compression is needed in HDF * Note that rseq does its own compression, because that is part of * the interactive color raster protocol * The space needed for compression and decompression can be allocated * for the entire image or part of it (reused) depending on availability * Accordingly, writing out is whole image, or row by row * Note that compression is always row by row for RLE. *---------------------------------------------------------------------------*/ intn DFputcomp(int32 file_id, uint16 tag, uint16 ref, const uint8 *image, int32 xdim, int32 ydim, uint8 *palette, uint8 *newpal, int16 scheme, comp_info *cinfo) { uint8 *buffer; /* buffer to hold compressed image */ const uint8 *in; /* pointer to input for compression */ uint8 *out; /* pointer to space for compressed output */ int32 cisize; /* maximum size of compressed image */ int32 crowsize; /* maximum size of compressed row */ intn buftype; /* buftype = 1: buffer enough for whole image */ /* buftype = 2: buffer holds 1 row */ int32 n; /* number of compressed bytes produced */ int32 total; /* total compressed bytes produced so far */ int32 i; int32 ret = 0; int32 aid = 0; if (!HDvalidfid(file_id) || !tag || !ref || xdim <= 0 || ydim <= 0 || !image) HRETURN_ERROR(DFE_ARGS, FAIL); switch (scheme) { case DFTAG_RLE: /* RLE compression (8-bit or 24-bit(?) images */ cisize = ydim * (xdim * 121 / 120 + 1); /* 120 chars can compress to 121! */ crowsize = xdim * 121 / 120 + 128; /* allocate buffer for compression */ buffer = (uint8 *)malloc((uint32)cisize); if (!buffer) { buffer = (uint8 *)malloc((uint32)crowsize); if (!buffer) HRETURN_ERROR(DFE_NOSPACE, FAIL); buftype = 2; /* compress and write out row by row */ } else /* can hold whole image, then write */ buftype = 1; in = image; out = buffer; n = total = 0; /* no bytes compressed so far */ if (buftype == 2) { int32 num_blocks; int32 block_length; num_blocks = (ydim > (int32)R8_MAX_BLOCKS) ? (int32)R8_MAX_BLOCKS : ydim; block_length = (xdim > (int32)R8_MAX_LENGTH) ? (int32)R8_MAX_LENGTH : xdim; aid = HLcreate(file_id, tag, ref, block_length, num_blocks); if (aid == FAIL) return FAIL; } /* compress row by row */ for (i = 0; i < ydim; i++) { n = DFCIrle(in, out, xdim); /* compress row */ in += xdim; /* move input pointer */ total += n; /* keep running total */ if (buftype == 1) /* can hold whole image */ out = &buffer[total]; /* move out buffer pointer */ else { /* buffer too small, */ /* write out what was produced */ if (Hwrite(aid, n, buffer) == FAIL) { ret = FAIL; /* flag value */ break; } out = buffer; /* reset output pointer */ } } if (buftype == 1) { /* write out entire image */ ret = Hputelement(file_id, tag, ref, buffer, total); free(buffer); } break; case DFTAG_IMC: /* IMCOMP compression (8-bit images) */ if (!palette || !newpal) /* need palette and newpal */ HRETURN_ERROR(DFE_ARGS, FAIL); cisize = xdim * ydim / 4; /* IMCOMP always cuts to 1/4 */ buffer = (uint8 *)malloc((uint32)cisize); if (!buffer) HRETURN_ERROR(DFE_NOSPACE, FAIL); DFCIimcomp(xdim, ydim, image, buffer, palette, newpal, 0); ret = Hputelement(file_id, tag, ref, buffer, cisize); free(buffer); break; case DFTAG_JPEG5: /* JPEG compression (for 24-bit images) */ case DFTAG_GREYJPEG5: /* JPEG compression (for 8-bit images) */ ret = DFCIjpeg(file_id, tag, ref, xdim, ydim, image, scheme, cinfo); break; default: /* unknown compression scheme */ HRETURN_ERROR(DFE_BADSCHEME, FAIL); } return (intn)ret; } /* end DFputcomp() */ /*----------------------------------------------------------------------------- * Name: DFgetcomp * Purpose: Read compressed image and decompress it * Inputs: file_id: HDF file pointer * tag, ref: id of image to be decompressed * image: space to return decompressed image in * xdim, ydim: dimensions of decompressed image * scheme: compression scheme used * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF programmers, DF8getrig, other routines * Invokes: DFIcheck, DFIfind, DFaccess, DFread, DFCunrle, DFCunimcomp * Remarks: Will use dynamic/static memory allocation for buffer * will read in image in parts if memory insufficient * Decompression of rle is not necessarily row by row * Other encodings can also be decoded with this *---------------------------------------------------------------------------*/ int DFgetcomp(int32 file_id, uint16 tag, uint16 ref, uint8 *image, int32 xdim, int32 ydim, uint16 scheme) { uint8 *buffer; uint8 *in; uint8 *out; int32 cisize, crowsize, buflen, bufleft; /* bufleft: bytes left in buffer */ int32 i; int32 totalread; int32 n; int32 aid; if (!HDvalidfid(file_id) || !tag || !ref || xdim <= 0 || ydim <= 0 || !image) HRETURN_ERROR(DFE_ARGS, FAIL); /* put this call up here instead of in switch statement, to make the */ /* code easier to follow */ if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) return DFCIunjpeg(file_id, tag, ref, (void *)image, xdim, ydim, (int16)scheme); /* Only do this stuff for non-JPEG compressed images */ aid = Hstartread(file_id, tag, ref); if (aid == FAIL) HRETURN_ERROR(DFE_NOMATCH, FAIL); if (Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, &cisize, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL) == FAIL) return FAIL; switch (scheme) { case DFTAG_RLE: crowsize = xdim * 121 / 120 + 128; /* max size of a row */ buffer = (uint8 *)malloc((uint32)cisize); if (!buffer) { buffer = (uint8 *)malloc((uint32)crowsize); if (!buffer) { Hendaccess(aid); HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* end if */ buflen = crowsize; } /* end if */ else buflen = cisize; in = buffer; out = image; if ((n = Hread(aid, buflen, in)) < 0) { free(buffer); Hendaccess(aid); HRETURN_ERROR(DFE_READERROR, FAIL); } /* end if */ totalread = n; bufleft = n; for (i = 0; i < ydim; i++) { n = DFCIunrle(in, out, xdim, !i); /* no of bytes used up */ /* last arg=TRUE if i=0 - resets decompress */ in += n; out += xdim; bufleft -= n; /* check if more bytes may be needed for next read */ if ((bufleft < crowsize) && (totalread < cisize)) { memcpy(buffer, in, (size_t)bufleft); in = buffer; if ((n = Hread(aid, buflen - bufleft, (uint8 *)&in[bufleft])) < 0) { free(buffer); Hendaccess(aid); HRETURN_ERROR(DFE_READERROR, FAIL); } /* end if */ totalread += n; bufleft += n; } /* end if */ } /* end for */ Hendaccess(aid); free(buffer); break; case DFTAG_IMC: crowsize = xdim; /* size of compressed row */ buffer = (uint8 *)malloc((uint32)cisize); if (!buffer) { buffer = (uint8 *)malloc((uint32)crowsize); if (!buffer) { Hendaccess(aid); HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* end if */ buflen = crowsize; } /* end if */ else buflen = cisize; if (buflen >= cisize) { if (Hread(aid, cisize, buffer) < cisize) { free(buffer); Hendaccess(aid); HRETURN_ERROR(DFE_READERROR, FAIL); } Hendaccess(aid); DFCIunimcomp(xdim, ydim, buffer, image); free(buffer); break; /* go to end of switch */ } /* end if */ in = buffer; /* if can only read piecemeal */ out = image; if ((n = Hread(aid, buflen, in)) < 0) { free(buffer); Hendaccess(aid); HRETURN_ERROR(DFE_READERROR, FAIL); } /* end if */ totalread = n; bufleft = n; for (i = 0; i < ydim; i += 4) { DFCIunimcomp(xdim, (int32)4, in, out); in += xdim; out += 4 * xdim; bufleft -= xdim; if ((bufleft < crowsize) && (totalread < cisize)) { memcpy(buffer, in, (size_t)bufleft); in = buffer; if ((n = Hread(aid, buflen - bufleft, (uint8 *)&in[bufleft])) < 0) { free(buffer); Hendaccess(aid); HRETURN_ERROR(DFE_READERROR, FAIL); } /* end if */ totalread += n; bufleft += n; } /* end if */ } /* end for */ free(buffer); Hendaccess(aid); break; default: /* unknown scheme */ HRETURN_ERROR(DFE_ARGS, FAIL); } /* end switch */ return SUCCEED; } /* end DFgetcomp() */ hdf4-hdf4.3.1/hdf/src/dfconv.c000066400000000000000000000424751503061704500160160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------ File: dfconv.c Purpose: Routines to support conversion to and from HDF format Invokes: Static conversion functions: All of these are now in separate files! dfknat.c DFKnb1b - Native mode for 8 bit integers DFKnb2b - Native mode for 16 bit integers DFKnb4b - Native mode for 32 bit integers and floats DFKnb8b - Native mode for 64 bit floats dfkswap.c DFKsb2b - Byte swapping for 16 bit integers DFKsb4b - Byte swapping for 32 bit integers DFKsb8b - Byte swapping for 64 bit floats Other PUBLIC functions: DFKmachineNTsize - Determine size in machine, given number type DFKhdfNTsize - Determine size in HDF format, given number type DFKsetNT - Set number type for future conversion calls DFKsetcustom - Template for user to setup custom conversion routines DFKisnative - Checks whether number type is native mode DFKislitend - Checks whether number type is little-endian mode DFconvert - provide compatibility with 3.0 routines Private functions: DFKInoset - Indicate that DFKsetNT hasn't been called *------------------------------------------------------------------*/ /*****************************************************************************/ /* */ /* All the routines in this file marked as static have been marked so */ /* for a reason. *ANY* of these routines may or may nor be supported in */ /* the next version of HDF (4.00). Furthermore, the names, parameters, or */ /* functionality is *NOT* guaranteed to remain the same. */ /* The *ONLY* guarantee possible is that DFKnumin(), and DFKnumout() */ /* will not change. They are *NOT* guaranteed to be implemented in the */ /* next version of HDF as function pointers. They are guaranteed to take */ /* the same arguments and produce the same results. */ /* If your programs call any routines in this file except for */ /* DFKnumin(), DFKnumout, and/or DFKsetntype(), your code may not work */ /* with future versions of HDF and your code will *NOT* be portable. */ /* */ /*****************************************************************************/ #include "hdf_priv.h" #include "hconv_priv.h" /* ** Static function prototypes */ static int DFKInoset(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride); /* Prototypes */ extern int32 DFKqueryNT(void); extern int DFKsetcustom(int (*DFKcustin)(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride), int (*DFKcustout)(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride)); extern int DFconvert(uint8 *source, uint8 *dest, int ntype, int sourcetype, int desttype, int32 size); /* ** Conversion Routine Pointer Definitions */ static int (*DFKnumin)(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride) = DFKInoset; static int (*DFKnumout)(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride) = DFKInoset; /************************************************************ * If the programmer forgot to call DFKsetntype, then let * them know about it. ************************************************************/ static int DFKInoset(void *source, void *dest, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { (void)source; (void)dest; (void)num_elm; (void)source_stride; (void)dest_stride; HEclear(); /* If this is causing a problem for you, call DFKsetntype */ HERROR(DFE_BADCONV); return FAIL; } /***************************************************************************** * Routines that depend on the above information *****************************************************************************/ static int32 g_ntype = DFNT_NONE; /* Holds current number type. */ /* Initially not set. */ /************************************************************ * DFKqueryNT() * Determine the current conversion settings ************************************************************/ int32 DFKqueryNT(void) { return g_ntype; } /************************************************************ * DFKNTsize() * Determine the size, given the number type ************************************************************/ int DFKNTsize(int32 number_type) { /* mask off the litend bit since little endian and big endian have */ /* the same size. Only need to distinguish size difference between */ /* HDF and native types. */ switch (number_type & (~DFNT_LITEND)) { /* native types */ case DFNT_NUCHAR: return SIZE_NUCHAR; case DFNT_NCHAR: return SIZE_NCHAR; case DFNT_NINT8: return SIZE_NINT8; case DFNT_NUINT8: return SIZE_NUINT8; case DFNT_NINT16: return SIZE_NINT16; case DFNT_NUINT16: return SIZE_NUINT16; case DFNT_NINT32: return SIZE_NINT32; case DFNT_NUINT32: return SIZE_NUINT32; case DFNT_NFLOAT32: return SIZE_NFLOAT32; case DFNT_NFLOAT64: return SIZE_NFLOAT64; /* HDF types */ case DFNT_UCHAR: return SIZE_UCHAR; case DFNT_CHAR: return SIZE_CHAR; case DFNT_INT8: return SIZE_INT8; case DFNT_UINT8: return SIZE_UINT8; case DFNT_INT16: return SIZE_INT16; case DFNT_UINT16: return SIZE_UINT16; case DFNT_INT32: return SIZE_INT32; case DFNT_UINT32: return SIZE_UINT32; case DFNT_FLOAT32: return SIZE_FLOAT32; case DFNT_FLOAT64: return SIZE_FLOAT64; /* Unknown types */ default: break; } /* switch */ /* hdf default format */ return FAIL; } /************************************************************ * DFKsetNT() * Set the number type for future conversion calls ************************************************************/ intn DFKsetNT(int32 ntype) { HEclear(); g_ntype = ntype; switch (ntype) { case DFNT_CHAR8: case DFNT_UCHAR8: case DFNT_INT8: case DFNT_UINT8: DFKnumin = UI8_IN; DFKnumout = UI8_OUT; break; case DFNT_INT16: DFKnumin = SI16_IN; DFKnumout = SI16_OUT; break; case DFNT_UINT16: DFKnumin = UI16_IN; DFKnumout = UI16_OUT; break; case DFNT_INT32: DFKnumin = SI32_IN; DFKnumout = SI32_OUT; break; case DFNT_UINT32: DFKnumin = UI32_IN; DFKnumout = UI32_OUT; break; case DFNT_FLOAT32: DFKnumin = F32_IN; DFKnumout = F32_OUT; break; case DFNT_FLOAT64: DFKnumin = F64_IN; DFKnumout = F64_OUT; break; /* * NATIVE MODE 'CONVERSIONS' */ case DFNT_NCHAR: case DFNT_NINT8: case DFNT_NUCHAR: case DFNT_NUINT8: DFKnumin = NUI8_IN; DFKnumout = NUI8_OUT; break; case DFNT_NINT16: DFKnumin = NSI16_IN; DFKnumout = NSI16_OUT; break; case DFNT_NUINT16: DFKnumin = NUI16_IN; DFKnumout = NUI16_OUT; break; case DFNT_NINT32: DFKnumin = NSI32_IN; DFKnumout = NSI32_OUT; break; case DFNT_NUINT32: DFKnumin = NUI32_IN; DFKnumout = NUI32_OUT; break; case DFNT_NFLOAT32: DFKnumin = NF32_IN; DFKnumout = NF32_OUT; break; case DFNT_NFLOAT64: DFKnumin = NF64_IN; DFKnumout = NF64_OUT; break; /* * Little Endian Conversions */ case DFNT_LCHAR: case DFNT_LINT8: case DFNT_LUCHAR: case DFNT_LUINT8: DFKnumin = LUI8_IN; DFKnumout = LUI8_OUT; break; case DFNT_LINT16: DFKnumin = LSI16_IN; DFKnumout = LSI16_OUT; break; case DFNT_LUINT16: DFKnumin = LUI16_IN; DFKnumout = LUI16_OUT; break; case DFNT_LINT32: DFKnumin = LSI32_IN; DFKnumout = LSI32_OUT; break; case DFNT_LUINT32: DFKnumin = LUI32_IN; DFKnumout = LUI32_OUT; break; case DFNT_LFLOAT32: DFKnumin = LF32_IN; DFKnumout = LF32_OUT; break; case DFNT_LFLOAT64: DFKnumin = LF64_IN; DFKnumout = LF64_OUT; break; /* No conversion routines are specified for DFNT_custom. User must provide. */ /* Users should call DFCV_SetCustomIn() and DFCV_SetCustomOut() if they */ /* choose to use DFNT_CUSTOM. Users should provide their own method to */ /* distinguish between multiple 'custom' conversion routines. HDF only */ /* knows such routines as type 'DFNT_CUSTOM'. */ case DFNT_CUSTOM: g_ntype = DFNT_CUSTOM; break; default: HRETURN_ERROR(DFE_BADCONV, FAIL); } return 0; } /***************************************************************************** * The following routine provides an easy method for the user to setup custom * conversion routines.... *****************************************************************************/ int DFKsetcustom(int (*DFKcustin)(void * /* source */, void * /* dest */, uint32 /* num_elm */, uint32 /* source_stride */, uint32 /* dest_stride */), int (*DFKcustout)(void * /* source */, void * /* dest */, uint32 /* num_elm */, uint32 /* source_stride */, uint32 /* dest_stride */)) { DFKnumin = DFKcustin; DFKnumout = DFKcustout; DFKsetNT(DFNT_CUSTOM); /* Keep HDF from getting confused */ return 0; } /*------------------------------------------------------------------ * Name: DFKisnativeNT * Purpose: Determine whether number type is native mode * Inputs: numbertype: number type * Returns: 1 if true, 0 if false * Users: DFSDgetslice * Method: Checks to see if the "native mode" bit is set * Remarks: *------------------------------------------------------------------*/ int32 DFKisnativeNT(int32 numbertype) { return (DFNT_NATIVE & numbertype) > 0 ? 1 : 0; } /*------------------------------------------------------------------ * Name: DFKislitendNT * Purpose: Determine whether number type is little-endian mode * Inputs: numbertype: number type * Returns: 1 if true, 0 if false * Users: DFSDgetslice * Method: Checks to see if the "native mode" bit is set * Remarks: *------------------------------------------------------------------*/ int32 DFKislitendNT(int32 numbertype) { return (DFNT_LITEND & numbertype) > 0 ? 1 : 0; } /************************************************************ * DFconvert() * * This routine is called by HDF version 3.0 compatibility * routines. It serves as a jump point to the new version 4.0 * conversion functions. DFconvert() CANNOT be used by Vdata * applications because it assumes a stride of 1 (for * compatibility). Vdata routines should call DFnum_in() and * DFKnumout() (depending on which translation is needed) * * uint8 * source location where the data is stored * uint8 * dest location to put the converted data * int * ntype the overall number type of the data, ie DFNT_FLOAT... * int * sourcetype the specific type of the source data, ie DFNTF_IEEE... * int * desttype the specified type of the converted data, ie DFNTF_VAX... * int * size the number (total) of BYTES to convert ************************************************************/ int DFconvert(uint8 *source, uint8 *dest, int ntype, int sourcetype, int desttype, int32 size) { uint32 num_elm; HEclear(); if (DFKsetNT(ntype) == FAIL) { HERROR(DFE_BADCONV); return FAIL; } if (sourcetype == desttype) { memcpy(dest, source, size); return 0; } num_elm = (uint32)size / 4; /* Check to see if they want to convert numbers in from the disk */ if (sourcetype == DFNTF_IEEE && (desttype == DFNTF_VAX || desttype == DFNTF_CRAY || desttype == DFNTF_PC)) return (DFKnumin)((void *)source, (void *)dest, num_elm, 0, 0); /* Check to see if they want to convert numbers out to disk */ if (desttype == DFNTF_IEEE && (sourcetype == DFNTF_VAX || sourcetype == DFNTF_CRAY || sourcetype == DFNTF_PC)) return DFKnumout((void *)source, (void *)dest, num_elm, 0, 0); /* Return an error because they did not specify valid translation codes */ HERROR(DFE_BADCONV); return FAIL; } /*------------------------------------------------------------------ * Name: DFKgetPNSC * Purpose: Get PlatformNumberSubclass for a given number type * Inputs: numtype: number type to get subclass for * machinetype: machine-type code * Returns: PlatformNumberSubclass on success, FAIL on failure with * error set * Users: DFSDgetslice * Method: Checks NT_TYPES to determine whether it is a char, int, or * float, then looks in corresponding field of machine type * (DFMT) to get the class. * Remarks: *------------------------------------------------------------------*/ int8 DFKgetPNSC(int32 numbertype, int32 machinetype) { /* clear error stack and validate args */ HEclear(); /* Since the information is provided only for the 4 */ /* classes of char, int, float, double and is independent */ /* of whether it is stored native or little-endian in file, */ /* we will use only the standard HDF format information */ switch (numbertype & DFNT_MASK) { case DFNT_CHAR8: case DFNT_UCHAR8: return (int8)(machinetype & 0x0f); case DFNT_INT8: case DFNT_UINT8: case DFNT_INT16: case DFNT_UINT16: case DFNT_INT32: case DFNT_UINT32: return (int8)((machinetype >> 4) & 0x0f); case DFNT_FLOAT32: return (int8)((machinetype >> 8) & 0x0f); case DFNT_FLOAT64: return (int8)((machinetype >> 12) & 0x0f); default: HRETURN_ERROR(DFE_BADNUMTYPE, FAIL); } } /*---------------------------------------------------------------------------- * Name: DFKconvert * Purpose: set number type and do the convert * Inputs: source -- location where the data is stored * dest -- location to put the converted data * ntype -- the current number type * num_elm -- number of elements to be converted * acc_mode -- DFACC_READ for numin, DFACC_WRITE for numout * source_stride, dest_stride -- strides in source and destination * Returns: 0 -- succeed; FAIL -- failure * Users: DFSDgetsdg, DFSDputsdg, DFSDIgetslice, DFSDIgetslice * Method: Calls DFKsetNT, then call DFnumin or DFnumout *---------------------------------------------------------------------------*/ int32 DFKconvert(void *source, void *dest, int32 ntype, int32 num_elm, int16 acc_mode, int32 source_stride, int32 dest_stride) { int ret; /* Check args (minimally) */ if (source == NULL || dest == NULL) return -1; DFKsetNT(ntype); if (acc_mode == DFACC_READ) ret = DFKnumin(source, dest, (uint32)num_elm, (uint32)source_stride, (uint32)dest_stride); else ret = DFKnumout(source, dest, (uint32)num_elm, (uint32)source_stride, (uint32)dest_stride); return ret; } /***************************************************************************** * Miscellaneous Other Conversion Routines *****************************************************************************/ hdf4-hdf4.3.1/hdf/src/dff.c000066400000000000000000000334411503061704500152670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfF.c * Purpose: C stubs for Fortran low level routines * Invokes: dfF.c * Contents: * dfiopen: call DFopen to open HDF file * dfclose: call DFclose to close HDF file * dfdesc: call DFdescriptors to get contents of DDs * dfdup: call DFdup to create additional DD for item * dfdel: call DFdel to delete DD of item * dfiaccess: call DFaccess to set up access to item * dfstart: call DFaccess to set up access to item * dfread: call DFread to read part of item * dfseek: call DFseek to move to offset within item * dfwrite: call DFwrite to write part of item * dfupdate: call DFupdate to write out changes * dfget: call DFgetelement to read item * dfput: call DFputelement to write item * dfsfind: call DFsetfind to set up search * dffind: call DFfind to find next matching item * dferrno: call DFerrno to return value of DFerror * dfnewref: call DFnewref to get unused ref no * dfnumber: call DFnumber to get number of occurrences of given tag * dfstat: call DFstat to get status info on file * dfiishdf: call DFishdf to get HDF string *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "df.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: dfiopen * Purpose: call DFopen to open HDF file * Inputs: name: name of file to open * acc_mode: access mode - integer with value DFACC_READ etc. * defdds: default number of DDs per header block * namelen: length of name * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFopen * Method: Convert filename to C string, call DFopen * Note: DFopen actually return *DF. In machines that a pointer * is bigger than a Fortran INTEGER, this routine would fail. * This is a design error and has no easy portable solution. *---------------------------------------------------------------------------*/ intf ndfiopen(_fcd name, intf *acc_mode, intf *defdds, intf *namelen) { char *fn; intf ret; fn = DFIf2cstring(name, (intn)*namelen); /* For compiler warning, see note above. */ ret = (intf)DFopen(fn, (intn)*acc_mode, (intn)*defdds); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dfclose * Purpose: Call DFclose to close HDF file * Inputs: dfile: pointer to HDF file to close * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFclose *---------------------------------------------------------------------------*/ intf ndfclose(intf *dfile) { return DFclose((DF *)*dfile); } /*----------------------------------------------------------------------------- * Name: dfdesc * Purpose: Call DFdescriptors to obtain descriptors * Inputs: dfile: pointer to HDF file * ptr: pointer to array of size >= (4, num) to put descriptors in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFdesc *---------------------------------------------------------------------------*/ intf ndfdesc(intf *dfile, intf ptr[][4], intf *begin, intf *num) { DFdesc *ptr1; int i; intf num_desc; /* allocate temporary space */ if ((ptr1 = (DFdesc *)malloc((uint32)*num * sizeof(DFdesc))) == NULL) HRETURN_ERROR(DFE_NOSPACE, -1); ; num_desc = DFdescriptors((DF *)*dfile, ptr1, (intn)*begin, (intn)*num); /* copy ptr1 array ptr; note row/column inversion */ for (i = 0; i < num_desc; i++) { ptr[i][0] = (int32)ptr1[i].tag; ptr[i][1] = (int32)ptr1[i].ref; ptr[i][2] = ptr1[i].offset; ptr[i][3] = ptr1[i].length; } free(ptr1); return num_desc; } /*----------------------------------------------------------------------------- * Name: dfdup * Purpose: Call DFdup to create additional DD for item * Inputs: dfile: pointer to HDF file * tag, ref: attributes of new DD to add * otag, oref: attributes of item to point to * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFdup *---------------------------------------------------------------------------*/ intf ndfdup(intf *dfile, intf *tag, intf *ref, intf *otag, intf *oref) { return DFdup((DF *)*dfile, (uint16)*tag, (uint16)*ref, (uint16)*otag, (uint16)*oref); } /*----------------------------------------------------------------------------- * Name: dfdel * Purpose: Call DFdel to delete DD of item * Inputs: dfile: pointer to HDF file * tag, ref: attributes of DD to delete * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFdel *---------------------------------------------------------------------------*/ intf ndfdel(intf *dfile, intf *tag, intf *ref) { return DFdel((DF *)*dfile, (uint16)*tag, (uint16)*ref); } /*----------------------------------------------------------------------------- * Name: dfiaccess * Purpose: Call DFaccess to set up access to item * Inputs: dfile: pointer to HDF file * tag, ref: attributes of item to access * acc_mode: access mode * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFaccess *---------------------------------------------------------------------------*/ intf ndfiaccess(intf *dfile, intf *tag, intf *ref, _fcd acc_mode, intf *acclen) { char *acc; intf ret; acc = DFIf2cstring(acc_mode, (intn)*acclen); ret = (intf)DFaccess((DF *)*dfile, (uint16)*tag, (uint16)*ref, acc); free(acc); return ret; } /*----------------------------------------------------------------------------- * Name: dfread * Purpose: Call DFread to read part of item * Inputs: dfile: pointer to HDF file * ptr: pointer to space to read item into * len: number of bytes to read * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFread *---------------------------------------------------------------------------*/ intf ndfread(intf *dfile, _fcd ptr, intf *len) { return DFread((DF *)*dfile, (char *)_fcdtocp(ptr), *len); } /*----------------------------------------------------------------------------- * Name: dfseek * Purpose: Call DFseek to move to offset within item * Inputs: dfile: pointer to HDF file * offset: number of bytes from beginning of item to move to * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFseek *---------------------------------------------------------------------------*/ intf ndfseek(intf *dfile, intf *offset) { return DFseek((DF *)*dfile, *offset); } /*----------------------------------------------------------------------------- * Name: dfwrite * Purpose: Call DFwrite to write part of item * Inputs: dfile: pointer to HDF file * ptr: pointer to data to write * len: number of bytes to write * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFwrite *---------------------------------------------------------------------------*/ intf ndfwrite(intf *dfile, _fcd ptr, intf *len) { return DFwrite((DF *)*dfile, (char *)_fcdtocp(ptr), *len); } /*----------------------------------------------------------------------------- * Name: dfupdate * Purpose: Call DFupdate to write out changes * Inputs: dfile: pointer to HDF file * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFupdate *---------------------------------------------------------------------------*/ intf ndfupdate(intf *dfile) { return DFupdate((DF *)*dfile); } /*----------------------------------------------------------------------------- * Name: dfget * Purpose: Call DFget to read an element * Inputs: dfile: pointer to HDF file * tag, ref: pointer to item to read * ptr: space to read item into * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFgetelement *---------------------------------------------------------------------------*/ intf ndfget(intf *dfile, intf *tag, intf *ref, _fcd ptr) { return DFgetelement((DF *)*dfile, (uint16)*tag, (uint16)*ref, (char *)_fcdtocp(ptr)); } /*----------------------------------------------------------------------------- * Name: dfput * Purpose: Call DFput to write an element * Inputs: dfile: pointer to HDF file * tag, ref: attributes of item to write * ptr: item to write * len: size of item * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFputelement *---------------------------------------------------------------------------*/ intf ndfput(intf *dfile, intf *tag, intf *ref, _fcd ptr, intf *len) { return DFputelement((DF *)*dfile, (uint16)*tag, (uint16)*ref, (char *)_fcdtocp(ptr), *len); } /*----------------------------------------------------------------------------- * Name: dfsfind * Purpose: Call DFsetfind to set up search * Inputs: dfile: pointer to HDF file * tag, ref: attributes of item to find * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFsetfind *---------------------------------------------------------------------------*/ intf ndfsfind(intf *dfile, intf *tag, intf *ref) { return DFsetfind((DF *)*dfile, (uint16)*tag, (uint16)*ref); } /*----------------------------------------------------------------------------- * Name: dffind * Purpose: Call DFfind to find next match * Inputs: dfile: pointer to HDF file * itag, iref: attributes of item found * len: size of item * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFfind *---------------------------------------------------------------------------*/ intf ndffind(intf *dfile, intf *itag, intf *iref, intf *len) { DFdesc *ptr1; intf ret; ptr1 = (DFdesc *)malloc((uint32)sizeof(DFdesc)); if (ptr1 == NULL) HRETURN_ERROR(DFE_NOSPACE, -1); ret = DFfind((DF *)*dfile, ptr1); *itag = (int32)(ptr1->tag); *iref = (int32)(ptr1->ref); *len = ptr1->length; free(ptr1); return ret; } /*----------------------------------------------------------------------------- * Name: dferrno * Purpose: Call DFerrno to get value of DFerror * Inputs: none * Returns: value of DFerror * Users: HDF Fortran programmers * Invokes: DFerrno *---------------------------------------------------------------------------*/ intf ndferrno(void) { return DFerrno(); } /*----------------------------------------------------------------------------- * Name: dfnewref * Purpose: Call DFnewref to get unused ref no * Inputs: dfile: pointer to HDF file * Returns: int16: unused ref no * Users: HDF Fortran programmers * Invokes: DFnewref *---------------------------------------------------------------------------*/ intf ndfnewref(intf *dfile) { return (intf)DFnewref((DF *)*dfile); } /*----------------------------------------------------------------------------- * Name: dfnumber * Purpose: Call DFnumber to get unused ref no * Inputs: dfile: pointer to HDF file * tag: pointer to (int16)tag to count * Returns: int: number of occurrences of given tag * Users: HDF Fortran programmers * Invokes: DFnumber *---------------------------------------------------------------------------*/ intf ndfnumber(intf *dfile, intf *tag) { return DFnumber((DF *)*dfile, (uint16)*tag); } /*----------------------------------------------------------------------------- * Name: dfstat * Purpose: Call DFstat to get status info on file * Inputs: dfile: pointer to HDF file * dfinfo: pointer to DFdata structure to fill in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFstat *---------------------------------------------------------------------------*/ intf ndfstat(intf *dfile, DFdata *dfinfo) { return DFstat((DF *)*dfile, dfinfo); } /*----------------------------------------------------------------------------- * Name: dfiishdf * Purpose: Call DFishdf to test file * Inputs: name: name of file to test * namelen: pointer to variable containing length of name string * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFishdf *---------------------------------------------------------------------------*/ intf ndfiishdf(_fcd name, intf *namelen) { char *fn; intf ret; fn = DFIf2cstring(name, (intn)*namelen); ret = DFishdf(fn); free(fn); return ret; } hdf4-hdf4.3.1/hdf/src/dfff.f000066400000000000000000000063251503061704500154410ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C C------------------------------------------------------------------------------ C File: dfFf.f C Purpose: Fortran stubs for Fortran low level i/o routines C Invokes: dfF.c dfkit.c C Contents: C dfopen: call dfiopen to open HDF file C dfishdf: call dfiishdf to find is file is HDF C ----------------------------------------------------------------------------- C------------------------------------------------------------------------------ C Name: dfopen C Purpose: call dfiopen to open HDF file C Inputs: name: name of HDF file to open C access: integer for access mode: DFACC_READ etc. C defdds: default number of DDs per header block C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dfiopen C------------------------------------------------------------------------------ integer function dfopen(name, access, defdds) character*(*) name integer access, defdds, dfiopen dfopen = dfiopen(name, access, defdds, len(name)) return end C------------------------------------------------------------------------------ C Name: dfaccess C Purpose: call dfiaccess to set up access to a data element C Inputs: dfile: pointer to open HDF file C tag: tag of element to access C ref: ref of element to access C access: access mode requested C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF FORTRAN programmers C Invokes: dfiaccess C------------------------------------------------------------------------------ integer function dfaccess(dfile, tag, ref, access) character*(*) access integer dfile, tag, ref, dfiaccess dfaccess = dfiaccess(dfile, tag, ref, access, len(access)) return end C------------------------------------------------------------------------------ C Name: dfishdf C Purpose: call dfiishdf to test file C Inputs: name: name of file to test C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dfiishdf C------------------------------------------------------------------------------ integer function dfishdf(name) character*(*) name integer dfiishdf dfishdf = dfiishdf(name, len(name)) return end hdf4-hdf4.3.1/hdf/src/dffunc.inc000066400000000000000000000471201503061704500163230ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C C dffunc.inc C C Declarations of return values for HDF SDS functions C integer DFSDadddata, dsadata external DFSDadddata, dsadata integer DFSDclear, dsclear external DFSDclear, dsclear integer DFSDsetdimscale, dssdisc external DFSDsetdimscale, dssdisc integer DFSDendslice, dseslc external DFSDendslice, dseslc integer DFSDgetNT, dsgnt external DFSDgetNT, dsgnt integer DFSDgetdata, dsgdata external DFSDgetdata, dsgdata integer DFSDgetdatalen, dsgdaln external DFSDgetdatalen, dsgdaln integer DFSDgetdatastrs, dsgdast external DFSDgetdatastrs, dsgdast integer DFSDgetdimlen, dsgdiln external DFSDgetdimlen, dsgdiln integer DFSDgetdims, dsgdims external DFSDgetdims, dsgdims integer DFSDgetdimscale, dsgdisc external DFSDgetdimscale, dsgdisc integer DFSDgetdimstrs, dsgdist external DFSDgetdimstrs, dsgdist integer DFSDgetrange, dsgrang external DFSDgetrange, dsgrang integer DFSDgetslice, dsgslc external DFSDgetslice, dsgslc integer DFSDlastref, dslref external DFSDlastref, dslref integer DFSDnumber, dsnum external DFSDnumber, dsnum integer DFSDputdata, dspdata external DFSDputdata, dspdata integer DFSDputslice, dspslc external DFSDputslice, dspslc integer DFSDreadref, dsrref external DFSDreadref, dsrref integer DFSDrestart, dsfirst external DFSDrestart, dsfirst integer DFSDsetNT, dssnt external DFSDsetNT, dssnt integer DFSDsetdatastrs, dssdast external DFSDsetdatastrs, dssdast integer DFSDsetdims, dssdims external DFSDsetdims, dssdims integer DFSDsetdimstrs, dssdist external DFSDsetdimstrs, dssdist integer DFSDsetlengths, dsslens external DFSDsetlengths, dsslens integer DFSDsetrange, dssrang external DFSDsetrange, dssrang integer DFSDstartslice, dssslc external DFSDstartslice, dssslc integer dsgcal external dsgcal integer dsp32sd external dsp32sd integer dsscal external dsscal integer dseslab external dseslab integer dsrslab external dsrslab integer dssslab external dssslab integer dswslab external dswslab integer dsgfill external dsgfill integer dssfill external dssfill integer dswref external dswref C C Declarations of return values for HDF Annotation functions C integer DFANputlabel, daplab external DFANputlabel, daplab integer DFANputdesc, dapdesc external DFANputdesc, dapdesc integer DFANgetlablen, dagllen external DFANgetlablen, dagllen integer DFANgetlabel, daglab external DFANgetlabel, daglab integer DFANgetdesclen, dagdlen external DFANgetdesclen, dagdlen integer DFANgetdesc, dagdesc external DFANgetdesc, dagdesc integer DFANlablist, dallist external DFANlablist, dallist integer DFANaddfid, daafid external DFANaddfid, daafid integer DFANaddfds, daafds external DFANaddfds, daafds integer DFANgetfidlen, dagfidl external DFANgetfidlen, dagfidl integer DFANgetfid, dagfid external DFANgetfid, dagfid integer DFANgetfdslen, dagfdsl external DFANgetfdslen, dagfdsl integer DFANgetfds, dagfds external DFANgetfds, dagfds integer DFANlastref, dalref external DFANlastref, dalref integer daclear external daclear C C Declarations of return values for HDF Raster Image functions C integer DFR8setpalette, d8spal external DFR8setpalette, d8spal integer DFR8putimage, d8pimg external DFR8putimage, d8pimg integer DFR8addimage, d8aimg external DFR8addimage, d8aimg integer DFR8getdims, d8gdims external DFR8getdims, d8gdims integer DFR8getimage, d8gimg external DFR8getimage, d8gimg integer DFR8readref, d8rref external DFR8readref, d8rref integer DFR8writeref, d8wref external DFR8writeref, d8wref integer DFR8restart, d8first external DFR8restart, d8first integer DFR8nimages, d8nims external DFR8nimages, d8nims integer DFR8lastref, d8lref external DFR8lastref, d8lref integer DFR8scompress, d8scomp external DFR8scompress, d8scomp integer DFR8sjpeg, d8sjpeg external DFR8sjpeg, d8sjpeg integer DF24setil, d2setil external DF24setil, d2setil integer DF24addimage, d2aimg external DF24addimage, d2aimg integer DF24putimage, d2pimg external DF24putimage, d2pimg integer DF24getimage, d2gimg external DF24getimage, d2gimg integer DF24getdims, d2gdims external DF24getdims, d2gdims integer DF24setdims, d2sdims external DF24setdims, d2sdims integer DF24readref, d2rref external DF24readref, d2rref integer DF24restart, d2first external DF24restart, d2first integer DF24reqil, d2reqil external DF24reqil, d2reqil integer d2lref external d2lref integer DF24scompress, d2scomp external DF24scompress, d2scomp integer DF24sjpeg, d2sjpeg external DF24sjpeg, d2sjpeg integer DFPaddpal, dpapal external DFPaddpal, dpapal integer DFPgetpal, dpgpal external DFPgetpal, dpgpal integer DFPputpal, dpppal external DFPputpal, dpppal integer DFPnpals, dpnpals external DFPnpals, dpnpals integer DFPwriteref, dpwref external DFPwriteref, dpwref integer DFPreadref, dprref external DFPreadref, dprref integer DFPrestart, dprest external DFPrestart, dprest integer DFPlastref, dplref external DFPlastref, dplref C C Declarations of return values for HDF Raster Image functions C integer DFopen external DFopen integer DFclose external DFclose integer DFsfind external DFsfind integer DFdesc external DFdesc integer DFfind external DFfind integer DFget external DFget integer DFput external DFput integer DFaccess external DFaccess integer DFread external DFread integer DFwrite external DFwrite integer DFseek external DFseek integer DFupdate external DFupdate integer DFdup external DFdup integer DFdel external DFdel integer DFerrno external DFerrno integer DFishdf external DFishdf integer DFnewref external DFnewref integer DFnumber external DFnumber integer DFstat external DFstat C C Declarations of return values for HDF Vgroup functions C integer vfadtr external vfadtr integer vfainfo external vfainfo integer vfatch external vfatch integer vfdtch external vfdtch integer vfdtr external vfdtr integer vfend external vfend integer vfents external vfents integer vffdatt external vffdatt integer vffloc external vffloc integer vfgnatt external vfgnatt integer vfgcatt external vfgcatt integer vfgcls external vfgcls integer vfgid external vfgid integer vfgnam external vfgnam integer vfgnxt external vfgnxt integer vfgttr external vfgttr integer vfgttrs external vfgttrs integer vfgver external vfgver integer vfind external vfind integer vfinq external vfinq integer vfinqtr external vfinqtr integer vfinsrt external vfinsrt integer vfisvg external vfisvg integer vfisvs external vfisvs integer vflone external vflone integer vfnatts external vfnatts integer vfntr external vfntr integer vfsnatt external vfsnatt integer vfscatt external vfscatt integer vfscls external vfscls integer vfsnam external vfsnam integer vfstart external vfstart integer vfgvgroups external vfgvgroups C C Declarations of return values for HDF high level Vdata/Vgroup C functions C integer vhfmkgp external vhfmkgp integer vhfscd external vhfscd integer vhfsd external vhfsd integer vhfscdm external vhfscdm integer vhfsdm external vhfsdm C C Declarations of return values for HDF Vdata functions C integer vsfainf external vsfainf integer vsfatch external vsfatch integer vsfcpak external vsfcpak integer vsfdlte external vsfdlte integer vsfdtch external vsfdtch integer vsfelts external vsfelts integer vsfex external vsfex integer vsffdef external vsffdef integer vsffdat external vsffdat integer vsffidx external vsffidx integer vsffnas external vsffnas integer vsffnd external vsffnd integer vsfgnat external vsfgnat integer vsfgcat external vsfgcat integer vsfgcls external vsfgcls integer vsfgfld external vsfgfld integer vsfgid external vsfgid integer vsfgint external vsfgint integer vsfgnam external vsfgnam integer vsfinq external vsfinq integer vsfisat external vsfisat integer vsflone external vsflone integer vsfnats external vsfnats integer vsfndc external vsfndc integer vsfnpak external vsfnpak integer vsfrd external vsfrd integer vsfrdc external vsfrdc integer vsfread external vsfread integer vsfsnat external vsfsnat integer vsfscat external vsfscat integer vsfscls external vsfscls integer vsffcls external vsffcls integer vsfseek external vsfseek integer vsfsextf external vsfsextf integer vsfsfld external vsfsfld integer vsfsint external vsfsint integer vsfsiz external vsfsiz integer vsfsnam external vsfsnam integer vsfwrt external vsfwrt integer vsfwrtc external vsfwrtc integer vsfwrit external vsfwrit external vsfsetblsz integer vsfsetblsz external vsfsetnmbl integer vsfsetnmbl external vsfgetblinfo integer vsfgetblinfo integer vsfgvdatas external vsfgvdatas integer vsgver external vsgver C C Declarations of return values for HDF Vdata Field Functions C external vffesiz integer vffesiz external vffisiz integer vffisiz external vffname integer vffname external vffordr integer vffordr external vfftype integer vfftype external vfnflds integer vfnflds C C Declarations of return values for HDF Vdata Query functions C integer vsqfnelt external vsqfnelt integer vsqfintr external vsqfintr integer vsqfflds external vsqfflds integer vsqfvsiz external vsqfvsiz integer vsqfname external vsqfname C C Declarations of return values for HDF low level H functions C integer hclose external hclose integer heprnt external heprnt integer hnumber external hnumber integer hopen external hopen integer hxscdir external hxscdir integer hxsdir external hxsdir integer hddontatexit external hddontatexit integer hglibver external hglibver integer hgfilver external hgfilver integer hishdff external hishdff integer hestringf external hestringf integer heprntf external heprntf integer hconfinf external hconfinf C C Decls of MGxxx functions for Fortran multi-file GR interface C integer mgstart external mgstart integer mgfinfo external mgfinfo integer mgend external mgend integer mgcreat external mgcreat integer mgselct external mgselct integer mgn2ndx external mgn2ndx integer mggiinf external mggiinf integer mgwrimg external mgwrimg integer mgrdimg external mgrdimg integer mgendac external mgendac integer mgid2rf external mgid2rf integer mgr2idx external mgr2idx integer mgrltil external mgrltil integer mgrimil external mgrimil integer mggltid external mggltid integer mgglinf external mgglinf integer mgwrlut external mgwrlut integer mgrdlut external mgrdlut integer mgsxfil external mgsxfil integer mgsattr external mgsattr integer mgatinf external mgatinf integer mggattr external mggattr integer mgfndat external mgfndat integer mggichnk external mggichnk integer mgscchnk external mgscchnk integer mgschnk external mgschnk integer mgwchnk external mgwchnk integer mgwcchnk external mgwcchnk integer mgrchnk external mgrchnk integer mgrcchnk external mgrcchnk integer mgscompress external mgscompress integer mggcompress external mggcompress integer mglt2rf external mglt2rf integer mggnluts external mggnluts C C Decls of ANxxx functions for Fortran multi-file AN interface C integer afstart external afstart integer affileinfo external affileinfo integer afend external afend integer afcreate external afcreate integer affcreate external affcreate integer afselect external afselect integer afnumann external afnumann integer afannlist external afannlist integer afannlen external afannlen integer afwriteann external afwriteann integer afreadann external afreadann integer afendaccess external afendaccess integer afgettagref external afgettagref integer afidtagref external afidtagref integer aftagrefid external aftagrefid integer afatypetag external afatypetag integer aftagatype external aftagatype C C Decls of SFxxx functions for Fortran multi-file interface C integer sfstart external sfstart integer sfn2index external sfn2index integer sfcreate external sfcreate integer sfsdmstr external sfsdmstr integer sfsdmname external sfsdmname integer sfsdtstr external sfsdtstr integer sfgdtstr external sfgdtstr integer sfgdmstr external sfgdmstr integer sfginfo external sfginfo integer sfgainfo external sfgainfo integer sfgdinfo external sfgdinfo integer sfsattr external sfsattr integer sfsnatt external sfscatt integer sfscatt integer sffattr external sffattr integer sfend external sfend integer sfendacc external sfendacc integer sffinfo external sffinfo integer sfselect external sfselect integer sfdimid external sfdimid integer sfgcal external sfgcal integer sfscal external sfscal integer sfsdscale external sfsdscale integer sfgdscale external sfgdscale integer sfsfill external sfsfill integer sfgfill external sfgfill integer sfgrange external sfgrange integer sfsrange external sfsrange integer sfrattr external sfrattr integer sfrnatt external sfrcatt integer sfrcatt integer sfrdata external sfrdata integer sfwdata external sfwdata integer sfsextf external sfsextf integer sfsnbit external sfsnbit integer sfsacct external sfsacct integer sfid2ref external sfid2ref integer sfiscvar external sfiscvar integer sfref2index external sfref2index integer sfsdmvc external sfsdmvc integer sfisdmvc external sfisdmvc integer sfgichnk external sfgichnk integer sfrcchnk external sfrcchnk integer sfrchnk external sfrchnk integer sfwcchnk external sfwcchnk integer sfwchnk external sfwchnk integer sfscchnk external sfscchnk integer sfschnk external sfschnk integer sfscompress external sfscompress integer sfgcompress external sfgcompress integer sfisrcrd external sfisrcrd integer sfsblsz external sfsblsz integer sfchempty external sfchempty integer sfwcdata external sfwcdata integer sfrcdata external sfrcdata integer sfgcfill external sfgcfill integer sfscfill external sfscfill integer sfsflmd external sfsflmd C End of declarations hdf4-hdf4.3.1/hdf/src/dfgr.c000066400000000000000000001443471503061704500154620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfgr.c * Purpose: read and write general raster images * Invokes: df.c, dfkit.c, dfcomp.c, dfgroup.c, dfgr_priv.h * Contents: * DFGRgetlutdims : get dimensions of lookup table * DFGRreqlutil : use this interlace when returning lookup table * DFGRgetlut : read in lookup table * DFGRgetimdims : get dimensions of image * DFGRreqimil : use this interlace when returning image * DFGRgetimage : read in image * DFGRsetcompress : specify compression scheme to be used * DFGRsetlutdims : set dimensions of lookup table * DFGRsetlut : set lookup table to write out with subsequent images * DFGRaddlut : write out lookup table * DFGRsetimdims : set dimensions of image * DFGRaddimage : write out image * * DFGRgetrig : read in raster image group * DFGRaddrig : write out raster image group * * DFGRIopen : open/reopen file * DFGRIriginfo : obtain info about next RIG * DFGRIgetdims : get dimensions of lut/image * DFGRIreqil : get lut/image with this interlace * DFGRIgetimlut : get image/lut * DFGRIsetdims : set image/lut dimensions * DFGRIaddimlut : write out image/lut * Remarks: A RIG specifies attributes associated with an image - lookup table, * dimension, compression, color compensation etc. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfgr_priv.h" static char *Grlastfile = NULL; static uint8 *Grlutdata = NULL; /* points to lut, if in memory */ static intn Grnewdata = 0; /* does Grread contain fresh data? */ static intn Grcompr = 0; /* compression scheme to use */ static comp_info Grcinfo; /* Compression information for each scheme */ static uint16 Grrefset = 0; /* Ref of image to get next */ static uint16 Grlastref = 0; /* Last ref read/written */ static intn Grreqil[2] = {0, 0}; /* requested lut/image il */ static struct { /* track refs of set vals written before */ intn lut; /* -1: no vals set */ int16 dims[2]; /* 0: vals set, not written */ intn nt; /* non-zero: ref of val in file */ } Ref = {-1, {-1, -1}, -1}; static DFGRrig Grread = { /* information about RIG being read */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, { {0, 0}, {0, 0}, {0, 0}, }, { {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }, }; static DFGRrig Grwrite = { /* information about RIG being written */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, { {0, 0}, {0, 0}, {0, 0}, }, { {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }, }; static DFGRrig Grzrig = { /* empty RIG for initialization */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, { {0, 0}, {0, 0}, {0, 0}, }, { {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }, }; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; #define LUT 0 #define IMAGE 1 /* private functions */ static int DFGRIriginfo(int32 file_id); static int DFGRgetrig(int32 file_id, uint16 ref, DFGRrig *rig); static int DFGRaddrig(int32 file_id, uint16 ref, DFGRrig *rig); static intn DFGRIstart(void); /*----------------------------------------------------------------------------- * Name: DFGRgetlutdims * Purpose: get dimensions of lut from next RIG * Inputs: filename: name of HDF file * pxdim, pydim: pointer to locations for returning x,y dimensions * pncomps: location for returning no of components * pil: location for returning interlace of lut in file * Returns: 0 on success, -1 on failure with DFerror set * *pxdim, *pydim, *pncomps, *pil set on success * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIgetdims * Remarks: none *---------------------------------------------------------------------------*/ int DFGRgetlutdims(const char *filename, int32 *pxdim, int32 *pydim, int *pncomps, int *pil) { return DFGRIgetdims(filename, pxdim, pydim, pncomps, pil, LUT); } /*----------------------------------------------------------------------------- * Name: DFGRreqlutil * Purpose: get next lut with specified interlace * Inputs: il: interlace to get next lut with * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIreqil * Remarks: none *---------------------------------------------------------------------------*/ int DFGRreqlutil(int il) { return DFGRIreqil(il, LUT); } /*----------------------------------------------------------------------------- * Name: DFGRgetlut * Purpose: get lut from next RIG * Inputs: filename: name of HDF file * lut: pointer to space to return lookup table * xdim, ydim: dimensions of space to return lut * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIgetimlut * Remarks: space is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ int DFGRgetlut(const char *filename, void *lut, int32 xdim, int32 ydim) { int compressed, has_pal; uint16 compr_type; /* 0 == C */ return DFGRIgetimlut(filename, lut, xdim, ydim, LUT, 0, &compressed, &compr_type, &has_pal); } /*----------------------------------------------------------------------------- * Name: DFGRgetimdims * Purpose: get dimensions of next image RIG * Inputs: filename: name of HDF file * pxdim, pydim: pointer to locations for returning x,y dimensions * pncomps: location for returning no of components * pil: location for returning interlace of image in file * Returns: 0 on success, -1 on failure with DFerror set * *pxdim, *pydim, *pncomps, *pil set on success * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIgetdims * Remarks: none *---------------------------------------------------------------------------*/ int DFGRgetimdims(const char *filename, int32 *pxdim, int32 *pydim, int *pncomps, int *pil) { return DFGRIgetdims(filename, pxdim, pydim, pncomps, pil, IMAGE); } /*----------------------------------------------------------------------------- * Name: DFGRreqimil * Purpose: get next image with specified interlace * Inputs: il: interlace to get next image with * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIreqil * Remarks: none *---------------------------------------------------------------------------*/ int DFGRreqimil(int il) { return DFGRIreqil(il, IMAGE); } /*----------------------------------------------------------------------------- * Name: DFGRgetimage * Purpose: get image from next RIG * Inputs: filename: name of HDF file * image: pointer to space to return image * xdim, ydim: dimensions of space to return lut * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIgetimlut * Remarks: space is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ int DFGRgetimage(const char *filename, void *image, int32 xdim, int32 ydim) { int compressed, has_pal; uint16 compr_type; /* 0 == C */ return DFGRIgetimlut(filename, image, xdim, ydim, IMAGE, 0, &compressed, &compr_type, &has_pal); } /*----------------------------------------------------------------------------- * Name: DFGRsetcompress * Purpose: set compression scheme to use * Inputs: * scheme - compression scheme * cinfo - compression information structure * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int DFGRsetcompress(int32 scheme, comp_info *cinfo) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (scheme == COMP_NONE) { /* quick check for no compression */ Grcompr = 0; /* Set the compression scheme */ HGOTO_DONE(SUCCEED); } /* end if */ if (scheme < 0 || scheme > COMP_MAX_COMP || compress_map[scheme] == 0) HGOTO_ERROR(DFE_BADSCHEME, FAIL); /* map JPEG compression into correct type of JPEG compression */ if (scheme == COMP_JPEG) Grcompr = DFTAG_JPEG5; /* Set the compression scheme */ else /* otherwise, just use mapped tag */ Grcompr = (intn)compress_map[scheme]; Grcinfo = (*cinfo); /* Set the compression parameters */ done: return ret_value; } /* end DFGRsetcompress() */ /*----------------------------------------------------------------------------- * Name: DFGRsetlutdims * Purpose: set dimensions of lut to write next * Inputs: xdim, ydim: dimensions of lut * ncomps: no of components * il: interlace of lut * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetdims * Remarks: none *---------------------------------------------------------------------------*/ int DFGRsetlutdims(int32 xdim, int32 ydim, int ncomps, int il) { if (DFGRIsetil(il, LUT) < 0) return FAIL; return DFGRIsetdims(xdim, ydim, ncomps, LUT); } /*----------------------------------------------------------------------------- * Name: DFGRsetlut * Purpose: set lut for subsequent RIGs * Inputs: lut: lookup table to write * xdim, ydim: dimensions of array lut * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIaddimlut * Remarks: array lut is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ int DFGRsetlut(void *lut, int32 xdim, int32 ydim) { /* 0 == C, 0 == no newfile */ return DFGRIaddimlut((const char *)NULL, lut, xdim, ydim, LUT, 0, 0); } /*----------------------------------------------------------------------------- * Name: DFGRaddlut * Purpose: write lut to file, associate it with subsequent RIGs * Inputs: filename: name of HDF file * lut: lookup table to write * xdim, ydim: dimensions of array lut * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIaddimlut * Remarks: array lut is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ int DFGRaddlut(const char *filename, void *lut, int32 xdim, int32 ydim) { /* 0 == C, 0 == no new file */ return DFGRIaddimlut(filename, lut, xdim, ydim, LUT, 0, 0); } /*----------------------------------------------------------------------------- * Name: DFGRsetimdims * Purpose: set dimensions of image to write next * Inputs: xdim, ydim: dimensions of image * ncomps: no of components * il: interlace of image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIsetdims * Remarks: none *---------------------------------------------------------------------------*/ int DFGRsetimdims(int32 xdim, int32 ydim, int ncomps, int il) { if (DFGRIsetil(il, IMAGE) < 0) return FAIL; return DFGRIsetdims(xdim, ydim, ncomps, IMAGE); } /*----------------------------------------------------------------------------- * Name: DFGRaddimage * Purpose: Write out image * Inputs: filename: name of HDF file * image: image to write * xdim, ydim: dimensions of array image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIaddimlut * Remarks: array image is assumed to be xdim * ydim * ncomps bytes *---------------------------------------------------------------------------*/ int DFGRaddimage(const char *filename, void *image, int32 xdim, int32 ydim) { /* 0 == C, 0 == not new file */ return DFGRIaddimlut(filename, image, xdim, ydim, IMAGE, 0, 0); } int DFGRputimage(const char *filename, void *image, int32 xdim, int32 ydim) { /* 0 == C, 1 == new file */ return DFGRIaddimlut(filename, image, xdim, ydim, IMAGE, 0, 1); } /*----------------------------------------------------------------------------- * Name: DFGRreadref * Purpose: Set ref of rig to get next * Inputs: filename: file to which this applies * ref: reference number of next get * Returns: 0 on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFGRIopen, DFIfind, DFclose * Remarks: checks if rig with this ref exists *---------------------------------------------------------------------------*/ int DFGRreadref(const char *filename, uint16 ref) { intn ret_value = SUCCEED; int32 file_id = (-1); HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = DFGRIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (Hexist(file_id, DFTAG_RIG, ref) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); Grrefset = ref; ret_value = Hclose(file_id); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /*****************************************************************************/ /* This is the next lower layer - procedures to read in and write out a RIG. */ /*****************************************************************************/ /*----------------------------------------------------------------------------- * Name: DFGRgetrig * Purpose: Read a RIG into memory * Inputs: file_id: pointer to HDF file containing RIG * ref: reference number of RIG to get * rig: struct in which to place info obtained * Returns: 0 on success, -1 on failure with DFerror set * contents of RIG in the struct rig * Users: HDF programmers, utilities, DFGRIgetdims,DFGRIgetimlut, * other routines * Invokes: DFdiget, DFdinext, DFIcheck, DFgetelement * Remarks: incomplete - does not support DFTAG_MA etc. *---------------------------------------------------------------------------*/ static int DFGRgetrig(int32 file_id, uint16 ref, DFGRrig *rig) { uint16 elt_tag, elt_ref; uint8 ntstring[4]; int type; int32 GroupID; uint8 GRtbuf[64]; /* local buffer for reading RIG info */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id) || !ref) HGOTO_ERROR(DFE_ARGS, FAIL); /* read RIG into memory */ if ((GroupID = DFdiread(file_id, DFTAG_RIG, ref)) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); *rig = Grzrig; /* fill rig with zeroes */ while (!DFdiget(GroupID, &elt_tag, &elt_ref)) { /* get next tag/ref */ switch (elt_tag) { /* process tag/ref */ case DFTAG_CI: case DFTAG_RI: case DFTAG_LUT: type = (elt_tag == DFTAG_LUT) ? LUT : IMAGE; rig->data[type].tag = elt_tag; rig->data[type].ref = elt_ref; break; case DFTAG_ID: /* read description info */ case DFTAG_LD: type = (elt_tag == DFTAG_LD) ? LUT : IMAGE; if (Hgetelement(file_id, elt_tag, elt_ref, GRtbuf) != FAIL) { int16 int16var; uint8 *p; p = GRtbuf; INT32DECODE(p, rig->datadesc[type].xdim); INT32DECODE(p, rig->datadesc[type].ydim); UINT16DECODE(p, rig->datadesc[type].nt.tag); UINT16DECODE(p, rig->datadesc[type].nt.ref); INT16DECODE(p, int16var); rig->datadesc[type].ncomponents = (intn)int16var; INT16DECODE(p, int16var); rig->datadesc[type].interlace = (intn)int16var; UINT16DECODE(p, rig->datadesc[type].compr.tag); UINT16DECODE(p, rig->datadesc[type].compr.ref); } else { DFdifree(GroupID); HGOTO_ERROR(DFE_READERROR, FAIL); } if (rig->datadesc[type].nt.tag == 0) break; /* old RIGs */ /* read NT */ if (Hgetelement(file_id, rig->datadesc[type].nt.tag, rig->datadesc[type].nt.ref, ntstring) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_READERROR, FAIL); } if ((ntstring[2] != 8) || (ntstring[1] != DFNT_UCHAR)) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADCALL, FAIL); } break; default: /* ignore unknown tags */ break; } } done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRaddrig * Purpose: Write RIG struct out to HDF file * Inputs: file_id: HDF file pointer * ref: ref to write RIG with * rig: struct containing RIG info to write * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF programmers, utilities, DFGRIaddimlut, other routines * Invokes: DFIcheck, DFdistart, DFdiadd, DFdiend, DFputelement * Remarks: none *---------------------------------------------------------------------------*/ static int DFGRaddrig(int32 file_id, uint16 ref, DFGRrig *rig) { uint8 ntstring[4]; int32 lutsize; int32 GroupID; uint8 GRtbuf[64]; /* local buffer for reading RIG info */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id) || !ref) HGOTO_ERROR(DFE_ARGS, FAIL); if (Ref.nt <= 0) { /* if nt not previously written to file */ /* construct and write out NT */ ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = DFNT_UCHAR; /* type */ ntstring[2] = 8; /* width: RIG data is 8-bit chars */ ntstring[3] = DFNTC_BYTE; /* class: data are numeric values */ if (Hputelement(file_id, DFTAG_NT, ref, (uint8 *)ntstring, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); rig->datadesc[IMAGE].nt.tag = DFTAG_NT; rig->datadesc[IMAGE].nt.ref = ref; Ref.nt = (intn)ref; } if (Ref.dims[IMAGE] == 0) { uint8 *p; p = GRtbuf; INT32ENCODE(p, rig->datadesc[IMAGE].xdim); INT32ENCODE(p, rig->datadesc[IMAGE].ydim); UINT16ENCODE(p, rig->datadesc[IMAGE].nt.tag); UINT16ENCODE(p, rig->datadesc[IMAGE].nt.ref); INT16ENCODE(p, rig->datadesc[IMAGE].ncomponents); INT16ENCODE(p, rig->datadesc[IMAGE].interlace); UINT16ENCODE(p, rig->datadesc[IMAGE].compr.tag); UINT16ENCODE(p, rig->datadesc[IMAGE].compr.ref); if (Hputelement(file_id, DFTAG_ID, ref, GRtbuf, (int32)(p - GRtbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.dims[IMAGE] = (int16)ref; } if (!Ref.lut) { /* associated lut not written to this file */ if (Grlutdata == NULL) /* no lut associated */ HGOTO_ERROR(DFE_ARGS, FAIL); lutsize = Grwrite.datadesc[LUT].xdim * Grwrite.datadesc[LUT].ydim * Grwrite.datadesc[LUT].ncomponents; if (Hputelement(file_id, DFTAG_LUT, ref, Grlutdata, (int32)lutsize) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); rig->data[LUT].tag = DFTAG_LUT; rig->data[LUT].ref = ref; Ref.lut = (intn)ref; } if (Ref.dims[LUT] == 0) { uint8 *p; p = GRtbuf; INT32ENCODE(p, rig->datadesc[LUT].xdim); INT32ENCODE(p, rig->datadesc[LUT].ydim); UINT16ENCODE(p, rig->datadesc[LUT].nt.tag); UINT16ENCODE(p, rig->datadesc[LUT].nt.ref); INT16ENCODE(p, rig->datadesc[LUT].ncomponents); INT16ENCODE(p, rig->datadesc[LUT].interlace); UINT16ENCODE(p, rig->datadesc[LUT].compr.tag); UINT16ENCODE(p, rig->datadesc[LUT].compr.ref); if (Hputelement(file_id, DFTAG_LD, ref, GRtbuf, (int32)(p - GRtbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.dims[LUT] = (int16)ref; } /* prepare to start writing rig */ /* ### NOTE: the parameter to this call may go away */ if ((GroupID = DFdisetup(10)) == FAIL) HGOTO_ERROR(DFE_GROUPSETUP, FAIL); /* max 10 tag/refs in set */ /* add tag/ref to RIG - image description, image and lookup table */ if (DFdiput(GroupID, DFTAG_ID, (uint16)Ref.dims[IMAGE]) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if (DFdiput(GroupID, rig->data[IMAGE].tag, rig->data[IMAGE].ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if ((Ref.dims[LUT] > 0) && (DFdiput(GroupID, DFTAG_LD, (uint16)Ref.dims[LUT]) == FAIL)) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if ((Ref.lut > 0) && (DFdiput(GroupID, rig->data[LUT].tag, rig->data[LUT].ref) == FAIL)) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* write out RIG */ if (DFdiwrite(file_id, GroupID, DFTAG_RIG, ref) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /*****************************************************************************/ /*----------------------- Internal routines ---------------------------------*/ /*****************************************************************************/ /*----------------------------------------------------------------------------- * Name: DFGRIopen * Purpose: open or reopen a file * Inputs: filename: name of file to open * acc_mode : access mode * Returns: file ID on success, FAIL on failure with DFerror set * Users: HDF systems programmers, all the RIG routines * Invokes: DFopen * Remarks: This is a hook for someday providing more efficient ways to * reopen a file, to avoid re-reading all the headers *---------------------------------------------------------------------------*/ int32 DFGRIopen(const char *filename, int acc_mode) { int32 file_id = (-1); int32 ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* Check if filename buffer has been allocated */ if (Grlastfile == NULL) { if ((Grlastfile = (char *)malloc(DF_MAXFNLEN + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); *Grlastfile = '\0'; /* initialize to a 0-length string */ } /* use reopen if same file as last time - more efficient */ if (strncmp(Grlastfile, filename, DF_MAXFNLEN) || (acc_mode == DFACC_CREATE)) { /* treat create as different file */ Grrefset = 0; /* no ref to get set for this file */ Grnewdata = 0; if (Ref.lut > 0) Ref.lut = 0; if (Grlutdata == NULL) Ref.lut = (-1); /* no LUT if not a "set" call */ if (Ref.dims[IMAGE] > 0) Ref.dims[IMAGE] = 0; if (Ref.dims[LUT] > 0) Ref.dims[LUT] = 0; if (Ref.nt > 0) Ref.nt = 0; Grread = Grzrig; /* no rigs read yet */ } /* remember filename, so reopen may be used next time if same file */ strncpy(Grlastfile, filename, DF_MAXFNLEN); ret_value = file_id; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIriginfo * Purpose: Get information about next RIG in file * Inputs: file_id: pointer to DF file * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF systems programmers * Invokes: DFIfind, DFgetelement, DFGRgetrig * Remarks: if Grrefset set, gets image with that ref, if any *---------------------------------------------------------------------------*/ static int DFGRIriginfo(int32 file_id) { int i, isfirst; uint16 newref = 0, newtag = 0, gettag, getref, ref = 0, dummy = 0; struct { uint16 xdim; uint16 ydim; } r8dims; char *p; int32 aid; intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); isfirst = (Grrefset != 0) || (Grread.data[IMAGE].ref == 0); getref = Grrefset; /* ref if specified, else 0 */ Grrefset = 0; /* no longer need to remember specified ref */ gettag = DFTAG_RIG; for (i = 0; i < 4; i++) { /* repeat for RIG, RI8, CI8, II8 */ if (isfirst) { aid = Hstartread(file_id, gettag, getref); } else { aid = Hstartread(file_id, gettag, Grread.data[IMAGE].ref); if ((aid != FAIL) && Hnextread(aid, gettag, getref, DF_CURRENT) == FAIL) { Hendaccess(aid); aid = FAIL; } } if (aid == FAIL) { /* not found */ if (gettag == DFTAG_RIG) { /* were looking for RIGs */ if ((Grread.data[IMAGE].tag == DFTAG_RI) /* file has RIGs */ || (Grread.data[IMAGE].tag == DFTAG_CI)) HGOTO_DONE(FAIL); /* no more to return */ gettag = DFTAG_RI8; /* if no RIGs in file, look for RI8s */ } else if ((gettag == DFTAG_II8) && (!newref)) /* no RI8/CI8/II8 */ HGOTO_DONE(FAIL); continue; /* continue checking */ } /* found */ HQuerytagref(aid, &dummy, &ref); Hendaccess(aid); if (!newref || (ref < newref)) { /* is it next one? */ newref = ref; /* remember tag, ref */ newtag = gettag; } if (gettag == DFTAG_RI8) gettag = DFTAG_CI8; /* check next */ else if (gettag == DFTAG_CI8) gettag = DFTAG_II8; else break; /* all checked, quit */ } if (newtag == DFTAG_RIG) { if (DFGRgetrig(file_id, newref, &Grread) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { uint16 uint16var; Grread.data[IMAGE].ref = newref; Grread.data[IMAGE].tag = newtag; if (newtag == DFTAG_CI8) Grread.datadesc[IMAGE].compr.tag = DFTAG_RLE; else if (newtag == DFTAG_II8) Grread.datadesc[IMAGE].compr.tag = DFTAG_IMC; if (Hgetelement(file_id, DFTAG_ID8, newref, (uint8 *)&r8dims) == FAIL) HGOTO_ERROR(DFE_GETELEM, FAIL); p = (char *)&r8dims; UINT16DECODE(p, uint16var); Grread.datadesc[IMAGE].xdim = (int32)uint16var; UINT16DECODE(p, uint16var); Grread.datadesc[IMAGE].ydim = (int32)uint16var; aid = Hstartread(file_id, DFTAG_IP8, newref); if (aid != FAIL) { Grread.data[LUT].tag = DFTAG_IP8; Grread.data[LUT].ref = newref; Hendaccess(aid); } HEclear(); /* reset it, just in case! */ } /* if LUT dimensions not set, set default dimensions */ if (Grread.data[LUT].tag && Grread.datadesc[LUT].xdim == 0) { Grread.datadesc[LUT].xdim = 256; Grread.datadesc[LUT].ydim = 1; Grread.datadesc[LUT].ncomponents = 3; } Grlastref = newref; /* remember ref read */ done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIgetdims * Purpose: get dimensions of next image/lut from RIG * Inputs: filename: name of HDF file * pxdim, pxdim: pointer to locations for returning x,y dimensions * pncomps: location for returning no of components * pil: location for returning interlace of image/lut in file * type: LUT to get lut dims, IMAGE to get image dims * Returns: 0 on success, -1 on failure with DFerror set * *pxdim, *pydim are set to dimensions of the next image on success * *pncomps, *pil set on success * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFGRIopen, DFclose, DFGRIriginfo, DFIerr * Remarks: none *---------------------------------------------------------------------------*/ int DFGRIgetdims(const char *filename, int32 *pxdim, int32 *pydim, int *pncomps, int *pil, int type) { intn ret_value = SUCCEED; int32 file_id = (-1); HEclear(); if ((file_id = DFGRIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (type == IMAGE) { /* getimdims sequences, getlutdims does not */ /* reads next RIG or RI8 from file */ if (DFGRIriginfo(file_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); Grnewdata = 1; } if (type == LUT && Grread.data[LUT].ref == 0) HGOTO_ERROR(DFE_NOMATCH, FAIL); if (pxdim) *pxdim = Grread.datadesc[type].xdim; if (pydim) *pydim = Grread.datadesc[type].ydim; if (pncomps) *pncomps = Grread.datadesc[type].ncomponents; if (pil) *pil = Grread.datadesc[type].interlace; Hclose(file_id); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIreqil * Purpose: set interlace with which to get subsequent images/luts * Inputs: il: interlace to get image/lut with * type: LUT for luts, IMAGE for images * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF users, utilities, other routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int DFGRIreqil(intn il, intn type) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); Grreqil[type] = il; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIgetimlut * Purpose: get next image/lut from a RIG * Inputs: filename: name of HDF file * imlut: space to read image/lut into * xdim, ydim: dimensions of space allocated by user for image/lut * type: LUT for luts, IMAGE for images * isfortran: 0 if called from C, 1 if called from Fortran * Returns: 0 on success, -1 on failure with DFerror set * image/lut in imlut * Users: HDF HLL users, utilities, other routines * Invokes: DFGRIopen, DFGRIriginfo, DFIerr, DFclose, DFgetelement, DFgetcomp * Remarks: Will also get RI8s and CI8s if no RIGs in file * Normally, DFGRgetimdims is called first and it moves to next image * But if that is not called, DFGRgetimlut will itself move to next * image (but not next lut!). * Automatically decompresses images/luts *---------------------------------------------------------------------------*/ int DFGRIgetimlut(const char *filename, void *imlut, int32 xdim, int32 ydim, int type, int isfortran, int *compressed, uint16 *compr_type, int *has_pal) { int32 file_id = (-1); int32 currpos[3], currmax[3], destsize[3], bufsize, i, j; uint8 *buf, *destp; int32 aid; intn ret_value = SUCCEED; (void)isfortran; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = DFGRIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if ((type == IMAGE) && (Grnewdata != 1)) { /* if Grread not fresh */ if (DFGRIriginfo(file_id) == FAIL) /* reads next RIG or RI8 from file */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (Grnewdata == 0) HGOTO_ERROR(DFE_BADCALL, FAIL); Grnewdata = 0; /* read new RIG next time */ if ((xdim != Grread.datadesc[type].xdim) || (ydim != Grread.datadesc[type].ydim)) HGOTO_ERROR(DFE_ARGS, FAIL); /* read image/lut */ if (Grread.datadesc[type].compr.tag) { /* compressed image/lut */ *compressed = 1; *compr_type = Grread.datadesc[type].compr.tag; if ((Grreqil[type] >= 0) && (Grreqil[type] != Grread.datadesc[type].interlace)) HGOTO_ERROR(DFE_UNSUPPORTED, FAIL); if (DFgetcomp(file_id, Grread.data[type].tag, Grread.data[type].ref, (uint8 *)imlut, Grread.datadesc[type].xdim, Grread.datadesc[type].ydim, Grread.datadesc[type].compr.tag) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { /* non-compressed raster image/lut */ *compressed = 0; if (Grreqil[type] >= 0) { if (Grreqil[type] >= Grread.datadesc[type].ncomponents) { HGOTO_ERROR(DFE_ARGS, FAIL); } else if (Grreqil[type] != Grread.datadesc[type].interlace) { aid = Hstartread(file_id, Grread.data[type].tag, Grread.data[type].ref); if (aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); /* current position in data */ currpos[0] = currpos[1] = currpos[2] = 0; currmax[0] = Grread.datadesc[type].ncomponents; currmax[1] = Grread.datadesc[type].xdim; currmax[2] = Grread.datadesc[type].ydim; /* compute size of each dim of dest array */ destsize[0] = destsize[1] = 1; destsize[2] = currmax[1]; /* xdim is more sig than ydim */ if (Grreqil[type] == 0) { destsize[1] *= currmax[0]; destsize[2] *= currmax[0]; } else if (Grreqil[type] == 1) { destsize[0] *= currmax[1]; destsize[2] *= currmax[0]; } else if (Grreqil[type] == 2) { destsize[0] *= currmax[1] * currmax[2]; } bufsize = Grread.datadesc[type].ydim * Grread.datadesc[type].ncomponents; buf = (uint8 *)malloc((uint32)bufsize); if (buf == NULL) { Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read byte by byte and copy */ for (i = 0; i < Grread.datadesc[type].xdim; i++) { if (Hread(aid, bufsize, buf) == FAIL) { Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } for (j = 0; j < bufsize; j++) { destp = (uint8 *)imlut + destsize[0] * currpos[0] + destsize[1] * currpos[1] + destsize[2] * currpos[2]; *destp = buf[j]; if (Grread.datadesc[type].interlace == 0) { if (++currpos[0] == currmax[0]) { currpos[0] = 0; if (++currpos[1] == currmax[1]) { currpos[1] = 0; if (++currpos[2] == currmax[2]) break; } } } else if (++currpos[1] == currmax[1]) { currpos[1] = 0; if (Grread.datadesc[type].interlace == 1) { if (++currpos[0] == currmax[0]) { currpos[0] = 0; if (++currpos[2] == currmax[2]) break; } } else { if (++currpos[2] == currmax[2]) { currpos[2] = 0; if (++currpos[0] == currmax[0]) break; } } } } } Hendaccess(aid); free(buf); HGOTO_DONE(Hclose(file_id)); } } if (Hgetelement(file_id, Grread.data[type].tag, Grread.data[type].ref, (uint8 *)imlut) == FAIL) { *has_pal = 0; HGOTO_ERROR(DFE_GETELEM, FAIL); } else *has_pal = 1; } Hclose(file_id); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIsetdims * Purpose: set dimensions of image/lut * Inputs: xdim, ydim: dimensions of lut * ncomps: no of components * il: interlace of lut * type: LUT if lut, IMAGE if image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int DFGRIsetdims(int32 xdim, int32 ydim, intn ncomps, int type) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (ncomps == FAIL || (xdim <= 0) || (ydim <= 0)) HGOTO_ERROR(DFE_ARGS, FAIL); Grwrite.datadesc[type].xdim = xdim; Grwrite.datadesc[type].ydim = ydim; Grwrite.datadesc[type].ncomponents = ncomps; Ref.dims[type] = 0; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIsetil * Purpose: set interlace of image/lut * Inputs: il: interlace of lut * type: LUT if lut, IMAGE if image * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int DFGRIsetil(int il, int type) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (il == FAIL) HRETURN_ERROR(DFE_ARGS, FAIL); Grwrite.datadesc[type].interlace = il; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIrestart * Purpose: restart file * Inputs: * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int DFGRIrestart(void) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Grlastfile != NULL) *Grlastfile = '\0'; /* zero out string instead of NULL'ing pointer */ Grrefset = 0; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRIaddimlut * Purpose: Internal routine to write RIG to file * Inputs: filename: name of HDF file * imlut: image/lut to be written to file * xdim, ydim: dimensions of image/lut * type: LUT if lut, IMAGE if image * isfortran: 0 if called from C, 1 if called from Fortran * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF systems programmers, DFGRaddimage, DFGRaddlut, DFGRsetlut * Invokes: DFGRIopen, DFclose, DFputelement, DFdup, DFGRaddrig, DFputcomp, * DFIerr * Remarks: Creates both RIG and RI8/CI8 tags, to accommodate older programs * LUT will be associated with image if set previously *---------------------------------------------------------------------------*/ int DFGRIaddimlut(const char *filename, const void *imlut, int32 xdim, int32 ydim, int type, int isfortran, int newfile) { int32 file_id = (-1); uint16 wtag, wref; /* tag of image/lut being written */ uint16 rigref; /* ref # for the RIG */ uint8 *newlut = NULL; int32 lutsize = 0; int is8bit; struct { uint16 xdim; uint16 ydim; } r8dims; uint8 *p; intn ret_value = SUCCEED; (void)isfortran; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFGRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check if filename buffer has been allocated */ if (Grlastfile == NULL) { Grlastfile = (char *)malloc((DF_MAXFNLEN + 1) * sizeof(char)); if (Grlastfile == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); *Grlastfile = '\0'; /* initialize to a 0-length string */ } if (0 != strcmp(Grlastfile, filename)) { /* if new file, reset dims */ Grwrite.datadesc[type].xdim = xdim; Grwrite.datadesc[type].ydim = ydim; Ref.dims[type] = 0; /* indicate set & not written */ } if ((Ref.dims[type] == 0 && (xdim != Grwrite.datadesc[type].xdim || ydim != Grwrite.datadesc[type].ydim)) || !imlut) HGOTO_ERROR(DFE_ARGS, FAIL); /* if dims not set, set dimensions */ if (Ref.dims[type] == FAIL) if (DFGRIsetdims(xdim, ydim, 1, type) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* default: ncomps=1, il=0 */ if ((type == LUT) && (filename == NULL)) { /* set call */ if (Grlutdata) { free(Grlutdata); Grlutdata = NULL; } Ref.lut = -1; if (imlut == NULL) HGOTO_DONE(SUCCEED); lutsize = Grwrite.datadesc[LUT].xdim * Grwrite.datadesc[LUT].ydim * Grwrite.datadesc[LUT].ncomponents; if ((Grlutdata = (uint8 *)malloc((uint32)lutsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); memcpy(Grlutdata, imlut, (uint32)lutsize); Ref.lut = 0; HGOTO_DONE(SUCCEED); } if ((file_id = DFGRIopen(filename, newfile ? DFACC_CREATE : DFACC_RDWR)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* make 8-bit compatibility only for older 8-bit stuff, not JPEG */ is8bit = ((Grwrite.datadesc[IMAGE].ncomponents == 1) && (Grcompr != DFTAG_GREYJPEG5 && Grcompr != DFTAG_JPEG5)); wtag = (uint16)((type == LUT) ? DFTAG_LUT : (Grcompr ? DFTAG_CI : DFTAG_RI)); Grwrite.data[type].tag = wtag; if ((wref = Htagnewref(file_id, wtag)) == 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* write out image/lut */ if ((type == IMAGE) && Grcompr) { lutsize = Grwrite.datadesc[LUT].xdim * Grwrite.datadesc[LUT].ydim * Grwrite.datadesc[LUT].ncomponents; if (Grcompr == DFTAG_IMC) { if (Grlutdata == NULL) HGOTO_ERROR(DFE_BADCALL, FAIL); if ((newlut = (uint8 *)malloc((uint32)lutsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (DFputcomp(file_id, wtag, wref, imlut, xdim, ydim, (uint8 *)Grlutdata, (uint8 *)newlut, (int16)Grcompr, &Grcinfo) == FAIL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } else { /* image need not be compressed */ if (Hputelement(file_id, (uint16)wtag, (uint16)wref, imlut, xdim * ydim * Grwrite.datadesc[type].ncomponents) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); } Grwrite.data[type].ref = wref; Grwrite.aspectratio = (float32)1.0; /* Write out Raster-8 tags for those who want it */ if (is8bit) { wtag = (uint16)((type == LUT) ? DFTAG_IP8 : Grcompr ? ((Grcompr == DFTAG_RLE) ? DFTAG_CI8 : DFTAG_II8) : DFTAG_RI8); if (Hdupdd(file_id, wtag, wref, Grwrite.data[type].tag, wref) == FAIL) HGOTO_ERROR(DFE_DUPDD, FAIL); } /* end if */ if (type == IMAGE) Grwrite.datadesc[IMAGE].compr.tag = (uint16)Grcompr; if (Grcompr == DFTAG_IMC) { if (Hputelement(file_id, DFTAG_LUT, wref, newlut, lutsize) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.lut = (intn)wref; } if ((rigref = Htagnewref(file_id, DFTAG_RIG)) == 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (DFGRaddrig(file_id, rigref, &Grwrite) == FAIL) /* writes ID, NT */ HGOTO_ERROR(DFE_INTERNAL, FAIL); if (is8bit) { /* put in Raster-8 stuff also, for those who want it */ if ((Ref.lut >= 0) && Hdupdd(file_id, DFTAG_IP8, wref, DFTAG_LUT, wref) == FAIL) HGOTO_ERROR(DFE_DUPDD, FAIL); p = (uint8 *)&r8dims.xdim; UINT16ENCODE(p, Grwrite.datadesc[IMAGE].xdim); UINT16ENCODE(p, Grwrite.datadesc[IMAGE].ydim); if (Hputelement(file_id, DFTAG_ID8, wref, (uint8 *)&r8dims, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); } if (Grcompr == DFTAG_IMC) { Ref.lut = 0; free(newlut); newlut = NULL; } Grlastref = rigref; /* remember the last ref */ wref = 0; /* don't know ref to write next */ done: if (file_id != (-1)) Hclose(file_id); return ret_value; } /*----------------------------------------------------------------------------- * Name: DFGRlastref * Purpose: Return last ref written or read * Inputs: none * Globals: Grlastref * Returns: ref on success * Users: HDF users, utilities, other routines * Invokes: none * Method: return Grlastref * Remarks: none *---------------------------------------------------------------------------*/ uint16 DFGRIlastref(void) { return (uint16)Grlastref; } /*-------------------------------------------------------------------------- NAME DFGRIstart PURPOSE DFGR-level initialization routine USAGE intn DFGRIstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the shut-down routine (DFGRPshutdown) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFGRIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&DFGRPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end DFGRIstart() */ /*-------------------------------------------------------------------------- NAME DFGRPshutdown PURPOSE Terminate various static buffers. USAGE intn DFGRshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the DFGR routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFGRPshutdown(void) { free(Grlastfile); Grlastfile = NULL; return SUCCEED; } /* end DFGRPshutdown() */ hdf4-hdf4.3.1/hdf/src/dfgr_priv.h000066400000000000000000000056051503061704500165200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfgr_priv.h * Purpose: header file for the Raster Image set * Invokes: df_priv.h * Contents: * Structure definitions: DFGRdr, DFGRrig *---------------------------------------------------------------------------*/ #ifndef H4_DFGR_PRIV_H #define H4_DFGR_PRIV_H #include "hdf_priv.h" /* description record: used to describe image data, palette data etc. */ typedef struct { intn ncomponents; /* number of components */ intn interlace; /* data ordering: chunky / planar etc */ int32 xdim; /* X- dimension of data */ int32 ydim; /* Y- dimensionsof data */ DFdi nt; /* number type of data */ DFdi compr; /* compression */ /* ### Note: compression is currently uniquely described with a tag. No data is attached to this tag/ref. But this capability is provided for future expansion, when this tag/ref might point to some data needed for decompression, such as the actual encodings */ } DFGRdr; /* structure to hold RIG info */ typedef struct { char *cf; /* color format */ int32 xpos; /* X position of image on screen */ int32 ypos; /* Y position of image on screen */ float32 aspectratio; /* ratio of pixel height to width */ float32 ccngamma; /* gamma color correction parameter */ float32 ccnred[3]; /* red color correction parameter */ float32 ccngrren[3]; /* green color correction parameter */ float32 ccnblue[3]; /* blue color correction parameter */ float32 ccnwhite[3]; /* white color correction parameter */ DFdi data[3]; /* image/lut/mattechannel */ DFGRdr datadesc[3]; /* description of image/lut/mattechannel */ } DFGRrig; #ifdef __cplusplus extern "C" { #endif /* Library-developer functions */ HDFLIBAPI int32 DFGRIopen(const char *filename, int acc_mode); #ifdef __cplusplus } #endif #endif /* H4_DFGR_PRIV_H */ hdf4-hdf4.3.1/hdf/src/dfgroup.c000066400000000000000000000250411503061704500161730ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfgroup.c * Purpose: Low level functions for implementing groups * Invokes: df.c df.h * Contents: * DFdiread : read in the data identifier list from the group * DFdiget : get next data identifier from list * DFdisetup : get ready to store a list of data identifiers to write out * DFdiput : add a data identifier to the list to be written out * DFdiwrite : write out the list of data identifiers * Remarks: A group is a way of associating data elements with each other. * It is a tag whose data is a list of tag/refs * Each tag/ref combination is called a data identifier (DI). *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hfile_priv.h" typedef struct DIlist_struct { uint8 *DIlist; intn num; intn current; } DIlist, *DIlist_ptr; static DIlist_ptr Group_list[MAX_GROUPS] = {NULL}; #define GSLOT2ID(s) ((((uint32)GROUPTYPE & 0xffff) << 16) | ((s) & 0xffff)) #define VALIDGID(i) (((((uint32)(i) >> 16) & 0xffff) == GROUPTYPE) && (((uint32)(i) & 0xffff) < MAX_GROUPS)) #define GID2REC(i) ((VALIDGID(i) ? (Group_list[(uint32)(i) & 0xffff]) : NULL)) /*----------------------------------------------------------------------------- * Name: setgroupREC * Purpose: Add a group list into the internal structure and return an ID * Inputs: list_rec: list to remember * Returns: FAIL on failure else a group ID to the list * Users: other group routines * Invokes: * Remarks: Allocates internal storage if necessary *---------------------------------------------------------------------------*/ static int32 setgroupREC(DIlist_ptr list_rec) { uintn i; for (i = 0; i < MAX_GROUPS; i++) if (Group_list[i] == NULL) { Group_list[i] = list_rec; return (int32)GSLOT2ID(i); } HRETURN_ERROR(DFE_INTERNAL, FAIL); } /* setgroupREC */ /*----------------------------------------------------------------------------- * Name: DFdiread * Purpose: Read a list of DIs into memory * Inputs: file_id: HDF file pointer * tag, ref: id of group which is to be read in * Returns: FAIL on failure else a group ID to the list * Users: HDF systems programmers, DF8getrig, other routines * Invokes: HDvalidfid, DFIfind, DFgetelement * Remarks: assumes tag is a group *---------------------------------------------------------------------------*/ int32 DFdiread(int32 file_id, uint16 tag, uint16 ref) { DIlist_ptr new_list; int32 length; HEclear(); if (!HDvalidfid(file_id)) HRETURN_ERROR(DFE_ARGS, FAIL); /* Find the group. */ length = Hlength(file_id, tag, ref); if (length == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* allocate a new structure to hold the group */ new_list = (DIlist_ptr)malloc((uint32)sizeof(DIlist)); if (!new_list) HRETURN_ERROR(DFE_NOSPACE, FAIL); new_list->DIlist = (uint8 *)malloc((uint32)length); if (!new_list->DIlist) { free(new_list); HRETURN_ERROR(DFE_NOSPACE, FAIL); } new_list->num = (intn)(length / 4); new_list->current = 0; /* no DIs returned so far */ /* read in group */ if (Hgetelement(file_id, tag, ref, (uint8 *)new_list->DIlist) < 0) { free(new_list->DIlist); free(new_list); HRETURN_ERROR(DFE_READERROR, FAIL); } return (int32)setgroupREC(new_list); } /*----------------------------------------------------------------------------- * Name: DFdiget * Purpose: return next DI from the list of DIs in a group * Inputs: list: handle to group (which is list of DIs) * Outputs: ptag: pointer to tag part of DI to be returned * pref: pointer to ref part of DI to be returned * Returns: 0 on success, -1 on failure with error set * Users: HDF systems programmers, DF8getrig, other routines * Invokes: none * Remarks: frees Dilist space when all DIs returned *---------------------------------------------------------------------------*/ intn DFdiget(int32 list, uint16 *ptag, uint16 *pref) { uint8 *p; DIlist_ptr list_rec; list_rec = GID2REC(list); if (!list_rec) HRETURN_ERROR(DFE_ARGS, FAIL); if (list_rec->current >= list_rec->num) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* compute address of Ndi'th di */ p = (uint8 *)list_rec->DIlist + 4 * list_rec->current++; UINT16DECODE(p, *ptag); UINT16DECODE(p, *pref); if (list_rec->current == list_rec->num) { free(list_rec->DIlist); /*if all returned, free storage */ free(list_rec); Group_list[list & 0xffff] = NULL; /* YUCK! BUG! */ } return SUCCEED; } /*----------------------------------------------------------------------------- * Name: DFdinobj * Purpose: return number of tag/refs in the group * Inputs: list: handle to group (which is list of DIs) * Returns: number of tag/refs in the group on success, * -1 on failure with error set * Users: HDF systems programmers, hdp utility * Invokes: none * Remarks: nuttin' *---------------------------------------------------------------------------*/ intn DFdinobj(int32 list) { DIlist_ptr list_rec; list_rec = GID2REC(list); if (!list_rec) HRETURN_ERROR(DFE_ARGS, FAIL); return list_rec->num; } /* DFdinobj() */ /*----------------------------------------------------------------------------- * Name: DFdisetup * Purpose: setup space for storing a list of DIs to be written out * Inputs: maxsize: maximum number of DIs expected in the list * Returns: FAIL on failure with error set * else a group ID * Users: HDF systems programmers, DF8putrig, other routines * Invokes: none * Remarks: This call should go away sometime. Need better way to allocate * space, possibly just use a big block of static space *---------------------------------------------------------------------------*/ int32 DFdisetup(int maxsize) { DIlist_ptr new_list; new_list = (DIlist_ptr)malloc((uint32)sizeof(DIlist)); if (!new_list) HRETURN_ERROR(DFE_NOSPACE, FAIL); new_list->DIlist = (uint8 *)malloc((uint32)(maxsize * 4)); if (!new_list->DIlist) { free(new_list); HRETURN_ERROR(DFE_NOSPACE, FAIL); } new_list->num = maxsize; new_list->current = 0; return setgroupREC(new_list); } /*----------------------------------------------------------------------------- * Name: DFdiput * Purpose: add a DI to the list to be written out * Inputs: tag, ref: DI to add * Returns: 0 on success, -1 on failure with error set * Users: HDF systems programmers, DF8putrig, other routines * Invokes: none * Remarks: arg is tag/ref rather than DI for convenience *---------------------------------------------------------------------------*/ intn DFdiput(int32 list, uint16 tag, uint16 ref) { uint8 *p; DIlist_ptr list_rec; list_rec = GID2REC(list); if (!list_rec) HRETURN_ERROR(DFE_ARGS, FAIL); if (list_rec->current >= list_rec->num) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* compute address of Ndi'th di to put tag/ref in */ p = (uint8 *)list_rec->DIlist + 4 * list_rec->current++; UINT16ENCODE(p, tag); UINT16ENCODE(p, ref); return SUCCEED; } /*----------------------------------------------------------------------------- * Name: DFdiwrite * Purpose: Write DI list out to HDF file * Inputs: file_id: HDF file pointer * tag, ref: tag and ref of group whose contents is the list * Returns: 0 on success, -1 on failure with error set * Users: HDF systems programmers, DF8putrig, other routines * Invokes: none * Remarks: frees storage for Dilist *---------------------------------------------------------------------------*/ intn DFdiwrite(int32 file_id, int32 list, uint16 tag, uint16 ref) { int32 ret; /* return value */ DIlist_ptr list_rec; if (!HDvalidfid(file_id)) HRETURN_ERROR(DFE_ARGS, FAIL); list_rec = GID2REC(list); if (!list_rec) HRETURN_ERROR(DFE_ARGS, FAIL); ret = Hputelement(file_id, tag, ref, list_rec->DIlist, (int32)list_rec->current * 4); free(list_rec->DIlist); free(list_rec); Group_list[list & 0xffff] = NULL; /* YUCK! BUG! */ return (intn)ret; } /*----------------------------------------------------------------------------- * Name: DFdifree * Purpose: Cleanup DI group * Inputs: groupID * Returns: none * Users: callers of DFdiget() when it is NOT called for every pair in the group. * Invokes: none * Remarks: Notes from Fortner Build Notes: * While working on a group, its info is stored in RAM, and the pointer to * that info is kept in a global array called Group_List. the size of Group_List * is fixed, and contains MAX_GROUPS pointers. When DFdiget() has returned * the last tag-ref pair from a given group's info, that info is freed, and * the corresponding slot in the Group_List array is available for reuse. * * If DFdiget() is NOT called for every pair in the group, the group info is * never freed, except by the use of this routine. So when a loop based on * DFdiget() exits early, it should first call freeDIGroup() to recover the * group slot for future use. * * The typical example seems to be an error occurring within the DFdiget() * loop or finding an element while doing a search. * *---------------------------------------------------------------------------*/ void DFdifree(int32 groupID) { DIlist_ptr list_rec; list_rec = GID2REC(groupID); if (list_rec == NULL) return; free(list_rec->DIlist); free(list_rec); Group_list[groupID & 0xffff] = NULL; } hdf4-hdf4.3.1/hdf/src/dfimcomp.c000066400000000000000000001154041503061704500163260ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************************/ /* Module Name : imcomp */ /* Exports : DFCimcomp(), DFCunimcomp() */ /* Purpose : Compresses color images */ /* Author : Eng-Kiat Koh */ /* Date : June 30th, 1988 */ /* Functions : DFCimcomp(), compress(), init_global(), cnt_color() */ /* set_palette(), fillin_color(), map(), nearest_color() */ /* DFCunimcomp(), sqr() */ /************************************************************************/ #include "hdf_priv.h" #define PALSIZE 256 #define BIT8 0 #define BIT24 1 #define MAXCOLOR 32768 #ifndef NULL #define NULL 0 #endif #define RED 0 #define GREEN 1 #define BLUE 2 #define EPSILON 0.5 #define LO 1 #define HI 0 struct rgb { uint8 c[3]; }; struct box { float32 bnd[3][2]; int *pts; int nmbr_pts; int nmbr_distinct; struct box *left; struct box *right; }; static uint8 *new_pal = NULL; /* pointer to new palette */ static int *hist = NULL; /* histogram for distinct colors */ static struct box *frontier = NULL; /* pointer to the list of boxes */ static struct rgb *distinct_pt = NULL; /* contains all distinct rgb points */ static struct rgb *color_pt = NULL; /* contains the hi-lo colors for each block */ static uint8 *image = NULL; /* contains the compressed image */ static int *trans = NULL; /* color translation table */ static void compress(unsigned char raster[], int block); static void init_global(int32 xdim, int32 ydim, void *out, void *out_pal); static int cnt_color(int blocks); static void set_palette(int blocks); static void fillin_color(int blocks); static int indx(unsigned char r, unsigned char g, unsigned char b); static void map(int blocks); static int nearest_color(uint8 r, uint8 g, uint8 b); static uint32 sqr(int16 x); static void sel_palette(int blocks, int distinct, struct rgb *my_color_pt); static void init(int blocks, int distinct, struct rgb *my_color_pt); static void sort(int l, int r, int dim, int rank[]); static int partition(int l, int r, int dim, int rank[]); static struct box *find_box(void); static void split_box(struct box *ptr); static void assign_color(void); static int select_dim(struct box *ptr); static float find_med(struct box *ptr, int dim); static void classify(struct box *ptr, struct box *child); static int next_pt(int dim, int i, int rank[], int distinct); /************************************************************************/ /* Function: DFCIimcomp */ /* Purpose : Performs Imcomp Compression */ /* Parameters : */ /* xdim, ydim - dimensions of image */ /* IT IS ASSUMED THAT THE DIMENSIONS ARE A MULTIPLE OF 4 */ /* in, out - input image array and output image buffer size of in */ /* is xdim*ydim bytes for 8 bit per pixel mode. It is 3 */ /* times that for 24 bits per pixel mode. The output */ /* buffer is always (xdim*ydim)/4. */ /* in_pal - input palette. Consist of rgb triples unlike seq-type */ /* palette. This is a NULL pointer if operating at the */ /* 24 bit per pixel mode. */ /* out_pal - output palette. Consist of PALSIZE color entries. */ /* each entry is an rgb triple. */ /* mode - Either BIT8 or BIT24 */ /* Returns : none */ /* Called by : External routines */ /* Calls : init_global(), compress(), cnt_color(), set_palette(), */ /* sel_palette(), map() */ /************************************************************************/ void DFCIimcomp(int32 xdim, int32 ydim, const uint8 *in, uint8 out[], uint8 in_pal[], uint8 out_pal[], int mode) { unsigned char raster[48]; int blocks, nmbr; int32 i, j, k, l, x, y; init_global(xdim, ydim, (void *)out, (void *)out_pal); /* compress pixel blocks */ blocks = 0; for (i = 0; i < (ydim / 4); i++) for (j = 0; j < (xdim / 4); j++) { switch (mode) { case BIT8: /* 8 bit per pixel format */ k = 0; for (y = (i * 4); y < (i * 4 + 4); y++) for (x = (j * 4); x < (j * 4 + 4); x++) { l = y * xdim + x; raster[k++] = (unsigned char)in_pal[3 * (unsigned char)in[l]]; raster[k++] = (unsigned char)in_pal[3 * (unsigned char)in[l] + 1]; raster[k++] = (unsigned char)in_pal[3 * (unsigned char)in[l] + 2]; } /* end of for x */ compress(raster, blocks); break; case BIT24: /* 24 bit per pixel format */ k = 0; for (y = (i * 4); y < (i * 4 + 4); y++) for (x = (j * 4); x < (j * 4 + 4); x++) { l = 3 * (y * xdim + x); raster[k++] = (unsigned char)in[l]; raster[k++] = (unsigned char)in[l + 1]; raster[k++] = (unsigned char)in[l + 2]; } /* end of for x */ compress(raster, blocks); break; default: /* unsupported format */ break; } /* end of switch */ blocks++; } /* end of for j */ /* set palette */ nmbr = cnt_color(blocks); if (nmbr <= PALSIZE) set_palette(blocks); else { sel_palette(blocks, nmbr, color_pt); map(blocks); } fillin_color(blocks); free(color_pt); color_pt = NULL; free(trans); trans = NULL; } /* end of DFCIimcomp */ /************************************************************************/ /* Function : compress */ /* Purpose : Given a block of 16 pixels, sets up a 16 bit bitmap */ /* and assigns a lo and hi color for the block. For block */ /* i, hi color is stored in color_pt[2i] and lo in */ /* color_pt[2i+1]. Each color is then reduced to 15 bits */ /* by truncating the lower order 3 bits of each component */ /* Parameter : */ /* raster - contains the 16 pixels of a block. Each pixel is 3 */ /* bytes, 1 byte for each color component */ /* block - pixel block number */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : none */ /************************************************************************/ static void compress(unsigned char raster[], int block) { float32 y[16], y_av; int i, j, k, l; uint8 bit; int high, hi, lo; int c_hi[3], c_lo[3]; /* calculate luminance */ y_av = (float32)0.0; for (i = 0; i < 16; i++) { j = 3 * i; y[i] = (float32)0.3 * (float32)raster[j] + (float32)0.59 * (float32)raster[j + 1] + (float32)0.11 * (float32)raster[j + 2]; /* printf("compress: y[%d] is %f\n",i,y[i]); */ y_av = y_av + y[i]; } y_av /= (float32)16.0; /* printf("y_av is %f\n",y_av); */ /* initialize c_hi and c_lo */ for (i = RED; i <= BLUE; i++) { c_hi[i] = 0; c_lo[i] = 0; } /* build bit map */ k = 4 * block; high = 0; hi = 2 * block; lo = hi + 1; for (i = 0; i < 2; i++) { bit = 128; for (j = (i * 8); j < (i * 8 + 8); j++) { if (y[j] > y_av) { image[k] |= bit; high++; for (l = RED; l <= BLUE; l++) c_hi[l] = c_hi[l] + (int)raster[3 * j + l]; } else { for (l = RED; l <= BLUE; l++) c_lo[l] = c_lo[l] + (int)raster[3 * j + l]; } /* end of if */ bit = (uint8)(bit >> 1); } /* end of for j */ k++; } /* end of for i */ /* calculate hi lo color */ for (i = RED; i <= BLUE; i++) { if (high != 0) color_pt[hi].c[i] = (uint8)((float)c_hi[i] / (float)high); if (high != 16) color_pt[lo].c[i] = (uint8)((float)c_lo[i] / (float)(16 - high)); color_pt[hi].c[i] = (uint8)(color_pt[hi].c[i] >> 3); color_pt[lo].c[i] = (uint8)(color_pt[lo].c[i] >> 3); } } /* end of compress */ /************************************************************************/ /* Function : init_global */ /* Purpose : Allocates memory for global variables */ /* Parameter : */ /* xdim, ydim - x and y dimension of image */ /* out - pointer to output buffer */ /* out_pal - pointer to output palette */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : none */ /************************************************************************/ static void init_global(int32 xdim, int32 ydim, void *out, void *out_pal) { int32 i, j; /* allocate memory */ image = (unsigned char *)out; new_pal = (unsigned char *)out_pal; free(color_pt); color_pt = (struct rgb *)malloc((unsigned)((xdim * ydim) / 8) * sizeof(struct rgb)); free(trans); trans = (int *)malloc(MAXCOLOR * sizeof(int)); if (image == NULL || color_pt == NULL || new_pal == NULL || trans == NULL) { return; /* punt! */ } /* initialize */ for (i = 0; i < (xdim * ydim / 4); i++) image[i] = 0; for (i = 0; i < (xdim * ydim / 8); i++) for (j = RED; j <= BLUE; j++) color_pt[i].c[j] = 0; for (i = 0; i < MAXCOLOR; i++) trans[i] = -1; } /* end of init_global */ /************************************************************************/ /* Function : cnt_color */ /* Purpose : Counts the number of distinct colors compressd image */ /* Parameter : */ /* blocks - total number of pixel blocks */ /* Returns : Number of distinct colors, -1 on errors */ /* Called by : DFCimcomp() */ /* Calls : indx() */ /************************************************************************/ static int cnt_color(int blocks) { int *temp = NULL; int k, count; if (NULL == (temp = (int *)malloc(sizeof(int) * MAXCOLOR))) return -1; for (int i = 0; i < MAXCOLOR; i++) temp[i] = -1; for (int i = 0; i < (2 * blocks); i++) { k = indx(color_pt[i].c[RED], color_pt[i].c[GREEN], color_pt[i].c[BLUE]); if (k < MAXCOLOR) temp[k] = 0; } count = 0; for (int i = 0; i < MAXCOLOR; i++) if (temp[i] == 0) count++; free(temp); return count; } /* end of cnt_color */ /************************************************************************/ /* Function : set_palette */ /* Purpose : The number of distinct colors is less than the desired */ /* output palette size. Therefore each distinct color can */ /* be a palette entry. Function enters each distinct */ /* color as a palette entry and sets up the translation */ /* table. It also shifts each color component left 3 bits */ /* so that each color component is again 8 bits wide */ /* Parameter : */ /* blocks - total number of pixel blocks */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : indx() */ /************************************************************************/ static void set_palette(int blocks) { int ent, i, k; ent = 0; for (i = 0; i < (2 * blocks); i++) { k = indx(color_pt[i].c[RED], color_pt[i].c[GREEN], color_pt[i].c[BLUE]); if (trans[k] == -1) { new_pal[3 * ent] = (uint8)(color_pt[i].c[RED] << 3); new_pal[3 * ent + 1] = (uint8)(color_pt[i].c[GREEN] << 3); new_pal[3 * ent + 2] = (uint8)(color_pt[i].c[BLUE] << 3); trans[k] = ent; ent++; } } } /* end of set_palette */ /************************************************************************/ /* Function : fillin_color */ /* Purpose : For each pixel block, fills in the pointers into the */ /* palette. */ /* Parameter : */ /* blocks - total number of pixel blocks */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : none */ /************************************************************************/ static void fillin_color(int blocks) { int i, j, k; for (i = 0; i < blocks; i++) for (j = HI; j <= LO; j++) { k = indx(color_pt[2 * i + j].c[RED], color_pt[2 * i + j].c[GREEN], color_pt[2 * i + j].c[BLUE]); image[i * 4 + 2 + j] = (uint8)trans[k]; } } /* end of fillin_color */ /************************************************************************/ /* Function : indx */ /* Purpose : Maps an rgb triple (5 bits each) to an integer array */ /* index */ /* Parameter : */ /* r, g, b - color components */ /* Returns : returns an array index */ /* Called by : set_palette(), fillin_color(), map() */ /* Calls : none */ /************************************************************************/ static int indx(unsigned char r, unsigned char g, unsigned char b) { int temp; temp = 0; temp = ((r & 0x1f) << 10) | ((g & 0x1f) << 5) | (b & 0x1f); return temp; } /* end of indx */ /************************************************************************/ /* Function : map */ /* Purpose : Maps a color_pt to the closest representative color */ /* Sets up translation table */ /* Parameter : */ /* blocks - total number of pixel blocks */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : nearest_color() */ /************************************************************************/ static void map(int blocks) { int i, k; uint8 r, g, b; for (i = 0; i < (2 * blocks); i++) { k = indx(color_pt[i].c[RED], color_pt[i].c[GREEN], color_pt[i].c[BLUE]); if (trans[k] == -1) { r = (uint8)(color_pt[i].c[RED] << 3); g = (uint8)(color_pt[i].c[GREEN] << 3); b = (uint8)(color_pt[i].c[BLUE] << 3); trans[k] = nearest_color(r, g, b); /* printf("map: %d %d %d mapped to %d %d %d\n", r, g, b, new_pal[tran s[k]*3 ], new_pal[trans[k]*3+1], new_pal[trans[k]*3+2]); */ } } } /* end of map */ /************************************************************************/ /* Function : nearest_color */ /* Purpose : Finds the nearest palette color */ /* Parameter : */ /* r, g, b - color component */ /* Returns : Entry number of the closest color in the palette */ /* Called by : map() */ /* Calls : sqr() */ /************************************************************************/ static int nearest_color(uint8 r, uint8 g, uint8 b) { int i, nearest; long int min, error; min = (long)(sqr((int16)(r - new_pal[0])) + sqr((int16)(g - new_pal[1])) + sqr((int16)(b - new_pal[2]))); nearest = 0; for (i = 1; i < PALSIZE; i++) { error = (long)(sqr((int16)(r - new_pal[3 * i])) + sqr((int16)(g - new_pal[3 * i + 1])) + sqr((int16)(b - new_pal[3 * i + 2]))); if (error < min) { min = error; nearest = i; } } return nearest; } /* end of nearest_color */ /************************************************************************/ /* Function : sqr */ /* Purpose : Computes the square of an integer */ /* Parameter : */ /* x - an integer */ /* Returns : The square of x */ /* Called by : nearest_color() */ /* Calls : none */ /************************************************************************/ static uint32 sqr(int16 x) { return (uint32)x * (uint32)x; } /************************************************************************/ /* Function : DFCIunimcomp */ /* Purpose : 'Decompresses' the compressed image */ /* Parameter : */ /* xdim, ydim - dimensions of image */ /* in, out - Input buffer and output buffer. Size of input buffer */ /* is (xdim*ydim)/4. Size of output buffer is 4 times */ /* that. It 'restores' images into seq-type files */ /* Returns : none */ /* Called by : External routines */ /* Calls : none */ /************************************************************************/ void DFCIunimcomp(int32 xdim, int32 ydim, uint8 in[], uint8 out[]) { int bitmap, temp; int32 i, j, k, x, y; uint8 hi_color, lo_color; for (y = 0; y < (ydim / 4); y++) for (x = 0; x < xdim; x = x + 4) { k = y * xdim + x; hi_color = (unsigned char)in[k + 2]; lo_color = (unsigned char)in[k + 3]; bitmap = ((unsigned char)in[k] << 8) | (unsigned char)in[k + 1]; for (i = (y * 4); i < (y * 4 + 4); i++) { temp = bitmap >> (3 + y * 4 - i) * 4; for (j = x; j < (x + 4); j++) { if ((temp & 8) == 8) out[i * xdim + j] = (char)hi_color; else out[i * xdim + j] = (char)lo_color; temp = temp << 1; } } } /* end of for x */ } /* end of DFCIunimcomp */ /************************************************************************/ /* Module Name : color */ /* Exports : sel_palette(); new_pal, pointer to a new color palette */ /* Purpose : Quantizes colors */ /* Author : Eng-Kiat Koh */ /* Date : June 30th, 1988 */ /* Functions : sel_palette(), init(), sort(), partition(), find_box() */ /* split_box(), assign_color(), select_dim(), find_med() */ /* classify(), next_pt() */ /************************************************************************/ /************************************************************************/ /* Function : sel_palette */ /* Purpose : Selects PALSIZE palette colors out of a list of colors */ /* in color_pt */ /* Parameter : */ /* blocks - number of pixel blocks */ /* distinct - number of distinct colors */ /* color_pt - contains the lo hi colors for each pixel block */ /* Returns : none */ /* Called by : DFCimcomp() */ /* Calls : init(), split_box(), find_box(), assign_color() */ /************************************************************************/ static void sel_palette(int blocks, int distinct, struct rgb *my_color_pt) { int boxes; /* int i, j; */ struct box *ptr; init(blocks, distinct, my_color_pt); /* split box into smaller boxes with about equal number of points */ for (boxes = 1; boxes < PALSIZE; boxes++) { /* ptr=frontier->right; j = 0; while (ptr != NULL) { printf("Box %d, distinct %d, total %d\n",j,ptr->nmbr_distinct, ptr->nmbr_pts); for (i=0; inmbr_distinct; i++) printf("pt %d: %d %d %d",i,distinct_pt[ptr->pts[i]].c[RED], distinct_pt[ptr->pts[i]].c[GREEN], distinct_pt[ptr->pts[i]].c[BLUE]); j++; ptr = ptr->right; } */ ptr = find_box(); split_box(ptr); } assign_color(); } /************************************************************************/ /* Function : init */ /* Purpose : Initializes the global variables, sets up the first */ /* box. It will contain all the color points */ /* Parameter : */ /* blocks - number of pixel blocks */ /* distinct - number of distinct colors */ /* my_color_pt - contains the lo hi colors for each pixel block */ /* Returns : none */ /* Called by : sel_palette() */ /* Calls : none */ /************************************************************************/ static void init(int blocks, int distinct, struct rgb *my_color_pt) { int i, j, k, l; int *temp = NULL; struct box *first; struct box *dummy; /* alloc memory */ free(hist); free(distinct_pt); hist = (int *)malloc((unsigned)distinct * sizeof(int)); distinct_pt = (struct rgb *)malloc((unsigned)distinct * sizeof(struct rgb)); temp = (int *)malloc(sizeof(int) * MAXCOLOR); for (i = 0; i < distinct; i++) hist[i] = 0; /* select distinct pts and set up histogram */ for (i = 0; i < MAXCOLOR; i++) temp[i] = -1; k = 0; for (i = 0; i < (2 * blocks); i++) { j = ((int)my_color_pt[i].c[RED] << 10) | (my_color_pt[i].c[GREEN] << 5) | my_color_pt[i].c[BLUE]; if (temp[j] == -1) { /* new pt */ temp[j] = k; for (l = RED; l <= BLUE; l++) distinct_pt[k].c[l] = my_color_pt[i].c[l]; k++; } hist[temp[j]]++; } /* set up first box */ first = (struct box *)malloc(sizeof(struct box)); for (i = RED; i <= BLUE; i++) { first->bnd[i][LO] = (float32)999.9; first->bnd[i][HI] = (float32)-999.9; for (j = 0; j < distinct; j++) { if (first->bnd[i][LO] > (float)distinct_pt[j].c[i]) first->bnd[i][LO] = (float)distinct_pt[j].c[i]; if (first->bnd[i][HI] < (float)distinct_pt[j].c[i]) first->bnd[i][HI] = (float)distinct_pt[j].c[i]; } /* end of for j */ first->bnd[i][LO] = first->bnd[i][LO] - (float32)EPSILON; first->bnd[i][HI] = first->bnd[i][HI] + (float32)EPSILON; } /* end of for i */ first->pts = (int *)malloc((unsigned)distinct * sizeof(int)); for (i = 0; i < distinct; i++) first->pts[i] = i; first->nmbr_pts = 2 * blocks; first->nmbr_distinct = distinct; dummy = (struct box *)malloc(sizeof(struct box)); frontier = dummy; dummy->right = first; first->left = dummy; first->right = NULL; dummy->nmbr_pts = 0; free(first); free(dummy); free(temp); return; } /* end of init */ /************************************************************************/ /* Function : sort */ /* Purpose : Performs quick sort on the points in a box along a */ /* given dimension */ /* Parameter : */ /* l, r - index of leftmost and rightmost element */ /* dim - dimension along which sorting is done */ /* rank - an array which carries the index of the points to be */ /* sorted */ /* Returns : none */ /* Called by : find_med() */ /* Calls : partition() */ /************************************************************************/ static void sort(int l, int r, int dim, int rank[]) { int i; if (r > l) { i = partition(l, r, dim, rank); sort(l, i - 1, dim, rank); sort(i + 1, r, dim, rank); } } /************************************************************************ * Function : partition * Purpose : Partitions the list into 2 parts as in the quick sort * algorithm * Parameter : * l, r - index of leftmost and rightmost element * dim - dimension along which sorting is done * rank - an array which carries the index of the points to be * Returns : index where list is partitioned * Called by : sort() * Calls : none ************************************************************************/ static int partition(int l, int r, int dim, int rank[]) { int i, j, temp; uint8 v; v = distinct_pt[rank[r]].c[dim]; i = l - 1; j = r; /* repeat until i and j crosses */ do { /* repeat until an element >= v is found */ do i++; while (distinct_pt[rank[i]].c[dim] < v); /* repeat until an element <= v is found */ do j--; while ((j > 0) && (distinct_pt[rank[j]].c[dim] > v)); /* swap pointers */ temp = rank[i]; rank[i] = rank[j]; rank[j] = temp; } while (i < j); /* position partitioning element at location i */ temp = rank[j]; rank[j] = rank[i]; rank[i] = rank[r]; rank[r] = temp; return i; } /************************************************************************/ /* Function : find_box */ /* Purpose : Finds the box with the largest number of color points */ /* The points need not necessarily be distinct. But in */ /* order to partition the box, there must be at least 2 */ /* distinct points */ /* Parameter : none */ /* Returns : pointer to box selected for splitting */ /* Called by : sel_palette() */ /* Calls : none */ /************************************************************************/ static struct box * find_box(void) { struct box *temp; struct box *max; int max_pts; max_pts = 1; max = NULL; temp = frontier->right; while (temp != NULL) if ((temp->nmbr_distinct > 1) && (max_pts < temp->nmbr_pts)) { max_pts = temp->nmbr_pts; max = temp; temp = temp->right; } else temp = temp->right; if (max == NULL) { return NULL; /* punt! */ } return max; } /************************************************************************/ /* Function : split_box */ /* Purpose : Splits a selected box into 2 and reinserts the 2 sub- */ /* boxes into the frontier list */ /* Parameter : */ /* ptr - pointer to box to be split */ /* Returns : none */ /* Called by : sel_palette() */ /* Calls : find_med(), select_dim(), classify() */ /************************************************************************/ static void split_box(struct box *ptr) { int dim, j, i; float median; struct box *l_child, *r_child; /* This function should really return an error code, but for now * we'll at least guard against NULL pointer dereferences */ if (NULL == ptr) return; dim = select_dim(ptr); median = find_med(ptr, dim); /* create 2 child */ l_child = (struct box *)malloc(sizeof(struct box)); r_child = (struct box *)malloc(sizeof(struct box)); for (i = RED; i <= BLUE; i++) for (j = HI; j <= LO; j++) { l_child->bnd[i][j] = ptr->bnd[i][j]; r_child->bnd[i][j] = ptr->bnd[i][j]; } l_child->bnd[dim][HI] = median; r_child->bnd[dim][LO] = median; classify(ptr, l_child); classify(ptr, r_child); r_child->right = ptr->right; r_child->left = l_child; l_child->right = r_child; l_child->left = ptr->left; (ptr->left)->right = l_child; if (ptr->right != NULL) (ptr->right)->left = r_child; } /* end of split_box */ /************************************************************************/ /* Function : assign_color */ /* Purpose : Assigns a color to each box. It computes the average */ /* color of all the points in the box */ /* Sets up the new_pal buffer. Each color component is */ /* shifted left 3 bits because of the truncation when */ /* color_pt was set up */ /* Parameter : none */ /* Returns : none */ /* Called by : sel_palette() */ /* Calls : none */ /************************************************************************/ static void assign_color(void) { struct box *temp; int ent, k, j; int c[3]; temp = frontier->right; for (ent = 0; ent < PALSIZE; ent++) { for (k = RED; k <= BLUE; k++) c[k] = 0; /* printf("Box %d: number of pts %d\n", ent, temp->nmbr_pts); */ for (j = 0; j < temp->nmbr_distinct; j++) { /* printf("pt %d:", j); */ for (k = RED; k <= BLUE; k++) { /* printf("%d ",distinct_pt[temp->pts[j]].c[k]); */ c[k] = c[k] + distinct_pt[temp->pts[j]].c[k] * hist[temp->pts[j]]; } /* printf("\n"); */ } for (k = RED; k <= BLUE; k++) { c[k] = c[k] / temp->nmbr_pts; new_pal[3 * ent + k] = (uint8)(c[k] << 3); } temp = temp->right; } /* end of for entry */ } /************************************************************************/ /* Function : select_dim */ /* Purpose : Selects the dimension with the largest spread */ /* Parameter : */ /* ptr - pointer to desired box */ /* Returns : dimension where the box is to be split */ /* Called by : split_box() */ /* Calls : none */ /************************************************************************/ static int select_dim(struct box *ptr) { int i, j; uint8 low[3], high[3]; uint8 max; if ((NULL == ptr) || (NULL == ptr->pts)) return -1; for (j = RED; j <= BLUE; j++) { low[j] = distinct_pt[ptr->pts[0]].c[j]; high[j] = distinct_pt[ptr->pts[0]].c[j]; } for (i = 1; i < ptr->nmbr_distinct; i++) for (j = RED; j <= BLUE; j++) { if (low[j] > distinct_pt[ptr->pts[i]].c[j]) low[j] = distinct_pt[ptr->pts[i]].c[j]; if (high[j] < distinct_pt[ptr->pts[i]].c[j]) high[j] = distinct_pt[ptr->pts[i]].c[j]; } max = (uint8)(high[RED] - low[RED]); i = RED; for (j = GREEN; j <= BLUE; j++) if (max < (uint8)(high[j] - low[j])) { max = (uint8)(high[j] - low[j]); i = j; } return i; } /* end of select_dim */ /************************************************************************/ /* Function : find_med */ /* Purpose : Finds the point where the box is to be split. It finds */ /* a point such that the 2 new boxes have about the same */ /* number of color points. */ /* Parameter : */ /* ptr - pointer to box to be split */ /* dim - dimension to split box */ /* Returns : point where the box is to be cut */ /* Called by : split_box() */ /* Calls : next_pt() */ /************************************************************************/ static float find_med(struct box *ptr, int dim) { int i, j, count, next, prev; int *rank; float32 median; /* There's really no way to recover from this, given the API, but * at least we won't segfault... */ if ((NULL == ptr) || (NULL == ptr->pts)) return -9999999.99; rank = (int *)malloc((unsigned)ptr->nmbr_distinct * sizeof(int)); for (i = 0; i < ptr->nmbr_distinct; i++) rank[i] = ptr->pts[i]; sort(0, ptr->nmbr_distinct - 1, dim, rank); count = 0; prev = i = 0; while ((i < ptr->nmbr_distinct) && (count < ptr->nmbr_pts / 2)) { next = next_pt(dim, i, rank, ptr->nmbr_distinct); for (j = i; j < next; j++) count = count + hist[rank[j]]; prev = i; i = next; } if (prev == 0) { /* the first distinct point overshot the median */ median = (float32)distinct_pt[rank[prev]].c[dim] + (float32)EPSILON; } else median = (float32)distinct_pt[rank[prev - 1]].c[dim] + (float32)EPSILON; free(rank); return median; } /* end of find_med */ /************************************************************************/ /* Function : classify */ /* Purpose : Looks at the color points in the parent and selects */ /* the points that belong to the child */ /* Parameter : */ /* ptr - pointer to parent */ /* child - pointer to child box */ /* Returns : none */ /* Called by : split_box() */ /* Calls : none */ /************************************************************************/ static void classify(struct box *ptr, struct box *child) { int i, j; int *temp; int distinct, total; temp = (int *)malloc((unsigned)ptr->nmbr_distinct * sizeof(int)); distinct = 0; total = 0; for (i = 0; i < ptr->nmbr_distinct; i++) { j = ptr->pts[i]; if ((((float)distinct_pt[j].c[RED] >= child->bnd[RED][LO]) && ((float)distinct_pt[j].c[RED] <= child->bnd[RED][HI])) && (((float)distinct_pt[j].c[GREEN] >= child->bnd[GREEN][LO]) && ((float)distinct_pt[j].c[GREEN] <= child->bnd[GREEN][HI])) && (((float)distinct_pt[j].c[BLUE] >= child->bnd[BLUE][LO]) && ((float)distinct_pt[j].c[BLUE] <= child->bnd[BLUE][HI]))) { /* pt is in new box */ temp[distinct] = j; distinct++; total = total + hist[j]; } /* end of if */ } /* end of for i */ /* assign points */ if (distinct > 0) { child->nmbr_pts = total; child->nmbr_distinct = distinct; child->pts = (int *)malloc((unsigned)distinct * sizeof(int)); for (i = 0; i < distinct; i++) child->pts[i] = temp[i]; } else { child->nmbr_pts = 0; child->nmbr_distinct = 0; child->pts = NULL; } free(temp); } /* end of classify */ /************************************************************************/ /* Function : next_pt */ /* Purpose : Determines the next point that has a different value */ /* from the current point along a dimension */ /* Parameter : */ /* dim - dimension where box is to be split */ /* i - index to current point */ /* rank - sorted list of points to be searched starting from i */ /* distinct - length of sorted list */ /* Returns : index of point that has a different value */ /* Called by : find_med */ /* Calls : none */ /************************************************************************/ static int next_pt(int dim, int i, int rank[], int distinct) { int j; uint8 old; old = distinct_pt[rank[i]].c[dim]; for (j = (i + 1); j < distinct; j++) if (distinct_pt[rank[j]].c[dim] != old) break; return j; } /* end of next_pt */ hdf4-hdf4.3.1/hdf/src/dfjpeg.c000066400000000000000000000307621503061704500157720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfjpeg.c * Purpose: JPEG image compression algorithm * Invokes: JPEG library functions * Contents: * DFCIjpeg: compress image using JPEG compression * Remarks: DFCIjpeg() compress images using the JPEG library functions. * This file (dfjpeg.c) and dfunjpeg.c should remain the only HDF files * that has to know about how to use the JPEG routines. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" /* Hack to prevent libjpeg from re-defining `boolean` in a way that clashes * with windows.h. This MUST come before including jpeglib.h. */ #ifdef H4_HAVE_WIN32_API #define HAVE_BOOLEAN #endif #include "jpeglib.h" #include "jerror.h" /* Expanded data destination object for HDF output */ typedef struct { struct jpeg_destination_mgr pub; /* public fields */ int32 aid; /* target AID for output */ int32 file_id; /* HDF file ID */ uint16 tag, ref; /* tag & ref of image to output */ const void *image; /* pointer to the image data */ int32 xdim, ydim; /* X & Y dimensions of the image */ int16 scheme; /* type of image (8-bit or 24-bit) */ JOCTET *buffer; /* buffer for JPEG library to fill */ } hdf_destination_mgr; typedef hdf_destination_mgr *hdf_dest_ptr; #define OUTPUT_BUF_SIZE 4096 /* size of JPEG output buffer */ /* Prototypes */ extern void hdf_init_destination(struct jpeg_compress_struct *cinfo_ptr); extern boolean hdf_empty_output_buffer(struct jpeg_compress_struct *cinfo_ptr); extern void hdf_term_destination(struct jpeg_compress_struct *cinfo_ptr); extern intn jpeg_HDF_dest(struct jpeg_compress_struct *cinfo_ptr, int32 file_id, uint16 tag, uint16 ref, const void *image, int32 xdim, int32 ydim, int16 scheme); extern intn jpeg_HDF_dest_term(struct jpeg_compress_struct *cinfo_ptr); void (*jpeg_message_handler)(j_common_ptr cinfo) = NULL; /*----------------------------------------------------------------------------- * Name: hdf_init_destination * Purpose: Initialize the destination mgr for the JPEG image * Inputs: * cinfo_ptr - JPEG compression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Initializes the JPEG destination mgr for further output. *---------------------------------------------------------------------------*/ void hdf_init_destination(struct jpeg_compress_struct *cinfo_ptr) { hdf_dest_ptr dest = (hdf_dest_ptr)cinfo_ptr->dest; int32 temp_aid; if ((dest->buffer = malloc(sizeof(JOCTET) * OUTPUT_BUF_SIZE)) == NULL) ERREXIT1(cinfo_ptr, JERR_OUT_OF_MEMORY, (int)1); /* Create empty JPEG5/GREYJPEG5 tag/ref to indicate the image */ if ((temp_aid = Hstartwrite(dest->file_id, (uint16)dest->scheme, dest->ref, 0)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_WRITE); Hendaccess(temp_aid); if ((dest->aid = Hstartaccess(dest->file_id, dest->tag, dest->ref, DFACC_WRITE | DFACC_APPENDABLE)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_WRITE); dest->pub.next_output_byte = dest->buffer; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; } /* end hdf_init_destination() */ /*----------------------------------------------------------------------------- * Name: hdf_empty_output_buffer * Purpose: Write out a chunk of JPEG compressed data * Inputs: * cinfo_ptr - JPEG compression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: *---------------------------------------------------------------------------*/ boolean hdf_empty_output_buffer(struct jpeg_compress_struct *cinfo_ptr) { hdf_dest_ptr dest = (hdf_dest_ptr)cinfo_ptr->dest; if (Hwrite(dest->aid, OUTPUT_BUF_SIZE, dest->buffer) != OUTPUT_BUF_SIZE) ERREXIT(cinfo_ptr, JERR_FILE_WRITE); dest->pub.next_output_byte = dest->buffer; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; return TRUE; } /* end hdf_empty_output_buffer() */ /*----------------------------------------------------------------------------- * Name: hdf_term_destination * Purpose: Terminate the destination mgr for the JPEG image * Inputs: * cinfo_ptr - JPEG compression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Terminate the JPEG destination mgr for further output. *---------------------------------------------------------------------------*/ void hdf_term_destination(struct jpeg_compress_struct *cinfo_ptr) { hdf_dest_ptr dest = (hdf_dest_ptr)cinfo_ptr->dest; /* note that 'free_in_buffer' is size_t in the jpeg library */ int32 datacount = (int32)OUTPUT_BUF_SIZE - (int32)dest->pub.free_in_buffer; /* Write any data remaining in the buffer */ if (datacount > 0) { if (Hwrite(dest->aid, datacount, dest->buffer) != datacount) ERREXIT(cinfo_ptr, JERR_FILE_WRITE); } /* close the HDF object */ Hendaccess(dest->aid); /* Free the output buffer */ free(dest->buffer); } /* end hdf_term_destination() */ /*----------------------------------------------------------------------------- * Name: jpeg_HDF_dest * Purpose: Setup an HDF I/O destination manager for the IJG library. * Inputs: * cinfo_ptr - JPEG compression structure pointer * file_id - HDF file ID for file we are opening * tag - HDF tag for image we are writing * ref - HDF ref for image we are writing * image - pointer to the image data to output * xdim,ydim - X & Y dimensions of image * scheme - the type of image to output * Returns: 0 on success, -1 on failure * Users: DFCIjpeg * Invokes: JPEG library routines (lots of them...) * Remarks: Sets up the destination manager functions for the JPEG library. * These routines will be called by the JPEG routines to output *---------------------------------------------------------------------------*/ intn jpeg_HDF_dest(struct jpeg_compress_struct *cinfo_ptr, int32 file_id, uint16 tag, uint16 ref, const void *image, int32 xdim, int32 ydim, int16 scheme) { hdf_dest_ptr dest; if ((dest = malloc(sizeof(hdf_destination_mgr))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); cinfo_ptr->dest = (struct jpeg_destination_mgr *)dest; dest->pub.init_destination = hdf_init_destination; dest->pub.empty_output_buffer = hdf_empty_output_buffer; dest->pub.term_destination = hdf_term_destination; /* Now the HDF specific parameters */ dest->aid = 0; /* start with no AID */ dest->file_id = file_id; dest->tag = tag; dest->ref = ref; dest->image = image; dest->xdim = xdim; dest->ydim = ydim; dest->scheme = scheme; return SUCCEED; } /* end jpeg_HDF_dest() */ /*----------------------------------------------------------------------------- * Name: jpeg_HDF_dest_term * Purpose: Terminate an HDF I/O destination manager for the IJG library. * Inputs: * cinfo_ptr - JPEG compression structure pointer * Returns: 0 on success, -1 on failure * Users: DFCIjpeg * Invokes: JPEG library routines (lots of them...) * Remarks: Terminates the destination manager functions for the JPEG library. *---------------------------------------------------------------------------*/ intn jpeg_HDF_dest_term(struct jpeg_compress_struct *cinfo_ptr) { /* all we need to do for now is to free up the dest. mgr structure */ free(cinfo_ptr->dest); return SUCCEED; } /* end jpeg_HDF_dest_term() */ /***********************************************************************/ /* HDF callable routine for writing out an image with JPEG compression */ /***********************************************************************/ /*----------------------------------------------------------------------------- * Name: DFCIjpeg * Purpose: compress an image using the JPEG compression algorithm * Inputs: * Returns: 0 on success, -1 on failure * Users: HDF programmers, DFputcomp, other routines * Invokes: JPEG library routines (lots of them...) * Remarks: Uses the JPEG library routines. The reason this routine doesn't * compress into a buffer (like IMCOMP and RLE methods) is because * the size of the buffer cannot be predicted before-hand and since * 24-bit images are already huge, I don't want to try allocating a * worst-case buffer. This means that this routine has to do the * writing of the compressed image itself, instead of allowing * DFputcomp() to write out the entire image at once. *---------------------------------------------------------------------------*/ intn DFCIjpeg(int32 file_id, uint16 tag, uint16 ref, int32 xdim, int32 ydim, const void *image, int16 scheme, comp_info *scheme_info) { /* These three structs contain JPEG parameters and working data. * They must survive for the duration of parameter setup and one * call to jpeg_compress; typically, making them local data in the * calling routine is the best strategy. */ struct jpeg_compress_struct *cinfo_ptr; struct jpeg_error_mgr *jerr_ptr; JSAMPROW row_pointer[1]; intn row_stride; const uint8 *image_buffer = image; if ((cinfo_ptr = calloc(1, sizeof(struct jpeg_compress_struct))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); if ((jerr_ptr = malloc(sizeof(struct jpeg_error_mgr))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* Initialize the error-handling routines */ cinfo_ptr->err = jpeg_std_error(jerr_ptr); if (jpeg_message_handler != NULL) { jerr_ptr->output_message = jpeg_message_handler; } /* Initialize the JPEG compression stuff */ jpeg_create_compress(cinfo_ptr); /* Set-up HDF destination manager */ jpeg_HDF_dest(cinfo_ptr, file_id, tag, ref, image, xdim, ydim, scheme); /* Set up default JPEG parameters in the cinfo data structure. */ cinfo_ptr->image_width = (JDIMENSION)xdim; cinfo_ptr->image_height = (JDIMENSION)ydim; if ((uint16)scheme == DFTAG_JPEG5) /* 24-bit image */ { cinfo_ptr->input_components = 3; cinfo_ptr->in_color_space = JCS_RGB; row_stride = xdim * 3; } /* end if */ else if ((uint16)scheme == DFTAG_GREYJPEG5) /* 8-bit image */ { cinfo_ptr->input_components = 1; cinfo_ptr->in_color_space = JCS_GRAYSCALE; row_stride = xdim; } /* end if */ else HRETURN_ERROR(DFE_ARGS, FAIL); jpeg_set_defaults(cinfo_ptr); /* Set up user JPEG parameters in the cinfo data structure. */ jpeg_set_quality(cinfo_ptr, scheme_info->jpeg.quality, (boolean)scheme_info->jpeg.force_baseline); /* OK, get things started */ jpeg_start_compress(cinfo_ptr, TRUE); /* write the whole image out at once */ while (cinfo_ptr->next_scanline < cinfo_ptr->image_height) { row_pointer[0] = (JSAMPROW)(&image_buffer[(size_t)cinfo_ptr->next_scanline * (size_t)row_stride]); jpeg_write_scanlines(cinfo_ptr, row_pointer, 1); } /* end while */ /* Finish writing stuff out */ jpeg_finish_compress(cinfo_ptr); /* Get rid of the JPEG information */ jpeg_destroy_compress(cinfo_ptr); /* Wrap up any HDF specific code */ jpeg_HDF_dest_term(cinfo_ptr); /* Free update memory allocated */ free(jerr_ptr); free(cinfo_ptr); return SUCCEED; /* we must be ok... */ } /* end DFCIjpeg() */ hdf4-hdf4.3.1/hdf/src/dfknat.c000066400000000000000000000225041503061704500157750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------ File: dfknat.c Purpose: Routines to support "native mode" conversion to and from HDF format PRIVATE conversion functions: DFKnb1b - Native mode for 8 bit integers DFKnb2b - Native mode for 16 bit integers DFKnb4b - Native mode for 32 bit integers and floats DFKnb8b - Native mode for 64 bit floats Remarks: These files used to be in dfconv.c, but it got a little too huge, so they were broken into a separate file. *------------------------------------------------------------------*/ /*****************************************************************************/ /* */ /* All the routines in this file marked as PRIVATE have been marked so */ /* for a reason. *ANY* of these routines may or may nor be supported in */ /* the next version of HDF (4.00). Furthurmore, the names, parameters, or */ /* functionality is *NOT* guaranteed to remain the same. */ /* The *ONLY* guarantee possible is that DFKnumin(), and DFKnumout() */ /* will not change. They are *NOT* guaranteed to be implemented in the */ /* next version of HDF as function pointers. They are guaranteed to take */ /* the same arguments and produce the same results. */ /* If your programs call any routines in this file except for */ /* DFKnumin(), DFKnumout, and/or DFKsetntype(), your code may not work */ /* with future versions of HDF and your code will *NOT* be portable. */ /* */ /*****************************************************************************/ #include "hdf_priv.h" #include "hconv_priv.h" /*****************************************************************************/ /* NATIVE MODE NUMBER "CONVERSION" ROUTINES */ /*****************************************************************************/ /************************************************************/ /* DFKnb1b() */ /* Native mode for 1 byte data items */ /************************************************************/ int DFKnb1b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; int in_place = 0; uint32 i; uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if ((source_stride == 0 && dest_stride == 0) || (source_stride == 1 && dest_stride == 1)) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { memcpy(dest, source, num_elm); return 0; } else return 0; /* Nothing to do */ } else { *dest = *source; for (i = 1; i < num_elm; i++) { dest += dest_stride; source += source_stride; *dest = *source; } } return 0; } /************************************************************/ /* DFKnb2b() */ /* -->Native mode for 2 byte data items */ /************************************************************/ int DFKnb2b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[2]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if ((source_stride == 0 && dest_stride == 0) || (source_stride == 2 && dest_stride == 2)) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { memcpy(dest, source, num_elm * 2); return 0; } else { /* Nothing to do */ return 0; } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { dest[0] = source[0]; dest[1] = source[1]; dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { buf[0] = source[0]; buf[1] = source[1]; dest[0] = buf[0]; dest[1] = buf[1]; dest += dest_stride; source += source_stride; } return 0; } /************************************************************/ /* DFKnb4b() */ /* -->Native mode for 4 byte items */ /************************************************************/ int DFKnb4b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[4]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if ((source_stride == 0 && dest_stride == 0) || (source_stride == 4 && dest_stride == 4)) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { memcpy(dest, source, num_elm * 4); return 0; } else { /* Nothing to do */ return 0; } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { dest[0] = source[0]; dest[1] = source[1]; dest[2] = source[2]; dest[3] = source[3]; dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { buf[0] = source[0]; buf[1] = source[1]; buf[2] = source[2]; buf[3] = source[3]; dest[0] = buf[0]; dest[1] = buf[1]; dest[2] = buf[2]; dest[3] = buf[3]; dest += dest_stride; source += source_stride; } return 0; } /************************************************************/ /* DFKnb8b() */ /* -->Native mode for 8 byte items */ /************************************************************/ int DFKnb8b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[8]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if ((source_stride == 0 && dest_stride == 0) || (source_stride == 8 && dest_stride == 8)) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { memcpy(dest, source, num_elm * 8); return 0; } else { return 0; /* No work to do ! */ } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { memcpy(dest, source, 8); dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { memcpy(buf, source, 8); memcpy(dest, buf, 8); dest += dest_stride; source += source_stride; } return 0; } hdf4-hdf4.3.1/hdf/src/dfkswap.c000066400000000000000000000251201503061704500161620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------ File: dfkswap.c Purpose: Routines to support little-endian conversion to and from HDF format PRIVATE conversion functions: DFKsb2b - Byte swapping for 16 bit integers DFKsb4b - Byte swapping for 32 bit integers DFKsb8b - Byte swapping for 64 bit floats Remarks: These files used to be in dfconv.c, but it got a little too huge, so I broke them out into separate files. - Q *------------------------------------------------------------------*/ /*****************************************************************************/ /* */ /* All the routines in this file marked as PRIVATE have been marked so */ /* for a reason. *ANY* of these routines may or may nor be supported in */ /* the next version of HDF (4.00). Furthurmore, the names, parameters, or */ /* functionality is *NOT* guaranteed to remain the same. */ /* The *ONLY* guarantee possible is that DFKnumin(), and DFKnumout() */ /* will not change. They are *NOT* guaranteed to be implemented in the */ /* next version of HDF as function pointers. They are guaranteed to take */ /* the same arguments and produce the same results. */ /* If your programs call any routines in this file except for */ /* DFKnumin(), DFKnumout, and/or DFKsetntype(), your code may not work */ /* with future versions of HDF and your code will *NOT* be portable. */ /* */ /*****************************************************************************/ #include "hdf_priv.h" #include "hconv_priv.h" /*****************************************************************************/ /* NUMBER CONVERSION ROUTINES FOR BYTE SWAPPING */ /*****************************************************************************/ /************************************************************/ /* DFKsb2b() */ /* -->Byte swapping for 2 byte data items */ /************************************************************/ int DFKsb2b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[2]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { /* No elements is an error. */ HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if (source_stride == 0 && dest_stride == 0) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { for (i = 0; i < num_elm; i++) { dest[0] = source[1]; dest[1] = source[0]; dest += 2; source += 2; } return 0; } else { for (i = 0; i < num_elm; i++) { buf[0] = source[1]; buf[1] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest += 2; source += 2; } return 0; } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { dest[0] = source[1]; dest[1] = source[0]; dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { buf[0] = source[1]; buf[1] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest += dest_stride; source += source_stride; } return 0; } /************************************************************/ /* DFKsb4b() */ /* -->Byte swapping for 4 byte data items */ /************************************************************/ int DFKsb4b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[4]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { /* No elements is an error. */ HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if (source_stride == 0 && dest_stride == 0) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { for (i = 0; i < num_elm; i++) { dest[0] = source[3]; dest[1] = source[2]; dest[2] = source[1]; dest[3] = source[0]; dest += 4; source += 4; } return 0; } else { for (i = 0; i < num_elm; i++) { buf[0] = source[3]; buf[1] = source[2]; buf[2] = source[1]; buf[3] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest[2] = buf[2]; dest[3] = buf[3]; dest += 4; source += 4; } return 0; } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { dest[0] = source[3]; dest[1] = source[2]; dest[2] = source[1]; dest[3] = source[0]; dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { buf[0] = source[3]; buf[1] = source[2]; buf[2] = source[1]; buf[3] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest[2] = buf[2]; dest[3] = buf[3]; dest += dest_stride; source += source_stride; } return 0; } /************************************************************/ /* DFKsb8b() */ /* -->Byte swapping for 8 byte data items */ /************************************************************/ int DFKsb8b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride) { int fast_processing = 0; /* Default is not fast processing */ int in_place = 0; /* Inplace must be detected */ uint32 i; uint8 buf[8]; /* Inplace processing buffer */ uint8 *source = (uint8 *)s; uint8 *dest = (uint8 *)d; HEclear(); if (num_elm == 0) { /* No elements is an error. */ HERROR(DFE_BADCONV); return FAIL; } /* Determine if faster array processing is appropriate */ if (source_stride == 0 && dest_stride == 0) fast_processing = 1; /* Determine if the conversion should be inplace */ if (source == dest) in_place = 1; if (fast_processing) { if (!in_place) { for (i = 0; i < num_elm; i++) { dest[0] = source[7]; dest[1] = source[6]; dest[2] = source[5]; dest[3] = source[4]; dest[4] = source[3]; dest[5] = source[2]; dest[6] = source[1]; dest[7] = source[0]; dest += 8; source += 8; } return 0; } else { for (i = 0; i < num_elm; i++) { buf[0] = source[7]; buf[1] = source[6]; buf[2] = source[5]; buf[3] = source[4]; buf[4] = source[3]; buf[5] = source[2]; buf[6] = source[1]; buf[7] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest[2] = buf[2]; dest[3] = buf[3]; dest[4] = buf[4]; dest[5] = buf[5]; dest[6] = buf[6]; dest[7] = buf[7]; dest += 8; source += 8; } return 0; } } /* Generic stride processing */ if (!in_place) for (i = 0; i < num_elm; i++) { dest[0] = source[7]; dest[1] = source[6]; dest[2] = source[5]; dest[3] = source[4]; dest[4] = source[3]; dest[5] = source[2]; dest[6] = source[1]; dest[7] = source[0]; dest += dest_stride; source += source_stride; } else for (i = 0; i < num_elm; i++) { buf[0] = source[7]; buf[1] = source[6]; buf[2] = source[5]; buf[3] = source[4]; buf[4] = source[3]; buf[5] = source[2]; buf[6] = source[1]; buf[7] = source[0]; dest[0] = buf[0]; dest[1] = buf[1]; dest[2] = buf[2]; dest[3] = buf[3]; dest[4] = buf[4]; dest[5] = buf[5]; dest[6] = buf[6]; dest[7] = buf[7]; dest += dest_stride; source += source_stride; } return 0; } hdf4-hdf4.3.1/hdf/src/dfp.c000066400000000000000000000402471503061704500153030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfp.c * Purpose: read and write palettes * Invokes: df.c * Contents: * DFPgetpal : retrieve next palette * DFPputpal : write palette to file * DFPaddpal : add palette to file * DFPnpals : number of palettes in HDF file * DFPreadref : get palette with this reference number next * DFPwriteref : put palette with this reference number next * DFPrestart : forget info about last file accessed - restart from beginning * DFPlastref : return reference number of last element read or written * DFPIopen : open/reopen file *---------------------------------------------------------------------------*/ #include "hdf_priv.h" /* remember that '0' is invalid ref number */ static uint16 Readref = 0; static uint16 Writeref = 0; static uint16 Refset = 0; /* Ref of palette to get next */ static uint16 Lastref = 0; /* Last ref read/written */ static char Lastfile[DF_MAXFNLEN] = ""; /* last file opened */ static int32 DFPIopen(const char *filename, intn acc_mode); /*-------------------------------------------------------------------------- NAME DFPgetpal -- get next palette from file USAGE intn DFPgetpal(filename,palette) char *filename; IN: name of HDF file void * palette; OUT: ptr to the buffer to store the palette in RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Gets the next palette from the file specified. GLOBAL VARIABLES Lastref, Refset COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPgetpal(const char *filename, void *palette) { int32 file_id; int32 aid; int32 length; intn ret_value = SUCCEED; HEclear(); if (!palette) HGOTO_ERROR(DFE_ARGS, FAIL); if ((file_id = DFPIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (Refset) { aid = Hstartread(file_id, DFTAG_IP8, Refset); if (aid == FAIL) aid = Hstartread(file_id, DFTAG_LUT, Refset); } /* end if */ else if (Readref) { aid = Hstartread(file_id, DFTAG_IP8, Readref); if (aid == FAIL) aid = Hstartread(file_id, DFTAG_LUT, Readref); if (aid != FAIL && (Hnextread(aid, DFTAG_IP8, DFREF_WILDCARD, DF_CURRENT) == FAIL)) { if (Hnextread(aid, DFTAG_LUT, DFREF_WILDCARD, DF_CURRENT) == FAIL) { Hendaccess(aid); aid = FAIL; } /* end if */ } /* end if */ } /* end if */ else { aid = Hstartread(file_id, DFTAG_IP8, DFREF_WILDCARD); if (aid == FAIL) aid = Hstartread(file_id, DFTAG_LUT, DFREF_WILDCARD); } /* end else */ Refset = 0; /* on error, close file and return -1 */ if (aid == FAIL) { ret_value = (HDerr(file_id)); goto done; } if (Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &Readref, &length, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL) == FAIL) { Hendaccess(aid); ret_value = HDerr(file_id); goto done; } /* end if */ /* read palette */ if (Hread(aid, length, (uint8 *)palette) == FAIL) { Hendaccess(aid); ret_value = (HDerr(file_id)); goto done; } /* end if */ Hendaccess(aid); Lastref = Readref; ret_value = Hclose(file_id); done: return ret_value; } /* end DFPgetpal() */ /*-------------------------------------------------------------------------- NAME DFPputpal -- Write palette to file USAGE intn DFPputpal(filename,palette,overwrite,filemode) char *filename; IN: name of HDF file void * palette; IN: ptr to the buffer retrieve the palette from intn overwrite; IN: whether to (1) overwrite last palette written, or (0) write it as a fresh palette char *filemode; IN: if "a" append palette to file, "w" create new file RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Stores a palette in an HDF file, with options for creating new file or appending, and overwriting last palette written. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS To overwrite, the filename must be the same as for the previous call. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPputpal(const char *filename, const void *palette, intn overwrite, const char *filemode) { int32 file_id; intn ret_value = SUCCEED; HEclear(); if (!palette) HGOTO_ERROR(DFE_ARGS, FAIL); if (overwrite && strcmp(filename, Lastfile)) HGOTO_ERROR(DFE_BADCALL, FAIL); file_id = DFPIopen(filename, (*filemode == 'w') ? DFACC_CREATE : DFACC_WRITE); if (file_id == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* if we want to overwrite, Lastref is the ref to write. If not, if Writeref is set, we use that ref. If not we get a fresh ref. The ref to write is placed in Lastref */ if (!overwrite) Lastref = (uint16)(Writeref ? Writeref : Htagnewref(file_id, DFTAG_IP8)); if (Lastref == 0) HGOTO_ERROR(DFE_NOREF, FAIL); Writeref = 0; /* don't know ref to write after this */ /* write out palette */ if (Hputelement(file_id, DFTAG_IP8, Lastref, (const uint8 *)palette, (int32)768) < 0) { ret_value = (HDerr(file_id)); goto done; } /* Check for the tag/ref before creating it willy-nilly */ if (Hexist(file_id, DFTAG_LUT, Lastref) == FAIL) Hdupdd(file_id, DFTAG_LUT, Lastref, DFTAG_IP8, Lastref); ret_value = (Hclose(file_id)); done: return ret_value; } /* end DFPputpal() */ /*-------------------------------------------------------------------------- NAME DFPaddpal -- Append palette to file USAGE intn DFPaddpal(filename,palette) char *filename; IN: name of HDF file void * palette; IN: ptr to the buffer retrieve the palette from RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Appends a palette in an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPaddpal(const char *filename, const void *palette) { intn ret_value; ret_value = (DFPputpal(filename, palette, 0, "a")); return ret_value; } /* end DFPaddpal() */ /*-------------------------------------------------------------------------- NAME DFPnpals -- determine # of palettes in a file USAGE intn DFPnpals(filename) char *filename; IN: name of HDF file RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Determines the number of unique palettes in a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPnpals(const char *filename) { int32 file_id; intn curr_pal; /* current palette count */ int32 nip8, nlut; /* number of IP8s & number of LUTs */ intn npals; /* total number of palettes */ uint16 find_tag, find_ref; /* storage for tag/ref pairs found */ int32 find_off, find_len; /* storage for offset/lengths of tag/refs found */ int32 *pal_off; /* storage for an array of palette offsets */ intn i, j; /* local counting variable */ intn ret_value = SUCCEED; HEclear(); /* should use reopen if same file as last time - more efficient */ if ((file_id = DFPIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* count number of IPs */ if ((nip8 = Hnumber(file_id, DFTAG_IP8)) == FAIL) { ret_value = (HDerr(file_id)); goto done; } /* count number of LUTs */ if ((nlut = Hnumber(file_id, DFTAG_LUT)) == FAIL) { ret_value = (HDerr(file_id)); goto done; } npals = (intn)(nip8 + nlut); /* if no palettes just return zero and get out */ if (npals == 0) { if (Hclose(file_id) == FAIL) { ret_value = FAIL; goto done; } ret_value = npals; goto done; } /* Get space to store the palette offsets */ if ((pal_off = (int32 *)malloc(npals * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* go through the IP8s */ curr_pal = 0; find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_IP8, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { pal_off[curr_pal] = find_off; /* store offset */ curr_pal++; } /* end while */ /* go through the LUTs */ find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_LUT, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { pal_off[curr_pal] = find_off; /* store offset */ curr_pal++; } /* end while */ npals = curr_pal; /* reset the number of palettes we really have */ for (i = 1; i < curr_pal; i++) { /* go through the palettes looking for duplicates */ if (pal_off[i] != (-1)) for (j = 0; j < i; j++) { if (pal_off[i] == pal_off[j]) { npals--; /* if duplicate found, decrement the number of palettes */ pal_off[j] = (-1); /* mark as used, so we don't count it too... */ } /* end if */ } /* end for */ } /* end for */ free(pal_off); /* free offsets */ if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); ret_value = npals; done: return ret_value; } /* end DFPnpals() */ /*-------------------------------------------------------------------------- NAME DFPreadref -- set ref # of palette to read next USAGE intn DFPreadref(filename,ref) char *filename; IN: name of HDF file uint16 ref; IN: ref # of palette to read next RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the ref # of the next palette to read from a file GLOBAL VARIABLES Refset COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPreadref(const char *filename, uint16 ref) { int32 file_id; int32 aid; intn ret_value = SUCCEED; HEclear(); if ((file_id = DFPIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); aid = Hstartread(file_id, DFTAG_IP8, ref); if (aid == FAIL) { aid = Hstartread(file_id, DFTAG_LUT, ref); if (aid == FAIL) { ret_value = (HDerr(file_id)); goto done; } } /* end if */ Hendaccess(aid); Refset = ref; ret_value = (Hclose(file_id)); done: return ret_value; } /* end DFPreadref() */ /*-------------------------------------------------------------------------- NAME DFPwriteref -- set ref # of palette to write next USAGE intn DFPwriteref(filename,ref) char *filename; IN: name of HDF file uint16 ref; IN: ref # of palette to write next RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the ref # of the next palette to write to a file. The filename is ignored -- this is probably a bug. No matter what file the next palette is written to, it will have the reference number ref. GLOBAL VARIABLES Writeref --------------------------------------------------------------------------*/ intn DFPwriteref(const char *filename, uint16 ref) { intn ret_value = SUCCEED; (void)filename; Writeref = ref; return ret_value; } /* end DFPwriteref() */ /*-------------------------------------------------------------------------- NAME DFPrestart -- restart reading/writing palettes from the start of a file USAGE intn DFPrestart(void) RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Restart reading/writing palettes to a file. GLOBAL VARIABLES Lastfile COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFPrestart(void) { intn ret_value = SUCCEED; Lastfile[0] = '\0'; return ret_value; } /* end DFPrestart() */ /*-------------------------------------------------------------------------- NAME DFPlastref -- returns last ref # read/written USAGE uint16 DFPlastref(void) RETURNS ref # on on success, 0 on failure. DESCRIPTION Return the last ref # read/written from a file. GLOBAL VARIABLES Lastref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ uint16 DFPlastref(void) { uint16 ret_value; ret_value = Lastref; return ret_value; } /* end DFPlastref() */ /**************************************************************************/ /*----------------------- Internal routines ------------------------------*/ /**************************************************************************/ /*----------------------------------------------------------------------------- * Name: DFPIopen * Purpose: open or reopen a file * Inputs: filename: name of file to open * acc_mode : access mode * Returns: file pointer on success, NULL on failure with DFerror set * Users: HDF systems programmers, other DFP routines * Invokes: DFopen * Remarks: This is a hook for someday providing more efficient ways to * reopen a file, to avoid re-reading all the headers *---------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------- NAME DFPIopen -- open/reopen file for palette interface USAGE int32 DFPIopen(filename,acc_mode) char *filename; IN: name of HDF file intn acc_mode; IN: type of access to open file with RETURNS HDF file handle on success, FAIL on failure. DESCRIPTION Open/reopen a file for the DFP interface to work with. GLOBAL VARIABLES Refset, Readref, Lastfile COMMENTS, BUGS, ASSUMPTIONS This is a hook for someday providing more efficient ways to reopen a file, to avoid re-reading all the headers EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 DFPIopen(const char *filename, intn acc_mode) { int32 file_id; int32 ret_value = SUCCEED; /* use reopen if same file as last time - more efficient */ if (strncmp(Lastfile, filename, DF_MAXFNLEN) || (acc_mode == DFACC_CREATE)) { /* treat create as different file */ if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); Refset = 0; /* no ref to get set for this file */ Readref = 0; } /* end if */ else if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* remember filename, so reopen may be used next time if same file */ strncpy(Lastfile, filename, DF_MAXFNLEN); ret_value = (file_id); done: return ret_value; } /* end DFPIopen() */ hdf4-hdf4.3.1/hdf/src/dfpf.c000066400000000000000000000165131503061704500154500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfpF.c * Purpose: C stubs for Palette Fortran routines * Invokes: dfp.c dfkit.c * Contents: * dpigpal_ : Call DFPgetpal to get palette * dpippal_ : Call DFPputpal to write/overwrite palette in file * dpinpal_ : Call DFPnpals to get number of palettes in file * dpiwref_ : Call DFPwriteref to set ref of pal to write next * dpirref_ : Call DFPreadref to set ref of pal to read next * dprest_ : Call DFPrestart to get palettes afresh in file * dplref_ : Call DFPlastref to get ref of last pal read/written * DFPrestart_ : Call DFPrestart to get palettes afresh in file * DFPlastref_ : Call DFPlastref to get ref of last pal read/written * Remarks: none *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: dpigpal * Purpose: call DFPgetpal, get palette * Inputs: filename, fnlen: filename, length of name * pal: space to put palette * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFPgetpal *---------------------------------------------------------------------------*/ intf ndpigpal(_fcd filename, _fcd pal, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFPgetpal(fn, (void *)_fcdtocp(pal)); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dpippal * Purpose: Write palette to file * Inputs: filename: name of HDF file * palette: palette to be written to file * overwrite: if 1, overwrite last palette read or written * if 0, write it as a fresh palette * filemode: if "a", append palette to file * if "w", create new file * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF users, programmers, utilities * Invokes: DFPputpal * Remarks: To overwrite, the filename must be the same as for the previous * call *---------------------------------------------------------------------------*/ intf ndpippal(_fcd filename, _fcd pal, intf *overwrite, _fcd filemode, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFPputpal(fn, (void *)_fcdtocp(pal), (intn)*overwrite, (char *)_fcdtocp(filemode)); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dpinpal * Purpose: How many palettes are present in this file? * Inputs: filename, fnlen: name, length of HDF file * Returns: number of palettes on success, -1 on failure with DFerror set * Users: HDF programmers, other routines and utilities * Invokes: DFPnpals *---------------------------------------------------------------------------*/ intf ndpinpal(_fcd filename, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFPnpals(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dpirref * Purpose: Set ref of palette to get next * Inputs: filename: file to which this applies * ref: reference number of next get * Returns: 0 on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFPreadref * Remarks: checks if palette with this ref exists *---------------------------------------------------------------------------*/ intf ndpirref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFPreadref(fn, (uint16)*ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dpiwref * Purpose: Set ref of palette to put next * Inputs: filename: file to which this applies * ref: reference number of next put * fnlen: length of filename * Returns: 0 on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFPwriteref *---------------------------------------------------------------------------*/ intf ndpiwref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFPreadref(fn, (uint16)*ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dprest * Purpose: Do not remember info about file - get again from first palette * Inputs: none * Returns: 0 on success * Users: HDF programmers * Remarks: Invokes DFPrestart *---------------------------------------------------------------------------*/ intf ndprest(void) { return DFPrestart(); } /*----------------------------------------------------------------------------- * Name: dplref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFPlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndplref(void) { return (intf)DFPlastref(); } /*----------------------------------------------------------------------------- * Name: dfprestart * Purpose: Do not remember info about file - get again from first palette * Inputs: none * Returns: 0 on success * Users: HDF programmers * Remarks: Invokes DFPrestart *---------------------------------------------------------------------------*/ intf ndfprestart(void) { return DFPrestart(); } /*----------------------------------------------------------------------------- * Name: dfplastref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFPlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndfplastref(void) { return (intf)DFPlastref(); } hdf4-hdf4.3.1/hdf/src/dfpff.f000066400000000000000000000226751503061704500156270ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C C------------------------------------------------------------------------------ C File: dfpFf.f C Purpose: Fortran stubs for Palette Fortran routines C Invokes: dfpF.c dfkit.c C Contents: C dpgpal: Call dpigpal to get palette C dpapal: Call dpippal to add palette to file C dpppal: Call dpippal to write/overwrite palette in file C dpnpal: Call dpinpal to get number of palettes in file C dpwref: Call dpiwref to set ref of pal to write next C dprref: Call dpirref to set ref of pal to read next C dfpgetpal: Call dpigpal to get palette C dfpaddpal: Call dpippal to add palette to file C dfpputpal: Call dpippal to write/overwrite palette in file C dfpnpals: Call dpinpal to get number of palettes in file C dfpwriteref: Call dpiwref to set ref of pal to write next C dfpreadref: Call dpirref to set ref of pal to read next C Remarks: none C----------------------------------------------------------------------------*/ C------------------------------------------------------------------------------ C Name: dpgpal C Purpose: call dpigpal, get palette C Inputs: filename: filename to get pal from C pal: space to put palette C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpigpal C----------------------------------------------------------------------------*/ integer function dpgpal(filename, pal) character*(*) filename character*(*) pal integer dpigpal dpgpal = dpigpal(filename, pal, len(filename)) return end C------------------------------------------------------------------------------ C Name: dpapal C Purpose: call dpippal, add palette C Inputs: filename: filename to put pal into C pal: palette C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpippal C----------------------------------------------------------------------------*/ integer function dpapal(filename, pal) character*(*) filename character*(*) pal integer dpippal dpapal = dpippal(filename, pal, 0, 'a', len(filename)) return end C------------------------------------------------------------------------------ C Name: dpppal C Purpose: call dpippal, write palette C Inputs: filename: filename to put pal to C pal: palette C ow, filemode: see dfpputpal C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpippal C----------------------------------------------------------------------------*/ integer function dpppal(filename, pal, ow, filemode) character*(*) filename character*(*) pal integer dpippal, ow character*(*) filemode dpppal = dpippal(filename, pal, ow, filemode, len(filename)) return end C------------------------------------------------------------------------------ C Name: dpnpals C Purpose: How many palettes are present in this file? C Inputs: filename: name of HDF file C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpinpal C----------------------------------------------------------------------------*/ integer function dpnpals(filename) character*(*) filename integer dpinpal dpnpals = dpinpal(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dpwref C Purpose: Ref to write next C Inputs: filename: name of HDF file C ref: ref to write next C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpiwref C----------------------------------------------------------------------------*/ integer function dpwref(filename, ref) character*(*) filename integer ref, dpiwref dpwref = dpiwref(filename, ref, len(filename)) return end C------------------------------------------------------------------------------ C Name: dprref C Purpose: Ref to read next C Inputs: filename: name of HDF file C ref: ref to read next C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpirref C----------------------------------------------------------------------------*/ integer function dprref(filename, ref) character*(*) filename integer ref, dpirref dprref = dpirref(filename, ref, len(filename)) return end CEND7MAX C------------------------------------------------------------------------------ C Name: dfpgetpal C Purpose: call dpigpal, get palette C Inputs: filename: filename to get pal from C pal: space to put palette C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpigpal C----------------------------------------------------------------------------*/ integer function dfpgetpal(filename, pal) character*(*) filename character*(*) pal integer dpigpal dfpgetpal = dpigpal(filename, pal, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfpaddpal C Purpose: call dpippal, add palette C Inputs: filename: filename to put pal into C pal: palette C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpippal C----------------------------------------------------------------------------*/ integer function dfpaddpal(filename, pal) character*(*) filename character*(*) pal integer dpippal dfpaddpal = dpippal(filename, pal, 0, 'a', len(filename)) return end C------------------------------------------------------------------------------ C Name: dfpputpal C Purpose: call dpippal, write palette C Inputs: filename: filename to put pal to C pal: palette C ow, filemode: see dfpputpal C Returns: 0 on success, -1 on failure with DFerror set C Users: Fortran stub routine C Invokes: dpippal C----------------------------------------------------------------------------*/ integer function dfpputpal(filename, pal, ow, filemode) character*(*) filename character*(*) pal integer dpippal, ow character*(*) filemode dfpputpal = dpippal(filename, pal, ow, filemode, len(filename)) return end C------------------------------------------------------------------------------ C Name: dpnpals C Purpose: How many palettes are present in this file? C Inputs: filename: name of HDF file C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpinpal C----------------------------------------------------------------------------*/ integer function dfpnpals(filename) character*(*) filename integer dpinpal dfpnpals = dpinpal(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfpwriteref C Purpose: Ref to write next C Inputs: filename: name of HDF file C ref: ref to write next C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpiwref C----------------------------------------------------------------------------*/ integer function dfpwriteref(filename, ref) character*(*) filename integer ref, dpiwref dfpwriteref = dpiwref(filename, ref, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfpreadref C Purpose: Ref to read next C Inputs: filename: name of HDF file C ref: ref to read next C Returns: number of palettes on success, -1 on failure with DFerror set C Users: HDF programmers, other routines and utilities C Invokes: dpirref C----------------------------------------------------------------------------*/ integer function dfpreadref(filename, ref) character*(*) filename integer ref, dpirref dfpreadref = dpirref(filename, ref, len(filename)) return end hdf4-hdf4.3.1/hdf/src/dfr8.c000066400000000000000000001511311503061704500153700ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfr8.c * Purpose: read and write 8-bit Raster Image Groups * Invokes: df.c, dfcomp.c, dfgroup.c, dfrig_priv.h * Contents: * DFR8setpalette : specify palette to be used with subsequent 8-bit images * DFR8setcompress : Set the compression for next image written * DFR8putimage : write 8-bit image into an HDF file * DFR8addimage : append another 8-bit image to an HDF file * DFR8getdims : retrieve information about 8-bit image dimensions * DFR8getimage : retrieve 8-bit image and associated palette * DFR8putrig : write out a raster image group for 8-bit images * DFR8getrig : read in a raster image group for 8-bit images * DFR8nimages : number of images in HDF file * DFR8readref : get image with this reference number next * DFR8writeref : put image with this reference number next * DFR8lastref : return reference number of last element read or written * DFR8restart : forget info about last file accessed, restart from * beginning * Private: * DFR8Iopen: open/reopen file * DFR8Iriginfo: obtain info about next RIG/RI8 to get * DFR8Iputimage : internal routine that write 8-bit images to files * Remarks: A RIG specifies attributes associated with an image - palette, * dimension, compression, color compensation etc. * The palette for an 8-bit image is assumed to always be 768 (PALETTE_SIZE) bytes * The palette is arranged as RGBRGB... *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfrig_priv.h" /* Private constants */ #define PALETTE_SIZE 768 /* Private Variables */ static uint8 *paletteBuf = NULL; static uint16 Refset = 0; /* Ref of image to get next */ static uint16 Lastref = 0; /* Last ref read/written */ static uint16 Writeref = 0; /* ref of next image to put in this file */ static intn foundRig = -1; /* -1: don't know if HDF file has RIGs 0: No RIGs, try for RI8s etc. 1: RIGs used, ignore RI8s etc. */ static intn Newdata = 0; /* does Readrig contain fresh data? */ static intn Newpalette = -1; /* -1 = no palette is associated 0 = palette already written out 1 = new palette, not yet written out */ static intn CompressSet = FALSE; /* Whether the compression parameters have been set for the next image */ static int32 CompType = COMP_NONE; /* What compression to use for the next image */ static comp_info CompInfo; /* Params for compression to perform */ static char Lastfile[DF_MAXFNLEN]; /* last file opened */ static DFRrig Readrig = { /* information about RIG being read */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }; static DFRrig Writerig = { /* information about RIG being written */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }; static DFRrig Zrig = { /* empty RIG for initialization */ NULL, 0, 0, (float32)0.0, (float32)0.0, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {(float32)0.0, (float32)0.0, (float32)0.0}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, {0, 0}, {0, 0, 0, 0, {0, 0}, {0, 0}}, }; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* private functions */ static intn DFR8Iputimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress, intn append); static int32 DFR8Iopen(const char *filename, intn acc_mode); static intn DFR8Iriginfo(int32 file_id); static intn DFR8getrig(int32 file_id, uint16 ref, DFRrig *rig); static intn DFR8putrig(int32 file_id, uint16 ref, DFRrig *rig, intn wdim); static intn DFR8Istart(void); /*-------------------------------------------------------------------------- NAME DFR8setcompress -- set compression scheme for 8-bit image USAGE intn DFR8setcompress(type,cinfo) int32 type; IN: the type of compression to perform on the next image comp_info *cinfo; IN: ptr to compression information structure RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the scheme used to compress the next 8-bit raster image written out with the DFR8 interface. Valid compression types available for this interface are listed in hcomp.h as COMP_nnnn. GLOBAL VARIABLES Uses the CompressSet, CompType and CompInfo global variables to store the information about the compression scheme. COMMENTS, BUGS, ASSUMPTIONS Only the JPEG compression type currently uses the cinfo structure. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8setcompress(int32 type, comp_info *cinfo) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (type == COMP_NONE) { /* quick check for no compression */ CompType = 0; HGOTO_DONE(SUCCEED); } /* end if */ if (type < 0 || type > COMP_MAX_COMP || compress_map[type] == 0) HGOTO_ERROR(DFE_BADSCHEME, FAIL); CompressSet = TRUE; /* map JPEG compression into correct type of JPEG compression */ if (type == COMP_JPEG) CompType = DFTAG_GREYJPEG5; else /* otherwise, just use mapped tag */ CompType = (int32)compress_map[type]; CompInfo = (*cinfo); done: return ret_value; } /* end DFR8setcompress() */ /*-------------------------------------------------------------------------- NAME DFR8getdims -- get dimensions of next image from RIG, also if there is a palette USAGE intn DFR8getdims(filename,pxdim,pydim,pispal) char *filename; IN: name of HDF file int32 *pxdim, *pydim; OUT: ptr to locations for returning X & Y dims intn *pispal; OUT: ptr to location for returning if there is a palette RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Moves to the next 8-bit raster image in a file and returns the dimensions and whether there is a palette associated with it. Will also handle file with just raster-8 tags: RI8, CI8, ID8, IP8 GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8getdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pispal) { int32 file_id = (-1); intn ret_value = SUCCEED; HEclear(); if (!filename || !*filename || !pxdim || !pydim) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = DFR8Iopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (DFR8Iriginfo(file_id) == FAIL) /* reads next RIG or RI8 from file */ HGOTO_ERROR(DFE_INTERNAL, FAIL); Newdata = 1; *pxdim = Readrig.descimage.xdim; *pydim = Readrig.descimage.ydim; if (pispal) *pispal = Readrig.lut.tag ? 1 : 0; /* is there a palette */ done: if (file_id != (-1)) Hclose(file_id); return ret_value; } /* end DFR8getdims() */ /*-------------------------------------------------------------------------- NAME DFR8getimage -- get next image from a RIG, get palette also if desired USAGE intn DFR8getimage(filename,image,xdim,ydim,pal) char *filename; IN: name of HDF file uint8 *image; OUT: ptr to buffer to store image in int32 xdim,ydim; IN: dims of space allocated by user for image uint8 *pal; OUT: 768-byte space for palette, NULL if palette not wanted RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Reads the next 8-bit raster image from the file specified into the image buffer and it's associated palette into the palette buffer if the pal ptr is not NULL. Will also get RI8s and CI8s if no RIGs in file. Normally,DFR8getdims is called first and it finds next image to get. But if that is not called, DFR8getimage will itself find next image. Automatically decompresses images. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8getimage(const char *filename, uint8 *image, int32 xdim, int32 ydim, uint8 *pal) { int32 file_id = (-1); intn ret_value = SUCCEED; HEclear(); if (!filename || !*filename || !image || (xdim <= 0) || (ydim <= 0)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = DFR8Iopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (!Newdata) { /* if Readrig not fresh */ if (DFR8Iriginfo(file_id) == FAIL) /*reads next RIG or RI8 from file */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ Newdata = 0; /* read new RIG next time */ if ((Readrig.descimage.xdim > xdim) || (Readrig.descimage.ydim > ydim)) HGOTO_ERROR(DFE_ARGS, FAIL); /* read image */ if (Readrig.descimage.compr.tag) { /* compressed image */ if (DFgetcomp(file_id, Readrig.image.tag, Readrig.image.ref, image, Readrig.descimage.xdim, Readrig.descimage.ydim, Readrig.descimage.compr.tag) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else { /* non-compressed raster image */ if (Hgetelement(file_id, Readrig.image.tag, Readrig.image.ref, image) == FAIL) HGOTO_ERROR(DFE_GETELEM, FAIL); } /* end else */ if (xdim > Readrig.descimage.xdim) { int32 off1, off2; int32 x, y; off1 = (Readrig.descimage.ydim - 1) * xdim; off2 = (Readrig.descimage.ydim - 1) * Readrig.descimage.xdim; for (y = Readrig.descimage.ydim - 1; y > 0; y--) { for (x = Readrig.descimage.xdim - 1; x >= 0; x--) image[off1 + x] = image[off2 + x]; off1 -= xdim; off2 -= Readrig.descimage.xdim; } /* end for */ } /* end for */ if (pal && Readrig.lut.tag) { /* read palette */ if (Hgetelement(file_id, Readrig.lut.tag, Readrig.lut.ref, pal) == FAIL) HGOTO_ERROR(DFE_GETELEM, FAIL); } /* end if */ if ((ret_value = Hclose(file_id)) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /* end DFR8getimage() */ /*-------------------------------------------------------------------------- NAME DFR8setpalette -- set palette for subsequent images USAGE intn DFR8setpalette(pal) uint8 *pal; IN: 768-byte buffer for palette to use for next image RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Stores a palette for use with further 8-bit raster images written through this interface. If pal is NULL, no palette is associated with subsequent images. GLOBAL VARIABLES paletteBuf, Writerig, Newpalette COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8setpalette(uint8 *pal) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check if paletteBuf buffer has been allocated */ if (paletteBuf == NULL) { paletteBuf = (uint8 *)calloc(PALETTE_SIZE, sizeof(uint8)); if (paletteBuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (!pal) { Newpalette = -1; /* no palette */ Writerig.lut.tag = 0; Writerig.lut.ref = 0; /* forget tag/ref of previous palette */ Writerig.desclut.xdim = 0; Writerig.desclut.ncomponents = 0; } else { /* store palette */ memcpy(paletteBuf, pal, PALETTE_SIZE); Newpalette = 1; } done: return ret_value; } /* end DFR8setpalette() */ /*-------------------------------------------------------------------------- NAME DFR8Iputimage -- Internal routine to write RIG to file USAGE intn DFR8Iputimage(filename, image, xdim, ydim, compress, append) char *filename; IN: name of HDF file const void * image; IN: ptr to buffer image is stored in int32 xdim,ydim; IN: dims of space allocated by user for image uint16 compress; IN: type of compression to store image with intn append; IN: whether to (0) overwrite existing file, or (1) append image to file. RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Stores an image in an HDF file. If a palette has been specified to use with 8-bit rasters, then it will be written to the file too and associated with the image. GLOBAL VARIABLES paletteBuf, Newpalette, Writeref, CompressSet, CompType, CompInfo, Lastref, Writerig COMMENTS, BUGS, ASSUMPTIONS Palette will be associated with image is isPalette is 1 Palette will be written to file if not written before (Palref=0) Creates both RIG and RI8/CI8 tags, to accommodate older programs EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFR8Iputimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress, intn append) { intn acc_mode = 0; /* create if op 0, write if op 1 */ int32 file_id = (-1); uint16 r8tag; /* RIG and raster tags of image being written */ uint8 *pal = NULL; /* pointer to palette to be written */ uint8 newpal[PALETTE_SIZE] = {0}; /* Imcomp creates new palette to be associated */ intn wdim = 0; /* have dimensions already been written out? */ intn ret_value = SUCCEED; HEclear(); if (!filename || !*filename || !image || (xdim <= 0) || (ydim <= 0)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check if Palette buffer has been allocated */ if (paletteBuf == NULL) { paletteBuf = (uint8 *)calloc(PALETTE_SIZE, sizeof(uint8)); if (paletteBuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } pal = (Newpalette >= 0) ? paletteBuf : NULL; acc_mode = append ? DFACC_WRITE : DFACC_CREATE; if ((file_id = DFR8Iopen(filename, acc_mode)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* write out image */ if (compress || CompressSet) { /* if a compression type has been set, check if it's the same */ if (CompressSet == FALSE || (compress > (uint16)1 && (int32)compress != CompType && !(compress == (uint16)COMP_JPEG && CompType == (int32)DFTAG_GREYJPEG5))) { if ((int32)compress > COMP_MAX_COMP || compress_map[compress] == 0) HGOTO_ERROR(DFE_BADSCHEME, FAIL); /* map JPEG compression into correct type of JPEG compression */ if (compress == COMP_JPEG) { CompType = DFTAG_GREYJPEG5; /* set up some sane JPEG params */ CompInfo.jpeg.quality = 75; CompInfo.jpeg.force_baseline = TRUE; } /* end if */ else /* otherwise, just use mapped tag */ CompType = (int32)compress_map[compress]; } /* end if */ if (!Writeref) if ((Writeref = Hnewref(file_id)) == 0) HGOTO_ERROR(DFE_NOREF, FAIL); if (DFputcomp(file_id, DFTAG_CI, Writeref, image, xdim, ydim, pal, newpal, (int16)CompType, &CompInfo) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); Writerig.image.tag = DFTAG_CI; if (CompType == DFTAG_IMC) { pal = newpal; /* Imcomp creates new pal */ Newpalette = 1; /* write out palette */ } /* end if */ } /* end if */ else { /* image need not be compressed */ if (!Writeref) if ((Writeref = Hnewref(file_id)) == 0) HGOTO_ERROR(DFE_NOREF, FAIL); if (Hputelement(file_id, DFTAG_RI, Writeref, image, xdim * ydim) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Writerig.image.tag = DFTAG_RI; } /* end else */ Writerig.image.ref = Writeref; Writerig.descimage.ncomponents = 1; Writerig.aspectratio = (float32)1.0; /* Write out Raster-8 tags for those who want it */ if (CompType != DFTAG_GREYJPEG5) { r8tag = (uint16)(CompType ? ((CompType == DFTAG_RLE) ? DFTAG_CI8 : DFTAG_II8) : DFTAG_RI8); if (Hdupdd(file_id, r8tag, Writeref, Writerig.image.tag, Writeref) == FAIL) HGOTO_ERROR(DFE_NOFREEDD, FAIL); } /* end if */ /* Write out palette */ if (pal) { /* if there is a palette */ if (Newpalette == 1) { /* write palette */ if (Hputelement(file_id, DFTAG_LUT, Writeref, pal, (int32)PALETTE_SIZE) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Writerig.lut.tag = DFTAG_LUT; Writerig.lut.ref = Writeref; Writerig.desclut.xdim = PALETTE_SIZE; Writerig.desclut.ncomponents = 1; } /* end if */ if (CompType != DFTAG_IMC) Newpalette = 0; /* if IMCOMP, original palette not written out */ /* put in Raster-8 stuff also, for those who want it */ Hdeldd(file_id, DFTAG_IP8, Writeref); if (Hdupdd(file_id, DFTAG_IP8, Writeref, Writerig.lut.tag, Writerig.lut.ref) == FAIL) HGOTO_ERROR(DFE_NOFREEDD, FAIL); } /* end if */ /* Write out RIG */ if ((Writerig.descimage.xdim == xdim) && (Writerig.descimage.ydim == ydim) && (Writerig.descimage.compr.tag == (uint16)CompType)) wdim = 0; else { wdim = 1; Writerig.descimage.xdim = xdim; Writerig.descimage.ydim = ydim; Writerig.descimage.compr.tag = (uint16)CompType; Writerig.descimage.compr.ref = Writeref; } /* end else */ /* write ID, NT */ if (DFR8putrig(file_id, Writeref, &Writerig, wdim) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); Lastref = Writeref; /* remember ref written */ Writeref = 0; /* don't know ref to write next */ CompressSet = FALSE; /* Reset Compression flag and type */ CompType = COMP_NONE; ret_value = Hclose(file_id); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /* end DFR8Iputimage() */ /*-------------------------------------------------------------------------- NAME DFR8putimage -- Write 8-bit raster image to HDF file USAGE intn DFR8putimage(filename, image, xdim, ydim, compress) char *filename; IN: name of HDF file const void * image; IN: ptr to buffer to store image in int32 xdim,ydim; IN: dims of space allocated by user for image uint16 compress; IN: type of compression to store image with RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Stores an image in an HDF file. If a palette has been specified to use with 8-bit rasters, then it will be written to the file too and associated with the image. This function overwrites existing HDF files. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8putimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); ret_value = (DFR8Iputimage(filename, image, xdim, ydim, compress, 0)); done: return ret_value; } /* end DFR8putimage() */ /*-------------------------------------------------------------------------- NAME DFR8addimage -- Append 8-bit raster image to HDF file USAGE intn DFR8putimage(filename, image, xdim, ydim, compress) char *filename; IN: name of HDF file const void * image; IN: ptr to buffer to store image in int32 xdim,ydim; IN: dims of space allocated by user for image uint16 compress; IN: type of compression to store image with RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Stores an image in an HDF file. If a palette has been specified to use with 8-bit rasters, then it will be written to the file too and associated with the image. This function does not overwrite existing HDF files, just appends the to the file. It will create the file if necessary. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8addimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); ret_value = (DFR8Iputimage(filename, image, xdim, ydim, compress, 1)); done: return ret_value; } /* end DFR8addimage() */ /*****************************************************************************/ /* This is the next lower layer - procedures to get and put a RIG. */ /* These are specific to 8-bit */ /*****************************************************************************/ /*-------------------------------------------------------------------------- NAME DFR8getrig -- Read a RIG into memory USAGE intn DFR8getrig(file_id,ref,rig) int32 file_id; IN: HDF file ID of file to retrieve RIG from uint16 ref; IN: ref # of RIG to get DFRrig *rig; OUT: ptr to RIG structure to place info in RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Retrieves a specific RIG from an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This function seems to be a low level routine, but could be exported. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFR8getrig(int32 file_id, uint16 ref, DFRrig *rig) { uint16 elt_tag; uint16 elt_ref; uint8 ntstring[4]; int32 GroupID; uint8 R8tbuf[64]; intn ret_value = SUCCEED; HEclear(); if (!HDvalidfid(file_id) || !ref || !rig) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* read RIG into memory */ if ((GroupID = DFdiread(file_id, DFTAG_RIG, ref)) == FAIL) HGOTO_ERROR(DFE_BADGROUP, FAIL); *rig = Zrig; /* fill rig with zeroes */ while (DFdiget(GroupID, &elt_tag, &elt_ref) != FAIL) { /*get next tag/ref from RIG */ switch (elt_tag) { /* process tag/ref */ case DFTAG_CI: case DFTAG_RI: rig->image.tag = elt_tag; /* put tag/ref in struct */ rig->image.ref = elt_ref; break; case DFTAG_LUT: rig->lut.tag = elt_tag; rig->lut.ref = elt_ref; break; case DFTAG_ID: /* read description info */ if (Hgetelement(file_id, elt_tag, elt_ref, R8tbuf) != FAIL) { uint8 *p; p = R8tbuf; INT32DECODE(p, rig->descimage.xdim); INT32DECODE(p, rig->descimage.ydim); UINT16DECODE(p, rig->descimage.nt.tag); UINT16DECODE(p, rig->descimage.nt.ref); INT16DECODE(p, rig->descimage.ncomponents); INT16DECODE(p, rig->descimage.interlace); UINT16DECODE(p, rig->descimage.compr.tag); UINT16DECODE(p, rig->descimage.compr.ref); } /* end if */ else { DFdifree(GroupID); ret_value = FAIL; goto done; } if (rig->descimage.ncomponents != 1) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADCALL, FAIL); } if (rig->descimage.nt.tag == 0) break; /* old RIGs */ /* read NT */ if (Hgetelement(file_id, rig->descimage.nt.tag, rig->descimage.nt.ref, ntstring) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } if ((ntstring[2] != 8) || (ntstring[1] != DFNT_UCHAR)) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADCALL, FAIL); } break; default: /* ignore unknown tags */ break; } /* end switch */ } /* end while */ done: return ret_value; } /* end DFR8getrig() */ /*-------------------------------------------------------------------------- NAME DFR8putrig -- Write RIG struct out to HDF file USAGE intn DFR8putrig(file_id,ref,rig,wdim) int32 file_id; IN: HDF file ID of file to put RIG into uint16 ref; IN: ref # of RIG to put DFRrig *rig; IN: ptr to RIG structure to write to file intn wdim; IN: if (1) write new descr. records, (0) if records already written RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Writes a specific RIG to an HDF file. If wdim is 1, then the ID & ID8 records will be written also GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This function seems to be a low level routine, but could be exported. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFR8putrig(int32 file_id, uint16 ref, DFRrig *rig, intn wdim) { static uint16 prevdimref = 0; /*ref of previous dimension record, to reuse */ R8dim im8dim; uint8 ntstring[4]; int32 GroupID; uint8 R8tbuf[64]; intn ret_value = SUCCEED; HEclear(); if (!HDvalidfid(file_id) || !ref) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!rig->descimage.nt.tag) { /* construct and write out NT */ ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = DFNT_UCHAR; /* type */ ntstring[2] = 8; /* width: RIG data is 8-bit chars */ ntstring[3] = DFNTC_BYTE; /* class: data are numeric values */ if (Hputelement(file_id, DFTAG_NT, ref, ntstring, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); rig->descimage.nt.tag = DFTAG_NT; rig->descimage.nt.ref = ref; } /* end if */ im8dim.xd = (uint16)rig->descimage.xdim; im8dim.yd = (uint16)rig->descimage.ydim; if (wdim) { uint8 *p; p = R8tbuf; INT32ENCODE(p, rig->descimage.xdim); INT32ENCODE(p, rig->descimage.ydim); UINT16ENCODE(p, rig->descimage.nt.tag); UINT16ENCODE(p, rig->descimage.nt.ref); INT16ENCODE(p, rig->descimage.ncomponents); INT16ENCODE(p, rig->descimage.interlace); UINT16ENCODE(p, rig->descimage.compr.tag); UINT16ENCODE(p, rig->descimage.compr.ref); if (Hputelement(file_id, DFTAG_ID, ref, R8tbuf, (int32)(p - R8tbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); /* write out ID8 */ p = R8tbuf; UINT16ENCODE(p, im8dim.xd); UINT16ENCODE(p, im8dim.yd); if (Hputelement(file_id, DFTAG_ID8, ref, R8tbuf, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); prevdimref = ref; } /* end if */ if (!prevdimref) HGOTO_ERROR(DFE_ARGS, FAIL); /* prepare to start writing rig */ /* ### NOTE: the second parameter to this call may go away */ if ((GroupID = DFdisetup(10)) == FAIL) HGOTO_ERROR(DFE_GROUPSETUP, FAIL); /* max 10 tag/refs in set */ /* add tag/ref to RIG - image description, image and palette */ if (DFdiput(GroupID, DFTAG_ID, prevdimref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if (DFdiput(GroupID, rig->image.tag, rig->image.ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if (rig->lut.ref && DFdiput(GroupID, rig->lut.tag, rig->lut.ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* write out RIG */ if ((ret_value = DFdiwrite(file_id, GroupID, DFTAG_RIG, ref)) == FAIL) HGOTO_ERROR(DFE_GROUPWRITE, FAIL); done: return ret_value; } /* end DFR8putrig() */ /*-------------------------------------------------------------------------- NAME DFR8nimages -- Determines the number of 8-bit raster images in a file USAGE intn DFR8nimages(filename) char *filename; IN: filename to check # of images RETURNS number of images on success, -1 on failure. DESCRIPTION Determines the number of unique 8-bit images in the file. Only counts RIGs and RI8s which point to the same image once. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Does not count 8-bit SDS datasets. (Should not either!) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8nimages(const char *filename) { int32 file_id = -1; int32 group_id = -1; /* group ID for looking at RIG's */ uint16 elt_tag = 0, elt_ref = 0; /* tag/ref of items in a RIG */ intn curr_image; /* current image gathering information about */ intn nimages; /* total number of potential images */ int32 nrig, nri8, nci8; /* number of RIGs, RI8s, and CI8s */ int32 *img_off; /* storage for an array of image offsets */ uint16 rig_tag, rig_ref; /* storage for tag/ref pairs of RIGs */ intn found_8bit; /* indicates whether a RIG is an 8-bit RIG */ uint16 find_tag, find_ref; /* storage for tag/ref pairs found */ int32 find_off, find_len; /* storage for offset/lengths of tag/refs found */ uint8 GRtbuf[64] = {0}; /* local buffer to read the ID element into */ intn i, j; /* local counting variable */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* should use reopen if same file as last time - more efficient */ file_id = DFR8Iopen(filename, DFACC_READ); if (file_id == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* In a completely psychotic file, there could be RIGs with no corresponding RI8s and also RI8s with no corresponding RIGs, so assume the worst case and then run through them all to eliminate matched pairs */ nrig = Hnumber(file_id, DFTAG_RIG); /* count the number of RIGS */ if (nrig == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nri8 = Hnumber(file_id, DFTAG_RI8); /* add the number of RI8 and CI8s */ if (nri8 == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nci8 = Hnumber(file_id, DFTAG_CI8); if (nci8 == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nimages = (intn)(nrig + nri8 + nci8); /* if there are no images just close the file and get out */ if (nimages == 0) { if (Hclose(file_id) == FAIL) ret_value = FAIL; else ret_value = nimages; goto done; /* we are done */ } /* Get space to store the image offsets */ if ((img_off = (int32 *)calloc((size_t)nimages, sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* go through the RIGs looking for 8-bit images */ curr_image = 0; find_tag = find_ref = 0; find_off = find_len = -1; while (Hfind(file_id, DFTAG_RIG, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { /* read RIG into memory */ if ((group_id = DFdiread(file_id, DFTAG_RIG, find_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); found_8bit = FALSE; /* initialize to no 8-bit image found */ rig_tag = rig_ref = 0; /* initialize bogus tag/ref */ while (!DFdiget(group_id, &elt_tag, &elt_ref)) { /* get next tag/ref */ if (elt_tag == DFTAG_ID) { /* just look for ID tags to get the number of components */ if (Hgetelement(file_id, elt_tag, elt_ref, GRtbuf) != FAIL) { uint16 temp16; /* temporary holding variable */ int32 temp; /* temporary holding variable */ int16 ncomponents; /* number of image components */ uint8 *p; p = GRtbuf; INT32DECODE(p, temp); INT32DECODE(p, temp); UINT16DECODE(p, temp16); UINT16DECODE(p, temp16); INT16DECODE(p, ncomponents); if (ncomponents == 1) /* whew, all that work and we finally found an 8-bit image */ found_8bit = TRUE; } /* end if */ else { DFdifree(group_id); HGOTO_ERROR(DFE_GETELEM, FAIL); } } /* end if */ else /* check for the image tag/ref */ if (elt_tag == DFTAG_CI || elt_tag == DFTAG_RI) { /* keep for later */ rig_tag = elt_tag; rig_ref = elt_ref; } /* end if */ } /* end while */ if (found_8bit) { /* check for finding an 8-bit RIG */ if ((uintn)rig_tag > (uintn)0 && (uintn)rig_ref > (uintn)0) { /* make certain we found an image */ img_off[curr_image] = Hoffset(file_id, rig_tag, rig_ref); /* store offset */ curr_image++; } /* end if */ } /* end if */ } /* end while */ /* go through the RI8s */ find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_RI8, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { img_off[curr_image] = find_off; /* store offset */ curr_image++; } /* end while */ /* go through the CI8s */ find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_CI8, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { img_off[curr_image] = find_off; /* store offset */ curr_image++; } /* end while */ nimages = curr_image; /* reset the number of images we really have */ for (i = 1; i < curr_image; i++) { /* go through the images looking for duplicates */ for (j = 0; j < i; j++) { if (img_off[i] == img_off[j]) { nimages--; /* if duplicate found, decrement the number of images */ img_off[j] = (-1); /* mark as used, so we don't count it too... */ } /* end if */ } /* end for */ } /* end for */ free(img_off); /* free offsets */ if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); ret_value = nimages; done: return ret_value; } /* end DFR8nimages() */ /*-------------------------------------------------------------------------- NAME DFR8readref -- Set ref of image to get next USAGE intn DFR8readref(char *filename, uint16 ref) char *filename; IN: filename to set read ref # uint16 ref; IN: ref# of next image to read RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the reference # of the RIG to read from next. GLOBAL VARIABLES Refset, Newdata COMMENTS, BUGS, ASSUMPTIONS Checks if image with this ref exists. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8readref(const char *filename, uint16 ref) { int32 file_id = (-1); int32 aid; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if ((file_id = DFR8Iopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if ((aid = Hstartread(file_id, DFTAG_RIG, ref)) == FAIL && (aid = Hstartread(file_id, DFTAG_RI8, ref)) == FAIL && (aid = Hstartread(file_id, DFTAG_CI8, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); Refset = ref; Newdata = 0; Hendaccess(aid); ret_value = Hclose(file_id); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (file_id != (-1)) Hclose(file_id); } return ret_value; } /* end DFR8readref() */ /*-------------------------------------------------------------------------- NAME DFR8writeref -- Set ref of image to put next USAGE intn DFR8writeref(char *filename, uint16 ref) char *filename; IN: filename to set write ref # uint16 ref; IN: ref# of next image to write RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Sets the reference # of the RIG to write to next. GLOBAL VARIABLES Writeref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8writeref(const char *filename, uint16 ref) { intn ret_value = SUCCEED; (void)filename; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); Writeref = ref; done: return ret_value; } /* end DFR8writeref() */ /*-------------------------------------------------------------------------- NAME DFR8restart -- Restart reading/writing from beginning of file USAGE intn DFR8restart(void) RETURNS SUCCEED on success, FAIL on failure. DESCRIPTION Restarts reading and writing of RIGs from file from the beginning. GLOBAL VARIABLES Lastfile COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8restart(void) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); Lastfile[0] = '\0'; done: return ret_value; } /* end DFR8restart() */ /*-------------------------------------------------------------------------- NAME DFR8lastref -- Return last ref # written or read USAGE uint16 DFR8lastref(void) RETURNS Ref # on success, 0 on failure. DESCRIPTION Returns the last ref # written to or read from. GLOBAL VARIABLES Lastref COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ uint16 DFR8lastref(void) { uint16 ret_value = 0; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, 0); ret_value = Lastref; done: return ret_value; } /* end DFR8lastref() */ /*-------------------------------------------------------------------------- * NAME * DFR8getpalref - get the reference number of the palette * DESCRIPTION * Convenience function to get reference number of the palette of * last image. Must come after DFR8getdims() since it relies on * this call to fill the Readrig structure * RETURNS * SUCCEED. --------------------------------------------------------------------------*/ intn DFR8getpalref(uint16 *pal_ref) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFR8Istart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); *pal_ref = Readrig.lut.ref; /* ref of palette */ done: return ret_value; } /* end DFR8getpalref() */ /*************************************************************************/ /*----------------------- Internal routines -----------------------------*/ /*************************************************************************/ /*-------------------------------------------------------------------------- NAME DFR8Iopen -- open or reopen a file USAGE int32 DFR8Iopen(filename, acc_mode) char *filename; IN: name of file to open intn acc_mode; IN: access mode to open file with RETURNS HDF file ID on success, FAIL on failure DESCRIPTION Used to open/reopen a file for the DFR8 interface. GLOBAL VARIABLES Lastfile, foundRig, Refset, Newdata, Readrig, Writerig, Newpalette COMMENTS, BUGS, ASSUMPTIONS This is a hook for someday providing more efficient ways to reopen a file, to avoid re-reading all the headers. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int32 DFR8Iopen(const char *filename, intn acc_mode) { int32 file_id; int32 ret_value = SUCCEED; /* use reopen if same file as last time - more efficient */ if (strncmp(Lastfile, filename, DF_MAXFNLEN) || (acc_mode == DFACC_CREATE)) { /* treat create as different file */ if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); foundRig = -1; /* don't know if any RIGs in file */ Refset = 0; /* no ref to get set for this file */ Newdata = 0; Readrig = Zrig; /* blank out read/write RIGs */ Writerig = Zrig; if (Newpalette != (-1)) Newpalette = 1; /* need to write out palette */ } /* end if */ else { if ((file_id = Hopen(filename, acc_mode, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); } /* end else */ /* remember filename, so reopen may be used next time if same file */ strncpy(Lastfile, filename, DF_MAXFNLEN); Lastfile[DF_MAXFNLEN - 1] = '\0'; ret_value = file_id; done: return ret_value; } /* end DFR8Iopen() */ /*-------------------------------------------------------------------------- NAME DFR8Iriginfo -- Get information about next RIG or RI8 in file USAGE intn DFR8Iriginfo(file_id) int32 file_id; IN: HDF file ID to read from RETURNS SUCCEED on success, FAIL on failure DESCRIPTION Reads in a RIGs structure into internal data structures, or if no RIGs are found, patches things together from RI8 information. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS if Refset is set, gets image with that ref, if any. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFR8Iriginfo(int32 file_id) { uint16 riref = 0, ciref = 0; int32 aid = FAIL; uint16 ref; uint8 R8tbuf[64]; intn ret_value = SUCCEED; HEclear(); /* find next rig */ if (foundRig) { /* either RIGs present or don't know */ if (!Refset && Readrig.image.ref) aid = Hstartread(file_id, DFTAG_RIG, Readrig.image.ref); do { if (Refset) aid = Hstartread(file_id, DFTAG_RIG, Refset); else { if (!Readrig.image.ref) aid = Hstartread(file_id, DFTAG_RIG, DFREF_WILDCARD); else { if (aid != FAIL && Hnextread(aid, DFTAG_RIG, DFREF_WILDCARD, DF_CURRENT) == FAIL) { if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); aid = FAIL; } /* end if */ } /* end else */ } /* end else */ if (aid == FAIL) { if (foundRig == 1) /*RIGs present, but no more to return */ HGOTO_ERROR(DFE_NOMATCH, FAIL); foundRig = 0; /* No RIGs present in file */ } /* end if */ /* RIG found */ if (aid != FAIL) { Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &ref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL); if (DFR8getrig(file_id, ref, &Readrig) == FAIL) { if (Refset || (HEvalue(1) != DFE_BADCALL)) { Refset = 0; if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); HGOTO_ERROR(DFE_BADRIG, FAIL); } /* end if */ Readrig.image.ref = ref; } /* end if */ else { foundRig = 1; Refset = 0; } /* end else */ } /* end if */ } while ((aid != FAIL) && (HEvalue(1) == DFE_BADCALL)); if (aid != FAIL) if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if */ if (Refset || !foundRig) { /* No RIGs present, look for RI8 and CI8 */ /* look for Refset if DFR8ref called, else look for next ref */ if (Refset) aid = Hstartread(file_id, DFTAG_RI8, Refset); else { if (Readrig.image.ref) { aid = Hstartread(file_id, DFTAG_RI8, Readrig.image.ref); if (aid != FAIL && Hnextread(aid, DFTAG_RI8, DFREF_WILDCARD, DF_CURRENT) == FAIL) { Hendaccess(aid); aid = FAIL; } /* end if */ } /* end if */ else aid = Hstartread(file_id, DFTAG_RI8, DFREF_WILDCARD); } /* end else */ if (aid != FAIL) { Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &riref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL); if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if */ if (Refset) aid = Hstartread(file_id, DFTAG_CI8, Refset); else { if (Readrig.image.ref) { aid = Hstartread(file_id, DFTAG_CI8, Readrig.image.ref); if (aid != FAIL && Hnextread(aid, DFTAG_CI8, DFREF_WILDCARD, DF_CURRENT) == FAIL) { if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); aid = FAIL; } /* end if */ } /* end if */ else aid = Hstartread(file_id, DFTAG_CI8, DFREF_WILDCARD); } /* end else */ if (aid != FAIL) { Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &ciref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL); if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if */ Refset = 0; if (!riref && !ciref) HGOTO_ERROR(DFE_NOMATCH, FAIL); if ((!ciref) || (riref && (riref < ciref))) { /* next image is RI8 */ Readrig.image.ref = riref; Readrig.image.tag = DFTAG_RI8; } /* end if */ else { /* next image is CI8 */ Readrig.image.ref = ciref; Readrig.image.tag = DFTAG_CI8; Readrig.descimage.compr.tag = DFTAG_RLE; } /* end else */ if (Hgetelement(file_id, DFTAG_ID8, Readrig.image.ref, R8tbuf) != FAIL) { uint8 *p; uint16 uint16var; p = R8tbuf; UINT16DECODE(p, uint16var); Readrig.descimage.xdim = (int32)uint16var; UINT16DECODE(p, uint16var); Readrig.descimage.ydim = (int32)uint16var; } /* end if */ else HGOTO_ERROR(DFE_GETELEM, FAIL); if (Hexist(file_id, DFTAG_IP8, Readrig.image.ref) != FAIL) { Readrig.lut.tag = DFTAG_IP8; Readrig.lut.ref = Readrig.image.ref; } /* end if */ } /* end if */ Lastref = Readrig.image.ref; /* remember ref read */ done: return ret_value; } /* end DFR8Iriginfo() */ /*-------------------------------------------------------------------------- NAME DFR8Istart PURPOSE DFR8-level initialization routine USAGE intn DFR8Istart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the shut-down routine (DFR8Pshutdown) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFR8Istart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&DFR8Pshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end DFR8Istart() */ /*-------------------------------------------------------------------------- NAME DFR8Pshutdown PURPOSE Terminate various static buffers. USAGE intn DFR8shutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the DFR8 routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFR8Pshutdown(void) { free(paletteBuf); paletteBuf = NULL; return SUCCEED; } /* end DFR8Pshutdown() */ hdf4-hdf4.3.1/hdf/src/dfr8f.c000066400000000000000000000340421503061704500155370ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfr8F.c * Purpose: C stubs for Fortran RIS routines * Invokes: dfr8.c dfkit.c * Contents: * d8spal: Set palette to write out with subsequent images * d8first: Call DFR8restart to reset sequencing to first image * d8igdim: Call DFR8getdims to get dimensions of next image * d8igimg: Call DFR8getimage to get next image * d8ipimg: Call DFR8putimage to write image to new file * d8iaimg: Call DFR8putimage to add image to existing file * d8irref: Call DFR8readref to set ref to get next * d8iwref: Call DFR8writeref to set ref to put next * d8inims: Call DFR8nimages to get the number of images in the file * d8lref: Call DFR8lastref to get ref of last image read/written * dfr8lastref: Call DFR8lastref to get ref of last image read/written * dfr8setpalette: Set palette to write out with subsequent images * dfr8restart: Call DFR8restart to reset sequencing to first image *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: d8spal * Purpose: Set palette to be written out with subsequent images * Inputs: pal: palette to associate with subsequent images * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8setpalette *---------------------------------------------------------------------------*/ intf nd8spal(_fcd pal) { return DFR8setpalette((uint8 *)_fcdtocp(pal)); } /*----------------------------------------------------------------------------- * Name: d8first * Purpose: Reset sequencing back to first image * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8restart *---------------------------------------------------------------------------*/ intf nd8first(void) { return DFR8restart(); } /*----------------------------------------------------------------------------- * Name: d8igdim * Purpose: Get dimensions of next image using DFR8getdims * Inputs: filename: name of HDF file * xdim, ydim - integers to return dimensions in * ispal - boolean to indicate whether the image includes a palette * lenfn - length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8getdims *---------------------------------------------------------------------------*/ intf nd8igdim(_fcd filename, intf *xdim, intf *ydim, intf *ispal, intf *lenfn) { char *fn; intf ret; int32 txdim, tydim; intn tispal; fn = HDf2cstring(filename, (intn)*lenfn); if (!fn) return -1; ret = DFR8getdims(fn, &txdim, &tydim, &tispal); if (ret != FAIL) { *xdim = txdim; *ydim = tydim; *ispal = tispal; } free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8igimg * Purpose: Get next image using DFR8getimage * Inputs: filename: name of HDF file * image: space provided for returning image * xdim, ydim: dimension of space provided for image * pal: space of 768 bytes for palette * lenfn: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8getimage *---------------------------------------------------------------------------*/ intf nd8igimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, _fcd pal, intf *lenfn) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*lenfn); if (!fn) return -1; ret = DFR8getimage(fn, (uint8 *)_fcdtocp(image), *xdim, *ydim, (uint8 *)_fcdtocp(pal)); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8ipimg * Purpose: Write out image to new file * Inputs: filename: name of HDF file * image: image to write out * xdim, ydim: dimensions of image to write out * compress: compression scheme * lenfn: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8putimage *---------------------------------------------------------------------------*/ intf nd8ipimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *compress, intf *lenfn) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*lenfn); if (!fn) return -1; ret = (intf)DFR8putimage(fn, (void *)_fcdtocp(image), (int32)*xdim, (int32)*ydim, (uint16)*compress); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8iaimg * Purpose: Add image to existing file * Inputs: filename: name of HDF file * image: image to write out * xdim, ydim: dimensions of image to write out * compress: compression scheme * lenfn: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8addimage *---------------------------------------------------------------------------*/ intf nd8iaimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *compress, intf *lenfn) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*lenfn); if (!fn) return -1; ret = (intf)DFR8addimage(fn, (void *)_fcdtocp(image), (int32)*xdim, (int32)*ydim, (uint16)*compress); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: D8irref * Purpose: Set ref of image to get next * Inputs: filename: file to which this applies * ref: reference number of next get * Returns: 0 on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFR8Iopen, DFIfind * Remarks: checks if image with this ref exists *---------------------------------------------------------------------------*/ intf nd8irref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; uint16 Ref; Ref = (uint16)*ref; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFR8readref(fn, Ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8iwref * Purpose: Set ref of image to put next * Inputs: filename: file to which this applies * fnlen: length of the filename * Returns: 0 on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFR8writeref * Remarks: *---------------------------------------------------------------------------*/ intf nd8iwref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; uint16 Ref; Ref = (uint16)*ref; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFR8writeref(fn, Ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8inims * Purpose: How many images are present in this file? * Inputs: filename: file to which this applies * fnlen: length of HDF file name * Returns: number of images on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFR8nimages * Remarks: *---------------------------------------------------------------------------*/ intf nd8inims(_fcd filename, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFR8nimages(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: d8lref * Purpose: return reference number of last element read or written * Inputs: none * Returns: 0 on success, -1 on failure with error set * Users: Fortran stub routine * Invokes: DFR8lastref *---------------------------------------------------------------------------*/ intf nd8lref(void) { return (intf)DFR8lastref(); } /*----------------------------------------------------------------------------- * Name: d8scomp * Purpose: set the compression to use when writing the next image * Inputs: * scheme - the type of compression to use * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFR8setcompress * Remarks: if the compression scheme is JPEG, this routine sets up default * JPEG parameters to use, if a user wants to change them, d8sjpeg * must be called. *---------------------------------------------------------------------------*/ intf nd8scomp(intf *scheme) { comp_info cinfo; /* Structure containing compression parameters */ if (*scheme == COMP_JPEG) { /* check for JPEG compression and set defaults */ cinfo.jpeg.quality = 75; cinfo.jpeg.force_baseline = 1; } /* end if */ return DFR8setcompress((int32)*scheme, &cinfo); } /* end d8scomp() */ /*----------------------------------------------------------------------------- * Name: d8sjpeg * Purpose: change the JPEG compression parameters * Inputs: * quality - what the JPEG quality rating should be * force_baseline - whether to force a JPEG baseline file to be written * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFR8setcompress * Remarks: none *---------------------------------------------------------------------------*/ intf nd8sjpeg(intf *quality, intf *force_baseline) { comp_info cinfo; /* Structure containing compression parameters */ cinfo.jpeg.quality = (intn)*quality; cinfo.jpeg.force_baseline = (intn)*force_baseline; return DFR8setcompress((int32)COMP_JPEG, &cinfo); } /* end d8sjpeg() */ /*----------------------------------------------------------------------------- * Name: dfr8lastref * Purpose: Return last ref written or read * Inputs: none * Returns: ref on success, -1 on failure * Users: HDF programmers, other routines and utilities * Invokes: DFR8lastref * Remarks: *---------------------------------------------------------------------------*/ intf ndfr8lastref(void) { return (intf)DFR8lastref(); } /*----------------------------------------------------------------------------- * Name: dfr8setpalette * Purpose: Set palette to be written out with subsequent images * Inputs: pal: palette to associate with subsequent images * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8setpalette *---------------------------------------------------------------------------*/ intf ndfr8setpalette(_fcd pal) { return DFR8setpalette((uint8 *)_fcdtocp(pal)); } /*----------------------------------------------------------------------------- * Name: dfr8restart * Purpose: Reset sequencing back to first image * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFR8restart *---------------------------------------------------------------------------*/ intf ndfr8restart(void) { return DFR8restart(); } /*----------------------------------------------------------------------------- * Name: dfr8scompress * Purpose: set the compression to use when writing the next image * Inputs: * scheme - the type of compression to use * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFR8setcompress * Remarks: if the compression scheme is JPEG, this routine sets up default * JPEG parameters to use, if a user wants to change them, dfr8setjpeg * must be called. *---------------------------------------------------------------------------*/ intf ndfr8scompress(intf *scheme) { comp_info cinfo; /* Structure containing compression parameters */ if (*scheme == COMP_JPEG) { /* check for JPEG compression and set defaults */ cinfo.jpeg.quality = 75; cinfo.jpeg.force_baseline = 1; } /* end if */ return DFR8setcompress((int32)*scheme, &cinfo); } /* end dfr8setcompress() */ /*----------------------------------------------------------------------------- * Name: dfr8sjpeg * Purpose: change the JPEG compression parameters * Inputs: * quality - what the JPEG quality rating should be * force_baseline - whether to force a JPEG baseline file to be written * Returns: 0 on success, -1 for error * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: DFR8setcompress * Remarks: none *---------------------------------------------------------------------------*/ intf ndfr8sjpeg(intf *quality, intf *force_baseline) { comp_info cinfo; /* Structure containing compression parameters */ cinfo.jpeg.quality = (intn)*quality; cinfo.jpeg.force_baseline = (intn)*force_baseline; return DFR8setcompress((int32)COMP_JPEG, &cinfo); } /* end dfr8setjpeg() */ hdf4-hdf4.3.1/hdf/src/dfr8ff.f000066400000000000000000000274621503061704500157200ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: dfr8Ff.f C Purpose: Fortran stubs for Fortran RIS routines C Invokes: dfr8F.c C Contents: C d8gdims : call d8igdim to get dimensions of next image C d8gimg : call d8igimg to get next image C d8pimg : call d8ipimg to put image to new file C d8aimg : call d8iaimg to add image to existing file C d8nims : call d8inims to get number of images in the file C d8wref : call d8iwref to set ref for the next write of image C d8rref : call d8irref to set ref for the next read of image C dfr8getdims : call d8igdim to get dimensions of next image C dfr8getimage : call d8igimg to get next image C dfr8putimage : call d8ipimg to put image to new file C dfr8addimage : call d8iaimg to add image to existing file C dfr8nimages : call d8inims to get the number of images in the file C dfr8writeref : call d8iwref to set ref for the next write of image C dfr8readref : call d8iref to set ref for the next read of image C ----------------------------------------------------------------------------- C------------------------------------------------------------------------------ C Name: d8gdims C Purpose: call d8igdim to get dimensions of next image C Inputs: name: name of HDF file C xdim, ydim: integers to return dimensions of image C ispal: integer to return whether a palette is associated C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8igdim C------------------------------------------------------------------------------ integer function d8gdims(name, xdim, ydim, ispal) character*(*) name integer xdim, ydim, ispal, d8igdim d8gdims = d8igdim(name, xdim, ydim, ispal, len(name)) return end C------------------------------------------------------------------------------ C Name: d8gimg C Purpose: call d8igimg to get next image C Inputs: name: name of HDF file C image: space to return image in C xdim, ydim: dimensions of space to return image in C pal: 768-byte space to return palette in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8igimg C------------------------------------------------------------------------------ integer function d8gimg(name, image, xdim, ydim, pal) character*(*) name character image(*), pal(*) integer xdim, ydim, d8igimg d8gimg = d8igimg(name,image,xdim,ydim,pal,len(name)) return end C------------------------------------------------------------------------------ C Name: d8pimg C Purpose: call d8ipimg to write image to new file C Inputs: name: name of HDF file C image: space containing image C xdim, ydim: dimensions of image C compress: compression scheme to be used C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8ipimg C------------------------------------------------------------------------------ integer function d8pimg(name, image, xdim, ydim, compress) character*(*) name character image(*) integer xdim, ydim, compress, d8ipimg d8pimg=d8ipimg(name,image,xdim,ydim,compress,len(name)) return end C------------------------------------------------------------------------------ C Name: d8aimg C Purpose: call d8iaimg to add image to existing file C Inputs: name: name of HDF file C image: space containing image C xdim, ydim: dimensions of image C compress: compression scheme to be used C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8iaimg C------------------------------------------------------------------------------ integer function d8aimg(name, image, xdim, ydim, compress) character*(*) name character image(*) integer xdim, ydim, compress, d8iaimg d8aimg=d8iaimg(name,image,xdim,ydim,compress,len(name)) return end C----------------------------------------------------------------------------- C Name: d8rref C Purpose: Set ref of image to get next C Inputs: filename: file to which this applies C ref: reference number of next get C Returns: 0 on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8irref C Remarks: checks if image with this ref exists C----------------------------------------------------------------------------- integer function d8rref(name, ref) character*(*) name integer ref integer d8irref d8rref = d8irref(name, ref, len(name)) return end CEND7MAX C----------------------------------------------------------------------- C Name: d8nims C Purpose: How many images are present in this file C Inputs: filename: file to which this applies C Returns: number of images on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8inims C Remarks: C----------------------------------------------------------------------- integer function d8nims(filename) character*(*) filename integer d8inims d8nims = d8inims(filename, len(filename)) return end C----------------------------------------------------------------------- C Name: d8wref C Purpose: Set ref of image to put next C Inputs: name: file to which this applies C ref: reference number of next put C Returns: 0 on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8iwref C Remarks: checks if image with this ref exists C----------------------------------------------------------------------- integer function d8wref(name, ref) character*(*) name integer ref integer d8iwref d8wref = d8iwref(name, ref, len(name)) return end C------------------------------------------------------------------------------ C Name: dfr8getdims C Purpose: call d8igdim to get dimensions of next image C Inputs: name: name of HDF file C xdim, ydim: integers to return dimensions of image C ispal: integer to return whether a palette is associated C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8igdim C------------------------------------------------------------------------------ integer function dfr8getdims(name, xdim, ydim, ispal) character*(*) name integer xdim, ydim, ispal, d8igdim dfr8getdims = d8igdim(name, xdim, ydim, ispal, len(name)) return end C------------------------------------------------------------------------------ C Name: dfr8getimage C Purpose: call d8igimg to get next image C Inputs: name: name of HDF file C image: space to return image in C xdim, ydim: dimensions of space to return image in C pal: 768-byte space to return palette in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8igimg C------------------------------------------------------------------------------ integer function dfr8getimage(name, image, xdim, ydim, pal) character*(*) name character image(*), pal(*) integer xdim, ydim, d8igimg dfr8getimage = d8igimg(name,image,xdim,ydim,pal,len(name)) return end C------------------------------------------------------------------------------ C Name: dfr8putimage C Purpose: call d8ipimg to write image to new file C Inputs: name: name of HDF file C image: space containing image C xdim, ydim: dimensions of image C compress: compression scheme to be used C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8ipimg C------------------------------------------------------------------------------ integer function dfr8putimage(name, image, xdim, ydim, compress) character*(*) name character image(*) integer xdim, ydim, compress, d8ipimg dfr8putimage=d8ipimg(name,image,xdim,ydim,compress,len(name)) return end C------------------------------------------------------------------------------ C Name: dfr8addimage C Purpose: call d8iaimg to add image to existing file C Inputs: name: name of HDF file C image: space containing image C xdim, ydim: dimensions of image C compress: compression scheme to be used C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: d8iaimg C------------------------------------------------------------------------------ integer function dfr8addimage(name, image, xdim, ydim, compress) character*(*) name character image(*) integer xdim, ydim, compress, d8iaimg dfr8addimage=d8iaimg(name,image,xdim,ydim,compress,len(name)) return end C----------------------------------------------------------------------------- C Name: dfr8readref C Purpose: Set ref of image to get next C Inputs: filename: file to which this applies C ref: reference number of next get C Returns: 0 on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8irref C Remarks: checks if image with this ref exists C----------------------------------------------------------------------------- integer function dfr8readref(name, ref) character*(*) name integer ref integer d8irref dfr8readref = d8irref(name, ref, len(name)) return end C----------------------------------------------------------------------- C Name: dfr8writeref C Purpose: Set ref of image to put next C Inputs: filename: file to which this applies C ref: reference number of next put C Returns: 0 on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8iwref C Remarks: checks if image with this ref exists C----------------------------------------------------------------------- integer function dfr8writeref(filename, ref) character*(*) filename integer ref integer d8iwref dfr8writeref = d8iwref(filename, ref, len(filename)) return end C----------------------------------------------------------------------- C Name: dfr8nimages C Purpose: How many images are present in this file C Inputs: filename: file to which this applies C Returns: number of images on success, -1 on failure C Users: HDF programmers, other routines and utilities C Invokes: d8inims C Remarks: C----------------------------------------------------------------------- integer function dfr8nimages(filename) character*(*) filename integer d8inims dfr8nimages = d8inims(filename, len(filename)) return end hdf4-hdf4.3.1/hdf/src/dfrig_priv.h000066400000000000000000000060771503061704500166750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfrig_priv.h * Purpose: header file for the Raster Image set * Invokes: df_priv.h * Contents: * Structure definitions: DFRdr, DFRrig *---------------------------------------------------------------------------*/ #ifndef H4_DFRIG_PRIV_H #define H4_DFRIG_PRIV_H #include "hdf_priv.h" /* description record: used to describe image data, palette data etc. */ typedef struct { int16 ncomponents; /* Number of components */ int16 interlace; /* data ordering: chunky / planar etc */ int32 xdim; /* X-dimension of data */ int32 ydim; /* Y-dimensionsof data */ DFdi nt; /* number type of data */ DFdi compr; /* compression */ /* ### Note: compression is currently uniquely described with a tag. No data is attached to this tag/ref. But this capability is provided for future expansion, when this tag/ref might point to some data needed for decompression, such as the actual encodings */ } DFRdr; /* structure to hold RIG info */ typedef struct { char *cf; /* color format */ int32 xpos; /* X position of image on screen */ int32 ypos; /* Y position of image on screen */ float32 aspectratio; /* ratio of pixel height to width */ float32 ccngamma; /* gamma color correction parameters */ float32 ccnred[3]; /* red color correction parameters */ float32 ccngrren[3]; /* green color correction parameters */ float32 ccnblue[3]; /* blue color correction parameters */ float32 ccnwhite[3]; /* white color correction parameters */ DFdi image; /* image */ DFRdr descimage; /* image data description */ DFdi lut; /* color look-up table (palette) */ DFRdr desclut; /* look-up table description */ DFdi mattechannel; /* matte? */ DFRdr descmattechannel; /* Description of matte? */ } DFRrig; /* dimensions of raster-8 image */ typedef struct R8dim { uint16 xd; uint16 yd; } R8dim; #endif /* H4_DFRIG_PRIV_H */ hdf4-hdf4.3.1/hdf/src/dfrle.c000066400000000000000000000127271503061704500156300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfrle.c * Purpose: RLE image compression algorithm * Invokes: * Contents: * DFCIrle: compress string using run length encoding * DFCIunrle: decompress string using run length encoding * Remarks: DFCIrle() and DFCIunrle() compress and decompress RLE encoded info *---------------------------------------------------------------------------*/ #include "hdf_priv.h" /*----------------------------------------------------------------------------- * Name: DFCIrle * Purpose: compress a string of bytes * Inputs: buf: buffer containing data to be compressed * bufto: space for compressed data - assumed big enough * len: number of bytes to compress * Returns: number of compressed bytes on success, -1 on failure * Users: HDF programmers, DFputcomp, other routines * Invokes: none * Remarks: Written for efficiency *---------------------------------------------------------------------------*/ int32 DFCIrle(const void *buf, void *bufto, int32 len) { const uint8 *p; const uint8 *q; uint8 *cfoll; uint8 *clead; const uint8 *begp; int32 i; p = buf; cfoll = (uint8 *)bufto; /* place to copy to */ clead = cfoll + 1; begp = p; while (len > 0) { /* encode stuff until gone */ q = p + 1; i = len - 1; while (i && i + 120 > len && *p == *q) { q++; i--; } if (q - p > 2) { /* three in a row */ if (p > begp) { *cfoll = (uint8)(p - begp); cfoll = clead; } *cfoll++ = (uint8)(128 | (uint8)(q - p)); /* len of seq */ *cfoll++ = *p; /* char of seq */ len -= q - p; /* subtract len of seq */ p = q; clead = cfoll + 1; begp = p; } else { *clead++ = *p++; /* copy one char */ len--; if (p - begp > 120) { *cfoll = (uint8)(p - begp); cfoll = clead++; begp = p; } } } /* * fill in last bytecount */ if (p > begp) *cfoll = (uint8)(p - begp); else clead--; /* don't need count position */ return (int32)((uint8 *)clead - (uint8 *)bufto); /* how many encoded */ } /*----------------------------------------------------------------------------- * Name: DFCIunrle * Purpose: decompress run length encoding * Inputs: buf: buffer containing compressed data * bufto: space for returning decompressed data * outlen: number of *decompressed* bytes desired. * resetsave: don't use any stored state info - used for fresh image * Returns: number of compressed bytes used up on success, -1 on failure * Users: HDF programmers, DFgetcomp, other routines * Invokes: none * Remarks: has been modified so it will decompress even non-rowwise compression * Hence the static storage stuff *---------------------------------------------------------------------------*/ int32 DFCIunrle(uint8 *buf, uint8 *bufto, int32 outlen, int resetsave) { int cnt; uint8 *p; uint8 *q; uint8 *endp; static uint8 save[255], *savestart = NULL, *saveend = NULL; /* save has a list of decompressed bytes not returned in previous call. savestart and saveend specify the position at which this list starts and ends in the array save */ p = (uint8 *)buf; endp = (uint8 *)bufto + outlen; q = (uint8 *)bufto; if (resetsave) savestart = saveend = save; /* forget saved state */ while ((saveend > savestart) && (q < endp)) /* copy saved stuff */ *q++ = *savestart++; if (savestart >= saveend) savestart = saveend = save; /* all copied */ while (q < endp) { cnt = (int)*p++; /* count field */ if (!(cnt & 128)) { /* is set of uniques */ while (cnt--) { if (q < endp) *q++ = *p++; /* copy unmodified */ else *saveend++ = *p++; } } else { cnt &= 127; /* strip high bit */ while (cnt--) { if (q < endp) *q++ = *p; /* copy unmodified */ else *saveend++ = *p; } p++; /* skip that character */ } } return (int32)(p - buf); } hdf4-hdf4.3.1/hdf/src/dfsd.c000066400000000000000000005471341503061704500154610ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- File: dfsd.c Purpose: Routines for input and output of numeric data group Invokes: df.c dfgroup.c dfkit.c df_priv.h dfsd_priv.h Public functions: DFSDgetdims - get rank and dim sizes DFSDgetdatastrs - get label, unit, format and coord system of data DFSDgetdimstrs - get label, unit and format for a dimension DFSDgetdatalen - DFSDgetdimlen - DFSDgetdimscale - get scale for a dimension DFSDgetrange - get max and min of data DFSDgetdata - get data values DFSDgetNT - get file number type for reading DFSDpre32sdg - tests, without calling DFSDsdginfo, whether or not the SDG/ref written with 3.1 DFSDsetlengths - set lengths of label, unit, format strings on gets DFSDsetdims - set rank and dim sizes DFSDsetdatastrs - set data label, unit, format and coord system DFSDsetdimstrs - set dim labels, units and formats DFSDsetdimscale - set scale for a dimension DFSDsetrange - set max and min of data DFSDsetorder - set array order to C or FORTRAN order DFSDsetNT - set number type to be written out DFSDputdata - output data, data info, and display info DFSDrestart - forget info about last file accessed - restart from beginning DFSDndatasets - return number of SDGs in file DFSDclear - forget all info set by DFSDset* routines DFSDlastref - get reference number of last SDG read or written DFSDgetslice - get part of the data, specified as a slice DFSDstartslice - set up to write SD DFSDputslice - write specified number of data items to file DFSDendslice - end of series of writes, write out SDG DFSDwriteref - set reference number to be used in next SDS write slab DFSDsetfillvalue - set fill value to be used in next SDS written DFSDgetfillvalue - return fill value from SDS that is about to be read DFSDstartslab - set up to write slabs DFSDwriteslab - write hyperslab of values DFSDendslab - end of series of hyperslab writes DFSDreadslab - get part of the data, specified as a slab Lower level functions: DFSDgetsdg - read SDG into struct DFSDputsdg - write SDG to file Private functions: DFSDIopen - open or reopen file DFSDIsdginfo - find next sdg in file DFSDIisndg - was currently read sdg written by HDF3.2 DFSDIrefresh - get info of next sdg if necessary DFSDIgetrrank - get rank of the currently read sdg DFSDIgetwrank - get rank of the sdg to be written DFSDIclear - clear sdg data structure of all info DFSDIgetdata - read data from file DFSDIputdata - write data to file DFSDIgetslice - get slice DFSDIputslice - put slice DFSDIendslice - DFSDIsetnsdg_t - set up nsdg table DFSDInextnsdg - get next nsdg from nsdg table DFSDIgetndg - read NDG into struct DFSDIputndg - write NDG to file Fortran stub functions: dsisdas - set data label, unit, format and coord system dsisdis - set dim labels, units and formats Remarks: These functions will be copied into dfsd.c after debugging. This version assumes that all the values are floating point. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfsd_priv.h" /* MMM: make this definition correct and move to hfile_priv.h, or wherever. */ #define DF_NOFILE 0 #define LABEL 0 #define UNIT 1 #define FORMAT 2 #define COORDSYS 3 #define NFGSDG_TYPE_SDG 0 /* a pure SDG */ #define NFGSDG_TYPE_NFG 1 /* a pure NDG */ #define NFGSDG_TYPE_SDGNDG 2 /* an SDG in NDG */ /* Init NSDG table header */ static DFnsdg_t_hdr *nsdghdr = NULL; /* initialize aid to -1 and numbertype to DFNT_NONE. S. Xu */ static DFSsdg Readsdg = /* struct for reading */ {{(uint16)0, (uint16)0}, (intn)0, NULL, NULL, {NULL, NULL, NULL}, {NULL, NULL, NULL}, NULL, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (int32)DFNT_NONE, DFNTF_NONE, (int32)-1, (int32)0, (int32)0, (float64)1.0, (float64)0.0, (float64)0.0, (float64)0.0, (int32)-1, {0}, 0}; static DFSsdg Writesdg = /* struct for writing */ {{(uint16)0, (uint16)0}, (intn)0, NULL, NULL, {NULL, NULL, NULL}, {NULL, NULL, NULL}, NULL, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (int32)DFNT_NONE, DFNTF_NONE, (int32)-1, (int32)0, (int32)0, (float64)1.0, (float64)0.0, (float64)0.0, (float64)0.0, (int32)-1, {0}, 0}; static uint16 Writeref = 0; /* ref of next SDG/NDG to write to file */ static intn Newdata = (-1); /* Values in Readsdg fresh? */ /* -1 : no descriptor read */ /* 1 : descriptor read */ static intn Nextsdg = 1; /* Signal if DFSDgetdata should get the */ /* next SDG/NDG */ static int32 Sfile_id = DF_NOFILE; /* pointer to file for slice writes */ static int32 *Sddims; /*dims written so far in slice write */ static struct { /* Indicators of status (s) of info: */ intn dims; /* s = -1: there is no info in this category */ intn nt; /* s = 0: info was set, but not yet written */ intn coordsys; /* s > 0: info was set and written with ref no.s */ intn luf[3]; intn scales; intn maxmin; intn transpose; /* It should be taken out!!! !!! */ intn cal; intn fill_value; intn new_ndg; } Ref = {-1, -1, -1, {-1, -1, -1}, -1, -1, -1, -1, -1, -1}; static intn Maxstrlen[4] = {DFS_MAXLEN, DFS_MAXLEN, DFS_MAXLEN, DFS_MAXLEN}; static intn Ismaxmin = 0; /* is there a max/min value on read? */ static intn FileTranspose = 0; /* is the data in column major order? */ static intn Fortorder = 0; /* should data be written col major? */ static intn IsCal = 0; /* has calibration info been set? */ /* In ver. 3.2 numbertype and file number format (subclass) are included */ /* in DFSsdg, and fileNTsize is local to functions . */ /* static int fileNT=DFNTF_IEEE, default: all IEEE */ /* fileNTsize=4, */ /* outNT=DFNTF_IEEE, default output: IEEE */ /* outNTsize=4, */ /* userNT=DFNTF_IEEE ; default */ static uint16 Readref = 0; /* ref of next SDG/NDG to be read? */ static char *Lastfile = NULL; static uint16 Lastref = 0; /* Last ref to be read/written? */ static DFdi lastnsdg; /* last read nsdg in nsdg_t */ /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* Private buffer */ static uint8 *ptbuf = NULL; /* Prototypes */ static intn DFSDIsetnsdg_t(int32 file_id, DFnsdg_t_hdr *l_nsdghdr); static intn DFSDInextnsdg(DFnsdg_t_hdr *l_nsdghdr, DFdi *nsdg); static intn DFSDIgetndg(int32 file_id, uint16 tag, uint16 ref, DFSsdg *sdg); static intn DFSDIputndg(int32 file_id, uint16 ref, DFSsdg *sdg); static intn DFSDIstart(void); /*-------------------------------------------------------------------------- NAME DFSDgetdims USAGE int DFSDgetdims(filename, prank, sizes, maxrank) char *filename; IN: Name of file with scientific data set int prank; OUT: Number of dimensions int32 sizes: OUT: array for holding dimensions of data set in file. int maxrank: IN: size of array "dimsizes" RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the number of dimensions(rank) and the sizes of the dimensions (dimsizes) for the next data set in the file. The input argument "maxrank" tells the size of the array that is allocated for storing the "dimsizses" array. The value of rank cannot exceed the value of "maxrank". The allocation of space for reading in the scientific data set should correspond to the values read in by "DFSDgetdims". The first value in the array "dimsizes" should equal the first dimension of the array that is allocated to hold the data set; the second value in "dimsizes" should equal the second dimension of the data set, and so forth. "DFSDgetdims" opens and closes the file. --------------------------------------------------------------------------*/ intn DFSDgetdims(const char *filename, intn *prank, int32 sizes[], intn maxrank) { intn i; int32 file_id; intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!prank) /* check if ptr is valid */ HGOTO_ERROR(DFE_BADPTR, FAIL); file_id = DFSDIopen(filename, DFACC_READ); /* open/reopen file */ if (file_id == FAIL) { ret_value = FAIL; goto done; } if (DFSDIsdginfo(file_id) < 0) { /* reads next SDG from file */ Hclose(file_id); ret_value = FAIL; /* on error, close file and return */ goto done; } *prank = Readsdg.rank; /* copy rank, dimensions */ if (maxrank < *prank) /* if not all dimensions copied */ HGOTO_ERROR(DFE_NOTENOUGH, FAIL); for (i = 0; i < *prank; i++) /* copy dimensions */ sizes[i] = Readsdg.dimsizes[i]; Nextsdg = 0; ret_value = Hclose(file_id); done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetdatastrs USAGE int DFSDgetdatastrs(label, unit, format, coordsys) char *label; OUT: label string that describes the data char *unit; OUT: unit string that describes the unit used char *format; OUT: format string that describes the format for displaying the data char *coordsys; OUT: string describing coordinate system RETURN Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Retrieves information about the data from its associated attribute strings. Particularly, it reads the label, unit and format strings for the data. The parameter "coordsys" gives the coordinate system that is to be used for interpreting the dimension information. ----------------------------------------------------------------------------*/ intn DFSDgetdatastrs(char *label, char *unit, char *format, char *coordsys) { int32 luf; char *lufp; intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); /* NOTE: Once DFSDsetdatastrs is changed to always write all three (label, unit and format) whenever it is called, this routine should be changed so that it returns all three, if any exist. This means that it also should be changed to return -1 if none exist. (Currently it returns FAIL only if the SDS doesn't exist.) */ /* copy label, unit, format */ for (luf = LABEL; luf <= FORMAT; luf++) { lufp = (luf == LABEL) ? label : (luf == UNIT) ? unit : format; if (lufp) { if (Readsdg.dataluf[luf]) HIstrncpy(lufp, Readsdg.dataluf[luf], Maxstrlen[luf]); } } /* end for 'luf' */ /* copy coordsys */ if (coordsys) { if (Readsdg.coordsys) HIstrncpy(coordsys, Readsdg.coordsys, Maxstrlen[COORDSYS]); else coordsys[0] = '\0'; } done: return ret_value; } /*---------------------------------------------------------------------------- NAME DFSDgetdimstrs USAGE int DFSDgetdimstrs(dim, label, unit, format) int dim; OUT: Dimension this label, unit and format refer to char *label; OUT: Label that describes this dimension char *unit; OUT: Unit to be used with this dimension char *format; OUT: Format to be used in displaying scale for this dimension RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the labe, unit and format strings corresponding to the specified dimension. The space allocated for the label, unit and format string must be at least 1 byte larger than the length of the string. If the length is unknown when the program is written, declare the array size as 1+maxlen_label, _unit or _format after they are set by "DFSDsetlengths". The maximum default string length is 255. ----------------------------------------------------------------------------*/ intn DFSDgetdimstrs(int dim, char *label, char *unit, char *format) { intn luf; intn rdim; char *lufp; intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); /* NOTE: Once DFSDsetdimstrs is changed to always write all three (label, unit and format) whenever it is called, this routine should be changed so that it returns all three, if any exist. This means that it also should be changed to return -1 if none exist. (Currently it returns FAIL only if the SDS doesn't exist.) */ rdim = dim - 1; /* translate dim to zero origin */ if ((rdim >= Readsdg.rank) || (rdim < 0)) HGOTO_ERROR(DFE_BADDIM, FAIL); /* copy labels etc */ for (luf = LABEL; luf <= FORMAT; luf++) { lufp = (luf == LABEL) ? label : (luf == UNIT) ? unit : format; if (lufp) { if (Readsdg.dimluf[0] == NULL) { /* no labels etc */ *lufp = '\0'; continue; } if (Readsdg.dimluf[luf]) HIstrncpy(lufp, Readsdg.dimluf[luf][rdim], Maxstrlen[luf]); } /* end if 'lufp' */ } /* end for 'luf' */ done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetdatalen USAGE int DFSDgetdatalen(llabel, lunit, lformat, lcoordsys) int *llabel; OUT: length of label string int *lunit; OUT: length of unit string int *lformat; OUT: length of format string int *lcoordsys; OUT: length of coordsys string RETURN Returns SUCCEED(0) if successful and FAIL(-1) otherwise DESCRIPTION Gets actual length of label, unit, format and coordinate system strings. The space allocated for the label, unit, format and coordinate system strings must be at least 1 byte larger than the actual length of the string. ----------------------------------------------------------------------------*/ intn DFSDgetdatalen(intn *llabel, intn *lunit, intn *lformat, intn *lcoordsys) { intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); *llabel = (intn)(Readsdg.dataluf[LABEL] ? strlen(Readsdg.dataluf[LABEL]) : 0); *lunit = (intn)(Readsdg.dataluf[UNIT] ? strlen(Readsdg.dataluf[UNIT]) : 0); *lformat = (intn)(Readsdg.dataluf[FORMAT] ? strlen(Readsdg.dataluf[FORMAT]) : 0); *lcoordsys = (intn)(Readsdg.coordsys ? strlen(Readsdg.coordsys) : 0); done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetdimlen USAGE int DFSDgetdimlen(dim, llabel, lunit, lformat) int dim; OUT: number of dimensions to get info about int *llabel; OUT: length of label string int *lunit; OUT: length of unit string int *lformat; OUT: length of format string RETURN Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Get the length of label, unit, and format for the specified dimension. The space allocated to hold the label, unit, and format strings must be at least 1 byte larger than the actual length of the string. ----------------------------------------------------------------------------*/ intn DFSDgetdimlen(intn dim, intn *llabel, intn *lunit, intn *lformat) { intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); if (dim > Readsdg.rank) HGOTO_ERROR(DFE_BADDIM, FAIL); *llabel = (intn)(Readsdg.dimluf[LABEL][dim - 1] ? strlen(Readsdg.dimluf[LABEL][dim - 1]) : 0); *lunit = (intn)(Readsdg.dimluf[UNIT][dim - 1] ? strlen(Readsdg.dimluf[UNIT][dim - 1]) : 0); *lformat = (intn)(Readsdg.dimluf[FORMAT][dim - 1] ? strlen(Readsdg.dimluf[FORMAT][dim - 1]) : 0); done: return ret_value; } /*---------------------------------------------------------------------------- NAME DFSDgetdimscale USAGE int DFSDgetdimscale(dim, maxsize, scale) int dim; IN: Dimension this scale corresponds to int32 size; IN: size of scale void *scale; OUT: the scale RETURN Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the scale corresponding to the specified dimension. The DFSD interface in HDFv3.3 requires that the dimension scales are of the same number type as the corresponding data. To store dimension scales of a different number type than the corresponding data see the multi-file SD interface. ---------------------------------------------------------------------------*/ intn DFSDgetdimscale(intn dim, int32 maxsize, void *scale) { uint32 dimsize; int32 numtype; int32 localNTsize; intn rdim; uint8 *p1, *p2; intn ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); rdim = dim - 1; /* translate dim to zero origin */ if ((rdim >= Readsdg.rank) || (rdim < 0)) HGOTO_ERROR(DFE_BADDIM, FAIL); if (maxsize < Readsdg.dimsizes[rdim]) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (!scale) HGOTO_ERROR(DFE_BADPTR, FAIL); if (!Readsdg.dimscales || !Readsdg.dimscales[rdim]) /* no scale */ HGOTO_ERROR(DFE_NOVALS, FAIL); /* get number type and copy data from Readsdg to scale */ if (Readsdg.numbertype == DFNT_NONE) Readsdg.numbertype = DFNT_FLOAT32; numtype = Readsdg.numbertype; localNTsize = DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); dimsize = (uint32)localNTsize * (uint32)Readsdg.dimsizes[rdim]; /* in bytes */ p1 = (uint8 *)scale; p2 = (uint8 *)(Readsdg.dimscales[rdim]); memcpy(p1, p2, dimsize); done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetrange USAGE int DFSDgetrange(max, min) void *max; OUT: High value stored with the scientific data set void *min; OUT: Low value stored with the scientific data set RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the maximum and minimum values stored with the scientific data set. The "max" and "min" values are set by "DFSDsetrange". They are not automatically stored when a data set is written to a file. Since these values are supposed to relate to the data itself, it is assumed that they are of the same number type as the data itself. One implication of this is that in the C version of "DFSDgetrange" the arguments are pointers, rather than simple variables, whereas in the FORTRAN version they are simple variables of the same type as the data array. Neither "DFSDgetrange" or "DFSDgetdata" compare the "max" and "min" values stored with the data set to the actual values in the data set; they merely retrieve the data. As a result, the maximum and minimum values may not always reflect the actual maximum and minimum values in the data set. In some cases the "max" and "min" values may actually lie outside the range of values in the data set. ---------------------------------------------------------------------------*/ int DFSDgetrange(void *pmax, void *pmin) { int32 numtype; uint32 localNTsize; uint8 *p1, *p2; int ret_value = SUCCEED; HEclear(); /* Clear error stack */ /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); /* get number type and copy data */ if (Readsdg.numbertype == DFNT_NONE) Readsdg.numbertype = DFNT_FLOAT32; numtype = Readsdg.numbertype; localNTsize = (uint32)DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); if (Ismaxmin) /* Ismaxmin is a global */ { p1 = (uint8 *)pmax; p2 = (uint8 *)&(Readsdg.max_min[0]); memcpy(p1, p2, localNTsize); p1 = (uint8 *)pmin; p2 = &(Readsdg.max_min[localNTsize]); memcpy(p1, p2, localNTsize); } else HGOTO_ERROR(DFE_NOVALS, FAIL); done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetdata USAGE intn DFSDgetdata(filename, rank, maxsizes, data) char filename; IN: name of HDF file containing scientific data set intn rank; IN: number of dimensions of array "data" int32 maxsizes; IN: Array that holds dimensions of buffer that will hold the data void *data; OUT: Array for holding the data RETURN Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Reads the next data set in the file. If you do no know the values of "rank" or "dimsizes", you must call "DFSDgetdims" to get them and then use them to provide the right amount of space for the array "data". If you do not know the number type of the data in the scientific dat set, you can call "DFSDgetNT" to find out. Subsequent calls to "DFSDgetdata"(or to "DFSDgetdims" and "DFSDgetdata") will sequentially read scientific data sets from the file. For example, if "DFSDgetdata" is called three times in succession, the third call reads data from the third scientific data set in the file. Note that if you do no know the values of "rank" or "dimsizes" you must call "DFSDgetdims" to get them each time and then provide the necessary space to hold the data. If "DFSDgetdims" or "DFSDgetdata" is called and there are no more scientific data sets left in the file, an error code is returned and nothing is read. "DFSDrestart" can be used to override this convention. ---------------------------------------------------------------------------*/ intn DFSDgetdata(const char *filename, intn rank, int32 maxsizes[], void *data) { intn ret_value; ret_value = (DFSDIgetdata(filename, rank, maxsizes, data, 0)); /* 0 == C */ return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetlengths USAGE int DFSDsetlengths(maxlen_label, maxlen_unit, maxlen_format, maxlen_coordsys) int maxlen_label; IN: maximum length of any label int maxlen_unit; IN: maximum length of any unit int maxlen_format; IN: maximum length of any format int maxlen_coordsys; IN: maximum length of any coordsys RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the maximum lengths for the strings that will hold labels, units formats and the name of the coordinate system. These lengths are used by the routines "DFSDgetdimstrs" and "DFSDgetdatastrs" to determine the maximum lengths of strings that they get from the HDF file. Normally, "DFSDsetlengths" is not needed. If it is not called, default maximum lengths of 255 are used for all strings. -----------------------------------------------------------------------------*/ intn DFSDsetlengths(intn maxlen_label, intn maxlen_unit, intn maxlen_format, intn maxlen_coordsys) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (maxlen_label > 0) Maxstrlen[LABEL] = maxlen_label; if (maxlen_unit > 0) Maxstrlen[UNIT] = maxlen_unit; if (maxlen_format > 0) Maxstrlen[FORMAT] = maxlen_format; if (maxlen_coordsys > 0) Maxstrlen[COORDSYS] = maxlen_coordsys; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetdims USAGE int DFSDsetdims(rank, dimsizes) int rank; IN: number of dimensions int32 dimsizes[]; IN: array containing dimensions of scientific data sett RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the rank and dimension sizes for all subsequent scientific data sets written to the file. This routine must be called before calling either "DFSDgetdimstrs" or "DFSDsetdimscale". "DFSDsetdims" need not be called if other set routines are not called and the correct dimensions are supplied in "DFSDputdata" or "DFSDadddata". If the rank or dimension sizes change, all previous set calls are cleared, except for the number type which is set by calling "DFSDsetNT". -----------------------------------------------------------------------------*/ intn DFSDsetdims(intn rank, int32 dimsizes[]) { intn i; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Sfile_id != DF_NOFILE) HGOTO_ERROR(DFE_BADCALL, FAIL); /* Disallow rank = 0 in DFSD API (see HDFFR-1291) */ if (rank == 0) HGOTO_ERROR(DFE_ARGS, FAIL); if (Writesdg.rank == rank) /* check if dimensions same */ { if (Writesdg.dimsizes) { for (i = 0; i < rank; i++) { if (Writesdg.dimsizes[i] != dimsizes[i]) break; } if (i == rank) { ret_value = SUCCEED; /* Dimensions same as before */ goto done; } } } /* forget all attributes set previously */ if (DFSDIclear((DFSsdg *)&Writesdg) < 0) { ret_value = FAIL; goto done; } /* allocate dimensions */ Writesdg.dimsizes = (int32 *)malloc((size_t)rank * sizeof(int32)); if (Writesdg.dimsizes == NULL) { ret_value = FAIL; goto done; } /* copy dimensions */ Writesdg.rank = rank; for (i = 0; i < rank; i++) Writesdg.dimsizes[i] = dimsizes[i]; /* Note dimensions modified */ Ref.dims = 0; /* * Added side effect, allows creation of new "ref" whenever called * before DFSDwriteslab(). */ Ref.new_ndg = 0; Writeref = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetdatastrs USAGE int DFSDsetdatastrs(label, unit, format, coordsys) char *label; IN: label that describes the data char *unit; IN: unit to be used with the data char *format; IN: format to be used in displaying the data char *coordsys; IN: coordinate system RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the label, unit, format and coordsys(coordinate system) strings to be assigned to the next data set written to the file. -----------------------------------------------------------------------------*/ intn DFSDsetdatastrs(const char *label, const char *unit, const char *format, const char *coordsys) { intn ret_value; ret_value = (DFSDIsetdatastrs(label, unit, format, coordsys)); return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIsetdatastrs() * Purpose: Set label, unit and format for displaying subsequent SDGs * Inputs: label: label to be used to describe data * unit: unit corresponding to data values * format: format to be used in displaying data values * coordsys: type of coordinate system * Globals: Writesdg, Ref * Returns: 0 on success, FAIL on failure with error set * Users: HDF users, utilities, other routines * Invokes: none * Method: Stores values in global structure Writesdg * Remarks: should we validate coordsys? proposed strings: "cartesian", * "polar" (="spherical") and "cylindrical". Do "spherical" and * "cylindrical" make sense for 2D? *---------------------------------------------------------------------------*/ intn DFSDIsetdatastrs(const char *label, const char *unit, const char *format, const char *coordsys) { intn luf; /* takes values LABEL, UNIT, FORMAT */ /* in succession */ const char *lufp; /* points to label, unit, format */ /* in succession */ intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* NOTE: The following code should be changed to write all three, even if one or more is an empty string. Then, when DFSDgetdatastrs is called values will be returned for all three also, even though some might be empty strings. */ for (luf = LABEL; luf <= FORMAT; luf++) { /* set lufp to point to label etc. as appropriate */ lufp = (luf == LABEL) ? label : (luf == UNIT) ? unit : format; /* free space if allocated */ HDfreenclear(Writesdg.dataluf[luf]); /* copy string */ if (lufp) { Writesdg.dataluf[luf] = (char *)strdup(lufp); if (Writesdg.dataluf[luf] == NULL) { ret_value = FAIL; goto done; } } } HDfreenclear(Writesdg.coordsys); if (coordsys) { Writesdg.coordsys = (char *)strdup(coordsys); if (Writesdg.coordsys == NULL) { ret_value = FAIL; goto done; } } /* indicate that label, unit, format and coordsys info modified */ Ref.luf[LABEL] = Ref.luf[UNIT] = Ref.luf[FORMAT] = Ref.coordsys = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetdimstrs() USAGE int DFSDsetdimstrs(dim, label, unit, format) int dim; IN: dimension this label, unit and format refer to char *label; IN: label that describes this dimension char *unit; IN: unit to be used with this dimension char *format; IN: format to be used to display scale RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the label, unit, and format strings corresponding to the specified dimension. In both FORTRAN and C programs, dim=1 for the first dimension, and dim=2 for the second and so on. If the user is not interested in one or more strings, empty strings can be used as parameters for the "DFSDsetdimstrs" call. For example, "DFSDsetdimstrs(1, "vertical", "", "") " will set the label for the first dimension to "vertical" and set the unit and format strings to empty strings. -----------------------------------------------------------------------------*/ intn DFSDsetdimstrs(intn dim, const char *label, const char *unit, const char *format) { intn ret_value; ret_value = (DFSDIsetdimstrs(dim, label, unit, format)); return ret_value; } /* DFSDsetdimstrs */ /*----------------------------------------------------------------------------- * Name: DFSDIsetdimstrs() * Purpose: For the given dimension, set label, unit, format * This routine needs to be called once for each dimension whose * values the user wants to set. * Inputs: dim: the dimension that this info applies to * label: label to be used to describe this dimension * unit: units for dimension * format: format to be used in displaying * Globals: Writesdg, Ref * Returns: 0 on success, FAIL on failure with error set * Users: HDF users, utilities, other routines * Invokes: none * Method: Stores values in global structure Writesdg *---------------------------------------------------------------------------*/ intn DFSDIsetdimstrs(intn dim, const char *label, const char *unit, const char *format) { intn i; intn rdim; intn luf; /* takes values LABEL, UNIT, FORMAT */ /* in succession */ const char *lufp; /* points to label, unit, format */ /* in succession */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* translate from 1 to 0 origin */ rdim = dim - 1; if ((rdim >= Writesdg.rank) || (rdim < 0)) HGOTO_ERROR(DFE_BADDIM, FAIL); for (luf = LABEL; luf <= FORMAT; luf++) { /* set lufp to point to label etc. as appropriate */ lufp = (luf == LABEL) ? label : (luf == UNIT) ? unit : format; /* allocate space if necessary */ if (!Writesdg.dimluf[luf]) { Writesdg.dimluf[luf] = (char **)malloc((uint32)Writesdg.rank * sizeof(char *)); if (Writesdg.dimluf[luf] == NULL) { ret_value = FAIL; goto done; } for (i = 0; i < Writesdg.rank; i++) /* set allocated pointers to NULL */ Writesdg.dimluf[luf][i] = NULL; } /* free string space if allocated */ HDfreenclear(Writesdg.dimluf[luf][rdim]); /* NOTE: The following code should be changed to write all three, even if one or more is an empty string. Then, when DFSDgetdimstrs is called values will be returned for all three also, even though some might be empty strings. */ /* copy string */ if (lufp) { Writesdg.dimluf[luf][rdim] = (char *)strdup(lufp); if (Writesdg.dimluf[luf][rdim] == NULL) { ret_value = FAIL; goto done; } } } /* Indicate that this info has not been written to file */ Ref.luf[LABEL] = Ref.luf[UNIT] = Ref.luf[FORMAT] = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetdimscale USAGE int DFSDsetdimscale(dim, dimsize, scale) int dim; IN: dimension the is scale corresponds to int32 dimsize; IN: size of scale in the dimension void *scale; IN: the scale RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the scale for a dimension. A scale is a 1D array whose value describes reference points along one of the dimensions of the scientific data set. For example, a 2D scientific data set representing points on a mpa could have two scales, one representing points of latitude, and the other points of longitude. -----------------------------------------------------------------------------*/ intn DFSDsetdimscale(intn dim, int32 dimsize, void *scale) { int32 i; intn rdim; int32 numtype; uint32 bytesize; int32 localNTsize; uint8 *p1, *p2; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); rdim = dim - 1; /* translate from 1 to 0 origin */ if (!Writesdg.dimsizes) HGOTO_ERROR(DFE_BADCALL, FAIL); if (Writesdg.numbertype == DFNT_NONE) { if (DFSDsetNT(DFNT_FLOAT32) < 0) { ret_value = FAIL; goto done; } } numtype = Writesdg.numbertype; localNTsize = DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); if ((rdim >= Writesdg.rank) || (rdim < 0) /* check dimensions */ || (dimsize != Writesdg.dimsizes[rdim])) { HGOTO_ERROR(DFE_BADDIM, FAIL); } if (!scale) { /* No scale for this dimension */ if (Writesdg.dimscales) HDfreenclear(Writesdg.dimscales[rdim]); Ref.scales = 0; ret_value = SUCCEED; goto done; } /* get number type and size of this type in this machine */ if (Writesdg.numbertype == DFNT_NONE) { if (DFSDsetNT(DFNT_FLOAT32) < 0) { ret_value = FAIL; goto done; } } numtype = Writesdg.numbertype; localNTsize = DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); bytesize = (uint32)(dimsize * localNTsize); /* allocate space for dimscales if necessary */ if (!Writesdg.dimscales) { Writesdg.dimscales = (uint8 **)malloc((uint32)Writesdg.rank * sizeof(int8 *)); if (Writesdg.dimscales == NULL) { ret_value = FAIL; goto done; } for (i = 0; i < Writesdg.rank; i++) /* set allocated pointers to NULL */ Writesdg.dimscales[i] = NULL; } if (!Writesdg.dimscales[rdim]) { /* allocate dimension scale space if necessary */ Writesdg.dimscales[rdim] = (uint8 *)malloc((uint32)bytesize); if (Writesdg.dimscales[rdim] == NULL) { ret_value = FAIL; goto done; } } /* copy scale */ p1 = (uint8 *)scale; p2 = (uint8 *)Writesdg.dimscales[rdim]; memcpy(p2, p1, bytesize); /* Indicate scales modified */ Ref.scales = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetrange USAGE int DFSDsetrange(max, min) void * max; IN: High value in the scientific data set void * min; IN: Low value in the scientific data set RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the maximum and minimum values to be stored with the scientific data set. Since these values are supposed to relate to the data itself, it is assumed that they are of the same number type as the data itself. One implication of this is that in the C version of "DFSDgetrange" the arguments are pointers, rather than simple variables, whereas in the FORTRAN version they are simple variables of the same type as the data array. This routine does not compute the maximum and minimum values; it merely stores the values it is given. As a result, the maximum and minimum values may not always reflect the actual maximum and minimum values in the data set. When the maximum and minimum values are written to a file, the HDF element that hold these value is cleared, because it is assumed that subsequent data sets will have different values for "max" and "min". These values are automatically cleared aftera a call to either "DFSDputdata" or "DFSDaddadata". -----------------------------------------------------------------------------*/ intn DFSDsetrange(void *maxi, void *mini) { int32 numtype; uint32 localNTsize; intn i; uint8 *p1, *p2; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); p1 = &(Writesdg.max_min[0]); for (i = 0; i < 16; i++) *p1++ = 0; /* clear max_min */ /* get number type and copy the values to Writesdg */ if (Writesdg.numbertype == DFNT_NONE) DFSDsetNT(DFNT_FLOAT32); numtype = Writesdg.numbertype; localNTsize = (uint32)DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); p1 = (uint8 *)maxi; p2 = (uint8 *)mini; memcpy((uint8 *)&(Writesdg.max_min[0]), p1, localNTsize); memcpy((uint8 *)&(Writesdg.max_min[localNTsize]), p2, localNTsize); Ref.maxmin = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDputdata USAGE intn DFSDputdata(filename, rank, dimsizes, data) char *filename; IN: name of file to store scientific data set in int rank; IN: number of dimensions of data array to be stored int32 dimsizes[]; IN: array that holds sizes of dimensions void *data; IN: array holding data to be stored RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Writes scientific data and related information to an HDF file. If a new filename is used, "DFSDputdata" functions exactly like "DFSDadddata". WARNING "DFSDputdata" will write data to an existing file by destroying the contents of the original file. Use with caution. -----------------------------------------------------------------------------*/ intn DFSDputdata(const char *filename, intn rank, int32 dimsizes[], void *data) { intn ret_value; /* 0, 0 specify create mode, C style array (row major) */ ret_value = (DFSDIputdata(filename, rank, dimsizes, data, 0, 0)); return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDadddata USAGE intn DFSDadddata(filename, rank, dimsizes, data) char *filename; IN: Name of HDF file to store the data set intn rank; IN: Number of dimensions in the data array to be written int32 dimsizes[]; IN: Array holding the size of each dimension void *data; IN: Array holding the data to be stored RETURNS SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION In addition to appending any multidimensional array of data to an HDF file, "DFSDaddata" automatically stores any information pertinent to the data set. It will not overwrite existing data in the file. The array "data" can be of any valid type. However if no number type has been set by "DFSDsetNT", it is assumed that the data type is of type "float32". The invocation of "DFSDadddata" triggers the writing of the entire scientific data set. That is, when "DFSDadddat" is called, all information that has been set by "DFSDset* " calls is written to the file, along with the data array itself. -----------------------------------------------------------------------------*/ intn DFSDadddata(const char *filename, intn rank, int32 dimsizes[], void *data) { intn ret_value; /* 1, 0 specifies append mode, C style array (row major) */ ret_value = (DFSDIputdata(filename, rank, dimsizes, data, 1, 0)); return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDrestart USAGE int DFSDrestart() RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Forces the next read operation to read the first scientific data set in the file. -----------------------------------------------------------------------------*/ intn DFSDrestart(void) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Lastfile != NULL) *Lastfile = '\0'; /* set to 0-length string instead of NULLing ptr */ Readref = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDndatasets USAGE int32 DFSDndatasets(filename) char *filename; IN: filename of HDF file RETURNS Returns the number of data sets if successful and FAIL(-1) otherwise. DESCRIPTION Returns the number of scientific datasets in the file. In HDFv3.3 "DFSDndatasets" replaces "DFSDnumber". In order to maintain backward compatibility with existing HDF applications, HDF will continue to support "DFSDnumber". However, it is recommended that all new applications use "DFSDndatasets" instead of "DFSDnumber". -----------------------------------------------------------------------------*/ int32 DFSDndatasets(char *filename) { int32 file_id; int32 nsdgs = 0; int32 ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* should use reopen if same file as last time - more efficient */ file_id = DFSDIopen(filename, DFACC_READ); if (file_id == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); nsdgs = (int32)nsdghdr->size; if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); ret_value = nsdgs; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDclear USAGE int DFSDclear() RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Clears all possible set values. After a call to "DFSDclear", all values set by an "DFSDset*" calls will not be written unless they are set again. ----------------------------------------------------------------------------*/ intn DFSDclear(void) { intn ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; if (DFSDIclearNT(&Writesdg) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); ret_value = DFSDIclear(&Writesdg); done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDlastref USAGE uint16 DFSDlastref() RETURNS Returns the reference number of the last accessed scientific data set if successful and FAIL(-1) otherwise. DESCRIPTION Get the most recent reference number used in writing or reading a scientific data set. -----------------------------------------------------------------------------*/ uint16 DFSDlastref(void) { uint16 ret_value; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, 0); ret_value = (uint16)Lastref; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDreadref USAGE int DFSDreadref(filename, ref) char *filename; IN: name of HDF file containing scientific data set uint16 ref; IN: reference number for next "DFSDgetdata" call RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Specifies the reference number for the data set to be read during the next read operation. This routine is most likely to be used in conjunction with "DFANgetlablist" which returns a list of labels for a given tag together with their reference numbers. It provides a sort of random access to scientific data sets. There is no guarantee that reference numbers appear in sequence in an HDF file, so ti is not generally safe to assume that a reference number is a sequence number for a scientific data set. -----------------------------------------------------------------------------*/ intn DFSDreadref(char *filename, uint16 ref) { int32 file_id; int32 aid; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); file_id = DFSDIopen(filename, DFACC_READ); if (file_id == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); if ((aid = Hstartread(file_id, DFTAG_SDG, ref)) == FAIL && (aid = Hstartread(file_id, DFTAG_NDG, ref)) == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_NOMATCH, FAIL); Hendaccess(aid); Readref = ref; Newdata = -1; ret_value = Hclose(file_id); done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDgetslice USAGE intn DFSDgetslice(filename, winst, windims, data, dims) char *filename; IN: name of HDF file int32 winst[]; IN: array containing the coordinates for the start of the slice int32 windims[]; IN: array containing the dimensions of the slice void *data; OUT: array for returning the slice int32 dims[]; OUT: dimensions of array data RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets a part of a scientific data set from a file. "DFSDgetslice" accesses the data set last accessed by "DFSDgetdims". If "DFSDgetdims" has not been called for the named file, "DFSDgetslice" gets a slice from the next data set in the file. The array "winst" specifies the coordinates for the beginning of the slice. Array "windims" gives the size of the slice. The number of elements in both "winst" and "windims" must be equal to the rank of the data set. For example, if the file contains a 3D data set, "winst" may contain the values {2,4,3}, while "windims" contains the values {3,1,4} and the dims should be at least {3,1,4}, the same size as the slice. This will extract a 3x4, two-dimensional slice, containing the elements between(2,4.3) and (4,4,6) from the original data set. The array "data" is the array into which the slice is read. It must be at least as big as the desired slice. The array "dims" is the array containing the actual dimensions of the array "data". The user assigns values to "dims" before calling "DFSDgetslice". All parameters assume FORTRAN-style 1-based arrays. "DFSDgetslice" is obsoleted by "DFSDreadslab". "DFSDreadslab" is the recommended function call to use when reading hyperslabs(previously known as data slices). HDFv3.3 will continue to support "DFSDgetslice" only to maintain backward compatibility with HDF applications built on earlier versions of the library. ----------------------------------------------------------------------------*/ intn DFSDgetslice(const char *filename, int32 winst[], int32 windims[], void *data, int32 dims[]) { intn ret_value; ret_value = (DFSDIgetslice(filename, winst, windims, data, dims, 0)); return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDstartslice USAGE int DFSDstartslice(filename) char *filename; IN: name of HDF file to write to RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Prepares the DFSD interface to write a slice to a scientific data set. Before calling "DFSDstartslice", you must call "DFSDsetdims" to specify the dimensions of the data set to be written to the file. "DFSDstartslice" always appends a new data set to an existing file. Remember, you must call "DFSDstartslice" before calling "DFSDputslice" or "DFSDendslice". "DFSDstarslice" is obsolete in favor of "DFSDstartslab" "DFSDstartslab" is the recommended function to call to use when beginning hyperslab(i.e. data slabs) operations. HDFv3.3 will continue to support "DFSDstartslice" only to maintain backward compatibility with HDF applications built on earlier version of the library. -----------------------------------------------------------------------------*/ intn DFSDstartslice(const char *filename) { intn i; int32 size; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!Writesdg.rank) /* dimensions not set */ HGOTO_ERROR(DFE_BADDIM, FAIL); Sfile_id = DFSDIopen(filename, DFACC_WRITE); if (Sfile_id == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); Writesdg.data.tag = DFTAG_SD; if (!Writeref) Writeref = Hnewref(Sfile_id); if (!Writeref) HGOTO_ERROR(DFE_BADREF, FAIL); Writesdg.data.ref = Writeref; if (Writesdg.numbertype == DFNT_NONE) /* if NT not set,default to float32 */ DFSDsetNT(DFNT_FLOAT32); /* set up to write data */ size = DFKNTsize(Writesdg.numbertype); for (i = 0; i < Writesdg.rank; i++) size *= Writesdg.dimsizes[i]; Writesdg.aid = Hstartwrite(Sfile_id, DFTAG_SD, Writeref, size); if (Writesdg.aid == FAIL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_BADAID, FAIL); /* allocate array for keeping track of dims written */ Sddims = (int32 *)malloc((uint32)Writesdg.rank * sizeof(int32)); if (Sddims == NULL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); for (i = 0; i < Writesdg.rank; i++) Sddims[i] = 0; /* nothing written so far */ done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDputslice USAGE int DFSDputslice(winend, data, dims) int32 winend[]; IN: dimensions that specify the size of slice to be written void *data; IN: array containing slice to be written int32 dims[]; IN: dimensions of array data RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Writes part of a scientific data set to a file. "DFSDputslice" takes some contiguous part of an array in memory and stores it as part of the scientific data set array specified by "DFSDgetdims". Slices must be stored contiguously. Array "windims" specifies the size of the slice to be written. The number of elements in "windims" is equal to the number of dimensions in the scientific data set array. The array "data" is the array in memory containing the slice. The array "dims" contains the dimensions of the array "data". Note that the two arrays "windim" and "dims" need not be the same since the "windims" argument could refer to a sub-array of "data". In this case only a portion of the array "data" is written to the scientific data set. All parameters assume FORTRAN-style 1-based arrays. "DFSDputslice" is obsoleted by "DFSDwriteslab". DFSDwriteslab is the recommended function call to use when writing hyperslabs(previously known as data slices). HDFv3.3 will continue to support "DFSDputslice" only to maintain backward compatibility with HDF applications built on earlier versions of the library. -----------------------------------------------------------------------------*/ intn DFSDputslice(int32 winend[], void *data, int32 dims[]) { intn ret_value; ret_value = (DFSDIputslice(winend, data, dims, 0)); return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDendslice USAGE int DFSDendslice() RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Terminates the write operation after storing a slice of data in a scientific data set. "DFSDendslice" must be called after all the slices are written. It checks to insure that the entire data set has been written, and returns an error code if not. "DFSDendslice" is obsolete in favor of "DFSDendslab". "DFSDendslab" is the recommended function call to use when terminating hyperslab(previously known as data slices) operations. HDFv3.3 will continue to support "DFSDendslice" only to maintain backward compatibility with HDF applications build on earlier versions of the library. ----------------------------------------------------------------------------*/ intn DFSDendslice(void) { intn ret_value; ret_value = (DFSDIendslice(0)); return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDsetNT USAGE int DFSDsetNT(numbertype) int32 *numbertype; IN: Number type of the data to be written RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the number type for the data to be written in the next write operation. "DFSDsetNT" must be called if a number type other than "float32" is to be stored. "DFSDsetNT" and "DFSDsetdims" can be called in any order, but they should be called before any other "DFSDset*" functions and before "DFSDputdata" or "DFSDadddata". Valid values for "DFSDgetNT" are of the general form "DFNT_". If you include the headier file "hdf.h" in your program, you can use the following symbolic names for the number types: 32-bit float DFNT_FLOAT32 5 64-bit float DFNT_FLOAT64 6 8-bit signed int DFNT_INT8 20 8-bit unsigned int DFNT_UINT8 21 16-bit signed int DFNT_INT16 22 16-bit unsigned int DFNT_UINT16 23 32-bit signed int DFNT_INT32 24 32-bit unsigned int DFNT_UINT32 25 ---------------------------------------------------------------------------*/ intn DFSDsetNT(int32 numbertype) { uint8 outNT; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); outNT = (uint8)(DFKisnativeNT(numbertype) ? DFKgetPNSC(numbertype, DF_MT) : (DFKislitendNT(numbertype) ? DFNTF_PC : DFNTF_HDFDEFAULT)); if ((numbertype == Writesdg.numbertype) && (outNT == Writesdg.filenumsubclass)) HGOTO_DONE(SUCCEED); /* Forget previous numbertype */ if (DFSDIclearNT((DFSsdg *)&Writesdg) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); Writesdg.numbertype = numbertype; Writesdg.filenumsubclass = outNT; Ref.nt = 0; Ref.dims = (Ref.dims >= 0 ? 0 : Ref.dims); Ref.new_ndg = 0; ret_value = (DFKsetNT(numbertype)); done: return ret_value; } /*------------------------------------------------------------------- * Name: DFSDIclearNT * Purpose: Reset all "set" values related to number types * Inputs: sdg: pointer to sdg struct to clear * Globals: Ref * Returns: 0 on success, FAIL on error with error set * Users: DFSDsetNT, HDF users * Invokes: none * Remarks: *--------------------------------------------------------------------*/ intn DFSDIclearNT(DFSsdg *sdg) { intn i; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); sdg->numbertype = DFNT_NONE; sdg->filenumsubclass = DFNTF_NONE; /* free scale pointers. Note: scale pointer array is not freed */ /* sdg->dimscales will be freed only when rank is changed */ if (sdg->dimscales) { for (i = 0; i < sdg->rank; i++) HDfreenclear(sdg->dimscales[i]); } Ref.nt = -1; Ref.maxmin = -1; /* maxmin and scales should be changed to */ Ref.scales = -1; /* new number type */ Ref.new_ndg = -1; done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDgetNT USAGE int DFSDgetNT(numbertype) int32 *numbertype; OUT: Number type of the data in the scientific data set. RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the number type of the current scientific data set. This information is then used by calls such as "DFSDgetdata" and "DFSDgetslice". Since "DFSDgetNT" gets the number type of the current data set, "DFSDgetdims" must be called before calling "DFSDgetNT". Valid values for "DFSDgetNT" are of the general form "DFNT_". The following are valid symbolic names and their number types: 32-bit float DFNT_FLOAT32 5 64-bit float DFNT_FLOAT64 6 8-bit signed int DFNT_INT8 20 8-bit unsigned int DFNT_UINT8 21 16-bit signed int DFNT_INT16 22 16-bit unsigned int DFNT_UINT16 23 32-bit signed int DFNT_INT32 24 32-bit unsigned int DFNT_UINT32 25 --------------------------------------------------------------------------- */ intn DFSDgetNT(int32 *pnumbertype) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); *(pnumbertype) = Readsdg.numbertype; if (*(pnumbertype) == DFNT_NONE) HGOTO_ERROR(DFE_BADNUMTYPE, FAIL); done: return ret_value; } /*--------------------------------------------------------------------------- NAME DFSDpre32sdg USAGE int DFSDpre32sdg(filename, ref, ispre32) char *filename; IN: The name of the HDF file containing the scientific data set uint16 ref; IN: Reference number of scientific data set int ispre32; OUT: Pointer to the results of the inquiry RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Tests if the scientific data set with the specified reference number was created by a HDF library that precedes HDF3.2. This routine is for programmers who need to know whether a scientific data set was written by a version of the HDF library earlier than HDF3.2. If the scientific data set was created with a version of HDF prior to v3.2, "ispre32" will be set to 1, otherwise it will be set to 0. Based on this information, programmers can decide whether or not to transpose the corresponding array. ----------------------------------------------------------------------------*/ intn DFSDpre32sdg(char *filename, uint16 ref, intn *ispre32) { uint32 num; int32 file_id; intn found = 0; DFnsdgle *ptr; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); file_id = DFSDIopen(filename, DFACC_READ); if (file_id == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); ptr = nsdghdr->nsdg_t; num = nsdghdr->size; while ((num > 0) && (ptr != NULL) && !found) { if ((ptr->nsdg.tag == DFTAG_SDG) && (ptr->nsdg.ref == ref)) { /* pure SDG */ found = 1; *ispre32 = TRUE; } else if ((ptr->sdg.tag == DFTAG_SDG) && (ptr->sdg.ref == ref)) { /* NDGSDG */ found = 1; *ispre32 = FALSE; } else { ptr = ptr->next; num--; } } /* while */ if (((num == 0) && (ptr != NULL)) || ((num != 0) && (ptr == NULL)) || !found) HCLOSE_GOTO_ERROR(file_id, DFE_BADTABLE, FAIL); if (Hclose(file_id) < 0) ret_value = FAIL; done: return ret_value; } /* end of DFSDpre32sdg */ /******************************************************************************/ /*--------------------- Lower level routines --------------------------------*/ /******************************************************************************/ /* Functions for NDG and SDG stuff */ /*-------------------------------------------------------------------------- * Name: DFSDIsetnsdg_t * Purpose: Set up the NDG/SDG table. Each node has two fields: the 1st field is NDG or SDG, the 2nd field has value only when it is a special NDG, i.e. the data set is float32 and not compressed. * Inputs: file_id: pointer to HDF file containing SDG * Returns: 0 on success, FAIL on failure with error set * Users: DFSDIopen for READ *--------------------------------------------------------------------------*/ static intn DFSDIsetnsdg_t(int32 file_id, DFnsdg_t_hdr *l_nsdghdr) { uint32 sz_DFnsdgle = (uint32)sizeof(struct DFnsdgle); int32 aid; /* access id */ int32 ndgs; /* number of ndg's */ int32 sdgs; /* number of sdg's */ int32 GroupID; uint16 intag = DFTAG_NULL; uint16 inref = DFTAG_NULL; intn moretags; intn found; DFnsdgle *ntb = NULL; DFnsdgle *stb = NULL; DFnsdgle *new; DFnsdgle *nf; DFnsdgle *nr; DFnsdgle *sf; DFnsdgle *sr; DFdi di; DFdi lnkdd[2]; uint8 *bufp; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id)) HGOTO_ERROR(DFE_BADCALL, FAIL); /* Check if temporary buffer has been allocated */ if (ptbuf == NULL) { ptbuf = (uint8 *)malloc(TBUF_SZ * sizeof(uint8)); if (ptbuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* MMM: Talk to Shiming and make sure the change made to the way ndgs and sdgs are handled is ok. */ ndgs = Hnumber(file_id, DFTAG_NDG); sdgs = Hnumber(file_id, DFTAG_SDG); if ((ndgs == FAIL) || (sdgs == FAIL)) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((ndgs + sdgs) == 0) { /* no sdgs or ndgs in file */ l_nsdghdr->size = 0; l_nsdghdr->nsdg_t = NULL; HGOTO_DONE(SUCCEED); } if ((ntb = (DFnsdgle *)malloc(sz_DFnsdgle)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* the first node in each table is a dummy node */ ntb->nsdg.tag = DFTAG_NULL; /* set up and init an ndg table */ ntb->nsdg.ref = 0; ntb->sdg.tag = DFTAG_NULL; ntb->sdg.ref = 0; ntb->next = NULL; if ((stb = (DFnsdgle *)malloc(sz_DFnsdgle)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); stb->nsdg.tag = DFTAG_NULL; /* set up and init an sdg table */ stb->nsdg.ref = 0; stb->sdg.tag = DFTAG_NULL; /* this field should be named as */ stb->sdg.ref = 0; /* stb->ndg.tag, the ndg to which this */ stb->next = NULL; /* sdg belongs. */ aid = Hstartread(file_id, DFTAG_WILDCARD, DFREF_WILDCARD); moretags = (aid != FAIL); while (moretags) { /* read dd's and put each dd in ntb or stb */ HQuerytagref(aid, &intag, &inref); /* put NDG or SDG on ntb or stb */ if (intag == DFTAG_NDG) { nr = ntb; nf = ntb; while ((inref > nf->nsdg.ref) && (nf->next != NULL)) { nr = nf; nf = nf->next; } /* MMM: Tlk to Shiming and make sure the way this part was rearranged is ok. */ /* check for duplicate nsdg */ if (inref == nf->nsdg.ref) HGOTO_ERROR(DFE_BADNDG, FAIL); /* add a node to the table */ if ((new = (DFnsdgle *)malloc(sz_DFnsdgle)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new->nsdg.tag = DFTAG_NDG; new->nsdg.ref = inref; new->sdg.tag = DFTAG_NULL; new->sdg.ref = 0; if (inref < nf->nsdg.ref) { /* does it go before current node? */ new->next = nf; nr->next = new; } else { /* or at the end? */ new->next = nf->next; nf->next = new; } /* Does this NDG have an SDG? */ if ((GroupID = DFdiread(file_id, DFTAG_NDG, inref)) < 0) HGOTO_ERROR(DFE_BADGROUP, FAIL); found = FALSE; di.tag = DFTAG_NULL; di.ref = 0; while ((found == 0) && (DFdiget(GroupID, &di.tag, &di.ref) == 0)) { if (di.tag == DFTAG_SDLNK) found = TRUE; } if (found) { /* read in the tag/refs in the link element */ if (Hgetelement(file_id, di.tag, di.ref, ptbuf) == (int32)FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } bufp = ptbuf; UINT16DECODE(bufp, lnkdd[0].tag); UINT16DECODE(bufp, lnkdd[0].ref); UINT16DECODE(bufp, lnkdd[1].tag); UINT16DECODE(bufp, lnkdd[1].ref); new->sdg.tag = lnkdd[1].tag; new->sdg.ref = lnkdd[1].ref; DFdifree(GroupID); } } /* end of NDG */ if (intag == DFTAG_SDG) { sr = stb; sf = stb; while ((inref > sf->nsdg.ref) && (sf->next != NULL)) { sr = sf; sf = sf->next; } if (inref == sf->nsdg.ref) HGOTO_ERROR(DFE_BADNDG, FAIL); /* insert a new node */ if ((new = (DFnsdgle *)malloc(sz_DFnsdgle)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new->nsdg.tag = DFTAG_SDG; new->nsdg.ref = inref; new->sdg.tag = DFTAG_NULL; new->sdg.ref = 0; if (inref < sf->nsdg.ref) { /* does it go before current node? */ new->next = sf; sr->next = new; } else { /* or at the end? */ new->next = sf->next; sf->next = new; } /* Does it belong to an NDG? */ if ((GroupID = DFdiread(file_id, DFTAG_SDG, inref)) < 0) HGOTO_ERROR(DFE_BADGROUP, FAIL); found = FALSE; di.tag = DFTAG_NULL; di.ref = 0; while ((found == 0) && (DFdiget(GroupID, &di.tag, &di.ref) == 0)) { if (di.tag == DFTAG_SDLNK) found = TRUE; } if (found) { /* read in the tag/refs in the link element */ if (Hgetelement(file_id, di.tag, di.ref, ptbuf) == (int32)FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } bufp = ptbuf; UINT16DECODE(bufp, lnkdd[0].tag); UINT16DECODE(bufp, lnkdd[0].ref); UINT16DECODE(bufp, lnkdd[1].tag); UINT16DECODE(bufp, lnkdd[1].ref); new->sdg.tag = lnkdd[0].tag; new->sdg.ref = lnkdd[0].ref; DFdifree(GroupID); } } /* end of SDG */ /* get next dd */ moretags = (SUCCEED == Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT)); } /* gone through the dd blocks */ Hendaccess(aid); /* merge stb and ntb */ /* remove SDGNDG from stb */ nf = ntb->next; while (nf != NULL) { inref = nf->sdg.ref; if (inref != 0) { /* it has an SDG */ sr = stb; sf = stb; while ((sf->nsdg.ref < inref) && (sf->next != NULL)) { sr = sf; sf = sf->next; } if (sf->nsdg.ref == inref) { if (sf->sdg.ref != nf->nsdg.ref) { HGOTO_ERROR(DFE_BADNDG, FAIL); } else { sr->next = sf->next; HDfreenclear(sf); sdgs--; } } } nf = nf->next; } /* check all SDGNDGs were removed */ sf = stb->next; while (sf != NULL) { if (sf->sdg.ref != 0) HGOTO_ERROR(DFE_BADSDG, FAIL); sf = sf->next; } /* merge the two tables into one */ nf = ntb; /* looking for the end of ntb */ while (nf->next != NULL) nf = nf->next; nf->next = stb->next; /* the first node in stb is a dummy */ l_nsdghdr->size = (uint32)(ndgs + sdgs); l_nsdghdr->nsdg_t = ntb->next; done: /* Release the first nodes in stb and ntb */ free(stb); free(ntb); return ret_value; } /* end of DFSDsdtnsdg_t */ /*----------------------------------------------------------------------- * Name DFSDInextnsdg * Purpose: Returns next ndg or sdg in the file * Inputs: nsdghdr: point to the nsdg table * nsdg: the structure holds the di of next sdg or ndg * Returns: 0 on succeeds, FAIL on failure * -------------------------------------------------------------------*/ static intn DFSDInextnsdg(DFnsdg_t_hdr *l_nsdghdr, DFdi *nsdg) { uint32 num; intn found = FALSE; DFnsdgle *ptr; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); nsdg->tag = DFTAG_NULL; nsdg->ref = 0; ptr = l_nsdghdr->nsdg_t; num = l_nsdghdr->size; if ((ptr == NULL) || (num == 0)) HGOTO_DONE(SUCCEED); if ((lastnsdg.tag == DFTAG_NULL) && (lastnsdg.ref == 0)) { found = TRUE; } else { while ((num > 0) && (ptr != NULL) && !found) { if ((ptr->nsdg.tag == lastnsdg.tag) && (ptr->nsdg.ref == lastnsdg.ref)) { if ((ptr = ptr->next) != NULL) found = TRUE; } else { ptr = ptr->next; num--; } } /* while */ if (((num == 0) && (ptr != NULL)) || ((num != 0) && (ptr == NULL)) || !found) { HGOTO_ERROR(DFE_BADTABLE, FAIL); } } /* else */ if (found) { nsdg->tag = ptr->nsdg.tag; nsdg->ref = ptr->nsdg.ref; } done: return ret_value; } /* end of DFSDInextnsdg */ /*----------------------------------------------------------------------------- * Name: DFSDIgetndg * Purpose: Reads in NDG * Inputs: file_id: pointer to HDF file containing NDG * ref: ref of NDG to read * sdg: pointer to DFSsdg struct to read NDG into * Returns: 0 on success, FAIL on failure with error set * Users: HDF programmers, DFSDIsdginfo * Invokes: DFgetelement, DFdiread, DFdiget, DFaccess, DFread DFSDgetsdg * Method: Reads in NDG using DFdiread. Gets each tag/ref using DFdiget. * Reads in dimensions using DFgetelement. * Call DFSDgetsdg to read in the rest info. * Mallocs space for these, freeing * previously allocated space. * Remarks: This accepts non-float32 data *---------------------------------------------------------------------------*/ static intn DFSDIgetndg(int32 file_id, uint16 tag, uint16 ref, DFSsdg *sdg) { int16 int16var; int32 i; intn luf; DFdi elmt; DFdi nt; int32 length; int32 numtype = 0; /* current number type */ int32 fileNTsize = 0; /* size of this NT as it is in the file */ int32 localNTsize = 0; /* size of this NT as it is in this machine */ int32 ret; int32 aid; int32 GroupID; int8 fileNT = 0; /* file number subclass */ int8 platnumsubclass = 0; /* platform number subclass */ uint8 ntstring[4]; uint8 *isscales; uint8 *buf; uint8 *p; /* temporary pointer for moving things to buffer */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id)) HGOTO_ERROR(DFE_BADCALL, FAIL); if (!ref) HGOTO_ERROR(DFE_BADREF, FAIL); /* Check if temporary buffer has been allocated */ if (ptbuf == NULL) { ptbuf = (uint8 *)malloc(TBUF_SZ * sizeof(uint8)); if (ptbuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read NDG into memory */ if ((GroupID = DFdiread(file_id, tag, ref)) < 0) HGOTO_ERROR(DFE_BADGROUP, FAIL); DFSDIclear(sdg); if (tag == DFTAG_NDG) DFSDIclearNT(sdg); Ismaxmin = 0; IsCal = FALSE; /* * Loop through all members of the group */ while (!DFdiget(GroupID, &elmt.tag, &elmt.ref)) { luf = -1; /* flag value for label/unit/ */ /* format gets process tag/ref */ switch (elmt.tag) { case DFTAG_SD: /* data tag/ref */ sdg->data.tag = elmt.tag; /* put tag/ref in struct */ sdg->data.ref = elmt.ref; break; case DFTAG_SDD: /* dimension */ aid = Hstartread(file_id, elmt.tag, elmt.ref); if (aid == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADAID, FAIL); } /* read rank */ if (Hread(aid, (int32)2, ptbuf) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } p = ptbuf; INT16DECODE(p, int16var); sdg->rank = (intn)int16var; /* get space for dimensions */ sdg->dimsizes = (int32 *)malloc((uint32)sdg->rank * sizeof(int32)); if (sdg->dimsizes == NULL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read dimension record */ if (Hread(aid, (int32)4 * sdg->rank, ptbuf) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } p = ptbuf; for (i = 0; i < sdg->rank; i++) INT32DECODE(p, sdg->dimsizes[i]); /* read tag/ref of NT */ if (Hread(aid, (int32)4, ptbuf) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } p = ptbuf; UINT16DECODE(p, nt.tag); UINT16DECODE(p, nt.ref); /* read actual NT */ if (Hgetelement(file_id, nt.tag, nt.ref, ntstring) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_BADCALL, FAIL); } /* if looking for an SDG type must be FLOAT32 */ if (tag == DFTAG_SDG && ntstring[1] != DFNT_FLOAT32) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_BADCALL, FAIL); } /* set NT info */ numtype = (int32)ntstring[1]; fileNT = (int8)ntstring[3]; platnumsubclass = DFKgetPNSC(numtype, DF_MT); if ((fileNT != DFNTF_HDFDEFAULT) && (fileNT != DFNTF_PC) && (fileNT != platnumsubclass)) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_BADCALL, FAIL); } if (fileNT != DFNTF_HDFDEFAULT) { /* if native or little endian */ if (fileNT != DFNTF_PC) /* native */ numtype |= DFNT_NATIVE; else /* little endian */ numtype |= DFNT_LITEND; } /* end if */ sdg->filenumsubclass = ntstring[3]; sdg->numbertype = numtype; /* set size of NT */ fileNTsize = DFKNTsize(numtype); localNTsize = DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); /* read and check all scale NTs */ for (i = 0; i < sdg->rank; i++) { if (Hread(aid, (int32)4, ptbuf) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } p = ptbuf; UINT16DECODE(p, nt.tag); UINT16DECODE(p, nt.ref); /* read NT itself */ if (Hgetelement(file_id, nt.tag, nt.ref, ntstring) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_BADCALL, FAIL); } /* if looking for an SDG type must be FLOAT32 */ if (tag == DFTAG_SDG && ntstring[1] != DFNT_FLOAT32) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_BADCALL, FAIL); } } /* end for loop */ Hendaccess(aid); break; case DFTAG_SDLNK: /* SDG NDG link */ break; /* do nothing in 3.2 */ case DFTAG_SDL: /* labels */ if (luf == (-1)) luf = LABEL; case DFTAG_SDU: /* units */ if (luf == (-1)) luf = UNIT; case DFTAG_SDF: /* formats */ if (luf == (-1)) luf = FORMAT; if (!sdg->dimsizes) { DFdifree(GroupID); HGOTO_ERROR(DFE_CORRUPT, FAIL); } /* get needed size of buffer, allocate */ length = Hlength(file_id, elmt.tag, elmt.ref); if (length == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } buf = (uint8 *)malloc((uint32)length); if (buf == NULL) { DFdifree(GroupID); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read in luf */ if (Hgetelement(file_id, elmt.tag, elmt.ref, buf) == FAIL) { DFdifree(GroupID); free(buf); HGOTO_ERROR(DFE_GETELEM, FAIL); } p = buf; /* allocate data luf space */ sdg->dataluf[luf] = (char *)malloc((uint32)strlen((char *)p) + 1); if (sdg->dataluf[luf] == NULL) { DFdifree(GroupID); free(buf); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* extract data luf */ strcpy(sdg->dataluf[luf], (char *)p); p += strlen(sdg->dataluf[luf]) + 1; /* get space for dimluf array */ sdg->dimluf[luf] = (char **)malloc((uint32)sdg->rank * sizeof(char *)); if (sdg->dimluf[luf] == NULL) { DFdifree(GroupID); free(buf); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* extract dimension lufs */ for (i = 0; i < sdg->rank; i++) { sdg->dimluf[luf][i] = (char *)malloc((uint32)strlen((char *)p) + 1); if (sdg->dimluf[luf][i] == NULL) { DFdifree(GroupID); free(buf); HGOTO_ERROR(DFE_NOSPACE, FAIL); } strcpy(sdg->dimluf[luf][i], (char *)p); p += strlen(sdg->dimluf[luf][i]) + 1; } free(buf); break; case DFTAG_SDS: /* scales */ if (!sdg->dimsizes) { DFdifree(GroupID); HGOTO_ERROR(DFE_CORRUPT, FAIL); } /* set up to read scale */ aid = Hstartread(file_id, elmt.tag, elmt.ref); if (aid == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADAID, FAIL); } /* read isscales */ isscales = (uint8 *)malloc((uint32)sdg->rank); if (isscales == NULL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (Hread(aid, (int32)sdg->rank, isscales) == FAIL) { DFdifree(GroupID); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } /* allocate scale pointers */ sdg->dimscales = (uint8 **)malloc((uint32)sdg->rank * sizeof(int8 *)); if (sdg->dimscales == NULL) { DFdifree(GroupID); free(isscales); Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read scales */ for (i = 0; i < sdg->rank; i++) { sdg->dimscales[i] = NULL; /* default */ if (!isscales[i]) continue; /* space for scale */ sdg->dimscales[i] = (uint8 *)malloc((size_t)(sdg->dimsizes[i] * localNTsize)); if (sdg->dimscales[i] == NULL) { DFdifree(GroupID); free(isscales); Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (platnumsubclass == fileNT) { /* no conversion needed */ ret = Hread(aid, (int32)sdg->dimsizes[i] * fileNTsize, (uint8 *)sdg->dimscales[i]); if (ret == FAIL) { DFdifree(GroupID); free(isscales); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } } else { /* conversion necessary */ /* allocate conversion buffer */ buf = (uint8 *)malloc((size_t)(sdg->dimsizes[i] * fileNTsize)); if (buf == NULL) { DFdifree(GroupID); free(isscales); Hendaccess(aid); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read scale from file */ ret = Hread(aid, (int32)(sdg->dimsizes[i] * fileNTsize), buf); if (ret == FAIL) { DFdifree(GroupID); free(buf); free(isscales); Hendaccess(aid); HGOTO_ERROR(DFE_READERROR, FAIL); } p = buf; /* convert, all at once */ DFKconvert((void *)p, (void *)sdg->dimscales[i], numtype, sdg->dimsizes[i], DFACC_READ, 0, 0); free(buf); } } free(isscales); Hendaccess(aid); break; case DFTAG_SDC: /* coordsys */ /* find and allocate necessary space */ length = Hlength(file_id, elmt.tag, elmt.ref); if (length == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } sdg->coordsys = (char *)malloc((uint32)length); if (sdg->coordsys == NULL) { DFdifree(GroupID); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read coordsys */ if (Hgetelement(file_id, elmt.tag, elmt.ref, (uint8 *)sdg->coordsys) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } break; case DFTAG_SDM: /* max/min */ if (fileNT == platnumsubclass) { /* no conversion */ if (Hgetelement(file_id, elmt.tag, elmt.ref, (uint8 *)&(sdg->max_min[0])) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } } else { /* conversion needed */ /* allocate buffer */ buf = (uint8 *)malloc((size_t)(2 * fileNTsize)); if (buf == NULL) { DFdifree(GroupID); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read and convert max/min */ if (Hgetelement(file_id, elmt.tag, elmt.ref, buf) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } DFKconvert((void *)buf, (void *)&(sdg->max_min[0]), numtype, 2, DFACC_READ, 0, 0); free(buf); } Ismaxmin = 1; break; case DFTAG_CAL: if (fileNT == platnumsubclass) { /* no conversion */ /* get size of element */ intn eltSize = (intn)Hlength(file_id, elmt.tag, elmt.ref); if (eltSize == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } if (eltSize == 36) { /* element is new, double based type */ if (Hgetelement(file_id, elmt.tag, elmt.ref, (unsigned char *)&sdg->cal) < 0) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } } else { /* element is old float based type */ float32 buf2[4]; /* allocate input buffer */ if (Hgetelement(file_id, elmt.tag, elmt.ref, (unsigned char *)buf2) < 0) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* move 'em over */ sdg->ioff = (float64)buf2[0]; sdg->ioff_err = (float64)buf2[1]; sdg->cal = (float64)buf2[2]; sdg->cal_err = (float64)buf2[3]; sdg->cal_type = DFNT_INT16; } } else { intn eltSize; /* get size of element */ eltSize = (intn)Hlength(file_id, elmt.tag, elmt.ref); if (eltSize == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } /* allocate buffer */ buf = (uint8 *)malloc((uint32)eltSize); if (buf == NULL) { DFdifree(GroupID); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read and convert calibration */ if (Hgetelement(file_id, elmt.tag, elmt.ref, buf) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } if (eltSize == 36) { /* element is new, double based type */ /* read in the 64bit float factors */ DFKconvert((void *)buf, (void *)&sdg->cal, DFNT_FLOAT64, 4, DFACC_READ, 0, 0); /* read in the 32bit integer number type */ DFKconvert((void *)(buf + 32), (void *)&sdg->cal_type, DFNT_INT32, 1, DFACC_READ, 0, 0); } else { /* element is old float based type */ float32 buf2[4]; /* convert calibration factors */ DFKconvert((void *)buf, (void *)buf2, DFNT_FLOAT32, 4, DFACC_READ, 0, 0); /* move 'em over */ sdg->ioff = (float64)buf2[0]; sdg->ioff_err = (float64)buf2[1]; sdg->cal = (float64)buf2[2]; sdg->cal_err = (float64)buf2[3]; sdg->cal_type = DFNT_INT16; } free(buf); } IsCal = TRUE; break; case DFTAG_FV: if (fileNT == platnumsubclass) { /* no conversion */ /* get size of element */ intn eltSize = (intn)Hlength(file_id, elmt.tag, elmt.ref); if (eltSize == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } /* get element */ if (Hgetelement(file_id, elmt.tag, elmt.ref, (unsigned char *)sdg->fill_value) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } } else { intn eltSize; /* get size of element */ eltSize = (intn)Hlength(file_id, elmt.tag, elmt.ref); if (eltSize == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADLEN, FAIL); } /* allocate buffer for conversion */ buf = (uint8 *)malloc((uint32)eltSize); if (buf == NULL) { DFdifree(GroupID); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read fill value into buffer */ if (Hgetelement(file_id, elmt.tag, elmt.ref, buf) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* convert the fill value */ DFKconvert((void *)buf, (void *)sdg->fill_value, numtype, 1, DFACC_READ, 0, 0); free(buf); } break; case DFTAG_SDT: FileTranspose = 1; break; default: if ((elmt.tag <= DFTAG_BREQ) && (elmt.tag >= DFTAG_EREQ)) { DFdifree(GroupID); HGOTO_ERROR(DFE_BADNDG, FAIL); } break; } } /* since the dataset exists, the fill value cannot be changed */ sdg->fill_fixed = TRUE; done: return ret_value; } /*---------------------------------------------------------------------------* * Name: DFSDIputndg * Purpose: Write NDG out to HDF file * Inputs: file_id: HDF file pointer * ref: ref to put NDG with * sdg: struct containing NDG info to put * Returns: 0 on success, FAIL on failure with error set * Users: HDF programmers, utilities, DFSDputdata, other routines * Invokes: DFIcheck, DFdistart, DFdiadd, DFdiend, DFputelement, DFaccess, * DFwrite * Remarks: Writes out NTs *---------------------------------------------------------------------------*/ static intn DFSDIputndg(int32 file_id, uint16 ref, DFSsdg *sdg) { int32 i; intn j; intn luf; intn issdg = 0; /* issdg=1 if it is NDG SDG */ intn len; uint16 luftag; uint8 *buf; uint8 *Isscales = NULL; uint8 *bufp; uint8 ntstring[4]; uint8 platnumsubclass; uint8 outNT; /* file number type subclass */ int32 GroupID; int32 numtype; /* current number type */ int32 fileNTsize; /* size of this NT as it will be in the file */ int32 scaleNTsize; /* size of scale NT as it will be in the file */ int32 aid; DFdi nt; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id)) HGOTO_ERROR(DFE_BADCALL, FAIL); if (!ref) HGOTO_ERROR(DFE_BADREF, FAIL); /* Check if temporary buffer has been allocated */ if (ptbuf == NULL) { ptbuf = (uint8 *)malloc(TBUF_SZ * sizeof(uint8)); if (ptbuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* set number type and subclass */ if (sdg->numbertype == DFNT_NONE) DFSDsetNT(DFNT_FLOAT32); /* default is float32 */ numtype = sdg->numbertype; fileNTsize = DFKNTsize(numtype); scaleNTsize = fileNTsize; /* for now, assume same. MAY CHANGE */ outNT = sdg->filenumsubclass; platnumsubclass = (uint8)DFKgetPNSC(numtype, (int32)DF_MT); /* prepare to start writing ndg */ if ((GroupID = DFdisetup(10)) < 0) HGOTO_ERROR(DFE_GROUPSETUP, FAIL); /* put ND and ref */ if (DFdiput(GroupID, sdg->data.tag, sdg->data.ref) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); if (Ref.nt <= 0) { /* will not execute if has been written in putsdg */ /* construct and write out NT */ ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = (uint8)(numtype & 0xff); /* type */ ntstring[2] = (uint8)(fileNTsize * 8); /* width of number type in bits */ ntstring[3] = outNT; /* class: IEEE or machine class */ if (Hputelement(file_id, DFTAG_NT, ref, ntstring, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.nt = (intn)ref; } /* write out NDD (dimension record) */ if (Ref.dims <= 0) { /* new NDD; write rank, dims, data NT and scale NTs */ /* put rank & dimensions in buffer */ bufp = ptbuf; UINT16ENCODE(bufp, sdg->rank); for (i = 0; i < sdg->rank; i++) INT32ENCODE(bufp, sdg->dimsizes[i]); /* put data NT and scale NTs in buffer */ nt.tag = DFTAG_NT; nt.ref = (uint16)Ref.nt; /* same NT for scales too */ /* "<=" used to put 1 data NT + rank scale NTs in buffer */ for (i = 0; i <= sdg->rank; i++) { /* scale NTs written even if no scale! */ UINT16ENCODE(bufp, nt.tag); UINT16ENCODE(bufp, nt.ref); } /* write out NDD record */ if (Hputelement(file_id, DFTAG_SDD, ref, ptbuf, (int32)(bufp - ptbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.dims = (intn)ref; } /* write dimension record tag/ref */ if (DFdiput(GroupID, DFTAG_SDD, (uint16)Ref.dims) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* write out label/unit/format */ for (luf = LABEL; luf <= FORMAT; luf++) { luftag = (uint16)((luf == LABEL) ? DFTAG_SDL : (luf == UNIT) ? DFTAG_SDU : DFTAG_SDF); bufp = ptbuf; /* this block of code checks if luf is NULL, else writes it */ if (!Ref.luf[luf]) { /* if luf was set */ Ref.luf[luf] = -1; /* assume it is NULL */ /* if dataluf non-NULL, set up to write */ if (sdg->dataluf[luf] && sdg->dataluf[luf][0]) { strcpy((char *)bufp, sdg->dataluf[luf]); bufp += strlen((char *)bufp) + 1; } else { /* dataluf NULL */ *bufp++ = '\0'; } /* for each dimluf, if non-NULL, set up to write */ for (i = 0; i < sdg->rank; i++) { if (sdg->dimluf[luf] && sdg->dimluf[luf][i] && sdg->dimluf[luf][i][0]) { /* dimluf not NULL */ strcpy((char *)bufp, sdg->dimluf[luf][i]); bufp += strlen((char *)bufp) + 1; } else { /* dimluf NULL */ *bufp++ = '\0'; } } /* i loop */ Ref.luf[luf] = (intn)ref; /* remember ref */ if (Hputelement(file_id, luftag, (uint16)Ref.luf[luf], ptbuf, (int32)(bufp - ptbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); } /* luf was set */ /* write luf tag/ref */ if (Ref.luf[luf] > 0) { if (DFdiput(GroupID, luftag, (uint16)Ref.luf[luf]) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } } /* luf loop */ /* check if there is a scale and write it out */ if (!Ref.scales) { /* if scale set */ Isscales = (uint8 *)malloc((uint32)sdg->rank); if (Isscales == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); Ref.scales = (-1); /* assume there is no scale */ /* set up Isscales array */ for (i = 0; i < sdg->rank; i++) { if (sdg->dimscales && sdg->dimscales[i]) { /* a scale exists */ Isscales[i] = 1; Ref.scales = 0; /* flag: write out scales */ } else Isscales[i] = 0; } } if (!Ref.scales) { /* write out scales */ /* compute space needed for scales */ len = 0; for (i = 0; i < sdg->rank; i++) { if (Isscales[i] == 1) len += (intn)(sdg->dimsizes[i] * scaleNTsize); } len += sdg->rank; aid = Hstartwrite(file_id, DFTAG_SDS, ref, len); if (aid == FAIL) { free(Isscales); HGOTO_ERROR(DFE_BADAID, FAIL); } /* write Isscales */ if (Hwrite(aid, (int32)sdg->rank, Isscales) == FAIL) { free(Isscales); HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* Write scales */ for (j = 0; j < sdg->rank; j++) { if (!Isscales[j]) continue; if (platnumsubclass == outNT) { /* no conversion needed */ if (Hwrite(aid, (int32)(fileNTsize * sdg->dimsizes[j]), (uint8 *)sdg->dimscales[j]) == FAIL) { free(Isscales); HGOTO_ERROR(DFE_WRITEERROR, FAIL); } } else { /* convert and write */ /* allocate buffer */ buf = (uint8 *)malloc((uint32)(fileNTsize * sdg->dimsizes[j])); if (buf == NULL) { free(Isscales); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* convert, all at once */ DFKconvert((void *)sdg->dimscales[j], (void *)buf, numtype, sdg->dimsizes[j], DFACC_WRITE, 0, 0); /* write it all out */ if (Hwrite(aid, (int32)(fileNTsize * sdg->dimsizes[j]), buf) == FAIL) { free(Isscales); free(buf); HGOTO_ERROR(DFE_WRITEERROR, FAIL); } free(buf); } } Ref.scales = (intn)ref; Hendaccess(aid); } free(Isscales); Isscales = NULL; if (Ref.scales > 0) if (DFdiput(GroupID, DFTAG_SDS, (uint16)Ref.scales) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* write coordsys */ if (!sdg->coordsys || !sdg->coordsys[0]) Ref.coordsys = (-1); if (!Ref.coordsys) { if (Hputelement(file_id, DFTAG_SDC, ref, (uint8 *)sdg->coordsys, (int32)(strlen(sdg->coordsys) + 1)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.coordsys = (intn)ref; } if (Ref.coordsys > 0) { if (DFdiput(GroupID, DFTAG_SDC, (uint16)Ref.coordsys) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } /* write max/min */ if (!Ref.maxmin) { if (platnumsubclass == outNT) { /* no conversion */ if (Hputelement(file_id, DFTAG_SDM, ref, (uint8 *)&(sdg->max_min[0]), (int32)(2 * fileNTsize)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.maxmin = (intn)ref; } else { /* allocate buffer */ buf = (uint8 *)malloc((size_t)(2 * fileNTsize)); /* max/min is 8 bytes */ if (buf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* convert */ DFKconvert((void *)&(sdg->max_min[0]), (void *)buf, numtype, 2, DFACC_WRITE, 0, 0); /* write */ if (Hputelement(file_id, DFTAG_SDM, ref, buf, (int32)(2 * fileNTsize)) == FAIL) { free(buf); HGOTO_ERROR(DFE_PUTELEM, FAIL); } Ref.maxmin = (intn)ref; free(buf); } } if (Ref.maxmin > 0) { if (DFdiput(GroupID, DFTAG_SDM, (uint16)Ref.maxmin) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } Ref.maxmin = (-1); /* max/min should be reset for each data set */ /* Write calibration. */ if (!Ref.cal) { if (platnumsubclass == outNT) { /* no conversion */ if (Hputelement(file_id, DFTAG_CAL, ref, (unsigned char *)&sdg->cal, (int32)36) < 0) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.cal = (intn)ref; } else { /* allocate buffer */ uint8 buf2[4 * sizeof(float64) + sizeof(int32)]; /* convert doubles */ DFKconvert((void *)&sdg->cal, (void *)buf2, DFNT_FLOAT64, 4, DFACC_WRITE, 0, 0); /* convert int */ DFKconvert((void *)&sdg->cal_type, (void *)(buf2 + 32), DFNT_INT32, 1, DFACC_WRITE, 0, 0); /* write it into the file */ if (Hputelement(file_id, DFTAG_CAL, ref, (unsigned char *)buf2, (int32)36) < 0) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.cal = (intn)ref; } } if (Ref.cal > 0) { if (DFdiput(GroupID, DFTAG_CAL, (uint16)Ref.cal) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } Ref.cal = (-1); /* Calibration should be reset for each data set */ /* Write fill value. */ if (!Ref.fill_value) { if (platnumsubclass == outNT) { /* No conversion */ if (Hputelement(file_id, DFTAG_FV, ref, (unsigned char *)sdg->fill_value, (int32)fileNTsize) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.fill_value = (intn)ref; } else { /* Allocate buffer */ uint8 buf2[DFSD_MAXFILL_LEN]; /* Convert from native to IEEE */ DFKconvert((void *)sdg->fill_value, (void *)buf2, numtype, 1, DFACC_WRITE, 0, 0); /* Write it into the file */ if (Hputelement(file_id, DFTAG_FV, ref, (unsigned char *)buf2, (int32)fileNTsize) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); Ref.fill_value = (intn)ref; } } /* Check to add to DFgroup */ if (Ref.fill_value > 0) { if (DFdiput(GroupID, DFTAG_FV, (uint16)Ref.fill_value) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } Ref.fill_value = (-1); /* Fill value should be reset for each data set */ if (!Ref.transpose) { /* if transposed, add transpose tag */ if (Hdupdd(file_id, DFTAG_SDT, ref, DFTAG_SDD, ref) == FAIL) HGOTO_ERROR(DFE_DUPDD, FAIL); Ref.transpose = (intn)ref; } if (Ref.transpose > 0) { if (DFdiput(GroupID, DFTAG_SDT, (uint16)Ref.transpose) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } if (numtype == DFNT_FLOAT32) { /* if float32, add a DFTAG_SDLNK */ DFdi lnkdd[2]; issdg = 1; lnkdd[0].tag = DFTAG_NDG; lnkdd[0].ref = ref; lnkdd[1].tag = DFTAG_SDG; lnkdd[1].ref = ref; bufp = ptbuf; for (i = 0; i < 2; i++) { UINT16ENCODE(bufp, lnkdd[i].tag); UINT16ENCODE(bufp, lnkdd[i].ref); } if (Hputelement(file_id, DFTAG_SDLNK, ref, ptbuf, (int32)(bufp - ptbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); /* write DFTAG_SDLNK */ if (DFdiput(GroupID, DFTAG_SDLNK, ref) < 0) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } /* write out NDG */ if (DFdiwrite(file_id, GroupID, DFTAG_NDG, ref) < 0) HGOTO_ERROR(DFE_GROUPWRITE, FAIL); /* write an SDG point to the dataset if it is an NDG SDG */ if (issdg) { if (Hdupdd(file_id, DFTAG_SDG, ref, DFTAG_NDG, ref) == FAIL) HCLOSE_GOTO_ERROR(file_id, DFE_DUPDD, FAIL); } done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIendslice * Purpose: Write of data to SDG completed, write SDG and close file * Inputs: isfortran: true if called from Fortran * Returns: 0 on success, FAIL on failure with error set * Users: DFSDIputdata * Invokes: DFSDputsdg, Hclose, HERROR * Method: call DFSDputsdg, close Sfile_id * Remarks: checks that slice writes were completed. *---------------------------------------------------------------------------*/ intn DFSDIendslice(intn isfortran) { intn i; intn ret_value = SUCCEED; HEclear(); if (Sfile_id == DF_NOFILE) HGOTO_ERROR(DFE_BADCALL, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* check if slice writes complete */ for (i = 0; i < Writesdg.rank; i++) { if (!Fortorder && (i == 0) && (Sddims[i] == Writesdg.dimsizes[i])) continue; if ((isfortran || Fortorder) && (i == Writesdg.rank - 1) && (Sddims[i] == Writesdg.dimsizes[i])) continue; if ((isfortran || Fortorder || i > 0) && (!Fortorder || i < Writesdg.rank - 1) && (Sddims[i] == 0)) continue; HGOTO_ERROR(DFE_BADCALL, FAIL); } if (DFSDIputndg(Sfile_id, Writeref, &Writesdg) < 0) HCLOSE_GOTO_ERROR(Sfile_id, DFE_INTERNAL, FAIL); /* old nsdg table should be reset next time */ if (nsdghdr != NULL) { if (nsdghdr->nsdg_t != NULL) { DFnsdgle *rear, *front; rear = nsdghdr->nsdg_t; front = rear->next; while (rear != NULL) { HDfreenclear(rear); rear = front; if (rear != NULL) front = rear->next; } nsdghdr->size = 0; nsdghdr->nsdg_t = NULL; lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; } HDfreenclear(nsdghdr); } Lastref = Writeref; /* remember ref written */ Writeref = 0; /* don't know ref to write next */ Hendaccess(Writesdg.aid); ret_value = Hclose(Sfile_id); Sfile_id = 0; /* partial write complete */ HDfreenclear(Sddims); done: return ret_value; } /******************************************************************************/ /*----------------------- Internal routines ---------------------------------*/ /******************************************************************************/ /*----------------------------------------------------------------------------- * Name: DFSDIopen * Purpose: open or reopen a file * Inputs: filename: name of file to open * acc_mode : access mode * Returns: file id on success, -1 (FAIL) on failure with error set * Users: HDF systems programmers, many SD routines * Invokes: DFopen * Remarks: This is a hook for someday providing more efficient ways to * reopen a file, to avoid re-reading all the headers *---------------------------------------------------------------------------*/ int32 DFSDIopen(const char *filename, intn acc_mode) { int32 file_id; int32 ret_value = SUCCEED; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Sfile_id != DF_NOFILE) /* in the middle of a partial write */ HGOTO_ERROR(DFE_ALROPEN, FAIL); /* if last filename buffer has not been allocated * allocate buffer for "Lastfile" and open file * else if same file as last time * use reopen - more efficient * else * open file for first time */ if (Lastfile == NULL) { Lastfile = (char *)malloc((DF_MAXFNLEN + 1) * sizeof(char)); if (Lastfile == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* open file */ if ((file_id = Hopen(filename, acc_mode, (int16)0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); } else if ((strcmp(Lastfile, filename)) || (acc_mode == DFACC_CREATE)) { /* open a new file, delete nsdg table and reset lastnsdg */ if (nsdghdr != NULL) { if (nsdghdr->nsdg_t != NULL) { DFnsdgle *rear, *front; rear = nsdghdr->nsdg_t; while (rear != NULL) { front = rear->next; HDfreenclear(rear); rear = front; } nsdghdr->size = 0; nsdghdr->nsdg_t = NULL; lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; } HDfreenclear(nsdghdr); } /* treat create as different file */ if ((file_id = Hopen(filename, acc_mode, (int16)0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); Newdata = (-1); /* data in Readsdg is not fresh */ Readsdg.data.ref = 0; /* No SDG read yet */ /* remember no info written to file */ Ref.scales = (Ref.scales >= 0) ? 0 : Ref.scales; Ref.luf[LABEL] = (Ref.luf[LABEL] >= 0) ? 0 : Ref.luf[LABEL]; Ref.luf[UNIT] = (Ref.luf[UNIT] >= 0) ? 0 : Ref.luf[UNIT]; Ref.luf[FORMAT] = (Ref.luf[FORMAT] >= 0) ? 0 : Ref.luf[FORMAT]; Ref.dims = (Ref.dims >= 0) ? 0 : Ref.dims; Ref.coordsys = (Ref.coordsys >= 0) ? 0 : Ref.coordsys; Ref.maxmin = (Ref.maxmin >= 0) ? 0 : Ref.maxmin; Ref.nt = (Ref.nt >= 0) ? 0 : Ref.nt; Ref.transpose = (Ref.transpose >= 0) ? 0 : Ref.transpose; } else { if ((file_id = Hopen(filename, acc_mode, (int16)0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); } /* if read, set up nsdg table */ if (nsdghdr == NULL) { nsdghdr = (DFnsdg_t_hdr *)malloc((uint32)sizeof(DFnsdg_t_hdr)); if (nsdghdr == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); nsdghdr->size = 0; nsdghdr->nsdg_t = NULL; } if ((nsdghdr->nsdg_t == NULL) && (acc_mode == DFACC_READ)) { if (DFSDIsetnsdg_t(file_id, nsdghdr) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; } HIstrncpy(Lastfile, filename, DF_MAXFNLEN); /* remember filename, so reopen may be used next time if same file */ ret_value = file_id; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIsdginfo * Purpose: Locates next sdg in file * Inputs: file_id: pointer to DF file * Returns: 0 on success, FAIL on failure with error set * Users: HDF systems programmers, DFSDgetdims, DFSDgetdata * Invokes: DFIfind, DFSDIgetndg * Method: Call DFIfind to find SDG, then DFSDIgetndg to read it in to Readsdg * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIsdginfo(int32 file_id) { DFdi ptr; int32 aid; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!HDvalidfid(file_id)) HGOTO_ERROR(DFE_BADCALL, FAIL); if (Readref != 0) { aid = Hstartread(file_id, DFTAG_NDG, Readref); if (aid != FAIL) { ptr.ref = Readref; ptr.tag = DFTAG_NDG; Hendaccess(aid); } else { aid = Hstartread(file_id, DFTAG_SDG, Readref); if (aid != FAIL) { ptr.ref = Readref; ptr.tag = DFTAG_SDG; Hendaccess(aid); } else HGOTO_ERROR(DFE_BADAID, FAIL); } } else { if (DFSDInextnsdg(nsdghdr, &ptr) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((ptr.tag != DFTAG_NDG) && (ptr.tag != DFTAG_SDG)) HGOTO_ERROR(DFE_BADTAG, FAIL); if (ptr.ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_BADREF, FAIL); Readref = ptr.ref; } /* find next sd object */ if (DFSDIgetndg(file_id, ptr.tag, ptr.ref, &Readsdg) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* remember what type of thing we just read */ Readsdg.isndg = (ptr.tag == DFTAG_NDG) ? 1 : 0; Lastref = ptr.ref; /* remember ref read */ lastnsdg.tag = ptr.tag; lastnsdg.ref = ptr.ref; Newdata = 1; /* now Readsdg is fresh */ Readref = 0; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIrefresh * Purpose: get next sdg if Readsdg is not fresh * Inputs: filename * Returns: 0 on success, FAIL on failure with error set * Users: HDF systems programmers, functions in dfsdF.c * Invokes: DFSDIopen, DFSDIsdginfo * Method: test Newdata and Nextsdg, call DFSDIsdginfo if necessary * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIrefresh(char *filename) { int32 file_id; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata != 1 || Nextsdg) { /* if Readsdg not fresh */ if ((file_id = DFSDIopen(filename, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (DFSDIsdginfo(file_id) < 0) HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); if (Hclose(file_id) < 0) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); Nextsdg = 0; } done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIisndg * Purpose: is the current read sds an sdg or nsdg/ndg * Inputs: isndg: 0 -- pure sdg( written by 3.1); 1 -- nsdg/ndg * Returns: 0 on success, FAIL on failure with error set * Users: HDF systems programmers, functions in dfsdF.c * Invokes: none * Method: Assigns Readsdg.isndg to isndg. * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIisndg(intn *isndg) { intn ret_value = SUCCEED; *isndg = (intn)Readsdg.isndg; return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIgetrrank * Purpose: get rank of the current sdg, to transpose dims for Fortran * Inputs: &rank: address to return the rank * Returns: 0 on success, FAIL on failure with error set * Users: HDF systems programmers, functions in dfsdF.c * Invokes: none * Method: Assigns Readsdg.rank to rank. * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIgetrrank(intn *rank) { intn ret_value = SUCCEED; *rank = (intn)Readsdg.rank; return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIgetwrank * Purpose: get rank of the current sdg, to transpose dims for Fortran * Inputs: &rank: address to return the rank * Returns: 0 on success, FAIL on failure with error set * Users: HDF systems programmers, functions in dfsdF.c * Invokes: none * Method: Assigns Readsdg.rank to rank. * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIgetwrank(intn *rank) { intn ret_value = SUCCEED; *rank = (intn)Writesdg.rank; return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIclear * Purpose: Reset all "set" values, free allocated space * Inputs: sdg: pointer to sdg struct to clear * Globals: Ref * Returns: 0 on success, FAIL on error with error set * Users: HDF users, utilities, other routines * Invokes: none * Method: Release space in sdg * Remarks: none *---------------------------------------------------------------------------*/ intn DFSDIclear(DFSsdg *sdg) { intn i; intn luf; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Sfile_id != DF_NOFILE) /* cannot clear during slice writes */ HGOTO_ERROR(DFE_BADCALL, FAIL); HDfreenclear(sdg->dimsizes); HDfreenclear(sdg->coordsys); /* free label/unit/format pointers */ for (luf = LABEL; luf <= FORMAT; luf++) { if (sdg->dimluf[luf]) { /* free strings */ for (i = 0; i < sdg->rank; i++) HDfreenclear(sdg->dimluf[luf][i]); } /* free string pointers */ HDfreenclear(sdg->dimluf[luf]); /* free data string */ HDfreenclear(sdg->dataluf[luf]); } /* free scale pointers */ if (sdg->dimscales) { for (i = 0; i < sdg->rank; i++) HDfreenclear(sdg->dimscales[i]); } /* free array of scale pointers */ HDfreenclear(sdg->dimscales); sdg->rank = 0; /* number type is independent to dimsizes 4/7/92 sxu sdg->numbertype = DFNT_NONE; sdg->filenumsubclass = DFNTF_NONE; */ sdg->aid = (int32)-1; sdg->compression = (int32)0; FileTranspose = 0; sdg->fill_fixed = FALSE; /* allow fill_value to be changed */ Ref.dims = -1; Ref.scales = Ref.luf[LABEL] = Ref.luf[UNIT] = Ref.luf[FORMAT] = (-1); Ref.coordsys = Ref.maxmin = (-1); Ref.new_ndg = -1; Ref.fill_value = -1; done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIgetdata * Purpose: Get data from SDG. Will sequence to next SDG if DFSDgetdims not * called. * Inputs: filename: name of HDF file to use * rank: no of dimensions of array "data" * maxsizes: actual dimensions of array "data" * data: data for returning scientific data * isfortran : 0 if called from C, 1 when called from FORTRAN * Returns: 0 on success, FAIL on failure with error set * Outputs: actual scientific data in array * Users: DFSDgetdata * Invokes: DFSDIgetslice, malloc, HDfree, DFSDIopen, Hclose, * HERROR, DFSDIsdginfo * Method: Open file, call DFSDIsdginfo to read sdg if necessary, set up * window start and end arrays, call DFSDIgetslice. * Remarks: maxsizes may be larger than actual size. In that event, the actual * data may not be contiguous in the array "data" * User sets maxsizes before call. *---------------------------------------------------------------------------*/ intn DFSDIgetdata(const char *filename, intn rank, int32 maxsizes[], void *data, intn isfortran) { intn i; int32 *winst; int32 *windims; int32 file_id; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata != 1 || Nextsdg) { /* if Readsdg not fresh */ if ((file_id = DFSDIopen(filename, DFACC_READ)) == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (DFSDIsdginfo(file_id) < 0) HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); } winst = (int32 *)malloc((uint32)Readsdg.rank * sizeof(int32)); if (winst == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); windims = (int32 *)malloc((uint32)Readsdg.rank * sizeof(int32)); if (windims == NULL) { free(winst); HGOTO_ERROR(DFE_NOSPACE, FAIL); } for (i = 0; i < rank; i++) { winst[i] = 1; windims[i] = Readsdg.dimsizes[i]; } ret_value = DFSDIgetslice(filename, winst, windims, data, maxsizes, isfortran); Nextsdg = 1; free(winst); free(windims); done: return ret_value; } /*----------------------------------------------------------------------------- * Name: DFSDIputdata * Purpose: Writes entire SDG to file * Inputs: filename: name of HDF file to use * rank: rank of data array * dimsizes: sizes of the dimensions of data array * data: array that holds data * accmode: 0 if write to new file, 1 if append to file * isfortran: 0 if C, 1 if FORTRAN * Globals: Writeref * Returns: 0 on success, FAIL on failure with error set * Users: HDF users, utilities, other routines * Invokes: DFSDIopen, Hclose, malloc, HDfree, DFSDIputslice, * DFSDstartslice, DFSDIendslice * Method: Create file if necessary, allocate arrays, call slice routines *---------------------------------------------------------------------------*/ intn DFSDIputdata(const char *filename, intn rank, int32 *dimsizes, void *data, intn accmode, intn isfortran) { int32 file_id; intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!accmode) { /* new file */ if ((file_id = DFSDIopen(filename, DFACC_CREATE)) == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (Hclose(file_id) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); } if (Ref.dims) { /* don't call setdims if already called */ if (DFSDsetdims(rank, dimsizes) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (DFSDstartslice(filename) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (DFSDIputslice(Writesdg.dimsizes, data, dimsizes, isfortran) < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); ret_value = DFSDIendslice(isfortran); done: return ret_value; } /*---------------------------------------------------------------------------- * Name: DFSDIgetslice * Purpose: Get slice of data from SDG. Will sequence to next SDG if * DFSDgetdims, DFSDgetdata or DFSDgetslice not called earlier. * Inputs: filename: name of HDF file to use * winst: array of size = rank of data, containing start of slice * windims: array of size rank, containing size of slice * data: array for returning slice * dims: dimensions of array data * isfortran : 0 if called from C, 1 when called from FORTRAN * Returns: 0 on success, FAIL on failure with error set * Outputs: slice of data in data * Users: DFSDIgetdata * Invokes: DFSDIopen, Hclose, HERROR, DFSDIsdginfo, DFaccess, DFread * Method: Open file, call DFSDIsdginfo to read sdg if necessary, read the * data, convert types if necessary, place in data as appropriate * data is assumed column major for FORTRAN, row major for C * Remarks: dims may be larger than size of slice. In that event, the actual * data may not be contiguous in the array "data". * User sets dims before call. *--------------------------------------------------------------------------*/ /*****************************************************************************/ /* DESIGN DECISIONS */ /*****************************************************************************/ /* A. All stride/index/offset value will, when this is done -- refer to element counts rather than byte counts in the name of consistency. B. The conversion buffers/allcated areas... will all be char buffers -- providing that the Cray-2 is cooperative. */ /*****************************************************************************/ /*****************************************************************************/ /* CHANGE LOG */ /*****************************************************************************/ /* A. */ /*****************************************************************************/ intn DFSDIgetslice(const char *filename, int32 winst[], int32 windims[], void *data, int32 dims[], intn isfortran) { intn rank; /* number of dimensions in data[] */ int32 leastsig; /* fastest varying subscript in the array */ int32 error; /* flag if an error occurred, */ int32 convert; /* true if machine NT != NT to be read */ int32 transposed; /* true if we must transpose the data before writing */ int32 done; /* true if we are at the end of the slice */ int32 aid; int32 i, j; /* temporary loop index */ int32 issdg; /* 1 -- pure sdg. do what HDF3.1 does */ int32 *wstart; /* tmp array containing starting slice dims */ int32 *wdims; /* tmp array containing the slice size */ int32 *adims; /* tmp array containing the dimensions of data[] */ int32 *fdims; /* tmp array containing the dimensions */ /* of the dataset in the file */ int32 numtype; /* current number type */ int32 fileNTsize; /* size of this NT in the file */ int32 localNTsize; /* size of this NT as it occurs in this machine */ int32 numelements; /* number of floats to read at once */ int32 readsize; /* number of bytes to read at once */ int32 datastride; /* number of floats in one row of data[] */ int32 *offset; /* array for accessing the next element in data[] */ int32 *foffset; /* array for accessing the next element in the file */ int32 *dimsleft; /* array for tracking the current position in data[] */ int32 isnative; int32 fileoffset; /* offset into the current dataset in the file */ uint8 platnumsubclass; /* class of this NT for this platform */ uint8 fileNT; /* file number subclass */ uint8 *scatterbuf; /* buffer to hold the current row contiguously */ uint8 *sp; /* ptr into scatterbuf */ uint8 *datap; /* ptr into data[] at starting offset */ /* of current block */ uint8 *dp; /* ptr into data[] at an element of the current row */ uint8 *buf; /* buffer containing the converted current row */ int32 file_id; /* HDF file pointer */ intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (data == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if ((file_id = DFSDIopen(filename, DFACC_READ)) == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); if (Newdata != 1) { /* if Readsdg not fresh */ if (DFSDIsdginfo(file_id) < 0) /* reads next SDG from file */ HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); } rank = Readsdg.rank; numtype = Readsdg.numbertype; fileNT = Readsdg.filenumsubclass; issdg = Readsdg.isndg ? 0 : 1; isnative = DFNT_NATIVE; localNTsize = DFKNTsize((numtype | isnative) & (~DFNT_LITEND)); fileNTsize = DFKNTsize(numtype); platnumsubclass = (uint8)DFKgetPNSC(numtype & (~DFNT_LITEND), (int32)DF_MT); /* get dimensions of slice to extract, set nwindims. also err check */ for (i = 0; i < (int32)rank; i++) { /* check validity for the dimension ranges */ if ((windims[i] < 1) || (winst[i] < 1) || (winst[i] + windims[i] - 1 > Readsdg.dimsizes[i])) { HCLOSE_GOTO_ERROR(file_id, DFE_BADDIM, FAIL); } /* check if space allocated is sufficient */ if (dims[i] < windims[i]) { HCLOSE_GOTO_ERROR(file_id, DFE_NOTENOUGH, FAIL); } } /* allocate buffers */ wstart = (int32 *)malloc((size_t)(4 * rank) * sizeof(int32)); if (wstart == NULL) { HCLOSE_GOTO_ERROR(file_id, DFE_NOSPACE, FAIL); } wdims = wstart + rank; adims = wdims + rank; fdims = adims + rank; /* copy arrays to private workspace (so that they are in row major order) */ for (i = 0; i < (int32)rank; i++) { int32 ii = (issdg && isfortran) ? rank - i - 1 : i; adims[i] = dims[ii]; ii = (issdg && FileTranspose) ? rank - i - 1 : i; wstart[i] = winst[ii] - 1; /* translate to 0 origin */ wdims[i] = windims[ii]; fdims[i] = Readsdg.dimsizes[ii]; } convert = (fileNT != platnumsubclass); /* is conversion necessary */ transposed = issdg && (isfortran ^ FileTranspose); /* is transposition needed */ /* * Note that if the data is transposed we must work on a row by row * basis and cannot collapse dimensions. */ if (!transposed) { /* collapse dimensions if contiguous both in the file and in memory */ for (i = (int32)rank - 1; i > 0; i--) { /* stop before most sig dim */ if (adims[i] > wdims[i] /* not all of data[] will be filled */ || wstart[i] != 0 /* reading only part of the dataset */ || wdims[i] < fdims[i]) { break; } wstart[i - 1] *= fdims[i]; wdims[i - 1] *= wdims[i]; adims[i - 1] *= adims[i]; fdims[i - 1] *= fdims[i]; rank--; } } leastsig = (int32)rank - 1; /* which is least sig dim */ /* position at start of data set */ aid = Hstartread(file_id, Readsdg.data.tag, Readsdg.data.ref); if (aid == FAIL) { free(wstart); HCLOSE_GOTO_ERROR(file_id, DFE_BADAID, FAIL); } error = 0; if (rank == 1 && !convert) { /* all data is contiguous with no conversions */ readsize = adims[0] * fileNTsize; if ((Hseek(aid, wstart[0] * fileNTsize, 0) == FAIL) || (readsize != Hread(aid, readsize, (uint8 *)data))) { error = 1; } } else { /* * The data must be further manipulated. * It may be transposed, may need conversion, may not be contiguous, or * any combination of these. */ numelements = wdims[leastsig]; readsize = numelements * fileNTsize; /* allocate 1 row buffers */ if (convert) { if ((buf = (uint8 *)malloc((uint32)readsize)) == NULL) { free(wstart); Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_NOSPACE, FAIL); } } else buf = NULL; if (transposed) { scatterbuf = (uint8 *)malloc((size_t)(numelements * localNTsize)); if (scatterbuf == NULL) { free(wstart); free(buf); Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_NOSPACE, FAIL); } } else scatterbuf = NULL; offset = (int32 *)malloc((size_t)(3 * rank) * sizeof(int32)); if (offset == NULL) { free(wstart); free(buf); free(scatterbuf); Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_NOSPACE, FAIL); } foffset = offset + rank; dimsleft = foffset + rank; /* compute initial position in the data */ for (i = leastsig; i >= 0; i--) dimsleft[i] = wdims[i]; /* compute offsets in the source array */ if (transposed) { offset[0] = 1 * localNTsize; for (i = 0; i < leastsig; i++) offset[i + 1] = offset[i] * adims[leastsig - i]; } else { offset[leastsig] = 1 * localNTsize; for (i = leastsig; i > 0; i--) offset[i - 1] = offset[i] * adims[i]; } datastride = offset[leastsig]; /* compute offsets in the file */ for (i = leastsig, foffset[i] = 1 * fileNTsize; i > 0; i--) foffset[i - 1] = foffset[i] * fdims[i]; /* * Compute starting position in file * All file reads are done relative to this starting offset. * Cumulative offset is from most sig to next to least sig dim. */ for (i = 0, fileoffset = 0; i < leastsig; i++) fileoffset = (fileoffset + wstart[i]) * fdims[i + 1]; fileoffset += wstart[leastsig]; /* adjust for last dim */ fileoffset *= fileNTsize; /* convert to bytes */ datap = (uint8 *)data; done = 0; /* -- now read in the data */ do { /* move to the next data element in the file */ if (Hseek(aid, fileoffset, 0) == FAIL) { error = 1; break; } /* read and convert one contiguous block of data */ if (convert) { if (readsize != Hread(aid, readsize, buf)) { error = 1; break; } DFKconvert((void *)buf, transposed ? (void *)scatterbuf : (void *)datap, numtype, numelements, DFACC_READ, 0, 0); } else { if (readsize != Hread(aid, readsize, transposed ? scatterbuf : datap)) { error = 1; break; } } if (transposed) { /* scatter out the elements of one row */ for (dp = datap, sp = scatterbuf, i = 0; i < numelements; i++) { for (j = 0; j < localNTsize; j++) *(dp + j) = *(sp + j); sp += localNTsize; dp += datastride; } } /* * Find starting place of the next row/block. * Note that all moves are relative: * this preserves the starting offsets of each dimension */ for (i = leastsig - 1; i >= 0; i--) { if (--dimsleft[i] > 0) { /* move to next element in the current dimension */ datap += offset[i]; fileoffset += foffset[i]; break; } else { dimsleft[i] = wdims[i]; /* * Note that we are still positioned at the beginning of * the last element in the current dimension */ /* move back to the beginning of dimension i */ datap -= offset[i] * (wdims[i] - 1); /* move back to beginning read position of dimension i */ fileoffset -= foffset[i] * (wdims[i] - 1); if (i == 0) done = 1; } } } while (!done && leastsig > 0); free(buf); free(scatterbuf); free(offset); } Hendaccess(aid); free(wstart); if (error) { Hclose(file_id); ret_value = FAIL; } else ret_value = Hclose(file_id); done: return ret_value; } /*---------------------------------------------------------------------------- * Name: DFSDIputslice * Purpose: Put slice of data to SDG. * Inputs: windims: array of size rank, containing size of slice * data: array containing slice * dims: dimensions of array data * isfortran: 0 for C, 1 for Fortran * Returns: 0 on success, FAIL on failure with error set * Users: DFSDputslice * Invokes: DFwrite, malloc, HDfree,DFKnumout(if conversion required) * Method: check dimensions for contiguity, convert types if necessary * write to file * Remarks: dims may be larger than size of slice. In that event, the actual * data may not be contiguous in the array "data". * DFSDstartslice must have been called first * If DFKnumout is called, DFSDsetNT may need to have been * called * Note, writes must be contiguous - successive calls to putslice * must write out array consecutively, according to the setting * of the Fortorder variable - row major if 0, column major if 1 *--------------------------------------------------------------------------*/ intn DFSDIputslice(int32 windims[], void *data, int32 dims[], intn isfortran) { intn rank; /* number of dimensions in data[] */ int32 leastsig; /* fastest varying subscript in the array */ int32 convert; /* true if machine NT = NT to be written */ int32 contiguous; /* true if there are no gaps in the data to be written */ int32 numtype; /* current number type */ int32 platnumsubclass; /* class of this NT for this platform */ int32 fileNTsize; /* size of this NT as it will be in the file */ int32 fileNT; /* class of NT for the data to write */ int32 isnative; int32 localNTsize; /* size of this NT as it occurs in this machine */ int32 ret = SUCCEED; /* return code from DFwrite */ int32 i, j; /* temporaries */ int32 numelements; /* number of elements to write out per row */ int32 writesize; /* number of bytes to write out per row */ int32 datastride; /* number of bytes in one row of data[] */ uint8 *datap; /* pointer into data[] at */ /* the start of the current row */ uint8 *buf; /* buffer containing converted current row */ intn ret_value = SUCCEED; (void)isfortran; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (!data) HGOTO_ERROR(DFE_BADPTR, FAIL); if (Sfile_id == DF_NOFILE) HGOTO_ERROR(DFE_BADCALL, FAIL); rank = Writesdg.rank; for (i = 0; i < (int32)rank; i++) { /* check validity for the dimension ranges */ if ((windims[i] <= 0) || (windims[i] > Writesdg.dimsizes[i])) HGOTO_ERROR(DFE_BADDIM, FAIL); /* check if space allocated is sufficient */ if (dims[i] < windims[i]) HGOTO_ERROR(DFE_NOTENOUGH, FAIL); } /* check to see if the slices fit together */ /* Same for Fortran or C */ /* find the first significant dimension */ for (i = 0; windims[i] == 1 && i < (int32)rank - 1; i++) /* empty */; /* check that all 'lesser' dims match */ for (j = i + 1; j < (int32)rank; j++) { if (Writesdg.dimsizes[j] != windims[j]) HGOTO_ERROR(DFE_BADDIM, FAIL); } /* update Sddims to reflect new write */ Sddims[i] += windims[i]; for (; i > 0 && Sddims[i] >= Writesdg.dimsizes[i]; i--) { Sddims[i - 1] += Sddims[i] / Writesdg.dimsizes[i]; /* promote the unit */ Sddims[i] %= Writesdg.dimsizes[i]; } leastsig = (int32)rank - 1; /* which is least sig dim */ numtype = Writesdg.numbertype; /* get class of this num type for this platform */ fileNT = (int32)Writesdg.filenumsubclass; isnative = DFNT_NATIVE; fileNTsize = DFKNTsize(numtype); localNTsize = DFKNTsize((numtype | isnative) & (~DFNT_LITEND)); platnumsubclass = (int32)DFKgetPNSC(numtype & (~DFNT_LITEND), (int32)DF_MT); convert = (platnumsubclass != fileNT); contiguous = 1; for (i = 0; contiguous && i < (int32)rank; i++) { /* check if data at the end of the users array will be contiguous */ if (dims[i] > Writesdg.dimsizes[i]) contiguous = 0; /* Note: if a winstart[] array is ever added, will also need */ /* to check if data at start of users array will be */ /* contig */ } /* * 2 Factors that determine how we write (in order of importance) * conversion and contiguous */ datap = (uint8 *)data; if (!convert && contiguous) { /* compute total number of elements to write */ for (i = 0, numelements = 1; i < (int32)rank; i++) numelements *= windims[i]; writesize = numelements * fileNTsize; if (Hwrite(Writesdg.aid, writesize, (uint8 *)data) == FAIL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_WRITEERROR, FAIL); } else { /* must step through the data */ /* compute number of occurrences of the least sig dim */ if (Fortorder) { for (i = (int32)rank - 1, j = 1; i > 0; i--) j *= windims[i]; } else { for (i = 0, j = 1; i < (int32)rank - 1; i++) j *= windims[i]; } numelements = windims[leastsig]; writesize = numelements * fileNTsize; datastride = dims[leastsig] * localNTsize; if (convert) { buf = (uint8 *)malloc((uint32)writesize); if (buf == NULL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); for (i = 0; i < j; i++, datap += datastride) { DFKconvert((void *)datap, (void *)buf, numtype, numelements, DFACC_WRITE, 0, 0); ret = Hwrite(Writesdg.aid, writesize, buf); /* done */ if (ret == FAIL) { free(buf); HCLOSE_GOTO_ERROR(Sfile_id, DFE_WRITEERROR, FAIL); } } free(buf); } else { /* !contiguous */ for (i = 0; i < j; i++, datap += datastride) if (Hwrite(Writesdg.aid, writesize, datap) == FAIL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_WRITEERROR, FAIL); } } ret_value = (ret >= 0 ? 0 : -1); done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDgetcal USAGE int DFSDgetcal(pcal, pcal_err, pioff, pioff_err, cal_nt) float64 *pcal; OUT: calibration factor float64 *pcal_err; OUT: calibration error value float64 *pioff; OUT: uncalibrated offset value float64 *pioff_err; OUT: uncalibrated offset error value int32 *cal_nt; OUT: Number type of uncalibrated data RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION This routine reads the calibration record, if there is one, attached to the scientific data set. A calibration record contains four 64-bit floating point values followed by a 32-bit integer, to be interpreted as follows: cal - calibration factor cal_err - calibration error offset - uncalibrated offset offset_err - uncalibrated offset error num_type - number type of uncalibrated data The relationship between a value 'iy' stored in a data set and the actual value 'y' is defined as: y = cal * (iy - offset) The variable "offset_err" contains a potential error of offset, and "cal_err" contains a potential error of "cal". Currently the calibration record is provided for information only. The DFSD interface performs no operations on the data based on the calibration tag. ----------------------------------------------------------------------------*/ intn DFSDgetcal(float64 *pcal, float64 *pcal_err, float64 *pioff, float64 *pioff_err, int32 *cal_nt) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); if (IsCal) { *pcal = Readsdg.cal; *pcal_err = Readsdg.cal_err; *pioff = Readsdg.ioff; *pioff_err = Readsdg.ioff_err; *cal_nt = Readsdg.cal_type; ret_value = SUCCEED; } else HGOTO_ERROR(DFE_NOVALS, FAIL); done: return ret_value; } /* DFSDgetcal */ /*----------------------------------------------------------------------------- NAME DFSDsetcal USAGE intn DFSDsetcal(cal, cal_err, ioff, ioff_err, cal_nt) float64 cal; IN: calibration factor float64 cal_err; IN: calibration error float64 ioff; IN: uncalibrated offset float64 ioff_err; IN: uncalibrated offset error int32 cal_nt; IN: number type of uncalibrated data RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Sets the calibration information associated with data. This routine sets the calibration record attached to a data set. A calibration record contains four 64-bit floating point values followed by a 32-bit integer, to be interpreted as follows: cal - calibration factor cal_err - calibration error offset - uncalibrated offset offset_err - uncalibrated offset error num_type - number type of uncalibrated data The relationship between a value 'iy' stored in a data set and the actual value 'y' is defined as: y = cal * (iy - offset) The variable "offset_err" contains a potential error of offset, and "cal_err" contains a potential error of "cal". Currently the calibration record is provided for information only. The DFSD interface performs no operations on the data based on the calibration tag. "DFSDsetcal" works like other "DFSDset*" routines, with one exception: the calibration information is automatically cleared after a call to "DFSDputdata" or "DFSDadddata". Hence, "DFSDsetcal" must be called anew for each data set that is to be written. ----------------------------------------------------------------------------*/ intn DFSDsetcal(float64 cal, float64 cal_err, float64 ioff, float64 ioff_err, int32 cal_nt) { intn ret_value = SUCCEED; HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); Writesdg.cal = (float64)cal; Writesdg.cal_err = (float64)cal_err; Writesdg.ioff = (float64)ioff; Writesdg.ioff_err = (float64)ioff_err; Writesdg.cal_type = (int32)cal_nt; Ref.cal = 0; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDwriteref USAGE int DFSDwriteref(filename, ref) char *filename; IN: HDF file to write to uint16 ref; IN: reference number for the next writing of data RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Specifies the data set to be written to next by using the reference number. Note that there is no guarantee that reference numbers appear in sequence in and HDF file; therefore, it is not safe to assume that a reference number is the sequence number for a data set. -----------------------------------------------------------------------------*/ intn DFSDwriteref(const char *filename, uint16 ref) { int32 file_id; int32 aid; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Open file for read access */ if ((file_id = DFSDIopen(filename, DFACC_READ)) == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* Check for existence of SDG */ if ((aid = Hstartread(file_id, DFTAG_SDG, ref)) == FAIL && (aid = Hstartread(file_id, DFTAG_NDG, ref)) == FAIL) { HCLOSE_GOTO_ERROR(file_id, DFE_NOMATCH, FAIL); } /* ** Probably need to call DFSDgetndg to initialize Writesdg struct ** This is so that we use the information of an SDG that has ** already been written out. Once a SDG has been written out, ** a user should not be able to change attributes such as ** numbertype, dimensions or fill value. */ if ((DFSDIgetndg(file_id, DFTAG_SDG, ref, &Writesdg) < 0) && (DFSDIgetndg(file_id, DFTAG_NDG, ref, &Writesdg) < 0)) { Hendaccess(aid); HCLOSE_GOTO_ERROR(file_id, DFE_INTERNAL, FAIL); } /* Close access to file, set Writeref */ Hendaccess(aid); Writeref = ref; Lastref = ref; ret_value = Hclose(file_id); done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDsetfillvalue USAGE int DFSDsetfillvalue(fill_value) void *fill_value; IN: number to be stored in any unwritten locations of the scientific data set RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Set the value used to fill in any unwritten location in a scientific data set. Since the data is written in hyperslabs, it is possible that not alof the possible locations in a given data set are written to. The fill value is placed into all unwritten locations. The value gets written if the following "DFSDwriteslab" call is the first call to the data set i.e. the data set is created. It is assumed that the fill value has the same number type as the data set. WARNING Memory bug on SGI's if you try to free allocated space for fill values. -----------------------------------------------------------------------------*/ intn DFSDsetfillvalue(void *fill_value) { int32 numtype; /* current number type */ uint32 localNTsize; /* size of this NT on as it is on this machine */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check to see if fill value written out already */ if (Ref.fill_value == -1 && Writesdg.fill_fixed == TRUE) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { /* Get local and file number type sizes */ numtype = Writesdg.numbertype; localNTsize = (uint32)DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); /* Set fill value in Writesdg struct, and set fill value flag */ Ref.fill_value = 0; if (memcpy(Writesdg.fill_value, fill_value, localNTsize) != NULL) ret_value = SUCCEED; else ret_value = FAIL; } done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDgetfillvalue USAGE int DFSDgetfillvalue(fill_value) void *fill_value; OUT: Number to be stored in any unwritten locations of the scientific data set RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Gets the value used to fill any unwritten location in a scientific data set. The value is set by "DFSDsetfillvalue". Note that a call that initializes file information structures such as "DFSDgetdims" is required in order for "DFSDgetfillvalue" to succeed. This is because "DFSDgetfillvalue" does not take a file name as an argument. -----------------------------------------------------------------------------*/ intn DFSDgetfillvalue(void *fill_value) { int32 numtype; /* current number type */ uint32 localNTsize; /* size of this NT on as it is on this machine */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check if Readsdg is fresh */ if (Newdata < 0) HGOTO_ERROR(DFE_BADCALL, FAIL); /* Get local number type size */ numtype = Readsdg.numbertype; localNTsize = (uint32)DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); /* Set return fill value */ if (memcpy(fill_value, Readsdg.fill_value, localNTsize) != NULL) ret_value = SUCCEED; else ret_value = FAIL; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDreadslab USAGE int DFSDreadslab(filename, start, slab_size, stride, buffer, buffer_size) char *filename; IN: name of HDF file to write to int32 start[]; IN: array of size rank containing the coordinates for the start of the slab of data int32 slab_size[]; IN: array of size rank containing the size of each dimension in the slab of data int32 stride[]; IN: sub-sampling stride(not implemented) void * buffer; OUT: buffer to hold the extracted slab of data int32 buffer_size[]; OUT: array containing the dimensions of the buffer RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Reads a sub-array of data from a scientific data set. "DFSDreadslab" will sequence to the next scientific data set if "DFSDgetdims" or "DFSDgetdata" is not called earlier. The "start[]" indices are relative to 1. The rank(size) of "start[]" must be the same as the number of dimensions of the specified variable. The elements of "slab_size[]" must be no larger than the dimensions of the scientific data set. The stride feature is not currently implemented. For now just pass the "start[]" array as the argument for "stride[]" where it will be ignored. To extract a slab of lower dimension than that of the data set, enter 1 in the "slab_size[] array for each omitted dimension. For example, to extract a 2D slab from a 3D data set, specify the beginning coordinates in 3 dimensions in "start[]" and enter a 1 for the for the missing dimension in the array "slab_size[]". More specifically, to extract a 3x4 slab containing the elements (6,7,8) through (8.7,11) specify the beginning coordinates as {6,7,8} and the slab size as {3,1,4}. -----------------------------------------------------------------------------*/ intn DFSDreadslab(const char *filename, int32 start[], int32 slab_size[], int32 stride[], void *buffer, int32 buffer_size[]) { intn ret_value = SUCCEED; (void)stride; ret_value = (DFSDgetslice(filename, start, slab_size, buffer, buffer_size)); return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDstartslab USAGE int DFSDstartslab(filename) char *filename; IN: name of HDF file to write to RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Prepares the DFSD interface to write a slab(s) od data to a scientific data set. "DFSDsetdims" must be called before calling "DFSDstartslab". No call which needs to open a file may be made after a "DFSDstartslab" call until "DFSDendslab" is called. This routine will write out the fill values if "DFSDsetfillvalue" is called before this routine and this is the first write(i.e. creation) to the data set. -----------------------------------------------------------------------------*/ intn DFSDstartslab(const char *filename) { int32 i; int32 sdg_size; int32 localNTsize; int32 fileNTsize; int32 fill_bufsize = 16384; /* Chosen for the PC */ int32 odd_size; uint8 *fill_buf; uint8 platnumsubclass; uint8 outNT; /* file number type subclass */ intn ret_value = SUCCEED; /* Clear errors */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Check rank set i.e. DFSDsetdims() */ if (!Writesdg.rank) HGOTO_ERROR(DFE_BADDIM, FAIL); /* If NT not set(i.e. DFSDsetNT() not called), default to float32 */ if (Writesdg.numbertype == DFNT_NONE) DFSDsetNT(DFNT_FLOAT32); /* Open file */ if ((Sfile_id = DFSDIopen(filename, DFACC_WRITE)) == DF_NOFILE) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* ** Check for Writeref set i.e. DFSDwriteref() called? ** If not Writeref then we create a new Writeref i.e new SDG ** Else use existing one. */ /* Set tag, ref of SDG to write */ Writesdg.data.tag = DFTAG_SD; if (!Writeref) Writeref = Hnewref(Sfile_id); if (!Writeref) HGOTO_ERROR(DFE_BADREF, FAIL); Writesdg.data.ref = Writeref; /* Initialize a few local variables */ localNTsize = DFKNTsize((Writesdg.numbertype | DFNT_NATIVE) & (~DFNT_LITEND)); fileNTsize = DFKNTsize(Writesdg.numbertype); /* Calculate size of of dataset */ sdg_size = fileNTsize; for (i = 0; i < Writesdg.rank; i++) sdg_size *= Writesdg.dimsizes[i]; /* set up to write data */ Writesdg.aid = Hstartwrite(Sfile_id, DFTAG_SD, Writeref, sdg_size); if (Writesdg.aid == FAIL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_BADAID, FAIL); /* ** Check if fill value is set */ if (!Ref.fill_value) { /* make the fill buffer smaller if possible */ if (fill_bufsize > sdg_size && localNTsize == fileNTsize) fill_bufsize = sdg_size; /* Allocate space for fill buffer */ if ((fill_buf = (uint8 *)malloc((uint32)fill_bufsize)) == NULL) { Hendaccess(Writesdg.aid); HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); } /* Get number types and compare */ outNT = Writesdg.filenumsubclass; platnumsubclass = (uint8)DFKgetPNSC(Writesdg.numbertype, (int32)DF_MT); if (platnumsubclass != outNT) { /* conversion */ /* Allocate buffer */ uint8 buf2[DFSD_MAXFILL_LEN]; /* Convert from native to IEEE */ DFKconvert((void *)&Writesdg.fill_value, (void *)buf2, Writesdg.numbertype, 1, DFACC_WRITE, 0, 0); /* Initialize buffer to fill value */ for (i = 0; i < fill_bufsize; i = i + localNTsize) memcpy(&(fill_buf[i]), buf2, localNTsize); } else /* no conversion */ { /* Initialize buffer to fill value */ for (i = 0; i < fill_bufsize; i = i + localNTsize) memcpy(&(fill_buf[i]), Writesdg.fill_value, localNTsize); } /* Write fill values */ if (sdg_size <= fill_bufsize) odd_size = sdg_size; else { odd_size = sdg_size % fill_bufsize; for (i = 0; i < (sdg_size / fill_bufsize); i++) { /* Write out fill buffer X times */ if (Hwrite(Writesdg.aid, fill_bufsize, fill_buf) == FAIL) { Hendaccess(Writesdg.aid); free(fill_buf); HCLOSE_GOTO_ERROR(Sfile_id, DFE_WRITEERROR, FAIL); } } } /* Write fill values for odd size piece */ if (Hwrite(Writesdg.aid, odd_size, fill_buf) == FAIL) { Hendaccess(Writesdg.aid); free(fill_buf); HCLOSE_GOTO_ERROR(Sfile_id, DFE_WRITEERROR, FAIL); } Writesdg.fill_fixed = TRUE; /* fill value cannot be changed */ /* Free up space */ free(fill_buf); } done: return ret_value; } /*---------------------------------------------------------------------------- NAME DFSDwriteslab USAGE int DFSDwriteslab(start, stride, count, data) int32 start[]; IN: array containing the coordinates of the start of the slab in the HDF file int32 stride[]; IN: array containing the dimensions of data[] int32 count[]; IN: array containing the size of the slab void *data; IN: array to hold the floating point data to write RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Writes a slab of data to a scientific data set. The "start" indices are relative to 1. The rank of "start" must be the same as the number of dimensions of the specified variable. The elements of "start" must be no larger than the scientific data set's dimensions in order. The stride feature is not currently implemented. For now just pass the "start" array as the argument for "stride" where it will be ignored. The rank of "count" must be the same as the number of dimensions of the specified variable. The elements of "count" must be no larger that the scientific data sets's dimensions in order. The order in which the data will be written into the specified hyperslab is with the last dimension varying the fastest. The array "data" should be of appropriate number type for the data set. Note that neither the compiler nor the HDF software can detect if the wrong type of data is written. ----------------------------------------------------------------------------*/ intn DFSDwriteslab(int32 start[], int32 stride[], int32 count[], void *data) { intn rank; /* number of dimensions in data[] */ int32 i; /* temporary loop index */ int32 leastsig; /* fastest varying subscript in the array */ int32 convert; /* true if machine NT != NT to be read */ int32 done; /* true if we are at the end of the slab */ int32 numtype; /* current number type */ int32 fileNTsize; /* size of this NT in the file */ int32 localNTsize; /* size of this NT as it occurs in this machine */ int32 numelements; /* number of floats to read at once */ int32 rowsize; /* number of bytes to be written at once */ /* in the hyperslab */ int32 fileoffset; /* offset into the current dataset in the file */ int32 *doffset; /* array for accessing the next element in data[] */ int32 *foffset; /* array for accessing next element in the file */ int32 *dimsleft; /* array for tracking current position in data[] */ int32 *startdims; /* tmp array containing starting slab dims */ int32 *sizedims; /* tmp array containing the slab size */ int32 *filedims; /* tmp array containing the dimensions */ /* of the dataset in the file */ int32 r_error; /* flag if an error occurred, */ int32 aid; uint8 platnumsubclass; /* class of this NT for this platform */ uint8 fileNT; /* file number subclass */ uint8 *buf; /* buffer containing the converted current row */ uint8 *datap; /* ptr into data[] at starting offset */ /* of current block */ intn ret_value = SUCCEED; (void)stride; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Sanity checking of input data */ if (!data) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Set rank */ rank = Writesdg.rank; /* Do sanity checking of starting and size dimension arrays */ for (i = 0; i < (int32)rank; i++) { /* ** Check validity for the dimension ranges by ** checking lower bound of slab sizes ** checking lower bound of starting dimensions ** checking upper bound on writing dimensions */ if ((count[i] < 1) || (start[i] < 1) || (start[i] + count[i] - 1 > Writesdg.dimsizes[i])) HCLOSE_GOTO_ERROR(Sfile_id, DFE_BADDIM, FAIL); } /* Initialize a few local variables */ numtype = Writesdg.numbertype; platnumsubclass = (uint8)DFKgetPNSC(numtype & (~DFNT_LITEND), DF_MT); localNTsize = DFKNTsize((numtype | DFNT_NATIVE) & (~DFNT_LITEND)); fileNTsize = DFKNTsize(numtype); fileNT = Writesdg.filenumsubclass; /* Set Access Id */ aid = Writesdg.aid; /* ** Get dimensions of hyperslab to write out ** Allocate temporary buffers(3) to hold starting, size, ** and file(SDG in file) dimensions */ startdims = (int32 *)malloc((size_t)(3 * rank) * sizeof(int32)); if (startdims == NULL) HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); sizedims = startdims + rank; filedims = sizedims + rank; /* Copy arrays to private workspace (row major order) */ for (i = 0; i < (int32)rank; i++) { startdims[i] = start[i] - 1; sizedims[i] = count[i]; /* dimensions of just slab */ filedims[i] = Writesdg.dimsizes[i]; /* dimensions of whole SDG */ } /* Is conversion necessary */ convert = (fileNT != platnumsubclass); /* Collapse dimensions if contiguous both in the file and in memory */ for (i = (int32)rank - 1; i > 0; i--) /* stop before most sig dim */ { /* read only part of dataset */ if (startdims[i] != 0 || sizedims[i] < filedims[i]) break; startdims[i - 1] *= filedims[i]; sizedims[i - 1] *= sizedims[i]; filedims[i - 1] *= filedims[i]; rank--; } /* ** Which is least sig dim i.e fastest varying. ** In C usually the last. */ leastsig = (int32)rank - 1; r_error = 0; if (rank == 1 && !convert) { /* all data is contiguous with no conversions */ rowsize = sizedims[0] * fileNTsize; if ((Hseek(aid, startdims[0] * fileNTsize, 0) == FAIL) || (rowsize != Hwrite(aid, rowsize, (uint8 *)data))) { r_error = 1; } } else { /* * The data must be further manipulated. * It may need conversion, may not be contiguous, or * any combination of these. */ numelements = sizedims[leastsig]; /* # of elmenents in a row */ rowsize = numelements * fileNTsize; /* # of bytes in a row */ /* If conversion, allocate 1 row buffers */ if (convert) { if ((buf = (uint8 *)malloc((uint32)rowsize)) == NULL) { free(startdims); Hendaccess(aid); HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); } } else buf = NULL; /* Allocate space for file and data offsets and dimsleft */ foffset = (int32 *)malloc((size_t)(3 * rank) * sizeof(int32)); if (foffset == NULL) { free(startdims); free(buf); Hendaccess(aid); HCLOSE_GOTO_ERROR(Sfile_id, DFE_NOSPACE, FAIL); } dimsleft = foffset + rank; doffset = dimsleft + rank; /* Set number of dimensions left */ for (i = leastsig; i >= 0; i--) dimsleft[i] = sizedims[i]; /* compute offsets in the source array */ doffset[leastsig] = 1 * localNTsize; for (i = leastsig; i > 0; i--) doffset[i - 1] = doffset[i] * sizedims[i]; /* ** Compute offsets in the file for dimension, according to the ** possible length for each dimension. Depends on numbertype. */ for (i = leastsig, foffset[i] = 1 * fileNTsize; i > 0; i--) foffset[i - 1] = foffset[i] * filedims[i]; /* ** Compute starting position in file ** All file writes are done relative to this starting offset. ** Cumulative offset is from most sig to next to least sig dim. */ for (i = 0, fileoffset = 0; i < leastsig; i++) fileoffset = fileoffset + (startdims[i] * foffset[i]); /* Dont forget about last dimension */ fileoffset = fileoffset + startdims[leastsig] * fileNTsize; datap = (uint8 *)data; done = 0; /* -- now write the data */ do { /* move to the next data element in the file */ if (Hseek(aid, fileoffset, 0) == FAIL) { r_error = 1; break; } /* If convert and write one contiguous block of data */ /* Else write one contiguous block of data */ if (convert) { DFKconvert((void *)datap, (void *)buf, numtype, numelements, DFACC_WRITE, 0, 0); if (rowsize != Hwrite(aid, rowsize, buf)) { r_error = 1; break; } } else { if (rowsize != Hwrite(aid, rowsize, datap)) { r_error = 1; break; } } /* * Find starting place of the next row/block. * Note that all moves are relative: * this preserves the starting offsets of each dimension */ for (i = leastsig - 1; i >= 0; i--) { if (--dimsleft[i] > 0) { /* Move to next element in the current dimension */ datap += doffset[i]; fileoffset += foffset[i]; break; } else { dimsleft[i] = sizedims[i]; /* * Note that we are still positioned at the beginning of * the last element in the current dimension */ /* move back to the beginning of dimension i */ datap -= doffset[i] * (sizedims[i] - 1); /* move back to beginning read position of dimension i */ fileoffset -= foffset[i] * (sizedims[i] - 1); if (i == 0) done = 1; } } } while (!done && leastsig > 0); free(buf); free(foffset); } /* Clean up time.... */ free(startdims); if (r_error) ret_value = FAIL; else ret_value = SUCCEED; done: return ret_value; } /*----------------------------------------------------------------------------- NAME DFSDendslab USAGE int DFSDendslab() RETURNS Returns SUCCEED(0) if successful and FAIL(-1) otherwise. DESCRIPTION Ends a sequence of slab calls started by "DFSDstartslab" by closing the file. Writes the NDG information to the file if this call follows a "DFSDstartslab" that created a new SDG. ----------------------------------------------------------------------------*/ intn DFSDendslab(void) { intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (DFSDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Valid file id */ if (Sfile_id == DF_NOFILE) HGOTO_ERROR(DFE_BADCALL, FAIL); /* Check to see if we have written out the SDG info */ if (!Ref.new_ndg) { if (DFSDIputndg(Sfile_id, Writeref, &Writesdg) < 0) HCLOSE_GOTO_ERROR(Sfile_id, DFE_INTERNAL, FAIL); /* old nsdg table should be reset next time */ if (nsdghdr != NULL) { if (nsdghdr->nsdg_t != NULL) { DFnsdgle *rear, *front; rear = nsdghdr->nsdg_t; front = rear->next; while (rear != NULL) { HDfreenclear(rear); rear = front; if (rear != NULL) front = rear->next; } nsdghdr->size = 0; nsdghdr->nsdg_t = NULL; lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; } HDfreenclear(nsdghdr); } Ref.new_ndg = -1; } /* Slab clean up */ Hendaccess(Writesdg.aid); ret_value = Hclose(Sfile_id); Sfile_id = 0; Lastref = (uint16)Writeref; /* remember ref written */ Writeref = 0; /* Reset Write ref */ done: return ret_value; } /*-------------------------------------------------------------------------- NAME DFSDIstart PURPOSE DFSD-level initialization routine USAGE intn DFSDIstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the shut-down routine (DFSDPshutdown) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn DFSDIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&DFSDPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end DFSDIstart() */ /*-------------------------------------------------------------------------- NAME DFSDPshutdown PURPOSE Terminate various static buffers. USAGE intn DFSDshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the DFSD routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn DFSDPshutdown(void) { DFSDIclear(&Readsdg); DFSDIclear(&Writesdg); /* old nsdg table should be reset next time */ if (nsdghdr != NULL) { if (nsdghdr->nsdg_t != NULL) { DFnsdgle *rear, *front; rear = nsdghdr->nsdg_t; front = rear->next; while (rear != NULL) { free(rear); rear = front; if (rear != NULL) front = rear->next; } lastnsdg.tag = DFTAG_NULL; lastnsdg.ref = 0; } HDfreenclear(nsdghdr); } free(ptbuf); ptbuf = NULL; free(Lastfile); Lastfile = NULL; return SUCCEED; } /* end DFSDPshutdown() */ hdf4-hdf4.3.1/hdf/src/dfsd_priv.h000066400000000000000000000110511503061704500165060ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfsd_priv.h * Purpose: header file for the Scientific Data set * Invokes: dfrig_priv.h * Contents: * Structure definitions: DFSsdg * Constant definitions: DFS_MAXLEN * Remarks: This is included with user programs which use SDG * Currently defined to be 2-D. Will later be increased to * multiple dimensions *---------------------------------------------------------------------------*/ #ifndef H4_DFSD_PRIV_H #define H4_DFSD_PRIV_H #include "H4api_adpt.h" #include "hdf.h" /* include numbertype and aid for 3.2 S. Xu */ /* structure to hold SDG info */ typedef struct DFSsdg { DFdi data; /* tag/ref of data in file */ intn rank; /* number of dimensions */ int32 *dimsizes; /* dimensions of data */ char *coordsys; char *dataluf[3]; /* label/unit/format of data */ char **dimluf[3]; /* label/unit/format for each dim */ uint8 **dimscales; /* scales for each dimension */ uint8 max_min[16]; /* max, min values of data, */ /* currently at most 8 bytes each */ int32 numbertype; /* default is float32 */ uint8 filenumsubclass; /* number format in the file, default is IEEE */ int32 aid; /* access id */ int32 compression; /* 0 -- not compressed */ int32 isndg; /* 0 -- pure sdg, written by 3.1 else ndg */ float64 cal, cal_err; /* calibration multiplier stuff */ float64 ioff, ioff_err; /* calibration offset stuff */ int32 cal_type; /* number type of data after calibration */ uint8 fill_value[DFSD_MAXFILL_LEN]; /* fill value if any specified */ intn fill_fixed; /* whether the fill value is a fixed value, or it can change */ } DFSsdg; /* DFnsdgle is the internal structure which stores SDG or NDS and */ /* related SDG in an HDF file. */ /* It is a linked list. */ typedef struct DFnsdgle { DFdi nsdg; /* NDG from 3.2 or SDG from 3.1 */ DFdi sdg; /* Only special NDF has values in this field */ struct DFnsdgle *next; } DFnsdgle; typedef struct DFnsdg_t_hdr { uint32 size; DFnsdgle *nsdg_t; } DFnsdg_t_hdr; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI int32 DFSDIopen(const char *filename, int acc_mode); HDFLIBAPI int DFSDIsdginfo(int32 file_id); HDFLIBAPI int DFSDIclear(DFSsdg *sdg); HDFLIBAPI int DFSDIclearNT(DFSsdg *sdg); HDFLIBAPI int DFSDIgetdata(const char *filename, intn rank, int32 maxsizes[], void *data, int isfortran); HDFLIBAPI int DFSDIputdata(const char *filename, intn rank, int32 *dimsizes, void *data, int accmode, int isfortran); HDFLIBAPI int DFSDIgetslice(const char *filename, int32 winst[], int32 windims[], void *data, int32 dims[], int isfortran); HDFLIBAPI int DFSDIputslice(int32 windims[], void *data, int32 dims[], int isfortran); HDFLIBAPI int DFSDIendslice(int isfortran); HDFLIBAPI intn DFSDIrefresh(char *filename); HDFLIBAPI int DFSDIisndg(intn *isndg); HDFLIBAPI int DFSDIgetrrank(intn *rank); HDFLIBAPI int DFSDIgetwrank(intn *rank); HDFLIBAPI int DFSDIsetdimstrs(int dim, const char *label, const char *unit, const char *format); HDFLIBAPI int DFSDIsetdatastrs(const char *label, const char *unit, const char *format, const char *coordsys); #ifdef __cplusplus } #endif #endif /* H4_DFSD_PRIV_H */ hdf4-hdf4.3.1/hdf/src/dfsdf.c000066400000000000000000001451541503061704500156230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfsdf.c * Purpose: C stubs for Fortran SDS routines * Invokes: dfsd.c dfkit.c * Contents: * dsgdast: Call DFSDgetdatastrs to get attributes of data * dsigdis: Call DFSDgetdimstrs to get attributes of a dimension * dsgdisc: Call DFSDgetdimscale to get scale for a dimension * dsgrang: Call DFSDgetmaxmin to get max and min data values * dssdims: Call DFSDsetdims to set dimensions for subsequent SDGs * dssdisc: Call DFSDsetdimscale to set scale for subsequent SDGs * dssrang: Call DFSDsetmaxmin to set max/min values for subsequent SDGs * dsclear: Call DFSDclear to erase values set for subsequent SDGs * dsslens: Call DFSDsetlengths to set maximum lengths of string * dsgdiln: Call DFSDgetdimlen to get lengths of strings for a dimension * dsgdaln: Call DFSDgetdatalen to get lengths of data strings * dsfirst: Call DFSDrestart to get SDGs again from beginning of file * dspslc: Call DFSDIputslice to write slice to file * dseslc: Call DFSDendslice to end slice writes, write SDG to file * dssnt: Call DFSDsetNT to set number type * dsgnt: Call DFSDgetNT to get number type for reading * dsigdim: Call DFSDgetdims to get dimensions of next SDG * dsigdat: Call DFSDgetdata to get data values * dsipdat: Call DFSDIputdata to write SDG to new file * dsiadat: Call DFSDIputdata to append SDG to existing file * dsigslc: Call DFSDIgetslice to get slice from file * dsisslc: Call DFSDstartslice to set up to write slice * dslref: Call DFSDlastref to get ref of last SDS accessed * dsinum: Call DFSDndatasets to get number of SDG in the file * dsip32s: Call DFSDpre32sdg to test if the sdg was written by HDF prior to * version 3.2 * dfsdgetdatastrs_:Call DFSDgetdatastrs to get attributes of data * dfsdgetdimscale_:Call DFSDgetdimscale to get scale for a dimension * dfsdgetrange_: Call DFSDgetmaxmin to get max and min data values * dfsdsetdims_: Call DFSDsetdims to set dimensions for subsequent SDGs * dfsdsetdimscale_:Call DFSDsetdimscale to set scale for subsequent SDGs * dfsdsetrange_: Call DFSDsetmaxmin to set max/min values for subsequent SDGs * dfsdclear_: Call DFSDclear to erase values set for subsequent SDGs * dfsdsetlengths_:Call DFSDsetlengths to set maximum lengths of string * dfsdgetdimlen_: Call DFSDgetdimlen to get lengths of strings for a dimension * dfsdgetdatalen_:Call DFSDgetdatalen to get lengths of data strings * dfsdrestart_: Call DFSDrestart to get SDGs again from beginning of file * dfsdputslice_: Call DFSDIputslice to write slice to file * dfsdendslice_: Call DFSDendslice to end slice writes, write SDG to file * dfsdsetnt_: Call DFSDsetNT to set number type * dfsdgetnt_: Call DFSDgetNT to get number type * dfsdlastref_: Call DFSDlastref to get ref of last SDS accessed * dsiwref: Call DFSDwriteref to set up next ref to write * dssfill: Call DFSDsetfillvalue to set fill value for SDS * dsgfill: Call DFSDgetfillvalue to get fill value from SDS * dsisslab: Call DFSDstartslab to set up write to SDS * dswslab: Call DFSDwriteslab to write slab to file * dseslab: Call DFSDendslab to end slab writes, write NDG to file * dsirslab: Call DFSDreadslab to get slab from SDS * Remarks: no C stubs needed for the put string routines, only Fortran stubs *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfsd_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: dsgdisc * Purpose: Call DFSDgetdimscale to get scale for a dimension * Inputs: dim: dimension to get attributes for * maxsize: size of scale array * scale: array to return scale in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimscale *---------------------------------------------------------------------------*/ intf ndsgdisc(intf *dim, intf *maxsize, void *scale) { intn rank, cdim; intn isndg; DFSDIisndg(&isndg); if (isndg) { DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; return DFSDgetdimscale(cdim, *maxsize, scale); } /*----------------------------------------------------------------------------- * Name: dsgrang * Purpose: Call DFSDgetrange to get maximum and minimum data values * Inputs: pmax: float to return maximum in * pmin: float to return minimum in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetrange *---------------------------------------------------------------------------*/ intf ndsgrang(void *pmax, void *pmin) { return DFSDgetrange(pmax, pmin); } /*----------------------------------------------------------------------------- * Name: dssdims * Purpose: Call DFSDsetdims to set dimensions for subsequent SDGs * Inputs: rank: no of dimensions of SDG * dimsizes: array containing dimensions of SDG * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetdims *---------------------------------------------------------------------------*/ intf ndssdims(intf *rank, intf dimsizes[]) { int32 i, *cdims, *p; intf ret; p = (int32 *)malloc((size_t)(*rank) * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; for (i = 1; i <= *rank; i++) { *p = dimsizes[*rank - i]; p++; } ret = DFSDsetdims((intn)*rank, cdims); free(cdims); return ret; } /*----------------------------------------------------------------------------- * Name: dssdisc * Purpose: Call DFSDsetdimscale to set scales for subsequent SDGs * Inputs: dim: dimension to set scale for * dimsize: size of array scale * scale: array of scale values * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetdimscale *---------------------------------------------------------------------------*/ intf ndssdisc(intf *dim, intf *dimsize, void *scale) { int cdim; intn rank; DFSDIgetwrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; return DFSDsetdimscale(cdim, *dimsize, scale); } /*----------------------------------------------------------------------------- * Name: dssrang * Purpose: Call DFSDsetrange to set max and min values for this SDG * Inputs: max, min: max and min data values * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetrange * Remarks: Max and Min are set only for next SDG, reset to NULL after *---------------------------------------------------------------------------*/ intf ndssrang(void *max, void *min) { return DFSDsetrange(max, min); } /*----------------------------------------------------------------------------- * Name: dsclear * Purpose: Call DFSDclear to erase values set for subsequent SDGs * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDclear *---------------------------------------------------------------------------*/ intf ndsclear(void) { return DFSDclear(); } /*----------------------------------------------------------------------------- * Name: dsslens * Purpose: Call DFSDsetlengths to set max lengths of strings * Inputs: maxlen_label, maxlen_unit, maxlen_format, maxlen_coordsys: max lens * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetlengths *---------------------------------------------------------------------------*/ intf ndsslens(intf *maxlen_label, intf *maxlen_unit, intf *maxlen_format, intf *maxlen_coordsys) { return (DFSDsetlengths((intn)*maxlen_label, (intn)*maxlen_unit, (intn)*maxlen_format, (intn)*maxlen_coordsys)); } /*----------------------------------------------------------------------------- * Name: dsgdiln * Purpose: Call DFSDgetdimlen to get actual lengths of strings * Inputs: dim: dimension to get lengths for * llabel, lunit, lformat: integers to return lengths of each string in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimlen *---------------------------------------------------------------------------*/ intf ndsgdiln(intf *dim, intf *llabel, intf *lunit, intf *lformat) { intn rank, cdim; intf ret; intn isndg; intn cllabel, clunit, clformat; /* convert between intf and intn */ ret = DFSDIisndg(&isndg); if (isndg) { ret = DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; ret = (intf)DFSDgetdimlen(cdim, &cllabel, &clunit, &clformat); if (ret != FAIL) { /* if ok, copy the values over */ *llabel = cllabel; *lunit = clunit; *lformat = clformat; } /* end if */ return ret; } /*----------------------------------------------------------------------------- * Name: dsgdaln * Purpose: Call DFSDgetdatalen to get actual lengths of strings * Inputs: llabel, lunit, lformat, lcoordsys: integers to return lengths in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdatalen *---------------------------------------------------------------------------*/ intf ndsgdaln(intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys) { intf ret; intn cllabel, clunit, clformat, clcoordsys; ret = (intf)DFSDgetdatalen(&cllabel, &clunit, &clformat, &clcoordsys); if (ret != FAIL) { *llabel = cllabel; *lunit = clunit; *lformat = clformat; *lcoordsys = clcoordsys; } /* end if */ return ret; } /*----------------------------------------------------------------------------- * Name: dsfirst * Purpose: Call DFSDrestart to get SDGs again from the beginning * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDrestart *---------------------------------------------------------------------------*/ intf ndsfirst(void) { return DFSDrestart(); } /*----------------------------------------------------------------------------- * Name: dspslc * Purpose: Call DFSDIputslice to write slice to file * Inputs: windims: array of size rank, containing size of slice * data: array containing slice * dims: dimensions of array data * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIputslice *---------------------------------------------------------------------------*/ intf ndspslc(intf windims[], void *data, intf dims[]) { int32 *cdims, *cwindims, *p, *wp; intn i, rank; intf ret; ret = DFSDIgetwrank(&rank); wp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (wp == NULL) return FAIL; cwindims = wp; p = (int32 *)malloc((size_t)rank * sizeof(int32)); if (p == NULL) { free(cwindims); return FAIL; } cdims = p; for (i = 1; i <= rank; i++) { /* reverse dims & windims */ *p = dims[rank - i]; p++; *wp = windims[rank - i]; wp++; } ret = DFSDIputslice(cwindims, data, cdims, 1); free(cdims); free(cwindims); return ret; } /*----------------------------------------------------------------------------- * Name: dseslc * Purpose: Call DFSDIendslice to finish slice writes and write out SDG * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIendslice *---------------------------------------------------------------------------*/ intf ndseslc(void) { return DFSDIendslice(1); } /*----------------------------------------------------------------------------- * Name: dssnt * Purpose: Call DFSDsetNT to set number type for subsequent calls to DFSDputdata, DFSDadddata, DFSDsetdimscales. * Inputs: numbertype * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Method: Invokes DFSDsetNT * Remarks: 0 specifies default value *---------------------------------------------------------------------------*/ intf ndssnt(intf *numbertype) { return DFSDsetNT(*numbertype); } /*---------------------------------------------------------------------------- * Name: dsgnt * Purpose: Call DFSDgetNT to get number type for subsequent calls * Inputs: pnumbertype * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Method: Invokes DFSDgetNT * Remarks: 0 specifies default value *---------------------------------------------------------------------------*/ intf ndsgnt(intf *pnumbertype) { return DFSDgetNT((int32 *)pnumbertype); } /*----------------------------------------------------------------------------- * Name: dsigdim * Purpose: Call DFSDgetdims to get dimensions of next SDG * Inputs: filename: name of HDF file * prank: integer to return rank in * sizes: array to return dimensions in * maxrank: dimension of array sizes * lenfn: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: Fortran stub routine * Invokes: DFSDgetdims *---------------------------------------------------------------------------*/ intf ndsigdim(_fcd filename, intf *prank, intf sizes[], intf *maxrank, intf *lenfn) { char *fn; int32 i, tmp; intn isndg; intf ret; fn = HDf2cstring(filename, (intn)*lenfn); if (!fn) return -1; ret = DFSDgetdims(fn, (intn *)prank, (int32 *)sizes, (intn)*maxrank); DFSDIisndg(&isndg); if (isndg) { for (i = 0; i < ((int32)*prank) / 2; i++) { tmp = sizes[i]; sizes[i] = sizes[(int32)*prank - i - 1]; sizes[(int32)*prank - i - 1] = tmp; } } free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dsigdat * Purpose: Call DFSDgetdata to get data values * Inputs: filename: name of HDF file * rank: no of dimensions in array data * maxsizes: array containing dimensions of the array data * data: array to return the data in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIgetdata,DFSDIrefresh,DFSDIisndg *---------------------------------------------------------------------------*/ intf ndsigdat(_fcd filename, intf *rank, intf maxsizes[], void *data, intf *fnlen) { int32 i; intn isndg; intf ret; char *fn; int32 *p, *cmaxsizes; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; /* if DFSDgetdims has not be called call DFSDIsdginfo to */ /* refresh Readsdg */ if (DFSDIrefresh(fn) < 0) return FAIL; ret = DFSDIisndg(&isndg); if (isndg) { p = (int32 *)malloc((size_t)(*rank) * sizeof(int32)); if (p == NULL) return FAIL; cmaxsizes = p; for (i = 1; i <= *rank; i++) { *p = maxsizes[*rank - i]; p++; } ret = DFSDIgetdata(fn, (intn)*rank, cmaxsizes, data, 1); free(cmaxsizes); } else ret = DFSDIgetdata(fn, (intn)*rank, (int32 *)maxsizes, data, 1); /* 1==FORTRAN */ free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dsipdat * Purpose: Call DFSDIputdata to write SDG to new file * Inputs: filename: name of HDF file * rank: no of dimensions of array data * dimsizes: array containing size of each dimension of array data * data: array containing data values * fnlen: length of string filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIputdata *---------------------------------------------------------------------------*/ intf ndsipdat(_fcd filename, intf *rank, intf dimsizes[], void *data, intf *fnlen) { char *fn; int32 i, *cdims, *p; intf ret; /* reverse the dimsizes first */ p = (int32 *)malloc((size_t)(*rank) * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; for (i = 1; i <= *rank; i++) { *p = dimsizes[*rank - i]; p++; } fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; /* 0, 1 specify create mode, called from FORTRAN program */ /* In HDF3.2 .hdf files, data and dimsizes are in C order */ ret = DFSDIputdata(fn, (intn)*rank, cdims, data, 0, 1); free(fn); free(cdims); return ret; } /*----------------------------------------------------------------------------- * Name: dsiadat * Purpose: Call DFSDIputdata to append SDG to existing file * Inputs: filename: name of HDF file * rank: no of dimensions of array data * dimsizes: array containing size of each dimension of array data * data: array containing data values * fnlen: length of string filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIputdata *---------------------------------------------------------------------------*/ intf ndsiadat(_fcd filename, intf *rank, intf dimsizes[], void *data, intf *fnlen) { char *fn; int32 i, *cdims, *p; intf ret; /* reverse the dimsizes first */ p = (int32 *)malloc((size_t)(*rank) * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; for (i = 1; i <= *rank; i++) { *p = dimsizes[*rank - i]; p++; } fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; /* 1, 1 specify create mode, called from FORTRAN program */ /* In HDF3.2 .hdf files, data and dimsizes are in C order */ ret = DFSDIputdata(fn, (intn)*rank, cdims, data, 1, 1); free(fn); free(cdims); return ret; } /*----------------------------------------------------------------------------- * Name: dsigslc * Purpose: Call DFSDIgetslice to read slice from file * Inputs: filename: name of HDF file * winst: array of size = rank of data, containing start of slice * windims: array of size rank, containing end of slice * data: array for returning slice * ndims: no of dims of array data * dims: dimensions of array data * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIgetslice *---------------------------------------------------------------------------*/ intf ndsigslc(_fcd filename, intf winst[], intf windims[], void *data, intf dims[], intf *fnlen) { char *fn; intf ret; intn rank, i; int32 *cdims, *cwindims, *cwinst, *p, *wp, *wsp; intn isndg; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; /* if DFSDgetdims has not be called call DFSDIsdginfo to */ /* refresh Readsdg */ if (DFSDIrefresh(fn) < 0) return FAIL; ret = DFSDIisndg(&isndg); if (isndg) { ret = DFSDIgetrrank(&rank); p = (int32 *)malloc((size_t)rank * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; wp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (wp == NULL) return FAIL; cwindims = wp; wsp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (wsp == NULL) return FAIL; cwinst = wsp; for (i = 1; i <= rank; i++) { *p = dims[rank - i]; p++; *wp = windims[rank - i]; wp++; *wsp = winst[rank - i]; wsp++; } ret = DFSDIgetslice(fn, cwinst, cwindims, data, cdims, 1); free(cdims); free(cwindims); free(cwinst); } else ret = DFSDIgetslice(fn, (int32 *)winst, (int32 *)windims, data, (int32 *)dims, 1); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dsisslc * Purpose: Call DFSDstartslice to set up to write slice * Inputs: filename: name of HDF file * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDstartslice *---------------------------------------------------------------------------*/ intf ndsisslc(_fcd filename, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFSDstartslice(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dsirref * Purpose: Call DFSDreadref to set up next ref to read * Inputs: filename: name of HDF file * ref: next ref to read * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDstartslice *---------------------------------------------------------------------------*/ intf ndsirref(_fcd filename, intf *ref, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFSDreadref(fn, (uint16)*ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dslref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFANlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndslref(void) { return (intf)DFSDlastref(); } /*----------------------------------------------------------------------------- * Name: dsinum * Purpose: Return number of SDGs in the file * Inputs: filename: name of file * len: length of Fortran string filename * Returns: number of SDGs on success, -1 on failure with DFerror set * Users: dsnum, dfsdnumber * Invokes: DFSDndataset, HDf2cstring * Method: convert string, call DFSDndatasets *---------------------------------------------------------------------------*/ intf ndsinum(_fcd filename, intf *len) { char *cname; intf status; cname = HDf2cstring(filename, (intn)*len); if (!cname) return -1; status = DFSDndatasets(cname); free(cname); return status; } /*------------------------------------------------------------------------------ * Name: dsip32s * Purpose: tests if the SDG with the specified ref was written by HDF prior to * version 3.2 * Input: filename: name of HDF file * ref: the ref number of the SDG * ispre32: set to TRUE if the SDG/ref was written by old library; * to FALSE otherwise. * len: length of filename * Returns: 0 on success, -1 on failure * Users: HDF Fortran programmers *------------------------------------------------------------------------------*/ intf ndsip32s(_fcd filename, intf *ref, intf *ispre32, intf *len) { char *cname; intf status; cname = HDf2cstring(filename, (intn)*len); if (!cname) return -1; status = DFSDpre32sdg(cname, (uint16)*ref, (intn *)ispre32); free(cname); return status; } /*----------------------------------------------------------------------------- * Name: dfsdgetdatastrs * Purpose: Call DFSDgetdatastrs to get the data attributes * Inputs: label, unit, format, coordsys: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdatastrs *---------------------------------------------------------------------------*/ intf ndfsdgetdatastrs(_fcd label, _fcd unit, _fcd format, _fcd coordsys) { return (DFSDgetdatastrs((char *)_fcdtocp(label), (char *)_fcdtocp(unit), (char *)_fcdtocp(format), (char *)_fcdtocp(coordsys))); } /*----------------------------------------------------------------------------- * Name: dfsdgetdimstrs * Purpose: Call DFSDgetdimstrs to get attributes of a dimension * Inputs: label, unit, format: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimstrs *---------------------------------------------------------------------------*/ intf ndfsdgetdimstrs(intf *dim, _fcd label, _fcd unit, _fcd format) { intn isndg; intn rank, cdim; DFSDIisndg(&isndg); if (isndg) { DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; return DFSDgetdimstrs(cdim, (char *)_fcdtocp(label), (char *)_fcdtocp(unit), (char *)_fcdtocp(format)); } /*----------------------------------------------------------------------------- * Name: dfsdgetdimscale * Purpose: Call DFSDgetdimscale to get scale for a dimension * Inputs: dim: dimension to get attributes for * maxsize: size of scale array * scale: array to return scale in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimscale *---------------------------------------------------------------------------*/ intf ndfsdgetdimscale(intf *dim, intf *maxsize, void *scale) { intn isndg; intn rank, cdim; DFSDIisndg(&isndg); if (isndg) { DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; return DFSDgetdimscale(cdim, *maxsize, scale); } /*----------------------------------------------------------------------------- * Name: dfsdgetrange * Purpose: Call DFSDgetrange to get maximum and minimum data values * Inputs: pmax: float to return maximum in * pmin: float to return minimum in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetrange *---------------------------------------------------------------------------*/ intf ndfsdgetrange(void *pmax, void *pmin) { return DFSDgetrange(pmax, pmin); } /*----------------------------------------------------------------------------- * Name: dfsdsetdims * Purpose: Call DFSDsetdims to set dimensions for subsequent SDGs * Inputs: rank: no of dimensions of SDG * dimsizes: array containing dimensions of SDG * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetdims *---------------------------------------------------------------------------*/ intf ndfsdsetdims(intf *rank, intf dimsizes[]) { int32 i, *cdims, *p; intf ret; p = (int32 *)malloc((size_t)(*rank) * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; for (i = 1; i <= *rank; i++) { *p = dimsizes[*rank - i]; p++; } ret = DFSDsetdims((intn)*rank, cdims); free(cdims); return ret; } /*----------------------------------------------------------------------------- * Name: dfsdsetdimscale * Purpose: Call DFSDsetdimscale to set scales for subsequent SDGs * Inputs: dim: dimension to set scale for * dimsize: size of array scale * scale: array of scale values * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetdimscale *---------------------------------------------------------------------------*/ intf ndfsdsetdimscale(intf *dim, intf *dimsize, void *scale) { intn rank, cdim; DFSDIgetwrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; return DFSDsetdimscale(cdim, *dimsize, scale); } /*----------------------------------------------------------------------------- * Name: dfsdsetrange * Purpose: Call DFSDsetrange to set max and min values for this SDG * Inputs: max, min: max and min data values * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetrange * Remarks: Max and Min are set only for next SDG, reset to NULL after *---------------------------------------------------------------------------*/ intf ndfsdsetrange(void *max, void *min) { return DFSDsetrange(max, min); } /*----------------------------------------------------------------------------- * Name: dfsdclear * Purpose: Call DFSDclear to erase values set for subsequent SDGs * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDclear *---------------------------------------------------------------------------*/ intf ndfsdclear(void) { return DFSDclear(); } /*----------------------------------------------------------------------------- * Name: dfsdsetlengths * Purpose: Call DFSDsetlengths to set max lengths of strings * Inputs: maxlen_label, maxlen_unit, maxlen_format, maxlen_coordsys: max lens * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetlengths *---------------------------------------------------------------------------*/ intf ndfsdsetlengths(intf *maxlen_label, intf *maxlen_unit, intf *maxlen_format, intf *maxlen_coordsys) { return (DFSDsetlengths((intn)*maxlen_label, (intn)*maxlen_unit, (intn)*maxlen_format, (intn)*maxlen_coordsys)); } /*----------------------------------------------------------------------------- * Name: dfsdgetdimlen * Purpose: Call DFSDgetdimlen to get actual lengths of strings * Inputs: dim: dimension to get lengths for * llabel, lunit, lformat: integers to return lengths of each string in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimlen *---------------------------------------------------------------------------*/ intf ndfsdgetdimlen(intf *dim, intf *llabel, intf *lunit, intf *lformat) { intn isndg; intn rank, cdim; intf ret; intn cllabel, clunit, clformat; /* convert between intf and intn */ ret = DFSDIisndg(&isndg); if (isndg) { ret = DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; ret = (intf)DFSDgetdimlen(cdim, &cllabel, &clunit, &clformat); if (ret != FAIL) { /* if ok, copy the values over */ *llabel = cllabel; *lunit = clunit; *lformat = clformat; } /* end if */ return ret; } /*----------------------------------------------------------------------------- * Name: dfsdgetdatalen * Purpose: Call DFSDgetdatalen to get actual lengths of strings * Inputs: llabel, lunit, lformat, lcoordsys: integers to return lengths in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdatalen *---------------------------------------------------------------------------*/ intf ndfsdgetdatalen(intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys) { intf ret; intn cllabel, clunit, clformat, clcoordsys; ret = (intf)DFSDgetdatalen(&cllabel, &clunit, &clformat, &clcoordsys); if (ret != FAIL) { *llabel = cllabel; *lunit = clunit; *lformat = clformat; *lcoordsys = clcoordsys; } /* end if */ return ret; } /*----------------------------------------------------------------------------- * Name: dfsdrestart * Purpose: Call DFSDrestart to get SDGs again from the beginning * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDrestart *---------------------------------------------------------------------------*/ intf ndfsdrestart(void) { return DFSDrestart(); } /*----------------------------------------------------------------------------- * Name: dfsdputslice * Purpose: Call DFSDIputslice to write slice to file * Inputs: winst: array of size = rank of data, containing start of slice * windims: array of size rank, containing end of slice * data: array containing slice * dims: dimensions of array data * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIputslice *---------------------------------------------------------------------------*/ intf ndfsdputslice(intf windims[], void *data, intf dims[]) { intn rank, i; intf ret; int32 *cdims, *cwindims, *p, *wp; ret = DFSDIgetwrank(&rank); wp = (int32 *)malloc((size_t)(rank) * sizeof(int32)); if (wp == NULL) return FAIL; cwindims = wp; p = (int32 *)malloc((size_t)(rank) * sizeof(int32)); if (p == NULL) return FAIL; cdims = p; for (i = 1; i <= rank; i++) { /* reverse dims & windims */ *p = dims[rank - i]; p++; *wp = windims[rank - i]; wp++; } ret = DFSDIputslice(cwindims, data, cdims, 1); free(cdims); free(cwindims); return ret; } /*----------------------------------------------------------------------------- * Name: dfsdendslice * Purpose: Call DFSDendslice to finish slice writes and write out SDG * Inputs: none * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDIendslice *---------------------------------------------------------------------------*/ intf ndfsdendslice(void) { return DFSDIendslice(1); } /*----------------------------------------------------------------------------- * Name: dfsdsetnt * Purpose: Call DFSDsetNT to set number type for subsequent calls to * DFSDputdata, DFSDadddata, DFSDsetdimscales. * Inputs: numbertype * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Method: Invokes DFSDsetNT * Remarks: 0 specifies default value *---------------------------------------------------------------------------*/ intf ndfsdsetnt(intf *numbertype) { return DFSDsetNT(*numbertype); } /*----------------------------------------------------------------------------- * Name: dfsdgetnt * Purpose: Call DFSDgetNT to get number type for subsequent calls * Inputs: pnumbertype * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Method: Invokes DFSDgetNT * Remarks: 0 specifies default value *---------------------------------------------------------------------------*/ intf ndfsdgetnt(intf *pnumbertype) { return DFSDgetNT((int32 *)pnumbertype); } /*----------------------------------------------------------------------------- * Name: dfsdlastref * Purpose: Return last ref written or read * Inputs: none * Globals: Lastref * Returns: ref on success, -1 on error with DFerror set * Users: HDF users, utilities, other routines * Invokes: DFANlastref * Remarks: none *---------------------------------------------------------------------------*/ intf ndfsdlastref(void) { return (intf)DFSDlastref(); } /*----------------------------------------------------------------------------- * Name: dsisdis * Purpose: For the given dimension, set label, unit, format * This routine needs to be called once for each dimension whose * values the user wants to set. * Inputs: dim: the dimension that this info applies to * label: label to be used to describe this dimension * unit: units for dimension * format: format to be used in displaying * llabel, lunit, lformat: lengths of corresponding strings * Globals: * Returns: 0 on success, FAIL on failure with error set * Users: HDF users, utilities, other routines * Invokes: DFSDIsetdimstr * Method: *---------------------------------------------------------------------------*/ intf ndsisdis(intf *dim, _fcd flabel, _fcd funit, _fcd fformat, intf *llabel, intf *lunit, intf *lformat) { char *label = HDf2cstring(flabel, (intn)*llabel); char *unit = HDf2cstring(funit, (intn)*lunit); char *format = HDf2cstring(fformat, (intn)*lformat); intf status; intn rank, cdim; if (!(label && unit && format)) { free(label); free(unit); free(format); return FAIL; } status = DFSDIgetwrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; status = DFSDIsetdimstrs(cdim, label, unit, format); free(label); free(unit); free(format); return status; } /*----------------------------------------------------------------------------- * Name: dsigdis * Purpose: Call DFSDgetdimstrs to get attributes of a dimension * Inputs: label, unit, format: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdimstrs *---------------------------------------------------------------------------*/ intf ndsigdis(intf *dim, _fcd label, _fcd unit, _fcd format, intf *llabel, intf *lunit, intf *lformat) { char *ilabel, *iunit, *iformat; intn rank, cdim; intn isndg, status; DFSDIisndg(&isndg); if (isndg) { DFSDIgetrrank(&rank); if (rank < *dim) return FAIL; cdim = rank - (intn)*dim + 1; } else cdim = (intn)*dim; iunit = ilabel = iformat = NULL; if (*llabel) ilabel = (char *)malloc((size_t)*llabel + 1); if (*lunit) iunit = (char *)malloc((size_t)*lunit + 1); if (*lformat) iformat = (char *)malloc((size_t)*lformat + 1); status = DFSDgetdimstrs(cdim, ilabel, iunit, iformat); HDpackFstring(ilabel, _fcdtocp(label), (intn)*llabel); HDpackFstring(iunit, _fcdtocp(unit), (intn)*lunit); HDpackFstring(iformat, _fcdtocp(format), (intn)*lformat); free(ilabel); free(iunit); free(iformat); return status; } /*----------------------------------------------------------------------------- * Name: dsisdas * Purpose: Set label, unit and format for displaying subsequent SDGs * Inputs: label: label to be used to describe data * unit: unit corresponding to data values * format: format to be used in displaying data values * coordsys: type of coordinate system * Globals: Writesdg, Ref * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran stubs * Invokes: DFSDIsetdatastrs * Method: Stores values in global structure Writesdg * Remarks: *---------------------------------------------------------------------------*/ intf ndsisdas(_fcd flabel, _fcd funit, _fcd fformat, _fcd fcoordsys, intf *isfortran, intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys) { char *label = HDf2cstring(flabel, (intn)*llabel); char *unit = HDf2cstring(funit, (intn)*lunit); char *format = HDf2cstring(fformat, (intn)*lformat); char *coordsys = HDf2cstring(fcoordsys, (intn)*lcoordsys); intf status; if (!(label && unit && format)) { free(label); free(unit); free(format); return FAIL; } (void)isfortran; status = DFSDIsetdatastrs(label, unit, format, coordsys); free(label); free(unit); free(format); free(coordsys); return status; } /* ndsisdas */ /*----------------------------------------------------------------------------- * Name: dsigdas * Purpose: Call DFSDgetdatastrs to get the data attributes * Inputs: label, unit, format, coordsys: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetdatastrs *---------------------------------------------------------------------------*/ intf ndsigdas(_fcd label, _fcd unit, _fcd format, _fcd coordsys, intf *llabel, intf *lunit, intf *lformat, intf *lcoord) { char *ilabel, *iunit, *iformat, *icoord; intf status; iunit = ilabel = iformat = icoord = NULL; if (*llabel) ilabel = (char *)malloc((uint32)*llabel + 1); if (*lunit) iunit = (char *)malloc((uint32)*lunit + 1); if (*lformat) iformat = (char *)malloc((uint32)*lformat + 1); if (*lcoord) icoord = (char *)malloc((uint32)*lcoord + 1); status = DFSDgetdatastrs(ilabel, iunit, iformat, icoord); HDpackFstring(ilabel, _fcdtocp(label), (intn)*llabel); HDpackFstring(iunit, _fcdtocp(unit), (intn)*lunit); HDpackFstring(iformat, _fcdtocp(format), (intn)*lformat); HDpackFstring(icoord, _fcdtocp(coordsys), (intn)*lcoord); free(ilabel); free(iunit); free(iformat); free(icoord); return status; } /*----------------------------------------------------------------------------- * Name: dsscal * Purpose: Call DFSDsetcal to set calibration data * Inputs: cal, cal_err : calibration and error * ioff, ioff_err : offset and error * cal_type : after calibration NT * Returns: 0 on success, -1 on failure * Users: HDF Fortran programmers * Invokes: DFSDgetdatastrs *---------------------------------------------------------------------------*/ intf ndsscal(float64 *cal, float64 *cal_err, float64 *ioff, float64 *ioff_err, intf *cal_type) { intf ret; float64 dcal = 0.0; float64 dcal_err = 0.0; float64 dioff = 0.0; float64 dioff_err = 0.0; memcpy(&dcal, cal, sizeof(float64)); memcpy(&dcal_err, cal_err, sizeof(float64)); memcpy(&dioff, ioff, sizeof(float64)); memcpy(&dioff_err, ioff_err, sizeof(float64)); ret = (intf)DFSDsetcal((float64)dcal, (float64)dcal_err, (float64)dioff, (float64)dioff_err, (int32)*cal_type); return ret; } /* ndsscal */ /*----------------------------------------------------------------------------- * Name: dsgcal * Purpose: Call DFSDgetcal to get calibration data * Inputs: cal, cal_err : calibration and error * ioff, ioff_err : offset and error * cal_type : after calibration NT * Returns: 0 on success, -1 on failure * Users: HDF Fortran programmers * Invokes: DFSDgetcal *---------------------------------------------------------------------------*/ intf ndsgcal(float64 *cal, float64 *cal_err, float64 *ioff, float64 *ioff_err, intf *cal_type) { intf ret; float64 dcal; float64 dcal_err; float64 dioff; float64 dioff_err; ret = (intf)DFSDgetcal(&dcal, &dcal_err, &dioff, &dioff_err, (int32 *)cal_type); memcpy(cal, &dcal, sizeof(float64)); memcpy(cal_err, &dcal_err, sizeof(float64)); memcpy(ioff, &dioff, sizeof(float64)); memcpy(ioff_err, &dioff_err, sizeof(float64)); return ret; } /* ndsgcal */ /*----------------------------------------------------------------------------- * Name: dsiwref * Purpose: Call DFSDwriteref to set up next ref to write * Inputs: filename: name of HDF file * fnlen: length of filename * ref: next ref to read * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDwriteref *---------------------------------------------------------------------------*/ intf ndsiwref(_fcd filename, intf *fnlen, intf *ref) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (!fn) return -1; ret = DFSDwriteref(fn, (uint16)*ref); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dfsdsfill * Purpose: Call DFSDsetfillvalue to set fill value for SDS * Inputs: fill_value: fill value for SDS * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDsetfillvalue *---------------------------------------------------------------------------*/ intf ndssfill(void *fill_value) { return DFSDsetfillvalue(fill_value); } /*----------------------------------------------------------------------------- * Name: dsgfill * Purpose: Call DFSDgetfillvalue to get fill value for SDS * Inputs: fill_value: fill value of SDS * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDgetfillvalue *---------------------------------------------------------------------------*/ intf ndsgfill(void *fill_value) { return DFSDgetfillvalue(fill_value); } /*----------------------------------------------------------------------------- * Name: dsisslab * Purpose: Set up slab writes to SDS * Inputs: filename: file to which this applies * fnlen: file name length * Returns: 0 on success, FAIL on failure * Users: HDF programmers, other routines and utilities * Invokes: DFSDstartslab * Remarks: *---------------------------------------------------------------------------*/ intf ndsisslab(_fcd filename, intf *fnlen) { char *fn; intf ret; fn = HDf2cstring(filename, (intn)*fnlen); if (fn == NULL) return FAIL; ret = DFSDstartslab(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: dswslab * Purpose: Call DFSDwriteslab to write slab to file * Inputs: start: array of size = rank of data, containing start of slab * stride: array for subsampling * count: array of size rank, containing size of slab * data: array of data to be written * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers * Invokes: DFSDIgetwrank, malloc, free, HDf2cstring, DFSDwriteslab *---------------------------------------------------------------------------*/ intf ndswslab(intf start[], intf stride[], intf count[], void *data) { int32 *lstart, *lstride, *lcount, *aptr, *bptr, *cptr; intn i, rank; intf ret; /* ** Lets reverse the order for the arrays since we ** are going from fortran to C */ ret = DFSDIgetwrank(&rank); if (ret == FAIL) return FAIL; aptr = (int32 *)malloc((size_t)(3 * rank) * sizeof(int32)); if (aptr == NULL) return FAIL; lstart = aptr; lstride = bptr = aptr + rank; lcount = cptr = bptr + rank; for (i = 1; i <= rank; i++) { /* reverse start, stride & count */ *aptr = start[rank - i]; aptr++; *bptr = stride[rank - i]; bptr++; *cptr = count[rank - i]; cptr++; } ret = DFSDwriteslab(lstart, lstride, lcount, data); free(lstart); return ret; } /*----------------------------------------------------------------------------- * Name: dseslab * Purpose: End slab writes to SDS, Write out NDG * Inputs: None * Returns: 0 on success, FAIL on failure * Users: HDF programmers, other routines and utilities * Invokes: DFSDendslab * Remarks: *---------------------------------------------------------------------------*/ intf ndseslab(void) { return DFSDendslab(); } /*----------------------------------------------------------------------------- * Name: dsirslab * Purpose: Call DFSDreadslab to read slab from SDS * Inputs: filename: name of HDF file * start: array of size = rank of data, containing start of slab * slab_size: array of size rank, containing end of slab * stride: sub sampling stride. * buffer: array for returning slab * buffer_size: dimensions of array data * fnlen: length of filename * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFSDreadslab *---------------------------------------------------------------------------*/ intf ndsirslab(_fcd filename, intf *fnlen, intf start[], intf slab_size[], intf stride[], void *buffer, intf buffer_size[]) { char *fn; intf ret; intn rank, i; int32 *lbuffer_size, *lslab_size, *lstart, *lstride; int32 *p, *wp, *wsp, *sp; intn isndg; /* Convert "filename" to fortran string */ fn = HDf2cstring(filename, (intn)*fnlen); if (fn == NULL) return FAIL; /* If DFSDgetdims has not be called call DFSDIsdginfo to refresh Readsdg */ if (DFSDIrefresh(fn) < 0) return FAIL; ret = DFSDIisndg(&isndg); if (isndg) { ret = DFSDIgetrrank(&rank); p = (int32 *)malloc((size_t)rank * sizeof(int32)); if (p == NULL) return FAIL; lbuffer_size = p; wp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (wp == NULL) return FAIL; lslab_size = wp; wsp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (wsp == NULL) return FAIL; lstart = wsp; sp = (int32 *)malloc((size_t)rank * sizeof(int32)); if (sp == NULL) return FAIL; lstride = sp; for (i = 1; i <= rank; i++) { *p = buffer_size[rank - i]; p++; *wp = slab_size[rank - i]; wp++; *wsp = start[rank - i]; wsp++; *sp = stride[rank - i]; sp++; } ret = DFSDreadslab(fn, lstart, lslab_size, lstride, buffer, lbuffer_size); free(lstart); free(lslab_size); free(lbuffer_size); free(lstride); } else ret = DFSDreadslab(fn, (int32 *)start, (int32 *)slab_size, (int32 *)stride, buffer, (int32 *)buffer_size); free(fn); return ret; } hdf4-hdf4.3.1/hdf/src/dfsdff.f000066400000000000000000000526601503061704500157730ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: dfsdFf.f C Purpose: Fortran stubs for Fortran SDS routines C Invokes: dfsdF.c dfsd.c C Contents: C dsgdims: get dimensions of next SDG C dsgdata: get data for next SDG C dssdast: set strings for data for subsequent SDGs C dssdist: set strings for a dimension for subsequent SDGs C dspdata: write SDG to new file C dsadata: append SDG to existing file C dsgslc: get slice from file C dssslc: set up to write slices to file C dsrref: set up next ref to read C dsnum: return number of SDGs in file C dsp32sd: is the SDG/ref written by HDF prior to version 3.2? C dfsdgetdims: get dimensions of next SDG C dfsdgetdata: get data for next SDG C dfsdsetdatastrs:set strings for data for subsequent SDGs C dfsdsetdimstrs: set strings for a dimension for subsequent SDGs C dfsdputdata: write SDG to new file C dfsdadddata: append SDG to existing file C dfsdgetslice: get slice from file C dfsdstartslice: set up to write slices to file C dfsdreadref: set up next ref to read C dfsdnumber: return number of SDGs in the file C dswref: set up next ref to write C dssslab: set up write to SDS C dsrslab: set up to read from SDS C Remarks: none C------------------------------------------------------------------------------ C------------------------------------------------------------------------------ C Name: dsgdims C Purpose: get dimensions of next SDG C Inputs: filename: name of HDF file C rank: integer to return rank in C dimsizes: array to return dimensions in C maxrank: size of array dimsizes C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigdim C------------------------------------------------------------------------------ integer function dsgdims(filename, rank, dimsizes, maxrank) character*(*) filename integer rank, dimsizes, maxrank, dsigdim dsgdims = dsigdim(filename, rank, dimsizes, maxrank, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dsgdata C Purpose: get data from next SDG C Inputs: filename: name of HDF file C rank: integer containing no of dimensions in array data C maxsizes: array containing dimensions of array data C data: array to return data values in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigdat C------------------------------------------------------------------------------ integer function dsgdata(filename, rank, maxsizes, data) character*(*) filename integer rank, maxsizes, dsigdat real data dsgdata = dsigdat(filename, rank, maxsizes, data, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dssdast C Purpose: set data strings to be written out with next SDG C Inputs: label, unit, format, coordsys: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisdas_ C------------------------------------------------------------------------------ integer function dssdast(label, unit, format, coordsys) character*(*) label, unit, format, coordsys integer dsisdas, len dssdast = dsisdas(label, unit, format, coordsys, +1, len(label), len(unit), len(format), len(coordsys)) return end C------------------------------------------------------------------------------ C Name: dssdist C Purpose: set dim strings to be written out with next SDG C Inputs: label, unit, format, coordsys: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisdis_ C------------------------------------------------------------------------------ integer function dssdist(dim, label, unit, format) character*(*) label, unit, format integer dim, len integer dsisdis dssdist = dsisdis(dim, label, unit, format, +len(label), len(unit), len(format)) return end C------------------------------------------------------------------------------ C Name: dspdata C Purpose: call dsipdat to write SDG to new file C Inputs: filename: name of HDF file C rank: no of dimensions of array data C dimsizes: array containing the dimensions of array data C data: array containing the data values C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsipdat C------------------------------------------------------------------------------ integer function dspdata(filename, rank, dimsizes, data) character*(*) filename integer rank, dimsizes, data, len, dsipdat dspdata = dsipdat(filename, rank, dimsizes, data, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsadata C Purpose: call dsiadat to append SDG to existing file C Inputs: filename: name of HDF file C rank: no of dimensions of array data C dimsizes: array containing the dimensions of array data C data: array containing the data values C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsiadat C------------------------------------------------------------------------------ integer function dsadata(filename, rank, dimsizes, data) character*(*) filename integer rank, dimsizes, data, len, dsiadat dsadata = dsiadat(filename, rank, dimsizes, data, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsgslc C Purpose: call dsigslc to get slice from file C Inputs: filename: name of HDF file C winst: array of size = rank of data, containing start of slice C winend: array of size rank, containing end of slice C data: array for returning slice C ndims: no of dims of array data C dims: dimensions of array data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigslc C------------------------------------------------------------------------------ integer function dsgslc(filename,winst,windims,data,dims) character*(*) filename integer winst, windims, data, dims, dsigslc dsgslc = dsigslc(filename, winst, windims, data, dims, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dssslc C Purpose: call dsisslc to set up to write slices C Inputs: filename: name of HDF file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisslc C------------------------------------------------------------------------------ integer function dssslc(filename) character*(*) filename integer dsisslc dssslc = dsisslc(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsrref C Purpose: call dsirref to set up next ref to read C Inputs: filename: name of HDF file C ref: next ref to read C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsirref C------------------------------------------------------------------------------ integer function dsrref(filename, ref) character*(*) filename integer ref integer dsirref dsrref = dsirref(filename, ref, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsnum C Purpose: return the number of SDGs in the file C Inputs: filename: name of HDF file C Returns: number of SDGs on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsinum C------------------------------------------------------------------------------ integer function dsnum(filename) character*(*) filename integer len, dsinum dsnum = dsinum(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsp32sd C Purpose: tests if the SDG with the specified ref was written by HDF prior to C version 3.2 C Input: filename: name of HDF file C ref: the ref number of the SDG C ispre32: set to TRUE if the SDG/ref was written by old library; C to FALSE otherwise. C Returns: 0 on success, -1 on failure C Users: HDF Fortran programmers C------------------------------------------------------------------------------ integer function dsp32sd(filename, ref, ispre32) character*(*) filename integer ref, ispre32, len, dsip32s dsp32sd = dsip32s(filename, ref, ispre32, len(filename)) return end CEND7MAX C------------------------------------------------------------------------------ C Name: dfsdgetdims C Purpose: get dimensions of next SDG C Inputs: filename: name of HDF file C rank: integer to return rank in C dimsizes: array to return dimensions in C maxrank: size of array dimsizes C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigdim C------------------------------------------------------------------------------ integer function dfsdgetdims(filename, rank, dimsizes, maxrank) character*(*) filename integer rank, dimsizes, maxrank, dsigdim dfsdgetdims = dsigdim(filename, rank, dimsizes, maxrank, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdgetdata C Purpose: get data from next SDG C Inputs: filename: name of HDF file C rank: integer containing no of dimensions in array data C maxsizes: array containing dimensions of array data C data: array to return data values in C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigdat C------------------------------------------------------------------------------ integer function dfsdgetdata(filename, rank, maxsizes, data) character*(*) filename integer rank, maxsizes, dsigdat real data dfsdgetdata = dsigdat(filename, rank, maxsizes, data, + len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdsetdatastrs C Purpose: set data strings to be written out with next SDG C Inputs: label, unit, format, coordsys: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisdas_ C------------------------------------------------------------------------------ integer function dfsdsetdatastrs(label, unit, format, coordsys) character*(*) label, unit, format, coordsys integer dsisdas, len dfsdsetdatastrs = dsisdas(label, unit, format, coordsys, +1, len(label), len(unit), len(format), len(coordsys)) return end C------------------------------------------------------------------------------ C Name: dfsdsetdimstrs C Purpose: set dim strings to be written out with next SDG C Inputs: label, unit, format, coordsys: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisdis_ C------------------------------------------------------------------------------ integer function dfsdsetdimstrs(dim, label, unit, format) character*(*) label, unit, format integer dim, len integer dsisdis dfsdsetdimstrs = dsisdis(dim, label, unit, format, +len(label), len(unit), len(format)) return end C------------------------------------------------------------------------------ C Name: dfsdputdata C Purpose: call dsipdat to write SDG to new file C Inputs: filename: name of HDF file C rank: no of dimensions of array data C dimsizes: array containing the dimensions of array data C data: array containing the data values C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsipdat C------------------------------------------------------------------------------ integer function dfsdputdata(filename, rank, dimsizes, data) character*(*) filename integer rank, dimsizes, data, len, dsipdat dfsdputdata = dsipdat(filename,rank,dimsizes,data,len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdadddata C Purpose: call dsiadat to append SDG to existing file C Inputs: filename: name of HDF file C rank: no of dimensions of array data C dimsizes: array containing the dimensions of array data C data: array containing the data values C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsiadat C------------------------------------------------------------------------------ integer function dfsdadddata(filename, rank, dimsizes, data) character*(*) filename integer rank, dimsizes, data, len, dsiadat dfsdadddata = dsiadat(filename,rank,dimsizes,data,len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdgetslice C Purpose: call dsigslc to get slice from file C Inputs: filename: name of HDF file C winst: array of size = rank of data, containing start of slice C winend: array of size rank, containing end of slice C data: array for returning slice C ndims: no of dims of array data C dims: dimensions of array data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsigslc C------------------------------------------------------------------------------ integer function dfsdgetslice(filename, winst, winend, data, + dims) character*(*) filename integer winst, winend, data, dims, dsigslc dfsdgetslice = dsigslc(filename, winst, winend, data, + dims, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdstartslice C Purpose: call dsisslc to set up to write slices C Inputs: filename: name of HDF file C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisslc C------------------------------------------------------------------------------ integer function dfsdstartslice(filename) character*(*) filename integer dsisslc dfsdstartslice = dsisslc(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdreadref C Purpose: call dsirref to set up next ref to read C Inputs: filename: name of HDF file C ref: next ref to read C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsirref C------------------------------------------------------------------------------ integer function dfsdreadref(filename, ref) character*(*) filename integer ref integer dsirref dfsdreadref = dsirref(filename, ref, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdnumber C Purpose: return the number of SDGs in the file C Inputs: filename: name of HDF file C Returns: number of SDGs on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsinum C------------------------------------------------------------------------------ integer function dfsdnumber(filename) character*(*) filename integer len, dsinum dfsdnumber = dsinum(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dfsdgetdimstrs C Purpose: return the label unit and format for the current SDGs C Inputs: C Returns: -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsinum C------------------------------------------------------------------------------ integer function dfsdgetdimstrs(dim, label, unit, format) character*(*) label, unit, format integer len, dsigdis, dim dfsdgetdimstrs = dsigdis(dim, label, unit, format, len(label), + len(unit), len(format)) return end C------------------------------------------------------------------------------ C Name: dsgdist C Purpose: return the label unit and format for the current SDGs C Inputs: C Returns: -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsinum C------------------------------------------------------------------------------ integer function dsgdist(dim, label, unit, format) character*(*) label, unit, format integer len, dsigdis, dim dsgdist = dsigdis(dim, label, unit, format, len(label), + len(unit), len(format)) return end C------------------------------------------------------------------------------ C Name: dsgdast C Purpose: return the label unit and format for the current SDGs C Inputs: C Returns: -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsinum C------------------------------------------------------------------------------ integer function dsgdast(label, unit, format, coordsys) character*(*) label, unit, format, coordsys integer len, dsigdas dsgdast = dsigdas(label, unit, format, coordsys, len(label), + len(unit), len(format), len(coordsys)) return end C------------------------------------------------------------------------------ C Name: dswref C Purpose: set up next ref to write C Inputs: filename: file to write to. C ref: reference number to set. C Returns: -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsiwref C------------------------------------------------------------------------------ integer function dswref(filename, ref) character*(*) filename integer ref, dsiwref dswref = dsiwref(filename, len(filename), ref) return end C------------------------------------------------------------------------------ C Name: dssslab C Purpose: Set up slab writes to SDS C Inputs: filename: file to write to. C Returns: -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsisslab C------------------------------------------------------------------------------ integer function dssslab(filename) character*(*) filename integer dsisslab dssslab = dsisslab(filename, len(filename)) return end C------------------------------------------------------------------------------ C Name: dsrslab C Purpose: call dsirslab to get slab from SDS C Inputs: fname: name of HDF file C start: array of size = rank of data, containing start of slab C slab_size: array of size rank, containing end of slab C stride: sub sampling stride. C buffer: array for returning slab C buffer_size: dimensions of array data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Invokes: dsirslab C------------------------------------------------------------------------------ integer function dsrslab(fname, start, slabsize, stride, buffer, + buffersize) character*(*) fname integer start, slabsize, stride, buffer, buffersize, dsirslab dsrslab = dsirslab(fname, len(fname), start, slabsize, stride, + buffer, buffersize) return end hdf4-hdf4.3.1/hdf/src/dfstubs.c000066400000000000000000000651261503061704500162070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** FILE ** dfstubs.c ** V3.X stubs for V4.0 "H-level" I/O routines. First implemented: V3.2 ** EXPORTED ROUTINES ** *DFopen -- open HDF file ** *DFclose -- close HDF file ** *DFdescriptors -- return a list of the data descriptors in the HDF file ** *DFnumber -- count the number of occurrences of a given tag in HDF file ** *DFsetfind -- set up a search ** *DFfind -- search for tag/ref combination ** DFaccess -- set up a read/write on a data element ** DFstart -- set up a read/write on a data element ** DFread -- read a portion of a data element ** DFseek -- seek a new position within a data element ** DFwrite -- write a portion of a data element ** DFupdate -- write out updated DDs to HDF file ** *DFstat -- provide status information about HDF file ** *DFgetelement -- read an entire data element ** *DFputelement -- write an entire data element ** *DFdup -- create an additional descriptor for a data element ** *DFdel -- delete a data element ** *DFnewref -- get an unused reference number ** *DFishdf -- is this an HDF file? ** *DFerrno -- return value of DFerror ** AUTHOR ** Doug Ilg */ #include "hdf_priv.h" #include "df.h" #define DFACC_APPEND 8 #define DFEL_ABSENT 0 #define DFEL_RESIDENT 1 #define DFSRCH_OLD 0 #define DFSRCH_NEW 1 /* * Important Internal Variables */ static DF *DFlist = NULL; /* pointer to list of open DFs */ static int32 DFid = 0; static int32 DFaid = 0; static int DFaccmode = 0; static int DFelaccmode = 0; static uint16 search_tag = 0; static uint16 search_ref = 0; static int search_stat = DFSRCH_NEW; static int32 search_aid = 0; static int DFelstat = DFEL_ABSENT; static int32 DFelsize = 0; static int32 DFelseekpos = 0; static uint16 acc_tag = 0; static uint16 acc_ref = 0; static char *DFelement = NULL; int DFerror = 0; /* Error code for DF routines */ /* prototypes for internal routines */ static int DFIclearacc(void); static int DFIcheck(DF *dfile); /* ** NAME ** DFopen -- open HDF file ** USAGE ** DF *DFopen(name, acc_mode, ndds) ** char* name; IN: name of file to open ** int acc_mode; IN: DFACC_READ, DFACC_WRITE, DFACC_CREATE, ** DFACC_ALL ** int ndds; IN: number of DDs in a block ** RETURNS ** DF ptr to open file on success, NULL on failure with DFerror set ** DESCRIPTION ** Open an HDF file, if it exists. If file does not exist and write ** access requested, create file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** The pointer returned by DFopen is NOT a reference to a DF. It is ** just a place keeper for the new type of file handle. Any program that ** relies on the contents of a DF returned by DFopen must be re-written. ** EXAMPLES ** REVISION LOG */ DF * DFopen(char *name, int acc_mode, int ndds) { if (DFIcheck(DFlist) == 0) { DFerror = DFE_TOOMANY; return NULL; } else DFerror = DFE_NONE; DFaccmode = acc_mode | DFACC_READ; DFid = Hopen(name, DFaccmode, (int16)ndds); if (DFid == -1) { DFerror = (int)HEvalue(1); return NULL; } else { /* DFlist = makedf(DFid); */ DFlist = (DF *)&DFid; return DFlist; } } /* ** NAME ** DFclose -- close HDF file ** USAGE ** int DFclose(dfile) ** DF *dfile; IN: pointer to an open DF file ** RETURNS ** 0 on success, -1 on failure with DFerror set ** DESCRIPTION ** Write out updated DDs; close DF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFclose(DF *dfile) { int ret; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return FAIL; } else DFerror = DFE_NONE; if (DFelstat == DFEL_RESIDENT) { Hputelement(DFid, acc_tag, acc_ref, (unsigned char *)DFelement, DFelsize); free(DFelement); } else Hendaccess(DFaid); if (search_stat == DFSRCH_OLD) { Hendaccess(search_aid); search_aid = 0; } ret = Hclose(DFid); if (ret == 0) { dfile = 0; DFlist = (DF *)NULL; DFid = 0; DFaccmode = 0; } else { DFerror = (int)HEvalue(1); } return ret; } /* ** NAME ** DFdescriptors -- return a list of the data descriptors in the file ** USAGE ** int DFdescriptors(dfile, ptr, begin, num) ** DF *dfile; IN: pointer to an open DF file ** DFdesc ptr[]; IN: pointer to space for the list of DDs ** int begin; IN: starting DD number ** int num; IN: number of entries ** RETURNS ** number of DDs returned in the list ** DESCRIPTION ** Fills in a list of all DDs in the file beginning with DD begin and ** including a maximum of num entries. The number of DDs actually entered ** into the list is returned. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFdescriptors(DF *dfile, DFdesc ptr[], int begin, int num) { int i, ret; int32 aid; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; aid = Hstartread(DFid, DFTAG_WILDCARD, DFREF_WILDCARD); if (aid == FAIL) { DFerror = (int)HEvalue(1); return -1; } for (i = 2; i <= begin; i++) { ret = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); if (ret == FAIL) { Hendaccess(aid); DFerror = (int)HEvalue(1); return -1; } } Hinquire(aid, NULL, &ptr[0].tag, &ptr[0].ref, &ptr[0].length, &ptr[0].offset, NULL, NULL, NULL); for (i = 1; i < num; i++) { ret = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); if (ret == FAIL) { Hendaccess(aid); return i; } Hinquire(aid, NULL, &ptr[i].tag, &ptr[i].ref, &ptr[i].length, &ptr[i].offset, NULL, NULL, NULL); } Hendaccess(aid); return i; } /* ** NAME ** DFnumber -- return number of occurrences of given tag in the HDF file ** USAGE ** DFnumber(dfile, tag) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag to count occurrences of ** RETURNS ** Number of occurrences on success, -1 on failure with DFerror set. ** DESCRIPTION ** Returns the number of occurrences of the specified tag in the HDF file. ** If tag is DFTAG_WILDCARD, all tags are counted. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFnumber(DF *dfile, uint16 tag) { int num; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; num = Hnumber(DFid, tag); return num; } /* ** NAME ** DFsetfind -- set up parameters for a wildcard find ** USAGE ** int DFsetfind(dfile, tag, ref) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of element to search for (0 is wild) ** uint16 ref; IN: ref of element to search for (0 is wild) ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Sets up parameters for a wildcard find on a tag/ref pair. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFsetfind(DF *dfile, uint16 tag, uint16 ref) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; search_tag = tag; search_ref = ref; search_stat = DFSRCH_NEW; return 0; } /* ** NAME ** DFfind -- perform wildcard searches ** USAGE ** int DFfind(dfile, ptr) ** DF *dfile; IN: pointer to an open DF file ** DFdesc *ptr; IN: pointer to put in DD when found ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** If desired tag/ref is found, its DD is copied to *ptr. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFfind(DF *dfile, DFdesc *ptr) { int ret; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; if (search_stat == DFSRCH_NEW) { search_aid = Hstartread(DFid, search_tag, search_ref); search_stat = DFSRCH_OLD; ret = 0; } else { ret = Hnextread(search_aid, search_tag, search_ref, DF_CURRENT); } if ((search_aid == FAIL) || (ret == FAIL)) { DFerror = DFE_NOMATCH; ptr->tag = 0; ptr->ref = 0; return -1; } Hinquire(search_aid, NULL, &ptr->tag, &ptr->ref, &ptr->length, &ptr->offset, NULL, NULL, NULL); return 0; } /* ** NAME ** DFaccess -- set up a read/write on a data element ** USAGE ** int DFaccess(dfile, tag, ref, acc_mode) ** DF *dfile; IN: pointer to open HDF file ** uint16 tag; IN: tag of element ** uint16 ref; IN: ref number of element ** char *acc_mode; IN: "r", "w", or "a" (read, write, append) ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Set up read or write access on data element. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This function needs to call DFupdate and Hendaccess if there is already ** an active access element with a different tag/ref. ** Also, set up globals "acc_tag" and "acc_ref" to keep tabs on the data ** being referenced, and "in_mem" to keep track of whether the data for ** an element to be appended to has been read into memory. ** EXAMPLES ** REVISION LOG */ int DFaccess(DF *dfile, uint16 tag, uint16 ref, char *acc_mode) { int accmode; /* DFdle *ptr; int dle_num, index, i; */ if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; switch (*acc_mode) { case 'r': accmode = DFACC_READ; break; case 'w': accmode = DFACC_WRITE; if (((DFaccmode & DFACC_WRITE) == 0) && ((DFaccmode & DFACC_CREATE) == 0)) { DFerror = DFE_BADACC; return -1; } break; case 'a': accmode = DFACC_APPEND; if (((DFaccmode & DFACC_WRITE) == 0) && ((DFaccmode & DFACC_CREATE) == 0)) { DFerror = DFE_BADACC; return -1; } break; default: DFerror = DFE_BADACC; return -1; } acc_tag = tag; acc_ref = ref; DFelaccmode = accmode; DFelstat = DFEL_ABSENT; DFelseekpos = 0; DFelsize = 0; switch (*acc_mode) { case 'r': DFelsize = Hlength(DFid, acc_tag, acc_ref); if (DFelsize <= 0) { DFIclearacc(); DFerror = (int)HEvalue(1); return -1; } break; /* _maybe_ treat 'w' and 'a' in the same general 'a'-way */ case 'w': DFelsize = Hlength(DFid, acc_tag, acc_ref); if (DFelsize == FAIL) { DFelsize = 0; } else DFelstat = DFEL_RESIDENT; break; case 'a': DFelsize = Hlength(DFid, acc_tag, acc_ref); if (DFelsize == FAIL) { DFIclearacc(); DFerror = (int)HEvalue(1); return -1; } DFelseekpos = DFelsize; break; } return 0; } static int DFIclearacc(void) { Hendaccess(DFaid); DFaid = 0; acc_tag = 0; acc_ref = 0; DFelsize = 0; DFelseekpos = 0; DFelstat = DFEL_ABSENT; DFelement = NULL; return 0; } /* ** NAME ** DFstart -- set up a read/write on an access element ** USAGE ** int DFstart(dfile, tag, ref, acc_mode) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of element ** uint16 ref; IN: ref number of element ** char *acc_mode; IN: "r", "w", ro "a" (read, write, append) ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Set up a read or write access on data element. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFstart(DF *dfile, uint16 tag, uint16 ref, char *acc_mode) { return DFaccess(dfile, tag, ref, acc_mode); } /* ** NAME ** DFread -- read a portion of a data element ** USAGE ** int32 DFread(dfile, ptr, len) ** DF *dfile; IN: pointer to open DF file ** char *ptr; IN: pointer to space to read data into ** int32 len; IN: number of bytes to read ** RETURNS ** number of bytes read on success, -1 on failure ** DESCRIPTION ** Read bytes from a DF file (part of element specified by DFaccess) ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** Space for data is assumed to be pre-allocated. ** EXAMPLES ** REVISION LOG */ int32 DFread(DF *dfile, char *ptr, int32 len) { int32 ret; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; DFaid = Hstartread(DFid, acc_tag, acc_ref); ret = Hseek(DFaid, DFelseekpos, 0); if (ret == FAIL) { Hendaccess(DFaid); DFerror = (int)HEvalue(1); return -1; } ret = Hread(DFaid, len, (unsigned char *)ptr); Hendaccess(DFaid); if (ret == FAIL) { DFerror = (int)HEvalue(1); return -1; } else { DFelseekpos += ret; return ret; } } /* ** NAME ** DFseek -- seek a new position within a data element ** USAGE ** int32 DFseek(dfile, offset) ** DF *dfile; IN: pointer to open DF file ** int32 offset; IN: offset from beginning of element ** RETURNS ** offset of actual position seek'ed to from beginning of element ** DESCRIPTION ** Seek position within element specified by DFaccess. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int32 DFseek(DF *dfile, int32 offset) { int ret; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; /* assuming no blank space can be forced by seeking past end of element and writing more data */ if (offset > DFelsize) { DFerror = DFE_BADSEEK; return -1; } else { ret = Hseek(DFaid, offset, DF_START); if (ret == FAIL) { DFerror = (int)HEvalue(1); return -1; } DFelseekpos = offset; } return 0; } /* ** NAME ** DFwrite -- write a portion of a data element ** USAGE ** int32 DFwrite(dfile, ptr, len) ** DF *dfile; IN: pointer to open DF file ** char *ptr; IN: pointer to data to be written ** int32 len; IN: number of bytes to be written ** RETURNS ** number of bytes written on success, -1 on failure ** DESCRIPTION ** Write bytes to DF file (part of element specified by DFaccess) ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This function should check the access mode in DFaccmode. On write ** access, if(!in_mem) Hstartwrite, Hwrite, and set in_mem, otherwise just ** Hwrite. On append access, if(!in_mem) Hstartread, Hinquire(oldsize), ** malloc(oldsize+writesize), Hread to malloc'd area, copy write request ** to end of malloc'd area, set in_mem, otherwise, realloc(area+writesize) ** copy write request to end of area. ** EXAMPLES ** REVISION LOG */ int32 DFwrite(DF *dfile, char *ptr, int32 len) { int32 size, ret, newlen; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } if ((DFelaccmode != DFACC_WRITE) && (DFelaccmode != DFACC_APPEND)) { DFerror = DFE_BADACC; return -1; } else DFerror = DFE_NONE; size = DFelseekpos + len; if (DFelaccmode == DFACC_WRITE) { if (DFelstat == DFEL_ABSENT) { Hendaccess(DFaid); DFaid = Hstartwrite(DFid, acc_tag, acc_ref, len); Hseek(DFaid, DFelseekpos, DF_START); ret = Hwrite(DFaid, len, (unsigned char *)ptr); } else { if (size <= DFelsize) { Hendaccess(DFaid); DFaid = Hstartwrite(DFid, acc_tag, acc_ref, len); Hseek(DFaid, DFelseekpos, DF_START); ret = Hwrite(DFaid, len, (unsigned char *)ptr); } else { Hendaccess(DFaid); DFerror = DFE_NOTENOUGH; return -1; } } } else { newlen = size - Hlength(DFid, acc_tag, acc_ref); Hendaccess(DFaid); DFaid = HLcreate(DFid, acc_tag, acc_ref, newlen, (int32)4); Hseek(DFaid, DFelseekpos, DF_START); ret = Hwrite(DFaid, len, (unsigned char *)ptr); } Hendaccess(DFaid); DFelseekpos += len; DFelsize = size; DFelstat = DFEL_RESIDENT; return ret; } /* ** NAME ** DFupdate -- write out updated DDs to HDF file ** USAGE ** int DFupdate(dfile) ** DF *dfile; IN: pointer to open DF file ** RETURNS ** 0 on success, -1 on failure with DFerror set. ** DESCRIPTION ** This function only checks for valid input and returns. It is included ** solely for compatibility with older programs. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This function does nothing but check for valid input. ** However, this function should check to see if an appended-to data ** element is in memory and, if it is, write it out. ** EXAMPLES ** REVISION LOG */ int DFupdate(DF *dfile) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; return 0; } /* ** NAME ** DFstat -- provide status information about HDF file ** USAGE ** int DFstat(dfile, dfinfo) ** DF *dfile; IN: pointer to open DF file ** struct DFdata *dfinfo; IN: pointer to space for info ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Fill dfinfo with status information about the HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** Currently, only the HDF version number is returned in dfinfo. ** Actually, nothing happens here now. ** EXAMPLES ** REVISION LOG */ int DFstat(DF *dfile, DFdata *dfinfo) { (void)dfinfo; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; return 0; } /* ** NAME ** DFgetelement -- read an entire data element ** USAGE ** int32 DFgetelement(dfile, tag, ref, ptr) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of element ** uint16 ref; IN: ref number of element ** char *ptr; IN: pointer to space for data element ** RETURNS ** number of bytes read on success, -1 on failure ** DESCRIPTION ** Reads in a data element from an HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** Currently, this function returns 0 on success, not #bytes read. ** EXAMPLES ** REVISION LOG */ int32 DFgetelement(DF *dfile, uint16 tag, uint16 ref, char *ptr) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; if (Hgetelement(DFid, tag, ref, (unsigned char *)ptr) == -1) { DFerror = (int)HEvalue(1); return -1; } else return Hlength(DFid, tag, ref); } /* ** NAME ** DFputelement -- write an entire data element ** USAGE ** int DFputelement(dfile, tag, ref, ptr, len) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of data element ** uint16 ref; IN: ref number of data element ** char *ptr; IN: pointer to data element ** int32 len; IN: length of data element ** RETURNS ** Number of bytes written on success, -1 on failure ** DESCRIPTION ** Write an entire data element to HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int32 DFputelement(DF *dfile, uint16 tag, uint16 ref, char *ptr, int32 len) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; if (Hputelement(DFid, tag, ref, (unsigned char *)ptr, len) == FAIL) { DFerror = (int)HEvalue(1); return -1; } else return Hlength(DFid, tag, ref); } /* ** NAME ** DFdup -- create an additional descriptor for a data element ** USAGE ** int DFdup(dfile, itag, iref, otag, oref) ** DF *dfile; IN: pointer to open DF file ** uint16 itag; IN: new tag of data element ** uint16 iref; IN: new ref number of data element ** uint16 otag; IN: current tag of data element ** uint16 oref; IN: current ref number of data element ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Add a new tag/ref for existing data. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFdup(DF *dfile, uint16 itag, uint16 iref, uint16 otag, uint16 oref) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; if (Hdupdd(DFid, itag, iref, otag, oref) != SUCCEED) { DFerror = (int)HEvalue(1); return -1; } else return 0; } /* ** NAME ** DFdel -- delete a data element ** USAGE ** int DFdel(dfile, tag, ref) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of element ** uint16 ref; IN: ref number of element ** RETURNS ** 0 on success, -1 on failure ** DESCRIPTION ** Delete a data element from HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** The data element is not actually deleted; it simply loses its DD. ** EXAMPLES ** REVISION LOG */ int DFdel(DF *dfile, uint16 tag, uint16 ref) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return -1; } else DFerror = DFE_NONE; if (Hdeldd(DFid, tag, ref) != 0) { DFerror = (int)HEvalue(1); return -1; } else return 0; } /* ** NAME ** DFnewref -- get an unused reference number ** USAGE ** uint16 DFnewref(dfile) ** DF *dfile; IN: pointer to open DF file ** RETURNS ** unused reference number, or 0 if no reference numbers are free ** DESCRIPTION ** Get an unused reference number. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ uint16 DFnewref(DF *dfile) { uint16 ret; if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return 0; } else DFerror = DFE_NONE; ret = Hnewref(DFid); if (ret == 0xffff) { DFerror = (int)HEvalue(1); return 0; } return ret; } /* ** NAME ** DFishdf -- is this an HDF file? ** USAGE ** int DFishdf(filename) ** char *filename; IN: name of file to check ** RETURNS ** 0 if it is an HDF file, -1 if it is not. ** DESCRIPTION ** Determine whether file is an HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFishdf(char *filename) { int32 dummy; DFerror = DFE_NONE; dummy = Hopen(filename, DFACC_READ, 0); if (dummy == -1) { DFerror = (int)HEvalue(1); return -1; } else { Hclose(dummy); return 0; } } /* ** NAME ** DFerrno -- return value of DFerror ** USAGE ** int DFerrno() ** RETURNS ** Value of DFerror. ** DESCRIPTION ** Return value of DFerror. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES ** REVISION LOG */ int DFerrno(void) { return DFerror; } /*----------------------------------------------------------------------------- * Name: DFIcheck * Purpose: check if dfile argument represents a valid DF file * Inputs: dfile: pointer to open DF file * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF systems programmers, several routines in this file *---------------------------------------------------------------------------*/ static int DFIcheck(DF *dfile) { DFerror = DFE_NONE; if ((dfile != (DF *)&DFid) || (DFid == 0)) { DFerror = DFE_DFNULL; return -1; } if ((DFaccmode & DFACC_ALL) != DFaccmode) { DFerror = DFE_BADACC; return -1; } else return 0; } /*----------------------------------------------------------------------------- * Name: DFIerr * Purpose: Close a file and return on error. save DFerror * Inputs: dfile: pointer to HDF file to close * Returns: -1 * Users: HDF systems programmers, for error handling * Invokes: DFclose * Remarks: Used to centralize some error handling *---------------------------------------------------------------------------*/ int DFIerr(DF *dfile) { int saveerror; saveerror = DFerror; if (dfile != NULL) (void)DFclose(dfile); DFerror = saveerror; return -1; } /*----------------------------------------------------------------------------- * The following functions are stubs for the old routines from "dfkit.c". *---------------------------------------------------------------------------*/ void * DFIgetspace(uint32 qty) { void *ret; ret = (void *)malloc(qty); DFerror = (int)HEvalue(1); return ret; } void * DFIfreespace(void *ptr) { free(ptr); return NULL; } intn DFIc2fstr(char *str, int len) { return HDc2fstr(str, len); } char * DFIf2cstring(_fcd fdesc, intn len) { return HDf2cstring(fdesc, len); } hdf4-hdf4.3.1/hdf/src/dfufp2i.c000066400000000000000000000537001503061704500160670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*-----------------------------------------------------------------------------c * dfufp2i.c * * Purpose: Utility function to convert floating point data to 8-bit * raster image set (RIS8) format, storing the results in * an hdf file. * ----------- * | | ----------> RIS8 * floating point data ---> | fp_to_hdf | and/or * (in an array) | | ----------> SDS * ----------- * Public function: * DFUfptoimage: sets up structs with input params, calls process() * * Private functions: * process: main driver routine: transforms the data to an image and * stores it in the file * generate_scale: generates a scale, if none provided * convert_interp: creates an interpolated image * pixrep_scaled: creates an expanded image using scales provided * compute_offsets: called by pixrep_scaled * pixrep_simple: creates an expanded image assuming equal gaps in scales * * Fortran stub function: * duif2i - intermediate, called by fortran functions in DFUfptoimage.f * * Remarks: * This routine is very similar to the utility fp_to_hdf, which * takes its input from one or more files, rather than from internal * memory. * Another difference is that this routine allows compression (run * length encoding), whereas fp_to_hdf does not at present (8/31/89). * Since this routine is meant to mimic many of the features of * NCSA DataScope, much of the code has been taken directly from * the DataScope source. * * National Center for Supercomputing Applications * University of Illinois, Urbana-Champaign * * by Mike Folk (mfolk@ncsa.uiuc.edu) * Beta version: 9/1/89 * Released: 6/5/90 * * This program is in the public domain * *--------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "dfufp2i_priv.h" #include "dfsd_priv.h" /********************************************************************** * * Header information * ***********************************************************************/ /* * global definitions */ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif /* TRUE */ #define EXPAND 1 /* -e: expand image with pixel replication */ #define INTERP 2 /* -i: expand image with bilinear interpolation */ /*-----------------------------------------------------------------------------s * DFUfptoimage() * * Purpose:sets up structs with input params, calls process() * Inputs: * hdim, vdim: horizontal and vertical dimensions of input data * max, min: maximum and minimum values in the data * hscale,vscale: optional horizontal and vertical scales * data: input data * palette: optional palette to be stored with the image * outfile:n name of hdf file to store image in * ct_method: color transform method: 1=EXPAND; 2=INTERP * hres, vres: resolutions desired for output image * compress: compression flag: 0=don't; 1=do * Returns: 0 on success, -1 on failure with error set * Users: HDF HLL (high-level library) users, utilities, other routines * Invokes: process * Remarks: none *----------------------------------------------------------------------------*/ int DFUfptoimage(int32 hdim, int32 vdim, float32 max, float32 min, float32 *hscale, float32 *vscale, float32 *data, uint8 *palette, char *outfile, int ct_method, int32 hres, int32 vres, int compress) { Input in; Output out; in.hdim = hdim; in.vdim = vdim; in.max = max; in.min = min; in.is_hscale = (hscale == NULL) ? FALSE : TRUE; in.is_vscale = (vscale == NULL) ? FALSE : TRUE; in.hscale = hscale; in.vscale = vscale; in.data = data; in.is_pal = (palette == NULL) ? FALSE : TRUE; in.ct_method = ct_method; strcpy(out.outfile, outfile); /* get outfile name */ out.palette = palette; /* get palette address (may be NULL) */ out.hres = hres; out.vres = vres; out.compress = compress ? 11 : 0; /* 0=>don't; 11=>RLE compression */ /* tloc1 = time((long *) 0); */ /* these 4 lines for debugging */ process(&in, &out); /* tloc2 = time((long *) 0); */ /* printf("Time: %ld\n",tloc2-tloc1); */ return 0; } /* end of DFUfptoimage */ /*-----------------------------------------------------------------------------s * process * * Purpose: to transform the data to an image and stores it in the file * Inputs: * in: structure with information about data to be converted to image * out: structure with information about image * Returns: 0 on success, -1 on failure with error set * Users: DFUfptoimage * Invokes: from libdf.a: DFR8setpalette, Hopen, Hclose, DFR8addimage * local: generate_scale, pixrep_scaled, pixrep_simple,convert_interp * Remarks: none *----------------------------------------------------------------------------*/ int process(Input *in, Output *out) { int ret; int32 file_id; /* printinput(in); */ /* for debugging */ if (in->is_pal) { ret = DFR8setpalette((uint8 *)out->palette); /* output as HDF palette */ if (ret < 0) return ret; } file_id = Hopen(out->outfile, DFACC_WRITE, 0); Hclose(file_id); /* * allocate buffers for output and scales */ if (!in->is_hscale) in->hscale = (float32 *)malloc((uint32)(1 + in->hdim) * sizeof(float32)); if (!in->is_vscale) in->vscale = (float32 *)malloc((uint32)(1 + in->vdim) * sizeof(float32)); out->hres = (out->hres <= in->hdim) ? in->hdim : out->hres; out->vres = (out->vres <= in->vdim) ? in->vdim : out->vres; out->image = (uint8 *)malloc((size_t)out->hres * (size_t)out->vres); /* * if necessary, generate x and y scales */ if (!in->is_hscale) generate_scale(in->hdim, in->hscale); if (!in->is_vscale) generate_scale(in->vdim, in->vscale); /* * output raster hdf file */ if (in->ct_method == EXPAND) { if (in->is_hscale || in->is_vscale) pixrep_scaled(in, out); else pixrep_simple(in, out); } else convert_interp(in, out); /* printoutput(out); */ /* for debugging */ ret = DFR8addimage(out->outfile, (char *)out->image, out->hres, out->vres, (uint16)out->compress); if (ret < 0) return ret; /* * free allocated space */ free(in->hscale); free(in->vscale); free(out->image); return 0; } /* end of process */ /*----------------------------------------------------------------------------- * generate_scale * * Purpose: to generate the scale 1 2 3 ... dim * Input: * dim: length of scale * Output: * scale: array of floating point numbers from 1 to dim * Returns: 0 on success, -1 on failure with error set * Users: process * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ int generate_scale(int32 dim, float32 *scale) { int32 i; for (i = 0; i <= dim; i++) *scale++ = (float32)i; return 0; } /*----------------------------------------------------------------------------- * printinput * * Purpose: debugging: prints input values to stdout * Input: * in: struct with all input values * Returns: 0 on success, -1 on failure with error set * Users: process and other local routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ /* This function is commented out of the code!! */ #ifdef DEBUG_HDF int printinput(Input *in) { int i, j; printf("\nmax: %8.2f min: %8.2f\n", in->max, in->min); printf("There %s a palette\n", in->is_pal ? "IS" : "is NOT"); printf("color transform method = %s\n", (in->ct_method == EXPAND) ? "expand" : "interpolate"); if (in->hscale != NULL) { printf("\nHorizontal scale:\n"); for (i = 0; i < (int)(in->hdim); i++) printf("%8.2f", in->hscale[i]); } else printf("\nNo horizontal scale\n"); if (in->vscale != NULL) { printf("\nVertical scale:\n"); for (i = 0; i < (int)(in->vdim); i++) printf("%8.2f", in->vscale[i]); } else printf("\nNo vertical scale.\n"); printf("\n"); printf("Data:"); for (i = 0; i < (int)(in->vdim) && i < 11; i++) { printf("\n"); for (j = 0; j < (int)(in->hdim); j++) printf("%6.1f ", in->data[i * in->hdim + j]); } printf("\n"); return 0; } /* end of print_input */ #endif /* DEBUG_HDF */ /*----------------------------------------------------------------------------- * printoutput * * Purpose: debugging: prints input values to stdout * Input: * out: struct with all output values * Returns: 0 on success, -1 on failure with error set * Users: process and other local routines * Invokes: none * Remarks: none *---------------------------------------------------------------------------*/ /* This function is commented out of the code!! */ #ifdef DEBUG_HDF int printoutput(Output *out) { int i, j; printf("\n"); for (i = 0; i < (int)(out->vres) && i < 20; i++) { printf("\n"); for (j = 0; j < (int)(out->hres); j++) if (j < 19) printf("%4d", (uint8)out->image[i * out->hres + j]); } printf("\n"); return 0; } /* end of printoutput */ #endif /* DEBUG_HDF */ /*************************************************************************** * * Next comes the routine for performing bilinear interpolation * ****************************************************************************/ /*----------------------------------------------------------------------------- * convert_interp * * Purpose: Create an interpolated image from the data array * Input: * in: struct with all input values * out: struct with all output values * Returns: 0 on success, -1 on failure with error set * Users: process * Invokes: none * Remarks: Uses a bilinear interpolation method to fill in the picture. *---------------------------------------------------------------------------*/ int convert_interp(Input *in, Output *out) { int j, theval; float32 *f, *dxs, *dys, *xv, *yv, *lim, delx, dely, pt, xrange, yrange, range, zy, *z1, *z2, *z3, *z4, z; uint8 *p; uint8 *xinc; int32 i, *yoffs; p = (uint8 *)out->image; /* space for interpolated image */ range = in->max - in->min; xrange = *(in->hscale + in->hdim - 1) - *in->hscale; yrange = *(in->vscale + in->vdim - 1) - *in->vscale; delx = xrange / (float32)out->hres; /* x axis increment in image */ dely = yrange / (float32)out->vres; /* y axis increment in image */ dxs = (float32 *)malloc(sizeof(float32) * (size_t)out->hres); /* temp space for dx's */ dys = (float32 *)malloc(sizeof(float32) * (size_t)out->vres); /* temp space for dy's */ xinc = (uint8 *)malloc((size_t)out->hres); yoffs = (int32 *)malloc((size_t)(out->vres + 1) * sizeof(int32)); yoffs[0] = 0; if (range < (float32)0.0) range = -range; /* max must be > min */ f = dys; /* beginning of dys to fill in */ yv = in->vscale; /* beginning and end of yvals */ lim = in->vscale + in->vdim - 2; if (yrange > (float32)0.0) { for (i = 0; i < out->vres; i++) { /* fill in dy's */ pt = dely * (float32)i + *in->vscale; /* scaled pos in new image */ while (*(yv + 1) < pt && yv < lim) { /* move y pointer */ yv++; yoffs[i]++; } *f++ = (*(yv + 1) - pt) / (*(yv + 1) - *yv); /* calc dy pcnt and put in */ yoffs[i + 1] = yoffs[i]; } } else { /* decrementing instead */ yrange = -yrange; for (i = 0; i < out->vres; i++) { /* fill in dy's */ pt = dely * (float32)i + *in->vscale; while (*(yv + 1) > pt && yv < lim) { /* move y pointer */ yv++; yoffs[i]++; } *f++ = -(*(yv + 1) - pt) / (*(yv + 1) - *yv); /* calc dy pcnt and put in */ yoffs[i + 1] = yoffs[i]; } } f = dxs; /* beginning of dxs to fill in */ xv = in->hscale; /* beginning and end of xvals */ lim = in->hscale + in->hdim - 2; if (xrange > (float32)0.0) { for (i = 0; i < out->hres; i++) { /* fill in dx's */ pt = delx * (float32)i + *in->hscale; xinc[i] = 0; while (*(xv + 1) < pt && xv < lim) { /* move xv pointer */ xv++; xinc[i]++; } *f++ = (*(xv + 1) - pt) / (*(xv + 1) - *xv); /* calc dy prct and put in */ } } else { /* decrementing instead */ xrange = -xrange; for (i = 0; i < out->hres; i++) { /* fill in dx's */ pt = delx * (float32)i + *in->hscale; xinc[i] = 0; while (*(xv + 1) > pt && xv < lim) { /* move y pointer */ xv++; xinc[i]++; } *f++ = -(*(xv + 1) - pt) / (*(xv + 1) - *xv); /* calc dy pcnt and put in */ } } /* * Do the interpolation for each point in the target image. * We take advantage of the fact that we know the target is evenly spaced * along both axes. */ yv = dys; for (i = 0; i < out->vres; i++, yv++) { z1 = in->data + in->hdim * (yoffs[i]); z2 = z1 + 1; z3 = z1 + in->hdim; z4 = z3 + 1; xv = dxs; zy = *yv; for (j = 0; j < (int)(out->hres); j++, xv++) { /* for each target point */ z1 += (size_t)xinc[j]; /* xinc == 0 when we don't need to shift */ z2 += (size_t)xinc[j]; z3 += (size_t)xinc[j]; z4 += (size_t)xinc[j]; z = (*z1 - *z3 - *z2 + *z4) * (*xv) * zy + /* weighted sum */ (*z3 - *z4) * (*xv) + (*z2 - *z4) * zy + *z4; theval = (int)((float32)1.0 + (float32)237.9 * (z - in->min) / range); /* scaled value */ if (theval >= 240 || theval < 1) *p++ = 0; else *p++ = (uint8)theval; } } free(dxs); free(dys); free(xinc); free(yoffs); return 0; } /* end of convert_interp */ /**************************************************************************** * * Next come the routines for pixel replication * * * Two routines to create expanded image via pixel replication * * pixrep_scaled replicates pixels according to given scales * pixrep_simple replicates the same number of pixels for each point * ******************************************************************************/ /*----------------------------------------------------------------------------- * pixrep_scaled * * Purpose: Create an expanded image from the data array * Input: * in: struct with all input values * out: struct with all output values * Returns: 0 on success, -1 on failure with error set * Users: process * Invokes: compute_offsets * Remarks: Uses pixel replication to fill in the picture. Replicates * pixels according to in->vscale and in->hscale *---------------------------------------------------------------------------*/ int pixrep_scaled(Input *in, Output *out) { int32 j; float *data, range, ratio; uint8 *image, *prevrow; uint8 *pixvals; int32 i, theval, *hoffsets, *voffsets, prevoffset; data = in->data; /* space for data */ image = (uint8 *)out->image; /* space for image */ range = in->max - in->min; if (range < (float32)0.0) range = -range; /* max must be > min */ hoffsets = (int32 *)malloc((uint32)(out->hres + 1) * sizeof(int32)); voffsets = (int32 *)malloc((uint32)(out->vres + 1) * sizeof(int32)); pixvals = (uint8 *)malloc((uint32)in->hdim + 1); compute_offsets(in->hscale, in->hdim, hoffsets, out->hres); compute_offsets(in->vscale, in->vdim, voffsets, out->vres); prevoffset = voffsets[0] - 1; ratio = (float32)237.9 / range; for (i = 0; i < out->vres; i++) { /* for each row, store pixel vals */ if (voffsets[i] > prevoffset) { /* if new data row, compute pix vals */ for (j = 0; j < in->hdim; j++) { /* compute vals for each data point */ theval = (int)((float32)1.5 + ratio * (*data++ - in->min)); if (theval >= 240 || theval < 1) theval = 0; pixvals[j] = (uint8)theval; } for (j = 0; j < out->hres; j++) /* put row of pix vals into */ *image++ = pixvals[hoffsets[j]]; /* next row of image */ } else { /* else repeating a previous row */ prevrow = image - out->hres; for (j = 0; j < out->hres; j++) /* put previous row of pix vals */ *image++ = *prevrow++; /* into next row of image */ } prevoffset = voffsets[i]; } free(hoffsets); free(voffsets); free(pixvals); return 0; } /* end of pixrep_scaled */ /*----------------------------------------------------------------------------- * compute_offsets * * Purpose: For each pixel position on the horizontal or vertical * dimension, compute the offset of the corresponding value * in the scale array. * Input: * scale: the scale * dim: length of scale * res: resolution: length of the array 'offsets' * Output: * offsets: the set of offsets that were computed * out: struct with all output values * Returns: 0 on success, -1 on failure with error set * Users: pixrep_scaled * Invokes: compute_offsets * Remarks: The array 'offsets' can be used to determine which scaled * pixel value to place in the final picture. *---------------------------------------------------------------------------*/ int compute_offsets(float32 *scale, int32 dim, int32 *offsets, int32 res) { int32 i, j; float32 *midpt, pt, delta; midpt = (float32 *)malloc(sizeof(float32) * (size_t)dim); for (i = 0; i < dim - 1; i++) { /* compute all midpoints */ midpt[i] = (scale[i] + scale[i + 1]) / (float32)2.0; /* printf("midpt[%d]=%8.1f\tscale[%d]=%8.1f\n",i,midpt[i],i,scale[i]); */ } midpt[i] = scale[i] + scale[i] - midpt[i - 1]; /* tack one onto end */ delta = (*(scale + dim - 1) - *scale) / (float32)(res - 1); /* amt of change along scale */ /* per pixel position */ offsets[0] = 0; pt = *scale; /* base point has value of 1st scale item */ for (i = 1, j = 0; i < res; i++) { /* compute & store offsets of pix vals */ pt += delta; offsets[i] = offsets[i - 1]; /* keep offsets same until past midpt */ while (pt >= midpt[j]) { offsets[i]++; j++; } } free(midpt); return 0; } /* end of compute_offsets */ /*----------------------------------------------------------------------------- * pixrep_simple * * Purpose: Create an expanded image from the data array * Input: * in: struct with all input values * out: struct with all output values * Returns: 0 on success, -1 on failure with error set * Users: process * Invokes: compute_offsets * Remarks: Uses pixel replication to fill in the picture. Replicates * the same number of pixels for each point *---------------------------------------------------------------------------*/ int pixrep_simple(Input *in, Output *out) { int32 i, j; uint8 raster_val; uint8 *image, *row_buf; float32 *in_row_ptr, *in_buf; float32 ratio, delh, delv, hblockend, vblockend; ratio = (float32)237.9 / (in->max - in->min); image = (uint8 *)out->image; in_buf = in->data; delh = ((float32)out->hres) / (float32)in->hdim; /* horiz block size */ delv = ((float32)out->vres) / (float32)in->vdim; /* vert block size */ /* * Compute expanded image * Do it a vertical block at a time * (Note the trick with the counters i and j vis-a-vis the blockends.) */ vblockend = delv; for (i = 0; i < out->vres; i++, vblockend += delv) { in_row_ptr = in_buf; row_buf = image; /* start of next NEW row of output */ /* compute raster values for this row */ hblockend = delh; for (j = 0; j < out->hres; j++, hblockend += delh) { raster_val = (uint8)((float32)1.5 + ratio * (float32)(*in_row_ptr++ - in->min)); *image++ = raster_val; for (; j < (int32)hblockend - 1; j++) /* store vals for this blk of this row */ *image++ = raster_val; } /* repeat same row for whole vertical block */ for (; i < (int32)vblockend - 1; i++) for (j = 0; j < out->hres; j++) *image++ = row_buf[j]; in_buf += in->hdim; /* move to next row in input array */ } return 0; } /* end of pixrep_simple() */ hdf4-hdf4.3.1/hdf/src/dfufp2i_priv.h000066400000000000000000000056571503061704500171440ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_DFUFP2I_PRIV_H #define H4_DFUFP2I_PRIV_H #include "hdf_priv.h" /* Input structure */ typedef struct { int32 hdim; /* horizontal dimension of input data */ int32 vdim; /* vertical dimension of input data */ intn is_pal; /* flag to tell whether there is a palette */ intn is_vscale; /* flag telling whether vertical scale included */ intn is_hscale; /* flag telling whether horizonatal scale included */ intn ct_method; /* color transform method: EXPAND or INTERP */ float32 max; /* max value of data */ float32 min; /* min value of the data */ float32 *hscale; /* horizontal scale */ float32 *vscale; /* vertical scale */ float32 *data; /* floating point data */ } Input; /* Output structure */ typedef struct { int32 hres; /* horizontal resolution of image */ int32 vres; /* vertical resolution of image */ intn compress; /* compression scheme */ char outfile[32]; /* output file name */ uint8 *image; /* Image */ uint8 *palette; /* Palette */ } Output; /*----------------------------------------------------------------------------*/ /* Function Prototypes */ #ifdef __cplusplus extern "C" { #endif /* prototypes for dfufp2i.c */ HDFLIBAPI int process(Input *in, Output *out); HDFLIBAPI int generate_scale(int32 dim, float32 *scale); HDFLIBAPI int convert_interp(Input *in, Output *out); HDFLIBAPI int pixrep_scaled(Input *in, Output *out); HDFLIBAPI int compute_offsets(float32 *scale, int32 dim, int32 *offsets, int32 res); HDFLIBAPI int pixrep_simple(Input *in, Output *out); HDFLIBAPI int DFUfptoimage(int32 hdim, int32 vdim, float32 max, float32 min, float32 *hscale, float32 *vscale, float32 *data, uint8 *palette, char *outfile, int ct_method, int32 hres, int32 vres, int compress); #ifdef __cplusplus } #endif #endif /* H4_DFUFP2I_PRIV_H */ hdf4-hdf4.3.1/hdf/src/dfufp2if.c000066400000000000000000000035751503061704500162420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf_priv.h" #include "dfufp2i_priv.h" #include "dfsd_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: duif2i * Purpose: Intermediate Fortran callable version of DFUfptoimage * (See DFUfptoimage for details) * * Invokes: DFUfptoimage *---------------------------------------------------------------------------*/ int nduif2i(int32 *hdim, int32 *vdim, float32 *max, float32 *min, float32 hscale[], float32 vscale[], float32 data[], _fcd palette, _fcd outfile, int *ct_method, int32 *hres, int32 *vres, int *compress, int *lenfn) { char *fn; int ret; fn = HDf2cstring(outfile, *lenfn); if (!fn) return FAIL; ret = DFUfptoimage(*hdim, *vdim, (float32)*max, (float32)*min, hscale, vscale, data, (uint8 *)_fcdtocp(palette), fn, *ct_method, *hres, *vres, *compress); free(fn); return ret; } hdf4-hdf4.3.1/hdf/src/dfufp2iff.f000066400000000000000000000101541503061704500164020ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: DFUfptoimFf.f C Purpose: Fortran stub for DFUfptoimage() C Invokes: DFUfptoimage.c C Contents: C duf2im: call duif2i_ to invoke DFUfptoimage() C dfufptoimage: call duif2i_ to invoke DFUfptoimage() C ----------------------------------------------------------------------------- C------------------------------------------------------------------------------ C Name: duf2im C Purpose: call duif2i_ to invoke DFUfptoimage() C Inputs: C hdim, vdim: horizontal and vertical dimensions of input data C max, min: maximum and minimum values in the data C hscale,vscale: optional horizontal and vertical scales C data: input data C palette: optional palette to be stored with the image C outfile:n name of hdf file to store image in C ctmethod: color transform method: 1=EXPAND; 2=INTERP C hres, vres: resolutions desired for output image C compress: compression flag: 0=don't; 1=do C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: process C Remarks: none C---------------------------------------------------------------------------- integer function duf2im(hdim,vdim,max,min,hscale,vscale,data, * palette,outfile,ctmethod,hres,vres,compress) integer hdim, vdim real max, min, hscale, vscale, data character*(*) palette character*(*) outfile integer ctmethod, hres, vres, compress, duif2i duf2im = duif2i(hdim,vdim,max,min,hscale,vscale,data,palette, * outfile,ctmethod,hres,vres,compress, len(outfile)) return end CEND7MAX C------------------------------------------------------------------------------ C Name: dfufptoimage C Purpose: call duif2i_ to invoke DFUfptoimage() C Inputs: C hdim, vdim: horizontal and vertical dimensions of input data C max, min: maximum and minimum values in the data C hscale,vscale: optional horizontal and vertical scales C data: input data C palette: optional palette to be stored with the image C outfile:n name of hdf file to store image in C ctmethod: color transform method: 1=EXPAND; 2=INTERP C hres, vres: resolutions desired for output image C compress: compression flag: 0=don't; 1=do C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF HLL (high-level library) users, utilities, other routines C Invokes: process C Remarks: none C---------------------------------------------------------------------------- integer function dfufptoimage(hdim,vdim,max,min,hscale,vscale, * data, palette,outfile,ctmethod,hres,vres,compress) integer hdim, vdim real max, min, hscale, vscale, data character*(*) palette character*(*) outfile integer ctmethod, hres, vres, compress, duif2i dfufptoimage = * duif2i(hdim,vdim,max,min,hscale,vscale,data,palette, * outfile,ctmethod,hres,vres,compress, len(outfile)) return end hdf4-hdf4.3.1/hdf/src/dfunjpeg.c000066400000000000000000000366441503061704500163420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfunjpeg.c * Purpose: JPEG image decompression algorithm * Invokes: JPEG library functions * Contents: * DFCIunjpeg: decompress image using JPEG compression * Remarks: DFCIunjpeg() decompresses JPEG encoded images using the JPEG * library functions. The dfjpeg.c file and this file (dfunjpeg.c) should * remain the only HDF files that has to know about how to use the JPEG * routines. *---------------------------------------------------------------------------*/ #include "hdf_priv.h" /* Hack to prevent libjpeg from re-defining `boolean` in a way that clashes * with windows.h. This MUST come before including jpeglib.h. */ #ifdef H4_HAVE_WIN32_API #define HAVE_BOOLEAN #endif #include "jpeglib.h" #include "jerror.h" #include "setjmp.h" /* Expanded data destination object for HDF input */ typedef struct { struct jpeg_source_mgr pub; /* public fields */ int32 aid; /* target AID for input */ int32 file_id; /* HDF file ID */ uint16 tag, ref; /* tag & ref of image to input */ /* HDF backward compatibility flags */ intn old_jpeg_image; /* whether the image is an JPEG4-style HDF image */ intn old_header_read; /* if the header has been read from the old image */ JOCTET *buffer; /* buffer for JPEG library to fill */ } hdf_source_mgr; typedef hdf_source_mgr *hdf_src_ptr; /* JPEG error handling */ struct hdf_error_mgr { struct jpeg_error_mgr pub; /* public fields */ jmp_buf setjmp_buffer; /* for returning to caller */ }; typedef struct hdf_error_mgr *hdf_error_ptr; #define INPUT_BUF_SIZE 4096 /* size of JPEG input buffer */ /* Prototypes */ extern void hdf_init_source(struct jpeg_decompress_struct *cinfo_ptr); extern boolean hdf_fill_input_buffer(struct jpeg_decompress_struct *cinfo_ptr); extern void hdf_skip_input_data(struct jpeg_decompress_struct *cinfo_ptr, long num_bytes); extern void hdf_term_source(struct jpeg_decompress_struct *cinfo_ptr); extern intn jpeg_HDF_src(struct jpeg_decompress_struct *cinfo_ptr, int32 file_id, uint16 tag, uint16 ref, void *image, int32 xdim, int32 ydim, int16 scheme); extern intn jpeg_HDF_src_term(struct jpeg_decompress_struct *cinfo_ptr); void hdf_error_exit(j_common_ptr cinfo); /*----------------------------------------------------------------------------- * Name: hdf_error_exit * Purpose: Replace the standard error_exit method * Inputs: * cinfo - JPEG decompression part structure ptr * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Initializes the JPEG source mgr for further output. *---------------------------------------------------------------------------*/ void hdf_error_exit(j_common_ptr cinfo) { /* cinfo->err points to an hdf_error_mgr struct */ hdf_error_ptr hdferr = (hdf_error_ptr)cinfo->err; /* Display the message */ (*cinfo->err->output_message)(cinfo); /* Return control to the setjmp point */ longjmp(hdferr->setjmp_buffer, 1); } /*----------------------------------------------------------------------------- * Name: hdf_init_source * Purpose: Initialize the source mgr for the JPEG image * Inputs: * cinfo_ptr - JPEG decompression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Initializes the JPEG source mgr for further output. *---------------------------------------------------------------------------*/ void hdf_init_source(struct jpeg_decompress_struct *cinfo_ptr) { hdf_src_ptr src = (hdf_src_ptr)cinfo_ptr->src; if ((src->buffer = malloc(sizeof(JOCTET) * INPUT_BUF_SIZE)) == NULL) ERREXIT1(cinfo_ptr, JERR_OUT_OF_MEMORY, (int)1); if ((src->aid = Hstartaccess(src->file_id, src->tag, src->ref, DFACC_READ)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_WRITE); } /* end hdf_init_source() */ /*----------------------------------------------------------------------------- * Name: hdf_fill_input_buffer * Purpose: Read in a chunk of compressed data to feed to the JPEG routines * Inputs: * cinfo_ptr - JPEG decompression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Reads in a chunk of data from either an old-style JPEG image or * a new-style one. *---------------------------------------------------------------------------*/ boolean hdf_fill_input_buffer(struct jpeg_decompress_struct *cinfo_ptr) { hdf_src_ptr src = (hdf_src_ptr)cinfo_ptr->src; int32 num_read; /* number of bytes read */ if (src->old_jpeg_image == TRUE) /* reading old-style JPEG image */ { if (src->old_header_read == TRUE) /* done with header just grab data now */ { if ((num_read = Hread(src->aid, INPUT_BUF_SIZE, src->buffer)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_READ); src->pub.bytes_in_buffer = (size_t)num_read; } /* end if */ else { int32 num_read2 = 0; /* number of bytes read */ if ((num_read = Hread(src->aid, INPUT_BUF_SIZE, src->buffer)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_READ); if (num_read < INPUT_BUF_SIZE) { /* finished with header, move into the data portion of the JPEG image */ Hendaccess(src->aid); /* close the header AID */ src->old_header_read = TRUE; /* done with the header */ /* start reading the image data */ if ((src->aid = Hstartaccess(src->file_id, DFTAG_CI, src->ref, DFACC_READ)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_READ); /* finish filling the buffer */ if ((num_read2 = Hread(src->aid, (INPUT_BUF_SIZE - num_read), src->buffer + num_read)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_READ); } /* end if */ src->pub.bytes_in_buffer = (size_t)(num_read + num_read2); } /* end else */ } /* end if */ else { if ((num_read = Hread(src->aid, INPUT_BUF_SIZE, src->buffer)) == FAIL) ERREXIT(cinfo_ptr, JERR_FILE_READ); src->pub.bytes_in_buffer = (size_t)num_read; } /* end else */ /* check if we are at the end of the input stream */ if (src->pub.bytes_in_buffer == 0) { src->buffer[0] = (JOCTET)0xFF; src->buffer[1] = (JOCTET)JPEG_EOI; src->pub.bytes_in_buffer = 2; } /* end if */ src->pub.next_input_byte = src->buffer; return TRUE; } /* end hdf_fill_input_buffer() */ /*----------------------------------------------------------------------------- * Name: hdf_skip_input_data * Purpose: Skip past a chunk of compressed data * Inputs: * cinfo_ptr - JPEG decompression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Skips past a chunk of data from either an old-style JPEG image or * a new-style one. *---------------------------------------------------------------------------*/ void hdf_skip_input_data(struct jpeg_decompress_struct *cinfo_ptr, long num_bytes) { hdf_src_ptr src = (hdf_src_ptr)cinfo_ptr->src; /* Just a dumb implementation for now. Not clear that being smart * is worth any trouble anyway --- large skips are infrequent. */ if (num_bytes > 0) { while (num_bytes > (long)src->pub.bytes_in_buffer) { num_bytes -= (long)src->pub.bytes_in_buffer; (void)hdf_fill_input_buffer(cinfo_ptr); /* note we assume that fill_input_buffer will never return FALSE, * so suspension need not be handled. */ } src->pub.next_input_byte += (size_t)num_bytes; src->pub.bytes_in_buffer -= (size_t)num_bytes; } } /* end hdf_skip_input_data() */ /*----------------------------------------------------------------------------- * Name: hdf_term_source * Purpose: Terminate the source mgr for the JPEG image * Inputs: * cinfo_ptr - JPEG compression structure pointer * Returns: none. * Users: JPEG library * Invokes: HDF low-level I/O functions * Remarks: Terminate the JPEG source mgr for further input. *---------------------------------------------------------------------------*/ void hdf_term_source(struct jpeg_decompress_struct *cinfo_ptr) { hdf_src_ptr src = (hdf_src_ptr)cinfo_ptr->src; /* close the HDF object */ Hendaccess(src->aid); /* Free the input buffer */ free(src->buffer); } /* end hdf_term_source() */ /*----------------------------------------------------------------------------- * Name: jpeg_HDF_src * Purpose: Setup an HDF I/O source manager for the IJG library. * Inputs: * cinfo_ptr - JPEG decompression structure pointer * file_id - HDF file ID for file we are opening * tag - HDF tag for image we are writing * ref - HDF ref for image we are writing * image - pointer to the image data to output * xdim,ydim - X & Y dimensions of image * scheme - the type of image to output * Returns: 0 on success, -1 on failure * Users: DFCIunjpeg * Invokes: JPEG library routines (lots of them...) * Remarks: Sets up the source manager functions for the JPEG library. * These routines will be called by the JPEG routines to input *---------------------------------------------------------------------------*/ intn jpeg_HDF_src(struct jpeg_decompress_struct *cinfo_ptr, int32 file_id, uint16 tag, uint16 ref, void *image, int32 xdim, int32 ydim, int16 scheme) { hdf_src_ptr src; (void)image; (void)xdim; (void)ydim; (void)scheme; if ((src = malloc(sizeof(hdf_source_mgr))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); cinfo_ptr->src = (struct jpeg_source_mgr *)src; src->pub.init_source = hdf_init_source; src->pub.fill_input_buffer = hdf_fill_input_buffer; src->pub.skip_input_data = hdf_skip_input_data; src->pub.resync_to_restart = jpeg_resync_to_restart; /* use JPEG default */ src->pub.term_source = hdf_term_source; /* Now the HDF specific parameters */ src->aid = 0; /* start with no AID */ src->file_id = file_id; src->tag = tag; src->ref = ref; /* check for old-style HDF JPEG image */ if (scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { src->tag = (uint16)scheme; /* start reading from the JPEG header first */ src->old_jpeg_image = TRUE; /* indicate an old-style image */ src->old_header_read = FALSE; /* start with the header */ } /* end if */ else src->old_jpeg_image = FALSE; /* indicate an new-style image */ /* force fill_input_buffer until buffer loaded */ src->pub.bytes_in_buffer = 0; src->pub.next_input_byte = NULL; return SUCCEED; } /* end jpeg_HDF_src() */ /*----------------------------------------------------------------------------- * Name: jpeg_HDF_src_term * Purpose: Terminate an HDF I/O source manager for the IJG library. * Inputs: * cinfo_ptr - JPEG decompression structure pointer * Returns: 0 on success, -1 on failure * Users: DFCIunjpeg * Invokes: JPEG library routines (lots of them...) * Remarks: Terminates the source manager functions for the JPEG library. *---------------------------------------------------------------------------*/ intn jpeg_HDF_src_term(struct jpeg_decompress_struct *cinfo_ptr) { /* all we need to do for now is to free up the dest. mgr structure */ free(cinfo_ptr->src); return SUCCEED; } /* end jpeg_HDF_src_term() */ /**********************************************************************/ /* HDF callable routine for reading in an image with JPEG compression */ /**********************************************************************/ /*----------------------------------------------------------------------------- * Name: DFCIunjpeg * Purpose: decompress an image using the JPEG compression algorithm * Inputs: * Returns: 0 on success, -1 on failure * Users: HDF programmers, DFputcomp, other routines * Invokes: JPEG library routines (lots of them...) * Remarks: Uses the JPEG library routines. *---------------------------------------------------------------------------*/ intn DFCIunjpeg(int32 file_id, uint16 tag, uint16 ref, void *image, int32 xdim, int32 ydim, int16 scheme) { /* These three structs contain JPEG parameters and working data. * They must survive for the duration of parameter setup and one * call to jpeg_decompress; typically, making them local data in the * calling routine is the best strategy. */ struct jpeg_decompress_struct *cinfo_ptr; struct hdf_error_mgr jerr; JDIMENSION lines_read; JSAMPARRAY buffer; if ((cinfo_ptr = calloc(1, sizeof(struct jpeg_decompress_struct))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* Set up the normal JPEG error routines, then override error_exit */ cinfo_ptr->err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = hdf_error_exit; /* Establish the setjmp return context for hdf_error_exit to use */ if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. We need to clean up the JPEG object and return */ jpeg_destroy_decompress(cinfo_ptr); return -1; } /* Initialize the JPEG compression stuff */ jpeg_create_decompress(cinfo_ptr); /* Set-up HDF destination manager */ jpeg_HDF_src(cinfo_ptr, file_id, tag, ref, image, xdim, ydim, scheme); /* Read the JPEG header from the datastream */ jpeg_read_header(cinfo_ptr, TRUE); /* Started decompressing */ jpeg_start_decompress(cinfo_ptr); /* read the whole image in */ while (cinfo_ptr->output_scanline < cinfo_ptr->output_height) { buffer = (JSAMPARRAY)ℑ lines_read = jpeg_read_scanlines(cinfo_ptr, buffer, 1); image = (char *)image + ((size_t)cinfo_ptr->output_width * (size_t)cinfo_ptr->output_components * lines_read); } /* Finish reading stuff in */ jpeg_finish_decompress(cinfo_ptr); /* Get rid of the JPEG information */ jpeg_destroy_decompress(cinfo_ptr); /* Wrap up any HDF specific code */ jpeg_HDF_src_term(cinfo_ptr); /* Free update memory allocated */ free(cinfo_ptr); return SUCCEED; /* we must be ok... */ } /* end DFCIunjpeg() */ hdf4-hdf4.3.1/hdf/src/dfutil.c000066400000000000000000000047411503061704500160200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfutil.c * * Purpose: * General purpose utility routines, and callable versions of hdf utilities * * Public functions: * DFUfindnextref - For this tag, find the ref after given ref * * Remarks: * This version assumes that all the values are floating point. *--------------------------------------------------------------------------*/ #include "hdf_priv.h" /*----------------------------------------------------------------------------- * Name: DFfindnextref * Purpose: For this tag, find the ref after lref * Inputs: * file_id: handle to open HDF file * tag: tag to look for * lref: ref after which to search * Returns: The desired ref if success, and FAIL on failure * Users: HDF users, utilities, other routines * Invokes: HDvalidfid, * Remarks: *---------------------------------------------------------------------------*/ uint16 DFfindnextref(int32 file_id, uint16 tag, uint16 lref) { uint16 newtag = DFTAG_NULL, newref = DFTAG_NULL; int32 aid; HEclear(); if (!HDvalidfid(file_id)) { HERROR(DFE_ARGS); return (uint16)FAIL; } aid = Hstartread(file_id, tag, lref); if (aid == FAIL) return (uint16)FAIL; if (lref != DFREF_WILDCARD) if (Hnextread(aid, tag, DFREF_WILDCARD, DF_CURRENT) == FAIL) return (uint16)FAIL; if (HQuerytagref(aid, &newtag, &newref) == FAIL) return (uint16)FAIL; Hendaccess(aid); return newref; } hdf4-hdf4.3.1/hdf/src/dfutilf.c000066400000000000000000000050431503061704500161620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dfutilf.c * Purpose: C stubs for Fortran utility routines * Invokes: dfutil.c * Contents: * dfindnr_: For a given tag, find the next ref after the given ref *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: dfindnr * Purpose: For this tag, find the ref after lref * Inputs: dfile: ptr to open DF file * tag: tag to look for * lref: ref after which to search * * Returns: the desired ref if successful, on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFfindnextref *---------------------------------------------------------------------------*/ intf ndfindnr(intf *dfile, intf *tag, intf *lref) { return (intf)DFfindnextref(*dfile, (uint16)*tag, (uint16)*lref); } /* CEND7MAX */ /*----------------------------------------------------------------------------- * Name: dffindnextref * Purpose: For this tag, find the ref after lref * Inputs: dfile: ptr to open DF file * tag: tag to look for * lref: ref after which to search * * Returns: the desired ref if successful, on failure with DFerror set * Users: HDF Fortran programmers * Invokes: DFfindnextref *---------------------------------------------------------------------------*/ intf ndffindnextref(intf *dfile, intf *tag, intf *lref) { return (intf)DFfindnextref(*dfile, (uint16)*tag, (uint16)*lref); } hdf4-hdf4.3.1/hdf/src/dynarray.c000066400000000000000000000231271503061704500163610ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE dynarray.c - Internal storage routines for handling "dynamic arrays" REMARKS Dynamic arrays are "standard" arrays which store objects in a straight- forward linear array of objects (void *'s currently), but the "dynarray" allows the size of the array to vary without excessive overhead. DESIGN Each dynarray is managed as a small structure to store the current size of the dynarray and a pointer to the array of pointers to the objects stored within the array. BUGS/LIMITATIONS No hashing or any other "folding" of the storage space is done, so the size of the dynarray can get quite excessive in proportion to the # of elements used if the elements used are "sparse" in the dynarray space. These are strictly usable from C, adding a FORTRAN calling facility would require some re-working of the routines. LOCAL ROUTINES None EXPORTED ROUTINES Element Functions: DAget_elem - Get an element from a dynarray DAset_elem - Set an element pointer for a dynarray DAdel_elem - Delete an element from a dynarray Dynarray Functions: DAcreate_array - Create a dynarray DAdestroy_array - Destroy a dynarray DAsize_array - Get the current dynarray size */ #include "hdf_priv.h" #include "dynarray_priv.h" typedef struct dynarray_tag { intn num_elems; /* Number of elements in the array currently */ intn incr_mult; /* Multiple to increment the array size by */ void **arr; /* Pointer to the actual array of void *'s */ } dynarr_t; /****************************************************************************** NAME DAcreate_array - Create a dynarray DESCRIPTION Create a dynarray for later use. This routine allocates the dynarray structure and creates a dynarray with the specified minimum size. RETURNS Returns pointer to the dynarray created if successful and NULL otherwise *******************************************************************************/ dynarr_p DAcreate_array(intn start_size, /* IN: Initial array size */ intn incr_mult /* IN: multiple to create additional elements in */ ) { dynarr_t *new_arr = NULL; /* ptr to the new dynarray */ dynarr_p ret_value = NULL; HEclear(); if (start_size < 0 || incr_mult <= 0) HGOTO_ERROR(DFE_ARGS, NULL); new_arr = (dynarr_t *)calloc(1, sizeof(dynarr_t)); if (new_arr == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); new_arr->num_elems = start_size; new_arr->incr_mult = incr_mult; if (start_size > 0) { /* only allocate space if the initial size is positive */ new_arr->arr = (void **)calloc(start_size, sizeof(void *)); if (new_arr->arr == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end if */ ret_value = (dynarr_p)new_arr; done: if (ret_value == NULL) { /* Error condition cleanup */ if (new_arr != NULL) { free(new_arr->arr); free(new_arr); } } return ret_value; } /* end DAcreate_array() */ /****************************************************************************** NAME DAdestroy_array - Destroy a dynarray DESCRIPTION Destroy an existing dynarray from use. This routine de-allocates the dynarray structure and deletes the current dynarray. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn DAdestroy_array(dynarr_p arr, /* IN: Array to destroy */ intn free_elem /* IN: whether to free each element */ ) { dynarr_t *dest_arr; /* ptr to the dynarray destroy*/ intn i; intn ret_value = SUCCEED; HEclear(); dest_arr = (dynarr_t *)arr; if (dest_arr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Chuck all the items stored in the array */ if (free_elem != 0) for (i = 0; i < arr->num_elems; i++) { free(arr->arr[i]); } free(dest_arr->arr); free(dest_arr); done: return ret_value; } /* end DAdestroy_array() */ /****************************************************************************** NAME DAdestroy_array - Get the current size of a dynarray DESCRIPTION Get the number of elements in use currently. RETURNS Returns # of dynarray elements if successful and FAIL otherwise *******************************************************************************/ intn DAsize_array(dynarr_p arr /* IN: Array to get size of */ ) { dynarr_t *arr_ptr; /* ptr to the dynarray destroy*/ intn ret_value = SUCCEED; HEclear(); arr_ptr = (dynarr_t *)arr; if (arr_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = arr_ptr->num_elems; done: return ret_value; } /* end DAsize_array() */ /****************************************************************************** NAME DAget_elem - Get an element from a dynarray DESCRIPTION Retrieve an element from a dynarray. If the element to be retrieved is beyond the end of the currently allocated array elements, the array is not extended, a NULL pointer is merely returned. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ void * DAget_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem /* IN: Array element to retrieve */ ) { dynarr_t *arr; /* ptr to the dynarray */ void *ret_value = NULL; HEclear(); arr = (dynarr_t *)arr_ptr; if (elem < 0 || arr == NULL) HGOTO_ERROR(DFE_ARGS, NULL); if (elem >= arr->num_elems) ret_value = NULL; else ret_value = arr->arr[elem]; done: return ret_value; } /* end DAget_elem() */ /****************************************************************************** NAME DAset_elem - Set an element pointer for a dynarray DESCRIPTION Set an element pointer for a dynarray. If the element to be set is beyond the end of the currently allocated array elements, the array is extended by whatever multiple of the incr_mult is needed to expand the # of array elements to include the array element to set. RETURNS Returns SUCCEED if successful and NULL otherwise *******************************************************************************/ intn DAset_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem, /* IN: Array element to set */ void *obj /* IN: Pointer to the object to store */ ) { dynarr_t *arr; /* ptr to the dynarray */ intn ret_value = SUCCEED; HEclear(); arr = (dynarr_t *)arr_ptr; if (elem < 0 || arr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (elem >= arr->num_elems) { intn new_size; /* new number of elements in the array */ new_size = ((elem / arr->incr_mult) + 1) * arr->incr_mult; if (arr->num_elems == 0) { /* array not currently allocated */ if ((arr->arr = (void **)calloc(new_size, sizeof(void *))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ else { /* extend the existing array */ void **new_arr; /* storage for the new array of ptrs */ if ((new_arr = (void **)realloc(arr->arr, new_size * sizeof(void *))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); memset(&new_arr[arr->num_elems], 0, sizeof(void *) * (uintn)(new_size - arr->num_elems)); arr->arr = new_arr; } /* end else */ arr->num_elems = new_size; } /* end if */ /* Set the element value */ arr->arr[elem] = obj; done: return ret_value; } /* end DAset_elem() */ /***************************************************************************** NAME DAdel_elem - Delete an element from a dynarray DESCRIPTION Retrieve an element from a dynarray & delete it from the dynarray. If the element to be retrieved is beyond the end of the currently allocated array elements, the array is not extended, a NULL pointer is merely returned. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ void * DAdel_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem /* IN: Array element to retrieve */ ) { dynarr_t *arr; /* ptr to the dynarray */ void *ret_value = NULL; HEclear(); arr = (dynarr_t *)arr_ptr; if (elem < 0 || arr == NULL) HGOTO_ERROR(DFE_ARGS, NULL); if (elem >= arr->num_elems) ret_value = NULL; else { ret_value = arr->arr[elem]; arr->arr[elem] = NULL; } /* end else */ done: return ret_value; } /* end DAdel_elem() */ hdf4-hdf4.3.1/hdf/src/dynarray_priv.h000066400000000000000000000122021503061704500174160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: dynarray_priv.h * Purpose: header file for dynamic array API *---------------------------------------------------------------------------*/ #ifndef H4_DYNARRAY_PRIV_H #define H4_DYNARRAY_PRIV_H #include "hdf_priv.h" /* Define the pointer to the dynarray without giving outside routines access to the internal workings of the structure. */ typedef struct dynarray_tag *dynarr_p; #ifdef __cplusplus extern "C" { #endif /****************************************************************************** NAME DAcreate_array - Create a dynarray DESCRIPTION Create a dynarray for later use. This routine allocates the dynarray structure and creates a dynarray with the specified minimum size. RETURNS Returns pointer to the dynarray created if successful and NULL otherwise *******************************************************************************/ dynarr_p DAcreate_array(intn start_size, /* IN: Initial array size */ intn incr_mult /* IN: multiple to create additional elements in */ ); /****************************************************************************** NAME DAdestroy_array - Destroy a dynarray DESCRIPTION Destroy an existing dynarray from use. This routine de-allocates the dynarray structure and deletes the current dynarray. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn DAdestroy_array(dynarr_p arr, /* IN: Array to destroy */ intn free_elem /* IN: whether to free each element */ ); /****************************************************************************** NAME DAdestroy_array - Get the current size of a dynarray DESCRIPTION Get the number of elements in use currently. RETURNS Returns # of dynarray elements if successful and FAIL otherwise *******************************************************************************/ intn DAsize_array(dynarr_p arr /* IN: Array to get size of */ ); /****************************************************************************** NAME DAget_elem - Get an element from a dynarray DESCRIPTION Retrieve an element from a dynarray. If the element to be retrieved is beyond the end of the currently allocated array elements, the array is not extended, a NULL pointer is merely returned. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ void *DAget_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem /* IN: Array element to retrieve */ ); /****************************************************************************** NAME DAset_elem - Set an element pointer for a dynarray DESCRIPTION Set an element pointer for a dynarray. If the element to be set is beyond the end of the currently allocated array elements, the array is extended by whatever multiple of the incr_mult is needed to expand the # of array elements to include the array element to set. RETURNS Returns SUCCEED if successful and NULL otherwise *******************************************************************************/ intn DAset_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem, /* IN: Array element to set */ void *obj /* IN: Pointer to the object to store */ ); /***************************************************************************** NAME DAdel_elem - Delete an element from a dynarray DESCRIPTION Retrieve an element from a dynarray & delete it from the dynarray. If the element to be retrieved is beyond the end of the currently allocated array elements, the array is not extended, a NULL pointer is merely returned. RETURNS Returns object ptr if successful and NULL otherwise *******************************************************************************/ void *DAdel_elem(dynarr_p arr_ptr, /* IN: Array to access */ intn elem /* IN: Array element to retrieve */ ); #ifdef __cplusplus } #endif #endif /* H4_DYNARRAY_PRIV_H */ hdf4-hdf4.3.1/hdf/src/glist.c000066400000000000000000001113471503061704500156540ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************************ Credits: Original code is part of the public domain 'Generic List Library' by Keith Pomakis(kppomaki@jeeves.uwaterloo.ca)-Spring, 1994 ************************************************************************/ #include "hdf_priv.h" #include "glist_priv.h" /*+ **************************************************************************** GENERAL **************************************************************************** A set of basic generic doubly-linked list functions were designed and programmed first (along with a suitable efficient data structure), and then some higher-level functions were added to increase ease of use. The functionality of stacks, queues and sorted lists were then added. In actuality, these functions (with the exception of one of the sorted-list functions) are nothing more than aliases for the appropriate generic list operations. This aliasing is behind the scenes, however, and the user of this library may treat the operation of lists, stacks and queues in this library as completely separate functionality. In order to make the library completely generic, it was designed to manipulate pointers of type void *. Therefore, it is assumed that the programmer is statically or dynamically creating the objects of interest, and using the generic list functions to manipulate them. It is up to the programmer to handle the allocation and deallocation of the memory for the objects themselves. A pointer to the same object may be stored in a list multiple times. The only restriction imposed is that a NULL pointer may not be stored. **************************************************************************** USAGE **************************************************************************** The use of this library is simple and straight-forward. In every source file that requires the use of generic list functions, the line: #include "glist.h" must be included at the top of the file. For those who hand-craft their own makefiles, "generic_list.h" should become a prerequisite for each of these files, as well as for "generic_list.c" itself. The library defines three data types: Generic_list Generic_stack Generic_queue The usage of these functions is best illustrated with an example: Error checking of the return values from the functions are not shown. foo() { Generic_stack stack; My_object *obj; HDGSinitialize_stack(&stack); obj = new_object(); HDGSpush(stack, obj); ... obj = HDGSpop(stack); free(obj); ... HDGSdestroy_stack(&stack); } Each list must be initialized before use and should be destroyed after it is no longer needed. The programmer must handle the allocation and deallocation of the memory for the objects being stored. Explicit memory management for the lists is not necessary. **************************************************************************** LIST OF FUNCTIONS **************************************************************************** The following are the headers of the functions provided in the generic list library. They are described in more detail later. Generic Lists ------------- intn HDGLinitialize_list(Generic_list *list); void HDGLdestroy_list(Generic_list *list); intn HDGLadd_to_beginning(Generic_list list, void *pointer); intn HDGLadd_to_end(Generic_list list, void *pointer); intn HDGLadd_to_list(Generic_list list, void *pointer); void *HDGLremove_from_beginning(Generic_list list); void *HDGLremove_from_end(Generic_list list); void *HDGLremove_from_list(Generic_list list, void *pointer); void HDGLremove_all(Generic_list list); void *HDGLpeek_at_beginning(Generic_list list); void *HDGLpeek_at_end(Generic_list list); void *HDGLfirst_in_list(Generic_list list); void *HDGLnext_in_list(Generic_list list); void *HDGLcurrent_in_list(Generic_list list); void *HDGLremove_current(Generic_list list); void *HDGLprevious_in_list(Generic_list list); void *HDGLlast_in_list(Generic_list list); void HDGLreset_to_beginning(Generic_list list); void HDGLreset_to_end(Generic_list list); intn HDGLnum_of_objects(Generic_list list); intn HDGLis_empty(Generic_list list); intn HDGLis_in_list(Generic_list list, void *pointer); Generic_list HDGLcopy_list(Generic_list list); void HDGLperform_on_list (Generic_list list, void (*fn)(void *pointer, void *args), void *args); void *HDGLfirst_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); void *HDGLnext_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); void *HDGLprevious_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); void *HDGLlast_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); Generic_list HDGLall_such_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); void HDGLremove_all_such_that (Generic_list list, intn (*fn)(void *pointer, void *args), void *args); Generic Sorted Lists -------------------- intn HDGLinitialize_sorted_list(Generic_list *list, int (*lt)(void *a, void *b)); ...and all Generic_list functions EXCEPT: intn HDGLadd_to_beginning(Generic_list list, void *pointer); intn HDGLadd_to_end(Generic_list list, void *pointer); void *HDGLremove_from_beginning(Generic_list list); void *HDGLremove_from_end(Generic_list list); Generic Stacks(HDGSxxx) ---------------------- intn HDGSinitialize_stack(Generic_stack *stack); void HDGSdestroy_stack(Generic_stack *stack); intn HDGSpush(Generic_stack stack, void *pointer); void *HDGSpop(Generic_stack stack); void HDGSpop_all(Generic_stack stack); void *HDGSpeek_at_top(Generic_stack stack); Generic_stack HDGScopy_stack(Generic_stack stack); * This is a list fcn * intn HDGLis_empty(Generic_stack stack); Generic Queues(HDGQxxx) ---------------------- intn HDGQinitialize_queue(Generic_queue *queue); void HDGQdestroy_queue(Generic_queue *queue); intn HDGQenqueue(Generic_queue queue, void *pointer); void *HDGQdequeue(Generic_queue queue); void HDGQdequeue_all(Generic_queue queue); void *HDGQpeek_at_head(Generic_queue queue); void *HDGQpeek_at_tail(Generic_queue queue); Generic_queue HDGQcopy_queue(Generic_queue queue); * This is a list fcn * intn HDGLis_empty(Generic_queue queue); **************************************************************************** HINTS **************************************************************************** Technically, any of the above functions can be used with any of the three data types. For example, one can use HDGLperform_on_list() to perform a specified function on every object in a queue, or HDGLis_in_list() to determine whether or not a particular object is a member of a stack. One can even HDGSpop from a queue and HDGQdequeue from a stack. However, such usage is not recommended, as it is contrary to the logical usage of such data structures. +*/ /****************************************************************************** NAME HDGLinitialize_list DESCRIPTION Every list must be initialized before it is used. The only time it is valid to re-initialize a list is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLinitialize_list(Generic_list *list) { intn ret_value = SUCCEED; /* Allocate an initialize info struct */ list->info = (Generic_list_info *)malloc(sizeof(Generic_list_info)); if (list->info != NULL) { list->info->pre_element.pointer = NULL; list->info->pre_element.previous = &list->info->pre_element; list->info->pre_element.next = &list->info->post_element; list->info->post_element.pointer = NULL; list->info->post_element.previous = &list->info->pre_element; list->info->post_element.next = &list->info->post_element; list->info->current = &list->info->pre_element; list->info->deleted_element.pointer = NULL; list->info->lt = NULL; list->info->num_of_elements = 0; } else HGOTO_ERROR(DFE_NOSPACE, FAIL); done: if (ret_value == FAIL) { } return ret_value; } /* HDGLinitialize_list() */ /****************************************************************************** NAME HDGLinitialize_sorted_list DESCRIPTION This function initializes a sorted list. A less-than function must be specified which accepts two pointers, a and b, and returns TRUE (non-zero) if a is less than b, FALSE otherwise. Once a list is initialized in this way, all of the generic list functions described above can be used, except for: void HDGLadd_to_beginning(Generic_list list, void *pointer); void HDGLadd_to_end(Generic_list list, void *pointer); void *HDGLremove_from_beginning(Generic_list list); void *HDGLremove_from_end(Generic_list list); and the list will remain sorted by the criteria specified by the less-than function. The only time it is valid to re-initialize a list is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLinitialize_sorted_list(Generic_list *list, intn (*lt)(void * /* a */, void * /* b */)) { intn ret_value = SUCCEED; /* First initialize list */ if ((ret_value = HDGLinitialize_list(list)) == FAIL) goto done; else list->info->lt = lt; /* Set sort fcn */ done: if (ret_value == FAIL) { } return ret_value; } /* HDGLinitialize_sorted_list() */ /****************************************************************************** NAME HDGLdestroy_list DESCRIPTION When a list is no longer needed, it should be destroyed. This process will automatically remove all remaining objects from the list. However, the memory for these objects will not be reclaimed, so if the objects have no other references, care should be taken to purge the list and free all objects before destroying the list. It is an error to destroy a list more than once (unless it has been re-initialized in the meantime). RETURNS Nothing *******************************************************************************/ void HDGLdestroy_list(Generic_list *list) { /* Fist remove all nodes */ HDGLremove_all(*list); /* Free the info struct last */ free(list->info); } /* HDGLdestroy_list() */ /****************************************************************************** NAME HDGLadd_to_beginning DESCRIPTION This function will add the specified object to the beginning of the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_beginning(Generic_list list, void *pointer) { Generic_list_element *element; intn ret_value = SUCCEED; /* Check data element */ if (pointer == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Allocate and add to beginning of list */ element = (Generic_list_element *)malloc(sizeof(Generic_list_element)); if (element != NULL) { element->next = list.info->pre_element.next; element->previous = &list.info->pre_element; element->pointer = pointer; list.info->pre_element.next->previous = element; list.info->pre_element.next = element; list.info->num_of_elements++; } else HGOTO_ERROR(DFE_NOSPACE, FAIL); done: if (ret_value == FAIL) { } return ret_value; } /* HDGLadd_to_beginning() */ /****************************************************************************** NAME HDGLadd_to_end DESCRIPTION This function will add the specified object to the end of the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_end(Generic_list list, void *pointer) { Generic_list_element *element; intn ret_value = SUCCEED; /* Check data element */ if (pointer == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Allocate and add to end of list */ element = (Generic_list_element *)malloc(sizeof(Generic_list_element)); if (element != NULL) { element->next = &list.info->post_element; element->previous = list.info->post_element.previous; element->pointer = pointer; list.info->post_element.previous->next = element; list.info->post_element.previous = element; list.info->num_of_elements++; } else HGOTO_ERROR(DFE_NOSPACE, FAIL); done: if (ret_value == FAIL) { } return ret_value; } /* HDGLadd_to_end() */ /****************************************************************************** NAME HDGLadd_to_list DESCRIPTION This function will add the specified object to the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_list(Generic_list list, void *pointer) { Generic_list_element *element, *new_element; intn ret_value = SUCCEED; /* Check to see if there is a sort fcn */ if (list.info->lt) { /* Check data element */ if (pointer == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); element = list.info->pre_element.next; while (element != &list.info->post_element && (*list.info->lt)(element->pointer, pointer)) element = element->next; /* Allocate and add to list */ new_element = (Generic_list_element *)malloc(sizeof(Generic_list_element)); if (new_element != NULL) { new_element->next = element; new_element->previous = element->previous; new_element->pointer = pointer; element->previous->next = new_element; element->previous = new_element; list.info->num_of_elements++; } else HGOTO_ERROR(DFE_NOSPACE, FAIL); } else /* no sort fcn so add to end of list */ ret_value = HDGLadd_to_end(list, pointer); done: if (ret_value == FAIL) { } return ret_value; } /* HDGLadd_to_list() */ /****************************************************************************** NAME HDGLremove_from_list DESCRIPTION This function will remove the specified object from the list and return it. If the specified object does not exist in the list, NULL is returned. If the specified object exists in the list more than once, only the last reference to it is removed. RETURNS Element removed if successful and NULL otherwise *******************************************************************************/ void * HDGLremove_from_list(Generic_list list, void *pointer) { Generic_list_element *element; void *ret_value = NULL; /* Find element in list */ element = list.info->post_element.previous; while (element != &list.info->pre_element && element->pointer != pointer) element = element->previous; if (element == &list.info->pre_element) { /* No such element was found. */ ret_value = NULL; goto done; } /* Have found element */ if (element == list.info->current) { list.info->deleted_element.previous = element->previous; list.info->deleted_element.next = element->next; list.info->current = &list.info->deleted_element; } element->previous->next = element->next; element->next->previous = element->previous; free(element); list.info->num_of_elements--; ret_value = pointer; /* return ptr to original element */ done: if (ret_value == NULL) { } return ret_value; } /* HDGLremove_from_list() */ /****************************************************************************** NAME HDGLremove_from_beginning DESCRIPTION This function will remove the first object from the beginning of the list and return it. If the list is empty, NULL is returned. RETURNS First Element if successful and NULL otherwise. *******************************************************************************/ void * HDGLremove_from_beginning(Generic_list list) { Generic_list_element *element; void *pointer; void *ret_value = NULL; /* Check to see if there any elements in the list */ if (list.info->num_of_elements == 0) { /* nope */ ret_value = NULL; goto done; } /* Remove first element */ element = list.info->pre_element.next; if (element == list.info->current) list.info->current = &list.info->pre_element; pointer = element->pointer; list.info->pre_element.next = element->next; element->next->previous = &list.info->pre_element; free(element); list.info->num_of_elements--; ret_value = pointer; /* return the fist element */ done: if (ret_value == NULL) { } return ret_value; } /* HDGLremove_from_beginning() */ /****************************************************************************** NAME HDGLremove_from_end DESCRIPTION This function will remove the last object from the end of the list and return it. If the list is empty, NULL is returned. RETURNS Last element if successful and NULL otherwise *******************************************************************************/ void * HDGLremove_from_end(Generic_list list) { Generic_list_element *element; void *pointer; void *ret_value = NULL; /* Check to see if there any elements in the list */ if (list.info->num_of_elements == 0) { /* nope */ ret_value = NULL; goto done; } element = list.info->post_element.previous; if (element == list.info->current) list.info->current = &list.info->post_element; pointer = element->pointer; list.info->post_element.previous = element->previous; element->previous->next = &list.info->post_element; free(element); list.info->num_of_elements--; ret_value = pointer; /* return last element */ done: if (ret_value == NULL) { } return ret_value; } /* HDGLremove_from_end() */ /****************************************************************************** NAME HDGLremove_current DESCRIPTION This function will remove the current object from the list and return it. If the current object has already been removed, if current points to the beginning or end of the list, or if the list is empty, NULL is returned. RETURNS Current element if successful and NULL otherwise. *******************************************************************************/ void * HDGLremove_current(Generic_list list) { Generic_list_element *element; void *pointer; void *ret_value = NULL; element = list.info->current; if (element->pointer == NULL) { /* current is empty */ ret_value = NULL; goto done; } list.info->deleted_element.previous = element->previous; list.info->deleted_element.next = element->next; list.info->current = &list.info->deleted_element; pointer = element->pointer; element->next->previous = element->previous; element->previous->next = element->next; free(element); list.info->num_of_elements--; ret_value = pointer; /* return current element */ done: if (ret_value == NULL) { } return ret_value; } /* HDGLremove_current() */ /****************************************************************************** NAME HDGLremove_all DESCRIPTION This function will remove all objects from the list. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and remove the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ void HDGLremove_all(Generic_list list) { Generic_list_element *element; /* remove all the elements from the list */ element = list.info->pre_element.next; while (element != &list.info->post_element) { element = element->next; free(element->previous); } list.info->pre_element.next = &list.info->post_element; list.info->post_element.previous = &list.info->pre_element; list.info->num_of_elements = 0; } /* HDGLremove_all() */ /****************************************************************************** NAME HDGLpeek_at_beginning DESCRIPTION This function will return the first object in the list. If the list is empty, NULL is returned. RETURNS First element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLpeek_at_beginning(Generic_list list) { return list.info->pre_element.next->pointer; } /* HDGLpeek_at_beginning() */ /****************************************************************************** NAME HDGLpeek_at_end DESCRIPTION This function will return the last object in the list. If the list is empty, NULL is returned. RETURNS Last element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLpeek_at_end(Generic_list list) { return list.info->post_element.previous->pointer; } /* HDGLpeek_at_end() */ /****************************************************************************** NAME HDGLfirst_in_list DESCRIPTION This function will return the first object in the list and mark it as the current object. If the list is empty, NULL is returned. RETURNS First element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLfirst_in_list(Generic_list list) { list.info->current = list.info->pre_element.next->next->previous; return list.info->current->pointer; } /* HDGLfirst_in_list() */ /****************************************************************************** NAME HDGLcurrent_in_list DESCRIPTION This function will return the object in the list that is considered the current object (as defined by the surrounding functions). If the current object has just been removed, if current points to the beginning or end of the list, or if the list is empty, NULL is returned. RETURNS Current element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLcurrent_in_list(Generic_list list) { return list.info->current->pointer; } /* HDGLcurrent_in_list() */ /****************************************************************************** NAME HDGLlast_in_list DESCRIPTION This function will return the last object in the list and mark it as the current object. If the list is empty, NULL is returned. RETURNS Last element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLlast_in_list(Generic_list list) { list.info->current = list.info->post_element.previous->previous->next; return list.info->current->pointer; } /* HDGLlast_in_list() */ /****************************************************************************** NAME HDGLnext_in_list DESCRIPTION This function will return the next object in the list and mark it as the current object. If the end of the list is reached, or if the list is empty, NULL is returned. RETURNS Next element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLnext_in_list(Generic_list list) { list.info->current = list.info->current->next; return list.info->current->pointer; } /* HDGLnext_in_list() */ /****************************************************************************** NAME HDGLprevious_in_list DESCRIPTION This function will return the previous object in the list and mark it as the current object. If the beginning of the list is reached, or if the list is empty, NULL is returned. RETURNS Previous element in list if non-empty, otherwise NULL. *******************************************************************************/ void * HDGLprevious_in_list(Generic_list list) { list.info->current = list.info->current->previous; return list.info->current->pointer; } /* HDGLprevious_in_list() */ /****************************************************************************** NAME HDGLreset_to_beginning DESCRIPTION This function will reset the list to the beginning. Therefore, current points to the beginning of the list, and the next object in the list is the first object. RETURNS Nothing *******************************************************************************/ void HDGLreset_to_beginning(Generic_list list) { list.info->current = &list.info->pre_element; } /* HDGLreset_to_beginning() */ /****************************************************************************** NAME HDGLreset_to_end DESCRIPTION This function will reset the list to the end. Therefore, current points to the end of the list, and the previous object in the list is the last object. RETURNS Nothing *******************************************************************************/ void HDGLreset_to_end(Generic_list list) { list.info->current = &list.info->post_element; } /* rest_to_end() */ /****************************************************************************** NAME HDGLnum_of_objects DESCRIPTION This function will determine the number of objects in the list. RETURNS Number of objects in list *******************************************************************************/ intn HDGLnum_of_objects(Generic_list list) { return (intn)list.info->num_of_elements; } /* HDGLnum_of_objects() */ /****************************************************************************** NAME HDGLis_empty DESCRIPTION Finds if list is empty RETURNS This function will return TRUE (1) if the list is empty, and FALSE (0) otherwise. *******************************************************************************/ intn HDGLis_empty(Generic_list list) { return list.info->num_of_elements == 0; } /* HDGLis_empty() */ /****************************************************************************** NAME HDGLis_in_list DESCRIPTION Determines if the object is in the list. RETURNS This function will return TRUE (1) if the specified object is a member of the list, and FALSE (0) otherwise. *******************************************************************************/ intn HDGLis_in_list(Generic_list list, void *pointer) { Generic_list_element *element; element = list.info->pre_element.next; while (element != &list.info->post_element && element->pointer != pointer) element = element->next; return element != &list.info->post_element; } /* HDGLis_in_list() */ /****************************************************************************** NAME HDGLcopy_list DESCRIPTION This function will make a copy of the list. The objects themselves are not copied; only new references to them are made. The new list loses its concept of the current object. RETURNS A copy of the original list. *******************************************************************************/ Generic_list HDGLcopy_list(Generic_list list) { Generic_list list_copy; Generic_list_element *element; intn ret_value = SUCCEED; list_copy.info = NULL; /* initialize info to NULL */ /* initialize new list */ if (HDGLinitialize_sorted_list(&list_copy, list.info->lt) == FAIL) { ret_value = FAIL; goto done; } /* copy over every element to new list */ element = list.info->pre_element.next; while (element != &list.info->post_element) { if (HDGLadd_to_end(list_copy, element->pointer) == FAIL) { ret_value = FAIL; break; } element = element->next; } done: if (ret_value == FAIL) { /* need to remove all elements from copy */ if (list_copy.info != NULL) { HDGLremove_all(list_copy); } list_copy.info = NULL; /* set to NULL */ } return list_copy; } /* HDGLcopy_list() */ /****************************************************************************** NAME HDGLperform_on_list DESCRIPTION This function will perform the specified function on each object in the list. Any optional arguments required can be passed through args. RETURNS Nothing *******************************************************************************/ void HDGLperform_on_list(Generic_list list, void (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list_element *element; element = list.info->pre_element.next; while (element != &list.info->post_element) { /* call fcn on each element */ (*fn)(element->pointer, args); element = element->next; } } /* HDGLperform_on_list() */ /****************************************************************************** NAME HDGLfirst_that DESCRIPTION This function will find and return the first object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If no objects in the list meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void * HDGLfirst_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list_element *element; element = list.info->pre_element.next; while (element != &list.info->post_element && !(*fn)(element->pointer, args)) { element = element->next; } if (element->pointer) list.info->current = element; return element->pointer; } /* HDGLfirst_that() */ /****************************************************************************** NAME HDGLnext_that DESCRIPTION This function will find and return the next object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If there are no objects left in the list that meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void * HDGLnext_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list_element *element; element = list.info->current->next; while (element != &list.info->post_element && !(*fn)(element->pointer, args)) { element = element->next; } if (element->pointer) list.info->current = element; return element->pointer; } /* HDGLnext_that() */ /****************************************************************************** NAME HDGLprevious_that DESCRIPTION This function will find and return the previous object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If there are no objects left in the list that meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void * HDGLprevious_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list_element *element; element = list.info->current->previous; while (element != &list.info->pre_element && !(*fn)(element->pointer, args)) { element = element->previous; } if (element->pointer) list.info->current = element; return element->pointer; } /* HDGLprevious_that() */ /****************************************************************************** NAME HDGLlast_that DESCRIPTION This function will find and return the last object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If no objects in the list meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void * HDGLlast_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list_element *element; element = list.info->post_element.previous; while (element != &list.info->pre_element && !(*fn)(element->pointer, args)) { element = element->previous; } if (element->pointer) list.info->current = element; return element->pointer; } /* HDGLlast_that() */ /****************************************************************************** NAME HDGLall_such_that DESCRIPTION This function will return a new list containing all of the objects in the specified list which cause the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The objects themselves are not copied; only new references to them are made. RETURNS New list if successful and empty if not. *******************************************************************************/ Generic_list HDGLall_such_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { Generic_list list_copy; Generic_list_element *element; intn ret_value = SUCCEED; /* initialize copy of list */ if (HDGLinitialize_sorted_list(&list_copy, list.info->lt) == FAIL) { ret_value = FAIL; goto done; } /* copy over elements that satisfy the fcn */ element = list.info->pre_element.next; while (element != &list.info->post_element) { if ((*fn)(element->pointer, args)) { if (HDGLadd_to_end(list_copy, element->pointer) == FAIL) { ret_value = FAIL; break; } } element = element->next; } done: if (ret_value == FAIL) { if (list_copy.info != NULL) { HDGLremove_all(list_copy); } list_copy.info = NULL; /* set to NULL */ } return list_copy; } /* HDGLall_such_that() */ /****************************************************************************** NAME HDGLremove_all_such_that DESCRIPTION This function will remove all objects in the list which cause the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and remove the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ void HDGLremove_all_such_that(Generic_list list, intn (*fn)(void * /* pointer */, void * /* args */), void *args) { void *obj; /* reset to the beginning */ HDGLreset_to_beginning(list); while ((obj = HDGLnext_in_list(list))) { if ((*fn)(obj, args)) HDGLremove_current(list); } } /* HDGLremove_HDGLall_such_that() */ hdf4-hdf4.3.1/hdf/src/glist_priv.h000066400000000000000000000664641503061704500167320ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************************ Credits: Original code is part of the public domain 'Generic List Library' by Keith Pomakis(kppomaki@jeeves.uwaterloo.ca)-Spring, 1994 ************************************************************************/ #ifndef H4_GLIST_PRIV_H #define H4_GLIST_PRIV_H #include "hdf_priv.h" /* Structure for each element in the list */ typedef struct GLE_struct { void *pointer; /* data element itself */ struct GLE_struct *previous; /* previous element */ struct GLE_struct *next; /* next element */ } Generic_list_element; /* List info structure */ typedef struct GLI_struct { Generic_list_element *current; /* current element */ Generic_list_element pre_element; /* pre element */ Generic_list_element post_element; /* post element */ Generic_list_element deleted_element; /* deleted element */ intn (*lt)(void *a, void *b); /* sort fcn */ uint32 num_of_elements; /* number of elements */ } Generic_list_info; /* Top most List structure, handle to the list */ typedef struct GL_struct { Generic_list_info *info; } Generic_list; /* Define a Stack and Queue */ #define Generic_stack Generic_list #define Generic_queue Generic_list /* Function declarations Descriptions for the General List routines can be found in 'glist.c' while the stack and queue routines are found below */ /****************************************************************************** NAME HDGLinitialize_list DESCRIPTION Every list must be initialized before it is used. The only time it is valid to re-initialize a list is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLinitialize_list(Generic_list *list /* IN: list */); /****************************************************************************** NAME HDGLinitialize_sorted_list DESCRIPTION This function initializes a sorted list. A less-than function must be specified which accepts two pointers, a and b, and returns TRUE (non-zero) if a is less than b, FALSE otherwise. Once a list is initialized in this way, all of the generic list functions described above can be used, except for: void HDGLadd_to_beginning(Generic_list list, void *pointer); void HDGLadd_to_end(Generic_list list, void *pointer); void *HDGLremove_from_beginning(Generic_list list); void *HDGLremove_from_end(Generic_list list); and the list will remain sorted by the criteria specified by the less-than function. The only time it is valid to re-initialize a list is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLinitialize_sorted_list(Generic_list *list /*IN: list */, intn (*lt)(void *a, void *b) /*IN:sort fcn */); /****************************************************************************** NAME destory_list DESCRIPTION When a list is no longer needed, it should be destroyed. This process will automatically remove all remaining objects from the list. However, the memory for these objects will not be reclaimed, so if the objects have no other references, care should be taken to purge the list and free all objects before destroying the list. It is an error to destroy a list more than once (unless it has been re-initialized in the meantime). RETURNS Nothing *******************************************************************************/ void HDGLdestroy_list(Generic_list *list /*IN: list */); /****************************************************************************** NAME HDGLadd_to_beginning DESCRIPTION This function will add the specified object to the beginning of the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_beginning(Generic_list list, /*IN: list */ void *pointer /*IN: data element */); /****************************************************************************** NAME HDGLadd_to_end DESCRIPTION This function will add the specified object to the end of the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_end(Generic_list list, /*IN: list */ void *pointer /*IN: data element */); /****************************************************************************** NAME HDGLadd_to_list DESCRIPTION This function will add the specified object to the list. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ intn HDGLadd_to_list(Generic_list list, /*IN: list */ void *pointer /*IN: data element */); /****************************************************************************** NAME HDGLremove_from_beginning DESCRIPTION This function will remove the first object from the beginning of the list and return it. If the list is empty, NULL is returned. RETURNS First Element if successful and NULL otherwise. *******************************************************************************/ void *HDGLremove_from_beginning(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLremove_from_end DESCRIPTION This function will remove the last object from the end of the list and return it. If the list is empty, NULL is returned. RETURNS Last element if successful and NULL otherwise *******************************************************************************/ void *HDGLremove_from_end(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLremove_from_list DESCRIPTION This function will remove the specified object from the list and return it. If the specified object does not exist in the list, NULL is returned. If the specified object exists in the list more than once, only the last reference to it is removed. RETURNS Element removed if successful and NULL otherwise *******************************************************************************/ void *HDGLremove_from_list(Generic_list list, /*IN: list */ void *pointer /*IN: data element */); /****************************************************************************** NAME HDGLremove_current DESCRIPTION This function will remove the current object from the list and return it. If the current object has already been removed, if current points to the beginning or end of the list, or if the list is empty, NULL is returned. RETURNS Current element if successful and NULL otherwise. *******************************************************************************/ void *HDGLremove_current(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLremove_all DESCRIPTION This function will remove all objects from the list. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and remove the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ void HDGLremove_all(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLpeek_at_beginning DESCRIPTION This function will return the first object in the list. If the list is empty, NULL is returned. RETURNS First element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLpeek_at_beginning(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLpeek_at_end DESCRIPTION This function will return the last object in the list. If the list is empty, NULL is returned. RETURNS Last element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLpeek_at_end(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLfirst_in_list DESCRIPTION This function will return the first object in the list and mark it as the current object. If the list is empty, NULL is returned. RETURNS First element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLfirst_in_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLcurrent_in_list DESCRIPTION This function will return the object in the list that is considered the current object (as defined by the surrounding functions). If the current object has just been removed, if current points to the beginning or end of the list, or if the list is empty, NULL is returned. RETURNS Current element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLcurrent_in_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLlast_in_list DESCRIPTION This function will return the last object in the list and mark it as the current object. If the list is empty, NULL is returned. RETURNS Last element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLlast_in_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLnext_in_list DESCRIPTION This function will return the next object in the list and mark it as the current object. If the end of the list is reached, or if the list is empty, NULL is returned. RETURNS Next element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLnext_in_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLprevious_in_list DESCRIPTION This function will return the previous object in the list and mark it as the current object. If the beginning of the list is reached, or if the list is empty, NULL is returned. RETURNS Previous element in list if non-empty, otherwise NULL. *******************************************************************************/ void *HDGLprevious_in_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLreset_to_beginning DESCRIPTION This function will reset the list to the beginning. Therefore, current points to the beginning of the list, and the next object in the list is the first object. RETURNS Nothing *******************************************************************************/ void HDGLreset_to_beginning(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLreset_to_end DESCRIPTION This function will reset the list to the end. Therefore, current points to the end of the list, and the previous object in the list is the last object. RETURNS Nothing *******************************************************************************/ void HDGLreset_to_end(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLnum_of_objects DESCRIPTION This function will determine the number of objects in the list. RETURNS Number of objects in list *******************************************************************************/ intn HDGLnum_of_objects(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLis_empty DESCRIPTION Finds if list is empty RETURNS This function will return TRUE (1) if the list is empty, and FALSE (0) otherwise. *******************************************************************************/ intn HDGLis_empty(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLis_in_list DESCRIPTION Determines if the object is in the list. RETURNS This function will return TRUE (1) if the specified object is a member of the list, and FALSE (0) otherwise. *******************************************************************************/ intn HDGLis_in_list(Generic_list list, /*IN: list */ void *pointer /*IN: data element */); /****************************************************************************** NAME HDGLcopy_list DESCRIPTION This function will make a copy of the list. The objects themselves are not copied; only new references to them are made. The new list loses its concept of the current object. RETURNS A copy of the original list. *******************************************************************************/ Generic_list HDGLcopy_list(Generic_list list /*IN: list */); /****************************************************************************** NAME HDGLperform_on_list DESCRIPTION This function will perform the specified function on each object in the list. Any optional arguments required can be passed through args. RETURNS Nothing *******************************************************************************/ void HDGLperform_on_list(Generic_list list, /*IN: list */ void (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLfirst_that DESCRIPTION This function will find and return the first object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If no objects in the list meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void *HDGLfirst_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLnext_that DESCRIPTION This function will find and return the next object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If there are no objects left in the list that meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void *HDGLnext_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLprevious_that DESCRIPTION This function will find and return the previous object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If there are no objects left in the list that meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void *HDGLprevious_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLlast_that DESCRIPTION This function will find and return the last object in the list which causes the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The found object is then marked as the current object. If no objects in the list meet the criteria of the specified function, NULL is returned. RETURNS Element if successful and NULL otherwise. *******************************************************************************/ void *HDGLlast_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLall_such_that DESCRIPTION This function will return a new list containing all of the objects in the specified list which cause the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. The objects themselves are not copied; only new references to them are made. RETURNS New list if successful and empty if not. *******************************************************************************/ Generic_list HDGLall_such_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************** NAME HDGLremove_HDGLall_such_that DESCRIPTION This function will remove all objects in the list which cause the specified function to return a TRUE (non-zero) value. Any optional arguments required can be passed through args. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and remove the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ void HDGLremove_all_such_that(Generic_list list, /*IN: list */ intn (*fn)(void *pointer, void *args), /* IN: iterator fcn */ void *args /*IN: args to iterator fcn */); /****************************************************************************/ /* * Stack operations */ /****************************************************************************** NAME HDGSinitialize_stack DESCRIPTION Every stack must be initialized before it is used. The only time it is valid to re-initialize a stack is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGSinitialize_stack HDGLinitialize_list /****************************************************************************** NAME HDGSdestroy_stack DESCRIPTION When a stack is no longer needed, it should be destroyed. This process will automatically remove all remaining objects from the stack. However, the memory for these objects will not be reclaimed, so if the objects have no other references, care should be taken to purge the stack and free all objects before destroying the stack. It is an error to destroy a stack more than once (unless it has been re-initialized in the meantime). RETURNS Nothing *******************************************************************************/ #define HDGSdestroy_stack HDGLdestroy_list /****************************************************************************** NAME HDGSpush DESCRIPTION This function will HDGSpush the specified object onto the stack. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGSpush HDGLadd_to_beginning /****************************************************************************** NAME HDGSpop DESCRIPTION This function will HDGSpop the first object from the top of the stack and return it. If the stack is empty, NULL is returned. RETURNS First element of the top of the stack *******************************************************************************/ #define HDGSpop HDGLremove_from_beginning /****************************************************************************** NAME HDGSpop_all DESCRIPTION This function will HDGSpop all objects from the stack. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and HDGSpop the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ #define HDGSpop_all HDGLremove_all /****************************************************************************** NAME HDGSpeek_at_top DESCRIPTION This function will return the object on the top of the stack. If the stack is empty, NULL is returned. RETURNS Element at top of stack. *******************************************************************************/ #define HDGSpeek_at_top HDGLpeek_at_beginning /****************************************************************************** NAME HDGScopy_stack DESCRIPTION This function will return a copy of the stack. The objects themselves are not copied; only new references to them are made. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGScopy_stack HDGLcopy_list /****************************************************************************/ /* * Queue operations */ /****************************************************************************** NAME HDGQinitialize_queue DESCRIPTION Every queue must be initialized before it is used. The only time it is valid to re-initialize a queue is after it has been destroyed. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGQinitialize_queue HDGLinitialize_list /****************************************************************************** NAME HDGQdestroy_queue DESCRIPTION When a queue is no longer needed, it should be destroyed. This process will automatically remove all remaining objects from the queue. However, the memory for these objects will not be reclaimed, so if the objects have no other references, care should be taken to purge the queue and free all objects before destroying the queue. It is an error to destroy a queue more than once (unless it has been re-initialized in the meantime). RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGQdestroy_queue HDGLdestroy_list /****************************************************************************** NAME HDGQenqueue DESCRIPTION This function will add the specified object to the tail of the queue. The pointer must not be NULL. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGQenqueue HDGLadd_to_end /****************************************************************************** NAME HDGQdequeue DESCRIPTION This function will remove the first object from the head of the queue and return it. If the queue is empty, NULL is returned. RETURNS First element in the queue in non-empty, else NULL. *******************************************************************************/ #define HDGQdequeue HDGLremove_from_beginning /****************************************************************************** NAME HDGQdequeue_all DESCRIPTION This function will remove all objects from the queue. Note that the memory for these objects will not be reclaimed, so if the objects have no other references, it is best to avoid this function and HDGQdequeue the objects one by one, freeing them when necessary. RETURNS Nothing *******************************************************************************/ #define HDGQdequeue_all HDGLremove_all /****************************************************************************** NAME HDGQpeek_at_head DESCRIPTION This function will return the object at the head of the queue. If the queue is empty, NULL is returned. RETURNS First element in the queue in non-empty, else NULL. *******************************************************************************/ #define HDGQpeek_at_head HDGLpeek_at_beginning /****************************************************************************** NAME HDGQpeek_at_tail DESCRIPTION This function will return the object at the tail of the queue. If the queue is empty, NULL is returned. RETURNS Last element in the queue in non-empty, else NULL. *******************************************************************************/ #define HDGQpeek_at_tail HDGLpeek_at_end /****************************************************************************** NAME HDGQcopy_queue DESCRIPTION This function will return a copy of the queue. The objects themselves are not copied; only new references to them are made. RETURNS SUCCEED/FAIL *******************************************************************************/ #define HDGQcopy_queue HDGLcopy_list #endif /* H4_GLIST_PRIV_H */ hdf4-hdf4.3.1/hdf/src/h4config.h.in000066400000000000000000000110411503061704500166330ustar00rootroot00000000000000/* hdf/src/h4config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Define H4_F77_FUNC as name ## */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* Define to 1 if your Fortran compiler doesn't accept -c and -o together. */ #undef F77_NO_MINUS_C_MINUS_O /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_JPEGLIB_H /* Define to 1 if you have the `jpeg' library (-ljpeg). */ #undef HAVE_LIBJPEG /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `sz' library (-lsz). */ #undef HAVE_LIBSZ /* Define to 1 if you have the `ws2_32' library (-lws2_32). */ #undef HAVE_LIBWS2_32 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define if we export HDF4-built unmangled netCDF 2.3.2 API calls */ #undef HAVE_NETCDF /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_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 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 `system' function. */ #undef HAVE_SYSTEM /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* 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_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define if szip has encoder */ #undef HAVE_SZIP_ENCODER /* Define to 1 if you have the header file. */ #undef HAVE_SZLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `wait' function. */ #undef HAVE_WAIT /* Define if we export HDF4-built unmangled netCDF 2.3.2 API calls */ #undef HAVE_WIN32_API /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define if deprecated public API symbols are disabled */ #undef NO_DEPRECATED_SYMBOLS /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* 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 `long', as computed by sizeof. */ #undef SIZEOF_LONG /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif hdf4-hdf4.3.1/hdf/src/hbitio.c000066400000000000000000001057411503061704500160110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE hbitio.c HDF bit level I/O routines REMARKS These functions operate on top of the "H" layer routines (i.e. they call Hstartread, Hstartwrite, Hread, Hseek, Hwrite, etc.) and depend on them for all actual I/O to data elements in the file. This may be somewhat slow, but it prevents having to duplicate code for that access. EXPORTED ROUTINES Hstartbitread - open a dataset for bitfile dataset reading Hstartbitwrite - open a dataset for bitfile dataset writing Happendable - make a writable dataset appendable Hbitread - read bits from a bitfile dataset Hbitwrite - write bits to a bitfile dataset Hbitseek - seek to a given bit offset in a bitfile dataset Hendbitaccess - close off access to a bitfile dataset LOCAL ROUTINES HIbitflush - flush the bits out to a writable bitfile HIget_bitfile_rec - get a free bitfile record HIread2write - switch from reading bits to writing them HIwrite2read - switch from writing bits to reading them */ #include "hdf_priv.h" #include "hbitio_priv.h" #include "hfile_priv.h" /* Define the number of elements in the buffered array */ #define BITBUF_SIZE 4096 /* Macro to define the number of bits able to be read/written at a time */ #define DATANUM (sizeof(uint32) * 8) /* Local Variables */ const uint8 maskc[9] = {0, 1, 3, 7, 15, 31, 63, 127, 255}; const uint32 maskl[33] = {0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffffUL}; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* Local Function Declarations */ static bitrec_t *HIget_bitfile_rec(void); static intn HIbitflush(bitrec_t *bitfile_rec, intn flushbit, intn writeout); static intn HIwrite2read(bitrec_t *bitfile_rec); static intn HIread2write(bitrec_t *bitfile_rec); static intn HIbitstart(void); /* Actual Function Definitions */ /*-------------------------------------------------------------------------- NAME Hstartbitread -- locate and position a bit-read access elt on a tag/ref USAGE int32 Hstartbitread(fileid, tag, ref) int fileid; IN: id of file to attach access element to int tag; IN: tag to search for int ref; IN: ref to search for RETURNS returns id of bit-access element if successful, otherwise FAIL (-1) DESCRIPTION Calls Hstartread and initializes bit-level structures. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 Hstartbitread(int32 file_id, uint16 tag, uint16 ref) { int32 aid; /* Access ID for the bit-level routines to use */ struct bitrec_t *bitfile_rec; /* Pointer to the bitfile record */ int32 ret_value; /* return bit ID */ /* clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (HIbitstart() == FAIL) HRETURN_ERROR(DFE_CANTINIT, FAIL); /* Try to get an AID */ if ((aid = Hstartread(file_id, tag, ref)) == FAIL) HRETURN_ERROR(DFE_BADAID, FAIL); /* get a slot in the access record array */ if ((bitfile_rec = HIget_bitfile_rec()) == NULL) HRETURN_ERROR(DFE_TOOMANY, FAIL); bitfile_rec->acc_id = aid; ret_value = HAregister_atom(BITIDGROUP, bitfile_rec); bitfile_rec->bit_id = ret_value; if (HQuerylength(aid, &bitfile_rec->max_offset) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); bitfile_rec->byte_offset = 0; bitfile_rec->access = 'r'; bitfile_rec->mode = 'r'; bitfile_rec->bytez = bitfile_rec->bytea + BITBUF_SIZE; /* pre-read the first block into the buffer */ if (bitfile_rec->max_offset > bitfile_rec->byte_offset) { int32 read_size; /* number of bytes to read into buffer */ int32 n; /* number of bytes actually read */ read_size = MIN((bitfile_rec->max_offset - bitfile_rec->byte_offset), BITBUF_SIZE); if ((n = Hread(bitfile_rec->acc_id, read_size, bitfile_rec->bytea)) == FAIL) return FAIL; /* EOF? somebody pulled the rug out from under us! */ bitfile_rec->buf_read = (intn)n; /* keep track of the number of bytes in buffer */ bitfile_rec->bytep = bitfile_rec->bytea; /* set to the beginning of the buffer */ } /* end if */ else { bitfile_rec->bytep = bitfile_rec->bytez; /* set to the end of the buffer to force read */ bitfile_rec->buf_read = 0; /* set the number of bytes in buffer to 0 */ } /* end else */ bitfile_rec->block_offset = 0; bitfile_rec->count = 0; return ret_value; } /* Hstartbitread() */ /*-------------------------------------------------------------------------- NAME Hstartbitwrite -- set up a bit access elt for a write USAGE int32 Hstartbitwrite(fileid, tag, ref, len) int fileid; IN: id of file to write to int tag; IN: tag to write to int ref; IN: ref to write to long length; IN: the length of the data element (in bytes) RETURNS returns id of bit access element if successful and FAIL otherwise DESCRIPTION Set up a bit-write access elt to write out a data element. Calls Hstartwrite for most initialization and just initializes the bit- level stuff here. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 Hstartbitwrite(int32 file_id, uint16 tag, uint16 ref, int32 length) { bitrec_t *bitfile_rec; /* access record */ int32 aid; /* Access ID for the bit-level routines to use */ intn exists; /* whether dataset exists already */ int32 ret_value; /* return bit ID */ /* clear error stack and check validity of file id */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (HIbitstart() == FAIL) HRETURN_ERROR(DFE_CANTINIT, FAIL); exists = (Hexist(file_id, tag, ref) == SUCCEED) ? TRUE : FALSE; /* Try to get an AID */ if ((aid = Hstartwrite(file_id, tag, ref, length)) == FAIL) HRETURN_ERROR(DFE_BADAID, FAIL); /* get empty slot in bit-access records */ if ((bitfile_rec = HIget_bitfile_rec()) == NULL) HRETURN_ERROR(DFE_TOOMANY, FAIL); bitfile_rec->acc_id = aid; ret_value = HAregister_atom(BITIDGROUP, bitfile_rec); bitfile_rec->bit_id = ret_value; bitfile_rec->byte_offset = 0; bitfile_rec->block_offset = 0; if (exists == TRUE) { if (HQuerylength(aid, &bitfile_rec->max_offset) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* pre-read the first block into the buffer */ if (bitfile_rec->max_offset > bitfile_rec->byte_offset) { int32 read_size; /* number of bytes to read into buffer */ int32 n; /* number of bytes actually read */ read_size = MIN((bitfile_rec->max_offset - bitfile_rec->byte_offset), BITBUF_SIZE); if ((n = Hread(bitfile_rec->acc_id, read_size, bitfile_rec->bytea)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); /* EOF? somebody pulled the rug out from under us! */ bitfile_rec->buf_read = (intn)n; /* keep track of the number of bytes in buffer */ if (Hseek(bitfile_rec->acc_id, bitfile_rec->block_offset, DF_START) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ } /* end if */ else { bitfile_rec->max_offset = 0; bitfile_rec->buf_read = 0; /* set the number of bytes in buffer to 0 */ } /* end else */ bitfile_rec->access = 'w'; bitfile_rec->mode = 'w'; bitfile_rec->bytez = bitfile_rec->bytea + BITBUF_SIZE; bitfile_rec->bytep = bitfile_rec->bytea; /* set to the beginning of the buffer */ bitfile_rec->count = BITNUM; bitfile_rec->bits = 0; return ret_value; } /* end Hstartbitwrite() */ /*-------------------------------------------------------------------------- NAME Hbitappendable -- make a bitio AID appendable USAGE intn Hbitappendable(bitid) int32 bitid; IN: id of bit-element to make appendable RETURNS SUCCEED for success FAIL to indicate failure DESCRIPTION If a dataset is at the end of a file, allow Hbitwrite()s to write past the end of a file. Allows expanding datasets without the use of linked blocks. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hbitappendable(int32 bitid) { bitrec_t *bitfile_rec; /* access record */ /* clear error stack and check validity of file id */ HEclear(); if ((bitfile_rec = HAatom_object(bitid)) == NULL) HRETURN_ERROR(DFE_ARGS, FAIL); /* Check for write access */ if (bitfile_rec->access != 'w') HRETURN_ERROR(DFE_BADACC, FAIL); if (Happendable(bitfile_rec->acc_id) == FAIL) HRETURN_ERROR(DFE_NOTENOUGH, FAIL); return SUCCEED; } /* end Hbitappendable() */ /*-------------------------------------------------------------------------- NAME Hbitwrite -- write a number of bits out to a bit-element USAGE intn Hbitwrite(bitid, count, data) int32 bitid; IN: id of bit-element to write to intn count; IN: number of bits to write uint32 data; IN: actual data bits to output (bits to output must be in the low bits) RETURNS the number of bits written for successful write, FAIL to indicate failure DESCRIPTION Write a number of bits out to a bit-element. This function buffers the bits and then writes them out when appropriate with Hwrite(). GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hbitwrite(int32 bitid, intn count, uint32 data) { static int32 last_bit_id = (-1); /* the bit ID of the last bitfile_record accessed */ static bitrec_t *bitfile_rec = NULL; /* access record */ intn orig_count = count; /* keep track of orig, number of bits to output */ /* clear error stack and check validity of file id */ HEclear(); if (count <= 0) HRETURN_ERROR(DFE_ARGS, FAIL); /* cache the bitfile_record since this routine gets called so many times */ if (bitid != last_bit_id) { /* This needs a mutex semaphore when we go to a multi-threaded version of the library -QAK */ bitfile_rec = HAatom_object(bitid); last_bit_id = bitid; } /* end if */ if (bitfile_rec == NULL) HRETURN_ERROR(DFE_ARGS, FAIL); /* Check for write access */ if (bitfile_rec->access != 'w') HRETURN_ERROR(DFE_BADACC, FAIL); if (count > (intn)DATANUM) count = (intn)DATANUM; /* change bitfile modes if necessary */ if (bitfile_rec->mode == 'r') HIread2write(bitfile_rec); data &= maskl[count]; /* if the new bits will not fill up a byte, then just */ /* merge the new bits into the current bits buffer */ if (count < bitfile_rec->count) { bitfile_rec->bits |= (uint8)(data << (bitfile_rec->count -= count)); return orig_count; } /* end if */ /* fill up the current bits buffer and output the byte */ *(bitfile_rec->bytep) = (uint8)(bitfile_rec->bits | (uint8)(data >> (count -= bitfile_rec->count))); bitfile_rec->byte_offset++; if (++bitfile_rec->bytep == bitfile_rec->bytez) { int32 write_size; write_size = bitfile_rec->bytez - bitfile_rec->bytea; bitfile_rec->bytep = bitfile_rec->bytea; if (Hwrite(bitfile_rec->acc_id, write_size, bitfile_rec->bytea) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); bitfile_rec->block_offset += write_size; /* check if we should pre-read the next block into the buffer */ if (bitfile_rec->max_offset > bitfile_rec->byte_offset) { int32 read_size; /* number of bytes to read into buffer */ int32 n; /* number of bytes actually read */ read_size = MIN((bitfile_rec->max_offset - bitfile_rec->byte_offset), BITBUF_SIZE); if ((n = Hread(bitfile_rec->acc_id, read_size, bitfile_rec->bytea)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); /* EOF? somebody pulled the rug out from under us! */ bitfile_rec->buf_read = n; /* keep track of the number of bytes in buffer */ if (Hseek(bitfile_rec->acc_id, bitfile_rec->block_offset, DF_START) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ } /* end if */ /* output any and all remaining whole bytes */ while (count >= (intn)BITNUM) { *(bitfile_rec->bytep) = (uint8)(data >> (count -= (intn)BITNUM)); bitfile_rec->byte_offset++; if (++bitfile_rec->bytep == bitfile_rec->bytez) { int32 write_size; write_size = bitfile_rec->bytez - bitfile_rec->bytea; bitfile_rec->bytep = bitfile_rec->bytea; if (Hwrite(bitfile_rec->acc_id, write_size, bitfile_rec->bytea) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); bitfile_rec->block_offset += write_size; /* check if we should pre-read the next block into the buffer */ if (bitfile_rec->max_offset > bitfile_rec->byte_offset) { int32 read_size; /* number of bytes to read into buffer */ int32 n; /* number of bytes actually read */ read_size = MIN((bitfile_rec->max_offset - bitfile_rec->byte_offset), BITBUF_SIZE); if ((n = Hread(bitfile_rec->acc_id, read_size, bitfile_rec->bytea)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); /* EOF? somebody pulled the rug out from under us! */ bitfile_rec->buf_read = n; /* keep track of the number of bytes in buffer */ if (Hseek(bitfile_rec->acc_id, bitfile_rec->block_offset, DF_START) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ } /* end if */ } /* end while */ /* put any remaining bits into the bits buffer */ if ((bitfile_rec->count = (intn)BITNUM - count) > 0) bitfile_rec->bits = (uint8)(data << bitfile_rec->count); /* Update the offset in the buffer */ if (bitfile_rec->byte_offset > bitfile_rec->max_offset) bitfile_rec->max_offset = bitfile_rec->byte_offset; return orig_count; } /* end Hbitwrite() */ /*-------------------------------------------------------------------------- NAME Hbitread -- read a number of bits from a bit-element USAGE intn Hbitread(bitid, count, data) int32 bitid; IN: id of bit-element to write to intn count; IN: number of bits to write uint32 *data; IN: pointer to the bits to read OUT: points to the bits read in (bits input will be in the low bits) RETURNS the number of bits read for successful write, FAIL to indicate failure DESCRIPTION Read a number of bits from a bit-element. This function buffers the bits and then reads them when appropriate with Hread(). GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hbitread(int32 bitid, intn count, uint32 *data) { static int32 last_bit_id = (-1); /* the bit ID of the last bitfile_record accessed */ static bitrec_t *bitfile_rec = NULL; /* access record */ uint32 l; uint32 b = 0; /* bits to return */ intn orig_count; /* the original number of bits to read in */ int32 n; /* clear error stack and check validity of file id */ HEclear(); if (count <= 0) HRETURN_ERROR(DFE_ARGS, FAIL); /* cache the bitfile_record since this routine gets called so many times */ if (bitid != last_bit_id) { /* This needs a mutex semaphore when we go to a multi-threaded version of the library -QAK */ bitfile_rec = HAatom_object(bitid); last_bit_id = bitid; } /* end if */ if (bitfile_rec == NULL) HRETURN_ERROR(DFE_ARGS, FAIL); /* Check for write access */ /* change bitfile modes if necessary */ if (bitfile_rec->mode == 'w') HIwrite2read(bitfile_rec); if (count > (intn)DATANUM) /* truncate the count if it's too large */ count = DATANUM; /* if the request can be satisfied with just the */ /* buffered bits then do the shift and return */ if (count <= bitfile_rec->count) { *data = (uint32)((uintn)bitfile_rec->bits >> (bitfile_rec->count -= count)) & (uint32)maskc[count]; return count; } /* end if */ /* keep track of the original number of bits to read in */ orig_count = count; /* get all the buffered bits into the correct position first */ if (bitfile_rec->count > 0) { b = (uint32)(bitfile_rec->bits & maskc[bitfile_rec->count]); b <<= (count -= bitfile_rec->count); } /* end if */ /* bring in as many whole bytes as the request allows */ while (count >= (intn)BITNUM) { if (bitfile_rec->bytep == bitfile_rec->bytez) { n = Hread(bitfile_rec->acc_id, BITBUF_SIZE, bitfile_rec->bytea); if (n == FAIL) { /* EOF */ bitfile_rec->count = 0; /* make certain that we don't try to access the file->bits information */ *data = b; /* assign the bits read in */ return orig_count - count; /* break out now */ } /* end if */ bitfile_rec->block_offset += bitfile_rec->buf_read; /* keep track of the number of bytes in buffer */ bitfile_rec->bytez = n + (bitfile_rec->bytep = bitfile_rec->bytea); bitfile_rec->buf_read = n; /* keep track of the number of bytes in buffer */ } /* end if */ l = (uint32)(*bitfile_rec->bytep++); b |= (uint32)(l << (count -= (intn)BITNUM)); bitfile_rec->byte_offset++; if (bitfile_rec->byte_offset > bitfile_rec->max_offset) bitfile_rec->max_offset = bitfile_rec->byte_offset; } /* end while */ /* split any partial request with the bits buffer */ if (count > 0) { if (bitfile_rec->bytep == bitfile_rec->bytez) { n = Hread(bitfile_rec->acc_id, BITBUF_SIZE, bitfile_rec->bytea); if (n == FAIL) { /* EOF */ bitfile_rec->count = 0; /* make certain that we don't try to access the file->bits information */ *data = b; /* assign the bits read in */ return orig_count - count; /* return now */ } /* end if */ bitfile_rec->block_offset += bitfile_rec->buf_read; /* keep track of the number of bytes in buffer */ bitfile_rec->bytez = n + (bitfile_rec->bytep = bitfile_rec->bytea); bitfile_rec->buf_read = n; /* keep track of the number of bytes in buffer */ } /* end if */ bitfile_rec->count = ((intn)BITNUM - count); l = (uint32)(bitfile_rec->bits = *bitfile_rec->bytep++); b |= l >> bitfile_rec->count; bitfile_rec->byte_offset++; if (bitfile_rec->byte_offset > bitfile_rec->max_offset) bitfile_rec->max_offset = bitfile_rec->byte_offset; } /* end if */ else bitfile_rec->count = 0; *data = b; return orig_count; } /* end Hbitread() */ /*-------------------------------------------------------------------------- NAME Hbitseek -- seek to a given bit position in a bit-element USAGE intn Hbitseek(bitid, offset) int32 bitid; IN: id of bit-element to write to intn byte_offset; IN: byte offset in the bit-element intn bit_offset; IN: bit offset from the byte offset RETURNS returns FAIL (-1) if fail, SUCCEED (0) otherwise. DESCRIPTION Seek to a bit offset in a bit-element. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES If seeking to the 15th bit in a bit-element, the call would look like: Hbitseek(bitid,1,7); Converting from a direct bit offset variable to this call looks like: Hbitseek(bitid,bit_offset/8,bit_offset%8); REVISION LOG --------------------------------------------------------------------------*/ intn Hbitseek(int32 bitid, int32 byte_offset, intn bit_offset) { bitrec_t *bitfile_rec; /* access record */ int32 seek_pos; /* position of block to seek to */ int32 read_size; /* number of bytes to read into buffer */ int32 n; /* number of bytes actually read */ intn new_block; /* whether to move to another block in the dataset */ /* clear error stack and check validity of file id */ HEclear(); if (byte_offset < 0 || bit_offset < 0 || bit_offset > ((intn)BITNUM - 1) || (bitfile_rec = HAatom_object(bitid)) == NULL || byte_offset > bitfile_rec->max_offset) HRETURN_ERROR(DFE_ARGS, FAIL); /* determine whether we need to seek to another block in the file */ new_block = (byte_offset < bitfile_rec->block_offset || byte_offset >= bitfile_rec->block_offset + BITBUF_SIZE) ? TRUE : FALSE; if (bitfile_rec->mode == 'w') if (HIbitflush(bitfile_rec, -1, new_block) == FAIL) /* flush, but merge */ HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (new_block == TRUE) { seek_pos = (byte_offset / BITBUF_SIZE) * BITBUF_SIZE; if (Hseek(bitfile_rec->acc_id, seek_pos, DF_START) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); read_size = MIN((bitfile_rec->max_offset - seek_pos), BITBUF_SIZE); if ((n = Hread(bitfile_rec->acc_id, read_size, bitfile_rec->bytea)) == FAIL) HRETURN_ERROR(DFE_READERROR, FAIL); /* EOF? somebody pulled the rug out from under us! */ bitfile_rec->bytez = n + (bitfile_rec->bytep = bitfile_rec->bytea); bitfile_rec->buf_read = n; /* keep track of the number of bytes in buffer */ bitfile_rec->block_offset = seek_pos; if (bitfile_rec->mode == 'w') /* if writing, return the file offset to it's original position */ if (Hseek(bitfile_rec->acc_id, seek_pos, DF_START) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ bitfile_rec->byte_offset = byte_offset; /* set to the correct position in the buffer */ bitfile_rec->bytep = bitfile_rec->bytea + (byte_offset - bitfile_rec->block_offset); if (bit_offset > 0) { bitfile_rec->count = ((intn)BITNUM - bit_offset); if (bitfile_rec->mode == 'w') { /* if writing, mask off bits not yet written */ bitfile_rec->bits = *(bitfile_rec->bytep); bitfile_rec->bits &= maskc[bit_offset] << bitfile_rec->count; } /* end if */ else { bitfile_rec->bits = *bitfile_rec->bytep++; } /* end else */ } /* end if */ else { if (bitfile_rec->mode == 'w') { /* if writing, mask off bits not yet written */ bitfile_rec->count = BITNUM; bitfile_rec->bits = 0; } /* end if */ else { bitfile_rec->count = 0; } /* end else */ } /* end else */ return SUCCEED; } /* end Hbitseek() */ /*-------------------------------------------------------------------------- NAME Hgetbit -- read 1 bit from a bit-element USAGE intn Hgetbit(bitid) int32 bitid; IN: id of bit-element to read from RETURNS the bit read in (0/1) on success, FAIL(-1) to indicate failure DESCRIPTION Read one bit from a bit-element. This function is mostly a wrapper around Hbitread. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hgetbit(int32 bitid) { uint32 data; if (Hbitread(bitid, 1, &data) == FAIL) HRETURN_ERROR(DFE_BITREAD, FAIL); return (intn)data; } /* end Hgetbit() */ /*-------------------------------------------------------------------------- NAME Hendbitaccess -- to dispose of a bitfile element USAGE int32 Hendbitaccess(bitfile_id,flushbit) int32 bitfile_id; IN: id of bitfile element to dispose of intn flushbit; IN: determines how to flush leftover bits (leftover bits are bits that have been buffered, but are less than the BITNUM (usually set to 8) number of bits) 0 - flush with zeros 1 - flush with ones -1 - throw away any leftover bits RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Used to dispose of a bitfile element. Flushes any buffered bits to the dataset (if writing), and then calls Hendaccess. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 Hendbitaccess(int32 bitfile_id, intn flushbit) { bitrec_t *bitfile_rec; /* bitfile record */ /* check validity of access id */ bitfile_rec = HAatom_object(bitfile_id); if (bitfile_rec == NULL) HRETURN_ERROR(DFE_ARGS, FAIL); if (bitfile_rec->mode == 'w') if (HIbitflush(bitfile_rec, flushbit, TRUE) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); free(bitfile_rec->bytea); /* free the space for the buffer */ if (HAremove_atom(bitfile_id) == NULL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); if (Hendaccess(bitfile_rec->acc_id) == FAIL) HRETURN_ERROR(DFE_CANTENDACCESS, FAIL); free(bitfile_rec); return SUCCEED; } /* end Hendbitaccess() */ /*-------------------------------------------------------------------------- NAME HIbitstart PURPOSE Bit I/O initialization routine USAGE intn HIbitstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION One-time initialization of the interface GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn HIbitstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Create the file ID and access ID groups */ if (HAinit_group(BITIDGROUP, 16) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end HIbitstart() */ /*-------------------------------------------------------------------------- NAME HIbitflush -- flush the bits out to a writable bitfile USAGE intn HIbitflush(bitfile_rec,flushbit) bitrec_t *bitfile_rec; IN: record of bitfile element to flush intn flushbit; IN: determines how to flush leftover bits (leftover bits are bits that have been buffered, but are less than the BITNUM (usually set to 8) number of bits) 0 - flush with zeros 1 - flush with ones -1 - throw away any leftover bits RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Used to flush the buffer of a bitfile element, preserving the bits in the buffer which have not been modified. The flushbits parameter is only used when the last bits written to the element are at the actual end of the dataset, not somewhere in the middle. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This routine does _not_ leave the bitfile in a position to continue I/O from the current point, additional modifications would have to be made in order to accommodate this. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn HIbitflush(bitrec_t *bitfile_rec, intn flushbit, intn writeout) { intn write_size; /* number of bytes to write out */ if (bitfile_rec->count < (intn)BITNUM) { /* check if there are any */ if (bitfile_rec->byte_offset > bitfile_rec->max_offset) { if (flushbit != (-1)) /* only flush bits if asked and there are bits to flush */ if (Hbitwrite(bitfile_rec->bit_id, bitfile_rec->count, (uint32)(flushbit ? 0xFF : 0)) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ else { /* we are in the middle of a dataset and need to integrate */ /* mask off a place for the new bits */ *(bitfile_rec->bytep) &= (uint8)(~(maskc[(intn)BITNUM - bitfile_rec->count] << bitfile_rec->count)); /* merge in new bits */ *(bitfile_rec->bytep) |= bitfile_rec->bits; bitfile_rec->bytep++; bitfile_rec->byte_offset++; /* Update the offset in the buffer */ if (bitfile_rec->byte_offset > bitfile_rec->max_offset) bitfile_rec->max_offset = bitfile_rec->byte_offset; bitfile_rec->count = BITNUM; /* reset count */ bitfile_rec->bits = 0; /* reset bits */ } /* end else */ } /* end if */ if (writeout == TRUE) { /* only write data out if necessary */ write_size = (intn)MIN((bitfile_rec->bytez - bitfile_rec->bytea), bitfile_rec->max_offset); if (write_size > 0) if (Hwrite(bitfile_rec->acc_id, write_size, bitfile_rec->bytea) == FAIL) HRETURN_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ return SUCCEED; } /* HIbitflush */ /*-------------------------------------------------------------------------- HIget_bitfile_rec - get a new bitfile record --------------------------------------------------------------------------*/ static bitrec_t * HIget_bitfile_rec(void) { bitrec_t *ret_value = NULL; if ((ret_value = calloc(1, sizeof(bitrec_t))) == NULL) HRETURN_ERROR(DFE_NOSPACE, NULL); if ((ret_value->bytea = calloc(1, BITBUF_SIZE)) == NULL) HRETURN_ERROR(DFE_NOSPACE, NULL); return ret_value; } /* HIget_bitfile_rec */ /*-------------------------------------------------------------------------- NAME HIread2write - switch from reading bits to writing them USAGE intn HIread2write(bitfile_rec) bitrec_t *bitfile_rec; IN: record of bitfile element to switch RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Used to switch a bitfile (which has 'w' access) from read mode to write mode, at the same bit offset in the file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn HIread2write(bitrec_t *bitfile_rec) { bitfile_rec->block_offset = (int32)LONG_MIN; /* set to bogus value */ bitfile_rec->mode = 'w'; /* change to write mode */ if (Hbitseek(bitfile_rec->bit_id, bitfile_rec->byte_offset, ((intn)BITNUM - bitfile_rec->count)) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); return SUCCEED; } /* HIread2write */ /*-------------------------------------------------------------------------- NAME HIwrite2read - switch from writing bits to reading them USAGE intn HIwrite2read(bitfile_rec) bitrec_t *bitfile_rec; IN: record of bitfile element to switch RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Used to switch a bitfile (which has 'w' access) from write mode to read mode, at the same bit offset in the file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn HIwrite2read(bitrec_t *bitfile_rec) { intn prev_count = bitfile_rec->count; /* preserve this for later */ int32 prev_offset = bitfile_rec->byte_offset; if (HIbitflush(bitfile_rec, -1, TRUE) == FAIL) /* flush any leftover bits */ HRETURN_ERROR(DFE_WRITEERROR, FAIL); bitfile_rec->block_offset = (int32)LONG_MIN; /* set to bogus value */ bitfile_rec->mode = 'r'; /* change to read mode */ if (Hbitseek(bitfile_rec->bit_id, prev_offset, ((intn)BITNUM - prev_count)) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); return SUCCEED; } /* HIwrite2read */ /*-------------------------------------------------------------------------- NAME HPbitshutdown PURPOSE Terminate various static buffers. USAGE intn HPbitshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the Hbit routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HPbitshutdown(void) { /* Shutdown the file ID atom group */ HAdestroy_group(BITIDGROUP); return SUCCEED; } /* end HPbitshutdown() */ hdf4-hdf4.3.1/hdf/src/hbitio.h000066400000000000000000000026241503061704500160120ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** hbitio.h ** ** Data structures and macros for bitfile access to HDF data objects. ** These are mainly used for compression I/O and N-bit data objects. */ #ifndef H4_HBITIO_H #define H4_HBITIO_H #include "hdf.h" /* Macro to define the number of bits cached in the 'bits' variable */ #define BITNUM (sizeof(uint8) * 8) /* Function-like Macros */ #define Hputbit(bitid, bit) ((Hbitwrite(bitid, 1, (uint32)bit) == FAIL) ? FAIL : SUCCEED) #endif /* H4_HBITIO_H */ hdf4-hdf4.3.1/hdf/src/hbitio_priv.h000066400000000000000000000046501503061704500170530ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** hbitio_priv.h ** ** Data structures and macros for bitfile access to HDF data objects. ** These are mainly used for compression I/O and N-bit data objects. */ #ifndef H4_HBITIO_PRIV_H #define H4_HBITIO_PRIV_H #include "hdf.h" typedef struct bitrec_t { int32 acc_id; /* Access ID for H layer I/O routines */ int32 bit_id; /* Bitfile ID for internal use */ /* Note that since HDF has signed 32bit offset limit we need to change this to signed since the get passed to Hxxx calls which take signed 32bit arguments */ int32 block_offset; /* offset of the current buffered block in the dataset */ int32 max_offset; /* offset of the last byte written to the dataset */ int32 byte_offset; /* offset of the current byte in the dataset */ intn count; /* bit count to next boundary */ intn buf_read; /* number of bytes read into buffer (necessary for random I/O) */ uint8 access; /* What the access on this file is ('r', 'w', etc..) */ uint8 mode; /* how are we interacting with the data now ('r', 'w', etc) */ uint8 bits; /* extra bit buffer, 0..BITNUM-1 bits */ uint8 *bytep; /* current position in buffer */ uint8 *bytez; /* end of buffer to compare */ uint8 *bytea; /* byte buffer */ } bitrec_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI const uint8 maskc[9]; HDFLIBAPI const uint32 maskl[33]; #ifdef __cplusplus } #endif #endif /* H4_HBITIO_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hblocks.c000066400000000000000000002044431503061704500161570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------------------------------ hblocks.c ------------------------------- routines to implement linked-block elements Linked element in HDF files created in two ways -- created from the start or -- converted from a normal data element A linked-block element is a special element. Special elements are flagged with a set high-bit in their tag. Thus, a tag t has BASETAG == t & 0x7f and is a special tag if t & 0x80 != 0x00 The first 16 bits of the meta-element that this tag/ref points to tells us what type of special element this is. If these 16 bits is SPECIAL_LINKED, then it contains information about the linked blocks. After this 16 bits, 32 bit which is the length of each block, after which is the information header: ---------------------------------------------------------------------- | # blocks in | tag/ref of | tag/ref of blocks list ....... | | this header | next header| | ---------------------------------------------------------------------- File Description of Linked Block Element **************************************** DD for Linked Block pointing to Linked Block Description Record ============================================================== <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- |extended tag | reference # | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V LINKED BLOCK DESCRIPTION RECORD(LBDR - 16 bytes) =============================================== <- 2 bytes -> <- 4 bytes -> <- 4 bytes -> <- 4 bytes -> <- 2 bytes -> ---------------------------------------------- ------------------------ |ext_tag_desc | elem_tot_len | blk_length | num_blk | link_ref | ---------------------------------------------- ------------------------ ext_tag_desc - SPECIAL_LINKED(16 bit constant), identifies this as a linked block description record elem_tot_len - Length of the entire element(32 bit field) blk_length - Length of successive data blocks(32 bit field) after first block, first block is calculated. num_blk - Number of blocks per block table(32 bit field) link_ref - Reference number of the first block table(16 bit field) Linked Block Table(12 + 2 + 2 + 2 + 2 + ... bytes) =================================================== <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- |link_blk_tag | link_ref | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V <- 2 bytes -> <- 2 bytes -> <- 2 bytes -> <- 2 bytes -> <-... -----------------------------------------------------------... | next_ref | block_ref_1 | block_ref_2 | block_ref_3 | ... -----------------------------------------------------------... link_blk_tag - DFTAG_LINKED(16 bit) link_ref - Reference number for this table(16 bit) next_ref - Reference number for next block table(16 bit) Zero(0) signifies no more block tables for this element. blk_ref_x - Reference number for data block X (16 bit). e.g. for data block 1 <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- | DFTAG_LINKED | block_ref_1 | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V ----------------------- | Data_block | ----------------------- Note: The "Length" here is specified by either "elem_first_len" or "blk_length". For now, HLcreate() has the best description of what the on-disk representation of a linked block element looks like. EXPORTED ROUTINES HLcreate -- create a linked block element HLconvert -- convert an AID into a linked block element HLgetdatainfo -- get data information of linked blocks HDinqblockinfo -- return info about linked blocks HLPstread -- open an access record for reading HLPstwrite -- open an access record for writing HLPseek -- set the seek posn HLPread -- read some data out of a linked block element HLPwrite -- write out some data to a linked block HLPinquire -- Hinquire for linked blocks HLPendacess -- close a linked block AID HLPinfo -- return info about a linked block element LOCAL ROUTINES HLIstaccess -- set up AID to access a linked block elem HLIgetlink -- get link information HLInewlink -- write out some data to a linked block */ #include "hdf_priv.h" #include "hfile_priv.h" /* block_t - record of a linked block. contains the tag and ref of the data elt that forms the linked block */ typedef struct block_t { uint16 ref; /* ref of the linked block */ } block_t; /* link_t - a linked list block table. Very similar to the dd block structure */ typedef struct link_t { uint16 nextref; /* ref of the next block table */ struct link_t *next; /* ptr to the next block table */ struct block_t *block_list; /* ptr to the block list for this table */ } link_t; /* information on this special linked block data elt */ typedef struct linkinfo_t { int attached; /* how many access records refer to this elt */ int32 length; /* the actual length of the data elt */ int32 first_length; /* length of first block */ int32 block_length; /* the length of the remaining blocks */ int32 number_blocks; /* total number of blocks in each link/block table */ uint16 link_ref; /* ref of the first block table structure */ link_t *link; /* pointer to the first block table */ link_t *last_link; /* pointer to the last block table */ } linkinfo_t; /* private functions */ static int32 HLIstaccess(accrec_t *access_rec, int16 acc_mode); static link_t *HLInewlink(int32 file_id, int32 number_blocks, uint16 link_ref, uint16 first_block_ref); static link_t *HLIgetlink(int32 file_id, uint16 ref, int32 number_blocks); /* the accessing function table for linked blocks */ funclist_t linked_funcs = { HLPstread, HLPstwrite, HLPseek, HLPinquire, HLPread, HLPwrite, HLPendaccess, HLPinfo, NULL /* no routine registered */ }; /* ------------------------------------------------------------------------ NAME HLcreate -- create a linked block element USAGE int32 HLcreate(fid, tag, ref, blocklen, numblocks) int32 fid; IN: file to put linked block element in uint16 tag; IN: tag of element uint16 ref; IN: ref of element int32 blocklen; IN: length of standard block int32 numblocks; IN: number of blocks per block list RETURNS The AID of newly created linked block element, FAIL on error. DESCRIPTION This routine takes an HDF element and promotes it into a linked block element. Basically, the element becomes a linked list allowing easy appending. If the element already exists, it is promoted to being a linked block element, otherwise a new element is created. All of the pieces of the linked list are the same size (blocklen) except for the first one which stays the size of the element at the time HLcreate was called. numblocks gives the number of linked list objects in each block header. The ideal setting for numblocks and blocklen are very data and application dependent. --------------------------------------------------------------------------- */ int32 HLcreate(int32 file_id, uint16 tag, uint16 ref, int32 block_length, int32 number_blocks) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access record */ int32 dd_aid; /* AID for writing the special info */ linkinfo_t *info = NULL; /* information for the linked blocks elt */ uint16 link_ref; /* the ref of the link structure (block table) */ atom_t data_id; /* dd ID of existing regular element */ uint16 new_data_tag, new_data_ref = 0; /* Tag/ref of the new data in the file */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ uint16 special_tag; /* special version of this tag */ uint8 local_ptbuf[16]; int32 ret_value = SUCCEED; /* clear error stack and validate file record id */ HEclear(); file_rec = HAatom_object(file_id); /* check args and create special tag */ if (BADFREC(file_rec) || block_length < 0 || number_blocks < 0 || SPECIALTAG(tag) || (special_tag = MKSPECIALTAG(tag)) == DFTAG_NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* make sure write access to file */ if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* get empty access record */ access_rec = HIget_access_rec(); if (access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* search for identical dd */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { /* Check if the element is already special */ if (HTPis_special(data_id) == TRUE) { HTPendaccess(data_id); HGOTO_ERROR(DFE_CANTMOD, FAIL); } /* end if */ /* If the data already was in the file, * convert it into the first linked block * get the info for the dataset */ if (HTPinquire(data_id, NULL, NULL, &data_off, &data_len) == FAIL) { HTPendaccess(data_id); HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ if (data_off == INVALID_OFFSET || data_len == INVALID_LENGTH) { /* data object which has been created, but has no data */ /* Delete the old data ID */ if (HTPdelete(data_id) == FAIL) HGOTO_ERROR(DFE_CANTDELHASH, FAIL); data_id = FAIL; /* reset this so the first block is a "regular" fixed length block */ } /* end if */ else { /* existing data object with real data in it */ new_data_tag = DFTAG_LINKED; new_data_ref = Htagnewref(file_id, new_data_tag); /* create new linked-block table DD to point to existing data */ if (Hdupdd(file_id, new_data_tag, new_data_ref, tag, ref) == FAIL) { HTPendaccess(data_id); HGOTO_ERROR(DFE_CANTUPDATE, FAIL); } /* end if */ /* Delete the old data ID */ if (HTPdelete(data_id) == FAIL) HGOTO_ERROR(DFE_CANTDELHASH, FAIL); /* Attach to the new data ID */ if ((data_id = HTPselect(file_rec, new_data_tag, new_data_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end else */ } /* end if */ /* get ref for next linked-block? */ link_ref = Htagnewref(file_id, DFTAG_LINKED); /* allocate and fill special info struct */ if ((info = (linkinfo_t *)malloc((uint32)sizeof(linkinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->attached = 1; info->length = (data_id != FAIL) ? data_len : 0; info->first_length = (data_id != FAIL) ? data_len : block_length; info->block_length = block_length; info->number_blocks = number_blocks; info->link_ref = link_ref; /* encode special information for writing to file */ { uint8 *p; p = local_ptbuf; UINT16ENCODE(p, SPECIAL_LINKED); INT32ENCODE(p, info->length); INT32ENCODE(p, block_length); INT32ENCODE(p, number_blocks); UINT16ENCODE(p, link_ref); /* link_ref */ } /* write the special info structure */ if ((dd_aid = Hstartaccess(file_id, special_tag, ref, DFACC_ALL)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hwrite(dd_aid, 16, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* write out linked block */ info->link = HLInewlink(file_id, number_blocks, link_ref, (uint16)((data_id != FAIL) ? new_data_ref : 0)); if (!info->link) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Detach from the data DD ID */ if (data_id != FAIL) { if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* update access record and file record */ if ((access_rec->ddid = HTPselect(file_rec, special_tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); access_rec->special_func = &linked_funcs; access_rec->special_info = (void *)info; access_rec->special = SPECIAL_LINKED; access_rec->posn = 0; access_rec->access = DFACC_RDWR; access_rec->file_id = file_id; access_rec->appendable = FALSE; /* start data as non-appendable */ file_rec->attach++; /* increment number of elements attached to file */ /* set return value */ ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ free(info); if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HLcreate() */ /* ------------------------------------------------------------------------ NAME HLconvert -- convert an AID into a linked block element USAGE intn HLconvert(aid, blocklen, numblocks) int32 aid; IN: AID to convert int32 blocklen; IN: length of standard block int32 numblocks; IN: number of blocks per block list RETURNS SUCCEED / FAIL DESCRIPTION This routine takes an HDF element and promotes it into a linked block element. Basically, the element becomes a linked list allowing easy appending. If the element already exists, it is promoted to being a linked block element, otherwise a new element is created. All of the pieces of the linked list are the same size (blocklen) except for the first one which stays the size of the element at the time HLcreate was called. This routine is similar to HLcreate but is used to convert an existing AID into a linked block element "in-place". This is done for convenience and ease-of-use mostly internally to the library in various places, but it is allowable for user-level code to do this also. Hopefully HLcreate will get re-written to call this routine for most of it's work... numblocks gives the number of linked list objects in each block header. The ideal setting for numblocks and blocklen are very data and application dependent. ---------------------------------------------------------------------------*/ intn HLconvert(int32 aid, int32 block_length, int32 number_blocks) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access record */ linkinfo_t *info; /* information for the linked blocks elt */ uint16 link_ref; /* the ref of the link structure (block table) */ int32 dd_aid; /* AID for writing the special info */ uint16 new_data_tag = DFTAG_NULL, new_data_ref = 0; /* Tag/ref of the new data in the file */ uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ uint16 special_tag; /* special version of this tag */ int32 file_id; /* file ID for the access record */ uint8 local_ptbuf[16]; int32 old_posn; /* position in the access element */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* start checking the func. args */ if (HAatom_group(aid) != AIDGROUP || block_length < 0 || number_blocks < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the access_rec pointer */ if ((access_rec = HAatom_object(aid)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); file_id = access_rec->file_id; file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* verify that the object is not already special. Can not convert if already special. */ if (HTPis_special(access_rec->ddid)) HGOTO_ERROR(DFE_CANTMOD, FAIL); /* Save previous position in data element so that we can come back to it */ old_posn = access_rec->posn; /* get the info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* make data tag special i.e. will be linked-block element */ if ((special_tag = MKSPECIALTAG(data_tag)) == DFTAG_NULL) HGOTO_ERROR(DFE_BADDDLIST, FAIL); /* is data defined but does not exist in the file? */ if (data_off == INVALID_OFFSET && data_len == INVALID_LENGTH) { /* catch the case where the data doesn't exist yet */ /* set length to zero */ if (Hsetlength(aid, 0) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get back new offset and length */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ /* set up new tag/ref for linked block element */ new_data_tag = DFTAG_LINKED; new_data_ref = Htagnewref(file_id, new_data_tag); /* make new tag/ref point to existing data element */ if (Hdupdd(file_id, new_data_tag, new_data_ref, data_tag, data_ref) == FAIL) HGOTO_ERROR(DFE_CANTUPDATE, FAIL); /* Delete the old data ID */ if (HTPdelete(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTDELHASH, FAIL); /* Attach to the new data ID */ if ((access_rec->ddid = HTPcreate(file_rec, special_tag, data_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get link ref for linked-block ? */ link_ref = Htagnewref(file_id, DFTAG_LINKED); /* allocates special info struct for linked blocks */ access_rec->special_info = malloc((uint32)sizeof(linkinfo_t)); if (!access_rec->special_info) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* fill in special info struct */ info = (linkinfo_t *)access_rec->special_info; info->attached = 1; info->length = data_len; info->first_length = data_len; info->block_length = block_length; info->number_blocks = number_blocks; info->link_ref = link_ref; /* Get ready to fill and write the special info structure */ /* start write access on special tag/ref */ if ((dd_aid = Hstartaccess(file_id, special_tag, data_ref, DFACC_ALL)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); /* encode special information to write out */ { uint8 *p; p = local_ptbuf; UINT16ENCODE(p, SPECIAL_LINKED); INT32ENCODE(p, info->length); INT32ENCODE(p, block_length); INT32ENCODE(p, number_blocks); UINT16ENCODE(p, link_ref); /* link_ref */ } /* write out special information */ if (Hwrite(dd_aid, 16, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* write out linked block */ if ((info->link = HLInewlink(file_id, number_blocks, link_ref, (uint16)new_data_ref)) == NULL) HGOTO_ERROR(DFE_CANTLINK, FAIL); /* update access record and file record */ access_rec->special_func = &linked_funcs; access_rec->special = SPECIAL_LINKED; access_rec->appendable = FALSE; /* start data as non-appendable */ /* check whether we should seek out to the proper position */ if (old_posn > 0) { if (Hseek(aid, old_posn, DF_START) == FAIL) HGOTO_ERROR(DFE_BADSEEK, FAIL); } done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) { free(access_rec->special_info); HIrelease_accrec_node(access_rec); } } return ret_value; } /* end HLconvert() */ /* ---------------------------- HDinqblockinfo ---------------------------- */ /* NAME HDinqblockinfo -- return info about linked blocks USAGE int32 HDinqblockinfo(aid, length, flength, blen, nblocks) int32 aid; IN: aid of element int32 * length; OUT: total element length int32 * flength; OUT: length of first element int32 * blen; OUT: length of block elements int32 * nblocks; OUT: number of blocks per block header RETURNS SUCCEED / FAIL DESCRIPTION Given an aid, return low level special info for linked-block element in space provided. This function works like HDinquire() but provides more low level info than HLPinquire. NULL can be passed for any non-interesting entries. hdfpack is the only application that I know of which uses this function. ---------------------------------------------------------------------------*/ int HDinqblockinfo(int32 aid, int32 *length, int32 *first_length, int32 *block_length, int32 *number_blocks) { accrec_t *arec; int ret_value = SUCCEED; HEclear(); if ((arec = HAatom_object(aid)) == (accrec_t *)NULL) HGOTO_ERROR(DFE_BADAID, FAIL); if (arec->special != SPECIAL_LINKED) HGOTO_ERROR(DFE_ARGS, FAIL); if (length) *length = ((linkinfo_t *)(arec->special_info))->length; if (first_length) *first_length = ((linkinfo_t *)(arec->special_info))->first_length; if (block_length) *block_length = ((linkinfo_t *)(arec->special_info))->block_length; if (number_blocks) *number_blocks = ((linkinfo_t *)(arec->special_info))->number_blocks; done: return ret_value; } /* HDinqblockinfo */ /* ----------------------------- HLIstaccess ------------------------------ */ /* NAME HLIstaccess -- set up AID to access a linked block elem USAGE int32 HLIstaccess(access_rec, acc_mode) access_t * access_rec; IN: access record to fill in int16 acc_mode; IN: access mode RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HLIstread and HLIstwrite resolve to this function. Given an active AID fill in all of the special information. If this information has already been read in for a different element use that else we must go out to the HDF file and pull in the information ourselves ----------------------------------------------------------------------------*/ static int32 HLIstaccess(accrec_t *access_rec, int16 acc_mode) { filerec_t *file_rec; /* file record */ linkinfo_t *info = NULL; /* information about data elt */ int32 dd_aid; /* AID for writing the special info */ uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ uint8 local_ptbuf[14]; int32 ret_value = SUCCEED; /* validate file record id */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec) || !(file_rec->access & acc_mode)) HGOTO_ERROR(DFE_ARGS, FAIL); /* set up some data in access record */ access_rec->special = SPECIAL_LINKED; access_rec->posn = 0; access_rec->access = (uint32)(acc_mode | DFACC_READ); /* * Lets free old special info first,if one exists, * before copying a new one */ if (access_rec->special_info != NULL) { /* special information record */ linkinfo_t *t_info = (linkinfo_t *)access_rec->special_info; if (--(t_info->attached) == 0) { link_t *t_link; /* current link to free */ link_t *next; /* next link to free */ /* free the linked list of links/block tables */ if (t_info->link != NULL) { for (t_link = t_info->link; t_link; t_link = next) { next = t_link->next; free(t_link->block_list); free(t_link); } } free(t_info); access_rec->special_info = NULL; } } /* get the info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* if the special information are already in some other acc elt, * point to it */ access_rec->special_info = HIgetspinfo(access_rec); if (access_rec->special_info) { ((linkinfo_t *)access_rec->special_info)->attached++; file_rec->attach++; ret_value = HAregister_atom(AIDGROUP, access_rec); goto done; /* we are done */ } /* read the special info structure from the file */ if ((dd_aid = Hstartaccess(access_rec->file_id, data_tag, data_ref, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hseek(dd_aid, 2, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hread(dd_aid, 14, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* allocate space for special information */ access_rec->special_info = malloc((uint32)sizeof(linkinfo_t)); info = (linkinfo_t *)access_rec->special_info; if (!info) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* decode special information retrieved from file into info struct */ { uint8 *p = local_ptbuf; INT32DECODE(p, info->length); INT32DECODE(p, info->block_length); INT32DECODE(p, info->number_blocks); UINT16DECODE(p, info->link_ref); } /* get the block length and number of blocks */ access_rec->block_size = info->block_length; access_rec->num_blocks = info->number_blocks; /* set up the block tables of the information */ info->link = HLIgetlink(access_rec->file_id, info->link_ref, info->number_blocks); if (!info->link) HGOTO_DONE(FAIL); /* find and set the length of the first linked-block */ if (info->link->block_list[0].ref) { info->first_length = Hlength(access_rec->file_id, DFTAG_LINKED, info->link->block_list[0].ref); if (info->first_length == FAIL) { free(info->link); HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else info->first_length = info->block_length; /* process through all the linked-blocks in the file for this element */ info->last_link = info->link; while (info->last_link->nextref != 0) { info->last_link->next = HLIgetlink(access_rec->file_id, info->last_link->nextref, info->number_blocks); if (!info->last_link->next) { link_t *l, *next; for (l = info->link; l; l = next) { next = l->next; free(l->block_list); free(l); } HGOTO_ERROR(DFE_INTERNAL, FAIL); } info->last_link = info->last_link->next; } /* update data */ info->attached = 1; file_rec->attach++; /* increment number of elements attached to file */ ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) free(access_rec->special_info); return ret_value; } /* HLIstaccess */ /* ----------------------------- HLgetdatainfo --------------------------- */ /* NAME HLgetdatainfo -- get data information from linked blocks USAGE int32 HLgetdatainfo(file_id, link_ref, num_blocks, offsetarray, lengtharray) int32 file_id; IN: the file uint8 *buf; IN: special header info read from the file by caller uintn start_block, IN: data block to start at, 0 base uintn info_count, IN: size of offset/length lists int32 *offsetarray; OUT: offsets of data blocks int32 *lengtharray; OUT: lengths of data blocks RETURNS The number of actual data blocks, if successful, FAIL, otherwise DESCRIPTION HLgetdatainfo uses HLIgetlink to get each block table in the element. We're looking for actual data blocks which have a positive reference number. Blocks with ref# as 0 will signal the end of the actual data blocks. HLgetdatainfo goes through the block table to record offset and length of the actual data blocks. Aug 08, 2010 -BMR TODO - No effect from start_block yet; since it's not used in the HDF Mapping project, and we're running out of time, I'm leaving it out. Feb 18, 2011 -BMR ---------------------------------------------------------------------------*/ intn HLgetdatainfo(int32 file_id, uint8 *buf, /* IN: special header info */ uintn start_block, /* IN: data block to start at, 0 base */ uintn info_count, /* IN: size of offset/length lists */ int32 *offsetarray, /* OUT: array to hold offsets */ int32 *lengtharray) /* OUT: array to hold lengths */ { link_t *link_info = NULL; /* link information, to get block ref#s*/ uintn num_data_blocks; /* number of blocks that actually have data */ uint16 link_ref; /* ref# pointing to a block table */ uint8 *p = NULL; /* pointer to special info buffer */ int32 num_blocks, /* number of blocks in each table */ block_length, /* length of each block */ total_length, /* total data length of the element */ accum_length; /* accumulative length of actual data in blocks */ int ii; intn ret_value = SUCCEED; (void)start_block; /*not used */ /* Clear error stack */ HEclear(); /* Validate arguments */ if (info_count == 0 && offsetarray != NULL && lengtharray != NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Decode special information retrieved from file */ p = &buf[0]; INT32DECODE(p, total_length); INT32DECODE(p, block_length); INT32DECODE(p, num_blocks); /* get number of blocks in link table */ UINT16DECODE(p, link_ref); /* get ref# link table */ /* Initialize number of actual data blocks and the accumulative data len */ num_data_blocks = 0; accum_length = 0; /* Get the block table pointed to by link_ref; the table contains ref#s of the blocks */ link_info = HLIgetlink(file_id, link_ref, num_blocks); if (!link_info) /* no data */ HGOTO_DONE(FAIL); /* Go through all the linked-block tables of this element, as long as the number of data blocks being collected has not reached the maximum length of the non-NULL arrays provided */ while (link_info != NULL && (info_count == 0 || /* case of offset/length arrays being NULL */ num_data_blocks < info_count)) { uint16 next_ref = link_info->nextref; /* shortcut */ /* Get offset/length of blocks that actually point to a data elem, until all blocks in this table with valid ref#s are processed */ for (ii = 0; ii < num_blocks && link_info->block_list[ii].ref != 0; ii++) { int32 offset, length; uint16 block_ref = link_info->block_list[ii].ref; /* shortcut */ /* If this block has a valid ref# then get the offset/length of the data if they are requested, and increment the number of data blocks */ if (block_ref != 0) { if (offsetarray != NULL) { offset = Hoffset(file_id, DFTAG_LINKED, block_ref); if (offset == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); offsetarray[num_data_blocks] = offset; } if (lengtharray != NULL) { length = Hlength(file_id, DFTAG_LINKED, block_ref); if (length == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Make sure to detect when the last block of the element is reached and calculate the len of the actual data in it */ /* Continue accumulating data length if there is another block table coming */ if (next_ref != 0) accum_length = accum_length + length; /* When no more block table following this one, i.e., this is the last block table in the element */ else { /* if this is NOT the last block having data in the current table, continue accumulating */ if (ii < num_blocks - 1 && link_info->block_list[ii + 1].ref != 0) accum_length = accum_length + length; /* else, i.e., this is the last block in the curr table, or the last block that points to actual data */ else { /* then calculate the data's actual length when the length is the same as the default block length, because it might not be */ if (length == block_length) length = total_length - accum_length; } } /* Record the actual data length in the current block */ lengtharray[num_data_blocks] = length; } num_data_blocks++; /* count number of blocks with data */ } } /* for each block in the current table */ /* Free allocated memory before getting the next block table if there is one */ if (link_info != NULL) { free(link_info->block_list); free(link_info); link_info = NULL; } /* Get next block table */ if (next_ref != 0) link_info = HLIgetlink(file_id, next_ref, num_blocks); } /* while there are more linked-block tables and the offset/length arrays are not full yet */ /* Return the number of blocks with actual data */ if (num_data_blocks > INT_MAX) HGOTO_DONE(FAIL); ret_value = (intn)num_data_blocks; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (link_info != NULL) free(link_info->block_list); free(link_info); } return ret_value; } /* HLgetdatainfo */ /* ------------------------------ HLPstread ------------------------------- */ /* NAME HLPstread -- open an access record for reading USAGE int32 HLPstread(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HLIstaccess to fill in the access rec for reading ---------------------------------------------------------------------------*/ int32 HLPstread(accrec_t *access_rec) { int32 ret_value; ret_value = HLIstaccess(access_rec, DFACC_READ); return ret_value; } /* HLPstread */ /* ------------------------------ HLPstwrite ------------------------------- */ /* NAME HLPstwrite -- open an access record for writing USAGE int32 HLPstwrite(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HLIstaccess to fill in the access rec for writing ---------------------------------------------------------------------------*/ int32 HLPstwrite(accrec_t *access_rec) { int32 ret_value; ret_value = HLIstaccess(access_rec, (int16)DFACC_WRITE); return ret_value; } /* HLPstwrite */ /* ------------------------------ HLIgetlink ------------------------------ */ /* NAME HLIgetlink -- get link information USAGE link_t * HLIgetlink(fid, ref, num_blocks) int32 file_id; IN: the file uint16 ref; IN: ref number of the link table int32 num_blocks; IN: number of blocks in the table RETURNS A pointer to a link_t or NULL. DESCRIPTION Read a block table out of the file and return a pointer to the internal table representing it. It seems that num_blocks is redundant. ---------------------------------------------------------------------------*/ static link_t * HLIgetlink(int32 file_id, uint16 ref, int32 number_blocks) { int32 access_id; /* access record id */ uint8 *buffer = NULL; uint16 tag = DFTAG_LINKED; link_t *new_link = NULL; link_t *ret_value = NULL; /* FAIL */ /* allocate necessary memory for in-memory block table */ new_link = (link_t *)malloc((uint32)sizeof(link_t)); if (new_link == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); new_link->block_list = (block_t *)malloc((uint32)number_blocks * sizeof(block_t)); if (new_link->block_list == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); new_link->next = (link_t *)NULL; /* create temp buffer to read block table in */ buffer = (uint8 *)malloc((uint32)(2 + 2 * number_blocks)); if (buffer == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); /* read block table into buffer */ access_id = Hstartread(file_id, tag, ref); if (access_id == FAIL || Hread(access_id, 2 + 2 * number_blocks, buffer) == FAIL) HGOTO_ERROR(DFE_READERROR, NULL); /* decode block table information read from file */ { int32 i; uint8 *p = buffer; UINT16DECODE(p, new_link->nextref); for (i = 0; i < number_blocks; i++) UINT16DECODE(p, new_link->block_list[i].ref); } /* end access to this block table */ Hendaccess(access_id); /* set return value */ ret_value = new_link; done: if (ret_value == NULL) { /* Error condition cleanup */ free(new_link->block_list); free(new_link); } free(buffer); return ret_value; } /* HLIgetlink */ /* ------------------------------- HLPseek -------------------------------- */ /* NAME HLPseek -- set the seek posn USAGE int32 HLPseek(access_rec, offset, origin) access_t * access_rec; IN: access record to mess with int32 offset; IN: seek offset int32 origin; IN: where we should calc the offset from RETURNS SUCCEED / FAIL DESCRIPTION Set the seek posn in the given linked block element ---------------------------------------------------------------------------*/ int32 HLPseek(accrec_t *access_rec, int32 offset, int origin) { int32 ret_value = SUCCEED; /* validate access record */ if (access_rec->special != SPECIAL_LINKED) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* adjust the offset according to origin and validate */ /* there is no upper bound to posn */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += ((linkinfo_t *)(access_rec->special_info))->length; if (offset < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* set position */ access_rec->posn = offset; done: return ret_value; } /* HLPseek */ /* ------------------------------- HLPread -------------------------------- */ /* NAME HLPread -- read some data out of a linked block element USAGE int32 HLPseek(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer for data RETURNS The number of bytes read or FAIL on error DESCRIPTION Read in some data from a linked block element. If length is zero read until the end of the element. It is assumed that the data buffer is big enough to store the data. If length would take us off the end of the element only read what has been written. --------------------------------------------------------------------------- */ int32 HLPread(accrec_t *access_rec, int32 length, void *datap) { uint8 *data = (uint8 *)datap; /* information record for this special data elt */ linkinfo_t *info = (linkinfo_t *)(access_rec->special_info); link_t *t_link = info->link; /* block table record */ /* relative position in linked block of data elt */ int32 relative_posn = access_rec->posn; int32 block_idx; /* block table index of current block */ int32 current_length; /* length of current block */ int32 nbytes = 0; /* # bytes read on any single Hread() */ int32 bytes_read = 0; /* total # bytes read for this call of HLIread */ int32 ret_value = SUCCEED; /* validate length */ if (length == 0) length = info->length - access_rec->posn; else if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); if (access_rec->posn + length > info->length) length = info->length - access_rec->posn; /* search for linked block to start reading from */ if (relative_posn < info->first_length) { /* first block */ block_idx = 0; current_length = info->first_length; } else /* not first block? */ { relative_posn -= info->first_length; block_idx = relative_posn / info->block_length + 1; relative_posn %= info->block_length; current_length = info->block_length; } /* calculate which block to start from? */ { int32 i; for (i = 0; i < block_idx / info->number_blocks; i++) { if (t_link == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); t_link = t_link->next; } } block_idx %= info->number_blocks; /* found the starting block, now read in the data */ do { int32 remaining = /* remaining data in current block */ current_length - relative_posn; /* read in the data in this block */ if (remaining > length) remaining = length; if (t_link->block_list[block_idx].ref != 0) { int32 access_id; /* access record id for this block */ block_t *current_block = /* record on the current block */ &(t_link->block_list[block_idx]); access_id = Hstartread(access_rec->file_id, DFTAG_LINKED, current_block->ref); if (access_id == (int32)FAIL || (relative_posn && (int32)FAIL == Hseek(access_id, relative_posn, DF_START)) || (int32)FAIL == (nbytes = Hread(access_id, remaining, data))) HGOTO_ERROR(DFE_READERROR, FAIL); bytes_read += nbytes; Hendaccess(access_id); } else { /*if block is missing, fill this part of buffer with zero's */ memset(data, 0, (size_t)remaining); bytes_read += nbytes; } /* move variables for the next block */ data += remaining; length -= remaining; if (length > 0 && ++block_idx >= info->number_blocks) { block_idx = 0; t_link = t_link->next; if (t_link == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } relative_posn = 0; current_length = info->block_length; } while (length > 0); /* if still some more to read in, repeat */ access_rec->posn += bytes_read; ret_value = bytes_read; done: return ret_value; } /* HLPread */ /* ------------------------------- HLPwrite ------------------------------- */ /* NAME HLPwrite -- write out some data to a linked block USAGE int32 HLPwrite(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to write void * data; IN: buffer for data RETURNS The number of bytes written or FAIL on error DESCRIPTION Write out some data from a linked block element. If we write passed the end of the existing element new blocks are created as needed. ---------------------------------------------------------------------------*/ int32 HLPwrite(accrec_t *access_rec, int32 length, const void *datap) { const uint8 *data = datap; filerec_t *file_rec; /* file record */ int32 dd_aid; /* AID for writing the special info */ uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ linkinfo_t *info = /* linked blocks information record */ (linkinfo_t *)(access_rec->special_info); link_t *t_link = /* ptr to link block table */ info->link; int32 relative_posn = /* relative position in linked block */ access_rec->posn; int32 block_idx; /* block table index of current block */ link_t *prev_link = NULL; /* ptr to block table before current block table. for groking the offset of current block table */ int32 current_length; /* length of current block */ int32 nbytes = 0; /* #bytes written by any single Hwrite */ int32 bytes_written = 0; /* total #bytes written by HLIwrite */ uint8 local_ptbuf[4] = {0, 0, 0, 0}; int32 ret_value = SUCCEED; /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); /* validate length and file records */ if (length <= 0) HGOTO_ERROR(DFE_RANGE, FAIL); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* determine linked block and position to start writing into */ /* determine where to start. Setup missing block tables along the way. */ if (relative_posn < info->first_length) { block_idx = 0; current_length = info->first_length; } else { relative_posn -= info->first_length; block_idx = relative_posn / info->block_length + 1; relative_posn %= info->block_length; current_length = info->block_length; } { /* follow the links of block tables and create missing block tables along the way */ int32 num_links; /* number of links to follow */ for (num_links = block_idx / info->number_blocks; num_links > 0; num_links--) { if (!t_link->next) { /* create missing link (block table) */ t_link->nextref = Htagnewref(access_rec->file_id, DFTAG_LINKED); t_link->next = HLInewlink(access_rec->file_id, info->number_blocks, t_link->nextref, 0); if (!t_link->next) HGOTO_ERROR(DFE_NOSPACE, FAIL); { /* AA */ /* update previous link with information about new link */ uint16 link_tag = DFTAG_LINKED; uint16 link_ref = /* ref of current link */ (uint16)(prev_link != NULL ? prev_link->nextref : info->link_ref); uint8 *p = local_ptbuf; /* temp buf ptr */ /* write file the updated portion of current link */ int32 link_id = /* access id for current link */ Hstartwrite(access_rec->file_id, link_tag, link_ref, 0); if (link_id == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); UINT16ENCODE(p, t_link->nextref); if (Hwrite(link_id, 2, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); Hendaccess(link_id); } /* AA */ } /* if not t_link->next */ /* move to the next link */ prev_link = t_link; t_link = t_link->next; } /* end for */ } /* end block statement(bad) */ block_idx %= info->number_blocks; /* start writing in that block */ do { int32 access_id; /* access record id */ int32 remaining = /* remaining data length in this block */ current_length - relative_posn; uint16 new_ref = 0; /* ref of newly created block */ /* determine length and write this block */ if (remaining > length) remaining = length; /* this block already exist, so just set up access to it */ if (t_link->block_list[block_idx].ref != 0) { block_t *current_block = /* ptr to current block record */ &(t_link->block_list[block_idx]); access_id = Hstartwrite(access_rec->file_id, DFTAG_LINKED, current_block->ref, current_length); } else { /* block is missing, set up a new block */ new_ref = Htagnewref(access_rec->file_id, DFTAG_LINKED); access_id = Hstartwrite(access_rec->file_id, DFTAG_LINKED, new_ref, current_length); } if (access_id == (int32)FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if ((relative_posn && (int32)FAIL == Hseek(access_id, relative_posn, DF_START)) || (int32)FAIL == (nbytes = Hwrite(access_id, remaining, data))) { HGOTO_ERROR(DFE_WRITEERROR, FAIL); } Hendaccess(access_id); bytes_written += nbytes; if (new_ref) { /* created a new block, so update the link/block table */ uint16 link_tag = DFTAG_LINKED; uint16 link_ref = /* ref of the current link/block table */ (uint16)(prev_link ? prev_link->nextref : info->link_ref); uint8 *p = /* temp buffer ptr */ local_ptbuf; int32 link_id = /* access record id of the current link/block table */ Hstartwrite(access_rec->file_id, link_tag, link_ref, 0); if (link_id == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); UINT16ENCODE(p, new_ref); if (Hseek(link_id, 2 + 2 * block_idx, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hwrite(link_id, 2, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); Hendaccess(link_id); /* update memory structure */ t_link->block_list[block_idx].ref = new_ref; } /* if new_ref */ /* move ptrs and counters for next phase */ data += remaining; length -= remaining; if (length > 0 && ++block_idx >= info->number_blocks) { /* move to the next link/block table */ block_idx = 0; if (!t_link->next) { /* create missing link/block table */ t_link->nextref = Htagnewref(access_rec->file_id, DFTAG_LINKED); t_link->next = HLInewlink(access_rec->file_id, info->number_blocks, t_link->nextref, 0); if (!t_link->next) HGOTO_ERROR(DFE_NOSPACE, FAIL); { /* BB */ uint16 link_tag = DFTAG_LINKED; uint16 link_ref = /* ref of current link/block table */ (uint16)(prev_link ? prev_link->nextref : info->link_ref); uint8 *p = /* temp buffer ptr */ local_ptbuf; int32 link_id = /* access record id of current link/block table */ Hstartwrite(access_rec->file_id, link_tag, link_ref, 0); if (link_id == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); UINT16ENCODE(p, t_link->nextref); if (Hwrite(link_id, 2, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); Hendaccess(link_id); } /* BB */ } /* if not t_link->next */ /* move to the next link/block table */ prev_link = t_link; t_link = t_link->next; } /* end if "length" */ /* update vars for next phase */ relative_posn = 0; current_length = info->block_length; } while (length > 0); /* update the info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((dd_aid = Hstartaccess(access_rec->file_id, data_tag, data_ref, DFACC_WRITE)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hseek(dd_aid, 2, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); { int32 tmp; uint8 *p = local_ptbuf; tmp = bytes_written + access_rec->posn; if (tmp > info->length) info->length = tmp; INT32ENCODE(p, info->length); } if (Hwrite(dd_aid, 4, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); access_rec->posn += bytes_written; /* return SUCCEED; */ /* if wrong # bytes written, FAIL has already been returned */ ret_value = bytes_written; done: return ret_value; } /* HLPwrite */ /* ------------------------------ HLInewlink ------------------------------ */ /* NAME HLInewlink -- write out some data to a linked block USAGE link_t * HLInewlink(fid, nblocks, link_ref, first_block_ref) int32 fid; IN: file ID int32 nblocks; IN: number of blocks in the table uint16 link_ref; IN: ref number for the table uint16 first_block_ref; IN: ref number for first block RETURNS A pointer to a new link/block table or NULL DESCRIPTION Create a new link/block table in memory and in file returns ptr to the new link/block table. ---------------------------------------------------------------------------*/ static link_t * HLInewlink(int32 file_id, int32 number_blocks, uint16 link_ref, uint16 first_block_ref) { int32 link_id; /* access record id of new link */ uint8 *buf = NULL; /* temp buffer */ link_t *t_link = NULL; link_t *ret_value = NULL; /* FAIL */ /* set up new link record in memory */ /* new link record */ t_link = (link_t *)malloc((uint32)sizeof(link_t)); if (!t_link) HGOTO_ERROR(DFE_NOSPACE, NULL); t_link->block_list = (block_t *)malloc((uint32)number_blocks * sizeof(block_t)); if (!t_link->block_list) HGOTO_ERROR(DFE_NOSPACE, NULL); t_link->next = NULL; /* get ready to write the new link to file */ link_id = Hstartwrite(file_id, DFTAG_LINKED, link_ref, 2 + 2 * number_blocks); if (link_id == FAIL) HGOTO_ERROR(DFE_WRITEERROR, NULL); /* encode this block information for writing to the file */ { /* CC */ int32 i; /* temp int index */ uint8 *p; /* temp buffer ptr */ p = buf = (uint8 *)malloc((uint32)(2 + 2 * number_blocks)); if (!buf) HGOTO_ERROR(DFE_NOSPACE, NULL); /* set up the record and write to file */ t_link->nextref = 0; UINT16ENCODE(p, 0); t_link->block_list[0].ref = first_block_ref; UINT16ENCODE(p, first_block_ref); /* why is this first_block_ref = 0? */ for (i = 1; i < number_blocks; i++) { /* set up each block in this link */ t_link->block_list[i].ref = 0; UINT16ENCODE(p, 0); } } /* CC */ /* write the link */ if (Hwrite(link_id, 2 + 2 * number_blocks, buf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, NULL); /* close down access to this block */ Hendaccess(link_id); /* set return value */ ret_value = t_link; done: if (ret_value == NULL) { /* Error condition cleanup */ free(t_link->block_list); free(t_link); } free(buf); return ret_value; } /* HLInewlink */ /* ------------------------------ HLPinquire ------------------------------ */ /* NAME HLPinquire -- Hinquire for linked blocks USAGE int32 HLPinquire(access_rec, fid, tag, ref, len, off, pos, acc, sp) access_t * access_rec; IN: access record to return info about uint16 * file; OUT: file ID; uint16 * tag; OUT: tag of info record; uint16 * ref; OUT: ref of info record; int32 * len; OUT: length of element; int32 * off; OUT: offset of element -- meaningless int32 * pos; OUT: current position in element; int16 * acc; OUT: access mode; int16 * sp; OUT: special code; RETURNS SUCCEED DESCRIPTION Return interesting information about a linked block element. NULL can be passed for any of the OUT parameters if their value is not needed. --------------------------------------------------------------------------- */ int32 HLPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ linkinfo_t *info = /* special information record */ (linkinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* update the info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id) *pfile_id = access_rec->file_id; if (ptag) *ptag = data_tag; if (pref) *pref = data_ref; if (plength) *plength = info->length; if (poffset) *poffset = 0; /* meaningless */ if (pposn) *pposn = access_rec->posn; if (paccess) *paccess = (int16)access_rec->access; if (pspecial) *pspecial = (int16)access_rec->special; done: return ret_value; } /* HLPinquire */ /* ----------------------------- HLPendaccess ----------------------------- */ /* NAME HLPendacess -- close a linked block AID USAGE intn HLPendaccess(access_rec) access_t * access_rec; IN: access record to close RETURNS SUCCEED / FAIL DESCRIPTION Free up all of the space used to store information about a linked block element. Information is flushed to disk as it is created so this routine does NOT have to write anything out. --------------------------------------------------------------------------- */ intn HLPendaccess(accrec_t *access_rec) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* detach the special information record. If no more references to that, free the record */ if (HLPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* update file and access records */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* detach from the file */ file_rec->attach--; /* free the access record */ HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HLPendaccess */ /* ----------------------------- HLPcloseAID ------------------------------ */ /* NAME HLPcloseAID -- close file but keep AID active USAGE int32 HLPcloseAID(access_rec) access_t * access_rec; IN: access record of file to close RETURNS SUCCEED / FAIL DESCRIPTION close the file currently being pointed to by this AID but do *NOT* free the AID. This is called by Hnextread() which reuses an AID to point to the 'next' object as requested. If the current object was an linked object, the linked information needs to be closed before all reference to it is lost. ---------------------------------------------------------------------------*/ int32 HLPcloseAID(accrec_t *access_rec) { linkinfo_t *info = /* special information record */ (linkinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* detach the special information record. If no more references to that, free the record */ if (--(info->attached) == 0) { link_t *t_link; /* current link to free */ link_t *next; /* next link to free */ /* free the linked list of links/block tables */ for (t_link = info->link; t_link; t_link = next) { next = t_link->next; free(t_link->block_list); free(t_link); } free(info); access_rec->special_info = NULL; } return ret_value; } /* HLPcloseAID */ /* ------------------------------- HLPinfo -------------------------------- */ /* NAME HLPinfo -- return info about a linked block element USAGE int32 HLPinfo(access_rec, info_block) access_t * access_rec; IN: access record of access element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given linked block. Info_block is assumed to be non-NULL. --------------------------------------------------------------------------- */ int32 HLPinfo(accrec_t *access_rec, sp_info_block_t *info_block) { linkinfo_t *info = /* special information record */ (linkinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate access record */ if (access_rec->special != SPECIAL_LINKED) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_block */ info_block->key = SPECIAL_LINKED; info_block->first_len = info->first_length; info_block->block_len = info->block_length; info_block->nblocks = info->number_blocks; done: return ret_value; } /* HLPinfo */ /*-------------------------------------------------------------------------- NAME HLsetblockinfo -- set the block length of a linked-block element USAGE intn HLsetblockinfo( int32 aid IN: access record id int32 block_size IN: length to be used for each linked-block int32 num_blocks IN: number of blocks the element will have RETURNS SUCCEED / FAIL DESCRIPTION HLsetblockinfo sets (accrec_t).block_size and (accrec_t).num_blocks to block_size and num_blocks, respectively. An error will occur, if either of the parameters is a 0 or a negative number, that is not -1, which is used to indicate that the respective field is not to be changed. In the library, this routine is used by: VSsetblocksize VSsetnumblocks MODIFICATION BMR - added in June 2001 to fix bug# 267 --------------------------------------------------------------------------*/ intn HLsetblockinfo(int32 aid, /* access record id */ int32 block_size, /* length to be used for each linked-block */ int32 num_blocks) /* number of blocks the element will have */ { accrec_t *access_rec; /* access record */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* validate aid */ if (HAatom_group(aid) != AIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* block_size and num_blocks should be either -1, to keep the original values, or positive values to change the block size and/or the number of blocks */ if ((block_size <= 0 && block_size != -1) || (num_blocks <= 0 && num_blocks != -1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the access record */ if ((access_rec = HAatom_object(aid)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If this element is already stored as linked-block, do not allow to change the block info, ignore the request to change. */ if (access_rec->special != SPECIAL_LINKED) { /* Set the linked-block size, if requested */ if (block_size != -1) access_rec->block_size = block_size; /* Set the number of blocks in each block table, if requested */ if (num_blocks != -1) access_rec->num_blocks = num_blocks; } done: return ret_value; } /* end HLsetblockinfo */ /*-------------------------------------------------------------------------- NAME HLgetblockinfo -- get the block size and the number of blocks of a linked-block element USAGE intn HLgetblockinfo(aid, block_size, num_blocks) int32 aid IN: access record id int32* block_size OUT: the returned block size of each linked-block int32* num_blocks OUT: the returned number of blocks of the element RETURNS SUCCEED / FAIL DESCRIPTION HLgetblockinfo retrieves the values of (accrec_t).block_size and (accrec_t).num_blocks to block_size and num_blocks, respectively. A NULL can be passed in for an unwanted value. In the library, this routine is used by: VSgetblockinfo MODIFICATION BMR - added in June 2001 to fix bug# 267 --------------------------------------------------------------------------*/ intn HLgetblockinfo(int32 aid, /* access record id */ int32 *block_size, /* length being used for each linked-block */ int32 *num_blocks) /* number of blocks the element will have */ { accrec_t *access_rec; /* access record */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the access record */ if ((access_rec = HAatom_object(aid)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the linked-block size and the number of linked-blocks if requested */ if (block_size != NULL) *block_size = access_rec->block_size; if (num_blocks != NULL) *num_blocks = access_rec->num_blocks; done: return ret_value; } /* end HLgetblockinfo */ hdf4-hdf4.3.1/hdf/src/hbuffer.c000066400000000000000000000464471503061704500161630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------------------------------ hbuffer.c ------------------------------- Routines for buffered elements, i.e., data elements that reside in memory until they are closed, and are then flushed out to the file. Buffered elements are held in memory while they are being accessed and are only written back to the file if they are modified. File Organization ****************** These special elements are invoked at run-time only, information about whether an element was cached is not stored in the file. Unless specifically asked for by an API routine or required for a particular kind of access by the library, these routines aren't called. LOCAL ROUTINES EXPORTED BUT LIBRARY PRIVATE ROUTINES HBPcloseAID -- close file but keep AID active HBPendacess -- close file, free AID HBPinfo -- return info about an buffered element HBPinquire -- retrieve information about an buffered element HBPread -- read some data out of an buffered element HBPreset -- replace the current buffered info with new info (NOP) HBPseek -- set the seek position HBPsetaccesstype -- set the I/O access type of the buffered element HBPstread -- open an access record for reading HBPstwrite -- open an access record for reading HBPwrite -- write some data out to a buffered element EXPORTED ROUTINES HBconvert -- start buffering an AID ------------------------------------------------------------------------- */ #include "hdf_priv.h" #include "hfile_priv.h" /* extinfo_t -- external elt information structure */ typedef struct { intn attached; /* number of access records attached to this information structure */ intn modified; /* has the buffered element been modified? */ int32 length; /* length of this element */ uint8 *buf; /* pointer to the buffered data */ int32 buf_aid; /* AID for buffered access record (below) */ accrec_t *buf_access_rec; /* "Real" access record for buffered data */ } bufinfo_t; /* forward declaration of the functions provided in this module */ /* buf_funcs -- table of the accessing functions of the buffered data element function modules. The position of each function in the table is standard */ funclist_t buf_funcs = { HBPstread, HBPstwrite, HBPseek, HBPinquire, HBPread, HBPwrite, HBPendaccess, HBPinfo, NULL /* no routine registered */ }; /*------------------------------------------------------------------------ NAME HBconvert -- cause an existing AID to be buffered. USAGE intn HBcreate(aid) int32 aid; IN: AID of data element to buffer RETURNS SUCCEED/FAIL DESCRIPTION Buffers an existing data element (referred to with the AID passed in) in memory for faster access. This is especially useful when repeatedly accessing a compressed special element object which would otherwise have to be repeatedly decompressed over many I/O accesses. If the ALLOW_BUFFER_GROWING flag is defined during compile time, the buffered object is allowed to grow, it is assumed that a higher-level API will prevent this if it is not allowed through that API. FORTRAN None --------------------------------------------------------------------------*/ intn HBconvert(int32 aid) { accrec_t *access_rec = NULL; /* access element record */ accrec_t *new_access_rec; /* newly created access record */ accrec_t *tmp_access_rec; /* temp. access record */ bufinfo_t *info; /* information for the buffered element */ uint16 data_tag, data_ref; /* tag/ref of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 data_len; /* length of the data we are checking */ intn ret_value = SUCCEED; HEclear(); if ((access_rec = HAatom_object(aid)) == NULL) /* get the access_rec pointer */ HGOTO_ERROR(DFE_ARGS, FAIL); /* get the info for the dataset */ if (HTPis_special(access_rec->ddid) || access_rec->special != 0) { if ((*access_rec->special_func->inquire)(access_rec, NULL, &data_tag, &data_ref, &data_len, &data_off, NULL, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* is data defined but does not exist in the file? */ if (data_off == INVALID_OFFSET && data_len == INVALID_LENGTH) { /* catch the case where the data doesn't exist yet */ /* set length to zero */ if (Hsetlength(aid, 0) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get back new offset and length */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ /* allocate special info struct for buffered element */ if ((info = malloc((uint32)sizeof(bufinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* fill in special info struct */ info->attached = 1; info->modified = 0; /* Data starts out not modified */ info->length = data_len; /* initial buffer size */ /* Get space for buffer */ if (data_len > 0) { if ((info->buf = malloc((uint32)data_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ else info->buf = NULL; /* Read in existing data into buffer */ if (data_len > 0) { if (Hseek(aid, 0, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hread(aid, data_len, info->buf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); } /* end if */ /* get empty access record */ new_access_rec = HIget_access_rec(); if (new_access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* Copy the old access record information to the new access record */ /* * Don't get a new copy of the DD id or increment the number of attached * elements, buffered elements are supposed to be "transparent". * We "inherit" the appendable flag if it's set and ALLOW_BUFFER_GROW is * defined to support it. */ tmp_access_rec = new_access_rec->next; /* preserve free list pointer */ memcpy(new_access_rec, access_rec, sizeof(accrec_t)); new_access_rec->next = tmp_access_rec; /* restore free list pointer */ /* Preserve the actual access record for the buffered element */ info->buf_access_rec = new_access_rec; /* Access record of actual data on disk */ /* Create AID for actual access record */ info->buf_aid = HAregister_atom(AIDGROUP, new_access_rec); /* Modify access record to point to buffered element functions */ access_rec->special_info = (void *)info; access_rec->special_func = &buf_funcs; access_rec->special = SPECIAL_BUFFERED; done: if (ret_value == FAIL) { /* Error condition cleanup */ } /* end if */ return ret_value; } /* HBconvert */ /* ------------------------------ HBPstread ------------------------------- */ /* NAME HBPstread -- open an access record for reading USAGE int32 HBPstread(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION This is a stub routine and should never be called ---------------------------------------------------------------------------*/ int32 HBPstread(accrec_t *rec) { (void)rec; assert(0 && "Should never be called"); return FAIL; } /* HBPstread */ /* ------------------------------ HBPstwrite ------------------------------- */ /* NAME HBPstwrite -- open an access record for reading USAGE int32 HBPstwrite(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION This is a stub routine and should never be called. ---------------------------------------------------------------------------*/ int32 HBPstwrite(accrec_t *rec) { (void)rec; assert(0 && "Should never be called"); return FAIL; } /* HBPstwrite */ /* ------------------------------ HBPseek ------------------------------- */ /* NAME HBPseek -- set the seek posn USAGE int32 HXPseek(access_rec, offset, origin) access_t * access_rec; IN: access record to mess with int32 offset; IN: seek offset int32 origin; IN: where we should calc the offset from RETURNS SUCCEED / FAIL DESCRIPTION Set the seek posn in the given buffered element ---------------------------------------------------------------------------*/ int32 HBPseek(accrec_t *access_rec, int32 offset, int origin) { int32 ret_value = SUCCEED; /* Adjust offset according to origin. There is no upper bound to posn */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += ((bufinfo_t *)(access_rec->special_info))->length; if (offset < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* set the offset */ access_rec->posn = offset; done: return ret_value; } /* HBPseek */ /* ------------------------------ HBPread ------------------------------- */ /* NAME HBPread -- read some data out of buffered element USAGE int32 HBPread(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer for data RETURNS The number of bytes read or FAIL on error DESCRIPTION Read in some data from a buffered element. If length is zero read until the end of the element. It is assumed that the data buffer is big enough to store the data. ---------------------------------------------------------------------------*/ int32 HBPread(accrec_t *access_rec, int32 length, void *data) { bufinfo_t *info = /* information on the special element */ (bufinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate length */ if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* adjust length if it falls off the end of the element */ if ((length == 0) || (access_rec->posn + length > info->length)) length = info->length - access_rec->posn; else if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* Copy data from buffer */ memcpy(data, info->buf + access_rec->posn, length); /* adjust access position */ access_rec->posn += length; ret_value = length; done: return ret_value; } /* HBPread */ /* ------------------------------ HBPwrite ------------------------------- */ /* NAME HBPwrite -- write some data out to a buffered element USAGE int32 HBPwrite(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer of data RETURNS The number of bytes written or FAIL on error DESCRIPTION Write out some data to a buffered element. ---------------------------------------------------------------------------*/ int32 HBPwrite(accrec_t *access_rec, int32 length, const void *data) { bufinfo_t *info = /* information on the special element */ (bufinfo_t *)(access_rec->special_info); int32 new_len; /* new length of object */ int32 ret_value = SUCCEED; /* validate length */ if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* Check if the data to write will overrun the buffer and realloc it if so */ if (access_rec->posn + length > info->length) { /* Calc. the new size of the object */ new_len = access_rec->posn + length; /* Resize buffer in safe manner */ /* Realloc should handle this, but the Sun is whining about it... -QAK */ if (info->buf == NULL) { if ((info->buf = malloc((uint32)new_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } else { uint8 *temp_buf = info->buf; /* temporary buffer pointer in case realloc fails */ if ((info->buf = realloc(info->buf, (uint32)new_len)) == NULL) { info->buf = temp_buf; HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ } /* update length */ info->length = new_len; } /* end if */ /* Copy data to buffer */ memcpy(info->buf + access_rec->posn, data, length); /* Mark the buffer as modified */ info->modified = TRUE; /* update access record */ access_rec->posn += length; ret_value = length; /* return length of bytes written */ done: return ret_value; } /* HBPwrite */ /* ------------------------------ HBPinquire ------------------------------ */ /* NAME HBPinquire -- retrieve information about a buffered element USAGE int32 HBPinquire(access_rec, file, tag, ref, len, off, pos, acc, sp) access_t * access_rec; IN: access record to return info about uint16 * file; OUT: file ID; uint16 * tag; OUT: tag of info record; uint16 * ref; OUT: ref of info record; int32 * len; OUT: length of element; int32 * off; OUT: offset of element (NOT correct); int32 * pos; OUT: current position in element; int16 * acc; OUT: access mode; int16 * sp; OUT: special code; RETURNS SUCCEED DESCRIPTION Return interesting information about a buffered element. NULL can be passed for any of the OUT parameters if their value is not needed. ---------------------------------------------------------------------------*/ int32 HBPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { bufinfo_t *info = /* special information record */ (bufinfo_t *)access_rec->special_info; uint16 data_tag, data_ref; /* tag/ref of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 ret_value = SUCCEED; /* Get the data's offset & length */ if (HTPinquire(info->buf_access_rec->ddid, &data_tag, &data_ref, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id) *pfile_id = access_rec->file_id; if (ptag) *ptag = data_tag; if (pref) *pref = data_ref; if (plength) *plength = info->length; /* pass along our value, which might be different from that on disk */ if (poffset) *poffset = data_off; if (pposn) *pposn = access_rec->posn; if (paccess) *paccess = (int16)access_rec->access; if (pspecial) *pspecial = (int16)access_rec->special; done: return ret_value; } /* HBPinquire */ /* ----------------------------- HBPendaccess ----------------------------- */ /* NAME HBPendacess -- flush buffer, free AID USAGE intn HBPendaccess(access_rec) access_t * access_rec; IN: access record to close RETURNS SUCCEED / FAIL DESCRIPTION Flush the buffer (if modified) and free the AID ---------------------------------------------------------------------------*/ intn HBPendaccess(accrec_t *access_rec) { intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* shut down the memory buffer and dependent access record */ if (HBPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* free the access record */ HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HBPendaccess */ /* ----------------------------- HBPcloseAID ------------------------------ */ /* NAME HBPcloseAID -- flush buffer and free memory but keep AID active USAGE int32 HXPcloseAID(access_rec) access_t * access_rec; IN: access record of file to close RETURNS SUCCEED / FAIL DESCRIPTION Flush the buffered data (if modified) and free special element information, but do *NOT* free the AID. This is called by Hnextread() which reuses an AID to point to the 'next' object as requested. If the current object was an buffered object, the buffer needs to be flushed and freed before all reference to it is lost. ---------------------------------------------------------------------------*/ int32 HBPcloseAID(accrec_t *access_rec) { bufinfo_t *info = /* special information record */ (bufinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* detach the special information record. If no more references to that, free the record */ if (--(info->attached) == 0) { /* Flush the data if it's been modified */ if (info->modified) { if (Hwrite(info->buf_aid, info->length, info->buf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ /* Free the memory buffer */ free(info->buf); /* Close the dependent access record */ Hendaccess(info->buf_aid); free(info); access_rec->special_info = NULL; } done: return ret_value; } /* HBPcloseAID */ /* ------------------------------- HBPinfo -------------------------------- */ /* NAME HBPinfo -- return info about an external element USAGE int32 HBPinfo(access_rec, info_block) accrec_t * access_rec; IN: access record of element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given external element. Info_block is assumed to be non-NULL. --------------------------------------------------------------------------- */ int32 HBPinfo(accrec_t *access_rec, sp_info_block_t *info_block) { bufinfo_t *info = /* special information record */ (bufinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate access record */ if (access_rec->special != SPECIAL_BUFFERED) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_block */ info_block->key = SPECIAL_BUFFERED; info_block->buf_aid = info->buf_aid; done: return ret_value; } /* HBPinfo */ hdf4-hdf4.3.1/hdf/src/hchunks.c000066400000000000000000004415731503061704500162040ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------------------------------ HMCxxx ------------------------------- Routines to implement chunked elements via a Vdatas for the chunk table and using a new data tag DFTAG_CHUNK to represent each chunk object. As a result the *total* number of chunks for all the chunked elements in an HDF file can only be as large as sizeof(uint16) = 65,536(i.e. number of refs). This layer only has to deal with Chunks from a STDIO programming model as this how special elements are viewed by other API's in the library. The layers above deal with the more complex issues of deciding what data to read/write next given the users request. This layer basically chunks the element from a stream of bytes. Note that this is different than if the layer was integrated with say the SDS layer. NOTE: GeorgeV's standard Disclaimer . I was coerced to do it this way....:-) If you break it .....you fix it... Description of file format headers for chunked element ------------------------------------------------------ A chunked element is a special element. Special elements are flagged with a set high-bit in their tag. Thus, a tag t has BASETAG == t & 0x7f and is a special tag if t & 0x80 != 0x00 The first 16 bits of the meta-element that this tag/ref points to tells us what type of special element this is. If these 16 bits is SPECIAL_CHUNKED, then it contains information about the chunked element. After this 16 bits, 32 bit which is the length of each chunk, after which is the information header: File Description of Chunked Element **************************************** NOTE: I know some of the fields could be 1 byte instead of 4 bytes but I decided to make them 4 to allow the fields to change their behaviour in the future.....i.e some could hold tag/refs.. DD for Chunked Element pointing to Chunked Description Record(12 byes ) ======================================================================= <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- |extended tag | reference # | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V CHUNKED DESCRIPTION RECORD(6 + 9 + 12 + 8 + 12 x ndims + 4 + fill_val_len + 'specialness' bytes) > 52 bytes ============================================================================ <- 2 bytes -> <- 4 bytes -> (6 bytes) -------------------------------- |sp_tag_desc |sp_tag_head_len | ... cont'd -------------------------------- <-1 byte-> <- 4 bytes -> <- 4bytes -> ( 9 bytes) ------------------------------------------ | version | flag | elm_tot_length |... cont'd ------------------------------------------ <- 4 bytes -> <- 4 bytes -> <- 2 bytes -> <- 2 bytes -> (12 bytes) --------------------------------------------------------- ...| chunk_size | nt_size | chk_tbl_tag | chk_tbl_ref | ...cont'd --------------------------------------------------------- <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> (8 bytes) ---------------------------------------- ...| sp_tag | sp_ref | ndims | ...cont'd ---------------------------------------- <- 4 bytes -> <- 4 bytes -> <- 4 bytes -> (12 x ndims bytes) -------------------------------------------- ...| flag | dim_length | chunk_length | ... x Number of dimensions -------------------------------------------- <- 4 bytes -> <- variable bytes -> ------------------------------------------ ...| fill_val_num_bytes | fill value...... | ...(optional cont'd) ------------------------------------------ Optimal number of these depending on multiple 'specialness' set in 'flag' field. <- 2 byte -> <- 4 bytes -> <- variable bytes -> (6 + variable bytes) -------------------------------------------------------- ...| sp_tag_desc | sp_tag_header len | sp_tag_header......|... -------------------------------------------------------- Fields ------ sp_tag_desc - SPECIAL_CHUNKED(16 bit constant), identifies this as a chunked element description record sp_tag_head_len - length of this special element header only.(4 bytes) Does not include length of header with additional 'specialness' headers. NOTE: This is done to make this header layout similar to the multiple 'specialiness' layout. version - version info (8 bit field) flag - bit field to set additional specialness (32 bit field) only bottom 8bits used for now. elem_tot_len - Valid logical Length of the entire element(4 bytes) The logical physical length is this value multiplied by 'nt_size'. The actual physical length used for storage can be greater than the dataset size due to ghost areas in chunks. Partial chunks are not distinguished from regular chunks. chunk_size - logical size of data chunks(4 bytes) nt_size - Number type size i.e size of data type (4 bytes) chk_tbl_tag - Tag of chunk table i.e. Vdata (2 bytes) chk_tbl_ref - Reference number of the chunk table i.e. Vdata (2 bytes) sp_tag - For future use i.e. special table for 'ghost' chunks(2 bytes) sp_ref - For future use(2 bytes) ndims - number of dimensions for the chunked element.(4 bytes) file_val_num_bytes - number of bytes in fill value (4 bytes) fill value - fill value (variable bytes) Fields for each dimension: (12 x ndims bytes) -------------------------------------- flag - (32 bit field) |High 8bits|Medium High 8bits|Medium Low 8bit|Low 8bits| o distrib_type (Low 8 bits, bits 0-7) - type of data distribution along this dimension 0x00->None, 0x01->Block Currently only block distribution is supported but this is not checked or verified for now. o other (Medium Low 8 bits, bits 7-15) 0x00->Regular dimension, 0x01->UNLIMITED dimension dim_length - current length of this dimension. (4 bytes) chunk_length - length of the chunk along this dimension (4 bytes) Fields for each additional 'specialness' (Optional) ------------------------------------------- sp_tag_desc - SPECIAL_xxx(16 bit constant), identifies this as a 'xxx' element description record .(16 bit field) sp_tag_header_len - length of special element header(4 bytes) sp_tag_header - special header.(variable bytes) Chunk Table(variable bytes per record in Vdata due to size of origin) ==================================================================== <- variable bytes -> <- 2 bytes -> <- 2 bytes -> ------------------------------------------------- | origin | chunk_tag | chunk_ref_1 | ------------------------------------------------- - - - N is number of - - - chunk records - - - in Vdata ------------------------------------------------- | origin | chunk_tag | chunk_ref_N | ------------------------------------------------- \______________/ __________________________________________| V <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- | DFTAG_CHUNK | chunk_ref_N | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V ----------------------- | Data_chunk | ----------------------- Note: The "Length" here is specified by "chk_size" x "nt_size". Fields ------ origin - specifies the coordinates of the chunk in the overall chunk array. (variable field, depends on number of dimensions of chunked element). chunk_tag - DFTAG_CHUNK for now(could be another chunked element to allow recursive chunked elements(DFTAG_CHUNKED)) (16 bit field) chunk_ref - Reference number of chunk itself (16 bit field) EXPORTED ROUTINES ================= User Public ----------- HMCcreate -- create a chunked element HMCwriteChunk -- write out the specified chunk to a chunked element HMCreadChunk -- read the specified chunk from a chunked element HMCsetMaxcache -- maximum number of chunks to cache HMCPcloseAID -- close file but keep AID active (For Hnextread()) Library Private --------------- HMCPstread -- open an access record for reading HMCPstwrite -- open an access record for writing HMCPseek -- set the seek posn HMCPchunkread -- read a single chunk out of a chunked element HMCPread -- read some data out of a chunked element HMCPchunkwrite -- write out a single chunk to a chunked element HMCPwrite -- write out some data to a chunked element HMCPinquire -- Hinquire for chunked element HMCPendacess -- close a chunked element AID HMCPinfo -- return info about a chunked element HMCPgetnumrecs -- get the number of records in a chunked element TBBT helper rotuines ------------------- chkcompare -- comprares 2 chunk records chkfreekey -- frees chunk key chkdestroynode -- destroys chunk record LOCAL ROUTINES ============== Chunking helper routines ------------------------ create_dim_recs -- create the appropriate arrays in memory update_chunk_indices_seek -- translate seek pos to chunk and pos in chunk compute_chunk_to_seek -- translate chunk coordinates to seek position update_chunk_indices -- not used compute_array_to_chunk -- not used calculate_num_to_chunk -- not used compute_chunk_to_array -- translate chunk arrays to user array compute_array_to_seek -- translate user array to user seek position calculate_seek_in_chunk -- translate pos in chunk to seek pos in chunk update_seek_pos_chunk -- update chunk seek array with seek pos in chunk calculate_chunk_num -- translate chunk coordinates to a number calculate_chunk_for_chunk -- calculate number of bytes to operate on chunk Common Routine ------------- HMCIstaccess -- set up AID to access a chunked element AUTHOR ------- -GeorgeV - 9/3/96 */ /* For Statistics from the chunk cache. Note that 'mache.c' must be compiled with -DSTATISTICS */ /* #define STATISTICS */ #include "hdf_priv.h" #include "hfile_priv.h" #include "mcache_priv.h" #include "hchunks_priv.h" #include "tbbt_priv.h" #include "mcache_priv.h" #include "hcomp.h" /* Define class, class version and name(partial) for chunk table i.e. Vdata */ #define _HDF_CHK_TBL_NAME "_HDF_CHK_TBL_" /* 13 bytes */ /* Define field name for each chunk record i.e. Vdata record */ #define _HDF_CHK_FIELD_1 "origin" /* 6 bytes */ #define _HDF_CHK_FIELD_2 "chk_tag" /* 7 bytes */ #define _HDF_CHK_FIELD_3 "chk_ref" /* 7 bytes */ #define _HDF_CHK_FIELD_NAMES "origin,chk_tag,chk_ref" /* 22 bytes */ /* Define version number for chunked header format */ #define _HDF_CHK_HDR_VER 0 /* zero version for format header */ /* Structure for each Data array dimension */ typedef struct dim_rec_struct { /* fields stored in chunked header */ int32 flag; /* distrib_type(low 8 bits 0-7) - Data distribution along this dimension other(medium low 8 bits 8-15) - regular/unlimited dimension? */ int32 dim_length; /* length of this dimension */ int32 chunk_length; /* chunk length along this dimension */ /* info determined from 'flag' field */ int32 distrib_type; /* Data distribution along this dimension */ int32 unlimited; /* regular(0) or unlimited dimension(1) */ /* computed fields */ int32 last_chunk_length; /* last chunk length along this dimension */ int32 num_chunks; /* i.e. "dim_length / chunk_length" */ } DIM_REC, *DIM_REC_PTR; /* Structure for each Chunk */ typedef struct chunk_rec_struct { int32 chunk_number; /* chunk number from coordinates i.e. origin */ int32 chk_vnum; /* chunk vdata record number i.e. position in table*/ /* chunk record fields stored in Vdata Table */ int32 *origin; /* origin -> position of chunk */ uint16 chk_tag; /* DFTAG_CHUNK or another Chunked element? */ uint16 chk_ref; /* reference number of this chunk */ } CHUNK_REC, *CHUNK_REC_PTR; /* information on this special chunk data elt */ typedef struct chunkinfo_t { intn attached; /* how many access records refer to this elt */ int32 aid; /* Access id of chunk table i.e. Vdata */ /* chunked element format header fields */ int32 sp_tag_header_len; /* length of the special element header */ uint8 version; /* Version of this Chunked element */ int32 flag; /* flag for multiply specialness ...*/ int32 length; /* the actual length of the data elt */ int32 chunk_size; /* the logical size of the chunks */ int32 nt_size; /* number type size i.e. size of data type */ uint16 chktbl_tag; /* DFTAG_VH - Vdata header */ uint16 chktbl_ref; /* ref of the first chunk table structure(VDATA) */ uint16 sp_tag; /* For future use.. */ uint16 sp_ref; /* For future use.. */ int32 ndims; /* number of dimensions of chunk */ DIM_REC *ddims; /* array of dimension records */ int32 fill_val_len; /* fill value number of bytes */ void *fill_val; /* fill value */ /* For each specialness, only one for now SPECIAL_COMP */ int32 comp_sp_tag_head_len; /* Compression header length */ void *comp_sp_tag_header; /* compression header */ /* For Compression info */ comp_coder_t comp_type; /* Compression type */ comp_model_t model_type; /* Compression model type */ comp_info *cinfo; /* Compression info struct */ model_info *minfo; /* Compression model info struct */ /* additional memory resident data structures to be used */ int32 *seek_chunk_indices; /* chunk array indices relative to the other chunks */ int32 *seek_pos_chunk; /* position within the current chunk */ int32 *seek_user_indices; /* user position within the element */ TBBT_TREE *chk_tree; /* TBBT tree of all accessed table entries i.e. CHUNK_REC's read/written/modified */ MCACHE *chk_cache; /* chunk cache */ int32 num_recs; /* number of Table(Vdata) records */ } chunkinfo_t; /* private functions */ static int32 HMCIstaccess(accrec_t *access_rec, /* IN: access record to fill in */ int16 acc_mode /* IN: access mode */); /* tbbt_priv.h helper routines */ static intn chkcompare(void *k1, /* IN: first key */ void *k2, /* IN: second key */ intn cmparg /* IN: not sure? */); static void chkfreekey(void *key /*IN: chunk key */); static void chkdestroynode(void *n /* IN: chunk record */); static int32 HMCPstread(accrec_t *access_rec /* IN: access record to fill in */); static int32 HMCPstwrite(accrec_t *access_rec /* IN: access record to fill in */); static int32 HMCPseek(accrec_t *access_rec, /* IN: access record to mess with */ int32 offset, /* IN: seek offset */ int origin /* IN: where we should calc the offset from */); static int32 HMCPchunkread(void *cookie, /* IN: access record to mess with */ int32 chunk_num, /* IN: chunk to read */ void *datap /* OUT: buffer for data */); static int32 HMCPread(accrec_t *access_rec, /* IN: access record to mess with */ int32 length, /* IN: number of bytes to read */ void *data /* OUT: buffer for data */); static int32 HMCPchunkwrite(void *cookie, /* IN: access record to mess with */ int32 chunk_num, /* IN: chunk number */ const void *datap /* IN: buffer for data */); static int32 HMCPwrite(accrec_t *access_rec, /* IN: access record to mess with */ int32 length, /* IN: number of bytes to write */ const void *data /* IN: buffer for data */); static intn HMCPendaccess(accrec_t *access_rec /* IN: access record to close */); static int32 HMCPinfo(accrec_t *access_rec, /* IN: access record of access element */ sp_info_block_t *info_chunk /* OUT: information about the special element */); static int32 HMCPinquire(accrec_t *access_rec, /* IN: access record to return info about */ int32 *pfile_id, /* OUT: file ID; */ uint16 *ptag, /* OUT: tag of info record; */ uint16 *pref, /* OUT: ref of info record; */ int32 *plength, /* OUT: length of element; */ int32 *poffset, /* OUT: offset of element -- meaningless */ int32 *pposn, /* OUT: current position in element; */ int16 *paccess, /* OUT: access mode; */ int16 *pspecial /* OUT: special code; */); /* the accessing special function table for chunks */ funclist_t chunked_funcs = { HMCPstread, HMCPstwrite, HMCPseek, HMCPinquire, HMCPread, HMCPwrite, HMCPendaccess, HMCPinfo, NULL /* no routine registered */ }; /* ------------------------------------------------------------------------- NAME create_dim_recs -- create the appropriate arrays in memory DESCRIPTION Given number of dimensions create the following 3 arrays. 1. Dimension record array contains a record for each dimension. 2. Seek chunk indices array contains the seek position relative to the logical representation of the chunked array. 3. The seek position chunk array contains the seek position relative to the chunk itself. 4. The user array contains the users seek position in the element RETURNS SUCCEED/FAIL AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 create_dim_recs(DIM_REC **dptr, /* OUT: dimension record pointers */ int32 **sbi, /* OUT: seek chunk indices array */ int32 **spb, /* OUT: seek pos w/ chunk array */ int32 **sui, /* OUT: seek user indices array */ int32 ndims /* IN: number of dimension of element */) { int32 i; int32 ret_value = SUCCEED; /* allocate space for dimension records pointers */ if ((*dptr = (DIM_REC *)malloc(sizeof(DIM_REC) * (size_t)ndims)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate space for seek chunk indices and chunk seek positions */ if ((*sbi = (int32 *)malloc(sizeof(int32) * (size_t)ndims)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((*spb = (int32 *)malloc(sizeof(int32) * (size_t)ndims)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate space for user seek indices */ if ((*sui = (int32 *)malloc(sizeof(int32) * (size_t)ndims)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* for each dimension */ for (i = 0; i < ndims; i++) { /* Initialize values for dimension record */ (*dptr)[i].flag = 0; (*dptr)[i].dim_length = 0; (*dptr)[i].chunk_length = 0; (*dptr)[i].distrib_type = 0; (*dptr)[i].unlimited = 0; (*dptr)[i].last_chunk_length = 0; (*dptr)[i].num_chunks = 0; (*sbi)[i] = 0; (*spb)[i] = 0; (*sui)[i] = 0; } done: if (ret_value == FAIL) { /* Error condition cleanup */ free(*dptr); free(*sbi); free(*spb); free(*sui); } return ret_value; } /* end create_dim_recs() */ /* ------------------------------------------------------------------------- NAME update_chunk_indices_seek -- translate seek pos to chunk and pos in chunk DESCRIPTION Give seek location within an element, calculate which chunk in chunk array and position within chunk. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void update_chunk_indices_seek(int32 sloc, /* IN: physical Seek loc in element */ int32 ndims, /* IN: number of dimensions of elem */ int32 nt_size, /* IN: number type size */ int32 *sbi, /* IN: seek chunk indices array */ int32 *spb, /* IN: seek pos w/ chunk array */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 i; int32 stmp; /* adjust physical seek->logical seek by using number type size */ stmp = sloc / nt_size; for (i = ndims - 1; i >= 0; i--) { /* Calculate which chunk index in chunk representation */ sbi[i] = (int32)((stmp % ddims[i].dim_length) / ddims[i].chunk_length); /* calculate starting position in the chunk itself */ spb[i] = (int32)((stmp % ddims[i].dim_length) % ddims[i].chunk_length); stmp = stmp / ddims[i].dim_length; } } /* update_chunk_indices_seek()*/ /* ------------------------------------------------------------------------- NAME compute_chunk_to_array -- translate chunk arrays to user array DESCRIPTION Calculate user array indices given overall array chunk indices and position within chunk. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void compute_chunk_to_array(int32 *chunk_indices, /* IN: chunk indices */ int32 *chunk_array_ind, /* IN: chunk array indices */ int32 *array_indices, /* OUT: array indices */ int32 ndims, /* IN: number of dims */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 j; for (j = 0; j < ndims; j++) { /* set position in using overall chunk array */ array_indices[j] = chunk_indices[j] * ddims[j].chunk_length; /* set position using the chunk itself need to adjust for last chunk along each dimension */ if (chunk_indices[j] == (ddims[j].num_chunks - 1)) { /* last chunk along this dimension */ array_indices[j] += (chunk_array_ind[j] > ddims[j].last_chunk_length) ? ddims[j].last_chunk_length : chunk_array_ind[j]; } else /* not last chunk along a dimension */ array_indices[j] += chunk_array_ind[j]; } } /* compute_chunk_to_array() */ /* ------------------------------------------------------------------------- NAME compute_array_to_seek -- translate user array to user seek position DESCRIPTION Computer user seek position within element given user array. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void compute_array_to_seek(int32 *user_seek, /* OUT: user seek */ int32 *array_indices, /* IN: user array indices */ int32 nt_size, /* IN: number type size */ int32 ndims, /* IN: number of dims */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 j; int32 cnum; /* Calculate seek position within user array */ *user_seek = array_indices[ndims - 1]; if (ndims > 1) { cnum = 1; for (j = ndims - 2; j >= 0; j--) { cnum *= ddims[j + 1].dim_length; *user_seek += (array_indices[j] * cnum); } } /* multiply by number type size to get new physical user seek position */ *user_seek = *user_seek * nt_size; } /* compute_array_to_seek() */ /* ------------------------------------------------------------------------- NAME calculate_seek_in_chunk -- translate pos in chunk to seek pos in chunk DESCRIPTION Calculate seek position within chunk RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void calculate_seek_in_chunk(int32 *chunk_seek, /* OUT: new physical seek pos in element*/ int32 ndims, /* IN: number of dims */ int32 nt_size, /* IN: number type size */ int32 *spb, /* IN; seek pos w/ chunk array */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 j; int32 cnum; /* Calculate seek position within chunk */ *chunk_seek = spb[ndims - 1]; if (ndims > 1) { cnum = 1; for (j = ndims - 2; j >= 0; j--) { cnum *= ddims[j + 1].chunk_length; *chunk_seek += (spb[j] * cnum); } } /* multiply by number type size to get new physical seek position */ *chunk_seek = *chunk_seek * nt_size; } /* calculate_seek_in_chunk() */ /* ------------------------------------------------------------------------- NAME update_seek_pos_chunk -- update chunk seek array with seek pos in chunk DESCRIPTION Update chunk seek array with seek pos in chunk. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void update_seek_pos_chunk(int32 chunk_seek, /* IN: physical seek pos in chunk */ int32 ndims, /* IN: number of dims */ int32 nt_size, /* IN: number type size */ int32 *spb, /* OUT: seek pos w/ chunk array */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 i; int32 stmp; /* adjust physical seek->logical seek by using number type size */ stmp = chunk_seek / nt_size; for (i = ndims - 1; i >= 0; i--) { /* calculate starting position in the chunk itself */ spb[i] = (int32)(stmp % ddims[i].chunk_length); stmp = stmp / ddims[i].chunk_length; } } /* update_seek_pos_chunk() */ /* ------------------------------------------------------------------------- NAME calculate_chunk_num - translate chunk coordinates to a number DESCRIPTION Calculate new chunk number given seek chunk array and seek position within that chunk array. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void calculate_chunk_num(int32 *chunk_num, /* OUT: new chunk number within element */ int32 ndims, /* IN: number of dims */ int32 *sbi, /* IN: seek chunk array */ DIM_REC *ddims /* IN: dim record ptrs */) { int32 j; int32 cnum; /* Calculate chunk number from overall chunk array indices */ *chunk_num = sbi[ndims - 1]; if (ndims > 1) { cnum = 1; for (j = ndims - 2; j >= 0; j--) { cnum *= ddims[j + 1].num_chunks; *chunk_num += (sbi[j] * cnum); } } } /* calculate_chunk_num() */ /* ------------------------------------------------------------------------- NAME calculate_chunk_for_chunk - calculate number of bytes to operate on chunk DESCRIPTION Given the length of bytes to operate on and the size of bytes already operated on, calculate how big of chunk can be written to the current chunk. RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void calculate_chunk_for_chunk(int32 *chunk_size, /* OUT: chunk size for this chunk */ int32 ndims, /* IN: number of dims */ int32 nt_size, /* IN: number type size */ int32 len, /* IN: total length to operate on */ int32 bytes_finished, /* IN: bytes already operated on*/ int32 *sbi, /* IN: seek chunk array */ int32 *spb, /* IN: seek pos w/ chunk array */ DIM_REC *ddims /* IN: dim record ptrs */) { /* Is this the last chunk along fastest changing dimension(i.e. subscript). In future maybe need to handle variable case of any dimension being the fastest. */ if (sbi[ndims - 1] == (ddims[ndims - 1].num_chunks - 1)) { /* last chunk */ /* Calculate size of chunk to write for the last chunk */ if ((ddims[ndims - 1].last_chunk_length - spb[ndims - 1]) * nt_size > (len - bytes_finished)) *chunk_size = len - bytes_finished; /* less than a chunk to write */ else /* last full chunk */ *chunk_size = (ddims[ndims - 1].last_chunk_length - spb[ndims - 1]) * nt_size; } else /* not the last chunk */ { /* Calculate size of chunk to write in this chunk */ if ((ddims[ndims - 1].chunk_length - spb[ndims - 1]) * nt_size > (len - bytes_finished)) *chunk_size = len - bytes_finished; /* less than a chunk to write */ else /* full chunk */ *chunk_size = (ddims[ndims - 1].chunk_length - spb[ndims - 1]) * nt_size; } } /* calculate_chunk_for_chunk() */ /* ------------------------------------------------------------------------- NAME chkcompare DESCRIPTION Compares two chunk B-tree keys for equality. Similar to memcmp. *** Only called by B-tree routines, should _not_ be called externally *** RETURNS AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static intn chkcompare(void *k1, /* IN: first key */ void *k2, /* IN: second key */ intn cmparg /* IN: not sure? */) { intn ret_value; (void)cmparg; /* valid for integer keys */ ret_value = ((intn)((*(int32 *)k1) - (*(int32 *)k2))); return ret_value; } /* chkcompare */ /********* Helper fcns for dealing with chunk table TBBT tree ***************/ /* ------------------------------------------------------------------------- NAME chkfreekey DESCRIPTION Free key - used by tbbt routines *** Only called by B-tree routines, should _not_ be called externally *** RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void chkfreekey(void *key /*IN: chunk key */) { free(key); } /* chkfreekey() */ /* ------------------------------------------------------------------------- NAME chkdestroynode DESCRIPTION Frees chunk B-Tree nodes *** Only called by B-tree routines, should _not_ be called externally *** RETURNS Nothing AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static void chkdestroynode(void *n /* IN: chunk record */) { CHUNK_REC *t = (CHUNK_REC *)n; if (t != NULL) { /* free origin first */ free(t->origin); /* free chunk record structure */ free(t); } } /* chkdestroynode */ /* ----------------------------- HMCIstaccess ------------------------------ NAME HMCIstaccess -- set up AID to access a chunked elem DESCRIPTION Calls to HMCIstread and HMCIstwrite resolve to this function. Given an active AID fill in all of the special information. If this information has already been read in for a different element use that else we must go out to the HDF file and pull in the information ourselves This routine also creates the chunk cache for the chunked element. The cache is initialized with the physical size of each chunk, the number of chunks in the object i.e. object size/ chunk size, and the maximum number of chunks to cache in memory. Chunks in the cache are dealt with by their number i.e. translation of 'origin' of chunk to a unique number. The default maximum number of chunks is the cache is set the number of chunks along the last dimension. NOTE: The cache itself could be used to cache any object into a number of fixed size chunks so long as the read/write(page-in/page-out) routines know how to deal with getting the correct chunk based on a number. These routines can be found in 'mcache.c'. RETURNS The AID of the access record on success FAIL on error. AUTHOR -GeorgeV - 9/3/96 ----------------------------------------------------------------------------*/ static int32 HMCIstaccess(accrec_t *access_rec, /* IN: access record to fill in */ int16 acc_mode /* IN: access mode */) { filerec_t *file_rec = NULL; /* file record */ chunkinfo_t *info = NULL; /* information about data elt */ int32 dd_aid; /* AID for writing the special info */ uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ uint8 local_ptbuf[6]; /* 6 bytes for special header length */ #if 0 uint8 *c_sp_header = NULL; /* special element header(dynamic) */ #endif uint8 c_sp_header[256] = ""; /* special element header buffer. dynamic allocation causes a problem on the HPUX -GV */ int32 interlace; /* type of interlace */ int32 vdata_size; /* size of Vdata */ int32 num_recs; /* number of Vdatas */ uint8 *v_data = NULL; /* Vdata record */ CHUNK_REC *chkptr = NULL; /* Chunk record */ int32 *chk_key = NULL; /* chunk key */ int32 npages = 1; /* number of chunks */ int32 chunks_needed; /* default chunk cache size */ int32 access_aid = FAIL; /* access id */ int32 ret_value = SUCCEED; char name[VSNAMELENMAX + 1]; /* Vdata name */ char class[VSNAMELENMAX + 1]; /* Vdata class */ char v_class[VSNAMELENMAX + 1] = ""; /* Vdata class for comparison */ intn i, j, k; /* loop indices */ /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* validate file record id */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec) || !(file_rec->access & acc_mode)) HGOTO_ERROR(DFE_ARGS, FAIL); /* set up some data in access record */ access_rec->special = SPECIAL_CHUNKED; access_rec->posn = 0; access_rec->access = (uint32)(acc_mode | DFACC_READ); /* * Lets free old special info first,if one exists, * before copying a new one * * Hmm.....this is what other special elements do currently * don't know if this is really necessary.....but leave in for now.. */ if (access_rec->special_info != NULL) { /* special information record */ chunkinfo_t *tmpinfo = (chunkinfo_t *)access_rec->special_info; if (--(tmpinfo->attached) == 0) { /* the last one so now.. */ /* free old info from Chunk tables ..etc*/ /* Sync chunk cache */ mcache_sync(tmpinfo->chk_cache); /* close/free chunk cache */ mcache_close(tmpinfo->chk_cache); /* Use Vxxx interface to free Vdata info */ VSdetach(tmpinfo->aid); /* free chunk tree */ tbbtdfree(tmpinfo->chk_tree, chkdestroynode, chkfreekey); /* free up stuff in special info */ free(tmpinfo->ddims); free(tmpinfo->seek_chunk_indices); free(tmpinfo->seek_pos_chunk); free(tmpinfo->seek_user_indices); free(tmpinfo->fill_val); free(tmpinfo->comp_sp_tag_header); free(tmpinfo->cinfo); free(tmpinfo->minfo); /* free info struct last */ free(tmpinfo); access_rec->special_info = NULL; } } /* end if special->info already */ /* get the info for the dataset i.e. tag/ref*/ /* get info about chunk table i.e. Vdata? */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* if the special information are already in some other acc elt, * point to it and return */ access_rec->special_info = HIgetspinfo(access_rec); if (access_rec->special_info) { /* special info exists */ ((chunkinfo_t *)access_rec->special_info)->attached++; file_rec->attach++; info = (chunkinfo_t *)access_rec->special_info; /* set return value */ access_aid = HAregister_atom(AIDGROUP, access_rec); } else /* need to allocate a new special info and get it */ { /* allocate space for special chunk info */ if ((info = (chunkinfo_t *)malloc(sizeof(chunkinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->seek_chunk_indices = NULL; info->seek_pos_chunk = NULL; info->seek_user_indices = NULL; info->ddims = NULL; info->chk_tree = NULL; info->chk_cache = NULL; info->fill_val = NULL; info->minfo = NULL; info->cinfo = NULL; info->comp_sp_tag_header = NULL; info->comp_sp_tag_head_len = 0; info->num_recs = 0; /* zero records to start with */ /* read the special info structure from the file */ if ((dd_aid = Hstartaccess(access_rec->file_id, data_tag, data_ref, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hseek(dd_aid, 2, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* first read special tag header length which is 4 bytes */ if (Hread(dd_aid, 4, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode it */ { uint8 *p = local_ptbuf; INT32DECODE(p, info->sp_tag_header_len); /* 4 bytes */ } /* Sanity check, the 256 limit is arbitrary and can be removed later....*/ if (info->sp_tag_header_len < 0 || info->sp_tag_header_len > 256) HGOTO_ERROR(DFE_INTERNAL, FAIL); #if 0 /* dynamic allocation causes a problem on HPUX, removed for now -GV */ /* Allocate buffer space for rest of special header */ if (( c_sp_header = (uint8 *) calloc(info->sp_tag_header_len,1))==NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); #endif /* first read special header in */ if (Hread(dd_aid, info->sp_tag_header_len, c_sp_header) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* decode first special element header */ { uint8 *p = c_sp_header; /* version info */ memcpy(&info->version, p, 1); /* 1 byte */ p = p + 1; /* Should check version here to see if we can handle this version of special format header before we go on */ if (info->version != _HDF_CHK_HDR_VER) HGOTO_ERROR(DFE_INTERNAL, FAIL); INT32DECODE(p, info->flag); /* 4 bytes */ INT32DECODE(p, info->length); /* 4 bytes */ INT32DECODE(p, info->chunk_size); /* 4 bytes */ INT32DECODE(p, info->nt_size); /* 4 bytes */ UINT16DECODE(p, info->chktbl_tag); /* 2 bytes */ UINT16DECODE(p, info->chktbl_ref); /* 2 bytes */ UINT16DECODE(p, info->sp_tag); /* 2 bytes */ UINT16DECODE(p, info->sp_ref); /* 2 bytes */ INT32DECODE(p, info->ndims); /* 4 bytes */ /* = 29 bytes */ /* create dimension, seek_block and seek_pos arrays given number of dims */ if (create_dim_recs(&(info->ddims), &(info->seek_chunk_indices), &(info->seek_pos_chunk), &(info->seek_user_indices), info->ndims) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* decode dimension stuff */ for (j = 0; j < info->ndims; j++) { int32 odd_size; INT32DECODE(p, (info->ddims[j].flag)); /* 4 bytes */ INT32DECODE(p, (info->ddims[j].dim_length)); /* 4 bytes */ INT32DECODE(p, (info->ddims[j].chunk_length)); /* 4 bytes */ /* = 12 bytes */ /* check 'flag' and decode settings */ info->ddims[j].distrib_type = (int32)(0xff & info->ddims[j].flag); info->ddims[j].unlimited = (int32)(0xff & ((uint32)(info->ddims[j].flag >> 8))); info->ddims[j].num_chunks = info->ddims[j].dim_length / info->ddims[j].chunk_length; /* check to see if need to increase # of chunks along this dim*/ if ((odd_size = (info->ddims[j].dim_length % info->ddims[j].chunk_length))) { info->ddims[j].num_chunks++; /* increase by one */ /* set last chunk length */ info->ddims[j].last_chunk_length = odd_size; } else info->ddims[j].last_chunk_length = info->ddims[j].chunk_length; /* */ npages = npages * info->ddims[j].num_chunks; } /* = 12 x ndims bytes */ /* decode fill value length */ INT32DECODE(p, (info->fill_val_len)); /* 4 bytes */ /* allocate space for fill value */ if ((info->fill_val = malloc((size_t)info->fill_val_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* finally decode fill value */ memcpy(info->fill_val, p, info->fill_val_len); /* 1 byte */ } /* end decode special header */ /* if multiply special deal with now */ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: { uint16 sp_tag; /* first read special tag header length which is 2+4 bytes */ if (Hread(dd_aid, 6, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode compression header length */ { uint8 *p = NULL; p = local_ptbuf; UINT16DECODE(p, sp_tag); /* 2 bytes */ INT32DECODE(p, info->comp_sp_tag_head_len); /* 4 bytes */ } /* Sanity check */ if (info->sp_tag_header_len < 0 || sp_tag != SPECIAL_COMP) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Allocate buffer space for compression special header */ if ((info->comp_sp_tag_header = calloc(info->comp_sp_tag_head_len, 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* read special header in */ if (Hread(dd_aid, info->comp_sp_tag_head_len, info->comp_sp_tag_header) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* allocate compression special info */ if ((info->cinfo = (comp_info *)malloc(sizeof(comp_info))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((info->minfo = (model_info *)malloc(sizeof(model_info))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Decode header */ if (HCPdecode_header((uint8 *)info->comp_sp_tag_header, (comp_model_t *)&info->model_type, info->minfo, (comp_coder_t *)&info->comp_type, info->cinfo) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } break; default: /* Do nothing */ break; } /* end switch on specialness */ /* end access to special info stuff */ if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* set up the chunk tables of the information */ /* initialize TBBT tree of CHUNK records*/ info->chk_tree = tbbtdmake(chkcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); /* Use Vdata interface to read in chunk table and store per chunk-info in memory using TBBT trees */ /* Start access on Vdata */ if (Vstart(access_rec->file_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Attach to Vdata with write access if we are writing else read access */ if (access_rec->access & DFACC_WRITE) { if ((info->aid = VSattach(access_rec->file_id, (int32)info->chktbl_ref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); } else /* attach with read access only */ { if ((info->aid = VSattach(access_rec->file_id, (int32)info->chktbl_ref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); } /* get relevant info on Vdata */ if ((VSinquire(info->aid, &num_recs, &interlace, NULL, &vdata_size, name)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Get class of Vdata */ if ((VSgetclass(info->aid, class)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* verify class and version */ sprintf(v_class, "%s%d", _HDF_CHK_TBL_CLASS, _HDF_CHK_TBL_CLASS_VER); if (strncmp(class, v_class, strlen(v_class)) != 0) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Check to see if any chunks have been written out yet */ if (num_recs > 0) { /* Yes */ /* Set the fields to read */ if (VSsetfields(info->aid, _HDF_CHK_FIELD_NAMES) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* Allocate space for a single Vdata record */ if ((v_data = malloc((size_t)vdata_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* for each record read it in and put into TBBT tree NOTE: Should change this to a single VSread() but then would have to store all the v_data rec's somewhere before inserting them into the TBBT tree... ....for someone to do later if performance of VSread() is bad. Technically a B+-Tree should have been used instead or better yet the Vdata implementation should be re-written to use one. Note that chunk tag DTAG_CHUNK is not verified here. It is checked in HMCPchunkread() before the chunk is read. */ for (j = 0; j < num_recs; j++) { uint8 *pntr = NULL; /* read single record */ if (VSread(info->aid, v_data, 1, FULL_INTERLACE) == FAIL) HGOTO_ERROR(DFE_VSREAD, FAIL); pntr = v_data; /* set pointer to vdata record */ /* Allocate space for a chunk record */ if ((chkptr = (CHUNK_REC *)malloc(sizeof(CHUNK_REC))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Allocate space for a origin in chunk record */ if ((chkptr->origin = (int32 *)malloc((size_t)info->ndims * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate space for key */ if ((chk_key = (int32 *)malloc(sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Copy origin first */ for (k = 0; k < info->ndims; k++) { memcpy(&chkptr->origin[k], pntr, sizeof(int32)); pntr += sizeof(int32); } /* Copy tag next. Note: Verification of tag as DTAG_CHUNK is done in HMCPchunkread() before the chunk object is read. In the future the tag/ref pair could point to another chunk table...etc. */ memcpy(&chkptr->chk_tag, pntr, sizeof(uint16)); pntr += sizeof(uint16); /* Copy ref last */ memcpy(&chkptr->chk_ref, pntr, sizeof(uint16)); /* now compute chunk number from origin */ calculate_chunk_num(chk_key, info->ndims, chkptr->origin, info->ddims); chkptr->chunk_number = *chk_key; /* set chunk number to record number */ chkptr->chk_vnum = info->num_recs++; /* add to TBBT tree based on chunk number as the key */ tbbtdins(info->chk_tree, chkptr, chk_key); } /* end for num_recs */ } /* end if num_recs */ /* set return value */ access_aid = HAregister_atom(AIDGROUP, access_rec); /* create chunk cache with 'maxcache' set to the number of chunks along the last dimension i.e subscript changes the fastest*/ chunks_needed = 1; for (i = 1; i < info->ndims; i++) { chunks_needed *= info->ddims[i].num_chunks; } if ((info->chk_cache = mcache_open(&access_rec->file_id, /* cache key */ access_aid, /* object id */ (info->chunk_size * info->nt_size), /* chunk size */ chunks_needed, /* maxcache */ npages, /* num chunks */ 0 /* flags */)) == NULL) HE_REPORT_GOTO("failed to find initialize chunk cache", FAIL); /* set up chunk read/write routines These routines do the actual reading/writing of data from the file in whole chunks only. */ mcache_filter(info->chk_cache, /* cache handle */ HMCPchunkread, /* page-in routine */ HMCPchunkwrite, /* page-out routine */ access_rec /* object handle */); /* update chunk info data and file record info */ info->attached = 1; file_rec->attach++; access_rec->special_info = (chunkinfo_t *)info; } /* end else need to get special info */ /* access to data elements is done on a per chunk basis which can only be done in the read/write routines i.e. the cache pagin/pageout routines....*/ ret_value = access_aid; done: if (ret_value == FAIL) { /* Error condition cleanup */ /* free info struct */ if (info != NULL) { if (info->chk_cache != NULL) { /* Sync chunk cache */ mcache_sync(info->chk_cache); /* close/free chunk cache */ mcache_close(info->chk_cache); } if (info->aid != FAIL) VSdetach(info->aid); /* free chunk tree */ if (info->chk_tree != NULL) tbbtdfree(info->chk_tree, chkdestroynode, chkfreekey); /* free up stuff in special info */ free(info->ddims); free(info->seek_chunk_indices); free(info->seek_pos_chunk); free(info->seek_user_indices); free(info->fill_val); free(info->comp_sp_tag_header); free(info->cinfo); free(info->minfo); free(info); access_rec->special_info = NULL; } } /* end if */ #if 0 /* dynamic allocation causes a problem on HPUX, removed for now -GV */ /* free special element header */ if (c_sp_header != NULL) free(c_sp_header); #endif /* free allocated space for vdata record */ free(v_data); return ret_value; } /* HMCIstaccess */ /* ------------------------------------------------------------------------ NAME HMCcreate -- create a chunked element DESCRIPTION This routine takes an HDF element and promotes it into a chunked element. Basically, the element becomes a chunked element allowing easy appending where the chunk records are stored in a Vdata. If the element already exists, this is an error currently otherwise a new element is created. All of the pieces of the chunked element are the same size from the stand point of the element. If compression is used then each chunk is compressed and the compression layer takes care of it as the chunk layer sees each chunks as a separate HDF object(DFTAG_CHUNK). The proper compression special header needs to be passed to the compression layer. The Vdata(chunk table) is made appendable with linked-block table size of 128. This routine also creates the chunk cache for the chunked element. The cache is initialized with the physical size of each chunk, the number of chunks in the object i.e. object size/ chunk size, and the maximum number of chunks to cache in memory. Chunks in the cache are dealt with by their number i.e. translation of 'origin' of chunk to a unique number. The default maximum number of chunks is the cache is set the number of chunks along the last dimension. NOTE: The cache itself could be used to cache any object into a number of fixed size chunks so long as the read/write(page-in/page-out) routines know how to deal with getting the correct chunk based on a number.These routines can be found in 'mcache.c'. RETURNS The AID of newly created chunked element, FAIL on error. AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ int32 HMCcreate(int32 file_id, /* IN: file to put chunked element in */ uint16 tag, /* IN: tag of element */ uint16 ref, /* IN: ref of element */ uint8 nlevels, /* IN: number of levels of chunks */ int32 fill_val_len, /* IN: fill value length in bytes */ void *fill_val, /* IN: fill value */ HCHUNK_DEF *chk_array /* IN: structure describing chunk distribution can be an array? but we only handle 1 level */ ) { filerec_t *file_rec = NULL; /* file record */ accrec_t *access_rec = NULL; /* access record */ int32 dd_aid = FAIL; /* AID for writing the special info */ chunkinfo_t *info = NULL; /* information for the chunked elt */ uint8 *c_sp_header = NULL; /* special element header */ int32 npages = 1; /* i.e. number of chunks in element */ int32 chunks_needed; /* default size of chunk cache */ int32 access_aid = FAIL; /* access id */ uint16 chktbl_ref; /* the ref of the link structure chunk table i.e. Vdata */ uint16 special_tag; /* special version of this tag */ atom_t data_id; /* dd ID of existing regular element */ int32 sp_tag_header_len = 0; /* length of special header */ int32 data_len = 1; /* logical length of element */ int32 ret_value = SUCCEED; char v_name[VSNAMELENMAX + 1] = ""; /* name of vdata i.e. chunk table */ char v_class[VSNAMELENMAX + 1] = ""; /* Vdata class */ intn i; /* loop index */ (void)nlevels; /* clear error stack and validate file record id */ HEclear(); file_rec = HAatom_object(file_id); /* validate args */ if (BADFREC(file_rec) || chk_array == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* check file access for write */ if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* check if we are accidentally passwed a special tag already */ if (SPECIALTAG(tag) || (special_tag = MKSPECIALTAG(tag)) == DFTAG_NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get empty slot in access records */ access_rec = HIget_access_rec(); if (access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* search for identical dd */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { /* this is where if a tag was already special i.e. compressed we would have to note it and promote it maybe? */ /* Check if the element is already special */ if (HTPis_special(data_id) == TRUE) { HTPendaccess(data_id); HGOTO_ERROR(DFE_CANTMOD, FAIL); } /* end if */ } /* end if */ /* In theory we can have more than one level of chunks so we need to repeat the following steps. This would allow subchunking but currently haven't decided how the user would pass this info to routine to create the proper chunk tables...etc. Do we need to create special chunk table to handle the special chunks i.e. ghost chunks.-> Pass on this for now */ /* allocate and fill in special chunk info struct for CHUNKs */ if ((info = (chunkinfo_t *)malloc(sizeof(chunkinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->attached = 1; info->aid = FAIL; info->version = _HDF_CHK_HDR_VER; /* version 1 for now */ info->flag = chk_array->chunk_flag; /* SPECIAL_COMP ? */ info->cinfo = NULL; info->minfo = NULL; info->comp_sp_tag_head_len = 0; info->comp_sp_tag_header = NULL; info->chunk_size = chk_array->chunk_size; /* logical chunk size */ info->nt_size = chk_array->nt_size; /* number type size */ info->ndims = chk_array->num_dims; /* number of dimensions */ info->sp_tag = DFTAG_NULL; /* not used currently */ info->sp_ref = 0; /* not used currently */ info->seek_chunk_indices = NULL; info->seek_pos_chunk = NULL; info->seek_user_indices = NULL; info->ddims = NULL; info->chk_tree = NULL; info->chk_cache = NULL; info->num_recs = 0; /* zero Vdata records to start */ info->fill_val_len = fill_val_len; /* length of fill value */ /* allocate space for fill value */ if ((info->fill_val = malloc((uint32)fill_val_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* copy fill value over */ memcpy(info->fill_val, fill_val, info->fill_val_len); /* fill_val_len bytes */ /* if compression set then fill in info i.e ENCODE for storage */ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: /* set compression info */ /* allocate compression special info */ if ((info->cinfo = (comp_info *)malloc(sizeof(comp_info))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((info->minfo = (model_info *)malloc(sizeof(model_info))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* find compression header length */ info->comp_sp_tag_head_len = HCPquery_encode_header((comp_model_t)chk_array->model_type, chk_array->minfo, (comp_coder_t)chk_array->comp_type, chk_array->cinfo); /* allocate space for compression header */ if ((info->comp_sp_tag_header = malloc((size_t)info->comp_sp_tag_head_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Encode header for storage */ if (HCPencode_header((uint8 *)info->comp_sp_tag_header, (comp_model_t)chk_array->model_type, chk_array->minfo, (comp_coder_t)chk_array->comp_type, chk_array->cinfo) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Decode header back for memory */ if (HCPdecode_header((uint8 *)info->comp_sp_tag_header, (comp_model_t *)&info->model_type, info->minfo, (comp_coder_t *)&info->comp_type, info->cinfo) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); break; default: /* Do nothing */ break; } /* end switch on specialness */ /* Use Vxxx interface to create new Vdata to hold Chunk table */ /* create/initialize chunk table (Vdata ) */ /* Start access on Vdata */ if (Vstart(file_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Create Vdata */ if ((info->aid = VSattach(file_id, -1, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* get ref of Vdata */ chktbl_ref = (uint16)VSQueryref(info->aid); info->chktbl_ref = chktbl_ref; /* ref of chunk table */ /* get tag of Vdata */ info->chktbl_tag = (uint16)VSQuerytag(info->aid); /* Define fields of chunk table i.e. Vdata */ /* Define origin - order based on number of dims */ if (VSfdefine(info->aid, _HDF_CHK_FIELD_1, DFNT_INT32, info->ndims) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Define tag of chunk Note that the tag could be another Chunk table to represent another level. useful for quadtrees...etc. */ if (VSfdefine(info->aid, _HDF_CHK_FIELD_2, DFNT_UINT16, 1) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Define ref of chunk Note that the ref could be that of another Chunk table to represent another level. useful for quadtrees...etc. */ if (VSfdefine(info->aid, _HDF_CHK_FIELD_3, DFNT_UINT16, 1) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Set Vdata name based on tag and ref of element and of tag/ref of Vdata. ...sort of a back pointer...so sue me...*/ sprintf(v_name, "%s%d_%d_%d_%d", _HDF_CHK_TBL_NAME, tag, ref, info->chktbl_tag, info->chktbl_ref); if (VSsetname(info->aid, v_name) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Set Vdata class and version */ sprintf(v_class, "%s%d", _HDF_CHK_TBL_CLASS, _HDF_CHK_TBL_CLASS_VER); if (VSsetclass(info->aid, v_class) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Set the fields to write */ if (VSsetfields(info->aid, _HDF_CHK_FIELD_NAMES) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* create dimension, seek_block and seek_pos arrays given number of dims */ if (create_dim_recs(&(info->ddims), &(info->seek_chunk_indices), &(info->seek_pos_chunk), &(info->seek_user_indices), info->ndims) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Copy info from input to dimension arrays */ data_len = 1; for (i = 0; i < info->ndims; i++) { int32 odd_size; info->ddims[i].distrib_type = chk_array->pdims[i].distrib_type; if (chk_array->pdims[i].dim_length == 0) /* check unlimited dimension */ { /* yes, UNLIMITED */ info->ddims[i].unlimited = 1; /* set flag */ /* set dimension length to be at least the chunk length along this dimension */ info->ddims[i].dim_length = chk_array->pdims[i].chunk_length; } else /* not an unlimited dimension */ info->ddims[i].dim_length = chk_array->pdims[i].dim_length; /* set dimension 'flag' */ info->ddims[i].flag = (int32)(0xffff & ((info->ddims[i].unlimited << 8) | (info->ddims[i].distrib_type))); info->ddims[i].chunk_length = chk_array->pdims[i].chunk_length; info->ddims[i].num_chunks = info->ddims[i].dim_length / info->ddims[i].chunk_length; /* check to see if need to increase # of chunks along this dim */ if ((odd_size = (info->ddims[i].dim_length % info->ddims[i].chunk_length))) { info->ddims[i].num_chunks++; /* increase by one */ /* set last chunk length */ info->ddims[i].last_chunk_length = odd_size; } else info->ddims[i].last_chunk_length = info->ddims[i].chunk_length; /* */ /* calculate number of chunks/pages in element */ npages = npages * info->ddims[i].num_chunks; /* compute logical element length */ data_len *= info->ddims[i].dim_length; } /* end for ndims */ /* Make Vdata appendable with linked block table size of 'npages' if less than 128 and greater than 16. Not the best heuristic but for now it should be okay...*/ if (npages > 16 && npages < 128) { if (VSappendable(info->aid, npages) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else if (npages < 16) { /* 16 is default */ if (VSappendable(info->aid, 16) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else /* use 128 for large chunk tables for now */ { if (VSappendable(info->aid, 128) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Set logical length of element */ info->length = data_len; /* logical size of element */ /* Calculate total length of this special element header including the fields for 'sp_tag_desc' and 'sp_tag_head_len'. See description of format header at top of file for more info on fields. Include also length for multiply specialness headers */ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: sp_tag_header_len = 6 + 9 + 12 + 8 + (12 * info->ndims) + 4 + info->fill_val_len + 6 + info->comp_sp_tag_head_len; break; default: sp_tag_header_len = 6 + 9 + 12 + 8 + (12 * info->ndims) + 4 + info->fill_val_len; break; } /* Allocate buffer space for header */ if ((c_sp_header = (uint8 *)calloc(sp_tag_header_len, 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Calculate length of this special element header itself. Note the value of 'sp_tag_head_len' in the file is the total length of this special object header - 6 bytes. because the length of the fields 'sp_tag_desc'(2 bytes) and 'sp_tag_head_len' (4 bytes) which are not included If also multiply special need to subtract another 6 bytes plus length for multiply specialness headers */ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: info->sp_tag_header_len = sp_tag_header_len - 6 - 6 - info->comp_sp_tag_head_len; break; default: info->sp_tag_header_len = sp_tag_header_len - 6; break; } /* encode info into chunked description record */ { uint8 *p = c_sp_header; intn j; UINT16ENCODE(p, SPECIAL_CHUNKED); /* 2 bytes */ INT32ENCODE(p, info->sp_tag_header_len); /* 4 bytes */ memcpy(p, &info->version, 1); /* 1 byte */ p = p + 1; INT32ENCODE(p, info->flag); /* 4 bytes */ INT32ENCODE(p, info->length); /* 4 bytes */ INT32ENCODE(p, info->chunk_size); /* 4 bytes */ INT32ENCODE(p, info->nt_size); /* 4 bytes */ UINT16ENCODE(p, info->chktbl_tag); /* 2 bytes */ UINT16ENCODE(p, info->chktbl_ref); /* 2 bytes */ UINT16ENCODE(p, info->sp_tag); /* 2 bytes */ UINT16ENCODE(p, info->sp_ref); /* 2 bytes */ INT32ENCODE(p, info->ndims); /* 4 bytes */ /* = 35 bytes*/ for (j = 0; j < info->ndims; j++) { INT32ENCODE(p, (info->ddims[j].flag)); /* 4 bytes */ INT32ENCODE(p, (info->ddims[j].dim_length)); /* 4 bytes */ INT32ENCODE(p, (info->ddims[j].chunk_length)); /* 4 bytes */ } /* = 12 x ndims bytes */ /* now for fill value */ INT32ENCODE(p, (info->fill_val_len)); /* 4 bytes */ memcpy(p, info->fill_val, info->fill_val_len); /* fill_val_len bytes */ p = p + fill_val_len; /* Future to encode multiply specialness stuff header lengths, header,..etc*/ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: UINT16ENCODE(p, SPECIAL_COMP); /* 2 bytes */ INT32ENCODE(p, info->comp_sp_tag_head_len); /* 4 bytes */ /* copy special element header */ memcpy(p, info->comp_sp_tag_header, info->comp_sp_tag_head_len); p = p + info->comp_sp_tag_head_len; break; default: /* Do nothing */ break; } } /* write the special info structure to fill */ if ((dd_aid = Hstartaccess(file_id, special_tag, ref, DFACC_ALL)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); /* write only the base 32 bytes ( 6 + 9 + 12 + 5) plus what is needed for each dimension which is (12 x ndims) bytes. plus for fill value 4 bytes + fill_val_len plus in future multiply special headers = sp_tag_header_len */ if (Hwrite(dd_aid, sp_tag_header_len, c_sp_header) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* end access to special info stuff in file */ if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* initialize TBBT tree of CHUNK records*/ info->chk_tree = tbbtdmake(chkcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); /* Detach from the data DD ID */ if (data_id != FAIL) { if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* update access record and file record */ if ((access_rec->ddid = HTPselect(file_rec, special_tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); access_rec->special = SPECIAL_CHUNKED; access_rec->special_func = &chunked_funcs; access_rec->special_info = info; access_rec->posn = 0; access_rec->access = DFACC_RDWR; access_rec->file_id = file_id; access_rec->appendable = FALSE; /* start data as non-appendable */ file_rec->attach++; /* register this valid access record for the chunked element */ access_aid = HAregister_atom(AIDGROUP, access_rec); chunks_needed = 1; for (i = 1; i < info->ndims; i++) { chunks_needed *= info->ddims[i].num_chunks; } /* create chunk cache */ if ((info->chk_cache = mcache_open(&access_rec->file_id, /* cache key */ access_aid, /* object id */ (info->chunk_size * info->nt_size), /* chunk size */ chunks_needed, /* maxcache */ npages, /* num chunks */ 0 /* flags */)) == NULL) HE_REPORT_GOTO("failed to initialize chunk cache", FAIL); /* set up chunk read/write routines These routine are the actual routines that read/write whole chunks at a time.i.e. page-in/page-out routines */ mcache_filter(info->chk_cache, /* cache handle */ HMCPchunkread, /* page-in routine */ HMCPchunkwrite, /* page-out routine */ access_rec /* object handle */); ret_value = access_aid; done: if (ret_value == FAIL) { /* Error condition cleanup */ /* free info struct */ if (info != NULL) { if (info->chk_cache != NULL) { /* Sync chunk cache */ mcache_sync(info->chk_cache); /* close chunk cache */ mcache_close(info->chk_cache); } if (info->aid != FAIL) VSdetach(info->aid); /* detach from chunk table */ /* free chunk tree */ if (info->chk_tree != NULL) tbbtdfree(info->chk_tree, chkdestroynode, chkfreekey); /* free up stuff in special info */ free(info->ddims); free(info->seek_chunk_indices); free(info->seek_pos_chunk); free(info->fill_val); free(info->comp_sp_tag_header); free(info->cinfo); free(info->minfo); free(info); /* free special info last */ access_rec->special_info = NULL; } /* free access record */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } /* end if */ /* free special element header */ free(c_sp_header); return ret_value; } /* HMCcreate() */ /*-------------------------------------------------------------------------- NAME HMCgetcompress - get compression information for chunked element DESCRIPTION Checks if the given element is compressed then get the compression information using HCPdecode_header. This routine is used by HCgetcompress for the chunked element part. RETURNS Returns SUCCEED/FAIL REVISION LOG September 2001: Added to fix bug #307 - BMR -------------------------------------------------------------------------- */ intn HMCgetcompress(accrec_t *access_rec, /* IN: access record */ comp_coder_t *comp_type, /* OUT: compression type */ comp_info *c_info) /* OUT: retrieved compression info */ { chunkinfo_t *info = NULL; /* chunked element information record */ model_info m_info; /* modeling information - dummy */ comp_model_t model_type; /* modeling type - dummy */ intn ret_value = SUCCEED; /* Get the special info from the given record */ info = (chunkinfo_t *)access_rec->special_info; if (info == NULL) HGOTO_ERROR(DFE_COMPINFO, FAIL); /* If this chunked element is compressed, retrieve its comp info */ if (info->flag == SPECIAL_COMP) { /* Decode header from storage */ ret_value = HCPdecode_header((uint8 *)info->comp_sp_tag_header, &model_type, &m_info, /* dummy */ comp_type, c_info); } /* It's not compressed */ else *comp_type = COMP_CODE_NONE; done: return ret_value; } /* HMCgetcompress() */ /*-------------------------------------------------------------------------- NAME HMCgetcomptype - get compression information for chunked element DESCRIPTION Checks if the given element is compressed then get the compression information using HCPdecode_header. This routine is used by HCgetcompress for the chunked element part. RETURNS Returns SUCCEED/FAIL REVISION LOG September 2001: Added to fix bug #307 - BMR -------------------------------------------------------------------------- */ intn HMCgetcomptype(int32 dd_aid, /* IN: access id of header info */ comp_coder_t *comp_type) /* OUT: compression type */ { uint8 *bufp; /* pointer to buffer */ uint8 version; /* Version of this Chunked element */ int32 flag; /* flag for multiply specialness ...*/ uint16 c_type; /* compression type */ uint8 *c_sp_header = NULL; /* special element header */ int32 sp_tag_header_len = 0; /* length of special header */ int32 comp_sp_tag_head_len; /* Compression header length */ void *comp_sp_tag_header = NULL; /* compression header */ uint8 local_ptbuf[6]; /* 6 bytes for special header length */ intn ret_value = SUCCEED; /* first read special tag header length which is 4 bytes */ if (Hread(dd_aid, 4, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode it */ bufp = local_ptbuf; INT32DECODE(bufp, sp_tag_header_len); /* 4 bytes */ /* Sanity check */ if (sp_tag_header_len < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Allocate buffer space for rest of special header */ if ((c_sp_header = (uint8 *)calloc(sp_tag_header_len, 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* read special info header in */ if (Hread(dd_aid, sp_tag_header_len, c_sp_header) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* decode special info header */ bufp = c_sp_header; /* version info */ memcpy(&version, bufp, 1); /* 1 byte */ bufp = bufp + 1; /* Should check version here to see if we can handle this version of special format header before we go on */ if (version != _HDF_CHK_HDR_VER) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* flag indicating multiple specialness */ INT32DECODE(bufp, flag); /* 4 bytes */ /* check for further specialness */ switch (flag & 0xff) { /* if the element is also compressed, read the compress special info header and decode to get the compression coder */ case SPECIAL_COMP: { uint16 sp_tag; /* Read compression special tag and header length, 2+4 bytes */ if (Hread(dd_aid, 6, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode compression header length */ bufp = local_ptbuf; UINT16DECODE(bufp, sp_tag); /* 2 bytes */ INT32DECODE(bufp, comp_sp_tag_head_len); /* 4 bytes */ /* Sanity check */ if (comp_sp_tag_head_len < 0 || sp_tag != SPECIAL_COMP) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Allocate buffer space for compression special header */ if ((comp_sp_tag_header = calloc(comp_sp_tag_head_len, 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Read compression special header in */ if (Hread(dd_aid, comp_sp_tag_head_len, comp_sp_tag_header) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode header to get compression type */ bufp = comp_sp_tag_header; bufp = bufp + 2; /* skip model type */ UINT16DECODE(bufp, c_type); /* get encoding type */ *comp_type = (comp_coder_t)c_type; break; } /* It's not compressed */ default: *comp_type = COMP_CODE_NONE; } /* switch flag */ done: /* Free special element headers */ free(c_sp_header); free(comp_sp_tag_header); return ret_value; } /* HMCgetcomptype() */ /*-------------------------------------------------------------------------- NAME HMCgetdatainfo - get data info (offset & length) of the chunked element DESCRIPTION - If the given chunk has data without any special storage, HMCgetdatainfo will return one pair of offset/length of the data. - If the chunk's data is compressed only, then HMCgetdatainfo will also return one pair of offset/length to the compressed data - If the chunk's data is compressed and is stored in linked-blocks, then HMCgetdatainfo will return a number of offset/length pairs for the the data's blocks. RETURNS Returns number of offset/length pairs retrieved or FAIL REVISION LOG March 2009: Added during hmap project. -BMR August 2010: Modified according to revised SDgetdatainfo -BMR Sept 2010: Modified to handle chunk with comp and linked-blocks -BMR March 2011: Added an "else" to flag as an error if the chunk has additional specialness other than compression, just in case if there is. -BMR -------------------------------------------------------------------------- */ intn HMCgetdatainfo(int32 file_id, uint16 tag, uint16 ref, int32 *chk_coord, /* IN: chunk number to be processed */ uintn start_block, /* IN: data block to start at, 0 base */ uintn info_count, /* IN: size of offset/length lists */ int32 *offsetarray, /* OUT: array to hold offsets */ int32 *lengtharray) /* OUT: array to hold lengths */ { uint16 comp_ref = 0; /* ref# of compressed data */ chunkinfo_t *chkinfo = NULL; /* chunked element information */ atom_t ddid = FAIL; /* description record access id */ atom_t cmpddid = FAIL; /* description record access id */ uint16 new_tag = 0, new_ref = 0; int32 new_off = 0, new_len = 0; intn count = 0; /* number of blocks */ int32 chk_num = 0; CHUNK_REC *chk_rec = NULL; /* chunk record */ TBBT_NODE *entry = NULL; /* chunk node from TBBT */ accrec_t *access_rec; filerec_t *file_rec; int32 new_aid = FAIL; int16 spec_code = 0; uint8 lbuf[16]; /* temporary buffer */ uint8 *p; /* tmp buf ptr */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate arguments */ if (info_count == 0 && offsetarray != NULL && lengtharray != NULL) HGOTO_ERROR(DFE_ARGS, FAIL); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((new_aid = Hstartread(file_id, tag, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); access_rec = HAatom_object(new_aid); if (access_rec == (accrec_t *)NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* It should be chunked, but verify anyway, just in case */ if (access_rec->special == SPECIAL_CHUNKED) { if (access_rec->special_info != NULL) chkinfo = (chunkinfo_t *)(access_rec->special_info); } else HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Calculate chunk number from origin */ calculate_chunk_num(&chk_num, chkinfo->ndims, chk_coord, chkinfo->ddims); /* Find chunk record in TBBT */ if ((entry = (tbbtdfind(chkinfo->chk_tree, &chk_num, NULL))) == NULL) { /* chunk had not been written, no chunk record */ if (offsetarray != NULL && lengtharray != NULL) { offsetarray[0] = 0; lengtharray[0] = 0; } count = 0; } else { /* chunk record exists */ /* Get chunk record from node */ chk_rec = (CHUNK_REC *)entry->data; /* Check to see if it has been written to */ if (chk_rec->chk_tag != DFTAG_NULL && BASETAG(chk_rec->chk_tag) == DFTAG_CHUNK) { /* valid chunk in file */ /* Check for further specialness */ if (Hfind(file_id, chk_rec->chk_tag, chk_rec->chk_ref, &new_tag, &new_ref, &new_off, &new_len, DF_FORWARD) == FAIL) HE_REPORT_GOTO("Hfind failed ", FAIL); if ((ddid = HTPselect(file_rec, new_tag, new_ref)) == FAIL) HE_REPORT_GOTO("HTPselect failed ", FAIL); if (HTPis_special(ddid) != TRUE) { /* this chunk is not special */ if (offsetarray != NULL && lengtharray != NULL) { offsetarray[0] = Hoffset(file_id, chk_rec->chk_tag, chk_rec->chk_ref); lengtharray[0] = Hlength(file_id, chk_rec->chk_tag, chk_rec->chk_ref); } count = 1; } /* end if */ else { /* this chunk is special */ if (HPseek(file_rec, new_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_read(file_rec, lbuf, (int)2) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Use special code to determine if additional specialness is compression */ p = &lbuf[0]; INT16DECODE(p, spec_code); /* Chunk is compressed */ if (spec_code == SPECIAL_COMP) { if (HP_read(file_rec, lbuf, (int)14) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); p = &lbuf[0]; p = p + 2 + 4; /* skip version and _uncompressed_ data length */ UINT16DECODE(p, comp_ref); /* get ref# of compressed data */ /* Get the special info header */ if (Hfind(file_id, DFTAG_COMPRESSED, comp_ref, &new_tag, &new_ref, &new_off, &new_len, DF_FORWARD) == FAIL) HE_REPORT_GOTO("Hfind failed ", FAIL); if ((cmpddid = HTPselect(file_rec, new_tag, new_ref)) == FAIL) HE_REPORT_GOTO("HTPselect failed ", FAIL); /* Check for further specialness */ if (HTPis_special(cmpddid) != TRUE) { /* this chunk is not further special, only compressed */ if (offsetarray != NULL && lengtharray != NULL) { offsetarray[0] = new_off; lengtharray[0] = new_len; } count = 1; } /* end if */ else { /* this chunk is further special */ if (HPseek(file_rec, new_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_read(file_rec, lbuf, (int)2) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Get the special code */ p = &lbuf[0]; INT16DECODE(p, spec_code); /* If the special storage is in linked-blocks, use HLgetdatainfo to get data info */ if (spec_code == SPECIAL_LINKED) { if (HP_read(file_rec, lbuf, (int)14) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* decode special information retrieved from file into info struct */ p = &lbuf[0]; /* get data information from the linked blocks */ if (offsetarray != NULL && lengtharray != NULL) count = HLgetdatainfo(file_id, p, start_block, info_count, offsetarray, lengtharray); else count = HLgetdatainfo(file_id, p, start_block, 0, NULL, NULL); } /* this chunk is also stored in linked blocks */ /* May not be any other specialness, but we should flag it, so that if there is, we'll be aware of */ else HE_REPORT_GOTO("Compressed chunk has specialness other than linked-blocks", FAIL); } /* this element is further special */ if (HTPendaccess(cmpddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* spec_code is SPECIAL_COMP */ /* May not be any other specialness, but we should flag it, so that if there is, we'll be aware of */ else HE_REPORT_GOTO("Chunk has specialness other than compression", FAIL); } /* this chunk is special */ if (HTPendaccess(ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* if valid chunk in file */ /* chunk record exists but chunk had not been written, could be error */ else HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* chunk record exists */ /* End access to the aid returned by Hstartread */ if (Hendaccess(new_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = count; done: if (ret_value == FAIL) { /* Error condition cleanup */ /* End accesses */ if (ddid != FAIL) HTPendaccess(ddid); if (new_aid != FAIL) Hendaccess(new_aid); } return ret_value; } /* HMCgetdatainfo */ /*-------------------------------------------------------------------------- NAME HMCgetdatasize - get data sizes of the chunked element DESCRIPTION This routine was intended to be used by HCPgetdatasize for the chunked element part. HMCgetdatasize proceeds as followed: - decode the chunking info special header to get the chunk table info - get access to the chunk table via Vdata interface - get the size of the chunk table to determine if the data has been written - if the element is also compressed, read each vdata record to obtain the tag/ref pair of the compression special header and read the header - decode the compression special header to get the compressed data ref# and retrieve the compressed data length via Hlength - if uncompressed size is requested by the caller, calculate the actual size of the uncompressed data by (chunk size * number of records) - if compressed size is requested by the caller, calculate the total compressed size by accumulating the compressed size of all chunks. RETURNS Returns SUCCEED/FAIL REVISION LOG September 2008: Added to fix bugzilla #587 - BMR -------------------------------------------------------------------------- */ intn HMCgetdatasize(int32 file_id, uint8 *p, /* IN: access id of header info */ int32 *comp_size, /* OUT: size of compressed data */ int32 *orig_size) /* OUT: size of uncompression type */ { uint16 comp_ref = 0; /* ref# of compressed data */ char vsname[VSNAMELENMAX + 1]; /* Vdata name */ char v_class[VSNAMELENMAX + 1] = ""; /* Vdata class for comparison */ char vsclass[VSNAMELENMAX + 1]; /* Vdata class */ int32 vdata_size; /* size of Vdata */ chunkinfo_t *chkinfo = NULL; /* chunked element information */ uint8 *v_data = NULL; /* Vdata record */ int32 num_recs = 0, /* number of records in chunk table */ chk_data_size = 0, /* non-compressed data size */ chk_comp_data_size = 0, /* compressed data size */ chktab_id = -1, /* chunk table (vdata) id */ chk_aid = -1, /* a single chunk aid */ len = 0; /* length of a compressed chunk */ uint8 chk_spbuf[10]; /* 10 bytes for special tag, version, uncomp len, comp ref# */ int j, k; intn ret_value = SUCCEED; /* Skip 4byte header len */ p = p + 4; /* Allocate and fill in special chunk info struct for CHUNKs */ if ((chkinfo = (chunkinfo_t *)malloc(sizeof(chunkinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Version info */ memcpy(&chkinfo->version, p, 1); /* 1 byte */ p = p + 1; /* Should check version here to see if we can handle this version of special format header before we go on */ if (chkinfo->version != _HDF_CHK_HDR_VER) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Flag indicating multiple specialness, used to find out if this element is also compressed or something else */ INT32DECODE(p, chkinfo->flag); /* 4 bytes */ /* Length of uncompressed data as a whole, size of each chunk, and size of number type */ INT32DECODE(p, chkinfo->length); /* 4 bytes */ INT32DECODE(p, chkinfo->chunk_size); /* 4 bytes */ INT32DECODE(p, chkinfo->nt_size); /* 4 bytes */ /* Get chunk data size */ chk_data_size = chkinfo->chunk_size * chkinfo->nt_size; /* Get tag/ref of chunk table, 2 bytes each */ UINT16DECODE(p, chkinfo->chktbl_tag); UINT16DECODE(p, chkinfo->chktbl_ref); /* Skip sp_tag and sp_ref then get ndims for use in skipping origins */ p = p + 2 + 2; INT32DECODE(p, chkinfo->ndims); /* 4 bytes */ /* Make sure it is really the vdata */ if (chkinfo->chktbl_tag == DFTAG_VH) { /* Use Vdata interface to access chunk table */ /* Start access on Vdata */ if (Vstart(file_id) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Attach to the chunk table vdata and get its num of records */ if ((chktab_id = VSattach(file_id, (int32)chkinfo->chktbl_ref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if ((VSinquire(chktab_id, &num_recs, NULL, NULL, &vdata_size, vsname)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Only continue reading the chunk table to get compressed data size if it is requested and if data had been written, i.e. chunk table is not empty */ if (comp_size != NULL && num_recs > 0) { /* Check for further specialness. If chunks are also compressed, then the chunk table will be read for each chunk's tag/ref, which points to the compression info of the chunk, to get the compressed data size */ switch (chkinfo->flag & 0xff) { /* Element is also compressed, read and decode the compression special info header of each chunk and get the compressed data size */ case SPECIAL_COMP: { uint16 sp_tag; /* Get class of Vdata */ if ((VSgetclass(chktab_id, vsclass)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Verify class and version */ sprintf(v_class, "%s%d", _HDF_CHK_TBL_CLASS, _HDF_CHK_TBL_CLASS_VER); if (strncmp(vsclass, v_class, strlen(v_class)) != 0) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Set the fields to read */ if (VSsetfields(chktab_id, _HDF_CHK_FIELD_NAMES) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* Allocate space for a single Vdata record */ if ((v_data = malloc((size_t)vdata_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Read in the tag/ref of each chunk then get the compression info header the tag/ref points to and decode the compressed data size */ for (j = 0; j < num_recs; j++) { uint8 *pntr = NULL; /* temp pointer to vdata record */ uint16 chk_tag, chk_ref; /* each chunk's tag/ref */ /* Read single record */ if (VSread(chktab_id, v_data, 1, FULL_INTERLACE) == FAIL) HGOTO_ERROR(DFE_VSREAD, FAIL); pntr = v_data; /* set pointer to vdata record */ /* Skip origin first */ for (k = 0; k < chkinfo->ndims; k++) { pntr += sizeof(int32); } /* Get the chunk's tag and ref */ memcpy(&chk_tag, pntr, sizeof(uint16)); pntr += sizeof(uint16); memcpy(&chk_ref, pntr, sizeof(uint16)); /* Prepare to read the info which the tag/ref points to */ chk_aid = Hstartaccess(file_id, MKSPECIALTAG(chk_tag), chk_ref, DFACC_READ); if (chk_aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); /* Read 10 bytes: special tag (2), comp. version (2), uncomp length (4), and comp. ref# (2) */ if (Hread(chk_aid, 10, chk_spbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode and check the special tag to be sure */ p = chk_spbuf; UINT16DECODE(p, sp_tag); /* 2 bytes */ if (sp_tag == SPECIAL_COMP) { /* Skip compression version (2 bytes) and uncompressed data length (4 bytes) */ p = p + 2 + 4; /* Get ref # of compressed data (2 bytes) */ UINT16DECODE(p, comp_ref); /* Get length of compressed data. Note that this length is specified as compressed chunk size times nt_size. */ if ((len = Hlength(file_id, DFTAG_COMPRESSED, comp_ref)) == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); /* Accumulate compressed size of all chunks. */ chk_comp_data_size = chk_comp_data_size + len; } /* sp_tag is not SPECIAL_COMP, while 'chkinfo->flag' above is SPECIAL_COMP, something must be wrong */ else HGOTO_ERROR(DFE_COMPINFO, FAIL); /* End access to special info of an individual chunk */ if (Hendaccess(chk_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* for each record */ break; } default: /* Element is not compressed, use non-compressed data size. Note: must multiply by num_recs here because when element is compressed, chk_comp_data_size was calculated by accumulating "len" of each compressed chunk (see case above) */ chk_comp_data_size = chk_data_size * num_recs; } /* switch flag */ } /* if comp_size != NULL && num_recs >= 0 */ if (VSdetach(chktab_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* it is a vdata */ else HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Return requested sizes */ if (comp_size != NULL) *comp_size = chk_comp_data_size; if (orig_size != NULL) *orig_size = chk_data_size * num_recs; done: /* Free allocated space for vdata record */ free(v_data); /* Free special chunk info struct */ free(chkinfo); return ret_value; } /* HMCgetdatasize */ /*-------------------------------------------------------------------------- NAME HMCsetMaxcache - maximum number of chunks to cache DESCRIPTION Set the maximum number of chunks to cache. The values set here affects the current object's caching behavior. If the chunk cache is full and 'maxcache' is greater then the current 'maxcache' value, then the chunk cache is reset to the new 'maxcache' value, else the chunk cache remains at the current 'maxcache' value. If the chunk cache is not full, then the chunk cache is set to the new 'maxcache' value only if the new 'maxcache' value is greater than the current number of chunks in the cache. Use flags argument of 'HMC_PAGEALL' if the whole object is to be cached in memory otherwise pass in zero. RETURNS Returns number of 'maxcache' if successful and FAIL otherwise AUTHOR -GeorgeV - 9/3/96 NOTE This calls the real routine mcache_set_maxcache(). Currently 'maxcache' has to be greater than 1. -------------------------------------------------------------------------- */ int32 HMCsetMaxcache(int32 access_id, /* IN: access aid to mess with */ int32 maxcache, /* IN: max number of pages to cache */ int32 flags /* IN: flags = 0, HMC_PAGEALL */) { accrec_t *access_rec = NULL; /* access record */ chunkinfo_t *info = NULL; /* chunked element information record */ int32 ret_value = SUCCEED; (void)flags; /* Check args */ access_rec = HAatom_object(access_id); if (access_rec == NULL || maxcache < 1) HGOTO_ERROR(DFE_ARGS, FAIL); /* since this routine can be called by the user, need to check if this access id is special CHUNKED */ if (access_rec->special == SPECIAL_CHUNKED) { info = (chunkinfo_t *)(access_rec->special_info); if (info != NULL) ret_value = mcache_set_maxcache(info->chk_cache, maxcache); else ret_value = FAIL; } else /* not special */ ret_value = FAIL; done: return ret_value; } /* HMCsetMaxcache() */ /* ------------------------------ HMCPstread ------------------------------- NAME HMCPstread -- open an access record of chunked element for reading DESCRIPTION Calls to HMCIstaccess to fill in the access rec for reading RETURNS The AID of the access record on success FAIL on error. AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 HMCPstread(accrec_t *access_rec /* IN: access record to fill in */) { int32 ret_value; ret_value = HMCIstaccess(access_rec, DFACC_READ); return ret_value; } /* HMCPstread */ /* ------------------------------ HMCPstwrite ------------------------------ NAME HMCPstwrite -- open an access record of a chunked element for writing DESCRIPTION Calls to HMCIstaccess to fill in the access rec for writing RETURNS The AID of the access record on success FAIL on error. AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 HMCPstwrite(accrec_t *access_rec /* IN: access record to fill in */) { int32 ret_value; ret_value = HMCIstaccess(access_rec, DFACC_WRITE); return ret_value; } /* HMCPstwrite */ /* ------------------------------- HMCPseek -------------------------------- NAME HMCPseek -- set the seek posn in the chunked element DESCRIPTION Set the seek posn in the given chunked element RETURNS SUCCEED / FAIL AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 HMCPseek(accrec_t *access_rec, /* IN: access record to mess with */ int32 offset, /* IN: seek offset */ int origin /* IN: where we should calc the offset from */) { chunkinfo_t *info = NULL; /* information for the chunked elt */ int32 ret_value = SUCCEED; /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* validate access record */ if (access_rec->special != SPECIAL_CHUNKED) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get special info */ info = (chunkinfo_t *)(access_rec->special_info); /* adjust the offset according to origin and validate */ /* there is no upper bound to posn */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += (info->length * info->nt_size); /* adjust by number type size */ if (offset < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* Seek to given location(bytes) for reading/writing */ /* i.e calculate chunk indices given seek location this will update the proper arrays in the special info struct */ update_chunk_indices_seek(offset, info->ndims, info->nt_size, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); /* set position in access record */ access_rec->posn = offset; done: return ret_value; } /* HMCPseek */ /* ------------------------------- HMCPchunkread -------------------------------- NAME HMCPchunkread - read a chunk DESCRIPTION Read in a whole chunk from a chunked element given the chunk number. This is used as the 'page-in-chunk' routine for the cache. Only the cache should call this routine. RETURNS The number of bytes read or FAIL on error AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ static int32 HMCPchunkread(void *cookie, /* IN: access record to mess with */ int32 chunk_num, /* IN: chunk to read */ void *datap /* OUT: buffer for data */) { accrec_t *access_rec = (accrec_t *)cookie; /* access record */ chunkinfo_t *info = NULL; /* information record for this special data elt */ CHUNK_REC *chk_rec = NULL; /* chunk record */ TBBT_NODE *entry = NULL; /* chunk node from TBBT */ uint8 *bptr = NULL; /* pointer to data buffer */ int32 chk_id = FAIL; /* chunk id */ int32 bytes_read = 0; /* total # bytes read for this call of HMCIread */ int32 read_len = 0; /* length of bytes to read */ int32 nitems = 1; /* used in HDmemfill(), */ int32 ret_value = SUCCEED; /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* set inputs */ bptr = (uint8 *)datap; info = (chunkinfo_t *)(access_rec->special_info); bytes_read = 0; read_len = (info->chunk_size * info->nt_size); /* find chunk record in TBBT */ if ((entry = (tbbtdfind(info->chk_tree, &chunk_num, NULL))) == NULL) { /* does not exist */ /* calculate number of fill value items to fill buffer with */ nitems = (info->chunk_size * info->nt_size) / info->fill_val_len; /* copy fill values into buffer and return */ if (HDmemfill(datap, info->fill_val, (uint32)info->fill_val_len, (uint32)nitems) == NULL) HE_REPORT_GOTO("HDmemfill failed to fill read chunk", FAIL); } else /* exists in TBBT */ { /* get chunk record from node */ chk_rec = (CHUNK_REC *)entry->data; /* check to see if has been written to */ if (chk_rec->chk_tag != DFTAG_NULL && BASETAG(chk_rec->chk_tag) == DFTAG_CHUNK) { /* valid chunk in file */ /* Start read on chunk */ if ((chk_id = Hstartread(access_rec->file_id, chk_rec->chk_tag, chk_rec->chk_ref)) == FAIL) { Hendaccess(chk_id); HE_REPORT_GOTO("Hstartread failed to read chunk", FAIL); } /* read data from chunk */ if (Hread(chk_id, read_len, bptr) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); bytes_read = read_len; /* end access to chunk */ if (Hendaccess(chk_id) == FAIL) HE_REPORT_GOTO("Hendaccess failed to end access to chunk", FAIL); } else if (chk_rec->chk_tag == DFTAG_NULL) { /* chunk has not been written, so return fill value buffer */ /* calculate number of fill value items to fill buffer with */ nitems = (info->chunk_size * info->nt_size) / info->fill_val_len; /* copy fill values into buffer and return */ if (HDmemfill(datap, info->fill_val, (uint32)info->fill_val_len, (uint32)nitems) == NULL) HE_REPORT_GOTO("HDmemfill failed to fill read chunk", FAIL); } else /* not a valid chunk ref for now */ { /* For now DFTAG_CHUNK is the only allowed value. In the future this could be another Chunk table. */ HE_REPORT_GOTO("Not a valid Chunk object, wrong tag for chunk", FAIL); } } /* end else exists in TBBT tree */ ret_value = bytes_read; /* number of bytes read */ done: if (ret_value == FAIL) { /* Error condition cleanup */ if (chk_id != FAIL) Hendaccess(chk_id); } /* end if */ return ret_value; } /* HMCPchunkread() */ /* ------------------------------- HMCreadChunk --------------------------- NAME HMCreadChunk -- read a whole chunk DESCRIPTION Read a whole chunk from a chunked element. This can be used by users to read whole chunks from the file based on chunk origin for now i.e position of chunk in overall . chunk array. RETURNS The number of bytes read or FAIL on error AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ int32 HMCreadChunk(int32 access_id, /* IN: access aid to mess with */ int32 *origin, /* IN: origin of chunk to read */ void *datap /* IN: buffer for data */) { accrec_t *access_rec = NULL; /* access record */ filerec_t *file_rec = NULL; /* file record */ chunkinfo_t *info = NULL; /* chunked element information record */ uint8 *bptr = NULL; /* data buffer pointer */ void *chk_data = NULL; /* chunk data */ uint8 *chk_dptr = NULL; /* chunk data pointer */ int32 relative_posn; /* relative position in chunked element */ int32 bytes_read = 0; /* total #bytes read */ int32 read_len = 0; /* bytes to read next */ int32 chunk_num = -1; /* chunk number */ int32 ret_value = SUCCEED; intn i; /* Check args */ access_rec = HAatom_object(access_id); if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (origin == NULL || datap == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* validate file records */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* can read from this file? */ if (!(file_rec->access & DFACC_READ)) HGOTO_ERROR(DFE_DENIED, FAIL); /* since this routine can be called by the user, need to check if this access id is special CHUNKED */ if (access_rec->special == SPECIAL_CHUNKED) { /* Set inputs */ info = (chunkinfo_t *)(access_rec->special_info); relative_posn = access_rec->posn; read_len = (info->chunk_size * info->nt_size); bytes_read = 0; bptr = datap; /* copy origin over to seek chunk indices and set position within chunk to beginning of that chunk */ for (i = 0; i < info->ndims; i++) { info->seek_chunk_indices[i] = origin[i]; info->seek_pos_chunk[i] = 0; } /* calculate chunk number from origin */ calculate_chunk_num(&chunk_num, info->ndims, origin, info->ddims); /* currently get chunk data from cache based on chunk number Note the cache deals with objects starting from 1 not 0 */ if ((chk_data = mcache_get(info->chk_cache, /* cache handle */ chunk_num + 1, /* chunk number */ 0 /* flag: unused */)) == NULL) HE_REPORT_GOTO("failed to find chunk record", FAIL); chk_dptr = chk_data; /* set chunk data ptr */ /* copy data from chunk to users buffer */ memcpy(bptr, chk_dptr, read_len); /* put chunk back to cache and mark it as *not* DIRTY */ if (mcache_put(info->chk_cache, /* cache handle */ chk_data, /* whole data chunk */ 0 /* flag: 0->not DIRTY */) == FAIL) HE_REPORT_GOTO("failed to put chunk back in cache", FAIL); /* adjust number of bytes already read */ bytes_read = read_len; /*update chunk seek indices after reading chunk */ update_seek_pos_chunk(bytes_read, info->ndims, info->nt_size, info->seek_pos_chunk, info->ddims); /* compute user array for chunk arrays */ compute_chunk_to_array(info->seek_chunk_indices, info->seek_pos_chunk, info->seek_user_indices, info->ndims, info->ddims); /* calculate new read seek position in element from user array */ compute_array_to_seek(&relative_posn, info->seek_user_indices, info->nt_size, info->ndims, info->ddims); /* update access record with bytes read */ access_rec->posn = relative_posn; ret_value = bytes_read; } else /* not special chunked element */ ret_value = FAIL; done: return ret_value; } /* HMCreadChunk() */ /* ------------------------------- HMCPread -------------------------------- NAME HMCPread - read data from a chunked element DESCRIPTION Read in some data from a chunked element. Data is obtained from the cache which takes care of reading in the proper chunks to satisfy the request. RETURNS The number of bytes read or FAIL on error AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ static int32 HMCPread(accrec_t *access_rec, /* IN: access record to mess with */ int32 length, /* IN: number of bytes to read */ void *datap /* OUT: buffer for data */) { chunkinfo_t *info = NULL; /* information record for this special data elt */ int32 relative_posn = 0; /* relative position in chunk of data elt */ int32 bytes_read = 0; /* total # bytes read for this call of HMCIread */ uint8 *bptr = NULL; /* data buffer pointer */ int32 read_len = 0; /* amount of data to copy */ int32 read_seek = 0; /* next read seek position */ int32 chunk_size = 0; /* size of data to read from chunk */ int32 chunk_num = 0; /* next chunk number */ void *chk_data = NULL; /* chunk data */ uint8 *chk_dptr = NULL; /* pointer to chunk data */ int32 ret_value = SUCCEED; /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* set inputs */ info = (chunkinfo_t *)(access_rec->special_info); relative_posn = access_rec->posn; /* current seek position in element */ /* validate length and set proper length */ if (length == 0) length = (info->length * info->nt_size) - access_rec->posn; else if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); if (access_rec->posn + length > (info->length * info->nt_size)) length = (info->length * info->nt_size) - access_rec->posn; /* should chunk indices be updated with relative_posn? or did last operation update it already */ update_chunk_indices_seek(access_rec->posn, info->ndims, info->nt_size, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); /* enter translating length to proper filling of buffer from chunks */ bptr = datap; bytes_read = 0; read_len = length; while (bytes_read < read_len) { /* calculate chunk to retrieve on this pass */ calculate_chunk_num(&chunk_num, info->ndims, info->seek_chunk_indices, info->ddims); /* calculate contiguous chunk size that we can read from this chunk during this pass */ calculate_chunk_for_chunk(&chunk_size, info->ndims, info->nt_size, read_len, bytes_read, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); /* would be nice to get Chunk record from TBBT based on chunk number and then get chunk data base on chunk vdata number but currently the chunk calculations return chunk numbers and not Vdata record numbers. This would reduce some overhead in the number of chunks dealt with in the cache */ /* currently get chunk data from cache based on chunk number Note the cache deals with objects starting from 1 not 0 */ if ((chk_data = mcache_get(info->chk_cache, /* cache handle */ chunk_num + 1, /* chunk number */ 0 /* flag: unused */)) == NULL) HE_REPORT_GOTO("failed to find chunk record", FAIL); chk_dptr = chk_data; /* set chunk data ptr */ /* calculate position in chunk */ calculate_seek_in_chunk(&read_seek, info->ndims, info->nt_size, info->seek_pos_chunk, info->ddims); chk_dptr += read_seek; /* move to correct position in chunk */ /* copy data from chunk to users buffer */ memcpy(bptr, chk_dptr, chunk_size); /* put chunk back to cache */ if (mcache_put(info->chk_cache, /* cache handle */ chk_data, /* whole data chunk */ 0 /* flag: 0->not DIRTY */) == FAIL) HE_REPORT_GOTO("failed to put chunk back in cache", FAIL); /* increment buffer pointer */ bptr += chunk_size; /* adjust number of bytes already read */ bytes_read += chunk_size; /* update relative position i.e. user element seek position with chunk size written */ relative_posn += chunk_size; /* i.e calculate chunk indices given seek location this will update the proper arrays in the special info struct */ update_chunk_indices_seek(relative_posn, info->ndims, info->nt_size, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); } /* end while "bytes_read" */ /* update access record position with bytes read */ access_rec->posn += bytes_read; ret_value = bytes_read; done: return ret_value; } /* HMCPread */ /* ------------------------------- HMCPchunkwrite ------------------------------- NAME HMCPchunkwrite -- write out chunk DESCRIPTION Write a whole chunk to a chunked element given the chunk number. This is used as the 'page-out-chunk' routine for the cache. Only the cache should call this routine. RETURNS The number of bytes written or FAIL on error AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 HMCPchunkwrite(void *cookie, /* IN: access record to mess with */ int32 chunk_num, /* IN: chunk number */ const void *datap /* IN: buffer for data */) { accrec_t *access_rec = (accrec_t *)cookie; /* access record */ chunkinfo_t *info = NULL; /* chunked element information record */ CHUNK_REC *chk_rec = NULL; /* current chunk */ TBBT_NODE *entry = NULL; /* node off of chunk tree */ uint8 *v_data = NULL; /* chunk table record i.e Vdata record */ CHUNK_REC *chkptr = NULL; /* Chunk record to inserted in TBBT */ const void *bptr = NULL; /* data buffer pointer */ int32 chk_id = FAIL; /* chunkd access id */ int32 bytes_written = 0; /* total #bytes written by HMCIwrite */ int32 write_len = 0; /* nbytes to write next */ int32 ret_value = SUCCEED; intn k; /* loop index */ /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Set inputs */ info = (chunkinfo_t *)(access_rec->special_info); write_len = (info->chunk_size * info->nt_size); bytes_written = 0; bptr = datap; /* find chunk record in TBBT */ if ((entry = (tbbtdfind(info->chk_tree, &chunk_num, NULL))) == NULL) HE_REPORT_GOTO("failed to find chunk record", FAIL); chk_rec = (CHUNK_REC *)entry->data; /* get file entry from node */ /* Check to see if already created in chunk table */ if (chk_rec->chk_tag == DFTAG_NULL) { /* does not exists in Vdata table and in file but does in TBBT */ uint8 *pntr = NULL; chkptr = chk_rec; /* so create a new Vdata record */ /* Allocate space for a single Chunk record in Vdata */ if (v_data == NULL) { if ((v_data = malloc(((size_t)info->ndims * sizeof(int32)) + (2 * sizeof(uint16)))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* Initialize chunk record */ chkptr->chk_tag = DFTAG_CHUNK; chkptr->chk_ref = Htagnewref(access_rec->file_id, DFTAG_CHUNK); if (chkptr->chk_ref == 0) { /* out of ref numbers -- extremely fatal */ HGOTO_ERROR(DFE_NOREF, FAIL); } /* Copy origin first to vdata record*/ pntr = v_data; for (k = 0; k < info->ndims; k++) { memcpy(pntr, &chkptr->origin[k], sizeof(int32)); pntr += sizeof(int32); } /* Copy tag next */ memcpy(pntr, &chkptr->chk_tag, sizeof(uint16)); pntr += sizeof(uint16); /* Copy ref last */ memcpy(pntr, &chkptr->chk_ref, sizeof(uint16)); /* Add to Vdata i.e. chunk table */ if (VSwrite(info->aid, v_data, 1, FULL_INTERLACE) == FAIL) HGOTO_ERROR(DFE_VSWRITE, FAIL); /* Create compressed chunk if set else start write access on element */ switch (info->flag & 0xff) /* only using 8bits for now */ { case SPECIAL_COMP: /* Create compressed chunk */ if ((chk_id = HCcreate(access_rec->file_id, chk_rec->chk_tag, chk_rec->chk_ref, info->model_type, info->minfo, info->comp_type, info->cinfo)) == FAIL) HE_REPORT_GOTO("HCcreate failed to read chunk", FAIL); break; default: /* Start write on chunk */ if ((chk_id = Hstartwrite(access_rec->file_id, chk_rec->chk_tag, chk_rec->chk_ref, write_len)) == FAIL) HE_REPORT_GOTO("Hstartwrite failed to read chunk", FAIL); break; } } /* not already in Vdata table */ else { /* Already in table so start access */ /* Start write on chunk */ if ((chk_id = Hstartwrite(access_rec->file_id, chk_rec->chk_tag, chk_rec->chk_ref, write_len)) == FAIL) HE_REPORT_GOTO("Hstartwrite failed to read chunk", FAIL); } /* write data to chunk */ if (Hwrite(chk_id, write_len, bptr) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); bytes_written = write_len; /* end access to chunk */ if (Hendaccess(chk_id) == FAIL) HE_REPORT_GOTO("Hendaccess failed to end access to chunk", FAIL); ret_value = bytes_written; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (chk_id != FAIL) Hendaccess(chk_id); } free(v_data); return ret_value; } /* HMCPchunkwrite() */ /* ------------------------------- HMCwriteChunk --------------------------- NAME HMCwriteChunk -- write out a whole chunk DESCRIPTION Write out some data from a chunked element. This can be used by users to write whole chunks to the file based on chunk origin for now i.e position of chunk in overall chunk array. RETURNS The number of bytes written or FAIL on error AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ int32 HMCwriteChunk(int32 access_id, /* IN: access aid to mess with */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */) { accrec_t *access_rec = NULL; /* access record */ filerec_t *file_rec = NULL; /* file record */ chunkinfo_t *info = NULL; /* chunked element information record */ CHUNK_REC *chkptr = NULL; /* Chunk record to inserted in TBBT */ int32 *chk_key = NULL; /* Chunk record key for insertion in TBBT */ const void *bptr = NULL; /* data buffer pointer */ void *chk_data = NULL; /* chunk data */ uint8 *chk_dptr = NULL; /* chunk data pointer */ int32 relative_posn; /* relative position in chunked element */ int32 bytes_written = 0; /* total #bytes written by HMCIwrite */ int32 write_len = 0; /* bytes to write next */ int32 chunk_num = -1; /* chunk number */ int32 ret_value = SUCCEED; intn k; /* loop index */ intn i; /* Check args */ access_rec = HAatom_object(access_id); if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (origin == NULL || datap == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* validate file records */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* can write in this file? */ if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* since this routine can be called by the user, need to check if this access id is special CHUNKED */ if (access_rec->special == SPECIAL_CHUNKED) { /* Set inputs */ info = (chunkinfo_t *)(access_rec->special_info); relative_posn = access_rec->posn; write_len = (info->chunk_size * info->nt_size); bytes_written = 0; bptr = datap; /* copy origin over to seek chunk indices and set position within chunk to beginning of that chunk */ for (i = 0; i < info->ndims; i++) { info->seek_chunk_indices[i] = origin[i]; info->seek_pos_chunk[i] = 0; } /* calculate chunk number from origin */ calculate_chunk_num(&chunk_num, info->ndims, origin, info->ddims); /* find chunk record in TBBT */ if (tbbtdfind(info->chk_tree, &chunk_num, NULL) == NULL) { /* not in tree */ /* so create a new chunk record */ /* Allocate space for a chunk record */ if ((chkptr = (CHUNK_REC *)malloc(sizeof(CHUNK_REC))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Allocate space for a origin in chunk record */ if ((chkptr->origin = (int32 *)malloc((size_t)info->ndims * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate space for key */ if ((chk_key = (int32 *)malloc(sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Initialize chunk record */ chkptr->chk_tag = DFTAG_NULL; chkptr->chk_ref = 0; /* Initialize chunk origins */ for (k = 0; k < info->ndims; k++) { chkptr->origin[k] = origin[k]; } /* set chunk record number to next Vdata record number */ chkptr->chk_vnum = info->num_recs++; /* set key to chunk number */ chkptr->chunk_number = *chk_key = chunk_num; /* add to TBBT tree based on chunk number as the key */ tbbtdins(info->chk_tree, chkptr, chk_key); /* re-initialize ptrs to allow for error-failure check */ chkptr = NULL; chk_key = NULL; } /* would be nice to get Chunk record from TBBT based on chunk number and then get chunk data base on chunk vdata number but currently the chunk calculations return chunk numbers and not Vdata record numbers. This would reduce some overhead in the number of chunks dealt with in the cache */ /* get chunk data from cache based on chunk number chunks in the cache start from 1 not 0 */ if ((chk_data = mcache_get(info->chk_cache, /* cache handle */ chunk_num + 1, /* chunk number */ 0 /* flag: unused */)) == NULL) HE_REPORT_GOTO("failed to find chunk record", FAIL); chk_dptr = chk_data; /* set chunk data ptr */ /* copy data from users buffer to chunk */ memcpy(chk_dptr, bptr, write_len); /* put chunk back to cache and mark it as DIRTY */ if (mcache_put(info->chk_cache, /* cache handle */ chk_data, /* whole data chunk */ MCACHE_DIRTY /* flag: DIRTY */) == FAIL) HE_REPORT_GOTO("failed to put chunk back in cache", FAIL); bytes_written = write_len; /*update chunk seek indices after writing chunk */ update_seek_pos_chunk(bytes_written, info->ndims, info->nt_size, info->seek_pos_chunk, info->ddims); /* calculate new read seek position */ compute_chunk_to_array(info->seek_chunk_indices, info->seek_pos_chunk, info->seek_user_indices, info->ndims, info->ddims); compute_array_to_seek(&relative_posn, info->seek_user_indices, info->nt_size, info->ndims, info->ddims); /* update access record with bytes written */ access_rec->posn = relative_posn; ret_value = bytes_written; } else /* not special chunked element */ ret_value = FAIL; done: if (ret_value == FAIL) { /* Error condition cleanup */ /* check chunk ptrs */ if (chkptr != NULL) { free(chkptr->origin); free(chkptr); } free(chk_key); } return ret_value; } /* HMCwriteChunk */ /* ------------------------------- HMCPwrite ------------------------------- NAME HMCPwrite -- write out some data to a chunked element DESCRIPTION Write out some data to a chunked element. Data is obtained from the cache which takes care of obtaining the proper chunks to write to satisfy the request. The chunks are marked as dirty before being returned to the cache. RETURNS The number of bytes written or FAIL on error AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ static int32 HMCPwrite(accrec_t *access_rec, /* IN: access record to mess with */ int32 length, /* IN: number of bytes to write */ const void *datap /* IN: buffer for data */) { filerec_t *file_rec = NULL; /* file record */ chunkinfo_t *info = NULL; /* chunked element information record */ CHUNK_REC *chkptr = NULL; /* Chunk record to inserted in TBBT */ int32 *chk_key = NULL; /* Chunk record key for insertion in TBBT */ const uint8 *bptr = NULL; /* data buffer pointer */ void *chk_data = NULL; /* chunk data */ uint8 *chk_dptr = NULL; /* chunk data pointer */ int32 relative_posn; /* relative position in chunked element */ int32 bytes_written = 0; /* total #bytes written by HMCIwrite */ int32 write_len = 0; /* next write size */ int32 write_seek = 0; /* next write seek */ int32 chunk_size = 0; /* chunk size */ int32 chunk_num = 0; /* chunk number */ int32 ret_value = SUCCEED; intn k; /* loop index */ /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Set inputs */ file_rec = HAatom_object(access_rec->file_id); info = (chunkinfo_t *)(access_rec->special_info); relative_posn = access_rec->posn; write_len = length; /* validate length and file records */ if (length <= 0) HGOTO_ERROR(DFE_RANGE, FAIL); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* should chunk indices be updated with relative_posn? or did last operation update it already */ update_chunk_indices_seek(access_rec->posn, info->ndims, info->nt_size, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); bytes_written = 0; bptr = datap; while (bytes_written < write_len) { /* calculate chunk to retrieve */ calculate_chunk_num(&chunk_num, info->ndims, info->seek_chunk_indices, info->ddims); /* calculate contiguous chunk size that we can write to this chunk */ calculate_chunk_for_chunk(&chunk_size, info->ndims, info->nt_size, write_len, bytes_written, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); /* find chunk record in TBBT */ if (tbbtdfind(info->chk_tree, &chunk_num, NULL) == NULL) { /* not in tree */ /* so create a new chunk record */ /* Allocate space for a chunk record */ if ((chkptr = (CHUNK_REC *)malloc(sizeof(CHUNK_REC))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Allocate space for a origin in chunk record */ if ((chkptr->origin = (int32 *)malloc((size_t)info->ndims * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate space for key */ if ((chk_key = (int32 *)malloc(sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Initialize chunk record */ chkptr->chk_tag = DFTAG_NULL; chkptr->chk_ref = 0; /* Initialize chunk origins */ for (k = 0; k < info->ndims; k++) chkptr->origin[k] = info->seek_chunk_indices[k]; /* set chunk record number to next Vdata record number */ chkptr->chk_vnum = info->num_recs++; /* set key to chunk number */ chkptr->chunk_number = *chk_key = chunk_num; /* add to TBBT tree based on chunk number as the key */ tbbtdins(info->chk_tree, chkptr, chk_key); /* re-initialize ptrs to allow for error-failure check */ chkptr = NULL; chk_key = NULL; } /* would be nice to get Chunk record from TBBT based on chunk number and then get chunk data base on chunk vdata number but currently the chunk calculations return chunk numbers and not Vdata record numbers. This would reduce some overhead in the number of chunks dealt with in the cache */ /* get chunk data from cache based on chunk number chunks in the cache start from 1 not 0 */ if ((chk_data = mcache_get(info->chk_cache, /* cache handle */ chunk_num + 1, /* chunk number */ 0 /* flag: unused */)) == NULL) HE_REPORT_GOTO("failed to find chunk record", FAIL); chk_dptr = chk_data; /* set chunk data ptr */ /* calculate position in chunk */ calculate_seek_in_chunk(&write_seek, info->ndims, info->nt_size, info->seek_pos_chunk, info->ddims); chk_dptr += write_seek; /* move to correct position in chunk */ /* copy data from users buffer to chunk */ memcpy(chk_dptr, bptr, chunk_size); /* put chunk back to cache as DIRTY */ if (mcache_put(info->chk_cache, /* cache handle */ chk_data, /* whole data chunk */ MCACHE_DIRTY /* flag: DIRTY */) == FAIL) HE_REPORT_GOTO("failed to put chunk back in cache", FAIL); /* increment buffer pointer */ bptr += chunk_size; /* adjust number of bytes already written */ bytes_written += chunk_size; /* update relative position i.e. user element seek position with chunk size written */ relative_posn += chunk_size; /* i.e calculate chunk indices given seek location this will update the proper arrays in the special info struct */ update_chunk_indices_seek(relative_posn, info->ndims, info->nt_size, info->seek_chunk_indices, info->seek_pos_chunk, info->ddims); } /* end while "bytes_written" */ /* update access record with bytes written */ access_rec->posn += bytes_written; ret_value = bytes_written; done: if (ret_value == FAIL) { /* Error condition cleanup */ /* check chunk ptrs */ if (chkptr != NULL) { free(chkptr->origin); free(chkptr); } free(chk_key); } return ret_value; } /* HMCPwrite */ /* --------------------------------------------------------------------- NAME HMCPcloseAID -- close file but keep AID active DESCRIPTION Close the file currently being pointed to by this AID but do *NOT* free the AID. This will flush the chunk cache and free up the special info struct. This is called by Hnextread() which reuses an AID to point to the 'next' object as requested. If the current object was an chunked object, the chunked information needs to be closed before all reference to it is lost. NOTE: Hnextread() is a bad fcn to use since it relies on previous state information. RETURNS SUCCEED / FAIL AUTHOR -GeorgeV - 9/3/96 ---------------------------------------------------------------------------*/ int32 HMCPcloseAID(accrec_t *access_rec /* IN: access record of file to close */) { chunkinfo_t *info = NULL; /* special information record */ int32 ret_value = SUCCEED; /* check args */ info = (chunkinfo_t *)access_rec->special_info; if (info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* detach the special information record. If no more references to that, free the record */ if (--(info->attached) == 0) { if (info->chk_cache != NULL) { /* Sync chunk cache */ mcache_sync(info->chk_cache); #ifdef STATISTICS /* cache statistics if 'mcache.c' complied with -DSTATISTICS */ mcache_stat(info->chk_cache); #endif /* close chunk cache */ mcache_close(info->chk_cache); } /* cache not empty */ /* clean up chunk table lists and info record here */ /* Use Vxxx interface to end access to Vdata info */ if (info->aid != FAIL) { if (VSdetach(info->aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } else HGOTO_ERROR(DFE_BADAID, FAIL); if (Vend(access_rec->file_id) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); /* clean up chunk tree */ tbbtdfree(info->chk_tree, chkdestroynode, chkfreekey); /* free up stuff in special info */ free(info->ddims); free(info->seek_chunk_indices); free(info->seek_pos_chunk); free(info->seek_user_indices); free(info->fill_val); free(info->comp_sp_tag_header); free(info->cinfo); free(info->minfo); free(info); access_rec->special_info = NULL; } /* attached to info */ done: return ret_value; } /* HMCPcloseAID */ /* ----------------------------- HPendaccess ----------------------------- NAME HMCPendacess -- close a chunk element AID DESCRIPTION Free up all of the space used to store information about a chunked element. All relevant info will be flushed. Update proper records i.e. access_rec, file_rec..etc RETURNS SUCCEED / FAIL AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ static intn HMCPendaccess(accrec_t *access_rec /* IN: access record to close */) { filerec_t *file_rec = NULL; /* file record */ intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file rec and special info */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* detach the special information record. If no more references to that, free the record */ if (HMCPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* update file and access records */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* detach from the file */ file_rec->attach--; /* free the access record */ HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HMCPendaccess */ /* ------------------------------- HMCPinfo -------------------------------- NAME HMCPinfo -- return info about a chunked element DESCRIPTION Return information about the given chunked element. 'info_chunk' is assumed to be non-NULL. RETURNS SUCCEED / FAIL AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ static int32 HMCPinfo(accrec_t *access_rec, /* IN: access record of access element */ sp_info_block_t *info_chunk /* OUT: information about the special element */) { chunkinfo_t *info = NULL; /* special information record */ int32 ret_value = SUCCEED; intn i; /* loop variable */ /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* validate access record */ if (access_rec->special != SPECIAL_CHUNKED) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_chunk */ info = (chunkinfo_t *)access_rec->special_info; info_chunk->key = SPECIAL_CHUNKED; info_chunk->chunk_size = (info->chunk_size * info->nt_size); /* physical size */ info_chunk->ndims = info->ndims; if ((info->flag & 0xff) == SPECIAL_COMP) /* only using 8bits for now */ { info_chunk->comp_type = (int32)info->comp_type; info_chunk->model_type = (int32)info->model_type; } else { info_chunk->comp_type = COMP_CODE_NONE; info_chunk->model_type = 0; } /* allocate space for chunk lengths */ if ((info_chunk->cdims = (int32 *)malloc((size_t)info->ndims * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* copy info over */ for (i = 0; i < info->ndims; i++) { info_chunk->cdims[i] = info->ddims[i].chunk_length; } done: if (ret_value == FAIL) free(info_chunk->cdims); return ret_value; } /* HMCPinfo */ /* ------------------------------ HMCPinquire ----------------------------- NAME HMCPinquire -- Hinquire for chunked elements DESCRIPTION Return interesting information about a chunked element. NULL can be passed for any of the OUT parameters if their value is not needed. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV - 9/3/96 --------------------------------------------------------------------------- */ static int32 HMCPinquire(accrec_t *access_rec, /* IN: access record to return info about */ int32 *pfile_id, /* OUT: file ID; */ uint16 *ptag, /* OUT: tag of info record; */ uint16 *pref, /* OUT: ref of info record; */ int32 *plength, /* OUT: length of element; */ int32 *poffset, /* OUT: offset of element -- meaningless */ int32 *pposn, /* OUT: current position in element; */ int16 *paccess, /* OUT: access mode; */ int16 *pspecial /* OUT: special code; */) { uint16 data_tag, data_ref; /* Tag/ref of the data in the file */ chunkinfo_t *info = NULL; /* special information record */ int32 ret_value = SUCCEED; /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get special info */ info = (chunkinfo_t *)access_rec->special_info; /* get latest info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id) *pfile_id = access_rec->file_id; if (ptag) *ptag = data_tag; if (pref) *pref = data_ref; if (plength) *plength = (info->length * info->nt_size); if (poffset) *poffset = 0; /* meaningless */ if (pposn) *pposn = access_rec->posn; if (paccess) *paccess = (int16)access_rec->access; if (pspecial) *pspecial = (int16)access_rec->special; done: return ret_value; } /* HMCPinquire */ /* ------------------------------------------------------------------------- NAME HMCPgetnumrecs -- get the number of records in a chunked element DESCRIPTION Retrieves the number of records in a chunked element. This function was originally added for SDcheckempty/HDcheckempty to determine whether a chunked SDS has been written with data. RETURNS SUCCEED/FAIL - FAIL when num_recs is NULL AUTHOR bmribler - 10/3/2004 ---------------------------------------------------------------------------*/ int32 HMCPgetnumrecs(accrec_t *access_rec, /* access record */ int32 *num_recs /* OUT: length of the chunked elt */) { chunkinfo_t *chunk_info = NULL; /* chunked element information record */ int32 ret_value = SUCCEED; /* Check args */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the special info from the given record */ chunk_info = (chunkinfo_t *)access_rec->special_info; if (chunk_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (num_recs) *num_recs = chunk_info->num_recs; else ret_value = FAIL; done: return ret_value; } /* HMCPgetnumrecs */ hdf4-hdf4.3.1/hdf/src/hchunks_priv.h000066400000000000000000000130641503061704500172370ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: hchunks_priv.h * Purpose: Header file for Chunked elements * Dependencies: tbbt.c mcache.c * Contents: Structures & definitions for chunked elements * Structure definitions: DIM_DEF, HCHUNK_DEF *---------------------------------------------------------------------------*/ #ifndef H4_HCHUNKS_PRIV_H #define H4_HCHUNKS_PRIV_H #include "hdf_priv.h" #include "hfile_priv.h" /* special info stuff */ /* Public structures */ /* Structure for each Data array dimension Definition */ typedef struct dim_def_struct { int32 dim_length; /* length of this dimension */ int32 chunk_length; /* chunk length along this dimension */ int32 distrib_type; /* Data distribution along this dimension */ } DIM_DEF, *DIM_DEF_PTR; /* Structure for each Chunk Definition*/ typedef struct hchunk_def_struct { int32 chunk_size; /* size of this chunk*/ int32 nt_size; /* number type size i.e. size of data type */ int32 num_dims; /* number of actual dimensions */ DIM_DEF *pdims; /* ptr to array of dimension records for this chunk*/ int32 chunk_flag; /* multiply specialness? SPECIAL_COMP */ /* For Compression info */ comp_coder_t comp_type; /* Compression type */ comp_model_t model_type; /* Compression model type */ comp_info *cinfo; /* Compression info struct */ model_info *minfo; /* Compression model info struct */ } HCHUNK_DEF, *HCHUNK_DEF_PTR; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t chunked_funcs; /* functions to perform chunking */ /* ** from hchunks.c */ /* User Public */ HDFLIBAPI int32 HMCcreate (int32 file_id, /* IN: file to put linked chunk element in */ uint16 tag, /* IN: tag of element */ uint16 ref, /* IN: ref of element */ uint8 nlevels, /* IN: number of levels of chunks */ int32 fill_val_len, /* IN: fill value length in bytes */ void *fill_val, /* IN: fill value */ HCHUNK_DEF *chk_array /* IN: structure describing chunk distribution can be an array? but we only handle 1 level */); HDFLIBAPI intn HMCgetcompress(accrec_t *access_rec, /* IN: access record */ comp_coder_t *comp_type, /* OUT: compression type */ comp_info *c_info /* OUT: retrieved compression info */); HDFLIBAPI intn HMCgetcomptype(int32 access_id, /* IN: access record */ comp_coder_t *comp_type /* OUT: compression type */); HDFLIBAPI intn HMCgetdatainfo(int32 file_id, /* IN: file in which element is located */ uint16 data_tag, uint16 data_ref, int32 *chk_coord, /* IN: chunk coord array or NULL for non-chunk SDS */ uintn start_block, /* IN: data block to start at, 0 base */ uintn info_count, /* IN: size of offset/length lists */ int32 *offsetarray, /* OUT: array to hold offsets */ int32 *lengtharray); /* OUT: array to hold lengths */ HDFLIBAPI intn HMCgetdatasize(int32 file_id, /* IN: file in which element is located */ uint8 *p, /* IN: buffer of special info header */ int32 *comp_size, /* OUT: size of compressed data */ int32 *orig_size /* OUT: size of non-compressed data */); HDFLIBAPI int32 HMCsetMaxcache(int32 access_id, /* IN: access aid to mess with */ int32 maxcache, /* IN: max number of pages to cache */ int32 flags /* IN: flags = 0, HMC_PAGEALL */); HDFLIBAPI int32 HMCwriteChunk(int32 access_id, /* IN: access aid to mess with */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */); HDFLIBAPI int32 HMCreadChunk(int32 access_id, /* IN: access aid to mess with */ int32 *origin, /* IN: origin of chunk to read */ void *datap /* IN: buffer for data */); HDFLIBAPI int32 HMCPcloseAID(accrec_t *access_rec /* IN: access record of file to close */); HDFLIBAPI int32 HMCPgetnumrecs /* has to be here because used in hfile.c */ (accrec_t *access_rec, /* IN: access record to return info about */ int32 *num_recs /* OUT: length of the chunked elt */); #ifdef __cplusplus } #endif #endif /* H4_HCHUNKS_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hcomp.c000066400000000000000000001703121503061704500156350ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE hcomp.c HDF compressed data I/O routines REMARKS These functions read and write compressed data to HDF data objects. The compressed data objects are implemented as "special tags" in the HDF file and the "H" layer I/O routines break out to the functions in this module to deal with them. DESIGN The compression I/O functions are designed as state machines. There are two separate state machines implemented, as layers on top of one another. The top layer is the modeling layer, whose purpose is to send/receive uncompressed bytes between the higher layer (the "H" layer routines) and the lower layer, the coding layer. The modeling layer is constrained to look like Standard C I/O functions to the upper layer, while sending data in potentially unusual orders to the coding layer. [An unusual order of bytes would be a Peano or Hilbert curve instead of the raster order more normally used]. The lower layer is the coding layer, whose purpose is to send/receive bytes of data to the higher layer (the modeling layer) and to send/receive bits/bytes of data to the bit I/O functions after encoding them with some compression scheme. Both of these layers are designed as independent state machines whose state contains all the information to restart at a given point. The purpose of this is to "cache" the state of each layer at certain [convenient] times in order to increase performance during random I/O. BUGS/LIMITATIONS Currently the following design limitations are still in place: 1 - Cannot compress an existing data element (will be fixed before release) [ I think this is done, but it needs testing] 2 - Statistic gathering from several types of compression is not implemented (should be fixed before release) 3 - "State caching" for improved performance in not implemented, although some data-structures allow for it. (should be fixed before release) 4 - Random writing in compressed data is not supported (unlikely to _ever_ be fixed) EXPORTED ROUTINES HCcreate - create or modify an existing data element to be compressed */ /* General HDF includes */ #include "hdf_priv.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ /* Local defines */ #define COMP_HEADER_VERSION 0 #define COMP_START_BLOCK 0 /* Mapping from compression types to tags */ uint16 compress_map[COMP_MAX_COMP + 1] = { 0, /* No corresponding tag for un-compressed data */ 0, /* (1) */ DFTAG_JPEG5, /* COMP_JPEG -> DFTAG_JPEG5 (for JPEG compression) */ 0, /* (3) */ 0, /* (4) */ 0, /* (5) */ 0, /* (6) */ 0, /* (7) */ 0, /* (8) */ 0, /* (9) */ 0, /* (10) */ DFTAG_RLE, /* COMP_RLE -> DFTAG_RLE (for Run-length compression) */ DFTAG_IMC /* COMP_IMCOMP -> DFTAG_IMC (for IMCOMP compression) */ }; /* declaration of the functions provided in this module */ static int32 HCIstaccess(accrec_t *access_rec, int16 acc_mode); static int32 HCIinit_coder(int16 acc_mode, comp_coder_info_t *cinfo, comp_coder_t coder_type, comp_info *coder_info); static int32 HCIread_header(accrec_t *access_rec, compinfo_t *info, comp_info *c_info, model_info *m_info); static int32 HCIwrite_header(atom_t file_id, compinfo_t *info, uint16 special_tag, uint16 ref, comp_info *c_info, model_info *m_info); static int32 HCIinit_model(int16 acc_mode, comp_model_info_t *minfo, comp_model_t model_type, model_info *m_info); /* comp_funcs -- struct of accessing functions for the compressed data element function modules. The position of each function in the table is standard */ funclist_t comp_funcs = { HCPstread, HCPstwrite, HCPseek, HCPinquire, HCPread, HCPwrite, HCPendaccess, HCPinfo, NULL /* no routine registered */ }; /*-------------------------------------------------------------------------- NAME HCIinit_coder -- Set the coder function pointers USAGE int32 HCIinit_coder(acc_mode, cinfo, coder_type, c_info) int16 acc_mode IN: file access mode comp_coder_info_t *cinfo; IN/OUT: pointer to coder information to modify comp_coder_t coder_type; IN: the type of encoding to use comp_info *coder_info; IN: setup information for some encoding types RETURNS Return SUCCEED or FAIL DESCRIPTION Sets the encoder function pointers and the encoder type for a given coder type. COMMENTS, BUGS, ASSUMPTIONS IMCOMP: Since IMCOMP is no longer supported in creating new data but the library still reads existing data, it may need to be added into this function somehow. Yet, I'm not sure exactly how it should be added because this function is called in both cases, writing and reading. At this time, the function will fail if it encounters COMP_CODE_IMCOMP. -BMR, Jul 11, 2012 --------------------------------------------------------------------------*/ static int32 HCIinit_coder(int16 acc_mode, comp_coder_info_t *cinfo, comp_coder_t coder_type, comp_info *c_info) { uint32 comp_config_info; HCget_config_info(coder_type, &comp_config_info); if ((comp_config_info & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present */ HRETURN_ERROR(DFE_BADCODER, FAIL); } switch (coder_type) { /* determine the type of encoding */ case COMP_CODE_NONE: /* "none" (i.e. no) encoding */ cinfo->coder_type = COMP_CODE_NONE; /* set coding type */ cinfo->coder_funcs = cnone_funcs; /* set the "none" func. ptrs */ break; case COMP_CODE_RLE: /* Run-length encoding */ cinfo->coder_type = COMP_CODE_RLE; /* set coding type */ cinfo->coder_funcs = crle_funcs; /* set the RLE func. ptrs */ break; case COMP_CODE_NBIT: /* N-bit encoding */ cinfo->coder_type = COMP_CODE_NBIT; /* set the coding type */ cinfo->coder_funcs = cnbit_funcs; /* set the N-bit func. ptrs */ /* copy encoding info */ cinfo->coder_info.nbit_info.nt = c_info->nbit.nt; cinfo->coder_info.nbit_info.sign_ext = c_info->nbit.sign_ext; cinfo->coder_info.nbit_info.fill_one = c_info->nbit.fill_one; cinfo->coder_info.nbit_info.mask_off = c_info->nbit.start_bit; cinfo->coder_info.nbit_info.mask_len = c_info->nbit.bit_len; if ((cinfo->coder_info.nbit_info.nt_size = DFKNTsize(cinfo->coder_info.nbit_info.nt)) == FAIL) HRETURN_ERROR(DFE_BADNUMTYPE, FAIL); break; case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ if (c_info->skphuff.skp_size < 1) HRETURN_ERROR(DFE_BADCODER, FAIL); /* set the coding type and the skipping huffman func. ptrs */ cinfo->coder_type = COMP_CODE_SKPHUFF; cinfo->coder_funcs = cskphuff_funcs; /* copy encoding info */ cinfo->coder_info.skphuff_info.skip_size = c_info->skphuff.skp_size; break; case COMP_CODE_DEFLATE: /* gzip 'deflate' encoding */ /* valid deflate levels are from 0 to 9 */ if (c_info->deflate.level < 0 || c_info->deflate.level > 9) HRETURN_ERROR(DFE_BADCODER, FAIL); /* set the coding type and the gzip 'deflate' func. ptrs */ cinfo->coder_type = COMP_CODE_DEFLATE; cinfo->coder_funcs = cdeflate_funcs; /* copy encoding info */ if (acc_mode & DFACC_WRITE) cinfo->coder_info.deflate_info.deflate_level = c_info->deflate.level; break; case COMP_CODE_SZIP: /* set the coding type */ cinfo->coder_type = COMP_CODE_SZIP; /* set the szip func. ptrs */ cinfo->coder_funcs = cszip_funcs; /* copy encoding info */ cinfo->coder_info.szip_info.pixels = c_info->szip.pixels; cinfo->coder_info.szip_info.bits_per_pixel = c_info->szip.bits_per_pixel; cinfo->coder_info.szip_info.pixels_per_block = c_info->szip.pixels_per_block; cinfo->coder_info.szip_info.pixels_per_scanline = c_info->szip.pixels_per_scanline; cinfo->coder_info.szip_info.options_mask = c_info->szip.options_mask; cinfo->coder_info.szip_info.buffer = NULL; cinfo->coder_info.szip_info.buffer_size = 0; cinfo->coder_info.szip_info.offset = 0; cinfo->coder_info.szip_info.szip_state = SZIP_INIT; cinfo->coder_info.szip_info.szip_dirty = SZIP_CLEAN; break; default: HRETURN_ERROR(DFE_BADCODER, FAIL); } return SUCCEED; } /* end HCIinit_coder() */ /*-------------------------------------------------------------------------- NAME HCIinit_model -- Set the model function pointers USAGE int32 HCIinit_model(acc_mode, minfo, model_type, m_info) int16 acc_mode IN: file access mode comp_model_info_t *minfo; IN/OUT: pointer to model information to modify comp_model_t model_type; IN: the type of encoding to use model_info *m_info; IN: modeling information RETURNS Return SUCCEED or FAIL DESCRIPTION Sets the modeling function pointers and the model type for a given model type. --------------------------------------------------------------------------*/ static int32 HCIinit_model(int16 acc_mode, comp_model_info_t *minfo, comp_model_t model_type, model_info *m_info) { (void)acc_mode; (void)m_info; switch (model_type) { /* determine the type of modeling */ case COMP_MODEL_STDIO: /* standard C stdio modeling */ minfo->model_type = COMP_MODEL_STDIO; /* set model type */ minfo->model_funcs = mstdio_funcs; /* set the stdio func. ptrs */ break; default: HRETURN_ERROR(DFE_BADMODEL, FAIL); } return SUCCEED; } /* end HCIinit_model() */ /*-------------------------------------------------------------------------- NAME HCPquery_encode_header -- Query the length of compression header for a memory buffer USAGE int32 HCPquery_encode_header(model_type, m_info, coder_type, c_info) comp_model_t model_type; IN: the type of modeling to use model_info *m_info; IN: Information needed for the modeling type chosen comp_coder_t coder_type; IN: the type of encoding to use coder_info *c_info; IN: Information needed for the encoding type chosen RETURNS Return the length of the buffer needed to store the compression header on success (>0) or FAIL (-1) DESCRIPTION Determine the compression information length in a memory block. --------------------------------------------------------------------------*/ int32 HCPquery_encode_header(comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info) { int32 coder_len = 2; /* # of bytes to encode coder information (2 minimum) */ int32 model_len = 2; /* # of bytes to encode model information (2 minimum) */ int32 ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); if (m_info == NULL || c_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* add any additional information needed for modeling type */ switch (model_type) { default: /* no additional information needed */ break; } /* add any additional information needed for coding type */ switch (coder_type) { case COMP_CODE_NBIT: /* N-bit coding needs 16 bytes of info */ coder_len += 16; break; case COMP_CODE_SKPHUFF: /* Skipping Huffman coding needs 8 bytes of info */ coder_len += 8; break; case COMP_CODE_DEFLATE: /* Deflation coding stores deflation level */ coder_len += 2; break; case COMP_CODE_SZIP: /* Szip coding stores various szip parameters */ coder_len += 14; break; case COMP_CODE_IMCOMP: /* IMCOMP is no longer supported, can only be inquired */ HRETURN_ERROR(DFE_BADCODER, FAIL); break; default: /* no additional information needed */ break; } ret_value = model_len + coder_len; done: return ret_value; } /* end HCPquery_encode_header() */ /*-------------------------------------------------------------------------- NAME HCPencode_header -- Encode the compression header info to a memory buffer USAGE intn HCPencode_header(p, model_type, model_info, coder_type, coder_info) uint8 * p; OUT: encoded compression info header comp_model_t model_type; IN: the type of modeling to use model_info *m_info; IN: Information needed for the modeling type chosen comp_coder_t coder_type; IN: the type of encoding to use coder_info *c_info; IN: Information needed for the encoding type chosen RETURNS Return SUCCEED or FAIL DESCRIPTION Encodes the compression information to a block in memory. --------------------------------------------------------------------------*/ intn HCPencode_header(uint8 *p, comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info) { int32 ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); if (p == NULL || m_info == NULL || c_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); UINT16ENCODE(p, (uint16)model_type); /* specify model type */ UINT16ENCODE(p, (uint16)coder_type); /* specify coder type */ /* add any additional information needed for modeling type */ switch (model_type) { default: /* no additional information needed */ break; } /* add any additional information needed for coding type */ switch (coder_type) { case COMP_CODE_NBIT: /* N-bit coding needs info */ /* specify number-type of N-bit data */ INT32ENCODE(p, c_info->nbit.nt); /* next is the flag to indicate whether to sign extend */ UINT16ENCODE(p, (uint16)c_info->nbit.sign_ext); /* flag to fill with 1's or 0's */ UINT16ENCODE(p, (uint16)c_info->nbit.fill_one); /* the offset of the bits extracted */ INT32ENCODE(p, (int32)c_info->nbit.start_bit); /* the number of bits extracted */ INT32ENCODE(p, (int32)c_info->nbit.bit_len); break; case COMP_CODE_SKPHUFF: /* Skipping Huffman coding needs info */ if (c_info->skphuff.skp_size < 1) HRETURN_ERROR(DFE_BADCODER, FAIL); /* specify skipping unit size */ UINT32ENCODE(p, (uint32)c_info->skphuff.skp_size); /* specify # of bytes compressed (not used currently) */ UINT32ENCODE(p, (uint32)c_info->skphuff.skp_size); break; case COMP_CODE_DEFLATE: /* Deflation coding stores deflation level */ /* valid deflate levels are from 0 to 9 if(c_info->deflate.level<1 || c_info->deflate.level>9) */ if (c_info->deflate.level < 0 || c_info->deflate.level > 9) HRETURN_ERROR(DFE_BADCODER, FAIL); /* specify deflation level */ UINT16ENCODE(p, (uint16)c_info->deflate.level); break; case COMP_CODE_SZIP: /* Szip coding stores various szip parameters */ UINT32ENCODE(p, (uint32)c_info->szip.pixels); UINT32ENCODE(p, (uint32)c_info->szip.pixels_per_scanline); UINT32ENCODE(p, (uint32)(c_info->szip.options_mask | SZ_H4_REV_2)); *p++ = (uint8)c_info->szip.bits_per_pixel; *p++ = (uint8)c_info->szip.pixels_per_block; break; case COMP_CODE_IMCOMP: /* IMCOMP is no longer supported, can only be inquired */ HRETURN_ERROR(DFE_BADCODER, FAIL); break; default: /* no additional information needed */ break; } done: return ret_value; } /* end HCPencode_header() */ /*-------------------------------------------------------------------------- NAME HCPdecode_header -- Decode the compression header info from a memory buffer USAGE intn HCPdecode_header(p, model_type, model_info, coder_type, coder_info) void * p; IN: encoded compression info header comp_model_t *model_type; OUT: the type of modeling to use model_info *m_info; OUT: Information needed for the modeling type chosen comp_coder_t *coder_type; OUT: the type of encoding to use coder_info *c_info; OUT: Information needed for the encoding type chosen RETURNS Return SUCCEED or FAIL DESCRIPTION Decodes the compression information from a block in memory. --------------------------------------------------------------------------*/ intn HCPdecode_header(uint8 *p, comp_model_t *model_type, model_info *m_info, comp_coder_t *coder_type, comp_info *c_info) { uint16 m_type, c_type; int32 ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); if (p == NULL || model_type == NULL || m_info == NULL || coder_type == NULL || c_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); UINT16DECODE(p, m_type); /* get model type */ *model_type = (comp_model_t)m_type; UINT16DECODE(p, c_type); /* get encoding type */ *coder_type = (comp_coder_t)c_type; /* read any additional information needed for modeling type */ switch (*model_type) { default: /* no additional information needed */ break; } /* read any additional information needed for coding type */ switch (*coder_type) { case COMP_CODE_NBIT: /* Obtain info for N-bit coding */ { uint16 s_ext; /* temp. var for sign extend */ uint16 f_one; /* temp. var for fill one */ int32 m_off, m_len; /* temp. var for mask offset and len */ /* number-type of N-bit data */ INT32DECODE(p, c_info->nbit.nt); /* next is the flag to indicate whether to sign extend */ UINT16DECODE(p, s_ext); c_info->nbit.sign_ext = (intn)s_ext; /* flag to indicate whether to fill with 1's or 0's */ UINT16DECODE(p, f_one); c_info->nbit.fill_one = (intn)f_one; /* offset of the bits extracted */ INT32DECODE(p, m_off); c_info->nbit.start_bit = (intn)m_off; /* number of bits extracted */ INT32DECODE(p, m_len); c_info->nbit.bit_len = (intn)m_len; } break; case COMP_CODE_SKPHUFF: /* Obtain info for Skipping Huffman coding */ { uint32 skp_size, /* size of skipping unit */ comp_size; /* # of bytes to compress */ /* specify skipping unit size */ UINT32DECODE(p, skp_size); /* specify # of bytes of skipping data to compress */ UINT32DECODE(p, comp_size); /* ignored for now */ c_info->skphuff.skp_size = (intn)skp_size; } break; case COMP_CODE_DEFLATE: /* Obtains deflation level for Deflation coding */ { uint16 level; /* deflation level */ /* specify deflation level */ UINT16DECODE(p, level); c_info->deflate.level = (intn)level; } break; case COMP_CODE_SZIP: /* Obtains szip parameters for Szip coding */ { uint32 buf; /* Paper over unwise public type choices */ UINT32DECODE(p, buf); c_info->szip.pixels = (int32)buf; UINT32DECODE(p, buf); c_info->szip.pixels_per_scanline = (int32)buf; UINT32DECODE(p, buf); c_info->szip.options_mask = (int32)buf; c_info->szip.bits_per_pixel = *p++; c_info->szip.pixels_per_block = *p++; } break; default: /* no additional information needed */ /* this includes RLE, JPEG, and IMCOMP */ break; } done: return ret_value; } /* end HCPdecode_header() */ /*-------------------------------------------------------------------------- NAME HCIwrite_header -- Write the compression header info to a file USAGE int32 HCIwrite_header(file_id, info, special_tag, ref, c_info, m_info) atom_t file_id; IN: File ID of the file to write the header to compinfo_t *info; IN: ptr the compression information uint16 special_tag,ref; IN: the tag/ref of the compressed element coder_info *c_info; IN: Information needed for the encoding type chosen model_info *m_info; IN: Information needed for the modeling type chosen RETURNS Return SUCCEED or FAIL DESCRIPTION Writes the compression information to a new block in the HDF file. --------------------------------------------------------------------------*/ static int32 HCIwrite_header(atom_t file_id, compinfo_t *info, uint16 special_tag, uint16 ref, comp_info *c_info, model_info *m_info) { int32 dd_aid; /* AID for writing the special info */ uint8 *p; /* pointer to the temporary buffer */ uint8 local_ptbuf[32]; int32 header_len; /* how many bytes the header is */ int32 ret_value = SUCCEED; /* write special element info to the file */ p = local_ptbuf; INT16ENCODE(p, SPECIAL_COMP); /* specify special tag type */ UINT16ENCODE(p, COMP_HEADER_VERSION); /* specify header version */ INT32ENCODE(p, info->length); /* write length of un-comp. data */ UINT16ENCODE(p, (uint16)info->comp_ref); /* specify ref # of comp. data */ if ((header_len = HCPquery_encode_header(info->minfo.model_type, m_info, info->cinfo.coder_type, c_info)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HCPencode_header(p, info->minfo.model_type, m_info, info->cinfo.coder_type, c_info) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); p += header_len; /* write the special info structure to fill */ if ((dd_aid = Hstartaccess(file_id, special_tag, ref, DFACC_ALL)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hwrite(dd_aid, (int32)(p - local_ptbuf), local_ptbuf) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); done: return ret_value; } /* end HCIwrite_header() */ /*-------------------------------------------------------------------------- NAME HCIread_header -- Read the compression header info from a file USAGE int32 HCIread_header(access_rec, info, c_info, m_info) accrec_t *access_rec; IN: ptr to the access element record compinfo_t *info; IN: ptr the compression information comp_info *comp_info; IN/OUT: ptr to encoding info model_info *model_info; IN/OUT: ptr to modeling info RETURNS Return SUCCEED or FAIL DESCRIPTION Parses the compression header from a data element in an HDF file. --------------------------------------------------------------------------*/ static int32 HCIread_header(accrec_t *access_rec, compinfo_t *info, comp_info *c_info, model_info *m_info) { uint16 header_version; /* version of the compression header */ uint8 *p; /* pointer to the temporary buffer */ uint8 *local_ptbuf; int32 ret_value = SUCCEED; (void)m_info; /* Get the compression header (description record) */ HPread_drec(access_rec->file_id, access_rec->ddid, &local_ptbuf); /* Extract info */ p = local_ptbuf + 2; UINT16DECODE(p, header_version); /* get compression version */ INT32DECODE(p, info->length); /* get _uncompressed_ data length */ UINT16DECODE(p, info->comp_ref); /* get ref # of comp. data */ /* Decode the compression header */ if (HCPdecode_header(p, &(info->minfo.model_type), m_info, &(info->cinfo.coder_type), c_info) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); free(local_ptbuf); done: return ret_value; } /* end HCIread_header() */ /*-------------------------------------------------------------------------- NAME HCcreate -- Create a compressed data element USAGE int32 HCcreate(file_id, tag, ref, model_type, m_info, coder_type, c_info) int32 file_id; IN: the file id to create the data in uint16 tag,ref; IN: the tag/ref pair which is to be compressed comp_model_t model_type; IN: the type of modeling to use model_info *m_info; IN: Information needed for the modeling type chosen comp_coder_t coder_type; IN: the type of encoding to use coder_info *c_info; IN: Information needed for the encoding type chosen RETURNS Return an AID to the newly created compressed element, FAIL on error. DESCRIPTION Create a compressed data element. If that data element already exists, we will compress that data element if it is currently un-compresed, or return FAIL if it is already compressed. --------------------------------------------------------------------------*/ int32 HCcreate(int32 file_id, uint16 tag, uint16 ref, comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access element record */ compinfo_t *info = NULL; /* special element information */ atom_t data_id = FAIL; /* dd ID of existing regular element */ int32 data_len; /* length of the data we are checking */ uint16 special_tag; /* special version of tag */ void *buf = NULL; /* temporary buffer */ int32 ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec) || SPECIALTAG(tag) || (special_tag = MKSPECIALTAG(tag)) == DFTAG_NULL) HRETURN_ERROR(DFE_ARGS, FAIL); /* check for access permission */ if (!(file_rec->access & DFACC_WRITE)) HRETURN_ERROR(DFE_DENIED, FAIL); /* get a slot in the access records table */ if (NULL == (access_rec = HIget_access_rec())) HRETURN_ERROR(DFE_TOOMANY, FAIL); /* search for identical dd */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { /* Check if the element is already special */ if (HTPis_special(data_id) == TRUE) { if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); HGOTO_ERROR(DFE_CANTMOD, FAIL); } /* get the info for the dataset */ if (HTPinquire(data_id, NULL, NULL, NULL, &data_len) == FAIL) { if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); HGOTO_ERROR(DFE_INTERNAL, FAIL); } if ((buf = malloc((uint32)data_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (Hgetelement(file_id, tag, ref, buf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Delete the old DD from the file and memory hash table */ if (FAIL == HTPdelete(data_id)) HGOTO_ERROR(DFE_CANTDELDD, FAIL); } /* set up the special element information and write it to file */ info = (compinfo_t *)malloc(sizeof(compinfo_t)); access_rec->special_info = info; if (info == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->length = (data_id != FAIL) ? data_len : COMP_START_BLOCK; /* set up compressed special info structure */ info->attached = 1; info->comp_ref = Htagnewref(file_id, DFTAG_COMPRESSED); /* get the new reference # */ if (HCIinit_model(DFACC_RDWR, &(info->minfo), model_type, m_info) == FAIL) HGOTO_ERROR(DFE_MINIT, FAIL); if (HCIinit_coder(DFACC_RDWR, &(info->cinfo), coder_type, c_info) == FAIL) HGOTO_ERROR(DFE_CINIT, FAIL); if (HCIwrite_header(file_id, info, special_tag, ref, c_info, m_info) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* update access record and file record */ if ((access_rec->ddid = HTPselect(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); access_rec->special_func = &comp_funcs; access_rec->special = SPECIAL_COMP; access_rec->posn = 0; access_rec->access = DFACC_RDWR; access_rec->file_id = file_id; access_rec->appendable = FALSE; /* start data as non-appendable */ file_rec->attach++; /* propagate the initialization down to the modeling layer */ if ((*(info->minfo.model_funcs.stwrite))(access_rec) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); /* compress the old DD and get rid of it, if there was one */ if (data_id != FAIL) { /* write the data through to the compression layer */ if (HCPwrite(access_rec, data_len, buf) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); /* seek back to the beginning of the data through to the compression layer */ if (HCPseek(access_rec, 0, DF_START) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); } ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) { if (access_rec != NULL) HIrelease_accrec_node(access_rec); free(info); access_rec->special_info = NULL; } free(buf); return ret_value; } /* end HCcreate() */ /*-------------------------------------------------------------------------- NAME HCPgetcompinfo -- Retrieves compression information of an element USAGE intn HCPgetcompinfo(file_id, data_tag, data_ref, comp_type, c_info) int32 aid; IN: access record ID uint16 data_tag; IN: element tag uint16 data_ref; IN: element ref comp_coder_t* comp_type; OUT: the type of compression comp_info* c_info; OUT: ptr to compression information structure for storing the retrieved info RETURNS SUCCEED/FAIL DESCRIPTION This routine retrieves the compression type and the compression information of the element, identified by 'aid'. The routine is used by GRgetcompinfo and SDgetcompinfo at this time. --------------------------------------------------------------------------*/ intn HCPgetcompinfo(int32 file_id, uint16 data_tag, uint16 data_ref, comp_coder_t *comp_type, /* OUT: compression type */ comp_info *c_info) /* OUT: retrieved compression info */ { int32 aid = 0, status; accrec_t *access_rec = NULL; /* access element record */ compinfo_t *info = NULL; /* compressed element information */ comp_coder_t temp_coder = COMP_CODE_NONE; model_info m_info; /* modeling information - dummy */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check the output arguments */ if (comp_type == NULL || c_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* start read access on the access record of the data element, which is being inquired for its compression information */ aid = Hstartread(file_id, data_tag, data_ref); /* get the access_rec pointer */ access_rec = HAatom_object(aid); if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* if the element is compressed, get the compression info as requested */ if (access_rec->special == SPECIAL_COMP) { info = (compinfo_t *)access_rec->special_info; if (info == NULL) HGOTO_ERROR(DFE_COMPINFO, FAIL); status = HCIread_header(access_rec, info, c_info, &m_info); if (status == FAIL) HGOTO_ERROR(DFE_COMPINFO, FAIL); /* get the compression type */ temp_coder = info->cinfo.coder_type; } /* if the element is chunked, call HMCgetcompress to get the compression info as appropriate */ else if (access_rec->special == SPECIAL_CHUNKED) { status = HMCgetcompress(access_rec, &temp_coder, c_info); if (status == FAIL) HGOTO_ERROR(DFE_COMPINFO, FAIL); } /* return COMP_CODE_NONE for a non-compressed element */ /* Note: SPECIAL_COMPRAS may need special handling */ else if (access_rec->special == SPECIAL_LINKED || access_rec->special == SPECIAL_EXT || access_rec->special == SPECIAL_VLINKED || access_rec->special == SPECIAL_BUFFERED || access_rec->special == SPECIAL_COMPRAS || access_rec->special == 0) { temp_coder = COMP_CODE_NONE; } /* flag the error when access_rec->special is not something valid */ else { temp_coder = COMP_CODE_INVALID; HGOTO_ERROR(DFE_ARGS, FAIL); } /* end access to the aid appropriately */ if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); if (comp_type != NULL) *comp_type = temp_coder; done: if (ret_value == FAIL) { /* end access to the aid if it's been accessed */ if (aid != 0) if (Hendaccess(aid) == FAIL) HERROR(DFE_CANTENDACCESS); } return ret_value; } /* HCPgetcompinfo */ /*-------------------------------------------------------------------------- NAME HCIstaccess -- Start accessing a compressed data element. USAGE int32 HCIstaccess(access_rec, access) accrec_t *access_rec; IN: the access record of the data element int16 access; IN: the type of access wanted RETURNS Returns an AID or FAIL DESCRIPTION Common code called by HCIstread and HCIstwrite --------------------------------------------------------------------------*/ static int32 HCIstaccess(accrec_t *access_rec, int16 acc_mode) { compinfo_t *info = NULL; /* special element information */ filerec_t *file_rec; /* file record */ comp_info c_info; /* encoding information from the header */ model_info m_info; /* modeling information from the header */ int32 ret_value = SUCCEED; /* get file record and validate */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec) || !(file_rec->access & acc_mode)) HRETURN_ERROR(DFE_ARGS, FAIL); /* initialize the access record */ access_rec->special = SPECIAL_COMP; access_rec->posn = 0; access_rec->access = (uint32)(acc_mode | DFACC_READ); /* get the special info record */ access_rec->special_info = malloc(sizeof(compinfo_t)); info = (compinfo_t *)access_rec->special_info; if (info == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (HCIread_header(access_rec, info, &c_info, &m_info) == FAIL) HGOTO_ERROR(DFE_COMPINFO, FAIL); info->attached = 1; if (HCIinit_model(acc_mode, &(info->minfo), info->minfo.model_type, &m_info) == FAIL) HRETURN_ERROR(DFE_MINIT, FAIL); if (HCIinit_coder(acc_mode, &(info->cinfo), info->cinfo.coder_type, &c_info) == FAIL) HRETURN_ERROR(DFE_CINIT, FAIL); file_rec->attach++; ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) { free(info); access_rec->special_info = NULL; } return ret_value; } /* end HCIstaccess() */ /*-------------------------------------------------------------------------- NAME HCPstread -- Start read access on a compressed data element. USAGE int32 HCPstread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns an AID or FAIL DESCRIPTION Start read access on a compressed data element. --------------------------------------------------------------------------*/ int32 HCPstread(accrec_t *access_rec) { compinfo_t *info; /* information on the special element */ int32 ret_value; /* AID to return */ if ((ret_value = HCIstaccess(access_rec, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_DENIED, FAIL); info = (compinfo_t *)access_rec->special_info; if ((*(info->minfo.model_funcs.stread))(access_rec) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); done: return ret_value; } /* end HCPstread() */ /*-------------------------------------------------------------------------- NAME HCPstwrite -- Start write access on a compressed data element. USAGE int32 HCPstwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns an AID or FAIL DESCRIPTION Start write access on a compressed data element. --------------------------------------------------------------------------*/ int32 HCPstwrite(accrec_t *access_rec) { compinfo_t *info; /* information on the special element */ int32 ret_value; /* AID to return */ if ((ret_value = HCIstaccess(access_rec, DFACC_WRITE)) == FAIL) HGOTO_ERROR(DFE_DENIED, FAIL); info = (compinfo_t *)access_rec->special_info; if ((*(info->minfo.model_funcs.stwrite))(access_rec) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); done: return ret_value; } /* end HCPstwrite() */ /*-------------------------------------------------------------------------- NAME HCPseek -- Seek to offset within the data element USAGE int32 HCPseek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified intn origin; IN: the origin to seek from RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. --------------------------------------------------------------------------*/ int32 HCPseek(accrec_t *access_rec, int32 offset, intn origin) { compinfo_t *info; /* information on the special element */ int32 ret_value; /* Adjust offset according to origin. There is no upper bound to posn */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += ((compinfo_t *)(access_rec->special_info))->length; if (offset < 0) HGOTO_ERROR(DFE_RANGE, FAIL); info = (compinfo_t *)access_rec->special_info; if ((ret_value = (*(info->minfo.model_funcs.seek))(access_rec, offset, origin)) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); /* set the offset */ access_rec->posn = offset; done: return ret_value; } /* end HCPseek() */ /*-------------------------------------------------------------------------- NAME HCPread -- Read in a portion of data from a compressed data element. USAGE int32 HCPread(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a compressed data element. --------------------------------------------------------------------------*/ int32 HCPread(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* information on the special element */ int32 ret_value; /* validate length */ if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); info = (compinfo_t *)access_rec->special_info; /* adjust length if it falls off the end of the element */ if (length == 0) length = info->length - access_rec->posn; else if (length < 0 || access_rec->posn + length > info->length) HGOTO_ERROR(DFE_RANGE, FAIL); if ((*(info->minfo.model_funcs.read))(access_rec, length, data) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); /* adjust access position */ access_rec->posn += length; ret_value = length; done: return ret_value; } /* end HCPread() */ /*-------------------------------------------------------------------------- NAME HCPwrite -- Write out a portion of data from a compressed data element. USAGE int32 HCPwrite(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a compressed data element. --------------------------------------------------------------------------*/ int32 HCPwrite(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* information on the special element */ uint8 local_ptbuf[4]; uint8 *p = local_ptbuf; /* temp buffer ptr */ filerec_t *file_rec; /* file record */ int32 ret_value; /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); /* validate length */ if (length < 0) HRETURN_ERROR(DFE_RANGE, FAIL); info = (compinfo_t *)access_rec->special_info; if ((*(info->minfo.model_funcs.write))(access_rec, length, data) == FAIL) HGOTO_ERROR(DFE_MODEL, FAIL); /* update access record, and information about special element */ access_rec->posn += length; if (access_rec->posn > info->length) { int32 data_off; /* offset of the data we are checking */ /* get the info for the dataset */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); info->length = access_rec->posn; INT32ENCODE(p, info->length); if (HPseek(file_rec, data_off + 4) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* re-write un-comp. len */ if (HP_write(file_rec, local_ptbuf, 4) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ ret_value = length; /* return length of bytes written */ done: return ret_value; } /* end HCPwrite() */ /*-------------------------------------------------------------------------- NAME HCPinquire -- Inquire information about the access record and data element. USAGE int32 HCPinquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. --------------------------------------------------------------------------*/ int32 HCPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { compinfo_t *info = /* special information record */ (compinfo_t *)access_rec->special_info; uint16 data_tag, data_ref; /* tag/ref of the data we are checking */ int32 data_off; /* offset of the data we are checking */ /* get the info for the dataset */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, NULL) == FAIL) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id != NULL) *pfile_id = access_rec->file_id; if (ptag != NULL) *ptag = data_tag; if (pref != NULL) *pref = data_ref; if (plength != NULL) *plength = info->length; if (poffset != NULL) *poffset = data_off; if (pposn != NULL) *pposn = access_rec->posn; if (paccess != NULL) *paccess = (int16)access_rec->access; if (pspecial != NULL) *pspecial = (int16)access_rec->special; return SUCCEED; } /* end HCPinquire() */ /*-------------------------------------------------------------------------- NAME HCPendaccess -- Close the compressed data element and free the AID USAGE intn HCPendaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free the AID. --------------------------------------------------------------------------*/ intn HCPendaccess(accrec_t *access_rec) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* close the file pointed to by this access rec */ if (HCPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* update file and access records */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* detach from the file */ file_rec->attach--; /* free the access record */ HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* end HCPendaccess() */ /*-------------------------------------------------------------------------- NAME HCPcloseAID -- Get rid of the compressed data element data structures USAGE int32 HCPcloseAID(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Get rid of the compressed data element internal data structures --------------------------------------------------------------------------*/ int32 HCPcloseAID(accrec_t *access_rec) { compinfo_t *info; /* special information record */ int32 ret = SUCCEED; info = (compinfo_t *)access_rec->special_info; if ((ret = (*(info->minfo.model_funcs.endaccess))(access_rec)) == FAIL) HRETURN_ERROR(DFE_MODEL, FAIL); /* Free the compression information */ /* BMR - reset special_info to NULL after memory is freed; problem shown by the failure when running hdp list with a large file on PC - 12/6/98 */ if (--(info->attached) == 0) { free(info); access_rec->special_info = NULL; } return ret; } /* end HCPcloseAID() */ /* ------------------------------- HCPinfo -------------------------------- */ /* NAME HCPinfo -- return info about a compressed element USAGE int32 HCPinfo(access_rec, info_block) accrec_t * access_rec; IN: access record of access element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given compressed element. Info_block is assumed to be non-NULL. ---------------------------------------------------------------------------*/ int32 HCPinfo(accrec_t *access_rec, sp_info_block_t *info_block) { compinfo_t *info = /* special information record */ (compinfo_t *)access_rec->special_info; /* validate access record */ if (access_rec->special != SPECIAL_COMP) HRETURN_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_block */ info_block->key = SPECIAL_COMP; info_block->comp_type = (int32)info->cinfo.coder_type; info_block->model_type = (int32)info->minfo.model_type; info_block->comp_size = Hlength(access_rec->file_id, DFTAG_COMPRESSED, info->comp_ref); return SUCCEED; } /* HCPinfo */ /* ------------------------------- HCPgetinfo ----------------------------- */ /* NAME HCget_config_info -- return info about configuration of a compression method USAGE intn HCget_config_info( comp_coder_t coder_type, uint32* compression_config_info) comp_coder_t coder_type; IN: the compression type queried compression_config_info; OUT: flags to indiat compression status 0 -- not enabled COMP_DECODER_ENABLED - decoding enabled COMP_ENCODER_ENABLED - encoding enabled RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given compression method. Currently, reports if encoding and/or decoding are available. SZIP is the only method that varies in the current versions. ---------------------------------------------------------------------------*/ intn HCget_config_info(comp_coder_t coder_type, /* IN: compression type */ uint32 *compression_config_info) { *compression_config_info = 0; switch (coder_type) { case COMP_CODE_IMCOMP: /* IMCOMP no longer supported */ *compression_config_info = 0; break; case COMP_CODE_NONE: /* "none" (i.e. no) encoding (still uses callbacks) */ case COMP_CODE_RLE: /* Run-length encoding */ case COMP_CODE_NBIT: /* N-bit encoding */ case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ case COMP_CODE_JPEG: /* jpeg compression */ case COMP_CODE_DEFLATE: /* gzip 'deflate' encoding */ *compression_config_info = COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { *compression_config_info = COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED; } else { *compression_config_info = COMP_DECODER_ENABLED; } #else *compression_config_info = 0; #endif /* H4_HAVE_LIBSZ */ break; default: *compression_config_info = 0; HRETURN_ERROR(DFE_BADCODER, FAIL); } return SUCCEED; } /*-------------------------------------------------------------------------- NAME HCPgetcomptype -- Retrieves compression type of an element USAGE intn HCPgetcomptype(aid, coder_type) int32 aid; IN: access record ID comp_coder_t* coder_type; OUT: the type of compression RETURNS SUCCEED/FAIL DESCRIPTION This routine retrieves the compression type of the element, identified by 'aid'. It is very similar to HCPgetcompinfo except that it only retrieves the compression type and not the compression information. The routine is used by GRgetcomptype and SDgetcomptype. REVISION LOG Dec. 2007: Added so that applications can get the compression method only. The immediate intention is to avoid the need for external libraries to be present when only compression type is desired and not compression information. -BMR --------------------------------------------------------------------------*/ intn HCPgetcomptype(int32 file_id, uint16 data_tag, uint16 data_ref, /* IN: tag/ref of element */ comp_coder_t *comp_type) /* OUT: compression type */ { uint16 ctag, cref; /* tag/ref for the special info header object */ int32 data_id = FAIL; /* temporary AID for header info */ int32 temp_aid = FAIL; /* temporary AID for header info */ int32 data_len; /* offset of the data we are checking */ uint8 *p; /* pointers to the temporary buffer */ uint8 *local_ptbuf = NULL; /* temporary buffer */ uint16 sp_tag; /* special tag */ uint16 c_type; /* compression type */ filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get access element from dataset's tag/ref */ if ((data_id = HTPselect(file_rec, data_tag, data_ref)) != FAIL) { /* get the info for the dataset */ if (HTPinquire(data_id, &ctag, &cref, NULL, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* if element is not special, return COMP_CODE_NONE */ if (!SPECIALTAG(ctag)) { *comp_type = COMP_CODE_NONE; HGOTO_DONE(SUCCEED); } /* element is special, proceed with reading special info header */ if ((local_ptbuf = (uint8 *)malloc((size_t)data_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Get the special info header */ if ((temp_aid = Hstartaccess(file_id, MKSPECIALTAG(ctag), cref, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); if (Hread(temp_aid, 2, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Get special tag */ p = local_ptbuf; UINT16DECODE(p, sp_tag); /* If it is a compressed element, move forward until compression coder and get it */ switch (sp_tag) { case SPECIAL_COMP: if (Hread(temp_aid, 12, local_ptbuf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Skip comp version, length, ref#, and model type */ p = local_ptbuf + 2 + 4 + 2 + 2; UINT16DECODE(p, c_type); /* get encoding type */ *comp_type = (comp_coder_t)c_type; break; /* If element is chunked, hand over to the chunk interface to check if it is compressed and get the type */ case SPECIAL_CHUNKED: if (HMCgetcomptype(temp_aid, comp_type) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); break; /* return COMP_CODE_NONE for a non-compressed element */ /* Developer's Note: SPECIAL_COMPRAS may need special handling */ case SPECIAL_LINKED: case SPECIAL_EXT: case SPECIAL_VLINKED: case SPECIAL_BUFFERED: case SPECIAL_COMPRAS: case 0: *comp_type = COMP_CODE_NONE; break; /* flag the error when special tag is not something valid */ default: *comp_type = COMP_CODE_INVALID; HGOTO_ERROR(DFE_ARGS, FAIL); } } else /* no special element */ { *comp_type = COMP_CODE_NONE; } done: /* end access to the aid's if they've been accessed */ if (temp_aid != FAIL) if (Hendaccess(temp_aid) == FAIL) HERROR(DFE_CANTENDACCESS); if (data_id != FAIL) if (HTPendaccess(data_id) == FAIL) HERROR(DFE_CANTENDACCESS); /* release allocated memory */ free(local_ptbuf); return ret_value; } /* HCPgetcomptype */ /*-------------------------------------------------------------------------- NAME HCPgetdatasize -- Retrieves the sizes of original and compressed data. USAGE int32 HCPgetdatasize(file_id, data_tag, data_ref, comp_size, orig_size) int32 file_id; IN: file id uint16 data_tag; IN: tag of the element uint16 data_ref; IN: ref of element int32* comp_size; OUT: size of compressed data int32* orig_size; OUT: size of non-compressed data RETURNS SUCCEED/FAIL DESCRIPTION This routine gets access to the element pointed to by the dataset's tag/ref pair, then proceeds as followed: - If the element is not special, HCPgetdatasize will use Hlength to get the length of the data then return. - If the element is compressed, HCPgetdatasize will read the element's special header and decode it for the uncompressed data length and the compressed data ref#, then use Hlength to get the length of the compressed data. - If the element is chunked, HCPgetdatasize will let the chunking layer retrieve the sizes (HMCgetdatasize.) --------------------------------------------------------------------------*/ intn HCPgetdatasize(int32 file_id, uint16 data_tag, uint16 data_ref, /* IN: tag/ref of element */ int32 *comp_size, /* OUT - size of compressed data */ int32 *orig_size) /* OUT - size of non-compressed data */ { uint8 *local_ptbuf = NULL, *p; uint16 sp_tag; /* special tag */ uint16 comp_ref = 0; atom_t data_id = FAIL; /* dd ID of existing regular element */ int32 len = 0; filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get access element from dataset's tag/ref */ if ((data_id = HTPselect(file_rec, data_tag, data_ref)) != FAIL) { /* if the element is not special, that means dataset's tag/ref specifies the actual data that was written to the dataset, so we don't need to check further */ if (HTPis_special(data_id) == FALSE) { if ((len = Hlength(file_id, data_tag, data_ref)) == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); *orig_size = *comp_size = len; } /* if the element is special, get the special info header and decode for the uncompressed data length and the compressed data ref#, which will be used with DFTAG_COMPRESSED to get the compressed data len */ else { int32 rec_len = 0; /* Get the compression header (description record) */ rec_len = HPread_drec(file_id, data_id, &local_ptbuf); if (rec_len <= 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get special tag */ p = local_ptbuf; INT16DECODE(p, sp_tag); /* verify that it is a compressed element, then get the data len */ if (sp_tag == SPECIAL_COMP) { /* skip 2byte header_version */ p = p + 2; INT32DECODE(p, len); /* get _uncompressed_ data length */ *orig_size = len; /* set original data size */ /* if no data written, set compressed data size too */ if (len == 0) { *comp_size = len; } /* Data has been written, get compressed data size */ else { /* get ref# of compressed data */ UINT16DECODE(p, comp_ref); if ((len = Hlength(file_id, DFTAG_COMPRESSED, comp_ref)) == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); *comp_size = len; /* set compressed data size */ } /* data written */ } /* element is compressed */ /* if it is a chunked element, hand the task over to the chunking layer. */ else if (sp_tag == SPECIAL_CHUNKED) { if (HMCgetdatasize(file_id, p, comp_size, orig_size) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* unlimited dimension and external data fall in here */ else if (sp_tag == SPECIAL_LINKED || sp_tag == SPECIAL_EXT) { INT32DECODE(p, len); /* get total data length */ *orig_size = *comp_size = len; /* set data sizes */ } } /* else, data_id is special */ /* end access to the aid */ if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if data_id != FAIL */ else /* HTPselect failed */ HGOTO_ERROR(DFE_CANTACCESS, FAIL); done: free(local_ptbuf); return ret_value; } /* HCPgetdatasize */ hdf4-hdf4.3.1/hdf/src/hcomp.h000066400000000000000000000113071503061704500156400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: hcomp.h * Purpose: header file for compression information & structures * Dependencies: should be included after hdf.h * Invokes: * Contents: * Structure definitions: comp_info * Constant definitions: lots... *---------------------------------------------------------------------------*/ #ifndef H4_HCOMP_H #define H4_HCOMP_H #include "hdf.h" /* For determining which type of modeling is being done */ typedef enum { COMP_MODEL_STDIO = 0 /* for Standard C I/O model */ } comp_model_t; /* For determining which type of encoding is being done */ typedef enum { COMP_CODE_NONE = 0, /* don't encode at all, just store */ COMP_CODE_RLE, /* for simple RLE encoding */ COMP_CODE_NBIT, /* for N-bit encoding */ COMP_CODE_SKPHUFF, /* for Skipping huffman encoding */ COMP_CODE_DEFLATE, /* for gzip 'deflate' encoding */ COMP_CODE_SZIP, /* for szip encoding */ COMP_CODE_INVALID, /* invalid last code, for range checking */ COMP_CODE_JPEG, /* _Ugly_ hack to allow JPEG images to be created with GRsetcompress */ COMP_CODE_IMCOMP = 12 /* another _Ugly_ hack to allow IMCOMP images to be inquired, 12 to be the same as COMP_IMCOMP writing will not be allowed, however. -BMR, Jul 2012 */ } comp_coder_t; /* Compression types available */ #define COMP_NONE 0 #define COMP_JPEG 2 #define COMP_RLE 11 #define COMP_IMCOMP 12 /* Compression encoder/decoder configuration */ #define COMP_DECODER_ENABLED 1 #define COMP_ENCODER_ENABLED 2 typedef union tag_model_info { /* Union to contain modeling information */ struct { int32 nt; /* number type */ intn ndim; /* number of dimensions */ int32 *dims; /* array of dimensions */ } dim; } model_info; typedef union tag_comp_info { /* Union to contain compression information */ struct { /* Struct to contain information about how to compress */ /* or decompress a JPEG encoded 24-bit image */ intn quality; /* Quality factor for JPEG compression, should be from */ /* 0 (terrible) to 100 (very good) */ intn force_baseline; /* If force_baseline is set to TRUE then */ /* quantization tables are limited to */ /* 0..255 for JPEG baseline compatibility */ /* This is only an issue for quality */ /* settings below 24 */ } jpeg; struct { /* struct to contain information about how to compress */ /* or decompress a N-bit encoded dataset */ int32 nt; /* number type of the data to encode */ intn sign_ext; /* whether to sign extend or not */ intn fill_one; /* whether to fill with 1's or 0's */ intn start_bit; /* offset of the start bit in the data */ intn bit_len; /* number of bits to store */ } nbit; struct { /* struct to contain info about how to compress */ /* or decompress a "skipping" huffman encoded dataset */ intn skp_size; /* size of the individual elements when skipping */ } skphuff; struct { /* struct to contain info about how to compress */ /* or decompress a gzip encoded dataset */ intn level; /* how hard to work when compressing the data */ } deflate; struct { int32 options_mask; /* IN */ int32 pixels_per_block; /* IN */ int32 pixels_per_scanline; /* OUT: computed */ int32 bits_per_pixel; /* OUT: size of NT */ int32 pixels; /* OUT: size of dataset or chunk */ } szip; /* for szip encoding */ } comp_info; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI uint16 compress_map[]; #ifdef __cplusplus } #endif #endif /* H4_HCOMP_H */ hdf4-hdf4.3.1/hdf/src/hcomp_priv.h000066400000000000000000000111511503061704500166750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: hcomp_priv.h * Purpose: Internal library header file for compression information * Dependencies: should be included after hdf.h * Invokes: * Contents: * Structure definitions: * Constant definitions: *---------------------------------------------------------------------------*/ #ifndef H4_HCOMP_PRIV_H #define H4_HCOMP_PRIV_H #include "hdf_priv.h" #include "hfile_priv.h" /* Modeling information */ /* structure for storing modeling information */ /* only allow modeling and master compression routines access */ #include "mstdio_priv.h" /* stdio modeling header */ typedef struct comp_model_info_tag { comp_model_t model_type; /* model this stream is using */ union { /* union of all the different types of model information */ comp_model_stdio_info_t stdio_info; /* stdio model info */ } model_info; funclist_t model_funcs; /* functions to perform modeling */ } comp_model_info_t; /* Coding information */ /* structure for storing modeling information */ /* only allow encoding and master compression routines access */ #include "cnone_priv.h" /* no encoding header */ #include "crle_priv.h" /* run-length encoding header */ #include "cnbit_priv.h" /* N-bit encoding header */ #include "cskphuff_priv.h" /* Skipping huffman encoding header */ #include "cdeflate_priv.h" /* gzip 'deflate' encoding header */ #include "cszip_priv.h" /* szip encoding header */ typedef struct comp_coder_info_tag { comp_coder_t coder_type; /* coding scheme this stream is using */ union { /* union of all the different types of coding information */ comp_coder_none_info_t none_info; /* "None" coding info */ comp_coder_rle_info_t rle_info; /* RLE coding info */ comp_coder_nbit_info_t nbit_info; /* N-bit coding info */ comp_coder_skphuff_info_t skphuff_info; /* Skipping huffman coding info */ comp_coder_deflate_info_t deflate_info; /* gzip 'deflate' coding info */ comp_coder_szip_info_t szip_info; /* szip coding info */ } coder_info; funclist_t coder_funcs; /* functions to perform encoding */ } comp_coder_info_t; /* structure for storing a state */ typedef struct comp_stateinfo_tag { uint32 d_offset; /* the offset of the state in the dataset */ uint32 c_offset; /* offset of the state in the compressed data */ comp_model_info_t minfo; /* modeling information */ comp_coder_info_t cinfo; /* coding information */ } comp_stateinfo_t; /* structure for storing state caching information */ typedef struct comp_state_cache_tag { intn num_states; /* the number of states cached */ comp_stateinfo_t **comp_state; /* pointer to an array of pointers to compression states */ } comp_state_cache_t; /* compinfo_t -- compressed element information structure */ typedef struct compinfo_tag { intn attached; /* number of access records attached to this information structure */ int32 length; /* the actual length of the data elt */ uint16 comp_ref; /* compressed info ref. number */ int32 aid; /* AID of the compressed info */ comp_model_info_t minfo; /* modeling information */ comp_coder_info_t cinfo; /* coding information */ intn caching; /* whether caching is turned on */ comp_state_cache_t sinfo; /* state information for caching */ } compinfo_t; #endif /* H4_HCOMP_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hcompri.c000066400000000000000000000404621503061704500161720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------------------------------ hcompri.c ------------------------------- Routines for reading & writing old-style (i.e. non-special compressed) compressed raster images, such as JPEG, (raster specific) RLE and IMCOMP. These routines are designed to be layered underneath the buffered special element code and only provide access to reading/writing the entire image at once through the DFgetcomp/DFputcomp code. File Organization ****************** These special elements are invoked at run-time only, information about whether an element was written/read through this interface is not stored in the file. Unless specifically asked for by an API routine or required for a particular kind of access by the library, these routines aren't called. LOCAL ROUTINES EXPORTED BUT LIBRARY PRIVATE ROUTINES HRPcloseAID -- close object but keep AID active HRPendacess -- close object, free AID HRPinfo -- return info about a compressed raster element HRPinquire -- retrieve information about a compressed raster element HRPread -- read some data out of a compressed raster element HRPreset -- replace the current comp. raster info with new info (NOP) HRPseek -- set the seek position HRPsetaccesstype -- set the I/O access type of the compressed raster element HRPstread -- open an access record for reading HRPstwrite -- open an access record for reading HRPwrite -- write some data out to a compressed raster element HRPconvert -- wrap access to a compress raster object ------------------------------------------------------------------------- */ #include "hdf_priv.h" #include "hfile_priv.h" /* crinfo_t -- compressed raster information structure */ typedef struct { intn attached; /* number of access records attached to this information structure */ int32 fid; /* File ID of image */ uint16 tag, ref; /* Tag & ref of compressed raster image */ int32 xdim, ydim; /* Image dimensions */ int16 scheme; /* Compression scheme */ comp_info cinfo; /* Compression information */ uintn image_size; /* Size of the uncompressed image in memory */ } crinfo_t; /* forward declaration of the functions provided in this module */ /* cr_funcs -- table of the accessing functions of the compressed raster data element function modules. The position of each function in the table is standard */ funclist_t cr_funcs = { HRPstread, HRPstwrite, HRPseek, HRPinquire, HRPread, HRPwrite, HRPendaccess, HRPinfo, NULL /* no routine registered */ }; /*------------------------------------------------------------------------ NAME HRPconvert -- wrap an existing raster image with the special element routines. USAGE intn HRPconvert(fid, tag, ref, xdim, ydim, scheme, cinfo, pixel_size) int32 fid; IN: File ID for raster image uint16 tag, ref; IN: Tag & Ref of raster image to wrap int32 xdim, ydim; IN: Dimensions of raster image int16 scheme; IN: Compression scheme used comp_info *cinfo; IN: Additional compression parameters uintn pixel_size; IN: Size of the pixels in the image RETURNS AID on SUCCEED/FAIL on failure DESCRIPTION Wraps an existing compressed raster image with the special element API. This is designed only for use under a buffered special element. FORTRAN None --------------------------------------------------------------------------*/ int32 HRPconvert(int32 fid, uint16 tag, uint16 ref, int32 xdim, int32 ydim, int16 scheme, comp_info *cinfo, uintn pixel_size) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access element record */ crinfo_t *info = NULL; /* information for the compressed raster element */ int32 ret_value = SUCCEED; HEclear(); file_rec = HAatom_object(fid); if (BADFREC(file_rec) || SPECIALTAG(tag)) HGOTO_ERROR(DFE_ARGS, FAIL); /* allocate special info struct for buffered element */ if ((info = malloc((uint32)sizeof(crinfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* fill in special info struct */ info->attached = 1; info->fid = fid; info->tag = tag; info->ref = ref; info->xdim = xdim; info->ydim = ydim; info->image_size = xdim * ydim * pixel_size; info->scheme = scheme; memcpy(&(info->cinfo), cinfo, sizeof(comp_info)); /* get empty access record */ access_rec = HIget_access_rec(); if (access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* set up the information in the access record */ access_rec->special_info = info; /* Check if the tag/ref pair exists */ if (Hexist(fid, tag, ref) < 0) { access_rec->new_elem = TRUE; if ((access_rec->ddid = HTPcreate(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else { if ((access_rec->ddid = HTPselect(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end else */ access_rec->special_func = &cr_funcs; access_rec->special = SPECIAL_COMPRAS; access_rec->posn = 0; access_rec->access = DFACC_RDWR; access_rec->file_id = fid; access_rec->appendable = FALSE; /* data is non-appendable */ file_rec->attach++; ret_value = HAregister_atom(AIDGROUP, access_rec); /* return access id */ done: if (ret_value == FAIL) { free(info); if (NULL != access_rec) access_rec->special_info = NULL; } return ret_value; } /* HRPconvert */ /* ------------------------------ HRPstread ------------------------------- */ /* NAME HRPstread -- open an access record for reading USAGE int32 HRPstread(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION This is a stub routine and should never be called ---------------------------------------------------------------------------*/ int32 HRPstread(accrec_t *rec) { (void)rec; assert(0 && "Should never be called"); return FAIL; } /* HRPstread */ /* ------------------------------ HRPstwrite ------------------------------- */ /* NAME HRPstwrite -- open an access record for reading USAGE int32 HRPstwrite(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION This is a stub routine and should never be called. ---------------------------------------------------------------------------*/ int32 HRPstwrite(accrec_t *rec) { (void)rec; assert(0 && "Should never be called"); return FAIL; } /* HRPstwrite */ /* ------------------------------ HRPseek ------------------------------- */ /* NAME HRPseek -- set the seek posn USAGE int32 HRPseek(access_rec, offset, origin) access_t * access_rec; IN: access record to mess with int32 offset; IN: seek offset int32 origin; IN: where we should calc the offset from RETURNS SUCCEED / FAIL DESCRIPTION Set the seek posn in the given compressed raster element. The only valid position is 0 bytes from the beginning. ---------------------------------------------------------------------------*/ int32 HRPseek(accrec_t *access_rec, int32 offset, int origin) { int32 ret_value = SUCCEED; /* Adjust offset according to origin. There is no upper bound to posn */ if (origin != DF_START || offset != 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* set the offset */ access_rec->posn = offset; done: return ret_value; } /* HRPseek */ /* ------------------------------ HRPread ------------------------------- */ /* NAME HRPread -- read some data out of compressed raster element USAGE int32 HRPread(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer for data RETURNS The number of bytes read or FAIL on error DESCRIPTION Uncompress a compressed raster image into the buffer provided. Support is only provided for reading the entire image in. ---------------------------------------------------------------------------*/ int32 HRPread(accrec_t *access_rec, int32 length, void *data) { crinfo_t *info = /* information on the special element */ (crinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate length */ if (length != 0 && length != (int32)info->image_size) HGOTO_ERROR(DFE_RANGE, FAIL); /* adjust length */ if (length == 0) length = info->image_size; /* Copy data from buffer */ DFgetcomp(info->fid, info->tag, info->ref, data, info->xdim, info->ydim, info->scheme); ret_value = length; done: return ret_value; } /* HRPread */ /* ------------------------------ HRPwrite ------------------------------- */ /* NAME HRPwrite -- write data out to a compressed raster image USAGE int32 HRPwrite(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer of data RETURNS The number of bytes written or FAIL on error DESCRIPTION Write out data to a compressed raster image. The entire image must be written. ---------------------------------------------------------------------------*/ int32 HRPwrite(accrec_t *access_rec, int32 length, const void *data) { crinfo_t *info = /* information on the special element */ (crinfo_t *)(access_rec->special_info); int32 ret_value = SUCCEED; /* validate length */ if (length != 0 && length != (int32)info->image_size) HGOTO_ERROR(DFE_RANGE, FAIL); /* adjust length */ if (length == 0) length = info->image_size; /* Copy data to buffer */ DFputcomp(info->fid, info->tag, info->ref, data, info->xdim, info->ydim, NULL, NULL, info->scheme, &(info->cinfo)); ret_value = length; /* return length of bytes written */ done: return ret_value; } /* HRPwrite */ /* ------------------------------ HRPinquire ------------------------------ */ /* NAME HRPinquire -- retrieve information about a compressed raster element USAGE int32 HBPinquire(access_rec, file, tag, ref, len, off, pos, acc, sp) access_t * access_rec; IN: access record to return info about uint16 * file; OUT: file ID; uint16 * tag; OUT: tag of info record; uint16 * ref; OUT: ref of info record; int32 * len; OUT: length of element; int32 * off; OUT: offset of element (NOT correct); int32 * pos; OUT: current position in element; int16 * acc; OUT: access mode; int16 * sp; OUT: special code; RETURNS SUCCEED DESCRIPTION Return interesting information about a compressed raster element. NULL can be passed for any of the OUT parameters if their value is not needed. ---------------------------------------------------------------------------*/ int32 HRPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { crinfo_t *info = /* special information record */ (crinfo_t *)access_rec->special_info; uint16 data_tag, data_ref; /* tag/ref of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 ret_value = SUCCEED; /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id) *pfile_id = access_rec->file_id; if (ptag) *ptag = data_tag; if (pref) *pref = data_ref; if (plength) *plength = (access_rec->new_elem ? -1 : info->image_size); if (poffset) *poffset = data_off; if (pposn) *pposn = access_rec->posn; if (paccess) *paccess = (int16)access_rec->access; if (pspecial) *pspecial = (int16)access_rec->special; done: return ret_value; } /* HRPinquire */ /* ----------------------------- HRPendaccess ----------------------------- */ /* NAME HRPendacess -- free AID USAGE intn HRPendaccess(access_rec) access_t * access_rec; IN: access record to close RETURNS SUCCEED / FAIL DESCRIPTION Free the AID ---------------------------------------------------------------------------*/ intn HRPendaccess(accrec_t *access_rec) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* shut down dependent access record */ if (HRPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* end access to the tag/ref pair this ddid represents */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* free the access record */ HIrelease_accrec_node(access_rec); /* detach from the file */ file_rec->attach--; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HRPendaccess */ /* ----------------------------- HRPcloseAID ------------------------------ */ /* NAME HRPcloseAID -- free memory but keep AID active USAGE int32 HRPcloseAID(access_rec) access_t * access_rec; IN: access record of file to close RETURNS SUCCEED / FAIL DESCRIPTION Free special element information, but do *NOT* free the AID. ---------------------------------------------------------------------------*/ int32 HRPcloseAID(accrec_t *access_rec) { crinfo_t *info = /* special information record */ (crinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* detach the special information record. If no more references to that, free the record */ if (--(info->attached) == 0) { free(info); access_rec->special_info = NULL; } return ret_value; } /* HRPcloseAID */ /* ------------------------------- HRPinfo -------------------------------- */ /* NAME HRPinfo -- return info about a compressed raster element USAGE int32 HRPinfo(access_rec, info_block) accrec_t * access_rec; IN: access record of element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given external element. Info_block is assumed to be non-NULL. --------------------------------------------------------------------------- */ int32 HRPinfo(accrec_t *access_rec, sp_info_block_t *info_block) { int32 ret_value = SUCCEED; /* validate access record */ if (access_rec->special != SPECIAL_COMPRAS) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_block */ info_block->key = SPECIAL_COMPRAS; done: return ret_value; } /* HRPinfo */ hdf4-hdf4.3.1/hdf/src/hconv_priv.h000066400000000000000000000100371503061704500167060ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: hconv_priv.h * Purpose: header file for data conversion information & structures *---------------------------------------------------------------------------*/ #ifndef H4_HCONV_PRIV_H #define H4_HCONV_PRIV_H #include "hdf_priv.h" /*****************************************************************************/ /* CONSTANT DEFINITIONS */ /*****************************************************************************/ /* Big-endian */ #ifdef H4_WORDS_BIGENDIAN #define UI8_IN DFKnb1b /* Unsigned Integer, 8 bits */ #define UI8_OUT DFKnb1b #define SI16_IN DFKnb2b /* S = Signed */ #define SI16_OUT DFKnb2b #define UI16_IN DFKnb2b #define UI16_OUT DFKnb2b #define SI32_IN DFKnb4b #define SI32_OUT DFKnb4b #define UI32_IN DFKnb4b #define UI32_OUT DFKnb4b #define F32_IN DFKnb4b /* Float, 32 bits */ #define F32_OUT DFKnb4b #define F64_IN DFKnb8b #define F64_OUT DFKnb8b #define LUI8_IN DFKnb1b /* Little Endian Unsigned Integer, 8 bits */ #define LUI8_OUT DFKnb1b #define LSI16_IN DFKsb2b #define LSI16_OUT DFKsb2b #define LUI16_IN DFKsb2b #define LUI16_OUT DFKsb2b #define LSI32_IN DFKsb4b #define LSI32_OUT DFKsb4b #define LUI32_IN DFKsb4b #define LUI32_OUT DFKsb4b #define LF32_IN DFKsb4b #define LF32_OUT DFKsb4b #define LF64_IN DFKsb8b #define LF64_OUT DFKsb8b #else /* Little-endian */ #define UI8_IN DFKnb1b /* Big-Endian IEEE support */ #define UI8_OUT DFKnb1b /* The s in DFKsb2b is for swap */ #define SI16_IN DFKsb2b #define SI16_OUT DFKsb2b #define UI16_IN DFKsb2b #define UI16_OUT DFKsb2b #define SI32_IN DFKsb4b #define SI32_OUT DFKsb4b #define UI32_IN DFKsb4b #define UI32_OUT DFKsb4b #define F32_IN DFKsb4b #define F32_OUT DFKsb4b #define F64_IN DFKsb8b #define F64_OUT DFKsb8b #define LUI8_IN DFKnb1b /* Little-Endian IEEE support */ #define LUI8_OUT DFKnb1b #define LSI16_IN DFKnb2b #define LSI16_OUT DFKnb2b #define LUI16_IN DFKnb2b #define LUI16_OUT DFKnb2b #define LSI32_IN DFKnb4b #define LSI32_OUT DFKnb4b #define LUI32_IN DFKnb4b #define LUI32_OUT DFKnb4b #define LF32_IN DFKnb4b #define LF32_OUT DFKnb4b #define LF64_IN DFKnb8b #define LF64_OUT DFKnb8b #endif /* Byte-order differences */ /* All Machines currently use the same routines */ /* for Native mode "conversions" */ #define NUI8_IN DFKnb1b #define NUI8_OUT DFKnb1b #define NSI16_IN DFKnb2b #define NSI16_OUT DFKnb2b #define NUI16_IN DFKnb2b #define NUI16_OUT DFKnb2b #define NSI32_IN DFKnb4b #define NSI32_OUT DFKnb4b #define NUI32_IN DFKnb4b #define NUI32_OUT DFKnb4b #define NF32_IN DFKnb4b #define NF32_OUT DFKnb4b #define NF64_IN DFKnb8b #define NF64_OUT DFKnb8b /*****************************************************************************/ /* STRUCTURE DEFINITIONS */ /*****************************************************************************/ union fpx { float f; long l; }; union float_uint_uchar { float32 f; int32 i; unsigned char c[4]; }; #endif /* H4_HCONV_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hdatainfo.c000066400000000000000000001232231503061704500164630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* NOTE: this file and other "datainfo" related files will be configured so that this feature will not be built by default. -BMR Update: THG and NASA had decided to include all features developed for the HDF Mapping Project in the library -BMR (~Jan 2011) */ /********************************************************************** FILE hdatainfo.c HDF data information routines - added to support the HDF4 Mapping project This file contains the multi-file HDF interface functions that provide information about location and size of raw data. This type of information will allow applications to extract raw data from an HDF file without the use of HDF4 library. These features were developed to support the HDF4 Mapping project (2010-2011.) As with the rest of the functions in the APIs, these functions have names beginning with VG, VS, GR, and AN, appropriately. EXPORTED ROUTINES ----------------- VSgetdatainfo -- retrieves offset(s) and length(s) of a vdata's data GRgetdatainfo -- retrieves offset(s) and length(s) of an image's data VSgetattdatainfo -- retrieves offset and length of a vdata attribute's data Vgetattdatainfo -- retrieves offset and length of a vgroup attribute's data GRgetattdatainfo -- retrieves offset and length of an image attribute's data ANgetdatainfo -- retrieves offset and length of an annotation's data LOW-LEVEL ROUTINES ------------------ HDgetdatainfo -- retrieves offset(s) and length(s) of the data in a data element **********************************************************************/ #include "hdf_priv.h" #include "mfan.h" #include "vg_priv.h" #include "mfan_priv.h" #include "mfgr_priv.h" #ifdef H4_HAVE_LIBSZ /* we have the szip library */ #include "szlib.h" #endif /*----------------------------------------------------------------------------- NAME HDgetdatainfo -- Retrieves offset(s) and length(s) of the data in a data element. USAGE intn HDgetdatainfo(file_id, tag, ref, start_block, info_count, *offsetarray, *lengtharray) int32 file_id IN: file id uint16 tag IN: tag of the element uint16 ref IN: ref of element int32 *chk_coord IN: chunk's coordinates or NULL if not chunked uintn start_block IN: data block to start at, 0 base uintn info_count IN: number of info records int32 *offsetarray OUT: array to hold offsets int32 *lengtharray OUT: array to hold lengths RETURNS Number of data blocks if successful, or FAIL, otherwise. DESCRIPTION HDgetdatainfo will use low-level functions to get data information of element that is in chunk or linked-block storage. If the given tag/ref point to: - no data then the function will return 0 for number of data blocks, - actual data written then the function will return 1 for number of data blocks and its offset/length if they are requested, or - description record, which means this element is special, then the function will act appropriately depend upon the specialness + compression * if the compressed data is stored in one block, the function will return 1 and the offset/length if they are requested * if the compressed data is stored in linked-blocks, > read the linked-block special header info > call HLgetdatainfo to get data info of the blocks + chunking * call HMCgetdatainfo to get data info of the requested chunk + linked-block * read the linked-block special header info * call HLgetdatainfo to get data info of the blocks NOTES Aug 17, 2010: Tested with SDgetdatainfo and VSgetdatainfo -BMR Sep 7, 2010: Tested with GRgetdatainfo, but not linked-block yet -BMR Oct 5, 2010: Modified to handle compressed/linked-block element -BMR --------------------------------------------------------------------------*/ intn HDgetdatainfo(int32 file_id, uint16 tag, uint16 ref, int32 *chk_coord, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray) { filerec_t *file_rec; /* file record */ uint16 sp_tag; /* special tag */ uint16 comp_ref = 0; /* ref for compressed data or comp header */ uint16 dtag, dref; /* description record tag/ref */ int32 dlen = 0, doff = 0; /* offset/length of the description record */ uint8 lbuf[COMP_HEADER_LENGTH], *p = NULL; /* desc record buffer and a pointer to it */ atom_t data_id = FAIL; /* dd ID of existing element */ int32 length; /* uncomp data len to check if data had been written */ intn count = 0; /* num of data blocks returned by getdatainfo funcs */ uint16 spec_code = 0; /* special code: SPECIAL_LINKED, SPECIAL_COMP,... */ int32 comp_aid = -1; /* compressed element access id */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate array size */ if (info_count == 0 && offsetarray != NULL && lengtharray != NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Getting only offsets or lengths is not allowed */ if ((offsetarray != NULL && lengtharray == NULL) || (offsetarray == NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get access element from dataset's tag/ref */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { /* Get the info pointed to by this dd, which could point to data or description record */ if (HTPinquire(data_id, &dtag, &dref, &doff, &dlen) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Return 0 if no data had been written */ if (doff == INVALID_OFFSET && dlen == INVALID_LENGTH) { /* End access to the element */ if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); HGOTO_DONE(0); } /* If the element is not special, that means dataset's tag/ref specifies the actual data that was written to the dataset, get the offset and length of the data if they were requested */ if (HTPis_special(data_id) == FALSE) { /* Only one data block here, starting offset cannot be > 1 */ if (start_block > 1) HGOTO_ERROR(DFE_ARGS, FAIL); /* Offset and length are requested by caller */ if (offsetarray != NULL && lengtharray != NULL) { offsetarray[0] = doff; lengtharray[0] = dlen; } count = 1; } /* If the element is special, get the special info header and decode for special tag to detect compression/chunking/linked blocks */ else { if (HPseek(file_rec, doff) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_read(file_rec, lbuf, (int)2) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode the special tag */ p = &lbuf[0]; INT16DECODE(p, sp_tag); /* This is a compressed element */ if (sp_tag == SPECIAL_COMP) { /* Read compression info header */ if (HP_read(file_rec, lbuf, (int)COMP_HEADER_LENGTH) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode header to get data length */ p = &lbuf[0]; p = p + 2; /* skip 2byte header_version */ INT32DECODE(p, length); /* get _uncompressed_ data length */ /* No data written */ if (length == 0) { count = 0; } /* Data had been written, either in contiguous block or more special storage, in which case special code needs to be read */ else { /* Decode for the compression ref# */ UINT16DECODE(p, comp_ref); /* Get access to the compression element */ if ((comp_aid = HTPselect(file_rec, DFTAG_COMPRESSED, comp_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* If data had been written in one contiguous block */ if (HTPis_special(comp_aid) != TRUE) { /* Only one data block here, starting offset cannot be > 1*/ if (start_block > 1) HGOTO_ERROR(DFE_ARGS, FAIL); /* This element is not further special, only compressed, get its offset and length if they are requested */ if (offsetarray != NULL && lengtharray != NULL) { int32 off = 0, len = 0; off = Hoffset(file_id, DFTAG_COMPRESSED, comp_ref); if (off == FAIL) HGOTO_ERROR(DFE_BADOFFSET, FAIL); len = Hlength(file_id, DFTAG_COMPRESSED, comp_ref); if (len == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); offsetarray[0] = off; lengtharray[0] = len; } count = 1; } /* end if */ /* This element is further special, read in the special code to see what specialness is and process appropriately */ else { /* Get offset of the special header */ if (HTPinquire(comp_aid, NULL, NULL, &doff, NULL) == FAIL) { HTPendaccess(comp_aid); HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Get to and read the special code from the header */ if (HPseek(file_rec, doff) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_read(file_rec, lbuf, (int)2) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode special code */ p = &lbuf[0]; INT16DECODE(p, spec_code); /* The element has linked-blocks */ if (spec_code == SPECIAL_LINKED) { /* Read the rest of the linked-block info header */ if (HP_read(file_rec, lbuf, (int)14) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Pass the header info to the linked-block API to get the data info if they are requested or the info count only, otherwise */ p = &lbuf[0]; if (offsetarray != NULL && lengtharray != NULL) count = HLgetdatainfo(file_id, p, start_block, info_count, offsetarray, lengtharray); else /* get number of data blocks only */ count = HLgetdatainfo(file_id, p, start_block, 0, NULL, NULL); } /* this element is also stored in linked blocks */ } /* this element is further special */ /* Release the compression element */ if (HTPendaccess(comp_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* compressed data written */ } /* element is compressed */ /* This is a chunked element, hand the task over to the chunking layer. */ else if (sp_tag == SPECIAL_CHUNKED) { if (chk_coord != NULL) count = HMCgetdatainfo(file_id, tag, ref, chk_coord, start_block, info_count, offsetarray, lengtharray); else /* BMR: check to see what should be done here */ { fprintf(stderr, "\nERROR>>> Element with tag/ref %d/%d is a chunked element, the chunk's " "coordinates must be specified\n", tag, ref); HGOTO_ERROR(DFE_ARGS, FAIL); } } /* Unlimited dimension; extract the number of blocks and the ref # of the link table then hand over to linked block layer */ else if (sp_tag == SPECIAL_LINKED) { /* Read the linked-block info header */ if (HP_read(file_rec, lbuf, (int)14) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Pass the header info to the linked-block API to get the data info if they are requested or the info count only */ p = &lbuf[0]; if (offsetarray != NULL && lengtharray != NULL) count = HLgetdatainfo(file_id, p, start_block, info_count, offsetarray, lengtharray); else /* get data information from the linked blocks */ count = HLgetdatainfo(file_id, p, start_block, 0, NULL, NULL); } /* element is SPECIAL_LINKED */ } /* else, data element is special */ /* End access to the element */ if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if data_id != FAIL */ else /* HTPselect failed */ HGOTO_ERROR(DFE_CANTACCESS, FAIL); /* Return the number of data blocks */ ret_value = count; done: return ret_value; } /* HDgetdatainfo */ /*------------------------------------------------------ NAME VSgetdatainfo - Gets the offset/length of a vdata's data USAGE intn VSgetdatainfo(vsid, start_block, info_count, offsetarray, lengtharray) int32 vsid IN: vdata id uintn start_block IN: data block to start at, 0 base uintn info_count IN: number of blocks to be retrieved int32 *offsetarray OUT: array to hold offsets int32 *lengtharray OUT: array to hold lengths RETURNS The number of data blocks retrieved, if successful and FAIL, otherwise. DESCRIPTION This function uses the low-level function HDgetdatainfo to get the data info when the vdata is stored in linked-blocks. TODO - not tested with start_block and info_count NOTES Aug 17, 2010: Tested some in hdf/test/tdatainfo.c -BMR ----------------------------------------------------------*/ intn VSgetdatainfo(int32 vsid, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray) { vsinstance_t *vs_inst = NULL; VDATA *vs = NULL; accrec_t *access_rec; intn count; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate array size */ if (info_count == 0 && offsetarray != NULL && lengtharray != NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Getting only offsets or lengths is not allowed */ if ((offsetarray != NULL && lengtharray == NULL) || (offsetarray == NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check key is valid vdata */ if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get vdata instance */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); /* Get vdata info structure and check it */ vs = vs_inst->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Get access record of the vdata */ access_rec = HAatom_object(vs->aid); if (access_rec == (accrec_t *)NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If the vdata is empty, return 0 block */ if (vs->nvertices <= 0) HGOTO_DONE(0); /* If the vdata is stored in linked-blocks, let the low-level function handle it */ if (access_rec->special == SPECIAL_LINKED) { /* Application only wants the number of data blocks */ if (offsetarray == NULL && lengtharray == NULL) { count = HDgetdatainfo(vs->f, VSDATATAG, vs->oref, NULL, start_block, info_count, NULL, NULL); } /* Application only wants the offset and length of the blocks too */ else { count = HDgetdatainfo(vs->f, VSDATATAG, vs->oref, NULL, start_block, info_count, offsetarray, lengtharray); } if (count == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* The vdata is stored in contiguous block */ else { if (offsetarray != NULL && lengtharray != NULL) { int32 off = 0, len = 0; if ((off = Hoffset(vs->f, VSDATATAG, vs->oref)) == FAIL) HGOTO_ERROR(DFE_BADOFFSET, FAIL); if ((len = Hlength(vs->f, VSDATATAG, vs->oref)) == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); *offsetarray = off; *lengtharray = len; } count = 1; } /* Return the number of data blocks */ ret_value = count; done: return ret_value; } /* VSgetdatainfo */ /*----------------------------------------------------------------------------- NAME Vgetattdatainfo - Gets the offset/length of the data of a vgroup's attribute USAGE intn Vgetattdatainfo(vgid, attrindex, *offset, *length) int32 vgid IN: vgroup id intn attrindex IN: attribute index int32 *offset OUT: buffer for offset int32 *length OUT: buffer for length RETURNS The number of data blocks retrieved, which should be 1, if successful and FAIL, otherwise. DESCRIPTION There are two types of attributes for vgroups. One is the old-style that was created using methods other than the standard attribute API function Vsetattr, which was introduced after HDF Version 4.0 Release 2, July 19, 1996. Without the use of Vsetattr, an application could simulate an attribute for a vgroup by creating and writing a vdata of class _HDF_ATTRIBUTE and adding that vdata to the vgroup via these calls: vdata_ref = VHstoredatam(file_id, ATTR_FIELD_NAME, values, size, type, attr_name, _HDF_ATTRIBUTE, order); ret_value = Vaddtagref (vgroup_id, DFTAG_VH, vdata2_ref); While both types of attributes are stored as vdatas, the vdatas of the new-style attributes are saved in a list of attribute tags/refs of the vgroup, and the vdatas of the old-style attributes are saved as elements of the vgroup. Because of the different storages, the new attribute functions would miss the old-style attributes. Two fields are added to the internal structure VGROUP for holding the number of old-style attributes and their ref#s. These fields are set by Vnoldattrs when old-style attributes exist in the file. When a vgroup has both type of attributes, the two list will be combined with the old-style attributes preceding the new ones. The attribute indices will be adjusted accordingly. This function uses the API function VSgetdatainfo to get the data info of the attribute's data. -BMR 2011/3/19 ----------------------------------------------------------*/ intn Vgetattdatainfo(int32 vgid, intn attrindex, int32 *offset, int32 *length) { VGROUP *vg; vg_attr_t *vg_alist; vginstance_t *vg_inst; int32 attr_vsid; intn adjusted_index; intn status; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Validate Vgroup ID */ if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vg's index in vgtab */ if (NULL == (vg_inst = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); if (NULL == (vg = vg_inst->vg)) HGOTO_ERROR(DFE_NOVS, FAIL); /* Validate arguments */ if (attrindex < 0) HGOTO_ERROR(DFE_BADATTR, FAIL); /* invalid attribute index given */ adjusted_index = attrindex; if (adjusted_index < vg->noldattrs) /* index of old-style attribute */ vg_alist = vg->old_alist; /* use old-attr list */ else if (adjusted_index >= vg->noldattrs && adjusted_index < (vg->nattrs + vg->noldattrs)) /* index of new-style attributes */ { /* Adjust the index to accommodate for the old-style attributes preceding the new-style attribute list */ adjusted_index = adjusted_index - vg->noldattrs; vg_alist = vg->alist; /* use new-attr list */ } else /* not that many attrs */ HGOTO_ERROR(DFE_BADATTR, FAIL); if (vg_alist == NULL) /* Bad attr list */ HGOTO_ERROR(DFE_BADATTR, FAIL); /* Get vdata holding the attribute */ if (FAIL == (attr_vsid = VSattach(vg->f, (int32)vg_alist[adjusted_index].aref, "r"))) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* Get offset and length of attribute's data. Note that start_block is 0 and info_count is 1 because attribute's data is only stored in 1 block */ status = VSgetdatainfo(attr_vsid, 0, 1, offset, length); if (status == FAIL) HGOTO_ERROR(DFE_GENAPP, FAIL); /* Close vdata */ if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); /* Return the number of data blocks, which should be 1 */ ret_value = status; done: return ret_value; } /* Vgetattdatainfo */ /*------------------------------------------------------ NAME VSgetattdatainfo - Gets the offset/length of the data of a vdata's or vdata field's attribute USAGE intn VSgetattdatainfo(vsid, findex, attrindex, *offset, *length) int32 vsid IN: vdata id int32 findex IN: vdata's field index or _HDF_VDATA intn attrindex IN: attribute index int32 *offset OUT: buffer for offset int32 *length OUT: buffer for length RETURNS The number of data blocks retrieved, which should be 1, if successful and FAIL, otherwise. DESCRIPTION VSgetattdatainfo retrieves the offset and length of the data that belongs to an attribute. If findex is _HDF_VDATA (or -1), then the attribute is associated with the vdata vsid. If findex is an index of the vdata field, then the attribute is one that is associated with the vdata field. The parameter attrindex specifies the attribute's index within the vdata's or the field's attribute list. Thus, its valid value must be within [0-nattrs of the associated list]. VSgetattdatainfo uses VSgetdatainfo once it locates the vdata that stores the attribute. -BMR 2011/3/19 ----------------------------------------------------------*/ intn VSgetattdatainfo(int32 vsid, int32 findex, intn attrindex, int32 *offset, int32 *length) { VDATA *vs; vs_attr_t *vs_alist; vsinstance_t *vs_inst; int32 attr_vsid; intn nattrs, idx, a_index, found; intn status; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex >= vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); nattrs = vs->nattrs; /* No attrs */ if (nattrs == 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Index must be positive and less than the number of attributes */ if (attrindex < 0 || attrindex >= nattrs) HGOTO_ERROR(DFE_ARGS, FAIL); vs_alist = vs->alist; /* Bad attr list */ if (vs_alist == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); found = 0; a_index = -1; for (idx = 0; idx < nattrs && found == 0; idx++) { if (vs_alist->findex == findex) { a_index++; if (a_index == attrindex) found = 1; } if (!found) vs_alist++; } /* If this happened, it would have been detected by the check for range of attrindex above already, but check it anyway */ if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); /* Attribute is found. Get access to the vdata that stores the attribute's data, retrieve the offset and length of the data, then close access. */ /* Get vdata */ if (FAIL == (attr_vsid = VSattach(vs->f, (int32)vs_alist->aref, "r"))) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* Get offset and length of attribute's data. Note that start_block is 0 and info_count is 1 because attribute's data is only stored in 1 block */ status = VSgetdatainfo(attr_vsid, 0, 1, offset, length); if (status == FAIL) HGOTO_ERROR(DFE_GENAPP, FAIL); /* Close vdata */ if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); /* Return the number of data blocks, which should be 1 */ ret_value = status; done: return ret_value; } /* VSgetattdatainfo */ /*------------------------------------------------------------ NAME GRgetattdatainfo - Gets the offset/length of the data of a GR file's or an image's attribute USAGE intn GRgetattdatainfo(id, attrindex, offset, length) int32 id IN: either GR ID or RI ID int32 attrindex IN: index of the attribute being inquired int32 *offset OUT: buffer for offset int32 *length OUT: buffer for length RETURNS The number of data blocks retrieved, which should be 1, if successful and FAIL, otherwise. DESCRIPTION GRgetattdatainfo retrieves the location and size of the attribute's data and its length. MODIFICATION Apr 03, 2011: Revised to remove the parameter attrname because, for hmap project, it makes sense to just provide the attribute index. -BMR --------------------------------------------------------------*/ intn GRgetattdatainfo(int32 id, int32 attrindex, int32 *offset, int32 *length) { int32 hdf_file_id; /* file id */ int32 attr_vsid; /* id of vdata that stores the attribute */ group_t id_group = BADGROUP; /* temporary group of id */ gr_info_t *gr_ptr; /* ptr to the GR information for gr id */ ri_info_t *ri_ptr; /* ptr to the image information for ri id */ at_info_t *at_ptr = NULL; /* ptr to the attribute information */ void **aentry; /* temp. ptr to the image found */ TBBT_TREE *search_tree; /* attribute tree to search through */ int found = FALSE; /* TRUE when the searched attribute is found */ intn status = 0; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate index */ if (attrindex < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Validate ID */ id_group = HAatom_group(id); if (id_group != RIIDGROUP && id_group != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get attribute info and validate index */ /* When file ID is given, check index against file's attribute count */ if (id_group == GRIDGROUP) { /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); /* Check index against file's attribute count */ if (attrindex >= gr_ptr->gattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = gr_ptr->gattree; hdf_file_id = gr_ptr->hdf_file_id; } /* end if */ /* When raster image ID is given, check index against image's attr count */ else if (id_group == RIIDGROUP) { /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* Check index against image's attribute count */ if (attrindex >= ri_ptr->lattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = ri_ptr->lattree; hdf_file_id = ri_ptr->gr_ptr->hdf_file_id; } /* end if */ else HGOTO_ERROR(DFE_ARGS, FAIL); /* Search for an attribute with the same index */ aentry = (void **)tbbtfirst(search_tree->root); found = FALSE; while (!found && (aentry != NULL)) { at_ptr = (at_info_t *)*aentry; if (at_ptr == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* If index is found, set flag */ if (at_ptr->index == attrindex) found = TRUE; /* Not found, go to the next entry */ if (!found) aentry = (void **)tbbtnext((TBBT_NODE *)aentry); } /* end while */ /* If the attribute is found, get offset/length of its data */ if (found) { /* Get access to the vdata that stores the attribute */ attr_vsid = VSattach(hdf_file_id, (int32)at_ptr->ref, "r"); if (attr_vsid == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* Get offset and length of attribute's data. Note that start_block is 0 and info_count is 1 because attribute's data is only stored in 1 block */ status = VSgetdatainfo(attr_vsid, 0, 1, offset, length); if (status == FAIL) HGOTO_ERROR(DFE_GENAPP, FAIL); if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } ret_value = status; /* should be 1 */ done: return ret_value; } /* GRgetattdatainfo */ /*--------------------------------------------------------------- NAME GRgetdatainfo - Gets the offsets/lengths of the data of an image USAGE intn GRgetdatainfo(riid, start_block, info_count, offsetarray, lengtharray) int32 riid IN: raster image ID uintn start_block IN: start retrieving data at uintn info_count IN: number of data blocks to retrieve int32 *offsetarray OUT: buffer for offset(s) int32 *lengtharray OUT: buffer for length(s) RETURNS The number of data blocks retrieved, if successful and FAIL, otherwise. DESCRIPTION This function uses the low-level function HDgetdatainfo to get the data info of an image. TODO - not tested with linked-block element yet - need more documentation ----------------------------------------------------------------*/ intn GRgetdatainfo(int32 riid, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray) { ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 hdf_file_id; /* short cut for file id */ int32 length = 0; uintn count; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate array size */ if (info_count == 0 && (offsetarray != NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Getting only offsets or lengths is not allowed */ if ((offsetarray != NULL && lengtharray == NULL) || (offsetarray == NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check the validity of the ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate RI's object in hash table */ ri_ptr = (ri_info_t *)HAatom_object(riid); if (NULL == ri_ptr) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); hdf_file_id = ri_ptr->gr_ptr->hdf_file_id; /* alias for file id */ /* Check for no data in the image */ /* If the image has no tag/ref pair assigned to it yet, return 0 for info count */ if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_tag == DFREF_WILDCARD || ri_ptr->img_ref == DFREF_WILDCARD) { if ((offsetarray != NULL && lengtharray != NULL)) *offsetarray = *lengtharray = 0; HGOTO_DONE(0); } /* If the image already had a tag/ref pair, make sure it has actual data, if not, return 0 for info count */ else { length = Hlength(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref); if (length == FAIL) { if ((offsetarray != NULL && lengtharray != NULL)) *offsetarray = *lengtharray = 0; HGOTO_DONE(0); } /* If both arrays are NULL, get the number of data blocks and return */ if ((offsetarray == NULL && lengtharray == NULL)) { count = HDgetdatainfo(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, NULL, start_block, 0, NULL, NULL); if (count == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Application requests offsets/lengths */ else { count = HDgetdatainfo(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, NULL, start_block, info_count, offsetarray, lengtharray); if (count == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* end else */ ret_value = count; done: return ret_value; } /* GRgetdatainfo */ /*--------------------------------------------------------------- NAME GRgetpalinfo - Gets the palette data descriptors (DDs) in the file (i.e., palette tags, refs, offsets, and lengths) USAGE intn GRgetpalinfo(gr_id, pal_count, palinfo_array) int32 gr_id IN: GR interface ID uintn pal_count IN: number of palette DDs to get hdf_ddinfo_t *palinfo_array OUT: array of palette DDs RETURNS The number of palette DDs in the file or the actual number of palette DDs retrieved, if successful, and FAIL, otherwise. DESCRIPTION If the caller only requests the number of palette tags in the file, i.e., when palinfo_array is NULL and pal_count is 0, we will simply return the number of palette tags, including both DFTAG_IP8 and DFTAG_LUT, without further processing. Otherwise, the function will search the file for all tags DFTAG_IP8 and DFTAG_LUT, then retrieve the palette data information into the provided array of structures. -BMR 2012/6/19 ----------------------------------------------------------------*/ intn GRgetpalinfo(int32 gr_id, uintn pal_count, hdf_ddinfo_t *palinfo_array) { gr_info_t *gr_ptr; int32 file_id; int32 aid = FAIL; intn idx; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* check the validity of the GR ID */ if (HAatom_group(gr_id) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(gr_id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); file_id = gr_ptr->hdf_file_id; /* alias of the file id */ /* Validate array size. Fail when pal_count is a pos number but the array is NULL, or when pal_count is a neg number */ if ((pal_count > 0 && palinfo_array == NULL) || pal_count < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* If only the number of palette tags is interested, return that */ if (pal_count == 0 && palinfo_array == NULL) { int32 n_IP8s = 0, n_LUTs = 0; n_IP8s = Hnumber(file_id, DFTAG_IP8); n_LUTs = Hnumber(file_id, DFTAG_LUT); if (n_IP8s == FAIL || n_LUTs == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else return n_IP8s + n_LUTs; } /* Application requests data info of palettes. Start checking tags in the file and when a palette tag is encountered, retrieve its DD. The process continues until no more tags/refs in the file or the maximum size of the provided array is reached */ idx = 0; ret_value = aid = Hstartread(file_id, DFTAG_WILDCARD, DFREF_WILDCARD); while (ret_value != FAIL && idx < pal_count) { uint16 tag; /* Get tag of this element */ ret_value = Hinquire(aid, NULL, &tag, NULL, NULL, NULL, NULL, NULL, NULL); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (tag == DFTAG_IP8 || tag == DFTAG_LUT) { /* a palette tag is found */ /* Get the palette's data info */ ret_value = Hinquire(aid, NULL, &palinfo_array[idx].tag, &palinfo_array[idx].ref, &palinfo_array[idx].length, &palinfo_array[idx].offset, NULL, NULL, NULL); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Move to next element in the array */ idx++; } /* a palette tag is found */ /* Get next element */ ret_value = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); } /* get data info of palettes */ /* Close access id */ if (aid != FAIL) if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = idx; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (aid != FAIL) Hendaccess(aid); } return ret_value; } /* GRgetpalinfo */ /*-------------------------------------------------------------------------- NAME ANgetdatainfo -- Gets the offset(s) and length(s) locating the data of the annotation. USAGE int32 ANgetdatainfo(ann_id, *offset, *length) int32 ann_id IN: annotation ID int32 *offset OUT: buffer for offset int32 *length OUT: buffer for length RETURNS SUCCEED/FAIL DESCRIPTION Annotations have contiguous data, so ANgetdatainfo only needs to use Hoffset/Hlength to get the data info of an annotation. NOTES Aug 25, 2010: Tested in tdatainfo.c/test_annotation -BMR --------------------------------------------------------------------------*/ intn ANgetdatainfo(int32 ann_id, /* IN: annotation id */ int32 *offset, /* OUT: buffer for offset */ int32 *length) /* OUT: buffer for length */ { filerec_t *file_rec = NULL; /* file record pointer */ ANnode *ann_node = NULL; int32 file_id = FAIL; int32 type; int32 ann_key; int newflag = 0; uint16 ann_tag; uint16 ann_ref; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get annotation record */ ann_node = HAatom_object(ann_id); if (NULL == ann_node) HGOTO_ERROR(DFE_ARGS, FAIL); /* Convert file_id to file rec and check for validity */ file_id = ann_node->file_id; file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Get annotation key, type, and ref# */ ann_key = ann_node->ann_key; type = AN_KEY2TYPE(ann_key); ann_ref = AN_KEY2REF(ann_key); /* Set type tag */ switch ((int32)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } #ifdef NEED_ELEMENT_TAG_REF /* Keep these here just in case we end up need the object's tag/ref -BMR */ /* Get annotation entry so that we can get object's tag/ref later */ if ((entry = tbbtdfind(file_rec->an_tree[type], &ann_key, NULL)) == NULL) HE_REPORT_GOTO("failed to retrieve annotation of 'type' tree", FAIL); ann_entry = (ANentry *)entry->data; elem_tag = ann_entry->elmtag; elem_ref = ann_entry->elmref; #endif /* If annotation exists, try to get offset/length */ newflag = ann_node->new_ann; if (newflag == 0) { int32 off = 0, len = 0; if (offset != NULL && length != NULL) { off = Hoffset(file_id, ann_tag, ann_ref); if (off == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); len = Hlength(file_id, ann_tag, ann_ref); if (len == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); *offset = off; *length = len; } /* Because for Data label/description, the object's tag/ref were written to the file before the annotation data, 4 bytes must be taken into account for them */ if (ann_tag == DFTAG_DIL || ann_tag == DFTAG_DIA) { *offset = *offset + 4; *length = *length - 4; } } done: return ret_value; } /* ANgetdatainfo */ hdf4-hdf4.3.1/hdf/src/hdatainfo.h000066400000000000000000000026461503061704500164750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_HDATAINFO_H #define H4_HDATAINFO_H #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * * hdatainfo.h * * The public structure and APIs in this file were moved into hproto.h in * version 4.3.0. Applications don't need to and should no longer include this * header file. * ******************************************************************************/ #ifdef __cplusplus } #endif #endif /* H4_HDATAINFO */ hdf4-hdf4.3.1/hdf/src/hdf.h000066400000000000000000000170111503061704500152710ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_HDF_H #define H4_HDF_H /* NOTE: This header is not protected by include guards, so don't include * it outside of hdf.h */ #include "h4config.h" #include /* Library limits */ #include "hlimits.h" /*------------------------------------------------------------------------- * Pre-C99 platform-independent type scheme * * These types were added long before C99 was widely supported (or even * existed). They were formerly mapped to native C types on a machine-specific * basis, but they are now mapped to their equivalent C99 types. *-------------------------------------------------------------------------*/ /* Floating-point types */ typedef float float32; typedef double float64; /* Characters */ typedef char char8; typedef unsigned char uchar8; typedef char *_fcd; #define _fcdtocp(desc) (desc) /* Fixed-width integer types */ typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typedef uint16_t uint16; typedef int32_t int32; typedef uint32_t uint32; /* Native integer types */ typedef int intn; typedef unsigned int uintn; /* These are no longer used in the library, but other software uses them */ #ifndef VOID /* winnt.h defines VOID to `void` via a macro */ typedef void VOID; #endif typedef void *VOIDP; /* size of INTEGERs in Fortran compiler */ typedef int intf; /* Internal DF structure */ typedef struct { uint16 tag; /* tag of element */ uint16 ref; /* ref of element */ } DFdi; /* For annotations */ /* enumerated types of the various annotation types */ typedef enum { AN_UNDEF = -1, AN_DATA_LABEL = 0, /* Data label */ AN_DATA_DESC, /* Data description */ AN_FILE_LABEL, /* File label */ AN_FILE_DESC /* File description */ } ann_type; /* internal file access codes */ #define DFACC_READ 1 #define DFACC_WRITE 2 #define DFACC_CREATE 4 #define DFACC_ALL 7 #define DFACC_RDONLY 1 #define DFACC_RDWR 3 #define DFACC_CLOBBER 4 /* New file access codes (for Hstartaccess only, currently) */ #define DFACC_BUFFER 8 /* buffer the access to this AID */ #define DFACC_APPENDABLE 0x10 /* make this AID appendable */ #define DFACC_CURRENT 0x20 /* start looking for a tag/ref from the current */ /* location in the DD list (useful for continued */ /* searching ala findfirst/findnext) */ /* External Element File access mode */ /* #define DFACC_CREATE 4 is for creating new external element file */ #define DFACC_OLD 1 /* for accessing existing ext. element file */ /* The magic cookie for Hcache to cache all files */ #define CACHE_ALL_FILES (-2) /* File access modes */ /* 001--007 for different serial modes */ /* 011--017 for different parallel modes */ #define DFACC_DEFAULT 000 #define DFACC_SERIAL 001 #define DFACC_PARALLEL 011 /* used by Hnextread to determine where to start searching for the next tag/ref to read */ #define DF_START 0 #define DF_CURRENT 1 #define DF_END 2 /* Used by Hfind to determine the direction to search for tag/ref's in the */ /* file. */ #define DF_FORWARD 1 #define DF_BACKWARD 2 /* return code - since some unix/c routines use 0 and -1 as their return code, and some assumption had been made in the code about that, it is important to keep these constants the same values. For explicitly boolean functions, use TRUE and FALSE */ #define SUCCEED 0 #define FAIL (-1) /* boolean values, reminder: NEVER compare with numeric values */ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE (!FALSE) #endif /* macros */ #define STREQ(s, t) (strcmp((s), (t)) == 0) #define NSTREQ(s, t, n) (strncmp((s), (t), (n)) == 0) /* Include the Number-type definitions */ #include "hntdefs.h" /* Include the Tag definitions */ #include "htags.h" /* * interlacing supported by the vset. */ #define FULL_INTERLACE 0 #define NO_INTERLACE 1 /* Some information about a number type - character strings to be displayed */ typedef struct hdf_ntinfo_t { char type_name[9]; /* longest possible string "float128" */ char byte_order[13]; /* "bigEndian" or "littleEndian" */ } hdf_ntinfo_t; /* type for File ID to send to Hlevel from Vxx interface */ typedef int32 HFILEID; typedef intn (*hdf_termfunc_t)(void); /* termination function typedef */ /* .................................................................. */ /* API adapter header (defines HDFPUBLIC, etc.) */ #include "H4api_adpt.h" /* Publicly accessible functions declarations. This includes all the * functions that are used by application programs. */ #include "hbitio.h" #include "hcomp.h" #include "herr.h" #include "hproto.h" #include "vg.h" /* Vgroup/Vdata header */ #include "mfgr.h" /* GR header */ /* these may eventually evolve into real-life functions but not yet */ #define HDFopen(f, a, d) Hopen((f), (a), (d)) #define HDFclose(f) Hclose((f)) #define Vstart(f) Vinitialize((f)) #define Vend(f) Vfinish((f)) /* Misc. macros for backward compatibility */ #define HDgettagname(tag) HDgettagdesc(tag) /* This is also defined in fmpio.h */ #define MP_PAGEALL 0x01 /* page the whole file i.e. no limit on 'maxcache'*/ /************************************************************************** * Memory and string functions **************************************************************************/ /* DO NOT USE THESE MACROS */ /* These will be removed from a future version of the library and are * only kept here to avoid breakage in programs that unwisely used * them. */ #define HDmalloc(s) malloc(s) #define HDcalloc(a, b) calloc(a, b) #define HDfree(p) free(p) #define HDrealloc(p, s) realloc(p, s) /* Macro to free space and clear pointer to NULL */ #define HDfreenclear(p) \ { \ free(p); \ (p) = NULL; \ } #define HDstrcat(s1, s2) (strcat((s1), (s2))) #define HDstrcmp(s, t) (strcmp((s), (t))) #define HDstrcpy(s, d) (strcpy((s), (d))) #define HDstrlen(s) (strlen((const char *)(s))) #define HDstrncmp(s1, s2, n) (strncmp((s1), (s2), (n))) #define HDstrncpy(s1, s2, n) (strncpy((s1), (s2), (n))) #define HDstrchr(s, c) (strchr((s), (c))) #define HDstrrchr(s, c) (strrchr((s), (c))) #define HDstrtol(s, e, b) (strtol((s), (e), (b))) #endif /* H4_HDF_H */ hdf4-hdf4.3.1/hdf/src/hdf.inc000066400000000000000000000416271503061704500156250ustar00rootroot00000000000000C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C* Copyright by The HDF Group. * C* Copyright by the Board of Trustees of the University of Illinois. * C* All rights reserved. * C* * C* This file is part of HDF. The full HDF copyright notice, including * C* terms governing use, modification, and redistribution, is contained in * C* the COPYING file, which can be found at the root of the source code * C* distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C* If you do not have access to either file, you may request a copy from * C* help@hdfgroup.org. * C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C *----------------------------------------------------------------------------- C * File: hdf.inc C * Purpose: Fortran header file for HDF routines C * Contents: C * Tag definitions C * Error return codes C * Logical constants C * Remarks: This file can be included with Fortran user programs. As a C * general rule, don't use DFNT constants that don't include a C * number in their name. E.g., don't use DFNT_FLOAT, use C * DFNT_FLOAT32 or DFNT_FLOAT64. The DFNT constants that don't C * include numbers are for backward compatibility only. Also, C * there are no current plans to support 128-bit number types. C * For more information about constants in this file, see the C * equivalent constant declarations in the C include file 'hdf.h' C *------------------------------------------------------------------------ C Error Return Codes integer DFE_NOERROR, DFE_NONE, DFE_FNF integer DFE_DENIED, DFE_ALROPEN, DFE_TOOMANY integer DFE_BADNAME, DFE_BADACC, DFE_BADOPEN integer DFE_NOTOPEN, DFE_CANTCLOSE, DFE_DFNULL integer DFE_ILLTYPE, DFE_UNSUPPORTED, DFE_BADDDLIST integer DFE_NOTDFFILE, DFE_SEEDTWICE, DFE_NOSPACE integer DFE_NOSUCHTAG, DFE_READERROR parameter(DFE_NOERROR = 0) parameter(DFE_NONE = 0) parameter(DFE_FNF = -1) parameter(DFE_DENIED = -2) parameter(DFE_ALROPEN = -3) parameter(DFE_TOOMANY = -4) parameter(DFE_BADNAME = -5) parameter(DFE_BADACC = -6) parameter(DFE_BADOPEN = -7) parameter(DFE_NOTOPEN = -8) parameter(DFE_CANTCLOSE = -9) parameter(DFE_DFNULL = -10) parameter(DFE_ILLTYPE = -11) parameter(DFE_UNSUPPORTED = -12) parameter(DFE_BADDDLIST = -13) parameter(DFE_NOTDFFILE = -14) parameter(DFE_SEEDTWICE = -15) parameter(DFE_NOSPACE = -16) parameter(DFE_NOSUCHTAG = -17) parameter(DFE_READERROR = -18) integer DFE_WRITEERROR, DFE_SEEKERROR, DFE_NOFREEDD integer DFE_BADTAG, DFE_BADREF, DFE_RDONLY integer DFE_BADCALL, DFE_BADPTR, DFE_BADLEN integer DFE_BADSEEK, DFE_NOMATCH, DFE_NOTINSET integer DFE_BADDIM, DFE_BADOFFSET, DFE_BADSCHEME integer DFE_NODIM, DFE_NOTENOUGH, DFE_NOVALS integer DFE_CORRUPT, DFE_BADFP parameter(DFE_WRITEERROR = -19) parameter(DFE_SEEKERROR = -20) parameter(DFE_NOFREEDD = -21) parameter(DFE_BADTAG = -22) parameter(DFE_BADREF = -23) parameter(DFE_RDONLY = -24) parameter(DFE_BADCALL = -25) parameter(DFE_BADPTR = -26) parameter(DFE_BADLEN = -27) parameter(DFE_BADSEEK = -28) parameter(DFE_NOMATCH = -29) parameter(DFE_NOTINSET = -30) parameter(DFE_BADDIM = -31) parameter(DFE_BADOFFSET = -32) parameter(DFE_BADSCHEME = -33) parameter(DFE_NODIM = -34) parameter(DFE_NOTENOUGH = -35) parameter(DFE_NOVALS = -36) parameter(DFE_CORRUPT = -37) parameter(DFE_BADFP = -38) integer DFE_NOREF, DFE_BADDATATYPE, DFE_BADMCTYPE integer DFE_BADNUMTYPE, DFE_BADORDER, DFE_ARGS integer DFE_INTERNAL, DFE_DUPDD, DFE_CANTMOD integer DFE_RANGE, DFE_BADTABLE, DFE_BADSDG integer DFE_BADNDG, DFE_BADFIELDS, DFE_NORESET integer DFE_NOVS, DFE_VGSIZE, DFE_DIFFFILES integer DFE_VTAB, DFE_BADAID parameter(DFE_NOREF = -39) parameter(DFE_BADDATATYPE = -40) parameter(DFE_BADMCTYPE = -41) parameter(DFE_BADNUMTYPE = -42) parameter(DFE_BADORDER = -43) parameter(DFE_ARGS = -44) parameter(DFE_INTERNAL = -45) parameter(DFE_DUPDD = -46) parameter(DFE_CANTMOD = -47) parameter(DFE_RANGE = -48) parameter(DFE_BADTABLE = -49) parameter(DFE_BADSDG = -50) parameter(DFE_BADNDG = -51) parameter(DFE_BADFIELDS = -52) parameter(DFE_NORESET = -53) parameter(DFE_NOVS = -54) parameter(DFE_VGSIZE = -55) parameter(DFE_DIFFFILES = -56) parameter(DFE_VTAB = -57) parameter(DFE_BADAID = -58) integer DFE_OPENAID, DFE_BADCONV, DFE_GENAPP, DFE_CANTFLUSH integer DFE_BADTYPE, DFE_SYMSIZE, DFE_BADATTACH integer DFE_CANTDETACH parameter(DFE_OPENAID = -59) parameter(DFE_BADCONV = -60) parameter(DFE_GENAPP = -61) parameter(DFE_CANTFLUSH = -62) parameter(DFE_BADTYPE = -63) parameter(DFE_SYMSIZE = -64) parameter(DFE_BADATTACH = -65) parameter(DFE_CANTDETACH = -66) C internal file access codes integer DFACC_READ, DFACC_WRITE, DFACC_CREATE, DFACC_ALL integer DFACC_RDONLY, DFACC_RDWR, DFACC_CLOBBER parameter(DFACC_READ = 1) parameter(DFACC_WRITE = 2) parameter(DFACC_CREATE = 4) parameter(DFACC_ALL = 7) parameter(DFACC_RDONLY = 1) parameter(DFACC_RDWR = 3) parameter(DFACC_CLOBBER = 4) C Access types for SDsetaccesstype integer DFACC_DEFAULT, DFACC_SERIAL, DFACC_PARALLEL parameter(DFACC_DEFAULT = 0) parameter(DFACC_SERIAL = 1) parameter(DFACC_PARALLEL = 9) C Constants for DFSDsetorder integer DFO_FORTRAN, DFO_C parameter(DFO_FORTRAN = 1) parameter(DFO_C = 2) C Definitions of storage convention integer DFNTF_IEEE, DFNTF_VAX, DFNTF_CRAY, DFNTF_PC integer DFNTF_CONVEX, DFNTF_VP parameter(DFNTF_IEEE = 1) parameter(DFNTF_VAX = 2) parameter(DFNTF_CRAY = 3) parameter(DFNTF_PC = 4) parameter(DFNTF_CONVEX = 5) parameter(DFNTF_VP = 6) C Masks for types integer DFNT_HDF, DFNT_NATIVE, DFNT_CUSTOM, DFNT_LITEND parameter(DFNT_HDF = 0) parameter(DFNT_NATIVE = 4096) parameter(DFNT_CUSTOM = 8192) parameter(DFNT_LITEND = 16384) C Number type info codes integer DFNT_NONE, DFNT_QUERY, DFNT_VERSION parameter(DFNT_NONE = 0) parameter(DFNT_QUERY = 0) parameter(DFNT_VERSION = 1) integer DFNT_FLOAT32, DFNT_FLOAT, DFNT_FLOAT64 integer DFNT_DOUBLE, DFNT_FLOAT128 parameter(DFNT_FLOAT32 = 5) parameter(DFNT_FLOAT = 5) parameter(DFNT_FLOAT64 = 6) parameter(DFNT_DOUBLE = 6) parameter(DFNT_FLOAT128 = 7) integer DFNT_INT8, DFNT_UINT8 integer DFNT_INT16, DFNT_UINT16 integer DFNT_INT32, DFNT_UINT32 integer DFNT_INT64, DFNT_UINT64 integer DFNT_INT128,DFNT_UINT128 parameter(DFNT_INT8 = 20) parameter(DFNT_UINT8 = 21) parameter(DFNT_INT16 = 22) parameter(DFNT_UINT16 = 23) parameter(DFNT_INT32 = 24) parameter(DFNT_UINT32 = 25) parameter(DFNT_INT64 = 26) parameter(DFNT_UINT64 = 27) parameter(DFNT_INT128 = 28) parameter(DFNT_UINT128 = 29) integer DFNT_UCHAR8, DFNT_UCHAR, DFNT_CHAR8 integer DFNT_CHAR, DFNT_CHAR16, DFNT_UCHAR16 parameter(DFNT_UCHAR8 = 3) parameter(DFNT_UCHAR = 3) parameter(DFNT_CHAR8 = 4) parameter(DFNT_CHAR = 4) parameter(DFNT_CHAR16 = 42) parameter(DFNT_UCHAR16 = 43) integer DFNT_NFLOAT32, DFNT_NFLOAT, DFNT_NFLOAT64 integer DFNT_NDOUBLE, DFNT_NFLOAT128 parameter(DFNT_NFLOAT32 = 4101) parameter(DFNT_NFLOAT = 4101) parameter(DFNT_NFLOAT64 = 4102) parameter(DFNT_NDOUBLE = 4102) parameter(DFNT_NFLOAT128 = 4103) integer DFNT_NINT8, DFNT_NUINT8 integer DFNT_NINT16, DFNT_NUINT16 integer DFNT_NINT32, DFNT_NUINT32 integer DFNT_NINT64, DFNT_NUINT64 integer DFNT_NINT128,DFNT_NUINT128 parameter(DFNT_NINT8 = 4116) parameter(DFNT_NUINT8 = 4117) parameter(DFNT_NINT16 = 4118) parameter(DFNT_NUINT16 = 4119) parameter(DFNT_NINT32 = 4120) parameter(DFNT_NUINT32 = 4121) parameter(DFNT_NINT64 = 4122) parameter(DFNT_NUINT64 = 4123) parameter(DFNT_NINT128 = 4124) parameter(DFNT_NUINT128 = 4125) integer DFNT_NUCHAR8, DFNT_NUCHAR, DFNT_NCHAR8 integer DFNT_NCHAR, DFNT_NCHAR16, DFNT_NUCHAR16 parameter(DFNT_NUCHAR8 = 4099) parameter(DFNT_NUCHAR = 4099) parameter(DFNT_NCHAR8 = 4100) parameter(DFNT_NCHAR = 4100) parameter(DFNT_NCHAR16 = 4138) parameter(DFNT_NUCHAR16 = 4139) integer DFNT_LFLOAT32, DFNT_LFLOAT, DFNT_LFLOAT64 integer DFNT_LDOUBLE, DFNT_LFLOAT128 parameter(DFNT_LFLOAT32 = 16389) parameter(DFNT_LFLOAT = 16389) parameter(DFNT_LFLOAT64 = 16390) parameter(DFNT_LDOUBLE = 16390) parameter(DFNT_LFLOAT128 = 16391) integer DFNT_LINT8,DFNT_LUINT8,DFNT_LINT16,DFNT_LUINT16 integer DFNT_LINT32,DFNT_LUINT32,DFNT_LINT64,DFNT_LUINT64 integer DFNT_LINT128,DFNT_LUINT128 parameter(DFNT_LINT8 = 16404) parameter(DFNT_LUINT8 = 16405) parameter(DFNT_LINT16 = 16406) parameter(DFNT_LUINT16 = 16407) parameter(DFNT_LINT32 = 16408) parameter(DFNT_LUINT32 = 16409) parameter(DFNT_LINT64 = 16410) parameter(DFNT_LUINT64 = 16411) parameter(DFNT_LINT128 = 16412) parameter(DFNT_LUINT128 = 16413) integer DFNT_LUCHAR8, DFNT_LUCHAR, DFNT_LCHAR8 integer DFNT_LCHAR, DFNT_LCHAR16, DFNT_LUCHAR16 parameter(DFNT_LUCHAR8 = 16387) parameter(DFNT_LUCHAR = 16387) parameter(DFNT_LCHAR8 = 16388) parameter(DFNT_LCHAR = 16388) parameter(DFNT_LCHAR16 = 16426) parameter(DFNT_LUCHAR16 = 16427) C tags and refs integer DFREF_WILDCARD, DFTAG_WILDCARD, DFTAG_NULL integer DFTAG_LINKED, DFTAG_VERSION, DFTAG_COMPRESSED parameter(DFREF_WILDCARD = 0, DFTAG_WILDCARD = 0) parameter(DFTAG_NULL = 1, DFTAG_LINKED = 20) parameter(DFTAG_VERSION = 30,DFTAG_COMPRESSED = 40) C utility set integer DFTAG_FID, DFTAG_FD, DFTAG_TID, DFTAG_TD integer DFTAG_DIL, DFTAG_DIA, DFTAG_NT, DFTAG_MT parameter(DFTAG_FID = 100, DFTAG_FD = 101) parameter(DFTAG_TID = 102, DFTAG_TD = 103) parameter(DFTAG_DIL = 104, DFTAG_DIA = 105) parameter(DFTAG_NT = 106, DFTAG_MT = 107) C raster-8 set integer DFTAG_ID8, DFTAG_IP8, DFTAG_RI8 integer DFTAG_CI8, DFTAG_II8 parameter(DFTAG_ID8 = 200, DFTAG_IP8 = 201) parameter(DFTAG_RI8 = 202, DFTAG_CI8 = 203) parameter(DFTAG_II8 = 204) C Raster Image set integer DFTAG_ID, DFTAG_LUT, DFTAG_RI, DFTAG_CI parameter(DFTAG_ID = 300, DFTAG_LUT = 301) parameter(DFTAG_RI = 302, DFTAG_CI = 303) integer DFTAG_RIG, DFTAG_LD, DFTAG_MD, DFTAG_MA integer DFTAG_CCN, DFTAG_CFM, DFTAG_AR parameter(DFTAG_RIG = 306, DFTAG_LD = 307) parameter(DFTAG_MD = 308, DFTAG_MA = 309) parameter(DFTAG_CCN = 310, DFTAG_CFM = 311) parameter(DFTAG_AR = 312) integer DFTAG_DRAW, DFTAG_RUN, DFTAG_XYP, DFTAG_MTO parameter(DFTAG_DRAW = 400, DFTAG_RUN = 401) parameter(DFTAG_XYP = 500, DFTAG_MTO = 501) C Tektronix integer DFTAG_T14, DFTAG_T105 parameter(DFTAG_T14 = 602, DFTAG_T105 = 603) C Scientific Data set integer DFTAG_SDG, DFTAG_SDD, DFTAG_SD, DFTAG_SDS, DFTAG_SDL integer DFTAG_SDU, DFTAG_SDF, DFTAG_SDM, DFTAG_SDC integer DFTAG_SDT,DFTAG_SDLNK,DFTAG_NDG integer DFTAG_BREQ,DFTAG_EREQ,DFTAG_CAL, DFTAG_FV parameter(DFTAG_SDG = 700, DFTAG_SDD = 701) parameter(DFTAG_SD = 702, DFTAG_SDS = 703) parameter(DFTAG_SDL = 704, DFTAG_SDU = 705) parameter(DFTAG_SDF = 706, DFTAG_SDM = 707) parameter(DFTAG_SDC = 708, DFTAG_SDT = 709) parameter(DFTAG_SDLNK = 710, DFTAG_NDG = 720) parameter(DFTAG_CAL = 731, DFTAG_FV = 732) parameter(DFTAG_BREQ = 799, DFTAG_EREQ = 780) C VSets integer DFTAG_VG, DFTAG_VH, DFTAG_VS parameter(DFTAG_VG = 1965, DFTAG_VH = 1962) parameter(DFTAG_VS = 1963) C compression schemes integer DFTAG_RLE, DFTAG_IMC, DFTAG_IMCOMP, DFTAG_JPEG integer DFTAG_GREYJPEG parameter(DFTAG_RLE =11, DFTAG_IMC =12) parameter(DFTAG_IMCOMP =12, DFTAG_JPEG =13) parameter(DFTAG_GREYJPEG =14) C SPECIAL CODES integer SPECIAL_LINKED, SPECIAL_EXT parameter(SPECIAL_LINKED = 1, SPECIAL_EXT = 2) C PARAMETERS integer DF_MAXFNLEN integer SD_UNLIMITED integer SD_DIMVAL_BW_COMP integer SD_DIMVAL_BW_INCOMP integer SD_FILL integer SD_NOFILL parameter(DF_MAXFNLEN = 256, SD_UNLIMITED = 0) parameter(SD_DIMVAL_BW_COMP = 1, SD_DIMVAL_BW_INCOMP = 0) parameter(SD_FILL = 0, SD_NOFILL = 256) integer HDF_VDATA parameter(HDF_VDATA = -1) C Standard return codes integer SUCCEED, FAIL parameter(SUCCEED = 0, FAIL = -1) C Compression Types integer COMP_NONE, COMP_RLE, COMP_IMCOMP, COMP_JPEG parameter(COMP_NONE = 0, COMP_RLE = 11) parameter(COMP_IMCOMP = 12, COMP_JPEG = 2) C C Fortran chunking (SD and GR interfaces) and compression routines use C the following compression types: C integer COMP_CODE_NONE, COMP_CODE_RLE, COMP_CODE_NBIT integer COMP_CODE_SKPHUFF, COMP_CODE_DEFLATE integer COMP_CODE_JPEG integer COMP_CODE_SZIP integer SZ_EC_OPTION_MASK, SZ_NN_OPTION_MASK integer COMP_DECODER_ENABLED, COMP_ENCODER_ENABLED parameter (COMP_CODE_NONE = 0) parameter (COMP_CODE_RLE = 1) parameter (COMP_CODE_NBIT = 2) parameter (COMP_CODE_SKPHUFF = 3) parameter (COMP_CODE_DEFLATE = 4) parameter (COMP_CODE_SZIP = 5) parameter (COMP_CODE_JPEG = 6) C C SZIP parameters C parameter (SZ_EC_OPTION_MASK = 4) parameter (SZ_NN_OPTION_MASK = 32) parameter (COMP_DECODER_ENABLED = 1) parameter (COMP_ENCODER_ENABLED = 2) C C Interlace Types integer MFGR_INTERLACE_PIXEL, MFGR_INTERLACE_LINE integer MFGR_INTERLACE_COMPONENT parameter(MFGR_INTERLACE_PIXEL = 0) parameter(MFGR_INTERLACE_LINE = 1) parameter(MFGR_INTERLACE_COMPONENT= 2) integer FULL_INTERLACE, NO_INTERLACE parameter(FULL_INTERLACE = 0, NO_INTERLACE = 1) C Vdata fields packing types integer HDF_VSPACK, HDF_VSUNPACK parameter (HDF_VSPACK = 0, HDF_VSUNPACK = 1) C Multi-file Annotation types integer AN_DATA_LABEL, AN_DATA_DESC, AN_FILE_LABEL, AN_FILE_DESC parameter(AN_DATA_LABEL = 0, AN_DATA_DESC = 1) parameter(AN_FILE_LABEL = 2, AN_FILE_DESC = 3) c******************End of hdf.inc*************************** hdf4-hdf4.3.1/hdf/src/hdf_priv.h000066400000000000000000000352651503061704500163440ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_HDF_PRIV_H #define H4_HDF_PRIV_H /* Define the I/O scheme before hdf.h to avoid an ordering mess in the * vconv.c code */ /* I/O library constants */ #define UNIXUNBUFIO 1 #define UNIXBUFIO 2 /* The library always uses UNIXBUFIO */ #define FILELIB UNIXBUFIO /* Common library headers */ #include "hdf.h" #include "herr_priv.h" /*--------------------------------------------------------------------------*/ /* MT/NT constants */ /* Four MT nibbles represent double, float, int, uchar (from most */ /* significant to least significant). */ /* Each "column" in the "table" below is essentially independent of the */ /* other "columns", for example the CONVEXNATIVE entry means that the */ /* floating point formats are in Convex native format but the integers */ /* are big-endian and standard sizes */ /* If you add another value to this "table", you need to add another */ /* DFNTF_xxx entry in hntdefs.h */ /* The values for each nibble are: */ /* 1 - Big Endian */ /* (i.e. Big-Endian, 32-bit architecture w/IEEE Floats) */ /* 2 - VAX */ /* (i.e. Middle-Endian, 32-bit architecture w/VAX Floats) */ /* 3 - Cray */ /* (i.e. Big-Endian, all 64-bit architecture w/Cray Floats) */ /* 4 - Little Endian */ /* (i.e. Little-Endian, 32-bit architecture w/IEEE Floats) */ /* 5 - Convex */ /* (i.e. Big-Endian, 32-bit architecture w/Convex Native Floats) */ /* 6 - Fujitsu VP */ /* (i.e. Big-Endian, 32-bit architecture w/Fujitsu Native Floats) */ /* 7 - Cray MPP */ /* (i.e. Big-Endian, 32-bit architecture w/IEEE Floats, but */ /* no 16-bit type) */ /* 8 - Cray IEEE */ /* (i.e. Big-Endian, all 64-bit architecture w/IEEE Floats) */ /*--------------------------------------------------------------------------*/ /* There are only two configurations now, both of which have IEEE-754 * floating-point support. Type sizes are now specified by C99 fixed-width * integers, so 32- vs 64-bit support doesn't matter in this file. */ #define DFMT_LE 0x4441 /* Little-endian, IEEE-754 architectures */ #define DFMT_BE 0x1111 /* Big-endian, IEEE-754 architectures */ #ifdef H4_WORDS_BIGENDIAN #define DF_MT DFMT_BE #else #define DF_MT DFMT_LE #endif /* Standard C library headers */ #include #include #include #include #include #include #include #include /* POSIX headers * * Checked for individually, since POSIX compliance is spotty and even * non-POSIX platforms like Windows have some of these headers. */ #ifdef H4_HAVE_FCNTL_H #include #endif #ifdef H4_HAVE_UNISTD_H #include #endif #ifdef H4_HAVE_SYS_FILE_H #include #endif #ifdef H4_HAVE_SYS_TIME_H #include #endif /* MSDN docs say that sys/types.h has to come before sys/stat */ #ifdef H4_HAVE_SYS_TYPES_H #include #endif #ifdef H4_HAVE_SYS_STAT_H #include #endif /* Windows headers */ #ifdef H4_HAVE_WIN32_API /* Needed for XDR. Must come BEFORE windows.h!!! */ #include #include #include #include #include #endif /*------------------------------------------------------------------------- * Is this an LP64 system? *-------------------------------------------------------------------------*/ #if LONG_MAX == INT64_MAX #define H4_HAVE_LP64 #endif /*------------------------------------------------------------------------- * Fortran definitions *-------------------------------------------------------------------------*/ /* Integer that is the same size as a pointer */ typedef intptr_t hdf_pint_t; /*-----------------------------------------------------*/ /* encode and decode macros */ /*-----------------------------------------------------*/ #define INT16ENCODE(p, i) \ { \ *(p) = (uint8)(((uintn)(i) >> 8) & 0xff); \ (p)++; \ *(p) = (uint8)((uintn)(i) & 0xff); \ (p)++; \ } #define UINT16ENCODE(p, i) \ { \ *(p) = (uint8)(((uintn)(i) >> 8) & 0xff); \ (p)++; \ *(p) = (uint8)((i) & 0xff); \ (p)++; \ } #define INT32ENCODE(p, i) \ { \ *(p) = (uint8)(((uint32)(i) >> 24) & 0xff); \ (p)++; \ *(p) = (uint8)(((uint32)(i) >> 16) & 0xff); \ (p)++; \ *(p) = (uint8)(((uint32)(i) >> 8) & 0xff); \ (p)++; \ *(p) = (uint8)((uint32)(i) & 0xff); \ (p)++; \ } #define UINT32ENCODE(p, i) \ { \ *(p) = (uint8)(((i) >> 24) & 0xff); \ (p)++; \ *(p) = (uint8)(((i) >> 16) & 0xff); \ (p)++; \ *(p) = (uint8)(((i) >> 8) & 0xff); \ (p)++; \ *(p) = (uint8)((i) & 0xff); \ (p)++; \ } #define NBYTEENCODE(d, s, n) \ { \ memcpy(d, s, n); \ p += n \ } /* DECODE converts big endian bytes pointed by p to integer values and stores * it in i. For signed values, we need to do sign-extension when converting * the 1st byte which carries the sign bit. * The macros do not require i be of a certain byte size. They just require * i to be big enough to hold the intended value range. e.g., INT16DECODE works * correctly even if i is actually a 64bit int like in a Cray. */ #define INT16DECODE(p, i) \ { \ (i) = (int16)((*(p) & 0x80) ? ~0xffff : 0x00) | ((int16)(*(p) & 0xff) << 8); \ (p)++; \ (i) |= (int16)((*(p) & 0xff)); \ (p)++; \ } #define UINT16DECODE(p, i) \ { \ (i) = (uint16)((*(p) & 0xff) << 8); \ (p)++; \ (i) |= (uint16)(*(p) & 0xff); \ (p)++; \ } #define INT32DECODE(p, i) \ { \ (i) = ((int32)(((*(p) & 0x80) ? ~0xffffffffULL : 0x0ULL)) | ((*(p) & (unsigned)0xff) << 24)); \ (p)++; \ (i) |= ((int32)(*(p) & 0xff) << 16); \ (p)++; \ (i) |= ((int32)(*(p) & 0xff) << 8); \ (p)++; \ (i) |= (*(p) & 0xff); \ (p)++; \ } #define UINT32DECODE(p, i) \ { \ (i) = ((uint32)(*(p) & 0xff) << 24); \ (p)++; \ (i) |= ((uint32)(*(p) & 0xff) << 16); \ (p)++; \ (i) |= ((uint32)(*(p) & 0xff) << 8); \ (p)++; \ (i) |= (uint32)(*(p) & 0xff); \ (p)++; \ } /* Note! the NBYTEDECODE macro is backwards from the memcpy() routine, */ /* in the spirit of the other DECODE macros */ #define NBYTEDECODE(s, d, n) \ { \ memcpy(d, s, n); \ p += n \ } /************************************************************************** * Generally useful macro definitions **************************************************************************/ #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif /************************************************************************** * JPEG #define's - Look in the JPEG docs before changing - (Q) **************************************************************************/ /* Determine the memory manager we are going to use. Valid values are: * - MEM_DOS * - MEM_ANSI * - MEM_NAME * - MEM_NOBS * * See the JPEG docs for details on what each does. */ #define JMEMSYS MEM_ANSI #endif /* H4_HDF_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hdfalloc.c000066400000000000000000000114701503061704500163020ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf_priv.h" /* LOCAL ROUTINES None EXPORTED ROUTINES HDmemfill -- copy a chunk of memory repetitively into another chunk HIstrncpy -- string copy with termination strdup -- in-library replacement for non-ANSI strdup() */ /*-------------------------------------------------------------------------- NAME HDmemfill -- copy a chunk of memory repetitively into another chunk USAGE void * HDmemfill(dest,src,item_size,num_items) void * dest; OUT: pointer to the chunk of memory to be filled with a pattern void * src; IN: pointer to the pattern to copy uint32 item_size; IN: size of the pattern to copy uint32 num_items; IN: number of times to copy the pattern into the dest buffer RETURNS Returns a pointer to the dest parameter DESCRIPTION Common code used to fill a chunk of memory with a pattern. This routine can be used to copy a given "fill" value into an array of any number type. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS The src and dest pointers are assumed to point to valid portions of memory. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ void * HDmemfill(void *dest, const void *src, uint32 item_size, uint32 num_items) { uint32 copy_size; /* size of the buffer to copy */ uint32 copy_items; /* number of items currently copying */ uint32 items_left; /* number of items left to copy */ uint8 *curr_dest; /* ptr into the 'dest' memory where we are currently */ /* minimal error check for 0 sized array or item size */ if (num_items > 0 && item_size > 0) { memcpy(dest, src, item_size); /* copy first item */ copy_size = item_size; copy_items = 1; items_left = num_items - 1; curr_dest = ((uint8 *)dest) + item_size; /* copy until we've copied at least half of the items */ while (items_left >= copy_items) { memcpy(curr_dest, dest, copy_size); /* copy the current chunk */ curr_dest += copy_size; /* move the offset for the next chunk */ items_left -= copy_items; /* decrement the number of items left */ copy_size *= 2; /* increase the size of the chunk to copy */ copy_items *= 2; /* increase the count of items we are copying */ } /* end while */ if (items_left > 0) /* if there are any items left to copy */ memcpy(curr_dest, dest, items_left * item_size); } /* end if */ return dest; } /* end HDmemfill() */ /*-------------------------------------------------------------------------- NAME HIstrncpy -- string copy with termination USAGE char *HIstrncpy(char *dest,char *source,int32 len) char *dest; OUT: location to place string char *source; IN: location of string to copy int32 len; IN: mas. length of dest. string RETURNS dest on success, NULL on failure. DESCRIPTION This function creates a string in dest that is at most 'len' characters long. The 'len' characters *include* the NULL terminator which must be added. So if you have the string "Foo\0" you must call this copy function with len == 4. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG Sep 19, 11 - Changed last argument's type from int32 to intn. It didn't make sense to have to cast in most places. -BMR --------------------------------------------------------------------------*/ char * HIstrncpy(char *dest, const char *source, intn len) { char *destp; destp = dest; if (len == 0) return destp; for (; (len > 1) && (*source != '\0'); len--) *dest++ = *source++; *dest = '\0'; /* Force the last byte be '\0' */ return destp; } /* end HIstrncpy() */ hdf4-hdf4.3.1/hdf/src/herr.c000066400000000000000000000432231503061704500154670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* -------------------------------- herr.c -------------------------------- */ /* HDF error handling / reporting routines LOCAL ROUTINES None EXPORTED ROUTINES HEstring -- return error description HEclear -- clear the error stack HEpush -- push an error onto the stack HEreport -- give a more detailed error description HEprint -- print values from the error stack HEvalue -- return a error off of the error stack */ #include "hdf_priv.h" /* ** Include files for variable argument processing for HEreport */ #include /* always points to the next available slot; the last error record is in slot (top-1) */ static int32 error_top = 0; /* We use a stack to hold the errors plus we keep track of the function, file and line where the error occurs. */ /* the structure of the error stack element */ typedef struct error_t { hdf_err_code_t error_code; /* Error number */ char function_name[FUNC_NAME_LEN]; /* function where error occur */ const char *file_name; /* file where error occur */ intn line; /* line in file where error occurs */ intn system; /* for system or HDF error */ char *desc; /* optional supplied description */ } error_t; /* error_messages is the list of error messages in the system, kept as error_code-message pairs. To look up a message, a linear search is required but efficiency should be okay. */ typedef struct error_messages_t { hdf_err_code_t error_code; const char *str; } error_messages_t; static const struct error_messages_t error_messages[] = { {DFE_NONE, "No error"}, /* Low-level I/O errors */ {DFE_FNF, "File not found"}, {DFE_DENIED, "Access to file denied"}, {DFE_ALROPEN, "File already open"}, {DFE_TOOMANY, "Too Many AID's or files open"}, {DFE_BADNAME, "Bad file name on open"}, {DFE_BADACC, "Bad file access mode"}, {DFE_BADOPEN, "Error opening file"}, {DFE_NOTOPEN, "File can't be closed; It isn't open"}, {DFE_CANTCLOSE, "Unable to close file"}, {DFE_READERROR, "Read error"}, {DFE_WRITEERROR, "Write error"}, {DFE_SEEKERROR, "Error performing seek operation"}, {DFE_RDONLY, "Attempt to write to read-only HDF file"}, {DFE_BADSEEK, "Attempt to seek past end of element"}, {DFE_INVFILE, "File is not supported, must be either hdf, cdf, netcdf"}, /* Low-level HDF I/O errors */ {DFE_PUTELEM, "Hputelement failed in some way"}, {DFE_GETELEM, "Hgetelement failed in some way"}, {DFE_CANTLINK, "Can't initialize link information"}, {DFE_CANTSYNC, "Cannot synchronize memory with file"}, /* Old group interface errors */ {DFE_BADGROUP, "Error from DFdiread in opening a group"}, {DFE_GROUPSETUP, "Error from DFdisetup in opening a group"}, {DFE_PUTGROUP, "Error when putting a tag/ref into a group"}, {DFE_GROUPWRITE, "Error when writing out a group"}, /* Internal HDF errors */ {DFE_DFNULL, "DF has a null pointer"}, {DFE_ILLTYPE, "Internal error: DF has an illegal type"}, {DFE_BADDDLIST, "Internal error: The DD list is non-existent"}, {DFE_NOTDFFILE, "This is not an HDF file"}, {DFE_SEEDTWICE, "Internal error: The DD list is already seeded"}, {DFE_NOSUCHTAG, "No such tag in the file: search failed"}, {DFE_NOFREEDD, "There are no free DD's left"}, {DFE_BADTAG, "Illegal WILDCARD tag"}, {DFE_BADREF, "Illegal WILDCARD reference"}, {DFE_NOMATCH, "No (more) DDs which match specified tag/ref"}, {DFE_NOTINSET, "Set contained unknown tag: ignored"}, {DFE_BADOFFSET, "Illegal offset specified"}, {DFE_CORRUPT, "File is corrupted"}, {DFE_NOREF, "No more reference numbers are available"}, {DFE_DUPDD, "Tag/ref is already used"}, {DFE_CANTMOD, "Old element does not exist, cannot modify"}, {DFE_DIFFFILES, "Attempt to merge objects in different files"}, {DFE_BADAID, "Unable to create a new AID"}, {DFE_OPENAID, "There are still active AIDs"}, {DFE_CANTFLUSH, "Cannot flush the changed DD back to the file"}, {DFE_CANTUPDATE, "Cannot update the DD block"}, {DFE_CANTHASH, "Cannot add a DD to the hash table"}, {DFE_CANTDELDD, "Cannot delete a DD in the file"}, {DFE_CANTDELHASH, "Cannot delete a DD from the hash table"}, {DFE_CANTACCESS, "Cannot access specified tag/ref"}, {DFE_CANTENDACCESS, "Cannot end access to data element"}, {DFE_TABLEFULL, "Access table is full"}, {DFE_NOTINTABLE, "Cannot find element in table"}, /* Generic errors */ {DFE_UNSUPPORTED, "Feature not currently supported"}, {DFE_NOSPACE, "Internal error: Out of space"}, {DFE_BADCALL, "Calls in wrong order"}, {DFE_BADPTR, "NULL ptr argument"}, {DFE_BADLEN, "Invalid length specified"}, {DFE_NOTENOUGH, "Space provided insufficient for size of data"}, {DFE_NOVALS, "Values not available"}, {DFE_ARGS, "Invalid arguments to routine"}, {DFE_INTERNAL, "HDF Internal error"}, {DFE_NORESET, "Can not reset this value"}, {DFE_EXCEEDMAX, "Value exceeds max allowed"}, {DFE_GENAPP, "Generic application-level error"}, /* Generic interface errors */ {DFE_UNINIT, "Interface was not initialized correctly"}, {DFE_CANTINIT, "Can't initialize an interface we depend on"}, {DFE_CANTSHUTDOWN, "Can't shut down an interface we depend on"}, /* Dataset errors */ {DFE_BADDIM, "Negative or zero dimensions specified"}, {DFE_BADFP, "File contained an illegal floating point number"}, {DFE_BADDATATYPE, "Unknown or unavailable data type specified"}, {DFE_BADMCTYPE, "Unknown or unavailable machine type specified"}, {DFE_BADNUMTYPE, "Unknown or unavailable number type specified"}, {DFE_BADORDER, "Unknown or illegal array order specified"}, {DFE_RANGE, "Improper range for attempted access"}, {DFE_BADCONV, "Don't know how to convert data type"}, {DFE_BADTYPE, "Incompatible type specified"}, {DFE_BADDIMNAME, "Dimension name not valid or already taken"}, {DFE_NOVGREP, "No Vgroup representation for SDS and dim"}, /* Compression errors */ {DFE_BADSCHEME, "Unknown compression scheme specified"}, {DFE_BADMODEL, "Invalid compression model specified"}, {DFE_BADCODER, "Invalid compression coder specified"}, {DFE_MODEL, "Error in modeling layer of compression"}, {DFE_CODER, "Error in encoding layer of compression"}, {DFE_CINIT, "Error in encoding initialization"}, {DFE_CDECODE, "Error in decoding compressed data"}, {DFE_CENCODE, "Error in encoding compressed data"}, {DFE_CTERM, "Error in encoding termination"}, {DFE_CSEEK, "Error seeking in encoded dataset"}, {DFE_MINIT, "Error in modeling initialization"}, {DFE_COMPINFO, "Invalid compression header"}, {DFE_CANTCOMP, "Can't compress an object"}, {DFE_CANTDECOMP, "Can't de-compress an object"}, {DFE_NOENCODER, "Encoder not available"}, {DFE_NOSZLIB, "SZIP library not available"}, {DFE_COMPVERSION, "Z_VERSION_ERROR (-6) returned from zlib"}, {DFE_READCOMP, "Error in reading compressed data"}, /* Raster errors */ {DFE_NODIM, "No dimension record associated with image or data set"}, {DFE_BADRIG, "Error processing a RIG"}, {DFE_RINOTFOUND, "Can't find raster image"}, {DFE_BADATTR, "Bad Attribute"}, {DFE_LUTNOTFOUND, "No palette information for RIG"}, {DFE_GRNOTFOUND, "Can't find specified GR"}, /* SDG/NDG errors */ {DFE_BADTABLE, "The nsdg table is wrong"}, {DFE_BADSDG, "Error processing an sdg"}, {DFE_BADNDG, "Error processing an ndg"}, /* Vset errors */ {DFE_VGSIZE, "No more elements will fit in this VGroup"}, {DFE_VTAB, "Element is not in VSet tables"}, {DFE_CANTADDELEM, "Cannot add tag/ref to VGroup"}, {DFE_BADVGNAME, "Cannot set VGroup name"}, {DFE_BADVGCLASS, "Cannot set VGroup class"}, /* Vdata errors */ {DFE_BADFIELDS, "Unable to parse fields string correctly"}, {DFE_NOVS, "Could not find specified VS or VG in file"}, {DFE_SYMSIZE, "Too many symbols in table"}, {DFE_BADATTACH, "Cannot write to a previously attached VData"}, {DFE_BADVSNAME, "Cannot set VData name"}, {DFE_BADVSCLASS, "Cannot set VData class"}, {DFE_VSWRITE, "Error writing to VData"}, {DFE_VSREAD, "Error reading from VData"}, {DFE_BADVH, "Error in VData Header"}, {DFE_FIELDSSET, "Fields already set for vdata"}, /* High-level Vdata/Vset errors */ {DFE_VSCANTCREATE, "Cannot create VData"}, {DFE_VGCANTCREATE, "Cannot create VGroup"}, /* Generic Vdata/Vset errors */ {DFE_CANTATTACH, "Cannot attach to a VData"}, {DFE_CANTDETACH, "Cannot detach a VData with access 'w'"}, /* XDR level errors */ {DFE_XDRERROR, "Error from XDR and/or CDF level"}, /* bit I/O errors */ {DFE_BITREAD, "There was a bit-read error"}, {DFE_BITWRITE, "There was a bit-write error"}, {DFE_BITSEEK, "There was a bit-seek error"}, /* tbbt interface errors */ {DFE_TBBTINS, "Failed to insert element into tree"}, /* bit-vector interface errors */ {DFE_BVNEW, "Failed to create a bit-vector"}, {DFE_BVSET, "Failed when setting a bit in a bit-vector"}, {DFE_BVGET, "Failed when getting a bit in a bit-vector"}, {DFE_BVFIND, "Failed when finding a bit in a bit-vector"}, /* General to all interfaces */ {DFE_CANTSETATTR, "Cannot set an attribute"}, {DFE_CANTGETATTR, "Cannot find or get an attribute"}, /* Annotation interface errors */ {DFE_ANAPIERROR, "Failed in annotation interface"} }; /* pointer to the structure to hold error messages */ static error_t *error_stack = NULL; #ifndef DEFAULT_MESG #define DEFAULT_MESG "Unknown error" #endif /* size of error message table */ #define ERRMESG_SZ (sizeof(error_messages) / sizeof(error_messages[0])) /*------------------------------------------------------------------------ NAME HEstring -- return error description USAGE char * HEstring(error_code) int16 error_code; IN: the numerical value of this error RETURNS An error description string DESCRIPTION Return a textual description of the given error. These strings are statically declared and should not be free()ed by the user. If no string can be found to describe this error a generic default message is returned. ---------------------------------------------------------------------------*/ const char * HEstring(hdf_err_code_t error_code) { int i; /* temp int index */ /* look for the error_code in error message table */ for (i = 0; i < (int)ERRMESG_SZ; i++) if (error_messages[i].error_code == error_code) { return error_messages[i].str; } /* otherwise, return default message */ return DEFAULT_MESG; } /* HEstring */ /*-------------------------------------------------------------------------- NAME HEclear -- clear the error stack USAGE void HEclear(void) RETURNS NONE DESCRIPTION Remove all currently reported errors from the error stack ---------------------------------------------------------------------------*/ void HEclear(void) { if (!error_top) goto done; /* error_top == 0 means no error in stack */ /* clean out old descriptions if they exist */ for (; error_top > 0; error_top--) { free(error_stack[error_top - 1].desc); error_stack[error_top - 1].desc = NULL; } done: return; } /* HEclear */ /*------------------------------------------------------------------------- NAME HEpush -- push an error onto the stack USAGE void HEpush(error_code, func_name, file_name, line) int16 error_code; IN: the numerical value of this error char * func_name; IN: function where the error happened char * file_name; IN: file name of offending function int line; IN: line number of the reporting statement RETURNS NONE DESCRIPTION push a new error onto stack. If stack is full, error is ignored. assumes that the character strings (function_name and file_name) referred are in some semi-permanent storage, so it just saves the pointer to the strings. blank out the description field so that a description is reported only if REreport is called ---------------------------------------------------------------------------*/ void HEpush(hdf_err_code_t error_code, const char *function_name, const char *file_name, intn line) { intn i; /* if the stack is not allocated, then do it */ if (!error_stack) { error_stack = (error_t *)malloc((uint32)sizeof(error_t) * ERR_STACK_SZ); if (!error_stack) { puts("HEpush cannot allocate space. Unable to continue!!"); exit(8); } for (i = 0; i < ERR_STACK_SZ; i++) error_stack[i].desc = NULL; } /* if stack is full, discard error */ /* otherwise, push error details onto stack */ if (error_top < ERR_STACK_SZ) { strcpy(error_stack[error_top].function_name, function_name); error_stack[error_top].file_name = file_name; error_stack[error_top].line = line; error_stack[error_top].error_code = error_code; free(error_stack[error_top].desc); error_stack[error_top].desc = NULL; error_top++; } } /* HEpush */ /*------------------------------------------------------------------------- NAME HEreport -- give a more detailed error description USAGE void HEreport(format, ....) char * format; IN: printf style print statement RETURNS NONE DESCRIPTION Using printf and the variable number of args facility allow the library to specify a more detailed description of a given error condition ---------------------------------------------------------------------------*/ void HEreport(const char *format, ...) { va_list arg_ptr; char *tmp; va_start(arg_ptr, format); if ((error_top < ERR_STACK_SZ + 1) && (error_top > 0)) { tmp = (char *)malloc(ERR_STRING_SIZE); if (!tmp) { HERROR(DFE_NOSPACE); goto done; } vsprintf(tmp, format, arg_ptr); free(error_stack[error_top - 1].desc); error_stack[error_top - 1].desc = tmp; } va_end(arg_ptr); done: return; } /* HEreport */ /*------------------------------------------------------------------------- NAME HEprint -- print values from the error stack USAGE void HEprint(stream, levels) FILE * stream; IN: file to print error message to int32 level; IN: level at which to start printing RETURNS NONE DESCRIPTION Print part of the error stack to a given file. If level == 0 the entire stack is printed. If an extra description has been added (via HEreport) it is printed too. ---------------------------------------------------------------------------*/ void HEprint(FILE *stream, int32 print_levels) { if (print_levels == 0 || print_levels > error_top) /* print all errors */ print_levels = error_top; /* print the errors starting from most recent */ for (print_levels--; print_levels >= 0; print_levels--) { fprintf(stream, "HDF error: (%d) <%s>\n\tDetected in %s() [%s line %d]\n", error_stack[print_levels].error_code, HEstring(error_stack[print_levels].error_code), error_stack[print_levels].function_name, error_stack[print_levels].file_name, error_stack[print_levels].line); if (error_stack[print_levels].desc) fprintf(stream, "\t%s\n", error_stack[print_levels].desc); } } /* HEprint */ /* ------------------------------- HEvalue -------------------------------- */ /* NAME HEvalue -- return a error off of the error stack USAGE int16 HEvalue(level) int32 level; IN: level of the error stack to return RETURNS Error code or DFE_NONE if no error DESCRIPTION Return the error code of a single error out of the error stack --------------------------------------------------------------------------- */ int16 HEvalue(int32 level) { int16 ret_value = DFE_NONE; if (level > 0 && level <= error_top) ret_value = (int16)error_stack[error_top - level].error_code; else ret_value = DFE_NONE; return ret_value; } /* HEvalue */ /*-------------------------------------------------------------------------- NAME HEshutdown PURPOSE Terminate various static buffers. USAGE intn HEshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the HE routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HEshutdown(void) { if (error_stack != NULL) { free(error_stack); error_stack = NULL; error_top = 0; } return SUCCEED; } /* end HEshutdown() */ hdf4-hdf4.3.1/hdf/src/herr.h000066400000000000000000000241711503061704500154750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* herr.h * * Error routines */ #ifndef H4_HERR_H #define H4_HERR_H #include "hdf.h" /* * ====================================================================== * Error codes * * NOTE: Remember to update the error_messages[] structure in herr.c * whenever errors are added/deleted from this list. * ====================================================================== */ /* Declare an enumerated type which holds all the valid HDF error codes */ typedef enum { DFE_NONE = 0, /* special zero, no error */ /* Low-level I/O errors */ DFE_FNF, /* File not found */ DFE_DENIED, /* Access to file denied */ DFE_ALROPEN, /* File already open */ DFE_TOOMANY, /* Too Many AID's or files open */ DFE_BADNAME, /* Bad file name on open */ DFE_BADACC, /* Bad file access mode */ DFE_BADOPEN, /* Other open error */ DFE_NOTOPEN, /* File can't be closed 'cause it isn't open */ DFE_CANTCLOSE, /* fclose wouldn't work! */ DFE_READERROR, /* There was a read error */ DFE_WRITEERROR, /* There was a write error */ DFE_SEEKERROR, /* There was a seek error */ DFE_RDONLY, /* The DF is read only */ DFE_BADSEEK, /* Attempt to seek past end of element */ DFE_INVFILE, /* File is neither hdf, cdf, netcdf */ /* Low-level HDF I/O errors */ DFE_PUTELEM, /* Hputelement failed in some way */ DFE_GETELEM, /* Hgetelement failed in some way */ DFE_CANTLINK, /* Can't initialize link information */ DFE_CANTSYNC, /* Cannot synchronize memory with file */ /* Old group interface errors */ DFE_BADGROUP, /* Error from DFdiread in opening a group */ DFE_GROUPSETUP, /* Error from DFdisetup in opening a group */ DFE_PUTGROUP, /* Error when putting a tag/ref into a group */ DFE_GROUPWRITE, /* Error when writing out a group */ /* Internal HDF errors */ DFE_DFNULL, /* DF is a null pointer */ DFE_ILLTYPE, /* DF has an illegal type: internal error */ DFE_BADDDLIST, /* The DD list is non-existent: internal error */ DFE_NOTDFFILE, /* This is not a DF file and it is not 0 length */ DFE_SEEDTWICE, /* The DD list already seeded: internal error */ DFE_NOSUCHTAG, /* No such tag in the file: search failed */ DFE_NOFREEDD, /* There are no free DD's left: internal error */ DFE_BADTAG, /* illegal WILDCARD tag */ DFE_BADREF, /* illegal WILDCARD reference # */ DFE_NOMATCH, /* No (more) DDs which match specified tag/ref */ DFE_NOTINSET, /* Warning: Set contained unknown tag: ignored */ DFE_BADOFFSET, /* Illegal offset specified */ DFE_CORRUPT, /* File is corrupted */ DFE_NOREF, /* no more reference numbers are available */ DFE_DUPDD, /* the new tag/ref is already used */ DFE_CANTMOD, /* old element not exist, cannot modify */ DFE_DIFFFILES, /* Attempt to merge objs in diff files */ DFE_BADAID, /* Got a bogus aid */ DFE_OPENAID, /* There are still active AIDs */ DFE_CANTFLUSH, /* Can't flush DD back to file */ DFE_CANTUPDATE, /* Cannot update the DD block */ DFE_CANTHASH, /* Cannot add a DD to the hash table */ DFE_CANTDELDD, /* Cannot delete a DD in the file */ DFE_CANTDELHASH, /* Cannot delete a DD from the hash table */ DFE_CANTACCESS, /* Cannot access specified tag/ref */ DFE_CANTENDACCESS, /* Cannot end access to data element */ DFE_TABLEFULL, /* Access table is full */ DFE_NOTINTABLE, /* Cannot find element in table */ /* Generic errors */ DFE_UNSUPPORTED, /* Feature not currently supported */ DFE_NOSPACE, /* Malloc failed */ DFE_BADCALL, /* Calls in wrong order */ DFE_BADPTR, /* NULL ptr argument */ DFE_BADLEN, /* Invalid len specified */ DFE_NOTENOUGH, /* space provided insufficient for size of data */ DFE_NOVALS, /* Values not available */ DFE_ARGS, /* bad arguments to routine */ DFE_INTERNAL, /* serious internal error */ DFE_NORESET, /* Too late to modify this value */ DFE_EXCEEDMAX, /* Value exceeds max allowed */ DFE_GENAPP, /* Generic application,level error */ /* Generic interface errors */ DFE_UNINIT, /* Interface was not initialized correctly */ DFE_CANTINIT, /* Can't initialize an interface we depend on */ DFE_CANTSHUTDOWN, /* Can't shut down an interface we depend on */ /* General Dataset errors */ DFE_BADDIM, /* negative or zero dimensions specified */ DFE_BADFP, /* File contained an illegal floating point num */ DFE_BADDATATYPE, /* unknown or unavailable data type specified */ DFE_BADMCTYPE, /* unknown or unavailable machine type specified */ DFE_BADNUMTYPE, /* unknown or unavailable number type specified */ DFE_BADORDER, /* unknown or illegal array order specified */ DFE_RANGE, /* improper range for attempted access */ DFE_BADCONV, /* Don't know how to convert data type */ DFE_BADTYPE, /* Incompatible types specified */ DFE_BADDIMNAME, /* Dimension name not valid or already taken */ DFE_NOVGREP, /* No Vgroup representation for SDS and dim */ /* Compression errors */ DFE_BADSCHEME, /* Unknown compression scheme specified */ DFE_BADMODEL, /* Invalid compression model specified */ DFE_BADCODER, /* Invalid compression encoder specified */ DFE_MODEL, /* Error in modeling layer of compression */ DFE_CODER, /* Error in encoding layer of compression */ DFE_CINIT, /* Error in encoding initialization */ DFE_CDECODE, /* Error in decoding compressed data */ DFE_CENCODE, /* Error in encoding compressed data */ DFE_CTERM, /* Error in encoding termination */ DFE_CSEEK, /* Error seekging in encoded dataset */ DFE_MINIT, /* Error in modeling initialization */ DFE_COMPINFO, /* Invalid compression header */ DFE_CANTCOMP, /* Can't compress an object */ DFE_CANTDECOMP, /* Can't de-compress an object */ DFE_NOENCODER, /* Encoder not available */ DFE_NOSZLIB, /* SZIP library not available */ DFE_COMPVERSION, /* Z_VERSION_ERROR (-6) returned from zlib */ DFE_READCOMP, /* Error in reading compressed data; this error occurs when one of the following error codes is returned from zlib: Z_ERRNO (-1) Z_STREAM_ERROR (-2) Z_DATA_ERROR (-3) Z_MEM_ERROR (-4) Z_BUF_ERROR (-5) */ /* Raster errors */ DFE_NODIM, /* No dimension record associated with image */ DFE_BADRIG, /* Error processing a RIG */ DFE_RINOTFOUND, /* Can't find raster image */ DFE_BADATTR, /* Bad Attribute */ DFE_LUTNOTFOUND, /* No palette information for RIG */ DFE_GRNOTFOUND, /* Can't find specified GR */ /* SDG/NDG errors */ DFE_BADTABLE, /* the nsdg table is wrong */ DFE_BADSDG, /* error processing an sdg */ DFE_BADNDG, /* error processing an ndg */ /* Vset errors */ DFE_VGSIZE, /* Too many elements in VGroup */ DFE_VTAB, /* Elmt not in vtab[] */ DFE_CANTADDELEM, /* Cannot add tag/ref to VGroup */ DFE_BADVGNAME, /* Cannot set VGroup name */ DFE_BADVGCLASS, /* Cannot set VGroup class */ /* Vdata errors */ DFE_BADFIELDS, /* Bad fields string passed to Vset routine */ DFE_NOVS, /* Counldn't find VS in file */ DFE_SYMSIZE, /* Too many symbols in users table */ DFE_BADATTACH, /* Cannot write to a previously attached VData */ DFE_BADVSNAME, /* Cannot set VData name */ DFE_BADVSCLASS, /* Cannot set VData class */ DFE_VSWRITE, /* Error writing to VData */ DFE_VSREAD, /* Error reading from VData */ DFE_BADVH, /* Error in VData Header */ DFE_FIELDSSET, /* Fields already set for vdata */ /* High-level Vdata/Vset errors */ DFE_VSCANTCREATE, /* Cannot create VData */ DFE_VGCANTCREATE, /* Cannot create VGroup */ /* Generic Vdata/Vset errors */ DFE_CANTATTACH, /* Cannot attach to a VData/Vset */ DFE_CANTDETACH, /* Cannot detach a VData/Vset with access 'w' */ /* XDR level errors */ DFE_XDRERROR, /* Error occur in XDR and/or CDF level */ /* bit I/O errors */ DFE_BITREAD, /* There was a bit-read error */ DFE_BITWRITE, /* There was a bit-write error */ DFE_BITSEEK, /* There was a bit-seek error */ /* tbbt interface errors */ DFE_TBBTINS, /* Failed to insert element into tree */ /* bit-vector interface errors */ DFE_BVNEW, /* Failed to create a bit-vector */ DFE_BVSET, /* Failed when setting a bit in a bit-vector */ DFE_BVGET, /* Failed when getting a bit in a bit-vector */ DFE_BVFIND, /* Failed when finding a bit in a bit-vector */ /* General to all interfaces */ DFE_CANTSETATTR, /* Failed to add an attribute */ DFE_CANTGETATTR, /* Failed to find or get an attribute */ /* Annotation interface errors */ DFE_ANAPIERROR /* Failed in annotation interface */ } hdf_err_code_t; #endif /* H4_HERR_H */ hdf4-hdf4.3.1/hdf/src/herr_priv.h000066400000000000000000000166331503061704500165410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* herr_priv.h * * Error routines (private) */ #ifndef H4_HERR_PRIV_H #define H4_HERR_PRIV_H #include "hproto.h" /* HERROR macro, used to facilitate error reporting */ #define HERROR(e) HEpush(e, __func__, __FILE__, __LINE__) /* HRETURN_ERROR macro, used to facilitate error reporting. Makes * same assumptions as HERROR. IN ADDITION, this macro causes * a return from the calling routine */ #define HRETURN_ERROR(err, ret_val) \ do { \ HERROR(err); \ return (ret_val); \ } while (0) /* HGOTO_ERROR macro, used to facilitate error reporting. Makes * same assumptions as HERROR. IN ADDITION, this macro causes * a jump to the label 'done' which should be in every function * Also there is an assumption of a variable 'ret_value' */ #define HGOTO_ERROR(err, ret_val) \ do { \ HERROR(err); \ ret_value = ret_val; \ goto done; \ } while (0) /* HGOTO_FAIL macro, used to facilitate error reporting. This one * is added in 2019 to tidy the code. It is similar to HGOTO_ERROR, * except it does not call HERROR. This is to preserve the exact * behavior as the original code. */ #define HGOTO_FAIL(ret_val) \ do { \ ret_value = ret_val; \ goto done; \ } while (0) /* HCLOSE_GOTO_ERROR macro, used to facilitate error reporting. Makes * same assumptions as HRETURN_ERROR. IN ADDITION, this macro causes * the file specified by the id "fid" to be closed * Also , this macro causes a jump to the label 'done' which should * be in every function. There is an assumption of a variable 'ret_value' */ /* TODO: Refactor this out of library and simply close hfid in the `done` target */ #define HCLOSE_GOTO_ERROR(hfid, err, ret_val) \ do { \ HERROR(err); \ Hclose(hfid); \ ret_value = ret_val; \ goto done; \ } while (0) /* HGOTO_DONE macro, used to facilitate the new error reporting model. * This macro is just a wrapper to set the return value and jump to the 'done' * label. Also assumption of a variable 'ret_value' */ #define HGOTO_DONE(ret_val) \ do { \ ret_value = ret_val; \ goto done; \ } while (0) /*******************************/ /* For further error reporting */ /*******************************/ #define HE_REPORT(msg) HEreport(msg) #define HE_REPORT_RETURN(msg, ret_val) \ do { \ HEreport(msg); \ return (ret_val); \ } while (0) #define HE_CLOSE_REPORT_RETURN(hfid, msg, ret_val) \ do { \ HEreport(msg); \ Hclose(hfid); \ return (ret_val); \ } while (0) #define HE_REPORT_GOTO(msg, ret_val) \ do { \ HEreport(msg); \ ret_value = ret_val; \ goto done; \ } while (0) #define HE_CLOSE_REPORT_GOTO(hfid, msg, ret_val) \ do { \ HEreport(msg); \ Hclose(hfid); \ ret_value = ret_val; \ goto done; \ } while (0) #endif /* H4_HERR_PRIV_H */ hdf4-hdf4.3.1/hdf/src/herrf.c000066400000000000000000000073411503061704500156360ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: herrf.c * Purpose: C stubs for error-handling Fortran routines * Invokes: herr.c. * Contents: * heprnt_: Call HEprint to print error message * Remarks: none *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: heprnt * Purpose: call HEprint to print error messages, starting from top of stack * Inputs: print_levels: number of levels to print * Returns: 0 on success, FAIL on failure * Users: Fortran stub routine * Invokes: HEprint * Remarks: This routine has one less parameter than HEprint, because it * doesn't allow the user to specify the stream to print to. * Instead it prints automatically to stdout. *---------------------------------------------------------------------------*/ void nheprnt(intf *print_levels) { HEprint(stderr, *print_levels); } /*----------------------------------------------------------------------------- * Name: heprntc * Purpose: call HEprint to print error messages, starting from top of stack * Inputs: print_levels: number of levels to print * Returns: 0 on success, FAIL on failure * Users: Fortran stub routine * Invokes: HEprint * Remarks: This routine has one less parameter than HEprint, because it * doesn't allow the user to specify the stream to print to. * Instead it prints automatically to stdout. *---------------------------------------------------------------------------*/ intf nheprntc(_fcd filename, intf *print_levels, intf *namelen) { FILE *err_file; char *c_name; intn c_len; int ret = 0; c_len = *namelen; if (c_len == 0) { HEprint(stderr, *print_levels); return ret; } c_name = HDf2cstring(filename, c_len); if (!c_name) return FAIL; err_file = fopen(c_name, "a"); if (!err_file) return FAIL; HEprint(err_file, *print_levels); fclose(err_file); return ret; } /*----------------------------------------------------------------------------- * Name: hestringc * Purpose: Calls HEstring * Inputs: error_code - HDF error code * Outputs: error_message - error message assocoated with the error code * Returns: SUCCEED (0) if successful and FAIL(-1) otherwise *----------------------------------------------------------------------------*/ intf nhestringc(intf *error_code, _fcd error_message, intf *len) { char *cstring = NULL; intn status; status = -1; cstring = (char *)HEstring((hdf_err_code_t)*error_code); if (cstring) { status = 0; HDpackFstring(cstring, _fcdtocp(error_message), *len); } return status; } hdf4-hdf4.3.1/hdf/src/hextelt.c000066400000000000000000001405121503061704500162030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------------------------------ hextelt.c ------------------------------- Routines for external elements, i.e., data elements that reside on some other file. These elements have no limits on their length. While users are prevented from reading beyond what is written, a user can write an unlimited amount of data. 17-Mar-93 Adding offset and "starting length" to elements so that a user can take an existing file with some data in it and create an HDF file which has a pointer to that data. File Organization ****************** DD for External Element pointing to External Element Description Record ======================================================================= <- 2 bytes -> <- 2 bytes -> <- 4 bytes -> <- 4bytes -> -------------------------------------------------------- |extended tag | reference # | Offset | Length | -------------------------------------------------------- \______________/ __________________________________________| V EXTERNAL ELEMENT DESCRIPTION RECORD(EEDR - 12 + file_name_length bytes) ======================================================================== <- 4 bytes -> <- 4 bytes -> <- 4 bytes -> <- variable -> --------------------------------------------------------- | ext_tag_desc | offset | length | filename | --------------------------------------------------------- ext_tag_desc - EXT_EXTERN(16 bit constant). Identifies this as an external element description record. offset - Location of the element(data) within the external file(32 bit field) length - Length in bytes of the element(data) in the external file(32 bit field) filename - Non-null terminated ASCII string naming the external file(variable length) LOCAL ROUTINES HXIstaccess -- set up AID to access an ext elem HXIbuildfilename -- Build the Filename for the External Element EXPORTED BUT LIBRARY PRIVATE ROUTINES HXPcloseAID -- close file but keep AID active HXPendacess -- close file, free AID HXPinfo -- return info about an external element HXPinquire -- retrieve information about an external element HXPread -- read some data out of an external file HXPreset -- replace the current external info with new info HXPseek -- set the seek position HXPsetaccesstype -- set the I/O access type of the external file HXPstread -- open an access record for reading HXPstwrite -- open an access record for reading HXPwrite -- write some data out to an external file EXPORTED ROUTINES HXcreate -- create an external element HXsetcreatedir -- set the directory variable for creating external file HXsetdir -- set the directory variable for locating external file ------------------------------------------------------------------------- */ #include "hdf_priv.h" #include "hfile_priv.h" /* Directory separator definitions relating to a path. * Note this does not provide a universal way to recognize * different path name conventions and translate between them */ #ifdef H4_HAVE_WIN32_API /* DOS-Windows separator */ #define DIR_SEPC 92 /* Integer value of '\' */ #define DIR_SEPS "\\" #else /* Unix - POSIX */ #define DIR_SEPC 47 /* Integer value of '/' */ #define DIR_SEPS "/" #endif /* H4_HAVE_WIN32_API */ /* directory path separator from other directory paths */ #define DIR_PATH_SEPC 124 #define DIR_PATH_SEPS "|" static char *extcreatedir = NULL; static char *HDFEXTCREATEDIR = NULL; static char *extdir = NULL; static char *HDFEXTDIR = NULL; static intn extdir_changed = FALSE; /* extinfo_t -- external elt information structure */ typedef struct { int attached; /* number of access records attached to this information structure */ int32 extern_offset; int32 length; /* length of this element */ int32 length_file_name; /* length of the external file name */ int32 para_extfile_id; /* parallel ID of the external file */ hdf_file_t file_external; /* external file descriptor */ char *extern_file_name; /* name of the external file */ intn file_open; /* has the file been opened yet ? */ } extinfo_t; /* forward declaration of the functions provided in this module */ static int32 HXIstaccess(accrec_t *access_rec, int16 access); static char *HXIbuildfilename(const char *ext_fname, const intn acc_mode); /* ext_funcs -- table of the accessing functions of the external data element function modules. The position of each function in the table is standard */ funclist_t ext_funcs = { HXPstread, HXPstwrite, HXPseek, HXPinquire, HXPread, HXPwrite, HXPendaccess, HXPinfo, HXPreset, }; /*------------------------------------------------------------------------ NAME HXcreate -- create an external element USAGE int32 HXcreate(file_id, tag, ref, ext_name, offset, len) int32 file_id; IN: file ID for HDF file int16 tag; IN: tag number for external elem int16 ref; IN: ref number for external elem char * ext_name; IN: external file name int32 offset; IN: offset where elem should start in ext file int32 len; IN: current len of element if already in ext file (see desc below) RETURNS returns AID to external element if succeed, else FAIL DESCRIPTION Create a data element in an external file starting at the location of _offset_. If the external file does not exist, it is created. If it already exists, we will simply open it, not delete it and start over. If the data element does not exist, it is created in reference to the external file starting at location _offset_. Its data length is set as _len_. If the data element already exists, it is "promoted" as an external element and its data is copied to the external file, again, starting at location _offset_. In this case, since the length of the existing element is defined, it is set as the length of the external element. The given _len_ value is ignored. Currently, all ordinary data element plus link-block and external elements can be set as an external element. (For the case of setting an existing external element to a new external element has the effect of copying the data of the element from an old external file to a new one.) All further reference (e.g., read, write, seek) to this external element applies to the content of the external file. The AID which refers to this new external element, is returned upon successful execution. FAIL is returned if any error is encountered. FORTRAN None MODIFICATION Previously, the data_len used was incorrect when the element is already special, either linked-block or external data, in which case, the data_len was the length of the special info, not the data. Changed to use correct data_len when the element is already special. (HDFFR-1516) -BMR, Sep 5, 2015 --------------------------------------------------------------------------*/ int32 HXcreate(int32 file_id, uint16 tag, uint16 ref, const char *extern_file_name, int32 offset, int32 start_len) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access element record */ int32 dd_aid; /* AID for writing the special info */ hdf_file_t file_external; /* external file descriptor */ extinfo_t *info = NULL; /* special element information */ atom_t data_id = FAIL; /* dd ID of existing regular element */ int32 data_len; /* length of the data we are checking */ uint16 special_tag; /* special version of tag */ uint8 local_ptbuf[20 + MAX_PATH_LEN]; /* temp working buffer */ char *fname = NULL; /* filename built from external filename */ void *buf = NULL; /* temporary buffer */ int32 ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec) || !extern_file_name || (offset < 0) || SPECIALTAG(tag) || (special_tag = MKSPECIALTAG(tag)) == DFTAG_NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Make sure file has write access */ if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* Get access to the DD of this tag/ref */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { /* If element is already special, proceed according to special type */ if (HTPis_special(data_id) == TRUE) { sp_info_block_t sp_info; int32 aid, retcode; /* Get read access on the tag/ref */ if ((aid = Hstartread(file_id, tag, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* Get the special info structure */ retcode = HDget_special_info(aid, &sp_info); if ((retcode == FAIL) || (sp_info.key == FAIL)) HGOTO_ERROR(DFE_CANTMOD, FAIL); /* We can proceed with linked-block and external, but not compression special element */ switch (sp_info.key) { case SPECIAL_LINKED: if (HDinqblockinfo(aid, &data_len, NULL, NULL, NULL) == FAIL) { Hendaccess(aid); HRETURN_ERROR(DFE_INTERNAL, FAIL); } break; case SPECIAL_EXT: data_len = sp_info.length; break; case SPECIAL_COMP: default: HTPendaccess(data_id); Hendaccess(aid); HGOTO_ERROR(DFE_CANTMOD, FAIL); } /* switch */ /* Close access on this special element */ Hendaccess(aid); } /* end if data_id is special */ else { /* not special */ /* Then use HTPinquire to get the length of the data. Note: when this tag is special, this length is the length of the special info only, not data. */ if (HTPinquire(data_id, NULL, NULL, NULL, &data_len) == FAIL) { HTPendaccess(data_id); HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ } } /* end if */ /* build the customized external file name. */ if (!(fname = HXIbuildfilename(extern_file_name, DFACC_CREATE))) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* Try to open the external file with write access first, if that fails, create it */ file_external = (hdf_file_t)HI_OPEN(fname, DFACC_WRITE); if (OPENERR(file_external)) { file_external = (hdf_file_t)HI_CREATE(fname); if (OPENERR(file_external)) HGOTO_ERROR(DFE_BADOPEN, FAIL); } free(fname); extdir_changed = FALSE; /* set to TRUE when HXsetdir is called */ /* Get a bare access record and special info structure */ access_rec = HIget_access_rec(); if (access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); access_rec->special_info = malloc((uint32)sizeof(extinfo_t)); info = (extinfo_t *)access_rec->special_info; if (!info) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Initialize char pointer for use in resource cleanup */ info->extern_file_name = NULL; /* If there is data, either regular or special, read the data then write it to the external file, otherwise, do nothing */ if (data_id != FAIL && data_len > 0) { if ((buf = malloc((uint32)data_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (Hgetelement(file_id, tag, ref, buf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if (HI_SEEK(file_external, offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HI_WRITE(file_external, buf, (int)data_len) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); info->length = data_len; } else info->length = start_len; /* Set up the special element information and write it to file */ info->attached = 1; info->file_open = TRUE; info->file_external = file_external; info->extern_offset = offset; info->extern_file_name = (char *)strdup(extern_file_name); if (!info->extern_file_name) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->length_file_name = (int32)strlen(extern_file_name); { uint8 *p = local_ptbuf; INT16ENCODE(p, SPECIAL_EXT); INT32ENCODE(p, info->length); INT32ENCODE(p, info->extern_offset); INT32ENCODE(p, info->length_file_name); strcpy((char *)p, extern_file_name); } /* Free up the current DD */ if (data_id != FAIL) if (HTPdelete(data_id) == FAIL) HGOTO_ERROR(DFE_CANTDELDD, FAIL); /* Write the special info structure to file */ if ((dd_aid = Hstartaccess(file_id, special_tag, ref, DFACC_ALL)) == FAIL) HGOTO_ERROR(DFE_CANTACCESS, FAIL); if (Hwrite(dd_aid, 14 + info->length_file_name, local_ptbuf) == FAIL) { Hendaccess(dd_aid); HGOTO_ERROR(DFE_WRITEERROR, FAIL); } if (Hendaccess(dd_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); dd_aid = FAIL; /* Update access record and file record */ if ((access_rec->ddid = HTPselect(file_rec, special_tag, ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); access_rec->special_func = &ext_funcs; access_rec->special = SPECIAL_EXT; access_rec->posn = 0; access_rec->access = DFACC_RDWR; access_rec->file_id = file_id; access_rec->appendable = FALSE; /* start data as non-appendable */ file_rec->attach++; ret_value = HAregister_atom(AIDGROUP, access_rec); /* return access id */ done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); if (info != NULL) { free(info->extern_file_name); free(info); access_rec->special_info = NULL; } free(fname); if (data_id != FAIL) HTPendaccess(data_id); } free(buf); return ret_value; } /* HXcreate */ /*------------------------------------------------------------------------ NAME HXPsetaccesstype -- set the I/O access type of the external file USAGE intn HXPsetaccesstype(access_rec) accrec_t *access_rec IN/OUT: access record of the external element RETURNS SUCCEED if no error, else FAIL DESCRIPTION Open the external file according to the access type specified. --------------------------------------------------------------------------*/ intn HXPsetaccesstype(accrec_t *access_rec) { hdf_file_t file_external; /* external file descriptor */ extinfo_t *info; /* special element information */ char *fname = NULL; intn ret_value = SUCCEED; /* clear error stack and validate args */ HEclear(); /* sanity check */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if ((info = (extinfo_t *)access_rec->special_info) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* build the customized external file name. */ if ((fname = HXIbuildfilename(info->extern_file_name, DFACC_OLD)) == NULL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* Open the external file for the correct access type */ switch (access_rec->access_type) { case DFACC_SERIAL: file_external = (hdf_file_t)HI_OPEN(fname, DFACC_WRITE); if (OPENERR(file_external)) { file_external = (hdf_file_t)HI_CREATE(fname); if (OPENERR(file_external)) HGOTO_ERROR(DFE_BADOPEN, FAIL); } free(fname); info->file_external = file_external; extdir_changed = FALSE; /* set to TRUE when HXsetdir is called again */ break; default: HGOTO_ERROR(DFE_BADOPEN, FAIL); } done: if (ret_value == FAIL) { /* Error condition cleanup */ free(fname); } return ret_value; } /* ----------------------------- HXIstaccess ------------------------------ */ /* NAME HXIstaccess -- set up AID to access an ext elem USAGE int32 HXIstaccess(access_rec, acc_mode) access_t * access_rec; IN: access record to fill in int16 acc_mode; IN: access mode RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HXIstread and HXIstwrite resolve to this function. Given an active AID fill in all of the special information. If this information has already been read in for a different element use that else we must go out to the HDF file and pull in the information ourselves ---------------------------------------------------------------------------*/ static int32 HXIstaccess(accrec_t *access_rec, int16 acc_mode) { extinfo_t *info = NULL; /* special element information */ filerec_t *file_rec = NULL; /* file record */ int32 data_off; /* offset of the data we are checking */ uint8 local_ptbuf[12]; /* working buffer */ int32 ret_value = SUCCEED; /* get file record and validate */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec) || !(file_rec->access & acc_mode)) HGOTO_ERROR(DFE_ARGS, FAIL); /* initialize the access record */ access_rec->special = SPECIAL_EXT; access_rec->posn = 0; access_rec->access = (uint32)(acc_mode | DFACC_READ); /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get the special info record */ access_rec->special_info = HIgetspinfo(access_rec); if (access_rec->special_info) { /* found it from other access records */ ((extinfo_t *)access_rec->special_info)->attached++; } else { /* look for information in the file */ if (HPseek(file_rec, data_off + 2) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_read(file_rec, local_ptbuf, 12) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); access_rec->special_info = malloc((uint32)sizeof(extinfo_t)); info = (extinfo_t *)access_rec->special_info; if (info == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); { uint8 *p = local_ptbuf; INT32DECODE(p, info->length); INT32DECODE(p, info->extern_offset); INT32DECODE(p, info->length_file_name); } info->extern_file_name = (char *)malloc((uint32)info->length_file_name + 1); if (!info->extern_file_name) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (HP_read(file_rec, info->extern_file_name, info->length_file_name) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); info->extern_file_name[info->length_file_name] = '\0'; /* delay file opening until needed */ info->file_open = FALSE; info->attached = 1; } file_rec->attach++; ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); if (info != NULL) { /* free file name first */ free(info->extern_file_name); free(info); /* info will only be null if creating a new special_info struct */ access_rec->special_info = NULL; } } return ret_value; } /* HXIstaccess */ /* ------------------------------ HXPstread ------------------------------- */ /* NAME HXPstread -- open an access record for reading USAGE int32 HXPstread(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HXIstaccess to fill in the access rec for reading ---------------------------------------------------------------------------*/ int32 HXPstread(accrec_t *rec) { int32 ret_value; ret_value = HXIstaccess(rec, DFACC_READ); return ret_value; } /* HXPstread */ /* ------------------------------ HXPstwrite ------------------------------- */ /* NAME HXPstwrite -- open an access record for reading USAGE int32 HXPstwrite(access_rec) access_t * access_rec; IN: access record to fill in RETURNS The AID of the access record on success FAIL on error. DESCRIPTION Calls to HXIstaccess to fill in the access rec for writing ---------------------------------------------------------------------------*/ int32 HXPstwrite(accrec_t *rec) { int32 ret_value; ret_value = HXIstaccess(rec, DFACC_WRITE); return ret_value; } /* HXPstwrite */ /* ------------------------------ HXPseek ------------------------------- */ /* NAME HXPseek -- set the seek posn USAGE int32 HXPseek(access_rec, offset, origin) access_t * access_rec; IN: access record to mess with int32 offset; IN: seek offset int32 origin; IN: where we should calc the offset from RETURNS SUCCEED / FAIL DESCRIPTION Set the seek posn in the given external element ---------------------------------------------------------------------------*/ int32 HXPseek(accrec_t *access_rec, int32 offset, int origin) { int32 ret_value = SUCCEED; /* Adjust offset according to origin. there is no upper bound to posn */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += ((extinfo_t *)(access_rec->special_info))->length; if (offset < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* set the offset */ access_rec->posn = offset; done: return ret_value; } /* HXPseek */ /* ------------------------------ HXPread ------------------------------- */ /* NAME HXPread -- read some data out of an external file USAGE int32 HXPseek(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer for data RETURNS The number of bytes read or FAIL on error DESCRIPTION Read in some data from an external file. If length is zero read until the end of the element. It is assumed that the data buffer is big enough to store the data. BUG: Need to investigate what happens if length would take us off the end of what has been written -- should only read until the end. ---------------------------------------------------------------------------*/ int32 HXPread(accrec_t *access_rec, int32 length, void *data) { extinfo_t *info = /* information on the special element */ (extinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate length */ if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* adjust length if it falls off the end of the element */ if ((length == 0) || (access_rec->posn + length > info->length)) length = info->length - access_rec->posn; else if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* if the file is open but external directory is changed (by HXsetdir), then close the file first before making the new file path */ if (!info->file_open || (info->file_open && extdir_changed)) { char *fname; /* if the file is open, close it first */ if (info->file_open) { HI_CLOSE(info->file_external); info->file_open = FALSE; } /* build the customized external file name. */ if ((fname = HXIbuildfilename(info->extern_file_name, DFACC_OLD)) == NULL) HGOTO_ERROR(DFE_BADOPEN, FAIL); info->file_external = (hdf_file_t)HI_OPEN(fname, access_rec->access); free(fname); if (OPENERR(info->file_external)) { HERROR(DFE_BADOPEN); HEreport("Could not find external file %s\n", info->extern_file_name); HGOTO_DONE(FAIL); } info->file_open = TRUE; extdir_changed = FALSE; /* set to TRUE when HXsetdir is called again */ } /* read it in from the file */ { if (HI_SEEK(info->file_external, access_rec->posn + info->extern_offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HI_READ(info->file_external, data, length) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); } /* adjust access position */ access_rec->posn += length; ret_value = length; done: return ret_value; } /* HXPread */ /* ------------------------------ HXPwrite ------------------------------- */ /* NAME HXPwrite -- write some data out to an external file USAGE int32 HXPwrite(access_rec, length, data) access_t * access_rec; IN: access record to mess with int32 length; IN: number of bytes to read void * data; IN: buffer of data RETURNS The number of bytes written or FAIL on error DESCRIPTION Write out some data to an external file. It looks like this will allow us to write to a file even if we only have a read AID for it. Is that really the behavior that we want? ---------------------------------------------------------------------------*/ int32 HXPwrite(accrec_t *access_rec, int32 length, const void *data) { uint8 local_ptbuf[4]; /* temp buffer */ extinfo_t *info = /* information on the special element */ (extinfo_t *)(access_rec->special_info); uint8 *p = local_ptbuf; /* temp buffer ptr */ filerec_t *file_rec; /* file record */ int32 ret_value = SUCCEED; /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); /* validate length */ if (length < 0) HGOTO_ERROR(DFE_RANGE, FAIL); /* if the file is open but external directory is changed (by HXsetdir), then close the file first before making the new file path */ if (!info->file_open || (info->file_open && extdir_changed)) { char *fname; /* if the file is open, close it first */ if (info->file_open) { HI_CLOSE(info->file_external); info->file_open = FALSE; } /* build the customized external file name. */ if ((fname = HXIbuildfilename(info->extern_file_name, DFACC_OLD)) == NULL) HGOTO_ERROR(DFE_BADOPEN, FAIL); info->file_external = (hdf_file_t)HI_OPEN(fname, access_rec->access); free(fname); if (OPENERR(info->file_external)) { HERROR(DFE_BADOPEN); HEreport("Could not find external file %s\n", info->extern_file_name); HGOTO_DONE(FAIL); } info->file_open = TRUE; extdir_changed = FALSE; /* set to TRUE when HXsetdir is called again */ } /* write the data onto file */ { if (HI_SEEK(info->file_external, access_rec->posn + info->extern_offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HI_WRITE(info->file_external, data, length) == FAIL) { /* this external file might not be opened with write permission, reopen the file and try again */ hdf_file_t f = (hdf_file_t)HI_OPEN(info->extern_file_name, DFACC_WRITE); if (OPENERR(f) || HI_SEEK(f, access_rec->posn + info->extern_offset) == FAIL || HI_WRITE(f, data, length) == FAIL) { HI_CLOSE(f); HGOTO_ERROR(DFE_DENIED, FAIL); } HI_CLOSE(info->file_external); /* if okay, substitute the file descriptor */ info->file_external = f; } } /* update access record, and information about special elelemt */ access_rec->posn += length; if (access_rec->posn > info->length) { int32 data_off; /* offset of the data we are checking */ info->length = access_rec->posn; INT32ENCODE(p, info->length); /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HPseek(file_rec, data_off + 2) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, local_ptbuf, 4) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } ret_value = length; /* return length of bytes written */ done: return ret_value; } /* HXPwrite */ /* ------------------------------ HXPinquire ------------------------------ */ /* NAME HXPinquire -- retrieve information about an external element USAGE int32 HXPinquire(access_rec, file, tag, ref, len, off, pos, acc, sp) access_t * access_rec; IN: access record to return info about uint16 * file; OUT: file ID; uint16 * tag; OUT: tag of info record; uint16 * ref; OUT: ref of info record; int32 * len; OUT: length of element; int32 * off; OUT: offset of element (NOT correct); int32 * pos; OUT: current position in element; int16 * acc; OUT: access mode; int16 * sp; OUT: special code; RETURNS SUCCEED DESCRIPTION Return interesting information about an external element. NULL can be passed for any of the OUT parameters if their value is not needed. BUG: The offset returned is not correct. ---------------------------------------------------------------------------*/ int32 HXPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { extinfo_t *info = /* special information record */ (extinfo_t *)access_rec->special_info; uint16 data_tag, data_ref; /* tag/ref of the data we are checking */ int32 ret_value = SUCCEED; /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, &data_tag, &data_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the variables if they are present */ if (pfile_id) *pfile_id = access_rec->file_id; if (ptag) *ptag = data_tag; if (pref) *pref = data_ref; if (plength) *plength = info->length; if (poffset) *poffset = 0; /* meaningless -- actually not anymore */ if (pposn) *pposn = access_rec->posn; if (paccess) *paccess = (int16)access_rec->access; if (pspecial) *pspecial = (int16)access_rec->special; done: return ret_value; } /* HXPinquire */ /* ----------------------------- HXPendaccess ----------------------------- */ /* NAME HXPendacess -- close file, free AID USAGE intn HXPendaccess(access_rec) access_t * access_rec; IN: access record to close RETURNS SUCCEED / FAIL DESCRIPTION Close the file pointed to by the current AID and free the AID ---------------------------------------------------------------------------*/ intn HXPendaccess(accrec_t *access_rec) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* validate argument */ if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* convert file id to file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* close the file pointed to by this access rec */ if (HXPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); /* update file and access records */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* detach from the file */ file_rec->attach--; /* free the access record */ HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* HXPendaccess */ /* ----------------------------- HXPcloseAID ------------------------------ */ /* NAME HXPcloseAID -- close file but keep AID active USAGE int32 HXPcloseAID(access_rec) access_t * access_rec; IN: access record of file to close RETURNS SUCCEED / FAIL DESCRIPTION close the file currently being pointed to by this AID but do *NOT* free the AID. This is called by Hnextread() which reuses an AID to point to the 'next' object as requested. If the current object was an external object, the external file needs to be closed before all reference to it is lost. ---------------------------------------------------------------------------*/ int32 HXPcloseAID(accrec_t *access_rec) { extinfo_t *info = /* special information record */ (extinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* detach the special information record. If no more references to that, free the record */ if (--(info->attached) == 0) { if (info->file_open) HI_CLOSE(info->file_external); free(info->extern_file_name); free(info); access_rec->special_info = NULL; } return ret_value; } /* HXPcloseAID */ /* ------------------------------- HXPinfo -------------------------------- */ /* NAME HXPinfo -- return info about an external element USAGE int32 HXPinfo(access_rec, info_block) accrec_t * access_rec; IN: access record of element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Return information about the given external element. Info_block is assumed to be non-NULL. Do not make a copy of the path, just have the info_block copy point to our local copy. --------------------------------------------------------------------------- */ int32 HXPinfo(accrec_t *access_rec, sp_info_block_t *info_block) { extinfo_t *info = /* special information record */ (extinfo_t *)access_rec->special_info; int32 ret_value = SUCCEED; /* validate access record */ if (access_rec->special != SPECIAL_EXT) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* fill in the info_block */ info_block->key = SPECIAL_EXT; info_block->offset = info->extern_offset; info_block->length = info->length; info_block->length_file_name = info->length_file_name; info_block->path = info->extern_file_name; done: return ret_value; } /* HXPinfo */ /* ------------------------------- HXPreset ------------------------------- */ /* NAME HXPreset -- replace the current external info with new info USAGE int32 HXPreset(access_rec, info_block) accrec_t * access_rec; IN: access record of element sp_info_block_t * info_block; IN: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Reset information about the given external element. Info_block is assumed to be non-NULL. Basically, what this routine does is throw out the old file information for a special element and replaces it with a new file name. This is useful for when a file has changed places. The offset and length are assumed to be the same. ---------------------------------------------------------------------------*/ int32 HXPreset(accrec_t *access_rec, sp_info_block_t *info_block) { filerec_t *file_rec; /* file record */ uint8 local_ptbuf[14 + MAX_PATH_LEN]; /* temp buffer */ extinfo_t *info = /* special information record */ (extinfo_t *)access_rec->special_info; int32 new_len, new_off; /* new length & offset of the special info */ int32 ret_value = SUCCEED; /* validate access record -- make sure is already external element */ if (access_rec->special != SPECIAL_EXT) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* just replace with other external element info for now */ /* (i.e., this can not change the type of special element */ if (info_block->key != SPECIAL_EXT) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check validity of file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* update our internal pointers */ info->extern_offset = info_block->offset; free(info->extern_file_name); info->extern_file_name = (char *)strdup(info_block->path); if (!info->extern_file_name) HGOTO_ERROR(DFE_NOSPACE, FAIL); info->length_file_name = (int32)strlen(info->extern_file_name); /* * delete the existing tag / ref object * accomplish this by changing the offset and length of the existing * special element DD and writing it in a new place */ new_len = 14 + info->length_file_name; if ((new_off = HPgetdiskblock(file_rec, new_len, TRUE)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* write the new external file record */ { uint8 *p = local_ptbuf; INT16ENCODE(p, SPECIAL_EXT); INT32ENCODE(p, info->length); INT32ENCODE(p, info->extern_offset); INT32ENCODE(p, info->length_file_name); strcpy((char *)p, (char *)info->extern_file_name); } /* write out the new external file record */ if (HP_write(file_rec, local_ptbuf, new_len) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* update the DD block in the file */ if (HTPupdate(access_rec->ddid, new_off, new_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: if (ret_value == FAIL) { /* Error condition cleanup */ /* info changes are not reversible and access_rec->special_info was not created here */ } return ret_value; } /* HXPreset */ /*------------------------------------------------------------------------ NAME HXsetcreatedir -- set the directory variable for creating external file USAGE intn HXsetcreatedir(dir) const char *dir IN: directory for creating external file RETURNS SUCCEED if no error, else FAIL DESCRIPTION Set up the directory variable for creating external file. The directory content is copied into HXsetcreatedir area. If dir is NULL, the directory variable is unset. If error encountered during setup, previous value of createdir is not changed. FORTRAN hxscdir --------------------------------------------------------------------------*/ intn HXsetcreatedir(const char *dir) { char *pt; intn ret_value = SUCCEED; if (dir) { if (!(pt = strdup(dir))) HGOTO_ERROR(DFE_NOSPACE, FAIL); } else pt = NULL; /* will reset extcreatedir to NULL */ free(extcreatedir); extcreatedir = pt; done: return ret_value; } /* HXsetcreatedir */ /*------------------------------------------------------------------------ NAME HXsetdir -- set the directory variable for locating external file USAGE intn HXsetdir(dir) const char *dir IN: directory for locating external file RETURNS SUCCEED if no error, else FAIL DESCRIPTION Set up the directory variable for locating external file. It can contain multiple directories separated by colons. The directory content is copied into HXsetdir area. If dir is NULL, the directory variable is unset. If error encountered during setup, previous value of extdir is not changed. FORTRAN hxsdir --------------------------------------------------------------------------*/ intn HXsetdir(const char *newdir) { char *pt = NULL; intn ret_value = SUCCEED; if (newdir == NULL) { if (extdir != NULL) { free(extdir); extdir = NULL; extdir_changed = TRUE; } } else { if (!(pt = strdup(newdir))) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (extdir != NULL) { if (!strcmp(newdir, extdir)) extdir_changed = FALSE; else { free(extdir); extdir = pt; extdir_changed = TRUE; } } else { extdir = pt; extdir_changed = TRUE; } } done: return ret_value; } /* HXsetdir */ /* ------------------------------- HXIbuildfilename ------------------------------- */ /* NAME HXIbuildfilename -- Build the Filename for the External Element USAGE char* HXIbuildfilename(char *ext_fname, const intn acc_mode) char * ext_fname; IN: external filename as stored intn acc_mode; IN: access mode RETURNS finalpath / NULL DESCRIPTION Compose the external object file name. [More detail later.] ---------------------------------------------------------------------------*/ /* the following can be sped up by doing my own copying instead of scanning */ /* for end-of-line two extra times, or even use memcpy since the string lengths */ /* are calculated already. For now, it works. */ #define strcpy3(s1, s2, s3, s4) (strcat(strcat(strcpy(s1, s2), s3), s4)) #define strcpy4(s1, s2, s3, s4, s5) (strcat(strcat(strcat(strcpy(s1, s2), s3), s4), s5)) static char * HXIbuildfilename(const char *ext_fname, const intn acc_mode) { int fname_len; /* string length of the ext_fname */ int path_len; /* string length of prepend pathname */ static int firstinvoked = 1; /* true if invoked the first time */ char *finalpath = NULL; /* Final pathname to return */ const char *fname = NULL; struct stat filestat; /* for checking pathname existence */ char *ret_value = NULL; /* FAIL */ /* initialize HDFEXTDIR and HDFCREATEDIR if invoked the first time */ if (firstinvoked) { firstinvoked = 0; HDFEXTCREATEDIR = getenv("HDFEXTCREATEDIR"); HDFEXTDIR = getenv("HDFEXTDIR"); } if (!ext_fname) HGOTO_ERROR(DFE_ARGS, NULL); fname = ext_fname; /* get the space for the final pathname */ if (!(finalpath = malloc(MAX_PATH_LEN))) HGOTO_ERROR(DFE_NOSPACE, NULL); fname_len = (int)strlen(fname); switch (acc_mode) { case DFACC_CREATE: { /* Creating a new external element */ if (*fname == DIR_SEPC) { /* Absolute Pathname */ ret_value = (strcpy(finalpath, fname)); goto done; } else { /* Relative Pathname */ /* try function variable */ if (extcreatedir) { path_len = (int)strlen(extcreatedir); if (fname_len + 1 + path_len + 1 > MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); ret_value = (strcpy3(finalpath, extcreatedir, DIR_SEPS, fname)); goto done; } /* try Environment Variable */ if (HDFEXTCREATEDIR) { path_len = (int)strlen(HDFEXTCREATEDIR); if (fname_len + 1 + path_len + 1 > MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); ret_value = (strcpy3(finalpath, HDFEXTCREATEDIR, DIR_SEPS, fname)); goto done; } /* try Head File Directory */ /* Don't have Head File information now. Continue */ /* Just return the ext_fname */ ret_value = (strcpy(finalpath, fname)); goto done; } /* break; */ } /*DFACC_CREATE */ case DFACC_OLD: { /* Locating an old external element */ if (*fname == DIR_SEPC) { /* Absolute Pathname */ if (stat(fname, &filestat) == 0) { ret_value = (strcpy(finalpath, fname)); goto done; } else if (!extdir && !HDFEXTDIR) { HGOTO_ERROR(DFE_FNF, NULL); } /* strip the pathname component */ fname = strrchr(fname, DIR_SEPC) + 1; fname_len = (int)strlen(fname); /* continue to Relative Pathname */ } /* Relative Pathname */ { char *dir_pt, *path_pt; /* temporary pointers */ /* try function variable */ if (extdir) { dir_pt = extdir; while (*dir_pt) { /* extract one extdir component to finalpath */ path_len = 0; path_pt = finalpath; while (*dir_pt && *dir_pt != DIR_PATH_SEPC) { if (path_len >= MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); *path_pt++ = *dir_pt++; path_len++; } if (*dir_pt == DIR_PATH_SEPC) dir_pt++; *path_pt++ = DIR_SEPC; path_len++; if (fname_len + path_len + 1 > MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); strcpy(path_pt, fname); if (stat(finalpath, &filestat) == 0) { ret_value = finalpath; goto done; } } } /* try Environment Variable */ if (HDFEXTDIR) { dir_pt = HDFEXTDIR; while (*dir_pt) { /* extract one HDFEXTDIR component to finalpath */ path_len = 0; path_pt = finalpath; while (*dir_pt && *dir_pt != DIR_PATH_SEPC) { if (path_len >= MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); *path_pt++ = *dir_pt++; path_len++; } if (*dir_pt == DIR_PATH_SEPC) dir_pt++; *path_pt++ = DIR_SEPC; path_len++; if (fname_len + path_len + 1 > MAX_PATH_LEN) HGOTO_ERROR(DFE_NOSPACE, NULL); strcpy(path_pt, fname); if (stat(finalpath, &filestat) == 0) { ret_value = finalpath; goto done; } } } /* try Head File Directory */ /* Don't have Head File information now. Continue */ /* See if the file exists */ if (stat(fname, &filestat) == 0) { ret_value = (strcpy(finalpath, fname)); goto done; } /* All have failed */ ret_value = NULL; goto done; } /* break; */ } /* DFACC_OLD */ default: free(finalpath); HGOTO_ERROR(DFE_ARGS, NULL); } done: if (ret_value == NULL) free(finalpath); return ret_value; } /* HXIbuildfilename */ /*------------------------------------------------------------------------ NAME HXPshutdown -- free any memory buffers we've allocated USAGE intn HXPshutdown() RETURNS SUCCEED/FAIL DESCRIPTION Free buffers we've allocated during the execution of the program. --------------------------------------------------------------------------*/ intn HXPshutdown(void) { free(extcreatedir); extcreatedir = NULL; free(extdir); extdir = NULL; HDFEXTCREATEDIR = NULL; HDFEXTDIR = NULL; return SUCCEED; } /* end HXPshutdown() */ hdf4-hdf4.3.1/hdf/src/hfile.c000066400000000000000000003614151503061704500156240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*+ FILE hfile.c HDF low level file I/O routines H-Level Limits ============== o MAX_ACC access records open at a single time (#define in hfile_priv.h) o int16 total tags (fixed) o int32 max length and offset of an element in an HDF file (fixed) Routine prefix conventions ========================== HP: private, external HI: private, static HD: not-private, external (i.e. usable by non-developers) "A" will be used to indicate that a routine is for parallel I/O. Prefixes now have potentially three parts: (1) the interface, (2) optional "A" to indicate parallel, and (3) scope: :== ||A :== H|HL|HX|SD|DFSD|DFAN|DFR8|... :== D|P|I Examples: HAP => H interface, parallel, private external HAD => H interface, parallel, non-private external HI => H interface, private static EXPORTED ROUTINES Hopen -- open or create a HDF file Hclose -- close HDF file Hstartread -- locate and position a read access elt on a tag/ref Hnextread -- locate and position a read access elt on next tag/ref. Hexist -- locate an object in an HDF file Hinquire -- inquire stats of an access elt Hstartwrite -- set up a WRITE access elt for a write Happendable -- attempt make a dataset appendable Hseek -- position an access element to an offset in data element Hread -- read the next segment from data element Hwrite -- write next data segment to data element HDgetc -- read a byte from data element HDputc -- write a byte to data element Hendaccess -- to dispose of an access element Hgetelement -- read in a data element Hputelement -- writes a data element Hlength -- returns length of a data element Hoffset -- get offset of data element in the file Hishdf -- tells if a file is an HDF file Htrunc -- truncate a dataset to a length Hsync -- sync file with memory Hcache -- set low-level caching for a file HDvalidfid -- check if a file ID is valid HDerr -- Closes a file and return FAIL. Hsetacceesstype -- set the I/O access type (serial, parallel, ...) of a data element Hgetlibversion -- return version info on current HDF library Hgetfileversion -- return version info on HDF file HPgetdiskblock -- Get the offset of a free block in the file. HPfreediskblock -- Release a block in a file to be reused. HDread_drec -- reads a description record HDcheck_empty -- determines if an element has been written with data HDget_special_info -- get information about a special element HDset_special_info -- reset information about a special element HDspecial_type -- return the special type if the given element is special File Memory Pool routines ------------------------- Hmpset -- set pagesize and maximum number of pages to cache on next open/create Hmpget -- get last pagesize and max number of pages cached for open/create Special Tag routines ------------------- HDmake_special_tag -- HDis_special_tag -- HDbaset_tag -- Macintosh specific Routines(unbuffered C I/O stubs on top of Mac toolbox) -------------------------- mopen -- mclose -- mread -- mwrite -- mlsekk -- LOCAL ROUTINES HIextend_file -- extend file to current length HIget_function_table -- create special function table HIgetspinfo -- return special info HIunlock -- unlock a previously locked file record HIget_filerec_node -- locate a filerec for a new file HIrelease_filerec_node -- release a filerec HIvalid_magic -- verify the magic number in a file HIget_access_rec -- allocate a new access record HIupdate_version -- determine whether new version tag should be written HIread_version -- reads a version tag from a file + */ #include #include "hdf_priv.h" #include "hfile_priv.h" #include "glist_priv.h" /* for double-linked lists, stacks and queues */ /*--------------------- Locally defined Globals -----------------------------*/ /* The default state of the file DD caching */ static intn default_cache = TRUE; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; static Generic_list *cleanup_list = NULL; /* Whether to install the atexit routine */ static intn install_atexit = TRUE; /* Pointer to the access record node free list */ static accrec_t *accrec_free_list = NULL; #ifdef DISKBLOCK_DEBUG const uint8 diskblock_header[4] = {0xde, 0xad, 0xbe, 0xef}; const uint8 diskblock_tail[4] = {0xfe, 0xeb, 0xda, 0xed}; #endif /*--------------------- Externally defined Globals --------------------------*/ /* Function tables declarations. These function tables contain pointers to functions that help access each type of special element. */ /* Functions for accessing the linked block special data element. For definition of the linked block, see hblocks.c. */ extern funclist_t linked_funcs; /* Functions for accessing external data elements, or data elements that are in some other files. For definition of the external data element, see hextelt.c. */ extern funclist_t ext_funcs; /* Functions for accessing compressed data elements. For definition of the compressed data element, see hcomp.c. */ extern funclist_t comp_funcs; /* Functions for accessing chunked data elements. For definition of the chunked data element, see hchunk.c. */ #include "hchunks_priv.h" /* Functions for accessing buffered data elements. For definition of the buffered data element, see hbuffer.c. */ extern funclist_t buf_funcs; /* Functions for accessing compressed raster data elements. For definition of the compressed raster data element, see hcompri.c. */ extern funclist_t cr_funcs; /* Table of these function tables for accessing special elements. The first member of each record is the special code for that type of data element. */ functab_t functab[] = { {SPECIAL_LINKED, &linked_funcs}, {SPECIAL_EXT, &ext_funcs}, {SPECIAL_COMP, &comp_funcs}, {SPECIAL_CHUNKED, &chunked_funcs}, {SPECIAL_BUFFERED, &buf_funcs}, {SPECIAL_COMPRAS, &cr_funcs}, {0, NULL} /* terminating record; add new record */ /* before this line */ }; /* ** Declaration of private functions. */ static intn HIunlock(filerec_t *file_rec); static filerec_t *HIget_filerec_node(const char *path); static intn HIrelease_filerec_node(filerec_t *file_rec); static intn HIvalid_magic(hdf_file_t file); static intn HIextend_file(filerec_t *file_rec); static funclist_t *HIget_function_table(accrec_t *access_rec); static intn HIupdate_version(int32); static intn HIread_version(int32); static intn HIcheckfileversion(int32 file_id); static intn HIsync(filerec_t *file_rec); static intn HIstart(void); /*-------------------------------------------------------------------------- NAME Hopen -- Opens or creates an HDF file. USAGE int32 Hopen(path, access, ndds) char *path; IN: Name of file to be opened. int access; IN: DFACC_READ, DFACC_WRITE, DFACC_CREATE or any bitwise-or of the above. int16 ndds; IN: Number of dds in a block if this file needs to be created. RETURNS On success returns file id, on failure returns -1. DESCRIPTION Opens an HDF file. Returns the the file ID on success, or -1 on failure. Access equals DFACC_CREATE means discard existing file and create new file. If access is a bitwise-or of DFACC_CREATE and anything else, the file is only created if it does not exist. DFACC_WRITE set in access also means that if the file does not exist, it is created. DFACC_READ is assumed to be implied even if it is not set. DFACC_CREATE implies DFACC_WRITE. If the file is already opened and access is DFACC_CREATE: error DFE_ALROPEN. If the file is already opened, the requested access contains DFACC_WRITE, and previous open does not allow write: attempt to reopen the file with write permission. On successful exit, * file_rec members are filled in correctly. * file is opened with the relevant permission. * information about dd's are set up in memory. For new file, in addition, * the file headers and initial information are set up properly. --------------------------------------------------------------------------*/ int32 Hopen(const char *path, intn acc_mode, int16 ndds) { filerec_t *file_rec = NULL; /* File record */ int vtag = 0; /* write version tag? */ int32 fid = FAIL; /* File ID */ int32 ret_value = SUCCEED; /* Clear errors and check args and all the boring stuff. */ HEclear(); if (!path || ((acc_mode & DFACC_ALL) != acc_mode)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (HIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Get a space to put the file information. * HIget_filerec_node() also copies path into the record. */ if ((file_rec = HIget_filerec_node(path)) == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* The slots are full. */ if (file_rec->refcount) { /* File is already opened, check that permission is okay. */ /* If this request is to create a new file and file is still * in use, return error. */ if (acc_mode == DFACC_CREATE) HGOTO_ERROR(DFE_ALROPEN, FAIL); if ((acc_mode & DFACC_WRITE) && !(file_rec->access & DFACC_WRITE)) { /* If the request includes writing, and if original open does not provide for write, then try to reopen file for writing. This cannot be done on OS (such as the SXOS) where only one open is allowed per file at any time. */ hdf_file_t f; /* Sync. the file before throwing away the old file handle */ if (HIsync(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); f = (hdf_file_t)HI_OPEN(file_rec->path, acc_mode); if (OPENERR(f)) HGOTO_ERROR(DFE_DENIED, FAIL); /* Replace file_rec->file with new file pointer and close old one. */ if (HI_CLOSE(file_rec->file) == FAIL) { HI_CLOSE(f); HGOTO_ERROR(DFE_CANTCLOSE, FAIL); } file_rec->file = f; file_rec->f_cur_off = 0; file_rec->last_op = H4_OP_UNKNOWN; } /* There is now one more open to this file. */ file_rec->refcount++; } else { /* Flag to see if file is new and needs to be set up. */ intn new_file = FALSE; /* Open the file, fill in the blanks and all the good stuff. */ if (acc_mode != DFACC_CREATE) { /* try to open existing file */ file_rec->file = (hdf_file_t)HI_OPEN(file_rec->path, acc_mode); if (OPENERR(file_rec->file)) { if (acc_mode & DFACC_WRITE) { /* Seems like the file is not there, try to create it. */ new_file = TRUE; } else HGOTO_ERROR(DFE_BADOPEN, FAIL); } else { /* Open existing file successfully. */ file_rec->access = acc_mode | DFACC_READ; /* Check to see if file is a HDF file. */ if (!HIvalid_magic(file_rec->file)) { HI_CLOSE(file_rec->file); HGOTO_ERROR(DFE_NOTDFFILE, FAIL); } file_rec->f_cur_off = 0; file_rec->last_op = H4_OP_UNKNOWN; /* Read in all the relevant data descriptor records. */ if (HTPstart(file_rec) == FAIL) { HI_CLOSE(file_rec->file); HGOTO_ERROR(DFE_BADOPEN, FAIL); } } } /* do *not* use else here */ if (acc_mode == DFACC_CREATE || new_file) { /* create the file */ /* make user we get a version tag */ vtag = 1; file_rec->file = (hdf_file_t)HI_CREATE(file_rec->path); if (OPENERR(file_rec->file)) { /* check if the failure was due to "too many open files" */ if (errno == EMFILE) { HGOTO_ERROR(DFE_TOOMANY, FAIL); } else HGOTO_ERROR(DFE_BADOPEN, FAIL); } file_rec->f_cur_off = 0; file_rec->last_op = H4_OP_UNKNOWN; /* set up the newly created (and empty) file with the magic cookie and initial data descriptor records */ if (HP_write(file_rec, HDFMAGIC, MAGICLEN) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (HI_FLUSH(file_rec->file) == FAIL) /* flush the cookie */ HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (HTPinit(file_rec, ndds) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); file_rec->maxref = 0; file_rec->access = new_file ? acc_mode | DFACC_READ : DFACC_ALL; } file_rec->refcount = 1; file_rec->attach = 0; /* currently, default is caching OFF */ file_rec->cache = default_cache; file_rec->dirty = 0; /* mark all dirty flags off to start */ } /* end else */ file_rec->version_set = FALSE; if ((fid = HAregister_atom(FIDGROUP, file_rec)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* version tags */ if (vtag == 1) { if (HIupdate_version(fid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else { HIread_version(fid); /* ignore return code in case the file doesn't have a version */ } /* end else */ ret_value = fid; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (fid != FAIL) HAremove_atom(fid); /* Chuck the file record we've built */ if (file_rec != NULL && file_rec->refcount == 0) HIrelease_filerec_node(file_rec); } return ret_value; } /* Hopen */ /*-------------------------------------------------------------------------- NAME Hclose -- close HDF file USAGE intn Hclose(id) int id; IN: the file id to be closed RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION closes an HDF file given the file id. Id is first validated. If there are still access objects attached to the file, an error is returned and the file is not closed. --------------------------------------------------------------------------*/ intn Hclose(int32 file_id) { filerec_t *file_rec; /* file record pointer */ intn ret_value = SUCCEED; /* Clear errors and check args and all the boring stuff. */ HEclear(); /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* version tags */ if ((file_rec->refcount > 0) && (file_rec->version.modified == 1)) HIupdate_version(file_id); /* decrease the reference count */ if (--file_rec->refcount == 0) { /* if file reference count is zero but there are still attached access elts, reject this close. */ if (file_rec->attach > 0) { file_rec->refcount++; HEreport("There are still %d active aids attached", file_rec->attach); HGOTO_ERROR(DFE_OPENAID, FAIL); } /* end if */ /* before closing file, check whether to flush file info */ if (HIsync(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* otherwise, nothing should still be using this file, close it */ /* ignore any close error */ HI_CLOSE(file_rec->file); if (HTPend(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HIrelease_filerec_node(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ if (HAremove_atom(file_id) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Hclose */ /*-------------------------------------------------------------------------- NAME Hexist -- locate an object in an HDF file USAGE intn Hexist(file_id ,search_tag, search_ref) int32 file_id; IN: file ID to search in uint16 search_tag; IN: the tag to search for (can be DFTAG_WILDCARD) uint16 search_ref; IN: ref to search for (can be DFREF_WILDCARD) RETURNS returns SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Simple interface to Hfind which just determines if a given tag/ref pair exists in a file. Wildcards apply. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Hfind() does all validity checking, this is just a _very_ simple wrapper around it. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hexist(int32 file_id, uint16 search_tag, uint16 search_ref) { uint16 find_tag = 0, find_ref = 0; int32 find_offset, find_length; intn ret_value; ret_value = (Hfind(file_id, search_tag, search_ref, &find_tag, &find_ref, &find_offset, &find_length, DF_FORWARD)); return ret_value; } /* end Hexist() */ /*-------------------------------------------------------------------------- NAME Hinquire -- inquire stats of an access elt USAGE intn Hinquire(access_id, pfile_id, ptag, pref, plength, poffset, pposn, paccess, pspecial) int access_id; IN: id of an access elt int32 *pfile_id; OUT: file id uint16 *ptag; OUT: tag of the element pointed to uint16 *pref; OUT: ref of the element pointed to int32 *plength; OUT: length of the element pointed to int32 *poffset; OUT: offset of elt in the file int32 *pposn; OUT: position pointed to within the data elt int16 *paccess; OUT: the access type of this access elt int16 *pspecial; OUT: special code RETURNS returns SUCCEED (0) if the access elt points to some data element, otherwise FAIL (-1) DESCRIPTION Inquire statistics of the data element pointed to by access elt and the access elt. The access type is set if the access_id is valid even if FAIL is returned. If access_id is not valid then access is set to zero (0). If statistic is not needed, pass NULL for the appropriate value. --------------------------------------------------------------------------*/ intn Hinquire(int32 access_id, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { accrec_t *access_rec; /* access record */ intn ret_value = SUCCEED; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* if special elt, let special functions handle it */ if (access_rec->special) { ret_value = (int)(*access_rec->special_func->inquire)(access_rec, pfile_id, ptag, pref, plength, poffset, pposn, paccess, pspecial); goto done; } if (pfile_id != NULL) *pfile_id = access_rec->file_id; /* Get the relevant DD information */ if (HTPinquire(access_rec->ddid, ptag, pref, poffset, plength) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (pposn != NULL) *pposn = access_rec->posn; if (paccess != NULL) *paccess = (int16)access_rec->access; if (pspecial != NULL) *pspecial = 0; done: return ret_value; } /* end Hinquire */ /* ----------------------------- Hfidinquire ----------------------------- */ /* ** NAME ** Hfidinquire --- Inquire about a file ID ** USAGE ** int Hfidinquire(file_id) ** int32 file_id; IN: handle of file ** char *path; OUT: path of file ** int32 mode; OUT: mode file is opened with ** RETURNS ** returns SUCCEED (0) if successful and FAIL (-1) if failed. ** DESCRIPTION ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS --------------------------------------------------------------------------*/ intn Hfidinquire(int32 file_id, char **fname, intn *faccess, intn *attach) { filerec_t *file_rec; intn ret_value = SUCCEED; HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_BADACC, FAIL); *fname = file_rec->path; *faccess = file_rec->access; *attach = file_rec->attach; done: return ret_value; } /* Hfidinquire */ /*-------------------------------------------------------------------------- NAME Hstartread -- locate and position a read access elt on a tag/ref USAGE int32 Hstartread(fileid, tag, ref) int fileid; IN: id of file to attach access element to int tag; IN: tag to search for int ref; IN: ref to search for RETURNS returns id of access element if successful, otherwise FAIL (-1) DESCRIPTION Searches the DD's for a particular tag/ref combination. The searching starts from the head of the DD list. Wildcards can be used for tag or ref (DFTAG_WILDCARD, DFREF_WILDCARD) and they match any values. If the search is successful, the access elt is positioned to the start of that tag/ref, otherwise it is an error. An access element is created and attached to the file. --------------------------------------------------------------------------*/ int32 Hstartread(int32 file_id, uint16 tag, uint16 ref) { int32 ret; /* AID to return */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Call Hstartaccess with the modified base tag */ if ((ret = Hstartaccess(file_id, BASETAG(tag), ref, DFACC_READ)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); ret_value = ret; done: return ret_value; } /* Hstartread() */ /*-------------------------------------------------------------------------- NAME Hnextread -- locate and position a read access elt on tag/ref. USAGE intn Hnextread(access_id, tag, ref, origin) int32 access_id; IN: id of a READ access elt uint16 tag; IN: the tag to search for uint16 ref; IN: ref to search for int origin; IN: from where to start searching RETURNS returns SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Searches for the `next' DD that fits the tag/ref. Wildcards apply. If origin is DF_START, search from start of DD list, if origin is DF_CURRENT, search from current position, otherwise origin should be DF_END which searches from end of file. If the search is successful, then the access elt is positioned at the start of that tag/ref, otherwise, it is not modified. COMMENTS, BUGS, ASSUMPTIONS DF_END _not_ supported yet! --------------------------------------------------------------------------*/ intn Hnextread(int32 access_id, uint16 tag, uint16 ref, intn origin) { filerec_t *file_rec; /* file record */ accrec_t *access_rec; /* access record */ uint16 new_tag = 0, new_ref = 0; /* new tag & ref to access */ int32 new_off, new_len; /* offset & length of new tag & ref */ intn ret_value = SUCCEED; /* clear error stack and check validity of the access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || !(access_rec->access & DFACC_READ) || (origin != DF_START && origin != DF_CURRENT)) /* DF_END is NOT supported yet !!!! */ HGOTO_ERROR(DFE_ARGS, FAIL); file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* * if access record used to point to an external element we * need to close the file before moving on */ if (access_rec->special) { switch (access_rec->special) { case SPECIAL_LINKED: if (HLPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); break; case SPECIAL_EXT: if (HXPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); break; case SPECIAL_COMP: if (HCPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); break; case SPECIAL_CHUNKED: if (HMCPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); break; case SPECIAL_BUFFERED: if (HBPcloseAID(access_rec) == FAIL) HGOTO_ERROR(DFE_CANTCLOSE, FAIL); break; default: /* do nothing for other cases currently */ break; } /* end switch */ } if (origin == DF_START) { /* set up variables to start searching from beginning of file */ new_tag = 0; new_ref = 0; } else { /* origin == CURRENT */ /* set up variables to start searching from the current position */ /* Get the old tag & ref */ if (HTPinquire(access_rec->ddid, &new_tag, &new_ref, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* go look for the dd */ if (Hfind(access_rec->file_id, tag, ref, &new_tag, &new_ref, &new_off, &new_len, DF_FORWARD) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Let go of the previous DD id */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); /* found, so update the access record */ if ((access_rec->ddid = HTPselect(file_rec, new_tag, new_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); access_rec->appendable = FALSE; /* start data as non-appendable */ if (new_len == INVALID_OFFSET && new_off == INVALID_LENGTH) access_rec->new_elem = TRUE; else access_rec->new_elem = FALSE; /* If special element act upon it accordingly */ if (HTPis_special(access_rec->ddid)) { int32 spec_aid; /* special element, call special function to handle */ if ((access_rec->special_func = HIget_function_table(access_rec)) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* decrement "attach" to the file_rec */ HIunlock(file_rec); if ((spec_aid = (*access_rec->special_func->stread)(access_rec)) != FAIL) { HAremove_atom(spec_aid); /* This is a gross hack! -QAK */ HGOTO_DONE(SUCCEED); } /* end if */ else { HGOTO_DONE(FAIL); } /* end if */ } access_rec->special = 0; access_rec->posn = 0; done: return ret_value; } /* end Hnextread() */ /*-------------------------------------------------------------------------- NAME Hstartwrite -- set up a WRITE access elt for a write USAGE int32 Hstartwrite(fileid, tag, ref, len) int fileid; IN: id of file to write to int tag; IN: tag to write to int ref; IN: ref to write to long length; IN: the length of the data element RETURNS returns id of access element if successful and FAIL otherwise DESCRIPTION Set up a WRITE access elt to write out a data element. The DD list of the file is searched first. If the tag/ref is found, it is NOT replaced - the seek position is presumably at 0. If it does not exist, it is created. --------------------------------------------------------------------------*/ int32 Hstartwrite(int32 file_id, uint16 tag, uint16 ref, int32 length) { accrec_t *access_rec; /* access record */ int32 ret; /* AID to return */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Call Hstartaccess with the modified base tag */ if ((ret = Hstartaccess(file_id, BASETAG(tag), ref, DFACC_RDWR)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); access_rec = HAatom_object(ret); /* if new element set the length */ if (access_rec->new_elem && (Hsetlength(ret, length) == FAIL)) { Hendaccess(ret); HGOTO_ERROR(DFE_BADLEN, FAIL); } /* end if */ ret_value = ret; done: return ret_value; } /* end Hstartwrite */ /*-------------------------------------------------------------------------- NAME Hstartaccess -- set up a access elt for either reading or writing USAGE int32 Hstartaccess(fileid, tag, ref, flags) int32 fileid; IN: id of file to read/write to uint16 tag; IN: tag to read/write to uint16 ref; IN: ref to read/write to uint32 flags; IN: access flags for the data element RETURNS returns id of access element if successful and FAIL otherwise DESCRIPTION Start access to data element for read or write access. The DD list of the file is searched first. If the tag/ref is found, it is NOT replaced - the seek position is presumably at 0. If it does not exist, it is created. --------------------------------------------------------------------------*/ int32 Hstartaccess(int32 file_id, uint16 tag, uint16 ref, uint32 flags) { intn ddnew = FALSE; /* is the dd a new one? */ filerec_t *file_rec = NULL; /* file record */ accrec_t *access_rec = NULL; /* access record */ uint16 new_tag = 0, new_ref = 0; /* new tag & ref to access */ int32 new_off, new_len; /* offset & length of new tag & ref */ int32 ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* If writing, can we write to this file? */ if ((flags & DFACC_WRITE) && !(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_DENIED, FAIL); /* get empty slot in access records */ access_rec = HIget_access_rec(); if (access_rec == NULL) HGOTO_ERROR(DFE_TOOMANY, FAIL); /* set up access record to look for the dd */ access_rec->file_id = file_id; if (flags & DFACC_APPENDABLE) access_rec->appendable = TRUE; /* start data as appendable */ else access_rec->appendable = FALSE; /* start data as non-appendable */ /* set the default values for block size and number of blocks for use in */ /* linked-block creation/conversion; they can be changed by the user via */ /* VSsetblocksize and VSsetnumblocks - BMR (bug #267 - June 2001) */ access_rec->block_size = HDF_APPENDABLE_BLOCK_LEN; access_rec->num_blocks = HDF_APPENDABLE_BLOCK_NUM; access_rec->special_info = NULL; /* reset */ /* if the DFACC_CURRENT flag is set, start searching for the tag/ref from */ /* the current location in the DD list */ if (flags & DFACC_CURRENT || Hfind(access_rec->file_id, tag, ref, &new_tag, &new_ref, &new_off, &new_len, DF_FORWARD) == FAIL) { /* not in DD list */ new_tag = tag; new_ref = ref; new_off = INVALID_OFFSET; new_len = INVALID_LENGTH; } /* get DD id for tag/ref if in DD list using 'new_tag' and 'new_ref' */ if ((access_rec->ddid = HTPselect(file_rec, new_tag, new_ref)) == FAIL) { /* not in DD list */ /* can't create data elements with only read access */ if (!(flags & DFACC_WRITE)) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* dd not found, so have to create new element */ if ((access_rec->ddid = HTPcreate(file_rec, new_tag, new_ref)) == FAIL) HGOTO_ERROR(DFE_NOFREEDD, FAIL); ddnew = TRUE; /* mark as new element */ } else /* tag/ref already exists in DD list. */ { /* need to update the access_rec block and idx */ /* If the tag we were looking up is special, and we aren't looking */ /* for the actual special element information, then use special */ /* element access to the data... -QAK */ if (!SPECIALTAG(tag) && HTPis_special(access_rec->ddid) == TRUE) { /* found, if this elt is special, let special function handle it */ /* get special function table for element */ access_rec->special_func = HIget_function_table(access_rec); if (access_rec->special_func == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* call appropriate special startread/startwrite fcn */ if (!(flags & DFACC_WRITE)) ret_value = (*access_rec->special_func->stread)(access_rec); else ret_value = (*access_rec->special_func->stwrite)(access_rec); goto done; /* we are done since the special fcn should take of everything. */ } /* end if special */ } /* end else tag/ref exists */ /* Need to check if the "new" element was written to the file without */ /* it's length being set. If that was the case, the offset and length */ /* will be marked as invalid, and therefore we should mark it as "new" */ /* again when the element is re-opened -QAK */ if (!ddnew && new_off == INVALID_OFFSET && new_len == INVALID_LENGTH) ddnew = TRUE; /* mark as new element */ /* update the access record, and the file record */ access_rec->posn = 0; access_rec->access = flags; /* keep the access flags around */ access_rec->file_id = file_id; access_rec->special = 0; /* not special */ access_rec->new_elem = ddnew; /* set the flag indicating whether this elt is new */ file_rec->attach++; /* increment number of elts attached to file */ /* check current maximum ref for file and update if necessary */ if (new_ref > file_rec->maxref) file_rec->maxref = new_ref; /* * If this is the first time we are writing to this file * update the version tags as needed */ if (!file_rec->version_set) HIcheckfileversion(file_id); ret_value = HAregister_atom(AIDGROUP, access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* end Hstartaccess */ /*-------------------------------------------------------------------------- NAME Hsetlength -- set the length of a new HDF element USAGE intn Hsetlength(aid, length) int32 aid; IN: id of element to set the length of int32 length; IN: the length of the element RETURNS SUCCEED/FAIL DESCRIPTION Sets the length of a new data element. This function is only valid when called after Hstartaccess on a new data element and before any data is written to that element. --------------------------------------------------------------------------*/ intn Hsetlength(int32 aid, int32 length) { accrec_t *access_rec; /* access record */ filerec_t *file_rec; /* file record */ int32 offset; /* offset of this data element in file */ intn ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); if ((access_rec = HAatom_object(aid)) == NULL) /* get the access_rec pointer */ HGOTO_ERROR(DFE_ARGS, FAIL); /* Check whether we are allowed to change the length */ if (access_rec->new_elem != TRUE) HGOTO_ERROR(DFE_ARGS, FAIL); file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* place the data element at the end of the file and record its offset */ if ((offset = HPgetdiskblock(file_rec, length, FALSE)) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* fill in dd record updating the offset and length of the element */ if (HTPupdate(access_rec->ddid, offset, length) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* turn off the "new" flag now that we have a length and offset */ access_rec->new_elem = FALSE; done: return ret_value; } /* end Hsetlength */ /*-------------------------------------------------------------------------- NAME Happendable -- Allow a data set to be appended to without the use of linked blocks USAGE intn Happendable(aid) int32 aid; IN: aid of the dataset to make appendable RETURNS returns 0 if dataset is allowed to be appendable, FAIL otherwise DESCRIPTION If a dataset is at the end of a file, allow Hwrite()s to write past the end of a file. Allows expanding datasets without the use of linked blocks. --------------------------------------------------------------------------*/ intn Happendable(int32 aid) { accrec_t *access_rec; /* access record */ intn ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); if ((access_rec = HAatom_object(aid)) == NULL) /* get the access_rec pointer */ HGOTO_ERROR(DFE_ARGS, FAIL); /* just indicate that the data should be appendable, and only convert */ /* it when actually asked to modify the data */ access_rec->appendable = TRUE; done: return ret_value; } /* end Happendable */ /*-------------------------------------------------------------------------- NAME HPisappendable -- Check whether a data set can be appended to without the use of linked blocks USAGE intn HPisappendable(aid) int32 aid; IN: aid of the dataset to check appendable RETURNS returns SUCCEED if dataset is allowed to be appendable, FAIL otherwise DESCRIPTION If a dataset is at the end of a file, allow Hwrite()s to write past the end of a file. Allows expanding datasets without the use of linked blocks. --------------------------------------------------------------------------*/ intn HPisappendable(int32 aid) { accrec_t *access_rec; /* access record */ filerec_t *file_rec; /* file record */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ intn ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); if ((access_rec = HAatom_object(aid)) == NULL) /* get the access_rec pointer */ HGOTO_ERROR(DFE_ARGS, FAIL); file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the offset and length of the dataset */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_len, &data_off) == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); /* dataset at end? */ if (data_len + data_off == file_rec->f_end_off) ret_value = SUCCEED; else ret_value = FAIL; done: return ret_value; } /* end HPisappendable */ /*-------------------------------------------------------------------------- NAME Hseek -- position an access element to an offset in data element USAGE intn Hseek(access_id, offset, origin) int32 access_id; IN: id of access element long offset; IN: offset to seek to int origin; IN: position to seek from by offset, 0: from beginning; 1: current position; 2: end of data element RETURNS returns FAIL (-1) if fail, SUCCEED (0) otherwise. DESCRIPTION Sets the position of an access element in a data element so that the next Hread or Hwrite will start from that position. origin determines the position from which the offset should be added. This routine fails if the access elt is not associated with any data element and if the seeked position is outside of the data element. --------------------------------------------------------------------------*/ intn Hseek(int32 access_id, int32 offset, intn origin) { accrec_t *access_rec; /* access record */ intn old_offset = offset; /* save for later potential use */ filerec_t *file_rec; /* file record */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ intn ret_value = SUCCEED; /* clear error stack and check validity of this access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || (origin != DF_START && origin != DF_CURRENT && origin != DF_END)) HGOTO_ERROR(DFE_ARGS, FAIL); /* if special elt, use special function */ if (access_rec->special) { /* yes, call special seek function with proper args */ ret_value = (intn)(*access_rec->special_func->seek)(access_rec, offset, origin); goto done; } /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* calculate real offset based on the origin */ if (origin == DF_CURRENT) offset += access_rec->posn; if (origin == DF_END) offset += data_len; /* If we aren't moving the access records position, bypass the next bit of code */ /* This allows seeking to offset zero in not-yet-existent data elements -QAK */ if (offset == access_rec->posn) HGOTO_DONE(SUCCEED); /* Check the range */ if (offset < 0 || (!access_rec->appendable && offset > data_len)) { HEreport("Tried to seek to %d (object length: %d)", offset, data_len); HGOTO_ERROR(DFE_BADSEEK, FAIL); } /* check if element is appendable and writing past current element length */ if (access_rec->appendable && offset >= data_len) { /* yes */ file_rec = HAatom_object(access_rec->file_id); /* check if we are at end of file */ if (data_len + data_off != file_rec->f_end_off) { /* nope, so try to convert element into linked-block element */ if (HLconvert(access_id, access_rec->block_size, access_rec->num_blocks) == FAIL) { access_rec->appendable = FALSE; HEreport("Tried to seek to %d (object length: %d)", offset, data_len); HGOTO_ERROR(DFE_BADSEEK, FAIL); } /* end if */ else /* successfully converted the element into a linked block */ /* now loop back and actually seek to the correct position */ { if (Hseek(access_id, old_offset, origin) == FAIL) HGOTO_ERROR(DFE_BADSEEK, FAIL); } /* end else */ } /* end if */ } /* end if */ /* set the new position */ access_rec->posn = offset; done: return ret_value; } /* Hseek() */ /*-------------------------------------------------------------------------- NAME Htell -- report position of an access element in a data element USAGE int32 Htell(access_id) int32 access_id; IN: id of access element RETURNS returns FAIL (-1) on error, offset in data element otherwise DESCRIPTION Reports the offset in bytes of an AID in a data element. Analogous to ftell(). --------------------------------------------------------------------------*/ int32 Htell(int32 access_id) { accrec_t *access_rec; /* access record */ int32 ret_value = SUCCEED; /* clear error stack and check validity of this access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* return the offset in the AID */ ret_value = (int32)access_rec->posn; done: return ret_value; } /* Htell() */ /*-------------------------------------------------------------------------- NAME Hread -- read the next segment from data element USAGE int32 Hread(access_id, length, data) int32 access_id; IN: id of READ access element int32 length; IN: length of segment to read in char *data; OUT: pointer to data array to read to RETURNS returns length of segment actually read in if successful and FAIL (-1) otherwise DESCRIPTION Read in the next segment in the data element pointed to by the access elt. If length is zero or larger than the remaining bytes of the object, read until the end of the object. --------------------------------------------------------------------------*/ int32 Hread(int32 access_id, int32 length, void *data) { filerec_t *file_rec; /* file record */ accrec_t *access_rec; /* access record */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 ret_value = SUCCEED; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Don't allow reading of "new" elements */ if (access_rec->new_elem == TRUE) HGOTO_ERROR(DFE_READERROR, FAIL); /* special elt, so call special function */ if (access_rec->special) { /* yes, call special read function with proper args */ ret_value = (*access_rec->special_func->read)(access_rec, length, data); goto done; /* we are done */ } /* check validity of file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get the dd of this data elt */ if (length < 0) HGOTO_ERROR(DFE_BADSEEK, FAIL); /* Get the data's offset & length */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* seek to position to start reading and read in data */ if (HPseek(file_rec, access_rec->posn + data_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* length == 0 means to read to end of element, */ /* if read length exceeds length of elt, read till end of elt */ if (length == 0 || length + access_rec->posn > data_len) length = data_len - access_rec->posn; /* read in data */ if (HP_read(file_rec, data, length) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* move the position of the access record */ access_rec->posn += length; ret_value = length; done: return ret_value; } /* Hread */ /*-------------------------------------------------------------------------- NAME Hwrite -- write next data segment to data element USAGE int32 Hwrite(access_id, len, data) int32 access_id; IN: id of WRITE access element int32 len; IN: length of segment to write const char *data; IN: pointer to data to write RETURNS returns length of segment successfully written, FAIL (-1) otherwise DESCRIPTION Write the data to data element where the last write or Hseek() stopped. If the space reserved is less than the length to write, then only as much as can fit is written. It is the responsibility of the user to insure that no two access elements are writing to the same data element. It is possible to interlace writes to more than one data elements in the same file though. Calling with length == 0 is an error. --------------------------------------------------------------------------*/ int32 Hwrite(int32 access_id, int32 length, const void *data) { filerec_t *file_rec = NULL; /* file record */ accrec_t *access_rec; /* access record */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 ret_value = SUCCEED; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || !(access_rec->access & DFACC_WRITE) || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* if special elt, call special write function */ if (access_rec->special) { ret_value = (*access_rec->special_func->write)(access_rec, length, data); goto done; /* we are done */ } /* end special */ /* check validity of file record and get dd ptr */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check for a "new" element and make it appendable if so. Does this mean every element is by default appendable? */ if (access_rec->new_elem == TRUE) { Hsetlength(access_id, length); /* make the initial chunk of data */ access_rec->appendable = TRUE; /* make it appendable */ } /* end if */ /* get the offset and length of the element. This should have been set by Hstartwrite(). */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check validity of length and write data. NOTE: it is an error to attempt write past the end of the elt */ if (length <= 0 || (!access_rec->appendable && length + access_rec->posn > data_len)) HGOTO_ERROR(DFE_BADSEEK, FAIL); /* check if element is appendable and write length exceeds current data element length */ if (access_rec->appendable && length + access_rec->posn > data_len) { /* yes */ /* is data element at end of file? hmm. not sure about this condition. */ if (data_len + data_off != file_rec->f_end_off) { /* nope, not at end of file. Try to promote to linked-block element. */ if (HLconvert(access_id, access_rec->block_size, access_rec->num_blocks) == FAIL) { access_rec->appendable = FALSE; HGOTO_ERROR(DFE_BADSEEK, FAIL); } /* end if */ /* successfully converted the element into a linked block */ /* now loop back and actually write the data out */ if ((ret_value = Hwrite(access_id, length, data)) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); goto done; /* we're finished, wrap things up */ } /* end if */ /* Update the DD with the new length. Note argument of '-2' for the offset parameter means not to change the offset in the DD. */ if (HTPupdate(access_rec->ddid, -2, access_rec->posn + length) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ /* seek and write data */ if (HPseek(file_rec, access_rec->posn + data_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, data, length) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* update end of file pointer? */ if (file_rec->f_cur_off > file_rec->f_end_off) file_rec->f_end_off = file_rec->f_cur_off; /* update position of access in elt */ access_rec->posn += length; ret_value = length; done: return ret_value; } /* end Hwrite */ /*-------------------------------------------------------------------------- NAME HDgetc -- read a byte from data element USAGE intn HDgetc(access_id) int access_id; IN: id of READ access element RETURNS returns byte read in from data if successful and FAIL (-1) otherwise DESCRIPTION Calls Hread() to read a single byte and reports errors. --------------------------------------------------------------------------*/ intn HDgetc(int32 access_id) { uint8 c = (uint8)FAIL; /* character read in */ intn ret_value = SUCCEED; if (Hread(access_id, 1, &c) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); ret_value = (intn)c; done: return ret_value; } /* HDgetc */ /*-------------------------------------------------------------------------- NAME USAGE intn HDputc(c,access_id) uint8 c; IN: byte to write out int32 access_id; IN: id of WRITE access element RETURNS returns byte written out to data if successful and FAIL (-1) otherwise DESCRIPTION Calls Hwrite() to write a single byte and reports errors. --------------------------------------------------------------------------*/ intn HDputc(uint8 c, int32 access_id) { intn ret_value = SUCCEED; if (Hwrite(access_id, 1, &c) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); ret_value = (intn)c; done: return ret_value; } /* HDputc */ /*-------------------------------------------------------------------------- NAME Hendaccess -- to dispose of an access element USAGE intn Hendaccess(access_id) int32 access_id; IN: id of access element to dispose of RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Used to dispose of an access element. If access elements are not disposed it will eventually become impossible to allocate new ones and close the file. If there are active aids Hclose will *NOT* close the file. This is a very common problem when developing new code. --------------------------------------------------------------------------*/ intn Hendaccess(int32 access_id) { filerec_t *file_rec; /* file record */ accrec_t *access_rec = NULL; /* access record */ intn ret_value = SUCCEED; /* clear error stack and check validity of access id */ HEclear(); if ((access_rec = HAremove_atom(access_id)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* if special elt, call special function */ if (access_rec->special) { ret_value = (*access_rec->special_func->endaccess)(access_rec); goto done; } /* end if */ /* check validity of file record */ file_rec = HAatom_object(access_rec->file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* update file and access records */ if (HTPendaccess(access_rec->ddid) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); file_rec->attach--; HIrelease_accrec_node(access_rec); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_rec != NULL) HIrelease_accrec_node(access_rec); } return ret_value; } /* Hendaccess */ /*-------------------------------------------------------------------------- NAME Hgetelement -- read in a data element USAGE int32 Hgetelement(file_id, tag, ref, data) int32 file_id; IN: id of the file to read from int16 tag; IN: tag of data element to read int16 ref; IN: ref of data element to read char *data; OUT: buffer to read into RETURNS returns number of bytes read if successful, FAIL (-1) otherwise DESCRIPTION Read in a data element from a HDF file and puts it into buffer pointed to by data. The space allocated for buffer is assumed to be large enough. --------------------------------------------------------------------------*/ int32 Hgetelement(int32 file_id, uint16 tag, uint16 ref, uint8 *data) { int32 access_id = FAIL; /* access record id */ int32 length; /* length of this elt */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the access record, get the length of the elt, read in data, and dispose of access record */ if ((access_id = Hstartread(file_id, tag, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); if ((length = Hread(access_id, (int32)0, data)) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if (Hendaccess(access_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = length; done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_id != FAIL) Hendaccess(access_id); } return ret_value; } /* Hgetelement() */ /*-------------------------------------------------------------------------- NAME Hputelement -- writes a data element USAGE int Hputelement(fileid, tag, ref, data, length) int32 fileid; IN: id of file int16 tag; IN: tag of data element to put int16 ref; IN: ref of data element to put char *data; IN: pointer to buffer int32 length; IN: length of data RETURNS returns length of bytes written if successful and FAIL (-1) otherwise DESCRIPTION Writes a data element or replaces an existing data element in an HDF file. Uses Hwrite and its associated routines. --------------------------------------------------------------------------*/ int32 Hputelement(int32 file_id, uint16 tag, uint16 ref, const uint8 *data, int32 length) { int32 access_id = FAIL; /* access record id */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get access record, write out data and dispose of access record */ if ((access_id = Hstartwrite(file_id, (uint16)tag, (uint16)ref, length)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); if ((ret_value = Hwrite(access_id, length, data)) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (Hendaccess(access_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (access_id != FAIL) Hendaccess(access_id); } return ret_value; } /* end Hputelement() */ /*-------------------------------------------------------------------------- NAME Hlength -- returns length of a data element USAGE int32 Hlength(fileid, tag, ref) int fileid; IN: id of file int tag; IN: tag of data element int ref; IN: ref of data element RETURNS return the length of a data element or FAIL if there is a problem. DESCRIPTION returns length of data element if it is present in the file. Return FAIL (-1) if it is not in the file or an error occurs. The current implementation is probably less efficient than it could be. However, because of special elements the code is much cleaner this way. --------------------------------------------------------------------------*/ int32 Hlength(int32 file_id, uint16 tag, uint16 ref) { int32 access_id; /* access record id */ int32 length = FAIL; /* length of elt inquired */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get access record, inquire about lebngth and then dispose of access record */ access_id = Hstartread(file_id, tag, ref); if (access_id == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); if ((ret_value = HQuerylength(access_id, &length)) == FAIL) HERROR(DFE_INTERNAL); if (Hendaccess(access_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = length; done: return ret_value; } /* end Hlength */ /*-------------------------------------------------------------------------- NAME Hoffset -- get offset of data element in the file USAGE int32 Hoffset(fileid, tag, ref) int32 fileid; IN: id of file uint16 tag; IN: tag of data element uint16 ref; IN: ref of data element RETURNS returns offset of data element if it is present in the file or FAIL (-1) if it is not. DESCRIPTION This should be used for debugging purposes only since the user should not have to know the actual offset of a data element in a file. Like Hlength(). This could be sped up by not going through Hstartread() but because of special elements it is easier this way --------------------------------------------------------------------------*/ int32 Hoffset(int32 file_id, uint16 tag, uint16 ref) { int32 access_id; /* access record id */ int32 offset = FAIL; /* offset of elt inquired */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get access record, inquire offset, and dispose of access record */ access_id = Hstartread(file_id, tag, ref); if (access_id == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); if ((ret_value = HQueryoffset(access_id, &offset)) == FAIL) HERROR(DFE_INTERNAL); if (Hendaccess(access_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = offset; done: return ret_value; } /* Hoffset */ /*-------------------------------------------------------------------------- NAME Hishdf -- tells if a file is an HDF file USAGE intn Hishdf(path) const char *path; IN: name of file RETURNS returns TRUE (non-zero) if file is HDF, FALSE (0) otherwise DESCRIPTION This user level routine can be used to determine if a file with a given name is an HDF file. Note, just because a file is not an HDF file does not imply that all HDF library functions can not work on it. --------------------------------------------------------------------------*/ intn Hishdf(const char *filename) { intn ret; hdf_file_t fp; intn ret_value = TRUE; /* Search for a matching slot in the already open files. */ if (HAsearch_atom(FIDGROUP, HPcompare_filerec_path, filename) != NULL) HGOTO_DONE(TRUE); fp = (hdf_file_t)HI_OPEN(filename, DFACC_READ); if (OPENERR(fp)) { ret_value = FALSE; } else { ret = HIvalid_magic(fp); HI_CLOSE(fp); ret_value = (int)ret; } done: return ret_value; } /* Hishdf */ /*-------------------------------------------------------------------------- NAME Htrunc -- truncate a data element to a length USAGE int32 Htrunc(aid, len) int32 aid; IN: id of file int32 len; IN: length at which to truncate data element RETURNS return the length of a data element DESCRIPTION truncates a data element in the file. Return FAIL (-1) if it is not in the file or an error occurs. --------------------------------------------------------------------------*/ int32 Htrunc(int32 aid, int32 trunc_len) { accrec_t *access_rec; /* access record */ int32 data_len; /* length of the data we are checking */ int32 data_off; /* offset of the data we are checking */ int32 ret_value = SUCCEED; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(aid); if (access_rec == (accrec_t *)NULL || !(access_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Dunno about truncating special elements... -QAK */ #ifdef DONT_KNOW /* if special elt, call special function */ if (access_rec->special) { ret_value = (*access_rec->special_func->write)(access_rec, length, data); goto done; } #endif /* get the offset and length of the dataset */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, &data_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check for actually being able to truncate the data */ if (data_len > trunc_len) { /* set the new length of the dataset. Note value of '-2' for the offset parameter means not to update the offset in the DD.*/ if (HTPupdate(access_rec->ddid, -2, trunc_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (access_rec->posn > trunc_len) /* move the seek position back */ access_rec->posn = trunc_len; ret_value = trunc_len; } /* end if */ else HGOTO_ERROR(DFE_BADLEN, FAIL); done: return ret_value; } /* end Htrunc() */ /*-------------------------------------------------------------------------- NAME HIsync -- sync file with memory USAGE intn HIsync(file_rec) filerec_t *file_rec; IN: file record of file RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION HIsync() performs the actual sync'ing of the file in memory & on disk. NOTE --------------------------------------------------------------------------*/ static intn HIsync(filerec_t *file_rec) { intn ret_value = SUCCEED; /* check whether to flush the file info */ if (file_rec->cache && file_rec->dirty) { /* flush DD blocks if necessary */ if (file_rec->dirty & DDLIST_DIRTY) if (HTPsync(file_rec) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); /* extend the end of the file if necessary */ if (file_rec->dirty & FILE_END_DIRTY) if (HIextend_file(file_rec) == FAIL) HGOTO_ERROR(DFE_CANTFLUSH, FAIL); file_rec->dirty = 0; /* file doesn't need to be flushed now */ } /* end if */ done: return ret_value; } /* HIsync */ /*-------------------------------------------------------------------------- NAME Hsync -- sync file with memory USAGE intn Hsync(file_id) int32 file_id; IN: id of file RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Currently, the on-disk and in-memory representations are always the same. Thus there is no real use for Hsync(). In the future, things may be buffered before being written out at which time Hsync() will be useful to sync up the on-disk representation. NOTE First tests of caching DD's until close. --------------------------------------------------------------------------*/ intn Hsync(int32 file_id) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; /* check validity of file record and get dd ptr */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check whether to flush the file info */ if (HIsync(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Hsync */ /*-------------------------------------------------------------------------- NAME Hcache -- set low-level caching for a file USAGE intn Hcache(file_id,cache_on) int32 file_id; IN: id of file intn cache_on; IN: whether to cache or not RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Set/reset the caching in an HDF file. If file_id is set to CACHE_ALL_FILES, then the value of cache_on is used to modify the default caching state. --------------------------------------------------------------------------*/ intn Hcache(int32 file_id, intn cache_on) { filerec_t *file_rec; /* file record */ intn ret_value = SUCCEED; if (file_id == CACHE_ALL_FILES) /* check whether to modify the default cache */ { /* set the default caching for all further files Hopen'ed */ default_cache = (cache_on != 0 ? TRUE : FALSE); } /* end if */ else { /* check validity of file record and get dd ptr */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* check whether to flush the file info */ if (cache_on == FALSE && file_rec->cache) { if (HIsync(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ file_rec->cache = (cache_on != 0 ? TRUE : FALSE); } /* end else */ done: return ret_value; } /* Hcache */ /*-------------------------------------------------------------------------- NAME HDvalidfid -- check if a file ID is valid USAGE int HDvalidfid(file_id) int32 file_id; IN: id of file RETURNS returns TRUE if valid ID else FALSE DESCRIPTION Determine whether a given int32 is a valid HDF file ID or not --------------------------------------------------------------------------*/ intn HDvalidfid(int32 file_id) { filerec_t *file_rec; intn ret_value = TRUE; /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) ret_value = FALSE; return ret_value; } /* HDvalidfid */ /*-------------------------------------------------------------------------- HDerr -- Closes a file and return FAIL. Replacement for DFIerr in HDF3.1 and before --------------------------------------------------------------------------*/ int HDerr(int32 file_id) { Hclose(file_id); return FAIL; } /*-------------------------------------------------------------------------- NAME Hsetacceesstype -- set the I/O access type (serial, parallel, ...) of a data element USAGE intn Hsetacceesstype(access_id, accesstype) int32 access_id; IN: id of access element uintn accesstype; IN: I/O access type RETURNS returns FAIL (-1) if fail, SUCCEED (0) otherwise. DESCRIPTION Set the type of I/O for accessing the data element to accesstype. --------------------------------------------------------------------------*/ intn Hsetaccesstype(int32 access_id, uintn accesstype) { accrec_t *access_rec; /* access record */ intn ret_value = SUCCEED; /* clear error stack and check validity of this access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (accesstype != DFACC_DEFAULT && accesstype != DFACC_SERIAL && accesstype != DFACC_PARALLEL) HGOTO_ERROR(DFE_ARGS, FAIL); if (accesstype == access_rec->access_type) goto done; /* kludge mode on */ if (accesstype != DFACC_PARALLEL) /* go to PARALLEL only */ { ret_value = FAIL; goto done; } /* if special elt, call special function */ if (access_rec->special) ret_value = HXPsetaccesstype(access_rec); done: return ret_value; } /* Hsetacceesstype() */ /*-------------------------------------------------------------------------- NAME HDdont_atexit PURPOSE Indicates to the library that an 'atexit()' routine is _not_ to be installed USAGE intn HDdont_atexit(void) RETURNS Returns SUCCEED/FAIL DESCRIPTION This routine indicates to the library that an 'atexit()' cleanip routine should not be installed. The major (only?) purpose for this is in situations where the library is dynamically linked into an application and is un-linked from the application before 'exit()' gets called. In those situations, a routine installed with 'atexit()' would jump to a routine which was no longer in memory, causing errors. In order to be effective, this routine _must_ be called before any other HDF function calls, and must be called each time the library is loaded/ linked into the application. (the first time and after it's been un-loaded) GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS If this routine is used, certain memory buffers will not be de-allocated, although in theory a user could call HPend on their own... EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HDdont_atexit(void) { intn ret_value = SUCCEED; if (install_atexit == TRUE) install_atexit = FALSE; return ret_value; } /* end HDdont_atexit() */ /*========================================================================== Internal Routines ==========================================================================*/ /*-------------------------------------------------------------------------- NAME HIstart PURPOSE Global and H-level initialization routine USAGE intn HIstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the global shut-down routine (HPend) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn HIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine * * In the past, this had problems with Solaris + gcc * * XXX: Check to see if this is true with modern Solaris */ #if !(defined(__sun) && defined(__GNUC__)) if (install_atexit == TRUE) if (atexit(&HPend) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); #endif /* Create the file ID and access ID groups */ if (HAinit_group(FIDGROUP, 64) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HAinit_group(AIDGROUP, 256) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (cleanup_list == NULL) { /* allocate list to hold terminateion fcns */ if ((cleanup_list = malloc(sizeof(Generic_list))) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* initialize list */ if (HDGLinitialize_list(cleanup_list) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } done: return ret_value; } /* end HIstart() */ /*-------------------------------------------------------------------------- NAME HPregister_term_func PURPOSE Registers a termination function in the list of routines to call during atexit() termination. USAGE intn HPregister_term_func(term_func) intn (*term_func)(); IN: function to call during axexit() RETURNS Returns SUCCEED/FAIL DESCRIPTION Adds routines to the linked-list of routines to call when terminating the library. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function, or real power-users. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HPregister_term_func(hdf_termfunc_t term_func) { intn ret_value = SUCCEED; if (library_terminate == FALSE) if (HIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); if (HDGLadd_to_list(*cleanup_list, (void *)term_func) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end HPregister_term_func() */ /*-------------------------------------------------------------------------- NAME HPend PURPOSE Terminate various static buffers and shutdown the library. USAGE intn HPend() RETURNS Returns SUCCEED/FAIL DESCRIPTION Walk through the shutdown routines for the various interfaces and terminate them all. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function, or real power-users. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ void HPend(void) { hdf_termfunc_t term_func; /* pointer to a termination routine for an interface */ /* Shutdown the file ID atom group */ HAdestroy_group(FIDGROUP); /* Shutdown the access ID atom group */ HAdestroy_group(AIDGROUP); if ((term_func = (hdf_termfunc_t)HDGLfirst_in_list(*cleanup_list)) != NULL) { do { (*term_func)(); } while ((term_func = (hdf_termfunc_t)HDGLnext_in_list(*cleanup_list)) != NULL); } /* end if */ /* can't issue errors if you're free'ing the error stack. */ HDGLdestroy_list(cleanup_list); /* clear the list of interface cleanup routines */ /* free allocated list struct */ free(cleanup_list); /* re-initialize */ cleanup_list = NULL; HPbitshutdown(); HXPshutdown(); Hshutdown(); HEshutdown(); HAshutdown(); tbbt_shutdown(); } /* end HPend() */ /*-------------------------------------------------------------------------- NAME HIextend_file -- extend file to current length USAGE int HIextend_file(file_rec) filerec_t * file_rec IN: pointer to file structure to extend RETURNS SUCCEED / FAIL DESCRIPTION The routine extends an HDF file to be the length on the f_end_off member of the file_rec. This is mainly written as a function so that the functionality is localized. --------------------------------------------------------------------------*/ static intn HIextend_file(filerec_t *file_rec) { uint8 temp = 0; intn ret_value = SUCCEED; if (HPseek(file_rec, file_rec->f_end_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, &temp, 1) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); done: return ret_value; } /* HIextend_file */ /*-------------------------------------------------------------------------- NAME HIget_function_table -- create special function table USAGE int HIget_func_table(access_rec) accrec_t * access_rec; IN: access record we are working on RETURNS NULL no matter what (seems odd....) DESCRIPTION Set up the table of special functions for a given special element --------------------------------------------------------------------------*/ static funclist_t * HIget_function_table(accrec_t *access_rec) { filerec_t *file_rec; /* file record */ int16 spec_code; uint8 lbuf[4]; /* temporary buffer */ uint8 *p; /* tmp buf ptr */ int32 data_off; /* offset of the data we are checking */ int i; /* loop index */ funclist_t *ret_value = NULL; /* FAIL */ /* read in the special code in the special elt */ file_rec = HAatom_object(access_rec->file_id); /* get the offset and length of the dataset */ if (HTPinquire(access_rec->ddid, NULL, NULL, &data_off, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, NULL); if (HPseek(file_rec, data_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, NULL); if (HP_read(file_rec, lbuf, (int)2) == FAIL) HGOTO_ERROR(DFE_READERROR, NULL); /* using special code, look up function table in associative table */ p = &lbuf[0]; INT16DECODE(p, spec_code); access_rec->special = (intn)spec_code; for (i = 0; functab[i].key != 0; i++) { if (access_rec->special == functab[i].key) { ret_value = functab[i].tab; break; /* break out of loop */ } } done: return ret_value; } /* HIget_function_table */ /*-------------------------------------------------------------------------- NAME HIgetspinfo -- return special info USAGE int HIgetspinfo(access_rec, tag, ref) accrec_t * access_rec; IN: access record we are working on int16 tag; IN: tag to look for int16 ref; IN: ref to look for RETURNS special_info field or NULL if not found DESCRIPTION given the tag and ref of a given element return the special info field of the access element. Basically, this function checks if any other AIDs in the file have read in the special information for this object. If so, this special information will be reused. Otherwise, the special element handling code needs to read in the information from disk GLOBALS Reads from the global access_records --------------------------------------------------------------------------*/ void * HIgetspinfo(accrec_t *access_rec) { void *ret_value = NULL; /* FAIL */ if ((ret_value = HAsearch_atom(AIDGROUP, HPcompare_accrec_tagref, access_rec)) != NULL) HGOTO_DONE(((accrec_t *)ret_value)->special_info); done: return ret_value; } /* HIgetspinfo */ /*-------------------------------------------------------------------------- HIunlock -- unlock a previously locked file record --------------------------------------------------------------------------*/ static int HIunlock(filerec_t *file_rec) { /* unlock the file record */ file_rec->attach--; return SUCCEED; } /* ------------------------- SPECIAL TAG ROUTINES ------------------------- */ /* The HDF tag space is divided as follows based on the 2 highest bits: 00: Library reserved ordinary tags 01: Library reserved special tags 10, 11: User tags. It is relatively cheap to operate with special tags within the library reserved tags range. For users to specify special tags and their corresponding ordinary tag, the pair has to be added to the special_table. The special_table contains pairs of each tag and its corresponding special tag. The same table is also used to determine if a tag is special. Add to this table any additional tag/special_tag pairs that might be necessary. */ /* The functionality of these routines is covered by the SPECIALTAG, MKSPECIALTAG and BASETAG macros */ #ifdef SPECIAL_TABLE typedef struct special_table_t { uint16 tag; uint16 special_tag; } special_table_t; static special_table_t special_table[] = { {0x8010, 0x4000 | 0x8010}, /* dummy */ }; #define SP_TAB_SZ (sizeof(special_table) / sizeof(special_table[0])) /*-------------------------------------------------------------------------- --------------------------------------------------------------------------*/ uint16 HDmake_special_tag(uint16 tag) { int i; uint16 ret_value = DFTAG_NULL; /* FAIL */ if (~tag & 0x8000) { ret_value = ((uint16)(tag | 0x4000)); goto done; } for (i = 0; i < SP_TAB_SZ; i++) if (special_table[i].tag == tag) { ret_value = (uint16)special_table[i].special_tag; break; } done: return ret_value; } /*-------------------------------------------------------------------------- --------------------------------------------------------------------------*/ intn HDis_special_tag(uint16 tag) { int i; intn ret_value = FALSE; /* FAIL */ if (~tag & 0x8000) { ret_value = (tag & 0x4000) ? TRUE : FALSE; goto done; } for (i = 0; i < SP_TAB_SZ; i++) if (special_table[i].special_tag == tag) { ret_value = TRUE; break; } done: return ret_value; } /*-------------------------------------------------------------------------- --------------------------------------------------------------------------*/ uint16 HDbase_tag(uint16 tag) { int i; uint16 ret_value = tag; if (~tag & 0x8000) { ret_value = ((uint16)(tag & ~0x4000)); goto done; } for (i = 0; i < SP_TAB_SZ; i++) if (special_table[i].special_tag == tag) { ret_value = special_table[i].special_tag; break; } done: return ret_value; } #endif /* SPECIAL_TABLE */ /*-------------------------------------------------------------------------- NAME Hgetlibversion -- return version info for current HDF library USAGE intn Hgetlibversion(majorv, minorv, release, string) uint32 *majorv; OUT: majorv version number uint32 *minorv; OUT: minorv version number uint32 *release; OUT: release number char string[]; OUT: informational text string (80 chars) RETURNS returns SUCCEED (0). DESCRIPTION Copies values from #defines in hfile_priv.h to provided buffers. This information is statistically compiled into the HDF library, so it is not necessary to have any files open to get this information. --------------------------------------------------------------------------*/ intn Hgetlibversion(uint32 *majorv, uint32 *minorv, uint32 *releasev, char *string) { HEclear(); *majorv = LIBVER_MAJOR; *minorv = LIBVER_MINOR; *releasev = LIBVER_RELEASE; HIstrncpy(string, LIBVER_STRING, LIBVSTR_LEN + 1); return SUCCEED; } /* HDgetlibversion */ /*-------------------------------------------------------------------------- NAME Hgetfileversion -- return version info for HDF file USAGE intn Hgetfileversion(file_id, majorv, minorv, release, string) int32 file_id; IN: handle of file uint32 *majorv; OUT: majorv version number uint32 *minorv; OUT: minorv version number uint32 *release; OUT: release number char *string; OUT: informational text string (80 chars) RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Copies values from file_records[] structure for a given file to provided buffers. GLOBAL VARIABLES Reads file_records[] --------------------------------------------------------------------------*/ intn Hgetfileversion(int32 file_id, uint32 *majorv, uint32 *minorv, uint32 *release, char *string) { filerec_t *file_rec; intn ret_value = SUCCEED; HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); if (majorv != NULL) *majorv = file_rec->version.majorv; if (minorv != NULL) *minorv = file_rec->version.minorv; if (release != NULL) *release = file_rec->version.release; if (string != NULL) HIstrncpy(string, file_rec->version.string, LIBVSTR_LEN + 1); done: return ret_value; } /* Hgetfileversion */ /*-------------------------------------------------------------------------- NAME HIcheckfileversion -- check version info for HDF file USAGE intn Hgetfileversion(file_id) int32 file_id; IN: handle of file RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Checks that the file's version is current and update it if it isn't. --------------------------------------------------------------------------*/ static intn HIcheckfileversion(int32 file_id) { filerec_t *file_rec; uint32 lmajorv = 0, lminorv = 0, lrelease = 0; uint32 fmajorv = 0, fminorv = 0, frelease = 0; char string[LIBVSTR_LEN + 1]; /* len 80+1 */ intn newver = 0; intn ret_value = SUCCEED; HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file version and set newver condition */ if (Hgetfileversion(file_id, &fmajorv, &fminorv, &frelease, string) != SUCCEED) { newver = 1; HEclear(); } /* end if */ /* get library version */ Hgetlibversion(&lmajorv, &lminorv, &lrelease, string); /* check whether we need to update the file version tag */ if (lmajorv > fmajorv || (lmajorv == fmajorv && lminorv > fminorv) || (lmajorv == fmajorv && lminorv == fminorv && lrelease > frelease)) newver = 1; if (newver == 1) { file_rec->version.majorv = lmajorv; file_rec->version.minorv = lminorv; file_rec->version.release = lrelease; HIstrncpy(file_rec->version.string, string, LIBVSTR_LEN + 1); file_rec->version.modified = 1; } /* end if */ file_rec->version_set = TRUE; done: return ret_value; } /* HIcheckfileversion */ /*-------------------------------------------------------------------------- NAME HIget_filerec_node -- find a filerec for a FILE USAGE filerec_t *HIget_filerec_node(path) char * path; IN: name of file RETURNS a file record or else NULL DESCRIPTION Search the file record array for a matching record, or allocate an empty slot. The file is considered the same if the path matches exactly. This routine is unable to detect aliases, or how to compare relative and absolute paths. --------------------------------------------------------------------------*/ static filerec_t * HIget_filerec_node(const char *path) { filerec_t *ret_value = NULL; if ((ret_value = HAsearch_atom(FIDGROUP, HPcompare_filerec_path, path)) == NULL) { if ((ret_value = (filerec_t *)calloc(1, sizeof(filerec_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); if ((ret_value->path = (char *)strdup(path)) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); /* Initialize annotation stuff */ ret_value->an_tree[AN_DATA_LABEL] = NULL; ret_value->an_tree[AN_DATA_DESC] = NULL; ret_value->an_tree[AN_FILE_LABEL] = NULL; ret_value->an_tree[AN_FILE_DESC] = NULL; ret_value->an_num[AN_DATA_LABEL] = -1; ret_value->an_num[AN_DATA_DESC] = -1; ret_value->an_num[AN_FILE_LABEL] = -1; ret_value->an_num[AN_FILE_DESC] = -1; } /* end if */ done: return ret_value; } /* HIget_filerec_node */ /*-------------------------------------------------------------------------- NAME HIrelease_filerec_node -- release/recycle a filerec USAGE intn HIrelease_filerec_node(file_rec) filerec_t *file_rec; IN: File record to release RETURNS SUCCEED/FAIL DESCRIPTION Release a file record back to the system --------------------------------------------------------------------------*/ static intn HIrelease_filerec_node(filerec_t *file_rec) { /* Close file if it's opened */ if (file_rec->file != NULL) HI_CLOSE(file_rec->file); /* Free all the components of the file record */ free(file_rec->path); free(file_rec); return SUCCEED; } /* HIrelease_filerec_node */ /*-------------------------------------------------------------------------- NAME HPisfile_in_use -- check if a FILE is currently in use USAGE intn HPisfile_in_use(path) const char * path; IN: name of file RETURNS TRUE if the file is in use or FALSE, otherwise. DESCRIPTION Get its record if the file is opened, then check its reference count to decide whether the file is currently in use. --------------------------------------------------------------------------*/ intn HPisfile_in_use(const char *path) { filerec_t *file_rec = NULL; intn ret_value = FALSE; /* Search for the record of a file named "path". */ file_rec = (filerec_t *)HAsearch_atom(FIDGROUP, HPcompare_filerec_path, path); /* If the file is not found, it can't be in use, return FALSE */ if (file_rec == NULL) ret_value = FALSE; else if (file_rec->refcount) /* file is in use if ref count is not 0 */ ret_value = TRUE; return ret_value; } /* HPisfile_in_use */ /*-------------------------------------------------------------------------- NAME HPcompare_filerec_path -- compare filerec objects for the atom API USAGE intn HPcompare_filerec_path(obj, key) const void * obj; IN: pointer to the file record const void * key; IN: pointer to the name of file RETURNS TRUE if the key matches the obj, FALSE otherwise DESCRIPTION Look inside the file record for the atom API and compare the the paths. --------------------------------------------------------------------------*/ intn HPcompare_filerec_path(const void *obj, const void *key) { const filerec_t *frec = obj; const char *fname = key; intn ret_value = FALSE; /* set default as FALSE */ /* check args */ if (frec != NULL && fname != NULL) { /* check bad file record */ if (BADFREC(frec)) ret_value = FALSE; else { if (!strcmp(frec->path, fname)) ret_value = TRUE; else ret_value = FALSE; } } return ret_value; } /* HPcompare_filerec_path */ /*-------------------------------------------------------------------------- NAME HPcompare_accrec_tagref -- compare accrec objects for the atom API USAGE intn HPcompare_accrec_tagref(obj, key) const void * rec1; IN: pointer to the access record #1 const void * rec2; IN: pointer to the access record #2 RETURNS TRUE if tag/ref of rec1 matches the tag/ref of rec2, FALSE otherwise DESCRIPTION Look inside the access record for the atom API and compare the the paths. --------------------------------------------------------------------------*/ intn HPcompare_accrec_tagref(const void *rec1, const void *rec2) { uint16 tag1, ref1; /* tag/ref of access record #1 */ uint16 tag2, ref2; /* tag/ref of access record #2 */ intn ret_value = FALSE; /* FAIL */ if (rec1 != rec2) { if (HTPinquire(((const accrec_t *)rec1)->ddid, &tag1, &ref1, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FALSE); if (HTPinquire(((const accrec_t *)rec2)->ddid, &tag2, &ref2, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FALSE); if (((const accrec_t *)rec1)->file_id == ((const accrec_t *)rec2)->file_id && tag1 == tag2 && ref1 == ref2) HGOTO_DONE(TRUE); } /* end if */ done: return ret_value; } /* HPcompare_accrec_tagref */ /*-------------------------------------------------------------------------- NAME HIvalid_magic -- verify the magic number in a file USAGE int32 HIvalid_magic(path) hdf_file_t file; IN: FILE pointer RETURNS TRUE if valid magic number else FALSE DESCRIPTION Given an open file pointer, see if the first four bytes of the file are the HDF "magic number" HDFMAGIC --------------------------------------------------------------------------*/ static intn HIvalid_magic(hdf_file_t file) { char b[MAGICLEN]; /* Temporary buffer */ intn ret_value = FALSE; /* FAIL */ /* Seek to beginning of the file. */ if (HI_SEEK(file, 0) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FALSE); /* Read in magic cookie and compare. */ if (HI_READ(file, b, MAGICLEN) == FAIL) HGOTO_ERROR(DFE_READERROR, FALSE); if (NSTREQ(b, HDFMAGIC, MAGICLEN)) ret_value = TRUE; done: return ret_value; } /*-------------------------------------------------------------------------- NAME HIget_access_rec -- allocate a new access record USAGE int HIget_access_rec(void) RETURNS returns access_record pointer or NULL if failed. DESCRIPTION Return an pointer to a new access_rec to use for a new AID. --------------------------------------------------------------------------*/ accrec_t * HIget_access_rec(void) { accrec_t *ret_value = NULL; HEclear(); /* Grab from free list if possible */ if (accrec_free_list != NULL) { ret_value = accrec_free_list; accrec_free_list = accrec_free_list->next; } /* end if */ else { if ((ret_value = (accrec_t *)malloc(sizeof(accrec_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ /* Initialize to zeros */ memset(ret_value, 0, sizeof(accrec_t)); done: return ret_value; } /* HIget_access_rec */ /****************************************************************************** NAME HIrelease_accrec_node - Releases an atom node DESCRIPTION Puts an accrec node into the free list RETURNS No return value *******************************************************************************/ void HIrelease_accrec_node(accrec_t *acc) { /* Insert the atom at the beginning of the free list */ acc->next = accrec_free_list; accrec_free_list = acc; } /* end HIrelease_accrec_node() */ /*-------------------------------------------------------------------------- PRIVATE PRIVATE PRIVATE PRIVATE PRIVATE NAME HIupdate_version -- determine whether new version tag should be written USAGE int HIupdate_version(file_id) int32 file_id; IN: handle of file RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Writes out version numbers of current library as file version. GLOBAL VARIABLES Resets modified field of version field of appropriate file_records[] entry. --------------------------------------------------------------------------*/ static int HIupdate_version(int32 file_id) { /* uint32 lmajorv, lminorv, lrelease; */ uint8 /*lstring[81], */ lversion[LIBVER_LEN]; filerec_t *file_rec; int i; int ret_value = SUCCEED; HEclear(); /* Check args */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* copy in-memory version to file */ Hgetlibversion(&(file_rec->version.majorv), &(file_rec->version.minorv), &(file_rec->version.release), file_rec->version.string); { uint8 *p; p = lversion; UINT32ENCODE(p, file_rec->version.majorv); UINT32ENCODE(p, file_rec->version.minorv); UINT32ENCODE(p, file_rec->version.release); HIstrncpy((char *)p, file_rec->version.string, LIBVSTR_LEN); i = (int)strlen((char *)p); memset(&p[i], 0, LIBVSTR_LEN - i); } if (Hputelement(file_id, (uint16)DFTAG_VERSION, (uint16)1, lversion, (int32)LIBVER_LEN) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); file_rec->version.modified = 0; done: return ret_value; } /* HIupdate_version */ /*-------------------------------------------------------------------------- PRIVATE PRIVATE PRIVATE PRIVATE PRIVATE NAME HIread_version -- reads a version tag from a file USAGE int HIread_version(file_id) int32 file_id; IN: handle of file RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Reads a version tag from the specified file into the version fields of the appropriate filerec_t. On failure, zeros are put in the version number fields and NULLS in the string. GLOBAL VARIABLES Writes to version fields of appropriate file_records[] entry. --------------------------------------------------------------------------*/ static int HIread_version(int32 file_id) { filerec_t *file_rec; int ret_value = SUCCEED; uint8 fversion[LIBVER_LEN]; memset(fversion, 0, sizeof(fversion)); HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); if (Hgetelement(file_id, (uint16)DFTAG_VERSION, (uint16)1, fversion) == FAIL) { file_rec->version.majorv = 0; file_rec->version.minorv = 0; file_rec->version.release = 0; strcpy(file_rec->version.string, ""); file_rec->version.modified = 0; HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { uint8 *p; p = fversion; UINT32DECODE(p, file_rec->version.majorv); UINT32DECODE(p, file_rec->version.minorv); UINT32DECODE(p, file_rec->version.release); HIstrncpy(file_rec->version.string, (char *)p, LIBVSTR_LEN); } file_rec->version.modified = 0; done: return ret_value; } /* HIread_version */ /*----------------------------------------------------------------------- NAME HPgetdiskblock --- Get the offset of a free block in the file. USAGE int32 HPgetdiskblock(file_rec, block_size) filerec_t *file_rec; IN: ptr to the file record int32 block_size; IN: size of the block needed intn moveto; IN: whether to move the file position to the allocated position or leave it undefined. RETURNS returns offset of block in the file if successful, FAIL (-1) if failed. DESCRIPTION Used to "allocate" space in the file. Currently, it just appends blocks to the end of the file willy-nilly. At some point in the future, this could be changed to use a "real" free-list of empty blocks in the file and dole those out. -------------------------------------------------------------------------*/ int32 HPgetdiskblock(filerec_t *file_rec, int32 block_size, intn moveto) { uint8 temp; int32 ret_value = SUCCEED; /* check for valid arguments */ if (file_rec == NULL || block_size < 0) HGOTO_ERROR(DFE_ARGS, FAIL); #ifdef DISKBLOCK_DEBUG block_size += (DISKBLOCK_HSIZE + DISKBLOCK_TSIZE); /* get the offset of the allocated block */ ret_value = file_rec->f_end_off + DISKBLOCK_HSIZE; #else /* DISKBLOCK_DEBUG */ /* get the offset of the allocated block */ ret_value = file_rec->f_end_off; #endif /* DISKBLOCK_DEBUG */ /* reserve the space by marking the end of the element */ if (block_size > 0) { #ifdef DISKBLOCK_DEBUG if (file_rec->cache) file_rec->dirty |= FILE_END_DIRTY; else { /* Write the debugging head & tail to the file block allocated */ if (HPseek(file_rec, file_rec->f_end_off) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, diskblock_header, DISKBLOCK_HSIZE) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (HPseek(file_rec, file_rec->f_end_off + block_size - DISKBLOCK_TSIZE) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, diskblock_tail, DISKBLOCK_TSIZE) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end else */ #else /* DISKBLOCK_DEBUG */ if (file_rec->cache) file_rec->dirty |= FILE_END_DIRTY; else { if (HPseek(file_rec, ret_value + block_size - 1) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, &temp, 1) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end else */ #endif /* DISKBLOCK_DEBUG */ } /* end if */ if (moveto == TRUE) /* move back to the beginning of the element */ { if (HPseek(file_rec, ret_value) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); } /* end if */ /* incr. offset of end of file */ file_rec->f_end_off += block_size; done: return ret_value; } /* HPgetdiskblock() */ /*----------------------------------------------------------------------- NAME HPfreediskblock --- Release a block in a file to be reused. USAGE intn HPfreediskblock(file_rec, block_off, block_size) filerec_t *file_rec; IN: ptr to the file record int32 block_off; IN: offset of the block to release int32 block_size; IN: size of the block to release RETURNS returns SUCCEED (0) if successful, FAIL (-1) if failed. DESCRIPTION Used to "release" space in the file. Currently, it does nothing. At some point in the future, this could be changed to add the block to a "real" free-list of empty blocks in the file and manage those. -------------------------------------------------------------------------*/ intn HPfreediskblock(filerec_t *file_rec, int32 block_off, int32 block_size) { intn ret_value = SUCCEED; (void)file_rec; (void)block_off; (void)block_size; return ret_value; } /* HPfreediskblock() */ /*-------------------------------------------------------------------------- NAME HDget_special_info -- get information about a special element USAGE intn HDget_special_info(access_id, info_block) int32 access_id; IN: id of READ access element sp_info_block_t * info_block; OUT: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Fill in the given info_block with information about the special element. Return FAIL if it is not a special element AND set the 'key' field to FAIL in info_block. --------------------------------------------------------------------------*/ int32 HDget_special_info(int32 access_id, sp_info_block_t *info_block) { accrec_t *access_rec; /* access record */ int32 ret_value = FAIL; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || info_block == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* special elt, so call special function */ if (access_rec->special) ret_value = (*access_rec->special_func->info)(access_rec, info_block); else /* else is not special so FAIL */ info_block->key = FAIL; done: return ret_value; } /* HDget_special_info */ /*-------------------------------------------------------------------------- NAME HDset_special_info -- reset information about a special element USAGE intn HDet_special_info(access_id, info_block) int32 access_id; IN: id of READ access element sp_info_block_t * info_block; IN: information about the special element RETURNS SUCCEED / FAIL DESCRIPTION Attempt to replace the special information for the given element with new information. This routine should be used to rename external elements for example. Doing things like changing the blocking of a linekd block element are beyond the scope of this routine. --------------------------------------------------------------------------*/ int32 HDset_special_info(int32 access_id, sp_info_block_t *info_block) { accrec_t *access_rec; /* access record */ int32 ret_value = FAIL; /* clear error stack and check validity of access id */ HEclear(); access_rec = HAatom_object(access_id); if (access_rec == (accrec_t *)NULL || info_block == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* special elt, so call special function */ if (access_rec->special) ret_value = (*access_rec->special_func->reset)(access_rec, info_block); /* else is not special so fail */ done: return ret_value; } /* HDset_special_info */ /*-------------------------------------------------------------------------- NAME Hshutdown PURPOSE Terminate various static buffers. USAGE intn Hshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the H routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn Hshutdown(void) { accrec_t *curr; /* Release the free-list if it exists */ if (accrec_free_list != NULL) { while (accrec_free_list != NULL && accrec_free_list != accrec_free_list->next) { curr = accrec_free_list; accrec_free_list = accrec_free_list->next; curr->next = NULL; free(curr); } } return SUCCEED; } /* end Hshutdown() */ /* #define HFILE_SEEKINFO */ #ifdef HFILE_SEEKINFO static uint32 seek_taken = 0; static uint32 seek_avoided = 0; static uint32 write_force_seek = 0; static uint32 read_force_seek = 0; void Hdumpseek(void) { printf("Seeks taken=%lu\n", (unsigned long)seek_taken); printf("Seeks avoided=%lu\n", (unsigned long)seek_avoided); printf("# of times write forced a seek=%lu\n", (unsigned long)write_force_seek); printf("# of times read forced a seek=%lu\n", (unsigned long)read_force_seek); } /* Hdumpseek() */ #endif /* HFILE_SEEKINFO */ /*-------------------------------------------------------------------------- NAME HP_read PURPOSE Alias for HI_READ on HDF files. USAGE intn HP_read(file_rec,buf,bytes) filerec_t * file_rec; IN: Pointer to the HDF file record void * buf; IN: Pointer to the buffer to read data into int32 bytes; IN: # of bytes to read RETURNS Returns SUCCEED/FAIL DESCRIPTION Function to wrap around HI_READ GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only be called by HDF low-level routines EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HP_read(filerec_t *file_rec, void *buf, int32 bytes) { intn ret_value = SUCCEED; /* Check for switching file access operations */ if (file_rec->last_op == H4_OP_WRITE || file_rec->last_op == H4_OP_UNKNOWN) { #ifdef HFILE_SEEKINFO read_force_seek++; #endif /* HFILE_SEEKINFO */ file_rec->last_op = H4_OP_UNKNOWN; if (HPseek(file_rec, file_rec->f_cur_off) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ if (HI_READ(file_rec->file, buf, bytes) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); file_rec->f_cur_off += bytes; file_rec->last_op = H4_OP_READ; done: return ret_value; } /* end HP_read() */ /*-------------------------------------------------------------------------- NAME HPseek PURPOSE Alias for HI_SEEK on HDF files. USAGE intn HPseek(file_rec,offset) filerec_t * file_rec; IN: Pointer to the HDF file record int32 offset; IN: offset in the file to go to RETURNS Returns SUCCEED/FAIL DESCRIPTION Function to wrap around HI_SEEK GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only be called by HDF low-level routines EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HPseek(filerec_t *file_rec, int32 offset) { intn ret_value = SUCCEED; #ifdef HFILE_SEEKINFO printf("%s: file_rec=%p, last_offset=%ld, offset=%ld, last_op=%d", __func__, file_rec, (long)file_rec->f_cur_off, (long)offset, (int)file_rec->last_op); #endif /* HFILE_SEEKINFO */ if (file_rec->f_cur_off != offset || file_rec->last_op == H4_OP_UNKNOWN) { #ifdef HFILE_SEEKINFO seek_taken++; printf(" taken: %d\n", (int)seek_taken); #endif /* HFILE_SEEKINFO */ if (HI_SEEK(file_rec->file, offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); file_rec->f_cur_off = offset; file_rec->last_op = H4_OP_SEEK; } /* end if */ #ifdef HFILE_SEEKINFO else { seek_avoided++; printf(" avoided: %d\n", (int)seek_avoided); } #endif /* HFILE_SEEKINFO */ done: return ret_value; } /* end HPseek() */ /*-------------------------------------------------------------------------- NAME HP_write PURPOSE Alias for HI_WRITE on HDF files. USAGE intn HP_write(file_rec,buf,bytes) filerec_t * file_rec; IN: Pointer to the HDF file record void * buf; IN: Pointer to the buffer to write int32 bytes; IN: # of bytes to write RETURNS Returns SUCCEED/FAIL DESCRIPTION Function to wrap around HI_WRITE GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only be called by HDF low-level routines EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HP_write(filerec_t *file_rec, const void *buf, int32 bytes) { intn ret_value = SUCCEED; /* Check for switching file access operations */ if (file_rec->last_op == H4_OP_READ || file_rec->last_op == H4_OP_UNKNOWN) { #ifdef HFILE_SEEKINFO write_force_seek++; #endif /* HFILE_SEEKINFO */ file_rec->last_op = H4_OP_UNKNOWN; if (HPseek(file_rec, file_rec->f_cur_off) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (HI_WRITE(file_rec->file, buf, bytes) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); file_rec->f_cur_off += bytes; file_rec->last_op = H4_OP_WRITE; done: return ret_value; } /* end HP_write() */ /*-------------------------------------------------------------------------- NAME HDread_drec -- reads a description record USAGE int32 HDread_drec(file_id, data_id, drec_buf) int32 file_id; IN: id of file atom_t data_id; IN: id of an element uint8** drec_buf OUT: buffer containing special info header RETURNS Returns the length of the info read DESCRIPTION This private function contains code that was repeated in several places throughout the library. It gets access to the element's description record and read the special info header. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG 03-20-2010 BMR: Factored out repeated code --------------------------------------------------------------------------*/ int32 HPread_drec(int32 file_id, atom_t data_id, uint8 **drec_buf) { int32 drec_len = 0; /* length of the description record */ int32 drec_aid = -1; /* description record access id */ uint16 drec_tag, drec_ref; /* description record tag/ref */ int32 ret_value = 0; /* get the info for the dataset (description record) */ if (HTPinquire(data_id, &drec_tag, &drec_ref, NULL, &drec_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if ((*drec_buf = (uint8 *)malloc(drec_len)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* get the special info header */ drec_aid = Hstartaccess(file_id, MKSPECIALTAG(drec_tag), drec_ref, DFACC_READ); if (drec_aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); if (Hread(drec_aid, 0, *drec_buf) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if (Hendaccess(drec_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); ret_value = drec_len; done: return ret_value; } /* HPread_drec */ /*-------------------------------------------------------------------------- NAME HDcheck_empty -- determines if an element has been written with data USAGE int32 HDcheck_empty(file_id, tag, ref, *emptySDS) int32 file_id; IN: id of file uint16 tag; IN: tag of data element uint16 ref; IN: ref of data element intn *emptySDS; OUT: TRUE if data element is empty RETURNS Returns SUCCEED/FAIL DESCRIPTION If the data element is special, gets the compressed or chunked description record and retrieves the special tag. If the special tag indicates that the data element is compressed, then this function will retrieve the data length. If the special tag indicates the data element is chunked, then retrieve the vdata chunk table to get its number of records. Uses the data length or number of records to determine the value for 'emptySDS'. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG 10-30-2004 BMR: This function was added for SDcheckempty 08-28-2007 BMR: The old code of this function failed when szip library didn't present (bugzilla 842.) Modified to read info directly from file. --------------------------------------------------------------------------*/ int32 HDcheck_empty(int32 file_id, uint16 tag, uint16 ref, intn *emptySDS /* TRUE if data element is empty */) { int32 length; /* length of the element's data */ atom_t data_id = FAIL; /* dd ID of existing regular element */ filerec_t *file_rec; /* file record pointer */ uint8 *local_ptbuf = NULL, *p; int16 sptag = -1; /* special tag read from desc record */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get access element from dataset's tag/ref */ if ((data_id = HTPselect(file_rec, tag, ref)) != FAIL) { int32 dlen = 0, doff = 0; /* offset/length of the description record */ /* Get the info pointed to by this dd, which could point to data or description record, or neither */ if (HTPinquire(data_id, NULL, NULL, &doff, &dlen) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* doff/dlen = -1 means no data had been written */ if (doff == INVALID_OFFSET && dlen == INVALID_LENGTH) { *emptySDS = TRUE; } /* if the element is not special, that means dataset's tag/ref specifies the actual data that was written to the dataset, so we don't need to check further */ else if (HTPis_special(data_id) == FALSE) { *emptySDS = FALSE; } else { int32 rec_len = 0; /* Get the compression header (description record) */ rec_len = HPread_drec(file_id, data_id, &local_ptbuf); if (rec_len <= 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* get special tag */ p = local_ptbuf; INT16DECODE(p, sptag); /* if it is a compressed element, get the data length and set flag emptySDS appropriately */ if (sptag == SPECIAL_COMP) { /* skip 2byte header_version */ p = p + 2; INT32DECODE(p, length); /* get _uncompressed_ data length */ /* set flag specifying whether the dataset is empty */ *emptySDS = length == 0 ? TRUE : FALSE; } /* if it is a chunked element, get the number of records in the chunk table (vdata) to determine emptySDS value */ else if (sptag == SPECIAL_CHUNKED) { uint16 chk_tbl_tag, chk_tbl_ref; /* chunk table tag/ref */ int32 vdata_id = -1; /* chunk table id */ int32 n_records = 0; /* number of records in chunk table */ /* skip 4byte header len, 1byte chunking version, 4byte flag, */ /* 4byte elm_tot_length, 4byte chunk_size and 4byte nt_size */ p = p + 4 + 1 + 4 + 4 + 4 + 4; UINT16DECODE(p, chk_tbl_tag); UINT16DECODE(p, chk_tbl_ref); /* make sure it is really the vdata */ if (chk_tbl_tag == DFTAG_VH) { /* attach to the chunk table vdata and get its num of records */ if ((vdata_id = VSattach(file_id, chk_tbl_ref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (VSinquire(vdata_id, &n_records, NULL, NULL, NULL, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (VSdetach(vdata_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* set flag specifying whether the dataset is empty */ *emptySDS = n_records == 0 ? TRUE : FALSE; } /* it is a vdata */ else HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* need to check about other special cases - BMR 08/28/2007 */ } /* else, data_id is special */ /* end access to the aid */ if (HTPendaccess(data_id) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } /* end if data_id != FAIL */ else { HGOTO_ERROR(DFE_CANTACCESS, FAIL); } done: free(local_ptbuf); return ret_value; } /* end HDcheck_empty() */ /* ------------------------------- Hgetntinfo ------------------------------ */ /* NAME Hgetntinfo -- retrieves some information of a number type in text format USAGE intn Hgetntinfo(numbertype, nt_info) int32 numbertype; IN: HDF-supported number type hdf_ntinfo_t *nt_info; OUT: structure containing number type's info RETURNS FAIL if there is no match for the number type, otherwise, SUCCEED. DESCRIPTION Load the structure hdf_ntinfo_t with the number type's name and byte order in array of characters format. When the "default:" is reached, it means that a supported number type is missing from the switch statement or an unrecognized value is encountered. The type will be verified and added or appropriate error handling will be added. The structure hdf_ntinfo_t is defined in hdf.h. Design note: Passing the struct hdf_ntinfo_t into this function instead of individual strings will allow expandability without changing the function's prototype in the event of more information is desired. -BMR (Sep 2010) ---------------------------------------------------------------------------*/ intn Hgetntinfo(const int32 numbertype, hdf_ntinfo_t *nt_info) { /* Clear error stack */ HEclear(); /* Get byte order string */ if ((DFNT_LITEND & numbertype) > 0) { strcpy(nt_info->byte_order, "littleEndian"); } else strcpy(nt_info->byte_order, "bigEndian"); /* Get type name string; must mask native and little-endian to make sure we get standard type */ switch ((numbertype & ~DFNT_NATIVE) & ~DFNT_LITEND) { case DFNT_UCHAR8: strcpy(nt_info->type_name, "uchar8"); break; case DFNT_CHAR8: strcpy(nt_info->type_name, "char8"); break; case DFNT_FLOAT32: strcpy(nt_info->type_name, "float32"); break; case DFNT_FLOAT64: strcpy(nt_info->type_name, "float64"); break; case DFNT_FLOAT128: strcpy(nt_info->type_name, "float128"); break; case DFNT_INT8: strcpy(nt_info->type_name, "int8"); break; case DFNT_UINT8: strcpy(nt_info->type_name, "uint8"); break; case DFNT_INT16: strcpy(nt_info->type_name, "int16"); break; case DFNT_UINT16: strcpy(nt_info->type_name, "uint16"); break; case DFNT_INT32: strcpy(nt_info->type_name, "int32"); break; case DFNT_UINT32: strcpy(nt_info->type_name, "uint32"); break; case DFNT_INT64: strcpy(nt_info->type_name, "int64"); break; case DFNT_UINT64: strcpy(nt_info->type_name, "uint64"); break; case DFNT_INT128: strcpy(nt_info->type_name, "int128"); break; case DFNT_UINT128: strcpy(nt_info->type_name, "uint128"); break; case DFNT_CHAR16: strcpy(nt_info->type_name, "char16"); break; case DFNT_UCHAR16: strcpy(nt_info->type_name, "uchar16"); break; default: return FAIL; } /* end switch */ return SUCCEED; } /* Hgetntinfo */ hdf4-hdf4.3.1/hdf/src/hfile.h000066400000000000000000000031341503061704500156200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* hfile.h * Header for hfile.c, routines for low level data element I/O */ #ifndef H4_HFILE_H #define H4_HFILE_H #include "hdf.h" /* ----------------------------- Version Tags ----------------------------- */ /* Library version numbers */ #define LIBVER_MAJOR 4 #define LIBVER_MINOR 3 #define LIBVER_RELEASE 1 #define LIBVER_SUBRELEASE "" /* For pre-releases like snap0 */ /* Empty string for real releases */ #define LIBVER_STRING "HDF Version 4.3 Release 1, June 27, 2025" #define LIBVSTR_LEN 80 /* Length of version string */ #define LIBVER_LEN 92 /* 4+4+4+80 = 92 */ /* end of version tags */ #endif /* H4_HFILE_H */ hdf4-hdf4.3.1/hdf/src/hfile_priv.h000066400000000000000000000735301503061704500166670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* hfile_priv.h * Header for hfile.c, routines for low level data element I/O */ #ifndef H4_HFILE_PRIV_H #define H4_HFILE_PRIV_H #include "hdf_priv.h" #include "hfile.h" #include "tbbt_priv.h" #include "bitvect_priv.h" #include "atom_priv.h" #include "linklist_priv.h" #include "dynarray_priv.h" /* Magic cookie for HDF data files */ #define MAGICLEN 4 /* length */ #define HDFMAGIC "\016\003\023\001" /* ^N^C^S^A */ /* sizes of elements in a file. This is necessary because the size of variables need not be the same as in the file (cannot use sizeof) */ #define DD_SZ 12 /* 2+2+4+4 */ #define NDDS_SZ 2 #define OFFSET_SZ 4 /* invalid offset & length to indicate a partially defined element * written to the HDF file i.e. can handle the case where the the * element is defined but not written out */ #define INVALID_OFFSET -1 #define INVALID_LENGTH -1 /* #define DISKBLOCK_DEBUG */ #ifdef DISKBLOCK_DEBUG #define DISKBLOCK_HSIZE sizeof(diskblock_header) #define DISKBLOCK_TSIZE sizeof(diskblock_tail) #endif /* -------------------------- File I/O Functions -------------------------- */ /* FILELIB -- file library to use for file access: 1 stdio, 2 fcntl default to stdio library i.e. UNIX buffered I/O */ #ifndef FILELIB #define FILELIB UNIXBUFIO /* UNIX buffered I/O is the default */ #endif #if (FILELIB == UNIXBUFIO) /* using C buffered file I/O routines to access files */ #include typedef FILE *hdf_file_t; #define HI_OPEN(p, a) (((a) & DFACC_WRITE) ? fopen((p), "rb+") : fopen((p), "rb")) #define HI_CREATE(p) (fopen((p), "wb+")) #define HI_READ(f, b, n) (((size_t)(n) == (size_t)fread((b), 1, (size_t)(n), (f))) ? SUCCEED : FAIL) #define HI_WRITE(f, b, n) (((size_t)(n) == (size_t)fwrite((b), 1, (size_t)(n), (f))) ? SUCCEED : FAIL) #define HI_CLOSE(f) (((f = ((fclose(f) == 0) ? NULL : f)) == NULL) ? SUCCEED : FAIL) #define HI_FLUSH(f) (fflush(f) == 0 ? SUCCEED : FAIL) #define HI_SEEK(f, o) (fseek((f), (long)(o), SEEK_SET) == 0 ? SUCCEED : FAIL) #define HI_SEEK_CUR(f, o) (fseek((f), (long)(o), SEEK_CUR) == 0 ? SUCCEED : FAIL) #define HI_SEEKEND(f) (fseek((f), (long)0, SEEK_END) == 0 ? SUCCEED : FAIL) #define HI_TELL(f) (ftell(f)) #define OPENERR(f) ((f) == (FILE *)NULL) #endif /* FILELIB == UNIXBUFIO */ #if (FILELIB == UNIXUNBUFIO) /* using UNIX unbuffered file I/O routines to access files */ typedef int hdf_file_t; #define HI_OPEN(p, a) (((a) & DFACC_WRITE) ? open((p), O_RDWR) : open((p), O_RDONLY)) #define HI_CREATE(p) (open((p), O_RDWR | O_CREAT | O_TRUNC, 0666)) #define HI_CLOSE(f) (((f = ((close(f) == 0) ? -1 : f)) == -1) ? SUCCEED : FAIL) #define HI_FLUSH(f) (SUCCEED) #define HI_READ(f, b, n) (((n) == read((f), (char *)(b), (n))) ? SUCCEED : FAIL) #define HI_WRITE(f, b, n) (((n) == write((f), (char *)(b), (n))) ? SUCCEED : FAIL) #define HI_SEEK(f, o) (lseek((f), (off_t)(o), SEEK_SET) != (-1) ? SUCCEED : FAIL) #define HI_SEEKEND(f) (lseek((f), (off_t)0, SEEK_END) != (-1) ? SUCCEED : FAIL) #define HI_TELL(f) (lseek((f), (off_t)0, SEEK_CUR)) #define OPENERR(f) (f < 0) #endif /* FILELIB == UNIXUNBUFIO */ /* ----------------------- Internal Data Structures ----------------------- */ /* The internal structure used to keep track of the files opened: an array of filerec_t structures, each has a linked list of ddblock_t. Each ddblock_t struct points to an array of dd_t structs. File Header(4 bytes) =================== <--- 32 bits -----> ------------------ |HDF magic number | ------------------ HDF magic number - 0x0e031301 (Hexadecimal) Data Descriptor(DD - 12 bytes) ============================== <- 16 bits -> <- 16 bits -> <- 32 bits -> <- 32 bits -> -------------------------------------------------------- | Tag | reference | Offset | Length | | | number | | | -------------------------------------------------------- \____________/ V tag/ref (unique data identifier in file) Tag -- identifies the type of data, 16 bit unsigned integer whose value ranges from 1 - 65535. Tags are assigned by the library. The HDF tag space is divided as follows based on the 2 highest bits: 00: Library reserved ordinary tags 01: Library reserved special tags(i.e. regular tags made into linked-block, external, compressed or chunked.) 10, 11: User tags. Current tag assignments are: 00001 - 32767 - reserved for library use 00001 - 16383 - library use regular tags 16384 - 32767 - library use special tags 32768 - 64999 - user definable tags 65000 - 65535 - reserved for expansion of format Reference number - 16 bit unsigned integer whose assignment is not guaranteed to be consecutive. Provides a way to distinguish elements with the same tag in the file. Offset - Specifies the byte offset of the data element from the beginning of the file - 32 bit unsigned integer Length - Indicates the byte length of the data element 32 bit unsigned integer Data Descriptor Header(DDH - 6 bytes) ==================================== <- 16 bits -> <- 32 bits -> ----------------------------- | Block Size | Next Block | ----------------------------- Block Size - Indicates the number of DD's in the DD Block, 16 bit unsigned integer value Next Block - Gives the offset of the next DD Block. The last DD Block has a ZERO(0) in the "Next Block" field in the DDH. 32 bit unsigned integer value Data Descriptor Block(DDB - variable size) ========================================== <- DD Header -> <--------------- DD's ---------------------> --------------------------------------------------------...- |Block | Next | DD | DD | DD | DD | DD | DD | DD | DD |...| |Size | Block | | | | | | | | | | --------------------------------------------------------...- <-------------------------- DD Block ----------------------> Note: default number of DD's in a DD Block is 16 HDF file layout ============================= (one example) --------------------------------------------------------------------- | FH | DD Block | Data | DD Block | Data | DD Block | Data | ..... --------------------------------------------------------------------- */ /* record of each data descriptor */ typedef struct dd_t { uint16 tag; /* Tag number of element i.e. type of data */ uint16 ref; /* Reference number of element */ int32 length; /* length of data element */ int32 offset; /* byte offset of data element from */ struct ddblock_t *blk; /* Pointer to the block this dd is in */ } /* beginning of file */ dd_t; /* version tags */ typedef struct version_t { uint32 majorv; /* major version number */ uint32 minorv; /* minor version number */ uint32 release; /* release number */ char string[LIBVSTR_LEN + 1]; /* optional text description, len 80+1 */ int16 modified; /* indicates file was modified */ } version_t; /* record of a block of data descriptors, mirrors structure of a HDF file. */ typedef struct ddblock_t { uintn dirty; /* boolean: should this DD block be flushed? */ int32 myoffset; /* offset of this DD block in the file */ int16 ndds; /* number of dd's in this block */ int32 nextoffset; /* offset to the next ddblock in the file */ struct filerec_t *frec; /* Pointer to the filerec this block is in */ struct ddblock_t *next; /* pointer to the next ddblock in memory */ struct ddblock_t *prev; /* Pointer to previous ddblock. */ struct dd_t *ddlist; /* pointer to array of dd's */ } ddblock_t; /* Tag tree node structure */ typedef struct tag_info_str { uint16 tag; /* tag value for this node */ /* Needs to be first in this structure */ bv_ptr b; /* bit-vector to keep track of which refs are used */ dynarr_p d; /* dynarray of the refs for this tag */ } tag_info; /* For determining what the last file operation was */ typedef enum { H4_OP_UNKNOWN = 0, /* Don't know what the last operation was (after fopen frex) */ H4_OP_SEEK, /* Last operation was a seek */ H4_OP_WRITE, /* Last operation was a write */ H4_OP_READ /* Last operation was a read */ } fileop_t; /* File record structure */ typedef struct filerec_t { char *path; /* name of file */ hdf_file_t file; /* either file descriptor or pointer */ uint16 maxref; /* highest ref in this file */ intn access; /* access mode */ intn refcount; /* reference count / times opened */ intn attach; /* number of access elts attached */ intn version_set; /* version tag stuff */ version_t version; /* file version info */ /* Seek caching info */ int32 f_cur_off; /* Current location in the file */ fileop_t last_op; /* the last file operation performed */ /* DD block caching info */ intn cache; /* boolean: whether caching is on */ intn dirty; /* boolean: if dd list needs to be flushed */ int32 f_end_off; /* offset of the end of the file */ /* DD list pointers */ struct ddblock_t *ddhead; /* head of ddblock list */ struct ddblock_t *ddlast; /* end of ddblock list */ /* NULL DD pointers (for fast lookup of DFTAG_NULL) */ struct ddblock_t *ddnull; /* location of last ddblock with a DFTAG_NULL */ int32 ddnull_idx; /* offset of the last location with DFTAG_NULL */ /* tag tree for file */ TBBT_TREE *tag_tree; /* TBBT of the tags in the file */ /* annotation stuff for file */ intn an_num[4]; /* Holds number of annotations found of each type */ TBBT_TREE *an_tree[4]; /* tbbt trees for each type of annotation in file * i.e. file/data labels and descriptions. * This is done for faster searching of annotations * of a particular type. */ } filerec_t; /* bits for filerec_t 'dirty' flag */ #define DDLIST_DIRTY 0x01 /* mark whether to flush dirty DD blocks */ #define FILE_END_DIRTY 0x02 /* indicate that the file needs to be extended */ /* Each access element is associated with a tag/ref to keep track of the dd it is pointing at. To facilitate searching for next dd's, instead of pointing directly to the dd, we point to the ddblock and index into the ddlist of that ddblock. */ typedef struct accrec_t { /* Flags for this access record */ intn appendable; /* whether appends to the data are allowed */ intn special; /* special element ? */ intn new_elem; /* is a new element (i.e. no length set yet) */ int32 block_size; /* size of the blocks for linked-block element*/ int32 num_blocks; /* number blocks in the linked-block element */ uint32 access; /* access codes */ uintn access_type; /* I/O access type: serial/parallel/... */ int32 file_id; /* id of attached file */ atom_t ddid; /* DD id for the DD attached to */ int32 posn; /* seek position with respect to start of element */ void *special_info; /* special element info? */ struct funclist_t *special_func; /* ptr to special function? */ struct accrec_t *next; /* for free-list linking */ } accrec_t; /* this type is returned to applications programs or other special interfaces when they need to know information about a given special element. This is all information that would not be returned via Hinquire(). This should probably be a union of structures. */ /* Added length of external element. Note: this length is not returned via Hinquire(). -BMR 2011/12/12 */ typedef struct sp_info_block_t { int16 key; /* type of special element this is */ /* external elements */ int32 offset; /* offset in the file */ int32 length; /* length of external data in the file */ int32 length_file_name; /* length of external file name */ char *path; /* file name - should not be freed by user */ /* linked blocks */ int32 first_len; /* length of first block */ int32 block_len; /* length of standard block */ int32 nblocks; /* number of blocks per chunk */ /* compressed elements */ int32 comp_type; /* compression type */ int32 model_type; /* model type */ int32 comp_size; /* size of compressed information */ /* variable-length linked blocks */ int32 min_block; /* the minimum block size */ /* Chunked elements */ int32 chunk_size; /* logical size of chunks */ int32 ndims; /* number of dimensions */ int32 *cdims; /* array of chunk lengths for each dimension */ /* Buffered elements */ int32 buf_aid; /* AID of element buffered */ } sp_info_block_t; /* a function table record for accessing special data elements. special data elements of a key could be accessed through the list of functions in array pointed to by tab. */ typedef struct funclist_t { int32 (*stread)(accrec_t *rec); int32 (*stwrite)(accrec_t *rec); int32 (*seek)(accrec_t *access_rec, int32 offset, intn origin); int32 (*inquire)(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); int32 (*read)(accrec_t *access_rec, int32 length, void *data); int32 (*write)(accrec_t *access_rec, int32 length, const void *data); intn (*endaccess)(accrec_t *access_rec); int32 (*info)(accrec_t *access_rec, sp_info_block_t *info); int32 (*reset)(accrec_t *access_rec, sp_info_block_t *info); } funclist_t; typedef struct functab_t { int16 key; /* the key for this type of special elt */ funclist_t *tab; /* table of accessing functions */ } functab_t; /* ---------------------- ID Types and Manipulation ----------------------- */ /* each id, what ever the type, will be represented with a 32-bit word, the most-significant 16 bits is a number unique for type. The less- significant 16 bits is an id unique to each type; in this, we use the internal slot number. */ #define FIDTYPE 1 #define AIDTYPE 2 #define GROUPTYPE 3 #define SDSTYPE 4 #define DIMTYPE 5 #define CDFTYPE 6 #define VGIDTYPE 8 /* also defined in vg.h for Vgroups */ #define VSIDTYPE 9 /* also defined in vg.h for Vsets */ #define BITTYPE 10 /* For bit-accesses */ #define GRIDTYPE 11 /* for GR access */ #define RIIDTYPE 12 /* for RI access */ #define BADFREC(r) ((r) == NULL || (r)->refcount == 0) /* --------------------------- Special Elements --------------------------- */ /* The HDF tag space is divided as follows based on the 2 highest bits: 00: Library reserved ordinary tags 01: Library reserved special tags(e.g. linked-block, external, compressed,..) 10, 11: User tags. It is relatively cheap to operate with special tags within the library reserved tags range. For users to specify special tags and their corresponding ordinary tag, the pair has to be added to the special_table in hfile.c and SPECIAL_TABLE must be defined. */ #ifdef SPECIAL_TABLE #define BASETAG(t) (HDbase_tag(t)) #define SPECIALTAG(t) (HDis_special_tag(t)) #define MKSPECIALTAG(t) (HDmake_special_tag(t)) #else /* This macro converts a (potentially) special tag into a normal tag */ #define BASETAG(t) (uint16)((~(t) & 0x8000) ? ((t) & ~0x4000) : (t)) /* This macro checks if a tag is special */ #define SPECIALTAG(t) (uint16)((~(t) & 0x8000) && ((t) & 0x4000)) /* This macro (potentially) converts a regular tag into a special tag */ #define MKSPECIALTAG(t) (uint16)((~(t) & 0x8000) ? ((t) | 0x4000) : DFTAG_NULL) #endif /*SPECIAL_TABLE */ /* -------------------------- H-Layer Prototypes -------------------------- */ /* ** Functions to get information of special elt from other access records. ** defined in hfile.c ** These should really be HD... routines, but they are only used within ** the H-layer... */ #ifdef __cplusplus extern "C" { #endif #ifdef DISKBLOCK_DEBUG HDFLIBAPI const uint8 diskblock_header[4]; HDFLIBAPI const uint8 diskblock_tail[4]; #endif /* DISKBLOCK_DEBUG */ HDFLIBAPI accrec_t *HIget_access_rec(void); HDFLIBAPI void HIrelease_accrec_node(accrec_t *acc); HDFLIBAPI void *HIgetspinfo(accrec_t *access_rec); HDFLIBAPI intn HPcompare_filerec_path(const void *obj, const void *key); HDFLIBAPI intn HPcompare_accrec_tagref(const void *rec1, const void *rec2); HDFLIBAPI int32 HPgetdiskblock(filerec_t *file_rec, int32 block_size, intn moveto); HDFLIBAPI intn HPfreediskblock(filerec_t *file_rec, int32 block_offset, int32 block_size); HDFLIBAPI intn HPisfile_in_use(const char *path); HDFLIBAPI int32 HDcheck_empty(int32 file_id, uint16 tag, uint16 ref, intn *emptySDS); HDFLIBAPI int32 HDget_special_info(int32 access_id, sp_info_block_t *info_block); HDFLIBAPI int32 HDset_special_info(int32 access_id, sp_info_block_t *info_block); HDFLIBAPI intn HP_read(filerec_t *file_rec, void *buf, int32 bytes); HDFLIBAPI intn HPseek(filerec_t *file_rec, int32 offset); HDFLIBAPI intn HP_write(filerec_t *file_rec, const void *buf, int32 bytes); HDFLIBAPI int32 HPread_drec(int32 file_id, atom_t data_id, uint8 **drec_buf); HDFLIBAPI intn tagcompare(void *k1, void *k2, intn cmparg); HDFLIBAPI void tagdestroynode(void *n); /* ** from hblocks.c */ HDFLIBAPI int32 HLPstread(accrec_t *access_rec); HDFLIBAPI int32 HLPstwrite(accrec_t *access_rec); HDFLIBAPI int32 HLPseek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HLPread(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HLPwrite(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI int32 HLPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI intn HLPendaccess(accrec_t *access_rec); HDFLIBAPI int32 HLPcloseAID(accrec_t *access_rec); HDFLIBAPI int32 HLPinfo(accrec_t *access_rec, sp_info_block_t *info_block); /* ** from hextelt.c */ HDFLIBAPI int32 HXPstread(accrec_t *rec); HDFLIBAPI int32 HXPstwrite(accrec_t *rec); HDFLIBAPI int32 HXPseek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HXPread(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HXPwrite(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI int32 HXPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI intn HXPendaccess(accrec_t *access_rec); HDFLIBAPI int32 HXPcloseAID(accrec_t *access_rec); HDFLIBAPI int32 HXPinfo(accrec_t *access_rec, sp_info_block_t *info_block); HDFLIBAPI int32 HXPreset(accrec_t *access_rec, sp_info_block_t *info_block); HDFLIBAPI intn HXPsetaccesstype(accrec_t *access_rec); HDFLIBAPI intn HXPshutdown(void); /* ** from hcomp.c */ HDFLIBAPI int32 HCPstread(accrec_t *rec); HDFLIBAPI int32 HCPstwrite(accrec_t *rec); HDFLIBAPI int32 HCPseek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPread(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPwrite(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HCPendaccess(accrec_t *access_rec); HDFLIBAPI int32 HCPcloseAID(accrec_t *access_rec); HDFLIBAPI int32 HCPinfo(accrec_t *access_rec, sp_info_block_t *info_block); HDFLIBAPI int32 get_comp_len(accrec_t *access_rec); /* ** from hchunks.c - should be the same as found in 'hchunks_priv.h' */ #include "hchunks_priv.h" /* ** from hbuffer.c */ HDFLIBAPI int32 HBPstread(accrec_t *rec); HDFLIBAPI int32 HBPstwrite(accrec_t *rec); HDFLIBAPI int32 HBPseek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HBPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HBPread(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HBPwrite(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HBPendaccess(accrec_t *access_rec); HDFLIBAPI int32 HBPcloseAID(accrec_t *access_rec); HDFLIBAPI int32 HBPinfo(accrec_t *access_rec, sp_info_block_t *info_block); /* ** from hcompri.c */ HDFLIBAPI int32 HRPstread(accrec_t *rec); HDFLIBAPI int32 HRPstwrite(accrec_t *rec); HDFLIBAPI int32 HRPseek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HRPinquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HRPread(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HRPwrite(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HRPendaccess(accrec_t *access_rec); HDFLIBAPI int32 HRPcloseAID(accrec_t *access_rec); HDFLIBAPI int32 HRPinfo(accrec_t *access_rec, sp_info_block_t *info_block); /* ** from hfiledd.c */ /****************************************************************************** NAME HTPstart - Initialize the DD list in memory DESCRIPTION Reads the DD blocks from disk and creates the in-memory structures for handling them. This routine should only be called once for a given file and HTPend should be called when finished with the DD list (i.e. when the file is being closed). RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPstart(filerec_t *file_rec /* IN: File record to store info in */ ); /****************************************************************************** NAME HTPinit - Create a new DD list in memory DESCRIPTION Creates a new DD list in memory for a newly created file. This routine should only be called once for a given file and HTPend should be called when finished with the DD list (i.e. when the file is being closed). RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPinit(filerec_t *file_rec, /* IN: File record to store info in */ int16 ndds /* IN: # of DDs to store in each block */ ); /****************************************************************************** NAME HTPsync - Flush the DD list in memory DESCRIPTION Synchronizes the in-memory copy of the DD list with the copy on disk by writing out the DD blocks which have changed to disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPsync(filerec_t *file_rec /* IN: File record to store info in */ ); /****************************************************************************** NAME HTPend - Terminate the DD list in memory DESCRIPTION Terminates access to the DD list in memory, writing the DD blocks out to the disk (if they've changed). After this routine is called, no further access to tag/refs (or essentially any other HDF objects) can be performed on the file. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPend(filerec_t *file_rec /* IN: File record to store info in */ ); /****************************************************************************** NAME HTPcreate - Create (and attach to) a tag/ref pair DESCRIPTION Creates a new tag/ref pair in memory and inserts the tag/ref pair into the DD list to be written out to disk. This routine returns a DD id which can be used in the other tag/ref routines to modify the DD. RETURNS Returns DD id if successful and FAIL otherwise *******************************************************************************/ atom_t HTPcreate(filerec_t *file_rec, /* IN: File record to store info in */ uint16 tag, /* IN: Tag to create */ uint16 ref /* IN: ref to create */ ); /****************************************************************************** NAME HTPselect - Attach to an existing tag/ref pair DESCRIPTION Attaches to an existing tag/ref pair. This routine returns a DD id which can be used in the other tag/ref routines to modify the DD. RETURNS Returns DD id if successful and FAIL otherwise *******************************************************************************/ atom_t HTPselect(filerec_t *file_rec, /* IN: File record to store info in */ uint16 tag, /* IN: Tag to select */ uint16 ref /* IN: ref to select */ ); /****************************************************************************** NAME HTPendaccess - End access to an existing tag/ref pair DESCRIPTION Ends access to an existing tag/ref pair. Any further access to the tag/ref pair may result in incorrect information being recorded about the DD in memory or on disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPendaccess(atom_t ddid /* IN: DD id to end access to */ ); /****************************************************************************** NAME HTPdelete - Delete an existing tag/ref pair DESCRIPTION Deletes a tag/ref from the file. Also ends access to the tag/ref pair. Any further access to the tag/ref pair may result in incorrect information being recorded about the DD in memory or on disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPdelete(atom_t ddid /* IN: DD id to delete */ ); /****************************************************************************** NAME HTPupdate - Change the offset or length of an existing tag/ref pair DESCRIPTION Updates a tag/ref in the file, allowing the length and/or offset to be modified. Note: "INVALID_OFFSET" & "INVALID_LENGTH" are used to indicate that the length or offset (respectively) is unchanged. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPupdate(atom_t ddid, /* IN: DD id to update */ int32 new_off, /* IN: new offset for DD */ int32 new_len /* IN: new length for DD */ ); /****************************************************************************** NAME HTPinquire - Get the DD information for a DD (i.e. tag/ref/offset/length) DESCRIPTION Get the DD information for a DD id from the DD block. Passing NULL for any parameter does not try to update that parameter. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPinquire(atom_t ddid, /* IN: DD id to inquire about */ uint16 *tag, /* IN: tag of DD */ uint16 *ref, /* IN: ref of DD */ int32 *off, /* IN: offset of DD */ int32 *len /* IN: length of DD */ ); /****************************************************************************** NAME HTPis_special - Check if a DD id is associated with a special tag DESCRIPTION Checks if the tag for the DD id is a special tag. RETURNS Returns TRUE(1)/FALSE(0) if successful and FAIL otherwise *******************************************************************************/ intn HTPis_special(atom_t ddid /* IN: DD id to inquire about */ ); /****************************************************************************** NAME HTPdump_dds -- Dump out the dd information for a file DESCRIPTION Prints out all the information (that you could _ever_ want to know) about the dd blocks and dd list for a file. RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. *******************************************************************************/ intn HTPdump_dds(int32 file_id, /* IN: file ID of HDF file to dump info for */ FILE *fout /* IN: file stream to output to */ ); #ifdef __cplusplus } #endif #endif /* H4_HFILE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hfiledd.c000066400000000000000000002327501503061704500161330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE hfiledd.c - DD & DD block management routines. REMARKS These routines provide all the management for the DD list, both on disk and in memory. The DD list is read in from disk (or created in memory for a new file) here and the tag tree and all the DD modifying functions are in this module. DO NOT MODIFY THE DD BLOCKS FROM OUTSIDE THIS FILE! DESIGN The DD blocks are stored in memory in a very similar way to the way they are stored in the file: in a doubly-linked list of DD blocks with each block having a pointer to the array of DDs in it (in the file). There are additional memory structures which are indexed into the DD list which are designed for faster access to certain manipulations of the DD list. The tag_tree is a tbbt of the tags contained within the file. Each node of the tag_tree has a link to a bit-vector for keeping track of the refs used for that tag and a link to a dynamic array pointers into the DD list for each ref # used. BUGS/LIMITATIONS EXPORTED ROUTINES User-level functions: Hdupdd - Duplicate a data descriptor Hnumber - Count number of occurrences of tag/ref in file Hnewref - Returns a ref that is unique in the file Htagnewref - Returns a ref that is unique in the file for a given tag Hfind - Locate the next object of a search in an HDF file Hdeldd - Delete a data descriptor Developer-level routines HDcheck_tagref - Checks to see if tag/ref is in DD list i.e. created already HDreuse_tagref - reuse a data descriptor preserving tag/refw(assumes DD exists) Tag/ref functions: HTPcreate - Create (& attach to) a tag/ref pair (inserts into DD list also) HTPselect - Attach to an existing DD in the DD list HTPendaccess- End access to an attached DD in the DD list HTPdelete - Mark a tag/ref pair as free (marks space as free in DD list) (ends access to the tag/ref also) HTPupdate - Change the offset and/or length of a data object HTPinquire - Get the DD information for a DD (i.e. tag/ref/offset/length) HTPis_special- Check if a DD id is associated with a special tag DD list functions: HTPstart - Initialize the DD list from disk (creates the DD list in memory) HTPinit - Create a new DD list (creates the DD list in memory) HTPsync - Flush the DD list to disk (synchronizes with disk) HTPend - Close the DD list to disk (synchronizes with disk too) LOCAL ROUTINES HTIfind_dd - find a specific DD in the file HTInew_dd_block - create a new (empty) DD block HTIupdate_dd - update a DD on disk HTIcount_dd - counts the dd's of a certain type in file HTIregister_tag_ref - insert a ref into the tag tree for a file HTIunregister_tag_ref - remove a ref from the tag tree for a file OLD ROUTINES HIlookup_dd - find the dd record for an element HIflush_dds - flush changed DD blocks to file HIinit_file_dds - Initialize DD blocks for a new file HIfill_file_rec - read in all of the DDs HIadd_hash_dd - add a dd to the hash table HIdel_hash_dd - remove a dd from the hash table HIfind_dd - find the dd record for an element HIcount_dd - counts the dd's of a certain type in file HInew_dd_block - create a new (empty) DD block HIupdate_dd - write an updated dd to the file HIregister_tag_ref - mark a ref as used for a tag HIunregister_tag_ref - mark a ref as un-used for a tag */ #include "hdf_priv.h" #include "hfile_priv.h" /* Private routines */ static intn HTIfind_dd(filerec_t *file_rec, uint16 look_tag, uint16 look_ref, dd_t **pdd, intn direction); static intn HTInew_dd_block(filerec_t *file_rec); static intn HTIupdate_dd(filerec_t *file_rec, dd_t *dd); static intn HTIcount_dd(filerec_t *file_rec, uint16 cnt_tag, uint16 cnt_ref, uintn *all_cnt, uintn *real_cnt); static intn HTIregister_tag_ref(filerec_t *file_rec, dd_t *dd); static intn HTIunregister_tag_ref(filerec_t *file_rec, dd_t *dd_ptr); /* Local definitions */ /* The initial size of a ref dynarray */ #define REF_DYNARRAY_START 64 /* The increment of a ref dynarray */ #define REF_DYNARRAY_INCR 256 /* macros to encode and decode a DD */ #define DDENCODE(p, tag, ref, offset, length) \ { \ UINT16ENCODE(p, tag); \ UINT16ENCODE(p, ref); \ INT32ENCODE(p, offset); \ INT32ENCODE(p, length); \ } #define DDDECODE(p, tag, ref, offset, length) \ { \ UINT16DECODE(p, tag); \ UINT16DECODE(p, ref); \ INT32DECODE(p, offset); \ INT32DECODE(p, length); \ } /****************************************************************************** NAME HTPstart - Initialize the DD list in memory DESCRIPTION Reads the DD blocks from disk and creates the in-memory structures for handling them. This routine should only be called once for a given file and HTPend should be called when finished with the DD list (i.e. when the file is being closed). RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPstart(filerec_t *file_rec /* IN: File record to store info in */ ) { uint8 *tbuf = NULL; /* temporary buffer */ uintn tbuf_size = 0; /* temporary buffer size */ int32 end_off = 0; /* offset of the end of the file */ intn ret_value = SUCCEED; HEclear(); /* Alloc start of linked list of ddblocks. */ file_rec->ddhead = (ddblock_t *)malloc(sizeof(ddblock_t)); if (file_rec->ddhead == (ddblock_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Keep the filerec_t pointer around for each ddblock */ file_rec->ddhead->frec = file_rec; /* Only one elt in linked list so head is also last. */ file_rec->ddlast = file_rec->ddhead; file_rec->ddlast->next = (ddblock_t *)NULL; file_rec->ddlast->prev = (ddblock_t *)NULL; /* The first ddblock always starts after the magic number. Set it up so that we start reading from there. */ file_rec->ddlast->myoffset = MAGICLEN; /* set offset of block in file */ file_rec->ddlast->dirty = 0; /* block does not need to be flushed */ /* Initialize the tag tree */ file_rec->tag_tree = tbbtdmake(tagcompare, sizeof(uint16), TBBT_FAST_UINT16_COMPARE); /* Initialize the DD atom group (trying 256 hash currently, feel free to change */ if (HAinit_group(DDGROUP, 256) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Read in the dd's one at a time and determine the max ref in the file at the same time. */ file_rec->maxref = 0; for (;;) { ddblock_t *ddcurr; /* ptr to the current DD block */ dd_t *curr_dd_ptr; /* pointer to the current DD being read in */ uint8 ddhead[NDDS_SZ + OFFSET_SZ]; /* storage for the DD header */ uint8 *p; /* Temporary buffer pointer. */ intn ndds; /* number of DDs in a block */ intn i; /* Temporary integer */ /* Get a short-cut for the current DD block being read-in */ ddcurr = file_rec->ddlast; /* Go to the beginning of the DD block */ if (HPseek(file_rec, ddcurr->myoffset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* Read in the start of this dd block. Read data consists of ndds (number of dd's in this block) and offset (offset to the next ddblock). */ if (HP_read(file_rec, ddhead, NDDS_SZ + OFFSET_SZ) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* Decode the numbers. */ p = &ddhead[0]; INT16DECODE(p, ddcurr->ndds); ndds = (intn)ddcurr->ndds; if (ndds <= 0) /* validity check */ HGOTO_ERROR(DFE_CORRUPT, FAIL); INT32DECODE(p, ddcurr->nextoffset); /* check if the DD block is the last thing in the file */ /* (Unlikely, but possible (I think)) */ if (ddcurr->myoffset + (NDDS_SZ + OFFSET_SZ) + (ndds * DD_SZ) > end_off) end_off = ddcurr->myoffset + (NDDS_SZ + OFFSET_SZ) + (ndds * DD_SZ); /* Now that we know how many dd's are in this block, alloc memory for the records. */ ddcurr->ddlist = (dd_t *)malloc((uint32)ndds * sizeof(dd_t)); if (ddcurr->ddlist == (dd_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Allocate memory for the temporary buffer also */ if (tbuf == NULL || ((uintn)ndds * DD_SZ) > tbuf_size) { free(tbuf); tbuf_size = (uintn)ndds * DD_SZ; tbuf = (uint8 *)malloc(tbuf_size); if (tbuf == (uint8 *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ /* Index of current dd in ddlist of this ddblock is 0. */ curr_dd_ptr = ddcurr->ddlist; /* Read in a chunk of dd's from the file. */ if (HP_read(file_rec, tbuf, ndds * DD_SZ) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* decode the dd's */ p = tbuf; for (i = 0; i < ndds; i++, curr_dd_ptr++) { DDDECODE(p, curr_dd_ptr->tag, curr_dd_ptr->ref, curr_dd_ptr->offset, curr_dd_ptr->length); curr_dd_ptr->blk = ddcurr; /* check if maximum ref # exceeded */ if (file_rec->maxref < curr_dd_ptr->ref) file_rec->maxref = curr_dd_ptr->ref; /* check if the data element is the last thing in the file */ if ((curr_dd_ptr->offset + curr_dd_ptr->length) > end_off) end_off = curr_dd_ptr->offset + curr_dd_ptr->length; /* Add to the tag info tree */ if (curr_dd_ptr->tag != DFTAG_NULL) if (HTIregister_tag_ref(file_rec, curr_dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (ddcurr->nextoffset != 0) { /* More ddblocks in the file */ ddblock_t *ddnew; /* ptr to the new DD block */ /* extend the linked list */ ddcurr->next = ddnew = (ddblock_t *)malloc((uint32)sizeof(ddblock_t)); if (ddnew == (ddblock_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ddnew->prev = ddcurr; ddnew->next = (ddblock_t *)NULL; ddnew->ddlist = (dd_t *)NULL; ddnew->myoffset = ddcurr->nextoffset; ddnew->dirty = FALSE; file_rec->ddlast = ddnew; /* Keep the filerec_t pointer around for each ddblock */ ddnew->frec = file_rec; } /* end if */ else break; } /* end for */ /* Update the DFTAG_NULL pointers */ file_rec->ddnull = NULL; file_rec->ddnull_idx = (-1); /* Update the end of the file from the DD's we have read in */ file_rec->f_end_off = end_off; done: free(tbuf); return ret_value; } /* end HTPstart() */ /****************************************************************************** NAME HTPinit - Create a new DD list in memory DESCRIPTION Creates a new DD list in memory for a newly created file. This routine should only be called once for a given file and HTPend should be called when finished with the DD list (i.e. when the file is being closed). RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPinit(filerec_t *file_rec, /* IN: File record to store info in */ int16 ndds /* IN: # of DDs to store in each block */ ) { ddblock_t *block; /* dd block to initialize */ uint8 ddhead[NDDS_SZ + OFFSET_SZ]; /* storage for the DD header */ uint8 *tbuf = NULL; /* temporary buffer */ uint8 *p; /* temp buffer ptr */ dd_t *list; /* list of dd */ intn ret_value = SUCCEED; HEclear(); if (file_rec == NULL || ndds < 0) /* valid arguments */ HGOTO_ERROR(DFE_ARGS, FAIL); /* 'reasonablize' the value of ndds. 0 means use default */ if (0 == ndds) ndds = DEF_NDDS; else if (ndds < MIN_NDDS) ndds = MIN_NDDS; /* allocate the dd block in memory and initialize it */ file_rec->ddhead = (ddblock_t *)malloc(sizeof(ddblock_t)); if (file_rec->ddhead == (ddblock_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); block = file_rec->ddlast = file_rec->ddhead; block->prev = (ddblock_t *)NULL; block->ndds = ndds; block->next = (ddblock_t *)NULL; block->nextoffset = 0; block->myoffset = MAGICLEN; block->dirty = FALSE; /* Keep the filerec_t pointer around for each ddblock */ block->frec = file_rec; /* write first dd block header to file */ p = &ddhead[0]; INT16ENCODE(p, block->ndds); INT32ENCODE(p, (int32)0); if (HP_write(file_rec, ddhead, NDDS_SZ + OFFSET_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* allocate and initialize dd list */ list = block->ddlist = (dd_t *)malloc((uint32)ndds * sizeof(dd_t)); if (list == (dd_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Fill the first memory DD block with NIL dd's */ list[0].tag = DFTAG_NULL; list[0].ref = DFREF_NONE; list[0].length = INVALID_LENGTH; list[0].offset = INVALID_OFFSET; list[0].blk = block; HDmemfill(&list[1], &list[0], sizeof(dd_t), (uint32)(ndds - 1)); tbuf = (uint8 *)malloc(ndds * DD_SZ); if (tbuf == NULL) /* check for DD list */ HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Fill the first disk DD block with NIL dd's */ p = tbuf; DDENCODE(p, (uint16)DFTAG_NULL, (uint16)DFREF_NONE, (int32)INVALID_LENGTH, (int32)INVALID_OFFSET); HDmemfill(p, tbuf, DD_SZ, (uint32)(ndds - 1)); /* Write the NIL dd's out into the DD block on disk */ if (HP_write(file_rec, tbuf, ndds * DD_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* Update the DFTAG_NULL pointers */ file_rec->ddnull = block; file_rec->ddnull_idx = (-1); /* set the end of the file currently to the end of the first DD block */ file_rec->f_end_off = block->myoffset + (NDDS_SZ + OFFSET_SZ) + (block->ndds * DD_SZ); /* no dd's yet, so maximum ref is 0 */ file_rec->maxref = 0; /* Initialize the tag tree */ file_rec->tag_tree = tbbtdmake(tagcompare, sizeof(uint16), TBBT_FAST_UINT16_COMPARE); /* Initialize the DD atom group (trying 256 hash currently, feel free to change */ if (HAinit_group(DDGROUP, 256) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: free(tbuf); return ret_value; } /* end HTPinit() */ /****************************************************************************** NAME HTPsync - Flush the DD list in memory DESCRIPTION Synchronizes the in-memory copy of the DD list with the copy on disk by writing out the DD blocks which have changed to disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPsync(filerec_t *file_rec /* IN: File record to store info in */ ) { ddblock_t *block; /* dd block to initialize */ uint8 ddhead[NDDS_SZ + OFFSET_SZ]; /* storage for the DD header */ uint8 *tbuf = NULL; /* temporary buffer */ uintn tbuf_size = 0; /* temporary buffer size */ uint8 *p; /* temp buffer ptr */ dd_t *list; /* list of dd */ int16 ndds; /* # of DDs per block */ intn i; /* temp ints */ intn ret_value = SUCCEED; HEclear(); block = file_rec->ddhead; if (block == NULL) /* check for DD list */ HGOTO_ERROR(DFE_BADDDLIST, FAIL); while (block != NULL) { /* check all the blocks for flushing */ if (block->dirty == TRUE) { /* flush this block? */ if (HPseek(file_rec, block->myoffset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* write dd block header to file */ p = ddhead; INT16ENCODE(p, block->ndds); INT32ENCODE(p, block->nextoffset); if (HP_write(file_rec, ddhead, NDDS_SZ + OFFSET_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* n is the maximum number of dd's in tbuf */ ndds = block->ndds; /* Allocate memory for the temporary buffer also */ if (tbuf == NULL || ((uintn)ndds * DD_SZ) > tbuf_size) { free(tbuf); tbuf_size = (uintn)ndds * DD_SZ; tbuf = (uint8 *)malloc(tbuf_size); if (tbuf == (uint8 *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ /* write dd list to file */ list = &block->ddlist[0]; /* start at the first DD, go from there */ p = tbuf; for (i = 0; i < ndds; i++, list++) DDENCODE(p, list->tag, list->ref, list->offset, list->length); if (HP_write(file_rec, tbuf, ndds * DD_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); block->dirty = FALSE; /* block has been flushed */ } /* end if */ block = block->next; /* advance to next block for file */ } /* end while */ done: free(tbuf); return ret_value; } /* end HTPsync() */ /****************************************************************************** NAME HTPend - Terminate the DD list in memory DESCRIPTION Terminates access to the DD list in memory, writing the DD blocks out to the disk (if they've changed). After this routine is called, no further access to tag/refs (or essentially any other HDF objects) can be performed on the file. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPend(filerec_t *file_rec /* IN: File record to store info in */ ) { ddblock_t *bl, *next; /* current ddblock and next ddblock pointers. for freeing ddblock linked list */ intn ret_value = SUCCEED; HEclear(); if (HTPsync(file_rec) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); for (bl = file_rec->ddhead; bl != NULL; bl = next) { next = bl->next; free(bl->ddlist); free(bl); } /* Chuck the tag info tree too */ tbbtdfree(file_rec->tag_tree, tagdestroynode, NULL); /* Shutdown the DD atom group */ if (HAdestroy_group(DDGROUP) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); file_rec->ddhead = (ddblock_t *)NULL; done: return ret_value; } /* end HTPend() */ /****************************************************************************** NAME HTPcreate - Create (and attach to) a tag/ref pair DESCRIPTION Creates a new tag/ref pair in memory and inserts the tag/ref pair into the DD list to be written out to disk. This routine returns a DD id which can be used in the other tag/ref routines to modify the DD. RETURNS Returns DD id if successful and FAIL otherwise *******************************************************************************/ atom_t HTPcreate(filerec_t *file_rec, /* IN: File record to store info in */ uint16 tag, /* IN: Tag to create */ uint16 ref /* IN: ref to create */ ) { dd_t *dd_ptr = NULL; /* ptr to dd created */ atom_t ret_value = SUCCEED; HEclear(); if (file_rec == NULL || (tag == DFTAG_NULL || tag == DFTAG_WILDCARD) || ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_ARGS, FAIL); if (HTIfind_dd(file_rec, (uint16)DFTAG_NULL, (uint16)DFTAG_WILDCARD, &dd_ptr, DF_FORWARD) == FAIL) { if (HTInew_dd_block(file_rec) == FAIL) { HGOTO_ERROR(DFE_NOFREEDD, FAIL); } /* end if */ else dd_ptr = &file_rec->ddlast->ddlist[0]; } /* end if */ /* Insert DD information into the DD list in memory */ dd_ptr->tag = tag; dd_ptr->ref = ref; /* the following assures object definition in DD list without data written for object. */ dd_ptr->offset = INVALID_OFFSET; dd_ptr->length = INVALID_LENGTH; /* dd_ptr->blk should already be correctly set */ /* Update the disk, etc. */ if (HTIupdate_dd(file_rec, dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Mark off the ref # as 'used' in the tag tree & add to dynarray of refs */ if (HTIregister_tag_ref(file_rec, dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Get the atom to return */ if ((ret_value = HAregister_atom(DDGROUP, dd_ptr)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* HTPcreate() */ /****************************************************************************** NAME HTPselect - Attach to an existing tag/ref pair DESCRIPTION Attaches to an existing tag/ref pair. This routine returns a DD id which can be used in the other tag/ref routines to modify the DD. RETURNS Returns DD id if successful and FAIL otherwise *******************************************************************************/ atom_t HTPselect(filerec_t *file_rec, /* IN: File record to store info in */ uint16 tag, /* IN: Tag to select */ uint16 ref /* IN: ref to select */ ) { dd_t *dd_ptr; /* ptr to the DD info for the tag/ref */ tag_info **tip_ptr; /* ptr to the ptr to the info for a tag */ tag_info *tinfo_ptr; /* pointer to the info for a tag */ uint16 base_tag = BASETAG(tag); /* corresponding base tag (if the tag is special) */ atom_t ret_value = SUCCEED; HEclear(); if (file_rec == NULL || (tag == DFTAG_NULL || tag == DFTAG_WILDCARD) || ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_ARGS, FAIL); /* Try to find the regular tag in the tag info tree */ if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) HGOTO_DONE(FAIL); /* Not an error, we just didn't find the object */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((dd_ptr = DAget_elem(tinfo_ptr->d, (intn)ref)) == NULL) HGOTO_DONE(FAIL); /* Not an error, we just didn't find the object */ /* Get the atom to return */ if ((ret_value = HAregister_atom(DDGROUP, dd_ptr)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* HTPselect() */ /****************************************************************************** NAME HTPendaccess - End access to an existing tag/ref pair DESCRIPTION Ends access to an existing tag/ref pair. Any further access to the tag/ref pair may result in incorrect information being recorded about the DD in memory or on disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPendaccess(atom_t ddid /* IN: DD id to end access to */ ) { int32 ret_value = SUCCEED; /* Chuck the atom */ if (HAremove_atom(ddid) == NULL) HGOTO_DONE(FAIL); done: return ret_value; } /* HTPendaccess() */ /****************************************************************************** NAME HTPdelete - Delete an existing tag/ref pair DESCRIPTION Deletes a tag/ref from the file. Also ends access to the tag/ref pair. Any further access to the tag/ref pair may result in incorrect information being recorded about the DD in memory or on disk. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPdelete(atom_t ddid /* IN: DD id to delete */ ) { dd_t *dd_ptr; /* ptr to the DD info for the tag/ref */ filerec_t *file_rec; int32 ret_value = SUCCEED; HEclear(); /* Retrieve the atom's object, so we can delete the tag/ref */ if ((dd_ptr = HAatom_object(ddid)) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Grab this information, because the global dd_info will be deleted in HTIunregister_tag_ref */ file_rec = dd_ptr->blk->frec; /* Since we don't know where we are, reset the DFTAG_NULL pointers */ file_rec->ddnull = NULL; file_rec->ddnull_idx = (-1); if (HPfreediskblock(file_rec, dd_ptr->offset, dd_ptr->length) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Update the disk, etc. */ if (HTIupdate_dd(file_rec, dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Remove the ref # as 'used' in the tag tree & delete from dynarray of refs */ if (HTIunregister_tag_ref(file_rec, dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Destroy everything */ if (HAremove_atom(ddid) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* HTPdelete() */ /****************************************************************************** NAME HTPupdate - Change the offset or length of an existing tag/ref pair DESCRIPTION Updates a tag/ref in the file, allowing the length and/or offset to be modified. Note: a value of '-2' for both 'length' and 'offset' are used to indicate that the length or offset (respectively) is unchanged and should remain the same. Kind of ugly but works for now. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPupdate(atom_t ddid, /* IN: DD id to update */ int32 new_off, /* IN: new offset for DD */ int32 new_len /* IN: new length for DD */ ) { dd_t *dd_ptr = NULL; /* ptr to the DD info for the tag/ref */ int32 dont_change = -2; /* initialize to '-2' */ int32 ret_value = SUCCEED; HEclear(); /* Retrieve the atom's object, so we can update the DD */ if ((dd_ptr = HAatom_object(ddid)) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Update the tag/ref in memory */ if (new_len != dont_change) dd_ptr->length = new_len; if (new_off != dont_change) dd_ptr->offset = new_off; /* Update the disk, etc. */ if (HTIupdate_dd(dd_ptr->blk->frec, dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* HTPupdate() */ /****************************************************************************** NAME HTPinquire - Get the DD information for a DD (i.e. tag/ref/offset/length) DESCRIPTION Get the DD information for a DD id from the DD block. Passing NULL for any parameter does not try to update that parameter. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ intn HTPinquire(atom_t ddid, /* IN: DD id to inquire about */ uint16 *tag, /* IN: tag of DD */ uint16 *ref, /* IN: ref of DD */ int32 *off, /* IN: offset of DD */ int32 *len /* IN: length of DD */ ) { dd_t *dd_ptr; /* ptr to the DD info for the tag/ref */ intn ret_value = SUCCEED; HEclear(); /* Retrieve the atom's object, so we can update the DD */ if ((dd_ptr = HAatom_object(ddid)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the information requested */ if (tag != NULL) *tag = dd_ptr->tag; if (ref != NULL) *ref = dd_ptr->ref; if (off != NULL) *off = dd_ptr->offset; if (len != NULL) *len = dd_ptr->length; done: return ret_value; } /* HTPinquire() */ /****************************************************************************** NAME HTPis_special - Check if a DD id is associated with a special tag DESCRIPTION Checks if the tag for the DD id is a special tag. RETURNS Returns TRUE(1)/FALSE(0) *******************************************************************************/ intn HTPis_special(atom_t ddid /* IN: DD id to inquire about */ ) { dd_t *dd_ptr; /* ptr to the DD info for the tag/ref */ int32 ret_value = FAIL; HEclear(); /* Retrieve the atom's object, so we can update the DD */ if ((dd_ptr = HAatom_object(ddid)) == NULL) HGOTO_ERROR(DFE_ARGS, FALSE); /* Get the information requested */ if (SPECIALTAG(dd_ptr->tag)) ret_value = TRUE; else ret_value = FALSE; done: return ret_value; } /* HTPis_special() */ /****************************************************************************** NAME Hdupdd - Duplicate a data descriptor DESCRIPTION Duplicates a data descriptor so that the new tag/ref points to the same data element pointed to by the old tag/ref. Return FAIL if the given tag/ref are already in use. RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise *******************************************************************************/ intn Hdupdd(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag, /* IN: Tag of new tag/ref */ uint16 ref, /* IN: Ref of new tag/ref */ uint16 old_tag, /* IN: Tag of old tag/ref */ uint16 old_ref /* IN: Ref of old tag/ref */ ) { filerec_t *file_rec; /* file record */ atom_t old_dd; /* The DD id for the old DD */ atom_t new_dd; /* The DD id for the new DD */ int32 old_len; /* The length of the old DD */ int32 old_off; /* The offset of the old DD */ intn ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Attach to the old DD in the file */ if ((old_dd = HTPselect(file_rec, old_tag, old_ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* Create the new DD in the file */ if ((new_dd = HTPcreate(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_DUPDD, FAIL); /* Retrieve the old offset & length */ if (HTPinquire(old_dd, NULL, NULL, &old_off, &old_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Set the new DD's offset & length to the same as the old DD */ if (HTPupdate(new_dd, old_off, old_len) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* End access to the old & new DDs */ if (HTPendaccess(old_dd) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HTPendaccess(new_dd) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Hdupdd() */ /****************************************************************************** NAME Hnumber - Determine the number of objects of a given type DESCRIPTION Determine how many objects of the given tag are in the file. tag may be set to DFTAG_WILDCARD to get back the total number of objects in the file. Note, a return value of zero is not a fail condition. RETURNS the number of objects of type 'tag' else FAIL *******************************************************************************/ int32 Hnumber(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag /* IN: Tag to count */ ) { uintn all_cnt; uintn real_cnt; filerec_t *file_rec; /* file record */ int32 ret_value = SUCCEED; /* convert file id to file record */ file_rec = HAatom_object(file_id); HEclear(); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Go count the items with that tag */ if (HTIcount_dd(file_rec, tag, DFREF_WILDCARD, &all_cnt, &real_cnt) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); ret_value = (int32)real_cnt; done: return ret_value; } /* Hnumber() */ /****************************************************************************** NAME Hnewref - Returns a ref that is guaranteed to be unique in the file DESCRIPTION Returns a ref number that can be used with any tag to produce a unique tag/ref. Successive calls to Hnewref will generate a strictly increasing sequence until the highest possible ref had been returned, then Hnewref will return unused ref's starting from 1. RETURNS returns the ref number, 0 otherwise *******************************************************************************/ uint16 Hnewref(int32 file_id /* IN: File ID the tag/refs are in */) { filerec_t *file_rec; /* file record */ uint16 ref; /* the new ref */ uint16 ret_value = DFREF_NONE; uint32 i_ref; /* index for FOR loop */ /* clear error stack and check validity of file record id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, 0); /* if maxref of this file is still below the maximum, just return next number */ if (file_rec->maxref < MAX_REF) ret_value = ++(file_rec->maxref); else { /* otherwise, search for an empty ref */ /* incredibly slow but unlikely situation */ /* This could possibly get replaced with some sort of bit-vector manipulation -QAK */ for (i_ref = 1; i_ref <= (uint32)MAX_REF; i_ref++) { dd_t *dd_ptr = NULL; ref = (uint16)i_ref; if (HTIfind_dd(file_rec, (uint16)DFTAG_WILDCARD, ref, &dd_ptr, DF_FORWARD) == FAIL) { ret_value = ref; /* set return value to ref found */ break; /* break out of loop */ } /* end if */ } /* end for */ } /* end else */ done: return ret_value; } /* Hnewref() */ /****************************************************************************** NAME Htagnewref - returns a ref that is unique in the file for a given tag DESCRIPTION Returns a ref number that can be used with any tag to produce a unique tag/ref. Successive calls to Hnewref will generate a strictly increasing sequence until the highest possible ref had been returned, then Hnewref will return unused ref's starting from 1. RETURNS returns the ref number, 0 otherwise *******************************************************************************/ uint16 Htagnewref(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag /* IN: Tag to search for a new ref for */) { filerec_t *file_rec; /* file record */ tag_info *tinfo_ptr; /* pointer to the info for a tag */ tag_info **tip_ptr; /* ptr to the ptr to the info for a tag */ uint16 base_tag = BASETAG(tag); /* corresponding base tag (if the tag is special) */ uint16 ret_value = DFREF_NONE; /* clear error stack and check validity of file record id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, 0); if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) ret_value = 1; /* The first available ref */ else { /* found an existing tag */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((ret_value = (uint16)bv_find_next_zero(tinfo_ptr->b)) == (uint16)FAIL) HGOTO_ERROR(DFE_BVFIND, 0); } done: return ret_value; } /* Htagnewref() */ /****************************************************************************** NAME Hfind - locate the next object of a search in an HDF file DESCRIPTION Searches for the `next' DD that fits the search tag/ref. Wildcards apply. If origin is DF_FORWARD, search from current position forwards in the file, otherwise DF_BACKWARD searches backward from the current position in the file. If *find_tag and *find_ref are both set to 0, this indicates the beginning of a search, and the search will start from the beginning of the file if the direction is DF_FORWARD and from the and of the file if the direction is DF_BACKWARD. RETURNS returns SUCCEED (0) if successful and FAIL (-1) otherwise *******************************************************************************/ intn Hfind(int32 file_id, /* IN: file ID to search in */ uint16 search_tag, /* IN: the tag to search for (can be DFTAG_WILDCARD) */ uint16 search_ref, /* IN: ref to search for (can be DFREF_WILDCARD) */ uint16 *find_tag, /* IN: if (*find_tag==0) and (*find_ref==0) then start search */ /* OUT: tag matching the search tag */ uint16 *find_ref, /* IN: if (*find_tag==0) and (*find_ref==0) then start search */ /* OUT: ref matching the search ref */ int32 *find_offset, /* OUT: offset of the data element found */ int32 *find_length, /* OUT: length of the data element found */ intn direction /* IN: Direction to search in: */ /* DF_FORWARD searches forward from the current location */ /* DF_BACKWARD searches backward from the current location */ ) { filerec_t *file_rec; /* file record */ dd_t *dd_ptr; /* ptr to current ddlist searched */ intn ret_value = SUCCEED; /* clear error stack and check validity of the access id */ HEclear(); if (file_id == FAIL || /* search_ref > MAX_REF || */ find_tag == NULL || find_ref == NULL || find_offset == NULL || find_length == NULL || (direction != DF_FORWARD && direction != DF_BACKWARD)) HGOTO_ERROR(DFE_ARGS, FAIL); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); dd_ptr = NULL; if (*find_ref != 0 || *find_tag != 0) { /* continue a search */ /* get the block and index of the last tag/ref found, to continue */ if (HTIfind_dd(file_rec, *find_tag, *find_ref, &dd_ptr, direction) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); } /* end else */ /* Go get the next match in the given direction */ if (HTIfind_dd(file_rec, search_tag, search_ref, &dd_ptr, direction) == FAIL) HGOTO_DONE(FAIL); /* Not an error, we just didn't find the object */ *find_tag = dd_ptr->tag; *find_ref = dd_ptr->ref; *find_offset = dd_ptr->offset; *find_length = dd_ptr->length; done: return ret_value; } /* end Hfind() */ /****************************************************************************** NAME HDcheck_tagref - Checks to see if tag/ref is in DD list i.e. created already DESCRIPTION Routine checks to see if tag/ref exists in the DD list i.e. has been created. RETURNS 0-> tag/ref does not exist 1-> tag/ref exists -1-> function failed *******************************************************************************/ intn HDcheck_tagref(int32 file_id, /* IN: id of file */ uint16 tag, /* IN: Tag to check */ uint16 ref /* IN: ref to check */) { filerec_t *file_rec = NULL; /* file record */ dd_t *dd_ptr = NULL; /* ptr to the DD info for the tag/ref */ tag_info **tip_ptr = NULL; /* ptr to the ptr to the info for a tag */ tag_info *tinfo_ptr = NULL; /* pointer to the info for a tag */ uint16 base_tag; /* corresponding base tag (if the tag is special) */ intn ret_value = 1; /* default tag/ref exists */ /* clear error stack */ HEclear(); /* check args */ file_rec = HAatom_object(file_id); if (file_rec == NULL || (tag == DFTAG_NULL || tag == DFTAG_WILDCARD) || ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_ARGS, -1); base_tag = BASETAG(tag); /* Try to find the regular tag in the tag info tree */ if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) HGOTO_DONE(0); /* Not an error, we just didn't find the object */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((dd_ptr = DAget_elem(tinfo_ptr->d, (intn)ref)) == NULL) HGOTO_DONE(0); /* Not an error, we just didn't find the object */ /* found if we reach here*/ ret_value = 1; done: return ret_value; } /* HDcheck_tagref() */ /************************************************************************ NAME HDreuse_tagref -- reuse a data descriptor preserving tag/ref(assumes DD exists) DESCRIPTION Reuses the data descriptor of tag/ref in the dd list of the file. The tag/ref must already exist in the DD list. This routine is unsafe and may leave a file in a condition that is not usable by some routines. Use with care. Not valid for special elements right now. Used for allowing the data to change and move somewhere else in the file for non-special elements. Must be carefully if apply to higher-level objects like GR's and SDS that are comprised of other objects. Useful when re-writing simple elements whose size changes while preserving the original tag/ref of the element since other elements might refer to this element by tag/ref e.g. in a Vgroup. NOTE: this routine is similar to Hdeldd() but with a different name RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise ************************************************************************/ intn HDreuse_tagref(int32 file_id, /* IN: id of file */ uint16 tag, /* IN: tag of data descriptor to reuse */ uint16 ref /* IN: ref of data descriptor to reuse */) { filerec_t *file_rec = NULL; /* file record */ atom_t ddid; /* ID for the DD */ intn ret_value = SUCCEED; /* clear error stack and check validity of file record id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec) || tag == DFTAG_WILDCARD || ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_ARGS, FAIL); /* look for the dd to reuse */ if ((ddid = HTPselect(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* could reuse space in file by calling HPfreediskblock() routine but it does nothing for now. For later. */ /* if (HPfreediskblock(file_rec,dd_ptr->offset,dd_ptr->length) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); */ /* reuse the dd by setting the offset and length to INVALID_OFFSET and INVALID_LENGTH*/ if (HTPupdate(ddid, INVALID_OFFSET, INVALID_LENGTH) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* We leave the ref # as 'used' in the tag tree and don't delete from dynarray of refs. */ /* Remove DD from atom group since it should get re-created in Hstartaccess(). This could be handled better if Hstartaccess() was revamped to not create new access records for existing tag/ref pairs as well as revamping a few other routines. */ if (HAremove_atom(ddid) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end HDreuse_tagref */ /*-------------------------------------------------------------------------- NAME Hdeldd -- delete a data descriptor USAGE intn Hdeldd(file_id, tag, ref) int32 file_id; IN: id of file int16 tag; IN: tag of data descriptor to delete int16 ref; IN: ref of data descriptor to delete RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise DESCRIPTION Deletes a data descriptor of tag/ref from the dd list of the file. This routine is unsafe and may leave a file in a condition that is not usable by some routines. Use with care. For example, if this element is contained in a Vgroup, that group will *NOT* get updated to reflect that this element has been deleted. --------------------------------------------------------------------------*/ intn Hdeldd(int32 file_id, uint16 tag, uint16 ref) { filerec_t *file_rec; /* file record */ atom_t ddid; /* ID for the DD */ intn ret_value = SUCCEED; /* clear error stack and check validity of file record id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec) || tag == DFTAG_WILDCARD || ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_ARGS, FAIL); /* look for the dd to delete */ if ((ddid = HTPselect(file_rec, tag, ref)) == FAIL) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* delete the dd */ if (HTPdelete(ddid) == FAIL) HGOTO_ERROR(DFE_CANTDELDD, FAIL); done: return ret_value; } /* end Hdeldd */ #ifdef DD_DEBUG /*-------------------------------------------------------------------------- NAME HTPdump_dds -- Dump out the dd information for a file USAGE intn HTPdump_dds(file_id) int32 file_id; IN: file ID of HDF file to dump FILE *fout; IN: file stream to output to RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Prints out all the information (that you could _ever_ want to know) about the dd blocks and dd list for a file. --------------------------------------------------------------------------*/ intn HTPdump_dds(int32 file_id, FILE *fout) { filerec_t *file_rec; /* file record */ int ret_value = SUCCEED; /* clear error stack and check validity of file record id */ HEclear(); file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Print out each DD block */ { ddblock_t *block = file_rec->ddhead; /* dd block currently dumping */ intn blk_count = 0; /* Count of the number of blocks we've dumped */ intn i; /* local counting variable */ while (block != NULL) { dd_t *curr_dd; /* current dd to dump */ fprintf(fout, "DD block %d\n", blk_count); fprintf(fout, "# of DDs: %d, next block offset=%ld\n", (int)block->ndds, (long)block->nextoffset); fprintf(fout, "DD block offset: %ld, dirty?=%d\n", (long)block->myoffset, (int)block->dirty); for (i = 0, curr_dd = block->ddlist; i < block->ndds; i++, curr_dd++) fprintf(fout, "%5d: tag/ref=(%5u/%5u), offset=%7ld, length=%7ld\n", (int)i, (unsigned)curr_dd->tag, (unsigned)curr_dd->ref, (long)curr_dd->offset, (long)curr_dd->length); blk_count++; block = block->next; } /* end while */ } /* End of ddblock dumping code */ /* Dump the tag tree */ { void **t; if (NULL != (t = (void **)tbbtfirst( (TBBT_NODE *)*(file_rec->tag_tree)))) { /* found at least one node in the tree */ tag_info *tinfo_ptr; /* pointer to the info for a tag */ do { /* dump each node */ intn size; /* # of elements in the array */ intn i; /* local counting variable */ tinfo_ptr = (tag_info *)*t; /* get actual pointer to the tag info */ fprintf(fout, "Tag: %u\n", tinfo_ptr->tag); /* Dump the ref # dynarray */ if ((size = DAsize_array(tinfo_ptr->d)) != FAIL) { void *elem; fprintf(fout, "dynarray size=%d\n", size); for (i = 0; i < size; i++) { elem = DAget_elem(tinfo_ptr->d, i); if (elem != NULL) fprintf(fout, "dynarray[%d]=%p\n", i, elem); } /* end for */ } /* end if */ /* Dump the ref # bit-vector */ if ((size = bv_size(tinfo_ptr->b)) != FAIL) { intn bit; fprintf(fout, "bitvector size=%d\n", size); fprintf(fout, "bits set:"); for (i = 0; i < size; i++) { bit = bv_get(tinfo_ptr->b, i); if (bit != BV_FALSE) fprintf(fout, "%5d", i); } /* end for */ fprintf(fout, "\n"); } /* end if */ /* Get the next tag node */ t = (void **)tbbtnext((TBBT_NODE *)t); } while (t != NULL); } else fprintf(fout, "No nodes in tag tree\n"); } /* End of tag node dumping */ done: return ret_value; } /* HTPdump_dds */ #endif /* DD_DEBUG */ /* Private, static, internal routines. Do not call from outside this module */ /*-------------------------------------------------------------------------- NAME HTInew_dd_block -- create a new (empty) DD block USAGE intn HTInew_dd_block(file_rec) filerec_t * file_rec; IN: file record RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Create a new DDblock in the file. Update the previously last DDblock so that its offset points to the newly created one. --------------------------------------------------------------------------*/ static intn HTInew_dd_block(filerec_t *file_rec) { int32 nextoffset; /* offset of new ddblock */ uint8 ddhead[NDDS_SZ + OFFSET_SZ]; /* storage for the DD header */ int32 offset; /* offset to the offset of new ddblock */ ddblock_t *block; /* Block the DD is located in */ dd_t *list; /* dd list array of new dd block */ uint8 *p; /* Temporary buffer pointer. */ intn ndds; /* number of ndds in new DD block */ intn ret_value = SUCCEED; HEclear(); /* check integrity of file record */ if (file_rec->ddhead == NULL || file_rec->ddlast == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* allocate new dd block record and fill in data */ if ((block = (ddblock_t *)malloc(sizeof(ddblock_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); block->ndds = (int16)(ndds = (intn)file_rec->ddhead->ndds); /* snarf from first block */ block->next = (ddblock_t *)NULL; block->nextoffset = 0; /* Keep the filerec_t pointer around for each ddblock */ block->frec = file_rec; /* get room for the new DD block in the file */ if ((nextoffset = HPgetdiskblock(file_rec, NDDS_SZ + OFFSET_SZ + (ndds * DD_SZ), TRUE)) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); block->myoffset = nextoffset; /* set offset of new block */ block->dirty = (uintn)file_rec->cache; /* if we're caching, wait to write DD block */ if (file_rec->cache) /* if we are caching, wait to update previous DD block */ file_rec->dirty |= DDLIST_DIRTY; /* indicate file needs to be flushed */ else { p = ddhead; INT16ENCODE(p, block->ndds); INT32ENCODE(p, (int32)0); if (HP_write(file_rec, ddhead, NDDS_SZ + OFFSET_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end else */ /* set up the dd list of this dd block and put it in the file after the dd block header */ list = block->ddlist = (dd_t *)malloc((uint32)ndds * sizeof(dd_t)); if (list == (dd_t *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Fill the block with NIL tags */ list[0].tag = DFTAG_NULL; list[0].ref = DFREF_NONE; list[0].length = INVALID_LENGTH; list[0].offset = INVALID_OFFSET; list[0].blk = block; HDmemfill(&list[1], &list[0], sizeof(dd_t), (uint32)ndds - 1); if (file_rec->cache != 0) { /* if we are caching, wait to update previous DD block */ uint8 *tbuf; /* temporary buffer */ tbuf = (uint8 *)malloc(ndds * DD_SZ); if (tbuf == (uint8 *)NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); p = tbuf; DDENCODE(p, (uint16)DFTAG_NULL, (uint16)DFREF_NONE, (int32)INVALID_LENGTH, (int32)INVALID_OFFSET); HDmemfill(p, tbuf, DD_SZ, (uint32)(ndds - 1)); if (HP_write(file_rec, tbuf, ndds * DD_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); free(tbuf); } /* update previously last ddblock to point to this new dd block */ file_rec->ddlast->nextoffset = nextoffset; block->prev = file_rec->ddlast; file_rec->ddlast->next = block; if (file_rec->cache) { /* if we are caching, wait to update previous DD block */ file_rec->dirty |= DDLIST_DIRTY; /* indicate file needs to be flushed */ file_rec->ddlast->dirty = TRUE; /* indicate this block needs to be flushed */ } /* end if */ else { if (file_rec->ddhead == file_rec->ddlast) offset = MAGICLEN + NDDS_SZ; else offset = file_rec->ddlast->prev->nextoffset + NDDS_SZ; p = ddhead; INT32ENCODE(p, nextoffset); if (HPseek(file_rec, offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (HP_write(file_rec, ddhead, OFFSET_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end else */ /* update file record */ file_rec->ddlast = block; /* set the end of the file to the end of the current DD block */ file_rec->f_end_off = block->myoffset + (NDDS_SZ + OFFSET_SZ) + (block->ndds * DD_SZ); done: return ret_value; } /* HTInew_dd_block */ /*-------------------------------------------------------------------------- NAME HTIfind_dd -- find a specific DD in the file USAGE int HTIfind_dd(file_rec, tag, ref, dd_ptr, direction) filerec_t * file_rec; IN: file record to search uint16 tag; IN: tag of element to find uint16 ref; IN: ref of element to find dd_t ** pdd; OUT: pointer to the DD in memory intn direction; IN: direction to search (DF_FORWARD / DF_BACKWARD) RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Find the dd with tag and ref, by returning the block where the dd resides and the index of the dd in the ddblock ddlist. --------------------------------------------------------------------------*/ static intn HTIfind_dd(filerec_t *file_rec, uint16 look_tag, uint16 look_ref, dd_t **pdd, intn direction) { intn idx; /* index into ddlist of current dd searched */ ddblock_t *block; /* ptr to current ddblock searched */ dd_t *list; /* ptr to current ddlist searched */ uint16 special_tag; /* corresponding special tag */ intn ret_value = SUCCEED; HEclear(); /* Create the special version of the tag to search for also */ special_tag = MKSPECIALTAG(look_tag); if (look_tag != DFTAG_WILDCARD && look_ref != DFTAG_WILDCARD) { /* easy to optimize case, looking for a specific tag/ref pair */ tag_info **tip_ptr; /* ptr to the ptr to the info for a tag */ tag_info *tinfo_ptr; /* pointer to the info for a tag */ dd_t *dd_ptr; /* ptr to the DD info for a tag/ref */ uint16 base_tag = BASETAG(look_tag); /* corresponding base tag (if the tag is special) */ /* Try to find the regular tag in the tag info tree */ if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) HGOTO_DONE(FAIL); /* Not an error, we just didn't find the object */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((dd_ptr = DAget_elem(tinfo_ptr->d, (intn)look_ref)) == NULL) HGOTO_DONE(FAIL); /* Not an error, we just didn't find the object */ *pdd = dd_ptr; HGOTO_DONE(SUCCEED); } /* end if */ else { /* handle wildcards, etc. */ if (direction == DF_FORWARD) { /* search forward through the DD list */ if (*pdd == NULL) { block = file_rec->ddhead; idx = 0; } /* end if */ else { block = (*pdd)->blk; idx = ((*pdd) - &block->ddlist[0]) + 1; } /* end else */ if (look_tag == DFTAG_WILDCARD && look_ref == DFREF_WILDCARD) { /* Both tag & ref are wildcards */ for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL) continue; /* we have a match !! (anything matches! :-) */ *pdd = list; HGOTO_DONE(SUCCEED); } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end if */ else if (look_tag == DFTAG_NULL && look_ref == DFTAG_WILDCARD) { /* special case for quick lookup of empty DD's */ if (file_rec->ddnull == NULL) block = file_rec->ddhead; else block = file_rec->ddnull; if (file_rec->ddnull_idx < 0) idx = 0; else idx = file_rec->ddnull_idx + 1; for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL) { /* we have a match !! */ *pdd = list; /* Update the DFTAG_NULL pointers */ file_rec->ddnull = block; file_rec->ddnull_idx = idx; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end if */ else if (look_tag == DFTAG_WILDCARD) { /* tag is wildcard */ for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL) continue; if (list->ref == look_ref) { /* we have a match !! */ *pdd = list; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end if */ else if (look_ref == DFREF_WILDCARD) { /* ref is wildcard */ if (special_tag == DFTAG_NULL) { /* Change this to lookup the next used ref # in the bitvector or dynarray -QAK */ for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL && look_tag != DFTAG_NULL) continue; if (list->tag == look_tag) { /* we have a match !! */ *pdd = list; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end if */ else { for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL && look_tag != DFTAG_NULL) continue; if (list->tag == look_tag || list->tag == special_tag) { /* we have a match !! */ *pdd = list; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end else */ } /* end if */ else { /* Both tag & ref are not wildcards */ for (; block; block = block->next) { list = &block->ddlist[idx]; for (; idx < block->ndds; idx++, list++) { /* skip the empty dd's */ if (list->tag == DFTAG_NULL && look_tag != DFTAG_NULL) continue; if ((list->tag == look_tag || (special_tag != DFTAG_NULL && list->tag == special_tag)) && list->ref == look_ref) { /* we have a match !! */ *pdd = list; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ idx = 0; } /* end for */ } /* end else */ } /* end if */ else if (direction == DF_BACKWARD) { /* search backward through the DD list */ if (*pdd == NULL) { block = file_rec->ddlast; idx = block->ndds - 1; } /* end if */ else { block = (*pdd)->blk; idx = ((*pdd) - &block->ddlist[0]) - 1; } /* end else */ for (; block;) { list = block->ddlist; for (; idx >= 0; idx--) { /* skip the empty dd's */ if (list[idx].tag == DFTAG_NULL && look_tag != DFTAG_NULL) continue; if (((look_tag == DFTAG_WILDCARD || list[idx].tag == look_tag) || (special_tag != DFTAG_NULL && list[idx].tag == special_tag)) && (look_ref == DFREF_WILDCARD || list[idx].ref == look_ref)) { /* we have a match !! */ *pdd = &list[idx]; HGOTO_DONE(SUCCEED); } /* end if */ } /* end for */ /* start from beginning of the next dd list */ block = block->prev; if (block != NULL) idx = block->ndds - 1; } /* end for */ } /* end if */ } /* end else */ /* If we get here, we've failed */ ret_value = FAIL; done: return ret_value; } /* HTIfind_dd */ /*-------------------------------------------------------------------------- NAME HTIupdate_dd -- update a DD on disk USAGE int HTIupdate_dd(file_rec, dd_ptr) filerec_t *file_rec; IN: id of file dd_t *dd_ptr; IN: pointer to dd to update RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Takes appropriate action to note that a DD in a DD block has changed --------------------------------------------------------------------------*/ static intn HTIupdate_dd(filerec_t *file_rec, dd_t *dd_ptr) { ddblock_t *block; /* DD block the dd is in */ int32 idx; /* index of the DD in the DD block */ intn ret_value = SUCCEED; HEclear(); block = dd_ptr->blk; idx = dd_ptr - &block->ddlist[0]; if (file_rec->cache) { /* if caching is on, postpone update until later */ file_rec->dirty |= DDLIST_DIRTY; block->dirty = TRUE; } /* end if */ else { int32 offset; /* offset of updated dd in file */ uint8 tbuf[DD_SZ]; /* storage for the DD */ uint8 *p; /* temp buffer ptr */ /* look for offset of updated dd block in the file */ offset = block->myoffset + (NDDS_SZ + OFFSET_SZ) + (idx * DD_SZ); /* write in the updated dd */ if (HPseek(file_rec, offset) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); p = tbuf; DDENCODE(p, dd_ptr->tag, dd_ptr->ref, dd_ptr->offset, dd_ptr->length); if (HP_write(file_rec, tbuf, DD_SZ) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end else */ /* check whether to incr. offset of end of file */ /* not certain whether this is actually necessary, but better safe than */ /* sorry later... -QAK */ if ((dd_ptr->offset != INVALID_OFFSET && dd_ptr->length != INVALID_LENGTH) && (dd_ptr->offset + dd_ptr->length) > file_rec->f_end_off) file_rec->f_end_off = dd_ptr->offset + dd_ptr->length; done: return ret_value; } /* HTIupdate_dd */ /* ----------------------------- HTIcount_dd ------------------------------ */ /* NAME HTIcount_dd -- counts the dd's of a certain type in file USAGE intn HTIcount_dd(file_rec, tag, ref, all_cnt, real_cnt) filerec_t * file_rec; IN: file record to search uint16 tag; IN: tag of element to find (can be DFTAG_WILDCARD) uint16 ref; IN: ref of element to find (can be DFREF_WILDCARD) uintn *all_cnt; OUT: Count of all the tag/ref pairs found, including DFTAG_NULL and DFTAG_FREE uintn *real_cnt; OUT: Count of all the tag/ref pairs found, excluding DFTAG_NULL and DFTAG_FREE RETURNS SUCCEED / FAIL DESCRIPTION Counts the number of tag/ref pairs in a file. This routine keeps track of and returns to the user the number of all tag/refs and the number of "real" tag/refs found. "Real" tag/refs are any except DFTAG_NULL & DFTAG_FREE. This routine always counts the total tag/refs in the file, no provision is made for partial searches. ---------------------------------------------------------------------------*/ static intn HTIcount_dd(filerec_t *file_rec, uint16 cnt_tag, uint16 cnt_ref, uintn *all_cnt, uintn *real_cnt) { uintn t_all_cnt = 0; /* count of all tag/refs found */ uintn t_real_cnt = 0; /* count of all tag/refs except NULL & FREE */ intn idx; /* index into ddlist of current dd searched */ ddblock_t *block; /* ptr to current ddblock searched */ dd_t *dd_ptr; /* ptr to current ddlist searched */ uint16 special_tag; /* corresponding special tag */ HEclear(); /* search for special version also */ special_tag = MKSPECIALTAG(cnt_tag); /* Change these algorithms to take advantage of the dynamic arrays for tags -QAK */ switch (cnt_tag) { case DFTAG_WILDCARD: for (block = file_rec->ddhead; block != NULL; block = block->next) { t_all_cnt += (uintn)block->ndds; dd_ptr = block->ddlist; for (idx = 0; idx < block->ndds; idx++, dd_ptr++) { /* skip the empty dd's */ if (dd_ptr->tag == DFTAG_NULL || dd_ptr->tag == DFTAG_FREE) continue; if ((cnt_ref == DFREF_WILDCARD || dd_ptr->ref == cnt_ref)) t_real_cnt++; } /* end for */ } /* end for */ break; case DFTAG_NULL: case DFTAG_FREE: for (block = file_rec->ddhead; block != NULL; block = block->next) { t_all_cnt += (uintn)block->ndds; dd_ptr = block->ddlist; for (idx = 0; idx < block->ndds; idx++, dd_ptr++) if ((dd_ptr->tag == cnt_tag || (special_tag != DFTAG_NULL && dd_ptr->tag == special_tag)) && (cnt_ref == DFREF_WILDCARD || dd_ptr->ref == cnt_ref)) t_real_cnt++; } /* end for */ break; default: if (special_tag == DFTAG_NULL) { for (block = file_rec->ddhead; block != NULL; block = block->next) { t_all_cnt += (uintn)block->ndds; dd_ptr = block->ddlist; for (idx = 0; idx < block->ndds; idx++, dd_ptr++) if (dd_ptr->tag == cnt_tag && (dd_ptr->ref == cnt_ref || cnt_ref == DFREF_WILDCARD)) t_real_cnt++; } } else { if (cnt_ref == DFREF_WILDCARD) { for (block = file_rec->ddhead; block != NULL; block = block->next) { t_all_cnt += (unsigned)block->ndds; dd_ptr = block->ddlist; for (idx = 0; idx < block->ndds; idx++, dd_ptr++) if (dd_ptr->tag == cnt_tag || dd_ptr->tag == special_tag) t_real_cnt++; } } else { for (block = file_rec->ddhead; block != NULL; block = block->next) { t_all_cnt += (uintn)block->ndds; dd_ptr = block->ddlist; for (idx = 0; idx < block->ndds; idx++, dd_ptr++) if ((dd_ptr->tag == cnt_tag || dd_ptr->tag == special_tag) && dd_ptr->ref == cnt_ref) t_real_cnt++; } } } break; } /* end switch */ *all_cnt = t_all_cnt; *real_cnt = t_real_cnt; return SUCCEED; } /* HTIcount_dd */ /*-------------------------------------------------------------------------- NAME HTIregister_tag_ref -- mark a ref # as used for a tag USAGE intn HTIregister_tag_ref(file_rec, dd_ptr) filerec_t * file_rec; IN: file record dd_t * dd_ptr; IN: pointer to the dd the tag/ref is in RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Marks a ref # as used for a given tag. --------------------------------------------------------------------------*/ static intn HTIregister_tag_ref(filerec_t *file_rec, dd_t *dd_ptr) { tag_info *tinfo_ptr; /* pointer to the info for a tag */ tag_info **tip_ptr; /* ptr to the ptr to the info for a tag */ uint16 base_tag = BASETAG(dd_ptr->tag); /* the base tag for the tag tree */ int ret_value = SUCCEED; HEclear(); /* Add to the tag info tree */ if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) { /* a new tag was found */ if ((tinfo_ptr = (tag_info *)calloc(1, sizeof(tag_info))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); tinfo_ptr->tag = base_tag; /* Insert the tag node into the tree */ tbbtdins(file_rec->tag_tree, (void *)tinfo_ptr, NULL); /* Take care of the bit-vector */ if ((tinfo_ptr->b = bv_new(-1)) == NULL) HGOTO_ERROR(DFE_BVNEW, FAIL); /* Set the 0'th bit in the bit-vector (cannot be stored in HDF files) */ /* Yes, this is a kludge due to ref # zero not being used -QAK */ if (bv_set(tinfo_ptr->b, 0, BV_TRUE) == FAIL) HGOTO_ERROR(DFE_BVSET, FAIL); /* Take care of the dynarray */ if ((tinfo_ptr->d = DAcreate_array(REF_DYNARRAY_START, REF_DYNARRAY_INCR)) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else { /* found an existing tag */ intn ref_bit; /* bit of the ref # in the tag info */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((ref_bit = bv_get(tinfo_ptr->b, (intn)dd_ptr->ref)) == FAIL) HGOTO_ERROR(DFE_BVGET, FAIL); if (ref_bit == BV_TRUE) HGOTO_ERROR(DFE_DUPDD, FAIL); } /* end else */ /* Set the bit in the bit-vector */ if (bv_set(tinfo_ptr->b, (intn)dd_ptr->ref, BV_TRUE) == FAIL) HGOTO_ERROR(DFE_BVSET, FAIL); /* Insert the DD info into the dynarray for later use */ if (DAset_elem(tinfo_ptr->d, (intn)dd_ptr->ref, (void *)dd_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: if (ret_value == FAIL) { /* Error condition cleanup */ if ((tinfo_ptr != NULL) && (tinfo_ptr->d != NULL)) DAdestroy_array(tinfo_ptr->d, 0); } return ret_value; } /* HTIregister_tag_ref */ /*-------------------------------------------------------------------------- NAME HTIunregister_tag_ref -- mark a ref # as free for a tag USAGE intn HTIunregister_tag_ref(file_rec, tag, ref) filerec_t * file_rec; IN: file record dd_t *dd_ptr; IN: DD of the tag/ref to unregister RETURNS returns SUCCEED (0) if successful and FAIL (-1) if failed. DESCRIPTION Marks a ref # as free for a given tag. --------------------------------------------------------------------------*/ static intn HTIunregister_tag_ref(filerec_t *file_rec, dd_t *dd_ptr) { tag_info *tinfo_ptr; /* pointer to the info for a tag */ tag_info **tip_ptr; /* ptr to the ptr to the info for a tag */ uint16 base_tag = BASETAG(dd_ptr->tag); /* the base tag for the tag tree */ int ret_value = SUCCEED; HEclear(); /* Add to the tag info tree */ if ((tip_ptr = (tag_info **)tbbtdfind(file_rec->tag_tree, (void *)&base_tag, NULL)) == NULL) { HGOTO_ERROR(DFE_BADTAG, FAIL); } /* end if */ else { /* found an existing tag */ intn ref_bit; /* bit of the ref # in the tag info */ tinfo_ptr = *tip_ptr; /* get the pointer to the tag info */ if ((ref_bit = bv_get(tinfo_ptr->b, (intn)dd_ptr->ref)) == FAIL) HGOTO_ERROR(DFE_BVGET, FAIL); if (ref_bit == BV_FALSE) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (bv_set(tinfo_ptr->b, (intn)dd_ptr->ref, BV_FALSE) == FAIL) HGOTO_ERROR(DFE_BVSET, FAIL); /* Delete the DD info from the tag tree */ if (DAdel_elem(tinfo_ptr->d, (intn)dd_ptr->ref) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Delete the tag/ref from the file */ dd_ptr->tag = DFTAG_NULL; } /* end else */ done: return ret_value; } /* HTIunregister_tag_ref */ /* ---------------------------- tagcompare ------------------------- */ /* Compares two tag B-tree keys for equality. Similar to memcmp. *** Only called by B-tree routines, should _not_ be called externally *** */ intn tagcompare(void *k1, void *k2, intn cmparg) { intn ret_value; (void)cmparg; ret_value = ((intn)((*(uint16 *)k1) - (*(uint16 *)k2))); /* valid for integer keys */ return ret_value; } /* tagcompare */ /* ---------------------------- tagdestroynode ------------------------- */ /* Frees tag B-Tree nodes *** Only called by B-tree routines, should _not_ be called externally *** */ void tagdestroynode(void *n) { tag_info *t = (tag_info *)n; if (t->b != NULL) bv_delete(t->b); if (t->d != NULL) DAdestroy_array(t->d, 0); free(n); } /* tagdestroynode */ hdf4-hdf4.3.1/hdf/src/hfilef.c000066400000000000000000000204611503061704500157630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: hfilef.c * Purpose: C stubs for Fortran low level routines * Invokes: hfile.c * Contents: * hiopen_: call Hopen to open HDF file * hclose_: call Hclose to close HDF file *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- * Name: hiopen * Purpose: call Hopen to open HDF file * Inputs: name: name of file to open * acc_mode: access mode - integer with value DFACC_READ etc. * defdds: default number of DDs per header block * namelen: length of name * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers * Invokes: Hopen * Method: Convert filename to C string, call Hopen *---------------------------------------------------------------------------*/ intf nhiopen(_fcd name, intf *acc_mode, intf *defdds, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, (intn)*namelen); if (!fn) return FAIL; ret = (intf)Hopen(fn, (intn)*acc_mode, (int16)*defdds); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: hclose * Purpose: Call DFclose to close HDF file * Inputs: file_id: handle to HDF file to close * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Invokes: Hclose *---------------------------------------------------------------------------*/ intf nhclose(intf *file_id) { return Hclose(*file_id); } /*----------------------------------------------------------------------------- * Name: hnumber * Purpose: Get number of elements with tag * Inputs: file_id: handle to HDF file to close * Returns: the number of objects of type 'tag' else FAIL * Users: HDF Fortran programmers * Invokes: Hnumber *---------------------------------------------------------------------------*/ intf nhnumber(intf *file_id, intf *tag) { return Hnumber((int32)*file_id, (uint16)*tag); } /*----------------------------------------------------------------------------- * Name: hxisdir * Purpose: call HXsetdir to set the directory variable for locating an external file * Inputs: dir: names of directory separated by colons * Returns: SUCCEED if no error, else FAIL * Users: HDF Fortran programmers * Invokes: HXsetdir * Method: Convert dir to C string, call HXsetdir *---------------------------------------------------------------------------*/ intf nhxisdir(_fcd dir, intf *dirlen) { char *fn; intf ret; fn = HDf2cstring(dir, (intn)*dirlen); if (!fn) return FAIL; ret = (intf)HXsetdir(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: hxiscdir * Purpose: call HXsetcreatedir to set the directory variable for creating an external file * Inputs: dir: name of directory * Returns: SUCCEED if no error, else FAIL * Users: HDF Fortran programmers * Invokes: HXsetcreatedir * Method: Convert dir to C string, call HXsetcdir *---------------------------------------------------------------------------*/ intf nhxiscdir(_fcd dir, intf *dirlen) { char *fn; intf ret; fn = HDf2cstring(dir, (intn)*dirlen); if (!fn) return FAIL; ret = (intf)HXsetcreatedir(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: hddontatexit * Purpose: Call HDdont_atexit * Inputs: * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Invokes: HDdont_atexit *---------------------------------------------------------------------------*/ intf nhddontatexit(void) { return (intf)(HDdont_atexit()); } /*----------------------------------------------------------------------------- * Name: hglibverc * Purpose: Calls Hgetlibversion * * Outputs: major_v - major version number * minor_v - minor version number * release - release number * string - version number text string * Returns: SUCCEED (0) if successful and FAIL(-1) otherwise *----------------------------------------------------------------------------*/ intf nhglibverc(intf *major_v, intf *minor_v, intf *release, _fcd string, intf *len) { char *cstring; uint32 cmajor_v; uint32 cminor_v; uint32 crelease; intn status; cstring = NULL; if (*len) cstring = (char *)malloc((uint32)*len + 1); status = Hgetlibversion(&cmajor_v, &cminor_v, &crelease, cstring); HDpackFstring(cstring, _fcdtocp(string), *len); free(cstring); *major_v = (intf)cmajor_v; *minor_v = (intf)cminor_v; *release = (intf)crelease; return (intf)status; } /*----------------------------------------------------------------------------- * Name: hgfilverc * Purpose: Calls Hgetfileversion * Inputs: file_id - file identifier * Outputs: major_v - major version number * minor_v - minor version number * release - release number * string - version number text string * Returns: SUCCEED (0) if successful and FAIL(-1) otherwise *----------------------------------------------------------------------------*/ intf nhgfilverc(intf *file_id, intf *major_v, intf *minor_v, intf *release, _fcd string, intf *len) { char *cstring; uint32 cmajor_v; uint32 cminor_v; uint32 crelease; intn status; cstring = NULL; if (*len) cstring = (char *)malloc((uint32)*len + 1); status = Hgetfileversion((int32)*file_id, &cmajor_v, &cminor_v, &crelease, cstring); HDpackFstring(cstring, _fcdtocp(string), *len); free(cstring); *major_v = (intf)cmajor_v; *minor_v = (intf)cminor_v; *release = (intf)crelease; return (intf)status; } /*----------------------------------------------------------------------------- * Name: hiishdf * Purpose: call Hishdf function * Inputs: name: Name of the file * namelen: length of name * Returns: TRUE(1) on success, FALSE (-1) on failure * Users: HDF Fortran programmers * Method: Convert filename to C string, call Hishdf *---------------------------------------------------------------------------*/ intf nhiishdf(_fcd name, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, (intn)*namelen); if (!fn) return FAIL; ret = (intf)Hishdf(fn); free(fn); return ret; } /*----------------------------------------------------------------------------- * Name: hconfinfc * Purpose: call HCget_config_info * Inputs: coder_type - compression type * Outputs: info - flag to indicate compression status * 0 - compression is not available * 1 - only decoder found * 2 - both decoder and encoder are available * Returns: SUCCEED (0) on success, FALSE (-1) on failure *---------------------------------------------------------------------------*/ intf nhconfinfc(intf *coder_type, intf *info) { comp_coder_t coder_type_c; uint32 info_c; intn status; coder_type_c = (comp_coder_t)*coder_type; status = HCget_config_info(coder_type_c, &info_c); if (status == FAIL) return FAIL; *info = (intf)info_c; return status; } hdf4-hdf4.3.1/hdf/src/hfileff.f000066400000000000000000000166201503061704500161360ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: hfileFf.f C Purpose: Fortran stubs for Palette Fortran routines C Invokes: hfileF.c C Contents: C hopen: Call hiopen to open file C hnumber: Call hnumber C Remarks: none C----------------------------------------------------------------------------*/ C------------------------------------------------------------------------------ C Name: hopen C Purpose: call hiopen, open file C Inputs: path: Name of file to be opened C access: DFACC_READ, DFACC_WRITE, DFACC_CREATE, C or any bitwise-or of the above. C ndds: Number of dds in header block if file needs to be created. C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C Invokes: hiopen C----------------------------------------------------------------------------*/ integer function hopen(filename, access, defdds) character*(*) filename integer access, defdds, hiopen hopen = hiopen(filename, access, defdds, len(filename)) return end C------------------------------------------------------------------------------ C Name: hxsdir C Purpose: call hxisdir to set directory variable for locating an external file C Inputs: dir: names of directory separated by colons. C Returns: SUCCEED if no error, else FAIL C Users: Fortran stub routine C Invokes: hxisdir C----------------------------------------------------------------------------*/ integer function hxsdir(dir) character*(*) dir integer hxisdir hxsdir = hxisdir(dir, len(dir)) return end C------------------------------------------------------------------------------ C Name: hxscdir C Purpose: call hxiscdir to set directory variable for creating an external file C Inputs: dir: name of the directory C Returns: SUCCEED if no error, else FAIL C Users: Fortran stub routine C Invokes: hxiscdir C----------------------------------------------------------------------------*/ integer function hxscdir(dir) character*(*) dir integer hxiscdir hxscdir = hxiscdir(dir, len(dir)) return end C----------------------------------------------------------------------------- C Name: hglibver C Purpose: retrieves the version information for the current HDF library C Outputs: major_v - major version number C minor_v - minor version number C release - release number C string - version number test string C Returns: SUCCEED (0) if successful and FAIL(-1) otherwise C-----------------------------------------------------------------------------*/ integer function hglibver(major_v, minor_v, release, string) integer major_v, minor_v, release character*(*) string integer hglibverc hglibver = hglibverc(major_v, minor_v, release, string, . len(string)) return end C----------------------------------------------------------------------------- C Name: hgfilver C Purpose: retrieves the version information for the current HDF library C Inputs: file_id - file identifier C Outputs: major_v - major version number C minor_v - minor version number C release - release number C string - version number test string C Returns: SUCCEED (0) if successful and FAIL(-1) otherwise C-----------------------------------------------------------------------------*/ integer function hgfilver(file_id, major_v, minor_v, release, . string) integer file_id, major_v, minor_v, release character*(*) string integer hgfilverc hgfilver = hgfilverc(file_id, major_v, minor_v, release, string, . len(string)) return end C------------------------------------------------------------------------------ C Name: hishdff C Purpose: Identifies if the file "file_name" is an HDF file. C Inputs: file_name: File name C Returns: TRUE (1) if successful, FALSE (0) otherwise. C Invokes: hiopen C----------------------------------------------------------------------------*/ integer function hishdff(filename) character*(*) filename integer hiishdf hishdff = hiishdf(filename, len(filename)) return end C----------------------------------------------------------------------------- C Name: hestringf C Purpose: retrieves the error message associated with the specified error code C Inputs: error_code C Outputs: error_message - string associated with the error code C Returns: SUCCEED (0) if successful and FAIL(-1) otherwise C-----------------------------------------------------------------------------*/ integer function hestringf(error_code, error_message) integer error_code character*(*) error_message integer hestringc hestringf = hestringc(error_code, error_message, . len(error_message)) return end C----------------------------------------------------------------------------- C Name: heprntf C Purpose: prints values from the error stack C Inputs: filename - name of the output file; if length of the C filename is 0, then output goes to stdout. C print_levels - number of levels to print C Returns: SUCCEED (0) if successful and FAIL(-1) otherwise C C Remarks: This routine always prints to the standard output. C-----------------------------------------------------------------------------*/ integer function heprntf(filename, print_levels) integer print_levels character*(*) filename integer heprntc heprntf = heprntc(filename, print_levels,len(filename)) return end C----------------------------------------------------------------------------- C Name: hconfinf C Purpose: return info about configuration of a compression method C Inputs: coder_type - the compression type queried C info - flag to indicate compression status C 0 - no compression found C 1 - decoder only found C 3 - both decoder and encoder found C Returns: SUCCEED (0) if successful and FAIL(-1) otherwise C C Currently this routine is used with SZIP compression only C-----------------------------------------------------------------------------*/ integer function hconfinf(coder_type, info) integer coder_type, info integer hconfinfc hconfinf = hconfinfc(coder_type, info) return end hdf4-hdf4.3.1/hdf/src/hkit.c000066400000000000000000000236421503061704500154710ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf_priv.h" #include "hkit_priv.h" /* LOCAL ROUTINES None EXPORTED ROUTINES HDc2fstr -- convert a C string into a Fortran string IN PLACE HDf2cstring -- convert a Fortran string to a C string HDpackFstring -- convert a C string into a Fortran string HDflush -- flush the HDF file HDgettagdesc -- return a text description of a tag HDgettagsname -- return a text name of a tag HDgettagnum -- return the tag number for a text description of a tag HDgetNTdesc -- return a text description of a number-type HDfidtoname -- return the filename the file ID corresponds to */ /* ------------------------------- HDc2fstr ------------------------------- */ /* NAME HDc2fstr -- convert a C string into a Fortran string IN PLACE USAGE intn HDc2fstr(str, len) char * str; IN: string to convert intn len; IN: length of Fortran string RETURNS SUCCEED DESCRIPTION Change a C string (NULL terminated) into a Fortran string. Basically, all that is done is that the NULL is ripped out and the string is padded with spaces ---------------------------------------------------------------------------*/ intn HDc2fstr(char *str, intn len) { int i; i = (int)strlen(str); for (; i < len; i++) str[i] = ' '; return SUCCEED; } /* HDc2fstr */ /* ----------------------------- HDf2cstring ------------------------------ */ /* NAME HDf2cstring -- convert a Fortran string to a C string USAGE char * HDf2cstring(fdesc, len) _fcd fdesc; IN: Fortran string descriptor intn len; IN: length of Fortran string RETURNS Pointer to the C string if success, else NULL DESCRIPTION Chop off trailing blanks off of a Fortran string and move it into a newly allocated C string. It is up to the user to free this string. ---------------------------------------------------------------------------*/ char * HDf2cstring(_fcd fdesc, intn len) { char *cstr, *str; int i; str = _fcdtocp(fdesc); /* This should be equivalent to the above test -QAK */ for (i = len - 1; i >= 0 && !isgraph((int)str[i]); i--) /*EMPTY*/; cstr = (char *)malloc((uint32)(i + 2)); if (!cstr) HRETURN_ERROR(DFE_NOSPACE, NULL); cstr[i + 1] = '\0'; memcpy(cstr, str, i + 1); return cstr; } /* HDf2cstring */ /* ---------------------------- HDpackFstring ----------------------------- */ /* NAME HDpackFstring -- convert a C string into a Fortran string USAGE intn HDpackFstring(src, dest, len) char * src; IN: source string char * dest; OUT: destination intn len; IN: length of string RETURNS SUCCEED / FAIL DESCRIPTION given a NULL terminated C string 'src' convert it to a space padded Fortran string 'dest' of length 'len' This is very similar to HDc2fstr except that function does it in place and this one copies. We should probably only support one of these. ---------------------------------------------------------------------------*/ intn HDpackFstring(char *src, char *dest, intn len) { intn sofar; for (sofar = 0; (sofar < len) && (*src != '\0'); sofar++) *dest++ = *src++; while (sofar++ < len) *dest++ = ' '; return SUCCEED; } /* HDpackFstring */ /* ------------------------------- HDflush -------------------------------- */ /* NAME HDflush -- flush the HDF file USAGE intn HDflush(fid) int32 fid; IN: file ID RETURNS SUCCEED / FAIL DESCRIPTION Force the system to flush the HDF file stream This should be primarily used for debugging The MAC does not really support fflush() so this r outine just returns SUCCEED always on a MAC w/o really doing anything. ---------------------------------------------------------------------------*/ intn HDflush(int32 file_id) { filerec_t *file_rec; file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HRETURN_ERROR(DFE_ARGS, FAIL); HI_FLUSH(file_rec->file); return SUCCEED; } /* HDflush */ /* ----------------------------- HDgettagdesc ----------------------------- */ /* NAME HDgettagdesc -- return a text description of a tag USAGE char * HDgettagdesc(tag) uint16 tag; IN: tag of element to find RETURNS Descriptive text or NULL DESCRIPTION Map a tag to a statically allocated text description of it. ---------------------------------------------------------------------------*/ const char * HDgettagdesc(uint16 tag) { intn i; for (i = 0; i < (intn)(sizeof(tag_descriptions) / sizeof(tag_descript_t)); i++) if (tag_descriptions[i].tag == tag) return tag_descriptions[i].desc; return NULL; } /* HDgettagdesc */ /* ----------------------------- HDgettagsname ----------------------------- */ /* NAME HDgettagsname -- return a text name of a tag USAGE char * HDgettagsname(tag) uint16 tag; IN: tag of element to find RETURNS Descriptive text or NULL DESCRIPTION Map a tag to a dynamically allocated text name of it. Checks for special elements now. --------------------------------------------------------------------------- */ char * HDgettagsname(uint16 tag) { char *ret = NULL; intn i; if (SPECIALTAG(tag)) ret = (char *)strdup("Special "); tag = BASETAG(tag); for (i = 0; i < (intn)(sizeof(tag_descriptions) / sizeof(tag_descript_t)); i++) if (tag_descriptions[i].tag == tag) { if (ret == NULL) ret = (char *)strdup(tag_descriptions[i].name); else { char *t; t = (char *)malloc(strlen(ret) + strlen(tag_descriptions[i].name) + 2); if (t == NULL) { free(ret); HRETURN_ERROR(DFE_NOSPACE, NULL); } strcpy(t, ret); strcat(t, tag_descriptions[i].name); free(ret); ret = t; } } return ret; } /* HDgettagsname */ /* ----------------------------- HDgettagnum ------------------------------ */ /* NAME HDgettagnum -- return the tag number for a text description of a tag USAGE intn HDgettagnum(tag_name) char * tag_name; IN: name of tag to find RETURNS Tag number (>=0) on success or FAIL on failure DESCRIPTION Map a tag name to a statically allocated tag number for it. ---------------------------------------------------------------------------*/ intn HDgettagnum(const char *tag_name) { intn i; for (i = 0; i < (intn)(sizeof(tag_descriptions) / sizeof(tag_descript_t)); i++) if (0 == strcmp(tag_descriptions[i].name, tag_name)) return (intn)tag_descriptions[i].tag; return FAIL; } /* HDgettagnum */ /* ----------------------------- HDgetNTdesc ----------------------------- */ /* NAME HDgetNTdesc -- return a text description of a number-type USAGE char * HDgetNTdesc(nt) int32 nt; IN: tag of element to find RETURNS Descriptive text or NULL DESCRIPTION Map a number-type to a dynamically allocated text description of it. ---------------------------------------------------------------------------*/ char * HDgetNTdesc(int32 nt) { intn i; char *ret_desc = NULL; /* evil hard-coded values */ if (nt & DFNT_NATIVE) ret_desc = (char *)strdup(nt_descriptions[0].desc); else if (nt & DFNT_CUSTOM) ret_desc = (char *)strdup(nt_descriptions[1].desc); else if (nt & DFNT_LITEND) ret_desc = (char *)strdup(nt_descriptions[2].desc); nt &= DFNT_MASK; /* mask off unusual format types */ for (i = 3; i < (intn)(sizeof(nt_descriptions) / sizeof(nt_descript_t)); i++) if (nt_descriptions[i].nt == nt) { if (ret_desc == NULL) ret_desc = (char *)strdup(nt_descriptions[i].desc); else { char *t; t = (char *)malloc(strlen(ret_desc) + strlen(nt_descriptions[i].desc) + 2); if (t == NULL) { free(ret_desc); HRETURN_ERROR(DFE_NOSPACE, NULL); } strcpy(t, ret_desc); strcat(t, " "); strcat(t, nt_descriptions[i].desc); free(ret_desc); ret_desc = t; } return ret_desc; } return NULL; } /* end HDgetNTdesc() */ /* ------------------------------- HDfidtoname ------------------------------ */ /* NAME HDfidtoname -- return the filename the file ID corresponds to USAGE const char * HDfidtoname(fid) int32 fid; IN: file ID RETURNS SUCCEED - pointer to filename / FAIL - NULL DESCRIPTION Map a file ID to the filename used to get it. This is useful for mixing old style single-file interfaces (which take filenames) and newer interfaces which use file IDs. ---------------------------------------------------------------------------*/ const char * HDfidtoname(int32 file_id) { filerec_t *file_rec; if ((file_rec = HAatom_object(file_id)) == NULL) HRETURN_ERROR(DFE_ARGS, NULL); return file_rec->path; } /* HDfidtoname */ hdf4-hdf4.3.1/hdf/src/hkit_priv.h000066400000000000000000000157721503061704500165430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* hkit_priv.h * * private header file for hkit routines */ #ifndef H4_HKIT_PRIV_H #define H4_HKIT_PRIV_H #include "hdf_priv.h" #include "hfile_priv.h" /* tag_messages is the list of tag descriptions in the system, kept as tag-description pairs. To look up a description, a linear search is required but efficiency should be okay. */ typedef struct tag_descript_t { uint16 tag; /* tag for description ? */ const char *desc; /* tag description ? */ const char *name; /* tag name ? */ } tag_descript_t; /* stringizing macro */ #define string(x) #x /* NOTE: * Please keep tag descriptions <= 30 characters - a * lot of pretty-printing code depends on it. */ static const tag_descript_t tag_descriptions[] = { /* low-level set */ {DFTAG_NULL, string(DFTAG_NULL), "No Data"}, {DFTAG_LINKED, string(DFTAG_LINKED), "Linked Blocks Indicator"}, {DFTAG_VERSION, string(DFTAG_VERSION), "Version Descriptor"}, {DFTAG_COMPRESSED, string(DFTAG_COMPRESSED), "Compressed Data Indicator"}, {DFTAG_CHUNK, string(DFTAG_CHUNK), "Data Chunk"}, /* utility set */ {DFTAG_FID, string(DFTAG_FID), "File Identifier"}, {DFTAG_FD, string(DFTAG_FD), "File Description"}, {DFTAG_TID, string(DFTAG_TID), "Tag Identifier"}, {DFTAG_TD, string(DFTAG_TD), "Tag Description"}, {DFTAG_DIL, string(DFTAG_DIL), "Data Id Label"}, {DFTAG_DIA, string(DFTAG_DIA), "Data Id Annotation"}, {DFTAG_NT, string(DFTAG_NT), "Number type"}, {DFTAG_MT, string(DFTAG_MT), "Machine type"}, {DFTAG_FREE, string(DFTAG_FREE), "Free space"}, /* raster-8 Tags */ {DFTAG_ID8, string(DFTAG_ID8), "Image Dimensions-8"}, {DFTAG_IP8, string(DFTAG_IP8), "Image Palette-8"}, {DFTAG_RI8, string(DFTAG_RI8), "Raster Image-8"}, {DFTAG_CI8, string(DFTAG_CI8), "RLE Compressed Image-8"}, {DFTAG_II8, string(DFTAG_II8), "Imcomp Image-8"}, /* Raster Image Tags */ {DFTAG_ID, string(DFTAG_ID), "Image Dimensions"}, {DFTAG_LUT, string(DFTAG_LUT), "Image Palette"}, {DFTAG_RI, string(DFTAG_RI), "Raster Image Data"}, {DFTAG_CI, string(DFTAG_CI), "Compressed Image"}, {DFTAG_RIG, string(DFTAG_RIG), "Raster Image Group"}, {DFTAG_LD, string(DFTAG_LD), "Palette Dimension"}, {DFTAG_MD, string(DFTAG_MD), "Matte Dimension"}, {DFTAG_MA, string(DFTAG_MA), "Matte Data"}, {DFTAG_CCN, string(DFTAG_CCN), "Color Correction"}, {DFTAG_CFM, string(DFTAG_CFM), "Color Format"}, {DFTAG_AR, string(DFTAG_AR), "Aspect Ratio"}, {DFTAG_DRAW, string(DFTAG_DRAW), "Sequenced images"}, {DFTAG_RUN, string(DFTAG_RUN), "Runable program / script"}, {DFTAG_XYP, string(DFTAG_XYP), "X-Y position"}, {DFTAG_MTO, string(DFTAG_MTO), "M/c-Type override"}, /* Tektronix */ {DFTAG_T14, string(DFTAG_T14), "TEK 4014 Data"}, {DFTAG_T105, string(DFTAG_T105), "TEK 4105 data"}, /* Scientific / Numeric Data Sets */ {DFTAG_SDG, string(DFTAG_SDG), "Scientific Data Group"}, {DFTAG_SDD, string(DFTAG_SDD), "SciData dimension record"}, {DFTAG_SD, string(DFTAG_SD), "Scientific Data"}, {DFTAG_SDS, string(DFTAG_SDS), "SciData scales"}, {DFTAG_SDL, string(DFTAG_SDL), "SciData labels"}, {DFTAG_SDU, string(DFTAG_SDU), "SciData units"}, {DFTAG_SDF, string(DFTAG_SDF), "SciData formats"}, {DFTAG_SDM, string(DFTAG_SDM), "SciData max/min"}, {DFTAG_SDC, string(DFTAG_SDC), "SciData coordsys"}, {DFTAG_SDT, string(DFTAG_SDT), "Transpose"}, {DFTAG_SDLNK, string(DFTAG_SDLNK), "Links related to the dataset"}, {DFTAG_NDG, string(DFTAG_NDG), "Numeric Data Group"}, {DFTAG_CAL, string(DFTAG_CAL), "Calibration information"}, {DFTAG_FV, string(DFTAG_FV), "Fill value information"}, /* V Group Tags */ {DFTAG_VG, string(DFTAG_VG), "Vgroup"}, {DFTAG_VH, string(DFTAG_VH), "Vdata"}, {DFTAG_VS, string(DFTAG_VS), "Vdata Storage"}, /* Compression Schemes */ {DFTAG_RLE, string(DFTAG_RLE), "Run Length Encoding"}, {DFTAG_IMCOMP, string(DFTAG_IMCOMP), "IMCOMP Encoding"}, {DFTAG_JPEG, string(DFTAG_JPEG), "24-bit JPEG Encoding"}, {DFTAG_GREYJPEG, string(DFTAG_GREYJPEG), "8-bit JPEG Encoding"}, {DFTAG_JPEG5, string(DFTAG_JPEG5), "24-bit JPEG Encoding"}, {DFTAG_GREYJPEG5, string(DFTAG_GREYJPEG5), "8-bit JPEG Encoding"} }; /* nt_message is the list of NT descriptions in the system, kept as NT-description pairs. To look up a description, a linear search is required but efficiency should be okay. */ typedef struct nt_descript_t { int32 nt; /* nt for description */ const char *name; /* nt name */ const char *desc; /* nt description */ } nt_descript_t; static const nt_descript_t nt_descriptions[] = { /* Masks for types */ {DFNT_NATIVE, string(DFNT_NATIVE), "native format"}, {DFNT_CUSTOM, string(DFNT_CUSTOM), "custom format"}, {DFNT_LITEND, string(DFNT_LITEND), "little-endian format"}, {DFNT_NONE, string(DFNT_NONE), "number-type not set"}, /* Floating point types */ {DFNT_FLOAT32, string(DFNT_FLOAT32), "32-bit floating point"}, {DFNT_FLOAT64, string(DFNT_FLOAT64), "64-bit floating point"}, {DFNT_FLOAT128, string(DFNT_FLOAT128), "128-bit floating point"}, /* Integer types */ {DFNT_INT8, string(DFNT_INT8), "8-bit signed integer"}, {DFNT_UINT8, string(DFNT_UINT8), "8-bit unsigned integer"}, {DFNT_INT16, string(DFNT_INT16), "16-bit signed integer"}, {DFNT_UINT16, string(DFNT_UINT16), "16-bit unsigned integer"}, {DFNT_INT32, string(DFNT_INT32), "32-bit signed integer"}, {DFNT_UINT32, string(DFNT_UINT32), "32-bit unsigned integer"}, {DFNT_INT64, string(DFNT_INT64), "64-bit signed integer"}, {DFNT_UINT64, string(DFNT_UINT64), "64-bit unsigned integer"}, {DFNT_INT128, string(DFNT_INT128), "128-bit signed integer"}, {DFNT_UINT128, string(DFNT_UINT128), "128-bit unsigned integer"}, /* Character types */ {DFNT_CHAR8, string(DFNT_CHAR8), "8-bit signed char"}, {DFNT_UCHAR8, string(DFNT_UCHAR8), "8-bit unsigned char"}, {DFNT_CHAR16, string(DFNT_CHAR16), "16-bit signed char"}, {DFNT_UCHAR16, string(DFNT_UCHAR16), "16-bit unsigned char"} }; #endif /* H4_HKIT_PRIV_H */ hdf4-hdf4.3.1/hdf/src/hlimits.h000066400000000000000000000274061503061704500162120ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*+ hlimits.h *** This file contains all hard coded limits for the library *** and reserved vdata/vgroup names and classes. *** Also pre-defined attribute names are contained in this file. + */ #ifndef H4_HLIMITS_H #define H4_HLIMITS_H #include "hdf.h" #if defined H4_HAVE_WIN32_API #define HDsetvbuf(F, S, M, Z) (((Z) > 1) ? setvbuf(F, S, M, Z) : setvbuf(F, S, M, 2)) #else #define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, Z) #endif /************************************************************************** * Generally useful macro definitions * (These are copied from hdf_priv.h and should remain included in both files * because hlimits.h is included from netcdf.h which is used in some * netCDF utilities which don't need or want the rest of the HDF header * files. -QAK - 2/17/99 ) **************************************************************************/ #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif /* ------------------------- General Constants hdf.h --------------------- */ /* tbuf used as a temporary buffer for small jobs. The size is preferably > 512 but MUST be > ~256. It is advised that if an arbitrarily large buffer (> 100 bytes) is require, dynamic space be used. tbuf lives in the hfile.c */ #ifndef TBUF_SZ #define TBUF_SZ 1024 #endif /* File name max length (old annotations) */ #define DF_MAXFNLEN 256 /* * some max lengths for the Vset interface * * Except for FIELDNAMELENMAX, change these as you please, they * affect memory only, not the file. * */ #define FIELDNAMELENMAX 128 /* fieldname : 128 chars max */ #define VSFIELDMAX 256 /* max no of fields per vdata */ #define VSNAMELENMAX 64 /* vdata name : 64 chars max */ #define VGNAMELENMAX 64 /* vgroup name : 64 chars max */ /* Note: VGNAMELENMAX has been removed from library, test, and tools except in mfgr.c and Fortran interface, in favor of dynamic allocation. BMR- 1/28/2010 */ /* * default max no of objects in a vgroup * VGroup will grow dynamically if needed */ #define MAXNVELT 64 /* * Defaults for linked block operations with Vsets */ #define VDEFAULTBLKSIZE 4096 #define VDEFAULTNBLKS 32 /* Max order of a field in a Vdata */ #define MAX_ORDER 65535 #define MAX_FIELD_SIZE 65535 /* ------------------------- Constants for hfile.c --------------------- */ /* Maximum number of files (number of slots for file records) */ #ifndef MAX_FILE #define MAX_FILE 32 #endif /* MAX_FILE */ /* Maximum length of external filename(s) (used in hextelt.c) */ #ifndef MAX_PATH_LEN #define MAX_PATH_LEN 1024 #endif /* MAX_PATH_LEN */ /* ndds (number of dd's in a block) default, so user need not specify */ #ifndef DEF_NDDS #define DEF_NDDS 16 #endif /* DEF_NDDS */ /* ndds minimum, to prevent excessive overhead of very small dd-blocks */ #ifndef MIN_NDDS #define MIN_NDDS 4 #endif /* MIN_NDDS */ /* largest number that will fit into 16-bit word ref variable */ #define MAX_REF ((uint16)65535) /* length of block and number of blocks for converting 'appendable' data */ /* elements into linked blocks (will eventually be replaced by the newer */ /* variable-length blocks */ #define HDF_APPENDABLE_BLOCK_LEN 4096 #define HDF_APPENDABLE_BLOCK_NUM 16 /* hashing information */ #define HASH_MASK 0xff #define HASH_BLOCK_SIZE 100 /* ------------------------- Constants for Vxx interface --------------------- */ /* * Private conversion buffer stuff * VDATA_BUFFER_MAX is the largest buffer that can be allocated for * writing (haven't implemented reading yet). * Vtbuf is the buffer * Vtbufsize is the buffer size in bytes at any given time. * Vtbuf is increased in size as need be * BUG: the final Vtbuf never gets freed */ #define VDATA_BUFFER_MAX 1000000 /* --------------------- Constants for DFSDxx interface --------------------- */ #define DFS_MAXLEN 255 /* Max length of label/unit/format strings */ #define DFSD_MAXFILL_LEN 16 /* Current max length for fill_value space */ /* ----------------- Constants for COMPRESSION interface --------------------- */ /* Set the following macro to the value the highest compression scheme is */ #define COMP_MAX_COMP 12 #define COMP_HEADER_LENGTH 14 /* ----------------- Constants for DGROUP interface --------------------- */ #define MAX_GROUPS 8 /* ----------------- Constants for HERROR interface --------------------- */ #define FUNC_NAME_LEN 32 /* error_stack is the error stack. error_top is the stack top pointer, and points to the next available slot on the stack */ #ifndef ERR_STACK_SZ #define ERR_STACK_SZ 10 #endif /* max size of a stored error description */ #ifndef ERR_STRING_SIZE #define ERR_STRING_SIZE 512 #endif /* ----------------- Constants for NETCDF interface(netcdf.h) ---------------- */ /* * This can be as large as the maximum number of stdio streams * you can have open on your system. */ #define H4_MAX_NC_OPEN MAX_FILE /* * These maximums are enforced by the interface, to facilitate writing * applications and utilities. However, nothing is statically allocated to * these sizes internally. */ #define H4_MAX_NC_DIMS 5000 /* max dimensions per file */ #define H4_MAX_NC_ATTRS 3000 /* max global or per variable attributes */ #define H4_MAX_NC_VARS 5000 /* max variables per file */ /* This macro changed the behavior of the SDcreate function in HDF4r1.3 * SDcreate started to fail if SDS name length was greater than 64, instead of truncating * it to 64 characters and creating a dataset. Switched back to the old definition. * EP 5/5/2000 #define H4_MAX_NC_NAME MIN(256,MIN(VSNAMELENMAX,VGNAMELENMAX)) */ #define H4_MAX_NC_NAME 256 /* max length of a name */ #define H4_MAX_NC_CLASS \ 128 /* max length of a class name - added this \ because 128 was used commonly in SD for class name, and this will help \ changing the class name variable declaration much easier - BMR 4/1/02*/ #define H4_MAX_VAR_DIMS 32 /* max per variable dimensions */ /* These definitions here are for backward/forward compatibility since major constants were modified with H4 prefix to avoid conflicts with the real NetCDF-3 library - EIP 9/5/07 */ #ifdef H4_HAVE_NETCDF #define MAX_NC_OPEN H4_MAX_NC_OPEN #define MAX_NC_DIMS H4_MAX_NC_DIMS #define MAX_NC_VARS H4_MAX_NC_VARS #define MAX_NC_NAME H4_MAX_NC_NAME #define MAX_NC_CLASS H4_MAX_NC_CLASS #define MAX_VAR_DIMS H4_MAX_VAR_DIMS #endif /* ----------------- Constants for MFGR interface --------------------- */ #define H4_MAX_GR_NAME 256 /* max length of a name */ /* ----------- Reserved classes and names for vdatas/vgroups -----*/ /* The names of the Vgroups created by the GR interface, from mfgr.h */ #define GR_NAME "RIG0.0" /* name of the Vgroup containing all the images */ #define RI_NAME \ "RI0.0" /* name of a Vgroup containing information a \ bout one image */ #define RIGATTRNAME \ "RIATTR0.0N" /* name of a Vdata containing an \ attribute */ #define RIGATTRCLASS \ "RIATTR0.0C" /* class of a Vdata containing an \ attribute */ /* Vdata and Vgroup attributes use the same class as that of SD attr, * _HDF_ATTRIBUTE "Attr0.0" 8/1/96 */ /* classes of the Vdatas/Vgroups created by the SD interface, from nc_priv.h */ #define _HDF_ATTRIBUTE "Attr0.0" /* class of a Vdata containing SD interface attribute */ #define _HDF_VARIABLE "Var0.0" /* class of a Vgroup representing an SD NDG */ #define _HDF_SDSVAR "SDSVar" /* class of a Vdata indicating its group is an SDS variable */ /* - only after hdf4r2 */ #define _HDF_CRDVAR "CoordVar" /* name of a Vdata indicating its group is a coordinate variable */ /* - only after hdf4r2 */ #define _HDF_DIMENSION "Dim0.0" /* class of a Vgroup representing an SD dimension */ #define _HDF_UDIMENSION "UDim0.0" /* class of a Vgroup representing an SD UNLIMITED dimension*/ #define DIM_VALS "DimVal0.0" /* class of a Vdata containing an SD dimension size and fake values */ #define DIM_VALS01 "DimVal0.1" /* class of a Vdata containing an SD dimension size */ #define _HDF_CDF "CDF0.0" /* DATA is defined in DTM. Change DATA to DATA0 #define DATA "Data0.0" */ #define DATA0 "Data0.0" #define ATTR_FIELD_NAME "VALUES" /* The following vdata class name is reserved by the Chunking interface. originally defined in 'hchunks_priv.h'. The full class name currently is "_HDF_CHK_TBL_0". -GV 9/25/97 Made the vdata class name available to other interfaces since it is needed during hmap project. -BMR 11/11/2010 */ #define _HDF_CHK_TBL_CLASS "_HDF_CHK_TBL_" /* 13 bytes */ #define _HDF_CHK_TBL_CLASS_VER 0 /* zero version number for class */ /* #define NUM_INTERNAL_VGS 6 char *INTERNAL_HDF_VGS[] = {_HDF_VARIABLE, _HDF_DIMENSION, _HDF_UDIMENSION, _HDF_CDF, GR_NAME, RI_NAME}; #define NUM_INTERNAL_VDS 8 char *INTERNAL_HDF_VDS[] = {DIM_VALS, DIM_VALS01, _HDF_ATTRIBUTE, _HDF_SDSVAR, _HDF_CRDVAR, "_HDF_CHK_TBL_", RIGATTRNAME, RIGATTRCLASS}; */ /* ------------ pre-defined attribute names ---------------- */ /* For MFGR interface */ #define FILL_ATTR "FillValue" /* name of an attribute containing the fill value */ /* For SD interface */ #define _FillValue "_FillValue" /* name of an attribute to set fill value for an SDS */ #define _HDF_LongName "long_name" /* data/dimension label string */ #define _HDF_Units "units" /* data/dimension unit string */ #define _HDF_Format "format" /* data/dimension format string */ #define _HDF_CoordSys "coordsys" /* data coordsys string */ #define _HDF_ValidRange "valid_range" /* valid range of data values */ #define _HDF_ScaleFactor "scale_factor" /* data calibration factor */ #define _HDF_ScaleFactorErr "scale_factor_err" /* data calibration factor error */ #define _HDF_AddOffset "add_offset" /* calibration offset */ #define _HDF_AddOffsetErr "add_offset_err" /* calibration offset error */ #define _HDF_CalibratedNt "calibrated_nt" /* data type of uncalibrated data */ #define _HDF_ValidMax "valid_max" #define _HDF_ValidMin "valid_min" #define _HDF_Remarks "remarks" /* annotation, by DFAN */ #define _HDF_AnnoLabel "anno_label" /* annotation label, by DFAN */ #endif /* H4_HLIMITS_H */ hdf4-hdf4.3.1/hdf/src/hntdefs.h000066400000000000000000000204351503061704500161670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*+ hnt.h *** This file contains all the number-type definitions for HDF + */ #ifndef H4_HNT_H #define H4_HNT_H /* masks for types */ #define DFNT_HDF 0x00000000 /* standard HDF format */ #define DFNT_NATIVE 0x00001000 /* native format */ #define DFNT_CUSTOM 0x00002000 /* custom format */ #define DFNT_LITEND 0x00004000 /* Little Endian format */ #define DFNT_MASK 0x00000fff /* format mask */ /* type info codes */ #define DFNT_NONE 0 /* indicates that number type not set */ #define DFNT_QUERY 0 /* use this code to find the current type */ #define DFNT_VERSION 1 /* current version of NT info */ #define DFNT_FLOAT32 5 #define DFNT_FLOAT 5 /* For backward compat; don't use */ #define DFNT_FLOAT64 6 #define DFNT_DOUBLE 6 /* For backward compat; don't use */ #define DFNT_FLOAT128 7 /* No current plans for support */ #define DFNT_INT8 20 #define DFNT_UINT8 21 #define DFNT_INT16 22 #define DFNT_UINT16 23 #define DFNT_INT32 24 #define DFNT_UINT32 25 #define DFNT_INT64 26 #define DFNT_UINT64 27 #define DFNT_INT128 28 /* No current plans for support */ #define DFNT_UINT128 30 /* No current plans for support */ #define DFNT_UCHAR8 3 /* 3 chosen for backward compatibility */ #define DFNT_UCHAR 3 /* uchar=uchar8 for backward compatibility */ #define DFNT_CHAR8 4 /* 4 chosen for backward compatibility */ #define DFNT_CHAR 4 /* char=char8 for backward compatibility */ #define DFNT_CHAR16 42 /* No current plans for support */ #define DFNT_UCHAR16 43 /* No current plans for support */ /* Type info codes for Native Mode datasets */ #define DFNT_NFLOAT32 (DFNT_NATIVE | DFNT_FLOAT32) #define DFNT_NFLOAT64 (DFNT_NATIVE | DFNT_FLOAT64) #define DFNT_NFLOAT128 (DFNT_NATIVE | DFNT_FLOAT128) /* Unsupported */ #define DFNT_NINT8 (DFNT_NATIVE | DFNT_INT8) #define DFNT_NUINT8 (DFNT_NATIVE | DFNT_UINT8) #define DFNT_NINT16 (DFNT_NATIVE | DFNT_INT16) #define DFNT_NUINT16 (DFNT_NATIVE | DFNT_UINT16) #define DFNT_NINT32 (DFNT_NATIVE | DFNT_INT32) #define DFNT_NUINT32 (DFNT_NATIVE | DFNT_UINT32) #define DFNT_NINT64 (DFNT_NATIVE | DFNT_INT64) #define DFNT_NUINT64 (DFNT_NATIVE | DFNT_UINT64) #define DFNT_NINT128 (DFNT_NATIVE | DFNT_INT128) /* Unsupported */ #define DFNT_NUINT128 (DFNT_NATIVE | DFNT_UINT128) /* Unsupported */ #define DFNT_NCHAR8 (DFNT_NATIVE | DFNT_CHAR8) #define DFNT_NCHAR (DFNT_NATIVE | DFNT_CHAR8) /* backward compat */ #define DFNT_NUCHAR8 (DFNT_NATIVE | DFNT_UCHAR8) #define DFNT_NUCHAR (DFNT_NATIVE | DFNT_UCHAR8) /* backward compat */ #define DFNT_NCHAR16 (DFNT_NATIVE | DFNT_CHAR16) /* Unsupported */ #define DFNT_NUCHAR16 (DFNT_NATIVE | DFNT_UCHAR16) /* Unsupported */ /* Type info codes for Little Endian data */ #define DFNT_LFLOAT32 (DFNT_LITEND | DFNT_FLOAT32) #define DFNT_LFLOAT64 (DFNT_LITEND | DFNT_FLOAT64) #define DFNT_LFLOAT128 (DFNT_LITEND | DFNT_FLOAT128) /* Unsupported */ #define DFNT_LINT8 (DFNT_LITEND | DFNT_INT8) #define DFNT_LUINT8 (DFNT_LITEND | DFNT_UINT8) #define DFNT_LINT16 (DFNT_LITEND | DFNT_INT16) #define DFNT_LUINT16 (DFNT_LITEND | DFNT_UINT16) #define DFNT_LINT32 (DFNT_LITEND | DFNT_INT32) #define DFNT_LUINT32 (DFNT_LITEND | DFNT_UINT32) #define DFNT_LINT64 (DFNT_LITEND | DFNT_INT64) #define DFNT_LUINT64 (DFNT_LITEND | DFNT_UINT64) #define DFNT_LINT128 (DFNT_LITEND | DFNT_INT128) /* Unsupported */ #define DFNT_LUINT128 (DFNT_LITEND | DFNT_UINT128) /* Unsupported */ #define DFNT_LCHAR8 (DFNT_LITEND | DFNT_CHAR8) #define DFNT_LCHAR (DFNT_LITEND | DFNT_CHAR8) /* backward compat */ #define DFNT_LUCHAR8 (DFNT_LITEND | DFNT_UCHAR8) #define DFNT_LUCHAR (DFNT_LITEND | DFNT_UCHAR8) /* backward compat */ #define DFNT_LCHAR16 (DFNT_LITEND | DFNT_CHAR16) /* Unsupported */ #define DFNT_LUCHAR16 (DFNT_LITEND | DFNT_UCHAR16) /* Unsupported */ /* class info codes for int */ #define DFNTI_MBO 1 /* Motorola byte order 2's compl */ #define DFNTI_VBO 2 /* Vax byte order 2's compl */ #define DFNTI_IBO 4 /* Intel byte order 2's compl */ /* class info codes for float */ #define DFNTF_NONE 0 /* indicates subclass is not set */ #define DFNTF_HDFDEFAULT 1 /* hdf default float format is ieee */ #define DFNTF_IEEE 1 /* IEEE format */ #define DFNTF_VAX 2 /* Vax format */ #define DFNTF_CRAY 3 /* Cray format */ #define DFNTF_PC 4 /* PC floats - flipped IEEE */ #define DFNTF_CONVEX 5 /* CONVEX native format */ #define DFNTF_VP 6 /* Fujitsu VP native format */ /* class info codes for char */ #define DFNTC_BYTE 0 /* bitwise/numeric field */ #define DFNTC_ASCII 1 /* ASCII */ #define DFNTC_EBCDIC 5 /* EBCDIC */ /* array order */ #define DFO_FORTRAN 1 /* column major order */ #define DFO_C 2 /* row major order */ /*******************************************************************/ /* Sizes of number types */ /*******************************************************************/ /* first the standard sizes of number types */ #define SIZE_FLOAT32 4 #define SIZE_FLOAT64 8 #define SIZE_FLOAT128 16 /* No current plans for support */ #define SIZE_INT8 1 #define SIZE_UINT8 1 #define SIZE_INT16 2 #define SIZE_UINT16 2 #define SIZE_INT32 4 #define SIZE_UINT32 4 #define SIZE_INT64 8 #define SIZE_UINT64 8 #define SIZE_INT128 16 /* No current plans for support */ #define SIZE_UINT128 16 /* No current plans for support */ #define SIZE_CHAR8 1 #define SIZE_CHAR 1 /* For backward compat char8 == char */ #define SIZE_UCHAR8 1 #define SIZE_UCHAR 1 /* For backward compat uchar8 == uchar */ #define SIZE_CHAR16 2 /* No current plans for support */ #define SIZE_UCHAR16 2 /* No current plans for support */ /* then the native sizes of number types */ #define SIZE_NFLOAT32 4 #define SIZE_NFLOAT64 8 #define SIZE_NFLOAT128 16 /* No current plans for support */ #define SIZE_NINT8 1 #define SIZE_NUINT8 1 #define SIZE_NINT16 2 #define SIZE_NUINT16 2 #define SIZE_NINT32 4 #define SIZE_NUINT32 4 #define SIZE_NINT64 8 #define SIZE_NUINT64 8 #define SIZE_NINT128 16 /* No current plans for support */ #define SIZE_NUINT128 16 /* No current plans for support */ #define SIZE_NCHAR8 1 #define SIZE_NCHAR 1 /* For backward compat char8 == char */ #define SIZE_NUCHAR8 1 #define SIZE_NUCHAR 1 /* For backward compat uchar8 == uchar */ #define SIZE_NCHAR16 2 /* No current plans for support */ #define SIZE_NUCHAR16 2 /* No current plans for support */ /* then the sizes of little-endian number types */ #define SIZE_LFLOAT32 4 #define SIZE_LFLOAT64 8 #define SIZE_LFLOAT128 16 /* No current plans for support */ #define SIZE_LINT8 1 #define SIZE_LUINT8 1 #define SIZE_LINT16 2 #define SIZE_LUINT16 2 #define SIZE_LINT32 4 #define SIZE_LUINT32 4 #define SIZE_LINT64 8 #define SIZE_LUINT64 8 #define SIZE_LINT128 16 /* No current plans for support */ #define SIZE_LUINT128 16 /* No current plans for support */ #define SIZE_LCHAR8 1 #define SIZE_LCHAR 1 /* For backward compat char8 == char */ #define SIZE_LUCHAR8 1 #define SIZE_LUCHAR 1 /* For backward compat uchar8 == uchar */ #define SIZE_LCHAR16 2 /* No current plans for support */ #define SIZE_LUCHAR16 2 /* No current plans for support */ /* sizes of different number types */ #define MACHINE_I8_SIZE 1 #define MACHINE_I16_SIZE 2 #define MACHINE_I32_SIZE 4 #define MACHINE_F32_SIZE 4 #define MACHINE_F64_SIZE 8 /* maximum size of the atomic data types */ #define MAX_NT_SIZE 16 #endif /* H4_HNT_H */ hdf4-hdf4.3.1/hdf/src/hproto.h000066400000000000000000001537241503061704500160570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_H_PROTO #define H4_H_PROTO #include /* for FILE */ #include "H4api_adpt.h" #include "hdf.h" /* Useful macros, which someday might become actual functions */ /* Wrappers for Hinquire. feb-2-92 */ #define HQueryfileid(aid, fileid) \ (Hinquire((int32)aid, (int32 *)fileid, (uint16 *)NULL, (uint16 *)NULL, (int32 *)NULL, (int32 *)NULL, \ (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) #define HQuerytagref(aid, tag, ref) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)tag, (uint16 *)ref, (int32 *)NULL, (int32 *)NULL, \ (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) #define HQuerylength(aid, length) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, (int32 *)length, (int32 *)NULL, \ (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) #define HQueryoffset(aid, offset) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, (int32 *)NULL, (int32 *)offset, \ (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) #define HQueryposition(aid, position) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, (int32 *)NULL, (int32 *)NULL, \ (int32 *)position, (int16 *)NULL, (int16 *)NULL)) #define HQueryaccess(aid, access) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, (int32 *)NULL, (int32 *)NULL, \ (int32 *)NULL, (int16 *)access, (int16 *)NULL)) #define HQueryspecial(aid, special) \ (Hinquire((int32)aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, (int32 *)NULL, (int32 *)NULL, \ (int32 *)NULL, (int16 *)NULL, (int16 *)special)) #ifdef __cplusplus extern "C" { #endif /* ** from hfile.c */ HDFLIBAPI int32 Hopen(const char *path, intn acc_mode, int16 ndds); HDFLIBAPI intn Hclose(int32 file_id); HDFLIBAPI int32 Hstartread(int32 file_id, uint16 tag, uint16 ref); HDFLIBAPI intn Hnextread(int32 access_id, uint16 tag, uint16 ref, intn origin); HDFLIBAPI intn Hexist(int32 file_id, uint16 search_tag, uint16 search_ref); HDFLIBAPI intn Hinquire(int32 access_id, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 Hstartwrite(int32 file_id, uint16 tag, uint16 ref, int32 length); HDFLIBAPI int32 Hstartaccess(int32 file_id, uint16 tag, uint16 ref, uint32 flags); HDFLIBAPI intn Hsetlength(int32 file_id, int32 length); HDFLIBAPI intn Happendable(int32 aid); HDFLIBAPI intn HPisappendable(int32 aid); HDFLIBAPI intn HPregister_term_func(hdf_termfunc_t term_func); HDFLIBAPI intn Hseek(int32 access_id, int32 offset, intn origin); HDFLIBAPI int32 Htell(int32 access_id); HDFLIBAPI int32 Hread(int32 access_id, int32 length, void *data); HDFLIBAPI int32 Hwrite(int32 access_id, int32 length, const void *data); HDFLIBAPI int32 Htrunc(int32 access_id, int32 trunc_len); HDFLIBAPI intn Hendaccess(int32 access_id); HDFLIBAPI intn HDgetc(int32 access_id); HDFLIBAPI intn HDputc(uint8 c, int32 access_id); HDFLIBAPI int32 Hgetelement(int32 file_id, uint16 tag, uint16 ref, uint8 *data); HDFLIBAPI int32 Hputelement(int32 file_id, uint16 tag, uint16 ref, const uint8 *data, int32 length); HDFLIBAPI int32 Hlength(int32 file_id, uint16 tag, uint16 ref); HDFLIBAPI int32 Hoffset(int32 file_id, uint16 tag, uint16 ref); HDFLIBAPI intn Hsync(int32 file_id); HDFLIBAPI intn Hcache(int32 file_id, intn cache_on); HDFLIBAPI intn Hgetlibversion(uint32 *majorv, uint32 *minorv, uint32 *releasev, char *string); HDFLIBAPI intn Hgetfileversion(int32 file_id, uint32 *majorv, uint32 *minorv, uint32 *release, char *string); HDFLIBAPI intn Hsetaccesstype(int32 access_id, uintn accesstype); HDFLIBAPI uint16 HDmake_special_tag(uint16 tag); HDFLIBAPI intn HDis_special_tag(uint16 tag); HDFLIBAPI uint16 HDbase_tag(uint16 tag); HDFLIBAPI int HDerr(int32 file_id); HDFLIBAPI intn HDvalidfid(int32 file_id); HDFLIBAPI const char *HDgettagdesc(uint16 tag); HDFLIBAPI char *HDgettagsname(uint16 tag); HDFLIBAPI intn HDgettagnum(const char *tag_name); HDFLIBAPI char *HDgetNTdesc(int32 nt); HDFLIBAPI const char *HDfidtoname(int32 fid); HDFLIBAPI intn Hgetntinfo(int32 numbertype, hdf_ntinfo_t *nt_info); HDFLIBAPI intn Hishdf(const char *filename); HDFLIBAPI intn Hfidinquire(int32 file_id, char **fname, intn *acc_mode, intn *attach); HDFLIBAPI intn Hshutdown(void); HDFLIBAPI void HPend(void); HDFLIBAPI intn HDdont_atexit(void); /* ** from hfiledd.c */ /****************************************************************************** NAME Hdupdd - Duplicate a data descriptor DESCRIPTION Duplicates a data descriptor so that the new tag/ref points to the same data element pointed to by the old tag/ref. Return FAIL if the given tag/ref are already in use. RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI intn Hdupdd(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag, /* IN: Tag of new tag/ref */ uint16 ref, /* IN: Ref of new tag/ref */ uint16 old_tag, /* IN: Tag of old tag/ref */ uint16 old_ref /* IN: Ref of old tag/ref */ ); /****************************************************************************** NAME Hnumber - Determine the number of objects of a given type DESCRIPTION Determine how many objects of the given tag are in the file. tag may be set to DFTAG_WILDCARD to get back the total number of objects in the file. Note, a return value of zero is not a fail condition. RETURNS the number of objects of type 'tag' else FAIL *******************************************************************************/ HDFLIBAPI int32 Hnumber(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag /* IN: Tag to count */ ); /****************************************************************************** NAME Hnewref - Returns a ref that is guaranteed to be unique in the file DESCRIPTION Returns a ref number that can be used with any tag to produce a unique tag/ref. Successive calls to Hnewref will generate a strictly increasing sequence until the highest possible ref had been returned, then Hnewref will return unused ref's starting from 1. RETURNS returns the ref number, 0 otherwise *******************************************************************************/ HDFLIBAPI uint16 Hnewref(int32 file_id /* IN: File ID the tag/refs are in */ ); /****************************************************************************** NAME Htagnewref - returns a ref that is unique in the file for a given tag DESCRIPTION Returns a ref number that can be used with any tag to produce a unique tag/ref. Successive calls to Hnewref will generate a strictly increasing sequence until the highest possible ref had been returned, then Hnewref will return unused ref's starting from 1. RETURNS returns the ref number, 0 otherwise *******************************************************************************/ HDFLIBAPI uint16 Htagnewref(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag /* IN: Tag to search for a new ref for */ ); /****************************************************************************** NAME Hfind - locate the next object of a search in an HDF file DESCRIPTION Searches for the `next' DD that fits the search tag/ref. Wildcards apply. If origin is DF_FORWARD, search from current position forwards in the file, otherwise DF_BACKWARD searches backward from the current position in the file. If *find_tag and *find_ref are both set to 0, this indicates the beginning of a search, and the search will start from the beginning of the file if the direction is DF_FORWARD and from the and of the file if the direction is DF_BACKWARD. RETURNS returns SUCCEED (0) if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI intn Hfind(int32 file_id, /* IN: file ID to search in */ uint16 search_tag, /* IN: the tag to search for (can be DFTAG_WILDCARD) */ uint16 search_ref, /* IN: ref to search for (can be DFREF_WILDCARD) */ uint16 *find_tag, /* IN: if (*find_tag==0) and (*find_ref==0) then start search */ /* OUT: tag matching the search tag */ uint16 *find_ref, /* IN: if (*find_tag==0) and (*find_ref==0) then start search */ /* OUT: ref matching the search ref */ int32 *find_offset, /* OUT: offset of the data element found */ int32 *find_length, /* OUT: length of the data element found */ intn direction /* IN: Direction to search in: */ /* DF_FORWARD searches forward from the current location */ /* DF_BACKWARD searches backward from the current location */ ); /****************************************************************************** NAME HDcheck_tagref - Checks to see if tag/ref is in DD list i.e. created already DESCRIPTION Routine checks to see if tag/ref exists in the DD list i.e. has been created. RETURNS 0-> tag/ref does not exist 1-> tag/ref exists -1-> function failed *******************************************************************************/ HDFLIBAPI intn HDcheck_tagref(int32 file_id, /* IN: id of file */ uint16 tag, /* IN: Tag to check */ uint16 ref /* IN: ref to check */); /************************************************************************ NAME HDreuse_tagref -- reuse a data descriptor preserving tag/ref DESCRIPTION Reuses the data descriptor of tag/ref in the dd list of the file. The tag/ref must already exist in the DD list. This routine is unsafe and may leave a file in a condition that is not usable by some routines. Use with care. Not valid for special elements right now. Used for allowing the data to change and move somewhere else in the file for non-special elements. Must be carefully if apply to higher-level objects like GR's and SDS that are comprised of other objects. Useful when re-writing simple elements whose size changes while preserving the original tag/ref of the element since other elements might refer to this element by tag/ref e.g. in a Vgroup. RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise ************************************************************************/ HDFLIBAPI intn HDreuse_tagref(int32 file_id, /* IN: id of file */ uint16 tag, /* IN: tag of data descriptor to reuse */ uint16 ref /* IN: ref of data descriptor to reuse */); /****************************************************************************** NAME Hdeldd - Delete a data descriptor DESCRIPTION Deletes a data descriptor of tag/ref from the dd list of the file. This routine is unsafe and may leave a file in a condition that is not usable by some routines. Use with care. For example, if this element is contained in a Vgroup, that group will *NOT* get updated to reflect that this element has been deleted. RETURNS returns SUCCEED (0) if successful, FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI intn Hdeldd(int32 file_id, /* IN: File ID the tag/refs are in */ uint16 tag, /* IN: Tag of tag/ref to delete */ uint16 ref /* IN: Ref of tag/ref to delete */ ); /* ** from hdfalloc.c */ HDFLIBAPI void *HDmemfill(void *dest, const void *src, uint32 item_size, uint32 num_items); HDFLIBAPI char *HIstrncpy(char *dest, const char *source, intn len); HDFLIBAPI int32 HDspaceleft(void); HDFLIBAPI intn HDc2fstr(char *str, intn len); HDFLIBAPI char *HDf2cstring(_fcd fdesc, intn len); HDFLIBAPI intn HDflush(int32 file_id); HDFLIBAPI intn HDpackFstring(char *src, char *dest, intn len); /* ** from hblocks.c */ HDFLIBAPI int32 HLcreate(int32 file_id, uint16 tag, uint16 ref, int32 block_length, int32 number_blocks); HDFLIBAPI intn HLconvert(int32 aid, int32 block_length, int32 number_blocks); HDFLIBAPI int HDinqblockinfo(int32 aid, int32 *length, int32 *first_length, int32 *block_length, int32 *number_blocks); HDFLIBAPI intn HLsetblockinfo(int32 aid, int32 block_size, int32 num_blocks); HDFLIBAPI intn HLgetblockinfo(int32 aid, int32 *block_size, int32 *num_blocks); HDFLIBAPI intn HLgetdatainfo(int32 file_id, uint8 *buf, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray); /* ** from hextelt.c */ HDFLIBAPI int32 HXcreate(int32 file_id, uint16 tag, uint16 ref, const char *extern_file_name, int32 offset, int32 start_len); HDFLIBAPI intn HXsetcreatedir(const char *dir); HDFLIBAPI intn HXsetdir(const char *dir); /* ** from hcomp.c */ HDFLIBAPI int32 HCcreate(int32 file_id, uint16 tag, uint16 ref, comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info); HDFLIBAPI intn HCPgetcompinfo(int32 file_id, uint16 data_tag, uint16 data_ref, comp_coder_t *coder_type, comp_info *c_info); HDFLIBAPI intn HCPgetcomptype(int32 file_id, uint16 data_tag, uint16 data_ref, comp_coder_t *coder_type); HDFLIBAPI intn HCPgetdatasize(int32 file_id, uint16 data_tag, uint16 data_ref, int32 *comp_size, int32 *orig_size); HDFPUBLIC intn HCget_config_info(comp_coder_t coder_type, uint32 *compression_config_info); HDFLIBAPI int32 HCPquery_encode_header(comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info); HDFLIBAPI intn HCPencode_header(uint8 *p, comp_model_t model_type, model_info *m_info, comp_coder_t coder_type, comp_info *c_info); HDFLIBAPI intn HCPdecode_header(uint8 *p, comp_model_t *model_type, model_info *m_info, comp_coder_t *coder_type, comp_info *c_info); /* ** from cszip.c */ HDFLIBAPI intn HCPsetup_szip_parms(comp_info *c_info, int32 nt, int32 ncomp, int32 ndims, int32 *dims, int32 *cdims); HDFLIBAPI intn HCPrm_szip_special_bit(comp_info *c_info); /* ** from hbuffer.c */ HDFLIBAPI intn HBconvert(int32 aid); /* ** from hcompri.c */ HDFLIBAPI int32 HRPconvert(int32 fid, uint16 tag, uint16 ref, int32 xdim, int32 ydim, int16 scheme, comp_info *cinfo, uintn pixel_size); /* ** from herr.c */ HDFLIBAPI const char *HEstring(hdf_err_code_t error_code); HDFLIBAPI void HEpush(hdf_err_code_t error_code, const char *function_name, const char *file_name, intn line); HDFLIBAPI void HEreport(const char *, ...); HDFLIBAPI void HEprint(FILE *stream, int32 print_level); HDFLIBAPI int16 HEvalue(int32 level); HDFLIBAPI void HEclear(void); HDFLIBAPI intn HEshutdown(void); /* ** from hbitio.c */ HDFLIBAPI int32 Hstartbitread(int32 file_id, uint16 tag, uint16 ref); HDFLIBAPI int32 Hstartbitwrite(int32 file_id, uint16 tag, uint16 ref, int32 length); HDFLIBAPI intn Hbitappendable(int32 bitid); HDFLIBAPI intn Hbitwrite(int32 bitid, intn count, uint32 data); HDFLIBAPI intn Hbitread(int32 bitid, intn count, uint32 *data); HDFLIBAPI intn Hbitseek(int32 bitid, int32 byte_offset, intn bit_offset); HDFLIBAPI intn Hgetbit(int32 bitid); HDFLIBAPI int32 Hendbitaccess(int32 bitfile_id, intn flushbit); HDFLIBAPI intn HPbitshutdown(void); /* ** from hdatainfo.c */ /* Structure that holds a data descriptor */ typedef struct hdf_ddinfo_t { uint16 tag; uint16 ref; int32 offset; int32 length; } hdf_ddinfo_t; /* ** Public functions for getting raw data information - from hdatainfo.c */ HDFLIBAPI intn ANgetdatainfo(int32 ann_id, int32 *offset, int32 *length); HDFLIBAPI intn HDgetdatainfo(int32 file_id, uint16 data_tag, uint16 data_ref, int32 *chk_coord, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray); HDFLIBAPI intn VSgetdatainfo(int32 vsid, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray); HDFLIBAPI intn VSgetattdatainfo(int32 vsid, int32 findex, intn attrindex, int32 *offset, int32 *length); HDFLIBAPI intn Vgetattdatainfo(int32 vgid, intn attrindex, int32 *offset, int32 *length); HDFLIBAPI intn GRgetdatainfo(int32 riid, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray); HDFLIBAPI intn GRgetattdatainfo(int32 id, int32 attrindex, int32 *offset, int32 *length); HDFLIBAPI intn GRgetpalinfo(int32 gr_id, uintn pal_count, hdf_ddinfo_t *palinfo_array); /* ** from dfutil.c */ HDFLIBAPI uint16 DFfindnextref(int32 file_id, uint16 tag, uint16 lref); /* ** from dfcomp.c */ HDFLIBAPI intn DFputcomp(int32 file_id, uint16 tag, uint16 ref, const uint8 *image, int32 xdim, int32 ydim, uint8 *palette, uint8 *newpal, int16 scheme, comp_info *cinfo); HDFLIBAPI int DFgetcomp(int32 file_id, uint16 tag, uint16 ref, uint8 *image, int32 xdim, int32 ydim, uint16 scheme); /* ** from dfrle.c */ HDFLIBAPI int32 DFCIrle(const void *buf, void *bufto, int32 len); HDFLIBAPI int32 DFCIunrle(uint8 *buf, uint8 *bufto, int32 outlen, int resetsave); /* ** from dfimcomp.c */ HDFLIBAPI void DFCIimcomp(int32 xdim, int32 ydim, const uint8 *in, uint8 out[], uint8 in_pal[], uint8 out_pal[], int mode); HDFLIBAPI void DFCIunimcomp(int32 xdim, int32 ydim, uint8 in[], uint8 out[]); /* ** from dfjpeg.c */ HDFLIBAPI intn DFCIjpeg(int32 file_id, uint16 tag, uint16 ref, int32 xdim, int32 ydim, const void *image, int16 scheme, comp_info *scheme_info); /* ** from dfunjpeg.c */ HDFLIBAPI intn DFCIunjpeg(int32 file_id, uint16 tag, uint16 ref, void *image, int32 xdim, int32 ydim, int16 scheme); /* ** from dfgroup.c */ HDFLIBAPI int32 DFdiread(int32 file_id, uint16 tag, uint16 ref); HDFLIBAPI intn DFdiget(int32 list, uint16 *ptag, uint16 *pref); HDFLIBAPI intn DFdinobj(int32 list); HDFLIBAPI int32 DFdisetup(int maxsize); HDFLIBAPI intn DFdiput(int32 list, uint16 tag, uint16 ref); HDFLIBAPI intn DFdiwrite(int32 file_id, int32 list, uint16 tag, uint16 ref); HDFLIBAPI void DFdifree(int32 groupID); /* ** from dfp.c */ HDFLIBAPI intn DFPgetpal(const char *filename, void *palette); HDFLIBAPI intn DFPputpal(const char *filename, const void *palette, intn overwrite, const char *filemode); HDFLIBAPI intn DFPaddpal(const char *filename, const void *palette); HDFLIBAPI intn DFPnpals(const char *filename); HDFLIBAPI intn DFPreadref(const char *filename, uint16 ref); HDFLIBAPI intn DFPwriteref(const char *filename, uint16 ref); HDFLIBAPI intn DFPrestart(void); HDFLIBAPI uint16 DFPlastref(void); /* ** from dfr8.c */ HDFLIBAPI int DFR8setcompress(int32 scheme, comp_info *cinfo); HDFLIBAPI intn DFR8getdims(const char *filename, int32 *pxdim, int32 *pydim, int *pispal); HDFLIBAPI intn DFR8getimage(const char *filename, uint8 *image, int32 xdim, int32 ydim, uint8 *pal); HDFLIBAPI intn DFR8setpalette(uint8 *pal); HDFLIBAPI intn DFR8putimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress); HDFLIBAPI intn DFR8addimage(const char *filename, const void *image, int32 xdim, int32 ydim, uint16 compress); HDFLIBAPI intn DFR8nimages(const char *filename); HDFLIBAPI intn DFR8readref(const char *filename, uint16 ref); HDFLIBAPI intn DFR8writeref(const char *filename, uint16 ref); HDFLIBAPI intn DFR8restart(void); HDFLIBAPI uint16 DFR8lastref(void); HDFLIBAPI intn DFR8getpalref(uint16 *pal_ref); HDFLIBAPI intn DFR8Pshutdown(void); /* ** from dfgr.c */ HDFLIBAPI intn DFGRgetlutdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pncomps, intn *pil); HDFLIBAPI intn DFGRreqlutil(intn il); HDFLIBAPI intn DFGRgetlut(const char *filename, void *lut, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRgetimdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pncomps, intn *pil); HDFLIBAPI intn DFGRreqimil(intn il); HDFLIBAPI intn DFGRgetimage(const char *filename, void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRsetcompress(int32 scheme, comp_info *cinfo); HDFLIBAPI intn DFGRsetlutdims(int32 xdim, int32 ydim, intn ncomps, intn il); HDFLIBAPI intn DFGRsetlut(void *lut, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRaddlut(const char *filename, void *lut, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRsetimdims(int32 xdim, int32 ydim, intn ncomps, intn il); HDFLIBAPI intn DFGRaddimage(const char *filename, void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRputimage(const char *filename, void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DFGRreadref(const char *filename, uint16 ref); HDFLIBAPI uint16 DFGRIlastref(void); HDFLIBAPI intn DFGRIgetdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pncomps, intn *pil, intn type); HDFLIBAPI intn DFGRIreqil(intn il, intn type); HDFLIBAPI intn DFGRIgetimlut(const char *filename, void *imlut, int32 xdim, int32 ydim, intn type, intn isfortran, int *compressed, uint16 *compr_type, int *has_pal); HDFLIBAPI intn DFGRIsetdims(int32 xdim, int32 ydim, intn ncomps, intn type); HDFLIBAPI intn DFGRIsetil(intn il, intn type); HDFLIBAPI intn DFGRIrestart(void); HDFLIBAPI intn DFGRIaddimlut(const char *filename, const void *imlut, int32 xdim, int32 ydim, intn type, intn isfortran, intn newfile); HDFLIBAPI intn DFGRPshutdown(void); /* ** from df24.c */ HDFLIBAPI intn DF24getdims(const char *filename, int32 *pxdim, int32 *pydim, intn *pil); HDFLIBAPI intn DF24reqil(intn il); HDFLIBAPI intn DF24getimage(const char *filename, void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DF24setdims(int32 xdim, int32 ydim); HDFLIBAPI intn DF24setil(intn il); HDFLIBAPI intn DF24setcompress(int32 type, comp_info *cinfo); HDFLIBAPI intn DF24restart(void); HDFLIBAPI intn DF24addimage(const char *filename, const void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DF24putimage(const char *filename, const void *image, int32 xdim, int32 ydim); HDFLIBAPI intn DF24nimages(const char *filename); HDFLIBAPI intn DF24readref(const char *filename, uint16 ref); HDFLIBAPI uint16 DF24lastref(void); /* ** from dfan.c */ HDFLIBAPI int32 DFANgetlablen(const char *filename, uint16 tag, uint16 ref); HDFLIBAPI intn DFANgetlabel(const char *filename, uint16 tag, uint16 ref, char *label, int32 maxlen); HDFLIBAPI int32 DFANgetdesclen(const char *filename, uint16 tag, uint16 ref); HDFLIBAPI intn DFANgetdesc(const char *filename, uint16 tag, uint16 ref, char *desc, int32 maxlen); HDFLIBAPI int32 DFANgetfidlen(int32 file_id, intn isfirst); HDFLIBAPI int32 DFANgetfid(int32 file_id, char *id, int32 maxlen, intn isfirst); HDFLIBAPI int32 DFANgetfdslen(int32 file_id, intn isfirst); HDFLIBAPI int32 DFANgetfds(int32 file_id, char *desc, int32 maxlen, intn isfirst); HDFLIBAPI intn DFANputlabel(const char *filename, uint16 tag, uint16 ref, char *label); HDFLIBAPI intn DFANputdesc(const char *filename, uint16 tag, uint16 ref, char *desc, int32 desclen); HDFLIBAPI intn DFANaddfid(int32 file_id, char *id); HDFLIBAPI intn DFANaddfds(int32 file_id, char *desc, int32 desclen); HDFLIBAPI uint16 DFANlastref(void); HDFLIBAPI intn DFANlablist(const char *filename, uint16 tag, uint16 reflist[], char *labellist, intn listsize, intn maxlen, intn startpos); HDFLIBAPI intn DFANclear(void); HDFLIBAPI intn DFANIclear(void); HDFLIBAPI uint16 DFANIlocate(int32 file_id, int type, uint16 tag, uint16 ref); HDFLIBAPI int DFANIaddentry(int type, uint16 annref, uint16 datatag, uint16 dataref); HDFLIBAPI int32 DFANIgetannlen(const char *filename, uint16 tag, uint16 ref, int type); HDFLIBAPI intn DFANIgetann(const char *filename, uint16 tag, uint16 ref, uint8 *ann, int32 maxlen, int type, int isfortran); HDFLIBAPI intn DFANIputann(const char *filename, uint16 tag, uint16 ref, uint8 *ann, int32 annlen, int type); HDFLIBAPI int DFANIlablist(const char *filename, uint16 tag, uint16 reflist[], uint8 *labellist, int listsize, int maxlen, int startpos, int isfortran); HDFLIBAPI int DFANIaddfann(int32 file_id, char *ann, int32 annlen, int type); HDFLIBAPI int32 DFANIgetfannlen(int32 file_id, int type, int isfirst); HDFLIBAPI int32 DFANIgetfann(int32 file_id, char *ann, int32 maxlen, int type, int isfirst); HDFLIBAPI intn DFANPshutdown(void); /* ** from dfsd.c */ HDFLIBAPI int DFSDgetdims(const char *filename, intn *prank, int32 sizes[], intn maxrank); HDFLIBAPI int DFSDgetdatastrs(char *label, char *unit, char *format, char *coordsys); HDFLIBAPI int DFSDgetdimstrs(int dim, char *label, char *unit, char *format); HDFLIBAPI int DFSDgetdatalen(int *llabel, int *lunit, int *lformat, int *lcoordsys); HDFLIBAPI int DFSDgetdimlen(int dim, int *llabel, int *lunit, int *lformat); HDFLIBAPI int DFSDgetdimscale(intn dim, int32 maxsize, void *scale); HDFLIBAPI int DFSDgetrange(void *pmax, void *pmin); HDFLIBAPI int DFSDgetdata(const char *filename, intn rank, int32 maxsizes[], void *data); HDFLIBAPI int DFSDsetlengths(int maxlen_label, int maxlen_unit, int maxlen_format, int maxlen_coordsys); HDFLIBAPI int DFSDsetdims(intn rank, int32 dimsizes[]); HDFLIBAPI int DFSDsetdatastrs(const char *label, const char *unit, const char *format, const char *coordsys); HDFLIBAPI int DFSDsetdimstrs(int dim, const char *label, const char *unit, const char *format); HDFLIBAPI int DFSDsetdimscale(intn dim, int32 dimsize, void *scale); HDFLIBAPI int DFSDsetrange(void *maxi, void *mini); HDFLIBAPI int DFSDputdata(const char *filename, intn rank, int32 dimsizes[], void *data); HDFLIBAPI int DFSDadddata(const char *filename, intn rank, int32 dimsizes[], void *data); HDFLIBAPI int DFSDrestart(void); HDFLIBAPI int32 DFSDndatasets(char *filename); HDFLIBAPI int DFSDclear(void); HDFLIBAPI uint16 DFSDlastref(void); HDFLIBAPI int DFSDreadref(char *filename, uint16 ref); HDFLIBAPI int DFSDgetslice(const char *filename, int32 winst[], int32 windims[], void *data, int32 dims[]); HDFLIBAPI int DFSDstartslice(const char *filename); HDFLIBAPI int DFSDputslice(int32 winend[], void *data, int32 dims[]); HDFLIBAPI int DFSDendslice(void); HDFLIBAPI int DFSDsetNT(int32 numbertype); HDFLIBAPI int DFSDsetorder(int arrayorder); HDFLIBAPI int DFSDgetNT(int32 *pnumbertype); HDFLIBAPI intn DFSDpre32sdg(char *filename, uint16 ref, intn *ispre32); HDFLIBAPI int DFSDsetcal(float64 cal, float64 cal_err, float64 ioff, float64 ioff_err, int32 cal_nt); HDFLIBAPI int DFSDgetcal(float64 *pcal, float64 *pcal_err, float64 *pioff, float64 *pioff_err, int32 *cal_nt); HDFLIBAPI int DFSDwriteref(const char *filename, uint16 ref); HDFLIBAPI int DFSDsetfillvalue(void *fill_value); HDFLIBAPI int DFSDgetfillvalue(void *fill_value); HDFLIBAPI int DFSDstartslab(const char *filename); HDFLIBAPI int DFSDwriteslab(int32 start[], int32 stride[], int32 count[], void *data); HDFLIBAPI int DFSDendslab(void); HDFLIBAPI int DFSDreadslab(const char *filename, int32 start[], int32 slab_size[], int32 stride[], void *buffer, int32 buffer_size[]); HDFLIBAPI intn DFSDPshutdown(void); /* ** from dfconv.c */ HDFLIBAPI int DFKNTsize(int32 number_type); HDFLIBAPI int32 DFKisnativeNT(int32 numbertype); HDFLIBAPI int32 DFKislitendNT(int32 numbertype); HDFLIBAPI int8 DFKgetPNSC(int32 numbertype, int32 machinetype); HDFLIBAPI intn DFKsetNT(int32 ntype); HDFLIBAPI int32 DFKconvert(void *source, void *dest, int32 ntype, int32 num_elm, int16 acc_mode, int32 source_stride, int32 dest_stride); /* ** from dfknat.c */ HDFLIBAPI intn DFKnb1b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); HDFLIBAPI intn DFKnb2b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); HDFLIBAPI intn DFKnb4b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); HDFLIBAPI intn DFKnb8b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); /* ** from dfkswap.c */ HDFLIBAPI intn DFKsb2b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); HDFLIBAPI intn DFKsb4b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); HDFLIBAPI intn DFKsb8b(void *s, void *d, uint32 num_elm, uint32 source_stride, uint32 dest_stride); /* ** Multi-file Annotation - from mfan.c */ HDFLIBAPI int32 ANstart(int32 file_id); HDFLIBAPI intn ANfileinfo(int32 an_id, int32 *n_file_label, int32 *n_file_desc, int32 *n_obj_label, int32 *n_obj_desc); HDFLIBAPI int32 ANend(int32 an_id); HDFLIBAPI int32 ANcreate(int32 an_id, uint16 elem_tag, uint16 elem_ref, ann_type type); HDFLIBAPI int32 ANcreatef(int32 an_id, ann_type type); HDFLIBAPI int32 ANselect(int32 an_id, int32 idx, ann_type type); HDFLIBAPI intn ANnumann(int32 an_id, ann_type type, uint16 elem_tag, uint16 elem_ref); HDFLIBAPI intn ANannlist(int32 an_id, ann_type type, uint16 elem_tag, uint16 elem_ref, int32 ann_list[]); HDFLIBAPI int32 ANannlen(int32 ann_id); HDFLIBAPI int32 ANwriteann(int32 ann_id, const char *ann, int32 annlen); HDFLIBAPI int32 ANreadann(int32 ann_id, char *ann, int32 maxlen); HDFLIBAPI intn ANendaccess(int32 ann_id); HDFLIBAPI int32 ANget_tagref(int32 an_id, int32 idx, ann_type type, uint16 *ann_tag, uint16 *ann_ref); HDFLIBAPI int32 ANid2tagref(int32 an_id, uint16 *ann_tag, uint16 *ann_ref); HDFLIBAPI int32 ANtagref2id(int32 an_id, uint16 ann_tag, uint16 ann_ref); HDFLIBAPI uint16 ANatype2tag(ann_type atype); HDFLIBAPI ann_type ANtag2atype(uint16 atag); /* ** Multi-file General Raster - from mfgr.c */ HDFLIBAPI intn rigcompare(void *k1, void *k2, intn cmparg); HDFLIBAPI int32 GRstart(int32 hdf_file_id); HDFLIBAPI intn GRfileinfo(int32 grid, int32 *n_datasets, int32 *n_attrs); HDFLIBAPI intn GRend(int32 grid); HDFLIBAPI int32 GRcreate(int32 grid, const char *name, int32 ncomp, int32 nt, int32 il, int32 dimsizes[2]); HDFLIBAPI int32 GRselect(int32 grid, int32 idx); HDFLIBAPI int32 GRnametoindex(int32 grid, const char *name); HDFLIBAPI intn GRgetiminfo(int32 riid, char *name, int32 *ncomp, int32 *nt, int32 *il, int32 dimsizes[2], int32 *n_attr); HDFLIBAPI intn GRgetnluts(int32 riid); HDFLIBAPI intn GRwriteimage(int32 riid, int32 start[2], int32 stride[2], int32 count[2], void *data); HDFLIBAPI intn GRreadimage(int32 riid, int32 start[2], int32 stride[2], int32 count[2], void *data); HDFLIBAPI intn GRendaccess(int32 riid); HDFLIBAPI uint16 GRidtoref(int32 riid); HDFLIBAPI int32 GRreftoindex(int32 grid, uint16 ref); HDFLIBAPI intn GRreqlutil(int32 riid, intn il); HDFLIBAPI intn GRreqimageil(int32 riid, intn il); HDFLIBAPI int32 GRgetlutid(int32 riid, int32 idx); HDFLIBAPI uint16 GRluttoref(int32 lutid); HDFLIBAPI intn GRgetlutinfo(int32 riid, int32 *ncomp, int32 *nt, int32 *il, int32 *nentries); HDFLIBAPI intn GRwritelut(int32 riid, int32 ncomps, int32 nt, int32 il, int32 nentries, void *data); HDFLIBAPI intn GRreadlut(int32 lutid, void *data); HDFLIBAPI intn GRsetexternalfile(int32 riid, const char *filename, int32 offset); HDFLIBAPI intn GRsetaccesstype(int32 riid, uintn accesstype); HDFLIBAPI intn GRsetcompress(int32 riid, comp_coder_t comp_type, comp_info *cinfo); HDFLIBAPI intn GRgetcompress(int32 riid, comp_coder_t *comp_type, comp_info *cinfo); HDFLIBAPI intn GRgetcompinfo(int32 riid, comp_coder_t *comp_type, comp_info *cinfo); HDFLIBAPI intn GRsetattr(int32 id, const char *name, int32 attr_nt, int32 count, const void *data); HDFLIBAPI intn GRattrinfo(int32 id, int32 idx, char *name, int32 *attr_nt, int32 *count); HDFLIBAPI intn GRgetattr(int32 id, int32 idx, void *data); HDFLIBAPI int32 GRfindattr(int32 id, const char *name); HDFLIBAPI intn GRgetcomptype(int32 riid, comp_coder_t *comp_type); HDFLIBAPI intn GRPshutdown(void); /* This function was added for hmap project only. Feb-25-2011 */ HDFLIBAPI intn GR2bmapped(int32 riid, intn *tobe_mapped, intn *created_byGR); /*=== HDF_CHUNK_DEF same as in mfhdf.h - moved here ====*/ /* Bit flags used for SDsetchunk(), SDgetchunkinfo() GRsetchunk() and GRgetchunkinfo(). Note that GRs do not support NBIT */ #define HDF_NONE 0x0 #define HDF_CHUNK 0x1 #define HDF_COMP 0x3 #define HDF_NBIT 0x5 /* Cache flags */ #define HDF_CACHEALL 0x1 /* Chunk Definition, Note that GRs need only 2 dimensions for the chunk_lengths */ typedef union hdf_chunk_def_u { /* Chunk Lengths only */ int32 chunk_lengths[H4_MAX_VAR_DIMS]; /* chunk lengths along each dimension */ struct { /* For Compression info */ int32 chunk_lengths[H4_MAX_VAR_DIMS]; /* chunk lengths along each dimension */ int32 comp_type; /* Compression type */ int32 model_type; /* Compression model type */ comp_info cinfo; /* Compression info struct */ model_info minfo; /* Compression model info struct */ } comp; struct { /* For NBIT, Used by SDS and not by GR */ int32 chunk_lengths[H4_MAX_VAR_DIMS]; /* chunk lengths along each dimension */ intn start_bit; /* offset of the start bit in the data */ intn bit_len; /* number of bits to store */ intn sign_ext; /* whether to sign extend or not */ intn fill_one; /* whether to fill with 1's or not (0's) */ } nbit; } HDF_CHUNK_DEF; /*=== GR Chunking Routines ====*/ /****************************************************************************** NAME GRsetchunk -- make GR a chunked GR DESCRIPTION This routine makes the GR a chunked GR according to the chunk definition passed in. The image currently cannot be special already. i.e. NBIT, COMPRESSED, or EXTERNAL. This is an Error. The definition of the HDF_CHUNK_DEF union with relevant fields is: typedef union hdf_chunk_def_u { int32 chunk_lengths[2]; Chunk lengths along each dimension struct { int32 chunk_lengths[2]; Chunk lengths along each dimension int32 comp_type; Compression type comp_info cinfo; Compression info struct }comp; } HDF_CHUNK_DEF The simplest is the 'chunk_lengths' array specifying chunk lengths for each dimension where the 'flags' argument set to 'HDF_CHUNK'; COMPRESSION is set by using the 'HDF_CHUNK_DEF' structure to set the appropriate compression information along with the required chunk lengths for each dimension. The compression information is the same as that set in 'SDsetcompress()'. The bit-or'd'flags' argument' is set to 'HDF_CHUNK | HDF_COMP'. See the example in pseudo-C below for further usage. The maximum number of Chunks in an HDF file is 65,535. The performance of the GRxxx interface with chunking is greatly affected by the users access pattern over the image and by the maximum number of chunks set in the chunk cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. See the routine GRsetchunkcache() for further info on the chunk cache and how to set the maximum number of chunks in the chunk cache. A default chunk cache is always created. The following example shows the organization of chunks for a 2D image. e.g. 4x4 image with 2x2 chunks. The array shows the layout of chunks in the chunk array. 4 --------------------- | | | Y | (0,1) | (1,1) | ^ | | | | 2 --------------------- | | | | | | (0,0) | (1,0) | | | | | | --------------------- | 0 2 4 ---------------> X --Without compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set Chunking -- GRsetchunk(riid, chunk_def, HDF_CHUNK); ...... } --With compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths first -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set compression -- chunk_def.comp.cinfo.deflate.level = 9; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; -- Set Chunking with Compression -- GRsetchunk(riid, chunk_def, HDF_CHUNK | HDF_COMP); ...... } RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn GRsetchunk(int32 riid, /* IN: raster access id */ HDF_CHUNK_DEF chunk_def, /* IN: chunk definition */ int32 flags /* IN: flags */); /****************************************************************************** NAME GRgetchunkinfo -- get Info on GR DESCRIPTION This routine gets any special information on the GR. If its chunked, chunked and compressed or just a regular GR. Currently it will only fill the array of chunk lengths for each dimension as specified in the 'HDF_CHUNK_DEF' union. You can pass in a NULL for 'chunk_def' if don't want the chunk lengths for each dimension. Additionally if successful it will return a bit-or'd value in 'flags' indicating if the GR is: Chunked -> flags = HDF_CHUNK Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP Non-chunked -> flags = HDF_NONE e.g. 4x4 array - Pseudo-C { int32 rcdims[3]; HDF_CHUNK_DEF rchunk_def; int32 cflags; ... rchunk_def.chunk_lengths = rcdims; GRgetchunkinfo(riid, &rchunk_def, &cflags); ... } RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn GRgetchunkinfo(int32 riid, /* IN: Raster access id */ HDF_CHUNK_DEF *chunk_def, /* IN/OUT: chunk definition */ int32 *flags /* IN/OUT: flags */); /****************************************************************************** NAME GRwritechunk -- write the specified chunk to the GR DESCRIPTION This routine writes a whole chunk of data to the chunked GR specified by chunk 'origin' for the given GR and can be used instead of GRwriteimage() when this information is known. This routine has less overhead and is much faster than using GRwriteimage(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See GRsetchunk() for a description of the organization of chunks in an GR. RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn GRwritechunk(int32 riid, /* IN: raster access id */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */); /****************************************************************************** NAME GRreadchunk -- read the specified chunk to the GR DESCRIPTION This routine reads a whole chunk of data from the chunked GR specified by chunk 'origin' for the given GR and can be used instead of GRreadimage() when this information is known. This routine has less overhead and is much faster than using GRreadimage(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See GRsetchunk() for a description of the organization of chunks in an GR. RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn GRreadchunk(int32 riid, /* IN: raster access id */ int32 *origin, /* IN: origin of chunk to read */ void *datap /* IN/OUT: buffer for data */); /****************************************************************************** NAME GRsetchunkcache -- maximum number of chunks to cache DESCRIPTION Set the maximum number of chunks to cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. This routine allows the setting of maximum number of chunks that can be cached, 'maxcache'. The performance of the GRxxx interface with chunking is greatly affected by the users access pattern over the image and by the maximum number of chunks set in the chunk cache. The number chunks that can be set in the cache is process memory limited. It is a good idea to always set the maximum number of chunks in the cache as the default heuristic does not take into account the memory available for the application. By default when the GR is promoted to a chunked element the maximum number of chunks in the cache 'maxcache' is set to the number of chunks along the last dimension. The values set here affects the current object's caching behaviour. If the chunk cache is full and 'maxcache' is greater then the current 'maxcache' value, then the chunk cache is reset to the new 'maxcache' value, else the chunk cache remains at the current 'maxcache' value. If the chunk cache is not full, then the chunk cache is set to the new 'maxcache' value only if the new 'maxcache' value is greater than the current number of chunks in the cache. Use flags argument of 'HDF_CACHEALL' if the whole object is to be cached in memory, otherwise pass in zero(0). Currently you can only pass in zero. See GRsetchunk() for a description of the organization of chunks in an GR. RETURNS Returns the 'maxcache' value for the chunk cache if successful and FAIL otherwise ******************************************************************************/ HDFLIBAPI intn GRsetchunkcache(int32 riid, /* IN: raster access id */ int32 maxcache, /* IN: max number of chunks to cache */ int32 flags /* IN: flags = 0, HDF_CACHEALL */); /* Vset interface functions (used to be in vproto.h) */ /* Useful macros, which someday might become actual functions */ /* * macros for VSinquire * all these macros should be public for users */ #define VSQuerycount(vs, count) \ (VSinquire(vs, (int32 *)count, (int32 *)NULL, (char *)NULL, (int32 *)NULL, (char *)NULL)) #define VSQueryinterlace(vs, intr) \ (VSinquire(vs, (int32 *)NULL, (int32 *)intr, (char *)NULL, (int32 *)NULL, (char *)NULL)) #define VSQueryfields(vs, flds) \ (VSinquire(vs, (int32 *)NULL, (int32 *)NULL, (char *)flds, (int32 *)NULL, (char *)NULL)) #define VSQueryvsize(vs, size) \ (VSinquire(vs, (int32 *)NULL, (int32 *)NULL, (char *)NULL, (int32 *)size, (char *)NULL)) #define VSQueryname(vs, name) \ (VSinquire(vs, (int32 *)NULL, (int32 *)NULL, (char *)NULL, (int32 *)NULL, (char *)name)) /* ** from vattr.c */ HDFLIBAPI intn Vsetattr(int32 vgid, const char *attrname, int32 datatype, int32 count, const void *values); HDFLIBAPI intn Vnattrs(int32 vgid); HDFLIBAPI intn Vnattrs2(int32 vgid); HDFLIBAPI intn Vnoldattrs(int32 vgid); HDFLIBAPI intn Vfindattr(int32 vgid, const char *attrname); HDFLIBAPI intn Vattrinfo(int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size); HDFLIBAPI intn Vattrinfo2 /* copy of Vattrinfo for old attributes */ (int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size, int32 *nfields, uint16 *refnum); HDFLIBAPI intn Vgetattr(int32 vgid, intn attrindex, void *values); HDFLIBAPI intn Vgetattr2 /* copy of Vgetattr for old attributes */ (int32 vgid, intn attrindex, void *values); HDFLIBAPI int32 Vgetversion(int32 vgid); HDFLIBAPI intn VSfindex(int32 vsid, const char *fieldname, int32 *fldindex); HDFLIBAPI intn VSsetattr(int32 vsid, int32 findex, const char *attrname, int32 datatype, int32 count, const void *values); HDFLIBAPI intn VSnattrs(int32 vsid); HDFLIBAPI intn VSfnattrs(int32 vsid, int32 findex); HDFLIBAPI intn VSfindattr(int32 vsid, int32 findex, const char *attrname); HDFLIBAPI intn VSattrinfo(int32 vsid, int32 findex, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size); HDFLIBAPI intn VSgetattr(int32 vsid, int32 findex, intn attrindex, void *values); HDFLIBAPI intn VSisattr(int32 vsid); /* ** from vconv.c */ HDFLIBAPI int32 vicheckcompat(HFILEID f); HDFLIBAPI int32 vimakecompat(HFILEID f); HDFLIBAPI int32 vcheckcompat(char *fs); HDFLIBAPI int32 vmakecompat(char *fs); /* ** from vg.c */ HDFLIBAPI int32 VSelts(int32 vkey); HDFLIBAPI int32 VSgetinterlace(int32 vkey); HDFLIBAPI intn VSsetinterlace(int32 vkey, int32 interlace); HDFLIBAPI int32 VSgetfields(int32 vkey, char *fields); HDFLIBAPI intn VSfexist(int32 vkey, char *fields); HDFLIBAPI int32 VSsizeof(int32 vkey, char *fields); HDFLIBAPI void VSdump(int32 vkey); HDFLIBAPI int32 VSsetname(int32 vkey, const char *vsname); HDFLIBAPI int32 VSsetclass(int32 vkey, const char *vsclass); HDFLIBAPI int32 VSgetname(int32 vkey, char *vsname); HDFLIBAPI int32 VSgetclass(int32 vkey, char *vsclass); HDFLIBAPI intn VSinquire(int32 vkey, int32 *nelt, int32 *interlace, char *fields, int32 *eltsize, char *vsname); HDFLIBAPI intn VSisinternal(const char *vsclass); HDFLIBAPI int32 VSlone(HFILEID f, int32 *idarray, int32 asize); HDFLIBAPI int32 Vlone(HFILEID f, int32 *idarray, int32 asize); HDFLIBAPI int32 Vfind(HFILEID f, const char *vgname); HDFLIBAPI int32 VSfind(HFILEID f, const char *vsname); HDFLIBAPI int32 Vfindclass(HFILEID f, const char *vgclass); HDFLIBAPI int32 VSfindclass(HFILEID f, const char *vsclass); HDFLIBAPI intn VSofclass(int32 id, const char *vsclass, uintn start_vd, uintn array_size, uint16 *refarray); HDFLIBAPI intn VSgetvdatas(int32 id, uintn start_vd, uintn array_size, uint16 *refarray); HDFLIBAPI intn VSsetblocksize(int32 vkey, int32 block_size); HDFLIBAPI intn VSsetnumblocks(int32 vkey, int32 num_blocks); HDFLIBAPI intn VSgetblockinfo(int32 vkey, int32 *block_size, int32 *num_blocks); HDFLIBAPI void Vsetzap(void); /* ** from vgp.c */ HDFLIBAPI intn vcompare(void *k1, void *k2, intn cmparg); HDFLIBAPI intn vcompareref(void *k1, void *k2, intn cmparg); HDFLIBAPI void vdestroynode(void *n); HDFLIBAPI void vtfreekey(void *k); HDFLIBAPI intn Vinitialize(HFILEID f); HDFLIBAPI intn Vfinish(HFILEID f); HDFLIBAPI HFILEID Vopen(char *path, intn acc_mode, int16 ndds); HDFLIBAPI intn Vclose(HFILEID f); HDFLIBAPI int32 vexistvg(HFILEID f, uint16 vgid); HDFLIBAPI int32 Vattach(HFILEID f, int32 vgid, const char *accesstype); HDFLIBAPI int32 Vdetach(int32 vkey); HDFLIBAPI int32 Vinsert(int32 vkey, int32 vskey); /* note: 2nd arg of Vinsert can also be (VGROUP *) */ HDFLIBAPI int32 Vflocate(int32 vkey, char *field); HDFLIBAPI intn Vinqtagref(int32 vkey, int32 tag, int32 ref); HDFLIBAPI int32 Vntagrefs(int32 vkey); HDFLIBAPI int32 Vnrefs(int32 vkey, int32 tag); HDFLIBAPI int32 Vgettagrefs(int32 vkey, int32 tagarray[], int32 refarray[], int32 n); HDFLIBAPI int32 Vgetuservgs(int32 id, int32 start_ref, int32 n_vgs, int32 *refarray); HDFLIBAPI intn Vgettagref(int32 vkey, int32 which, int32 *tag, int32 *ref); HDFLIBAPI int32 VQueryref(int32 vkey); HDFLIBAPI int32 VQuerytag(int32 vkey); HDFLIBAPI int32 Vaddtagref(int32 vkey, int32 tag, int32 ref); HDFLIBAPI int32 Ventries(HFILEID f, int32 vgid); HDFLIBAPI int32 Vsetname(int32 vkey, const char *vgname); HDFLIBAPI int32 Vsetclass(int32 vkey, const char *vgclass); HDFLIBAPI intn Visvg(int32 vkey, int32 id); HDFLIBAPI intn Visvs(int32 vkey, int32 id); HDFLIBAPI int32 Vgetid(HFILEID f, int32 vgid); HDFLIBAPI int32 Vgetnext(int32 vkey, int32 id); HDFLIBAPI int32 Vgetname(int32 vkey, char *vgname); HDFLIBAPI int32 Vgetnamelen(int32 vkey, uint16 *name_len); HDFLIBAPI int32 Vgetclassnamelen(int32 vkey, uint16 *classname_len); HDFLIBAPI int32 Vgetclass(int32 vkey, char *vgclass); HDFLIBAPI intn Vinquire(int32 vkey, int32 *nentries, char *vgname); HDFLIBAPI int32 Vdelete(int32 f, int32 ref); HDFLIBAPI intn Vgisinternal(int32 vkey); HDFLIBAPI intn Visinternal /* this function is replaced by Vgisinternal */ (const char *classname); HDFLIBAPI intn Vgetvgroups(int32 id, uintn start_vg, uintn n_vgs, uint16 *refarray); /******************************************************************************* NAME Vdeletetagref - delete tag/ref pair in Vgroup DESCRIPTION Deletes the given tag/ref pair from the Vgroup. If the given tag/ref pair does not exist in the vgroup the routine will return FAIL. Users should use Vinqtagref() to check if the tag/ref pair exists before deleting. RETURNS Returns SUCCEED if the tag/ref pair is deleted from Vgroup and FAIL if unsuccessful. *******************************************************************************/ HDFLIBAPI intn Vdeletetagref(int32 vkey, /* IN: vgroup key */ int32 tag, /* IN: tag to delete in vgroup */ int32 ref /* IN: ref to delete in vgroup */); HDFLIBAPI intn VPshutdown(void); /* ** from vparse.c */ HDFLIBAPI int32 scanattrs(const char *attrs, int32 *attrc, char ***attrv); /* ** from vhi.c */ HDFLIBAPI int32 VHstoredata(HFILEID f, const char *field, const uint8 *buf, int32 n, int32 datatype, const char *vsname, const char *vsclass); HDFLIBAPI int32 VHstoredatam(HFILEID f, const char *field, const uint8 *buf, int32 n, int32 datatype, const char *vsname, const char *vsclass, int32 order); HDFLIBAPI int32 VHmakegroup(HFILEID f, int32 tagarray[], int32 refarray[], int32 n, const char *vgname, const char *vgclass); /* ** from vio.c */ HDFLIBAPI intn VSPhshutdown(void); HDFLIBAPI int32 vexistvs(HFILEID f, uint16 vsref); HDFLIBAPI void vsdestroynode(void *n); HDFLIBAPI void vfdestroynode(void *n); HDFLIBAPI int32 VSattach(HFILEID f, int32 vsref, const char *accesstype); HDFLIBAPI int32 VSdetach(int32 vkey); HDFLIBAPI int32 VSQuerytag(int32 vkey); HDFLIBAPI int32 VSQueryref(int32 vkey); HDFLIBAPI int32 VSgetid(HFILEID f, int32 vsref); HDFLIBAPI int32 VSgetversion(int32 vkey); HDFLIBAPI int32 VSdelete(int32 f, int32 ref); HDFLIBAPI int32 VSappendable(int32 vkey, int32 blk); /* ** from vsfld.c */ HDFLIBAPI intn VSsetfields(int32 vkey, const char *fields); HDFLIBAPI intn VSfdefine(int32 vkey, const char *field, int32 localtype, int32 order); HDFLIBAPI int32 VFnfields(int32 vkey); HDFLIBAPI char *VFfieldname(int32 vkey, int32 idx); HDFLIBAPI int32 VFfieldtype(int32 vkey, int32 idx); HDFLIBAPI int32 VFfieldisize(int32 vkey, int32 idx); HDFLIBAPI int32 VFfieldesize(int32 vkey, int32 idx); HDFLIBAPI int32 VFfieldorder(int32 vkey, int32 idx); HDFLIBAPI intn VSsetexternalfile(int32 vkey, const char *filename, int32 offset); HDFLIBAPI intn VSgetexternalfile(int32 vkey, uintn name_len, char *filename, int32 *offset); HDFLIBAPI intn VSgetexternalinfo(int32 vkey, uintn name_len, char *filename, int32 *offset, int32 *length); HDFLIBAPI intn VSfpack(int32 vsid, intn packtype, const char *fields_in_buf, void *buf, intn bufsz, intn n_records, const char *fields, void *fldbufpt[]); /* ** from vrw.c */ HDFLIBAPI intn VSPshutdown(void); HDFLIBAPI int32 VSseek(int32 vkey, int32 eltpos); HDFLIBAPI int32 VSread(int32 vkey, uint8 buf[], int32 nelt, int32 interlace); HDFLIBAPI int32 VSwrite(int32 vkey, const uint8 buf[], int32 nelt, int32 interlace); #ifdef __cplusplus } #endif #endif /* H4_H_PROTO */ hdf4-hdf4.3.1/hdf/src/hproto_fortran.h000066400000000000000000001402261503061704500176030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_H_PROTO_FORTRAN #define H4_H_PROTO_FORTRAN #include "H4api_adpt.h" #include "df.h" #ifdef __cplusplus extern "C" { #endif /* ** from dfanF.c */ #define ndaiganl H4_F77_FUNC(daiganl, DAIGANL) #define ndaigann H4_F77_FUNC(daigann, DAIGANN) #define ndaipann H4_F77_FUNC(daipann, DAIPANN) #define ndailist H4_F77_FUNC(dailist, DAILIST) #define ndalref H4_F77_FUNC(dalref, DALREF) #define ndaclear H4_F77_FUNC(daclear, DACLEAR) #define ndfanlastref H4_F77_FUNC(dfanlastref, DFANLASTREF) #define ndfanaddfds H4_F77_FUNC(dfanaddfds, DFANADDFDS) #define ndfangetfidlen H4_F77_FUNC(dfangetfidlen, DFANGETFIDLEN) #define ndfangetfdslen H4_F77_FUNC(dfangetfdslen, DFANGETFDSLEN) #define ndfangetfid H4_F77_FUNC(dfangetfid, DFANGETFID) #define ndfangetfds H4_F77_FUNC(dfangetfds, DFANGETFDS) #define ndaafds H4_F77_FUNC(daafds, DAAFDS) #define ndagfidl H4_F77_FUNC(dagfidl, DAGFIDL) #define ndagfdsl H4_F77_FUNC(dagfdsl, DAGFDSL) #define ndagfid H4_F77_FUNC(dagfid, DAGFID) #define ndagfds H4_F77_FUNC(dagfds, DAGFDS) #define ndaiafid H4_F77_FUNC(daiafid, DAIAFID) HDFFCLIBAPI intf ndaiganl(_fcd filename, intf *tag, intf *ref, intf *type, intf *fnlen); HDFFCLIBAPI intf ndaigann(_fcd filename, intf *tag, intf *ref, _fcd annotation, intf *maxlen, intf *type, intf *fnlen); HDFFCLIBAPI intf ndaipann(_fcd filename, intf *tag, intf *ref, _fcd annotation, intf *annlen, intf *type, intf *fnlen); HDFFCLIBAPI intf ndailist(_fcd filename, intf *tag, intf reflist[], _fcd labellist, intf *listsize, intf *maxlen, intf *startpos, intf *fnlen); HDFFCLIBAPI intf ndalref(void); HDFFCLIBAPI intf ndaclear(void); HDFFCLIBAPI intf ndfanlastref(void); HDFFCLIBAPI intf ndfanaddfds(intf *dfile, _fcd desc, intf *desclen); HDFFCLIBAPI intf ndfangetfidlen(intf *dfile, intf *isfirst); HDFFCLIBAPI intf ndfangetfdslen(intf *dfile, intf *isfirst); HDFFCLIBAPI intf ndfangetfid(intf *dfile, _fcd id, intf *maxlen, intf *isfirst); HDFFCLIBAPI intf ndfangetfds(intf *dfile, _fcd id, intf *maxlen, intf *isfirst); HDFFCLIBAPI intf ndaafds(intf *dfile, _fcd desc, intf *desclen); HDFFCLIBAPI intf ndagfidl(intf *dfile, intf *isfirst); HDFFCLIBAPI intf ndagfdsl(intf *dfile, intf *isfirst); HDFFCLIBAPI intf ndagfid(intf *dfile, _fcd id, intf *maxlen, intf *isfirst); HDFFCLIBAPI intf ndagfds(intf *dfile, _fcd id, intf *maxlen, intf *isfirst); HDFFCLIBAPI intf ndaiafid(intf *dfile, _fcd id, intf *idlen); /* ** from dfr8F.c */ #define nd8spal H4_F77_FUNC(d8spal, D8SPAL) #define nd8first H4_F77_FUNC(d8first, D8FIRST) #define nd8igdim H4_F77_FUNC(d8igdim, D8IGDIM) #define nd8igimg H4_F77_FUNC(d8igimg, D8IGIMG) #define nd8ipimg H4_F77_FUNC(d8ipimg, D8IPIMG) #define nd8iaimg H4_F77_FUNC(d8iaimg, D8IAIMG) #define nd8irref H4_F77_FUNC(d8irref, D8IRREF) #define nd8iwref H4_F77_FUNC(d8iwref, D8IWREF) #define nd8inims H4_F77_FUNC(d8inims, D8INIMS) #define nd8lref H4_F77_FUNC(d8lref, D8LREF) #define ndfr8lastref H4_F77_FUNC(dfr8lastref, DFR8LASTREF) #define ndfr8setpalette H4_F77_FUNC(dfr8setpalette, DFR8SETPALETTE) #define ndfr8restart H4_F77_FUNC(dfr8restart, DFR8RESTART) #define nd8scomp H4_F77_FUNC(d8scomp, D8SCOMP) #define ndfr8scompress H4_F77_FUNC(dfr8scompress, DFR8SCOMPRESS) #define nd8sjpeg H4_F77_FUNC(d8sjpeg, D8SJPEG) #define ndfr8sjpeg H4_F77_FUNC(dfr8sjpeg, DFR8SJPEG) HDFFCLIBAPI intf nd8spal(_fcd pal); HDFFCLIBAPI intf nd8first(void); HDFFCLIBAPI intf nd8igdim(_fcd filename, intf *xdim, intf *ydim, intf *ispal, intf *lenfn); HDFFCLIBAPI intf nd8igimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, _fcd pal, intf *lenfn); HDFFCLIBAPI intf nd8ipimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *compress, intf *lenfn); HDFFCLIBAPI intf nd8iaimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *compress, intf *lenfn); HDFFCLIBAPI intf nd8irref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf nd8iwref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf nd8inims(_fcd filename, intf *fnlen); HDFFCLIBAPI intf nd8lref(void); HDFFCLIBAPI intf ndfr8lastref(void); HDFFCLIBAPI intf ndfr8setpalette(_fcd pal); HDFFCLIBAPI intf ndfr8restart(void); HDFFCLIBAPI intf nd8scomp(intf *scheme); HDFFCLIBAPI intf ndfr8scompress(intf *scheme); HDFFCLIBAPI intf nd8sjpeg(intf *quality, intf *force_baseline); HDFFCLIBAPI intf ndfr8sjpeg(intf *quality, intf *force_baseline); /* ** from dfsdF.c */ #define ndsgdast H4_F77_FUNC(dsgdast, DSGDAST) #define ndsgdisc H4_F77_FUNC(dsgdisc, DSGDISC) #define ndsgrang H4_F77_FUNC(dsgrang, DSGRANG) #define ndssdims H4_F77_FUNC(dssdims, DSSDIMS) #define ndssdisc H4_F77_FUNC(dssdisc, DSSDISC) #define ndssrang H4_F77_FUNC(dssrang, DSSRANG) #define ndsclear H4_F77_FUNC(dsclear, DSCLEAR) #define ndsslens H4_F77_FUNC(dsslens, DSSLENS) #define ndsgdiln H4_F77_FUNC(dsgdiln, DSGDILN) #define ndsgdaln H4_F77_FUNC(dsgdaln, DSGDALN) #define ndsfirst H4_F77_FUNC(dsfirst, DSFIRST) #define ndspslc H4_F77_FUNC(dspslc, DSPSLC) #define ndseslc H4_F77_FUNC(dseslc, DSESLC) #define ndsgnt H4_F77_FUNC(dsgnt, DSGNT) #define ndssnt H4_F77_FUNC(dssnt, DSSNT) #define ndsigdim H4_F77_FUNC(dsigdim, DSIGDIM) #define ndsigdat H4_F77_FUNC(dsigdat, DSIGDAT) #define ndsipdat H4_F77_FUNC(dsipdat, DSIPDAT) #define ndsiadat H4_F77_FUNC(dsiadat, DSIADAT) #define ndsigdas H4_F77_FUNC(dsigdas, DSIGDAS) #define ndsigslc H4_F77_FUNC(dsigslc, DSIGSLC) #define ndsigdis H4_F77_FUNC(dsigdis, DSIGDIS) #define ndsisslc H4_F77_FUNC(dsisslc, DSISSLC) #define ndsisdas H4_F77_FUNC(dsisdas, DSISDAS) #define ndsisdis H4_F77_FUNC(dsisdis, DSISDIS) #define ndsirref H4_F77_FUNC(dsirref, DSIRREF) #define ndslref H4_F77_FUNC(dslref, DSLREF) #define ndsinum H4_F77_FUNC(dsinum, DSINUM) #define ndsip32s H4_F77_FUNC(dsip32s, DSIP32S) #define ndsscal H4_F77_FUNC(dsscal, DSSCAL) #define ndsgcal H4_F77_FUNC(dsgcal, DSGCAL) #define ndfsdgetdatastrs H4_F77_FUNC(dfsdgetdatastrs, DFSDGETDATASTRS) #define ndfsdgetdimscale H4_F77_FUNC(dfsdgetdimscale, DFSDGETDIMSCALE) #define ndfsdgetrange H4_F77_FUNC(dfsdgetrange, DFSDGETRANGE) #define ndfsdsetdims H4_F77_FUNC(dfsdsetdims, DFSDSETDIMS) #define ndfsdsetdimscale H4_F77_FUNC(dfsdsetdimscale, DFSDSETDIMSCALE) #define ndfsdsetrange H4_F77_FUNC(dfsdsetrange, DFSDSETRANGE) #define ndfsdclear H4_F77_FUNC(dfsdclear, DFSDCLEAR) #define ndfsdsetlengths H4_F77_FUNC(dfsdsetlengths, DFSDSETLENGTHS) #define ndfsdgetdimlen H4_F77_FUNC(dfsdgetdimlen, DFSDGETDIMLEN) #define ndfsdgetdatalen H4_F77_FUNC(dfsdgetdatalen, DFSDGETDATALEN) #define ndfsdrestart H4_F77_FUNC(dfsdrestart, DFSDRESTART) #define ndfsdputslice H4_F77_FUNC(dfsdputslice, DFSDPUTSLICE) #define ndfsdendslice H4_F77_FUNC(dfsdendslice, DFSDENDSLICE) #define ndfsdsetnt H4_F77_FUNC(dfsdsetnt, DFSDSETNT) #define ndfsdgetnt H4_F77_FUNC(dfsdgetnt, DFSDGETNT) #define ndfsdlastref H4_F77_FUNC(dfsdlastref, DFSDLASTREF) #define ndsiwref H4_F77_FUNC(dsiwref, DSIWREF) #define ndssfill H4_F77_FUNC(dssfill, DSSFILL) #define ndsgfill H4_F77_FUNC(dsgfill, DSGFILL) #define ndsisslab H4_F77_FUNC(dsisslab, DSISSLAB) #define ndswslab H4_F77_FUNC(dswslab, DSWSLAB) #define ndseslab H4_F77_FUNC(dseslab, DSESLAB) #define ndsirslab H4_F77_FUNC(dsirslab, DSIRSLAB) HDFFCLIBAPI intf ndsgdisc(intf *dim, intf *maxsize, void *scale); HDFFCLIBAPI intf ndsgrang(void *pmax, void *pmin); HDFFCLIBAPI intf ndssdims(intf *rank, intf dimsizes[]); HDFFCLIBAPI intf ndssdisc(intf *dim, intf *dimsize, void *scale); HDFFCLIBAPI intf ndssrang(void *max, void *min); HDFFCLIBAPI intf ndsclear(void); HDFFCLIBAPI intf ndsslens(intf *maxlen_label, intf *maxlen_unit, intf *maxlen_format, intf *maxlen_coordsys); HDFFCLIBAPI intf ndsgdiln(intf *dim, intf *llabel, intf *lunit, intf *lformat); HDFFCLIBAPI intf ndsgdaln(intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys); HDFFCLIBAPI intf ndsfirst(void); HDFFCLIBAPI intf ndspslc(intf windims[], void *data, intf dims[]); HDFFCLIBAPI intf ndseslc(void); HDFFCLIBAPI intf ndssnt(intf *numbertype); HDFFCLIBAPI intf ndsgnt(intf *pnumbertype); HDFFCLIBAPI intf ndsigdim(_fcd filename, intf *prank, intf sizes[], intf *maxrank, intf *lenfn); HDFFCLIBAPI intf ndsigdat(_fcd filename, intf *rank, intf maxsizes[], void *data, intf *fnlen); HDFFCLIBAPI intf ndsipdat(_fcd filename, intf *rank, intf dimsizes[], void *data, intf *fnlen); HDFFCLIBAPI intf ndsiadat(_fcd filename, intf *rank, intf dimsizes[], void *data, intf *fnlen); HDFFCLIBAPI intf ndsigslc(_fcd filename, intf winst[], intf windims[], void *data, intf dims[], intf *fnlen); HDFFCLIBAPI intf ndsisslc(_fcd filename, intf *fnlen); HDFFCLIBAPI intf ndsirref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf ndslref(void); HDFFCLIBAPI intf ndsinum(_fcd filename, intf *len); HDFFCLIBAPI intf ndsip32s(_fcd filename, intf *ref, intf *ispre32, intf *len); HDFFCLIBAPI intf ndfsdgetdatastrs(_fcd label, _fcd unit, _fcd format, _fcd coordsys); HDFFCLIBAPI intf ndfsdgetdimstrs(intf *dim, _fcd label, _fcd unit, _fcd format); HDFFCLIBAPI intf ndfsdgetdimscale(intf *dim, intf *maxsize, void *scale); HDFFCLIBAPI intf ndfsdgetrange(void *pmax, void *pmin); HDFFCLIBAPI intf ndfsdsetdims(intf *rank, intf dimsizes[]); HDFFCLIBAPI intf ndfsdsetdimscale(intf *dim, intf *dimsize, void *scale); HDFFCLIBAPI intf ndfsdsetrange(void *max, void *min); HDFFCLIBAPI intf ndfsdclear(void); HDFFCLIBAPI intf ndfsdsetlengths(intf *maxlen_label, intf *maxlen_unit, intf *maxlen_format, intf *maxlen_coordsys); HDFFCLIBAPI intf ndfsdgetdimlen(intf *dim, intf *llabel, intf *lunit, intf *lformat); HDFFCLIBAPI intf ndfsdgetdatalen(intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys); HDFFCLIBAPI intf ndfsdrestart(void); HDFFCLIBAPI intf ndfsdputslice(intf windims[], void *data, intf dims[]); HDFFCLIBAPI intf ndfsdendslice(void); HDFFCLIBAPI intf ndfsdsetnt(intf *numbertype); HDFFCLIBAPI intf ndfsdgetnt(intf *pnumbertype); HDFFCLIBAPI intf ndfsdlastref(void); HDFFCLIBAPI intf ndsisdis(intf *dim, _fcd flabel, _fcd funit, _fcd fformat, intf *llabel, intf *lunit, intf *lformat); HDFFCLIBAPI intf ndsigdis(intf *dim, _fcd label, _fcd unit, _fcd format, intf *llabel, intf *lunit, intf *lformat); HDFFCLIBAPI intf ndsisdas(_fcd flabel, _fcd funit, _fcd fformat, _fcd fcoordsys, intf *isfortran, intf *llabel, intf *lunit, intf *lformat, intf *lcoordsys); HDFFCLIBAPI intf ndsigdas(_fcd label, _fcd unit, _fcd format, _fcd coordsys, intf *llabel, intf *lunit, intf *lformat, intf *lcoord); HDFFCLIBAPI intf ndsscal(float64 *cal, float64 *cal_err, float64 *ioff, float64 *ioff_err, intf *cal_type); HDFFCLIBAPI intf ndsgcal(float64 *cal, float64 *cal_err, float64 *ioff, float64 *ioff_err, intf *cal_type); HDFFCLIBAPI intf ndswref(_fcd filename, intf *fnlen, intf *ref); HDFFCLIBAPI intf ndssfill(void *fill_value); HDFFCLIBAPI intf ndsgfill(void *fill_value); HDFFCLIBAPI intf ndssslab(_fcd filename, intf *fnlen); HDFFCLIBAPI intf ndswslab(intf start[], intf stride[], intf cont[], void *data); HDFFCLIBAPI intf ndseslab(void); HDFFCLIBAPI intf ndsiwref(_fcd filename, intf *fnlen, intf *ref); HDFFCLIBAPI intf ndsisslab(_fcd filename, intf *fnlen); HDFFCLIBAPI intf ndsirslab(_fcd filename, intf *fnlen, intf start[], intf slab_size[], intf stride[], void *buffer, intf buffer_size[]); /* ** from dfpF.c */ #define ndpigpal H4_F77_FUNC(dpigpal, DPIGPAL) #define ndpippal H4_F77_FUNC(dpippal, DPIPPAL) #define ndpinpal H4_F77_FUNC(dpinpal, DPINPAL) #define ndpiwref H4_F77_FUNC(dpiwref, DPIWREF) #define ndpirref H4_F77_FUNC(dpirref, DPIRREF) #define ndprest H4_F77_FUNC(dprest, DPREST) #define ndplref H4_F77_FUNC(dplref, DPLREF) #define ndfprestart H4_F77_FUNC(dfprestart, DFPRESTART) #define ndfplastref H4_F77_FUNC(dfplastref, DFPLASTREF) HDFFCLIBAPI intf ndpigpal(_fcd filename, _fcd pal, intf *fnlen); HDFFCLIBAPI intf ndpippal(_fcd filename, _fcd pal, intf *overwrite, _fcd filemode, intf *fnlen); HDFFCLIBAPI intf ndpinpal(_fcd filename, intf *fnlen); HDFFCLIBAPI intf ndpirref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf ndpiwref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf ndprest(void); HDFFCLIBAPI intf ndplref(void); HDFFCLIBAPI intf ndfprestart(void); HDFFCLIBAPI intf ndfplastref(void); /* ** from df24F.c */ #define nd2reqil H4_F77_FUNC(d2reqil, D2REQIL) #define ndf24reqil H4_F77_FUNC(df24reqil, DF24REQIL) #define nd2sdims H4_F77_FUNC(d2sdims, D2SDIMS) #define ndf24setdims H4_F77_FUNC(df24setdims, DF24SETDIMS) #define nd2setil H4_F77_FUNC(d2setil, D2SETIL) #define ndf24setil H4_F77_FUNC(df24setil, DF24SETIL) #define nd2first H4_F77_FUNC(d2first, D2FIRST) #define ndf24restart H4_F77_FUNC(df24restart, DF24RESTART) #define nd2igdim H4_F77_FUNC(d2igdim, D2IGDIM) #define nd2igimg H4_F77_FUNC(d2igimg, D2IGIMG) #define nd2iaimg H4_F77_FUNC(d2iaimg, D2IAIMG) #define nd2irref H4_F77_FUNC(d2irref, D2IRREF) #define nd2inimg H4_F77_FUNC(d2inimg, D2INIMG) #define nd2lref H4_F77_FUNC(d2lref, D2LREF) #define nd2scomp H4_F77_FUNC(d2scomp, D2SCOMP) #define ndf24scompress H4_F77_FUNC(df24scompress, DF24SCOMPRESS) #define nd2sjpeg H4_F77_FUNC(d2sjpeg, D2SJPEG) #define ndf24sjpeg H4_F77_FUNC(df24sjpeg, DF24SJPEG) HDFFCLIBAPI intf nd2reqil(intf *il); HDFFCLIBAPI intf nd2sdims(intf *xdim, intf *ydim); HDFFCLIBAPI intf nd2igdim(_fcd filename, intf *pxdim, intf *pydim, intf *pil, intf *fnlen); HDFFCLIBAPI intf nd2igimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *fnlen); HDFFCLIBAPI intf nd2iaimg(_fcd filename, _fcd image, intf *xdim, intf *ydim, intf *fnlen, intf *newfile); HDFFCLIBAPI intf nd2setil(intf *il); HDFFCLIBAPI intf nd2first(void); HDFFCLIBAPI intf ndf24reqil(intf *il); HDFFCLIBAPI intf ndf24setdims(intf *xdim, intf *ydim); HDFFCLIBAPI intf ndf24setil(intf *il); HDFFCLIBAPI intf ndf24restart(void); HDFFCLIBAPI intf nd2irref(_fcd filename, intf *ref, intf *fnlen); HDFFCLIBAPI intf nd2inimg(_fcd filename, intf *fnlen); HDFFCLIBAPI intf nd2lref(void); HDFFCLIBAPI intf nd2scomp(intf *scheme); HDFFCLIBAPI intf ndf24scompress(intf *scheme); HDFFCLIBAPI intf nd2sjpeg(intf *quality, intf *force_baseline); HDFFCLIBAPI intf ndf24sjpeg(intf *quality, intf *force_baseline); /* ** from dfF.c */ #define ndfiaccess H4_F77_FUNC(dfiaccess, DFIACCESS) #define ndfiopen H4_F77_FUNC(dfiopen, DFIOPEN) #define ndfclose H4_F77_FUNC(dfclose, DFCLOSE) #define ndfdesc H4_F77_FUNC(dfdesc, DFDESC) #define ndfdup H4_F77_FUNC(dfdup, DFDUP) #define ndfdel H4_F77_FUNC(dfdel, DFDEL) #define ndfstart H4_F77_FUNC(dfstart, DFSTART) #define ndfread H4_F77_FUNC(dfread, DFREAD) #define ndfseek H4_F77_FUNC(dfseek, DFSEEK) #define ndfwrite H4_F77_FUNC(dfwrite, DFWRITE) #define ndfupdate H4_F77_FUNC(dfupdate, DFUPDATE) #define ndfget H4_F77_FUNC(dfget, DFGET) #define ndfput H4_F77_FUNC(dfput, DFPUT) #define ndfsfind H4_F77_FUNC(dfsfind, DFSFIND) #define ndffind H4_F77_FUNC(dffind, DFFIND) #define ndferrno H4_F77_FUNC(dferrno, DFERRNO) #define ndfnewref H4_F77_FUNC(dfnewref, DFNEWREF) #define ndfnumber H4_F77_FUNC(dfnumber, DFNUMBER) #define ndfstat H4_F77_FUNC(dfstat, DFSTAT) #define ndfiishdf H4_F77_FUNC(dfiishdf, DFIISHDF) HDFFCLIBAPI intf ndfiopen(_fcd name, intf *acc_mode, intf *defdds, intf *namelen); HDFFCLIBAPI intf ndfclose(intf *dfile); HDFFCLIBAPI intf ndfdesc(intf *dfile, intf ptr[][4], intf *begin, intf *num); HDFFCLIBAPI intf ndfdup(intf *dfile, intf *tag, intf *ref, intf *otag, intf *oref); HDFFCLIBAPI intf ndfdel(intf *dfile, intf *tag, intf *ref); HDFFCLIBAPI intf ndfiaccess(intf *dfile, intf *tag, intf *ref, _fcd acc_mode, intf *acclen); HDFFCLIBAPI intf ndfstart(intf *dfile, intf *tag, intf *ref, char *acc_mode); HDFFCLIBAPI intf ndfread(intf *dfile, _fcd ptr, intf *len); HDFFCLIBAPI intf ndfseek(intf *dfile, intf *offset); HDFFCLIBAPI intf ndfwrite(intf *dfile, _fcd ptr, intf *len); HDFFCLIBAPI intf ndfupdate(intf *dfile); HDFFCLIBAPI intf ndfget(intf *dfile, intf *tag, intf *ref, _fcd ptr); HDFFCLIBAPI intf ndfput(intf *dfile, intf *tag, intf *ref, _fcd ptr, intf *len); HDFFCLIBAPI intf ndfsfind(intf *dfile, intf *tag, intf *ref); HDFFCLIBAPI intf ndffind(intf *dfile, intf *itag, intf *iref, intf *len); HDFFCLIBAPI intf ndferrno(void); HDFFCLIBAPI intf ndfnewref(intf *dfile); HDFFCLIBAPI intf ndfnumber(intf *dfile, intf *tag); HDFFCLIBAPI intf ndfstat(intf *dfile, DFdata *dfinfo); HDFFCLIBAPI intf ndfiishdf(_fcd name, intf *namelen); /* ** from dfutilF.c */ #define ndfindnr H4_F77_FUNC(dfindnr, DFINDNR) #define ndffindnextref H4_F77_FUNC(dffindnextref, DFFINDNEXTREF) HDFFCLIBAPI intf ndfindnr(intf *dfile, intf *tag, intf *lref); HDFFCLIBAPI intf ndffindnextref(intf *dfile, intf *tag, intf *lref); /* ** from herrF.c */ #define nheprnt H4_F77_FUNC(heprnt, HEPRNT) #define nheprntc H4_F77_FUNC(heprntc, HEPRNTC) #define nhestringc H4_F77_FUNC(hestringc, HESTRINGC) HDFFCLIBAPI void nheprnt(intf *print_levels); HDFFCLIBAPI intf nheprntc(_fcd filename, intf *print_levels, intf *namelen); HDFFCLIBAPI intf nhestringc(intf *error_code, _fcd error_message, intf *len); /* ** from hfilef.c */ /* * Not all HDF4 Fortran functions are real Fortran functions, they are C wrappers called from a * Fortran program. Since on Windows we have to have a real Fortran function, additional C wrappers * were added at the time when Windows port was done for multi-file interfaces: for example, * hclose is a C wrapper on UNIX, while on Windows we have two functions: Fortran function hclose * and C wrapper function hiclose called by hclose * EIP 2007-09-14 */ #define nhiopen H4_F77_FUNC(hiopen, HIOPEN) #define nhclose H4_F77_FUNC(hclose, HCLOSE) #define nhnumber H4_F77_FUNC(hnumber, HNUMBER) #define nhxisdir H4_F77_FUNC(hxisdir, HXISDIR) #define nhxiscdir H4_F77_FUNC(hxiscdir, HXISCDIR) #define nhddontatexit H4_F77_FUNC(hddontatexit, HDDONTATEXIT) #define nhglibverc H4_F77_FUNC(hglibverc, HGLIBVERC) #define nhgfilverc H4_F77_FUNC(hgfilverc, HGFILVERC) #define nhiishdf H4_F77_FUNC(hiishdf, HIISHDF) #define nhconfinfc H4_F77_FUNC(hconfinfc, HCONFINFC) HDFFCLIBAPI intf nhiopen(_fcd name, intf *acc_mode, intf *defdds, intf *namelen); HDFFCLIBAPI intf nhclose(intf *file_id); HDFFCLIBAPI intf nhnumber(intf *file_id, intf *tag); HDFFCLIBAPI intf nhxisdir(_fcd dir, intf *dirlen); HDFFCLIBAPI intf nhxiscdir(_fcd dir, intf *dirlen); HDFFCLIBAPI intf nhddontatexit(void); HDFFCLIBAPI intf nhglibverc(intf *major_v, intf *minor_v, intf *release, _fcd string, intf *len); HDFFCLIBAPI intf nhgfilverc(intf *file_id, intf *major_v, intf *minor_v, intf *release, _fcd string, intf *len); HDFFCLIBAPI intf nhiishdf(_fcd name, intf *namelen); HDFFCLIBAPI intf nhiclose(intf *file_id); HDFFCLIBAPI intf nhinumbr(int32 file_id, uint16 tag); HDFFCLIBAPI intf nhconfinfc(intf *coder_type, intf *info); /* ** from dfufp2i.c */ #define nduif2i H4_F77_FUNC(duif2i, DUIF2I) HDFFCLIBAPI int nduif2i(int32 *hdim, int32 *vdim, float32 *max, float32 *min, float32 hscale[], float32 vscale[], float32 data[], _fcd palette, _fcd outfile, int *ct_method, int32 *hres, int32 *vres, int *compress, int *lenfn); HDFFCLIBAPI int DFUfptoimage(int32 hdim, int32 vdim, float32 max, float32 min, float32 *hscale, float32 *vscale, float32 *data, uint8 *palette, char *outfile, int ct_method, int32 hres, int32 vres, int compress); /* for Multi-file fortran Annotation interface */ /* * Not all HDF4 Fortran functions are real Fortran functions, they are C wrappers called from a * Fortran program. Since on Windows we have to have a real Fortran function, additional C wrappers * were added at the time when Windows port was done for multi-file interfaces: for example, * hclose is a C wrapper on UNIX, while on Windows we have two functions: Fortran function hclose * and C wrapper function hiclose called by hclose * EIP 2007-09-14 */ #define nafstart H4_F77_FUNC(afstart, AFSTART) #define naffileinfo H4_F77_FUNC(affileinfo, AFFILEINFO) #define nafend H4_F77_FUNC(afend, AFEND) #define nafcreate H4_F77_FUNC(afcreate, AFCREATE) #define naffcreate H4_F77_FUNC(affcreate, AFFCREATE) #define nafselect H4_F77_FUNC(afselect, AFSELECT) #define nafnumann H4_F77_FUNC(afnumann, AFNUMANN) #define nafannlist H4_F77_FUNC(afannlist, AFANNLIST) #define nafannlen H4_F77_FUNC(afannlen, AFANNLEN) #define nafwriteann H4_F77_FUNC(afwriteann, AFWRITEANN) #define nafreadann H4_F77_FUNC(afreadann, AFREADANN) #define nafendaccess H4_F77_FUNC(afendaccess, AFENDACCESS) #define nafgettagref H4_F77_FUNC(afgettagref, AFGETTAGREF) #define nafidtagref H4_F77_FUNC(afidtagref, AFIDTAGREF) #define naftagrefid H4_F77_FUNC(aftagrefid, AFTAGREFID) #define nafatypetag H4_F77_FUNC(afatypetag, AFATYPETAG) #define naftagatype H4_F77_FUNC(aftagatype, AFTAGATYPE) /* Multi-file Annotation C-stubs for Fortran interface found in mfanf.c */ HDFFCLIBAPI intf nafstart(intf *file_id); HDFFCLIBAPI intf naffileinfo(intf *an_id, intf *num_flabel, intf *num_fdesc, intf *num_olabel, intf *num_odesc); HDFFCLIBAPI intf nafend(intf *an_id); HDFFCLIBAPI intf nafcreate(intf *an_id, intf *etag, intf *eref, intf *atype); HDFFCLIBAPI intf naffcreate(intf *an_id, intf *atype); HDFFCLIBAPI intf nafselect(intf *an_id, intf *idx, intf *atype); HDFFCLIBAPI intf nafnumann(intf *an_id, intf *atype, intf *etag, intf *eref); HDFFCLIBAPI intf nafannlist(intf *an_id, intf *atype, intf *etag, intf *eref, intf alist[]); HDFFCLIBAPI intf nafannlen(intf *ann_id); HDFFCLIBAPI intf nafwriteann(intf *ann_id, _fcd ann, intf *annlen); HDFFCLIBAPI intf nafreadann(intf *ann_id, _fcd ann, intf *maxlen); HDFFCLIBAPI intf nafendaccess(intf *ann_id); HDFFCLIBAPI intf nafgettagref(intf *an_id, intf *idx, intf *type, intf *tag, intf *ref); HDFFCLIBAPI intf nafidtagref(intf *ann_id, intf *tag, intf *ref); HDFFCLIBAPI intf naftagrefid(intf *an_id, intf *tag, intf *ref); HDFFCLIBAPI intf nafatypetag(intf *atype); HDFFCLIBAPI intf naftagatype(intf *tag); /* if defined Windows */ /* Multi-file Annotation C-stubs for Fortran interface found in mfanf.c */ HDFFCLIBAPI intf nafistart(intf *file_id); HDFFCLIBAPI intf nafifinf(intf *an_id, intf *num_flabel, intf *num_fdesc, intf *num_olabel, intf *num_odesc); HDFFCLIBAPI intf nafiend(intf *an_id); HDFFCLIBAPI intf naficreat(intf *an_id, intf *etag, intf *eref, intf *atype); HDFFCLIBAPI intf nafifcreat(intf *an_id, intf *atype); HDFFCLIBAPI intf nafiselct(intf *an_id, intf *index, intf *atype); HDFFCLIBAPI intf nafinann(intf *an_id, intf *atype, intf *etag, intf *eref); HDFFCLIBAPI intf nafialst(intf *an_id, intf *atype, intf *etag, intf *eref, intf alist[]); HDFFCLIBAPI intf nafialen(intf *ann_id); HDFFCLIBAPI intf nafiwann(intf *ann_id, _fcd ann, intf *annlen); HDFFCLIBAPI intf nafirann(intf *ann_id, _fcd ann, intf *maxlen); HDFFCLIBAPI intf nafiendac(intf *ann_id); HDFFCLIBAPI intf nafigtr(intf *an_id, intf *index, intf *type, intf *tag, intf *ref); HDFFCLIBAPI intf nafiid2tr(intf *ann_id, intf *tag, intf *ref); HDFFCLIBAPI intf nafitr2id(intf *an_id, intf *tag, intf *ref); HDFFCLIBAPI intf nafitp2tg(intf *atype); HDFFCLIBAPI intf nafitg2tp(intf *tag); /* endif defined Windows */ /* Multi-file Annotation C-routines found in mfan.c */ HDFLIBAPI int32 ANstart(int32 file_id); HDFLIBAPI intn ANfileinfo(int32 an_id, int32 *n_file_label, int32 *n_file_desc, int32 *n_obj_label, int32 *n_obj_desc); HDFLIBAPI int32 ANend(int32 an_id); HDFLIBAPI int32 ANcreate(int32 an_id, uint16 elem_tag, uint16 elem_ref, ann_type type); HDFLIBAPI int32 ANcreatef(int32 an_id, ann_type type); HDFLIBAPI int32 ANselect(int32 an_id, int32 idx, ann_type type); HDFLIBAPI intn ANnumann(int32 an_id, ann_type type, uint16 elem_tag, uint16 elem_ref); HDFLIBAPI intn ANannlist(int32 an_id, ann_type type, uint16 elem_tag, uint16 elem_ref, int32 ann_list[]); HDFLIBAPI int32 ANannlen(int32 ann_id); HDFLIBAPI int32 ANwriteann(int32 ann_id, const char *ann, int32 annlen); HDFLIBAPI int32 ANreadann(int32 ann_id, char *ann, int32 maxlen); HDFLIBAPI intn ANendaccess(int32 ann_id); HDFLIBAPI int32 ANget_tagref(int32 an_id, int32 idx, ann_type type, uint16 *ann_tag, uint16 *ann_ref); HDFLIBAPI int32 ANid2tagref(int32 an_id, uint16 *ann_tag, uint16 *ann_ref); HDFLIBAPI int32 ANtagref2id(int32 an_id, uint16 ann_tag, uint16 ann_ref); HDFLIBAPI uint16 ANatype2tag(ann_type atype); HDFLIBAPI ann_type ANtag2atype(uint16 atag); /* Removed because this function is meant to be private. HDFLIBAPI intn ANdestroy(void); */ /* for Multi-file fortran GR interface */ /* * Not all HDF4 Fortran functions are real Fortran functions, they are C wrappers called from a * Fortran program. Since on Windows we have to have a real Fortran function, additional C wrappers * were added at the time when Windows port was done for multi-file interfaces: for example, * hclose is a C wrapper on UNIX, while on Windows we have two functions: Fortran function hclose * and C wrapper function hiclose called by hclose * EIP 2007-09-14 */ #define nmgstart H4_F77_FUNC(mgstart, MGSTART) #define nmgfinfo H4_F77_FUNC(mgfinfo, MGFINFO) #define nmgend H4_F77_FUNC(mgend, MGEND) #define nmgicreat H4_F77_FUNC(mgicreat, MGICREAT) #define nmgselct H4_F77_FUNC(mgselct, MGSELCT) #define nmgin2ndx H4_F77_FUNC(mgin2ndx, MGIN2NDX) #define nmggiinf H4_F77_FUNC(mggiinf, MGGIINF) #define nmgwcimg H4_F77_FUNC(mgwcimg, MGWCIMG) #define nmgrcimg H4_F77_FUNC(mgrcimg, MGRCIMG) #define nmgwrimg H4_F77_FUNC(mgwrimg, MGWRIMG) #define nmgrdimg H4_F77_FUNC(mgrdimg, MGRDIMG) #define nmgendac H4_F77_FUNC(mgendac, MGENDAC) #define nmgid2rf H4_F77_FUNC(mgid2rf, MGID2RF) #define nmgr2idx H4_F77_FUNC(mgr2idx, MGR2IDX) #define nmgrltil H4_F77_FUNC(mgrltil, MGRLTIL) #define nmgrimil H4_F77_FUNC(mgrimil, MGRIMIL) #define nmggltid H4_F77_FUNC(mggltid, MGGLTID) #define nmgglinf H4_F77_FUNC(mgglinf, MGGLINF) #define nmgwrlut H4_F77_FUNC(mgwrlut, MGWRLUT) #define nmgwclut H4_F77_FUNC(mgwclut, MGWCLUT) #define nmgrdlut H4_F77_FUNC(mgrdlut, MGRDLUT) #define nmgrclut H4_F77_FUNC(mgrclut, MGRCLUT) #define nmgisxfil H4_F77_FUNC(mgisxfil, MGISXFIL) #define nmgiscatt H4_F77_FUNC(mgiscatt, MGISCATT) #define nmgisattr H4_F77_FUNC(mgisattr, MGISATTR) #define nmgatinf H4_F77_FUNC(mgatinf, MGATINF) #define nmggcatt H4_F77_FUNC(mggcatt, MGGCATT) #define nmggnatt H4_F77_FUNC(mggnatt, MGGNATT) #define nmggattr H4_F77_FUNC(mggattr, MGGATTR) #define nmgifndat H4_F77_FUNC(mgifndat, MGIFNDAT) #define nmgcgichnk H4_F77_FUNC(mgcgichnk, MGCGICHNK) #define nmgcrcchnk H4_F77_FUNC(mgcrcchnk, MGCRCCHNK) #define nmgcrchnk H4_F77_FUNC(mgcrchnk, MGCRCHNK) #define nmgcscchnk H4_F77_FUNC(mgcscchnk, MGCSCCHNK) #define nmgcschnk H4_F77_FUNC(mgcschnk, MGCSCHNK) #define nmgcwcchnk H4_F77_FUNC(mgcwcchnk, MGCWCCHNK) #define nmgcwchnk H4_F77_FUNC(mgcwchnk, MGCWCHNK) #define nmgcscompress H4_F77_FUNC(mgcscompress, MGCSCOMPRESS) #define nmgcgcompress H4_F77_FUNC(mgcgcompress, MGCGCOMPRESS) #define nmglt2rf H4_F77_FUNC(mglt2rf, MGLT2RF) #define nmgcgnluts H4_F77_FUNC(mgcgnluts, MGCGNLUTS) /* Multi-file GR C-stubs for FORTRAN interface found in mfgrf.c */ HDFFCLIBAPI intf /* !sl */ nmgiwimg(intf *riid, intf *start, intf *stride, intf *count, void *data); HDFFCLIBAPI intf /* !sl */ nmgirimg(intf *riid, intf *start, intf *stride, intf *count, void *data); HDFFCLIBAPI intf /* !sl */ nmgignat(intf *riid, intf *idx, void *data); HDFFCLIBAPI intf nmgstart(intf *fid); HDFFCLIBAPI intf nmgfinfo(intf *grid, intf *n_datasets, intf *n_attrs); HDFFCLIBAPI intf nmgend(intf *grid); HDFFCLIBAPI intf nmgicreat(intf *grid, _fcd name, intf *ncomp, intf *nt, intf *il, intf dimsizes[2], intf *nlen); HDFFCLIBAPI intf nmgselct(intf *grid, intf *idx); HDFFCLIBAPI intf nmgin2ndx(intf *grid, _fcd name, intf *nlen); HDFFCLIBAPI intf nmggiinf(intf *riid, _fcd name, intf *ncomp, intf *nt, intf *il, intf *dimsizes, intf *nattr); HDFFCLIBAPI intf nmgwcimg(intf *riid, intf *start, intf *stride, intf *count, _fcd data); HDFFCLIBAPI intf nmgrcimg(intf *riid, intf *start, intf *stride, intf *count, _fcd data); HDFFCLIBAPI intf nmgwrimg(intf *riid, intf *start, intf *stride, intf *count, void *data); HDFFCLIBAPI intf nmgrdimg(intf *riid, intf *start, intf *stride, intf *count, void *data); HDFFCLIBAPI intf nmgendac(intf *riid); HDFFCLIBAPI intf nmgid2rf(intf *riid); HDFFCLIBAPI intf nmgr2idx(intf *grid, intf *ref); HDFFCLIBAPI intf nmgrltil(intf *riid, intf *il); HDFFCLIBAPI intf nmgrimil(intf *riid, intf *il); HDFFCLIBAPI intf nmggltid(intf *riid, intf *lut_index); HDFFCLIBAPI intf nmgglinf(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries); HDFFCLIBAPI intf nmgwrlut(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, void *data); HDFFCLIBAPI intf nmgwclut(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, _fcd data); HDFFCLIBAPI intf nmgrdlut(intf *lutid, void *data); HDFFCLIBAPI intf nmgrclut(intf *lutid, _fcd data); HDFFCLIBAPI intf nmgisxfil(intf *riid, _fcd filename, intf *offset, intf *nlen); HDFFCLIBAPI intf nmgsactp(intf *riid, intf *accesstype); HDFFCLIBAPI intf nmgiscatt(intf *riid, _fcd name, intf *nt, intf *count, _fcd data, intf *nlen); HDFFCLIBAPI intf nmgisattr(intf *riid, _fcd name, intf *nt, intf *count, void *data, intf *nlen); HDFFCLIBAPI intf nmgatinf(intf *riid, intf *idx, _fcd name, intf *nt, intf *count); HDFFCLIBAPI intf nmggcatt(intf *riid, intf *idx, _fcd data); HDFFCLIBAPI intf nmggnatt(intf *riid, intf *idx, void *data); HDFFCLIBAPI intf nmggattr(intf *riid, intf *idx, void *data); HDFFCLIBAPI intf nmgifndat(intf *riid, _fcd name, intf *nlen); HDFFCLIBAPI intf nmgcgichnk(intf *id, intf *dim_length, intf *flags); HDFFCLIBAPI intf nmgcrcchnk(intf *id, intf *start, _fcd char_data); HDFFCLIBAPI intf nmgcrchnk(intf *id, intf *start, void *num_data); HDFFCLIBAPI intf nmgcscchnk(intf *id, intf *maxcache, intf *flags); HDFFCLIBAPI intf nmgcschnk(intf *id, intf *dim_length, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nmgcwcchnk(intf *id, intf *start, _fcd char_data); HDFFCLIBAPI intf nmgcwchnk(intf *id, intf *start, void *num_data); HDFFCLIBAPI intf nmgcscompress(intf *id, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nmgcgcompress(intf *id, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nmglt2rf(intf *id); HDFFCLIBAPI intf nmgcgnluts(intf *id); /* ** from vgF.c */ /* * Not all HDF4 Fortran functions are real Fortran functions, they are C wrappers called from a * Fortran program. Since on Windows we have to have a real Fortran function, additional C wrappers * were added at the time when Windows port was done for multi-file interfaces: for example, * hclose is a C wrapper on UNIX, while on Windows we have two functions: Fortran function hclose * and C wrapper function hiclose called by hclose * EIP 2007-09-14 */ #define ndfivopn H4_F77_FUNC(dfivopn, DFIVOPN) #define ndfvclos H4_F77_FUNC(dfvclos, DFVCLOS) #define nvatchc H4_F77_FUNC(vatchc, VATCHC) #define nvdtchc H4_F77_FUNC(vdtchc, VDTCHC) #define nvgnamc H4_F77_FUNC(vgnamc, VGNAMC) #define nvgclsc H4_F77_FUNC(vgclsc, VGCLSC) #define nvinqc H4_F77_FUNC(vinqc, VINQC) #define nvdeletec H4_F77_FUNC(vdeletec, VDELETEC) #define nvgidc H4_F77_FUNC(vgidc, VGIDC) #define nvgnxtc H4_F77_FUNC(vgnxtc, VGNXTC) #define nvsnamc H4_F77_FUNC(vsnamc, VSNAMC) #define nvsclsc H4_F77_FUNC(vsclsc, VSCLSC) #define nvinsrtc H4_F77_FUNC(vinsrtc, VINSRTC) #define nvisvgc H4_F77_FUNC(visvgc, VISVGC) #define nvisvsc H4_F77_FUNC(visvsc, VISVSC) #define nvsatchc H4_F77_FUNC(vsatchc, VSATCHC) #define nvsdtchc H4_F77_FUNC(vsdtchc, VSDTCHC) #define nvsqref H4_F77_FUNC(vsqref, VSQREF) #define nvsqtag H4_F77_FUNC(vsqtag, VSQTAG) #define nvsgver H4_F77_FUNC(vsgver, VSGVER) #define nvsseekc H4_F77_FUNC(vsseekc, VSSEEKC) #define nvsgnamc H4_F77_FUNC(vsgnamc, VSGNAMC) #define nvsgclsc H4_F77_FUNC(vsgclsc, VSGCLSC) #define nvsinqc H4_F77_FUNC(vsinqc, VSINQC) #define nvsfexc H4_F77_FUNC(vsfexc, VSFEXC) #define nvsfndc H4_F77_FUNC(vsfndc, VSFNDC) #define nvsgidc H4_F77_FUNC(vsgidc, VSGIDC) #define nvsdltc H4_F77_FUNC(vsdltc, VSDLTC) #define nvsapp H4_F77_FUNC(vsapp, VSAPP) #define nvssnamc H4_F77_FUNC(vssnamc, VSSNAMC) #define nvssclsc H4_F77_FUNC(vssclsc, VSSCLSC) #define nvssfldc H4_F77_FUNC(vssfldc, VSSFLDC) #define nvssintc H4_F77_FUNC(vssintc, VSSINTC) #define nvsfdefc H4_F77_FUNC(vsfdefc, VSFDEFC) #define nvssextfc H4_F77_FUNC(vssextfc, VSSEXTFC) #define nvfnflds H4_F77_FUNC(vfnflds, VFNFLDS) #define nvffnamec H4_F77_FUNC(vffnamec, VFFNAMEC) #define nvfftype H4_F77_FUNC(vfftype, VFFTYPE) #define nvffisiz H4_F77_FUNC(vffisiz, VFFISIZ) #define nvffesiz H4_F77_FUNC(vffesiz, VFFESIZ) #define nvffordr H4_F77_FUNC(vffordr, VFFORDR) #define nvsfrdc H4_F77_FUNC(vsfrdc, VSFRDC) #define nvsfrd H4_F77_FUNC(vsfrd, VSFRD) #define nvsreadc H4_F77_FUNC(vsreadc, VSREADC) #define nvsfwrt H4_F77_FUNC(vsfwrt, VSFWRT) #define nvsfwrtc H4_F77_FUNC(vsfwrtc, VSFWRTC) #define nvswritc H4_F77_FUNC(vswritc, VSWRITC) #define nvsgintc H4_F77_FUNC(vsgintc, VSGINTC) #define nvseltsc H4_F77_FUNC(vseltsc, VSELTSC) #define nvsgfldc H4_F77_FUNC(vsgfldc, VSGFLDC) #define nvssizc H4_F77_FUNC(vssizc, VSSIZC) #define nventsc H4_F77_FUNC(ventsc, VENTSC) #define nvlonec H4_F77_FUNC(vlonec, VLONEC) #define nvslonec H4_F77_FUNC(vslonec, VSLONEC) #define nvfindc H4_F77_FUNC(vfindc, VFINDC) #define nvfndclsc H4_F77_FUNC(vfndclsc, VFNDCLSC) #define nvhscdc H4_F77_FUNC(vhscdc, VHSCDC) #define nvhsdc H4_F77_FUNC(vhsdc, VHSDC) #define nvhscdmc H4_F77_FUNC(vhscdmc, VHSCDMC) #define nvhsdmc H4_F77_FUNC(vhsdmc, VHSDMC) #define nvhmkgpc H4_F77_FUNC(vhmkgpc, VHMKGPC) #define nvflocc H4_F77_FUNC(vflocc, VFLOCC) #define nvinqtrc H4_F77_FUNC(vinqtrc, VINQTRC) #define nvntrc H4_F77_FUNC(vntrc, VNTRC) #define nvnrefs H4_F77_FUNC(vnrefs, VNREFS) #define nvgttrsc H4_F77_FUNC(vgttrsc, VGTTRSC) #define nvqref H4_F77_FUNC(vqref, VQREF) #define nvqtag H4_F77_FUNC(vqtag, VQTAG) #define nvgttrc H4_F77_FUNC(vgttrc, VGTTRC) #define nvadtrc H4_F77_FUNC(vadtrc, VADTRC) #define nvfstart H4_F77_FUNC(vfstart, VFSTART) #define nvfend H4_F77_FUNC(vfend, VFEND) #define nvsqfnelt H4_F77_FUNC(vsqfnelt, VSQFNELT) #define nvsqfintr H4_F77_FUNC(vsqfintr, VSQFINTR) #define nvsqfldsc H4_F77_FUNC(vsqfldsc, VSQFLDSC) #define nvsqfvsiz H4_F77_FUNC(vsqfvsiz, VSQFVSIZ) #define nvsqnamec H4_F77_FUNC(vsqnamec, VSQNAMEC) #define nvsfccpk H4_F77_FUNC(vsfccpk, VSFCCPK) #define nvsfncpk H4_F77_FUNC(vsfncpk, VSFNCPK) #define nvdtrc H4_F77_FUNC(vdtrc, VDTRC) #define nvscfcls H4_F77_FUNC(vscfcls, VSCFCLS) #define nvscsetblsz H4_F77_FUNC(vscsetblsz, VSCSETBLSZ) #define nvscsetnmbl H4_F77_FUNC(vscsetnmbl, VSCSETNMBL) #define nvscgblinfo H4_F77_FUNC(vscgblinfo, VSCGBLINFO) #define nvcgvgrp H4_F77_FUNC(vcgvgrp, VCGVGRP) #define nvscgvdatas H4_F77_FUNC(vscgvdatas, VSCGVDATAS) HDFFCLIBAPI intf ndfivopn(_fcd filename, intf *acc_mode, intf *defdds, intf *namelen); HDFFCLIBAPI intf ndfvclos(intf *file_id); HDFFCLIBAPI intf nvatchc(intf *f, intf *vgid, _fcd accesstype); HDFFCLIBAPI intf nvdtchc(intf *vkey); HDFFCLIBAPI intf nvgnamc(intf *vkey, _fcd vgname); HDFFCLIBAPI intf nvgclsc(intf *vkey, _fcd vgclass); HDFFCLIBAPI intf nvinqc(intf *vkey, intf *nentries, _fcd vgname); HDFFCLIBAPI intf nvdeletec(intf *f, intf *vkey); HDFFCLIBAPI intf nvgidc(intf *f, intf *vgid); HDFFCLIBAPI intf nvgnxtc(intf *vkey, intf *id); HDFFCLIBAPI intf nvsnamc(intf *vkey, _fcd vgname, intf *vgnamelen); HDFFCLIBAPI intf nvsclsc(intf *vkey, _fcd vgclass, intf *vgclasslen); HDFFCLIBAPI intf nvinsrtc(intf *vkey, intf *vobjptr); HDFFCLIBAPI intf nvisvgc(intf *vkey, intf *id); HDFFCLIBAPI intf nvfstart(intf *f); HDFFCLIBAPI intf nvfend(intf *f); HDFFCLIBAPI intf nvisvsc(intf *vkey, intf *id); HDFFCLIBAPI intf nvsatchc(intf *f, intf *vsref, _fcd accesstype); HDFFCLIBAPI intf nvsdtchc(intf *vkey); HDFFCLIBAPI intf nvsqref(intf *vkey); HDFFCLIBAPI intf nvsqtag(intf *vkey); HDFFCLIBAPI intf nvsgver(intf *vkey); HDFFCLIBAPI intf nvsseekc(intf *vkey, intf *eltpos); HDFFCLIBAPI intf nvsgnamc(intf *vkey, _fcd vsname, intf *vsnamelen); HDFFCLIBAPI intf nvsgclsc(intf *vkey, _fcd vsclass, intf *vsclasslen); HDFFCLIBAPI intf nvsinqc(intf *vkey, intf *nelt, intf *interlace, _fcd fields, intf *eltsize, _fcd vsname, intf *fieldslen, intf *vsnamelen); HDFFCLIBAPI intf nvsfexc(intf *vkey, _fcd fields, intf *fieldslen); HDFFCLIBAPI intf nvsfndc(intf *f, _fcd name, intf *namelen); HDFFCLIBAPI intf nvsgidc(intf *f, intf *vsref); HDFFCLIBAPI intf nvsdltc(intf *f, intf *vsref); HDFFCLIBAPI intf nvsapp(intf *vkey, intf *blk); HDFFCLIBAPI intf nvssnamc(intf *vkey, _fcd vsname, intf *vsnamelen); HDFFCLIBAPI intf nvssclsc(intf *vkey, _fcd vsclass, intf *vsclasslen); HDFFCLIBAPI intf nvssfldc(intf *vkey, _fcd fields, intf *fieldslen); HDFFCLIBAPI intf nvssintc(intf *vkey, intf *interlace); HDFFCLIBAPI intf nvsfdefc(intf *vkey, _fcd field, intf *localtype, intf *order, intf *fieldlen); HDFFCLIBAPI intf nvssextfc(intf *vkey, _fcd fname, intf *offset, intf *fnamelen); HDFFCLIBAPI intf nvfnflds(intf *vkey); HDFFCLIBAPI intf nvffnamec(intf *vkey, intf *idx, _fcd fname, intf *len); HDFFCLIBAPI intf nvfftype(intf *vkey, intf *idx); HDFFCLIBAPI intf nvffisiz(intf *vkey, intf *idx); HDFFCLIBAPI intf nvffesiz(intf *vkey, intf *idx); HDFFCLIBAPI intf nvffordr(intf *vkey, intf *idx); HDFFCLIBAPI intf nvsfrdc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfrd(intf *vkey, intf *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsreadc(intf *vkey, uint8 *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfwrtc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfwrt(intf *vkey, intf *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvswritc(intf *vkey, uint8 *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsgintc(intf *vkey); HDFFCLIBAPI intf nvseltsc(intf *vkey); HDFFCLIBAPI intf nvsgfldc(intf *vkey, _fcd fields); HDFFCLIBAPI intf nvssizc(intf *vkey, _fcd fields, intf *fieldslen); HDFFCLIBAPI intf nventsc(intf *f, intf *vgid); HDFFCLIBAPI intf nvlonec(intf *f, intf *idarray, intf *asize); HDFFCLIBAPI intf nvslonec(intf *f, intf *idarray, intf *asize); HDFFCLIBAPI intf nvfindc(intf *f, _fcd name, intf *namelen); HDFFCLIBAPI intf nvfndclsc(intf *f, _fcd vgclass, intf *classlen); HDFFCLIBAPI intf nvhscdc(intf *f, _fcd field, _fcd cbuf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *fieldlen, intf *vsnamelen, intf *vsclasslen); HDFFCLIBAPI intf nvhsdc(intf *f, _fcd field, uint8 *buf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *fieldlen, intf *vsnamelen, intf *vsclasslen); HDFFCLIBAPI intf nvhscdmc(intf *f, _fcd field, _fcd cbuf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *order, intf *fieldlen, intf *vsnamelen, intf *vsclasslen); HDFFCLIBAPI intf nvhsdmc(intf *f, _fcd field, uint8 *buf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *order, intf *fieldlen, intf *vsnamelen, intf *vsclasslen); HDFFCLIBAPI intf nvhmkgpc(intf *f, intf *tagarray, intf *refarray, intf *n, _fcd vgname, _fcd vgclass, intf *vgnamelen, intf *vgclasslen); HDFFCLIBAPI intf nvflocc(intf *vkey, _fcd field, intf *fieldlen); HDFFCLIBAPI intf nvinqtrc(intf *vkey, intf *tag, intf *ref); HDFFCLIBAPI intf nvntrc(intf *vkey); HDFFCLIBAPI intf nvnrefs(intf *vkey, intf *tag); HDFFCLIBAPI intf nvqref(intf *vkey); HDFFCLIBAPI intf nvqtag(intf *vkey); HDFFCLIBAPI intf nvgttrsc(intf *vkey, intf *tagarray, intf *refarray, intf *n); HDFFCLIBAPI intf nvgttrc(intf *vkey, intf *which, intf *tag, intf *ref); HDFFCLIBAPI intf nvadtrc(intf *vkey, intf *tag, intf *ref); HDFFCLIBAPI intf nvdtrc(intf *vkey, intf *tag, intf *ref); HDFFCLIBAPI intf nvsqfnelt(intf *vkey, intf *nelt); HDFFCLIBAPI intf nvsqfintr(intf *vkey, intf *interlace); HDFFCLIBAPI intf nvsqfldsc(intf *vkey, _fcd fields, intf *fieldslen); HDFFCLIBAPI intf nvsqfvsiz(intf *vkey, intf *size); HDFFCLIBAPI intf nvsqnamec(intf *vkey, _fcd name, intf *namelen); HDFFCLIBAPI intf nvsfccpk(intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz, intf *nrecs, _fcd pckfld, _fcd fldbuf, intf *buflds_len, intf *fld_len); HDFFCLIBAPI intf nvsfncpk(intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz, intf *nrecs, _fcd pckfld, intf *fldbuf, intf *buflds_len, intf *fld_len); HDFFCLIBAPI intf nvscsetblsz(intf *id, intf *block_size); HDFFCLIBAPI intf nvscsetnmbl(intf *id, intf *num_blocks); HDFFCLIBAPI intf nvscgblinfo(intf *id, intf *block_size, intf *num_blocks); HDFFCLIBAPI intf nvcgvgrp(intf *id, intf *start_vg, intf *vg_count, intf *refarray); HDFFCLIBAPI intf nvscgvdatas(intf *id, intf *start_vd, intf *vd_count, intf *refarray); HDFFCLIBAPI intf nvscfcls(intf *id, _fcd name, intf *namelen); HDFFCLIBAPI intf nvfistart(intf *f); HDFFCLIBAPI intf nvfiend(intf *f); HDFFCLIBAPI intf nvsiqref(intf *vkey); HDFFCLIBAPI intf nvsiqtag(intf *vkey); HDFFCLIBAPI intf nvsigver(intf *vkey); HDFFCLIBAPI intf nvfinflds(intf *vkey); HDFFCLIBAPI intf nvfifnm(intf *vkey, intf *index, _fcd fname); HDFFCLIBAPI intf nvfiftp(intf *vkey, intf *index); HDFFCLIBAPI intf nvfifisz(intf *vkey, intf *index); HDFFCLIBAPI intf nvfifesz(intf *vkey, intf *index); HDFFCLIBAPI intf nvfifodr(intf *vkey, intf *index); HDFFCLIBAPI intf nvsfirdc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfird(intf *vkey, intf *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfiwrc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvsfiwr(intf *vkey, intf *buf, intf *nelt, intf *interlace); HDFFCLIBAPI intf nvfirefs(intf *vkey, intf *tag); HDFFCLIBAPI intf nvfiqref(intf *vkey); HDFFCLIBAPI intf nvfiqtag(intf *vkey); HDFFCLIBAPI intf nvsiqnelt(intf *vkey, intf *nelt); HDFFCLIBAPI intf nvsiqintr(intf *vkey, intf *interlace); HDFFCLIBAPI intf nvsqfldsc(intf *vkey, _fcd fields, intf *fieldslen); HDFFCLIBAPI intf nvsiqvsz(intf *vkey, intf *ret_size); /* ** from vattrf.c */ /* * Not all HDF4 Fortran functions are real Fortran functions, they are C wrappers called from a * Fortran program. Since on Windows we have to have a real Fortran function, additional C wrappers * were added at the time when Windows port was done for multi-file interfaces: for example, * hclose is a C wrapper on UNIX, while on Windows we have two functions: Fortran function hclose * and C wrapper function hiclose called by hclose * EIP 2007-09-14 */ #define nvsfcfdx H4_F77_FUNC(vsfcfdx, VSFCFDX) #define nvsfcsat H4_F77_FUNC(vsfcsat, VSFCSAT) #define nvsfcsca H4_F77_FUNC(vsfcsca, VSFCSCA) #define nvsfnats H4_F77_FUNC(vsfnats, VSFNATS) #define nvsffnas H4_F77_FUNC(vsffnas, VSFFNAS) #define nvsfcfda H4_F77_FUNC(vsfcfda, VSFCFDA) #define nvsfcain H4_F77_FUNC(vsfcain, VSFCAIN) #define nvsfgnat H4_F77_FUNC(vsfgnat, VSFGNAT) #define nvsfgcat H4_F77_FUNC(vsfgcat, VSFGCAT) #define nvsfisat H4_F77_FUNC(vsfisat, VSFISAT) #define nvfcsatt H4_F77_FUNC(vfcsatt, VFCSATT) #define nvfcscat H4_F77_FUNC(vfcscat, VFCSCAT) #define nvfnatts H4_F77_FUNC(vfnatts, VFNATTS) #define nvfcfdat H4_F77_FUNC(vfcfdat, VFCFDAT) #define nvfainfo H4_F77_FUNC(vfainfo, VFAINFO) #define nvfgnatt H4_F77_FUNC(vfgnatt, VFGNATT) #define nvfgcatt H4_F77_FUNC(vfgcatt, VFGCATT) #define nvfgver H4_F77_FUNC(vfgver, VFGVER) HDFFCLIBAPI intf nvsfcfdx(intf *vsid, _fcd fldnm, intf *findex, intf *fldnmlen); HDFFCLIBAPI intf nvsfcsat(intf *vsid, intf *findex, _fcd attrnm, intf *dtype, intf *count, intf *values, intf *attrnmlen); HDFFCLIBAPI intf nvsfcsca(intf *vsid, intf *findex, _fcd attrnm, intf *dtype, intf *count, _fcd values, intf *attrnmlen); HDFFCLIBAPI intf nvsfnats(intf *vsid); HDFFCLIBAPI intf nvsffnas(intf *vsid, intf *findex); HDFFCLIBAPI intf nvsfcfda(intf *vsid, intf *findex, _fcd attrnm, intf *attrnmlen); HDFFCLIBAPI intf nvsfcain(intf *vsid, intf *findex, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size, intf *attrnamelen); HDFFCLIBAPI intf nvsfgnat(intf *vsid, intf *findex, intf *aindex, intf *values); HDFFCLIBAPI intf nvsfgcat(intf *vsid, intf *findex, intf *aindex, _fcd values); HDFFCLIBAPI intf nvsfisat(intf *vsid); HDFFCLIBAPI intf nvfcsatt(intf *vgid, _fcd attrnm, intf *dtype, intf *count, intf *values, intf *attrnmlen); HDFFCLIBAPI intf nvfcscat(intf *vgid, _fcd attrnm, intf *dtype, intf *count, _fcd values, intf *attrnmlen); HDFFCLIBAPI intf nvfnatts(intf *vgid); HDFFCLIBAPI intf nvfcfdat(intf *vgid, _fcd attrnm, intf *attrnmlen); HDFFCLIBAPI intf nvfainfo(intf *vgid, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size); HDFFCLIBAPI intf nvfgnatt(intf *vgid, intf *aindex, intf *values); HDFFCLIBAPI intf nvfgcatt(intf *vgid, intf *aindex, _fcd values); HDFFCLIBAPI intf nvfgver(intf *vgid); /* Added for windows */ HDFFCLIBAPI intf nvsfainf(intf *vsid, intf *findex, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size); HDFFCLIBAPI intf nvsfcnats(intf *vsid); HDFFCLIBAPI intf nvsfcfnas(intf *vsid, intf *findex); HDFFCLIBAPI intf nvsfcainf(intf *vsid, intf *findex, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size); HDFFCLIBAPI intf nvsfcgna(intf *vsid, intf *findex, intf *aindex, intf *values); HDFFCLIBAPI intf nvsfcgca(intf *vsid, intf *findex, intf *aindex, _fcd values); HDFFCLIBAPI intf nvsfcisa(intf *vsid); HDFFCLIBAPI intf nvfcnats(intf *vgid); HDFFCLIBAPI intf nvfcainf(intf *vgid, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size); HDFFCLIBAPI intf nvfcgnat(intf *vgid, intf *aindex, intf *values); HDFFCLIBAPI intf nvfcgcat(intf *vgid, intf *aindex, _fcd values); HDFFCLIBAPI intf nvfcgver(intf *vgid); /* End of windows */ /* ** from dfufp2i.c */ #define nduif2i H4_F77_FUNC(duif2i, DUIF2I) HDFFCLIBAPI int nduif2i(int32 *hdim, int32 *vdim, float32 *max, float32 *min, float32 hscale[], float32 vscale[], float32 data[], _fcd palette, _fcd outfile, int *ct_method, int32 *hres, int32 *vres, int *compress, int *lenfn); #ifdef __cplusplus } #endif #endif /* H4_H_PROTO_FORTRAN */ hdf4-hdf4.3.1/hdf/src/hqueue_priv.h000066400000000000000000000237331503061704500170740ustar00rootroot00000000000000/* * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)queue.h 8.3 (Berkeley) 12/13/93 */ /***************************************************************************** * File: hqueue_priv.h * * This is a modffied version of the original Berkeley code for * manipulating a memory pool. This version however is not * compatible with the original Berkeley version. *****************************************************************************/ #ifndef H4_HQUEUE_PRIV_H #define H4_HQUEUE_PRIV_H /* * This file defines three types of data structures: lists, tail queues, * and circular queues. * * A list is headed by a single forward pointer (or an array of forward * pointers for a hash table header). The elements are doubly linked * so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list after * an existing element or at the head of the list. A list may only be * traversed in the forward direction. * * A tail queue is headed by a pair of pointers, one to the head of the * list and the other to the tail of the list. The elements are doubly * linked so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list after * an existing element, at the head of the list, or at the end of the * list. A tail queue may only be traversed in the forward direction. * * A circle queue is headed by a pair of pointers, one to the head of the * list and the other to the tail of the list. The elements are doubly * linked so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list before or after * an existing element, at the head of the list, or at the end of the list. * A circle queue may be traversed in either direction, but has a more * complex end of list detection. * * For details on the use of these macros, see the queue(3) manual page. * (BSD4.3 manual set - GeorgeV) * */ /* NOTE: LIST and TAILQ implementations were removed */ /* * Circular queue definitions. */ #define H4_CIRCLEQ_HEAD(name, type) \ struct name { \ struct type *cqh_first; /* first element */ \ struct type *cqh_last; /* last element */ \ } #define H4_CIRCLEQ_ENTRY(type) \ struct { \ struct type *cqe_next; /* next element */ \ struct type *cqe_prev; /* previous element */ \ } /* * Circular queue functions. */ #define H4_CIRCLEQ_INIT(head) \ { \ (head)->cqh_first = (void *)(head); \ (head)->cqh_last = (void *)(head); \ } #define H4_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) \ { \ (elm)->field.cqe_next = (listelm)->field.cqe_next; \ (elm)->field.cqe_prev = (listelm); \ if ((listelm)->field.cqe_next == (void *)(head)) \ (head)->cqh_last = (elm); \ else \ (listelm)->field.cqe_next->field.cqe_prev = (elm); \ (listelm)->field.cqe_next = (elm); \ } #define H4_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) \ { \ (elm)->field.cqe_next = (listelm); \ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ if ((listelm)->field.cqe_prev == (void *)(head)) \ (head)->cqh_first = (elm); \ else \ (listelm)->field.cqe_prev->field.cqe_next = (elm); \ (listelm)->field.cqe_prev = (elm); \ } #define H4_CIRCLEQ_INSERT_HEAD(head, elm, field) \ { \ (elm)->field.cqe_next = (head)->cqh_first; \ (elm)->field.cqe_prev = (void *)(head); \ if ((head)->cqh_last == (void *)(head)) \ (head)->cqh_last = (elm); \ else \ (head)->cqh_first->field.cqe_prev = (elm); \ (head)->cqh_first = (elm); \ } #define H4_CIRCLEQ_INSERT_TAIL(head, elm, field) \ { \ (elm)->field.cqe_next = (void *)(head); \ (elm)->field.cqe_prev = (head)->cqh_last; \ if ((head)->cqh_first == (void *)(head)) \ (head)->cqh_first = (elm); \ else \ (head)->cqh_last->field.cqe_next = (elm); \ (head)->cqh_last = (elm); \ } #define H4_CIRCLEQ_REMOVE(head, elm, field) \ { \ if ((elm)->field.cqe_next == (void *)(head)) \ (head)->cqh_last = (elm)->field.cqe_prev; \ else \ (elm)->field.cqe_next->field.cqe_prev = (elm)->field.cqe_prev; \ if ((elm)->field.cqe_prev == (void *)(head)) \ (head)->cqh_first = (elm)->field.cqe_next; \ else \ (elm)->field.cqe_prev->field.cqe_next = (elm)->field.cqe_next; \ } #endif /* H4_HQUEUE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/htags.h000066400000000000000000000143371503061704500156460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*+ htags.h *** This file contains all the tag definitions for HDF + */ #ifndef H4_HTAGS_H #define H4_HTAGS_H #include "hdf.h" /* wild-card tags and refs. Should only be used in interface calls and never stored in the file i.e. in DD's. */ #define DFREF_WILDCARD 0 #define DFTAG_WILDCARD 0 #define DFREF_NONE 0 /* used by mfhdf/libsrc/putget.c */ /* tags and refs */ #define DFTAG_NULL 1 #define DFTAG_LINKED 20 /* linked-block special element */ #define DFTAG_VERSION 30 #define DFTAG_COMPRESSED 40 /* compressed special element */ #define DFTAG_VLINKED 50 /* variable-len linked-block header */ #define DFTAG_VLINKED_DATA 51 /* variable-len linked-block data */ #define DFTAG_CHUNKED \ 60 /* chunked special element header \ (for expansion, not used )*/ #define DFTAG_CHUNK 61 /* chunk element */ /* utility set */ #define DFTAG_FID ((uint16)100) /* File identifier */ #define DFTAG_FD ((uint16)101) /* File description */ #define DFTAG_TID ((uint16)102) /* Tag identifier */ #define DFTAG_TD ((uint16)103) /* Tag descriptor */ #define DFTAG_DIL ((uint16)104) /* data identifier label */ #define DFTAG_DIA ((uint16)105) /* data identifier annotation */ #define DFTAG_NT ((uint16)106) /* number type */ #define DFTAG_MT ((uint16)107) /* machine type */ #define DFTAG_FREE ((uint16)108) /* free space in the file */ /* raster-8 set */ #define DFTAG_ID8 ((uint16)200) /* 8-bit Image dimension */ #define DFTAG_IP8 ((uint16)201) /* 8-bit Image palette */ #define DFTAG_RI8 ((uint16)202) /* Raster-8 image */ #define DFTAG_CI8 ((uint16)203) /* RLE compressed 8-bit image */ #define DFTAG_II8 ((uint16)204) /* IMCOMP compressed 8-bit image */ /* Raster Image set */ #define DFTAG_ID ((uint16)300) /* Image DimRec */ #define DFTAG_LUT ((uint16)301) /* Image Palette */ #define DFTAG_RI ((uint16)302) /* Raster Image */ #define DFTAG_CI ((uint16)303) /* Compressed Image */ #define DFTAG_NRI ((uint16)304) /* New-format Raster Image */ #define DFTAG_RIG ((uint16)306) /* Raster Image Group */ #define DFTAG_LD ((uint16)307) /* Palette DimRec */ #define DFTAG_MD ((uint16)308) /* Matte DimRec */ #define DFTAG_MA ((uint16)309) /* Matte Data */ #define DFTAG_CCN ((uint16)310) /* color correction */ #define DFTAG_CFM ((uint16)311) /* color format */ #define DFTAG_AR ((uint16)312) /* aspect ratio */ #define DFTAG_DRAW ((uint16)400) /* Draw these images in sequence */ #define DFTAG_RUN ((uint16)401) /* run this as a program/script */ #define DFTAG_XYP ((uint16)500) /* x-y position */ #define DFTAG_MTO ((uint16)501) /* machine-type override */ /* Tektronix */ #define DFTAG_T14 ((uint16)602) /* TEK 4014 data */ #define DFTAG_T105 ((uint16)603) /* TEK 4105 data */ /* Scientific Data set */ /* Objects of tag 721 are never actually written to the file. The tag is needed to make things easier mixing DFSD and SD style objects in the same file */ #define DFTAG_SDG ((uint16)700) /* Scientific Data Group */ #define DFTAG_SDD ((uint16)701) /* Scientific Data DimRec */ #define DFTAG_SD ((uint16)702) /* Scientific Data */ #define DFTAG_SDS ((uint16)703) /* Scales */ #define DFTAG_SDL ((uint16)704) /* Labels */ #define DFTAG_SDU ((uint16)705) /* Units */ #define DFTAG_SDF ((uint16)706) /* Formats */ #define DFTAG_SDM ((uint16)707) /* Max/Min */ #define DFTAG_SDC ((uint16)708) /* Coord sys */ #define DFTAG_SDT ((uint16)709) /* Transpose */ #define DFTAG_SDLNK ((uint16)710) /* Links related to the dataset */ #define DFTAG_NDG ((uint16)720) /* Numeric Data Group */ /* tag 721 reserved chouck 24-Nov-93 */ #define DFTAG_CAL ((uint16)731) /* Calibration information */ #define DFTAG_FV ((uint16)732) /* Fill Value information */ #define DFTAG_BREQ ((uint16)799) /* Beginning of required tags */ #define DFTAG_SDRAG ((uint16)781) /* List of ragged array line lengths */ #define DFTAG_EREQ ((uint16)780) /* Current end of the range */ /* VSets */ #define DFTAG_VG ((uint16)1965) /* Vgroup */ #define DFTAG_VH ((uint16)1962) /* Vdata Header */ #define DFTAG_VS ((uint16)1963) /* Vdata Storage */ /* compression schemes */ #define DFTAG_RLE ((uint16)11) /* run length encoding */ #define DFTAG_IMC ((uint16)12) /* IMCOMP compression alias */ #define DFTAG_IMCOMP ((uint16)12) /* IMCOMP compression */ #define DFTAG_JPEG ((uint16)13) /* JPEG compression (24-bit data) */ #define DFTAG_GREYJPEG ((uint16)14) /* JPEG compression (8-bit data) */ #define DFTAG_JPEG5 ((uint16)15) /* JPEG compression (24-bit data) */ #define DFTAG_GREYJPEG5 ((uint16)16) /* JPEG compression (8-bit data) */ /* Interlace schemes */ #define DFIL_PIXEL 0 /* Pixel Interlacing */ #define DFIL_LINE 1 /* Scan Line Interlacing */ #define DFIL_PLANE 2 /* Scan Plane Interlacing */ /* SPECIAL CODES */ #define SPECIAL_LINKED 1 /* Fixed-size Linked blocks */ #define SPECIAL_EXT 2 /* External */ #define SPECIAL_COMP 3 /* Compressed */ #define SPECIAL_VLINKED 4 /* Variable-length linked blocks */ #define SPECIAL_CHUNKED 5 /* chunked element */ #define SPECIAL_BUFFERED 6 /* Buffered element */ #define SPECIAL_COMPRAS 7 /* Compressed Raster element */ #endif /* H4_HTAGS_H */ hdf4-hdf4.3.1/hdf/src/linklist.c000066400000000000000000000323451503061704500163630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE linklist.c - Internal storage routines for handling generic linked lists REMARKS Generic linked lists are used in several places in the HDF library when a variable number of items are needed to be kept track of without the additional overhead of a threaded binary tree. The linked list can be either sorted or un-sorted, chosen at creation time. The interface allows objects (void *'s currently) to be stored and searched and iterated through in a fairly easy manner DESIGN The lists are stored in a singly-linked list of node, each containing a pointer to a managed object. The list may be sorted or unsorted, based on the comparison function. LOCAL ROUTINES HULIget_list_node - Gets a list node HULIrelease_list_node - Releases a list node EXPORTED ROUTINES HULcreate_list - Create a new linked list HULdestroy_list - Destroys a linked list HULadd_node - Adds an object to a linked-list HULsearch_node - Search for an object in a linked-list HULfirst_node - Get the first object in a linked-list HULnext_node - Get the next object in a linked-list HULremove_node - Removes an object from a linked-list HULshutdown - Close down the HUL interface */ #include "hdf_priv.h" #include "linklist_priv.h" /* Pointer to the list node free list */ static node_info_t *node_free_list = NULL; /* Private function prototypes */ static node_info_t *HULIget_list_node(void); static void HULIrelease_list_node(node_info_t *nod); /****************************************************************************** NAME HULcreate_list - Create a linked list DESCRIPTION Creates a linked list. The list may either be sorted or un-sorted, based on the comparison function. RETURNS Returns a pointer to the list if successful and NULL otherwise *******************************************************************************/ list_head_t * HULcreate_list(HULfind_func_t find_func /* IN: object comparison function */ ) { list_head_t *ret_value = NULL; /* ptr to the linked list "head" node */ HEclear(); /* Allocate the head information */ if ((ret_value = (list_head_t *)calloc(1, sizeof(list_head_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); /* Set the counter */ ret_value->count = 0; /* Store the creation flags, etc */ if (find_func == NULL) ret_value->flags = HUL_UNSORTED_LIST; else ret_value->flags = HUL_SORTED_LIST; ret_value->cmp_func = find_func; done: return ret_value; } /* end HULcreate_list() */ /****************************************************************************** NAME HULdestroy_list - Destroys a linked list DESCRIPTION Destroys a linked list created by HULcreate_list(). This function walks through the list and frees all the nodes, then frees the list head. Note: this function does not (currently) free the objects in the nodes, it just leaves 'em hanging. RETURNS Returns SUCCEED/FAIL. *******************************************************************************/ intn HULdestroy_list(list_head_t *lst /* IN: list to destroy */ ) { node_info_t *curr_node, /* current node while walking through list */ *next_node; /* next node in the list */ intn ret_value = SUCCEED; /* return value */ HEclear(); if (lst == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Chuck the list */ curr_node = lst->node_list; while (curr_node != NULL) { next_node = curr_node->next; HULIrelease_list_node(curr_node); curr_node = next_node; } /* end while */ /* Chuck the list-head */ free(lst); done: return ret_value; } /* end HULdestroy_list() */ /****************************************************************************** NAME HULadd_node - Adds an object to a linked-list DESCRIPTION Adds an object to the linked list. If the list is sorted, the comparison function is used to determine where to insert the node, otherwise it is inserted at the head of the list. RETURNS Returns SUCCEED/FAIL. *******************************************************************************/ intn HULadd_node(list_head_t *lst, /* IN: list to modify */ void *obj /* IN: object to add to the list */ ) { node_info_t *new_node; /* new node to insert into the list */ intn ret_value = SUCCEED; /* return value */ HEclear(); if (lst == NULL || obj == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Allocate & initialize the new node */ if ((new_node = HULIget_list_node()) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_node->obj_ptr = obj; if (((lst->flags) & HUL_SORTED_LIST) != 0) { /* insert node into a sorted list */ node_info_t *curr_node, /* current node while walking through list */ *prev_node; /* previous node in the list */ prev_node = NULL; curr_node = lst->node_list; while (curr_node != NULL) { if (lst->cmp_func(curr_node->obj_ptr, new_node->obj_ptr) >= 0) { /* 'curr_node' object is greater than or equal to 'new_node' */ new_node->next = curr_node; if (prev_node == NULL) lst->node_list = new_node; else prev_node->next = new_node; HGOTO_DONE(SUCCEED); /* Break out of the loop */ } /* end if */ prev_node = curr_node; curr_node = curr_node->next; } /* end while */ /* Walked off the list, so append to last node */ if (prev_node == NULL) lst->node_list = new_node; else prev_node->next = new_node; } /* end if */ else { /* insert node into an un-sorted list */ new_node->next = lst->node_list; lst->node_list = new_node; } /* end else */ done: return ret_value; } /* end HULadd_node() */ /****************************************************************************** NAME HULsearch_node - Search for an object in a linked-list DESCRIPTION Locate an object in a linked list using a key and comparison function. RETURNS Returns a pointer to the object found in the list, or NULL on failure. *******************************************************************************/ void * HULsearch_node(list_head_t *lst, /* IN: list to search */ HULsearch_func_t srch_func, /* IN: function to use to find node */ void *key /* IN: key of object to search for */ ) { node_info_t *curr_node; /* current node we are on */ void *ret_value = NULL; /* default return value */ HEclear(); if (lst == NULL || srch_func == NULL || key == NULL) HGOTO_ERROR(DFE_ARGS, NULL); curr_node = lst->node_list; while (curr_node != NULL) { if (srch_func(curr_node->obj_ptr, key) == 1) HGOTO_DONE(curr_node->obj_ptr); } /* end while */ done: return ret_value; } /* end HULsearch_node() */ /****************************************************************************** NAME HULfirst_node - Get the first object in a linked-list DESCRIPTION Returns the first object in a linked-list and prepares the list for iterating through. RETURNS Returns a pointer to the first object found in the list, or NULL on failure. *******************************************************************************/ void * HULfirst_node(list_head_t *lst /* IN: list to search */ ) { void *ret_value = NULL; /* default return value */ HEclear(); if (lst == NULL) HGOTO_ERROR(DFE_ARGS, NULL); if (lst->node_list != NULL) { lst->curr_node = lst->node_list; HGOTO_DONE(lst->node_list->obj_ptr); } /* end if */ done: return ret_value; } /* end HULfirst_node() */ /****************************************************************************** NAME HULnext_node - Get the next object in a linked-list DESCRIPTION Returns the next object in a linked-list by walking through the list RETURNS Returns a pointer to the next object found in the list, or NULL on failure. *******************************************************************************/ void * HULnext_node(list_head_t *lst /* IN: list to search */ ) { void *ret_value = NULL; /* default return value */ HEclear(); if (lst == NULL) HGOTO_ERROR(DFE_ARGS, NULL); if (lst->curr_node != NULL) { lst->curr_node = lst->curr_node->next; if (lst->curr_node != NULL) HGOTO_DONE(lst->curr_node->obj_ptr); } /* end if */ done: return ret_value; } /* end HULnext_node() */ /****************************************************************************** NAME HULremove_node - Removes an object from a linked-list DESCRIPTION Remove an object from a linked list. The key and comparison function are provided locate the object to delete. RETURNS Returns a pointer to the object deleted from the list, or NULL on failure. *******************************************************************************/ void * HULremove_node(list_head_t *lst, /* IN: list to modify */ HULsearch_func_t srch_func, /* IN: function to use to find node to remove */ void *key /* IN: object to add to the list */ ) { node_info_t *curr_node, /* current node we are on */ *prev_node; /* previous node we looked at */ void *ret_value = NULL; /* default return value */ HEclear(); if (lst == NULL || srch_func == NULL || key == NULL) HGOTO_ERROR(DFE_ARGS, NULL); prev_node = NULL; curr_node = lst->node_list; while (curr_node != NULL) { if (srch_func(curr_node->obj_ptr, key) == 1) { if (prev_node == NULL) lst->node_list = curr_node->next; else prev_node->next = curr_node->next; ret_value = curr_node->obj_ptr; HULIrelease_list_node(curr_node); break; } /* end if */ } /* end while */ done: return ret_value; } /* end HULremove_node() */ /****************************************************************************** NAME HULIget_list_node - Gets a list node DESCRIPTION Either gets an list node from the free list (if there is one available) or allocate a node. RETURNS Returns list node ptr if successful and NULL otherwise *******************************************************************************/ static node_info_t * HULIget_list_node(void) { node_info_t *ret_value = NULL; HEclear(); if (node_free_list != NULL) { ret_value = node_free_list; node_free_list = node_free_list->next; } /* end if */ else { if ((ret_value = (node_info_t *)malloc(sizeof(node_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ done: return ret_value; } /* end HULIget_list_node() */ /****************************************************************************** NAME HULIrelease_list_node - Releases a list node DESCRIPTION Puts a list node into the free list RETURNS No return value *******************************************************************************/ static void HULIrelease_list_node(node_info_t *nod) { /* Insert the node at the beginning of the free list */ nod->next = node_free_list; node_free_list = nod; } /* end HULIrelease_list_node() */ /*-------------------------------------------------------------------------- NAME HULshutdown PURPOSE Terminate various global items. USAGE intn HULshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the HUL routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HULshutdown(void) { node_info_t *curr; /* Release the free-list if it exists */ if (node_free_list != NULL) { while (node_free_list != NULL) { curr = node_free_list; node_free_list = node_free_list->next; free(curr); } } return SUCCEED; } /* end HULshutdown() */ hdf4-hdf4.3.1/hdf/src/linklist_priv.h000066400000000000000000000154071503061704500174300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: linklist_priv.h * Purpose: header file for linked list API *---------------------------------------------------------------------------*/ #ifndef H4_LINKLIST_PRIV_H #define H4_LINKLIST_PRIV_H #include "hdf_priv.h" /* Definitions for linked-list creation flags */ #define HUL_UNSORTED_LIST 0x0000 #define HUL_SORTED_LIST 0x0001 /* Type of the function to compare objects & keys */ typedef intn (*HULsearch_func_t)(const void *obj, const void *key); /* Type of the function to compare two objects */ typedef intn (*HULfind_func_t)(const void *obj1, const void *obj2); /* Linked list information structure used */ typedef struct node_info_struct_tag { void **obj_ptr; /* pointer associated with the linked list node */ struct node_info_struct_tag *next; /* link to list node */ } node_info_t; /* Linked list head structure */ typedef struct list_head_struct_tag { uintn count; /* # of nodes in the list */ uintn flags; /* list creation flags */ HULfind_func_t cmp_func; /* node comparison function */ node_info_t *node_list; /* pointer to a linked list of nodes */ node_info_t *curr_node; /* pointer to the current node when iterating */ } list_head_t; #ifdef __cplusplus extern "C" { #endif /****************************************************************************** NAME HULcreate_list - Create a linked list DESCRIPTION Creates a linked list. The list may either be sorted or un-sorted, based on the comparison function. RETURNS Returns a pointer to the list if successful and NULL otherwise *******************************************************************************/ list_head_t *HULcreate_list(HULfind_func_t find_func /* IN: object comparison function */ ); /****************************************************************************** NAME HULdestroy_list - Destroys a linked list DESCRIPTION Destroys a linked list created by HULcreate_list(). This function walks through the list and frees all the nodes, then frees the list head. Note: this function does not (currently) free the objects in the nodes, it just leaves 'em hanging. RETURNS Returns SUCCEED/FAIL. *******************************************************************************/ intn HULdestroy_list(list_head_t *lst /* IN: list to destroy */ ); /****************************************************************************** NAME HULadd_node - Adds an object to a linked-list DESCRIPTION Adds an object to the linked list. If the list is sorted, the comparison function is used to determine where to insert the node, otherwise it is inserted at the head of the list. RETURNS Returns SUCCEED/FAIL. *******************************************************************************/ intn HULadd_node(list_head_t *lst, /* IN: list to modify */ void *obj /* IN: object to add to the list */ ); /****************************************************************************** NAME HULsearch_node - Search for an object in a linked-list DESCRIPTION Locate an object in a linked list using a key and comparison function. RETURNS Returns a pointer to the object found in the list, or NULL on failure. *******************************************************************************/ void *HULsearch_node(list_head_t *lst, /* IN: list to search */ HULsearch_func_t srch_func, /* IN: function to use to find node */ void *key /* IN: key of object to search for */ ); /****************************************************************************** NAME HULfirst_node - Get the first object in a linked-list DESCRIPTION Returns the first object in a linked-list and prepares the list for iterating through. RETURNS Returns a pointer to the first object found in the list, or NULL on failure. *******************************************************************************/ void *HULfirst_node(list_head_t *lst /* IN: list to search */ ); /****************************************************************************** NAME HULnext_node - Get the next object in a linked-list DESCRIPTION Returns the next object in a linked-list by walking through the list RETURNS Returns a pointer to the next object found in the list, or NULL on failure. *******************************************************************************/ void *HULnext_node(list_head_t *lst /* IN: list to search */ ); /****************************************************************************** NAME HULremove_node - Removes an object from a linked-list DESCRIPTION Remove an object from a linked list. The key and comparison function are provided locate the object to delete. RETURNS Returns a pointer to the object deleted from the list, or NULL on failure. *******************************************************************************/ void *HULremove_node(list_head_t *lst, /* IN: list to modify */ HULsearch_func_t srch_func, /* IN: function to use to find node to remove */ void *key /* IN: object to add to the list */ ); /*-------------------------------------------------------------------------- NAME HULshutdown PURPOSE Terminate various global items. USAGE intn HULshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the HUL routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HULshutdown(void); #ifdef __cplusplus } #endif #endif /* H4_LINKLIST_PRIV_H */ hdf4-hdf4.3.1/hdf/src/mcache.c000066400000000000000000000701301503061704500157440ustar00rootroot00000000000000/*- * Copyright (c) 1990, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /***************************************************************************** * File: mcache.c * * This is a modified version of the original Berkeley code for * manipulating a memory pool. This version however is not * compatible with the original Berkeley version. * * NOTE: references to pages here is the same as chunks *****************************************************************************/ /* * NOTE: * Here pages are the same thing as chunks. * I just didn't bother to change all references from pages to chunks. * * -georgev */ /* #define STATISTICS */ #include "hdf_priv.h" #include "hqueue_priv.h" #include "mcache_priv.h" /* Private routines */ static BKT *mcache_bkt(MCACHE *mp); static BKT *mcache_look(MCACHE *mp, int32 pgno); static intn mcache_write(MCACHE *mp, BKT *bkt); /****************************************************************************** NAME mcache_get_npages - returns current number of pages for object DESCRIPTION Finds current number of pages in object. RETURNS Returns current number of pages in object. ******************************************************************************/ int32 mcache_get_npages(MCACHE *mp /* IN: MCACHE cookie */) { if (mp != NULL) return mp->npages; else return 0; } /* mcache_get_npages */ /****************************************************************************** NAME mcache_get_maxcache - returns current number of pages cached. DESCRIPTION Finds current number of pages cached for object. RETURNS Returns current number of pages cached. ******************************************************************************/ int32 mcache_get_maxcache(MCACHE *mp /* IN: MCACHE cookie */) { if (mp != NULL) return mp->maxcache; else return 0; } /* mcache_get_maxcache */ /****************************************************************************** NAME mcache_set_maxcache - sets current number of pages to cache. DESCRIPTION Sets current number of pages to cached for object to 'maxcache'. RETURNS Returns current number of pages cached. ******************************************************************************/ int32 mcache_set_maxcache(MCACHE *mp, /* IN: MCACHE cookie */ int32 maxcache /* IN: max pages to cache */) { if (mp != NULL) { /* currently allow the current cache to grow up */ if (mp->maxcache < maxcache) mp->maxcache = maxcache; else /* maxcache is less than current maxcache */ { /* if current number of cached pages is less than request then set to 'maxcache', else we don't currently handle decreasing the curcache to 'maxcache' */ if (maxcache > mp->curcache) mp->maxcache = maxcache; } return mp->maxcache; } else return 0; } /* mcache_set_maxcache */ /****************************************************************************** NAME mcache_get_pagsize - returns pagesize for object DESCRIPTION Finds current pagesize used for object. RETURNS returns pagesize for object. ******************************************************************************/ int32 mcache_get_pagesize(MCACHE *mp /* IN: MCACHE cookie */) { if (mp != NULL) return mp->pagesize; else return 0; } /* mcache_get_pagesize */ /****************************************************************************** NAME mcache_open -- Open a memory pool on the given object DESCRIPTION Initialize a memory pool for object using the given pagesize and size of object. Note for 'flags' input only '0' should be used for now. RETURNS A memory pool cookie if successful else NULL NOTE: The key string byte for sharing buffers is not implemented. ******************************************************************************/ MCACHE * mcache_open(void *key, /* IN: byte string used as handle to share buffers */ int32 object_id, /* IN: object handle */ int32 pagesize, /* IN: chunk size in bytes */ int32 maxcache, /* IN: maximum number of pages to cache at any time */ int32 npages, /* IN: number of chunks currently in object */ int32 flags /* IN: 0= object exists, 1= does not exist */) { struct _lhqh *lhead = NULL; /* head of an entry in list hash chain */ MCACHE *mp = NULL; /* MCACHE cookie */ L_ELEM *lp = NULL; intn ret_value = RET_SUCCESS; intn entry; /* index into hash table */ int32 pageno; (void)key; /* Set the pagesize and max # of pages to cache */ if (pagesize == 0) pagesize = (int32)DEF_PAGESIZE; if (maxcache == 0) maxcache = (int32)DEF_MAXCACHE; /* Allocate and initialize the MCACHE cookie. */ if ((mp = (MCACHE *)calloc(1, sizeof(MCACHE))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); H4_CIRCLEQ_INIT(&mp->lqh); for (entry = 0; entry < HASHSIZE; ++entry) { H4_CIRCLEQ_INIT(&mp->hqh[entry]); H4_CIRCLEQ_INIT(&mp->lhqh[entry]); } /* Initialize max # of pages to cache and number of pages in object */ mp->maxcache = (int32)maxcache; mp->npages = npages; /* Set pagesize and object handle and current object size */ mp->pagesize = pagesize; mp->object_id = object_id; mp->object_size = pagesize * npages; /* Initialize list hash chain */ for (pageno = 1; pageno <= mp->npages; ++pageno) { lhead = &mp->lhqh[HASHKEY(pageno)]; if ((lp = (L_ELEM *)malloc(sizeof(L_ELEM))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); lp->pgno = (int32)pageno; /* set page number */ /* check if object exists already The usefulness of this flag is yet to be determined. Currently '0' should be used */ if (flags == 0) lp->eflags = (uint8)ELEM_SYNC; /* valid page exists on disk */ else lp->eflags = (uint8)0; /* page does not exist on disk */ #ifdef STATISTICS lp->elemhit = 0; ++(mp->listalloc); #endif H4_CIRCLEQ_INSERT_HEAD(lhead, lp, hl); /* add to list */ } /* end for pageno */ /* initialize input/output filters and cookie to NULL */ mp->pgin = NULL; mp->pgout = NULL; mp->pgcookie = NULL; #ifdef STATISTICS mp->listhit = 0; mp->cachehit = 0; mp->cachemiss = 0; mp->pagealloc = 0; mp->pageflush = 0; mp->pageget = 0; mp->pagenew = 0; mp->pageput = 0; mp->pageread = 0; mp->pagewrite = 0; #endif done: if (ret_value == RET_ERROR) { /* error cleanup */ free(mp); /* free up list elements */ for (entry = 0; entry < HASHSIZE; ++entry) { while ((lp = mp->lhqh[entry].cqh_first) != (void *)&mp->lhqh[entry]) { H4_CIRCLEQ_REMOVE(&mp->lhqh[entry], mp->lhqh[entry].cqh_first, hl); free(lp); } } /* end for entry */ mp = NULL; /* return value */ } #ifdef STATISTICS fprintf(stderr, "mcache_open: mp->listalloc=%lu\n", mp->listalloc); #endif return mp; } /* mcache_open () */ /****************************************************************************** NAME mcache_filter -- Initialize input/output filters. DESCRIPTION Initialize input/output filters for user page processing. These are used to read/write the chunks. RETURNS Nothing ******************************************************************************/ void mcache_filter(MCACHE *mp, /* IN: MCACHE cookie */ int32 (*pgin)(void * /* cookie */, int32 /* pgno */, void * /* page */), /* IN: page in filter */ int32 (*pgout)(void * /* cookie */, int32 /* pgno */, const void * /*page */), /* IN: page out filter */ void *pgcookie /* IN: filter cookie */) { mp->pgin = pgin; mp->pgout = pgout; mp->pgcookie = pgcookie; } /* mcache_filter() */ /****************************************************************************** NAME mcache_get - get a specified page by page number. DESCRIPTION Get a page specified by 'pgno'. If the page is not cached then we need to create a new page. All returned pages are pinned. RETURNS The specified page if successful and NULL otherwise ******************************************************************************/ void * mcache_get(MCACHE *mp, /* IN: MCACHE cookie */ int32 pgno, /* IN: page number */ int32 flags /* IN: XXX not used? */) { struct _hqh *head = NULL; /* head of lru queue */ struct _lhqh *lhead = NULL; /* head of an entry in list hash chain */ BKT *bp = NULL; /* bucket element */ L_ELEM *lp = NULL; intn ret_value = RET_SUCCESS; intn list_hit; /* hit flag */ (void)flags; /* check inputs */ if (mp == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check for attempting to retrieve a non-existent page. * remember pages go from 1 ->npages */ if (pgno > mp->npages) HE_REPORT_GOTO("attempting to get a non-existent page from cache", FAIL); #ifdef STATISTICS ++mp->pageget; #endif /* Check for a page that is cached. */ if ((bp = mcache_look(mp, pgno)) != NULL) { /* * Move the page to the head of the hash chain and the tail * of the lru chain. */ head = &mp->hqh[HASHKEY(bp->pgno)]; H4_CIRCLEQ_REMOVE(head, bp, hq); H4_CIRCLEQ_INSERT_HEAD(head, bp, hq); H4_CIRCLEQ_REMOVE(&mp->lqh, bp, q); H4_CIRCLEQ_INSERT_TAIL(&mp->lqh, bp, q); /* Return a pinned page. */ bp->flags |= MCACHE_PINNED; /* update this page reference */ lhead = &mp->lhqh[HASHKEY(bp->pgno)]; for (lp = lhead->cqh_first; lp != (void *)lhead; lp = lp->hl.cqe_next) if (lp->pgno == bp->pgno) { /* hit */ #ifdef STATISTICS ++mp->listhit; ++lp->elemhit; #endif break; } /* end if lp->pgno */ /* we are done */ ret_value = RET_SUCCESS; goto done; } /* end if bp */ /* Page not cached so * Get a page from the cache to use or create one. */ if ((bp = mcache_bkt(mp)) == NULL) HE_REPORT_GOTO("unable to get a new page from bucket", FAIL); /* Check to see if this page has ever been referenced */ list_hit = 0; lhead = &mp->lhqh[HASHKEY(pgno)]; for (lp = lhead->cqh_first; lp != (void *)lhead; lp = lp->hl.cqe_next) if (lp->pgno == pgno && lp->eflags != 0) { /* hit */ #ifdef STATISTICS ++mp->listhit; ++lp->elemhit; #endif list_hit = 1; break; } /* end if lp->pgno */ /* If there is no hit then we allocate a new element * and insert into hash table */ if (!list_hit) { /* NO hit, new list element * no need to read this page from disk */ if ((lp = (L_ELEM *)malloc(sizeof(L_ELEM))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); lp->pgno = pgno; lp->eflags = 0; #ifdef STATISTICS ++mp->listalloc; lp->elemhit = 1; #endif H4_CIRCLEQ_INSERT_HEAD(lhead, lp, hl); /* add to list */ } /*end if !list_hit */ else { /* list hit, need to read page */ lp->eflags = ELEM_READ; /* Indicate we are reading this page */ #ifdef STATISTICS ++mp->pageread; #endif /* Run through the user's filter. we use this fcn to read in the data chunk/page. Not the original intention. */ if (mp->pgin != NULL) { /* Note page numbers in HMCPxxx are 0 based not 1 based */ if (((mp->pgin)(mp->pgcookie, pgno - 1, bp->page)) == FAIL) { HEreport("mcache_get: error reading chunk=%d\n", (intn)pgno - 1); lp = NULL; /* don't clobber the cache! */ ret_value = RET_ERROR; goto done; } } else { HEreport("mcache_get: reading fcn not set,chunk=%d\n", (intn)pgno - 1); lp = NULL; ret_value = RET_ERROR; goto done; } } /* end else list hit */ /* Set the page number, pin the page. */ bp->pgno = pgno; bp->flags = MCACHE_PINNED; /* * Add the page to the head of the hash chain and the tail * of the lru chain. */ head = &mp->hqh[HASHKEY(bp->pgno)]; H4_CIRCLEQ_INSERT_HEAD(head, bp, hq); H4_CIRCLEQ_INSERT_TAIL(&mp->lqh, bp, q); done: if (ret_value == RET_ERROR) { /* error cleanup */ free(lp); return NULL; } return bp->page; } /* mcache_get() */ /****************************************************************************** NAME mcache_put -- put a page back into the memory buffer pool DESCRIPTION Return a page to the buffer pool. Unpin it and mark it appropriately i.e. MCACHE_DIRTY RETURNS RET_SUCCESS if successful and RET_ERROR otherwise ******************************************************************************/ intn mcache_put(MCACHE *mp, /* IN: MCACHE cookie */ void *page, /* IN: page to put */ int32 flags /* IN: flags = 0, MCACHE_DIRTY */) { struct _lhqh *lhead = NULL; /* head of an entry in list hash chain */ L_ELEM *lp = NULL; BKT *bp = NULL; /* bucket element ptr */ intn ret_value = RET_SUCCESS; /* check inputs */ if (mp == NULL || page == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); #ifdef STATISTICS ++mp->pageput; #endif /* get pointer to bucket element */ bp = (BKT *)((char *)page - sizeof(BKT)); /* Unpin the page and mark it appropriately */ bp->flags &= ~MCACHE_PINNED; bp->flags |= flags & MCACHE_DIRTY; if (bp->flags & MCACHE_DIRTY) { /* update this page reference */ lhead = &mp->lhqh[HASHKEY(bp->pgno)]; for (lp = lhead->cqh_first; lp != (void *)lhead; lp = lp->hl.cqe_next) if (lp->pgno == bp->pgno) { /* hit */ #ifdef STATISTICS ++mp->listhit; ++lp->elemhit; #endif lp->eflags = ELEM_WRITTEN; break; } /* end if lp->pgno */ } done: return ret_value; } /* mcache_put () */ /****************************************************************************** NAME mcache_close - close the memory buffer pool DESCRIPTION Close the buffer pool. Frees the buffer pool. Does not sync the buffer pool. RETURNS RET_SUCCESS if successful and RET_ERROR otherwise ******************************************************************************/ intn mcache_close(MCACHE *mp /* IN: MCACHE cookie */) { L_ELEM *lp = NULL; BKT *bp = NULL; /* bucket element */ intn ret_value = RET_SUCCESS; intn entry; /* index into hash table */ /* check inputs */ if (mp == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Free up any space allocated to the lru pages. */ while ((bp = mp->lqh.cqh_first) != (void *)&mp->lqh) { H4_CIRCLEQ_REMOVE(&mp->lqh, mp->lqh.cqh_first, q); free(bp); } /* free up list elements */ for (entry = 0; entry < HASHSIZE; ++entry) { while ((lp = mp->lhqh[entry].cqh_first) != (void *)&mp->lhqh[entry]) { H4_CIRCLEQ_REMOVE(&mp->lhqh[entry], mp->lhqh[entry].cqh_first, hl); free(lp); } } /* end for entry */ done: if (ret_value == RET_ERROR) { /* error cleanup */ return ret_value; } /* Free the MCACHE cookie. */ free(mp); return ret_value; } /* mcache_close() */ /****************************************************************************** NAME mcache_sync -- sync the memory buffer pool DESCRIPTION Sync the pool to disk. Does NOT Free the buffer pool. RETURNS RET_SUCCESS if successful and RET_ERROR otherwise ******************************************************************************/ intn mcache_sync(MCACHE *mp /* IN: MCACHE cookie */) { BKT *bp = NULL; /* bucket element */ intn ret_value = RET_SUCCESS; /* check inputs */ if (mp == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Walk the lru chain, flushing any dirty pages to disk. */ for (bp = mp->lqh.cqh_first; bp != (void *)&mp->lqh; bp = bp->q.cqe_next) { if (bp->flags & MCACHE_DIRTY && mcache_write(mp, bp) == RET_ERROR) HE_REPORT_GOTO("unable to flush a dirty page", FAIL); } /* end for bp */ done: if (ret_value == RET_ERROR) { /* error cleanup */ return ret_value; } return ret_value; } /* mcache_sync() */ /****************************************************************************** NAME mcache_bkt - Get a page from the cache (or create one). DESCRIPTION Private routine. Get a page from the cache (or create one). RETURNS A page if successful and NULL otherwise. NOTE: Note that the size of the page allocated is equal to sizeof(bucket element) + pagesize. We only return the pagesize fragment to the user. The only caveat here is that a user could inadvertently clobber the bucket element information by writing out of the page size bounds. ******************************************************************************/ static BKT * mcache_bkt(MCACHE *mp /* IN: MCACHE cookie */) { struct _hqh *head = NULL; /* head of hash chain */ BKT *bp = NULL; /* bucket element */ intn ret_value = RET_SUCCESS; /* check inputs */ if (mp == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If under the max cached, always create a new page. */ if ((int32)mp->curcache < (int32)mp->maxcache) goto new; /* * If the cache is max'd out, walk the lru list for a buffer we * can flush. If we find one, write it (if necessary) and take it * off any lists. If we don't find anything we grow the cache anyway. * The cache never shrinks. */ for (bp = mp->lqh.cqh_first; bp != (void *)&mp->lqh; bp = bp->q.cqe_next) if (!(bp->flags & MCACHE_PINNED)) { /* Flush if dirty. */ if (bp->flags & MCACHE_DIRTY && mcache_write(mp, bp) == RET_ERROR) HE_REPORT_GOTO("unable to flush a dirty page", FAIL); #ifdef STATISTICS ++mp->pageflush; #endif /* Remove from the hash and lru queues. */ head = &mp->hqh[HASHKEY(bp->pgno)]; H4_CIRCLEQ_REMOVE(head, bp, hq); H4_CIRCLEQ_REMOVE(&mp->lqh, bp, q); /* done */ ret_value = RET_SUCCESS; goto done; } /* end if bp->flags */ /* create a new page */ new : if ((bp = (BKT *)malloc(sizeof(BKT) + (uintn)mp->pagesize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); #ifdef STATISTICS ++mp->pagealloc; #endif /* set page ptr past bucket element section */ bp->page = (char *)bp + sizeof(BKT); ++mp->curcache; /* increase number of cached pages */ done: if (ret_value == RET_ERROR) { /* error cleanup */ free(bp); return NULL; } return bp; /* return only the pagesize fragment */ } /* mcache_bkt() */ /****************************************************************************** NAME mcache_write - write a page to disk given it's bucket handle. DESCRIPTION Private routine. Write a page to disk given it's bucket handle. RETURNS RET_SUCCESS if successful and RET_ERROR otherwise ******************************************************************************/ static int mcache_write(MCACHE *mp, /* IN: MCACHE cookie */ BKT *bp /* IN: bucket element */) { struct _lhqh *lhead = NULL; /* head of an entry in list hash chain */ L_ELEM *lp = NULL; intn ret_value = RET_SUCCESS; /* check inputs */ if (mp == NULL || bp == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); #ifdef STATISTICS ++mp->pagewrite; #endif /* update this page reference */ lhead = &mp->lhqh[HASHKEY(bp->pgno)]; for (lp = lhead->cqh_first; lp != (void *)lhead; lp = lp->hl.cqe_next) if (lp->pgno == bp->pgno) { /* hit */ #ifdef STATISTICS ++mp->listhit; ++lp->elemhit; #endif lp->eflags = ELEM_SYNC; break; } /* Run page through the user's filter. we use this to write the data chunk/page out. This deviates from the original purpose of the filter. */ if (mp->pgout) { /* Note page numbers in HMCPxxx are 0 based not 1 based */ if (((mp->pgout)(mp->pgcookie, bp->pgno - 1, bp->page)) == FAIL) { HEreport("mcache_write: error writing chunk=%d\n", (intn)bp->pgno); ret_value = RET_ERROR; goto done; } } else { HEreport("mcache_write: writing fcn not set,chunk=%d\n", (intn)bp->pgno); ret_value = RET_ERROR; goto done; } /* mark page as clean */ bp->flags &= ~MCACHE_DIRTY; done: if (ret_value == RET_ERROR) { /* error cleanup */ return ret_value; } return ret_value; } /* mcache_write() */ /****************************************************************************** NAME mcache_look - lookup a page in the cache. DESCRIPTION Private routine. Lookup a page in the cache and return pointer to it. RETURNS Page if successful and NULL otherwise. ******************************************************************************/ static BKT * mcache_look(MCACHE *mp, /* IN: MCACHE cookie */ int32 pgno /* IN: page to look up in cache */) { struct _hqh *head = NULL; /* head of hash chain */ BKT *bp = NULL; /* bucket element */ /* check inputs */ if (mp == NULL) { HERROR(DFE_ARGS); goto done; } /* Check for attempt to look up a non-existent page. */ if (pgno > mp->npages) { HEreport("attempting to get a nonexistent page from cache"); goto done; } /* search through hash chain */ head = &mp->hqh[HASHKEY(pgno)]; for (bp = head->cqh_first; bp != (void *)head; bp = bp->hq.cqe_next) if (bp->pgno == pgno) { /* hit....found page in cache */ #ifdef STATISTICS ++mp->cachehit; #endif /* done */ goto done; } /* Well didn't find page in cache so mark return * value as NULL */ bp = NULL; #ifdef STATISTICS ++mp->cachemiss; #endif done: return bp; } /* mcache_look() */ #ifdef STATISTICS #ifdef H4_HAVE_GETRUSAGE #include /****************************************************************************** NAME myrusage - print some process usage statistics DESCRIPTION prints some process usage statistics to STDERR RETURNS Nothing ******************************************************************************/ void myrusage() { struct rusage r; double sys, user, idle; double per; double timespent(); getrusage(RUSAGE_SELF, &r); fprintf(stderr, "USAGE: shmem=%ld, unshdata=%ld, unshstack=%ld\n", r.ru_ixrss, r.ru_idrss, r.ru_isrss); fprintf(stderr, " pager=%ld, pagef=%ld, nswap=%ld\n", r.ru_minflt, r.ru_majflt, r.ru_nswap); fprintf(stderr, " block_in=%ld, block_out=%ld\n", r.ru_inblock, r.ru_oublock); fprintf(stderr, " mesgs=%ld, mesgr=%ld, nsignals=%ld\n", r.ru_msgsnd, r.ru_msgrcv, r.ru_nsignals); } #endif /* H4_HAVE_GETRUSAGE */ /****************************************************************************** NAME mcache_stat - print out cache statistics DESCRIPTION Print out cache statistics to STDERR. RETURNS Nothing ******************************************************************************/ void mcache_stat(MCACHE *mp /* IN: MCACHE cookie */) { struct _lhqh *lhead = NULL; /* head of an entry in list hash chain */ BKT *bp = NULL; /* bucket element */ L_ELEM *lp = NULL; char *sep = NULL; intn entry; /* index into hash table */ intn cnt; intn hitcnt; #ifdef H4_HAVE_GETRUSAGE myrusage(); #endif /* check inputs */ if (mp != NULL) { fprintf(stderr, "%u pages in the object\n", mp->npages); fprintf(stderr, "page size %u, caching %u pages of %u page max cache\n", mp->pagesize, mp->curcache, mp->maxcache); fprintf(stderr, "%u page puts, %u page gets, %u page new\n", mp->pageput, mp->pageget, mp->pagenew); fprintf(stderr, "%u page allocs, %u page flushes\n", mp->pagealloc, mp->pageflush); if (mp->cachehit + mp->cachemiss) fprintf(stderr, "%.0f%% cache hit rate (%u hits, %u misses)\n", ((double)mp->cachehit / (mp->cachehit + mp->cachemiss)) * 100, mp->cachehit, mp->cachemiss); fprintf(stderr, "%u page reads, %u page writes\n", mp->pageread, mp->pagewrite); fprintf(stderr, "%u listhits, %u listallocs\n", mp->listhit, mp->listalloc); fprintf(stderr, "sizeof(MCACHE)=%zu, sizeof(BKT)=%zu, sizeof(L_ELEM)=%zu\n", sizeof(MCACHE), sizeof(BKT), sizeof(L_ELEM)); fprintf(stderr, "memory pool used %u bytes\n", (int32)(sizeof(MCACHE) + (sizeof(BKT) + mp->pagesize) * mp->curcache + (sizeof(L_ELEM) * mp->npages))); sep = ""; cnt = 0; for (bp = mp->lqh.cqh_first; bp != (void *)&mp->lqh; bp = bp->q.cqe_next) { fprintf(stderr, "%s%u", sep, bp->pgno); if (bp->flags & MCACHE_DIRTY) fprintf(stderr, "d"); if (bp->flags & MCACHE_PINNED) fprintf(stderr, "P"); if (++cnt == 10) { sep = "\n"; cnt = 0; } else sep = ", "; } fprintf(stderr, "\n"); fprintf(stderr, "Element hits\n"); sep = ""; cnt = 0; hitcnt = 0; for (entry = 0; entry < HASHSIZE; ++entry) { lhead = &mp->lhqh[entry]; for (lp = lhead->cqh_first; lp != (void *)lhead; lp = lp->hl.cqe_next) { cnt++; fprintf(stderr, "%s%u(%u)", sep, lp->pgno, lp->elemhit); hitcnt += lp->elemhit; if (cnt >= 8) { sep = "\n"; cnt = 0; } else sep = ", "; } if (cnt >= 8) { fprintf(stderr, "\n"); cnt = 0; } } fprintf(stderr, "\n"); fprintf(stderr, "Total num of elemhits=%d\n", hitcnt); } /* end if mp */ } #endif /* STATISTICS */ hdf4-hdf4.3.1/hdf/src/mcache_priv.h000066400000000000000000000205661503061704500170210ustar00rootroot00000000000000/*- * Copyright (c) 1991, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /***************************************************************************** * File: mcache_priv.h * * This is a modified version of the original Berkeley code for * manipulating a memory pool. This version however is not * compatible with the original Berkeley version. * * This version uses HDF number types. *****************************************************************************/ /* * NOTE: * Here pagesize is the same thing as chunk size and pages refer to chunks. * I just didn't bother to change all references from pages to chunks. * * -georgev */ #ifndef H4_MCACHE_PRIV_H #define H4_MCACHE_PRIV_H #include "hdf_priv.h" #include "hqueue_priv.h" /* Circular queue functions(Macros) */ /* Set return/succeed values */ #ifdef SUCCEED #define RET_SUCCESS SUCCEED #define RET_ERROR FAIL #else #define RET_SUCCESS 0 #define RET_ERROR -1 #endif /* * The memory pool scheme is a simple one. Each in-memory page is referenced * by a bucket which is threaded in up to two (three?) ways. All active pages * are threaded on a hash chain (hashed by page number) and an lru chain. * (Inactive pages are threaded on a free chain?). Each reference to a memory * pool is handed an opaque MPOOL cookie which stores all of this information. */ /* Current Hash table size. Page numbers start with 1 * (i.e 0 will denote invalid page number) */ #define HASHSIZE 128 #define HASHKEY(pgno) ((pgno - 1) % HASHSIZE) /* Default pagesize and max # of pages to cache */ #define DEF_PAGESIZE 8192 #define DEF_MAXCACHE 1 #define MAX_PAGE_NUMBER 0xffffffff /* >= # of pages in a object */ /* The BKT structures are the elements of the queues. */ typedef struct _bkt { H4_CIRCLEQ_ENTRY(_bkt) hq; /* hash queue */ H4_CIRCLEQ_ENTRY(_bkt) q; /* lru queue */ void *page; /* page */ int32 pgno; /* page number */ #define MCACHE_DIRTY 0x01 /* page needs to be written */ #define MCACHE_PINNED 0x02 /* page is pinned into memory */ uint8 flags; /* flags */ } BKT; /* The element structure for every page referenced(read/written) in object */ typedef struct _lelem { H4_CIRCLEQ_ENTRY(_lelem) hl; /* hash list */ int32 pgno; /* page number */ #ifdef STATISTICS int32 elemhit; /* # of hits on page */ #endif #define ELEM_READ 0x01 #define ELEM_WRITTEN 0x02 #define ELEM_SYNC 0x03 uint8 eflags; /* 1= read, 2=written, 3=synced */ } L_ELEM; #define MCACHE_EXTEND \ 0x10 /* increase number of pages \ i.e extend object */ /* Memory pool cache */ typedef struct MCACHE { H4_CIRCLEQ_HEAD(_lqh, _bkt) lqh; /* lru queue head */ H4_CIRCLEQ_HEAD(_hqh, _bkt) hqh[HASHSIZE]; /* hash queue array */ H4_CIRCLEQ_HEAD(_lhqh, _lelem) lhqh[HASHSIZE]; /* hash of all elements */ int32 curcache; /* current num of cached pages */ int32 maxcache; /* max number of cached pages */ int32 npages; /* number of pages in the object */ int32 pagesize; /* cache page size */ int32 object_id; /* access ID of object this cache is for */ int32 object_size; /* size of object to cache must be multiple of pagesize for now */ int32 (*pgin)(void *cookie, int32 pgno, void *page); /* page in conversion routine */ int32 (*pgout)(void *cookie, int32 pgno, const void *page); /* page out conversion routine*/ void *pgcookie; /* cookie for page in/out routines */ #ifdef STATISTICS int32 listhit; /* # of list hits */ int32 listalloc; /* # of list elems allocated */ int32 cachehit; /* # of cache hits */ int32 cachemiss; /* # of cache misses */ int32 pagealloc; /* # of pages allocated */ int32 pageflush; /* # of pages flushed */ int32 pageget; /* # of pages requested from pool */ int32 pagenew; /* # of new pages */ int32 pageput; /* # of pages put back into pool */ int32 pageread; /* # of pages read from object */ int32 pagewrite; /* # of pages written to object */ #endif /* STATISTICS */ } MCACHE; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI MCACHE *mcache_open(void *key, /* IN:byte string used as handle to share buffers */ int32 object_id, /* IN: object handle */ int32 pagesize, /* IN: chunk size in bytes */ int32 maxcache, /* IN: maximum number of pages to cache at any time */ int32 npages, /* IN: number of chunks currently in object */ int32 flags /* IN: 0= object exists, 1= does not exist */); HDFLIBAPI void mcache_filter(MCACHE *mp, /* IN: MCACHE cookie */ int32 (*pgin)(void *cookie, int32 pgno, void *page), /* IN: page in filter */ int32 (*pgout)(void *cookie, int32 pgno, const void *page), /* IN: page out filter */ void *pgcookie /* IN: filter cookie */); HDFLIBAPI void *mcache_new(MCACHE *mp, /* IN: MCACHE cookie */ int32 *pgnoaddr, /* IN/OUT: address of newly create page */ int32 flags /* IN:MCACHE_EXTEND or 0 */); HDFLIBAPI void *mcache_get(MCACHE *mp, /* IN: MCACHE cookie */ int32 pgno, /* IN: page number */ int32 flags /* IN: XXX not used? */); HDFLIBAPI intn mcache_put(MCACHE *mp, /* IN: MCACHE cookie */ void *page, /* IN: page to put */ int32 flags /* IN: flags = 0, MCACHE_DIRTY */); HDFLIBAPI intn mcache_sync(MCACHE *mp /* IN: MCACHE cookie */); HDFLIBAPI intn mcache_close(MCACHE *mp /* IN: MCACHE cookie */); HDFLIBAPI int32 mcache_get_pagesize(MCACHE *mp /* IN: MCACHE cookie */); HDFLIBAPI int32 mcache_get_maxcache(MCACHE *mp /* IN: MCACHE cookie */); HDFLIBAPI int32 mcache_set_maxcache(MCACHE *mp, /* IN: MCACHE cookie */ int32 maxcache /* IN: max pages to cache */); HDFLIBAPI int32 mcache_get_npages(MCACHE *mp /* IN: MCACHE cookie */); #ifdef STATISTICS HDFLIBAPI void mcache_stat(MCACHE *mp /* IN: MCACHE cookie */); #endif /* STATISTICS */ #ifdef __cplusplus } #endif #endif /* H4_MCACHE_PRIV_H */ hdf4-hdf4.3.1/hdf/src/mfan.c000066400000000000000000001736551503061704500154650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mfan.c * Purpose: Multi-file read and write annotations: labels and descriptions * of data items and file * Invokes: * Comments: * Currently the id returned by ANstart() is the same as the * one returned by Hopen(). * * Currently as least 4 TBBT trees are created to handle * annotations(1 for file_ann, 1 for file_desc, 1 for data_ann * and 1 for data_desc) for each file which is not pretty but it * does make search/find of annotations much easier. * * NOTE2: Note that any mention of file ID's except in ANStart() * should now refer to annotation interface ID. * * Private Routines: * ----------------- * NOTES: TYPE here refers to file/data label/description types * They are AN_FILE_LABEL, AN_FILE_DESC, AN_DATA_LABEL, AN_DATA_DESC * The tag/ref refers to data tag/ref * * ANIinit - Initialize the annotation interface * ANIdestroy - Un-initialize the annotation interface * * ANIanncmp - compare two annotation handles(ann_id's) * (used in annotation TBBTtree) * ANIaddentry: - add entry to corresponding annotation TBBTtree * ANIcreate_ann_tree - create annotation TBBTtree * ANIfind: - return annotation handle(ann_id) if found of given TYPE/ref * ANInumann: - return number of annotations that match TYPE/tag/ref * ANIannlist: - return list of handles(ann_id's) that match TYPE/tag/ref * ANIannlen: - get length of annotation given handle(ann_id) * ANIreadann: - read annotation given handle(ann_id) * ANIwriteann: - write annotation given handle(ann_id) * ANIcreate - create a new file/label annotation * and return a handle(ann_id) * * Public API routines: * -------------------- * ANstart - open file for annotation handling, returns an_id * ANfileinfo - get number of file/data annotations in file. Indices returned * are used in ANselect() calls. * ANend - end access to annotation handling on file * ANcreate - create a new data annotation and return a handle(ann_id) * ANcreatef - create a new file annotation and return a handle(ann_id) * ANselect - returns an annotation handle(ann_id) from index for * a particular annotation TYPE. This handle is then used for * calls like ANwriteann(), ANreadann(), ANannlen(),..etc * ANnumann: - return number of annotations that match TYPE/tag/ref * ANannlist: - return list of handles(ann_id's) that match TYPE/tag/ref * ANannlen: - get length of annotation given handle(ann_id) * ANreadann: - read annotation given handle(ann_id) * ANwriteann: - write annotation given handle(ann_id) * ANendaccess - end access to annotation using handle(ann_id) * * Public Miscellaneous API Routines * --------------------------------- * ANget_tagref - get tag/ref pair to annotation type and index * ANid2tagref - get tag/ref pair to annotation ID * ANtagref2id - get annotation id given tag/ref * ANatype2tag - annotation type to corresponding annotation TAG * ANtag2atype - annotation TAG to corresponding annotation type * *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "mfan_priv.h" #include "mfan.h" #include "atom_priv.h" #include "hfile_priv.h" /* needed for filerec_t */ /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* Function Prototypes for fcns used by TBBT. Can not be static. */ extern void ANfreedata(void *data); extern void ANfreekey(void *key); extern void dumpentryKey(void *key, void *data); extern intn ANIanncmp(void *i, void *j, intn value); /* private initialization routine */ static intn ANIstart(void); /* private destroy routine */ static intn ANIdestroy(void); /*----------------------------------------------------------------------------- * Internal Routines *---------------------------------------------------------------------------*/ /* ------------------------ Routines for TBBT ------------------------------*/ /* free data - used by tbbt routines */ void ANfreedata(void *data) { free(data); } /* ANfreekey() */ /* free key - used by tbbt routines */ void ANfreekey(void *key) { free(key); } /* ANfreekey() */ #ifdef AN_DEBUG /* The following routine is used for debugging purposes to dump * key/data pairs from the TBBT trees * eg. tbbt_dump(tree, dumpentryKey, 0)*/ void dumpentryKey(void *key, void *data) { ANentry *node = NULL; printf("key = %4.4d, data = ", *(int *)key); if (data != NULL) { node = (ANentry *)data; printf("ann_id=%ld, annref=%d, elmtag=%d, elmref=%d\n", (long)node->ann_id, node->annref, node->elmtag, node->elmref); } else printf("(NULL)\n"); } /* dumpentryKey() */ #endif /* AN_DEBUG */ /* ------------------------ Private Internal Routines ---------------------*/ /* ------------------------------- ANIanncmp -------------------------------- NAME ANIanncmp -- compare two annotation keys or id's DESCRIPTION Compares two annotation keys. Used by tree for annotations Also used to compare annotation id's since also 32 bit value. RETURNS Returns 0 if i=j, -1 if i > j and 1 if i < j AUTHOR GeorgeV. --------------------------------------------------------------------------- */ intn ANIanncmp(void *i, /* IN: annotation key(tag,ref) */ void *j, /* IN: annotation key(tag,ref) */ intn value /* not used */) { (void)value; if (*(int32 *)i == *(int32 *)j) return 0; if (*(int32 *)i > *(int32 *)j) return -1; else return 1; } /* ANIanncmp */ /* ------------------------------- ANIdestroy -------------------------------- NAME ANIdestroy -- Un-Initialize Annotation Interface DESCRIPTION Destroys annotation Atom group ANIDGROUP. This routine is usually registered with the atexit() rouinte. RETURNS SUCCEED or FAIL AUTHOR GeorgeV. --------------------------------------------------------------------------- */ intn ANIdestroy(void) { int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Destroy the atom groups for annotations */ HAdestroy_group(ANIDGROUP); return ret_value; } /* ANIdestroy () */ /*-------------------------------------------------------------------------- NAME ANIstart - AN-level initialization routine. DESCRIPTION Register the shut-down routine (ANPdestroy) for call with atexit() RETURNS Returns SUCCEED/FAIL AUTHOR GeorgeV. --------------------------------------------------------------------------*/ static intn ANIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine ANIdestroy() */ if (HPregister_term_func(&ANIdestroy) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end ANIstart() */ /* ------------------------------- ANIinit -------------------------------- NAME ANIinit -- Initialize Annotation Interface DESCRIPTION Initializes the annotation interface i.e. installs library cleanup routine and creates the Atom group ANIDGROUP for annotations if necessary. RETURNS SUCCEED or FAIL AUTHOR GeorgeV. --------------------------------------------------------------------------- */ static int32 ANIinit(void) { int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) { if (ANIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Initialize the atom groups for annotations */ HAinit_group(ANIDGROUP, ANATOM_HASH_SIZE); } done: return ret_value; } /* ANIinit() */ /*-------------------------------------------------------------------------- NAME ANIaddentry -- add entry to corresponding annotation TBBT tree and atom group. DESCRIPTION Adds annotation to correct tree and register with atom group RETURNS annotation ID if successful and FAIL (-1) otherwise AUTHOR GeorgeV. -------------------------------------------------------------------------*/ static int32 ANIaddentry(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: annotation type AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 ann_ref, /* IN: ref of annotation */ uint16 elmtag, /* IN: tag of item of which this is annotation */ uint16 elmref, /* IN: ref of item of which this is annotation */ intn new_ann /* IN: new annotation flag */) { filerec_t *file_rec = NULL; /* file record pointer */ uint16 ann_tag = DFTAG_NULL; int32 *ann_key = NULL; ANentry *ann_entry = NULL; ANnode *ann_node = NULL; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check for empty annotation tree of 'type'? */ if (file_rec->an_num[type] == -1) { if ((file_rec->an_tree[type] = (TBBT_TREE *)tbbtdmake(ANIanncmp, sizeof(int32), 0)) == NULL) { HE_REPORT_GOTO("failed to create annotation tree", FAIL); } file_rec->an_num[type] = 0; } /* Which type of annotation file/data label or desc? */ switch ((ann_type)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* allocate space for key */ if ((ann_key = (int32 *)malloc(sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Create 32bit key from type/ref * ---------------------------- * | type(16bits)| ref(16bits) | * -----------------------------*/ *ann_key = AN_CREATE_KEY(type, ann_ref); /* Initialize annotation node for insertion in annotation atom group*/ if ((ann_node = malloc(sizeof(ANnode))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ann_node->file_id = an_id; ann_node->ann_key = *ann_key; ann_node->new_ann = new_ann; /* Initialize annotation entry for insertion into corresponding TBBT */ if ((ann_entry = malloc(sizeof(ANentry))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* register annotation with atom group ANIDGROUP */ ann_entry->annref = ann_ref; ann_entry->ann_id = HAregister_atom(ANIDGROUP, ann_node); if (FAIL == ann_entry->ann_id) HE_REPORT_GOTO("failed to insert annotation into ANIDGROUP atom group", FAIL); if (type == AN_DATA_LABEL || type == AN_DATA_DESC) { ann_entry->elmtag = (uint16)elmtag; ann_entry->elmref = (uint16)elmref; } else { ann_entry->elmtag = ann_tag; ann_entry->elmref = ann_ref; } /* Add annotation entry to 'type' tree */ if (tbbtdins(file_rec->an_tree[type], ann_entry, ann_key) == NULL) HE_REPORT_GOTO("failed to insert annotation into 'type' tree", FAIL); /* increment number of annotatiosn of 'type' */ file_rec->an_num[type] += 1; /* return annotation id */ ret_value = ann_entry->ann_id; done: if (ret_value == FAIL) { /* Error condition cleanup */ free(ann_key); free(ann_entry); free(ann_node); } return ret_value; } /* ANIaddentry */ /*-------------------------------------------------------------------------- NAME ANIcreate_ann_tree -- create an annotation tree of 'type' for given file DESCRIPTION Creates either a label or description annotation TBBT tree. RETURNS Number of annotations of 'type' in file if successful and FAIL (-1) otherwise AUTHOR GeorgeV. -------------------------------------------------------------------------*/ static intn ANIcreate_ann_tree(int32 an_id,/* IN: annotation interface id */ ann_type type /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/) { filerec_t *file_rec = NULL; /* file record pointer */ uint8 datadi[4]; int32 more_anns; int32 aid = FAIL; int32 nanns; int32 i; int32 *ann_key = NULL; uint16 ann_tag; uint16 ann_ref; uint8 *dptr = NULL; ANentry *ann_entry = NULL; ANnode *ann_node = NULL; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check for empty annotation tree of 'type'? */ if (file_rec->an_num[type] == -1) { if ((file_rec->an_tree[type] = (TBBT_TREE *)tbbtdmake(ANIanncmp, sizeof(int32), 0)) == NULL) { HE_REPORT_GOTO("failed to create annotation tree", FAIL); } file_rec->an_num[type] = 0; /* initialize to zero entries */ } else { ret_value = file_rec->an_num[type]; /* tree already created */ goto done; /* we are done */ } /* Which type of annotation data/file label or desc? */ switch ((ann_type)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* Get number of annotations of 'type' in file */ if ((nanns = Hnumber(an_id, ann_tag)) == 0) { /* ZERO annotations of 'type' in file */ file_rec->an_num[type] = 0; ret_value = file_rec->an_num[type]; goto done; /* we are done */ } /* start read on 'type' annotations in file * note that so far an_id == file_id */ if ((aid = Hstartread(an_id, ann_tag, DFREF_WILDCARD)) == FAIL) { HE_REPORT_GOTO("Hstartread failed to read annotation", FAIL); } else more_anns = SUCCEED; /* Process annotations of 'type' in file */ for (i = 0; (i < nanns) && (more_anns != FAIL); i++) { /* see if annotation is there */ if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, &ann_ref, (int32 *)NULL, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { /* record what we found so far and return */ file_rec->an_num[type] = nanns; ret_value = FAIL; goto done; /* we are done */ } /* if data annotation, read data annotation tag/ref */ if (type != AN_FILE_LABEL && type != AN_FILE_DESC) { if ((int32)FAIL == Hread(aid, (int32)4, datadi)) { /* record what we found so far and return */ file_rec->an_num[type] = nanns; ret_value = FAIL; goto done; /* we are done */ } } /* allocate space for key */ if ((ann_key = (int32 *)malloc(sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Create key from tag/ref pair * ---------------------------- * | tag(16bits) | ref(16bits) | * -----------------------------*/ *ann_key = AN_CREATE_KEY(type, ann_ref); /* Initialize annotation node for insertion in annotation atom group*/ if ((ann_node = malloc(sizeof(ANnode))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ann_node->file_id = an_id; ann_node->ann_key = *ann_key; ann_node->new_ann = 0; /* not a newly created annotation */ /* Initialize annotation entry for insertion into corresponding TBBT */ /* and decode data tag/ref */ if ((ann_entry = malloc(sizeof(ANentry))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ann_entry->annref = ann_ref; /* ann_entry->ann_id = *ann_id = num_anns++; */ ann_entry->ann_id = HAregister_atom(ANIDGROUP, ann_node); if (FAIL == ann_entry->ann_id) HE_REPORT_GOTO("failed to insert annotation into ann_id Group", FAIL); /* Check if data annotation to decode data tag/ref */ if (type != AN_FILE_LABEL && type != AN_FILE_DESC) { dptr = (uint8 *)&(datadi[0]); UINT16DECODE(dptr, ann_entry->elmtag); UINT16DECODE(dptr, ann_entry->elmref); } else { ann_entry->elmtag = ann_tag; ann_entry->elmref = ann_ref; } /* Add annotation entry to 'type' tree */ if (tbbtdins(file_rec->an_tree[type], ann_entry, ann_key) == NULL) HE_REPORT_GOTO("failed to insert annotation into 'type' tree", FAIL); /* set read on next annotation */ more_anns = Hnextread(aid, ann_tag, DFREF_WILDCARD, DF_CURRENT); } /* end for "more_anns" */ /* Finish access*/ if (FAIL != aid) { if (FAIL == Hendaccess(aid)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* set return value */ ret_value = file_rec->an_num[type] = nanns; done: if (ret_value == FAIL) { /* Error condition cleanup */ free(ann_key); free(ann_entry); free(ann_node); if (FAIL != aid) Hendaccess(aid); } return ret_value; } /* ANIcreate_ann_tree */ /*-------------------------------------------------------------------------- NAME ANInumann -- find number of annotation of 'type' that match the given element tag/ref DESCRIPTION Find number of annotation of 'type' for the given element tag/ref pair. Not used for file labels/descs since there can only be one set of them for a file. RETURNS Number of annotation found if successful and FAIL (-1) otherwise AUTHOR GeorgeV. -------------------------------------------------------------------------*/ static intn ANInumann(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 elem_tag, /* IN: tag of item of which this is annotation */ uint16 elem_ref /* IN: ref of item of which this is annotation */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; intn nanns = 0; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Empty annotation tree */ if (file_rec->an_num[type] == -1) { if (ANIcreate_ann_tree(an_id, type) == FAIL) HGOTO_ERROR(DFE_BADCALL, FAIL); } /* Traverse the list looking for a match */ for (entry = tbbtfirst(file_rec->an_tree[type]->root); entry != NULL; entry = tbbtnext(entry)) { ann_entry = (ANentry *)entry->data; /* get annotation entry from node */ if ((ann_entry->elmref == elem_ref) && (ann_entry->elmtag == elem_tag)) { nanns++; /* increment ref counter if match */ } } /* return number of annotation references found for tag/ref */ ret_value = nanns; done: return ret_value; } /* ANInumann */ /*-------------------------------------------------------------------------- NAME ANIannlist -- generate list of annotation ids of 'type' that match the given element tag/ref DESCRIPTION Find and generate list of annotation ids of 'type' for the given element tag/ref pair RETURNS number of annotations ids found if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ static intn ANIannlist(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 elem_tag, /* IN: tag of item of which this is annotation*/ uint16 elem_ref, /* IN: ref of item of which this is annotation */ int32 ann_list[] /* OUT: array of ann_id's that match criteria. */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; intn nanns = 0; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Empty annotation tree */ if (file_rec->an_num[type] == -1) { if (ANIcreate_ann_tree(an_id, type) == FAIL) HGOTO_ERROR(DFE_BADCALL, FAIL); } /* Traverse the list looking for a match */ for (entry = tbbtfirst(file_rec->an_tree[type]->root); entry != NULL; entry = tbbtnext(entry)) { ann_entry = (ANentry *)entry->data; /* get annotation entry from node */ if ((ann_entry->elmref == elem_ref) && (ann_entry->elmtag == elem_tag)) { /* save ref of ann match in list */ ann_list[nanns++] = ann_entry->ann_id; } } /* return number of annotation id's found for tag/ref */ ret_value = nanns; done: return ret_value; } /* ANIannlist */ /*-------------------------------------------------------------------------- NAME ANIannlen -- get length of annotation given annotation id DESCRIPTION Uses the annotation id to find ann_key & file_id RETURNS length of annotation if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ static int32 ANIannlen(int32 ann_id /* IN: annotation id */) { ANnode *ann_node = NULL; int32 file_id = FAIL; int32 type; int32 ann_key; uint16 ann_tag; uint16 ann_ref; int32 ann_length = (-1); int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* get annotation record */ ann_node = HAatom_object(ann_id); if (NULL == ann_node) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file id and annotation key */ file_id = ann_node->file_id; ann_key = ann_node->ann_key; type = AN_KEY2TYPE(ann_key); ann_ref = AN_KEY2REF(ann_key); /* Valid file id */ if (file_id == FAIL) HE_REPORT_GOTO("bad file_id", FAIL); /* set type annotation tag */ switch ((int32)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } if (ann_tag == DFTAG_DIL || ann_tag == DFTAG_DIA) { /* 4=length of data tag/ref for data label or description */ if ((ann_length = Hlength(file_id, ann_tag, ann_ref)) == FAIL) HE_REPORT_GOTO("Failed to find annotation length", FAIL); ann_length -= 4; } else if (ann_tag == DFTAG_FID || ann_tag == DFTAG_FD) { /* not data tag/ref for file label or description */ if ((ann_length = Hlength(file_id, ann_tag, ann_ref)) == FAIL) HE_REPORT_GOTO("Failed to find annotation length", FAIL); } /* return the length */ ret_value = (ann_length); done: return ret_value; } /* ANIannlen */ /*-------------------------------------------------------------------------- NAME ANIreadann -- read annotation given ann_id DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ static intn ANIreadann(int32 ann_id, /* IN: annotation id (handle) */ char *ann, /* OUT: space to return annotation in */ int32 maxlen /* IN: size of space to return annotation in */) { ANnode *ann_node = NULL; int32 file_id = FAIL; int32 type; int32 ann_key; int32 aid = FAIL; int32 ann_len; uint16 ann_tag; uint16 ann_ref; uint8 datadi[4] = {0, 0, 0, 0}; /* to read in and discard data/ref! */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* get annotation record */ ann_node = HAatom_object(ann_id); if (NULL == ann_node) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file id and annotation key */ file_id = ann_node->file_id; ann_key = ann_node->ann_key; type = AN_KEY2TYPE(ann_key); ann_ref = AN_KEY2REF(ann_key); /* Valid file id */ if (file_id == FAIL) HE_REPORT_GOTO("bad file_id", FAIL); /* set type tag */ switch ((int32)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* find DD for that annotation using tag/ref */ aid = Hstartread(file_id, ann_tag, ann_ref); if (aid == FAIL) HE_REPORT_GOTO("Failed to get access to annotation", FAIL); if (FAIL == Hinquire(aid, (int32 *)NULL, (uint16 *)NULL, (uint16 *)NULL, &ann_len, (int32 *)NULL, (int32 *)NULL, (int16 *)NULL, (int16 *)NULL)) { HE_REPORT_GOTO("Failed to get annotation", FAIL); } /* first four bytes were tag/ref if data annotation, so they don't count */ if (ann_tag == DFTAG_DIL || ann_tag == DFTAG_DIA) ann_len -= 4; /* Check length of space provided * if not enough space, truncate annotation * Labels need space for null terminator, Descriptions don't */ if (ann_tag == DFTAG_FID || ann_tag == DFTAG_DIL) { /* Labels */ if (ann_len > maxlen - 1) ann_len = maxlen - 1; } else { /* Descriptions */ if (ann_len > maxlen) ann_len = maxlen; } /* If data label or description need to read past tag/ref */ if (ann_tag == DFTAG_DIL || ann_tag == DFTAG_DIA) { /* Data label/description */ if ((int32)FAIL == Hread(aid, (int32)4, datadi)) HE_REPORT_GOTO("Failed to go past tag/ref", FAIL); } /* read its annotation now..*/ if ((int32)FAIL == Hread(aid, ann_len, ann)) HE_REPORT_GOTO("Failed to read annotation", FAIL); /* If Label need to NULL terminate string */ if (ann_tag == DFTAG_FID || ann_tag == DFTAG_DIL) ann[ann_len] = '\0'; /* Close access to annotation object */ if (FAIL != aid) { if (FAIL == Hendaccess(aid)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } done: if (ret_value == FAIL) { /* Error condition cleanup */ if (FAIL != aid) Hendaccess(aid); } return ret_value; } /* ANIreadann */ /*-------------------------------------------------------------------------- NAME ANIwriteann -- write annotation given ann_id DESCRIPTION Checks for pre-existence of given annotation, replacing old one if it exists. Writes out annotation. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ static intn ANIwriteann(int32 ann_id, /* IN: annotation id */ const char *ann, /* IN: annotation to write */ int32 ann_len /* IN: length of annotation */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; ANnode *ann_node = NULL; int32 file_id = FAIL; int32 type; int32 ann_key; int32 aid = FAIL; int newflag = 0; uint16 ann_tag; uint16 ann_ref; uint16 elem_tag; uint16 elem_ref; uint8 datadi[4] = {0, 0, 0, 0}; /* to hold data tag/ref for writing */ uint8 *ptr = NULL; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* get annotation record */ ann_node = HAatom_object(ann_id); if (NULL == ann_node) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file id and annotation key */ file_id = ann_node->file_id; ann_key = ann_node->ann_key; type = AN_KEY2TYPE(ann_key); ann_ref = AN_KEY2REF(ann_key); /* convert file_id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* set type tag */ switch ((int32)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* Get annotation entry so that we can extract tag/ref of element * Note that for file labels and descriptions the tag/ref contain * DFTAG_XXX and annotation reference number */ if ((entry = tbbtdfind(file_rec->an_tree[type], &ann_key, NULL)) == NULL) HE_REPORT_GOTO("failed to retrieve annotation of 'type' tree", FAIL); ann_entry = (ANentry *)entry->data; elem_tag = ann_entry->elmtag; elem_ref = ann_entry->elmref; newflag = ann_node->new_ann; /* is this a new annotation */ if (newflag == 1) { ann_node->new_ann = 0; /* set new annotation entry to false */ } /* If annotation exists, reused the DD and rewrite new annotation while preserving tag/ref. We assume annotations are not stored as linked-blocks for now. */ if (newflag == 0) { /* annotation exists in file, re-writing */ /* Not new, reused the tag/ref(i.e. DD) for new annotation. pointer to old annotation is lost. */ if (HDreuse_tagref(file_id, ann_tag, ann_ref) == FAIL) HE_REPORT_GOTO("Unable to replace old annotation", FAIL); } if (ann_tag == DFTAG_DIL || ann_tag == DFTAG_DIA) { /* Data label/description * Note: cannot use Hputelement because need to write data tag/ref */ aid = Hstartwrite(file_id, ann_tag, ann_ref, ann_len + 4); if (aid == FAIL) HE_REPORT_GOTO("Failed to start write access on annotation", FAIL); /* Setup up to write annotation tag/ref */ ptr = (uint8 *)&(datadi[0]); /* first, write the object's tag/ref */ UINT16ENCODE(ptr, elem_tag); UINT16ENCODE(ptr, elem_ref); /* write annotation tag/ref of element */ if ((int32)FAIL == Hwrite(aid, (int32)4, datadi)) HE_REPORT_GOTO("Failed to write tag/ref of annotation", FAIL); /* then write the annotation itself */ if ((int32)FAIL == Hwrite(aid, ann_len, ann)) HE_REPORT_GOTO("Failed to write annotation", FAIL); /* end access to annotation */ if (FAIL == Hendaccess(aid)) HE_REPORT_GOTO("Failed to end access to annotation", FAIL); } else /* file label/description */ { /* write out file label/description */ if (FAIL == Hputelement(file_id, ann_tag, ann_ref, (const uint8 *)ann, ann_len)) HE_REPORT_GOTO("Failed to write file annotation", FAIL); } done: if (ret_value == FAIL) { /* Error condition cleanup */ if (FAIL != aid) Hendaccess(aid); } return ret_value; } /* ANIwriteann */ /* ------------------------------- ANIcreate ------------------------------- NAME ANIcreate - create a new annotation for the specified item DESCRIPTION Creates an annotation, returns an 'an_id' to work with the new annotation which can either be a label or description. RETURNS An ID to an annotation which can either be a label or description AUTHOR GeorgeV. --------------------------------------------------------------------------- */ static intn ANIcreate(int32 file_id, /* IN: file ID */ uint16 elem_tag, /* IN: tag of the item */ uint16 elem_ref, /* IN: reference number of the item */ ann_type type /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/) { int32 ann_id = FAIL; uint16 ann_tag; uint16 ann_ref; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Valid file id */ if (HAatom_group(file_id) != FIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* deal with type */ switch ((ann_type)type) { case AN_DATA_LABEL: ann_tag = DFTAG_DIL; ann_ref = Htagnewref(file_id, ann_tag); break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; ann_ref = Htagnewref(file_id, ann_tag); break; case AN_FILE_LABEL: /* for file label set elmement tag/ref to ann_tag & ref */ ann_tag = DFTAG_FID; ann_ref = Htagnewref(file_id, ann_tag); elem_tag = ann_tag; elem_ref = ann_ref; break; case AN_FILE_DESC: /* for file desc set elmement tag/ref to ann_tag & ref */ ann_tag = DFTAG_FD; ann_ref = Htagnewref(file_id, ann_tag); elem_tag = ann_tag; elem_ref = ann_ref; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* Check tag and ref */ if (!elem_tag) HGOTO_ERROR(DFE_BADTAG, FAIL); if (!elem_ref) HGOTO_ERROR(DFE_BADREF, FAIL); /* put new annotation tag/ref into 'type' TBBTtree */ if ((ann_id = ANIaddentry(file_id, type, ann_ref, elem_tag, elem_ref, 1)) == FAIL) HE_REPORT_GOTO("Failed to add annotation to TBBT tree", FAIL); ret_value = ann_id; done: return ret_value; } /* ANIcreate() */ /* --------------------- Exported Multi-file Interface ----------------------*/ /* ------------------------------- ANstart -------------------------------- NAME ANstart -- open file for annotation handling DESCRIPTION Start annotation handling on the file return a annotation ID to the file. RETURNS A file ID or FAIL. Note that we use 'an_id' which is the same as the file id. AUTHOR GeorgeV. --------------------------------------------------------------------------- */ int32 ANstart(int32 file_id /* IN: file to start annotation access on*/) { filerec_t *file_rec = NULL; /* file record pointer */ int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert file id to file rec and check for validity */ file_rec = HAatom_object(file_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* call ANIinit, should just register termination function once no matter how many times it is called. */ ANIinit(); ret_value = file_id; done: return ret_value; } /* ANstart() */ /*-------------------------------------------------------------------------- NAME ANfileinfo - Report high-level information about the ANxxx interface for a given file. DESCRIPTION Reports general information about the number of file and object(i.e. data) annotations in the file. This routine is generally used to find the range of acceptable indices for ANselect calls. RETURNS SUCCEED/FAIL AUTHOR GeorgeV. --------------------------------------------------------------------------*/ intn ANfileinfo(int32 an_id, /* IN: annotation interface id */ int32 *n_file_label, /* OUT: the # of file labels */ int32 *n_file_desc, /* OUT: the # of file descriptions */ int32 *n_obj_label, /* OUT: the # of object labels */ int32 *n_obj_desc /* OUT: the # of object descriptions */) { filerec_t *file_rec = NULL; /* file record pointer */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Empty file label annotation tree? */ if (file_rec->an_num[AN_FILE_LABEL] == -1) { if ((*n_file_label = ANIcreate_ann_tree(an_id, AN_FILE_LABEL)) == FAIL) HE_REPORT_GOTO("failed to create file label annotation TBBTtree", FAIL); } else *n_file_label = file_rec->an_num[AN_FILE_LABEL]; /* Empty file descripiton annotation tree? */ if (file_rec->an_num[AN_FILE_DESC] == -1) { if ((*n_file_desc = ANIcreate_ann_tree(an_id, AN_FILE_DESC)) == FAIL) HE_REPORT_GOTO("failed to create file desc annotation TBBTtree", FAIL); } else *n_file_desc = file_rec->an_num[AN_FILE_DESC]; /* Empty label annotation tree? */ if (file_rec->an_num[AN_DATA_LABEL] == -1) { if ((*n_obj_label = ANIcreate_ann_tree(an_id, AN_DATA_LABEL)) == FAIL) HE_REPORT_GOTO("failed to create data label annotation TBBTtree", FAIL); } else *n_obj_label = file_rec->an_num[AN_DATA_LABEL]; /* Empty descripiton annotation tree? */ if (file_rec->an_num[AN_DATA_DESC] == -1) { if ((*n_obj_desc = ANIcreate_ann_tree(an_id, AN_DATA_DESC)) == FAIL) HE_REPORT_GOTO("failed to create data desc annotation TBBTtree", FAIL); } else *n_obj_desc = file_rec->an_num[AN_DATA_DESC]; done: return ret_value; } /* ANfileinfo() */ /* -------------------------------- ANend --------------------------------- NAME ANend -- End annotation access to file file DESCRIPTION End annotation access to file. RETURNS SUCCEED / FAIL --------------------------------------------------------------------------- */ int32 ANend(int32 an_id /* IN: Annotation ID of file to close */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *aentry = NULL; ANentry *ann_entry = NULL; ANnode *ann_node = NULL; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* NEED to delete trees of annotations attached to node * NOTE: This could be written shorter using a for loop.... * or something.... */ /* free file label annotation rb tree */ if (file_rec->an_tree[AN_FILE_LABEL] != NULL) { /* Traverse tree puling ann_id's to delete from annotation atom group */ for (aentry = tbbtfirst(file_rec->an_tree[AN_FILE_LABEL]->root); aentry != NULL; aentry = tbbtnext(aentry)) { /* get annotation entry from node */ ann_entry = (ANentry *)aentry->data; /* delete annotation node from annotation group */ if (NULL == (ann_node = HAremove_atom(ann_entry->ann_id))) HE_REPORT_GOTO("Failed to remove annotation with ann_id", FAIL); free(ann_node); } /* finally free tree */ tbbtdfree(file_rec->an_tree[AN_FILE_LABEL], ANfreedata, ANfreekey); } /* free file desc annotation rb tree */ if (file_rec->an_tree[AN_FILE_DESC] != NULL) { /* Traverse tree puling ann_id's to delete from annotation atom group */ for (aentry = tbbtfirst(file_rec->an_tree[AN_FILE_DESC]->root); aentry != NULL; aentry = tbbtnext(aentry)) { /* get annotation entry from node */ ann_entry = (ANentry *)aentry->data; /* delete annotation node from annotation group */ if (NULL == (ann_node = HAremove_atom(ann_entry->ann_id))) HE_REPORT_GOTO("Failed to remove annotation with ann_id", FAIL); free(ann_node); } /* end for 'entry */ /* finally free tree */ tbbtdfree(file_rec->an_tree[AN_FILE_DESC], ANfreedata, ANfreekey); } /* free label annotation rb tree */ if (file_rec->an_tree[AN_DATA_LABEL] != NULL) { /* Traverse tree puling ann_id's to delete from annotation atom group */ for (aentry = tbbtfirst(file_rec->an_tree[AN_DATA_LABEL]->root); aentry != NULL; aentry = tbbtnext(aentry)) { /* get annotation entry from node */ ann_entry = (ANentry *)aentry->data; /* delete annotation node from annotation group */ if (NULL == (ann_node = HAremove_atom(ann_entry->ann_id))) HE_REPORT_GOTO("Failed to remove annotation with ann_id", FAIL); free(ann_node); } /* finally free tree */ tbbtdfree(file_rec->an_tree[AN_DATA_LABEL], ANfreedata, ANfreekey); } /* free desc annotation rb tree */ if (file_rec->an_tree[AN_DATA_DESC] != NULL) { /* Traverse tree pulling ann_id's to delete from annotation atom group */ for (aentry = tbbtfirst(file_rec->an_tree[AN_DATA_DESC]->root); aentry != NULL; aentry = tbbtnext(aentry)) { /* get annotation entry from node */ ann_entry = (ANentry *)aentry->data; /* delete annotation node from annotation group */ if (NULL == (ann_node = HAremove_atom(ann_entry->ann_id))) HE_REPORT_GOTO("Failed to remove annotation with ann_id", FAIL); free(ann_node); } /* end for 'entry */ /* finally free tree */ tbbtdfree(file_rec->an_tree[AN_DATA_DESC], ANfreedata, ANfreekey); } /* re-initialize everything in file record for annotations so the a ANstart() works. */ file_rec->an_tree[AN_DATA_LABEL] = NULL; file_rec->an_tree[AN_DATA_DESC] = NULL; file_rec->an_tree[AN_FILE_LABEL] = NULL; file_rec->an_tree[AN_FILE_DESC] = NULL; file_rec->an_num[AN_DATA_LABEL] = -1; file_rec->an_num[AN_DATA_DESC] = -1; file_rec->an_num[AN_FILE_LABEL] = -1; file_rec->an_num[AN_FILE_DESC] = -1; done: return ret_value; } /* ANend() */ /* ------------------------------------------------------------------------ NAME ANcreate - create a new annotation for the specified item DESCRIPTION Creates a data annotation, returns an 'an_id' to work with the new annotation which can either be a label or description. RETURNS An ID to an annotation which can either be a label or description AUTHOR GeorgeV. --------------------------------------------------------------------------- */ int32 ANcreate(int32 an_id, /* IN: annotation interface ID */ uint16 elem_tag, /* IN: tag of item */ uint16 elem_ref, /* IN: reference number of the item */ ann_type type /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions*/) { int32 ret_value; ret_value = (ANIcreate(an_id, elem_tag, elem_ref, type)); return ret_value; } /* ANcreate() */ /* ------------------------------------------------------------------------ NAME ANcreatef - create a new file annotation and return a handle(id) DESCRIPTION Creates a file annotation, returns an 'an_id' to work with the new file annotation which can either be a label or description. RETURNS An ID to an annotation which can either be a file label or description AUTHOR GeorgeV. --------------------------------------------------------------------------- */ int32 ANcreatef(int32 an_id,/* IN: annotation interface ID */ ann_type type /* IN: AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/) { uint16 ann_tag; uint16 ann_ref; int32 ret_value = SUCCEED; /* deal with type */ switch ((ann_type)type) { case AN_FILE_LABEL: ann_tag = DFTAG_FID; ann_ref = 0; /* initialize with invalid ref, will be replaced in ANIcreate() */ break; case AN_FILE_DESC: ann_tag = DFTAG_FD; ann_ref = 0; /* initialize with invalid ref, will be replaced in ANIcreate() */ break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } ret_value = ANIcreate(an_id, ann_tag, ann_ref, type); done: return ret_value; } /* ANcreateann() */ /* ------------------------------- ANselect ------------------------------- NAME ANselect -- get an annotation ID from index of 'type' DESCRIPTION The position index is ZERO based RETURNS An ID to an annotation type which can either be a label or description AUTHOR GeorgeV. --------------------------------------------------------------------------- */ int32 ANselect(int32 an_id, /* IN: annotation interface ID */ int32 index, /* IN: index of annotation to get ID for */ ann_type type /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Empty annotation tree */ if (file_rec->an_num[type] == -1) { if (ANIcreate_ann_tree(an_id, type) == FAIL) HGOTO_ERROR(DFE_BADCALL, FAIL); } /* check index and adjust to 1 based for tbbtindx()*/ if (index >= 0 && index < file_rec->an_num[type]) index++; else HE_REPORT_GOTO("bad index", FAIL); /* find 'index' entry */ if ((entry = tbbtindx(file_rec->an_tree[type]->root, index)) == NULL) HE_REPORT_GOTO("failed to find 'index' entry", FAIL); ann_entry = (ANentry *)entry->data; /* return ann_id */ ret_value = ann_entry->ann_id; done: return ret_value; } /* ANselect() */ /*-------------------------------------------------------------------------- NAME ANnumann -- find number of annotation of 'type' that match the given element tag/ref DESCRIPTION Find number of annotation of 'type' for the given element tag/ref pair. Should not be used for File labels and descriptions. RETURNS Number of annotations found if successful and FAIL (-1) otherwise. AUTHOR GeorgeV. ------------------------------------------------------------------------*/ intn ANnumann(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 elem_tag, /* IN: tag of item of which this is annotation */ uint16 elem_ref /* IN: ref of item of which this is annotation */) { intn ret_value = SUCCEED; /* deal with invalid types */ if (type == AN_FILE_LABEL || type == AN_FILE_DESC) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = ANInumann(an_id, type, elem_tag, elem_ref); done: return ret_value; } /* ANnumann() */ /*-------------------------------------------------------------------------- NAME ANannlist -- generate list of annotation ids of 'type' that match the given element tag/ref DESCRIPTION Find and generate list of annotation ids of 'type' for the given element tag/ref pair. Should not be used for File labels and descriptions. RETURNS Number of annotations ids found if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ intn ANannlist(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 elem_tag, /* IN: tag of item of which this is annotation */ uint16 elem_ref, /* IN: ref of item of which this is annotation */ int32 ann_list[] /* OUT: array of ann_id's that match criteria. */) { intn ret_value = SUCCEED; /* deal with invalid types */ if (type == AN_FILE_LABEL || type == AN_FILE_DESC) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = ANIannlist(an_id, type, elem_tag, elem_ref, ann_list); done: return ret_value; } /* ANannlist() */ /*-------------------------------------------------------------------------- NAME ANannlen -- get length of annotation given annotation id DESCRIPTION Uses the annotation id to find ann_key & file_id RETURNS length of annotation if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ int32 ANannlen(int32 ann_id /* IN: annotation id */) { int32 ret_value; ret_value = ANIannlen(ann_id); return ret_value; } /* ANannlen() */ /*-------------------------------------------------------------------------- NAME ANwriteann -- write annotation given ann_id DESCRIPTION Checks for pre-existence of given annotation, replacing old one if it exists. Writes out annotation. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ int32 ANwriteann(int32 ann_id, /* IN: annotation id */ const char *ann, /* IN: annotation to write */ int32 annlen /* IN: length of annotation */) { int32 ret_value; ret_value = ANIwriteann(ann_id, ann, annlen); return ret_value; } /* ANwriteann() */ /*-------------------------------------------------------------------------- NAME ANreadann -- read annotation given ann_id DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise AUTHOR GeorgeV. ------------------------------------------------------------------------*/ int32 ANreadann(int32 ann_id, /* IN: annotation id (handle) */ char *ann, /* OUT: space to return annotation in */ int32 maxlen /* IN: size of space to return annotation in */) { int32 ret_value; ret_value = ANIreadann(ann_id, ann, maxlen); return ret_value; } /* ANreadann() */ /* ----------------------------------------------------------------------- NAME ANendaccess -- end access to an annotation given it's id DESCRIPTION Terminates access to an annotation. For now does nothing RETURNS SUCCEED(0) or FAIL(-1) AUTHOR GeorgeV. --------------------------------------------------------------------------- */ intn ANendaccess(int32 ann_id /* IN: annotation id */) { intn ret_value = SUCCEED; (void)ann_id; return ret_value; } /* ANendaccess() */ /* ----------------------------------------------------------------------- NAME ANget_tagref - get tag/ref pair for annotation based on type and index DESCRIPTION Get the tag/ref of the annotation based on the type and index of the annotation. The position index is zero based RETURNS A tag/ref pair for an annotation type which can either be a label or description. AUTHOR GeorgeV. --------------------------------------------------------------------------- */ int32 ANget_tagref(int32 an_id, /* IN: annotation interface ID */ int32 index, /* IN: index of annotation to get tag/ref for */ ann_type type, /* IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions.*/ uint16 *tag, /* OUT: Tag for annotation */ uint16 *ref /* OUT: ref for annotation */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Empty annotation tree */ if (file_rec->an_num[type] == -1) { if (ANIcreate_ann_tree(an_id, type) == FAIL) HGOTO_ERROR(DFE_BADCALL, FAIL); } /* check index and adjust to 1 based for tbbtindx()*/ if (index >= 0 && index <= file_rec->an_num[type]) index++; else HE_REPORT_GOTO("bad index", FAIL); /* find 'index' entry */ if ((entry = tbbtindx(file_rec->an_tree[type]->root, index)) == NULL) HE_REPORT_GOTO("failed to find 'index' entry", FAIL); ann_entry = (ANentry *)entry->data; /* set ref */ *ref = ann_entry->annref; /* set tag based on type */ switch ((int32)type) { case AN_DATA_LABEL: *tag = DFTAG_DIL; break; case AN_DATA_DESC: *tag = DFTAG_DIA; break; case AN_FILE_LABEL: *tag = DFTAG_FID; break; case AN_FILE_DESC: *tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } done: return ret_value; } /* ANget_tagref() */ /*-------------------------------------------------------------------------- NAME ANid2tagref -- get tag/ref given annotation id DESCRIPTION Uses the annotation id to find ann_node entry which contains ann_ref RETURNS SUCCEED(0) if successful and FAIL (-1) otherwise. AUTHOR GeorgeV. ------------------------------------------------------------------------*/ int32 ANid2tagref(int32 ann_id, /* IN: annotation id */ uint16 *tag, /* OUT: Tag for annotation */ uint16 *ref /* OUT: ref for annotation */) { ANnode *ann_node = NULL; int32 file_id = FAIL; int32 type; int32 ann_key; uint16 ann_ref; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Valid annotation id */ /* get annotation record */ ann_node = HAatom_object(ann_id); if (NULL == ann_node) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file id and annotation key */ file_id = ann_node->file_id; ann_key = ann_node->ann_key; type = AN_KEY2TYPE(ann_key); ann_ref = AN_KEY2REF(ann_key); /* Valid file id */ if (file_id == FAIL) HE_REPORT_GOTO("bad file_id", FAIL); *ref = ann_ref; /* set type annotation tag */ switch ((int32)type) { case AN_DATA_LABEL: *tag = DFTAG_DIL; break; case AN_DATA_DESC: *tag = DFTAG_DIA; break; case AN_FILE_LABEL: *tag = DFTAG_FID; break; case AN_FILE_DESC: *tag = DFTAG_FD; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } done: return ret_value; } /* ANid2tagref */ /*-------------------------------------------------------------------------- NAME ANtagref2id -- get annotation id given tag/ref DESCRIPTION Gets the annotation id of the annotation given the tag/ref of the annotation itself and the annotation interface id. RETURNS Annotation id of annotation if successful and FAIL(-1) otherwise. AUTHOR GeorgeV. ------------------------------------------------------------------------*/ int32 ANtagref2id(int32 an_id, /* IN Annotation interface id */ uint16 ann_tag, /* IN: Tag for annotation */ uint16 ann_ref /* IN: ref for annotation */) { filerec_t *file_rec = NULL; /* file record pointer */ TBBT_NODE *entry = NULL; ANentry *ann_entry = NULL; int32 ann_key; ann_type type; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* convert an_id i.e. file_id to file rec and check for validity */ file_rec = HAatom_object(an_id); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* set type given annotation tag */ switch ((uint16)ann_tag) { case DFTAG_DIL: type = AN_DATA_LABEL; break; case DFTAG_DIA: type = AN_DATA_DESC; break; case DFTAG_FID: type = AN_FILE_LABEL; break; case DFTAG_FD: type = AN_FILE_DESC; break; default: HE_REPORT_GOTO("Bad annotation type for this call", FAIL); } /* Check for empty annotation tree of 'type'? */ if (file_rec->an_num[type] == -1) { if (ANIcreate_ann_tree(an_id, type) == FAIL) HGOTO_ERROR(DFE_BADCALL, FAIL); } /* Create key from type/ref pair * ---------------------------- * | type(16bits) | ref(16bits) | * -----------------------------*/ ann_key = AN_CREATE_KEY(type, ann_ref); /* See if annotation of 'type' with ref exits */ if ((entry = tbbtdfind(file_rec->an_tree[type], &ann_key, NULL)) == NULL) HE_REPORT_GOTO("failed to find annotation of 'type'", FAIL); /* get annotation entry from node */ ann_entry = (ANentry *)entry->data; /* return annotation id */ ret_value = ann_entry->ann_id; done: return ret_value; } /* ANtagref2id */ /*-------------------------------------------------------------------- NAME ANatype2tag - annotation type to corresponding annotation TAG DESCRIPTION Translate annotation type to corresponding TAG RETURNS Returns TAG corresponding to annotation type AUTHOR GeorgeV. --------------------------------------------------------------------*/ uint16 ANatype2tag(ann_type atype /* IN: Annotation type */) { /* Switch on annotation type "atype" */ uint16 ann_tag; switch ((ann_type)atype) { case AN_FILE_LABEL: ann_tag = DFTAG_FID; break; case AN_FILE_DESC: ann_tag = DFTAG_FD; break; case AN_DATA_LABEL: ann_tag = DFTAG_DIL; break; case AN_DATA_DESC: ann_tag = DFTAG_DIA; break; default: ann_tag = DFTAG_NULL; /*changed from 5 to DFTAG_NULL -BMR*/ } /* switch */ return ann_tag; } /* ANatype2tag */ /*-------------------------------------------------------------------- NAME ANtag2atype - annotation TAG to corresponding annotation type DESCRIPTION Translate annotation TAG to corresponding atype RETURNS Returns type corresponding to annotation TAG AUTHOR GeorgeV. --------------------------------------------------------------------*/ ann_type ANtag2atype(uint16 atag /* IN: annotation tag */) { /* Switch on annotation tag */ ann_type atype; switch ((uint16)atag) { case DFTAG_FID: atype = AN_FILE_LABEL; break; case DFTAG_FD: atype = AN_FILE_DESC; break; case DFTAG_DIL: atype = AN_DATA_LABEL; break; case DFTAG_DIA: atype = AN_DATA_DESC; break; /* This will cause warnings on some compilers */ default: atype = AN_UNDEF; } /* switch */ return atype; } /* ANtag2atype */ hdf4-hdf4.3.1/hdf/src/mfan.h000066400000000000000000000276361503061704500154670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------------------ * File: mfan.h * Purpose: header file for the Multi-file Annotation Interface *----------------------------------------------------------------------------*/ #ifndef H4_MFAN_H #define H4_MFAN_H #include "hdf.h" #ifdef __cplusplus extern "C" { #endif /****************************************************************************** NAME ANstart - open file for annotation handling DESCRIPTION Start annotation handling on the file return a annotation ID to the file. RETURNS A file ID or FAIL. *******************************************************************************/ HDFLIBAPI int32 ANstart(int32 file_id /* IN: file to start annotation access on */); /****************************************************************************** NAME ANfileinfo - Report high-level information about the ANxxx interface for a given file. DESCRIPTION Reports general information about the number of file and object(i.e. data) annotations in the file. This routine is generally used to find the range of acceptable indices for ANselect calls. RETURNS Returns SUCCEED if successful and FAIL otherwise *******************************************************************************/ HDFLIBAPI intn ANfileinfo(int32 an_id, /* IN: annotation interface id */ int32 *n_file_label, /* OUT: the # of file labels */ int32 *n_file_desc, /* OUT: the # of file descriptions */ int32 *n_obj_label, /* OUT: the # of object labels */ int32 *n_obj_desc /* OUT: the # of object descriptions */); /****************************************************************************** NAME ANend - End annotation access to file file DESCRIPTION End annotation access to file. RETURNS SUCCEED if successful and FAIL otherwise. *******************************************************************************/ HDFLIBAPI int32 ANend(int32 an_id /* IN: Annotation ID of file to close */); /****************************************************************************** NAME ANcreate - create a new annotation for the specified item DESCRIPTION Creates a data annotation, returns an 'an_id' to work with the new annotation which can either be a label or description. Valid annotation types are AN_DATA_LABEL for data labels and AN_DATA_DESC for data descriptions. RETURNS An ID to an annotation which can either be a label or description. *******************************************************************************/ HDFLIBAPI int32 ANcreate(int32 an_id, /* IN: annotation interface ID */ uint16 elem_tag, /* IN: tag of the item */ uint16 elem_ref, /* IN: ref of the item */ ann_type type /* IN: annotation type */); /****************************************************************************** NAME ANcreatef - create a new file annotation and return a handle(id) DESCRIPTION Creates a file annotation, returns an 'an_id' to work with the new file annotation which can either be a label or description. Valid annotation types are AN_FILE_LABEL for file labels and AN_FILE_DESC for file descriptions. RETURNS An ID to an annotation which can either be a file label or description *******************************************************************************/ HDFLIBAPI int32 ANcreatef(int32 an_id, /* IN: annotation interface ID */ ann_type type /* IN: annotation type */); /****************************************************************************** NAME ANselect - get an annotation ID from index of 'type' DESCRIPTION Get an annotation Id from index of 'type'. The position index is ZERO based RETURNS An ID to an annotation type which can either be a label or description *******************************************************************************/ HDFLIBAPI int32 ANselect(int32 an_id, /* IN: annotation interface ID */ int32 index, /* IN: index of annotation to get ID for */ ann_type type /* IN: annotation type */); /****************************************************************************** NAME ANnumann - find number of annotation of 'type' that match the given element tag/ref DESCRIPTION Find number of annotation of 'type' for the given element tag/ref pair.Should not be used for File labels and descriptions. RETURNS number of annotation found if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI intn ANnumann(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: annotation type */ uint16 elem_tag, /* IN: tag of item of which this is annotation */ uint16 elem_ref /* IN: ref of item of which this is annotation*/); /****************************************************************************** NAME ANannlist - generate list of annotation ids of 'type' that match the given element tag/ref DESCRIPTION Find and generate list of annotation ids of 'type' for the given element tag/ref pair.Should not be used for File labels and descriptions. RETURNS number of annotations ids found if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI intn ANannlist(int32 an_id, /* IN: annotation interface id */ ann_type type, /* IN: annotation type */ uint16 elem_tag, /* IN: tag of item of which this is annotation */ uint16 elem_ref, /* IN: ref of item of which this is annotation*/ int32 ann_list[] /* OUT: array of ann_id's that match criteria.*/); /****************************************************************************** NAME ANannlen - get length of annotation given annotation id DESCRIPTION Uses the annotation id to find ann_key & file_id RETURNS length of annotation if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI int32 ANannlen(int32 ann_id /* IN: annotation id */); /****************************************************************************** NAME ANwriteann - write annotation given ann_id DESCRIPTION Checks for pre-existence of given annotation, replacing old one if it exists. Writes out annotation. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI int32 ANwriteann(int32 ann_id, /* IN: annotation id */ const char *ann, /* IN: annotation to write */ int32 annlen /* IN: length of annotation*/); /****************************************************************************** NAME ANreadann - read annotation given ann_id DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise *******************************************************************************/ HDFLIBAPI int32 ANreadann(int32 ann_id, /* IN: annotation id (handle) */ char *ann, /* OUT: space to return annotation in */ int32 maxlen /* IN: size of space to return annotation in */); /****************************************************************************** NAME ANendaccess - end access to an annotation given it's id DESCRIPTION Terminates access to an annotation. For now does nothing RETURNS SUCCEED(0) or FAIL(-1) *******************************************************************************/ HDFLIBAPI intn ANendaccess(int32 ann_id /* IN: annotation id */); /****************************************************************************** NAME ANget_tagref - get tag/ref pair for annotation based on type and index DESCRIPTION Get the tag/ref of the annotation based on the type and index of the annotation. The position index is zero based RETURNS A tag/ref pair to an annotation type which can either be a label or description. *******************************************************************************/ HDFLIBAPI int32 ANget_tagref(int32 an_id, /* IN: annotation interface ID */ int32 index, /* IN: index of annotation to get tag/ref for*/ ann_type type, /* IN: annotation type */ uint16 *ann_tag, /* OUT: Tag for annotation */ uint16 *ann_ref /* OUT: ref for annotation */); /****************************************************************************** NAME ANid2tagref -- get tag/ref given annotation id DESCRIPTION Uses the annotation id to find ann_node entry which contains ann_ref RETURNS SUCCEED(0) if successful and FAIL (-1) otherwise. *******************************************************************************/ HDFLIBAPI int32 ANid2tagref(int32 ann_id, /* IN: annotation id */ uint16 *ann_tag, /* OUT: Tag for annotation */ uint16 *ann_ref /* OUT: ref for annotation */); /****************************************************************************** NAME ANtagref2id -- get annotation id given tag/ref DESCRIPTION Gets the annotation id of the annotation given the tag/ref of the annotation itself and the annotation interface id. RETURNS Annotation id of annotation if successful and FAIL(-1) otherwise. *******************************************************************************/ HDFLIBAPI int32 ANtagref2id(int32 an_id, /* IN Annotation interface id */ uint16 ann_tag, /* IN: Tag for annotation */ uint16 ann_ref /* IN: ref for annotation */); /****************************************************************************** NAME ANatype2tag - annotation type to corresponding annotation TAG DESCRIPTION Translate annotation type to corresponding TAG. RETURNS Returns TAG corresponding to annotation type. *******************************************************************************/ HDFLIBAPI uint16 ANatype2tag(ann_type atype /* IN: Annotation type */); /****************************************************************************** NAME ANtag2atype - annotation TAG to corresponding annotation type DESCRIPTION Translate annotation TAG to corresponding atype RETURNS Returns type corresponding to annotation TAG. *******************************************************************************/ HDFLIBAPI ann_type ANtag2atype(uint16 atag /* IN: annotation tag */); #ifdef __cplusplus } #endif #endif /* H4_MFAN_H */ hdf4-hdf4.3.1/hdf/src/mfan_priv.h000066400000000000000000000054721503061704500165210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------------------ * File: mfan_priv.h * Purpose: private header file for the Multi-file Annotation Interface *----------------------------------------------------------------------------*/ #ifndef H4_MFAN_PRIV_H #define H4_MFAN_PRIV_H #include "hdf_priv.h" /* This structure is used to find which file the annotation belongs to * and use the subsequent file specific annotation 'key' to find the * annotation. The annotation atom group(ANIDGROUP) keeps track of * all annotations across the file. */ typedef struct ANnode { int32 file_id; /* which file this annotation belongs to */ int32 ann_key; /* type/ref: used to find annotation in corresponding TBBT in filerec_t->tree[]. */ intn new_ann; /* flag */ } ANnode; /* * This structure is an entry in the label/desc tree * for a label/desc in the file, it gives the ref of the label/desc, * and the tag/ref of the data item to which the label/desc relates * The filerec_t->an_tree[] TBBT members will contain these entries. **/ typedef struct ANentry { int32 ann_id; /* annotation id */ uint16 annref; /* ref of annotation */ uint16 elmtag; /* tag of data */ uint16 elmref; /* ref of data */ } ANentry; /* This is the size of the hash tables used for annotation IDs */ #define ANATOM_HASH_SIZE 64 /* Used to create unique 32bit keys from annotation type and reference number * This key is used to add nodes to a corresponding TBBT in * filrerec_t->an_tree[]. * ---------------------------- * | type(16bits) | ref(16bits) | * -----------------------------*/ #define AN_CREATE_KEY(t, r) ((((int32)t & 0xffff) << 16) | r) /* Obtain Reference number from key */ #define AN_KEY2REF(k) ((uint16)((int32)k & 0xffff)) /* Obtain Annotation type from key */ #define AN_KEY2TYPE(k) ((int32)((int32)k >> 16)) #endif /* H4_MFAN_PRIV_H */ hdf4-hdf4.3.1/hdf/src/mfanf.c000066400000000000000000000345711503061704500156240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mfanf.c * Purpose: C-stubs for multi-file Fortran annotation routines * Invokes: C-Routines in "mfan.c" * Contents: SEE annotation source/header files "mfan.c" and "mfan.h" * for more info on the annotation interface. * * NOTES: TYPE here refers to file/data label/description types * They are AN_FILE_LABEL, AN_FILE_DESC, AN_DATA_LABEL, AN_DATA_DESC * THE tag/ref refers to data tag/ref. The fortran equivalents * are defined in 'hdf.inc'. * * C-stubs directly callable by Fortran Users * ------------------------------------------ * afstart - start annotation access on file and return annotaton id * affileinfo - get number of file/data annotations in file. * Indices returned are used in afselect() calls. * afend - end access to annotation handling on file * afcreate - create a new data annotation and return a handle * affcreate - create a new file annotation and return a handle * afselect - returns an annotation handle(ann_id) from index for * a particular annotation TYPE. This handle is then used for * calls like afwriteann(), afreadann(), afannlen(),..etc * afnumann - return number of annotations that match TYPE/tag/ref * afannlist - return list of handles that match TYPE/tag/ref * afannlen - get length of annotation given handle * afwriteann - write annotation given handle * afreadann - read annotation given handle * afendaccess - end access to annotation using handle * afgettagref - get tag/ref pair to annotation ID * afidtagref - get tag/ref given annotation id * aftagrefid - get annotation id given tag/ref * afatypetag - annotation type to corresponding annotation TAG * aftagatype - annotation TAG to corresponding annotation type *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /*----------------------------------------------------------------------------- FUNCTION NAMING CONVENTION: --------------------------- This file contains the HDF-style C stubs for the multi-file Annotation interface. They call the corresponding C-functions in "mfan.c" The basic routines called by fortran will be of the form afxxxx -----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- * Name: afstart * Purpose: Open file for annotation handling * Inputs: file_id: id of HDF file * Returns: annotation interface handle on SUCCEED and FAIL otherwise * Users: * Invokes: ANstart() *---------------------------------------------------------------------------*/ intf nafstart(intf *file_id) { intf ret; ret = ANstart((int32)*file_id); return ret; } /*----------------------------------------------------------------------------- * Name: affileinfo * Purpose: Get number of file/data annotations in file. * Inputs: IN an_id: annotation interface handle * OUT num_flabel: number of file labels in file * OUT num_fdesc: number of file descriptions in file * OUT num_olabel: number of data labels in file * OUT num_odesc: number of data descriptions in file * Returns: see ANfileinfo() * Users: Fortran Users * Invokes: ANfileinfo() *---------------------------------------------------------------------------*/ intf naffileinfo(intf *an_id, intf *num_flabel, intf *num_fdesc, intf *num_olabel, intf *num_odesc) { intf ret; int32 nflabel, nfdesc, nolabel, nodesc; ret = ANfileinfo((int32)*an_id, &nflabel, &nfdesc, &nolabel, &nodesc); /* fill in values to return */ *num_flabel = nflabel; *num_fdesc = nfdesc; *num_olabel = nolabel; *num_odesc = nodesc; return ret; } /*----------------------------------------------------------------------------- * Name: afend * Purpose: End access to annotation handling on file * Inputs: file_id: * Returns: see ANend() * Users: Fortran Users * Invokes: ANend() *---------------------------------------------------------------------------*/ intf nafend(intf *an_id) { return (intf)ANend((int32)*an_id); } /*----------------------------------------------------------------------------- * Name: afcreate * Purpose: Create a new data annotation and return an annotation handle * Inputs: an_id: annotation interface handle * etag: tag of data to annotate * eref: ref of data to annotate * atype: annotation type AN_DATA_LABEL, AN_DATA_DESC * Returns: see ANcreate() * Users: Fortran Users * Invokes: ANcreate() *---------------------------------------------------------------------------*/ intf nafcreate(intf *an_id, intf *etag, intf *eref, intf *atype) { return (intf)ANcreate((int32)*an_id, (uint16)*etag, (uint16)*eref, (ann_type)*atype); } /*----------------------------------------------------------------------------- * Name: affcreate * Purpose: Create a new file annotation and return an annotation handle * Inputs: an_id: annottion interface handle * atype: annotation type AN_FILE_LABEL, AN_DATA_DESC * Returns: see ANcreatef() * Users: Fortran Users * Invokes: ANcreatf() *---------------------------------------------------------------------------*/ intf naffcreate(intf *an_id, intf *atype) { return (intf)ANcreatef((int32)*an_id, (ann_type)*atype); } /*----------------------------------------------------------------------------- * Name: afselect * Purpose: returns an annotation handle(ann_id) from index for * a particular annotation TYPE. This handle is then used for * calls like afwriteann(), afreadann(), afannlen(),..etc * Inputs: an_id: annotation interface handle * index: index for particular annotation type. Usually based on * number of a particular type obtained from affileinfo()call. * ZERO based. * atype: annotation type AN_FILE_LABEL, AN_FILE_DESC, AN_DATA_LABEL * AN_DATA_DESC * Returns: see ANselect() * Users: Fortran Users * Invokes: ANselect() *---------------------------------------------------------------------------*/ intf nafselect(intf *an_id, intf *index, intf *atype) { return (intf)ANselect((int32)*an_id, (int32)*index, (ann_type)*atype); } /*----------------------------------------------------------------------------- * Name: afnumann * Purpose: Return number of annotations that match TYPE/tag/ref * Inputs: an_id: annotation interface handle * atype: annotation type AN_DATA_LABEL, AN_DATA_DESC * etag: data tag to match * eref: data ref to match * Returns: see ANnumann() * Users: Fortran Users * Invokes: ANnumann() *---------------------------------------------------------------------------*/ intf nafnumann(intf *an_id, intf *atype, intf *etag, intf *eref) { return (intf)ANnumann((int32)*an_id, (ann_type)*atype, (uint16)*etag, (uint16)*eref); } /*----------------------------------------------------------------------------- * Name: afannlist * Purpose: Return list of handles that match TYPE/tag/ref * Inputs: IN an_id: annotation interface handle * IN atype: annotation type AN_DATA_LABEL, AN_DATA_DESC * IN etag: data tag to match * IN eref: data ref to match * OUT alist[]: list of annotation handles found that match tag/ref * Returns: number of annotations found that match else FAIL. see ANannlist() * Users: Fortran Users * Invokes: ANnumann(), ANannlist() *---------------------------------------------------------------------------*/ intf nafannlist(intf *an_id, intf *atype, intf *etag, intf *eref, intf alist[]) { intf ret; int32 *tempanlist; intf nanns; intn i; /* Get number of annotations that match tag/ref pair */ nanns = ANnumann((int32)*an_id, (ann_type)*atype, (uint16)*etag, (uint16)*eref); if (nanns < 0) HE_REPORT_RETURN("ANnumann: failed to any annotations", FAIL); /* create annlist with true int32s to maintain compatibility ** with machines that allocate less than 32 bits per int. */ if ((tempanlist = (int32 *)malloc(nanns * sizeof(int32))) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); /* Get list of annotation handles to return */ ret = ANannlist((int32)*an_id, (ann_type)*atype, (uint16)*etag, (uint16)*eref, tempanlist); if (ret < 0) HE_REPORT_RETURN("ANannlist:failed to any annotations", FAIL); /* move annotation handles into caller's alist */ for (i = 0; i < nanns; i++) alist[i] = tempanlist[i]; free(tempanlist); return ret; } /* nafannlist() */ /*----------------------------------------------------------------------------- * Name: afannlen * Purpose: Get length of annotation given handle * Inputs: an_id:annotation handle * Returns: see ANannlen() * Users: Fortran Users * Invokes: ANannlen() *---------------------------------------------------------------------------*/ intf nafannlen(intf *an_id) { return (intf)ANannlen((int32)*an_id); } /*----------------------------------------------------------------------------- * Name: afwriteann * Purpose: Write annotation given handle * Inputs: ann_id: annotation handle * ann: annotation to write out * annlen:length of annotation * Returns: see ANwriteann() * Users: Fortran Users * Invokes: ANwriteann() *---------------------------------------------------------------------------*/ intf nafwriteann(intf *ann_id, _fcd ann, intf *annlen) { char *iann = NULL; intf status; /* Convert fortran string to C-String */ iann = HDf2cstring(ann, (intn)*annlen); if (!iann) return FAIL; status = ANwriteann((int32)*ann_id, (char *)_fcdtocp(ann), (int32)*annlen); free(iann); /* free allocated space by HDf2cstring */ return status; } /*----------------------------------------------------------------------------- * Name: afreadann * Purpose: Read annotation given handle * Inputs: ann_id: annotation handle * ann: annotation read * maxlen: maximum space allocated for "ann" * Returns: see ANreadann() (SUCCEED (0) if successful, else FAIL (-1)) * Users: Fortran Users * Invokes: ANreadann() *---------------------------------------------------------------------------*/ intf nafreadann(intf *ann_id, _fcd ann, intf *maxlen) { char *iann = NULL; intn status; /* Allocate space for fortran string */ if (*maxlen) iann = (char *)malloc((uint32)*maxlen + 1); if (!iann) HRETURN_ERROR(DFE_NOSPACE, FAIL); status = ANreadann((int32)*ann_id, iann, (int32)*maxlen); /* C-String to Fortran String */ HDpackFstring(iann, _fcdtocp(ann), (intn)*maxlen); free(iann); return status; } /*----------------------------------------------------------------------------- * Name: afendaccess * Purpose: End access to annotation using handle * Inputs: ann_id:annotation handle * Returns: see ANendaccess() * Users: Fortran Users * Invokes: ANendaccess() *---------------------------------------------------------------------------*/ intf nafendaccess(intf *ann_id) { return (intf)ANendaccess((int32)*ann_id); } /*----------------------------------------------------------------------------- * Name: afgettagref * Purpose: * Inputs: * Returns: see ANget_tagref() * Users: Fortran Users * Invokes: ANget_tagref() *---------------------------------------------------------------------------*/ intf nafgettagref(intf *an_id, intf *index, intf *type, intf *tag, intf *ref) { intf ret; uint16 otag, oref; ret = (intf)ANget_tagref((int32)*an_id, (int32)*index, (ann_type)*type, &otag, &oref); *tag = otag; *ref = oref; return ret; } /*----------------------------------------------------------------------------- * Name: afidtagref * Purpose: * Inputs: * Returns: see ANid2tagref() * Users: Fortran Users * Invokes: ANid2tagerf() *---------------------------------------------------------------------------*/ intf nafidtagref(intf *ann_id, intf *tag, intf *ref) { intf ret; uint16 otag, oref; ret = (intf)ANid2tagref((int32)*ann_id, &otag, &oref); *tag = otag; *ref = oref; return ret; } /*----------------------------------------------------------------------------- * Name: aftagrefid * Purpose: * Inputs: * Returns: see ANtagref2id() * Users: Fortran Users * Invokes: ANtagref2id() *---------------------------------------------------------------------------*/ intf naftagrefid(intf *an_id, intf *tag, intf *ref) { return (intf)ANtagref2id((int32)*an_id, (uint16)*tag, (uint16)*ref); } /*----------------------------------------------------------------------------- * Name: afatypetag * Purpose: * Inputs: * Returns: see ANatype2tag() * Users: Fortran Users * Invokes: ANatype2tag() *---------------------------------------------------------------------------*/ intf nafatypetag(intf *atype) { return (intf)ANatype2tag((ann_type)*atype); } /*----------------------------------------------------------------------------- * Name: aftagatype * Purpose: * Inputs: * Returns: see ANtag2atype() * Users: Fortran Users * Invokes: ANtag2atype() *---------------------------------------------------------------------------*/ intf naftagatype(intf *tag) { return (intf)ANtag2atype((uint16)*tag); } hdf4-hdf4.3.1/hdf/src/mfgr.c000066400000000000000000007253661503061704500155010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE mfgr.c PURPOSE Multi-file access to "generic" raster images REMARKS These functions perform manipulate "generic" raster images. These raster images are composed of "pixels" which can have multiple components of data-types other than 8-bit unsigned integers. Each image can have multiple palettes associated with it and other 'attributes' in the same "name=value" style as the SD*() routines have. DESIGN These routines are modeled loosely after the previous single-file DFGR*() routines and the current SD*() routines. There is a table of pointers to sets of raster images stored in the files which have been initialized, similar to the current Vgroup/Vdata implementation. The table contains entries for each file which contain pointers to set of information about the "global" attributes (for this interface) and to the set of raster images in the file. Each set of information for each file is stored in memory using the tbbt*() routines. Each raster image (RI) in the file will be stored in one Vgroup which will contain all the RIs created as well as the "global" raster attributes. Each RI in the file will be stored as a Vgroup containing the image data for each RI as well as the palettes and dataset attributes for that image. Also, each RI Vgroup will have a corresponding RIG created with it and maintained in parallel, for backward compatibility. BUGS/LIMITATIONS Currently the following design limitations are still in place: 1 - Cannot have pixels or palette entries which contain mixed variable types, ie. all the pixel/palette components must be of the same number type. 2 - Currently all the components must be of valid HDF number types, fractional bytes (ie. 6-bit components) or 'plain' multiple byte values are not handled, although they can be packed into the next larger sized number type in order to hold them. EXPORTED ROUTINES File/Interface Functions: int32 GRstart(int32 hdf_file_id) - Initializes the GR interface for a particular file. Returns a 'grid' to specify the GR group to operate on. intn GRfileinfo(int32 grid, int32 *n_datasets, int32 *n_attrs) - Returns information about the datasets and "global" attributes for the GR interface. intn GRend(int32 grid) - Terminates multi-file GR access for a file. Image I/O Functions: int32 GRcreate(int32 grid,char *name,int32 ncomp,int32 nt,int32 il,int32 dimsizes[2]) - Defines a raster image in a file. Returns a 'riid' to work with the new raster image. int32 GRselect(int32 grid,int32 index) - Selects an existing RI to operate on. int32 GRnametoindex(int32 grid,char *name) - Maps a RI name to an index which is returned. intn GRgetiminfo(int32 riid,char *name,int32 *ncomp,int32 *nt,int32 *il,int32 dimsizes[2],int32 *n_attr) - Gets information about an RI which has been selected/created. intn GRgetnluts(int32 riid) - Get the number of palettes (LUTs) for an image intn GRwriteimage(int32 riid,int32 start[2],int32 stride[2],int32 count[2],void * data) - Writes image data to an RI. Partial dataset writing and subsampling is allowed, but only with the dimensions of the dataset (ie. no UNLIMITED dimension support) intn GRreadimage(int32 riid,int32 start[2],int32 stride[2],int32 count[2],void * data) - Read image data from an RI. Partial reads and subsampling are allowed. intn GRendaccess(int32 riid) - End access to an RI. Dimension Functions: int32 GRgetdimid(int32 riid,int32 index) - Get a dimension id ('dimid') for an RI to assign attributes to. [Later] intn GRsetdimname(int32 dimid,char *name) - Set the name of a dimension. [Later] int32 GRdiminfo(int32 dimid,char *name,int32 *size,int32 *n_attr) - Get information about the dimensions attributes and size. [Later] ID/Ref/Index Functions: uint16 GRidtoref(int32 riid) - Maps an riid to a reference # for annotating or including in a Vgroup. int32 GRreftoindex(int32 hdf_file_id,uint16 ref) - Maps the reference # of an RI into an index which can be used with GRselect. Interlace Request Functions: intn GRreqlutil(int32 riid,intn il) - Request that the next LUT read from an RI have a particular interlace. intn GRreqimageil(int32 riid,intn il) - Request that the image read from an RI have a particular interlace. LUT/Palette I/O Functions: int32 GRgetlutid(int32 riid,int32 index) - Get a palette id ('palid') for an RI. uint16 GRluttoref(int32 lutid) - Maps a lutid to a reference # for annotating of including in a Vgroup. intn GRgetlutinfo(int32 lutid,int32 *ncomp,int32 *nt,int32 *il,int32 *nentries) - Gets information about a palette. intn GRwritelut(int32 lutid,int32 ncomps,int32 nt,int32 il,int32 nentries,void * data) - Writes out a palette for an RI. intn GRreadlut(int32 palid,void * data) - Reads a palette from an RI. Special Element Functions: int32 GRsetexternalfile(int32 riid,char *filename,int32 offset) - Makes the image data of an RI into an external element special element. intn GRsetaccesstype(int32 riid,uintn accesstype) - Sets the access for an RI to be either serial or parallel I/O. intn GRsetcompress(int32 riid,comp_coder_t comp_type,comp_info *cinfo) - Makes the image data of an RI into a compressed special element. intn GRgetcompress(int32 riid,comp_coder_t* comp_type,comp_info *cinfo) - Retrieves the compression information of a raster image's data. intn GRgetcompinfo(int32 riid,comp_coder_t* comp_type,comp_info *cinfo) - Retrieves the compression information of a raster image's data. Will replace GRgetcompress in the future. Attribute Functions: intn GRsetattr(int32 dimid|riid|grid,char *name,int32 attr_nt,int32 count,void * data) - Write an attribute for an object. int32 GRattrinfo(int32 dimid|riid|grid,int32 index,char *name,int32 *attr_nt,int32 *count) - Get attribute information for an object. intn GRgetattr(int32 dimid|riid|grid,int32 index,void * data) - Read an attribute for an object. int32 GRfindattr(int32 dimid|riid|grid,char *name) - Get the index of an attribute with a given name for an object. Chunking Functions: GRsetchunk -- make GR a chunked GR GRgetchunkinfo -- get Info on GR GRwritechunk -- write the specified chunk to the GR GRreadchunk -- read the specified chunk to the GR GRsetchunkcache -- maximum number of chunks to cache LOCAL ROUTINES intn GRIil_convert(const void * inbuf,gr_interlace_t inil,void * outbuf, gr_interlace_t outil,int32 dims[2],int32 ncomp,int32 nt); - Copy a pixel buffer from one interlace to another. */ #include "hdf_priv.h" #include "mfgr_priv.h" #ifdef H4_HAVE_LIBSZ /* we have the library */ #include "szlib.h" #endif /* Local pre-processor macros */ #define XDIM 0 #define YDIM 1 /* * -------------------------------------------------------------------- * PRIVATE data structure and routines. * -------------------------------------------------------------------- */ static TBBT_TREE *gr_tree = NULL; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; typedef struct image_info_struct { uint16 grp_tag, grp_ref; /* tag/ref of the group the image is in */ uint16 img_tag, img_ref; /* tag/ref of the image itself */ uint16 aux_ref; /* ref of aux. info about an image */ int32 offset; /* offset of the image data */ } imginfo_t; static intn GRIupdatemeta(int32 hdf_file_id, ri_info_t *img_ptr); static intn GRIupdateRIG(int32 hdf_file_id, ri_info_t *img_ptr); static intn GRIupdateRI(int32 hdf_file_id, ri_info_t *img_ptr); static intn GRIup_attr_data(int32 hdf_file_id, at_info_t *attr_ptr); static intn GRIstart(void); static intn GRIgetaid(ri_info_t *img_ptr, intn acc_perm); static intn GRIisspecial_type(int32 file_id, uint16 tag, uint16 ref); #ifdef H4_HAVE_LIBSZ /* we have the library */ static intn GRsetup_szip_parms(ri_info_t *ri_ptr, comp_info *c_info, int32 *cdims); #endif /*-------------------------------------------------------------------------- NAME rigcompare PURPOSE Compare two B-tree keys for equality. USAGE intn rigcompare(k1, k2, cmparg) void * k1, k2; IN: ptrs to the keys for the tree elements intn cmparg; IN/OUT: unused RETURNS Returns negative for k2>k1, positive for k2grtree, GRIridestroynode, NULL); tbbtdfree(gr_ptr->gattree, GRIattrdestroynode, NULL); free(gr_ptr); } /* GRIgrdestroynode */ /*-------------------------------------------------------------------------- NAME GRIattrdestroynode PURPOSE Frees B-Tree attribute nodes. USAGE void GRIattrdestroynode(n) void * n; IN: ptr to the attr node to delete RETURNS none DESCRIPTION Called internally by the tbbt*() routines, this routine is used when deleting trees. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS *** Only called by B-tree routines, should _not_ be called externally *** EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ void GRIattrdestroynode(void *n) { at_info_t *at_ptr = (at_info_t *)n; free(at_ptr->name); free(at_ptr->data); free(at_ptr); } /* GRIattrdestroynode */ /*-------------------------------------------------------------------------- NAME GRIridestroynode PURPOSE Frees B-Tree raster-image nodes. USAGE void GRIridestroynode(n) void * n; IN: ptr to the attr node to delete RETURNS none DESCRIPTION Called internally by the tbbt*() routines, this routine is used when deleting trees. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS *** Only called by B-tree routines, should _not_ be called externally *** EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ void GRIridestroynode(void *n) { ri_info_t *ri_ptr = (ri_info_t *)n; free(ri_ptr->name); free(ri_ptr->ext_name); tbbtdfree(ri_ptr->lattree, GRIattrdestroynode, NULL); free(ri_ptr->fill_value); free(ri_ptr); } /* GRIridestroynode */ /* -------------------------- Get_grfile ------------------------ */ /* Looks in the TBBT gr_tree for the file ID of a file. Returns a pointer to the gr_info_t for that file on success, otherwise NULL. */ static gr_info_t * Get_grfile(HFILEID f) { void **t; /* vfile_t pointer from tree */ int32 key = (int32)f; t = (void **)tbbtdfind(gr_tree, &key, NULL); return (gr_info_t *)(t == NULL ? NULL : *t); } /* end Get_grfile() */ /*-------------------------------------------------------------------------- NAME GRIisspecial_type PURPOSE Returns the special type if the given element is special. USAGE intn GRIisspecial_type(file_id, tag, ref) int32 file_id; IN: file id uint16 tag; IN: tag of the element uint16 ref; IN: ref of the element RETURNS Special type: SPECIAL_LINKED SPECIAL_EXT SPECIAL_COMP SPECIAL_VLINKED SPECIAL_CHUNKED SPECIAL_BUFFERED SPECIAL_COMPRAS or 0 if the element is not special element. DESCRIPTION Called internally by the GRIget_image_list to allow a chunked or linked-block element to proceed even though its offset is 0. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS *** Only called by library routines, should _not_ be called externally *** EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIisspecial_type(int32 file_id, uint16 tag, uint16 ref) { accrec_t *access_rec = NULL; /* access element record */ int32 aid; intn ret_value = 0; /* clear error stack */ HEclear(); /* start read access on the access record of the data element, which is being inquired for its special information */ aid = Hstartread(file_id, tag, ref); /* get the access_rec pointer */ access_rec = HAatom_object(aid); if (access_rec == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* only return the valid special code, anything else return 0 */ switch (access_rec->special) { case SPECIAL_LINKED: case SPECIAL_EXT: case SPECIAL_COMP: case SPECIAL_VLINKED: case SPECIAL_CHUNKED: case SPECIAL_BUFFERED: case SPECIAL_COMPRAS: ret_value = access_rec->special; break; default: ret_value = 0; } /* switch */ if (Hendaccess(aid) == FAIL) HERROR(DFE_CANTENDACCESS); done: if (ret_value == FAIL) { /* Error condition cleanup */ /* end access to the aid if it's been accessed */ if (aid != 0) if (Hendaccess(aid) == FAIL) HERROR(DFE_CANTENDACCESS); } return ret_value; } /* GRIisspecial_type */ /* -------------------------- New_grfile ------------------------ */ /* Creates gr_info_t structure and adds it to the tree Returns a pointer to the gr_info_t for that file on success, otherwise NULL. */ static gr_info_t * New_grfile(HFILEID f) { gr_info_t *g; /* Allocate the gr_info_t structure */ if (NULL == (g = (gr_info_t *)calloc(1, sizeof(gr_info_t)))) return NULL; /* Assign the file ID & insert into the tree */ g->hdf_file_id = f; tbbtdins(gr_tree, g, NULL); /* insert the vg instance in B-tree */ return g; } /* end New_grfile() */ /* -------------------------- Store_imginfo ------------------------ */ /* Stores information into the image_info_struct. Added to refactor repeated code. -BMR, Jun 7, 2015 */ static void Store_imginfo(imginfo_t *imginfo, uint16 grp_tag, uint16 grp_ref, uint16 img_tag, uint16 img_ref) { imginfo->grp_tag = (uint16)grp_tag; imginfo->grp_ref = (uint16)grp_ref; imginfo->img_tag = (uint16)img_tag; imginfo->img_ref = (uint16)img_ref; } /* end Store_imginfo() */ /* -------------------------- Get_oldimgs ------------------------ */ /* Find all images of tag searched_tag in the file and store their information in the list of image_info_structs. The stored information include the image's tag/ref, DFTAG_NULL/DFREF_WILDCARD for the group's tag/ref, and the image's offset in the file. Returns the number of images on success, or NULL, otherwise. Added to refactor repeated code. -BMR, Jul 13, 2015 */ static intn Get_oldimgs(int32 file_id, imginfo_t *img_info, uint16 searched_tag) { uint16 find_tag, find_ref; int32 find_off, find_len; intn num_imgs = 0; imginfo_t *ptr = img_info; find_tag = find_ref = 0; find_off = find_len = 0; while (Hfind(file_id, searched_tag, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { /* DFTAG_NULL is passed in for parent group because old images don't have group structure. */ Store_imginfo(ptr, DFTAG_NULL, DFREF_WILDCARD, find_tag, find_ref); ptr->offset = find_off; /* store offset */ num_imgs++; ptr++; } /* end while */ return num_imgs; } /* end Get_oldimgs() */ /* -------------------------- Init_diminfo ------------------------ */ /* Initializes the dimension information. Added to refactor repeated code. -BMR, Apr 23, 2015 */ static void Init_diminfo(dim_info_t *dim_info) { /* Init_diminfo */ dim_info->dim_ref = DFREF_WILDCARD; dim_info->xdim = 256; dim_info->ydim = 1; dim_info->ncomps = 3; dim_info->nt = DFNT_UINT8; dim_info->file_nt_subclass = DFNTF_HDFDEFAULT; dim_info->il = MFGR_INTERLACE_PIXEL; dim_info->nt_tag = DFTAG_NULL; dim_info->nt_ref = DFREF_WILDCARD; dim_info->comp_tag = DFTAG_NULL; dim_info->comp_ref = DFREF_WILDCARD; } /* end Init_diminfo */ /* -------------------------- Decode_diminfo ------------------------ */ /* Decodes dimension information. The parameter *p points to a buffer containing the data read from the file. The data is the previously encoded dimension information. Added to refactor repeated code. -BMR, Apr 23, 2015 */ static void Decode_diminfo(uint8 *p, dim_info_t *dim_info) { int16 int16var; /* temp var */ INT32DECODE(p, dim_info->xdim); INT32DECODE(p, dim_info->ydim); UINT16DECODE(p, dim_info->nt_tag); UINT16DECODE(p, dim_info->nt_ref); INT16DECODE(p, int16var); dim_info->ncomps = (int32)int16var; INT16DECODE(p, dim_info->il); UINT16DECODE(p, dim_info->comp_tag); UINT16DECODE(p, dim_info->comp_ref); } /* Decode_diminfo */ /*-------------------------------------------------------------------------- NAME GRIget_image_list PURPOSE Find all the unique raster images in the file USAGE intn GRIget_image_list(hdf_file_id,gr_info) int32 hdf_file_id; IN: file ID from Hopen gr_info_t *gr_info; IN: # of unique images found RETURNS Return SUCCEED/FAIL DESCRIPTION Sifts through all the images in a file and compiles a list of all the unique ones. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS o Count the maximum number of possible raster images in the file o Search through the file for raster images - Look for RI8s - Look for RIGs - Look for an RI Vgroup, then read in RIs & "global" attributes. o Eliminate duplicate images o Throw all the remaining RI8s, RIGs, and RIs into an internal table with appropriate information about each of them EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIget_image_list(int32 file_id, gr_info_t *gr_ptr) { uint16 gr_ref; /* ref # of the Vgroup containing new-style RIs */ intn curr_image; /* current image gathering information about */ intn nimages; /* total number of potential images */ intn noldimages; /* count of old imgs returned by Get_oldimgs */ int32 nri, nci, nri8, nci8, nii8, nvg; /* number of RIs, CIs, RI8s, CI8s & II8s & Vgroups */ uint16 find_tag, find_ref; /* storage for tag/ref pairs found */ int32 find_off, find_len; /* storage for offset/lengths of tag/refs found */ imginfo_t *img_info; /* image info list */ intn i, j; /* local counting variable */ intn ret_value = SUCCEED; HEclear(); /* In a completely psychotic file, there could be RIGs with no corresponding RI8s and also RI8s with no corresponding RIGs, so assume the worst case and then run through them all to eliminate matched pairs */ nri = Hnumber(file_id, DFTAG_RI); /* count the number of RI and CIs */ if (nri == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nci = Hnumber(file_id, DFTAG_CI); /* count the number of RI and CIs */ if (nci == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nri8 = Hnumber(file_id, DFTAG_RI8); /* add the number of RI8, CI8s and II8s */ if (nri8 == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nci8 = Hnumber(file_id, DFTAG_CI8); if (nci8 == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nii8 = Hnumber(file_id, DFTAG_II8); if (nii8 == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nvg = Hnumber(file_id, RI_TAG); if (nvg == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); nimages = (intn)(nri + nci + nri8 + nci8 + nii8 + nvg); /* if there are no images just close the file and get out */ if (nimages == 0) { ret_value = (SUCCEED); goto done; } /* Get space to store the image offsets */ if ((img_info = (imginfo_t *)malloc(nimages * sizeof(imginfo_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); memset(img_info, 0, (size_t)nimages * sizeof(imginfo_t)); /* search through the GR group for raster images & global attributes */ curr_image = 0; if ((gr_ref = (uint16)Vfind(file_id, GR_NAME)) != 0) { int32 gr_key; /* Vgroup key of the GR Vgroup */ gr_ptr->gr_ref = gr_ref; /* squirrel this away for later use */ if ((gr_key = Vattach(file_id, (int32)gr_ref, "r")) != FAIL) { int32 nobjs = Vntagrefs(gr_key); /* The number of objects in the Vgroup */ int32 img_key; /* Vgroup key of an image */ int32 grp_tag, grp_ref; /* a tag/ref in the Vgroup */ int32 img_tag, img_ref; /* image tag/ref in the Vgroup */ char textbuf[VGNAMELENMAX + 1]; /* buffer to store the name in */ for (i = 0; i < nobjs; i++) { if (Vgettagref(gr_key, i, &grp_tag, &grp_ref) == FAIL) continue; switch (grp_tag) { case DFTAG_VG: /* should be an image */ if ((img_key = Vattach(file_id, grp_ref, "r")) != FAIL) { if (Vgetclass(img_key, textbuf) != FAIL) { if (!strcmp(textbuf, RI_NAME)) { /* it is an image, get the image's tag/ref */ for (j = 0; j < Vntagrefs(img_key); j++) { if (Vgettagref(img_key, j, &img_tag, &img_ref) == FAIL) continue; /* Make sure the tag is correct, then store the image's info and the tag/ref of the vgroup that represents the image into image_info_struct and increment image count */ if (img_tag == DFTAG_RI || img_tag == DFTAG_CI) { Store_imginfo(&img_info[curr_image], grp_tag, grp_ref, img_tag, img_ref); img_info[curr_image].offset = Hoffset( file_id, (uint16)img_tag, (uint16)img_ref); /* store offset */ curr_image++; break; } /* end if */ } /* end for */ } /* end if */ } /* end if */ Vdetach(img_key); } /* end if */ break; /* case DFTAG_VG, an image */ case DFTAG_VH: /* must be a "global" attribute */ { at_info_t *new_attr; /* attr to add to the set of global attrs */ int32 at_key; /* VData key for the attribute */ if ((new_attr = (at_info_t *)malloc(sizeof(at_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_attr->ref = (uint16)grp_ref; new_attr->index = gr_ptr->gattr_count; new_attr->data_modified = FALSE; new_attr->new_at = FALSE; new_attr->data = NULL; /* Open the vdata to read the attr's info */ if ((at_key = VSattach(file_id, (int32)grp_ref, "r")) != FAIL) { char *fname; /* Make certain the attribute only has one field */ if (VFnfields(at_key) != 1) { VSdetach(at_key); free(new_attr); break; } new_attr->nt = VFfieldtype(at_key, 0); new_attr->len = VFfieldorder(at_key, 0); if (new_attr->len == 1) new_attr->len = VSelts(at_key); /* Get the name of the attribute */ if ((fname = VFfieldname(at_key, 0)) == NULL) { sprintf(textbuf, "Attribute #%d", (int)new_attr->index); if ((new_attr->name = (char *)malloc(strlen(textbuf) + 1)) == NULL) { VSdetach(at_key); free(new_attr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } strcpy(new_attr->name, textbuf); } else { if ((new_attr->name = (char *)malloc(strlen(fname) + 1)) == NULL) { VSdetach(at_key); free(new_attr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } strcpy(new_attr->name, fname); } /* insert the attr instance in B-tree */ tbbtdins(gr_ptr->gattree, new_attr, NULL); VSdetach(at_key); } /* end if */ /* increment the number of GR global attributes */ gr_ptr->gattr_count++; } /* end case DFTAG_VH, a global attribute */ break; default: break; } /* end switch */ } /* end for */ Vdetach(gr_key); } /* end if */ } /* end if */ /* Get information about the RIGs in the file */ find_tag = find_ref = 0; while (Hfind(file_id, DFTAG_RIG, DFREF_WILDCARD, &find_tag, &find_ref, &find_off, &find_len, DF_FORWARD) == SUCCEED) { uint16 elt_tag, elt_ref; /* tag/ref of items in a RIG */ int32 group_id; /* group ID for looking at RIG's */ /* read RIG into memory */ if ((group_id = DFdiread(file_id, DFTAG_RIG, find_ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); elt_tag = elt_ref = 0; /* initialize bogus tag/ref */ while (DFdiget(group_id, &elt_tag, &elt_ref) != FAIL) { /* get next tag/ref */ if (elt_tag == DFTAG_CI || elt_tag == DFTAG_RI) { if (elt_tag != DFTAG_NULL && elt_ref != DFREF_NONE) /* make certain we found an image */ { /* store the information about the image */ Store_imginfo(&img_info[curr_image], DFTAG_RIG, find_ref, elt_tag, elt_ref); img_info[curr_image].offset = Hoffset(file_id, elt_tag, elt_ref); /* store offset */ curr_image++; } /* end if */ } /* end if */ } /* end while */ } /* end while */ /* go through the RI8s */ noldimages = Get_oldimgs(file_id, &img_info[curr_image], DFTAG_RI8); curr_image = curr_image + noldimages; /* go through the CI8s */ noldimages = Get_oldimgs(file_id, &img_info[curr_image], DFTAG_CI8); curr_image = curr_image + noldimages; /* go through the II8s */ noldimages = Get_oldimgs(file_id, &img_info[curr_image], DFTAG_II8); curr_image = curr_image + noldimages; /* Eliminate duplicate images by using the offset of the image data */ /* Here's a table for how the images will be eliminated: */ /* img_info[i].grp_tag VG RIG NULL(RI8) +-----------------+-----------------+--------+ VG | j=NULL | i=NULL | i=NULL | | | j.aux=i.grp_ref | | +-----------------+-----------------+--------+ img_info[j].grp_tag RIG| j=NULL | j=NULL | i=NULL | | i.aux=j.grp_ref | | | +-----------------+-----------------+--------+ NULL(RI8)| j=NULL | j=NULL | j=NULL | +-----------------+-----------------+--------+ */ for (i = 0; i < curr_image; i++) { /* go through the images looking for duplicates */ if (img_info[i].img_tag != DFTAG_NULL) for (j = i + 1; j < curr_image; j++) { /* if their refs are different, they're not duplicate, skip */ if (img_info[i].img_ref == img_info[j].img_ref) if (img_info[j].img_tag != DFTAG_NULL) { /* If the element is special, get its type, to allow linked block or chunked images to go into the if statement below in order for the duplicate image be eliminated - bug #814, BMR Feb, 2005 */ intn special_type = GRIisspecial_type(file_id, img_info[i].img_tag, img_info[i].img_ref); if (((img_info[i].offset != INVALID_OFFSET && img_info[i].offset != 0) && img_info[i].offset == img_info[j].offset) || (img_info[i].offset == 0 && (special_type == SPECIAL_LINKED || special_type == SPECIAL_CHUNKED))) { /* eliminate the oldest tag from the match */ switch (img_info[i].img_tag) { case DFTAG_RI: case DFTAG_CI: /* Newer style raster image, found in RIG & Vgroup */ if (img_info[j].grp_tag == DFTAG_RIG) { img_info[j].img_tag = DFTAG_NULL; if (img_info[i].grp_tag == DFTAG_VG) img_info[i].aux_ref = img_info[j].grp_ref; } /* end if */ else { if (img_info[i].grp_tag == DFTAG_VG) img_info[j].img_tag = DFTAG_NULL; else { img_info[j].img_tag = DFTAG_NULL; if (img_info[i].grp_tag == DFTAG_RIG) img_info[j].aux_ref = img_info[i].grp_ref; } /* end else */ } /* end else */ break; case DFTAG_RI8: case DFTAG_CI8: case DFTAG_II8: /* Eldest style raster image, no grouping */ if (img_info[j].img_tag != DFTAG_RI8 && img_info[j].img_tag != DFTAG_CI8 && img_info[j].img_tag != DFTAG_II8) img_info[i].img_tag = DFTAG_NULL; else img_info[j].img_tag = DFTAG_NULL; break; default: /* an image which was eliminated from the list of images */ break; } /* end switch */ } /* end if */ } /* end if */ } /* end for */ } /* end for go through the images looking for duplicates */ /* Ok, now sort through the file for information about each image found */ for (i = 0; i < curr_image; i++) { if (img_info[i].img_tag != DFTAG_NULL) { switch (img_info[i].grp_tag) { case DFTAG_VG: /* New style raster image, found in a Vgroup */ { ri_info_t *new_image; /* ptr to the image to read in */ int32 img_key; /* Vgroup key of an image */ int32 img_tag, img_ref; /* image tag/ref in the Vgroup */ char textbuf[VGNAMELENMAX + 1]; /* buffer to store the name in */ uint8 ntstring[4]; /* buffer to store NT info */ uint8 GRtbuf[64]; /* local buffer for reading RIG info */ if ((img_key = Vattach(file_id, (int32)img_info[i].grp_ref, "r")) != FAIL) { uint16 name_len; if ((new_image = (ri_info_t *)malloc(sizeof(ri_info_t))) == NULL) { free(img_info); /* free offsets */ Hclose(file_id); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* Initialize all the fields in the image structure to zeros */ memset(new_image, 0, sizeof(ri_info_t)); /* Get the name of the image */ if (Vgetnamelen(img_key, &name_len) == FAIL) name_len = 20; /* for "Raster Image #%d" */ if ((new_image->name = (char *)malloc(name_len + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (Vgetname(img_key, new_image->name) == FAIL) sprintf(new_image->name, "Raster Image #%d", (int)i); /* Initialize the local attribute tree */ new_image->lattr_count = 0; new_image->lattree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (new_image->lattree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_image->ri_ref = img_info[i].grp_ref; if (img_info[i].aux_ref != 0) new_image->rig_ref = img_info[i].aux_ref; else new_image->rig_ref = DFREF_WILDCARD; for (j = 0; j < Vntagrefs(img_key); j++) { if (Vgettagref(img_key, j, &img_tag, &img_ref) == FAIL) continue; /* parse this tag/ref pair */ switch (img_tag) { case DFTAG_RI: /* Regular image data */ new_image->img_tag = (uint16)img_tag; new_image->img_ref = (uint16)img_ref; if (SPECIALTAG(new_image->img_tag) == TRUE) { new_image->use_buf_drvr = 1; } break; case DFTAG_CI: /* Compressed image data */ new_image->img_tag = (uint16)img_tag; new_image->img_ref = (uint16)img_ref; new_image->use_buf_drvr = 1; new_image->use_cr_drvr = 1; break; case DFTAG_LUT: /* Palette */ new_image->lut_tag = (uint16)img_tag; new_image->lut_ref = (uint16)img_ref; /* Fill in some default palette dimension info, in case there isn't a * DFTAG_LD for this palette */ if (new_image->lut_dim.dim_ref == 0) Init_diminfo(&(new_image->lut_dim)); break; case DFTAG_LD: /* Palette dimensions */ { uint8 *p = GRtbuf; if (Hgetelement(file_id, (uint16)img_tag, (uint16)img_ref, GRtbuf) != FAIL) Decode_diminfo(p, &(new_image->lut_dim)); else HGOTO_ERROR(DFE_READERROR, FAIL); /* read NT */ if (Hgetelement(file_id, new_image->lut_dim.nt_tag, new_image->lut_dim.nt_ref, ntstring) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) break; /* set NT info */ new_image->lut_dim.dim_ref = (uint16)img_ref; new_image->lut_dim.nt = (int32)ntstring[1]; new_image->lut_dim.file_nt_subclass = (int32)ntstring[3]; if ((new_image->lut_dim.file_nt_subclass != DFNTF_HDFDEFAULT) && (new_image->lut_dim.file_nt_subclass != DFNTF_PC) && (new_image->lut_dim.file_nt_subclass != DFKgetPNSC(new_image->lut_dim.nt, DF_MT))) break; /* unknown subclass */ if (new_image->lut_dim.file_nt_subclass != DFNTF_HDFDEFAULT) { /* if native or little endian */ if (new_image->lut_dim.file_nt_subclass != DFNTF_PC) /* native */ new_image->lut_dim.nt |= DFNT_NATIVE; else /* little endian */ new_image->lut_dim.nt |= DFNT_LITEND; } /* end if */ } break; case DFTAG_ID: /* Image description info */ { uint8 *p = GRtbuf; if (Hgetelement(file_id, (uint16)img_tag, (uint16)img_ref, GRtbuf) != FAIL) Decode_diminfo(p, &(new_image->img_dim)); else HGOTO_ERROR(DFE_READERROR, FAIL); /* read NT */ if (Hgetelement(file_id, new_image->img_dim.nt_tag, new_image->img_dim.nt_ref, ntstring) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) break; /* set NT info */ new_image->img_dim.dim_ref = (uint16)img_ref; new_image->img_dim.nt = (int32)ntstring[1]; new_image->img_dim.file_nt_subclass = (int32)ntstring[3]; if ((new_image->img_dim.file_nt_subclass != DFNTF_HDFDEFAULT) && (new_image->img_dim.file_nt_subclass != DFNTF_PC) && (new_image->img_dim.file_nt_subclass != DFKgetPNSC(new_image->img_dim.nt, DF_MT))) break; /* unknown subclass */ if (new_image->img_dim.file_nt_subclass != DFNTF_HDFDEFAULT) { /* if native or little endian */ if (new_image->img_dim.file_nt_subclass != DFNTF_PC) /* native */ new_image->img_dim.nt |= DFNT_NATIVE; else /* little endian */ new_image->img_dim.nt |= DFNT_LITEND; } /* end if */ break; } /* end case DFTAG_ID */ case DFTAG_VH: /* Attribute information */ { at_info_t *new_attr; /* attr to add to the local attr set */ int32 at_key; /* VData key for the attribute */ if ((new_attr = (at_info_t *)malloc(sizeof(at_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_attr->ref = (uint16)img_ref; new_attr->index = new_image->lattr_count; new_attr->data_modified = FALSE; new_attr->new_at = FALSE; new_attr->data = NULL; if ((at_key = VSattach(file_id, (int32)img_ref, "r")) != FAIL) { char *fname; /* Make certain the attribute only has one field */ if (VFnfields(at_key) != 1) { VSdetach(at_key); free(new_attr); break; } new_attr->nt = VFfieldtype(at_key, 0); new_attr->len = VFfieldorder(at_key, 0); if (new_attr->len == 1) new_attr->len = VSelts(at_key); /* Get the name of the attribute */ if ((fname = VFfieldname(at_key, 0)) == NULL) { sprintf(textbuf, "Attribute #%d", (int)new_attr->index); if ((new_attr->name = (char *)malloc(strlen(textbuf) + 1)) == NULL) { VSdetach(at_key); free(new_attr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } strcpy(new_attr->name, textbuf); } else { if ((new_attr->name = (char *)malloc(strlen(fname) + 1)) == NULL) { VSdetach(at_key); free(new_attr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } strcpy(new_attr->name, fname); } tbbtdins(new_image->lattree, new_attr, NULL); /* insert the attr instance in B-tree */ VSdetach(at_key); } /* end if */ new_image->lattr_count++; break; } /* end case DFTAG_VH */ default: /* Unknown tag */ break; } /* end switch */ } /* end for */ new_image->index = gr_ptr->gr_count; new_image->gr_ptr = gr_ptr; /* point up the tree */ tbbtdins(gr_ptr->grtree, new_image, NULL); /* insert the new image into B-tree */ gr_ptr->gr_count++; Vdetach(img_key); } /* end if */ } /* end case DFTAG_VG */ break; case DFTAG_RIG: /* Older style raster image, found in RIG */ { int32 GroupID; uint16 elt_tag, elt_ref; ri_info_t *new_image; /* ptr to the image to read in */ char textbuf[VGNAMELENMAX + 1]; /* buffer to store the name in */ uint8 ntstring[4]; /* buffer to store NT info */ uint8 GRtbuf[64]; /* local buffer for reading RIG info */ /* read RIG into memory */ if ((GroupID = DFdiread(file_id, DFTAG_RIG, img_info[i].grp_ref)) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); if ((new_image = (ri_info_t *)malloc(sizeof(ri_info_t))) == NULL) { free(img_info); /* free offsets */ Hclose(file_id); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* Initialize all the fields in the image structure to zeros */ memset(new_image, 0, sizeof(ri_info_t)); /* Get the name of the image */ sprintf(textbuf, "Raster Image #%d", (int)i); if ((new_image->name = (char *)malloc(strlen(textbuf) + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); strcpy(new_image->name, textbuf); new_image->name_generated = TRUE; /* Initialize the local attribute tree */ new_image->lattree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (new_image->lattree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_image->ri_ref = DFREF_WILDCARD; new_image->rig_ref = img_info[i].grp_ref; while (DFdiget(GroupID, &elt_tag, &elt_ref) != FAIL) { /* get next tag/ref */ switch (elt_tag) { /* process tag/ref */ case DFTAG_RI: /* regular image data */ new_image->img_tag = elt_tag; new_image->img_ref = elt_ref; if (SPECIALTAG(new_image->img_tag) == TRUE) { new_image->use_buf_drvr = 1; } /* end if */ break; case DFTAG_CI: /* compressed image data */ new_image->img_tag = elt_tag; new_image->img_ref = elt_ref; new_image->use_buf_drvr = 1; new_image->use_cr_drvr = 1; break; case DFTAG_LUT: /* Palette */ new_image->lut_tag = elt_tag; new_image->lut_ref = elt_ref; /* Fill in some default palette dimension info, in case there isn't a DFTAG_LD for this palette */ if (new_image->lut_dim.dim_ref == 0) { Init_diminfo(&(new_image->lut_dim)); } /* end if */ break; case DFTAG_LD: /* Palette dimensions */ { uint8 *p = GRtbuf; if (Hgetelement(file_id, elt_tag, elt_ref, GRtbuf) != FAIL) Decode_diminfo(p, &(new_image->lut_dim)); else { DFdifree(GroupID); HGOTO_ERROR(DFE_READERROR, FAIL); } /* read NT */ if (Hgetelement(file_id, new_image->lut_dim.nt_tag, new_image->lut_dim.nt_ref, ntstring) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_READERROR, FAIL); } /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) break; /* set NT info */ new_image->lut_dim.dim_ref = elt_ref; new_image->lut_dim.nt = (int32)ntstring[1]; new_image->lut_dim.file_nt_subclass = (int32)ntstring[3]; if ((new_image->lut_dim.file_nt_subclass != DFNTF_HDFDEFAULT) && (new_image->lut_dim.file_nt_subclass != DFNTF_PC) && (new_image->lut_dim.file_nt_subclass != DFKgetPNSC(new_image->lut_dim.nt, DF_MT))) break; /* unknown subclass */ if (new_image->lut_dim.file_nt_subclass != DFNTF_HDFDEFAULT) { /* if native or little endian */ if (new_image->lut_dim.file_nt_subclass != DFNTF_PC) /* native */ new_image->lut_dim.nt |= DFNT_NATIVE; else /* little endian */ new_image->lut_dim.nt |= DFNT_LITEND; } /* end if */ break; } case DFTAG_ID: /* Image description info */ { uint8 *p = GRtbuf; if (Hgetelement(file_id, elt_tag, elt_ref, GRtbuf) != FAIL) Decode_diminfo(p, &(new_image->img_dim)); else { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* read NT */ if (Hgetelement(file_id, new_image->img_dim.nt_tag, new_image->img_dim.nt_ref, ntstring) == FAIL) { DFdifree(GroupID); HGOTO_ERROR(DFE_GETELEM, FAIL); } /* check for any valid NT */ if (ntstring[1] == DFNT_NONE) break; /* set NT info */ new_image->img_dim.dim_ref = elt_ref; new_image->img_dim.nt = (int32)ntstring[1]; new_image->img_dim.file_nt_subclass = (int32)ntstring[3]; if ((new_image->img_dim.file_nt_subclass != DFNTF_HDFDEFAULT) && (new_image->img_dim.file_nt_subclass != DFNTF_PC) && (new_image->img_dim.file_nt_subclass != DFKgetPNSC(new_image->img_dim.nt, DF_MT))) break; /* unknown subclass */ if (new_image->img_dim.file_nt_subclass != DFNTF_HDFDEFAULT) { /* if native or little endian */ if (new_image->img_dim.file_nt_subclass != DFNTF_PC) /* native */ new_image->img_dim.nt |= DFNT_NATIVE; else /* little endian */ new_image->img_dim.nt |= DFNT_LITEND; } /* end if */ break; } default: /* ignore unknown tags */ break; } /* end switch */ } /* end while */ new_image->index = gr_ptr->gr_count; new_image->gr_ptr = gr_ptr; /* point up the tree */ tbbtdins(gr_ptr->grtree, new_image, NULL); /* insert the new image into B-tree */ gr_ptr->gr_count++; } /* end case DFTAG_RIG */ break; case DFTAG_NULL: /* Eldest style raster image, no grouping */ { ri_info_t *new_image; /* ptr to the image to read in */ char textbuf[VGNAMELENMAX + 1]; /* buffer to store the name in */ uint8 GRtbuf[64]; /* local buffer for reading RIG info */ if ((new_image = (ri_info_t *)malloc(sizeof(ri_info_t))) == NULL) { free(img_info); /* free offsets */ Hclose(file_id); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* Initialize all the fields in the image structure to zeros */ memset(new_image, 0, sizeof(ri_info_t)); /* Get the name of the image */ sprintf(textbuf, "Raster Image #%d", (int)i); if ((new_image->name = (char *)malloc(strlen(textbuf) + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); strcpy(new_image->name, textbuf); new_image->name_generated = TRUE; /* Initialize the local attribute tree */ new_image->lattree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (new_image->lattree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); new_image->ri_ref = DFREF_WILDCARD; new_image->rig_ref = DFREF_WILDCARD; /* Get tag/ref for image */ new_image->img_tag = img_info[i].img_tag; new_image->img_ref = img_info[i].img_ref; /* Get dimension information for this 8-bit image */ /* Initialize dim info to default */ Init_diminfo(&(new_image->img_dim)); /* Reassign valid values */ if (Hgetelement(file_id, DFTAG_ID8, new_image->img_ref, GRtbuf) != FAIL) { uint8 *p; uint16 u; p = GRtbuf; UINT16DECODE(p, u); new_image->img_dim.xdim = (int32)u; UINT16DECODE(p, u); new_image->img_dim.ydim = (int32)u; new_image->img_dim.ncomps = 1; } /* end if */ else HGOTO_ERROR(DFE_GETELEM, FAIL); /* Get palette information */ if (Hexist(file_id, DFTAG_IP8, new_image->img_ref) == SUCCEED) { new_image->lut_tag = DFTAG_IP8; new_image->lut_ref = new_image->img_ref; /* set palette dimensions too */ Init_diminfo(&(new_image->lut_dim)); } /* end if */ else new_image->lut_tag = new_image->lut_ref = DFREF_WILDCARD; new_image->index = gr_ptr->gr_count; new_image->gr_ptr = gr_ptr; /* point up the tree */ tbbtdins(gr_ptr->grtree, new_image, NULL); /* insert the new image into B-tree */ gr_ptr->gr_count++; } /* end case DFTAG_NULL */ break; default: /* an image which was eliminated from the list of images */ break; } /* end switch */ } /* end if */ } /* end for */ free(img_info); /* free image info structures */ done: return ret_value; } /* end GRIget_image_list() */ /*-------------------------------------------------------------------------- NAME GRIil_convert PURPOSE Convert a buffer from one interlace to another. USAGE intn GRIil_convert(inbuf,inil,outbuf,outil,dims,ncomp,nt) const void * inbuf; IN: input buffer gr_interlace_t inil; IN: input buffer's interlace scheme void * outbuf; IN: output buffer gr_interlace_t outil; IN: output buffer's requested interlace scheme int32 dims[2]; IN: dimensions of the buffers int32 ncomp; IN: both buffer's number of components per pixel int32 nt; IN: both buffer's pixel number-type RETURNS Returns SUCCEED/FAIL DESCRIPTION This routine converts between PIXEL, LINE & COMPONENT interlacing schemes. All data written to the disk is written in PIXEL interlacing and converted to/from the user's buffers. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS This routine does no parameter checking, it's assumed to be done at a higher layer. This routine also does not handle the case where the inbuf==outbuf, i.e. switching the interlace 'in-place'. More work would be required to enable this to be done. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRIil_convert(const void *inbuf, gr_interlace_t inil, void *outbuf, gr_interlace_t outil, int32 dims[2], int32 ncomp, int32 nt) { intn ret_value = SUCCEED; uintn pixel_size = (uintn)DFKNTsize((nt | DFNT_NATIVE) & (~DFNT_LITEND)) * (uintn)ncomp; uintn comp_size = (uintn)DFKNTsize((nt | DFNT_NATIVE) & (~DFNT_LITEND)); const void **in_comp_ptr = NULL; /* an array of pointers to each input component */ void **out_comp_ptr = NULL; /* an array of pointers to each output component */ int32 *in_pixel_add = NULL; /* an array of increments for each input pixel moved */ int32 *out_pixel_add = NULL; /* an array of increments for each output pixel moved */ int32 *in_line_add = NULL; /* an array of increments for each input line moved */ int32 *out_line_add = NULL; /* an array of increments for each output line moved */ intn i, j, k; /* local counting variables */ if (inil == outil) /* check for trivial input=output 'conversion' */ memcpy(outbuf, inbuf, (size_t)dims[XDIM] * (size_t)dims[YDIM] * (size_t)pixel_size); else { /* allocate pixel pointer arrays */ if ((in_comp_ptr = malloc(sizeof(void *) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((out_comp_ptr = malloc(sizeof(void *) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate pixel increment arrays */ if ((in_pixel_add = malloc(sizeof(int32) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((out_pixel_add = malloc(sizeof(int32) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* allocate line increment arrays */ if ((in_line_add = malloc(sizeof(int32) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((out_line_add = malloc(sizeof(int32) * (size_t)ncomp)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Set up the input buffer pointers and adders */ switch (inil) { case MFGR_INTERLACE_PIXEL: for (i = 0; i < ncomp; i++) { in_comp_ptr[i] = ((const uint8 *)inbuf) + (size_t)i * comp_size; in_pixel_add[i] = (int32)pixel_size; in_line_add[i] = 0; } /* end for */ break; case MFGR_INTERLACE_LINE: for (i = 0; i < ncomp; i++) { in_comp_ptr[i] = ((const uint8 *)inbuf) + (size_t)i * (size_t)dims[XDIM] * comp_size; in_pixel_add[i] = (int32)comp_size; in_line_add[i] = (int32)((size_t)(ncomp - 1) * (size_t)dims[XDIM] * comp_size); } /* end for */ break; case MFGR_INTERLACE_COMPONENT: for (i = 0; i < ncomp; i++) { in_comp_ptr[i] = ((const uint8 *)inbuf) + (size_t)i * (size_t)dims[YDIM] * (size_t)dims[XDIM] * comp_size; in_pixel_add[i] = (int32)comp_size; in_line_add[i] = 0; } /* end for */ break; default: HGOTO_ERROR(DFE_ARGS, FAIL); } /* end switch */ /* Set up the output buffer pointers and adders */ switch (outil) { case MFGR_INTERLACE_PIXEL: for (i = 0; i < ncomp; i++) { out_comp_ptr[i] = ((uint8 *)outbuf) + (size_t)i * comp_size; out_pixel_add[i] = (int32)pixel_size; out_line_add[i] = 0; } /* end for */ break; case MFGR_INTERLACE_LINE: for (i = 0; i < ncomp; i++) { out_comp_ptr[i] = ((uint8 *)outbuf) + (size_t)i * (size_t)dims[XDIM] * comp_size; out_pixel_add[i] = (int32)comp_size; out_line_add[i] = (int32)((size_t)(ncomp - 1) * (size_t)dims[XDIM] * comp_size); } /* end for */ break; case MFGR_INTERLACE_COMPONENT: for (i = 0; i < ncomp; i++) { out_comp_ptr[i] = ((uint8 *)outbuf) + (size_t)i * (size_t)dims[YDIM] * (size_t)dims[XDIM] * comp_size; out_pixel_add[i] = (int32)comp_size; out_line_add[i] = 0; } /* end for */ break; default: HGOTO_ERROR(DFE_ARGS, FAIL); } /* end switch */ /* now just push pixels from one buffer to another */ for (i = 0; i < dims[YDIM]; i++) { for (j = 0; j < dims[XDIM]; j++) { for (k = 0; k < ncomp; k++) { memcpy(out_comp_ptr[k], in_comp_ptr[k], comp_size); out_comp_ptr[k] = ((uint8 *)out_comp_ptr[k]) + out_pixel_add[k]; in_comp_ptr[k] = ((const uint8 *)in_comp_ptr[k]) + in_pixel_add[k]; } /* end for */ } /* end for */ /* wrap around the end of the line of pixels */ /* (only necessary if one of the buffers is in 'line' interlace) */ if (inil == MFGR_INTERLACE_LINE || outil == MFGR_INTERLACE_LINE) for (k = 0; k < ncomp; k++) { out_comp_ptr[k] = ((uint8 *)out_comp_ptr[k]) + out_line_add[k]; in_comp_ptr[k] = ((const uint8 *)in_comp_ptr[k]) + in_line_add[k]; } /* end for */ } /* end for */ } /* end else */ done: /* Free arrays allocated during this routine */ /* (common for both error and normal returns) */ free(in_comp_ptr); free(out_comp_ptr); free(in_pixel_add); free(out_pixel_add); free(in_line_add); free(out_line_add); return ret_value; } /* end GRIil_convert() */ /*-------------------------------------------------------------------------- NAME GRstart PURPOSE Initialize the GR*() interface for a given HDF file. USAGE int32 GRstart(hdf_file_id) int32 hdf_file_id; IN: file ID from Hopen RETURNS Return grid on success or FAIL DESCRIPTION Initializes the GR*() interface to operate on the HDF file which was specified by hdf_file_id. This routine must be called before any further GR*() routines are called for a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRstart(int32 hdf_file_id) { gr_info_t *gr_ptr; /* ptr to the new GR information for a file */ int32 ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (GRIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* check the validity of the file ID */ if (!HDvalidfid(hdf_file_id)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if GR file tree has been allocated */ if (gr_tree == NULL) { if ((gr_tree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Initialize the atom groups for GRs and RIs */ HAinit_group(GRIDGROUP, GRATOM_HASH_SIZE); HAinit_group(RIIDGROUP, GRATOM_HASH_SIZE); } /* end if */ /* Grab the existing gr_info_t structure first, otherwise create a new one */ if ((gr_ptr = Get_grfile(hdf_file_id)) == NULL) if ((gr_ptr = New_grfile(hdf_file_id)) == NULL) HGOTO_ERROR(DFE_FNF, FAIL); if (gr_ptr->access == 0) { /* Fire up the Vset interface */ if (Vstart(hdf_file_id) == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Initialize the starting information for the interface */ gr_ptr->hdf_file_id = hdf_file_id; gr_ptr->gr_ref = DFREF_WILDCARD; gr_ptr->gr_count = 0; gr_ptr->grtree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (gr_ptr->grtree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); gr_ptr->gr_modified = 0; gr_ptr->gattr_count = 0; gr_ptr->gattree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (gr_ptr->gattree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); gr_ptr->gattr_modified = 0; gr_ptr->attr_cache = GR_ATTR_THRESHHOLD; /* Go get all the images and attributes in the file */ if (GRIget_image_list(hdf_file_id, gr_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end else */ gr_ptr->access++; /* Return handle to the GR interface to the user */ ret_value = HAregister_atom(GRIDGROUP, gr_ptr); done: return ret_value; } /* end GRstart() */ /*-------------------------------------------------------------------------- NAME GRfileinfo PURPOSE Report high-level information about the GR*() interface for a given file. USAGE intn GRfileinfo(grid, n_datasets, n_attrs) int32 grid; IN: GR ID to get information about int32 *n_datasets; OUT: the # of GR datasets in a file int32 *n_attrs; OUT: the # of "global" GR attributes RETURNS SUCCEED/FAIL DESCRIPTION Reports general information about the number of datasets and "global" attributes for the GR interface. This routine is generally used to find the range of acceptable indices for GRselect calls. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRfileinfo(int32 grid, int32 *n_datasets, int32 *n_attrs) { gr_info_t *gr_ptr; /* ptr to the GR information for a file */ intn ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); /* check the validity of the GR ID */ if (HAatom_group(grid) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); /* Get the number of datasets & global attributes from the memory structures */ if (n_datasets != NULL) *n_datasets = gr_ptr->gr_count; if (n_attrs != NULL) *n_attrs = gr_ptr->gattr_count; done: return ret_value; } /* end GRfileinfo() */ /*-------------------------------------------------------------------------- NAME GRIupdatemeta PURPOSE Internal routine to update the meta-data for an image USAGE intn GRIupdatemeta(hdf_file_id,img_ptr) int32 hdf_file_id; IN: the file ID for the HDF file. ri_info_t *img_ptr; IN: pointer to the image info for the image to write. RETURNS SUCCEED/FAIL DESCRIPTION Write out the meta-information about an image (& palette) to an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Shared by both GRIupdateRIG() and GRIupdateRI() calls. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIupdatemeta(int32 hdf_file_id, ri_info_t *img_ptr) { uint8 GRtbuf[64]; /* local buffer for reading RIG info */ uint8 ntstring[4]; /* temporary storage for the number type information */ uint8 *p; /* temporary pointer into buffer */ intn ret_value = SUCCEED; HEclear(); if (!HDvalidfid(hdf_file_id) || img_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Weird test below to allow for tag/ref values of zero. (I'll spare */ /* everyone my rant about why DFTAG_NULL should have been made zero */ /* instead of one... QAK) */ if (img_ptr->img_dim.nt_tag <= (uint16)DFTAG_NULL) img_ptr->img_dim.nt_tag = DFTAG_NT; if (img_ptr->img_dim.nt_ref == DFREF_WILDCARD) img_ptr->img_dim.nt_ref = Htagnewref(hdf_file_id, img_ptr->img_dim.nt_tag); /* Write out the raster image's number-type record */ ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = (uint8)img_ptr->img_dim.nt; /* type */ ntstring[2] = (uint8)(DFKNTsize(img_ptr->img_dim.nt) * 8); /* width: RIG data is 8-bit chars */ ntstring[3] = DFNTC_BYTE; /* class: data are numeric values */ if (Hputelement(hdf_file_id, img_ptr->img_dim.nt_tag, img_ptr->img_dim.nt_ref, ntstring, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); /* Check for a palette with this image */ if (img_ptr->lut_ref != DFREF_WILDCARD) { /* Write out the palette number-type */ if (img_ptr->lut_dim.nt_tag <= (uint16)DFTAG_NULL) img_ptr->lut_dim.nt_tag = DFTAG_NT; if (img_ptr->lut_dim.nt_ref == DFREF_WILDCARD) img_ptr->lut_dim.nt_ref = Htagnewref(hdf_file_id, img_ptr->lut_dim.nt_tag); ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = DFNT_UCHAR; /* type */ ntstring[2] = 8; /* width: RIG data is 8-bit chars */ ntstring[3] = DFNTC_BYTE; /* class: data are numeric values */ if (Hputelement(hdf_file_id, img_ptr->lut_dim.nt_tag, img_ptr->lut_dim.nt_ref, ntstring, (int32)4) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); /* Write out the palette dimensions */ p = GRtbuf; INT32ENCODE(p, img_ptr->lut_dim.xdim); INT32ENCODE(p, img_ptr->lut_dim.ydim); UINT16ENCODE(p, img_ptr->lut_dim.nt_tag); UINT16ENCODE(p, img_ptr->lut_dim.nt_ref); INT16ENCODE(p, img_ptr->lut_dim.ncomps); /* Currently all data is written out in 'pixel' interlace, so force the */ /* interlace stored on disk to match, instead of the interlacing that the */ /* user created the image with. -QAK */ INT16ENCODE(p, (int16)MFGR_INTERLACE_PIXEL); UINT16ENCODE(p, img_ptr->lut_dim.comp_tag); UINT16ENCODE(p, img_ptr->lut_dim.comp_ref); if (img_ptr->lut_dim.dim_ref == DFREF_WILDCARD) img_ptr->lut_dim.dim_ref = Htagnewref(hdf_file_id, DFTAG_LD); if (Hputelement(hdf_file_id, DFTAG_LD, img_ptr->lut_dim.dim_ref, GRtbuf, (int32)(p - GRtbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); } /* end if */ /* Write out the image dimensions */ p = GRtbuf; INT32ENCODE(p, img_ptr->img_dim.xdim); INT32ENCODE(p, img_ptr->img_dim.ydim); UINT16ENCODE(p, img_ptr->img_dim.nt_tag); UINT16ENCODE(p, img_ptr->img_dim.nt_ref); INT16ENCODE(p, img_ptr->img_dim.ncomps); /* Currently all data is written out in 'pixel' interlace, so force the */ /* interlace stored on disk to match, instead of the interlacing that the */ /* user created the image with. -QAK */ INT16ENCODE(p, (int16)MFGR_INTERLACE_PIXEL); UINT16ENCODE(p, img_ptr->img_dim.comp_tag); UINT16ENCODE(p, img_ptr->img_dim.comp_ref); if (img_ptr->img_dim.dim_ref == DFREF_WILDCARD) img_ptr->img_dim.dim_ref = Htagnewref(hdf_file_id, DFTAG_ID); if (Hputelement(hdf_file_id, DFTAG_ID, img_ptr->img_dim.dim_ref, GRtbuf, (int32)(p - GRtbuf)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); done: return ret_value; } /* end GRIupdatemeta() */ /*-------------------------------------------------------------------------- NAME GRIupdateRIG PURPOSE Internal routine to update the RIG for an image USAGE intn GRIupdateRIG(hdf_file_id,img_ptr) int32 hdf_file_id; IN: the file ID for the HDF file. ri_info_t *img_ptr; IN: pointer to the image info for the image to write. RETURNS SUCCEED/FAIL DESCRIPTION Write out the RIG structure to an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIupdateRIG(int32 hdf_file_id, ri_info_t *img_ptr) { int32 GroupID; /* RIG id for group interface */ intn ret_value = SUCCEED; HEclear(); if (!HDvalidfid(hdf_file_id) || img_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Don't write out a RIG, unless it is compatible with the older RIGS */ /* which already exist. This is to guarantee compatibility with older */ /* software, both application and in the library */ if (img_ptr->img_dim.nt != DFNT_UINT8 || (img_ptr->img_dim.ncomps != 1 && img_ptr->img_dim.ncomps != 3)) { ret_value = (SUCCEED); /* lie and say it's ok - QAK */ goto done; } /* Write out the image/palette meta-information */ if (GRIupdatemeta(hdf_file_id, img_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Write out the RIG itself */ if ((GroupID = DFdisetup(6)) == FAIL) /* max 6 tag/refs in set */ HGOTO_ERROR(DFE_GROUPSETUP, FAIL); /* add image dimension tag/ref to RIG */ if (DFdiput(GroupID, DFTAG_ID, (uint16)img_ptr->img_dim.dim_ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* add image data tag/ref to RIG */ if (DFdiput(GroupID, img_ptr->img_tag, img_ptr->img_ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* Check if we should write palette information */ if (img_ptr->lut_ref != DFREF_WILDCARD) { /* add palette dimension tag/ref to RIG */ if (DFdiput(GroupID, DFTAG_LD, (uint16)img_ptr->lut_dim.dim_ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); /* add palette data tag/ref to RIG */ if (DFdiput(GroupID, img_ptr->lut_tag, img_ptr->lut_ref) == FAIL) HGOTO_ERROR(DFE_PUTGROUP, FAIL); } /* end if */ /* write out RIG */ if (img_ptr->rig_ref == DFTAG_WILDCARD) img_ptr->rig_ref = Htagnewref(hdf_file_id, DFTAG_RIG); if (DFdiwrite(hdf_file_id, GroupID, DFTAG_RIG, img_ptr->rig_ref) == FAIL) HGOTO_ERROR(DFE_GROUPWRITE, FAIL); done: return ret_value; } /* end GRIupdateRIG() */ /*-------------------------------------------------------------------------- NAME GRIupdateRI PURPOSE Internal routine to update the RI Vgroup for an image USAGE intn GRIupdateRI(hdf_file_id,img_ptr) int32 hdf_file_id; IN: the file ID for the HDF file. ri_info_t *img_ptr; IN: pointer to the image info for the image to write. RETURNS SUCCEED/FAIL DESCRIPTION Write out the RI Vgroup to an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIupdateRI(int32 hdf_file_id, ri_info_t *img_ptr) { int32 GroupID; /* RI vgroup id */ intn ret_value = SUCCEED; int32 temp_ref; /* used to hold the returned value from a function that may return a ref or a FAIL - BMR */ HEclear(); if (!HDvalidfid(hdf_file_id) || img_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Write out the image/palette meta-information */ if (GRIupdatemeta(hdf_file_id, img_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Write out the RI Vgroup itself */ if ((GroupID = Vattach(hdf_file_id, (img_ptr->ri_ref != DFREF_WILDCARD ? img_ptr->ri_ref : -1), "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* grab the ref. # of the new Vgroup */ if (img_ptr->ri_ref == DFREF_WILDCARD) { /* due to uint16 type of ref, check return value of VQueryref and assign it to ri_ref only when it's not FAIL - BMR */ temp_ref = VQueryref(GroupID); if (temp_ref == FAIL) HGOTO_ERROR(DFE_BADREF, FAIL); img_ptr->ri_ref = (uint16)temp_ref; } /* Set the name of the RI */ if (img_ptr->name != NULL) if (Vsetname(GroupID, img_ptr->name) == FAIL) HGOTO_ERROR(DFE_BADVSNAME, FAIL); /* Set the class of the RI group */ if (Vsetclass(GroupID, RI_NAME) == FAIL) HGOTO_ERROR(DFE_BADVSNAME, FAIL); /* add image dimension tag/ref to RIG */ if (Vaddtagref(GroupID, DFTAG_ID, (int32)img_ptr->img_dim.dim_ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); /* If we don't have a tag for the image, just use DFTAG_RI for now */ if (img_ptr->img_tag == DFTAG_NULL) img_ptr->img_tag = DFTAG_RI; /* If we don't have a ref for the image, generate a new one */ if (img_ptr->img_ref == DFREF_WILDCARD) { int32 temp_aid; /* Assign reference number for image */ img_ptr->img_ref = Htagnewref(hdf_file_id, img_ptr->img_tag); /* Make certain that the tag/ref pair is allocated in the file */ if ((temp_aid = Hstartaccess(hdf_file_id, img_ptr->img_tag, img_ptr->img_ref, DFACC_WRITE)) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); Hendaccess(temp_aid); } /* end if */ /* add image data tag/ref to RIG */ if (Vaddtagref(GroupID, (int32)img_ptr->img_tag, (int32)img_ptr->img_ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); /* Check if we should write palette information */ if (img_ptr->lut_ref != DFREF_WILDCARD) { /* add palette dimension tag/ref to RIG */ if (Vaddtagref(GroupID, DFTAG_LD, (int32)img_ptr->lut_dim.dim_ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); /* add palette data tag/ref to RIG */ if (Vaddtagref(GroupID, (int32)img_ptr->lut_tag, (int32)img_ptr->lut_ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); } /* end if */ /* write out RIG */ if (Vdetach(GroupID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* end GRIupdateRI() */ /*-------------------------------------------------------------------------- NAME GRIup_attr_data PURPOSE Internal routine to update/create the attribute data USAGE intn GRIup_attr_data(hdf_file_id,attr_ptr) int32 hdf_file_id; IN: the file ID for the HDF file. at_info_t *attr_ptr; IN: pointer to the attribute info for the attr. to write. RETURNS SUCCEED/FAIL DESCRIPTION Write out the data for an attribute to an HDF file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIup_attr_data(int32 hdf_file_id, at_info_t *attr_ptr) { intn ret_value = SUCCEED; HEclear(); if (!HDvalidfid(hdf_file_id) || attr_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Write out the attribute data */ if (attr_ptr->ref == DFREF_WILDCARD) /* create a new attribute */ { if ((attr_ptr->ref = (uint16)VHstoredata(hdf_file_id, attr_ptr->name, attr_ptr->data, attr_ptr->len, attr_ptr->nt, RIGATTRNAME, RIGATTRCLASS)) == (uint16)FAIL) HGOTO_ERROR(DFE_VSCANTCREATE, FAIL); attr_ptr->new_at = TRUE; } /* end if */ else /* update an existing one */ { int32 AttrID; /* attribute Vdata id */ if ((AttrID = VSattach(hdf_file_id, (int32)attr_ptr->ref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (VSsetfields(AttrID, attr_ptr->name) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_BADFIELDS, FAIL); } /* end if */ if (VSwrite(AttrID, attr_ptr->data, attr_ptr->len, FULL_INTERLACE) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_VSWRITE, FAIL); } /* end if */ if (VSdetach(AttrID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } /* end else */ done: return ret_value; } /* end GRIup_attr_data() */ /*-------------------------------------------------------------------------- NAME GRend PURPOSE Terminate the GR*() interface for a given HDF file. USAGE intn GRend(grid) int32 grid; IN: GR ID from GRstart RETURNS SUCCEED/FAIL DESCRIPTION Terminates access to the GR*() interface for a specific file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRend(int32 grid) { int32 hdf_file_id; /* HDF file ID */ int32 GroupID; /* VGroup ID for the GR group */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ filerec_t *file_rec; /* File record */ void **t1; intn ret_value = SUCCEED; int32 temp_ref; /* used to hold the returned value from a function that may return a ref or a FAIL - BMR */ /* clear error stack and check validity of file id */ HEclear(); /* check the validity of the GR ID */ if (HAatom_group(grid) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); if (--gr_ptr->access) HGOTO_DONE(SUCCEED); hdf_file_id = gr_ptr->hdf_file_id; file_rec = HAatom_object(hdf_file_id); if (((file_rec->access) & DFACC_WRITE) != 0) { /* Check if the GR group exists, and create it if not */ if (gr_ptr->gr_ref == DFREF_WILDCARD) { if ((GroupID = Vattach(gr_ptr->hdf_file_id, -1, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* due to uint16 type of ref, check return value of VQueryref then assign it to gr_ref only when it's not FAIL */ temp_ref = VQueryref(GroupID); if (temp_ref == FAIL) HGOTO_ERROR(DFE_NOVALS, FAIL); gr_ptr->gr_ref = (uint16)temp_ref; if (Vsetname(GroupID, GR_NAME) == FAIL) HGOTO_ERROR(DFE_BADVSNAME, FAIL); if (Vsetclass(GroupID, GR_NAME) == FAIL) HGOTO_ERROR(DFE_BADVSNAME, FAIL); } /* end if */ else { if ((GroupID = Vattach(gr_ptr->hdf_file_id, (int32)gr_ptr->gr_ref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); } /* end else */ /* Write out the information for RIs which have been changed */ if (gr_ptr->gr_modified == TRUE && gr_ptr->gr_count > 0) { void **t2; ri_info_t *img_ptr; /* ptr to the image */ if (NULL == (t2 = (void **)tbbtfirst(gr_ptr->grtree->root))) { HGOTO_ERROR(DFE_NOTINTABLE, FAIL); } /* end if */ else img_ptr = (ri_info_t *)*t2; /* get actual pointer to the ri_info_t */ /* cycle through all of the images in memory */ while (t2 != NULL) { /* check if the image data has been modified */ if (img_ptr->data_modified == TRUE) { /* do nothing currently, we are synchronously updating the image data */ img_ptr->data_modified = FALSE; } /* end if */ /* check if the image meta-info has been modified */ if (img_ptr->meta_modified == TRUE) { /* Test if the tag/ref pair has been assigned yet */ if (img_ptr->img_tag == DFTAG_NULL || img_ptr->img_ref == DFREF_WILDCARD) { img_ptr->img_tag = DFTAG_RI; } /* end if */ /* write out the RI/RIG information again */ if (GRIupdateRIG(gr_ptr->hdf_file_id, img_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (GRIupdateRI(gr_ptr->hdf_file_id, img_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); img_ptr->meta_modified = FALSE; } /* end if */ /* check if the local attributes has been modified */ if (img_ptr->attr_modified == TRUE && img_ptr->lattr_count > 0) { void **t3; at_info_t *attr_ptr; /* ptr to the attribute */ if (NULL == (t3 = (void **)tbbtfirst(img_ptr->lattree->root))) { HGOTO_ERROR(DFE_NOTINTABLE, FAIL); } /* end if */ else attr_ptr = (at_info_t *)*t3; /* get actual pointer to the at_info_t */ /* cycle through all of the local attributes in memory */ while (t3 != NULL) { /* check if the attribute data has been modified */ if (attr_ptr->data_modified == TRUE) { if (GRIup_attr_data(gr_ptr->hdf_file_id, attr_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); attr_ptr->data_modified = FALSE; } /* end if */ /* check if the attribute was added to the group */ if (attr_ptr->new_at == TRUE) { int32 lGroupID; /* ID of the Vgroup */ if ((lGroupID = Vattach(gr_ptr->hdf_file_id, (int32)img_ptr->ri_ref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (Vaddtagref(lGroupID, ATTR_TAG, (int32)attr_ptr->ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); if (Vdetach(lGroupID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); attr_ptr->new_at = FALSE; } /* end if */ /* get the next local attribute in the tree/list */ if (NULL != (t3 = (void **)tbbtnext((TBBT_NODE *)t3))) /* get the next node in the tree */ attr_ptr = (at_info_t *)*t3; /* get actual pointer to the at_info_t */ } /* end while */ img_ptr->attr_modified = FALSE; } /* end if */ /* Check if the RI is already in the GR, add it if not */ if (Vinqtagref(GroupID, RI_TAG, (int32)img_ptr->ri_ref) == FALSE) if (Vaddtagref(GroupID, RI_TAG, (int32)img_ptr->ri_ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); /* get the next image in the tree/list */ if (NULL != (t2 = (void **)tbbtnext((TBBT_NODE *)t2))) /* get the next node in the tree */ img_ptr = (ri_info_t *)*t2; /* get actual pointer to the ri_info_t */ } /* end while */ } /* end if */ /* Write out the information for the global attributes which have been changed */ if (gr_ptr->gattr_modified == TRUE && gr_ptr->gattr_count > 0) { void **t2; at_info_t *attr_ptr; /* ptr to the attribute */ if (NULL == (t2 = (void **)tbbtfirst(gr_ptr->gattree->root))) { HGOTO_ERROR(DFE_NOTINTABLE, FAIL); } /* end if */ else attr_ptr = (at_info_t *)*t2; /* get actual pointer to the at_info_t */ /* cycle through all of the global attributes in memory */ while (t2 != NULL) { /* check if the attribute data has been modified */ if (attr_ptr->data_modified == TRUE) { if (GRIup_attr_data(gr_ptr->hdf_file_id, attr_ptr) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); attr_ptr->data_modified = FALSE; /* check if the attribute was a new attribute */ if (attr_ptr->new_at == TRUE) { if (Vaddtagref(GroupID, ATTR_TAG, (int32)attr_ptr->ref) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); attr_ptr->new_at = FALSE; } /* end if */ } /* end if */ /* get the next global attribute in the tree/list */ if (NULL != (t2 = (void **)tbbtnext((TBBT_NODE *)t2))) /* get the next node in the tree */ attr_ptr = (at_info_t *)*t2; /* get actual pointer to the at_info_t */ } /* end while */ gr_ptr->gattr_modified = FALSE; } /* end if */ /* Let go of the GR Vgroup */ if (Vdetach(GroupID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } /* end if */ /* Free all the memory we've allocated */ tbbtdfree(gr_ptr->grtree, GRIridestroynode, NULL); tbbtdfree(gr_ptr->gattree, GRIattrdestroynode, NULL); /* Close down the entry for this file in the GR tree */ /* Find the node in the tree */ if ((t1 = (void **)tbbtdfind(gr_tree, &hdf_file_id, NULL)) == NULL) HGOTO_DONE(FAIL); /* Delete the node and free the gr_info_t structure */ tbbtrem((TBBT_NODE **)gr_tree, (TBBT_NODE *)t1, NULL); free(gr_ptr); /* Close down the Vset routines we started */ if (Vend(hdf_file_id) == FAIL) HGOTO_ERROR(DFE_CANTSHUTDOWN, FAIL); if (NULL == HAremove_atom(grid)) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end GRend() */ /*-------------------------------------------------------------------------- NAME GRselect PURPOSE Select a raster image to operate on. USAGE int32 GRselect(grid,index) int32 grid; IN: GR ID from GRstart int32 index; IN: Which raster image to select (indexed from 0) RETURNS A valid riid (Raster-Image ID) on success, or FAIL. DESCRIPTION Selects a raster image from the file to work on. This ID is needed for all operations on the image dataset, including reading/writing data, annotations, etc. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRselect(int32 grid, int32 index) { gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ int32 ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); /* check the validity of the GR ID */ if (HAatom_group(grid) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); /* check the index range validity */ if (!VALIDRIINDEX(index, gr_ptr)) HGOTO_ERROR(DFE_ARGS, FAIL); if ((t = (void **)tbbtdfind(gr_ptr->grtree, &index, NULL)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); ri_ptr = (ri_info_t *)*t; ri_ptr->access++; ret_value = HAregister_atom(RIIDGROUP, ri_ptr); done: return ret_value; } /* end GRselect() */ /*-------------------------------------------------------------------------- NAME GRcreate PURPOSE Create a new raster image. USAGE int32 GRcreate(grid, name, ncomp, nt, il, dimsizes) int32 grid; IN: GR ID from GRstart char *name; IN: Name of raster image to create int32 ncomp; IN: Number of components in image int32 nt; IN: Number type of each component int32 il; IN: Interlace of the components in the image int32 dimsizes[2]; IN: Dimensions of the new image RETURNS A valid riid (Raster-Image ID) on success, or FAIL. DESCRIPTION Creates a new raster image in a file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS All components must be the same number-type. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRcreate(int32 grid, const char *name, int32 ncomp, int32 nt, int32 il, int32 dimsizes[2]) { int32 GroupID; /* ID of the Vgroup created */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 ret_value = SUCCEED; int32 temp_ref; /* used to hold the returned value from a function that may return a ref or a FAIL - BMR */ /* clear error stack */ HEclear(); /* check the validity of the args */ if (HAatom_group(grid) != GRIDGROUP || name == NULL || ncomp < 1 || (il != MFGR_INTERLACE_PIXEL && il != MFGR_INTERLACE_LINE && il != MFGR_INTERLACE_COMPONENT) || dimsizes == NULL || dimsizes[0] <= 0 || dimsizes[1] <= 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); /* Allocate space for the new image information */ if ((ri_ptr = (ri_info_t *)malloc(sizeof(ri_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); memset(ri_ptr, 0, sizeof(ri_info_t)); /* Allocate space for the name and copy it */ if ((ri_ptr->name = (char *)malloc(strlen(name) + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); strcpy(ri_ptr->name, name); /* Assign image information */ ri_ptr->index = gr_ptr->gr_count; if ((GroupID = Vattach(gr_ptr->hdf_file_id, -1, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* due to uint16 type of ref, check return value of VQueryref and assign it to ri_ref only when it's not FAIL - BMR */ temp_ref = VQueryref(GroupID); if (temp_ref == FAIL) HGOTO_ERROR(DFE_BADREF, FAIL); ri_ptr->ri_ref = (uint16)temp_ref; if (Vdetach(GroupID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); ri_ptr->rig_ref = DFREF_WILDCARD; ri_ptr->gr_ptr = gr_ptr; ri_ptr->img_dim.dim_ref = DFREF_WILDCARD; ri_ptr->img_dim.xdim = dimsizes[XDIM]; ri_ptr->img_dim.ydim = dimsizes[YDIM]; ri_ptr->img_dim.ncomps = ncomp; ri_ptr->img_dim.nt = nt; ri_ptr->img_dim.file_nt_subclass = DFNTF_HDFDEFAULT; ri_ptr->img_dim.il = (gr_interlace_t)il; ri_ptr->img_dim.nt_tag = ri_ptr->img_dim.nt_ref = DFREF_WILDCARD; ri_ptr->img_dim.comp_tag = ri_ptr->img_dim.comp_ref = DFREF_WILDCARD; ri_ptr->img_tag = ri_ptr->img_ref = DFREF_WILDCARD; ri_ptr->img_aid = 0; ri_ptr->acc_perm = 0; ri_ptr->lut_tag = ri_ptr->lut_ref = DFREF_WILDCARD; ri_ptr->im_il = MFGR_INTERLACE_PIXEL; ri_ptr->lut_il = MFGR_INTERLACE_PIXEL; ri_ptr->data_modified = FALSE; ri_ptr->meta_modified = TRUE; ri_ptr->attr_modified = FALSE; ri_ptr->lattr_count = 0; ri_ptr->lattree = tbbtdmake(rigcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (ri_ptr->lattree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ri_ptr->use_buf_drvr = FALSE; ri_ptr->use_cr_drvr = FALSE; ri_ptr->comp_img = FALSE; ri_ptr->ext_img = FALSE; ri_ptr->acc_img = FALSE; ri_ptr->fill_img = TRUE; ri_ptr->fill_value = NULL; ri_ptr->store_fill = FALSE; ri_ptr->access++; /* insert the new image in the global image tree */ tbbtdins(gr_ptr->grtree, ri_ptr, NULL); /* insert the new image into B-tree */ /* indicate that the GR info has changed */ gr_ptr->gr_modified = TRUE; gr_ptr->gr_count++; ret_value = HAregister_atom(RIIDGROUP, ri_ptr); done: return ret_value; } /* end GRcreate() */ /*-------------------------------------------------------------------------- NAME GRnametoindex PURPOSE Map a raster image name to an index. USAGE int32 GRnametoindex(grid,name) int32 grid; IN: GR ID from GRstart char *name; IN: Name of raster image to search for RETURNS A valid index on success, or FAIL. DESCRIPTION Searches for a raster image based on the name provided. This routine maps from names of raster images to indices inside the GR group. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRnametoindex(int32 grid, const char *name) { gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ int32 ret_value = SUCCEED; /* clear error stack and check validity of file id */ HEclear(); /* check the validity of the GR ID */ if (HAatom_group(grid) != GRIDGROUP || name == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); if ((t = (void **)tbbtfirst(gr_ptr->grtree->root)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); do { ri_ptr = (ri_info_t *)*t; if (ri_ptr != NULL && strcmp(ri_ptr->name, name) == 0) /* ie. the name matches */ HGOTO_DONE(ri_ptr->index); } while ((t = (void **)tbbtnext((TBBT_NODE *)t)) != NULL); ret_value = (FAIL); done: return ret_value; } /* end GRnametoindex() */ /*-------------------------------------------------------------------------- NAME GRgetiminfo PURPOSE Gets information about a raster image. USAGE intn GRgetiminfo(riid,name,ncomp,nt,il,dimsizes,n_attr) int32 riid; IN: RI ID from GRselect/GRcreate char *name; OUT: name of raster image int32 *ncomp; OUT: number of components in image int32 *nt; OUT: number type of components int32 *il; OUT: interlace of the image int32 *dimsizes; OUT: size of each dimension int32 *n_attr; OUT: the number of attributes for the image RETURNS SUCCEED/FAIL DESCRIPTION Looks up information about an image which has been selected or created with the GR routines. Each of the parameters can be NULL, in which case that piece of information will not be retrieved. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRgetiminfo(int32 riid, char *name, int32 *ncomp, int32 *nt, int32 *il, int32 dimsizes[2], int32 *n_attr) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); if (name != NULL) strcpy(name, ri_ptr->name); if (ncomp != NULL) *ncomp = ri_ptr->img_dim.ncomps; if (nt != NULL) *nt = ri_ptr->img_dim.nt; if (il != NULL) *il = (int32)ri_ptr->img_dim.il; if (dimsizes != NULL) { dimsizes[0] = ri_ptr->img_dim.xdim; dimsizes[1] = ri_ptr->img_dim.ydim; } /* end if */ if (n_attr != NULL) *n_attr = ri_ptr->lattr_count; done: return ret_value; } /* end GRgetiminfo() */ /*-------------------------------------------------------------------------- NAME GRgetnluts PURPOSE Get the number of palettes (LUTs) for an image USAGE intn GRgetnluts(riid) int32 riid; IN: RI ID from GRselect/GRcreate RETURNS The number of palettes on success, FAIL (-1) on failure DESCRIPTION Determines the number of palettes for an image (0 or 1 for now). In the future, if multiple palettes are supported, this function may return values greater than 1. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRgetnluts(int32 riid) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = FAIL; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate LUT's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); if (ri_ptr->lut_ref == DFREF_WILDCARD) /* check for no palette defined currently */ ret_value = 0; else /* we've got a valid palette currently */ ret_value = 1; done: return ret_value; } /* end GRgetnluts() */ /*-------------------------------------------------------------------------- NAME GRwriteimage PURPOSE Writes raster data to an image USAGE intn GRwriteimage(riid,start,stride,edge,data) int32 riid; IN: RI ID from GRselect/GRcreate int32 start[2]; IN: array containing the offset in the image of the image data to write out int32 stride[2]; IN: array containing interval of data being written along each edge. strides of 0 are illegal (and generate an error) ie. stride of 1 in each dimension means writing contiguous data, stride of 2 means writing every other element out along an edge. int32 count[2]; IN: number of elements to write out along each edge. void * data; IN: pointer to the data to write out. RETURNS SUCCEED/FAIL DESCRIPTION Writes image data to an RI. Partial dataset writing and subsampling is allowed, but only within the dimensions of the dataset (ie. no UNLIMITED dimension support) GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS If the stride parameter is set to NULL, a stride of 1 will be assumed. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRwriteimage(int32 riid, int32 start[2], int32 in_stride[2], int32 count[2], void *data) { int32 stride[2]; /* pointer to the stride array */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ intn solid_block = FALSE; /* whether the image data is a solid block of data */ intn whole_image = FALSE; /* whether we are writing out the whole image */ void **img_data; /* pointer to the converted image data to write */ uintn pixel_mem_size, /* size of a pixel in memory */ pixel_disk_size; /* size of a pixel on disk */ uint16 scheme; /* compression scheme used for JPEG images */ uint32 comp_config; comp_coder_t comp_type; comp_info cinfo; intn status = FAIL; intn convert = FALSE; /* true if machine NT != NT to be written */ uint8 platnumsubclass; /* class of this NT for this platform */ intn new_image = FALSE; /* whether we are writing a new image out */ intn switch_interlace = FALSE; /* whether the memory interlace needs to be switched around */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the basic validity of the args (stride is OK to be NULL) */ if (HAatom_group(riid) != RIIDGROUP || start == NULL /* || in_stride==NULL */ || count == NULL || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the correct parameters into the stride array */ if (in_stride == NULL) stride[XDIM] = stride[YDIM] = 1; else { stride[XDIM] = in_stride[XDIM]; stride[YDIM] = in_stride[YDIM]; } /* end else */ /* Sanity check the start, stride, and count args */ if ((start[XDIM] < 0 || start[YDIM] < 0) || (stride[XDIM] < 1 || stride[YDIM] < 1) || (count[XDIM] < 1 || count[YDIM] < 1)) HGOTO_ERROR(DFE_BADDIM, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); gr_ptr = ri_ptr->gr_ptr; comp_type = COMP_CODE_NONE; scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { comp_type = COMP_CODE_JPEG; cinfo.jpeg.quality = 0; cinfo.jpeg.force_baseline = 0; } else if (scheme == DFTAG_IMC) { /* coder no longer supported */ HGOTO_ERROR(DFE_BADCODER, FAIL); } else { /* use lower-level routine to get the compression information */ status = HCPgetcompinfo(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, &comp_type, &cinfo); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (comp_type != COMP_CODE_NONE) { /* Check that the compression encoder is available */ HCget_config_info(comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } } if (stride[XDIM] == 1 && stride[YDIM] == 1) { /* solid block of data */ solid_block = TRUE; if ((start[XDIM] == 0 && start[YDIM] == 0) && (count[XDIM] == ri_ptr->img_dim.xdim && count[YDIM] == ri_ptr->img_dim.ydim)) whole_image = TRUE; else whole_image = FALSE; } /* end if */ else /* block of data spread out with strides */ solid_block = FALSE; if (ri_ptr->img_dim.il != MFGR_INTERLACE_PIXEL) switch_interlace = TRUE; /* Get the size of the pixels in memory and on disk */ pixel_mem_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize((ri_ptr->img_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); pixel_disk_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); /* Get number-type and conversion information */ platnumsubclass = (uint8)DFKgetPNSC(ri_ptr->img_dim.nt & (~DFNT_LITEND), DF_MT); convert = (ri_ptr->img_dim.file_nt_subclass != platnumsubclass) || (pixel_mem_size != pixel_disk_size); /* is conversion necessary? */ if (convert || switch_interlace == TRUE) { /* convert image data to HDF disk format */ /* Allocate space for the conversion buffer */ if ((img_data = malloc(pixel_disk_size * (size_t)count[XDIM] * (size_t)count[YDIM])) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (switch_interlace == TRUE) { void *pixel_buf; /* buffer for the pixel interlaced data */ /* Allocate space for the conversion buffer */ if ((pixel_buf = malloc(pixel_mem_size * (size_t)count[XDIM] * (size_t)count[YDIM])) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); GRIil_convert(data, ri_ptr->img_dim.il, pixel_buf, MFGR_INTERLACE_PIXEL, count, ri_ptr->img_dim.ncomps, ri_ptr->img_dim.nt); /* convert the pixel data into the HDF disk format */ DFKconvert(pixel_buf, img_data, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * count[XDIM] * count[YDIM], DFACC_WRITE, 0, 0); free(pixel_buf); } /* end if */ else /* convert the pixel data into the HDF disk format */ DFKconvert(data, img_data, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * count[XDIM] * count[YDIM], DFACC_WRITE, 0, 0); } /* end if */ else /* no conversion necessary, just use the user's buffer */ img_data = data; if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_ref == DFREF_WILDCARD) new_image = TRUE; else { /* Check if the actual image data is in the file yet, or if just the tag & ref are known */ if (Hlength(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref) > 0) new_image = FALSE; else new_image = TRUE; } /* end else */ if (GRIgetaid(ri_ptr, DFACC_WRITE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (whole_image == TRUE) { /* write the whole image out */ /* Make certain we are at the beginning */ if (Hseek(ri_ptr->img_aid, 0, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* Write the entire image out */ if (Hwrite(ri_ptr->img_aid, (int32)pixel_disk_size * count[XDIM] * count[YDIM], (uint8 *)img_data) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ else { /* write only part of the image out */ int32 img_offset; /* current offset in the image data */ void *tmp_data; /* temp. pointer to the image data to write */ intn fill_image = FALSE; /* whether to create fill values, etc. */ void *fill_line = NULL; /* array containing the fill pixels for an entire line of the image */ int32 fill_lo_size = 0, /* number of bytes in the "low" block */ fill_hi_size = 0, /* number of bytes in the "high" block */ fill_line_size = 0; /* number of bytes in the "line" block */ img_offset = ((ri_ptr->img_dim.xdim * start[YDIM]) + start[XDIM]) * (int32)pixel_disk_size; /* check if this is a new image, and if we need to write fill pixels */ if (new_image == TRUE && ri_ptr->fill_img == TRUE) { /* create fill value arrays for various blocks */ void *fill_pixel; /* converted value for the filled pixel */ int32 at_index; /* attribute index for the fill value */ if ((fill_pixel = malloc(pixel_disk_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* create correct disk version of fill pixel */ if (ri_ptr->fill_value != NULL) { DFKconvert(ri_ptr->fill_value, fill_pixel, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps, DFACC_WRITE, 0, 0); } /* end if */ else /* create default pixel fill value of all zero components */ { /* Try to find a fill value attribute */ if ((at_index = GRfindattr(riid, FILL_ATTR)) != FAIL) { /* Found a fill value attribute */ if ((ri_ptr->fill_value = malloc(pixel_mem_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (GRgetattr(riid, at_index, ri_ptr->fill_value) == FAIL) HGOTO_ERROR(DFE_BADATTR, FAIL); DFKconvert(ri_ptr->fill_value, fill_pixel, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps, DFACC_WRITE, 0, 0); } /* end if */ else memset(fill_pixel, 0, pixel_disk_size); } /* end else */ /* check for "low" pixel runs */ if (start[XDIM] > 0) fill_lo_size = (int32)pixel_disk_size * start[XDIM]; /* check for "high" pixel runs */ if ((start[XDIM] + ((count[XDIM] - 1) * stride[XDIM]) + 1) < ri_ptr->img_dim.xdim) fill_hi_size = (int32)pixel_disk_size * (ri_ptr->img_dim.xdim - (start[XDIM] + ((count[XDIM] - 1) * stride[XDIM]) + 1)); /* create the "line" pixel block */ /* allocate space for the "line" block */ fill_line_size = (int32)pixel_disk_size * ri_ptr->img_dim.xdim; if ((fill_line = malloc(fill_line_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); HDmemfill(fill_line, fill_pixel, pixel_disk_size, (uint32)ri_ptr->img_dim.xdim); fill_image = TRUE; /* set flag to write out fill pixels */ ri_ptr->store_fill = TRUE; /* set flag to store fill value attribute */ /* Get rid of the fill pixel */ if (ri_ptr->fill_value == NULL) ri_ptr->fill_value = fill_pixel; else free(fill_pixel); } /* end if */ tmp_data = img_data; if (solid_block == TRUE) { /* write out runs of data in the image */ int32 pix_len; /* length of current row's pixel run */ intn i; /* temporary loop variable */ pix_len = (int32)pixel_disk_size * count[XDIM]; if (fill_image == TRUE) { /* surround the block to write with fill values */ /* write out lines "below" the block */ if (start[YDIM] > 0) { /* fill in the lines leading up the block */ for (i = 0; i < start[YDIM]; i++) if (Hwrite(ri_ptr->img_aid, fill_line_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ /* write prelude of low pixels */ if (fill_lo_size > 0) if (Hwrite(ri_ptr->img_aid, fill_lo_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* write out the block */ for (i = 0; i < count[YDIM]; i++) { if (Hwrite(ri_ptr->img_aid, pix_len, tmp_data) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* This next write wraps around the high side */ /* of the block and writes the next low side */ /* at the same time. */ if ((fill_hi_size + fill_lo_size) > 0 && i < (count[YDIM] - 1)) if (Hwrite(ri_ptr->img_aid, (fill_hi_size + fill_lo_size), fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); tmp_data = (void *)((char *)tmp_data + pix_len); } /* end for */ /* Finish the last chunk of high side fill values */ if (fill_hi_size > 0) if (Hwrite(ri_ptr->img_aid, fill_hi_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* write out lines "above" the block */ if ((start[YDIM] + ((count[YDIM] - 1) * stride[YDIM]) + 1) < ri_ptr->img_dim.ydim) { for (i = start[YDIM] + ((count[YDIM] - 1) * stride[YDIM]) + 1; i < ri_ptr->img_dim.ydim; i++) if (Hwrite(ri_ptr->img_aid, fill_line_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ } /* end if */ else { /* don't worry about fill values */ for (i = 0; i < count[YDIM]; i++) { if (Hseek(ri_ptr->img_aid, img_offset, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hwrite(ri_ptr->img_aid, pix_len, tmp_data) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); img_offset += (int32)pixel_disk_size * ri_ptr->img_dim.xdim; tmp_data = (void *)((char *)tmp_data + pix_len); } /* end for */ } /* end else */ } /* end if */ else { /* sub-sampling, seek to each data element and write it out */ intn i, j, k; /* temporary loop variables */ int32 fill_stride_size = 0; /* # of pixels in the stride block */ intn fill_xdim = FALSE, /* whether to fill in the X dimension */ fill_ydim = FALSE; /* whether to fill in the Y dimension */ /* check if we need to insert fill pixels between strides */ if (fill_image == TRUE) { /* create the "stride" pixel block */ if (stride[XDIM] > 1) { /* allocate space for the "stride" block */ fill_stride_size = (int32)pixel_disk_size * (stride[XDIM] - 1); fill_xdim = TRUE; } /* end if */ if (stride[YDIM] > 1) fill_ydim = TRUE; /* write fills and sub-sampled data */ /* write out lines "below" the block */ if (start[YDIM] > 0) { /* fill in the lines leading up the block */ for (i = 0; i < start[YDIM]; i++) { if (Hwrite(ri_ptr->img_aid, fill_line_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end for */ } /* end if */ /* write prelude of low pixels */ if (fill_lo_size > 0) { if (Hwrite(ri_ptr->img_aid, fill_lo_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ for (i = 0; i < count[YDIM]; i++) { for (j = 0; j < count[XDIM]; j++) { if (Hwrite(ri_ptr->img_aid, (int32)pixel_disk_size, tmp_data) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); if (fill_xdim == TRUE && j < (count[XDIM] - 1)) { if (Hwrite(ri_ptr->img_aid, fill_stride_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ tmp_data = (void *)((char *)tmp_data + pixel_disk_size); } /* end for */ /* Fill in the y-dim stride lines */ if (fill_ydim == TRUE) for (k = 1; k < stride[YDIM]; k++) { if (Hwrite(ri_ptr->img_aid, fill_line_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end for */ /* This next write wraps around the high side */ /* of the block and writes the next low side */ /* at the same time. */ if ((fill_hi_size + fill_lo_size) > 0 && i < (count[YDIM] - 1)) { if (Hwrite(ri_ptr->img_aid, (fill_hi_size + fill_lo_size), fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ } /* end for */ /* Finish the last chunk of high side fill values */ if (fill_hi_size > 0) { if (Hwrite(ri_ptr->img_aid, fill_hi_size, fill_line) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ } /* end if */ else { /* don't worry about fill values */ int32 stride_add; /* amount to add for stride amount */ stride_add = (int32)pixel_disk_size * stride[XDIM]; for (i = 0; i < count[YDIM]; i++) { int32 local_offset; local_offset = img_offset; for (j = 0; j < count[XDIM]; j++) { if (Hseek(ri_ptr->img_aid, local_offset, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hwrite(ri_ptr->img_aid, (int32)pixel_disk_size, tmp_data) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); local_offset += stride_add; tmp_data = (void *)((char *)tmp_data + pixel_disk_size); } /* end for */ img_offset += ri_ptr->img_dim.xdim * stride[YDIM] * (int32)pixel_disk_size; } /* end for */ } /* end else */ } /* end else */ free(fill_line); } /* end else */ ri_ptr->data_modified = TRUE; /* if we've allocated a temporary buffer, free it */ if (convert || switch_interlace == TRUE) free(img_data); /* mark the image as being modified */ ri_ptr->data_modified = TRUE; gr_ptr->gr_modified = TRUE; done: return ret_value; } /* end GRwriteimage() */ /*-------------------------------------------------------------------------- NAME GRreadimage PURPOSE Read raster data for an image USAGE intn GRreadimage(riid,start,stride,edge,data) int32 riid; IN: RI ID from GRselect/GRcreate int32 start[2]; IN: array containing the offset in the image of the image data to read in int32 stride[2]; IN: array containing interval of data being read along each edge. strides of 0 are illegal (and generate an error) ie. stride of 1 in each dimension means reading contiguous data, stride of 2 means reading every other element out along an edge. int32 count[2]; IN: number of elements to read in along each edge. void * data; IN: pointer to the data to read in. RETURNS SUCCEED/FAIL DESCRIPTION Read image data from an RI. Partial dataset reading and subsampling is allowed. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS If the stride parameter is set to NULL, a stride of 1 will be assumed. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRreadimage(int32 riid, int32 start[2], int32 in_stride[2], int32 count[2], void *data) { int32 hdf_file_id; /* HDF file ID */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 stride[2]; /* pointer to the stride array */ intn solid_block = FALSE; /* whether the image data is a solid block of data */ intn whole_image = FALSE; /* whether we are reading in the whole image */ intn image_data = FALSE; /* whether there is actual image data or not */ void **img_data; /* pointer to the converted image data to write */ uintn pixel_disk_size; /* size of a pixel on disk */ uintn pixel_mem_size; /* size of a pixel in memory */ intn convert; /* true if machine NT != NT to be written */ uint8 platnumsubclass; /* class of this NT for this platform */ uint16 scheme; /* compression scheme used for JPEG images */ uint32 comp_config; comp_coder_t comp_type; comp_info cinfo; intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the basic validity of the args (stride is OK to be NULL) */ if (HAatom_group(riid) != RIIDGROUP || start == NULL /* || in_stride==NULL */ || count == NULL || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the correct parameters into the stride array */ if (in_stride == NULL) stride[XDIM] = stride[YDIM] = 1; else { stride[XDIM] = in_stride[XDIM]; stride[YDIM] = in_stride[YDIM]; } /* end else */ /* Sanity check the start, stride, and count args */ if ((start[XDIM] < 0 || start[YDIM] < 0) || (stride[XDIM] < 1 || stride[YDIM] < 1) || (count[XDIM] < 1 || count[YDIM] < 1)) HGOTO_ERROR(DFE_BADDIM, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); gr_ptr = ri_ptr->gr_ptr; hdf_file_id = gr_ptr->hdf_file_id; comp_type = COMP_CODE_NONE; scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { comp_type = COMP_CODE_JPEG; cinfo.jpeg.quality = 0; cinfo.jpeg.force_baseline = 0; } /* Catch old images to avoid going into HCPgetcompinfo */ else if (scheme == DFTAG_RLE) /* old image */ comp_type = COMP_CODE_RLE; else if (scheme == DFTAG_IMC) /* old image */ comp_type = COMP_CODE_IMCOMP; else { /* use lower-level routine to get the compression information */ status = HCPgetcompinfo(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, &comp_type, &cinfo); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_RLE && comp_type != COMP_CODE_IMCOMP) { /* This is reading, why do we need encoder? -BMR */ /* Check that the compression encoder is available */ HCget_config_info(comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_DECODER_ENABLED) == 0) { /* decoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } } if (stride[XDIM] == 1 && stride[YDIM] == 1) { /* solid block of data */ solid_block = TRUE; if ((start[XDIM] == 0 && start[YDIM] == 0) && (count[XDIM] == ri_ptr->img_dim.xdim && count[YDIM] == ri_ptr->img_dim.ydim)) whole_image = TRUE; else whole_image = FALSE; } /* end if */ else /* block of data spread out with strides */ solid_block = FALSE; /* Get the size of the pixels in memory and on disk */ pixel_disk_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); pixel_mem_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize((ri_ptr->img_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); /* Get number-type and conversion information */ platnumsubclass = (uint8)DFKgetPNSC(ri_ptr->img_dim.nt & (~DFNT_LITEND), DF_MT); convert = (pixel_disk_size != pixel_mem_size) || (ri_ptr->img_dim.file_nt_subclass != platnumsubclass); /* is conversion necessary? */ /* Check if the image data is in the file */ if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_ref == DFREF_WILDCARD) image_data = FALSE; else { /* Check if the actual image data is in the file yet, or if just the tag & ref are known */ if (Hlength(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref) > 0) image_data = TRUE; else image_data = FALSE; } /* end else */ if (image_data == FALSE) { /* Fake an image for the user by using the pixel fill value */ void *fill_pixel; /* converted value for the filled pixel */ int32 at_index; if ((fill_pixel = malloc(pixel_mem_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Try to find a fill value attribute */ if ((at_index = GRfindattr(riid, FILL_ATTR)) != FAIL) { /* Found a fill value attribute */ if (GRgetattr(riid, at_index, fill_pixel) == FAIL) HGOTO_ERROR(DFE_BADATTR, FAIL); } /* end if */ else /* no fill value attribute */ memset(fill_pixel, 0, pixel_mem_size); /* Fill the user's buffer with the fill value */ HDmemfill(data, fill_pixel, pixel_mem_size, (uint32)(count[XDIM] * count[YDIM])); free(fill_pixel); } /* end if */ else { /* an image exists in the file */ if (convert) { /* convert image data to HDF disk format */ /* Allocate space for the conversion buffer */ if ((img_data = malloc(pixel_disk_size * (size_t)count[XDIM] * (size_t)count[YDIM])) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ else /* no conversion necessary, just use the user's buffer */ img_data = data; if (GRIgetaid(ri_ptr, DFACC_READ) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (whole_image == TRUE) { /* read the whole image in */ /* Make certain we are at the beginning */ if (Hseek(ri_ptr->img_aid, 0, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); /* Read the entire image in */ /* This offset is relative to the element not the file and this */ /* is where it reads and decompresses the data -BMR 09/2010 */ if (Hread(ri_ptr->img_aid, (int32)pixel_disk_size * count[XDIM] * count[YDIM], (uint8 *)img_data) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); } /* end if */ else { /* read only part of the image in */ int32 img_offset; /* current offset in the image data */ void *tmp_data; /* temp. pointer to the image data read in */ img_offset = ((ri_ptr->img_dim.xdim * start[YDIM]) + start[XDIM]) * (int32)pixel_disk_size; tmp_data = img_data; if (solid_block == TRUE) { /* read in runs of data in the image */ int32 pix_len; /* length of current row's pixel run */ intn i; /* temporary loop variable */ pix_len = (int32)pixel_disk_size * count[XDIM]; /* read in the block */ for (i = 0; i < count[YDIM]; i++) { if (Hseek(ri_ptr->img_aid, img_offset, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hread(ri_ptr->img_aid, pix_len, tmp_data) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); img_offset += (int32)pixel_disk_size * ri_ptr->img_dim.xdim; tmp_data = (void *)((char *)tmp_data + pix_len); } /* end for */ } /* end if */ else { /* sub-sampling, seek to each data element and read it in */ intn i, j; /* temporary loop variables */ int32 stride_add; /* amount to add for stride amount */ stride_add = (int32)pixel_disk_size * stride[XDIM]; for (i = 0; i < count[YDIM]; i++) { int32 local_offset; local_offset = img_offset; for (j = 0; j < count[XDIM]; j++) { if (Hseek(ri_ptr->img_aid, local_offset, DF_START) == FAIL) HGOTO_ERROR(DFE_SEEKERROR, FAIL); if (Hread(ri_ptr->img_aid, (int32)pixel_disk_size, tmp_data) == FAIL) HGOTO_ERROR(DFE_READERROR, FAIL); local_offset += stride_add; tmp_data = (void *)((char *)tmp_data + pixel_disk_size); } /* end for */ img_offset += ri_ptr->img_dim.xdim * stride[YDIM] * (int32)pixel_disk_size; } /* end for */ } /* end else */ } /* end else */ if (convert) { /* convert the pixel data into the HDF disk format */ DFKconvert(img_data, data, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * count[XDIM] * count[YDIM], DFACC_READ, 0, 0); free(img_data); } /* end if */ } /* end else */ /* Check whether we need to convert the buffer to the user's */ /* requested interlace scheme. */ /* Note: This is implemented in a horribly ugly & slow manner, but I'm */ /* in a bit of a hurry right now - QAK */ if (ri_ptr->im_il != MFGR_INTERLACE_PIXEL) { void *pixel_buf; /* buffer for the pixel interlaced data */ /* Allocate space for the conversion buffer */ if ((pixel_buf = malloc(pixel_mem_size * (size_t)count[XDIM] * (size_t)count[YDIM])) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); GRIil_convert(data, MFGR_INTERLACE_PIXEL, pixel_buf, ri_ptr->im_il, count, ri_ptr->img_dim.ncomps, ri_ptr->img_dim.nt); memcpy(data, pixel_buf, pixel_mem_size * (size_t)count[XDIM] * (size_t)count[YDIM]); free(pixel_buf); } /* end if */ done: return ret_value; } /* end GRreadimage() */ /*-------------------------------------------------------------------------- NAME GRendaccess PURPOSE End access to an RI. USAGE intn GRendaccess(riid) int32 riid; IN: RI ID from GRselect/GRcreate RETURNS SUCCEED/FAIL DESCRIPTION End access to an RI. Further attempts to access the RI ID will result in an error. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRendaccess(int32 riid) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); if (!(ri_ptr->access > 0)) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); /* Check for writing a fill value attribute out */ if (ri_ptr->store_fill == TRUE) { /* store the fill value attribute before letting go of the image */ if (GRsetattr(riid, FILL_ATTR, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps, ri_ptr->fill_value) == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); ri_ptr->store_fill = FALSE; } /* end if */ /* Reduce the number of accesses to the RI */ ri_ptr->access--; /* Check if we should shut down the AID we've been holding open */ if (!(ri_ptr->access > 0) && ri_ptr->img_aid != 0) { Hendaccess(ri_ptr->img_aid); ri_ptr->img_aid = 0; } /* end if */ /* Double check on setting the GR modified flag */ /* Maybe this should be flagged as as error? -QAK */ if (ri_ptr->meta_modified == TRUE && ri_ptr->gr_ptr->gr_modified == FALSE) ri_ptr->gr_ptr->gr_modified = TRUE; /* Delete the atom for the RI ID */ if (NULL == HAremove_atom(riid)) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); done: return ret_value; } /* end GRendaccess() */ /*-------------------------------------------------------------------------- NAME GRidtoref PURPOSE Maps an RI ID to a reference # for annotating or including in a Vgroup. USAGE uint16 GRidtoref(riid) int32 riid; IN: RI ID from GRselect/GRcreate RETURNS A valid reference # on success or 0 DESCRIPTION Maps an riid to a reference # for annotating or including in a Vgroup. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ uint16 GRidtoref(int32 riid) { ri_info_t *ri_ptr; /* ptr to the image to work with */ uint16 ret_value = 0; /* FAIL? */ /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, 0); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, 0); /* Changed to handle case when ri_ptr->rig_ref is DFREF_WILDCARD */ if (ri_ptr->ri_ref != DFREF_WILDCARD) ret_value = ri_ptr->ri_ref; else { if (ri_ptr->rig_ref == DFREF_WILDCARD) { if (ri_ptr->img_ref == DFREF_WILDCARD) HGOTO_ERROR(DFE_INTERNAL, 0); ret_value = ri_ptr->img_ref; } else ret_value = ri_ptr->rig_ref; } /* end else */ done: return ret_value; } /* end GRidtoref() */ /*-------------------------------------------------------------------------- NAME GRreftoindex PURPOSE Maps the reference # of an RI into an index which can be used with GRselect. USAGE int32 GRreftoindex(grid,ref) int32 grid; IN: GR ID from GRstart uint16 ref; IN: reference number of raster image to map to index RETURNS A valid index # on success or FAIL DESCRIPTION Maps the reference # of an RI into an index which can be used with GRselect. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRreftoindex(int32 grid, uint16 ref) { gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ int32 ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(grid) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(grid))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); if ((t = (void **)tbbtfirst(gr_ptr->grtree->root)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); do { ri_ptr = (ri_info_t *)*t; if (ri_ptr != NULL && ((ri_ptr->ri_ref == ref) || (ri_ptr->ri_ref == DFREF_WILDCARD && ri_ptr->rig_ref == ref))) /* the ref matches */ HGOTO_DONE(ri_ptr->index); } while ((t = (void **)tbbtnext((TBBT_NODE *)t)) != NULL); ret_value = (FAIL); done: return ret_value; } /* end GRreftoindex() */ /*-------------------------------------------------------------------------- NAME GRreqlutil PURPOSE Request that the next LUT read from an RI have a particular interlace. USAGE intn GRreqlutil(riid,il) int32 riid; IN: RI ID from GRselect/GRcreate intn il; IN: interlace for next LUT. From the following values (found in mfgr.h): MFGR_INTERLACE_PIXEL - pixel interlacing MFGR_INTERLACE_LINE - line interlacing MFGR_INTERLACE_COMPONENT - component/plane interlacing RETURNS SUCCEED/FAIL DESCRIPTION Request that the next LUT read from an RI have a particular interlace. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRreqlutil(int32 riid, intn il) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP || il < (intn)MFGR_INTERLACE_PIXEL || il > (intn)MFGR_INTERLACE_COMPONENT) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* Assign interlacing scheme */ ri_ptr->lut_il = (gr_interlace_t)il; done: return ret_value; } /* end GRreqlutil() */ /*-------------------------------------------------------------------------- NAME GRreqimageil PURPOSE Request that the image read from an RI have a particular interlace. USAGE intn GRreqimageil(riid,il) int32 riid; IN: RI ID from GRselect/GRcreate intn il; IN: interlace for next RI. From the following values (found in mfgr.h): MFGR_INTERLACE_PIXEL - pixel interlacing MFGR_INTERLACE_LINE - line interlacing MFGR_INTERLACE_COMPONENT - component/plane interlacing RETURNS SUCCEED/FAIL DESCRIPTION Request that the image read from an RI have a particular interlace. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRreqimageil(int32 riid, intn il) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP || il < (intn)MFGR_INTERLACE_PIXEL || il > (intn)MFGR_INTERLACE_COMPONENT) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* Assign interlacing scheme */ ri_ptr->im_il = (gr_interlace_t)il; done: return ret_value; } /* end GRreqimageil() */ /*-------------------------------------------------------------------------- NAME GRgetlutid PURPOSE Get a LUT id ('lutid') for an RI. USAGE int32 GRgetlutid(riid,index) int32 riid; IN: RI ID from GRselect/GRcreate int32 lut_index; IN: Which LUT image to select (indexed from 0) RETURNS Valid LUT ID on success, FAIL on failure DESCRIPTION Get a LUT id ('lutid') for accessing LUTs in an RI. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Currently only supports one LUT per image, at index 0 and LUTID==RIID. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRgetlutid(int32 riid, int32 lut_index) { int32 ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP || lut_index != 0) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = (riid); done: return ret_value; } /* end GRgetlutid() */ /*-------------------------------------------------------------------------- NAME GRluttoref PURPOSE Returns the ref # for a LUT. USAGE uint16 GRluttoref(lutid) int32 lutid; IN: LUT ID from GRgetlutid RETURNS Valid ref # if a palette exists, or 0 when: - palette doesn't exist, or - unable to get the image from the palette id. - BMR DESCRIPTION Gets the ref # used to store the LUT in the file. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ uint16 GRluttoref(int32 lutid) { ri_info_t *ri_ptr; /* ptr to the image to work with */ uint16 ret_value = 0; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(lutid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, 0); /* return 0 for invalid ref # - BMR */ /* locate LUT's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(lutid))) HGOTO_ERROR(DFE_LUTNOTFOUND, 0); /* return 0 for invalid ref # - BMR */ ret_value = ri_ptr->lut_ref; done: return ret_value; } /* end GRluttoref() */ /*-------------------------------------------------------------------------- NAME GRgetlutinfo PURPOSE Gets information about a LUT. USAGE intn GRgetlutinfo(lutid,ncomp,nt,il,nentries) int32 lutid; IN: LUT ID from GRgetlutid int32 *ncomp; OUT: number of components in LUT int32 *nt; OUT: number type of components int32 *il; OUT: interlace of the LUT int32 *nentries; OUT: the number of entries for the LUT RETURNS SUCCEED/FAIL DESCRIPTION Gets information about a LUT. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRgetlutinfo(int32 lutid, int32 *ncomp, int32 *nt, int32 *il, int32 *nentries) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(lutid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate LUT's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(lutid))) HGOTO_ERROR(DFE_LUTNOTFOUND, FAIL); if (ri_ptr->lut_ref == DFREF_WILDCARD) { /* check for no palette defined currently */ if (ncomp != NULL) *ncomp = 0; if (nt != NULL) *nt = DFNT_NONE; if (il != NULL) *il = -1; if (nentries != NULL) *nentries = 0; } /* end if */ else /* we've got a valid palette currently */ { if (ncomp != NULL) *ncomp = ri_ptr->lut_dim.ncomps; if (nt != NULL) *nt = ri_ptr->lut_dim.nt; if (il != NULL) *il = (int32)ri_ptr->lut_dim.il; if (nentries != NULL) /* xdim for LUTs is the number of entries */ *nentries = ri_ptr->lut_dim.xdim; } /* end else */ done: return ret_value; } /* end GRgetlutinfo() */ /*-------------------------------------------------------------------------- NAME GRwritelut PURPOSE Writes out a LUT for an RI. USAGE intn GRwritelut(riid,ncomps,nt,il,nentries,data) int32 lutid; IN: LUT ID from GRgetlutid int32 ncomp; IN: number of components in LUT int32 nt; IN: number type of components int32 il; IN: interlace of the LUT int32 nentries; IN: the number of entries for the LUT void * data; IN: LUT data to write out RETURNS SUCCEED/FAIL DESCRIPTION Writes out a LUT for an RI. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRwritelut(int32 lutid, int32 ncomps, int32 nt, int32 il, int32 nentries, void *data) { int32 hdf_file_id; /* file ID from Hopen */ ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the args (how to check il?) */ if (HAatom_group(lutid) != RIIDGROUP || ncomps < 1 || (DFKNTsize(nt) == FAIL) || nentries < 1 || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate LUT's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(lutid))) HGOTO_ERROR(DFE_LUTNOTFOUND, FAIL); hdf_file_id = ri_ptr->gr_ptr->hdf_file_id; /* Check if this is compatible with older-style palettes */ if (ncomps == 3 && (nt == DFNT_UINT8 || nt == DFNT_UCHAR8) && il == MFGR_INTERLACE_PIXEL && nentries == 256) { /* Check if LUT exists already */ if (ri_ptr->lut_tag != DFTAG_NULL && ri_ptr->lut_ref != DFREF_WILDCARD) { /* LUT already exists */ if (Hputelement(hdf_file_id, ri_ptr->lut_tag, ri_ptr->lut_ref, data, ncomps * nentries * DFKNTsize(nt)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); } /* end if */ else { /* LUT does not exist */ ri_ptr->lut_tag = DFTAG_LUT; ri_ptr->lut_ref = Htagnewref(hdf_file_id, ri_ptr->lut_tag); ri_ptr->lut_dim.dim_ref = DFREF_WILDCARD; ri_ptr->lut_dim.xdim = 256; ri_ptr->lut_dim.ydim = 1; ri_ptr->lut_dim.ncomps = 3; ri_ptr->lut_dim.nt = DFNT_UINT8; ri_ptr->lut_dim.file_nt_subclass = DFNTF_HDFDEFAULT; ri_ptr->lut_dim.il = MFGR_INTERLACE_PIXEL; ri_ptr->lut_dim.nt_tag = DFTAG_NULL; ri_ptr->lut_dim.nt_ref = DFREF_WILDCARD; ri_ptr->lut_dim.comp_tag = DFTAG_NULL; ri_ptr->lut_dim.comp_ref = DFREF_WILDCARD; if (Hputelement(hdf_file_id, ri_ptr->lut_tag, ri_ptr->lut_ref, data, ncomps * nentries * DFKNTsize(nt)) == FAIL) HGOTO_ERROR(DFE_PUTELEM, FAIL); ri_ptr->meta_modified = TRUE; ri_ptr->gr_ptr->gr_modified = TRUE; } /* end else */ } /* end if */ else { /* currently, we are not going to support non-standard palettes */ HGOTO_ERROR(DFE_UNSUPPORTED, FAIL); } /* end else */ done: return ret_value; } /* end GRwritelut() */ /*-------------------------------------------------------------------------- NAME GRreadlut PURPOSE Reads a LUT from an RI. USAGE intn GRreadlut(lutid,data) int32 lutid; IN: LUT ID from GRgetlutid void * data; IN: buffer for LUT data read in RETURNS SUCCEED/FAIL DESCRIPTION Reads a LUT from an RI. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRreadlut(int32 lutid, void *data) { int32 hdf_file_id; /* file ID from Hopen */ ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(lutid) != RIIDGROUP || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate LUT's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(lutid))) HGOTO_ERROR(DFE_LUTNOTFOUND, FAIL); hdf_file_id = ri_ptr->gr_ptr->hdf_file_id; if (ri_ptr->lut_tag != DFTAG_NULL && ri_ptr->lut_ref != DFREF_WILDCARD) { if (Hgetelement(hdf_file_id, ri_ptr->lut_tag, ri_ptr->lut_ref, data) == FAIL) HGOTO_ERROR(DFE_GETELEM, FAIL); } /* end if */ /* Re-format the palette into the user's requested interlacing */ if (ri_ptr->lut_il != MFGR_INTERLACE_PIXEL) { uintn pixel_mem_size; /* size of a pixel in memory */ void *pixel_buf; /* buffer for the pixel interlaced data */ int32 count[2]; /* "dimension" info */ pixel_mem_size = (uintn)(ri_ptr->lut_dim.ncomps * DFKNTsize((ri_ptr->lut_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); /* Allocate space for the conversion buffer */ if ((pixel_buf = malloc(pixel_mem_size * (size_t)ri_ptr->lut_dim.xdim)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); count[XDIM] = 1; count[YDIM] = ri_ptr->lut_dim.xdim; GRIil_convert(data, MFGR_INTERLACE_PIXEL, pixel_buf, ri_ptr->lut_il, count, ri_ptr->lut_dim.ncomps, ri_ptr->lut_dim.nt); memcpy(data, pixel_buf, pixel_mem_size * (size_t)ri_ptr->lut_dim.xdim); free(pixel_buf); } /* end if */ done: return ret_value; } /* end GRreadlut() */ /*-------------------------------------------------------------------------- NAME GRsetexternalfile PURPOSE Makes the image data of an RI into an external element special element. USAGE intn GRsetexternalfile(riid,filename,offset) int32 riid; IN: RI ID from GRselect/GRcreate char *filename; IN: name of the external file int32 offset; IN: offset in the external file to store the image RETURNS SUCCEED/FAIL DESCRIPTION Makes the image data of an RI into an external element special element. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRsetexternalfile(int32 riid, const char *filename, int32 offset) { ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 tmp_aid; /* AID returned from HXcreate() */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); if ((ri_ptr->ext_name = (char *)malloc(strlen(filename) + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Mark the image as external and cache parameters */ ri_ptr->ext_img = TRUE; strcpy(ri_ptr->ext_name, filename); ri_ptr->ext_offset = offset; /* Create the image tag/ref if it's a new image */ if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_ref == DFREF_WILDCARD) { ri_ptr->img_tag = DFTAG_RI; ri_ptr->img_ref = Htagnewref(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag); ri_ptr->meta_modified = TRUE; } /* end if */ /* close any existing AID, to convert to external element AID */ if (ri_ptr->img_aid != 0) { Hendaccess(ri_ptr->img_aid); ri_ptr->img_aid = 0; } /* end if */ /* Convert the image into an external element */ if ((tmp_aid = HXcreate(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, filename, offset, 0)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); if (Hendaccess(tmp_aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); done: return ret_value; } /* end GRsetexternalfile() */ /*-------------------------------------------------------------------------- NAME GRsetaccesstype PURPOSE Sets the access for an RI to be either serial or parallel I/O. USAGE intn GRsetaccesstype(riid,accesstype) int32 riid; IN: RI ID from GRselect/GRcreate uintn accesstype; IN: access type for image data, from the following values: DFACC_SERIAL - for serial access DFACC_PARALLEL - for parallel access RETURNS SUCCEED/FAIL DESCRIPTION Sets the access for an RI to be either serial or parallel I/O. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRsetaccesstype(int32 riid, uintn accesstype) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP || (accesstype != DFACC_DEFAULT && accesstype != DFACC_SERIAL && accesstype != DFACC_PARALLEL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* Mark the image as having an access-mode and cache args */ ri_ptr->acc_img = TRUE; ri_ptr->acc_type = accesstype; done: return ret_value; } /* end GRsetaccesstype() */ #ifdef H4_HAVE_LIBSZ /* we have the library */ /*-------------------------------------------------------------------------- NAME GRsetup_szip_parms( ri_info_t *ri_ptr, comp_info *c_info, int32 *cdims) PURPOSE Set up the szip parameters USAGE intn GRsetaccesstype( ri_info_t *ri_ptr, comp_info *c_info, int32 *cdims) ri_info_t *ri_ptr; IN: the RI object comp_info *c_info; IN/OUT: the compression info (szip) int32 *cdims; IN: chunk dims if chunked, else NULL RETURNS SUCCEED/FAIL DESCRIPTION Sets the computed szip parameters before calling HCcreate. --------------------------------------------------------------------------*/ intn GRsetup_szip_parms(ri_info_t *ri_ptr, comp_info *c_info, int32 *cdims) { int32 nt; int32 ndims; int32 ncomp; int32 xdims[H4_MAX_VAR_DIMS]; ndims = 2; xdims[0] = ri_ptr->img_dim.xdim; xdims[1] = ri_ptr->img_dim.ydim; nt = ri_ptr->img_dim.nt; ncomp = ri_ptr->img_dim.ncomps; return HCPsetup_szip_parms(c_info, nt, ncomp, ndims, xdims, cdims); } #endif /*-------------------------------------------------------------------------- NAME GRsetcompress PURPOSE Compressed the image data of an RI. USAGE intn GRsetcompress(riid,comp_type,cinfo) int32 riid; IN: RI ID from GRselect/GRcreate comp_coder_t comp_type; IN: type of compression comp_info *cinfo; IN: compression specific information RETURNS SUCCEED/FAIL DESCRIPTION Compressed the image data of an RI. (Makes the image data of an RI into a compressed special element) GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRsetcompress(int32 riid, comp_coder_t comp_type, comp_info *cinfo) { ri_info_t *ri_ptr; /* ptr to the image to work with */ comp_info cinfo_x; uint32 comp_config; intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); memcpy(&cinfo_x, cinfo, sizeof(comp_info)); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check the validity of the compression type */ if ((comp_type < COMP_CODE_NONE || comp_type >= COMP_CODE_INVALID) && comp_type != COMP_CODE_JPEG) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* Check if the image is already special (all special elements use the buffered driver) */ if (ri_ptr->use_buf_drvr) HGOTO_ERROR(DFE_CANTMOD, FAIL); /* Check that the compression method is enabled */ HCget_config_info(comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_ENCODER_ENABLED) != COMP_ENCODER_ENABLED) { /* if ((comp_config & COMP_ENCODER_ENABLED) == 0) { */ /* encoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } if (comp_type == COMP_CODE_SZIP) #ifndef H4_HAVE_LIBSZ HGOTO_ERROR(DFE_NOSZLIB, FAIL); #else { /* szip is enabled, check and set up szip params */ if (GRsetup_szip_parms(ri_ptr, &cinfo_x, NULL) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } #endif /* Mark the image as being compressed and cache args */ if (comp_type == COMP_CODE_JPEG) { if (ri_ptr->img_dim.ncomps == 1) ri_ptr->img_dim.comp_tag = DFTAG_GREYJPEG5; else if (ri_ptr->img_dim.ncomps == 3) ri_ptr->img_dim.comp_tag = DFTAG_JPEG5; else HGOTO_ERROR(DFE_CANTMOD, FAIL); ri_ptr->use_cr_drvr = TRUE; } /* end if */ else { ri_ptr->comp_img = TRUE; ri_ptr->comp_type = comp_type; } /* end else */ /* Todo: Application may send in COMP_CODE_NONE -BMR 9/2010 */ /* Store compression parameters */ memcpy(&(ri_ptr->cinfo), &cinfo_x, sizeof(comp_info)); /* Mark the image as needing to be a buffered special element */ ri_ptr->use_buf_drvr = 1; /* Make certain the image gets created */ if (GRIgetaid(ri_ptr, DFACC_WRITE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end GRsetcompress() */ /*-------------------------------------------------------------------------- NAME GRgetcompress - Deprecated in favor of GRgetcompinfo PURPOSE Get the compression information of a raster image's data. USAGE intn GRgetcompress(riid,comp_type,cinfo) int32 riid; IN: RI ID from GRselect/GRcreate comp_coder_t* comp_type; OUT: type of compression comp_info* cinfo; OUT: retrieved compression information RETURNS SUCCEED/FAIL DESCRIPTION This routine gets the compression type of the given RI's data, then retrieves the appropriate information into the provided compression info structure. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS JPEG information is currently not retrievable because the JPEG parameters, 'quality' and 'force_baseline', are irreversibly mapped to a quantization table. Thus, only the correct compression type will be returned; cinfo will only contain 0s. --------------------------------------------------------------------------*/ intn GRgetcompress(int32 riid, comp_coder_t *comp_type, comp_info *cinfo) { intn ret_value = SUCCEED; ret_value = GRgetcompinfo(riid, comp_type, cinfo); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* end GRgetcompress() */ /*-------------------------------------------------------------------------- NAME GRgetcomptype PURPOSE Get the compression type of a raster image's data. USAGE intn GRgetcomptype(riid, comp_type) int32 riid; IN: RI ID from GRselect/GRcreate comp_coder_t* comp_type; OUT: type of compression, including obsolete ones RETURNS SUCCEED/FAIL DESCRIPTION Historical note: This function (old name grgetcomptype) was implemented specifically for the hmap project. It gets the compression type of the given RI's data. The existing function GRgetcompinfo did not detect the obsolete compression scheme IMCOMP. Because the hmap writer needs to report when an image with IMCOMP exists in the file, it needs a way to detect such images. One option is to add COMP_CODE_IMCOMP to the enum type comp_coder_t. However, with the consideration of backward/forward compatibility, it would be risky to change the existing public type comp_coder_t while running against deadlines. Instead, it was decided that a function would be made for the hmap project only, and would not be published in the HDF4 documentation. The function, grgetcomptype, will return comp_type as COMP_IMCOMP or one of the values included in the type comp_coder_t. Mar 11, 2011 -BMR Update: Further investigation indicated that it is safe to add COMP_CODE_IMCOMP to comp_coder_t, with the value of 12 (as DFTAG_IMC/DFTAG_IMCOMP), which is after COMP_CODE_JPEG. Extra care had been taken to ensure that GR interface cannot create or write images using IMCOMP compression. grgetcomptype is now changed to GRgetcomptype and published in release 4.2.8. Jul 11, 2012 -BMR GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS At this time, hdp and other tools still use GRgetcompinfo. We need to discuss about how to handle its limitation. In addition, GR2bmapped is using grgetcomptype until we have an official GRgetcomptype or will change to use GRgetcompinfo if we decide not to have GRgetcomptype. The fact that grgetcomptype uses int32 for comp_type makes it not a good long term option due to inconsistency in the library. Mar 11, 2011 -BMR Update: GRgetcomptype is now used in place of grgetcomptype and in hdp to detect and report IMCOMP compression, in release 4.2.8. Jul 11, 2012 -BMR EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRgetcomptype(int32 riid, comp_coder_t *comp_type) { ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 file_id; uint16 scheme; /* compression scheme used for old images */ intn ret_value = SUCCEED; /* clear error */ HEclear(); /* Validate the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check the output argument */ if (comp_type == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_BADPTR, FAIL); file_id = ri_ptr->gr_ptr->hdf_file_id; /* temporary use */ /* Handle old compression schemes separately */ scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { *comp_type = COMP_CODE_JPEG; } else if (scheme == DFTAG_RLE) *comp_type = COMP_CODE_RLE; else if (scheme == DFTAG_IMC || scheme == DFTAG_IMCOMP) *comp_type = COMP_CODE_IMCOMP; /* Use lower-level routine to get the new compression type */ else { comp_coder_t temp_comp_type = COMP_CODE_INVALID; ret_value = HCPgetcomptype(file_id, ri_ptr->img_tag, ri_ptr->img_ref, &temp_comp_type); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); *comp_type = temp_comp_type; } done: return ret_value; } /* end GRgetcomptype() */ /*-------------------------------------------------------------------------- NAME GRgetcompinfo PURPOSE Get the compression information of a raster image's data. USAGE intn GRgetcompinfo(riid,comp_type,cinfo) int32 riid; IN: RI ID from GRselect/GRcreate comp_coder_t* comp_type; OUT: type of compression comp_info* cinfo; OUT: retrieved compression information RETURNS SUCCEED/FAIL DESCRIPTION This routine gets the compression type of the given RI's data, then retrieves the appropriate information into the provided compression info structure. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS JPEG information is currently not retrievable because the JPEG parameters, 'quality' and 'force_baseline', are irreversibly mapped to a quantization table. Thus, only the correct compression type will be returned; cinfo will only contain 0s. --------------------------------------------------------------------------*/ intn GRgetcompinfo(int32 riid, comp_coder_t *comp_type, comp_info *cinfo) { ri_info_t *ri_ptr; /* ptr to the image to work with */ int32 file_id; uint16 scheme; /* compression scheme used for JPEG images */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* and check the output arguments */ if (comp_type == NULL || cinfo == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_BADPTR, FAIL); file_id = ri_ptr->gr_ptr->hdf_file_id; /* temporary use */ /* If the compression scheme used was JPEG, return the compression type and 0 for the 'quality' and 'force_baseline' parameters, because these parameters are currently not possible to be retrieved. */ scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { *comp_type = COMP_CODE_JPEG; cinfo->jpeg.quality = 0; cinfo->jpeg.force_baseline = 0; } /* Catch old images to avoid going into HCPgetcompinfo */ else if (scheme == DFTAG_RLE) /* old image */ *comp_type = COMP_CODE_RLE; else if (scheme == DFTAG_IMC) /* old image */ *comp_type = COMP_CODE_IMCOMP; else { /* use lower-level routine to get the compression information */ ret_value = HCPgetcompinfo(file_id, ri_ptr->img_tag, ri_ptr->img_ref, comp_type, cinfo); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* remove the szip special bit if necessary */ if (*comp_type == COMP_CODE_SZIP) { ret_value = HCPrm_szip_special_bit(cinfo); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } done: return ret_value; } /* end GRgetcompinfo() */ /*-------------------------------------------------------------------------- NAME GRsetattr PURPOSE Write an attribute for an object. USAGE intn GRsetattr(dimid|riid|grid,name,attr_nt,count,data) int32 dimid|riid|grid; IN: DIM|RI|GR ID char *name; IN: name of attribute int32 attr_nt; IN: number-type of attribute int32 count; IN: number of entries of the attribute void * data; IN: attribute data to write RETURNS SUCCEED/FAIL DESCRIPTION Write an attribute for an object (function will figure out ID type). GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Currently does not allow changing NT of an existing attribute. EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRsetattr(int32 id, const char *name, int32 attr_nt, int32 count, const void *data) { int32 hdf_file_id; /* HDF file ID from Hopen */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ TBBT_TREE *search_tree; /* attribute tree to search through */ at_info_t *at_ptr = NULL; /* ptr to the attribute to work with */ int32 at_size; /* size in bytes of the attribute data */ int32 *update_count; /* pointer to the count of attributes in a tree */ uintn *update_flag; /* pointer to the flag to indicate an attribute tree is changed */ uintn found = FALSE; /* boolean for indicating the attribute exists already */ intn is_riid = FALSE; /* whether we had a RIID */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* Make sure that count is less than MAX_ORDER(Vdata) and total size is less than MAX_FIELD_SIZE(Vdata) */ if ((count > MAX_ORDER) || ((count * DFKNTsize(attr_nt)) > MAX_FIELD_SIZE)) HGOTO_ERROR(DFE_ARGS, FAIL); /* check the validity of the args */ if ((HAatom_group(id) != RIIDGROUP && HAatom_group(id) != GRIDGROUP) || data == NULL || name == NULL || count <= 0 || DFKNTsize(attr_nt) == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(id) == GRIDGROUP) { /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); hdf_file_id = gr_ptr->hdf_file_id; search_tree = gr_ptr->gattree; update_flag = &(gr_ptr->gattr_modified); update_count = &(gr_ptr->gattr_count); } /* end if */ else if (HAatom_group(id) == RIIDGROUP) { /* Need this flag for later */ is_riid = TRUE; /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); gr_ptr = ri_ptr->gr_ptr; hdf_file_id = gr_ptr->hdf_file_id; search_tree = ri_ptr->lattree; update_flag = &(ri_ptr->attr_modified); update_count = &(ri_ptr->lattr_count); } /* end if */ else /* shouldn't get here, but what the heck... */ HGOTO_ERROR(DFE_ARGS, FAIL); /* Search for an attribute with the same name */ if ((t = (void **)tbbtfirst(search_tree->root)) != NULL) { do { at_ptr = (at_info_t *)*t; if (at_ptr != NULL && strcmp(at_ptr->name, name) == 0) /* ie. the name matches */ { found = TRUE; break; } /* end if */ } while ((t = (void **)tbbtnext((TBBT_NODE *)t)) != NULL); } /* end if */ if (found == TRUE) /* attribute already exists, just update it */ { int32 new_at_size; /* size in bytes of the new attribute data */ /* Catch the user if he tries to change the NT */ if (attr_nt != at_ptr->nt) HGOTO_ERROR(DFE_ARGS, FAIL); /* Calc. old & new attr. sizes */ new_at_size = count * DFKNTsize((attr_nt | DFNT_NATIVE) & (~DFNT_LITEND)); at_size = at_ptr->len * DFKNTsize((at_ptr->nt | DFNT_NATIVE) & (~DFNT_LITEND)); if ((uint32)new_at_size > gr_ptr->attr_cache) /* check if data is cacheable */ { /* not cacheable, write directly out to disk and throw away old in-memory copy */ int32 AttrID; /* attribute Vdata id */ /* Update data on disk */ if ((AttrID = VSattach(hdf_file_id, (int32)at_ptr->ref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (VSsetfields(AttrID, at_ptr->name) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_BADFIELDS, FAIL); } /* end if */ if (VSwrite(AttrID, data, count, FULL_INTERLACE) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_VSWRITE, FAIL); } /* end if */ if (VSdetach(AttrID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); /* Update in-memory fields */ at_ptr->len = count; at_ptr->data_modified = FALSE; /* Toss the old data, it's not valid and it's un-cacheable now */ if (at_ptr->data != NULL) HDfreenclear(at_ptr->data); } /* end if */ else { /* check if we need a bigger buffer */ if (new_at_size > at_size || at_ptr->data == NULL) { free(at_ptr->data); if ((at_ptr->data = malloc(new_at_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ memcpy(at_ptr->data, data, new_at_size); /* Update in-memory fields */ at_ptr->len = count; at_ptr->data_modified = TRUE; *update_flag = TRUE; /* flag the tree as changed */ } /* end else */ } /* end if */ else /* a new attribute */ { if ((at_ptr = (at_info_t *)malloc(sizeof(at_info_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Fill in fields for the new attribute */ at_ptr->index = *update_count; /* get the index and update the tree's count */ at_ptr->nt = attr_nt; at_ptr->len = count; /* allocate space for the attribute name & copy it */ if ((at_ptr->name = (char *)malloc(strlen(name) + 1)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); strcpy(at_ptr->name, name); /* calc. the attr size to see if it is worth caching */ at_size = at_ptr->len * DFKNTsize((at_ptr->nt | DFNT_NATIVE) & (~DFNT_LITEND)); if ((uint32)at_size < gr_ptr->attr_cache) { /* cacheable */ /* allocate space for the attribute name & copy it */ if ((at_ptr->data = (char *)malloc(at_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); memcpy(at_ptr->data, data, at_size); at_ptr->data_modified = TRUE; at_ptr->ref = DFREF_WILDCARD; } /* end if */ else { /* non-cacheable */ if ((at_ptr->ref = (uint16)VHstoredata(hdf_file_id, at_ptr->name, data, at_ptr->len, at_ptr->nt, RIGATTRNAME, RIGATTRCLASS)) == (uint16)FAIL) HGOTO_ERROR(DFE_VSCANTCREATE, FAIL); at_ptr->data = NULL; at_ptr->data_modified = FALSE; } /* end else */ at_ptr->new_at = TRUE; /* Add the attribute to the attribute tree */ if (tbbtdins(search_tree, at_ptr, NULL) == NULL) HGOTO_ERROR(DFE_TBBTINS, FAIL); /* flag the attribute tree as being modified */ *update_flag = TRUE; (*update_count)++; /* get the index and update the tree's count */ } /* end else */ /* set this flag also, if we set local attributes */ if (is_riid == TRUE) { if (found == FALSE) /* when adding new attributes, make certain the RI gets updated */ ri_ptr->meta_modified = TRUE; gr_ptr->gr_modified = TRUE; } /* end if */ done: return ret_value; } /* end GRsetattr() */ /*-------------------------------------------------------------------------- NAME GRattrinfo PURPOSE Get attribute information for an object. USAGE intn GRattrinfo(dimid|riid|grid,index,name,attr_nt,count) int32 dimid|riid|grid; IN: DIM|RI|GR ID int32 index; IN: index of the attribute for info char *name; OUT: name of attribute int32 attr_nt; OUT: number-type of attribute int32 count; OUT: number of entries of the attribute RETURNS SUCCEED/FAIL DESCRIPTION Get attribute information for an object. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRattrinfo(int32 id, int32 index, char *name, int32 *attr_nt, int32 *count) { gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ TBBT_TREE *search_tree; /* attribute tree to search through */ at_info_t *at_ptr; /* ptr to the attribute to work with */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the ID, the index is checked below */ if (HAatom_group(id) != RIIDGROUP && HAatom_group(id) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(id) == GRIDGROUP) { /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); if (index < 0 || index >= gr_ptr->gattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = gr_ptr->gattree; } /* end if */ else if (HAatom_group(id) == RIIDGROUP) { /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); if (index < 0 || index >= ri_ptr->lattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = ri_ptr->lattree; } /* end if */ else /* shouldn't get here, but what the heck... */ HGOTO_ERROR(DFE_ARGS, FAIL); if ((t = (void **)tbbtdfind(search_tree, &index, NULL)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); at_ptr = (at_info_t *)*t; if (name != NULL) strcpy(name, at_ptr->name); if (attr_nt != NULL) *attr_nt = at_ptr->nt; if (count != NULL) *count = at_ptr->len; done: return ret_value; } /* end GRattrinfo() */ /*-------------------------------------------------------------------------- NAME GRgetattr PURPOSE Read an attribute for an object. USAGE intn GRgetattr(dimid|riid|grid,index,data) int32 dimid|riid|grid; IN: DIM|RI|GR ID int32 index; IN: index of the attribute for info void * data; OUT: data read for attribute RETURNS SUCCEED/FAIL DESCRIPTION Read an attribute for an object. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRgetattr(int32 id, int32 index, void *data) { int32 hdf_file_id; /* HDF file ID from Hopen */ gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ TBBT_TREE *search_tree; /* attribute tree to search through */ at_info_t *at_ptr; /* ptr to the attribute to work with */ int32 at_size; /* size in bytes of the attribute data */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the ID & data ptr, the index is checked below */ if ((HAatom_group(id) != RIIDGROUP && HAatom_group(id) != GRIDGROUP) || data == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(id) == GRIDGROUP) { /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); if (index < 0 || index >= gr_ptr->gattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = gr_ptr->gattree; } /* end if */ else if (HAatom_group(id) == RIIDGROUP) { /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); gr_ptr = ri_ptr->gr_ptr; if (index < 0 || index >= ri_ptr->lattr_count) HGOTO_ERROR(DFE_ARGS, FAIL); search_tree = ri_ptr->lattree; } /* end if */ else /* shouldn't get here, but what the heck... */ HGOTO_ERROR(DFE_ARGS, FAIL); hdf_file_id = gr_ptr->hdf_file_id; if ((t = (void **)tbbtdfind(search_tree, &index, NULL)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); at_ptr = (at_info_t *)*t; /* Calculate the size of the attribute data */ at_size = at_ptr->len * DFKNTsize((at_ptr->nt | DFNT_NATIVE) & (~DFNT_LITEND)); /* Check if the attribute has been read in yet, and get it if not */ if (at_ptr->data == NULL) { int32 AttrID; /* attribute Vdata id */ /* Grab some memory for the attribute data */ if ((at_ptr->data = malloc(at_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((AttrID = VSattach(hdf_file_id, (int32)at_ptr->ref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (VSsetfields(AttrID, at_ptr->name) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_BADFIELDS, FAIL); } /* end if */ if (VSread(AttrID, at_ptr->data, at_ptr->len, FULL_INTERLACE) == FAIL) { VSdetach(AttrID); HGOTO_ERROR(DFE_VSWRITE, FAIL); } /* end if */ if (VSdetach(AttrID) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } /* end if */ /* Copy the attribute into the user's buffer */ memcpy(data, at_ptr->data, at_size); /* If the attribute is too large to keep in memory, chuck it again */ if ((uint32)at_size > gr_ptr->attr_cache) HDfreenclear(at_ptr->data); done: return ret_value; } /* end GRgetattr() */ /*-------------------------------------------------------------------------- NAME GRfindattr PURPOSE Get the index of an attribute with a given name for an object. USAGE int32 GRfindattr(int32 dimid|riid|grid,char *name) int32 dimid|riid|grid; IN: DIM|RI|GR ID char *name; IN: name of attribute to search for RETURNS Valid index for an attribute on success, FAIL on failure DESCRIPTION Get the index of an attribute with a given name for an object. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 GRfindattr(int32 id, const char *name) { gr_info_t *gr_ptr; /* ptr to the GR information for this grid */ ri_info_t *ri_ptr; /* ptr to the image to work with */ void **t; /* temp. ptr to the image found */ TBBT_TREE *search_tree; /* attribute tree to search through */ at_info_t *at_ptr; /* ptr to the attribute to work with */ int32 ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* check the validity of the RI ID */ if (HAatom_group(id) != RIIDGROUP && HAatom_group(id) != GRIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(id) == GRIDGROUP) { /* locate GR's object in hash table */ if (NULL == (gr_ptr = (gr_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_GRNOTFOUND, FAIL); search_tree = gr_ptr->gattree; } /* end if */ else if (HAatom_group(id) == RIIDGROUP) { /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(id))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); search_tree = ri_ptr->lattree; } /* end if */ else /* shouldn't get here, but what the heck... */ HGOTO_ERROR(DFE_ARGS, FAIL); if ((t = (void **)tbbtfirst(search_tree->root)) == NULL) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); do { at_ptr = (at_info_t *)*t; if (at_ptr != NULL && strcmp(at_ptr->name, name) == 0) /* ie. the name matches */ HGOTO_DONE(at_ptr->index); } while ((t = (void **)tbbtnext((TBBT_NODE *)t)) != NULL); ret_value = (FAIL); done: return ret_value; } /* end GRfindattr() */ /*-------------------------------------------------------------------------- NAME GRIstart PURPOSE GR-level initialization routine USAGE intn GRIstart() RETURNS Returns SUCCEED/FAIL DESCRIPTION Register the shut-down routine (GRPshutdown) for call with atexit GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&GRPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end GRIstart() */ /*-------------------------------------------------------------------------- NAME GRIgetaid PURPOSE Internal routine to make certain an image has an AID attached to it. USAGE intn GRIgetaid(img_ptr, acc_perm) ri_info_t *img_ptr; IN: pointer to the image info for the image to access. intn acc_perm; IN: method of access desired. RETURNS SUCCEED/FAIL DESCRIPTION Attach an AID to the image's in-memory structures, in order to better manage I/O. If the prior method of access for the image's AID was read and write permission, then the previous AID is closed and reopened for both read & write permission. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static intn GRIgetaid(ri_info_t *ri_ptr, intn acc_perm) { int32 hdf_file_id; /* HDF file ID */ gr_info_t *gr_ptr; /* ptr to the file GR information for this image */ model_info minfo; /* Dummy modeling information structure */ intn ret_value = SUCCEED; HEclear(); if (ri_ptr == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* initialize important values */ gr_ptr = ri_ptr->gr_ptr; hdf_file_id = gr_ptr->hdf_file_id; /* everybody gets read permission */ acc_perm |= DFACC_READ; /* Test if the tag/ref pair has been assigned yet */ if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_ref == DFREF_WILDCARD) { if (ri_ptr->use_cr_drvr) ri_ptr->img_tag = DFTAG_CI; else ri_ptr->img_tag = DFTAG_RI; ri_ptr->img_ref = Htagnewref(hdf_file_id, ri_ptr->img_tag); } /* end if */ /* Check if we need to increase the access permissions asked for */ if (ri_ptr->comp_img || (ri_ptr->img_aid != 0 && (acc_perm & DFACC_WRITE) != 0 && (ri_ptr->acc_perm & DFACC_WRITE) == 0)) { /* Close the old AID (which only had read permission) */ Hendaccess(ri_ptr->img_aid); ri_ptr->img_aid = 0; } /* end if */ /* Check if we are the first to open the AID */ if (ri_ptr->img_aid == 0) { /* Go get the AID */ if (ri_ptr->comp_img) { /* Need to create the compressed data element */ if ((ri_ptr->img_aid = HCcreate(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, COMP_MODEL_STDIO, &minfo, ri_ptr->comp_type, &(ri_ptr->cinfo))) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); ri_ptr->comp_img = 0; /* reset the compression flag */ } /* end if */ else { /* Check for old-style compressed raster or just open normally */ if (ri_ptr->use_cr_drvr) { /* Use compressed raster driver */ uintn pixel_size; /* size of a pixel on disk */ pixel_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); /* Wraps an existing compressed raster image with the special element*/ if ((ri_ptr->img_aid = HRPconvert(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, ri_ptr->img_dim.xdim, ri_ptr->img_dim.ydim, ri_ptr->img_dim.comp_tag, &(ri_ptr->cinfo), pixel_size)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); } /* end if */ else { /* Use regular startaccess to create element */ if ((ri_ptr->img_aid = Hstartaccess(hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, acc_perm)) == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); } /* end else */ } /* end else */ if (ri_ptr->use_buf_drvr) { /* Convert to buffered special element if needed */ if (HBconvert(ri_ptr->img_aid) == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); } /* end if */ ri_ptr->acc_perm = acc_perm; } /* end if */ done: if (ret_value == FAIL) { /* Error condition cleanup */ ri_ptr->img_aid = 0; } return ret_value; } /* end GRIgetaid() */ /*-------------------------------------------------------------------------- NAME GRPshutdown PURPOSE Terminate various static buffers. USAGE intn GRPshutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the GR routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn GRPshutdown(void) { if (gr_tree != NULL) { /* Free the vfile tree */ tbbtdfree(gr_tree, GRIgrdestroynode, NULL); /* Destroy the atom groups for GRs and RIs */ HAdestroy_group(GRIDGROUP); HAdestroy_group(RIIDGROUP); gr_tree = NULL; } /* end if */ return SUCCEED; } /* end GRPshutdown() */ /*====================== Chunking Routines ================================*/ /* NOTE: the definition of the union HDF_CHUNK_DEF can be found in hproto.h */ /****************************************************************************** NAME GRsetchunk -- make GR a chunked GR DESCRIPTION This routine makes the GR a chunked GR according to the chunk definition passed in. The image currently cannot be special already. i.e. NBIT, COMPRESSED, or EXTERNAL. This is an Error. The definition of the HDF_CHUNK_DEF union with relevant fields is: typedef union hdf_chunk_def_u { int32 chunk_lengths[2]; Chunk lengths along each dimension struct { int32 chunk_lengths[2]; Chunk lengths along each dimension int32 comp_type; Compression type comp_info cinfo; Compression info struct }comp; } HDF_CHUNK_DEF The variable argument 'flags' is a bit-or'd value which can currently be 'HDF_CHUNK' or 'HDF_CHUNK | HDF_COMP'. The simplest is the 'chunk_lengths' array specifying chunk lengths for each dimension where the 'flags' argument set to 'HDF_CHUNK'; COMPRESSION is set by using the 'HDF_CHUNK_DEF' union to set the appropriate compression information along with the required chunk lengths for each dimension. The compression information is the same as that set in 'GRsetcompress()'. The bit-or'd 'flags' argument' is set to 'HDF_CHUNK | HDF_COMP'. See the example in pseudo-C below for further usage. The maximum number of Chunks in an HDF file is 65,535. The performance of the GRxxx interface with chunking is greatly affected by the users access pattern over the image and by the maximum number of chunks set in the chunk cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. See the routine GRsetchunkcache() for further info on the chunk cache and how to set the maximum number of chunks in the chunk cache. A default chunk cache is always created. The following example shows the organization of chunks for a 2D array. e.g. 4x4 array with 2x2 chunks. The array shows the layout of chunks in the chunk array. 4 --------------------- | | | Y | (0,1) | (1,1) | ^ | | | | 2 --------------------- | | | | | | (0,0) | (1,0) | | | | | | --------------------- | 0 2 4 ---------------> X --Without compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set Chunking -- GRsetchunk(riid, chunk_def, HDF_CHUNK); ...... } --With compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths first -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set compression -- chunk_def.comp.cinfo.deflate.level = 9; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; -- Set Chunking with Compression -- GRsetchunk(riid, chunk_def, HDF_CHUNK | HDF_COMP); ...... } NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn GRsetchunk(int32 riid, /* IN: raster access id */ HDF_CHUNK_DEF chunk_def, /* IN: chunk definition */ int32 flags /* IN: flags */) { ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ HCHUNK_DEF chunk[1]; /* H-level chunk definition */ HDF_CHUNK_DEF *cdef = NULL; /* GR Chunk definition */ model_info minfo; /* dummy model info struct */ comp_info cinfo; /* compression info - NBIT */ int32 *cdims = NULL; /* array of chunk lengths */ uintn pixel_mem_size; /* size of a pixel in memory */ uintn pixel_disk_size; /* size of a pixel on disk */ void *fill_pixel = NULL; /* converted value for the filled pixel */ int32 at_index; /* attribute index for the fill value */ uint32 comp_config; int32 ndims = 0; /* # dimensions i.e. rank */ uint8 nlevels = 1; /* default # levels is 1 */ intn i; /* loop variable */ int32 hdf_file_id; /* HDF file ID */ gr_info_t *gr_ptr; /* ptr to the file GR information for this image */ intn ret_value = SUCCEED; /* return value */ /* clear error stack and check validity of args */ HEclear(); memset(chunk, 0, sizeof(chunk[0])); /* Check some args */ /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* initialize important values */ gr_ptr = ri_ptr->gr_ptr; hdf_file_id = gr_ptr->hdf_file_id; /* Test if the tag/ref pair has been assigned yet Note that HMCcreate() needs to do the Hstartaccess on the special tag/ref pair that is created. If another GRxx routine does it then the special element cannot be created. Special elements require 'lazy' DD creation. */ if (ri_ptr->img_tag == DFTAG_NULL || ri_ptr->img_ref == DFREF_WILDCARD) { ri_ptr->img_tag = DFTAG_RI; ri_ptr->img_ref = Htagnewref(hdf_file_id, ri_ptr->img_tag); } /* end if */ /* Decide type of definition passed in */ switch (flags) { case HDF_CHUNK: /* case where chunk_def only has chunk lengths */ cdef = (HDF_CHUNK_DEF *)&chunk_def; cdims = cdef->chunk_lengths; chunk[0].chunk_flag = 0; /* nothing set for this now */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ chunk[0].cinfo = &cinfo; /* dummy */ chunk[0].minfo = &minfo; /* dummy */ break; case (HDF_CHUNK | HDF_COMP): /* EIP 9/12/03 * We have to take special care if SZIP library is not available; * Fow all other compression types do */ cdef = (HDF_CHUNK_DEF *)&chunk_def; /* Check that the compression encoder is available */ HCget_config_info((comp_coder_t)(cdef->comp.comp_type), &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } cdims = cdef->comp.chunk_lengths; chunk[0].chunk_flag = SPECIAL_COMP; /* Compression */ chunk[0].comp_type = (comp_coder_t)cdef->comp.comp_type; chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ chunk[0].minfo = &minfo; /* dummy */ if ((comp_coder_t)cdef->comp.comp_type != COMP_CODE_SZIP) { chunk[0].cinfo = &cdef->comp.cinfo; } else #ifdef H4_HAVE_LIBSZ /* we have the library */ { memcpy(&cinfo, &(cdef->comp.cinfo), sizeof(comp_info)); if (GRsetup_szip_parms(ri_ptr, &cinfo, cdims) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); chunk[0].cinfo = &cinfo; } #else /* we do not have the SZIP library */ { HGOTO_ERROR(DFE_NOSZLIB, FAIL); } #endif /* H4_HAVE_LIBSZ */ break; case (HDF_CHUNK | HDF_NBIT): /* don't support NBIT for GRs */ HGOTO_ERROR(DFE_UNSUPPORTED, FAIL); default: HGOTO_ERROR(DFE_BADSCHEME, FAIL); } /* end switch */ /* Now start setting chunk info */ ndims = 2; /* set number of dims i.e. rank for Rasters it is 2 */ /* allocate space for chunk dimensions */ if ((chunk[0].pdims = (DIM_DEF *)malloc(ndims * sizeof(DIM_DEF))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* initialize image/chunk sizes using CHUNK definition structure */ chunk[0].chunk_size = 1; chunk[0].num_dims = ndims; for (i = 0; i < ndims; i++) { /* get dimension length from shape arrays */ if (i == 0) /* X */ chunk[0].pdims[i].dim_length = ri_ptr->img_dim.xdim; else /* Y */ chunk[0].pdims[i].dim_length = ri_ptr->img_dim.ydim; /* set chunk lengths */ if (cdims[i] >= 1) chunk[0].pdims[i].chunk_length = cdims[i]; else { /* chunk length is less than 1 */ ret_value = FAIL; goto done; } /* Data distribution along dimensions * Check dimension length against chunk length */ if (i == 0) /* X */ { if (cdims[i] == ri_ptr->img_dim.xdim) chunk[0].pdims[i].distrib_type = 0; /* NONE */ else chunk[0].pdims[i].distrib_type = 1; /* BLOCK */ } else /* Y */ { if (cdims[i] == ri_ptr->img_dim.ydim) chunk[0].pdims[i].distrib_type = 0; /* NONE */ else chunk[0].pdims[i].distrib_type = 1; /* BLOCK */ } /* compute chunk size */ chunk[0].chunk_size *= cdims[i]; } /* end for ndims */ /* Get the size of the pixels in memory and on disk */ pixel_mem_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize((ri_ptr->img_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); pixel_disk_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); /* Set number type size i.e. size of data type number of components times the number type */ chunk[0].nt_size = ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt); /* allocate space for fill pixel */ if ((fill_pixel = malloc(pixel_disk_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* create correct disk version of fill pixel */ if (ri_ptr->fill_value != NULL) { if (FAIL == DFKconvert(ri_ptr->fill_value, fill_pixel, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps, DFACC_WRITE, 0, 0)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else /* create default pixel fill value of all zero components */ { /* Try to find a fill value attribute */ if ((at_index = GRfindattr(riid, FILL_ATTR)) != FAIL) { /* Found a fill value attribute */ if ((ri_ptr->fill_value = malloc(pixel_mem_size)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (GRgetattr(riid, at_index, ri_ptr->fill_value) == FAIL) HGOTO_ERROR(DFE_BADATTR, FAIL); if (FAIL == DFKconvert(ri_ptr->fill_value, fill_pixel, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps, DFACC_WRITE, 0, 0)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ else memset(fill_pixel, 0, pixel_disk_size); } /* end else */ /* check to see already special. Error if already special since doubly special elements are not yet handled. HMCcreate should catch this....*/ /* Create GR as chunked element */ ret_value = HMCcreate(hdf_file_id, /* HDF file handle */ (uint16)ri_ptr->img_tag, /* Data tag */ (uint16)ri_ptr->img_ref, /* Data ref */ nlevels, /* nlevels */ pixel_disk_size, /* fill value length */ (void *)fill_pixel, /* fill value */ (HCHUNK_DEF *)chunk /* chunk definition */); /* check return */ if (ret_value != FAIL) { /* close old aid and set new one ..hmm......this is for the doubly special hack */ if ((ri_ptr->img_aid != 0) && (ri_ptr->img_aid != FAIL)) { if (FAIL == Hendaccess(ri_ptr->img_aid)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } ri_ptr->img_aid = ret_value; /* set new access id */ ret_value = SUCCEED; /* re-set to successful */ } /* end if */ done: /* free fill value */ free(fill_pixel); /* free chunk dims */ free(chunk[0].pdims); return ret_value; } /* GRsetchunk */ /****************************************************************************** NAME GRgetchunkinfo -- get Info on GR DESCRIPTION This routine gets any special information on the GR. If its chunked, chunked and compressed or just a regular GR. Currently it will only fill the array of chunk lengths for each dimension as specified in the 'HDF_CHUNK_DEF' union. You can pass in a NULL for 'chunk_def' if don't want the chunk lengths for each dimension. If successful it will return a bit-or'd value in 'flags' indicating if the GR is chunked(HDF_CHUNK), chunked and compressed(HDF_CHUNK | HDF_COMP) or non-chunked(HDF_NONE). e.g. 4x4 array - Pseudo-C { HDF_CHUNK_DEF rchunk_def; int32 cflags; ... GRgetchunkinfo(riid, &rchunk_def, &cflags); ... } RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn GRgetchunkinfo(int32 riid, /* IN: sds access id */ HDF_CHUNK_DEF *chunk_def, /* IN/OUT: chunk definition */ int32 *flags /* IN/OUT: flags */) { ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ sp_info_block_t info_block; /* special info block */ int16 special; /* Special code */ intn i; /* loop variable */ intn ret_value = SUCCEED; /* return value */ /* clear error stack and check validity of args */ HEclear(); /* Check some args */ /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* check if access id exists already */ if (ri_ptr->img_aid == 0) { /* now get access id, use read access for now */ if (GRIgetaid(ri_ptr, DFACC_READ) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else if (ri_ptr->img_aid == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* inquire about element */ ret_value = Hinquire(ri_ptr->img_aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { /* make sure it is chunked element */ if (special == SPECIAL_CHUNKED) { /* get info about chunked element */ if ((ret_value = HDget_special_info(ri_ptr->img_aid, &info_block)) != FAIL) { /* Does user want chunk lengths back? */ if (chunk_def != NULL) { /* we assume user has allocated space for chunk lengths */ /* copy chunk lengths over */ for (i = 0; i < info_block.ndims; i++) { chunk_def->chunk_lengths[i] = info_block.cdims[i]; } } /* dont forget to free up info is special info block This space was allocated by the library */ free(info_block.cdims); /* Check to see if compressed */ switch (info_block.comp_type) { case COMP_CODE_NONE: *flags = HDF_CHUNK; break; case COMP_CODE_NBIT: /* is this an error? NBIT can't be set in GRsetchunk(). */ *flags = (HDF_CHUNK | HDF_NBIT); break; default: *flags = (HDF_CHUNK | HDF_COMP); break; } } } else /* not special chunked element */ { *flags = HDF_NONE; /* regular GR */ } } done: return ret_value; } /* GRgetchunkinfo() */ /****************************************************************************** NAME GRwritechunk -- write the specified chunk to the GR DESCRIPTION This routine writes a whole chunk of data to the chunked GR specified by chunk 'origin' for the given GR and can be used instead of GRwriteimage() when this information is known. This routine has less overhead and is much faster than using GRwriteimage(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See GRsetchunk() for a description of the organization of chunks in an GR. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn GRwritechunk(int32 riid, /* IN: access aid to GR */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */) { ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ uintn pixel_mem_size, /* size of a pixel in memory */ pixel_disk_size; /* size of a pixel on disk */ void *img_data = NULL; /* buffer used for conversion */ int16 special; /* Special code */ int32 csize; /* physical chunk size */ sp_info_block_t info_block; /* special info block */ int8 platnumsubclass; /* the machine type of the current platform */ uintn convert; /* whether to convert or not */ intn i; uint16 scheme; /* compression scheme used for JPEG images */ uint32 comp_config; comp_coder_t comp_type; comp_info cinfo; intn status = FAIL; intn switch_interlace = FALSE; /* whether the memory interlace needs to be switched around */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); info_block.cdims = NULL; /* Check args */ if (origin == NULL || datap == NULL) { ret_value = FAIL; goto done; } /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* check if access id exists already */ if (ri_ptr->img_aid == 0) { /* now get access id, use write access */ if (GRIgetaid(ri_ptr, DFACC_WRITE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else if (ri_ptr->img_aid == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); comp_type = COMP_CODE_NONE; scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { comp_type = COMP_CODE_JPEG; cinfo.jpeg.quality = 0; cinfo.jpeg.force_baseline = 0; } else if (scheme == DFTAG_IMC) { /* coder no longer supported */ HGOTO_ERROR(DFE_BADCODER, FAIL); } else { /* use lower-level routine to get the compression information */ status = HCPgetcompinfo(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, &comp_type, &cinfo); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (comp_type != COMP_CODE_NONE) { /* Check that the compression encoder is available */ HCget_config_info(comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } } /* inquire about element */ ret_value = Hinquire(ri_ptr->img_aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) { /* yes */ /* get info about chunked element */ if ((ret_value = HDget_special_info(ri_ptr->img_aid, &info_block)) != FAIL) { /* calculate chunk size */ csize = 1; for (i = 0; i < info_block.ndims; i++) csize *= info_block.cdims[i]; /* Get the size of the pixels in memory and on disk */ pixel_mem_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize((ri_ptr->img_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); pixel_disk_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); /* figure out if data needs to be converted */ /* Get number-type and conversion information */ if (FAIL == (platnumsubclass = DFKgetPNSC(ri_ptr->img_dim.nt & (~DFNT_LITEND), DF_MT))) HGOTO_ERROR(DFE_INTERNAL, FAIL); convert = (ri_ptr->img_dim.file_nt_subclass != platnumsubclass) || (pixel_mem_size != pixel_disk_size); /* is conversion necessary? */ /* check interlace */ if (ri_ptr->img_dim.il != MFGR_INTERLACE_PIXEL) switch_interlace = TRUE; /* convert if necessary */ if (convert || switch_interlace == TRUE) { /* Allocate space for the conversion buffer */ if ((img_data = malloc(pixel_disk_size * csize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (switch_interlace == TRUE) { void *pixel_buf; /* buffer for the pixel interlaced data */ /* Allocate space for the conversion buffer */ if ((pixel_buf = malloc(pixel_mem_size * csize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (FAIL == GRIil_convert((void *)datap, ri_ptr->img_dim.il, pixel_buf, MFGR_INTERLACE_PIXEL, info_block.cdims, ri_ptr->img_dim.ncomps, ri_ptr->img_dim.nt)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* convert the pixel data into the HDF disk format */ if (FAIL == DFKconvert(pixel_buf, img_data, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * csize, DFACC_WRITE, 0, 0)) HGOTO_ERROR(DFE_INTERNAL, FAIL); free(pixel_buf); } /* end if */ else /* convert the pixel data into the HDF disk format */ { if (FAIL == DFKconvert((void *)datap, img_data, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * csize, DFACC_WRITE, 0, 0)) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Write chunk out, */ if ((ret_value = HMCwriteChunk(ri_ptr->img_aid, origin, img_data)) != FAIL) ret_value = SUCCEED; } else { /* no conversion necessary, just use the user's buffer */ /* Write chunk out, */ if ((ret_value = HMCwriteChunk(ri_ptr->img_aid, origin, datap)) != FAIL) ret_value = SUCCEED; } /* end else */ } /* end if get special info block */ } else /* not special CHUNKED */ ret_value = FAIL; } /* end if Hinquire */ done: /* don't forget to free up info is special info block This space was allocated by the library */ free(info_block.cdims); /* free conversion buffers if we created them */ free(img_data); return ret_value; } /* GRwritechunk() */ /****************************************************************************** NAME GRreadchunk -- read the specified chunk to the GR DESCRIPTION This routine reads a whole chunk of data from the chunked GR specified by chunk 'origin' for the given GR and can be used instead of GRreaddata() when this information is known. This routine has less overhead and is much faster than using GRreaddata(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See GRsetchunk() for a description of the organization of chunks in an GR. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn GRreadchunk(int32 riid, /* IN: access aid to GR */ int32 *origin, /* IN: origin of chunk to write */ void *datap /* IN/OUT: buffer for data */) { ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ uintn pixel_mem_size; /* size of a pixel in memory */ uintn pixel_disk_size; /* size of a pixel on disk */ void *img_data = NULL; /* buffer used for conversion */ int16 special; /* Special code */ int32 csize; /* physical chunk size */ sp_info_block_t info_block; /* special info block */ int8 platnumsubclass; /* the machine type of the current platform */ uintn convert; /* whether to convert or not */ intn i; uint16 scheme; /* compression scheme used for JPEG images */ uint32 comp_config; comp_coder_t comp_type; comp_info cinfo; intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); info_block.cdims = NULL; /* Check args */ if (origin == NULL || datap == NULL) { ret_value = FAIL; goto done; } /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* check if access id exists already */ if (ri_ptr->img_aid == 0) { /* now get access id, use write access */ if (GRIgetaid(ri_ptr, DFACC_WRITE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else if (ri_ptr->img_aid == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); comp_type = COMP_CODE_NONE; scheme = ri_ptr->img_dim.comp_tag; if (scheme == DFTAG_JPEG5 || scheme == DFTAG_GREYJPEG5 || scheme == DFTAG_JPEG || scheme == DFTAG_GREYJPEG) { comp_type = COMP_CODE_JPEG; cinfo.jpeg.quality = 0; cinfo.jpeg.force_baseline = 0; } /* Catch old images to avoid going into HCPgetcompinfo. Note: I don't think old images have chunking, but just in case I'm wrong. Should verify these later. -BMR, Jul 2012 */ else if (scheme == DFTAG_RLE) /* old image */ comp_type = COMP_CODE_RLE; else if (scheme == DFTAG_IMC) /* old image */ comp_type = COMP_CODE_IMCOMP; else { /* use lower-level routine to get the compression information */ status = HCPgetcompinfo(ri_ptr->gr_ptr->hdf_file_id, ri_ptr->img_tag, ri_ptr->img_ref, &comp_type, &cinfo); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_RLE && comp_type != COMP_CODE_IMCOMP) { /* BMR: this is reading, why do we need encoder? */ /* Check that the compression encoder is available */ HCget_config_info(comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_config & COMP_DECODER_ENABLED) == 0) { /* decoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } } /* inquire about element */ ret_value = Hinquire(ri_ptr->img_aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) { /* yes */ /* get info about chunked element */ if ((ret_value = HDget_special_info(ri_ptr->img_aid, &info_block)) != FAIL) { /* calculate chunk size */ csize = 1; for (i = 0; i < info_block.ndims; i++) csize *= info_block.cdims[i]; /* Get the size of the pixels in memory and on disk */ pixel_mem_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize((ri_ptr->img_dim.nt | DFNT_NATIVE) & (~DFNT_LITEND))); pixel_disk_size = (uintn)(ri_ptr->img_dim.ncomps * DFKNTsize(ri_ptr->img_dim.nt)); /* figure out if data needs to be converted */ /* Get number-type and conversion information */ if (FAIL == (platnumsubclass = DFKgetPNSC(ri_ptr->img_dim.nt & (~DFNT_LITEND), DF_MT))) HGOTO_ERROR(DFE_INTERNAL, FAIL); convert = (ri_ptr->img_dim.file_nt_subclass != platnumsubclass) || (pixel_mem_size != pixel_disk_size); /* is conversion necessary? */ /* read chunk in */ if (convert) { /* Allocate space for the conversion buffer */ if ((img_data = malloc(pixel_disk_size * csize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* read it in */ if ((ret_value = HMCreadChunk(ri_ptr->img_aid, origin, img_data)) != FAIL) { if (FAIL == DFKconvert(img_data, datap, ri_ptr->img_dim.nt, ri_ptr->img_dim.ncomps * csize, DFACC_READ, 0, 0)) HGOTO_ERROR(DFE_INTERNAL, FAIL); ret_value = SUCCEED; } } /* end if */ else { if ((ret_value = HMCreadChunk(ri_ptr->img_aid, origin, datap)) != FAIL) ret_value = SUCCEED; } /* Check whether we need to convert the buffer to the user's */ /* requested interlace scheme. */ /* Note: This is implemented in a horribly ugly & slow manner, but I'm */ /* in a bit of a hurry right now - QAK */ /* I took this code from GRwrite() and put it here - GV */ if (ri_ptr->im_il != MFGR_INTERLACE_PIXEL) { void *pixel_buf; /* buffer for the pixel interlaced data */ /* Allocate space for the conversion buffer */ if ((pixel_buf = malloc(pixel_mem_size * csize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (FAIL == GRIil_convert(datap, MFGR_INTERLACE_PIXEL, pixel_buf, ri_ptr->im_il, info_block.cdims, ri_ptr->img_dim.ncomps, ri_ptr->img_dim.nt)) HGOTO_ERROR(DFE_INTERNAL, FAIL); memcpy(datap, pixel_buf, pixel_mem_size * csize); free(pixel_buf); } /* end if */ } /* end if get special info block */ } else /* not special CHUNKED */ ret_value = FAIL; } /* end if Hinquire */ done: /* don't forget to free up info is special info block This space was allocated by the library */ free(info_block.cdims); /* free conversion buffers if any */ free(img_data); return ret_value; } /* GRreadchunk() */ /****************************************************************************** NAME GRsetchunkcache - maximum number of chunks to cache DESCRIPTION Set the maximum number of chunks to cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. This routine allows the setting of maximum number of chunks that can be cached, 'maxcache'. The performance of the GRxxx interface with chunking is greatly affected by the users access pattern over the image and by the maximum number of chunks set in the chunk cache. The number chunks that can be set in the cache is process memory limited. It is a good idea to always set the maximum number of chunks in the cache as the default heuristic does not take into account the memory available for the application. By default when the GR is promoted to a chunked element the maximum number of chunks in the cache 'maxcache' is set to the number of chunks along the last dimension. The values set here affects the current GR object's caching behaviour. If the chunk cache is full and 'maxcache' is greater then the current 'maxcache' value, then the chunk cache is reset to the new 'maxcache' value, else the chunk cache remains at the current 'maxcache' value. If the chunk cache is not full, then the chunk cache is set to the new 'maxcache' value only if the new 'maxcache' value is greater than the current number of chunks in the cache. Use flags argument of 'HDF_CACHEALL' if the whole object is to be cached in memory, otherwise pass in zero(0). Currently you can only pass in zero. See GRsetchunk() for a description of the organization of chunks in an GR. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS Returns the 'maxcache' value for the chunk cache if successful and FAIL otherwise AUTHOR -GeorgeV ******************************************************************************/ intn GRsetchunkcache(int32 riid, /* IN: access aid to mess with */ int32 maxcache, /* IN: max number of chunks to cache */ int32 flags /* IN: flags = 0, HDF_CACHEALL */) { ri_info_t *ri_ptr = NULL; /* ptr to the image to work with */ int16 special; /* Special code */ intn ret_value = SUCCEED; /* clear error stack and check validity of args */ HEclear(); /* Check args */ if (maxcache < 1) { ret_value = FAIL; goto done; } if (flags != 0 && flags != HDF_CACHEALL) { ret_value = FAIL; goto done; } /* check the validity of the RI ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate RI's object in hash table */ if (NULL == (ri_ptr = (ri_info_t *)HAatom_object(riid))) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* check if access id exists already */ if (ri_ptr->img_aid == 0) { /* now get access id, use write access */ if (GRIgetaid(ri_ptr, DFACC_WRITE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } else if (ri_ptr->img_aid == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* inquire about element */ ret_value = Hinquire(ri_ptr->img_aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) /* set cache*/ ret_value = HMCsetMaxcache(ri_ptr->img_aid, maxcache, flags); else ret_value = FAIL; } done: return ret_value; } /* GRsetchunkcache() */ /*--------------------------------------------------------------- NAME GRmapped - Checks whether an RI is to be mapped (hmap project) USAGE intn GRmapped(riid, *tobe_mapped, *created_byGR) int32 riid; IN: raster image ID intn *tobe_mapped; IN: TRUE if the image should be mapped intn *created_byGR; IN: TRUE if the image was created by GR API DESCRIPTION GRmapped checks if the given RI satisfies the following conditions: + being an 8-bit RI + having one component + being non-special or RLE compressed only, i.e., no other compressions, no chunking,... The function will set tobe_mapped to TRUE if the image satisfies the above conditions, and FALSE, otherwise. In addition, the function will set the flag name_generated to indicate whether the image has name that was generated by the library. Old images (or images created with non-GR API) didn't have a name so the library would generate a name for it while reading in the file. RETURNS SUCCEED/FAIL Feb 24, 2011 -BMR MODIFICATION Mar 17, 2011: Changed the function from intn GR2bmapped(int32 riid), returning TRUE/FALSE/FAIL, to intn GR2bmapped(int32 riid, intn *tobe_mapped, intn *name_generated), returning SUCCEED/FAIL ----------------------------------------------------------------*/ intn GR2bmapped(int32 riid, intn *tobe_mapped, intn *name_generated) { ri_info_t *ri_ptr; /* ptr to the image to work with */ intn should_map = FALSE; /* TRUE if the image should be mapped */ uint16 img_tag, img_ref; /* shortcuts image's tag/ref */ int32 ritype; /* image's type */ intn special_type = 0; /* specialness of the image data */ int32 file_id; /* shortcut file id */ intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Check the validity of the ID */ if (HAatom_group(riid) != RIIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate RI's object in hash table */ ri_ptr = (ri_info_t *)HAatom_object(riid); if (NULL == ri_ptr) HGOTO_ERROR(DFE_RINOTFOUND, FAIL); /* shortcuts */ img_tag = ri_ptr->img_tag; img_ref = ri_ptr->img_ref; file_id = ri_ptr->gr_ptr->hdf_file_id; /* If the image has old image tag, then make sure it is either non-special or compressed with RLE only */ if (img_tag == DFTAG_RI8 || img_tag == DFTAG_CI8) { if (ri_ptr->img_dim.comp_tag == DFTAG_RLE || ri_ptr->img_dim.comp_tag == DFTAG_NULL) should_map = TRUE; } /* If the image has new image tag, then make sure that it has 8-bit data and has no special storage except RLE compression before determining that it is mapped-able */ else if (img_tag == DFTAG_RI || img_tag == DFTAG_CI) { /* Get the image data's type */ GRgetiminfo(riid, NULL, NULL, &ritype, NULL, NULL, NULL); /* If it is 8-bit, set flag to check further for special storage */ if (ritype == DFNT_UCHAR8 || ritype == DFNT_CHAR8 || ritype == DFNT_UINT8 || ritype == DFNT_INT8) { /* Also make sure it only has one component */ if (ri_ptr->img_dim.ncomps == 1) { /* Make sure no specialness or only with RLE compression */ comp_coder_t comp_type = COMP_CODE_NONE; GRgetcomptype(riid, &comp_type); if (comp_type == COMP_CODE_RLE || comp_type == COMP_CODE_NONE) { special_type = GRIisspecial_type(file_id, img_tag, img_ref); /* In some cases, special_type = 0 for old image with RLE, although the image has newer image tag. Added the check for 0 here, but this should be investigated more. -BMR*/ if (special_type == SPECIAL_COMP || special_type == 0) should_map = TRUE; } } } } /* Set flag to return */ *tobe_mapped = should_map; /* Copy flag that indicates whether this image has name that was generated by library, and not given by application */ *name_generated = ri_ptr->name_generated; done: return ret_value; } /* GR2bmapped */ /* API functions to finish: Misc. stuff left to do: Deal with special elements for images. GRrename for images. GRsetflags to suppress writing fill data and to suppress fillvalue attr. Read/Write Interlaced data (of line & plane types, pixel is working). Features not supported: Add in full support for multiple palettes with each RI. Add in support for named palettes with each RI. Add in support for palettes with non-standard formats. Deletion of attributes or images (would require changing the way index numbers are handled) */ hdf4-hdf4.3.1/hdf/src/mfgr.h000066400000000000000000000030021503061704500154560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mfgr.h * Purpose: header file for multi-file general raster information *---------------------------------------------------------------------------*/ #ifndef H4_MFGR_H #define H4_MFGR_H #include "hdf.h" /* Interlace types available */ typedef int16 gr_interlace_t; #define MFGR_INTERLACE_PIXEL 0 /* pixel interlacing scheme */ #define MFGR_INTERLACE_LINE 1 /* line interlacing scheme */ #define MFGR_INTERLACE_COMPONENT 2 /* component interlacing scheme */ #endif /* H4_MFGR_H */ hdf4-hdf4.3.1/hdf/src/mfgr_priv.h000066400000000000000000000160351503061704500165300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mfgr_priv.h * Purpose: private header file for multi-file general raster information *---------------------------------------------------------------------------*/ #ifndef H4_MFGR_PRIV_H #define H4_MFGR_PRIV_H #include "hdf_priv.h" #include "hfile_priv.h" #include "tbbt_priv.h" /* This is the size of the hash tables used for GR & RI IDs */ #define GRATOM_HASH_SIZE 32 /* The tag of the attribute data */ #define RI_TAG DFTAG_VG /* Current RI groups are stored in Vgroups */ #define ATTR_TAG DFTAG_VH /* Current GR attributes are stored in VDatas */ /* The default threshold for attributes which will be cached */ #define GR_ATTR_THRESHHOLD 2048 #define VALIDRIINDEX(i, gp) ((i) >= 0 && (i) < (gp)->gr_count) /* * Each gr_info_t maintains 2 threaded-balanced-binary-tress: one of * raster images and one of global attributes */ typedef struct gr_info { int32 hdf_file_id; /* the corresponding HDF file ID (must be first in the structure) */ uint16 gr_ref; /* ref # of the Vgroup of the GR in the file */ int32 gr_count; /* # of image entries in gr_tab so far */ TBBT_TREE *grtree; /* Root of image B-Tree */ uintn gr_modified; /* whether any images have been modified */ int32 gattr_count; /* # of global attr entries in gr_tab so far */ TBBT_TREE *gattree; /* Root of global attribute B-Tree */ uintn gattr_modified; /* whether any global attributes have been modified */ intn access; /* the number of active pointers to this file's GRstuff */ uint32 attr_cache; /* the threshold for the attribute sizes to cache */ } gr_info_t; typedef struct at_info { int32 index; /* index of the attribute (needs to be first in the struct) */ int32 nt; /* number type of the attribute */ int32 len; /* length/order of the attribute */ uint16 ref; /* ref of the attribute (stored in VData) */ uintn data_modified; /* flag to indicate whether the attribute data has been modified */ uintn new_at; /* flag to indicate whether the attribute was added to the Vgroup */ char *name; /* name of the attribute */ void *data; /* data for the attribute */ } at_info_t; typedef struct dim_info { uint16 dim_ref; /* reference # of the Dim record */ int32 xdim, ydim, /* dimensions of the image */ ncomps, /* number of components of each pixel in image */ nt, /* number type of the components */ file_nt_subclass; /* number type subclass of data on disk */ gr_interlace_t il; /* interlace of the components (stored on disk) */ uint16 nt_tag, nt_ref; /* tag & ref of the number-type info */ uint16 comp_tag, comp_ref; /* tag & ref of the compression info */ } dim_info_t; typedef struct ri_info { int32 index; /* index of this image (needs to be first in the struct) */ uint16 ri_ref; /* ref # of the RI Vgroup */ uint16 rig_ref; /* ref # of the RIG group */ gr_info_t *gr_ptr; /* ptr to the GR info that this ri_info applies to */ dim_info_t img_dim; /* image dimension information */ dim_info_t lut_dim; /* palette dimension information */ uint16 img_tag, img_ref; /* tag & ref of the image data */ int32 img_aid; /* AID for the image data */ intn acc_perm; /* Access permission (read/write) for image AID */ uint16 lut_tag, lut_ref; /* tag & ref of the palette data */ gr_interlace_t im_il; /* interlace of image when next read (default PIXEL) */ gr_interlace_t lut_il; /* interlace of LUT when next read */ uintn data_modified; /* whether the image or palette data has been modified */ uintn meta_modified; /* whether the image or palette meta-info has been modified */ uintn attr_modified; /* whether the attributes have been modified */ char *name; /* name of the image */ int32 lattr_count; /* # of local attr entries in ri_info so far */ TBBT_TREE *lattree; /* Root of the local attribute B-Tree */ intn access; /* the number of times this image has been selected */ uintn use_buf_drvr; /* access to image needs to be through the buffered special element driver */ uintn use_cr_drvr; /* access to image needs to be through the compressed raster special element driver */ uintn comp_img; /* whether to compress image data */ comp_coder_t comp_type; /* compression type */ comp_info cinfo; /* compression information */ uintn ext_img; /* whether to make image data external */ char *ext_name; /* name of the external file */ int32 ext_offset; /* offset in the external file */ uintn acc_img; /* whether to make image data a different access type */ uintn acc_type; /* type of access-mode to get image data with */ uintn fill_img; /* whether to fill image, or just store fill value */ void *fill_value; /* pointer to the fill value (NULL means use default fill value of 0) */ uintn store_fill; /* whether to add fill value attribute or not */ intn name_generated; /* whether the image has name that was given by app. or was generated by the library like the DFR8 images (added for hmap)*/ } ri_info_t; #ifdef __cplusplus extern "C" { #endif /* Useful raster routines for generally private use */ HDFLIBAPI intn GRIil_convert(const void *inbuf, gr_interlace_t inil, void *outbuf, gr_interlace_t outil, int32 dims[2], int32 ncomp, int32 nt); HDFLIBAPI void GRIgrdestroynode(void *n); HDFLIBAPI void GRIattrdestroynode(void *n); HDFLIBAPI void GRIridestroynode(void *n); #ifdef __cplusplus } #endif #endif /* H4_MFGR_PRIV_H */ hdf4-hdf4.3.1/hdf/src/mfgrf.c000066400000000000000000001223721503061704500156330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mfsdf.c * Purpose: C stubs for Fortran GR routines * Invokes: mfgr.c * Contents: * mgstart: Call GRstart to initialize the GR interface for a file * mgfinfo: Call GRfileinfo for information about the file * mgend: Call GRend to close down the GR interface to a file * mgcreat: Call GRcreate to create a raster image * mgselct: Call GRselect to select an existing raster image for I/O * mgn2ndx: Call GRnametoindex to map an image's name into a index in a file * mggiinf: Call GRgetiminfo to get information about an image * mgwrimg: Call GRwriteimage to write image data to the file * mgrdimg: Call GRreadimage to read image data from the file * mgendac: Call GRendaccess to end access to a raster image * mggdid: Call GRgetdimid to get a dimension ID for an image [Later] * mgsdnam: Call GRsetdimname to set a dimension's name [Later] * mggdinf: Call GRgetdiminfo to get information about a dimension [Later] * mgid2rf: Call GRidtoref to map an RI ID into a ref. # for annotating * mgr2idx: Call GRreftoindex to map a ref. # into an index for the image * mgrltil: Call GRreqlutil to request the interlace of the next LUT read * mgrimil: Call GRreqimageil to request the interlace of the next image read * mggltid: Call GRgetlutid to get a palette ID for an image * mgglinf: Call GRgetlutinfo to get information about a palette * mgwrlut: Call GRwritelut to write a palette to the file * mgwclut: Call GRwritelut to write a character palette to the file * mgrdlut: Call GRreadlut to read a palette from the file * mgrclut: Call GRreadlut to read a character palette from the file * mgsxfil: Call GRsetexternalfile to move an image into an external file * mgsactp: Call GRsetaccesstype to set the access type for an image * mgscomp: Call GRsetcompress to compress an image in the file * mggcomp: Call GRgetcompinfo to get image compression information * mgisattr: Call GRsetattr to write an attribute for an object * mgiscatt: Call GRsetattr to write a char attribute for an obj. * mgatinf: Call GRattrinfo get information about an attribute * mggcatt: Call GRgetattr to read a char attribute from the file * mggnatt: Call GRgetattr to read a numeric attribute from the file * mggattr: Call GRgetattr to read an attribute from the file * mgfndat: Call GRfindattr to get the index of an attribute for a name * mglut2ref: Call GRluttoref to get reference number for a palette specified * by palette identifier *---------------------------------------------------------------------------*/ #include "hdf_priv.h" #include "hproto_fortran.h" /* Local pre-processor macros */ #define XDIM 0 #define YDIM 1 /*----------------------------------------------------------------------------- * Name: mgstart * Purpose: Call GRstart to initialize the GR interface for a file * Inputs: fid: HDF file ID of file to initialize * Returns: GR ID on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRstart *---------------------------------------------------------------------------*/ intf nmgstart(intf *fid) { return (intf)GRstart((int32)*fid); } /* end mgstart() */ /*----------------------------------------------------------------------------- * Name: mgfinfo * Purpose: Call GRfileinfo to get information about the images in a file * Inputs: grid: GR ID of file for information * n_datasets: # of raster images in the file * n_attrs: # of "global" GR attributes * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRfileinfo *---------------------------------------------------------------------------*/ intf nmgfinfo(intf *grid, intf *n_datasets, intf *n_attrs) { int32 n_data, n_attr; intf ret; ret = (intf)GRfileinfo((int32)*grid, &n_data, &n_attr); *n_datasets = (intf)n_data; *n_attrs = (intf)n_attr; return ret; } /* end mgfinfo() */ /*----------------------------------------------------------------------------- * Name: mgend * Purpose: Call GRend to close the GR interface for a file * Inputs: grid: GR ID of interface to close * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRend *---------------------------------------------------------------------------*/ intf nmgend(intf *grid) { return (intf)GRend((int32)*grid); } /* end mgend() */ /*----------------------------------------------------------------------------- * Name: mgicreat * Purpose: Call GRcreate to create a raster image. * Inputs: * grid: GR ID of interface to create image in * name: name of raster image * ncomp: number of components per pixel * nt: number-type of each component * il: interlace scheme to use * dimsizes[2]: dimensions of the image to create * nlen: length of the name string * Returns: RI ID on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRcreate *---------------------------------------------------------------------------*/ intf nmgicreat(intf *grid, _fcd name, intf *ncomp, intf *nt, intf *il, intf dimsizes[2], intf *nlen) { char *fn; int32 cdims[2]; intf ret; /* Convert the FORTRAN string into a C string */ fn = HDf2cstring(name, (intn)*nlen); if (fn == NULL) return FAIL; /* Copy the array of dimensions into an array of the proper type */ cdims[XDIM] = (int32)dimsizes[XDIM]; cdims[YDIM] = (int32)dimsizes[YDIM]; ret = (intf)GRcreate((int32)*grid, fn, (int32)*ncomp, (int32)*nt, (int32)*il, cdims); free(fn); return ret; } /* end mgicreat() */ /*----------------------------------------------------------------------------- * Name: mgselct * Purpose: Call GRselect to choose an existing raster image. * Inputs: * grid: GR ID of interface * index: the index of the image to select * Returns: RI ID on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRselect *---------------------------------------------------------------------------*/ intf nmgselct(intf *grid, intf *index) { return (intf)GRselect((int32)*grid, (int32)*index); } /* end mgselct() */ /*----------------------------------------------------------------------------- * Name: mgin2ndx * Purpose: Call GRnametoindex to map a raster image name to an index * Inputs: * grid: GR ID of interface * name: the name of the raster image to find * nlen: the length of the name * Returns: image index on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRnametoindex *---------------------------------------------------------------------------*/ intf nmgin2ndx(intf *grid, _fcd name, intf *nlen) { char *fn; intf ret; /* Convert the FORTRAN string into a C string */ fn = HDf2cstring(name, (intn)*nlen); if (fn == NULL) return FAIL; /* Copy the array of dimensions into an array of the proper type */ ret = (intf)GRnametoindex((int32)*grid, fn); free(fn); return ret; } /* end mgin2ndx() */ /*----------------------------------------------------------------------------- * Name: mggiinf * Purpose: Call GRgetiminfo to get information about an image * Inputs: * riid: RI ID of the image * name: the name of the raster image to find * ncomp: the number of components each pixel has * nt: the number type of each component * il: the interlace of the image components * dimsizes: the dimensions of the image * nattr: the number of attributes the image has * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetiminfo *---------------------------------------------------------------------------*/ intf nmggiinf(intf *riid, _fcd name, intf *ncomp, intf *nt, intf *il, intf *dimsizes, intf *nattr) { int32 t_ncomp, t_nt, t_il, t_dimsizes[2], t_nattr; intf ret; /* Copy the array of dimensions into an array of the proper type */ ret = (intf)GRgetiminfo((int32)*riid, (char *)_fcdtocp(name), &t_ncomp, &t_nt, &t_il, t_dimsizes, &t_nattr); *ncomp = (intf)t_ncomp; *nt = (intf)t_nt; *il = (intf)t_il; dimsizes[XDIM] = t_dimsizes[XDIM]; dimsizes[YDIM] = t_dimsizes[YDIM]; *nattr = (intf)t_nattr; return ret; } /* end mggiinf() */ /*----------------------------------------------------------------------------- * Name: mgwcimg * Purpose: Call mgwrimg to write char type image data to the file * Inputs: * riid: RI ID of the image * start: the starting location of the image data to write * stride: the stride of image data to write * count: the number of pixels in each dimension to write * data: the image data (pixels) to write out * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRwriteimage *---------------------------------------------------------------------------*/ intf nmgwcimg(intf *riid, intf *start, intf *stride, intf *count, _fcd data) { return nmgwrimg(riid, start, stride, count, (void *)_fcdtocp(data)); } /* end mgwcimg() */ /*----------------------------------------------------------------------------- * Name: mgwrimg * Purpose: Call GRwriteimage to write image data to the file * Inputs: * riid: RI ID of the image * start: the starting location of the image data to write * stride: the stride of image data to write * count: the number of pixels in each dimension to write * data: the image data (pixels) to write out * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRwriteimage *---------------------------------------------------------------------------*/ intf nmgwrimg(intf *riid, intf *start, intf *stride, intf *count, void *data) { int32 t_start[2], t_stride[2], t_count[2]; /* Copy the array of dimensions into an array of the proper type */ t_start[XDIM] = (int32)start[XDIM]; t_start[YDIM] = (int32)start[YDIM]; t_stride[XDIM] = (int32)stride[XDIM]; t_stride[YDIM] = (int32)stride[YDIM]; t_count[XDIM] = (int32)count[XDIM]; t_count[YDIM] = (int32)count[YDIM]; return (intf)GRwriteimage((int32)*riid, t_start, t_stride, t_count, data); } /* end mgwrimg() */ /*----------------------------------------------------------------------------- * Name: mgrcimg * Purpose: Call mgrdimg to read char type image data from a file * Inputs: * riid: RI ID of the image * start: the starting location of the image data to read * stride: the stride of image data to read * count: the number of pixels in each dimension to read * data: the image data (pixels) to read out * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreadimage *---------------------------------------------------------------------------*/ intf nmgrcimg(intf *riid, intf *start, intf *stride, intf *count, _fcd data) { return nmgrdimg(riid, start, stride, count, (void *)_fcdtocp(data)); } /* end mgrcimg() */ /*----------------------------------------------------------------------------- * Name: mgrdimg * Purpose: Call GRreadimage to read image data from a file * Inputs: * riid: RI ID of the image * start: the starting location of the image data to read * stride: the stride of image data to read * count: the number of pixels in each dimension to read * data: the image data (pixels) to read out * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreadimage *---------------------------------------------------------------------------*/ intf nmgrdimg(intf *riid, intf *start, intf *stride, intf *count, void *data) { int32 t_start[2], t_stride[2], t_count[2]; /* Copy the array of dimensions into an array of the proper type */ t_start[XDIM] = (int32)start[XDIM]; t_start[YDIM] = (int32)start[YDIM]; t_stride[XDIM] = (int32)stride[XDIM]; t_stride[YDIM] = (int32)stride[YDIM]; t_count[XDIM] = (int32)count[XDIM]; t_count[YDIM] = (int32)count[YDIM]; return (intf)GRreadimage((int32)*riid, t_start, t_stride, t_count, data); } /* end mgrdimg() */ /*----------------------------------------------------------------------------- * Name: mgendac * Purpose: Call GRendaccess to terminate access to a raster image * Inputs: * riid: RI ID of the image * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRendaccess *---------------------------------------------------------------------------*/ intf nmgendac(intf *riid) { return (intf)GRendaccess((int32)*riid); } /* end mgendac() */ /*----------------------------------------------------------------------------- * Name: mgid2rf * Purpose: Call GRidtoref to map a RI index into a reference # * Inputs: * riid: RI ID of the image * Returns: ref. # on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRidtoref *---------------------------------------------------------------------------*/ intf nmgid2rf(intf *riid) { return (intf)GRidtoref((int32)*riid); } /* end mgid2rf() */ /*----------------------------------------------------------------------------- * Name: mgr2idx * Purpose: Call GRreftoindex to map a reference # into a ri index * Inputs: * grid: GR ID of the file * ref: ref. # of the image * Returns: a valid index # on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreftoindex *---------------------------------------------------------------------------*/ intf nmgr2idx(intf *grid, intf *ref) { return (intf)GRreftoindex((int32)*grid, (uint16)*ref); } /* end mgr2idx() */ /*----------------------------------------------------------------------------- * Name: mgrltil * Purpose: Call GRreqlutil to request the interlacing scheme for the next LUT * Inputs: * riid: RI ID of the image * il: interlace scheme for next read * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreqlutil *---------------------------------------------------------------------------*/ intf nmgrltil(intf *riid, intf *il) { return (intf)GRreqlutil((int32)*riid, (intn)*il); } /* end mgrltil() */ /*----------------------------------------------------------------------------- * Name: mgrimil * Purpose: Call GRreqimageil to request the interlacing scheme for the next image * Inputs: * riid: RI ID of the image * il: interlace scheme for next read * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreqimageil *---------------------------------------------------------------------------*/ intf nmgrimil(intf *riid, intf *il) { return (intf)GRreqimageil((int32)*riid, (intn)*il); } /* end mgrimil() */ /*----------------------------------------------------------------------------- * Name: mggltid * Purpose: Call GRgetlutid to get the palette ID for an image * Inputs: * riid: RI ID of the image * lut_index: index of the palette to select * Returns: value LUT ID on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetlutid *---------------------------------------------------------------------------*/ intf nmggltid(intf *riid, intf *lut_index) { return (intf)GRgetlutid((int32)*riid, (intn)*lut_index); } /* end mggltid() */ /*----------------------------------------------------------------------------- * Name: mgglinf * Purpose: Call GRgetlutinfo to get information about a palette * Inputs: * lutid: LUT ID of the image * ncomp: number of components per palette entry * nt: number-type of components in palette entry * il: interlace of components in palette entry * nentries: number of palette entries * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetlutinfo *---------------------------------------------------------------------------*/ intf nmgglinf(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries) { int32 t_ncomp, t_nt, t_il, t_nentries; intf status; status = (intf)GRgetlutinfo((int32)*lutid, &t_ncomp, &t_nt, &t_il, &t_nentries); *ncomp = (intf)t_ncomp; *nt = (intf)t_nt; *il = (intf)t_il; *nentries = (intf)t_nentries; return status; } /* end mgglinf() */ /*----------------------------------------------------------------------------- * Name: mgwclut * Purpose: Call GRwritelut to write data into a character palette * Inputs: * lutid: LUT ID of the image * ncomp: number of components per palette entry * nt: number-type of components in palette entry * il: interlace of components in palette entry * nentries: number of palette entries * data: data to write * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRwritelut *---------------------------------------------------------------------------*/ intf nmgwclut(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, _fcd data) { return (intf)GRwritelut((int32)*lutid, (int32)*ncomp, (int32)*nt, (int32)*il, (int32)*nentries, (void *)_fcdtocp(data)); } /* end mgwrlut() */ /*----------------------------------------------------------------------------- * Name: mgwrlut * Purpose: Call GRwritelut to write data into a palette * Inputs: * lutid: LUT ID of the image * ncomp: number of components per palette entry * nt: number-type of components in palette entry * il: interlace of components in palette entry * nentries: number of palette entries * data: data to write * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRwritelut *---------------------------------------------------------------------------*/ intf nmgwrlut(intf *lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, void *data) { return (intf)GRwritelut((int32)*lutid, (int32)*ncomp, (int32)*nt, (int32)*il, (int32)*nentries, data); } /* end mgwrlut() */ /*----------------------------------------------------------------------------- * Name: mgrclut * Purpose: Call GRreadlut to read data from a character palette * Inputs: * lutid: LUT ID of the image * data: data to read * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreadlut *---------------------------------------------------------------------------*/ intf nmgrclut(intf *lutid, _fcd data) { return (intf)GRreadlut((int32)*lutid, (void *)_fcdtocp(data)); } /* end mgrclut() */ /*----------------------------------------------------------------------------- * Name: mgrdlut * Purpose: Call GRreadlut to read data from a palette * Inputs: * lutid: LUT ID of the image * data: data to read * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRreadlut *---------------------------------------------------------------------------*/ intf nmgrdlut(intf *lutid, void *data) { return (intf)GRreadlut((int32)*lutid, data); } /* end mgrdlut() */ /*----------------------------------------------------------------------------- * Name: mgisxfil * Purpose: Call GRsetexternalfile to convert an image into an external image * Inputs: * riid: RI ID of the image * filename: filename of the external file * offset: offset in the external file to place image at * nlen: the length of the name * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRsetexternalfile *---------------------------------------------------------------------------*/ intf nmgisxfil(intf *riid, _fcd filename, intf *offset, intf *nlen) { char *fn; intf ret; /* Convert the FORTRAN string into a C string */ fn = HDf2cstring(filename, (intn)*nlen); if (fn == NULL) return FAIL; ret = (intf)GRsetexternalfile((int32)*riid, fn, (int32)*offset); free(fn); return ret; } /* end mgisxfil() */ /*----------------------------------------------------------------------------- * Name: mgsactp * Purpose: Call GRsetaccesstype to determine access mode for an image * Inputs: * riid: RI ID of the image * accesstype: the type of access to image data * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRsetaccesstype *---------------------------------------------------------------------------*/ intf nmgsactp(intf *riid, intf *accesstype) { return (intf)GRsetaccesstype((int32)*riid, (uintn)*accesstype); } /* end mgsactp() */ /*----------------------------------------------------------------------------- * Name: mgiscatt * Purpose: Call mgisatt to store a char attribute about an image * Inputs: * riid: RI ID of the image * name: the name of the attribute * nt: the number-type of the attribute * count: the number of values in the attribute * data: the data for the attribute * nlen: the length of the name * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRsetattr *---------------------------------------------------------------------------*/ intf nmgiscatt(intf *riid, _fcd name, intf *nt, intf *count, _fcd data, intf *nlen) { return nmgisattr(riid, name, nt, count, (void *)_fcdtocp(data), nlen); } /* end mgiscatt() */ /*----------------------------------------------------------------------------- * Name: mgisattr * Purpose: Call GRsetattr to store an attribute about an image * Inputs: * riid: RI ID of the image * name: the name of the attribute * nt: the number-type of the attribute * count: the number of values in the attribute * data: the data for the attribute * nlen: the length of the name * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRsetattr *---------------------------------------------------------------------------*/ intf nmgisattr(intf *riid, _fcd name, intf *nt, intf *count, void *data, intf *nlen) { char *fn; intf ret; /* Convert the FORTRAN string into a C string */ fn = HDf2cstring(name, (intn)*nlen); if (fn == NULL) return FAIL; ret = (intf)GRsetattr((int32)*riid, fn, (int32)*nt, (int32)*count, data); free(fn); return ret; } /* end mgisattr() */ /*----------------------------------------------------------------------------- * Name: mgatinf * Purpose: Call GRattrinfo to get information about an attribute * Inputs: * riid: RI ID of the image * index: the index of the attribute * name: the name of the attribute * nt: the number-type of the attribute * count: the number of values in the attribute * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRattrinfo *---------------------------------------------------------------------------*/ intf nmgatinf(intf *riid, intf *index, _fcd name, intf *nt, intf *count) { int32 t_nt, t_count; intf ret; ret = (intf)GRattrinfo((int32)*riid, (int32)*index, (char *)_fcdtocp(name), &t_nt, &t_count); *nt = (intf)t_nt; *count = (intf)t_count; return ret; } /* end mgatinf() */ /*----------------------------------------------------------------------------- * Name: mggcatt * Purpose: Call mggnatt to get a char attribute * Inputs: * riid: RI ID of the image * index: the index of the attribute * data: the data for the attribute * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetattr *---------------------------------------------------------------------------*/ intf nmggcatt(intf *riid, intf *index, _fcd data) { return nmggnatt(riid, index, (void *)_fcdtocp(data)); } /* end mggcatt() */ /*----------------------------------------------------------------------------- * Name: mggnatt * Purpose: Call GRgetattr to get a numeric attribute * Inputs: * riid: RI ID of the image * index: the index of the attribute * data: the data for the attribute * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetattr *---------------------------------------------------------------------------*/ intf nmggnatt(intf *riid, intf *index, void *data) { return (intf)GRgetattr((int32)*riid, (int32)*index, data); } /* end mggnatt() */ /*----------------------------------------------------------------------------- * Name: mggattr * Purpose: Call GRgetattr to get an attribute * Inputs: * riid: RI ID of the image * index: the index of the attribute * data: the data for the attribute * Returns: SUCCEED on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRgetattr * Remarks: This routine is replaced by mggcatt and mggmatt *---------------------------------------------------------------------------*/ intf nmggattr(intf *riid, intf *index, void *data) { return (intf)GRgetattr((int32)*riid, (int32)*index, data); } /* end mggattr() */ /*----------------------------------------------------------------------------- * Name: mgifndat * Purpose: Call GRfindattr to locate an attribute * Inputs: * riid: RI ID of the image * name: the name for the attribute * nlen: the length of the name for the attribute * Returns: attribute index on success, FAIL on failure * Users: HDF Fortran programmers * Invokes: GRfindattr *---------------------------------------------------------------------------*/ intf nmgifndat(intf *riid, _fcd name, intf *nlen) { char *fn; intf ret; /* Convert the FORTRAN string into a C string */ fn = HDf2cstring(name, (intn)*nlen); if (fn == NULL) return FAIL; ret = (intf)GRfindattr((int32)*riid, fn); free(fn); return ret; } /* end mgifndat() */ /*------------------------------------------------------------------------- * Name: mgcgichnk * Puporse: Call GRgetchunkinfo * Inputs: id: access id to GR * Outputs: dim_length: chunk dimensions * flags: -1 - GR is nonchunked * 0 - GR is chunked, no compression * 1 - GR is chunked and compressed * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmgcgichnk(intf *id, intf *dim_length, intf *flags) { HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 riid; /* GR id */ int i; int32 rank, status, cflags; intf ret; riid = *id; rank = 2; /* Get GR info */ status = GRgetchunkinfo(riid, &chunk_def, &cflags); if (status == FAIL) return FAIL; switch (cflags) { case HDF_NONE: /* Non-chunked GR */ *flags = -1; ret = 0; return ret; case HDF_CHUNK: /* Chunked, noncompressed GR */ *flags = 0; for (i = 0; i < rank; i++) dim_length[rank - i - 1] = chunk_def.chunk_lengths[i]; ret = 0; return ret; case (HDF_CHUNK | HDF_COMP): /* Chunked and compressed GR */ *flags = 1; for (i = 0; i < rank; i++) dim_length[rank - i - 1] = chunk_def.comp.chunk_lengths[i]; ret = 0; return ret; default: return FAIL; } } /*----------------------------------------------------------------------------- * Name: mgcrcchnk * Purpose: read the specified chunk of CHARACTER data to the buffer * Inputs: id - access ID to GR * start - origin of chunk to read * Outputs: char_data - buffer the data will be read into * Calls: scrchnk * Reamrks: dimensions will be flipped in scrchnk function * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nmgcrcchnk(intf *id, intf *start, _fcd char_data) { intf ret; ret = nmgcrchnk(id, start, (void *)_fcdtocp(char_data)); return ret; } /*----------------------------------------------------------------------------- * Name: mgcrchnk * Purpose: read the specified chunk of NUMERIC data to the buffer * Inputs: id - access ID to GR * start - origin of chunk to read * Outputs: num_data - buffer the data will be read into * Calls: GRreadchunk * Remarks: need to flip the dimensions to account for array ordering * differences (start --> cstart) * If performance becomes an issue, use static cstart * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nmgcrchnk(intf *id, intf *start, void *num_data) { intf ret; int32 rank, i; int32 *cstart; rank = 2; /* Allocate memory for cstart array; use static array, if performance becomes an issue */ cstart = (int32 *)malloc(sizeof(int32) * rank); if (!cstart) return FAIL; /* Flip an array to account for array ordering in Fortran and C */ for (i = 0; i < rank; i++) cstart[i] = start[rank - i - 1] - 1; /* Call GRreadchunk function to read the data */ ret = GRreadchunk(*id, cstart, num_data); /* Free memory */ free(cstart); return ret; } /*----------------------------------------------------------------------------- * Name: mgcscchnk * Purpose: set the maximum number of chunks to cache * Inputs: id - access ID to GR * maxcache - max number of chunks to cache * flags - flags= 0, HDF_CACHEALL * Currently only 0 can be passed * Calls: GRsetchunkcache * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nmgcscchnk(intf *id, intf *maxcache, intf *flags) { intf ret; ret = GRsetchunkcache(*id, *maxcache, *flags); return ret; } /*------------------------------------------------------------------------- * Name: mgcschnk * Puporse: Call GRsetchunk * Inputs: id: access id to GR * dim_length: chunk dimensions * comp_type: type of compression * COMP_CODE_NONE (0) * COMP_CODE_RLE (1) * COMP_CODE_SKPHUFF (3) * COMP_CODE_DEFLATE (4) * COMP_CODE_INVALID (5) * comp_prm: compression parameters array * comp_prm[0] = skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0] = deflate_level: GZIP compression parameter * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmgcschnk(intf *id, intf *dim_length, intf *comp_type, intf *comp_prm) { HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 riid; /* GR id */ int32 cflags; /* chunk flags */ int i, CASE; int32 rank; intf ret; rank = 2; CASE = *comp_type; riid = *id; cflags = HDF_CHUNK | HDF_COMP; switch (CASE) { case 0: /* No compression */ cflags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def.chunk_lengths[i] = dim_length[rank - i - 1]; break; case 1: /* RLE compression */ for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_RLE; break; #ifdef GRsetchunk_does_not_support_NBIT case 2: /* N-bit encoding */ for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_NBIT; chunk_def.comp.cinfo.nbit.sign_ext = comp_prm[0]; chunk_def.comp.cinfo.nbit.fill_one = comp_prm[1]; chunk_def.comp.cinfo.nbit.start_bit = comp_prm[2]; chunk_def.comp.cinfo.nbit.bit_len = comp_prm[3]; break; #endif case 3: /* Skipping Huffman encoding */ for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff.skp_size = comp_prm[0]; break; case 4: /* GZIP compression */ for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = comp_prm[0]; break; default: return FAIL; } ret = GRsetchunk(riid, chunk_def, cflags); return ret; } /*----------------------------------------------------------------------------- * Name: mgcwcchnk * Purpose: write the specified chunk of CHARACTER data to the GR * Inputs: id - access ID to GR * start - origin of chunk to read * Outputs: char_data - buffer the data will be read into * Calls: mgcwchnk * Reamrks: dimensions will be flipped in scrchnk function * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nmgcwcchnk(intf *id, intf *start, _fcd char_data) { intf ret; ret = nmgcwchnk(id, start, (void *)_fcdtocp(char_data)); return ret; } /*----------------------------------------------------------------------------- * Name: mgcwchnk * Purpose: write the specified chunk of NUMERIC data to the GR * Inputs: id - access ID to GR * start - origin of chunk to write * num_data - buffer for data * Calls: GRwritechunk * Remarks: need to flip the dimensions to account for array ordering * differences (start --> cstart) * If performance becomes an issue, use static cstart * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nmgcwchnk(intf *id, intf *start, void *num_data) { intf ret; int32 rank, i; int32 *cstart; rank = 2; /* Allocate memory for cstart array; use static array, if performance becomes an issue */ cstart = (int32 *)malloc(sizeof(int32) * rank); if (!cstart) return FAIL; /* Flip an array */ for (i = 0; i < rank; i++) cstart[i] = start[rank - i - 1] - 1; /* Call GRwritechunk function to write the data */ ret = GRwritechunk(*id, cstart, num_data); /* Free memory */ free(cstart); return ret; } /*------------------------------------------------------------------------- * Name: mgcscompress * Puporse: Call GRsetcompress * Inputs: id: access id to GR * comp_type: type of compression * COMP_CODE_NONE = 0 * COMP_CODE_RLE = 1 * COMP_CODE_SKPHUFF = 3 * COMP_CODE_DEFLATE = 4 * COMP_CODE_JPEG = 7 * comp_prm: compression parameters array * comp_prm[0]=skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0]=deflate_level: GZIP compression parameter * comp_prm[0]=quality JPEG parameters * comp_prm[1]=baseline * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmgcscompress(intf *id, intf *comp_type, intf *comp_prm) { int32 riid; /* GR id */ comp_info c_info; /* compression info */ comp_coder_t c_type; /* compression type definition */ int CASE; intf ret; CASE = *comp_type; riid = *id; switch (CASE) { case COMP_CODE_NONE: /* No compression */ c_type = COMP_CODE_NONE; break; case COMP_CODE_RLE: /* RLE compression */ c_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ c_type = COMP_CODE_SKPHUFF; c_info.skphuff.skp_size = comp_prm[0]; break; case COMP_CODE_DEFLATE: /* GZIP compression */ c_type = COMP_CODE_DEFLATE; c_info.deflate.level = comp_prm[0]; break; case COMP_CODE_JPEG: /* JPEG compression */ c_type = COMP_CODE_JPEG; c_info.jpeg.quality = comp_prm[0]; c_info.jpeg.force_baseline = comp_prm[1]; break; default: return FAIL; } ret = GRsetcompress(riid, c_type, &c_info); return ret; } /*------------------------------------------------------------------------- * Name: mgcgcompress * Puporse: Call GRgetcompinfo * Inputs: id: access id to GR * Outputs: comp_type: type of compression * COMP_CODE_NONE = 0 * COMP_CODE_RLE = 1 * COMP_CODE_SKPHUFF = 3 * COMP_CODE_DEFLATE = 4 * COMP_CODE_JPEG = 7 * comp_prm: compression parameters array * comp_prm[0]=skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0]=deflate_level: GZIP compression parameter * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmgcgcompress(intf *id, intf *comp_type, intf *comp_prm) { comp_info c_info; /* compression info */ comp_coder_t c_type; /* compression type definition */ int CASE; intf ret = -1; intn c_ret; c_ret = GRgetcompinfo(*id, &c_type, &c_info); if (c_ret == 0) { CASE = (int)c_type; switch (CASE) { case COMP_CODE_NONE: /* No compression */ *comp_type = 0; ret = 0; break; case COMP_CODE_RLE: /* RLE compression */ *comp_type = 1; ret = 0; break; case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ *comp_type = 3; comp_prm[0] = (intf)c_info.skphuff.skp_size; ret = 0; break; case COMP_CODE_DEFLATE: /* GZIP compression */ *comp_type = 4; comp_prm[0] = (intf)c_info.deflate.level; ret = 0; break; case COMP_CODE_JPEG: /* JPEG compression */ *comp_type = 7; ret = 0; break; default: return FAIL; } /*end CASE */ } /*end if */ return ret; } /*------------------------------------------------------------------------- * Name: mglt2rf * Puporse: Call GRluttoref * Inputs: id: LUT id returned by GRgetlutid(mggltid) * Returns: valid reference number if a palette exists or 0 (DFREF_WILDCARD) * if one doesn't / FAIL * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmglt2rf(intf *id) { intf ret; ret = GRluttoref(*id); return ret; } /*------------------------------------------------------------------------- * Name: mgcgnluts * Puporse: Call GRgetnluts * Inputs: id: image identifier * Returns: number of palettes on success and -1 if fails. * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nmgcgnluts(intf *id) { intf ret = -1; intn c_ret; c_ret = GRgetnluts(*id); if (c_ret >= 0) ret = c_ret; return ret; } hdf4-hdf4.3.1/hdf/src/mfgrff.f000066400000000000000000000357721503061704500160130ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: mfgrff.f C Purpose: Fortran stubs for Fortran GR routines C Invokes: mfgrf.c C Contents: C dsgdims: get dimensions of next SDG C------------------------------------------------------------------------------ C------------------------------------------------------------------------------ C Name: mgcreat C Purpose: Create a new raster image C Inputs: C grid: GR ID of interface to create image in C name: name of raster image C ncomp: number of components per pixel C nt: number-type of each component C il: interlace scheme to use C dimsizes[2]: dimensions of the image to create C Returns: RI ID on success, -1 on failure C Users: HDF Fortran programmers C Invokes: mgicreat C------------------------------------------------------------------------------ integer function mgcreat(grid, name, ncomp, nt, il, dimsizes) character*(*) name integer grid, ncomp, nt, il, dimsizes, mgicreat mgcreat = mgicreat(grid, name, ncomp, nt, il, dimsizes, + len(name)) return end C------------------------------------------------------------------------------ C Name: mgn2ndx C Purpose: Map the name of a raster image to an index in the file C Inputs: C grid: GR ID of interface to create image in C name: name of raster image C Returns: index of image on success, -1 on failure C Users: HDF Fortran programmers C Invokes: mgin2ndx C------------------------------------------------------------------------------ integer function mgn2ndx(grid, name) character*(*) name integer grid, mgin2ndx mgn2ndx = mgin2ndx(grid, name, len(name)) return end C------------------------------------------------------------------------------ C Name: mgsxfil C Purpose: Convert a standard image into an external image C Inputs: C riid: RI ID of image to move C filename: filename of file to move image into C offset: offset in file to move image to C Returns: SUCCEED/FAIL C Users: HDF Fortran programmers C Invokes: mgisxfil C------------------------------------------------------------- integer function mgsxfil(riid, filename, offset) character*(*) filename integer riid, mgisxfil, offset mgsxfil = mgisxfil(riid, filename, offset, len(filename)) return end C------------------------------------------------------------- C Name: mgscatt C Purpose: Add a char type attribute to a raster image C Inputs: C riid: RI ID of image C name: the name of the attribute C nt: the number-type of the attribute C count: the number of values in the attribute C data: the data for the attribute C Returns: SUCCEED/FAIL C Users: HDF Fortran programmers C Invokes: mgiscatt C------------------------------------------------------------- integer function mgscatt(riid, name, nt, count, data) character*(*) name character*(*) data integer riid, mgiscatt, nt, count mgscatt = mgiscatt(riid, name, nt, count, data, len(name)) return end C------------------------------------------------------------- C Name: mgsnatt C Purpose: Add a numeric attribute to a raster image C Inputs: C riid: RI ID of image C name: the name of the attribute C nt: the number-type of the attribute C count: the number of values in the attribute C data: the data for the attribute C Returns: SUCCEED/FAIL C Users: HDF Fortran programmers C Invokes: mgisattr C------------------------------------------------------------- integer function mgsnatt(riid, name, nt, count, data) character*(*) name integer data integer riid, mgisattr, nt, count mgsnatt = mgisattr(riid, name, nt, count, data, len(name)) return end C------------------------------------------------------------- C Name: mgsattr C Purpose: Add an attribute to a raster image C Inputs: C riid: RI ID of image C name: the name of the attribute C nt: the number-type of the attribute C count: the number of values in the attribute C data: the data for the attribute C Returns: SUCCEED/FAIL C Users: HDF Fortran programmers C Invokes: mgisattr C------------------------------------------------------------- integer function mgsattr(riid, name, nt, count, data) character*(*) name character*(*) data integer riid, mgisattr, nt, count mgsattr = mgisattr(riid, name, nt, count, data, len(name)) return end C--------------------------------------------------------------- C Name: mgfndat C Purpose: Locate an attribute for a raster image C Inputs: C riid: RI ID of image C name: the name of the attribute C Returns: SUCCEED/FAIL C Users: HDF Fortran programmers C Invokes: mgifndat C------------------------------------------------------------------------------ integer function mgfndat(riid, name) character*(*) name integer riid, mgifndat mgfndat = mgifndat(riid, name, len(name)) return end C------------------------------------------------------------------------- C Name: mggichnk C Purpose: get Info on GR C Inputs: riid - access ID to GR C Outputs: dim_length - chunk dimensions (if any) C comp_type: C -1 - GR is non-chunked C 0 - GR is chunked without compression C 1 - GR is chunked and compressed C Returns: 0 on success, -1 on failure C Calls: mgcgichnk (C stub for GRgetchunkinfo function) C------------------------------------------------------------------------- INTEGER function mggichnk(riid, dim_length, comp_type) INTEGER riid, dim_length(*), comp_type INTEGER mgcgichnk mggichnk = mgcgichnk(riid, dim_length, comp_type) return end C------------------------------------------------------------------------- C Name: mgrcchnk C Purpose: read the specified chunk of CHARACTER data to the GR C Inputs: riid - access ID to GR C start - chunk coordinates C char_data - buffer the data will be read into C Returns: 0 on success, -1 on failure C Calls: mgcrcchnk (C stub for GRreadchunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function mgrcchnk(riid, start, char_data) INTEGER riid, start(*) CHARACTER*(*) char_data(*) INTEGER mgcrcchnk mgrcchnk = mgcrcchnk(riid, start, char_data) return end C------------------------------------------------------------------------- C Name: mgrchnk C Purpose: read the specified chunk of NUMERIC data to the GR C Inputs: riid - access ID to GR C start - chunk coordinates C num_data - buffer the numeric data will be read into C Returns: 0 on success, -1 on failure C Calls: mgcrchnk (C stub for GRreadchunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function mgrchnk(riid, start, num_data) INTEGER riid, start(*), num_data(*) INTEGER mgcrchnk mgrchnk = mgcrchnk(riid, start, num_data) return end C------------------------------------------------------------------------- C Name: mgscchnk C Purpose: set the maximum number of chunks to cache C Inputs: riid - access ID to GR C maxcache - max number of chunks to cache C flags - flags =0, HDF_CACHEALL C Currently only 0 can be passed. C Returns: 0 on success, -1 on failure C Calls: mgcscchnk (C stub for GRsetchunkcache function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function mgscchnk(riid, maxcache, flags) C INTEGER riid, maxcache, flags INTEGER mgcscchnk C mgscchnk = mgcscchnk(riid, maxcache, flags) C return end C------------------------------------------------------------------------- C Name: mgschnk C Purpose: make the GR a chunked GR C Inputs: riid - access ID to GR C dim_length - chunk dimensions C comp_type - type of compression C comp_prm - compression parameters array C Huffman: comp_prm(1) = skphuff_skp_size C GZIP: comp_prm(1) = deflate_level C C Returns: 0 on success, -1 on failure C Calls: mgcschnk (C stub for GRsetchunk function) C------------------------------------------------------------------------- INTEGER function mgschnk(riid, dim_length, comp_type, . comp_prm) INTEGER riid, dim_length(*), comp_type, comp_prm(*) INTEGER mgcschnk mgschnk = mgcschnk(riid, dim_length, comp_type, . comp_prm) return end C------------------------------------------------------------------------- C Name: mgwcchnk C Purpose: write the specified chunk of CHARACTER data to the GR C Inputs: riid - access ID to GR C start - chunk coordinates C char_data - buffer containing data to be written C Returns: 0 on success, -1 on failure C Calls: mgcwcchnk (C stub for GRwritechunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function mgwcchnk(riid, start, char_data) INTEGER riid, start(*) CHARACTER*(*) char_data(*) INTEGER mgcwcchnk mgwcchnk = mgcwcchnk(riid, start, char_data) return end C------------------------------------------------------------------------- C Name: mgwchnk C Purpose: write the specified chunk of NUMERIC data to the GR C Inputs: riid - access ID to GR C start - chunk coordinates C num_data - buffer containing data to be written C Returns: 0 on success, -1 on failure C Calls: mgcwchnk (C stub for GRwritechunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function mgwchnk(riid, start, num_data) INTEGER riid, start(*), num_data(*) INTEGER mgcwchnk mgwchnk = mgcwchnk(riid, start, num_data) return end C------------------------------------------------------------------------- C Name: mgscompress C Purpose: compress GR C Inputs: riid - access ID to GR C comp_type - type of compression C supports the following compression types: C ( see hcomp.h file) C COMP_CODE_NONE = 0 C COMP_CODE_RLE =1 C COMP_CODE_SKPHUFF = 3 C COMP_CODE_DEFLATE = 4 C COMP_CODE_JPEG = 7 C comp_prm - compression parameters array C Huffman: comp_prm(1) = skphuff_skp_size C GZIP: comp_prm(1) = deflate_level C JPEG: comp_prm(1) = quality ( value from 0 to 100) C comp_prm(2) = baseline (compatibility flag 0 or 1) C Returns: 0 on success, -1 on failure C Calls: mgcscompress (C stub for GRsetcompress function) C------------------------------------------------------------------------- INTEGER function mgscompress(riid, comp_type, comp_prm) INTEGER riid, comp_type INTEGER mgcscompress mgscompress = mgcscompress(riid, comp_type, . comp_prm) return end C------------------------------------------------------------------------- C Name: mggcompress C Purpose: gets compression information about GR image C Inputs: riid - access ID to GR C Outputs: comp_type - type of compression C supports the following compression types: C ( see hcomp.h file) C COMP_CODE_NONE = 0 C COMP_CODE_RLE =1 C COMP_CODE_SKPHUFF = 3 C COMP_CODE_DEFLATE = 4 C COMP_CODE_JPEG = 7 C comp_prm - compression parameters array C Huffman: comp_prm(1) = skphuff_skp_size C GZIP: comp_prm(1) = deflate_level C Returns: 0 on success, -1 on failure C Calls: mgcgcompress (C stub for GRgetcompress function) C------------------------------------------------------------------------- INTEGER function mggcompress(riid, comp_type, comp_prm) INTEGER riid, comp_type, comp_prm(1) INTEGER mgcgcompress mggcompress = mgcgcompress(riid, comp_type, . comp_prm) return end C------------------------------------------------------------------------- C Name: mggnluts C Purpose: gets number of palettes (LUTs) for an image C Inputs: riid - access ID to GR C Returns: Number of palettes on success (0 or 1), -1 on failure C Calls: mgcgnluts (C stub for GRgetnluts function) C------------------------------------------------------------------------- INTEGER function mggnluts(riid) INTEGER riid INTEGER mgcgnluts mggnluts = mgcgnluts(riid) return end hdf4-hdf4.3.1/hdf/src/mstdio.c000066400000000000000000000245331503061704500160310ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* mstdio.c - HDF stdio-like modeling I/O routines REMARKS Basically a NOP interface, it just calls the encoding layer. DESIGN Just pass the data to the encoding layer, reporting errors. EXPORTED ROUTINES None of these routines are designed to be called by other users except for the top layer of the compression routines. HCPmstdio_stread -- start read access for compressed file HCPmstdio_stwrite -- start write access for compressed file HCPmstdio_seek -- Seek to offset within the data element HCPmstdio_read -- Read in a portion of data from a compressed data element. HCPmstdio_write -- Write out a portion of data from a compressed data element. HCPmstdio_inquire -- Inquire information about the access record and data element. HCPmstdio_endaccess -- Close the compressed data element */ /* General HDF includes */ #include "hdf_priv.h" #include "hfile_priv.h" /* HDF compression includes */ #include "hcomp_priv.h" /* Internal definitions for compression */ funclist_t mstdio_funcs = {HCPmstdio_stread, HCPmstdio_stwrite, HCPmstdio_seek, HCPmstdio_inquire, HCPmstdio_read, HCPmstdio_write, HCPmstdio_endaccess, NULL, NULL}; /*-------------------------------------------------------------------------- NAME HCPmstdio_stread -- start read access for compressed file USAGE int32 HCPmstdio_stread(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start read access on a compressed data element using the stdio modeling scheme. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_stread(accrec_t *access_rec) { compinfo_t *info; /* information on the special element */ info = (compinfo_t *)access_rec->special_info; /* set the offset */ info->minfo.model_info.stdio_info.pos = 0; if ((*(info->cinfo.coder_funcs.stread))(access_rec) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return SUCCEED; } /* HCPmstdio_stread() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_stwrite -- start write access for compressed file USAGE int32 HCPmstdio_stwrite(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Start write access on a compressed data element using the stdio modeling scheme. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_stwrite(accrec_t *access_rec) { compinfo_t *info; /* information on the special element */ info = (compinfo_t *)access_rec->special_info; /* set the offset */ info->minfo.model_info.stdio_info.pos = 0; if ((*(info->cinfo.coder_funcs.stwrite))(access_rec) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return SUCCEED; } /* HCPmstdio_stwrite() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_seek -- Seek to offset within the data element USAGE int32 HCPmstdio_seek(access_rec,offset,origin) accrec_t *access_rec; IN: the access record of the data element int32 offset; IN: the offset in bytes from the origin specified intn origin; IN: the origin to seek from [UNUSED!] RETURNS Returns SUCCEED or FAIL DESCRIPTION Seek to a position with a compressed data element. The 'origin' calculations have been taken care of at a higher level, it is an un-used parameter. The 'offset' is used as an absolute offset because of this. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_seek(accrec_t *access_rec, int32 offset, int origin) { compinfo_t *info; /* information on the special element */ int32 ret; info = (compinfo_t *)access_rec->special_info; /* set the offset */ info->minfo.model_info.stdio_info.pos = offset; if ((ret = (*(info->cinfo.coder_funcs.seek))(access_rec, offset, origin)) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return ret; } /* HCPmstdio_seek() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_read -- Read in a portion of data from a compressed data element. USAGE int32 HCPmstdio_read(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to read void * data; OUT: the buffer to place the bytes read RETURNS Returns the number of bytes read or FAIL DESCRIPTION Read in a number of bytes from a compressed data element, using stdio functionality. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_read(accrec_t *access_rec, int32 length, void *data) { compinfo_t *info; /* information on the special element */ int32 ret; info = (compinfo_t *)access_rec->special_info; /* adjust model position */ info->minfo.model_info.stdio_info.pos += length; if ((ret = (*(info->cinfo.coder_funcs.read))(access_rec, length, data)) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return ret; } /* HCPmstdio_read() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_write -- Write out a portion of data from a compressed data element. USAGE int32 HCPwrite(access_rec,length,data) accrec_t *access_rec; IN: the access record of the data element int32 length; IN: the number of bytes to write void * data; IN: the buffer to retrieve the bytes written RETURNS Returns the number of bytes written or FAIL DESCRIPTION Write out a number of bytes to a compressed data element. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_write(accrec_t *access_rec, int32 length, const void *data) { compinfo_t *info; /* information on the special element */ int32 ret; info = (compinfo_t *)access_rec->special_info; /* adjust model position */ info->minfo.model_info.stdio_info.pos += length; if ((ret = (*(info->cinfo.coder_funcs.write))(access_rec, length, data)) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return ret; } /* HCPmstdio_write() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_inquire -- Inquire information about the access record and data element. USAGE int32 HCPmstdio_inquire(access_rec,pfile_id,ptag,pref,plength,poffset,pposn, paccess,pspecial) accrec_t *access_rec; IN: the access record of the data element int32 *pfile_id; OUT: ptr to file id uint16 *ptag; OUT: ptr to tag of information uint16 *pref; OUT: ptr to ref of information int32 *plength; OUT: ptr to length of data element int32 *poffset; OUT: ptr to offset of data element int32 *pposn; OUT: ptr to position of access in element int16 *paccess; OUT: ptr to access mode int16 *pspecial; OUT: ptr to special code RETURNS Returns SUCCEED or FAIL DESCRIPTION Inquire information about the access record and data element. [Currently a NOP]. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int32 HCPmstdio_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial) { compinfo_t *info; /* information on the special element */ int32 ret; info = (compinfo_t *)access_rec->special_info; if ((ret = (*(info->cinfo.coder_funcs.inquire))(access_rec, pfile_id, ptag, pref, plength, poffset, pposn, paccess, pspecial)) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return ret; } /* HCPmstdio_inquire() */ /*-------------------------------------------------------------------------- NAME HCPmstdio_endaccess -- Close the compressed data element USAGE intn HCPendaccess(access_rec) accrec_t *access_rec; IN: the access record of the data element RETURNS Returns SUCCEED or FAIL DESCRIPTION Close the compressed data element and free modelling info. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ intn HCPmstdio_endaccess(accrec_t *access_rec) { compinfo_t *info; /* information on the special element */ intn ret; info = (compinfo_t *)access_rec->special_info; if ((ret = (*(info->cinfo.coder_funcs.endaccess))(access_rec)) == FAIL) HRETURN_ERROR(DFE_CODER, FAIL); return ret; } /* HCPmstdio_endaccess() */ hdf4-hdf4.3.1/hdf/src/mstdio_priv.h000066400000000000000000000045341503061704500170750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- * File: mstdio_priv.h * Purpose: Header file for stdio-like modeling information. * Dependencies: should be included after hdf.h * Contents: Structures & definitions for stdio modeling. This header * should only be included in hcomp.c and mstdio.c. *---------------------------------------------------------------------------*/ #ifndef H4_MSTDIO_PRIV_H #define H4_MSTDIO_PRIV_H #include "hdf_priv.h" /* model information about stdio model */ typedef struct { int32 pos; /* position ? */ } comp_model_stdio_info_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI funclist_t mstdio_funcs; /* ** from mstdio.c */ HDFLIBAPI int32 HCPmstdio_stread(accrec_t *rec); HDFLIBAPI int32 HCPmstdio_stwrite(accrec_t *rec); HDFLIBAPI int32 HCPmstdio_seek(accrec_t *access_rec, int32 offset, int origin); HDFLIBAPI int32 HCPmstdio_inquire(accrec_t *access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref, int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess, int16 *pspecial); HDFLIBAPI int32 HCPmstdio_read(accrec_t *access_rec, int32 length, void *data); HDFLIBAPI int32 HCPmstdio_write(accrec_t *access_rec, int32 length, const void *data); HDFLIBAPI intn HCPmstdio_endaccess(accrec_t *access_rec); #ifdef __cplusplus } #endif #endif /* H4_MSTDIO_PRIV_H */ hdf4-hdf4.3.1/hdf/src/tbbt.c000066400000000000000000001111601503061704500154560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* "tbbt.c" -- Routines for using threaded, balanced, binary trees. */ /* Extended from (added threads to) Knuth 6.2.3, Algorithm A (AVL trees) */ /* Basic tree structure by Adel'son-Vel'skii and Landis */ #include "hdf_priv.h" #include "tbbt_priv.h" #define PARENT 0 #define LEFT 1 #define RIGHT 2 /* Quick hack to implement PIMPL pattern for TBBT nodes * * Simple copy-n-paste, so not as robust as a function-like macro (but * simpler to read and looks more like the original code) */ #define Flags priv->flags #define Link priv->link #define Rcnt priv->rcnt #define Lcnt priv->lcnt #define Parent Link[PARENT] #define Lchild Link[LEFT] #define Rchild Link[RIGHT] /* Quick hack to implement PIMPL pattern for TBBT trees * * Simple copy-n-paste, so not as robust as a function-like macro (but * simpler to read and looks more like the original code) */ #define Count priv->count #define Fast_compare priv->fast_compare #define Compar priv->compar #define Cmparg priv->cmparg #define TBBT_FLAG unsigned long #define TBBT_LEAF unsigned long /* TBBT flag values */ #define TBBT_HEAVY(s) s /* If the `s' sub-tree is deeper than the other */ #define TBBT_DOUBLE 4 /* If "heavy" sub-tree is two levels deeper */ #define TBBT_INTERN 8 /* If node is internal (has two children) */ #define TBBT_UNBAL (TBBT_HEAVY(LEFT) | TBBT_HEAVY(RIGHT)) #define TBBT_FLAGS (TBBT_UNBAL | TBBT_INTERN | TBBT_DOUBLE) #define TBBT_CHILD(s) (TBBT_INTERN | TBBT_HEAVY(s)) #define LeftCnt(node) ((node)->Lcnt) /* Left descendants */ #define RightCnt(node) ((node)->Rcnt) /* Left descendants */ #define Cnt(node, s) (LEFT == (s) ? LeftCnt(node) : RightCnt(node)) #define HasChild(n, s) (Cnt(n, s) > 0) #define Heavy(n, s) ((s) & (LeftCnt(n) > RightCnt(n) ? LEFT : LeftCnt(n) == RightCnt(n) ? 0 : RIGHT)) #define Intern(n) (LeftCnt(n) && RightCnt(n)) #define UnBal(n) (LeftCnt(n) > RightCnt(n) ? LEFT : LeftCnt(n) == RightCnt(n) ? 0 : RIGHT) #define Double(n) (TBBT_DOUBLE & (n)->Flags) #define Other(side) (LEFT + RIGHT - (side)) #define Delta(n, s) ((Heavy(n, s) ? 1 : -1) * (Double(n) ? 2 : UnBal(n) ? 1 : 0)) #define SetFlags(n, s, b, i) \ ((-2 < (b) && (b) < 2 ? 0 : TBBT_DOUBLE) | \ (0 > (b) ? TBBT_HEAVY(s) \ : (b) > 0 ? TBBT_HEAVY(Other(s)) \ : 0) | \ ((i) ? TBBT_INTERN : 0)) /* Return maximum of two scalar values */ #define Max(a, b) ((a) > (b) ? (a) : (b)) /* Private TBBT information */ typedef struct tbbt_node_private { TBBT_NODE *link[3]; /* Pointers to parent, left child, and right child */ TBBT_FLAG flags; /* TBBT flags: (see above) */ TBBT_LEAF lcnt; /* Count of left children */ TBBT_LEAF rcnt; /* Count of right children */ } TBBT_NODE_PRIV; typedef struct tbbt_tree_private { unsigned long count; /* The number of nodes in the tree currently */ unsigned fast_compare; /* Use a faster in-line compare (with casts) instead of function call */ int (*compar)(void *k1, void *k2, int cmparg); int cmparg; } TBBT_TREE_PRIV; /* Pointer to the tbbt node free list */ static TBBT_NODE *tbbt_free_list = NULL; #define KEYcmp(k1, k2, a) \ ((NULL != compar) ? (*compar)(k1, k2, a) : memcmp(k1, k2, 0 < (a) ? (a) : (int)strlen(k1))) void tbbt1dump(TBBT_NODE *node, int method); /* Function Prototypes */ extern void tbbt_printNode(TBBT_NODE *node, void (*key_dump)(void *, void *)); extern void tbbt_dumpNode(TBBT_NODE *node, void (*key_dump)(void *, void *), int method); extern void tbbt_dump(TBBT_TREE *ptree, void (*key_dump)(void *, void *), int method); static TBBT_NODE *tbbt_get_node(void); static void tbbt_release_node(TBBT_NODE *nod); /* Returns pointer to end-most (to LEFT or RIGHT) node of tree: */ static TBBT_NODE * tbbt_end(TBBT_NODE *root, int side) { if (root == NULL) return NULL; while (HasChild(root, side)) { root = root->Link[side]; } return root; } TBBT_NODE * tbbtfirst(TBBT_NODE *root) { return tbbt_end(root, LEFT); } TBBT_NODE * tbbtlast(TBBT_NODE *root) { return tbbt_end(root, RIGHT); } /* Returns pointer to neighboring node (to LEFT or RIGHT): */ static TBBT_NODE * tbbt_nbr(TBBT_NODE *ptr, int side) { /* return( *tbbt_anbr(ptr,side) ); */ if (!HasChild(ptr, side)) return ptr->Link[side]; /* return NULL; */ ptr = ptr->Link[side]; if (ptr == NULL) return NULL; while (HasChild(ptr, Other(side))) ptr = ptr->Link[Other(side)]; return ptr; } /* Returns pointer to node with previous key value: */ TBBT_NODE * tbbtnext(TBBT_NODE *node) { return tbbt_nbr(node, RIGHT); } /* Returns pointer to node with next key value: */ TBBT_NODE * tbbtprev(TBBT_NODE *node) { return tbbt_nbr(node, LEFT); } /* tbbtfind -- Look up a node in a tree based on a key value */ /* tbbtffind is based on this routine - fix bugs in both places! */ /* Returns a pointer to the found node (or NULL) */ TBBT_NODE * tbbtfind(TBBT_NODE *root, void *key, int (*compar)(void *, void *, int), int arg, TBBT_NODE **pp) { TBBT_NODE *ptr = root; TBBT_NODE *parent = NULL; int cmp = 1; if (ptr) { int side; while (0 != (cmp = KEYcmp(key, ptr->key, arg))) { parent = ptr; side = (cmp < 0) ? LEFT : RIGHT; if (!HasChild(ptr, side)) break; ptr = ptr->Link[side]; } } if (NULL != pp) *pp = parent; return (0 == cmp) ? ptr : NULL; } /* tbbtffind -- Look up a node in a tree based on a key value */ /* This routine is based on tbbtfind (fix bugs in both places!) */ /* Returns a pointer to the found node (or NULL) */ static TBBT_NODE * tbbtffind(TBBT_NODE *root, void *key, unsigned fast_compare, TBBT_NODE **pp) { TBBT_NODE *ptr = root; TBBT_NODE *parent = NULL; int cmp = 1; switch (fast_compare) { case TBBT_FAST_UINT16_COMPARE: if (ptr) { int side; while (0 != (cmp = (*(uint16 *)key - *(uint16 *)ptr->key))) { parent = ptr; side = (cmp < 0) ? LEFT : RIGHT; if (!HasChild(ptr, side)) break; ptr = ptr->Link[side]; } } if (NULL != pp) *pp = parent; return (0 == cmp) ? ptr : NULL; case TBBT_FAST_INT32_COMPARE: if (ptr) { int side; while (0 != (cmp = (*(int32 *)key - *(int32 *)ptr->key))) { parent = ptr; side = (cmp < 0) ? LEFT : RIGHT; if (!HasChild(ptr, side)) break; ptr = ptr->Link[side]; } } if (NULL != pp) *pp = parent; return (0 == cmp) ? ptr : NULL; default: return NULL; } /* end switch */ } /* tbbtffind() */ /* tbbtdfind -- Look up a node in a "described" tree based on a key value */ /* Returns a pointer to the found node (or NULL) */ TBBT_NODE * tbbtdfind(TBBT_TREE *tree, void *key, TBBT_NODE **pp) { if (tree == NULL) return NULL; if (tree->Fast_compare != 0) return tbbtffind(tree->root, key, tree->Fast_compare, pp); else return tbbtfind(tree->root, key, tree->Compar, tree->Cmparg, pp); } /* tbbtless -- Find a node in a tree which is less than a key, */ /* based on a key value */ /* Returns a pointer to the found node (or NULL) */ TBBT_NODE * tbbtless(TBBT_NODE *root, void *key, int (*compar)(void *, void *, int), int arg, TBBT_NODE **pp) { TBBT_NODE *ptr = root; TBBT_NODE *parent = NULL; int cmp = 1; if (ptr) { int side; while (0 != (cmp = KEYcmp(key, ptr->key, arg))) { parent = ptr; side = (cmp < 0) ? LEFT : RIGHT; if (!HasChild(ptr, side)) break; ptr = ptr->Link[side]; } } if (cmp != 0) /* didn't find an exact match, search back up the tree until a node */ /* is found with a key less than the key searched for */ { while ((ptr = ptr->Parent) != NULL) { cmp = KEYcmp(key, ptr->key, arg); if (cmp < 0) /* found a node which is less than the search for one */ break; } /* end while */ if (ptr == NULL) /* didn't find a node in the tree which was less */ cmp = 1; else /* reset this for cmp test below */ cmp = 0; } /* end if */ if (NULL != pp) *pp = parent; return (0 == cmp) ? ptr : NULL; } /* tbbtdless -- Find a node less than a key in a "described" tree */ /* Returns a pointer to the found node (or NULL) */ TBBT_NODE * tbbtdless(TBBT_TREE *tree, void *key, TBBT_NODE **pp) { if (tree == NULL) return NULL; return tbbtless(tree->root, key, tree->Compar, tree->Cmparg, pp); } /* tbbtindx -- Look up the Nth node (in key order) */ /* Returns a pointer to the `indx'th node (or NULL) */ TBBT_NODE * tbbtindx(TBBT_NODE *root, int32 indx) { TBBT_NODE *ptr = root; /* I believe indx is 1 based */ if (NULL == ptr || indx < 1) return NULL; /* Termination condition is if the index equals the number of children on out left plus the current node */ while (ptr != NULL && indx != ((int32)LeftCnt(ptr)) + 1) { if (indx <= (int32)LeftCnt(ptr)) { ptr = ptr->Lchild; } else if (HasChild(ptr, RIGHT)) { /* subtract children count from leftchild plus current node when we descend into a right branch */ indx -= (int32)(LeftCnt(ptr) + 1); ptr = ptr->Rchild; } else return NULL; /* Only `indx' or fewer nodes in tree */ } return ptr; } /* swapkid -- Often referred to as "rotating" nodes. ptr and ptr's `side' * child, kid, are swapped so ptr becomes kid's `Other(side)' child. * Here is how a single swap (rotate) works: * * | --side--> | * (ptr) (kid) * / \ / \ * +-A-+ (kid) (ptr) +-C-+ * | | / \ / \ | | * |...| +-B-+ +-C-+ +-A-+ +-B-+ |...| * | | | | | | | | * |...| |...| |...| |...| * `deep' contains the relative depths of the subtrees so, since we set * `deep[1]' (the relative depth of subtree [B]) to 0, `deep[2]' is the depth * of [C] minus the depth of [B] (-1, 0, or 1 since `kid' is never too out of * balance) and `deep[0]' is the depth of [A] minus the depth of [B]. These * values are used to compute the balance levels after the rotation. Note that * [A], [B], or [C] can have depth 0 so `link[]' contains threads rather than * pointers to children. */ static TBBT_NODE * swapkid(TBBT_NODE **root, TBBT_NODE *ptr, int side) { TBBT_NODE *kid = ptr->Link[side]; /* Sibling to be swapped with parent */ int deep[3]; /* Relative depths of three sub-trees involved. */ /* 0:ptr->Link[Other(side)], 1:kid->Link[Other(side)], 2:kid->Link[side] */ TBBT_FLAG ptrflg; /* New value for ptr->Flags (ptr->Flags used after set) */ TBBT_LEAF plcnt, prcnt, /* current values of the ptr's and kid's leaf count */ klcnt, krcnt; deep[2] = (deep[1] = 0) + Delta(kid, side); deep[0] = Max(0, deep[2]) + 1 - Delta(ptr, side); kid->Parent = ptr->Parent; ptrflg = (TBBT_FLAG)SetFlags(ptr, side, deep[0], HasChild(ptr, Other(side)) && HasChild(kid, Other(side))); plcnt = LeftCnt(ptr); prcnt = RightCnt(ptr); klcnt = LeftCnt(kid); krcnt = RightCnt(kid); if (HasChild(kid, Other(side))) { ptr->Link[side] = kid->Link[Other(side)]; /* Real child */ ptr->Link[side]->Parent = ptr; } else { ptr->Link[side] = kid; /* Thread */ } /* Update grand parent's pointer: */ if (NULL == ptr->Parent) { *root = kid; } else if (ptr /*->Lchild*/ == ptr->Parent->Lchild) { ptr->Parent->Lchild = kid; } else { ptr->Parent->Rchild = kid; } ptr->Parent = kid; kid->Link[Other(side)] = ptr; kid->Flags = (TBBT_FLAG)SetFlags(kid, Other(side), deep[2] - 1 - Max(deep[0], 0), HasChild(kid, side)); /* update leaf counts */ if (side == LEFT) { /* kid's left count doesn't change, nor ptr's r-count */ kid->Rcnt = prcnt + krcnt + 1; /* kid's leafs+former parent's leafs+parent */ ptr->Lcnt = krcnt; } /* end if */ else { /* kid's right count doesn't change, nor ptr's l-count */ kid->Lcnt = plcnt + klcnt + 1; /* kid's leafs+former parent's leafs+parent */ ptr->Rcnt = klcnt; } /* end if */ ptr->Flags = ptrflg; return kid; } /* balance -- Move up tree, incrimenting number of left children when needed * and looking for unbalanced ancestors. Adjust all balance factors and re- * balance through "rotation"s when needed. */ static void balance(TBBT_NODE **root, TBBT_NODE *ptr, int side, int added) { int deeper = added; /* 1 if sub-tree got longer; -1 if got shorter */ int odelta; int obal; while (NULL != ptr) { odelta = Delta(ptr, side); /* delta before the node was added */ obal = UnBal(ptr); if (LEFT == side) /* One more/fewer left child: */ if (0 < added) ptr->Lcnt++; /* LeftCnt(ptr)++ */ else ptr->Lcnt--; /* LeftCnt(ptr)-- */ else if (0 < added) ptr->Rcnt++; /* RightCnt(ptr)++ */ else ptr->Rcnt--; /* RightCnt(ptr)-- */ if (0 != deeper) { /* One leg got longer or shorter: */ if ((deeper < 0 && odelta < 0) || (deeper > 0 && odelta > 0)) { /* Became too unbalanced: */ TBBT_NODE *kid; ptr->Flags |= TBBT_DOUBLE; /* Mark node too unbalanced */ if (deeper < 0) /* Just removed a node: */ side = Other(side); /* Swap with child from other side. */ else /* Just inserted a node: */ if (ptr->Parent && UnBal(ptr->Parent)) { deeper = 0; /* Fix will re-shorten sub-tree. */ } kid = ptr->Link[side]; if (Heavy(kid, Other(side))) { /* Double rotate needed: */ kid = swapkid(root, kid, Other(side)); ptr = swapkid(root, ptr, side); } else { /* Just rotate parent and kid: */ if (HasChild(kid, side)) /* In this case, sub-tree gets */ if (ptr->Parent && UnBal(ptr->Parent)) { deeper = 0; /* re-lengthened after a node removed. */ } ptr = swapkid(root, ptr, side); } } else if (obal) { /* Just became balanced: */ ptr->Flags &= ~TBBT_UNBAL; if (0 < deeper) { /* Shorter of legs lengthened */ ptr->Flags |= TBBT_INTERN; /* Mark as internal node now */ deeper = 0; /* so max length unchanged */ } /* end if */ } else if (deeper < 0) { /* Just became unbalanced: */ if (ptr->Link[Other(side)] != NULL && ptr->Link[Other(side)]->Parent == ptr) { ptr->Flags |= (TBBT_FLAG)TBBT_HEAVY(Other(side)); /* Other side longer */ if (ptr->Parent) if (ptr->Parent->Rchild == ptr) { /* we're the right child */ if (Heavy(ptr->Parent, RIGHT) && LeftCnt(ptr->Parent) == 1) deeper = 0; else /* we're the left child */ if (Heavy(ptr->Parent, LEFT)) if (ptr->Parent->Rchild && !UnBal(ptr->Parent->Rchild)) deeper = 0; } } } else { /* Just became unbalanced: */ ptr->Flags |= (TBBT_FLAG)TBBT_HEAVY(side); /* 0Parent) { if (ptr == (ptr->Parent->Rchild)) side = RIGHT; else side = LEFT; } /* end if */ ptr = ptr->Parent; /* Move up the tree */ } /* total tree depth += deeper; */ } /* Here is how rotatation rebalances a tree: * Either the deletion of a node shortened the sub-tree [A] (to length `h') * while [B] or [C] or both are length `h+1' or the addition of a node * lengthened [B] or [C] to length `h+1' while the other and [A] are both * length `h'. Each case changes `ptr' from being "right heavy" to being * overly unbalanced. * This | Becomes: | * sub-tree: (ptr) (kid) * / \ --side--> / \ * +-A-+ (kid) (ptr) +-C-+ * | | / \ / \ | | * | h | +-B-+ +-C-+ +-A-+ +-B-+ | h | * | | | | | | | | | | | | * +---+ | h | | h | | h | | h | +---+ * : - : | | | | | | | | : 1 : * `- -' +---+ +---+ +---+ +---+ + - + * : 1 : : 1 : : 1 : * + - + + - + + - + * * However, if [B] is long (h+1) while [C] is short (h), a double rotate is * required to rebalance. In this case, [A] was shortened or [X] or [Y] was * lengthened so [A] is length `h' and one of [X] and [Y] is length `h' while * the other is length `h-1'. Swap `kid' with `babe' then `ptr' with `babe'. * This | Becomes: | * sub-tree: (ptr) (babe) * / \ --side--> / \ * +-A-+ (kid) (ptr) (kid) * | | / \ / \ / \ * | h | (babe) +-C-+ +-A-+ +-X-+ +-Y-+ +-C-+ * | | / \ | | | | |h-1| |h-1| | | * +---+ +-X-+ +-Y-+ | h | | h | +---+ +---+ | h | * : - : |h-1| |h-1| | | | | : 1 : : 1 : | | * `- -' +---+ +---+ +---+ +---+ + - + + - + +---+ * : 1 : : 1 : * + - + + - + * * Note that in the node insertion cases total sub-tree length always increases * by one then decreases again so after the rotation(s) no more rebalancing is * required. In the node removal cases, the single rotation reduces total sub- * tree length unless [B] is length `h+1' (`ptr' ends of "right heavy") while * the double rotation ALWAYS reduces total sub-tree length. Thus removing a * single node can require log(N) rotations for rebalancing. On average, only * are usually required. */ /* Returns pointer to inserted node (or NULL) */ TBBT_NODE * tbbtins(TBBT_NODE **root, void *item, void *key, int (*compar)(void * /* k1 */, void * /* k2 */, int /* arg */), int arg) { int cmp; TBBT_NODE *ptr, *parent; if (NULL != tbbtfind(*root, (key ? key : item), compar, arg, &parent) || NULL == (ptr = tbbt_get_node())) return NULL; ptr->data = item; ptr->key = key ? key : item; ptr->Parent = parent; ptr->Flags = 0L; /* No children on either side */ ptr->Lcnt = 0; ptr->Rcnt = 0; if (NULL == parent) { /* Adding first node to tree: */ *root = ptr; ptr->Lchild = ptr->Rchild = NULL; return ptr; } cmp = KEYcmp(ptr->key, parent->key, arg); if (cmp < 0) { ptr->Lchild = parent->Lchild; /* Parent's thread now new node's */ ptr->Rchild = parent; /* New nodes right thread is parent */ parent->Lchild = ptr; /* Parent now has a left child */ } else { ptr->Rchild = parent->Rchild; ptr->Lchild = parent; parent->Rchild = ptr; } balance(root, parent, (cmp < 0) ? LEFT : RIGHT, 1); return ptr; } /* tbbtdins -- Insert a node into a "described" tree */ /* Returns a pointer to the inserted node */ TBBT_NODE * tbbtdins(TBBT_TREE *tree, void *item, void *key) { TBBT_NODE *ret_node; /* the node to return */ if (tree == NULL) return NULL; ret_node = tbbtins(&(tree->root), item, key, tree->Compar, tree->Cmparg); if (ret_node != NULL) tree->Count++; return ret_node; } /* tbbtrem -- Remove a node from a tree. You pass in the address of the * pointer to the root node of the tree along, a pointer to the node you wish * to remove, and optionally the address of a pointer to hold the address of * the key value of the deleted node. The second argument is usually the * result from a lookup function call (tbbtfind, tbbtdfind, or tbbtindx) so if * it is NULL, tbbtrem returns NULL. Otherwise tbbtrem removes the node from * the tree and returns a pointer to the data item for that node and, if the * third argument is not NULL, the address of the key value for the deleted * node is placed in the buffer that it points to. */ /* Data item pointer of deleted node is returned */ void * tbbtrem(TBBT_NODE **root, TBBT_NODE *node, void **kp) { TBBT_NODE *leaf; /* Node with one or zero children */ TBBT_NODE *par; /* Parent of `leaf' */ TBBT_NODE *next; /* Next/prev node near `leaf' (`leaf's `side' thread) */ int side; /* `leaf' is `side' child of `par' */ void *data; /* Saved pointer to data item of deleted node */ if (NULL == root || NULL == node) return NULL; /* Argument couldn't find node to delete */ data = node->data; /* Save pointer to data item to be returned at end */ if (NULL != kp) *kp = node->key; /* If the node to be removed is "internal" (children on both sides), we * replace it with it's previous (or next) node in the tree and delete that * previous (next) node (which has one or no children) instead. */ if (Intern(node)) { /* Replace with a non-internal node: */ if (Heavy(node, RIGHT)) { /* Pick "near-leaf" node from the */ side = LEFT; /* heavier of the sub-trees. */ } else if (Heavy(node, LEFT)) { side = RIGHT; } else { /* If no sub-tree heavier, pick at "random" for "better */ side = (0x10 & *(short *)&node) ? LEFT : RIGHT; /* balance" */ } leaf = tbbt_nbr(next = node, Other(side)); if (NULL == leaf) return NULL; /* Badness */ par = leaf->Parent; if (par == next) { /* Case 2x: `node' had exactly 2 descendants */ side = Other(side); /* Transform this to Case 2 */ next = leaf->Link[side]; } node->data = leaf->data; node->key = leaf->key; } else { /* Node has one or zero children: */ leaf = node; /* Simply remove THIS node */ par = leaf->Parent; if (NULL == par) { /* Case 3: Remove root (of 1- or 2-node tree) */ side = (int)UnBal(node); /* Which side root has a child on */ if (side) { /* Case 3a: Remove root of 2-node tree: */ *root = leaf = node->Link[side]; leaf->Parent = leaf->Link[Other(side)] = NULL; leaf->Flags = 0; /* No left children, balanced, not internal */ } else { /* Case 3b: Remove last node of tree: */ *root = NULL; } /* end else */ tbbt_release_node(node); return data; } side = (par->Rchild == leaf) ? RIGHT : LEFT; next = leaf->Link[side]; } /* Now the deletion has been reduced to the following cases (and Case 3 has * been handled completely above and Case 2x has been transformed into * Case 2). `leaf' is a node with one or zero children that we are going * to remove. `next' points where the `side' thread of `leaf' points. * `par' is the parent of `leaf'. The only possibilities (not counting * left/right reversals) are shown below: * [Case 1] [Case 2] [Case 2x] * (next) (next) ^ (next & par) * / ^ \ / ^ \ | / ^ \ * . . . | . . . | | (leaf) / * / | / | \_/ \_/ * (par) | (par) | ^threads^ * \ | \ | * (leaf) / (leaf) / [Case 3a] [Case 3b] * / ^ \_/ (n) * Note that in Cases 1 and 2, `leaf's `side' thread can be NULL making * `next' NULL as well. If you remove a node from a 2-node tree, removing * the root falls into Case 3a while removing the only leaf falls into * Case 2 (with `next' NULL and `par' the root node). */ if (!UnBal(leaf)) { /* Case 2: `leaf' has no children: */ par->Link[side] = leaf->Link[side]; par->Flags &= (TBBT_FLAG)(~(TBBT_INTERN | TBBT_HEAVY(side))); } else { /* Case 1: `leaf' has one child: */ TBBT_NODE *n; if (HasChild(leaf, side)) { /* two-in-a-row cases */ n = leaf->Link[side]; par->Link[side] = n; n->Parent = par; if (HasChild(n, Other(side))) while (HasChild(n, Other(side))) n = n->Link[Other(side)]; n->Link[Other(side)] = par; } /* end if */ else { /* zig-zag cases */ n = leaf->Link[Other(side)]; par->Link[side] = n; n->Parent = par; if (HasChild(n, side)) while (HasChild(n, side)) n = n->Link[side]; n->Link[side] = next; } /* end else */ } tbbt_release_node(leaf); balance(root, par, side, -1); ((TBBT_TREE *)root)->Count--; return data; } /* tbbtdmake - Allocate a new tree description record for an empty tree */ /* Returns a pointer to the description record */ TBBT_TREE * tbbtdmake(int (*cmp)(void * /* k1 */, void * /* k2 */, int /* arg */), int arg, unsigned fast_compare) { TBBT_TREE *tree = NULL; if (NULL == (tree = (TBBT_TREE *)calloc(1, sizeof(TBBT_TREE)))) goto error; if (NULL == (tree->priv = (TBBT_TREE_PRIV *)calloc(1, sizeof(TBBT_TREE_PRIV)))) goto error; tree->root = NULL; tree->Count = 0; tree->Fast_compare = fast_compare; tree->Compar = cmp; tree->Cmparg = arg; return tree; error: if (tree) free(tree->priv); free(tree); return NULL; } /* tbbtfree() - Free an entire tree not allocated with tbbtdmake(). */ void tbbtfree(TBBT_NODE **root, void (*fd)(void * /* item */), void (*fk)(void * /* key */)) { TBBT_NODE *par, *node = *root; while (NULL != *root) { /* While nodes left to be free()d */ /* First time at this node (just moved down a new leg of tree) */ if (!HasChild(node, LEFT)) node->Lchild = NULL; if (!HasChild(node, RIGHT)) node->Rchild = NULL; do { par = NULL; /* Assume we aren't ready to move up tree yet */ if (NULL != node->Lchild) node = node->Lchild; /* Move down this leg next */ else if (NULL != node->Rchild) node = node->Rchild; /* Move down this leg next */ else { /* No children; free node an move up: */ par = node->Parent; /* Move up tree (stay in loop) */ if (NULL != fd) (*fd)(node->data); if (NULL != fk) (*fk)(node->key); if (NULL == par) /* Just free()d last node */ *root = NULL; /* NULL=par & NULL=*root gets fully out */ else if (node == par->Lchild) par->Lchild = NULL; /* Now no longer has this child */ else par->Rchild = NULL; /* Ditto */ tbbt_release_node(node); node = par; /* Move up tree; remember which node to do next */ } } while (NULL != par); /* While moving back up tree */ } } void tbbtprint(TBBT_NODE *node) { if (node == NULL) return; printf("node=%p, key=%p, data=%p, flags=%x\n", (void *)node, node->key, node->data, (unsigned)node->Flags); printf("Lcnt=%d, Rcnt=%d\n", (int)node->Lcnt, (int)node->Rcnt); printf("*key=%d\n", (int)*(int32 *)(node->key)); printf("Lchild=%p, Rchild=%p, Parent=%p\n", (void *)node->Lchild, (void *)node->Rchild, (void *)node->Parent); } /* end tbbtprint() */ void tbbt1dump(TBBT_NODE *node, int method) { if (node == NULL) return; switch (method) { case -1: /* Pre-Order Traversal */ tbbtprint(node); if (HasChild(node, LEFT)) tbbt1dump(node->Lchild, method); if (HasChild(node, RIGHT)) tbbt1dump(node->Rchild, method); break; case 1: /* Post-Order Traversal */ if (HasChild(node, LEFT)) tbbt1dump(node->Lchild, method); if (HasChild(node, RIGHT)) tbbt1dump(node->Rchild, method); tbbtprint(node); break; case 0: /* In-Order Traversal */ default: if (HasChild(node, LEFT)) tbbt1dump(node->Lchild, method); tbbtprint(node); if (HasChild(node, RIGHT)) tbbt1dump(node->Rchild, method); break; } /* end switch() */ } /* end tbbt1dump() */ void tbbtdump(TBBT_TREE *tree, int method) { if (tree != NULL && *(TBBT_NODE **)tree != NULL) { printf("Number of nodes in the tree: %ld\n", tree->Count); tbbt1dump(tree->root, method); } /* end if */ else printf("Tree is empty\n"); } /* end tbbtdump() */ void tbbt_printNode(TBBT_NODE *node, void (*key_dump)(void *, void *)) { if (node == NULL) { printf("ERROR: null node pointer\n"); return; } printf("node=%p, flags=%x, Lcnt=%ld, Rcnt=%ld\n", (void *)node, (unsigned)node->Flags, (long)node->Lcnt, (long)node->Rcnt); printf("Lchild=%p, Rchild=%p, Parent=%p\n", (void *)node->Lchild, (void *)node->Rchild, (void *)node->Parent); if (key_dump != NULL) { (*key_dump)(node->key, node->data); } fflush(stdout); } /* end tbbt_printNode() */ void tbbt_dumpNode(TBBT_NODE *node, void (*key_dump)(void *, void *), int method) { if (node == NULL) return; switch (method) { case -1: /* Pre-Order Traversal */ tbbt_printNode(node, key_dump); if (HasChild(node, LEFT)) tbbt_dumpNode(node->Lchild, key_dump, method); if (HasChild(node, RIGHT)) tbbt_dumpNode(node->Rchild, key_dump, method); break; case 1: /* Post-Order Traversal */ if (HasChild(node, LEFT)) tbbt_dumpNode(node->Lchild, key_dump, method); if (HasChild(node, RIGHT)) tbbt_dumpNode(node->Rchild, key_dump, method); tbbt_printNode(node, key_dump); break; case 0: /* In-Order Traversal */ default: if (HasChild(node, LEFT)) tbbt_dumpNode(node->Lchild, key_dump, method); tbbt_printNode(node, key_dump); if (HasChild(node, RIGHT)) tbbt_dumpNode(node->Rchild, key_dump, method); break; } /* end switch() */ } /* end tbbt_dumpNode() */ void tbbt_dump(TBBT_TREE *ptree, void (*key_dump)(void *, void *), int method) { TBBT_TREE *tree; tree = (TBBT_TREE *)ptree; printf("TBBT-tree dump %p:\n\n", (void *)ptree); printf("capacity = %ld\n", (long)tree->Count); printf("\n"); tbbt_dumpNode(tree->root, key_dump, method); } /* Always returns NULL */ TBBT_TREE * tbbtdfree(TBBT_TREE *tree, void (*fd)(void * /* item */), void (*fk)(void * /* key */)) { if (tree == NULL) return NULL; tbbtfree(&tree->root, fd, fk); free(tree->priv); free(tree); return NULL; } /* returns the number of nodes in the tree */ long tbbtcount(TBBT_TREE *tree) { if (tree == NULL) return -1; else return (long)tree->Count; } /****************************************************************************** NAME tbbt_get_node - Gets a tbbt node DESCRIPTION Either gets a tbbt node from the free list (if there is one available) or allocates a node. RETURNS Returns tbbt ptr if successful and NULL otherwise *******************************************************************************/ static TBBT_NODE * tbbt_get_node(void) { TBBT_NODE *ret_value = NULL; if (tbbt_free_list != NULL) { ret_value = tbbt_free_list; tbbt_free_list = tbbt_free_list->Lchild; } else { if (NULL == (ret_value = (TBBT_NODE *)calloc(1, sizeof(TBBT_NODE)))) goto error; if (NULL == (ret_value->priv = (TBBT_NODE_PRIV *)calloc(1, sizeof(TBBT_NODE_PRIV)))) goto error; } return ret_value; error: if (ret_value) free(ret_value->priv); free(ret_value); return NULL; } /* end tbbt_get_node() */ /****************************************************************************** NAME tbbt_release_node - Releases a tbbt node DESCRIPTION Puts a tbbt node into the free list RETURNS No return value *******************************************************************************/ static void tbbt_release_node(TBBT_NODE *nod) { /* Insert the atom at the beginning of the free list */ nod->Lchild = tbbt_free_list; tbbt_free_list = nod; } /* end tbbt_release_node() */ /*-------------------------------------------------------------------------- NAME tbbt_shutdown PURPOSE Terminate various static buffers. USAGE int tbbt_shutdown() RETURNS Returns SUCCEED/FAIL DESCRIPTION Free various buffers allocated in the tbbt routines. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ int tbbt_shutdown(void) { TBBT_NODE *curr; /* Release the free-list if it exists */ if (tbbt_free_list != NULL) { while (tbbt_free_list != NULL) { curr = tbbt_free_list; tbbt_free_list = tbbt_free_list->Lchild; free(curr->priv); free(curr); } } return SUCCEED; } /* end tbbt_shutdown() */ hdf4-hdf4.3.1/hdf/src/tbbt_priv.h000066400000000000000000000311251503061704500165250ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* "tbbt_priv.h" -- Data types/routines for threaded, balanced, binary trees. */ /* Extended from Knuth 6.2.3, Algorithm A */ #ifndef H4_TBBT_H #define H4_TBBT_H #include "hdf_priv.h" /* Define the "fast compare" values */ #define TBBT_FAST_UINT16_COMPARE 1 #define TBBT_FAST_INT32_COMPARE 2 /* Private TBBT information (defined in tbbt.c) */ struct tbbt_node_private; /* Private TBBT node information (defined in tbbt.c) */ struct tbbt_tree_private; /* Threaded node structure */ typedef struct tbbt_node { void *data; /* Pointer to user data to be associated with node */ void *key; /* Field to sort nodes on */ struct tbbt_node_private *priv; /* Private information about the TBBT node */ } TBBT_NODE; /* Threaded tree structure */ typedef struct tbbt_tree { TBBT_NODE *root; struct tbbt_tree_private *priv; /* Private information about the TBBT */ } TBBT_TREE; /* These routines are designed to allow use of a general-purpose balanced tree * implementation. These trees are appropriate for maintaining in memory one * or more lists of items, each list sorted according to key values (key values * must form a "completely ordered set") where no two items in a single list * can have the same key value. The following operations are supported: * * - Create an empty list * - Add an item to a list * - Look up an item in a list by key value * - Look up the Nth item in a list * - Delete an item from a list * - Find the first/last/next/previous item in a list * - Destroy a list * * Each of the above operations requires Order(log(N)) time where N is the * number of items in the list (except for list creation which requires * constant time and list destruction which requires Order(N) time if the user- * supplied free-data-item or free-key-value routines require constant time). * Each of the above operations (except create and destroy) can be performed * on a subtree. * * Each node of a tree has associated with it a generic pointer (void *) which * is set to point to one such "item" and a generic pointer to point to that * item's "key value". The structure of the items and key values is up to the * user to define. The user must specify a method for comparing key values. * This routine takes three arguments, two pointers to key values and a third * integer argument. You can specify a routine that expects pointers to "data * items" rather than key values in which case the pointer to the key value in * each node will be set equal to the pointer to the data item. * * Since the "data item" pointer is the first field of each tree node, these * routines may be used without this "tbbt_priv.h" file. For example, assume * "ITM" is the structure definition for the data items you want to store in * lists: * * ITM ***tbbtdmake( int (*cmp)(void *,void *,int), int arg ); * ITM **root= NULL; (* How to create an empty tree w/o tbbtdmake() *) * ITM **tbbtdfind( ITM ***tree, void *key, ITM ***pp ); * ITM **tbbtfind( ITM **root, void *key, int (*cmp)(), int arg, ITM ***pp ); * ITM **tbbtdless( ITM ***tree, void *key, ITM ***pp ); * ITM **tbbtless( ITM **root, void *key, int (*cmp)(), int arg, ITM ***pp ); * ITM **tbbtindx( ITM **root, long indx ); * ITM **tbbtdins( ITM ***tree, ITM *item, void *key ); * ITM **tbbtins( ITM ***root, ITM *item, void *key, int (*cmp)(), int arg ); * ITM *tbbtrem( ITM ***root, ITM **node, void **kp ); * ITM **tbbtfirst( ITM **root ), **tbbtlast( ITM **root ); * ITM **tbbtnext( ITM **node ), **tbbtprev( ITM **node ); * ITM ***tbbtdfree( ITM ***tree, void (*df)(ITM *), void (*kf)(void *) ); * void tbbtfree( ITM ***root, void (*df)(ITM *), void (*kf)(void *) ); */ #ifdef __cplusplus extern "C" { #endif HDFLIBAPI TBBT_TREE *tbbtdmake(int (*compar)(void *, void *, int), int arg, unsigned fast_compare); /* Allocates and initializes an empty threaded, balanced, binary tree and * returns a pointer to the control structure for it. You can also create * empty trees without this function as long as you never use tbbtd* routines * (tbbtdfind, tbbtdins, tbbtdfree) on them. * Examples: * int keycmp(); * TBBT_ROOT *root= tbbtdmake( keycmp, (int)keysiz , 0); * or * void *root= tbbtdmake( strcmp, 0 , 0); * or * void *root= tbbtdmake( keycmp, (int)keysiz , TBBT_FAST_UINT16_COMPARE); * or * TBBT_NODE *root= NULL; (* Don't use tbbtd* routines *) * `cmp' is the routine to be used to compare two key values [in tbbtdfind() * and tbbtdins()]. The arguments to `cmp' are the two keys to compare * and `arg': (*cmp)(k1,k2,arg). `cmp' is expected to return 0 if its first * two arguments point to identical key values, -1 (or any integer less than 0) * if k1 points to a key value lower than that pointed to by k2, and 1 (or any * integer greater than 0) otherwise. If `cmp' is NULL, memcmp is used. If * `cmp' is NULL and `arg' is not greater than 0L, `1+strlen(key1)' is used in * place of `arg' to emulate strcmp(): memcmp( k1, k2, 1+strlen(k1) ). You * can use strcmp() directly (as in the second example above) as long as your C * compiler does not assume strcmp() will always be passed exactly 2 arguments * (only newer, ANSI-influenced C compilers are likely to be able to make this * kind of assumption). You can also use a key comparison routine that expects * pointers to data items rather than key values. * The "fast compare" option is for keys of simple numeric types (currently * uint16 and int32) and avoids the function call for faster searches in * some cases. The key comparison routine is still required for some * insertion routines which use it. * * Most of the other routines expect a pointer to a root node of a tree, not * a pointer to the tree's control structure (only tbbtdfind(), tbbtdins(), * and tbbtdfree() expect pointers to control structures). However TBBT_TREE * is just defined as "**TBBT_NODE" (unless you have defined TBBT_INTERNALS so * you have access to the internal structure of the nodes) so * TBBT_TREE *tree1= tbbtdmake( NULL, 0 ); * is equivalent to * TBBT_NODE **tree1= tbbtdmake( NULL, 0 ); * So could be used as: * node= tbbtdfind( tree1, key, NULL ); * node= tbbtfind( *tree1, key, compar, arg, NULL ); * node= tbbtdless( tree1, key, NULL ); * node= tbbtless( *tree1, key, compar, arg, NULL ); * node= tbbtdins( tree1, item, key ); * node= tbbtins( tree1, item, key, compar, arg ); * item= tbbtrem( tree1, tbbtdfind(tree1,key,NULL), NULL ); * item= tbbtrem( tree1, tbbtfind(*tree1,key,compar,arg,NULL), NULL ); * tree1= tbbtdfree( tree1, free, NULL ); (* or whatever *) * while * TBBT_NODE *root= NULL; * would be used like: * node= tbbtfind( root, key ); * node= tbbtins( &root, item, key ); * node= tbbtrem( &root, tbbtfind(root,key), NULL ); * tbbtfree( &root, free, NULL ); (* or whatever *) * Never use tbbtfree() on a tree allocated with tbbtdmake() or on a sub-tree * of ANY tree. Never use tbbtdfree() except on a tbbtdmake()d tree. */ HDFLIBAPI TBBT_NODE *tbbtdfind(TBBT_TREE *tree, void *key, TBBT_NODE **pp); HDFLIBAPI TBBT_NODE *tbbtfind(TBBT_NODE *root, void *key, int (*cmp)(void *, void *, int), int arg, TBBT_NODE **pp); HDFLIBAPI TBBT_NODE *tbbtdless(TBBT_TREE *tree, void *key, TBBT_NODE **pp); HDFLIBAPI TBBT_NODE *tbbtless(TBBT_NODE *root, void *key, int (*cmp)(void *, void *, int), int arg, TBBT_NODE **pp); /* Locate a node based on the key given. A pointer to the node in the tree * with a key value matching `key' is returned. If no such node exists, NULL * is returned. Whether a node is found or not, if `pp' is not NULL, `*pp' * will be set to point to the parent of the node we are looking for (or that * node that would be the parent if the node is not found). tbbtdfind() is * used on trees created using tbbtdmake() (so that `cmp' and `arg' don't have * to be passed). tbbtfind() can be used on the root or any subtree of a tree * create using tbbtdmake() and is used on any tree (or subtree) created with- * out using tbbtdmake(). tbbtless() & tbbtdless() work exactly like tbbtfind() * and tbbtdfind() except that they find the node with a key which is less than * or equal to the key given to them. */ HDFLIBAPI TBBT_NODE *tbbtindx(TBBT_NODE *root, int32 indx); /* Locate the node that has `indx' nodes with lesser key values. This is like * an array lookup with the first item in the list having index 0. For large * values of `indx', this call is much faster than tbbtfirst() followed by * `indx' tbbtnext()s. Thus `tbbtindx(&root,0L)' is equivalent to (and almost * as fast as) `tbbtfirst(root)'. */ HDFLIBAPI TBBT_NODE *tbbtdins(TBBT_TREE *tree, void *item, void *key); HDFLIBAPI TBBT_NODE *tbbtins(TBBT_NODE **root, void *item, void *key, int (*cmp)(void *, void *, int), int arg); /* Insert a new node to the tree having a key value of `key' and a data pointer * of `item'. If a node already exists in the tree with key value `key' or if * malloc() fails, NULL is returned (no node is inserted), otherwise a pointer * to the inserted node is returned. `cmp' and `arg' are as for tbbtfind(). */ HDFLIBAPI void *tbbtrem(TBBT_NODE **root, TBBT_NODE *node, void **kp); /* Remove the node pointed to by `node' from the tree with root `root'. The * data pointer for the deleted node is returned. If the second argument is * NULL, NULL is returned. If `kp' is not NULL, `*kp' is set to point to the * key value for the deleted node. Examples: * data= tbbtrem( tree, tbbtdfind(tree,key), &kp ); free(data); free(kp); * data= tbbtrem( &root, tbbtfind(root,key,compar,arg), NULL ); * data= tbbtrem( &tree->root, tbbtdfind(tree,key), NULL ); */ HDFLIBAPI TBBT_NODE *tbbtfirst(TBBT_NODE *root); HDFLIBAPI TBBT_NODE *tbbtlast(TBBT_NODE *root); /* Returns a pointer to node from the tree with the lowest(first)/highest(last) * key value. If the tree is empty NULL is returned. Examples: * node= tbbtfirst(*tree); * node= tbbtfirst(root); * node= tbbtlast(tree->root); * node= tbbtlast(node); (* Last node in a sub-tree *) */ HDFLIBAPI TBBT_NODE *tbbtnext(TBBT_NODE *node); HDFLIBAPI TBBT_NODE *tbbtprev(TBBT_NODE *node); /* Returns a pointer the node from the tree with the next highest (previous * lowest) key value relative to the node pointed to by `node'. If `node' * points the last (first) node of the tree, NULL is returned. */ HDFLIBAPI TBBT_TREE *tbbtdfree(TBBT_TREE *tree, void (*fd)(void *), void (*fk)(void *)); HDFLIBAPI void tbbtfree(TBBT_NODE **root, void (*fd)(void *), void (*fk)(void *)); /* Frees up an entire tree. `fd' is a pointer to a function that frees/ * destroys data items, and `fk' is the same for key values. * void free(); * tree= tbbtdfree( tree, free, free ); * tbbtfree( &root, free, free ); * is a typical usage, where keys and data are individually malloc()d. If `fk' * is NULL, no action is done for the key values (they were allocated on the * stack, as a part of each data item, or together with one malloc() call, for * example) and likewise for `fd'. tbbtdfree() always returns NULL and * tbbtfree() always sets `root' to be NULL. */ HDFLIBAPI void tbbtprint(TBBT_NODE *node); /* Prints out the data in a node */ HDFLIBAPI void tbbtdump(TBBT_TREE *tree, int method); /* Prints an entire tree. The method variable determines which sort of * traversal is used: * -1 : Pre-Order Traversal * 1 : Post-Order Traversal * 0 : In-Order Traversal */ HDFLIBAPI long tbbtcount(TBBT_TREE *tree); /* Terminate the buffers used in the tbbt*() interface */ HDFPUBLIC int tbbt_shutdown(void); #ifdef __cplusplus } #endif #endif /* H4_TBBT_H */ hdf4-hdf4.3.1/hdf/src/vattr.c000066400000000000000000001560541503061704500156760ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf_priv.h" #include "vg_priv.h" /************************************************************** * * vattr.c * * Handles vgroup and vdata attributes * * Up to HDF4.0r2 vdata and vgroup version number is VSET_VERSION, * defined as 3 in vg.h. With attributes or large fields * or other new features, version number will be 4, VSET_NEW_VERSION. * Attributes will be stored in vdatas. All attributes of a vgroup * or a vdata will be included in the vgroup or the vdata header. * * Changes in the vdata header in HDF files : * if attr or other new features are assigned: * o version number will be VSET_NEW_VERSION (4, * defined in vg.h) * o the new DFTAG_VH looks like: * * interlace number_records hdf_rec_size n_fields * 2 bytes 4 2 2 * datatype_field_n offset_field_n order_field_n fldnmlen_n * 2*n_fields 2*n_fields 2*n_fields 2*n_fields * fldnm_n namelen name classlen class extag exref version * 2 2 2 2 2 * more flags < nattrs attr0_tag/ref attr1_tag/ref ...> * 2 4 4 2/2 2/2 * version more extra_byte * 2 2 1 * * o To make version number accessible without parsing the * variable length of new feature list, a duplicated * version number and 3 bytes (the 'more' and the extra * byte) will be added at the end of the VH. See below. * The new code (version 4 or later) will get the * version number from the bottom * while the old libraries get the version number from the * middle of VH, after the field list and before the new * features list. The new features will be ignored by the * old library. Also, since the old libraries ignore * the extra byte, there is no need to have the extra * byte after the middle 'more' field. * o Add a field "flags" of uint32, * bit 0 -- has attr * bit 1 -- "large field" * bit 2 -- "interlaced data is appendable" * bit 3-15 -- unused. * o Fields follow the flags are: * number_of_attrs this vdata has (4 bytes) * attr_index_list (#_attrs * 8 bytes (4+2+2)) * (field_n, avdtag, avdref) * the flags and attribute fields are added between the * middle version field and the bottom version field. * if no new features: * version number is still VSET_VERSION and the old VH * will be written out. * * Changes in the vgroup data in HDF files : * If has attribute(s): * o add a flag field, uint16, * bit 0 -- has attr * bit 1-15 -- unused. * o version number will be changed to 4 * o fields following the flag are: * number_of_attrs * vg_attr_list * the above fields are added preceding the version field * o don't remove the current undocumented "Slush/Mistake byte" * This byte is hard coded in vpackvg and vunpackvg. * in order to get version number which can be * either 3 or 4, the extra byte must be there ) * If no attribute: * version number is still 3 * No changes in vgroup data * * Create 2 new types in vg.h: * typedef struct dyn_vsattr_struct * { * int32 field_n -- which field of the vdata. 0 for the * entire vdata. * uint16 atag, aref -- tag/ref of the attr vdata * } vs_attr_t; * (If there are too many attrs and performance becomes a * problem, the vs_attr_t listed above can be replaced by an * array of attr lists, each list contains attrs for 1 field.) * typedef struct dyn_vgattr_struct * { * uint16 atag, aref -- tag/ref of the attr vdata * } vg_attr_t; * * Changes in the internal structure VDATA: * add fields: * uint32 flags; * int32 nattrs; * vd_attr_t *alist; * intn new_h_sz; -- set to 1 when VH size changed * * Changes in the internal structure VGROUP: * add fields: * uint32 flags; * int32 nattrs; * vg_attr_t *alist; * * New routines: * intn VSfindex(int32 vsid, char *fieldname, int32 *findex) * find out the index of a field given the field name. * intn VSsetattr(int32 vsid, int32 findex, char *attrname, * int32 datatype, int32 count, void * values) * set attr for a field of a vdata or for the vdata. * if the attr already exists the new values will replace * the current ones as far as the datatype and order * are not changed. * intn VSnattrs(int32 vsid) * total number of attr for a vdata and its fields * int32 VSfnattrs(int32 vsid, int32 findex) * number of attrs for a vdata or a field of it * intn VSfindattr(int32 vsid, int32 findex, char *attrname) * get index of an attribute with a given name * intn VSattrinfo(int32 vsid, int32 findex, intn attrindex, * char *name, int32 *datatype, int32 *count, int32 *size); * get info about an attribute * intn VSgetattr(int32 vsid, int32 findex, intn attrindex, * void * values) * get values of an attribute * intn VSisattr(int32 vsid) * test if a vdata is an attribute of other object * < int32 VSgetversion(int32 vsid) already defined in vio.c > * < get vset version of a vdata > * intn Vsetattr(int32 vgid, char *attrname, int32 datatype, * int32 count, void * values) * set attr for a vgroup * intn Vnattrs(int32 vgid) * number of attrs for a vgroup * intn Vnattrs2(int32 vgid) * number of attrs for a vgroup, also including attrs created prior * to the availability of Vdata and Vgroup attribute API routines * intn Vfindattr(int32 vgid, char *attrname) * get index of an attribute with a given name * intn Vattrinfo(int32 vgid, intn attrindex, char *name, * int32 *datatype, int32 *count, int32 *size) * get info about an attribute * intn Vattrinfo2(int32 vgid, intn attrindex, char *name, * int32 *datatype, int32 *count, int32 *size) * get info about an attribute - this function processes attributes * that are counted by Vnattrs2. * intn Vgetattr(int32 vgid, intn attrindex, void * values) * get values of an attribute * intn Vgetattr2(int32 vgid, intn attrindex, void * values) * get values of an attribute - this function processes attributes * that are counted by Vnattrs2. * int32 Vgetversion(int32 vgid) * get vset version of a vgroup * Private routines: * * Affected existing functions: * vgp.c:vunpackvg--VPgetinfo * vgp.c:VPgetinfo--Load_vfile--vinitialize * vgp.c:vpackvg--Vdetach * vgp.c:Vattach * vgp.c:Vdestroynode--Remove_file--Vfinish * vio.c:VSPgetinfo--Load_vfile--vinitialize * vio.c:vpackvs * vio.c:vunpackvs * vio.c:VSdetach * vio.c:VSattach * vio.c:VSdestroynode * vconv.c:Vimakecompat--vmakecompat (no change. compat to ver. 3) * * First draft on 7/31/96, modified on 8/6/96, 8/15/96 *************************************************************/ /* ----------------- VSfindex --------------------- NAME VSfindex -- find index of a named field in a vdata USAGE intn VSfindex(int32 vsid, char *fieldname, int32 *findex) int32 vsid; IN: vdata id which contains this field const char *fieldname; IN: field name int32 *findex; OUT: field index RETURNS Returns SUCCEED if successful; FAIL otherwise. DESCRIPTION This routine searches field names only. It doesn't search the vdata name. Use VSinquire() or VSgetname() to find vdata name. ---------------------------------------------------- */ intn VSfindex(int32 vsid, const char *fieldname, int32 *findex) { vsinstance_t *vs_inst; VDATA *vs; DYN_VWRITELIST *w; int32 nflds; int32 ret_value = SUCCEED; intn i, found = 0; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = vs_inst->vs; w = &vs->wlist; nflds = w->n; for (i = 0; i < nflds; i++) { #ifdef VDATA_FIELDS_ALL_UPPER if (matchnocase(fieldname, w->name[i])) { found = 1; *findex = i; break; } #else if (strcmp(fieldname, w->name[i]) == 0) { found = 1; *findex = i; break; } #endif /* VDATA_FIELDS_ALL_UPPER */ } if (!found) HGOTO_ERROR(DFE_BADFIELDS, FAIL); done: return ret_value; } /* VSfindex */ /* -------------- VSsetattr --------------------------------- NAME VSsetattr -- Set attribute for a vdata or a field of a vdata USAGE intn VSsetattr(int32 vsid, int32 findex, char *attrname, int32 datatype, int32 count, void * values) int32 vsid; IN: vdata access id int32 findex; IN: number determined by assigning each field in a record a number starting with 0; _HDF_VDATA (-1) represents the entire vdata. const char *attrname; IN: name of the attribute int32 datatype; IN: data type of the attribute int32 count; IN: number of values the attribute has const void * values; IN: a buffer which contains the values of the attribute RETURNS Returns SUCCEED if successful, FAIL otherwise. DESCRIPTION Create a vdata to store this attribute. If the field already has an attribute with the same name, replace the current values with the new values if the new data type and order are the same as the current ones; changes in data type or order will be considered as errors. No limit on max number of attributes. (int32 is the final limit.) ----------------------------------------------------------- */ intn VSsetattr(int32 vsid, int32 findex, const char *attrname, int32 datatype, int32 count, const void *values) { vsinstance_t *vs_inst, *attr_inst; VDATA *vs, *attr_vs; DYN_VWRITELIST *w, *attr_w; intn i; int32 nattrs, ret_value = SUCCEED; int32 attr_vs_ref, fid, attr_vsid; HEclear(); /* check if id is valid vdata */ if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null attribute name */ if (attrname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); /* check for read access */ if (vs->access == 'r') HGOTO_ERROR(DFE_BADATTACH, FAIL); w = &(vs->wlist); /* check field index */ if ((findex >= w->n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* if the attr already exist for this field, check data type and order */ nattrs = vs->nattrs; fid = vs->f; /* assume attrs are in the same file */ if (nattrs && vs->alist != NULL) { for (i = 0; i < nattrs; i++) { if (vs->alist[i].findex == findex) { attr_vs_ref = (int32)vs->alist[i].aref; attr_vsid = VSattach(fid, attr_vs_ref, "w"); if (attr_vsid == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (NULL == (attr_inst = (vsinstance_t *)HAatom_object(attr_vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (attr_vs = attr_inst->vs)) HGOTO_ERROR(DFE_BADPTR, FAIL); if (strcmp(attr_vs->vsname, attrname) == 0) { attr_w = &attr_vs->wlist; if (attr_w->n != 1 || datatype != attr_w->type[0] || count != attr_w->order[0]) { VSdetach(attr_vsid); HGOTO_ERROR(DFE_BADATTR, FAIL); } /* type or order changed */ /* replace the values */ if (1 != VSwrite(attr_vsid, values, 1, FULL_INTERLACE)) { VSdetach(attr_vsid); HGOTO_ERROR(DFE_VSWRITE, FAIL); } if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); HGOTO_DONE(SUCCEED); } /* attr exist */ if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } /* if findex */ } /* for loop, not exists */ } /* create a vdata to store the attribute */ if (FAIL == (attr_vs_ref = VHstoredatam(fid, ATTR_FIELD_NAME, values, 1, datatype, attrname, _HDF_ATTRIBUTE, count))) HGOTO_ERROR(DFE_VSCANTCREATE, FAIL); /* add this attr to vs->alist */ if (vs->alist == NULL) { if (vs->nattrs > 0) HGOTO_ERROR(DFE_BADATTR, FAIL); vs->alist = (vs_attr_t *)malloc(sizeof(vs_attr_t)); } else vs->alist = realloc(vs->alist, (vs->nattrs + 1) * sizeof(vs_attr_t)); if (vs->alist == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); vs->alist[vs->nattrs].findex = findex; vs->alist[vs->nattrs].atag = DFTAG_VH; vs->alist[vs->nattrs].aref = (uint16)attr_vs_ref; vs->nattrs++; /* set attr flag and version number */ vs->flags = vs->flags | VS_ATTR_SET; vs->version = VSET_NEW_VERSION; vs->marked = 1; vs->new_h_sz = 1; done: return ret_value; } /* VSsetattr */ /* ------------------ VSnattrs ------------------------ NAME VSnattrs -- get total number of attributes assigned for this vdata and its fields USAGE intn VSnattrs(int32 vsid); int32 vsid; IN: access id of the vdata RETURNS Returns total number of attributes assigned to this vdata and its fields when successful, FAIL otherwise. DESCRIPTION Use VSfnattrs to get number of attributes for a field or for the vdata itself. -------------------------------------------------------- */ intn VSnattrs(int32 vsid) { vsinstance_t *vs_inst; VDATA *vs; int32 ret_value = SUCCEED; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); ret_value = vs->nattrs; done: return ret_value; } /* VSnattrs */ /* ---------------- VSfnattrs ------------------------- NAME VSfnattrs -- get the number of attributes assigned to a vdata or a field of a vdata. USAGE intn VSfnattrs(int32 vsid, int32 findex); int32 vsid; IN: access id of the vdata int32 findex; IN: index of the field, 0 based. Use _HDF_VDATA (-1) for the vdata itself. RETURNS Returns the number of attributes assigned to the specified field when successful, FAIL otherwise. DESCRIPTION Use VSnattrs to get total number of attributes for all fields and the vdata itself. -------------------------------------------------------- */ intn VSfnattrs(int32 vsid, int32 findex) { vsinstance_t *vs_inst; VDATA *vs; int32 ret_value = SUCCEED; vs_attr_t *vs_alist; intn i, nattrs, t_attrs; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex > vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); t_attrs = vs->nattrs; vs_alist = vs->alist; nattrs = 0; for (i = 0; i < t_attrs; i++) { if (vs_alist->findex == findex) nattrs++; vs_alist++; } ret_value = nattrs; done: return ret_value; } /* VSfattrs */ /* -------------- VSfindattr --------------------- NAME VSfindattr -- get index of an attribute with given name for a field of a vdata or for the vdata itself USAGE intn VSfindattr(int32 vsid, int32 findex, char *attrname) int32 vsid; IN: access id of the vdata int32 findex; IN: index of the field starting from 0; _HDF_VDATA (-1) for the vdata char *attrname; IN: name of the attr RETURNS Returns the index of the attr when successful, FAIL otherwise. DESCRIPTION ------------------------------------------------------------ */ intn VSfindattr(int32 vsid, int32 findex, const char *attrname) { VDATA *vs, *attr_vs; vsinstance_t *vs_inst, *attr_inst; vs_attr_t *vs_alist; int32 fid, attr_vsid; int32 ret_value = FAIL; intn i, nattrs, a_index, found; HEclear(); /* check if id is valid vdata */ if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null attribute name */ if (attrname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex >= vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); nattrs = vs->nattrs; vs_alist = vs->alist; if (nattrs == 0 || vs_alist == NULL) /* no attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); fid = vs->f; found = 0; a_index = -1; for (i = 0; i < nattrs; i++) { if (vs_alist->findex == findex) { a_index++; /* index of fld attr */ if ((attr_vsid = VSattach(fid, (int32)vs_alist->aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(attr_vsid) != VSIDGROUP) { VSdetach(attr_vsid); HGOTO_ERROR(DFE_ARGS, FAIL); } if (NULL == (attr_inst = (vsinstance_t *)HAatom_object(attr_vsid))) { VSdetach(attr_vsid); HGOTO_ERROR(DFE_NOVS, FAIL); } if (NULL == (attr_vs = attr_inst->vs) || strncmp(attr_vs->vsclass, _HDF_ATTRIBUTE, strlen(_HDF_ATTRIBUTE))) { VSdetach(attr_vsid); HGOTO_ERROR(DFE_BADATTR, FAIL); } if (!strcmp(attr_vs->vsname, attrname)) { ret_value = a_index; found = 1; } if (VSdetach(attr_vsid) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } if (found) break; vs_alist++; } done: return ret_value; } /* VSfindattr */ /* ------------- VSattrinfo -------------------------- NAME VSattrinfo -- get info of an attribute of a vdata/field USAGE intn VSattrinfo(int32 vsid, int32 findex, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size); int32 vsid; IN: vdata id int32 findex; IN: field index. _HDF_VDATA (-1) for the vdata intn attrindex; IN: which attr of the field/vdata attrindex is 0-based char *name; OUT: attribute name int32 *datatype; OUT: datatype of the attribute int32 *count; OUT: number of values int32 *size; OUT: size of the attr values on local machine RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION name, datatype or count can be NULL if which is not interested. --------------------------------------------------- */ intn VSattrinfo(int32 vsid, int32 findex, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size) { VDATA *vs, *attr_vs; vs_attr_t *vs_alist; vsinstance_t *vs_inst, *attr_inst; int32 attr_vsid; int32 ret_value = SUCCEED; intn i, nattrs, a_index, found; DYN_VWRITELIST *w; char *fldname; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex >= vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); nattrs = vs->nattrs; if (attrindex < 0 || attrindex >= nattrs) HGOTO_ERROR(DFE_ARGS, FAIL); vs_alist = vs->alist; if (nattrs == 0 || vs_alist == NULL) /* no attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); found = 0; a_index = -1; for (i = 0; i < nattrs; i++) { if (vs_alist->findex == findex) { a_index++; if (a_index == attrindex) { found = 1; break; } } vs_alist++; } if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); /* found. get attr info */ if (FAIL == (attr_vsid = VSattach(vs->f, (int32)vs_alist->aref, "r"))) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (NULL == (attr_inst = (vsinstance_t *)HAatom_object(attr_vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (attr_vs = attr_inst->vs) || strcmp(attr_vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (name) { strncpy(name, attr_vs->vsname, strlen(attr_vs->vsname)); name[strlen(attr_vs->vsname)] = '\0'; } w = &(attr_vs->wlist); fldname = w->name[0]; /* this vdata has 1 field */ if (w->n != 1 || strcmp(fldname, ATTR_FIELD_NAME)) HGOTO_ERROR(DFE_BADATTR, FAIL); if (datatype) *datatype = (int32)w->type[0]; if (count) *count = (int32)w->order[0]; if (size) *size = w->order[0] * (DFKNTsize(w->type[0] | DFNT_NATIVE)); if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* VSattrinfo */ /* ---------------------- VSgetattr -------------------- NAME VSgetattr -- get values of a specified attribute USAGE intn VSgetattr(int32 vsid, int32 findex, intn attrindex, void * values) int32 vsid; IN: vdata access id int32 findex; IN: field index; _HDF_VDATA (-1) for vdata intn attrindex; IN: attribute index void * values; OUT: buffer holding attribute values. RETURNS Returns SUCCEED if successful, FAIL otherwise DESCRIPTION --------------------------------------------------------- */ intn VSgetattr(int32 vsid, int32 findex, intn attrindex, void *values) { VDATA *vs, *attr_vs; vs_attr_t *vs_alist; vsinstance_t *vs_inst, *attr_inst; int32 fid, attr_vsid; int32 ret_value = SUCCEED; intn i, nattrs, a_index, found; int32 n_recs, il; char fields[FIELDNAMELENMAX + 1]; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex >= vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); nattrs = vs->nattrs; if (attrindex < 0 || attrindex >= nattrs) HGOTO_ERROR(DFE_ARGS, FAIL); vs_alist = vs->alist; if (nattrs == 0 || vs_alist == NULL) /* no attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); fid = vs->f; /* assume attrs are in the same file */ found = 0; a_index = -1; for (i = 0; i < nattrs; i++) { if (vs_alist->findex == findex) { a_index++; if (a_index == attrindex) { found = 1; break; } } vs_alist++; } if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); /* found. get attr info */ if ((attr_vsid = VSattach(fid, (int32)vs_alist->aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(attr_vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check correctness of attr vdata */ if (NULL == (attr_inst = (vsinstance_t *)HAatom_object(attr_vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (attr_vs = attr_inst->vs) || strcmp(attr_vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (FAIL == VSinquire(attr_vsid, &n_recs, &il, fields, NULL, NULL)) HGOTO_ERROR(DFE_BADATTR, FAIL); if (strcmp(fields, ATTR_FIELD_NAME) != 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* ready to read */ if (FAIL == VSsetfields(attr_vsid, fields)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if (FAIL == VSread(attr_vsid, (unsigned char *)values, n_recs, il)) HGOTO_ERROR(DFE_VSREAD, FAIL); if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* VSgetattr */ /* -------------------- VSisattr ---------------------- NAME VSisattr -- test if a vdata is an attribute of other object USAGE intn VSisattr(int32 vsid) int32 vsid; IN: vdata access id RETURNS Returns TRUE if the vdata is an attribute, FALSE otherwise DESCRIPTION -------------------------------------------------------- */ intn VSisattr(int32 vsid) { vsinstance_t *vs_inst; VDATA *vs; int32 ret_value = FALSE; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FALSE); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FALSE); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FALSE); if (strcmp(vs->vsclass, _HDF_ATTRIBUTE) == 0) ret_value = TRUE; done: return ret_value; } /* VSisattr */ /* ----------------- Vsetattr ------------------------- NAME Vsetattr -- set an attribute for a vgroup USAGE intn Vsetattr(int32 vgid, char *attrname, int32 datatype, int32 count, void * values) int32 vgid; IN: access id of the vgroup char *attrname; IN: name of the attr int32 datatype; IN: datatype of the attr int32 count; IN: number of values the attr has void * values; IN: values of the attr RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION Create a vdata to store this attribute. If the vgroup already has an attribute with the same name and if the type and order are the same, use the new values to replace the current values. Any changes in datatype or order will be considered as an error. No limit on max number of attributes. (int32 is the final limit. ------------------------------------------------------------ */ intn Vsetattr(int32 vgid, const char *attrname, int32 datatype, int32 count, const void *values) { VGROUP *vg; VDATA *vs; vginstance_t *v; vsinstance_t *vs_inst; DYN_VWRITELIST *w; int32 ret_value = SUCCEED; int32 attr_vs_ref, fid, vsid; intn i; HEclear(); /* check if id is valid vgroup */ if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null attribute name */ if (attrname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if ((vg->otag != DFTAG_VG) || (vg->access != 'w')) HGOTO_ERROR(DFE_ARGS, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); fid = vg->f; if ((vg->alist != NULL && vg->nattrs == 0) || (vg->alist == NULL && vg->nattrs != 0)) HGOTO_ERROR(DFE_BADATTR, FAIL); /* if the attr already exist, check data type and order. */ if (vg->alist != NULL) { for (i = 0; i < vg->nattrs; i++) { if ((vsid = VSattach(fid, (int32)vg->alist[i].aref, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_BADPTR, FAIL); if (strcmp(vs->vsname, attrname) == 0) { w = &vs->wlist; if (w->n != 1 || w->type[0] != datatype || w->order[0] != count) { VSdetach(vsid); HGOTO_ERROR(DFE_BADATTR, FAIL); } /* type or order changed */ /* replace the values */ if (1 != VSwrite(vsid, values, 1, FULL_INTERLACE)) { VSdetach(vsid); HGOTO_ERROR(DFE_VSWRITE, FAIL); } if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); HGOTO_DONE(SUCCEED); } /* attr exist */ if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } /* for loop, not exists */ } /* create the attr_vdata and insert it into vg->alist */ if ((attr_vs_ref = VHstoredatam(fid, ATTR_FIELD_NAME, values, 1, datatype, attrname, _HDF_ATTRIBUTE, count)) == FAIL) HGOTO_ERROR(DFE_VSCANTCREATE, FAIL); /* add the attr to attr list */ if (vg->alist == NULL) vg->alist = (vg_attr_t *)malloc(sizeof(vg_attr_t)); else /* not exist */ vg->alist = realloc(vg->alist, (vg->nattrs + 1) * sizeof(vg_attr_t)); if (vg->alist == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); vg->nattrs++; vg->flags = vg->flags | VG_ATTR_SET; vg->version = VSET_NEW_VERSION; vg->alist[vg->nattrs - 1].atag = DFTAG_VH; vg->alist[vg->nattrs - 1].aref = (uint16)attr_vs_ref; vg->marked = 1; /* list of refs of all attributes, it is only used when Vattrinfo2 is invoked; see Vattrinfo2 function header for info. 2/4/2011 -BMR */ vg->old_alist = NULL; vg->noldattrs = 0; done: return ret_value; } /* Vsetattr */ /* ----------------- Vgetversion ----------------------- NAME Vgetversion -- gets vset version of a vgroup USAGE int32 Vgetversion(int32 vgid) int32 vgid; IN: vgroup access id RETURNS Returns vset version number if successful, FAIL otherwise. DESCRIPTION Version 4 (VSET_NEW_VERSION) allows attrs. Version 2 (VSET_OLD_VERSION) is the old vset (before it was merged into HDF3.2?) Version 3 (VSET_VERSION) is the version between HDF3.2 through HDF4.0r2. ------------------------------------------------------------ */ int32 Vgetversion(int32 vgid) { VGROUP *vg; vginstance_t *v; int16 vg_version; int32 ret_value = FAIL; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); vg_version = vg->version; ret_value = (int32)vg_version; done: return ret_value; } /* Vgetversion */ /* ---------------- Vnattrs ------------------------ NAME Vnattrs -- get number of attributes for a vgroup USAGE intn Vnattrs(int32 vgid) int32 vgid; IN: access id of the vgroup RETURNS Returns number of attributes when successful, Fail otherwise. DESCRIPTION -------------------------------------------------- */ intn Vnattrs(int32 vgid) { VGROUP *vg; vginstance_t *v; int32 ret_value = SUCCEED; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = vg->nattrs; done: return ret_value; } /* Vnattrs */ /* ---------------- Vnoldattrs ------------------------ NAME Vnoldattrs -- get number of old-style attributes in a vgroup USAGE intn Vnoldattrs(int32 vgid) int32 vgid; IN: access id of the vgroup RETURNS Returns number of old-style attributes when successful, FAIL, otherwise. DESCRIPTION There are two types of attributes for vgroups. One is the old-style that was created using methods other than the standard attribute API function Vsetattr, which was introduced after HDF Version 4.0 Release 2, July 19, 1996. Without the use of Vsetattr, an application could simulate an attribute for a vgroup by creating and writing a vdata of class _HDF_ATTRIBUTE and adding that vdata to the vgroup via these calls: vdata_ref = VHstoredatam(file_id, ATTR_FIELD_NAME, values, size, type, attr_name, _HDF_ATTRIBUTE, order); ret_value = Vaddtagref (vgroup_id, DFTAG_VH, vdata2_ref); Note that a vgroup (and vdata) that has attribute created by Vsetattr (and VSsetattr) will have a version number of VSET_NEW_VERSION (4) while the other type will have version number of VSET_VERSION (3.) While both types of attributes are stored as vdatas, the vdatas of the new-style attributes are saved in a list of attribute tags/refs of the vgroup, and the vdatas of the old-style attributes are saved as elements of the vgroup. Because of the different storages, the new attribute functions would miss the old-style attributes. Note that the attribute in the SD API are created/stored using the old approach. Thus, V API would miss the SD attributes. Two new fields are added to the internal structure vgroup_desc, noldattrs and old_alist, for holding the number of old-style attributes and their ref#s, respectively. Vnoldattrs calls VSofclass to get the number of old-style attributes and their ref numbers, then sets these two fields when old-style attributes exist in the file before returning the number of old-style attributes to the caller. -BMR 2011/2/16 -------------------------------------------------- */ intn Vnoldattrs(int32 vgid) { VGROUP *vg; vginstance_t *v; intn n_old_attrs = 0; intn ii; uint16 *areflist = NULL; int32 ret_value = 0; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get number of old-style attributes */ n_old_attrs = VSofclass(vgid, _HDF_ATTRIBUTE, 0, 0, NULL); /* Note: a new attribute is stored in vdata of class _HDF_ATTRIBUTE too, but it is only saved in the file as attribute (by tag/ref,) not as an element of the vgroup. Hence, vg->nattrs = 1, but vg->nvelt = 0 -BMR Feb, 2011*/ /* Store the ref numbers of old-style attributes into the list vg->old_alist, for easy access later by Vattrinfo2 and Vgetattr2 */ if (n_old_attrs > 0) { /* Locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); /* Establish the list of attribute refs if it is not done so already or if it is outdated. */ /* temporary list of attr refs to pass into VSofclass */ areflist = (uint16 *)malloc(sizeof(uint16) * n_old_attrs); if (areflist == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Get ref numbers of old-style attributes belonging to this vg */ n_old_attrs = VSofclass(vgid, _HDF_ATTRIBUTE, 0, (uintn)n_old_attrs, areflist); if (n_old_attrs == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Do nothing when the list exists and is current */ if (vg->old_alist != NULL && vg->noldattrs == n_old_attrs) { ret_value = vg->noldattrs; HGOTO_DONE(vg->noldattrs); } /* Either list doesn't exist or exists but is not current */ else if (vg->noldattrs != n_old_attrs) { /* List is outdated, i.e., more old style attributes had been added since the list was established, release it */ free(vg->old_alist); /* Allocate new list */ vg->old_alist = (vg_attr_t *)malloc(sizeof(vg_attr_t) * (n_old_attrs)); if (vg->old_alist == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* not current */ /* Transfer ref nums to the vg_attr_t list for future accesses */ for (ii = 0; ii < n_old_attrs; ii++) { vg->old_alist[ii].aref = areflist[ii]; /* atag is not needed */ } vg->noldattrs = n_old_attrs; /* record number of old-style attrs */ ret_value = vg->noldattrs; } /* there are some old attributes */ done: free(areflist); return ret_value; } /* Vnoldattrs */ /* ---------------- Vnattrs2 ------------------------ NAME Vnattrs2 -- get number of old and new attributes for a vgroup USAGE intn Vnattrs2(int32 vgid) int32 vgid; IN: access id of the vgroup RETURNS Returns number of attributes when successful, FAIL, otherwise. DESCRIPTION The returned number of attributes will include: 1. the attributes created by the Vgroup attribute API routines, that were added starting from Vgroups version VSET_NEW_VERSION, and 2. the attributes created using the combination of VHstoredatam and Vaddtagref/Vinsert, most likely prior to the availability of the attribute API routines. More detailed description is available in the header of Vnoldattrs. This function was added specifically to assist the HDF Mapping project. -BMR 2011/2/8 -------------------------------------------------- */ intn Vnattrs2(int32 vgid) { intn n_new_attrs = 0, n_old_attrs = 0; int32 ret_value = SUCCEED; HEclear(); /* Get number of new-style attributes */ n_new_attrs = Vnattrs(vgid); if (n_new_attrs == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Get number of old-style attributes */ n_old_attrs = Vnoldattrs(vgid); if (n_old_attrs == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Total number of attributes */ ret_value = n_old_attrs + n_new_attrs; done: return ret_value; } /* Vnattrs2 */ /* ----------------- Vfindattr ----------------------- NAME Vfindattr -- get index of an attribute with given name USAGE intn Vfindattr(int32 vgid, char *attrname) int32 vgid; IN: access id of the vgroup const char *attrname; IN: name of the attr RETURNS Returns the index of the attr when successful, FAIL otherwise. DESCRIPTION ------------------------------------------------------------ */ intn Vfindattr(int32 vgid, const char *attrname) { VGROUP *vg; VDATA *vs; vginstance_t *v; vsinstance_t *vs_inst; int32 fid, vsid; int32 ret_value = FAIL; intn i, found; HEclear(); /* check if id is valid vgroup */ if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null attribute name */ if (attrname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; fid = vg->f; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); if (vg->nattrs == 0 || vg->alist == NULL) /* no attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); found = 0; for (i = 0; found == 0 && i < vg->nattrs; i++) { if ((vsid = VSattach(fid, (int32)vg->alist[i].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs) || strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (0 == strcmp(vs->vsname, attrname)) { ret_value = i; found = 1; } if (VSdetach(vsid) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } done: return ret_value; } /* Vfindattr */ /* ---------- Vattrinfo ---------------------- NAME Vattrinfo -- get info of a vgroup attribute USAGE intn Vattrinfo(int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size) int32 vgid; IN: vgroup id intn attrindex; IN: which attr's info we want attrindex is 0-based char *name; OUT: attribute name int32 *datatype; OUT: datatype of the attribute int32 *count; OUT: number of values int32 *size; OUT: size of the attr values on local machine. RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION name, datatype or count can be NULL if which is not interested. --------------------------------------------------- */ intn Vattrinfo(int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size) { VGROUP *vg; VDATA *vs; DYN_VWRITELIST *w; /* char fldname[FIELDNAMELENMAX + 1]; */ char *fldname; vginstance_t *v; vsinstance_t *vs_inst; int32 fid, vsid; int32 ret_value = SUCCEED; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; fid = vg->f; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); if (vg->nattrs <= attrindex || vg->alist == NULL) /* not that many attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); if ((vsid = VSattach(fid, (int32)vg->alist[attrindex].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs) || strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (name) { strncpy(name, vs->vsname, strlen(vs->vsname)); name[strlen(vs->vsname)] = '\0'; } w = &(vs->wlist); fldname = w->name[0]; /* this vdata has 1 field */ if (w->n != 1 || strcmp(fldname, ATTR_FIELD_NAME)) /* if (w->n != 1 ) */ HGOTO_ERROR(DFE_BADATTR, FAIL); if (datatype) *datatype = (int32)w->type[0]; if (count) *count = (int32)w->order[0]; if (size) *size = w->order[0] * (DFKNTsize(w->type[0] | DFNT_NATIVE)); if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* Vattrinfo */ /* ------------ Vattrinfo2 ---------------------- NAME Vattrinfo2 -- get info of a vgroup attribute USAGE intn Vattrinfo2(int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size) int32 vgid; IN: vgroup id intn attrindex; IN: which attr's info we want, attrindex is 0-based char *name; OUT: attribute name int32 *datatype; OUT: datatype of the attribute int32 *count; OUT: number of values int32 *size; OUT: size of the attr values on local machine. RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION Vattrinfo2 is an updated version of Vattrinfo. Both functions return the information of an attribute belongging to the given vgroup. However, unlike Vattrinfo, which only processes new-style attributes, i.e., attributes created by Vsetattr, Vattrinfo2 also handles old-style attributes. In addition, Vattrinfo2 was written to assist the HDF Mapping writer. Thus, it is assumed that Vattrinfo2 is to be used in a loop going through all the attributes of the vgroup, including old-style and, perhaps, new-style attributes, if they exist. Refer to the function header of Vnattrs2 and Vnoldattrs for more detail. If the vgroup has both types of attributes, the old-style attributes will be listed first, hence, the need for Vattrinfo2 to be used in a loop. Note that Vattrinfo2 must be used in conjunction with Vnattrs2, which is an updated version of Vnattrs, or Vnoldattrs, which is invoked by Vnattrs2. Vnoldattrs finds old-style attributes and establishes the list of their ref numbers for Vattrinfo2 to access. Note that the arguments name, datatype or count can be NULL if which is not interested. -BMR 2011/2/16 -------------------------------------------------------------- */ intn Vattrinfo2(int32 vgid, intn attrindex, char *name, int32 *datatype, int32 *count, int32 *size, int32 *nfields, uint16 *refnum) { VGROUP *vg; VDATA *vs; DYN_VWRITELIST *w; vginstance_t *vg_inst; vsinstance_t *vs_inst; vg_attr_t *vg_alist = NULL; int32 vsid; intn adjusted_index; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Make sure given object is a vgroup */ if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vg's index in vgtab */ if (NULL == (vg_inst = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = vg_inst->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Validate arguments */ if (attrindex < 0) HGOTO_ERROR(DFE_BADATTR, FAIL); /* invalid attribute index given */ adjusted_index = attrindex; if (adjusted_index < vg->noldattrs) /* index of old-style attribute */ vg_alist = vg->old_alist; /* use old-attr list */ else if (adjusted_index >= vg->noldattrs && adjusted_index < (vg->nattrs + vg->noldattrs)) /* index of new-style attributes */ { /* Adjust the index to accommodate for the old-style attributes preceding the new-style attribute list */ adjusted_index = adjusted_index - vg->noldattrs; vg_alist = vg->alist; /* use new-attr list */ } else /* not that many attrs */ HGOTO_ERROR(DFE_BADATTR, FAIL); if (vg_alist == NULL) /* Bad attr list */ HGOTO_ERROR(DFE_BADATTR, FAIL); /* Getting attribute information */ /* Get access to the vdata storing the attr, and obtain requested info */ if ((vsid = VSattach(vg->f, (int32)vg_alist[adjusted_index].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs) || strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (name) { strncpy(name, vs->vsname, strlen(vs->vsname)); name[strlen(vs->vsname)] = '\0'; } w = &(vs->wlist); if (datatype) *datatype = (int32)w->type[0]; if (count) *count = (int32)w->order[0]; if (size) *size = w->order[0] * (DFKNTsize(w->type[0] | DFNT_NATIVE)); if (nfields) *nfields = (int32)w->n; /* Note: int32 to be consistent with VFnfields */ if (refnum) *refnum = vs->oref; if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* Vattrinfo2 */ /* ---------- Vgetattr ----------------------- NAME Vgetattr -- read values of a vgroup attribute USAGE intn Vgetattr(int32 vgid, intn attrindex, void * values) int32 vgid; IN: vgroup id intn attrindex; IN: index of the attribute void * values; OUT: where the values go RETURNS Returns SUCCEED when successful, FAIL otherwise DESCRIPTION ------------------------------------------------- */ intn Vgetattr(int32 vgid, intn attrindex, void *values) { VGROUP *vg; VDATA *vs; char fields[FIELDNAMELENMAX]; vginstance_t *v; vsinstance_t *vs_inst; int32 fid, vsid; int32 n_recs, il; int32 ret_value = SUCCEED; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; fid = vg->f; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); if (vg->nattrs <= attrindex || vg->alist == NULL) /* not that many attrs or bad attr_Vg tag/ref */ HGOTO_ERROR(DFE_ARGS, FAIL); if ((vsid = VSattach(fid, (int32)vg->alist[attrindex].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check correctness of attr vdata */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs) || strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); if (FAIL == VSinquire(vsid, &n_recs, &il, fields, NULL, NULL)) HGOTO_ERROR(DFE_BADATTR, FAIL); /* if (strcmp(fields, ATTR_FIELD_NAME) != 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); */ /* ready to read */ if (FAIL == VSsetfields(vsid, ATTR_FIELD_NAME)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if (FAIL == VSread(vsid, (unsigned char *)values, n_recs, il)) HGOTO_ERROR(DFE_VSREAD, FAIL); if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* Vgetattr */ /* ---------- Vgetattr2 ----------------------- NAME Vgetattr2 -- read values of a vgroup attribute (updated of Vgetattr) USAGE intn Vgetattr2(int32 vgid, intn attrindex, void * values) int32 vgid; IN: vgroup id intn attrindex; IN: index of the attribute void * values; OUT: buffer for attribute values RETURNS Returns SUCCEED when successful, FAIL otherwise DESCRIPTION This function is an updated version of Vgetattr because, beside processing an attribute that was created by the Vsetattr, it also reads values of an attribute that was created prior to Vsetattr by other method such as the combination of VHstoredatam and Vaddtagref/Vinsert. More detailed description is available in the function header of Vnattrs2 and Vnoldattrs. -BMR 2011/2/16 ------------------------------------------------- */ intn Vgetattr2(int32 vgid, intn attrindex, void *values) { VGROUP *vg; VDATA *vs; char fields[FIELDNAMELENMAX]; vginstance_t *v; vsinstance_t *vs_inst; vg_attr_t *vg_alist = NULL; intn adjusted_index; int32 vsid = -1; int32 n_recs, il; int32 ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Make sure given object is a vgroup */ if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Validate arguments */ if (attrindex < 0) HGOTO_ERROR(DFE_BADATTR, FAIL); /* invalid attribute index given */ adjusted_index = attrindex; if (adjusted_index < vg->noldattrs) /* index of old-style attribute */ vg_alist = vg->old_alist; /* use old-attr list */ else if (adjusted_index >= vg->noldattrs && adjusted_index < (vg->nattrs + vg->noldattrs)) /* index of new-style attributes */ { /* Adjust the index to accommodate for the old-style attributes preceding the new-style attribute list */ adjusted_index = adjusted_index - vg->noldattrs; vg_alist = vg->alist; /* use new-attr list */ } else /* not that many attrs */ HGOTO_ERROR(DFE_BADATTR, FAIL); if (vg_alist == NULL) /* Bad attr list */ HGOTO_ERROR(DFE_BADATTR, FAIL); /* Getting attribute information */ /* Get access to the vdata storing the attr, and obtain requested info */ if ((vsid = VSattach(vg->f, (int32)vg_alist[adjusted_index].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check correctness of attr vdata */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs) || strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); /* Get vdata information */ if (FAIL == VSinquire(vsid, &n_recs, &il, fields, NULL, NULL)) HGOTO_ERROR(DFE_BADATTR, FAIL); /* Ready to read */ /* Some older attribute vdatas have field name as "AttrValues" instead of the common "VALUES" (ATTR_FIELD_NAME) so we need to use what was read by VSinquire instead of ATTR_FIELD_NAME -BMR 2011/2/11 (I'll look for "AttrValues" in previous versions of the library, just in case) */ /* if (FAIL == VSsetfields(vsid, ATTR_FIELD_NAME)) */ if (FAIL == VSsetfields(vsid, fields)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if (FAIL == VSread(vsid, (unsigned char *)values, n_recs, il)) HGOTO_ERROR(DFE_VSREAD, FAIL); if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: if (ret_value == FAIL) { /* Error condition cleanup */ if (vsid != -1) VSdetach(vsid); } return ret_value; } /* Vgetattr2 */ hdf4-hdf4.3.1/hdf/src/vattrf.c000066400000000000000000000213651503061704500160400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * vattrf.c * Part of the HDF Vset attribute interface. * * C routines (short names) to be called from fortran * ******************************************************/ #include "hdf_priv.h" #include "vg_priv.h" #include "hproto_fortran.h" /* ----------------- vsfcfdx ---------------------- * get field index * VSfindex -- vsfcfdx -- vsffidx */ intf nvsfcfdx(intf *vsid, _fcd fldnm, intf *findex, intf *fldnmlen) { intf ret; char *fld; fld = HDf2cstring(fldnm, (intn)*fldnmlen); if (!fld) return FAIL; ret = (intf)VSfindex((int32)*vsid, fld, (int32 *)findex); free(fld); return ret; } /* ------------------------------------------------- * vsfcsat -- set a numeric attr for a vdata or a field * of a vdata * VSsetattr -- vsfcsat -- vsfsnat */ intf nvsfcsat(intf *vsid, intf *findex, _fcd attrnm, intf *dtype, intf *count, intf *values, intf *attrnmlen) { intf ret; char *attrname; int32 cfindex; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; cfindex = *findex; ret = (intf)VSsetattr((int32)*vsid, (int32)cfindex, attrname, (int32)*dtype, (int32)*count, (void *)values); free(attrname); return ret; } /* ---------------------------------------------------- * vsfcsca -- set char attr for vdata or its field * * VSsetattr -- vsfcsca -- vsfscat */ intf nvsfcsca(intf *vsid, intf *findex, _fcd attrnm, intf *dtype, intf *count, _fcd values, intf *attrnmlen) { intf ret; char *attrname; int32 cfindex; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; cfindex = *findex; ret = (intf)VSsetattr((int32)*vsid, (int32)cfindex, attrname, (int32)*dtype, (int32)*count, (void *)_fcdtocp(values)); free(attrname); return ret; } /* ------------------------------------------------------- * vsfnats -- get total number of attributes of a vdata and * its fields * VSnattrs -- vsfnats */ intf nvsfnats(intf *vsid) { intf ret; ret = (intf)VSnattrs((int32)*vsid); return ret; } /* ------------------------------------------------------- * vsffnas -- get number of attributes of a vdata or of a field * * VSfnattrs -- vsffnas */ intf nvsffnas(intf *vsid, intf *findex) { intf ret; int32 cfindex; cfindex = *findex; ret = (intf)VSfnattrs((int32)*vsid, (int32)cfindex); return ret; } /* --------------------------------------------------------- * vsfcfda -- find attribute of a vdata of a field * of the vdata * VSfindattr -- vsfcfda -- vsffdat */ intf nvsfcfda(intf *vsid, intf *findex, _fcd attrnm, intf *attrnmlen) { intf ret; char *attrname; int32 cfindex; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; cfindex = *findex; ret = (intf)VSfindattr((int32)*vsid, (int32)cfindex, attrname); free(attrname); return ret; } /* --------------------------------------------------------- * vsfainf -- get attribute info * VSattrinfo -- vsfcain -- vsfainf */ intf nvsfcain(intf *vsid, intf *findex, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size, intf *attrnamelen) { intf ret = FAIL; /* temporary variables */ int32 cfindex; int32 tdtype, tcount, tsize; char *tattrname; cfindex = *findex; /* Allocate space for fortran strings */ tattrname = (char *)malloc(*attrnamelen + 1); if (!tattrname) HRETURN_ERROR(DFE_NOSPACE, FAIL); ret = (intf)VSattrinfo((int32)*vsid, (int32)cfindex, (int32)*aindex, tattrname, &tdtype, &tcount, &tsize); if (ret != FAIL) { /* move values from temporary space to fortran variables */ *dtype = tdtype; *count = tcount; *size = tsize; /* convert C-string results back to Fortran strings */ HDpackFstring(tattrname, _fcdtocp(attrname), (intn)*attrnamelen); } free(tattrname); return ret; } /* --------------------------------------------------------- * vsfgnat -- get values of a numeric attribute * VSgetattr -- vsfgnat */ intf nvsfgnat(intf *vsid, intf *findex, intf *aindex, intf *values) { intf ret; int32 cfindex; cfindex = *findex; ret = (intf)VSgetattr((int32)*vsid, (int32)cfindex, (int32)*aindex, (void *)values); return ret; } /* -------------------------------------------------------- * vsfgcat -- get values of a char type attribute * VSgetattr -- vsfgcat */ intf nvsfgcat(intf *vsid, intf *findex, intf *aindex, _fcd values) { intf ret; int32 cfindex; cfindex = *findex; ret = (intf)VSgetattr((int32)*vsid, cfindex, (int32)*aindex, (void *)_fcdtocp(values)); return ret; } /* --------------------------------------------------------- * vsfisat -- test if a vdata is an attribute of other object * VSisattr -- vsfisat */ intf nvsfisat(intf *vsid) { intf ret; ret = (intf)VSisattr((int32)*vsid); return ret; } /* --------------------------------------------------------- * vfcsatt -- set a numeric attr for a vgroup * Vsetattr -- vfcsatt -- vfsnatt */ intf nvfcsatt(intf *vgid, _fcd attrnm, intf *dtype, intf *count, intf *values, intf *attrnmlen) { intf ret; char *attrname; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; ret = (intf)Vsetattr((int32)*vgid, attrname, (int32)*dtype, (int32)*count, (void *)values); free(attrname); return ret; } /* ---------------------------------------------------- * vfcscat -- set char attr for vgroup * * Vsetattr -- vfcscat -- vfscatt */ intf nvfcscat(intf *vgid, _fcd attrnm, intf *dtype, intf *count, _fcd values, intf *attrnmlen) { intf ret; char *attrname; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; ret = (intf)Vsetattr((int32)*vgid, attrname, (int32)*dtype, (int32)*count, (void *)_fcdtocp(values)); free(attrname); return ret; } /* ------------------------------------------------------- * vfnatts -- get number of attributes of a vgroup * Vnattrs -- vfnatts */ intf nvfnatts(intf *vgid) { intf ret; ret = (intf)Vnattrs((int32)*vgid); return ret; } /* --------------------------------------------------------- * vfcfdat -- find attribute of a vgroup * Vfindattr -- vfcfdat -- vffdatt */ intf nvfcfdat(intf *vgid, _fcd attrnm, intf *attrnmlen) { intf ret; char *attrname; attrname = HDf2cstring(attrnm, (intn)*attrnmlen); if (!attrname) return FAIL; ret = (intf)Vfindattr((int32)*vgid, attrname); free(attrname); return ret; } /* --------------------------------------------------------- * vfainf -- get attribute info * Vattrinfo -- vfainfo */ intf nvfainfo(intf *vgid, intf *aindex, _fcd attrname, intf *dtype, intf *count, intf *size) { intf ret; ret = (intf)Vattrinfo((int32)*vgid, (int32)*aindex, _fcdtocp(attrname), (int32 *)dtype, (int32 *)count, (int32 *)size); return ret; } /* --------------------------------------------------------- * vfgnatt -- get values of a numeric attribute * Vgetattr -- vfgnatt */ intf nvfgnatt(intf *vgid, intf *aindex, intf *values) { intf ret; ret = (intf)Vgetattr((int32)*vgid, *aindex, (void *)values); return ret; } /* -------------------------------------------------------- * vfgcatt -- get values of a char type attribute * Vgetattr -- vfgcatt */ intf nvfgcatt(intf *vgid, intf *aindex, _fcd values) { intf ret; ret = (intf)Vgetattr((int32)*vgid, (int32)*aindex, (void *)_fcdtocp(values)); return ret; } /* --------------------------------------------------------- * vfgver -- get version number of a vgroup * Vgetversion -- vfgver */ intf nvfgver(intf *vgid) { intf ret; ret = (intf)Vgetversion((int32)*vgid); return ret; } hdf4-hdf4.3.1/hdf/src/vattrff.f000066400000000000000000000111261503061704500162030ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C*************************************************** C C C ************************************************** C * C * vattrff.f C * Vset attribute Fortran routines C * C ************************************************* C --------------- vsffidx ------------------------ C vsffidx -- find index of a named field in a vdata C VSfindex -- vsfcfdx -- vsffidx C integer function vsffidx(vsid, fldnm, fldidx) integer vsid character*(*) fldnm integer fldidx integer vsfcfdx vsffidx = vsfcfdx(vsid, fldnm, fldidx, + len(fldnm)) end C --------------- vsfsnat ------------------------- C vsfsnat -- set a numeric attribute for a vdata C or a field of a vdata C VSsetattr -- vsfcsat -- vsfsnat C integer function vsfsnat(vsid, findex,attrnm,dtype, + count, values) integer vsid, findex, dtype, count character*(*) attrnm integer values integer vsfcsat vsfsnat = vsfcsat(vsid, findex, attrnm, dtype, + count, values, len(attrnm)) end C --------------- vsfscat ------------------------- C vsfscat -- set a char type attribute for a vdata C or a field of a vdata C VSsetattr -- vsfcsca -- vsfscat C integer function vsfscat(vsid, findex,attrnm,dtype, + count, values) integer vsid, findex, dtype, count character*(*) attrnm character*(*) values integer vsfcsca vsfscat = vsfcsca(vsid, findex, attrnm, dtype, + count, values, len(attrnm)) end C --------------- vsffdat ------------------------- C vsffdat -- find attribute of a vdata of a field C of the vdata C VSfindattr -- vsfcfda -- vsffdat C integer function vsffdat(vsid, findex, attrnm) integer vsid, findex character*(*) attrnm integer vsfcfda vsffdat = vsfcfda(vsid, findex, attrnm, + len(attrnm)) end C ------------------- vsfainf ------------------------- C vsfainf -- get attribute info C VSattrinfo -- vsfcain -- vsfainf C integer function vsfainf(vsid, findex, aindex, attrname, + dtype, count, size) integer vsid, findex, aindex, dtype, count, size character*(*) attrname integer vsfcain vsfainf = vsfcain(vsid, findex, aindex, attrname, + dtype, count, size, len(attrname)) end C ------------------- vfsnatt ------------------------- C vfsnatt -- set a numeric attr for a vgroup C Vsetattr -- vfcsatt -- vfsnatt C integer function vfsnatt(vgid, attrnm, dtype, + count, values) integer vgid, dtype, count, values character*(*) attrnm integer vfcsatt vfsnatt = vfcsatt(vgid, attrnm, dtype,count, + values, len(attrnm)) end C -------------- vfscatt ------------------------- C vfscatt -- set a char attr for a vgroup C Vsetattr -- vfcscat -- vfscatt C integer function vfscatt(vgid, attrnm, dtype, + count, values) integer vgid, dtype, count character*(*) attrnm, values integer vfcscat vfscatt = vfcscat(vgid, attrnm, dtype,count, + values, len(attrnm)) end C --------------- vffdatt --------------------- C vffdatt -- find an attribute of a vgroup C Vfindattr -- vfcfdat -- vffdatt C integer function vffdatt(vg, attrnm) integer vg character*(*) attrnm integer vfcfdat vffdatt = vfcfdat(vg, attrnm, len(attrnm)) end C -------------------------------------------- hdf4-hdf4.3.1/hdf/src/vconv.c000066400000000000000000000322701503061704500156620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* obsolete code for HDF 3.2. 26/march/92 jason ng */ /* except for the following routines: * vicheckcompat() * movebytes () * oldunpackvg () * oldunpackvs () map_from_old_types -- Convert an old type (i.e. LOCAL_INT to DFNT_ based types) */ /* * * vconv.c * Part of the HDF Vset interface. */ #include "hdf_priv.h" #include "hfile_priv.h" #include "vg_priv.h" /* ** ================================================================== ** static data areas and routines ** ================================================================== * */ /* * types used in defining a new field via a call to VSfdefine */ #define LOCAL_NOTYPE 0 #define LOCAL_CHARTYPE 1 /* 8-bit ascii text stream */ #define LOCAL_INTTYPE 2 /* 32-bit integers - don't use */ #define LOCAL_FLOATTYPE 3 /* as opposed to DOUBLE */ #define LOCAL_LONGTYPE 4 /* 32-bit integers */ #define LOCAL_BYTETYPE 5 /* 8-bit byte stream - unsupported */ #define LOCAL_SHORTTYPE 6 /* 16-bit integers - unsupported */ #define LOCAL_DOUBLETYPE 7 /* as opposed to FLOAT - unsupported */ /* * actual LOCAL MACHINE sizes of the above types */ #define LOCAL_UNTYPEDSIZE 0 #define LOCAL_CHARSIZE sizeof(char) #define LOCAL_INTSIZE sizeof(int) #define LOCAL_FLOATSIZE sizeof(float) #define LOCAL_LONGSIZE sizeof(long) #define LOCAL_BYTESIZE sizeof(unsigned char) #define LOCAL_SHORTSIZE sizeof(short) #define LOCAL_DOUBLESIZE sizeof(double) /* stores sizes of local machine's known types */ static int16 local_sizetab[] = {LOCAL_UNTYPEDSIZE, LOCAL_CHARSIZE, LOCAL_INTSIZE, LOCAL_FLOATSIZE, LOCAL_LONGSIZE, LOCAL_BYTESIZE, LOCAL_SHORTSIZE, LOCAL_DOUBLESIZE}; #define LOCALSIZETAB_SIZE sizeof(local_sizetab) / (sizeof(int)) /* ** returns the machine size of a field type ** returns FAIL if error */ static int16 VSIZEOF(int16 x) { if (x < 0 || x > (int16)(LOCALSIZETAB_SIZE - 1)) { return FAIL; } else { return local_sizetab[x]; } } /* VSIZEOF */ /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ /* */ /* routines for converting from vsets in v1.0 to v2.x */ /* */ /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ /* ------------------------------------------------------------------ */ static void oldunpackvg(VGROUP *vg, uint8 buf[], int32 *size); static void oldunpackvs(VDATA *vs, uint8 buf[], int32 *size); /* * this routine checks that the given OPENED file is compatible with * version 2.0 or later of the HDF Vset library . * RETURNS 1 if file already compatible with r2. * 0 if not compatible. * -1 if error. */ int32 vicheckcompat(HFILEID f) { int16 foundold, foundnew; int32 aid; foundold = 0; foundnew = 0; /* locate any OLD vgs */ aid = Hstartread(f, (uint16)OLD_VGDESCTAG, DFREF_WILDCARD); if (aid != FAIL) { foundold++; Hendaccess(aid); } /* locate any OLD vdatas */ aid = Hstartread(f, (uint16)OLD_VSDESCTAG, DFREF_WILDCARD); if (aid != FAIL) { foundold++; Hendaccess(aid); } /* locate any NEW vgs */ aid = Hstartread(f, NEW_VGDESCTAG, DFREF_WILDCARD); if (aid != FAIL) { foundnew++; Hendaccess(aid); } /* locate any NEW vdatas */ aid = Hstartread(f, NEW_VSDESCTAG, DFREF_WILDCARD); if (aid != FAIL) { foundnew++; Hendaccess(aid); } HEclear(); /* clear the stack to remove faux failures - bug #655 */ if (foundold == 0) /* has no old vset elements */ return 1; /* just assume compatible */ if (foundnew > 0) return 1; /* file is already compatible */ else return 0; /* file is not compatible */ } /* vicheckcompat */ /* ------------------------------------------------------------------ */ /* * This routine will modify a given OPENED file so that is becomes compatible * with version 2.0 or later of the HDF Vset library. * Note that the file is assumed to be not compatible to begin with. * This routine will not check to see if the file is already compatible, * but it is harmless to run an already-compatible file through again. * * However, be aware that each time, the file gets larger. * Also, file must be opened with DFACC_ALL access. * * returns 1 if successful. if error, returns 0 */ int32 vimakecompat(HFILEID f) { VGROUP *vg; VDATA *vs; uint8 *buf = NULL; /* to store an old vdata or vgroup descriptor */ int32 old_bsize = 0, bsize = 0; int32 aid; int32 ret; uintn u; uint16 tag = DFTAG_NULL, ref = DFTAG_NULL; /* ============================================= */ /* --- read all vgs and convert each --- */ /* allocate space for vg */ if (NULL == (vg = VIget_vgroup_node())) HRETURN_ERROR(DFE_NOSPACE, 0); ret = aid = Hstartread(f, (uint16)OLD_VGDESCTAG, DFREF_WILDCARD); while (ret != FAIL) { HQuerytagref(aid, &tag, &ref); HQuerylength(aid, &bsize); if (buf == NULL || bsize > old_bsize) { free(buf); if ((buf = (uint8 *)malloc(bsize)) == NULL) HRETURN_ERROR(DFE_NOSPACE, 0); old_bsize = bsize; } ret = Hgetelement(f, (uint16)OLD_VGDESCTAG, ref, (uint8 *)buf); if (ret == FAIL) { free(buf); HRETURN_ERROR(DFE_READERROR, 0); } oldunpackvg(vg, buf, &bsize); /* add new items */ vg->vgclass = NULL; /* vg->vgclass[0] = '\0'; */ vg->extag = 0; vg->exref = 0; vg->version = 2; /* version 2 */ vg->more = 0; /* inside each vgroup, change the old tags to new */ for (u = 0; u < (uintn)vg->nvelt; u++) if (vg->tag[u] == OLD_VGDESCTAG) vg->tag[u] = NEW_VGDESCTAG; else if (vg->tag[u] == OLD_VSDESCTAG) vg->tag[u] = NEW_VSDESCTAG; else /* BAD */ HERROR(DFE_NOTINSET); vpackvg(vg, buf, &bsize); ret = Hputelement(f, VGDESCTAG, ref, (uint8 *)buf, bsize); free(buf); if (ret == FAIL) HRETURN_ERROR(DFE_WRITEERROR, 0); ret = Hnextread(aid, (uint16)OLD_VGDESCTAG, DFREF_WILDCARD, DF_CURRENT); } /* while */ Hendaccess(aid); VIrelease_vgroup_node(vg); /* ============================================= */ /* --- read all vdata descs and convert each --- */ /* --- then dup a tag for each vdata data elt --- */ old_bsize = 0; /* reset state variables */ buf = NULL; if ((vs = VSIget_vdata_node()) == NULL) HRETURN_ERROR(DFE_NOSPACE, 0); ret = aid = Hstartread(f, (uint16)OLD_VSDESCTAG, DFREF_WILDCARD); while (ret != FAIL) { HQuerytagref(aid, &tag, &ref); HQuerylength(aid, &bsize); if (buf == NULL || bsize > old_bsize) { free(buf); if ((buf = (uint8 *)malloc(bsize)) == NULL) HRETURN_ERROR(DFE_NOSPACE, 0); old_bsize = bsize; } ret = Hgetelement(f, tag, ref, (uint8 *)buf); if (ret == FAIL) { free(buf); HRETURN_ERROR(DFE_READERROR, 0); } oldunpackvs(vs, buf, &bsize); /* add new items */ vs->vsclass[0] = '\0'; vs->extag = 0; vs->exref = 0; vs->version = 2; /* version 2 */ vs->more = 0; vpackvs(vs, buf, &bsize); ret = Hputelement(f, VSDESCTAG, ref, (uint8 *)buf, bsize); if (ret == FAIL) { free(buf); HRETURN_ERROR(DFE_WRITEERROR, 0); } /* duplicate a tag to point to vdata data */ ret = Hdupdd(f, NEW_VSDATATAG, ref, (uint16)OLD_VSDATATAG, ref); free(buf); if (ret == FAIL) HRETURN_ERROR(DFE_DUPDD, 0); ret = Hnextread(aid, (uint16)OLD_VSDESCTAG, DFREF_WILDCARD, DF_CURRENT); } /* while */ Hendaccess(aid); VSIrelease_vdata_node(vs); return 1; } /* vimakecompat */ /* ================================================================== */ /* * this routine checks that the given file is compatible with * version 2.0 or later of the HDF Vset library . * * All it does is to open the file, call vicheckcompat to do all the * checking, and then closes it. * See comments for vicheckcompat(). * returns 1 if file already compatible with r2. * 0 if not compatible. * -1 if error. */ int32 vcheckcompat(char *fs) { HFILEID f; int32 ret; f = Hopen(fs, DFACC_ALL, 0); if (f == FAIL) HRETURN_ERROR(DFE_BADOPEN, FAIL); ret = vicheckcompat(f); Hclose(f); return ret; } /* vcheckcompat */ /* ================================================================== */ /* * This routine will modify a given file so that is becomes compatible * with version 2.0 or later of the HDF Vset library. * * All this routine does is to open the file, call vimakecompat to * do all the conversion, and then to close the file. * See comments for vimakecompat(). * * returns 1 if successful. if error, returns 0 */ int32 vmakecompat(char *fs) { HFILEID f; int32 ret; f = Hopen(fs, DFACC_ALL, 0); if (f == FAIL) HRETURN_ERROR(DFE_BADOPEN, FAIL); ret = vimakecompat(f); Hclose(f); return ret; } /* vmakecompat */ /* ==================================================================== */ static void oldunpackvg(VGROUP *vg, uint8 buf[], int32 *size) { uint8 *bb; int16 int16var; uintn i; *size = *size; /* dummy, so that compiler thinks it is used */ bb = &buf[0]; /* retrieve nvelt */ INT16DECODE(bb, int16var); vg->nvelt = (uint16)int16var; /* retrieve the tags */ for (i = 0; i < (uintn)vg->nvelt; i++) UINT16DECODE(bb, vg->tag[i]); /* retrieve the refs */ for (i = 0; i < (uintn)vg->nvelt; i++) UINT16DECODE(bb, vg->ref[i]); /* retrieve vgname */ strcpy(vg->vgname, (char *)bb); } /* oldunpackvg */ /* ================================================================= */ static void oldunpackvs(VDATA *vs, uint8 buf[], int32 *size) { uint8 *bb; int16 int16var; intn i; *size = *size; /* dummy */ bb = &buf[0]; INT16DECODE(bb, vs->interlace); INT32DECODE(bb, vs->nvertices); UINT16DECODE(bb, vs->wlist.ivsize); INT16DECODE(bb, int16var); vs->wlist.n = (intn)int16var; for (i = 0; i < vs->wlist.n; i++) /* retrieve the type */ INT16DECODE(bb, vs->wlist.type[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the isize */ UINT16DECODE(bb, vs->wlist.isize[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the off */ UINT16DECODE(bb, vs->wlist.off[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the order */ UINT16DECODE(bb, vs->wlist.order[i]); for (i = 0; i < vs->wlist.n; i++) { strcpy(vs->wlist.name[i], (char *)bb); bb += (strlen(vs->wlist.name[i]) + 1); } strcpy(vs->vsname, (char *)bb); bb += (strlen(vs->vsname) + 1); /* **EXTRA** fill in the machine-dependent size fields */ for (i = 0; i < vs->wlist.n; i++) /* FAIL check on VSIZEOF()? */ vs->wlist.esize[i] = (uint16)(vs->wlist.order[i] * VSIZEOF((int16)vs->wlist.type[i])); } /* oldunpackvs */ /* ----------------------- map_from_old_types ------------------------------- */ /* Convert an old type (i.e. LOCAL_INT) to DFNT_ based types */ int16 map_from_old_types(intn type) { switch (type) { case LOCAL_CHARTYPE: return DFNT_CHAR; case LOCAL_BYTETYPE: return DFNT_INT8; case LOCAL_SHORTTYPE: case LOCAL_INTTYPE: return DFNT_INT16; case LOCAL_LONGTYPE: return DFNT_INT32; case LOCAL_FLOATTYPE: return DFNT_FLOAT32; case LOCAL_DOUBLETYPE: return DFNT_FLOAT64; default: return (int16)type; } } /* map_from_old_types */ /* ------------------------------------------------------------------ */ hdf4-hdf4.3.1/hdf/src/vg.c000066400000000000000000001516211503061704500151450ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE vg.c HDF vdata routines and some vgroup routines LOCAL ROUTINES ============== VSIgetvdatas -- get vdatas of a specified class or created by user applications, i.e., not created by the library internally for storage. Currently used by VSgetvdatas and VSofclass. EXPORTED ROUTINES ================= VSelts -- number of elements in a vdata VSgetinterlace -- returns the interlace type of the vdata VSsetinterlace -- sets the vdata's interlace to full or none VSgetfields -- returns the fieldnames in a vdata VSfexist -- tests for existence of one or more fields in a vdata VSsizeof -- computes the byte size of the field(s) if a vdata VSdump -- prints contents of a vdata (for debugging) VSsetname -- associate a name with a vdata VSsetclass -- assigns a class name to a vdata VSgetname -- gets the vdata's name VSgetclass -- gets the vdata's class name VSinquire -- gets information about a vdata VSisinternal -- determines if a class name is for internal use only VSlone -- returns an array of refs of all lone vdatas in the file Vlone -- returns an array of refs of all lone vgroups in the file Vfind -- looks in the file for a vgroup with a given name VSfind -- looks in the file for a vdata with a given name Vfindclass -- looks in the file and returns the ref of the vgroup with the specified class VSfindclass -- looks in the file and returns the ref of the vdata with specified class VSsetblocksize -- sets the block size of the linked-block element. VSsetnumblocks -- sets the number of blocks for a linked-block element. VSgetblockinfo -- retrieves the block size and the number of blocks of a linked-block element. Vsetzap -- maintaind for back compatibility PRIVATE FUNCTIONS ================= matchnocase -- compares to strings, ignoring case vscheckclass -- checks if a given vdata has the specified class or if it is user-created, which means its class name is not one of the predefined HDF classes. PRIVATE functions manipulate vsdir and are used only within this file. PRIVATE data structures in here pertain to vdata in vsdir only. */ #include "hdf_priv.h" #include "vg_priv.h" /* These are used to determine whether a vdata had been created by the library internally, that is, not created by user's application */ #define HDF_NUM_INTERNAL_VDS 8 const char *HDF_INTERNAL_VDS[] = {DIM_VALS, DIM_VALS01, _HDF_ATTRIBUTE, _HDF_SDSVAR, _HDF_CRDVAR, "_HDF_CHK_TBL_", RIGATTRNAME, RIGATTRCLASS}; /* Private functions */ #ifdef VDATA_FIELDS_ALL_UPPER static int32 matchnocase(char *strx, char *stry); #endif /* VDATA_FIELDS_ALL_UPPER */ #ifdef VDATA_FIELDS_ALL_UPPER /*----------------------------------------------------------------- NAME matchnocase - (PRIVATE) compares 2 strings, ignoring case DESCRIPTION Private routine. RETURNS if strings match return TRUE, else FALSE --------------------------------------------------------------------*/ static int32 matchnocase(char *strx, /* IN: first string to be compared */ char *stry /* IN: second string to be compared */) { int32 i; int32 nx, ny; /* length of strings */ nx = strlen(strx); ny = strlen(stry); if (nx != ny) return FALSE; /* different lengths */ for (i = 0; i < nx; i++, strx++, stry++) { if (toupper(*strx) != toupper(*stry)) return FALSE; /* not identical */ } return TRUE; } /* matchnocase */ #endif /* VDATA_FIELDS_ALL_UPPER */ /* ------------------------------------------------------------------ NAME VSelts -- get number of elements in a vdata DESCRIPTION Gets the number of elements in the specified vdata RETURNS On success returns the number of elements in the VDATA vkey; returns FAIL on error. --------------------------------------------------------------------- */ int32 VSelts(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* make sure vdata key is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if ((vs == NULL) || (vs->otag != DFTAG_VH)) HGOTO_ERROR(DFE_ARGS, FAIL); /* return number of elements in vdata */ ret_value = (vs->nvertices); done: return ret_value; } /* VSelts */ /* ------------------------------------------------------------------ NAME VSgetinterlace -- gets interlace of the vdata vkey. DESCRIPTION Gets the interlace scheme for the specified vdata. RETURNS On success returns the interlace scheme used in the fil) of the specified vdata vkey. returns FAIL on error. ----------------------------------------------------------------------- */ int32 VSgetinterlace(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* return interlace of vdata */ ret_value = ((int32)(vs->interlace)); done: return ret_value; } /* VSgetinterlace */ /*------------------------------------------------------------------ NAME VSsetinterlace -- sets the vdata's interlace to full or none. DESCRIPTION Sets the interlace scheme for the vdata to one of FULL_INTERLACE or NO_INTERLACE. RETURNS SUCCEED/FAIL --------------------------------------------------------------------*/ intn VSsetinterlace(int32 vkey, /* IN: vdata key */ int32 interlace /* IN: interlace for storing records */) { vsinstance_t *w = NULL; VDATA *vs = NULL; intn ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* check if only read access, this is a failure */ if (vs->access == 'r') HGOTO_ERROR(DFE_RDONLY, FAIL); /* check if records have already been written out, cannot reset interlace in this case */ if (vs->nvertices > 0) HGOTO_ERROR(DFE_NORESET, FAIL); /* currently only 2 kinds of interlaced schemes allowed. */ if (interlace == FULL_INTERLACE || interlace == NO_INTERLACE) { vs->interlace = (int16)interlace; ret_value = SUCCEED; /* ok */ } else ret_value = FAIL; done: return ret_value; } /* VSsetinterlace */ /*------------------------------------------------------------------ NAME VSgetfields -- returns the name (if any) of all the fields in the vdata DESCRIPTION Returns the names of all the fields in comma separated string in the argument 'fields'. (e.g., "PX,PY"). RETURNS Returns FAIL on error, else the number of fields in the vdata. ----------------------------------------------------------------------*/ int32 VSgetfields(int32 vkey, /* IN: vdata key */ char *fields /* OUT: comma separated field name list */) { int32 i; vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check if a NULL field list is passed in, then return with error (found while fixing bug #554) - BMR 4/30/01 */ if (fields == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* check for possible corrupted value */ if (vs->wlist.n > VSFIELDMAX) HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); /* Got through Vdata and build the comma separated string of field names */ fields[0] = '\0'; /* No special handling for 0-field vdatas, this algorithm should work fine. */ for (i = 0; i < vs->wlist.n; i++) { /* build the comma-separated string */ strcat(fields, vs->wlist.name[i]); if (i < vs->wlist.n - 1) strcat(fields, ","); } /* return number of fields */ ret_value = ((int32)vs->wlist.n); done: return ret_value; } /* VSgetfields */ /*------------------------------------------------------------------ NAME VSfexist -- tests for existence of 1 or more fields in a vdata. DESCRIPTION The argument 'fields' is a string of comma-separated fieldnames (e.g. "PX,PY,PZ") to check for in vdata. RETURNS Returns SUCCEED if all fields exist else otherwise FAIL is returned. --------------------------------------------------------------------*/ intn VSfexist(int32 vkey, /* IN: vdata key */ char *fields /* IN: names of fields to check for */) { char **av = NULL; char *s = NULL; DYN_VWRITELIST *w = NULL; vsinstance_t *wi = NULL; VDATA *vs = NULL; int32 ac; int32 i, j; int32 found; intn ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (wi = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* call scanattrs to parse the string */ if (scanattrs(fields, &ac, &av) < 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* check for exceeding max number of fields */ if (ac > VSFIELDMAX) HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); /* get vdata itself and check it check also that more than one field in 'fields' */ vs = wi->vs; if ((vs == NULL) || (ac < 1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* now check in vdata's field table for these field names */ w = &vs->wlist; for (i = 0; i < ac; i++) { found = 0; s = av[i]; /* No changes for 0-field Vdatas, this algorithm should work fine. */ for (j = 0; j < w->n; j++) { #ifdef VDATA_FIELDS_ALL_UPPER if (matchnocase(s, w->name[j])) { found = 1; break; } #else if (strcmp(s, w->name[j]) == 0) { found = 1; break; } #endif /* VDATA_FIELDS_ALL_UPPER */ } if (!found) HGOTO_DONE(FAIL); } ret_value = TRUE; done: return ret_value; } /* VSfexist */ /* ----------------------------------------------------------------- NAME VSsizeof - computes the byte size of the field(s) of a vdata. DESCRIPTION The size is the actual size for the local architecture RETURNS The byte size of the field(s), positive integer, on success; otherwise, returns FAIL. ----------------------------------------------------------------- */ int32 VSsizeof(int32 vkey, /* IN vdata key */ char *fields /* IN: Name(s) of the fields to check size of */) { int32 totalsize; int32 i, j; int32 found; int32 ac; char **av = NULL; vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for possible corrupted value */ if (vs->wlist.n > VSFIELDMAX) HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); totalsize = 0; if (fields == NULL) /* default case? */ { /* count all field sizes in vdata */ for (j = 0; j < vs->wlist.n; j++) totalsize += vs->wlist.esize[j]; } else { /* parse field string */ if ((scanattrs(fields, &ac, &av) < 0) || (ac < 1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for exceeding max number of fields */ if (ac > VSFIELDMAX) HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); for (i = 0; i < ac; i++) { /* check fields in vs */ for (found = 0, j = 0; j < vs->wlist.n; j++) if (!strcmp(av[i], vs->wlist.name[j])) { totalsize += vs->wlist.esize[j]; found = 1; break; } if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); } /* end for */ } /* end else */ /* return total size of vdata fields specified */ ret_value = totalsize; done: return ret_value; } /* VSsizeof */ /*----------------------------------------------------------------- NAME VSdump - prints contents of a vdata (for debugging) DESCRIPTION Prints contents of a vdata (for debugging) RETURNS No return codes. -------------------------------------------------------------------*/ void VSdump(int32 vkey /* IN: vdata key */) { (void)vkey; } /* VSdump */ /*------------------------------------------------------- NAME VSsetname - give a name to a vdata. DESCRIPTION Truncates name to max length of VSNAMELENMAX If new name is longer than the current name set new_h_sz, so that VSdetach will delete the original vdata header and write a new header. RETURNS SUCCEED/FAIL ----------------------------------------------------------*/ int32 VSsetname(int32 vkey, /* IN: Vdata key */ const char *vsname /* IN: name to set for vdata*/) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 curr_len = 0; int32 slen; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null vdata name */ if (vsname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* get current length of vdata name */ curr_len = strnlen(vs->vsname, VSNAMELENMAX + 1); /* check length of new name against MAX length */ if ((slen = strlen(vsname)) > VSNAMELENMAX) { /* truncate name */ strncpy(vs->vsname, vsname, VSNAMELENMAX); vs->vsname[VSNAMELENMAX] = '\0'; } else /* copy whole name */ strcpy(vs->vsname, vsname); vs->marked = TRUE; /* mark vdata as being modified */ if (curr_len < slen) vs->new_h_sz = TRUE; /* mark vdata header size being changed */ done: return ret_value; } /* VSsetname */ /* ------------------------------------------------------ NAME VSsetclass - give a class name to a vdata. DESCRIPTION Truncates class name to max length of VSNAMELENMAX If new class is longer than the current class set new_h_sz, so that VSdetach will delete the original vdata header and write a new header. RETURNS SUCCEED/FAIL ----------------------------------------------------------*/ int32 VSsetclass(int32 vkey, /* IN: vdata key */ const char *vsclass /* IN: class name to set for vdata */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 curr_len; int32 slen; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for null vdata class */ if (vsclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* get current length of vdata class name */ curr_len = (intn)strlen(vs->vsclass); /* check length of new class name against MAX length */ if ((slen = (intn)strlen(vsclass)) > VSNAMELENMAX) { strncpy(vs->vsclass, vsclass, VSNAMELENMAX); vs->vsclass[VSNAMELENMAX] = '\0'; } else strcpy(vs->vsclass, vsclass); vs->marked = TRUE; /* mark vdata as being modified */ if (curr_len < slen) vs->new_h_sz = TRUE; /* mark vdata header size being changed */ done: return ret_value; } /* VSsetclass */ /*------------------------------------------------------ NAME VSgetname - gets the vdata's name. DESCRIPTION Get vdata's name and comy it to 'vsname'. Space for 'vsname' must be allocated by user. RETURNS SUCCEED/FAIL ----------------------------------------------------------*/ int32 VSgetname(int32 vkey, /* IN: vdata key */ char *vsname /* OUT: vdata name (allocated by user)*/) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check user allocated space */ if (vsname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* copy vdata name over */ strcpy(vsname, vs->vsname); done: return ret_value; } /* VSgetname */ /*------------------------------------------------------ NAME VSgetclass - gets the vdata's class name. DESCRIPTION Get vdata class name and copy over to 'vsclass'. Space for 'vsclass' must be allocated by user. RETURNS SUCCEED/FAIL ---------------------------------------------------------- */ int32 VSgetclass(int32 vkey, /* IN: vdata key */ char *vsclass /* OUT: class name for vdata (allocated by user) */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check user allocated space */ if (vsclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* copy class name over */ strcpy(vsclass, vs->vsclass); done: return ret_value; } /* VSgetclass */ /* ------------------------------------------------------------------ NAME VSinquire - gets info about a vdata vkey: DESCRIPTION Get information about Vdata. Space for 'fields' and 'vsname' must be allocated by user. VSinquire returns FAIL when any of the requested information is not retrievable, meaning some of the information may still be good even when the function returns FAIL. We assume that 'fields' and 'vsname' buffers have been allocated by the caller. When any of the arguments is null, no information will be returned for it. RETURNS SUCCEED/FAIL ------------------------------------------------------------------------*/ intn VSinquire(int32 vkey, /* IN: vdata key */ int32 *nelt, /* OUT: number of elements in vdata */ int32 *interlace, /* OUT: interlace scheme of vdata */ char *fields, /* OUT: comma separated string of field names */ int32 *eltsize, /* OUT: total size of all fields in bytes */ char *vsname /* OUT: name of vdata */) { intn ret_value = SUCCEED; intn status; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* obtain the value for each parameter although the previous one fails; ret_value should be FAIL if any of the parameters fails */ if (fields) { status = VSgetfields(vkey, fields); ret_value = (status == FAIL) ? FAIL : ret_value; } if (nelt) { *nelt = VSelts(vkey); ret_value = (*nelt == FAIL) ? FAIL : ret_value; } if (interlace) { *interlace = VSgetinterlace(vkey); ret_value = (*interlace == FAIL) ? FAIL : ret_value; } if (eltsize) { *eltsize = VSsizeof(vkey, fields); ret_value = (*eltsize == FAIL) ? FAIL : ret_value; } if (vsname) { status = VSgetname(vkey, vsname); ret_value = (status == FAIL) ? FAIL : ret_value; } done: return ret_value; /* ok */ } /* VSinquire */ /*----------------------------------------------------------------- NAME VSlone - returns an array of refs of all lone vdatas in the file. DESCRIPTION If 'idarray' is too small, routine will only fill 'idarray' with up to 'asize' worth of refs. RETURNS Returns FAIL if error else returns the total number of lone vdatas in the file. ---------------------------------------------------------------------*/ int32 VSlone(HFILEID f, /* IN: file id */ int32 *idarray, /* OUT: array to return refs of lone vdatas? */ int32 asize /* IN: size of 'idarray' */) { int32 i; int32 vgid; int32 vsid; int32 vstag; int32 vkey; uint8 *lonevdata = NULL; /* lcl wrk area: stores flags of vdatas */ int32 nlone; /* total number of lone vdatas */ int32 ret_value = SUCCEED; /* -- allocate local space for vdata refs, init to zeros -- */ if (NULL == (lonevdata = (uint8 *)calloc(MAX_REF, sizeof(uint8)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* -- look for all vdatas in the file, and flag (1) each -- */ vsid = -1; while (FAIL != (vsid = VSgetid(f, vsid))) /* until no more vdatas */ lonevdata[vsid] = 1; /* -- Look through all vgroups, searching for vdatas -- */ /* -- increment its index in lonevdata if found -- */ vgid = -1; while (FAIL != (vgid = Vgetid(f, vgid))) { /* until no more vgroups */ vkey = Vattach(f, vgid, "r"); /* attach to vgroup */ for (i = 0; i < Vntagrefs(vkey); i++) { Vgettagref(vkey, i, &vstag, &vsid); /* get tag/ref of element in vg */ if (vstag == (int32)DFTAG_VH) lonevdata[vsid] = 0; /* set vdata as not lone vdata */ } Vdetach(vkey); /* detach from vgroup */ } /* -- check in lonevdata: it's a lone vdata if its flag is still 1 -- */ nlone = 0; for (i = 0; i < (int32)MAX_REF; i++) { if (lonevdata[i]) { /* insert into idarray up till asize */ if (nlone < asize) idarray[nlone] = i; /* insert ref of vdata into idarray */ nlone++; } } /* free up locally allocated space */ free(lonevdata); ret_value = nlone; /* return the TOTAL # of lone vdatas */ done: return ret_value; } /* VSlone */ /*----------------------------------------------------------------- NAME Vlone - returns an array of refs of all lone vgroups in the file. DESCRIPTION If 'idarray' is too small, routine will only fill 'idarray' with up to 'asize' worth of refs. RETURNS Returns FAIL if error else returns the total number of lone vgroups in the file ---------------------------------------------------------------------*/ int32 Vlone(HFILEID f, /* IN: file id */ int32 *idarray, /* OUT: array to return refs of lone vgroups? */ int32 asize /* IN: size of 'idarray' */) { int32 i; int32 vgid; int32 vstag; int32 id; int32 vkey; uint8 *lonevg = NULL; /* local wrk area: stores flags of vgroups */ int32 nlone; /* total number of lone vgroups */ int32 ret_value = SUCCEED; /* -- allocate space for vgroup refs, init to zeroes -- */ if (NULL == (lonevg = (uint8 *)calloc(MAX_REF, sizeof(uint8)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* -- look for all vgroups in the file, and flag (1) each -- */ id = -1; while (FAIL != (id = Vgetid(f, id))) /* until no more vgroups */ lonevg[id] = 1; /* -- Look through all vgs, searching for vgroups -- */ /* -- increment its index in lonevg if found -- */ vgid = -1; while (FAIL != (vgid = Vgetid(f, vgid))) { /* until no more vgroups */ vkey = Vattach(f, vgid, "r"); /* attach to vgroup */ id = -1; for (i = 0; i < Vntagrefs(vkey); i++) { Vgettagref(vkey, i, &vstag, &id); /* get tag/ref of element in vg */ if (vstag == DFTAG_VG) lonevg[id] = 0; /* set vgroup as not lone vgroup */ } Vdetach(vkey); /* detach from vgroup */ } /* -- check in lonevg: it's a lone vgroup if its flag is still 1 -- */ nlone = 0; for (i = 0; i < (int32)MAX_REF; i++) { if (lonevg[i]) { /* insert into idarray up till asize */ if (nlone < asize) idarray[nlone] = i; /* insert ref of vgroup into idarray */ nlone++; } } /* free up locally allocated space */ free(lonevg); ret_value = nlone; /* return the TOTAL # of lone vgroups */ done: return ret_value; } /* Vlone */ /* ----------------------------------------------------------------- NAME Vfind -- looks in the file and returns the ref of the vgroup with name vgname DESCRIPTION Finds the vgroup with the specified name and returns the ref of the vgroup if successful. RETURNS Returns 0 if not found or on error. Otherwise, returns the vgroup's ref (a positive integer). -----------------------------------------------------------------------*/ int32 Vfind(HFILEID f, /* IN: file id */ const char *vgname /* IN: name of vgroup to find */) { int32 vgid = -1; vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = 0; /* check for null vgroup name */ if (vgname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* process through Vgroups in file */ while (FAIL != (vgid = Vgetid(f, vgid))) { /* get instance of vgroup */ if ((v = vginst(f, (uint16)vgid)) == NULL) HGOTO_DONE(0); /* get vgroup itself and check it */ vg = v->vg; if (vg == NULL) HGOTO_DONE(0); /* compare vgroup name to 'vgname' if it had been set */ if (vg->vgname != NULL) if (!strcmp(vgname, vg->vgname)) HGOTO_DONE((int32)(vg->oref)); /* found the vgroup */ } done: return ret_value; } /* Vfind */ /*------------------------------------------------------------------ NAME VSfind -- looks in the file and returns the ref of the vdata with name vsname DESCRIPTION Finds the vdata with the specified name and returns the ref of the vdata if successful. RETURNS Returns 0 if not found, or on error. Otherwise, returns the vdata's ref (a positive integer). ---------------------------------------------------------------------*/ int32 VSfind(HFILEID f, /* IN: file id */ const char *vsname /* IN: name of vdata to find */) { int32 vsid = -1; vsinstance_t *v = NULL; VDATA *vs = NULL; int32 ret_value = 0; /* check for null vdata name */ if (vsname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* process through Vdatas in file */ while (FAIL != (vsid = VSgetid(f, vsid))) { /* get instance of vdata */ if ((v = vsinst(f, (uint16)vsid)) == NULL) HGOTO_DONE(0); /* get vdata itself and check it */ vs = v->vs; if (vs == NULL) HGOTO_DONE(0); /* compare vdata name to 'vsname' if it had been set */ if (!strcmp(vsname, vs->vsname)) HGOTO_DONE((int32)(vs->oref)); /* found the vdata */ } done: return ret_value; } /* VSfind */ /* ----------------------------------------------------------------- NAME Vfindclass -- looks in the file and returns the ref of the vgroup with class vgclass DESCRIPTION Finds the vgroup with the specified class and returns the ref of the vgroup if successful. RETURNS Returns 0 if not found, or error. Otherwise, returns the vgroup's ref (a positive integer). -----------------------------------------------------------------------*/ int32 Vfindclass(HFILEID f, /* IN: file id */ const char *vgclass /* IN: class of vgroup to find */) { int32 vgid = -1; vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = 0; /* check for null vgroup class */ if (vgclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* process through Vgroups in file */ while (FAIL != (vgid = Vgetid(f, vgid))) { /* get instance of vgroup */ if ((v = vginst(f, (uint16)vgid)) == NULL) HGOTO_DONE(0); /* get vgroup itself and check it */ vg = v->vg; if (vg == NULL) HGOTO_DONE(0); /* Shouldn't we move on to the next vgroup instead of getting out? Same question for the above HGOTO_DONE. -BMR 9/12/2011 */ /* compare vgroup class to 'vgclass' if it had been set */ if (vg->vgclass != NULL) if (!strcmp(vgclass, vg->vgclass)) HGOTO_DONE((int32)(vg->oref)); /* found the vgroup */ } done: return ret_value; } /* Vfindclass */ /*------------------------------------------------------------------ NAME VSfindclass -- looks in the file and returns the ref of the vdata with class vsclass DESCRIPTION Finds the vdata with the specified class and returns the ref of the vdata if successful. RETURNS Returns 0 if not found, or error. Otherwise, returns the vdata's ref (a positive integer). ---------------------------------------------------------------------*/ int32 VSfindclass(HFILEID f, /* IN: file id */ const char *vsclass /* IN: class of vdata to find */) { int32 vsid = -1; vsinstance_t *v = NULL; VDATA *vs = NULL; int32 ret_value = 0; /* check for null vdata class */ if (vsclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* process through Vdatas in file */ while (FAIL != (vsid = VSgetid(f, vsid))) { /* get instance of vdata */ if ((v = vsinst(f, (uint16)vsid)) == NULL) HGOTO_DONE(0); /* error */ /* get vdata itself and check it */ vs = v->vs; if (vs == NULL) HGOTO_DONE(0); /* compare vdata class to 'vsclass' if it had been set */ if (!strcmp(vsclass, vs->vsclass)) HGOTO_DONE((int32)(vs->oref)); /* found the vdata */ } done: return ret_value; } /* VSfindclass */ /* ----------------------------------------------------------------- NAME VSsetblocksize -- sets the block size of the linked-block element. DESCRIPTION Sets the size of the blocks, that are after the first block, of a linked-block element used for storing a vdata. This routine is to be called before the first write to the vdata to change the block size from the default value HDF_APPENDABLE_BLOCK_LEN (4096). Once the linked-block element is created, the block size cannot be changed. RETURNS Returns SUCCEED/FAIL MODIFICATION BMR - added in June 2001 to fix bug# 267 ---------------------------------------------------------------------*/ intn VSsetblocksize(int32 vkey, /* IN: vdata key */ int32 block_size) /* length to be used for each linked-block */ { vsinstance_t *w = NULL; VDATA *vs = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if the given vdata id is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* internal routine handles the actual setting */ if (HLsetblockinfo(vs->aid, block_size, -1) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* VSsetblocksize */ /* ----------------------------------------------------------------- NAME VSsetnumblocks -- sets the number of blocks for a linked-block element. DESCRIPTION Sets the number of blocks of a linked-block element used for storing a vdata. This routine is to be called before the first write to the vdata to change the number of blocks from the default value HDF_APPENDABLE_BLOCK_NUM (16). Once the linked-block element is created, the number of blocks cannot be changed. RETURNS Returns SUCCEED/FAIL MODIFICATION BMR - added in June 2001 to fix bug# 267 ---------------------------------------------------------------------*/ intn VSsetnumblocks(int32 vkey, /* IN: vdata key */ int32 num_blocks) /* number of blocks the element can have */ { vsinstance_t *w = NULL; VDATA *vs = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if the given vdata id is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* internal routine handles the actual setting */ if (HLsetblockinfo(vs->aid, -1, num_blocks) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* VSsetnumblocks */ /* ----------------------------------------------------------------- NAME VSgetblockinfo -- retrieves the block size and the number of blocks of a linked-block element. DESCRIPTION Retrieves the block size and the number of blocks of a linked-block element used for storing a vdata. A NULL can be passed in for unwanted value. RETURNS Returns SUCCEED/FAIL MODIFICATION BMR - added in June 2001 to fix bug# 267 ---------------------------------------------------------------------*/ intn VSgetblockinfo(int32 vkey, /* IN: vdata id */ int32 *block_size, /* OUT: length used for each linked-block */ int32 *num_blocks) /* OUT: number of blocks the element has */ { vsinstance_t *w = NULL; VDATA *vs = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vdata is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* internal routine handles the actual retrieval */ if (HLgetblockinfo(vs->aid, block_size, num_blocks) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* VSgetblockinfo */ /******************************************************************************* NAME VSisinternal -- Determine if a vdata's class name is for internal only RETURNS Returns TRUE (1) if "classname" is one of the class names used for vdata created by the the library and FALSE (0) otherwise. *******************************************************************************/ intn VSisinternal(const char *classname) { int i; intn ret_value = FALSE; /* Check if this class name is one of the internal class name and return TRUE, otherwise, return FALSE */ for (i = 0; i < HDF_NUM_INTERNAL_VDS; i++) { if (strncmp(HDF_INTERNAL_VDS[i], classname, strlen(HDF_INTERNAL_VDS[i])) == 0) { ret_value = TRUE; break; } } return ret_value; } /*------------------------------------------------------------------ NAME VSofclass -- Get vdatas of a given class in a file or in a vgroup. DESCRIPTION VSofclass retrieves n_vds vdatas by their reference numbers via the caller-supplied array refarray. It simply calls VSIgetvdatas to perform the task. The parameter n_vds provides the number of values that the refarray list can hold and can be any positive number smaller than MAX_REF (65535). If n_vds is larger than the actual number of user-created vdatas, then only the actual number of reference numbers will be retrieved. The parameter start_vd indicates the vdata number to start at. - When start_vd is 0, the retrieval starts at the beginning. - When start_vd is between 0 and the number of vdatas that meet the search criteria, VSofclass will start retrieving vdatas from the vdata number start_vd. - When start_vd is greater than the number of vdatas that meet the search criteria, VSofclass will return FAIL. When refarray argument is NULL, VSofclass will return the actual number of vdatas that meet the search criteria without further processing. This allows application to find out the size of the array for proper allocation. RETURNS Returns - 0 if none is found, or - FAIL(-1) if error occurs, or - the number of refs returned in refarray NOTE This function was added originally to assist the hdf4 map writer because Vnattrs does not handle attributes created via VHstoredatam and Vaddtagref. -BMR - 2010/11/21 ---------------------------------------------------------------------*/ intn VSofclass(int32 id, /* IN: file id or vgroup id */ const char *vsclass, /* IN: class to be queried */ uintn start_vd, /* IN: vdata number to start retrieving */ uintn n_vds, /* IN: number of user-created vds to return */ uint16 *refarray /* IN/OUT: ref array to fill */) { intn ret_value = 0; /* clear error stack */ HEclear(); /* Make sure that proper size is passed in for the non-null array */ if (refarray != NULL && n_vds == 0) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = VSIgetvdatas(id, vsclass, start_vd, n_vds, refarray); done: return ret_value; } /* VSofclass */ /******************************************************************************* NAME vscheckclass - (PRIVATE) checks if the given vdata has the specified class or if it is a user-created vdata. DESCRIPTION This is common code to be used in VSIgetvdatas. RETURNS if the vdata has the same class as 'vsclass' or is a user-created vdata, return TRUE, else FALSE. BMR - 2010/11/30 *******************************************************************************/ static intn vscheckclass(int32 id, /* IN: vgroup id or file id */ uint16 vs_ref, /* IN: reference number of vdata being checked */ const char *vsclass /* IN: class name to be queried or NULL for non-internal vdata */) { vsinstance_t *vs_inst = NULL; VDATA *vs = NULL; intn ret_value = FALSE; /* get instance of vdata; if it's not found, continue to look for other vdatas */ if ((vs_inst = vsinst(id, (uint16)vs_ref)) == NULL) HGOTO_DONE(FALSE); /* get vdata itself and check */ vs = vs_inst->vs; if (vs == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Make sure this vdata has a class name before checking */ if (strnlen(vs->vsclass, VSNAMELENMAX + 1) != 0) { /* If user-created vdatas are being checked for, then set flag if this vdata is not internally created by the library */ if (vsclass == NULL) { if (VSisinternal(vs->vsclass) == FALSE) ret_value = TRUE; } /* If a specific class is searched, set flag if this vdata has that same class */ else { size_t len = strlen(_HDF_CHK_TBL_CLASS); /* Explanation of the comparison below: Because a class name that starts with _HDF_CHK_TBL_CLASS may have variable information appended to the end after _HDF_CHK_TBL_CLASS, we need to compare up to the length of _HDF_CHK_TBL_CLASS so that we can get all occurrences of the classes starting with _HDF_CHK_TBL_CLASS. For the non-_HDF_CHK_TBL_CLASS classes, we want to compare the entire array of characters. However, if specific version of _HDF_CHK_TBL_CLASS is requested, this code will need to be modified properly */ /* vsclass != _HDF_CHK_TBL_CLASS..., compare entire string*/ if (strncmp(vsclass, _HDF_CHK_TBL_CLASS, len)) ret_value = strcmp(vsclass, vs->vsclass) ? FALSE : TRUE; else ret_value = strncmp(vsclass, vs->vsclass, len) ? FALSE : TRUE; } } /* This vd doesn't have a class name, so it must be a user-created vd */ else { /* If user-created vdatas are being checked for, then set flag to indicate that this vdata is user-created */ if (vsclass == NULL) ret_value = TRUE; /* If a specific class name is requested, then set flag to indicate that this vd is not what is being searched for */ else ret_value = FALSE; } done: return ret_value; } /* vscheckclass */ /******************************************************************************* NAME VSIgetvdatas -- (PRIVATE) Get user-created vdata in a file or in a vgroup. DESCRIPTION VSIgetvdatas retrieves n_vds vdatas by their reference numbers via the caller-supplied array refarray. When a vgroup id is specified, VSIgetvdatas will only retrieve the vdatas immediately belong to the specified vgroup, and not any sub-vgroups. The parameter n_vds provides the number of values that the refarray list can hold and can be any positive number smaller than MAX_REF (65535). If n_vds is larger than the actual number of user-created vdatas, then only the actual number of reference numbers will be retrieved. The parameter start_vd indicates the vdata number to start at. - When start_vd is 0, the retrieval starts at the beginning. - When start_vd is between 0 and the number of user-created vdatas in the file or the vgroup, VSIgetvdatas will start retrieving vdatas from the vdata number start_vd. - When start_vd is greater than the number of user-created vdatas in the file or the vgroup, VSIgetvdatas will return FAIL. When refarray argument is NULL, VSIgetvdatas will return the actual number of user-created vdatas without further processing. This allows application to find out the size of the array for proper allocation. RETURNS The number of user-created vdatas if successful and FAIL, otherwise. BMR - 2010/07/10 *******************************************************************************/ intn VSIgetvdatas(int32 id, /* IN: file id or vgroup id */ const char *vsclass, /* IN: a specific class or NULL for user-created vdatas */ const uintn start_vd, /* IN: vdata number to start retrieving */ const uintn n_vds, /* IN: number of user-created vds to return */ uint16 *refarray /* IN/OUT: ref array to fill */) { vginstance_t *vg_inst = NULL; group_t id_type = HAatom_group(id); /* id is FIDGROUP or VGIDGROUP */ intn nactual_vds = 0, nfound_vds = 0, ii; VGROUP *vg = NULL; vfile_t *vf = NULL; int32 vs_ref; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Make sure that proper size is passed in for the non-null array */ if (refarray != NULL && n_vds == 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* The given id must be a file ID or a vgroup ID */ if (id_type != FIDGROUP && id_type != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* If given id is a file id */ if (id_type == FIDGROUP) { /* get vdata file record */ if (NULL == (vf = Get_vfile(id))) HGOTO_ERROR(DFE_FNF, FAIL); /* Look through all vdatas, searching for user-created vdatas until no more vdatas in the file or the number of vdatas to be retrieved is reached */ nactual_vds = 0; /* number of user-created vdatas to be retrieved */ nfound_vds = 0; /* number of user-created vdatas */ vs_ref = VSgetid(id, -1); /* get ref number of first vd in the file */ while ((vs_ref != FAIL) /* there are more vdatas */ && ((nactual_vds < n_vds) || (n_vds == 0)) && (nactual_vds <= nfound_vds)) { intn found = FALSE; /* Check if the vdata either has the specified class (when vsclass is !NULL) or is a user-created vdata (when vsclass is NULL) */ found = vscheckclass(id, (uint16)vs_ref, vsclass); /* If this vs met the search criteria, record its ref# according to caller's specifying of where to start and how many to retrieve */ if (found) { /* make sure to count only from vdata number start_vd */ if (nfound_vds >= start_vd) /* if caller requests for reference numbers */ if (refarray != NULL) { refarray[nactual_vds] = (uint16)vs_ref; /* increment the actual number of user-created vds to be retrieved */ nactual_vds++; } /* increment the number of user-created vds */ nfound_vds++; } /* Move forward to the next vdata in the file */ vs_ref = VSgetid(id, vs_ref); } /* while more vdatas in file */ } /* file id is given */ /* check if given id is a vgroup id */ else if (id_type == VGIDGROUP) { /* vgroup id is given */ /* get the number of sub-vdatas belong to this vgroup */ int32 n_elements = Vntagrefs(id); if (n_elements == FAIL) HGOTO_ERROR(DFE_GENAPP, FAIL); /* get instance of vgroup */ if (NULL == (vg_inst = (vginstance_t *)HAatom_object(id))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = vg_inst->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* get vdata file record */ if (NULL == (vf = Get_vfile(vg->f))) HGOTO_ERROR(DFE_FNF, FAIL); /* Go through the tag list vg->tag and find user-created vdatas, until no more sub-vdatas or the number of vdatas to be retrieved is reached */ nactual_vds = 0; /* number of user-created vdatas to be retrieved */ nfound_vds = 0; /* number of user-created vdatas */ for (ii = 0; ii < n_elements && ((nactual_vds < n_vds) || (n_vds == 0)) && nactual_vds <= nfound_vds; ii++) { /* If an element is a vdata, then get access to it */ if (vg->tag[ii] == DFTAG_VH) { intn found = FALSE; found = vscheckclass((int32)vg->f, vg->ref[ii], vsclass); /* If this vdata met the search criteria, record its ref# according to caller's specification of where to start and how many to retrieve */ if (found) { /* Make sure to count only from vdata number start_vd */ if (nfound_vds >= start_vd) /* If caller requests for reference numbers */ if (refarray != NULL) { refarray[nactual_vds] = (uint16)vg->ref[ii]; /* Increment the actual number of vdatas to be retrieved */ nactual_vds++; } /* Increment number of vds that meet the search criteria */ nfound_vds++; } } /* this sub element is a vdata */ } /* for */ } /* vgroup id is given */ /* Flag if start_vd is beyond the number of user-created vdatas */ if (nfound_vds < start_vd) HGOTO_ERROR(DFE_ARGS, FAIL); /* If caller is asking for the number of vdatas only, return the number of user-created vdatas, otherwise, return the number of vdatas that are actually stored in refarray */ if (refarray == NULL) ret_value = nfound_vds - start_vd; else ret_value = nactual_vds; done: return ret_value; } /* VSIgetvdatas */ /******************************************************************************* NAME VSgetvdatas -- Get user-created vdata in a file or in a vgroup. DESCRIPTION VSgetvdatas retrieves n_vds vdatas by their reference numbers via the caller-supplied array refarray. When a vgroup id is specified, VSgetvdatas will only retrieve the vdatas immediately belong to the specified vgroup, and not any sub-vgroups. The parameter n_vds provides the number of values that the refarray list can hold and can be any positive number smaller than MAX_REF (65535). If n_vds is larger than the actual number of user-created vdatas, then only the actual number of reference numbers will be retrieved. The parameter start_vd indicates the vdata number to start at. - When start_vd is 0, the retrieval starts at the beginning. - When start_vd is between 0 and the number of user-created vdatas in the file or the vgroup, VSgetvdatas will start retrieving vdatas from the vdata number start_vd. - When start_vd is greater than the number of user-created vdatas in the file or the vgroup, VSgetvdatas will return FAIL. When refarray argument is NULL, VSgetvdatas will return the actual number of user-created vdatas without further processing. This allows application to find out the size of the array for proper allocation. RETURNS The number of user-created vdatas if successful and FAIL, otherwise. -BMR - 2010/07/10 MODIFICATION - Made the original VSgetvdatas into a private function VSIgetvdatas so that the code can be reused by VSofclass. VSgetvdatas now simply calls VSIgetvdatas. -BMR - 2010/11/17 *******************************************************************************/ intn VSgetvdatas(int32 id, /* IN: file id or vgroup id */ const uintn start_vd, /* IN: vdata number to start retrieving */ const uintn n_vds, /* IN: number of user-created vds to return */ uint16 *refarray /* IN/OUT: ref array to fill */) { int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Make sure that proper size is passed in for the non-null array */ if (refarray != NULL && n_vds == 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Passing NULL in to VSIgetvdatas to get user-created vdatas */ ret_value = VSIgetvdatas(id, NULL, start_vd, n_vds, refarray); done: return ret_value; } /* VSgetvdatas */ /* ------------------------------- Vsetzap -------------------------------- */ /* * Vsetzap: Useless now. Maintained for back compatibility. */ void Vsetzap(void) { } hdf4-hdf4.3.1/hdf/src/vg.h000066400000000000000000000062041503061704500151460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** * * vg.h * * Part of HDF VSet interface * * defines symbols and structures used in all v*.c files * * NOTES: * This include file depends on the basic HDF *.h file hdf.h. * An 'S' in the comment means that that data field is saved in the HDF file. * ******************************************************************************/ #ifndef H4_VG_H #define H4_VG_H /* -------------- H D F V S E T tags ---------------------------- */ /* In what versions were these valid? */ #define OLD_VGDESCTAG 61820 /* tag for a vgroup d */ #define OLD_VSDESCTAG 61821 /* tag for a vdata descriptor */ #define OLD_VSDATATAG 61822 /* tag for actual raw data of a vdata */ /* re-define what new ones are. Don't know why there are two sets but made them conform to what was in 'htags.h' */ #define NEW_VGDESCTAG DFTAG_VG #define NEW_VSDESCTAG DFTAG_VH #define NEW_VSDATATAG DFTAG_VS #define VGDESCTAG NEW_VGDESCTAG #define VSDESCTAG NEW_VSDESCTAG #define VSDATATAG NEW_VSDATATAG #define _HDF_VSPACK 0 #define _HDF_VSUNPACK 1 #define VG_ATTR_SET 0x00000001 /* this vgroup has attribute(s) */ #define VS_ATTR_SET 0x00000001 /* this vdata has attribute(s) */ #define _HDF_VDATA \ -1 /* used in vdata attr interface \ findex to represent the entire vdata */ #define _HDF_ENTIRE_VDATA \ _HDF_VDATA /* if users have already used \ _HDF_ENTIRE_VDATA since 4.1b1 was out */ /* Size of the atom hash table */ #define VATOM_HASH_SIZE 256 /* .................................................................. */ #define VSET_NEW_VERSION 4 /* if attr or other new features are set */ #define VSET_VERSION 3 /* DO NOT CHANGE!! */ #define VSET_OLD_VERSION 2 /* All version <= 2 use old type mappings */ #define VSET_OLD_TYPES VSET_OLD_VERSION /* For backward compatibility */ #endif /* H4_VG_H */ hdf4-hdf4.3.1/hdf/src/vg_priv.h000066400000000000000000000263161503061704500162140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** * * vg_priv.h * * Part of HDF VSet interface * * defines library private symbols and structures used in v*.c files * * NOTES: * This include file depends on the basic HDF *.h files hdf_priv.h and hdf.h. * An 'S' in the comment means that that data field is saved in the HDF file. * ******************************************************************************/ #ifndef H4_VG_PRIV_H #define H4_VG_PRIV_H #include "hdf_priv.h" #include "hfile_priv.h" /* Include file for Threaded, Balanced Binary Tree implementation */ #include "tbbt_priv.h" /* * typedefs for VGROUP, VDATA and VSUBGROUP */ typedef struct vgroup_desc VGROUP; typedef struct vdata_desc VDATA; typedef VDATA VSUBGROUP; /* * ----------------------------------------------------------------- * structures that are part of the VDATA structure * ----------------------------------------------------------------- */ typedef struct symdef_struct { char *name; /* symbol name */ int16 type; /* whether int, char, float etc */ uint16 isize; /* field size as stored in vdata */ uint16 order; /* order of field */ } SYMDEF; typedef struct write_struct { intn n; /* S actual # fields in element */ uint16 ivsize; /* S size of element as stored in vdata */ char name[VSFIELDMAX][FIELDNAMELENMAX + 1]; /* S name of each field */ int16 len[VSFIELDMAX]; /* S length of each fieldname */ int16 type[VSFIELDMAX]; /* S field type */ uint16 off[VSFIELDMAX]; /* S field offset in element in vdata */ uint16 isize[VSFIELDMAX]; /* S internal (HDF) size [incl order] */ uint16 order[VSFIELDMAX]; /* S order of field */ uint16 esize[VSFIELDMAX]; /* external (local machine) size [incl order] */ } VWRITELIST; typedef struct dyn_write_struct { intn n; /* S actual # fields in element */ uint16 ivsize; /* S size of element as stored in vdata */ char **name; /* S name of each field */ uint16 *bptr; /* Pointer to hold the beginning of the buffer */ int16 *type; /* S field type (into bptr buffer) */ uint16 *off; /* S field offset in element in vdata (into bptr buffer) */ uint16 *isize; /* S internal (HDF) size [incl order] (into bptr buffer) */ uint16 *order; /* S order of field (into bptr buffer) */ uint16 *esize; /* external (local machine) size [incl order] (into bptr buffer) */ } DYN_VWRITELIST; /* If there are too many attrs and performance becomes a problem, the vs_attr_t list defined below can be replaced by an array of attr lists, each list contains attrs for 1 field. */ typedef struct dyn_vsattr_struct { int32 findex; /* which field this attr belongs to */ uint16 atag, aref; /* tag/ref pair of the attr */ } vs_attr_t; typedef struct dyn_vgattr_struct { uint16 atag, aref; /* tag/ref pair of the attr */ } vg_attr_t; typedef struct dyn_read_struct { intn n; /* # fields to read */ intn *item; /* index into vftable_struct */ } DYN_VREADLIST; /* * ----------------------------------------------- * V G R O U P definition * ----------------------------------------------- */ struct vgroup_desc { uint16 otag, oref; /* tag-ref of this vgroup */ HFILEID f; /* HDF file id */ uint16 nvelt; /* S no of objects */ intn access; /* 'r' or 'w' */ uint16 *tag; /* S tag of objects */ uint16 *ref; /* S ref of objects */ char *vgname; /* S name of this vgroup */ char *vgclass; /* S class name of this vgroup */ intn marked; /* =1 if new info has been added to vgroup */ intn new_vg; /* =1 if this is a new Vgroup */ uint16 extag, exref; /* expansion tag-ref */ intn msize; /* max size of storage arrays */ uint32 flags; /* indicate which version of VG should be written to the file */ int32 nattrs; /* number of attributes */ vg_attr_t *alist; /* index of new-style attributes, by Vsetattr */ int32 noldattrs; /* number of old-style attributes */ vg_attr_t *old_alist; /* refs of attributes - only used in memory to prevent repeated code in making the list; see Voldnattrs's header for details -BMR 2/4/2011 */ vg_attr_t *all_alist; /* combined list; previous approach, only keep just in case we come back to that approach; will remove it once we decide not to go back 2/16/11 */ int16 version, more; /* version and "more" field */ struct vgroup_desc *next; /* pointer to next node (for free list only) */ }; /* VGROUP */ /* * ----------------------------------------------- * V D A T A definition * ----------------------------------------------- */ struct vdata_desc { uint16 otag, oref; /* tag,ref of this vdata */ HFILEID f; /* HDF file id */ intn access; /* 'r' or 'w' */ char vsname[VSNAMELENMAX + 1]; /* S name of this vdata */ char vsclass[VSNAMELENMAX + 1]; /* S class name of this vdata */ int16 interlace; /* S interlace as in file */ int32 nvertices; /* S #vertices in this vdata */ DYN_VWRITELIST wlist; DYN_VREADLIST rlist; int16 nusym; SYMDEF *usym; intn marked; /* =1 if new info has been added to vdata */ intn new_h_sz; /* =1 if VH size changed, due to new attrs etc. */ intn islinked; /* =1 if vdata is a linked-block in file */ uint16 extag, exref; /* expansion tag-ref */ uint32 flags; /* bit 0 -- has attr bit 1 -- "large field" bit 2 -- "interlaced data is appendable" bit 3-15 -- unused. */ intn nattrs; vs_attr_t *alist; /* attribute list */ int16 version, more; /* version and "more" field */ int32 aid; /* access id - for LINKED blocks */ struct vs_instance_struct *instance; /* ptr to the instance struct for this VData */ struct vdata_desc *next; /* pointer to next node (for free list only) */ }; /* VDATA */ /* .................................................................. */ /* Private data structures. Unlikely to be of interest to applications */ /* * These are just typedefs. Actual vfile_ts are declared static and * are not accessible by applications. However, you may change VFILEMAX * to allow however many files to be opened. * * These are memory-resident copies of the tag-refs of the vgroups * and vdatas for each file that is opened. * */ /* this is a memory copy of a vg tag/ref found in the file */ typedef struct vg_instance_struct { int32 key; /* key to look up with the B-tree routines */ /* needs to be first in the structure */ uintn ref; /* ref # of this vgroup in the file */ /* needs to be second in the structure */ intn nattach; /* # of current attaches to this vgroup */ int32 nentries; /* # of entries in that vgroup initially */ VGROUP *vg; /* points to the vg when it is attached */ struct vg_instance_struct *next; /* pointer to next node (for free list only) */ } vginstance_t; /* this is a memory copy of a vs tag/ref found in the file */ typedef struct vs_instance_struct { int32 key; /* key to look up with the B-tree routines */ /* needs to be first in the structure */ uintn ref; /* ref # of this vdata in the file */ /* needs to be second in the structure */ intn nattach; /* # of current attaches to this vdata */ int32 nvertices; /* # of elements in that vdata initially */ VDATA *vs; /* points to the vdata when it is attached */ struct vs_instance_struct *next; /* pointer to next node (for free list only) */ } vsinstance_t; /* each vfile_t maintains 2 linked lists: one of vgs and one of vdatas * that already exist or are just created for a given file. */ typedef struct vfiledir_struct { int32 f; /* HDF File ID */ int32 vgtabn; /* # of vg entries in vgtab so far */ TBBT_TREE *vgtree; /* Root of VGroup B-Tree */ int32 vstabn; /* # of vs entries in vstab so far */ TBBT_TREE *vstree; /* Root of VSet B-Tree */ intn access; /* the number of active pointers to this file's Vstuff */ } vfile_t; /* .................................................................. */ #ifdef __cplusplus extern "C" { #endif /* * Library private routines for the VSet layer */ VDATA *VSIget_vdata_node(void); void VSIrelease_vdata_node(VDATA *v); intn VSIgetvdatas(int32 id, const char *vsclass, const uintn start_vd, const uintn n_vds, uint16 *refarray); HDFLIBAPI vsinstance_t *VSIget_vsinstance_node(void); HDFLIBAPI void VSIrelease_vsinstance_node(vsinstance_t *vs); VGROUP *VIget_vgroup_node(void); void VIrelease_vgroup_node(VGROUP *v); HDFLIBAPI vginstance_t *VIget_vginstance_node(void); HDFLIBAPI void VIrelease_vginstance_node(vginstance_t *vg); HDFLIBAPI intn VPparse_shutdown(void); HDFLIBAPI vfile_t *Get_vfile(HFILEID f); HDFLIBAPI vsinstance_t *vsinst(HFILEID f, uint16 vsid); HDFLIBAPI vginstance_t *vginst(HFILEID f, uint16 vgid); HDFLIBAPI DYN_VWRITELIST *vswritelist(int32 vskey); HDFLIBAPI intn vpackvg(VGROUP *vg, uint8 buf[], int32 *size); HDFLIBAPI int32 vinsertpair(VGROUP *vg, uint16 tag, uint16 ref); HDFLIBAPI intn vpackvs(VDATA *vs, uint8 buf[], int32 *size); HDFLIBAPI VGROUP *VPgetinfo(HFILEID f, uint16 ref); HDFLIBAPI VDATA *VSPgetinfo(HFILEID f, uint16 ref); HDFLIBAPI int16 map_from_old_types(intn type); HDFLIBAPI void trimendblanks(char *ss); #ifdef __cplusplus } #endif #endif /* H4_VG_PRIV_H */ hdf4-hdf4.3.1/hdf/src/vgf.c000066400000000000000000001142601503061704500153110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*----------------------------------------------------------------------------- FUNCTION NAMING CONVENTION:(For the most part true) --------------------------------------------------- This file contains the HDF-style C stubs for the Vxxx interfaces i.e. both Vgroups and Vdatas. They call the corresponding C-functions for the Vxxx interfaces. The basic routines called by fortran will be of the form vfxxx. -----------------------------------------------------------------------------*/ /* * * vgf.c * Part of the HDF VSet interface. * * C routines (short names) to be called from fortran * * *********************************************************************** */ #include "hdf_priv.h" #include "vg_priv.h" #include "hproto_fortran.h" /* ** remove trailing blanks from a string. input argument is a string ** and *MUST* be a variable and not a constant!! For internal use only!! ** Used only on Crays where the Fortran compiler will pad strings to the ** nearest 8-byte boundary. */ void trimendblanks(char *ss) { int32 i, n; n = (int32)strlen(ss); for (i = n - 1; i >= 0; i--) { if (ss[i] != ' ') { ss[i + 1] = '\0'; break; } } } /* ================================================== */ /* VGROUP routines */ /* ================================================== */ /*----------------------------------------------------------------------------- * Name: dfivopn * Purpose: Fortran stub for dfvopen to call DFvsetopen to open HDF file * Inputs: name: name of file to open * access: access mode - integer with value DFACC_READ etc. * defdds: default number of DDs per header block * namelen: length of name * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers * Invokes: Hopen * Method: Convert filename to C string, call Hopen *---------------------------------------------------------------------------*/ intf ndfivopn(_fcd name, intf *acc_mode, intf *defdds, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, (intn)*namelen); if (!fn) return FAIL; ret = (intf)Vopen(fn, (intn)*acc_mode, (int16)*defdds); free(fn); return ret; } /* end ndfivopn() */ /*----------------------------------------------------------------------------- * Name: dfvclos * Purpose: Call DFvsetclose to close HDF file * Inputs: file_id: handle to HDF file to close * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers * Invokes: Hclose *---------------------------------------------------------------------------*/ intf ndfvclos(intf *file_id) { return Vclose((int32)*file_id); } /* ndfvclos() */ /* ** attach to a vgroup and returns its ptr ** related: Vattach--vatchc--VFATCH */ intf nvatchc(intf *f, intf *vgid, _fcd accesstype) { int32 vkey; char *acc; acc = HDf2cstring(accesstype, 1); if (!acc) return FAIL; vkey = Vattach((int32)*f, *vgid, acc); free(acc); return (intf)vkey; } /* ------------------------------------------------------------------ */ /* ** detach from a vgroup ** related: Vdetach--vdtchc--VFDTCH */ intf nvdtchc(intf *vkey) { return Vdetach(*vkey); } /* ------------------------------------------------------------------ */ /* ** get the name of a vgroup ** related: Vgetname--vgnamc--VFGNAM */ intf nvgnamc(intf *vkey, _fcd vgname) { return Vgetname(*vkey, _fcdtocp(vgname)); } /* VGNAMC */ /* ------------------------------------------------------------------ */ /* ** get the class name of a vgroup ** related: Vgetclass--vgclsc--VFGCLS */ intf nvgclsc(intf *vkey, _fcd vgclass) { return Vgetclass(*vkey, _fcdtocp(vgclass)); } /* VGCLSC */ /* ------------------------------------------------------------------ */ /* ** general inquiry on a vgroup ** related: Vinquire--vinqc--VFINQ */ intf nvinqc(intf *vkey, intf *nentries, _fcd vgname) { return (intf)Vinquire(*vkey, (int32 *)nentries, _fcdtocp(vgname)); } /* VINQC */ /* ------------------------------------------------------------------ */ /* ** delete a vgroup from a file ** related: Vdelete--vdelete-- */ intf nvdelete(intf *f, intf *vkey) { return (intf)Vdelete((int32)*f, (int32)*vkey); } /* nvdelete */ /* ------------------------------------------------------------------ */ /* ** gets the id of the next vgroup in the file ** related: Vgetid--vgidc--VFGID */ intf nvgidc(intf *f, intf *vgid) { return (intf)Vgetid((int32)*f, *vgid); } /* ------------------------------------------------------------------ */ /* ** gets the id of the next entry in the vgroup ** related: Vgetnext--vgnxtc--VFGNXT */ intf nvgnxtc(intf *vkey, intf *id) { return Vgetnext(*vkey, *id); } /* ------------------------------------------------------------------ */ /* ** sets the name of the vgroup ** related: Vsetname--vsnamc--VFSNAM */ intf nvsnamc(intf *vkey, _fcd vgname, intf *vgnamelen) { char *name; intf ret; name = HDf2cstring(vgname, (intn)*vgnamelen); if (!name) return FAIL; /* trimendblanks(name); */ ret = (intf)Vsetname(*vkey, name); free(name); return ret; } /* ------------------------------------------------------------------ */ /* ** sets the class name of the vgroup ** related: Vsetclass--vsclsc--VFSCLS */ intf nvsclsc(intf *vkey, _fcd vgclass, intf *vgclasslen) { char *tclass; intf ret; tclass = HDf2cstring(vgclass, (intn)*vgclasslen); if (!tclass) return FAIL; /* trimendblanks(tclass); */ ret = (intf)Vsetclass(*vkey, tclass); free(tclass); return ret; } /* ------------------------------------------------------------------ */ /* ** inserts a vset object (ie a vgroup or vdata ptr) into the given vgroup ** related: Vinsert--vinsrtc--VFINSRT */ intf nvinsrtc(intf *vkey, intf *vobjptr) { return (intf)Vinsert(*vkey, *vobjptr); } /* ------------------------------------------------------------------ */ /* ** tests if a vset object (having id id) in a vgroup refers to a vgroup ** related: Visvg--visvgc--VFISVG */ intf nvisvgc(intf *vkey, intf *id) { return (intf)Visvg(*vkey, *id); } /* ------------------------------------------------------------------ */ /* ** wrapper for Vstart */ intf nvfstart(intf *f) { return Vstart((int32)*f); } /* nvfstart */ /* ------------------------------------------------------------------ */ /* ** wrapper for Vend */ intf nvfend(intf *f) { return (intf)Vend((int32)*f); } /* nvfend */ /* ------------------------------------------------------------------ */ /* ** tests if an id in a vgroup refers to a vdata ** related: Visvs--visvsc--VFISVS */ intf nvisvsc(intf *vkey, intf *id) { return (intf)Visvs(*vkey, *id); } /* ================================================== */ /* VDATA routines */ /* ================================================== */ /* ** attach to a vdata and returns its ptr ** related: VSattach--vsatchc--VFATCH */ intf nvsatchc(intf *f, intf *vsid, _fcd accesstype) { /* need not HDf2cstring since only first char is accessed. */ return VSattach((int32)*f, *vsid, _fcdtocp(accesstype)); } /* ------------------------------------------------------------------ */ /* ** detach from a vdata ** related: VSdetach--vsdtchc--VFDTCH */ intf nvsdtchc(intf *vkey) { return VSdetach(*vkey); } /* ------------------------------------------------------------------ */ /* ** get the ref # of a vdata ** related: VSQueryref--vsqref-- */ intf nvsqref(intf *vkey) { return (intf)VSQueryref((int32)*vkey); } /* ------------------------------------------------------------------ */ /* ** get the tag # of a vdata ** related: VSQuerytag--vsqtag-- */ intf nvsqtag(intf *vkey) { return (intf)VSQuerytag((int32)*vkey); } /* ----------------------------------------------------------------- */ /* ** get the version # of a vdata ** related: VSgetversion--vsgver-- */ intf nvsgver(intf *vkey) { return (intf)VSgetversion((int32)*vkey); } /* ------------------------------------------------------------------ */ /* ** seeks to a given element position in a vadata ** related: VSseek--vsseekc--VSFSEEK */ intf nvsseekc(intf *vkey, intf *eltpos) { return (intf)VSseek(*vkey, *eltpos); } /* ------------------------------------------------------------------ */ /* ** gets the name of a vdata ** related: VSgetname--vsgnamc--VSFGNAM */ intf nvsgnamc(intf *vkey, _fcd vsname, intf *vsnamelen) { char *tvsname = NULL; intn status; /* Allocate space for fortran strings */ tvsname = (char *)malloc(*vsnamelen + 1); if (!tvsname) HRETURN_ERROR(DFE_NOSPACE, FAIL); status = VSgetname(*vkey, tvsname); /* convert C-string results back to Fortran strings */ HDpackFstring(tvsname, _fcdtocp(vsname), (intn)*vsnamelen); free(tvsname); return status; } /* VSGNAMC */ /* ------------------------------------------------------------------ */ /* ** get the class name of a vdata ** related: VSgetclass--vsgclsc--VSFGCLS */ intf nvsgclsc(intf *vkey, _fcd vsclass, intf *vsclasslen) { char *tvsclass = NULL; intn status; /* Allocate space for fortran strings */ tvsclass = (char *)malloc(*vsclasslen + 1); if (!tvsclass) HRETURN_ERROR(DFE_NOSPACE, FAIL); status = VSgetclass(*vkey, tvsclass); /* convert C-string results back to Fortran strings */ HDpackFstring(tvsclass, _fcdtocp(vsclass), (intn)*vsclasslen); free(tvsclass); return status; } /* VSGCLSC */ /* ------------------------------------------------------------------ */ /* ** general inquiry on a vdata ** related: VSinquire--vsinqc--VSFINQ */ intf nvsinqc(intf *vkey, intf *nelt, intf *interlace, _fcd fields, intf *eltsize, _fcd vsname, intf *fieldslen, intf *vsnamelen) { char *tfields = NULL; char *tvsname = NULL; intn status; int32 tnelt, til, teltsz; /* Allocate space for fortran strings */ tfields = (char *)malloc(*fieldslen + 1); if (!tfields) HRETURN_ERROR(DFE_NOSPACE, FAIL); tvsname = (char *)malloc(*vsnamelen + 1); if (!tvsname) { free(tfields); HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* the following contains error for nelt, interlace and eltsize */ /* if int32 and intf are different in size. */ status = VSinquire(*vkey, &tnelt, &til, tfields, &teltsz, tvsname); if (status != FAIL) { *nelt = tnelt; *interlace = til; *eltsize = teltsz; /* convert C-string results back to Fortran strings */ HDpackFstring(tfields, _fcdtocp(fields), (intn)*fieldslen); HDpackFstring(tvsname, _fcdtocp(vsname), (intn)*vsnamelen); } free(tfields); free(tvsname); return status; } /* VSINQC */ /* ------------------------------------------------------------------ */ /* ** tests if given fields exist in the vdata ** related: VSfexist--vsfexc--VSFEX */ intf nvsfexc(intf *vkey, _fcd fields, intf *fieldslen) { intf ret; char *flds; flds = HDf2cstring(fields, (intn)*fieldslen); if (!flds) return FAIL; /* trimendblanks(flds); */ ret = (int32)VSfexist(*vkey, flds); free(flds); return ret; } /* ------------------------------------------------------------------ */ /* ** looks for a named Vdata in a file ** related: VSfind--vsfndc--VSFFND */ intf nvsfndc(intf *f, _fcd name, intf *namelen) { intf ret; char *cname; cname = HDf2cstring(name, (intn)*namelen); if (!cname) return FAIL; /* trimendblanks(flds); */ ret = (intf)VSfind(*f, cname); free(cname); return ret; } /* ------------------------------------------------------------------ */ /* ** gets the id of the next vdata from the file ** related: VSgetid--vsgidc--VSFGID */ intf nvsgidc(intf *f, intf *vsid) { return (intf)VSgetid(*f, *vsid); } /* ------------------------------------------------------------------ */ /* ** removes the vdata with id from the file ** related: VSdelete--vsdltc--VSFDLTE */ intf nvsdltc(intf *f, intf *vsid) { return (intf)VSdelete(*f, *vsid); } /* ------------------------------------------------------------------ */ /* ** make it possible to append unlimitedly to an existing vdata ** related: VSappendable--vsapp-- */ intf nvsapp(intf *vkey, intf *blk) { return (intf)VSappendable((int32)*vkey, (int32)*blk); } /* ------------------------------------------------------------------ */ /* ** sets the name of a vdata ** related: VSsetname--vssnamc--VSFSNAM */ intf nvssnamc(intf *vkey, _fcd vsname, intf *vsnamelen) { char *name; intf ret; name = HDf2cstring(vsname, (intn)*vsnamelen); if (!name) return FAIL; /* trimendblanks (name); */ ret = (intf)VSsetname(*vkey, name); free(name); return ret; } /* ------------------------------------------------------------------ */ /* ** sets the class name of the vdata ** related: VSsetclass--vssclsc--VSFSCLS */ intf nvssclsc(intf *vkey, _fcd vsclass, intf *vsclasslen) { char *tclass; intf ret; tclass = HDf2cstring(vsclass, (intn)*vsclasslen); if (!tclass) return FAIL; /* trimendblanks(tclass); */ ret = (intf)VSsetclass(*vkey, tclass); free(tclass); return ret; } /* ------------------------------------------------------------------ */ /* ** sets the fields in a vdata for reading or writing ** related: VSsetfields--vssfldc--VSFSFLD */ intf nvssfldc(intf *vkey, _fcd fields, intf *fieldslen) { char *flds; intf ret; flds = HDf2cstring(fields, (intn)*fieldslen); if (!flds) return FAIL; /* trimendblanks(flds); */ ret = (int32)VSsetfields(*vkey, flds); free(flds); return ret; } /* ------------------------------------------------------------------ */ /* ** sets the file interlace of a vdata ** related: VSsetinterlace--vssintc--VSFSINT */ intf nvssintc(intf *vkey, intf *interlace) { return (intf)VSsetinterlace(*vkey, *interlace); } /* ------------------------------------------------------------------ */ /* ** defines a new field to be used in the vdata ** related: VSfdefine--vsfdefc--VSFFDEF */ intf nvsfdefc(intf *vkey, _fcd field, intf *localtype, intf *order, intf *fieldlen) { intf ret; char *fld; fld = HDf2cstring(field, (intn)*fieldlen); if (!fld) return FAIL; /* trimendblanks(fld); */ ret = (int32)VSfdefine(*vkey, fld, *localtype, *order); free(fld); return ret; } /*----------------------------------------------------------------------------- * Name: vssextfc * Purpose: store data of a Vdata in an external file * Inputs: id: vdata id * name: name of external file * offset: Number of bytes from the beginning of the * external file to where the data starts * namelen: length of name * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nvssextfc(intf *id, _fcd name, intf *offset, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, *namelen); if (!fn) return FAIL; ret = (intf)VSsetexternalfile(*id, fn, *offset); free(fn); return ret; } /* ------------------------------------------------------------------ */ /* ** returns the number of fields in a vdata ** related: VFnfields--vfnflds-- */ intf nvfnflds(intf *vkey) { return (intf)VFnfields((int32)*vkey); } /* ------------------------------------------------------------------ */ /* ** get the name of a given field in a vdata ** related: VFfieldname--vffname--vffnamec */ intf nvffnamec(intf *vkey, intf *index, _fcd fname, intf *len) { char *fieldname = NULL; if ((fieldname = VFfieldname((int32)*vkey, (int32)*index)) != NULL) { /* strcpy(_fcdtocp(fname),fieldname);*/ HDpackFstring(fieldname, _fcdtocp(fname), (intn)*len); /* free(fieldname); */ return SUCCEED; } else return FAIL; } /* vffnamec */ /* ------------------------------------------------------------------ */ /* ** get the number-type of a given field in a vdata ** related: VFfieldtype--vfftype-- */ intf nvfftype(intf *vkey, intf *index) { return (intf)VFfieldtype((int32)*vkey, (int32)*index); } /* vfftype */ /* ------------------------------------------------------------------ */ /* ** get the internal (in memory) size of a given field in a vdata ** related: VFfieldisize--vffisiz-- */ intf nvffisiz(intf *vkey, intf *index) { return (intf)VFfieldisize((int32)*vkey, (int32)*index); } /* vffisiz */ /* ------------------------------------------------------------------ */ /* ** get the external (on disk) size of a given field in a vdata ** related: VFfieldesize--vffesiz-- */ intf nvffesiz(intf *vkey, intf *index) { return (intf)VFfieldesize((int32)*vkey, (int32)*index); } /* vffesiz */ /* ------------------------------------------------------------------ */ /* ** get the order of a given field in a vdata ** related: VFfieldorder--vffordr-- */ intf nvffordr(intf *vkey, intf *index) { return (intf)VFfieldorder((int32)*vkey, (int32)*index); } /* vffordr */ /* ------------------------------------------------------------------ */ /* ** reads records from a vdata into a char buffer ** related: VSread--vsfrdc */ intf nvsfrdc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace) { return (intf)VSread(*vkey, (uint8 *)_fcdtocp(cbuf), *nelt, *interlace); } /* ------------------------------------------------------------------ */ /* ** reads records from a vdata into integer buffer ** related: VSread--vsfrd */ intf nvsfrd(intf *vkey, intf *buf, intf *nelt, intf *interlace) { return (intf)VSread(*vkey, (uint8 *)buf, *nelt, *interlace); } /* ------------------------------------------------------------------ */ /* ** reads from a vdata ** related: VSread--vsreadc--VSFREAD */ intf nvsreadc(intf *vkey, uint8 *buf, intf *nelt, intf *interlace) { return (intf)VSread(*vkey, buf, *nelt, *interlace); } /* ------------------------------------------------------------------ */ /* ** writes to a vdata from a char buffer ** related: VSwrite--vsfwrtc */ intf nvsfwrtc(intf *vkey, _fcd cbuf, intf *nelt, intf *interlace) { return (intf)VSwrite(*vkey, (uint8 *)_fcdtocp(cbuf), *nelt, *interlace); } /* ------------------------------------------------------------------ */ /* ** writes to a vdata from an integer buffer ** related: VSwrite--vsfwrt */ intf nvsfwrt(intf *vkey, intf *buf, intf *nelt, intf *interlace) { return (intf)VSwrite(*vkey, (uint8 *)buf, *nelt, *interlace); } /* ------------------------------------------------------------------ */ /* ** writes to a vdata ** related: VSwrite--vswritc--VSFWRIT */ intf nvswritc(intf *vkey, uint8 *buf, intf *nelt, intf *interlace) { return (intf)VSwrite(*vkey, buf, *nelt, *interlace); } /* ======================================== */ /* miscellaneous VDATA inquiry routines */ /* ======================================== */ /* undocumented */ /* ------------------------------------------------------------------ */ /* ** gets the interlace of the vdata ** related: VSgetinterlace--vsgintc--VSFGINT */ intf nvsgintc(intf *vkey) { return (intf)VSgetinterlace(*vkey); } /* ------------------------------------------------------------------ */ /* ** gets the number of elements in the vdata ** related: VSelts--vseltsc--VSFELTS */ intf nvseltsc(intf *vkey) { return (intf)VSelts(*vkey); } /* ------------------------------------------------------------------ */ /* ** gets the fields in the vdata ** related: VSgetfields--vsgfldc--VSFGFLD */ intf nvsgfldc(intf *vkey, _fcd fields) { return (intf)VSgetfields(*vkey, _fcdtocp(fields)); } /* VSGFLDC */ /* ------------------------------------------------------------------ */ /* ** determines the (machine) size of the given fields ** related: VSsizeof--vssizc--VSFSIZ */ intf nvssizc(intf *vkey, _fcd fields, intf *fieldslen) { char *flds; intf ret; flds = HDf2cstring(fields, (intn)*fieldslen); if (!flds) return FAIL; /* trimendblanks(flds); */ ret = VSsizeof(*vkey, flds); free(flds); return ret; } /* ------------------------------------------------------------------ */ /* ** determines the no of entries in a vgroup ** related: Ventries--ventsc--VFENTS */ intf nventsc(intf *f, intf *vgid) { return (intf)Ventries(*f, *vgid); } /* ------------------------------------------------------------------ */ /* ** gets the refs of all lone vgroups in the file ** related: Vlone--vlonec--VFLONE */ intf nvlonec(intf *f, intf *idarray, intf *asize) { return (intf)Vlone(*f, (int32 *)idarray, (int32)*asize); } /* ------------------------------------------------------------------ */ /* ** gets the refs of all lone vdatas in the file ** related: VSlone--vslonec--VSFLONE */ intf nvslonec(intf *f, intf *idarray, intf *asize) { return VSlone(*f, (int32 *)idarray, (int32)*asize); } /* ------------------------------------------------------------------ */ /* ** gets the ref # of a vgroup for a given name ** related: Vfind--vfindc--VFIND */ intf nvfindc(intf *f, _fcd name, intf *namelen) { char *tmp_name; intf ret; tmp_name = HDf2cstring(name, (intn)*namelen); if (!tmp_name) return FAIL; ret = (intf)Vfind((int32)*f, tmp_name); free(tmp_name); return ret; } /* end nvfindc() */ /* ------------------------------------------------------------------ */ /* ** gets the ref # of a vgroup for a given class ** related: Vfindclass--vfclassc--VFNDCLS */ intf nvfndclsc(intf *f, _fcd vgclass, intf *classlen) { char *t_class; intf ret; t_class = HDf2cstring(vgclass, (intn)*classlen); if (!t_class) return FAIL; ret = (intf)Vfindclass((int32)*f, t_class); free(t_class); return ret; } /* end nvfndclsc() */ /* ** ================================================================== ** HIGH-LEVEL VSET ROUTINES --- VHxxxxx() ** ================================================================== */ /*---------------------------------------------------------- ** store a simple dataset in a vdata ** related: VHstoredata--vhsdc--vhfsd */ intf nvhsdc(intf *f, _fcd field, uint8 *buf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *fieldlen, intf *vsnamelen, intf *vsclasslen) { char *fld, *name, *tclass; intf ret_val; fld = HDf2cstring(field, (intn)*fieldlen); if (!fld) return FAIL; name = HDf2cstring(vsname, (intn)*vsnamelen); if (!name) { free(fld); return FAIL; } tclass = HDf2cstring(vsclass, (intn)*vsclasslen); if (!tclass) { free(fld); free(name); return FAIL; } ret_val = (intf)VHstoredata(*f, fld, buf, *n, *datatype, name, tclass); free(fld); free(name); free(tclass); return ret_val; } /*---------------------------------------------------------- ** store a simple char dataset in a vdata ** related: VHstoredata--vhscdc--vhfscd */ intf nvhscdc(intf *f, _fcd field, _fcd cbuf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *fieldlen, intf *vsnamelen, intf *vsclasslen) { if ((*datatype != DFNT_CHAR) && (*datatype != DFNT_UCHAR)) return FAIL; return nvhsdc(f, field, (uint8 *)_fcdtocp(cbuf), n, datatype, vsname, vsclass, fieldlen, vsnamelen, vsclasslen); } /* ------------------------------------------------------------------ */ /* ** store an aggregate char dataset in a vdata ** related: VHstoredatam--vhscdmc--vhfscdm */ intf nvhscdmc(intf *f, _fcd field, _fcd cbuf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *order, intf *fieldlen, intf *vsnamelen, intf *vsclasslen) { if ((*datatype != DFNT_CHAR) && (*datatype != DFNT_UCHAR)) return FAIL; return nvhsdmc(f, field, (uint8 *)_fcdtocp(cbuf), n, datatype, vsname, vsclass, order, fieldlen, vsnamelen, vsclasslen); } /* ------------------------------------------------------------------ */ /* ** store an aggregate dataset in a vdata ** related: VHstoredatam--vhsdmc--vhfsdm */ intf nvhsdmc(intf *f, _fcd field, uint8 *buf, intf *n, intf *datatype, _fcd vsname, _fcd vsclass, intf *order, intf *fieldlen, intf *vsnamelen, intf *vsclasslen) { char *fld, *name, *tclass; intf ret_val; fld = HDf2cstring(field, (intn)*fieldlen); if (!fld) return FAIL; name = HDf2cstring(vsname, (intn)*vsnamelen); if (!name) { free(fld); return FAIL; } tclass = HDf2cstring(vsclass, (intn)*vsclasslen); if (!tclass) { free(fld); free(name); return FAIL; } ret_val = (intf)VHstoredatam(*f, fld, buf, *n, *datatype, name, tclass, *order); free(fld); free(name); free(tclass); return ret_val; } /* ------------------------------------------------------------------ */ /* ** make a new vgroup given several tag/ref pairs ** related: VHmakegroup--vhmkgpc--vhfmkgp */ intf nvhmkgpc(intf *f, intf *tagarray, intf *refarray, intf *n, _fcd vgname, _fcd vgclass, intf *vgnamelen, intf *vgclasslen) { char *gname, *gclass; intf ret_val; gname = HDf2cstring(vgname, (intn)*vgnamelen); if (!gname) return FAIL; gclass = HDf2cstring(vgclass, (intn)*vgclasslen); if (!gclass) { free(gname); return FAIL; } ret_val = (intf)VHmakegroup(*f, (int32 *)tagarray, (int32 *)refarray, *n, gname, gclass); free(gname); free(gclass); return ret_val; } /* ================================================================== */ /* ** locate a field in a vdata that belongs to this VGROUP ** related: Vflocate--vffloc--vflocc */ intf nvflocc(intf *vkey, _fcd field, intf *fieldlen) { char *fld; intf ret; fld = HDf2cstring(field, (intn)*fieldlen); if (!fld) return FAIL; /* trimendblanks(fld); */ ret = (int32)Vflocate(*vkey, fld); free(fld); return ret; } /* ------------------------------------------------------------------ */ /* ** tests if a tag/ref pair is in a vgroup. ** related: Vinqtagref--vinqtrc--vfinqtr */ intf nvinqtrc(intf *vkey, intf *tag, intf *ref) { return (intf)Vinqtagref(*vkey, *tag, *ref); } /* ------------------------------------------------------------------ */ /* ** gets the number of tag/refs stored in a vgroup ** related: Vntagrefs--vntrc--VFNTR */ intf nvntrc(intf *vkey) { return (intf)Vntagrefs(*vkey); } /* ------------------------------------------------------------------ */ /* ** Returns the number of tags of a given type in a vgroup ** related: Vnrefs--vnrefs-- */ intf nvnrefs(intf *vkey, intf *tag) { return (intf)Vnrefs((int32)*vkey, (int32)*tag); } /* end nvnrefs() */ /* ------------------------------------------------------------------ */ /* ** Return the ref of this vgroup ** related: VQueryref--vqref-- */ intf nvqref(intf *vkey) { return (intf)VQueryref((int32)*vkey); } /* end nvqref() */ /* ------------------------------------------------------------------ */ /* ** Return the ref of this vgroup ** related: VQuerytag--vqtag-- */ intf nvqtag(intf *vkey) { return (intf)VQuerytag((int32)*vkey); } /* end nvqtag() */ /* ------------------------------------------------------------------ */ /* ** returns all the tag/ref pairs in a vgroup ** related: Vgettagrefs--vgttrsc--vfgttrs */ intf nvgttrsc(intf *vkey, intf *tagarray, intf *refarray, intf *n) { return (intf)Vgettagrefs(*vkey, (int32 *)tagarray, (int32 *)refarray, *n); } /* ------------------------------------------------------------------ */ /* ** returns a specified tag/ref pair in a vgroup ** related: Vgettagref--vgttrc--vfgttr */ intf nvgttrc(intf *vkey, intf *which, intf *tag, intf *ref) { return (intf)Vgettagref(*vkey, *which, (int32 *)tag, (int32 *)ref); } /* ------------------------------------------------------------------ */ /* ** tests if a tag/ref pair is in a vgroup. ** related: Vinqtagref--vinqtrc--vfinqtr */ intf nvadtrc(intf *vkey, intf *tag, intf *ref) { return (intf)Vaddtagref(*vkey, *tag, *ref); } /* ------------------------------------------------------------------ */ /* ** checks the number of elements in a vgroup ** related: VSQuerycount--vsqfnelt */ intf nvsqfnelt(intf *vkey, intf *nelt) { int32 ret_nelt = 0; intn stat; stat = VSQuerycount((int32)*vkey, &ret_nelt); *nelt = (intf)ret_nelt; return (intf)stat; } /* ------------------------------------------------------------------ */ /* ** checks the interlace of a vgroup ** related: VSQueryinterlace--vsqfintr */ intf nvsqfintr(intf *vkey, intf *interlace) { int32 ret_inter = 0; intn stat; stat = VSQueryinterlace((int32)*vkey, &ret_inter); *interlace = (intf)ret_inter; return (intf)stat; } /* ------------------------------------------------------------------ */ /* ** gets the names of the fields of a vgroup ** related: VSQueryfields--vsqfflds */ intf nvsqfldsc(intf *vkey, _fcd fields, intf *fieldslen) { char *fld; intf ret; fld = HDf2cstring(fields, (intn)*fieldslen); if (!fld) return FAIL; ret = (intf)VSQueryfields((int32)*vkey, fld); free(fld); return ret; } /* ------------------------------------------------------------------ */ /* ** checks the size of an element of a vgroup ** related: VSQueryvsize--vsqfvsiz */ intf nvsqfvsiz(intf *vkey, intf *size) { int32 ret_size = 0; intn stat; stat = VSQueryvsize((int32)*vkey, &ret_size); *size = (intf)ret_size; return (intf)stat; } /* ------------------------------------------------------------------ */ /* ** gets the names of a vgroup ** related: VSQueryname--vsqfname */ intf nvsqnamec(intf *vkey, _fcd name, intf *namelen) { char *nam; intf ret; nam = HDf2cstring(name, (intn)*namelen); if (!nam) return FAIL; ret = (intf)VSQueryname((int32)*vkey, nam); free(nam); return ret; } /* ------------------------------------------------------------------ */ intf nvsfccpk(intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz, intf *nrecs, _fcd pckfld, _fcd fldbuf, intf *buflds_len, intf *fld_len) { char *flds_in_buf; char *afield; intf ret; void *fldbufpt[1]; flds_in_buf = HDf2cstring(buflds, (intn)*buflds_len); if (!flds_in_buf) { return FAIL; } afield = HDf2cstring(pckfld, (intn)*fld_len); if (!afield) { free(flds_in_buf); return FAIL; } if (*flds_in_buf == '\0') { free(flds_in_buf); flds_in_buf = NULL; } if (*afield == '\0') { free(afield); afield = NULL; } fldbufpt[0] = _fcdtocp(fldbuf); ret = VSfpack((int32)*vs, (intn)*packtype, flds_in_buf, (void *)buf, (intn)*bufsz, (intn)*nrecs, afield, fldbufpt); free(flds_in_buf); free(afield); return ret; } /* ------------------------------------------------------------------ */ intf nvsfncpk(intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz, intf *nrecs, _fcd pckfld, intf *fldbuf, intf *buflds_len, intf *fld_len) { char *flds_in_buf; char *afield; intf ret; void *fldbufpt[1]; flds_in_buf = HDf2cstring(buflds, (intn)*buflds_len); if (!flds_in_buf) { return FAIL; } afield = HDf2cstring(pckfld, (intn)*fld_len); if (!afield) { free(flds_in_buf); return FAIL; } if (*flds_in_buf == '\0') { free(flds_in_buf); flds_in_buf = NULL; } if (*afield == '\0') { free(afield); afield = NULL; } fldbufpt[0] = fldbuf; ret = VSfpack((int32)*vs, (intn)*packtype, flds_in_buf, (void *)buf, (intn)*bufsz, (intn)*nrecs, afield, fldbufpt); free(flds_in_buf); free(afield); return ret; } /* ** C-stub for deleting a tag/ref pair in a vgroup. ** related: called by vfdtr() and calls Vdeletetagref(), ** */ intf nvdtrc(intf *vkey, intf *tag, intf *ref) { return (intf)Vdeletetagref(*vkey, *tag, *ref); } /*------------------------------------------------------------------------ * Name: vscfcls * Purpose: calls VSfindclass * Inputs: id - file ID * name - class of vdata to find * Returns: returns 0 if not found, or error. Otherwise, returns * the vdata's ref number (a positive integer) * Related functions: vffcls, VSfindclass * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvscfcls(intf *id, _fcd name, intf *namelen) { intf fi_id; intf ret; char *class_name; fi_id = *id; class_name = HDf2cstring(name, (intn)*namelen); if (!class_name) return FAIL; ret = VSfindclass(fi_id, class_name); free(class_name); return ret; } /*------------------------------------------------------------------------ * Name: vscsetblsz * Purpose: calls VSsetblocksize * Inputs: id - vdata identifier * block_size - size of the block * Returns: 0 if succeeds, -1 if fails * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvscsetblsz(intf *id, intf *block_size) { intf ret = -1; intn c_ret; c_ret = VSsetblocksize(*id, *block_size); if (c_ret == 0) ret = 0; return ret; } /*------------------------------------------------------------------------ * Name: vscsetnmbl * Purpose: calls VSsetnumblocks * Inputs: id - vdata identifier * num_blocks - number of blocks * Returns: 0 if succeeds, -1 if fails * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvscsetnmbl(intf *id, intf *num_blocks) { intf ret; intn c_ret; c_ret = VSsetnumblocks(*id, *num_blocks); if (c_ret == 0) ret = 0; return ret; } /*------------------------------------------------------------------------ * Name: vscgblinfo * Purpose: calls VSgetblockinfo * Inputs: id - vdata identifier * block_size - size of the block * num_blocks - number of blocks * Returns: 0 if succeeds, -1 if fails * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvscgblinfo(intf *id, intf *block_size, intf *num_blocks) { intf ret = -1; intn c_ret; int32 c_block_size; int32 c_num_blocks; c_ret = VSgetblockinfo(*id, &c_block_size, &c_num_blocks); if (c_ret == 0) { *block_size = c_block_size; *num_blocks = c_num_blocks; ret = 0; } return ret; } /*------------------------------------------------------------------------ * Name: vcgvgrp * Purpose: calls Vgetvgroups * Inputs: id - vdata identifier * start_vg - size of the block * vg_count - number of blocks * Outputs: refarray - Array to hold reference numbers * of retrieved vgroups * Returns: 0 if succeeds, -1 if fails * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvcgvgrp(intf *id, intf *start_vg, intf *vg_count, intf *refarray) { intf ret = -1; uintn ii; uint16 *c_refarray; if (*vg_count == -1) { ret = (intf)Vgetvgroups((int32)*id, (uintn)*start_vg, 0, NULL); } else { c_refarray = (uint16 *)malloc(sizeof(uint16) * (uintn)*vg_count); ret = (intf)Vgetvgroups((int32)*id, (uintn)*start_vg, (uintn)*vg_count, c_refarray); /* copy C refarray to the fortran refarray, converting uint16 to intf type */ for (ii = 0; ii < (uintn)*vg_count; ii++) refarray[ii] = (intf)c_refarray[ii]; free(c_refarray); } return ret; } /*------------------------------------------------------------------------ * Name: vscgvdatas * Purpose: calls VSgetvdatas * Inputs: id - File identifier returned by Hopen or vgroup * identifier returned by Vattach * start_vd - Vdata number to start retrieving at * vd_count - Number of vdatas to be retrieved * Outputs: refarray - Array to hold reference numbers of * retrieved vdatas * Returns: 0 if succeeds, -1 if fails * Users: HDF Fortran programmers ---------------------------------------------------------------------*/ intf nvscgvdatas(intf *id, intf *start_vd, intf *vd_count, intf *refarray) { intf ret = -1; uintn ii; uint16 *c_refarray; if (*vd_count == -1) { ret = (intf)VSgetvdatas((int32)*id, (uintn)*start_vd, 0, NULL); } else { c_refarray = (uint16 *)malloc(sizeof(uint16) * (uintn)*vd_count); ret = (intf)VSgetvdatas((int32)*id, (uintn)*start_vd, (uintn)*vd_count, c_refarray); /* copy C refarray to the fortran refarray, converting uint16 to intf type */ for (ii = 0; ii < (uintn)*vd_count; ii++) refarray[ii] = (intf)c_refarray[ii]; free(c_refarray); } return ret; } hdf4-hdf4.3.1/hdf/src/vgff.f000066400000000000000000000666341503061704500154750ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C c ************************************************************************** c * c * vgFf.f c * Part of the HDF VSet interface. c * c * Contains fortran routines callable from fortran programs. c * c ************************************************************************** c ============================================================ c VGROUP ROUTINES c ============================================================ c attaches to a vgroup c related: Vattach--vatchc--VFATCH integer function vfatch(f, vgid, accesstype) integer f, vgid character*1 accesstype integer vatchc vfatch = vatchc (f, vgid, accesstype) end c ------------------------------------------------------------ c detaches from a vgroup c related: Vdetach--vdtchc--VFDTCH integer function vfdtch (vg) integer vg integer vdtchc vfdtch = vdtchc (vg) end c ------------------------------------------------------------ c general inquiry on a vgroup c related: Vgetname--vgnamc--VFGNAM integer function vfgnam (vg, vgname) integer vg character*(*) vgname integer vgnamc vfgnam = vgnamc (vg, vgname) end c ------------------------------------------------------------ c get the class name of a vgroup c related: Vgetclass--vgclsc--VFGCLS integer function vfgcls (vg, vgclass) integer vg character*(*) vgclass integer vgclsc vfgcls = vgclsc (vg, vgclass) end c ------------------------------------------------------------ c general inquiry on a vgroup c related: Vinquire--vinqc--VFINQ integer function vfinq (vg, nentries, vgname) integer vg, nentries character*(*) vgname integer vinqc vfinq = vinqc (vg, nentries, vgname) end c ------------------------------------------------------------ c gets the id of the next vgroup in the file c related: Vgetid--vgidc--VFGID integer function vfgid (f, vgid) integer f, vgid integer vgidc vfgid = vgidc (f, vgid) end c ------------------------------------------------------------ c gets the id of the next entry in the vgroup c related: Vgetnext--vgnxtc--VFGNXT integer function vfgnxt (vg, id) integer vg, id integer vgnxtc vfgnxt = vgnxtc (vg, id) end c ------------------------------------------------------------ c sets the name of the vgroup c related: Vsetname--vsnamc--VFSNAM integer function vfsnam (vg, vgname) integer vg character*(*) vgname integer vsnamc vfsnam = vsnamc (vg, vgname, len(vgname)) end c ------------------------------------------------------------ c sets the class name of the vgroup c related: Vsetclass--vsclsc--VFSCLS integer function vfscls (vg, vgclass) integer vg character*(*) vgclass integer vsclsc vfscls = vsclsc (vg, vgclass, len(vgclass)) end c ------------------------------------------------------------ c inserts a vset entity (ie vgroup or vdata) into the given vgroup c related: Vinsert--vinsrtc--VFINSRT integer function vfinsrt (vg, velt) integer vg, velt integer vinsrtc vfinsrt = vinsrtc (vg, velt) end c ------------------------------------------------------------ c tests if an id in a vgroup is a vgroup c related: Visvg--visvgc--vfisvg integer function vfisvg (vg, id) integer vg, id integer visvgc vfisvg = visvgc (vg, id) end c ------------------------------------------------------------ c tests if an id in a vgroup is a vdata c related: Visvs--visvsc--vfisvs integer function vfisvs (vg, id) integer vg, id integer visvsc vfisvs = visvsc (vg, id) end c ============================================================ c VDATA ROUTINES c ============================================================ c attach to a vdata c related: VSattach--vsatchc--vfatch integer function vsfatch (f, vsid, accesstype) integer f, vsid character*1 accesstype integer vsatchc vsfatch = vsatchc (f, vsid, accesstype) end c ------------------------------------------------------------ c detach from a vdata c related: VSdetach--vsdtchc--vfdtch integer function vsfdtch (vs) integer vs integer vsdtchc vsfdtch = vsdtchc (vs) end c ------------------------------------------------------------ c seeks to a given element position in a vadata c related: VSseek--vsseekc--vsfseek integer function vsfseek (vs, eltpos ) integer vs, eltpos integer vsseekc vsfseek = vsseekc (vs, eltpos) end c ------------------------------------------------------------ c gets the name of a vdata c related: VSgetname--vsgnamc--vsfgnam integer function vsfgnam (vs, vsname) integer vs character*(*) vsname integer vsgnamc vsfgnam = vsgnamc (vs, vsname, len(vsname)) end c ------------------------------------------------------------ c get the class name of a vdata c related: VSgetclass--vsgclsc--vsfgcls integer function vsfgcls (vs, vsclass) integer vs character*(*) vsclass integer vsgclsc vsfgcls = vsgclsc (vs, vsclass, len(vsclass)) end c ------------------------------------------------------------ c general inquiry on a vdata c related: VSinquire--vsinqc--vsfinq integer function vsfinq (vs,nvs,ilace,fields,vsize,vsname) integer vs, nvs, ilace, vsize character*(*) fields, vsname integer vsinqc vsfinq = vsinqc (vs, nvs, ilace, fields, vsize, vsname, + len(fields), len(vsname)) end c ------------------------------------------------------------ c tests if given fields exist in the vdata c related: VSfexist--vsfexc--vsfex integer function vsfex (vs, fields) integer vs character*(*) fields integer vsfexc vsfex = vsfexc (vs, fields, len(fields)) end c ------------------------------------------------------------ c looks for a Vdata with a given name c related: VSfind--vsfind--vsffnd integer function vsffnd (vs, name) integer vs character*(*) name integer vsfndc vsffnd = vsfndc (vs, name, len(name)) end c ------------------------------------------------------------ c gets the id of the next vdata from the file c related: VSgetid--vsgidc--vsfgid integer function vsfgid (f, vsid) integer f, vsid integer vsgidc vsfgid = vsgidc (f, vsid) end c ------------------------------------------------------------ c remove the vdata with id from the file c related: VSdelete--vsdltc--vsfdlte integer function vsfdlte (f, vsid) integer f, vsid integer vsdltc vsfdlte = vsdltc (f, vsid) end c ------------------------------------------------------------ c sets the name of a vdata c related: VSsetname--vssnamc--vsfsnam integer function vsfsnam (vs, vsname) integer vs character*(*) vsname integer vssnamc vsfsnam = vssnamc (vs, vsname, len(vsname)) end c ------------------------------------------------------------ c set the class name of a vdata c related: VSsetclass--vssclsc--vsfscls integer function vsfscls (vs, vsclass) integer vs character*(*) vsclass integer vssclsc vsfscls = vssclsc (vs, vsclass, len(vsclass)) end c ------------------------------------------------------------ c sets the fields in a vdata for reading or writing c related: VSsetfields--vssfldc--vsfsfld integer function vsfsfld (vs, fields) integer vs character*(*) fields integer vssfldc vsfsfld = vssfldc (vs, fields, len(fields)) end c ------------------------------------------------------------ c sets the file interlace of a vdata c related: VSsetinterlace--vssintc--vsfsint integer function vsfsint (vs, interlace) integer vs, interlace integer vssintc vsfsint = vssintc (vs, interlace) end c ------------------------------------------------------------ c defines a new field to be used in the vdata c related: VSfdefine--vsfdefc--vsffdef integer function vsffdef (vs, field, localtype, order) integer vs, localtype, order character*(*) field integer vsfdefc vsffdef = vsfdefc ( vs, field, localtype, order, len(field)) end c ------------------------------------------------------------ c reads from a vdata c related: VSread--vsreadc--vsfread integer function vsfread (vs, buf, nelts , interlace) integer vs, nelts , interlace character*(*) buf integer vsreadc vsfread = vsreadc (vs, buf, nelts, interlace) end c ------------------------------------------------------------ c writes to a vdata c related: VSwrite--vswritc--vsfwrit integer function vsfwrit (vs, buf, nelts, interlace) integer vs, nelts, interlace character*(*) buf(*) integer vswritc vsfwrit = vswritc (vs, buf, nelts, interlace) end C---------------------------------------------------------------------- C Name: vsfsextf C Purpose: call vssextfc to store data in an external file C Inputs: vid: vdata id C fname: name of external file C offset: Number of bytes from the beginning of the C external file to where the data starts C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C Related: VSsetexternalfile--vssextfc--vsfsextf C---------------------------------------------------------------------- integer function vsfsextf(vid, fname, offset) character*(*) fname integer vid, offset, vssextfc vsfsextf = vssextfc(vid, fname, offset, len(fname)) return end c =========================================== c MISCELLANEOUS USEFUL VDATA INQUIRY ROUTINES c =========================================== c c undocumented c gets the interlace of a vdata c related: VSgetinterlace--vsgintc--vsfgint integer function vsfgint (vs) integer vs integer vsgintc vsfgint = vsgintc (vs) end c ------------------------------------------------------------ c gets the number of elements in a vdata c related: VSelts--vseltsc--vsfelts integer function vsfelts (vs) integer vs integer vseltsc vsfelts = vseltsc (vs) end c ------------------------------------------------------------ c gets the fields in the vdata c related: VSgetfields--vsgfldc--vsfgfld integer function vsfgfld (vs, fields) integer vs character*(*) fields integer vsgfldc vsfgfld = vsgfldc (vs, fields) end c ------------------------------------------------------------ c determines the (machine) size of the given fields c related: VSsizeof--vssizc--vsfsiz integer function vsfsiz (vs, fields) integer vs character*(*) fields integer vssizc vsfsiz = vssizc (vs, fields, len(fields)) end c ------------------------------------------------------------ c determines the no of entries in a vgroup c related: Ventries--ventsc--vfents integer function vfents (f, vgid) integer f, vgid integer ventsc vfents = ventsc (f, vgid) end c ------------------------------------------------------------ c gets the refs of all lone vgroups in the file c related: Vlone--vlonec--vflone integer function vflone (f, idarray, asize) integer f integer idarray(*) integer asize integer vlonec vflone = vlonec (f, idarray, asize) end c ------------------------------------------------------------ c gets the refs of all lone vdatas in the file c related: VSlone--vslonec--vsflone integer function vsflone (f, idarray, asize) integer f integer idarray(*) integer asize integer vslonec vsflone = vslonec (f, idarray, asize) end c ------------------------------------------------------------ c gets the ref # of a vgroup for a given name c related: Vfind--vfindc--VFIND integer function vfind(f,name) integer f character*(*) name integer vfindc vfind = vfindc (f, name, len(name)) end c ------------------------------------------------------------ c gets the ref # of a vgroup for a given class c related: Vfindclass--vfndclsc--VFNDCLS integer function vfndcls(f,class) integer f character*(*) class integer vfndclsc vfndcls = vfndclsc (f, class, len(class)) end c ------------------------------------------------------------ c store a simple dataset in a vdata c related: VHstoredata--vhsdc--vhfsd integer function vhfsd(f,field,buf,n,dtype,vsname,vsclass) integer f character*(*) field integer buf(*) integer n, dtype character*(*) vsname, vsclass integer vhsdc vhfsd = vhsdc (f, field, buf, n, dtype, vsname, vsclass, 1 len(field), len(vsname), len(vsclass)) end c ------------------------------------------------------------ c store an aggregate dataset in a vadata c related: VHstoredatam--vhsdmc--vhfsdm integer function vhfsdm (f,field,buf,n,dtype,vsname,vsclass,order) integer f character*(*) field integer buf(*) integer n, dtype, order character*(*) vsname, vsclass integer vhsdmc vhfsdm = vhsdmc (f, field, buf, n, dtype, vsname,vsclass, order, 1 len(field), len(vsname), len(vsclass)) end c ------------------------------------------------------------ c store a simple char dataset in a vdata c related: VHstoredata--vhscdc--vhfscd integer function vhfscd(f,field,cbuf,n,dtype,vsname,vsclass) integer f character*(*) field character cbuf(*) integer n, dtype character*(*) vsname, vsclass integer vhscdc vhfscd = vhscdc(f,field,cbuf,n,dtype,vsname,vsclass, 1 len(field), len(vsname), len(vsclass)) end c ------------------------------------------------------------ c store an aggregate char dataset in a vadata c related: VHstoredatam--vhscdmc--vhfscdm integer function vhfscdm (f,field,cbuf,n,dtype,vsname, 1 vsclass,order) integer f character*(*) field character cbuf(*) integer n, dtype, order character*(*) vsname, vsclass integer vhscdmc vhfscdm = vhscdmc (f, field, cbuf, n, dtype, vsname, 1 vsclass, order, len(field), len(vsname), 1 len(vsclass)) end c ------------------------------------------------------------ c make a new vgroup given several tag/ref pairs c related: VHmakegroup--vhmkgpc--vhfmkgp integer function vhfmkgp(f,tagarray,refarray,n,vgname,vgclass) integer f, n integer tagarray(*), refarray(*) character*(*) vgname, vgclass integer vhmkgpc vhfmkgp = vhmkgpc (f, tagarray, refarray , n, vgname, vgclass, 1 len(vgname), len(vgclass)) end c ============================================================ c More vgroup routines c locate a field in a vdata that belongs to this VGROUP c related: Vflocate--vffloc--vflocc integer function vffloc (vg, field) integer vg character*(*) field integer vflocc vffloc = vflocc (vg, field, len(field)) end c ------------------------------------------------------------ c tests if a tag/ref pair is in a vgroup. c related: Vinqtagref--vinqtrc--vfinqtr integer function vfinqtr (vg, tag, ref) integer vg, tag, ref integer vinqtrc vfinqtr = vinqtrc (vg, tag, ref) end c ------------------------------------------------------------ c gets the number of tag/refs stored in a vgroup c related: Velts--veltsc--vfelts integer function vfntr (vg) integer vg integer vntrc vfntr = vntrc (vg) end c ------------------------------------------------------------ c returns all the tag/ref pairs in a vgroup c related: Vgettagrefs--vgttrsc--vfgttrs integer function vfgttrs (vg, tagarray, refarray, n) integer vg, n integer tagarray(*), refarray(*) integer vgttrsc vfgttrs = vgttrsc (vg, tagarray, refarray, n) end c ------------------------------------------------------------ c returns a specified tag/ref pair in a vgroup c related: Vgettagref--vgttrc--vfgttr integer function vfgttr (vg, which, tag, ref) integer vg, which integer tag, ref integer vgttrc vfgttr = vgttrc (vg, which, tag, ref) end c ------------------------------------------------------------ c add a tag/ref pair to a vgroup c related: Vaddtagref--vadtrc--vfadtr integer function vfadtr( vg, tag, ref) integer vg, tag, ref integer vadtrc vfadtr = vadtrc ( vg, tag, ref) end c ------------------------------------------------------------ c specific inquiry on a vdata, gets fields c related: VSQueryfields--vsqfldsc--vsqfflds integer function vsqfflds (vs,fields) integer vs character*(*) fields integer vsqfldsc vsqfflds = vsqfldsc (vs,fields, len(fields)) end c ------------------------------------------------------------ c specific inquiry on a vdata, gets vdata name c related: VSQueryname--vsqnamec--vsqfname integer function vsqfname (vs,name) integer vs character*(*) name integer vsqnamec vsqfname = vsqnamec (vs,name, len(name)) end c ============================================================ c pack values of a numeric field into data buf c related: VSfpack--vsfncpk--vsfnpak c Use ' ' (blank char) for buflds if the the data buf contains c all fields of the vdata c paktype = _HDF_VSPACK(0) for packing c _HDF_VSUNPACK(1) for unpacking integer function vsfnpak(vs,packtype,buflds,buf,bufsz, + nrecs,pckfld,fldbuf) integer vs, bufsz, nrecs integer buf, fldbuf character*(*) buflds, pckfld integer vsfncpk vsfnpak = vsfncpk(vs,packtype,buflds,buf,bufsz,nrecs,pckfld, + fldbuf, len(buflds), len(pckfld)) end c ============================================================ c pack values of a char field into data buf c related: VSfpack--vsfccpk--vsfcpak c Use ' ' (blank char) for buflds if the the data buf contains c all fields of the vdata c paktype = _HDF_VSPACK(0) for packing c _HDF_VSUNPACK(1) for unpacking integer function vsfcpak(vs,packtype,buflds,buf,bufsz, + nrecs,pckfld,fldbuf) integer vs, bufsz, nrecs integer buf character*(*) buflds, pckfld, fldbuf integer vsfccpk vsfcpak = vsfccpk(vs,packtype,buflds,buf,bufsz,nrecs,pckfld, + fldbuf, len(buflds), len(pckfld)) end c c ------------------------------------------------------------ c Delete a tag/ref pair in a vgroup. c related: vfdtr()-->vdtrc()-->Vdeletetagref() integer function vfdtr( vg, tag, ref) integer vg, tag, ref integer vdtrc vfdtr = vdtrc ( vg, tag, ref) end C------------------------------------------------------------------------- C Name: vsffcls C Purpose: looks in the file, finds the vdata C with the specified class C and returns the ref of the vdata with class vdclass C Inputs: id - file ID C vdclass - class of vdata to find C Returns: returns 0 if not found, or error. Otherwise, returns C the vdata's ref number (a positive integer) C Calls: vcffcls (C stub for VSfindclass function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vsffcls(id, vdclass) C INTEGER id CHARACTER*(*) vdclass INTEGER vscfcls C vsffcls = vscfcls(id,vdclass, len(vdclass)) C return end C------------------------------------------------------------------------- C Name: vffname C Purpose: returns the name of a vdata field C Inputs: vdata_id - vdata identofoer C field_index - field index C Output: field_name C Returns: returns 0 on if successful and -1 otherwise C Calls: vffnamec (C stub for VDfieldname function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vffname(vdata_id, field_index, field_name) INTEGER vdata_id, field_index CHARACTER*(*) field_name INTEGER vffnamec vffname = vffnamec(vdata_id, field_index, field_name, . len(field_name)) return end C------------------------------------------------------------------------- C Name: vsfsetblsz C Purpose: sets the block size of the linked-block element C Inputs: id - vdata identifier C block_size - size of each block C Returns: returns 0 if succeeds and -1 if fails C Calls: vscsetblsz (C stub for VSsetblocksize function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vsfsetblsz(id, block_size) C INTEGER id, block_size INTEGER vscsetblsz C vsfsetblsz = vscsetblsz(id, block_size) return end C------------------------------------------------------------------------- C Name: vsfsetnmbl C Purpose: sets the number of blocks for a linked-block element C Inputs: id - vdata identifier C num_blocks - number of blocks to be used for the linked-block C elements C Returns: returns 0 if succeeds and -1 if fails C Calls: vscsetnmbl (C stub for VSsetnumblocks function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vsfsetnmbl(id, num_blocks) C INTEGER id, num_blocks INTEGER vscsetnmbl C vsfsetnmbl = vscsetnmbl(id, num_blocks) return end C------------------------------------------------------------------------- C Name: vsfgetblinfo C Purpose: retrieves the block size and the number of blocks C of a linked-block element. C Inputs: id - vdata identifier C Outputs: block_size - the linked-block size C num_blocks - number of blocks the element has C Returns: returns 0 if succeeds and -1 if fails C Calls: vscgetblinfo (C stub for VSgetblockinfo function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vsfgetblinfo(id, block_size, num_blocks) C INTEGER id, num_blocks, block_size INTEGER vscgblinfo C vsfgetblinfo = vscgblinfo(id, block_size, num_blocks) return end C------------------------------------------------------------------------- C Name: vfgvgroups C Purpose: Retrieves reference numbers of vgroups in a file C or in a vgroup. C C Inputs: id - File identifier returned by Hopen or C vgroup identifier returned by C Vattachvdata identifier C start_vg - Vgroup index to start retrieving at C vg_count - Number of vgroups to be retrieved, C if vg_count = -1, then only function value C will be return and refarray will be ignored. C Outputs: refarray - Array to hold reference numbers C of retrieved vgroups C Returns: Returns the actual number of vgroups retrieved C if successful, and FAIL (-1) otherwise. C Calls: vcgvgrp (C stub for Vgetvgroups function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vfgvgroups(id, start_vg, vg_count, refarray) C IMPLICIT NONE INTEGER id, start_vg, vg_count INTEGER refarray(*) INTEGER vcgvgrp C vfgvgroups = vcgvgrp(id, start_vg, vg_count, refarray) return end C------------------------------------------------------------------------- C Name: vsfgvdatas C Purpose: Retrieves reference numbers of vdatas in a file or C in a vgroup. C C Inputs: id - File identifier returned by Hopen or vgroup C identifier returned by Vattach C start_vd - Vdata number to start retrieving at C vd_count - Number of vdatas to be retrieved, C if vd_count = -1, then only the function C will be return and refarray will be ignored. C Outputs: refarray - Array to hold reference numbers of C retrieved vdatas C Returns: Returns the actual number of user-created vdatas C retrieved if successful, and FAIL (-1) otherwise. C Calls: vscgvdatas (C stub for VSgetvdatas function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- INTEGER function vsfgvdatas(id, start_vd, vd_count, refarray) C IMPLICIT NONE INTEGER id, start_vd, vd_count INTEGER refarray(*) INTEGER vscgvdatas C vsfgvdatas = vscgvdatas(id, start_vd, vd_count, refarray) return end hdf4-hdf4.3.1/hdf/src/vgp.c000066400000000000000000002743611503061704500153340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** file - vgp.c Part of the Vset interface. VGROUPs are handled by routines in here. LOCAL ROUTINES ============== VIget_vgroup_node -- allocate a new VGROUP record VIrelease_vgroup_node -- Releases a vgroup node VIget_vginstance_node -- allocate a new vginstance_t record VIrelease_vginstance_node -- Releases a vginstance node Get_vfile -- get vgroup file record New_vfile -- create new vgroup file record Load_vfile -- loads vgtab table with info of all vgroups in file. Remove_vfile -- removes the file ptr from the vfile[] table. VPgetinfo -- Read in the "header" information about the Vgroup. VIstart -- V-level initialization routine VPshutdown -- Terminate various static buffers. EXPORTED ROUTINES ================= Following 4 routines are solely for B-tree routines. vcompare -- Compares two TBBT-tree keys for equality. Similar to memcmp. vprint -- Prints out the key and reference number of VDatas and Vgroups vdestroynode -- destroy vgroup node in TBBT vfdestroynode -- destroy vgroup file record node in TBBT vtfreekey -- Frees B-Tree index (actually doesn't anything at all) Vinitialize -- initialize Vxxx interface Vfinish -- end Vxxx access to file vginstance -- Looks thru vgtab for vgid and return the addr of the vg instance where vgid is found. vexistvg -- Tests if a vgroup with id "vgid" is in the file's vgtab. vpackvg -- Extracts fields from a VGROUP struct "vg" and packs the fields into array buf in preparation for storage in the HDF file. vunpackvg -- Unpacks the fields from a buf (ie a DFTAG_VG data object just read in from the HDF file), into a VGROUP structure vg. Vattach -- Attaches to an existing vgroup or creates a new vgroup. Vdetach -- Detaches access to vg. Vinsert -- Inserts a velt (vs or vg) into a vg Vflocate -- Checks to see if the given field exists in a vdata belonging to this vgroup. Vinqtagref -- Checks whether the given tag/ref pair already exists in the vgroup. Vntagrefs -- Returns the number (0 or +ve integer) of tag/ref pairs in a vgroup. Vnrefs -- Vgettagrefs -- Returns n tag/ref pairs from the vgroup into the caller-supplied arrays(tagrarray and refarray). Vgettagref -- Returns a specified tag/ref pair from the vgroup. VQuerytag -- Return the tag of this Vgroup. VQueryref -- Return the ref of this Vgroup. Vaddtagref -- Inserts a tag/ref pair into the attached vgroup vg. vinsertpair -- Inserts a tag/ref pair into the attached vgroup vg. Ventries -- Returns the num of entries (+ve integer) in the vgroup vgid. Vsetname -- Gives a name to the VGROUP vg. Vsetclass -- Assigns a class name to the VGROUP vg. Visvg -- Tests if the given entry in the vgroup vg is a VGROUP. Visvs -- Checks if an id in a vgroup refers to a VDATA. Vgetid -- Given a vgroup's id, returns the next vgroup's id in the file. Vgetnext -- Given the id of an entry from a vgroup vg, looks in vg for the next entry after it, and returns its id. Vgetnamelen -- Retrieves the length of the vgroup's name. Vgetclassnamelen -- Retrieves the length of the vgroup's classname. Vgetname -- Returns the vgroup's name. Vgetclass -- Returns the vgroup's class name . Vgetvgroups -- Gets user-created vgroups in a file or in a vgroup Vinquire -- General inquiry routine for VGROUP. Vopen -- This routine opens the HDF file and initializes it for Vset operations.(i.e." Hopen(); Vinitialize(f)"). Vclose -- This routine closes the HDF file, after it has freed all memory and updated the file. (i.e." Vfinish(f); Hclose(f);"). Vdelete -- Remove a Vgroup from its file. This function will both remove the Vgoup from the internal Vset data structures as well as from the file. Vdeletetagref - delete tag/ref pair in Vgroup NOTE: Another pass needs to made through this file to update some of the comments about certain sections of the code. -GV 9/8/97 *************************************************************************/ #include "hdf_priv.h" #include "vg_priv.h" /* These are used to determine whether a vgroup had been created by the library internally, that is, not created by user's application */ #define HDF_NUM_INTERNAL_VGS 6 const char *HDF_INTERNAL_VGS[] = {_HDF_VARIABLE, _HDF_DIMENSION, _HDF_UDIMENSION, _HDF_CDF, GR_NAME, RI_NAME}; /* Prototypes */ extern void vprint(void *k1); static intn Load_vfile(HFILEID f); static intn Remove_vfile(HFILEID f); static intn vunpackvg(VGROUP *vg, uint8 buf[], intn len); static intn VIstart(void); /* * -------------------------------------------------------------------- * Private data structure and routines. * * Info about all vgroups in the file are loaded into vgtab at start; * and the vg field set to NULL until that vgroup is attached, * and reset back to NULL when that vgroup is detached. * Info about all vdatas in the file are loaded into vstab at start; * and the vs field set to NULL until that vdata is attached, * and reset back to NULL when that vdata is detached. * -------------------------------------------------------------------- */ TBBT_TREE *vtree = NULL; /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /* Temporary buffer for I/O */ static uint32 Vgbufsize = 0; static uint8 *Vgbuf = NULL; /* Pointers to the VGROUP & vginstance node free lists */ static VGROUP *vgroup_free_list = NULL; static vginstance_t *vginstance_free_list = NULL; /******************************************************************************* NAME VIget_vgroup_node -- allocate a new VGROUP record DESCRIPTION Return a pointer to a new VGROUP to use for a new VGID. RETURNS returns VGROUP record pointer or NULL if failed. *******************************************************************************/ VGROUP * VIget_vgroup_node(void) { VGROUP *ret_value = NULL; /* clear error stack */ HEclear(); /* Grab from free list if possible */ if (vgroup_free_list != NULL) { ret_value = vgroup_free_list; vgroup_free_list = vgroup_free_list->next; } /* end if */ else { if ((ret_value = (VGROUP *)malloc(sizeof(VGROUP))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ /* Initialize to zeros */ memset(ret_value, 0, sizeof(VGROUP)); done: return ret_value; } /* VIget_vgroup_node */ /****************************************************************************** NAME VIrelease_vgroup_node -- Releases a vgroup node DESCRIPTION Puts an VGROUP node into the free list RETURNS No return value *******************************************************************************/ void VIrelease_vgroup_node(VGROUP *vg) { /* Insert the atom at the beginning of the free list */ vg->next = vgroup_free_list; vgroup_free_list = vg; } /* end VIrelease_vgroup_node() */ /****************************************************************************** NAME VIget_vginstance_node -- allocate a new vginstance_t record DESCRIPTION Return an pointer to a new vginstance to use for a new VGID. RETURNS returns vginstance_t pointer or NULL if failed. *******************************************************************************/ vginstance_t * VIget_vginstance_node(void) { vginstance_t *ret_value = NULL; /* clear error stack */ HEclear(); /* Grab from free list if possible */ if (vginstance_free_list != NULL) { ret_value = vginstance_free_list; vginstance_free_list = vginstance_free_list->next; } /* end if */ else { if ((ret_value = (vginstance_t *)malloc(sizeof(vginstance_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ /* Initialize to zeros */ memset(ret_value, 0, sizeof(vginstance_t)); done: return ret_value; } /* VIget_vginstance_node */ /****************************************************************************** NAME VIrelease_vginstance_node -- Releases a vginstance node DESCRIPTION Puts a vginstance node into the free list RETURNS No return value *******************************************************************************/ void VIrelease_vginstance_node(vginstance_t *vg /* IN: vgroup instance to release */) { /* Insert the vsinstance at the beginning of the free list */ vg->next = vginstance_free_list; vginstance_free_list = vg; } /* end VIrelease_vginstance_node() */ /******************************************************************************* NAME Get_vfile -- get vgroup file record DESCRIPTION Looks in the TBBT vtree for the file ID of the file. RETURNS Returns a pointer to the vfile_t for that file on success, otherwise NULL. *******************************************************************************/ vfile_t * Get_vfile(HFILEID f /* IN: file handle */) { void **t = NULL; /* vfile_t pointer from tree */ int32 key = (int32)f; /* initialize key to file handle */ /* find file record */ t = (void **)tbbtdfind(vtree, (void *)&key, NULL); return (vfile_t *)(t == NULL ? NULL : *t); } /* end Get_vfile() */ /******************************************************************************* NAME New_vfile -- create new vgroup file record DESCRIPTION Creates vfile_t structure and adds it to the tree RETURNS Returns a pointer to the vfile_t for that file on success, otherwise NULL. *******************************************************************************/ static vfile_t * New_vfile(HFILEID f /* IN: file handle */) { vfile_t *v = NULL; /* Allocate the vfile_t structure */ if (NULL == (v = (vfile_t *)calloc(1, sizeof(vfile_t)))) return NULL; /* Assign the file ID & insert into the tree */ v->f = f; /* insert the vg instance in B-tree */ tbbtdins(vtree, (void *)v, NULL); /* return vfile_t struct */ return v; } /* end New_vfile() */ /******************************************************************************* NAME Load_vfile -- loads vgtab table with info of all vgroups in file. DESCRIPTION *** Only called by Vinitialize() *** loads vgtab table with info of all vgroups in file f. Will allocate a new vfile_t, then proceed to load vg instances. RETURNS RETURNS FAIL if error or no more file slots available. RETURNS SUCCEED if ok. *******************************************************************************/ static intn Load_vfile(HFILEID f /* IN: file handle */) { vfile_t *vf = NULL; vginstance_t *v = NULL; vsinstance_t *w = NULL; int32 aid; int32 ret; uint16 tag = DFTAG_NULL; uint16 ref = DFTAG_NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Check if vfile buffer has been allocated */ if (vtree == NULL) { vtree = tbbtdmake(vcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (vtree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Initialize the atom groups for Vdatas and Vgroups */ if (HAinit_group(VSIDGROUP, VATOM_HASH_SIZE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HAinit_group(VGIDGROUP, VATOM_HASH_SIZE) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Grab the existing vfile_t structure first, otherwise create a new one */ if ((vf = Get_vfile(f)) == NULL) { if ((vf = New_vfile(f)) == NULL) HGOTO_ERROR(DFE_FNF, FAIL); } /* the file is already loaded (opened twice) do nothing */ if (vf->access++) HGOTO_DONE(SUCCEED); /* load all the vg's tag/refs from file */ vf->vgtabn = 0; /* initialize to number of current entries to zero */ vf->vgtree = tbbtdmake(vcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (vf->vgtree == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); ret = aid = Hstartread(f, DFTAG_VG, DFREF_WILDCARD); while (ret != FAIL) { /* get tag/ref for this vgroup */ HQuerytagref(aid, &tag, &ref); /* get a vgroup struct to fill */ if (NULL == (v = VIget_vginstance_node())) { tbbtdfree(vf->vgtree, vdestroynode, NULL); HGOTO_ERROR(DFE_NOSPACE, FAIL); } vf->vgtabn++; /* increment number of vgroups found in file */ v->key = (int32)ref; /* set the key for the node */ v->ref = (uintn)ref; /* get the header information */ v->vg = VPgetinfo(f, ref); if (v->vg == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* insert the vg instance in B-tree */ tbbtdins(vf->vgtree, (void *)v, NULL); /* get next vgroup */ ret = Hnextread(aid, DFTAG_VG, DFREF_WILDCARD, DF_CURRENT); } if (aid != FAIL) Hendaccess(aid); /* clear error stack - this is to remove the faux errors about DD not found from when Hstartread is called on a new file */ HEclear(); /* load all the vs's tag/refs from file */ vf->vstabn = 0; vf->vstree = tbbtdmake(vcompare, sizeof(int32), TBBT_FAST_INT32_COMPARE); if (vf->vstree == NULL) { tbbtdfree(vf->vgtree, vdestroynode, NULL); HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ ret = aid = Hstartread(f, VSDESCTAG, DFREF_WILDCARD); while (ret != FAIL) { /* get tag/ref for this vdata */ HQuerytagref(aid, &tag, &ref); /* attach new vs to file's vstab */ if (NULL == (w = VSIget_vsinstance_node())) { tbbtdfree(vf->vgtree, vdestroynode, NULL); tbbtdfree(vf->vstree, vsdestroynode, NULL); HGOTO_ERROR(DFE_NOSPACE, FAIL); } vf->vstabn++; /* increment number of vdatas found in file */ w->key = (int32)ref; /* set the key for the node */ w->ref = (uintn)ref; /* get the header information */ w->vs = VSPgetinfo(f, ref); if (w->vs == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); w->nattach = 0; w->nvertices = 0; /* insert the vg instance in B-tree */ tbbtdins(vf->vstree, (void *)w, NULL); /* get next vdata */ ret = Hnextread(aid, VSDESCTAG, DFREF_WILDCARD, DF_CURRENT); } if (aid != FAIL) Hendaccess(aid); /* clear error stack - this is to remove the faux errors about DD not found from when Hstartread is called on a new file */ HEclear(); /* file may be incompatible with vset version 2.x. Need to check it */ if (((int32)0 == vf->vgtabn) && ((int32)0 == vf->vstabn)) { if ((int32)0 == vicheckcompat(f)) { /* not compatible */ tbbtdfree(vf->vgtree, vdestroynode, NULL); tbbtdfree(vf->vstree, vsdestroynode, NULL); HGOTO_ERROR(DFE_BADOPEN, FAIL); } } done: return ret_value; } /* Load_vfile */ /****************************************************************************** NAME Remove_vfile -- removes the file ptr from the vfile[] table. DESCRIPTION removes the file ptr from the vfile[] table. *** Only called by Vfinish() *** RETURNS *******************************************************************************/ static intn Remove_vfile(HFILEID f /* IN: file handle */) { void **t = NULL; vfile_t *vf = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Check if vfile buffer has been allocated */ if (vtree == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Figure out what file to work on */ if ((vf = Get_vfile(f)) == NULL) HGOTO_ERROR(DFE_FNF, FAIL); /* If someone still has an active pointer to this file we don't remove it. */ if (--vf->access) HGOTO_DONE(SUCCEED); /* clear out the tbbt's */ tbbtdfree(vf->vgtree, vdestroynode, NULL); tbbtdfree(vf->vstree, vsdestroynode, NULL); /* Find the node in the tree */ if ((t = (void **)tbbtdfind(vtree, (void *)&f, NULL)) == NULL) HGOTO_DONE(FAIL); /* Delete the node and free the vfile_t structure */ vf = tbbtrem((TBBT_NODE **)vtree, (TBBT_NODE *)t, NULL); free(vf); done: return ret_value; } /* Remove_vfile */ /****************************************************************************** NAME vcompare -- compare two TBBT keys for equality DESCRIPTION Compares two B-tree keys for equality. Similar to memcmp. *** Only called by B-tree routines, should _not_ be called externally *** RETURNS *******************************************************************************/ intn vcompare(void *k1, /* IN: first key to compare*/ void *k2, /* IN: second key to compare */ intn cmparg /* IN: not used */) { (void)cmparg; return (intn)((*(int32 *)k1) - (*(int32 *)k2)); /* valid for integer keys */ } /* vcompare */ /****************************************************************************** NAME vprint -- print key and reference number of vgroup/vdata node in TBBT DESCRIPTION Prints out the key and reference number of VDatas and Vgroups *** Only called by B-tree routines, should _not_ be called externally *** RETURNS *******************************************************************************/ void vprint(void *k1 /* IN: key to print */) { printf("Ptr=%p, key=%d, ref=%d\n", k1, (int)((vginstance_t *)k1)->key, (int)((vginstance_t *)k1)->ref); } /* vprint */ /****************************************************************************** NAME vdestroynode -- destroy vgroup node in TBBT DESCRIPTION Frees B-Tree nodes *** Only called by B-tree routines, should _not_ be called externally *** RETURNS Nothing *******************************************************************************/ void vdestroynode(void *n /* IN: node to free */) { VGROUP *vg = NULL; if (n != NULL) { vg = ((vginstance_t *)n)->vg; if (vg != NULL) { free(vg->tag); free(vg->ref); free(vg->vgname); free(vg->vgclass); free(vg->alist); /* Free the old-style attr list and reset associated fields */ if (vg->old_alist != NULL) { free(vg->old_alist); vg->old_alist = NULL; vg->noldattrs = 0; } VIrelease_vgroup_node(vg); } VIrelease_vginstance_node((vginstance_t *)n); } /* end if n */ } /* vdestroynode */ /******************************************************************************* NAME vfdestroynode -- destroy vgroup file record node in TBBT DESCRIPTION Frees B-Tree vfile_t nodes *** Only called by B-tree routines, should _not_ be called externally *** RETURNS Nothing *******************************************************************************/ void vfdestroynode(void *n /* IN: vfile_t record to free */) { vfile_t *vf = NULL; if (n != NULL) { vf = (vfile_t *)n; /* clear out the tbbt's */ tbbtdfree(vf->vgtree, vdestroynode, NULL); tbbtdfree(vf->vstree, vsdestroynode, NULL); free(vf); } } /* vfdestroynode */ /******************************************************************************* NAME Vinitialize -- initialize Vxxx interface DESCRIPTION Initialize Vxxx stuff/interface ? RETURNS SUCCEED / FAIL *******************************************************************************/ intn Vinitialize(HFILEID f /* IN: file handle */) { intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Check file ID */ if (f < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Perform global, one-time initialization */ if (library_terminate == FALSE) { if (VIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); } /* load Vxx stuff from file? */ if (Load_vfile(f) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Vinitialize() */ /******************************************************************************* NAME Vfinish -- end Vxxx access to file DESCRIPTION End Vxxx access to file? RETURNS SUCCEED / FAIL *******************************************************************************/ intn Vfinish(HFILEID f /* IN: file handle */) { intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* remove Vxxx file record ? */ if (Remove_vfile(f) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Vfinish() */ /******************************************************************************* NAME vginst DESCRIPTION Looks thru vgtab for vgid and return the addr of the vg instance where vgid is found. RETURNS RETURNS NULL if error or not found. RETURNS vginstance_t pointer if ok. *******************************************************************************/ vginstance_t * vginst(HFILEID f, /* IN: file handle */ uint16 vgid /* IN: vgroup id */) { void **t = NULL; vfile_t *vf = NULL; vginstance_t *ret_value = NULL; int32 key; /* clear error stack */ HEclear(); /* get file Vxxx file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, NULL); /* tbbtdfind returns a pointer to the vginstance_t pointer */ key = (int32)vgid; t = (void **)tbbtdfind(vf->vgtree, (void *)&key, NULL); if (t != NULL) { ret_value = ((vginstance_t *)*t); /* return the actual vginstance_t ptr */ goto done; } /* we get here then we did find vgroup */ HGOTO_ERROR(DFE_NOMATCH, NULL); done: return ret_value; } /* vginst */ /******************************************************************************* NAME vexistvg DESCRIPTION Tests if a vgroup with id vgid is in the file's vgtab. RETURNS returns FAIL if not found, returns TRUE if found. *******************************************************************************/ int32 vexistvg(HFILEID f, /* IN: file handle */ uint16 vgid /* IN: vgroup id */) { int32 ret_value; if (NULL == (vginstance_t *)vginst(f, vgid)) ret_value = (FAIL); else ret_value = (TRUE); return ret_value; } /* vexistvg */ /* ==================================================================== */ /* * vpackvg() and vunpackvg() : Packing and unpacking routines. * For use in retrieving and storing vgroups to/from the HDF file. * * Fields of VGROUP that gets stored in HDF as a DFTAG_VG data object: * int16 nvelt (no of entries ) * char* vgname * char* vgclass * int16 tag[1..nvelt] * int16 ref[1..nvelt] * (fields for version 4) * uint32 flags * (if bit0 of flags is set, the vg has attributes ) * int32 nattrs * vg_attr_t alist[1..nattrs] */ /* ==================================================================== */ /******************************************************************************* NAME vpackvg DESCRIPTION Extracts fields from a VGROUP struct vg and packs the fields into array buf in preparation for storage in the HDF file. RETURNS NO RETURN VALUES. *******************************************************************************/ intn vpackvg(VGROUP *vg, /* IN: */ uint8 buf[], /* IN/OUT: */ int32 *size /* IN/OUT: */) { uintn i; size_t slen = 0; uint16 temp_len = 0; uint8 *bb = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); bb = &buf[0]; /* save nvelt */ UINT16ENCODE(bb, vg->nvelt); /* save all tags */ for (i = 0; i < (uintn)vg->nvelt; i++) UINT16ENCODE(bb, vg->tag[i]); /* save all refs */ for (i = 0; i < (uintn)vg->nvelt; i++) UINT16ENCODE(bb, vg->ref[i]); /* save the vgnamelen and vgname - omit the null */ if (vg->vgname != NULL) slen = strlen(vg->vgname); temp_len = slen > 0 ? slen : 0; UINT16ENCODE(bb, temp_len); if (vg->vgname != NULL) strcpy((char *)bb, vg->vgname); bb += temp_len; /* save the vgclasslen and vgclass- omit the null */ slen = 0; if (vg->vgclass != NULL) slen = strlen(vg->vgclass); temp_len = slen > 0 ? slen : 0; UINT16ENCODE(bb, temp_len); if (vg->vgclass != NULL) strcpy((char *)bb, vg->vgclass); bb += temp_len; /* save the expansion tag/ref pair */ UINT16ENCODE(bb, vg->extag); /* the vg's expansion tag */ UINT16ENCODE(bb, vg->exref); /* the vg's expansion ref */ if (vg->flags) { /* save the flag and update version num */ if (vg->version < VSET_NEW_VERSION) vg->version = VSET_NEW_VERSION; UINT32ENCODE(bb, vg->flags); if (vg->flags & VG_ATTR_SET) { /* save the attrs */ INT32ENCODE(bb, vg->nattrs); for (i = 0; i < (uintn)vg->nattrs; i++) { UINT16ENCODE(bb, vg->alist[i].atag); UINT16ENCODE(bb, vg->alist[i].aref); } } } /* save the vg's version field */ UINT16ENCODE(bb, vg->version); /* save the vg's more field */ UINT16ENCODE(bb, vg->more); /* returns the size of total fields saved */ *size = (int32)(bb - buf) + 1; *bb = 0; /* NOTE: the '+1' part shouldn't be there */ /* but since files have been created with */ /* it there (and the size calc. wrong) it */ /* has to be left alone -QAK */ return ret_value; } /* vpackvg */ /******************************************************************************* NAME vunpackvg: DESCRIPTION Unpacks the fields from a buf (ie a DFTAG_VG data object just read in from the HDF file), into a VGROUP structure vg. Will first zero out vg, unpack fields, then inits as much of vg as it can. RETURNS NO RETURN VALUES *******************************************************************************/ static intn vunpackvg(VGROUP *vg, /* IN/OUT: */ uint8 buf[], /* IN: */ intn len /* IN: */) { uint8 *bb = NULL; uintn u; uint16 uint16var; intn i; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* '5' is a magic number, the exact amount of space for 2 uint16's */ /* the magic number _should_ be '4', but the size of the Vgroup */ /* information is incorrectly calculated (in vpackvg() above) when the */ /* info is written to the file and it's too late to change it now :-( */ bb = &buf[len - 5]; UINT16DECODE(bb, uint16var); /* retrieve the vg's version field */ vg->version = (int16)uint16var; UINT16DECODE(bb, uint16var); /* retrieve the vg's more field */ vg->more = (int16)uint16var; bb = &buf[0]; /* retrieve nvelt */ if (vg->version <= 4) { /* current Vset version number */ UINT16DECODE(bb, vg->nvelt); vg->msize = ((uintn)vg->nvelt > (uintn)MAXNVELT ? vg->nvelt : MAXNVELT); vg->tag = (uint16 *)malloc(vg->msize * sizeof(uint16)); vg->ref = (uint16 *)malloc(vg->msize * sizeof(uint16)); if ((vg->tag == NULL) || (vg->ref == NULL)) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* retrieve the tags */ for (u = 0; u < (uintn)vg->nvelt; u++) UINT16DECODE(bb, vg->tag[u]); /* retrieve the refs */ for (u = 0; u < (uintn)vg->nvelt; u++) UINT16DECODE(bb, vg->ref[u]); /* retrieve vgname (and its len) */ UINT16DECODE(bb, uint16var); if (uint16var == 0) vg->vgname = NULL; else { if (NULL == (vg->vgname = (char *)malloc(uint16var + 1))) HGOTO_ERROR(DFE_NOSPACE, FAIL); HIstrncpy(vg->vgname, (char *)bb, (intn)uint16var + 1); bb += (size_t)uint16var; } /* retrieve vgclass (and its len) */ UINT16DECODE(bb, uint16var); if (uint16var == 0) vg->vgclass = NULL; else { if (NULL == (vg->vgclass = (char *)malloc(uint16var + 1))) HGOTO_ERROR(DFE_NOSPACE, FAIL); HIstrncpy(vg->vgclass, (char *)bb, (intn)uint16var + 1); bb += (size_t)uint16var; } UINT16DECODE(bb, vg->extag); /* retrieve the vg's expansion tag */ UINT16DECODE(bb, vg->exref); /* retrieve the vg's expansion ref */ if (vg->version == VSET_NEW_VERSION) { UINT32DECODE(bb, vg->flags); /* retrieve new features in version 4, or higher */ if (vg->flags & VG_ATTR_SET) { /* the vg has attrs */ INT32DECODE(bb, vg->nattrs); if (NULL == (vg->alist = malloc(vg->nattrs * sizeof(vg_attr_t)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); for (i = 0; i < vg->nattrs; i++) { UINT16DECODE(bb, vg->alist[i].atag); UINT16DECODE(bb, vg->alist[i].aref); } /* for */ } /* attributes set */ } /* new version */ } /* end if */ done: return ret_value; } /* vunpackvg */ /******************************************************************************* NAME VPgetinfo -- Read in the "header" information about the Vgroup. DESCRIPTION This routine pre-reads the header information for a Vgroup into memory so that it can be accessed more quickly by the routines that need it. RETURNS Return a pointer to a VGROUP filled with the Vgroup information on success, NULL on failure. *******************************************************************************/ VGROUP * VPgetinfo(HFILEID f, /* IN: file handle */ uint16 ref /* IN: ref of vgroup */) { VGROUP *vg = NULL; /* intn len; intn mismatches Vgbufsize type -- uint32 */ size_t len; VGROUP *ret_value = NULL; /* FAIL */ /* clear error stack */ HEclear(); /* Find out how long the VGroup information is */ if ((len = Hlength(f, DFTAG_VG, (uint16)ref)) == FAIL) HGOTO_ERROR(DFE_INTERNAL, NULL); if (len > Vgbufsize) { Vgbufsize = len; free(Vgbuf); if ((Vgbuf = (uint8 *)malloc(Vgbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* Get the raw Vgroup info */ if (Hgetelement(f, DFTAG_VG, (uint16)ref, Vgbuf) == (int32)FAIL) HGOTO_ERROR(DFE_NOMATCH, NULL); /* allocate space for vg */ if (NULL == (vg = VIget_vgroup_node())) HGOTO_ERROR(DFE_NOSPACE, NULL); /* unpack vgpack into structure vg, and init */ vg->f = f; vg->oref = ref; vg->otag = DFTAG_VG; if (FAIL == vunpackvg(vg, Vgbuf, len)) HGOTO_ERROR(DFE_INTERNAL, NULL); /* return vgroup */ ret_value = vg; done: return ret_value; } /* end VPgetinfo */ /******************************************************************************* NAME Vattach: DESCRIPTION attaches to an existing vgroup or creates a new vgroup. returns NULL if error, else ptr to vgroup. IGNORE accesstype. (but save it) if vgid == -1, create a NEW vg if vgdir is not full. Also set nattach =1, nentries=0. if vgid +ve, look in vgdir to see if already attached, if yes, incr nattach if not, fetch from file. attach, set nattach=1, netries= val from file In any case, set marked flag to 0. RETURNS SUCCEED/FAIL *******************************************************************************/ int32 Vattach(HFILEID f, /* IN: file handle */ int32 vgid, /* IN: vgroup id */ const char *accesstype /* IN: access type */) { VGROUP *vg = NULL; vginstance_t *v = NULL; vfile_t *vf = NULL; filerec_t *file_rec = NULL; /* file record */ int16 acc_mode; atom_t ret_value = FAIL; /* clear error stack */ HEclear(); /* check file id */ if (f == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get Vxxx file record */ if ((vf = Get_vfile(f)) == NULL) HGOTO_ERROR(DFE_FNF, FAIL); /* check access type to vgroup */ if (accesstype[0] == 'R' || accesstype[0] == 'r') acc_mode = 'r'; else if (accesstype[0] == 'W' || accesstype[0] == 'w') acc_mode = 'w'; else HGOTO_ERROR(DFE_BADACC, FAIL); /* convert file id to file record and check for validity */ file_rec = HAatom_object(f); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for write-permission */ if (acc_mode == 'w' && !(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_BADACC, FAIL); if (vgid == -1) { /******* create a NEW vg in vgdir ******/ if (acc_mode == 'r') HGOTO_ERROR(DFE_ARGS, FAIL); /* allocate space for vg, & zero it out */ if ((vg = VIget_vgroup_node()) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* initialize new vg */ vg->msize = MAXNVELT; vg->tag = (uint16 *)malloc(vg->msize * sizeof(uint16)); vg->ref = (uint16 *)malloc(vg->msize * sizeof(uint16)); vg->vgname = NULL; vg->vgclass = NULL; if ((vg->tag == NULL) || (vg->ref == NULL)) HGOTO_ERROR(DFE_NOSPACE, FAIL); vg->f = f; vg->otag = DFTAG_VG; vg->oref = Hnewref(f); /* create a new unique ref for it */ if (vg->oref == 0) HGOTO_ERROR(DFE_NOREF, FAIL); vg->access = (intn)acc_mode; vg->marked = 1; /* number of old-style attributes and list of their refs, these are only used when Vnoldattrs is invoked; see Vnoldattrs func header for info. 2/4/2011 -BMR */ vg->old_alist = NULL; vg->noldattrs = 0; vg->new_vg = 1; vg->version = VSET_VERSION; /* attach new vg to file's vgtab */ if (NULL == (v = VIget_vginstance_node())) HGOTO_ERROR(DFE_NOSPACE, FAIL); vf->vgtabn++; v->key = (int32)vg->oref; /* set the key for the node */ v->ref = (uintn)vg->oref; v->vg = vg; v->nattach = 1; tbbtdins(vf->vgtree, (void *)v, NULL); /* insert the vg instance in B-tree */ ret_value = HAregister_atom(VGIDGROUP, v); } else { /******* access an EXISTING vg *********/ if (NULL == (v = vginst(f, (uint16)vgid))) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* vg already attached. inc nattach and return existing ptr */ if (v->nattach > 0) { v->vg->access = MAX(v->vg->access, acc_mode); v->nattach++; } else { vg = v->vg; vg->access = (intn)acc_mode; vg->marked = 0; /* number of old-style attributes and list of their refs, these are only used when Vnoldattrs is invoked; see Vnoldattrs func header for info. 2/4/2011 -BMR */ vg->old_alist = NULL; vg->noldattrs = 0; /* attach vg to file's vgtab at the vg instance v */ v->nattach = 1; v->nentries = (int32)vg->nvelt; } /* end else */ ret_value = HAregister_atom(VGIDGROUP, v); } done: return ret_value; } /* Vattach */ /******************************************************************************* NAME Vdetach DESCRIPTION Detaches access to vg. if marked flag is 1, write out vg to file. if vg still has velts attached to it, cannot detach vg. decr nattach. if (nattach is 0), free vg from vg instance. (check that no velts are still attached to vg before freeing) if attached with read access, just return. after detach, set marked flag to 0. RETURNS SUCCEED / FAIL *******************************************************************************/ int32 Vdetach(int32 vkey /* IN: vgroup key */) { VGROUP *vg = NULL; vginstance_t *v = NULL; int32 vgpacksize; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check it */ vg = v->vg; if ((vg == NULL) || (vg->otag != DFTAG_VG)) HGOTO_ERROR(DFE_ARGS, FAIL); v->nattach--; /* Now, only update the Vgroup if it has actually changed. */ /* Since only Vgroups with write-access are allowed to change, there is */ /* no reason to check for access... (I hope) -QAK */ if (vg->marked == 1) { size_t need, vgnamelen = 0, vgclasslen = 0; if (vg->vgname != NULL) vgnamelen = strlen(vg->vgname); if (vg->vgclass != NULL) vgclasslen = strlen(vg->vgclass); need = sizeof(VGROUP) + vgnamelen /* vgname dynamic, vpackvg omits null */ + vgclasslen /* vgclass dynamic, vpackvg omits null */ + (size_t)vg->nvelt * 4 + (size_t)vg->nattrs * sizeof(vg_attr_t) + 1; if (need > Vgbufsize) { Vgbufsize = need; free(Vgbuf); if ((Vgbuf = (uint8 *)malloc(Vgbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* end if */ if (FAIL == vpackvg(vg, Vgbuf, &vgpacksize)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* * If vgroup already exists, try to reuse the same * tag/ref. This will cause the pointer to the original * vgroup to be lost but this is okay. */ if (!vg->new_vg) { /* check if tag/ref exists in DD list already */ switch (HDcheck_tagref(vg->f, DFTAG_VG, vg->oref)) { case 0: /* not found */ break; case 1: /* found, reuse tag/ref */ if (HDreuse_tagref(vg->f, DFTAG_VG, vg->oref) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); break; case -1: /* error */ HGOTO_ERROR(DFE_INTERNAL, FAIL); default: /* should never get here */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* write out vgroup */ if (Hputelement(vg->f, DFTAG_VG, vg->oref, Vgbuf, vgpacksize) == FAIL) HERROR(DFE_WRITEERROR); vg->marked = 0; vg->new_vg = 0; } /* Free the old-style attribute list and reset associated fields */ if (vg->old_alist != NULL) { free(vg->old_alist); vg->old_alist = NULL; vg->noldattrs = 0; } /* remove vgroup from atom list */ if (HAremove_atom(vkey) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Vdetach */ /******************************************************************************* NAME Vinsert DESCRIPTION inserts a velt (vs or vg) into a vg checks and prevents duplicate links. Since multiple files are now possible, check that both vg and velt are from the same file. else error. RETURNS RETURNS entry position within vg (0 or +ve) or FAIL on error. *******************************************************************************/ int32 Vinsert(int32 vkey, /* IN: vgroup key */ int32 insertkey /* IN: */) { VGROUP *vg = NULL; vginstance_t *v = NULL; uint16 newtag = 0; uint16 newref = 0; int32 newfid; uintn u; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check to see if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check it */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* check write access */ if (vg->otag != DFTAG_VG || vg->access != 'w') HGOTO_ERROR(DFE_ARGS, FAIL); newfid = FAIL; if (HAatom_group(insertkey) == VSIDGROUP) { /* locate vs's index in vstab */ vsinstance_t *w; if (NULL == (w = (vsinstance_t *)HAatom_object(insertkey))) HGOTO_ERROR(DFE_NOVS, FAIL); if (w->vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); newtag = DFTAG_VH; newref = w->vs->oref; newfid = w->vs->f; } else { vginstance_t *x; if (HAatom_group(insertkey) == VGIDGROUP) { /* locate vs's index in vgtab */ if (NULL == (x = (vginstance_t *)HAatom_object(insertkey))) HGOTO_ERROR(DFE_NOVS, FAIL); if (x->vg == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); newtag = DFTAG_VG; newref = x->vg->oref; newfid = x->vg->f; } } /* make sure we found something */ if (newfid == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); if (vg->f != newfid) HGOTO_ERROR(DFE_DIFFFILES, FAIL); /* check and prevent duplicate links */ for (u = 0; u < (uintn)vg->nvelt; u++) { if ((vg->ref[u] == newref) && (vg->tag[u] == newtag)) HGOTO_ERROR(DFE_DUPDD, FAIL); } /* Finally, ok to insert */ if (vinsertpair(vg, newtag, newref) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); ret_value = (vg->nvelt - 1); done: return ret_value; } /* Vinsert */ /******************************************************************************* NAME Vflocate DESCRIPTION Checks to see if the given field exists in a vdata belonging to this vgroup. RETURNS If found, returns the ref of the vdata. If not found, or error, returns FAIL *******************************************************************************/ int32 Vflocate(int32 vkey, /* IN: vdata key */ char *field /* IN: field to locate */) { uintn u; vginstance_t *v = NULL; VGROUP *vg = NULL; int32 vskey; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); for (u = 0; u < (uintn)vg->nvelt; u++) { intn s; if (vg->tag[u] != VSDESCTAG) continue; vskey = VSattach(vg->f, (int32)vg->ref[u], "r"); if (vskey == FAIL) HGOTO_DONE(FAIL); s = VSfexist(vskey, field); if (VSdetach(vskey) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (s == 1) HGOTO_DONE((int32)vg->ref[u]); /* found. return vdata's ref */ } ret_value = (FAIL); /* field not found */ done: return ret_value; } /* Vflocate */ /******************************************************************************* NAME Vinqtagref DESCRIPTION Checks whether the given tag/ref pair already exists in the vgroup. RETURNS RETURNS TRUE if exist RETURNS FALSE if not. *******************************************************************************/ intn Vinqtagref(int32 vkey, /* IN: vgroup key */ int32 tag, /* IN: tag to check in vgroup */ int32 ref /* IN: ref to check in vgroup */) { uintn u; uint16 ttag; uint16 rref; vginstance_t *v = NULL; VGROUP *vg = NULL; intn ret_value = FALSE; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FALSE); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FALSE); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FALSE); ttag = (uint16)tag; rref = (uint16)ref; for (u = 0; u < (uintn)vg->nvelt; u++) { if ((ttag == vg->tag[u]) && (rref == vg->ref[u])) HGOTO_DONE(TRUE); } done: return ret_value; } /* Vinqtagref */ /******************************************************************************* NAME Vdeletetagref - delete tag/ref pair in Vgroup DESCRIPTION Deletes the given tag/ref pair from the Vgroup. If the given tag/ref pair does not exist in the vgroup the routine will return FAIL. Users should use Vinqtagref() to check if the tag/ref pair exists before deleting. RETURNS Returns SUCCEED if the tag/ref pair is deleted from Vgroup and FAIL if unsuccessful. Author -GeorgeV 10/10/97 *******************************************************************************/ intn Vdeletetagref(int32 vkey, /* IN: vgroup key */ int32 tag, /* IN: tag to delete in vgroup */ int32 ref /* IN: ref to delete in vgroup */) { uintn i, j; /* loop indices */ uint16 ttag; /* tag for comparison */ uint16 rref; /* ref for comparison */ vginstance_t *v = NULL; /* vgroup instance struct */ VGROUP *vg = NULL; /* in-memory vgroup struct */ intn ret_value = SUCCEED; /* NOTE: Move the following comments to the DESCRIPTION of the fcn when the issue with duplicate tag/refs is decided. If duplicate tag/ref pairs exist, then it deletes the first occurrence. If the case of duplicate tag/ref pairs the user can call Vinqtagref() to see if there are more occurrences and then delete them. */ /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* set comparison tag/ref pair */ ttag = (uint16)tag; rref = (uint16)ref; /* look through elements in vgroup */ for (i = 0; i < (uintn)vg->nvelt; i++) { /* see if element tag/ref matches search tag/ref */ if ((ttag == vg->tag[i]) && (rref == vg->ref[i])) { /* found tag/ref pair to delete. If duplicate tag/ref pairs exist, then it deletes the first occurrence. If the case of duplicate tag/ref pairs the user can call Vinqtagref() to see if there are more occurrences and then delete them.*/ /* check if element found is last one in vgroup */ if (i != ((uintn)vg->nvelt - 1)) { /* Basically shifts the contents of the array down by one. This method will preserve the order without using extra memory for storage etc. If speed/performance is an issue you can use memmove()/memcpy(). */ for (j = i; j < (uintn)vg->nvelt - 1; j++) { vg->tag[j] = vg->tag[j + 1]; vg->ref[j] = vg->ref[j + 1]; } } /* else if last one , do nothing and allow the number of elements to be decrementd. */ /* reset last ones, just to be sure */ vg->tag[(uintn)vg->nvelt - 1] = DFTAG_NULL; vg->ref[(uintn)vg->nvelt - 1] = 0; /* invalid ref */ vg->nvelt--; /* decrement number of elements in vgroup */ vg->marked = TRUE; /* mark vgroup as changed. forces re-writing of new vgroup. */ ret_value = SUCCEED; goto done; /* we are done */ } /* if found */ } /* for all items in vgroup */ /* reaching here means tag/ref pair not found. The user should have used Vinqtagref() before calling this fcn. Oh well...*/ ret_value = FAIL; done: return ret_value; } /* Vdeletetagref */ /******************************************************************************* NAME Vntagrefs DESCRIPTION Returns the number (0 or +ve integer) of tag/ref pairs in a vgroup. If error, returns FAIL RETURNS *******************************************************************************/ int32 Vntagrefs(int32 vkey /* IN: vgroup key */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); ret_value = ((vg->otag == DFTAG_VG) ? (int32)vg->nvelt : FAIL); done: return ret_value; } /* Vntagrefs */ /******************************************************************************* NAME Vnrefs DESCRIPTION Returns the number (0 or +ve integer) of tags of a given type in a vgroup. If error, returns FAIL 05-NOV-94 Quincey Koziol. RETURNS *******************************************************************************/ int32 Vnrefs(int32 vkey, /* IN: vgroup key */ int32 tag /* IN: tag to find refs for */) { vginstance_t *v = NULL; VGROUP *vg = NULL; uint16 ttag = (uint16)tag; /* alias for faster comparison */ uintn u; /* local counting variable */ int32 ret_value = 0; /* zero refs to start */ /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check it */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); for (u = 0; u < (uintn)vg->nvelt; u++) { if (ttag == vg->tag[u]) ret_value++; } done: return ret_value; } /* Vnrefs */ /******************************************************************************* NAME Vgettagrefs DESCRIPTION Returns n tag/ref pairs from the vgroup into the caller-supplied arrays tagrarray and refarray. n can be any +ve number, but arrays must be this big. NOTE: Do not confuse with Vgettagref(). RETURNS The total number of (0 or +ve #) tag/ref pairs returned. *******************************************************************************/ int32 Vgettagrefs(int32 vkey, /* IN: vgroup key */ int32 tagarray[], /* IN/OUT: tag array to fill */ int32 refarray[], /* IN/OUT: ref array to fill */ int32 n /* IN: number of pairs to return */) { int32 i; vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (n > (int32)vg->nvelt) n = (int32)vg->nvelt; for (i = 0; i < n; i++) { tagarray[i] = (int32)vg->tag[i]; refarray[i] = (int32)vg->ref[i]; } ret_value = (n); done: return ret_value; } /* Vgettagrefs */ /******************************************************************************* NAME Vgettagref DESCRIPTION Returns a specified tag/ref pair from the vgroup. User specifies an index. NOTE: Do not confuse with Vgettagrefs(). RETURNS RETURNS FAIL if OK. RETURNS SUCCEED if error. *******************************************************************************/ intn Vgettagref(int32 vkey, /* IN: vgroup key */ int32 which, /* IN: hmm */ int32 *tag, /* IN/OUT: tag to return */ int32 *ref /* IN/OUT: ref to return */) { vginstance_t *v = NULL; VGROUP *vg = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (which < 0 || which > (int32)(vg->nvelt - 1)) HGOTO_ERROR(DFE_RANGE, FAIL); /* range err */ *tag = (int32)vg->tag[which]; *ref = (int32)vg->ref[which]; done: return ret_value; } /* Vgettagref */ /******************************************************************************* NAME VQuerytag DESCRIPTION Return the tag of this Vgroup. Return 0 on failure RETURNS *******************************************************************************/ int32 VQuerytag(int32 vkey /* IN: vgroup key */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); ret_value = ((int32)vg->otag); done: return ret_value; } /* VQuerytag */ /******************************************************************************* NAME VQueryref DESCRIPTION Return the ref of this Vgroup. Return FAIL on failure RETURN *******************************************************************************/ int32 VQueryref(int32 vkey /* IN: vgroup id */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); ret_value = ((int32)vg->oref); done: return ret_value; } /* VQueryref */ /******************************************************************************* NAME Vaddtagref DESCRIPTION Inserts a tag/ref pair into the attached vgroup vg. First checks that the tag/ref is unique. (6/20/96 Maybe the original design required the uniqueness. However, the current code allows duplication if NO_DUPLICATES is not defined. The SD interface needs this feature to create SDS's with duplicated dimensions. For example a 3D SDS can have dimensions "time", "pressure" and "pressure".) If error, returns FAIL or tag/ref is not inserted. If OK, returns the total number of tag/refs in the vgroup (a +ve integer). RETURNS *******************************************************************************/ int32 Vaddtagref(int32 vkey, /* IN: vgroup key */ int32 tag, /* IN: tag to add */ int32 ref /* IN: ref to add */) { vginstance_t *v = NULL; VGROUP *vg = NULL; #ifdef NO_DUPLICATES uintn i; #endif /* NO_DUPLICATES */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); #ifdef NO_DUPLICATES /* SD interface needs duplication if two dims have the same name. So, don't remove the ifdef/endif pair. */ /* make sure doesn't already exist in the Vgroup */ for (i = 0; i < vg->nvelt; i++) if ((tag == vg->tag[i]) && (ref == vg->ref[i])) HGOTO_DONE(FAIL); #endif /* NO_DUPLICATES */ ret_value = vinsertpair(vg, (uint16)tag, (uint16)ref); done: return ret_value; } /* Vaddtagref */ /******************************************************************************* NAME vinsertpair DESCRIPTION Inserts a tag/ref pair into the attached vgroup vg. Expand the tag/ref space if necessary RETURNS Returns the total number of tag/refs in the vgroup. *******************************************************************************/ int32 vinsertpair(VGROUP *vg, /* IN: vgroup struct */ uint16 tag, /* IN: tag to insert */ uint16 ref /* IN: ref to insert */) { int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); if ((intn)vg->nvelt >= vg->msize) { vg->msize *= 2; vg->tag = (uint16 *)realloc((void *)vg->tag, vg->msize * sizeof(uint16)); vg->ref = (uint16 *)realloc((void *)vg->ref, vg->msize * sizeof(uint16)); if ((vg->tag == NULL) || (vg->ref == NULL)) HGOTO_ERROR(DFE_NOSPACE, FAIL); } vg->tag[(uintn)vg->nvelt] = tag; vg->ref[(uintn)vg->nvelt] = ref; vg->nvelt++; vg->marked = TRUE; ret_value = ((int32)vg->nvelt); done: return ret_value; } /* vinsertpair() */ /******************************************************************************* NAME Ventries DESCRIPTION returns the no of entries (+ve integer) in the vgroup vgid. vgid must be an actual id undocumented RETURNS RETURNS FAIL if error *******************************************************************************/ int32 Ventries(HFILEID f, /* IN: file handle */ int32 vgid /* IN: vgroup id */) { vginstance_t *v = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check vgroup id? */ if (vgid < 1) HGOTO_ERROR(DFE_ARGS, FAIL); if ((v = vginst(f, (uint16)vgid)) == NULL) HGOTO_ERROR(DFE_NOMATCH, FAIL); /* error */ if (v->vg != NULL) ret_value = (int32)v->vg->nvelt; else ret_value = FAIL; done: return ret_value; } /* Ventries */ /******************************************************************************* NAME Vsetname DESCRIPTION gives a name to the VGROUP vg. RETURNS RETURN VALUES: SUCCEED/FAIL *******************************************************************************/ int32 Vsetname(int32 vkey, /* IN: vgroup key */ const char *vgname /* IN: name to set for vgroup */) { vginstance_t *v = NULL; VGROUP *vg = NULL; size_t name_len; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid and if vgroup name is okay */ if (HAatom_group(vkey) != VGIDGROUP || vgname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL || vg->access != 'w') HGOTO_ERROR(DFE_BADPTR, FAIL); /* copy the name over; if name exists, overwrite it */ name_len = strlen(vgname); /* shortcut of length of the given name */ /* if name exists, release it */ free(vg->vgname); /* allocate space for new name */ vg->vgname = (char *)malloc(name_len + 1); /* check for unsuccessful allocation */ if (vg->vgname == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* copy given name after allocation succeeded, with \0 terminated */ HIstrncpy(vg->vgname, vgname, name_len + 1); vg->marked = TRUE; done: return ret_value; } /* Vsetname */ /******************************************************************************* NAME Vsetclass DESCRIPTION Assigns a class name to the VGROUP vg. RETURNS RETURN VALUES: SUCCEED for success, FAIL for failure MODIFICATION 2010/01/26 No longer truncates classname to max length of VGNAMELENMAX. *******************************************************************************/ int32 Vsetclass(int32 vkey, /* IN: vgroup key */ const char *vgclass /* IN: class to set for vgroup */) { vginstance_t *v = NULL; VGROUP *vg = NULL; size_t classname_len; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* check if class is valid */ if (vgclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check. Also check write access to vgroup */ vg = v->vg; if (vg == NULL || vg->access != 'w') HGOTO_ERROR(DFE_BADPTR, FAIL); /* * copy the class over; if class exists, overwrite it */ classname_len = strlen(vgclass); /* length of the given class name */ /* if name exists, release it */ free(vg->vgclass); /* allocate space for new name */ vg->vgclass = (char *)malloc(classname_len + 1); /* check for unsuccessful allocation */ if (vg->vgclass == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* copy given class name after allocation succeeded, with \0 terminated */ HIstrncpy(vg->vgclass, vgclass, classname_len + 1); vg->marked = TRUE; done: return ret_value; } /* Vsetclass */ /******************************************************************************* NAME Visvg DESCRIPTION Tests if an entry in the vgroup vg is a VGROUP, given the entry's id. RETURNS RETURNS TRUE if so RETURNS FALSE if not, or if error *******************************************************************************/ intn Visvg(int32 vkey, /* IN: vgroup key */ int32 id /* IN: id of entry in vgroup */) { uintn u; uint16 ID; vginstance_t *v = NULL; VGROUP *vg = NULL; intn ret_value = FALSE; /* initialize to FALSE */ /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FALSE); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FALSE); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FALSE); ID = (uint16)id; /* cast 32bit ID to 16bit id */ for (u = 0; u < (uintn)vg->nvelt; u++) { if (vg->ref[u] == ID && /* if the ids match, */ vg->tag[u] == DFTAG_VG) /* and it is a vgroup */ { HGOTO_DONE(TRUE); } } done: return ret_value; } /* Visvg */ /******************************************************************************* NAME Visvs DESCRIPTION Checks if an id in a vgroup refers to a VDATA RETURNS RETURNS 1 if so RETURNS 0 if not, or if error. *******************************************************************************/ intn Visvs(int32 vkey, /* IN: vgroup key */ int32 id /* IN: id of entry in vgroup */) { intn i; vginstance_t *v = NULL; VGROUP *vg = NULL; intn ret_value = FALSE; /* initialize to false */ /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FALSE); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FALSE); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FALSE); i = (intn)vg->nvelt; while (i) { if (vg->ref[--i] == (uint16)id && vg->tag[i] == VSDESCTAG) HGOTO_DONE(TRUE); } done: return ret_value; } /* Visvs */ /******************************************************************************* NAME Vgetid DESCRIPTION Given a vgroup's id, returns the next vgroup's id in the file f . The call Vgetid(f,-1) returns the id of the FIRST vgroup in the file. This id is actually the "ref" of the vgroup "tag/ref". RETURNS RETURNS -1 if error RETURNS the next vgroup's id (0 or +ve integer). *******************************************************************************/ int32 Vgetid(HFILEID f, /* IN: file handle */ int32 vgid /* IN: vgroup id */) { vginstance_t *v = NULL; vfile_t *vf = NULL; void **t = NULL; int32 key; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup id is valid */ if (vgid < -1) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vgroup file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, FAIL); if (vgid == (-1)) { /* check for magic value to return the first group */ if (vf->vgtree == NULL) HGOTO_DONE(FAIL); /* just return FAIL, no error */ if (NULL == (t = (void **)tbbtfirst(vf->vgtree->root))) HGOTO_DONE(FAIL); /* just return FAIL, no error */ /* t is assumed to valid at this point */ v = (vginstance_t *)*t; /* get actual pointer to the vginstance_t */ HGOTO_DONE((int32)v->ref); /* rets 1st vgroup's ref */ } else /* vgid >= 0 */ { /* look in vgtab for vgid */ /* tbbtdfind returns a pointer to the vginstance_t pointer */ key = (int32)vgid; t = (void **)tbbtdfind(vf->vgtree, (void *)&key, NULL); if (t == NULL || t == (void **)tbbtlast(vf->vgtree->root)) { /* couldn't find the old vgid or at the end */ ret_value = (FAIL); } else if (NULL == (t = (void **)tbbtnext((TBBT_NODE *)t))) /* get the next node in the tree */ ret_value = (FAIL); else { v = (vginstance_t *)*t; /* get actual pointer to the vginstance_t */ ret_value = (int32)v->ref; /* rets next vgroup's ref */ } /* end else */ } done: return ret_value; } /* Vgetid */ /******************************************************************************* NAME Vgetnext DESCRIPTION Given the id of an entry from a vgroup vg, looks in vg for the next entry after it, and returns its id. The call Vgetnext (vg,-1) returns the id of the FIRST entry in the vgroup. Vgetnext will look at only VSET elements in the vgroup. To look at all links in a vgroup, use Vgettagrefs instead. This id is actually the "ref" of the entry's "tag/ref". RETURNS RETURNS -1 if error RETURNS the id of the next entry( 0 or +ve integer) in the vgroup. *******************************************************************************/ int32 Vgetnext(int32 vkey, /* IN: vgroup key */ int32 id /* IN: id of entry in vgroup */) { uintn u; vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* check if vgroup is valid. Also check if 'id' is valid */ if (HAatom_group(vkey) != VGIDGROUP || id < (-1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check. */ vg = v->vg; if ((vg == NULL) || (vg->otag != DFTAG_VG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* hmm..if no elements we return FAIL */ if (vg->nvelt == 0) HGOTO_DONE(FAIL); /* if id is '-1' then the first entry in the vgroup is returned if it is a vgroup ? */ if (id == -1) { if ((vg->tag[0] == DFTAG_VG) || (vg->tag[0] == VSDESCTAG)) HGOTO_DONE((int32)vg->ref[0]); /* id of first entry */ } /* end if */ /* look in vgroup for 'id' */ for (u = 0; u < (uintn)vg->nvelt; u++) { /* only look for vgroups? */ if ((vg->tag[u] == DFTAG_VG) || (vg->tag[u] == VSDESCTAG)) { if (vg->ref[u] == (uint16)id) { if (u == (uintn)(vg->nvelt - 1)) { HGOTO_DONE(FAIL); } /* end if */ else { if ((vg->tag[u + 1] == DFTAG_VG) || (vg->tag[u + 1] == VSDESCTAG)) { HGOTO_DONE((int32)vg->ref[u + 1]); /* return the id of next entry */ } else { HGOTO_DONE(FAIL); } } /* end else */ } /* end if */ } /* end if */ } done: return ret_value; } /* Vgetnext */ /******************************************************************************* NAME Vgetnamelen DESCRIPTION Retrieves the length of the vgroup's name. RETURNS Returns SUCCEED/FAIL BMR - 2006/09/10 *******************************************************************************/ int32 Vgetnamelen(int32 vkey, /* IN: vgroup key */ uint16 *name_len /* OUT: length of vgroup's name */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid and the vgname */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* * Obtain the name length */ /* if there is no name... */ if (vg->vgname == NULL) *name_len = 0; /* if name had been set... */ else { size_t temp_len = strlen(vg->vgname); /* shortcut */ /* return name's length if it is a valid value */ if (temp_len >= 0) *name_len = (uint16)temp_len; else /* unlikely, but just in case */ ret_value = FAIL; } done: return ret_value; } /* Vgetnamelen */ /******************************************************************************* NAME Vgetclassnamelen DESCRIPTION Retrieves the length of the vgroup's name. RETURNS Returns SUCCEED/FAIL BMR - 2006/09/10 *******************************************************************************/ int32 Vgetclassnamelen(int32 vkey, /* IN: vgroup key */ uint16 *classname_len /* OUT: length of vgroup's classname */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid and the vgname */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* obtain the class name length */ if (vg->vgclass == NULL) *classname_len = 0; /* if name had been set... */ else { size_t temp_len = strlen(vg->vgclass); /* shortcut */ /* return class name's length if it is a valid value */ if (temp_len >= 0) *classname_len = (uint16)temp_len; else /* unlikely, but just in case */ ret_value = FAIL; } done: return ret_value; } /* Vgetclassnamelen */ /******************************************************************************* NAME Vgetname DESCRIPTION returns the vgroup's name ASSUME that vgname has been allocated large enough to hold the name RETURNS SUCCEED / FAIL *******************************************************************************/ int32 Vgetname(int32 vkey, /* IN: vgroup key */ char *vgname /* IN/OUT: vgroup name */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid and the vgname */ if (HAatom_group(vkey) != VGIDGROUP || vgname == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* copy vgroup name over if it had been set */ if (vg->vgname != NULL) strcpy(vgname, vg->vgname); else vgname[0] = '\0'; done: return ret_value; } /* Vgetname */ /******************************************************************************* NAME Vgetclass DESCRIPTION returns the vgroup's class name ASSUME that vgclass has been allocated large enough to hold the name RETURNS SUCCEED/FAIL *******************************************************************************/ int32 Vgetclass(int32 vkey, /* IN: vgroup key */ char *vgclass /* IN/OUT: vgroup class */) { vginstance_t *v = NULL; VGROUP *vg = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid and also vgroup class */ if (HAatom_group(vkey) != VGIDGROUP || vgclass == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* copy class over if it had been set */ if (vg->vgclass != NULL) strcpy(vgclass, vg->vgclass); else vgclass[0] = '\0'; done: return ret_value; } /* Vgetclass */ /******************************************************************************* NAME Vinquire DESCRIPTION General inquiry routine for VGROUP. output parameters: nentries - no of entries in the vgroup vgname - the vgroup's name RETURNS RETURNS FAIL if error RETURNS SUCCEED if ok *******************************************************************************/ intn Vinquire(int32 vkey, /* IN: vgroup key */ int32 *nentries, /* IN/OUT: number of entries in vgroup */ char *vgname /* IN/OUT: vgroup name */) { vginstance_t *v = NULL; VGROUP *vg = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* check tag of vgroup */ if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); /* copy vgroup name if requested. Assumes 'vgname' has sufficient space */ if (vgname != NULL) strcpy(vgname, vg->vgname); /* set number of entries in vgroup if requested */ if (nentries != NULL) *nentries = (int32)vg->nvelt; done: return ret_value; } /* Vinquire */ /******************************************************************************* NAME Vopen DESCRIPTION This routine will replace the code segment " Hopen(); Vinitialize(f)". Thus, if Vopen is used, do not call Vinitialize after that. Similar to Hopen(). This routine opens the HDF file and initializes it for Vset operations. See also Vclose(). By: Jason Ng 10 Aug 92 RETURNS RETURN VALUE: if error: -1 (FAIL). if successful: the id of the file (>0). *******************************************************************************/ HFILEID Vopen(char *path, /* IN: file name */ intn acc_mode, /* IN: type of file access */ int16 ndds /* IN: number of DD in a block */) { HFILEID ret_value = SUCCEED; /* clear error stack */ HEclear(); /* use 'Hopen' to open file */ if ((ret_value = Hopen(path, acc_mode, ndds)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); /* Initialize Vxx interface */ if (Vinitialize(ret_value) == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* Vopen() */ /******************************************************************************* NAME Vclose DESCRIPTION This routine will replace the code segment " Vfinish(f); Hclose(f);". Thus, if Vclose is used, do not call Vfinish before that. This routine closes the HDF file, after it has freed all memory and updated the file. See also Vopen(). RETURNS RETURN VALUE: intn status - result of Hopen(). *******************************************************************************/ intn Vclose(HFILEID f /* IN: file handle */) { intn ret_value = SUCCEED; if (Vfinish(f) == FAIL) ret_value = FAIL; else ret_value = (Hclose(f)); return ret_value; } /* Vclose() */ /******************************************************************************* NAME Vdelete DESCRIPTION Remove a Vgroup from its file. This function will both remove the Vgoup from the internal Vset data structures as well as from the file. 'vgid' here is actually the ref of the Vgroup. (i.e. it calls tbbt_delete() and Hdeldd()) RETURNS Return FAIL / SUCCEED *******************************************************************************/ int32 Vdelete(int32 f, /* IN: file handle */ int32 vgid /* IN: vgroup id i.e. ref */) { void *v; vfile_t *vf = NULL; void **t = NULL; int32 key; filerec_t *file_rec = NULL; /* file record */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check vgroup id is valid */ if (vgid < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* convert file id to file record and check for validity */ file_rec = HAatom_object(f); if (BADFREC(file_rec)) HGOTO_ERROR(DFE_ARGS, FAIL); /* check for write-permission to file*/ if (!(file_rec->access & DFACC_WRITE)) HGOTO_ERROR(DFE_BADACC, FAIL); /* get vgroup file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, FAIL); /* find vgroup node in TBBT using it's ref */ key = (int32)vgid; if ((t = (void **)tbbtdfind(vf->vgtree, (void *)&key, NULL)) == NULL) HGOTO_DONE(FAIL); /* remove vgroup node from TBBT */ if ((v = tbbtrem((TBBT_NODE **)vf->vgtree, (TBBT_NODE *)t, NULL)) != NULL) vdestroynode((void *)v); /* Delete vgroup from file */ if (Hdeldd(f, DFTAG_VG, (uint16)vgid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* Vdelete */ /******************************************************************************* NAME VIstart -- V-level initialization routine DESCRIPTION Register the shut-down routines (VPshutdown & VSPshutdown) for call with atexit. RETURNS Returns SUCCEED/FAIL *******************************************************************************/ static intn VIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&VPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Install atexit() library cleanup routine */ if (HPregister_term_func(&VSPshutdown) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return ret_value; } /* end VIstart() */ /******************************************************************************* NAME VPshutdown -- Terminate various static buffers. DESCRIPTION Free various buffers allocated in the V routines. RETURNS Returns SUCCEED/FAIL *******************************************************************************/ intn VPshutdown(void) { VGROUP *v = NULL; vginstance_t *vg = NULL; intn ret_value = SUCCEED; if (vtree != NULL) { /* Free the vfile tree */ tbbtdfree(vtree, vfdestroynode, NULL); /* Destroy the atom groups for Vdatas and Vgroups */ if (HAdestroy_group(VSIDGROUP) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (HAdestroy_group(VGIDGROUP) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); vtree = NULL; } /* Release the vdata free-list if it exists */ if (vgroup_free_list != NULL) { while (vgroup_free_list != NULL) { v = vgroup_free_list; vgroup_free_list = vgroup_free_list->next; v->next = NULL; free(v); } } /* Release the vginstance free-list if it exists */ if (vginstance_free_list != NULL) { while (vginstance_free_list != NULL) { vg = vginstance_free_list; vginstance_free_list = vginstance_free_list->next; vg->next = NULL; free(vg); } } if (Vgbuf != NULL) { free(Vgbuf); Vgbuf = NULL; Vgbufsize = 0; } done: return ret_value; } /* end VPshutdown() */ /******************************************************************************* NAME Vgisinternal -- Determine if a vgroup is internally created by the lib RETURNS Returns TRUE (1) if vkey is a vgroup that is internally created by the library, FALSE (0) otherwise, and FAIL if failure occurs. DESCRIPTION Checks the class name of the given vgroup against the list of internal vgroup class names, HDF_INTERNAL_VGS. There is an exception where the vgroup does not have a class and has a name set to GR_NAME. The vgroup is actually an internal vgroup, representing a GR file. It was only a very brief gap in the revisions where this scenario can happen, yet there is at least one test file generated during that period, grtdfui83.hdf. *******************************************************************************/ intn Vgisinternal(int32 vkey /* vgroup's identifier */) { vginstance_t *v = NULL; VGROUP *vg = NULL; intn is_internal = FALSE; intn ret_value = FALSE; /* clear error stack */ HEclear(); /* Gheck if vgroup is valid */ if (HAatom_group(vkey) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get instance of vgroup */ if (NULL == (v = (vginstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* Get vgroup itself and check */ vg = v->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Check for internal class name if it has been set */ if (vg->vgclass != NULL) { int ii; /* If this class name is one of the internal class name then return TRUE, otherwise, return FALSE */ ii = 0; while (ii < HDF_NUM_INTERNAL_VGS && is_internal == FALSE) { size_t len = strlen(HDF_INTERNAL_VGS[ii]); if (strncmp(HDF_INTERNAL_VGS[ii], vg->vgclass, len) == 0) is_internal = TRUE; ii++; } } else /* no class defined */ { /* If class name is not set, check the vgroup's name to catch the case when the vgroup's name was set to GR_NAME. See HDFFR-1297 (?) for details. -BMR 2012/1/6 */ /* Check vgroup name */ if (vg->vgname != NULL) if (strncmp(vg->vgname, GR_NAME, strlen(GR_NAME)) == 0) is_internal = TRUE; } ret_value = is_internal; done: return ret_value; } /* Vgisinternal */ /******************************************************************************* NAME Visinternal -- Determine if a vgroup's class name is for internal only RETURNS Returns TRUE (1) if "classname" is one of the class names used for vgroups created by the the library and FALSE (0) otherwise. DESCRIPTION Checks the given name against the list of internal vgroup class names, HDF_INTERNAL_VGS. *******************************************************************************/ intn Visinternal(const char *classname /* vgroup's class name */) { int i; intn ret_value = FALSE; /* Check if this class name is one of the internal class name and return TRUE, otherwise, return FALSE */ for (i = 0; i < HDF_NUM_INTERNAL_VGS; i++) { if (strncmp(HDF_INTERNAL_VGS[i], classname, strlen(HDF_INTERNAL_VGS[i])) == 0) { ret_value = TRUE; break; } } return ret_value; } /******************************************************************************* NAME Vgetvgroups -- Get user-created vgroups in a file or in a vgroup RETURNS The number of user-created vdatas if successful and FAIL, otherwise. DESCRIPTION Vgetvgroups retrieves n_vgs vgroups by their reference numbers via the caller-supplied array refarray. When a vgroup id is specified, Vgetvgroups will only retrieve the vgroups immediately belong to the specified vgroup, and not any sub-vgroups. The parameter n_vgs provides the number of values that the refarray list can hold and can be any positive number smaller than MAX_REF (65535). If n_vgs is larger than the actual number of user-created vgroups, then only the actual number of reference numbers will be retrieved. The parameter start_vg indicates the vgroup number to start at. - When start_vg is 0, the retrieval starts at the beginning. - When start_vg is between 0 and the number of user-created vgroups in the file or the specified vgroup, Vgetvgroups will start retrieving vgroups from the vgroup number start_vg. - When start_vg is greater than the number of user-created vgroups in the file or the vgroup, Vgetvgroups will return FAIL. When refarray argument is NULL, Vgetvgroups will return the actual number of user-created vgroups without further processing. This allows application to find out the size of the array for proper allocation. BMR - 2010/07/03 *******************************************************************************/ intn Vgetvgroups(int32 id, /* IN: file id or vgroup id */ uintn start_vg, /* IN: reference number to start retrieving */ uintn n_vgs, /* IN: number of user-created vgs to return */ uint16 *refarray /* IN/OUT: ref array to fill */) { vginstance_t *vg_inst = NULL; int32 vg_ref; intn nactual_vgs, user_vgs, ii; VGROUP *vg = NULL; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Make sure that proper size is passed in for the non-null array */ if (refarray != NULL && n_vgs == 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if id is a file id */ if (HAatom_group(id) == FIDGROUP) { /* Look through all vgs, searching for user-created vgroups until no more vgroups in the file or the number of vgroups to be retrieved is reached */ nactual_vgs = 0; /* number of user-created vgroups to be retrieved */ user_vgs = 0; /* number of user-created vgroups */ vg_ref = Vgetid(id, -1); /* get ref number of first vg in the file */ while ((vg_ref != FAIL) /* there are more vgroups */ && ((nactual_vgs < n_vgs) || (n_vgs == 0)) && (nactual_vgs <= user_vgs)) { /* Get instance of vgroup; if it's not found, continue to look for other vgroups */ if ((vg_inst = vginst(id, (uint16)vg_ref)) == NULL) continue; /* Get vgroup itself and check */ vg = vg_inst->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* If this vgroup either does not have a class name, which means it is a user-created vgroup, or has a class name and the class name is not one of the internal class names, then record its ref# according to caller's specification of where to start and how many to retrieve */ if (vg->vgclass == NULL || (vg->vgclass != NULL && Visinternal(vg->vgclass) == FALSE)) { /* Make sure to count only from vgroup number start_vg */ if (user_vgs >= start_vg) /* If caller requests for reference numbers */ if (refarray != NULL) { refarray[nactual_vgs] = (uint16)vg_ref; /* Increment the actual number of user-created vgs to be retrieved */ nactual_vgs++; } /* Increment the number of user-created vgs */ user_vgs++; } /* Move forward to the next vgroup in the file */ vg_ref = Vgetid(id, vg_ref); } /* while more vgroups in file */ /* Flag if start_vg is beyond the number of user-created vgroups */ if (user_vgs < start_vg) HGOTO_ERROR(DFE_ARGS, FAIL); /* If caller is asking for the number of vgroups only, return the number of user-created vgroups, otherwise, return the number of vgroups that are actually stored in refarray */ if (refarray == NULL) ret_value = user_vgs; else ret_value = nactual_vgs; } /* file id is given */ /* Check if the given is a vgroup id */ else if (HAatom_group(id) == VGIDGROUP) { /* vgroup id is given */ /* Get the number of sub-vgroups belong to this vgroup */ int32 n_elements = Vntagrefs(id); if (n_elements == FAIL) HGOTO_ERROR(DFE_GENAPP, FAIL); /* Get instance of vgroup */ if (NULL == (vg_inst = (vginstance_t *)HAatom_object(id))) HGOTO_ERROR(DFE_NOVS, FAIL); /* Get vgroup itself and check */ vg = vg_inst->vg; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* Go through the tag list vg->tag and find user-created vgroups, until no more sub-vgroups or the number of vgroups to be retrieved is reached */ nactual_vgs = 0; /* number of user-created vgroups to be retrieved */ user_vgs = 0; /* number of user-created vgroups */ for (ii = 0; ii < n_elements && ((nactual_vgs < n_vgs) || (n_vgs == 0)) && (nactual_vgs <= user_vgs); ii++) { /* If an element is a vgroup, then get access to it */ if (vg->tag[ii] == DFTAG_VG) { vginstance_t *subv_inst = NULL; VGROUP *subvg = NULL; /* Get instance of vgroup; if it's not found, continue to other vgroups */ if ((subv_inst = vginst(vg->f, (uint16)vg->ref[ii])) == NULL) continue; /* Get vgroup itself and check */ subvg = subv_inst->vg; if (subvg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); /* If this vgroup is internally created by the lib, then just skip it; otherwise, record its ref# according to caller's specification of where to start and how many to retrieve */ if (subvg->vgclass != NULL) { /* Make sure this vgroup is not an internal one */ if (Visinternal(subvg->vgclass) == FALSE) { /* Make sure to count only from vg number start_vg */ if (user_vgs >= start_vg) /* If caller requests for reference numbers */ if (refarray != NULL) { refarray[nactual_vgs] = (uint16)vg->ref[ii]; /* Increment the actual number of user-created vgs to be retrieved */ nactual_vgs++; } /* Increment the number of user-created vgs */ user_vgs++; } } } /* this sub element is a vgroup */ } /* for */ /* Flag if start_vg is beyond the number of user-created vgroups */ if (user_vgs < start_vg) HGOTO_ERROR(DFE_ARGS, FAIL); /* If caller is asking for the number of vgroups only, return the number of user-created vgroups, otherwise, return the number of vgroups that are actually stored in refarray */ if (refarray == NULL) ret_value = user_vgs - (intn)start_vg; else ret_value = nactual_vgs; } /* vgroup id is given */ else { fprintf(stderr, "The given ID must be a file ID or a vgroup ID\n"); HGOTO_ERROR(DFE_ARGS, FAIL); } done: return ret_value; } /* Vgetvgroups */ hdf4-hdf4.3.1/hdf/src/vhi.c000066400000000000000000000156611503061704500153220ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * File * vhi.c * HDF Vset high-level access routines VHxxxx * Feb 92 - update to use H-routines * Routines * VHstoredata -- stores data in a field of a vdata in an HDF file * VHstoredatam -- stores data in a aggregated-typed field of a vdata * VHmakegroup -- makes a vgroup from tag/ref pairs */ #include "hdf_priv.h" #include "vg_priv.h" /* ------------------------ VHstoredata ------------------------------- NAME VHstoredata -- stores data in a field of a new vdata USAGE int32 VHstoredata (f, field, buf, n, datatype, vsname, vsclass) HFILEID f; IN: File id, returned from Hopen. char * field; IN: Name of the field. const uint8 *buf; IN: Buffer of data to be stored in the field. int32 n; IN: Number of elements in buf to be written. inter datatype; IN: Number type of the data to be written. char * vsname; IN: Name of the new vdata. char * vsclass; IN: Class of the new vdata. RETURNS On success returns reference number of the new vdata, a positive integer; on failure returns -1. DESCRIPTION Stores 'n' elements of data from 'buf' as a field 'field' in a new vdata called 'vsname' into the already opened HDF file (with file id 'f'). The datatype variable must be specified as a valid HDF type; n should not be zero or negative. Returns -1 if error; ref of that new vdata (a +ve integer) if successful. ------------------------------------------------------------------------- */ int32 VHstoredata(HFILEID f, const char *field, const uint8 *buf, int32 n, int32 datatype, const char *vsname, const char *vsclass) { int32 order = 1; int32 ret_value; ret_value = ((int32)VHstoredatam(f, field, buf, n, datatype, vsname, vsclass, order)); return ret_value; } /* end VHstoredata */ /* ----------------------- VHstoredatam ---------------------------- NAME VHstoredatam -- Same as VHstoredata but allows aggregate-typed field. USAGE int32 VHstoredata (f, field, buf, n, datatype, vsname, vsclass, order) HFILEID f; IN: File id, returned from Hopen. char * field; IN: Name of the field. uint8 buf[]; IN: Buffer of data to be stored in the field. int32 n; IN: Number of elements in buf to be written. inter datatype; IN: Numter type of the data to be written. char * vsname; IN: Name of the new vdata. char * vsclass; IN: Class of the new vdata. int32 order; IN: Order of the field. RETURNS On success returns reference number of the new vdata, a positive integer; on failure returns -1. DESCRIPTION Stores 'n' elements of data from 'buf' as a field 'field' in a new vdata called 'vsname' into the already opened HDF file (with file id 'f'). The datatype variable must be specified as a valid HDF type; n should not be zero or negative. Returns -1 if error; ref of that new vdata (a +ve integer) if successful. --------------------------------------------------------------------------- */ int32 VHstoredatam(HFILEID f, const char *field, const uint8 *buf, int32 n, int32 datatype, const char *vsname, const char *vsclass, int32 order) { int32 ref; int32 vs; int32 ret_value = SUCCEED; if ((vs = VSattach(f, -1, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (VSfdefine(vs, field, datatype, order) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if (VSsetfields(vs, field) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if (n != VSwrite(vs, buf, n, FULL_INTERLACE)) HGOTO_ERROR(DFE_BADATTACH, FAIL); if (VSsetname(vs, vsname) == FAIL) HGOTO_ERROR(DFE_BADVSNAME, FAIL); if (VSsetclass(vs, vsclass) == FAIL) HGOTO_ERROR(DFE_BADVSCLASS, FAIL); ref = VSQueryref(vs); if (VSdetach(vs) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); ret_value = ((int32)ref); done: return ret_value; } /* VHstoredatam */ /* ------------------------ VHmakegroup ------------------------------- */ /* NAME VHmakegroup -- Creates a vgroup to store pairs of tag/ref. USAGE int32 VHmakegroup (f, tagarray, refarray , n, vgname, vgclass) HFILEID f; IN: File id, returned from Hopen. int32 tagarray[]; IN: Array of tags to be stored in the vgroup. int32 refarray[]; IN: Array of refs to be stored in the vgroup. int32 n; IN: Number of tags/refs in the tagarray/refarray. char * vgname; IN: Name of the new vgroup. char * vgclass; IN: Class of the new vgroup. RETURNS On success returns reference number of the new vgroup, a positive integer; on failure returns -1. DESCRIPTION Takes an array of tags and and array of refs and create a vgroup to store them. You tell it how many tag/ref pairs there are. You must also give the vgroup a name.i Creating EMPTY vgroups is allowed. VHmakegroup does bot check if a tag/ref is valid or exist, but ALL tag/ref pairs MUST be unique. Returns -1 if error; ref of the new vgroup (a +ve integre) if ok. --------------------------------------------------------------------------- */ int32 VHmakegroup(HFILEID f, int32 tagarray[], int32 refarray[], int32 n, const char *vgname, const char *vgclass) { int32 ref, i; int32 vg; int32 ret_value = SUCCEED; if ((vg = Vattach(f, -1, "w")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (vgname != NULL) if (Vsetname(vg, vgname) == FAIL) HGOTO_ERROR(DFE_BADVGNAME, FAIL); if (vgclass != NULL) if (Vsetclass(vg, vgclass) == FAIL) HGOTO_ERROR(DFE_BADVGCLASS, FAIL); for (i = 0; i < n; i++) { if (Vaddtagref(vg, tagarray[i], refarray[i]) == FAIL) HGOTO_ERROR(DFE_CANTADDELEM, FAIL); } ref = VQueryref(vg); if (Vdetach(vg) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); ret_value = (ref); done: return ret_value; } /* VHmakegroup */ /* ------------------------------------------------------------------ */ hdf4-hdf4.3.1/hdf/src/vio.c000066400000000000000000001244201503061704500153230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** file - vio.c Part of the HDF Vset interface. VDATAs are handled by routines in here. static functions manipulate vsdir and are used only within this file. static data structures in here pertain to vdatas in vsdir only. LOCAL ROUTINES VSIget_vdata_node -- allocate a new VDATA record VSIrelease_vdata_node -- Releases a vdata node VSIget_vsinstance_node -- allocate a new vsinstance_t record VSIrelease_vsinstance_node -- Releases a vsinstance node LIBRARY PRIVATE ROUTINES VSPhshutdown -- shutdown the Vset interface EXPORTED ROUTINES vinst -- Looks thru vstab for vsid and return the addr of the vdata instance where vsid is found. vexistvs -- Tests if a vdata with id vsid is in the file's vstab. vpackvs -- Packs a VDATA structure into a compact form suitable for storing in the HDF file. vunpackvs -- Convert a packed form(from HDF file) to a VDATA structure. This routine will also initialize the VDATA structure as much as it can. vsdestroynode -- Frees B-Tree nodes. VSPgetinfo -- Read in the "header" information about the Vdata. VSattach -- Attaches/Creates a new vs in vg depending on "vsid" value. VSdetach -- Detaches vs from vstab. VSappendable -- Make it possible to append unlimitedly to an existing VData. VSgetid -- Returns the id of the next VDATA from the file. VSQuerytag -- Return the 'otag' of the given Vdata. VSQueryref -- Return the ref of the given Vdata. vswritelist -- Return the writelist of a Vdata. VSgetversion -- Return the version number of a Vdata. VSdelete -- Remove a Vdata from its file. This function will both remove the Vdata from the internal Vset data structures as well as from the file. NOTE: Another pass needs to made through this file to update some of the comments about certain sections of the code. -GV 9/8/97 *************************************************************************/ #include "hdf_priv.h" #include "vg_priv.h" /* Private Function Prototypes */ static intn vunpackvs(VDATA *vs, uint8 buf[], int32 len); /* Temporary buffer for I/O */ static uint32 Vhbufsize = 0; static uint8 *Vhbuf = NULL; /* Pointers to the VDATA & vsinstance node free lists */ static VDATA *vdata_free_list = NULL; static vsinstance_t *vsinstance_free_list = NULL; /* vpackvs is prototyped in vg.h since vconv.c needs to call it */ /******************************************************************************* NAME VSIget_vdata_node -- allocate a new VDATA record DESCRIPTION Return an pointer to a new VDATA to use for a new VSID. RETURNS returns VDATA record pointer or NULL if failed. *******************************************************************************/ VDATA * VSIget_vdata_node(void) { VDATA *ret_value = NULL; /* clear error stack */ HEclear(); /* Grab from free list if possible */ if (vdata_free_list != NULL) { ret_value = vdata_free_list; vdata_free_list = vdata_free_list->next; } else /* allocate a new node */ { if ((ret_value = (VDATA *)malloc(sizeof(VDATA))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ /* Initialize to zeros */ memset(ret_value, 0, sizeof(VDATA)); done: return ret_value; } /* VSIget_vdata_node */ /****************************************************************************** NAME VSIrelease_vdata_node -- Releases a vdata node DESCRIPTION Puts an VDATA node into the free list RETURNS No return value *******************************************************************************/ void VSIrelease_vdata_node(VDATA *vs /* IN: vdata to release */) { /* Insert the atom at the beginning of the free list */ vs->next = vdata_free_list; vdata_free_list = vs; } /* end VSIrelease_vdata_node() */ /******************************************************************************* NAME VSIget_vsinstance_node -- allocate a new vsinstance_t record DESCRIPTION Return an pointer to a new VDATA to use for a new VSID. RETURNS returns vsinstance_t pointer or NULL if failed. *******************************************************************************/ vsinstance_t * VSIget_vsinstance_node(void) { vsinstance_t *ret_value = NULL; /* clear error stack */ HEclear(); /* Grab from free list if possible */ if (vsinstance_free_list != NULL) { ret_value = vsinstance_free_list; vsinstance_free_list = vsinstance_free_list->next; } else /* allocate a new vsinstance record */ { if ((ret_value = (vsinstance_t *)malloc(sizeof(vsinstance_t))) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* end else */ /* Initialize to zeros */ memset(ret_value, 0, sizeof(vsinstance_t)); done: return ret_value; } /* VSIget_vsinstance_node */ /****************************************************************************** NAME VSIrelease_vsinstance_node -- Releases a vsinstance node DESCRIPTION Puts a vsinstance node into the free list RETURNS No return value *******************************************************************************/ void VSIrelease_vsinstance_node(vsinstance_t *vs /* IN: vinstance node to release */) { /* Insert the atom at the beginning of the free list */ vs->next = vsinstance_free_list; vsinstance_free_list = vs; } /* end VSIrelease_vsinstance_node() */ /******************************************************************************* NAME VSPhshutdown - shutdown the Vset interface DESCRIPTION For completeness, when the VSet interface is shut-down, free the Vhbuf. RETURNS Returns SUCCEED/FAIL COMMENTS, BUGS, ASSUMPTIONS Should only ever be called by the "atexit" function HDFend *******************************************************************************/ intn VSPhshutdown(void) { intn ret_value = SUCCEED; VDATA *v = NULL; vsinstance_t *vs = NULL; /* Release the vdata free-list if it exists */ if (vdata_free_list != NULL) { while (vdata_free_list != NULL) { v = vdata_free_list; vdata_free_list = vdata_free_list->next; v->next = NULL; free(v); } } /* Release the vsinstance free-list if it exists */ if (vsinstance_free_list != NULL) { while (vsinstance_free_list != NULL) { vs = vsinstance_free_list; vsinstance_free_list = vsinstance_free_list->next; vs->next = NULL; free(vs); } } /* free buffer */ if (Vhbuf != NULL) { free(Vhbuf); Vhbuf = NULL; Vhbufsize = 0; } /* free the parsing buffer */ ret_value = VPparse_shutdown(); return ret_value; } /* end VSPhshutdown() */ /******************************************************************************* NAME vsint DESCRIPTION Looks thru vstab for vsid and return the addr of the vdata instance where vsid is found. RETURNS RETURNS NULL if error or not found. RETURNS vsinstance_t pointer if ok. *******************************************************************************/ vsinstance_t * vsinst(HFILEID f, /* IN: File handle */ uint16 vsid /* IN: vdata id i.e. ref */) { void **t = NULL; vfile_t *vf = NULL; int32 key; vsinstance_t *ret_value = NULL; /* FAIL */ /* clear error stack */ HEclear(); /* Get Vdata file record? */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, NULL); /* tbbtdfind returns a pointer to the vsinstance_t pointer */ key = (int32)vsid; if ((t = (void **)tbbtdfind(vf->vstree, &key, NULL)) == NULL) HGOTO_ERROR(DFE_NOMATCH, NULL); /* return the actual vsinstance_t ptr */ ret_value = ((vsinstance_t *)*t); done: return ret_value; } /* vsinst */ /******************************************************************************* NAME vexistvs DESCRIPTION Tests if a vdata with id vsid is in the file's vstab. RETURNS returns FAIL if not found, returns TRUE if found. *******************************************************************************/ int32 vexistvs(HFILEID f, /* IN: file handle */ uint16 vsid /* IN: vdata id i.e. ref */) { return (NULL == vsinst(f, vsid)) ? FAIL : TRUE; } /* vexistvs */ /* ------------------------------------------------------------------ */ /* The following 2 routines, vpackvs and vunpackvs, packs and unpacks a VDATA structure into a compact form suitable for storing in the HDF file. */ /**** CONTENTS of VS stored in HDF file with tag VSDESCTAG: int16 interlace int32 nvertices uint16 vsize int16 nfields uint16 isize[1..nfields] (internal size of each field) uint16 off[1..nfields] (internal offset of each field) char fname[1..nfields][FIELDNAMELENMAX] char vsname[VSNAMELENMAX] char vsclass[VSNAMELENMAX] uint16 extag, exref uint32 flags (for vset version 4 or higher ) int32 nattrs (if bit0 of flags is set) uint16 atags[1..nattrs], arefs[1..nattrs] int16 version, more ****/ /* ------------------------------- vpackvs ----------------------------------- */ /* The following 2 static routines, vpackvs and vunpackvs, packs and unpacks a VDATA structure into a compact form suitable for storing in the HDF file. */ /**** CONTENTS of VS stored in HDF file with tag DFTAG_VH: int16 interlace int32 nvertices uint16 vsize int16 nfields uint16 isize[1..nfields] (internal size of each field) uint16 off[1..nfields] (internal offset of each field) char fname[1..nfields][FIELDNAMELENMAX] char vsname[VSNAMELENMAX] char vsclass[VSNAMELENMAX] ****/ /******************************************************************************* NAME vpackvs DESCRIPTION convert a vs struct to a vspack suitable for storage in a HDF file RETURNS always SUCCEED? *******************************************************************************/ intn vpackvs(VDATA *vs, /* IN/OUT: */ uint8 buf[], /* IN: */ int32 *size /* OUT: */) { int32 i; int16 slen; uint8 *bb = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); bb = &buf[0]; /* save the interlace */ INT16ENCODE(bb, vs->interlace); /* save nvertices */ INT32ENCODE(bb, vs->nvertices); /* save ivsize */ UINT16ENCODE(bb, vs->wlist.ivsize); /* save nfields */ INT16ENCODE(bb, vs->wlist.n); /* Skip over all the "wheel-spinning" for 0-field vdatas */ if (vs->wlist.n > 0) { for (i = 0; i < vs->wlist.n; i++) /* save the type */ INT16ENCODE(bb, vs->wlist.type[i]); /* save the isize */ for (i = 0; i < vs->wlist.n; i++) UINT16ENCODE(bb, vs->wlist.isize[i]); for (i = 0; i < vs->wlist.n; i++) /* save the offset */ UINT16ENCODE(bb, vs->wlist.off[i]); for (i = 0; i < vs->wlist.n; i++) /* save the order */ UINT16ENCODE(bb, vs->wlist.order[i]); /* save each field length and name - omit the null */ for (i = 0; i < vs->wlist.n; i++) { slen = strlen(vs->wlist.name[i]); INT16ENCODE(bb, slen); strcpy((char *)bb, vs->wlist.name[i]); bb += slen; } } /* end if */ /* save the vsnamelen and vsname - omit the null */ slen = strlen(vs->vsname); INT16ENCODE(bb, slen); strcpy((char *)bb, vs->vsname); bb += slen; /* save the vsclasslen and vsclass- omit the null */ slen = strlen(vs->vsclass); INT16ENCODE(bb, slen); strcpy((char *)bb, vs->vsclass); bb += slen; /* save the expansion tag/ref pair */ UINT16ENCODE(bb, vs->extag); UINT16ENCODE(bb, vs->exref); /* save the version field - to version_3 now if no new feature */ INT16ENCODE(bb, vs->version); /* save the 'more' field - NONE now */ INT16ENCODE(bb, vs->more); if (vs->flags != 0) { /* save the flags and update version # */ UINT32ENCODE(bb, vs->flags); if (vs->flags & VS_ATTR_SET) { /* save attributes */ INT32ENCODE(bb, vs->nattrs); for (i = 0; i < vs->nattrs; i++) { INT32ENCODE(bb, vs->alist[i].findex); UINT16ENCODE(bb, vs->alist[i].atag); UINT16ENCODE(bb, vs->alist[i].aref); } /* for */ } /* attr set */ } /* flags set */ /* duplicate 'version' and 'more' - for new version of libraries */ /* see the documentation in vattr.c */ INT16ENCODE(bb, vs->version); /* save the 'more' field - NONE now */ INT16ENCODE(bb, vs->more); *size = (int32)(bb - buf) + 1; *bb = 0; return ret_value; } /* vpackvs */ /******************************************************************************* NAME vunpackvs DESCRIPTION Convert a packed form(from HDF file) to a VDATA structure. This routine will also initialize the VDATA structure as much as it can. RETURNS SUCCEED / FAIL *******************************************************************************/ static intn vunpackvs(VDATA *vs, /* IN/OUT: */ uint8 buf[], /* IN: */ int32 len /* IN: */) { uint8 *bb = NULL; int32 i; int16 int16var, temp; uint16 uint16var; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* '5' is a magic number, the exact amount of space for 2 uint16's */ /* the magic number _should_ be '4', but the size of the Vdata */ /* information is incorrectly calculated (in vpackvs() above) when the */ /* info is written to the file and it's too late to change it now :- ( */ /* get version number first -- this is different from version 3 vdata interface */ bb = &buf[len - 5]; UINT16DECODE(bb, uint16var); /* retrieve the vg's version field */ vs->version = (int16)uint16var; UINT16DECODE(bb, uint16var); /* retrieve the vg's more field */ vs->more = (int16)uint16var; bb = &buf[0]; if (vs->version <= 4) { /* retrieve interlace */ INT16DECODE(bb, vs->interlace); /* retrieve nvertices */ INT32DECODE(bb, vs->nvertices); /* retrieve tore ivsize */ UINT16DECODE(bb, vs->wlist.ivsize); /* retrieve nfields */ INT16DECODE(bb, int16var); vs->wlist.n = (intn)int16var; if (vs->wlist.n < 0) { /* Negative numbers are an error and would cause enormous buffers * to be allocated. */ HGOTO_ERROR(DFE_NOSPACE, FAIL); } else if (vs->wlist.n == 0) { /* Special case for Vdata with 0 fields defined * Initialize buffer to NULL & carry over to other arrays */ vs->wlist.bptr = NULL; vs->wlist.type = NULL; vs->wlist.off = NULL; vs->wlist.isize = NULL; vs->wlist.order = NULL; vs->wlist.esize = NULL; /* Initialize the array of pointers to field names to NULL also */ vs->wlist.name = NULL; } else { /* Allocate buffer to hold all the int16/uint16 arrays */ if (NULL == (vs->wlist.bptr = malloc(sizeof(uint16) * (size_t)(vs->wlist.n * 5)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Use buffer to support the other arrays */ vs->wlist.type = (int16 *)vs->wlist.bptr; vs->wlist.off = (uint16 *)vs->wlist.type + vs->wlist.n; vs->wlist.isize = vs->wlist.off + vs->wlist.n; vs->wlist.order = vs->wlist.isize + vs->wlist.n; vs->wlist.esize = vs->wlist.order + vs->wlist.n; for (i = 0; i < vs->wlist.n; i++) /* retrieve the type */ INT16DECODE(bb, vs->wlist.type[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the isize */ UINT16DECODE(bb, vs->wlist.isize[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the offset */ UINT16DECODE(bb, vs->wlist.off[i]); for (i = 0; i < vs->wlist.n; i++) /* retrieve the order */ UINT16DECODE(bb, vs->wlist.order[i]); /* retrieve the field names (and each field name's length) */ if (NULL == (vs->wlist.name = malloc(sizeof(char *) * (size_t)vs->wlist.n))) HGOTO_ERROR(DFE_NOSPACE, FAIL); for (i = 0; i < vs->wlist.n; i++) { INT16DECODE(bb, int16var); /* this gives the length */ if (NULL == (vs->wlist.name[i] = malloc((int16var + 1) * sizeof(char)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); HIstrncpy(vs->wlist.name[i], (char *)bb, int16var + 1); bb += (size_t)int16var; } } /* end else */ /* retrieve the vsname (and vsnamelen) */ INT16DECODE(bb, int16var); /* this gives the length */ HIstrncpy(vs->vsname, (char *)bb, int16var + 1); bb += (size_t)int16var; /* retrieve the vsclass (and vsclasslen) */ INT16DECODE(bb, int16var); /* this gives the length */ HIstrncpy(vs->vsclass, (char *)bb, int16var + 1); bb += (size_t)int16var; /* retrieve the expansion tag and ref */ UINT16DECODE(bb, vs->extag); UINT16DECODE(bb, vs->exref); /* retrieve the middle version field */ INT16DECODE(bb, temp); if (temp != vs->version) HGOTO_ERROR(DFE_BADVH, FAIL); /* retrieve the 'more' field */ INT16DECODE(bb, temp); if (temp != vs->more) HGOTO_ERROR(DFE_BADVH, FAIL); if (vs->version == VSET_NEW_VERSION) { /* new features exist */ UINT32DECODE(bb, vs->flags); if (vs->flags & VS_ATTR_SET) { /* get attr info */ INT32DECODE(bb, vs->nattrs); if (NULL == (vs->alist = (vs_attr_t *)malloc(vs->nattrs * sizeof(vs_attr_t)))) HGOTO_ERROR(DFE_NOSPACE, FAIL); for (i = 0; i < vs->nattrs; i++) { INT32DECODE(bb, vs->alist[i].findex); UINT16DECODE(bb, vs->alist[i].atag); UINT16DECODE(bb, vs->alist[i].aref); } /* for */ } /* attr set */ } /* new version */ if (vs->version <= VSET_OLD_TYPES) { for (i = 0; i < vs->wlist.n; i++) /* save the type */ vs->wlist.type[i] = map_from_old_types((intn)vs->wlist.type[i]); } /* --- EXTRA --- fill in the machine-dependent size fields */ for (i = 0; i < vs->wlist.n; i++) { vs->wlist.esize[i] = (uint16)(vs->wlist.order[i] * DFKNTsize((int32)vs->wlist.type[i] | (int32)DFNT_NATIVE)); } } /* if version <= 4 */ done: return ret_value; } /* vunpackvs */ /******************************************************************************* NAME vsdestroynode DESCRIPTION Frees B-Tree nodes *** Only called by B-tree routines, should _not_ be called externally *** *** unless you know what your are doing *** RETURNS Nothing *******************************************************************************/ void vsdestroynode(void *n /* IN: Node in TBBT-tree */) { VDATA *vs = NULL; intn i; if (n != NULL) { vs = ((vsinstance_t *)n)->vs; if (vs != NULL) { /* Free the dynamically allocated VData fields */ for (i = 0; i < vs->wlist.n; i++) free(vs->wlist.name[i]); free(vs->wlist.name); free(vs->wlist.bptr); free(vs->rlist.item); free(vs->alist); VSIrelease_vdata_node(vs); } /* release this instance to the free list ? */ VSIrelease_vsinstance_node((vsinstance_t *)n); } } /* vsdestroynode */ /******************************************************************************* NAME VSPgetinfo -- Read in the "header" information about the Vdata. DESCRIPTION This routine pre-reads the header information for a Vdata into memory so that it can be accessed more quickly by the routines that need it. RETURNS Return a pointer to a VDATA filled with the Vdata information on success, NULL on failure. *******************************************************************************/ VDATA * VSPgetinfo(HFILEID f, /* IN: file handle */ uint16 ref /* IN: ref of the Vdata */) { VDATA *vs = NULL; /* new vdata to be returned */ /* int32 vh_length; int32 is mismatches Vhbuf's type -- uint32 */ size_t vh_length; /* length of the vdata header */ VDATA *ret_value = NULL; /* FAIL */ /* clear error stack */ HEclear(); /* get a free Vdata node? */ if ((vs = VSIget_vdata_node()) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); /* need to fetch length of vdata from file */ if ((vh_length = Hlength(f, DFTAG_VH, ref)) == FAIL) HGOTO_ERROR(DFE_BADLEN, NULL); if (vh_length > Vhbufsize) { Vhbufsize = vh_length; if (Vhbuf != NULL) free(Vhbuf); if ((Vhbuf = (uint8 *)malloc(Vhbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, NULL); } /* get Vdata header from file */ if (Hgetelement(f, DFTAG_VH, ref, Vhbuf) == FAIL) HGOTO_ERROR(DFE_NOVS, NULL); /* init all other fields in vdata and then unpack the vdata */ vs->otag = DFTAG_VH; vs->oref = ref; vs->f = f; if (FAIL == vunpackvs(vs, Vhbuf, vh_length)) HGOTO_ERROR(DFE_INTERNAL, NULL); /* return vdata */ ret_value = (vs); done: return ret_value; } /* end VSPgetinfo() */ /******************************************************************************* NAME VSattach DESCRIPTION NEW VSattach: (a) if vsid == -1 if "r" access return error. if "w" access create a new vs in vg and attach it. add to vsdir, set nattach= 1, nvertices = 0. (b) if (vsid > 0) if "r" access => look in vsdir if not found, fetch vs from file, add to vsdir, set nattach= 1, nvertices = val from file. if found, check access of found vs if "w" => being written, unstable! forbidden if "r" => ok. incr nattach. if "w" access => new data may be added BUT must be same format as existing vdata. (ie. VSsetfields must match old format exactly!!) Allows for seeks to write. in all cases, set the marked flag to 0. returns NULL if error. OLD VSattach: if vsid == -1, then (a) if vg is "w", create a new vs in vg and attach it. add to vsdir, set nattach= 1, nvertices = 0. (b) if vg is "r", forbidden. if vsid is +ve, then (a) if vg is "w" => new data may be added BUT must be same format as existing vdata. (ie. VSsetfields must match old format exactly!!) (b) if vg is "r" => look in vsdir if not found, fetch vs from file, add to vsdir, set nattach= 1, nvertices = val from file. if found, check access of found vs if "w" => being written, unstable! forbidden if "r" => ok. incr nattach. in all cases, set the marked flag to 0. returns NULL if error. RETURNS *******************************************************************************/ int32 VSattach(HFILEID f, /* IN: file handle */ int32 vsid, /* IN: vdata id i.e. ref */ const char *accesstype /* IN: access type */) { VDATA *vs = NULL; /* new vdata to be returned */ vsinstance_t *w = NULL; vfile_t *vf = NULL; int32 acc_mode; int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* check file and vdata handles */ if ((f == FAIL) || (vsid < -1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, FAIL); /* check access type and convert to internal mode? */ if (accesstype[0] == 'R' || accesstype[0] == 'r') acc_mode = 'r'; else if (accesstype[0] == 'W' || accesstype[0] == 'w') acc_mode = 'w'; else HGOTO_ERROR(DFE_BADACC, FAIL); /* */ if (vsid == -1) { /* ---------- VSID IS -1 ----------------------- if "r" access return error. if "w" access create a new vs in vg and attach it. add to vsdir, set nattach= 1, nvertices = 0. */ if (acc_mode == 'r') HGOTO_ERROR(DFE_BADACC, FAIL); /* otherwise 'w' */ /* allocate space for vs, & zero it out */ if ((vs = VSIget_vdata_node()) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); vs->otag = DFTAG_VH; vs->oref = Hnewref(f); if (vs->oref == 0) { VSIrelease_vdata_node(vs); HGOTO_ERROR(DFE_NOREF, FAIL); } vs->interlace = FULL_INTERLACE; /* DEFAULT */ vs->access = 'w'; vs->f = f; vs->version = VSET_VERSION; /* attach new vs to file's vstab */ if (NULL == (w = VSIget_vsinstance_node())) HGOTO_ERROR(DFE_NOSPACE, FAIL); vf->vstabn++; w->key = (int32)vs->oref; /* set the key for the node */ w->ref = (uintn)vs->oref; w->vs = vs; w->nattach = 1; w->nvertices = 0; /* insert the vs instance in B-tree */ tbbtdins(vf->vstree, w, NULL); vs->instance = w; } /* end of case where vsid is -1 */ else { /* -------- VSID IS NON_NEGATIVE ------------- if "r" access => look in vsdir if not found, fetch vs from file, add to vsdir, set nattach= 1, nvertices = val from file. if found, check access of found vs if "w" => being written, unstable! forbidden if "r" => ok. incr nattach. if "w" access => new data may be added BUT must be same format as existing vdata. (ie. VSsetfields must match old format exactly!!) Allows for seeks to write. in all cases, set the marked flag to 0. returns NULL if error. */ if (NULL == (w = vsinst(f, (uint16)vsid))) HGOTO_ERROR(DFE_VTAB, FAIL); if (acc_mode == 'r') { /* reading an existing vdata */ /* this vdata is already attached for 'r', ok to do so again */ /* then reset the read position to the beginning of the vdata */ if (w->nattach && w->vs->access == 'r') { accrec_t *access_rec; /* access record */ w->nattach++; /* get the access_rec pointer to reset position */ if ((access_rec = HAatom_object(w->vs->aid)) == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); access_rec->posn = 0; /* to fix bugzilla #486 - BMR, Dec, 05 */ } else { vs = w->vs; vs->access = 'r'; vs->aid = Hstartread(vs->f, VSDATATAG, vs->oref); if (vs->aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); vs->instance = w; /* attach vs to vsdir at the vdata instance w */ w->nattach = 1; w->nvertices = vs->nvertices; } /* end else */ } /* end of case where vsid is positive, and "r" */ else { /* writing to an existing vdata */ if (w->nattach) /* vdata previously attached before */ HGOTO_ERROR(DFE_BADATTACH, FAIL); vs = w->vs; vs->access = 'w'; vs->aid = Hstartwrite(vs->f, VSDATATAG, vs->oref, 0); if (vs->aid == FAIL) HGOTO_ERROR(DFE_BADAID, FAIL); vs->instance = w; vs->new_h_sz = 0; /* attach vs to vsdir at the vdata instance w */ w->nattach = 1; w->nvertices = vs->nvertices; } /* end of case where vsid is positive, and "w" */ } /* end else */ /* register this vdata with group */ ret_value = HAregister_atom(VSIDGROUP, w); /* Make VDatas appendable by default */ if (FAIL == VSappendable(ret_value, VDEFAULTBLKSIZE)) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* VSattach */ /******************************************************************************* NAME VSdetach DESCRIPTION Detach vs from vstab. if vs has "w" access, ( <=> only attached ONCE! ) decr nattach. if (nattach is not 0) => bad error in code. if nvertices (in vs) is 0) just free vs from vstab. if marked flag is 1 write out vs to file and set marked flag to 0. free vs from vsdir. if vs has "r" access, ( <=> only attached ONCE! ) decr nattach. if (nattach is 0) just free vs from vstab. RETURNS SUCCEED / FAIL *******************************************************************************/ int32 VSdetach(int32 vkey /* IN: vdata key? */) { int32 i; int32 ret; int32 vspacksize; vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vdata is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); w->nattach--; /* detach from vdata */ /* --- case where access was 'r' --- */ if (vs->access == 'r') { if (w->nattach == 0) { /* end access to vdata */ if (Hendaccess(vs->aid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); vs->aid = FAIL; /* remove from atom list */ if (HAremove_atom(vkey) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end if */ /* we are done */ HGOTO_DONE(SUCCEED); } else /* must be write */ { /* --- case where access was 'w' --- */ if (w->nattach != 0) HGOTO_ERROR(DFE_CANTDETACH, FAIL); if (vs->marked) { /* if marked , write out vdata's VSDESC to file */ size_t need; need = sizeof(VWRITELIST) + (size_t)vs->nattrs * sizeof(vs_attr_t) + sizeof(VDATA) + 1; if (need > Vhbufsize) { Vhbufsize = need; free(Vhbuf); if ((Vhbuf = malloc(Vhbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (FAIL == vpackvs(vs, Vhbuf, &vspacksize)) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* if VH size changed we need to reuse the tag/ref * for new header. This will cause the pointer to the * original vdata header to be lost but this is okay. */ if (vs->new_h_sz) { /* check if tag/ref exists in DD list already */ switch (HDcheck_tagref(vs->f, DFTAG_VH, vs->oref)) { case 0: /* not found */ break; case 1: /* found, reuse tag/ref */ if (HDreuse_tagref(vs->f, DFTAG_VH, vs->oref) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); break; case -1: /* error */ HGOTO_ERROR(DFE_INTERNAL, FAIL); default: /* should never get here */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* write new one */ ret = Hputelement(vs->f, VSDESCTAG, vs->oref, Vhbuf, vspacksize); if (ret == FAIL) HGOTO_ERROR(DFE_WRITEERROR, FAIL); vs->marked = 0; vs->new_h_sz = 0; } /* remove all defined symbols */ for (i = 0; i < vs->nusym; i++) free(vs->usym[i].name); if (vs->usym != NULL) free(vs->usym); /* free the actual array */ vs->nusym = 0; vs->usym = NULL; /* end access to vdata */ if (Hendaccess(vs->aid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); vs->aid = FAIL; /* remove vdata from atom list */ if (HAremove_atom(vkey) == NULL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* end of 'write' case */ done: return ret_value; } /* VSdetach */ /******************************************************************************* NAME VSappendable DESCRIPTION Make it possible to append unlimitedly to an existing VData RETURNS SUCCEED, or FAIL for error *******************************************************************************/ int32 VSappendable(int32 vkey, /* IN: vdata key */ int32 blk /* IN: */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; (void)blk; /* clear error stack */ HEclear(); /* check vdata key is a valid */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get Vdata itself and check */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); if (vs->aid == 0) vs->aid = Hstartaccess(vs->f, VSDATATAG, vs->oref, DFACC_RDWR | DFACC_APPENDABLE); else ret_value = Happendable(vs->aid); done: return ret_value; } /* VSappendable */ /******************************************************************************* NAME VSgetid DESCRIPTION returns the id of the next VDATA from the file f . (vsid = -1 gets the 1st vDATA). RETURNS RETURNS -1 on error. RETURNS vdata id (0 or +ve integer) *******************************************************************************/ int32 VSgetid(HFILEID f, /* IN: file handle */ int32 vsid /* IN: vdata id i.e. ref */) { vsinstance_t *w = NULL; vfile_t *vf = NULL; void **t = NULL; int32 key; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check valid vdata id */ if (vsid < -1) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, FAIL); if (vsid == -1) { /* vsid '-1' case */ if (vf->vstree == NULL) HGOTO_DONE(FAIL); if ((t = (void **)tbbtfirst(vf->vstree->root)) == NULL) HGOTO_DONE(FAIL); /* we assume 't' is valid at this point */ w = (vsinstance_t *)*t; /* get actual pointer to the vsinstance_t */ HGOTO_DONE((int32)w->ref); /* rets 1st vdata's ref */ } else /* vsid >= 0 */ { /* tbbtdfind returns a pointer to the vsinstance_t pointer */ key = (int32)vsid; t = (void **)tbbtdfind(vf->vstree, &key, NULL); if (t == NULL) /* couldn't find the old vsid */ ret_value = (FAIL); else if (NULL == (t = (void **)tbbtnext((TBBT_NODE *)t))) /* get the next node in the tree */ ret_value = (FAIL); else { w = (vsinstance_t *)*t; /* get actual pointer to the vsinstance_t */ ret_value = (int32)w->ref; /* rets vdata's ref */ } /* end else */ } done: return ret_value; } /* VSgetid */ /******************************************************************************* NAME VSQuerytag DESCRIPTION get the 'otag' of the given Vdata RETURNS Return the 'otag' of the given Vdata Return FAIL on failure *******************************************************************************/ int32 VSQuerytag(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check vdata key is a valid */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get Vdata itself and check */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* return otag of vdata */ ret_value = ((int32)vs->otag); done: return ret_value; } /* VSQuerytag */ /******************************************************************************* NAME VSQueryref DESCRIPTION get the ref of the the given Vdata RETURNS Return the ref of the given Vdata Return FAIL on failure *******************************************************************************/ int32 VSQueryref(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check vdata key is a valid */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get Vdata itself and check */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); /* return ref of vdata */ ret_value = ((int32)vs->oref); done: return ret_value; } /* VSQueryref */ /******************************************************************************* NAME vswritelist DESCRIPTION get the 'writelist' of the given vdata RETURNS return the 'writelist' of the vdata if successful else NULL *******************************************************************************/ DYN_VWRITELIST * vswritelist(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; DYN_VWRITELIST *ret_value = NULL; /* Failure */ /* clear error stack */ HEclear(); /* check vdata key is a valid */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, NULL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, NULL); /* get Vdata itself and check */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, NULL); /* return 'writelist' */ ret_value = (&(vs->wlist)); done: return ret_value; } /* vswritelist() */ /******************************************************************************* NAME VSgetversion DESCRIPTION get the version number of the vdata RETURNS return the version number if successful else '0'. *******************************************************************************/ int32 VSgetversion(int32 vkey /* IN: vdata key */) { vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check vdata key is a valid */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, 0); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, 0); /* get Vdata itself and check */ vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, 0); /* return version number */ ret_value = (int32)vs->version; done: return ret_value; } /* end VSgetversion() */ /******************************************************************************* NAME VSdelete DESCRIPTION Remove a Vdata from its file. This function will both remove the Vdata from the internal Vset data structures as well as from the file. 'vsid' is actually the 'ref' of the vdata. (i.e. it calls tbbt_delete() and Hdeldd()) RETURNS Return FAIL / SUCCEED *******************************************************************************/ int32 VSdelete(int32 f, /* IN: file handle */ int32 vsid /* IN: vdata id i.e. ref */) { void *v; vfile_t *vf = NULL; void **t = NULL; int32 key; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check valid vdata id */ if (vsid < -1) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata file record */ if (NULL == (vf = Get_vfile(f))) HGOTO_ERROR(DFE_FNF, FAIL); /* find vdata in TBBT using it's ref */ key = vsid; if ((t = (void **)tbbtdfind(vf->vstree, &key, NULL)) == NULL) HGOTO_DONE(FAIL); /* remove vdata from TBBT */ v = tbbtrem((TBBT_NODE **)vf->vstree, (TBBT_NODE *)t, NULL); /* destroy vdata node itself*/ if (v != NULL) vsdestroynode(v); /* delete vdata header and data from file */ if (Hdeldd(f, DFTAG_VS, (uint16)vsid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (Hdeldd(f, DFTAG_VH, (uint16)vsid) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* VSdelete */ hdf4-hdf4.3.1/hdf/src/vparse.c000066400000000000000000000116621503061704500160310ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** file - vparse.c Part of the HDF VSet interface. NOTE: Another pass needs to made through this file to update some of the comments about certain sections of the code. -GV 9/8/97 ************************************************************************/ #include "hdf_priv.h" #include "vg_priv.h" #define ISCOMMA(c) ((c == ',') ? 1 : 0) static char *symptr[VSFIELDMAX]; /* array of ptrs to tokens ? */ static char sym[VSFIELDMAX][FIELDNAMELENMAX + 1]; /* array of tokens ? */ static intn nsym; /* token index ? */ /* Temporary buffer for I/O */ static uint32 Vpbufsize = 0; static uint8 *Vpbuf = NULL; /******************************************************************************* NAME scanattrs DESCRIPTION Given a string (attrs) , the routine parses it into token strings, and returns a ptr (attrv) to an array of ptrs where the tokens are stored. The number of tokens are returned in attrc. Currently used only by routines that manipulate field names. As such each field string is truncated to a max length of FIELDNAMELENMAX (as defined in hdf.h). For most cases, this truncation doesn't happen because FIELDNAMELENMAX is a big number. Current implementation: all strings inputs converted to uppercase. tokens must be separated by COMMAs. Tokens are stored in static area sym , and pointers are returned to calling routine. Hence, tokens must be used before next call to scanattrs. RETURNS Returns SUCCEED/FAIL *******************************************************************************/ int32 scanattrs(const char *attrs, int32 *attrc, char ***attrv) { char *s, *s0, *ss; intn len; size_t slen = strlen(attrs) + 1; if (slen > Vpbufsize) { Vpbufsize = slen; free(Vpbuf); if ((Vpbuf = (uint8 *)malloc(Vpbufsize)) == NULL) HRETURN_ERROR(DFE_NOSPACE, FAIL); } /* end if */ strcpy((char *)Vpbuf, attrs); s = (char *)Vpbuf; nsym = 0; s0 = s; while (*s) { #ifdef VDATA_FIELDS_ALL_UPPER if (*s >= 'a' && *s <= 'z') *s = (char)toupper(*s); #endif /* VDATA_FIELDS_ALL_UPPER */ if (ISCOMMA(*s)) { /* make sure we've got a legitimate length */ len = (intn)(s - s0); if (len <= 0) return FAIL; /* save that token */ ss = symptr[nsym] = sym[nsym]; nsym++; /* shove the string into our static buffer. YUCK! */ if (len > FIELDNAMELENMAX) len = FIELDNAMELENMAX; HIstrncpy(ss, s0, len + 1); /* skip over the comma */ s++; /* skip over white space before the next field name */ while (*s && *s == ' ') s++; /* keep track of the first character of the next token */ s0 = s; } else { /* move along --- nothing to see here */ s++; } } /* save the last token */ len = (intn)(s - s0); if (len <= 0) return FAIL; ss = symptr[nsym] = sym[nsym]; nsym++; if (len > FIELDNAMELENMAX) len = FIELDNAMELENMAX; HIstrncpy(ss, s0, len + 1); symptr[nsym] = NULL; *attrc = nsym; *attrv = (char **)symptr; return SUCCEED; /* ok */ } /* scanattrs */ /******************************************************************************* NAME VPparse_shutdown -- Free the Vpbuf buffer. DESCRIPTION For completeness, when the VSet interface is shut-down, free the Vpbuf. Should only ever be called by the "atexit" function HDFend RETURNS Returns SUCCEED/FAIL *******************************************************************************/ intn VPparse_shutdown(void) { if (Vpbuf != NULL) { free(Vpbuf); Vpbuf = NULL; Vpbufsize = 0; } return SUCCEED; } /* end VSPhshutdown() */ hdf4-hdf4.3.1/hdf/src/vrw.c000066400000000000000000000621301503061704500153430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*********************************************************************** * * vrw.c * Part of the HDF VSet interface. * This module handles reading and writing of Vdatas. * LOCAL ROUTINES VSPshutdown -- Free the Vtbuf buffer. EXPORTED ROUTINES VSseek -- Seeks to an element boundary within a vdata i.e. 2nd element. VSread -- Reads a specified number of elements' worth of data from a vdata. Data will be returned to you interlaced in the way you specified. VSwrite -- Writes a specified number of elements' worth of data to a vdata. You must specify how your data in your buffer is interlaced. Creates an aid, and writes it out if this is the first time. NOTE: Another pass needs to made through this file to update some of the comments about certain sections of the code. -GV 9/8/97 ************************************************************************/ #include "hdf_priv.h" #include "vg_priv.h" #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /* MIN */ static uint32 Vtbufsize = 0; static uint8 *Vtbuf = NULL; /******************************************************************************* NAME VSPshutdown -- Free the Vtbuf buffer. DESCRIPTION For completeness, when the VSet interface is shut-down, free the Vtbuf. Should only ever be called by the "atexit" function HDFend RETURNS Returns SUCCEED/FAIL *******************************************************************************/ intn VSPshutdown(void) { intn ret_value = SUCCEED; /* free global buffers */ if (Vtbuf != NULL) { free(Vtbuf); Vtbuf = NULL; Vtbufsize = 0; } /* Clear the local buffers in vio.c */ ret_value = VSPhshutdown(); return ret_value; } /* end VSPshutdown() */ /******************************************************************************* NAME VSseek DESCRIPTION Seeks to an element boundary within a vdata Vdata must be attached with "r" or "w" access. Specify eltpos = 0 for 1st element, 1 for 2nd element etc. (eg returns 5 if seek to the 6th element, etc) RETURNS RETURNS FAIL on error RETURNS position of element seeked to (0 or a +ve integer) *******************************************************************************/ int32 VSseek(int32 vkey, /* IN: vdata key */ int32 eltpos /* IN: element position in vdata */) { int32 ret; int32 offset; vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vdata is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it. Check element position also. */ vs = w->vs; if ((vs == NULL) || (eltpos < 0)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Don't allow seeks in 0-field vdatas */ if (vs->wlist.n <= 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* calculate offset of element in vdata */ offset = eltpos * vs->wlist.ivsize; /* seek to element */ if ((ret = Hseek(vs->aid, offset, DF_START)) == FAIL) HGOTO_ERROR(DFE_BADSEEK, FAIL); ret_value = (eltpos); done: return ret_value; } /* VSseek */ /******************************************************************************* NAME VSread DESCRIPTION Reads a specified number of elements' worth of data from a vdata. Data will be returned to you interlaced in the way you specified. RETURNS RETURNS FAIL if error RETURNS the number of elements read (0 or a +ve integer). *******************************************************************************/ int32 VSread(int32 vkey, /* IN: vdata key */ uint8 buf[], /* IN/OUT: space to put elements in */ int32 nelt, /* IN: number of elements to read */ int32 interlace /* IN: interlace to return elements in 'buf' */) { intn isize = 0; intn order = 0; intn index = 0; intn esize = 0; intn hsize = 0; uint8 *Src; uint8 *b1 = NULL; uint8 *b2 = NULL; int32 i, j; int32 nv; int32 offset; int32 type; int32 uvsize; /* size of "element" as NEEDED by user */ int32 total_bytes; /* total number of bytes that need to be read in */ int32 bytes; /* number of elements / bytes to read next time */ int32 chunk; /* number of records in a buffer */ int32 done; /* number of records to do / done */ DYN_VWRITELIST *w = NULL; DYN_VREADLIST *r = NULL; vsinstance_t *wi = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vdata is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (wi = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = wi->vs; if (vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* check access id and number of vertices in vdata */ if ((vs->aid == 0) || (vs->nvertices == 0)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Don't allow reads in 0-field vdatas */ if (vs->wlist.n <= 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* check if vdata exists in file */ if (vexistvs(vs->f, vs->oref) == FAIL) HGOTO_ERROR(DFE_NOVS, FAIL); /* check interlace parameter */ if (interlace != FULL_INTERLACE && interlace != NO_INTERLACE) HGOTO_ERROR(DFE_ARGS, FAIL); /* read/write lists */ w = &(vs->wlist); r = &(vs->rlist); hsize = (intn)vs->wlist.ivsize; /* size as stored in HDF */ total_bytes = hsize * nelt; /* Now, convert and repack field(s) from Vtbuf into buf. This section of the code deals with interlacing. In all cases the items for each of the fields are converted and shuffled around from the internal buffer "Vtbuf" to the user's buffer "buf". There are 5 cases : (A) user=NO_INTERLACE & vdata=FULL_INTERLACE) (B) user=NO_INTERLACE & vdata=NO_INTERLACE) (C) user=FULL_INTERLACE & vdata=FULL_INTERLACE) (D) user=FULL_INTERLACE & vadat=NO_INTERLACE) (E) SPECIAL CASE when only one field. Cases (A)-(D) handles multiple fields. Case (E) handles reading from a Vdata with a single field. Cases (E) and (C) are the most frequently used. Limit buffer allocations to VDATA_BUFFER_MAX size so that we conserve memory. Doing this involves a certain degree of added code complexity so don't bother doing it for the less frequent cases. Cases E and C have been rolled together since they are very similar and both need the incremental writing. */ /* ----------------------------------------------------------------- */ /* CASE (E + C): Easy to unroll case */ if ((w->n == 1) || (interlace == FULL_INTERLACE && vs->interlace == FULL_INTERLACE)) { /* * figure out how many elements we can move at a time and * make sure our buffer is big enough */ if ((uint32)total_bytes < Vtbufsize) { chunk = nelt; } else { int32 buf_size; /* we are bounded above by VDATA_BUFFER_MAX */ buf_size = MIN(total_bytes, VDATA_BUFFER_MAX); /* make sure there is at least room for one record in our buffer */ chunk = buf_size / hsize + 1; /* get a buffer big enough to hold the values */ Vtbufsize = (size_t)chunk * (size_t)hsize; free(Vtbuf); if ((Vtbuf = (uint8 *)malloc(Vtbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } done = 0; /* set loop invariant parameters */ Src = buf; bytes = hsize * chunk; for (uvsize = 0, j = 0; j < r->n; j++) uvsize += w->esize[r->item[j]]; while (done < nelt) { /* chunk has changed so update the byte counts */ if (nelt - done < chunk) { chunk = nelt - done; bytes = hsize * chunk; } /* ================ start reading ============================== */ if ((nv = Hread(vs->aid, bytes, (uint8 *)Vtbuf)) != bytes) { HERROR(DFE_READERROR); HEreport("Tried to read %d, only read %d", bytes, nv); HGOTO_DONE(FAIL); } /* CASE (E): Only a single field in the Vdata */ if (w->n == 1) { DFKconvert(Vtbuf, Src, w->type[0], (uint32)w->order[0] * (uint32)chunk, DFACC_READ, 0, 0); } /* case (e) */ /* ----------------------------------------------------------------- */ /* CASE (C): iu=full, iv=full */ else { offset = 0; for (j = 0; j < r->n; j++) { i = r->item[j]; b1 = Src + offset; b2 = Vtbuf + (size_t)w->off[i]; type = (int32)w->type[r->item[j]]; esize = (intn)w->esize[i]; isize = (intn)w->isize[i]; order = (intn)w->order[i]; for (index = 0; index < order; index++) { DFKconvert(b2, b1, type, (uint32)chunk, DFACC_READ, (uint32)hsize, (uint32)uvsize); b1 += (int)esize / order; b2 += (int)isize / order; } offset += esize; } } /* case (E) */ /* record what we've done and move to next group */ done += chunk; Src += chunk * uvsize; } /* end while */ } /* case (C + E) */ else { /* * Handle the other cases now. * These cases are less frequent so don't bother unrolling * the loops for now. As a result, we may get into memory * problems since we may end up allocating a huge buffer */ /* alloc space (Vtbuf) for reading in the raw data from vdata */ if (Vtbufsize < (size_t)nelt * (size_t)hsize) { Vtbufsize = (size_t)nelt * (size_t)hsize; free(Vtbuf); if ((Vtbuf = (uint8 *)malloc(Vtbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* ================ start reading ============================== */ nv = Hread(vs->aid, nelt * hsize, (uint8 *)Vtbuf); if (nv != nelt * hsize) { HERROR(DFE_READERROR); HEreport("Tried to read %d, only read %d", nelt * hsize, nv); HGOTO_DONE(FAIL); } /* ----------------------------------------------------------------- */ /* CASE (A): user=none, vdata=full */ if (interlace == NO_INTERLACE && vs->interlace == FULL_INTERLACE) { b1 = buf; for (j = 0; j < r->n; j++) { i = r->item[j]; b2 = Vtbuf + (size_t)w->off[i]; type = (int32)w->type[i]; isize = (intn)w->isize[i]; esize = (intn)w->esize[i]; order = (intn)w->order[i]; for (index = 0; index < order; index++) { DFKconvert(b2, b1, type, (uint32)nelt, DFACC_READ, (uint32)hsize, (uint32)esize); b2 += isize / order; b1 += esize / order; } b1 += ((nelt - 1) * esize); } } /* case (a) */ /* ----------------------------------------------------------------- */ /* CASE (B): user=none, vdata=none */ else if (interlace == NO_INTERLACE && vs->interlace == NO_INTERLACE) { b1 = buf; for (j = 0; j < r->n; j++) { i = r->item[j]; b2 = Vtbuf + (size_t)w->off[i] * (size_t)nelt; type = (int32)w->type[i]; esize = (intn)w->esize[i]; isize = (intn)w->isize[i]; order = (intn)w->order[i]; for (index = 0; index < order; index++) { DFKconvert(b2, b1, type, (uint32)nelt, DFACC_READ, (uint32)isize, (uint32)esize); b1 += esize / order; b2 += isize / order; } b1 += ((nelt - 1) * esize); } } /* case (b) */ /* ----------------------------------------------------------------- */ /* CASE (D): user=full, vdata=none */ else if (interlace == FULL_INTERLACE && vs->interlace == NO_INTERLACE) { for (uvsize = 0, j = 0; j < r->n; j++) uvsize += w->esize[r->item[j]]; offset = 0; for (j = 0; j < r->n; j++) { i = r->item[j]; b1 = buf + offset; b2 = Vtbuf + (size_t)w->off[i] * (size_t)nelt; type = (int32)w->type[i]; isize = (intn)w->isize[i]; esize = (intn)w->esize[i]; order = (intn)w->order[i]; for (index = 0; index < order; index++) { DFKconvert(b2, b1, type, (uint32)nelt, DFACC_READ, (uint32)isize, (uint32)uvsize); b1 += esize / order; b2 += isize / order; } offset += isize; } } /* case (d) */ } /* end else, cases a, b, and d */ ret_value = (nelt); done: return ret_value; } /* VSread */ /******************************************************************************* NAME VSwrite DESCRIPTION Writes a specified number of elements' worth of data to a vdata. You must specify how your data in your buffer is interlaced. NEW create an aid, and write out if this is the first time. (otherwise) subsequent writes result in link-blocks. RETURNS RETURNS FAIL if error RETURNS the number of elements written (0 or a +ve integer). *******************************************************************************/ int32 VSwrite(int32 vkey, /* IN: vdata key */ const uint8 buf[], /* IN: elements to write to vdata */ int32 nelt, /* IN: number of elements */ int32 interlace /* IN: interlace of elements 'buf' */) { intn isize = 0; intn order = 0; intn index = 0; intn esize = 0; uint8 *dest = NULL; const uint8 *src, *Src; int32 j; int32 type; int32 offset; int32 position = 0; int32 new_size; int32 status; int32 total_bytes; /* total number of bytes that need to be written out */ DYN_VWRITELIST *w = NULL; int32 int_size; /* size of "element" as needed by user in memory */ intn hdf_size = 0; /* size of record in HDF file */ vsinstance_t *wi = NULL; VDATA *vs = NULL; int32 bytes; /* number of elements / bytes to write next time */ int32 chunk; int32 done; /* number of records to do / done */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check if vdata is part of vdata group */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (wi = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it. Also check number of elements */ vs = wi->vs; if ((nelt <= 0) || (vs == NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* check if write access to vdata */ if (vs->access != 'w') HGOTO_ERROR(DFE_BADACC, FAIL); /* check if vdata exists in the file */ if (FAIL == vexistvs(vs->f, vs->oref)) HGOTO_ERROR(DFE_NOVS, FAIL); /* get write list */ w = &vs->wlist; if (w->n == 0) { HERROR(DFE_NOVS); HEreport("No fields set for writing"); HGOTO_DONE(FAIL); } /* check interlace of input buffer */ if (interlace != NO_INTERLACE && interlace != FULL_INTERLACE) HGOTO_ERROR(DFE_ARGS, FAIL); hdf_size = (intn)w->ivsize; /* as stored in HDF file */ total_bytes = hdf_size * nelt; /* make sure we have a valid AID */ if (vs->aid == 0) { HGOTO_ERROR(DFE_BADAID, FAIL); } /* * promote to link-block if vdata exists and is not already one * AND we are increasing its size */ HQueryposition(vs->aid, &position); new_size = (position / (intn)vs->wlist.ivsize) + nelt; /* this should really be cached in the Vdata structure */ for (int_size = 0, j = 0; j < w->n; j++) int_size += w->esize[j]; /* First, convert and repack field(s) from Vtbuf into buf. This section of the code deals with interlacing. In all cases the items for each of the fields are converted and shuffled around from the user's buffer "buf" to the internal's buffer "Vtbuf". The data in "Vtbuf" is then written out to the vdata. There are 5 cases : (A) user=NO_INTERLACE & vdata=FULL_INTERLACE) (B) user=NO_INTERLACE & vdata=NO_INTERLACE) (C) user=FULL_INTERLACE & vdata=FULL_INTERLACE) (D) user=FULL_INTERLACE & vadat=NO_INTERLACE) (E) SPECIAL CASE when only one field. Cases (A)-(D) handles multiple fields Case (E) handles single field Vdatas Cases (E) and (C) are the most frequently used. Limit buffer allocations to VDATA_BUFFER_MAX size so that we conserve memory. Doing this involves a certain degree of added code complexity so don't bother doing it for the less frequent cases. Cases E and C have been rolled together since they are very similar and both need the incremental writing. --------------------------------------------------------------------- */ /* CASE (E + C): Easy to unroll case */ if ((w->n == 1) || (interlace == FULL_INTERLACE && vs->interlace == FULL_INTERLACE)) { /* * figure out how many elements we can move at a time and * make sure our buffer is big enough */ if ((uint32)total_bytes < Vtbufsize) { chunk = nelt; } else { int32 buf_size; /* we are bounded above by VDATA_BUFFER_MAX */ buf_size = MIN(total_bytes, VDATA_BUFFER_MAX); /* make sure there is at least room for one record in our buffer */ chunk = buf_size / hdf_size + 1; /* get a buffer big enough to hold the values */ Vtbufsize = (size_t)chunk * (size_t)hdf_size; free(Vtbuf); if ((Vtbuf = (uint8 *)malloc(Vtbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } done = 0; /* set loop invariant parameters */ Src = buf; dest = Vtbuf; bytes = hdf_size * chunk; while (done < nelt) { /* chunk has changed so update the byte counts */ if (nelt - done < chunk) { chunk = nelt - done; bytes = hdf_size * chunk; } /* printf("Case E/C: [%d,%d] writing %d (elems) %d bytes\n", done, nelt, chunk, bytes); */ offset = 0; for (j = 0; j < w->n; j++) { src = Src + offset; dest = Vtbuf + (size_t)w->off[j]; type = (int32)w->type[j]; esize = (intn)w->esize[j]; isize = (intn)w->isize[j]; order = (intn)w->order[j]; for (index = 0; index < order; index++) { DFKconvert((void *)src, dest, type, (uint32)chunk, DFACC_WRITE, (uint32)int_size, (uint32)hdf_size); dest += isize / order; src += esize / order; } offset += esize; } /* write the converted data to the file */ status = Hwrite(vs->aid, bytes, (uint8 *)Vtbuf); if (status != bytes) HGOTO_ERROR(DFE_WRITEERROR, FAIL); /* record what we've done and move to next group */ done += chunk; Src += chunk * int_size; } } /* case (C + E) */ else { /* * Handle the other cases now. * These cases are less frequent so don't bother unrolling * the loops for now. As a result, we may get into memory * problems since we may end up allocating a huge buffer */ /* alloc space (Vtbuf) for writing out the data */ if (Vtbufsize < (uint32)total_bytes) { Vtbufsize = (uint32)total_bytes; free(Vtbuf); if ((Vtbuf = (uint8 *)malloc(Vtbufsize)) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* ----------------------------------------------------------------- */ /* CASE (A): user=none, vdata=full */ if (interlace == NO_INTERLACE && vs->interlace == FULL_INTERLACE) { src = buf; for (j = 0; j < w->n; j++) { dest = Vtbuf + (size_t)w->off[j]; type = (int32)w->type[j]; esize = (intn)w->esize[j]; isize = (intn)w->isize[j]; order = (intn)w->order[j]; for (index = 0; index < order; index++) { DFKconvert((void *)src, dest, type, (uint32)nelt, DFACC_WRITE, (uint32)esize, (uint32)hdf_size); src += esize / order; dest += isize / order; } src += ((nelt - 1) * esize); } } /* case (a) */ /* --------------------------------------------------------------------- */ /* CASE (B): user=none, vdata=none */ else if (interlace == NO_INTERLACE && vs->interlace == NO_INTERLACE) { src = buf; for (j = 0; j < w->n; j++) { dest = Vtbuf + w->off[j] * nelt; type = (int32)w->type[j]; esize = (intn)w->esize[j]; isize = (intn)w->isize[j]; order = (intn)w->order[j]; for (index = 0; index < order; index++) { DFKconvert((void *)src, dest, type, (uint32)nelt, DFACC_WRITE, (uint32)esize, (uint32)isize); dest += isize / order; src += esize / order; } src += ((nelt - 1) * esize); } } /* case (b) */ /* ----------------------------------------------------------------- */ /* CASE (D): user=full, vdata=none */ else if (interlace == FULL_INTERLACE && vs->interlace == NO_INTERLACE) { offset = 0; for (j = 0; j < w->n; j++) { src = buf + offset; dest = Vtbuf + w->off[j] * nelt; type = (int32)w->type[j]; isize = (intn)w->isize[j]; esize = (intn)w->esize[j]; order = (intn)w->order[j]; for (index = 0; index < order; index++) { DFKconvert((void *)src, dest, type, (uint32)nelt, DFACC_WRITE, (uint32)int_size, (uint32)isize); dest += isize / order; src += esize / order; } offset += esize; } } /* case (d) */ status = Hwrite(vs->aid, total_bytes, (uint8 *)Vtbuf); if (status != total_bytes) HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* cases a, b, and d */ /* update the internal structure to reflect write */ if (new_size > vs->nvertices) vs->nvertices = new_size; vs->marked = 1; ret_value = (nelt); done: return ret_value; } /* VSwrite */ hdf4-hdf4.3.1/hdf/src/vsfld.c000066400000000000000000001050651503061704500156500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** * vsetf.c * Part of the HDF VSet interface. * LOCAL ROUTINES EXPORTED ROUTINES VSIZEOF -- returns the machine size of a field type. VSsetfields -- sets the fields in a vdata for reading or writing. Truncates each field to max length of FIELDNAMELENMAX. VSfdefine -- Defines a (one) new field within the vdata. VFnfields -- Return the number of fields in this Vdata. VFfieldname -- Return the name of the given field in this Vdata. VFfieldtype -- Return the type of the given field in this Vdata. VFfieldisize -- Return the internal (HDF) size of the given field in this Vdata. VFfieldesize -- Return the external (local machine) size of the given field in this Vdata. VFfieldorder -- Return the order of the given field in this Vdata. VSfpack -- pack into or unpack from a buf the values of fully interlaced fields (of the entire record). ************************************************************************/ #include #include "hdf_priv.h" #include "vg_priv.h" /* ** ================================================================== ** PRIVATE data areas and routines ** ================================================================== * */ static const SYMDEF rstab[] = { {"PX", DFNT_FLOAT32, SIZE_FLOAT32, 1}, {"PY", DFNT_FLOAT32, SIZE_FLOAT32, 1}, {"PZ", DFNT_FLOAT32, SIZE_FLOAT32, 1}, {"IX", DFNT_INT32, SIZE_INT32, 1}, {"IY", DFNT_INT32, SIZE_INT32, 1}, {"IZ", DFNT_INT32, SIZE_INT32, 1}, {"NX", DFNT_FLOAT32, SIZE_FLOAT32, 1}, {"NY", DFNT_FLOAT32, SIZE_FLOAT32, 1}, {"NZ", DFNT_FLOAT32, SIZE_FLOAT32, 1}, }; #define NRESERVED (sizeof(rstab) / sizeof(SYMDEF)) /* ------------------------------------------------------------------ */ /* ** sets the fields in a vdata for reading or writing ** RETURNS FAIL if error, and SUCCEED if ok. ** truncates each field to max length of FIELDNAMELENMAX. */ intn VSsetfields(int32 vkey, const char *fields) { char **av; int32 ac, found; intn j, i; uint16 uj; uint16 order; int32 value; DYN_VREADLIST *rlist; DYN_VWRITELIST *wlist; vsinstance_t *w; VDATA *vs; intn ret_value = FAIL; /* check if a NULL field list is passed in, then return with error (bug #554) - BMR 4/30/01 */ if (fields == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if ((scanattrs(fields, &ac, &av) == FAIL) || (ac == 0)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* check number of fields limit */ if (ac > VSFIELDMAX) HGOTO_ERROR(DFE_SYMSIZE, FAIL); /* * write to an empty vdata : set the write list but do not set the * read list cuz there is nothing there to read yet... */ if (vs->access == 'w') { if (vs->nvertices == 0) { wlist = &(vs->wlist); if (wlist->n == 0) /* fields not set yet, Sept. 96. */ /* do not re-set fields if they were already set. */ { wlist->ivsize = 0; wlist->n = 0; /* allocate space for the internal WRITELIST structures */ /* Allocate buffer to hold all the int16/uint16 arrays */ if ((wlist->bptr = malloc(sizeof(uint16) * (size_t)(ac * 5))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Use buffer to support the other arrays */ wlist->type = (int16 *)wlist->bptr; wlist->off = (uint16 *)wlist->type + ac; wlist->isize = wlist->off + ac; wlist->order = wlist->isize + ac; wlist->esize = wlist->order + ac; if ((wlist->name = malloc(sizeof(char *) * (size_t)ac)) == NULL) { free(wlist->bptr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } for (i = 0; i < ac; i++) { found = FALSE; /* --- first look in the user's symbol table --- */ for (j = 0; j < vs->nusym; j++) if (!strcmp(av[i], vs->usym[j].name)) { found = TRUE; if ((wlist->name[wlist->n] = strdup(vs->usym[j].name)) == NULL) { free(wlist->name); free(wlist->bptr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } order = vs->usym[j].order; wlist->type[wlist->n] = vs->usym[j].type; wlist->order[wlist->n] = order; value = order * DFKNTsize(vs->usym[j].type | DFNT_NATIVE); if (value == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); wlist->esize[wlist->n] = (uint16)value; value = order * vs->usym[j].isize; if (value > MAX_FIELD_SIZE) HGOTO_ERROR(DFE_BADFIELDS, FAIL); wlist->isize[wlist->n] = (uint16)value; value = (int32)wlist->ivsize + (int32)(wlist->isize[wlist->n]); if (value > MAX_FIELD_SIZE) HGOTO_ERROR(DFE_BADFIELDS, FAIL); wlist->ivsize = (uint16)value; wlist->n++; break; } /* --- now look in the reserved symbol table --- */ if (!found) { for (j = 0; j < (intn)NRESERVED; j++) if (!strcmp(av[i], rstab[j].name)) { found = TRUE; if ((wlist->name[wlist->n] = strdup(rstab[j].name)) == NULL) { free(wlist->name); free(wlist->bptr); HGOTO_ERROR(DFE_NOSPACE, FAIL); } order = rstab[j].order; wlist->type[wlist->n] = rstab[j].type; wlist->order[wlist->n] = order; value = order * DFKNTsize(rstab[j].type | DFNT_NATIVE); if (value == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); wlist->esize[wlist->n] = (uint16)value; wlist->isize[wlist->n] = (uint16)(order * rstab[j].isize); wlist->ivsize += (uint16)(wlist->isize[wlist->n]); wlist->n++; break; } } if (!found) /* field is not a defined field - error */ HGOTO_ERROR(DFE_BADFIELDS, FAIL); } /* *********************************************************** */ /* compute and save the fields' offsets */ for (uj = 0, i = 0; i < wlist->n; i++) { wlist->off[i] = (uint16)uj; uj += wlist->isize[i]; } vs->marked = TRUE; /* mark vdata as being modified */ vs->new_h_sz = TRUE; /* mark vdata header size being changed */ HGOTO_DONE(SUCCEED); /* OK */ } /* if wlist->n == 0 */ } /* writing to empty vdata */ } /* writing to vdata */ /* * No matter the access mode, if there are elements in the VData * we should set the read list */ if (vs->nvertices > 0) { rlist = &(vs->rlist); rlist->n = 0; free(rlist->item); rlist->item = NULL; /* Allocate enough space for the read list */ if ((rlist->item = (intn *)malloc(sizeof(intn) * (size_t)(ac))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); for (i = 0; i < ac; i++) { found = FALSE; for (j = 0; j < vs->wlist.n; j++) if (!strcmp(av[i], vs->wlist.name[j])) { /* see if field exist */ found = TRUE; rlist->item[rlist->n] = j; /* save as index into wlist->name */ rlist->n++; break; } if (!found) /* field does not exist - error */ HGOTO_ERROR(DFE_BADFIELDS, FAIL); } ret_value = SUCCEED; } /* setting read list */ done: return ret_value; } /* VSsetfields */ /* ------------------------------------------------------------------ */ /* ** defines a (one) new field within the vdata ** return FAIL if error ** return SUCCEED if success */ intn VSfdefine(int32 vkey, const char *field, int32 localtype, int32 order) { char **av; int32 ac; int16 isize, replacesym; intn usymid; intn j; vsinstance_t *w; VDATA *vs; intn ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (scanattrs(field, &ac, &av) == FAIL) || (ac != 1)) HGOTO_ERROR(DFE_ARGS, FAIL); /* The order of a variable is stored in a 16-bit number, so have to keep this limit -QAK */ if (order < 1 || order > MAX_ORDER) HGOTO_ERROR(DFE_BADORDER, FAIL); /* don't forget to check for field size limit */ isize = (int16)DFKNTsize(localtype); if ((isize == FAIL) || (isize * order) > MAX_FIELD_SIZE) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* ** check for any duplicates */ /* --- then look in the user's symbol table --- */ for (replacesym = 0, j = 0; j < vs->nusym; j++) if (!strcmp(av[0], vs->usym[j].name)) { if (localtype != rstab[j].type && order != rstab[j].order) { replacesym = 1; break; } } if (replacesym) usymid = j; /* new definition will replace old at this index */ else { SYMDEF *tmp_sym = vs->usym; /* temp. pointer to the new symdef list */ usymid = (intn)vs->nusym; /* use temporary pointer in case we run out of memory, so we don't loose original list */ if (tmp_sym == NULL) { if ((tmp_sym = (SYMDEF *)malloc(sizeof(SYMDEF) * (size_t)(usymid + 1))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } else { if ((tmp_sym = (SYMDEF *)realloc(tmp_sym, sizeof(SYMDEF) * (size_t)(usymid + 1))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); } vs->usym = tmp_sym; } /* end else */ vs->usym[usymid].isize = (uint16)isize; /* ok, because number type sizes are smaller than max(int16) */ /* Copy the symbol [field] information */ if ((vs->usym[usymid].name = (char *)strdup(av[0])) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); vs->usym[usymid].type = (int16)localtype; vs->usym[usymid].order = (uint16)order; /* increment vs->nusym only if no user field has been redefined */ if (!replacesym) vs->nusym++; done: return ret_value; } /* VSfdefine */ /* ------------------------------ VFnfields ------------------------------- */ /* Return the number of fields in this Vdata Return FAIL on failure */ int32 VFnfields(int32 vkey) { vsinstance_t *w; VDATA *vs; int32 ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); ret_value = ((int32)vs->wlist.n); done: return ret_value; } /* VFnfields */ /* ----------------------------- VFfieldname ------------------------------ */ /* Return the name of the given field in this Vdata. This is just a pointer to the string in local memory and is only guaranteed to be valid as long as we are VSattached() to this Vdata Return NULL on failure */ char * VFfieldname(int32 vkey, int32 index) { vsinstance_t *w; VDATA *vs; char *ret_value = NULL; /* FAIL */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, NULL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, NULL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, NULL); if (vs->wlist.n == 0) HGOTO_ERROR(DFE_BADFIELDS, NULL); ret_value = ((char *)vs->wlist.name[index]); done: return ret_value; } /* VFfieldname */ /* ----------------------------- VFfieldtype ------------------------------ */ /* Return the type of the given field in this Vdata. Return FAIL on failure */ int32 VFfieldtype(int32 vkey, int32 index) { vsinstance_t *w; VDATA *vs; int32 ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); if (vs->wlist.n == 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); ret_value = ((int32)vs->wlist.type[index]); done: return ret_value; } /* VFfieldtype */ /* ----------------------------- VFfieldisize ------------------------------ */ /* Return the internal size of the given field in this Vdata. (internal to HDF file, see VWRITELIST in vg.h. 4/3/96) Return FAIL on failure */ int32 VFfieldisize(int32 vkey, int32 index) { vsinstance_t *w; VDATA *vs; int32 ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); if (vs->wlist.n == 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); ret_value = ((int32)vs->wlist.isize[index]); done: return ret_value; } /* VFfieldisize */ /* ----------------------------- VFfieldesize ------------------------------ */ /* Return the external size of the given field in this Vdata. (external to HDF file, see VWRITELIST in vg.h. 4/3/96) Return FAIL on failure */ int32 VFfieldesize(int32 vkey, int32 index) { vsinstance_t *w; VDATA *vs; int32 ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); if (vs->wlist.n == 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); ret_value = ((int32)vs->wlist.esize[index]); done: return ret_value; } /* VFfieldesize */ /* ----------------------------- VFfieldorder ------------------------------ */ /* Return the order of the given field in this Vdata. Return FAIL on failure */ int32 VFfieldorder(int32 vkey, int32 index) { vsinstance_t *w; VDATA *vs; int32 ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if ((vs == NULL) || (vs->otag != VSDESCTAG)) HGOTO_ERROR(DFE_ARGS, FAIL); if (vs->wlist.n == 0) HGOTO_ERROR(DFE_BADFIELDS, FAIL); ret_value = ((int32)vs->wlist.order[index]); done: return ret_value; } /* VFfieldorder */ /* -------------------------- VSsetexternalfile --------------------------- */ /* NAME VSsetexternalfile -- store Vdat info in a separate file USAGE int32 VSsetexternalfile(id, filename, offset) int32 id; IN: vdata ID char * filename; IN: name of external file int32 offset; IN: offset in external file RETURNS Return SUCCEED or FAIL DESCRIPTION Specify that the actual data for this Vdata be stored in a separate file (an "external file" in HDF terms). Only the data (as in VSwrite()) will be stored externally. Attributes and such will still be in the main file IMPORTANT: It is the user's responsibility to see that the separate files are transported with the main file. FORTRAN vsfsextf --------------------------------------------------------------------------- */ intn VSsetexternalfile(int32 vkey, const char *filename, int32 offset) { int32 ret_value = SUCCEED; vsinstance_t *w; VDATA *vs; intn status; if (!filename || offset < 0) HGOTO_ERROR(DFE_ARGS, FAIL); if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = w->vs; if (vs->access != 'w') HGOTO_ERROR(DFE_BADACC, FAIL); if (FAIL == vexistvs(vs->f, vs->oref)) HGOTO_ERROR(DFE_NOVS, FAIL); if (!w->ref) HGOTO_ERROR(DFE_NOVS, FAIL); /* no need to give a length since the element already exists */ /* The Data portion of a Vdata is always stored in linked blocks. */ /* So, use the special tag */ status = (intn)HXcreate(vs->f, (uint16)VSDATATAG, (uint16)w->ref, filename, offset, (int32)0); if (status != FAIL) { if ((vs->aid != 0) && (vs->aid != FAIL)) Hendaccess(vs->aid); vs->aid = status; } else ret_value = FAIL; done: return ret_value; } /* VSsetexternalfile */ /* -------------------------- VSgetexternalfile --------------------------- */ /* NAME VSgetexternalfile -- gets external file name and offset USAGE int32 VSgetexternalfile(id, name_len, filename, offset) int32 vkey; IN: vdata ID size_t name_len; IN: length of buffer for external file name char *extfilename; IN: external file name int32 *offset; IN: offset in external file RETURNS Returns length of the external file name or FAIL. If the vdata does not have external element, the length will be 0. DESCRIPTION IMPORTANT: It is the user's responsibility to see that the separate files are transported with the main file. FORTRAN N/A --------------------------------------------------------------------------- */ intn VSgetexternalfile(int32 vkey, uintn buf_size, char *ext_filename, int32 *offset) { vsinstance_t *w; VDATA *vs; sp_info_block_t info_block; intn actual_len = 0; intn ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* Get the vdata structure */ vs = w->vs; /* Vdata should have an aid */ if (vs->aid == 0 || vs->aid == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); else { memset(&info_block, 0, sizeof(sp_info_block_t)); /* HDget_special_info gets the special type and the special info */ if (HDget_special_info(vs->aid, &info_block) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* If the vdata has external element, return the external file info */ if (info_block.key == SPECIAL_EXT) { /* If the file name is not available, the file is probably corrupted, so we need to report it. */ if (info_block.path == NULL || strlen(info_block.path) <= 0) ret_value = FAIL; else { size_t ext_file_len = strlen(info_block.path); /* If caller requests the length of the external file name only, return the length */ if (buf_size == 0) actual_len = (intn)ext_file_len; else { /* Caller requests file name, so buffer must not be NULL */ if (ext_filename == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the name and its length */ strncpy(ext_filename, info_block.path, buf_size); actual_len = buf_size < ext_file_len ? buf_size : ext_file_len; /* Get the offset in the external file if it's requested */ if (offset != NULL) *offset = info_block.offset; } /* buf_size != 0 */ ret_value = actual_len; } } /* Not external */ else ret_value = FAIL; } done: return ret_value; } /* VSgetexternalfile */ /* -------------------------- VSgetexternalinfo --------------------------- */ /* NAME VSgetexternalinfo -- gets external file name and offset USAGE int32 VSgetexternalinfo(id, name_len, filename, offset) int32 vkey; IN: vdata ID uintn buf_size; IN: length of buffer for external file name char *extfilename; IN: external file name int32 *offset; IN: offset in external file, where data starts int32 *length; IN: length of data in external file RETURNS Returns length of the external file name or FAIL. If the vdata does not have external element, the length will be 0. DESCRIPTION VSgetexternalinfo gets the external file's name and the external data's offset and length, which specify the location and size of the data in the external file. buf_size specifies the size of the buffer ext_filename. When buf_size is 0, VSgetexternalinfo will simply return the length of the external file name, and not the file name itself. When the element is not special, VSgetexternalinfo will return 0. If the element is SPECIAL_EXT, but the external file name doesn't exist, VSgetexternalinfo will return FAIL. IMPORTANT: It is the user's responsibility to see that the separate files are transported with the main file. FORTRAN N/A --------------------------------------------------------------------------- */ intn VSgetexternalinfo(int32 vkey, uintn buf_size, char *ext_filename, int32 *offset, int32 *length) { vsinstance_t *w; VDATA *vs; intn actual_fname_len = 0; intn ret_value = SUCCEED; if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* Locate vs's index in vstab */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* Get the vdata structure */ vs = w->vs; /* Vdata should have an aid */ if (vs->aid == 0 || vs->aid == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); else { intn retcode = 0; sp_info_block_t info_block; memset(&info_block, 0, sizeof(sp_info_block_t)); /* Get the special info */ retcode = HDget_special_info(vs->aid, &info_block); /* When HDget_special_info returns FAIL, it could be the element is not special or some failure occur internally, info_block.key will be FAIL in the former case */ if (retcode == FAIL) { if (info_block.key == FAIL) ret_value = 0; /* not a special elem, no external file name */ /* Some failure occurred in HDget_special_info */ else HGOTO_ERROR(DFE_ARGS, FAIL); } /* If the vdata has external element, get the external info */ else if (info_block.key == SPECIAL_EXT) { /* If the file name is not available, the file is probably corrupted, so we need to report it. */ if (info_block.path == NULL || strlen(info_block.path) <= 0) ret_value = FAIL; else { intn tmp_len = (intn)info_block.length_file_name; /* If caller requests the length of the external file name only, return the length */ if (buf_size == 0) actual_fname_len = tmp_len; else { /* Caller requests file name, so buffer must not be NULL */ if (ext_filename == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Compute the length of the name to be returned: if requested buffer size is smaller, use that value for name's length, but that means file name could be truncated! */ actual_fname_len = (intn)buf_size < tmp_len ? (intn)buf_size : tmp_len; /* Get the name */ strncpy(ext_filename, info_block.path, buf_size); /* Get offset/length of the external data if requested */ if (offset != NULL) *offset = info_block.offset; if (length != NULL) *length = info_block.length; } /* buf_size != 0 */ ret_value = actual_fname_len; } } /* Special, but not external */ else ret_value = 0; /* no external file name */ } done: return ret_value; } /* VSgetexternalinfo */ /*----------------------------------------------------------------- NAME VSfpack -- pack into or unpack from a buf the values of fully interlaced fields. USAGE intn VSfpack(int32 vsid, intn packtype, char *fields_in_buf, void * buf, intn bufsz, intn n_records, char *fields, void * fldbufpt[]) int32 vsid; IN: vdata id. intn packtype; IN: _HDF_VSPACK(0) -- pack field values into vdata buf; _HDF_VSUNPACK(1) -- unpack vdata value into filed bufs. char *fields_in_buf; IN: fields in buf to write to or read from vdata. NULL stands for all fields in the vdata. void * buf; IN: buffer for vdata values. intn bufsz; IN: buf size in byte. intn n_records; IN: number of records to pack or unpack. char *fields; IN: names of the fields to be pack/unpack. It may be a subset of the fields_in_buf. NULL stands for all fields in buf. void * fldbufpt[]; IN: array of pointers to field buffers. RETURNS SUCCEED(0) on success; FAIL(-1) otherwise. DESCRIPTION 1. This pack/unpack routine is convenient for users. It also serves for FORTRAN programs to pack/unpack numeric and non-numeric fields. 2. The caller should supply correct number of field buffers, which should agree with the number of fields to be packed/unpacked. 3. For packtype = _HDF_VSPACK, the calling sequence should be: VSsetfields, VSfpack, and VSwrite; For packtype = _HDF_VSUNPACK, the calling sequence should be: VSsetfields, VSread and VSfpack. */ /*---------------------------------------------------------*/ intn VSfpack(int32 vsid, intn packtype, const char *fields_in_buf, void *buf, intn bufsz, intn n_records, const char *fields, void *fldbufpt[]) { int32 ac; char **av, *s; uint8 *bufp = (uint8 *)buf; uint8 **fbufps = NULL; int32 b_rec_size, *fmsizes = NULL, *foffs = NULL; intn i, j, found, ret_value = SUCCEED; vsinstance_t *wi; VDATA *vs; DYN_VWRITELIST *w; struct blist_t { /* contains info about fields in buf */ intn n; /* number of fields in buf */ int32 *idx; /* index of buf fields in vdata */ int32 *offs; /* offset of buf fields in buf */ } blist; /* initialize tobe-allocated vars in case of error before allocation */ blist.idx = NULL; blist.offs = NULL; if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vgtab */ if (NULL == (wi = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); vs = wi->vs; if (vs == NULL) HGOTO_ERROR(DFE_NOVS, FAIL); w = &vs->wlist; /* build blist based on info in w */ if (fields_in_buf == NULL) ac = w->n; else { /* build our own blist */ if (scanattrs(fields_in_buf, &ac, &av) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if ((av == NULL) || (ac < 1)) HGOTO_ERROR(DFE_ARGS, FAIL); } blist.n = ac; blist.idx = (int32 *)malloc((size_t)ac * sizeof(int32)); blist.offs = (int32 *)malloc((size_t)ac * sizeof(int32)); if ((blist.idx == NULL) || (blist.offs == NULL)) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* fill arrays blist.msizes and blist.offs; calculate buf record size */ b_rec_size = 0; if (fields_in_buf != NULL) /* a subset of vdata fields are contained in buf */ for (i = 0; i < ac; i++) { /* look for the field in vdata fields */ found = 0; s = av[i]; for (j = 0; j < w->n; j++) { #ifdef VDATA_FIELDS_ALL_UPPER if (matchnocase(s, w->name[j])) { found = 1; break; } #else if (strcmp(s, w->name[j]) == 0) { found = 1; break; } #endif /* VDATA_FIELDS_ALL_UPPER */ } /* for j */ if (!found) HGOTO_ERROR(DFE_BADFIELDS, FAIL); /* get field info */ blist.idx[i] = j; blist.offs[i] = (i == 0 ? 0 : blist.offs[i - 1] + w->esize[blist.idx[i - 1]]); b_rec_size += w->esize[j]; } /* for i */ else /* buf contains all vdata fields */ for (i = 0; i < ac; i++) { blist.idx[i] = i; blist.offs[i] = (i == 0 ? 0 : blist.offs[i - 1] + w->esize[i - 1]); b_rec_size += w->esize[i]; } /* check bufsz */ if (bufsz < b_rec_size * n_records) HGOTO_ERROR(DFE_NOTENOUGH, FAIL); if (fields != NULL) { /* convert field names into tokens. */ if (scanattrs(fields, &ac, &av) == FAIL) HGOTO_ERROR(DFE_BADFIELDS, FAIL); if ((av == NULL) || (ac < 1)) HGOTO_ERROR(DFE_ARGS, FAIL); } else ac = blist.n; /* fill array of fmsizes, foffs, fbufps */ if ((fmsizes = (int32 *)malloc((size_t)ac * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((foffs = (int32 *)malloc((size_t)ac * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if ((fbufps = (uint8 **)malloc((size_t)ac * sizeof(uint8 *))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); if (fields != NULL) { /* a subset of buf fields */ for (i = 0; i < ac; i++) { /* find field info */ found = 0; s = av[i]; for (j = 0; j < blist.n; j++) { #ifdef VDATA_FIELDS_ALL_UPPER if (matchnocase(s, w->name[blist.idx[j]])) { found = 1; break; } #else if (strcmp(s, w->name[blist.idx[j]]) == 0) { found = 1; break; } #endif /* VDATA_FIELDS_ALL_UPPER */ } /* for */ if (!found) HGOTO_ERROR(DFE_BADFIELDS, FAIL); fmsizes[i] = (int32)w->esize[blist.idx[j]]; foffs[i] = blist.offs[j]; fbufps[i] = fldbufpt[i]; if (fbufps[i] == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); } } else { /* all buf fields */ for (i = 0; i < ac; i++) { fmsizes[i] = (int32)w->esize[blist.idx[i]]; foffs[i] = blist.offs[i]; fbufps[i] = fldbufpt[i]; if (fbufps[i] == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); } } if (packtype == _HDF_VSPACK) { /* memory copy fields data to vdata buf */ for (i = 0; i < n_records; i++) { for (j = 0; j < ac; j++) { memcpy(bufp + foffs[j], fbufps[j], fmsizes[j]); fbufps[j] += fmsizes[j]; } bufp += b_rec_size; } } else { /* unpack from buf to fields */ for (i = 0; i < n_records; i++) { for (j = 0; j < ac; j++) { memcpy(fbufps[j], bufp + foffs[j], fmsizes[j]); fbufps[j] += fmsizes[j]; } bufp += b_rec_size; } } done: free(blist.idx); free(blist.offs); free(fmsizes); free(foffs); free(fbufps); return ret_value; } /* VSfpack */ /*--------------------------------------------------------- */ hdf4-hdf4.3.1/hdf/test/000077500000000000000000000000001503061704500145475ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/test/CMakeLists.txt000066400000000000000000000061261503061704500173140ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_HDF_TEST C) #----------------------------------------------------------------------------- # Generate the srcdir_str.h file #----------------------------------------------------------------------------- set (srcdir ${HDF4_HDF_TEST_SOURCE_DIR}) configure_file (${HDF4_HDF_TEST_SOURCE_DIR}/srcdir_str.h.in srcdir_str.h @ONLY) LINK_DIRECTORIES ( ${HDF4_HDF_BINARY_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ) set (testhdf_SRCS ${HDF4_HDF_TEST_SOURCE_DIR}/testhdf.c ${HDF4_HDF_TEST_SOURCE_DIR}/an.c ${HDF4_HDF_TEST_SOURCE_DIR}/anfile.c ${HDF4_HDF_TEST_SOURCE_DIR}/bitio.c ${HDF4_HDF_TEST_SOURCE_DIR}/blocks.c ${HDF4_HDF_TEST_SOURCE_DIR}/chunks.c ${HDF4_HDF_TEST_SOURCE_DIR}/comp.c ${HDF4_HDF_TEST_SOURCE_DIR}/conv.c ${HDF4_HDF_TEST_SOURCE_DIR}/extelt.c ${HDF4_HDF_TEST_SOURCE_DIR}/file.c ${HDF4_HDF_TEST_SOURCE_DIR}/file1.c ${HDF4_HDF_TEST_SOURCE_DIR}/litend.c ${HDF4_HDF_TEST_SOURCE_DIR}/macros.c ${HDF4_HDF_TEST_SOURCE_DIR}/man.c ${HDF4_HDF_TEST_SOURCE_DIR}/mgr.c ${HDF4_HDF_TEST_SOURCE_DIR}/nbit.c ${HDF4_HDF_TEST_SOURCE_DIR}/rig.c ${HDF4_HDF_TEST_SOURCE_DIR}/sdmms.c ${HDF4_HDF_TEST_SOURCE_DIR}/sdnmms.c ${HDF4_HDF_TEST_SOURCE_DIR}/sdstr.c ${HDF4_HDF_TEST_SOURCE_DIR}/slab.c ${HDF4_HDF_TEST_SOURCE_DIR}/tattdatainfo.c ${HDF4_HDF_TEST_SOURCE_DIR}/tbv.c ${HDF4_HDF_TEST_SOURCE_DIR}/tdatainfo.c ${HDF4_HDF_TEST_SOURCE_DIR}/tdfr8.c ${HDF4_HDF_TEST_SOURCE_DIR}/tdupimgs.c ${HDF4_HDF_TEST_SOURCE_DIR}/tmgrattr.c ${HDF4_HDF_TEST_SOURCE_DIR}/tmgrcomp.c ${HDF4_HDF_TEST_SOURCE_DIR}/tree.c ${HDF4_HDF_TEST_SOURCE_DIR}/tszip.c ${HDF4_HDF_TEST_SOURCE_DIR}/tusejpegfuncs.c ${HDF4_HDF_TEST_SOURCE_DIR}/tutils.c ${HDF4_HDF_TEST_SOURCE_DIR}/tvattr.c ${HDF4_HDF_TEST_SOURCE_DIR}/tvnameclass.c ${HDF4_HDF_TEST_SOURCE_DIR}/tvset.c ${HDF4_HDF_TEST_SOURCE_DIR}/tvsfpack.c ${HDF4_HDF_TEST_SOURCE_DIR}/vers.c ) #-- Adding test for testhdf add_executable (testhdf ${testhdf_SRCS}) target_include_directories(testhdf PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${CMAKE_CURRENT_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES};${HDF4_HDFSOURCE_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (testhdf STATIC) target_link_libraries (testhdf PRIVATE ${HDF4_SRC_LIB_TARGET} ${LINK_COMP_LIBS}) else () TARGET_C_PROPERTIES (testhdf SHARED) target_link_libraries (testhdf PRIVATE ${HDF4_SRC_LIBSH_TARGET} ${LINK_COMP_LIBS}) endif () set_target_properties (testhdf PROPERTIES FOLDER test) #-- Adding test for buffer if (NOT WIN32) add_executable (buffer ${HDF4_HDF_TEST_SOURCE_DIR}/buffer.c) target_include_directories(buffer PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_HDFSOURCE_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (buffer STATIC) target_link_libraries (buffer PRIVATE ${HDF4_SRC_LIB_TARGET}) else () TARGET_C_PROPERTIES (buffer SHARED) target_link_libraries (buffer PRIVATE ${HDF4_SRC_LIBSH_TARGET}) endif () set_target_properties (buffer PROPERTIES FOLDER test) endif () include (CMakeTests.cmake) hdf4-hdf4.3.1/hdf/test/CMakeTests.cmake000066400000000000000000000125401503061704500175560ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/TEST") file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/TEST/testdir") file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/TEST/testfiles") #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES 8bit.dat bitio.dat gr_r24.dat greyjpeg.dat jpeg.dat litend.dat nbit.dat tmgr.dat tvattr.dat grtdfui83.hdf ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_HDF_TEST_SOURCE_DIR}/test_files/${h4_file}" "${PROJECT_BINARY_DIR}/TEST/test_files/${h4_file}" "hdf_test_files") endforeach () add_custom_target(hdf_test_files ALL COMMENT "Copying files needed by hdf tests" DEPENDS ${hdf_test_files_list}) # Remove any output file left over from previous test run set (HDF4_TESTHDF_FILES Block_info.hdf ChunkedGR.hdf ChunkedGR_DF.hdf ChunkedGR_NO.hdf ChunkedGR_RL.hdf ChunkedGR_SK.hdf datainfo_annot.hdf datainfo_dfri.hdf datainfo_images.hdf datainfo_linkblock.hdf datainfo_simple.hdf gr2.hdf gr_chunkcomp.hdf gr_comp.hdf gr_double_test.hdf gr_gzip.hdf gr_jpeg.hdf gr_r8.hdf nntcheck.hdf ntcheck.hdf RI_8.hdf RI_16.hdf RI_32.hdf RI_fl32.hdf RI_fl64.hdf RIchunkedziped.hdf s1w.hdf s3w.hdf s4w.hdf sdstrings.hdf swf32.hdf swf64.hdf swi8.hdf swi16.hdf swi32.hdf swin.hdf swui8.hdf swui16.hdf swui32.hdf swuin.hdf t.hdf t1.hdf t2.hdf t3.hdf t4.hdf tbitio.hdf tblocks.hdf tchunks.hdf tcomp.hdf tdf24.hdf tdfan.hdf temp.hdf thf.hdf tjpeg.hdf tlongnames.hdf tman.hdf tmgr.hdf tmgratt.hdf tmgrchk.hdf tnbit.hdf tref.hdf tuservds.hdf tuservgs.hdf tvattr.hdf tvpack.hdf tvsempty.hdf tvset.hdf tvsetext.hdf tx.hdf Tables_External_File ) add_test ( NAME HDF_TEST-testhdf-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${HDF4_TESTHDF_FILES} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST ) set_tests_properties (HDF_TEST-testhdf-clearall-objects PROPERTIES LABELS ${PROJECT_NAME} FIXTURES_SETUP clear_HDF_TEST ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDF_TEST-testhdf-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () set (last_test "HDF_TEST-testhdf-clearall-objects") set (HDF4_TESTHDF_THF0_FILES thf0.hdf thf1.hdf thf2.hdf thf3.hdf thf4.hdf thf5.hdf thf6.hdf thf7.hdf thf8.hdf thf9.hdf ) add_test ( NAME HDF_TEST-testhdf_thf0-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${HDF4_TESTHDF_THF0_FILES} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST ) set_tests_properties (HDF_TEST-testhdf_thf0-clearall-objects PROPERTIES LABELS ${PROJECT_NAME} FIXTURES_REQUIRED clear_HDF_TEST ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDF_TEST-testhdf_thf0-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () set (last_test "HDF_TEST-testhdf_thf0-clearall-objects") set (thf_decade 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ) foreach (decade ${thf_decade}) add_test ( NAME HDF_TEST-testhdf_thf${decade}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove thf${decade}0.hdf thf${decade}1.hdf thf${decade}2.hdf thf${decade}3.hdf thf${decade}4.hdf thf${decade}5.hdf thf${decade}6.hdf thf${decade}7.hdf thf${decade}8.hdf thf${decade}9.hdf WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST ) set_tests_properties (HDF_TEST-testhdf_thf${decade}-clearall-objects PROPERTIES LABELS ${PROJECT_NAME} ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDF_TEST-testhdf_thf${decade}-clearall-objects PROPERTIES DEPENDS ${last_test}) endif () set (last_test "HDF_TEST-testhdf_thf${decade}-clearall-objects") endforeach (decade ${thf_decade}) add_test (NAME HDF_TEST-testhdf COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (passRegex "All tests were successful") set_tests_properties (HDF_TEST-testhdf PROPERTIES PASS_REGULAR_EXPRESSION "${passRegex}" WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST LABELS ${PROJECT_NAME} ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDF_TEST-testhdf PROPERTIES DEPENDS ${last_test}) endif () set (last_test "HDF_TEST-testhdf") #-- Adding test for buffer if (NOT WIN32) add_test (NAME HDF_TEST-buffer COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set_tests_properties (HDF_TEST-buffer PROPERTIES WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST LABELS ${PROJECT_NAME} ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDF_TEST-buffer PROPERTIES DEPENDS ${last_test}) endif () set (last_test "HDF_TEST-buffer") endif () hdf4-hdf4.3.1/hdf/test/Makefile.am000066400000000000000000000044751503061704500166150ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am AM_CPPFLAGS = -I$(top_srcdir)/hdf/src ############################################################################# ## Testing ## ############################################################################# if HDF_BUILD_FORTRAN TEST_PROG = testhdf buffer fortest check_PROGRAMS = testhdf buffer fortest fortestF else TEST_PROG = testhdf buffer check_PROGRAMS = testhdf buffer endif testhdf_SOURCES = an.c anfile.c bitio.c blocks.c chunks.c comp.c \ conv.c extelt.c file.c file1.c litend.c macros.c man.c \ mgr.c nbit.c rig.c sdmms.c sdnmms.c sdstr.c slab.c tbv.c \ tattdatainfo.c tdatainfo.c tdfr8.c tdupimgs.c testhdf.c \ tmgrattr.c tmgrcomp.c tree.c tszip.c tusejpegfuncs.c \ tutils.c tvattr.c tvnameclass.c tvset.c tvsfpack.c vers.c testhdf_LDADD = $(LIBHDF) testhdf_DEPENDENCIES = testdir $(LIBHDF) buffer_LDADD = $(LIBHDF) buffer_DEPENDENCIES = $(LIBHDF) if HDF_BUILD_FORTRAN fortest_SOURCES = fortest.c fortest_LDADD = $(LIBHDF) fortest_DEPENDENCIES = testdir fortestF$(EXEEXT) $(LIBHDF) fortestF_SOURCES = forsupff.f forsupf.c fortestF.f manf.f mgrf.f slabwf.f \ t24f.f tanf.f tanfilef.f tpf.f tr8f.f tsdmmsf.f \ tsdnmmsf.f tsdnntf.f tsdntf.f tsdstrf.f tstubsf.f \ tvattrf.f tvsetf.f FFLAGS += $(AM_CPPFLAGS) fortestF_LDADD = $(LIBHDF) fortestF_DEPENDENCIES = testdir $(LIBHDF) endif testdir: -mkdir testdir ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += fortest.arg Fortran_err.dat testdir/t5.hdf Tables_External_File # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf testdir DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/hdf/test/Makefile.in000066400000000000000000001536751503061704500166350ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ @HDF_BUILD_FORTRAN_FALSE@check_PROGRAMS = testhdf$(EXEEXT) \ @HDF_BUILD_FORTRAN_FALSE@ buffer$(EXEEXT) @HDF_BUILD_FORTRAN_TRUE@check_PROGRAMS = testhdf$(EXEEXT) \ @HDF_BUILD_FORTRAN_TRUE@ buffer$(EXEEXT) fortest$(EXEEXT) \ @HDF_BUILD_FORTRAN_TRUE@ fortestF$(EXEEXT) @HDF_BUILD_FORTRAN_TRUE@am__append_1 = $(AM_CPPFLAGS) TESTS = $(am__EXEEXT_1) subdir = hdf/test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = srcdir_str.h CONFIG_CLEAN_VPATH_FILES = buffer_SOURCES = buffer.c buffer_OBJECTS = buffer.$(OBJEXT) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__fortest_SOURCES_DIST = fortest.c @HDF_BUILD_FORTRAN_TRUE@am_fortest_OBJECTS = fortest.$(OBJEXT) fortest_OBJECTS = $(am_fortest_OBJECTS) am__fortestF_SOURCES_DIST = forsupff.f forsupf.c fortestF.f manf.f \ mgrf.f slabwf.f t24f.f tanf.f tanfilef.f tpf.f tr8f.f \ tsdmmsf.f tsdnmmsf.f tsdnntf.f tsdntf.f tsdstrf.f tstubsf.f \ tvattrf.f tvsetf.f @HDF_BUILD_FORTRAN_TRUE@am_fortestF_OBJECTS = forsupff.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ forsupf.$(OBJEXT) fortestF.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ manf.$(OBJEXT) mgrf.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ slabwf.$(OBJEXT) t24f.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tanf.$(OBJEXT) tanfilef.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tpf.$(OBJEXT) tr8f.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tsdmmsf.$(OBJEXT) tsdnmmsf.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tsdnntf.$(OBJEXT) tsdntf.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tsdstrf.$(OBJEXT) tstubsf.$(OBJEXT) \ @HDF_BUILD_FORTRAN_TRUE@ tvattrf.$(OBJEXT) tvsetf.$(OBJEXT) fortestF_OBJECTS = $(am_fortestF_OBJECTS) am_testhdf_OBJECTS = an.$(OBJEXT) anfile.$(OBJEXT) bitio.$(OBJEXT) \ blocks.$(OBJEXT) chunks.$(OBJEXT) comp.$(OBJEXT) \ conv.$(OBJEXT) extelt.$(OBJEXT) file.$(OBJEXT) file1.$(OBJEXT) \ litend.$(OBJEXT) macros.$(OBJEXT) man.$(OBJEXT) mgr.$(OBJEXT) \ nbit.$(OBJEXT) rig.$(OBJEXT) sdmms.$(OBJEXT) sdnmms.$(OBJEXT) \ sdstr.$(OBJEXT) slab.$(OBJEXT) tbv.$(OBJEXT) \ tattdatainfo.$(OBJEXT) tdatainfo.$(OBJEXT) tdfr8.$(OBJEXT) \ tdupimgs.$(OBJEXT) testhdf.$(OBJEXT) tmgrattr.$(OBJEXT) \ tmgrcomp.$(OBJEXT) tree.$(OBJEXT) tszip.$(OBJEXT) \ tusejpegfuncs.$(OBJEXT) tutils.$(OBJEXT) tvattr.$(OBJEXT) \ tvnameclass.$(OBJEXT) tvset.$(OBJEXT) tvsfpack.$(OBJEXT) \ vers.$(OBJEXT) testhdf_OBJECTS = $(am_testhdf_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/an.Po ./$(DEPDIR)/anfile.Po \ ./$(DEPDIR)/bitio.Po ./$(DEPDIR)/blocks.Po \ ./$(DEPDIR)/buffer.Po ./$(DEPDIR)/chunks.Po \ ./$(DEPDIR)/comp.Po ./$(DEPDIR)/conv.Po ./$(DEPDIR)/extelt.Po \ ./$(DEPDIR)/file.Po ./$(DEPDIR)/file1.Po \ ./$(DEPDIR)/forsupf.Po ./$(DEPDIR)/fortest.Po \ ./$(DEPDIR)/litend.Po ./$(DEPDIR)/macros.Po ./$(DEPDIR)/man.Po \ ./$(DEPDIR)/mgr.Po ./$(DEPDIR)/nbit.Po ./$(DEPDIR)/rig.Po \ ./$(DEPDIR)/sdmms.Po ./$(DEPDIR)/sdnmms.Po \ ./$(DEPDIR)/sdstr.Po ./$(DEPDIR)/slab.Po \ ./$(DEPDIR)/tattdatainfo.Po ./$(DEPDIR)/tbv.Po \ ./$(DEPDIR)/tdatainfo.Po ./$(DEPDIR)/tdfr8.Po \ ./$(DEPDIR)/tdupimgs.Po ./$(DEPDIR)/testhdf.Po \ ./$(DEPDIR)/tmgrattr.Po ./$(DEPDIR)/tmgrcomp.Po \ ./$(DEPDIR)/tree.Po ./$(DEPDIR)/tszip.Po \ ./$(DEPDIR)/tusejpegfuncs.Po ./$(DEPDIR)/tutils.Po \ ./$(DEPDIR)/tvattr.Po ./$(DEPDIR)/tvnameclass.Po \ ./$(DEPDIR)/tvset.Po ./$(DEPDIR)/tvsfpack.Po \ ./$(DEPDIR)/vers.Po 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_CC_1 = 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_CCLD_1 = F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) AM_V_F77 = $(am__v_F77_@AM_V@) am__v_F77_ = $(am__v_F77_@AM_DEFAULT_V@) am__v_F77_0 = @echo " F77 " $@; am__v_F77_1 = F77LD = $(F77) F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = SOURCES = buffer.c $(fortest_SOURCES) $(fortestF_SOURCES) \ $(testhdf_SOURCES) DIST_SOURCES = buffer.c $(am__fortest_SOURCES_DIST) \ $(am__fortestF_SOURCES_DIST) $(testhdf_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck @HDF_BUILD_FORTRAN_FALSE@am__EXEEXT_1 = testhdf$(EXEEXT) \ @HDF_BUILD_FORTRAN_FALSE@ buffer$(EXEEXT) @HDF_BUILD_FORTRAN_TRUE@am__EXEEXT_1 = testhdf$(EXEEXT) \ @HDF_BUILD_FORTRAN_TRUE@ buffer$(EXEEXT) fortest$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/srcdir_str.h.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ $(am__append_1) FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog fortest.arg Fortran_err.dat \ testdir/t5.hdf Tables_External_File AM_CPPFLAGS = -I$(top_srcdir)/hdf/src @HDF_BUILD_FORTRAN_FALSE@TEST_PROG = testhdf buffer ############################################################################# ############################################################################# @HDF_BUILD_FORTRAN_TRUE@TEST_PROG = testhdf buffer fortest testhdf_SOURCES = an.c anfile.c bitio.c blocks.c chunks.c comp.c \ conv.c extelt.c file.c file1.c litend.c macros.c man.c \ mgr.c nbit.c rig.c sdmms.c sdnmms.c sdstr.c slab.c tbv.c \ tattdatainfo.c tdatainfo.c tdfr8.c tdupimgs.c testhdf.c \ tmgrattr.c tmgrcomp.c tree.c tszip.c tusejpegfuncs.c \ tutils.c tvattr.c tvnameclass.c tvset.c tvsfpack.c vers.c testhdf_LDADD = $(LIBHDF) testhdf_DEPENDENCIES = testdir $(LIBHDF) buffer_LDADD = $(LIBHDF) buffer_DEPENDENCIES = $(LIBHDF) @HDF_BUILD_FORTRAN_TRUE@fortest_SOURCES = fortest.c @HDF_BUILD_FORTRAN_TRUE@fortest_LDADD = $(LIBHDF) @HDF_BUILD_FORTRAN_TRUE@fortest_DEPENDENCIES = testdir fortestF$(EXEEXT) $(LIBHDF) @HDF_BUILD_FORTRAN_TRUE@fortestF_SOURCES = forsupff.f forsupf.c fortestF.f manf.f mgrf.f slabwf.f \ @HDF_BUILD_FORTRAN_TRUE@ t24f.f tanf.f tanfilef.f tpf.f tr8f.f tsdmmsf.f \ @HDF_BUILD_FORTRAN_TRUE@ tsdnmmsf.f tsdnntf.f tsdntf.f tsdstrf.f tstubsf.f \ @HDF_BUILD_FORTRAN_TRUE@ tvattrf.f tvsetf.f @HDF_BUILD_FORTRAN_TRUE@fortestF_LDADD = $(LIBHDF) @HDF_BUILD_FORTRAN_TRUE@fortestF_DEPENDENCIES = testdir $(LIBHDF) DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .f .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 hdf/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign hdf/test/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): srcdir_str.h: $(top_builddir)/config.status $(srcdir)/srcdir_str.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: @list='$(check_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 buffer$(EXEEXT): $(buffer_OBJECTS) $(buffer_DEPENDENCIES) $(EXTRA_buffer_DEPENDENCIES) @rm -f buffer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(buffer_OBJECTS) $(buffer_LDADD) $(LIBS) fortest$(EXEEXT): $(fortest_OBJECTS) $(fortest_DEPENDENCIES) $(EXTRA_fortest_DEPENDENCIES) @rm -f fortest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fortest_OBJECTS) $(fortest_LDADD) $(LIBS) fortestF$(EXEEXT): $(fortestF_OBJECTS) $(fortestF_DEPENDENCIES) $(EXTRA_fortestF_DEPENDENCIES) @rm -f fortestF$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(fortestF_OBJECTS) $(fortestF_LDADD) $(LIBS) testhdf$(EXEEXT): $(testhdf_OBJECTS) $(testhdf_DEPENDENCIES) $(EXTRA_testhdf_DEPENDENCIES) @rm -f testhdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testhdf_OBJECTS) $(testhdf_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/an.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blocks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chunks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extelt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/forsupf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fortest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/litend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macros.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/man.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nbit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdmms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdnmms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdstr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slab.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattdatainfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tbv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdatainfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdfr8.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdupimgs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmgrattr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmgrcomp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tszip.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tusejpegfuncs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvattr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvnameclass.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvsfpack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vers.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< .f.o: $(AM_V_F77)$(F77COMPILE) -c -o $@ $< .f.obj: $(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(AM_V_F77)$(LTF77COMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testhdf.log: testhdf$(EXEEXT) @p='testhdf$(EXEEXT)'; \ b='testhdf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) buffer.log: buffer$(EXEEXT) @p='buffer$(EXEEXT)'; \ b='buffer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fortest.log: fortest$(EXEEXT) @p='fortest$(EXEEXT)'; \ b='fortest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile all-local 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/an.Po -rm -f ./$(DEPDIR)/anfile.Po -rm -f ./$(DEPDIR)/bitio.Po -rm -f ./$(DEPDIR)/blocks.Po -rm -f ./$(DEPDIR)/buffer.Po -rm -f ./$(DEPDIR)/chunks.Po -rm -f ./$(DEPDIR)/comp.Po -rm -f ./$(DEPDIR)/conv.Po -rm -f ./$(DEPDIR)/extelt.Po -rm -f ./$(DEPDIR)/file.Po -rm -f ./$(DEPDIR)/file1.Po -rm -f ./$(DEPDIR)/forsupf.Po -rm -f ./$(DEPDIR)/fortest.Po -rm -f ./$(DEPDIR)/litend.Po -rm -f ./$(DEPDIR)/macros.Po -rm -f ./$(DEPDIR)/man.Po -rm -f ./$(DEPDIR)/mgr.Po -rm -f ./$(DEPDIR)/nbit.Po -rm -f ./$(DEPDIR)/rig.Po -rm -f ./$(DEPDIR)/sdmms.Po -rm -f ./$(DEPDIR)/sdnmms.Po -rm -f ./$(DEPDIR)/sdstr.Po -rm -f ./$(DEPDIR)/slab.Po -rm -f ./$(DEPDIR)/tattdatainfo.Po -rm -f ./$(DEPDIR)/tbv.Po -rm -f ./$(DEPDIR)/tdatainfo.Po -rm -f ./$(DEPDIR)/tdfr8.Po -rm -f ./$(DEPDIR)/tdupimgs.Po -rm -f ./$(DEPDIR)/testhdf.Po -rm -f ./$(DEPDIR)/tmgrattr.Po -rm -f ./$(DEPDIR)/tmgrcomp.Po -rm -f ./$(DEPDIR)/tree.Po -rm -f ./$(DEPDIR)/tszip.Po -rm -f ./$(DEPDIR)/tusejpegfuncs.Po -rm -f ./$(DEPDIR)/tutils.Po -rm -f ./$(DEPDIR)/tvattr.Po -rm -f ./$(DEPDIR)/tvnameclass.Po -rm -f ./$(DEPDIR)/tvset.Po -rm -f ./$(DEPDIR)/tvsfpack.Po -rm -f ./$(DEPDIR)/vers.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local 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 -f ./$(DEPDIR)/an.Po -rm -f ./$(DEPDIR)/anfile.Po -rm -f ./$(DEPDIR)/bitio.Po -rm -f ./$(DEPDIR)/blocks.Po -rm -f ./$(DEPDIR)/buffer.Po -rm -f ./$(DEPDIR)/chunks.Po -rm -f ./$(DEPDIR)/comp.Po -rm -f ./$(DEPDIR)/conv.Po -rm -f ./$(DEPDIR)/extelt.Po -rm -f ./$(DEPDIR)/file.Po -rm -f ./$(DEPDIR)/file1.Po -rm -f ./$(DEPDIR)/forsupf.Po -rm -f ./$(DEPDIR)/fortest.Po -rm -f ./$(DEPDIR)/litend.Po -rm -f ./$(DEPDIR)/macros.Po -rm -f ./$(DEPDIR)/man.Po -rm -f ./$(DEPDIR)/mgr.Po -rm -f ./$(DEPDIR)/nbit.Po -rm -f ./$(DEPDIR)/rig.Po -rm -f ./$(DEPDIR)/sdmms.Po -rm -f ./$(DEPDIR)/sdnmms.Po -rm -f ./$(DEPDIR)/sdstr.Po -rm -f ./$(DEPDIR)/slab.Po -rm -f ./$(DEPDIR)/tattdatainfo.Po -rm -f ./$(DEPDIR)/tbv.Po -rm -f ./$(DEPDIR)/tdatainfo.Po -rm -f ./$(DEPDIR)/tdfr8.Po -rm -f ./$(DEPDIR)/tdupimgs.Po -rm -f ./$(DEPDIR)/testhdf.Po -rm -f ./$(DEPDIR)/tmgrattr.Po -rm -f ./$(DEPDIR)/tmgrcomp.Po -rm -f ./$(DEPDIR)/tree.Po -rm -f ./$(DEPDIR)/tszip.Po -rm -f ./$(DEPDIR)/tusejpegfuncs.Po -rm -f ./$(DEPDIR)/tutils.Po -rm -f ./$(DEPDIR)/tvattr.Po -rm -f ./$(DEPDIR)/tvnameclass.Po -rm -f ./$(DEPDIR)/tvset.Po -rm -f ./$(DEPDIR)/tvsfpack.Po -rm -f ./$(DEPDIR)/vers.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-local 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 mostlyclean-local pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile testdir: -mkdir testdir # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf testdir # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/hdf/test/README000066400000000000000000000034041503061704500154300ustar00rootroot00000000000000This directory contains the test suite for the basic library, libdf.a. After running the makefile at either the higher level or this level, you will find two executable programs, testhdf and fortest, in this directory. Testhdf tests the C functions, while fortest the Fortran interface. At the end of execution, each program reports how many errors occurred. Please contact us at hdfhelp@ncsa.uiuc.edu if the test fails on your machine. Special notes for fortest: "fortest" is just a C-code front to parse command line arguments. It produces a file, fortest.arg which contains lines of instruction to invoke the real fortran test which is called fortestF. Each line in fortest.arg contains a command and a parameter. Command Parameter Description ------- --------- ----------- Test Name Test Skip Name Skip test Cleanup String How to cleanup *.hdf Verbosity Integer Verbosity = "fortest" then invokes "fortestF" with "fortest.arg" as input. Cleanup Commands ---------------- If is Yes/No, it directs to delete the *.hdf files or not. If is not Yes/No, it represents the system command to delete the *.hdf files. (NOTE: specifying a system command does not imply Cleanup.) Verbosity convention -------------------- The higher the verbosity value, the more information printed. So, output for a higher verbosity value also includes the output of all lower verbosity values. Value Description 0 None: No informational message. 1 "All tests passed" 2 Header of overall test 3 Default: header and results of individual test 4 5 Low: Major category of tests. 6 7 Medium: Minor category of tests such as functions called. 8 9 High: Highest level. All information. hdf4-hdf4.3.1/hdf/test/an.c000066400000000000000000000242561503061704500153220ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*********************************************************** * * Test program: Stores annotations in a file * Writes several SDSs and corresponding RISs to a file. * Writes labels and descriptions for all but the first three SDSs. * Writes labels and descriptions for all RISs. * *************************************************************/ #define TESTFILE "tdfan.hdf" #include "tproto.h" #define ISFIRST (int)1 #define NOTFIRST (int)0 #define MAXLEN_LAB 50 #define MAXLEN_DESC 1000 #define ROWS 10 #define COLS 10 #define REPS 32 /*2*/ /* number of data sets to write to file */ static void gen2Dfloat(int height, int width, float *data); static void genimage(int height, int width, float *data, uint8 *image); static void check_lab_desc(uint16 tag, uint16 ref, char *label, char *desc); void test_an(void) { char labsds[MAXLEN_LAB], labris[MAXLEN_LAB], descsds[MAXLEN_DESC], descris[MAXLEN_DESC]; uint8 pal[768]; uint8 *image, *newimage; uint16 refnum; int32 ret; intn rank; int j; int32 dimsizes[2]; float *data; /* set up object labels and descriptions */ strcpy(labsds, "Object label #1: sds"); strcpy(labris, "Object label #2: image"); strcpy(descsds, "Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 \n"); strcat(descsds, " 13 14 15 16 17 18 19 20 **END SDS DESCR**\n"); strcpy(descris, "Object Descr #2: A B C D E F G H I J K L \n"); strcat(descris, " M N O **END IMAGE DESCR **\n"); /***** generate float array and image *****/ data = (float *)malloc(ROWS * COLS * sizeof(float)); image = (uint8 *)malloc(ROWS * COLS * sizeof(char)); newimage = (uint8 *)malloc(ROWS * COLS * sizeof(char)); dimsizes[0] = ROWS; dimsizes[1] = COLS; gen2Dfloat(ROWS, COLS, data); genimage(ROWS, COLS, data, image); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); /******** Write labels and descriptions *********/ MESSAGE(5, printf("*** Writing labels and descriptions with SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { /* write out scientific data set */ ret = DFSDadddata(TESTFILE, 2, dimsizes, (void *)data); RESULT("DFSDadddata"); if ((j % 3) != 0) { /* write out annotations for 2 out of every 3 */ refnum = DFSDlastref(); ret = DFANputlabel(TESTFILE, DFTAG_SDG, refnum, labsds); RESULT("DFANputlabel"); ret = DFANputdesc(TESTFILE, DFTAG_SDG, refnum, descsds, (int32)strlen(descsds)); RESULT("DFANputdesc"); } ret = DFR8addimage(TESTFILE, (void *)image, COLS, ROWS, 0); RESULT("DFR8addimage"); refnum = DFR8lastref(); ret = DFANputlabel(TESTFILE, DFTAG_RIG, refnum, labris); RESULT("DFANputlabel"); ret = DFANputdesc(TESTFILE, DFTAG_RIG, refnum, descris, (int32)strlen(descris)); RESULT("DFANputdesc"); } /******** Read labels and descriptions *********/ MESSAGE(5, printf("*** Reading labels and descriptions for SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { ret = DFSDgetdims(TESTFILE, &rank, dimsizes, 3); RESULT("DFSDgetdims"); refnum = DFSDlastref(); if ((j % 3) != 0) /* read in annotations for 2 out of every 3 */ check_lab_desc(DFTAG_SDG, refnum, labsds, descsds); ret = DFR8getimage(TESTFILE, newimage, (int32)COLS, (int32)ROWS, pal); RESULT("DFR8getimage"); refnum = DFR8lastref(); check_lab_desc(DFTAG_RIG, refnum, labris, descris); } free(data); free(image); free(newimage); } /**************************************************************** ** ** gen2Dfloat: generate 2-D data array ** ****************************************************************/ static void gen2Dfloat(int height, int width, float *data) { int i, j; float *pdata; /* store one value per row, increasing by one for each row */ pdata = data; for (i = 0; i < height; i++) for (j = 0; j < width; j++) *pdata++ = (float)(i + 1); } /**************************************************************** ** ** genimage: generate image from 2-D float array ** ****************************************************************/ static void genimage(int height, int width, float *data, uint8 *image) { int i, limit; float *pdata, max, min, multiplier; limit = height * width; pdata = data; max = min = *pdata; for (i = 0; i < limit; i++, pdata++) { max = (max > *pdata) ? max : *pdata; min = (min < *pdata) ? min : *pdata; } /* store one value per row, increasing by one for each row */ pdata = data; multiplier = (float32)255.0 / (max - min); for (i = 0; i < limit; i++) *image++ = (uint8)(((*pdata++) - min) * multiplier); } /**************************************************************** ** ** check_lab_desc: read and compare label and description ** with expected ones ** ****************************************************************/ static void check_lab_desc(uint16 tag, uint16 ref, char *label, char *desc) { int32 inlablen, indesclen, ret; char inlabel[MAXLEN_LAB], *indesc; inlablen = ret = DFANgetlablen(TESTFILE, tag, ref); RESULT("DFANgetlablen"); if (inlablen != (int32)strlen(label)) { printf("\t>>>BAD LABEL LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)inlablen, (int)strlen(label)); num_errs++; } ret = DFANgetlabel(TESTFILE, tag, ref, inlabel, MAXLEN_LAB); RESULT("DFANgetlabel"); if (strcmp(inlabel, label) != 0) { printf("\t>>>BAD LABEL. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", inlabel, label); num_errs++; } indesclen = ret = DFANgetdesclen(TESTFILE, tag, ref); RESULT("DFANgetdesclen"); if (indesclen != (int32)strlen(desc)) { printf("\t>>>BAD DESCRIPTION LENGTH. \n\t IS: %d", (int)indesclen); printf("\n\tSHOULD BE: %d<<<\n", (int)strlen(desc)); num_errs++; } else { indesc = (char *)malloc(indesclen + 1); ret = DFANgetdesc(TESTFILE, tag, ref, indesc, MAXLEN_DESC); RESULT("DFANgetdesc"); indesc[indesclen] = '\0'; if (strcmp(indesc, desc) != 0) { printf("\t>>>BAD DESCRIPTION.\n\t IS: %s", indesc); printf("\n\tSHOULD BE: %s<<<\n", desc); num_errs++; } free(indesc); } } void test_an_2(void) { char labsds[MAXLEN_LAB], labris[MAXLEN_LAB], descsds[MAXLEN_DESC], descris[MAXLEN_DESC]; uint8 pal[768]; uint8 *image, *newimage; uint16 refnum; int32 ret; intn rank; int j; int32 dimsizes[2]; float *data; /* set up object labels and descriptions */ strcpy(labsds, "Object label #1: sds"); strcpy(labris, "Object label #2: image"); strcpy(descsds, "Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 \n"); strcat(descsds, " 13 14 15 16 17 18 19 20 **END SDS DESCR**\n"); strcpy(descris, "Object Descr #2: A B C D E F G H I J K L \n"); strcat(descris, " M N O **END IMAGE DESCR **\n"); /***** generate float array and image *****/ data = (float *)malloc(ROWS * COLS * sizeof(float)); image = (uint8 *)malloc(ROWS * COLS * sizeof(char)); newimage = (uint8 *)malloc(ROWS * COLS * sizeof(char)); dimsizes[0] = ROWS; dimsizes[1] = COLS; gen2Dfloat(ROWS, COLS, data); genimage(ROWS, COLS, data, image); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); /******** Write labels and descriptions *********/ MESSAGE(5, printf("*** Writing labels and descriptions with SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { /* write out scientific data set */ ret = DFSDadddata(TESTFILE, 2, dimsizes, (void *)data); RESULT("DFSDadddata"); if ((j % 3) != 0) { /* write out annotations for 2 out of every 3 */ refnum = DFSDlastref(); ret = DFANputlabel(TESTFILE, DFTAG_SDG, refnum, labsds); RESULT("DFANputlabel"); ret = DFANputdesc(TESTFILE, DFTAG_SDG, refnum, descsds, (int32)strlen(descsds)); RESULT("DFANputdesc"); } ret = DFR8addimage(TESTFILE, (void *)image, COLS, ROWS, 0); RESULT("DFR8addimage"); refnum = DFR8lastref(); ret = DFANputlabel(TESTFILE, DFTAG_RIG, refnum, labris); RESULT("DFANputlabel"); ret = DFANputdesc(TESTFILE, DFTAG_RIG, refnum, descris, (int32)strlen(descris)); RESULT("DFANputdesc"); } /******** Read labels and descriptions *********/ MESSAGE(5, printf("*** Reading labels and descriptions for SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { ret = DFSDgetdims(TESTFILE, &rank, dimsizes, 3); RESULT("DFSDgetdims"); refnum = DFSDlastref(); if ((j % 3) != 0) /* read in annotations for 2 out of every 3 */ check_lab_desc(DFTAG_SDG, refnum, labsds, descsds); ret = DFR8getimage(TESTFILE, newimage, (int32)COLS, (int32)ROWS, pal); RESULT("DFR8getimage"); refnum = DFR8lastref(); check_lab_desc(DFTAG_RIG, refnum, labris, descris); } free(data); free(image); free(newimage); } hdf4-hdf4.3.1/hdf/test/anfile.c000066400000000000000000000117611503061704500161570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" #define TESTFILE "tdfan.hdf" #define ISFIRST (int)1 #define NOTFIRST (int)0 #define MAXLEN_LAB 50 #define MAXLEN_DESC 1000 static int checkannlen(int32 ret, const char *oldstr, const char *type, int32 testflag); static int checkann(const char *oldstr, const char *newstr, int32 ret, const char *type, int32 testflag); void test_anfile(void) { char lab1[MAXLEN_LAB], lab2[MAXLEN_LAB], desc1[MAXLEN_DESC], desc2[MAXLEN_DESC], tempstr[MAXLEN_DESC]; int32 testflag = SUCCEED; int32 file_id, ret; /* set up file labels and descriptions */ strcpy(lab1, "File label #1: aaa"); strcpy(lab2, "File label #2: bbbbbb"); strcpy(desc1, "File Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 13\n"); strcat(desc1, " 14 15 16 17 18 19 20 **END FILE DESCR**\n"); strcpy(desc2, "File Descr #2: A B C D E F G H I J K L\n"); strcat(desc2, " M N O **END FILE DESCR**\n"); /******** Write file labels and descriptions *********/ file_id = Hopen(TESTFILE, DFACC_CREATE, 0); if (file_id == FAIL) printf("\nUnable to open file %s for writing.\n\n", TESTFILE); MESSAGE(5, puts("Writing file labels.");); ret = DFANaddfid(file_id, lab1); RESULT("DFANaddfid"); ret = DFANaddfid(file_id, lab2); RESULT("DFANaddfid"); MESSAGE(5, puts("Writing file descriptions.");); ret = DFANaddfds(file_id, desc1, (int32)strlen(desc1)); RESULT("DFANaddfds"); ret = DFANaddfds(file_id, desc2, (int32)strlen(desc2)); RESULT("DFANaddfds"); if (FAIL == Hclose(file_id)) printf("\nUnable to close file %s after writing.\n\n", TESTFILE); /******** Read file labels *********/ file_id = Hopen(TESTFILE, DFACC_READ, 0); if (file_id == FAIL) printf("\n\nUnable to open file %s for reading.\n\n", TESTFILE); MESSAGE(5, puts("Reading length of first file label, followed by label.");); ret = DFANgetfidlen(file_id, ISFIRST); RESULT("DFANgetfidlen"); checkannlen(ret, lab1, "label", testflag); ret = DFANgetfid(file_id, tempstr, MAXLEN_LAB, ISFIRST); RESULT("DFANgetfid"); checkann(lab1, tempstr, ret, "label", testflag); MESSAGE(5, puts("Reading length of second file label, followed by label.");); ret = DFANgetfidlen(file_id, NOTFIRST); RESULT("DFANgetfidlen"); checkannlen(ret, lab2, "label", testflag); ret = DFANgetfid(file_id, tempstr, MAXLEN_LAB, NOTFIRST); RESULT("DFANgetfid"); checkann(lab2, tempstr, ret, "label", testflag); /******** Read file descriptions *********/ MESSAGE(5, puts("Reading length of first file descr, followed by descr.");); ret = DFANgetfdslen(file_id, ISFIRST); RESULT("DFANgetfdslen"); checkannlen(ret, desc1, "description", testflag); ret = DFANgetfds(file_id, tempstr, MAXLEN_DESC, ISFIRST); RESULT("DFANgetfds"); checkann(desc1, tempstr, ret, "description", testflag); MESSAGE(5, puts("Reading length of second file descr, followed by descr.");); ret = DFANgetfdslen(file_id, NOTFIRST); RESULT("DFANgetfdslen"); checkannlen(ret, desc2, "description", testflag); ret = DFANgetfds(file_id, tempstr, MAXLEN_DESC, NOTFIRST); RESULT("DFANgetfds"); checkann(desc2, tempstr, ret, "description", testflag); if (FAIL == Hclose(file_id)) printf("\n\nUnable to close file %s after reading.\n\n", TESTFILE); } static int checkannlen(int32 ret, const char *oldstr, const char *type, int32 testflag) { (void)testflag; if ((ret >= 0) && (ret != (int32)strlen(oldstr))) { printf("Length of %s is INCORRECT\n", type); printf("It is: %d\n", (int)ret); printf("It should be: %d\n", (int)strlen(oldstr)); return FAIL; } return SUCCEED; } static int checkann(const char *oldstr, const char *newstr, int32 ret, const char *type, int32 testflag) { (void)testflag; if ((ret >= 0) && (0 != strcmp(oldstr, newstr))) { printf("%s is INCORRECT.\n", type); printf("It is: %s\n", newstr); printf("It should be: %s\n", oldstr); return FAIL; } return SUCCEED; } hdf4-hdf4.3.1/hdf/test/bitio.c000066400000000000000000000336331503061704500160310ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* bitio.c Test HDF bit-level I/O routines */ #include "tproto.h" #include #define TESTFILE_NAME "tbitio.hdf" #define DATAFILE_NAME "test_files/bitio.dat" #ifndef RAND_MAX #define RAND_MAX (UINT_MAX) #endif /* define aliases for random number generation */ #define RAND rand #define SEED(a) srand(a) #define BUFSIZE 8192 #define DATASIZE 4096 #define NUM_BITS 32 #define DATA_TAG_1 1000 #define DATA_REF_1 1000 #define BITIO_TAG_1 1500 #define BITIO_REF_1 1500 #define BITIO_TAG_2 2500 #define BITIO_REF_2 2500 #define BITIO_TAG_3 3500 #define BITIO_REF_3 3500 static uint8 *outbuf = NULL; static uint8 *inbuf = NULL; static uint32 *outbuf2 = NULL; static uint32 *inbuf2 = NULL; static uint32 *totbits = NULL; static uint32 maskbuf[] = {0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffffUL, 0x3fffffffUL, 0x7fffffffUL, 0xffffffffUL}; static void test_bitio_write(void); static void test_bitio_read(void); static void test_bitio_seek(void); static void test_bitio_write(void) { int32 fid; int32 bitid1; int32 ret; intn i; uint32 tot_bits = 0; MESSAGE(6, printf("Testing bitio write routines\n");); SEED((uintn)time(NULL)); for (i = 0; i < BUFSIZE; i++) { totbits[i] = tot_bits; tot_bits += (uint32)(outbuf[i] = (uint8)(((RAND() >> 4) % 32) + 1)); /* number of bits to output */ outbuf2[i] = (uintn)RAND() & maskbuf[outbuf[i]]; /* actual bits to output */ } /* end for */ fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); bitid1 = Hstartbitwrite(fid, BITIO_TAG_1, BITIO_REF_1, 16); CHECK_VOID(bitid1, FAIL, "Hstartbitwrite"); ret = Hbitappendable(bitid1); RESULT("Hbitappendable"); for (i = 0; i < BUFSIZE; i++) { ret = Hbitwrite(bitid1, (intn)outbuf[i], (uint32)outbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitwrite"); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); bitid1 = Hstartbitread(fid, BITIO_TAG_1, BITIO_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = 0; i < BUFSIZE; i++) { ret = Hbitread(bitid1, (intn)outbuf[i], &inbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitread"); } /* end for */ if (memcmp(outbuf2, inbuf2, sizeof(int32) * BUFSIZE)) { printf("Error in writing/reading bit I/O data\n"); HEprint(stdout, 0); num_errs++; } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); ret = Hclose(fid); RESULT("Hclose"); } /* test_bitio_write() */ static void test_bitio_read(void) { int32 fid; int32 bitid1; int32 ret; intn inbits; uint32 tempbuf; intn i; uint8 *test_ptr; const char *datafile = get_srcdir_filename(DATAFILE_NAME); SEED((uintn)time(NULL)); MESSAGE(6, printf("Testing bitio read routines\n");); fid = Hopen(datafile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = Hgetelement(fid, DATA_TAG_1, DATA_REF_1, inbuf); RESULT("Hgetelement"); ret = Hclose(fid); RESULT("Hclose"); MESSAGE(8, printf("Reading 8 bits at a time\n");); fid = Hopen(datafile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); bitid1 = Hstartbitread(fid, DATA_TAG_1, DATA_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = 0; i < DATASIZE; i++) { ret = Hbitread(bitid1, 8, &inbuf2[i]); VERIFY_VOID(ret, 8, "Hbitread"); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); /* check the data */ for (i = 0; i < DATASIZE; i++) { if (inbuf[i] != (uint8)inbuf2[i]) { printf("Error in reading bit I/O data at position %d\n", i); num_errs++; } /* end for */ } /* end for */ MESSAGE(8, printf("Read random # of bits at a time\n");); bitid1 = Hstartbitread(fid, DATA_TAG_1, DATA_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); /* read in random #'s of bits */ for (i = 0; i < DATASIZE / (NUM_BITS / 8); i++) { inbits = ((RAND() >> 4) % NUM_BITS) + 1; /* number of bits to input */ ret = Hbitread(bitid1, inbits, &inbuf2[i]); VERIFY_VOID(ret, inbits, "Hbitread"); if (inbits < NUM_BITS) { /* if we've already grabbed 32-bit don't try for more */ inbits = NUM_BITS - inbits; ret = Hbitread(bitid1, inbits, &tempbuf); VERIFY_VOID(ret, inbits, "Hbitread"); inbuf2[i] <<= inbits; inbuf2[i] |= tempbuf; } /* end if */ } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); test_ptr = (uint8 *)malloc((size_t)((DATASIZE / 4) * DFKNTsize(DFNT_UINT32))); CHECK_VOID(test_ptr, NULL, "malloc"); ret = DFKconvert(inbuf2, test_ptr, DFNT_UINT32, (DATASIZE / 4), DFACC_WRITE, 0, 0); RESULT("DFKconvert"); /* check the data */ if (memcmp(inbuf, test_ptr, DATASIZE) != 0) { printf("Error in reading bit I/O data\n"); HEprint(stdout, 0); num_errs++; } /* end if */ free(test_ptr); ret = Hclose(fid); RESULT("Hclose"); } /* test_bitio_read() */ static void test_bitio_seek(void) { int32 fid; int32 bitid1; int32 ret; intn i; SEED((uintn)time(NULL)); MESSAGE(6, printf("Testing bitio seek routines\n");); fid = Hopen(TESTFILE_NAME, DFACC_READ | DFACC_WRITE, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(8, printf("Seek & read from start of dataset\n");); bitid1 = Hstartbitread(fid, BITIO_TAG_1, BITIO_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = 0; i < BUFSIZE; i++) { ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); CHECK_VOID(ret, FAIL, "Hbitseek"); ret = Hbitread(bitid1, (intn)outbuf[i], &inbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitread"); if (outbuf2[i] != inbuf2[i]) printf("outbuf[%d]=%u, outbuf2[%d]=%lu inbuf2[%d]=%lu, totbits[%d]=%lu\n", i, outbuf[i], i, (long)outbuf2[i], i, (long)inbuf2[i], i, (long)totbits[i]); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(8, printf("Seek & read from end of dataset\n");); bitid1 = Hstartbitread(fid, BITIO_TAG_1, BITIO_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = BUFSIZE - 1; i >= 0; i--) { ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); CHECK_VOID(ret, FAIL, "Hbitseek"); ret = Hbitread(bitid1, (intn)outbuf[i], &inbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitread"); if (outbuf2[i] != inbuf2[i]) printf("outbuf[%d]=%u, outbuf2[%d]=%lu inbuf2[%d]=%lu, totbits[%d]=%lu\n", i, outbuf[i], i, (long)outbuf2[i], i, (long)inbuf2[i], i, (long)totbits[i]); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(8, printf("Seek & write from start of dataset\n");); bitid1 = Hstartbitwrite(fid, BITIO_TAG_1, BITIO_REF_1, 16); CHECK_VOID(bitid1, FAIL, "Hstartbitwrite"); MESSAGE(9, printf("Writing new data to every other bit-sequence\n");); /* re-write every other sequence of bits in the dataset */ for (i = 0; i < BUFSIZE; i += 2) { outbuf2[i] = (uintn)RAND() & maskbuf[outbuf[i]]; /* actual bits to output */ ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); CHECK_VOID(ret, FAIL, "Hbitseek"); ret = Hbitwrite(bitid1, (intn)outbuf[i], (uint32)outbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitwrite"); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(9, printf("Verifying new data\n");); bitid1 = Hstartbitread(fid, BITIO_TAG_1, BITIO_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = 0; i < BUFSIZE; i++) { ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); RESULT("Hbitseek"); ret = Hbitread(bitid1, (intn)outbuf[i], &inbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitread"); if (outbuf2[i] != inbuf2[i]) printf("outbuf[%d]=%u, outbuf2[%d]=%lu inbuf2[%d]=%lu, totbits[%d]=%lu\n", i, outbuf[i], i, (long)outbuf2[i], i, (long)inbuf2[i], i, (long)totbits[i]); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(8, printf("Seek & write from end of dataset\n");); bitid1 = Hstartbitwrite(fid, BITIO_TAG_1, BITIO_REF_1, 16); CHECK_VOID(bitid1, FAIL, "Hstartbitwrite"); MESSAGE(9, printf("Writing new data to every other bit-sequence from the end\n");); /* re-write every other sequence of bits in the dataset */ for (i = BUFSIZE - 1; i >= 0; i -= 2) { outbuf2[i] = (uintn)RAND() & maskbuf[outbuf[i]]; /* actual bits to output */ ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); RESULT("Hbitseek"); ret = Hbitwrite(bitid1, (intn)outbuf[i], (uint32)outbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitwrite"); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(9, printf("Verifying new data again\n");); bitid1 = Hstartbitread(fid, BITIO_TAG_1, BITIO_REF_1); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); for (i = 0; i < BUFSIZE; i++) { ret = Hbitseek(bitid1, (int32)(totbits[i] / 8), (intn)(totbits[i] % 8)); CHECK_VOID(ret, FAIL, "Hbitseek"); ret = Hbitread(bitid1, (intn)outbuf[i], &inbuf2[i]); VERIFY_VOID((uint8)ret, outbuf[i], "Hbitread"); if (outbuf2[i] != inbuf2[i]) printf("outbuf[%d]=%u, outbuf2[%d]=%lu inbuf2[%d]=%lu, totbits[%d]=%lu\n", i, outbuf[i], i, (long)outbuf2[i], i, (long)inbuf2[i], i, (long)totbits[i]); } /* end for */ ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); MESSAGE(8, printf("Write non-byte filling number of bits and seek to beginning\n");); bitid1 = Hstartbitwrite(fid, BITIO_TAG_3, BITIO_REF_3, 0); CHECK_VOID(bitid1, FAIL, "Hstartbitwrite"); ret = Hbitappendable(bitid1); RESULT("Hbitappendable"); MESSAGE(9, printf("Writing 35 bits of data out\n");); ret = Hbitwrite(bitid1, 8, (uint32)outbuf[0]); VERIFY_VOID((uint8)ret, 8, "Hbitwrite"); ret = Hbitwrite(bitid1, 8, (uint32)outbuf[1]); VERIFY_VOID((uint8)ret, 8, "Hbitwrite"); ret = Hbitwrite(bitid1, 8, (uint32)outbuf[2]); VERIFY_VOID((uint8)ret, 8, "Hbitwrite"); ret = Hbitwrite(bitid1, 8, (uint32)outbuf[3]); VERIFY_VOID((uint8)ret, 8, "Hbitwrite"); ret = Hbitwrite(bitid1, 3, (uint32)outbuf[4]); VERIFY_VOID((uint8)ret, 3, "Hbitwrite"); ret = Hbitseek(bitid1, 0, 0); RESULT("Hbitseek"); ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); /* Read those 35 bits back in */ bitid1 = Hstartbitread(fid, BITIO_TAG_3, BITIO_REF_3); CHECK_VOID(bitid1, FAIL, "Hstartbitread"); ret = Hbitread(bitid1, 8, &inbuf2[0]); VERIFY_VOID((uint8)ret, 8, "Hbitread"); ret = Hbitread(bitid1, 8, &inbuf2[1]); VERIFY_VOID((uint8)ret, 8, "Hbitread"); ret = Hbitread(bitid1, 8, &inbuf2[2]); VERIFY_VOID((uint8)ret, 8, "Hbitread"); ret = Hbitread(bitid1, 8, &inbuf2[3]); VERIFY_VOID((uint8)ret, 8, "Hbitread"); ret = Hbitread(bitid1, 3, &inbuf2[4]); VERIFY_VOID((uint8)ret, 3, "Hbitread"); VERIFY_VOID(outbuf[0], inbuf2[0], "I/O Transfer"); VERIFY_VOID(outbuf[1], inbuf2[1], "I/O Transfer"); VERIFY_VOID(outbuf[2], inbuf2[2], "I/O Transfer"); VERIFY_VOID(outbuf[3], inbuf2[3], "I/O Transfer"); VERIFY_VOID((outbuf[4] & maskbuf[3]), inbuf2[4], "I/O Transfer"); ret = Hendbitaccess(bitid1, 0); RESULT("Hbitendaccess"); ret = Hclose(fid); RESULT("Hclose"); } /* test_bitio_seek() */ void test_bitio(void) { outbuf = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); inbuf = (uint8 *)calloc(DATASIZE, sizeof(uint8)); outbuf2 = (uint32 *)calloc(BUFSIZE, sizeof(uint32)); inbuf2 = (uint32 *)calloc(BUFSIZE, sizeof(uint32)); totbits = (uint32 *)calloc(BUFSIZE, sizeof(uint32)); CHECK_ALLOC(outbuf, "outbuf", "test_bitio"); CHECK_ALLOC(inbuf, "inbuf", "test_bitio"); CHECK_ALLOC(outbuf2, "outbuf2", "test_bitio"); CHECK_ALLOC(inbuf2, "inbuf2", "test_bitio"); CHECK_ALLOC(totbits, "totbits", "test_bitio"); test_bitio_read(); test_bitio_write(); test_bitio_seek(); free(outbuf); free(inbuf); free(outbuf2); free(inbuf2); free(totbits); } hdf4-hdf4.3.1/hdf/test/blocks.c000066400000000000000000000214621503061704500161750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" #define TESTFILE_NAME "tblocks.hdf" #define BUFSIZE 4096 #define HLCONVERT_TAG 1500 static uint8 *outbuf = NULL; static uint8 *inbuf = NULL; void test_hblocks(void) { int32 fid, fid1; int32 aid, aid1, aid2; int32 fileid, length, offset, posn; uint16 tag, ref; int16 acc_mode, special; int i; int32 ret; intn errors = 0; outbuf = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); inbuf = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); CHECK_ALLOC(outbuf, "outbuf", "test_hblocks"); CHECK_ALLOC(inbuf, "outbuf", "test_hblocks"); for (i = 0; i < BUFSIZE; i++) outbuf[i] = (uint8)(i % 256); MESSAGE(5, printf("Creating a file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); MESSAGE(5, printf("Write an element and then promote to Linked Blocks\n");); ret = Hputelement(fid, (uint16)1000, (uint16)1, (const uint8 *)"element 1000 1 wrong ", (int32)strlen("element 1000 1 wrong ") + 1); CHECK_VOID(ret, FAIL, "Hputelement"); aid1 = HLcreate(fid, 1000, 1, 10, 10); CHECK_VOID(aid1, FAIL, "HLcreate"); ret = Hseek(aid1, (int32)strlen("element 1000 1 "), DF_START); CHECK_VOID(ret, FAIL, "Hseek"); ret = Hwrite(aid1, (int32)strlen("correct") + 1, "correct"); if (ret != (int32)strlen("correct") + 1) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Create a new element as a Linked Block\n");); aid1 = HLcreate(fid, 1000, 4, 512, 2); CHECK_VOID(aid1, FAIL, "HLcreate"); ret = Hwrite(aid1, BUFSIZE / 2, outbuf); if (ret != BUFSIZE / 2) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); aid1 = HLcreate(fid, 1000, 2, 128, 16); CHECK_VOID(aid1, FAIL, "HLcreate"); ret = Hwrite(aid1, (int32)strlen("element 1000 2") + 1, "element 1000 2"); if (ret != (int32)strlen("element 1000 2") + 1) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); ret = Hgetelement(fid, (uint16)1000, (uint16)4, inbuf); if (ret != BUFSIZE / 2) { fprintf(stderr, "ERROR(%d): Hgetelement returned the wrong length: %d\n", (int)__LINE__, (int)ret); errors++; } for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } inbuf[i] = '\0'; } aid1 = HLcreate(fid, 1020, 2, 128, 4); CHECK_VOID(aid1, FAIL, "HLcreate"); ret = Hwrite(aid1, BUFSIZE, outbuf); if (ret != BUFSIZE) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing and re-opening file %s\n", TESTFILE_NAME);); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); MESSAGE(5, printf("Verifying data\n");); aid1 = Hstartread(fid, 1000, 1); CHECK_VOID(aid1, FAIL, "Hstartread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; } ret = Hread(aid1, length, inbuf); if (ret != 23) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; } if (strcmp((const char *)inbuf, (const char *)"element 1000 1 correct")) { fprintf(stderr, "ERROR: Hread returned the wrong data\n"); fprintf(stderr, "\t Is: %s\n", (char *)inbuf); fprintf(stderr, "\tShould be: element 1000 1 correct\n"); errors++; } ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); ret = Hnextread(aid1, 1000, DFREF_WILDCARD, DF_CURRENT); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; } ret = Hnextread(aid1, DFTAG_WILDCARD, DFREF_WILDCARD, DF_START); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (special) { fprintf(stderr, "ERROR: Hinquire thinks a non-special element is special\n"); errors++; } ret = Hnextread(aid1, DFTAG_WILDCARD, 1151, DF_CURRENT); if (ret != FAIL) { fprintf(stderr, "ERROR: Hnextread found object with bogus ref\n"); errors++; } ret = Hnextread(aid1, 1020, DFREF_WILDCARD, DF_CURRENT); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; } MESSAGE(5, printf("Writing to existing element\n");); aid2 = Hstartwrite(fid, 1000, 1, 4); CHECK_VOID(aid2, FAIL, "Hstartwrite"); ret = Hwrite(aid2, 4, "ABCD"); if (ret != 4) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } /* let's try to write to a read element for fun */ ret = Hwrite(aid1, 4, "ABCD"); if (ret != FAIL) { fprintf(stderr, "ERROR: Hwrite allowed write to read access obj\n"); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Open a second id for file %s\n", TESTFILE_NAME);); fid1 = Hopen(TESTFILE_NAME, DFACC_READ, 0); CHECK_VOID(fid1, FAIL, "Hopen"); ret = (int32)Hnewref(fid1); CHECK_VOID(ret, FAIL, "Hnewref"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); ret = Hclose(fid1); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Testing HLconvert function\n");); fid = Hopen(TESTFILE_NAME, DFACC_WRITE, 0); CHECK_VOID(fid, FAIL, "Hopen"); ref = Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); aid = Hstartwrite(fid, HLCONVERT_TAG, ref, 5); CHECK_VOID(aid, FAIL, "Hstartwrite"); ret = Hwrite(aid, 4, outbuf); CHECK_VOID(ret, FAIL, "Hwrite"); ret = HLconvert(aid, 256, 10); CHECK_VOID(ret, FAIL, "HLconvert"); ret = Hwrite(aid, 508, &outbuf[4]); CHECK_VOID(ret, FAIL, "Hwrite"); ret = Hendaccess(aid); CHECK_VOID(ret, FAIL, "Hendaccess"); aid = Hstartread(fid, HLCONVERT_TAG, ref); CHECK_VOID(aid, FAIL, "Hstartread"); ret = Hread(aid, 512, inbuf); CHECK_VOID(ret, FAIL, "Hread"); ret = Hendaccess(aid); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); if (memcmp(inbuf, outbuf, 512)) { fprintf(stderr, "Error when reading data from HLconvert buffer\n"); errors++; } free(outbuf); free(inbuf); num_errs += errors; /* increment global error count */ } hdf4-hdf4.3.1/hdf/test/buffer.c000066400000000000000000000445641503061704500162010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE - buffer.c Test HDF buffered data I/O routines DESIGN - Create a new data element and get a benchmark time for reading it in various ways. - Buffer the element and get times for the buffered element. - Make a new external element and get benchmark times - Buffer the external element and get times for the buffered element. - Make a new compressed element and get benchmark times - Buffer the compressed element and get times for the buffered element. - Make a new linked block element and get benchmark times - Buffer the linked block element and get times for the buffered element. */ #define TESTMASTER #include "hdf_priv.h" #include "tutils.h" #include "hfile_priv.h" #define TESTFILE_NAME "tbuffer.hdf" #define EXTFILE_NAME "tbuffer.dat" /* Size of data elements to create */ #define ELEMSIZE 16384 /* define aliases for random number generation */ #define RAND rand #define SEED(a) srand((unsigned)(a)) /* Tag to use for creating the test elements */ #define BUFF_TAG 1000 /* Number of tests */ #define NUM_TESTS 4 /* Factor for converting seconds to microseconds */ #define FACTOR 1000000 /* Number of timing tests to run */ /* 0 - read/write entire buffer in one I/O operation */ /* 1 - read/write entire buffer one byte at a time forwards */ /* 2 - read/write entire buffer one byte at a time every other byte forwards */ /* 3 - read/write entire buffer one byte at a time backwards */ /* 4 - read/write entire buffer one byte at a time every other byte backwards */ #define NUM_TIMINGS 5 long read_time[NUM_TESTS][2]; /* 0 is unbuffered, 1 is buffered */ long write_time[NUM_TESTS][2]; /* 0 is unbuffered, 1 is buffered */ int32 elemsize; /* Actual number of elements in buffer */ /* I/O buffers */ uint8 *out_buf; /* Buffer for writing data */ uint8 *in_buf; /* Buffer for reading data */ /* local function prototypes */ static void init_buffer(void); static void usage(void); static char *fixname(const char *base_name, char *fullname, size_t size); static long read_test(int32 aid); static long write_test(int32 aid, intn num_timings); /* Initialize output buffer */ static void init_buffer(void) { SEED(time(NULL)); for (int j = 0; j < elemsize; j++) { out_buf[j] = (uint8)RAND(); } } /* init_buffers() */ static void usage(void) { printf("\nUsage: buffer [elemsize] \n\n"); printf("where elemsize is the number of elements in buffer (default: 1000 in Cray, 16384 in other " "platforms)\n"); printf("\n"); } /* end usage() */ /* Creates a file name from a file base name like 'test' and return it through the FULLNAME (at most SIZE characters counting the null terminator). The full name is created by prepending the contents of HDF4_TESTPREFIX (separated from the base name by a slash). Returns NULL if BASENAME or FULLNAME is the null pointer or if FULLNAME isn't large enough for the result. */ static char * fixname(const char *base_name, char *fullname, size_t size) { const char *prefix = NULL; char *ptr, last = '\0'; size_t i, j; if (!base_name || !fullname || size < 1) return NULL; memset(fullname, 0, size); /* First use the environment variable, then try the constant */ prefix = getenv("HDF4_TESTPREFIX"); #ifdef HDF4_TESTPREFIX if (!prefix) prefix = HDF4_TESTPREFIX; #endif /* Prepend the prefix value to the base name */ if (prefix && *prefix) { if (snprintf(fullname, size, "%s/%s", prefix, base_name) == (int)size) /* Buffer is too small */ return NULL; } else { if (strlen(base_name) >= size) /* Buffer is too small */ return NULL; else strcpy(fullname, base_name); } /* Remove any double slashes in the filename */ for (ptr = fullname, i = j = 0; ptr && i < size; i++, ptr++) { if (*ptr != '/' || last != '/') fullname[j++] = *ptr; last = *ptr; } return fullname; } /* end fixname() */ static long read_test(int32 aid) { struct timeval start_time, end_time; /* timing counts */ long acc_time; int32 ret; intn i; /* local counting index */ intn timing; /* Which timing test we are on */ intn err_count; /* number of incorrect array positions */ acc_time = 0; for (timing = 0; timing < NUM_TIMINGS; timing++) { /* Seek to beginning of element */ ret = Hseek(aid, 0, DF_START); CHECK(ret, FAIL, "Hseek"); switch (timing) { case 0: /* Read entire buffer in one I/O operation */ gettimeofday(&start_time, NULL); ret = Hread(aid, elemsize, in_buf); VERIFY(ret, elemsize, "Hread"); gettimeofday(&end_time, NULL); break; case 1: /* Read entire buffer one byte at a time forwards */ gettimeofday(&start_time, NULL); for (i = 0; i < elemsize; i++) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } gettimeofday(&end_time, NULL); break; case 2: /* Read entire buffer one byte at a time every one byte forwards */ gettimeofday(&start_time, NULL); for (i = 0; i < elemsize; i += 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } for (i = 1; i < elemsize; i += 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } gettimeofday(&end_time, NULL); break; case 3: /* Read entire buffer one byte at a time backwards */ gettimeofday(&start_time, NULL); for (i = elemsize - 1; i >= 0; i--) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } gettimeofday(&end_time, NULL); break; case 4: /* Read entire buffer one byte at a time every one byte backwards */ gettimeofday(&start_time, NULL); for (i = elemsize - 1; i >= 0; i -= 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } for (i = elemsize - 2; i >= 0; i -= 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hread(aid, 1, &in_buf[i]); VERIFY(ret, 1, "Hread"); } gettimeofday(&end_time, NULL); break; } /* end switch */ /* Verify buffer contents */ for (err_count = 0, i = 0; i < elemsize; i++) { if (out_buf[i] != in_buf[i]) { printf("Position (%d) read in is (%d), should be (%d)\n", i, (int)in_buf[i], (int)out_buf[i]); num_errs++; err_count++; if (err_count > 10) break; } } /* Clear input buffer */ memset(in_buf, 0, (size_t)elemsize); /* Increment the total I/O time */ acc_time += (end_time.tv_sec - start_time.tv_sec) * FACTOR + (end_time.tv_usec - start_time.tv_usec); } /* end for */ return acc_time; } /* end read_test() */ static long write_test(int32 aid, intn num_timings) { struct timeval start_time, end_time; /* timing counts */ long acc_time; int32 ret; intn i; /* local counting index */ intn timing; /* Which timing test we are on */ acc_time = 0; for (timing = 0; timing < num_timings; timing++) { /* Refresh output buffer with new values */ init_buffer(); /* Seek to beginning of element */ ret = Hseek(aid, 0, DF_START); CHECK(ret, FAIL, "Hseek"); switch (timing) { case 0: /* Write entire buffer in one I/O operation */ gettimeofday(&start_time, NULL); ret = Hwrite(aid, elemsize, out_buf); VERIFY(ret, elemsize, "Hwrite"); gettimeofday(&end_time, NULL); break; case 1: /* Write entire buffer one byte at a time forwards */ gettimeofday(&start_time, NULL); for (i = 0; i < elemsize; i++) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } gettimeofday(&end_time, NULL); break; case 2: /* Write entire buffer one byte at a time every one byte forwards */ gettimeofday(&start_time, NULL); for (i = 0; i < elemsize; i += 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } for (i = 1; i < elemsize; i += 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } gettimeofday(&end_time, NULL); break; case 3: /* Write entire buffer one byte at a time backwards */ gettimeofday(&start_time, NULL); for (i = elemsize - 1; i >= 0; i--) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } gettimeofday(&end_time, NULL); break; case 4: /* Write entire buffer one byte at a time every one byte backwards */ gettimeofday(&start_time, NULL); for (i = elemsize - 1; i >= 0; i -= 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } for (i = elemsize - 2; i >= 0; i -= 2) { /* Seek to correct location within element */ ret = Hseek(aid, i, DF_START); CHECK(ret, FAIL, "Hseek"); ret = Hwrite(aid, 1, &out_buf[i]); VERIFY(ret, 1, "Hwrite"); } gettimeofday(&end_time, NULL); break; } /* end switch */ /* Seek to beginning of element */ ret = Hseek(aid, 0, DF_START); CHECK(ret, FAIL, "Hseek"); /* Read buffer contents */ ret = Hread(aid, elemsize, in_buf); VERIFY(ret, elemsize, "Hread"); /* Verify buffer contents */ for (i = 0; i < elemsize; i++) { if (out_buf[i] != in_buf[i]) { printf("Position (%d) read in is (%d), should be (%d)\n", i, (int)in_buf[i], (int)out_buf[i]); num_errs++; break; } } /* Clear input buffer */ memset(in_buf, 0, (size_t)elemsize); /* Increment the total I/O time */ acc_time += (end_time.tv_sec - start_time.tv_sec) * FACTOR + (end_time.tv_usec - start_time.tv_usec); } /* end for */ return acc_time; } /* end read_test() */ int main(int argc, char *argv[]) { model_info m_info; comp_info c_info; uint16 ref_num; /* reference number of the data written out */ int32 fid; /* file ID of HDF file for testing */ int32 aid; /* AID of element to test */ intn test_num; int32 ret; char hfilename[32]; char extfilename[32]; int CleanUp = 1; int Cache = 1; uint32 lmajor, lminor, lrelease; char lstring[81]; /* Un-buffer stdout */ setbuf(stdout, NULL); if (argc > 2) { usage(); exit(1); } else elemsize = (argc == 2) ? (int32)atol(argv[1]) : (int32)ELEMSIZE; if (elemsize <= 0) { usage(); exit(1); } out_buf = malloc((size_t)elemsize * sizeof(uint8)); in_buf = malloc((size_t)elemsize * sizeof(uint8)); Verbosity = 4; /* Default Verbosity is Low */ Hgetlibversion(&lmajor, &lminor, &lrelease, lstring); printf("Built with HDF Library Version: %u.%u.%u, %s\n\n", (unsigned)lmajor, (unsigned)lminor, (unsigned)lrelease, lstring); MESSAGE(6, printf("Starting buffered element test (elemsize=%d)\n", elemsize);) if (Cache) /* turn on caching, unless we were instructed not to */ Hcache(CACHE_ALL_FILES, TRUE); /* fill the buffer with interesting data to compress */ init_buffer(); fixname(TESTFILE_NAME, hfilename, sizeof hfilename); /* open the HDF file */ fid = Hopen(hfilename, DFACC_ALL, 0); CHECK(fid, FAIL, "Hopen"); /* Cycle through the different testing element types */ /* Performing timings on each type of buffer and record results for output */ /* if verbosity level is high enough */ for (test_num = 0; test_num < NUM_TESTS; test_num++) { /* Get a new reference number */ ref_num = Htagnewref(fid, BUFF_TAG); CHECK(ref_num, 0, "Htagnewref"); /* Create the data element to perform the tests on */ switch (test_num) { case 0: /* create plain data element */ aid = Hstartaccess(fid, BUFF_TAG, ref_num, DFACC_RDWR); CHECK(aid, FAIL, "Hstartaccess"); break; case 1: /* create external data element */ fixname(EXTFILE_NAME, extfilename, sizeof extfilename); aid = HXcreate(fid, BUFF_TAG, ref_num, extfilename, 0, elemsize); CHECK(aid, FAIL, "HXcreate"); break; case 2: /* create compressed data element */ c_info.deflate.level = 9; aid = HCcreate(fid, BUFF_TAG, ref_num, COMP_MODEL_STDIO, &m_info, COMP_CODE_DEFLATE, &c_info); CHECK(aid, FAIL, "HCcreate"); break; case 3: /* create linked-block data element */ aid = HLcreate(fid, BUFF_TAG, ref_num, HDF_APPENDABLE_BLOCK_LEN, HDF_APPENDABLE_BLOCK_NUM); CHECK(aid, FAIL, "HLcreate"); break; } /* Write the initial data to the data element */ ret = Hwrite(aid, elemsize, out_buf); VERIFY(ret, elemsize, "Hwrite"); /* Perform read timing tests on un-buffered data element */ read_time[test_num][0] = read_test(aid); /* Perform write timing tests on un-buffered data element */ /* Just write un-buffered compressed data in one block */ write_time[test_num][0] = write_test(aid, (test_num == 2 ? 1 : NUM_TIMINGS)); /* Convert element to a buffered element */ ret = HBconvert(aid); CHECK(ret, FAIL, "HBconvert"); /* Perform read timing tests on buffered data element */ read_time[test_num][1] = read_test(aid); /* Perform write timing tests on un-buffered data element */ write_time[test_num][1] = write_test(aid, NUM_TIMINGS); /* Close data element */ ret = Hendaccess(aid); CHECK(ret, FAIL, "Hendaccess"); MESSAGE(3, { printf("Unbuffered read time=%f seconds\n", ((double)read_time[test_num][0] / FACTOR)); printf("Unbuffered write time=%f seconds\n", ((double)write_time[test_num][0] / FACTOR)); printf("Buffered read time=%f seconds\n", ((double)read_time[test_num][1] / FACTOR)); printf("Buffered write time=%f seconds\n", ((double)write_time[test_num][1] / FACTOR)); }) } /* end for */ /* close the HDF file */ ret = Hclose(fid); CHECK(ret, FAIL, "Hclose"); /* Clean up files created */ if (CleanUp) { remove(extfilename); remove(hfilename); } free(out_buf); free(in_buf); MESSAGE(6, printf("Finished buffered element test\n");) return num_errs; } /* end main() */ hdf4-hdf4.3.1/hdf/test/chunks.c000066400000000000000000002254351503061704500162210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This file tests the Special Chunking Element(HMCxxx) layer of the HDF library. * * NOTE: No failure conditions are tested yet.... * * Outline of Tests done: * 1. First test simple writing of 2-D element with no ghost/partial chunks. * 4x4 array of uint8, each chunk 2x2(4 bytes) -> 4 chunks(16 bytes). * Write out 12 bytes to all 4 chunks with only partial writes * to the last 2 chunks.. * Write again to last 2 chunks with whole data chunks * * 2. Now create a new chunked 2-D element with same parameters * before but write to 2 chunks of element using whole chunks. * The rest of he data should contain fill values. * * 3. Create a new element but now there will be partial chunks * because chunk lengths are not an even multiple of dimension lengths. * Set dimension to 4x4 array with 4 chunks where each chunk is * 3x2 = 6 bytes. Real data size is 16 bytes, size with chunks is * 6 bytes x 4 chunks = 24 bytes * * 4. Now create 3-D chunked element with no partial chunks. * Write to only part of the chunked element. The rest * should be filled with fill values. * Set dimension to 4x6x8 array with 8 chunks * where each chunk is 2x3x4= 24 bytes , read data size 192 bytes * data size with chunks is 192 bytes also. * * 5. Now create another 3-D chunked element with partial chunks. * Write to part of element, rest is filled with fill value. * Set dimension to 4x6x8 array with 8 chunks , real data 192 bytes * where each chunk is 3x4x5= 60 bytes , * data size with chunks is 60 bytes x 8 chunks = 480 bytes * * 6. Now create 3-D chunked element with no partial chunks. * Write using HMCwriteChunk(). Read data back in first * using Hread() and verify. Then read data back in using * HMCreadChunk() and verify. * Set dimension to 2x3x4 array with 6 chunks * where each chunk is 1x1x4= 4 bytes , total data size 24 bytes * * 7. Now create 3-D chunked element with no partial chunks. * Set dimension to 2x3x4 array with 6 chunks. Number type is uint16 * where each chunk is 1x1x4= 4x2(nt_size) = 8 bytes , * total data size 48 bytes * * 8. Now create 3-D chunked element with no partial chunks. * Set dimension to 2x3x4 array with 6 chunks. Numbertype is float32 * where each chunk is 1x1x4= 4x4(nt_size) = 16 bytes , * total data size 96 bytes . * * 9. Create 4-D element with partial chunks. * Write only half the data out(5,000 bytes) * Set dimension to 10x10x10x10 array -> real data 10,000 bytes . * 120 chunks with chunks of 2x3x4x5 = 120 bytes, * data size with chunks is 120 bytes x 120 chunks = 14,400 bytes * * 10. *NOT ENABLED* * The rest of the tests here are commented out * They are some extra high order tests to replicate * some test done on EOS-DEM data * Set dimension to 12000x12000 array with 2,500 chunks * with chunk of 240x240 = 57,600 bytes * * 11. Create a new element but now there will be partial chunks and Compression. * Set dimension to 4x4 array with 4 chunks where each chunk is 3x2 = 6 bytes. * Real data size is 16 bytes, size with chunks is * 6 bytes x 4 chunks = 24 bytes. * The element will be compressed with RLE scheme. * * 12. Now create 3-D chunked, Compressed element with no partial chunks. * Write using HMCwriteChunk(). Read data back in first * using Hread() and verify. Then read data back in using * HMCreadChunk() and verify. * Set dimension to 2x3x4 array with 6 chunks * where each chunk is 1x1x4= 4 bytes , total data size 24 bytes * The element is compressed using RLE scheme. * * For all the tests the data is read back in and verified. * * Routines tested using User level H-level calls: * Hstartread() -> HMCPstread() * Hstartwrite() -> HMCPstwrite() * Hread() -> HMCPread() * Hwrite() -> HMCPwrite() * Hseek() -> HMCPseek() * Hendaccess() -> HMCPendaccess() * Hinquire() -> HMCPinquire() * HDget_special_info() -> HMCPinfo() * * Routines test by direct calling of Chunking routines: * HMCcreate() * HMCsetMaxCache() * HMCwriteChunk() * HMCreadChunk() */ #include "tproto.h" #include "hchunks_priv.h" #define TESTFILE_NAME "tchunks.hdf" #define BUFSIZE 12288 /* Some static data buffers */ static uint8 *outbuf = NULL; static uint8 *inbuf = NULL; /* used to verify data in Test 2. */ static uint8 outbuf_2[16] = {0, 0, 2, 3, 0, 0, 6, 7, 8, 9, 0, 0, 12, 13, 0, 0}; /* used to in Tests 1,2 */ static uint8 cptr3[4] = {10, 11, 14, 15}; static uint8 cptr2[4] = {8, 9, 12, 13}; static uint8 cptr1[4] = {2, 3, 6, 7}; /* for writing/verifying some chunks used in Test 6*/ static uint8 chunk1[4] = {0, 1, 2, 3}; static uint8 chunk2[4] = {10, 11, 12, 13}; static uint8 chunk3[4] = {20, 21, 22, 23}; static uint8 chunk4[4] = {100, 101, 102, 103}; static uint8 chunk5[4] = {110, 111, 112, 113}; static uint8 chunk6[4] = {120, 121, 122, 123}; /* datay layout of arrays in memory */ /* for comparison in Test 8 */ static float32 f32_data[2][3][4] = { {{0.0F, 1.0F, 2.0F, 3.0F}, {10.0F, 11.0F, 12.0F, 13.0F}, {20.0F, 21.0F, 22.0F, 23.0F}}, {{100.0F, 101.0F, 102.0F, 103.0F}, {110.0F, 111.0F, 112.0F, 113.0F}, {120.0F, 121.0F, 122.0F, 123.0F}}}; /* for comparison in Test 7 */ static uint16 u16_data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; /* for comparison in Test 6 */ static uint8 u8_data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; /* * main entry point to tests the Special Chunking layer... */ void test_chunks(void) { int32 fid; int32 aid1, aid2; int32 fileid, length, offset, posn; uint16 tag, ref; int16 acc_mode, special; int i, j, k; #ifdef BIG_TEST int32 x, y; int32 nseek = 0; #endif int32 ret; HCHUNK_DEF chunk[1]; /* Chunk definition, see 'hchunks_priv.h' */ int32 dims[5]; int32 fill_val_len = 1; uint8 fill_val_u8 = 0; /* test 6 */ uint16 fill_val_u16 = 0; /* test 7 */ float32 fill_val_f32 = 0.0F; /* test 8 */ uint8 inbuf_u8[2][3][4]; uint16 inbuf_u16[2][3][4]; /* input data buffer */ float32 inbuf_f32[2][3][4]; /* input data buffer */ sp_info_block_t info_block; /* special info block */ comp_info cinfo; model_info minfo; intn errors = 0; outbuf = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); inbuf = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); CHECK_ALLOC(outbuf, "outbuf", "test_chunks"); CHECK_ALLOC(inbuf, "outbuf", "test_chunks"); /* initialize out buffer */ for (i = 0; i < BUFSIZE; i++) outbuf[i] = (char)(i % 256); /* allocate space for chunk dimensions */ if ((chunk[0].pdims = (DIM_DEF *)malloc(5 * sizeof(DIM_DEF))) == NULL) { printf("test_chunks: error allocating space for chunk dims\n"); errors++; goto done; } /* Create file first */ MESSAGE(5, printf("Creating a file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* 1.First test simple writing of 2-D element with no ghost/partial chunks. Set dimension to 4x4 array with 4 chunks where each chunk is 2x2. Write out 12 bytes to all 4 chunks with only partial writes to the last 2 chunks.. Write again to last 2 chunks with whole data chunks */ chunk[0].num_dims = 2; /* 2-D */ chunk[0].chunk_size = 4; /* 2x2 = 4 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 4; chunk[0].pdims[0].chunk_length = 2; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 4; chunk[0].pdims[1].chunk_length = 2; chunk[0].pdims[1].distrib_type = 1; MESSAGE(5, printf("Test 1. Create a new element as a 2-D, uint8 chunked element\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 2, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 12 bytes out */ ret = Hwrite(aid1, 12, outbuf); if (ret != 12) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote first 12 bytes to 2-D, uint8 chunked element to file\n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 2-D chunked element again for writing\n");); /* Open file for writing last 2 chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start write access tag, ref */ aid1 = Hstartwrite(fid, 1020, 2, 16); CHECK_VOID(aid1, FAIL, "Hstartwrite"); /* Try writing to last chunk in the element */ dims[0] = 1; dims[1] = 1; ret = HMCwriteChunk(aid1, dims, cptr3); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); MESSAGE(5, printf("Wrote to 4th chunk(4of4 chunks) in file\n");); /* Try writing to 2nd to last chunk in the element */ dims[0] = 1; dims[1] = 0; ret = HMCwriteChunk(aid1, dims, cptr2); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); MESSAGE(5, printf("Wrote to 3 chunk (3of4 chunks) in file\n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 2-D, uint8 chunked element again for reading \n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 2); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 2 || length != 16) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } MESSAGE(5, printf("Get/Check special info data\n");); /* get special info about element */ ret = HDget_special_info(aid1, &info_block); CHECK_VOID(aid1, FAIL, "HDget_special_info"); /* check special info */ if (info_block.ndims != chunk[0].num_dims /* 2-D */) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* check chunk_lengths */ if (info_block.cdims != NULL) { if ((info_block.cdims[0] != 2) || (info_block.cdims[1] != 2)) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* free allocated space by routine */ free(info_block.cdims); } else { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 16, inbuf); VERIFY_VOID(ret, 16, "Hread"); if (ret != 16) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 16 bytes of data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 2. Now create a new chunked 2-D element with same parameters before but write to 2 chunks of element using whole chunks. The rest of he data should contain fill values. */ /* Open file for writing again */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 2. Create another new element as a 2-D, uint8 chunked element\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 3, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* Try writing to 2 chunk in the element */ dims[0] = 1; dims[1] = 0; ret = HMCwriteChunk(aid1, dims, cptr2); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); MESSAGE(5, printf("Wrote to 3 chunk (3of4) in file\n");); /* Try writing to 1 chunk in the element */ dims[0] = 0; dims[1] = 1; ret = HMCwriteChunk(aid1, dims, cptr1); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); MESSAGE(5, printf("Wrote to 2nd chunk (2of4 chunks) in file\n");); /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* Now reopen and read back 16 bytes */ MESSAGE(5, printf("Open 2-D, uint8 chunked element again for reading \n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 3); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 3 || length != 16) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 16, inbuf); VERIFY_VOID(ret, 16, "Hread"); if (ret != 16) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data, check against 'outbuf_2' some of the data should be filled with fill value of 0 */ MESSAGE(5, printf("Verifying 16 bytes of data, there will be some fill values\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf_2[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf_2[i], inbuf[i]); errors++; } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 3. Create a new element but now there will be partial chunks because chunk lengths are not an even multiple of dimension lengths. Set dimension to 4x4 array with 4 chunks where each chunk is 3x2 = 6 bytes. Real data size is 16 bytes, size with chunks is 6 bytes x 4 chunks = 24 bytes */ chunk[0].num_dims = 2; chunk[0].chunk_size = 6; /* 3x2 = 6 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 4; chunk[0].pdims[0].chunk_length = 3; /* made this 3 */ chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 4; chunk[0].pdims[1].chunk_length = 2; chunk[0].pdims[1].distrib_type = 1; /* Open file for writing odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 3. Create another new element as a 2-D, uint8 chunked element\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 5, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 16 bytes out */ ret = Hwrite(aid1, 16, outbuf); VERIFY_VOID(ret, 16, "Hwrite"); if (ret != 16) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote to 4of4 chunks (16 bytes) in file\n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 2-D, uint8 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 5); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 5 || length != 16) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 16, inbuf); VERIFY_VOID(ret, 16, "Hread"); if (ret != 16) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 16 bytes of data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } inbuf[i] = '\0'; } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 4. Now create 3-D chunked element with no partial chunks. Write to only part of the chunked element. The rest should be filled with fill values. Set dimension to 4x6x8 array with 8 chunks where each chunk is 2x3x4= 24 bytes , total data size 192 bytes */ chunk[0].num_dims = 3; chunk[0].chunk_size = 24; /* 2x3x4 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 4; chunk[0].pdims[0].chunk_length = 2; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 6; chunk[0].pdims[1].chunk_length = 3; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 8; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 1; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 4. Create another new element as a 3-D, uint8 chunked element(192 bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 6, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write only 112 bytes out */ ret = Hwrite(aid1, 112, outbuf); VERIFY_VOID(ret, 112, "Hwrite"); if (ret != 112) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote 112of192 bytes to 3-D, uint8 chunked element \n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, uint8 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 6); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 6 || length != 192) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } MESSAGE(5, printf("Get/Check special info data\n");); /* get special info about element */ ret = HDget_special_info(aid1, &info_block); CHECK_VOID(aid1, FAIL, "HDget_special_info"); /* check special info */ if (info_block.ndims != chunk[0].num_dims /* 2-D */) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* check chunk_lengths */ if (info_block.cdims != NULL) { if ((info_block.cdims[0] != 2) || (info_block.cdims[1] != 3) || (info_block.cdims[2] != 4)) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* free allocated space by routine */ free(info_block.cdims); } else { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 112, inbuf); VERIFY_VOID(ret, 112, "Hread"); if (ret != 112) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying first 112 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } inbuf[i] = '\0'; } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 5. Now create another 3-D chunked element with partial chunks. Write to part of element, rest is filled with fill value. Set dimension to 4x6x8 array with 8 chunks , real data 192 bytes where each chunk is 3x4x5= 60 bytes , data size with chunks is 60 bytes x 8 chunks = 480 bytes */ chunk[0].num_dims = 3; chunk[0].chunk_size = 60; /* 3x4x5 = 60 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 4; chunk[0].pdims[0].chunk_length = 3; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 6; chunk[0].pdims[1].chunk_length = 4; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 8; chunk[0].pdims[2].chunk_length = 5; chunk[0].pdims[2].distrib_type = 1; /* set fill value to 1 */ fill_val_u8 = 1; fill_val_len = 1; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 5. Create another new element as a 3-D, uint8 chunked element(192bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 7, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* Set max chunks to cache to 3x4 = 12 chunks */ MESSAGE(5, printf("Set max # of chunks to cache for chunked element to 12 \n");); ret = HMCsetMaxcache(aid1, 12, 0); VERIFY_VOID(ret, 12, "HMCsetMaxcache"); /* write 112 bytes out */ ret = Hwrite(aid1, 112, outbuf); VERIFY_VOID(ret, 112, "Hwrite"); if (ret != 112) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote 112of192 bytes to 3-D, uint8 chunked element \n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, uint8 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 7); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 7 || length != 192) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 112, inbuf); VERIFY_VOID(ret, 112, "Hread"); if (ret != 112) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } inbuf[i] = '\0'; } if (errors) goto done; /* read back 20 bytes now, they should be filled with fill values */ MESSAGE(5, printf("reading some more data\n");); ret = Hread(aid1, 20, inbuf); VERIFY_VOID(ret, 20, "Hread"); if (ret != 20) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying data, should be full of fill values\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != fill_val_u8) { printf("Wrong data at %d, out %d in %d\n", i, fill_val_u8, inbuf[i]); errors++; } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 6. Now create 3-D chunked element with no partial chunks. Write using HMCwriteChunk(). Read data back in first using Hread() and verify. Then read data back in using HMCreadChunk() and verify. Set dimension to 2x3x4 array with 6 chunks where each chunk is 1x1x4= 4 bytes , total data size 24 bytes */ chunk[0].num_dims = 3; chunk[0].chunk_size = 4; /* 1x1x4 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 2; chunk[0].pdims[0].chunk_length = 1; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 3; chunk[0].pdims[1].chunk_length = 1; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 4; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 0; /* NONE */ /* set fill value to 1 */ fill_val_u8 = 1; fill_val_len = 1; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 6. Create another new element as a 3-D, uint8 chunked element(192 bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 12, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid2 = HMCcreate(fid, 1020, 18, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 24 bytes out */ ret = Hwrite(aid2, 24, u8_data); if (ret != 24) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* write data out as chunks */ MESSAGE(5, printf("Writing to 3-D, uint8 chunked element using HMCwriteChunk\n");); /* Write data use SDwriteChunk */ dims[0] = 0; dims[1] = 0; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk1); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 0; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk4); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 0; dims[1] = 1; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk2); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 1; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk5); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 0; dims[1] = 2; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk3); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 2; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk6); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* end access */ ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, uint8 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 12); CHECK_VOID(aid1, FAIL, "Hstartread"); /* start read access tag, ref */ aid2 = Hstartread(fid, 1020, 18); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 12 || length != 24) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } MESSAGE(5, printf("Get/Check special info data\n");); /* get special info about element */ ret = HDget_special_info(aid1, &info_block); CHECK_VOID(aid1, FAIL, "HDget_special_info"); /* check special info */ if (info_block.ndims != chunk[0].num_dims /* 2-D */) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* check chunk_lengths */ if (info_block.cdims != NULL) { if ((info_block.cdims[0] != 1) || (info_block.cdims[1] != 1) || (info_block.cdims[2] != 4)) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* free allocated space by routine */ free(info_block.cdims); } else { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 24, inbuf_u8); VERIFY_VOID(ret, 24, "Hread"); if (ret != 24) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 24 bytes data from Hread\n");); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 4; k++) { if (inbuf_u8[i][j][k] != u8_data[i][j][k]) { printf("Wrong data at inbuf_u8[%d][%d][%d], out %d in %d\n", i, j, k, u8_data[i][j][k], inbuf_u8[i][j][k]); errors++; } } } } if (errors) goto done; MESSAGE(5, printf("Verifying 24 bytes using HMCreadChunk\n");); /* read data back as chunks */ dims[0] = 0; dims[1] = 0; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk1 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk1[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk1[i], inbuf[i]); errors++; } } dims[0] = 0; dims[1] = 1; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk2 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk2[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk2[i], inbuf[i]); errors++; } } dims[0] = 0; dims[1] = 2; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk3 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk3[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk3[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 0; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk4 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk4[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk4[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 1; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk5 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk5[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk5[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 2; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk6 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk6[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk6[i], inbuf[i]); errors++; } } /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* end access and close file */ ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* The following tests will work if Number type conversion is done on the output data, punt for now since 'hdftest' tests these same tests with number type conversion */ /* 7. Now create 3-D chunked element with no partial chunks. Set dimension to 2x3x4 array with 6 chunks. Number type is uint16 where each chunk is 1x1x4= 4x2(nt_size) = 8 bytes , total data size 48 bytes */ chunk[0].num_dims = 3; chunk[0].chunk_size = 4; /* 1x1x4 bytes, logical */ chunk[0].nt_size = 2; /* number type size, uint16 */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 2; chunk[0].pdims[0].chunk_length = 1; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 3; chunk[0].pdims[1].chunk_length = 1; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 4; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 0; /* NONE */ fill_val_len = 2; fill_val_u16 = 0; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 7. Create another new element as a 3-D, uint16 chunked element(48 bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 14, 1, fill_val_len, &fill_val_u16, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 48 bytes out */ ret = Hwrite(aid1, 48, u16_data); VERIFY_VOID(ret, 48, "Hwrite"); if (ret != 48) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote 48 bytes to 3-D, uint16 chunked element \n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, uint16 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 14); CHECK_VOID(aid1, FAIL, "Hstartread"); /* read back in buffer */ ret = Hread(aid1, 48, inbuf_u16); VERIFY_VOID(ret, 48, "Hread"); if (ret != 48) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 48 bytes data\n");); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 4; k++) { if (inbuf_u16[i][j][k] != u16_data[i][j][k]) { printf("Wrong data at inbuf_u16[%d][%d][%d], out %d in %d\n", i, j, k, u16_data[i][j][k], inbuf_u16[i][j][k]); errors++; } } } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 8. Now create 3-D chunked element with no partial chunks. Set dimension to 2x3x4 array with 6 chunks. Numbertype is float32 where each chunk is 1x1x4= 4x4(nt_size) = 16 bytes , total data size 96 bytes */ chunk[0].num_dims = 3; chunk[0].chunk_size = 4; /* 1x1x4 bytes, logical */ chunk[0].nt_size = 4; /* number type size, float32 */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 2; chunk[0].pdims[0].chunk_length = 1; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 3; chunk[0].pdims[1].chunk_length = 1; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 4; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 0; /* NONE */ fill_val_len = 4; fill_val_f32 = 0.0F; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 8. Create another new element as a 3-D, float32 chunked element(96 bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 15, 1, fill_val_len, &fill_val_f32, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); if (aid1 == FAIL) { HEprint(stderr, 0); errors++; goto done; } /* write 96 bytes out */ ret = Hwrite(aid1, 96, f32_data); VERIFY_VOID(ret, 96, "Hwrite"); if (ret != 96) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote 96 bytes to 3-D, float32 chunked element \n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, float32 chunked element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 15); CHECK_VOID(aid1, FAIL, "Hstartread"); /* read back in buffer */ ret = Hread(aid1, 96, inbuf_f32); VERIFY_VOID(ret, 96, "Hread"); if (ret != 96) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 96 bytes data\n");); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 4; k++) { if (!H4_FLT_ABS_EQUAL(inbuf_f32[i][j][k], f32_data[i][j][k])) { printf("Wrong data at inbuf_f32[%d][%d][%d], out %f in %f\n", i, j, k, (double)f32_data[i][j][k], (double)inbuf_f32[i][j][k]); errors++; } } } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 9. Create 4-D element with partial chunks. Write only half the data out(5,000 bytes) Set dimension to 10x10x10x10 array real data 10,000 bytes . 120 chunks with chunks of 2x3x4x5 = 120 bytes, data size with chunks is 120 bytes x 120 chunks = 14,400 bytes */ chunk[0].num_dims = 4; chunk[0].chunk_size = 120; chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 10; chunk[0].pdims[0].chunk_length = 2; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 10; chunk[0].pdims[1].chunk_length = 3; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 10; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 1; chunk[0].pdims[3].dim_length = 10; chunk[0].pdims[3].chunk_length = 5; chunk[0].pdims[3].distrib_type = 1; /* set fill value to 1 */ fill_val_u8 = 1; fill_val_len = 1; /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 9. Create another new element as a 4-D, uint8 chunked element\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 3, (int)chunk[0].pdims[3].dim_length, 3, (int)chunk[0].pdims[3].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 9, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 5000 bytes out */ ret = Hwrite(aid1, 5000, outbuf); VERIFY_VOID(ret, 5000, "Hwrite"); if (ret != 5000) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote 5000of10000 bytes to 4-D chunked element \n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Open 4-D chunked element again for reading\n");); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 9); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 9 || length != 10000) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 5000 bytes of data\n");); /* read back in buffer */ ret = Hread(aid1, 5000, inbuf); VERIFY_VOID(ret, 5000, "Hread"); if (ret != 5000) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } } if (errors) goto done; /* verify some more data */ MESSAGE(5, printf("seek to 7000 bytes in element and read 1000 bytes \n");); /* seek past initial write buffer */ ret = Hseek(aid1, 7000, 0); VERIFY_VOID(ret, 0, "Hseek"); /* read back in buffer */ ret = Hread(aid1, 1000, inbuf); VERIFY_VOID(ret, 1000, "Hread"); if (ret != 1000) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data, should be fill values */ MESSAGE(5, printf("Verifying 1000 bytes of data, should be fill values\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != fill_val_u8) { printf("Wrong data at %d, out %d in %d\n", i, fill_val_u8, inbuf[i]); errors++; } } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); #ifdef BIG_TEST /* 10. The rest of the tests here are commented out They are some extra high order tests to replicate some test done on EOS-DEM data -GV..... Set dimension to 12000x12000 array with 2,500 chunks with chunk of 240x240 = 57,600 bytes */ chunk[0].num_dims = 2; chunk[0].chunk_size = 57600; chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = 0; /* nothing set */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* nothing set */ chunk[0].cinfo = NULL; /* nothing set */ chunk[0].minfo = NULL; /* nothing set */ chunk[0].pdims[0].dim_length = 12000; chunk[0].pdims[0].chunk_length = 240; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 12000; chunk[0].pdims[1].chunk_length = 240; chunk[0].pdims[1].distrib_type = 1; /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 10, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); for (j = 0; j < 12000; j++) { printf("%d,", j); /* write 12000 bytes out */ ret = Hwrite(aid1, 12000, outbuf); if (ret != 12000) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; } } printf("\n"); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 10); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; } /* verify the data */ MESSAGE(5, printf("Verifying data\n");); for (j = 0; j < 12000; j++) { if ((j % 1000) == 0) { printf("read %d,", j); /* read back in buffer */ ret = Hread(aid1, 12000, inbuf); if (ret != 12000) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; } for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } } } else { /* seek to next buffer */ ret = Hseek(aid1, 12000, 1); VERIFY_VOID(ret, 0, "Hseek"); } } /* Mimic read pattern of EOS-DEM test behaviour */ x = 1000; y = 1000; nseek = (12000 * y) + x; printf("seek to initial byte position = %d \n", nseek); /* seek to next buffer */ ret = Hseek(aid1, nseek, 0); VERIFY_VOID(ret, 0, "Hseek"); for (j = 0; j < 11; j++) { printf("read 2000x2000 square at x=%d,y=%d\n", x, y); for (k = 0; k < 2000; k++) { /* read back in buffer */ ret = Hread(aid1, 2000, inbuf); if (ret != 2000) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; } /* seek to next buffer */ ret = Hseek(aid1, 10000, 1); VERIFY_VOID(ret, 0, "Hseek"); } x = x + 100; y = y + 1000; nseek = (12000 * y) + x; printf("seek to next byte position = %d\n", nseek); /* seek to next buffer */ ret = Hseek(aid1, nseek, 0); VERIFY_VOID(ret, 0, "Hseek"); } /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); #endif /* BIG_TEST */ /* Chunking with Compression testing..... */ /* 11. Create a new element but now there will be partial chunks and Compression. Set dimension to 4x4 array with 4 chunks where each chunk is 3x2 = 6 bytes. Real data size is 16 bytes, size with chunks is 6 bytes x 4 chunks = 24 bytes . The element will be compressed with RLE scheme. */ chunk[0].num_dims = 2; chunk[0].chunk_size = 6; /* 3x2 = 6 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = SPECIAL_COMP; /* compression */ chunk[0].comp_type = COMP_CODE_RLE; /* RLE */ chunk[0].model_type = COMP_MODEL_STDIO; /* STDIO */ chunk[0].cinfo = &cinfo; /* nothing set */ chunk[0].minfo = &minfo; /* nothing set */ chunk[0].pdims[0].dim_length = 4; chunk[0].pdims[0].chunk_length = 3; /* made this 3 */ chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 4; chunk[0].pdims[1].chunk_length = 2; chunk[0].pdims[1].distrib_type = 1; /* Open file for writing odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 11. Create another new element as a 2-D, uint8 chunked, RLE Compressed element\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 20, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 16 bytes out */ ret = Hwrite(aid1, 16, outbuf); VERIFY_VOID(ret, 16, "Hwrite"); if (ret != 16) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Wrote to 4of4 chunks (16 bytes) in file\n");); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 2-D, uint8 chunked, RLE Compressed element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 20); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 20 || length != 16) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 16, inbuf); VERIFY_VOID(ret, 16, "Hread"); if (ret != 16) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 16 bytes of data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } inbuf[i] = '\0'; } if (errors) goto done; /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* 12. Now create 3-D chunked, Compressed element with no partial chunks. Write using HMCwriteChunk(). Read data back in first using Hread() and verify. Then read data back in using HMCreadChunk() and verify. Set dimension to 2x3x4 array with 6 chunks where each chunk is 1x1x4= 4 bytes , total data size 24 bytes The element is compressed using RLE scheme. */ chunk[0].num_dims = 3; chunk[0].chunk_size = 4; /* 1x1x4 bytes */ chunk[0].nt_size = 1; /* number type size */ chunk[0].chunk_flag = SPECIAL_COMP; /* compression */ chunk[0].comp_type = COMP_CODE_DEFLATE; /* GZIP */ cinfo.deflate.level = 6; chunk[0].model_type = COMP_MODEL_STDIO; /* STDIO */ chunk[0].cinfo = &cinfo; /* nothing set */ chunk[0].minfo = &minfo; /* nothing set */ chunk[0].pdims[0].dim_length = 2; chunk[0].pdims[0].chunk_length = 1; chunk[0].pdims[0].distrib_type = 1; chunk[0].pdims[1].dim_length = 3; chunk[0].pdims[1].chunk_length = 1; chunk[0].pdims[1].distrib_type = 1; chunk[0].pdims[2].dim_length = 4; chunk[0].pdims[2].chunk_length = 4; chunk[0].pdims[2].distrib_type = 0; /* NONE */ /* set fill value to 1 */ fill_val_u8 = 1; fill_val_len = 1; /* Open file for writing last odd size chunks now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); MESSAGE(5, printf("Test 12. Create another new element as a 3-D, uint8 chunked, GZIP Compressed " "element(192 bytes)\n");); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 0, (int)chunk[0].pdims[0].dim_length, 0, (int)chunk[0].pdims[0].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 1, (int)chunk[0].pdims[1].dim_length, 1, (int)chunk[0].pdims[1].chunk_length);); MESSAGE(5, printf(" dim_length[%d]=%d, chunk_length[%d]=%d \n", 2, (int)chunk[0].pdims[2].dim_length, 2, (int)chunk[0].pdims[2].chunk_length);); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid1 = HMCcreate(fid, 1020, 21, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* Create element tag, ref, nlevels, fill_len, fill, chunk array */ aid2 = HMCcreate(fid, 1020, 22, 1, fill_val_len, &fill_val_u8, (HCHUNK_DEF *)chunk); CHECK_VOID(aid1, FAIL, "HMCcreate"); /* write 24 bytes out */ ret = Hwrite(aid2, 24, u8_data); if (ret != 24) { fprintf(stderr, "ERROR: Hwrite returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* write data out as chunks */ MESSAGE(5, printf("Writing to 3-D, uint8 chunked, GZIP Compressed element using HMCwriteChunk\n");); /* Write data use SDwriteChunk */ dims[0] = 0; dims[1] = 0; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk1); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 0; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk4); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 0; dims[1] = 1; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk2); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 1; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk5); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 0; dims[1] = 2; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk3); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); dims[0] = 1; dims[1] = 2; dims[2] = 0; ret = HMCwriteChunk(aid1, dims, chunk6); CHECK_VOID(ret, FAIL, "HMCwriteChunk"); /* end access */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* end access */ ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Open 3-D, uint8 chunked, GZIP Compressed element again for reading\n");); /* Open file for reading now */ fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* start read access tag, ref */ aid1 = Hstartread(fid, 1020, 21); CHECK_VOID(aid1, FAIL, "Hstartread"); /* start read access tag, ref */ aid2 = Hstartread(fid, 1020, 22); CHECK_VOID(aid1, FAIL, "Hstartread"); /* inquire about element */ ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); if (!special) { fprintf(stderr, "ERROR: Hinquire does not think element is special line %d\n", __LINE__); errors++; goto done; } /* Check values from Hinquire */ if (ref != 21 || length != 24) { fprintf(stderr, "ERROR: Hinquire does not return the correct values \n"); fprintf(stderr, " tag =%d, ref=%d, length=%d \n", tag, ref, (int)length); errors++; goto done; } MESSAGE(5, printf("Get/Check special info data\n");); /* get special info about element */ ret = HDget_special_info(aid1, &info_block); CHECK_VOID(aid1, FAIL, "HDget_special_info"); /* check special info */ if (info_block.ndims != chunk[0].num_dims /* 2-D */) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* check chunk_lengths */ if (info_block.cdims != NULL) { if ((info_block.cdims[0] != 1) || (info_block.cdims[1] != 1) || (info_block.cdims[2] != 4)) { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* free allocated space by routine */ free(info_block.cdims); } else { fprintf(stderr, "ERROR: HDget_specail_info does not return the correct values \n"); errors++; goto done; } /* read back in buffer */ ret = Hread(aid1, 24, inbuf_u8); VERIFY_VOID(ret, 24, "Hread"); if (ret != 24) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; goto done; } /* verify the data */ MESSAGE(5, printf("Verifying 24 bytes data from Hread\n");); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 4; k++) { if (inbuf_u8[i][j][k] != u8_data[i][j][k]) { printf("Wrong data at inbuf_u8[%d][%d][%d], out %d in %d\n", i, j, k, u8_data[i][j][k], inbuf_u8[i][j][k]); errors++; } } } } if (errors) goto done; MESSAGE(5, printf("Verifying 24 bytes from uint8 chunked, GZIP Compressed element using HMCreadChunk\n");); /* read data back as chunks */ dims[0] = 0; dims[1] = 0; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk1 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk1[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk1[i], inbuf[i]); errors++; } } dims[0] = 0; dims[1] = 1; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk2 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk2[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk2[i], inbuf[i]); errors++; } } dims[0] = 0; dims[1] = 2; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk3 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk3[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk3[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 0; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk4 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk4[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk4[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 1; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk5 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk5[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk5[i], inbuf[i]); errors++; } } dims[0] = 1; dims[1] = 2; dims[2] = 0; ret = HMCreadChunk(aid2, dims, inbuf); CHECK_VOID(ret, FAIL, "HMCreadChunk"); if (ret != 4) { fprintf(stderr, "ERROR: HMCreadChunk returned the wrong length: %d\n", (int)ret); errors++; goto done; } MESSAGE(5, printf("Verifying chunk6 4 bytes data\n");); for (i = 0; i < ret; i++) { if (inbuf[i] != chunk6[i]) { printf("Wrong data at %d, out %d in %d\n", i, chunk6[i], inbuf[i]); errors++; } } /* end access and close file */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* end access and close file */ ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Closing the file\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); done: /* Don't forget to free dimensions allocate for chunk definition */ free(chunk[0].pdims); free(outbuf); free(inbuf); num_errs += errors; /* increment global error count */ } /* test_chunks() */ hdf4-hdf4.3.1/hdf/test/comp.c000066400000000000000000000362411503061704500156570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* comp.c - Test HDF compressed data I/O routines These are written to test all combinations of modeling and encoding layers with different number types. */ #include #include "tproto.h" #include "hfile_priv.h" #define TESTFILE_NAME "tcomp.hdf" #define BUFSIZE 4096 /* last ditch attempt to define this value... */ #ifndef UINT_MAX #define UINT_MAX (unsigned)(-1) #endif /* UINT_MAX */ /* make a guess about RAND_MAX if it isn't defined... */ #ifndef RAND_MAX #define RAND_MAX (UINT_MAX) #endif /* RAND_MAX */ /* define aliases for random number generation */ #define RAND rand #define SEED(a) srand((unsigned)(a)) #define COMP_TAG 1000 /* different modeling layers to test */ comp_model_t test_models[] = {COMP_MODEL_STDIO}; /* different compression layers to test */ comp_coder_t test_coders[] = {COMP_CODE_NONE, COMP_CODE_RLE /*,COMP_CODE_NBIT */ /* n-bit testing is done in it's own module, nbit.c */ , COMP_CODE_SKPHUFF, COMP_CODE_DEFLATE}; int32 test_ntypes[] = {DFNT_INT8, DFNT_UINT8, DFNT_INT16, DFNT_UINT16, DFNT_INT32, DFNT_UINT32}; #define NUM_OUTBUFS 4 /* the number of different output buffers to test */ /* outbuf #1 is all zeros (very easy to compress) */ /* outbuf #2 is a fibonacci sequence (very hard to compress) */ /* outbuf #3 is random data (also hard to compress) */ /* outbuf #4 is random in the low byte and mostly static in the upper byte(s) */ static int8 *outbuf_int8[NUM_OUTBUFS]; static uint8 *outbuf_uint8[NUM_OUTBUFS]; static int16 *outbuf_int16[NUM_OUTBUFS]; static uint16 *outbuf_uint16[NUM_OUTBUFS]; static int32 *outbuf_int32[NUM_OUTBUFS]; static uint32 *outbuf_uint32[NUM_OUTBUFS]; /* only need one input buffer per type of data */ static int8 *inbuf_int8; static uint8 *inbuf_uint8; static int16 *inbuf_int16; static uint16 *inbuf_uint16; static int32 *inbuf_int32; static uint32 *inbuf_uint32; /* local function prototypes */ static void init_model_info(comp_model_t m_type, model_info *m_info, int32 test_ntype); static void init_coder_info(comp_coder_t c_type, comp_info *c_info, int32 test_ntype); static void allocate_buffers(void); static void init_buffers(void); static void free_buffers(void); static uint16 write_data(int32 fid, comp_model_t m_type, model_info *m_info, comp_coder_t c_type, comp_info *c_info, intn test_num, int32 ntype); static void read_data(int32 fid, uint16 ref_num, intn test_num, int32 ntype); static void init_model_info(comp_model_t m_type, model_info *m_info, int32 test_ntype) { (void)m_type; (void)m_info; (void)test_ntype; switch (m_type) { case COMP_MODEL_STDIO: default: /* don't do anything for this case */ break; } /* end switch */ } /* end init_model_info() */ static void init_coder_info(comp_coder_t c_type, comp_info *c_info, int32 test_ntype) { switch (c_type) { case COMP_CODE_SKPHUFF: c_info->skphuff.skp_size = DFKNTsize(test_ntype); break; case COMP_CODE_RLE: case COMP_CODE_NONE: default: /* don't do anything for this case */ break; } /* end switch */ } /* end init_coder_info() */ static void allocate_buffers(void) { intn i; for (i = 0; i < NUM_OUTBUFS; i++) { outbuf_int8[i] = (int8 *)malloc(BUFSIZE * sizeof(int8)); outbuf_uint8[i] = (uint8 *)malloc(BUFSIZE * sizeof(uint8)); outbuf_int16[i] = (int16 *)malloc(BUFSIZE * sizeof(int16)); outbuf_uint16[i] = (uint16 *)malloc(BUFSIZE * sizeof(uint16)); outbuf_int32[i] = (int32 *)malloc(BUFSIZE * sizeof(int32)); outbuf_uint32[i] = (uint32 *)malloc(BUFSIZE * sizeof(uint32)); } /* end for */ inbuf_int8 = (int8 *)calloc(BUFSIZE, sizeof(int8)); inbuf_uint8 = (uint8 *)calloc(BUFSIZE, sizeof(uint8)); inbuf_int16 = (int16 *)calloc(BUFSIZE, sizeof(int16)); inbuf_uint16 = (uint16 *)calloc(BUFSIZE, sizeof(uint16)); inbuf_int32 = (int32 *)calloc(BUFSIZE, sizeof(int32)); inbuf_uint32 = (uint32 *)calloc(BUFSIZE, sizeof(uint32)); } /* allocate_buffers() */ static void init_buffers(void) { intn i, j; for (i = 0; i < NUM_OUTBUFS; i++) { switch (i) { case 0: /* all zero filled */ memset(outbuf_int8[i], 0, BUFSIZE * sizeof(int8)); memset(outbuf_uint8[i], 0, BUFSIZE * sizeof(uint8)); memset(outbuf_int16[i], 0, BUFSIZE * sizeof(int16)); memset(outbuf_uint16[i], 0, BUFSIZE * sizeof(uint16)); memset(outbuf_int32[i], 0, BUFSIZE * sizeof(int32)); memset(outbuf_uint32[i], 0, BUFSIZE * sizeof(uint32)); break; case 1: /* fibonacci sequence */ { uint32 last_fib, curr_fib, next_fib; for (j = 0, last_fib = 0, curr_fib = 1; j < BUFSIZE; j++) { outbuf_int8[i][j] = (int8)curr_fib; outbuf_uint8[i][j] = (uint8)curr_fib; outbuf_int16[i][j] = (int16)curr_fib; outbuf_uint16[i][j] = (uint16)curr_fib; outbuf_int32[i][j] = (int32)curr_fib; outbuf_uint32[i][j] = (uint32)curr_fib; next_fib = curr_fib + last_fib; last_fib = curr_fib; curr_fib = next_fib; } /* end for */ } /* end case */ break; case 2: /* random #'s */ { intn r; SEED(time(NULL)); for (j = 0; j < BUFSIZE; j++) { r = RAND(); outbuf_int8[i][j] = (int8)(r - RAND_MAX / 2); outbuf_uint8[i][j] = (uint8)r; outbuf_int16[i][j] = (int16)(r - RAND_MAX / 2); outbuf_uint16[i][j] = (uint16)r; outbuf_int32[i][j] = (int32)(r - RAND_MAX / 2); outbuf_uint32[i][j] = (uint32)r; } /* end for */ } /* end case */ break; case 3: /* random in the low byte and static in the upper */ { uint32 r; SEED(time(NULL)); for (j = 0; j < BUFSIZE; j++) { r = (uint32)RAND(); r &= (uint32)0xff; /* make the lower byte random */ r |= (uint32)(((j / 4) % 4) << 8); /* make the upper bytes change slowly */ outbuf_int8[i][j] = (int8)r; outbuf_uint8[i][j] = (uint8)r; outbuf_int16[i][j] = (int16)r; outbuf_uint16[i][j] = (uint16)r; outbuf_int32[i][j] = (int32)r; outbuf_uint32[i][j] = (uint32)r; } /* end for */ } /* end case */ break; } /* end switch */ } /* end for */ } /* init_buffers() */ static void free_buffers(void) { intn i; for (i = 0; i < NUM_OUTBUFS; i++) { free(outbuf_int8[i]); free(outbuf_uint8[i]); free(outbuf_int16[i]); free(outbuf_uint16[i]); free(outbuf_int32[i]); free(outbuf_uint32[i]); } free(inbuf_int8); free(inbuf_uint8); free(inbuf_int16); free(inbuf_uint16); free(inbuf_int32); free(inbuf_uint32); } /* free_buffers() */ static uint16 write_data(int32 fid, comp_model_t m_type, model_info *m_info, comp_coder_t c_type, comp_info *c_info, intn test_num, int32 ntype) { int32 aid; uint16 ret_ref; int32 err_ret; int32 write_size; void *data_ptr; MESSAGE(8, { char *s = HDgetNTdesc(ntype); printf("Writing data for test %d, ntype=%s, model_type=%d, coder_type=%d\n", (int)test_num, (s == NULL ? "Unknown" : s), (int)m_type, (int)c_type); free(s); }) ret_ref = Hnewref(fid); aid = HCcreate(fid, COMP_TAG, ret_ref, m_type, m_info, c_type, c_info); CHECK(aid, FAIL, "HCcreate"); if (aid == FAIL) return 0; switch (ntype) { case DFNT_INT8: data_ptr = (void *)outbuf_int8[test_num]; break; case DFNT_UINT8: data_ptr = (void *)outbuf_uint8[test_num]; break; case DFNT_INT16: data_ptr = (void *)outbuf_int16[test_num]; break; case DFNT_UINT16: data_ptr = (void *)outbuf_uint16[test_num]; break; case DFNT_INT32: data_ptr = (void *)outbuf_int32[test_num]; break; case DFNT_UINT32: data_ptr = (void *)outbuf_uint32[test_num]; break; default: return 0; } /* end switch */ write_size = BUFSIZE * DFKNTsize(ntype); err_ret = Hwrite(aid, write_size, data_ptr); if (err_ret != write_size) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)err_ret); HEprint(stdout, 0); num_errs++; } err_ret = Hendaccess(aid); CHECK(err_ret, FAIL, "Hendaccess"); return ret_ref; } /* end write_data() */ static void read_data(int32 fid, uint16 ref_num, intn test_num, int32 ntype) { int32 aid; int32 err_ret; int32 read_size; void *out_ptr; void *in_ptr; sp_info_block_t info_block; intn i; MESSAGE(8, { char *s = HDgetNTdesc(ntype); printf("Reading data for test %d, ntype=%s\n", (int)test_num, (s == NULL ? "Unknown" : s)); free(s); }) aid = Hstartread(fid, COMP_TAG, ref_num); CHECK_VOID(aid, FAIL, "Hstartread"); if (aid == FAIL) return; switch (ntype) { case DFNT_INT8: out_ptr = (void *)outbuf_int8[test_num]; in_ptr = (void *)inbuf_int8; break; case DFNT_UINT8: out_ptr = (void *)outbuf_uint8[test_num]; in_ptr = (void *)inbuf_uint8; break; case DFNT_INT16: out_ptr = (void *)outbuf_int16[test_num]; in_ptr = (void *)inbuf_int16; break; case DFNT_UINT16: out_ptr = (void *)outbuf_uint16[test_num]; in_ptr = (void *)inbuf_uint16; break; case DFNT_INT32: out_ptr = (void *)outbuf_int32[test_num]; in_ptr = (void *)inbuf_int32; break; case DFNT_UINT32: out_ptr = (void *)outbuf_uint32[test_num]; in_ptr = (void *)inbuf_uint32; break; default: return; } /* end switch */ read_size = BUFSIZE * DFKNTsize(ntype); err_ret = Hread(aid, read_size, in_ptr); if (err_ret != read_size) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)err_ret); HEprint(stdout, 0); num_errs++; } /* end if */ if (memcmp(in_ptr, out_ptr, read_size) != 0) { char *s = HDgetNTdesc(ntype); HDget_special_info(aid, &info_block); fprintf(stderr, "ERROR: Data from test: %d, number type: %s, model type: %d, coder type: %d differs\n", test_num, s, (int)info_block.model_type, (int)info_block.comp_type); MESSAGE( 8, for (i = 0; i < read_size * DFKNTsize(ntype); i++) { if (((char *)in_ptr)[i] != ((char *)out_ptr)[i]) printf("byte %i differs, written:%d, read in:%d\n", i, ((char *)out_ptr)[i], ((char *)in_ptr)[i]); }) free(s); num_errs++; } /* end if */ err_ret = Hendaccess(aid); CHECK_VOID(err_ret, FAIL, "Hendaccess"); } /* end read_data() */ void test_comp(void) { model_info m_info; comp_info c_info; uint16 ref_num; /* reference number of the data written out */ int32 fid; /* file ID of HDF file for testing */ intn test_num, ntype_num, model_num, coder_num; int32 ret; MESSAGE(6, printf("Starting compression test\n");) /* allocate room for the input and output buffers */ allocate_buffers(); /* fill the buffers with interesting data to compress */ init_buffers(); /* open the HDF file */ fid = Hopen(TESTFILE_NAME, DFACC_ALL, 0); /* Cycle through the different testing data, the number types, */ /* the different modeling layers and the different coding layers, */ /* in that order */ for (test_num = 0; test_num < NUM_OUTBUFS; test_num++) { for (ntype_num = 0; (size_t)ntype_num < (sizeof(test_ntypes) / sizeof(test_ntypes[0])); ntype_num++) { for (model_num = 0; (size_t)model_num < (sizeof(test_models) / sizeof(test_models[0])); model_num++) { init_model_info(test_models[model_num], &m_info, test_ntypes[ntype_num]); for (coder_num = 0; (size_t)coder_num < (sizeof(test_coders) / sizeof(test_coders[0])); coder_num++) { init_coder_info(test_coders[coder_num], &c_info, test_ntypes[ntype_num]); ref_num = write_data(fid, test_models[model_num], &m_info, test_coders[coder_num], &c_info, test_num, test_ntypes[ntype_num]); read_data(fid, ref_num, test_num, test_ntypes[ntype_num]); MESSAGE(6, { int32 aid; sp_info_block_t info_block; aid = Hstartread(fid, COMP_TAG, ref_num); HDget_special_info(aid, &info_block); Hendaccess(aid); printf("size of original HDF element=%ld\n", (long)Hlength(fid, COMP_TAG, ref_num)); printf("size of compressed HDF element=%ld\n", (long)info_block.comp_size); }) } /* end for */ } /* end for */ } /* end for */ } /* end for */ /* close the HDF file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* free the input and output buffers */ free_buffers(); MESSAGE(6, printf("Finished compression test\n");) } /* end test_comp() */ hdf4-hdf4.3.1/hdf/test/conv.c000066400000000000000000001046731503061704500156730ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE conv.c Test HDF Number-Type conversion routines REMARKS DESIGN BUGS/LIMITATIONS EXPORTED ROUTINES AUTHOR Quincey Koziol MODIFICATION HISTORY 10/27/93 - Started coding. */ #include "tproto.h" #include /* last ditch attempt do define this value... */ #ifndef UINT_MAX #define UINT_MAX (unsigned)(-1) #endif /* Substitute bogus value if CLOCKS_PER_SEC is unavailable */ #ifndef CLOCKS_PER_SEC #define CLOCKS_PER_SEC -1 #endif #ifndef RAND_MAX #define RAND_MAX (UINT_MAX) #endif #define TEST_SIZE 100001 #define SOURCE_STRIDE 2 /* space out the strides for source & dest. */ #define DEST_STRIDE 3 /* define aliases for random number generation */ #define RAND rand #define SEED(a) srand((unsigned)(a)) #ifdef NO_TIMING #define clock() (0) #endif extern int Verbocity; /* Local variables */ static int32 test_type[] = {0, DFNT_LITEND, DFNT_NATIVE}; static const char *test_name[] = {"Big-Endian", "Little-Endian", "Native"}; /* for those machines with imprecise IEEE<-> conversions, this should be */ /* close enough */ #define EPS64 ((float64)1.0E-14) #define EPS32 ((float32)1.0E-7) void test_conv(void) { clock_t c1, c2, c3, c4; uint8 *src_uint8, *dst_uint8, *dst2_uint8; uint16 *src_uint16, *dst_uint16, *dst2_uint16; uint32 *src_uint32, *dst_uint32, *dst2_uint32; int8 *src_int8, *dst_int8, *dst2_int8; int16 *src_int16, *dst_int16, *dst2_int16; int32 *src_int32, *dst_int32, *dst2_int32; float32 *src_float32, *dst_float32, *dst2_float32; float64 *src_float64, *dst_float64, *dst2_float64; intn i, r; intn t; int32 ret; SEED((int)time(NULL)); /* seed with effectively random number */ for (t = 0; (size_t)t < sizeof(test_type) / sizeof(int32); t++) { MESSAGE(5, printf("Testing %s Number-Types\n", test_name[t]);); MESSAGE(6, printf("seeding int8 array\n");); /* allocate arrays */ src_int8 = (int8 *)malloc(TEST_SIZE * sizeof(int8)); if (src_int8 == NULL) { CHECK_VOID(src_int8, NULL, "malloc"); return; } /* end if */ dst_int8 = (int8 *)malloc(TEST_SIZE * sizeof(int8)); if (dst_int8 == NULL) { CHECK_VOID(dst_int8, NULL, "malloc"); return; } /* end if */ dst2_int8 = (int8 *)malloc(TEST_SIZE * sizeof(int8)); if (dst2_int8 == NULL) { CHECK_VOID(dst2_int8, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_int8[i] = (int8)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int8 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_int8, (void *)dst_int8, test_type[t] | DFNT_INT8, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int8 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s int8 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_int8, (void *)dst2_int8, test_type[t] | DFNT_INT8, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int8 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_int8, dst2_int8, TEST_SIZE * sizeof(int8))) { printf("Error converting %s int8 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_int8, 0xae, TEST_SIZE * sizeof(int8)); memset(dst_int8, 0xae, TEST_SIZE * sizeof(int8)); memset(dst2_int8, 0xae, TEST_SIZE * sizeof(int8)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_int8[i] = (int8)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int8 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_int8, (void *)dst_int8, test_type[t] | DFNT_INT8, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(int8), DEST_STRIDE * sizeof(int8)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int8 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s int8 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_int8, (void *)dst2_int8, test_type[t] | DFNT_INT8, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(int8), SOURCE_STRIDE * sizeof(int8)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int8 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_int8, dst2_int8, (TEST_SIZE / 2) * sizeof(int8))) { printf("Error converting %s int8 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_int8); free(dst_int8); free(dst2_int8); MESSAGE(6, printf("seeding %s uint8 array\n", test_name[t]);); src_uint8 = (uint8 *)malloc(TEST_SIZE * sizeof(uint8)); if (src_uint8 == NULL) { CHECK_VOID(src_uint8, NULL, "malloc"); return; } /* end if */ dst_uint8 = (uint8 *)malloc(TEST_SIZE * sizeof(uint8)); if (dst_uint8 == NULL) { CHECK_VOID(dst_uint8, NULL, "malloc"); return; } /* end if */ dst2_uint8 = (uint8 *)malloc(TEST_SIZE * sizeof(uint8)); if (dst2_uint8 == NULL) { CHECK_VOID(dst2_uint8, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_uint8[i] = (uint8)RAND(); MESSAGE(6, printf("converting %s uint8 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_uint8, (void *)dst_uint8, test_type[t] | DFNT_UINT8, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint8 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s uint8 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_uint8, (void *)dst2_uint8, test_type[t] | DFNT_UINT8, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint8 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_uint8, dst2_uint8, TEST_SIZE * sizeof(uint8))) { printf("Error converting %s uint8 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_uint8, 0xae, TEST_SIZE * sizeof(uint8)); memset(dst_uint8, 0xae, TEST_SIZE * sizeof(uint8)); memset(dst2_uint8, 0xae, TEST_SIZE * sizeof(uint8)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_uint8[i] = (uint8)RAND(); MESSAGE(6, printf("converting %s uint8 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_uint8, (void *)dst_uint8, test_type[t] | DFNT_UINT8, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(uint8), DEST_STRIDE * sizeof(uint8)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint8 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s uint8 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_uint8, (void *)dst2_uint8, test_type[t] | DFNT_UINT8, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(uint8), SOURCE_STRIDE * sizeof(uint8)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint8 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_uint8, dst2_uint8, (TEST_SIZE / 2) * sizeof(uint8))) { printf("Error converting %s uint8 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_uint8); free(dst_uint8); free(dst2_uint8); MESSAGE(6, printf("seeding %s int16 array\n", test_name[t]);); src_int16 = (int16 *)malloc(TEST_SIZE * sizeof(int16)); if (src_int16 == NULL) { CHECK_VOID(src_int16, NULL, "malloc"); return; } /* end if */ dst_int16 = (int16 *)malloc(TEST_SIZE * sizeof(int16)); if (dst_int16 == NULL) { CHECK_VOID(dst_int16, NULL, "malloc"); return; } /* end if */ dst2_int16 = (int16 *)malloc(TEST_SIZE * sizeof(int16)); if (dst2_int16 == NULL) { CHECK_VOID(dst2_int16, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_int16[i] = (int16)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int16 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_int16, (void *)dst_int16, test_type[t] | DFNT_INT16, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int16 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s int16 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_int16, (void *)dst2_int16, test_type[t] | DFNT_INT16, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int16 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_int16, dst2_int16, TEST_SIZE * sizeof(int16))) { printf("Error converting %s int16 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_int16, 0xae, TEST_SIZE * sizeof(int16)); memset(dst_int16, 0xae, TEST_SIZE * sizeof(int16)); memset(dst2_int16, 0xae, TEST_SIZE * sizeof(int16)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_int16[i] = (int16)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int16 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_int16, (void *)dst_int16, test_type[t] | DFNT_INT16, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(int16), DEST_STRIDE * sizeof(int16)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int16 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s int16 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_int16, (void *)dst2_int16, test_type[t] | DFNT_INT16, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(int16), SOURCE_STRIDE * sizeof(int16)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int16 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_int16, dst2_int16, (TEST_SIZE / 2) * sizeof(int16))) { printf("Error converting %s int16 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ free(src_int16); free(dst_int16); free(dst2_int16); MESSAGE(6, printf("seeding %s uint16 array\n", test_name[t]);); src_uint16 = (uint16 *)malloc(TEST_SIZE * sizeof(uint16)); if (src_uint16 == NULL) { CHECK_VOID(src_uint16, NULL, "malloc"); return; } /* end if */ dst_uint16 = (uint16 *)malloc(TEST_SIZE * sizeof(uint16)); if (dst_uint16 == NULL) { CHECK_VOID(dst_uint16, NULL, "malloc"); return; } /* end if */ dst2_uint16 = (uint16 *)malloc(TEST_SIZE * sizeof(uint16)); if (dst2_uint16 == NULL) { CHECK_VOID(dst2_uint16, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_uint16[i] = (uint16)RAND(); MESSAGE(6, printf("converting %s uint16 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_uint16, (void *)dst_uint16, test_type[t] | DFNT_UINT16, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint16 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s uint16 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_uint16, (void *)dst2_uint16, test_type[t] | DFNT_UINT16, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint16 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_uint16, dst2_uint16, TEST_SIZE * sizeof(uint16))) { printf("Error converting %s uint16 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_uint16, 0xae, TEST_SIZE * sizeof(uint16)); memset(dst_uint16, 0xae, TEST_SIZE * sizeof(uint16)); memset(dst2_uint16, 0xae, TEST_SIZE * sizeof(uint16)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_uint16[i] = (uint16)RAND(); MESSAGE(6, printf("converting %s uint16 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_uint16, (void *)dst_uint16, test_type[t] | DFNT_UINT16, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(uint16), DEST_STRIDE * sizeof(uint16)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint16 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s uint16 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_uint16, (void *)dst2_uint16, test_type[t] | DFNT_UINT16, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(uint16), SOURCE_STRIDE * sizeof(uint16)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint16 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_uint16, dst2_uint16, (TEST_SIZE / 2) * sizeof(uint16))) { printf("Error converting %s uint16 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_uint16); free(dst_uint16); free(dst2_uint16); MESSAGE(6, printf("seeding %s int32 array\n", test_name[t]);); src_int32 = (int32 *)malloc(TEST_SIZE * sizeof(int32)); if (src_int32 == NULL) { CHECK_VOID(src_int32, NULL, "malloc"); return; } /* end if */ dst_int32 = (int32 *)malloc(TEST_SIZE * sizeof(int32)); if (dst_int32 == NULL) { CHECK_VOID(dst_int32, NULL, "malloc"); return; } /* end if */ dst2_int32 = (int32 *)malloc(TEST_SIZE * sizeof(int32)); if (dst2_int32 == NULL) { CHECK_VOID(dst2_int32, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_int32[i] = (int32)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int32 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_int32, (void *)dst_int32, test_type[t] | DFNT_INT32, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int32 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s int32 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_int32, (void *)dst2_int32, test_type[t] | DFNT_INT32, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int32 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_int32, dst2_int32, TEST_SIZE * sizeof(int32))) { printf("Error converting %s int32 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_int32, 0xae, TEST_SIZE * sizeof(int32)); memset(dst_int32, 0xae, TEST_SIZE * sizeof(int32)); memset(dst2_int32, 0xae, TEST_SIZE * sizeof(int32)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_int32[i] = (int32)(RAND() - RAND_MAX / 2); MESSAGE(6, printf("converting %s int32 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_int32, (void *)dst_int32, test_type[t] | DFNT_INT32, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(int32), DEST_STRIDE * sizeof(int32)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int32 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s int32 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_int32, (void *)dst2_int32, test_type[t] | DFNT_INT32, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(int32), SOURCE_STRIDE * sizeof(int32)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s int32 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_int32, dst2_int32, (TEST_SIZE / 2) * sizeof(int32))) { printf("Error converting %s int32 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_int32); free(dst_int32); free(dst2_int32); MESSAGE(6, printf("seeding %s uint32 array\n", test_name[t]);); src_uint32 = (uint32 *)malloc(TEST_SIZE * sizeof(uint32)); if (src_uint32 == NULL) { CHECK_VOID(src_uint32, NULL, "malloc"); return; } /* end if */ dst_uint32 = (uint32 *)malloc(TEST_SIZE * sizeof(uint32)); if (dst_uint32 == NULL) { CHECK_VOID(dst_uint32, NULL, "malloc"); return; } /* end if */ dst2_uint32 = (uint32 *)malloc(TEST_SIZE * sizeof(uint32)); if (dst2_uint32 == NULL) { CHECK_VOID(dst2_uint32, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) src_uint32[i] = (uint32)RAND(); MESSAGE(6, printf("converting %s uint32 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_uint32, (void *)dst_uint32, test_type[t] | DFNT_UINT32, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint32 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s uint32 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_uint32, (void *)dst2_uint32, test_type[t] | DFNT_UINT32, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint32 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_uint32, dst2_uint32, TEST_SIZE * sizeof(uint32))) { printf("Error converting %s uint32 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_uint32, 0xae, TEST_SIZE * sizeof(uint32)); memset(dst_uint32, 0xae, TEST_SIZE * sizeof(uint32)); memset(dst2_uint32, 0xae, TEST_SIZE * sizeof(uint32)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) src_uint32[i] = (uint32)RAND(); MESSAGE(6, printf("converting %s uint32 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_uint32, (void *)dst_uint32, test_type[t] | DFNT_UINT32, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(uint32), DEST_STRIDE * sizeof(uint32)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint32 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s uint32 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_uint32, (void *)dst2_uint32, test_type[t] | DFNT_UINT32, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(uint32), SOURCE_STRIDE * sizeof(uint32)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s uint32 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_uint32, dst2_uint32, (TEST_SIZE / 2) * sizeof(uint32))) { printf("Error converting %s uint32 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_uint32); free(dst_uint32); free(dst2_uint32); MESSAGE(6, printf("seeding %s float32 array\n", test_name[t]);); src_float32 = (float32 *)malloc(TEST_SIZE * sizeof(float32)); if (src_float32 == NULL) { CHECK_VOID(src_float32, NULL, "malloc"); return; } /* end if */ dst_float32 = (float32 *)malloc(TEST_SIZE * sizeof(float32)); if (dst_float32 == NULL) { CHECK_VOID(dst_float32, NULL, "malloc"); return; } /* end if */ dst2_float32 = (float32 *)malloc(TEST_SIZE * sizeof(float32)); if (dst2_float32 == NULL) { CHECK_VOID(dst2_float32, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) { src_float32[i] = (float32)(RAND() - RAND_MAX / 2); while ((r = RAND()) == 0) /* don't divide by zero */ r = RAND(); src_float32[i] /= (float32)r; } /* end for */ MESSAGE(6, printf("converting %s float32 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_float32, (void *)dst_float32, test_type[t] | DFNT_FLOAT32, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float32 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s float32 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_float32, (void *)dst2_float32, test_type[t] | DFNT_FLOAT32, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float32 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_float32, dst2_float32, TEST_SIZE * sizeof(float32))) { printf("Error converting %s float32 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_float32, 0xae, TEST_SIZE * sizeof(float32)); memset(dst_float32, 0xae, TEST_SIZE * sizeof(float32)); memset(dst2_float32, 0xae, TEST_SIZE * sizeof(float32)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) { src_float32[i] = (float32)(RAND() - RAND_MAX / 2); while ((r = RAND()) == 0) /* don't divide by zero */ r = RAND(); src_float32[i] /= (float32)r; } /* end for */ MESSAGE(6, printf("converting %s float32 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_float32, (void *)dst_float32, test_type[t] | DFNT_FLOAT32, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(float32), DEST_STRIDE * sizeof(float32)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float32 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s float32 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_float32, (void *)dst2_float32, test_type[t] | DFNT_FLOAT32, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(float32), SOURCE_STRIDE * sizeof(float32)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float32 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_float32, dst2_float32, (TEST_SIZE / 2) * sizeof(float32))) { printf("Error converting %s float32 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_float32); free(dst_float32); free(dst2_float32); MESSAGE(6, printf("seeding %s float64 array\n", test_name[t]);); src_float64 = (float64 *)malloc(TEST_SIZE * sizeof(float64)); if (src_float64 == NULL) { CHECK_VOID(src_float64, NULL, "malloc"); return; } /* end if */ dst_float64 = (float64 *)malloc(TEST_SIZE * sizeof(float64)); if (dst_float64 == NULL) { CHECK_VOID(dst_float64, NULL, "malloc"); return; } /* end if */ dst2_float64 = (float64 *)malloc(TEST_SIZE * sizeof(float64)); if (dst2_float64 == NULL) { CHECK_VOID(dst2_float64, NULL, "malloc"); return; } /* end if */ /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i++) { src_float64[i] = (float64)(RAND() - RAND_MAX / 2); while ((r = RAND()) == 0) /* don't divide by zero */ r = RAND(); src_float64[i] /= (float64)r; } /* end for */ MESSAGE(6, printf("converting %s float64 array\n", test_name[t]);); c1 = clock(); ret = DFKconvert((void *)src_float64, (void *)dst_float64, test_type[t] | DFNT_FLOAT64, TEST_SIZE, DFACC_WRITE, 0, 0); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float64 values\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); MESSAGE(6, printf("re-converting %s float64 array\n", test_name[t]);); c3 = clock(); ret = DFKconvert((void *)dst_float64, (void *)dst2_float64, test_type[t] | DFNT_FLOAT64, TEST_SIZE, DFACC_READ, 0, 0); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float64 values\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t]);); if (memcmp(src_float64, dst2_float64, TEST_SIZE * sizeof(float64))) { printf("Error converting %s float64 values!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } /* end if */ /* clear arrays for next test */ memset(src_float64, 0xae, TEST_SIZE * sizeof(float64)); memset(dst_float64, 0xae, TEST_SIZE * sizeof(float64)); memset(dst2_float64, 0xae, TEST_SIZE * sizeof(float64)); /* Seed arrays with random values */ for (i = 0; i < TEST_SIZE; i += SOURCE_STRIDE) { src_float64[i] = (float64)(RAND() - RAND_MAX / 2); while ((r = RAND()) == 0) /* don't divide by zero */ r = RAND(); src_float64[i] /= (float64)r; } /* end for */ MESSAGE(6, printf("converting %s float64 array with %d/%d stride\n", test_name[t], SOURCE_STRIDE, DEST_STRIDE);); c1 = clock(); ret = DFKconvert((void *)src_float64, (void *)dst_float64, test_type[t] | DFNT_FLOAT64, TEST_SIZE / 4, DFACC_WRITE, SOURCE_STRIDE * sizeof(float64), DEST_STRIDE * sizeof(float64)); c2 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float64 values with %d/%d stride\n", (int)(c2 - c1), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], SOURCE_STRIDE, DEST_STRIDE);); MESSAGE(6, printf("re-converting %s float64 array with %d/%d stride\n", test_name[t], DEST_STRIDE, SOURCE_STRIDE);); c3 = clock(); ret = DFKconvert((void *)dst_float64, (void *)dst2_float64, test_type[t] | DFNT_FLOAT64, TEST_SIZE / 4, DFACC_READ, DEST_STRIDE * sizeof(float64), SOURCE_STRIDE * sizeof(float64)); c4 = clock(); RESULT("DFKconvert"); MESSAGE(6, printf("%d/%d seconds to convert %d %s float64 values with %d/%d stride\n", (int)(c4 - c3), (int)CLOCKS_PER_SEC, (int)TEST_SIZE, test_name[t], DEST_STRIDE, SOURCE_STRIDE);); if (memcmp(src_float64, dst2_float64, (TEST_SIZE / 2) * sizeof(float64))) { printf("Error converting %s float64 values with strides!\n", test_name[t]); HEprint(stdout, 0); num_errs++; } free(src_float64); free(dst_float64); free(dst2_float64); } /* end for */ } /* end test_conv() */ hdf4-hdf4.3.1/hdf/test/egchi.res000066400000000000000000000050241503061704500163420ustar00rootroot00000000000000# # NOTE: This file was generated on a machine where the size of # local ints and floats is 4 bytes. On machines with different # sizes the 'vsize=X' entries will be different. # FULL DUMP FILE: egchi.hdf vg:0 <1965/4> (This is an EMPTY vgroup {EXAMPLE}) has 0 entries: vg:1 <1965/5> (here is a vset with 4 links {EXAMPLE}) has 4 entries: vs:0 <1962/2> nv=100 i=0 fld [PRES] vsize=4 (pressure vals {EXAMPLE}) 0: fld [PRES], type=5, order=1 100.000000 100.000999 100.001999 100.002998 100.003998 100.004997 100.005997 100.007004 100.008003 100.009003 100.010002 100.011002 100.012001 100.013000 100.014000 100.014999 100.015999 100.016998 100.017998 100.018997 100.019997 100.021004 100.022003 100.023003 100.024002 100.025002 100.026001 100.027000 100.028000 100.028999 100.029999 100.030998 100.031998 100.032997 100.033997 100.035004 100.036003 100.037003 100.038002 100.039001 100.040001 100.041000 100.042000 100.042999 100.043999 100.044998 100.045998 100.046997 100.047997 100.049004 100.050003 100.051003 100.052002 100.053001 100.054001 100.055000 100.056000 100.056999 100.057999 100.058998 100.059998 100.060997 100.061996 100.063004 100.064003 100.065002 100.066002 100.067001 100.068001 100.069000 100.070000 100.070999 100.071999 100.072998 100.073997 100.074997 100.075996 100.077003 100.078003 100.079002 100.080002 100.081001 100.082001 100.083000 100.084000 100.084999 100.085999 100.086998 100.087997 100.088997 100.089996 100.091003 100.092003 100.093002 100.094002 100.095001 100.096001 100.097000 100.098000 100.098999 vs:1 <1962/3> nv=60 i=0 fld [COLOR] vsize=12 (rgb colors {EXAMPLE}) 0: fld [COLOR], type=24, order=3 0 100 200 1 101 201 2 102 202 3 103 203 4 104 204 5 105 205 6 106 206 7 107 207 8 108 208 9 109 209 10 110 210 11 111 211 12 112 212 13 113 213 14 114 214 15 115 215 16 116 216 17 117 217 18 118 218 19 119 219 20 120 220 21 121 221 22 122 222 23 123 223 24 124 224 25 125 225 26 126 226 27 127 227 28 128 228 29 129 229 30 130 230 31 131 231 32 132 232 33 133 233 34 134 234 35 135 235 36 136 236 37 137 237 38 138 238 39 139 239 40 140 240 41 141 241 42 142 242 43 143 243 44 144 244 45 145 245 46 146 246 47 147 247 48 148 248 49 149 249 50 150 250 51 151 251 52 152 252 53 153 253 54 154 254 55 155 255 56 156 256 57 157 257 58 158 258 59 159 259 vg:2 <1965/4> ne=0 (This is an EMPTY vgroup {EXAMPLE}) --:3 <7777/1> Unknown Tag hdf4-hdf4.3.1/hdf/test/egfhi.f000066400000000000000000000110241503061704500157760ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C========================================================== c c HDF VSET Sample Program c c EGFHI.F c Uses High-Level routines c Creates a vset of 1 vgroup and 3 vdatas in the file 'egfhi.hdf'. c c c =========================================================== program HIGHLEVEL print *, 'This program tests the Fortran Vset High-level' print *, 'calls. It creates 3 vdatas, and then create a vgroup' print *, 'that will be linked to the 3 vdatas.' print *,' ' call DOIT end subroutine DOIT c Remove this fortran directive if your compiler doesn't support it. c It forces an error message whenever a variable is not declared. IMPLICIT NONE integer idata(200) real rdata(200) integer conval(3,200) integer tagarray(10), refarray(10) c --- declare the HDF and VSET routines used. This is compulsory! external HOPEN, HCLOSE ,VHFSD, VHFSDM, VHFMKGP, VFSTART, VFEND integer HOPEN, VHFSD, VHFSDM, VHFMKGP integer f, i, j integer vs1, vs2, vs3, vg c --- some defined constants. see "vg.h" integer LONGTYPE parameter (LONGTYPE=24) integer REALTYPE parameter (REALTYPE=5) integer VDATATAG parameter (VDATATAG=1962) integer FULLACC parameter (FULLACC=7) c ------ generate some data ------- do 111 i=1,200 rdata(i) = i *1.001 + 500 idata(i) = i 111 continue do 112 i=1,100 do 114 j=1,3 conval(j,i) = i*j 114 continue 112 continue c ------- open hdf file ------ f = HOPEN ('egfhi.hdf'//char(0), FULLACC, 0) call VFSTART (f) c ------- store 100 floats as one field in one vdata ------ vs1 = VHFSD (f, 'MP', rdata, 100, REALTYPE, + 'melting-points', 'test') c ------- store 120 integers as one field in one vdata ------ vs2 = VHFSD (f, 'AGE', idata, 120, LONGTYPE, + 'age-of-specimens', 'test') c ------- store 100*3 values as one field (of order 3) ----- c ------- in one vdata ------ vs3 = VHFSDM (f, 'PLIST', conval, 100, LONGTYPE, + 'connectivity triplets','test',3) c --------- messages ---------------------- if (vs1 .eq. -1) then print *,'error creating melting-point vdata' else print *, 'created vdata "melting-points" with 100 elements' endif if (vs2 .eq. -1) then print *,'error creating "age-of-specimens" vdata' else print *, 'created vdata "age-of-specimens" with 120 elements' endif if (vs3 .eq. -1) then print *,'error creating "connectivity triplets" vdata' else print *, 'created vdata "connectivity triplets" with ' print *, ' 100 elements' endif c ------ make a vgroup that has links to all the above vdatas ---- tagarray(1) = VDATATAG refarray(1) = vs1 tagarray(2) = VDATATAG refarray(2) = vs2 tagarray(3) = VDATATAG refarray(3) = vs3 vg = VHFMKGP(f,tagarray,refarray,3, + 'vgroup with 3 vdatas (fortran)', 'test') if (vg .eq. -1) then print *,'error creating vgroup' else print *, 'created vgroup that links all the 3 vdatas' endif c --- all done. close the file --- call VFEND (f) call HCLOSE (f) print *,' ' print *, 'SUCCESS: created file egfhi.hdf' print *, 'Use the utility vshow to look at the results:' print *, ' vshow egfhi.hdf +' print *, 'Results should be as in the file egfhi.result' print *,' ' end hdf4-hdf4.3.1/hdf/test/egfhi.res000066400000000000000000000065551503061704500163570ustar00rootroot00000000000000# # NOTE: This file was generated on a machine where the size of # local ints and floats is 4 bytes. On machines with different # sizes the 'vsize=X' entries will be different. # FULL DUMP FILE: egfhi.hdf vg:0 <1965/5> (vgroup with 3 vdatas (fortran) {test}) has 3 entries: vs:0 <1962/2> nv=100 i=0 fld [MP] vsize=4 (melting-points {test}) 0: fld [MP], type=5, order=1 501.001007 502.002014 503.002991 504.003998 505.005005 506.006012 507.006989 508.007996 509.009003 510.010010 511.010986 512.012024 513.013000 514.013977 515.015015 516.015991 517.017029 518.018005 519.018982 520.020020 521.020996 522.021973 523.023010 524.023987 525.025024 526.026001 527.026978 528.028015 529.028992 530.030029 531.031006 532.031982 533.033020 534.033997 535.034973 536.036011 537.036987 538.038025 539.039001 540.039978 541.041016 542.041992 543.043030 544.044006 545.044983 546.046021 547.046997 548.047974 549.049011 550.049988 551.051025 552.052002 553.052979 554.054016 555.054993 556.056030 557.057007 558.057983 559.059021 560.059998 561.060974 562.062012 563.062988 564.064026 565.065002 566.065979 567.067017 568.067993 569.069031 570.070007 571.070984 572.072021 573.072998 574.073975 575.075012 576.075989 577.077026 578.078003 579.078979 580.080017 581.080994 582.082031 583.083008 584.083984 585.085022 586.085999 587.086975 588.088013 589.088989 590.090027 591.091003 592.091980 593.093018 594.093994 595.095032 596.096008 597.096985 598.098022 599.098999 600.099976 vs:1 <1962/3> nv=120 i=0 fld [AGE] vsize=4 (age-of-specimenstest {test}) 0: fld [AGE], type=24, order=1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 vs:2 <1962/4> nv=100 i=0 fld [PLIST] vsize=12 (connectivity triplets {test}) 0: fld [PLIST], type=24, order=3 1 2 3 2 4 6 3 6 9 4 8 12 5 10 15 6 12 18 7 14 21 8 16 24 9 18 27 10 20 30 11 22 33 12 24 36 13 26 39 14 28 42 15 30 45 16 32 48 17 34 51 18 36 54 19 38 57 20 40 60 21 42 63 22 44 66 23 46 69 24 48 72 25 50 75 26 52 78 27 54 81 28 56 84 29 58 87 30 60 90 31 62 93 32 64 96 33 66 99 34 68 102 35 70 105 36 72 108 37 74 111 38 76 114 39 78 117 40 80 120 41 82 123 42 84 126 43 86 129 44 88 132 45 90 135 46 92 138 47 94 141 48 96 144 49 98 147 50 100 150 51 102 153 52 104 156 53 106 159 54 108 162 55 110 165 56 112 168 57 114 171 58 116 174 59 118 177 60 120 180 61 122 183 62 124 186 63 126 189 64 128 192 65 130 195 66 132 198 67 134 201 68 136 204 69 138 207 70 140 210 71 142 213 72 144 216 73 146 219 74 148 222 75 150 225 76 152 228 77 154 231 78 156 234 79 158 237 80 160 240 81 162 243 82 164 246 83 166 249 84 168 252 85 170 255 86 172 258 87 174 261 88 176 264 89 178 267 90 180 270 91 182 273 92 184 276 93 186 279 94 188 282 95 190 285 96 192 288 97 194 291 98 196 294 99 198 297 100 200 300 hdf4-hdf4.3.1/hdf/test/extelt.c000066400000000000000000000341271503061704500162270ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * These is a first pass at rewriting how these tests for exteranl * elements were done -GV */ #include "tproto.h" #define TESTFILE_NAME "t.hdf" /* file for first 4 series of tests */ #define TESTFILE_NAME1 "tx.hdf" /* file for last test */ #define STRING "element 1000 2" /* 14 bytes */ #define STRING2 "element 1000 1 wrong" /* 22 bytes */ #define STRING3 "element 1000 1 correct" /* 22 bytes */ #define BUF_SIZE 4096 static uint8 *outbuf = NULL; static uint8 *inbuf = NULL; void test_hextelt(void) { int32 fid, fid1; int32 aid1, aid2; int32 fileid, length, offset, posn; uint16 tag, ref; int16 acc_mode, special; int i; int32 ret; intn errflag = 0; intn errors = 0; outbuf = (uint8 *)calloc(BUF_SIZE, sizeof(uint8)); inbuf = (uint8 *)calloc(BUF_SIZE, sizeof(uint8)); CHECK_ALLOC(outbuf, "outbuf", "test_hextelt"); CHECK_ALLOC(inbuf, "outbuf", "test_hextelt"); /* Initialize buffer */ for (i = 0; i < BUF_SIZE; i++) outbuf[i] = (char)(i % 256); /* Create header file */ MESSAGE(5, printf("Creating base file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Write first object to header file */ MESSAGE(5, printf("Writing object(%lu bytes) into base file\n", (unsigned long)strlen(STRING2));); ret = Hputelement(fid, (uint16)1000, (uint16)1, (const uint8 *)STRING2, (int32)strlen(STRING2) + 1); CHECK_VOID(ret, FAIL, "Hputelement"); /* Promote the above object to an external object */ MESSAGE(5, printf("Promoting above object to external element in file #1\n");); aid1 = HXcreate(fid, 1000, 1, "t1.hdf", (int32)0, (int32)0); CHECK_VOID(aid1, FAIL, "HXcreate"); ret = Hseek(aid1, (int32)strlen("element 1000 1") + 1, DF_START); CHECK_VOID(ret, FAIL, "Hseek"); /* Now verify that the new promoted object can be written to */ MESSAGE(5, printf("Writing to promoted object now in file #1 \n");); ret = Hwrite(aid1, (int32)strlen("correct") + 1, "correct"); if (ret != (int32)strlen("correct") + 1) { fprintf(stderr, "Hwrite failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Create a new external object of size 2000 bytes in a separate file */ MESSAGE(5, printf("Creating an external element in file #2\n");); aid1 = HXcreate(fid, 1000, 4, "t2.hdf", (int32)0, (int32)0); CHECK_VOID(aid1, FAIL, "HXcreate"); MESSAGE(5, printf("Writing 2000 bytes to file #2\n");); ret = Hwrite(aid1, 2000, outbuf); CHECK_VOID(ret, FAIL, "Hwrite"); ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Create a new external string object in a separate file */ MESSAGE(5, printf("Creating an external element in file #3\n");); aid1 = HXcreate(fid, 1000, 2, "t3.hdf", (int32)0, (int32)0); CHECK_VOID(aid1, FAIL, "HXcreate"); MESSAGE(5, printf("Writing string '%s'(%lu bytes) to file #3\n", STRING, (unsigned long)strlen(STRING));); ret = Hwrite(aid1, (int32)strlen(STRING) + 1, STRING); if (ret != (int32)strlen(STRING) + 1) { fprintf(stderr, "Hwrite failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Create a new external object that points to part of an existing element */ MESSAGE(5, printf("Creating an overlapping element that already exists in file #3\n");); aid2 = HXcreate(fid, 1001, 2, "t3.hdf", (int32)8, (int32)4); CHECK_VOID(aid2, FAIL, "HXcreate"); ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Create a new external object of size 4096 bytes */ MESSAGE(5, printf("Creating an external element in file #4\n");); aid1 = HXcreate(fid, 1020, 2, "t4.hdf", (int32)0, (int32)0); CHECK_VOID(aid1, FAIL, "HXcreate"); MESSAGE(5, printf("Writing %d bytes to file #4\n", BUF_SIZE);); ret = Hwrite(aid1, BUF_SIZE, outbuf); if (ret != BUF_SIZE) { fprintf(stderr, "Hwrite failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* Now re-open for reading and verifying the elements */ MESSAGE(5, printf("Closing and re-opening base file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(ret, FAIL, "Hopen"); /* Verify element in file #1 */ aid1 = Hstartread(fid, 1000, 1); CHECK_VOID(aid1, FAIL, "Hstartread"); MESSAGE(5, printf("Inquiring about external element in file #1\n");); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); for (i = 0; i < BUF_SIZE; i++) inbuf[i] = '\0'; MESSAGE(5, printf("Reading external element in file #1\n");); ret = Hread(aid1, length, inbuf); if (ret != length) { fprintf(stderr, "Hread failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } MESSAGE(5, printf("Verifying data(%d bytes) in external element in file #1\n", (int)ret);); if (strcmp((const char *)inbuf, (const char *)STRING3)) { fprintf(stderr, "Error: Object stored in file #1 is wrong\n"); fprintf(stderr, "\t Is: %s\n", (char *)inbuf); fprintf(stderr, "\tShould be: %s\n", STRING3); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Verify element in file #2 */ aid1 = Hstartread(fid, 1000, 4); CHECK_VOID(aid1, FAIL, "Hstartread"); MESSAGE(5, printf("Inquiring about external element in file #2\n");); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); for (i = 0; i < BUF_SIZE; i++) inbuf[i] = 0; ret = Hgetelement(fid, (uint16)tag, (uint16)ref, inbuf); if (ret != length) { fprintf(stderr, "Incorrect element size returned from Hgetelement: %d\n", (int)ret); HEprint(stderr, 0); errors++; } MESSAGE(5, printf("Verifying data(%d bytes) that was stored to file #2\n", (int)ret);); errflag = 0; for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { errflag = 1; MESSAGE(8, printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]);); errors++; } inbuf[i] = '\0'; } if (errflag) fprintf(stderr, "Error: Wrong data in inbuf[] from external element in file #2\n"); ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Verify overlapping element in file #3 */ aid1 = Hstartread(fid, 1001, 2); CHECK_VOID(aid1, FAIL, "Hstartread"); MESSAGE(5, printf("Inquiring about overlapping external element in file #3\n");); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); for (i = 0; i < BUF_SIZE; i++) inbuf[i] = '\0'; ret = Hgetelement(fid, (uint16)tag, (uint16)ref, inbuf); if (ret != length) { fprintf(stderr, "Incorrect element size returned from Hgetelement: %d\n", (int)ret); HEprint(stderr, 0); errors++; } MESSAGE( 5, printf("Verifying data(%d bytes) that was stored in overlapping element in file #3\n", (int)ret);); if (inbuf[0] != '1' || inbuf[1] != '0' || inbuf[2] != '0' || inbuf[3] != '0') { fprintf(stderr, "Error: One or more errors in overlapping element in file #3\n"); fprintf(stderr, "\t is: %s\n", (char *)inbuf); fprintf(stderr, "\tShould be: %s\n", "1000"); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Verify the whole element in file #3 */ aid1 = Hstartread(fid, 1000, 2); CHECK_VOID(aid1, FAIL, "Hstartread"); MESSAGE(5, printf("Inquiring about external element in file #3\n");); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); for (i = 0; i < BUF_SIZE; i++) inbuf[i] = '\0'; MESSAGE(5, printf("Reading whole external element in file #3\n");); ret = Hread(aid1, length, inbuf); if (ret != length) { fprintf(stderr, "Hread failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } MESSAGE(5, printf("Verifying data(%d bytes) in whole external element in file #3\n", (int)ret);); if (strcmp((const char *)inbuf, (const char *)STRING)) { fprintf(stderr, "Error: Object stored in file #3 is wrong\n"); fprintf(stderr, "\t is: %s\n", (char *)inbuf); fprintf(stderr, "\tShould be: %s\n", STRING); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Verify element in file #4 */ aid1 = Hstartread(fid, 1020, 2); CHECK_VOID(aid1, FAIL, "Hstartread"); MESSAGE(5, printf("Inquiring about access element in file #4\n");); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); for (i = 0; i < BUF_SIZE; i++) inbuf[i] = 0; ret = Hread(aid1, length, inbuf); if (ret != length) { fprintf(stderr, "Incorrect element size returned from Hread: %d\n", (int)ret); HEprint(stderr, 0); errors++; } MESSAGE(5, printf("Verifying data(%d bytes) in external element in file #4\n", (int)ret);); errflag = 0; for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { errflag = 1; MESSAGE(8, printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]);); errors++; } inbuf[i] = '\0'; } if (errflag) fprintf(stderr, "Error: Wrong data in inbuf[] from external element in file #4\n"); ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Write to the first element in file #1 again */ MESSAGE(5, printf("Now writing again to external element in file #1\n");); aid2 = Hstartwrite(fid, 1000, 1, 4); CHECK_VOID(aid2, FAIL, "Hstartwrite"); ret = Hwrite(aid2, 4, "ABCD"); if (ret != 4) { fprintf(stderr, "Hwrite failed (code %d)\n", (int)ret); HEprint(stderr, 0); errors++; } ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); /* Second file open rest for reading */ fid1 = Hopen(TESTFILE_NAME, DFACC_READ, 0); CHECK_VOID(fid1, FAIL, "Hopen"); ret = (int32)Hnewref(fid1); CHECK_VOID(ret, FAIL, "Hnewref"); /* Close first open of file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* Close second open of file */ ret = Hclose(fid1); CHECK_VOID(ret, FAIL, "Hclose"); /*==============================*/ /* Test External Path functions */ /*==============================*/ MESSAGE(5, printf("testing External Path functions\n");); /* start with a brand new file */ MESSAGE(5, printf("Creating header file %s for external element \n", TESTFILE_NAME1);); fid = Hopen(TESTFILE_NAME1, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = HXsetcreatedir("testdir"); CHECK_VOID(ret, FAIL, "HXsetcreatedir"); MESSAGE(5, printf("Creating an external element in file testdir/t5.hdf\n");); aid1 = HXcreate(fid, 1000, 5, "t5.hdf", (int32)0, (int32)0); CHECK_VOID(aid1, FAIL, "HXcreate"); MESSAGE(5, printf("Writing 2000 bytes to file t5.hdf\n");); ret = Hwrite(aid1, 2000, outbuf); CHECK_VOID(ret, FAIL, "Hwrite"); MESSAGE(5, printf("Ending access to element and closing header file %s\n", TESTFILE_NAME1);); ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Re-open file and try read to external element. Should fail the first time.\n");); fid = Hopen(TESTFILE_NAME1, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = Hgetelement(fid, (uint16)1000, (uint16)5, inbuf); VERIFY_VOID(ret, FAIL, "Hgetelement"); ret = HXsetdir("nosuchdir|testdir"); CHECK_VOID(ret, FAIL, "HXsetdir"); MESSAGE(5, printf("Try read it again. Should not fail this time.\n");); ret = Hgetelement(fid, (uint16)1000, (uint16)5, inbuf); CHECK_VOID(ret, FAIL, "Hgetelement"); errflag = 0; for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) { errflag = 1; MESSAGE(8, printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]);); errors++; } inbuf[i] = '\0'; } if (errflag) fprintf(stderr, "Error: Wrong data in inbuf[] from external element in file #5\n"); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); /* unset the external paths directory variables */ ret = HXsetcreatedir(NULL); CHECK_VOID(ret, FAIL, "HXsetcreatedir"); ret = HXsetdir(NULL); CHECK_VOID(ret, FAIL, "HXsetdir"); free(outbuf); free(inbuf); num_errs += errors; /* increment global error count */ } hdf4-hdf4.3.1/hdf/test/file.c000066400000000000000000000161761503061704500156450ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Hopen ** Create a file. ** Open an existing file. *** Normally. *** Read-only file with DFACC_WRITE. ** Open non-existent file. *** With DFACC_READ. *** With DFACC_WRITE. ** Create an illegal file. ** Open the same file twice. *** First with DFACC_WRITE then with DFACC_READ. *** First with DFACC_WRITE then with DFACC_WRITE. *** First with DFACC_READ and then with DFACC_WRITE. *** First with DFACC_ and then with DFACC_CREATE. ** Open more files than there is slots. * Hclose ** Close a proper file. ** Close with an illegal file id. *** Random file id. *** Correct tag but bad slot. * Hstartread ** Normal. ** With illegal file id. ** With illegal tag/ref. ** With wildcard. ** Open more access elements than there is space. */ #include "tproto.h" #define TESTFILE_NAME "t.hdf" #define BUF_SIZE 4096 static uint8 *outbuf = NULL; static uint8 *inbuf = NULL; void test_hfile(void) { int32 fid, fid1; int32 aid1, aid2; int32 fileid, length, offset, posn; uint16 tag, ref; int16 acc_mode, special; int32 ret; int i; intn errors = 0; intn ret_bool; outbuf = (uint8 *)calloc(BUF_SIZE, sizeof(uint8)); inbuf = (uint8 *)calloc(BUF_SIZE, sizeof(uint8)); CHECK_ALLOC(outbuf, "outbuf", "test_hfile"); CHECK_ALLOC(inbuf, "outbuf", "test_hfile"); for (i = 0; i < BUF_SIZE; i++) outbuf[i] = (char)(i % 256); MESSAGE(5, printf("Creating a file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret_bool = (intn)Hishdf(TESTFILE_NAME); CHECK_VOID(ret_bool, FALSE, "Hishdf"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); MESSAGE(5, printf("Reading / Writing to file\n");); ret = Hputelement(fid, (uint16)100, 1, (const uint8 *)"testing 100 1", (int32)strlen("testing 100 1") + 1); CHECK_VOID(ret, FAIL, "Hputelement"); ret = Hputelement(fid, (uint16)100, (uint16)4, outbuf, 2000); CHECK_VOID(ret, FAIL, "Hputelement"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); ret = Hputelement(fid, (uint16)103, (uint16)2, (const uint8 *)"element 103 2", (int32)strlen("element 103 2") + 1); CHECK_VOID(ret, FAIL, "Hputlement"); ret = Hgetelement(fid, (uint16)100, (uint16)4, inbuf); if (ret != 2000) { fprintf(stderr, "Line %d: Hgetelement returned wrong count: %d\n", (int)__LINE__, (int)ret); errors++; } for (i = 0; i < ret; i++) { if (inbuf[i] != outbuf[i]) printf("Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); inbuf[i] = '\0'; } ret = Hputelement(fid, 102, 2, outbuf, BUF_SIZE); CHECK_VOID(ret, FAIL, "Hputlement"); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(5, printf("Closing and re-opening file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); aid1 = Hstartread(fid, 100, 1); CHECK_VOID(aid1, FAIL, "Hstartread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); MESSAGE(5, printf("Verifying data\n\n");); ret = Hread(aid1, length, inbuf); if (ret != 14) { fprintf(stderr, "ERROR: Hread returned the wrong length: %d\n", (int)ret); errors++; } if (strcmp((const char *)inbuf, (const char *)"testing 100 1")) { fprintf(stderr, "ERROR: Hread returned the wrong data\n"); fprintf(stderr, "\t Is: %s\n", (char *)inbuf); fprintf(stderr, "\tShould be: testing 100 1\n"); errors++; } ret = (int32)Hnewref(fid); CHECK_VOID(ret, FAIL, "Hnewref"); MESSAGE(5, printf("Testing a number of searching schemes\n");); ret = Hnextread(aid1, 100, DFREF_WILDCARD, DF_CURRENT); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); ret = Hnextread(aid1, 100, DFREF_WILDCARD, DF_CURRENT); if (ret != FAIL) { fprintf(stderr, "ERROR: Found a non-existent element at line %d\n", __LINE__); errors++; } ret = Hnextread(aid1, DFTAG_WILDCARD, DFREF_WILDCARD, DF_START); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); ret = Hnextread(aid1, DFTAG_WILDCARD, 3, DF_CURRENT); if (ret != FAIL) { fprintf(stderr, "ERROR: Found a non-existent element at line %d\n", __LINE__); errors++; } ret = Hnextread(aid1, DFTAG_WILDCARD, 2, DF_CURRENT); CHECK_VOID(ret, FAIL, "Hnextread"); ret = Hinquire(aid1, &fileid, &tag, &ref, &length, &offset, &posn, &acc_mode, &special); CHECK_VOID(ret, FAIL, "Hinquire"); aid2 = Hstartwrite(fid, 100, 1, 4); if (aid2 == FAIL) { fprintf(stderr, "ERROR: was not allowed to startwrite on existing object\n"); errors++; } ret = Hwrite(aid1, 4, "ABCD"); if (ret != FAIL) { fprintf(stderr, "ERROR: was allowed to write to read access object\n"); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Attempting to gain multiple access to file (is allowed)\n");); fid1 = Hopen(TESTFILE_NAME, DFACC_READ, 0); if (fid1 == FAIL) { fprintf(stderr, "ERROR: Failed to have two concurrent access to file\n"); errors++; } ret = (int32)Hnewref(fid1); CHECK_VOID(ret, FAIL, "Hnewref"); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); ret = Hclose(fid1); CHECK_VOID(ret, FAIL, "Hclose"); ret_bool = (intn)Hishdf(TESTFILE_NAME); CHECK_VOID(ret_bool, FALSE, "Hishdf"); ret_bool = (intn)Hishdf(__FILE__); CHECK_VOID(ret_bool, TRUE, "Hishdf"); ret_bool = (intn)Hishdf("qqqqqqqq.qqq"); /* I sure hope it isn't there */ CHECK_VOID(ret, TRUE, "Hishdf"); free(outbuf); free(inbuf); } hdf4-hdf4.3.1/hdf/test/file1.c000066400000000000000000000177551503061704500157320ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* test opening files and access elements until limits are reached */ #include "tproto.h" #include "hfile_priv.h" /* This value can cause platform-specific problems as the number of files * that can be open at one time via fopen() is often capped by the OS. * * The current value doesn't seem to cause problems on any platform. */ #define BIG 127 #define TESTFILE_NAME "thf" #define TESTREF_NAME "tref.hdf" #define MAX_REF_TESTED MAX_REF static int32 files[BIG]; static int32 accs[BIG]; static void test_file_limits(void); static void test_ref_limits(void); static void test_file_limits(void) { int i; int32 ret; #ifdef H4_HAVE_WIN32_API /* Windows can only have 512 stdio files open by default, so we need * to bump this to handle large values for BIG files open at once. * * Technically no longer necessary since BIG was adjusted to < 512, but * worth keeping around in case we need to set this in the future. */ ret = _setmaxstdio(1024); CHECK_VOID(ret, FAIL, "_setmaxstdio"); #endif MESSAGE(5, puts("Opening many files of same name");); for (i = 0; i < BIG; i++) { files[i] = Hopen("thf.hdf", DFACC_RDWR, 0); CHECK_VOID(files[i], FAIL, "Hopen"); if (files[i] < 0) { break; } } MESSAGE(5, printf("Opening stopped at %d/%d files\n", i, BIG);); MESSAGE(5, puts("Closing all files");); for (i--; i >= 0; i--) { ret = Hclose(files[i]); CHECK_VOID(ret, FAIL, "Hclose"); if (ret < 0) printf("Error closing file %d\n", i); } MESSAGE(5, puts("Closed files");); MESSAGE(5, puts("Opening many files of different names");); for (i = 0; i < BIG; i++) { char fname[100]; sprintf(fname, "%s%1d.hdf", TESTFILE_NAME, i); files[i] = Hopen(fname, DFACC_ALL, 0); CHECK_VOID(files[i], FAIL, "Hopen"); if (files[i] < 0) { break; } } MESSAGE(5, printf("Opening stopped at %d/%d files\n", i, BIG);); MESSAGE(5, puts("Closing all files except first open");); for (i--; i > 0; i--) { ret = Hclose(files[i]); CHECK_VOID(ret, FAIL, "Hclose"); if (ret < 0) printf("Error closing file %d\n", i); } MESSAGE(5, puts("Closed files");); MESSAGE(5, puts("Opening write access elements");); for (i = 0; i < BIG; i++) { accs[i] = Hstartwrite(files[0], (uint16)100, (uint16)(i + 1), 100L); CHECK_VOID(accs[i], FAIL, "Hstartwrite"); if (accs[i] < 0) break; } MESSAGE(5, printf("Opening stopped at %d element\n", i);); MESSAGE(5, puts("Closing access elements");); for (i--; i >= 0; i--) { ret = Hendaccess(accs[i]); CHECK_VOID(ret, FAIL, "Hendaccess"); if (ret < 0) printf("Error ending access %d\n", i); } MESSAGE(5, puts("Ended access");); ret = Hclose(files[0]); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_file_limits() */ #define TAG1 ((uint16)1000) #define TAG2 ((uint16)1001) static void test_ref_limits(void) { int32 i; /* local counting variable */ int32 fid; /* file ID */ int32 iloop; MESSAGE(6, printf("Testing reference # limits\n");); MESSAGE(7, printf("Writing out data\n");); /* Write out MAX_REF number of data items for each tag */ fid = Hopen(TESTREF_NAME, DFACC_CREATE, 512); CHECK_VOID(fid, FAIL, "Hopen"); if (fid != FAIL) { iloop = MAX_REF_TESTED; for (i = 1; i <= (iloop / 2) + 5; i++) { int32 aid; uint16 ref; int32 data; int32 ret; /* Write out data to tag1 */ ref = Htagnewref(fid, TAG1); CHECK_VOID(ref, 0, "Htagnewref"); aid = Hstartwrite(fid, TAG1, ref, sizeof(int32)); CHECK_VOID(aid, FAIL, "Hstartwrite"); data = (int32)ref; ret = Hwrite(aid, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hwrite"); ret = Hendaccess(aid); CHECK_VOID(ret, FAIL, "Hendaccess"); /* lets be a little smatter here */ if (ret == FAIL) break; /* Write out data to tag2 */ ref = Htagnewref(fid, TAG2); CHECK_VOID(ref, 0, "Htagnewref"); aid = Hstartwrite(fid, TAG2, ref, sizeof(int32)); CHECK_VOID(aid, FAIL, "Hstartwrite"); data = ref << 16; ret = Hwrite(aid, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hwrite"); ret = Hendaccess(aid); CHECK_VOID(ret, FAIL, "Hendaccess"); /* lets be a little smatter here */ if (ret == FAIL) break; } /* end for */ Hclose(fid); MESSAGE(7, printf("Verifying data\n");); /* Check the data written earlier */ fid = Hopen(TESTREF_NAME, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); if (fid != FAIL) { uint16 ref; int32 aid1, aid2; int32 data; int32 ret; /* Read in data from tag1 */ aid1 = Hstartread(fid, TAG1, DFREF_WILDCARD); CHECK_VOID(aid1, FAIL, "Hstartread"); ret = Hread(aid1, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hread"); ret = Hinquire(aid1, NULL, NULL, &ref, NULL, NULL, NULL, NULL, NULL); CHECK_VOID(ret, FAIL, "Hinquire"); VERIFY_VOID((uint16)data, ref, "Hread"); /* Read in data from tag2 */ aid2 = Hstartread(fid, TAG2, DFREF_WILDCARD); CHECK_VOID(aid2, FAIL, "Hstartread"); ret = Hread(aid2, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hread"); ret = Hinquire(aid2, NULL, NULL, &ref, NULL, NULL, NULL, NULL, NULL); CHECK_VOID(ret, FAIL, "Hinquire"); VERIFY_VOID((uint32)data, (((uint32)ref) << 16), "Hread"); while (Hnextread(aid1, TAG1, DFTAG_WILDCARD, DF_CURRENT) != FAIL) { ret = Hread(aid1, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hread"); ret = Hinquire(aid1, NULL, NULL, &ref, NULL, NULL, NULL, NULL, NULL); CHECK_VOID(ret, FAIL, "Hinquire"); VERIFY_VOID((uint16)data, ref, "Hread"); if (Hnextread(aid2, TAG2, DFTAG_WILDCARD, DF_CURRENT) != FAIL) { ret = Hread(aid2, sizeof(int32), &data); CHECK_VOID(ret, FAIL, "Hread"); ret = Hinquire(aid2, NULL, NULL, &ref, NULL, NULL, NULL, NULL, NULL); CHECK_VOID(ret, FAIL, "Hinquire"); VERIFY_VOID((uint32)data, (((uint32)ref) << 16), "Hread"); } /* end while */ } /* end while */ ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); ret = Hendaccess(aid2); CHECK_VOID(ret, FAIL, "Hendaccess"); Hclose(fid); } /* end if */ } /* end if */ } /* end test_ref_limits() */ void test_hfile1(void) { test_file_limits(); test_ref_limits(); } hdf4-hdf4.3.1/hdf/test/forsupf.c000066400000000000000000000071511503061704500164030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "fortest.h" /*----------------------------------------------------------------------------- * Name: getverb * Purpose: Get the verbosity from the "HDF_VERBOSITY" environment variable * and return it to the FORTRAN calling routine. * Inputs: NONE * Returns: verbosity level on success, FAIL on failure * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf ngetverb(void) { char *verb_str; intn verb_level = FAIL; verb_str = getenv(FOR_VERB); if (verb_str != NULL) verb_level = (intn)strtol(verb_str, NULL, 0); /* convert whole string using base 10 */ return (intf)verb_level; } /* end getverb() */ /*----------------------------------------------------------------------------- * Name: hisystem * Purpose: Invoke the system call to execute cmd * Inputs: cmd -- the command to execute * cmdlen -- command length * Returns: Code returned by the system call * Users: HDF Fortran programmers * Invokes: system *---------------------------------------------------------------------------*/ intf nhisystem(_fcd cmd, intf *cmdlen) { char *fn; intf ret; fn = HDf2cstring(cmd, (intn)*cmdlen); if (!fn) return FAIL; ret = (intf)system(fn); free(fn); return ret; } /* end nhisystem() */ /*----------------------------------------------------------------------------- * Name: fixname * Purpose: Fix name for srcdir build and test * Inputs: IN: name - original namea * IN: name_len - name length * IN/OUT: name_out - buffer to hold modified name * IN/OUT: name_out_len - length of the buffer, and length of modified * string. * Returns: 0 on success and -1 on failure * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nfixnamec(_fcd name, intf *name_len, _fcd name_out, intf *name_len_out) { char *c_name; intf ret; char testfile[1024] = ""; char *srcdir = getenv("srcdir"); c_name = HDf2cstring(name, (intn)*name_len); if (!c_name) return FAIL; /* Here comes Bill's code */ /* Generate the correct name for the test file, by prepending the source path */ if (srcdir && ((strlen(srcdir) + strlen(c_name) + 1) < sizeof(testfile))) { strcpy(testfile, srcdir); strcat(testfile, "/"); } strcat(testfile, c_name); *name_len_out = (intf)strlen(testfile); HDpackFstring(testfile, _fcdtocp(name_out), *name_len_out); ret = 0; free(c_name); return ret; } /* end nfixname() */ hdf4-hdf4.3.1/hdf/test/forsupff.f000066400000000000000000000216401503061704500165530ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C------------------------------------------------------------------------------ C File: forsupff.f C Purpose: Fortran support routines for Fortran test routines C Invokes: Nothing currently... C Contents: C Remarks: none C------------------------------------------------------------------------------ C------------------------------------------------------------------------------ C Name: RESULT C Purpose: Report on success of HDF routines C Inputs: C errval: value to check for error C routine: name of routine tested C num_failed: running sum of the number of failures C Returns: none C Users: HDF Fortran programmers C Invokes: none C------------------------------------------------------------------------------ subroutine RESULT(errval, routine, num_failed) implicit none include 'fortest.inc' integer errval character*(*) routine integer num_failed if (errval .eq. FAIL) then num_failed = num_failed + 1 print *, ' >>> ', routine, ' FAILED: ret = ', * errval, ' <<<' else print *, routine, ' SUCCESSFUL' endif return end C------------------------------------------------------------------------------ C Name: VRFY C Purpose: Report on success of HDF routines, using verbosity C Inputs: C errval: value to check for error C routine: name of routine tested C num_failed: running sum of the number of failures C Returns: none C Users: HDF Fortran programmers C Invokes: none C------------------------------------------------------------------------------ subroutine VRFY(errval, routine, num_failed) implicit none include 'fortest.inc' integer errval character*(*) routine integer num_failed if (errval .eq. FAIL) then num_failed = num_failed + 1 print *, ' >>> ', routine, ' FAILED: ret = ', * errval, ' <<<' else if (verbosity .ge. VERBO_HI) then print *, routine, ' SUCCESSFUL' endif endif return end C------------------------------------------------------------------------------ C Name: MESSAGE C Purpose: Print something, depending on the verbosity level C Inputs: C priority: priority of message (lower values have higher priority) C out_str: string to output C Returns: none C Users: HDF Fortran programmers C Invokes: none C------------------------------------------------------------------------------ subroutine MESSAGE(priority, out_str) implicit none include 'fortest.inc' integer priority character*(*) out_str if (priority .le. Verbosity) then print *, out_str endif return end C*************************************************************** C C gen2Dfloat: generate 2-D data array C C*************************************************************** subroutine gen2Dfloat(height, width, data) implicit none include 'fortest.inc' integer height, width real data(height,width) integer i, j C store one value per row, increasing by one for each row do 110 i=1, height do 100 j=1, width data(i, j) = float(i) 100 continue 110 continue return end C*************************************************************** C C genimage: generate image from 2-D float array C C*************************************************************** subroutine genimage(height, width, data, image) implicit none include 'fortest.inc' integer height, width real data(height, width) character image(height, width) integer i, j real max, min, multiplier max = data(1,1) min = data(1,1) do 110 i=1, height do 100 j=1, width if (max .gt. data(i,j)) max = data(i,j) if (min .lt. data(i,j)) min = data(i,j) 100 continue 110 continue C store one value per row, increasing by one for each row multiplier = 255.0 /(max-min) do 210 i=1, height do 200 j=1, width image(i,j) = char( int((data(i,j)-min) * multiplier) ) 200 continue 210 continue return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE errchkio C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine errchkio(err1, err2, err3, num_err, msg) implicit none include 'fortest.inc' integer err1, err2, err3, num_err character*(*) msg if (err1.eq.FAIL .or. err2.eq.FAIL .or. err3.eq.FAIL) then num_err = num_err + 1 print * print *,'>>> Test failed for ',msg, ' <<<' print *, ' err1=',err1, ' err2=',err2, ' err3=',err3 else if (verbosity .ge. VERBO_HI) then print *,'Test passed for ', msg endif endif return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE errchkarr C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine errchkarr(err1, err2, err3, num_err, type) implicit none include 'fortest.inc' integer err1, err2, err3, num_err character*(*) type if (err1 .eq. 1) then print *, '>>> Test failed for ', type, ' array' num_err = num_err + 1 else if (verbosity .ge. VERBO_HI) then print *, 'Test passed for ', type, ' array' endif endif if (err2 .eq. 1) then print *, '>>> Test failed for ',type, ' scales.' num_err = num_err + 1 else if (verbosity .ge. VERBO_HI) then print *, 'Test passed for ', type, ' scales.' endif endif if (err3 .eq. 1) then print *, '>>> Test failed for ', type, ' max/min.' num_err = num_err + 1 else if (verbosity .ge. VERBO_HI) then print *, 'Test passed for ', type, ' max/min.' endif endif return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE err_check C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine err_check(err, num_err, type) implicit none include 'fortest.inc' integer err, num_err character*(*) type if (err .eq. 1) then print *,'>>> Test failed for ',type, ' array.' num_err = num_err+1 else if (verbosity .ge. VERBO_HI) then print *,'Test passed for ', type, ' array.' endif endif return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE ptestban C Print the Test banner C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine ptestban(action, name) implicit none include 'fortest.inc' character*(*) action, name if (Verbosity .ge. VERBO_DEF) then call MESSAGE(VERBO_LO, + '=====================================') print *, action, ' -- ', name call MESSAGE(VERBO_LO, + '=====================================') endif return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE hsystem(cmd) C Invoke the unix system() function C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine hsystem(cmd) implicit none character*(*) cmd integer retcode, hisystem retcode = hisystem(cmd, len(cmd)) return end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SUBROUTINE fixname(name, name_out, name_out_len) C Takes care of srcdir build C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC subroutine fixname(name, name_out, name_out_len) implicit none character*(*) name character*(*) name_out integer retcode, fixnamec, name_out_len retcode = fixnamec(name, len(name), name_out, name_out_len) return end hdf4-hdf4.3.1/hdf/test/fortest.c000066400000000000000000000177341503061704500164150ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #define TESTMASTER #include "hdf.h" #include "tutils.h" #include "fortest.h" #define NUMOFTESTS 20 static int InitTest(const char *TheName, const char *TheCall, const char *TheDescr); struct TestStruct { int NumErrors; char Description[64]; int SkipFlag; char Name[16]; char Call[20]; } Test[NUMOFTESTS]; static int InitTest(const char *TheName, const char *TheCall, const char *TheDescr) { static int Index = 0; if (Index >= NUMOFTESTS) { printf("*** Too many tests. Need to increase NUMOFTESTS (%d).\n", NUMOFTESTS); printf("\tRequest (%s) ignored.\n", TheName); } else { strcpy(Test[Index].Description, TheDescr); strcpy(Test[Index].Name, TheName); strcpy(Test[Index].Call, TheCall); Test[Index].NumErrors = -1; Test[Index].SkipFlag = 0; Index++; } return Index; } int main(int argc, char *argv[]) { int CLLoop; /* Command Line Loop */ int Loop, Loop1; int Summary = 0; int CleanUp = 1; int num_tests = 0; FILE *cmdfile; const char *cmdfilename = "fortest.arg"; printf(" ===========================================\n"); printf(" HDF Library Fortran Interface Tests Setup\n"); printf(" ===========================================\n"); num_tests = InitTest("slab", "slabwf", ""); num_tests = InitTest("r24", "t24f", ""); num_tests = InitTest("an", "tanf", ""); num_tests = InitTest("anfile", "tanfilef", ""); num_tests = InitTest("manf", "manf", ""); num_tests = InitTest("mgrf", "mgrf", ""); num_tests = InitTest("p", "tpf", ""); num_tests = InitTest("r8", "tr8f", ""); num_tests = InitTest("sdmms", "tsdmmsf", ""); num_tests = InitTest("sdnmms", "tsdnmmsf", ""); num_tests = InitTest("sdnnt", "tsdnntf", ""); num_tests = InitTest("sdnt", "tsdntf", ""); num_tests = InitTest("sdstr", "tsdstrf", ""); num_tests = InitTest("vsetf", "tvsetf", ""); num_tests = InitTest("vsetblock", "tvsetblock", ""); num_tests = InitTest("vgroups", "tvgroups", ""); num_tests = InitTest("vattrf", "tvattrf", ""); /* The test is skipped when size of fortran integer is smaller than the size of C pointer; this happens on all 64-bit platforms. We need a better fix; see HDFFR-191. */ #if defined(_WIN64) || defined(H4_HAVE_LP64) printf(" Skipping stubs\n"); #else num_tests = InitTest("stubs", "tstubsf", ""); #endif if ((cmdfile = fopen(cmdfilename, "w")) == NULL) { printf("***Can't write to cmdfile(%s)***\n", cmdfilename); return -1; } /* Default setting */ Verbosity = 3; /* Default Verbosity is Low */ /* setup Cleanup Command */ fprintf(cmdfile, "%s %s\n", CLEAN_STR, CLEAN_CMD); for (CLLoop = 1; CLLoop < argc; CLLoop++) { if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-verbose") == 0) || (strcmp(argv[CLLoop], "-v") == 0))) { if (argv[CLLoop + 1][0] == 'l') Verbosity = 5; else if (argv[CLLoop + 1][0] == 'm') Verbosity = 7; else if (argv[CLLoop + 1][0] == 'h') Verbosity = 9; else Verbosity = atoi(argv[CLLoop + 1]); fprintf(cmdfile, "%s %d\n", VERBOSITY_STR, Verbosity); } if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-summary") == 0) || (strcmp(argv[CLLoop], "-s") == 0))) { Summary = 1; } if ((argc > CLLoop) && (strcmp(argv[CLLoop], "-help") == 0)) { printf("Usage: fortest [-v[erbose] (l[ow]|m[edium]|h[igh]|0-9)] \n"); printf(" [-[e]x[clude] name+] \n"); printf(" [-o[nly] name+] \n"); printf(" [-b[egin] name] \n"); printf(" [-s[ummary]] \n"); printf(" [-c[leanno]] \n"); printf("\n\n"); printf("verbose controls the amount of information displayed\n"); printf("exclude to exclude tests by name\n"); printf("only to name tests which should be run\n"); printf("begin start at the name of the test given\n"); printf("summary prints a summary of test results at the end\n"); printf("cleanno does not delete *.hdf files after execution of tests\n"); printf("\n\n"); printf("This program currently tests the following: \n\n"); printf("%16s %s\n", "Name", "Description"); printf("%16s %s\n", "----", "-----------"); for (Loop = 0; Loop < num_tests; Loop++) { printf("%16s %s\n", Test[Loop].Name, Test[Loop].Description); } printf("\n\n"); exit(0); } if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-cleanno") == 0) || (strcmp(argv[CLLoop], "-c") == 0))) { CleanUp = 0; fprintf(cmdfile, "%s %s\n", CLEAN_STR, "No"); } if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-exclude") == 0) || (strcmp(argv[CLLoop], "-x") == 0))) { Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < num_tests; Loop1++) { if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Test[Loop1].SkipFlag = 1; } Loop++; } } if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-begin") == 0) || (strcmp(argv[CLLoop], "-b") == 0))) { Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < num_tests; Loop1++) { if (strcmp(argv[Loop], Test[Loop1].Name) != 0) Test[Loop1].SkipFlag = 1; if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Loop1 = num_tests; } Loop++; } } if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-only") == 0) || (strcmp(argv[CLLoop], "-o") == 0))) { for (Loop = 0; Loop < num_tests; Loop++) { Test[Loop].SkipFlag = 1; } Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < num_tests; Loop1++) { if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Test[Loop1].SkipFlag = 0; } Loop++; } } } for (Loop = 0; Loop < num_tests; Loop++) { if (Test[Loop].SkipFlag) { fprintf(cmdfile, "%s %s\n", SKIP_STR, Test[Loop].Name); } else { fprintf(cmdfile, "%s %s\n", TEST_STR, Test[Loop].Name); } } fclose(cmdfile); /* flush stdout to guarantee output precedes that of fortestF */ fflush(stdout); #ifndef CMAKE_INTDIR /* not built with cmake */ return system("./fortestF"); #else return 0; /*(system("./fortestF"));*/ #endif } hdf4-hdf4.3.1/hdf/test/fortest.h000066400000000000000000000027601503061704500164130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_FORTEST_H #define H4_FORTEST_H #include "H4api_adpt.h" #include "hdf.h" /* Verbosity Environment Variable */ #define FOR_VERB "HDF_FOR_VERBOSITY" #define ngetverb H4_F77_FUNC(getverb, GETVERB) #define nhisystem H4_F77_FUNC(hisystem, HISYSTEM) #define nfixnamec H4_F77_FUNC(fixnamec, FIXNAMEC) /* FORTRAN support C-stubs for FORTRAN interface tests */ HDFFCLIBAPI intf ngetverb(void); HDFFCLIBAPI intf nhisystem(_fcd cmd, intf *cmdlen); HDFFCLIBAPI intf nfixnamec(_fcd name, intf *name_len, _fcd name_out, intf *name_len_out); #endif /* H4_FORTEST_H */ hdf4-hdf4.3.1/hdf/test/fortest.inc000066400000000000000000000025511503061704500167330ustar00rootroot00000000000000 include 'hdf.inc' include 'dffunc.inc' C Common block definition to be included by fortestF.f modules. If your C fortran compile cannot do include, you need to replace each include C statement with this file. common CleanUp, Verbosity, CleanUpCMD logical CleanUp character*80 CleanUpCMD integer Verbosity C C Predefined verbosity levels. C C Convention: C C The higher the verbosity value, the more information printed. C So, output for higher verbosity also include output of all lower C verbosity. C C Value Description C 0 None:No informational message. C 1 "All tests passed" C 2 Header of overall test C 3 Default: header and results of individual test C 4 C 5 Low:Major category of tests. C 6 C 7 Medium: Minor category of tests such as functions called. C 8 C 9High: Highest level. All information. integer VERBO_NONE, VERBO_DEF, VERBO_LO, VERBO_MED, VERBO_HI parameter ( + VERBO_NONE = 0, + VERBO_DEF = 3, + VERBO_LO = 5, + VERBO_MED = 7, + VERBO_HI = 9 +) integer FALSE, TRUE parameter ( + FALSE = 0, + TRUE = 1 +) C Tests command file parameters. C cmdf: file unit number integer cmdf character*30 cmdfilename parameter (cmdf = 1) parameter (cmdfilename = 'fortest.arg') hdf4-hdf4.3.1/hdf/test/fortest.sav000066400000000000000000000362611503061704500167600ustar00rootroot00000000000000 \n Writing the first 3 of 5 slabs to slab1wf.hdf >>> All tests passed for slab1wf, run slab2wf <<< \n Writing the last 2 of 5 slabs to slab1wf.hdf Verifying data >>> All tests passed <<< \n Writing all 24 elements of data as slabs to slab3wf.hdf Verifying data >>> All tests passed <<< \n Writing data as 1 slab to slab4wf.hdf Verifying data >>> All tests passed <<< \n \n Writing data as 5 slabs to slabwf.hdf Verifying data >>> All tests passed <<< \n Setting il to 0 d2setil SUCCESSFUL Putting buffer 1 d2pimg SUCCESSFUL Setting il to 1 d2setil SUCCESSFUL Adding buf1 d2aimg SUCCESSFUL Setting il to 2 d2setil SUCCESSFUL Adding buf2 d2aimg SUCCESSFUL Restarting file d2first SUCCESSFUL Req il 0 d2reqil SUCCESSFUL Getting dims d2gdims SUCCESSFUL d1: 2 d2: 2 il: 0 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 1 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 2 Getting image d2gimg SUCCESSFUL Restarting file d2first SUCCESSFUL Req il 1 d2reqil SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 0 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 1 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 2 Getting image d2gimg SUCCESSFUL Restarting file d2first SUCCESSFUL Req il 2 d2reqil SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 0 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 1 Getting image d2gimg SUCCESSFUL Getting dimensions d2gdims SUCCESSFUL d1: 2 d2: 2 il: 2 Getting image d2gimg SUCCESSFUL ****** ALL TESTS SUCCESSFUL ****** dssdims SUCCESSFUL *** Writing labels & descriptions with SDS and RIS *** dsadata SUCCESSFUL daplab SUCCESSFUL dapdesc SUCCESSFUL d8aimg SUCCESSFUL daplab SUCCESSFUL dapdesc SUCCESSFUL dsadata SUCCESSFUL daplab SUCCESSFUL dapdesc SUCCESSFUL d8aimg SUCCESSFUL daplab SUCCESSFUL dapdesc SUCCESSFUL *** Reading labels and descriptions for SDS and RIS *** dsgdims SUCCESSFUL dagllen SUCCESSFUL daglab SUCCESSFUL dagdlen SUCCESSFUL dagdesc SUCCESSFUL d8gimg SUCCESSFUL dagllen SUCCESSFUL daglab SUCCESSFUL dagdlen SUCCESSFUL dagdesc SUCCESSFUL dsgdims SUCCESSFUL dagllen SUCCESSFUL daglab SUCCESSFUL dagdlen SUCCESSFUL dagdesc SUCCESSFUL d8gimg SUCCESSFUL dagllen SUCCESSFUL daglab SUCCESSFUL dagdlen SUCCESSFUL dagdesc SUCCESSFUL ***** ALL TESTS SUCCESSFUL ***** ****** Write file labels ******* hopen SUCCESSFUL daafid SUCCESSFUL daafid SUCCESSFUL ****** Write file descriptions ******* daafds SUCCESSFUL daafds SUCCESSFUL hclose SUCCESSFUL ****** Read length of the first file label **** hopen-read SUCCESSFUL dagfidl SUCCESSFUL ******...followed by the label ***** dagfid SUCCESSFUL ****** Read length of the second file label **** dagfidl SUCCESSFUL ******...followed by the label ***** dagfid SUCCESSFUL ****** Read length of the first file description **** dagfdsl SUCCESSFUL ******...followed by the description ***** dagfds SUCCESSFUL ****** Read length of the second file description **** dagfdsl SUCCESSFUL ******...followed by the description ***** dagfds SUCCESSFUL hclose SUCCESSFUL ***** ALL TESTS SUCCESSFUL ****** dssdims SUCCESSFUL afstart SUCCESSFUL affcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL affcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL affcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL affcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL *** Writing labels & descriptions with SDS and RIS *** dsadata SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL d8aimg SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL dsadata SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL d8aimg SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afcreate SUCCESSFUL afwriteann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL *** Reading labels and descriptions for SDS and RIS *** dsgdims SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL d8gimg SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL dsgdims SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL d8gimg SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afnumann SUCCESSFUL afnumann SUCCESSFUL afannlist SUCCESSFUL afannlist SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL *** Reading file labels and descriptions *** afstart SUCCESSFUL affileinfo SUCCESSFUL afselect SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afselect SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL afstart SUCCESSFUL affileinfo SUCCESSFUL afselect SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afselect SUCCESSFUL afannlen SUCCESSFUL afreadann SUCCESSFUL afendaccess SUCCESSFUL afend SUCCESSFUL ***** ALL TESTS SUCCESSFUL ***** Putting pal1 in new file. dpppal SUCCESSFUL Getting ref1 ref1 is 2 Putting pal2 in file dpapal SUCCESSFUL Getting ref2 ref2 is 3 Restarting palette interface dprest SUCCESSFUL Reading pal1 dpgpal SUCCESSFUL Getting ref1 Last ref is 2 Reading pal2. dpgpal SUCCESSFUL Getting ref2 Last ref is 3 Getting number of palettes dpnpals SUCCESSFUL Number of palettes is: 2 Setting read ref to ref2. dprref SUCCESSFUL Reading pal2 dpgpal SUCCESSFUL Setting read ref to ref1. ref1 is: 2 ref2 is: 3 dprref SUCCESSFUL Reading pal1 dpgpal SUCCESSFUL Modifying pal1 Setting write ref to ref1 dpwref SUCCESSFUL Writing pal1 dpppal SUCCESSFUL last ref is: 2 setting read ref to ref1 dprref SUCCESSFUL Reading pal1 dpgpal SUCCESSFUL ***** ALL TESTS SUCCESSFUL ***** Setting palette 1 d8spal SUCCESSFUL Putting image 1 with pal 1, no compression d8pimg SUCCESSFUL Getting ref1 ref1 is 2 Putting image 2 with pal 1, REL compression d8aimg SUCCESSFUL Getting ref2 ref2 is 3 Setting palette 2 d8spal SUCCESSFUL Putting image 2 with pal 2, IMCOMP compression d8aimg SUCCESSFUL Getting ref3 ref3 is 4 Getting number of images 3 images in the file Restarting file d8first SUCCESSFUL Getting dimensions of first image d8gdims SUCCESSFUL Getting image 1 d8gimg SUCCESSFUL Checking image and palette Image is correct Palette is correct Getting dimensions of image2 d8gdims SUCCESSFUL d1= 321 d2= 111 ispal= 1 Getting dimensions of image 3 d8gdims SUCCESSFUL d1= 321 d2= 111 ispal= 1 Getting image 3 d8gimg SUCCESSFUL setting read ref2 d8rref SUCCESSFUL Getting image 2 d8gimg SUCCESSFUL Checking image and palette Image is correct Palette is correct Setting write ref1 d8wref SUCCESSFUL Setting palette 2 d8spal SUCCESSFUL Putting image 1 with pal 2, RLE d8aimg SUCCESSFUL Setting read ref1 d8rref SUCCESSFUL Getting dimensions of first image d8gdims SUCCESSFUL d1= 100 d2= 100 ispal= 1 Getting image 1 d8gimg SUCCESSFUL Checking image and palette Image is correct Palette is correct ****** ALL TESTS SUCCESSFUL ******* Creating arrays... Writing arrays to single file... Test passed for float64 write Test passed for float32 write Test passed for int8 write Test passed for int16 write Test passed for int32 write Test passed for float64 read Test passed for float32 read Test passed for int8 read Test passed for int16 read Test passed for int32 read Checking dimscales, max/min & arrays from single file Test passed for float64 array Test passed for float64 scales. Test passed for float64 max/min. Test passed for float32 array Test passed for float32 scales. Test passed for float32 max/min. Test passed for int8 array Test passed for int8 scales. Test passed for int8 max/min. Test passed for int16 array Test passed for int16 scales. Test passed for int16 max/min. Test passed for int32 array Test passed for int32 scales. Test passed for int32 max/min. >>> ALL TESTS PASSED <<< Creating arrays... Writing arrays to single file... Test passed for float64 write Test passed for float32 write Test passed for int8 write Test passed for int16 write Test passed for int32 write Test passed for float64 read Test passed for float32 read Test passed for int8 read Test passed for int16 read Test passed for int32 read Checking dimscales, max/min & arrays from single file Test passed for float64 array Test passed for float64 scales. Test passed for float64 max/min. Test passed for float32 array Test passed for float32 scales. Test passed for float32 max/min. Test passed for int8 array Test passed for int8 scales. Test passed for int8 max/min. Test passed for int16 array Test passed for int16 scales. Test passed for int16 max/min. Test passed for int32 array Test passed for int32 scales. Test passed for int32 max/min. >>> ALL TESTS PASSED <<< Creating arrays... Testing arrays in individual files... Write: 0 Read: 0 Test passed for float64 array. Write: 0 Read: 0 Test passed for float32 array. Write: 0 Read: 0 Test passed for int8 array. Write: 0 Read: 0 Test passed for int16 array. Write: 0 Read: 0 Test passed for int32 array. Writing arrays to single file. Error values: 0 0 0 0 0 Reading arrays from single file... Error values: 0 0 0 0 0 Checking arrays from single file...\n\n Test passed for float64 array. Test passed for float32 array. Test passed for int8 array. Test passed for int16 array. Test passed for int32 array. >>> ALL TESTS PASSED <<< Creating arrays... Testing arrays in individual files... Write: 0 Read: 0 Test passed for float64 array. Write: 0 Read: 0 Test passed for float32 array. Write: 0 Read: 0 Test passed for int8 array. Write: 0 Read: 0 Test passed for int16 array. Write: 0 Read: 0 Test passed for int32 array. Writing arrays to single file. Error values: Add float64 ret: 0 Add float32 ret: 0 Add int8 ret: 0 Add int16 ret: 0 Add int32 ret: 0 Reading arrays from single file... Error values: Get f64 ret: 0 Get f32 ret: 0 Get int8 ret: 0 Get int16 ret: 0 Get int32 ret: 0 Checking arrays from single file...\n\n Test passed for float64 array. Test passed for float32 array. Test passed for int8 array. Test passed for int16 array. Test passed for int32 array. >>> ALL TESTS PASSED <<< Creating arrays... Test strings written so far Test passed for Datalabel Test passed for Dataunit Test passed for Datafmt Test passed for Coordsys Test passed for f_dim1_label_b Test passed for f_dim1_unit_b Test passed for f_dim1_fmt_b Test passed for f_dim2_label_a Test passed for f_dim2_unit_a Test passed for f_dim2_fmt_a >>>> All Tests Passed. >>>> FORTEST V0.2beta Built on: Mon Feb 8 1993 HDF Library Version: 4.0r0, NCSA HDF Version 4.0 Release 0, ?month? ?year? Testing -- (slab1) Testing -- (slab2) Testing -- (slab3) Testing -- (slab4) Testing -- (slab) Testing -- (r24) Testing -- (an) Testing -- (anfile) Testing -- (manf) Testing -- (p) Testing -- (r8) Testing -- (sdmms) Testing -- (sdnmms) Testing -- (sdnnt) Testing -- (sdnt) Testing -- (sdstr) Cleaning Up... hdf4-hdf4.3.1/hdf/test/fortestF.f000066400000000000000000000164431503061704500165220ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C Interface to invoke tests for HDF Fortran interfaces. Program main implicit none include 'fortest.inc' integer nerror, retcode character cmd*15, test*30 integer majorv, minorv, releaseno character*80 relstr C Default to cleanup *.hdf files and set verbosity to default value CleanUp = .TRUE. CleanUpCMD = 'rm -f *.hdf' Verbosity = VERBO_DEF nerror = 0 C print *, '===========================================' print *, 'HDF Library Fortran Interface Tests Started' print *, '===========================================' C C Show library version. retcode = hglibver(majorv, minorv, releaseno, relstr) if (retcode .eq. -1) then print *, '*** hglibver failed ***' nerror = nerror + 1 else print 101, majorv, minorv, releaseno, relstr endif C C assume majorv, minorv, releaseno are single digit numbers 101 format('Built with HDF Library Version: ',I1,'.',I1,'.',I1,/A80) C Open command file call opencmdf(retcode) if (retcode .ne. 0) then nerror = nerror + 1 else C C read and run one test command at a time call getcmd(cmd, test, retcode) do while (retcode .eq. 0) call runcmd(cmd, test, retcode) if (retcode .ne. 0) nerror = nerror + 1 call getcmd(cmd, test, retcode) end do end if print *, '=====================================' if (nerror .ne. 0) then print*, nerror, ' Fortran test(s) failed' else print*, 'All Fortran Interface Tests Passed' endif print *, '=====================================' if (CleanUp) call Hsystem(CleanUpCMD) end C C Open the test command file C This is more general than reading from standard input file C which is often system dependent. C Retcode: 0 if everything is fine, else -1 C subroutine opencmdf(retcode) implicit none include 'fortest.inc' integer retcode retcode = 0 open(cmdf, FILE=cmdfilename, status='UNKNOWN',err=100) return 100 call MESSAGE(VERBO_NONE, 'failed to open command file') retcode = -1 return end C Get a test command. C Currently taking it from standard input. C If EOF encounters, set retcode = 1. Else retcode = 0. C subroutine getcmd(cmd, test, retcode) implicit none include 'fortest.inc' character*(*) cmd, test integer retcode character*120 inline integer linelen, i retcode = 0 read(cmdf,11,END=100,err=100) inline C print *, 'inline=', inline linelen = len(inline) i = index(inline, ' ') if (i .le. 0) i = linelen+1 cmd = inline(1 : i - 1) do while (i .le. linelen) if (inline(i:i) .eq. ' ') then i = i + 1 else goto 50 endif end do 50 test = inline(i:linelen) if (Verbosity .ge. VERBO_HI) then print * , 'cmd=', cmd, ', test=', test endif retcode = 0 return 100 close(cmdf) retcode = 1 return C 11 format(A120) end C Run the Fortran test command. C subroutine runcmd(cmd, param, retcode) implicit none include 'fortest.inc' character*(*) cmd, param integer retcode C retcode = 0 C Parse command types C C Verbosity level command if (cmd .EQ. 'Verbosity' .OR. cmd .EQ. 'verbosity') then Verbosity = index('0123456789', param(1:1)) - 1 return endif C Cleanup command C If param is Yes/No, it directs to delete the *.hdf or not. C If param is not Yes/No, it represents the system command to delete C the *.hdf. (NB: specifying system command does not imply C to Cleanup, i.e., it does not current CleanUp setting. C if (cmd .EQ. 'Cleanup' .OR. cmd .EQ. 'cleanup') then if (param .EQ. 'No' .OR. param .EQ. 'no') then CleanUp = .FALSE. else if (param .EQ. 'Yes' .OR. param .EQ. 'yes') then CleanUp = .TRUE. else CleanUpCMD = param endif return endif C print *, '=====================================' C print *, cmd, param C print *, '=====================================' C Skip command if (cmd .EQ. 'Skip' .OR. cmd .EQ. 'skip') then call ptestban('Skipping', param) return endif if (cmd .NE. 'Test' .AND. cmd .NE. 'test') then print *, 'Unknown Command: ', cmd, param print *, 'Try one of "Skip", "Test", "Verbosity" or "Cleanup"' retcode = -1 return endif C Test command if (param .EQ. 'slab') then call slabwf(retcode) return endif if (param .EQ. 'r24') then call t24f(retcode) return endif if (param .EQ. 'an') then call tanf(retcode) return endif if (param .EQ. 'anfile') then call tanfilef(retcode) return endif if (param .EQ. 'manf') then call manf(retcode) return endif if (param .EQ. 'mgrf') then call mgrf(retcode) return endif if (param .EQ. 'p') then call tpf(retcode) return endif if (param .EQ. 'r8') then call tr8f(retcode) return endif if (param .EQ. 'sdmms') then call tsdmmsf(retcode) return endif if (param .EQ. 'sdnmms') then call tsdnmmsf(retcode) return endif if (param .EQ. 'sdnnt') then call tsdnntf(retcode) return endif if (param .EQ. 'sdnt') then call tsdntf(retcode) return endif if (param .EQ. 'sdstr') then call tsdstrf(retcode) return endif if (param .EQ. 'vsetf') then call tvsetf(retcode) return endif if (param .EQ. 'vsetblock') then call tvsetblock(retcode) return endif if (param .EQ. 'vgroups') then call tvgroups(retcode) return endif if (param .EQ. 'vattrf') then call tvattrf(retcode) return endif if (param .EQ. 'stubs') then call tstubsf(retcode) return endif C print *, 'Unknown Command: ', cmd, param retcode = -1 return end hdf4-hdf4.3.1/hdf/test/gentest.c000066400000000000000000000134121503061704500163650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE gentest.c Generate files for HDF testing. REMARKS This may be a bit of a kludge in some cases, because it's hard to determine correct output if you don't know if the routine you are generating the test is working yet. DESIGN Each test should have a separate function which creates the datafiles necessary for testing it. BUGS/LIMITATIONS EXPORTED ROUTINES none AUTHOR Quincey Koziol MODIFICATION HISTORY 10/27/93 - Started coding. 1/20/94 - Added N-bit test generation. */ #include "hdf.h" /* Local definitions of filenames and tag/refs of data in them. */ #define BITIO_NAME "test_files/bitio.dat" #define BITIO_TAG1 1000 #define BITIO_REF1 1000 #define BITIO_SIZE1 4096 #define NBIT_NAME "test_files/nbit.dat" #define NBIT_TAG1 (uint16)1000 #define NBIT_REF1 (uint16)1000 #define NBIT_SIZE1 4096 #define NBIT_BITS1 6 static int gen_bitio_test(void); static int gen_nbit_test(void); /*-------------------------------------------------------------------------- NAME gen_bitio_test -- create datafiles for bitio test USAGE int gen_bitio_test() RETURNS returns SUCCEED or FAIL DESCRIPTION Writes out a sample dataset to the bitio datafile so that we can test bitio reading before bitio writing. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int gen_bitio_test(void) { int32 fid; /* file ID of bitio HDF file */ uint8 *bit_data; /* pointer to the data to store in the datafile */ intn i; /* local counting variable */ if ((fid = Hopen(BITIO_NAME, DFACC_CREATE, 0)) == FAIL) return FAIL; if ((bit_data = (uint8 *)malloc(BITIO_SIZE1 * sizeof(uint8))) == NULL) { Hclose(fid); return FAIL; } /* end if */ for (i = 0; i < BITIO_SIZE1; i++) /* fill with pseudo-random data */ bit_data[i] = (uint8)((i * 3) % 256); if (FAIL == Hputelement(fid, BITIO_TAG1, BITIO_REF1, bit_data, BITIO_SIZE1)) { free(bit_data); Hclose(fid); return FAIL; } free(bit_data); if (FAIL == Hclose(fid)) return FAIL; return SUCCEED; } /* end gen_bitio_test() */ /*-------------------------------------------------------------------------- NAME gen_nbit_test -- create datafiles for n-bit test USAGE int gen_nbit_test() RETURNS returns SUCCEED or FAIL DESCRIPTION Writes out a sample dataset to a sample datafile so that we can test n-bit writing before n-bit reading. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ static int gen_nbit_test(void) { int32 fid; /* file ID of n-bit HDF file */ uint8 *nbit_data; /* pointer to the initial data */ uint8 *out_data; /* pointer to the data to store in the datafile */ uint32 store; /* temporary storage for outgoing bits */ intn store_bits; /* number of bits stored */ uintn out_num; /* number of bytes to output */ intn i; /* local counting variable */ if ((fid = Hopen(NBIT_NAME, DFACC_CREATE, 0)) == FAIL) return FAIL; if ((nbit_data = (uint8 *)malloc(NBIT_SIZE1 * sizeof(uint8))) == NULL) { Hclose(fid); return FAIL; } if ((out_data = (uint8 *)malloc(NBIT_SIZE1 * sizeof(uint8))) == NULL) { free(nbit_data); Hclose(fid); return FAIL; } for (i = 0; i < NBIT_SIZE1; i++) /* fill with pseudo-random data */ nbit_data[i] = (uint8)((i * 3) % 64); store = 0; store_bits = 0; out_num = 0; for (i = 0; i < NBIT_SIZE1; i++) { /* pack the bits together */ store <<= NBIT_BITS1; store |= (uint32)nbit_data[i] & (uint32)maskc[NBIT_BITS1]; store_bits += NBIT_BITS1; if (store_bits >= (intn)BITNUM) { /* have at least a full byte */ out_data[out_num] = (uint8)((store >> (store_bits - (intn)BITNUM)) & (uint32)maskc[8]); out_num++; store_bits -= (intn)BITNUM; store >>= BITNUM; } /* end if */ } /* end for */ if (store_bits > 0) { /* push over any leftover bits to the left */ out_data[out_num] = (uint8)(store << ((intn)BITNUM - store_bits)); out_num++; } /* end if */ if (FAIL == Hputelement(fid, NBIT_TAG1, NBIT_REF1, out_data, (int32)out_num)) { free(nbit_data); free(out_data); Hclose(fid); return FAIL; } /* end if */ free(nbit_data); free(out_data); if (FAIL == Hclose(fid)) return FAIL; return SUCCEED; } /* end gen_nbit_test() */ int main(void) { gen_bitio_test(); gen_nbit_test(); return EXIT_SUCCESS; } /* end main() */ hdf4-hdf4.3.1/hdf/test/litend.c000066400000000000000000000531671503061704500162060ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" /* Internal Variables */ #define CDIM_X 7 #define CDIM_Y 9 #define FILENAME "test_files/litend.dat" #define TMPFILE "temp.hdf" /* for those machines with imprecise IEEE<-> conversions, this should be */ /* close enough */ #define FLOAT64_FUDGE ((float64)0.00000001) static int8 cdata_i8[CDIM_Y][CDIM_X]; static uint8 cdata_u8[CDIM_Y][CDIM_X]; static int16 cdata_i16[CDIM_Y][CDIM_X]; static uint16 cdata_u16[CDIM_Y][CDIM_X]; static int32 cdata_i32[CDIM_Y][CDIM_X]; static uint32 cdata_u32[CDIM_Y][CDIM_X]; static float32 cdata_f32[CDIM_Y][CDIM_X]; static float64 cdata_f64[CDIM_Y][CDIM_X]; static void init_cdata(void); static void wrapup_cdata(void); static void test_little_read(void); static void test_little_write(void); static void init_cdata(void) { int i, j; for (i = 0; i < CDIM_Y; i++) for (j = 0; j < CDIM_X; j++) { cdata_i8[i][j] = (int8)(i * 10 + j); cdata_u8[i][j] = (uint8)(i * 10 + j); cdata_i16[i][j] = (int16)(i * 10 + j); cdata_u16[i][j] = (uint16)(i * 10 + j); cdata_i32[i][j] = (int32)(i * 10 + j); cdata_u32[i][j] = (uint32)(i * 10 + j); cdata_f32[i][j] = (float32)(i * 10 + j); cdata_f64[i][j] = (float64)(i * 10 + j); } /* end for */ } /* end init_cdata() */ static void wrapup_cdata(void) { } /* end wrapup_cdata() */ static void test_little_read(void) { intn rank; int32 dimsizes[2] = {-1, -1}; int32 numbertype; int8 *data_i8; uint8 *data_u8; int16 *data_i16; uint16 *data_u16; int32 *data_i32; uint32 *data_u32; float32 *data_f32; float64 *data_f64; int ret; const char *filename = get_srcdir_filename(FILENAME); MESSAGE(5, printf("Testing Little-Endian Read Routines\n");); MESSAGE(10, printf("Testing Little-Endian INT8 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT8 data were incorrect\n"); num_errs++; } else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT8) { fprintf(stderr, "Numbertype for INT8 data were incorrect\n"); num_errs++; } else { data_i8 = (int8 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int8)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_i8); RESULT("DFSDgetdata"); if (memcmp(cdata_i8, data_i8, CDIM_X * CDIM_Y * sizeof(int8))) { fprintf(stderr, "INT8 data was incorrect\n"); num_errs++; } free(data_i8); } } MESSAGE(10, printf("Testing Little-Endian UINT8 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT8 data were incorrect\n"); num_errs++; } else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT8) { fprintf(stderr, "Numbertype for UINT8 data were incorrect\n"); num_errs++; } else { data_u8 = (uint8 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint8)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_u8); RESULT("DFSDgetdata"); if (memcmp(cdata_u8, data_u8, CDIM_X * CDIM_Y * sizeof(uint8))) { fprintf(stderr, "UINT8 data was incorrect\n"); num_errs++; } free(data_u8); } } MESSAGE(10, printf("Testing Little-Endian INT16 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT16 data were incorrect\n"); num_errs++; } else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT16) { fprintf(stderr, "Numbertype for INT16 data were incorrect\n"); num_errs++; } else { data_i16 = (int16 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int16)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_i16); RESULT("DFSDgetdata"); if (memcmp(cdata_i16, data_i16, CDIM_X * CDIM_Y * sizeof(int16))) { fprintf(stderr, "INT16 data was incorrect\n"); num_errs++; } free(data_i16); } } MESSAGE(10, printf("Testing Little-Endian UINT16 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT16 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT16) { fprintf(stderr, "Numbertype for UINT16 data were incorrect\n"); num_errs++; } /* end if */ else { data_u16 = (uint16 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint16)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_u16); RESULT("DFSDgetdata"); if (memcmp(cdata_u16, data_u16, CDIM_X * CDIM_Y * sizeof(uint16))) { fprintf(stderr, "UINT16 data was incorrect\n"); num_errs++; } /* end if */ free(data_u16); } /* end else */ } /* end else */ MESSAGE(10, printf("Testing Little-Endian INT32 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT32) { fprintf(stderr, "Numbertype for INT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_i32 = (int32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int32)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_i32); RESULT("DFSDgetdata"); if (memcmp(cdata_i32, data_i32, CDIM_X * CDIM_Y * sizeof(int32))) { fprintf(stderr, "INT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_i32); } /* end else */ } /* end else */ MESSAGE(10, printf("Testing Little-Endian UINT32 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT32) { fprintf(stderr, "Numbertype for UINT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_u32 = (uint32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint32)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_u32); RESULT("DFSDgetdata"); if (memcmp(cdata_u32, data_u32, CDIM_X * CDIM_Y * sizeof(uint32))) { fprintf(stderr, "UINT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_u32); } /* end else */ } /* end else */ MESSAGE(10, printf("Testing Little-Endian FLOAT32 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for FLOAT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LFLOAT32) { fprintf(stderr, "Numbertype for FLOAT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_f32 = (float32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(float32)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_f32); RESULT("DFSDgetdata"); if (memcmp(cdata_f32, data_f32, CDIM_X * CDIM_Y * sizeof(float32))) { fprintf(stderr, "FLOAT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_f32); } /* end else */ } /* end else */ MESSAGE(10, printf("Testing Little-Endian FLOAT64 Reading Routines\n");); ret = DFSDgetdims(filename, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for FLOAT64 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LFLOAT64) { fprintf(stderr, "Numbertype for FLOAT64 data were incorrect\n"); num_errs++; } /* end if */ else { data_f64 = (float64 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(float64)); ret = DFSDgetdata(filename, rank, dimsizes, (void *)data_f64); RESULT("DFSDgetdata"); if (memcmp(cdata_f64, data_f64, CDIM_X * CDIM_Y * sizeof(float64))) { fprintf(stderr, "FLOAT64 data was incorrect\n"); num_errs++; } /* end if */ free(data_f64); } /* end else */ } /* end else */ } /* end test_little_read */ static void test_little_write(void) { intn rank; int32 dimsizes[2]; int32 numbertype; int8 *data_i8; uint8 *data_u8; int16 *data_i16; uint16 *data_u16; int32 *data_i32; uint32 *data_u32; float32 *data_f32; float64 *data_f64; int ret; MESSAGE(5, printf("Testing Little-Endian Write Routines\n");); rank = 2; dimsizes[0] = CDIM_Y; dimsizes[1] = CDIM_X; MESSAGE(10, printf("Testing Little-Endian INT8 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LINT8); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_i8); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian UINT8 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LUINT8); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_u8); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian INT16 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LINT16); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_i16); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian UINT16 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LUINT16); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_u16); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian INT32 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LINT32); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_i32); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian UINT32 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LUINT32); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_u32); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian FLOAT32 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LFLOAT32); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_f32); RESULT("DFSDadddata"); MESSAGE(10, printf("Testing Little-Endian FLOAT64 Writing Routines\n");); ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); ret = DFSDsetNT(DFNT_LFLOAT64); RESULT("DFSDsetNT"); ret = DFSDadddata(TMPFILE, rank, dimsizes, (void *)cdata_f64); RESULT("DFSDadddata"); ret = DFSDrestart(); RESULT("DFSDrestart"); ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT8 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT8) { fprintf(stderr, "Numbertype for INT8 data were incorrect\n"); num_errs++; } /* end if */ else { data_i8 = (int8 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int8)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_i8); RESULT("DFSDgetdata"); if (memcmp(cdata_i8, data_i8, CDIM_X * CDIM_Y * sizeof(int8))) { fprintf(stderr, "INT8 data was incorrect\n"); num_errs++; } /* end if */ free(data_i8); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT8 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT8) { fprintf(stderr, "Numbertype for UINT8 data were incorrect\n"); num_errs++; } /* end if */ else { data_u8 = (uint8 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint8)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_u8); RESULT("DFSDgetdata"); if (memcmp(cdata_u8, data_u8, CDIM_X * CDIM_Y * sizeof(uint8))) { fprintf(stderr, "UINT8 data was incorrect\n"); num_errs++; } /* end if */ free(data_u8); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT16 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT16) { fprintf(stderr, "Numbertype for INT16 data were incorrect\n"); num_errs++; } /* end if */ else { data_i16 = (int16 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int16)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_i16); RESULT("DFSDgetdata"); if (memcmp(cdata_i16, data_i16, CDIM_X * CDIM_Y * sizeof(int16))) { fprintf(stderr, "INT16 data was incorrect\n"); num_errs++; } /* end if */ free(data_i16); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT16 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT16) { fprintf(stderr, "Numbertype for UINT16 data were incorrect\n"); num_errs++; } /* end if */ else { data_u16 = (uint16 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint16)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_u16); RESULT("DFSDgetdata"); if (memcmp(cdata_u16, data_u16, CDIM_X * CDIM_Y * sizeof(uint16))) { fprintf(stderr, "UINT16 data was incorrect\n"); num_errs++; } /* end if */ free(data_u16); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for INT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LINT32) { fprintf(stderr, "Numbertype for INT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_i32 = (int32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(int32)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_i32); RESULT("DFSDgetdata"); if (memcmp(cdata_i32, data_i32, CDIM_X * CDIM_Y * sizeof(int32))) { fprintf(stderr, "INT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_i32); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for UINT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LUINT32) { fprintf(stderr, "Numbertype for UINT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_u32 = (uint32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(uint32)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_u32); RESULT("DFSDgetdata"); if (memcmp(cdata_u32, data_u32, CDIM_X * CDIM_Y * sizeof(uint32))) { fprintf(stderr, "UINT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_u32); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for FLOAT32 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LFLOAT32) { fprintf(stderr, "Numbertype for FLOAT32 data were incorrect\n"); num_errs++; } /* end if */ else { data_f32 = (float32 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(float32)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_f32); RESULT("DFSDgetdata"); if (memcmp(cdata_f32, data_f32, CDIM_X * CDIM_Y * sizeof(float32))) { fprintf(stderr, "FLOAT32 data was incorrect\n"); num_errs++; } /* end if */ free(data_f32); } /* end else */ } /* end else */ ret = DFSDgetdims(TMPFILE, &rank, dimsizes, 2); RESULT("DFSDgetdims"); if (dimsizes[0] != CDIM_Y || dimsizes[1] != CDIM_X) { fprintf(stderr, "Dimensions for FLOAT64 data were incorrect\n"); num_errs++; } /* end if */ else { ret = DFSDgetNT(&numbertype); RESULT("DFSDgetNT"); if (numbertype != DFNT_LFLOAT64) { fprintf(stderr, "Numbertype for FLOAT64 data were incorrect\n"); num_errs++; } /* end if */ else { data_f64 = (float64 *)malloc((size_t)(dimsizes[0] * dimsizes[1]) * sizeof(float64)); ret = DFSDgetdata(TMPFILE, rank, dimsizes, (void *)data_f64); RESULT("DFSDgetdata"); if (memcmp(cdata_f64, data_f64, CDIM_X * CDIM_Y * sizeof(float64))) { fprintf(stderr, "FLOAT64 data was incorrect\n"); num_errs++; } /* end if */ free(data_f64); } /* end else */ } /* end else */ } /* end test_little_write */ void test_litend(void) { init_cdata(); test_little_read(); test_little_write(); wrapup_cdata(); } /* end test_litend() */ hdf4-hdf4.3.1/hdf/test/macros.c000066400000000000000000000157731503061704500162140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" #define INT16MAX 32767 /* 0x7fff */ #define UINT16MAX 65535 /* 0xffff */ #define INT32MAX 2147483647 /* 0x7fffffff */ #define UINT32MAX 4294967295UL /* 0xffffffff */ extern int Verbocity; void test_macros(void) { uint8_t *p; uint16 new16u, old16u, str16u; int16 new16, old16, str16; uint32 new32u, old32u, str32u; int32 new32, old32, str32; int errors1, errors2, errors3, errors4; int errors = 0; uint16 data1[10] = {0, 1, 2, 3, 4, UINT16MAX - 4, UINT16MAX - 3, UINT16MAX - 2, UINT16MAX - 1, UINT16MAX}; int16 data2[20] = {-INT16MAX - 1, -INT16MAX, -INT16MAX + 1, -INT16MAX + 2, -INT16MAX + 3, -INT16MAX + 4, -4, -3, -2, -1, 0, 1, 2, 3, 4, INT16MAX - 4, INT16MAX - 3, INT16MAX - 2, INT16MAX - 1, INT16MAX}; uint32 data3[10] = {0, 1, 2, 3, 4, UINT32MAX - 4, UINT32MAX - 3, UINT32MAX - 2, UINT32MAX - 1, UINT32MAX}; int32 data4[20] = {-INT32MAX - 1, -INT32MAX, -INT32MAX + 1, -INT32MAX + 2, -INT32MAX + 3, -INT32MAX + 4, -4, -3, -2, -1, 0, 1, 2, 3, 4, INT32MAX - 4, INT32MAX - 3, INT32MAX - 2, INT32MAX - 1, INT32MAX}; if (Verbosity > 5) printf("\n"); errors1 = 0; for (size_t j = 0; j < 10; j++) { old16u = data1[j]; p = (uint8_t *)&str16u; UINT16ENCODE(p, old16u); p = (uint8_t *)&str16u; UINT16DECODE(p, new16u); if (old16u != new16u) { if (Verbosity > 8) { printf("old16u = %" PRIu16 ", %" PRIx16 "\n", old16u, old16u); printf("str: "); p = (uint8_t *)&str16u; for (size_t i = 0; i < sizeof(uint16); i++) { printf("%x ", 0xff & *p++); } printf("\n"); printf("new16u = %" PRIu16 ", %" PRIx16 "\n", new16u, new16u); printf("\n"); } errors1++; } } if (Verbosity > 5) { if (errors1 == 0) { printf("UNSIGNED INTEGER16: SUCCESSFUL\n"); } else { printf("UNSIGNED INTEGER16: %d ERRORS\n", errors1); } } if (Verbosity > 5) printf("\n"); errors2 = 0; for (size_t j = 0; j < 20; j++) { old16 = data2[j]; p = (uint8_t *)&str16; INT16ENCODE(p, old16); p = (uint8_t *)&str16; INT16DECODE(p, new16); if (old16 != new16) { if (Verbosity > 8) { printf("old16 = %" PRId16 ", %" PRIx16 "\n", old16, old16); printf("str: "); p = (uint8_t *)&str16; for (size_t i = 0; i < sizeof(int16); i++) { printf("%x ", 0xff & *p++); } printf("\n"); printf("new16 = %" PRId16 ", %" PRIx16 "\n", new16, new16); printf("\n"); } errors2++; } } if (Verbosity > 5) { if (errors2 == 0) { printf("SIGNED INTEGER16: SUCCESSFUL\n"); } else { printf("SIGNED INTEGER16: %d ERRORS\n", errors2); } } if (Verbosity > 5) printf("\n"); errors3 = 0; for (size_t j = 0; j < 10; j++) { old32u = data3[j]; p = (uint8_t *)&str32u; UINT32ENCODE(p, old32u); p = (uint8_t *)&str32u; UINT32DECODE(p, new32u); if (old32u != new32u) { if (Verbosity > 8) { printf("old32u = %" PRIu32 ", %" PRIx32 "\n", old32u, old32u); printf("str: "); p = (uint8_t *)&str32u; for (size_t i = 0; i < sizeof(uint32); i++) { printf("%x ", 0xff & *p++); } printf("\n"); printf("new32u = %" PRIu32 ", %" PRIx32 "\n", new32u, new32u); printf("\n"); } errors3++; } } if (Verbosity > 5) { if (errors3 == 0) { printf("UNSIGNED INTEGER32: SUCCESSFUL\n"); } else { printf("UNSIGNED INTEGER32: %d ERRORS\n", errors3); } } if (Verbosity > 5) printf("\n"); errors4 = 0; for (size_t j = 0; j < 20; j++) { old32 = data4[j]; p = (uint8_t *)&str32; INT32ENCODE(p, old32); p = (uint8_t *)&str32; INT32DECODE(p, new32); if (old32 != new32) { if (Verbosity > 8) { printf("old32 = %" PRId32 ", %" PRIx32 "\n", old32, old32); printf("str: "); p = (uint8_t *)&str32; for (size_t i = 0; i < sizeof(int32); i++) { printf("%x ", 0xff & *p++); } printf("\n"); printf("new32 = %" PRId32 ", %" PRIx32 "\n", new32, new32); printf("\n"); } errors4++; } } if (Verbosity > 5) { if (errors4 == 0) { printf("SIGNED INTEGER32: SUCCESSFUL\n"); } else { printf("SIGNED INTEGER32: %d ERRORS\n", errors4); } } errors = errors1 + errors2 + errors3 + errors4; if (errors > 0) { printf(" %d ERRORS were detected during (macros) Testing\n", errors); num_errs += errors; } } /* end test_macros() */ hdf4-hdf4.3.1/hdf/test/man.c000066400000000000000000000712361503061704500154770ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*********************************************************** * * Test program: man * * This program stores annotations in a file using Multi-file interface ANxxx * It tests writing/reading file labels/descriptions and reading/writing * annotations to SDS's and RIS. The old interfaces for these elements * are used to write several SDSs and corresponding RISs to a file. * It doesn't test writing annotations for Vgroups or Vdata. * * NOTE: No verification of the SDS or RI data in the file * is done i.e. data is not read back in. * * 1. Writes file labels and descriptions. * * 2. It writes labels and descriptions for all 2 out of 3 SDSs. * * 3. It writes labels and descriptions for all RISs. * * 4. Tests re-writing of annotation(only one type is tested but * it should suffice to test the internals) while preserving * original tag/ref of element. * *************************************************************/ /* includes */ #include "tproto.h" #define TESTFILE "tman.hdf" /* testfile to write annotations to */ #define ROWS 10 /* row size of dataset/image */ #define COLS 10 /* column size of dataset/image */ #define REPS 3 /* number of images/data sets to write to file */ /* File labels/descriptions to write */ static const char *file_lab[3] = {"File label #1: aaa", "File label #2: bbbbbb", "File label #3: cccc"}; static const char *file_desc[2] = {"File Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 13" "\n 14 15 16 17 18 19 20 **END FILE DESCR**\n", "File Descr #2: A B C D E F G H I J K L \n" " M N O **END FILE DESCR**\n"}; /* Data labels /descriptions to write */ static const char *labsds[2] = {"Object label #1: sds", "Object label #1.1:sds"}; static const char *labris[2] = {"Object label #2: image", "Object label #2.1:image"}; static const char *descsds[2] = {"Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 " "\n 13 14 15 16 17 18 19 20 **END SDS DESCR**\n", "Object Descr #1.1: 1 2 3 4 5 6 7 8 9 10 11 12 " "\n 13 14 15 16 17 18 19 20 **END SDS DESCR**\n"}; static const char *descris[2] = {"Object Descr #2: A B C D E F G H I J K L \n" " M N O **END IMAGE DESCR **\n", "Object Descr #2.1: A B C D E F G H I J K L \n" " M N O **END IMAGE DESCR **\n"}; /* fcn Prototypes */ static void genimage(int height, int width, float32 *data, uint8 *image); static void gen2Dfloat(int height, int width, float32 *data); static int32 check_fann(const char *fname); static int32 check_lab_desc(const char *fname, uint16 tag, uint16 ref, const char *label[], const char *desc[]); /**************************************************************** ** ** gen2Dfloat: generate 2-D data array ** ****************************************************************/ static void gen2Dfloat(int height, int width, float32 *data) { int i, j; float32 *pdata = NULL; /* store one value per row, increasing by one for each row */ pdata = data; for (i = 0; i < height; i++) for (j = 0; j < width; j++) *pdata++ = (float32)(i + 1); } /* gen2Dfloat() */ /**************************************************************** ** ** genimage: generate image from 2-D float array ** ****************************************************************/ static void genimage(int height, int width, float32 *data, uint8 *image) { int i, limit; float32 *pdata = NULL; float32 max, min, multiplier; limit = height * width; pdata = data; max = min = *pdata; for (i = 0; i < limit; i++, pdata++) { max = (max > *pdata) ? max : *pdata; min = (min < *pdata) ? min : *pdata; } /* store one value per row, increasing by one for each row */ pdata = data; multiplier = (float32)255.0 / (max - min); for (i = 0; i < limit; i++) *image++ = (uint8)(((*pdata++) - min) * multiplier); } /* geniamge() */ /**************************************************************** ** ** check_fann_rewrite: Check rewriting a file label while ** preserving original tag/ref of element ** ****************************************************************/ static int32 check_fann_rewrite(const char *fname) { int32 ret = SUCCEED; /* return value */ int32 file_handle; /* file handle */ int32 an_handle; /* annotation interface handle */ int32 ann_handle; /* annotation handle */ int32 nflabs, /* number of file labels */ nfdescs, /* number of file descs */ nolabs, /* total number of data labels */ nodescs; /* total number of data descs */ int32 ann_len; /* length of annotation */ uint16 atag; /* annotation tag */ uint16 aref; /* annotation ref */ char *ann_label = NULL; /* annotation label */ int32 ann_id; uint16 ann_tag; uint16 ann_ref; uint16 b_ann_tag; uint16 b_ann_ref; /* open file again for writing */ ret = file_handle = Hopen(fname, DFACC_RDWR, 0); RESULT("Hopen"); /* Start annotation handling */ ret = an_handle = ANstart(file_handle); RESULT("ANstart"); /* Get Info On Annotations In File */ ret = ANfileinfo(an_handle, &nflabs, &nfdescs, &nolabs, &nodescs); RESULT("Anfileinfo"); /* get first label */ ann_handle = ret = ANselect(an_handle, 0, AN_FILE_LABEL); RESULT("ANselect"); /* save tag ref here */ ret = ANget_tagref(an_handle, 0, AN_FILE_LABEL, &b_ann_tag, &b_ann_ref); RESULT("ANget_tagref"); /* rewrite it with 3rd label entry */ ret = ANwriteann(ann_handle, file_lab[2], (int32)strlen(file_lab[2])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); ret = ANend(an_handle); RESULT("ANend"); /* Now get ready to read the first file label back in */ /* Start annotation handling */ ret = an_handle = ANstart(file_handle); RESULT("ANstart"); /* read the first file label */ ann_handle = ret = ANselect(an_handle, 0, AN_FILE_LABEL); RESULT("ANselect"); /* get file label length */ ann_len = ret = ANannlen(ann_handle); RESULT("ANannlen"); /* see if this routine works */ ret = ANget_tagref(an_handle, 0, AN_FILE_LABEL, &atag, &aref); RESULT("ANget_tagref"); /* verify against previous tag/ref, should be the same as before re-write */ if (b_ann_tag != atag || b_ann_ref != aref) { printf(">>> Failed to preserve tag/ref for rewriting of file label\n"); num_errs++; } /* see if this routine works. Use tag/ref from ANget_tagref() */ ann_id = ret = ANtagref2id(an_handle, atag, aref); RESULT("ANtagref2id"); if (ann_id != ann_handle) { printf(">>> ANtagref2id failed to return valid annotation handle \n"); num_errs++; } /* see if this routine works. Use annotation id from ANtagref2id() */ ret = ANid2tagref(ann_id, &ann_tag, &ann_ref); RESULT("ANid2tagref"); if (ann_tag != atag || ann_ref != aref) { printf(">>> ANid2tagref failed to return valid tag and ref \n"); num_errs++; } /* see if this routine works. Just a type, not specific. -BMR */ ann_tag = ANatype2tag(AN_DATA_DESC); ret = (ann_tag != DFTAG_DIA) ? FAIL : 0; /*these two statements may not */ RESULT("ANatype2tag"); /* be necessary but that seems like a pattern */ /* in the test so I put them here too. -BMR */ if (ann_tag != DFTAG_DIA) { printf(">>> ANatype2tag failed to return valid tag from a type \n"); num_errs++; } /* check ann length against 3rd label */ if (ann_len != (int32)strlen(file_lab[2])) { printf("\t>>>BAD FILE LABEL LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)ann_len, (int)strlen(file_lab[2])); num_errs++; } /* allocate space for label */ if (ann_label == NULL) { if ((ann_label = (char *)malloc((ann_len + 1) * sizeof(char))) == NULL) { printf("Error: failed to allocate space to hold file label \n"); return FAIL; } memset(ann_label, '\0', ann_len + 1); } /* read label */ ret = ANreadann(ann_handle, ann_label, ann_len + 1); RESULT("ANreadann"); /* end access to label */ ret = ANendaccess(ann_handle); RESULT("ANendaccess"); /* check read label against 3rd label*/ if (strncmp((const char *)ann_label, (const char *)file_lab[2], (size_t)(ann_len + 1)) != 0) { printf("\t>>>BAD FILE LABEL. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", ann_label, file_lab[2]); num_errs++; } /* Clean up */ free(ann_label); ann_label = NULL; /* end access to annotations */ ret = ANend(an_handle); RESULT("ANend"); ret = Hclose(file_handle); /* close file */ RESULT("Hclose"); return SUCCEED; } /* check_fann_rewrite() */ /**************************************************************** ** ** check_fann: Check file labels and descriptions in file ** ****************************************************************/ static int32 check_fann(const char *fname) { int32 ret = SUCCEED; /* return value */ int32 file_handle; /* file handle */ int32 an_handle; /* annotation interface handle */ int32 ann_handle; /* annotation handle */ int32 nflabs, /* number of file labels */ nfdescs, /* number of file descs */ nolabs, /* total number of data labels */ nodescs; /* total number of data descs */ int32 ann_len; /* length of annotation */ uint16 atag; /* annotation tag */ uint16 aref; /* annotation ref */ char *ann_label = NULL; /* annotation label */ char *ann_desc = NULL; /* annotation desc */ intn indx; int32 ann_id; uint16 ann_tag; uint16 ann_ref; intn i; /* open file again */ ret = file_handle = Hopen(fname, DFACC_READ, 0); RESULT("Hopen"); /* Start annotation handling */ ret = an_handle = ANstart(file_handle); RESULT("ANstart"); /* Get Info On Annotations In File */ ret = ANfileinfo(an_handle, &nflabs, &nfdescs, &nolabs, &nodescs); RESULT("Anfileinfo"); /* read file labels */ for (i = 0; i < nflabs; i++) { /* select file label */ indx = i; ann_handle = ret = ANselect(an_handle, indx, AN_FILE_LABEL); RESULT("ANselect"); /* get file label length */ ann_len = ret = ANannlen(ann_handle); RESULT("ANannlen"); /* see if this routine works */ ret = ANget_tagref(an_handle, indx, AN_FILE_LABEL, &atag, &aref); RESULT("ANget_tagref"); /* see if this routine works. Use tag/ref from ANget_tagref() */ ann_id = ret = ANtagref2id(an_handle, atag, aref); RESULT("ANtagref2id"); if (ann_id != ann_handle) { printf(">>> ANtagref2id failed to return valid annotation handle \n"); num_errs++; } /* see if this routine works. Use annotation id from ANtagref2id() */ ret = ANid2tagref(ann_id, &ann_tag, &ann_ref); RESULT("ANid2tagref"); if (ann_tag != atag || ann_ref != aref) { printf(">>> ANid2tagref failed to return valid tag and ref \n"); num_errs++; } /* check ann length */ if (ann_len != (int32)strlen(file_lab[i])) { printf("\t>>>BAD FILE LABEL LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)ann_len, (int)strlen(file_lab[i])); num_errs++; } /* allocate space for label */ if (ann_label == NULL) { if ((ann_label = (char *)malloc((ann_len + 1) * sizeof(char))) == NULL) { printf("Error: failed to allocate space to hold file label \n"); return FAIL; } memset(ann_label, '\0', ann_len + 1); } /* read label */ ret = ANreadann(ann_handle, ann_label, ann_len + 1); RESULT("ANreadann"); /* end access to label */ ret = ANendaccess(ann_handle); RESULT("ANendaccess"); /* check label */ if (strncmp((const char *)ann_label, (const char *)file_lab[i], (size_t)(ann_len + 1)) != 0) { printf("\t>>>BAD FILE LABEL. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", ann_label, file_lab[i]); num_errs++; } free(ann_label); ann_label = NULL; } /* end for nflabs */ /* read file descriptions */ for (i = 0; i < nfdescs; i++) { /* select file label */ indx = i; ann_handle = ret = ANselect(an_handle, indx, AN_FILE_DESC); RESULT("ANselect"); /* get file label length */ ann_len = ret = ANannlen(ann_handle); RESULT("ANannlen"); /* check ann length */ if (ann_len != (int32)strlen(file_desc[i])) { printf("\t>>>BAD FILE DESC LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)ann_len, (int)strlen(file_desc[i])); num_errs++; } /* allocate space for desc */ if (ann_desc == NULL) { if ((ann_desc = (char *)malloc((ann_len + 1) * sizeof(char))) == NULL) { printf("Error: failed to allocate space to hold file desc \n"); return FAIL; } memset(ann_desc, '\0', ann_len + 1); } /* read desc */ ret = ANreadann(ann_handle, ann_desc, ann_len + 1); RESULT("ANreadann"); /* end access to desc */ ret = ANendaccess(ann_handle); RESULT("ANendaccess"); /* check desc */ if (strncmp((const char *)ann_desc, (const char *)file_desc[i], (size_t)(ann_len + 1)) != 0) { printf("\t>>>BAD FILE DESC. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", ann_desc, file_desc[i]); num_errs++; } free(ann_desc); ann_desc = NULL; } /* end for nfdescs */ /* Clean up */ free(ann_label); free(ann_desc); /* end access to annotations */ ANend(an_handle); Hclose(file_handle); /* close file */ return SUCCEED; } /* check_fann() */ /**************************************************************** ** ** check_lab_desc: read and compare label and description ** with expected ones ** ****************************************************************/ static int32 check_lab_desc(const char *fname, uint16 tag, uint16 ref, const char *label[], const char *desc[]) { int32 ret = SUCCEED; /* return value */ int32 file_handle; /* file handle */ int32 an_handle; /* annotation interface handle */ int32 nflabs, /* number of file labels */ nfdescs, /* number of file descs */ nolabs, /* total number of data labels */ nodescs; /* total number of data descs */ int32 ann_len; /* length of annotation */ char *ann_label = NULL; /* annotation label */ char *ann_desc = NULL; /* annotation desc */ intn num_dlabels, /* number of data labels for an element */ num_ddescs; /* number of data descs for an element */ int32 *dlabels = NULL; /* array of data labels for an element */ int32 *ddescs = NULL; /* array of data descs for an element */ int i; /* open file again */ ret = file_handle = Hopen(fname, DFACC_READ, 0); RESULT("Hopen"); /* Start annotation interface */ ret = an_handle = ANstart(file_handle); RESULT("ANstart"); /* Get Info On Annotations In File */ ret = ANfileinfo(an_handle, &nflabs, &nfdescs, &nolabs, &nodescs); RESULT("Anfileinfo"); /* Get number of label annotations with this tag/ref */ num_dlabels = ret = ANnumann(an_handle, AN_DATA_LABEL, tag, ref); RESULT("ANnumann"); /* Get number of label descs with this tag/ref */ num_ddescs = ret = ANnumann(an_handle, AN_DATA_DESC, tag, ref); RESULT("ANnumann"); /* allocate space for list of label annotation id's with this tag/ref */ if (num_dlabels == 0) { printf("Error: no data labels found\n"); num_errs++; } else { if ((dlabels = (int32 *)malloc(num_dlabels * sizeof(int32))) == NULL) { printf("Error: failed to allocate space to hold data label ids\n"); return FAIL; } } /* allocate space for list of description annotation id's with this tag/ref */ if (num_ddescs == 0) { printf("Error: no data descriptions found\n"); num_errs++; } else { if ((ddescs = (int32 *)malloc(num_ddescs * sizeof(int32))) == NULL) { printf("Error: failed to allocate space to hold data descs ids\n"); return FAIL; } } /* get list of label annotations id's with this tag/ref */ ret = ANannlist(an_handle, AN_DATA_LABEL, tag, ref, dlabels); RESULT("ANannlist"); if (ret != num_dlabels) printf("Error:ret!=nlabels there are %d data labels for tag=%d,ref=%d \n", num_dlabels, tag, ref); /* get list of description annotations id's with this tag/ref */ ret = ANannlist(an_handle, AN_DATA_DESC, tag, ref, ddescs); RESULT("ANannlist"); if (ret != num_ddescs) printf("Error:ret!=ndescs there are %d data descss for tag=%d,ref=%d \n", num_ddescs, tag, ref); /* loop through label list */ for (i = 0; i < num_dlabels; i++) { /* get annotation label length */ ann_len = ret = ANannlen(dlabels[i]); RESULT("ANannlen"); /* check ann length */ if (ann_len != (int32)strlen(label[i])) { printf("\t>>>BAD DATA LABEL LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)ann_len, (int)strlen(label[i])); num_errs++; } /* allocate space for label */ if (ann_label == NULL) { if ((ann_label = (char *)malloc((ann_len + 1) * sizeof(char))) == NULL) { printf("Error: failed to allocate space to hold data label \n"); return FAIL; } memset(ann_label, '\0', ann_len + 1); } /* read label */ ret = ANreadann(dlabels[i], ann_label, ann_len + 1); RESULT("ANreadann"); /* end access to label */ ret = ANendaccess(dlabels[i]); RESULT("ANendaccess"); /* check label */ if (strncmp((const char *)ann_label, (const char *)label[i], (size_t)(ann_len + 1)) != 0) { printf("\t>>>BAD DATA LABEL. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", ann_label, label[i]); num_errs++; } free(ann_label); ann_label = NULL; } /* end for labels */ /* loop through desc list */ for (i = 0; i < num_ddescs; i++) { /* get desc length */ ann_len = ret = ANannlen(ddescs[i]); RESULT("ANannlen"); /* check desc length */ if (ann_len != (int32)strlen(desc[i])) { printf("\t>>>BAD DATA DESC LENGTH.\n\t IS: %d\n\tSHOULD BE: %d<<<\n", (int)ann_len, (int)strlen(desc[i])); num_errs++; } /* allocate space for description */ if (ann_desc == NULL) { if ((ann_desc = (char *)malloc((ann_len + 1) * sizeof(char))) == NULL) { printf("Error: failed to allocate space to hold data desc \n"); return FAIL; } memset(ann_desc, '\0', ann_len + 1); } /* read description */ ret = ANreadann(ddescs[i], ann_desc, ann_len + 1); RESULT("ANreadann"); /* end access to desc */ ret = ANendaccess(ddescs[i]); RESULT("ANendaccess"); /* check desc */ if (strncmp((const char *)ann_desc, (const char *)desc[i], (size_t)ann_len) != 0) { printf("\t>>>BAD DATA DESC. \n\t IS: %s; \n\tSHOULD BE: %s<<<\n", ann_desc, desc[i]); num_errs++; } free(ann_desc); ann_desc = NULL; } /* end for descs */ /* free space */ free(dlabels); free(ddescs); free(ann_label); free(ann_desc); /* End annotation interface */ ANend(an_handle); Hclose(file_handle); /* close file */ return SUCCEED; } /* check_lab_desc() */ /**************************************************************** ** ** test_man(): Main annotation test routine ** ** NOTES: Keep in mind the order in which labels/descriptiosn ** are written to the file to make sense of the indices ** returned by ANfileinfo(). ** ** Steps in testing: ** 1. Create arrays for SDS and RI ** 2. Open/Create test file. ** 3. Start Annotation interface. ** 4. Write file labels and descriptions. ** 5. For 'REPs' count do ** A. create/write SDS(DFSDxxx) to file. ** B. Write 2 labels and 2 descriptions for SDS. ** C. Write image(DFR8xxx) to file ** D. Write 2 labels and 2 descriptions for RI. ** 6. Close annotation interface ** 7. Close file ** 8. For 'REPs' count do ** A. Get dimension and ref of SDS ** B. Verify label and descriptions for SDS ->check_lab_desc() ** C. Get image ref and image ** D. Verify label and descriptions for Image->check_lab_desc() ** 9. Check file labels and descriptions->check_fann() ** 10. Clean up. ****************************************************************/ void test_man(void) { uint8 pal[768]; uint8 *image = NULL; uint8 *newimage = NULL; uint16 refnum; int32 ret; intn rank; int i, j; int32 dimsizes[2]; float32 *data = NULL; int32 file_handle; /* file handle */ int32 an_handle; /* annotation interface handle */ int32 ann_handle; /* annotation handle */ /***** generate float array and image *****/ if ((data = (float32 *)malloc(ROWS * COLS * sizeof(float32))) == NULL) { fprintf(stderr, "Error: unable to allocate space\n"); return; } if ((image = (uint8 *)malloc(ROWS * COLS * sizeof(char))) == NULL) { fprintf(stderr, "Error: unable to allocate space\n"); return; } if ((newimage = (uint8 *)malloc(ROWS * COLS * sizeof(char))) == NULL) { fprintf(stderr, "Error: unable to allocate space\n"); return; } /* dimensions of SDS/image */ dimsizes[0] = ROWS; dimsizes[1] = COLS; /* generate images */ gen2Dfloat(ROWS, COLS, data); genimage(ROWS, COLS, data, image); /* Start annotation Interface on file */ ret = file_handle = Hopen(TESTFILE, DFACC_CREATE, 0); RESULT("Hopen"); ret = an_handle = ANstart(file_handle); RESULT("ANstart"); /******** Write file labels and descriptions *********/ MESSAGE(5, printf("*** Writing file labels and descriptions ***\n");); /* create and write file labels */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreatef(an_handle, AN_FILE_LABEL); RESULT("ANcreatef"); ret = ANwriteann(ann_handle, file_lab[i], (int32)strlen(file_lab[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } /* create and write file descriptions */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreatef(an_handle, AN_FILE_DESC); RESULT("ANcreatef"); ret = ANwriteann(ann_handle, file_desc[i], (int32)strlen(file_desc[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } /* set dimensions for SDS */ ret = DFSDsetdims(2, dimsizes); RESULT("DFSDsetdims"); /******** Write labels and descriptions *********/ MESSAGE(5, printf("*** Writing labels and descriptions along with SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { /* Set number type */ ret = DFSDsetNT(DFNT_FLOAT32); RESULT("DFSDsetNT"); /* write out scientific data set first */ ret = DFSDadddata(TESTFILE, 2, dimsizes, (void *)data); RESULT("DFSDadddata"); /* write out annotations for 2 out of every 3 SDS */ if ((j % 2) != 0) { refnum = DFSDlastref(); /* get ref of SDS */ /* create and write data labels */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreate(an_handle, DFTAG_NDG, refnum, AN_DATA_LABEL); RESULT("ANcreate"); ret = ANwriteann(ann_handle, labsds[i], (int32)strlen(labsds[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } /* create and write data descriptions */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreate(an_handle, DFTAG_NDG, refnum, AN_DATA_DESC); RESULT("ANcreate"); ret = ANwriteann(ann_handle, descsds[i], (int32)strlen(descsds[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } } /* Write image out */ ret = DFR8addimage(TESTFILE, (void *)image, COLS, ROWS, 0); RESULT("DFR8addimage"); refnum = DFR8lastref(); /* get ref of image */ /* create and write image labels */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreate(an_handle, DFTAG_RIG, refnum, AN_DATA_LABEL); RESULT("ANcreate"); ret = ANwriteann(ann_handle, labris[i], (int32)strlen(labris[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } /* create and write image descriptions */ for (i = 1; i >= 0; i--) { ret = ann_handle = ANcreate(an_handle, DFTAG_RIG, refnum, AN_DATA_DESC); RESULT("ANcreate"); ret = ANwriteann(ann_handle, descris[i], (int32)strlen(descris[i])); RESULT("ANwriteann"); ret = ANendaccess(ann_handle); RESULT("ANendaccess"); } } /* end for j */ /* End writing annotations */ ANend(an_handle); Hclose(file_handle); /* close file */ /******** Read labels and descriptions *********/ MESSAGE(5, printf("*** Reading labels and descriptions for SDS and RIS ***\n");); for (j = 0; j < REPS; j++) { /* get dims for SDS */ ret = DFSDgetdims(TESTFILE, &rank, dimsizes, 3); RESULT("DFSDgetdims"); refnum = DFSDlastref(); /* now get ref of SDS */ /* Check data set labels/descriptions of SDS */ if ((j % 2) != 0) /* read in annotations for 2 out of every 3 */ { if (check_lab_desc(TESTFILE, DFTAG_NDG, refnum, labsds, descsds) == FAIL) return; /* end of test */ } /* get image */ ret = DFR8getimage(TESTFILE, newimage, (int32)COLS, (int32)ROWS, pal); RESULT("DFR8getimage"); refnum = DFR8lastref(); /* now get ref of image */ /* Check image labels/descriptions of image */ if (check_lab_desc(TESTFILE, DFTAG_RIG, refnum, labris, descris) == FAIL) return; /* end of test */ } /***************** Read file labels and descriptions */ MESSAGE(5, printf("*** Reading file label and descriptions ***\n");); /* Verify file labels/descs */ if (check_fann(TESTFILE) == FAIL) return; /* end of test */ /* check the re-writing of annotations works. Only file labels are tested but it should suffice to test the internals */ if (check_fann_rewrite(TESTFILE) == FAIL) return; /* end of test */ /* free up space */ free(data); free(image); free(newimage); } /* test_man() */ hdf4-hdf4.3.1/hdf/test/manf.f000066400000000000000000000450351503061704500156460ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine manf (number_failed) C C C Test program: stores annotations in a file using fortran multi-file C annotation interface. C Writes several SDSs and corresponding RISs to a file. C Writes labels and descriptions for all 2 out of 3 SDS C Writes labels and descriptions for all RISs. C C Input file: none C Output files: manf.hdf C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'manf') integer numberfailed, ISFIRST, NOTFIRST, MAXLENLAB integer MAXLEN_DESC, ROWS, COLS, REPS parameter ( ISFIRST = 1, * NOTFIRST = 0, * MAXLENLAB = 30, * MAXLEN_DESC = 500, * ROWS = 10, * COLS = 10, * REPS = 2 ) integer refnum integer ret integer rank integer j, dimsizes(2) integer fhandle, anhandle, ahandle character*30 labsds, labsds2 character*30 labris, labris2 character*500 descsds, descsds2 character*500 descris, descris2 character*35 lab1, lab2 character*100 desc1, desc2 character pal(768) character*64 TESTFILE character*1 CR character image(ROWS, COLS), newimage(ROWS, COLS) real data(ROWS, COLS) call ptestban('Testing', myname) number_failed = 0 numberfailed = 0 CR = char(10) TESTFILE = 'manf.hdf' C *** set up file labels and descriptions *** lab1 = 'File label #1: aaa' lab2 = 'File label #2: bbbbbb' desc1 = 'File descr #1: This is a test file annotation' desc2 = 'File descr #2: One more test ...' C *** set up object labels and descriptions *** labsds = 'Object label #1: sds' labsds2 = 'Object label #1: sds2' labris = 'Object label #2: image' labris2 = 'Object label #2: image2' descsds = 'Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 ' * // CR // ' 13 14 15 16 17 18 19 20 ' * // ' **END SDS DESCR**' descsds2 = 'Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 ' * // CR // ' 13 14 15 16 17 18 19 20 ' * // ' **END SDS2 DESCR**' descris = 'Object Descr #2: A B C D E F G H I J K L ' * // CR // ' M N O **END IMAGE DESCR **' descris2 = 'Object Descr #2: A B C D E F G H I J K L ' * // CR // ' M N O **END IMAGE2 DESCR **' C *** generate float array and image *** rank = 2 dimsizes(1)=ROWS dimsizes(2)=COLS call gen2Dfloat(ROWS, COLS, data) call genimage(ROWS, COLS, data, image) ret = dssdims(rank,dimsizes) call VRFY(ret,'dssdims',number_failed) C *** start annotation on file *** fhandle = hopen(TESTFILE,DFACC_CREATE, 0) ret = fhandle call VRFY(ret,'fhanlde',number_failed) ahandle = afstart(fhandle) ret = ahandle call VRFY(ret,'afstart',number_failed) C *** write file 2 labels/ 2 descriptions *** anhandle = affcreate(ahandle, AN_FILE_LABEL) ret = anhandle call VRFY(ret, 'affcreate', number_failed) ret = afwriteann(anhandle,lab2,len(lab2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = affcreate(ahandle, AN_FILE_LABEL) ret = anhandle call VRFY(ret, 'affcreate', number_failed) ret = afwriteann(anhandle,lab1,len(lab1)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = affcreate(ahandle, AN_FILE_DESC) ret = anhandle call VRFY(ret, 'affcreate', number_failed) ret = afwriteann(anhandle,desc2,len(desc2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = affcreate(ahandle, AN_FILE_DESC) ret = anhandle call VRFY(ret, 'affcreate', number_failed) ret = afwriteann(anhandle,desc1,len(desc1)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) C *** Write data labels and descriptions *** call MESSAGE(VERBO_HI, + '*** Writing labels & descriptions with SDS and RIS ***') do 100 j=1,REPS C *** write out scientific data set ret = dsadata(TESTFILE, rank,dimsizes, data) call VRFY(ret, 'dsadata', number_failed) C **** write out annotations for 2 out of every 3 if (mod(j,3) .ne. 0) then refnum = dslref() C ********** Write out 2 labels for each SDS ***************** anhandle = afcreate(ahandle,DFTAG_SDG,refnum,AN_DATA_LABEL) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,labsds2,len(labsds2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = afcreate(ahandle,DFTAG_SDG,refnum,AN_DATA_LABEL) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,labsds,len(labsds)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) C *********** Write out 2 descriptions for each SDS *********** anhandle = afcreate(ahandle,DFTAG_SDG,refnum,AN_DATA_DESC) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,descsds2,len(descsds2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = afcreate(ahandle,DFTAG_SDG,refnum,AN_DATA_DESC) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,descsds,len(descsds)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) endif ret = d8aimg(TESTFILE, image, COLS, ROWS, 0) call VRFY(ret, 'd8aimg', number_failed) refnum = DFR8lastref() C ********** Write out 2 labels for each Image ***************** anhandle = afcreate(ahandle, DFTAG_RIG, refnum, AN_DATA_LABEL) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,labris2,len(labris2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = afcreate(ahandle, DFTAG_RIG, refnum, AN_DATA_LABEL) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,labris,len(labris)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) C *********** Write out 2 descriptions for each Image *********** anhandle = afcreate(ahandle, DFTAG_RIG, refnum, AN_DATA_DESC) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,descris2,len(descris2)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) anhandle = afcreate(ahandle, DFTAG_RIG, refnum, AN_DATA_DESC) ret = anhandle call VRFY(ret, 'afcreate', number_failed) ret = afwriteann(anhandle,descris,len(descris)) call VRFY(ret, 'afwriteann', number_failed) ret = afendaccess(anhandle) call VRFY(ret, 'afendaccess', number_failed) 100 continue C ******* End writing annotatons ********** ret = afend(ahandle) call VRFY(ret, 'afend', number_failed) ret = hclose(fhandle) call VRFY(ret, 'hclose', number_failed) C******** Read data labels and descriptions ********* call MESSAGE(VERBO_HI, + '*** Reading labels and descriptions for SDS and RIS ***') do 200 j=1,REPS ret = dsgdims(TESTFILE, rank,dimsizes,3) call VRFY(ret, 'dsgdims', number_failed) refnum = dslref() C ****** read in annotations for 2 out of every 3 if (mod(j,3) .ne. 0) then call man_check_lab_desc(TESTFILE, DFTAG_SDG, refnum, * labsds, descsds, numberfailed) call man_check_lab_desc(TESTFILE, DFTAG_SDG, refnum, * labsds2, descsds2, numberfailed) endif C **** read annotations for images ret = d8gimg(TESTFILE, newimage, COLS, ROWS, pal) call VRFY(ret, 'd8gimg', number_failed) refnum = DFR8lastref() call man_check_lab_desc(TESTFILE, DFTAG_RIG, refnum, * labris, descris, numberfailed) call man_check_lab_desc(TESTFILE, DFTAG_RIG, refnum, * labris2, descris2, numberfailed) 200 continue C ****** Check file labels/descriptions ******* call MESSAGE(VERBO_HI, + '*** Reading file labels and descriptions ***') call check_fan(TESTFILE, 0, lab1, desc1, numberfailed) call check_fan(TESTFILE, 1, lab2, desc2, numberfailed) if ( numberfailed .eq. 0 ) then call MESSAGE(VERBO_HI, + '***** ALL ANxxx TESTS SUCCESSFUL ***** ') else print *,'***** ',numberfailed,' TESTS FAILED ***** ' endif return end C************************************************************** C C man_check_lab_desc: read and compare label and description C with expected ones C C************************************************************** subroutine man_check_lab_desc(fname, tag, ref, label, desc, * num_failed) implicit none include 'fortest.inc' character*(*) fname, label, desc integer tag, ref, num_failed integer MAXLENLAB, MAXLEN_DESC parameter ( MAXLENLAB = 30, * MAXLEN_DESC = 500 ) character*15 ERR_FILE parameter (ERR_FILE = 'Fortran_err.dat') integer inlablen, indesclen, ret character*80 error_message integer fileh, anh integer nflabs, nfdescs, nolabs, nodescs integer numdlabels, numddescs integer annlen, j, found, fannlen integer dlabels(2), ddescs(2) character*30 inlabel, fannlabel character*500 indesc, fanndesc integer error_code error_code = 0 C ***** Test if the file fname is an HDF file C C ret = hishdff(fname) if (ret .ne. 1) then num_failed = num_failed + 1 write(*,*) 'HISHDFF function failed' endif ret = hestringf(error_code, error_message) if (ret .ne. 0) then num_failed = num_failed + 1 write(*,*) 'HESTRINGF function failed' goto 1111 endif if (error_message(1:len(error_message)) .ne. "No error") then num_failed = num_failed + 1 write(*,*) 'HESTRINGF function failed' endif 1111 continue C C Call hishdff with file not being an hdf file. Call should return C 0 C ret = hishdff('manf.f') if (ret .ne. 0) then num_failed = num_failed + 1 write(*,*) 'HISHDFF function failed' endif C C ***** end of hishdff test C C *****start annotation access on file ***** fileh = hopen('nonexist', DFACC_READ,0) ret = heprntf(ERR_FILE, 0) fileh = hopen(fname, DFACC_READ,0) ret = fileh call VRFY(ret, 'hopen', num_failed) anh = afstart(fileh) ret = anh call VRFY(ret, 'afstart', num_failed) ret = affileinfo(anh,nflabs,nfdescs,nolabs,nodescs) call VRFY(ret, 'affileinfo', num_failed) numdlabels = afnumann(anh, AN_DATA_LABEL, tag, ref) call VRFY(numdlabels, 'afnumann', num_failed) numddescs = afnumann(anh, AN_DATA_DESC, tag, ref) call VRFY(numddescs, 'afnumann', num_failed) ret = afannlist(anh, AN_DATA_LABEL, tag, ref, dlabels) call VRFY(ret, 'afannlist', num_failed) ret = afannlist(anh, AN_DATA_DESC, tag, ref, ddescs) call VRFY(ret, 'afannlist', num_failed) C ***** Look for label in list ****** found = 0 fannlen = 0 fannlabel = ' ' do 300 j=1, numdlabels annlen = afannlen(dlabels(j)) call VRFY(annlen, 'afannlen', num_failed) ret = afreadann(dlabels(j), inlabel, MAXLENLAB) call VRFY(ret, 'afreadann', num_failed) ret = afendaccess(dlabels(j)) call VRFY(ret, 'afendaccess', num_failed) if (inlabel .eq. label) then found = 1 inlablen = annlen fannlabel = inlabel endif 300 continue C ****** Check if we found label in list ***** if (inlablen .ne. len(label)) then print *,' >>>BAD LABEL LENGTH.' print *,' IS: ', inlablen print *,' SHOULD BE: ', len(label) num_failed = num_failed + 1 endif if (fannlabel .ne. label) then print *,' >>>BAD LABEL.' print *,' IS: ', fannlabel print *,' SHOULD BE: ', label num_failed = num_failed + 1 endif C ***** look for description in list found = 0 fannlen = 0 fanndesc = ' ' do 400 j=1, numddescs annlen = afannlen(ddescs(j)) call VRFY(annlen, 'afannlen', num_failed) ret = afreadann(ddescs(j), indesc, MAXLEN_DESC) call VRFY(ret, 'afreadann', num_failed) ret = afendaccess(ddescs(j)) call VRFY(ret, 'afendaccess', num_failed) if (indesc .eq. desc) then found = 1 indesclen = annlen fanndesc = indesc endif 400 continue if (indesclen .ne. len(desc)) then print *,' >>>BAD DESCRIPTION LENGTH.' print *,' IS: ', indesclen print *,' SHOULD BE: ', len(desc) num_failed = num_failed + 1 endif if (fanndesc .ne. desc) then print *,' >>>BAD DESCRIPTION.' print *,' IS: ', fanndesc print *,' SHOULD BE: ', desc num_failed = num_failed + 1 endif C ****** close file ******* ret = afend(anh) call VRFY(ret, 'afend', num_failed) ret = hclose(fileh) call VRFY(ret, 'hclose', num_failed) ret = hclose(fileh) ret = heprntf(ERR_FILE, 0) return end C************************************************************ C C SUBROUTINE check_fan C C************************************************************ subroutine check_fan(fname, index, label, desc, num_failed) implicit none include 'fortest.inc' character*(*) fname, label, desc integer index, num_failed integer MAXLENFLAB, MAXLEN_FDESC parameter ( MAXLENFLAB = 35, * MAXLEN_FDESC = 100 ) integer ret integer fileh, annh, anh integer nflabs, nfdescs, nolabs, nodescs integer fannlen character*35 flabel character*100 fdesc C **** We check both file label/description fileh = hopen(fname, DFACC_READ,0) ret = fileh call VRFY(ret, 'hopen', num_failed) anh = afstart(fileh) ret = anh call VRFY(ret, 'afstart', num_failed) ret = affileinfo(anh,nflabs,nfdescs,nolabs,nodescs) call VRFY(ret, 'affileinfo', num_failed) C ***** Read file label ********** annh = afselect(anh, index, AN_FILE_LABEL) call VRFY(ret, 'afselect', num_failed) fannlen = afannlen(annh) call VRFY(fannlen, 'afannlen', num_failed) ret = afreadann(annh, flabel, fannlen) call VRFY(ret, 'afreadann', num_failed) ret = afendaccess(annh) call VRFY(ret, 'afendaccess', num_failed) if (fannlen .ne. len(label)) then print *,' >>>BAD LABEL LENGTH.' print *,' IS: ', fannlen print *,' SHOULD BE: ', len(label) num_failed = num_failed + 1 endif if (flabel .ne. label) then print *,' >>>BAD LABEL.' print *,' IS: ', flabel print *,' SHOULD BE: ', label num_failed = num_failed + 1 endif C **** Read file description ***** annh = afselect(anh, index, AN_FILE_DESC) call VRFY(ret, 'afselect', num_failed) fannlen = afannlen(annh) call VRFY(fannlen, 'afannlen', num_failed) ret = afreadann(annh, fdesc, fannlen) call VRFY(ret, 'afreadann', num_failed) ret = afendaccess(annh) call VRFY(ret, 'afendaccess', num_failed) if (fannlen .ne. len(desc)) then print *,' >>>BAD DESCRIPTION LENGTH.' print *,' IS: ', fannlen print *,' SHOULD BE: ', len(desc) num_failed = num_failed + 1 endif if (fdesc .ne. desc) then print *,' >>>BAD DESCRIPTION.' print *,' IS: ', fdesc print *,' SHOULD BE: ', desc num_failed = num_failed + 1 endif C ****** close file ******* ret = afend(anh) call VRFY(ret, 'afend', num_failed) ret = hclose(fileh) call VRFY(ret, 'hclose', num_failed) return end hdf4-hdf4.3.1/hdf/test/mgr.c000066400000000000000000006313541503061704500155140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*********************************************************** * * Test program: mgr * * Test the multi-file raster image interface * *************************************************************/ #define TESTFILE "tmgr.hdf" #define TESTFILE2 "tmgrchk.hdf" #define DATAFILE "test_files/tmgr.dat" #include "tproto.h" #include "mfgr.h" #include "mfgr_priv.h" /* Local pre-processor macros */ #define XDIM 0 #define YDIM 1 #define MAX_IMG_NAME 64 /* Maximum length of image names for this test */ /* Local Data to verify image information in datafile */ const struct { const char *name; int32 ncomp; int32 nt; int32 il; int32 dimsizes[2]; int32 n_attr; } datafile_info[] = {/* This information applies to the "test_files/tmgr.dat" file */ {"Raster Image #0", 3, DFNT_UCHAR8, MFGR_INTERLACE_PIXEL, {13, 15}, 2}, {"Raster Image #1", 3, DFNT_UCHAR8, MFGR_INTERLACE_LINE, {13, 15}, 2}, {"Raster Image #2", 3, DFNT_UCHAR8, MFGR_INTERLACE_COMPONENT, {13, 15}, 2}, {"Test Image #1", 4, DFNT_UINT16, MFGR_INTERLACE_PIXEL, {21, 23}, 3}, {"Test Image #2", 2, DFNT_FLOAT64, MFGR_INTERLACE_PIXEL, {17, 19}, 3}}; const uint8 image00[15][13][3] = {{{0, 0, 0}, {1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}}, {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}}, {{2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}}, {{3, 3, 3}, {4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}}, {{4, 4, 4}, {5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}}, {{5, 5, 5}, {6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}}, {{6, 6, 6}, {7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}}, {{7, 7, 7}, {8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}}, {{8, 8, 8}, {9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}}, {{9, 9, 9}, {10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}}, {{10, 10, 10}, {11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}, {22, 22, 22}}, {{11, 11, 11}, {12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}, {22, 22, 22}, {23, 23, 23}}, {{12, 12, 12}, {13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}, {22, 22, 22}, {23, 23, 23}, {24, 24, 24}}, {{13, 13, 13}, {14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}, {22, 22, 22}, {23, 23, 23}, {24, 24, 24}, {25, 25, 25}}, {{14, 14, 14}, {15, 15, 15}, {16, 16, 16}, {17, 17, 17}, {18, 18, 18}, {19, 19, 19}, {20, 20, 20}, {21, 21, 21}, {22, 22, 22}, {23, 23, 23}, {24, 24, 24}, {25, 25, 25}, {26, 26, 26}}}; const uint8 image1[15][13][3] = {{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11}, {12, 0, 1}, {2, 3, 4}, {5, 6, 7}, {8, 9, 10}, {11, 12, 0}, {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}, {{1, 1, 3}, {3, 5, 5}, {7, 7, 9}, {9, 11, 11}, {13, 1, 1}, {3, 3, 5}, {5, 7, 7}, {9, 9, 11}, {11, 13, 1}, {1, 3, 3}, {5, 5, 7}, {7, 9, 9}, {11, 11, 13}}, {{2, 3, 2}, {3, 6, 7}, {6, 7, 10}, {11, 10, 11}, {14, 2, 3}, {2, 3, 6}, {7, 6, 7}, {10, 11, 10}, {11, 14, 2}, {3, 2, 3}, {6, 7, 6}, {7, 10, 11}, {10, 11, 14}}, {{3, 3, 3}, {3, 7, 7}, {7, 7, 11}, {11, 11, 11}, {15, 3, 3}, {3, 3, 7}, {7, 7, 7}, {11, 11, 11}, {11, 15, 3}, {3, 3, 3}, {7, 7, 7}, {7, 11, 11}, {11, 11, 15}}, {{4, 5, 6}, {7, 4, 5}, {6, 7, 12}, {13, 14, 15}, {12, 4, 5}, {6, 7, 4}, {5, 6, 7}, {12, 13, 14}, {15, 12, 4}, {5, 6, 7}, {4, 5, 6}, {7, 12, 13}, {14, 15, 12}}, {{5, 5, 7}, {7, 5, 5}, {7, 7, 13}, {13, 15, 15}, {13, 5, 5}, {7, 7, 5}, {5, 7, 7}, {13, 13, 15}, {15, 13, 5}, {5, 7, 7}, {5, 5, 7}, {7, 13, 13}, {15, 15, 13}}, {{6, 7, 6}, {7, 6, 7}, {6, 7, 14}, {15, 14, 15}, {14, 6, 7}, {6, 7, 6}, {7, 6, 7}, {14, 15, 14}, {15, 14, 6}, {7, 6, 7}, {6, 7, 6}, {7, 14, 15}, {14, 15, 14}}, {{7, 7, 7}, {7, 7, 7}, {7, 7, 15}, {15, 15, 15}, {15, 7, 7}, {7, 7, 7}, {7, 7, 7}, {15, 15, 15}, {15, 15, 7}, {7, 7, 7}, {7, 7, 7}, {7, 15, 15}, {15, 15, 15}}, {{8, 9, 10}, {11, 12, 13}, {14, 15, 8}, {9, 10, 11}, {12, 8, 9}, {10, 11, 12}, {13, 14, 15}, {8, 9, 10}, {11, 12, 8}, {9, 10, 11}, {12, 13, 14}, {15, 8, 9}, {10, 11, 12}}, {{9, 9, 11}, {11, 13, 13}, {15, 15, 9}, {9, 11, 11}, {13, 9, 9}, {11, 11, 13}, {13, 15, 15}, {9, 9, 11}, {11, 13, 9}, {9, 11, 11}, {13, 13, 15}, {15, 9, 9}, {11, 11, 13}}, {{10, 11, 10}, {11, 14, 15}, {14, 15, 10}, {11, 10, 11}, {14, 10, 11}, {10, 11, 14}, {15, 14, 15}, {10, 11, 10}, {11, 14, 10}, {11, 10, 11}, {14, 15, 14}, {15, 10, 11}, {10, 11, 14}}, {{11, 11, 11}, {11, 15, 15}, {15, 15, 11}, {11, 11, 11}, {15, 11, 11}, {11, 11, 15}, {15, 15, 15}, {11, 11, 11}, {11, 15, 11}, {11, 11, 11}, {15, 15, 15}, {15, 11, 11}, {11, 11, 15}}, {{12, 13, 14}, {15, 12, 13}, {14, 15, 12}, {13, 14, 15}, {12, 12, 13}, {14, 15, 12}, {13, 14, 15}, {12, 13, 14}, {15, 12, 12}, {13, 14, 15}, {12, 13, 14}, {15, 12, 13}, {14, 15, 12}}, {{13, 13, 15}, {15, 13, 13}, {15, 15, 13}, {13, 15, 15}, {13, 13, 13}, {15, 15, 13}, {13, 15, 15}, {13, 13, 15}, {15, 13, 13}, {13, 15, 15}, {13, 13, 15}, {15, 13, 13}, {15, 15, 13}}, {{14, 15, 14}, {15, 14, 15}, {14, 15, 14}, {15, 14, 15}, {14, 14, 15}, {14, 15, 14}, {15, 14, 15}, {14, 15, 14}, {15, 14, 14}, {15, 14, 15}, {14, 15, 14}, {15, 14, 15}, {14, 15, 14}}}; const uint8 image2[15][13][3] = {{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11}, {12, 1, 0}, {3, 2, 5}, {4, 7, 6}, {9, 8, 11}, {10, 13, 2}, {3, 0, 1}, {6, 7, 4}, {5, 10, 11}, {8, 9, 14}}, {{3, 2, 1}, {0, 7, 6}, {5, 4, 11}, {10, 9, 8}, {15, 4, 5}, {6, 7, 0}, {1, 2, 3}, {12, 13, 14}, {15, 8, 5}, {4, 7, 6}, {1, 0, 3}, {2, 13, 12}, {15, 14, 9}}, {{6, 7, 4}, {5, 2, 3}, {0, 1, 14}, {15, 12, 13}, {10, 7, 6}, {5, 4, 3}, {2, 1, 0}, {15, 14, 13}, {12, 11, 8}, {9, 10, 11}, {12, 13, 14}, {15, 0, 1}, {2, 3, 4}}, {{9, 8, 11}, {10, 13, 12}, {15, 14, 1}, {0, 3, 2}, {5, 10, 11}, {8, 9, 14}, {15, 12, 13}, {2, 3, 0}, {1, 6, 11}, {10, 9, 8}, {15, 14, 13}, {12, 3, 2}, {1, 0, 7}}, {{12, 13, 14}, {15, 8, 9}, {10, 11, 4}, {5, 6, 7}, {0, 13, 12}, {15, 14, 9}, {8, 11, 10}, {5, 4, 7}, {6, 1, 14}, {15, 12, 13}, {10, 11, 8}, {9, 6, 7}, {4, 5, 2}}, {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11}, {12, 1, 0}, {3, 2, 5}, {4, 7, 6}, {9, 8, 11}, {10, 13, 2}, {3, 0, 1}, {6, 7, 4}, {5, 10, 11}, {8, 9, 14}}, {{3, 2, 1}, {0, 7, 6}, {5, 4, 11}, {10, 9, 8}, {15, 4, 5}, {6, 7, 0}, {1, 2, 3}, {12, 13, 14}, {15, 8, 5}, {4, 7, 6}, {1, 0, 3}, {2, 13, 12}, {15, 14, 9}}, {{6, 7, 4}, {5, 2, 3}, {0, 1, 14}, {15, 12, 13}, {10, 7, 6}, {5, 4, 3}, {2, 1, 0}, {15, 14, 13}, {12, 11, 8}, {9, 10, 11}, {12, 13, 14}, {15, 0, 1}, {2, 3, 4}}, {{9, 8, 11}, {10, 13, 12}, {15, 14, 1}, {0, 3, 2}, {5, 10, 11}, {8, 9, 14}, {15, 12, 13}, {2, 3, 0}, {1, 6, 11}, {10, 9, 8}, {15, 14, 13}, {12, 3, 2}, {1, 0, 7}}, {{12, 13, 14}, {15, 8, 9}, {10, 11, 4}, {5, 6, 7}, {0, 13, 12}, {15, 14, 9}, {8, 11, 10}, {5, 4, 7}, {6, 1, 14}, {15, 12, 13}, {10, 11, 8}, {9, 6, 7}, {4, 5, 2}}, {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11}, {12, 1, 0}, {3, 2, 5}, {4, 7, 6}, {9, 8, 11}, {10, 13, 2}, {3, 0, 1}, {6, 7, 4}, {5, 10, 11}, {8, 9, 14}}, {{3, 2, 1}, {0, 7, 6}, {5, 4, 11}, {10, 9, 8}, {15, 4, 5}, {6, 7, 0}, {1, 2, 3}, {12, 13, 14}, {15, 8, 5}, {4, 7, 6}, {1, 0, 3}, {2, 13, 12}, {15, 14, 9}}, {{6, 7, 4}, {5, 2, 3}, {0, 1, 14}, {15, 12, 13}, {10, 7, 6}, {5, 4, 3}, {2, 1, 0}, {15, 14, 13}, {12, 11, 8}, {9, 10, 11}, {12, 13, 14}, {15, 0, 1}, {2, 3, 4}}, {{9, 8, 11}, {10, 13, 12}, {15, 14, 1}, {0, 3, 2}, {5, 10, 11}, {8, 9, 14}, {15, 12, 13}, {2, 3, 0}, {1, 6, 11}, {10, 9, 8}, {15, 14, 13}, {12, 3, 2}, {1, 0, 7}}, {{12, 13, 14}, {15, 8, 9}, {10, 11, 4}, {5, 6, 7}, {0, 13, 12}, {15, 14, 9}, {8, 11, 10}, {5, 4, 7}, {6, 1, 14}, {15, 12, 13}, {10, 11, 8}, {9, 6, 7}, {4, 5, 2}}}; const uint16 image3[23][21][4] = { {{0, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}, {5, 6, 7, 8}, {6, 7, 8, 9}, {7, 8, 9, 10}, {8, 9, 10, 11}, {9, 10, 11, 12}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{10, 11, 12, 13}, {2, 2, 2, 2}, {12, 13, 14, 15}, {2, 2, 2, 2}, {14, 15, 16, 17}, {2, 2, 2, 2}, {16, 17, 18, 19}, {2, 2, 2, 2}, {18, 19, 20, 21}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{20, 21, 22, 23}, {2, 2, 2, 2}, {1, 2, 3, 4}, {2, 2, 2, 2}, {3, 4, 5, 6}, {2, 2, 2, 2}, {5, 6, 7, 8}, {2, 2, 2, 2}, {7, 8, 9, 10}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{9, 10, 11, 12}, {2, 2, 2, 2}, {11, 12, 13, 14}, {2, 2, 2, 2}, {13, 14, 15, 16}, {2, 2, 2, 2}, {15, 16, 17, 18}, {2, 2, 2, 2}, {17, 18, 19, 20}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{19, 20, 21, 22}, {2, 2, 2, 2}, {0, 1, 2, 3}, {2, 2, 2, 2}, {2, 3, 4, 5}, {2, 2, 2, 2}, {4, 5, 6, 7}, {2, 2, 2, 2}, {6, 7, 8, 9}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{8, 9, 10, 11}, {2, 2, 2, 2}, {10, 11, 12, 13}, {2, 2, 2, 2}, {12, 13, 14, 15}, {2, 2, 2, 2}, {14, 15, 16, 17}, {2, 2, 2, 2}, {16, 17, 18, 19}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}, {2, 2, 2, 2}, {0, 0, 0, 0}}, {{18, 19, 20, 21}, {19, 20, 21, 22}, {20, 21, 22, 23}, {0, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}, {5, 6, 7, 8}, {6, 7, 8, 9}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{7, 8, 9, 10}, {8, 9, 10, 11}, {9, 10, 11, 12}, {10, 11, 12, 13}, {11, 12, 13, 14}, {12, 13, 14, 15}, {13, 14, 15, 16}, {14, 15, 16, 17}, {15, 16, 17, 18}, {16, 17, 18, 19}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{17, 18, 19, 20}, {18, 19, 20, 21}, {19, 20, 21, 22}, {20, 21, 22, 23}, {0, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}, {5, 6, 7, 8}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{6, 7, 8, 9}, {7, 8, 9, 10}, {8, 9, 10, 11}, {9, 10, 11, 12}, {10, 11, 12, 13}, {11, 12, 13, 14}, {12, 13, 14, 15}, {13, 14, 15, 16}, {14, 15, 16, 17}, {15, 16, 17, 18}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{16, 17, 18, 19}, {17, 18, 19, 20}, {18, 19, 20, 21}, {19, 20, 21, 22}, {20, 21, 22, 23}, {0, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}; const float64 image4[19][17][2] = {{{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {6.0, 6.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {9.0, 9.0}, {0.0, 0.0}}, {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}}; static void test_mgr_init(void); static void test_mgr_image_b1a(int flag); static void test_mgr_image_b1b(int flag); static void test_mgr_image_b2a1aa(int flag); static void test_mgr_image_b2a1bb1(int flag); static void test_mgr_image_b2a1bb2(int flag); static void test_mgr_image_b2a1cc1(int flag); static void test_mgr_image_b2a1cc2(int flag); static void test_mgr_image_b2a2bb(int flag); static void test_mgr_image_b2a2cc(int flag); static void test_mgr_image_b2b1(int flag); static void test_mgr_image(int flag); static void test_mgr_index(int flag); static void test_mgr_interlace(int flag); static void test_mgr_lut(int flag); static void test_mgr_special(int flag); extern void test_mgr_attr(); extern void test_mgr_compress(); extern void test_mgr_dup_images(); /* Test outline: I. Interface Initialization A. GRstart B. GRend C. GRfileinfo II. Create Images A. GRcreate/GRselect/GRendaccess w/GRgetiminfo B. Write/Read images 1. With no Data a. Default fill value b. user defined fill value 2. With real Data a. New Image 1. With default fill value aa. Whole image bb. Sub-setted image cc. Sub-sampled image 2. With user defined fill value aa. Whole image bb. Sub-setted image cc. Sub-sampled image b. Existing Image 1. Whole image 2. Sub-setted image 3. Sub-sampled image III. ID/Ref/Index Functions A. GRidtoref B. GRreftoindex IV. Interlace Functions [Need to be implemented] A. GRreqlutil B. GRreqimageil V. Palette Functions A. GRgetlutid w/GRgetlutinfo B. Read/Write Palettes 1. GRwritelut 2. GRreadlut C. GRluttoref VI. Special Element Functions [Need to be implemented] A. GRsetexternalfile B. GRsetaccesstype VII. Attribute Functions A. GRattrinfo B. Read/Write Attributes 1. GRsetattr 2. GRgetattr C. GRfindattr VIII. Old-Style Raster Image Access A. Read data from RLE compressed image B. Create RLE compressed image & write to it (not implemented) C. Read data from 8-bit JPEG compressed image D. Create 8-bit JPEG compressed image & write to it E. Read data from 24-bit JPEG compressed image F. Create 24-bit JPEG compressed image & write to it IX. Compressed image Functions X. Chunking write/read test */ /**************************************************************** ** ** test_mgr_init(): Multi-file Raster Initialization Test Routine ** ** I. Interface Initialization ** A. GRstart ** B. GRend ** C. GRfileinfo ** ****************************************************************/ static void test_mgr_init(void) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 n_datasets; /* number of datasets */ int32 n_attrs; /* number of attributes */ int32 ret; /* generic return value */ const char *datafile = get_srcdir_filename(DATAFILE); /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Initialization routines\n");); MESSAGE(8, printf("Try creating a new file and checking it out\n");); /* Create a new file */ fid = Hopen(TESTFILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Try initializing the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Test getting the number of datasets and the number of file attributes */ ret = (intn)GRfileinfo(grid, &n_datasets, &n_attrs); CHECK_VOID(ret, FAIL, "GRfileinfo"); if (n_datasets != 0 || n_attrs != 0) { MESSAGE(3, printf("Error! Number of datasets/attributes in new file incorrect\n");); num_errs++; } /* end if */ /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); MESSAGE(8, printf("Try checking out an existing file\n");); /* Perform the same test on an existing file */ fid = Hopen(datafile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Try initializing the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Test getting the number of datasets and the number of file attributes */ ret = (intn)GRfileinfo(grid, &n_datasets, &n_attrs); CHECK_VOID(ret, FAIL, "GRfileinfo"); if (n_datasets != 5 || n_attrs != 2) { MESSAGE(3, printf("Error! Number of datasets/attributes in existing file incorrect\n");); num_errs++; } /* end if */ /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_init() */ /* Sub-tests for test_mgr_image() */ static void test_mgr_image_b1a(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B1a - Read/Write images - with no Data - Default Fill Value */ MESSAGE(8, printf("Check out I/O on image with no data, using the default fill value\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {4, 5}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ float32 image[5][4][3]; /* space for the image data */ float32 image0[5][4][3]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ /* Create empty image with default fill value */ riid = GRcreate(grid, "Empty Image", 3, DFNT_FLOAT32, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); /* Set Chunk cache to hold 3 chunks */ ret = GRsetchunkcache(riid, 3, 0); CHECK_VOID(ret, FAIL, "GRsetchunkcache"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); memset(image, 255, (size_t)(dims[0] * dims[1] * 3) * sizeof(float32)); /* '0' is the default fill value */ memset(image0, 0, (size_t)(dims[0] * dims[1] * 3) * sizeof(float32)); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE(3, printf("Error reading data for image with default fill value\n");); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b1a() */ static void test_mgr_image_b1b(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B1b - Read/Write images - with no Data - User-defined Fill Value */ MESSAGE(8, printf("Check out I/O on image with no data, using User Defined fill-value\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {5, 7}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ float64 image[7][5][4]; /* space for the image data */ float64 fill_pixel[4] = {1.3, -2.4, 1000.3, .25}; /* pixel with fill values */ float64 image0[7][5][4]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ /* Create empty image with default fill value */ riid = GRcreate(grid, "Empty Image2", 4, DFNT_FLOAT64, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Set the fill-value */ ret = GRsetattr(riid, FILL_ATTR, DFNT_FLOAT64, sizeof(fill_pixel) / sizeof(float64), fill_pixel); CHECK_VOID(ret, FAIL, "GRsetattr"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); memset(image, 0, (size_t)(dims[0] * dims[1] * 4) * sizeof(float64)); /* fill the memory-only with the default pixel fill-value */ HDmemfill(image0, fill_pixel, sizeof(fill_pixel), sizeof(image0) / sizeof(fill_pixel)); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE(3, printf("Error reading data for image with user defined fill-value\n");); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b1b() */ static void test_mgr_image_b2a1aa(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B2a1aa - Read/Write images - with real Data - New Image - with Default Fill Value - Whole Image */ MESSAGE(8, printf("Check out I/O on new image with real data, with Default fill-value, Whole Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 3 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 8 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 2 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE int32 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_INT32 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {1, -2}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {-2, 1}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ intn i, j; /* local counting variables */ /* fill the memory-only with the default pixel fill-value */ for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((j % 2) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(fill_pixel)); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(fill_pixel2)); } /* end for */ } /* end for */ memcpy(image, image0, sizeof(image0)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a1aa", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRwriteimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, whole image\n", __LINE__);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a1aa() */ static void test_mgr_image_b2a1bb1(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B2a1bb - Read/Write images - with real Data - New Image - with Default Fill Value - Sub-setted Image */ MESSAGE(8, printf("Check out I/O on new image with real data, with Default fill-value, Writing " "Sub-setted Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 4 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE uint16 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_UINT16 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {40000, 4800, 3, 1000}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {1230, 1, 65000, 35000}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j, k; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ memset(image0, 0, sizeof(image0)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if (((i > (TEST_YDIM / 3)) && (i < (2 * TEST_YDIM / 3))) && ((j > (TEST_XDIM / 4)) && (j < (3 * TEST_XDIM / 4)))) { if ((j % 2) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(fill_pixel)); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(fill_pixel2)); memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(image)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a1bb", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create sub-setted window with only the filled pixels in it */ start[XDIM] = (TEST_XDIM / 4) + 1; start[YDIM] = (TEST_YDIM / 3) + 1; count[XDIM] = ((3 * TEST_XDIM / 4) - (TEST_XDIM / 4)) - 1; count[YDIM] = ((2 * TEST_YDIM / 3) - (TEST_YDIM / 3)) - 1; stride[XDIM] = stride[YDIM] = 1; ret = GRwriteimage(riid, start, stride, count, sub_image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the whole image back */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, sub-setted image\n", __LINE__);); MESSAGE(8, for (i = 0; i < TEST_YDIM; i++) for (j = 0; j < TEST_XDIM; j++) for (k = 0; k < TEST_NCOMP; k++) if (image[i][j][k] != image0[i][j][k]) printf("Location: [%d][%d][%d] image=%u, image0=%u \n", i, j, k, (unsigned)image[i][j][k], (unsigned)image0[i][j][k]);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a1bb1() */ static void test_mgr_image_b2a1bb2(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ MESSAGE(8, printf("Check out I/O on new image with real data, with Default fill-value, Reading " "Sub-setted Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 4 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE uint16 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_UINT16 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {40000, 4800, 3, 1000}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {1230, 1, 65000, 35000}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ memset(image0, 0, sizeof(image0)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((j % 2) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(fill_pixel)); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(fill_pixel2)); if (((i > (TEST_YDIM / 3)) && (i < (2 * TEST_YDIM / 3))) && ((j > (TEST_XDIM / 4)) && (j < (3 * TEST_XDIM / 4)))) { memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(image)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a1bb2", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); /* Set Chunk cache to hold 3 chunks */ ret = GRsetchunkcache(riid, 3, 0); CHECK_VOID(ret, FAIL, "GRsetchunkcache"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create whole image */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRwriteimage(riid, start, stride, dims, image0); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the sub-set image back */ start[XDIM] = (TEST_XDIM / 4) + 1; start[YDIM] = (TEST_YDIM / 3) + 1; count[XDIM] = ((3 * TEST_XDIM / 4) - (TEST_XDIM / 4)) - 1; count[YDIM] = ((2 * TEST_YDIM / 3) - (TEST_YDIM / 3)) - 1; stride[XDIM] = stride[YDIM] = 1; ret = GRreadimage(riid, start, stride, count, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, sub_image, (size_t)(count[XDIM] * count[YDIM]) * sizeof(fill_pixel))) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, sub-setted image\n", __LINE__);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a1bb2() */ static void test_mgr_image_b2a1cc1(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B2a1cc - Read/Write images - with real Data - New Image - with Default Fill Value - Sub-sampled Image */ MESSAGE(8, printf("Check out I/O on new image with real data, with Default fill-value, Writing " "Sub-sampled Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 5 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE int16 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_INT16 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {-20000, -1, 4800, 3, 1000}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {45, 1230, 1, 32000, -32000}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j, k; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ memset(image0, 0, sizeof(TEST_VARTYPE) * (size_t)(TEST_YDIM * TEST_XDIM * TEST_NCOMP)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((i % 2) != 0 && (j % 2) != 0) { if ((j % 3) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(TEST_VARTYPE) * TEST_NCOMP); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(TEST_VARTYPE) * TEST_NCOMP); memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(TEST_VARTYPE) * (size_t)(TEST_YDIM * TEST_XDIM * TEST_NCOMP)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a1cc", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create sub-sampled window with only the filled pixels in it */ start[XDIM] = 1; start[YDIM] = 1; count[XDIM] = TEST_XDIM / 2; count[YDIM] = TEST_YDIM / 2; stride[XDIM] = stride[YDIM] = 2; ret = GRwriteimage(riid, start, stride, count, sub_image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the whole image back */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(TEST_VARTYPE) * TEST_YDIM * TEST_XDIM * TEST_NCOMP)) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, sub-sampled image\n", __LINE__);); MESSAGE(8, for (i = 0; i < TEST_YDIM; i++) for (j = 0; j < TEST_XDIM; j++) for (k = 0; k < TEST_NCOMP; k++) if (image[i][j][k] != image0[i][j][k]) printf("Location: [%d][%d][%d] image=%d, image0=%d \n", (int)i, (int)j, (int)k, (int)image[i][j][k], (int)image0[i][j][k]);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } static void test_mgr_image_b2a1cc2(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ MESSAGE(8, printf("Check out I/O on new image with real data, with Default fill-value, Reading " "Sub-sampled Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 4 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE uint32 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_UINT32 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {4000000, 4800, 3, 1000}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {1230, 1, 65000, 350000}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ memset(image0, 0, sizeof(image0)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((j % 2) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(fill_pixel)); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(fill_pixel2)); if ((i % 2) && (j % 2)) { memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(image)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a1cc2", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create whole image */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRwriteimage(riid, start, stride, dims, image0); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the sub-sample image back */ start[XDIM] = 1; start[YDIM] = 1; count[XDIM] = TEST_XDIM / 2; count[YDIM] = TEST_YDIM / 2; stride[XDIM] = stride[YDIM] = 2; ret = GRreadimage(riid, start, stride, count, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, sub_image, (size_t)(count[XDIM] * count[YDIM]) * sizeof(fill_pixel))) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, sub-sampled image\n", __LINE__);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a1cc() */ static void test_mgr_image_b2a2bb(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B2a2bb - Read/Write images - with real Data - New Image - with User-Defined Fill Value - Sub-setted * Image */ MESSAGE(8, printf("Check out I/O on new image with real data, with User-Defined fill-value, Writing " "Sub-setted Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 4 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE float32 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_FLOAT32 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {(TEST_VARTYPE)-3.75, (TEST_VARTYPE)4.5, (TEST_VARTYPE)-0.375, (TEST_VARTYPE)100.125}; /* pixel with fill values */ TEST_VARTYPE pixel[TEST_NCOMP] = {(TEST_VARTYPE)-20.00, (TEST_VARTYPE)4.875, (TEST_VARTYPE)0.125, (TEST_VARTYPE)1.0}; /* pixel with fill values */ TEST_VARTYPE pixel2[TEST_NCOMP] = {(TEST_VARTYPE)1.25, (TEST_VARTYPE)1.0, (TEST_VARTYPE)-6500.0, (TEST_VARTYPE)350.0}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j, k; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ HDmemfill(image0, fill_pixel, sizeof(fill_pixel), sizeof(image0) / sizeof(fill_pixel)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if (((i > (TEST_YDIM / 3)) && (i < (2 * TEST_YDIM / 3))) && ((j > (TEST_XDIM / 4)) && (j < (3 * TEST_XDIM / 4)))) { if ((j % 2) == 0) memcpy(&image0[i][j][0], pixel, sizeof(pixel)); else memcpy(&image0[i][j][0], pixel2, sizeof(pixel2)); memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(image)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a2bb", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Set the fill-value */ ret = GRsetattr(riid, FILL_ATTR, TEST_NT, TEST_NCOMP, fill_pixel); CHECK_VOID(ret, FAIL, "GRsetattr"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create sub-setted window with only the filled pixels in it */ start[XDIM] = (TEST_XDIM / 4) + 1; start[YDIM] = (TEST_YDIM / 3) + 1; count[XDIM] = ((3 * TEST_XDIM / 4) - (TEST_XDIM / 4)) - 1; count[YDIM] = ((2 * TEST_YDIM / 3) - (TEST_YDIM / 3)) - 1; stride[XDIM] = stride[YDIM] = 1; ret = GRwriteimage(riid, start, stride, count, sub_image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the whole image back */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE( 3, printf("Error reading data for new image with user-defined fill-value, sub-setted image\n");); MESSAGE(8, for (i = 0; i < TEST_YDIM; i++) for (j = 0; j < TEST_XDIM; j++) for (k = 0; k < TEST_NCOMP; k++) if (!H4_FLT_ABS_EQUAL(image[i][j][k], image0[i][j][k])) printf("Location: [%d][%d][%d] image=%f, image0=%f \n", i, j, k, (double)image[i][j][k], (double)image0[i][j][k]);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a2bb() */ static void test_mgr_image_b2a2cc(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ /* B2a2cc - Read/Write images - with real Data - New Image - with User-Defined Fill Value - Sub-sampled * Image */ MESSAGE(8, printf("Check out I/O on new image with real data, with User-Defined fill-value, Writing " "Sub-sampled Image\n");); /* Open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 19 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 23 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 5 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE int16 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_INT16 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {-3, 4, -13, 100, 1200}; /* pixel with fill values */ TEST_VARTYPE pixel[TEST_NCOMP] = {-20, 4, 0, 1, -367}; /* pixel with fill values */ TEST_VARTYPE pixel2[TEST_NCOMP] = {1, -11, -6500, 350, 20}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE sub_image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE *sub_ptr; int32 start[2]; /* start of image data to use */ int32 stride[2]; /* stride of image data to use */ int32 count[2]; /* # of pixels of image data to use */ intn i, j, k; /* local counting variables */ /* fill the memory-only with the default pixel fill-values */ HDmemfill(image0, fill_pixel, sizeof(fill_pixel), sizeof(image0) / sizeof(fill_pixel)); sub_ptr = (TEST_VARTYPE *)sub_image; for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((i % 2) != 0 && (j % 2) != 0) { if ((j % 3) == 0) memcpy(&image0[i][j][0], pixel, sizeof(TEST_VARTYPE) * TEST_NCOMP); else memcpy(&image0[i][j][0], pixel2, sizeof(TEST_VARTYPE) * TEST_NCOMP); memcpy(sub_ptr, &image0[i][j][0], TEST_NCOMP * sizeof(TEST_VARTYPE)); sub_ptr += TEST_NCOMP; } /* end if */ } /* end for */ } /* end for */ /* initialize the disk buffer */ memset(image, 255, sizeof(TEST_VARTYPE) * (size_t)(TEST_YDIM * TEST_XDIM * TEST_NCOMP)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Image B2a2cc", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Set the fill-value */ ret = GRsetattr(riid, FILL_ATTR, TEST_NT, TEST_NCOMP, fill_pixel); CHECK_VOID(ret, FAIL, "GRsetattr"); /* Check if creating chunked GR */ if (flag) { /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); } /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); /* Create sub-sampled window with only the filled pixels in it */ start[XDIM] = 1; start[YDIM] = 1; count[XDIM] = TEST_XDIM / 2; count[YDIM] = TEST_YDIM / 2; stride[XDIM] = stride[YDIM] = 2; ret = GRwriteimage(riid, start, stride, count, sub_image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the whole image back */ start[XDIM] = start[YDIM] = 0; stride[XDIM] = stride[YDIM] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(TEST_VARTYPE) * TEST_YDIM * TEST_XDIM * TEST_NCOMP)) { MESSAGE( 3, printf( "Error reading data for new image with user-defined fill-value, sub-sampled image\n");); MESSAGE(8, for (i = 0; i < TEST_YDIM; i++) for (j = 0; j < TEST_XDIM; j++) for (k = 0; k < TEST_NCOMP; k++) if (image[i][j][k] != image0[i][j][k]) printf("Location: [%d][%d][%d] image=%d, image0=%d \n", (int)i, (int)j, (int)k, (int)image[i][j][k], (int)image0[i][j][k]);); num_errs++; } /* end if */ /* check if we are doing chunked tests */ if (flag) { /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2a2cc() */ static void test_mgr_image_b2b1(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ const char *datafile = get_srcdir_filename(DATAFILE); (void)flag; /* B2b1 - Read/Write images - with real Data - Existing Image - Whole Image */ MESSAGE(8, printf("Check out I/O from Existing Image - Whole Image\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(datafile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Try initializing the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 n_datasets; /* number of datasets */ int32 n_attrs; /* number of attributes */ intn i; /* local counting variables */ ret = (intn)GRfileinfo(grid, &n_datasets, &n_attrs); CHECK_VOID(ret, FAIL, "GRfileinfo"); for (i = 0; i < n_datasets; i++) { int32 riid; /* RI ID for an image */ char name[MAX_IMG_NAME]; /* storage for the image's name */ int32 ncomp; /* number of components */ int32 nt; /* NT of the components */ int32 il; /* interlace of the image data */ int32 dimsizes[2]; /* dimension sizes of the image */ int32 n_attr; /* number of attributes with each image */ void *img_data; /* buffer for the image data */ /* Attach to the image */ riid = GRselect(grid, i); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the Image information */ *name = '\0'; ret = GRgetiminfo(riid, name, &ncomp, &nt, &il, dimsizes, &n_attr); CHECK_VOID(ret, FAIL, "GRgetiminfo"); /* Check the name for correctness */ if (strcmp(name, datafile_info[i].name)) { MESSAGE(3, printf("Error! Name for image %d is: %s, should be %s\n", i, name, datafile_info[i].name);); num_errs++; } /* end if */ /* Check the # of components */ if (ncomp != datafile_info[i].ncomp) { MESSAGE(3, printf("Error! Number of components for image %d is: %ld, should be %ld\n", i, (long)ncomp, (long)datafile_info[i].ncomp);); num_errs++; } /* end if */ /* Check the NT of components */ if (nt != datafile_info[i].nt) { MESSAGE(3, printf("Error! NT of components for image %d is: %ld, should be %ld\n", i, (long)nt, (long)datafile_info[i].nt);); num_errs++; } /* end if */ /* Check the interlace of components */ if (il != datafile_info[i].il) { MESSAGE(3, printf("Error! Interlace of components for image %d is: %ld, should be %ld\n", i, (long)il, (long)datafile_info[i].il);); num_errs++; } /* end if */ /* Check the x-dimension of the image */ if (dimsizes[XDIM] != datafile_info[i].dimsizes[XDIM]) { MESSAGE(3, printf("Error! X-dim of image %d is: %ld, should be %ld\n", i, (long)dimsizes[XDIM], (long)datafile_info[i].dimsizes[XDIM]);); num_errs++; } /* end if */ /* Check the y-dimension of the image */ if (dimsizes[YDIM] != datafile_info[i].dimsizes[YDIM]) { MESSAGE(3, printf("Error! Y-dim of image %d is: %ld, should be %ld\n", i, (long)dimsizes[YDIM], (long)datafile_info[i].dimsizes[YDIM]);); num_errs++; } /* end if */ /* Check the # of attributes of the image */ if (n_attr != datafile_info[i].n_attr) { MESSAGE(3, printf("Error! # of attributes for image %d is: %ld, should be %ld\n", i, (long)n_attr, (long)datafile_info[i].n_attr);); num_errs++; } /* end if */ /* Check the image data itself */ { int32 start[2]; int32 stride[2]; img_data = malloc((size_t)(dimsizes[0] * dimsizes[1] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); CHECK_VOID(img_data, NULL, "malloc"); memset(img_data, 0, (size_t)(dimsizes[0] * dimsizes[1] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dimsizes, img_data); CHECK_VOID(ret, FAIL, "GRreadimage"); switch (i) { case 0: if (0 != memcmp(img_data, image00, sizeof(image00))) { MESSAGE(3, printf("Error reading data for image %d\n", i);); num_errs++; } /* end if */ break; case 1: if (0 != memcmp(img_data, image1, sizeof(image1))) { MESSAGE(3, printf("Error reading data for image %d\n", i);); num_errs++; } /* end if */ break; case 2: if (0 != memcmp(img_data, image2, sizeof(image2))) { MESSAGE(3, printf("Error reading data for image %d\n", i);); num_errs++; } /* end if */ break; case 3: if (0 != memcmp(img_data, image3, sizeof(image3))) { MESSAGE(3, printf("Error reading data for image %d\n", i);); num_errs++; } /* end if */ break; case 4: if (0 != memcmp(img_data, image4, sizeof(image4))) { MESSAGE(3, printf("Error reading data for image %d\n", i);); num_errs++; } /* end if */ break; } /* end switch */ free(img_data); } /* end block */ /* End access to the image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* end for */ } /* end block */ /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_b2b1() */ static void test_mgr_image_chunk(int flag) { int32 cdims[2] = {1, 1}; /* chunk dims */ int32 *rcdims; /* for SDgetchunkinfo() */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ int32 cflags; /* chunk flags */ int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ (void)flag; /* Open up the existing datafile and get the image information from it */ fid = Hopen(TESTFILE2, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { #ifdef TEST_XDIM #undef TEST_XDIM #endif /* TEST_XDIM */ #define TEST_XDIM 3 #ifdef TEST_YDIM #undef TEST_YDIM #endif /* TEST_YDIM */ #define TEST_YDIM 8 #ifdef TEST_NCOMP #undef TEST_NCOMP #endif /* TEST_NCOMP */ #define TEST_NCOMP 2 #ifdef TEST_VARTYPE #undef TEST_VARTYPE #endif /* TEST_VARTYPE */ #define TEST_VARTYPE int32 #ifdef TEST_NT #undef TEST_NT #endif /* TEST_NT */ #define TEST_NT DFNT_INT32 int32 riid; /* RI ID for the new image */ int32 dims[2] = {TEST_XDIM, TEST_YDIM}; /* dimensions for the empty image */ uint16 ref; /* RI ref #. */ int32 index; /* RI index # */ TEST_VARTYPE image[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ TEST_VARTYPE fill_pixel[TEST_NCOMP] = {1, -2}; /* pixel with fill values */ TEST_VARTYPE fill_pixel2[TEST_NCOMP] = {-2, 1}; /* pixel with fill values */ TEST_VARTYPE image0[TEST_YDIM][TEST_XDIM][TEST_NCOMP]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ intn i, j; /* local counting variables */ /* fill the memory-only with the default pixel fill-value */ for (i = 0; i < TEST_YDIM; i++) { for (j = 0; j < TEST_XDIM; j++) { if ((j % 2) == 0) memcpy(&image0[i][j][0], fill_pixel, sizeof(fill_pixel)); else memcpy(&image0[i][j][0], fill_pixel2, sizeof(fill_pixel2)); } /* end for */ } /* end for */ memcpy(image, image0, sizeof(image0)); /* Create empty image with default fill value */ riid = GRcreate(grid, "Test Chunk Image B2a1aa", TEST_NCOMP, TEST_NT, MFGR_INTERLACE_PIXEL, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Create chunked GR chunk is 2x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 2; cdims[1] = chunk_def.chunk_lengths[1] = 2; ret = GRsetchunk(riid, chunk_def, HDF_CHUNK); CHECK_VOID(ret, FAIL, "GRsetchunk"); /* Set Chunk cache to hold 2 chunks */ ret = GRsetchunkcache(riid, 2, 0); CHECK_VOID(ret, FAIL, "GRsetchunkcache"); /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK_VOID(ref, (uint16)FAIL, "GRidtoref"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRwriteimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Initialize the GR interface again */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Get the index of the newly created image */ index = GRreftoindex(grid, ref); CHECK_VOID(index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, index); CHECK_VOID(riid, FAIL, "GRselect"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); if (0 != memcmp(image, image0, sizeof(image0))) { MESSAGE(3, printf("%d:Error reading data for new image with default fill-value, whole image\n", __LINE__);); num_errs++; } /* end if */ /* Get chunk lengths */ ret = GRgetchunkinfo(riid, &rchunk_def, &cflags); CHECK_VOID(ret, FAIL, "GRgetchunkinfo"); rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if GR is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test 1. GRgetchunkinfo returned wrong values\n"); fprintf(stderr, "cdims[0]=%d,cdims[1]=%d \n", (int)cdims[0], (int)cdims[1]); fprintf(stderr, "rcdims[0]=%d,rcdims[1]=%d \n", (int)rcdims[0], (int)rcdims[1]); fprintf(stderr, "cflags =%d \n", (int)cflags); } /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_image_chunk() */ /**************************************************************** ** ** test_mgr_image(): Multi-file Raster Image I/O Test Routine ** II. Create Images ** A. GRcreate/GRselect/GRendaccess w/GRgetiminfo ** B. Write/Read images ** 1. With no Data ** a. Default fill value ** b. user defined fill value ** 2. With real Data ** a. New Image ** 1. With default fill value ** aa. Whole image ** bb. Sub-setted image ** cc. Sub-sampled image ** 2. With user defined fill value ** aa. Whole image ** bb. Sub-setted image ** cc. Sub-sampled image ** b. Existing Image ** 1. Whole image ** 2. Sub-setted image ** 3. Sub-sampled image ** ****************************************************************/ static void test_mgr_image(int flag) { /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Image I/O routines\n");); test_mgr_image_b1a(flag); test_mgr_image_b1b(flag); test_mgr_image_b2a1aa(flag); test_mgr_image_b2a1bb1(flag); test_mgr_image_b2a1bb2(flag); test_mgr_image_b2a1cc1(flag); test_mgr_image_b2a1cc2(flag); test_mgr_image_b2a2bb(flag); test_mgr_image_b2a2cc(flag); test_mgr_image_b2b1(flag); test_mgr_image_chunk(flag); } /* end test_mgr_image() */ /**************************************************************** ** ** test_mgr_index(): Multi-file Raster ID/Ref/Index Test Routine ** ** III. ID/Ref/Index Functions ** A. GRidtoref ** B. GRreftoindex ** ****************************************************************/ static void test_mgr_index(int flag) { (void)flag; /* output message about test being performed */ MESSAGE(6, printf("Testing Multi-File Raster id/ref/index routines\n");); /* I believe that these are adequately tested in the test_mgr_image routine -QAK */ } /* end test_mgr_index() */ /**************************************************************** ** ** test_mgr_interlace(): Multi-file Raster Interlace Test Routine ** ** IV. Interlace Functions [Need to be implemented] ** A. GRreqlutil - tested in the palette test below. ** B. GRreqimageil ** ****************************************************************/ static void test_mgr_interlace(int flag) { int32 fid; /* hdf file id */ int32 grid; /* grid for the interface */ int32 n_datasets; /* number of datasets */ int32 n_attrs; /* number of attributes */ int32 ret; /* generic return value */ void *image; /* image to retrieve */ /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Interlace routines\n");); /* open up the existing datafile and get the image information from it */ if (flag) fid = Hopen(TESTFILE2, DFACC_RDWR, 0); else fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* initialize the gr interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { intn i, j; /* local counting variables */ ret = (intn)GRfileinfo(grid, &n_datasets, &n_attrs); CHECK_VOID(ret, FAIL, "GRfileinfo"); for (i = 0; i < n_datasets; i++) { int32 riid; /* RI ID for an image */ char name[MAX_IMG_NAME]; /* storage for the image's name */ int32 ncomp; /* number of components */ int32 nt; /* NT of the components */ int32 il; /* interlace of the image data */ int32 start[2]; int32 stride[2]; int32 dimsizes[2]; /* dimension sizes of the image */ int32 n_attr; /* number of attributes with each image */ void *img_data; /* buffer for the image data */ /* Attach to the image */ riid = GRselect(grid, i); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the Image information */ *name = '\0'; ret = GRgetiminfo(riid, name, &ncomp, &nt, &il, dimsizes, &n_attr); CHECK_VOID(ret, FAIL, "GRgetiminfo"); image = malloc((size_t)(dimsizes[XDIM] * dimsizes[YDIM] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); CHECK_VOID(image, NULL, "malloc"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dimsizes, image); /* Check the image data itself */ for (j = (intn)MFGR_INTERLACE_PIXEL; j <= (intn)MFGR_INTERLACE_COMPONENT; j++) { void *pixel_buf; img_data = malloc((size_t)(dimsizes[0] * dimsizes[1] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); CHECK_VOID(img_data, NULL, "malloc"); pixel_buf = malloc((size_t)(dimsizes[0] * dimsizes[1] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); CHECK_VOID(pixel_buf, NULL, "malloc"); memset(img_data, 0, (size_t)(dimsizes[0] * dimsizes[1] * ncomp * DFKNTsize(nt | DFNT_NATIVE))); ret = GRreqimageil(riid, j); CHECK_VOID(ret, FAIL, "GRreqimageil"); start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dimsizes, img_data); CHECK_VOID(ret, FAIL, "GRreadimage"); GRIil_convert(image, MFGR_INTERLACE_PIXEL, pixel_buf, (gr_interlace_t)j, dimsizes, ncomp, nt); if (0 != memcmp(img_data, pixel_buf, (size_t)(dimsizes[XDIM] * dimsizes[YDIM] * ncomp * DFKNTsize(nt | DFNT_NATIVE)))) { MESSAGE(3, printf("Error reading data for image %d, j=%d\n", i, j);); num_errs++; } free(img_data); free(pixel_buf); } /* end for */ free(image); /* End access to the image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* end for */ } /* end block */ /* shut down the gr interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_interlace() */ /**************************************************************** ** ** test_mgr_lut_a(): Multi-file Raster LUT/Palette Test Routine ** ** V. Palette Functions ** A. GRgetlutid w/GRgetlutinfo ** B. Read/Write Palettes ** 1. GRwritelut ** 2. GRreadlut ** C. GRluttoref ** ****************************************************************/ static void test_mgr_lut_a(int flag) { int32 fid; /* hdf file id */ int32 grid; /* grid for the interface */ int32 ret; /* generic return value */ (void)flag; /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Palette routines\n");); /* open up the existing datafile and get the image information from it */ fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* initialize the gr interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* pick up here -QAK2 */ { intn i, j; /* local counting variables */ int32 riid; /* RI ID for an image */ int32 lutid; /* RI ID for an image */ char name[MAX_IMG_NAME]; /* storage for the image's name */ int32 ncomp; /* number of components */ int32 pal_ncomp; /* number of palette components */ int32 nt; /* NT of the components */ int32 pal_nt; /* NT of the palette components */ int32 il; /* interlace of the image data */ int32 pal_il; /* interlace of the palette data */ int32 dimsizes[2]; /* dimension sizes of the image */ int32 pal_entries; /* number of entries in the palette */ int32 n_attr; /* number of attributes with each image */ uint8 *tmp_data; /* temporary buffer pointer */ void *pal_data; /* buffer for the palette data */ uint16 pal_ref; /* reference number of the palette */ /* Attach to the image */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the Image information */ *name = '\0'; ret = GRgetiminfo(riid, name, &ncomp, &nt, &il, dimsizes, &n_attr); CHECK_VOID(ret, FAIL, "GRgetiminfo"); /* Get the number of palettes */ ret = GRgetnluts(riid); VERIFY_VOID(ret, 0, "GRgetnluts"); lutid = GRgetlutid(riid, 0); CHECK_VOID(lutid, FAIL, "GRgetlutid"); /* Get the Palette information */ ret = GRgetlutinfo(lutid, &pal_ncomp, &pal_nt, &pal_il, &pal_entries); CHECK_VOID(ret, FAIL, "GRgetlutinfo"); /* Check the palette values, they should all be "nil" values */ if (pal_ncomp != 0) { MESSAGE(3, printf("Error! Incorrect palette components\n");); num_errs++; } /* end if */ if (pal_nt != DFNT_NONE) { MESSAGE(3, printf("Error! Incorrect palette number-type\n");); num_errs++; } /* end if */ if (pal_il != (-1)) { MESSAGE(3, printf("Error! Incorrect palette interlace, pal_il=%d\n", (int)pal_il);); num_errs++; } /* end if */ if (pal_entries != 0) { MESSAGE(3, printf("Error! Incorrect palette # of entries\n");); num_errs++; } /* end if */ /* Set the palette components */ pal_ncomp = 3; pal_nt = DFNT_UINT8; pal_il = (int32)MFGR_INTERLACE_PIXEL; pal_entries = 256; pal_data = malloc((size_t)(pal_entries * pal_ncomp * DFKNTsize(pal_nt | DFNT_NATIVE))); CHECK_VOID(pal_data, NULL, "malloc"); /* Initialize the palette data, in 'pixel' interlace */ tmp_data = (uint8 *)pal_data; for (j = 0; j < pal_entries; j++) for (i = 0; i < pal_ncomp; i++) *tmp_data++ = (uint8)(j * i); /* Write the palette out */ ret = GRwritelut(lutid, pal_ncomp, pal_nt, pal_il, pal_entries, pal_data); CHECK_VOID(ret, FAIL, "GRwritelut"); /* Check the image data itself */ for (j = (intn)MFGR_INTERLACE_PIXEL; j <= (intn)MFGR_INTERLACE_COMPONENT; j++) { void *pixel_buf; int32 dimsizes2[2]; tmp_data = malloc((size_t)(pal_entries * pal_ncomp * DFKNTsize(pal_nt | DFNT_NATIVE))); CHECK_VOID(tmp_data, NULL, "malloc"); pixel_buf = malloc((size_t)(pal_entries * pal_ncomp * DFKNTsize(pal_nt | DFNT_NATIVE))); CHECK_VOID(pixel_buf, NULL, "malloc"); memset(tmp_data, 0, (size_t)(pal_entries * pal_ncomp * DFKNTsize(pal_nt | DFNT_NATIVE))); ret = GRreqlutil(lutid, j); CHECK_VOID(ret, FAIL, "GRreqlutil"); ret = GRreadlut(lutid, tmp_data); dimsizes2[XDIM] = 1; dimsizes2[YDIM] = pal_entries; GRIil_convert(pal_data, MFGR_INTERLACE_PIXEL, pixel_buf, (gr_interlace_t)j, dimsizes2, pal_ncomp, pal_nt); if (0 != memcmp(tmp_data, pixel_buf, (size_t)(pal_entries * pal_ncomp * DFKNTsize(pal_nt | DFNT_NATIVE)))) { MESSAGE(3, printf("Error reading data for palette j=%d\n", j);); num_errs++; } free(tmp_data); free(pixel_buf); } /* end for */ free(pal_data); /* This lutid should yield a valid reference number, which is not 0 - BMR */ pal_ref = GRluttoref(lutid); CHECK_VOID(pal_ref, 0, "GRluttoref"); /* Now, this bogus lutid should cause GRluttoref to return a 0 - BMR */ pal_ref = GRluttoref(0); VERIFY_VOID(pal_ref, 0, "GRluttoref"); /* End access to the image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* end block */ /* shut down the gr interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_lut_a() */ #define GR_LUTBFILE "gr2.hdf" #define GR_LUTB_X_LENGTH 15 #define GR_LUTB_Y_LENGTH 10 /**************************************************************** ** ** test_mgr_lut_b(): Multi-file Raster LUT/Palette Test Routine ** ** V. Palette Functions - Test for writing palette with no image data to ** file. ** ****************************************************************/ static void test_mgr_lut_b(int flag) { int32 gr_id, ri_id, file_id, pal_id, status, num_entries, ri_idx = 0; int32 data_type, ncomp, num_comp, interlace_mode; uint8 palette_data[256 * 3]; uint8 r_palette_data[256 * 3]; intn i; int32 dims[2] = {GR_LUTB_X_LENGTH, GR_LUTB_Y_LENGTH}; (void)flag; /* Create and open the file. */ file_id = Hopen(GR_LUTBFILE, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initiate the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); ncomp = 1; dims[0] = 20; dims[1] = 20; interlace_mode = MFGR_INTERLACE_PIXEL; ri_id = GRcreate(gr_id, "Image_1", ncomp, DFNT_UINT8, interlace_mode, dims); CHECK_VOID(ri_id, FAIL, "GRcreate"); /* Initialize the palette to grayscale. */ for (i = 0; i < 256; i++) { palette_data[i * 3] = i; palette_data[i * 3 + 1] = i; palette_data[i * 3 + 2] = i; } /* Set palette characteristics. */ data_type = DFNT_UINT8; num_entries = 256; num_comp = 3; /* Get the id for the palette. */ pal_id = GRgetlutid(ri_id, ri_idx); CHECK_VOID(pal_id, FAIL, "GRgetlutid"); /* Write the palette to file. */ status = GRwritelut(pal_id, num_comp, data_type, interlace_mode, num_entries, (void *)palette_data); CHECK_VOID(status, FAIL, "GRgetlutid"); status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); file_id = Hopen(GR_LUTBFILE, DFACC_READ, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); ri_idx = GRnametoindex(gr_id, "Image_1"); CHECK_VOID(ri_idx, FAIL, "GRnametoindex"); ri_id = GRselect(gr_id, ri_idx); CHECK_VOID(ri_id, FAIL, "GRselect"); pal_id = GRgetlutid(ri_id, ri_idx); CHECK_VOID(pal_id, FAIL, "GRgetlutid"); /* Read the palette data. */ status = GRreadlut(pal_id, (void *)r_palette_data); CHECK_VOID(status, FAIL, "GRreadlut"); /* Verify correct palette contents */ if (memcmp(palette_data, r_palette_data, 256 * 3) != 0) { MESSAGE(3, printf("Error reading data for palette\n");); num_errs++; } /* end if */ /* Terminate access to the image. */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface. */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); /* Close the file. */ status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end test_mgr_lut_b() */ /**************************************************************** ** ** test_mgr_lut(): Multi-file Raster LUT/Palette Test Routine ** ** V. Palette Functions ** A. GRgetlutid w/GRgetlutinfo ** B. Read/Write Palettes ** 1. GRwritelut ** 2. GRreadlut ** C. GRluttoref ** ****************************************************************/ static void test_mgr_lut(int flag) { /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Palette routines\n");); test_mgr_lut_a(flag); test_mgr_lut_b(flag); } /* end test_mgr_lut() */ /**************************************************************** ** ** test_mgr_special(): Multi-file Raster Special Element Test Routine ** ** VI. Special Element Functions [Need to be implemented] ** A. GRsetexternalfile ** B. GRsetaccesstype ** ****************************************************************/ static void test_mgr_special(int flag) { (void)flag; /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Special Element routines\n");); } /* end test_mgr_special() */ #define OLDRLEFILE "test_files/8bit.dat" #define OLDGREYJPEGFILE "test_files/greyjpeg.dat" #define OLDJPEGFILE "test_files/jpeg.dat" #define JPEGX 46 #define JPEGY 23 static const uint8 jpeg_8bit_j80[JPEGY][JPEGX] = { {200, 200, 200, 200, 200, 200, 200, 200, 202, 202, 201, 201, 201, 200, 200, 200, 201, 201, 200, 200, 200, 201, 202, 202, 202, 202, 201, 200, 200, 200, 200, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 200, 200, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 201, 201, 201, 200, 200, 201, 201, 201, 200, 199, 199, 199, 199, 200, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, 200, 199, 202, 202, 202, 202, 202, 200, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 200, 200, 200, 199, 199, 200, 200, 200, 201, 201, 200, 200, 200, 200, 200, 201, 201, 201, 200, 200, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 198, 198, 198, 199, 199, 198, 198, 198, 199, 200, 201, 197, 197, 197, 198, 198, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 200, 200, 201, 202, 202, 203, 201, 200, 199, 198, 199, 201, 204, 205, 203, 202, 200, 199, 198, 200, 202, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 202, 203, 205, 207, 208, 209, 205, 203, 201, 200, 202, 205, 208, 211, 214, 211, 206, 202, 200, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {199, 199, 198, 199, 200, 202, 204, 205, 202, 200, 197, 198, 201, 204, 205, 205, 220, 204, 207, 222, 225, 201, 206, 213, 205, 218, 219, 224, 222, 198, 222, 208, 222, 208, 235, 201, 189, 204, 198, 202, 199, 201, 209, 192, 192, 217}, {200, 200, 199, 199, 200, 201, 202, 203, 210, 208, 205, 203, 201, 197, 191, 186, 170, 212, 216, 191, 222, 217, 218, 185, 216, 226, 200, 193, 207, 232, 193, 221, 210, 124, 127, 218, 223, 192, 197, 207, 207, 209, 210, 220, 209, 184}, {202, 201, 201, 200, 200, 200, 201, 201, 196, 197, 200, 203, 203, 200, 195, 191, 196, 180, 168, 123, 34, 66, 56, 74, 57, 83, 73, 81, 94, 221, 72, 64, 120, 119, 83, 100, 207, 190, 198, 198, 94, 44, 57, 50, 213, 215}, {54, 54, 54, 53, 53, 54, 54, 54, 49, 51, 55, 59, 62, 63, 63, 62, 54, 110, 65, 43, 69, 40, 54, 36, 53, 67, 57, 65, 66, 61, 94, 83, 83, 69, 102, 99, 64, 214, 195, 90, 28, 46, 63, 51, 43, 57}, {52, 52, 53, 54, 54, 55, 55, 55, 56, 54, 51, 48, 47, 46, 48, 49, 56, 63, 48, 72, 67, 55, 51, 65, 50, 48, 46, 70, 49, 67, 63, 86, 59, 107, 60, 73, 40, 44, 102, 36, 40, 218, 192, 165, 101, 44}, {198, 199, 200, 201, 202, 202, 202, 202, 199, 197, 194, 190, 188, 190, 194, 198, 196, 151, 88, 202, 61, 71, 148, 169, 165, 188, 139, 77, 86, 70, 81, 84, 163, 226, 206, 184, 52, 46, 48, 165, 204, 189, 179, 213, 208, 79}, {199, 200, 201, 202, 202, 201, 200, 199, 201, 203, 204, 205, 206, 209, 214, 218, 218, 198, 195, 199, 182, 201, 202, 206, 201, 228, 240, 191, 131, 121, 110, 221, 211, 208, 207, 198, 213, 231, 204, 220, 197, 211, 207, 194, 207, 213}, {201, 202, 202, 203, 202, 200, 199, 197, 199, 202, 206, 206, 204, 202, 202, 203, 205, 195, 210, 199, 211, 220, 210, 224, 224, 204, 215, 205, 227, 218, 229, 220, 203, 201, 199, 202, 206, 206, 195, 205, 203, 194, 202, 197, 210, 190}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 203, 206, 210, 213, 213, 210, 206, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 201, 202, 202, 201, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 198, 197, 197, 198, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 201, 200, 199, 199, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 200, 201, 201, 200, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 202, 202, 202, 202, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}}; static const uint8 jpeg_24bit_j80[JPEGY][JPEGX][3] = { {{252, 106, 0}, {252, 106, 0}, {252, 106, 0}, {252, 106, 0}, {253, 105, 0}, {253, 105, 0}, {255, 104, 0}, {255, 104, 0}, {255, 105, 0}, {255, 105, 0}, {255, 105, 0}, {255, 104, 0}, {255, 104, 0}, {255, 103, 0}, {255, 102, 0}, {252, 106, 0}, {237, 111, 0}, {235, 114, 0}, {246, 111, 0}, {248, 111, 0}, {241, 114, 0}, {243, 111, 0}, {251, 103, 3}, {255, 99, 4}, {255, 105, 7}, {255, 106, 4}, {248, 110, 1}, {250, 108, 0}, {255, 99, 1}, {255, 97, 6}, {255, 101, 13}, {251, 104, 9}, {251, 106, 0}, {248, 108, 0}, {245, 109, 1}, {239, 110, 6}, {235, 111, 11}, {234, 111, 17}, {239, 107, 22}, {245, 107, 9}, {255, 106, 0}, {255, 105, 0}, {255, 102, 0}, {255, 101, 0}, {255, 101, 0}, {255, 101, 0}}, {{252, 105, 0}, {252, 105, 0}, {252, 105, 0}, {252, 105, 0}, {252, 105, 0}, {253, 105, 0}, {253, 105, 0}, {253, 105, 0}, {253, 102, 0}, {253, 102, 0}, {254, 101, 0}, {254, 101, 0}, {255, 102, 0}, {255, 102, 0}, {255, 101, 0}, {253, 105, 0}, {245, 109, 0}, {243, 109, 0}, {247, 105, 0}, {248, 104, 0}, {246, 105, 0}, {251, 106, 1}, {255, 104, 4}, {255, 105, 5}, {251, 98, 0}, {248, 102, 0}, {246, 105, 0}, {251, 105, 0}, {255, 101, 0}, {255, 100, 2}, {254, 104, 9}, {251, 105, 6}, {252, 106, 0}, {252, 106, 0}, {253, 105, 0}, {251, 105, 4}, {246, 106, 9}, {244, 106, 15}, {245, 105, 20}, {251, 104, 11}, {255, 104, 0}, {255, 104, 0}, {255, 102, 0}, {255, 102, 0}, {255, 104, 0}, {255, 105, 0}}, {{251, 105, 4}, {251, 105, 4}, {251, 105, 4}, {251, 105, 4}, {251, 105, 4}, {252, 104, 4}, {252, 104, 4}, {252, 104, 4}, {252, 103, 3}, {253, 104, 4}, {253, 104, 4}, {253, 104, 4}, {253, 104, 4}, {254, 105, 5}, {254, 105, 5}, {255, 105, 2}, {255, 105, 0}, {255, 103, 0}, {255, 102, 0}, {255, 99, 0}, {255, 97, 1}, {255, 98, 3}, {255, 102, 4}, {255, 105, 1}, {251, 104, 0}, {251, 107, 0}, {255, 108, 0}, {255, 107, 0}, {255, 104, 0}, {255, 104, 0}, {250, 105, 0}, {247, 105, 0}, {253, 106, 0}, {255, 103, 0}, {255, 96, 0}, {255, 94, 4}, {255, 95, 6}, {255, 98, 9}, {255, 98, 17}, {255, 99, 13}, {255, 99, 2}, {255, 100, 0}, {255, 103, 4}, {248, 106, 8}, {241, 109, 9}, {237, 111, 9}}, {{252, 104, 4}, {252, 104, 4}, {252, 104, 4}, {252, 104, 4}, {253, 104, 4}, {252, 104, 4}, {253, 104, 4}, {253, 104, 4}, {255, 106, 6}, {255, 106, 6}, {255, 106, 6}, {254, 105, 5}, {254, 105, 5}, {253, 104, 4}, {253, 104, 4}, {255, 102, 1}, {255, 98, 0}, {255, 97, 0}, {255, 100, 3}, {255, 98, 9}, {255, 95, 12}, {255, 95, 9}, {255, 98, 2}, {252, 101, 0}, {252, 108, 0}, {254, 108, 0}, {255, 103, 0}, {255, 103, 0}, {255, 103, 0}, {253, 106, 0}, {244, 109, 0}, {244, 107, 0}, {255, 105, 0}, {255, 99, 0}, {255, 95, 0}, {255, 94, 1}, {255, 94, 6}, {255, 96, 8}, {255, 98, 11}, {255, 99, 9}, {255, 98, 8}, {255, 99, 6}, {255, 102, 8}, {248, 105, 11}, {241, 108, 15}, {238, 109, 17}}, {{255, 102, 1}, {255, 102, 1}, {255, 102, 1}, {255, 103, 1}, {255, 102, 1}, {255, 103, 1}, {255, 102, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 103, 1}, {255, 99, 1}, {255, 93, 1}, {255, 92, 6}, {255, 93, 18}, {255, 93, 23}, {255, 92, 26}, {255, 95, 20}, {242, 105, 11}, {237, 108, 4}, {244, 105, 0}, {255, 100, 0}, {255, 90, 5}, {255, 91, 7}, {254, 99, 6}, {245, 108, 2}, {239, 114, 0}, {244, 112, 1}, {255, 99, 15}, {255, 96, 15}, {255, 101, 1}, {255, 102, 0}, {255, 102, 9}, {253, 103, 9}, {255, 103, 2}, {255, 103, 1}, {255, 100, 6}, {255, 99, 4}, {255, 100, 0}, {255, 101, 0}, {255, 100, 9}, {255, 100, 15}}, {{255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 101, 1}, {255, 102, 1}, {255, 102, 1}, {255, 103, 2}, {255, 103, 2}, {255, 104, 3}, {255, 105, 3}, {255, 105, 4}, {255, 104, 5}, {255, 100, 11}, {255, 97, 16}, {255, 94, 19}, {255, 93, 22}, {255, 95, 21}, {254, 102, 19}, {239, 115, 15}, {238, 120, 14}, {248, 108, 10}, {255, 100, 11}, {255, 88, 16}, {255, 89, 15}, {255, 100, 11}, {244, 107, 3}, {240, 111, 0}, {245, 107, 0}, {255, 98, 18}, {255, 96, 18}, {255, 103, 1}, {251, 106, 0}, {248, 105, 9}, {246, 106, 8}, {248, 108, 0}, {251, 107, 0}, {255, 103, 4}, {255, 101, 4}, {255, 101, 0}, {255, 100, 0}, {255, 99, 4}, {255, 98, 9}}, {{255, 100, 2}, {255, 100, 2}, {255, 100, 2}, {255, 100, 2}, {255, 100, 2}, {255, 100, 2}, {255, 101, 2}, {255, 101, 2}, {255, 104, 4}, {255, 104, 4}, {255, 103, 3}, {255, 102, 2}, {255, 102, 2}, {254, 102, 1}, {254, 100, 0}, {251, 101, 4}, {250, 103, 10}, {255, 101, 11}, {255, 99, 7}, {255, 100, 3}, {255, 102, 0}, {250, 105, 0}, {229, 112, 0}, {230, 109, 2}, {247, 98, 4}, {255, 91, 8}, {255, 85, 8}, {255, 89, 7}, {255, 100, 3}, {253, 105, 0}, {253, 103, 0}, {255, 100, 0}, {255, 99, 9}, {255, 99, 9}, {255, 102, 1}, {255, 104, 0}, {249, 106, 4}, {245, 108, 2}, {242, 112, 0}, {244, 111, 0}, {248, 106, 4}, {251, 105, 6}, {253, 105, 0}, {255, 105, 0}, {255, 103, 1}, {255, 102, 4}}, {{255, 99, 4}, {255, 99, 4}, {255, 99, 4}, {255, 100, 4}, {255, 99, 4}, {255, 100, 4}, {255, 100, 4}, {255, 101, 4}, {255, 102, 5}, {255, 101, 4}, {255, 98, 1}, {250, 96, 0}, {246, 92, 0}, {242, 90, 0}, {240, 86, 0}, {236, 86, 0}, {235, 92, 0}, {244, 96, 0}, {255, 96, 0}, {255, 97, 0}, {255, 97, 0}, {248, 92, 0}, {222, 87, 0}, {214, 78, 0}, {229, 68, 0}, {248, 67, 0}, {255, 72, 0}, {255, 81, 0}, {255, 94, 3}, {255, 99, 5}, {255, 97, 9}, {255, 98, 9}, {255, 101, 13}, {249, 104, 15}, {249, 104, 13}, {249, 105, 9}, {248, 106, 6}, {246, 108, 1}, {245, 110, 0}, {245, 110, 0}, {248, 106, 6}, {249, 105, 9}, {251, 105, 2}, {253, 105, 0}, {255, 103, 0}, {255, 103, 0}}, {{255, 98, 7}, {255, 98, 6}, {255, 98, 6}, {255, 99, 6}, {255, 94, 2}, {252, 89, 0}, {252, 89, 0}, {253, 93, 0}, {254, 94, 0}, {254, 95, 1}, {255, 96, 2}, {254, 97, 2}, {253, 96, 1}, {250, 96, 0}, {250, 93, 0}, {246, 93, 0}, {234, 86, 0}, {229, 71, 0}, {249, 64, 0}, {247, 51, 0}, {222, 30, 0}, {255, 73, 0}, {255, 83, 0}, {242, 72, 0}, {241, 67, 0}, {243, 64, 0}, {242, 60, 0}, {228, 41, 0}, {219, 28, 0}, {255, 83, 26}, {246, 56, 8}, {223, 52, 0}, {197, 60, 0}, {174, 54, 0}, {185, 64, 0}, {233, 105, 30}, {239, 101, 10}, {251, 105, 4}, {255, 110, 10}, {248, 94, 0}, {249, 98, 7}, {255, 111, 25}, {239, 83, 0}, {255, 105, 13}, {255, 99, 0}, {255, 100, 0}}, {{237, 105, 43}, {234, 104, 42}, {235, 105, 43}, {236, 106, 44}, {234, 104, 42}, {228, 100, 37}, {229, 101, 38}, {232, 104, 41}, {214, 89, 25}, {224, 99, 35}, {235, 111, 47}, {243, 119, 55}, {244, 120, 56}, {244, 122, 57}, {246, 124, 59}, {244, 130, 59}, {228, 126, 44}, {235, 132, 53}, {220, 100, 37}, {210, 84, 36}, {208, 85, 54}, {185, 62, 46}, {193, 64, 58}, {253, 126, 119}, {196, 79, 61}, {156, 47, 18}, {181, 78, 37}, {229, 120, 81}, {215, 89, 64}, {185, 62, 47}, {178, 73, 70}, {192, 114, 102}, {156, 111, 72}, {222, 190, 139}, {232, 195, 150}, {109, 49, 0}, {203, 101, 26}, {236, 106, 20}, {250, 104, 19}, {232, 90, 24}, {188, 75, 43}, {183, 83, 68}, {185, 83, 68}, {183, 70, 40}, {203, 68, 13}, {247, 100, 33}}, {{176, 117, 113}, {174, 116, 112}, {176, 118, 114}, {178, 120, 116}, {177, 119, 115}, {175, 117, 113}, {176, 118, 114}, {178, 123, 118}, {178, 123, 118}, {174, 119, 114}, {163, 108, 103}, {150, 97, 91}, {146, 93, 87}, {162, 109, 103}, {190, 137, 131}, {203, 166, 148}, {192, 185, 141}, {174, 190, 145}, {168, 193, 172}, {180, 214, 226}, {10, 45, 101}, {87, 110, 206}, {64, 61, 192}, {100, 92, 229}, {84, 94, 209}, {92, 118, 202}, {105, 143, 190}, {108, 147, 176}, {147, 170, 204}, {74, 112, 151}, {89, 171, 219}, {34, 144, 181}, {110, 227, 237}, {115, 232, 223}, {76, 187, 168}, {130, 191, 157}, {157, 124, 71}, {216, 124, 57}, {226, 108, 36}, {207, 113, 87}, {142, 120, 193}, {54, 69, 186}, {48, 66, 168}, {78, 66, 150}, {155, 87, 144}, {190, 95, 139}}, {{91, 67, 91}, {89, 65, 89}, {90, 66, 90}, {93, 69, 93}, {93, 69, 93}, {92, 68, 92}, {92, 70, 93}, {95, 73, 96}, {96, 74, 97}, {95, 73, 96}, {92, 68, 92}, {85, 63, 86}, {83, 61, 84}, {93, 71, 94}, {113, 91, 114}, {119, 113, 123}, {85, 113, 91}, {133, 192, 174}, {82, 171, 185}, {4, 111, 165}, {0, 108, 211}, {0, 58, 198}, {13, 72, 238}, {0, 40, 205}, {11, 77, 217}, {47, 127, 240}, {0, 95, 181}, {32, 134, 208}, {33, 129, 206}, {13, 135, 212}, {0, 168, 243}, {12, 203, 255}, {0, 143, 162}, {44, 194, 192}, {86, 226, 213}, {123, 220, 209}, {91, 110, 116}, {155, 123, 124}, {199, 145, 119}, {188, 145, 154}, {43, 40, 143}, {10, 34, 166}, {49, 83, 180}, {21, 42, 125}, {57, 44, 134}, {99, 70, 163}}, {{95, 70, 92}, {91, 66, 88}, {93, 65, 88}, {95, 67, 90}, {96, 68, 91}, {94, 66, 89}, {95, 67, 90}, {98, 70, 93}, {84, 56, 79}, {88, 60, 83}, {94, 64, 88}, {94, 66, 89}, {91, 63, 86}, {85, 57, 80}, {78, 50, 73}, {70, 50, 61}, {92, 90, 78}, {43, 72, 70}, {5, 73, 118}, {22, 115, 195}, {23, 124, 232}, {27, 117, 231}, {56, 114, 211}, {40, 83, 162}, {28, 74, 134}, {0, 51, 114}, {0, 64, 144}, {18, 97, 190}, {19, 114, 220}, {2, 128, 228}, {0, 159, 235}, {37, 205, 242}, {70, 177, 167}, {124, 193, 162}, {52, 106, 80}, {61, 109, 129}, {8, 60, 162}, {14, 64, 179}, {139, 181, 239}, {31, 41, 77}, {83, 30, 84}, {180, 109, 139}, {192, 142, 109}, {234, 217, 189}, {158, 185, 232}, {2, 52, 137}}, {{183, 122, 117}, {178, 117, 112}, {178, 115, 110}, {180, 117, 112}, {181, 118, 113}, {179, 116, 111}, {179, 116, 111}, {181, 118, 113}, {191, 126, 122}, {190, 125, 121}, {191, 126, 122}, {196, 131, 127}, {205, 137, 134}, {207, 139, 136}, {205, 137, 134}, {199, 136, 127}, {173, 116, 96}, {249, 217, 204}, {181, 186, 205}, {123, 151, 190}, {64, 97, 150}, {88, 110, 159}, {206, 203, 230}, {181, 160, 175}, {255, 230, 238}, {133, 110, 126}, {235, 230, 255}, {88, 111, 165}, {83, 137, 201}, {57, 137, 198}, {59, 159, 208}, {87, 166, 183}, {202, 217, 184}, {99, 76, 24}, {165, 128, 84}, {207, 177, 185}, {56, 58, 159}, {43, 62, 180}, {53, 75, 133}, {235, 218, 236}, {186, 84, 80}, {227, 96, 50}, {243, 136, 30}, {189, 124, 30}, {131, 128, 121}, {117, 145, 182}}, {{238, 109, 51}, {232, 103, 45}, {229, 100, 42}, {231, 102, 44}, {234, 104, 46}, {232, 102, 44}, {234, 101, 44}, {236, 103, 46}, {248, 113, 57}, {243, 108, 52}, {237, 102, 46}, {232, 97, 41}, {227, 90, 35}, {217, 80, 25}, {203, 66, 11}, {192, 55, 1}, {201, 66, 18}, {226, 102, 50}, {229, 127, 61}, {226, 135, 64}, {223, 130, 63}, {221, 116, 58}, {231, 108, 66}, {244, 103, 73}, {227, 68, 46}, {197, 48, 24}, {154, 42, 5}, {202, 134, 89}, {232, 210, 161}, {193, 179, 144}, {242, 195, 189}, {158, 81, 71}, {148, 43, 0}, {240, 117, 50}, {211, 76, 10}, {215, 80, 35}, {195, 67, 66}, {178, 57, 62}, {187, 72, 45}, {187, 63, 11}, {255, 108, 38}, {250, 97, 3}, {255, 126, 3}, {244, 120, 6}, {204, 100, 29}, {193, 98, 50}}, {{255, 101, 10}, {255, 96, 5}, {251, 92, 1}, {253, 94, 3}, {255, 95, 5}, {255, 95, 5}, {255, 95, 5}, {255, 95, 6}, {255, 91, 2}, {250, 86, 0}, {246, 81, 0}, {246, 81, 0}, {250, 85, 0}, {255, 91, 2}, {255, 93, 5}, {255, 92, 11}, {255, 88, 18}, {253, 86, 8}, {255, 100, 0}, {249, 96, 0}, {239, 80, 0}, {247, 81, 0}, {238, 62, 0}, {222, 30, 0}, {227, 20, 0}, {255, 72, 15}, {231, 69, 0}, {198, 74, 0}, {168, 82, 0}, {174, 88, 1}, {169, 39, 0}, {191, 36, 0}, {255, 102, 34}, {255, 91, 10}, {255, 98, 15}, {255, 95, 15}, {251, 67, 3}, {255, 80, 15}, {255, 85, 9}, {255, 96, 6}, {255, 91, 0}, {255, 110, 0}, {248, 94, 0}, {254, 101, 0}, {245, 92, 0}, {255, 103, 10}}, {{255, 104, 6}, {255, 104, 6}, {255, 103, 5}, {255, 102, 4}, {255, 101, 3}, {253, 99, 1}, {253, 99, 1}, {254, 97, 0}, {255, 101, 4}, {255, 101, 4}, {255, 101, 4}, {255, 101, 4}, {255, 101, 4}, {255, 101, 4}, {255, 101, 4}, {255, 100, 6}, {250, 86, 0}, {245, 80, 0}, {232, 73, 0}, {226, 67, 0}, {230, 69, 0}, {240, 77, 0}, {254, 86, 0}, {255, 93, 6}, {255, 95, 12}, {255, 94, 10}, {255, 96, 4}, {245, 99, 0}, {235, 103, 2}, {237, 104, 9}, {248, 102, 19}, {255, 101, 19}, {255, 101, 9}, {255, 101, 6}, {255, 101, 4}, {255, 100, 4}, {255, 99, 9}, {255, 99, 9}, {255, 100, 6}, {255, 101, 2}, {255, 102, 0}, {255, 103, 0}, {255, 104, 0}, {255, 104, 0}, {255, 104, 1}, {255, 103, 2}}, {{255, 105, 2}, {255, 105, 2}, {255, 104, 1}, {255, 104, 1}, {254, 103, 0}, {253, 102, 0}, {252, 101, 0}, {252, 101, 0}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 103, 1}, {255, 104, 6}, {255, 103, 5}, {255, 100, 2}, {255, 99, 1}, {255, 99, 1}, {255, 102, 4}, {255, 106, 8}, {255, 109, 10}, {255, 102, 3}, {255, 101, 2}, {255, 99, 0}, {255, 99, 0}, {255, 99, 0}, {255, 100, 0}, {255, 102, 2}, {255, 103, 3}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}, {{255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {254, 103, 0}, {254, 103, 0}, {254, 103, 0}, {254, 103, 0}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 103, 1}, {255, 100, 1}, {255, 100, 2}, {255, 101, 3}, {255, 101, 3}, {255, 101, 3}, {255, 100, 2}, {255, 99, 1}, {255, 99, 0}, {255, 103, 4}, {255, 103, 3}, {255, 103, 3}, {255, 102, 2}, {255, 102, 2}, {255, 103, 3}, {255, 103, 3}, {255, 104, 4}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}, {{255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 103, 1}, {255, 103, 4}, {255, 102, 3}, {255, 99, 1}, {255, 99, 0}, {255, 98, 0}, {255, 99, 0}, {255, 100, 1}, {255, 101, 1}, {255, 103, 3}, {255, 103, 3}, {255, 104, 4}, {255, 104, 4}, {255, 104, 4}, {255, 104, 4}, {255, 103, 3}, {255, 103, 3}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}, {{254, 103, 0}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 103, 1}, {255, 106, 6}, {255, 105, 5}, {255, 102, 3}, {255, 102, 2}, {255, 102, 2}, {255, 103, 3}, {255, 105, 5}, {255, 106, 6}, {255, 102, 2}, {255, 102, 2}, {255, 103, 3}, {255, 104, 3}, {255, 104, 3}, {255, 104, 3}, {255, 103, 2}, {255, 103, 2}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}, {{255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {251, 97, 0}, {252, 98, 0}, {255, 100, 0}, {255, 101, 1}, {255, 102, 2}, {255, 101, 1}, {254, 100, 0}, {253, 99, 0}, {255, 101, 1}, {255, 103, 2}, {255, 103, 2}, {255, 103, 2}, {255, 103, 2}, {255, 103, 2}, {255, 103, 2}, {254, 102, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}, {{255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 105, 2}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {253, 102, 0}, {255, 104, 1}, {255, 105, 3}, {255, 108, 5}, {255, 108, 5}, {255, 107, 4}, {255, 105, 2}, {254, 103, 0}, {255, 104, 1}, {253, 104, 1}, {253, 104, 1}, {253, 104, 1}, {253, 104, 1}, {253, 104, 1}, {253, 104, 1}, {253, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}, {255, 104, 1}}}; /* Sub-tests for test_mgr_old() */ static void test_mgr_old_a(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ const char *oldrlefile = get_srcdir_filename(OLDRLEFILE); (void)flag; /* A - Read RLE compressed data from old raster image file */ MESSAGE(8, printf("Read RLE compressed image\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(oldrlefile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {10, 10}; /* dimensions for the empty image */ uint8 image[10][10]; /* space for the image data */ uint8 image0[10][10]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ intn i, j; /* indices */ /* Initialize data we are looking for in image */ for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) image0[i][j] = (uint8)(i + j); /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, 10 * 10) != 0) { MESSAGE(3, printf("Error reading data for RLE compressed image\n");); num_errs++; } /* end if */ /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_old_a() */ static void test_mgr_old_c(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ const char *oldgreyjpegfile = get_srcdir_filename(OLDGREYJPEGFILE); (void)flag; /* C - Read 8-bit JPEG compressed data from old raster image file */ MESSAGE(8, printf("Read 8-bit JPEG compressed image\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(oldgreyjpegfile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {JPEGX, JPEGY}; /* dimensions for the empty image */ uint8 image[JPEGY][JPEGX]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, jpeg_8bit_j80, JPEGY * JPEGX) != 0) { MESSAGE(3, printf("Error reading data for 8-bit JPEG compressed image\n");); num_errs++; } /* end if */ /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_old_c() */ static void test_mgr_old_e(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ const char *oldjpegfile = get_srcdir_filename(OLDJPEGFILE); (void)flag; /* E - Read 24-bit JPEG compressed data from old raster image file */ MESSAGE(8, printf("Read 24-bit JPEG compressed image\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(oldjpegfile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {JPEGX, JPEGY}; /* dimensions for the empty image */ uint8 image[JPEGY][JPEGX][3]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK_VOID(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, jpeg_24bit_j80, JPEGY * JPEGX * 3) != 0) { /* MESSAGE(3, printf("Error reading data for 24-bit JPEG compressed image\n");); num_errs++; */ } /* end if */ /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_old_e() */ /**************************************************************** ** ** test_mgr_old(): Multi-file Raster Old-style Image Access tests ** ** VIII. Old-style raster image tests ** A. Read data from RLE compressed image ** B. Create RLE compressed image & write to it (not implemented) ** C. Read data from 8-bit JPEG compressed image ** D. Create 8-bit JPEG compressed image & write to it ** E. Read data from 24-bit JPEG compressed image ** F. Create 24-bit JPEG compressed image & write to it ** ****************************************************************/ static void test_mgr_old(int flag) { /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster Old-Style Access\n");); test_mgr_old_a(flag); test_mgr_old_c(flag); test_mgr_old_e(flag); } /* end test_mgr_old() */ #define GR_R24FILE "test_files/gr_r24.dat" #define GR_R24XDIM 8 #define GR_R24YDIM 10 /* Sub-tests for test_mgr_r24() */ static void test_mgr_r24_a(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ const char *gr_r24file = get_srcdir_filename(GR_R24FILE); (void)flag; /* A - Write/Read DF24 image */ MESSAGE(8, printf("Operate on DF24 images\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(gr_r24file, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ int32 dims[2] = {GR_R24XDIM, GR_R24YDIM}; /* dimensions for the empty image */ uint8 image[GR_R24YDIM][GR_R24XDIM][3]; /* space for the image data */ uint8 image0[GR_R24YDIM][GR_R24XDIM][3]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ int32 ncomp; /* Number of components in the DF24 image */ int32 nt; /* Number-type of the DF24 image */ int32 dimsizes[2]; /* Dimensions of the DF24 image */ intn i, j, k; /* indices */ intn is_mappedable; /* TRUE if the image is mapped-able (hmap project)*/ intn name_generated; /* TRUE if the image has name generated by lib */ /* Initialize data we are going to write out */ for (i = 0; i < GR_R24YDIM; i++) for (j = 0; j < GR_R24XDIM; j++) for (k = 0; k < 3; k++) image[i][j][k] = (k + 1) * j; /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Check the image information */ ret = GRgetiminfo(riid, NULL, &ncomp, &nt, NULL, dimsizes, NULL); CHECK_VOID(ret, FAIL, "GRgetiminfo"); VERIFY_VOID(ncomp, 3, "GRgetiminfo"); VERIFY_VOID(nt, DFNT_UCHAR8, "GRgetiminfo"); VERIFY_VOID(dimsizes[0], dims[0], "GRgetiminfo"); VERIFY_VOID(dimsizes[1], dims[1], "GRgetiminfo"); /* Test GR2bmapped on this image, should not be mapped-able because */ /* ncomp=3. (For hmap project only) */ ret = GR2bmapped(riid, &is_mappedable, &name_generated); CHECK_VOID(ret, FAIL, "GR2bmapped"); VERIFY_VOID(is_mappedable, FALSE, "GR2bmapped"); VERIFY_VOID(name_generated, TRUE, "GR2bmapped"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image0); CHECK_VOID(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, GR_R24YDIM * GR_R24XDIM * 3) != 0) { MESSAGE(3, printf("Error reading data for DF24 image\n");); num_errs++; } /* end if */ /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_r24_a() */ /**************************************************************** ** ** test_mgr_r24(): Multi-file Raster/DF24 Compatibility Tests ** ** X. Multi-File Raster/DF24 Compatibility Tests ** A. Read/Write DF24 Image ** ****************************************************************/ static void test_mgr_r24(int flag) { /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster/DF24 Compatibility\n");); test_mgr_r24_a(flag); } /* end test_mgr_r24() */ #define GR_R8FILE "gr_r8.hdf" #define GR_R8XDIM 8 #define GR_R8YDIM 10 /* Sub-tests for test_mgr_r8() */ static void test_mgr_r8_a(int flag) { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ uint8 palette[256][3]; uint8 picture[GR_R8YDIM][GR_R8XDIM]; intn i, j; /* indices */ (void)flag; /* A - Write/Read DF8 image with palette */ MESSAGE(8, printf("Operate on DF8 images\n");); /* initialize the palette */ for (i = 0; i < 256; i++) { for (j = 0; j < 3; j++) { palette[i][j] = i; } } /* initialize the image */ for (j = 0; j < GR_R8XDIM; j++) { for (i = 0; i < GR_R8YDIM; i++) { picture[i][j] = i + j; } } /* Write out the test data */ ret = DFR8setpalette((void *)palette); CHECK_VOID(ret, FAIL, "DFR8setpalette"); ret = DFR8putimage(GR_R8FILE, (void *)picture, GR_R8XDIM, GR_R8YDIM, COMP_RLE); CHECK_VOID(ret, FAIL, "DFR8putimage"); /* Open up the existing datafile and get the image information from it */ fid = Hopen(GR_R8FILE, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the image */ int32 pal_id; /* Palette ID for the LUT */ int32 dims[2] = {GR_R8XDIM, GR_R8YDIM}; /* dimensions for the empty image */ uint8 image[GR_R8YDIM][GR_R8XDIM]; /* space for the image data */ uint8 image0[GR_R8YDIM][GR_R8XDIM]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ int32 ncomp; /* Number of components in the DFR8 image */ int32 nt; /* Number-type of the DFR8 image */ int32 dimsizes[2]; /* Dimensions of the DFR8 image */ int32 interlace; /* Palette interlace */ int32 num_entries; /* Number of palette entries */ intn is_mappedable; /* TRUE if the image is mapped-able (hmap project)*/ intn name_generated; /* TRUE if the image has name generated by lib */ /* Initialize data we are expecting to read in */ for (i = 0; i < GR_R8YDIM; i++) for (j = 0; j < GR_R8XDIM; j++) image[i][j] = i + j; /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK_VOID(riid, FAIL, "GRselect"); /* Check the image information */ ret = GRgetiminfo(riid, NULL, &ncomp, &nt, NULL, dimsizes, NULL); CHECK_VOID(ret, FAIL, "GRgetiminfo"); VERIFY_VOID(ncomp, 1, "GRgetiminfo"); VERIFY_VOID(nt, DFNT_UCHAR8, "GRgetiminfo"); VERIFY_VOID(dimsizes[0], dims[0], "GRgetiminfo"); VERIFY_VOID(dimsizes[1], dims[1], "GRgetiminfo"); /* Test GR2bmapped on this image, should be mapped-able */ /* (For hmap project only) */ ret = GR2bmapped(riid, &is_mappedable, &name_generated); CHECK_VOID(ret, FAIL, "GR2bmapped"); VERIFY_VOID(is_mappedable, TRUE, "GR2bmapped"); VERIFY_VOID(name_generated, TRUE, "GR2bmapped"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image0); CHECK_VOID(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, GR_R8YDIM * GR_R8XDIM) != 0) { MESSAGE(3, printf("Error reading data for DF8 image\n");); num_errs++; } /* end if */ pal_id = GRgetlutid(riid, 0); CHECK_VOID(pal_id, FAIL, "GRgetlutid"); ncomp = nt = 0; ret = GRgetlutinfo(pal_id, &ncomp, &nt, &interlace, &num_entries); CHECK_VOID(ret, FAIL, "GRgetlutinfo"); VERIFY_VOID(ncomp, 3, "GRgetlutinfo"); VERIFY_VOID(nt, DFNT_UINT8, "GRgetlutinfo"); VERIFY_VOID(interlace, 0, "GRgetlutinfo"); VERIFY_VOID(num_entries, 256, "GRgetlutinfo"); /* Close the empty image */ ret = GRendaccess(riid); CHECK_VOID(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK_VOID(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } /* end test_mgr_r8_a() */ /**************************************************************** ** ** test_mgr_r8(): Multi-file Raster/DF8 Compatibility Tests ** ** XI. Multi-File Raster/DF8 Compatibility Tests ** A. Read/Write DF8 Image with palette ** ****************************************************************/ static void test_mgr_r8(int flag) { /* Output message about test being performed */ MESSAGE(6, printf("Testing Multi-file Raster/DF8 Compatibility\n");); test_mgr_r8_a(flag); } /* end test_mgr_r8() */ static void test_mgr_chunkwr_pixelone() { /* * This function tests GR chunking write/read operations for the * following types of compressions: * COMP_NONE * COMP_CODE_RLE * COMP_CODE_SKPHUFF * COMP_CODE_DEFLATE * and PIXEL interlace mode. */ #define CHUNKFILE "ChunkedGR.hdf" #define X_LENGTH 10 /* number of columns in the image */ #define Y_LENGTH 6 /* number of rows in the image */ #define N_COMPS 3 /* number of components in the image */ #define COMP_METH 4 /* number of compression methods used - 4 (0-based) */ /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id[4], /* raster image identifier */ origin[2], /* start position to write for each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ comp_flag, /* compression flag */ index, i; int32 start[2], stride[2], edge[2]; int16 data_out[3 * Y_LENGTH * X_LENGTH]; char *image_name[] = {"Image_NO", "Image_RL", "Image_Sk", "Image_DF"}; HDF_CHUNK_DEF chunk_def; int16 chunk_buf[18]; int16 chunk00[] = {110, 111, 112, 120, 121, 122, 130, 131, 132, 140, 141, 142, 150, 151, 152, 160, 161, 162}; int16 chunk01[] = {210, 211, 212, 220, 221, 222, 230, 231, 232, 240, 241, 242, 250, 251, 252, 260, 261, 262}; int16 chunk14[] = {1010, 1011, 1012, 1020, 1021, 1022, 1030, 1031, 1032, 1040, 1041, 1042, 1050, 1051, 1052, 1060, 1061, 1062}; int16 data[] = {110, 111, 112, 120, 121, 122, 210, 211, 212, 220, 221, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 132, 140, 141, 142, 230, 231, 232, 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 152, 160, 161, 162, 250, 251, 252, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 1011, 1012, 1020, 1021, 1022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 1031, 1032, 1040, 1041, 1042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1050, 1051, 1052, 1060, 1061, 1062}; /********************** End of variable declaration **********************/ /* * Create and open the file. */ file_id = Hopen(CHUNKFILE, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* * Set the data type, interlace mode, and dimensions of the image. */ data_type = DFNT_INT16; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; for (i = 0; i < COMP_METH; i++) { /* * Create the raster image array. */ ri_id[i] = GRcreate(gr_id, image_name[i], N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id[i], FAIL, "GRcreate"); /* * Create chunked image array. */ switch (i) { case 0: comp_flag = HDF_CHUNK; chunk_def.chunk_lengths[0] = 3; chunk_def.chunk_lengths[1] = 2; break; case 1: comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_RLE; break; case 2: { comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff.skp_size = 2; break; } case 3: { comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; break; } default: { printf("Error\n"); break; } } /* end switch */ status = GRsetchunk(ri_id[i], chunk_def, comp_flag); CHECK_VOID(status, FAIL, "GRsetchunk"); /* * Write first data chunk ( 0, 0 ). */ origin[0] = origin[1] = 0; status = GRwritechunk(ri_id[i], origin, (void *)chunk00); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Write second data chunk ( 0, 1 ). */ origin[0] = 0; origin[1] = 1; status = GRwritechunk(ri_id[i], origin, (void *)chunk01); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Write third data chunk ( 1, 4 ). */ origin[0] = 1; origin[1] = 4; status = GRwritechunk(ri_id[i], origin, (void *)chunk14); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[i], origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); /* * Terminate access to the GR interface and close the HDF file. */ status = GRendaccess(ri_id[i]); CHECK_VOID(status, FAIL, "GRendaccess"); } /* end for*/ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Open the file. */ file_id = Hopen(CHUNKFILE, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); for (i = 0; i < COMP_METH; i++) { /* * Find the index of the specified image. */ index = GRnametoindex(gr_id, image_name[i]); CHECK_VOID(index, FAIL, "GRnametoindex"); /* * Select the image. */ ri_id[i] = GRselect(gr_id, index); CHECK_VOID(ri_id[i], FAIL, "GRselect"); /* * Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[i], origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk14, sizeof(chunk14))) { MESSAGE(3, printf("%d: Error in reading chunk\n", __LINE__);); MESSAGE(3, printf("%d: Compression method\n", (int)i);); num_errs++; } /* end if */ /* * Read the whole image. */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; edge[0] = Y_LENGTH; edge[1] = X_LENGTH; status = GRreadimage(ri_id[i], start, stride, edge, (void *)data_out); CHECK_VOID(status, FAIL, "GRreadimage"); if (0 != memcmp(data_out, data, sizeof(data))) { MESSAGE(3, printf("%d: Error reading data for the whole image\n", __LINE__);); MESSAGE(3, printf("%d: Compression method\n", (int)i);); num_errs++; } /* end if */ status = GRendaccess(ri_id[i]); CHECK_VOID(status, FAIL, "GRendaccess"); } /* end for */ /* * Terminate access to the GR interface and close the HDF file. */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } static void test_mgr_chunkwr_pixel(int flag) { /* * This function tests GR chunking write/read operations for the * following types of compressions: * COMP_NONE * COMP_CODE_RLE * COMP_CODE_SKPHUFF * COMP_CODE_DEFLATE * and PIXEL interlace mode. */ /* Writing images to one file does not work , we will write each image to the different files #define FILE_NAME "ChunkedGR.hdf" */ #define X_LENGTH 10 /* number of columns in the image */ #define Y_LENGTH 6 /* number of rows in the image */ #define N_COMPS 3 /* number of components in the image */ #define COMP_METH 4 /* number of compression methods used - 4 (0-based) */ /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id[4], /* raster image identifier */ origin[2], /* start position to write for each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ comp_flag, /* compression flag */ index, i; int32 start[2], stride[2], edge[2]; intn is_mappedable; /* TRUE if the image is mapped-able (hmap project)*/ intn name_generated; /* TRUE if the image has name generated by lib */ int16 data_out[3 * Y_LENGTH * X_LENGTH]; const char *image_name[] = {"Image_NO", "Image_RL", "Image_Sk", "Image_DF"}; const char *file_name[] = {"ChunkedGR_NO.hdf", "ChunkedGR_RL.hdf", "ChunkedGR_SK.hdf", "ChunkedGR_DF.hdf"}; HDF_CHUNK_DEF chunk_def; int16 chunk_buf[18]; int16 chunk00[] = {110, 111, 112, 120, 121, 122, 130, 131, 132, 140, 141, 142, 150, 151, 152, 160, 161, 162}; int16 chunk01[] = {210, 211, 212, 220, 221, 222, 230, 231, 232, 240, 241, 242, 250, 251, 252, 260, 261, 262}; int16 chunk14[] = {1010, 1011, 1012, 1020, 1021, 1022, 1030, 1031, 1032, 1040, 1041, 1042, 1050, 1051, 1052, 1060, 1061, 1062}; int16 data[] = {110, 111, 112, 120, 121, 122, 210, 211, 212, 220, 221, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 132, 140, 141, 142, 230, 231, 232, 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 152, 160, 161, 162, 250, 251, 252, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 1011, 1012, 1020, 1021, 1022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 1031, 1032, 1040, 1041, 1042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1050, 1051, 1052, 1060, 1061, 1062}; /********************** End of variable declaration **********************/ i = flag; memset(&chunk_def, 0, sizeof(HDF_CHUNK_DEF)); /* * Create and open the file. */ /* This call is commented out, since writing to one file does not work file_id = Hopen (FILE_NAME, DFACC_WRITE, 0); */ file_id = Hopen(file_name[i], DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* * Set the data type, interlace mode, and dimensions of the image. */ data_type = DFNT_INT16; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* for (i = 0; i < COMP_METH; i++ ) { */ /* * Create the raster image array. */ ri_id[i] = GRcreate(gr_id, image_name[i], N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id[i], FAIL, "GRcreate"); /* * Create chunked image array. */ switch (i) { case 0: comp_flag = HDF_CHUNK; chunk_def.chunk_lengths[0] = 3; chunk_def.chunk_lengths[1] = 2; break; case 1: comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_RLE; break; case 2: { comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff.skp_size = 2; break; } case 3: { comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; break; } default: { comp_flag = HDF_NONE; printf("Error\n"); break; } } /* end switch */ status = GRsetchunk(ri_id[i], chunk_def, comp_flag); CHECK_VOID(status, FAIL, "GRsetchunk"); /* * Write first data chunk ( 0, 0 ). */ origin[0] = origin[1] = 0; status = GRwritechunk(ri_id[i], origin, (void *)chunk00); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Write second data chunk ( 0, 1 ). */ origin[0] = 0; origin[1] = 1; status = GRwritechunk(ri_id[i], origin, (void *)chunk01); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Write third data chunk ( 1, 4 ). */ origin[0] = 1; origin[1] = 4; status = GRwritechunk(ri_id[i], origin, (void *)chunk14); CHECK_VOID(status, FAIL, "GRwritechunk"); /* * Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[i], origin, (void *)chunk_buf); /* * Terminate access to the GR interface and close the HDF file. */ status = GRendaccess(ri_id[i]); CHECK_VOID(status, FAIL, "GRendaccess"); /* } */ /* end for*/ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Open the file. */ /* This does not work, GRreadchunk will fail! file_id = Hopen (FILE_NAME, DFACC_READ, 0); */ /* file_id = Hopen (FILE_NAME, DFACC_WRITE, 0); */ file_id = Hopen(file_name[i], DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* * Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /*for (i = 0; i < COMP_METH; i++ ) { */ /* * Find the index of the specified image. */ index = GRnametoindex(gr_id, image_name[i]); CHECK_VOID(index, FAIL, "GRnametoindex"); /* * Select the image. */ ri_id[i] = GRselect(gr_id, index); CHECK_VOID(ri_id[i], FAIL, "GRselect"); /* * Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[i], origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk14, sizeof(chunk14))) { MESSAGE(3, printf("%d: Error in reading chunk\n", __LINE__);); MESSAGE(3, printf("%d: Compression method\n", (int)i);); num_errs++; } /* end if */ /* * Read the whole image. */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; edge[0] = Y_LENGTH; edge[1] = X_LENGTH; status = GRreadimage(ri_id[i], start, stride, edge, (void *)data_out); CHECK_VOID(status, FAIL, "GRreadimage"); if (0 != memcmp(data_out, data, sizeof(data))) { MESSAGE(3, printf("%d: Error reading data for the whole image\n", __LINE__);); MESSAGE(3, printf("%d: Compression method\n", (int)i);); num_errs++; } /* end if */ /* Test GR2bmapped on this image, should not be mapped-able because it has */ /* chunking storage. (For hmap project only) */ status = GR2bmapped(ri_id[i], &is_mappedable, &name_generated); CHECK_VOID(status, FAIL, "GR2bmapped"); VERIFY_VOID(is_mappedable, FALSE, "GR2bmapped"); VERIFY_VOID(name_generated, FALSE, "GR2bmapped"); status = GRendaccess(ri_id[i]); CHECK_VOID(status, FAIL, "GRendaccess"); /*} */ /* end for */ /* * Terminate access to the GR interface and close the HDF file. */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /**************************************************************** ** ** test_mgr_chunkwr(): GR chunking test ** ** XIII. GR write/read chunking test with enabled compression and ** different interlace modes. ** ** A. Write/read GR chunks with different kinds of compressions ** and PIXEL Interlace Mode (test_mgr_chunkrw_pixel) ** ** ****************************************************************/ static void test_mgr_chunkwr(void) { /* Output message about test being performed */ MESSAGE(6, printf("Testing GR chunking WRITE/READ\n");); test_mgr_chunkwr_pixelone(); test_mgr_chunkwr_pixel(0); test_mgr_chunkwr_pixel(1); test_mgr_chunkwr_pixel(2); test_mgr_chunkwr_pixel(3); } /* end test_mgr_chunkwr() */ /**************************************************************** ** ** test_mgr(): Main multi-file raster image test routine ** ****************************************************************/ void test_mgr(void) { /* Each major outline portion has its own main function: I. Interface Initialization - test_mgr_init II. Create Images - test_mgr_image III. ID/Ref/Index Functions - test_mgr_index IV. Interlace Functions - test_mgr_interlace V. Palette Functions - test_mgr_lut VI. Special Element Functions - test_mgr_special VII. Attribute Functions - test_mgr_attr (tmgrattr.c) VIII. Access to old-style images - test_mgr_old IX. Compressed Image Functions - test_mgr_compress (tmgrcomp.c) X. DF24 Compatibility tests - test_mgr_r24 XI. DF8 Compatibility tests - test_mgr_r8 XII. DFP Compatibility tests - test_mgr_pal XIII. Chunking write/read test with enabled compression - test_mgr_chunkwr XIV. Szip Compression test - test_mgr_szip */ /* Output message about test being performed */ MESSAGE(5, printf("Testing Multi-file Raster routines\n");); test_mgr_init(); test_mgr_image(0); /* normal GR */ test_mgr_image(1); /* chunked GR */ test_mgr_index(0); test_mgr_interlace(0); /* read from normal GR */ test_mgr_interlace(1); /* read from chunked GR */ test_mgr_lut(0); test_mgr_special(0); test_mgr_attr(); test_mgr_old(0); test_mgr_compress(); test_mgr_r24(0); test_mgr_r8(0); test_mgr_chunkwr(); #ifdef H4_HAVE_LIBSZ /* szlib present */ test_mgr_szip(); /* write/read with szip compression */ #else /* skip szip test it and report */ fprintf(stderr, " -- ***** GR SZIP test skipped *****\n"); #endif /* Added after fixing bug #814 to test eliminating of duplicate images */ test_mgr_dup_images(); } /* test_mgr() */ hdf4-hdf4.3.1/hdf/test/mgrf.f000066400000000000000000001334301503061704500156550ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine mgrf (num_err) C C Test Program: C Tests the multi-file GR interface. C Input file: none C Output file: tmgrf.hdf C C implicit none include 'fortest.inc' integer num_err C C ---chunking and compression errors ---------- integer err_grchunk, err_grwrchunk, err_grcompress C --------------------------------------------- C character*20 myname parameter (myname = 'mgrf') c integer mgwrlut, mgrdlut c integer mgsattr integer mgrclut, mgwclut integer mgscatt, mgsnatt, mggcatt, mggnatt integer mgwcimg, mgrcimg integer il character*80 TESTFILE character*80 IMAGE1, IMAGE2, IMAGEC, IMAGEC_2 character*80 ATNAME1, ATNAME_N, ATNAME_C character*80 ATNAME2, ATNAME2_N, ATNAME2_C character*1 CR character buf(3, 2, 2), buf1(2, 3, 2), buf2(2, 2, 3) character in(3,2,2), in1(2, 3, 2), in2(2, 2, 3) integer outbuf(4), outbuf1(4), outbuf2(4) integer inbuf(4), inbuf1(4), inbuf2(4) equivalence (outbuf, buf), (outbuf1, buf1), (outbuf2,buf2) equivalence (inbuf, in), (inbuf1, in1), (inbuf2,in2) character pal(3,256), in_pal(3,256), in_pal2(256,3) integer file_id, gr_id, ri_id, pal_id, index, index2 integer n_datasets, n_attrs, ref integer n_comp, nt integer dims(2), start(2), stride(2) integer*4 attr(5), attr2(5), attr2_n(5) character attr_c(6), attr2_c(6) character cbuf(2,3,4), icbuf(2,3,4) integer i, j, k, ret, number_failed integer n_pal DATA attr_c/'A','T','T','R','_','C'/ DATA cbuf/'A','B','C','D','E','F','G','H','I','J','K','L', + 'M','N','O','P','Q','R','S','T','U','V','W','X'/ call ptestban('Testing', myname) num_err = 0 TESTFILE = 'tmgrf.hdf' IMAGE1 = 'Image #1' IMAGEC = 'Image_c #1' ATNAME1 = 'Attr. #1' ATNAME_N = 'Numeric Attr. #1' ATNAME_C = 'Character Attr. #1' CR = char(10) number_failed = 0 C Initialize the arrays C Initialize the image arrays do 150 i=1, 2 do 2 j=1, 2 buf(1, j, i) = char(i+j) buf(2, j, i) = char(i+j) buf(3, j, i) = char(i+j) buf1(j, 1, i) = char(i-j) buf1(j, 2, i) = char(i-j) buf1(j, 3, i) = char(i-j) buf2(j, i, 1) = char(2*i - j) buf2(j, i, 2) = char(2*i - j) buf2(j, i, 3) = char(2*i - j) 2 continue 150 continue do 157 i=1,2 do 156 j=1,3 do 155 k=1,4 icbuf(i,j,k) = ' ' 155 continue 156 continue 157 continue C Initialize the palette array do 160 i=1, 256 do 3 j=1, 3 pal(j,i)=char(i+j) 3 continue 160 continue C Initialize the attribute do 170 i=1, 5 attr(i)=i*21 170 continue C Open the file file_id=hopen(TESTFILE, DFACC_ALL, 0) call VRFY(file_id,'hopen',number_failed) gr_id=mgstart(file_id) call VRFY(gr_id,'mgstart',number_failed) C Create an image call MESSAGE(5,'Creating an image') dims(1)=2 dims(2)=2 ri_id = mgcreat(gr_id,IMAGE1,3,DFNT_UINT8,MFGR_INTERLACE_PIXEL, * dims) call VRFY(ri_id,'mgcreat',number_failed) start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Writing image data') ret = mgwrimg(ri_id,start,stride,dims,outbuf) call VRFY(ret,'mgwrimg',number_failed) C Store a palette with the image call MESSAGE(5,'Writing palette data') pal_id = mggltid(ri_id, 0) call VRFY(pal_id,'mggltid',number_failed) ret = mgwclut(pal_id,3,DFNT_UINT8,MFGR_INTERLACE_PIXEL,256,pal) call VRFY(ret,'mgwclut',number_failed) C Store an attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgsnatt(ri_id,ATNAME1,DFNT_INT32,5,attr) call VRFY(ret,'mgsnatt',number_failed) C Store a numeric attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgsnatt(ri_id,ATNAME_N,DFNT_INT32,5,attr) call VRFY(ret,'mgsnatt',number_failed) C Store a character attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgscatt(ri_id,ATNAME_C,DFNT_CHAR8,6,attr_c) call VRFY(ret,'mgscatt',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C Create a character type image call MESSAGE(5,'Creating a character type image') dims(1)=2 dims(2)=2 ri_id = mgcreat(gr_id,IMAGEC,3,DFNT_CHAR8,MFGR_INTERLACE_PIXEL, * dims) call VRFY(ri_id,'mgcreat',number_failed) start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Writing character image data') ret = mgwcimg(ri_id,start,stride,dims,cbuf) call VRFY(ret,'mgwcimg',number_failed) ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C End access to the GR interface ret = mgend(gr_id) call VRFY(ret,'mgend',number_failed) C Close the file ret = hclose(file_id) call VRFY(ret,'hclose',number_failed) C Re-open the file file_id=hopen(TESTFILE, DFACC_ALL, 0) call VRFY(file_id,'hopen',number_failed) gr_id=mgstart(file_id) call VRFY(gr_id,'mgstart',number_failed) C Get info about the file call MESSAGE(5,'Getting GR file information') ret = mgfinfo(gr_id,n_datasets,n_attrs) call VRFY(ret,'mgfinfo',number_failed) C Select an image call MESSAGE(5,'Selecting an image') index = mgn2ndx(gr_id, IMAGE1) call VRFY(index,'mgn2ndx',number_failed) ri_id = mgselct(gr_id,index) call VRFY(ri_id,'mgselct',number_failed) n_pal = mggnluts(ri_id) call VRFY(ri_id,'mggnluts',number_failed) if(n_pal .ne. 1) then print *, 'Wrong number of palettes returned for IMAGE1' endif C Get info about the image call MESSAGE(5,'Getting image information') ret = mggiinf(ri_id,IMAGE2,n_comp,nt,il,dims,n_attrs) call VRFY(ret,'mggiinf',number_failed) ref = mgid2rf(ri_id) call VRFY(ref,'mgid2rf',number_failed) index2 = mgr2idx(gr_id,ref) call VRFY(index2,'mgr2idx',number_failed) C Check image reading start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Reading image data') ret = mgrdimg(ri_id,start,stride,dims,inbuf) call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_LINE) call VRFY(ret,'mgrimil',number_failed) ret = mgrdimg(ri_id,start,stride,dims,inbuf1) call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrimil',number_failed) ret = mgrdimg(ri_id,start,stride,dims,inbuf2) call VRFY(ret,'mgrdimg',number_failed) C Check palette reading pal_id = mggltid(ri_id, 0) call VRFY(pal_id,'mggltid',number_failed) call MESSAGE(5,'Reading palette data') ret = mgglinf(pal_id,n_comp,nt,il,i) call VRFY(ret,'mgglinf',number_failed) ret = mgrclut(pal_id,in_pal) call VRFY(ret,'mgrclut',number_failed) ret = mgrltil(pal_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrltil',number_failed) ret = mgrclut(pal_id,in_pal2) call VRFY(ret,'mgrclut',number_failed) C Check attribute reading index = mgfndat(ri_id,ATNAME1) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggattr(ri_id,index,attr2) call VRFY(ret,'mggattr',number_failed) C Check numeric attr index = mgfndat(ri_id, ATNAME_N) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2_N,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggnatt(ri_id,index,attr2_n) call VRFY(ret,'mggnatt',number_failed) C Check character attr index = mgfndat(ri_id, ATNAME_C) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2_C,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggcatt(ri_id,index,attr2_c) call VRFY(ret,'mggcatt',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C Select a character image call MESSAGE(5,'Selecting a char type image') index = mgn2ndx(gr_id, IMAGEC) call VRFY(index,'mgn2ndx',number_failed) ri_id = mgselct(gr_id,index) call VRFY(ri_id,'mgselct',number_failed) n_pal = mggnluts(ri_id) call VRFY(ri_id,'mggnluts',number_failed) if(n_pal .ne. 0) then print *,'Wrong number of palettes returned for IMAGEC' endif C Get info about the image call MESSAGE(5,'Getting image information') ret = mggiinf(ri_id,IMAGEC_2,n_comp,nt,il,dims,n_attrs) call VRFY(ret,'mggiinf',number_failed) ref = mgid2rf(ri_id) call VRFY(ref,'mgid2rf',number_failed) index2 = mgr2idx(gr_id,ref) call VRFY(index2,'mgr2idx',number_failed) C Check image reading start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Reading image data') call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_LINE) call VRFY(ret,'mgrimil',number_failed) ret = mgrcimg(ri_id,start,stride,dims,icbuf) call VRFY(ret,'mgrcimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrimil',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C End access to the GR interface ret = mgend(gr_id) call VRFY(ret,'mgend',number_failed) C Close the file ret = hclose(file_id) call VRFY(ret,'hclose',number_failed) C C GR chunking and compression tests. Added by EIP 1/13/98 C C ----Chunking test C creates the following files: C GRchunked1.hdf err_grchunk = 0 call test_grchunk(err_grchunk) if (err_grchunk .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grchunk failed********' endif C ----Chunking write/read test C creates the following files: C GRchunked2.hdf err_grwrchunk = 0 call test_grwrchunk(err_grwrchunk) if (err_grwrchunk .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grwrchunk failed********' endif C ----Compression test C C creates the following files: C GRcompressed.hdf err_grcompress = 0 call test_grcompress(err_grcompress) if (err_grcompress .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grcompress failed*******' endif C if (number_failed .eq. 0) then if (Verbosity .gt. 6) then print *, CR, CR print *, '****** ALL TESTS SUCCESSFUL ******' endif else print *, '****** ', number_failed, ' TESTS FAILED ******' endif return end CD CD----All lines started with CD should be deleted after GR bug that prevents CD----writing multiple images to the file is fixed. CD subroutine test_grchunk( err_grchunk ) implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP integer MFGR_INTERLACE_PIXEL parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) parameter(NCOMP = 2, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id, . file_id integer dims(2), start(2), edges(2), stride(2) integer err_grchunk integer i, j, status, il, k, i_comp, index integer flags, maxcache, nc_out character*14 file character*12 name(N_COMP_TYPES) integer n_images, n_file_attrs C C---GR interface functions C integer mgstart, mgcreat, mgwrimg, mgsnatt, . mgrdimg, mgfinfo, mgn2ndx, mgselct, mgendac, mgend C C---GR chunking functions C integer mggichnk, . mgscchnk, . mgschnk C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT32 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT32 = 24) parameter (X_LENGTH = 9, . Y_LENGTH = 4, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES), comp_type_out(N_COMP_TYPES) integer comp_prm(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) parameter (DEFLATE_LEVEL = 1, . SKPHUFF_SKP_SIZE = 2) C C---Data C integer*4 image_data(NCOMP, X_LENGTH, Y_LENGTH) integer*4 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) C C---Default pixel value C integer*4 pixel_value(2) C C---Chunking dimension arrays C integer ch_dims(2), ch_dims_out(2) C C----We will write four images using different compression methods to C one file. C file = 'GRchunked1.hdf' C C No compression C name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE comp_type_out(1) = 0 C C RLE compression C name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE comp_type_out(2) = 1 C C Adaptive Huffman compression C name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF comp_type_out(3) = 1 C C GZIP compression C name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE comp_type_out(4) = 1 C C Data initialization C do 30 j = 1, Y_LENGTH do 20 i = 1, X_LENGTH do 10 k = 1, NCOMP image_data(k, i, j) = i + j - 1 10 continue 20 continue 30 continue C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C---Define chunk dimensions C ch_dims(1) = X_CH_LENGTH ch_dims(2) = Y_CH_LENGTH C C Main loop through different compression types C C C Create and a file and initiate GR interface. C file_id = hopen(file, DFACC_CREATE, 0) if(file_id .le. 0) then print *, 'hopen failed to create a file' err_grchunk = err_grchunk +1 goto 2223 endif gr_id = mgstart(file_id) if(gr_id .le. 0) then print *, 'mgstart failed to initialise GR interface' err_grchunk = err_grchunk +1 goto 2222 endif do 1000 i_comp=1, N_COMP_TYPES C C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id, name(i_comp), NCOMP, . DFNT_INT32, il, dims) if(ri_id(i_comp) .le. 0) then print *, 'mgcreat failed to create ', i_comp, 'GR dataset' err_grchunk = err_grchunk +1 goto 1000 endif C C---Set pixel value C pixel_value(1) = 0 pixel_value(2) = 0 C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT32, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C---Define chunked GR C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL status = mgschnk (ri_id(i_comp), ch_dims, . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgschnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C---Set chunk cache to hold maximum of 3 chunks C maxcache = 3 flags = 0 status = mgscchnk (ri_id(i_comp), maxcache, flags) if(status .ne. 3) then print *, 'mgscchnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Define the location, pattern, and size of the data set C that will be written to. start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C Write the stored data to the image array. status = mgwrimg(ri_id(i_comp), start, stride, edges, image_data) if(status .ne. 0) then print *, 'mgwrimg failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 1000 continue C C Terminate access to the GR interface. C status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Open the file. C file_id = hopen(file, DFACC_READ, 0) if(file_id .eq. -1) then print *, 'hopen failed to access the file' err_grchunk = err_grchunk +1 goto 2223 endif C C Initiate the GR interface and select first data set. C gr_id = mgstart(file_id) if(gr_id .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 goto 2222 endif C C Check that file contains 4 GR datasets and has 0 file attributes. C status = mgfinfo(gr_id, n_images, n_file_attrs) if(status .ne. 0) then print *, 'mgfinfo failed ' err_grchunk = err_grchunk +1 goto 2222 endif if(n_images .ne. 4) then print *, 'Wrong number of images returned ' err_grchunk = err_grchunk +1 goto 2222 endif if(n_file_attrs .ne. 0) then print *, 'Wrong number of file attributes returned ' err_grchunk = err_grchunk +1 endif do 2000 i_comp=1, n_images C ri_id(i_comp) = mgselct(gr_id(i_comp), index) C C Find an index using image's name. C index = mgn2ndx(gr_id, name(i_comp)) if(index .lt. 0 .or. index .gt. 3) then print *, 'Wrong index range ' err_grchunk = err_grchunk +1 goto 2222 endif ri_id(i_comp) = mgselct(gr_id, index) if(ri_id(i_comp) .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 goto 1999 endif C C Read the stored data to the image array. C status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(image_data(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grchunk = err_grchunk +1 endif 40 continue 50 continue 60 continue C C Check chunking info C status = mggichnk(ri_id(i_comp), ch_dims_out, . nc_out) if(status .ne. 0) then print *, 'mggichnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif if (comp_type_out(i_comp) .ne. nc_out) then print *, 'mggichnk returns wrong compression type for', . i_comp, '-th data set' err_grchunk = err_grchunk + 1 endif if ( (ch_dims(1) .ne. ch_dims_out(1)) .or. . (ch_dims(2) .ne. ch_dims_out(2))) then print *, 'mggichnk returns wrong chunk dimensions for', . i_comp, '-th data set' err_grchunk = err_grchunk + 1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 1999 continue C 2000 continue C C Terminate access to the GR interface. C status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 2222 continue C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 2223 continue return end C C GR compression test C subroutine test_grcompress( err_grcompress ) implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP C parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) parameter(N_COMP_TYPES = 5, N_COMP_ARG = 2) integer MFGR_INTERLACE_PIXEL parameter(NCOMP = 3, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id, . file_id integer dims(2), start(2), edges(2), stride(2) integer i, j, k, status, il, i_comp, index integer err_grcompress C character*12 file(N_COMP_TYPES) character*16 file character*12 name(N_COMP_TYPES) C C---GR interface functions C integer mgstart, mgcreat, mgwrimg, mgn2ndx, . mgsnatt, . mgrdimg, mgselct, mgendac, mgend C C---GR compression function C integer mgscompress, mggcompress C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT32 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT32 = 24) parameter (X_LENGTH = 9, . Y_LENGTH = 4, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES), comp_type_out integer comp_prm(N_COMP_ARG), comp_prm_out(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL, . COMP_CODE_JPEG, . JPEG_QUALITY, . JPEG_COMPATIBILITY parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4, . COMP_CODE_JPEG = 7) parameter (DEFLATE_LEVEL = 6, . SKPHUFF_SKP_SIZE = 2) parameter (JPEG_QUALITY = 100, . JPEG_COMPATIBILITY = 1) C C---Data C integer*4 image_data(NCOMP, X_LENGTH, Y_LENGTH) integer*4 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) C C---Default pixel value C integer*4 pixel_value(NCOMP) C C---We will write/read to four different files corresponding to the C different compression types. file = 'GRcompressed.hdf' C C No compression C name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE C C RLE compression C name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE C C Adaptive Huffman compression C name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF C C GZIP compression C name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE C C JPEG compression C name(5) = 'Jpcomp_data' comp_type(5) = COMP_CODE_JPEG C C Data initialization C do 30 j = 1, Y_LENGTH do 20 i = 1, X_LENGTH do 10 k = 1, NCOMP image_data(k, i, j) = i + j - 1 10 continue 20 continue 30 continue C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C---Set pixel value C do 305 i = 1, NCOMP pixel_value(i) = 0 305 continue C C Main loop through different compression types C C C Create and open the file. C file_id = hopen(file, DFACC_CREATE, 0) if(file_id .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Initiate the GR interface. C C gr_id(i_comp) = mgstart(file_id(i_comp)) C if(gr_id(i_comp) .eq. -1) then gr_id = mgstart(file_id) if(gr_id .eq. -1) then print *, 'mgstart failed for', i_comp, '-th dataset' err_grcompress = err_grcompress +1 endif do 1000 i_comp=1, N_COMP_TYPES C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id, name(i_comp), NCOMP, . DFNT_INT32, il, dims) if(ri_id(i_comp) .eq. -1) then print *, 'mgcreat failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT32, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C---Set compression C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL if (i_comp. eq. 5) then comp_prm(1) = JPEG_QUALITY comp_prm(2) = JPEG_COMPATIBILITY endif status = mgscompress (ri_id(i_comp), . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgscompress failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Define the location, pattern, and size of the data set C that will be written to. start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C Write the stored data to the image array. status = mgwrimg(ri_id(i_comp), start, stride, edges, image_data) if(status .ne. 0) then print *, 'mgwrimg failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif 1000 continue C C Terminate access to the GR interface. C status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Open the file. C file_id = hopen(file, DFACC_READ, 0) if(file_id .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Initiate the GR interface and select first data set. C gr_id = mgstart(file_id) if(gr_id .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif do 2000 i_comp=1, N_COMP_TYPES index = mgn2ndx(gr_id, name(i_comp)) if(index .eq. -1 ) then print *, 'mgn2ndx failed for', name(i_comp), ' data set' err_grcompress = err_grcompress +1 endif ri_id(i_comp) = mgselct(gr_id, index) if(ri_id(i_comp) .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 goto 1999 endif C C Find out type of compression used and compression parameters. C status = mggcompress(ri_id(i_comp), comp_type_out, comp_prm_out) if (status .eq. -1) then print *, 'mggcompress failed for', i, ' -th dataset' err_grcompress = err_grcompress + 1 endif if (name(i_comp) .eq. 'Nocomp_data') then if (comp_type_out .ne. COMP_CODE_NONE) then print *, 'wrong compression type for Nocomp_data dataset' err_grcompress = err_grcompress + 1 endif endif if (name(i_comp) .eq. 'Rlcomp_data') then if (comp_type_out .ne. COMP_CODE_RLE) then print *, 'wrong compression type for Rlcomp_data dataset' err_grcompress = err_grcompress + 1 endif endif if (name(i_comp) .eq. 'Hucomp_data') then if (comp_type_out .ne. COMP_CODE_SKPHUFF) then print *, 'wrong compression type for Hucomp_data dataset' err_grcompress = err_grcompress + 1 endif if (comp_prm_out(1). ne. skphuff_skp_size) then print *, 'wrong compression parameter for Hucomp_data dataset' err_grcompress = err_grcompress + 1 endif endif if (name(i_comp) .eq. 'Gzcomp_data') then if (comp_type_out .ne. COMP_CODE_DEFLATE) then print *, 'wrong compression type for Gzcomp_data dataset' endif if (comp_prm_out(1). ne. deflate_level) then print *, 'wrong compression parameter for Gzcomp_data dataset' err_grcompress = err_grcompress + 1 endif endif if (name(i_comp) .eq. 'Jpcomp_data') then if (comp_type_out .ne. COMP_CODE_JPEG) then print *, 'wrong compression type for Jpcomp_data dataset' err_grcompress = err_grcompress + 1 endif goto 1111 endif C C Read the stored data to the image array. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(image_data(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grcompress = err_grcompress +1 endif 40 continue 50 continue 60 continue 1111 continue C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif 1999 continue 2000 continue C C Terminate access to the GR interface. C status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif return end subroutine test_grwrchunk( err_grwrchunk ) C C---This subroutine tests GR write/read functions C implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP integer MFGR_INTERLACE_PIXEL parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) parameter(NCOMP = 3, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id, . file_id integer dims(2), start(2), edges(2), stride(2) integer err_grwrchunk integer i, j, status, il, k, i_comp, index C character*13 file(N_COMP_TYPES) character*14 file character*12 name(N_COMP_TYPES) C C---GR interface functions C integer mgstart, mgcreat, mgsnatt, . mgrdimg, mgn2ndx, mgselct, mgendac, mgend, mgfinfo, . mggcompress C C---GR chunking functions C integer mgwchnk, . mgrchnk, . mgschnk C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT32 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT32 = 24) parameter (X_LENGTH = 6, . Y_LENGTH = 10, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES), comp_type_out(N_COMP_TYPES) integer comp_typegr integer comp_prm(N_COMP_ARG) integer comp_prm_out(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) parameter (DEFLATE_LEVEL = 6, . SKPHUFF_SKP_SIZE = 3) C C---Data C integer*4 chunk11(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 chunk21(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 chunk52(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 chunk52_out(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*4 data_org(NCOMP* X_LENGTH*Y_LENGTH) integer*4 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) integer*4 data_arr(NCOMP,X_LENGTH,Y_LENGTH) integer n_images, n_file_attrs equivalence (data_org(1), data_arr(1,1,1)) C C---Default pixel value C integer*4 pixel_value(3) C C---Chunking dimension arrays C integer ch_dims(2) C C---We will write/read to four different files corresponding to the C different compression types. C C We will try to write to one file GRchunked2.hdf file = 'GRchunked2.hdf' C No compression C name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE comp_type_out(1) = 0 C C RLE compression C name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE comp_type_out(2) = 1 C C Adaptive Huffman compression C name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF comp_type_out(3) = 1 C C GZIP compression C name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE comp_type_out(4) = 1 C C Data initialization C data chunk11 / 110, 111, 112, 120, 121, 122, . 130, 131, 132, 140, 141, 142, . 150, 151, 152, 160, 161, 162/ data chunk21 / 210, 211, 212, 220, 221, 222, . 230, 231, 232, 240, 241, 242, . 250, 251, 252, 260, 261, 262/ data chunk52 / 1010, 1011, 1012, 1020, 1021, 1022, . 1030, 1031, 1032, 1040, 1041, 1042, . 1050, 1051, 1052, 1060, 1061, 1062/ data data_org / . 110, 111, 112, 120, 121, 122, 210, 211, 212, 220, 221, 222, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 130, 131, 132, 140, 141, 142, . 230, 231, 232, 240, 241, 242, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 150, 151, 152, 160, 161, 162, 250, 251, 252, 260, 261, 262, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 1010, 1011, 1012, 1020, 1021, 1022, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 1030, 1031, 1032, 1040, 1041, 1042, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 1050, 1051, 1052, 1060, 1061, 1062/ C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C---Define chunk dimensions C ch_dims(1) = Y_CH_LENGTH ch_dims(2) = X_CH_LENGTH C C Main loop through different compression types C C C Create and open the file. C C C Initiate the GR interface. C file_id = hopen(file, DFACC_CREATE, 0) gr_id = mgstart(file_id) do 1000 i_comp=1, N_COMP_TYPES C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id, name(i_comp), NCOMP, . DFNT_INT32, il, dims) C C---Set pixel value C pixel_value(1) = 0 pixel_value(2) = 0 pixel_value(3) = 0 C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT32, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C---Define chunked GR C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL status = mgschnk (ri_id(i_comp), ch_dims, . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgschnk failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 1 start(2) = 1 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk11) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, first chunk' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 2 start(2) = 1 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk21) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, second chunk' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 5 start(2) = 2 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk52) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, third chunk' err_grwrchunk = err_grwrchunk +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif 1000 continue C C Terminate access to the GR interface. C C status = mgend(gr_id(i_comp)) status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif file_id = hopen(file, DFACC_READ, 0) if(file_id .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Initiate the GR interface and select first data set. C gr_id = mgstart(file_id) if(gr_id .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Find number of images in the file ( should be 4) C status = mgfinfo(gr_id, n_images, n_file_attrs) if(status .ne. 0) then print *, 'mgfinfo failed ' err_grwrchunk = err_grwrchunk +1 goto 2222 endif if(n_images .ne. 4) then print *, 'Wrong number of images returned ' err_grwrchunk = err_grwrchunk +1 goto 2222 endif if(n_file_attrs .ne. 0) then print *, 'Wrong number of file attributes returned ' err_grwrchunk = err_grwrchunk +1 endif do 2000 i_comp=1, n_images C C Find an index using image's name. C index = mgn2ndx(gr_id, name(i_comp)) if(index .lt. 0 .or. index .gt. 3) then print *, 'Wrong index range ' err_grwrchunk = err_grwrchunk +1 goto 2222 endif ri_id(i_comp) = mgselct(gr_id, index) if( ri_id(i_comp) .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 goto 2000 endif status = mggcompress(ri_id(i_comp), comp_typegr, comp_prm_out) if (status .eq. -1) then print *, 'mggcompress failed for', i, ' -th dataset' err_grwrchunk = err_grwrchunk +1 endif if (name(i_comp) .eq. 'Nocomp_data') then if (comp_typegr .ne. COMP_CODE_NONE) then print *, 'wrong compression type for Nocomp_data dataset' err_grwrchunk = err_grwrchunk +1 endif endif if (name(i_comp) .eq. 'Rlcomp_data') then if (comp_typegr .ne. COMP_CODE_RLE) then print *, 'wrong compression type for Rlcomp_data dataset' err_grwrchunk = err_grwrchunk +1 endif endif if (name(i_comp) .eq. 'Hucomp_data') then if (comp_typegr .ne. COMP_CODE_SKPHUFF) then print *, 'wrong compression type for Hucomp_data dataset' err_grwrchunk = err_grwrchunk +1 endif if (comp_prm_out(1). ne. skphuff_skp_size) then print *, 'wrong compression parameter for Hucomp_data dataset' err_grwrchunk = err_grwrchunk +1 endif endif if (name(i_comp) .eq. 'Gzcomp_data') then if (comp_typegr .ne. COMP_CODE_DEFLATE) then print *, 'wrong compression type for Gzcomp_data dataset' endif if (comp_prm_out(1). ne. deflate_level) then print *, 'wrong compression parameter for Gzcomp_data dataset' err_grwrchunk = err_grwrchunk +1 endif endif C C Read the stored data to the image array. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(data_arr(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grwrchunk = err_grwrchunk +1 endif 40 continue 50 continue 60 continue C C--- Read the third chunk back and compare it with original data. C start(1) = 5 start(2) = 2 status = mgrchnk(ri_id(i_comp), start, chunk52_out) if(status .ne. 0) then print *, 'mgrchnk failed for', i_comp, . '-th data set, third chunk' err_grwrchunk = err_grwrchunk +1 endif do 401 j = 1, NCOMP*X_CH_LENGTH*Y_CH_LENGTH if(chunk52(j).ne.chunk52_out(j)) then print *, 'read chunk''s data is wrong' err_grwrchunk = err_grwrchunk +1 endif 401 continue C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif 1999 continue 2000 continue 2222 continue C C Terminate access to the GR interface. C status = mgend(gr_id) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Close the file. C status = hclose(file_id) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif return end hdf4-hdf4.3.1/hdf/test/mgrf_sunOS.f000066400000000000000000001240501503061704500170020ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine mgrf (num_err) C C Test Program: C Tests the multi-file GR interface. C Input file: none C Output file: tmgrf.hdf C C implicit none include 'fortest.inc' integer num_err C C ---chunking and compression errors ---------- integer err_grchunk, err_grwrchunk, err_grcompress C --------------------------------------------- C character*20 myname parameter (myname = 'mgrf') integer hopen, hclose integer mgstart, mgfinfo, mgend, mgcreat, mgselct integer mgn2ndx, mggiinf, mgwrimg, mgrdimg, mgendac integer mgid2rf, mgr2idx, mgrltil, mgrimil, mggltid c integer mgwrlut, mgrdlut integer mgglinf, mgwclut, mgrclut c integer mgsattr integer mgatinf, mggattr, mgfndat integer mgscatt, mgsnatt, mggcatt, mggnatt integer mgwcimg, mgrcimg integer MFGR_INTERLACE_PIXEL, MFGR_INTERLACE_LINE, * MFGR_INTERLACE_COMPONENT parameter(MFGR_INTERLACE_PIXEL = 0, * MFGR_INTERLACE_LINE = 1, * MFGR_INTERLACE_COMPONENT = 2) integer DFACC_READ, DFACC_WRITE, DFACC_CREATE, DFACC_ALL integer DFACC_RDONLY, DFACC_RDWR, DFACC_CLOBBER parameter(DFACC_READ = 1, * DFACC_WRITE = 2, * DFACC_CREATE = 4, * DFACC_ALL = 7, * DFACC_RDONLY = 1, * DFACC_RDWR = 3, * DFACC_CLOBBER = 4) integer DFNT_INT8, DFNT_UINT8, * DFNT_INT16, DFNT_UINT16, * DFNT_INT32, DFNT_UINT32, * DFNT_INT64, DFNT_UINT64, * DFNT_INT128,DFNT_UINT128, * DFNT_CHAR8, DFNT_UCHAR8 parameter(DFNT_INT8 = 20, * DFNT_UINT8 = 21, * DFNT_INT16 = 22, * DFNT_UINT16 = 23, * DFNT_INT32 = 24, * DFNT_UINT32 = 25, * DFNT_INT64 = 26, * DFNT_UINT64 = 27, * DFNT_INT128 = 28, * DFNT_UINT128 = 29, * DFNT_CHAR8 = 4, * DFNT_UCHAR8 = 3) integer il character*80 TESTFILE character*80 IMAGE1, IMAGE2, IMAGEC, IMAGEC_2 character*80 ATNAME1, ATNAME_N, ATNAME_C character*80 ATNAME2, ATNAME2_N, ATNAME2_C character*1 CR character buf(3, 2, 2), buf1(2, 3, 2), buf2(2, 2, 3) character in(3,2,2), in1(2, 3, 2), in2(2, 2, 3) integer outbuf(4), outbuf1(4), outbuf2(4) integer inbuf(4), inbuf1(4), inbuf2(4) equivalence (outbuf, buf), (outbuf1, buf1), (outbuf2,buf2) equivalence (inbuf, in), (inbuf1, in1), (inbuf2,in2) character pal(3,256), in_pal(3,256), in_pal2(256,3) integer file_id, gr_id, ri_id, pal_id, index, index2 integer n_datasets, n_attrs, ref integer n_comp, nt integer dims(2), start(2), stride(2) integer*4 attr(5), attr2(5), attr2_n(5) character attr_c(6), attr2_c(6) character cbuf(2,3,4), icbuf(2,3,4) integer i, j, k, ret, number_failed DATA attr_c/'A','T','T','R','_','C'/ DATA cbuf/'A','B','C','D','E','F','G','H','I','J','K','L', + 'M','N','O','P','Q','R','S','T','U','V','W','X'/ call ptestban('Testing', myname) num_err = 0 TESTFILE = 'tmgrf.hdf' IMAGE1 = 'Image #1' IMAGEC = 'Image_c #1' ATNAME1 = 'Attr. #1' ATNAME_N = 'Numeric Attr. #1' ATNAME_C = 'Character Attr. #1' CR = char(10) number_failed = 0 C Initialize the arrays C Initialize the image arrays do 150 i=1, 2 do 2 j=1, 2 buf(1, j, i) = char(i+j) buf(2, j, i) = char(i+j) buf(3, j, i) = char(i+j) buf1(j, 1, i) = char(i-j) buf1(j, 2, i) = char(i-j) buf1(j, 3, i) = char(i-j) buf2(j, i, 1) = char(2*i - j) buf2(j, i, 2) = char(2*i - j) buf2(j, i, 3) = char(2*i - j) 2 continue 150 continue do 157 i=1,2 do 156 j=1,3 do 155 k=1,4 icbuf(k, j, i) = ' ' 155 continue 156 continue 157 continue C Initialize the palette array do 160 i=1, 256 do 3 j=1, 3 pal(j,i)=char(i+j) 3 continue 160 continue C Initialize the attribute do 170 i=1, 5 attr(i)=i*21 170 continue C Open the file file_id=hopen(TESTFILE, DFACC_ALL, 0) call VRFY(file_id,'hopen',number_failed) gr_id=mgstart(file_id) call VRFY(gr_id,'mgstart',number_failed) C Create an image call MESSAGE(5,'Creating an image') dims(1)=2 dims(2)=2 ri_id = mgcreat(gr_id,IMAGE1,3,DFNT_UINT8,MFGR_INTERLACE_PIXEL, * dims) call VRFY(ri_id,'mgcreat',number_failed) start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Writing image data') ret = mgwrimg(ri_id,start,stride,dims,outbuf) call VRFY(ret,'mgwrimg',number_failed) C Store a palette with the image call MESSAGE(5,'Writing palette data') pal_id = mggltid(ri_id, 0) call VRFY(pal_id,'mggltid',number_failed) ret = mgwclut(pal_id,3,DFNT_UINT8,MFGR_INTERLACE_PIXEL,256,pal) call VRFY(ret,'mgwclut',number_failed) C Store an attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgsnatt(ri_id,ATNAME1,DFNT_INT32,5,attr) call VRFY(ret,'mgsnatt',number_failed) C Store a numeric attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgsnatt(ri_id,ATNAME_N,DFNT_INT32,5,attr) call VRFY(ret,'mgsnatt',number_failed) C Store a character attribute with the image call MESSAGE(5,'Writing numeric attribute data') ret = mgscatt(ri_id,ATNAME_C,DFNT_CHAR8,6,attr_c) call VRFY(ret,'mgscatt',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C Create a character type image call MESSAGE(5,'Creating a character type image') dims(1)=2 dims(2)=2 ri_id = mgcreat(gr_id,IMAGEC,3,DFNT_CHAR8,MFGR_INTERLACE_PIXEL, * dims) call VRFY(ri_id,'mgcreat',number_failed) start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Writing character image data') ret = mgwcimg(ri_id,start,stride,dims,cbuf) call VRFY(ret,'mgwcimg',number_failed) ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C End access to the GR interface ret = mgend(gr_id) call VRFY(ret,'mgend',number_failed) C Close the file ret = hclose(file_id) call VRFY(ret,'hclose',number_failed) C Re-open the file file_id=hopen(TESTFILE, DFACC_ALL, 0) call VRFY(file_id,'hopen',number_failed) gr_id=mgstart(file_id) call VRFY(gr_id,'mgstart',number_failed) C Get info about the file call MESSAGE(5,'Getting GR file information') ret = mgfinfo(gr_id,n_datasets,n_attrs) call VRFY(ret,'mgfinfo',number_failed) C Select an image call MESSAGE(5,'Selecting an image') index = mgn2ndx(gr_id, IMAGE1) call VRFY(index,'mgn2ndx',number_failed) ri_id = mgselct(gr_id,index) call VRFY(ri_id,'mgselct',number_failed) C Get info about the image call MESSAGE(5,'Getting image information') ret = mggiinf(ri_id,IMAGE2,n_comp,nt,il,dims,n_attrs) call VRFY(ret,'mggiinf',number_failed) ref = mgid2rf(ri_id) call VRFY(ref,'mgid2rf',number_failed) index2 = mgr2idx(gr_id,ref) call VRFY(index2,'mgr2idx',number_failed) C Check image reading start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Reading image data') ret = mgrdimg(ri_id,start,stride,dims,inbuf) call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_LINE) call VRFY(ret,'mgrimil',number_failed) ret = mgrdimg(ri_id,start,stride,dims,inbuf1) call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrimil',number_failed) ret = mgrdimg(ri_id,start,stride,dims,inbuf2) call VRFY(ret,'mgrdimg',number_failed) C Check palette reading pal_id = mggltid(ri_id, 0) call VRFY(pal_id,'mggltid',number_failed) call MESSAGE(5,'Reading palette data') ret = mgglinf(pal_id,n_comp,nt,il,i) call VRFY(ret,'mgglinf',number_failed) ret = mgrclut(pal_id,in_pal) call VRFY(ret,'mgrclut',number_failed) ret = mgrltil(pal_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrltil',number_failed) ret = mgrclut(pal_id,in_pal2) call VRFY(ret,'mgrclut',number_failed) C Check attribute reading index = mgfndat(ri_id,ATNAME1) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggattr(ri_id,index,attr2) call VRFY(ret,'mggattr',number_failed) C Check numeric attr index = mgfndat(ri_id, ATNAME_N) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2_N,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggnatt(ri_id,index,attr2_n) call VRFY(ret,'mggnatt',number_failed) C Check character attr index = mgfndat(ri_id, ATNAME_C) call VRFY(index,'mgfndat',number_failed) call MESSAGE(5,'Reading attribute data') ret = mgatinf(ri_id,index,ATNAME2_C,nt,i) call VRFY(ret,'mgatinf',number_failed) ret = mggcatt(ri_id,index,attr2_c) call VRFY(ret,'mggcatt',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C Select a character image call MESSAGE(5,'Selecting a char type image') index = mgn2ndx(gr_id, IMAGEC) call VRFY(index,'mgn2ndx',number_failed) ri_id = mgselct(gr_id,index) call VRFY(ri_id,'mgselct',number_failed) C Get info about the image call MESSAGE(5,'Getting image information') ret = mggiinf(ri_id,IMAGEC_2,n_comp,nt,il,dims,n_attrs) call VRFY(ret,'mggiinf',number_failed) ref = mgid2rf(ri_id) call VRFY(ref,'mgid2rf',number_failed) index2 = mgr2idx(gr_id,ref) call VRFY(index2,'mgr2idx',number_failed) C Check image reading start(1)=0 start(2)=0 stride(1)=1 stride(2)=1 call MESSAGE(5,'Reading image data') call VRFY(ret,'mgrdimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_LINE) call VRFY(ret,'mgrimil',number_failed) ret = mgrcimg(ri_id,start,stride,dims,icbuf) call VRFY(ret,'mgrcimg',number_failed) ret = mgrimil(ri_id,MFGR_INTERLACE_COMPONENT) call VRFY(ret,'mgrimil',number_failed) C End access to the image ret = mgendac(ri_id) call VRFY(ret,'mgendac',number_failed) C End access to the GR interface ret = mgend(gr_id) call VRFY(ret,'mgend',number_failed) C Close the file ret = hclose(file_id) call VRFY(ret,'hclose',number_failed) C C GR chunking and compression tests. Added by EIP 1/13/98 C C ----Chunking test C creates the following files: C grch_no.hdf C grch_rl.hdf C grch_sk.hdf C grch_gz.hdf err_grchunk = 0 call test_grchunk(err_grchunk) if (err_grchunk .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grchunk failed********' endif C ----Chunking write/read test C creates the following files: C grchwr_no.hdf C grchwr_rl.hdf C grchwr_sk.hdf C grchwr_gz.hdf err_grwrchunk = 0 call test_grwrchunk(err_grwrchunk) if (err_grwrchunk .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grwrchunk failed********' endif C ----Compression test C C creates the following files: C gr_no.hdf C gr_rl.hdf C gr_sk.hdf C gr_gz.hdf err_grcompress = 0 call test_grcompress(err_grcompress) if (err_grcompress .ne. 0) then number_failed = number_failed + 1 print *, '*******mgrf: test_grcompress failed*******' endif C if (number_failed .eq. 0) then if (Verbosity .gt. 6) then print *, CR, CR print *, '****** ALL TESTS SUCCESSFUL ******' endif else print *, '****** ', number_failed, ' TESTS FAILED ******' endif return end subroutine test_grchunk( err_grchunk ) implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP integer MFGR_INTERLACE_PIXEL parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) parameter(NCOMP = 2, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id(N_COMP_TYPES), . file_id(N_COMP_TYPES) integer dims(2), start(2), edges(2), stride(2) integer err_grchunk integer i, j, status, il, k, i_comp, index integer flags, maxcache, nc_out character*12 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) C C---GR interface functions C integer mgstart, mgcreat, mgwrimg, mgsnatt, . mgrdimg, mgselct, mgendac, mgend C C---GR chunking functions C integer mggichnk, . mgscchnk, . mgschnk C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT16 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT16 = 22) parameter (X_LENGTH = 9, . Y_LENGTH = 4, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES), comp_type_out(N_COMP_TYPES) integer comp_prm(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) parameter (DEFLATE_LEVEL = 1, . SKPHUFF_SKP_SIZE = 2) C C---Data C integer*2 image_data(NCOMP, X_LENGTH, Y_LENGTH) integer*2 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) C C---Default pixel value C integer*2 pixel_value(2) C C---Chunking dimension arrays C integer ch_dims(2), ch_dims_out(2) C C---We will write/read to four different files corresponding to the C different compression types. C C No compression C file(1) = 'grch_no.hdf' name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE comp_type_out(1) = 0 C C RLE compression C file(2) = 'grch_rl.hdf' name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE comp_type_out(2) = 1 C C Adaptive Huffman compression C file(3) = 'grch_sk.hdf' name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF comp_type_out(3) = 1 C C GZIP compression C file(4) = 'grch_gz.hdf' name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE comp_type_out(4) = 1 C C Data initialization C do 30 j = 1, Y_LENGTH do 20 i = 1, X_LENGTH do 10 k = 1, NCOMP image_data(k, i, j) = i + j - 1 10 continue 20 continue 30 continue C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C---Define chunk dimensions C ch_dims(1) = X_CH_LENGTH ch_dims(2) = Y_CH_LENGTH C C Main loop through different compression types C do 1000 i_comp=1, N_COMP_TYPES C C Create and open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_CREATE, 0) C C Initiate the GR interface. C gr_id(i_comp) = mgstart(file_id(i_comp)) C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id(i_comp), name(i_comp), NCOMP, . DFNT_INT16, il, dims) C C---Set pixel value C pixel_value(1) = 0 pixel_value(2) = 0 C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT16, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C---Define chunked GR C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL status = mgschnk (ri_id(i_comp), ch_dims, . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgschnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C---Set chunk cache to hold maximum of 3 chunks C maxcache = 3 flags = 0 status = mgscchnk (ri_id(i_comp), maxcache, flags) if(status .ne. 3) then print *, 'mgscchnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Define the location, pattern, and size of the data set C that will be written to. start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C Write the stored data to the image array. status = mgwrimg(ri_id(i_comp), start, stride, edges, image_data) if(status .ne. 0) then print *, 'mgwrimg failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 1000 continue do 2000 i_comp=1, N_COMP_TYPES C C Open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_READ, 0) if(status .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Initiate the GR interface and select first data set. C gr_id(i_comp) = mgstart(file_id(i_comp)) if(status .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif index = 0 ri_id(i_comp) = mgselct(gr_id(i_comp), index) if(status .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Read the stored data to the image array. C status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(image_data(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grchunk = err_grchunk +1 endif 40 continue 50 continue 60 continue C C Check chunking info C status = mggichnk(ri_id(i_comp), ch_dims_out, . nc_out) if(status .ne. 0) then print *, 'mggichnk failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif if (comp_type_out(i_comp) .ne. nc_out) then print *, 'mggichnk returns wrong compression type for', . i_comp, '-th data set' err_grchunk = err_grchunk + 1 endif if ( (ch_dims(1) .ne. ch_dims_out(1)) .or. . (ch_dims(2) .ne. ch_dims_out(2))) then print *, 'mggichnk returns wrong chunk dimensions for', . i_comp, '-th data set' err_grchunk = err_grchunk + 1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grchunk = err_grchunk +1 endif 2000 continue return end C C GR compression test C subroutine test_grcompress( err_grcompress ) implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) integer MFGR_INTERLACE_PIXEL parameter(NCOMP = 2, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id(N_COMP_TYPES), . file_id(N_COMP_TYPES) integer dims(2), start(2), edges(2), stride(2) integer i, j, k, status, il, i_comp, index integer err_grcompress character*12 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) C C---GR interface functions C integer mgstart, mgcreat, mgwrimg, mgn2ndx, . mgsnatt, . mgrdimg, mgselct, mgendac, mgend C C---GR compression function C integer mgscompress C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT16 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT16 = 22) parameter (X_LENGTH = 9, . Y_LENGTH = 4, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES) integer comp_prm(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) parameter (DEFLATE_LEVEL = 1, . SKPHUFF_SKP_SIZE = 2) C C---Data C integer*2 image_data(NCOMP, X_LENGTH, Y_LENGTH) integer*2 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) C C---Default pixel value C integer*2 pixel_value(2) C C---We will write/read to four different files corresponding to the C different compression types. C C No compression C file(1) = 'gr_no.hdf' name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE C C RLE compression C file(2) = 'gr_rl.hdf' name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE C C Adaptive Huffman compression C file(3) = 'gr_sk.hdf' name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF C C GZIP compression C file(4) = 'gr_gz.hdf' name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE C C Data initialization C do 30 j = 1, Y_LENGTH do 20 i = 1, X_LENGTH do 10 k = 1, NCOMP image_data(k, i, j) = i + j - 1 10 continue 20 continue 30 continue C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C Main loop through different compression types C do 1000 i_comp=1, N_COMP_TYPES C C Create and open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_CREATE, 0) if(file_id(i_comp) .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Initiate the GR interface. C gr_id(i_comp) = mgstart(file_id(i_comp)) if(gr_id(i_comp) .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id(i_comp), name(i_comp), NCOMP, . DFNT_INT16, il, dims) if(ri_id(i_comp) .eq. -1) then print *, 'mgcreat failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C---Set pixel value C pixel_value(1) = 0 pixel_value(2) = 0 C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT16, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C---Set compression C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL status = mgscompress (ri_id(i_comp), . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgscompress failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Define the location, pattern, and size of the data set C that will be written to. start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 C Write the stored data to the image array.. status = mgwrimg(ri_id(i_comp), start, stride, edges, image_data) if(status .ne. 0) then print *, 'mgwrimg failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif 1000 continue do 2000 i_comp=1, N_COMP_TYPES C C Open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_READ, 0) if(file_id(i_comp) .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Initiate the GR interface and select first data set. C gr_id(i_comp) = mgstart(file_id(i_comp)) if(gr_id(i_comp) .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif index = mgn2ndx(gr_id(i_comp), name(i_comp)) if(index .eq. -1) then print *, 'mgn2ndx failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif ri_id(i_comp) = mgselct(gr_id(i_comp), index) if(ri_id(i_comp) .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Read the stored data to the image array. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(image_data(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grcompress = err_grcompress +1 endif 40 continue 50 continue 60 continue C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grcompress = err_grcompress +1 endif 2000 continue return end subroutine test_grwrchunk( err_grwrchunk ) C C---This subroutine tests GR write/read functions C implicit none integer N_COMP_TYPES, N_COMP_ARG, NCOMP integer MFGR_INTERLACE_PIXEL parameter(N_COMP_TYPES = 4, N_COMP_ARG =1) parameter(NCOMP = 3, MFGR_INTERLACE_PIXEL = 0) integer ri_id(N_COMP_TYPES), . gr_id(N_COMP_TYPES), . file_id(N_COMP_TYPES) integer dims(2), start(2), edges(2), stride(2) integer err_grwrchunk integer i, j, status, il, k, i_comp, index character*13 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) C C---GR interface functions C integer mgstart, mgcreat, mgsnatt, . mgrdimg, mgselct, mgendac, mgend C C---GR chunking functions C integer mgwchnk, . mgrchnk, . mgschnk C integer hopen, hclose integer DFACC_CREATE, . DFACC_READ, . DFACC_WRITE integer DFNT_INT16 integer X_LENGTH, Y_LENGTH integer X_CH_LENGTH, Y_CH_LENGTH parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) parameter (DFNT_INT16 = 22) parameter (X_LENGTH = 6, . Y_LENGTH = 10, . X_CH_LENGTH = 3, . Y_CH_LENGTH = 2) C C---Compression types and parameters arrays C integer comp_type(N_COMP_TYPES), comp_type_out(N_COMP_TYPES) integer comp_prm(N_COMP_ARG) C C---Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE, . SKPHUFF_SKP_SIZE, . DEFLATE_LEVEL parameter(COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) parameter (DEFLATE_LEVEL = 1, . SKPHUFF_SKP_SIZE = 2) C C---Data C integer*2 chunk11(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*2 chunk21(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*2 chunk52(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*2 chunk52_out(NCOMP* X_CH_LENGTH*Y_CH_LENGTH) integer*2 data_org(NCOMP* X_LENGTH*Y_LENGTH) integer*2 data_org1(30) integer*2 data_org2(30) integer*2 data_org3(30) integer*2 data_org4(30) integer*2 data_org5(30) integer*2 data_org6(30) integer*2 image_data_out(NCOMP,X_LENGTH,Y_LENGTH) integer*2 data_arr(NCOMP,X_LENGTH,Y_LENGTH) C C---Those statemnets were created for SunOS since the C compiler does not support multiple continuation lines C needed for data initialization in DATA statement. C This file should be used only on SunOS and C should be deleted from CVS as soon as we drop SunOS support. C EP 5/5/99 C equivalence (data_org(1), data_arr(1,1,1)) equivalence (data_org(1), data_org1(1)) equivalence (data_org(31), data_org2(1)) equivalence (data_org(61), data_org3(1)) equivalence (data_org(91), data_org4(1)) equivalence (data_org(121), data_org5(1)) equivalence (data_org(151), data_org6(1)) C C---Default pixel value C integer*2 pixel_value(3) C C---Chunking dimension arrays C integer ch_dims(2) C C---We will write/read to four different files corresponding to the C different compression types. C C No compression C file(1) = 'grchwr_no.hdf' name(1) = 'Nocomp_data' comp_type(1) = COMP_CODE_NONE comp_type_out(1) = 0 C C RLE compression C file(2) = 'grchwr_rl.hdf' name(2) = 'Rlcomp_data' comp_type(2) = COMP_CODE_RLE comp_type_out(2) = 1 C C Adaptive Huffman compression C file(3) = 'grchwr_sk.hdf' name(3) = 'Hucomp_data' comp_type(3) = COMP_CODE_SKPHUFF comp_type_out(3) = 1 C C GZIP compression C file(4) = 'grchwr_gz.hdf' name(4) = 'Gzcomp_data' comp_type(4) = COMP_CODE_DEFLATE comp_type_out(4) = 1 C C Data initialization C data chunk11 / 110, 111, 112, 120, 121, 122, . 130, 131, 132, 140, 141, 142, . 150, 151, 152, 160, 161, 162/ data chunk21 / . 210, 211, 212, 220, 221, 222, . 230, 231, 232, 240, 241, 242, . 250, 251, 252, 260, 261, 262 . / data chunk52 / . 1010, 1011, 1012, 1020, 1021, 1022, . 1030, 1031, 1032, 1040, 1041, 1042, . 1050, 1051, 1052, 1060, 1061, 1062 . / data data_org1 . / 110, 111, 112, 120, 121, 122, . 210, 211, 212, 220, 221, 222, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0 / data data_org2 . / 130, 131, 132, 140, . 141, 142, 230, 231, 232, 240, 241, 242, . 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0 / data data_org3 . / 150, 151, 152, 160, 161, 162, 250, 251, . 252, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/ data data_org4 . / 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 1010, 1011, 1012, 1020, 1021, 1022 / data data_org5 . / 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 1030, 1031, 1032, 1040, 1041, 1042/ data data_org6 . / 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . 0, 1050, 1051, 1052, 1060, 1061, 1062 / C C Initialize compression argument array C do 35 i = 1, N_COMP_ARG comp_prm(i) = 0 35 continue C C---Define chunk dimensions C ch_dims(1) = Y_CH_LENGTH ch_dims(2) = X_CH_LENGTH C C Main loop through different compression types C do 1000 i_comp=1, N_COMP_TYPES C C Create and open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_CREATE, 0) C C Initiate the GR interface. C gr_id(i_comp) = mgstart(file_id(i_comp)) C Define the number of components and dimensions of the image. il = MFGR_INTERLACE_PIXEL dims(1) = X_LENGTH dims(2) = Y_LENGTH C Create the data set. ri_id(i_comp) = mgcreat(gr_id(i_comp), name(i_comp), NCOMP, . DFNT_INT16, il, dims) C C---Set pixel value C pixel_value(1) = 0 pixel_value(2) = 0 pixel_value(3) = 0 C C---Fill the image array with the default pixel value C status = mgsnatt(ri_id(i_comp), 'FillValue', DFNT_INT16, . ncomp, pixel_value) if(status .ne. 0) then print *, 'mgsnatt failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C---Define chunked GR C if (i_comp. eq. 3) comp_prm(1) = SKPHUFF_SKP_SIZE if (i_comp. eq. 4) comp_prm(1) = DEFLATE_LEVEL status = mgschnk (ri_id(i_comp), ch_dims, . comp_type(i_comp),comp_prm) if(status .ne. 0) then print *, 'mgschnk failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 1 start(2) = 1 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk11) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, first chunk' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 2 start(2) = 1 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk21) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, second chunk' err_grwrchunk = err_grwrchunk +1 endif C C Define the location of the first chunk C that will be written to. start(1) = 5 start(2) = 2 C Write the stored data to the image array. status = mgwchnk(ri_id(i_comp), start, chunk52) if(status .ne. 0) then print *, 'mgwchnk failed for', i_comp, . '-th data set, third chunk' err_grwrchunk = err_grwrchunk +1 endif C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif 1000 continue do 2000 i_comp=1, N_COMP_TYPES C C Open the file. C file_id(i_comp) = hopen(file(i_comp), DFACC_READ, 0) if(status .eq. -1) then print *, 'hopen failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Initiate the GR interface and select first data set. C gr_id(i_comp) = mgstart(file_id(i_comp)) if(status .eq. -1) then print *, 'mgstart failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif index = 0 ri_id(i_comp) = mgselct(gr_id(i_comp), index) if(status .eq. -1) then print *, 'mgselct failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Read the stored data to the image array. C start(1) = 0 start(2) = 0 edges(1) = X_LENGTH edges(2) = Y_LENGTH stride(1) = 1 stride(2) = 1 status = mgrdimg(ri_id(i_comp), start, stride, edges, . image_data_out) if(status .ne. 0) then print *, 'mgrdimg failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C--- Compare the data we read with the original data C do 60 j = 1, Y_LENGTH do 50 i = 1, X_LENGTH do 40 k = 1, ncomp if(data_arr(k, i, j).ne.image_data_out(k,i,j)) then print *, 'data is wrong' err_grwrchunk = err_grwrchunk +1 endif 40 continue 50 continue 60 continue C C--- Read the third chunk back and compare it with original data. C start(1) = 5 start(2) = 2 status = mgrchnk(ri_id(i_comp), start, chunk52_out) if(status .ne. 0) then print *, 'mgrchnk failed for', i_comp, . '-th data set, third chunk' err_grwrchunk = err_grwrchunk +1 endif do 401 j = 1, NCOMP*X_CH_LENGTH*Y_CH_LENGTH if(chunk52(j).ne.chunk52_out(j)) then print *, 'read chunk''s data is wrong' err_grwrchunk = err_grwrchunk +1 endif 401 continue C C Terminate access to the array. C status = mgendac(ri_id(i_comp)) if(status .ne. 0) then print *, 'mgendac failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Terminate access to the GR interface. C status = mgend(gr_id(i_comp)) if(status .ne. 0) then print *, 'mgend failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif C C Close the file. C status = hclose(file_id(i_comp)) if(status .ne. 0) then print *, 'hclose failed for', i_comp, '-th data set' err_grwrchunk = err_grwrchunk +1 endif 2000 continue return end hdf4-hdf4.3.1/hdf/test/nbit.c000066400000000000000000001033261503061704500156540ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE nbit.c Test HDF N-Bit dataset I/O routines REMARKS These tests depend on the bitio layer, the compression layer and the SD layer... DESIGN BUGS/LIMITATIONS EXPORTED ROUTINES AUTHOR Quincey Koziol MODIFICATION HISTORY 1/19/94 - Started coding */ #include "tproto.h" #define TESTFILE_NAME "tnbit.hdf" #define DATAFILE_NAME "test_files/nbit.dat" #define NBIT_TAG1 1000 #define NBIT_REF1 1000 #define NBIT_SIZE1 4096 #define NBIT_BITS1 6 #define NBIT_MASK1 0x3f #define NBIT_TAG2 1001 #define NBIT_REF2 1001 #define NBIT_SIZE2 4096 #define NBIT_BITS2 6 #define NBIT_MASK2 0x3f #define NBIT_TAG3 1002 #define NBIT_REF3 1002 #define NBIT_SIZE3 4096 #define NBIT_BITS3 12 #define NBIT_MASK3A 0x0fff #define NBIT_MASK3B 0xffff #define NBIT_TAG4 1003 #define NBIT_REF4 1003 #define NBIT_SIZE4 4096 #define NBIT_BITS4 14 #define NBIT_MASK4A 0xffff #define NBIT_MASK4B 0xffff #define NBIT_TAG5 1004 #define NBIT_REF5 1004 #define NBIT_SIZE5 4096 #define NBIT_BITS5 27 #define NBIT_MASK5A 0x07ffffff #define NBIT_MASK5B 0xffffffffUL #define NBIT_TAG6 1005 #define NBIT_REF6 1005 #define NBIT_SIZE6 4096 #define NBIT_BITS6 29 #define NBIT_MASK6A 0xffffffffUL #define NBIT_MASK6B 0xffffffffUL #define NBIT_TAG7 1006 #define NBIT_REF7 1006 #define NBIT_SIZE7 4096 #define NBIT_BITS7 4 #define NBIT_OFF7 6 #define NBIT_MASK7A 0x78 #define NBIT_MASK7B 0x87 #define NBIT_TAG8 1007 #define NBIT_REF8 1007 #define NBIT_SIZE8 4096 #define NBIT_BITS8 4 #define NBIT_OFF8 5 #define NBIT_MASK8 0x03 #define NBIT_TAG9 1008 #define NBIT_REF9 1008 #define NBIT_SIZE9 4096 #define NBIT_BITS9 8 #define NBIT_OFF9 12 #define NBIT_MASK9A 0xe01f #define NBIT_MASK9B 0xffff #define NBIT_TAG10 1009 #define NBIT_REF10 1009 #define NBIT_SIZE10 4096 #define NBIT_BITS10 9 #define NBIT_OFF10 10 #define NBIT_MASK10A 0x0003 #define NBIT_MASK10B 0xffff #define NBIT_TAG11 1010 #define NBIT_REF11 1010 #define NBIT_SIZE11 4096 #define NBIT_BITS11 18 #define NBIT_OFF11 27 #define NBIT_MASK11A 0xf00003ffUL #define NBIT_MASK11B 0xffffffffUL #define NBIT_TAG12 1011 #define NBIT_REF12 1011 #define NBIT_SIZE12 4096 #define NBIT_BITS12 27 #define NBIT_OFF12 31 #define NBIT_MASK12A 0x0000001f #define NBIT_MASK12B 0xffffffffUL static void test_nbit1(int32 fid); static void test_nbit2(int32 fid); static void test_nbit3(int32 fid); static void test_nbit4(int32 fid); static void test_nbit5(int32 fid); static void test_nbit6(int32 fid); static void test_nbit7(int32 fid); static void test_nbit8(int32 fid); static void test_nbit9(int32 fid); static void test_nbit10(int32 fid); static void test_nbit11(int32 fid); static void test_nbit12(int32 fid); static void test_nbit1(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint8 *outbuf, *inbuf; uint8 test_val; outbuf = (uint8 *)malloc(NBIT_SIZE1 * sizeof(uint8)); inbuf = (uint8 *)malloc(NBIT_SIZE1 * sizeof(uint8)); for (i = 0; i < NBIT_SIZE1; i++) /* fill with pseudo-random data */ outbuf[i] = (uint8)(i * 3); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as an unsigned 8-bit n-bit element\n");); c_info.nbit.nt = DFNT_UINT8; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS1 - 1; c_info.nbit.bit_len = NBIT_BITS1; aid1 = HCcreate(fid, NBIT_TAG1, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = Hwrite(aid1, NBIT_SIZE1, outbuf); if (ret != NBIT_SIZE1) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); ret = Hgetelement(fid, NBIT_TAG1, (uint16)ref1, inbuf); if (ret != NBIT_SIZE1) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } for (i = 0; i < NBIT_SIZE1; i++) { test_val = (uint8)(outbuf[i] & NBIT_MASK1); if ((uint8)inbuf[i] != (uint8)test_val) { printf("test_nbit1: Wrong data at %d, out (%d)%d in %d\n", i, outbuf[i], test_val, inbuf[i]); errors++; } } free(outbuf); free(inbuf); num_errs += errors; } static void test_nbit2(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int8 *outbuf, *inbuf; outbuf = (int8 *)malloc(NBIT_SIZE2 * sizeof(int8)); inbuf = (int8 *)malloc(NBIT_SIZE2 * sizeof(int8)); for (i = 0; i < NBIT_SIZE2; i++) /* fill with pseudo-random data */ outbuf[i] = (int8)(((i * 3) % 64) - 32); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 8-bit n-bit element\n");); c_info.nbit.nt = DFNT_INT8; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS2 - 1; c_info.nbit.bit_len = NBIT_BITS2; aid1 = HCcreate(fid, NBIT_TAG2, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = Hwrite(aid1, NBIT_SIZE2, (uint8 *)outbuf); if (ret != NBIT_SIZE2) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); ret = Hgetelement(fid, NBIT_TAG2, (uint16)ref1, (uint8 *)inbuf); if (ret != NBIT_SIZE2) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } for (i = 0; i < ret; i++) { if ((int8)inbuf[i] != (int8)outbuf[i]) { printf("test_nbit2: Wrong data at %d, out %d in %d\n", i, outbuf[i], inbuf[i]); errors++; } } free(outbuf); free(inbuf); num_errs += errors; } static void test_nbit3(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint16 *outbuf, *inbuf; uint16 test_out, test_in; uint8 *convbuf; outbuf = (uint16 *)malloc(NBIT_SIZE3 * sizeof(uint16)); inbuf = (uint16 *)malloc(NBIT_SIZE3 * sizeof(uint16)); convbuf = (uint8 *)malloc(NBIT_SIZE3 * (size_t)DFKNTsize(DFNT_UINT16)); for (i = 0; i < NBIT_SIZE3; i++) /* fill with pseudo-random data */ outbuf[i] = (uint16)(i * 3); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a unsigned 16-bit n-bit element\n");); c_info.nbit.nt = DFNT_UINT16; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS3 - 1; c_info.nbit.bit_len = NBIT_BITS3; aid1 = HCcreate(fid, NBIT_TAG3, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_UINT16, NBIT_SIZE3, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE3 * DFKNTsize(DFNT_UINT16), convbuf); if (ret != NBIT_SIZE3 * DFKNTsize(DFNT_UINT16)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_UINT16) * NBIT_SIZE3); ret = Hgetelement(fid, NBIT_TAG3, (uint16)ref1, convbuf); if (ret != NBIT_SIZE3 * DFKNTsize(DFNT_UINT16)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_UINT16, NBIT_SIZE3, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE3; i++) { test_out = (uint16)(outbuf[i] & NBIT_MASK3A); test_in = (uint16)(inbuf[i] & NBIT_MASK3B); #ifndef TESTING if ((int16)test_in != (int16)test_out) { printf("test_nbit3: Wrong data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit4(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int16 *outbuf, *inbuf; int16 test_out, test_in; uint8 *convbuf; outbuf = (int16 *)malloc(NBIT_SIZE4 * sizeof(int16)); inbuf = (int16 *)malloc(NBIT_SIZE4 * sizeof(int16)); convbuf = (uint8 *)malloc(NBIT_SIZE4 * (size_t)DFKNTsize(DFNT_INT16)); for (i = 0; i < NBIT_SIZE4; i++) /* fill with pseudo-random data */ outbuf[i] = (int16)(((i * 3) % (64 * 256)) - (32 * 256)); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 16-bit n-bit element\n");); c_info.nbit.nt = DFNT_INT16; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS4 - 1; c_info.nbit.bit_len = NBIT_BITS4; aid1 = HCcreate(fid, NBIT_TAG4, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_INT16, NBIT_SIZE4, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE4 * DFKNTsize(DFNT_INT16), convbuf); if (ret != NBIT_SIZE4 * DFKNTsize(DFNT_INT16)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_INT16) * NBIT_SIZE4); ret = Hgetelement(fid, NBIT_TAG4, (uint16)ref1, convbuf); if (ret != NBIT_SIZE4 * DFKNTsize(DFNT_INT16)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_INT16, NBIT_SIZE4, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE4; i++) { test_out = (int16)(outbuf[i] & NBIT_MASK4A); test_in = (int16)(inbuf[i] & NBIT_MASK4B); #ifndef TESTING if ((int16)test_in != (int16)test_out) { printf("test_nbit4: Wrong data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit5(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint32 *outbuf, *inbuf; uint32 test_out, test_in; uint8 *convbuf; outbuf = (uint32 *)malloc(NBIT_SIZE5 * sizeof(uint32)); inbuf = (uint32 *)malloc(NBIT_SIZE5 * sizeof(uint32)); convbuf = (uint8 *)malloc(NBIT_SIZE5 * (size_t)DFKNTsize(DFNT_UINT32)); for (i = 0; i < NBIT_SIZE5; i++) /* fill with pseudo-random data */ outbuf[i] = (uint32)(i * 300000); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a unsigned 32-bit n-bit element\n");); c_info.nbit.nt = DFNT_UINT32; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS5 - 1; c_info.nbit.bit_len = NBIT_BITS5; aid1 = HCcreate(fid, NBIT_TAG5, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_UINT32, NBIT_SIZE5, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE5 * DFKNTsize(DFNT_UINT32), convbuf); if (ret != NBIT_SIZE5 * DFKNTsize(DFNT_UINT32)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_UINT32) * NBIT_SIZE5); ret = Hgetelement(fid, NBIT_TAG5, (uint16)ref1, convbuf); if (ret != NBIT_SIZE5 * DFKNTsize(DFNT_UINT32)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_UINT32, NBIT_SIZE5, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE5; i++) { test_out = outbuf[i] & NBIT_MASK5A; test_in = (uintn)inbuf[i] & (uintn)NBIT_MASK5B; #ifndef TESTING if ((uint32)test_in != (uint32)test_out) { printf("test_nbit5: Wrong data at %d, out (%lu)%lu in (%lu)%lu\n", i, (unsigned long)outbuf[i], (unsigned long)test_out, (unsigned long)inbuf[i], (unsigned long)test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit6(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int32 *outbuf, *inbuf; int32 test_out, test_in; uint8 *convbuf; outbuf = (int32 *)malloc(NBIT_SIZE6 * sizeof(int32)); inbuf = (int32 *)malloc(NBIT_SIZE6 * sizeof(int32)); convbuf = (uint8 *)malloc(NBIT_SIZE6 * (size_t)DFKNTsize(DFNT_INT32)); for (i = 0; i < NBIT_SIZE6; i++) /* fill with pseudo-random data */ outbuf[i] = ((i * 300001) % ((int32)16 * 256 * 256 * 256)) - ((int32)8 * 256 * 256 * 256); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 32-bit n-bit element\n");); c_info.nbit.nt = DFNT_INT32; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = FALSE; c_info.nbit.start_bit = NBIT_BITS6 - 1; c_info.nbit.bit_len = NBIT_BITS6; aid1 = HCcreate(fid, NBIT_TAG6, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_INT32, NBIT_SIZE6, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE6 * DFKNTsize(DFNT_INT32), convbuf); if (ret != NBIT_SIZE6 * DFKNTsize(DFNT_INT32)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_INT32) * NBIT_SIZE6); ret = Hgetelement(fid, NBIT_TAG6, (uint16)ref1, convbuf); if (ret != NBIT_SIZE6 * DFKNTsize(DFNT_INT32)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_INT32, NBIT_SIZE6, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE6; i++) { test_out = (int32)((uintn)outbuf[i] & (uintn)NBIT_MASK6A); test_in = (int32)((uintn)inbuf[i] & (uintn)NBIT_MASK6B); #ifndef TESTING if ((int32)test_in != (int32)test_out) { printf("test_nbit6: Wrong data at %d, out (%ld)%ld in (%ld)%ld\n", i, (long)outbuf[i], (long)test_out, (long)inbuf[i], (long)test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit7(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint8 *outbuf, *inbuf; uint8 test_val; outbuf = (uint8 *)malloc(NBIT_SIZE7 * sizeof(uint8)); inbuf = (uint8 *)malloc(NBIT_SIZE7 * sizeof(uint8)); for (i = 0; i < NBIT_SIZE7; i++) /* fill with pseudo-random data */ outbuf[i] = (uint8)(i * 3); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a unsigned 8-bit n-bit element with filled ones\n");); c_info.nbit.nt = DFNT_UINT8; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF7; c_info.nbit.bit_len = NBIT_BITS7; aid1 = HCcreate(fid, NBIT_TAG7, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = Hwrite(aid1, NBIT_SIZE7, outbuf); if (ret != NBIT_SIZE7) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); ret = Hgetelement(fid, NBIT_TAG7, (uint16)ref1, inbuf); if (ret != NBIT_SIZE7) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } for (i = 0; i < ret; i++) { test_val = (uint8)((outbuf[i] & NBIT_MASK7A) | NBIT_MASK7B); if ((uint8)inbuf[i] != (uint8)test_val) { printf("test_nbit7: Wrong data at %d, out (%d)%d in %d\n", i, outbuf[i], test_val, inbuf[i]); errors++; } } free(outbuf); free(inbuf); num_errs += errors; } static void test_nbit8(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int8 *outbuf, *inbuf; int8 test_val; outbuf = (int8 *)malloc(NBIT_SIZE8 * sizeof(int8)); inbuf = (int8 *)malloc(NBIT_SIZE8 * sizeof(int8)); for (i = 0; i < NBIT_SIZE8; i++) /* fill with pseudo-random data */ outbuf[i] = (int8)((((i * 3) % 16) - 8) << 2); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 8-bit n-bit element with filled ones\n");); c_info.nbit.nt = DFNT_INT8; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF8; c_info.nbit.bit_len = NBIT_BITS8; aid1 = HCcreate(fid, NBIT_TAG8, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = Hwrite(aid1, NBIT_SIZE8, (uint8 *)outbuf); if (ret != NBIT_SIZE8) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); ret = Hgetelement(fid, NBIT_TAG8, (uint16)ref1, (uint8 *)inbuf); if (ret != NBIT_SIZE8) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } for (i = 0; i < ret; i++) { test_val = (int8)(outbuf[i] | NBIT_MASK8); if ((int8)inbuf[i] != (int8)test_val) { printf("test_nbit8: Wrong data at %d, out (%d:%x)%d in %d\n", i, outbuf[i], outbuf[i], test_val, inbuf[i]); errors++; } } free(outbuf); free(inbuf); num_errs += errors; } static void test_nbit9(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint16 *outbuf, *inbuf; uint16 test_out, test_in; uint8 *convbuf; outbuf = (uint16 *)malloc(NBIT_SIZE9 * sizeof(uint16)); inbuf = (uint16 *)malloc(NBIT_SIZE9 * sizeof(uint16)); convbuf = (uint8 *)malloc(NBIT_SIZE9 * (size_t)DFKNTsize(DFNT_UINT16)); for (i = 0; i < NBIT_SIZE9; i++) /* fill with pseudo-random data */ outbuf[i] = (uint16)(i * 3); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a unsigned 16-bit n-bit element\n");); c_info.nbit.nt = DFNT_UINT16; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF9; c_info.nbit.bit_len = NBIT_BITS9; aid1 = HCcreate(fid, NBIT_TAG9, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_UINT16, NBIT_SIZE9, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE9 * DFKNTsize(DFNT_UINT16), convbuf); if (ret != NBIT_SIZE9 * DFKNTsize(DFNT_UINT16)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_UINT16) * NBIT_SIZE9); ret = Hgetelement(fid, NBIT_TAG9, (uint16)ref1, convbuf); if (ret != NBIT_SIZE9 * DFKNTsize(DFNT_UINT16)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_UINT16, NBIT_SIZE9, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE9; i++) { test_out = (uint16)((outbuf[i] | NBIT_MASK9A) & NBIT_MASK9B); test_in = (uint16)(inbuf[i] & NBIT_MASK9B); #ifndef TESTING if ((uint16)test_in != (uint16)test_out) { printf("test_nbit9: Wrong data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_val, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit10(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int16 *outbuf, *inbuf; int16 test_out, test_in; uint8 *convbuf; outbuf = (int16 *)malloc(NBIT_SIZE10 * sizeof(int16)); inbuf = (int16 *)malloc(NBIT_SIZE10 * sizeof(int16)); convbuf = (uint8 *)malloc(NBIT_SIZE10 * (size_t)DFKNTsize(DFNT_UINT16)); for (i = 0; i < NBIT_SIZE10; i++) /* fill with pseudo-random data */ outbuf[i] = (int16)((((i * 3) % (2 * 256)) - (256)) << ((NBIT_OFF10 - NBIT_BITS10) + 1)); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 16-bit n-bit element\n");); c_info.nbit.nt = DFNT_INT16; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF10; c_info.nbit.bit_len = NBIT_BITS10; aid1 = HCcreate(fid, NBIT_TAG10, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_INT16, NBIT_SIZE10, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE10 * DFKNTsize(DFNT_INT16), convbuf); if (ret != NBIT_SIZE10 * DFKNTsize(DFNT_INT16)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_INT16) * NBIT_SIZE10); ret = Hgetelement(fid, NBIT_TAG10, (uint16)ref1, convbuf); if (ret != NBIT_SIZE10 * DFKNTsize(DFNT_INT16)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_INT16, NBIT_SIZE10, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE10; i++) { /* intel windows c++ compiler has a bug when masking outbuf[i], it extends the * signed bit to all bits of higher 16 bit, so don't use MASK for intel windows * c++ compiler. Kent Yang 09/02/02 * The same error occur in the Unix Intel Compiler. Albert Cheng 10/26/02 */ /* Apparently Intel compiler bug was fixed and the fix below causes problems * when optimization is used. We decided to go to the original code that * works now with Intel 7.0 and Intel 7.1 compilers on both UNIX and Windows * EIP 12/2/03 #if (defined __INTEL_COMPILER || defined __ICL) test_out = (int16)(outbuf[i] | NBIT_MASK10A); #else test_out = (int16) ((outbuf[i] | NBIT_MASK10A) & NBIT_MASK10B); #endif */ test_out = (int16)((outbuf[i] | NBIT_MASK10A) & NBIT_MASK10B); test_in = (int16)(inbuf[i] & NBIT_MASK10B); #ifndef TESTING if ((int16)test_in != (int16)test_out) { printf("test_nbit10: Wrong data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit11(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; uint32 *outbuf, *inbuf; uint32 test_out, test_in; uint8 *convbuf; outbuf = (uint32 *)malloc(NBIT_SIZE11 * sizeof(uint32)); inbuf = (uint32 *)malloc(NBIT_SIZE11 * sizeof(uint32)); convbuf = (uint8 *)malloc(NBIT_SIZE11 * (size_t)DFKNTsize(DFNT_UINT32)); for (i = 0; i < NBIT_SIZE11; i++) /* fill with pseudo-random data */ outbuf[i] = (uint32)(i * 304327); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a unsigned 32-bit n-bit element\n");); c_info.nbit.nt = DFNT_UINT32; c_info.nbit.sign_ext = FALSE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF11; c_info.nbit.bit_len = NBIT_BITS11; aid1 = HCcreate(fid, NBIT_TAG11, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_UINT32, NBIT_SIZE11, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE11 * DFKNTsize(DFNT_UINT32), convbuf); if (ret != NBIT_SIZE11 * DFKNTsize(DFNT_UINT32)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_UINT32) * NBIT_SIZE11); ret = Hgetelement(fid, NBIT_TAG11, (uint16)ref1, convbuf); if (ret != NBIT_SIZE11 * DFKNTsize(DFNT_UINT32)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_UINT32, NBIT_SIZE11, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE11; i++) { test_out = (outbuf[i] | (uintn)NBIT_MASK11A) & (uintn)NBIT_MASK11B; test_in = inbuf[i] & (uintn)NBIT_MASK11B; #ifndef TESTING if ((uint32)test_in != (uint32)test_out) { printf("test_nbit11: Wrong data at %d, out (%lu)%lu in (%lu)%lu\n", i, (unsigned long)outbuf[i], (unsigned long)test_out, (unsigned long)inbuf[i], (unsigned long)test_in); errors++; } #else printf("data at %d, out (%u)%u in (%u)%u\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } static void test_nbit12(int32 fid) { int32 aid1; uint16 ref1; int i; int32 ret; intn errors = 0; model_info m_info; comp_info c_info; int32 *outbuf, *inbuf; int32 test_out, test_in; uint8 *convbuf; outbuf = (int32 *)malloc(NBIT_SIZE12 * sizeof(int32)); inbuf = (int32 *)malloc(NBIT_SIZE12 * sizeof(int32)); convbuf = (uint8 *)malloc(NBIT_SIZE12 * (size_t)DFKNTsize(DFNT_INT32)); for (i = 0; i < NBIT_SIZE12; i++) /* fill with pseudo-random data */ outbuf[i] = (((i * 300001) % ((int32)4 * 256 * 256 * 256)) - ((int32)2 * 256 * 256 * 256)) << ((NBIT_OFF10 - NBIT_BITS10) + 1); ref1 = Hnewref(fid); CHECK_VOID(ref1, 0, "Hnewref"); MESSAGE(5, printf("Create a new element as a signed 32-bit n-bit element\n");); c_info.nbit.nt = DFNT_INT32; c_info.nbit.sign_ext = TRUE; c_info.nbit.fill_one = TRUE; c_info.nbit.start_bit = NBIT_OFF12; c_info.nbit.bit_len = NBIT_BITS12; aid1 = HCcreate(fid, NBIT_TAG12, ref1, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); CHECK_VOID(aid1, FAIL, "HCcreate"); ret = DFKconvert(outbuf, convbuf, DFNT_INT32, NBIT_SIZE12, DFACC_WRITE, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); ret = Hwrite(aid1, NBIT_SIZE12 * DFKNTsize(DFNT_INT32), convbuf); if (ret != NBIT_SIZE12 * DFKNTsize(DFNT_INT32)) { fprintf(stderr, "ERROR(%d): Hwrite returned the wrong length: %d\n", __LINE__, (int)ret); HEprint(stdout, 0); errors++; } ret = Hendaccess(aid1); CHECK_VOID(ret, FAIL, "Hendaccess"); MESSAGE(5, printf("Verifying data\n");); memset(convbuf, 0, DFKNTsize(DFNT_INT32) * NBIT_SIZE12); ret = Hgetelement(fid, NBIT_TAG12, (uint16)ref1, convbuf); if (ret != NBIT_SIZE12 * DFKNTsize(DFNT_INT32)) { HEprint(stderr, 0); fprintf(stderr, "ERROR: (%d) Hgetelement returned the wrong length: %d\n", __LINE__, (int)ret); errors++; } ret = DFKconvert(convbuf, inbuf, DFNT_INT32, NBIT_SIZE12, DFACC_READ, 0, 0); CHECK_VOID(ret, FAIL, "DFKconvert"); for (i = 0; i < NBIT_SIZE12; i++) { test_out = (int32)(((uintn)outbuf[i] | (uintn)NBIT_MASK12A) & (uintn)NBIT_MASK12B); test_in = (int32)((uintn)inbuf[i] & (uintn)NBIT_MASK12B); #ifndef TESTING if ((int32)test_in != (int32)test_out) { printf("test_nbit12: Wrong data at %d, out (%ld)%ld in (%ld)%ld\n", i, (long)outbuf[i], (long)test_out, (long)inbuf[i], (long)test_in); errors++; } #else printf("data at %d, out (%d)%d in (%d)%d\n", i, outbuf[i], test_out, inbuf[i], test_in); #endif } free(outbuf); free(inbuf); free(convbuf); num_errs += errors; } void test_nbit(void) { int32 fid; int32 ret; MESSAGE(5, printf("Creating a file %s\n", TESTFILE_NAME);); fid = Hopen(TESTFILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); test_nbit1(fid); /* basic uint8 test */ test_nbit2(fid); /* basic int8 test */ test_nbit3(fid); /* basic uint16 test */ test_nbit4(fid); /* basic int16 test */ test_nbit5(fid); /* basic uint32 test */ test_nbit6(fid); /* basic int32 test */ test_nbit7(fid); /* advanced uint8 with fill-ones test */ test_nbit8(fid); /* advanced int8 with fill-ones test */ test_nbit9(fid); /* advanced uint16 with fill-ones test */ test_nbit10(fid); /* advanced int16 with fill-ones test */ test_nbit11(fid); /* advanced uint32 with fill-ones test */ test_nbit12(fid); /* advanced int32 with fill-ones test */ MESSAGE(5, printf("Closing the files\n");); ret = Hclose(fid); CHECK_VOID(ret, FAIL, "Hclose"); } hdf4-hdf4.3.1/hdf/test/rig.c000066400000000000000000002153401503061704500155010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" #define XSIZE 13 #define YSIZE 15 #define TESTFILE "tdf24.hdf" #define JPEGX 46 #define JPEGY 23 #define NCOMPS 3 #define JPEGFILE "tjpeg.hdf" #define NONHDF_JPEGFILE "tnonhdf_jpeg.hdf" static uint8 jpeg_8bit_orig[JPEGY][JPEGX] = { {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 201, 201, 201, 200, 200, 200, 200, 200, 200, 201, 202, 204, 206, 208, 208, 206, 202, 201, 200, 200, 204, 210, 212, 214, 212, 206, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 201, 202, 204, 203, 201, 202, 200, 199, 200, 202, 202, 203, 204, 207, 210, 213, 218, 222, 209, 205, 207, 209, 212, 215, 220, 225, 203, 212, 216, 218, 221, 223, 201, 201, 200, 200, 200, 200, 201, 200, 200, 201, 201}, {200, 200, 199, 200, 200, 201, 203, 206, 207, 206, 202, 197, 193, 193, 193, 192, 193, 199, 204, 205, 210, 219, 214, 193, 213, 225, 209, 196, 206, 222, 204, 208, 211, 121, 127, 229, 206, 196, 198, 207, 211, 212, 214, 215, 211, 196}, {200, 201, 200, 200, 199, 200, 200, 198, 198, 199, 202, 207, 209, 211, 195, 180, 182, 182, 170, 111, 39, 71, 58, 64, 69, 73, 72, 82, 92, 213, 83, 73, 126, 111, 89, 92, 209, 197, 198, 201, 81, 51, 56, 55, 210, 208}, {54, 53, 54, 55, 53, 51, 56, 55, 50, 54, 53, 49, 54, 55, 64, 66, 63, 105, 78, 51, 59, 39, 49, 45, 50, 66, 58, 67, 67, 71, 73, 87, 68, 80, 94, 113, 67, 202, 194, 90, 42, 39, 59, 43, 44, 58}, {54, 52, 51, 53, 55, 56, 53, 57, 55, 57, 51, 51, 53, 50, 46, 50, 55, 51, 45, 68, 66, 63, 67, 50, 57, 38, 47, 56, 62, 65, 65, 87, 74, 110, 59, 63, 45, 47, 98, 40, 41, 199, 199, 170, 109, 43}, {198, 198, 200, 201, 199, 203, 202, 201, 199, 197, 197, 192, 190, 190, 191, 195, 202, 153, 101, 197, 61, 69, 138, 182, 154, 202, 154, 73, 76, 71, 83, 83, 150, 231, 203, 179, 49, 53, 47, 162, 208, 203, 185, 199, 203, 83}, {199, 200, 204, 202, 202, 200, 199, 197, 195, 198, 200, 202, 207, 211, 216, 219, 214, 199, 193, 192, 195, 195, 199, 205, 207, 218, 229, 196, 138, 121, 116, 213, 233, 197, 207, 211, 212, 215, 216, 216, 199, 197, 199, 201, 209, 211}, {200, 201, 201, 202, 201, 201, 201, 201, 203, 206, 206, 207, 206, 201, 202, 202, 203, 202, 203, 205, 208, 211, 214, 221, 225, 209, 211, 213, 217, 220, 224, 225, 200, 200, 200, 201, 207, 209, 202, 200, 201, 201, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 201, 202, 203, 201, 200, 200, 200, 200, 200, 200, 200, 203, 209, 212, 214, 214, 211, 203, 200, 200, 200, 200, 202, 204, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}}; static uint8 jpeg_8bit_j80[JPEGY][JPEGX] = { {200, 200, 200, 200, 200, 200, 200, 200, 202, 202, 201, 201, 201, 200, 200, 200, 201, 201, 200, 200, 200, 201, 202, 202, 202, 202, 201, 200, 200, 200, 200, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 200, 200, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 201, 201, 201, 200, 200, 201, 201, 201, 200, 199, 199, 199, 199, 200, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 201, 200, 199, 202, 202, 202, 202, 202, 200, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 200, 200, 200, 199, 199, 200, 200, 200, 201, 201, 200, 200, 200, 200, 200, 201, 201, 201, 200, 200, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 198, 198, 198, 199, 199, 198, 198, 198, 199, 200, 201, 197, 197, 197, 198, 198, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 200, 200, 201, 202, 202, 203, 201, 200, 199, 198, 199, 201, 204, 205, 203, 202, 200, 199, 198, 200, 202, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 202, 203, 205, 207, 208, 209, 205, 203, 201, 200, 202, 205, 208, 211, 214, 211, 206, 202, 200, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {199, 199, 198, 199, 200, 202, 204, 205, 202, 200, 197, 198, 201, 204, 205, 205, 220, 204, 207, 222, 225, 201, 206, 213, 205, 218, 219, 224, 222, 198, 222, 208, 222, 208, 235, 201, 189, 204, 198, 202, 199, 201, 209, 192, 192, 217}, {200, 200, 199, 199, 200, 201, 202, 203, 210, 208, 205, 203, 201, 197, 191, 186, 170, 212, 216, 191, 222, 217, 218, 185, 216, 226, 200, 193, 207, 232, 193, 221, 210, 124, 127, 218, 223, 192, 197, 207, 207, 209, 210, 220, 209, 184}, {202, 201, 201, 200, 200, 200, 201, 201, 196, 197, 200, 203, 203, 200, 195, 191, 196, 180, 168, 123, 34, 66, 56, 74, 57, 83, 73, 81, 94, 221, 72, 64, 120, 119, 83, 100, 207, 190, 198, 198, 94, 44, 57, 50, 213, 215}, {54, 54, 54, 53, 53, 54, 54, 54, 49, 51, 55, 59, 62, 63, 63, 62, 54, 110, 65, 43, 69, 40, 54, 36, 53, 67, 57, 65, 66, 61, 94, 83, 83, 69, 102, 99, 64, 214, 195, 90, 28, 46, 63, 51, 43, 57}, {52, 52, 53, 54, 54, 55, 55, 55, 56, 54, 51, 48, 47, 46, 48, 49, 56, 63, 48, 72, 67, 55, 51, 65, 50, 48, 46, 70, 49, 67, 63, 86, 59, 107, 60, 73, 40, 44, 102, 36, 40, 218, 192, 165, 101, 44}, {198, 199, 200, 201, 202, 202, 202, 202, 199, 197, 194, 190, 188, 190, 194, 198, 196, 151, 88, 202, 61, 71, 148, 169, 165, 188, 139, 77, 86, 70, 81, 84, 163, 226, 206, 184, 52, 46, 48, 165, 204, 189, 179, 213, 208, 79}, {199, 200, 201, 202, 202, 201, 200, 199, 201, 203, 204, 205, 206, 209, 214, 218, 218, 198, 195, 199, 182, 201, 202, 206, 201, 228, 240, 191, 131, 121, 110, 221, 211, 208, 207, 198, 213, 231, 204, 220, 197, 211, 207, 194, 207, 213}, {201, 202, 202, 203, 202, 200, 199, 197, 199, 202, 206, 206, 204, 202, 202, 203, 205, 195, 210, 199, 211, 220, 210, 224, 224, 204, 215, 205, 227, 218, 229, 220, 203, 201, 199, 202, 206, 206, 195, 205, 203, 194, 202, 197, 210, 190}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 203, 206, 210, 213, 213, 210, 206, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 201, 202, 202, 201, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 198, 197, 197, 198, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 201, 200, 199, 199, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 200, 201, 201, 200, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 202, 202, 202, 202, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}}; static uint8 jpeg_8bit_j30[JPEGY][JPEGX] = { {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {202, 202, 202, 202, 202, 202, 202, 202, 196, 196, 197, 198, 200, 201, 202, 202, 203, 206, 220, 234, 226, 203, 192, 196, 226, 219, 212, 213, 219, 222, 219, 214, 213, 224, 225, 214, 206, 207, 207, 202, 213, 205, 195, 188, 190, 199}, {203, 203, 203, 203, 203, 203, 203, 203, 221, 219, 214, 207, 200, 193, 188, 185, 186, 206, 207, 186, 187, 214, 229, 222, 219, 205, 195, 203, 219, 221, 203, 183, 192, 141, 135, 187, 212, 183, 168, 185, 208, 218, 230, 234, 226, 209}, {203, 203, 203, 203, 203, 203, 203, 203, 207, 207, 207, 207, 207, 207, 207, 207, 170, 194, 165, 90, 57, 75, 72, 37, 99, 84, 79, 97, 124, 132, 112, 87, 128, 88, 84, 143, 202, 215, 201, 193, 67, 50, 51, 97, 167, 215}, {53, 53, 53, 53, 53, 53, 53, 53, 44, 46, 49, 53, 57, 61, 64, 66, 74, 93, 87, 54, 35, 41, 36, 17, 40, 34, 35, 49, 71, 84, 82, 75, 54, 92, 90, 63, 100, 176, 178, 120, 62, 60, 57, 54, 53, 54}, {53, 53, 53, 53, 53, 53, 53, 53, 61, 60, 57, 53, 48, 44, 41, 40, 63, 48, 53, 73, 72, 55, 64, 92, 76, 78, 75, 63, 51, 53, 70, 87, 71, 125, 117, 41, 10, 50, 67, 38, 38, 120, 193, 179, 97, 32}, {203, 203, 203, 203, 203, 203, 203, 203, 199, 199, 199, 199, 199, 199, 199, 199, 191, 141, 120, 133, 117, 79, 93, 144, 149, 151, 138, 101, 60, 46, 66, 92, 181, 178, 176, 154, 98, 57, 82, 137, 223, 239, 247, 222, 169, 112}, {203, 203, 203, 203, 203, 203, 203, 203, 184, 187, 192, 198, 205, 212, 217, 220, 228, 206, 197, 206, 204, 197, 218, 253, 227, 228, 216, 186, 154, 143, 158, 178, 233, 209, 215, 238, 214, 170, 186, 244, 203, 167, 141, 160, 208, 240}, {202, 202, 202, 202, 202, 202, 202, 202, 209, 208, 208, 206, 205, 204, 203, 203, 184, 203, 212, 205, 202, 209, 210, 202, 219, 220, 218, 212, 208, 212, 225, 237, 192, 198, 200, 200, 207, 215, 209, 196, 180, 208, 233, 225, 197, 182}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 206, 206, 206, 206, 206, 206, 206, 206, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 205, 205, 205, 205, 205, 205, 205, 205, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 204, 204, 204, 204, 204, 204, 204, 204, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 203, 203, 203, 203, 203, 203, 203, 203, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 202, 202, 202, 202, 202, 202, 202, 202, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}, {199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199}}; static uint8 jpeg_8bit_j75[JPEGY][JPEGX] = { {200, 200, 200, 200, 200, 200, 200, 200, 198, 198, 198, 199, 199, 200, 200, 200, 202, 202, 200, 199, 199, 199, 199, 200, 199, 199, 200, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 200, 200, 200, 200, 200, 200, 202, 202, 201, 201, 200, 200, 200, 200, 201, 201, 202, 202, 201, 201, 200, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 200, 200, 200, 200, 200, 200, 201, 202, 202, 202, 202, 201, 200, 200, 203, 203, 202, 202, 201, 200, 200, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 199, 199, 200, 201, 202, 202, 201, 200, 199, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 198, 198, 198, 198, 198, 198, 199, 199, 200, 200, 200, 199, 199, 199, 199, 198, 198, 199, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 198, 198, 198, 199, 199, 200, 200, 200, 200, 200, 199, 199, 199, 200, 201, 202, 201, 200, 199, 198, 198, 200, 201, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 199, 201, 202, 203, 204, 204, 204, 202, 200, 199, 200, 202, 204, 206, 207, 205, 203, 200, 199, 200, 201, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 199, 200, 201, 202, 204, 206, 207, 207, 207, 205, 202, 200, 200, 203, 207, 210, 213, 210, 207, 203, 201, 200, 200, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {202, 201, 200, 199, 200, 201, 203, 204, 202, 199, 196, 196, 200, 203, 203, 202, 205, 222, 189, 234, 214, 209, 216, 203, 204, 212, 224, 210, 226, 204, 214, 215, 219, 218, 214, 203, 200, 207, 189, 209, 194, 211, 188, 199, 211, 185}, {202, 201, 200, 200, 200, 202, 203, 204, 212, 208, 204, 201, 199, 195, 190, 186, 186, 215, 205, 196, 218, 218, 206, 197, 223, 224, 188, 217, 204, 225, 195, 205, 211, 118, 158, 234, 196, 204, 194, 209, 208, 210, 216, 224, 211, 194}, {198, 198, 198, 197, 198, 199, 200, 200, 199, 199, 200, 202, 204, 203, 200, 197, 176, 184, 165, 126, 21, 66, 63, 65, 66, 68, 78, 78, 89, 200, 87, 66, 117, 120, 65, 94, 212, 196, 206, 197, 80, 49, 56, 45, 206, 205}, {54, 54, 54, 54, 55, 55, 56, 56, 49, 50, 53, 57, 60, 62, 62, 62, 63, 91, 80, 31, 78, 53, 41, 53, 63, 64, 48, 65, 75, 79, 80, 89, 83, 90, 90, 109, 76, 202, 178, 94, 41, 52, 47, 58, 50, 65}, {54, 54, 55, 55, 56, 56, 56, 56, 59, 57, 55, 51, 48, 46, 46, 46, 62, 67, 49, 72, 82, 42, 55, 61, 42, 30, 65, 48, 66, 64, 53, 82, 53, 115, 63, 58, 46, 52, 86, 43, 34, 200, 200, 149, 103, 61}, {197, 197, 198, 199, 200, 199, 199, 199, 197, 197, 196, 194, 192, 193, 196, 199, 187, 139, 105, 206, 44, 86, 158, 165, 167, 210, 135, 91, 55, 64, 104, 85, 172, 219, 206, 182, 36, 55, 59, 163, 211, 188, 208, 207, 212, 63}, {199, 200, 201, 203, 203, 203, 202, 201, 192, 196, 200, 203, 205, 209, 214, 218, 237, 203, 178, 202, 187, 178, 206, 212, 202, 216, 224, 204, 133, 129, 121, 199, 221, 204, 209, 216, 207, 206, 228, 202, 183, 218, 188, 176, 208, 219}, {198, 199, 201, 202, 203, 202, 201, 200, 202, 205, 209, 208, 204, 201, 201, 202, 198, 195, 207, 203, 219, 218, 210, 215, 226, 210, 214, 214, 211, 226, 201, 238, 208, 188, 212, 192, 209, 217, 199, 201, 209, 192, 207, 206, 207, 195}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 206, 211, 215, 215, 211, 206, 202, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 199, 201, 203, 203, 201, 199, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 200, 199, 198, 198, 199, 200, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 203, 202, 201, 199, 199, 201, 202, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 198, 198, 198, 199, 199, 198, 198, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 197, 198, 199, 200, 200, 199, 198, 197, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 202, 202, 202, 202, 201, 201, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}}; static uint8 jpeg_24bit_orig[JPEGY * JPEGX * 3] = { 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 99, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 95, 0, 255, 87, 0, 255, 79, 0, 255, 71, 0, 255, 71, 0, 255, 79, 0, 255, 95, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 87, 0, 255, 63, 0, 255, 55, 0, 255, 47, 0, 255, 55, 0, 255, 79, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 95, 0, 255, 87, 0, 255, 91, 0, 255, 99, 0, 255, 95, 0, 255, 103, 0, 255, 107, 0, 255, 103, 0, 255, 95, 0, 255, 95, 0, 255, 91, 0, 255, 87, 0, 255, 75, 0, 255, 63, 0, 255, 51, 0, 255, 31, 0, 255, 15, 0, 255, 67, 0, 255, 83, 0, 255, 75, 0, 255, 67, 0, 255, 55, 0, 255, 43, 0, 255, 23, 0, 255, 3, 0, 255, 91, 0, 255, 55, 0, 255, 39, 0, 255, 31, 0, 255, 19, 0, 255, 11, 0, 255, 99, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 107, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 91, 0, 255, 79, 0, 255, 75, 0, 255, 79, 0, 255, 95, 0, 255, 115, 0, 255, 131, 0, 255, 131, 0, 255, 131, 0, 255, 135, 0, 255, 131, 0, 255, 107, 0, 255, 87, 0, 255, 83, 0, 255, 63, 0, 255, 27, 0, 255, 47, 0, 255, 131, 0, 255, 51, 0, 255, 3, 0, 255, 67, 0, 255, 119, 0, 255, 79, 0, 255, 15, 0, 255, 87, 0, 255, 71, 0, 255, 59, 0, 91, 255, 163, 115, 255, 139, 241, 0, 0, 255, 79, 0, 255, 119, 0, 255, 111, 0, 255, 75, 0, 255, 59, 0, 255, 55, 0, 255, 47, 0, 255, 43, 0, 255, 59, 0, 255, 119, 0, 255, 103, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 107, 0, 255, 103, 0, 255, 103, 0, 255, 111, 0, 255, 111, 0, 255, 107, 0, 255, 95, 0, 255, 75, 0, 255, 67, 0, 255, 59, 0, 255, 123, 0, 255, 183, 0, 255, 175, 0, 255, 175, 0, 255, 223, 0, 51, 255, 203, 0, 23, 255, 0, 151, 255, 0, 99, 255, 0, 123, 255, 0, 143, 255, 0, 159, 255, 0, 155, 255, 0, 195, 255, 0, 235, 255, 255, 51, 0, 0, 199, 255, 0, 159, 255, 111, 255, 143, 51, 255, 203, 0, 223, 255, 0, 235, 255, 255, 67, 0, 255, 115, 0, 255, 111, 0, 255, 99, 0, 0, 191, 255, 0, 71, 255, 0, 91, 255, 0, 87, 255, 255, 63, 0, 255, 71, 0, 0, 83, 255, 0, 79, 255, 0, 83, 255, 0, 87, 255, 0, 79, 255, 0, 71, 255, 0, 91, 255, 0, 87, 255, 0, 67, 255, 0, 83, 255, 0, 79, 255, 0, 63, 255, 0, 83, 255, 0, 87, 255, 0, 123, 255, 0, 131, 255, 0, 119, 255, 27, 255, 227, 0, 179, 255, 0, 71, 255, 0, 103, 255, 0, 23, 255, 0, 63, 255, 0, 47, 255, 0, 67, 255, 0, 131, 255, 0, 99, 255, 0, 135, 255, 0, 135, 255, 0, 151, 255, 0, 159, 255, 0, 215, 255, 0, 139, 255, 0, 187, 255, 0, 243, 255, 59, 255, 195, 0, 135, 255, 255, 95, 0, 255, 127, 0, 0, 227, 255, 0, 35, 255, 0, 23, 255, 0, 103, 255, 0, 39, 255, 0, 43, 255, 0, 99, 255, 0, 83, 255, 0, 75, 255, 0, 71, 255, 0, 79, 255, 0, 87, 255, 0, 91, 255, 0, 79, 255, 0, 95, 255, 0, 87, 255, 0, 95, 255, 0, 71, 255, 0, 71, 255, 0, 79, 255, 0, 67, 255, 0, 51, 255, 0, 67, 255, 0, 87, 255, 0, 71, 255, 0, 47, 255, 0, 139, 255, 0, 131, 255, 0, 119, 255, 0, 135, 255, 0, 67, 255, 0, 95, 255, 0, 19, 255, 0, 55, 255, 0, 91, 255, 0, 115, 255, 0, 127, 255, 0, 127, 255, 0, 215, 255, 0, 163, 255, 47, 255, 207, 0, 103, 255, 0, 119, 255, 0, 47, 255, 0, 55, 255, 0, 255, 255, 0, 27, 255, 0, 31, 255, 255, 107, 0, 255, 107, 0, 255, 223, 0, 43, 255, 211, 0, 39, 255, 255, 111, 0, 255, 111, 0, 255, 103, 0, 255, 99, 0, 255, 107, 0, 255, 91, 0, 255, 95, 0, 255, 99, 0, 255, 107, 0, 255, 115, 0, 255, 115, 0, 255, 135, 0, 255, 143, 0, 255, 143, 0, 255, 139, 0, 255, 123, 0, 255, 95, 0, 219, 255, 35, 11, 255, 243, 255, 115, 0, 0, 111, 255, 0, 143, 255, 159, 255, 95, 255, 175, 0, 223, 255, 31, 255, 95, 0, 223, 255, 31, 0, 159, 255, 0, 171, 255, 0, 151, 255, 0, 199, 255, 0, 199, 255, 207, 255, 47, 233, 0, 0, 255, 91, 0, 255, 187, 0, 0, 63, 255, 0, 79, 255, 0, 55, 255, 255, 255, 0, 255, 71, 0, 255, 91, 0, 255, 163, 0, 255, 107, 0, 255, 91, 0, 0, 199, 255, 255, 107, 0, 255, 103, 0, 255, 87, 0, 255, 95, 0, 255, 95, 0, 255, 103, 0, 255, 107, 0, 255, 115, 0, 255, 123, 0, 255, 111, 0, 255, 103, 0, 255, 95, 0, 255, 75, 0, 255, 59, 0, 255, 39, 0, 255, 27, 0, 255, 47, 0, 255, 107, 0, 255, 131, 0, 255, 135, 0, 255, 123, 0, 255, 123, 0, 255, 107, 0, 255, 83, 0, 255, 75, 0, 255, 31, 0, 241, 0, 0, 255, 119, 0, 159, 255, 95, 91, 255, 163, 71, 255, 183, 255, 51, 0, 224, 0, 0, 255, 115, 0, 255, 75, 0, 255, 59, 0, 255, 55, 0, 255, 43, 0, 255, 39, 0, 255, 39, 0, 255, 107, 0, 255, 115, 0, 255, 107, 0, 255, 99, 0, 255, 67, 0, 255, 59, 0, 255, 103, 0, 255, 99, 0, 255, 99, 0, 255, 95, 0, 255, 99, 0, 255, 99, 0, 255, 99, 0, 255, 99, 0, 255, 91, 0, 255, 79, 0, 255, 79, 0, 255, 75, 0, 255, 79, 0, 255, 99, 0, 255, 95, 0, 255, 95, 0, 255, 91, 0, 255, 95, 0, 255, 91, 0, 255, 83, 0, 255, 71, 0, 255, 59, 0, 255, 47, 0, 255, 19, 0, 255, 3, 0, 255, 67, 0, 255, 59, 0, 255, 51, 0, 255, 35, 0, 255, 23, 0, 255, 7, 0, 255, 3, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 75, 0, 255, 67, 0, 255, 95, 0, 255, 103, 0, 255, 99, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 99, 0, 255, 95, 0, 255, 91, 0, 255, 99, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 91, 0, 255, 67, 0, 255, 55, 0, 255, 47, 0, 255, 47, 0, 255, 59, 0, 255, 91, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 95, 0, 255, 87, 0, 255, 95, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0, 255, 103, 0}; void test_GRgetcomptype(void); /* in "tdfr8.c" */ static void check_im_pal(int32 oldx, int32 oldy, int32 newx, int32 newy, uint8 *oldim, uint8 *newim, uint8 *oldpal, uint8 *newpal); /* These two functions are in tusejpegfuncs.c. They use JPEG functions directly to compress and decompress the same data as in test_r24_jpeg, to verify that the DFR24 API work correctly regardless which JPEG library is used */ int comp_using_jpeglib(const char *filename, long *file_offset, int im_height, int im_width, int im_ncomps, int quality, uint8 *written_buffer); int decomp_using_jpeglib(const char *filename, long file_offset, int im_height, int im_width, int im_ncomps, uint8 *read_buffer); void test_r24_jpeg(void); /* ------------------------------- test_r24 ------------------------------- */ void test_r24(void) { int32 xd, yd; intn il; int Error; char buf[YSIZE][XSIZE][3]; char buf1[YSIZE][3][XSIZE]; char buf2[3][YSIZE][XSIZE]; char in[YSIZE][XSIZE][3]; char in1[YSIZE][3][XSIZE]; char in2[3][YSIZE][XSIZE]; int i, j, ret; uint16 ref0, ref1, ref2; uint8 *jpeg_24bit_temp; jpeg_24bit_temp = (uint8 *)malloc(JPEGX * JPEGY * 3); if (!jpeg_24bit_temp) { fprintf(stderr, "Out of memory!\n"); exit(1); } for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) { buf[i][j][0] = buf[i][j][1] = buf[i][j][2] = (char)(i + j); buf1[i][0][j] = buf1[i][1][j] = buf1[i][2][j] = (char)(i | j); buf2[0][i][j] = buf2[1][i][j] = buf2[2][i][j] = (char)(i ^ j); } MESSAGE(5, printf("Writing 24bit images with differing interlacing\n");); ret = DF24setil(DFIL_PIXEL); RESULT("DF24setil"); ret = DF24putimage(TESTFILE, &(buf[0][0][0]), XSIZE, YSIZE); RESULT("DF24putimage"); ref0 = DF24lastref(); ret = DF24setil(DFIL_LINE); RESULT("DF24setil"); ret = DF24addimage(TESTFILE, &(buf1[0][0][0]), XSIZE, YSIZE); RESULT("DF24addimage"); ref1 = DF24lastref(); ret = DF24setil(DFIL_PLANE); RESULT("DF24setil"); ret = DF24addimage(TESTFILE, &(buf2[0][0][0]), XSIZE, YSIZE); RESULT("DF24addimage"); ref2 = DF24lastref(); if ((ret = DF24nimages(TESTFILE)) != 3) { fprintf(stderr, " >>> DF24nimages() gives wrong number: %d <<<\n", ret); num_errs++; } /* read image 0 */ MESSAGE(5, printf("Reading and verifying 24bit images\n");); ret = DF24restart(); RESULT("DF24restart"); ret = DF24reqil(DFIL_PIXEL); RESULT("DF24reqil"); ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if (ret == FAIL) HEprint(stderr, 0); if ((xd != XSIZE) || (yd != YSIZE) || il != 0) { fprintf(stderr, "Returned meta-data is wrong for image 0\n"); num_errs++; } ret = DF24getimage(TESTFILE, in, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in[i][j][0] != buf[i][j][0] || in[i][j][1] != buf[i][j][1] || in[i][j][2] != buf[i][j][2]) { Error = TRUE; } if (Error) { printf("in:\n"); for (i = 0; i < YSIZE; i++) { for (j = 0; j < XSIZE; j++) printf("(%d,%d,%d)", (int)in[i][j][0], (int)in[i][j][1], (int)in[i][j][2]); printf("\n"); } printf("buf:\n"); for (i = 0; i < YSIZE; i++) { for (j = 0; j < XSIZE; j++) printf("(%d,%d,%d)", (int)buf[i][j][0], (int)buf[i][j][1], (int)buf[i][j][2]); printf("\n"); } fprintf(stderr, "Image 0 was incorrect\n"); num_errs++; } if (ref0 != DF24lastref()) { fprintf(stderr, "Bogus lastref for image 0\n"); num_errs++; } /* read image 1 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 1) { fprintf(stderr, "Returned meta-data is wrong for image 1\n"); num_errs++; } ret = DF24getimage(TESTFILE, in, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in[i][j][0] != buf1[i][0][j] || in[i][j][1] != buf1[i][1][j] || in[i][j][2] != buf1[i][2][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 1 was incorrect\n"); num_errs++; } if (ref1 != DF24lastref()) { fprintf(stderr, "Bogus lastref for image 1\n"); num_errs++; } /* read image 2 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 2) { fprintf(stderr, "Returned meta-data is wrong for image 2\n"); num_errs++; } ret = DF24getimage(TESTFILE, in, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in[i][j][0] != buf2[0][i][j] || in[i][j][1] != buf2[1][i][j] || in[i][j][2] != buf2[2][i][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 2 was incorrect\n"); num_errs++; } if (ref2 != DF24lastref()) { fprintf(stderr, "Bogus lastref for image 2\n"); num_errs++; } ret = DF24restart(); RESULT("DF24restart"); /* read image 3 */ ret = DF24reqil(DFIL_LINE); RESULT("DF24reqil"); ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 0) { fprintf(stderr, "Returned meta-data is wrong for image 3\n"); num_errs++; } ret = DF24getimage(TESTFILE, in1, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in1[i][0][j] != buf[i][j][0] || in1[i][1][j] != buf[i][j][1] || in1[i][2][j] != buf[i][j][2]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 3 was incorrect\n"); num_errs++; } /* read image 4 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 1) { fprintf(stderr, "Returned meta-data is wrong for image 4\n"); num_errs++; } ret = DF24getimage(TESTFILE, in1, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in1[i][0][j] != buf1[i][0][j] || in1[i][1][j] != buf1[i][1][j] || in1[i][2][j] != buf1[i][2][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 4 was incorrect\n"); num_errs++; } /* read image 5 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 2) { fprintf(stderr, "Returned meta-data is wrong for image 5\n"); num_errs++; } ret = DF24getimage(TESTFILE, in1, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in1[i][0][j] != buf2[0][i][j] || in1[i][1][j] != buf2[1][i][j] || in1[i][2][j] != buf2[2][i][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 5 was incorrect\n"); num_errs++; } /* read image 6 */ ret = DF24restart(); RESULT("DF24restart"); ret = DF24reqil(DFIL_PLANE); RESULT("DF24reqil"); ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 0) { fprintf(stderr, "Returned meta-data is wrong for image 6\n"); num_errs++; } ret = DF24getimage(TESTFILE, in2, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in2[0][i][j] != buf[i][j][0] || in2[1][i][j] != buf[i][j][1] || in2[2][i][j] != buf[i][j][2]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 6 was incorrect\n"); num_errs++; } /* read image 7 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 1) { fprintf(stderr, "Returned meta-data is wrong for image 7\n"); num_errs++; } ret = DF24getimage(TESTFILE, in2, XSIZE, YSIZE); RESULT("DF24getimage"); for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in2[0][i][j] != buf1[i][0][j] || in2[1][i][j] != buf1[i][1][j] || in2[2][i][j] != buf1[i][2][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 7 was incorrect\n"); num_errs++; } /* read image 8 */ ret = DF24getdims(TESTFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != XSIZE) || (yd != YSIZE) || il != 2) { fprintf(stderr, "Returned meta-data is wrong for image 8\n"); num_errs++; } ret = DF24getimage(TESTFILE, in2, XSIZE, YSIZE); RESULT("DF24getimage"); Error = FALSE; for (i = 0; i < YSIZE; i++) for (j = 0; j < XSIZE; j++) if (in2[0][i][j] != buf2[0][i][j] || in2[1][i][j] != buf2[1][i][j] || in2[2][i][j] != buf2[2][i][j]) { Error = TRUE; } if (Error) { fprintf(stderr, "Image 8 was incorrect\n"); num_errs++; } free(jpeg_24bit_temp); /* Test 24-bit images with JPEG compression */ test_r24_jpeg(); } /********************************************************************** Utility function: read_binary_block Description: read_binary_block opens the given file in binary mode, seeks to the specified offset, then reads into the provided buffer nitems of values. ***********************************************************************/ size_t read_binary_block(const char *filename, /* file to be read */ int32 offset, /* position to start reading from */ size_t nitems, /* number of bytes to read */ uint8 *buffer) /* buffer to store the binary data in */ { FILE *fd; size_t readlen = 0; /* number of bytes actually read */ /* Open the file to read binary data */ if ((fd = fopen(filename, "rb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); exit(1); } /* Forward to the specified offset to start reading */ if (fseek(fd, (off_t)offset, SEEK_SET) == -1) { fprintf(stderr, "can't seek offset %d\n", (int)offset); exit(1); } /* Read in the specified block of data */ readlen = fread((void *)buffer, 1, nitems, fd); fclose(fd); return readlen; } /* ------------------------------- test_r24_jpeg ------------------------------- */ #define N_IMAGES 3 void test_r24_jpeg(void) { int32 fid, grid, /* file ID and GR interface ID */ riid; /* raster image ID */ comp_info cinfo; /* compression information for the JPEG */ int32 xd, yd; /* image's dimensions */ intn il; /* image's interlace */ long begin_offset = 0, /* offset at the beginning of image's data */ end_offset = 0; /* offset at the end of image's data */ uint8 *jpeg_24bit_temp; /* buffer for 24-bit image data */ uint8 jpeglib_readbuf[JPEGY * JPEGX * NCOMPS]; /* buffer for data read by JPEG function */ int32 offset, length; /* offset/length in the HDF file */ int32 nonhdf_offset; /* offset in the nonHDF file */ intn status; /* status returned from GR routines */ intn ii; /* indices */ int32 n_images, n_fattrs; /* number of images and number of file attrs */ uint8 *hdf_buffer, /* buffer of data read from HDF file */ *nonhdf_buffer; /* buffer of data read from non-HDF file */ int ret; /* Allocate buffer for DF24getimage to store read data */ jpeg_24bit_temp = (uint8 *)malloc(JPEGX * JPEGY * 3); if (!jpeg_24bit_temp) { fprintf(stderr, "Out of memory!\n"); exit(1); } MESSAGE(5, printf("\nStoring 24-bit images with JPEG compression\n");); ret = DF24setil(DFIL_PIXEL); RESULT("DF24setil"); MESSAGE(6, printf("Storing first image with JPEG quality 80\n");); cinfo.jpeg.quality = 80; cinfo.jpeg.force_baseline = TRUE; DF24setcompress(COMP_JPEG, &cinfo); ret = DF24putimage((const char *)JPEGFILE, jpeg_24bit_orig, JPEGX, JPEGY); RESULT("DF24putimage"); MESSAGE(6, printf("Storing second image with JPEG quality 30\n");); cinfo.jpeg.quality = 30; cinfo.jpeg.force_baseline = TRUE; DF24setcompress(COMP_JPEG, &cinfo); ret = DF24addimage((const char *)JPEGFILE, jpeg_24bit_orig, JPEGX, JPEGY); RESULT("DF24addimage"); MESSAGE(6, printf("Storing third image with JPEG default quality of 75\n");); cinfo.jpeg.quality = 75; cinfo.jpeg.force_baseline = TRUE; DF24setcompress(COMP_JPEG, &cinfo); ret = DF24addimage((const char *)JPEGFILE, jpeg_24bit_orig, JPEGX, JPEGY); RESULT("DF24addimage"); if (DF24nimages(JPEGFILE) != 3) { fprintf(stderr, " >>> DF24nimages() gives wrong number for JPEG images<<<\n"); num_errs++; } MESSAGE(5, printf("\nReading and verifying 24bit JPEG'ed images\n\n");); ret = DF24restart(); RESULT("DF24restart"); ret = DF24reqil(DFIL_PIXEL); RESULT("DF24reqil"); /* Get dimensions of first image */ ret = DF24getdims(JPEGFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 80 image\n"); fprintf(stderr, "xd=%d, yd=%d\n", (int)xd, (int)yd); num_errs++; } ret = DF24getimage(JPEGFILE, jpeg_24bit_temp, JPEGX, JPEGY); RESULT("DF24getimage"); /* Compress the same data using the JPEG library directly, with quality 80 */ comp_using_jpeglib(NONHDF_JPEGFILE, &end_offset, JPEGY, JPEGX, NCOMPS, 80, jpeg_24bit_orig); /* Read back the data using JPEG library directly */ decomp_using_jpeglib(NONHDF_JPEGFILE, begin_offset, JPEGY, JPEGX, NCOMPS, jpeglib_readbuf); /* Compare data decompressed by HDF against that by JPEG lib, the buffers should be identical */ if (memcmp(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS)) { fprintf(stderr, "24-bit JPEG quality 80 image was incorrect\n"); print_mismatched(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS); num_errs++; } /* Get dimensions of second image */ ret = DF24getdims(JPEGFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 30 image\n"); fprintf(stderr, "xd=%d, yd=%d\n", (int)xd, (int)yd); num_errs++; } ret = DF24getimage(JPEGFILE, jpeg_24bit_temp, JPEGX, JPEGY); RESULT("DF24getimage"); begin_offset = end_offset; /* Compress the same data using the JPEG library directly, with quality 30 */ comp_using_jpeglib(NONHDF_JPEGFILE, &end_offset, JPEGY, JPEGX, NCOMPS, 30, jpeg_24bit_orig); /* Read back the data using JPEG library directly */ decomp_using_jpeglib(NONHDF_JPEGFILE, begin_offset, JPEGY, JPEGX, NCOMPS, jpeglib_readbuf); /* Compare data decompressed by HDF against that by JPEG lib, the buffers should be identical */ if (memcmp(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS)) { fprintf(stderr, "24-bit JPEG quality 30 image was incorrect\n"); print_mismatched(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS); num_errs++; } /* Get dimensions of third image */ ret = DF24getdims(JPEGFILE, &xd, &yd, &il); RESULT("DF24getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 75 image\n"); fprintf(stderr, "xd=%d, yd=%d\n", (int)xd, (int)yd); num_errs++; } ret = DF24getimage(JPEGFILE, jpeg_24bit_temp, JPEGX, JPEGY); RESULT("DF24getimage"); begin_offset = end_offset; /* Compress the same data using the JPEG library directly, with quality 75 */ comp_using_jpeglib(NONHDF_JPEGFILE, &end_offset, JPEGY, JPEGX, NCOMPS, 75, jpeg_24bit_orig); /* Read back the data using JPEG library directly */ decomp_using_jpeglib(NONHDF_JPEGFILE, begin_offset, JPEGY, JPEGX, NCOMPS, jpeglib_readbuf); /* Compare data decompressed by HDF against that by JPEG lib, the buffers should be identical */ if (memcmp(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS)) { fprintf(stderr, "24-bit JPEG quality 75 image was incorrect\n"); print_mismatched(jpeg_24bit_temp, jpeglib_readbuf, JPEGY * JPEGX * NCOMPS); num_errs++; } free(jpeg_24bit_temp); /******************************************************************** Verify raw data in HDF and NON-HDF files using offsets and lengths. ********************************************************************/ /* Re-open the file with GR interface */ fid = Hopen(JPEGFILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Get the number of images in the file */ status = GRfileinfo(grid, &n_images, &n_fattrs); CHECK_VOID(status, FAIL, "GRfileinfo"); VERIFY_VOID(n_images, N_IMAGES, "GRfileinfo"); /* Open each image and get its data information. Read the block of binary data from the HDF file and the non-HDF file. Then, verify that the two buffers are identical. Note that the non-HDF file only contains the image data, thus the offset will start at 0. */ nonhdf_offset = 0; for (ii = 0; ii < n_images; ii++) { size_t read_len = 0; /* Get access to each image */ riid = GRselect(grid, ii); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the image's data information */ status = GRgetdatainfo(riid, 0, 1, &offset, &length); CHECK_VOID(status, FAIL, "GRgetdatainfo"); /* Allocate buffers for the data from the HDF file and non-HDF file */ hdf_buffer = (uint8 *)malloc(length * sizeof(uint8)); CHECK_ALLOC(hdf_buffer, "hdf_buffer", "test_r24_jpeg"); nonhdf_buffer = (uint8 *)malloc(length * sizeof(uint8)); CHECK_ALLOC(nonhdf_buffer, "nonhdf_buffer", "test_r24_jpeg"); /* Read the block of data from the HDF file using offset/length returned by GRgetdatainfo and verify that the specified length of data was read */ read_len = read_binary_block(JPEGFILE, offset, length, hdf_buffer); VERIFY_VOID(read_len, (size_t)length, "read_binary_block"); /* Read the block of data from the non-HDF file using nonhdf_offset and the length returned by GRgetdatainfo and verify that the specified length of data was read */ read_len = read_binary_block(NONHDF_JPEGFILE, nonhdf_offset, length, nonhdf_buffer); VERIFY_VOID(read_len, (size_t)length, "read_binary_block"); /* Compare compressed data from the HDF file against that from the non-HDF file. The two buffers should be identical */ if (memcmp(hdf_buffer, nonhdf_buffer, length)) { /* Display any mismatched values for debugging */ print_mismatched(hdf_buffer, nonhdf_buffer, length); num_errs++; } free(nonhdf_buffer); free(hdf_buffer); /* Move forward to the next set of non-HDF data, equivalent to the next image in the HDF file JPEGFILE */ nonhdf_offset = nonhdf_offset + length; /* Close the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /* for n_images */ /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } static void check_im_pal(int32 oldx, int32 oldy, int32 newx, int32 newy, uint8 *oldim, uint8 *newim, uint8 *oldpal, uint8 *newpal) { int error; int x, y; uint8 *op, *np; MESSAGE(5, printf("Checking image and palette.\n");); op = (uint8 *)oldim; np = (uint8 *)newim; if (newx != oldx || newy != oldy) printf(" >>> DIMENSIONS WRONG <<<\n\n"); error = FALSE; for (x = 0; x < oldx; x++) for (y = 0; y < oldy; y++) { if (*op != *np) { printf("\t>>>Error at %d %d, orig image=%d; new image=%d<<<\n", x, y, *op, *np); error = TRUE; } op++; np++; } if (error) { printf(" >>> Image is wrong. <<<\n"); num_errs++; } error = FALSE; for (x = 0; x < 768; x++) if (oldpal[x] != newpal[x]) { printf("\t>>>Pal error at %d, orig pal %u new pal %u<<<\n", x, oldpal[x], newpal[x]); error = TRUE; } if (error) { printf(" >>> Palette is wrong. <<<\n"); num_errs++; } } /* ------------------------------- test_r8 -------------------------------- */ #define XD1 10 #define YD1 10 #define XD2 7 #define YD2 11 #define XD3 8 #define YD3 12 #define TESTFILE_R8 "tdfr8.hdf" void test_r8(void) { comp_info cinfo; /* compression information for the JPEG */ uint8 *im3, *ii3; uint8 *im2, *ii2; uint8 *im1, *ii1; uint8 *pal1, *pal2, *ipal; int x, y; int ret, num_images = 0; uint16 ref1, ref2; int32 xd, yd; int ispal; uint8 *jpeg_8bit_temp; im1 = (uint8 *)malloc(XD1 * YD1 * sizeof(uint8)); ii1 = (uint8 *)malloc(XD1 * YD1 * sizeof(uint8)); if (!im1 || !ii1) { fprintf(stderr, "Out of memory!\n"); exit(1); } im2 = (uint8 *)malloc(XD2 * YD2 * sizeof(uint8)); ii2 = (uint8 *)malloc(XD2 * YD2 * sizeof(uint8)); if (!im2 || !ii2) { fprintf(stderr, "Out of memory!\n"); exit(1); } im3 = (uint8 *)malloc(XD3 * YD3 * sizeof(uint8)); ii3 = (uint8 *)malloc(XD3 * YD3 * sizeof(uint8)); if (!im3 || !ii3) { fprintf(stderr, "Out of memory!\n"); exit(1); } pal1 = (uint8 *)malloc(768 * sizeof(char)); pal2 = (uint8 *)malloc(768 * sizeof(char)); ipal = (uint8 *)malloc(768 * sizeof(char)); if (!ipal || !pal1 || !pal2) { fprintf(stderr, "Out of memory!\n"); exit(1); } jpeg_8bit_temp = (uint8 *)malloc(JPEGX * JPEGY); if (!jpeg_8bit_temp) { fprintf(stderr, "Out of memory!\n"); exit(1); } for (y = 0; y < YD1; y++) for (x = 0; x < XD1; x++) im1[y * XD1 + x] = (uint8)(x + y); for (y = 0; y < YD2; y++) for (x = 0; x < XD2; x++) im2[y * XD2 + x] = (uint8)((2 * x + y) - 256 * ((2 * x + y) / 256)); for (y = 0; y < YD3; y++) for (x = 0; x < XD3; x++) im3[y * XD3 + x] = (uint8)((3 * x + y) - 256 * ((3 * x + y) / 256)); for (x = 0; x < 256; x++) { pal1[3 * x] = (uint8)x; pal1[3 * x + 1] = (uint8)x; pal1[3 * x + 2] = (uint8)x; pal2[x] = (uint8)x; pal2[x + 256] = (uint8)x; pal2[x + 512] = (uint8)x; } /* start here */ MESSAGE(5, printf("Storing 8bit raster images\n");); ret = DFR8setpalette(pal1); RESULT("DFR8setpalette"); MESSAGE(5, printf("Putting image with no compression\n");); ret = DFR8putimage(TESTFILE_R8, im1, XD1, YD1, 0); RESULT("DFR8putimage"); num_images++; ref1 = DFR8lastref(); MESSAGE(5, printf("Putting image RLE compression\n");); ret = DFR8addimage(TESTFILE_R8, im2, XD2, YD2, DFTAG_RLE); RESULT("DFR8addimage"); num_images++; ref2 = DFR8lastref(); ret = DFR8nimages(TESTFILE_R8); if (ret != num_images) { fprintf(stderr, " >>> WRONG NUMBER OF IMAGES <<<\n"); num_errs++; } MESSAGE(5, printf("Reading and verifying 8bit raster images\n");); ret = DFR8restart(); RESULT("DFR8restart"); MESSAGE(5, printf("Verifying uncompressed image\n");); ret = DFR8getdims(TESTFILE_R8, &xd, &yd, &ispal); RESULT("DFR8getdims"); ret = DFR8getimage(TESTFILE_R8, (uint8 *)ii1, (int32)XD1, (int32)YD1, ipal); RESULT("DFR8getimage"); check_im_pal(XD1, YD1, xd, yd, im1, ii1, pal1, ipal); MESSAGE(5, printf("Verifying RLE compressed image\n");); ret = DFR8getdims(TESTFILE_R8, &xd, &yd, &ispal); RESULT("DFR8getdims"); MESSAGE(5, printf("Rechecking RLE image\n");); ret = DFR8readref(TESTFILE_R8, ref2); RESULT("DFR8readref"); ret = DFR8getimage(TESTFILE_R8, (uint8 *)ii2, (int32)XD2, (int32)YD2, ipal); RESULT("DFR8getimage"); check_im_pal(XD2, YD2, XD2, YD2, im2, ii2, pal1, ipal); MESSAGE(5, printf("Changing palette of first image\n");); ret = DFR8writeref(TESTFILE_R8, ref1); RESULT("DFR8writeref"); ret = DFR8setpalette(pal2); RESULT("DFR8setpalette"); ret = DFR8addimage(TESTFILE_R8, im1, XD1, YD1, DFTAG_RLE); RESULT("DFR8addimage"); MESSAGE(5, printf("Verifying palette change\n");); ret = DFR8readref(TESTFILE_R8, ref1); RESULT("DFR8readref"); ret = DFR8getdims(TESTFILE_R8, &xd, &yd, &ispal); RESULT("DFR8getdims"); ret = DFR8getimage(TESTFILE_R8, (uint8 *)ii1, (int32)XD1, (int32)YD1, ipal); RESULT("DFR8getimage"); check_im_pal(XD1, YD1, xd, yd, im1, ii1, pal2, ipal); MESSAGE(5, printf("\nStoring 8-bit images with JPEG compression\n");); MESSAGE(6, printf("Storing first image with JPEG quality 80\n");); cinfo.jpeg.quality = 80; cinfo.jpeg.force_baseline = TRUE; DFR8setcompress(COMP_JPEG, &cinfo); ret = DFR8putimage(JPEGFILE, jpeg_8bit_orig, JPEGX, JPEGY, COMP_JPEG); RESULT("DFR8putimage"); MESSAGE(6, printf("Storing second image with JPEG quality 30\n");); cinfo.jpeg.quality = 30; cinfo.jpeg.force_baseline = TRUE; DFR8setcompress(COMP_JPEG, &cinfo); ret = DFR8addimage(JPEGFILE, jpeg_8bit_orig, JPEGX, JPEGY, COMP_JPEG); RESULT("DFR8addimage"); MESSAGE(6, printf("Storing third image with JPEG default quality of 75\n");); ret = DFR8addimage(JPEGFILE, jpeg_8bit_orig, JPEGX, JPEGY, COMP_JPEG); RESULT("DFR8addimage"); MESSAGE(5, printf("\nReading and verifying 8-bit JPEG'ed images\n\n");); ret = DFR8restart(); RESULT("DFR8restart"); ret = DFR8getdims(JPEGFILE, &xd, &yd, &ispal); RESULT("DFR8getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 80 image\n"); num_errs++; } ret = DFR8getimage(JPEGFILE, (uint8 *)jpeg_8bit_temp, JPEGX, JPEGY, NULL); RESULT("DFR8getimage"); if (memcmp(jpeg_8bit_temp, jpeg_8bit_j80, sizeof(jpeg_8bit_orig))) { fprintf(stderr, "8-bit JPEG quality 80 image was incorrect\n"); num_errs++; } ret = DFR8getdims(JPEGFILE, &xd, &yd, &ispal); RESULT("DFR8getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 30 image\n"); num_errs++; } ret = DFR8getimage(JPEGFILE, (uint8 *)jpeg_8bit_temp, JPEGX, JPEGY, NULL); RESULT("DFR8getimage"); if (memcmp(jpeg_8bit_temp, jpeg_8bit_j30, sizeof(jpeg_8bit_orig))) { fprintf(stderr, "8-bit JPEG quality 30 image was incorrect\n"); num_errs++; } ret = DFR8getdims(JPEGFILE, &xd, &yd, &ispal); RESULT("DFR8getdims"); if ((xd != JPEGX) || (yd != JPEGY)) { fprintf(stderr, "Returned meta-data is wrong for JPEG quality 75 image\n"); num_errs++; } ret = DFR8getimage(JPEGFILE, (uint8 *)jpeg_8bit_temp, JPEGX, JPEGY, NULL); RESULT("DFR8getimage"); if (memcmp(jpeg_8bit_temp, jpeg_8bit_j75, sizeof(jpeg_8bit_orig))) { fprintf(stderr, "8-bit JPEG quality 75 image was incorrect\n"); num_errs++; } free(im1); free(ii1); free(im2); free(ii2); free(im3); free(ii3); free(pal1); free(pal2); free(ipal); free(jpeg_8bit_temp); /* Temporarily call to test GRgetcomptype() for hmap project; these tests will need to be reformatted. Mar 13, 2011 -BMR */ test_GRgetcomptype(); } void test_pal(void) { int i; int ret; uint16 ref1, ref2; uint8 *pal1, *pal2, *ipal; pal1 = (uint8 *)malloc(768 * sizeof(uint8)); pal2 = (uint8 *)malloc(768 * sizeof(uint8)); ipal = (uint8 *)malloc(768 * sizeof(uint8)); if (!ipal || !pal1 || !pal2) { fprintf(stderr, "Out of memory!\n"); exit(1); } for (i = 0; i < 256; i++) { pal1[3 * i] = (uint8)i; pal1[3 * i + 1] = (uint8)i; pal1[3 * i + 2] = (uint8)i; pal2[i] = (uint8)i; pal2[i + 256] = (uint8)i; pal2[i + 512] = (uint8)i; } MESSAGE(5, printf("Adding palettes to a file\n");); ret = DFPputpal(TESTFILE, pal1, 0, "w"); RESULT("DFPputpal"); ref1 = DFPlastref(); ret = DFPaddpal(TESTFILE, pal2); RESULT("DFPaddpal"); ref2 = DFPlastref(); MESSAGE(5, printf("Reading and verifying palettes\n");); ret = DFPrestart(); RESULT("DFPrestart"); /* read and check palette 1 */ ret = DFPgetpal(TESTFILE, ipal); RESULT("DFPgetpal"); if (memcmp(ipal, pal1, 768) != 0) for (i = 0; i < 768; i++) if ((uint8)pal1[i] != (uint8)ipal[i]) printf("Error at %d, ipal %d pal1 %d\n", (int)i, (int)ipal[i], (int)pal1[i]); if (ref1 != DFPlastref()) { fprintf(stderr, " >>> DFPlastref() bad for palette 1 <<<\n"); num_errs++; } /* read and check palette 2 */ ret = DFPgetpal(TESTFILE, ipal); RESULT("DFPgetpal"); if (memcmp(ipal, pal2, 768) != 0) for (i = 0; i < 768; i++) if ((uint8)ipal[i] != (uint8)pal2[i]) printf("Error at %d, ipal %d pal2 %d\n", (int)i, (int)ipal[i], (int)pal2[i]); if (ref2 != DFPlastref()) { fprintf(stderr, " >>> DFPlastref() bad for palette 2 <<<\n"); num_errs++; } if (DFPnpals(TESTFILE) != 2) { fprintf(stderr, " >>> DFPnpals() gives wrong number <<<\n"); num_errs++; } /* recheck palette number 2 */ ret = DFPreadref(TESTFILE, ref2); RESULT("DFPreadref"); ret = DFPgetpal(TESTFILE, ipal); RESULT("DFPgetpal"); if (memcmp(ipal, pal2, 768) != 0) for (i = 0; i < 768; i++) if (ipal[i] != pal2[i]) printf("Error at %d, ipal %d pal2 %d\n", i, ipal[i], pal2[i]); /* recheck palette number 1 */ ret = DFPreadref(TESTFILE, ref1); RESULT("DFPreadref"); ret = DFPgetpal(TESTFILE, ipal); RESULT("DFPgetpal"); if (memcmp(ipal, pal1, 768) != 0) for (i = 0; i < 768; i++) if (ipal[i] != pal1[i]) printf("Error at %d, ipal %d pal1 %d\n", i, ipal[i], pal1[i]); MESSAGE(5, printf("Modifying first palette\n");); for (i = 0; i < 256; i++) pal1[i + 256] = (uint8)(255 - i); ret = DFPwriteref(TESTFILE, ref1); RESULT("DFPwriteref"); ret = DFPputpal(TESTFILE, pal1, 1, "a"); RESULT("DFPputpal"); ret = DFPreadref(TESTFILE, ref1); RESULT("DFPreafref"); ret = DFPgetpal(TESTFILE, ipal); RESULT("DFPgetpal"); if (memcmp(ipal, pal1, 768) != 0) for (i = 0; i < 768; i++) if (ipal[i] != pal1[i]) printf("(%d) Error at %d, ipal %d pal1 %d\n", __LINE__, i, ipal[i], pal1[i]); free(pal1); free(pal2); free(ipal); } hdf4-hdf4.3.1/hdf/test/sdmms.c000066400000000000000000000344341503061704500160460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" static float32 f32[10][10], tf32[10][10]; static float32 f32scale[10], tf32scale[10]; static float32 f32max = 40.0F, f32min = 0.0F; static float32 tf32max, tf32min; static int8 i8[10][10], ti8[10][10]; static int8 i8scale[10], ti8scale[10]; static int8 i8max = 127, i8min = -128; static int8 ti8max, ti8min; static uint8 ui8[10][10], tui8[10][10]; static uint8 ui8scale[10], tui8scale[10]; static uint8 ui8max = 255, ui8min = 0; static uint8 tui8max, tui8min; static int16 i16[10][10], ti16[10][10]; static int16 i16scale[10], ti16scale[10]; static int16 i16max = 1200, i16min = -1200; static int16 ti16max, ti16min; static uint16 ui16[10][10], tui16[10][10]; static uint16 ui16scale[10], tui16scale[10]; static uint16 ui16max = 20000, ui16min = 0; static uint16 tui16max, tui16min; static int32 i32[10][10], ti32[10][10]; static int32 i32scale[10], ti32scale[10]; static int32 i32max = 99999999, i32min = -999999999; static int32 ti32max, ti32min; static uint32 ui32[10][10], tui32[10][10]; static uint32 ui32scale[10], tui32scale[10]; static uint32 ui32max = 999999999, ui32min = 0; static uint32 tui32max, tui32min; static float64 cal1, cal2, cal3, cal4; static int32 cal5; static float64 ical1, ical2, ical3, ical4; static int32 ical5; void test_sdmms(void) { uint32 i, j; int err, err1, err2, ret; intn rank; int32 dims[2]; rank = 2; dims[0] = 10; dims[1] = 10; MESSAGE(5, printf("Creating arrays...\n");); for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { f32[i][j] = (float32)((i * 40) + j); /* range: 0 ~ 4-billion */ i8[i][j] = (int8)((i * 20) - 100 + j); /* range: 0 ~ 100 */ ui8[i][j] = (uint8)((i * 20) + j); /* range: 0 ~ 200 */ i16[i][j] = (int16)((i * 6000) - 30000 + j); /* range: 0 ~ 30000 */ ui16[i][j] = (uint16)((i * 6000) + j); /* range: 0 ~ 60000 */ i32[i][j] = (int32)((i * 60000) - 300000 + j); /* range: 0 ~ 2-billion */ ui32[i][j] = (uint32)((i * 400000000U) + j); /* range: 0 ~ 4-billion */ } f32scale[i] = (float32)((i * 40) + j); /* range: 0 ~ 4-billion */ i8scale[i] = (int8)((i * 20) - 100 + j); /* range: 0 ~ 100 */ ui8scale[i] = (uint8)((i * 20) + j); /* range: 0 ~ 200 */ i16scale[i] = (int16)((i * 6000) - 30000 + j); /* range: 0 ~ 30000 */ ui16scale[i] = (uint16)((i * 6000) + j); /* range: 0 ~ 60000 */ i32scale[i] = (int32)((i * 60000) - 300000 + j); /* range: 0 ~ 2-billion */ ui32scale[i] = (uint32)((i * 400000000U) + j); /* range: 0 ~ 4-billion */ } cal1 = (float64)10.0; cal2 = (float64)0.0; cal3 = (float64)27.0; cal4 = (float64)1.5; cal5 = (int32)DFNT_INT16; ret = DFSDsetdims(rank, dims); RESULT("DFSDsetdims"); MESSAGE(5, printf("Writing arrays to single file...\n");); ret = DFSDsetNT(DFNT_FLOAT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)f32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&f32max, (void *)&f32min); RESULT("DFSDsetrange"); ret = DFSDsetcal(cal1, cal2, cal3, cal4, cal5); RESULT("DFSDsetcal"); ret = DFSDputdata("ntcheck.hdf", rank, dims, (void *)f32); RESULT("DFSDputdata"); ret = DFSDsetNT(DFNT_INT8); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i8scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i8max, (void *)&i8min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)i8); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_UINT8); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui8scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui8max, (void *)&ui8min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)ui8); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_INT16); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i16scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i16max, (void *)&i16min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)i16); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_UINT16); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui16scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui16max, (void *)&ui16min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)ui16); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_INT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i32max, (void *)&i32min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)i32); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_UINT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui32max, (void *)&ui32min); RESULT("DFSDsetrange"); ret = DFSDadddata("ntcheck.hdf", rank, dims, (void *)ui32); RESULT("DFSDadddata"); MESSAGE(5, printf("Reading arrays from single file...\n");); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)tf32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tf32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tf32max, (void *)&tf32min); RESULT("DFSDgetrange"); ret = DFSDgetcal(&ical1, &ical2, &ical3, &ical4, &ical5); RESULT("DFSDgetcal"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)ti8); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti8scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti8max, (void *)&ti8min); RESULT("DFSDgetrange"); /* this test should return FAIL so that we can verify that when we don't store calibration info we don't get any info returned */ ret = DFSDgetcal(&ical1, &ical2, &ical3, &ical4, &ical5); CHECK_VOID(ret, SUCCEED, "DFSDgetcal"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)tui8); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui8scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui8max, (void *)&tui8min); RESULT("DFSDgetrange"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)ti16); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti16scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti16max, (void *)&ti16min); RESULT("DFSDgetrange"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)tui16); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui16scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui16max, (void *)&tui16min); RESULT("DFSDgetrange"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)ti32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti32max, (void *)&ti32min); RESULT("DFSDgetrange"); ret = DFSDgetdata("ntcheck.hdf", rank, dims, (void *)tui32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui32max, (void *)&tui32min); RESULT("DFSDgetrange"); MESSAGE(5, printf("Checking arrays from single file...\n\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (!H4_FLT_ABS_EQUAL(f32[i][j], tf32[i][j])) err = 1; if (!H4_FLT_ABS_EQUAL(f32scale[i], tf32scale[i])) err2 = 1; } if (!H4_FLT_ABS_EQUAL(f32max, tf32max) || !H4_FLT_ABS_EQUAL(f32min, tf32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, { if (err == 1) printf(">>> Test failed for float32 array.\n"); else printf("Test passed for float32 array.\n"); }); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for float32 scales.\n"); else printf("Test passed for float32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for float32 max/min.\n"); else printf("Test passed for float32 max/min.\n");); if (!H4_DBL_ABS_EQUAL(cal1, ical1) || !H4_DBL_ABS_EQUAL(cal2, ical2) || !H4_DBL_ABS_EQUAL(cal3, ical3) || !H4_DBL_ABS_EQUAL(cal4, ical4) || cal5 != ical5) { MESSAGE(5, printf(">>> Test failed for float32 calibration.\n");); MESSAGE(5, printf(" Is %f %f %f %f %d\n", ical1, ical2, ical3, ical4, (int)ical5);); MESSAGE(5, printf(" sld be %f %f %f %f %d\n", cal1, cal2, cal3, cal4, (int)cal5);); } else MESSAGE(5, printf("Test passed for float32 calibration.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i8[i][j] != ti8[i][j]) err = 1; if (i8scale[i] != ti8scale[i]) err2 = 1; } if ((i8max != ti8max) || (i8min != ti8min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int8 array.\n"); else printf("Test passed for int8 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int8 scales.\n"); else printf("Test passed for int8 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int8 max/min.\n"); else printf("Test passed for int8 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui8[i][j] != tui8[i][j]) err = 1; if (ui8scale[i] != tui8scale[i]) err2 = 1; } if ((ui8max != tui8max) || (ui8min != tui8min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint8 array.\n"); else printf("Test passed for uint8 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint8 scales.\n"); else printf("Test passed for uint8 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint8 max/min.\n"); else printf("Test passed for uint8 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i16[i][j] != ti16[i][j]) err = 1; if (i16scale[i] != ti16scale[i]) err2 = 1; } if ((i16max != ti16max) || (i16min != ti16min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int16 array.\n"); else printf("Test passed for int16 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int16 scales.\n"); else printf("Test passed for int16 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int16 max/min.\n"); else printf("Test passed for int16 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui16[i][j] != tui16[i][j]) err = 1; if (ui16scale[i] != tui16scale[i]) err2 = 1; } if ((ui16max != tui16max) || (ui16min != tui16min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint16 array.\n"); else printf("Test passed for uint16 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint16 scales.\n"); else printf("Test passed for uint16 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint16 max/min.\n"); else printf("Test passed for uint16 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i32[i][j] != ti32[i][j]) err = 1; if (i32scale[i] != ti32scale[i]) err2 = 1; } if ((i32max != ti32max) || (i32min != ti32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int32 array.\n"); else printf("Test passed for int32 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int32 scales.\n"); else printf("Test passed for int32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int32 max/min.\n"); else printf("Test passed for int32 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui32[i][j] != tui32[i][j]) err = 1; if (ui32scale[i] != tui32scale[i]) err2 = 1; } if ((ui32max != tui32max) || (ui32min != tui32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint32 array.\n"); else printf("Test passed for uint32 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint32 scales.\n"); else printf("Test passed for uint32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint32 max/min.\n"); else printf("Test passed for uint32 max/min.\n");); } hdf4-hdf4.3.1/hdf/test/sdnmms.c000066400000000000000000000353271503061704500162260ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "tproto.h" static float64 f64[10][10], tf64[10][10]; static float64 f64scale[10], tf64scale[10]; static float64 f64max = 40.0, f64min = 0.0; static float64 tf64max, tf64min; static float32 f32[10][10], tf32[10][10]; static float32 f32scale[10], tf32scale[10]; static float32 f32max = 40.0F, f32min = 0.0F; static float32 tf32max, tf32min; static int8 i8[10][10], ti8[10][10]; static int8 i8scale[10], ti8scale[10]; static int8 i8max = 127, i8min = -128; static int8 ti8max, ti8min; static uint8 ui8[10][10], tui8[10][10]; static uint8 ui8scale[10], tui8scale[10]; static uint8 ui8max = 255, ui8min = 0; static uint8 tui8max, tui8min; static int16 i16[10][10], ti16[10][10]; static int16 i16scale[10], ti16scale[10]; static int16 i16max = 1200, i16min = -1200; static int16 ti16max, ti16min; static uint16 ui16[10][10], tui16[10][10]; static uint16 ui16scale[10], tui16scale[10]; static uint16 ui16max = 20000, ui16min = 0; static uint16 tui16max, tui16min; static int32 i32[10][10], ti32[10][10]; static int32 i32scale[10], ti32scale[10]; static int32 i32max = 99999999, i32min = -999999999; static int32 ti32max, ti32min; static uint32 ui32[10][10], tui32[10][10]; static uint32 ui32scale[10], tui32scale[10]; static uint32 ui32max = 999999999, ui32min = 0; static uint32 tui32max, tui32min; void test_sdnmms(void) { int i, j, err, err1, err2, ret; intn rank; int32 dims[2]; rank = 2; dims[0] = 10; dims[1] = 10; MESSAGE(5, printf("Creating arrays...\n");); for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { f64[i][j] = (float64)((i * 40) + j); /* range: 0 ~ 4-billion */ f32[i][j] = (float32)((i * 40) + j); /* range: 0 ~ 4-billion */ i8[i][j] = (int8)((i * 10) + j); /* range: 0 ~ 100 */ ui8[i][j] = (uint8)((i * 20) + j); /* range: 0 ~ 200 */ i16[i][j] = (int16)((i * 3000) + j); /* range: 0 ~ 30000 */ ui16[i][j] = (uint16)((i * 6000) + j); /* range: 0 ~ 60000 */ i32[i][j] = (int32)((i * 20) + j); /* range: 0 ~ 2-billion */ ui32[i][j] = (uint32)((i * 40) + j); /* range: 0 ~ 4-billion */ } f64scale[i] = (float64)((i * 40) + j); /* range: 0 ~ 4-billion */ f32scale[i] = (float32)((i * 40) + j); /* range: 0 ~ 4-billion */ i8scale[i] = (int8)((i * 10) + j); /* range: 0 ~ 100 */ ui8scale[i] = (uint8)((i * 20) + j); /* range: 0 ~ 200 */ i16scale[i] = (int16)((i * 3000) + j); /* range: 0 ~ 30000 */ ui16scale[i] = (uint16)((i * 6000) + j); /* range: 0 ~ 60000 */ i32scale[i] = (int32)((i * 20) + j); /* range: 0 ~ 2-billion */ ui32scale[i] = (uint32)((i * 40) + j); /* range: 0 ~ 4-billion */ } ret = DFSDsetdims(rank, dims); RESULT("DFSDsetdims"); MESSAGE(5, printf("Writing arrays to single file...\n");); ret = DFSDsetNT(DFNT_NFLOAT64); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)f64scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&f64max, (void *)&f64min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)f64); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NFLOAT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)f32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&f32max, (void *)&f32min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)f32); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NINT8); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i8scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i8max, (void *)&i8min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)i8); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NUINT8); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui8scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui8max, (void *)&ui8min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)ui8); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NINT16); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i16scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i16max, (void *)&i16min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)i16); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NUINT16); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui16scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui16max, (void *)&ui16min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)ui16); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NINT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)i32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&i32max, (void *)&i32min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)i32); RESULT("DFSDadddata"); ret = DFSDsetNT(DFNT_NUINT32); RESULT("DFSDsetNT"); ret = DFSDsetdimscale(1, (int32)10, (void *)ui32scale); RESULT("DFSDsetdimscale"); ret = DFSDsetrange((void *)&ui32max, (void *)&ui32min); RESULT("DFSDsetrange"); ret = DFSDadddata("nntcheck.hdf", rank, dims, (void *)ui32); RESULT("DFSDadddata"); MESSAGE(5, printf("Reading arrays from single file...\n");); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)tf64); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tf64scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tf64max, (void *)&tf64min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)tf32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tf32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tf32max, (void *)&tf32min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)ti8); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti8scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti8max, (void *)&ti8min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)tui8); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui8scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui8max, (void *)&tui8min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)ti16); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti16scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti16max, (void *)&ti16min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)tui16); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui16scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui16max, (void *)&tui16min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)ti32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)ti32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&ti32max, (void *)&ti32min); RESULT("DFSDgetrange"); ret = DFSDgetdata("nntcheck.hdf", rank, dims, (void *)tui32); RESULT("DFSDgetdata"); ret = DFSDgetdimscale(1, (int32)10, (void *)tui32scale); RESULT("DFSDgetdimscale"); ret = DFSDgetrange((void *)&tui32max, (void *)&tui32min); RESULT("DFSDgetrange"); MESSAGE(5, printf("Checking arrays from single file...\n\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (!H4_DBL_ABS_EQUAL(f64[i][j], tf64[i][j])) err = 1; if (!H4_DBL_ABS_EQUAL(f64scale[i], tf64scale[i])) err2 = 1; } if (!H4_DBL_ABS_EQUAL(f64max, tf64max) || !H4_DBL_ABS_EQUAL(f64min, tf64min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for float64 array.\n"); else printf("Test passed for float64 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for float64 scales.\n"); else printf("Test passed for float64 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for float64 max/min.\n"); else printf("Test passed for float64 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (!H4_FLT_ABS_EQUAL(f32[i][j], tf32[i][j])) err = 1; if (!H4_FLT_ABS_EQUAL(f32scale[i], tf32scale[i])) err2 = 1; } if (!H4_FLT_ABS_EQUAL(f32max, tf32max) || !H4_FLT_ABS_EQUAL(f32min, tf32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for float32 array.\n"); else printf("Test passed for float32 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for float32 scales.\n"); else printf("Test passed for float32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for float32 max/min.\n"); else printf("Test passed for float32 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i8[i][j] != ti8[i][j]) err = 1; if (i8scale[i] != ti8scale[i]) err2 = 1; } if ((i8max != ti8max) || (i8min != ti8min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int8 array.\n"); else printf("Test passed for int8 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int8 scales.\n"); else printf("Test passed for int8 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int8 max/min.\n"); else printf("Test passed for int8 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui8[i][j] != tui8[i][j]) err = 1; if (ui8scale[i] != tui8scale[i]) err2 = 1; } if ((ui8max != tui8max) || (ui8min != tui8min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint8 array.\n"); else printf("Test passed for uint8 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint8 scales.\n"); else printf("Test passed for uint8 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint8 max/min.\n"); else printf("Test passed for uint8 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i16[i][j] != ti16[i][j]) err = 1; if (i16scale[i] != ti16scale[i]) err2 = 1; } if ((i16max != ti16max) || (i16min != ti16min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int16 array.\n"); else printf("Test passed for int16 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int16 scales.\n"); else printf("Test passed for int16 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int16 max/min.\n"); else printf("Test passed for int16 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui16[i][j] != tui16[i][j]) err = 1; if (ui16scale[i] != tui16scale[i]) err2 = 1; } if ((ui16max != tui16max) || (ui16min != tui16min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint16 array.\n"); else printf("Test passed for uint16 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint16 scales.\n"); else printf("Test passed for uint16 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint16 max/min.\n"); else printf("Test passed for uint16 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (i32[i][j] != ti32[i][j]) err = 1; if (i32scale[i] != ti32scale[i]) err2 = 1; } if ((i32max != ti32max) || (i32min != ti32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for int32 array.\n"); else printf("Test passed for int32 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for int32 scales.\n"); else printf("Test passed for int32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for int32 max/min.\n"); else printf("Test passed for int32 max/min.\n");); err = 0; err1 = 0; err2 = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) if (ui32[i][j] != tui32[i][j]) err = 1; if (ui32scale[i] != tui32scale[i]) err2 = 1; } if ((ui32max != tui32max) || (ui32min != tui32min)) err1 = 1; num_errs += err + err1 + err2; MESSAGE(5, if (err == 1) printf(">>> Test failed for uint32 array.\n"); else printf("Test passed for uint32 array.\n");); MESSAGE(5, if (err2 == 1) printf(">>> Test failed for uint32 scales.\n"); else printf("Test passed for uint32 scales.\n");); MESSAGE(5, if (err1 == 1) printf(">>> Test failed for uint32 max/min.\n"); else printf("Test passed for uint32 max/min.\n");); } hdf4-hdf4.3.1/hdf/test/sdstr.c000066400000000000000000000105521503061704500160550ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*************************************************************** ** ** This program tests correctness of writing and read datastrings ** and dimension strings. ** To avoid the '\0' inserted by strncpy, compare the first 14 ** characters of output and input strings in subroutine compare() ** ****************************************************************/ #include "tproto.h" static int number_failed = 0; static void compare(const char *outstring, const char *instring); void test_tsdstr(void) { int i, j, ret; intn rank; int32 dims[2]; float32 f32[10][10], tf32[10][10]; const char *datalabel = "Datalabel", *dataunit = "Dataunit", *datafmt = "Datafmt", *coordsys = "coordsys"; char in_datalabel[256], in_dataunit[256], in_datafmt[256], in_coordsys[256]; const char *dimlabels[2], *dimunits[2], *dimfmts[2]; char in_dimlabels[2][256], in_dimunits[2][256], in_dimfmts[2][256]; rank = 2; dims[0] = 10; dims[1] = 10; dimlabels[0] = "c_dim1_label_a"; dimunits[0] = "c_dim1_unit_a"; dimfmts[0] = "c_dim1_fmt_a"; dimlabels[1] = "c_dim2_label_b"; dimunits[1] = "c_dim2_unit_b"; dimfmts[1] = "c_dim2_fmt_b"; MESSAGE(5, printf("Creating arrays...\n");); for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { f32[i][j] = (float32)((i * 10) + j); /* range: 0 ~ 4-billion */ } } ret = DFSDsetdims(rank, dims); RESULT("DFSDsetdims"); /* individual files */ MESSAGE(5, printf("Testing arrays in individual files...\n");); ret = DFSDsetNT(DFNT_NFLOAT32); RESULT("DFSDsetNT"); ret = DFSDsetdims(rank, dims); RESULT("DFSDsetdims"); ret = DFSDsetdatastrs(datalabel, dataunit, datafmt, coordsys); RESULT("DFSDsetdatastrs"); ret = DFSDsetdimstrs(1, dimlabels[0], dimunits[0], dimfmts[0]); RESULT("DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, dimlabels[1], dimunits[1], dimfmts[1]); RESULT("DFSDsetdimstrs"); ret = DFSDputdata("sdstrings.hdf", rank, dims, (void *)f32); RESULT("DFSDputdata"); ret = DFSDgetdata("sdstrings.hdf", rank, dims, (void *)tf32); RESULT("DFSDgetdata"); ret = DFSDgetdatastrs(in_datalabel, in_dataunit, in_datafmt, in_coordsys); RESULT("DFSDgetdatastrs"); ret = DFSDgetdimstrs(1, in_dimlabels[0], in_dimunits[0], in_dimfmts[0]); RESULT("DFSDgetdimstrs"); ret = DFSDgetdimstrs(2, in_dimlabels[1], in_dimunits[1], in_dimfmts[1]); RESULT("DFSDgetdimstrs"); compare(datalabel, in_datalabel); compare(dataunit, in_dataunit); compare(datafmt, in_datafmt); compare(coordsys, in_coordsys); compare(dimlabels[0], in_dimlabels[0]); compare(dimunits[0], in_dimunits[0]); compare(dimfmts[0], in_dimfmts[0]); compare(dimlabels[1], in_dimlabels[1]); compare(dimunits[1], in_dimunits[1]); compare(dimfmts[1], in_dimfmts[1]); if (number_failed > 0) { MESSAGE(7, printf("\n\t>>> %d TESTS FAILED <<<\n\n", number_failed);) } else MESSAGE(7, printf("\n\t>>> ALL TESTS PASSED <<<\n\n");) num_errs = num_errs + number_failed; } static void compare(const char *outstring, const char *instring) { if (0 == strcmp(outstring, instring)) MESSAGE(5, printf("Test passed for %s\n", outstring);) else { MESSAGE(5, printf(">>> Test failed for %s\n", outstring);); MESSAGE(5, printf(" Input string = %s\n", instring);); number_failed++; } } hdf4-hdf4.3.1/hdf/test/slab.c000066400000000000000000002146031503061704500156420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*************************************************************************** * * Slab test routines slabw(), slabwf64(), slabwui16(), slabwui8(), * slab1w(), slab2w(), slab3w(), slab4w() * ***************************************************************************/ /* slabwin & slabwuin do not work for all machines */ #include "tproto.h" /* Internal variables */ static int32 rank = 3; static float64 maxf64 = 123.0; static float64 minf64 = -1.0; static float64 fillf64 = 1.0; static float32 maxf32 = 123.0F; static float32 minf32 = -1.0F; static float32 fillf32 = 1.0F; static int32 maxin = 123; static int32 minin = -1; static int32 fillin = 1; static uint32 maxuin = 123; static uint32 minuin = 2; static uint32 filluin = 1; static int32 maxi32 = 123; static int32 mini32 = -1; static int32 filli32 = 1; static uint32 maxui32 = 123; static uint32 minui32 = 2; static uint32 fillui32 = 1; static int16 maxi16 = 123; static int16 mini16 = -1; static int16 filli16 = 1; static uint16 maxui16 = 123; static uint16 minui16 = 2; static uint16 fillui16 = 1; static int8 maxi8 = 123; static int8 mini8 = -1; static int8 filli8 = 1; static uint8 maxui8 = 123; static uint8 minui8 = 2; static uint8 fillui8 = 1; /* Dimensions of slab */ static int32 size_dims[3] = {2, 3, 4}; /* size of slab dims */ static int32 start_dims[3] = {1, 1, 1}; /* starting dims */ static int32 stride[3] = {0, 0, 0}; static int32 d_dims[3] = {0, 0, 0}; /* luf for planes, rows and cols */ static const char *lpln = "Time"; static const char *upln = "Second"; static const char *fpln = "Int32"; static const char *lrow = "Line"; static const char *urow = "Inch"; static const char *frow = "Int16"; static const char *lcol = "Column"; static const char *ucol = "Cm"; static const char *fcol = "Int32"; /* scales for planes, rows, and cols */ static float64 scplnf64[2] = {0.0, 100.0}; static float64 scrowf64[3] = {0.0, 10.0, 20.0}; static float64 sccolf64[4] = {0.0, 1.0, 2.0, 3.0}; static float32 scplnf32[2] = {0.0F, 100.0F}; static float32 scrowf32[3] = {0.0F, 10.0F, 20.0F}; static float32 sccolf32[4] = {0.0F, 1.0F, 2.0F, 3.0F}; static int32 scplnin[2] = {0, 100}; static int32 scrowin[3] = {0, 10, 20}; static int32 sccolin[4] = {0, 1, 2, 3}; static uint32 scplnuin[2] = {0, 100}; static uint32 scrowuin[3] = {0, 10, 20}; static uint32 sccoluin[4] = {0, 1, 2, 3}; static int32 scplni32[2] = {0, 100}; static int32 scrowi32[3] = {0, 10, 20}; static int32 sccoli32[4] = {0, 1, 2, 3}; static uint32 scplnui32[2] = {0, 100}; static uint32 scrowui32[3] = {0, 10, 20}; static uint32 sccolui32[4] = {0, 1, 2, 3}; static int16 scplni16[2] = {0, 100}; static int16 scrowi16[3] = {0, 10, 20}; static int16 sccoli16[4] = {0, 1, 2, 3}; static uint16 scplnui16[2] = {0, 100}; static uint16 scrowui16[3] = {0, 10, 20}; static uint16 sccolui16[4] = {0, 1, 2, 3}; static int8 scplni8[2] = {0, 100}; static int8 scrowi8[3] = {0, 10, 20}; static int8 sccoli8[4] = {0, 1, 2, 3}; static uint8 scplnui8[2] = {0, 100}; static uint8 scrowui8[3] = {0, 10, 20}; static uint8 sccolui8[4] = {0, 1, 2, 3}; /* Slabs for slabw(), slab1w(), slab2w() */ static float32 slabw1[1][1][3] = {{{110.0F, 111.0F, 112.0F}}}; static float32 slabw2[2][1][3] = {{{20.0F, 21.0F, 22.0F}}, {{120.0F, 121.0F, 122.0F}}}; static float32 slabw3[1][2][3] = {{{0.0F, 1.0F, 2.0F}, {10.0F, 11.0F, 12.0F}}}; static float32 slabw4[1][1][3] = {{{100.0F, 101.0F, 102.0F}}}; static float32 slabw5[2][3][1] = {{{3.0F}, {13.0F}, {23.0F}}, {{103.0F}, {113.0F}, {123.0F}}}; static float64 slabw1f64[1][1][3] = {{{110.0, 111.0, 112.0}}}; static float64 slabw2f64[2][1][3] = {{{20.0, 21.0, 22.0}}, {{120.0, 121.0, 122.0}}}; static float64 slabw3f64[1][2][3] = {{{0.0, 1.0, 2.0}, {10.0, 11.0, 12.0}}}; static float64 slabw4f64[1][1][3] = {{{100.0, 101.0, 102.0}}}; static float64 slabw5f64[2][3][1] = {{{3.0}, {13.0}, {23.0}}, {{103.0}, {113.0}, {123.0}}}; static int32 slabw1in[1][1][3] = {{{110, 111, 112}}}; static int32 slabw2in[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static int32 slabw3in[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static int32 slabw4in[1][1][3] = {{{100, 101, 102}}}; static int32 slabw5in[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static uint32 slabw1uin[1][1][3] = {{{110, 111, 112}}}; static uint32 slabw2uin[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static uint32 slabw3uin[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static uint32 slabw4uin[1][1][3] = {{{100, 101, 102}}}; static uint32 slabw5uin[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static int32 slabw1i32[1][1][3] = {{{110, 111, 112}}}; static int32 slabw2i32[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static int32 slabw3i32[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static int32 slabw4i32[1][1][3] = {{{100, 101, 102}}}; static int32 slabw5i32[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static uint32 slabw1ui32[1][1][3] = {{{110, 111, 112}}}; static uint32 slabw2ui32[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static uint32 slabw3ui32[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static uint32 slabw4ui32[1][1][3] = {{{100, 101, 102}}}; static uint32 slabw5ui32[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static int16 slabw1i16[1][1][3] = {{{110, 111, 112}}}; static int16 slabw2i16[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static int16 slabw3i16[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static int16 slabw4i16[1][1][3] = {{{100, 101, 102}}}; static int16 slabw5i16[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static uint16 slabw1ui16[1][1][3] = {{{110, 111, 112}}}; static uint16 slabw2ui16[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static uint16 slabw3ui16[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static uint16 slabw4ui16[1][1][3] = {{{100, 101, 102}}}; static uint16 slabw5ui16[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static int8 slabw1i8[1][1][3] = {{{110, 111, 112}}}; static int8 slabw2i8[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static int8 slabw3i8[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static int8 slabw4i8[1][1][3] = {{{100, 101, 102}}}; static int8 slabw5i8[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; static uint8 slabw1ui8[1][1][3] = {{{110, 111, 112}}}; static uint8 slabw2ui8[2][1][3] = {{{20, 21, 22}}, {{120, 121, 122}}}; static uint8 slabw3ui8[1][2][3] = {{{0, 1, 2}, {10, 11, 12}}}; static uint8 slabw4ui8[1][1][3] = {{{100, 101, 102}}}; static uint8 slabw5ui8[2][3][1] = {{{3}, {13}, {23}}, {{103}, {113}, {123}}}; /* Slabs for slab3w() */ static float32 slab1[1][1][1] = {{{0.0F}}}; static float32 slab2[1][1][1] = {{{1.0F}}}; static float32 slab3[1][1][1] = {{{2.0F}}}; static float32 slab4[1][1][1] = {{{3.0F}}}; static float32 slab5[1][1][1] = {{{10.0F}}}; static float32 slab6[1][1][1] = {{{11.0F}}}; static float32 slab7[1][1][1] = {{{12.0F}}}; static float32 slab8[1][1][1] = {{{13.0F}}}; static float32 slab9[1][1][1] = {{{20.0F}}}; static float32 slab10[1][1][1] = {{{21.0F}}}; static float32 slab11[1][1][1] = {{{22.0F}}}; static float32 slab12[1][1][1] = {{{23.0F}}}; static float32 slab13[1][1][1] = {{{100.0F}}}; static float32 slab14[1][1][1] = {{{101.0F}}}; static float32 slab15[1][1][1] = {{{102.0F}}}; static float32 slab16[1][1][1] = {{{103.0F}}}; static float32 slab17[1][1][1] = {{{110.0F}}}; static float32 slab18[1][1][1] = {{{111.0F}}}; static float32 slab19[1][1][1] = {{{112.0F}}}; static float32 slab20[1][1][1] = {{{113.0F}}}; static float32 slab21[1][1][1] = {{{120.0F}}}; static float32 slab22[1][1][1] = {{{121.0F}}}; static float32 slab23[1][1][1] = {{{122.0F}}}; static float32 slab24[1][1][1] = {{{123.0F}}}; /* data array in memory */ static float32 fdata[2][3][4] = { {{0.0F, 1.0F, 2.0F, 3.0F}, {10.0F, 11.0F, 12.0F, 13.0F}, {20.0F, 21.0F, 22.0F, 23.0F}}, {{100.0F, 101.0F, 102.0F, 103.0F}, {110.0F, 111.0F, 112.0F, 113.0F}, {120.0F, 121.0F, 122.0F, 123.0F}}}; static float64 f64data[2][3][4] = { {{0.0, 1.0, 2.0, 3.0}, {10.0, 11.0, 12.0, 13.0}, {20.0, 21.0, 22.0, 23.0}}, {{100.0, 101.0, 102.0, 103.0}, {110.0, 111.0, 112.0, 113.0}, {120.0, 121.0, 122.0, 123.0}}}; static int32 indata[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static uint32 uindata[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static int32 i32data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static uint32 ui32data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static int16 i16data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static uint16 ui16data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static int8 i8data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static uint8 ui8data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; /* Output files */ static const char *swf32 = "swf32.hdf"; static const char *swf64 = "swf64.hdf"; static const char *swin = "swin.hdf"; static const char *swuin = "swuin.hdf"; static const char *swi32 = "swi32.hdf"; static const char *swui32 = "swui32.hdf"; static const char *swi16 = "swi16.hdf"; static const char *swui16 = "swui16.hdf"; static const char *swi8 = "swi8.hdf"; static const char *swui8 = "swui8.hdf"; static const char *sw1 = "s1w.hdf"; static const char *sw3 = "s3w.hdf"; static const char *sw4 = "s4w.hdf"; static int slabwf32(void); static int slabwf64(void); static int slabwin(void); static int slabwuin(void); static int slabwi32(void); static int slabwui32(void); static int slabwi16(void); static int slabwui16(void); static int slabwi8(void); static int slabwui8(void); static int slab1w(void); static int slab2w(void); static int slab3w(void); static int slab4w(void); /* ** Write data set to slabw.hdf as 5 hyperslabs. */ static int slabwf32(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; float32 sdata[2][3][4]; /* Data array read from from file */ float32 lfill = 0.0F; MESSAGE(10, printf("\n slabwf32: Writing 5 slabs to slabwf32.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolf32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxf32, (void *)&minf32); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillf32); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swf32); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swf32, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (!H4_FLT_ABS_EQUAL(lfill, fillf32)) num_err++; MESSAGE(10, printf("\n fill value =: %f \n", (double)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwf32: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (!H4_FLT_ABS_EQUAL(sdata[i][j][k], fdata[i][j][k])) num_err++; MESSAGE(10, printf("%f, ", (double)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwf32 <<< \n");) else MESSAGE(10, printf("\n slabwf32: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write float64 data set to slabw.hdf as 5 hyperslabs. */ static int slabwf64(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; float64 sdata[2][3][4]; /* Data array read from from file */ float64 lfill = (float64)0.0; MESSAGE(10, printf("\n slabwf64: Writing 5 slabs to slabwf64.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_FLOAT64); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnf64); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowf64); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolf64); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxf64, (void *)&minf64); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillf64); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swf64); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1f64); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2f64); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3f64); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4f64); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5f64); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swf64, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (!H4_DBL_ABS_EQUAL(lfill, fillf64)) num_err += 1; MESSAGE(10, printf("\n fill value =: %f \n", (double)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwf64: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (!H4_DBL_ABS_EQUAL(sdata[i][j][k], f64data[i][j][k])) num_err++; MESSAGE(10, printf("%f, ", (double)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwf64 <<< \n");) else MESSAGE(10, printf("\n slabwf64: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write int32 data set as native data type to slabwin.hdf as 5 hyperslabs. */ static int slabwin(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; int32 sdata[2][3][4]; /* Data array read from from file */ int32 lfill = 0; MESSAGE(10, printf("\n slabwin: Writing 5 slabs to slabwin.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_NINT32); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnin); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowin); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolin); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxin, (void *)&minin); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillin); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swin); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1in); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2in); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3in); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4in); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5in); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swin, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != fillin) num_err += 1; MESSAGE(10, printf("\n fill value =: %d \n", (int)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwin: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != indata[i][j][k]) num_err++; MESSAGE(10, printf("%u, ", (unsigned)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwin <<< \n");) else MESSAGE(10, printf("\n slabwin: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write uint32 data set as native data type to slabwuin.hdf as 5 hyperslabs. */ static int slabwuin(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; uint32 sdata[2][3][4]; /* Data array read from from file */ uint32 lfill = 0; MESSAGE(10, printf("\n slabwuin: Writing 5 slabs to slabwuin.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_NUINT32); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnuin); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowuin); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccoluin); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxuin, (void *)&minuin); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&filluin); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swuin); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1uin); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2uin); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3uin); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4uin); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5uin); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swuin, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != filluin) num_err += 1; MESSAGE(10, printf("\n fill value =: %u \n", (unsigned)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwin: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != uindata[i][j][k]) num_err++; MESSAGE(10, printf("%u, ", (unsigned)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwuin <<< \n");) else MESSAGE(10, printf("\n slabwuin: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write int32 data set to slabwi32.hdf as 5 hyperslabs. */ static int slabwi32(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; int32 sdata[2][3][4]; /* Data array read from from file */ int32 lfill = (int32)0; MESSAGE(10, printf("\n slabwi32: Writing 5 slabs to slabwi32.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_INT32); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplni32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowi32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccoli32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxi32, (void *)&mini32); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&filli32); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swi32); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1i32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2i32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3i32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4i32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5i32); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swi32, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != filli32) num_err += 1; MESSAGE(10, printf("\n fill value =: %d \n", (int)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwi32: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != i32data[i][j][k]) num_err++; MESSAGE(10, printf("%d, ", (int)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwi32 <<< \n");) else MESSAGE(10, printf("\n slabwi32: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write uint32 data set to slabwui32.hdf as 5 hyperslabs. */ static int slabwui32(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; uint32 sdata[2][3][4]; /* Data array read from from file */ uint32 lfill = (uint32)0; MESSAGE(10, printf("\n slabwui32: Writing 5 slabs to slabwui32.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_UINT32); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnui32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowui32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolui32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxui32, (void *)&minui32); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillui32); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swui32); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1ui32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2ui32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3ui32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4ui32); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5ui32); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swui32, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != fillui32) num_err += 1; MESSAGE(10, printf("\n fill value =: %u \n", (unsigned)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwui32: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != ui32data[i][j][k]) num_err++; MESSAGE(10, printf("%u, ", (unsigned)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwui32 <<< \n");) else MESSAGE(10, printf("\n slabwui32: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write int16 data set to slabwi16.hdf as 5 hyperslabs. */ static int slabwi16(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; int16 sdata[2][3][4]; /* Data array read from from file */ int16 lfill = (int16)0; MESSAGE(10, printf("\n slabwi16: Writing 5 slabs to slabwi16.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_INT16); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplni16); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowi16); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccoli16); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxi16, (void *)&mini16); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&filli16); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swi16); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1i16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2i16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3i16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4i16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5i16); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swi16, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != filli16) num_err += 1; MESSAGE(10, printf("\n fill value =: %d \n", lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwi16: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != i16data[i][j][k]) num_err++; MESSAGE(10, printf("%d, ", sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwi16 <<< \n");) else MESSAGE(10, printf("\n slabwi16: %d wrong values in slab. \n", (int)num_err);) return (int)num_err; } /* ** Write uint16 data set to slabwui16.hdf as 5 hyperslabs. */ static int slabwui16(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; uint16 sdata[2][3][4]; /* Data array read from from file */ uint16 lfill = (uint16)0; MESSAGE(10, printf("\n slabwui16: Writing 5 slabs to slabwui16.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_UINT16); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnui16); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowui16); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolui16); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxui16, (void *)&minui16); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillui16); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swui16); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1ui16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2ui16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3ui16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4ui16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5ui16); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swui16, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != fillui16) num_err += 1; MESSAGE(10, printf("\n fill value =: %u \n", lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwui16: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != ui16data[i][j][k]) num_err++; MESSAGE(10, printf("%u, ", sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwui16 <<< \n");) else MESSAGE(10, printf("\n slabwui16: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write int8 data set to slabwi8.hdf as 5 hyperslabs. */ static int slabwi8(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; int8 sdata[2][3][4]; /* Data array read from from file */ int8 lfill = (int8)0; MESSAGE(10, printf("\n slabwi8: Writing 5 slabs to slabwi8.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_INT8); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplni8); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowi8); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccoli8); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxi8, (void *)&mini8); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&filli8); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swi8); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1i8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2i8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3i8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4i8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5i8); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swi8, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != filli8) num_err += 1; MESSAGE(10, printf("\n fill value =: %d \n", (int)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwi8: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != i8data[i][j][k]) num_err++; MESSAGE(10, printf("%d, ", (int)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwi8 <<< \n");) else MESSAGE(10, printf("\n slabwi8: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Write uint8 data set to slabw.hdf as 5 hyperslabs. */ static int slabwui8(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; uint8 sdata[2][3][4]; /* Data array read from from file */ uint8 lfill = (uint8)0; MESSAGE(10, printf("\n slabwui8: Writing 5 slabs to slabwui8.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); ret = DFSDsetNT(DFNT_UINT8); CHECK(ret, FAIL, "DFSDsetNT"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnui8); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowui8); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolui8); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write data out using slabs with ** each slab in different order to the file "slab.hdf" */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxui8, (void *)&minui8); CHECK(ret, FAIL, "DFSDsetrange"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillui8); CHECK(ret, FAIL, "DFSDsetfillvalue"); ret = DFSDstartslab(swui8); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1ui8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2ui8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3ui8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4ui8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5ui8); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(swui8, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); if (lfill != fillui8) num_err += 1; MESSAGE(10, printf("\n fill value =: %u \n", (unsigned)lfill);); if (num_err != 0) MESSAGE(10, printf("\n slabwui8: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("sdata = ");); num_err = 0; for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (sdata[i][j][k] != ui8data[i][j][k]) num_err += 1; MESSAGE(10, printf("%u, ", (unsigned)sdata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slabwui8 <<< \n");) else MESSAGE(10, printf("\n slabwui8: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } static int slab1w(void) { int32 ret = 0; int32 num_err = 0; MESSAGE(10, printf("\n slab1w: Writing the first 3 of 5 slabs to slab1w.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolf32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* Set fill value */ ret = DFSDsetfillvalue((void *)&fillf32); CHECK(ret, FAIL, "DFSDsetfillvalue"); MESSAGE(10, printf("\n slab1w: Setting fill value =%f \n", (double)fillf32);); /* ** write each slab in different order */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxf32, (void *)&minf32); CHECK(ret, FAIL, "DFSDsetrange"); ret = DFSDstartslab(sw1); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw1); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 2; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw3); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw5); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slab1w, now run slab2w <<< \n");) else MESSAGE(10, printf("\n slab1w: %d failures. \n", (int)num_err);); return (int)num_err; } static int slab2w(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; float32 sdata[2][3][4]; /* Data array read from from file */ float32 lfill = 0.0F; intn trank; MESSAGE(10, printf("\n slab2w: Writing the last 2 of 5 slabs to slab1w.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); /* Get dimensions */ ret = DFSDgetdims(sw1, &trank, size_dims, 3); CHECK(ret, FAIL, "DFSDgetdims"); /* Get fill value */ ret = DFSDgetfillvalue((void *)&lfill); CHECK(ret, FAIL, "DFSDgetfillvalue"); MESSAGE(10, printf("\n fill value =: %f \n", (double)lfill);); /* Call Writeref() first */ ret = DFSDwriteref(sw1, 2); CHECK(ret, FAIL, "DFSDwriteref"); /* ** write each slab in different order */ ret = DFSDstartslab(sw1); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw2); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 3; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slabw4); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(sw1, start_dims, size_dims, stride, (void *)sdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); if (num_err != 0) MESSAGE(10, printf("\n slab2w: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (!H4_FLT_ABS_EQUAL(sdata[i][j][k], fdata[i][j][k])) num_err++; } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slab2w <<< \n");) else MESSAGE(10, printf("\n slab2w: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } static int slab3w(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; float32 adata[2][3][4]; /* Data array read from from file */ MESSAGE(10, printf("\n slab3w: Writing all 24 elements of data as slabs to slab3w.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolf32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* ** write each element in different order */ /* Set max, min range */ ret = DFSDsetrange((void *)&maxf32, (void *)&minf32); CHECK(ret, FAIL, "DFSDsetrange"); ret = DFSDstartslab(sw3); CHECK(ret, FAIL, "DFSDstartslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab20); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab21); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 3; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab22); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 3; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab23); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 3; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab24); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab6); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab7); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab8); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab9); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab10); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab16); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab17); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab18); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 2; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab19); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab11); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 3; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab12); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab13); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab14); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 2; start_dims[1] = 1; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab15); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab1); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 2; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab2); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 3; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab3); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 4; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab4); CHECK(ret, FAIL, "DFSDwriteslab"); start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 1; size_dims[0] = 1; size_dims[1] = 1; size_dims[2] = 1; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)slab5); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(sw3, start_dims, size_dims, stride, (void *)adata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); if (num_err != 0) MESSAGE(10, printf("\n slab3w: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); MESSAGE(10, printf("adata = ");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (!H4_FLT_ABS_EQUAL(adata[i][j][k], fdata[i][j][k])) num_err++; MESSAGE(10, printf("%f, ", (double)adata[i][j][k]);); } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slab3w <<< \n");) else MESSAGE(10, printf("\n slab3w: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } static int slab4w(void) { int32 i, j, k; int32 ret = 0; int32 num_err = 0; float32 bdata[2][3][4]; /* Data array read from from file */ MESSAGE(10, printf("\n slab4w: Writing data as 1 slab to slab4w.hdf \n");); ret = DFSDclear(); CHECK(ret, FAIL, "DFSDclear"); /* First set dimensions */ ret = DFSDsetdims((intn)rank, size_dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set dimension strings */ ret = DFSDsetdimstrs(1, lpln, upln, fpln); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, lrow, urow, frow); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(3, lcol, ucol, fcol); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Set dimension scales */ ret = DFSDsetdimscale(1, size_dims[0], (void *)scplnf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, size_dims[1], (void *)scrowf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(3, size_dims[2], (void *)sccolf32); CHECK(ret, FAIL, "DFSDsetdimscale"); /* Set max, min range */ ret = DFSDsetrange((void *)&maxf32, (void *)&minf32); CHECK(ret, FAIL, "DFSDsetrange"); ret = DFSDstartslab(sw4); CHECK(ret, FAIL, "DFSDstartslab"); /* write out all the data to hdf file */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; ret = DFSDwriteslab(start_dims, stride, size_dims, (void *)fdata); CHECK(ret, FAIL, "DFSDwriteslab"); ret = DFSDendslab(); CHECK(ret, FAIL, "DFSDendslab"); /* Verify correctness of slab written */ start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 1; size_dims[0] = 2; size_dims[1] = 3; size_dims[2] = 4; d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; ret = DFSDreadslab(sw4, start_dims, size_dims, stride, (void *)bdata, d_dims); CHECK(ret, FAIL, "DFSDreadslab"); if (num_err != 0) MESSAGE(10, printf("\n slab4w: %d failures. \n", (int)num_err);); MESSAGE(10, printf("\n Verifying data \n");); for (i = 0; i < d_dims[0]; i++) for (j = 0; j < d_dims[1]; j++) for (k = 0; k < d_dims[2]; k++) { if (!H4_FLT_ABS_EQUAL(bdata[i][j][k], fdata[i][j][k])) num_err++; } if (num_err == 0) MESSAGE(10, printf("\n >>> All tests passed for slab4w <<< \n");) else MESSAGE(10, printf("\n slab4w: %d wrong values in slab. \n", (int)num_err);); return (int)num_err; } /* ** Main slab call to all other slab functions */ void test_slab(void) { num_errs += slabwf32(); num_errs += slabwf64(); num_errs += slabwin(); num_errs += slabwuin(); num_errs += slabwi32(); num_errs += slabwui32(); num_errs += slabwi16(); num_errs += slabwui16(); num_errs += slabwi8(); num_errs += slabwui8(); num_errs += slab1w(); num_errs += slab2w(); num_errs += slab3w(); num_errs += slab4w(); } hdf4-hdf4.3.1/hdf/test/slabwf.f000066400000000000000000000322041503061704500161750ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine slabwf (num_err) C C Program to write data set using the DFSDxxx interface C C Output files: slabwf.hdf, slab1wf, slab4wf implicit none include 'fortest.inc' integer num_err character*20 myname parameter (myname = 'slab') integer ret, np, nr,nc, di(3), st(3), sz(3), sr(3) integer rank C C FLOAT32 data variables. FLOAT32 corresponds to real*4. C If the fortran compiler does not handle real*4, C change them to the right sizes if possible. real*4 scpln(2), scrow(3), sccol(4), da(4,3,2) real*4 slab1(3,1,1), slab2(3,1,2), slab3(3,2,1) real*4 slab4(3,1,1), slab5(1,3,2) real*4 sa(4,3,2) real*4 fillvalue C integer i, j, k character*10 lcol,ucol,fcol,lrow,urow,frow,lpln,upln,fpln character*30 fn, sn, sn1, sn2, sn4 integer fnlen integer nref integer number_failed call ptestban('Testing', myname) number_failed = 0 di(1) = 4 di(2) = 3 di(3) = 2 np = 2 nr = 3 nc = 4 rank = 3 scpln(1) = 0.0 scpln(2) = 100.0 scrow(1) = 0.0 scrow(2) = 10.0 scrow(3) = 20.0 sccol(1) = 0.0 sccol(2) = 1.0 sccol(3) = 2.0 sccol(4) = 3.0 lcol = 'Column' ucol = 'Cm' fcol = 'Int32' lrow = 'Line' urow = 'Inch' frow = 'Int16' lpln = 'Time' upln = 'Second' fpln = 'Int32' fn = 'slabf.hdf' sn = 'slabwf.hdf' fillvalue = 1.0 fnlen = 30 slab1(1,1,1) = 110.0 slab1(2,1,1) = 111.0 slab1(3,1,1) = 112.0 slab2(1,1,1) = 20.0 slab2(2,1,1) = 21.0 slab2(3,1,1) = 22.0 slab2(1,1,2) = 120.0 slab2(2,1,2) = 121.0 slab2(3,1,2) = 122.0 slab3(1,1,1) = 0.0 slab3(2,1,1) = 1.0 slab3(3,1,1) = 2.0 slab3(1,2,1) = 10.0 slab3(2,2,1) = 11.0 slab3(3,2,1) = 12.0 slab4(1,1,1) = 100.0 slab4(2,1,1) = 101.0 slab4(3,1,1) = 102.0 slab5(1,1,1) = 3.0 slab5(1,2,1) = 13.0 slab5(1,3,1) = 23.0 slab5(1,1,2) = 103.0 slab5(1,2,2) = 113.0 slab5(1,3,2) = 123.0 do 200 i=1, np do 180 j=1, nr do 150 k=1, nc da(k,j,i) = scpln(i) + scrow(j) + sccol(k) C print *, da(k,j,i) 150 continue 180 continue 200 continue call MESSAGE(5,'Writing data as 5 slabs to slabwf.hdf') C print *,'\n Writing data as 5 slabs to slabwf.hdf' num_err = 0 C Set number type, dimension stuff etc ret = dssnt(DFNT_FLOAT32) call VRFY(ret,'dssnt',number_failed) ret = dssdims(rank, di) call VRFY(ret,'dssdim',number_failed) ret = dssdist(1, lcol, ucol, fcol) call VRFY(ret,'dssdist',number_failed) ret = dssdist(2, lrow, urow, frow) call VRFY(ret,'dssdist',number_failed) ret = dssdist(3, lpln, upln, fpln) call VRFY(ret,'dssdist',number_failed) ret = dssdisc(1, di(1), sccol) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(2, di(2), scrow) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(3, di(3), scpln) call VRFY(ret,'dssdisc',number_failed) C C Write it slab by slab C C set the Fill value ret = dssfill(fillvalue) call VRFY(ret,'dssfile',number_failed) sr(1) = 0 sr(2) = 0 sr(3) = 0 ret = dssdims(rank, di) call VRFY(ret,'dssdim',number_failed) ret = dssslab(sn) call VRFY(ret,'dssslab',number_failed) st(1) = 1 st(2) = 2 st(3) = 2 sz(1) = 3 sz(2) = 1 sz(3) = 1 ret = dswslab(st, sr, sz,slab1) call VRFY(ret,'dswslab',number_failed) st(1) = 1 st(2) = 3 st(3) = 1 sz(1) = 3 sz(2) = 1 sz(3) = 2 ret = dswslab(st, sr, sz, slab2) call VRFY(ret,'dswslab',number_failed) st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 3 sz(2) = 2 sz(3) = 1 ret = dswslab(st, sr, sz, slab3) call VRFY(ret,'dswslab',number_failed) st(1) = 1 st(2) = 1 st(3) = 2 sz(1) = 3 sz(2) = 1 sz(3) = 1 ret = dswslab(st, sr, sz, slab4) call VRFY(ret,'dswslab',number_failed) st(1) = 4 st(2) = 1 st(3) = 1 sz(1) = 1 sz(2) = 3 sz(3) = 2 ret = dswslab(st, sr, sz, slab5) call VRFY(ret,'dswslab',number_failed) ret = dseslab() call VRFY(ret,'dseslab',number_failed) C C Retrieve slab for verification C st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 4 sz(2) = 3 sz(3) = 2 sr(1) = 4 sr(2) = 3 sr(3) = 2 ret = dsrslab(sn, st, sz, st, sa, sr) call VRFY(ret,'dsrslab',number_failed) num_err = number_failed if ( num_err .ne. 0) then print *,'number of failures =',num_err endif call MESSAGE(5,' Verifying data ') num_err = 0 do 500 i=1, np do 400 j=1, nr do 300 k=1, nc if ( da(k,j,i) .ne. sa(k,j,i)) then num_err = num_err + 1 if (Verbosity .ge. VERBO_DEF) then call MESSAGE(VERBO_DEF, ' *** data error *** ') print *, '(k,j,i) = (', k,',', j,',', i,')', + ' da=',da(k,j,i), ', sa=',sa(k,j,i) endif endif 300 continue 400 continue 500 continue if (num_err .ne. 0) then print *,'slabwf: number of wrong values in slab =',num_err else call MESSAGE(VERBO_HI, ' *** slabwf passed *** ') endif C C slab1wf test C C call MESSAGE(5,'Writing the first 3 of 5 slabs to slab1wf.hdf') C print *,'\n Writing the first 3 of 5 slabs to slab1wf.hdf' sn1 = 'slab1wf.hdf' C Clear old info fist ret = dsclear() call VRFY(ret,'dsclear',number_failed) C Set dimension stuff etc call MESSAGE(5,'Calling dssdim to set info on SDS') ret = dssdims(rank, di) call VRFY(ret,'dssgdim',number_failed) ret = dssdist(1, lcol, ucol, fcol) call VRFY(ret,'dssdist',number_failed) ret = dssdist(2, lrow, urow, frow) call VRFY(ret,'dssdist',number_failed) ret = dssdist(3, lpln, upln, fpln) call VRFY(ret,'dssdist',number_failed) ret = dssdisc(1, di(1), sccol) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(2, di(2), scrow) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(3, di(3), scpln) call VRFY(ret,'dssdisc',number_failed) C C Write it slab by slab C sr(1) = 0 sr(2) = 0 sr(3) = 0 ret = dssdims(rank, di) call VRFY(ret,'dssdims',number_failed) ret = dssslab(sn1) call VRFY(ret,'dssslab',number_failed) st(1) = 1 st(2) = 2 st(3) = 2 sz(1) = 3 sz(2) = 1 sz(3) = 1 ret = dswslab(st, sr, sz,slab1) call VRFY(ret,'dswslab',number_failed) st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 3 sz(2) = 2 sz(3) = 1 ret = dswslab(st, sr, sz, slab3) call VRFY(ret,'dswslab',number_failed) st(1) = 4 st(2) = 1 st(3) = 1 sz(1) = 1 sz(2) = 3 sz(3) = 2 ret = dswslab(st, sr, sz, slab5) call VRFY(ret,'dswslab',number_failed) ret = dseslab() call VRFY(ret,'dseslab',number_failed) num_err = number_failed if (num_err .ne. 0) then print *,'number of failures =',num_err else call MESSAGE(VERBO_HI, ' *** slab1wf passed *** ') endif C C slab2wf test C C call MESSAGE(5,'Writing the last 2 of 5 slabs to slab1wf.hdf') C print *,'\n Writing the last 2 of 5 slabs to slab1wf.hdf' sn2 = 'slab1wf.hdf' C set ref of SDS to write to nref = 2 C C First clear all previous info and restarot to beginning of file C ret = dsclear() call VRFY(ret,'dsclear',number_failed) ret = dfsdrestart() call VRFY(ret,'dfsdrestart',number_failed) C Get relevant info on SDS call MESSAGE(5,'Calling dsigdim to get info on SDS') ret = dsgdims(sn2, rank, sz, rank) call VRFY(ret,'dsigdim',number_failed) C call MESSAGE(5,'Calling dswref to ref o SDS to write to') C set SDS to write to ret = dswref(sn2, nref) call VRFY(ret,'dswref',number_failed) call MESSAGE(5,'Calling dssslab to start access on SDS') ret = dssslab(sn2) call VRFY(ret,'dssslab',number_failed) st(1) = 1 st(2) = 3 st(3) = 1 sz(1) = 3 sz(2) = 1 sz(3) = 2 C call MESSAGE(5,'Calling dswslab to write 4of5 slabs to SDS') ret = dswslab(st, sr, sz, slab2) call VRFY(ret,'dswslab',number_failed) st(1) = 1 st(2) = 1 st(3) = 2 sz(1) = 3 sz(2) = 1 sz(3) = 1 C call MESSAGE(5,'Calling dswslab to write 5of5 slabs to SDS') ret = dswslab(st, sr, sz, slab4) call VRFY(ret,'dswslab',number_failed) call MESSAGE(5,'Calling dseslab to end access to SDS') ret = dseslab() call VRFY(ret,'dseslab',number_failed) if ( num_err .ne. 0) then print *,'number of failures =',num_err endif C C Retrieve slab for verification C st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 4 sz(2) = 3 sz(3) = 2 sr(1) = 4 sr(2) = 3 sr(3) = 2 num_err = 0 C call MESSAGE(5,'Calling dsrslab to start read access to SDS') ret = dsrslab(sn2, st, sz, st, sa, sr) call VRFY(ret,'dsrslab',number_failed) num_err = number_failed if ( num_err .ne. 0) then print *,'number of failures =',num_err endif call MESSAGE(5,' Verifying data ') num_err = 0 do 800 i=1, np do 700 j=1, nr do 600 k=1, nc if ( da(k,j,i) .ne. sa(k,j,i)) then num_err = num_err + 1 endif C print *, 'da() ',da(k,j,i) C print *, 'sa() ',sa(k,j,i) 600 continue 700 continue 800 continue if (num_err .ne. 0) then print *,'slab2wf: number of wrong values in slab =',num_err else call MESSAGE(VERBO_HI, ' *** slab2wf passed *** ') endif C C slab4wf test C call MESSAGE(5,'Writing data as 1 slab to slab4wf.hdf') C print *,'Writing data as 1 slab to slab4wf.hdf' sn4 = 'slab4wf.hdf' C C Clear previous info ret = dsclear() call VRFY(ret,'dsclear',number_failed) C Set relevant info ret = dssdims(rank, di) call VRFY(ret,'dssgdim',number_failed) ret = dssdist(1, lcol, ucol, fcol) call VRFY(ret,'dssdist',number_failed) ret = dssdist(2, lrow, urow, frow) call VRFY(ret,'dssdist',number_failed) ret = dssdist(3, lpln, upln, fpln) call VRFY(ret,'dssdist',number_failed) ret = dssdisc(1, di(1), sccol) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(2, di(2), scrow) call VRFY(ret,'dssdisc',number_failed) ret = dssdisc(3, di(3), scpln) call VRFY(ret,'dssdisc',number_failed) C C Write it as one slab C ret = dssslab(sn4) call VRFY(ret,'dssslab',number_failed) st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 4 sz(2) = 3 sz(3) = 2 ret = dswslab(st, sr, sz, da) call VRFY(ret,'dswslab',number_failed) ret = dseslab() call VRFY(ret,'dseslab',number_failed) C C Retrieve slab for verification C st(1) = 1 st(2) = 1 st(3) = 1 sz(1) = 4 sz(2) = 3 sz(3) = 2 sr(1) = 4 sr(2) = 3 sr(3) = 2 ret = dsrslab(sn4, st, sz, st, sa, sr) call VRFY(ret,'dsrslab',number_failed) num_err = number_failed if ( num_err .ne. 0) then print *,'number of failures =',num_err endif call MESSAGE(5,' Verifying data ') num_err = 0 do 902 i=1, np do 901 j=1, nr do 900 k=1, nc if ( da(k,j,i) .ne. sa(k,j,i)) then num_err = num_err + 1 endif C print *, 'da() ',da(k,j,i) C print *, 'sa() ',sa(k,j,i) 900 continue 901 continue 902 continue if (num_err .ne. 0) then print *,'slab4wf: number of wrong values in slab =',num_err else call MESSAGE(VERBO_HI, ' *** slab4wf passed *** ') endif C C return end hdf4-hdf4.3.1/hdf/test/srcdir_str.h.in000066400000000000000000000021251503061704500175030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* If you are reading this file and it has a '.h' suffix, it was automatically * generated from the '.in' version. Make changes there. */ /* Set the 'srcdir' path from configure time */ static const char *config_srcdir = "@srcdir@"; hdf4-hdf4.3.1/hdf/test/t24f.f000066400000000000000000000205551503061704500155040ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine t24f (number_failed) implicit none include 'fortest.inc' C Test Program: C Writes 24-bit raster images with specified interlace C code to a file. C Reads the images and their dimensions from the file. C Input file: none C Output file: tdf24f.hdf C C integer number_failed character*20 myname parameter (myname = 'r24') integer d1, d2, il character*80 TESTFILE character*1 CR character buf(3, 2, 2), buf1(2, 3, 2), buf2(2, 2, 3) character in(3,2,2), in1(2, 3, 2), in2(2, 2, 3) integer i, j, k, ret call ptestban('Testing', myname) TESTFILE = 'tdf24f.hdf' CR = char(10) number_failed = 0 do 150 i=1, 2 do 2 j=1, 2 buf(1, j, i) = char(i+j) buf(2, j, i) = char(i+j) buf(3, j, i) = char(i+j) buf1(j, 1, i) = char(i-j) buf1(j, 2, i) = char(i-j) buf1(j, 3, i) = char(i-j) buf2(j, i, 1) = char(2*i - j) buf2(j, i, 2) = char(2*i - j) buf2(j, i, 3) = char(2*i - j) 2 continue 150 continue call MESSAGE(VERBO_HI, 'Setting il to 0') ret = d2setil(0) call VRFY(ret, 'd2setil',number_failed) call MESSAGE(VERBO_HI, ' Putting buffer 1') ret = d2pimg(TESTFILE, buf, 2, 2) call VRFY(ret, 'd2pimg',number_failed) call MESSAGE(VERBO_HI, 'Setting il to 1') ret = d2setil(1) call VRFY(ret, 'd2setil',number_failed) call MESSAGE(VERBO_HI, 'Adding buf1') ret = d2aimg(TESTFILE, buf1, 2, 2) call VRFY(ret, 'd2aimg',number_failed) call MESSAGE(VERBO_HI, 'Setting il to 2') ret = d2setil(2) call VRFY(ret, 'd2setil',number_failed) call MESSAGE(VERBO_HI, 'Adding buf2') ret = d2aimg(TESTFILE, buf2, 2, 2) call VRFY(ret, 'd2aimg',number_failed) call MESSAGE(VERBO_HI, 'Restarting file') ret = d2first() call VRFY(ret, 'd2first',number_failed) call MESSAGE(VERBO_HI, 'Req il 0') ret = d2reqil(0) call VRFY(ret, 'd2reqil',number_failed) call MESSAGE(VERBO_HI, 'Getting dims') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 200 i=1, 2 do 180 j=1, 2 do 160 k=1,3 if (in(k,j,i) .ne. buf(k,j,i)) then print *, 'Error at ', k, j, i endif 160 continue 180 continue 200 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 250 i=1, 2 do 220 j=1, 2 do 210 k = 1, 3 if (in(k,j,i) .ne. buf1(j,k,i) ) then print *, 'Error at ', k, j, i endif 210 continue 220 continue 250 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 300 i=1, 2 do 280 j=1, 2 do 260 k = 1, 3 if (in(k,j,i) .ne. buf2(j,i,k)) then print *, 'Error at ', k, j, i endif 260 continue 280 continue 300 continue call MESSAGE(VERBO_HI, 'Restarting file') ret = d2first() call VRFY(ret, 'd2first',number_failed) call MESSAGE(VERBO_HI, 'Req il 1') ret = d2reqil(1) call VRFY(ret, 'd2reqil',number_failed) call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in1, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 350 i=1, 2 do 320 j=1, 2 do 310 k=1,3 if (in1(j,k,i) .ne. buf(k,j,i)) then print *, 'Error at ', k, j, i endif 310 continue 320 continue 350 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in1, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 400 i=1, 2 do 380 j=1, 2 do 360 k = 1, 3 if (in1(j,k,i) .ne. buf1(j,k,i)) then print *, 'Error at ', k,j,i endif 360 continue 380 continue 400 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in1, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 450 i=1, 2 do 420 j=1, 2 do 410 k =1, 3 if (in1(j,k,i) .ne. buf2(j,i,k)) then print *, 'Error at ', k, j, i endif 410 continue 420 continue 450 continue call MESSAGE(VERBO_HI, 'Restarting file') ret = d2first() call VRFY(ret, 'd2first',number_failed) call MESSAGE(VERBO_HI, 'Req il 2') ret = d2reqil(2) call VRFY(ret, 'd2reqil',number_failed) call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in2, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 500 i=1, 2 do 480 j=1, 2 do 460 k=1, 3 if (in2(j,i,k) .ne. buf(k,j,i)) then print *, 'Error at ', k, j, i endif 460 continue 480 continue 500 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in2, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 550 i=1, 2 do 520 j=1, 2 do 510 k = 1,3 if (in2(j,i,k) .ne. buf1(j,k,i)) then print *, 'Error at ', k, j, i endif 510 continue 520 continue 550 continue call MESSAGE(VERBO_HI, 'Getting dimensions') ret = d2gdims(TESTFILE, d1, d2, il) call VRFY(ret, 'd2gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image') ret = d2gimg(TESTFILE, in2, 2, 2) call VRFY(ret, 'd2gimg',number_failed) do 600 i=1, 2 do 580 j=1, 2 do 560 k = 1, 3 if (in2(j,i,k) .ne. buf2(j,i,k)) then print *, 'Error at ', k, j, i endif 560 continue 580 continue 600 continue if (number_failed .eq. 0) then call MESSAGE(VERBO_DEF + 1, + '****** ALL TESTS SUCCESSFUL ******') else print *, '****** ', number_failed, ' TESTS FAILED ******' endif return end hdf4-hdf4.3.1/hdf/test/tanf.f000066400000000000000000000174021503061704500156520ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tanf (number_failed) C C C Test program: stores annotations in a file. C Writes several SDSs and corresponding RISs to a file. C Writes labels and descriptions for all but the first C three SDSs. C Writes labels and descriptions for all RISs. C C Input file: none C Output files: tdfanF.hdf C C Possible bug: When reading in a label, we have to give it a C length that is one greater than MAXLEN_LAB. This C may be due to a bug in dfan.c in DFANIgetann(). C C This was addressed in BUG 1640: Added isfortran C flag to DFANIgetann to avoid termination C of the string with the null character when the routine C is call from FORTRAN, hence no longer need to add one. C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'an') integer ISFIRST, NOTFIRST, MAXLEN_LAB integer MAXLEN_DESC, ROWS, COLS, REPS parameter ( ISFIRST = 1, * NOTFIRST = 0, * MAXLEN_LAB = 30, * MAXLEN_DESC = 500, * ROWS = 10, * COLS = 10, * REPS = 2 ) integer refnum integer ret integer rank integer j, dimsizes(2) character*30 labsds, labris character*500 descsds, descris character pal(768) character*64 TESTFILE character*1 CR character image(ROWS, COLS), newimage(ROWS, COLS) real data(ROWS, COLS) call ptestban('Testing', myname) number_failed = 0 CR = char(10) TESTFILE = 'tdfanF.hdf' C *** set up object labels and descriptions *** labsds = 'Object label #1: sds' labris = 'Object label #2: image' descsds = 'Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 ' * // CR // ' 13 14 15 16 17 18 19 20 ' * // ' **END SDS DESCR**' descris = 'Object Descr #2: A B C D E F G H I J K L ' * // CR // ' M N O **END IMAGE DESCR **' C *** generate float array and image *** rank = 2 dimsizes(1)=ROWS dimsizes(2)=COLS call gen2Dfloat(ROWS, COLS, data) call genimage(ROWS, COLS, data, image) ret = dssdims(rank,dimsizes) call VRFY(ret, 'dssdims', number_failed) C *** Write labels and descriptions *** call MESSAGE(VERBO_MED, + '*** Writing labels & descriptions with SDS and RIS ***') do 100 j=1,REPS C write out scientific data set ret = dsadata(TESTFILE, rank,dimsizes, data) call VRFY(ret, 'dsadata', number_failed) C write out annotations for 2 out of every 3 if (mod(j,3) .ne. 0) then refnum = dslref() ret = daplab(TESTFILE, DFTAG_SDG, refnum, labsds) call VRFY(ret, 'daplab', number_failed) ret = dapdesc(TESTFILE, DFTAG_SDG, refnum, * descsds, len(descsds)) call VRFY(ret, 'dapdesc', number_failed) endif ret = d8aimg(TESTFILE, image, COLS, ROWS, 0) call VRFY(ret, 'd8aimg', number_failed) refnum = DFR8lastref() ret = daplab(TESTFILE, DFTAG_RIG, refnum, labris) call VRFY(ret, 'daplab', number_failed) ret = dapdesc(TESTFILE,DFTAG_RIG,refnum, descris, * len(descris)) call VRFY(ret, 'dapdesc', number_failed) 100 continue C******** Read labels and descriptions ********* call MESSAGE(VERBO_MED, + '*** Reading labels and descriptions for SDS and RIS ***') do 200 j=1,REPS ret = dsgdims(TESTFILE, rank,dimsizes,3) call VRFY(ret, 'dsgdims', number_failed) refnum = dslref() C read in annotations for 2 out of every 3 if (mod(j,3) .ne. 0) then call an_check_lab_desc(TESTFILE, DFTAG_SDG, refnum, * labsds, descsds, number_failed) endif ret = d8gimg(TESTFILE, newimage, COLS, ROWS, pal) call VRFY(ret, 'd8gimg', number_failed) refnum = DFR8lastref() call an_check_lab_desc(TESTFILE, DFTAG_RIG, refnum, * labris, descris, number_failed) 200 continue if ( number_failed .eq. 0 ) then call MESSAGE(VERBO_HI, + '***** ALL DFAN TESTS SUCCESSFUL ***** ') else print *,'***** ',number_failed,' TESTS FAILED ***** ' endif return end C************************************************************** C C an_check_lab_desc: read and compare label and description C with expected ones C C************************************************************** subroutine an_check_lab_desc(filename, tag, ref, label, desc, * number_failed) implicit none include 'fortest.inc' character*(*) filename, label, desc integer tag, ref, number_failed integer MAXLEN_LAB, MAXLEN_DESC parameter ( MAXLEN_LAB = 30, * MAXLEN_DESC = 500 ) integer inlablen, indesclen, ret character*30 inlabel character*500 indesc inlablen = dagllen(filename, tag, ref) call VRFY(inlablen, 'dagllen', number_failed) if (inlablen .ne. len(label)) then print *,' >>>BAD LABEL LENGTH.' print *,' IS: ', inlablen print *,' SHOULD BE: ', len(label) number_failed = number_failed + 1 endif ret = daglab(filename, tag, ref, inlabel, MAXLEN_LAB) call VRFY(ret, 'daglab', number_failed) if (inlabel .ne. label) then print *,' >>>BAD LABEL.' print *,' IS: ', inlabel print *,' SHOULD BE: ', label number_failed = number_failed + 1 endif indesclen = dagdlen(filename, tag, ref) call VRFY(indesclen, 'dagdlen', number_failed) if (indesclen .ne. len(desc)) then print *,' >>>BAD DESCRIPTION LENGTH.' print *,' IS: ', indesclen print *,' SHOULD BE: ', len(desc) number_failed = number_failed + 1 else ret = dagdesc(filename, tag, ref, indesc, MAXLEN_DESC) call VRFY(ret, 'dagdesc', number_failed) if (indesc .ne. desc) then print *,' >>>BAD DESCRIPTION.' print *,' IS: ', indesc print *,' SHOULD BE: ', desc number_failed = number_failed + 1 endif endif return end hdf4-hdf4.3.1/hdf/test/tanfilef.f000066400000000000000000000144721503061704500165160ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tanfilef (number_failed) C C C Test program: C Writes file labels and descriptions in a file. C Reads the labels and descriptions from the file C C Input file: none C Output files: tdfanflF.hdf C C Possible bug: When reading in a label, we have to give it a C length that is one greater than MAXLEN_LAB. This C may be due to a bug in dfan.c in DFANIgetann(). C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'anfile') integer ret integer ISFIRST, NOFIRST, MAXLEN_LAB, MAXLEN_DESC integer fid character*35 lab1, lab2 character*35 templab character*100 desc1, desc2, tempstr character*64 TESTFILE character*1 CR call ptestban('Testing', myname) ISFIRST = 1 NOFIRST = 0 number_failed = 0 TESTFILE = 'tdfanflF.hdf' CR = char(10) MAXLEN_LAB = 35 MAXLEN_DESC = 100 lab1 = 'File label #1: aaa' lab2 = 'File label #2: bbbbbb' desc1 = 'File descr #1: This is a test file annotation' desc2 = 'File descr #2: One more test ...' call MESSAGE(VERBO_HI, '****** Write file labels *******') fid = hopen(TESTFILE, DFACC_CREATE, 0) call VRFY(fid, 'hopen', number_failed) ret = daafid(fid, lab1) call VRFY(ret, 'daafid', number_failed) ret = daafid(fid, lab2) call VRFY(ret, 'daafid', number_failed) call MESSAGE(VERBO_HI, '****** Write file descriptions *******') ret = daafds(fid, desc1, len(desc1)) call VRFY(ret, 'daafds', number_failed) ret = daafds(fid, desc2, len(desc2)) call VRFY(ret, 'daafds', number_failed) ret = hclose(fid) call VRFY(ret, 'hclose', number_failed) call MESSAGE(VERBO_HI, + '****** Read length of the first file label ****') fid = hopen(TESTFILE, DFACC_READ, 0) call VRFY(fid, 'hopen-read', number_failed) ret = dagfidl(fid, ISFIRST) call VRFY(ret, 'dagfidl', number_failed) call checklen(ret, lab1, 'label' ) call MESSAGE(VERBO_HI, '******...followed by the label *****') ret = dagfid(fid, templab, MAXLEN_LAB, ISFIRST) call VRFY(ret, 'dagfid', number_failed) call checklab(lab1, templab, ret, 'label') call MESSAGE(VERBO_HI, + '****** Read length of the second file label ****') ret = dagfidl(fid, NOFIRST) call VRFY(ret, 'dagfidl', number_failed) call checklen(ret, lab2, 'label') call MESSAGE(VERBO_HI, '******...followed by the label *****') ret = dagfid(fid, templab, MAXLEN_LAB, NOFIRST) call VRFY(ret, 'dagfid', number_failed) call checklab(lab2, templab, ret, 'label') call MESSAGE(VERBO_HI, + '****** Read length of the first file description ****') ret = dagfdsl(fid, ISFIRST) call VRFY(ret, 'dagfdsl', number_failed) call checklen(ret, desc1, 'description' ) call MESSAGE(VERBO_HI, + '******...followed by the description *****') ret = dagfds(fid, tempstr, MAXLEN_DESC, ISFIRST) call VRFY(ret, 'dagfds', number_failed) call checkann(desc1, tempstr, ret, 'description') call MESSAGE(VERBO_HI, + '****** Read length of the second file description ****') ret = dagfdsl(fid, NOFIRST) call VRFY(ret, 'dagfdsl', number_failed) call checklen(ret, desc2, 'description' ) call MESSAGE(VERBO_HI, + '******...followed by the description *****') ret = dagfds(fid, tempstr, MAXLEN_DESC, NOFIRST) call VRFY(ret, 'dagfds', number_failed) call checkann(desc2, tempstr, ret, 'description') ret = hclose(fid) call VRFY(ret, 'hclose', number_failed) if (number_failed .eq. 0) then call MESSAGE(VERBO_HI, + '***** ALL DFANFILE TESTS SUCCESSFUL ******') else print *, '********', number_failed, ' TESTS FAILED' endif return end C********************************************* C C checklen C C********************************************* subroutine checklen(ret, oldstr, type) implicit none character*(*) type, oldstr integer ret integer oldlen oldlen = len(oldstr) if (ret .ge. 0 .and. ret .ne. oldlen) then print *, 'Length of ', type, ' is ', len(oldstr), * ' instead of ', ret endif return end C*********************************************** C C checkann C C*********************************************** subroutine checkann(oldstr, newstr, ret, type) implicit none character*90 oldstr, newstr character*(*) type integer ret if (ret .ge. 0 .and. oldstr .ne. newstr) then print *, type, ' is incorrect.' print *, ' It should be <', oldstr, '>' print *, ' instead of <', newstr, '>' endif return end C*********************************************** C C checklab C C*********************************************** subroutine checklab(oldstr, newstr, ret, type) implicit none character*30 oldstr, newstr character*(*) type integer ret if (ret .ge. 0 .and. oldstr .ne. newstr) then print *, type, ' is incorrect.' print *, ' It should be <', oldstr, '>' print *, ' instead of <', newstr, '>' endif return end hdf4-hdf4.3.1/hdf/test/tattdatainfo.c000066400000000000000000000661011503061704500174010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tattdatainfo.c - tests the functions VSgetattdatainfo, Vgetattdatainfo, * and GRgetattdatainfo. * Structure of the file: * test_attdatainfo - test driver * test_vvsattrs - tests attributes on vgroups and vdatas * test_vgmixedattrs - tests handling vgroup attributes created with and * without Vsetattr * test_grattrs - tests attributes on GR file and raster images * -BMR, Aug 2010 ****************************************************************************/ #include "hdf.h" #include "tdatainfo.h" #include "tutils.h" static void test_vvsattrs(); static void test_vgmixedattrs(); static void test_grattrs(); /**************************************************************************** Name: test_vvsattrs() - tests getting attribute data information from vdatas and vgroups Description: This routine performs the following steps: - Create a new file with the V interface - Creates several vgroups and vdatas, and forms some arbitrary structures among these elements. - Add some attributes to various vgroups and vdatas. - Retrieve offset/length of the data of some attributes. - Reopen the file without HDF4 library. - Read in attribute's data using the previously recorded offsets/lengths and verify the data BMR - Aug 2010 ****************************************************************************/ #define ATTRFILE "tattdatainfo.hdf" #define NUM_VDATAS 3 #define NUM_VGROUPS 3 #define ATTNAME1 "Attribute 1" #define ATTNAME2 "Attribute 2" #define ATTNAME3 "Attribute 3" #define ATTNAME4 "Attribute 4" #define ATTNAME5 "Attribute 5" #define ATTNAME6 "Attribute 6" #define ATTNAME7 "Attribute 7" #define FLDNAME1 "Field1" /* contains one char */ #define FLDNAME2 "Field2" /* contains three chars */ #define FLDNAME3 "Field3" /* contains two ints */ #define FLDNAME4 "Field4" /* contains one float */ #define FIELD_NAME_LIST1 "Field1,Field2" #define FIELD_NAME_LIST2 "Field3,Field4" static void test_vvsattrs() { int32 fid; /* File ID */ int32 vgroup0_id, vgroup1_id, vgroup2_id; /* Various vgroup IDs */ int32 vdata0_id, vdata1_id, vdata2_id; /* Various vdata IDs */ int32 fldindex; int32 ref_list[NUM_VGROUPS], vdref_list[NUM_VDATAS]; int32 offset, length; char vgclass[20]; int ii; intn status; /* returned status */ intn status_32; /* returned status for functions returning an int32! */ /* Attributes to be set for various elements */ uint32 attr1[4] = {4, 5, 6, 7}; char attr2[8] = {'V', 'g', 'r', 'o', 'u', 'p', '0', '\0'}; char attr3[7] = {'V', 'd', 'a', 't', 'a', '0', '\0'}; char attr4[7] = {'F', 'i', 'e', 'l', 'd', '1', '\0'}; /* Create HDF file and initialize the interface. */ fid = Hopen(ATTRFILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create NUM_VGROUPS vgroups and set classname */ for (ii = 0; ii < NUM_VGROUPS; ii++) { int32 vgroup_id, vgroup_ref; /* Create a vgroup. */ vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach"); /* Record its reference number for later access */ vgroup_ref = VQueryref(vgroup_id); CHECK_VOID(vgroup_ref, FAIL, "VQueryref:vgroup_id"); ref_list[ii] = vgroup_ref; /* Set its class name */ sprintf(vgclass, "VG-CLASS-%d", ii); status_32 = Vsetclass(vgroup_id, vgclass); CHECK_VOID(status_32, FAIL, "Vsetclass"); /* Detach it */ status_32 = Vdetach(vgroup_id); CHECK_VOID(status_32, FAIL, "Vdetach"); } /* Create NUM_VDATAS vgroups and set classname */ for (ii = 0; ii < NUM_VDATAS; ii++) { int32 vdata_id, vdata_ref; /* Create a vdata. */ vdata_id = VSattach(fid, -1, "w"); CHECK_VOID(vdata_id, FAIL, "VSattach"); /* Record its reference number for later access */ vdata_ref = VSQueryref(vdata_id); CHECK_VOID(vdata_ref, FAIL, "VSQueryref:vdata_id"); vdref_list[ii] = vdata_ref; /* Set its class name */ sprintf(vgclass, "VS-CLASS-%d", ii); status_32 = VSsetclass(vdata_id, vgclass); CHECK_VOID(status_32, FAIL, "VSsetclass"); /* Detach it */ status_32 = VSdetach(vdata_id); CHECK_VOID(status_32, FAIL, "VSdetach"); } /* Insert some vdatas/vgroups into some other vgroups to build some sort of vgroup/vdata structure */ /* Insert "VD-CLASS-1" and "VD-CLASS-2" into "VG-CLASS-0" */ vgroup0_id = Vattach(fid, ref_list[0], "w"); /* "VG-CLASS-0" */ CHECK_VOID(vgroup0_id, FAIL, "Vattach"); vdata1_id = VSattach(fid, vdref_list[1], "w"); /* "VD-CLASS-1" */ CHECK_VOID(vdata1_id, FAIL, "VSattach"); vdata2_id = VSattach(fid, vdref_list[2], "w"); /* "VD-CLASS-2" */ CHECK_VOID(vdata2_id, FAIL, "VSattach"); /* Define fields for vdata1 and vdata2 */ status = VSfdefine(vdata1_id, FLDNAME1, DFNT_CHAR8, 1); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSfdefine(vdata1_id, FLDNAME2, DFNT_CHAR8, 3); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSsetfields(vdata1_id, FIELD_NAME_LIST1); CHECK_VOID(status, FAIL, "VSsetfields"); status = VSfdefine(vdata2_id, FLDNAME3, DFNT_INT32, 2); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSfdefine(vdata2_id, FLDNAME4, DFNT_FLOAT, 1); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSsetfields(vdata2_id, FIELD_NAME_LIST2); CHECK_VOID(status, FAIL, "VSsetfields"); status_32 = Vinsert(vgroup0_id, vdata1_id); CHECK_VOID(status_32, FAIL, "Vinsert vdata1_id into vgroup0_id"); status_32 = Vinsert(vgroup0_id, vdata2_id); CHECK_VOID(status_32, FAIL, "Vinsert vdata2_id into vgroup0_id"); /* Insert "VD-CLASS-0", "VG-CLASS-0", and "VG-CLASS-1" into "VG-CLASS-2" */ vdata0_id = VSattach(fid, vdref_list[0], "w"); CHECK_VOID(vdata0_id, FAIL, "Vattach"); vgroup1_id = Vattach(fid, ref_list[1], "w"); /* "VG-CLASS-1" */ CHECK_VOID(vgroup1_id, FAIL, "Vattach"); vgroup2_id = Vattach(fid, ref_list[2], "w"); /* "VG-CLASS-2" */ CHECK_VOID(vgroup2_id, FAIL, "Vattach"); status_32 = Vinsert(vgroup2_id, vdata0_id); CHECK_VOID(status_32, FAIL, "Vinsert vdata0_id into vgroup2_id"); status_32 = Vinsert(vgroup2_id, vgroup0_id); CHECK_VOID(status_32, FAIL, "Vinsert vgroup0_id into vgroup2_id"); status_32 = Vinsert(vgroup2_id, vgroup1_id); CHECK_VOID(status_32, FAIL, "Vinsert vgroup1_id into vgroup2_id"); /***************************************/ /* Set attributes for various elements */ /***************************************/ /* Set two attributes for vgroup0 */ status = Vsetattr(vgroup0_id, ATTNAME1, DFNT_UINT32, 4, attr1); CHECK_VOID(status, FAIL, "Vsetattr vgroup0_id"); status = Vsetattr(vgroup0_id, ATTNAME2, DFNT_CHAR8, 8, attr2); CHECK_VOID(status, FAIL, "Vsetattr vgroup0_id"); /* Set attribute for vdata0 */ status = VSsetattr(vdata0_id, _HDF_VDATA, ATTNAME3, DFNT_CHAR8, 7, attr3); CHECK_VOID(status, FAIL, "VSsetattr vdata0_id"); /* Set attribute for vdata1/field1 */ status = VSfindex(vdata1_id, FLDNAME1, &fldindex); CHECK_VOID(status, FAIL, "VSfindex vdata1_id"); VERIFY_VOID(fldindex, 0, "VSfindex vdata1_id"); /* Set attribute to field FLDNAME1*/ status = VSsetattr(vdata1_id, fldindex, ATTNAME4, DFNT_CHAR8, 7, attr4); CHECK_VOID(status, FAIL, "VSsetattr vdata1_id"); /* Change values of existing attribute */ /* Vsetattr(vgid, ATTNAME1, DFNT_UINT32, 2, &attr1[2])) */ /* Terminate access to any opened elements */ status_32 = Vdetach(vgroup0_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup0_id"); status_32 = Vdetach(vgroup1_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup1_id"); status_32 = Vdetach(vgroup2_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup2_id"); status_32 = VSdetach(vdata0_id); CHECK_VOID(status_32, FAIL, "VSdetach vdata0_id"); status_32 = VSdetach(vdata1_id); CHECK_VOID(status_32, FAIL, "VSdetach vdata1_id"); status_32 = VSdetach(vdata2_id); CHECK_VOID(status_32, FAIL, "VSdetach vdata2_id"); /* Terminate access to the V interface and close the HDF file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /************************************************************** The following elements have attributes: vgroup0: attr1 and attr2 vdata0: attr3 FLDNAME1 of vdata1: attr4 ***************************************************************/ /* Open the file to test Vgetattdatainfo and VSgetattdatainfo */ fid = Hopen(ATTRFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Attach to vgroup0, vdata0, and vdata1 for attribute's data info */ vgroup0_id = Vattach(fid, ref_list[0], "w"); /* "VG-CLASS-0" */ CHECK_VOID(vgroup0_id, FAIL, "Vattach"); vdata0_id = VSattach(fid, vdref_list[0], "w"); /* "VD-CLASS-0" */ CHECK_VOID(vdata0_id, FAIL, "Vattach"); vdata1_id = VSattach(fid, vdref_list[1], "w"); /* "VD-CLASS-1" */ CHECK_VOID(vdata1_id, FAIL, "VSattach"); /* Get data info of the first attribute from vdata0 */ status = VSgetattdatainfo(vdata0_id, _HDF_VDATA, 0, &offset, &length); CHECK_VOID(status, FAIL, "VSgetattdatainfo"); /* Read and verify an attribute without using HDF4 library */ status = readnoHDF_char(ATTRFILE, offset, length, attr3); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); /* Reset offset/length */ offset = length = 0; /* Get data info of the first attribute from vdata1/FLDNAME1 */ status = VSgetattdatainfo(vdata1_id, 0, 0, &offset, &length); CHECK_VOID(status, FAIL, "VSgetattdatainfo"); /* Read and verify an attribute without using HDF4 library */ status = readnoHDF_char(ATTRFILE, offset, length, attr4); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); /* Get data info of the first attributes from vgroup0 */ status = Vgetattdatainfo(vgroup0_id, 0, &offset, &length); CHECK_VOID(status, FAIL, "Vgetattdatainfo"); /* Reset offset/length */ offset = length = 0; /* Get data info of the second attributes from vgroup0 */ status = Vgetattdatainfo(vgroup0_id, 1, &offset, &length); CHECK_VOID(status, FAIL, "Vgetattdatainfo"); /* Read and verify an attribute without using HDF4 library */ status = readnoHDF_char("tattdatainfo.hdf", offset, length, attr2); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); /* Terminate access to any opened elements */ status_32 = Vdetach(vgroup0_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup0_id"); status_32 = VSdetach(vdata0_id); CHECK_VOID(status_32, FAIL, "VSdetach vdata0_id"); status_32 = VSdetach(vdata1_id); CHECK_VOID(status_32, FAIL, "VSdetach vdata1_id"); /* Terminate access to the V interface and close the HDF file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_vvsattrs() */ static void test_vgmixedattrs() { int32 fid; /* File ID */ int32 vgroup_id, vgroup_ref; int32 n_attrs; int32 offsets[10], lengths[10]; /* offsets and lengths of attrs' data */ /* Note: each array element is associated with an individual attribute, not a data element block; data of an attribute only has one pair of off/len*/ int ii; int32 attr_ref; intn status; /* returned status */ intn status_32; /* returned status for functions returning an int32! */ /* Attributes to be set for various elements */ uint32 attr1[4] = {4, 5, 6, 7}; /* copied from test_vvsattrs, only to verify previously added attribute */ char attr2[12] = {'V', 'G', '0', ' ', 'n', 'e', 'w', 'a', 't', 't', 'r', '\0'}; char attr3[13] = {'V', 'G', '0', ' ', 'o', 'l', 'd', 'a', 't', 't', 'r', '0', '\0'}; char attr4[13] = {'V', 'G', '0', ' ', 'o', 'l', 'd', 'a', 't', 't', 'r', '1', '\0'}; /* Create HDF file and initialize the interface. */ fid = Hopen(ATTRFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Get access to first vgroup. */ vgroup_ref = Vgetid(fid, -1); CHECK_VOID(vgroup_ref, FAIL, "Vgetid"); vgroup_id = Vattach(fid, vgroup_ref, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach"); /* Current number of attributes belong to this vgroup */ n_attrs = Vnattrs(vgroup_id); CHECK_VOID(n_attrs, FAIL, "Vnattrs"); VERIFY_VOID(n_attrs, 2, "Vnattrs"); for (ii = 0; ii < n_attrs; ii++) { char aname[20]; int32 atype, acount, asize; status = Vattrinfo(vgroup_id, ii, aname, &atype, &acount, &asize); /* strncmp(iattrname, ATTNAME1, strlen(ATTNAME1)) != 0) */ } n_attrs = Vnoldattrs(vgroup_id); VERIFY_VOID(n_attrs, 0, "Vnoldattrs"); /* Now, add one attribute with Vsetattr, and two attributes with VHstoredatam/Vaddtagref combination */ /* Add one new-style attribute */ status = Vsetattr(vgroup_id, ATTNAME5, DFNT_CHAR8, 12, attr2); CHECK_VOID(status, FAIL, "Vsetattr vgroup_id"); /* Add two old-style attributes */ attr_ref = VHstoredatam(fid, ATTR_FIELD_NAME, (unsigned char *)attr3, 1, DFNT_CHAR8, ATTNAME6, _HDF_ATTRIBUTE, 13); CHECK_VOID(attr_ref, FAIL, "VHstoredatam"); status = Vaddtagref(vgroup_id, DFTAG_VH, attr_ref); CHECK_VOID(status, FAIL, "Vaddtagref"); attr_ref = VHstoredatam(fid, ATTR_FIELD_NAME, (unsigned char *)attr4, 1, DFNT_CHAR8, ATTNAME7, _HDF_ATTRIBUTE, 13); CHECK_VOID(attr_ref, FAIL, "VHstoredatam"); status = Vaddtagref(vgroup_id, DFTAG_VH, attr_ref); CHECK_VOID(status, FAIL, "Vaddtagref"); /* Terminate access to any opened elements */ status_32 = Vdetach(vgroup_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup_id"); /* Terminate access to the V interface and close the HDF file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /************************************************************** The following element has changed: vgroup0: 2 attrs from previous test function, then attr2 of new style and attr3 and attr4 of old style here ***************************************************************/ /* Re-open the file to test Vnattrs2, Vattrinfo2, Vgetattr2, and Vgetattdatainfo */ fid = Hopen(ATTRFILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Attach to vgroup0 for attribute info and data */ vgroup_id = Vattach(fid, vgroup_ref, "w"); /* "VG-CLASS-0" */ CHECK_VOID(vgroup_id, FAIL, "Vattach"); /* Vnattrs returns number of attributes added by Vsetattr */ n_attrs = Vnattrs(vgroup_id); VERIFY_VOID(n_attrs, 3, "Vnattrs"); /* Vnoldattrs returns number of attrs added by VHstoredatam/Vaddtagref */ n_attrs = Vnoldattrs(vgroup_id); VERIFY_VOID(n_attrs, 2, "Vnoldattrs"); /* Vnattrs2 returns total number of attrs, regardless how they were added */ n_attrs = Vnattrs2(vgroup_id); VERIFY_VOID(n_attrs, 5, "Vnattrs2"); /* Test Vattrinfo2 and Vgetattr2 on each attribute */ for (ii = 0; ii < n_attrs; ii++) { char aname[20]; int32 atype, acount, asize, n_fields; uint16 refnum; int jj; char cvalues[20]; int32 ivalues[10]; const char *check_attr_names[5] = {"Attribute 6", "Attribute 7", "Attribute 1", "Attribute 2", "Attribute 5"}; const char *check_attr_values[5] = {"VG0 oldattr0", "VG0 oldattr1", "", /* int values, added by test_vvsattrs with attr1 */ "Vgroup0", /* added by test_vvsattrs with attr2 */ "VG0 newattr"}; /* Get attribute information and verify its name and number of fields, which should be 1 */ status = Vattrinfo2(vgroup_id, ii, aname, &atype, &acount, &asize, &n_fields, &refnum); VERIFY_CHAR_VOID(aname, check_attr_names[ii], "Vattrinfo2"); VERIFY_VOID(n_fields, 1, "Vattrinfo2"); /* Test Vgetattr2 to make sure it works with mixed attributes */ switch (atype) { case DFNT_CHAR: /* Get and verify values of a char attribute */ status = Vgetattr2(vgroup_id, ii, (void *)cvalues); VERIFY_CHAR_VOID(cvalues, check_attr_values[ii], "Vgetattr2 char"); /* Add an extra test for Vgetattdatainfo */ /* Get data info and verify number of data block */ status = Vgetattdatainfo(vgroup_id, ii, &offsets[ii], &lengths[ii]); CHECK_VOID(status, FAIL, "Vgetattdatainfo"); VERIFY_VOID(status, 1, "Vgetattdatainfo"); /* Read and verify data of an attr without using HDF4 library */ status = readnoHDF_char(ATTRFILE, offsets[ii], lengths[ii], check_attr_values[ii]); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); break; case DFNT_UINT32: /* Get and verify values of an int attribute */ status = Vgetattr2(vgroup_id, ii, (void *)ivalues); for (jj = 0; jj < acount; jj++) VERIFY_VOID(ivalues[jj], attr1[jj], "Vgetattr2 int"); break; default: fprintf(stderr, "type %d is not handled!\n", atype); break; } } /* Terminate access to the vgroup */ status_32 = Vdetach(vgroup_id); CHECK_VOID(status_32, FAIL, "Vdetach vgroup_id"); /* Terminate access to the V interface and close the HDF file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_vgmixedattrs() */ /**************************************************************************** Name: test_grattrs() - tests getting attribute data information from GR file and raster images Description: This routine performs the following steps: - Create a new file with the GR interface - Creates and write two raster images with GRcreate and GRwritedata - Set two attributes to the file - Set one attribute to each of the images - Terminate access to images and file - Reopen the file and images to retrieve their attribute's data info - Call readnoHDF_char to open the file without HDF library then read in attributes having char data using the previously recorded offsets/lengths and verify the data BMR - Sep 2010 ****************************************************************************/ #define GRATTRFILE "tgrattrdatainfo.hdf" #define IMAGE_NAME "Image Array 1" #define F_ATT1_NAME "File Attribute 1" #define F_ATT2_NAME "File Attribute 2" #define RI_ATT1_NAME "Image Attribute 1" #define RI_ATT2_NAME "Image Attribute 2" #define F_ATT1_VAL "Contents of First FILE attribute" #define F_ATT2_VAL "Contents of Second FILE attribute" #define F_ATT1_COUNT 32 #define F_ATT2_COUNT 33 #define RI_ATT1_VAL "Contents of IMAGE's First Attribute" #define RI_ATT1_COUNT 35 #define RI_ATT2_COUNT 6 #define X_LENGTH 10 /* number of columns in the image */ #define Y_LENGTH 5 /* number of rows in the image */ #define N_COMPS 1 /* number of components in the image */ static void test_grattrs() { int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ start[2], /* where to start to write for each dimension */ edges[2], /* how long to write for each dimension */ dimsizes[2], /* sizes of the two dimensions of the image array */ interlace_mode, /* interlace mode of the image */ ii, jj; intn status; int16 ri_att2_val[RI_ATT2_COUNT] = {1, 2, 3, 4, 5, 6}; int8 image_buf[Y_LENGTH][X_LENGTH][N_COMPS]; int32 offsets[4], lengths[4]; /* offsets and lengths of attrs' data */ /* Note: each array element is associated with an individual attribute, not a data element block; data of an attribute only has one pair of off/len*/ /********************** End of variable declaration **********************/ /* Create and open the file. */ file_id = Hopen(GRATTRFILE, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the number type, interlace mode, and dimensions of the image. */ interlace_mode = MFGR_INTERLACE_LINE; dimsizes[0] = X_LENGTH; dimsizes[1] = Y_LENGTH; /* Create a raster image array. */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, DFNT_INT8, interlace_mode, dimsizes); CHECK_VOID(ri_id, FAIL, "GRcreate"); /* Fill the image data buffer with values. */ for (ii = 0; ii < Y_LENGTH; ii++) { for (jj = 0; jj < X_LENGTH; jj++) { image_buf[ii][jj][0] = (ii + jj) + 1; /* first component */ } } /* Define the size of the data to be written, i.e., start from the origin * and go as long as the length of each dimension. */ start[0] = start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; /* Write the data into the image array and terminate access to the RI. */ status = GRwriteimage(ri_id, start, NULL, edges, (void *)image_buf); CHECK_VOID(status, FAIL, "GRwriteimage"); status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Set two file attributes to the file with names, data types, numbers of * values, and values of the attributes specified. */ status = GRsetattr(gr_id, F_ATT1_NAME, DFNT_CHAR8, F_ATT1_COUNT, F_ATT1_VAL); CHECK_VOID(status, FAIL, "GRsetattr F_ATT1_NAME"); status = GRsetattr(gr_id, F_ATT2_NAME, DFNT_CHAR8, F_ATT2_COUNT, F_ATT2_VAL); CHECK_VOID(status, FAIL, "GRsetattr F_ATT2_NAME"); /* Get access to the first and only image in the file */ ri_id = GRselect(gr_id, 0); CHECK_VOID(ri_id, FAIL, "GRselect index 0"); /* Set two attribute to the image with names, data types, numbers of * values, and values of the attributes specified. */ status = GRsetattr(ri_id, RI_ATT1_NAME, DFNT_CHAR8, RI_ATT1_COUNT, RI_ATT1_VAL); CHECK_VOID(status, FAIL, "GRsetattr RI_ATT1_NAME"); status = GRsetattr(ri_id, RI_ATT2_NAME, DFNT_INT16, RI_ATT2_COUNT, (void *)ri_att2_val); CHECK_VOID(status, FAIL, "GRsetattr RI_ATT2_NAME"); /* Terminate access to the raster image and to the GR interface and * close the HDF file. */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* Re-open the file, get data info of some attributes, then verify their data */ /* Open the HDF file and initialize the GR interface. */ file_id = Hopen(GRATTRFILE, DFACC_RDONLY, 0); CHECK_VOID(file_id, FAIL, "Hopen GRATTRFILE"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart GRATTRFILE"); /* Get access to the image, first and only */ ri_id = GRselect(gr_id, 0); CHECK_VOID(ri_id, FAIL, "GRselect index 0"); /* Get data info of file attr and store them in offsets/lengths[0,1] */ status = GRgetattdatainfo(gr_id, 0, &offsets[0], &lengths[0]); CHECK_VOID(status, FAIL, "GRgetattdatainfo"); status = GRgetattdatainfo(gr_id, 1, &offsets[1], &lengths[1]); CHECK_VOID(status, FAIL, "GRgetattdatainfo"); /* Get data info of image attr and store them in offsets/lengths[2,3] */ status = GRgetattdatainfo(ri_id, 0, &offsets[2], &lengths[2]); CHECK_VOID(status, FAIL, "GRgetattdatainfo"); status = GRgetattdatainfo(ri_id, 1, &offsets[3], &lengths[3]); CHECK_VOID(status, FAIL, "GRgetattdatainfo"); /* This image should be mapped-able by the HDF4 map writer because even though it was created by GR, it has 8-bit data, 1 compnonent, and no compression */ { intn is_mappedable; intn name_generated; status = GR2bmapped(ri_id, &is_mappedable, &name_generated); CHECK_VOID(status, FAIL, "GR2bmapped"); VERIFY_VOID(is_mappedable, TRUE, "GR2bmapped"); VERIFY_VOID(name_generated, FALSE, "GR2bmapped"); } /* Terminate access to the image and to the GR interface and close the * HDF file. */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* Verify data of attributes without the use of HDF4 library */ status = readnoHDF_char(GRATTRFILE, offsets[0], lengths[0], F_ATT1_VAL); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); status = readnoHDF_char(GRATTRFILE, offsets[1], lengths[1], F_ATT2_VAL); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); status = readnoHDF_char(GRATTRFILE, offsets[2], lengths[2], RI_ATT1_VAL); CHECK_STATUS(status, FAIL, "Verifying data without HDF4 library failed"); /* Note: readnoHDF_char is defined in tdatainfo.c */ } /* test_grattrs() */ /* Test driver for testing the public functions VSgetattdatainfo, Vgetattdatainfo, and GRgetattdatainfo. */ void test_attdatainfo() { /* Test attributes on vgroups and vdatas */ test_vvsattrs(); /* Test handling vgroup attributes created without Vsetattr */ test_vgmixedattrs(); /* Test GR API attributes */ test_grattrs(); } hdf4-hdf4.3.1/hdf/test/tbv.c000066400000000000000000000224671503061704500155210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE tbv.c Test HDF bit-vector (bv) routines. */ #include "tproto.h" #include "bitvect_priv.h" static void test_1(void); static void test_2(void); static void test_3(void); static void test_4(void); /* Basic creation & deletion tests */ static void test_1(void) { bv_ptr b; int32 size; intn ret; MESSAGE(6, printf("Testing basic bit-vector creation & deletion\n");); /* Test basic default creation */ MESSAGE(7, printf("Create a bit-vector with all defaults\n");); b = bv_new(-1); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, BV_DEFAULT_BITS, "bv_size"); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); /* Test creating a bit-vector w/ size >> defaults */ MESSAGE(7, printf("Create an extendable bit-vector with large # of bits\n");); b = bv_new(80000); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, 80000, "bv_size"); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); } /* end test_1 */ /* Basic set & get tests */ static void test_2(void) { bv_ptr b; int32 size; intn ret; MESSAGE(6, printf("Testing basic bit-vector set & get\n");); /* test basic default creation */ MESSAGE(7, printf("Create a bit-vector with all defaults\n");); b = bv_new(-1); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, BV_DEFAULT_BITS, "bv_size"); /* Check setting bits */ ret = bv_set(b, 13, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 3, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 150, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* Check getting bits */ ret = bv_get(b, 2); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 3); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, 0); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 13); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, -1); VERIFY_VOID(ret, FAIL, "bv_get"); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); /* Test another bit vector with a large number of bits */ MESSAGE(7, printf("Create an extendable bit-vector with large # of bits\n");); b = bv_new(1000); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, 1000, "bv_size"); /* Check setting bits */ ret = bv_set(b, 13, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 3, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 1050, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* Check getting bits */ ret = bv_get(b, 2); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 3); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, 0); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 13); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, 1040); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 1050); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); } /* end test_2 */ /* Advanced set & get tests */ static void test_3(void) { bv_ptr b; int32 size; int32 bit_num; intn ret; MESSAGE(6, printf("Testing basic bit-vector set & get\n");); /* Create an extendable bit-vector */ MESSAGE(7, printf("Create an extendable bit-vector\n");); b = bv_new(-1); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, BV_DEFAULT_BITS, "bv_size"); /* Check setting bits */ ret = bv_set(b, 13, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 3, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 150, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 152, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* Check getting bits */ ret = bv_get(b, 2); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 3); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, 0); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 13); VERIFY_VOID(ret, BV_TRUE, "bv_get"); ret = bv_get(b, 140); VERIFY_VOID(ret, BV_FALSE, "bv_get"); ret = bv_get(b, 150); VERIFY_VOID(ret, BV_TRUE, "bv_get"); /* Check finding 0s in the bit-vector, remembering the last one. This * should skip bit 3, which we set to 1 in the above code. */ bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 0, "bv_find_next_zero"); MESSAGE(8, printf("First 0 found at: %" PRId32 "\n", bit_num);); ret = bv_set(b, bit_num, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 1, "bv_find_next_zero"); MESSAGE(8, printf("Second 0 found at: %" PRId32 "\n", bit_num);); ret = bv_set(b, bit_num, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 2, "bv_find_next_zero"); MESSAGE(8, printf("Third 0 found at: %" PRId32 "\n", bit_num);); ret = bv_set(b, bit_num, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 4, "bv_find_next_zero"); MESSAGE(8, printf("Fourth 0 found at: %" PRId32 "\n", bit_num);); ret = bv_set(b, bit_num, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); } /* end test_3 */ /* Pathologic set/find test */ static void test_4(void) { bv_ptr b; int32 size; int32 bit_num; int i; intn ret; MESSAGE(6, printf("Testing pathologic bit-vector set & get\n");); /* Create an extendable bit-vector */ MESSAGE(7, printf("Create an extendable bit-vector\n");); b = bv_new(16); CHECK_VOID(b, NULL, "bv_new"); size = bv_size(b); MESSAGE(8, printf("Bit-vector size=%" PRId32 "\n", size);); VERIFY_VOID(size, 16, "bv_size"); /* Set all the bits to 1 */ for (i = 0; i < 16; i++) { ret = bv_set(b, i, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); } /* Set two bits to 0 (order is important!), one in each byte. At this * point the cached first zero should be 5. */ ret = bv_set(b, 13, BV_FALSE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 5, BV_FALSE); CHECK_VOID(ret, FAIL, "bv_set"); /* Now set the lower bit to 1. This should invalidate the cached value. */ ret = bv_set(b, 5, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* See if we can find the remaining 0 */ bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 13, "bv_find_next_zero"); MESSAGE(8, printf("Remaining 0 found at: %" PRId32 "\n", bit_num);); /* Reset the zero bits */ ret = bv_set(b, 13, BV_FALSE); CHECK_VOID(ret, FAIL, "bv_set"); ret = bv_set(b, 5, BV_FALSE); CHECK_VOID(ret, FAIL, "bv_set"); /* Now set the higher bit to 1, just to make sure this order works */ ret = bv_set(b, 13, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* See if we can find the remaining 0 */ bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 5, "bv_find_next_zero"); MESSAGE(8, printf("Remaining 0 found at: %" PRId32 "\n", bit_num);); /* Now set remaining bit to 1 */ ret = bv_set(b, 5, BV_TRUE); CHECK_VOID(ret, FAIL, "bv_set"); /* The next bit should extend the array */ bit_num = bv_find_next_zero(b); CHECK_VOID(bit_num, FAIL, "bv_find_next_zero"); VERIFY_VOID(bit_num, 16, "bv_find_next_zero"); MESSAGE(8, printf("Remaining 0 found at: %" PRId32 "\n", bit_num);); ret = bv_delete(b); CHECK_VOID(ret, FAIL, "bv_delete"); } /* end test_4 */ void test_bitvect(void) { test_1(); /* basic creation & deletion tests */ test_2(); /* basic set & get testing */ test_3(); /* advanced set & get testing */ test_4(); /* pathological set & find testing */ } hdf4-hdf4.3.1/hdf/test/tdatainfo.c000066400000000000000000001722451503061704500166770ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tdatainfo.c - tests the functions VSgetdatainfo, ANgetdatainfo, * GRgetdatainfo, and Hgetntinfo * Structure of the file: * test_datainfo - test driver * test_simple_vs - test VSgetdatainfo with data stored in one * contiguous block * test_append_vs - test VSgetdatainfo with data stored in linked blocks * test_annotation - test ANgetdatainfo * test_oneblock_ri - test GRgetdatainfo with images stored in one * contiguous block, with and without compression * test_dfr8_24 - test GRgetdatainfo with RI8 and RI24 * test_getntinfo - test Hgetntinfo ****************************************************************************/ #include "hdf.h" #include "tdatainfo.h" #include "tproto.h" static void test_simple_vs(); static void test_append_vs(); static void test_annotation(); static void test_oneblock_ri(); static void test_dfr8_24(); static void test_getntinfo(); static void test_getpalinfo(); /*********************************************************************** NOTE: At this time, some of the offsets in these tests are verified by hard-coding. When adding new data to the files in exiting tests, please either add data at the bottom of the files or change the hard-coded offsets appropriately, using the values from the error messages. However, you'll need to verify the correctness of these values first using the command 'od' on the hdf file. *************************************************************************/ /* Structure to hold annotation datainfo temporarily */ typedef struct { char anntext[100]; /* values of the annotation */ int32 offset; /* offset of data block */ int32 length; /* length of data block */ } t_ann_info_t; /* Functions to access t_hdfdatainfo_t, defined in ./tdatainfo.h */ /* alloc_info is a utility function that allocates t_hdf_datainfo_t's members*/ intn alloc_info(t_hdf_datainfo_t *info, uintn info_count) { info->offsets = (int32 *)malloc(info_count * sizeof(int32)); if (info->offsets == NULL) return -1; info->lengths = (int32 *)malloc(info_count * sizeof(int32)); if (info->lengths == NULL) return -1; return 0; } void free_info(t_hdf_datainfo_t *info) { if (info != NULL) { free(info->offsets); free(info->lengths); } } /**************************************************************************** Name: test_simple_vs() - tests non-special Vdatas Description: This routine creates and writes contiguous data to vdatas and verifies some data and data information with VSgetdatainfo. The tests include the following vdatas: - a single field vdata with int32 values - a multiple field/multiple order vdata with all int32 values - a single field vdata with character values Only the character vdata's values are verified against the original buffer. The other two were verified by examining the hdf file using od. (Todo 1) BMR - Jul 2010 ****************************************************************************/ #define SIMPLE_FILE "tdatainfo_simple.hdf" /* data file */ #define NONSPECIAL_VS "Non-Special Vdata" #define CONTCLASS_NAME "Contiguous Vdata" #define LINKED_BLOCK "Linked-block Vdata" #define FIELD1_NAME "Field1" /* contains three integers */ #define FIELD2_NAME "Field2" /* contains one integer */ #define FIELD3_NAME "Field3" /* contains two integers */ #define FIELD_NAME_LIST "Field1,Field2,Field3" #define ORDER_1 3 /* order of first field of 1st vdata */ #define ORDER_2 1 /* order of second field of 1st vdata */ #define ORDER_3 2 /* order of third field of 1st vdata */ #define BLOCK_SIZE 80 /* arbitrary number for block size */ #define NUM_BLOCKS 8 /* arbitrary number for number of blocks */ #define N_VALS_PER_REC_1 1 /* # of values per record in single vdata */ #define N_VALS_PER_REC_2 (ORDER_1 + ORDER_2 + ORDER_3) /* # of vals/rec. in multiple vdata */ #define N_RECORDS \ 5 /* number of records to be written to the \ vdatas at every write */ static void test_simple_vs() { int32 fid, /* File ID */ vsid, /* Vdata ID */ vs_ref, /* Vdata ref# */ n_records, /* number of records actually written to vdata */ data_buf0[N_RECORDS][N_VALS_PER_REC_1], /* for single vdata's data */ data_buf1[N_RECORDS][N_VALS_PER_REC_2]; /* for multiple vdata's data*/ char data_buf2[N_RECORDS] = {'H', '4', 'M', 'A', 'P'}; int16 rec_num; /* current record number */ int32 offset, length; /* offset/length buffers for single block of data */ intn n_blocks; /* number of blocks a vdata has */ int32 status; /* Status values from routines */ intn status_n; /* Status values from routines */ /* Open the HDF file and initialize the interface. */ fid = Hopen(SIMPLE_FILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create and write to the first vdata using high-level func VHstoredata */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) data_buf0[rec_num][0] = 5 + rec_num; vs_ref = VHstoredata(fid, "Only field", (const uint8 *)data_buf0, N_RECORDS, DFNT_INT32, "One Field One Order", CONTCLASS_NAME); /* * Get access to the vdata just created then get and verify offset/length * of its data */ vsid = VSattach(fid, vs_ref, "w"); CHECK_VOID(vsid, FAIL, "VSattach"); /* Get the number of data blocks first, should be 1 */ n_blocks = VSgetdatainfo(vsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 1, "VSgetdatainfo"); /* Get the offset/length of the data, should be 294/20 */ n_blocks = VSgetdatainfo(vsid, 0, n_blocks, &offset, &length); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); /* Verify offset/length */ VERIFY_VOID(offset, 294, "VSgetdatainfo offset from 'One Field One Order'"); VERIFY_VOID(length, 20, "VSgetdatainfo length from 'One Field One Order'"); status = VSdetach(vsid); CHECK_VOID(status, FAIL, "VSdetach"); /* * Create a multi-field/multi-order vdata, named NONSPECIAL_VS, in class * CONTCLASS_NAME, write data to it, then get and verify its data's * offsets/lengths */ vsid = VSattach(fid, -1, "w"); CHECK_VOID(vsid, FAIL, "VSattach"); /* Set name and class name of the vdata. */ status = VSsetname(vsid, NONSPECIAL_VS); CHECK_VOID(status, FAIL, "VSsetname"); status = VSsetclass(vsid, CONTCLASS_NAME); CHECK_VOID(status, FAIL, "VSsetclass"); /* Record its reference number for later access before detaching it */ vs_ref = VSQueryref(vsid); CHECK_VOID(vs_ref, FAIL, "VSQueryref"); status = VSdetach(vsid); CHECK_VOID(status, FAIL, "VSdetach"); /* Attach to vdata NONSPECIAL_VS to write data, but first verify that number of data blocks is 0 */ vsid = VSattach(fid, vs_ref, "w"); CHECK_VOID(vsid, FAIL, "VSattach"); n_blocks = VSgetdatainfo(vsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 0, "VSgetdatainfo"); /* Define the fields in the vdata */ status_n = VSfdefine(vsid, FIELD1_NAME, DFNT_INT32, ORDER_1); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vsid, FIELD2_NAME, DFNT_INT32, ORDER_2); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vsid, FIELD3_NAME, DFNT_INT32, ORDER_3); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSsetfields(vsid, FIELD_NAME_LIST); CHECK_VOID(status_n, FAIL, "VSsetfields"); /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf1[rec_num][0] = 2; /* easier to inspect the binary file using */ data_buf1[rec_num][1] = 2; /* a simple value */ data_buf1[rec_num][2] = 2; data_buf1[rec_num][3] = 2; data_buf1[rec_num][4] = 2; data_buf1[rec_num][5] = 2; /* data_buf1[rec_num][0] = 1 + rec_num; data_buf1[rec_num][1] = 2 + rec_num; data_buf1[rec_num][2] = 3 + rec_num; data_buf1[rec_num][3] = 10 + rec_num; data_buf1[rec_num][4] = 10; data_buf1[rec_num][5] = 65; */ } /* Set the block size and the number of blocks */ status_n = VSsetblocksize(vsid, BLOCK_SIZE); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); status_n = VSsetnumblocks(vsid, NUM_BLOCKS); CHECK_VOID(status_n, FAIL, "VSsetnumblocks"); /* Write the data from data_buf1 to the non special vdata */ n_records = VSwrite(vsid, (uint8 *)data_buf1, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(n_records, N_RECORDS, "VSwrite"); n_blocks = VSgetdatainfo(vsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 1, "VSgetdatainfo"); n_blocks = VSgetdatainfo(vsid, 0, n_blocks, &offset, &length); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); /* Verify offset/length */ VERIFY_VOID(offset, 456, "VSgetdatainfo offset from NONSPECIAL_VS"); VERIFY_VOID(length, 120, "VSgetdatainfo length from NONSPECIAL_VS"); status_n = VSdetach(vsid); CHECK_VOID(status_n, FAIL, "VSdetach"); /* Create and write to another simple vdata, named 'Characters Only', in class CONTCLASS_NAME */ vs_ref = VHstoredata(fid, "Only field", (const uint8 *)data_buf2, N_RECORDS, DFNT_CHAR, "Characters Only", CONTCLASS_NAME); CHECK_VOID(vs_ref, FAIL, "VHstoredata"); /* Attach to vdata 'Characters Only' and get offset and length of its data */ vsid = VSattach(fid, vs_ref, "r"); n_blocks = VSgetdatainfo(vsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 1, "VSgetdatainfo NONSPECIAL_VS"); /* Get offset/length */ n_blocks = VSgetdatainfo(vsid, 0, n_blocks, &offset, &length); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); /* Close everything */ status = VSdetach(vsid); CHECK_VOID(status, FAIL, "VSdetach"); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); /* Open the file with fopen, read data at the offset obtained and verify the values */ status_n = readnoHDF_char(SIMPLE_FILE, offset, length, data_buf2); if (status_n == FAIL) fprintf(stderr, "Attempt reading data without HDF4 library failed at line %d\n", __LINE__); } /* test_simple_vs() */ /**************************************************************************** Name: test_append_vs() - tests Vdatas with linked-blocks Description: This routine creates and writes data to an appendable vdata and verifies its data information with VSgetdatainfo. The tests include the following: - create and write to an appendable vdata - create and write to a simple vdata - add data to the appendable vdata - use VSgetdatainfo to get offsets/lengths of the linked-blocks of data BMR - Jul 2010 ****************************************************************************/ #define APPEND_FILE "tdatainfo_linkblock.hdf" /* data file */ #define APPENDABLE_VD "Appendable Vdata" static void test_append_vs() { int32 fid; /* file ID */ int32 apvsid; /* vdata IDs */ int32 vs1_ref, /* vdata ref# */ n_records, /* number of records written to vdata */ data_buf0[N_RECORDS][N_VALS_PER_REC_1], /* for "Very Simple Vdata" */ data_buf1[N_RECORDS][N_VALS_PER_REC_2]; /* for first vdata's data */ int16 rec_num; /* current record number */ intn n_blocks; t_hdf_datainfo_t vs_info; int32 status; /* Status values from routines */ intn status_n; /* Status values from routines */ /* Open the HDF file. */ fid = Hopen(APPEND_FILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* Create the first vdata */ apvsid = VSattach(fid, -1, "w"); CHECK_VOID(apvsid, FAIL, "VSattach"); vs1_ref = VSQueryref(apvsid); CHECK_VOID(vs1_ref, FAIL, "VSQueryref:apvsid"); status = VSdetach(apvsid); CHECK_VOID(status, FAIL, "VSdetach"); apvsid = VSattach(fid, vs1_ref, "w"); CHECK_VOID(apvsid, FAIL, "VSattach"); /* Set name and class name of the vdata. */ status = VSsetname(apvsid, APPENDABLE_VD); CHECK_VOID(status, FAIL, "VSsetname"); status = VSsetclass(apvsid, LINKED_BLOCK); CHECK_VOID(status, FAIL, "VSsetclass"); n_blocks = VSgetdatainfo(apvsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 0, "VSgetdatainfo"); /* Introduce each field's name, data type, and order. This is the first part in defining a field. */ status_n = VSfdefine(apvsid, FIELD1_NAME, DFNT_INT32, ORDER_1); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(apvsid, FIELD2_NAME, DFNT_INT32, ORDER_2); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(apvsid, FIELD3_NAME, DFNT_INT32, ORDER_3); CHECK_VOID(status_n, FAIL, "VSfdefine"); /* Finalize the definition of the fields. */ status_n = VSsetfields(apvsid, FIELD_NAME_LIST); CHECK_VOID(status_n, FAIL, "VSsetfields"); /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf1[rec_num][0] = 5; /* easier to inspect the bin file */ data_buf1[rec_num][1] = 5; data_buf1[rec_num][2] = 5; data_buf1[rec_num][3] = 5; data_buf1[rec_num][4] = 5; data_buf1[rec_num][5] = 5; /* data_buf1[rec_num][0] = 1 + rec_num; data_buf1[rec_num][1] = 2 + rec_num; data_buf1[rec_num][2] = 3 + rec_num; data_buf1[rec_num][3] = 10 + rec_num; data_buf1[rec_num][4] = 10; data_buf1[rec_num][5] = 65; */ } /* Set the block size and the number of blocks the first vdata */ status_n = VSsetblocksize(apvsid, BLOCK_SIZE); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); status_n = VSsetnumblocks(apvsid, NUM_BLOCKS); CHECK_VOID(status_n, FAIL, "VSsetnumblocks"); /* Write the data from data_buf1 to vdata APPENDABLE_VD the first time */ n_records = VSwrite(apvsid, (uint8 *)data_buf1, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(n_records, N_RECORDS, "VSwrite"); n_blocks = VSgetdatainfo(apvsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); /* Allocate space to record the vdata's data info */ if (alloc_info(&vs_info, n_blocks) == -1) exit(1); /* Get offset and lengths of the data */ n_blocks = VSgetdatainfo(apvsid, 0, n_blocks, vs_info.offsets, vs_info.lengths); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); free_info(&vs_info); /* Get the reference number of this vdata for later use */ vs1_ref = VSQueryref(apvsid); CHECK_VOID(vs1_ref, FAIL, "VSQueryref"); /* Make another simple vdata to cause linked-blocks */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) data_buf0[rec_num][0] = 10 + rec_num; /* Create and write to another very simple vdata */ VHstoredata(fid, "Field 1", (const uint8 *)data_buf0, N_RECORDS, DFNT_INT32, "Another One Field One Order", "Very Simple Vdata"); /* Make up the second batch of data for the appendable vdata */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf1[rec_num][0] = 100 + rec_num; data_buf1[rec_num][1] = 200 + rec_num; data_buf1[rec_num][2] = 300 + rec_num; data_buf1[rec_num][3] = 1000 + rec_num; data_buf1[rec_num][4] = 1000; data_buf1[rec_num][5] = 6500; } /* Write the data to vdata APPENDABLE_VD the second time */ n_records = VSwrite(apvsid, (uint8 *)data_buf1, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(n_records, N_RECORDS, "VSwrite"); /* Detach this vdata and attach to it again, just to make sure meta-data is recorded; it may not be necessary but it doesn't hurt */ status = VSdetach(apvsid); CHECK_VOID(status, FAIL, "VSdetach"); apvsid = VSattach(fid, vs1_ref, "w"); CHECK_VOID(apvsid, FAIL, "VSattach"); /* Get the number of data blocks the vdata currently has */ n_blocks = VSgetdatainfo(apvsid, 0, 0, NULL, NULL); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); VERIFY_VOID(n_blocks, 3, "VSgetdatainfo"); /* Allocate space to record the vdata's data info */ if (alloc_info(&vs_info, n_blocks) == -1) exit(1); /* Record various info to be used in verifying data later */ vs_info.n_values = 30; vs_info.numtype = DFNT_INT32; /* Get and verify offsets and lengths of data */ n_blocks = VSgetdatainfo(apvsid, 0, n_blocks, vs_info.offsets, vs_info.lengths); CHECK_VOID(n_blocks, FAIL, "VSgetdatainfo"); { int ii; int32 check_offsets[] = {294, 556, 636}; int32 check_lengths[] = {120, 80, 40}; /* last chunk is not completely filled */ for (ii = 0; ii < n_blocks; ii++) { VERIFY_VOID(vs_info.offsets[ii], check_offsets[ii], "VSgetdatainfo offset"); VERIFY_VOID(vs_info.lengths[ii], check_lengths[ii], "VSgetdatainfo length"); } } /* Verifying data read without HDF4 library */ /* NOT YET */ /* Release memory */ free_info(&vs_info); /* Close everything */ status = VSdetach(apvsid); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_append_vs */ /******************************************************************* Name: readnoHDF_char - utility routine to read and verify character data without HDF4 library Description: readnoHDF_char opens the file and reads in data at the specified offset. The read data is compared against the original data passed by caller. If any mismatch occurs, an error message will be displayed but the process will continue. Parameters: char *filename IN: name of the file int32 offset IN: where to start read data int32 length IN: how long to read the data Return value: SUCCEED/FAIL BMR - Jul 2010 ********************************************************************/ intn readnoHDF_char(const char *filename, const int32 offset, const int32 length, const char *orig_buf) { FILE *fd; /* file descriptor */ size_t readlen = 0; /* number of bytes actually read */ char *readcbuf; intn ret_value = SUCCEED; /* Open the file for reading without SD API */ fd = fopen(filename, "r"); if (fd == NULL) { fprintf(stderr, "readnoHDF_char: unable to open file %s", filename); ret_value = FAIL; } /* Forward to the position of the first block of data */ if (fseek(fd, (off_t)offset, SEEK_SET) == -1) { fprintf(stderr, "readnoHDF_char: unable to seek offset %d\n", (int)offset); ret_value = FAIL; } /* Allocate buffers for SDS' data */ readcbuf = (char *)malloc(length * sizeof(char)); if (readcbuf == NULL) { fprintf(stderr, "readnoHDF_char: allocation readcbuf failed\n"); ret_value = FAIL; } /* Read in this block of data */ readlen = fread((void *)readcbuf, 1, length, fd); if (readlen > 0) { /* Compare data read without HDF4 lib against the original buffer */ if (strncmp(readcbuf, orig_buf, readlen) != 0) fprintf(stderr, "Failure: non-HDF reading got different values than written values\n >>> written = " "%s\n >>> read = %s\n", orig_buf, readcbuf); } free(readcbuf); /* Close the file */ if (fclose(fd) == -1) { fprintf(stderr, "readnoHDF_char: unable to close file %s", filename); ret_value = FAIL; } return ret_value; } /******************************************************************* Name: get_annot_datainfo - utility routine to get datainfo of an annotation Description: get_annot_datainfo gets access to each annotation, then attempts to get the offset/length of its data. If successful, increment the data info count and eventually returns that number to caller. If failure occurs, simply return FAIL and all the previous data info will be discarded by the caller. Parameters: int32 an_id IN: annotation ID ann_type annot_type IN: type of the annotations int32 num_anns IN: number of annotations of the specified type, currently only 1, but will be adjusted after the last parameter become arrays of strings t_ann_info_t *ann_info OUT: structure that holds ann data info intn ann_info_num IN: indicates where in ann_info to start storing info char* ann_text IN: text of the annotation (this will be changed to array of strings when time permits) Return value: The number of annotations whose data info is successfully retrieved and stored in ann_info or FAIL if failure occurs. ********************************************************************/ intn get_annot_datainfo(int32 an_id, ann_type annot_type, int32 num_anns, t_ann_info_t *ann_info, intn ann_info_num, char *ann_text) { int32 ann_id, ann_index; intn status_n, ret_value = 0; /* Get the annotation. */ for (ann_index = 0; ann_index < num_anns; ann_index++) { /* Get the identifier of the current annotation. */ ann_id = ANselect(an_id, ann_index, annot_type); CHECK(ann_id, FAIL, "ANselect"); /* Get annotation's data info. */ status_n = ANgetdatainfo(ann_id, &ann_info[ann_info_num].offset, &ann_info[ann_info_num].length); CHECK(status_n, FAIL, "ANgetdatainfo"); /* Store annotation text for later checking against data read from the file without HDF4 library */ strcpy(ann_info[ann_info_num].anntext, ann_text); /* Terminate access to the current annotation. */ status_n = ANendaccess(ann_id); CHECK(status_n, FAIL, "ANendaccess"); /* Number of annotations whose datainfo is retrieved */ ret_value++; } return ret_value; } /* get_annot_datainfo */ /**************************************************************************** Name: test_annotation() - tests getting data info of annotations Description: This routine tests getting data info of file label and description, and data label and description. - add a file label and a file description - create a vgroup then add a data label and a data description to it - use the utility routine get_annot_datainfo to record the offset, length, and annotation text - use utility routine readnoHDF_char to read the annotation text without the use of the HDF4 library and verify the correctness of the read data Todo 2: Should add more annotations so there will be multiple annots for an object or file. get_annot_datainfo needs to be fixed to accommodate this. BMR - Aug 2010 NOTE: It is near the end of H4 Mapping project and Ruth had said there were no annotation for Vgroup and Vdata, so the continuation of these tests is not that critical anymore. For SDS, SDgetanndatainfo handles annotations already. BMR - Jan 2011 ****************************************************************************/ #define ANNOT_FILE "tdatainfo_annot.hdf" /* data file */ #define VG_NAME "AN Vgroup" #define FILE_LABEL_TXT "General HDF objects" #define FILE_DESC_TXT "This is an HDF file that contains general HDF objects" #define DATA_LABEL_TXT "Common AN Vgroup" #define DATA_DESC_TXT "This is a vgroup that is used to test data annotations" static void test_annotation() { int32 fid, /* file ID */ an_id, /* AN interface ID */ file_label_id, /* file label ID */ file_desc_id, /* file description ID */ data_label_id, /* data label ID */ data_desc_id, /* data description ID */ vgroup_id; /* vgroup ID */ uint16 vgroup_tag, vgroup_ref; /* vgroup tag/ref */ t_ann_info_t ann_info[4]; /* temporary storage of annotation info */ intn status_n; /* returned status for functions returning an intn */ int32 status; /* returned status for functions returning an int32 */ /* Create the HDF file. */ fid = Hopen(ANNOT_FILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the AN interface. */ an_id = ANstart(fid); CHECK_VOID(an_id, FAIL, "ANstart"); /* Create and write a file label. */ file_label_id = ANcreatef(an_id, AN_FILE_LABEL); CHECK_VOID(file_label_id, FAIL, "ANcreatef"); status = ANwriteann(file_label_id, FILE_LABEL_TXT, strlen(FILE_LABEL_TXT)); CHECK_VOID(status, FAIL, "ANwriteann"); /* Create and write a file description. */ file_desc_id = ANcreatef(an_id, AN_FILE_DESC); CHECK_VOID(file_desc_id, FAIL, "ANcreatef"); status = ANwriteann(file_desc_id, FILE_DESC_TXT, strlen(FILE_DESC_TXT)); CHECK_VOID(status, FAIL, "ANwriteann"); /* Create a vgroup to add annotation to it. */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach"); status = Vsetname(vgroup_id, VG_NAME); CHECK_VOID(status, FAIL, "Vsetname"); /* Get the tag and ref number of the vgroup for ANcreate. */ vgroup_tag = (uint16)VQuerytag(vgroup_id); CHECK_VOID(vgroup_tag, 0, "VQuerytag"); vgroup_ref = (uint16)VQueryref(vgroup_id); CHECK_VOID(vgroup_ref, 0, "VQueryref"); /* Add a data label to the vgroup. */ data_label_id = ANcreate(an_id, vgroup_tag, vgroup_ref, AN_DATA_LABEL); CHECK_VOID(data_label_id, FAIL, "ANcreate"); status = ANwriteann(data_label_id, DATA_LABEL_TXT, strlen(DATA_LABEL_TXT)); CHECK_VOID(status, FAIL, "ANwriteann"); /* Add a data description to the vgroup. */ data_desc_id = ANcreate(an_id, vgroup_tag, vgroup_ref, AN_DATA_DESC); CHECK_VOID(data_desc_id, FAIL, "ANcreate"); status = ANwriteann(data_desc_id, DATA_DESC_TXT, strlen(DATA_DESC_TXT)); CHECK_VOID(status, FAIL, "ANwriteann"); /* Terminate access to each annotation. */ status_n = ANendaccess(file_label_id); CHECK_VOID(status_n, FAIL, "ANendaccess"); status_n = ANendaccess(file_desc_id); CHECK_VOID(status_n, FAIL, "ANendaccess"); status_n = ANendaccess(data_label_id); CHECK_VOID(status_n, FAIL, "ANendaccess"); status_n = ANendaccess(data_desc_id); CHECK_VOID(status_n, FAIL, "ANendaccess"); /* Terminate access to the vgroup and to the V interface. */ status = Vdetach(vgroup_id); status_n = Vend(fid); /* Terminate access to the AN interface and close the HDF file. */ status = ANend(an_id); CHECK_VOID(status, FAIL, "ANend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); /* Open the file and read in location/size of all annotations */ { int32 ann_index, /* annotation index */ n_file_labels, /* numbers of file labels */ n_file_descs, /* numbers of file descs */ n_data_labels, /* numbers of data labels */ n_data_descs; /* numbers of data descs */ intn num_anns = 0, ann_info_num = 0; /* Open the file. */ fid = Hopen(ANNOT_FILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the AN interface. */ an_id = ANstart(fid); CHECK_VOID(an_id, FAIL, "ANstart"); /* Get the number of data/file labels/descriptions */ status_n = ANfileinfo(an_id, &n_file_labels, &n_file_descs, &n_data_labels, &n_data_descs); CHECK_VOID(status_n, FAIL, "ANfileinfo"); VERIFY_VOID(n_file_labels, 1, "ANfileinfo"); VERIFY_VOID(n_file_descs, 1, "ANfileinfo"); VERIFY_VOID(n_data_labels, 1, "ANfileinfo"); VERIFY_VOID(n_data_descs, 1, "ANfileinfo"); /* Get access to each annotation then call ANgetdatainfo to retrieve the offset/length of the annotation data */ /* Explanation of some parameters to get_annot_datainfo: 3rd parameter - number of annotations of the specified type, currently only 1, but will adjust the last parameter to have arrays of character strings when have time. 4th parameter - ann_info_num indicates where in ann_info to start storing info */ /* AN_DATA_LABEL */ num_anns = get_annot_datainfo(an_id, AN_DATA_LABEL, 1, ann_info, ann_info_num, DATA_LABEL_TXT); CHECK_VOID(num_anns, FAIL, "get_annot_datainfo"); VERIFY_VOID(num_anns, 1, "get_annot_datainfo"); ann_info_num = ann_info_num + num_anns; /* AN_DATA_DESC */ num_anns = get_annot_datainfo(an_id, AN_DATA_DESC, 1, ann_info, ann_info_num, DATA_DESC_TXT); CHECK_VOID(num_anns, FAIL, "get_annot_datainfo"); VERIFY_VOID(num_anns, 1, "get_annot_datainfo"); ann_info_num = ann_info_num + num_anns; /* AN_FILE_LABEL */ num_anns = get_annot_datainfo(an_id, AN_FILE_LABEL, 1, ann_info, ann_info_num, FILE_LABEL_TXT); CHECK_VOID(num_anns, FAIL, "get_annot_datainfo"); VERIFY_VOID(num_anns, 1, "get_annot_datainfo"); ann_info_num = ann_info_num + num_anns; /* AN_FILE_DESC */ num_anns = get_annot_datainfo(an_id, AN_FILE_DESC, 1, ann_info, ann_info_num, FILE_DESC_TXT); CHECK_VOID(num_anns, FAIL, "get_annot_datainfo"); VERIFY_VOID(num_anns, 1, "get_annot_datainfo"); ann_info_num = ann_info_num + num_anns; /* Terminate access to the AN interface and close the HDF file. */ status = ANend(an_id); CHECK_VOID(status, FAIL, "ANend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); /* calling readnoHDF_char to verify data without the use of HDF lib */ for (ann_index = 0; ann_index < ann_info_num; ann_index++) { /* Open the file with fopen, read data at the offset obtained and verify the values */ status_n = readnoHDF_char(ANNOT_FILE, ann_info[ann_index].offset, ann_info[ann_index].length, ann_info[ann_index].anntext); if (status_n == FAIL) fprintf(stderr, "Attempt reading data without HDF4 library failed at line %d\n", __LINE__); } } } /* test_annotation */ /**************************************************************************** Name: test_oneblock_ri() - tests non-linked-block images Description: This routine creates and writes data to images and verifies some data and data information with GRgetdatainfo. The tests include the following images: - a simple, non-compressed image - three images with RLE, Skipping-Huffman, and Deflate compression Only the non-compressed image's values are verified against the original buffer. The other three were verified by debugging, additional decompression code needed for further verification (Todo 2) Note: Incomplete, waiting for schema design BMR - Aug 2010 ****************************************************************************/ #define IMAGE_FILE "tdatainfo_images.hdf" /* data file */ #define NONCOMP_IMAGE "Image with No Compression" #define RLE_IMAGE "Image with RLE Compression" #define DEFLATE_IMAGE "Image with Deflate Compression" #define SKPHUFF_IMAGE "Image with Skphuff Compression" #define JPEG_IMAGE "Image with JPEG Compression" #define SKPHUFF_SKIPSIZE 28 #define DEFLATE_LEVEL 7 #define WIDTH 5 #define LENGTH 5 #define N_IMAGES 4 /* Convenient function to create and write to an image, used by test_oneblock_ri */ static intn make_comp_image(int32 grid, char *img_name, char start_char, /* first value in the image, for variety of data */ int32 comp_type, /* compression method */ comp_info *cinfo) /* compression parameters */ { int32 riid; /* raster image ID */ int32 dims[2] = {WIDTH, LENGTH}; /* dimensions for the image */ char image0[WIDTH][LENGTH]; /* image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ intn ii, jj; /* indices */ intn status; /* generic return value */ intn ret_value = SUCCEED; /* Initialize data we are going to write out, each image created by this convenient function will use the same data pattern with the first value given by the caller */ for (ii = 0; ii < WIDTH; ii++) for (jj = 0; jj < LENGTH; jj++) image0[ii][jj] = start_char + jj; /* Create the image with 1 component, type char, pixel interlace, and dimension WIDTHxLENGTH */ riid = GRcreate(grid, img_name, 1, DFNT_CHAR, MFGR_INTERLACE_PIXEL, dims); CHECK(riid, FAIL, "GRcreate"); /* Set compression as instructed */ if (comp_type != COMP_CODE_NONE) { status = GRsetcompress(riid, comp_type, cinfo); CHECK(status, FAIL, "GRsetcompress"); } /* Write the entire image data out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; status = GRwriteimage(riid, start, stride, dims, image0); CHECK(status, FAIL, "GRreadimage"); /* Close the first image */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); return ret_value; } static void test_oneblock_ri() { int32 fid, grid, /* file ID and GR interface ID */ riid; /* raster image ID */ int32 offset, length; /* offset/length buffers for single block of data */ intn status; /* status returned from routines */ intn ii; /* indices */ int32 n_images, n_fattrs; comp_info cinfo; /* Compression parameters - union */ /* offsets/lengths to be used to verify offsets/lengths returned by GRgetdatainfo - confirmed by the command "od" on the hdf file */ static int32 image_data_offsets[N_IMAGES] = {309, 363, 426, 486}; static int32 image_data_lengths[N_IMAGES] = {25, 26, 29, 16}; /**************************************************************** Create a file in GR interface then create and write several images with and without compression. ****************************************************************/ /* Create the HDF file and initialize the interface. */ fid = Hopen(IMAGE_FILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Create and write the non-compressed image to this file */ status = make_comp_image(grid, NONCOMP_IMAGE, 'n', COMP_CODE_NONE, &cinfo); /* Create and write 3 more images: RLE, Deflate, and Skipping Huffman */ /* No compression info for the RLE image */ memset(&cinfo, 0, sizeof(cinfo)); /* Create and write the RLE compressed image to this file, starting the data values with the letter 'r' */ status = make_comp_image(grid, RLE_IMAGE, 'r', COMP_CODE_RLE, &cinfo); /* Set the compression info for the image with Skipping Huffman method */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.skphuff.skp_size = SKPHUFF_SKIPSIZE; /* Create and write the Skipping Huffman compressed image to this file, starting the data values with the letter 's' */ status = make_comp_image(grid, SKPHUFF_IMAGE, 's', COMP_CODE_SKPHUFF, &cinfo); /* Set the compression info for the image with Deflate method */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.deflate.level = DEFLATE_LEVEL; /* Create and write the Deflate compressed image to this file, starting the data values with the letter 'd' */ status = make_comp_image(grid, DEFLATE_IMAGE, 'd', COMP_CODE_DEFLATE, &cinfo); /* Set the compression method for the image with JPEG method */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.jpeg.quality = 100; cinfo.jpeg.force_baseline = 1; /* Create and write the JPEG compressed image to this file, starting the data values with the letter 'j' - more work to be done for JPEG */ /* status = make_comp_image(grid, JPEG_IMAGE, 'j', COMP_CODE_JPEG, &cinfo); */ /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /**************************************************************** Re-open the file to read the images and their data information ****************************************************************/ /* Re-open the file and initialize the GR interface */ fid = Hopen(IMAGE_FILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Get the number of images in the file */ status = GRfileinfo(grid, &n_images, &n_fattrs); CHECK_VOID(status, FAIL, "GRfileinfo"); VERIFY_VOID(n_images, N_IMAGES, "GRfileinfo"); /* Open each image then get and verify its data information. Note that currently, the offsets and lengths are obtained from debugging and the command od on the file */ for (ii = 0; ii < n_images; ii++) { riid = GRselect(grid, ii); CHECK_VOID(riid, FAIL, "GRselect"); status = GRgetdatainfo(riid, 0, 1, &offset, &length); CHECK_VOID(status, FAIL, "GRgetdatainfo"); VERIFY_VOID(offset, image_data_offsets[ii], "GRgetdatainfo"); VERIFY_VOID(length, image_data_lengths[ii], "GRgetdatainfo"); /* Only verify data of the first image, which has non-compressed data. */ if (ii == 0) { intn jj, kk; char buffer[WIDTH][LENGTH], check_image[WIDTH * LENGTH]; for (kk = 0; kk < WIDTH; kk++) for (jj = 0; jj < LENGTH; jj++) buffer[kk][jj] = 'n' + jj; /* Work around to pass check_image into readnoHDF_char w/o warning*/ memcpy(check_image, buffer, WIDTH * LENGTH); /* Open the file with fopen, read data at the offset obtained and verify the values */ status = readnoHDF_char(IMAGE_FILE, offset, length, check_image); if (status == FAIL) fprintf(stderr, "Attempt reading data without HDF4 library failed at line %d\n", __LINE__); } /* Close the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /* for n_images */ /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* end test_oneblock_ri */ #define IMAGE_DF_FILE "tdatainfo_dfri.hdf" /* data file for DFR APIs */ #define N_DF_IMAGES \ 2 /* number of DF images in the file, 1 RI8 & \ 1 RI24 */ static void test_dfr8_24() { int32 fid, grid, /* file ID and GR interface ID */ riid; /* raster image ID */ int32 offset, length; /* offset/length buffers for single block of data */ intn status; /* status returned from routines */ intn ii, jj; /* indices */ int32 n_images, n_fattrs; char buf[WIDTH][LENGTH][3]; /* offsets/lengths to be used to verify offsets/lengths returned by GRgetdatainfo - confirmed by the command "od" on the hdf file */ static int32 image_data_offsets[N_IMAGES] = {294, 1132}; static int32 image_data_lengths[N_IMAGES] = {30, 75}; /* Initialize the 8-bit image array */ static uint8 raster_data[WIDTH][LENGTH] = { {1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}, {1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}, {6, 4, 2, 0, 2}}; /* Write the 8-bit raster image to file */ status = DFR8putimage(IMAGE_DF_FILE, raster_data, WIDTH, LENGTH, COMP_RLE); /* Initialize the 24-bit image array */ for (ii = 0; ii < WIDTH; ii++) for (jj = 0; jj < LENGTH; jj++) { buf[ii][jj][0] = buf[ii][jj][1] = buf[ii][jj][2] = (char)(ii + jj); } /* Set interlace for the 24-bit RI */ status = DF24setil(DFIL_PIXEL); /* Make sure that no compression is being used - the variable Grcompr is global in dfgr.c so its value is inherited from other tests in the lib and causes this image to be compressed with JPEG unintentionally. We want to be able to see the data to verify it with "od" */ status = DF24setcompress(COMP_NONE, NULL); /* Write the 24-bit raster image to file */ status = DF24addimage(IMAGE_DF_FILE, &(buf[0][0][0]), WIDTH, LENGTH); /**************************************************************** Re-open the file to read the images and their data information ****************************************************************/ /* Re-open the file and initialize the GR interface */ fid = Hopen(IMAGE_DF_FILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Get the number of images in the file */ status = GRfileinfo(grid, &n_images, &n_fattrs); CHECK_VOID(status, FAIL, "GRfileinfo"); VERIFY_VOID(n_images, N_DF_IMAGES, "GRfileinfo"); /* Open each image then get and verify its data information. Note that currently, the offsets and lengths are obtained from debugging and the command od on the file */ for (ii = 0; ii < n_images; ii++) { int info_count = FAIL; riid = GRselect(grid, ii); CHECK_VOID(riid, FAIL, "GRselect"); /* Get the number of data blocks and verify; should be 1 */ info_count = GRgetdatainfo(riid, 0, 0, NULL, NULL); CHECK_VOID(info_count, FAIL, "GRgetdatainfo"); VERIFY_VOID(info_count, 1, "GRgetdatainfo"); /* Get offset/length of the image and verify with pre-determined values */ info_count = GRgetdatainfo(riid, 0, info_count, &offset, &length); CHECK_VOID(info_count, FAIL, "GRgetdatainfo"); VERIFY_VOID(offset, image_data_offsets[ii], "GRgetdatainfo"); VERIFY_VOID(length, image_data_lengths[ii], "GRgetdatainfo"); /* Close the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /* for n_images */ /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_dfr8_24 */ /************************************************************************* test_getpalinfo() - tests GRgetpalinfo Need documentation **************************************************************************/ #define IMAGE_DFPAL_FILE "tdatainfo_pal.hdf" #define IMAGE_WITH_PAL "GR Image with Palette" #define IMAGE2_WITH_PAL "Second GR Image w/pal" #define ANO_IMAGE_NAME "ANO_IMAGE_NAME" #define LASTIMAGE_NOPAL "Last GR Image: no pal" #define N_COMPS_IMG 2 /* number of image components */ #define N_ENTRIES 256 /* number of entries in the palette */ #define N_COMPS_PAL 3 /* number of palette's components */ static void test_getpalinfo() { int32 fid, grid, /* file ID and GR interface ID */ riid, palid, /* raster image ID and palette ID */ interlace_mode, start[2], /* where to start to write for each dimension */ edges[2], /* specifies how long to write for each dimension */ dim_sizes[2]; /* sizes of the two dimensions of the image array */ uint8 image_buf[WIDTH][LENGTH][N_COMPS_IMG]; /* data of raster image */ uint8 palette_buf1[N_ENTRIES][N_COMPS_PAL]; /* for LUT mostly */ uint8 palette_buf2[N_ENTRIES][N_COMPS_PAL]; uint8 paletteA[N_ENTRIES * N_COMPS_PAL] = {0}; /* for IP8 mostly */ uint8 paletteB[N_ENTRIES * N_COMPS_PAL] = {0}; uint8 paletteD[N_ENTRIES * N_COMPS_PAL] = {0}; intn n_pals = 0; /* number of palettes, returned by DFPnpals and GRgetpalinfo */ hdf_ddinfo_t *palinfo_array = NULL; /* list of palette DDs */ uint8 *inbuf; /* palette data read back in */ intn ii, jj; /* indices */ intn status; /* status returned from routines */ /* Initialize the 8-bit image array */ static uint8 raster_data[WIDTH][LENGTH] = { {1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}, {1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}, {6, 4, 2, 0, 2}}; /* Palettes are added in the following means and order: paletteA (DFPputpal) paletteB (DFPputpal) paletteA (DFR8setpalette/DFR8addimage) palette_buf1 (GRwritelut) for image named IMAGE_WITH_PAL palette_buf2 (GRwritelut) for image named IMAGE2_WITH_PAL paletteB (DFR8setpalette/DFR8addimage) paletteD (DFPputpal) paletteB (DFPputpal) paletteD (DFPputpal) palette_buf2 (GRwritelut) for image named IMAGE2_WITH_PAL paletteD (DFPputpal) */ /* Add two palettes with DFP API. */ status = DFPputpal(IMAGE_DFPAL_FILE, paletteA, 0, "w"); CHECK_VOID(status, FAIL, "DFPputpal"); status = DFPputpal(IMAGE_DFPAL_FILE, paletteB, 0, "a"); CHECK_VOID(status, FAIL, "DFPputpal"); n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 2, "DFPputpal"); /* 2 palettes from 2 DFPputpal's */ /* Specify palette to be used with subsequent 8-bit images */ status = DFR8setpalette(paletteA); CHECK_VOID(status, FAIL, "DFR8setpalette"); /* Write an 8-bit raster image to the file */ status = DFR8addimage(IMAGE_DFPAL_FILE, raster_data, WIDTH, LENGTH, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Get the number of palettes using DFP API */ n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 3, "DFPputpal"); /* 3 palettes: 2 DFPputpal's + DFR8setpalette/DFR8addimage combo */ /* Write another 8-bit raster image to file, without calling another DFR8setpalette, that means this image is using the same palette as the previous image. This is when only 201 is created */ status = DFR8addimage(IMAGE_DFPAL_FILE, raster_data, WIDTH, LENGTH, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Thus, the number of palettes returned by DFPnpals should be the same as from the last call to DFPnpals */ n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 3, "DFPputpal"); /**************************************************************** Re-open the file in GR interface, add a few images with palettes, then test GRgetpalinfo on the palettes ****************************************************************/ /* Re-open the file and initialize the GR interface */ fid = Hopen(IMAGE_DFPAL_FILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Define the dimensions and interlace mode of the image */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; interlace_mode = MFGR_INTERLACE_PIXEL; /* Create an image named IMAGE_WITH_PAL */ riid = GRcreate(grid, IMAGE_WITH_PAL, N_COMPS_IMG, DFNT_UINT8, interlace_mode, dim_sizes); /* Fill the image data buffer with values */ for (ii = 0; ii < WIDTH; ii++) { for (jj = 0; jj < LENGTH; jj++) { image_buf[ii][jj][0] = (ii + jj) + 1; image_buf[ii][jj][1] = (ii + jj) + 2; } } /* Define the size of the data to be written */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Write the data in the buffer into the image array */ status = GRwriteimage(riid, start, NULL, edges, (void *)image_buf); /* Initialize the palette data */ for (ii = 0; ii < N_ENTRIES; ii++) { palette_buf1[ii][0] = ii; palette_buf1[ii][1] = 0; palette_buf1[ii][2] = 8; } /* Get the identifier of the palette attached to the image IMAGE_WITH_PAL */ palid = GRgetlutid(riid, 0); /* Write data to the palette. */ status = GRwritelut(palid, N_COMPS_PAL, DFNT_UINT8, interlace_mode, N_ENTRIES, (void *)palette_buf1); /* DFPnpals now sees another palette */ n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 4, "DFPputpal"); /* Terminate access to the first image */ status = GRendaccess(riid); /* Create another image named IMAGE2_WITH_PAL */ riid = GRcreate(grid, IMAGE2_WITH_PAL, N_COMPS_IMG, DFNT_UINT8, interlace_mode, dim_sizes); /* Write the data in the buffer into the image array */ status = GRwriteimage(riid, start, NULL, edges, (void *)image_buf); /* Get the id of the palette attached to the image IMAGE2_WITH_PAL */ palid = GRgetlutid(riid, 0); /* Initialize the palette for second image */ for (ii = 0; ii < N_ENTRIES; ii++) { palette_buf2[ii][0] = 2; palette_buf2[ii][1] = 4; palette_buf2[ii][2] = 8; } /* Write data to the palette */ status = GRwritelut(palid, N_COMPS_PAL, DFNT_UINT8, interlace_mode, N_ENTRIES, (void *)palette_buf2); /* DFPnpals now sees another palette */ n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 5, "DFPputpal"); /* Terminate access to this image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); /* Create another image named LASTIMAGE_NOPAL */ riid = GRcreate(grid, LASTIMAGE_NOPAL, N_COMPS_IMG, DFNT_UINT8, interlace_mode, dim_sizes); CHECK_VOID(riid, FAIL, "GRcreate"); /* Write the data in the buffer into the image array */ status = GRwriteimage(riid, start, NULL, edges, (void *)image_buf); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); status = DFR8setpalette(paletteB); CHECK_VOID(status, FAIL, "DFR8setpalette"); /* Write another 8-bit raster image to file */ status = DFR8addimage(IMAGE_DFPAL_FILE, raster_data, WIDTH, LENGTH, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* DFR8setpalette/DFR8addimage just added another palette, so DFPnpals now returns 6 */ n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 6, "DFPputpal"); status = DFPputpal(IMAGE_DFPAL_FILE, paletteD, 0, "a"); CHECK_VOID(status, FAIL, "DFPputpal"); n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 7, "DFPnpals"); status = DFPputpal(IMAGE_DFPAL_FILE, paletteB, 0, "a"); CHECK_VOID(status, FAIL, "DFPputpal"); status = DFPputpal(IMAGE_DFPAL_FILE, paletteD, 0, "a"); CHECK_VOID(status, FAIL, "DFPputpal"); n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 9, "DFPputpal"); /* Create another image named ANO_IMAGE_NAME. */ riid = GRcreate(grid, ANO_IMAGE_NAME, N_COMPS_IMG, DFNT_UINT8, interlace_mode, dim_sizes); CHECK_VOID(riid, FAIL, "GRcreate"); /* Write the data in the buffer into the image array. */ status = GRwriteimage(riid, start, NULL, edges, (void *)image_buf); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Get the identifier of the palette attached to the image ANO_IMAGE_NAME */ palid = GRgetlutid(riid, 0); CHECK_VOID(palid, FAIL, "GRgetlutid"); /* Write data to the palette. */ status = GRwritelut(palid, N_COMPS_PAL, DFNT_UINT8, interlace_mode, N_ENTRIES, (void *)palette_buf2); n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 10, "DFPputpal"); status = GRendaccess(riid); status = DFPputpal(IMAGE_DFPAL_FILE, paletteD, 0, "a"); CHECK_VOID(status, FAIL, "DFPputpal"); n_pals = DFPnpals(IMAGE_DFPAL_FILE); CHECK_VOID(n_pals, FAIL, "DFPnpals"); VERIFY_VOID(n_pals, 11, "DFPputpal"); /* Assuming that this file has been written exactly in this manner, this is what the palette DDs would look like at this point: tag ref offset length 201 1 294 768 301 1 294 768 201 2 1062 768 301 2 1062 768 301 3 1860 768 201 3 1860 768 201 4 1860 768 301 4 2973 768 <- cannot be read by DFPgetpal 301 5 3806 768 <- cannot be read by DFPgetpal 301 8 4669 768 201 8 4669 768 201 5 5449 768 201 6 6217 768 301 6 6217 768 201 7 7183 768 301 7 7183 768 301 9 8016 768 <- cannot be read by DFPgetpal 201 9 8784 768 */ /* Read some palettes */ { /* Call GRgetpalinfo the first time, passing in NULL for the palette array, to get the number of palettes in the file */ n_pals = 0; n_pals = GRgetpalinfo(grid, 0, NULL); CHECK_VOID(n_pals, FAIL, "GRgetpalinfo"); palinfo_array = (hdf_ddinfo_t *)malloc(n_pals * sizeof(hdf_ddinfo_t)); CHECK_ALLOC(palinfo_array, "palinfo_array", "test_getpalinfo"); n_pals = GRgetpalinfo(grid, n_pals, palinfo_array); CHECK_VOID(n_pals, FAIL, "GRgetpalinfo"); /* Read and verify data of the first palette which is pointed to by both data identifiers 201/ref and 301/ref */ /* inbuf = (uint8 *) malloc(palinfo_array[0].length * sizeof(uint8)); */ inbuf = (uint8 *)malloc(palinfo_array[0].length); CHECK_ALLOC(inbuf, "inbuf", "test_getpalinfo"); status = Hgetelement(fid, palinfo_array[0].tag, palinfo_array[0].ref, inbuf); CHECK_VOID(status, FAIL, "Hgetelement"); if (memcmp(inbuf, paletteA, palinfo_array[0].length) != 0) fprintf(stderr, "palette data pointed by tag/ref = %d/%d at offset/length = %d/%d differs from written\n", palinfo_array[0].tag, palinfo_array[0].ref, palinfo_array[0].offset, palinfo_array[0].length); free(inbuf); /* Read and verify data of the palette pointed to by 301/4. This is the data element that was not revealed by DFPgetpal because the tag/ref pair 201/4 is associated with a different offset */ /* inbuf = (uint8 *) malloc(palinfo_array[7].length * sizeof(uint8)); */ inbuf = (uint8 *)malloc(palinfo_array[7].length); CHECK_ALLOC(inbuf, "inbuf", "test_getpalinfo"); status = Hgetelement(fid, palinfo_array[7].tag, palinfo_array[7].ref, inbuf); CHECK_VOID(status, FAIL, "Hgetelement"); if (memcmp(inbuf, palette_buf1, palinfo_array[7].length) != 0) fprintf(stderr, "palette data pointed by tag/ref = %d/%d at offset/length = %d/%d differs from written\n", palinfo_array[7].tag, palinfo_array[7].ref, palinfo_array[7].offset, palinfo_array[7].length); free(inbuf); free(palinfo_array); } /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_getpalinfo */ /**************************************************************************** Name: test_getntinfo() - tests getting number type's information Description: This routine simply calls Hgetntinfo with various types and verifies the information retrieved. BMR - Aug 2010 ****************************************************************************/ static void test_getntinfo() { hdf_ntinfo_t nt_info; intn status = SUCCEED; status = Hgetntinfo(DFNT_UINT8, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_UINT8"); VERIFY_CHAR_VOID(nt_info.type_name, "uint8", "Hgetntinfo DFNT_UINT8"); VERIFY_CHAR_VOID(nt_info.byte_order, "bigEndian", "Hgetntinfo DFNT_UINT8"); status = Hgetntinfo(DFNT_CHAR16, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_CHAR16"); VERIFY_CHAR_VOID(nt_info.type_name, "char16", "Hgetntinfo DFNT_CHAR16"); VERIFY_CHAR_VOID(nt_info.byte_order, "bigEndian", "Hgetntinfo DFNT_CHAR16"); /* Native */ status = Hgetntinfo(DFNT_NFLOAT32, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_NFLOAT32"); VERIFY_CHAR_VOID(nt_info.type_name, "float32", "Hgetntinfo DFNT_NFLOAT32"); VERIFY_CHAR_VOID(nt_info.byte_order, "bigEndian", "Hgetntinfo DFNT_NFLOAT32"); /* Little endian */ status = Hgetntinfo(DFNT_LFLOAT32, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_LFLOAT32"); VERIFY_CHAR_VOID(nt_info.type_name, "float32", "Hgetntinfo DFNT_LFLOAT32"); VERIFY_CHAR_VOID(nt_info.byte_order, "littleEndian", "Hgetntinfo DFNT_LFLOAT32"); /* Little endian backward compatible */ status = Hgetntinfo(DFNT_LCHAR, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_LCHAR"); VERIFY_CHAR_VOID(nt_info.type_name, "char8", "Hgetntinfo DFNT_LCHAR"); VERIFY_CHAR_VOID(nt_info.byte_order, "littleEndian", "Hgetntinfo DFNT_LCHAR"); /* Backward compatible */ status = Hgetntinfo(DFNT_DOUBLE, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_DOUBLE"); VERIFY_CHAR_VOID(nt_info.type_name, "float64", "Hgetntinfo DFNT_DOUBLE"); VERIFY_CHAR_VOID(nt_info.byte_order, "bigEndian", "Hgetntinfo DFNT_DOUBLE"); /* Native backward compatible */ status = Hgetntinfo(DFNT_NUCHAR, &nt_info); CHECK_VOID(status, FAIL, "Hgetntinfo DFNT_NUCHAR"); VERIFY_CHAR_VOID(nt_info.type_name, "uchar8", "Hgetntinfo DFNT_NUCHAR"); VERIFY_CHAR_VOID(nt_info.byte_order, "bigEndian", "Hgetntinfo DFNT_NUCHAR"); } /* test_getntinfo */ /* Test driver for testing the public functions VSgetdatainfo, ANgetdatainfo, GRgetdatainfo, and Hgetntinfo. */ void test_datainfo() { /* Test VSgetdatainfo with data stored in one contiguous block */ test_simple_vs(); /* Test VSgetdatainfo with data might be stored in linked blocks */ test_append_vs(); /* Test ANgetdatainfo */ test_annotation(); /* Test GRgetdatainfo with images stored in one contiguous block, with and without compression */ test_oneblock_ri(); /* Test GRgetdatainfo with RI8 and RI24 */ test_dfr8_24(); /* Test GRgetpalinfo with RI8 and GR */ test_getpalinfo(); /* Test Hgetntinfo */ test_getntinfo(); } hdf4-hdf4.3.1/hdf/test/tdatainfo.h000066400000000000000000000031071503061704500166720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_TDATAINFO_H #define H4_TDATAINFO_H typedef struct { int32 numtype; /* number type of data */ int32 n_values; /* number of values in an SDS, a vdata, or an RI image*/ int32 *offsets; /* offset(s) of data block(s) */ int32 *lengths; /* length(s) of data block(s) */ } t_hdf_datainfo_t; /* Utility functions to allocate and deallocate hdf_datainfo_t's members*/ intn alloc_info(t_hdf_datainfo_t *info, uintn info_count); void free_info(t_hdf_datainfo_t *info); /* Other utility functions */ intn readnoHDF_char(const char *filename, const int32 offset, const int32 length, const char *orig_buf); #endif /* H4_TDATAINFO_H */ hdf4-hdf4.3.1/hdf/test/tdfr8.c000066400000000000000000000235361503061704500157530ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************************ * tdfr8.c - test file for images of DFR8 API *************************************************************************/ #include "hdf.h" #include "tproto.h" /* for utility macros */ /************************************************************************ Name: test_GRgetcomptype() - test GRgetcomptype for hmap project Description: This routine uses DFR8 API to create the following images: + Name image0 with no compression and no palette + Name image1 with no compression and no palette + Name image2 with no compression and with palette + Name image3 with no compression and with palette + Name image4 with RLE compression and with palette + Name image5 with RLE compression and with palette + Name image6 with IMCOMP compression and with palette + Name image7 with IMCOMP compression and with palette * Name image8 with JPEG compression and with palette + Name image9 with JPEG compression and with palette + Name image10 with RLE compression and with palette + Name image11 with RLE compression and with palette All have same data in rasters and in palette (when used) Note: This part of the test was adopted from Ruth's test program. The function GRgetcomptype will be call on each image and the returned compression type will be verified against the list of compressions used. BMR - Mar 12, 2011 **************************************************************************/ #define FILE_NAME "tGRgetcomptype.hdf" #define HEIGHT 3 #define WIDTH 8 #define N_IMAGES 12 #define N_ENTRIES 256 #define N_COMPONENTS 3 void test_GRgetcomptype() { intn ii; int row, col; int entry, component; uint8 raster[HEIGHT][WIDTH]; uint8 palette[N_ENTRIES * N_COMPONENTS], temp_pal[N_ENTRIES][N_COMPONENTS]; int32 file_id, gr_id, ri_id; int32 num_images = 0, num_fattrs = 0; intn status; comp_coder_t comp_type; comp_info compress_info; /* used to verify the compression type of the images */ comp_coder_t check_comp[N_IMAGES] = {COMP_CODE_NONE, COMP_CODE_NONE, COMP_CODE_NONE, COMP_CODE_NONE, COMP_CODE_RLE, COMP_CODE_RLE, COMP_CODE_IMCOMP, COMP_CODE_IMCOMP, COMP_CODE_JPEG, COMP_CODE_JPEG, COMP_CODE_RLE, COMP_CODE_RLE}; /* used to verify whether an image should be mapped */ intn maplist[N_IMAGES] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE}; /* Initialize the raster image array */ for (row = 0; row < HEIGHT; row++) { for (col = 0; col < WIDTH; col++) { raster[row][col] = (uint8)(row * 10 + col); /* row and col are too small to overflow an 8-bit int */ } } /* * Initialize the palette array (256 entries of RGB components) * We want our test case to be easy to see, so only turn * on colors for values we have in raster image. * Red for first row; Green for second row; Blue for third row * -RA */ for (entry = 0; entry < N_ENTRIES; entry++) { for (component = 0; component < N_COMPONENTS; component++) { if ((0 <= entry) && (entry <= 7)) { /* values in first row of raster */ temp_pal[entry][0] = 255; /* Red */ temp_pal[entry][1] = 0; /* Green */ temp_pal[entry][2] = 0; /* Blue */ } else if ((10 <= entry) && (entry <= 17)) { /* values in second row of raster */ temp_pal[entry][0] = 0; /* Red */ temp_pal[entry][1] = 255; /* Green */ temp_pal[entry][2] = 0; /* Blue */ } else if ((20 <= entry) && (entry <= 27)) { /* values in third row of raster */ temp_pal[entry][0] = 0; /* Red */ temp_pal[entry][1] = 0; /* Green */ temp_pal[entry][2] = 255; /* Blue */ } else { /* all else (don't expect) will be black */ temp_pal[entry][0] = 0; /* Red */ temp_pal[entry][1] = 0; /* Green */ temp_pal[entry][2] = 0; /* Blue */ } } } /* Work around to pass "palette" into DFR8setpalette w/o compiler warning.*/ memcpy(palette, temp_pal, N_ENTRIES * N_COMPONENTS); /* Write image0 to the HDF4 file with no compression and no palette * Note that the order of args 3 and 4 is width then height. */ status = DFR8putimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_NONE); CHECK_VOID(status, FAIL, "DFR8putimage"); /* Write image1 to the HDF4 file with no compression and no palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_NONE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Set the palette */ status = DFR8setpalette(palette); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image2 with no compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_NONE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image3 with no compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_NONE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image4 with RLE compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image5 with RLE compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image6 with IMCOMP compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_IMCOMP); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image7 with IMCOMP compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_IMCOMP); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image8 with JPEG compression and with palette */ compress_info.jpeg.quality = 60; compress_info.jpeg.force_baseline = 1; status = DFR8setcompress(COMP_JPEG, &compress_info); CHECK_VOID(status, FAIL, "DFR8setcompress"); status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_JPEG); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image9 with JPEG compression and with palette */ compress_info.jpeg.quality = 60; compress_info.jpeg.force_baseline = 1; status = DFR8setcompress(COMP_JPEG, &compress_info); CHECK_VOID(status, FAIL, "DFR8setcompress"); status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_JPEG); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image10 with RLE compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Write image11 with RLE compression and with palette */ status = DFR8addimage(FILE_NAME, raster, WIDTH, HEIGHT, COMP_RLE); CHECK_VOID(status, FAIL, "DFR8addimage"); /* Open the file in GR interface and verify the compression type of each image in the file */ /* Open the file and initialize the GR interface */ file_id = Hopen(FILE_NAME, DFACC_READ, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Get the number of images in the file */ status = GRfileinfo(gr_id, &num_images, &num_fattrs); CHECK_VOID(status, FAIL, "GRfileinfo"); /* Verify compression type of each image */ for (ii = 0; ii < num_images; ii++) { intn is_mappedable; /* TRUE if the image is mapped-able (hmap project)*/ intn name_generated; /* TRUE if the image has name generated by lib */ ri_id = GRselect(gr_id, ii); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get image's compression type */ status = GRgetcomptype(ri_id, &comp_type); CHECK_VOID(status, FAIL, "GRgetcomptype"); /* Test GR2bmapped on this image (For hmap project only) */ status = GR2bmapped(ri_id, &is_mappedable, &name_generated); CHECK_VOID(status, FAIL, "GR2bmapped"); VERIFY_VOID(is_mappedable, maplist[ii], "GR2bmapped"); VERIFY_VOID(name_generated, TRUE, "GR2bmapped"); /* Verify compression type */ if (comp_type != check_comp[ii]) VERIFY_VOID(check_comp[ii], comp_type, "GRgetcomptype"); status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); } /* Terminate access to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* test_GRgetcomptype */ hdf4-hdf4.3.1/hdf/test/tdupimgs.c000066400000000000000000000141411503061704500165500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include #include "tutils.h" #define FILE_NAME "gr_double_test.hdf" #define IMAGE_COMP "Compressed Image" #define IMAGE_CHUNK "Chunked Image" #define IMAGE_CMP_CHK "Comp_Chunked Image" #define N_COMPS 3 /* number of components in the image */ #define N_IMAGES 3 /* currently, 3 images in the file, must be updated as needed */ #define X_LENGTH 10 #define Y_LENGTH 10 extern void test_mgr_dup_images() { int32 fid, grid, riid, il = MFGR_INTERLACE_PIXEL; int32 start[2], stride[2], edges[2], dims[2]; uint8 image_data[X_LENGTH][Y_LENGTH]; intn i, j; intn status; int32 n_datasets; /* number of datasets */ int32 n_attrs; /* number of attributes */ /* Output message about test being performed */ MESSAGE(6, printf("Testing eliminating duplicate images\n");); MESSAGE(8, printf("Try creating a new file and checking it out\n");); /* Create the file. */ fid = Hopen(FILE_NAME, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initiate the GR interface. */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* Define the location, pattern, and size of the data set */ dims[0] = X_LENGTH; dims[1] = Y_LENGTH; for (i = 0; i < 2; i++) { start[i] = 0; edges[i] = dims[i]; } /* Initialize data we are going to write out, same for all images */ for (i = 0; i < X_LENGTH; i++) for (j = 0; j < Y_LENGTH; j++) image_data[i][j] = (uint8)(i + j); /**** Make an image with compressed data ****/ { comp_info cinfo; int32 comp_type; /* Create the first image in this file */ riid = GRcreate(grid, IMAGE_COMP, 1, DFNT_UINT8, il, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Set the compression method for the image */ comp_type = COMP_CODE_DEFLATE; cinfo.deflate.level = 7; status = GRsetcompress(riid, comp_type, &cinfo); CHECK_VOID(status, FAIL, "GRsetcompress"); /* Write the whole image out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; status = GRwriteimage(riid, start, stride, dims, image_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Close the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /**** Make an image with chunked data ****/ { int32 comp_flag; HDF_CHUNK_DEF c_def; /* Create the second image */ riid = GRcreate(grid, IMAGE_CHUNK, 1, DFNT_UINT8, il, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Make it chunked image */ comp_flag = HDF_CHUNK; c_def.chunk_lengths[0] = 3; c_def.chunk_lengths[1] = 2; status = GRsetchunk(riid, c_def, comp_flag); CHECK_VOID(status, FAIL, "GRsetchunk"); /* Write data to the entire image */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; status = GRwriteimage(riid, start, stride, dims, image_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to this image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /* finish creating an image with chunked data */ /**** Make a GR image with chunked and DEFLATE compressed data */ { int32 comp_flag; HDF_CHUNK_DEF c_def; /* Create the image */ riid = GRcreate(grid, IMAGE_CMP_CHK, 1, DFNT_UINT8, il, dims); CHECK_VOID(riid, FAIL, "GRcreate"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < 2; i++) { c_def.comp.chunk_lengths[i] = dims[i] / 2; } /* Set info for compression/chunk */ c_def.comp.comp_type = COMP_CODE_DEFLATE; comp_flag = HDF_CHUNK | HDF_COMP; c_def.comp.cinfo.deflate.level = 9; status = GRsetchunk(riid, c_def, comp_flag); CHECK_VOID(status, FAIL, "GRsetchunk"); /* Write the stored data to the image array */ status = GRwriteimage(riid, start, NULL, edges, image_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the image */ status = GRendaccess(riid); CHECK_VOID(status, FAIL, "GRendaccess"); } /* Terminate access to the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /* Open the file again and check its info */ fid = Hopen(FILE_NAME, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initiate the GR interface. */ grid = GRstart(fid); CHECK_VOID(grid, FAIL, "GRstart"); /* There currently should only be 3 images in the file */ status = GRfileinfo(grid, &n_datasets, &n_attrs); CHECK_VOID(status, FAIL, "GRfileinfo"); VERIFY_VOID(n_datasets, N_IMAGES, "GRfileinfo"); /* Terminate access to the file */ status = GRend(grid); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } hdf4-hdf4.3.1/hdf/test/test_files/000077500000000000000000000000001503061704500167105ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/test/test_files/8bit.dat000066400000000000000000000031761503061704500202570ustar00rootroot00000000000000œÊ\.&dÊ&d-ŠÉŠjŠ,ŽÈ¢2¦ /²X˲XÉŠ, È2" /.nNCSA HDF post Version 4.1 Release 2, March 1998            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ j  ,/-            j  ,/-              Ë.n­bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRIG0.0RIG0.0hdf4-hdf4.3.1/hdf/test/test_files/README000066400000000000000000000004441503061704500175720ustar00rootroot00000000000000BMR: The file grtdfui83.hdf is added here to test Vgisinternal for the case where a GR vgroup does not have a class name as "RIG0.0" but only a name as such. This is a very rare case because the file can only be generated by the library versions sometimes in 1995. 2012/1/10 hdf4-hdf4.3.1/hdf/test/test_files/bitio.dat000066400000000000000000000104461503061704500205150ustar00rootroot00000000000000Ê\èè&NCSA HDF Version 3.3 Release 2, Novermber 1993 !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úý !$'*-0369ADGJMPSVY\_behknqtwz}€ƒ†‰Œ’•˜›ž¡¤§ª­°³¶¹¼¿ÂÅÈËÎÑÔ×ÚÝàãæéìïòõøûþ "%(+.147:=@CFILORUX[^adgjmpsvy|‚…ˆ‹Ž‘”—𠣦©¬¯²µ¸»¾ÁÄÇÊÍÐÓÖÙÜßâåèëîñô÷úýhdf4-hdf4.3.1/hdf/test/test_files/gr_r24.dat000066400000000000000000000010671503061704500205050ustar00rootroot00000000000000Ê\.&ðj,2.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF post Version 4.1 Release 2, March 1998                                         j,.hdf4-hdf4.3.1/hdf/test/test_files/greyjpeg.dat000066400000000000000000000052721503061704500212240ustar00rootroot00000000000000 çÊ\&/&-(É(j(,,È@2D P/PœÉ(2ì ø/øïÉ(NCSA HDF post Version 4.1 Release 2, March 1998ÿØÿàJFIFÿÛC   %# , #&')*)-0-(0%()(ÿÀ .ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ö P è  N9 ‚ ûÒQ\xÿ…€9ÿŠTàEø„Ümð·?Äu¬½E~(\]GœÚ}¼y(Æ®œó’à·$1Ï=C<Ÿì¦[yLWžzª¬¶ñÆÂ#‘ÏÝOÃ'ê5 ><Óæ+-½Ž®·¶ÿµ²c;€%2NUsÓ# %‡â›f’Ay¥kwmC4 Á'c+.åÏ7<Íw4RîlcqǦi(¢¿ÿÙ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.j.,/-ÿØÿàJFIFÿÛC (B+(%%(Q:=0B`Ued_U][jx™jqs[]…µ†ž£«­«g€¼Éº¦Ç™¨«¤ÿÀ .ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?Õ¢Š(¢ªÿÄÇþñê?âb{Zÿã¢j¬À#F£§#ëÍ#YiÃîî qRíÎ ¤Á»ïÆÓþ¨Æ€«Å; ®Ü}«”Ræ’Š+ÿÙ,/-ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ .ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ôŠ' ¥Á'æ‚8#”W6?á7ëÿÿþF£8oáðÿ=ó2Õ µø‰5ÂGo5œ)’Œb ÉÀ1, ç Ç¡ÏjŠWøi(‚CÏœY D"3‘þÈÁíÈÇ'ëZŸXÊUà´Ô–`[Ú‹wã®@%sžzqŽ…ì-UâºÓõYŸnø¥„B"89ÚÀ®áÛžzp9®®Š]ÍŒdãÓ4”Q_ÿÙ2 ­ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,/-hdf4-hdf4.3.1/hdf/test/test_files/grtdfui83.hdf000066400000000000000000000050531503061704500212150ustar00rootroot00000000000000 GÊ\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q­ ).h–jþ, 2 NCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111 j,.,. Image_array_5RI0.0­ ­­RIG0.0hdf4-hdf4.3.1/hdf/test/test_files/jpeg.dat000066400000000000000000000056641503061704500203420ustar00rootroot00000000000000Ê\&/&®jÔ,Ø2ìô/ôÿ,ó2/ˆ, —2 «ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF post Version 4.1 Release 2, March 1998ÿØÿàJFIFÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀ."ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?¹HÌ«÷˜©¬£ý°Nû8àÿ·BIªÁ gm.D^±bFÏâšøìoúOÿÿ€~›ý§Ú…Oüþ ¨]Uw3(_Rx¡]rŒzƒšÌÕmçžkYíßI°Äe™ÁvRp0r1€ä䞆ÆÍs6–ÐÆÄ¼É3+2óÐH°8 r£®EwÑá…Z1kE7ÓÝzékù^þG[‰cFœ°uì´ÒšßËÞÖû#nŠ©wuwv©k§Ç.­¼[ã^Úå6’$äüÏŽ£ -P[mRÚÝ&ÐÍu'ßâo.1ìÀ±=‡+Óœö®_ì$Ú_Y¤¯ðÞ[ï~–Öû|·Ò×¹ÑO;”©ûIájǺäÕvÙû×þï5¾Õ¢3ÖŠ(¯÷£¼F½vŒÓð3œsE\wl(¢ŠÿÙ.j,/ÿØÿàJFIFÿÛC (B+(%%(Q:=0B`Ued_U][jx™jqs[]…µ†ž£«­«g€¼Éº¦Ç™¨«¤ÿÛC(#(N++N¤n]n¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ÿÀ."ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?}&qQþûþ™þ´2žLDÜןì¼¾óÓöŸÝq&G­ƒÒ£•Yв˜£ã“ÏëHŠ1–hˆ’þ}kE†ºø×Þfñ)+òKîÿ‚ME1œP±€Œ¡Çù?Ê™¶UP|ÀXõRãSì?¼¾ÿêß2•k«¸¿»úü ¨¢Šç79ÀÍ-PEPÿÙ.j,/ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ."ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?³HYW©êjþÕ'ìGŸöèY5(\kUë$lþ@šøÿì¿ú}ü þ÷Ÿ_ÿ§SÿÀKå”.âÀRhVWVzƒT/ ši`šÓ¬ñ,À»pÍçŒG\ç‚#¶…³O6žÑ£Ò¬¬¬ËÏ@ਣ޺éd*¤SXšw}9¶õÒß+Ü⫞Ɯ\žµ–šAò]MJ*¼÷)ͺAd‰©š=È8kÁ g9<¶:Œ€µP[êP@²‹È¥¸½FÛ{0ÉöéïžÕÏý®—·§®Þöýú>[{—Ê÷6†jåyaê.ë—U÷=oýÛÛ­>´QEy¬4GmÁw®9§cœÑEp¢Š(ÿÙ.j,/hdf4-hdf4.3.1/hdf/test/test_files/litend.dat000066400000000000000000000050501503061704500206610ustar00rootroot00000000000000 Ê\¾&?je½iо‡?jƽÊÐà¾è~jf½jЀ¾ˆ~j½ NCSA HDF Version 3.3 Beta Release 1 Nov 1, 1992:3üñ:üH ;üHÐL:3  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV jjj¾½  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV jjj¾½  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV jjj¾½  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV jjj ZÐæ¾îüjê½îо üj½ Ð"¾*üj&½*Ð@¾ Høj @½ D¾½  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV  jjj¾½  !"#$()*+,-.2345678<=>?@ABFGHIJKLPQRSTUV  jjj¾½€?@@@€@ @À@ A0A@APA`ApA€A A¨A°A¸AÀAÈAÐAðAøABBB BB B$B(B,B0B4B8BHBLBPBTBXB\B`BpBtBxB|B€B‚B„BŒBŽBB’B”B–B˜B B¢B¤B¦B¨BªB¬B  jjj¾½ð?@@@@@$@&@(@*@,@.@0@4@5@6@7@8@9@:@>@?@@@€@@A@€A@B@D@€D@E@€E@F@€F@G@I@€I@J@€J@K@€K@L@N@€N@O@€O@P@@P@€P@€Q@ÀQ@R@@R@€R@ÀR@S@T@@T@€T@ÀT@U@@U@€U@@ j j j Ð ¾ ½ hdf4-hdf4.3.1/hdf/test/test_files/nbit.dat000066400000000000000000000064461503061704500203500ustar00rootroot00000000000000Ê\èè& NCSA HDF Version 4.0 Release 0, ?month? ?year? 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞý 04aga’š­ÃÍùóðÅ #QV]‚‰©²¼µãïÁ AEYqxe¢«±ÓÞýhdf4-hdf4.3.1/hdf/test/test_files/tmgr.dat000066400000000000000000000332101503061704500203520ustar00rootroot00000000000000 'Ê\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q­6V1­ (3«™ª«;« NCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.RIG0.0,.Raster Image #0RI0.0Attribute value 1Image1 RIATTR0.0N RIATTR0.0C,.ªRaster Image #0RI0.0Attribute value 2*ª í;­ O3« †ª ˜;« ª ;­ v3« ­ª ¿;« )ª ;;« ©ª »:« õª :. jImage2 RIATTR0.0N RIATTR0.0C,.ªªRaster Image #0RI0.0,.Raster Image #1RI0.0Attribute value 1Image1 RIATTR0.0N RIATTR0.0C,.ª Raster Image #1RI0.0Attribute value 2Image2 RIATTR0.0N RIATTR0.0C,.ªª Raster Image #1RI0.0,.Raster Image #2RI0.0Attribute value 1Image1 RIATTR0.0N RIATTR0.0C,.ª Raster Image #2RI0.0Attribute value 2Image2 RIATTR0.0N RIATTR0.0C,.ªª Raster Image #2RI0.0Attribute value 1Test1 RIATTR0.0N RIATTR0.0CAttribute value 2Test2 RIATTR0.0N RIATTR0.0C­­­ªª RIG0.0.                       4¢.ð0j2 ,2$­3Ÿ5«2aª2i>«2Ôª2æ;«3Rª3d;j3Ô,3Ø­6!5«4ª4%>«4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"j,. Test Image #1RI0.0 FillValue RIATTR0.0N RIATTR0.0C,.ª Test Image #1RI0.0Attribute value 1Image1 RIATTR0.0N RIATTR0.0C,.ªª Test Image #1RI0.0Attribute value 2Image2 RIATTR0.0N RIATTR0.0C,.ªªª Test Image #1RI0.0@j,. Test Image #2RI0.0 FillValue RIATTR0.0N RIATTR0.0C,.ª Test Image #2RI0.0Attribute value 1ª5h;«5Ôª5æ;Image1 RIATTR0.0N RIATTR0.0C,.ªª Test Image #2RI0.0Attribute value 2Image2 RIATTR0.0N RIATTR0.0C,.ªªª Test Image #2RI0.0­­­ªª­­ RIG0.0hdf4-hdf4.3.1/hdf/test/test_files/tvattr.dat000066400000000000000000000043201503061704500207250ustar00rootroot00000000000000Ê\­"&«<ªˆ~­ˆ«¢ªª:«äªè:«HªK:«…ª‰:« ê Ç:« NCSA HDF post Version 4.0 Release 2, July 23, 1996vgname0ABCDEFfldname1fldname2vsname1ªvgname1'0'PVALUESattname1Attr0.0 VALUESattname2Attr0.0vgname0ªªmNpVALUESattname3Attr0.0BVALUESattname4Attr0.0BVALUESattname5Attr0.0B€ª Ë:« ª  :« Gª O9« «ª":«\ª_:«™ª:ª €~«=ªA:«{VALUESattname4Attr0.0ÀPæšÔ,=VALUESattname5Attr0.0@PæšÔ,=VALUESvsname1Attr0.0fldname1fldname2vsname1ÿÿÿÿªªª ÿÿÿÿª ª ª ÿÿÿÿ BVALUESattname6Attr0.0mNpVALUESattname7Attr0.0BVALUESattname8Attr0.0fldname0fldname1vsname0ªÿÿÿÿªªÂ VALUESattname8Attr0.0mNpStªF:­2« ª$:«^ªb;VALUESattname9Attr0.0fldname0fldname1vsname0vsclass0ªÿÿÿÿªªªªª vgname2vgclass2dVALUESattname9Attr0.0 VALUES attname10Attr0.0ª vgname2vgclass2ªªhdf4-hdf4.3.1/hdf/test/testhdf.c000066400000000000000000000260271503061704500163630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE testhdf.c HDF testing framework main file. REMARKS General test wrapper for HDF base library test programs DESIGN Each test function should be implemented as function having no parameters and returning void (i.e. no return value). They should be put into the list of InitTest() calls in main() below. Functions which depend on other functionality should be placed below the InitTest() call for the base functionality testing. Each test module should include tproto.h and define a unique set of names for test files they create. BUGS/LIMITATIONS EXPORTED ROUTINES/VARIABLES: Two variables are exported: num_errs, and Verbosity. */ #define MAXNUMOFTESTS 35 #define TESTMASTER /* Internal Variables */ static int Index = 0; /* ANY new test needs to have a prototype in tproto.h */ #include "tproto.h" struct TestStruct { int NumErrors; char Description[64]; int SkipFlag; char Name[16]; void (*Call)(void); }; struct TestStruct *Test = NULL; static void InitTest(const char *TheName, void (*TheCall)(void), const char *TheDescr); static void usage(void); static void InitTest(const char *TheName, void (*TheCall)(void), const char *TheDescr) { if (Index >= MAXNUMOFTESTS) { printf("Uh-oh, too many tests added, increase MAXNUMOFTEST!\n"); exit(0); } strcpy(Test[Index].Description, TheDescr); strcpy(Test[Index].Name, TheName); Test[Index].Call = TheCall; Test[Index].NumErrors = -1; Test[Index].SkipFlag = 0; Index++; } static void usage(void) { intn i; printf("Usage: testhdf [-v[erbose] (l[ow]|m[edium]|h[igh]|0-10)] \n"); printf(" [-[e]x[clude] name+] \n"); printf(" [-o[nly] name+] \n"); printf(" [-b[egin] name] \n"); printf(" [-s[ummary]] \n"); printf(" [-c[leanoff]] \n"); printf(" [-n[ocaching]] \n"); printf(" [-h[elp]] \n"); printf("\n\n"); printf("verbose controls the amount of information displayed\n"); printf("exclude to exclude tests by name\n"); printf("only to name tests which should be run\n"); printf("begin start at the name of the test given\n"); printf("summary prints a summary of test results at the end\n"); printf("cleanoff does not delete *.hdf files after execution of tests\n"); printf("nocaching do not turn on low-level DD caching\n"); printf("help print out this information\n"); printf("\n\n"); printf("This program currently tests the following: \n\n"); printf("%16s %s\n", "Name", "Description"); printf("%16s %s\n", "----", "-----------"); for (i = 0; i < Index; i++) printf("%16s %s\n", Test[i].Name, Test[i].Description); printf("\n\n"); } /* end usage() */ int main(int argc, char *argv[]) { int CLLoop; /* Command Line Loop */ int Loop, Loop1; int Summary = 0; int CleanUp = 1; int Cache = 1; uint32 lmajor, lminor, lrelease; char lstring[81]; /* Un-buffer stdout */ setbuf(stdout, NULL); if (NULL == (Test = (struct TestStruct *)calloc(MAXNUMOFTESTS, sizeof(struct TestStruct)))) { printf("Could not allocate memory for tests!\n"); exit(0); } /* Tests are generally arranged from least to most complexity... */ #if !defined _WIN32 InitTest("bitvect", test_bitvect, "Bit-Vector routines"); InitTest("tbbt", test_tbbt, "Threaded Balanced Binary Trees"); #endif InitTest("vers", test_vers, "VERSION OF LIBRARY"); InitTest("hfile", test_hfile, "HFILE"); InitTest("hfile1", test_hfile1, "HFILE LIMITS"); InitTest("hblocks", test_hblocks, "HBLOCKS"); InitTest("extelt", test_hextelt, "EXTERNAL ELEMENTS"); InitTest("comp", test_comp, "COMPRESSED ELEMENTS"); InitTest("chunks", test_chunks, "Chunks"); InitTest("bitio", test_bitio, "BIT I/O"); InitTest("8bit", test_r8, "8BIT RASTER IMAGE INTERFACE"); InitTest("pal", test_pal, "PALETTE INTERFACE"); InitTest("24bit", test_r24, "24BIT RASTER IMAGE INTERFACE"); InitTest("macros", test_macros, "ENCODING/DECODING INTERFACE"); InitTest("conv", test_conv, "CONVERSION INTERFACE"); InitTest("sdmms", test_sdmms, "SDMMS"); InitTest("sdnmms", test_sdnmms, "SDNMMS"); InitTest("sdstr", test_tsdstr, "DATASTRINGS"); InitTest("slabs", test_slab, "HYPERSLAB INTERFACE"); InitTest("anot", test_an, "ANNOTATIONS"); InitTest("anot_2", test_an_2, "UPDATE ANNOTATIONS"); InitTest("anfile", test_anfile, "FILE ANNOTATIONS"); InitTest("manot", test_man, "MULTI-ANNOTATIONS"); InitTest("nbit", test_nbit, "N-Bit Dataset Interface"); InitTest("litend", test_litend, "LITTLE-ENDIAN INTERFACE"); InitTest("vset", test_vsets, "VSET InterfaceTest"); InitTest("vnameclass", test_vnameclass, "VSET Name and Class"); InitTest("vattr", test_vset_attr, "VSET AttributeTest"); InitTest("vsfpack", test_vspack, "Vdata fields pack Test"); InitTest("datainfo", test_datainfo, "Getting Raw Data's Spatial Information"); InitTest("attdatainfo", test_attdatainfo, "Getting Raw Data's Spatial Information of Attributes"); InitTest("mfgr", test_mgr, "Multi-File Generic Raster Image Interface"); Verbosity = 4; /* Default Verbosity is Low */ Hgetlibversion(&lmajor, &lminor, &lrelease, lstring); printf("\nFor help use: testhdf -help\n"); printf("Built with HDF Library Version: %u.%u.%u, %s\n\n", (unsigned)lmajor, (unsigned)lminor, (unsigned)lrelease, lstring); for (CLLoop = 1; CLLoop < argc; CLLoop++) { if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-verbose") == 0) || (strcmp(argv[CLLoop], "-v") == 0))) { if (argv[CLLoop + 1][0] == 'l') Verbosity = 4; else if (argv[CLLoop + 1][0] == 'm') Verbosity = 6; else if (argv[CLLoop + 1][0] == 'h') Verbosity = 10; else Verbosity = atoi(argv[CLLoop + 1]); } /* end if */ if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-summary") == 0) || (strcmp(argv[CLLoop], "-s") == 0))) Summary = 1; if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-help") == 0) || (strcmp(argv[CLLoop], "-h") == 0))) { usage(); exit(0); } if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-cleanoff") == 0) || (strcmp(argv[CLLoop], "-c") == 0))) CleanUp = 0; if ((argc > CLLoop) && ((strcmp(argv[CLLoop], "-nocache") == 0) || (strcmp(argv[CLLoop], "-n") == 0))) Cache = 0; if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-exclude") == 0) || (strcmp(argv[CLLoop], "-x") == 0))) { Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < Index; Loop1++) if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Test[Loop1].SkipFlag = 1; Loop++; } /* end while */ } /* end if */ if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-begin") == 0) || (strcmp(argv[CLLoop], "-b") == 0))) { Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < Index; Loop1++) { if (strcmp(argv[Loop], Test[Loop1].Name) != 0) Test[Loop1].SkipFlag = 1; if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Loop1 = Index; } /* end for */ Loop++; } /* end while */ } /* end if */ if ((argc > CLLoop + 1) && ((strcmp(argv[CLLoop], "-only") == 0) || (strcmp(argv[CLLoop], "-o") == 0))) { for (Loop = 0; Loop < Index; Loop++) Test[Loop].SkipFlag = 1; Loop = CLLoop + 1; while ((Loop < argc) && (argv[Loop][0] != '-')) { for (Loop1 = 0; Loop1 < Index; Loop1++) if (strcmp(argv[Loop], Test[Loop1].Name) == 0) Test[Loop1].SkipFlag = 0; Loop++; } /* end while */ } /* end if */ } /* end for */ if (Cache) /* turn on caching, unless we were instructed not to */ Hcache(CACHE_ALL_FILES, TRUE); for (Loop = 0; Loop < Index; Loop++) { if (Test[Loop].SkipFlag) { MESSAGE(2, printf("Skipping -- %s \n", Test[Loop].Description);); } else { MESSAGE(2, printf("Testing -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name);); MESSAGE(5, printf("===============================================\n");); Test[Loop].NumErrors = num_errs; (*Test[Loop].Call)(); Test[Loop].NumErrors = num_errs - Test[Loop].NumErrors; MESSAGE(5, printf("===============================================\n");); MESSAGE(5, printf("There were %d errors detected.\n\n", (int)Test[Loop].NumErrors);); } /* end else */ } /* end for */ MESSAGE(2, printf("\n\n");) if (num_errs) printf("!!! %d Error(s) were detected !!!\n\n", (int)num_errs); else printf("All tests were successful. \n\n"); if (Summary) { printf("Summary of Test Results:\n"); printf("Name of Test Errors Description of Test\n"); printf("---------------- ------ --------------------------------------\n"); for (Loop = 0; Loop < Index; Loop++) { if (Test[Loop].NumErrors == -1) printf("%16s %6s %s\n", Test[Loop].Name, "N/A", Test[Loop].Description); else printf("%16s %6d %s\n", Test[Loop].Name, (int)Test[Loop].NumErrors, Test[Loop].Description); } /* end for */ printf("\n\n"); } /* end if */ if (CleanUp) { MESSAGE(2, printf("\nCleaning Up...\n\n");); #ifndef H4_HAVE_WIN32_API if (system("rm -f *.hdf *.tmp") != 0) { MESSAGE(2, printf("\n!!! Unable to clean files !!!\n\n");); } #endif } free(Test); return num_errs; } /* end main() */ hdf4-hdf4.3.1/hdf/test/tmgrattr.c000066400000000000000000000457621503061704500165750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tmgrattr.c - tests the attribute functions for the multi-file GR interface * Structure of the file: * test_mgr_attr - test driver * test_mgr_fillvalues - tests with fill value attributes * test_mgr_userattr - tests with user-defined attributes * ****************************************************************************/ #include "hdf.h" #include #include "tutils.h" #include "tproto.h" #define TESTFILE "tmgratt.hdf" #define F_ATT1_VAL "Contents of First FILE Attribute" #define IMAGE1_NAME "Image 1" #define F_ATT1_NAME "File Attribute 1" #define F_ATT2_NAME "File Attribute 2" #define RI_ATT1_NAME "Image Attribute 1" #define RI_ATT2_NAME "Image Attribute 2" #define F_ATT1_N_VALUES 32 #define F_ATT2_N_VALUES 5 #define N_COMPS 4 #define RI_ATT1_VAL "Contents of IMAGE1's First Attribute" #define RI_ATT_N_VALUES 4 #define RI_ATT1_N_VALUES 36 #define RI_ATT2_N_VALUES 6 /* Pixel with fill values */ static float32 fill_pixel[RI_ATT_N_VALUES] = {1.3, -2.4, 1000.3, .25}; static uint8 file_attr_2[F_ATT2_N_VALUES] = {1, 2, 3, 4, 5}; /******************************************************************** Name: test_mgr_fillvalues() Description: This test routine sets fill values to an RI with GRsetattr then reads the values back with GRgetattr and verifies them. Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_mgr_fillvalues() { int32 fid; /* HDF file ID */ int32 grid; /* ID for the GR interface */ int32 riid; /* ID for the RI image */ int32 attr_index; /* attribute index */ int32 dims[2] = {5, 7}; /* dimensions used on all images */ uint16 ref; /* RI reference number */ int32 ri_index; /* RI index */ float32 image[7][5][N_COMPS]; /* space for the image data */ void *read_fill_vals = NULL; /* space for fill values read from attr */ float32 image0[7][5][N_COMPS]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ char attr_name[H4_MAX_GR_NAME]; int32 ntype, n_values; hdf_ntinfo_t nt_info; /* struct containing name and byte order of a num type */ int32 ret; /* generic return value */ MESSAGE(8, printf("Reading fill-value attribute\n");); fid = Hopen(TESTFILE, DFACC_CREATE, 0); CHECK(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); { /* Create empty image with default fill-values */ riid = GRcreate(grid, IMAGE1_NAME, N_COMPS, DFNT_FLOAT32, MFGR_INTERLACE_PIXEL, dims); CHECK(riid, FAIL, "GRcreate"); /* Set the fill-value */ ret = GRsetattr(riid, FILL_ATTR, DFNT_FLOAT32, RI_ATT_N_VALUES, fill_pixel); CHECK(ret, FAIL, "GRsetattr"); /* Save the ref. # for later access */ ref = GRidtoref(riid); CHECK(ref, (uint16)FAIL, "GRidtoref"); /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); /* Get the index of the newly created image */ ri_index = GRreftoindex(grid, ref); CHECK(ri_index, FAIL, "GRreftoindex"); /* Select the newly created image */ riid = GRselect(grid, ri_index); CHECK(riid, FAIL, "GRselect"); /* Buffer to read image's data in */ memset(image, 0, (size_t)(dims[0] * dims[1] * N_COMPS) * sizeof(float32)); /* Fill the memory-only with the default pixel fill-value */ HDmemfill(image0, fill_pixel, sizeof(fill_pixel), sizeof(image0) / sizeof(fill_pixel)); /* Read and verify image's data, should only be fill-values */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK(ret, FAIL, "GRreadimage"); if (memcmp(image, image0, sizeof(image0)) != 0) { MESSAGE(3, printf("Error reading data for image with user defined fill-values\n");); num_errs++; } /* Find the image's attribute named FILL_ATTR */ attr_index = GRfindattr(riid, FILL_ATTR); VERIFY(attr_index, 0, "GRfindattr"); /* Get information about the current attribute. */ ret = GRattrinfo(riid, attr_index, attr_name, &ntype, &n_values); CHECK(ret, FAIL, "GRattrinfo"); VERIFY(attr_index, 0, "GRattrinfo"); VERIFY(ntype, DFNT_FLOAT32, "GRattrinfo"); VERIFY(n_values, RI_ATT_N_VALUES, "GRattrinfo"); VERIFY_CHAR(attr_name, FILL_ATTR, "GRattrinfo"); /* Allocate a buffer to hold the attribute data. */ read_fill_vals = malloc(n_values * sizeof(float32)); if (read_fill_vals == NULL) { fprintf(stderr, "Unable to allocate space for attribute data.\n"); exit(1); } /* Piggy-back a test for Hgetntinfo */ ret = Hgetntinfo(ntype, &nt_info); CHECK(ret, FAIL, "Hgetntinfo"); VERIFY_CHAR(nt_info.type_name, "float32", "Hgetntinfo"); /* Read and verify the attribute's data */ ret = GRgetattr(riid, attr_index, (void *)read_fill_vals); CHECK(ret, FAIL, "GRgetattr"); if (memcmp(fill_pixel, read_fill_vals, RI_ATT_N_VALUES) != 0) { MESSAGE(3, printf("Error reading values of attribute FILL_ATTR\n");); num_errs++; } /* end if */ free(read_fill_vals); /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK(ret, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_mgr_fillvalues() */ /******************************************************************** Name: test_mgr_userattr() Description: This test routine creates user-define attributes to the file and to an RI with GRsetattr then reads the values back with GRgetattr and verifies them. Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_mgr_userattr() { int32 grid, riid, fid, ri_index, f_att_index, /* index of file attributes */ ri_att_index, /* index of raster image attributes */ n_values, /* number of values in an attribute */ n_rimages, /* number of raster images in the file */ n_file_attrs; /* number of file attributes */ char attr_name[H4_MAX_GR_NAME]; /* buffer to hold the attribute name */ char ri_name[H4_MAX_GR_NAME]; /* buffer to hold the image name */ int32 ncomp; /* number of components */ int32 ntype; /* number type of the components */ int32 il; /* interlace of the image data */ int32 dims[2]; /* dimension sizes of the image */ int32 n_attrs; /* number of attributes with each image */ int16 ri_attr_2[RI_ATT2_N_VALUES] = {1, 2, 3, 4, 5, 6}; void *data_buf; /* buffer to hold the attribute values */ hdf_ntinfo_t nt_info; /* struct containing name and byte order of a num type */ intn status; /* status for functions returning an intn */ MESSAGE(8, printf("Reading user-defined attribute\n");); fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); /* Set two file attributes. */ status = GRsetattr(grid, F_ATT1_NAME, DFNT_CHAR8, F_ATT1_N_VALUES, F_ATT1_VAL); CHECK(status, FAIL, "GRsetattr"); status = GRsetattr(grid, F_ATT2_NAME, DFNT_UINT8, F_ATT2_N_VALUES, (void *)file_attr_2); CHECK(status, FAIL, "GRsetattr"); /* Obtain the index of the image named IMAGE1_NAME. */ ri_index = GRnametoindex(grid, IMAGE1_NAME); CHECK(ri_index, FAIL, "GRnametoindex"); /* Obtain the identifier of this image. */ riid = GRselect(grid, ri_index); CHECK(riid, FAIL, "GRselect"); /* Set two attributes to the image. */ status = GRsetattr(riid, RI_ATT1_NAME, DFNT_CHAR8, RI_ATT1_N_VALUES, RI_ATT1_VAL); CHECK(status, FAIL, "GRsetattr"); status = GRsetattr(riid, RI_ATT2_NAME, DFNT_INT16, RI_ATT2_N_VALUES, (void *)ri_attr_2); CHECK(status, FAIL, "GRsetattr"); /* Terminate accesses, and close the HDF file. */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); status = GRend(grid); CHECK(status, FAIL, "GRend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Reopen the file again to read the attributes and verify their values.*/ fid = Hopen(TESTFILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); /* Verify the number of file attributes */ status = GRfileinfo(grid, &n_rimages, &n_file_attrs); CHECK(status, FAIL, "GRfileinfo"); /* Read each file attribute and verify its values */ if (status != FAIL && n_file_attrs > 0) { for (f_att_index = 0; f_att_index < n_file_attrs; f_att_index++) { /* Get information about the current file attribute. */ status = GRattrinfo(grid, f_att_index, attr_name, &ntype, &n_values); CHECK(status, FAIL, "GRattrinfo"); /* Allocate a buffer to hold the file attribute data. Knowledge * about the data type is assumed to be available from the previous * part of the test where the correspondent GRsetattr was called. */ switch (ntype) { case DFNT_CHAR8: data_buf = malloc(n_values * sizeof(char8)); if (data_buf == NULL) { fprintf(stderr, "test_mgr_userattr: Failed to allocate memory for data buffer for char8.\n"); exit(1); } break; case DFNT_UINT8: data_buf = malloc(n_values * sizeof(uint8)); if (data_buf == NULL) { fprintf(stderr, "test_mgr_userattr: Failed to allocate memory for data buffer for uint8.\n"); exit(1); } break; default: { fprintf(stderr, "test_mgr_userattr: Unable to determine data type to allocate data buffer.\n"); exit(1); } } /* switch */ /* Read and verify the attribute values. */ status = GRgetattr(grid, f_att_index, (void *)data_buf); CHECK(status, FAIL, "GRgetattr"); switch (ntype) { case DFNT_CHAR8: if (memcmp(data_buf, F_ATT1_VAL, n_values) != 0) { MESSAGE(3, printf("Error reading values of attribute %s\n", attr_name);); num_errs++; } /* end if */ /* Piggy-back a test for Hgetntinfo */ status = Hgetntinfo(ntype, &nt_info); CHECK(status, FAIL, "Hgetntinfo"); VERIFY_CHAR(nt_info.type_name, "char8", "Hgetntinfo"); break; case DFNT_UINT8: if (memcmp(data_buf, file_attr_2, n_values) != 0) { MESSAGE(3, printf("Error reading values of attribute %s\n", attr_name);); num_errs++; } /* end if */ /* Piggy-back a test for Hgetntinfo */ status = Hgetntinfo(ntype, &nt_info); CHECK(status, FAIL, "Hgetntinfo"); VERIFY_CHAR(nt_info.type_name, "uint8", "Hgetntinfo"); break; default: { fprintf(stderr, "test_mgr_userattr: Unable to determine data type to verify data.\n"); exit(1); } } /* switch */ /* Free the space allocated for the data buffer. */ free(data_buf); } /* for */ } /* if */ /* Obtain the index of the image named IMAGE1_NAME. */ ri_index = GRnametoindex(grid, IMAGE1_NAME); CHECK(ri_index, FAIL, "GRnametoindex"); /* Obtain the identifier of this image. */ riid = GRselect(grid, ri_index); CHECK(riid, FAIL, "GRselect"); /* Get the image information */ status = GRgetiminfo(riid, ri_name, &ncomp, &ntype, &il, dims, &n_attrs); CHECK(status, FAIL, "GRgetiminfo"); /* Verify each attribute's values */ if (status != FAIL && n_attrs > 0) { for (ri_att_index = 0; ri_att_index < n_attrs; ri_att_index++) { /* Get information about the current attribute. */ status = GRattrinfo(riid, ri_att_index, attr_name, &ntype, &n_values); CHECK(status, FAIL, "GRattrinfo"); /* Allocate a buffer to hold the attribute data. Knowledge about * the data type is assumed to be available from the previous * part of the test where the correspondent GRsetattr was called. */ switch (ntype) { case DFNT_FLOAT32: data_buf = malloc(n_values * sizeof(float32)); if (data_buf == NULL) { fprintf( stderr, "test_mgr_userattr: Failed to allocate memory for data buffer for float32.\n"); exit(1); } break; case DFNT_CHAR8: data_buf = malloc(n_values * sizeof(char8)); if (data_buf == NULL) { fprintf(stderr, "test_mgr_userattr: Failed to allocate memory for data buffer for char8.\n"); exit(1); } break; case DFNT_INT16: data_buf = malloc(n_values * sizeof(int16)); if (data_buf == NULL) { fprintf(stderr, "test_mgr_userattr: Failed to allocate memory for data buffer for int16.\n"); exit(1); } break; default: { fprintf(stderr, "test_mgr_userattr: Unable to determine data type to allocate data buffer.\n"); exit(1); } } /* switch */ /* Read and verify the attribute values. */ status = GRgetattr(riid, ri_att_index, (void *)data_buf); CHECK(status, FAIL, "GRgetattr"); /* Verify values from the attribute. * Knowledge about the data type is assumed to be available from * the previous part of the test. */ switch (ntype) { case DFNT_FLOAT32: if (memcmp(fill_pixel, data_buf, RI_ATT_N_VALUES) != 0) { MESSAGE(3, printf("Error reading values of attribute FILL_ATTR\n");); num_errs++; } /* end if */ break; case DFNT_CHAR8: if (memcmp(RI_ATT1_VAL, data_buf, RI_ATT1_N_VALUES) != 0) { MESSAGE(3, printf("Error reading values of attribute FILL_ATTR\n");); num_errs++; } /* end if */ break; case DFNT_INT16: if (memcmp(ri_attr_2, data_buf, RI_ATT2_N_VALUES) != 0) { MESSAGE(3, printf("Error reading values of attribute FILL_ATTR\n");); num_errs++; } /* end if */ break; default: { fprintf(stderr, "test_mgr_userattr: Unable to determine data type to read attribute data.\n"); exit(1); } } /* switch */ /* Free the space allocated for the data buffer. */ free(data_buf); } /* for */ } /* if */ /* Terminate accesses, and close the HDF file. */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); status = GRend(grid); CHECK(status, FAIL, "GRend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_mgr_userattr */ /**************************************************************** ** ** test_mgr_attr(): Main multi-file raster attribute test routine ** ** VII. Attribute Functions ** A. GRattrinfo ** B. Read/Write Attributes ** 1. GRsetattr ** 2. GRgetattr ** C. GRfindattr ** ** test_mgr_attr is invoked by test_mgr in mgr.c. ** ****************************************************************/ /* Test driver for testing attributes in multi-file GR interface */ extern void test_mgr_attr() { /* Output message about test being performed */ MESSAGE(5, printf("Testing Multi-file Raster Attribute routines\n");); /* Test attribute functions with fill-values attributes */ num_errs = num_errs + test_mgr_fillvalues(); /* Test attribute functions with user-defined attributes */ num_errs = num_errs + test_mgr_userattr(); if (num_errs != 0) { H4_FAILED(); } } /* test_mgr_attr() */ hdf4-hdf4.3.1/hdf/test/tmgrcomp.c000066400000000000000000001106051503061704500165460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include #include "tutils.h" #define GZIPFILE "gr_gzip.hdf" #define JPEGFILE "gr_jpeg.hdf" /**************************************************************************** * tmgrcomp.c - tests the compression functions for the multi-file GR interface * Structure of the file: * test_mgr_compress - test driver * test_mgr_compress_a - tests with GZIP compressed image * test_mgr_compress_b - tests with 8-bit JPEG compressed image * test_mgr_compress_c - tests with 24-bit JPEG compressed image * test_get_compress - tests getting comp info with compressed image * test_mgr_chunk_compress - tests getting comp info with chunked * and compressed image * Modification: * Nov 23, 2009: Moved out from mgr.c. - BMR *****************************************************************************/ /* Create/Write/Read GZIP compressed image */ static int test_mgr_compress_a() { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ MESSAGE(8, printf("Operate on gzip compressed images\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(GZIPFILE, DFACC_ALL, 0); CHECK(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ comp_coder_t comp_type; /* Compression method */ comp_info cinfo; /* Compression parameters */ int32 dims[2] = {10, 10}; /* dimensions for the empty image */ uint8 image[10][10]; /* space for the image data */ uint8 image0[10][10]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ int32 count[2]; /* Size of image data to operate on */ /* Initialize data we are going to write out */ for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) image0[i][j] = (uint8)(i + j); /* Get the first image in this file */ riid = GRcreate(grid, "image1", 1, DFNT_UINT8, MFGR_INTERLACE_PIXEL, dims); CHECK(riid, FAIL, "GRcreate"); /* Set the compression method for the image */ comp_type = COMP_CODE_DEFLATE; cinfo.deflate.level = 7; ret = GRsetcompress(riid, comp_type, &cinfo); CHECK(ret, FAIL, "GRsetcompress"); /* Write the whole image out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRwriteimage(riid, start, stride, dims, image0); CHECK(ret, FAIL, "GRreadimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); /* Check that the image made it out correctly */ /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK(riid, FAIL, "GRselect"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, 10 * 10) != 0) { MESSAGE(3, printf("Error reading data for gzip compressed image\n");); num_errs++; } /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); /* Check for compressing image in the middle of writing data */ /* Get the first image in this file */ riid = GRcreate(grid, "image2", 1, DFNT_UINT8, MFGR_INTERLACE_PIXEL, dims); CHECK(riid, FAIL, "GRcreate"); /* Write half of the image out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; count[0] = 10; count[1] = 5; ret = GRwriteimage(riid, start, stride, count, image0); CHECK(ret, FAIL, "GRwriteimage"); /* Set the compression method for the image */ comp_type = COMP_CODE_DEFLATE; cinfo.deflate.level = 7; ret = GRsetcompress(riid, comp_type, &cinfo); CHECK(ret, FAIL, "GRsetcompress"); /* Write the second half of the image out */ start[0] = 0; start[1] = 5; stride[0] = stride[1] = 1; count[0] = 10; count[1] = 5; ret = GRwriteimage(riid, start, stride, count, &image0[5][0]); CHECK(ret, FAIL, "GRwriteimage"); /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); /* Check that the image made it out correctly */ memset(image, 0, 10 * 10); /* Get the second image in this file */ riid = GRselect(grid, 1); CHECK(riid, FAIL, "GRselect"); /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, 10 * 10) != 0) { MESSAGE(3, printf("Error reading 2nd data for gzip compressed image\n");); num_errs++; } /* Close the empty image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK(ret, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_mgr_compress_a() */ /* Create/Write/Read 8-bit JPEG compressed image */ static int test_mgr_compress_b() { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 ret; /* generic return value */ MESSAGE(8, printf("Operate on 8-bit JPEG compressed images\n");); /* Open up the existing datafile and get the image information from it */ fid = Hopen(JPEGFILE, DFACC_ALL, 0); CHECK(fid, FAIL, "Hopen"); /* Initialize the GR interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); { int32 riid; /* RI ID for the new image */ comp_coder_t comp_type; /* Compression method */ comp_info cinfo; /* Compression parameters */ int32 dims[2] = {10, 10}; /* dimensions for the empty image */ int32 dims_out[2]; /* Buffer for retrieving dimensions */ uint8 image[10][10]; /* space for the image data */ uint8 image0[10][10]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ int32 n_images, n_file_attrs; /* File information variables */ int32 interlace_mode, n_comps, n_attrs, datatype; /* Image information */ char name[30]; /* Buffer for retrieving image name */ uint8 attr; /* Attribute data */ /* Initialize data we are going to write out */ for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) image0[i][j] = (uint8)(i + j); /* Get the first image in this file */ riid = GRcreate(grid, "image1", 1, DFNT_UINT8, MFGR_INTERLACE_PIXEL, dims); CHECK(riid, FAIL, "GRcreate"); attr = 100; ret = GRsetattr(riid, "JPEG_quality", DFNT_UINT8, 1, &attr); CHECK(ret, FAIL, "GRsetattr"); /* Set the compression method for the image */ comp_type = COMP_CODE_JPEG; cinfo.jpeg.quality = 100; cinfo.jpeg.force_baseline = 1; ret = GRsetcompress(riid, comp_type, &cinfo); CHECK(ret, FAIL, "GRsetcompress"); /* Write the whole image out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRwriteimage(riid, start, stride, dims, image0); CHECK(ret, FAIL, "GRwriteimage"); /* Close the image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); /* Close the interface */ ret = GRend(grid); CHECK(ret, FAIL, "GRend"); /* Check that the image made it out correctly */ /* Re-open the interface */ grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); /* Get the file information */ ret = GRfileinfo(grid, &n_images, &n_file_attrs); CHECK(ret, FAIL, "GRfileinfo"); if (n_images != 1) { MESSAGE(3, printf("Wrong number of images found!\n");); num_errs++; } /* Check the name of the image in the file */ ret = GRnametoindex(grid, "image1"); CHECK(ret, FAIL, "GRnametoindex"); /* Get the first image in this file */ riid = GRselect(grid, 0); CHECK(riid, FAIL, "GRselect"); /* Get the attribute information */ ret = GRgetiminfo(riid, name, &n_comps, &datatype, &interlace_mode, dims_out, &n_attrs); CHECK(ret, FAIL, "GRgetiminfo"); if (n_attrs != 1) { MESSAGE(3, printf("Wrong number of attributes!\n");); num_errs++; } /* Read the whole image in */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret = GRreadimage(riid, start, stride, dims, image); CHECK(ret, FAIL, "GRreadimage"); /* Verify correct image contents */ if (memcmp(image, image0, 10 * 10) != 0) { MESSAGE(3, printf("Error reading data for gzip compressed image\n");); num_errs++; } /* Close the image */ ret = GRendaccess(riid); CHECK(ret, FAIL, "GRendaccess"); } /* Shut down the GR interface */ ret = GRend(grid); CHECK(ret, FAIL, "GRend"); /* Close the file */ ret = Hclose(fid); CHECK(ret, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_mgr_compress_b() */ /* Create/Write/Read 24-bit JPEG compressed image */ static int test_mgr_compress_c() { int status; /* status for functions returning an int */ int32 file_id; /* HDF file identifier */ int32 gr_id; /* GR interface identifier */ int32 ri_id; /* raster image identifier */ int32 start[2]; /* start position to write for each dimension */ int32 edges[2]; /* number of elements to be written along each dimension */ int32 dim_sizes[2]; /* dimension sizes of the image array */ int32 interlace_mode; /* interlace mode of the image */ int32 data_type; /* data type of the image data */ uint8 image_buf[128][128][3]; uint8 read_buf[128][128][3]; comp_info c_info; char gname[60]; int32 n_comps, dt, im, dims[2], na; MESSAGE(8, printf("Operate on 24-bit JPEG compressed images\n");); /* Create and open the file and initialize GR interface */ file_id = Hopen(JPEGFILE, DFACC_CREATE, 0); CHECK(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK(gr_id, FAIL, "GRstart"); /* Set data type, interlace mode, and dimensions of image */ data_type = DFNT_UINT8; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = 128; dim_sizes[1] = 128; /* Create the raster image array */ ri_id = GRcreate(gr_id, "24-bit JPEG", 3, data_type, interlace_mode, dim_sizes); CHECK(ri_id, FAIL, "GRcreate"); /* Set JPEG compression */ c_info.jpeg.quality = 75; c_info.jpeg.force_baseline = 1; status = GRsetcompress(ri_id, COMP_CODE_JPEG, &c_info); CHECK(status, FAIL, "GRsetcompress"); /* Fill the image data buffer with values */ for (uint8 i = 0; i < 128; i++) for (uint8 j = 0; j < 128; j++) { image_buf[i][j][0] = (uint8)(i + j + 1); image_buf[i][j][1] = (uint8)(i + j + 1); image_buf[i][j][2] = (uint8)(i + j + 1); } /* Write data in the buffer into the image array */ start[0] = start[1] = 0; edges[0] = 128; edges[1] = 128; status = GRwriteimage(ri_id, start, NULL, edges, (void *)image_buf); CHECK(status, FAIL, "GRwriteimage"); /* Terminate access to raster image and to GR interface */ status = GRendaccess(ri_id); CHECK(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK(status, FAIL, "GRend"); /* Start access to the GR interface and get access to the first RI */ gr_id = GRstart(file_id); CHECK(gr_id, FAIL, "GRstart"); ri_id = GRselect(gr_id, 0); CHECK(ri_id, FAIL, "GRselect"); /* Get and verify information about this image */ status = GRgetiminfo(ri_id, gname, &n_comps, &dt, &im, dims, &na); CHECK(status, FAIL, "GRreadimage"); VERIFY(n_comps, 3, "GRgetiminfo"); VERIFY(dt, DFNT_UINT8, "GRgetiminfo"); VERIFY(dim_sizes[0], dims[0], "GRgetiminfo"); VERIFY(dim_sizes[1], dims[1], "GRgetiminfo"); VERIFY(na, 0, "GRgetiminfo"); /* Read back data */ start[0] = start[1] = 0; edges[0] = 128; edges[1] = 128; status = GRreadimage(ri_id, start, NULL, edges, (void *)read_buf); CHECK(status, FAIL, "GRreadimage"); /* Verify correct image contents */ if (fuzzy_memcmp(image_buf, read_buf, 128 * 128 * 3, JPEG_FUZZ) != 0) { MESSAGE(3, printf("tmgrcomp: Error reading data for 24-bit JPEG compressed image\n");); num_errs++; } /* Terminate access to raster image and to GR */ /* interface and, close the HDF file. */ status = GRendaccess(ri_id); CHECK(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK(status, FAIL, "GRend"); status = Hclose(file_id); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_mgr_compress_c() */ /*-------------------------------------------------------------------------- The following 2 routines are added when bug# 307 was fixed: - test_get_compress: tests the new functionality, getting compression information of compressed image data. The test + creates a file and four compressed images written to the file, then closes the file. + re-opens the file, then reads and verifies each image's compression information The four images are created using the following compression methods in that order: RLE, Skipping Huffman, Deflate, and JPEG. For simplicity, all four images use the same data sample. - make_comp_image: is a helper that test_get_compress uses to create several compressed images. -BMR (Sept 7, 01) --------------------------------------------------------------------------*/ #define COMPFILE "gr_comp.hdf" #define RLE_IMAGE "Image with RLE Compression" #define DEFLATE_IMAGE "Image with Deflate Compression" #define SKPHUFF_IMAGE "Image with Skphuff Compression" #define JPEG_IMAGE "Image with JPEG Compression" #define DEFLATE_LEVEL 7 /* arbitrary */ #define SKPHUFF_SKIPSIZE 28 /* arbitrary */ static int make_comp_image(int32 grid, const char *img_name, comp_coder_t comp_type, /* Compression method */ comp_info *cinfo, char *message) /* Compression parameters */ { int32 riid; /* RI ID of the working image */ int32 dims[2] = {10, 10}; /* dimensions for the empty image */ uint8 image_data[10][10]; /* space for the image data */ int32 start[2]; /* start of image data to grab */ int32 stride[2]; /* stride of image data to grab */ int ret_value; /* generic return value */ /* Initialize data we are going to write out */ for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) image_data[i][j] = (uint8)(i + j + 10); /* Create the image */ riid = GRcreate(grid, img_name, 1, DFNT_UINT8, MFGR_INTERLACE_PIXEL, dims); if (riid == FAIL) { strcpy(message, "make_comp_image::GRcreate"); return FAIL; } /* Set the compression as provided */ ret_value = GRsetcompress(riid, comp_type, cinfo); if (ret_value == FAIL) { strcpy(message, "make_comp_image::GRsetcompress"); return FAIL; } /* Write the image out */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; ret_value = GRwriteimage(riid, start, stride, dims, image_data); if (ret_value == FAIL) { strcpy(message, "make_comp_image::GRwriteimage"); return FAIL; } /* Close the image */ ret_value = GRendaccess(riid); if (ret_value == FAIL) { strcpy(message, "make_comp_image::GRendaccess"); return FAIL; } return SUCCEED; } static int test_get_compress() { int32 fid; /* HDF file ID */ int32 grid; /* GRID for the interface */ int32 riid; /* RI ID of the working image */ comp_coder_t comp_type; /* Compression method */ comp_info cinfo; /* Compression parameters - union */ char err_func[80]; /* name of the functions where failure occurs */ int status; /* generic return value */ /* D - Retrieve compression information of compressed images */ MESSAGE(8, printf("Verify the compression information of compressed images\n");); /* * Create a new file and several images with different compression * schemes then close the images and the file */ /* Create an hdf file, and initiate the GR interface */ fid = Hopen(COMPFILE, DFACC_CREATE, (int16)0); CHECK(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); /* Create and write 4 images, with RLE, deflate, skipping huffman, and JPEG compression methods. */ /* No compression info for the RLE image */ memset(&cinfo, 0, sizeof(cinfo)); /* Create and write the first compressed image in this file */ status = make_comp_image(grid, RLE_IMAGE, COMP_CODE_RLE, &cinfo, err_func); CHECK(status, FAIL, err_func); /* Set the compression info for the second image with skipping huffman method */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.skphuff.skp_size = SKPHUFF_SKIPSIZE; /* Create and write the second compressed image in this file */ status = make_comp_image(grid, SKPHUFF_IMAGE, COMP_CODE_SKPHUFF, &cinfo, err_func); CHECK(status, FAIL, err_func); /* Set the compression info for the third image with deflate method */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.deflate.level = DEFLATE_LEVEL; /* Create and write the third compressed image in this file */ status = make_comp_image(grid, DEFLATE_IMAGE, COMP_CODE_DEFLATE, &cinfo, err_func); CHECK(status, FAIL, err_func); /* Set the compression method for the fourth image */ memset(&cinfo, 0, sizeof(cinfo)); cinfo.jpeg.quality = 100; /* won't be able to retrieved anyway */ cinfo.jpeg.force_baseline = 1; /* Create and write the fourth compressed image in this file */ status = make_comp_image(grid, JPEG_IMAGE, COMP_CODE_JPEG, &cinfo, err_func); CHECK(status, FAIL, err_func); /* Terminate access to the GR interface and close the file */ status = GRend(grid); CHECK(status, FAIL, "GRend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* * Re-open the file COMPFILE, and retrieve the compression information * of its two images */ fid = Hopen(COMPFILE, DFACC_READ, 0); CHECK(fid, FAIL, "Hopen"); grid = GRstart(fid); CHECK(grid, FAIL, "GRstart"); /* get access to the first image */ riid = GRselect(grid, 0); CHECK(riid, FAIL, "GRselect"); /* First image uses RLE compression method, so no info will be retrieved */ status = GRgetcompinfo(riid, &comp_type, &cinfo); CHECK(status, FAIL, "GRgetcompinfo"); VERIFY(comp_type, COMP_CODE_RLE, "GRgetcompinfo"); /* end access to the first image */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); /* get the compression info of the second image, and then check * the values against the values set earlier, which are: * comp_type = COMP_CODE_SKPHUFF * skp_size = SKPHUFF_SKIPSIZE */ /* get access to the second image */ riid = GRselect(grid, 1); CHECK(riid, FAIL, "GRselect"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = GRgetcompinfo(riid, &comp_type, &cinfo); CHECK(status, FAIL, "GRgetcompinfo"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "GRgetcompinfo"); VERIFY(cinfo.skphuff.skp_size, SKPHUFF_SKIPSIZE, "GRgetcompinfo"); /* end access to the second image */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); /* get the compression info of the third image, and then check the values against the values set earlier, which are: comp_type = COMP_CODE_DEFLATE level = DEFLATE_LEVEL */ /* get access to the third image */ riid = GRselect(grid, 2); CHECK(riid, FAIL, "GRselect"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = GRgetcompinfo(riid, &comp_type, &cinfo); CHECK(status, FAIL, "GRgetcompinfo"); VERIFY(comp_type, COMP_CODE_DEFLATE, "GRgetcompinfo"); VERIFY(cinfo.deflate.level, DEFLATE_LEVEL, "GRgetcompinfo"); /* Terminate access to the third image */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); /* get access to the fourth image */ riid = GRselect(grid, 3); CHECK(riid, FAIL, "GRselect"); /* get the compression info of the second image, but only check the compression type value against that being set earlier ('quality' and 'force_baseline' are currently not retrievable) */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = GRgetcompinfo(riid, &comp_type, &cinfo); CHECK(status, FAIL, "GRgetcompinfo"); VERIFY(comp_type, COMP_CODE_JPEG, "GRgetcompinfo"); VERIFY(cinfo.jpeg.quality, 0, "GRgetcompinfo"); VERIFY(cinfo.jpeg.force_baseline, 0, "GRgetcompinfo"); /* Terminate access to the third image */ status = GRendaccess(riid); CHECK(status, FAIL, "GRendaccess"); /* Terminate access and close the file */ status = GRend(grid); CHECK(status, FAIL, "GRend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_get_compress */ /*-------------------------------------------------------------------------- The test routine test_mgr_chunk_compress is added when bug# 307 was fixed. test_mgr_chunk_compress tests the new functionality, getting compression information of compressed chunked image data. It + creates the file CHKCOMPFILE and adds four compressed chunked images to it, then closes the file. + re-opens the file, then reads and verifies each chunked image's compression information The first image is only chunked and not compressed. The last three chunked images are compressed using the following methods in that order: RLE, Skipping Huffman, Deflate. For simplicity, all four images use the same data sample. Note: At this time JPEG is not working correctly for chunked images, but when it is, its tests should be added to this routines (and to test_mgr_chunkwr_pixelone as well) appropriately, i.e. another image should be added to the image list. -BMR (Oct 7, 01) --------------------------------------------------------------------------*/ static int test_mgr_chunk_compress() { #define CHKCOMPFILE "gr_chunkcomp.hdf" #define X_LENGTH 10 /* number of columns in the image */ #define Y_LENGTH 6 /* number of rows in the image */ #define N_COMPS 3 /* number of components in the image */ #define N_IMAGES 4 /* number of images tested used - 5 comp. methods */ /************************* Variable declaration **************************/ int status; /* status for functions returning an int */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id[N_IMAGES], /* raster image identifier */ origin[2], /* start position to write for each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ comp_flag, /* compression flag */ index, img_num; int32 start[2], stride[2], edge[2]; comp_info cinfo; /* Compression parameters - union */ comp_coder_t comp_type; int16 data_out[3 * Y_LENGTH * X_LENGTH]; const char *image_name[] = {"Image_NO", "Image_RL", "Image_Sk", "Image_DF"}; HDF_CHUNK_DEF chunk_def[N_IMAGES]; int16 chunk_buf[18]; int16 chunk00[] = {110, 111, 112, 120, 121, 122, 130, 131, 132, 140, 141, 142, 150, 151, 152, 160, 161, 162}; int16 chunk01[] = {210, 211, 212, 220, 221, 222, 230, 231, 232, 240, 241, 242, 250, 251, 252, 260, 261, 262}; int16 chunk14[] = {1010, 1011, 1012, 1020, 1021, 1022, 1030, 1031, 1032, 1040, 1041, 1042, 1050, 1051, 1052, 1060, 1061, 1062}; int16 data[] = {110, 111, 112, 120, 121, 122, 210, 211, 212, 220, 221, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 132, 140, 141, 142, 230, 231, 232, 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 152, 160, 161, 162, 250, 251, 252, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 1011, 1012, 1020, 1021, 1022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 1031, 1032, 1040, 1041, 1042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1050, 1051, 1052, 1060, 1061, 1062}; /********************** End of variable declaration **********************/ /* E - Retrieve compression information of chunked compressed images */ MESSAGE(8, printf("Verify the compression information of compressed images\n");); /* Create and open the file. */ file_id = Hopen(CHKCOMPFILE, DFACC_CREATE, 0); CHECK(file_id, FAIL, "Hopen"); /* Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image. */ data_type = DFNT_INT16; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; for (img_num = 0; img_num < N_IMAGES; img_num++) { /* Create the raster image array. */ ri_id[img_num] = GRcreate(gr_id, image_name[img_num], N_COMPS, data_type, interlace_mode, dim_sizes); CHECK(ri_id[img_num], FAIL, "GRcreate"); /* Create chunked image array. */ switch (img_num) { case 0: comp_flag = HDF_CHUNK; chunk_def[img_num].chunk_lengths[0] = 3; chunk_def[img_num].chunk_lengths[1] = 2; break; case 1: comp_flag = HDF_CHUNK | HDF_COMP; chunk_def[img_num].comp.chunk_lengths[0] = 3; chunk_def[img_num].comp.chunk_lengths[1] = 2; chunk_def[img_num].comp.comp_type = COMP_CODE_RLE; break; case 2: comp_flag = HDF_CHUNK | HDF_COMP; chunk_def[img_num].comp.chunk_lengths[0] = 3; chunk_def[img_num].comp.chunk_lengths[1] = 2; chunk_def[img_num].comp.comp_type = COMP_CODE_SKPHUFF; chunk_def[img_num].comp.cinfo.skphuff.skp_size = 2; break; case 3: comp_flag = HDF_CHUNK | HDF_COMP; chunk_def[img_num].comp.chunk_lengths[0] = 3; chunk_def[img_num].comp.chunk_lengths[1] = 2; chunk_def[img_num].comp.comp_type = COMP_CODE_DEFLATE; chunk_def[img_num].comp.cinfo.deflate.level = 6; break; default: printf("Error\n"); break; } /* end switch */ status = GRsetchunk(ri_id[img_num], chunk_def[img_num], comp_flag); CHECK(status, FAIL, "GRsetchunk"); /* Write first data chunk ( 0, 0 ). */ origin[0] = origin[1] = 0; status = GRwritechunk(ri_id[img_num], origin, (void *)chunk00); CHECK(status, FAIL, "GRwritechunk"); /* Write second data chunk ( 0, 1 ). */ origin[0] = 0; origin[1] = 1; status = GRwritechunk(ri_id[img_num], origin, (void *)chunk01); CHECK(status, FAIL, "GRwritechunk"); /* Write third data chunk ( 1, 4 ). */ origin[0] = 1; origin[1] = 4; status = GRwritechunk(ri_id[img_num], origin, (void *)chunk14); CHECK(status, FAIL, "GRwritechunk"); /* Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[img_num], origin, (void *)chunk_buf); CHECK(status, FAIL, "GRreadchunk"); /* Terminate access to the GR interface and close the HDF file. */ status = GRendaccess(ri_id[img_num]); CHECK(status, FAIL, "GRendaccess"); } /* end for */ status = GRend(gr_id); CHECK(status, FAIL, "GRend"); status = Hclose(file_id); CHECK(status, FAIL, "Hclose"); /* Open the file. */ file_id = Hopen(CHKCOMPFILE, DFACC_WRITE, 0); CHECK(file_id, FAIL, "Hopen"); /* Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK(gr_id, FAIL, "GRstart"); for (img_num = 0; img_num < N_IMAGES; img_num++) { /* Find the index of the specified image. */ index = GRnametoindex(gr_id, image_name[img_num]); CHECK(index, FAIL, "GRnametoindex"); /* Select the image. */ ri_id[img_num] = GRselect(gr_id, index); CHECK(ri_id[img_num], FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = GRgetcompinfo(ri_id[img_num], &comp_type, &cinfo); CHECK(status, FAIL, "GRgetcompinfo"); switch (img_num) { case 0: VERIFY(comp_type, COMP_CODE_NONE, "GRgetcompinfo"); break; case 1: VERIFY(comp_type, COMP_CODE_RLE, "GRgetcompinfo"); break; case 2: VERIFY(comp_type, COMP_CODE_SKPHUFF, "GRgetcompinfo"); VERIFY(cinfo.skphuff.skp_size, chunk_def[img_num].comp.cinfo.skphuff.skp_size, "GRgetcompinfo"); break; case 3: VERIFY(comp_type, COMP_CODE_DEFLATE, "GRgetcompinfo"); VERIFY(cinfo.deflate.level, chunk_def[img_num].comp.cinfo.deflate.level, "GRgetcompinfo"); break; default: printf("Error\n"); break; } /* end switch */ /* Read third chunk back. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id[img_num], origin, (void *)chunk_buf); CHECK(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk14, sizeof(chunk14))) { MESSAGE(3, printf("Error in reading chunk at line %d\n", __LINE__);); MESSAGE(3, printf("Image #%d\n", (int)img_num);); num_errs++; } /* Read the whole image. */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; edge[0] = Y_LENGTH; edge[1] = X_LENGTH; status = GRreadimage(ri_id[img_num], start, stride, edge, (void *)data_out); CHECK(status, FAIL, "GRreadimage"); if (0 != memcmp(data_out, data, sizeof(data))) { MESSAGE(3, printf("%d: Error reading data for the whole image\n", __LINE__);); MESSAGE(3, printf("%d: Compression method\n", (int)img_num);); num_errs++; } status = GRendaccess(ri_id[img_num]); CHECK(status, FAIL, "GRendaccess"); } /* end for */ /* Terminate access to the GR interface and close the HDF file. */ status = GRend(gr_id); CHECK(status, FAIL, "GRend"); status = Hclose(file_id); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end of test_mgr_chunk_compress */ /**************************************************************** ** ** test_mgr_compress(): Multi-file Raster Compression tests ** ** IX. Compressed image tests ** A. Create/Read/Write gzip compressed Image ** B. Create/Read/Write 8-bit JPEG compressed Image ** C. Create/Read/Write 24-bit JPEG compressed Image ** D. Retrieve various compression information of compressed Image ** E. Retrieve various compression info. of compressed, chunked images ** ****************************************************************/ extern void test_mgr_compress() { /* Output message about test being performed */ MESSAGE(5, printf("Testing Multi-file Raster Compression Functions\n");); /* Test compression functions on GZIP compressed image */ num_errs = num_errs + test_mgr_compress_a(); /* Test compression functions on 8-bit JPEG compressed image */ num_errs = num_errs + test_mgr_compress_b(); /* Test compression functions on 24-bit JPEG compressed image */ num_errs = num_errs + test_mgr_compress_c(); /* Test retrieving various compression information of compressed image */ num_errs = num_errs + test_get_compress(); /* Test retrieving various compression information of chunked and compressed image */ num_errs = num_errs + test_mgr_chunk_compress(); if (num_errs != 0) { H4_FAILED(); } } /* end test_mgr_compress() */ hdf4-hdf4.3.1/hdf/test/tpf.f000066400000000000000000000157611503061704500155210ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tpf (number_failed) C program tpff implicit none include 'fortest.inc' C C C Test program: Writes palettes in a file. C Reads palettes from the file. C Writes palette with specified reference number. C Reads palette with specified reference number. C C Input file: none C C Output file: tpalf.hdf C C integer number_failed character*20 myname parameter (myname = 'p') character*64 TESTFILE character*1 CR character pal1(768), pal2(768), ipal(768) integer ret, ref integer ref1, ref2, newref1, newref2 integer i call ptestban('Testing', myname) TESTFILE = 'tpalf.hdf' CR = char(10) number_failed = 0 ref = 0 C C Initialize pal1 as {1, 2, 3, 4, 5, ...} C Initialize pal2 as {1, 1, 1, 2, 2, 2, ...} do 100 i = 0, 255 pal1(3*i + 1) = char(i) pal1(3*i + 2) = char(i) pal1(3*i + 3) = char(i) pal2(i + 1) = char(i) pal2(i + 256 + 1) = char(i) pal2(i + 512 + 1) = char(i) 100 continue C C Write out pal1, then pal2. C Keep their ref number in ref1 and ref2. call MESSAGE(VERBO_HI, 'Putting pal1 in new file.') ret = dpppal(TESTFILE, pal1, 0, 'w') call VRFY(ret, 'dpppal', number_failed) call MESSAGE(VERBO_HI, 'Getting ref1') ref1 = dplref() ref = ref1*1 call VRFY(ref, 'dplref', number_failed) C VRFY expects an integer, but ref1 is only integer*2. The C expression promotes it to an integer expression. call MESSAGE(VERBO_HI, 'Putting pal2 in file') ret = dpapal(TESTFILE, pal2) call VRFY(ret, 'dpapal', number_failed) call MESSAGE(VERBO_HI, 'Getting ref2') ref2 = dplref() ref = ref2*1 call VRFY(ref, 'dplref', number_failed) C C Reset the palettes for reading call MESSAGE(VERBO_HI, 'Restarting palette interface') ret = dprest() call VRFY(ret, 'dprest', number_failed) C C Get palette 1 and match it with pal1 call MESSAGE(VERBO_HI, 'Reading pal1') ret = dpgpal(TESTFILE, ipal) call VRFY(ret, 'dpgpal', number_failed) do 200 i=1, 768 if (ipal(i) .ne. pal1(i)) then print *, 'Error at ', i, ', ipal:', ipal(i), * ' pal1(i):', pal1(i) endif 200 continue C C verify the ref number is updated correctly too call MESSAGE(VERBO_HI, 'Getting newref1') newref1 = dplref() if (newref1 .ne. ref1) then print *, 'Error: newref1 is ', newref1, ', should be ', ref1 number_failed = number_failed + 1 endif C C Get palette 2 and match it with pal2 call MESSAGE(VERBO_HI, 'Reading pal2.') ret = dpgpal(TESTFILE, ipal) call VRFY(ret, 'dpgpal', number_failed) do 300 i=1, 768 if (ipal(i) .ne. pal2(i)) then print *, 'Error at ', i, ', ipal:', ipal(i), * ' pal2:', pal2(i) endif 300 continue C C Again verify the ref number call MESSAGE(VERBO_HI, 'Getting ref2') newref2 = dplref() if (newref2 .ne. ref2) then print *, 'Error: newref2 is ', newref2, ', should be ', ref2 number_failed = number_failed + 1 endif C C Check number of palettes call MESSAGE(VERBO_HI, 'Getting number of palettes') ret = dpnpals(TESTFILE) if (ret .ne. 2) then print *, 'Error: number of palette is ', ret, ', should be 2' number_failed = number_failed + 1 endif C C Explicitly set to palette of ref2 for reading call MESSAGE(VERBO_HI, 'Setting read ref to ref2.') ret = dprref(TESTFILE, ref2) call VRFY(ret, 'dprref', number_failed) call MESSAGE(VERBO_HI, 'Reading pal2') ret = dpgpal(TESTFILE, ipal) call VRFY(ret, 'dpgpal', number_failed) newref2 = dplref() if (newref2 .ne. ref2) then print *, 'Error: newref2 is ', newref2, ', should be ', ref2 number_failed = number_failed + 1 endif C C match it with pal2 do 400 i=1, 768 if (ipal(i) .ne. pal2(i)) then print *, 'Error at ', i, ', ipal:', ipal(i), * ' pal2:', pal2(i) endif 400 continue C C Explicitly set to palette of ref1 for reading call MESSAGE(VERBO_HI, 'Setting read ref to ref1.') ret = dprref(TESTFILE, ref1) call VRFY(ret, 'dprref', number_failed) call MESSAGE(VERBO_HI, 'Reading pal1') ret = dpgpal(TESTFILE, ipal) call VRFY(ret, 'dpgpal', number_failed) newref1 = dplref() if (newref1 .ne. ref1) then print *, 'Error: newref1 is ', newref1, ', should be ', ref1 number_failed = number_failed + 1 endif C C match it with pal1 do 500 i=1, 768 if (ipal(i) .ne. pal1(i)) then print *, 'Error at ', i, ', ipal:', ipal(i), * ' pal1:', pal1(i) endif 500 continue C C Modify the middle chunk of pal1 and replace its file copy. call MESSAGE(VERBO_HI, 'Modifying pal1') do 600 i=1,256 pal1(i+256) = char(256-i) 600 continue call MESSAGE(VERBO_HI, 'Setting write ref to ref1') ret = dpwref(TESTFILE, ref1) call VRFY(ret, 'dpwref', number_failed) call MESSAGE(VERBO_HI, 'Writing pal1') ret = dpppal(TESTFILE, pal1, 1, 'a') call VRFY(ret, 'dpppal', number_failed) ret=dplref() C print *,'last ref is: ', ret call MESSAGE(VERBO_HI, 'setting read ref to ref1') ret = dprref(TESTFILE, ref1) call VRFY(ret, 'dprref', number_failed) call MESSAGE(VERBO_HI, 'Reading pal1') ret = dpgpal(TESTFILE, ipal) call VRFY(ret, 'dpgpal', number_failed) do 700 i=1, 768 if (ipal(i) .ne. pal1(i)) then print *, 'Error at ', i, ', ipal:', ipal(i), * ' pal1:', pal1(i) endif 700 continue if (number_failed .eq. 0) then call MESSAGE(VERBO_DEF + 1, + '****** ALL TESTS SUCCESSFUL ******') else print *, '****** ', number_failed, ' TESTS FAILED ******' endif return end hdf4-hdf4.3.1/hdf/test/tproto.h000066400000000000000000000036471503061704500162610ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_TPROTO_H #define H4_TPROTO_H #include "hdf_priv.h" #include "tutils.h" void test_an(void); void test_an_2(void); void test_anfile(void); void test_man(void); void test_hblocks(void); void test_hextelt(void); void test_hfile(void); void test_hfile1(void); void test_r24(void); void test_GR(void); void test_r8(void); void test_pal(void); void test_sdmms(void); void test_sdnmms(void); void test_tsdstr(void); void test_vers(void); void test_slab(void); void test_litend(void); void test_vsets(void); void test_vnameclass(void); void test_vset_attr(void); void test_vspack(void); void test_comp(void); void test_bitio(void); void test_tbbt(void); void test_macros(void); void test_conv(void); void test_nbit(void); void test_mgr(void); void test_mgr_attr(void); void test_mgr_compress(void); void test_bitvect(void); void test_chunks(void); void test_buffer(void); void test_datainfo(void); void test_datainfo(void); void test_attdatainfo(void); void test_mgr_szip(void); #endif /* H4_TPROTO_H */ hdf4-hdf4.3.1/hdf/test/tr8f.f000066400000000000000000000210051503061704500155770ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tr8f (number_failed) implicit none include 'fortest.inc' C C Test program: C Writes images together with pals to a file. C Reads images from the file. C Writes and reads images with specified ref's. C Input file: none C Output file: tdfr8f.hdf C integer number_failed character*20 myname parameter (myname = 'r8') character im1(100,100), im2(321, 111) character ii1(100, 100), ii2(321, 111) character pal1(768), pal2(768), ipal(768) character*64 TESTFILE character*1 CR integer x, y, ret, num_images integer d1, d2, ispal integer ref1, ref2, ref3 call ptestban('Testing', myname) TESTFILE = 'tdfr8f.hdf' number_failed = 0 num_images = 0 CR = char(10) do 120 x=1, 100 do 100 y=1, 100 im1(y,x) = char(x+y) 100 continue 120 continue do 180 x=1, 111 do 150 y=1, 321 im2(y,x) = char(y-x) 150 continue 180 continue do 200 x=1, 256 pal1(3*x - 2) = char(x) pal1(3*x - 1) = char(x) pal1(3*x ) = char(x) pal2(x) = char(x) pal2(x+256) = char(x) pal2(x+512) = char(x) 200 continue C Start here call MESSAGE(VERBO_HI, 'Setting palette 1') ret = d8spal(pal1) call VRFY(ret, 'd8spal',number_failed) call MESSAGE(VERBO_HI, + 'Putting image 1 with pal 1, no compression') ret=d8pimg(TESTFILE, im1, 100, 100, 0) call VRFY(ret, 'd8pimg',number_failed) num_images = num_images + 1 call MESSAGE(VERBO_HI, 'Getting ref1') ref1 = d8lref() call MESSAGE(VERBO_HI, + 'Putting image 2 with pal 1, REL compression') ret=d8aimg(TESTFILE, im2, 321, 111, DFTAG_RLE) call VRFY(ret, 'd8aimg',number_failed) num_images = num_images + 1 call MESSAGE(VERBO_HI, 'Getting ref2') ref2 = d8lref() call MESSAGE(VERBO_HI, 'Setting palette 2') ret = d8spal(pal2) call VRFY(ret, 'd8spal',number_failed) call MESSAGE(VERBO_HI, + 'Putting image 2 with pal 2, IMCOMP compression') ret=d8aimg(TESTFILE, im2, 321, 111, DFTAG_IMCOMP) call VRFY(ret, 'd8aimg',number_failed) num_images = num_images + 1 call MESSAGE(VERBO_HI, 'Getting ref3') ref3 = d8lref() call MESSAGE(VERBO_HI, 'Getting number of images') ret = d8nims(TESTFILE) if (ret .ne. num_images) then print *, ' >>>> WRONG NUMBER OF IMAGES <<< ' else if (Verbosity .ge. VERBO_HI) then print *, ret, ' images in the file' endif endif call MESSAGE(VERBO_HI, 'Restarting file') ret = d8first() call VRFY(ret, 'd8first',number_failed) call MESSAGE(VERBO_HI, 'Getting dimensions of first image') ret=d8gdims(TESTFILE, d1, d2, ispal) call VRFY(ret, 'd8gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image 1') ret=d8gimg(TESTFILE, ii1, 100, 100, ipal) call VRFY(ret, 'd8gimg',number_failed) call check_im1_pal(100, 100, d1, d2, im1, ii1, pal1, ipal) call MESSAGE(VERBO_HI, 'Getting dimensions of image2') ret=d8gdims(TESTFILE, d1, d2, ispal) call VRFY(ret, 'd8gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting dimensions of image 3') ret=d8gdims(TESTFILE, d1, d2, ispal) call VRFY(ret, ' d8gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image 3') ret = d8gimg(TESTFILE, ii2, 321, 111, ipal) call VRFY(ret, 'd8gimg',number_failed) call MESSAGE(VERBO_HI, 'setting read ref2') ret = d8rref(TESTFILE, ref2) call VRFY(ret, 'd8rref',number_failed) call MESSAGE(VERBO_HI, 'Getting image 2') ret = d8gimg(TESTFILE, ii2, 321, 111,ipal) call VRFY(ret, 'd8gimg',number_failed) call check_im2_pal(321,111,321, 111, im2, ii2, pal1, ipal) call MESSAGE(VERBO_HI,'Setting write ref1') ret = d8wref(TESTFILE, ref1) call VRFY(ret, 'd8wref',number_failed) call MESSAGE(VERBO_HI, 'Setting palette 2') ret = d8spal(pal2) call VRFY(ret, 'd8spal',number_failed) call MESSAGE(VERBO_HI,'Putting image 1 with pal 2, RLE') ret = d8aimg(TESTFILE, im1, 100, 100, DFTAG_RLE) call VRFY(ret, 'd8aimg',number_failed) call MESSAGE(VERBO_HI, 'Setting read ref1') ret = d8rref(TESTFILE, ref1) call VRFY(ret, 'd8rref',number_failed) call MESSAGE(VERBO_HI, 'Getting dimensions of first image') ret = d8gdims(TESTFILE, d1, d2, ispal) call VRFY(ret, 'd8gdims',number_failed) call MESSAGE(VERBO_HI, 'Getting image 1') ret = d8gimg(TESTFILE, ii1, d1, d2, ipal) call VRFY(ret, 'd8gimg',number_failed) call check_im1_pal(100, 100, d1, d2, im1, ii1, pal2, ipal) if (number_failed .eq. 0) then call MESSAGE(VERBO_HI, '****** ALL TESTS SUCCESSFUL *******') else print *, '****' , number_failed, ' TESTS FAILED ****' endif return end C******************************************************** C C check_im1_pal C C******************************************************** subroutine check_im1_pal(od1,od2,nd1,nd2,oim,nim,opal,npal) implicit none include 'fortest.inc' integer od1, od2, nd1, nd2 character oim(100, 100), nim(100, 100) character opal(768), npal(768) integer prob, i, j prob = 0 call MESSAGE(VERBO_HI, 'Checking image and palette') if (od1 .ne. nd1 .OR. od2 .ne. nd2) then print *, ' >>> DIMENSIONS WRONG <<< ' prob = 1 endif do 520 j=1, 100 do 500 i=1,100 if (oim(i,j) .ne. nim(i,j)) then print *, ' ERROR at ', i, j,' old image: ', * oim(i,j), ' new image: ', nim(i,j) prob = 1 endif 500 continue 520 continue if (prob .eq. 0) then call MESSAGE(VERBO_HI, 'Image is correct') endif prob = 0 do 550 i=1,768 if (opal(i) .ne. npal(i)) then print *, ' ERROR at ',i, 'old pal: ', opal(i), * ' new pal: ', npal(i) prob = 1 endif 550 continue if (prob .eq. 0) then call MESSAGE(VERBO_HI, 'Palette is correct') endif return end C******************************************************** C C check_im2_pal C C******************************************************** subroutine check_im2_pal(od1,od2,nd1,nd2,oim,nim,opal,npal) implicit none include 'fortest.inc' integer od1, od2, nd1, nd2 character oim(321, 111), nim(321, 111) character opal(768), npal(768) integer prob, i, j prob = 0 call MESSAGE(VERBO_HI, 'Checking image and palette') if (od1 .ne. nd1 .OR. od2 .ne. nd2) then print *, ' >>> DIMENSIONS WRONG <<< ' prob = 1 endif do 520 j=1, 111 do 500 i=1,321 if (oim(i,j) .ne. nim(i,j)) then print *, ' ERROR at ', i, j,' old image: ', * oim(i,j), ' new image: ', nim(i,j) prob = 1 endif 500 continue 520 continue if (prob .eq. 0) then call MESSAGE(VERBO_HI, 'Image is correct') endif prob = 0 do 550 i=1,768 if (opal(i) .ne. npal(i)) then print *, ' ERROR at ',i, 'old pal: ', opal(i), * ' new pal: ', npal(i) prob = 1 endif 550 continue if (prob .eq. 0) then call MESSAGE(VERBO_HI, 'Palette is correct') endif return end hdf4-hdf4.3.1/hdf/test/tree.c000066400000000000000000000076721503061704500156660ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* FILE tree.c Test HDF Threaded-Balanced-Binary Tree (tbbt) routines. */ #include #include "tproto.h" #include "tbbt_priv.h" #define MAX_TEST_SIZE 31 /* maximum number of elements to insert */ #define NUM_TEST_RUNS 100 /* number of times to insert & remove each size */ #define SEED(s) (srand(s)) #define RandInt(a, b) ((rand() % (((b) - (a)) + 1)) + (a)) static void swap_arr(int32 *arr, intn a, intn b); intn tcompare(void *k1, void *k2, intn cmparg); static void swap_arr(int32 *arr, intn a, intn b) { int32 t; if (a != b) { t = arr[a]; arr[a] = arr[b]; arr[b] = t; } /* end if */ } /* end swap_arr() */ intn tcompare(void *k1, void *k2, intn cmparg) { (void)cmparg; return (intn)((*(int32 *)k1) - (*(int32 *)k2)); } void test_tbbt(void) { intn test_size; intn i, j; int32 ins_arr[MAX_TEST_SIZE]; int32 rem_arr[MAX_TEST_SIZE]; intn t; TBBT_TREE *tree; void **r; t = (intn)time(NULL); SEED((uintn)t); for (test_size = 3; test_size <= MAX_TEST_SIZE; test_size++) { MESSAGE(7, printf("\nTesting trees with %d elements\n", test_size);); MESSAGE(8, printf("Testing tree #:");); for (j = 0; j < NUM_TEST_RUNS; j++) { MESSAGE(8, printf(" %d", j);); for (i = 0; i < test_size; i++) { /* initialize the arrays */ ins_arr[i] = i; rem_arr[i] = i; } /* end for */ for (i = 0; i < test_size; i++) { /* shuffle the arrays */ t = RandInt(i, test_size - 1); swap_arr(ins_arr, i, t); t = RandInt(i, test_size - 1); swap_arr(rem_arr, i, t); } /* end for */ if (Verbosity > 9) { printf("ins_arr: \n"); for (i = 0; i < test_size; i++) /* print the arrays */ printf("%d \n", (int)ins_arr[i]); printf("\nrem_arr: \n"); for (i = 0; i < test_size; i++) /* print the arrays */ printf("%d \n", (int)rem_arr[i]); printf("\n"); } /* end if */ tree = tbbtdmake(tcompare, sizeof(int32), 0); for (i = 0; i < test_size; i++) { MESSAGE(9, printf("inserting %d\n", (int)ins_arr[i]);); tbbtdins(tree, (void *)&ins_arr[i], NULL); MESSAGE(9, tbbtdump(tree, -1);); } MESSAGE(9, tbbtdump(tree, -1);); for (i = 0; i < test_size; i++) { int32 key; key = rem_arr[i]; r = (void **)tbbtdfind(tree, (void *)&key, NULL); MESSAGE(9, printf("removing %d\n", (int)key);); tbbtrem((TBBT_NODE **)tree, (TBBT_NODE *)r, NULL); MESSAGE(9, tbbtdump(tree, -1);); } /* end for */ tbbtdfree(tree, NULL, NULL); } /* end for */ } /* end for */ } /* end test_tbbt() */ hdf4-hdf4.3.1/hdf/test/tsdmmsf.f000066400000000000000000000231021503061704500163710ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tsdmmsf (number_failed) C C C Program to test writing SDSs with different types of data and C scales and max/min values. C C Input file: none C Output files: o0, o1, ... o6 C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'sdmms') real*8 f64(10,10), tf64(10,10) real*8 f64scale(10), tf64scale(10) real*8 f64max, f64min, tf64max, tf64min real*8 cal, cale, ioff, ioffe real*8 ical, icale, iioff, iioffe integer*4 ctype, ictype real*4 f32(10,10), tf32(10,10) real*4 f32scale(10), tf32scale(10) real*4 f32max, f32min, tf32max, tf32min character i8(10,10), ti8(10,10) character i8scale(10), ti8scale(10), i8max, i8min character ti8max, ti8min C Align the Character variables with the surrogate names. C Need to do this because HDF always assume int8 is a packed 8 bits C quantities of precisely 1 byte big. Integer*1 may have memory size C as large as a normal integer (e.g. Cray). C Cannot just use the character variables as for some compilers, C the argument address of a character argument is not compatible with C that of a numerical argument. integer surri8, surri8max, surri8min, surri8scale integer surrti8, surrti8max, surrti8min, surrti8scale equivalence (i8, surri8) equivalence (i8scale, surri8scale) equivalence (i8min, surri8min) equivalence (i8max, surri8max) equivalence (ti8, surrti8) equivalence (ti8scale, surrti8scale) equivalence (ti8min, surrti8min) equivalence (ti8max, surrti8max) integer*2 i16(10,10), ti16(10,10) integer*2 i16scale(10), ti16scale(10), i16max, i16min integer*2 ti16max, ti16min integer*4 i32(10,10), ti32(10,10) integer*4 i32scale(10), ti32scale(10), i32max, i32min integer*4 ti32max, ti32min integer i, j, err, err1, err2, err3, err4 integer rank, dims(2) call ptestban('Testing', myname) f64max = 40.0 f64min = 0.0 f32max = 40.0 f32min = 0.0 i8max = char(127) C NOTE: If you get a compile error on the "char(-128)" line, substitute C the "char(0)" line. Its not quite as thorough a test, but... i8min = char(0) C i8min = char(-128) i16max = 1200 i16min = -1200 i32max = 99999999 i32min = -999999999 rank = 2 dims(1) = 10 dims(2) = 10 number_failed = 0 C C Set up some calibration info C cal = 10.0 cale = 35.235 ioff = 16.75 ioffe = 47.8 ctype = DFNT_INT16 call MESSAGE(5, 'Creating arrays...') do 110 i=1,10 do 100 j=1,10 f64(i,j) = (i * 40) + j f32(i,j) = (i * 40) + j i8(i,j) = char( (i * 10) + j ) i16(i,j) = (i * 3000) + j i32(i,j) = (i * 20) + j 100 continue f64scale(i) = (i * 40) + j f32scale(i) = (i * 40) + j i8scale(i) = char((i * 10) + j) i16scale(i) = (i * 3000) + j i32scale(i) = (i * 20) + j 110 continue err1 = dssdims(rank, dims) C C Writing dimscale, max/min, and arrays to a single file C call MESSAGE(5, 'Writing arrays to single file...') err = dssnt(DFNT_FLOAT64) err1 = dssdisc(1, 10, f64scale) err2 = dssrang(f64max, f64min) err4 = dsscal(cal, cale, ioff, ioffe, ctype) err3 = dsadata('of.hdf', rank, dims, f64) call errchkio(err1, err2, err3, number_failed, 'float64 write') if(err4.eq.(-1)) then number_failed = number_failed + 1 print *, '>>> Setting calibration failed' endif err = dssnt(DFNT_FLOAT32) err1 = dssdisc(1, 10, f32scale) err2 = dssrang(f32max, f32min) err3 = dsadata('of.hdf', rank, dims, f32) call errchkio(err1, err2, err3, number_failed, 'float32 write') err = dssnt(DFNT_INT8) err1 = dssdisc(1, 10, surri8scale) err2 = dssrang(surri8max, surri8min) err3 = dsadata('of.hdf', rank, dims, surri8) call errchkio(err1, err2, err3, number_failed, 'int8 write') err = dssnt(DFNT_INT16) err1 = dssdisc(1, 10, i16scale) err2 = dssrang(i16max, i16min) err3 = dsadata('of.hdf', rank, dims, i16) call errchkio(err1, err2, err3, number_failed, 'int16 write') err = dssnt(DFNT_INT32) err1 = dssdisc(1, 10, i32scale) err2 = dssrang(i32max, i32min) err3 = dsadata('of.hdf', rank, dims, i32) call errchkio(err1, err2, err3, number_failed, 'int32 write') C C Reading back dimscales, max/min, and arrays from single file C err1 = dsgdata('of.hdf', rank, dims, tf64) err2 = dsgdisc(1, 10, tf64scale) err3 = dsgrang(tf64max, tf64min) err4 = dsgcal(ical, icale, iioff, iioffe, ictype) call errchkio(err1, err2, err3, number_failed, 'float64 read') if(err4.eq.(-1)) then number_failed = number_failed + 1 print *, '>>> Reading calibration failed' endif if((cal.ne.ical).or.(cale.ne.icale)) then if((ioff.ne.iioff).or.(ioff.ne.iioffe)) then if(ctype.ne.ictype) then print *, '>>>Returned calibration values are wrong' print *, ical, icale print *, iioff, iioffe print *, ictype print *, cal, cale print *, ioff, ioffe print *, ctype number_failed = number_failed + 1 endif endif endif err1 = dsgdata('of.hdf', rank, dims, tf32) err2 = dsgdisc(1, 10, tf32scale) err3 = dsgrang(tf32max, tf32min) err4 = dsgcal(ical, icale, iioff, iioffe, ictype) call errchkio(err1, err2, err3, number_failed, 'float32 read') if(err4.ne.(-1)) then number_failed = number_failed + 1 print *, '>>> Read calibration where none stored' endif err1 = dsgdata('of.hdf', rank, dims, surrti8) err2 = dsgdisc(1, 10, surrti8scale) err3 = dsgrang(surrti8max, surrti8min) call errchkio(err1, err2, err3, number_failed, 'int8 read') err1 = dsgdata('of.hdf', rank, dims, ti16) err2 = dsgdisc(1, 10, ti16scale) err3 = dsgrang(ti16max, ti16min) call errchkio(err1, err2, err3, number_failed, 'int16 read') err1 = dsgdata('of.hdf', rank, dims, ti32) err2 = dsgdisc(1, 10, ti32scale) err3 = dsgrang(ti32max, ti32min) call errchkio(err1, err2, err3, number_failed, 'int32 read') C C Checking dimscales, max/min and arrays from single file C call MESSAGE(5, + 'Checking dimscales, max/min & arrays from single file') C float64 err1 = 0 err2 = 0 err3 = 0 do 1010 i=1,10 do 1000 j=1,10 if (f64(i,j) .ne. tf64(i,j)) err1 = 1 1000 continue if (f64scale(i) .ne. tf64scale(i)) err2 = 1 1010 continue if ((f64max .ne. tf64max) .or. (f64min .ne. tf64min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'float64') C float32 err1 = 0 err2 = 0 err3 = 0 do 1030 i=1,10 do 1020 j=1,10 if (f32(i,j) .ne. tf32(i,j)) err1 = 1 1020 continue if (f32scale(i) .ne. tf32scale(i)) err2 = 1 1030 continue if ((f32max .ne. tf32max) .or. (f32min .ne. tf32min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'float32') C int8 err1 = 0 err2 = 0 err3 = 0 do 1110 i=1,10 do 1100 j=1,10 if (i8(i,j) .ne. ti8(i,j)) err1 = 1 1100 continue if (i8scale(i) .ne. ti8scale(i)) err2 = 1 1110 continue if ((i8max .ne. ti8max) .or. (i8min .ne. ti8min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int8') C int16 err1 = 0 err2 = 0 err3 = 0 do 1210 i=1,10 do 1200 j=1,10 if (i16(i,j) .ne. ti16(i,j)) err1 = 1 1200 continue if (i16scale(i) .ne. ti16scale(i)) err2 = 1 1210 continue if ((i16max .ne. ti16max) .or. (i16min .ne. ti16min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int16') C int32 err1 = 0 err2 = 0 err3 = 0 do 1310 i=1,10 do 1300 j=1,10 if (i32(i,j) .ne. ti32(i,j)) err1 = 1 1300 continue if (i32scale(i) .ne. ti32scale(i)) err2 = 1 1310 continue if ((i32max .ne. ti32max) .or. (i32min .ne. ti32min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int32') C C Sum up C if (number_failed .gt. 0 ) then print *, ' >>> ', number_failed, ' TESTS FAILED <<<' else if (verbosity .ge. VERBO_HI) then print *, ' >>> ALL TESTS PASSED <<<' endif endif return end hdf4-hdf4.3.1/hdf/test/tsdnmmsf.f000066400000000000000000000217101503061704500165520ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tsdnmmsf (number_failed) implicit none C C C Program to test writing SDSs with different types of data and C scales and max/min values. C C Input file: none C Output files: fon.hdf C integer number_failed character*20 myname parameter (myname = 'sdnmms') integer dsgdata, dsadata, dssdims, dssrang, dsgrang, dssnt integer dssdisc, dsgdisc real*8 f64(10,10), tf64(10,10) real*8 f64scale(10), tf64scale(10) real*8 f64max, f64min, tf64max, tf64min real*4 f32(10,10), tf32(10,10) real*4 f32scale(10), tf32scale(10) real*4 f32max, f32min, tf32max, tf32min characteri8(10,10), ti8(10,10) character i8scale(10), ti8scale(10), i8max, i8min character ti8max, ti8min C Align the Character variables with the surrogate names. C Need to do this because HDF always assume int8 is a packed 8 bits C quantities of precisely 1 byte big. Integer*1 may have memory size C as large as a normal integer (e.g. Cray). C Cannot just use the character variables as for some compilers, C the argument address of a character argument is not compatible with C that of a numerical argument. integer surri8, surri8max, surri8min, surri8scale integer surrti8, surrti8max, surrti8min, surrti8scale equivalence (i8, surri8) equivalence (i8scale, surri8scale) equivalence (i8min, surri8min) equivalence (i8max, surri8max) equivalence (ti8, surrti8) equivalence (ti8scale, surrti8scale) equivalence (ti8min, surrti8min) equivalence (ti8max, surrti8max) integer*2 i16(10,10), ti16(10,10) integer*2 i16scale(10), ti16scale(10), i16max, i16min integer*2 ti16max, ti16min integer*4 i32(10,10), ti32(10,10) integer*4 i32scale(10), ti32scale(10), i32max, i32min integer*4 ti32max, ti32min integer i, j, err, err1, err2, err3 integer rank, dims(2) integer DFNT_NFLOAT64, DFNT_NFLOAT32, DFNT_NINT8, DFNT_NINT16 integer DFNT_NINT32, DFNT_NATIVE integer DFNT_FLOAT64, DFNT_FLOAT32, DFNT_INT8, DFNT_INT16 integer DFNT_INT32 call ptestban('Testing', myname) f64max = 40.0 f64min = 0.0 f32max = 40.0 f32min = 0.0 i8max = char(127) C NOTE: If you get a compile error on the "char(-128)" line, substitute C the "char(0)" line. Its not quite as thorough a test, but... i8min = char(0) C i8min = char(-128) i16max = 1200 i16min = -1200 i32max = 99999999 i32min = -999999999 rank = 2 dims(1) = 10 dims(2) = 10 number_failed = 0 DFNT_FLOAT64 = 6 DFNT_FLOAT32 = 5 DFNT_INT8 = 20 DFNT_INT16 = 22 DFNT_INT32 = 24 DFNT_NATIVE = 4096 C These should really use a logical OR to compute these values C However, OR() is not really that portable DFNT_NFLOAT64 = DFNT_NATIVE + DFNT_FLOAT64 DFNT_NFLOAT32 = DFNT_NATIVE + DFNT_FLOAT32 DFNT_NINT8 = DFNT_NATIVE + DFNT_INT8 DFNT_NINT16 = DFNT_NATIVE + DFNT_INT16 DFNT_NINT32 = DFNT_NATIVE + DFNT_INT32 call MESSAGE(5, 'Creating arrays...') do 110 i=1,10 do 100 j=1,10 f64(i,j) = (i * 40) + j f32(i,j) = (i * 40) + j i8(i,j) = char( (i * 10) + j ) i16(i,j) = (i * 3000) + j i32(i,j) = (i * 20) + j 100 continue f64scale(i) = (i * 40) + j f32scale(i) = (i * 40) + j i8scale(i) = char((i * 10) + j) i16scale(i) = (i * 3000) + j i32scale(i) = (i * 20) + j 110 continue err1 = dssdims(rank, dims) C C Writing dimscale, max/min, and arrays to a single file C call MESSAGE(5, 'Writing arrays to single file...') err = dssnt(DFNT_NFLOAT64) err1 = dssdisc(1, 10, f64scale) err2 = dssrang(f64max, f64min) err3 = dsadata('fon.hdf', rank, dims, f64) call errchkio(err1, err2, err3, number_failed, 'float64 write') err = dssnt(DFNT_NFLOAT32) err1 = dssdisc(1, 10, f32scale) err2 = dssrang(f32max, f32min) err3 = dsadata('fon.hdf', rank, dims, f32) call errchkio(err1, err2, err3, number_failed, 'float32 write') err = dssnt(DFNT_NINT8) err1 = dssdisc(1, 10, surri8scale) err2 = dssrang(surri8max, surri8min) err3 = dsadata('fon.hdf', rank, dims, surri8) call errchkio(err1, err2, err3, number_failed, 'int8 write') err = dssnt(DFNT_NINT16) err1 = dssdisc(1, 10, i16scale) err2 = dssrang(i16max, i16min) err3 = dsadata('fon.hdf', rank, dims, i16) call errchkio(err1, err2, err3, number_failed, 'int16 write') err = dssnt(DFNT_NINT32) err1 = dssdisc(1, 10, i32scale) err2 = dssrang(i32max, i32min) err3 = dsadata('fon.hdf', rank, dims, i32) call errchkio(err1, err2, err3, number_failed, 'int32 write') C C Reading back dimscales, max/min, and arrays from single file C err1 = dsgdata('fon.hdf', rank, dims, tf64) err2 = dsgdisc(1, 10, tf64scale) err3 = dsgrang(tf64max, tf64min) call errchkio(err1, err2, err3, number_failed, 'float64 read') err1 = dsgdata('fon.hdf', rank, dims, tf32) err2 = dsgdisc(1, 10, tf32scale) err3 = dsgrang(tf32max, tf32min) call errchkio(err1, err2, err3, number_failed, 'float32 read') err1 = dsgdata('fon.hdf', rank, dims, surrti8) err2 = dsgdisc(1, 10, surrti8scale) err3 = dsgrang(surrti8max, surrti8min) call errchkio(err1, err2, err3, number_failed, 'int8 read') err1 = dsgdata('fon.hdf', rank, dims, ti16) err2 = dsgdisc(1, 10, ti16scale) err3 = dsgrang(ti16max, ti16min) call errchkio(err1, err2, err3, number_failed, 'int16 read') err1 = dsgdata('fon.hdf', rank, dims, ti32) err2 = dsgdisc(1, 10, ti32scale) err3 = dsgrang(ti32max, ti32min) call errchkio(err1, err2, err3, number_failed, 'int32 read') C C Checking dimscales, max/min and arrays from single file C call MESSAGE(5, + 'Checking dimscales, max/min & arrays from single file') C float64 err1 = 0 err2 = 0 err3 = 0 do 1010 i=1,10 do 1000 j=1,10 if (f64(i,j) .ne. tf64(i,j)) err1 = 1 1000 continue if (f64scale(i) .ne. tf64scale(i)) err2 = 1 1010 continue if ((f64max .ne. tf64max) .or. (f64min .ne. tf64min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'float64') C float32 err1 = 0 err2 = 0 err3 = 0 do 1030 i=1,10 do 1020 j=1,10 if (f32(i,j) .ne. tf32(i,j)) err1 = 1 1020 continue if (f32scale(i) .ne. tf32scale(i)) err2 = 1 1030 continue if ((f32max .ne. tf32max) .or. (f32min .ne. tf32min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'float32') C int8 err1 = 0 err2 = 0 err3 = 0 do 1110 i=1,10 do 1100 j=1,10 if (i8(i,j) .ne. ti8(i,j)) err1 = 1 1100 continue if (i8scale(i) .ne. ti8scale(i)) err2 = 1 1110 continue if ((i8max .ne. ti8max) .or. (i8min .ne. ti8min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int8') C int16 err1 = 0 err2 = 0 err3 = 0 do 1210 i=1,10 do 1200 j=1,10 if (i16(i,j) .ne. ti16(i,j)) err1 = 1 1200 continue if (i16scale(i) .ne. ti16scale(i)) err2 = 1 1210 continue if ((i16max .ne. ti16max) .or. (i16min .ne. ti16min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int16') C int32 err1 = 0 err2 = 0 err3 = 0 do 1310 i=1,10 do 1300 j=1,10 if (i32(i,j) .ne. ti32(i,j)) err1 = 1 1300 continue if (i32scale(i) .ne. ti32scale(i)) err2 = 1 1310 continue if ((i32max .ne. ti32max) .or. (i32min .ne. ti32min)) err3 = 1 call errchkarr(err1, err2, err3, number_failed, 'int32') C C Sum up C if (number_failed .gt. 0 ) then print *, ' >>> ', number_failed, ' TESTS FAILED <<<' else call MESSAGE(5, ' >>> ALL TESTS PASSED <<<') endif return end hdf4-hdf4.3.1/hdf/test/tsdnntf.f000066400000000000000000000160341503061704500164020ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tsdnntf (number_failed) C C C Program to test writing SDSs with different types of data. C C Input file: none C Output files: fo1.hdf, fo2.hdf, ...fo5.hdf, fo.hdf C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'sdnnt') real*8 f64(10,10), tf64(10,10) real*4 f32(10,10), tf32(10,10) integer*2 i16(10,10), ti16(10,10) integer*4 i32(10,10), ti32(10,10) character i8(10,10), ti8(10,10) integer i, j, err integer rank integer dims(2) call ptestban('Testing', myname) rank = 2 dims(1) = 10 dims(2) = 10 number_failed = 0 call MESSAGE(5, 'Creating arrays...') do 110 i=1,10 do 100 j=1,10 f64(i,j) = (i * 10) + j f32(i,j) = (i * 10) + j i8(i,j) = char( (i * 10) + j ) i16(i,j) = (i * 10) + j i32(i,j) = (i * 10) + j 100 continue 110 continue err = dssdims(rank, dims) C individual files call MESSAGE(5, 'Testing arrays in individual files...') err = dssnt(DFNT_NFLOAT64) call VRFY(err, 'dssnt (float64)', number_failed) err = dspdata('fo1.hdf', rank, dims, f64) call VRFY(err, 'dspdata (float64)', number_failed) err = dsgdata('fo1.hdf', rank, dims, tf64) call VRFY(err, 'dsgdata (float64)', number_failed) err = 0 do 160 i=1,10 do 150 j=1,10 if (f64(i,j).ne.tf64(i,j)) err = 1 tf64(i,j) = 0.0 150 continue 160 continue call err_check(err, number_failed, 'float64') err = dssnt(DFNT_NFLOAT32) call VRFY(err, 'dssnt (float32)', number_failed) err = dspdata('fo2.hdf', rank, dims, f32) call VRFY(err, 'dspdata (float32)', number_failed) err = dsgdata('fo2.hdf', rank, dims, tf32) call VRFY(err, 'dsgdata (float32)', number_failed) err = 0 do 210 i=1,10 do 200 j=1,10 if (f32(i,j).ne.tf32(i,j)) err = 1 tf32(i,j) = 0.0 200 continue 210 continue call err_check(err, number_failed, 'float32') err = dssnt(DFNT_NINT8) call VRFY(err, 'dssnt (int8)', number_failed) err = dspdata('fo3.hdf', rank, dims, i8) call VRFY(err, 'dspdata (int8)', number_failed) err = dsgdata('fo3.hdf', rank, dims, ti8) call VRFY(err, 'dsgdata (int8)', number_failed) err = 0 do 310 i=1,10 do 300 j=1,10 if (i8(i,j).ne.ti8(i,j)) err = 1 ti8(i,j) = char(0) 300 continue 310 continue call err_check(err, number_failed, 'int8') err = dssnt(DFNT_NINT16) call VRFY(err, 'dssnt (int16)', number_failed) err = dspdata('fo4.hdf', rank, dims, i16) call VRFY(err, 'dspdata (int16)', number_failed) err = dsgdata('fo4.hdf', rank, dims, ti16) call VRFY(err, 'dsgdata (int16)', number_failed) err = 0 do 410 i=1,10 do 400 j=1,10 if (i16(i,j).ne.ti16(i,j)) err = 1 ti16(i,j) = 0 400 continue 410 continue call err_check(err, number_failed, 'int16') err = dssnt(DFNT_NINT32) call VRFY(err, 'dssnt (int32)', number_failed) err = dspdata('fo5.hdf', rank, dims, i32) call VRFY(err, 'dspdata (int32)', number_failed) err = dsgdata('fo5.hdf', rank, dims, ti32) call VRFY(err, 'dsgdata (int32)', number_failed) err = 0 do 510 i=1,10 do 500 j=1,10 if (i32(i,j).ne.ti32(i,j)) err = 1 ti32(i,j) = 0 500 continue 510 continue call err_check(err, number_failed, 'int32') C call MESSAGE(5, 'Writing arrays to single file.') C err = dssnt(DFNT_NFLOAT64) err = dsadata('fo.hdf', rank, dims, f64) call VRFY(err, 'dsadata (f64)', number_failed) err = dssnt(DFNT_NFLOAT32) err = dsadata('fo.hdf', rank, dims, f32) call VRFY(err, 'dsadata (f32)', number_failed) err = dssnt(DFNT_NINT8) err = dsadata('fo.hdf', rank, dims, i8) call VRFY(err, 'dsadata (i8)', number_failed) err = dssnt(DFNT_NINT16) err = dsadata('fo.hdf', rank, dims, i16) call VRFY(err, 'dsadata (i16)', number_failed) err = dssnt(DFNT_NINT32) err = dsadata('fo.hdf', rank, dims, i32) call VRFY(err, 'dsadata (i32)', number_failed) C call MESSAGE(5, 'Reading arrays from single file... ') C err = dsgdata('fo.hdf', rank, dims, tf64) call VRFY(err, 'dsgdata (tf64)', number_failed) err = dsgdata('fo.hdf', rank, dims, tf32) call VRFY(err, 'dsgdata (tf32)', number_failed) err = dsgdata('fo.hdf', rank, dims, ti8) call VRFY(err, 'dsgdata (ti8)', number_failed) err = dsgdata('fo.hdf', rank, dims, ti16) call VRFY(err, 'dsgdata (ti16)', number_failed) err = dsgdata('fo.hdf', rank, dims, ti32) call VRFY(err, 'dsgdata (ti32)', number_failed) C call MESSAGE(5, 'Checking arrays from single file...\n\n') err = 0 do 910 i=1,10 do 900 j=1,10 if (f64(i,j) .ne. tf64(i,j)) err = 1 900 continue 910 continue call err_check(err, number_failed, 'float64') C err = 0 do 1010 i=1,10 do 1000 j=1,10 if (f32(i,j) .ne. tf32(i,j)) err = 1 1000 continue 1010 continue call err_check(err, number_failed, 'float32') C err = 0 do 1110 i=1,10 do 1100 j=1,10 if (i8(i,j) .ne. ti8(i,j)) err = 1 1100 continue 1110 continue call err_check(err, number_failed, 'int8') C err = 0 do 1210 i=1,10 do 1200 j=1,10 if (i16(i,j) .ne. ti16(i,j)) err = 1 1200 continue 1210 continue call err_check(err, number_failed, 'int16') C err = 0 do 1310 i=1,10 do 1300 j=1,10 if (i32(i,j) .ne. ti32(i,j)) err = 1 1300 continue 1310 continue call err_check(err, number_failed, 'int32') C if (number_failed .gt. 0 ) then print *,' >>> ', number_failed, ' TESTS FAILED <<<' else call MESSAGE(VERBO_HI, ' >>> ALL TESTS PASSED <<<') endif return end hdf4-hdf4.3.1/hdf/test/tsdntf.f000066400000000000000000000157451503061704500162340ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tsdntf (number_failed) C C C Program to test writing SDSs with different types of data. C C Input file: none C Output files: o.hdf.1, o.hdf.2, ... o.hdf.5 C implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'sdnt') real*8 f64(10,10), tf64(10,10) real*4 f32(10,10), tf32(10,10) integer*2 i16(10,10), ti16(10,10) integer*4 i32(10,10), ti32(10,10) character i8(10,10), ti8(10,10) integer i, j, err integer rank integer dims(2) call ptestban('Testing', myname) number_failed = 0 rank = 2 dims(1) = 10 dims(2) = 10 call MESSAGE(5, 'Creating arrays...') do 110 i=1,10 do 100 j=1,10 f64(i,j) = (i * 10) + j f32(i,j) = (i * 10) + j i8(i,j) = char( (i * 10) + j ) i16(i,j) = (i * 10) + j i32(i,j) = (i * 10) + j 100 continue 110 continue err = dssdims(rank, dims) C individual files call MESSAGE(5, 'Testing arrays in individual files...') err = dssnt(DFNT_FLOAT64) call VRFY(err, 'dssnt (float64)', number_failed) err = dspdata('o1.hdf', rank, dims, f64) call VRFY(err, 'dspdata (float64)', number_failed) err = dsgdata('o1.hdf', rank, dims, tf64) call VRFY(err, 'dsgdata (float64)', number_failed) err = 0 do 160 i=1,10 do 150 j=1,10 if (f64(i,j).ne.tf64(i,j)) err = 1 tf64(i,j) = 0.0 150 continue 160 continue call err_check(err, number_failed, 'float64') err = dssnt(DFNT_FLOAT32) call VRFY(err, 'dssnt (float32)', number_failed) err = dspdata('o2.hdf', rank, dims, f32) call VRFY(err, 'dspdata (float32)', number_failed) err = dsgdata('o2.hdf', rank, dims, tf32) call VRFY(err, 'dsgdata (float32)', number_failed) err = 0 do 210 i=1,10 do 200 j=1,10 if (f32(i,j).ne.tf32(i,j)) err = 1 tf32(i,j) = 0.0 200 continue 210 continue call err_check(err, number_failed, 'float32') err = dssnt(DFNT_INT8) call VRFY(err, 'dssnt (int8)', number_failed) err = dspdata('o3.hdf', rank, dims, i8) call VRFY(err, 'dspdata (int8)', number_failed) err = dsgdata('o3.hdf', rank, dims, ti8) call VRFY(err, 'dsgdata (int8)', number_failed) err = 0 do 310 i=1,10 do 300 j=1,10 if (i8(i,j).ne.ti8(i,j)) err = 1 ti8(i,j) = char(0) 300 continue 310 continue call err_check(err, number_failed, 'int8') err = dssnt(DFNT_INT16) call VRFY(err, 'dssnt (int16)', number_failed) err = dspdata('o4.hdf', rank, dims, i16) call VRFY(err, 'dspdata (int16)', number_failed) err = dsgdata('o4.hdf', rank, dims, ti16) call VRFY(err, 'dsgdata (int16)', number_failed) err = 0 do 410 i=1,10 do 400 j=1,10 if (i16(i,j).ne.ti16(i,j)) err = 1 ti16(i,j) = 0 400 continue 410 continue call err_check(err, number_failed, 'int16') err = dssnt(DFNT_INT32) call VRFY(err, 'dssnt (int32)', number_failed) err = dspdata('o5.hdf', rank, dims, i32) call VRFY(err, 'dspdata (int32)', number_failed) err = dsgdata('o5.hdf', rank, dims, ti32) call VRFY(err, 'dsgdata (int32)', number_failed) err = 0 do 510 i=1,10 do 500 j=1,10 if (i32(i,j).ne.ti32(i,j)) err = 1 ti32(i,j) = 0 500 continue 510 continue call err_check(err, number_failed, 'int32') C call MESSAGE(5, 'Writing arrays to single file.') C err = dssnt(DFNT_FLOAT64) err = dsadata('ntf.hdf', rank, dims, f64) call VRFY(err, 'dsadata (f64)', number_failed) err = dssnt(DFNT_FLOAT32) err = dsadata('ntf.hdf', rank, dims, f32) call VRFY(err, 'dsadata (f32)', number_failed) err = dssnt(DFNT_INT8) err = dsadata('ntf.hdf', rank, dims, i8) call VRFY(err, 'dsadata (i8)', number_failed) err = dssnt(DFNT_INT16) err = dsadata('ntf.hdf', rank, dims, i16) call VRFY(err, 'dsadata (i16)', number_failed) err = dssnt(DFNT_INT32) err = dsadata('ntf.hdf', rank, dims, i32) call VRFY(err, 'dsadata (i32)', number_failed) C call MESSAGE(5, 'Reading arrays from single file... ') C err = dsgdata('ntf.hdf', rank, dims, tf64) call VRFY(err, 'dsgdata (tf64)', number_failed) err = dsgdata('ntf.hdf', rank, dims, tf32) call VRFY(err, 'dsgdata (tf32)', number_failed) err = dsgdata('ntf.hdf', rank, dims, ti8) call VRFY(err, 'dsgdata (ti8)', number_failed) err = dsgdata('ntf.hdf', rank, dims, ti16) call VRFY(err, 'dsgdata (ti16)', number_failed) err = dsgdata('ntf.hdf', rank, dims, ti32) call VRFY(err, 'dsgdata (ti32)', number_failed) C call MESSAGE(5, 'Checking arrays from single file...\n\n') err = 0 do 910 i=1,10 do 900 j=1,10 if (f64(i,j) .ne. tf64(i,j)) err = 1 900 continue 910 continue call err_check(err, number_failed, 'float64') C err = 0 do 1010 i=1,10 do 1000 j=1,10 if (f32(i,j) .ne. tf32(i,j)) err = 1 1000 continue 1010 continue call err_check(err, number_failed, 'float32') C err = 0 do 1110 i=1,10 do 1100 j=1,10 if (i8(i,j) .ne. ti8(i,j)) err = 1 1100 continue 1110 continue call err_check(err, number_failed, 'int8') C err = 0 do 1210 i=1,10 do 1200 j=1,10 if (i16(i,j) .ne. ti16(i,j)) err = 1 1200 continue 1210 continue call err_check(err, number_failed, 'int16') C err = 0 do 1310 i=1,10 do 1300 j=1,10 if (i32(i,j) .ne. ti32(i,j)) err = 1 1300 continue 1310 continue call err_check(err, number_failed, 'int32') C if (number_failed .gt. 0 ) then print *,' >>> ', number_failed, ' TESTS FAILED <<<' else call MESSAGE(VERBO_HI, ' >>> ALL TESTS PASSED <<<') endif return end hdf4-hdf4.3.1/hdf/test/tsdstrf.f000066400000000000000000000107051503061704500164120ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C subroutine tsdstrf (num_failed) implicit none C C This program tests correctness of writing and read datastrings C and dimension strings. C To avoid the '\0' inserted by strncpy, compare the first 14 C characters of output and input strings in subroutine compare() integer num_failed character*20 myname parameter (myname = 'sdstr') integer rank, i, j, ret, err integer dims(2) integer dssnt, dssdims, dssdast, dssdist, dspdata integer dsgdast, dsgdist, dsgdata, DFNT_NFLOAT32 real f32(10,10), inf32(10,10) character*15 datalabel, dataunit, datafmt, coordsys character*15 dimlabels(2), dimunits(2), dimfmts(2) character*16 indatalabel, indataunit, indatafmt, incoordsys character*16 indimlabels(2), indimunits(2), indimfmts(2) character*15 fn call ptestban('Testing', myname) DFNT_NFLOAT32 = 4096+5 rank = 2 dims(1) = 10 dims(2) = 10 datalabel = 'Datalabel' dataunit = 'Dataunit' datafmt = 'Datafmt' coordsys = 'Coordsys' dimlabels(1) = 'f_dim1_label_b' dimunits(1) = 'f_dim1_unit_b ' dimfmts(1) = 'f_dim1_fmt_b ' dimlabels(2) = 'f_dim2_label_a' dimunits(2) = 'f_dim2_unit_a ' dimfmts(2) = 'f_dim2_fmt_a ' fn = 'sdstrsf.hdf' err = 0 num_failed = 0 call MESSAGE(5, 'Creating arrays...') do 110 i=1,dims(2) do 100 j=1,dims(1) f32(j,i) = (i*10) + j 100 continue 110 continue ret = dssdims(rank, dims) err = err + ret ret = dssnt(DFNT_NFLOAT32) err = err + ret ret = dssdast(datalabel, dataunit, datafmt, coordsys) err = err + ret ret = dssdist(1, dimlabels(1), dimunits(1), dimfmts(1)) err = err + ret ret = dssdist(2, dimlabels(2), dimunits(2), dimfmts(2)) err = err + ret ret = dspdata(fn, rank,dims, f32) err = err + ret call MESSAGE(5, 'Test strings written so far') ret = dsgdata(fn, rank, dims, inf32) err = err + ret ret = dsgdast(indatalabel, indataunit, indatafmt, incoordsys) err = err + ret ret = dsgdist(1, indimlabels(1), indimunits(1), indimfmts(1)) err = err + ret ret = dsgdist(2, indimlabels(2), indimunits(2), indimfmts(2)) err = err + ret call compare(datalabel, indatalabel, num_failed) call compare(dataunit, indataunit, num_failed) call compare(datafmt, indatafmt, num_failed) call compare(coordsys, incoordsys, num_failed) do 150 i=1,2 call compare(dimlabels(i), indimlabels(i), num_failed) call compare(dimunits(i), indimunits(i), num_failed) call compare(dimfmts(i), indimfmts(i), num_failed) 150 continue if ((err .eq. 0) .and. (num_failed .eq. 0)) then call MESSAGE(5, '>>>> All Tests Passed. >>>>') else print *, abs(err),' calls returned -1' print *, num_failed, ' values incorrect.' endif return end subroutine compare(outstring, instring, num) implicit none include 'fortest.inc' character*14 outstring, instring integer num C C Note, outstring and instring are of length 14 instead of 15. C if (outstring .ne. instring) then print *, 'Test failed for <', outstring,'>' print *, ' HDF says= <', instring,'>' num= num+ 1 else if (Verbosity .ge. VERBO_HI) then print *, 'Test passed for ', outstring endif endif return end hdf4-hdf4.3.1/hdf/test/tstubsf.f000066400000000000000000000321371503061704500164160ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ subroutine tstubsf (nerrors) implicit none include 'fortest.inc' integer nerrors character*20 myname parameter (myname = 'stubs') character ar0*10 character ar1*9 character ar2*30 character ar3*8 character in*20 integer dfile integer dfinfo(16) integer dlist(128) integer a0size, a1size, a2size, a3size integer ret, err, i, nd, dfenum, tag, ref, length integer t255 integer t127 integer r1 integer r3 integer r7 data t255 /255/ data t127 /127/ data r1 /1/ data r3 /3/ data r7 /7/ data ar0 /'Testing...'/ data ar1 /'...one...'/ data ar2 /'...two...'/ data ar3 /'...three'/ call ptestban('Testing', myname) nerrors = 0 a0size = len(ar0) a1size = len(ar1) a2size = len(ar2) a3size = len(ar3) C print *, 'This program will test the DF emulation layer' C print *, 'of HDF 3.2 and beyond (FORTRAN version). Many' C print *, 'routines will be tested individually. Each test' C print *, 'will report its name and results. If all goes' C print *, 'well, all of the results will begin with "Success".' C print *, 'If a test fails, the results line will begin with' C print *, '">>>Failure". An error count is kept and printed' C print *, 'out at the end.' C print *, 'Hit to continue.' C read(5,100) in C 100 format(a) C in(1:20) = ' ' call MESSAGE(VERBO_MED, 'Testing dferrno...') ret = dferrno() if (ret .ne. 0) then print *, '>>>Failure: Returned ', ret, ' rather than 0.' nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfishdf... (should fail)') ret = dfishdf('tstubsF.hdf') dfenum = dferrno() if (ret .eq. -1) then C print *, 'Success: dfishdf failed with DFerror = ', dfenum call MESSAGE(VERBO_HI, 'Success: dfishdf did fail') else print *, '>>>Failure: Non-existent file looks like HDF file.' print *, ' Maybe was a pre-existing file named "tstubsF.hdf"' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 endif call MESSAGE(VERBO_MED, 'Testing dfopen... (new file)') dfile = dfopen('tstubsF.hdf', 6, 0) dfenum = dferrno() if (dfile .eq. 0) then print *, '>>>Failure: Error ', dfenum, ' opening file.' print *, ' Quitting.' return else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfclose...') ret = dfclose(dfile) dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure: could not close file.' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, + 'Testing dfclose... (invalid file; should fail)') ret = dfclose(dfile) dfenum = dferrno() if (ret .eq. -1) then call MESSAGE(VERBO_HI, 'Success: dfclose did fail') else print *, '>>>Failure: Close allowed on unopened file.' nerrors = nerrors + 1 endif call MESSAGE(VERBO_MED, 'Testing dfopen... (existing file)') dfile = dfopen('tstubsF.hdf', 2, 0) dfenum = dferrno() if (dfile .eq. 0) then print *, '>>>Failure: Error ', dfenum, ' opening file.' print *, ' Quitting.' return else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfput...') ret = dfput(dfile, t255, r1, ar0, a0size) dfenum = dferrno() if (ret .ne. a0size) then print *, '>>>Failure: DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfget...') ret = dfget(dfile, t255, r1, in) dfenum = dferrno() if (ret .ne. a0size) then print *, '>>>Failure: read ', ret, ' of ', a0size, ' bytes.' print *, ' String read: ', in print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else err = 0 do 10 i=1, a0size if (in(i:i) .ne. ar0(i:i)) err = 1 10 continue if (err .eq. 1) then print *, '>>>Failure: strings differ.' print *, ' String written: ', ar0 print *, ' String read: ', in nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, + 'Success: string read is the same as written.') endif endif in(1:20) = ' ' call MESSAGE(VERBO_MED, 'Testing dfaccess (write)...') ret = dfaccess(dfile, t255, r3, 'w') dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfread... (should fail)') ret = dfread(dfile, in, 5) dfenum = dferrno() if (ret .eq. -1) then call MESSAGE(VERBO_HI, 'Success: dfread did fail') else print *, '>>>Failure: Read allowed on write element.' nerrors = nerrors + 1 endif in(1:20) = ' ' call MESSAGE(VERBO_MED, 'Testing dfwrite...') ret = dfwrite(dfile, ar1, a1size) dfenum = dferrno() if (ret .ne. a1size) then print *, '>>>Failure: wrote ', ret, ' of ', a1size, ' bytes.' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfaccess (read)...') ret = dfaccess(dfile, t255, r3, 'r') dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfwrite... (should fail)') ret = dfwrite(dfile, in, 5) dfenum = dferrno() if (ret .eq. -1) then call MESSAGE(VERBO_HI, 'Success: dfwrite did fail') else print *, '>>>Failure: write allowed on read element.' nerrors = nerrors + 1 endif call MESSAGE(VERBO_MED, 'Testing dfread...') ret = dfread(dfile, in, a1size) dfenum = dferrno() if (ret .ne. a1size) then print *, '>>>Failure: read ', ret, ' of ', a1size, ' bytes.' print *, ' String read: ', in print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else err = 0 do 40 i=1, a1size if (in(i:i) .ne. ar1(i:i)) err = 1 40 continue if (err .eq. 1) then print *, '>>>Failure: strings differ.' print *, ' String written: ', ar1 print *, ' String read: ', in nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, + 'Success: string read is the same as written.') endif endif in(1:20) = ' ' call MESSAGE(VERBO_MED, 'Testing dfnumber...') nd = dfnumber(dfile, t255) dfenum = dferrno() if (nd .ne. 2) then print *, '>>>Failure:' print *, ' Saw ', nd, ' occurrences of tag 255 not than 2.' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfdesc...') ret = dfdesc(dfile, dlist, 0, 5) dfenum = dferrno() C C add one for version tag C if (ret .ne. (nd + 1)) then print *, '>>>Failure: Returned ', ret, ' rather than ', nd+1 print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfupdate') ret = dfupdate(dfile) dfenum = dferrno() if (ret .ne. 0) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfstat') ret = dfstat(dfile, dfinfo) dfenum = dferrno() if (ret .ne. 0) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfnewref...') ret = dfnewref(dfile) dfenum = dferrno() if (ret .ne. 4) then print *, '>>>Failure: Returned ref. ', ret, ' instead of 4' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dfdup...') ret = dfdup(dfile, 127, r7, t255, r3) dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else ret = dfnumber(dfile, t127) dfenum = dferrno() if (ret .ne. 1) then print *, '>>>Failure: duplicated tag not found.' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif endif call MESSAGE(VERBO_MED, 'Testing dfdel...') ret = dfdel(dfile, t127, r7) dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else ret = dfnumber(dfile, t127) dfenum = dferrno() if (ret .ne. 0) then print *, '>>>Failure: found ', ret, ' deleted tags.' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif endif call MESSAGE(VERBO_MED, 'Testing dfsfind...') ret = dfsfind(dfile, 254, 0) dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure:' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif call MESSAGE(VERBO_MED, 'Testing dffind...') ret = dfdup(dfile, 254, 4, 255, 3) if (ret .ne. 0) then print *, '>>>DFdup 1 failed.' endif ret = dfdup(dfile, 254, 5, 255, 3) if (ret .ne. 0) then print *, '>>>DFdup 2 failed.' endif ret = dfdup(dfile, 254, 6, 255, 3) if (ret .ne. 0) then print *, '>>>DFdup 3 failed.' endif do 200 i=4,6 ret = dffind(dfile, tag, ref, length) dfenum = dferrno() if (ret .eq. -1) then print *, '>>>Failure on find #', i print *, ' DFerror = ', dfenum nerrors = nerrors + 1 else if ((tag .ne. 254) .or. (ref .ne. i) .or. + (length .ne. a1size)) then print *, '>>>Failure: tag/ref found is not correct.' print *, ' Looking for:' print *, ' tag: 254' print *, ' ref: ', i print *, ' length: ', a1size print *, ' Found:' print *, ' tag: ', tag print *, ' ref: ', ref print *, ' length: ', length nerrors = nerrors + 1 else call MESSAGE(VERBO_HI, 'Success!') endif endif 200 continue ret = dfclose(dfile) dfenum = dferrno() if (ret .ne. 0) then print *, '>>>Failure: dfclose failed (probably from open aid)' print *, ' DFerror = ', dfenum nerrors = nerrors + 1 endif if (nerrors .ne. 0) then print *, ' ', nerrors, ' errors were encountered.' else if (verbosity .ge. VERBO_HI) then print *, ' >>> ALL TESTS PASSED <<<' endif endif return end hdf4-hdf4.3.1/hdf/test/tszip.c000066400000000000000000001604161503061704500160740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * SZIP support eliminated for HDF4.2R1 */ #include "hdf.h" #include "tutils.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" /* * NOTE: these tests should be elaborated: * - use NN and EC options * - bigger datasets * - more data types */ #define FILE_NAME8 "RI_8_sziped.hdf" #define FILE_NAME16 "RI_16_sziped.hdf" #define FILE_NAME32 "RI_32_sziped.hdf" #define FILE_NAMEfl32 "RI_fl32_sziped.hdf" #define FILE_NAMEfl64 "RI_fl64_sziped.hdf" #define WIDTH 10 /* number of columns in the image */ #define LENGTH 6 /* number of rows in the image */ #define N_COMPS 3 /* number of components in the image */ #define IMAGE_NAME "Sziped_Image" /* * Sub-tests for test_mgr_szip(): * test_szip_RI8bit() * test_szip_RI16bit() * test_szip_RI32bit() * test_szip_RIfl32bit() * test_szip_RIfl64bit() * test_szip_chunk() */ /* * Write/Read szip compressed image with 8-bit integer data */ static void test_szip_RI8bit() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ index; int32 start[2], edges[2]; uint32 comp_config; comp_info cinfo; /* Compression parameters - union */ comp_info cinfo_out; /* Compression parameters read - union */ comp_coder_t comp_type; int8 out_data[LENGTH][WIDTH][N_COMPS]; int8 in_data[LENGTH][WIDTH][N_COMPS] = {{{10, 11, 12}, {13, 14, 15}, {40, 41, 42}, {43, 44, 45}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{20, 21, 22}, {23, 24, 25}, {50, 51, 52}, {53, 54, 55}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{30, 31, 32}, {33, 34, 35}, {60, 61, 62}, {63, 64, 65}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {70, 71, 72}, {73, 74, 75}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {80, 81, 82}, {83, 84, 85}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {90, 91, 92}, {93, 94, 95}}}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for sziped data */ file_id = Hopen(FILE_NAME8, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_INT8; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = WIDTH; dim_sizes[1] = LENGTH; /* Create the raster image array */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate:Failed to create a raster image for szip compression testing"); /* Define the location, pattern, and size of the data set */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Initialize for SZIP */ comp_type = COMP_CODE_SZIP; cinfo.szip.pixels_per_block = 2; cinfo.szip.options_mask = SZ_EC_OPTION_MASK; cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; cinfo.szip.pixels = 0; cinfo.szip.pixels_per_scanline = 0; cinfo.szip.bits_per_pixel = 0; /* Set the compression */ status = GRsetcompress(ri_id, comp_type, &cinfo); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetcompress"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_RI8bit(): %s\n", SKIP_STR);); return; } status = GRwriteimage(ri_id, start, NULL, edges, (void *)in_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the file to flush the compressed info to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file */ file_id = Hopen(FILE_NAME8, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image */ index = GRnametoindex(gr_id, IMAGE_NAME); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the whole image */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; status = GRreadimage(ri_id, start, NULL, edges, (void *)out_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Compare read data against input data */ if (0 != memcmp(out_data, in_data, sizeof(in_data))) printf("Error in reading the whole image \n"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_RI8bit */ /* * Write/Read szip compressed image with 16-bit integer data */ static void test_szip_RI16bit() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ index; int32 start[2], edges[2]; uint32 comp_config; comp_info cinfo; /* Compression parameters - union */ comp_info cinfo_out; /* Compression parameters read - union */ comp_coder_t comp_type; int16 out_data[LENGTH][WIDTH][N_COMPS]; int16 in_data[LENGTH][WIDTH][N_COMPS] = {{{10, 11, 12}, {13, 14, 15}, {40, 41, 42}, {43, 44, 45}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{20, 21, 22}, {23, 24, 25}, {50, 51, 52}, {53, 54, 55}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{30, 31, 32}, {33, 34, 35}, {60, 61, 62}, {63, 64, 65}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {70, 71, 72}, {73, 74, 75}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {80, 81, 82}, {83, 84, 85}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {90, 91, 92}, {93, 94, 95}}}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for sziped data */ file_id = Hopen(FILE_NAME16, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_INT16; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = WIDTH; dim_sizes[1] = LENGTH; /* Create the raster image array */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate:Failed to create a raster image for szip compression testing"); /* Define the location, pattern, and size of the data set */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Initialize for SZIP */ comp_type = COMP_CODE_SZIP; cinfo.szip.pixels_per_block = 2; cinfo.szip.options_mask = SZ_EC_OPTION_MASK; cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; cinfo.szip.pixels = 0; cinfo.szip.pixels_per_scanline = 0; cinfo.szip.bits_per_pixel = 0; /* Set the compression */ status = GRsetcompress(ri_id, comp_type, &cinfo); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetcompress"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_RI16bit(): %s\n", SKIP_STR);); return; } status = GRwriteimage(ri_id, start, NULL, edges, (void *)in_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the file to flush the compressed info to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file */ file_id = Hopen(FILE_NAME16, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image */ index = GRnametoindex(gr_id, IMAGE_NAME); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the whole image */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; status = GRreadimage(ri_id, start, NULL, edges, (void *)out_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Compare read data against input data */ if (0 != memcmp(out_data, in_data, sizeof(in_data))) printf("Error in reading the whole image \n"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_RI16bit */ /* * Write/Read szip compressed image with 32-bit integer data */ static void test_szip_RI32bit() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ index; int32 start[2], edges[2]; uint32 comp_config; comp_info cinfo; /* Compression parameters - union */ comp_info cinfo_out; /* Compression parameters read - union */ comp_coder_t comp_type; int32 out_data[LENGTH][WIDTH][N_COMPS]; int32 in_data[LENGTH][WIDTH][N_COMPS] = {{{10, 11, 12}, {13, 14, 15}, {40, 41, 42}, {43, 44, 45}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{20, 21, 22}, {23, 24, 25}, {50, 51, 52}, {53, 54, 55}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{30, 31, 32}, {33, 34, 35}, {60, 61, 62}, {63, 64, 65}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {70, 71, 72}, {73, 74, 75}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {80, 81, 82}, {83, 84, 85}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {90, 91, 92}, {93, 94, 95}}}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for sziped data */ file_id = Hopen(FILE_NAME32, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_INT32; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = WIDTH; dim_sizes[1] = LENGTH; /* Create the raster image array */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate:Failed to create a raster image for szip compression testing"); /* Define the location, pattern, and size of the data set */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Initialize for SZIP */ comp_type = COMP_CODE_SZIP; cinfo.szip.pixels_per_block = 2; cinfo.szip.options_mask = SZ_EC_OPTION_MASK; cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; cinfo.szip.pixels = 0; cinfo.szip.pixels_per_scanline = 0; cinfo.szip.bits_per_pixel = 0; /* Set the compression */ status = GRsetcompress(ri_id, comp_type, &cinfo); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetcompress"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_RI32bit(): %s\n", SKIP_STR);); return; } status = GRwriteimage(ri_id, start, NULL, edges, (void *)in_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the file to flush the compressed info to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file */ file_id = Hopen(FILE_NAME32, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image */ index = GRnametoindex(gr_id, IMAGE_NAME); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the whole image */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; status = GRreadimage(ri_id, start, NULL, edges, (void *)out_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Compare read data against input data */ if (0 != memcmp(out_data, in_data, sizeof(in_data))) printf("Error in reading the whole image \n"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_RI32bit */ /* * Write/Read szip compressed image with 32-bit floating point data */ static void test_szip_RIfl32bit() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ index; int32 start[2], edges[2]; uint32 comp_config; comp_info cinfo; /* Compression parameters - union */ comp_info cinfo_out; /* Compression parameters read - union */ comp_coder_t comp_type; float32 out_data[LENGTH][WIDTH][N_COMPS]; float32 in_data[LENGTH][WIDTH][N_COMPS] = {{{10.0, 11.0, 12.0}, {13.0, 14.0, 15.0}, {40.0, 41.0, 42.0}, {43.0, 44.0, 45.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{20.0, 21.0, 22.0}, {23.0, 24.0, 25.0}, {50.0, 51.0, 52.0}, {53.0, 54.0, 55.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{30.0, 31.0, 32.0}, {33.0, 34.0, 35.0}, {60.0, 61.0, 62.0}, {63.0, 64.0, 65.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {70.0, 71.0, 72.0}, {73.0, 74.0, 75.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {80.0, 81.0, 82.0}, {83.0, 84.0, 85.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {90.0, 91.0, 92.0}, {93.0, 94.0, 95.0}}}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for sziped data */ file_id = Hopen(FILE_NAMEfl32, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_FLOAT32; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = WIDTH; dim_sizes[1] = LENGTH; /* Create the raster image array */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate:Failed to create a raster image for szip compression testing"); /* Define the location, pattern, and size of the data set */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Initialize for SZIP */ comp_type = COMP_CODE_SZIP; cinfo.szip.pixels_per_block = 2; cinfo.szip.options_mask = SZ_EC_OPTION_MASK; cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; cinfo.szip.pixels = 0; cinfo.szip.pixels_per_scanline = 0; cinfo.szip.bits_per_pixel = 0; /* Set the compression */ status = GRsetcompress(ri_id, comp_type, &cinfo); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetcompress"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_RIfl32bit(): %s\n", SKIP_STR);); return; } status = GRwriteimage(ri_id, start, NULL, edges, (void *)in_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the file to flush the compressed info to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file */ file_id = Hopen(FILE_NAMEfl32, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image */ index = GRnametoindex(gr_id, IMAGE_NAME); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the whole image */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; status = GRreadimage(ri_id, start, NULL, edges, (void *)out_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Compare read data against input data */ if (0 != memcmp(out_data, in_data, sizeof(in_data))) printf("Error in reading the whole image \n"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_RIfl32bit */ /* * Write/Read szip compressed image with 64-bit floating point data */ static void test_szip_RIfl64bit() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ index; int32 start[2], edges[2]; uint32 comp_config; comp_info cinfo; /* Compression parameters - union */ comp_info cinfo_out; /* Compression parameters read - union */ comp_coder_t comp_type; float64 out_data[LENGTH][WIDTH][N_COMPS]; float64 in_data[LENGTH][WIDTH][N_COMPS] = {{{10.0, 11.0, 12.0}, {13.0, 14.0, 15.0}, {40.0, 41.0, 42.0}, {43.0, 44.0, 45.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{20.0, 21.0, 22.0}, {23.0, 24.0, 25.0}, {50.0, 51.0, 52.0}, {53.0, 54.0, 55.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{30.0, 31.0, 32.0}, {33.0, 34.0, 35.0}, {60.0, 61.0, 62.0}, {63.0, 64.0, 65.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {70.0, 71.0, 72.0}, {73.0, 74.0, 75.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {80.0, 81.0, 82.0}, {83.0, 84.0, 85.0}}, {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {90.0, 91.0, 92.0}, {93.0, 94.0, 95.0}}}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for sziped data */ /* Create and open the file for sziped data */ file_id = Hopen(FILE_NAMEfl64, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_FLOAT64; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = WIDTH; dim_sizes[1] = LENGTH; /* Create the raster image array */ ri_id = GRcreate(gr_id, IMAGE_NAME, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate:Failed to create a raster image for szip compression testing"); /* Define the location, pattern, and size of the data set */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; /* Initialize for SZIP */ comp_type = COMP_CODE_SZIP; cinfo.szip.pixels_per_block = 2; cinfo.szip.options_mask = SZ_EC_OPTION_MASK; cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; cinfo.szip.pixels = 0; cinfo.szip.pixels_per_scanline = 0; cinfo.szip.bits_per_pixel = 0; /* Set the compression */ status = GRsetcompress(ri_id, comp_type, &cinfo); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetcompress"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_RIfl64bit(): %s\n", SKIP_STR);); return; } status = GRwriteimage(ri_id, start, NULL, edges, (void *)in_data); CHECK_VOID(status, FAIL, "GRwriteimage"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the file to flush the compressed info to the file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file */ file_id = Hopen(FILE_NAMEfl64, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image */ index = GRnametoindex(gr_id, IMAGE_NAME); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the whole image */ start[0] = start[1] = 0; edges[0] = WIDTH; edges[1] = LENGTH; status = GRreadimage(ri_id, start, NULL, edges, (void *)out_data); CHECK_VOID(status, FAIL, "GRreadimage"); /* Compare read data against input data */ if (0 != memcmp(out_data, in_data, sizeof(in_data))) printf("Error in reading the whole image \n"); /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_RIfl64bit */ /* * This function tests GR chunking write/read operations for the * szip compressions */ #define CHKSZIPFILE "RIchunkedsziped.hdf" #define WIDTH_CH 10 /* number of columns in the image */ #define LENGTH_CH 6 /* number of rows in the image */ static void test_szip_chunk() { /************************* Variable declaration **************************/ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, /* raster image identifier */ origin[2], /* start position to write for each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ comp_flag, /* compression flag */ index; int32 start[2], stride[2], edge[2]; comp_info cinfo_out; /* Compression parameters read - union */ uint32 comp_config; comp_coder_t comp_type; int8 data_out[N_COMPS * LENGTH_CH * WIDTH_CH]; const char *image_name = "Image_chunked_sziped"; HDF_CHUNK_DEF chunk_def; int8 chunk_buf[18]; /* * Initialize data for RI */ int8 chunk00[] = {10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, 30, 31, 32, 33, 34, 35}; int8 chunk01[] = {40, 41, 42, 43, 44, 45, 50, 51, 52, 53, 54, 55, 60, 61, 62, 63, 64, 65}; int8 chunk14[] = {70, 71, 72, 73, 74, 75, 80, 81, 82, 83, 84, 85, 90, 91, 92, 93, 94, 95}; int8 data[] = {10, 11, 12, 13, 14, 15, 40, 41, 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 50, 51, 52, 53, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 34, 35, 60, 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, 82, 83, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, 95}; /********************** End of variable declaration **********************/ HCget_config_info(COMP_CODE_SZIP, &comp_config); CHECK_VOID(((comp_config & COMP_DECODER_ENABLED) && (comp_config & COMP_ENCODER_ENABLED)), 0, "SZIP Compression not available"); /* Create and open the file for chunked and sziped data. */ file_id = Hopen(CHKSZIPFILE, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Set the data type, interlace mode, and dimensions of the image. */ data_type = DFNT_INT8; interlace_mode = MFGR_INTERLACE_PIXEL; dim_sizes[0] = LENGTH_CH; dim_sizes[1] = WIDTH_CH; /* Create the raster image array. */ ri_id = GRcreate(gr_id, image_name, N_COMPS, data_type, interlace_mode, dim_sizes); CHECK_VOID(ri_id, FAIL, "GRcreate"); /* Create chunked image array. */ comp_flag = HDF_CHUNK | HDF_COMP; chunk_def.comp.chunk_lengths[0] = 3; chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_SZIP; chunk_def.comp.cinfo.szip.pixels_per_block = 2; chunk_def.comp.cinfo.szip.options_mask = SZ_EC_OPTION_MASK; chunk_def.comp.cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; chunk_def.comp.cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; chunk_def.comp.cinfo.szip.pixels = 0; chunk_def.comp.cinfo.szip.pixels_per_scanline = 0; chunk_def.comp.cinfo.szip.bits_per_pixel = 0; status = GRsetchunk(ri_id, chunk_def, comp_flag); if ((comp_config & COMP_ENCODER_ENABLED) == COMP_ENCODER_ENABLED) { /* should work */ CHECK_VOID(status, FAIL, "GRsetchunk"); } else { /* skip rest of test?? */ /* Terminate access to the raster image */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); /* Terminate access to the GR interface and close the HDF file */ status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(1, printf("test_szip_chunk(): %s\n", SKIP_STR);); return; } /* Write first data chunk ( 0, 0 ). */ origin[0] = origin[1] = 0; status = GRwritechunk(ri_id, origin, (void *)chunk00); CHECK_VOID(status, FAIL, "GRwritechunk"); /* Write second data chunk ( 0, 1 ). */ origin[0] = 0; origin[1] = 1; status = GRwritechunk(ri_id, origin, (void *)chunk01); CHECK_VOID(status, FAIL, "GRwritechunk"); /* Write third data chunk ( 1, 4 ). */ origin[0] = 1; origin[1] = 4; status = GRwritechunk(ri_id, origin, (void *)chunk14); CHECK_VOID(status, FAIL, "GRwritechunk"); /* Terminate accesses and close the HDF file. */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* * Verify the compressed data */ /* Reopen the file. */ file_id = Hopen(CHKSZIPFILE, DFACC_WRITE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize the GR interface. */ gr_id = GRstart(file_id); CHECK_VOID(gr_id, FAIL, "GRstart"); /* Find the index of the specified image. */ index = GRnametoindex(gr_id, image_name); CHECK_VOID(index, FAIL, "GRnametoindex"); /* Select the image. */ ri_id = GRselect(gr_id, index); CHECK_VOID(ri_id, FAIL, "GRselect"); /* Get and verify the image's compression information. */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = GRgetcompinfo(ri_id, &comp_type, &cinfo_out); CHECK_VOID(status, FAIL, "GRgetcompinfo"); VERIFY_VOID(comp_type, COMP_CODE_SZIP, "GRgetcompinfo"); VERIFY_VOID(chunk_def.comp.cinfo.szip.options_mask, cinfo_out.szip.options_mask, "GRgetcompinfo"); VERIFY_VOID(chunk_def.comp.cinfo.szip.pixels_per_block, cinfo_out.szip.pixels_per_block, "GRgetcompinfo"); /* Read first chunk back and compare with input chunk. */ origin[0] = 0; origin[1] = 0; status = GRreadchunk(ri_id, origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk00, sizeof(chunk00))) { printf("Error in reading chunk 00\n"); num_errs++; } /* Read second chunk back and compare with input chunk. */ origin[0] = 0; origin[1] = 1; status = GRreadchunk(ri_id, origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk01, sizeof(chunk01))) { printf("Error in reading chunk 01\n"); num_errs++; } /* Read third chunk back and compare with input chunk. */ origin[0] = 1; origin[1] = 4; status = GRreadchunk(ri_id, origin, (void *)chunk_buf); CHECK_VOID(status, FAIL, "GRreadchunk"); if (0 != memcmp(chunk_buf, chunk14, sizeof(chunk14))) { printf("Error in reading chunk 14\n"); num_errs++; } /* Read the whole image. */ start[0] = start[1] = 0; stride[0] = stride[1] = 1; edge[0] = LENGTH_CH; edge[1] = WIDTH_CH; status = GRreadimage(ri_id, start, stride, edge, (void *)data_out); CHECK_VOID(status, FAIL, "GRreadimage"); if (0 != memcmp(data_out, data, sizeof(data))) { printf("Error in reading the whole image \n"); num_errs++; } /* Terminate accesses and close the HDF file. */ status = GRendaccess(ri_id); CHECK_VOID(status, FAIL, "GRendaccess"); status = GRend(gr_id); CHECK_VOID(status, FAIL, "GRend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* end of test_szip_chunk */ #endif /* H4_HAVE_LIBSZ */ /**************************************************************** * * test_mgr_szip(): SZIP Compression tests * * XIV. GR write/read szip compression tests with different data types * and with chunked data * A. Write/Read szip compressed image with 8-bit integer data type * B. Write/Read szip compressed image with 16-bit integer data type * C. Write/Read szip compressed image with 32-bit integer data type * D. Write/Read szip compressed image with 32-bit floating point data type * E. Write/Read szip compressed image with 64-bit floating point data type * F. Write/Read image with chunked and sziped data * * ****************************************************************/ extern void test_mgr_szip() { #ifdef H4_HAVE_LIBSZ /* Output message about test being performed */ MESSAGE(6, printf("Testing GR szip compression WRITE/READ\n");); test_szip_RI8bit(); test_szip_RI16bit(); test_szip_RI32bit(); test_szip_RIfl32bit(); test_szip_RIfl64bit(); test_szip_chunk(); #else /* Output message about test being performed */ MESSAGE(6, printf("Skipping GR szip compression WRITE/READ\n");); #endif } hdf4-hdf4.3.1/hdf/test/tusejpegfuncs.c000066400000000000000000000225441503061704500176070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * The test functions in this file are derived from an example included in * * the JPEG package by The Independent JPEG Group * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "tproto.h" /* Hack to prevent libjpeg from re-defining `boolean` in a way that clashes * with windows.h. This MUST come before including jpeglib.h. */ #ifdef H4_HAVE_WIN32_API #define HAVE_BOOLEAN #endif #include #define ABS(x) ((int)(x) < 0 ? (-x) : x) /************************************************************************ Name: comp_using_jpeglib() - compresses a buffer using JPEG functions Description: This routine uses functions from the JPEG library directly to compress the provided image buffer and writes the compressed image to the specified file. Return value: The number of errors occurred in this routine. *************************************************************************/ int comp_using_jpeglib(const char *filename, /* file to write compressed data in */ long *file_offset, /* end offset of previous data and indicating where to start writing data in this round */ int im_height, /* image's height */ int im_width, /* image's width */ int im_ncomps, /* image's number of components */ int quality, /* JPEG quality value */ uint8 *written_buffer) /* data to be compressed */ { FILE *outfile; /* target file */ int row_stride; /* physical row width in image buffer */ /* JPEG object for JPEG compression parameters and pointers to working space (which is allocated as needed by the JPEG library). */ struct jpeg_compress_struct cinfo; /* This struct represents a JPEG error handler. It is declared separately * because applications often want to supply a specialized error handler * (see the second half of this file for an example). But here we just * take the easy way out and use the standard error handler, which will * print a message on stderr and call exit() if compression fails. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct jpeg_error_mgr jerr; /* Initialize JPEG compression object */ /* We have to set up the error handler first, in case the initialization * step fails. (Unlikely, but it could happen if you are out of memory.) * This routine fills in the contents of struct jerr, and returns jerr's * address which we place into the link field in cinfo. */ cinfo.err = jpeg_std_error(&jerr); /* Initialize the JPEG compression object. */ jpeg_create_compress(&cinfo); /* Open the output file to write binary data */ if ((outfile = fopen(filename, "ab")) == NULL) { fprintf(stderr, "can't open %s\n", filename); exit(1); } /* Forward to the position to write data */ if (fseek(outfile, (off_t)*file_offset, SEEK_SET) == -1) { fprintf(stderr, "can't seek offset %d\n", (int)*file_offset); exit(1); } /* Specify output file */ jpeg_stdio_dest(&cinfo, outfile); /* Set parameters for compression */ /* Supply a description of the input image. * Four fields of the cinfo struct must be filled in: */ cinfo.image_width = im_width; /* image width and height, in pixels */ cinfo.image_height = im_height; cinfo.input_components = im_ncomps; /* # of color components per pixel */ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ /* Set default compression parameters. At least cinfo.in_color_space must be set before calling jpeg_set_defaults, since the defaults depend on the source color space */ jpeg_set_defaults(&cinfo); /* Set quality (quantization table) scaling */ jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); /* Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. * From JPEG: Pass TRUE unless you are very sure of what you're doing. */ jpeg_start_compress(&cinfo, TRUE); row_stride = im_width * im_ncomps; /* JSAMPLEs per row in written_buffer */ /* While there are more scan line in the buffer */ while (cinfo.next_scanline < cinfo.image_height) { /* jpeg_write_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could pass * more than one scanline at a time if that's more convenient. */ JSAMPROW row_pointer = &written_buffer[cinfo.next_scanline * row_stride]; (void)jpeg_write_scanlines(&cinfo, &row_pointer, 1); } /* Finish compression */ jpeg_finish_compress(&cinfo); /* Get the current file offset to return */ *file_offset = ftell(outfile); /* Close the file */ fclose(outfile); /* Release JPEG compression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_compress(&cinfo); return 0; } /* comp_using_jpeglib */ /*************************************************************************** Name: decomp_using_jpeglib() - decompresses a buffer using JPEG functions Description: This routine uses functions from the JPEG library directly to decompress the data read from the specified file and store the uncompressed data in the provided buffer. Return value: The number of errors occurred in this routine. ****************************************************************************/ int decomp_using_jpeglib(const char *filename, /* file to read compressed data from */ long file_offset, /* offset in the file to start reading */ int im_height, /* image's height */ int im_width, /* image's width */ int im_ncomps, /* image's number of components */ uint8 *read_buffer) /* buffer to store decompressed data */ { /* This struct contains the JPEG decompression parameters and pointers to * working space (which is allocated as needed by the JPEG library). */ struct jpeg_decompress_struct cinfo; /* JPEG compression info */ struct jpeg_error_mgr jerr_pub; /* JPEG error handler */ FILE *infile; /* source file */ JSAMPARRAY buffer; /* Output row buffer */ int row_stride; /* physical row width in output buffer */ uint8 *local_buf = NULL, *ptr = NULL; /* Open the output file to write binary data */ if ((infile = fopen(filename, "rb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); exit(1); } /* Forward to the specified position to write data */ if (fseek(infile, (off_t)file_offset, SEEK_SET) == -1) { fprintf(stderr, "can't seek offset %d\n", (int)file_offset); exit(1); } /* Allocate local buffer to hold read values until all reading is done before copying into caller's buffer */ local_buf = malloc(im_height * im_width * im_ncomps * sizeof(uint8)); CHECK_ALLOC(local_buf, "local_buf", "decomp_using_jpeglib"); /* Set up the JPEG error routines */ cinfo.err = jpeg_std_error(&jerr_pub); /* Initialize the JPEG decompression object. */ jpeg_create_decompress(&cinfo); /* Specify input file */ jpeg_stdio_src(&cinfo, infile); /* Read file parameters */ (void)jpeg_read_header(&cinfo, TRUE); /* We can ignore the return value from jpeg_read_header since * (a) suspension is not possible with the stdio data source, and * (b) we passed TRUE to reject a tables-only JPEG file as an error. * See libjpeg.doc for more info. */ /* Start decompressor */ (void)jpeg_start_decompress(&cinfo); /* the return value is ignored here since suspension is not possible * with the stdio data source (from JPEG example) */ /* Number of values per row */ row_stride = cinfo.output_width * cinfo.output_components; /* Make a one-row-high array to read a row of values, JSAMPLEs per row */ buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1); ptr = local_buf; /* index into the buffer */ /* Read each scanline until all are read */ while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. */ (void)jpeg_read_scanlines(&cinfo, buffer, 1); /* Saved read line to the local buffer */ memcpy(ptr, buffer[0], row_stride); ptr = ptr + row_stride; } /* Copying values from local buffer to caller's buffer after success */ memcpy(read_buffer, local_buf, im_height * im_width * im_ncomps); free(local_buf); /* Finish decompression */ (void)jpeg_finish_decompress(&cinfo); /* Release JPEG decompression object */ jpeg_destroy_decompress(&cinfo); /* Close the file */ fclose(infile); return 0; } /* decomp_using_jpeglib */ hdf4-hdf4.3.1/hdf/test/tutils.c000066400000000000000000000067011503061704500162430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include "tutils.h" #include "srcdir_str.h" /* Buffer to construct path in and return pointer to */ static char srcdir_path[1024]; /* Buffer to construct file in and return pointer to */ static char srcdir_testpath[1024]; /*------------------------------------------------------------------------- * Function: get_srcdir_filename * * Purpose: Append the test file name to the srcdir path and return the whole string * * Return: The string or NULL (errors or not enough space) * *------------------------------------------------------------------------- */ const char * get_srcdir_filename(const char *filename) { const char *srcdir = get_srcdir(); /* Check for error */ if (NULL == srcdir) return NULL; /* Build path to test file */ if ((strlen(srcdir) + strlen(filename) + 1) < sizeof(srcdir_testpath)) { snprintf(srcdir_testpath, sizeof(srcdir_testpath), "%s/%s", srcdir, filename); return srcdir_testpath; } /* If not enough space, just return NULL */ return NULL; } /* end get_srcdir_filename() */ /*------------------------------------------------------------------------- * Function: get_srcdir * * Purpose: Just return the srcdir path * * Return: The string * *------------------------------------------------------------------------- */ const char * get_srcdir(void) { const char *srcdir = getenv("srcdir"); /* Check for using the srcdir from configure time */ if (NULL == srcdir) srcdir = config_srcdir; /* Build path to all test files */ if ((strlen(srcdir) + 2) < sizeof(srcdir_path)) { snprintf(srcdir_path, sizeof(srcdir_path), "%s/", srcdir); return (srcdir_path); } else return NULL; } /* end get_srcdir() */ intn fuzzy_memcmp(const void *s1, const void *s2, int32 len, intn fuzz_factor) { const uint8 *t1 = (const uint8 *)s1; const uint8 *t2 = (const uint8 *)s2; while (len > 0 && (int)ABS(*t2 - *t1) <= fuzz_factor) { t1++; t2++; len--; } /* end while */ if (len == 0) return 0; else { return (intn)(*t1 - *t2); } } /* end fuzzy_memcmp() */ void print_mismatched(const void *s1, const void *s2, int32 size2cmp) { int ii; const uint8 *t1 = (const uint8 *)s1; const uint8 *t2 = (const uint8 *)s2; for (ii = 0; ii < size2cmp; ii++) { if (ABS(*t1 - *t2) > 0) fprintf(stderr, "item#%d: HDF(%d) - JPEG(%d)\n", ii, *t1, *t2); t1++; t2++; } } hdf4-hdf4.3.1/hdf/test/tutils.h000066400000000000000000000427031503061704500162520ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_TUTILS_H #define H4_TUTILS_H #include #include #include "hdf_priv.h" /* Define these for use in all the tests */ #ifndef TESTMASTER extern #endif int num_errs #ifdef TESTMASTER = 0 #endif , Verbosity #ifdef TESTMASTER = 0 #endif ; /* Use %ld to print the value because long could cover most cases. */ /* Used to make certain a return value _is_not_ a value. If not true, */ /* print error messages, increment num_err and return. */ #define CHECK(ret, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s returned %ld \n", where, (int)__LINE__, \ __FILE__, (long)ret); \ if (ret == val) { \ printf("*** UNEXPECTED RETURN from %s is %ld at line %4d in %s\n", where, (long)ret, \ (int)__LINE__, __FILE__); \ num_errs++; \ return num_errs; \ } \ } while (0) #define CHECK_VOID(ret, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s returned %ld \n", where, (int)__LINE__, \ __FILE__, (long)ret); \ if (ret == val) { \ printf("*** UNEXPECTED RETURN from %s is %ld at line %4d in %s\n", where, (long)ret, \ (int)__LINE__, __FILE__); \ num_errs++; \ return; \ } \ } while (0) /* Same as CHECK except no return but continue. */ #define CHECK_CONT(ret, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s returned %ld \n", where, (int)__LINE__, \ __FILE__, (long)ret); \ if (ret == val) { \ printf("*** UNEXPECTED RETURN from %s is %ld at line %4d in %s\n", where, (long)ret, \ (int)__LINE__, __FILE__); \ num_errs++; \ } \ } while (0) /* If values match, display message supplied by caller. */ #define CHECK_STATUS(status, val, msg) \ do { \ if (status == val) \ printf(" %s failed at line %4d in %s\n", msg, (int)__LINE__, __FILE__); \ } while (0) /* Used to validate that 'buffer' has been successfully allocated */ #define CHECK_ALLOC(buffer, buf_name, func_name) \ { \ if (buffer == NULL) { \ fprintf(stderr, "in %s: space allocation for %s failed. Terminated!\n", func_name, buf_name); \ exit(1); \ } \ } /* Used to make certain a return value _is_ a value */ #define VERIFY(x, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s had value %ld \n", where, (int)__LINE__, \ __FILE__, (long)x); \ if (x != val) { \ printf("*** UNEXPECTED VALUE from %s is %ld at line %4d in %s\n", where, (long)x, (int)__LINE__, \ __FILE__); \ num_errs++; \ return (num_errs); \ } \ } while (0) /* Same as VERIFY except return without a value. */ #define VERIFY_VOID(x, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s had value %ld \n", where, (int)__LINE__, \ __FILE__, (long)x); \ if (x != val) { \ printf("*** UNEXPECTED VALUE from %s is %ld at line %4d in %s\n", where, (long)x, (int)__LINE__, \ __FILE__); \ num_errs++; \ return; \ } \ } while (0) /* Same as VERIFY except no return but continue. */ #define VERIFY_CONT(x, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s had value %ld \n", where, (int)__LINE__, \ __FILE__, (long)x); \ if (x != val) { \ printf("*** UNEXPECTED VALUE from %s is %ld at line %4d in %s\n", where, (long)x, (int)__LINE__, \ __FILE__); \ num_errs++; \ } \ } while (0) /* Same as VERIFY except that the value has type char* */ #define VERIFY_CHAR(x, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s had value %s \n", where, (int)__LINE__, \ __FILE__, x); \ if (strcmp(x, val) != 0) { \ printf("*** UNEXPECTED VALUE from %s is %s at line %4d in %s\n", where, x, (int)__LINE__, \ __FILE__); \ num_errs++; \ return (num_errs); \ } \ } while (0) /* Same as VERIFY_CHAR except return without a value. */ #define VERIFY_CHAR_VOID(x, val, where) \ do { \ if (Verbosity > 9) \ printf(" Call to HDF routine: %15s at line %4d in %s had value %s \n", where, (int)__LINE__, \ __FILE__, x); \ if (strncmp(x, val, strlen(val)) != 0) { \ printf("*** UNEXPECTED VALUE from %s is %s at line %4d in %s\n", where, x, (int)__LINE__, \ __FILE__); \ num_errs++; \ return; \ } \ } while (0) #define RESULT(a) \ do { \ if (Verbosity > 8) \ printf(" Call to HDF routine: %15s at line %4d in %s returned %ld \n", a, (int)__LINE__, \ __FILE__, (long)ret); \ if (Verbosity > 9) \ HEprint(stdout, 0); \ if (ret == FAIL) { \ printf("*** UNEXPECTED RETURN from %s is %ld at line %4d in %s\n", a, (long)ret, (int)__LINE__, \ __FILE__); \ num_errs++; \ } \ } while (0) #define MESSAGE(v, a) \ { \ if (Verbosity >= v) { \ a \ } \ } /* definitions for command strings */ #define VERBOSITY_STR "Verbosity" #define SKIP_STR "Skip" #define TEST_STR "Test" #define CLEAN_STR "Cleanup" /* Output notices */ #define H4_PASSED() \ { \ puts(" PASSED"); \ fflush(stdout); \ } #define H4_FAILED() \ { \ puts("*FAILED*"); \ fflush(stdout); \ } #define H4_WARNING() \ { \ puts("*WARNING*"); \ fflush(stdout); \ } #define H4_SKIPPED() \ { \ puts(" -SKIP-"); \ fflush(stdout); \ } /* * Methods to compare the equality of floating-point values: * * 1. H4_XXX_ABS_EQUAL - check if the difference is smaller than the * Epsilon value. The Epsilon values, FLT_EPSILON, DBL_EPSILON, * and LDBL_EPSILON, are defined by compiler in float.h. * * HDF5 (from whence these macros came) also includes macros that * use relative error. Those will be brought over only if needed. */ #define H4_FLT_ABS_EQUAL(X, Y) (fabsf((X) - (Y)) < FLT_EPSILON) #define H4_DBL_ABS_EQUAL(X, Y) (fabs((X) - (Y)) < DBL_EPSILON) #define H4_LDBL_ABS_EQUAL(X, Y) (fabsl((X) - (Y)) < LDBL_EPSILON) /* Definition for JPEG tests */ #define JPEG_FUZZ 1 #define ABS(x) ((int)(x) < 0 ? (-x) : x) /* Just return the srcdir path */ const char *get_srcdir(void); /* Append the test file name to the srcdir path and return the whole string */ const char *get_srcdir_filename(const char *filename); intn fuzzy_memcmp(const void *s1, const void *s2, int32 len, intn fuzz_factor); void print_mismatched(const void *s1, const void *s2, int32 size2cmp); /* System command to use for Cleanup */ #if defined _WIN32 #define CLEAN_CMD "del *.hdf" #else /* default is Unix */ #define CLEAN_CMD "rm -f *.hdf" #endif /* _WIN32 */ #endif /* H4_TUTILS_H */ hdf4-hdf4.3.1/hdf/test/tv1.res000066400000000000000000000035751503061704500160060ustar00rootroot00000000000000# # NOTE: This file was generated on a machine where the size of # local ints and floats is 4 bytes. On machines with different # sizes the 'vsize=X' entries will be different. # FULL DUMP FILE: tv1.hdf vg:0 <1965/2> (test_vgroup#0 {}) has 0 entries: vg:1 <1965/3> (test_vgroup#1 {}) has 0 entries: vg:2 <1965/4> (test_vgroup#2 {}) has 0 entries: vg:3 <1965/5> (test_vgroup#3 {}) has 0 entries: vg:4 <1965/6> (test_vgroup#4 {}) has 0 entries: Lone vdatas: L vs:7 <1962/7> nv=5 i=0 fld [PRESS] vsize=4 (vdata#0 {}) 0: fld [PRESS], type=5, order=1 500.000000 501.000000 504.000000 509.000000 516.000000 L vs:8 <1962/8> nv=10 i=0 fld [PRESS] vsize=4 (vdata#1 {}) 0: fld [PRESS], type=5, order=1 1000.000000 1001.000000 1004.000000 1009.000000 1016.000000 1025.000000 1036.000000 1049.000000 1064.000000 1081.000000 L vs:9 <1962/9> nv=15 i=0 fld [PRESS] vsize=4 (vdata#2 {}) 0: fld [PRESS], type=5, order=1 1500.000000 1501.000000 1504.000000 1509.000000 1516.000000 1525.000000 1536.000000 1549.000000 1564.000000 1581.000000 1600.000000 1621.000000 1644.000000 1669.000000 1696.000000 L vs:10 <1962/10> nv=20 i=0 fld [PRESS] vsize=4 (vdata#3 {}) 0: fld [PRESS], type=5, order=1 2000.000000 2001.000000 2004.000000 2009.000000 2016.000000 2025.000000 2036.000000 2049.000000 2064.000000 2081.000000 2100.000000 2121.000000 2144.000000 2169.000000 2196.000000 2225.000000 2256.000000 2289.000000 2324.000000 2361.000000 L vs:11 <1962/11> nv=25 i=0 fld [PRESS] vsize=4 (vdata#4 {}) 0: fld [PRESS], type=5, order=1 2500.000000 2501.000000 2504.000000 2509.000000 2516.000000 2525.000000 2536.000000 2549.000000 2564.000000 2581.000000 2600.000000 2621.000000 2644.000000 2669.000000 2696.000000 2725.000000 2756.000000 2789.000000 2824.000000 2861.000000 2900.000000 2941.000000 2984.000000 3029.000000 3076.000000 hdf4-hdf4.3.1/hdf/test/tv2.res000066400000000000000000000010271503061704500157750ustar00rootroot00000000000000 FILE: tv2a.hdf vg:0 <1965/2> (ALASKA {FIGURES}) has 3 entries: vs:0 <1962/3> nv=20 i=0 fld [DOLLARS] vsize=4 (GNP {FIGURES}) vs:1 <1962/4> nv=20 i=0 fld [DOLLARS] vsize=4 (INCOME {FIGURES}) vs:2 <1962/5> nv=20 i=0 fld [DOLLARS] vsize=4 (SALESTAX {FIGURES}) FILE: tv2b.hdf vg:0 <1965/2> (MISSISSIPPI {FIGURES}) has 3 entries: vs:0 <1962/3> nv=15 i=0 fld [DOLLARS] vsize=4 (GNP {FIGURES}) vs:1 <1962/4> nv=15 i=0 fld [DOLLARS] vsize=4 (INCOME {FIGURES}) vs:2 <1962/5> nv=15 i=0 fld [DOLLARS] vsize=4 (SALESTAX {FIGURES}) hdf4-hdf4.3.1/hdf/test/tvattr.c000066400000000000000000000670641503061704500162540ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************** * * tvattr.c * * This program tests routines in hdf/src/vattr.c. Those routines * set or change attributes for a vgroup, a vdata or a field of * a vdata; get info about an attribute; read values of an attr. * * create_vset_stuff() creates 1 empty vgroup and 1 vgroup having 1 * vdata. write_vattr() adds attributes to the vgroups, vdata and * the fields of the vdata. It then creates new vdata and vgroup, * and adds attrs to them. read_vattr reads the attributes back, * and check their correctness. * * test_readattrtwice: tests the fix of bugzilla #486, which a * subsequent read of an attribute failed. - BMR - Dec, 2005. * **************************************************************/ #include "hdf.h" #include "tproto.h" #include "vg.h" #include #define FILENAME "tvattr.hdf" #define VGNAME0 "vgname0" #define VGNAME1 "vgname1" #define VGNAME2 "vgname2" #define VSNAME0 "vsname0" #define VSNAME1 "vsname1" #define VSNAME2 "vsname2" #define VSCLASS0 "vsclass0" #define VGCLASS2 "vgclass2" #define FLDNAME0 "fldname0" #define FLDNAME1 "fldname1" #define FLDNAME2 "fldname2" #define FLDNAMES "fldname0,fldname1" #define FLDNAMES_1 "fldname1,fldname2" #define N_RECS 3 #define ATTNAME1 "attname1" #define ATTNAME2 "attname2" #define ATTNAME3 "attname3" #define ATTNAME4 "attname4" #define ATTNAME5 "attname5" #define ATTNAME6 "attname6" #define ATTNAME7 "attname7" #define ATTNAME8 "attname8" #define ATTNAME9 "attname9" #define ATTNAME10 "attname10" #define EPS64 (float64)1.0E-14 #define EPS32 (float32)1.0E-7 #define MAX_HDF4_NAME_LENGTH 256 int32 data1[6] = {0, -1, 10, 11, 20, 21}, idata1[6]; char data2[6] = {'A', 'B', 'C', 'D', 'E', 'F'}, idata2[6]; uint16 attr2[2] = {16, 32}, iattr2[2]; uint32 attr1[4] = {100, 132, 10032, 10064}, iattr1[2]; char attr3[6] = {'m', 'N', 'p', 'S', 't', '\0'}, iattr3[6]; float32 attr4[2] = {(float32)32.001, (float32)-34.002}, iattr4[2]; float64 attr5[2] = {64.12345, -64.12345}, iattr5[2]; static intn create_vset_stuff(void); static intn write_vattrs(void); static intn read_vattrs(void); static void test_readattrtwice(void); /* create vdatas and vgroups */ static intn create_vset_stuff(void) { int32 fid, vgid, vsid; if (FAIL == (fid = Hopen(FILENAME, DFACC_CREATE, 0))) { num_errs++; return FAIL; } if (Vstart(fid) == FAIL) { num_errs++; return FAIL; } /* Vgroup Generation */ if (FAIL == (vgid = (Vattach(fid, -1, "w")))) { num_errs++; return FAIL; } if (FAIL == Vsetname(vgid, VGNAME0)) { num_errs++; return FAIL; } if (FAIL == Vdetach(vgid)) { num_errs++; return FAIL; } /* create a vgroup and a vdata, insert the vdata into the vgroup */ if (FAIL == (vgid = (Vattach(fid, -1, "w")))) { num_errs++; return FAIL; } if (FAIL == Vsetname(vgid, VGNAME1)) { num_errs++; return FAIL; } if (FAIL == (vsid = (VSattach(fid, -1, "w")))) { num_errs++; return FAIL; } if (FAIL == VSsetname(vsid, VSNAME1)) { num_errs++; return FAIL; } if (FAIL == VSfdefine(vsid, FLDNAME1, DFNT_CHAR8, 1)) { num_errs++; return FAIL; } if (FAIL == VSfdefine(vsid, FLDNAME2, DFNT_CHAR8, 1)) { num_errs++; return FAIL; } if (FAIL == VSsetfields(vsid, FLDNAMES_1)) { num_errs++; return FAIL; } if (N_RECS != VSwrite(vsid, (unsigned char *)data2, N_RECS, FULL_INTERLACE)) { num_errs++; return FAIL; } if (FAIL == Vinsert(vgid, vsid)) { num_errs++; return FAIL; } if (FAIL == VSdetach(vsid)) { num_errs++; return FAIL; } if (FAIL == Vdetach(vgid)) { num_errs++; return FAIL; } /* close the file */ if (FAIL == Vend(fid)) { num_errs++; return FAIL; } if (FAIL == Hclose(fid)) { num_errs++; return FAIL; } return SUCCEED; } /* create_vset_stuff */ /* test attribute routines */ static intn write_vattrs(void) { int32 fid, vgid, vsid; int32 vsref, vgref; int32 fldindex, vsversion; intn n_flds; /* add attrs to the 1 vg */ if (FAIL == (fid = Hopen(FILENAME, DFACC_RDWR, -1))) { num_errs++; return FAIL; } if (Vstart(fid) == FAIL) { num_errs++; return FAIL; } if (FAIL == (vgref = Vgetid(fid, -1))) { num_errs++; return FAIL; } if (FAIL == (vgid = Vattach(fid, vgref, "w"))) { num_errs++; return FAIL; } if (FAIL == Vsetattr(vgid, ATTNAME1, DFNT_UINT32, 2, attr1)) { num_errs++; printf(">>> Vsetattr1 failed\n"); } /* change data type of existing attr, should fail */ if (FAIL != Vsetattr(vgid, ATTNAME1, DFNT_UINT16, 2, attr2)) { num_errs++; printf(">>> Vsetattr1 changes attr type, should failed\n"); } /* change order of existing attr, should fail */ if (FAIL != Vsetattr(vgid, ATTNAME1, DFNT_UINT32, 1, attr1)) { num_errs++; printf(">>> Vsetattr changes attr order, should failed\n"); } /* change values of existing attr */ if (FAIL == Vsetattr(vgid, ATTNAME1, DFNT_UINT32, 2, &attr1[2])) { num_errs++; printf(">>> Vsetattr failed in changing attr values.\n"); } if (FAIL == Vsetattr(vgid, ATTNAME2, DFNT_UINT16, 2, attr2)) { num_errs++; printf(">>> Vsetattr2 failed\n"); } if (FAIL == Vdetach(vgid)) { num_errs++; return FAIL; } /* add attr to vdata */ if (FAIL == (vsref = VSfind(fid, VSNAME1))) { num_errs++; return FAIL; } if (FAIL == (vsid = VSattach(fid, vsref, "w"))) { num_errs++; return FAIL; } if (VSET_VERSION != (vsversion = VSgetversion(vsid))) { num_errs++; printf(">>> Wrong version, should be 3, got %d \n", (int)vsversion); } /* check number of fields */ if (2 != (n_flds = VFnfields(vsid))) { num_errs++; printf(">>> Wrong number of fields, should be 2, got %d.\n", n_flds); } /* search for non-existing field */ if (FAIL != VSfindex(vsid, FLDNAME0, &fldindex)) { num_errs++; printf(">>> Search for non-existing field, should fail.\n"); } if (FAIL == VSsetattr(vsid, _HDF_VDATA, ATTNAME3, DFNT_CHAR8, 3, attr3)) { num_errs++; printf(">>> VSsetattr3 failed\n"); } if (FAIL == VSfindex(vsid, FLDNAME1, &fldindex) || fldindex != 0) { num_errs++; printf(">>> VSfindex failed in search for FLDNAME1 .\n"); } if (FAIL == VSsetattr(vsid, 0, ATTNAME4, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr4 failed\n"); } if (FAIL == VSfindex(vsid, FLDNAME2, &fldindex) || fldindex != 1) { num_errs++; printf(">>> VSfindex failed in search for FLDNAME2 .\n"); } if (FAIL == VSsetattr(vsid, 1, ATTNAME5, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr5 failed\n"); } if (FAIL != VSsetattr(vsid, 2, ATTNAME3, DFNT_CHAR8, 5, attr3)) { num_errs++; printf(">>> Set attr for non-existing field, should fail\n"); } if (FAIL != VSsetattr(vsid, -2, ATTNAME3, DFNT_CHAR8, 5, attr3)) { num_errs++; printf(">>> Set attr for non-existing field, should fail\n"); } /* set same attr name to different fields */ if (FAIL == VSsetattr(vsid, _HDF_VDATA, ATTNAME4, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr6 failed\n"); } if (FAIL == VSsetattr(vsid, 0, ATTNAME5, DFNT_FLOAT64, 1, attr5)) { num_errs++; printf(">>> VSsetattr5 failed\n"); } /* create an attribute with the same name as an existing vdata */ if (FAIL == VSsetattr(vsid, 0, VSNAME1, DFNT_FLOAT64, 1, attr5)) { num_errs++; printf(">>> VSsetattr7 failed\n"); } if (VSET_NEW_VERSION != (vsversion = VSgetversion(vsid))) { num_errs++; printf(">>> Wrong version, should be 4, got %d \n", (int)vsversion); } /* change datatype of existing attr, should fail */ if (FAIL != VSsetattr(vsid, 0, ATTNAME5, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr changes attr type, should fail.\n"); } /* change order of existing attr, should fail */ if (FAIL != VSsetattr(vsid, 0, ATTNAME5, DFNT_FLOAT64, 2, attr5)) { num_errs++; printf(">>> VSsetattr changes attr order, should fail.\n"); } /* change values of existing attr */ if (FAIL == VSsetattr(vsid, 0, ATTNAME5, DFNT_FLOAT64, 1, &attr5[1])) { num_errs++; printf(">>> VSsetattr failed in changing attr values.\n"); } if (FAIL == VSdetach(vsid)) { num_errs++; return FAIL; } /* create lone vdata and add attributes to it */ if (FAIL == (vsid = (VSattach(fid, -1, "w")))) { num_errs++; return FAIL; } if (FAIL == VSsetname(vsid, VSNAME0)) { num_errs++; return FAIL; } if (FAIL == VSfdefine(vsid, FLDNAME0, DFNT_INT32, 1)) { num_errs++; return FAIL; } if (FAIL == VSfdefine(vsid, FLDNAME1, DFNT_INT32, 1)) { num_errs++; return FAIL; } if (FAIL == VSsetfields(vsid, FLDNAMES)) { num_errs++; return FAIL; } if (N_RECS != VSwrite(vsid, (unsigned char *)data1, N_RECS, FULL_INTERLACE)) { num_errs++; return FAIL; } if (FAIL == VSfindex(vsid, FLDNAME0, &fldindex)) { num_errs++; printf(">>> VSfindex failed in searching for FLDNAME0.\n"); } if (FAIL == VSsetattr(vsid, 0, ATTNAME6, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr6 failed\n"); } if (FAIL == VSsetattr(vsid, _HDF_VDATA, ATTNAME7, DFNT_CHAR8, 3, attr3)) { num_errs++; printf(">>> VSsetattr7 failed\n"); } if (FAIL == VSfindex(vsid, FLDNAME1, &fldindex) || fldindex != 1) { num_errs++; printf(">>> VSfindex failed in searching for FLDNAME1.\n"); } if (FAIL == VSsetattr(vsid, 0, ATTNAME8, DFNT_FLOAT32, 1, attr4)) { num_errs++; printf(">>> VSsetattr8 failed\n"); } if (FAIL == VSdetach(vsid)) { num_errs++; return FAIL; } /* attach again, and modify attr */ if (FAIL == (vsref = VSfind(fid, VSNAME0))) { num_errs++; return FAIL; } if (FAIL == (vsid = VSattach(fid, vsref, "w"))) { num_errs++; return FAIL; } if (FAIL == VSsetclass(vsid, VSCLASS0)) { num_errs++; return FAIL; } if (FAIL == VSsetattr(vsid, 1, ATTNAME8, DFNT_FLOAT32, 1, &attr4[1])) { num_errs++; printf(">>> VSsetattr failed in modifying attr8.\n"); } if (FAIL == VSsetattr(vsid, 0, ATTNAME9, DFNT_CHAR8, 5, attr3)) { num_errs++; printf(">>> VSsetattr9 field. \n"); } if (FAIL == VSdetach(vsid)) { num_errs++; return FAIL; } /* attach again with "r" access to test VSsetattr on "r" access vdata BMR - Nov 4, 2004 */ if (FAIL == (vsref = VSfind(fid, VSNAME0))) { num_errs++; return FAIL; } if (FAIL == (vsid = VSattach(fid, vsref, "r"))) { num_errs++; return FAIL; } if (FAIL != VSsetattr(vsid, 1, "NO ATTRIBUTE", DFNT_FLOAT32, 1, &attr4[1])) { num_errs++; printf(">>> VSsetattr did not fail on read access vdata.\n"); } if (FAIL == VSdetach(vsid)) { num_errs++; return FAIL; } /* create vgroup and add attrs */ if (FAIL == (vgid = (Vattach(fid, -1, "w")))) { num_errs++; return FAIL; } if (FAIL == Vsetname(vgid, VGNAME2)) { num_errs++; return FAIL; } if (FAIL == Vaddtagref(vgid, DFTAG_VH, vsref)) { num_errs++; return FAIL; } if (FAIL == Vsetclass(vgid, VGCLASS2)) { num_errs++; return FAIL; } if (FAIL == Vdetach(vgid)) { num_errs++; return FAIL; } /* attach again, add attr */ if (FAIL == (vgref = Vfind(fid, VGNAME2))) { num_errs++; return FAIL; } if (FAIL == (vgid = (Vattach(fid, vgref, "w")))) { num_errs++; return FAIL; } if (FAIL == Vsetattr(vgid, ATTNAME9, DFNT_UINT32, 1, attr1)) { num_errs++; printf(">>> Vsetattr1 failed\n"); } /* change data type of existing attr, should fail */ if (FAIL != Vsetattr(vgid, ATTNAME9, DFNT_UINT16, 1, attr2)) { num_errs++; printf(">>> Vsetattr changes attr type, should failed\n"); } if (FAIL == Vsetattr(vgid, ATTNAME10, DFNT_UINT16, 2, attr2)) { num_errs++; printf(">>> Vsetattr1 failed\n"); } if (FAIL == Vdetach(vgid)) { num_errs++; printf(">>> Vdetach failed in vgname2.\n"); } if (FAIL == Vend(fid)) { num_errs++; return FAIL; } if (FAIL == Hclose(fid)) { num_errs++; return FAIL; } return SUCCEED; } /* write_vattr */ /* Test reading routines */ static intn read_vattrs(void) { int32 fid, vgid, vsid, vgref, vsref; intn n_vgattrs, n_vsattrs, n_fldattrs; intn iattrindex, ret; int32 i_type, i_count, i_size, iversion; char iattrname[FIELDNAMELENMAX + 1]; if (FAIL == (fid = Hopen(FILENAME, DFACC_RDONLY, 0))) { num_errs++; return FAIL; } if (Vstart(fid) == FAIL) { num_errs++; return FAIL; } /* Read vgroup attrs first */ if (FAIL == (vgref = Vfind(fid, VGNAME0))) { num_errs++; return FAIL; } if (FAIL == (vgid = (Vattach(fid, vgref, "r")))) { num_errs++; return FAIL; } if ((iversion = Vgetversion(vgid)) < VSET_NEW_VERSION) { num_errs++; printf(">>> Wrong Vgroup version, should be %d, got %d.\n", VSET_NEW_VERSION, (int)iversion); } if (FAIL == (n_vgattrs = Vnattrs(vgid)) || n_vgattrs != 2) { num_errs++; printf(">>> Wrong num of Vgroup0 attrs, should be %d, got %d.\n", 2, n_vgattrs); } if (0 != (iattrindex = Vfindattr(vgid, ATTNAME1))) { num_errs++; printf(">>> attname1 should be 0th attr of vgname0, "); printf("not %d.\n", iattrindex); } if (FAIL == Vattrinfo(vgid, 0, iattrname, &i_type, &i_count, &i_size) || strncmp(iattrname, ATTNAME1, strlen(ATTNAME1)) != 0 || i_type != DFNT_UINT32 || i_count != 2 || i_size != i_count * DFKNTsize(DFNT_UINT32 | DFNT_NATIVE)) { num_errs++; printf(">>> Wrong attrinfo for attname1 of vgname0; \ got %s %d %d %d.\n", iattrname, (int)i_type, (int)i_count, (int)i_size); } if (FAIL == Vgetattr(vgid, 0, iattr1) || iattr1[0] != attr1[2] || iattr1[1] != attr1[3]) { num_errs++; printf(">>> Wrong values for attname1 of vgname0; "); printf("got %u %u, should be %u %u.\n", (unsigned)iattr1[0], (unsigned)iattr1[1], (unsigned)attr1[2], (unsigned)attr1[3]); } if (FAIL == Vattrinfo(vgid, 1, iattrname, &i_type, &i_count, &i_size) || strncmp(iattrname, ATTNAME2, strlen(ATTNAME2)) != 0 || i_type != DFNT_UINT16 || i_count != 2 || i_size != i_count * DFKNTsize(DFNT_UINT16 | DFNT_NATIVE)) { num_errs++; printf(">>> Wrong attrinfo for attname2 of vgname0; \ got %s %d %d %d.\n", iattrname, (int)i_type, (int)i_count, (int)i_size); } if (FAIL == Vgetattr(vgid, 1, iattr2) || iattr2[0] != attr2[0] || iattr2[1] != attr2[1]) { num_errs++; printf(">>> Wrong values for attname2 of vgname0; \ got %u %u, should be %u %u.\n", iattr2[0], iattr2[1], attr2[0], attr2[1]); } if (FAIL == Vdetach(vgid)) { num_errs++; printf(">>>Vdetach failed in vgname0.\n"); } /* VGNAME1 has no attr */ if (FAIL == (vgref = Vfind(fid, VGNAME1))) { num_errs++; return FAIL; } if (FAIL == (vgid = (Vattach(fid, vgref, "r")))) { num_errs++; return FAIL; } if ((iversion = Vgetversion(vgid)) != VSET_VERSION) { num_errs++; printf(">>> Wrong Vgroup version, should be %d, got %d.\n", VSET_VERSION, (int)iversion); } if (FAIL == (n_vgattrs = Vnattrs(vgid)) || n_vgattrs != 0) { num_errs++; printf(">>> Wrong num of Vgroup1 attrs, should be %d, got %d.\n", 0, n_vgattrs); } if (FAIL == Vdetach(vgid)) { num_errs++; printf(">>>Vdetach failed in detaching vgname1.\n"); } /* VSNAME0 has 5 attrs */ if (FAIL == (vsref = VSfind(fid, VSNAME0))) { num_errs++; return FAIL; } if (FAIL == (vsid = (VSattach(fid, vsref, "r")))) { num_errs++; return FAIL; } if ((iversion = VSgetversion(vsid)) != VSET_NEW_VERSION) { num_errs++; printf(">>> Wrong Vdata version, should be %d, got %d.\n", VSET_NEW_VERSION, (int)iversion); } if (FAIL == (n_vsattrs = VSnattrs(vsid)) || n_vsattrs != 5) { num_errs++; printf(">>> Wrong num of Vsname0 attrs, should be %d, got %d.\n", 5, n_vsattrs); } /* get num of attrs of fld 1 */ if (FAIL == (n_fldattrs = VSfnattrs(vsid, 1)) || n_fldattrs != 1) { num_errs++; printf(">>> Wrong num of Vsname0 fld 1 attrs, "); printf("should be %d, got %d.\n ", 1, n_vsattrs); } /* read the 3rd attr of fld 0. The attr is char type. */ if ((FAIL == VSattrinfo(vsid, 0, 2, iattrname, &i_type, &i_count, &i_size)) || (strcmp(iattrname, ATTNAME9) != 0) || (i_type != DFNT_CHAR8) || (i_count != 5) || (i_size != 5)) { num_errs++; printf(">>> Wrong attrinfo for attname9 of vsname0 fld0; "); printf(" got %s %d %d %d.\n", iattrname, (int)i_type, (int)i_count, (int)i_size); } if (FAIL == VSgetattr(vsid, 0, 2, iattr3) || iattr3[0] != attr3[0] || iattr3[1] != attr3[1] || iattr3[2] != attr3[2] || iattr3[3] != attr3[3] || iattr3[4] != attr3[4]) { num_errs++; printf(">>> Wrong values for attname9 of vsname0; \ got %5s, should be %5s.\n", iattr3, attr3); } if (FAIL == VSdetach(vsid)) { num_errs++; printf(">>>Vsdetach failed in vsname0.\n"); } /* VSNAME1 has 2 attrs, fld0 has 3 and fld1 has 1 attr */ if (FAIL == (vsref = VSfind(fid, VSNAME1))) { num_errs++; return FAIL; } if (FAIL == (vsid = (VSattach(fid, vsref, "r")))) { num_errs++; return FAIL; } if ((iversion = VSgetversion(vsid)) != VSET_NEW_VERSION) { num_errs++; printf(">>> Wrong Vdata version, should be %d, got %d.\n", VSET_NEW_VERSION, (int)iversion); } if (FAIL == (n_vsattrs = VSnattrs(vsid)) || n_vsattrs != 6) { num_errs++; printf(">>> Wrong num of Vsname1 attrs, should be %d, ", 6); printf("got %d.\n", n_vsattrs); } if (FAIL == (n_fldattrs = VSfnattrs(vsid, _HDF_VDATA)) || n_fldattrs != 2) { num_errs++; printf(">>> Wrong num of Vsname1 vdata attrs, "); printf("should be %d, got %d.\n ", 2, n_fldattrs); } /* look for non-existing attr, should fail */ if (FAIL != (iattrindex = VSfindattr(vsid, _HDF_VDATA, ATTNAME9))) { num_errs++; printf(">>> attname9 is not an attr of vdata vsname1, "); printf(" should fail.\n"); } /* use wrong findex, should fail */ if (FAIL != (iattrindex = VSfindattr(vsid, 3, ATTNAME9))) { num_errs++; printf(">>> Vdata vsname1 has only 2 fields, "); printf(" should fail.\n"); } /* use wrong findex, should fail */ if (FAIL != VSattrinfo(vsid, 4, 0, NULL, &i_type, &i_count, &i_size)) { num_errs++; printf(">>> Vdata vsname1 has only 2 fields, should fail.\n"); } /* use wrong attrindex, should fail */ if (FAIL != VSattrinfo(vsid, 1, 3, iattrname, &i_type, &i_count, NULL)) { num_errs++; printf(">>> Field1 of vsname1 has only 1 attr, should fail.\n"); } /* use wrong findex, should fail */ if (FAIL != VSgetattr(vsid, 4, 0, iattr1)) { num_errs++; printf(">>> Vdata vsname1 has only 2 fields, should fail.\n"); } /* use wrong attrindex, should fail */ if (FAIL != VSgetattr(vsid, 1, 3, iattr1)) { num_errs++; printf(">>> Field1 of vsname1 has only 1 attr, should fail.\n"); } /* get the 2nd attr */ if ((FAIL == (iattrindex = VSfindattr(vsid, _HDF_VDATA, ATTNAME4))) || (iattrindex != 1)) { num_errs++; printf(">>> attname4 should be index 1 of vsname1, not %d.\n", iattrindex); } if ((FAIL == VSattrinfo(vsid, _HDF_VDATA, iattrindex, iattrname, &i_type, &i_count, &i_size)) || (strcmp(iattrname, ATTNAME4) != 0) || (i_type != DFNT_FLOAT32) || (i_count != 1) || (i_size != DFKNTsize(DFNT_FLOAT | DFNT_NATIVE))) { num_errs++; printf(">>> Wrong attrinfo for attname4 of vdata vsname1; "); printf(" got %s %d %d.\n", iattrname, (int)i_type, (int)i_count); } if (FAIL == VSgetattr(vsid, _HDF_VDATA, 1, iattr4) || (fabs((double)(iattr4[0] - attr4[0])) > fabs((double)(attr4[0] * EPS32)))) { num_errs++; printf(">>> Wrong values for attname4 of vsname1; \ got %f, should be %f.\n", (double)iattr4[0], (double)attr4[0]); } if (FALSE != VSisattr(vsid)) { num_errs++; printf(">>> VSisattr failed. Vsname1 is not attribute vdata.\n"); } /* get the 3rd attr of fld0. The attr name is VSNAME1 */ if ((FAIL == (iattrindex = VSfindattr(vsid, 0, VSNAME1))) || (iattrindex != 2)) { num_errs++; printf(">>> VSNAME1 should be index 2 of fld 0 of vsname1,"); printf(" not %d.\n", iattrindex); } if ((FAIL == VSattrinfo(vsid, 0, iattrindex, iattrname, &i_type, &i_count, &i_size)) || (strcmp(iattrname, VSNAME1) != 0) || (i_type != DFNT_FLOAT64) || (i_count != 1) || (i_size != DFKNTsize(DFNT_FLOAT64 | DFNT_NATIVE))) { num_errs++; printf(">>> Wrong attrinfo for VSNAME1 of fld 0 of vdata vsname1; "); printf(" got %s %d %d.\n", iattrname, (int)i_type, (int)i_count); } if (FAIL == VSgetattr(vsid, 0, 2, iattr5) || (fabs((double)(iattr5[0] - attr5[0])) > fabs((double)(attr5[0] * EPS64)))) { num_errs++; printf(">>> Wrong values for attr VSNAME1 of fld 0 of vsname1; \ got %f, should be %f.\n", iattr5[0], attr5[0]); } if (FAIL == VSdetach(vsid)) { num_errs++; printf(">>>VSdetach failed in vsname1.\n"); } /* test VSisattr for attr vdata */ if (FAIL == (vsref = VSfind(fid, ATTNAME10))) { num_errs++; return FAIL; } if (FAIL == (vsid = (VSattach(fid, vsref, "r")))) { num_errs++; return FAIL; } if (TRUE != VSisattr(vsid)) { num_errs++; printf(">>> VSisattr failed. ATTNAME10 is an attribute vdata.\n"); } if (VSET_VERSION != (iversion = VSgetversion(vsid))) { num_errs++; printf(">>> Wrong vdata version. ATTNAME10 should be of "); printf(" %d, got %d\n", VSET_VERSION, (int)iversion); } ret = VSdetach(vsid); CHECK(ret, FAIL, "VSdetach"); ret = Vend(fid); CHECK(ret, FAIL, "Vend"); ret = Hclose(fid); CHECK(ret, FAIL, "Hclose"); return 0; } static void test_readattrtwice(void) { int32 file_id, vsref, vsid; int32 findex, fattr_index; int32 data_type, count, size; int32 nfields, num_attrs, num_fattrs; char name[MAX_HDF4_NAME_LENGTH + 1]; char *buffer; int k; intn ret; file_id = Hopen(FILENAME, DFACC_READ, 0); CHECK_VOID(file_id, FAIL, "Hopen:FILENAME"); ret = Vstart(file_id); CHECK_VOID(ret, FAIL, "Vstart:file_id"); /* get the first vdata */ vsref = VSgetid(file_id, -1); if (vsref == FAIL) { num_errs++; printf(">>> VSgetid was unable to find first Vdata\n"); } /* read attributes of each vdata and its fields, then go to next vdata */ while (vsref != -1) { vsid = VSattach(file_id, vsref, "r"); CHECK_VOID(vsid, FAIL, "VSattach"); num_attrs = VSfnattrs(vsid, _HDF_VDATA); CHECK_VOID(num_attrs, FAIL, "VSfnattrs"); for (k = 0; k < num_attrs; k++) { ret = VSattrinfo(vsid, _HDF_VDATA, k, name, &data_type, &count, &size); CHECK_VOID(ret, FAIL, "VSattrinfo"); buffer = malloc(size + 1); CHECK_VOID(buffer, NULL, "malloc"); ret = VSgetattr(vsid, _HDF_VDATA, k, buffer); CHECK_VOID(ret, FAIL, "VSgetattr"); ret = VSgetattr(vsid, _HDF_VDATA, k, buffer); if (ret == FAIL) { num_errs++; printf(">>> Reading attribute twice failed - (bugzilla 486)\n"); } free(buffer); nfields = VFnfields(vsid); CHECK_VOID(nfields, FAIL, "VFnfields"); for (findex = 0; findex < nfields; findex++) { num_fattrs = VSfnattrs(vsid, findex); CHECK_VOID(num_fattrs, FAIL, "VSfnattrs"); for (fattr_index = 0; fattr_index < num_fattrs; fattr_index++) { ret = VSattrinfo(vsid, findex, fattr_index, name, &data_type, &count, &size); CHECK_VOID(ret, FAIL, "VSattrinfo"); buffer = malloc(size); CHECK_VOID(buffer, NULL, "malloc"); ret = VSgetattr(vsid, findex, fattr_index, buffer); CHECK_VOID(ret, FAIL, "VSgetattr"); ret = VSgetattr(vsid, findex, fattr_index, buffer); if (ret == FAIL) { num_errs++; printf(">>> Reading attribute twice failed - (bugzilla 486)\n"); } free(buffer); } /* for fattr_index */ } /* for findex */ } /* for k */ ret = VSdetach(vsid); CHECK_VOID(ret, FAIL, "VSdetach"); /* find next vdata */ vsref = VSgetid(file_id, vsref); } ret = Vend(file_id); CHECK_VOID(ret, FAIL, "VSdetach"); ret = Hclose(file_id); CHECK_VOID(ret, FAIL, "Hclose"); } /* test_readattrtwice */ /* main test driver */ void test_vset_attr(void) { create_vset_stuff(); write_vattrs(); read_vattrs(); test_readattrtwice(); } /* test_vset_attr */ hdf4-hdf4.3.1/hdf/test/tvattrf.f000066400000000000000000000251141503061704500164130ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C*************************************************** C C C ************************************************** C * C * tvattrf.f C * test Vset attribute Fortran API C * C ************************************************* subroutine tvattrf (number_failed) C program tvattrf C Test Program: C Tests the vdata and vgroup attribute interface C Input file: test_files/tvattr.dat C Output file: tvattrf.hdf implicit none include 'fortest.inc' integer number_failed integer len_in character*1024 ifn_out character*25 myname, ifn, ofn parameter (myname = 'vattrf', + ifn = 'test_files/tvattr.dat' , + ofn = 'tvattrf.hdf' + ) integer nattrs, itype, icount, imsize, vsver integer fid1, vsid, vgid, vsref, vgref integer ret, findex, vsbuf, aindex integer fixname C C iattri is for int32 values C iattrs is for int16 values C iattrr, RATTR1 are for float32 values C iattrg, GATTR1 are for float64 values integer*4 iattri(5) integer*2 iattrs(6) real*4 iattrr(5), feps, RATTR1, abs real*8 iattrg(5) double precision geps, GATTR1, dabs character*10 iattrc character*20 iattrnm integer VSET_VERSION, VSET_NEW_VERSION parameter (VSET_VERSION = 3, + VSET_NEW_VERSION = 4, + GATTR1 = -64.123450D0, + RATTR1 = 32.0099, + feps = 1.0E-5, + geps = 1.0D-9 + ) DATA vsbuf/200/ DATA iattrc/' '/ call ptestban('Testing', myname) C number_failed = 0 C Open the file len_in = len(ifn_out) ret = fixname(ifn, ifn_out, len_in) fid1 = hopen(ifn_out(1:len_in), DFACC_READ, 0) call VRFY(fid1, 'hopen', number_failed) ret = vfstart(fid1) call VRFY(ret, 'vfstart', number_failed) vsref = vsffnd(fid1, 'vsname1') call VRFY(vsref, 'vsffnd', number_failed) vsid = vsfatch(fid1, vsref, 'r') call VRFY(vsid, 'vsfatch', number_failed) vsver = vsgver(vsid) if (vsver .ne. VSET_NEW_VERSION) then call MESSAGE(1, 'Wrong version number of vsname1') number_failed = number_failed + 1 endif ret = vsfisat(vsid) if (ret .ne. FALSE) then call MESSAGE(1, 'Vsname1 is not an attr.') number_failed = number_failed + 1 endif ret = vfnflds(vsid) if (ret .ne. 2) then call MESSAGE(1, 'Wrong number of fields of vsname1') number_failed = number_failed + 1 endif nattrs = vsfnats(vsid) if (nattrs .ne. 6) then call MESSAGE(1, 'Wrong number of total attrs for vsname1') number_failed = number_failed + 1 endif nattrs = vsffnas(vsid, HDF_VDATA) if (nattrs .ne. 2) then call MESSAGE(1, 'Wrong number of attrs for vsname1') number_failed = number_failed + 1 endif C get the 0th attr aindex = 0 findex = HDF_VDATA ret = vsffdat(vsid, findex, 'attname3') call VRFY(ret, 'vsffdat', number_failed) ret = vsfainf(vsid, findex, aindex, iattrnm, + itype, icount, imsize) call VRFY(ret, 'vsfainf', number_failed) if ((itype .ne. DFNT_CHAR) .or. (icount .ne. 3)) then call MESSAGE(1, 'Wrong info of char attr for vsname1') number_failed = number_failed + 1 endif iattrc = ' ' ret = vsfgcat(vsid, findex, aindex, iattrc) call VRFY(ret, 'vsfgcat', number_failed) C if ((iattrc(1) .ne. 'm') .or. (iattrc(2) .ne. 'N') C + .or. (iattrc(3) .ne. 'p')) then if (iattrc .ne. 'mNp') then call MESSAGE(1,'Wrong values of char attr for vsname1') number_failed = number_failed + 1 endif C get the 1st attr of fld 0 aindex = 1 findex = 0 ret = vsffidx(vsid, 'fldname1', findex) call VRFY(ret, 'vsffidx', number_failed) if (findex .ne. 0) then call MESSAGE(1, 'Wrong findex of fldname1 of vsname1') number_failed = number_failed + 1 endif C ret = vsfgnat(vsid, findex, aindex, iattrg) call VRFY(ret, 'vsfgnatt1', number_failed) if (dabs(iattrg(1)-GATTR1) .gt. dabs(geps * GATTR1)) + then call MESSAGE(1, 'Wrong double attr for vsname1') number_failed = number_failed + 1 print *, 'should be: ',GATTR1,' get: ',iattrg(1) endif ret = vsfdtch(vsid) call VRFY(ret, 'vsfdtch', number_failed) C get next vdata and test vsfisat vsref = vsffnd(fid1, 'attname1') vsid = vsfatch(fid1, vsref, 'r') call VRFY(ret, 'vsfatch', number_failed) ret = vsfisat(vsid) if (ret .ne. TRUE) then call MESSAGE(1, 'vsfisat failed. ') number_failed = number_failed + 1 endif ret = vsfdtch(vsid) call VRFY(ret, 'vsfdtch', number_failed) C test vgroup routines vgref = vfgid(fid1, -1) call VRFY(vgref, 'vfgid',number_failed) vgid = vfatch(fid1, vgref, 'r') call VRFY(vgid, 'vfatch',number_failed) ret = vfgver(vgid) call VRFY(ret, 'vfgver',number_failed) if (ret .ne. VSET_NEW_VERSION) then call MESSAGE(1, 'vfgver failed. ') number_failed = number_failed + 1 endif nattrs = vfnatts(vgid) if (nattrs .ne. 2) then call MESSAGE(1, 'vfnatts failed. ') number_failed = number_failed + 1 endif ret = vfainfo(vgid,0,iattrnm,itype,icount,imsize) call VRFY(ret, 'vfainfo',number_failed) ret = vfgnatt(vgid, 0, iattri) call VRFY(ret, 'vfgnatt',number_failed) if (iattri(1) .ne. 10032 .or. iattri(2) .ne. 10064) + then call MESSAGE(1, 'vfgnatt failed. ') number_failed = number_failed + 1 endif C get attname2 ret = vffdatt(vgid, 'attname2') call VRFY(ret, 'vffdatt',number_failed) ret = vfgnatt(vgid, ret, iattrs) call VRFY(ret, 'vfgnatt',number_failed) if (iattrs(1) .ne. 16 .or. iattrs(2) .ne. 32) + then call MESSAGE(1, 'vfgnatt failed. ') number_failed = number_failed + 1 endif C finish reading existing attrs ret = vfdtch(vgid) call VRFY(ret, 'vfdtch',number_failed) ret = vfend(fid1) call VRFY(ret, 'vfend',number_failed) ret = hclose(fid1) call VRFY(ret, 'hclose1',number_failed) C write attributes fid1 = hopen(ofn, DFACC_CREATE, 0) call VRFY(fid1, 'hopen',number_failed) ret = vfstart(fid1) call VRFY(ret, 'vfstart', number_failed) C vgroup attrs vgid = vfatch(fid1, -1, 'w') call VRFY(ret, 'vfatch', number_failed) ret = vfscatt(vgid, 'vgcattr0', DFNT_CHAR, 4, 'cat0') call VRFY(ret, 'vfscatt', number_failed) ret = vfsnatt(vgid,'vgattr1',DFNT_FLOAT32,1,RATTR1) call VRFY(ret, 'vfsnatt', number_failed) ret = vfdtch(vgid) call VRFY(ret, 'vfdtch', number_failed) C vdata attrs vsref = vhfsd(fid1, 'vsfld0', vsbuf, 1, DFNT_INT32, + 'vs0', 'test_vdata') call VRFY(ret, 'vhfsd', number_failed) vsid = vsfatch(fid1, vsref, 'w') call VRFY(ret, 'vsfatch', number_failed) ret = vsfscat(vsid, HDF_VDATA, 'vscattr0', DFNT_CHAR, 3, + 'at2') call VRFY(ret, 'vfscatt', number_failed) ret = vsfsnat(vsid, 0, 'vsattr1', DFNT_FLOAT32, 1, + RATTR1) call VRFY(ret, 'vsfsnat', number_failed) ret = vsfdtch(vsid) call VRFY(ret, 'vsfdtch', number_failed) ret = vfend(fid1) call VRFY(ret, 'vfend',number_failed) ret = hclose(fid1) call VRFY(ret, 'hclose2',number_failed) C read the new attrs back fid1 = hopen(ofn, DFACC_RDWR, 0) call VRFY(fid1, 'hopen',number_failed) ret = vfstart(fid1) call VRFY(ret, 'vfstart', number_failed) C vgroup attrs vgref = vfgid(fid1, -1) call VRFY(ret, 'vfgid', number_failed) vgid = vfatch(fid1, vgref, 'w') call VRFY(ret, 'vfatch', number_failed) iattrc = ' ' ret = vfgcatt(vgid, 0, iattrc) call VRFY(ret, 'vfgcatt', number_failed) C if (iattrc(1) .ne. 'a' .or. iattrc(2) .ne. 't' C + .or. iattrc(3) .ne. '0') then if (iattrc .ne. 'cat0') then call MESSAGE(1, 'Wrong values of char attr for vg') number_failed = number_failed + 1 endif ret = vfgnatt(vgid, 1, iattrr) call VRFY(ret, 'vfgnatt', number_failed) if (abs(iattrr(1)-RATTR1) .gt. abs(RATTR1*feps)) + then call MESSAGE(1, 'Wrong values of real attr for vg') number_failed = number_failed + 1 endif ret = vfdtch(vgid) call VRFY(ret, 'vfdtch', number_failed) C vdata attrs vsref = vsffnd(fid1, 'vs0') call VRFY(ret, 'vsffnd', number_failed) vsid = vsfatch(fid1, vsref, 'w') call VRFY(ret, 'vsfatch', number_failed) iattrc = ' ' ret = vsfgcat(vsid, HDF_VDATA, 0, iattrc) call VRFY(ret, 'vsfgcat', number_failed) C if (iattrc(1) .ne. 'a' .or. iattrc(2) .ne. 't' C + .or. iattrc(3) .ne. '2') then if (iattrc .ne. 'at2') then call MESSAGE(1, 'Wrong values of char attr for vs') number_failed = number_failed + 1 print *, iattrc, 'at2' endif ret = vsfgnat(vsid, 0, 0, iattrr) call VRFY(ret, 'vsfgnatt2', number_failed) if (abs(iattrr(1)-RATTR1) .gt. abs(RATTR1*feps)) + then call MESSAGE(1, 'Wrong values of real attr for vs') number_failed = number_failed + 1 endif ret = vsfdtch(vsid) call VRFY(ret, 'vsfdtch', number_failed) ret = vfend(fid1) call VRFY(ret, 'vfend',number_failed) ret = hclose(fid1) call VRFY(ret, 'hclose3',number_failed) return end hdf4-hdf4.3.1/hdf/test/tvnameclass.c000066400000000000000000000262001503061704500172330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Tests for vgroup's and vdata's name and class name. */ #include "hdf.h" #include "hfile_priv.h" #include "tproto.h" #include "tutils.h" #define LONGNAMES "tlongnames.hdf" #define NONAMECLASS "tundefined.hdf" #define VGROUP1 "VGROUP1" #define VG_LONGNAME "Vgroup with more than 64 characters in length, 74 characters to be exact!" #define VG_LONGCLASS "Very long class name to classify all Vgroups with more than 64 characters in name" static void test_vglongnames(void); static void test_vglongnames(void) { int32 file_id; /* File ID */ int32 vg1; /* Vdata ID */ int32 ref; /* Vdata ref */ uint16 name_len; /* Length of a vgroup's name or class name */ char *vgname, *vgclass; intn is_internal; int32 status; /* Status values from routines */ /* Open the HDF file. */ file_id = Hopen(LONGNAMES, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(file_id); CHECK_VOID(status, FAIL, "Vstart"); /* Create a new vgroup. */ vg1 = Vattach(file_id, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetname(vg1, VG_LONGNAME); CHECK_VOID(status, FAIL, "VSsetname"); status = Vsetclass(vg1, VG_LONGCLASS); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Create another vgroup of the same class. */ vg1 = Vattach(file_id, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetname(vg1, VGROUP1); CHECK_VOID(status, FAIL, "VSsetname"); status = Vsetclass(vg1, VG_LONGCLASS); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(file_id); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* Re-open the HDF file. */ file_id = Hopen(LONGNAMES, DFACC_RDWR, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(file_id); CHECK_VOID(status, FAIL, "Vstart"); /* Find the long name vgroup. */ ref = Vfind(file_id, VG_LONGNAME); CHECK_VOID(ref, FAIL, "VSfind"); vg1 = Vattach(file_id, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* Test Vgisinternal */ is_internal = Vgisinternal(vg1); CHECK_VOID(is_internal, FAIL, "Vgisinternal"); VERIFY_VOID(is_internal, FALSE, "Vgisinternal"); /* get the vgroup's name */ status = Vgetnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgname = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgname, "vgname", "test_vglongnames"); status = Vgetname(vg1, vgname); CHECK_VOID(status, FAIL, "VSgetname"); VERIFY_CHAR_VOID(vgname, VG_LONGNAME, "Vgetname"); free(vgname); /* get the vgroup's class */ status = Vgetclassnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgclass, "vgclass", "test_vglongnames"); status = Vgetclass(vg1, vgclass); CHECK_VOID(status, FAIL, "VSgetclass"); VERIFY_CHAR_VOID(vgclass, VG_LONGCLASS, "Vgetclass"); free(vgclass); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Find the vgroup VGROUP1. */ ref = Vfind(file_id, VGROUP1); CHECK_VOID(ref, FAIL, "VSfind"); vg1 = Vattach(file_id, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* get the vgroup's name */ status = Vgetnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgname = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgname, "vgname", "test_vglongnames"); status = Vgetname(vg1, vgname); CHECK_VOID(status, FAIL, "VSgetname"); if (strcmp(vgname, VGROUP1)) { num_errs++; printf(">>> Got bogus Vgroup name : %s\n", vgname); } free(vgname); /* get the vgroup's class */ status = Vgetclassnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgclass, "vgclass", "test_vglongnames"); status = Vgetclass(vg1, vgclass); CHECK_VOID(status, FAIL, "VSgetclass"); if (strcmp(vgclass, VG_LONGCLASS)) { num_errs++; printf(">>> Got bogus Vgroup class : %s\n", vgclass); } free(vgclass); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(file_id); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* test_vglongnames() */ static void test_undefined(void) { int32 status; /* Status values from routines */ int32 file_id; /* File ID */ int32 vg1; /* Vdata ID */ int32 ref; /* Vdata ref */ intn is_internal; /* to test Vgisinternal */ uint16 name_len; /* Length of a vgroup's name or class name */ /* to simulate calls to Vgetclass/Vgetname in older applications */ char vgname[VGNAMELENMAX + 1], vgclass[VGNAMELENMAX + 1]; /* Open the HDF file. */ file_id = Hopen(NONAMECLASS, DFACC_CREATE, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(file_id); CHECK_VOID(status, FAIL, "Vstart"); /* Create a vgroup which will have name set but not class */ vg1 = Vattach(file_id, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetname(vg1, VG_LONGNAME); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Create another vgroup which will have class but not name */ vg1 = Vattach(file_id, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetclass(vg1, VG_LONGCLASS); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(file_id); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); /* Re-open the HDF file. */ file_id = Hopen(NONAMECLASS, DFACC_RDWR, 0); CHECK_VOID(file_id, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(file_id); CHECK_VOID(status, FAIL, "Vstart"); /* Find the long name vgroup. */ ref = Vfind(file_id, VG_LONGNAME); CHECK_VOID(ref, FAIL, "VSfind"); vg1 = Vattach(file_id, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* Test Vgisinternal */ is_internal = Vgisinternal(vg1); CHECK_VOID(is_internal, FAIL, "Vgisinternal"); VERIFY_VOID(is_internal, FALSE, "Vgisinternal"); /* Try getting the vgroup's class without calling first Vgetclassnamelen. This shows that bug HDFFR-1288 is fixed. */ status = Vgetclass(vg1, vgclass); CHECK_VOID(status, FAIL, "Vgetclass"); VERIFY_VOID(strlen(vgclass), 0, "VSgetclass"); /* The length of the class name should be 0 */ status = Vgetclassnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetclassnamelen"); VERIFY_VOID(name_len, 0, "VSgetclassnamelen"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Find the vgroup with class VG_LONGCLASS. This vgroup doesn't have a name */ ref = Vfindclass(file_id, VG_LONGCLASS); CHECK_VOID(ref, FAIL, "VSfindclass"); vg1 = Vattach(file_id, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* Try getting the vgroup's name without calling first Vgetclassnamelen. Similar to class name in bug HDFFR-1288. */ status = Vgetname(vg1, vgname); CHECK_VOID(status, FAIL, "Vgetname"); VERIFY_VOID(strlen(vgname), 0, "VSgetname"); /* The length of the name should be 0 */ status = Vgetnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); VERIFY_VOID(name_len, 0, "VSgetnamelen"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(file_id); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(file_id); CHECK_VOID(status, FAIL, "Hclose"); } /* test_undefined() */ /**************************************************************************** * test_vgisinternal - tests the API function Vgisinternal * - Use an existing GR file created during the period when GR vgroup had no * class name, and had name set to GR_NAME * - Get each vgroup, verify that it is internal or not * Jan 6, 2012 -BMR ****************************************************************************/ #define GR_FILE "test_files/grtdfui83.hdf" static void test_vgisinternal() { int32 fid, vgroup_id; intn is_internal = FALSE; int32 vref = -1; intn ii, status; const char *testfile = get_srcdir_filename(GR_FILE); char internal_array2[2] = {TRUE, TRUE}; /* Use a GR file to test Vgisinternal on internal vgroups */ /* Open the old GR file and initialize the V interface */ fid = Hopen(testfile, DFACC_READ, 0); CHECK_VOID(fid, FAIL, "Hopen: grtdfui83.hdf"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); ii = 0; while ((vref = Vgetid(fid, vref)) != FAIL) { /* until no more vgroups */ vgroup_id = Vattach(fid, vref, "r"); /* attach to vgroup */ /* Test that the current vgroup is or is not internal as specified in the array internal_array2 */ is_internal = Vgisinternal(vgroup_id); CHECK_VOID(is_internal, FAIL, "Vgisinternal"); VERIFY_VOID(is_internal, internal_array2[ii], "Vgisinternal"); status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach"); ii++; /* increment vgroup index */ } /* Terminate access to the V interface and close the file */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_vgisinternal */ void test_vnameclass(void) { /* test Vgroups with name and class that have more than 64 characters */ test_vglongnames(); /* test Vgetname and Vgetclass when either name or class is not defined. */ test_undefined(); /* test Vgisinternal when there is no class name */ test_vgisinternal(); } /* test_vnameclass */ hdf4-hdf4.3.1/hdf/test/tvset.c000066400000000000000000003364011503061704500160670ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * Vset tests * * * This file needs another pass at making sure all the return * values from function calls are checked in addition to * verifying that the proper tests are performed on all Vxx fcns - GV 9/5/97 * */ #include "hdf.h" #include "hfile_priv.h" #include "tproto.h" #define VDATA_COUNT 256 /* make this many Vdatas to check for memory leaks */ #define FNAME0 "tvset.hdf" #define EXTFNM "tvsetext.hdf" #define EMPTYNM "tvsempty.hdf" #define LONGNAMES "tlongnames.hdf" #define LKBLK_FILE "tvsblkinfo.hdf" #define FIELD1 "FIELD_name_HERE" #define FIELD1_UPPER "FIELD_NAME_HERE" #define FIELD2 "DIFFERENT_FIELD_NAME" #define FIELD1_NAME "Field1" /* contains three integers */ #define FIELD2_NAME "Field2" /* contains one integer */ #define FIELD3_NAME "Field3" /* contains two integers */ #define FIELD_NAME_LIST "Field1,Field2,Field3" #define ORDER_1 3 /* order of first field of 1st vdata */ #define ORDER_2 1 /* order of second field of 1st vdata */ #define ORDER_3 2 /* order of third field of 1st vdata */ #define ST "STATION_NAME" #define VL "VALUES" #define FL "FLOATS" #define MX "STATION_NAME,VALUES,FLOATS" #define EMPTY_VDATA "Empty" #define VGROUP1 "VGROUP1" #define VG_LONGNAME "Vgroup with more than 64 characters in length, 74 characters to be exact!" #define VG_LONGCLASS "Very long class name to classify all Vgroups with more than 64 characters in name" #define APPENDABLE_VDATA "Appendable" static int32 write_vset_stuff(void); static int32 read_vset_stuff(void); static void test_vsdelete(void); static void test_vdelete(void); static void test_vdeletetagref(void); static void test_emptyvdata(void); static void test_vglongnames(void); static void test_getvgroups(void); static void test_getvdatas(void); static void test_blockinfo_oneLB(void); static void test_blockinfo_multLBs(void); static void test_VSofclass(void); /* write some stuff to the file */ static int32 write_vset_stuff(void) { int32 status; int32 fid, aid; int32 vg1, vg2; int32 vs1; int32 count, i, j, num, max_order; int32 ibuf[2000]; /* integer buffer */ float32 fbuf[2000]; /* floating point buffer */ char gbuf[2000]; /* generic buffer */ uint8 *gbuf1 = NULL; /* buffer for uint8 */ float32 *gbuf2 = NULL; /* buffer for float32 */ const char *name; char *p; char8 c; float32 f; /* allocate these buffers dynamically and not off the stack as they were previously handled */ if (gbuf1 == NULL) { gbuf1 = (uint8 *)malloc(sizeof(uint8) * 65536); } if (gbuf2 == NULL) { gbuf2 = (float32 *)malloc(sizeof(float32) * 20000); } fid = Hopen(FNAME0, DFACC_CREATE, 100); if (fid == FAIL) { num_errs++; return FAIL; } if (Vstart(fid) == FAIL) { num_errs++; return FAIL; } /* * Vgroup Generation routines * */ /* * start simple --- create a simple Vgroup */ vg1 = Vattach(fid, -1, "w"); if (vg1 == FAIL) { num_errs++; printf(">>> Failed creating initial Vgroup\n"); } status = Vsetname(vg1, "Simple Vgroup"); CHECK(status, FAIL, "Vsetname:vg1"); status = Vsetclass(vg1, "Test object"); CHECK(status, FAIL, "Vsetclass:vg1"); MESSAGE(5, printf("created Vgroup %s (empty)\n", "Simple Vgroup");); /* * Lets do some more complex ones now */ vg2 = Vattach(fid, -1, "w"); if (vg2 == FAIL) { num_errs++; printf(">>> Failed creating second Vgroup\n"); } /* keep track of how many in Vgroup */ num = 0; /* add first group into the other */ status = Vinsert(vg2, vg1); if (status == FAIL) { num_errs++; printf(">>> Vinsert failed\n"); } else num++; /* add a bogus element */ status = Vaddtagref(vg2, (int32)1000, (int32)12345); if (status == FAIL) { num_errs++; printf(">>> Vaddtagref failed for bogus element\n"); } else num++; /* create an element and insert that */ aid = Hstartwrite(fid, (uint16)123, (uint16)1234, 10); if (aid == FAIL) { num_errs++; printf(">>> Hstartwrite failed\n"); } status = Hendaccess(aid); CHECK(status, FAIL, "Hendaccess:aid"); /* add an existing HDF element */ status = Vaddtagref(vg2, (int32)123, (int32)1234); if (status == FAIL) { num_errs++; printf(">>> Vaddtagref failed for legit element\n"); } else num++; #ifdef NO_DUPLICATES /* attempt to add an element already in the Vgroup */ status = Vaddtagref(vg2, (int32)123, (int32)1234); if (status != FAIL) { num_errs++; printf(">>> Vaddtagref added a duplicate element\n"); } /* check that the number is correct */ if (num != Vntagrefs(vg2)) { num_errs++; printf(">>> Vntagrefs returned %d was expecting %d\n", Vntagrefs(vg2), num); } #endif /* NO_DUPLICATES */ /* lets check the contents */ /* look for a valid one first */ if (Vinqtagref(vg2, 1000, 12345) == FALSE) { num_errs++; printf(">>> Vinqtagref couldn't find valid element\n"); } /* look for a bogus one */ if (Vinqtagref(vg2, 1000, 123456) != FALSE) { num_errs++; printf(">>> Vinqtagref found a bogus element\n"); } status = Vsetname(vg2, "Second Vgroup"); CHECK(status, FAIL, "Vsetname:for vg2"); Vsetclass(vg2, "Test object"); CHECK(status, FAIL, "Vsetclass: for vg2"); status = Vdetach(vg1); CHECK(status, FAIL, "Vdetach:vg1"); status = Vdetach(vg2); CHECK(status, FAIL, "Vdetach:vg2"); MESSAGE(5, printf("created Vgroup %s with %d elements\n", "Second Vgroup", (int)num);); /* * Vdata Generation routines * */ /* Float32 Vdata */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach"); name = "Float Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname"); status = VSsetclass(vs1, "Test object"); CHECK(status, FAIL, "VSsetclass"); status = VSfdefine(vs1, FIELD1, DFNT_FLOAT32, 1); CHECK(status, FAIL, "VSfdefine"); /* Verify that VSsetfields will return FAIL when passing in a NULL for field name list (bug #554) - BMR 5/17/01 */ status = VSsetfields(vs1, NULL); VERIFY(status, FAIL, "VSsetfields"); status = VSsetfields(vs1, FIELD1); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* create some bogus data */ for (i = 0, count = 100; i < count; i++) fbuf[i] = (float32)i; /* store it */ status = VSwrite(vs1, (unsigned char *)fbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); /* Test VSgetexternalfile on a vdata without external element */ /* status = VSgetexternalfile(vs1, 0, NULL, NULL); VERIFY_VOID(status, FAIL, "VSgetexternalfile"); */ /* Test VSgetexternalinfo on a vdata without external element */ status = VSgetexternalinfo(vs1, 0, NULL, NULL, NULL); VERIFY(status, 0, "VSgetexternalinfo"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d elements\n", name, (int)count);); /* Int32 Vdata */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Integer Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); status = VSsetclass(vs1, "Test object"); CHECK(status, FAIL, "VSsetclass:vs1"); status = VSfdefine(vs1, FIELD2, DFNT_INT32, 2); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSsetfields(vs1, FIELD2); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* change this vdata to store in an external file */ status = VSsetexternalfile(vs1, EXTFNM, (int32)0); if (status == FAIL) { num_errs++; printf(">>> VSsetexternalfile failed\n"); } /* create some bogus data */ for (i = 0, count = 100; i < 2 * count; i++) ibuf[i] = i; /* store it */ status = VSwrite(vs1, (unsigned char *)ibuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d elements\n", name, (int)count);); /* Int32 and Float32 Vdata */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Mixed Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); status = VSsetclass(vs1, "No class specified"); CHECK(status, FAIL, "VSsetclass:vs1"); status = VSfdefine(vs1, "A", DFNT_FLOAT32, 1); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSfdefine(vs1, "B", DFNT_INT32, 1); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSsetfields(vs1, "A, B"); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* create some bogus data */ p = gbuf; for (i = 0, count = 100; i < count; i++) { float32 tf = (float32)(i * 2); memcpy(p, &tf, sizeof(float32)); p += sizeof(float32); memcpy(p, &i, sizeof(int32)); p += sizeof(int32); } /* store it */ status = VSwrite(vs1, (unsigned char *)gbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d elements\n", name, (int)count);); /* mixed order Vdata */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Multi-Order Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); status = VSsetclass(vs1, "No class specified"); CHECK(status, FAIL, "VSsetclass:vs1"); status = VSfdefine(vs1, ST, DFNT_CHAR8, 2); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSfdefine(vs1, VL, DFNT_INT32, 3); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSfdefine(vs1, FL, DFNT_FLOAT32, 1); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSsetfields(vs1, MX); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* create some bogus data */ p = gbuf; c = 'a'; j = 0; f = (float32)15.5; for (i = 0, count = 10; i < count; i++) { memcpy(p, &c, sizeof(char8)); p += sizeof(char8); c++; memcpy(p, &c, sizeof(char8)); p += sizeof(char8); c++; memcpy(p, &j, sizeof(int32)); p += sizeof(int32); j++; memcpy(p, &j, sizeof(int32)); p += sizeof(int32); j++; memcpy(p, &j, sizeof(int32)); p += sizeof(int32); j++; memcpy(p, &f, sizeof(float32)); p += sizeof(float32); f += (float32)0.5; } /* store it */ status = VSwrite(vs1, (unsigned char *)gbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d elements\n", name, (int)count);); /* test MAX_ORDER and MAX_FIELD_SIZE */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Max_Order Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); status = VSfdefine(vs1, "max_order", DFNT_UINT8, MAX_ORDER); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSsetfields(vs1, "max_order"); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* create some bogus data */ for (i = 0; i < MAX_ORDER; i++) gbuf1[i] = (uint8)(i % 256); status = VSwrite(vs1, (unsigned char *)gbuf1, 1, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d order\n", name, (int)MAX_ORDER);); vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Max_Fldsize Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); max_order = MAX_FIELD_SIZE / SIZE_FLOAT32; status = VSfdefine(vs1, "max_fldsize", DFNT_FLOAT32, max_order); CHECK(status, FAIL, "VSfdefine:vs1"); status = VSsetfields(vs1, "max_fldsize"); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } /* create some bogus data */ for (i = 0; i < max_order; i++) gbuf2[i] = (float32)i * (float32)0.11; status = VSwrite(vs1, (unsigned char *)gbuf2, 1, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); MESSAGE(5, printf("created VDATA %s with %d order\n", name, (int)max_order);); /* create vdata exceeding MAX_FIELD_SIZE, should fail */ vs1 = VSattach(fid, -1, "w"); CHECK(vs1, FAIL, "VSattach:vs1"); name = "Bad_Fldsize Vdata"; status = VSsetname(vs1, name); CHECK(status, FAIL, "VSsetname:vs1"); max_order = MAX_FIELD_SIZE / SIZE_FLOAT32 + 1; status = VSfdefine(vs1, "bad_fldsize", DFNT_FLOAT32, max_order); if (status != FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } status = VSsetfields(vs1, "bad_fldsize"); if (status != FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", name); } status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); /* create a whole bunch of Vdatas to check for memory leakage */ for (i = 0; i < VDATA_COUNT; i++) { char name2[80]; vs1 = VSattach(fid, -1, "w"); if (vs1 == FAIL) { num_errs++; printf(">>> Vsattach failed on loop %d\n", (int)i); continue; } sprintf(name2, "VdataLoop-%d", (int)i); status = VSsetname(vs1, name2); CHECK(status, FAIL, "VSsetname:vs1"); status = VSfdefine(vs1, "A", DFNT_CHAR8, 1); if (status == FAIL) { num_errs++; printf(">>> VSfdefine failed on loop %d\n", (int)i); continue; } status = VSsetfields(vs1, "A"); if (status == FAIL) { num_errs++; printf(">>> VSsetfields failed on loop %d\n", (int)i); continue; } status = VSwrite(vs1, (unsigned char *)name2, 1, FULL_INTERLACE); CHECK(status, FAIL, "VSwrite:vs1"); status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); } status = Vend(fid); CHECK(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK(status, FAIL, "Hclose:vs1"); free(gbuf1); free(gbuf2); return SUCCEED; } /* write_vset_stuff */ /* read everything back in and check it */ static int32 read_vset_stuff(void) { int32 ibuf[2000]; /* integer buffer */ float32 fbuf[2000]; /* floating point buffer */ char gbuf[2000]; /* generic buffer */ int32 list[50]; int32 tags[100], refs[100], tag, ref; char vsname[512], vsclass[512], fields[512]; char *vgname, *vgclass; char *p; int32 fid; int32 vg1; int32 vs1; int32 status, num, i, count, intr, sz; float32 fl_expected; int32 in_expected; char8 c_expected; uint16 name_len; fid = Hopen(FNAME0, DFACC_RDONLY, 0); if (fid == FAIL) { num_errs++; return FAIL; } status = Vstart(fid); CHECK(status, FAIL, "Vstart:fid"); /* * Verify the Vgroups */ /* test Vlone */ num = 1; status = Vlone(fid, list, 10); if (status != num) { num_errs++; printf(">>> Vlone found %d was expecting %d\n", (int)status, (int)num); } /* test Vgetname and Vgetclass */ vg1 = Vattach(fid, list[0], "r"); if (vg1 == FAIL) { num_errs++; printf(">>> Was not able to attach (r) Vgroup %d\n", (int)list[0]); } status = Vgetnamelen(vg1, &name_len); CHECK(status, FAIL, "Vgetnamelen:vg1"); vgname = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgname, "vgname", "read_vset_stuff"); status = Vgetname(vg1, vgname); CHECK(status, FAIL, "Vgetname:vg1"); status = Vgetclassnamelen(vg1, &name_len); CHECK(status, FAIL, "Vgetclassnamelen:vg1"); vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgclass, "vgclass", "read_vset_stuff"); status = Vgetclass(vg1, vgclass); CHECK(status, FAIL, "Vgetclass:vg1"); if (strcmp(vgname, "Second Vgroup")) { num_errs++; printf(">>> Got bogus Vgroup name : %s\n", vgname); } free(vgname); if (strcmp(vgclass, "Test object")) { num_errs++; printf(">>> Got bogus Vgroup class : %s\n", vgclass); } free(vgclass); num = 3; status = Vgettagrefs(vg1, tags, refs, 100); if (status == FAIL) { num_errs++; printf(">>> Vgettagrefs found %d was expecting %d\n", (int)status, (int)num); } for (i = 0; i < num; i++) { status = Vgettagref(vg1, i, &tag, &ref); if (status == FAIL) { num_errs++; printf(">>> Vgettagref failed on call %d\n", (int)i); } if (tag != tags[i]) { num_errs++; printf(">>> Vgettagref Tag #%d disagrees %d %d\n", (int)i, (int)tag, (int)tags[i]); } if (ref != refs[i]) { num_errs++; printf(">>> Vgettagref Ref #%d disagrees %d %d\n", (int)i, (int)ref, (int)refs[i]); } } status = Vdetach(vg1); CHECK(status, FAIL, "Vdetach:vg1"); /* test Vgetid */ ref = Vgetid(fid, -1); if (ref == FAIL) { num_errs++; printf(">>> Vgetid was unable to find first Vgroup\n"); } ref = Vgetid(fid, ref); if (ref != list[0]) { num_errs++; printf(">>> Vgetid was unable to find second Vgroup (should have been first lone one)\n"); } /* * Verify the Vdatas * */ /* test VSgetid */ ref = VSgetid(fid, -1); if (ref == FAIL) { num_errs++; printf(">>> VSgetid was unable to find first Vdata\n"); } /* read in the first data and verify metadata and contents */ vs1 = VSattach(fid, ref, "r"); CHECK(vs1, FAIL, "VSattach:vs1"); status = VSgetname(vs1, vsname); CHECK(status, FAIL, "VSgetname:vs1"); status = VSgetclass(vs1, vsclass); CHECK(status, FAIL, "VSgetclass:vs1"); if (strcmp(vsname, "Float Vdata")) { num_errs++; printf(">>> Got bogus Vdata name (VSgetname) : %s\n", vsname); } if (strcmp(vsclass, "Test object")) { num_errs++; printf(">>> Got bogus Vdata class : %s\n", vsclass); } status = VSinquire(vs1, &count, &intr, fields, &sz, vsname); if (status == FAIL) { num_errs++; printf(">>> VSinquire failed on float Vdata\n"); } if (strcmp(vsname, "Float Vdata")) { num_errs++; printf(">>> Got bogus Float Vdata name (VSinquire) : %s\n", vsname); } if (count != 100) { num_errs++; printf(">>> Got wrong count %d expecting 100\n", (int)count); } if ((size_t)sz != sizeof(float32)) { num_errs++; printf(">>> Got wrong data size %d should be sizeof(float32)\n", (int)sz); } #ifndef VDATA_FIELDS_ALL_UPPER if (strcmp(fields, FIELD1)) { num_errs++; printf(">>> Got bogus field name %s\n", fields); } #else if (strcmp(fields, FIELD1_UPPER)) { num_errs++; printf(">>> Got bogus field name %s\n", fields); } #endif /* VDATA_FIELDS_ALL_UPPER */ /* read it */ status = VSsetfields(vs1, fields); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < count; i++) fbuf[i] = 0.0F; status = VSread(vs1, (unsigned char *)fbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); /* verify */ for (i = 0; i < count; i++) { if (!H4_FLT_ABS_EQUAL(fbuf[i], (float32)i)) { num_errs++; printf(">>> Float value %d was expecting %d got %f\n", (int)i, (int)i, (double)fbuf[i]); } } status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); /* Move to the next one (integers) */ ref = VSgetid(fid, ref); if (ref == FAIL) { num_errs++; printf(">>> VSgetid was unable to find second Vdata\n"); } /* read in the first data and verify metadata and contents */ vs1 = VSattach(fid, ref, "r"); CHECK(vs1, FAIL, "VSattach:vs1"); status = VSgetname(vs1, vsname); CHECK(status, FAIL, "VSgetname:vs1"); status = VSgetclass(vs1, vsclass); CHECK(status, FAIL, "VSgetclass:vs1"); if (strcmp(vsname, "Integer Vdata")) { num_errs++; printf(">>> Got bogus Vdata name (VSgetname) : %s\n", vsname); } if (strcmp(vsclass, "Test object")) { num_errs++; printf(">>> Got bogus Vdata class : %s\n", vsclass); } status = VSinquire(vs1, &count, &intr, fields, &sz, vsname); if (status == FAIL) { num_errs++; printf(">>> VSinquire failed on float Vdata\n"); } if (strcmp(vsname, "Integer Vdata")) { num_errs++; printf(">>> Got bogus Integer Vdata name (VSinquire) : %s\n", vsname); } if (count != 100) { num_errs++; printf(">>> Got wrong count %d expecting 100\n", (int)count); } if ((size_t)sz != 2 * sizeof(int32)) { num_errs++; printf(">>> Got wrong data size %d should be 2 * sizeof(int32)\n", (int)sz); } if (strcmp(fields, FIELD2)) { num_errs++; printf(">>> Got bogus field name %s\n", fields); } /* read it */ status = VSsetfields(vs1, fields); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < 2 * count; i++) ibuf[i] = 0; status = VSread(vs1, (unsigned char *)ibuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); /* verify */ for (i = 0; i < 2 * count; i++) { if (ibuf[i] != i) { num_errs++; printf(">>> Int value %d was expecting %d got %d\n", (int)i, (int)i, (int)ibuf[i]); } } status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); /* testing VSsetexternalfile by reading the external file directly */ { hdf_file_t fd; int j; int32 ival; /* low level open of external file */ fd = HI_OPEN(EXTFNM, DFACC_RDONLY); if (OPENERR(fd)) { num_errs++; printf(">>> Reopen External file %s failed\n", EXTFNM); } else { status = HI_READ(fd, gbuf, (2 * count * DFKNTsize(DFNT_INT32))); if (status == FAIL) { num_errs++; printf(">>> Reading External file data failed\n"); } else { j = 0; for (i = 0; i < 2 * count; i++) { ival = 0xff & gbuf[j++]; ival = ival << 8 | (0xff & gbuf[j++]); ival = ival << 8 | (0xff & gbuf[j++]); ival = ival << 8 | (0xff & gbuf[j++]); if (ival != i) { num_errs++; printf(">>> External value %d was expecting %d got %d\n", (int)i, (int)i, (int)ival); } } } /* low level close of external file */ HI_CLOSE(fd); } } /* Move to the next one (integers + floats) */ ref = VSgetid(fid, ref); if (ref == FAIL) { num_errs++; printf(">>> VSgetid was unable to find third Vdata\n"); } /* read in the first data and verify metadata and contents */ vs1 = VSattach(fid, ref, "r"); CHECK(vs1, FAIL, "VSattach:vs1"); status = VSgetname(vs1, vsname); CHECK(status, FAIL, "VSgetname:vs1"); status = VSgetclass(vs1, vsclass); CHECK(status, FAIL, "VSgetclass:vs1"); if (strcmp(vsname, "Mixed Vdata")) { num_errs++; printf(">>> Got bogus Vdata name (VSgetname) : %s\n", vsname); } if (strcmp(vsclass, "No class specified")) { num_errs++; printf(">>> Got bogus Vdata class : %s\n", vsclass); } status = VSinquire(vs1, &count, &intr, fields, &sz, vsname); if (status == FAIL) { num_errs++; printf(">>> VSinquire failed on float Vdata\n"); } if (strcmp(vsname, "Mixed Vdata")) { num_errs++; printf(">>> Got bogus Mixed Vdata name (VSinquire) : %s\n", vsname); } if (count != 100) { num_errs++; printf(">>> Got wrong count %d expecting 100\n", (int)count); } if ((size_t)sz != sizeof(int32) + sizeof(float32)) { num_errs++; printf(">>> Got wrong data size %d should be sizeof(int32) + sizeof(float32)\n", (int)sz); } if (strcmp(fields, "A,B")) { num_errs++; printf(">>> Got bogus field name %s\n", fields); } /* read it */ status = VSsetfields(vs1, fields); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < 1000; i++) gbuf[i] = 0; status = VSread(vs1, (unsigned char *)gbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); /* verify */ p = gbuf; for (i = 0; i < count; i++) { float32 fl = 0.0F; int32 in = 0; memcpy(&fl, p, sizeof(float32)); p += sizeof(float32); memcpy(&in, p, sizeof(int32)); p += sizeof(int32); if (in != i) { num_errs++; printf(">>> Mixed int value %d was expecting %d got %d\n", (int)i, (int)i, (int)in); } if (!H4_FLT_ABS_EQUAL(fl, (float32)(i * 2))) { num_errs++; printf(">>> Mixed float value %d was expecting %d got %f\n", (int)i, (int)i, (double)fl); } } status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); /* Move to the next one (multi-order) */ ref = VSgetid(fid, ref); if (ref == FAIL) { num_errs++; printf(">>> VSgetid was unable to find multi-order Vdata\n"); } /* read in the first data and verify metadata and contents */ vs1 = VSattach(fid, ref, "r"); CHECK(vs1, FAIL, "VSattach:vs1"); status = VSgetname(vs1, vsname); CHECK(status, FAIL, "VSgetname:vs1"); status = VSgetclass(vs1, vsclass); CHECK(status, FAIL, "VSgetclass:vs1"); if (strcmp(vsname, "Multi-Order Vdata")) { num_errs++; printf(">>> Got bogus Vdata name (VSgetname) : %s\n", vsname); } if (strcmp(vsclass, "No class specified")) { num_errs++; printf(">>> Got bogus Vdata class : %s\n", vsclass); } status = VSinquire(vs1, &count, &intr, fields, &sz, vsname); if (status == FAIL) { num_errs++; printf(">>> VSinquire failed on multi-order Vdata\n"); } if (count != 10) { num_errs++; printf(">>> Got wrong count %d expecting 10\n", (int)count); } if (strcmp(fields, MX)) { num_errs++; printf(">>> Got bogus field name %s\n", fields); } /* * verify - read in all fields */ /* read it */ status = VSsetfields(vs1, fields); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < 1000; i++) gbuf[i] = 0; status = VSread(vs1, (unsigned char *)gbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); p = gbuf; fl_expected = (float32)15.5; in_expected = 0; c_expected = 'a'; for (i = 0; i < count; i++) { float32 fl = 0.0F; int32 in = 0; char8 c = 0; /* read and verify characters */ memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> Multi-order char value %d.0 was expecting %c got %c\n", (int)i, c_expected, c); } c_expected++; memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> Multi-order char value %d.1 was expecting %c got %c\n", (int)i, c_expected, c); } c_expected++; /* read and verify integers */ memcpy(&in, p, sizeof(int32)); p += sizeof(int32); if (in != in_expected) { num_errs++; printf(">>> Multi-order int value %d.0 was expecting %d got %d\n", (int)i, (int)in_expected, (int)in); } in_expected++; memcpy(&in, p, sizeof(int32)); p += sizeof(int32); if (in != in_expected) { num_errs++; printf(">>> Multi-order int value %d.1 was expecting %d got %d\n", (int)i, (int)in_expected, (int)in); } in_expected++; memcpy(&in, p, sizeof(int32)); p += sizeof(int32); if (in != in_expected) { num_errs++; printf(">>> Multi-order int value %d.2 was expecting %d got %d\n", (int)i, (int)in_expected, (int)in); } in_expected++; /* read and verify floating point value */ memcpy(&fl, p, sizeof(float32)); p += sizeof(float32); if (!H4_FLT_ABS_EQUAL(fl, fl_expected)) { num_errs++; printf(">>> Multi-order float value %d was expecting %f got %f\n", (int)i, (double)fl_expected, (double)fl); } fl_expected += 0.5F; } /* * verify - just read in the character field with FULL_INTERLACE */ /* read it */ status = VSseek(vs1, 0); CHECK(status, FAIL, "VSseek:vs1"); status = VSsetfields(vs1, ST); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < 1000; i++) gbuf[i] = 0; status = VSread(vs1, (unsigned char *)gbuf, count, FULL_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); p = gbuf; c_expected = 'a'; for (i = 0; i < count; i++) { char8 c = '\0'; /* read and verify characters */ memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> FULL_INTERLACE read char value %d.0 (%c) got %c %d\n", (int)i, c_expected, c, c); } c_expected++; memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> FULL_INTERLACE read char value %d.1 (%c) %c got %c\n", (int)i, c_expected, c, c); } c_expected++; } /* * verify - just read in the character field with NO_INTERLACE */ /* read it */ status = VSseek(vs1, 0); CHECK(status, FAIL, "VSseek:vs1"); status = VSsetfields(vs1, ST); CHECK(status, FAIL, "VSsetfields:vs1"); for (i = 0; i < 1000; i++) gbuf[i] = 0; status = VSread(vs1, (unsigned char *)gbuf, count, NO_INTERLACE); CHECK(status, FAIL, "VSread:vs1"); p = gbuf; c_expected = 'a'; for (i = 0; i < count; i++) { char8 c = '\0'; /* read and verify characters */ memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> NO_INTERLACE read char value %d.0 (%c) got %c\n", (int)i, c_expected, c); } c_expected++; memcpy(&c, p, sizeof(char8)); p += sizeof(char8); if (c != c_expected) { num_errs++; printf(">>> NO_INTERLACE read char value %d.1 (%c) %c got\n", (int)i, c_expected, c); } c_expected++; } /* verify that VSfind does not mess up the AIDs of attached Vdatas */ status = VSfind(fid, "foo"); CHECK(status, FAIL, "VSfind:fid"); if (VSseek(vs1, 0) == FAIL) { num_errs++; printf(">>> VSseek failed after VSfind call\n"); } status = VSdetach(vs1); CHECK(status, FAIL, "VSdetach:vs1"); status = Vend(fid); CHECK(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK(status, FAIL, "Hclose:fid"); return SUCCEED; } /* read_vset_stuff */ /* Testing VSdelete for vdatas. Modification: 2011/12/22: added a test for VSgetexternalinfo on non-external vdata. */ static void test_vsdelete(void) { #define FIELD_NAME "Field Entries" #define NUMBER_OF_ROWS 10 #define ORDER 3 int32 fid; int32 vdata_id; int32 status; int32 num_of_elements; int16 vdata_buf[NUMBER_OF_ROWS * ORDER]; int32 v_ref; /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* Create a new vdata. */ vdata_id = VSattach(fid, -1, "w"); CHECK_VOID(vdata_id, FAIL, "VSattach:vdata_id"); /* Define the field data name, type and order. */ status = VSfdefine(vdata_id, FIELD_NAME, DFNT_INT16, ORDER); CHECK_VOID(status, FAIL, "VSfdefine:vdata_id"); /* Specify the field(s) that will be written to. */ status = VSsetfields(vdata_id, FIELD_NAME); CHECK_VOID(status, FAIL, "VSsetfields:vdata_id"); /* Generate the Vset data. */ for (int16 i = 0; i < NUMBER_OF_ROWS * ORDER; i += ORDER) { vdata_buf[i] = i; vdata_buf[i + 1] = i + 1; vdata_buf[i + 2] = i + 2; } /* Write the data to the Vset. */ num_of_elements = VSwrite(vdata_id, (const uint8 *)vdata_buf, NUMBER_OF_ROWS, FULL_INTERLACE); CHECK_VOID(num_of_elements, FAIL, "VSwrite:"); /* Set the name and class. */ status = VSsetname(vdata_id, "Vdata should have been deleted"); CHECK_VOID(status, FAIL, "VSsetname:vdata_id"); status = VSsetclass(vdata_id, "Vdata should have been deleted"); CHECK_VOID(status, FAIL, "VSsetclass:vdata_id"); /* get ref of Vdata */ v_ref = VSQueryref(vdata_id); CHECK_VOID(v_ref, FAIL, "VSQueryref:vdata_id"); /* Terminate access to the vdata. */ status = VSdetach(vdata_id); CHECK_VOID(status, FAIL, "VSdetach:vdata_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open the file again and delete the vdata */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* attach to Vdata */ vdata_id = VSattach(fid, v_ref, "w"); CHECK_VOID(vdata_id, FAIL, "VSattach:vdata_id"); /* Test VSgetexternalinfo on this vdata that doesn't have external element, should return 0 for length of external file name */ { intn name_len = 0; name_len = VSgetexternalinfo(vdata_id, 0, NULL, NULL, NULL); VERIFY_VOID(name_len, 0, "VSgetexternalinfo:vdata_id"); } /* Delete this Vdata */ status = VSdelete(fid, v_ref); CHECK_VOID(status, FAIL, "VSdelete:vdata_id"); /* Terminate access to the vdata. */ status = VSdetach(vdata_id); CHECK_VOID(status, FAIL, "VSdetach:vdata_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open file again and try to attach to vdata with 'v_ref'. The VSattach should fail. */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent the vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* Try to attach to Vdata. This should fail now */ vdata_id = VSattach(fid, v_ref, "w"); if (vdata_id != FAIL) { num_errs++; printf(">>> VSdelete failed to delete vdata \n"); } /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); } /* test_vsdelete */ /* Testing Vdelete for vgroups. */ static void test_vdelete(void) { int32 fid; int32 vgroup_id; int32 status; int32 vg_ref; /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* Create a new vgroup. */ vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach:vgroup_id"); /* Set the name and class. */ status = Vsetname(vgroup_id, "Vgroup should have been deleted"); CHECK_VOID(status, FAIL, "Vsetname:vgroup_id"); status = Vsetclass(vgroup_id, "Vgroup should have been deleted"); CHECK_VOID(status, FAIL, "Vsetclass:vgroup_id"); /* get ref of vgroup */ vg_ref = VQueryref(vgroup_id); CHECK_VOID(vg_ref, FAIL, "VQueryref:vgroup_id"); /* Terminate access to the vgroup. */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach:vgroup_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open the file again and delete the vgroup */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* attach to vgroup */ vgroup_id = Vattach(fid, vg_ref, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach:vgroup_id"); /* delete this vgroup */ status = Vdelete(fid, vg_ref); CHECK_VOID(status, FAIL, "Vdelete:vgroup_id"); /* Terminate access to the vgroup. */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "VSdetach:vgroup_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open file again and try to attach to vgroup with 'vg_ref'. The Vattach should fail. */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent the vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* Try to attach to vgroup. This should fail now */ vgroup_id = Vattach(fid, vg_ref, "w"); if (vgroup_id != FAIL) { num_errs++; printf(">>> Vdelete failed to delete vdata \n"); } /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); } /* test_vdelete */ /* Testing Vdeletetagref() for vgroups. */ static void test_vdeletetagref(void) { int32 fid; int32 vgroup_id; int32 status; int32 vg_ref; /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* Create a new vgroup. */ vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach:vgroup_id"); /* Set the name and class. */ status = Vsetname(vgroup_id, "Vgroup to delete elements from"); CHECK_VOID(status, FAIL, "Vsetname:vgroup_id"); status = Vsetclass(vgroup_id, "Vgroup to delete elements from"); CHECK_VOID(status, FAIL, "Vsetclass:vgroup_id"); /* add a few tag/ref pairs to Vgroup */ status = Vaddtagref(vgroup_id, 1000, 12345); CHECK_VOID(status, FAIL, "Vaddtagref"); status = Vaddtagref(vgroup_id, 1000, 12346); CHECK_VOID(status, FAIL, "Vaddtagref"); #ifndef NO_DUPLICATES /* duplicate tag/ref pairs allowed. So add a duplicate */ status = Vaddtagref(vgroup_id, 1000, 12346); CHECK_VOID(status, FAIL, "Vaddtagref"); #endif /* NO_DUPLICATES */ status = Vaddtagref(vgroup_id, 2000, 12345); CHECK_VOID(status, FAIL, "Vaddtagref"); status = Vaddtagref(vgroup_id, 2000, 12346); CHECK_VOID(status, FAIL, "Vaddtagref"); status = Vaddtagref(vgroup_id, 3000, 12345); CHECK_VOID(status, FAIL, "Vaddtagref"); status = Vaddtagref(vgroup_id, 3000, 12346); CHECK_VOID(status, FAIL, "Vaddtagref"); /* get ref of vgroup */ vg_ref = VQueryref(vgroup_id); CHECK_VOID(vg_ref, FAIL, "VQueryref:vgroup_id"); /* delete one item in vgroup during this round */ status = Vdeletetagref(vgroup_id, 1000, 12346); CHECK_VOID(status, FAIL, "Vdeletetagref:vgroup_id"); /* Terminate access to the vgroup. */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach:vgroup_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open the file again and delete two elements in the vgroup during this round. */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* attach to vgroup */ vgroup_id = Vattach(fid, vg_ref, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach:vgroup_id"); #ifndef NO_DUPLICATES /* inquire about number of elements in Vgroup. There should only be 6 of them including one duplicate. */ if (6 != Vntagrefs(vgroup_id)) { num_errs++; printf(">>> Vntagrefs returned %d was expecting %d\n", (int)Vntagrefs(vgroup_id), 6); } /* delete a duplicate in this vgroup */ status = Vdeletetagref(vgroup_id, 1000, 12346); CHECK_VOID(status, FAIL, "Vdeletetagref:vgroup_id"); #else /* NO_DUPLICATES */ /* inquire about number of elements in Vgroup. There should only be 5 of them since no duplicates . */ if (5 != Vntagrefs(vgroup_id)) { num_errs++; printf(">>> Vntagrefs returned %d was expecting %d\n", (int)Vntagrefs(vgroup_id), 5); } #endif /* NO_DUPLICATES */ /* delete some tag/refs in this vgroup */ status = Vdeletetagref(vgroup_id, 2000, 12346); CHECK_VOID(status, FAIL, "Vdeletetagref:vgroup_id"); /* this should be the last element in the vgroup if I have the order right */ status = Vdeletetagref(vgroup_id, 3000, 12346); CHECK_VOID(status, FAIL, "Vdeletetagref:vgroup_id"); /* Terminate access to the vgroup. */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "VSdetach:vgroup_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); /* Now open file again and try to attach to vgroup with 'vg_ref'. There should only be 3 elements left in Vgroup left . */ /* Open the HDF file. */ fid = Hopen(FNAME0, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen:tvset.hdf"); /* Initialize HDF for subsequent the vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart:fid"); /* attach to vgroup, read only */ vgroup_id = Vattach(fid, vg_ref, "r"); CHECK_VOID(vgroup_id, FAIL, "Vattach:vgroup_id"); /* inquire about number of elements left in Vgroup. There should only be 3 of them now. */ if (3 != Vntagrefs(vgroup_id)) { num_errs++; printf(">>> Vntagrefs returned %d was expecting %d\n", (int)Vntagrefs(vgroup_id), 3); } /* check tag/ref pair of those 3 elements */ if (Vinqtagref(vgroup_id, 1000, 12345) == FALSE) { num_errs++; printf(">>> Vinqtagref couldn't find valid element\n"); } if (Vinqtagref(vgroup_id, 2000, 12345) == FALSE) { num_errs++; printf(">>> Vinqtagref couldn't find valid element\n"); } if (Vinqtagref(vgroup_id, 3000, 12345) == FALSE) { num_errs++; printf(">>> Vinqtagref couldn't find valid element\n"); } /* Terminate access to the vgroup. */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "VSdetach:vgroup_id"); /* Terminate access to the Vxxx interface and close the file. */ status = Vend(fid); CHECK_VOID(status, FAIL, "Vend:fid"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose:fid"); } /* test_vdeletetagref */ static void test_emptyvdata(void) { int32 status; /* Status values from routines */ int32 fid; /* File ID */ int32 vs1; /* Vdata ID */ int32 ref; /* Vdata ref */ char vsname[VSNAMELENMAX], fields[FIELDNAMELENMAX * VSFIELDMAX]; /* Open the HDF file. */ fid = Hopen(EMPTYNM, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create a new vdata. */ vs1 = VSattach(fid, -1, "w"); CHECK_VOID(vs1, FAIL, "VSattach"); status = VSsetname(vs1, EMPTY_VDATA); CHECK_VOID(status, FAIL, "VSsetname"); status = VSdetach(vs1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(5, printf("created empty VDATA %s\n", EMPTY_VDATA);); /* Re-open the HDF file. */ fid = Hopen(EMPTYNM, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Find the empty vdata. */ ref = VSfind(fid, EMPTY_VDATA); CHECK_VOID(ref, FAIL, "VSfind"); vs1 = VSattach(fid, ref, "r"); CHECK_VOID(vs1, FAIL, "VSattach"); status = VSgetname(vs1, vsname); CHECK_VOID(status, FAIL, "VSgetname"); if (strcmp(vsname, EMPTY_VDATA)) { num_errs++; printf(">>> Got bogus Vdata name : %s\n", vsname); } status = VFnfields(vs1); VERIFY_VOID(status, 0, "VFnfields"); /* Verify that VSgetfields will return FAIL when passing in a NULL for field name list (from bug #554), although this might never happen - BMR 5/17/01 */ status = VSgetfields(vs1, NULL); VERIFY_VOID(status, FAIL, "VSgetfields"); status = VSgetfields(vs1, fields); CHECK_VOID(status, FAIL, "VSgetfields"); if (strcmp(fields, "")) { num_errs++; printf(">>> Got bogus field names : %s\n", fields); } status = VSdetach(vs1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(5, printf("read back in empty VDATA %s\n", EMPTY_VDATA);); /* Re-open the HDF file. */ fid = Hopen(EMPTYNM, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Find the empty vdata. */ ref = VSfind(fid, EMPTY_VDATA); CHECK_VOID(ref, FAIL, "VSfind"); vs1 = VSattach(fid, ref, "w"); CHECK_VOID(vs1, FAIL, "VSattach"); /* Write out simple vdata fields */ status = VSfdefine(vs1, FIELD1, DFNT_FLOAT32, 1); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSfdefine(vs1, FIELD2, DFNT_INT32, 2); CHECK_VOID(status, FAIL, "VSfdefine"); status = VSsetfields(vs1, FIELD1 "," FIELD2); if (status == FAIL) { num_errs++; printf(">>> Vsetfields failed for %s\n", vsname); } status = VSdetach(vs1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); MESSAGE(5, printf("changed empty VDATA %s to have two fields\n", EMPTY_VDATA);); /* Re-open the HDF file. */ fid = Hopen(EMPTYNM, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Find the empty vdata. */ ref = VSfind(fid, EMPTY_VDATA); CHECK_VOID(ref, FAIL, "VSfind"); vs1 = VSattach(fid, ref, "r"); CHECK_VOID(vs1, FAIL, "VSattach"); status = VFnfields(vs1); VERIFY_VOID(status, 2, "VFnfields"); status = VSgetfields(vs1, fields); CHECK_VOID(status, FAIL, "VSgetfields"); if (strcmp(fields, FIELD1 "," FIELD2)) { num_errs++; printf(">>> Got bogus field names : %s\n", fields); } status = VSdetach(vs1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_emptyvdata() */ static void test_vglongnames(void) { int32 status; /* Status values from routines */ int32 fid; /* File ID */ int32 vg1; /* Vdata ID */ int32 ref; /* Vdata ref */ uint16 name_len; /* Length of a vgroup's name or class name */ char *vgname, *vgclass; /* Open the HDF file. */ fid = Hopen(LONGNAMES, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create a new vgroup. */ vg1 = Vattach(fid, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetname(vg1, VG_LONGNAME); CHECK_VOID(status, FAIL, "VSsetname"); status = Vsetclass(vg1, VG_LONGCLASS); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Create another vgroup of the same class. */ vg1 = Vattach(fid, -1, "w"); CHECK_VOID(vg1, FAIL, "VSattach"); status = Vsetname(vg1, VGROUP1); CHECK_VOID(status, FAIL, "VSsetname"); status = Vsetclass(vg1, VG_LONGCLASS); CHECK_VOID(status, FAIL, "VSsetname"); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /* Re-open the HDF file. */ fid = Hopen(LONGNAMES, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize HDF for subsequent vgroup/vdata access. */ status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Find the long name vgroup. */ ref = Vfind(fid, VG_LONGNAME); CHECK_VOID(ref, FAIL, "VSfind"); vg1 = Vattach(fid, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* get the vgroup's name */ status = Vgetnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgname = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgname, "vgname", "test_vglongnames"); status = Vgetname(vg1, vgname); CHECK_VOID(status, FAIL, "VSgetname"); if (strcmp(vgname, VG_LONGNAME)) { num_errs++; printf(">>> Got bogus Vgroup name : %s\n", vgname); } free(vgname); /* get the vgroup's class */ status = Vgetclassnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgclass, "vgclass", "test_vglongnames"); status = Vgetclass(vg1, vgclass); CHECK_VOID(status, FAIL, "VSgetclass"); if (strcmp(vgclass, VG_LONGCLASS)) { num_errs++; printf(">>> Got bogus Vgroup class : %s\n", vgclass); } free(vgclass); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); /* Find the vgroup VGROUP1. */ ref = Vfind(fid, VGROUP1); CHECK_VOID(ref, FAIL, "VSfind"); vg1 = Vattach(fid, ref, "r"); CHECK_VOID(vg1, FAIL, "VSattach"); /* get the vgroup's name */ status = Vgetnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgname = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgname, "vgname", "test_vglongnames"); status = Vgetname(vg1, vgname); CHECK_VOID(status, FAIL, "VSgetname"); if (strcmp(vgname, VGROUP1)) { num_errs++; printf(">>> Got bogus Vgroup name : %s\n", vgname); } free(vgname); /* get the vgroup's class */ status = Vgetclassnamelen(vg1, &name_len); CHECK_VOID(status, FAIL, "Vgetnamelen"); vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(vgclass, "vgclass", "test_vglongnames"); status = Vgetclass(vg1, vgclass); CHECK_VOID(status, FAIL, "VSgetclass"); if (strcmp(vgclass, VG_LONGCLASS)) { num_errs++; printf(">>> Got bogus Vgroup class : %s\n", vgclass); } free(vgclass); status = Vdetach(vg1); CHECK_VOID(status, FAIL, "Vdetach"); status = Vend(fid); CHECK_VOID(status, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_vglongnames() */ #define USERVGROUPS "tuservgs.hdf" #define NUM_VGROUPS 10 static void test_getvgroups(void) { int32 fid; /* File ID */ int32 vgroup_id, vgroup0_id, vgroup1_id, vgroup2_id, vgroup3_id, vgroup4_id, vgroup5_id; /* Various vgroup IDs */ int32 vgroup_ref; /* Vgroup ref */ uintn n_vgs = 0; uint16 *refarray; int32 ref_list[NUM_VGROUPS]; char vgclass[20]; int ii; int32 status; /* Status values from routines */ intn status_n; /* returned status for functions returning an intn */ /* Create HDF file and initialize the interface. */ fid = Hopen(USERVGROUPS, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create NUM_VGROUPS vgroups and set classname */ for (ii = 0; ii < NUM_VGROUPS; ii++) { /* Create a vgroup. */ vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach"); /* Record its reference number for later access */ vgroup_ref = VQueryref(vgroup_id); CHECK_VOID(vgroup_ref, FAIL, "VQueryref:vgroup_id"); ref_list[ii] = vgroup_ref; /* Set its class name */ sprintf(vgclass, "VG-CLASS-%d", ii); status = Vsetclass(vgroup_id, vgclass); CHECK_VOID(status, FAIL, "Vsetclass"); /* Detach it */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach"); } /* Insert some vgroups into some other vgroups to build some sort of vgroup structure */ /* Insert "VG-CLASS-1" and "VG-CLASS-2" into "VG-CLASS-0" */ vgroup0_id = Vattach(fid, ref_list[0], "w"); CHECK_VOID(vgroup0_id, FAIL, "Vattach"); vgroup1_id = Vattach(fid, ref_list[1], "w"); CHECK_VOID(vgroup1_id, FAIL, "Vattach"); vgroup2_id = Vattach(fid, ref_list[2], "w"); CHECK_VOID(vgroup2_id, FAIL, "Vattach"); status = Vinsert(vgroup0_id, vgroup1_id); CHECK_VOID(status, FAIL, "Vinsert vgroup1_id into vgroup0_id"); status = Vinsert(vgroup0_id, vgroup2_id); CHECK_VOID(status, FAIL, "Vinsert vgroup2_id into vgroup0_id"); /* Insert "VG-CLASS-3", "VG-CLASS-4", and "VG-CLASS-5" into "VG-CLASS-1" */ vgroup3_id = Vattach(fid, ref_list[3], "w"); CHECK_VOID(vgroup3_id, FAIL, "Vattach"); vgroup4_id = Vattach(fid, ref_list[4], "w"); CHECK_VOID(vgroup4_id, FAIL, "Vattach"); vgroup5_id = Vattach(fid, ref_list[5], "w"); CHECK_VOID(vgroup5_id, FAIL, "Vattach"); status = Vinsert(vgroup1_id, vgroup3_id); CHECK_VOID(status, FAIL, "Vinsert vgroup3_id into vgroup1_id"); status = Vinsert(vgroup1_id, vgroup4_id); CHECK_VOID(status, FAIL, "Vinsert vgroup4_id into vgroup1_id"); status = Vinsert(vgroup1_id, vgroup5_id); CHECK_VOID(status, FAIL, "Vinsert vgroup5_id into vgroup1_id"); /************************************************************** The vgroup structure should look like this: vg0 vg6 vg7 vg8 vg9 | / \ vg1 vg2 | / | \ / | \ vg3 vg4 vg5 Calling Vgetvgroups on the file should return all ten vgroups. Calling Vgetvgroups on vg0 should return 2, vg1 and vg2. Calling Vgetvgroups on vg1 should return 3, vg3, vg4, and vg5 Calling Vgetvgroups on vg6, vg7, vg8, and vg9 should return 0 ***************************************************************/ /* Get and verify the number of vgroups in the file */ n_vgs = Vgetvgroups(fid, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid"); VERIFY_VOID(n_vgs, NUM_VGROUPS, "Vgetvgroups fid"); /* Allocate space to retrieve the reference numbers of n_vgs vgroups */ refarray = (uint16 *)malloc(sizeof(uint16) * n_vgs); /* Get all the vgroups in the file */ n_vgs = Vgetvgroups(fid, 0, n_vgs, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid"); VERIFY_VOID(n_vgs, NUM_VGROUPS, "Vgetvgroups fid"); /* Verify refarray from this Vgetvgroups, it should contain: 2 3 4 5 6 7 8 9 10 11 */ { uint16 result[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Get 5 vgroups starting from vgroup number 5 */ n_vgs = Vgetvgroups(fid, 5, 5, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid (5,5)"); VERIFY_VOID(n_vgs, 5, "Vgetvgroups fid (5,5)"); /* Verify refarray from this Vgetvgroups, it should contain: 7 8 9 10 11 */ { uint16 result[] = {7, 8, 9, 10, 11}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Get and verify the number of vgroups in vgroup0_id */ n_vgs = Vgetvgroups(vgroup0_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup0_id"); VERIFY_VOID(n_vgs, 2, "Vgetvgroups vgroup0_id"); /* Get all the vgroups in vgroup0_id (refarray already allocated to max */ n_vgs = Vgetvgroups(vgroup0_id, 0, n_vgs, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup0_id"); VERIFY_VOID(n_vgs, 2, "Vgetvgroups vgroup0_id"); /* Verify refarray from this Vgetvgroups, it should contain: 3 4 */ { uint16 result[] = {3, 4}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Get and verify the number of vgroups in vgroup1_id */ n_vgs = Vgetvgroups(vgroup1_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup1_id"); VERIFY_VOID(n_vgs, 3, "Vgetvgroups vgroup1_id"); /* Get all the vgroups in vgroup1_id */ n_vgs = Vgetvgroups(vgroup1_id, 0, n_vgs, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup1_id"); VERIFY_VOID(n_vgs, 3, "Vgetvgroups vgroup1_id"); /* Verify refarray from this Vgetvgroups, it should contain: 5 6 7 */ { uint16 result[] = {5, 6, 7}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* This vgroup should have no sub-vgroup */ n_vgs = Vgetvgroups(vgroup5_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup5_id"); VERIFY_VOID(n_vgs, 0, "Vgetvgroups vgroup5_id"); /* These vgroups are not needed anymore. */ status = Vdetach(vgroup2_id); CHECK_VOID(status, FAIL, "Vdetach vgroup2_id"); status = Vdetach(vgroup3_id); CHECK_VOID(status, FAIL, "Vdetach vgroup3_id"); status = Vdetach(vgroup4_id); CHECK_VOID(status, FAIL, "Vdetach vgroup4_id"); status = Vdetach(vgroup5_id); CHECK_VOID(status, FAIL, "Vdetach vgroup5_id"); /* Change class name of vg6 and vg7 to an internal class name to simulate that they are internally created by the library. */ vgroup_id = Vattach(fid, ref_list[6], "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach vg6"); status = Vsetclass(vgroup_id, _HDF_VARIABLE); CHECK_VOID(status, FAIL, "Vsetclass _HDF_VARIABLE"); status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach vg6"); vgroup_id = Vattach(fid, ref_list[7], "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach vg7"); status = Vsetclass(vgroup_id, _HDF_DIMENSION); CHECK_VOID(status, FAIL, "Vsetclass _HDF_DIMENSION"); status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach vg7"); /************************************************************** Calling Vgetvgroups on the file now should return 8 because vg6 and vg7 are no longer seen as user-created vgroups due to their class name change. ***************************************************************/ /* Get the number of vgroups in the file, which shouldn't include the simulated internal vgroups */ n_vgs = Vgetvgroups(fid, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid"); VERIFY_VOID(n_vgs, 8, "Vgetvgroups fid"); /* Get these vgroups */ n_vgs = Vgetvgroups(fid, 0, n_vgs, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid"); VERIFY_VOID(n_vgs, 8, "Vgetvgroups fid"); /* Verify refarray from this Vgetvgroups, it should contain: 2 3 4 5 6 7 10 11 */ { uint16 result[] = {2, 3, 4, 5, 6, 7, 10, 11}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Get 5 vgroups starting from vgroup number 5, the result shouldn't include the simulated internal vgroups */ n_vgs = Vgetvgroups(fid, 5, 5, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups fid"); VERIFY_VOID(n_vgs, 3, "Vgetvgroups fid"); /* Verify refarray from this Vgetvgroups, it should contain: 7 10 11 */ { uint16 result[] = {7, 10, 11}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Check on vgroup0_id again */ n_vgs = Vgetvgroups(vgroup0_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup0_id"); VERIFY_VOID(n_vgs, 2, "Vgetvgroups vgroup0_id"); n_vgs = Vgetvgroups(vgroup0_id, 0, n_vgs, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup0_id"); VERIFY_VOID(n_vgs, 2, "Vgetvgroups vgroup0_id"); /* Verify refarray from this Vgetvgroups, it should contain: 3 4 */ { uint16 result[] = {3, 4}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Passing in more info count (3) than the actual number of vgrous to be retrieved (1) */ n_vgs = Vgetvgroups(vgroup1_id, 2, 3, refarray); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup1_id"); VERIFY_VOID(n_vgs, 1, "Vgetvgroups vgroup1_id"); /* Verify refarray from this Vgetvgroups, it should contain: 7 */ { uint16 result[] = {7}; for (ii = 0; ii < n_vgs; ii++) if (refarray[ii] != result[ii]) fprintf(stderr, "test_getvgroups: incorrect vgroup retrieved at line %d - ref# %d should be %d\n", __LINE__, refarray[ii], result[ii]); } /* Passing in info count as 0 for a non-null array, should fail */ n_vgs = Vgetvgroups(fid, 0, 0, refarray); VERIFY_VOID(n_vgs, FAIL, "Vgetvgroups with info_count = 0"); /* Passing in the starting vgroup beyond the number of user-created vgroups, should fail */ n_vgs = Vgetvgroups(fid, 9, 3, refarray); VERIFY_VOID(n_vgs, FAIL, "Vgetvgroups with start_vg = 9"); free(refarray); /* Close remaining vgroups */ status = Vdetach(vgroup0_id); CHECK_VOID(status, FAIL, "Vdetach vgroup0_id"); status = Vdetach(vgroup1_id); CHECK_VOID(status, FAIL, "Vdetach vgroup1_id"); /* Terminate access to the V interface and close the HDF file. */ status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); } /* test_getvgroups() */ intn check_vgs(int32 id, uintn start_vg, uintn n_vgs, const char *ident_text, /* just for debugging, remove when done */ uintn resultcount, /* expected number of vgroups */ uint16 *resultarray) /* array containing expected values */ { uint16 *refarray = NULL; uintn count = 0, ii; char message[30]; intn ret_value = SUCCEED; strcpy(message, "Vgetvgroups: "); strcat(message, ident_text); /* Get and verify the number of vgroups in the file */ count = Vgetvgroups(id, start_vg, n_vgs, NULL); CHECK(count, FAIL, "Vgetvgroups"); VERIFY(count, resultcount, "Vgetvgroups"); /* Allocate space to retrieve the reference numbers of 'count' vgroups */ refarray = (uint16 *)malloc(sizeof(uint16) * count); if (refarray == NULL) { fprintf(stderr, "check_vgs: Allocation refarray failed\n"); return -1; } /* Get all the vgroups in the file */ count = Vgetvgroups(id, start_vg, count, refarray); CHECK(count, FAIL, "Vgetvgroups"); VERIFY(count, resultcount, "Vgetvgroups"); for (ii = 0; ii < count; ii++) if (refarray[ii] != resultarray[ii]) fprintf(stderr, "%s: at index %d - read value=%d, should be %d\n", ident_text, ii, refarray[ii], resultarray[ii]); free(refarray); return ret_value; } static int check_vds(int32 id, uintn start_vd, uintn n_vds, const char *ident_text, /* just for debugging, remove when done */ uintn resultcount, /* expected number of vdatas */ uint16 *resultarray) /* array containing expected values */ { uint16 *refarray = NULL; uintn count = 0, ii; char message[30]; intn ret_value = SUCCEED; strcpy(message, "VSgetvdatas: "); strcat(message, ident_text); /* Get and verify the number of vdatas in the file */ count = VSgetvdatas(id, start_vd, n_vds, NULL); CHECK(count, FAIL, message); VERIFY(count, resultcount, message); /* Allocate space to retrieve the reference numbers of 'count' vdatas */ refarray = (uint16 *)malloc(sizeof(uint16) * count); if (refarray == NULL) { fprintf(stderr, "check_vds: Allocation refarray failed\n"); return -1; } /* Get all the vdatas in the file */ count = VSgetvdatas(id, start_vd, count, refarray); CHECK(count, FAIL, message); VERIFY(count, resultcount, message); for (ii = 0; ii < count; ii++) if (refarray[ii] != resultarray[ii]) fprintf(stderr, "%s: at index %d - read value=%d, should be %d\n", ident_text, ii, refarray[ii], resultarray[ii]); free(refarray); return ret_value; } #define USERVDATAS "tuservds.hdf" #define NUM_VDATAS 8 static void test_getvdatas(void) { int32 vgroup_id; int32 vgroup_ref; int32 vdata_id; int32 vdata_ref; int32 fid; /* File ID */ int32 vgroup0_id, vgroup1_id, vgroup2_id, vgroup4_id, vgroup6_id, vgroup7_id, vgroup9_id; /* Various vgroup IDs */ int32 vdata1_id, vdata2_id, vdata3_id, vdata4_id, vdata5_id, vdata6_id, vdata7_id; /* Various vdata IDs */ uintn n_vgs = 0; int32 ref_list[NUM_VGROUPS], vdref_list[NUM_VDATAS]; char vgclass[20]; int ii; int32 status; /* Status values from routines */ intn status_n; /* returned status for functions returning an intn */ /* Create HDF file and initialize the interface. */ fid = Hopen(USERVDATAS, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Create NUM_VGROUPS vgroups and set classname */ for (ii = 0; ii < NUM_VGROUPS; ii++) { /* Create a vgroup. */ vgroup_id = Vattach(fid, -1, "w"); CHECK_VOID(vgroup_id, FAIL, "Vattach"); /* Record its reference number for later access */ vgroup_ref = VQueryref(vgroup_id); CHECK_VOID(vgroup_ref, FAIL, "VQueryref:vgroup_id"); ref_list[ii] = vgroup_ref; /* Set its class name */ sprintf(vgclass, "VG-CLASS-%d", ii); status = Vsetclass(vgroup_id, vgclass); CHECK_VOID(status, FAIL, "Vsetclass"); /* Detach it */ status = Vdetach(vgroup_id); CHECK_VOID(status, FAIL, "Vdetach"); } /* Create NUM_VDATAS vgroups and set classname */ for (ii = 0; ii < NUM_VDATAS; ii++) { /* Create a vdata. */ vdata_id = VSattach(fid, -1, "w"); CHECK_VOID(vdata_id, FAIL, "VSattach"); /* Record its reference number for later access */ vdata_ref = VSQueryref(vdata_id); CHECK_VOID(vdata_ref, FAIL, "VSQueryref:vdata_id"); vdref_list[ii] = vdata_ref; /* Set its class name */ sprintf(vgclass, "VS-CLASS-%d", ii); status = VSsetclass(vdata_id, vgclass); CHECK_VOID(status, FAIL, "VSsetclass"); /* Detach it */ status = VSdetach(vdata_id); CHECK_VOID(status, FAIL, "VSdetach"); } /* Insert some vdatas/vgroups into some other vgroups to build some sort of vgroup/vdata structure */ /* Insert "VD-CLASS-1" and "VD-CLASS-2" into "VG-CLASS-0" */ vgroup0_id = Vattach(fid, ref_list[0], "w"); /* "VG-CLASS-0" */ CHECK_VOID(vgroup0_id, FAIL, "Vattach"); vdata1_id = VSattach(fid, vdref_list[1], "w"); /* "VD-CLASS-1" */ CHECK_VOID(vdata1_id, FAIL, "VSattach"); vdata2_id = VSattach(fid, vdref_list[2], "w"); /* "VD-CLASS-2" */ CHECK_VOID(vdata2_id, FAIL, "VSattach"); status = Vinsert(vgroup0_id, vdata1_id); CHECK_VOID(status, FAIL, "Vinsert vdata1_id into vgroup0_id"); status = Vinsert(vgroup0_id, vdata2_id); CHECK_VOID(status, FAIL, "Vinsert vdata2_id into vgroup0_id"); /* Insert "VG-CLASS-7" and "VG-CLASS-9" into "VG-CLASS-0" */ vgroup7_id = Vattach(fid, ref_list[7], "w"); CHECK_VOID(vgroup7_id, FAIL, "Vattach"); vgroup9_id = Vattach(fid, ref_list[9], "w"); CHECK_VOID(vgroup9_id, FAIL, "Vattach"); status = Vinsert(vgroup0_id, vgroup7_id); CHECK_VOID(status, FAIL, "Vinsert vgroup7_id into vgroup0_id"); status = Vinsert(vgroup0_id, vgroup9_id); CHECK_VOID(status, FAIL, "Vinsert vgroup9_id into vgroup0_id"); /* Insert "VD-CLASS-3", "VD-CLASS-4", and "VD-CLASS-5" into "VG-CLASS-9" */ vdata3_id = VSattach(fid, vdref_list[3], "w"); CHECK_VOID(vdata3_id, FAIL, "Vattach"); vdata4_id = VSattach(fid, vdref_list[4], "w"); CHECK_VOID(vdata4_id, FAIL, "Vattach"); vdata5_id = VSattach(fid, vdref_list[5], "w"); CHECK_VOID(vdata4_id, FAIL, "Vattach"); status = Vinsert(vgroup9_id, vdata3_id); CHECK_VOID(status, FAIL, "Vinsert vdata3_id into vgroup9_id"); status = Vinsert(vgroup9_id, vdata4_id); CHECK_VOID(status, FAIL, "Vinsert vdata4_id into vgroup9_id"); status = Vinsert(vgroup9_id, vdata5_id); CHECK_VOID(status, FAIL, "Vinsert vdata5_id into vgroup9_id"); /* Insert "VG-CLASS-4", "VG-CLASS-6", and "VD-CLASS-7" into "VG-CLASS-1" */ vgroup1_id = Vattach(fid, ref_list[1], "w"); CHECK_VOID(vgroup1_id, FAIL, "Vattach"); vgroup4_id = Vattach(fid, ref_list[4], "w"); CHECK_VOID(vgroup4_id, FAIL, "Vattach"); vgroup6_id = Vattach(fid, ref_list[6], "w"); CHECK_VOID(vgroup6_id, FAIL, "Vattach"); vdata7_id = VSattach(fid, vdref_list[7], "w"); CHECK_VOID(vdata7_id, FAIL, "VSattach"); status = Vinsert(vgroup1_id, vgroup4_id); CHECK_VOID(status, FAIL, "Vinsert vgroup4_id into vgroup1_id"); status = Vinsert(vgroup1_id, vgroup6_id); CHECK_VOID(status, FAIL, "Vinsert vgroup6_id into vgroup1_id"); status = Vinsert(vgroup1_id, vdata7_id); CHECK_VOID(status, FAIL, "Vinsert vdata7_id into vgroup1_id"); /* Insert "VD-CLASS-6", "VG-CLASS-2" into "VG-CLASS-6" */ vdata6_id = VSattach(fid, vdref_list[6], "w"); CHECK_VOID(vdata6_id, FAIL, "VSattach"); vgroup2_id = Vattach(fid, ref_list[2], "w"); CHECK_VOID(vgroup2_id, FAIL, "Vattach"); status = Vinsert(vgroup6_id, vgroup2_id); CHECK_VOID(status, FAIL, "Vinsert vgroup2_id into vgroup6_id"); status = Vinsert(vgroup6_id, vdata6_id); CHECK_VOID(status, FAIL, "Vinsert vdata6_id into vgroup6_id"); status = Vdetach(vgroup0_id); CHECK_VOID(status, FAIL, "Vdetach vgroup0_id"); status = Vdetach(vgroup1_id); CHECK_VOID(status, FAIL, "Vdetach vgroup1_id"); status = Vdetach(vgroup2_id); CHECK_VOID(status, FAIL, "Vdetach vgroup2_id"); status = Vdetach(vgroup4_id); CHECK_VOID(status, FAIL, "Vdetach vgroup4_id"); status = Vdetach(vgroup6_id); CHECK_VOID(status, FAIL, "Vdetach vgroup6_id"); status = Vdetach(vgroup7_id); CHECK_VOID(status, FAIL, "Vdetach vgroup7_id"); status = Vdetach(vgroup9_id); CHECK_VOID(status, FAIL, "Vdetach vgroup9_id"); status = VSdetach(vdata1_id); CHECK_VOID(status, FAIL, "VSdetach vdata1_id"); status = VSdetach(vdata2_id); CHECK_VOID(status, FAIL, "VSdetach vdata2_id"); status = VSdetach(vdata3_id); CHECK_VOID(status, FAIL, "VSdetach vdata3_id"); status = VSdetach(vdata4_id); CHECK_VOID(status, FAIL, "VSdetach vdata4_id"); status = VSdetach(vdata5_id); CHECK_VOID(status, FAIL, "VSdetach vdata5_id"); status = VSdetach(vdata6_id); CHECK_VOID(status, FAIL, "VSdetach vdata6_id"); status = VSdetach(vdata7_id); CHECK_VOID(status, FAIL, "VSdetach vdata7_id"); /* Terminate access to the V interface and close the HDF file. */ status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); /************************************************************** The vgroup structure should look like this: vg0 vg1 | | +--+-+-----+ / | \ | | / | \ /\ / \ vg4 vg6 vd7 / \ / \ | vd1 vd2 vg7 vg9 / \ | / \ / | \ / \ / | \ vd6 vg2 vd3 vd4 vd5 Calling Vgetvgroups on the file should return all NUM_VGROUPS vgroups Calling VSgetvdatas on the file should return all NUM_VDATAS vdatas Calling Vgetvgroups on vg0 should return 2, vg7 and vg9 Calling VSgetvdatas on vg0 should return 2, vd1 and vd2 Calling Vgetvgroups on vg1 should return 2, vg4 and vg6 Calling VSgetvdatas on vg1 should return 1, vd7 Calling Vgetvgroups on vg6 should return 1, vg2 Calling VSgetvdatas on vg6 should return 1, vd6 Calling Vgetvgroups on vg9 should return 0 Calling Vgetvgroups on vg7 should return 0 Calling VSgetvdatas on vg9 starting at 2, with n_vds=2, should return 1, vd5 Calling Vgetvgroups on vg1 starting at 1, with n_vgs=3, should return 1, vg6 ***************************************************************/ /* Open the file to test Vgetvgroups and Vgetdatas */ fid = Hopen(USERVDATAS, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); status = Vstart(fid); CHECK_VOID(status, FAIL, "Vstart"); /* Test getting all vgroups in the file: fid, start_vg=0, n_vgs=0 */ { uint16 result[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; status = check_vgs(fid, 0, 0, "file, 0, 0", NUM_VGROUPS, result); CHECK_VOID(status, FAIL, "Vgetvgroups fid"); } /* Test getting all vdatas in the file: fid, start_vd=0, n_vds=0 */ { uint16 result[] = {12, 13, 14, 15, 16, 17, 18, 19}; status = check_vds(fid, 0, 0, "file, 0, 0", NUM_VDATAS, result); CHECK_VOID(status, FAIL, "VSgetvdatas fid"); } vgroup0_id = Vattach(fid, ref_list[0], "w"); /* "VG-CLASS-0" */ CHECK_VOID(vgroup0_id, FAIL, "Vattach vgroup0_id"); /* Test getting vgroups in vg0: vgroup0_id, start_vd=0, n_vds=0 */ { uint16 result[] = {9, 11}; status = check_vgs(vgroup0_id, 0, 0, "vgroup0_id, 0, 0", 2, result); CHECK_VOID(status, FAIL, "VSgetvgroups vgroup0_id"); } /* Test getting vdatas in vg0: vgroup0_id, start_vd=0, n_vds=0 */ { uint16 result[] = {13, 14}; status = check_vds(vgroup0_id, 0, 0, "vgroup0_id, 0, 0", 2, result); CHECK_VOID(status, FAIL, "VSgetvdatas fid"); } vgroup1_id = Vattach(fid, ref_list[1], "w"); /* "VG-CLASS-1" */ CHECK_VOID(vgroup1_id, FAIL, "Vattach vgroup1_id"); /* Test getting vgroups in vg1: vgroup1_id, start_vd=0, n_vds=0 */ { uint16 result[] = {6, 8}; /* vg4 and vg6 */ status = check_vgs(vgroup1_id, 0, 0, "vgroup1_id, 0, 0", 2, result); CHECK_VOID(status, FAIL, "Vgetvgroups vgroup1_id"); } /* Test getting vdatas in vg1: vgroup1_id, start_vd=0, n_vds=0 */ { uint16 result[] = {19}; /* vd7 */ status = check_vds(vgroup1_id, 0, 0, "vgroup1_id, 0, 0", 1, result); CHECK_VOID(status, FAIL, "VSgetvdata vgroup1_id"); } vgroup6_id = Vattach(fid, ref_list[6], "w"); /* "VG-CLASS-6" */ CHECK_VOID(vgroup6_id, FAIL, "Vattach vgroup6_id"); /* Test getting vgroups in vg6: vgroup6_id, start_vd=0, n_vds=0 */ { uint16 result[] = {4}; /* vg2 */ status = check_vgs(vgroup6_id, 0, 0, "vgroup6_id, 0, 0", 1, result); CHECK_VOID(status, FAIL, "Vgetvgroups vgroup6_id"); } /* Test getting vdatas in vg6: vgroup6_id, start_vd=0, n_vds=0 */ { uint16 result[] = {18}; /* vd6 */ status = check_vds(vgroup6_id, 0, 0, "vgroup6_id, 0, 0", 1, result); CHECK_VOID(status, FAIL, "VSgetvdata vgroup6_id"); } /* Test getting vgroups in vg9: vgroup9_id, start_vd=0, n_vds=0 */ vgroup9_id = Vattach(fid, ref_list[9], "w"); /* "VG-CLASS-9" */ CHECK_VOID(vgroup9_id, FAIL, "Vattach vgroup9_id"); { n_vgs = Vgetvgroups(vgroup9_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup9_id"); VERIFY_VOID(n_vgs, 0, "Vgetvgroups vgroup9_id"); } /* Test getting vgroups in vg7: vgroup7_id, start_vd=0, n_vds=0 */ vgroup7_id = Vattach(fid, ref_list[7], "w"); /* "VG-CLASS-7" */ CHECK_VOID(vgroup7_id, FAIL, "Vattach vgroup7_id"); { n_vgs = Vgetvgroups(vgroup7_id, 0, 0, NULL); CHECK_VOID(n_vgs, FAIL, "Vgetvgroups vgroup7_id"); VERIFY_VOID(n_vgs, 0, "Vgetvgroups vgroup7_id"); } /* Test getting vdatas in vg9: vgroup9_id, start_vd=2, n_vds=2 */ { uint16 result[] = {17}; /* vd5 */ status = check_vds(vgroup9_id, 2, 2, "vgroup9_id, 2, 2", 1, result); CHECK_VOID(status, FAIL, "VSgetvdata vgroup9_id"); } /* Test getting vgroups in vg1: vgroup1_id, start_vd=1, n_vds=3 */ { uint16 result[] = {8}; /* vg6 */ status = check_vgs(vgroup1_id, 1, 3, "vgroup1_id, 1, 3", 1, result); CHECK_VOID(status, FAIL, "Vgetvgroups vgroup1_id"); } status = Vdetach(vgroup0_id); CHECK_VOID(status, FAIL, "Vdetach vgroup0_id"); status = Vdetach(vgroup1_id); CHECK_VOID(status, FAIL, "Vdetach vgroup1_id"); status = Vdetach(vgroup6_id); CHECK_VOID(status, FAIL, "Vdetach vgroup6_id"); status = Vdetach(vgroup7_id); CHECK_VOID(status, FAIL, "Vdetach vgroup7_id"); status = Vdetach(vgroup9_id); CHECK_VOID(status, FAIL, "Vdetach vgroup9_id"); /* Terminate access to the V interface and close the HDF file. */ status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status_n = Hclose(fid); CHECK_VOID(status_n, FAIL, "Hclose"); } /* test_getvgroups() */ /*************************** test_extfile *************************** This test routine creates an hdf file, "tvset_ext.hdf" (excerpted and modified from Ruth's program used in hmap project), and creates and writes a vdata with external element. The external file is named Tables_External_File. ***********************************************************************/ #define EXTFILE "tvset_ext.hdf" #define EXTERNAL_FILE "Tables_External_File" #define MULTI_NAME "Table AR with Attributes in External File" #define CLASSMULTI_NAME "Multi-Type, Multi-Entries per Cell, Store By Row in External File" #define NROWS \ 5 /* number of records to be written to the \ vdatas at every write */ static void test_extfile(void) { int32 fid, vdata1_id, vdata_ref = -1; /* ref number of a vdata, set to -1 to create */ int32 vdata1_ref; int32 offset = -1, length = -1; const char hibuf[2] = "hi"; const char byebuf[3] = "bye"; char *extfile_name; void *columnPtrs[3]; int bufsize; void *databuf; intn name_len = 0; intn status_n; /* returned status for functions returning an intn */ int32 status; /* returned status for functions returning an int32 */ char8 col1buf[NROWS][2] = {{'A', 'B'}, {'B', 'C'}, {'C', 'D'}, {'D', 'E'}, {'E', 'F'}}; uint16 col2buf[NROWS] = {1, 2, 3, 4, 5}; float32 col3buf[NROWS][2] = {{.01F, .1F}, {.02F, .2F}, {.03F, .3F}, {.04F, .4F}, {.05F, .5F}}; /* Create the HDF file for data used in this test routine */ fid = Hopen(EXTFILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* * Compute the buffer size that will be needed to hold the data for the * mixed-data columns. Allocate the buffers. */ bufsize = (2 * sizeof(char8) + sizeof(uint16) + 2 * sizeof(float32)) * NROWS; databuf = malloc((unsigned)bufsize); /* Initialize the pointers to the column data. */ columnPtrs[0] = &col1buf[0][0]; columnPtrs[1] = &col2buf[0]; columnPtrs[2] = &col3buf[0][0]; /* Create the first vdata */ vdata1_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); /* Set name and class name of the vdata. */ status = VSsetname(vdata1_id, MULTI_NAME); CHECK_VOID(status, FAIL, "VSsetname"); status = VSsetclass(vdata1_id, CLASSMULTI_NAME); CHECK_VOID(status, FAIL, "VSsetclass"); status = VSsetexternalfile(vdata1_id, EXTERNAL_FILE, 10); CHECK_VOID(status, FAIL, "VSsetexternalfile"); /* Introduce each field's name, data type, and order. This is the first part in defining a field. */ status_n = VSfdefine(vdata1_id, FIELD1_NAME, DFNT_CHAR8, ORDER_3); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vdata1_id, FIELD2_NAME, DFNT_UINT16, ORDER_2); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vdata1_id, FIELD3_NAME, DFNT_LFLOAT32, ORDER_3); CHECK_VOID(status_n, FAIL, "VSfdefine"); /* Finalize the definition of the fields. */ status_n = VSsetfields(vdata1_id, FIELD_NAME_LIST); CHECK_VOID(status_n, FAIL, "VSsetfields"); /* Pack the buffer that will be used to write the data to the file. */ status = VSfpack(vdata1_id, _HDF_VSPACK, NULL, databuf, bufsize, NROWS, NULL, columnPtrs); CHECK_VOID(status, FAIL, "VSfpack"); /* Write to the vdata in FULL_INTERLACE */ status = VSwrite(vdata1_id, databuf, NROWS, FULL_INTERLACE); CHECK_VOID(status, FAIL, "VSwrite"); /* Add Attribute for vdata */ status = VSsetattr(vdata1_id, _HDF_VDATA, "HDF4 Attribute Table", DFNT_CHAR8, 2, &hibuf); CHECK_VOID(status, FAIL, "VSsetattr"); /* Add Attribute for Column C */ status = VSsetattr(vdata1_id, 2, "HDF4 Attribute Field 3", DFNT_CHAR8, 3, &byebuf); CHECK_VOID(status, FAIL, "VSsetattr"); /* Get vdata ref */ vdata1_ref = VSQueryref(vdata1_id); CHECK_VOID(vdata1_ref, FAIL, "VSQueryref"); status_n = VSdetach(vdata1_id); CHECK_VOID(status_n, FAIL, "VSdetach"); free(databuf); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /* Reopen the file and the vdata and verify external file information */ /* Open the HDF file */ fid = Hopen(EXTFILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* Create the first vdata */ vdata1_id = VSattach(fid, vdata1_ref, "r"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); { /* This is an old test, will be removed when VSgetexternalfile is */ /* Get the length of the external file name first - VSgetexternalfile is deprecated as of 4.2.7 */ name_len = VSgetexternalfile(vdata1_id, 0, NULL, NULL); VERIFY_VOID(name_len, (intn)strlen(EXTERNAL_FILE), "VSgetexternalfile"); extfile_name = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "test_extfile"); /* Old function: Get the external file name - VSgetexternalfile is deprecated as of 4.2.7 */ name_len = VSgetexternalfile(vdata1_id, name_len + 1, extfile_name, &offset); VERIFY_VOID(name_len, (intn)strlen(EXTERNAL_FILE), "VSgetexternalfile"); VERIFY_CHAR_VOID(extfile_name, EXTERNAL_FILE, "VSgetexternalfile"); free(extfile_name); } /* old test */ /* Get the length of the external file name first */ name_len = VSgetexternalinfo(vdata1_id, 0, NULL, NULL, NULL); VERIFY_VOID(name_len, (intn)strlen(EXTERNAL_FILE), "VSgetexternalinfo"); extfile_name = (char *)malloc(sizeof(char) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "test_extfile"); /* Get the external file name */ name_len = VSgetexternalinfo(vdata1_id, name_len + 1, extfile_name, &offset, &length); VERIFY_VOID(name_len, (intn)strlen(EXTERNAL_FILE), "VSgetexternalinfo"); VERIFY_CHAR_VOID(extfile_name, EXTERNAL_FILE, "VSgetexternalinfo"); free(extfile_name); /* Test passing in smaller buffer for external file name than actual; name should be truncated */ { /* Make a shorter string to verify later */ char *short_name = (char *)malloc(sizeof(char) * (name_len)); memset(short_name, '\0', name_len); strncpy(short_name, EXTERNAL_FILE, name_len - 2); /* Prepare buffer for external file name in the following test */ extfile_name = (char *)malloc(sizeof(char) * (name_len - 1)); memset(extfile_name, '\0', name_len - 1); /* Call VSgetexternalinfo again with smaller buffer size and make sure VSgetexternalinfo reads the name truncated to the given buffer size*/ name_len = VSgetexternalinfo(vdata1_id, name_len - 2, extfile_name, &offset, &length); VERIFY_VOID(name_len, (intn)strlen(extfile_name), "VSgetexternalinfo"); VERIFY_CHAR_VOID(extfile_name, short_name, "VSgetexternalinfo"); free(short_name); free(extfile_name); } /* Release resources */ status_n = VSdetach(vdata1_id); CHECK_VOID(status_n, FAIL, "VSdetach"); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_extfile() */ /**************************************************************************** Name: test_blockinfo_oneLB() - tests setting/getting block info in the simple case, only one linked block storage occur Description: The test does the following steps: - Create the file and the first vdata, "Appendable Vdata" - Test calling VSsetblocksize with invalid values and verify that failures occur - Set block size and number of blocks to BLOCK_SIZE1 and NUM_BLOCKS for this vdata - Close the vdata and the file - Reopen the file and the first vdata, "Appendable Vdata" - Verify that the block size of this vdata remains the default, HDF_APPENDABLE_BLOCK_LEN. This shows when no data and no linked-block storage created, the block size remains as the default. - Call VSsetblocksize again with BLOCK_SIZE1 and NUM_BLOCKS - Write 5 records to this vdata - Create and write 5 records to the second vdata, "Another Vdata". The purpose of this second vdata is to cause the subsequent write to the first vdata to promote the first vdata's storage to a linked-block element. - Append 5 records to the first vdata. - Verify that the block size is changed to BLOCK_SIZE1 and number of blocks to NUM_BLOCKS - Close both vdatas and the file. BMR - Jan 2014 ****************************************************************************/ #define APPENDABLE_VD "Appendable Vdata" #define ANOTHER_VD "Another Vdata" #define CLASS_NAME "Linked-block Vdata" #define ANOTHER_FD "Another field" /* contains one integer */ #define ANOTHER_FD_LIST "Another field" #define N_RECORDS \ 5 /* number of records to be written to the \ vdatas at every write */ #define N_VALS_PER_REC_2 1 /* # of values per record in the 2nd vdata */ #define N_VALS_PER_REC_1 (ORDER_1 + ORDER_2 + ORDER_3) /* # of vals/rec. in 1st vd*/ #define BLOCK_SIZE1 20 /* arbitrary number for block size */ #define BLOCK_SIZE2 100 /* arbitrary number for block size */ #define NUM_BLOCKS 8 /* arbitrary number for number of blocks */ static void test_blockinfo_oneLB(void) { intn status_n; /* returned status for functions returning an intn */ int32 status; /* returned status for functions returning an int32 */ int16 rec_num; /* current record number */ int32 fid, vdata1_id, vdata2_id; int32 vdata_ref = -1, /* ref number of a vdata, set to -1 to create */ num_of_records, /* number of records actually written to vdata */ data_buf1[N_RECORDS][N_VALS_PER_REC_1], /* for first vdata's data */ data_buf2[N_RECORDS][N_VALS_PER_REC_2], /* for second vdata's data */ block_size, num_blocks; /* retrieved by VSgetblockinfo */ /* Create the HDF file for data used in this test routine */ fid = Hopen(LKBLK_FILE, DFACC_CREATE, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* Create the first vdata */ vdata1_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); /* Set name and class name of the vdata. */ status = VSsetname(vdata1_id, APPENDABLE_VD); CHECK_VOID(status, FAIL, "VSsetname"); status = VSsetclass(vdata1_id, CLASS_NAME); CHECK_VOID(status, FAIL, "VSsetclass"); /* Introduce each field's name, data type, and order. This is the first part in defining a field. */ status_n = VSfdefine(vdata1_id, FIELD1_NAME, DFNT_INT32, ORDER_1); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vdata1_id, FIELD2_NAME, DFNT_INT32, ORDER_2); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSfdefine(vdata1_id, FIELD3_NAME, DFNT_INT32, ORDER_3); CHECK_VOID(status_n, FAIL, "VSfdefine"); /* Finalize the definition of the fields. */ status_n = VSsetfields(vdata1_id, FIELD_NAME_LIST); CHECK_VOID(status_n, FAIL, "VSsetfields"); /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf1[rec_num][0] = 1 + rec_num; data_buf1[rec_num][1] = 2 + rec_num; data_buf1[rec_num][2] = 3 + rec_num; data_buf1[rec_num][3] = 10 + rec_num; data_buf1[rec_num][4] = 10; data_buf1[rec_num][5] = 65; } status_n = VSgetblockinfo(vdata1_id, &block_size, NULL); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, HDF_APPENDABLE_BLOCK_LEN, "VSgetblockinfo"); /* Test for invalid arguments passed in these functions */ status_n = VSsetblocksize(vdata1_id, -2); VERIFY_VOID(status_n, FAIL, "VSsetblocksize"); status_n = VSsetnumblocks(vdata1_id, 0); VERIFY_VOID(status_n, FAIL, "VSsetnumblocks"); /* Set the block size and the number of blocks the first vdata */ status_n = VSsetblocksize(vdata1_id, BLOCK_SIZE1); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); status_n = VSsetnumblocks(vdata1_id, NUM_BLOCKS); CHECK_VOID(status_n, FAIL, "VSsetnumblocks"); status = VSdetach(vdata1_id); CHECK_VOID(status, FAIL, "Vdetach"); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /****************************************************************** * Reopen the file, and the vdata APPENDABLE_VDATA, verify that block * size is still the default, then set block size again, and attempt * to write data and test for block information. ******************************************************************/ fid = Hopen(LKBLK_FILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); vdata_ref = -1; vdata_ref = VSfind(fid, APPENDABLE_VD); CHECK_VOID(vdata_ref, FAIL, "VSfind"); vdata1_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); status_n = VSgetblockinfo(vdata1_id, &block_size, NULL); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, HDF_APPENDABLE_BLOCK_LEN, "VSgetblockinfo"); /* Set the block size and the number of blocks the first vdata */ status_n = VSsetblocksize(vdata1_id, BLOCK_SIZE1); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); status_n = VSsetnumblocks(vdata1_id, NUM_BLOCKS); CHECK_VOID(status_n, FAIL, "VSsetnumblocks"); /* Write the data from data_buf1 to the vdata with full interlacing mode. */ num_of_records = VSwrite(vdata1_id, (uint8 *)data_buf1, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(num_of_records, N_RECORDS, "VSwrite:vdata1_id"); /* The block size should change properly */ status_n = VSgetblockinfo(vdata1_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, BLOCK_SIZE1, "VSgetblockinfo"); /****************************************************************** * Creates and writes another vdata right after APPENDABLE_VDATA. * This will cause the storage of APPENDABLE_VDATA to be promoted to a * linked-block element if a subsequent write to APPENDABLE_VDATA occurs. ******************************************************************/ /* Create another vdata. */ vdata_ref = -1; vdata2_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata2_id, FAIL, "VSattach"); /* Set name and class name of the vdata. */ status = VSsetname(vdata2_id, ANOTHER_VD); CHECK_VOID(status, FAIL, "VSsetname"); status = VSsetclass(vdata2_id, CLASS_NAME); CHECK_VOID(status, FAIL, "VSsetclass"); /* Define the vdata's field. */ status_n = VSfdefine(vdata2_id, ANOTHER_FD, DFNT_INT32, ORDER_2); CHECK_VOID(status_n, FAIL, "VSfdefine"); status_n = VSsetfields(vdata2_id, ANOTHER_FD_LIST); CHECK_VOID(status_n, FAIL, "VSsetfields"); /* Buffer the data for ANOTHER_VDATA */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf2[rec_num][0] = 100 + rec_num; } /* Write the data from data_buf2 to the second vdata with full interlacing mode. */ num_of_records = VSwrite(vdata2_id, (uint8 *)data_buf2, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(num_of_records, N_RECORDS, "VSwrite:vdata2_id"); /****************************************************************** * Writes more data to APPENDABLE_VDATA, i.e. first vdata. Its * storage will be promoted to a linked-block element. ******************************************************************/ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf1[rec_num][0] = 10 + rec_num; data_buf1[rec_num][1] = 20 + rec_num; data_buf1[rec_num][2] = 30 + rec_num; data_buf1[rec_num][3] = 100 + rec_num; data_buf1[rec_num][4] = 100; data_buf1[rec_num][5] = 650; } /* Append the data to the first vdata. */ VSseek(vdata1_id, N_RECORDS); num_of_records = VSwrite(vdata1_id, (uint8 *)data_buf1, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(num_of_records, N_RECORDS, "VSwrite:vdata1_id"); /* Retrieve the first vdata's block size and number of blocks and verify them */ status_n = VSgetblockinfo(vdata1_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, BLOCK_SIZE1, "VSgetblockinfo"); VERIFY_VOID(num_blocks, NUM_BLOCKS, "VSgetblockinfo"); /* Terminate access to the vdatas and to the VS interface, then close the HDF file. */ status = VSdetach(vdata1_id); CHECK_VOID(status, FAIL, "Vdetach"); status = VSdetach(vdata2_id); CHECK_VOID(status, FAIL, "Vdetach"); /* Terminate access to the V interface and close the file. */ status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_blockinfo_oneLB() */ /**************************************************************************** Name: test_blocksize_multLBs() - tests setting block info in the case of multiple linked block element Description: The test opens the file again, open the first vdata, "Appendable Vdata", - Open the file and the first vdata, APPENDABLE_VD. - Verify that the block size had changed to BLOCK_SIZE1 and number of blocks to NUM_BLOCKS - Attempt to change the block size to something else, and verify that it is not changed, then close the vdata. - Open the second vdata, ANOTHER_VD. - Verify that the block size and number of blocks are the default values, HDF_APPENDABLE_BLOCK_LEN and HDF_APPENDABLE_BLOCK_NUM. - Change block size to BLOCK_SIZE2 - Append 5 records to ANOTHER_VD, which triggers its storage to be converted into a linked-block element. - Close the vdata and the file. - Open the file to verify block info stay changed. BMR - Jan 2014 ****************************************************************************/ static void test_blockinfo_multLBs(void) { intn status_n; /* returned status for functions returning an intn */ int32 status; /* returned status for functions returning an int32 */ int16 rec_num; /* current record number */ int32 fid, vdata1_id, vdata2_id; int32 vdata_ref = -1, /* ref number of a vdata, set to -1 to create */ num_of_records, /* number of records actually written to vdata */ data_buf2[N_RECORDS][N_VALS_PER_REC_2], /* for second vdata's data */ block_size, num_blocks; /* retrieved by VSgetblockinfo */ /****************************************************************** * Reopen the file, and the vdata APPENDABLE_VDATA, then append more * data and test for block information. ******************************************************************/ fid = Hopen(LKBLK_FILE, DFACC_RDWR, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* Locate and open vdata APPENDABLE_VD */ vdata_ref = -1; vdata_ref = VSfind(fid, APPENDABLE_VD); CHECK_VOID(vdata_ref, FAIL, "VSfind"); vdata1_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); /* Retrieve the first vdata's block size and number of blocks and verify them again. This used to return the old value. (HDFFR-1357) */ status_n = VSgetblockinfo(vdata1_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSsetfields"); VERIFY_VOID(block_size, BLOCK_SIZE1, "VSgetblockinfo"); VERIFY_VOID(num_blocks, NUM_BLOCKS, "VSgetblockinfo"); /* Set the block size to the first vdata again, but this is when vdata already has a linked-block element. If the block size is different than the previously specified block size, then the change will not take effect. */ status_n = VSsetblocksize(vdata1_id, BLOCK_SIZE1 + 100); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); /* Retrieve the first vdata's block size and verify that it did not change */ status_n = VSgetblockinfo(vdata1_id, &block_size, NULL); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, BLOCK_SIZE1, "VSgetblockinfo"); /* Close the vdata */ status = VSdetach(vdata1_id); CHECK_VOID(status, FAIL, "Vdetach"); /* Next test: Open the second vdata, ANOTHER_VD, check block size, set block size, write to it, then check block size again */ /* Locate and open the vdata ANOTHER_VD */ vdata_ref = -1; vdata_ref = VSfind(fid, ANOTHER_VD); CHECK_VOID(vdata_ref, FAIL, "VSfind"); vdata2_id = VSattach(fid, vdata_ref, "w"); CHECK_VOID(vdata2_id, FAIL, "VSattach"); /* Check block size of ANOTHER_VD */ status_n = VSgetblockinfo(vdata2_id, &block_size, &num_blocks); VERIFY_VOID(block_size, HDF_APPENDABLE_BLOCK_LEN, "VSgetblockinfo"); /* Set the block size to ANOTHER_VD to BLOCK_SIZE2 */ status_n = VSsetblocksize(vdata2_id, BLOCK_SIZE2); CHECK_VOID(status_n, FAIL, "VSsetblocksize"); /* Retrieve the block size of ANOTHER_VD */ status_n = VSgetblockinfo(vdata2_id, &block_size, NULL); CHECK_VOID(status_n, FAIL, "VSgetblockinfo"); VERIFY_VOID(block_size, BLOCK_SIZE2, "VSgetblockinfo"); /* Buffer the data for ANOTHER_VDATA */ for (rec_num = 0; rec_num < N_RECORDS; rec_num++) { data_buf2[rec_num][0] = 200 + rec_num; } /* Write the data from data_buf2 to the vdata with full interlacing mode. */ VSseek(vdata2_id, N_RECORDS); num_of_records = VSwrite(vdata2_id, (uint8 *)data_buf2, N_RECORDS, FULL_INTERLACE); VERIFY_VOID(num_of_records, N_RECORDS, "VSwrite:vdata2_id"); /* Retrieve the first vdata's block size and number of blocks and verify them */ status_n = VSgetblockinfo(vdata2_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSsetfields"); VERIFY_VOID(block_size, BLOCK_SIZE2, "VSgetblockinfo"); /* Close the vdata and file */ status = VSdetach(vdata2_id); CHECK_VOID(status, FAIL, "Vdetach"); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); /* * Open the file one more time and verify the block size and number * of blocks of the vdatas that have linked-block storage. */ /* Open file again. */ fid = Hopen(LKBLK_FILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* Locate and open vdata APPENDABLE_VD. */ vdata_ref = -1; vdata_ref = VSfind(fid, APPENDABLE_VD); CHECK_VOID(vdata_ref, FAIL, "VSfind"); vdata1_id = VSattach(fid, vdata_ref, "r"); CHECK_VOID(vdata1_id, FAIL, "VSattach"); /* Verify its block size and number of blks. */ status_n = VSgetblockinfo(vdata1_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSsetfields"); VERIFY_VOID(block_size, BLOCK_SIZE1, "VSgetblockinfo"); VERIFY_VOID(num_blocks, NUM_BLOCKS, "VSgetblockinfo"); /* Close APPENDABLE_VD. */ status = VSdetach(vdata1_id); CHECK_VOID(status, FAIL, "Vdetach"); /* Locate and open vdata ANOTHER_VD, and verify its block size and number of blks. */ vdata_ref = -1; vdata_ref = VSfind(fid, ANOTHER_VD); CHECK_VOID(vdata_ref, FAIL, "VSfind"); vdata2_id = VSattach(fid, vdata_ref, "r"); CHECK_VOID(vdata2_id, FAIL, "VSattach"); /* Verify its block size and number of blks. */ status_n = VSgetblockinfo(vdata2_id, &block_size, &num_blocks); CHECK_VOID(status_n, FAIL, "VSsetfields"); VERIFY_VOID(block_size, BLOCK_SIZE2, "VSgetblockinfo"); VERIFY_VOID(num_blocks, HDF_APPENDABLE_BLOCK_NUM, "VSgetblockinfo"); /* Close ANOTHER_VD and the file. */ status = VSdetach(vdata2_id); CHECK_VOID(status, FAIL, "Vdetach"); status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_blockinfo_multLBs() */ /* * This test is here to use the file LKBLK_FILE, but it will be moved to * another file in the future when more organization is done for tests. * This function tests that VSofclass gets the reference numbers of the * vdatas belonging to a class. */ static void test_VSofclass() { intn status_n; /* returned status for functions returning an intn */ int32 status; /* returned status for functions returning an int32 */ int32 fid; intn n_vds = 0; uint16 *refarray = NULL; /* Open file LKBLK_FILE for reading. */ fid = Hopen(LKBLK_FILE, DFACC_RDONLY, 0); CHECK_VOID(fid, FAIL, "Hopen"); /* Initialize the VS interface */ status_n = Vstart(fid); CHECK_VOID(status_n, FAIL, "Vstart"); /* VSofclass returns the number of vdatas belonging to CLASS_NAME correctly */ n_vds = VSofclass(fid, CLASS_NAME, 0, 0, NULL); VERIFY_VOID(n_vds, 2, "VSofclass"); /* Allocate space for the ref array to pass into VSofclass. */ refarray = (uint16 *)malloc(sizeof(uint16) * n_vds); CHECK_ALLOC(refarray, "refarray", "test_blockinfo_multLBs"); /* The following tests rely on the reference numbers of the two vdatas of class CLASS_NAME. If data is added to the file before these vdatas, the reference numbers (2 and 3 below) need to be adjusted accordingly or tests will fail -BMR (will have a better tests later) */ n_vds = VSofclass(fid, CLASS_NAME, 0, n_vds, refarray); VERIFY_VOID(refarray[0], 2, "VSofclass"); VERIFY_VOID(refarray[1], 3, "VSofclass"); refarray[0] = refarray[1] = 0; n_vds = VSofclass(fid, CLASS_NAME, 0, 1, refarray); VERIFY_VOID(refarray[0], 2, "VSofclass"); VERIFY_VOID(refarray[1], 0, "VSofclass"); n_vds = VSofclass(fid, CLASS_NAME, 1, n_vds, refarray); VERIFY_VOID(refarray[0], 3, "VSofclass"); VERIFY_VOID(refarray[1], 0, "VSofclass"); free(refarray); /* Terminate access to the V interface and close the file. */ status_n = Vend(fid); CHECK_VOID(status_n, FAIL, "Vend"); status = Hclose(fid); CHECK_VOID(status, FAIL, "Hclose"); } /* test_VSofclass */ /*************************** test_blockinfo *************************** Name: ttest_blockinfo() - tests setting/getting block info for a vdata Description: This test creates an hdf file, "Block_info.hdf", and creates and writes two vdatas in a way that one of the vdatas, then later the other one, will be promoted to linked-block elements. The first vdata is named "Appendable Vdata", and belongs to a class, named "Linked-block Vdata". The fields of the vdata include "Field1", "Field2", and "Field3" and all data are integer. "Field1" has an order of 3, "Field2" has an order of 1, and "Field3" has an order of 2. The second vdata named "Another Vdata", and also belongs to class "Linked-block Vdata". This vdata has only one field of order 1 and its data are integer. test_blockinfo is divided into two parts: test_blockinfo_oneLB test_blockinfo_multLBs ***********************************************************************/ /* This test is perhaps more suitable somewhere else or in a file by itself, but keep it here for now since we're running out of time...*/ void test_blockinfo(void) { /* test the case of setting block size doesn't have effect until linked- block element is created */ test_blockinfo_oneLB(); /* test functionality about set/get linked-block information */ test_blockinfo_multLBs(); /* test VSofclass; relies on the file created and written by the tests in test_blockinfo_oneLB and test_blockinfo_multLBs */ test_VSofclass(); } /* test_blockinfo */ /* main test driver */ void test_vsets(void) { int32 status; status = write_vset_stuff(); if (status == FAIL) return; status = read_vset_stuff(); if (status == FAIL) return; /* test VSdelete() */ test_vsdelete(); /* test Vdelete() */ test_vdelete(); /* test Vdeletetagref() */ test_vdeletetagref(); /* test Vdatas with no fields defined */ test_emptyvdata(); /* test Vgroups with name and class that have more than 64 characters */ test_vglongnames(); /* test functionality about set/get linked-block information */ test_blockinfo(); /* test Vgetgroups - getting user-created vgroups */ test_getvgroups(); /* test VSgetvdatas - getting user-created vdatas */ test_getvdatas(); /* test_extfile - getting external file information */ test_extfile(); } /* test_vsets */ /* TODO: - should either making all the other test functions to return status as read_vset_stuff() and write_vset_stuff, or making these two void. - review each test function and add header/comments BMR - Jan 16, 2014 */ hdf4-hdf4.3.1/hdf/test/tvsetf.f000066400000000000000000001111171503061704500162330ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C* C********************************************************************* C********************************************************************* C test vset Fortran data types C subroutine tvsetf (number_failed) C Test Program: C Tests the vdata and vgroup interface C Input file: none C Output file: tvsetf1.hdf implicit none include 'fortest.inc' integer number_failed character*20 myname parameter (myname = 'vsetf') integer fid1, vgid1, vgid2, vsid1, vsid2 integer vgref1, vsref1, vsref2, vref, vsref22 integer vsize, found integer ret,ntrs,i,il,nelts integer*4 dbuf(320),idbuf(320),ddata4(10),iddata4(10) integer*2 ddata1(10), iddata1(10) integer*2 ddata2(10),iddata2(10) integer*4 tags(10), refs(10) real fdata(10), ifdata(10) double precision gdata1(10) double precision igdata1(10) double precision geps real feps character*11 fn1 character*64 vname character*9 fields1 character*10 fields2 character*31 fields3 character*15 cdata, icdata character*7 field_name parameter ( + feps = 1.0E-5, + geps = 1.0D-9 + ) C------------------------------------------------------------------------- C These definitions are added to test hglibver and hgfilver functions C integer major_v, minor_v, release character*80 hdfstring C------------------------------------------------------------------------- DATA ddata1/10,11,12,13,14,15,16,17,18,19/ DATA ddata2/20,21,22,23,24,25,26,27,28,29/ DATA ddata4/40,41,42,43,44,45,46,47,48,49/ DATA fdata/5.0,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9/ DATA gdata1/6.0,6.1,6.2,6.3,6.4,6.5,6.6,6.7,6.8,6.9/ call ptestban('Testing', myname) cdata = 'abcdebcdefcdefg' fn1 = 'tvsetf1.hdf' C Open the file fid1 = hopen(fn1, DFACC_CREATE, 0) call VRFY(fid1,'hopen',number_failed) ret = vfstart(fid1) call VRFY(ret,'vfstart',number_failed) C Create a vgroup call MESSAGE(5,'Creating a vgroup') vgid1 = vfatch(fid1, -1, 'w') call VRFY(vgid1, 'vfatch', number_failed) ret = vfsnam(vgid1, 'Top Vgroup') call VRFY(ret,'vfsnam',number_failed) ret = vfscls(vgid1, 'Test Object') call VRFY(ret,'vfscls',number_failed) C Add a vgroup to it call MESSAGE(5,'Add a vgroup to the Top vgroup') vgid2 = vfatch(fid1, -1, 'w') call VRFY(vgid2, 'vfatch', number_failed) ret = vfinsrt(vgid1, vgid2) call VRFY(ret, 'vfinsrt', number_failed) ret = vfdtch(vgid1) call VRFY(ret,'vfdtch',number_failed) ret = vfdtch(vgid2) call VRFY(ret,'vfdtch',number_failed) ret = vfend(fid1) call VRFY(ret,'vfend',number_failed) ret = hclose(fid1) call VRFY(ret,'hclose',number_failed) C add a vdatas in vgroup1 call MESSAGE(5,'Creating a char vdata') fid1 = hopen(fn1, DFACC_RDWR, 0) call VRFY(fid1,'hopen',number_failed) ret = vfstart(fid1) call VRFY(ret,'vfstart',number_failed) vgref1 = vfgid(fid1, -1) call VRFY(vgref1,'vfgid',number_failed) C C Find group with the name 'Top Vgroup' C ret = vfind(fid1, 'Top Vgroup') if (ret .le. 0) then number_failed = number_failed + 1 call MESSAGE(3, 'Top Vgroup is not found. ') endif vgid1 = vfatch(fid1, vgref1, 'w') call VRFY(vgid1,'vfatch',number_failed) C create a single field (char) vdata vsid1 = vsfatch(fid1, -1, 'w') call VRFY(vsid1,'vsfatch',number_failed) ret = vsffdef(vsid1, 'char type', DFNT_CHAR, 5) call VRFY(ret,'vsffdef',number_failed) ret = vsfsfld(vsid1, 'char type') call VRFY(ret,'vsfsfld',number_failed) C Use vsfwrtc to write the values ret = vsfwrtc(vsid1, cdata, 3, FULL_INTERLACE) call VRFY(ret,'vsfwrtc',number_failed) ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C create a single field int16 vdata call MESSAGE(5,'Creating an int16 vdata') vsid1 = vsfatch(fid1, -1, 'w') call VRFY(vsid1,'vsfatch',number_failed) ret = vsffdef(vsid1, 'int16 type', DFNT_INT16, 2) call VRFY(ret,'vsffdef',number_failed) ret = vsfsfld(vsid1, 'int16 type') call VRFY(ret,'vsfsfld',number_failed) C Use vsfwrt to write the values ret = vsfwrt(vsid1, ddata1, 5, FULL_INTERLACE) call VRFY(ret,'vsfwrt',number_failed) ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C use vhfscd and vhfscdm to create char vdata call MESSAGE(5,'Using vhfscd/vsfscdm to create vdatas') ret = vhfscd(fid1,'char1',cdata,5,DFNT_CHAR,'c1','c') call VRFY(ret,'vhfscd',number_failed) ret = vhfscdm(fid1,'char3',cdata,5,DFNT_CHAR,'c3','s',3) call VRFY(ret,'vhfscdm',number_failed) C create a five-field vdata, 2*int32,2*double,2*float32, C 2*int16 and 3*char type call MESSAGE(5,'Creating a five_field vdata') vsid2 = vsfatch(fid1, -1, 'w') call VRFY(vsid2,'vsfatch',number_failed) ret = vsfsnam(vsid2, 'mixed type') call VRFY(ret,'vsfsnam',number_failed) ret = vsfscls(vsid2, 'test NT') call VRFY(ret,'vsfscls',number_failed) ret = vsffdef(vsid2, 'int32', DFNT_INT32, 2) call VRFY(ret,'vsffdef',number_failed) ret = vsffdef(vsid2, 'double', DFNT_FLOAT64, 2) call VRFY(ret,'vsffdef',number_failed) ret = vsffdef(vsid2, 'float32', DFNT_FLOAT32, 2) call VRFY(ret,'vsffdef',number_failed) ret = vsffdef(vsid2, 'int16', DFNT_INT16, 2) call VRFY(ret,'vsffdef',number_failed) ret = vsffdef(vsid2, 'char', DFNT_CHAR, 3) call VRFY(ret,'vsffdef',number_failed) ret = vsfsfld(vsid2, 'int32,double,float32,int16,char') call VRFY(ret,'vsfsfld',number_failed) C pack the fields into data buf ret = vsfnpak(vsid2, HDF_VSPACK, + 'int32,double,float32,int16,char', dbuf, + 320*4,5,'int32',ddata4) call VRFY(ret,'vsfnpak',number_failed) ret = vsfnpak(vsid2, HDF_VSPACK, + ' ', dbuf, 320*4, 5,'double',gdata1) call VRFY(ret,'vsfnpak',number_failed) ret = vsfnpak(vsid2, HDF_VSPACK, + ' ', dbuf, 320*4, 5,'float32',fdata) call VRFY(ret,'vsfnpak',number_failed) ret = vsfnpak(vsid2, HDF_VSPACK, + ' ', dbuf, 320*4,5,'int16',ddata2) call VRFY(ret,'vsfnpak',number_failed) ret = vsfcpak(vsid2, HDF_VSPACK, C + 'int32,double,float32,int16,char', dbuf, + ' ', dbuf, 320*4, 5,'char',cdata) call VRFY(ret,'vsfcpak',number_failed) ret = vsfwrt(vsid2, dbuf, 5, FULL_INTERLACE) call VRFY(ret,'vsfwrt',number_failed) ret = vsfdtch(vsid2) call VRFY(ret,'vsfdtch',number_failed) C insert vdata1 into vgroup1 call MESSAGE(5,'Inserting vdata1 into top vgroup') vsref1 = vsfgid(fid1, -1) call VRFY(vsref1, 'vsfgid', number_failed) vsref2 = vsffnd(fid1, 'mixed type') call VRFY(vsref2, 'vsffnd', number_failed) ret = vfadtr(vgid1, DFTAG_VH, vsref1) call VRFY(ret, 'vfadtr', number_failed) ret = vfdtch(vgid1) call VRFY(ret,'vfdtch',number_failed) ret = vfend(fid1) call VRFY(ret,'vfend',number_failed) ret = hclose(fid1) call VRFY(ret,'hclose',number_failed) C read data back call MESSAGE(5,'Readng data back') fid1 = hopen(fn1, DFACC_RDWR, 0) call VRFY(fid1,'hopen',number_failed) ret = vfstart(fid1) call VRFY(ret,'vfstart',number_failed) vgref1 = vfgid(fid1, -1) call VRFY(vgref1, 'vfgid', number_failed) vgid1 = vfatch(fid1, vgref1,'w') call VRFY(vgid1, 'vfatch', number_failed) ntrs = vfgttrs(vgid1, tags, refs, 10) call VRFY(ntrs, 'vfgttrs', number_failed) if (ntrs .ne. 2) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong number of tag/refs. ') endif C look for the first vdata found = FALSE vref = -1 do 20 i = 1, ntrs if (found .eq. FALSE) then vref = vfgnxt(vgid1,vref) call VRFY(vref, 'vref', number_failed) found = vfisvs(vgid1, vref) endif 20 continue if (found .eq. TRUE) then vsid1 = vsfatch(fid1, vref, 'w') call VRFY(vsid1,'vsfatch',number_failed) ret = vsfinq(vsid1, nelts,il,fields1,vsize,vname) call VRFY(ret,'vsfinq',number_failed) if (nelts .ne. 3) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong number of records. ') endif if (il .ne. FULL_INTERLACE) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong interlace ') endif if (fields1 .ne. 'char type') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong field names. ') endif if (vsize .ne. 5) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong vsize. ') endif ret = vsfsfld(vsid1, 'char type') call VRFY(ret,'vsfsfld',number_failed) ret = vsfrdc(vsid1, icdata, 3, FULL_INTERLACE) call VRFY(ret,'vsfrdc',number_failed) if (icdata .ne. 'abcdebcdefcdefg') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong icdata. Correct: abcdebcdefcdefg') endif ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C not found, print error message else call MESSAGE(3,'Not found char type vdata. ') endif C read the second vdata call MESSAGE(5,'Reading the int16 vdata') vsref1 = vsfgid(fid1, vref) call VRFY(vsref1, 'vsfgid', number_failed) vsid1 = vsfatch(fid1, vsref1, 'w') call VRFY(vsid1,'vsfatch',number_failed) ret = vsfinq(vsid1, nelts,il, fields2,vsize,vname) call VRFY(ret,'vsfinq',number_failed) if (nelts .ne. 5) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong number of records. ') endif if (il .ne. FULL_INTERLACE) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong interlace. ') endif if (fields2 .ne. 'int16 type') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong fields. ') endif ret = vsfsfld(vsid1, 'int16 type') call VRFY(ret,'vsfsfld',number_failed) ret = vsfrd(vsid1, iddata1, 5, FULL_INTERLACE) call VRFY(ret,'vsfrd',number_failed) do 40 i=1,10 if (iddata1(i) .ne. (9+i)) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif 40 continue ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C read the 'c1' vdata vsref1 = vsffnd(fid1, 'c1') call VRFY(vsref1, 'vsffnd', number_failed) vsid1 = vsfatch(fid1, vsref1, 'w') call VRFY(vsid1, 'vsfatch', number_failed) ret = vsfsfld(vsid1, 'char1') call VRFY(ret, 'vsfsfld', number_failed) ret = vsfrd(vsid1, idbuf, 5,FULL_INTERLACE) call VRFY(ret, 'vsfrd', number_failed) icdata = ' ' ret = vsfcpak(vsid1,HDF_VSUNPACK,' ',idbuf,320*4, + 5, ' ', icdata) call VRFY(ret, 'vsfcpak', number_failed) if (icdata .ne. 'abcde ') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong icdata. ') endif ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C read the 'c3' vdata vsref1 = vsffnd(fid1, 'c3') call VRFY(vsref1, 'vsffnd', number_failed) vsid1 = vsfatch(fid1, vsref1, 'w') call VRFY(vsid1, 'vsfatch', number_failed) ret = vsfsfld(vsid1, 'char3') call VRFY(ret, 'vsfsfld', number_failed) ret = vsfrd(vsid1, idbuf, 5,FULL_INTERLACE) call VRFY(ret, 'vsfrd', number_failed) icdata = ' ' ret = vsfcpak(vsid1,HDF_VSUNPACK,' ',idbuf,320*4, + 5, ' ', icdata) call VRFY(ret, 'vsfcpak', number_failed) if (icdata .ne. 'abcdebcdefcdefg') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif ret = vsfdtch(vsid1) call VRFY(ret,'vsfdtch',number_failed) C read the 'mixed type' vdata vsref2 = vsffnd(fid1, 'mixed type') call VRFY(vsref2, 'vsffnd', number_failed) vsref22 = vsffcls(fid1, 'test NT') call VRFY(vsref22, 'vsffcls', number_failed) vsid2 = vsfatch(fid1, vsref2, 'w') call VRFY(vsid2, 'vsfatch', number_failed) C C This piece of the code exercises VF interface function C Added by E. Pourmal 1/22/99 C C C Find the total number of the fields in the vdata. C ret = vfnflds (vsid2) if (ret .ne. 5) then number_failed = number_failed + 1 call MESSAGE(3, 'Wrong number of the vdata fields. ') endif C C Find the datatype of the first field (should be DFNT_INT32) C ret = vfftype(vsid2, 0) if (ret. ne. DFNT_INT32) then number_failed = number_failed + 1 call MESSAGE(3, 'Wrong field datatype returned. ') endif C C Find the order of the second field (should be 2) C ret = vffordr(vsid2, 1) if (ret .ne. 2) then number_failed = number_failed + 1 call MESSAGE(3, 'Wrong field order returned. ') endif C C Find the name of the third field (should be 'float32') C ret = vffname(vsid2, 2, field_name) if (ret .ne. 0 .or. field_name .ne. 'float32') then number_failed = number_failed + 1 call MESSAGE(3, 'Cannot return name of the field. ') endif C C Find the size as stored in memory of the fourth vdata field. C ret = vffisiz(vsid2, 3) call VRFY(ret, 'vffisiz', number_failed) C C Find th esize as stored in file of the fifth vdata field. C ret = vffesiz(vsid2, 4) call VRFY(ret, 'vffesiz', number_failed) C C The end of the VF interface test. Two last calls should be tested C more carefully, i.e. what the correct ret values are ?????????? C ret = vsfinq(vsid2, nelts,il, fields3,vsize,vname) call VRFY(ret, 'vsfinq', number_failed) if (nelts .ne. 5) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong number of records. ') endif if (il .ne. FULL_INTERLACE) then number_failed = number_failed + 1 call MESSAGE(3, 'Wrong interlace. ') endif if (fields3 .ne. 'int32,double,float32,int16,char') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong fields. ') endif ret = vsfsfld(vsid2, 'int32,double,float32,int16,char') call VRFY(ret, 'vsfsfld', number_failed) ret = vsfrd(vsid2, idbuf, 3, FULL_INTERLACE) call VRFY(ret, 'vsfrd', number_failed) ret = vsfnpak(vsid2, HDF_VSUNPACK, + ' ', idbuf, 320*4,3,'int32',iddata4) call VRFY(ret, 'vsfnpak', number_failed) ret = vsfnpak(vsid2, HDF_VSUNPACK, + ' ', idbuf, 320*4,3,'double',igdata1) call VRFY(ret, 'vsfnpak', number_failed) ret = vsfnpak(vsid2, HDF_VSUNPACK, + ' ', idbuf, 320*4,3,'float32',ifdata) call VRFY(ret, 'vsfnpak', number_failed) ret = vsfnpak(vsid2, HDF_VSUNPACK, + ' ', idbuf, 320*4,3,'int16',iddata2) call VRFY(ret, 'vsfnpak', number_failed) icdata = ' ' ret = vsfcpak(vsid2, HDF_VSUNPACK, + 'int32,double,float32,int16,char', idbuf, + 320*4,3,'char',icdata) call VRFY(ret, 'vsfcpak', number_failed) do 45 i=1,3 if (iddata4(i) .ne. (39+i)) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif if (iddata2(i) .ne. (19+i)) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif 45 continue do 50 i = 1, 3 if (abs(gdata1(i) - igdata1(i)) .GE. + gdata1(i)*geps) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif if (abs(fdata(i) - ifdata(i)) .GE. + fdata(i)*feps) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif 50 continue if (icdata .ne. 'abcdebcde ') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif C read field 'char' only, test pckfld ' ' ret = vsfsfld(vsid2, 'char') call VRFY(ret, 'vsfsfld', number_failed) ret = vsfrd(vsid2, idbuf, 2, FULL_INTERLACE) call VRFY(ret, 'vsfrd', number_failed) icdata = ' ' ret = vsfcpak(vsid2, HDF_VSUNPACK, + 'char', idbuf, 320*4,2,' ',icdata) call VRFY(ret, 'vsfcpak', number_failed) if (icdata .ne. 'fcdefg ') then number_failed = number_failed + 1 call MESSAGE(3,'Wrong data. ') endif ret = vsfdtch(vsid2) call VRFY(ret,'vsfdtch',number_failed) ret = vfdtch(vgid1) call VRFY(ret,'vsfdtch',number_failed) ret = vfend(fid1) call VRFY(ret,'vfend',number_failed) ret = hclose(fid1) call VRFY(ret, 'hclose', number_failed) C C Testing deleting a tag/ref pair from Vgroups using vfdtr() C Not as extensive as the C-version of the similar test because C for now some the fortran versions of Vgroup routines are missing. C C Open the file for writing fid1 = hopen(fn1, DFACC_RDWR, 0) call VRFY(fid1,'hopen',number_failed) C C-----Test hglibver and hgfilver functions. C ret = hglibver(major_v, minor_v, release, hdfstring) call VRFY(ret, 'hglibver', number_failed) ret = hgfilver(fid1, major_v, minor_v, release, hdfstring) call VRFY(ret, 'hgfilver', number_failed) ret = vfstart(fid1) call VRFY(ret,'vfstart',number_failed) C Create a vgroup to add a bogus element to. call MESSAGE(5,'Creating a vgroup') vgid1 = vfatch(fid1, -1, 'w') call VRFY(vgid1, 'vfatch', number_failed) ret = vfsnam(vgid1, 'Vgroup to delete from') call VRFY(ret,'vfsnam',number_failed) ret = vfscls(vgid1, 'Vgroup to delete from') call VRFY(ret,'vfscls',number_failed) C Add a bogus element to the vgroup ret = vfadtr(vgid1, 5000, 1234) call VRFY(ret, 'vfadtr', number_failed) C Now delete it again just make sure the call does not fail C The C-version of the tests does a better job overall. ret = vfdtr(vgid1, 5000, 1234) call VRFY(ret, 'vfdtr', number_failed) C Detach from vgroup ret = vfdtch(vgid1) call VRFY(ret,'vfdtch',number_failed) C Close Vxxx interface down ret = vfend(fid1) call VRFY(ret,'vfend',number_failed) C Close file ret = hclose(fid1) call VRFY(ret,'hclose',number_failed) return end C C This subroutine tests vsfsetblsz, vsfsetnm, vsfgetinfo functions C C It creates and writes multi-component Vdata and single-component Vdata; C then it sets sizes and number of blocks C for multi-component Vdata's link block and appends to the Vdata. C File is then closed and reponened once more; block information C is retrieved for the multi-component Vdata. C subroutine tvsetblock(number_failed) implicit none character*20 myname parameter (myname = 'vsetblock') integer number_failed C C Parameter declaration C character*22 FILE_NAME character*9 CLASS1_NAME character*9 CLASS2_NAME character*11 VDATA1_NAME character*12 VDATA2_NAME character*22 FIELD1_NAME character*21 FIELD2_NAME integer N_RECORDS_1, N_RECORDS_2 integer ORDER_2 integer FULL_INTERLACE C parameter (FILE_NAME = 'Vdatas_blocks_test.hdf', + CLASS1_NAME = '5x1 Array', + CLASS2_NAME = '6x4 Array', + VDATA1_NAME = 'First Vdata', + VDATA2_NAME = 'Second Vdata', + FIELD1_NAME = 'Single-component Field', + FIELD2_NAME = 'Multi-component Field') parameter (N_RECORDS_1 = 5, + N_RECORDS_2 = 256, + ORDER_2 = 2, + FULL_INTERLACE = 0) integer DFACC_WRITE, DFNT_CHAR8, DFNT_INT32 parameter (DFACC_WRITE = 2, + DFNT_CHAR8 = 4, + DFNT_INT32 = 24) integer BLOCK_SIZE, NUM_BLOCKS parameter (BLOCK_SIZE = 256, + NUM_BLOCKS = 3) C C Function declaration C integer hopen, hclose integer vfstart, vhfscd, vhfsdm, vfend integer vsfsetblsz, vsfsetnmbl, vsfgetblinfo integer vsfatch, vsfdtch, vsffnd, vsfwrt, vsfrd, vsfseek C C**** Variable declaration ******************************************* C integer status, return_flag integer file_id integer vdata1_ref, vdata2_ref integer vdata2_id character vdata1_buf(N_RECORDS_1) integer vdata2_buf(ORDER_2, N_RECORDS_2) integer buf(ORDER_2) integer i, j integer block_size_out, num_blocks_out integer n_records data vdata1_buf /'V','D','A','T','A'/ C C**** End of variable declaration ************************************ call ptestban('Testing', myname) C C Initialize vdata2_buf C do i = 1, N_RECORDS_2 do j = 1, ORDER_2 vdata2_buf(j,i) = j + i enddo enddo C C C Open the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) call VRFY(file_id,'hopen',number_failed) C C Initialize the VS interface. C status = vfstart(file_id) call VRFY(status,'vfstart',number_failed) C C Create multi-component vdata and populate it with data from vdata2_buf array. C vdata2_ref = vhfsdm(file_id, FIELD2_NAME, vdata2_buf, N_RECORDS_2, + DFNT_INT32, VDATA2_NAME, CLASS2_NAME, + ORDER_2) call VRFY(vdata2_ref,'vhfsdm',number_failed) C C Create single-component vdata and populate it with data from vdata1_buf array. C vdata1_ref = vhfscd(file_id, FIELD1_NAME, vdata1_buf, N_RECORDS_1, + DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME) call VRFY(vdata1_ref,'vhfscd',number_failed) C C Terminate access to the VS interface and close the HDF file. C status = vfend(file_id) call VRFY(status,'vfend',number_failed) status = hclose(file_id) call VRFY(status,'hclose',number_failed) if (number_failed .gt. 0) goto 1000 C C Reopen the HDF file for writing. C file_id = hopen(FILE_NAME, DFACC_WRITE, 0) call VRFY(file_id,'hopen',number_failed) C C Initialize the VS interface. C status = vfstart(file_id) call VRFY(status,'vfstart',number_failed) C C Attach to the multi-component Vdata C vdata2_ref = vsffnd(file_id, VDATA2_NAME) call VRFY(vdata2_ref,'vsffnd',number_failed) vdata2_id = vsfatch(file_id, vdata2_ref, 'w') status = vsfsetblsz(vdata2_id, BLOCK_SIZE) call VRFY(status,'vsfsetblsz',number_failed) status = vsfsetnmbl(vdata2_id, NUM_BLOCKS) call VRFY(status,'vsfsetblnm',number_failed) C C Append to the multi-component Vdata C n_records = vsfseek(vdata2_id, N_RECORDS_2-1) call VRFY(n_records,'vsfseek',number_failed) n_records = 1 status = vsfrd(vdata2_id, buf, n_records, FULL_INTERLACE) call VRFY(status,'vsfrd',number_failed) n_records = N_RECORDS_2 status = vsfwrt(vdata2_id, vdata2_buf, n_records, + FULL_INTERLACE) if (status .ne. N_RECORDS_2) then number_failed = number_failed + 1 call MESSAGE(3,'Wrong number of records added ') call MESSAGE(3,'Append to multi-component Vdata failed ') endif call VRFY(vdata2_id,'vsfatch',number_failed) status = vsfgetblinfo(vdata2_id, block_size_out, num_blocks_out) if (block_size_out .ne. BLOCK_SIZE .or. + num_blocks_out .ne. NUM_BLOCKS) then call MESSAGE(3,'Linked-block info is wrong ') number_failed = number_failed + 1 endif status = vsfdtch(vdata2_id) call VRFY(status,'vsfdtch',number_failed) status = vfend(file_id) call VRFY(status,'vfend',number_failed) status = hclose(file_id) call VRFY(status,'hclose',number_failed) 1000 continue return end C C This subroutine tests functions vfgvgroups and vsfgvdatas C subroutine tvgroups(number_failed) implicit none include '../src/hdf.inc' integer number_failed integer fid integer vgroup_id, vgroup0_id, vgroup1_id, vgroup2_id integer vgroup3_id, vgroup4_id, vgroup5_id integer vgroup_ref integer vdata_id, vdata_ref integer vdata1_id, vdata2_id integer n_vgs, n_vds integer num_vgroups parameter (num_vgroups = 10) integer refarray(num_vgroups) integer num_vdatas parameter (num_vdatas = 8) character*12 uservgroups parameter (uservgroups = 'tuservgs.hdf') integer ref_list(num_vgroups), vdref_list(num_vdatas) character*20 vgclass integer ii character*2 ichr2 integer status character*20 myname parameter (myname = 'vgroups') C C Function declaration C integer hopen, hclose, vfend integer vfstart, vfatch, vqref, vfscls, vfdtch integer vfinsrt, vfgvgroups integer vsfgvdatas, vsqref, vsfatch, vsfscls, vsfdtch integer result(10) call ptestban('Testing', myname) n_vgs=0 C Create HDF file and initialize the interface. fid = hopen(uservgroups, DFACC_CREATE, 0) call VRFY(fid,'hfopen',number_failed) status = vfstart(fid) call VRFY(fid,'vfstart',number_failed) C Create NUM_VGROUPS vgroups and set classname do ii = 1, num_vgroups C Create a vgroup. vgroup_id = vfatch(fid, -1, "w") call VRFY(vgroup_id,'vfatch',number_failed) C Record its reference number for later access vgroup_ref = vqref(vgroup_id) call VRFY( vgroup_ref,'vqref',number_failed) ref_list(ii) = vgroup_ref C Set its class name write(ichr2,'(I2.2)') ii vgclass = "VG-CLASS-"//ichr2 status = vfscls(vgroup_id, vgclass) call VRFY(status,'vfscls',number_failed) C Detach it status = vfdtch(vgroup_id) call VRFY(status,'vfdtch',number_failed) enddo C Insert some vgroups into some other vgroups to build some sort of C vgroup structure C Insert "VG-CLASS-1" and "VG-CLASS-2" into "VG-CLASS-0" vgroup0_id = vfatch(fid, ref_list(1), "w") call VRFY(vgroup0_id,'vfatch',number_failed) vgroup1_id = vfatch(fid, ref_list(2), "w") call VRFY(vgroup1_id,'vfatch',number_failed) vgroup2_id = vfatch(fid, ref_list(3), "w") call VRFY(vgroup2_id,'vfatch',number_failed) status = vfinsrt(vgroup0_id, vgroup1_id) call VRFY(status,'vfinsrt',number_failed) status = vfinsrt(vgroup0_id, vgroup2_id) call VRFY(status,'vfinsrt',number_failed) C Insert "VG-CLASS-3", "VG-CLASS-4", and "VG-CLASS-5" into "VG-CLASS-1" vgroup3_id = vfatch(fid, ref_list(4), "w") call VRFY(vgroup3_id,'vfatch',number_failed) vgroup4_id = vfatch(fid, ref_list(5), "w") call VRFY(vgroup4_id,'vfatch',number_failed) vgroup5_id = vfatch(fid, ref_list(6), "w") call VRFY(vgroup5_id,'vfatch',number_failed) status = vfinsrt(vgroup1_id, vgroup3_id) call VRFY(status,'vfinsrt',number_failed) status = vfinsrt(vgroup1_id, vgroup4_id) call VRFY(status,'vfinsrt',number_failed) status = vfinsrt(vgroup1_id, vgroup5_id) call VRFY(status,'vfinsrt',number_failed) C ************************************************************** C The vgroup structure should look like this: C vg0 vg6 vg7 vg8 vg9 C | C / \ C vg1 vg2 C | C / | \ C / | \ C vg3 vg4 vg5 C C Calling Vgetvgroups on the file should return all ten vgroups. C Calling Vgetvgroups on vg0 should return 2, vg1 and vg2. C Calling Vgetvgroups on vg1 should return 3, vg3, vg4, and vg5 C Calling Vgetvgroups on vg6, vg7, vg8, and vg9 should return 0 C *************************************************************** C Get and verify the number of vgroups in the file n_vgs = vfgvgroups(fid, 0, -1, refarray) call VRFY(n_vgs,'vfgvgroups',number_failed) if(n_vgs.ne.num_vgroups)then call MESSAGE(3,'Wrong number of vgroups returned ') number_failed = number_failed + 1 endif C Check if setting start_vg to non-zero with vg_count = -1 returns C the correct n_vgs n_vgs = vfgvgroups(fid, 5, -1, refarray) call VRFY(n_vgs,'vfgvgroups',number_failed) if(n_vgs.ne.num_vgroups)then call MESSAGE(3,'Wrong number of vgroups returned ') number_failed = number_failed + 1 endif C Get all the vgroups in the file n_vgs = vfgvgroups(fid, 0, n_vgs, refarray) call VRFY(n_vgs,'vfgvgroups',number_failed) C Verify refarray from this vfgvgroups, it should contain: C 2 3 4 5 6 7 10 11 result(1) = 2 result(2) = 3 result(3) = 4 result(4) = 5 result(5) = 6 result(6) = 7 result(7) = 8 result(8) = 9 result(9) = 10 result(10) = 11 do ii = 1, n_vgs if( refarray(ii).ne.result(ii) )then call MESSAGE(3,'Incorrect vgroup retrieved ') number_failed = number_failed + 1 endif enddo call VRFY(n_vgs,'vfgvgroups',number_failed) if(n_vgs.ne.num_vgroups)then call MESSAGE(3,'Wrong number of vgroups returned ') number_failed = number_failed + 1 endif C Get 5 vgroups starting from vgroup number 5, the result shouldn't C include the simulated internal vgroups n_vgs = vfgvgroups(fid, 5, 5, refarray) call VRFY(n_vgs,'vfgvgroups',number_failed) if(n_vgs.ne.5)then call MESSAGE(3,'Wrong number of vgroups returned ') number_failed = number_failed + 1 endif C Verify refarray from this Vgetvgroups, C it should contain: 7, 8, 9, 10, 11 result(1) = 7 result(2) = 8 result(3) = 9 result(4) = 10 result(5) = 11 result(6) = 0 result(7) = 0 result(8) = 0 result(9) = 0 result(10) = 0 do ii = 1, n_vgs if( refarray(ii).ne.result(ii) )then call MESSAGE(3,'Incorrect vgroup retrieved ') number_failed = number_failed + 1 endif enddo C Passing in info count as 0, should fail n_vgs = vfgvgroups(fid, 0, 0, refarray) if(n_vgs.ne.-1)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C This vgroup should have no sub-vgroup n_vgs = vfgvgroups(vgroup5_id, 0, -1, refarray) if(n_vgs.ne.0)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C Passing in the starting vgroup beyond the number of C user-created vgroups, should fail n_vgs = vfgvgroups(fid, 11, 3, refarray) if(n_vgs.ne.-1)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C Create NUM_VDATAS vgroups and set classname do ii = 1, num_vdatas C Create a vdata. vdata_id = vsfatch(fid, -1, "w") call VRFY(vdata_id,'vsfatch',number_failed) C Record its reference number for later access vdata_ref = vsqref(vdata_id) call VRFY(vdata_ref,'vsqref',number_failed) vdref_list(ii) = vdata_ref; C Set its class name write(ichr2,'(I2.2)') ii vgclass = "VS-CLASS-"//ichr2 status = vsfscls(vdata_id, vgclass) call VRFY(status,'vsfscls',number_failed) C Detach it status = vsfdtch(vdata_id) call VRFY(status,'vsfdtch',number_failed) end do vdata1_id = vsfatch(fid, vdref_list(2), "w") call VRFY(status,'vsfatch',number_failed) vdata2_id = vsfatch(fid, vdref_list(3), "w") call VRFY(status,'vsfatch',number_failed) status = vfinsrt(vgroup0_id, vdata1_id) call VRFY(status,'vfinsrt vdata1_id -> vgroup0_id',number_failed) status = vfinsrt(vgroup0_id, vdata2_id) call VRFY(status,'vfinsrt vdata2_id -> vgroup0_id',number_failed) status = vfdtch(vgroup0_id) call VRFY(status,'vfdtch vgroup0_id', number_failed) status = vfdtch(vgroup1_id) call VRFY(status,'vfdtch vgroup1_id', number_failed) C Test getting all vdatas: fid, start_vd=0, n_vds=0 n_vds = vsfgvdatas(fid, 0, -1, refarray) if(n_vds.ne.num_vdatas)then call MESSAGE(3,'Wrong number of vdatas status returned ') number_failed = number_failed + 1 endif n_vds = vsfgvdatas(fid, 0, n_vds, refarray) if(n_vds.ne.num_vdatas)then call MESSAGE(3,'Wrong number of vdatas status returned ') number_failed = number_failed + 1 endif result(1) = 12 result(2) = 13 result(3) = 14 result(4) = 15 result(5) = 16 result(6) = 17 result(7) = 18 result(8) = 19 result(9) = 0 result(10) = 0 do ii = 1, n_vds if( refarray(ii).ne.result(ii) )then call MESSAGE(3,'Incorrect vdatas retrieved ') number_failed = number_failed + 1 endif enddo vgroup0_id = vfatch(fid, ref_list(1), "w") call VRFY(vgroup0_id,'vfatch',number_failed) C Test getting vdatas in vg0: vgroup0_id, start_vd=0, n_vds=0 n_vds = vsfgvdatas(vgroup0_id, 0, -1, refarray) if(n_vds.ne.2)then call MESSAGE(3,'Wrong number of vdatas status returned ') number_failed = number_failed + 1 endif n_vds = vsfgvdatas(vgroup0_id, 0, n_vds, refarray) if(n_vds.ne.2)then call MESSAGE(3,'Wrong number of vdatas status returned ') number_failed = number_failed + 1 endif result(1) = 13 result(2) = 14 result(3) = 0 result(4) = 0 result(5) = 0 result(6) = 0 result(7) = 0 result(8) = 0 result(9) = 0 result(10) = 0 do ii = 1, n_vds if( refarray(ii).ne.result(ii) )then call MESSAGE(3,'Incorrect vdatas retrieved ') number_failed = number_failed + 1 endif enddo C Passing in vd_count as 0, should fail n_vds = vsfgvdatas(fid, 0, 0, refarray) if(n_vds.ne.-1)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C This vgroup should have no sub-vdatas n_vds = vsfgvdatas(vgroup5_id, 0, -1, refarray) if(n_vds.ne.0)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C Passing in the starting vgroup beyond the number C of user-created vgroups, should fail n_vds = vsfgvdatas(fid, 10, 3, refarray) if(n_vds.ne.-1)then call MESSAGE(3,'Wrong number of vgroups status returned ') number_failed = number_failed + 1 endif C Terminate access status = vfdtch(vgroup0_id) call VRFY(status,'vfdtch vgroup0_id',number_failed) status = vsfdtch(vdata1_id) call VRFY(status,'vsfdtch vdata1_id',number_failed) status = vsfdtch(vdata2_id) call VRFY(status,'vsfdtch vdata2_id',number_failed) C Terminate access to the V interface and close the HDF file. status = vfend(fid) call VRFY(status,'vfend',number_failed) status = hclose(fid) call VRFY(status,'hclose',number_failed) end hdf4-hdf4.3.1/hdf/test/tvsfpack.c000066400000000000000000000267341503061704500165500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "vg.h" #include "tproto.h" #define NRECORDS 5 #define EPS 0.00001 #define FIELD_1 "Ident" #define FIELD_2 "Temp" #define FIELD_3 "Speed" #define FIELD_4 "Height" #define FIELD_NAMES "Ident,Temp,Speed,Height" #define FILENAME "tvpack.hdf" struct { char ident; float32 temp; int16 speed; float32 height; } source[NRECORDS]; int32 file_id, vdata_id, istat, msize = 0; uint8 *databuf, *pntr; void *databufptr[10]; /* make sure its size can hold all fields */ float32 tempdata[NRECORDS], itemp[NRECORDS]; float32 heightdata[NRECORDS], iheight[NRECORDS]; int16 speeddata[NRECORDS], ispeed[NRECORDS]; char identdata[NRECORDS], iident[NRECORDS]; int i, j, rec_size; int32 vdata_ref, in_recs, iil, irec_size; char ifields[256]; static int32 fpack(void); static int32 funpack(void); static int32 fpack(void) { /* Open the HDF file. */ file_id = Hopen(FILENAME, DFACC_CREATE, 0); /* Initialize the Vset interface. */ Vstart(file_id); /* Create a new Vdata. */ vdata_id = VSattach(file_id, -1, "w"); /* Define the field to write. */ istat = VSfdefine(vdata_id, FIELD_1, DFNT_CHAR8, 1); istat = VSfdefine(vdata_id, FIELD_2, DFNT_FLOAT32, 1); istat = VSfdefine(vdata_id, FIELD_3, DFNT_INT16, 1); istat = VSfdefine(vdata_id, FIELD_4, DFNT_FLOAT32, 1); /* Set the Vdata name. */ VSsetname(vdata_id, "myvdata"); /* Set the Vdata class. */ VSsetclass(vdata_id, "pack"); /* Set the field names. */ istat = VSsetfields(vdata_id, FIELD_NAMES); rec_size = 2 * sizeof(float32) + sizeof(int16) + sizeof(char); databuf = (uint8 *)malloc(((2 * sizeof(float32)) + sizeof(int16) + sizeof(char)) * NRECORDS); pntr = databuf; /* pack a record at a time */ for (i = 0; i < NRECORDS; i++) { source[i].temp = (float32)1.11 * (float32)(i + 1); source[i].height = (float32)2.22 * (float32)(i + 1); source[i].speed = (int16)i; source[i].ident = (char)('A' + i); /* test error checks */ if (i == 0) { /* test not enough vdata buffer size */ databufptr[0] = &source[i].ident; databufptr[1] = &source[i].temp; databufptr[2] = &source[i].speed; databufptr[3] = &source[i].height; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, 1, 1, NULL, databufptr); if (istat != FAIL) { num_errs++; printf(">>> VSfpack failed in checking bufsz %d\n", i); } pntr = databuf; /* test wrong field name */ databufptr[0] = &source[i].ident; databufptr[1] = &source[i].temp; databufptr[2] = &source[i].speed; databufptr[3] = &source[i].height; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, "Idents,Temp,Speed,Height", databufptr); if (istat != FAIL) { num_errs++; printf(">>> VSfpack failed in checking field names.\n"); } pntr = databuf; } /* normal test */ databufptr[0] = &source[i].ident; databufptr[1] = &source[i].temp; databufptr[2] = &source[i].speed; databufptr[3] = &source[i].height; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, NULL, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in packing record %d\n", i); } pntr += rec_size; } /* Write the data to the Vset object. */ istat = VSwrite(vdata_id, databuf, NRECORDS, FULL_INTERLACE); if (istat != NRECORDS) { num_errs++; printf(">>> VSwrite failed in write %d records.\n", NRECORDS); } /* pack a field at a time */ pntr = databuf; for (i = 0; i < NRECORDS; i++) { source[i].temp = (float32)3.33 * (float32)(i + 1); source[i].height = (float32)4.44 * (float32)(i + 1); source[i].speed = (int16)(2 * i); source[i].ident = (char)('a' + i); databufptr[0] = &source[i].speed; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, FIELD_3, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in packing speed.\n"); } databufptr[0] = &source[i].ident; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, FIELD_1, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in packing ident.\n"); } databufptr[0] = &source[i].temp; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, FIELD_2, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in packing temp.\n"); } databufptr[0] = &source[i].height; istat = VSfpack(vdata_id, _HDF_VSPACK, NULL, pntr, rec_size, 1, FIELD_4, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in packing height.\n"); } pntr += rec_size; } /* Write the data to the Vset object. */ istat = VSwrite(vdata_id, databuf, NRECORDS, FULL_INTERLACE); if (istat != NRECORDS) { num_errs++; printf(">>> VSwrite failed in write %d records.\n", NRECORDS); } /* * Terminate access to the Vdata, the Vset interface * and the HDF file. */ VSdetach(vdata_id); Vend(file_id); istat = Hclose(file_id); return SUCCEED; } static int32 funpack(void) { /* read data back */ /* Open the HDF file. */ file_id = Hopen(FILENAME, DFACC_RDWR, 0); /* Initialize the Vset interface. */ Vstart(file_id); vdata_ref = VSfind(file_id, "myvdata"); if (vdata_ref == 0) { num_errs++; printf(">>> VSfind failed in finding myvdata.\n"); } vdata_id = VSattach(file_id, vdata_ref, "w"); if (vdata_id == FAIL) { num_errs++; printf(">>> VSattach failed in attaching myvdata.\n"); } istat = VSinquire(vdata_id, &in_recs, &iil, ifields, &irec_size, NULL); if (istat == FAIL) { num_errs++; printf(">>> VSinquire failed in for myvdata.\n"); } if ((in_recs != 2 * NRECORDS) || (irec_size != rec_size)) { num_errs++; printf(">>> VSinquire got wrong info for myvdata.\n"); } istat = VSsetfields(vdata_id, ifields); istat = VSread(vdata_id, databuf, NRECORDS, iil); pntr = databuf; databufptr[0] = iident; databufptr[1] = itemp; databufptr[2] = ispeed; databufptr[3] = iheight; istat = VSfpack(vdata_id, _HDF_VSUNPACK, NULL, pntr, rec_size * NRECORDS, NRECORDS, NULL, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in unpacking 1st set.\n"); } for (i = 0; i < NRECORDS; i++) if ((iident[i] != (char)('A' + i)) || (fabs((double)(itemp[i] - (float32)1.11 * (float32)(i + 1))) > EPS) || (ispeed[i] != i) || (fabs((double)(iheight[i] - (float32)2.22 * (float32)(i + 1))) > EPS)) { num_errs++; printf(">>> Wrong data1 after VSfpack.\n"); } /* check the second set of records */ istat = VSread(vdata_id, databuf, NRECORDS, iil); pntr = databuf; databufptr[0] = itemp; databufptr[1] = iident; istat = VSfpack(vdata_id, _HDF_VSUNPACK, NULL, pntr, rec_size * NRECORDS, NRECORDS, "Temp,Ident", databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in unpacking temp & ident.\n"); } databufptr[0] = iheight; databufptr[1] = ispeed; istat = VSfpack(vdata_id, _HDF_VSUNPACK, NULL, pntr, rec_size * NRECORDS, NRECORDS, "Height,Speed", databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in unpacking height & speed.\n"); } for (i = 0; i < NRECORDS; i++) if ((iident[i] != (char)('a' + i)) || (fabs((double)(itemp[i] - (float32)3.33 * (float32)(i + 1))) > EPS) || (ispeed[i] != 2 * i) || (fabs((double)(iheight[i] - (float32)4.44 * (float32)(i + 1))) > EPS)) { num_errs++; printf(">>> Wrong data2 after VSfpack.\n"); } /* * Terminate access to the Vdata, the Vset interface * and the HDF file. */ VSdetach(vdata_id); /* buf contains only subset of vdata fields */ vdata_id = VSattach(file_id, vdata_ref, "w"); istat = VSsetfields(vdata_id, "Height,Speed,Ident"); if (istat == FAIL) { num_errs++; printf(">>> VSsetfields failed in set 3 flds.\n"); } istat = VSread(vdata_id, databuf, NRECORDS, FULL_INTERLACE); if (istat == FAIL) { num_errs++; printf(">>> VSread failed in reading 3 flds.\n"); } pntr = databuf; databufptr[0] = iheight; databufptr[1] = ispeed; databufptr[2] = iident; istat = VSfpack(vdata_id, _HDF_VSUNPACK, "Height,Speed,Ident", pntr, rec_size * NRECORDS, NRECORDS, NULL, databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in unpacking 1st subset.\n"); } for (i = 0; i < NRECORDS; i++) if ((iident[i] != 'A' + i) || (ispeed[i] != i) || (fabs((double)(iheight[i] - (float32)2.22 * (float32)(i + 1))) > EPS)) { num_errs++; printf(">>> Wrong subset data1 after VSfpack.\n"); } /* check the second subset of records */ istat = VSread(vdata_id, databuf, NRECORDS, FULL_INTERLACE); pntr = databuf; databufptr[0] = iident; databufptr[1] = ispeed; databufptr[2] = iheight; istat = VSfpack(vdata_id, _HDF_VSUNPACK, "Height,Speed,Ident", pntr, rec_size * NRECORDS, NRECORDS, "Ident,Speed,Height", databufptr); if (istat == FAIL) { num_errs++; printf(">>> VSfpack failed in unpacking 2nd subset\n"); } for (i = 0; i < NRECORDS; i++) if ((iident[i] != (char)('a' + i)) || (ispeed[i] != 2 * i) || (fabs((double)(iheight[i] - (float32)4.44 * (float32)(i + 1))) > EPS)) { num_errs++; printf(">>> Wrong subset data2 after VSfpack.\n"); } VSdetach(vdata_id); Vend(file_id); Hclose(file_id); free(databuf); return SUCCEED; } /* main test driver */ void test_vspack(void) { if (fpack() == FAIL) return; if (funpack() == FAIL) return; } /* test_vspack */ hdf4-hdf4.3.1/hdf/test/vers.c000066400000000000000000000031621503061704500156740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* *********************************************************************** ** get version string from an HDF file *********************************************************************** */ #include #include "tproto.h" void test_vers(void) { int ret; uint32 lmajor, lminor, lrelease; char lstring[81]; ret = Hgetlibversion(&lmajor, &lminor, &lrelease, lstring); RESULT("Hgetlibversion"); MESSAGE(5, printf("Library Version\n");); MESSAGE(5, printf("---------------\n");); MESSAGE(5, printf("Major:\t\t%u\nMinor:\t\t%u\nRelease:\t%u\nString:\t\t\"%s\"\n", (unsigned)lmajor, (unsigned)lminor, (unsigned)lrelease, lstring);); } hdf4-hdf4.3.1/hdf/util/000077500000000000000000000000001503061704500145455ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/util/CMakeLists.txt000066400000000000000000000261421503061704500173120ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_HDF_UTIL C) if (HDF4_BUILD_TOOLS) #-- Adding tool hdfls add_executable (hdfls ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfls.c) target_include_directories(hdfls PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfls STATIC) target_link_libraries (hdfls PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfls SHARED) target_link_libraries (hdfls PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_EXECUTABLES hdfls) #-- Adding utility hdfed set (hdfed_SRCS ${HDF4_HDF_UTIL_SOURCE_DIR}/he_cntrl.c ${HDF4_HDF_UTIL_SOURCE_DIR}/he_disp.c ${HDF4_HDF_UTIL_SOURCE_DIR}/he_file.c ${HDF4_HDF_UTIL_SOURCE_DIR}/he_main.c ) add_executable (hdfed ${hdfed_SRCS}) target_include_directories(hdfed PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfed STATIC) target_link_libraries (hdfed PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfed SHARED) target_link_libraries (hdfed PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_EXECUTABLES ${H4_DEP_EXECUTABLES} hdfed) endif () if (HDF4_BUILD_UTILS) #-- Adding utility hdf2gif set (hdf2gif_SRCS ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf2gif.c ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfgifwr.c ) add_executable (hdf2gif ${hdf2gif_SRCS}) target_include_directories(hdf2gif PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdf2gif STATIC) target_link_libraries (hdf2gif PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdf2gif SHARED) target_link_libraries (hdf2gif PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES hdf2gif) #-- Adding utility gif2hdf set (gif2hdf_SRCS ${HDF4_HDF_UTIL_SOURCE_DIR}/gif2hdf.c ${HDF4_HDF_UTIL_SOURCE_DIR}/gif2mem.c ${HDF4_HDF_UTIL_SOURCE_DIR}/gifread.c ${HDF4_HDF_UTIL_SOURCE_DIR}/decompress.c ${HDF4_HDF_UTIL_SOURCE_DIR}/writehdf.c ) add_executable (gif2hdf ${gif2hdf_SRCS}) target_include_directories(gif2hdf PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (gif2hdf STATIC) target_link_libraries (gif2hdf PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (gif2hdf SHARED) target_link_libraries (gif2hdf PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} gif2hdf) #-- Adding utility hdf24to8 add_executable (hdf24to8 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf24to8.c) target_include_directories(hdf24to8 PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdf24to8 STATIC) target_link_libraries (hdf24to8 PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdf24to8 SHARED) target_link_libraries (hdf24to8 PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdf24to8) #-- Adding utility hdftor8 add_executable (hdftor8 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdftor8.c) target_include_directories(hdftor8 PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdftor8 STATIC) target_link_libraries (hdftor8 PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdftor8 SHARED) target_link_libraries (hdftor8 PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdftor8) #-- Adding utility ristosds add_executable (ristosds ${HDF4_HDF_UTIL_SOURCE_DIR}/ristosds.c) target_include_directories(ristosds PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (ristosds STATIC) target_link_libraries (ristosds PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (ristosds SHARED) target_link_libraries (ristosds PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} ristosds) #-- Adding utility hdfpack add_executable (hdfpack ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfpack.c) target_include_directories(hdfpack PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfpack STATIC) target_link_libraries (hdfpack PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfpack SHARED) target_link_libraries (hdfpack PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdfpack) #-- Adding utility paltohdf add_executable (paltohdf ${HDF4_HDF_UTIL_SOURCE_DIR}/paltohdf.c) target_include_directories(paltohdf PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (paltohdf STATIC) target_link_libraries (paltohdf PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (paltohdf SHARED) target_link_libraries (paltohdf PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} paltohdf) #-- Adding utility hdftopal add_executable (hdftopal ${HDF4_HDF_UTIL_SOURCE_DIR}/hdftopal.c) target_include_directories(hdftopal PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdftopal STATIC) target_link_libraries (hdftopal PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdftopal SHARED) target_link_libraries (hdftopal PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdftopal) #-- Adding utility r8tohdf add_executable (r8tohdf ${HDF4_HDF_UTIL_SOURCE_DIR}/r8tohdf.c) target_include_directories(r8tohdf PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (r8tohdf STATIC) target_link_libraries (r8tohdf PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (r8tohdf SHARED) target_link_libraries (r8tohdf PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} r8tohdf) #-- Adding utility hdfcomp add_executable (hdfcomp ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfcomp.c) target_include_directories(hdfcomp PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfcomp STATIC) target_link_libraries (hdfcomp PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfcomp SHARED) target_link_libraries (hdfcomp PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdfcomp) #-- Adding utility jpeg2hdf add_executable (jpeg2hdf ${HDF4_HDF_UTIL_SOURCE_DIR}/jpeg2hdf.c) target_include_directories(jpeg2hdf PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (jpeg2hdf STATIC) target_link_libraries (jpeg2hdf PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (jpeg2hdf SHARED) target_link_libraries (jpeg2hdf PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} jpeg2hdf) #-- Adding utility hdf2jpeg add_executable (hdf2jpeg ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf2jpeg.c) target_include_directories(hdf2jpeg PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdf2jpeg STATIC) target_link_libraries (hdf2jpeg PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdf2jpeg SHARED) target_link_libraries (hdf2jpeg PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdf2jpeg) #-- Adding utility hdf8to24 add_executable (hdf8to24 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf8to24.c) target_include_directories(hdf8to24 PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdf8to24 STATIC) target_link_libraries (hdf8to24 PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdf8to24 SHARED) target_link_libraries (hdf8to24 PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdf8to24) #-- Adding utility hdfunpac add_executable (hdfunpac ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfunpac.c) target_include_directories(hdfunpac PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfunpac STATIC) target_link_libraries (hdfunpac PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfunpac SHARED) target_link_libraries (hdfunpac PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} hdfunpac) #-- Adding utility vmake add_executable (vmake ${HDF4_HDF_UTIL_SOURCE_DIR}/vmake.c) target_include_directories(vmake PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (vmake STATIC) target_link_libraries (vmake PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (vmake SHARED) target_link_libraries (vmake PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} vmake) #-- Adding utility vshow add_executable (vshow ${HDF4_HDF_UTIL_SOURCE_DIR}/vshow.c) target_include_directories(vshow PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (vshow STATIC) target_link_libraries (vshow PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (vshow SHARED) target_link_libraries (vshow PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set (H4_DEP_UTILITIES ${H4_DEP_UTILITIES} vshow) endif () if (BUILD_TESTING AND HDF4_BUILD_UTILS) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- if (HDF4_BUILD_TOOLS) foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () INSTALL ( TARGETS ${H4_DEP_EXECUTABLES} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) endif () if (HDF4_BUILD_UTILS) foreach (exec ${H4_DEP_UTILITIES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_UTILS_BIN_DIR} toolsapplications) endforeach () INSTALL ( TARGETS ${H4_DEP_UTILITIES} RUNTIME DESTINATION ${HDF4_INSTALL_UTILS_BIN_DIR} COMPONENT utilsapplications ) endif () hdf4-hdf4.3.1/hdf/util/CMakeTests.cmake000066400000000000000000000326731503061704500175650ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## ############################################################################## # -------------------------------------------------------------------- # Copy all the files from the test directory into the source directory # -------------------------------------------------------------------- ############################################################################## if (HDF4_BUILD_TOOLS) #-- Copy all the hdfls data files from the source directory into the test directory set (HDF4_LS_TEST_FILES hdfcomp.out1.1 hdfcomp.out1.2 hdfed.input1 # hdfed.out1 hdfpack.out1.1 hdfpack.out1.2 hdftor8.out1 jpeg2hdf.out1 ristosds.input1 ristosds.out1 ) #-- Copy all the hdfed data files from the source directory into the test directory set (HDF4_HDFED_TEST_FILES storm110.hdf ntcheck.hdf ) foreach (h4_file ${HDF4_LS_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_HDF_UTIL_SOURCE_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hdf_util_files") endforeach () if (WIN32 AND MSVC_VERSION LESS 1900) HDFTEST_COPY_FILE("${HDF4_HDF_UTIL_SOURCE_DIR}/hdfed-w.out1" "${PROJECT_BINARY_DIR}/hdfed.out1" "hdf_util_files") else () HDFTEST_COPY_FILE("${HDF4_HDF_UTIL_SOURCE_DIR}/hdfed.out1" "${PROJECT_BINARY_DIR}/hdfed.out1" "hdf_util_files") endif () foreach (h4_file ${HDF4_HDFED_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hdf_util_files") endforeach () endif () #-- Copy all the hdf2gif data files from the source directory into the test directory set (HDF4_HDF2GIF_TEST_FILES skull.hdf ) #-- Copy all the gif2hdf data files from the source directory into the test directory set (HDF4_GIF2HDF_TEST_FILES SunWheel.gif bttrfly.gif ) #-- Copy all the hdftor8 data files from the source directory into the test directory set (HDF4_HDFTOR8_TEST_FILES head.r24 head.r8 ) #-- Copy all the ristosds data files from the source directory into the test directory set (HDF4_RISTOSDS_TEST_FILES storm110.hdf storm120.hdf storm130.hdf ) #-- Copy all the hdfpack data files from the source directory into the test directory set (HDF4_HDFPACK_TEST_FILES test.hdf ) #-- Copy all the paltohdf data files from the source directory into the test directory set (HDF4_PALTOHDF_TEST_FILES palette.raw ) #-- Copy all the r8tohdf data files from the source directory into the test directory set (HDF4_R8TOHDF_TEST_FILES storm110.raw storm120.raw storm130.raw storm140.raw ) #-- Copy all the hdfcomp data files from the source directory into the test directory set (HDF4_HDFCOMP_TEST_FILES storm110.hdf storm120.hdf storm130.hdf ) #-- Copy all the jpeg2hdf data files from the source directory into the test directory set (HDF4_JPEG2HDF_TEST_FILES jpeg_img.jpg ) foreach (h4_file ${HDF4_HDF2GIF_TEST_FILES} ${HDF4_GIF2HDF_TEST_FILES} ${HDF4_HDFTOR8_TEST_FILES} ${HDF4_RISTOSDS_TEST_FILES} ${HDF4_HDFPACK_TEST_FILES} ${HDF4_PALTOHDF_TEST_FILES} ${HDF4_R8TOHDF_TEST_FILES} ${HDF4_HDFCOMP_TEST_FILES} ${HDF4_JPEG2HDF_TEST_FILES} ) HDFTEST_COPY_FILE("${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hdf_util_files") endforeach () add_custom_target(hdf_util_files ALL COMMENT "Copying files needed by hdf_util tests" DEPENDS ${hdf_util_files_list}) ############################################################################## ############################################################################## ### T H E T E S T S M A C R O S ### ############################################################################## ############################################################################## if (HDF4_BUILD_TOOLS) macro (ADD_LS_TEST_NOL testfile resultfile resultcode) if (HDF4_USING_ANALYSIS_TOOL) add_test (NAME HDFLS_NOL-${testfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${testfile}) else () add_test ( NAME HDFLS_NOL-${testfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${testfile}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n" -D "TEST_REFERENCE=${resultfile}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDFLS_NOL-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDFLS_NOL-${testfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDFLS_NOL-${testfile}") endmacro () macro (ADD_LS_TEST testfile resultfile resultcode) if (HDF4_USING_ANALYSIS_TOOL) add_test (NAME HDFLS-${testfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -l ${testfile}) else () add_test ( NAME HDFLS-${testfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-l;${testfile}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n" -D "TEST_REFERENCE=${resultfile}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDFLS-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDFLS-${testfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDFLS-${testfile}") endmacro () macro (ADD_H4_TEST_ED testfile resultfile resultcode) if (HDF4_USING_ANALYSIS_TOOL) add_test (NAME HEDIT-${testfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -batch) else () add_test ( NAME HEDIT-${testfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-batch" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_INPUT=${testfile}" -D "TEST_OUTPUT=${testfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=${resultfile}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HEDIT-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HEDIT-${testfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HEDIT-${testfile}") endmacro () endif () macro (ADD_H4_TEST testname testfile) add_test (NAME ${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN}) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (${testname} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "${testname}") endmacro () macro (ADD_CMP_TEST testname reffile testfile) add_test (NAME ${testname} COMMAND ${CMAKE_COMMAND} -E compare_files ${reffile} ${testfile}) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (${testname} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "${testname}") endmacro () macro (ADD_H4Q_TEST testname testfile) add_test (NAME ${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN} > /dev/null 2>&1) if (NOT "${last_test}" STREQUAL "") set_tests_properties (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (${testname} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "${testname}") endmacro () ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME hdfgif-clear-refs COMMAND ${CMAKE_COMMAND} -E remove skull.gif SunWheel.hdf bttrfly.hdf head8.hdf img001-263.328 storm.hdf ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (hdfgif-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (hdfgif-clear-refs PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "hdfgif-clear-refs") ADD_H4_TEST (testhdf2gif hdf2gif skull.hdf skull.gif) ADD_H4_TEST (testgif2hdf-sunwheel gif2hdf SunWheel.gif SunWheel.hdf) ADD_H4_TEST (testgif2hdf-butterfly gif2hdf bttrfly.gif bttrfly.hdf) ADD_H4_TEST (testhdf24to8 hdf24to8 head.r24 head8.hdf) ADD_H4_TEST (testhdftor8 hdftor8 head8.hdf) ADD_CMP_TEST (hdfr8comp img001-263.328 head.r8) if (HDF4_BUILD_TOOLS) ADD_H4_TEST_ED (hdfed.input1 hdfed.out1 0) endif () ADD_H4Q_TEST (testristosds ristosds storm110.hdf storm120.hdf storm130.hdf -o storm.hdf) if (HDF4_BUILD_TOOLS) ADD_H4_TEST_ED (ristosds.input1 ristosds.out1 0) endif () # Remove any output file left over from previous test run add_test ( NAME hdfpack-clear-refs COMMAND ${CMAKE_COMMAND} -E remove test.pck test.blk ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (hdfpack-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (hdfpack-clear-refs PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "hdfpack-clear-refs") ADD_H4_TEST (testhdfpack hdfpack test.hdf test.pck) ADD_H4_TEST (testhdfpack-block hdfpack -b test.hdf test.blk) if (HDF4_BUILD_TOOLS) ADD_LS_TEST_NOL (test.hdf hdfpack.out1.1 0) ADD_LS_TEST_NOL (test.pck hdfpack.out1.2 0) endif () # Remove any output file left over from previous test run add_test ( NAME hdfpalette-clear-refs COMMAND ${CMAKE_COMMAND} -E remove pal001 pal005 palette.hdf palette.raw.new storm.hdf storm.hdf.tmp storm.hdf.tmp.err img001-057.057 img002-057.057 img003-057.057 img004-057.057 img005-057.057 allstorms.hdf allstorms.hdf.tmp allstorms.hdf.tmp.err allcomp.hdf allcomp.hdf.tmp allcomp.hdf.tmp.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (hdfpalette-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (hdfpalette-clear-refs PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "hdfpalette-clear-refs") ADD_H4_TEST (testpaltohdf paltohdf palette.raw palette.hdf) ADD_H4_TEST (testhdftopal hdftopal palette.hdf palette.raw.new) ADD_CMP_TEST (palettecomp palette.raw palette.raw.new) ADD_H4_TEST (testr8tohdf-storm r8tohdf 57 57 storm.hdf storm110.raw storm120.raw storm130.raw storm140.raw) ADD_H4_TEST (testr8tohdf-palette r8tohdf 57 57 storm.hdf -p palette.raw -i storm110.raw) ADD_H4_TEST (testhdftor8-storm hdftor8 storm.hdf) if (HDF4_BUILD_TOOLS) ADD_LS_TEST (storm.hdf hdftor8.out1 0) endif () ADD_CMP_TEST (storm110comp img001-057.057 storm110.raw) ADD_CMP_TEST (storm120comp img002-057.057 storm120.raw) ADD_CMP_TEST (storm130comp img003-057.057 storm130.raw) ADD_CMP_TEST (storm140comp img004-057.057 storm140.raw) ADD_H4_TEST (testhdfcomp-storms hdfcomp allstorms.hdf storm110.hdf storm120.hdf storm130.hdf) ADD_H4_TEST (testhdfcomp hdfcomp allcomp.hdf -c storm110.hdf storm120.hdf storm130.hdf) if (HDF4_BUILD_TOOLS) ADD_LS_TEST (allstorms.hdf hdfcomp.out1.1 0) ADD_LS_TEST (allcomp.hdf hdfcomp.out1.2 0) endif () # Remove any output file left over from previous test run add_test ( NAME hdfjpeg-clear-refs COMMAND ${CMAKE_COMMAND} -E remove jpeg.hdf jpeg.hdf.tmp jpeg.hdf.tmp.err jpeg2.jpg ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (hdfjpeg-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (hdfjpeg-clear-refs PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "hdfjpeg-clear-refs") ADD_H4_TEST (testjpeg2hdf jpeg2hdf jpeg_img.jpg jpeg.hdf) ADD_H4_TEST (testhdf2jpeg hdf2jpeg jpeg.hdf jpeg2.jpg) if (HDF4_BUILD_TOOLS) ADD_LS_TEST (jpeg.hdf jpeg2hdf.out1 0) endif () ADD_CMP_TEST (jpeg2comp jpeg_img.jpg jpeg2.jpg) #ADD_H4_TEST (hdf8to24 hdf8to24) #ADD_H4_TEST (hdfunpac hdfunpac) #ADD_H4_TEST (vmake vmake) #ADD_H4_TEST (vshow vshow) hdf4-hdf4.3.1/hdf/util/HELINK.OPT000066400000000000000000000000411503061704500160760ustar00rootroot00000000000000sys$common:[syslib]tpushr/share hdf4-hdf4.3.1/hdf/util/Makefile.am000066400000000000000000000105111503061704500165770ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. AM_CPPFLAGS=-I$(top_srcdir)/hdf/src ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = gif2hdf hdf2gif hdf2jpeg hdf24to8 hdf8to24 hdfcomp hdfed \ hdfls hdfpack hdftopal hdftor8 hdfunpac jpeg2hdf paltohdf \ r8tohdf ristosds vmake vshow if HDF_BUILD_FORTRAN bin_SCRIPTS = h4redeploy h4cc h4fc else bin_SCRIPTS = h4redeploy h4cc endif gif2hdf_SOURCES = gif2hdf.c gif2mem.c gifread.c decompress.c writehdf.c gif2hdf_LDADD = $(LIBHDF) gif2hdf_DEPENDENCIES = $(LIBHDF) gif2hdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf2gif_SOURCES = hdf2gif.c hdfgifwr.c hdf2gif_LDADD = $(LIBHDF) hdf2gif_DEPENDENCIES = $(LIBHDF) hdf2gif_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf2jpeg_SOURCES = hdf2jpeg.c hdf2jpeg_LDADD = $(LIBHDF) hdf2jpeg_DEPENDENCIES = $(LIBHDF) hdf2jpeg_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf24to8_SOURCES = hdf24to8.c hdf24to8_LDADD = $(LIBHDF) hdf24to8_DEPENDENCIES = $(LIBHDF) hdf24to8_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf8to24_SOURCES = hdf8to24.c hdf8to24_LDADD = $(LIBHDF) hdf8to24_DEPENDENCIES = $(LIBHDF) hdf8to24_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfcomp_SOURCES = hdfcomp.c hdfcomp_LDADD = $(LIBHDF) hdfcomp_DEPENDENCIES = $(LIBHDF) hdfcomp_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfed_SOURCES = he_cntrl.c he_disp.c he_file.c he_main.c hdfed_LDADD = $(LIBHDF) hdfed_DEPENDENCIES = $(LIBHDF) hdfed_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfls_SOURCES = hdfls.c hdfls_LDADD = $(LIBHDF) hdfls_DEPENDENCIES = $(LIBHDF) hdfls_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfpack_SOURCES = hdfpack.c hdfpack_LDADD = $(LIBHDF) hdfpack_DEPENDENCIES = $(LIBHDF) hdfpack_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdftopal_SOURCES = hdftopal.c hdftopal_LDADD = $(LIBHDF) hdftopal_DEPENDENCIES = $(LIBHDF) hdftopal_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdftor8_SOURCES = hdftor8.c hdftor8_LDADD = $(LIBHDF) hdftor8_DEPENDENCIES = $(LIBHDF) hdftor8_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfunpac_SOURCES = hdfunpac.c hdfunpac_LDADD = $(LIBHDF) hdfunpac_DEPENDENCIES = $(LIBHDF) hdfunpac_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) jpeg2hdf_SOURCES = jpeg2hdf.c jpeg2hdf_LDADD = $(LIBHDF) jpeg2hdf_DEPENDENCIES = $(LIBHDF) jpeg2hdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) paltohdf_SOURCES = paltohdf.c paltohdf_LDADD = $(LIBHDF) paltohdf_DEPENDENCIES = $(LIBHDF) paltohdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) r8tohdf_SOURCES = r8tohdf.c r8tohdf_LDADD = $(LIBHDF) r8tohdf_DEPENDENCIES = $(LIBHDF) r8tohdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ristosds_SOURCES = ristosds.c ristosds_LDADD = $(LIBHDF) ristosds_DEPENDENCIES = $(LIBHDF) ristosds_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) vmake_SOURCES = vmake.c vmake_LDADD = $(LIBHDF) vmake_DEPENDENCIES = $(LIBHDF) vmake_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) vshow_SOURCES = vshow.c vshow_LDADD = ../src/libdf.la vshow_DEPENDENCIES = ../src/libdf.la vshow_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# TEST_SCRIPT = testutil.sh check_SCRIPTS = testutil.sh check_PROGRAMS = $(bin_PROGRAMS) ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += gif_hdf_temp/bttrfly.hdf gif_hdf_temp/skull.gif \ gif_hdf_temp/SunWheel.hdf # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf gif_hdf_temp DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/hdf/util/Makefile.in000066400000000000000000001724521503061704500166250ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = gif2hdf$(EXEEXT) hdf2gif$(EXEEXT) hdf2jpeg$(EXEEXT) \ hdf24to8$(EXEEXT) hdf8to24$(EXEEXT) hdfcomp$(EXEEXT) \ hdfed$(EXEEXT) hdfls$(EXEEXT) hdfpack$(EXEEXT) \ hdftopal$(EXEEXT) hdftor8$(EXEEXT) hdfunpac$(EXEEXT) \ jpeg2hdf$(EXEEXT) paltohdf$(EXEEXT) r8tohdf$(EXEEXT) \ ristosds$(EXEEXT) vmake$(EXEEXT) vshow$(EXEEXT) TESTS = $(TEST_SCRIPT) subdir = hdf/util ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = h4cc h4fc h4redeploy testutil.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gif2hdf_OBJECTS = gif2hdf.$(OBJEXT) gif2mem.$(OBJEXT) \ gifread.$(OBJEXT) decompress.$(OBJEXT) writehdf.$(OBJEXT) gif2hdf_OBJECTS = $(am_gif2hdf_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = gif2hdf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(gif2hdf_LDFLAGS) $(LDFLAGS) -o $@ am_hdf24to8_OBJECTS = hdf24to8.$(OBJEXT) hdf24to8_OBJECTS = $(am_hdf24to8_OBJECTS) hdf24to8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdf24to8_LDFLAGS) $(LDFLAGS) -o $@ am_hdf2gif_OBJECTS = hdf2gif.$(OBJEXT) hdfgifwr.$(OBJEXT) hdf2gif_OBJECTS = $(am_hdf2gif_OBJECTS) hdf2gif_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdf2gif_LDFLAGS) $(LDFLAGS) -o $@ am_hdf2jpeg_OBJECTS = hdf2jpeg.$(OBJEXT) hdf2jpeg_OBJECTS = $(am_hdf2jpeg_OBJECTS) hdf2jpeg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdf2jpeg_LDFLAGS) $(LDFLAGS) -o $@ am_hdf8to24_OBJECTS = hdf8to24.$(OBJEXT) hdf8to24_OBJECTS = $(am_hdf8to24_OBJECTS) hdf8to24_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdf8to24_LDFLAGS) $(LDFLAGS) -o $@ am_hdfcomp_OBJECTS = hdfcomp.$(OBJEXT) hdfcomp_OBJECTS = $(am_hdfcomp_OBJECTS) hdfcomp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfcomp_LDFLAGS) $(LDFLAGS) -o $@ am_hdfed_OBJECTS = he_cntrl.$(OBJEXT) he_disp.$(OBJEXT) \ he_file.$(OBJEXT) he_main.$(OBJEXT) hdfed_OBJECTS = $(am_hdfed_OBJECTS) hdfed_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfed_LDFLAGS) $(LDFLAGS) -o $@ am_hdfls_OBJECTS = hdfls.$(OBJEXT) hdfls_OBJECTS = $(am_hdfls_OBJECTS) hdfls_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfls_LDFLAGS) $(LDFLAGS) -o $@ am_hdfpack_OBJECTS = hdfpack.$(OBJEXT) hdfpack_OBJECTS = $(am_hdfpack_OBJECTS) hdfpack_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfpack_LDFLAGS) $(LDFLAGS) -o $@ am_hdftopal_OBJECTS = hdftopal.$(OBJEXT) hdftopal_OBJECTS = $(am_hdftopal_OBJECTS) hdftopal_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdftopal_LDFLAGS) $(LDFLAGS) -o $@ am_hdftor8_OBJECTS = hdftor8.$(OBJEXT) hdftor8_OBJECTS = $(am_hdftor8_OBJECTS) hdftor8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdftor8_LDFLAGS) $(LDFLAGS) -o $@ am_hdfunpac_OBJECTS = hdfunpac.$(OBJEXT) hdfunpac_OBJECTS = $(am_hdfunpac_OBJECTS) hdfunpac_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfunpac_LDFLAGS) $(LDFLAGS) -o $@ am_jpeg2hdf_OBJECTS = jpeg2hdf.$(OBJEXT) jpeg2hdf_OBJECTS = $(am_jpeg2hdf_OBJECTS) jpeg2hdf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(jpeg2hdf_LDFLAGS) $(LDFLAGS) -o $@ am_paltohdf_OBJECTS = paltohdf.$(OBJEXT) paltohdf_OBJECTS = $(am_paltohdf_OBJECTS) paltohdf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(paltohdf_LDFLAGS) $(LDFLAGS) -o $@ am_r8tohdf_OBJECTS = r8tohdf.$(OBJEXT) r8tohdf_OBJECTS = $(am_r8tohdf_OBJECTS) r8tohdf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(r8tohdf_LDFLAGS) $(LDFLAGS) -o $@ am_ristosds_OBJECTS = ristosds.$(OBJEXT) ristosds_OBJECTS = $(am_ristosds_OBJECTS) ristosds_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ristosds_LDFLAGS) $(LDFLAGS) -o $@ am_vmake_OBJECTS = vmake.$(OBJEXT) vmake_OBJECTS = $(am_vmake_OBJECTS) vmake_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(vmake_LDFLAGS) $(LDFLAGS) -o $@ am_vshow_OBJECTS = vshow.$(OBJEXT) vshow_OBJECTS = $(am_vshow_OBJECTS) vshow_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(vshow_LDFLAGS) $(LDFLAGS) -o $@ 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; }; \ } SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/decompress.Po ./$(DEPDIR)/gif2hdf.Po \ ./$(DEPDIR)/gif2mem.Po ./$(DEPDIR)/gifread.Po \ ./$(DEPDIR)/hdf24to8.Po ./$(DEPDIR)/hdf2gif.Po \ ./$(DEPDIR)/hdf2jpeg.Po ./$(DEPDIR)/hdf8to24.Po \ ./$(DEPDIR)/hdfcomp.Po ./$(DEPDIR)/hdfgifwr.Po \ ./$(DEPDIR)/hdfls.Po ./$(DEPDIR)/hdfpack.Po \ ./$(DEPDIR)/hdftopal.Po ./$(DEPDIR)/hdftor8.Po \ ./$(DEPDIR)/hdfunpac.Po ./$(DEPDIR)/he_cntrl.Po \ ./$(DEPDIR)/he_disp.Po ./$(DEPDIR)/he_file.Po \ ./$(DEPDIR)/he_main.Po ./$(DEPDIR)/jpeg2hdf.Po \ ./$(DEPDIR)/paltohdf.Po ./$(DEPDIR)/r8tohdf.Po \ ./$(DEPDIR)/ristosds.Po ./$(DEPDIR)/vmake.Po \ ./$(DEPDIR)/vshow.Po ./$(DEPDIR)/writehdf.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(gif2hdf_SOURCES) $(hdf24to8_SOURCES) $(hdf2gif_SOURCES) \ $(hdf2jpeg_SOURCES) $(hdf8to24_SOURCES) $(hdfcomp_SOURCES) \ $(hdfed_SOURCES) $(hdfls_SOURCES) $(hdfpack_SOURCES) \ $(hdftopal_SOURCES) $(hdftor8_SOURCES) $(hdfunpac_SOURCES) \ $(jpeg2hdf_SOURCES) $(paltohdf_SOURCES) $(r8tohdf_SOURCES) \ $(ristosds_SOURCES) $(vmake_SOURCES) $(vshow_SOURCES) DIST_SOURCES = $(gif2hdf_SOURCES) $(hdf24to8_SOURCES) \ $(hdf2gif_SOURCES) $(hdf2jpeg_SOURCES) $(hdf8to24_SOURCES) \ $(hdfcomp_SOURCES) $(hdfed_SOURCES) $(hdfls_SOURCES) \ $(hdfpack_SOURCES) $(hdftopal_SOURCES) $(hdftor8_SOURCES) \ $(hdfunpac_SOURCES) $(jpeg2hdf_SOURCES) $(paltohdf_SOURCES) \ $(r8tohdf_SOURCES) $(ristosds_SOURCES) $(vmake_SOURCES) \ $(vshow_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/h4cc.in \ $(srcdir)/h4fc.in $(srcdir)/h4redeploy.in \ $(srcdir)/testutil.sh.in $(top_srcdir)/bin/depcomp \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog gif_hdf_temp/bttrfly.hdf \ gif_hdf_temp/skull.gif gif_hdf_temp/SunWheel.hdf AM_CPPFLAGS = -I$(top_srcdir)/hdf/src @HDF_BUILD_FORTRAN_FALSE@bin_SCRIPTS = h4redeploy h4cc @HDF_BUILD_FORTRAN_TRUE@bin_SCRIPTS = h4redeploy h4cc h4fc gif2hdf_SOURCES = gif2hdf.c gif2mem.c gifread.c decompress.c writehdf.c gif2hdf_LDADD = $(LIBHDF) gif2hdf_DEPENDENCIES = $(LIBHDF) gif2hdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf2gif_SOURCES = hdf2gif.c hdfgifwr.c hdf2gif_LDADD = $(LIBHDF) hdf2gif_DEPENDENCIES = $(LIBHDF) hdf2gif_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf2jpeg_SOURCES = hdf2jpeg.c hdf2jpeg_LDADD = $(LIBHDF) hdf2jpeg_DEPENDENCIES = $(LIBHDF) hdf2jpeg_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf24to8_SOURCES = hdf24to8.c hdf24to8_LDADD = $(LIBHDF) hdf24to8_DEPENDENCIES = $(LIBHDF) hdf24to8_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdf8to24_SOURCES = hdf8to24.c hdf8to24_LDADD = $(LIBHDF) hdf8to24_DEPENDENCIES = $(LIBHDF) hdf8to24_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfcomp_SOURCES = hdfcomp.c hdfcomp_LDADD = $(LIBHDF) hdfcomp_DEPENDENCIES = $(LIBHDF) hdfcomp_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfed_SOURCES = he_cntrl.c he_disp.c he_file.c he_main.c hdfed_LDADD = $(LIBHDF) hdfed_DEPENDENCIES = $(LIBHDF) hdfed_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfls_SOURCES = hdfls.c hdfls_LDADD = $(LIBHDF) hdfls_DEPENDENCIES = $(LIBHDF) hdfls_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfpack_SOURCES = hdfpack.c hdfpack_LDADD = $(LIBHDF) hdfpack_DEPENDENCIES = $(LIBHDF) hdfpack_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdftopal_SOURCES = hdftopal.c hdftopal_LDADD = $(LIBHDF) hdftopal_DEPENDENCIES = $(LIBHDF) hdftopal_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdftor8_SOURCES = hdftor8.c hdftor8_LDADD = $(LIBHDF) hdftor8_DEPENDENCIES = $(LIBHDF) hdftor8_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdfunpac_SOURCES = hdfunpac.c hdfunpac_LDADD = $(LIBHDF) hdfunpac_DEPENDENCIES = $(LIBHDF) hdfunpac_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) jpeg2hdf_SOURCES = jpeg2hdf.c jpeg2hdf_LDADD = $(LIBHDF) jpeg2hdf_DEPENDENCIES = $(LIBHDF) jpeg2hdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) paltohdf_SOURCES = paltohdf.c paltohdf_LDADD = $(LIBHDF) paltohdf_DEPENDENCIES = $(LIBHDF) paltohdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) r8tohdf_SOURCES = r8tohdf.c r8tohdf_LDADD = $(LIBHDF) r8tohdf_DEPENDENCIES = $(LIBHDF) r8tohdf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ristosds_SOURCES = ristosds.c ristosds_LDADD = $(LIBHDF) ristosds_DEPENDENCIES = $(LIBHDF) ristosds_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) vmake_SOURCES = vmake.c vmake_LDADD = $(LIBHDF) vmake_DEPENDENCIES = $(LIBHDF) vmake_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) vshow_SOURCES = vshow.c vshow_LDADD = ../src/libdf.la vshow_DEPENDENCIES = ../src/libdf.la vshow_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ############################################################################# TEST_SCRIPT = testutil.sh check_SCRIPTS = testutil.sh check_PROGRAMS = $(bin_PROGRAMS) DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 hdf/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign hdf/util/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): h4cc: $(top_builddir)/config.status $(srcdir)/h4cc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ h4fc: $(top_builddir)/config.status $(srcdir)/h4fc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ h4redeploy: $(top_builddir)/config.status $(srcdir)/h4redeploy.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ testutil.sh: $(top_builddir)/config.status $(srcdir)/testutil.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 clean-checkPROGRAMS: @list='$(check_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 gif2hdf$(EXEEXT): $(gif2hdf_OBJECTS) $(gif2hdf_DEPENDENCIES) $(EXTRA_gif2hdf_DEPENDENCIES) @rm -f gif2hdf$(EXEEXT) $(AM_V_CCLD)$(gif2hdf_LINK) $(gif2hdf_OBJECTS) $(gif2hdf_LDADD) $(LIBS) hdf24to8$(EXEEXT): $(hdf24to8_OBJECTS) $(hdf24to8_DEPENDENCIES) $(EXTRA_hdf24to8_DEPENDENCIES) @rm -f hdf24to8$(EXEEXT) $(AM_V_CCLD)$(hdf24to8_LINK) $(hdf24to8_OBJECTS) $(hdf24to8_LDADD) $(LIBS) hdf2gif$(EXEEXT): $(hdf2gif_OBJECTS) $(hdf2gif_DEPENDENCIES) $(EXTRA_hdf2gif_DEPENDENCIES) @rm -f hdf2gif$(EXEEXT) $(AM_V_CCLD)$(hdf2gif_LINK) $(hdf2gif_OBJECTS) $(hdf2gif_LDADD) $(LIBS) hdf2jpeg$(EXEEXT): $(hdf2jpeg_OBJECTS) $(hdf2jpeg_DEPENDENCIES) $(EXTRA_hdf2jpeg_DEPENDENCIES) @rm -f hdf2jpeg$(EXEEXT) $(AM_V_CCLD)$(hdf2jpeg_LINK) $(hdf2jpeg_OBJECTS) $(hdf2jpeg_LDADD) $(LIBS) hdf8to24$(EXEEXT): $(hdf8to24_OBJECTS) $(hdf8to24_DEPENDENCIES) $(EXTRA_hdf8to24_DEPENDENCIES) @rm -f hdf8to24$(EXEEXT) $(AM_V_CCLD)$(hdf8to24_LINK) $(hdf8to24_OBJECTS) $(hdf8to24_LDADD) $(LIBS) hdfcomp$(EXEEXT): $(hdfcomp_OBJECTS) $(hdfcomp_DEPENDENCIES) $(EXTRA_hdfcomp_DEPENDENCIES) @rm -f hdfcomp$(EXEEXT) $(AM_V_CCLD)$(hdfcomp_LINK) $(hdfcomp_OBJECTS) $(hdfcomp_LDADD) $(LIBS) hdfed$(EXEEXT): $(hdfed_OBJECTS) $(hdfed_DEPENDENCIES) $(EXTRA_hdfed_DEPENDENCIES) @rm -f hdfed$(EXEEXT) $(AM_V_CCLD)$(hdfed_LINK) $(hdfed_OBJECTS) $(hdfed_LDADD) $(LIBS) hdfls$(EXEEXT): $(hdfls_OBJECTS) $(hdfls_DEPENDENCIES) $(EXTRA_hdfls_DEPENDENCIES) @rm -f hdfls$(EXEEXT) $(AM_V_CCLD)$(hdfls_LINK) $(hdfls_OBJECTS) $(hdfls_LDADD) $(LIBS) hdfpack$(EXEEXT): $(hdfpack_OBJECTS) $(hdfpack_DEPENDENCIES) $(EXTRA_hdfpack_DEPENDENCIES) @rm -f hdfpack$(EXEEXT) $(AM_V_CCLD)$(hdfpack_LINK) $(hdfpack_OBJECTS) $(hdfpack_LDADD) $(LIBS) hdftopal$(EXEEXT): $(hdftopal_OBJECTS) $(hdftopal_DEPENDENCIES) $(EXTRA_hdftopal_DEPENDENCIES) @rm -f hdftopal$(EXEEXT) $(AM_V_CCLD)$(hdftopal_LINK) $(hdftopal_OBJECTS) $(hdftopal_LDADD) $(LIBS) hdftor8$(EXEEXT): $(hdftor8_OBJECTS) $(hdftor8_DEPENDENCIES) $(EXTRA_hdftor8_DEPENDENCIES) @rm -f hdftor8$(EXEEXT) $(AM_V_CCLD)$(hdftor8_LINK) $(hdftor8_OBJECTS) $(hdftor8_LDADD) $(LIBS) hdfunpac$(EXEEXT): $(hdfunpac_OBJECTS) $(hdfunpac_DEPENDENCIES) $(EXTRA_hdfunpac_DEPENDENCIES) @rm -f hdfunpac$(EXEEXT) $(AM_V_CCLD)$(hdfunpac_LINK) $(hdfunpac_OBJECTS) $(hdfunpac_LDADD) $(LIBS) jpeg2hdf$(EXEEXT): $(jpeg2hdf_OBJECTS) $(jpeg2hdf_DEPENDENCIES) $(EXTRA_jpeg2hdf_DEPENDENCIES) @rm -f jpeg2hdf$(EXEEXT) $(AM_V_CCLD)$(jpeg2hdf_LINK) $(jpeg2hdf_OBJECTS) $(jpeg2hdf_LDADD) $(LIBS) paltohdf$(EXEEXT): $(paltohdf_OBJECTS) $(paltohdf_DEPENDENCIES) $(EXTRA_paltohdf_DEPENDENCIES) @rm -f paltohdf$(EXEEXT) $(AM_V_CCLD)$(paltohdf_LINK) $(paltohdf_OBJECTS) $(paltohdf_LDADD) $(LIBS) r8tohdf$(EXEEXT): $(r8tohdf_OBJECTS) $(r8tohdf_DEPENDENCIES) $(EXTRA_r8tohdf_DEPENDENCIES) @rm -f r8tohdf$(EXEEXT) $(AM_V_CCLD)$(r8tohdf_LINK) $(r8tohdf_OBJECTS) $(r8tohdf_LDADD) $(LIBS) ristosds$(EXEEXT): $(ristosds_OBJECTS) $(ristosds_DEPENDENCIES) $(EXTRA_ristosds_DEPENDENCIES) @rm -f ristosds$(EXEEXT) $(AM_V_CCLD)$(ristosds_LINK) $(ristosds_OBJECTS) $(ristosds_LDADD) $(LIBS) vmake$(EXEEXT): $(vmake_OBJECTS) $(vmake_DEPENDENCIES) $(EXTRA_vmake_DEPENDENCIES) @rm -f vmake$(EXEEXT) $(AM_V_CCLD)$(vmake_LINK) $(vmake_OBJECTS) $(vmake_LDADD) $(LIBS) vshow$(EXEEXT): $(vshow_OBJECTS) $(vshow_DEPENDENCIES) $(EXTRA_vshow_DEPENDENCIES) @rm -f vshow$(EXEEXT) $(AM_V_CCLD)$(vshow_LINK) $(vshow_OBJECTS) $(vshow_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompress.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif2hdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif2mem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdf24to8.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdf2gif.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdf2jpeg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdf8to24.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfcomp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfgifwr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfpack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdftopal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdftor8.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfunpac.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/he_cntrl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/he_disp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/he_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/he_main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg2hdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paltohdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r8tohdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ristosds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmake.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vshow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writehdf.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/decompress.Po -rm -f ./$(DEPDIR)/gif2hdf.Po -rm -f ./$(DEPDIR)/gif2mem.Po -rm -f ./$(DEPDIR)/gifread.Po -rm -f ./$(DEPDIR)/hdf24to8.Po -rm -f ./$(DEPDIR)/hdf2gif.Po -rm -f ./$(DEPDIR)/hdf2jpeg.Po -rm -f ./$(DEPDIR)/hdf8to24.Po -rm -f ./$(DEPDIR)/hdfcomp.Po -rm -f ./$(DEPDIR)/hdfgifwr.Po -rm -f ./$(DEPDIR)/hdfls.Po -rm -f ./$(DEPDIR)/hdfpack.Po -rm -f ./$(DEPDIR)/hdftopal.Po -rm -f ./$(DEPDIR)/hdftor8.Po -rm -f ./$(DEPDIR)/hdfunpac.Po -rm -f ./$(DEPDIR)/he_cntrl.Po -rm -f ./$(DEPDIR)/he_disp.Po -rm -f ./$(DEPDIR)/he_file.Po -rm -f ./$(DEPDIR)/he_main.Po -rm -f ./$(DEPDIR)/jpeg2hdf.Po -rm -f ./$(DEPDIR)/paltohdf.Po -rm -f ./$(DEPDIR)/r8tohdf.Po -rm -f ./$(DEPDIR)/ristosds.Po -rm -f ./$(DEPDIR)/vmake.Po -rm -f ./$(DEPDIR)/vshow.Po -rm -f ./$(DEPDIR)/writehdf.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local 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-binPROGRAMS install-binSCRIPTS 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 ./$(DEPDIR)/decompress.Po -rm -f ./$(DEPDIR)/gif2hdf.Po -rm -f ./$(DEPDIR)/gif2mem.Po -rm -f ./$(DEPDIR)/gifread.Po -rm -f ./$(DEPDIR)/hdf24to8.Po -rm -f ./$(DEPDIR)/hdf2gif.Po -rm -f ./$(DEPDIR)/hdf2jpeg.Po -rm -f ./$(DEPDIR)/hdf8to24.Po -rm -f ./$(DEPDIR)/hdfcomp.Po -rm -f ./$(DEPDIR)/hdfgifwr.Po -rm -f ./$(DEPDIR)/hdfls.Po -rm -f ./$(DEPDIR)/hdfpack.Po -rm -f ./$(DEPDIR)/hdftopal.Po -rm -f ./$(DEPDIR)/hdftor8.Po -rm -f ./$(DEPDIR)/hdfunpac.Po -rm -f ./$(DEPDIR)/he_cntrl.Po -rm -f ./$(DEPDIR)/he_disp.Po -rm -f ./$(DEPDIR)/he_file.Po -rm -f ./$(DEPDIR)/he_main.Po -rm -f ./$(DEPDIR)/jpeg2hdf.Po -rm -f ./$(DEPDIR)/paltohdf.Po -rm -f ./$(DEPDIR)/r8tohdf.Po -rm -f ./$(DEPDIR)/ristosds.Po -rm -f ./$(DEPDIR)/vmake.Po -rm -f ./$(DEPDIR)/vshow.Po -rm -f ./$(DEPDIR)/writehdf.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-binSCRIPTS .PRECIOUS: Makefile # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf gif_hdf_temp # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/hdf/util/README000066400000000000000000000024771503061704500154370ustar00rootroot00000000000000In this directory there are hdf utility programs, makefiles, and a subdirectory, testfiles/, which contains all the data files needed to test the utilities. The utilities are: . hdf24to8 -- converts 24-bit raster images to hdf 8-bit images . hdfcomp -- re-compresses an 8-bit raster hdf file . hdfls -- lists basic information about an hdf file . hdfpack -- compacts an hdf file . hdftopal -- extracts a palette from an hdf file . hdftor8 -- extracts 8-bit raster images and palettes from an hdf file . hdfed -- hdf file editor . hdfunpac - unpacks an HDF file by exporting the scientific data elements (DFTAG_SD) to external object elements. This is a utility for external file handling for the parallel I/O interface on the CM5. . paltohdf -- converts a raw palette to hdf . r8tohdf -- converts 8-bit raster images to hdf . ristosds -- converts a series of raster image hdf files into a single 3D sds hdf file. . vmake -- creates vsets . vshow -- dumps out vsets in an hdf file . jpeg2hdf -- converts jpeg images to hdf raster images . hdf2jpeg -- converts hdf raster images to jpeg images . fp2hdf -- converts 2D and 3D floating point data sets into HDF SDS. hdf4-hdf4.3.1/hdf/util/README.TST000066400000000000000000000330351503061704500161020ustar00rootroot00000000000000All the input data files needed to test the utilities are in the subdirectory testfiles/. Instructions on testing the HDF utility programs: hdf24to8 -- converts 24-bit raster images to hdf 8-bit images Copy head.r24.Z from the testfiles/ directory to the util/ directory. Type: uncompress head.r24.Z Execute the following in the util/ directory: cp testfiles/head.r24.Z . uncompress head.r24.Z ./hdf24to8 head.r24 head8.hdf View head8.hdf using any visualization tool available (mosaic, collage, etc). Delete head.r24 and head8.hdf when you are done. rm head.r24 head8.hdf hdfed -- hdf file editor Copy the file storm110.hdf from the testfiles/ directory to the util/ directory. Execute the following in the util/ directory: cp testfiles/storm110.hdf . ./hdfed storm110.hdf Running interactively, type the following commands: info -all prev tag = 300 info -long dump -short The latter two commands should result in the following responses: (6) Image Dimensions : (Tag 300) Ref: 110, Offset: 3459, Length: 20 (bytes) 0: 0 57 0 57 106 110 12: 1 0 0 0 Type help and experiment. Most of the information can be verified with hdfls. Be sure to type 'close' then 'quit' when you are finished and delete storm110.hdf when you are done. rm storm110.hdf Copy ntcheck.hdf from the testfiles/ directory to the util/ directory. Execute the following in the util/ directory: cp testfiles/ntcheck.hdf . ./hdfed ntcheck.hdf ntcheck.hdf will be used as an input file to test the dump function. The command: dump -help displays the list of formats supported by hdfed. Commands: prev tag= ref= and next tag= ref= move you back and forth among the objects. info -all gives the tag and reference numbers for each object. Look at the data in various objects and verify the data type. For example: next tag = 702 ref = 2 You will be past this data object and will receive the message "Reached end of file. Not moved." Repeat the command using prev instead of next. dump -float The first 5 lines of output should read as follows: 0: 0.000000e+00 1.000000e+00 2.000000e+00 3.000000e+00 16: 4.000000e+00 5.000000e+00 6.000000e+00 7.000000e+00 32: 8.000000e+00 9.000000e+00 4.000000e+01 4.100000e+01 48: 4.200000e+01 4.300000e+01 4.400000e+01 4.500000e+01 64: 4.600000e+01 4.700000e+01 4.800000e+01 4.900000e+01 next tag = 702 ref = 6 dump -short The first 5 lines of output should read as follows: 0: 0 1 2 3 4 5 12: 6 7 8 9 6000 6001 24: 6002 6003 6004 6005 6006 6007 36: 6008 6009 12000 12001 12002 12003 48: 12004 12005 12006 12007 12008 12009 The following is a cross reference of ref number and data type if you want to experiment: ref number type 2 DFNT_FLOAT32 3 DFNT_INT8 4 DFNT_UINT8 5 DFNT_INT16 6 DFNT_UINT16 7 DFNT_INT32 8 DFNT_UINT32 Type 'close' and 'quit' when you are finished. Delete ntcheck.hdf. rm ntcheck.hdf ristosds -- converts a series raster image hdf files into a single 3D sds hdf file. Copy the three HDF files storm110.hdf, storm120.hdf, and storm130.hdf from the testfiles/ directory. Execute the following in the util/ directory: cp testfiles/storm110.hdf testfiles/storm120.hdf testfiles/storm130.hdf . ./ristosds storm*.hdf -o storm.hdf Compare storm110.hdf with storm.hdf using the following commands: hdfed storm.hdf prev tag = 702 info -long (*) dump -length 20 -byte close open storm110.hdf prev tag = 302 info -long (**) dump -length 20 -byte close quit * In storm.hdf tag 702's element should be 9747 bytes. ** In storm110.hdf tag 302's element should be 1/3 of 9747, which is 3249. (It is a 57x57 image.) Compare the first few numbers in storm110's image with the first few numbers in storm.hdf's SDS. They should be the same. Remove storm*.hdf from the util/ directory before continuing. rm storm*.hdf hdfpack -- compacts an hdf file Copy the file test.hdf from the testfiles/ directory. Execute the following in the util/ directory: cp testfiles/test.hdf . ./hdfpack test.hdf test.pck ./hdfpack -b test.hdf test.blk Use hdfls to get a listing of test.hdf and test.pck. The only difference between the 2 listings should be that test.pck shouldn't have any special elements and it also shouldn't have any "Linked Block Indicators." ./hdfls test.hdf ./hdfls test.pck The file sizes should be as follows: test.hdf - 11795 test.pck - 6747 test.blk - 7599 Depending on the platform, the file sizes may be one byte off for test.pck and test.blk. Remove test.cdf, test.blk, and test.pck. rm test.hdf test.blk test.pck hdftopal/paltohdf -- converts between a raw palette and an hdf Copy the file palette.raw from the testfiles/ directory. Execute the following in the util/ directory: cp testfiles/palette.raw . ./paltohdf palette.raw palette.hdf ./hdftopal palette.hdf palette.raw.new Use hdfls with the '-l' option to examine palette.hdf. It should have an 'Image Palette-8' and an 'Image Palette,' both with length 768 bytes. They should also have the same reference number. Use the Unix utility 'cmp' or something similar to do a byte-for-byte comparison of palette.raw and palette.raw.new. They should be identical. cmp palette.raw palette.raw.new Remove palette.*. rm palette.* r8tohdf/hdftor8 -- converts between 8-bit raster images and hdf files Copy the files storm*.raw and palette.raw from the testfiles/ directory. Execute the following in the util/ directory: cp testfiles/storm*.raw . ./r8tohdf 57 57 storm.hdf storm*.raw ./r8tohdf 57 57 storm.hdf -p palette.raw -i storm110.raw ./hdftor8 storm.hdf Use hdfls with the '-l' option to examine storm.hdf. It should contain five raster image sets, one of which will be compressed under IMCOMP compression. (If you do not put the '-p' in the second r8tohdf command above, you should get an error message.) The non-compressed raster images should be the same length as the raw raster files. The compressed will be about 25% of that size. Use the Unix utility 'cmp' or something similar to do byte-for-byte comparisons on the raw raster files produced by hdftor8: cmp img001-057.057 storm110.raw cmp img002-057.057 storm120.raw cmp img003-057.057 storm130.raw cmp img004-057.057 storm140.raw There should be one more img* file than you had at the start. One of the img files may not compare exactly with any one of the raw rasters, and the rest will compare with one of the other raw rasters. There is no guarantee about the order of the produced raw rasters, but it is likely they will be produced in the order in which they went into the file, which would be increasing numerical order, with the compressed image last. Remove storm* and img* when you are done. rm storm* img* hdfcomp -- re-compress 8-bit raster hdf file Copy the files storm*.hdf from the testfiles/ directory. Execute: cp testfiles/storm*.hdf . ./hdfcomp allstorms.hdf storm*.hdf ./hdfcomp allcomp.hdf -c storm*.hdf Use hdfls with the '-l' option to examine the two HDF files. The first, allstorms.hdf, should simply hold the raster together in one file, with no compression. You can use hdfls to check the original files. The second file, allcomp.hdf, should hold all the rasters in a compress format. Run-Length Encoding (RLE) compression will result in modest savings - about 10% to 15% for these files. Remove allstorms.hdf and allcomp.hdf. rm storm*.hdf all*.hdf jpeg2hdf/hdf2jpeg Copy the file jpeg_img.jpg from the testfiles/ directory. Execute: cp testfiles/jpeg_img.jpg . ./jpeg2hdf jpeg_img.jpg jpeg.hdf ./hdf2jpeg jpeg.hdf jpeg2.jpg Use hdfls with the '-l' option to examine the HDF file. It should contain one raster image set, which will be compressed with JPEG compression. The JPEG compressed image will be 2922 bytes in size. Use the Unix utility 'cmp' or something similar to do byte-for-byte comparisons on the produced raw raster files by hdf2jpeg. The initial jpeg_img.jpg file should be an exact match for the new jpeg2.jpg file. cmp jpeg_img.jpg jpeg2.jpg Remove jpeg.hdf, jpeg_img.jpg, and jpeg2.jpg. rm jpeg.hdf jpeg_img.jpg jpeg2.jpg fp2hdf -- converts floating point 2D/3D datasets into hdf SDS or RIS. To test this utility you must first create the ASCII and binary test files with the fptest program. Then run fp2hdf on the test files that get created, and analyze the output. Following are the steps to do this: 1. Run fptest to create 2D/3D ASCII/binary test files: ./fptest FILE TYPE DIMENSIONS ---- ---- ---------- ctxtr2 TEXT 3x4 ctxtr3 TEXT 5x3x4 cb32r2 FP32 3x4 cb32r3 FP32 5x3x4 cb64r2 FP64 3x4 cb64r3 FP64 5x3x4 Following are the values of the dimension scales and arrays that get created: row scale values start at 11 and increment by 1 => 11, 12, 13 column scale values start at 21 and increment by 2 => 21, 23, 25, 27 plane scale values start at 51 and increment by 5 => 51, 56, 61, 66, 71 data element value = row scale value + column scale value [+ plane scale value, if rank=3] For an array of [3][4], data values are: 3.200000E+01 3.400000E+01 3.600000E+01 3.800000E+01 3.300000E+01 3.500000E+01 3.700000E+01 3.900000E+01 3.400000E+01 3.600000E+01 3.800000E+01 4.000000E+01 For array of [5][3][4], data values are: 8.300000E+01 8.500000E+01 8.700000E+01 8.900000E+01 8.400000E+01 8.600000E+01 8.800000E+01 9.000000E+01 8.500000E+01 8.700000E+01 8.900000E+01 9.100000E+01 8.800000E+01 9.000000E+01 9.200000E+01 9.400000E+01 8.900000E+01 9.100000E+01 9.300000E+01 9.500000E+01 9.000000E+01 9.200000E+01 9.400000E+01 9.600000E+01 9.300000E+01 9.500000E+01 9.700000E+01 9.900000E+01 9.400000E+01 9.600000E+01 9.800000E+01 1.000000E+02 9.500000E+01 9.700000E+01 9.900000E+01 1.010000E+02 9.800000E+01 1.000000E+02 1.020000E+02 1.040000E+02 9.900000E+01 1.010000E+02 1.030000E+02 1.050000E+02 1.000000E+02 1.020000E+02 1.040000E+02 1.060000E+02 1.030000E+02 1.050000E+02 1.070000E+02 1.090000E+02 1.040000E+02 1.060000E+02 1.080000E+02 1.100000E+02 1.050000E+02 1.070000E+02 1.090000E+02 1.110000E+02 2. Run fp2hdf on the test files that were created: ./fp2hdf ctxtr2 -o ctxtr2.hdf ./fp2hdf ctxtr3 -o ctxtr3.hdf ./fp2hdf cb32r2 -o cb32r2.hdf ./fp2hdf cb32r3 -o cb32r3.hdf ./fp2hdf cb64r2 -o cb64r2.hdf ./fp2hdf cb64r3 -o cb64r3.hdf ./fp2hdf ctxtr2 -o ctxtr2_ris.hdf -raster -e 50 50 ./fp2hdf cb64r2 -o cb64r2_ris.hdf -raster -i 50 50 -f 3. Use hdfls and hdfed to verify the correctness of the output *.hdf files. The rank, dimension size, number type, dimension scale and data values should agree with those listed in item 1 above. You can also use the hdp command. To use hdp from the util/ directory, type: For an SDS: ../../mfhdf/dumper/hdp dumpsds For a raster image: ../../mfhdf/dumper/hdp dumprig Collage can also be used to display the *.hdf files. Display the spreadsheet and compare the values to those in Item 1. For the Raster Images, display the image; the values are interpolated, and will not match the values as show in Item 1. ctxtr2.hdf -- 2D SDS, display spreadsheet ctxtr3.hdf -- 3D SDS, display spreadsheet along z axis. cb32r2.hdf -- 2D SDS, display spreadsheet cb32r3.hdf -- 3D SDS, display spreadsheet along z axis cb64r2.hdf -- 2D SDS, display spreadsheet cb64r3.hdf -- 3D SDS, display spreadsheet along z axis ctxtr2_ris.hdf -- RIS, display image cb64r2_ris.hdf -- 2D SDS, display spreadsheet RIS, display image 4. Remove ctxtr* and cb*. rm ctxtr* cb* *.hdf hdf4-hdf4.3.1/hdf/util/README.fp2hdf000066400000000000000000000011321503061704500165720ustar00rootroot00000000000000 This revision of fptohdf, which we are calling fp2hdf, supports native mode floating point (both single and double precision), and 3D floating point data sets. For these additions we owe our thanks to Bob Weaver and colleagues at INEL. You should be able to compile fp2hdf, as well as the two programs for generating test data, by executing "make". Note: you will need to change some of the definitions in the makefile to conform to your system. Except for Makefile, fp2hdf.c, and this README file, all of the files in this directory are for testing fp2hdf and illustrating its use. Mike Folk hdf4-hdf4.3.1/hdf/util/README.fp2hdf.test000066400000000000000000000044041503061704500175550ustar00rootroot00000000000000 There are two sets of input files for testing fp2hdf. These files are used by the script fp2hdf.test. I. The first set consists of 2-D data sets that produce images that are cross-hatched with 10 vertical and 10 horizontal lines. These files use the following naming conventions: 't' prefix means it's a text file 'h' prefix means it's an hdf file 'h' at the end means horizontal scale is not uniform 'v' at the end means vertical scale is not uniform 'n' at the end means no scales are stored in the file dimensions are given between prefix and postfix The names of the files: (which are stored in the testfiles/fp2hdf directory) t100x100 h100x100 h100x100h h100x100hv h60x75 h60x75v h60x75n II. The second set are generated by the programs ftest.c and ftest.F. They are small files with 2-D and 3-D data sets that are easily examined by eye. Those that begin with the letter 'c' are produced with the program ftest.c, and those that begin with 'f' were produced with ftest.F. ctxtr2, type 'TEXT', size 3x4 ctxtr3, type 'TEXT', size 3x4x5 cb32r2, type 'FP32', size 3x4 cb32r3, type 'FP32', size 3x4x5 cb64r2, type 'FP64', size 3x4 cb64r3, type 'FP64', size 3x4x5 ftxtr2, type 'TEXT', size 3x4 ftxtr3, type 'TEXT', size 3x4x5 fb32r2, type 'FP32', size 3x4 fb32r3, type 'FP32', size 3x4x5 fb64r2, type 'FP64', size 3x4 fb64r3, type 'FP64', size 3x4x5 Contents of the arrays: row values start at 11 and increment by 1 => 11, 12, 13 column values start at 21 and increment by 2 => 21, 23, 25, 27 plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71 data element value = row value + column value [+ plane value, if rank=3] Output files can be examined with hdfls to see if basic contents are there. Those with raster images can be displayed using NCSA Image, DataScope, etc. Those with floating point data can be examined using hdfed or DataScope. hdf4-hdf4.3.1/hdf/util/decompress.c000066400000000000000000000234271503061704500170650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "gif.h" #define NEXTBYTE (*ptr++) #define IMAGESEP 0x2c #define INTERLACEMASK 0x40 #define COLORMAPMASK 0x80 #define False 0 #define True 1 WORD iWIDE, iHIGH, eWIDE, eHIGH, expand, numcols, strip, nostrip; unsigned long cols[256]; char *cmd; FILE *fp; static int BitOffset = 0, /* Bit Offset of next code */ XC = 0, YC = 0, /* Output X and Y coords of current pixel */ Pass = 0, /* Used by output routine if WORDerlaced pic */ OutCount = 0, /* Decompressor output 'stack count' */ IWidth, IHeight, /* image dimensions */ BytesPerScanline, /* Bytes per scanline in output raster */ CodeSize, /* Code size, read from GIF header */ InitCodeSize, /* Starting code size, used during Clear */ Code, /* Value returned by ReadCode */ MaxCode, /* limiting value for current code size */ ClearCode, /* GIF clear code */ EOFCode, /* GIF end-of-information code */ CurCode, OldCode, InCode, /* Decompressor variables */ FirstFree, /* First free code, generated per GIF spec */ FreeCode, /* Decompressor, next free slot in hash table */ FinChar, /* Decompressor variable */ DataMask, /* AND mask for data size */ ReadMask; /* Code AND mask for current code size */ /*MODIFICATIONS*/ BYTE tempbyte[10]; BYTE *tempBYTEptr[10]; WORD tempint[10]; WORD ImageCount = 0; /*END MODIFICATION*/ boolean Interlace, HasColormap; BYTE *Image; /* The result array */ BYTE *RawGIF; /* The heap array to hold it, raw */ BYTE *Raster; /* The raster data stream, unblocked */ /* The hash table used by the decompressor */ int Prefix[4096]; int Suffix[4096]; /* An output array used by the decompressor */ int OutCode[1025]; /* The color map, read from the GIF header */ int numused; /* Fetch the next code from the raster data stream. The codes can be * any length from 3 to 12 bits, packed WORDo 8-bit BYTEs, so we have to * maWORDain our location in the Raster array as a BIT Offset. We compute * the BYTE Offset WORDo the raster array by dividing this by 8, pick up * three BYTEs, compute the bit Offset WORDo our 24-bit chunk, shift to * bring the desired code to the bottom, then mask it off and return it. */ int ReadCode(void) { int RawCode, ByteOffset; ByteOffset = BitOffset / 8; RawCode = Raster[ByteOffset] + (0x100 * Raster[ByteOffset + 1]); if (CodeSize >= 8) RawCode += (0x10000 * Raster[ByteOffset + 2]); RawCode >>= (BitOffset % 8); BitOffset += CodeSize; return (RawCode & ReadMask); } void AddToPixel(BYTE Index) { if (YC < IHeight) *(Image + YC * BytesPerScanline + XC) = Index; /* Update the X-coordinate, and if it overflows, update the Y-coordinate */ if (++XC == IWidth) { /* If a non-WORDerlaced picture, just increment YC to the next scan line. * If it's WORDerlaced, deal with the WORDerlace as described in the GIF * spec. Put the decoded scan line out to the screen if we haven't gone * past the bottom of it. */ XC = 0; if (!Interlace) YC++; else { switch (Pass) { case 0: YC += 8; if (YC >= IHeight) { Pass++; YC = 4; } break; case 1: YC += 8; if (YC >= IHeight) { Pass++; YC = 2; } break; case 2: YC += 4; if (YC >= IHeight) { Pass++; YC = 1; } break; case 3: YC += 2; break; default: break; } } } } /* Main routine. Convert a GIF image to an HDF image */ BYTE * Decompress(GIFIMAGEDESC *GifImageDesc, GIFHEAD *GifHead) { int i; XC = 0; YC = 0; Pass = 0; OutCount = 0; BitOffset = 0; DataMask = (WORD)((1L << ((GifHead->PackedField & 0x07) + 1)) - 1); Raster = GifImageDesc->GIFImage; /* Check for image separator */ /* Now read in values from the image descriptor */ IWidth = GifImageDesc->ImageWidth; IHeight = GifImageDesc->ImageHeight; Interlace = GifImageDesc->PackedField & 0x20; /* Note that I ignore the possible existence of a local color map. * I'm told there aren't many files around that use them, and the spec * says it's defined for future use. This could lead to an error * reading some files. */ /* Start reading the raster data. First we get the WORDial code size * and compute decompressor constant values, based on this code size. */ CodeSize = GifImageDesc->CodeSize; ClearCode = (1 << CodeSize); EOFCode = ClearCode + 1; FreeCode = FirstFree = ClearCode + 2; /* The GIF spec has it that the code size is the code size used to * compute the above values is the code size given in the file, but the * code size used in compression/decompression is the code size given in * the file plus one. (thus the ++). */ CodeSize++; InitCodeSize = CodeSize; MaxCode = (1 << CodeSize); ReadMask = MaxCode - 1; /* Read the raster data. Here we just transpose it from the GIF array * to the Raster array, turning it from a series of blocks WORDo one long * data stream, which makes life much easier for ReadCode(). */ /* free(RawGIF); We're not done just yet - change made */ /* Allocate the Image */ if (!(Image = (BYTE *)malloc(IWidth * IHeight))) { printf("Out of memory"); exit(-1); } BytesPerScanline = IWidth; /* Decompress the file, continuing until you see the GIF EOF code. * One obvious enhancement is to add checking for corrupt files here. */ Code = ReadCode(); while (Code != EOFCode) { /* Clear code sets everything back to its initial value, then reads the * immediately subsequent code as uncompressed data. */ if (Code == ClearCode) { CodeSize = InitCodeSize; MaxCode = (1 << CodeSize); ReadMask = MaxCode - 1; FreeCode = FirstFree; CurCode = OldCode = Code = ReadCode(); FinChar = CurCode & DataMask; AddToPixel(FinChar); } else { /* If not a clear code, then must be data: save same as CurCode and InCode */ CurCode = InCode = Code; /* If greater or equal to FreeCode, not in the hash table yet; * repeat the last character decoded */ if (CurCode >= FreeCode) { CurCode = OldCode; OutCode[OutCount++] = FinChar; } /* Unless this code is raw data, pursue the chain poWORDed to by CurCode * through the hash table to its end; each code in the chain puts its * associated output code on the output queue. */ while (CurCode > DataMask) { if (OutCount > 1024) { /*return error message*/ } OutCode[OutCount++] = Suffix[CurCode]; CurCode = Prefix[CurCode]; } /* The last code in the chain is treated as raw data. */ FinChar = CurCode & DataMask; OutCode[OutCount++] = FinChar; /* Now we put the data out to the Output routine. * It's been stacked LIFO, so deal with it that way... */ for (i = OutCount - 1; i >= 0; i--) AddToPixel(OutCode[i]); OutCount = 0; /* Build the hash table on-the-fly. No table is stored in the file. */ Prefix[FreeCode] = OldCode; Suffix[FreeCode] = FinChar; OldCode = InCode; /* PoWORD to the next slot in the table. If we exceed the current * MaxCode value, increment the code size unless it's already 12. If it * is, do nothing: the next code decompressed better be CLEAR */ FreeCode++; if (FreeCode >= MaxCode) { if (CodeSize < 12) { CodeSize++; MaxCode *= 2; ReadMask = (1 << CodeSize) - 1; } } } Code = ReadCode(); } return Image; } hdf4-hdf4.3.1/hdf/util/fp2hdf.c000066400000000000000000001711211503061704500160650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Name: * fp2hdf * * Purpose: * To convert floating point data to HDF Scientific Data Set (SDS) * and/or 8-bit Raster Image Set (RIS8) format, storing the results * in an HDF file. The image data can be scaled about the mean value. * * ----------- * floating point data | | ----------> RIS8 * (SDS, ASCII text, or ---> | fp2hdf | and/or * native floating point) | | ----------> SDS * ----------- * * Synopsis: * fp2hdf -h[elp], OR * fp2hdf [...] -o[utfile] * [-r[aster] [ras_opts ...]] [-f[loat]] * * -h[elp]: * Print a helpful summary of usage, and exit. * * : * Input file(s), containing a single two-dimensional or * three-dimensional floating point array in either ASCII * text, native floating point, or HDF SDS format. If an * HDF file is used for input, it must contain an SDS. * The SDS need only contain a dimension record and the * data, but if it also contains maximum and minimum values * and/or scales for each axis, these will be used. If the * input format is ASCII text or native floating point, see * "Notes" below on how it must be organized. * * -o[utfile] : * Data from one or more input files are stored as one or * more data sets and/or images in one HDF output file, * "outfile". * * -r[aster]: * Store output as a raster image set in the output file. * * -f[loat]: * Store output as a scientific data set in the output file. * This is the default if the "-r" option is not specified. * * ras_opts ... * * -e[xpand] []: * Expand float data via pixel replication to produce the * image(s). "horiz" and "vert" give the horizontal and * vertical resolution of the image(s) to be produced; and * optionally, "depth" gives the number of images or depth * planes (for 3D input data). * * -i[nterp] []: * Apply bilinear, or trilinear, interpolation to the float * data to produce the image(s). "horiz", "vert", and "depth" * must be greater than or equal to the dimensions of the * original dataset. * If max and min are supplied in input file, this option clips * values that are greater than max or less then min, setting * them to the max and min, respectively. * * -p[alfile] : * Store the palette with the image. Get the palette from * "palfile"; which may be an HDF file containing a palette, * or a file containing a raw palette. * * -m[ean] : * If a floating point mean value is given, the image will be * scaled about the mean. The new extremes (newmax and newmin), * as given by: * * newmax = mean + max(abs(max-mean), abs(mean-min)) * newmin = mean - max(abs(max-mean), abs(mean-min)) * * will be equidistant from the mean value. If no mean value * is given, then the mean will be: 0.5 * (max + min) * * Notes: * If the input file format is ASCII text or native floating point, it * must have the following input fields: * * format * nplanes * nrows * ncols * max_value * min_value * [plane1 plane2 plane3 ...] * row1 row2 row3 ... * col1 col2 col3 ... * data1 data2 data3 ... * ... * * Where: * format: * Format designator ("TEXT", "FP32" or "FP64"). * nplanes: * Dimension of the depth axis ("1" for 2D input). * nrows: * Dimension of the vertical axis. * ncols: * Dimension of the horizontal axis. * max_value: * Maximum data value. * min_value: * Minimum data value. * plane1, plane2, plane3, ...: * Scales for depth axis. * row1, row2, row3, ...: * Scales for the vertical axis. * col1, col2, col3, ...: * Scales for the horizontal axis. * data1, data2, data3, ...: * The data ordered by rows, left to right and top * to bottom; then optionally, ordered by planes, * front to back. * * For FP32 and FP64 input format, "format", "nplanes", "nrows", "ncols", * and "nplanes" are native integers; where "format" is the integer * representation of the appropriate 4-character string (0x46503332 for * "FP32" and 0x46503634 for "FP64"). The remaining input fields are * composed of native 32-bit floating point values for FP32 input format, * or native 64-bit floating point values for FP64 input format. * * Source Availability: * This program is in the public domain, and was developed and made * available by the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign (ftp.ncsa.uiuc.edu). * */ #include #include #include #include #include #include "hdf.h" #ifdef H4_HAVE_SYS_STAT_H #include #endif #ifdef H4_HAVE_FCNTL_H #include #endif /* * global macros */ #define EXPAND 1 /* -e: expand image with pixel replication */ #define INTERP 2 /* -i: expand image with interpolation */ /* * structure definition for command line options */ struct Options { char **infiles; /* pointer to list of input file names */ char outfile[32]; /* output file name */ char palfile[32]; /* palette file name, if any */ int fcount; /* number of input files */ int to_float; /* float output is desired */ int to_image; /* image output is desired */ int pal; /* output palette with image */ int ctm; /* color transform method: EXPAND or INTERP */ int exh; /* horizontal expansion factor */ int exv; /* vertical expansion factor */ int exd; /* depth expansion factor */ int hres; /* horizontal resolution of output image */ int vres; /* vertical resolution of output image */ int dres; /* depth resolution of output image */ int mean; /* scale image around a mean */ float32 meanval; /* mean value to scale the image around */ }; /* * structure definition for the input data */ struct Input { int is_hdf; /* HDF file format flag */ int is_text; /* ASCII text format flag */ int is_fp32; /* 32-bit native floating point format flag */ int is_fp64; /* 64-bit native floating point format flag */ int rank; /* number of input data dimensions */ int dims[3]; /* input dimensions - ncols, nrows, nplanes */ int is_vscale; /* vertical axis scales in the input */ int is_hscale; /* horizontal axis scales in the input */ int is_dscale; /* depth axis scales in the input */ float32 max; /* maximum value of the data */ float32 min; /* minimum value of the data */ float32 *hscale; /* horizontal scales */ float32 *vscale; /* vertical scales */ float32 *dscale; /* depth scales */ void *data; /* input data */ }; /* * structure definition for the output raster images */ struct Raster { int hres; /* horizontal resolution of the image */ int vres; /* vertical resolution of the image */ int dres; /* depth resolution of the image */ unsigned char *image; }; /* * state table tokens */ #define FILENAME 0 /* filename */ #define OPT_o 1 /* output filename */ #define OPT_r 2 /* convert to image */ #define OPT_e 3 /* expand image via pixel replication */ #define OPT_i 4 /* make interpolated image */ #define OPT_num 5 /* resolution of enlarged image */ #define OPT_p 6 /* palette filename */ #define OPT_f 7 /* convert to float (default) */ #define OPT_h 8 /* request for explanation */ #define OPT_m 9 /* mean to scale around */ #define ERR 20 /* invalid token */ /* * state table for parsing the command line. */ static int state_table[17][10] = { /* token ordering: FILENAME OPT_o OPT_r OPT_e OPT_i OPT_num OPT_p OPT_f OPT_h OPT_m */ /* state 0: start */ {1, ERR, ERR, ERR, ERR, ERR, ERR, ERR, 14, ERR}, /* state 1: input files */ {1, 2, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 2: -o[utfile] */ {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 3: outfile */ {ERR, ERR, 4, ERR, ERR, ERR, ERR, 13, ERR, ERR}, /* state 4: -r[aster] */ {ERR, ERR, ERR, 5, 9, ERR, 10, 12, ERR, 15}, /* state 5: -e[xpand] */ {ERR, ERR, ERR, ERR, ERR, 6, ERR, ERR, ERR, ERR}, /* state 6: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, 7, ERR, ERR, ERR, ERR}, /* state 7: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, 8, 10, 12, ERR, 15}, /* state 8: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, ERR, 10, 12, ERR, 15}, /* state 9: -i[nterp] */ {ERR, ERR, ERR, ERR, ERR, 6, ERR, ERR, ERR, ERR}, /* state 10: -p[alfile] */ {11, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 11: palfile */ {ERR, ERR, ERR, 5, 9, ERR, ERR, 12, ERR, 15}, /* state 12: -f[loat] (after -r[aster]) */ {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 13: -f[loat] */ {ERR, ERR, 4, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 14: -h[elp] */ {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 15: -m[ean] */ {ERR, ERR, ERR, ERR, ERR, 16, ERR, ERR, ERR, ERR}, /* state 16: mean */ {ERR, ERR, ERR, 5, 9, ERR, 10, 12, ERR, ERR}}; /* static local functions */ static int gtoken(char *s); static int process(struct Options *opt); static int gfloat(char *infile, FILE *strm, float32 *fp32, struct Input *in); static int gint(char *infile, FILE *strm, int *ival, struct Input *in); static int isnum(char *s); static int gdata(char *infile, struct Input *in, FILE *strm, int *is_maxmin); static int gdimen(char *infile, struct Input *inp, FILE *strm); static int gmaxmin(char *infile, struct Input *in, FILE *strm, int *is_maxmin); static int gscale(char *infile, struct Input *in, FILE *strm, int *is_scale); static int gtype(char *infile, struct Input *in, FILE **strm); static int indexes(float32 *scale, int dim, int *idx, int res); static int interp(struct Input *in, struct Raster *im); static int palette(char *palfile); static int pixrep(struct Input *in, struct Raster *im); /* * functions with non-integer return types */ void help(char *); void mean(struct Input *, struct Options *); void usage(char *); /* * Name: * main * * Purpose: * The driver for "fp2hdf". */ int main(int argc, char *argv[]) { struct Options opt; int i; int outfile_named = FALSE; int token; int state = 0; const char *err1 = "Invalid number of arguments: %d.\n"; const char *err2 = "Error in state table.\n"; const char *err3 = "No output file given.\n"; const char *err4 = "Program aborted.\n"; #if defined H4_HAVE_WIN32_API _fmode = _O_BINARY; #endif /* * set 'stdout' and 'stderr' to line-buffering mode */ (void)setvbuf(stderr, (char *)NULL, _IOLBF, 0); (void)setvbuf(stdout, (char *)NULL, _IOLBF, 0); /* * validate the number of command line arguments */ if (argc < 2) { fprintf(stderr, err1, argc); usage(argv[0]); goto err; } opt.to_image = FALSE; /* default: no image */ opt.to_float = FALSE; /* default: make float if no image */ /* Set FALSE here. Will be set TRUE */ /* after confirming image option is not set. */ opt.ctm = EXPAND; /* default: pixel replication */ opt.hres = 0; /* default: no expansion values */ opt.vres = 0; opt.dres = 0; opt.pal = FALSE; /* default: no palette */ opt.mean = FALSE; /* default: no mean given */ opt.fcount = 0; /* to count number of input files */ /* * parse the command line */ for (i = 1; i < argc; i++) { if ((token = gtoken(argv[i])) == ERR) { usage(argv[0]); goto err; } state = state_table[state][token]; switch (state) { case 1: /* counting input files */ opt.fcount++; break; case 2: /* -o found; look for outfile */ break; case 3: /* get outfile name */ (void)strcpy(opt.outfile, argv[i]); outfile_named = TRUE; break; case 4: /* -r found */ opt.to_image = TRUE; break; case 5: /* -e found */ opt.ctm = EXPAND; break; case 6: /* horizontal resolution */ opt.hres = atoi(argv[i]); break; case 7: /* vertical resolution */ opt.vres = atoi(argv[i]); break; case 8: /* depth resolution */ opt.dres = atoi(argv[i]); break; case 9: /* -i found */ opt.ctm = INTERP; break; case 10: /* -p found */ opt.pal = TRUE; break; case 11: /* get pal filename */ (void)strcpy(opt.palfile, argv[i]); break; case 12: /* -f found (after a -r) */ case 13: /* -f found (no -r yet) */ opt.to_float = TRUE; break; case 14: /* -h found; help, then exit */ help(argv[0]); exit(0); case 15: /* -m found */ opt.mean = TRUE; break; case 16: /* mean value */ opt.meanval = (float32)atof(argv[i]); break; case ERR: /* command syntax error */ default: fprintf(stderr, "%s", err2); usage(argv[0]); goto err; } } /* * make sure an output file was specified */ if (!outfile_named) { fprintf(stderr, "%s", err3); usage(argv[0]); goto err; } if (!opt.to_image) opt.to_float = TRUE; opt.infiles = argv + 1; /* * process the input files */ if (process(&opt)) goto err; return (0); err: fprintf(stderr, "%s", err4); return (1); } /* * Name: * gdata * * Purpose: * Get the input data. */ static int gdata(char *infile, struct Input *in, FILE *strm, int *is_maxmin) { int32 i, j, k; float32 *fp32; int32 hdfdims[3]; /* order: ZYX or YX */ int32 len = in->dims[0] * in->dims[1] * in->dims[2]; const char *err1 = "Unable to get input data from file: %s.\n"; /* * extract the input data from the input file */ if (in->is_hdf == TRUE) { /* * hdfdims is ordered: ZYX or YX * in->dims is ordered: XYZ */ if (in->rank == 2) { hdfdims[0] = in->dims[1]; hdfdims[1] = in->dims[0]; } else { hdfdims[0] = in->dims[2]; hdfdims[1] = in->dims[1]; hdfdims[2] = in->dims[0]; } if (DFSDgetdata(infile, in->rank, hdfdims, in->data)) { fprintf(stderr, err1, infile); goto err; } } else { for (k = 0, fp32 = (float32 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, fp32++) { if (gfloat(infile, strm, fp32, in)) { fprintf(stderr, err1, infile); goto err; } } } } (void)fclose(strm); } /* * derive the max/min values, if needed */ if (*is_maxmin == FALSE) { in->min = in->max = *(float32 *)in->data; for (i = 1; i < len; i++) { if (((float32 *)in->data)[i] > in->max) in->max = ((float32 *)in->data)[i]; if (((float32 *)in->data)[i] < in->min) in->min = ((float32 *)in->data)[i]; } *is_maxmin = TRUE; } return (0); err: return (1); } /* * Name: * gdimen * * Purpose: * Determine the input data dimensions. */ static int gdimen(char *infile, struct Input *inp, FILE *strm) { int32 hdfdims[3]; /* order: ZYX or YX */ int32 nt; /* number type of input file */ const char *err1 = "Unable to get data dimensions from file: %s.\n"; const char *err2 = "Invalid data rank of %d in file: %s.\n"; const char *err3 = "Dimension(s) is less than '2' in file: %s.\n"; const char *err4 = "Unexpected number type from file: %s.\n"; /* * extract the rank and dimensions of the HDF input file */ if (inp->is_hdf == TRUE) { if (DFSDgetdims(infile, &inp->rank, hdfdims, 3) == FAIL) { fprintf(stderr, err1, infile); goto err; } /* don't know how to deal with other numbers yet */ if (DFSDgetNT(&nt) == FAIL || nt != DFNT_FLOAT32) { fprintf(stderr, err4, infile); goto err; } /* * hdfdims is ordered: ZYX or YX * inp->dims is ordered: XYZ */ if (inp->rank == 2) { inp->dims[0] = hdfdims[1]; inp->dims[1] = hdfdims[0]; inp->dims[2] = 1; } else if (inp->rank == 3) { inp->dims[0] = hdfdims[2]; inp->dims[1] = hdfdims[1]; inp->dims[2] = hdfdims[0]; } else { fprintf(stderr, err2, inp->rank, infile); goto err; } /* * get the rank and dimensions from a TEXT or native floating point * format input file */ } else { if (gint(infile, strm, &inp->dims[2], inp)) { fprintf(stderr, err1, infile); goto err; } if (inp->dims[2] > 1) inp->rank = 3; else inp->rank = 2; if (gint(infile, strm, &inp->dims[1], inp)) { fprintf(stderr, err1, infile); goto err; } if (gint(infile, strm, &inp->dims[0], inp)) { fprintf(stderr, err1, infile); goto err; } } /* * validate dimension sizes */ if ((inp->dims[0] < 2) || (inp->dims[1] < 2)) { fprintf(stderr, err3, infile); goto err; } return (0); err: return (1); } /* * Name: * gfloat * * Purpose: * Read in a single floating point value from the input stream. The * input format may either be ASCII text , 32-bit native floating point, * or 64-bit native floating point. */ static int gfloat(char *infile, FILE *strm, float32 *fp32, struct Input *in) { float64 fp64 = 0.0; const char *err1 = "Unable to get 'float' value from file: %s.\n"; if (in->is_text == TRUE) { if (fscanf(strm, "%e", fp32) != 1) { fprintf(stderr, err1, infile); goto err; } } else if (in->is_fp32 == TRUE) { if (fread((char *)fp32, sizeof(float32), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } else { if (fread((char *)&fp64, sizeof(float64), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } *fp32 = (float32)fp64; } return (0); err: return (1); } /* * Name: * gint * * Purpose: * Read in a single integer value from the input stream. The input * format may either be ASCII text or a native BCD of type integer. */ static int gint(char *infile, FILE *strm, int *ival, struct Input *in) { const char *err1 = "Unable to get 'int' value from file: %s.\n"; /* * process TEXT-formatted input */ if (in->is_text == TRUE) { if (fscanf(strm, "%d", ival) != 1) { fprintf(stderr, err1, infile); goto err; } /* * process BCD-formatted input */ } else { if (fread((char *)ival, sizeof(int), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: * gmaxmin * * Purpose: * Extract the maximum and minimum data values from the input file. */ static int gmaxmin(char *infile, struct Input *in, FILE *strm, int *is_maxmin) { const char *err1 = "Unable to get max/min values from file: %s.\n"; /* * extract the max/min values from the input file */ if (in->is_hdf == TRUE) { if (!DFSDgetrange(&in->max, &in->min)) if (in->max > in->min) *is_maxmin = TRUE; } else { if (gfloat(infile, strm, &in->max, in)) { fprintf(stderr, err1, infile); goto err; } if (gfloat(infile, strm, &in->min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->max > in->min) *is_maxmin = TRUE; } return (0); err: return (1); } /* * Name: * gscale * * Purpose: * Determine the scale for each axis. */ static int gscale(char *infile, struct Input *in, FILE *strm, int *is_scale) { int i; int32 hdfdims[3]; /* order: ZYX or YX */ const char *err1 = "Unable to get axis scale from file: %s.\n"; *is_scale = TRUE; /* * hdfdims is ordered: ZYX or YX * in->dims is ordered: XYZ */ if (in->rank == 2) { hdfdims[0] = in->dims[1]; hdfdims[1] = in->dims[0]; } else { hdfdims[0] = in->dims[2]; hdfdims[1] = in->dims[1]; hdfdims[2] = in->dims[0]; } /* * extract the scale values from the input file */ if (in->is_hdf == TRUE) { if (in->rank == 2) { if (DFSDgetdimscale(1, hdfdims[0], in->vscale)) { *is_scale = FALSE; for (i = 0; i <= hdfdims[0]; i++) in->vscale[i] = (float32)i; } if (DFSDgetdimscale(2, hdfdims[1], in->hscale)) { *is_scale = FALSE; for (i = 0; i <= hdfdims[1]; i++) in->hscale[i] = (float32)i; } } else { if (DFSDgetdimscale(1, hdfdims[0], in->dscale)) { *is_scale = FALSE; for (i = 0; i <= hdfdims[0]; i++) in->dscale[i] = (float32)i; } if (DFSDgetdimscale(2, hdfdims[1], in->vscale)) { *is_scale = FALSE; for (i = 0; i <= hdfdims[1]; i++) in->vscale[i] = (float32)i; } if (DFSDgetdimscale(3, hdfdims[2], in->hscale)) { *is_scale = FALSE; for (i = 0; i <= hdfdims[2]; i++) in->hscale[i] = (float32)i; } } } else { if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gfloat(infile, strm, &in->vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->vscale[i] = in->vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat(infile, strm, &in->hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->hscale[i] = in->hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gfloat(infile, strm, &in->dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->dscale[i] = in->dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat(infile, strm, &in->vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->vscale[i] = in->vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gfloat(infile, strm, &in->hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->hscale[i] = in->hscale[i - 1]; } } return (0); err: return (1); } /* * Name: * gtoken * * Purpose: * Return the token identifier associated with the command line * argument. */ static int gtoken(char *s) { size_t len; int token; const char *err1 = "Illegal argument: %s.\n"; /* * identify the token type */ if (s[0] == '-') { /* option name (or negative number) */ token = ERR; len = strlen(&s[1]); switch (s[1]) { case 'o': if (!strncmp("outfile", &s[1], len)) token = OPT_o; break; case 'r': if (!strncmp("raster", &s[1], len)) token = OPT_r; break; case 'e': if (!strncmp("expand", &s[1], len)) token = OPT_e; break; case 'i': if (!strncmp("interp", &s[1], len)) token = OPT_i; break; case 'p': if (!strncmp("palfile", &s[1], len)) token = OPT_p; break; case 'f': if (!strncmp("float", &s[1], len)) token = OPT_f; break; case 'h': if (!strncmp("help", &s[1], len)) token = OPT_h; break; case 'm': if (!strncmp("mean", &s[1], len)) token = OPT_m; break; default: if (isnum(s)) /* negative number? */ token = OPT_num; } if (token == ERR) fprintf(stderr, err1, s); } else if (isnum(s)) /* positive number */ token = OPT_num; else /* filename */ token = FILENAME; return (token); } /* * Name: * gtype * * Purpose: * Determine the type of the input file (HDF, TEXT, FP32 or FP64). */ static int gtype(char *infile, struct Input *in, FILE **strm) { char buf[8]; const char *err1 = "Unable to open file: %s.\n"; const char *err2 = "Unable to get format tag from file: %s.\n"; const char *err3 = "Invalid file format in file: %s.\n"; /* * determine the input file format */ if (Hishdf(infile)) in->is_hdf = TRUE; else { if ((*strm = fopen(infile, "r")) == NULL) { fprintf(stderr, err1, infile); goto err; } if (fread(buf, 4, 1, *strm) != 1) { fprintf(stderr, err2, infile); goto err; } if (!memcmp("TEXT", buf, 4) || !memcmp("text", buf, 4)) { #if defined H4_HAVE_WIN32_API _fmode = _O_TEXT; #endif in->is_text = TRUE; } else { rewind(*strm); if (fread(buf, sizeof(int), 1, *strm) != 1) { fprintf(stderr, err2, infile); goto err; } if (!memcmp("FP32", buf, 4) || !memcmp("fp32", buf, 4)) in->is_fp32 = TRUE; else if (!memcmp("FP64", buf, 4) || !memcmp("fp64", buf, 4)) in->is_fp64 = TRUE; else { fprintf(stderr, err3, infile); goto err; } } } return (0); err: return (1); } /* * Name: * help * * Purpose: * Print a helpful summary of command usage and features. */ void help(char *name) { printf("Name:\n"); printf("\t %s\n\n", name); printf("Purpose:\n"); printf("\t To convert floating point data to HDF Scientific "); printf("Data Set (SDS)\n"); printf("\t and/or 8-bit Raster Image Set (RIS8) format, "); printf("storing the results\n"); printf("\t in an HDF file. The image data can be scaled "); printf("about a mean value.\n\n"); printf("Version:\n"); printf("\t v1.1 (Apr 30, 1990)\n\n"); printf("Synopsis:\n"); printf("\t %s -h[elp], OR\n", name); printf("\t %s [...] -o[utfile] ", name); printf("\n"); printf("\t\t [-r[aster] [ras_opts ...]] [-f[loat]]\n\n"); printf("\t -h[elp]:\n"); printf("\t\t Print a helpful summary of usage, and exit.\n\n"); printf("\t infile(s):\n"); printf("\t\t Input file(s), containing a single "); printf("two-dimensional or\n"); printf("\t\t three-dimensional floating point array in "); printf("either ASCII\n"); printf("\t\t text, native floating point, or HDF SDS format. "); printf("If an\n"); printf("\t\t HDF file is used for input, it must contain an "); printf("SDS.\n"); printf("\t\t The SDS need only contain a dimension record and "); printf("the\n"); printf("\t\t data, but if it also contains maximum and "); printf("minimum values\n"); printf("\t\t and/or scales for each axis, these will be "); printf("used. If the\n"); printf("\t\t input format is ASCII text or native floating "); printf("point, see\n"); printf("\t\t \"Notes\" below on how it must be organized.\n\n"); printf("\t -o[utfile] :\n"); printf("\t\t Data from one or more input files are stored as "); printf("one or\n"); printf("\t\t more data sets and/or images in one HDF output "); printf("file,\n\t\t\"outfile\".\n\n"); printf("\t -r[aster]:\n"); printf("\t\t Store output as a raster image set in the "); printf("output file\n\n"); printf("\t -f[loat]:\n"); printf("\t\t Store output as a scientific data set in the "); printf("the output file.\n"); printf("\t\t This is the default if the \"-r\" option is not "); printf("specified.\n\n"); printf("\t ras_opts ...\n\n"); printf("\t -e[xpand] []:\n"); printf("\t\t Expand float data via pixel replication to "); printf("produce the\n"); printf("\t\t image(s). \"horiz\" and \"vert\" give the "); printf("horizontal and\n"); printf("\t\t vertical resolution of the image(s) to be "); printf("produced; and\n"); printf("\t\t optionally, \"depth\" gives the number of "); printf("images or depth\n"); printf("\t\t planes (for 3D input data).\n\n"); printf("\t-i[nterp] []:\n"); printf("\t\t Apply bilinear, or trilinear, interpolation to "); printf("the float\n"); printf("\t\t data to produce the image(s). \"horiz\", "); printf("\"vert\", and \"depth\"\n"); printf("\t\t must be greater than or equal to the dimensions "); printf("of the\n"); printf("\t\t original dataset.\n\n"); printf("\t -p[alfile] :\n"); printf("\t\t Store the palette with the image. Get the "); printf("palette from\n"); printf("\t\t \"palfile\"; which may be an HDF file containing "); printf("a palette,\n"); printf("\t\t or a file containing a raw palette.\n\n"); printf("\t -m[ean] :\n"); printf("\t\t If a floating point mean value is given, the "); printf("image will be\n"); printf("\t\t scaled about the mean. The new extremes "); printf("(newmax and newmin),\n"); printf("\t\t as given by:\n\n"); printf("\t\t newmax = mean + max(abs(max-mean), "); printf("abs(mean-min))\n"); printf("\t\t newmin = mean - max(abs(max-mean), "); printf("abs(mean-min))\n\n"); printf("\t\t will be equidistant from the mean value. If "); printf("no mean value\n"); printf("\t\t is given, then the mean will be: 0.5 * (max "); printf("+ min)\n\n"); printf("Notes:\n"); printf("\t If the input file format is ASCII text or native "); printf("floating point, it\n"); printf("\t must have the following input fields:\n\n"); printf("\t\t format\n"); printf("\t\t nplanes\n"); printf("\t\t nrows\n"); printf("\t\t ncols\n"); printf("\t\t max_value\n"); printf("\t\t min_value\n"); printf("\t\t [plane1 plane2 plane3 ...]\n"); printf("\t\t row1 row2 row3 ...\n"); printf("\t\t col1 col2 col3 ...\n"); printf("\t\t data1 data2 data3 ...\n"); printf("\t\t ...\n\n"); printf("\t Where:\n"); printf("\t\t format:\n"); printf("\t\t\t Format designator (\"TEXT\", \"FP32\" or "); printf("\"FP64\").\n"); printf("\t\t nplanes:\n"); printf("\t\t\t Dimension of the depth axis (\"1\" for 2D "); printf("input).\n"); printf("\t\t nrows:\n"); printf("\t\t\t Dimension of the vertical axis.\n"); printf("\t\t ncols:\n"); printf("\t\t\t Dimension of the horizontal axis.\n"); printf("\t\t max_value:\n"); printf("\t\t\t Maximum data value.\n"); printf("\t\t min_value:\n"); printf("\t\t\t Minimum data value.\n"); printf("\t\t plane1, plane2, plane3, ...:\n"); printf("\t\t\t Scales for depth axis.\n"); printf("\t\t row1, row2, row3, ...:\n"); printf("\t\t\t Scales for the vertical axis.\n"); printf("\t\t col1, col2, col3, ...:\n"); printf("\t\t\t Scales for the horizontal axis.\n"); printf("\t\t data1, data2, data3, ...:\n"); printf("\t\t\t The data ordered by rows, left to right and "); printf("top\n"); printf("\t\t\t to bottom; then optionally, ordered by planes,\n"); printf("\t\t\t front to back.\n\n"); printf("\t For FP32 and FP64 input format, \"format\", "); printf("\"nplanes\", \"nrows\", \"ncols\",\n"); printf("\t and \"nplanes\" are native integers; where "); printf("\"format\" is the integer\n"); printf("\t representation of the appropriate 4-character "); printf("string (0x46503332 for\n"); printf("\t \"FP32\" and 0x46503634 for \"FP64\"). The "); printf("remaining input fields are\n"); printf("\t composed of native 32-bit floating point values for "); printf("FP32 input format,\n"); printf("\t or native 64-bit floating point values for FP64 "); printf("input format.\n\n"); printf("Examples:\n"); printf("\t Convert floating point data in \"f1.txt\" to SDS "); printf("format, and store it\n"); printf("\t as an SDS in HDF file \"o1\":\n\n"); printf("\t\t %s f1.txt -o o1\n\n", name); printf("\t Convert floating point data in \"f2.hdf\" to "); printf("8-bit raster format, and\n"); printf("\t store it as an RIS8 in HDF file \"o2\":\n\n"); printf("\t\t %s f2.hdf -o o2 -r\n\n", name); printf("\t Convert floating point data in \"f3.bin\" to "); printf("8-bit raster format and\n"); printf("\t SDS format, and store both the RIS8 and the SDS "); printf("in HDF file \"o3\":\n\n"); printf("\t\t %s f3.bin -o o3 -r -f\n\n", name); printf("\t Convert floating point data in \"f4\" to a "); printf("500x600 raster image, and\n"); printf("\t store the RIS8 in HDF file \"o4\". Also store a "); printf("palette from \"palfile\"\n"); printf("\t with the image:\n\n"); printf("\t\t %s f4 -o o4 -r -e 500 600 -p palfile\n\n", name); printf("\t Convert floating point data in \"f5\" to 200 "); printf("planes of 500x600 raster\n"); printf("\t images, and store the RIS8 in HDF file \"o5\". "); printf("Also scale the image\n"); printf("\t data so that it is centered about a mean value "); printf("of 10.0:\n\n"); printf("\t\t %s f5 -o o5 -r -i 500 600 200 -m 10.0\n", name); return; } /* * Name: * indexes * * Purpose: * For each pixel location along an axis, determine the nearest * scale value neighbor. Return a list of indexes into the scale * array. */ static int indexes(float32 *scale, int dim, int *idx, int res) { int i, j; float32 *midpt; float32 loc; float32 delta; const char *err1 = "Unable to allocate dynamic memory.\n"; /* * determine the midpoints between scale values */ if ((midpt = (float32 *)malloc((size_t)dim * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } for (i = 0; i < dim - 1; i++) midpt[i] = (scale[i] + scale[i + 1]) * (float32)0.5; midpt[dim - 1] = scale[dim - 1] + (scale[dim - 1] - midpt[dim - 2]); /* * determine the distance between pixel locations */ delta = (scale[dim - 1] - scale[0]) / (float32)(res - 1); /* * compute indexes, keeping the index the same until the location * extends beyond the midpoint */ for (i = 1, j = 0, idx[0] = 0, loc = scale[0]; i < res; i++) { loc += delta; idx[i] = idx[i - 1]; while (loc >= midpt[j]) { idx[i] += 1; j += 1; } } /* * free dynamically allocated memory */ free(midpt); return (0); err: return (1); } /* * Name: * interp * * Purpose: * Use a bilinear, or trilinear, interpolation scheme to construct * the raster image(s). * * Bug revision: the line that previously read: * * hratio[i] = ((hrange > 0) ? 1.0 : -1.0) * (in->hscale[j+1] - * loc) / (in->hscale[j+1] - in->hscale[j]); * has been changed to read: * hratio[i] = (in->hscale[j+1] - loc) / (in->hscale[j+1] - in->hscale[j]); * * Similar changes were made to the corresponding lines for * computing vratio and dratio. * * Bug revision: If values occur that are outside the ranges of the * max and min values provided, these values are now "clipped" to * be the same as the max and min, respectively. */ static int interp(struct Input *in, struct Raster *im) { int i, j, k, m; int *hinc, *voff, *doff = NULL; float32 pix; float32 loc; float32 range; float32 ratio; float32 hrange, vrange, drange = (float32)0.0; float32 hdelta, vdelta, ddelta = (float32)0.0; float32 t1, t2, t3, t4, t5, t6; float32 *hratio, *vratio, *dratio = NULL; float32 *pt[8]; unsigned char *ip = im->image; const char *err1 = "Unable to allocate dynamic memory.\n"; /* * determine the range of pixel locations */ range = in->max - in->min; ratio = (float32)237.9 / range; hrange = in->hscale[in->dims[0] - 1] - in->hscale[0]; vrange = in->vscale[in->dims[1] - 1] - in->vscale[0]; if (in->rank == 3) drange = in->dscale[in->dims[2] - 1] - in->dscale[0]; /* * determine the distance between pixel locations */ hdelta = hrange / (float32)(im->hres - 1); vdelta = vrange / (float32)(im->vres - 1); if (in->rank == 3) ddelta = drange / (float32)(im->dres - 1); /* * allocate dynamic memory for the interpolation ratio buffers */ if ((hratio = (float32 *)malloc((size_t)im->hres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((vratio = (float32 *)malloc((unsigned int)im->vres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((dratio = (float32 *)malloc((unsigned int)im->dres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } /* * allocate dynamic memory for the pixel location offset/increment * buffers */ if ((hinc = (int *)malloc((unsigned int)im->hres * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((voff = (int *)malloc((unsigned int)(im->vres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((doff = (int *)malloc((unsigned int)(im->dres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } /* * compute the interpolation ratios and pixel location * offsets/increments for each axis */ for (i = 0, j = 0; i < im->hres; i++) { loc = hdelta * (float)i + in->hscale[0]; hinc[i] = 0; while ((j < (in->dims[0] - 2)) && ((hrange > (float32)0.0) ? (in->hscale[j + 1] < loc) : (in->hscale[j + 1] > loc))) { hinc[i] += 1; j += 1; } hratio[i] = (in->hscale[j + 1] - loc) / (in->hscale[j + 1] - in->hscale[j]); } for (i = 0, j = 0, voff[0] = 0; i < im->vres; i++) { loc = vdelta * (float)i + in->vscale[0]; while ((j < (in->dims[1] - 2)) && ((vrange > (float32)0.0) ? (in->vscale[j + 1] < loc) : (in->vscale[j + 1] > loc))) { voff[i] += 1; j += 1; } vratio[i] = (in->vscale[j + 1] - loc) / (in->vscale[j + 1] - in->vscale[j]); voff[i + 1] = voff[i]; } if (in->rank == 3) { for (i = 0, j = 0, doff[0] = 0; i < im->dres; i++) { loc = ddelta * (float)i + in->dscale[0]; while ((j < (in->dims[2] - 2)) && ((drange > (float32)0.0) ? (in->dscale[j + 1] < loc) : (in->dscale[j + 1] > loc))) { doff[i] += 1; j += 1; } dratio[i] = (in->dscale[j + 1] - loc) / (in->dscale[j + 1] - in->dscale[j]); doff[i + 1] = doff[i]; } } /* * do the interpolation for each point in the target image, taking * advantage of the fact that the target is evenly spaced along each * axis */ if (in->rank == 2) { for (i = 0; i < im->vres; i++) { pt[0] = (float32 *)in->data + (in->dims[0] * voff[i]); pt[1] = pt[0] + 1; pt[2] = pt[0] + in->dims[0]; pt[3] = pt[2] + 1; for (j = 0; j < im->hres; j++) { for (m = 0; m < 4; m++) pt[m] += hinc[j]; t1 = *pt[2] - ((*pt[2] - *pt[0]) * vratio[i]); t2 = *pt[3] - ((*pt[3] - *pt[1]) * vratio[i]); pix = t2 - ((t2 - t1) * hratio[j]); if (pix > in->max) pix = in->max; /* clip (bug fix) */ if (pix < in->min) pix = in->min; /* ditto */ *ip++ = (unsigned char)((ratio * (pix - in->min)) + (float32)1.5); } } } else { /* rank == 3 */ for (i = 0; i < im->dres; i++) { for (j = 0; j < im->vres; j++) { pt[0] = (float32 *)in->data + (in->dims[0] * voff[j]) + (in->dims[0] * in->dims[1] * doff[i]); pt[1] = pt[0] + 1; pt[2] = pt[0] + in->dims[0]; pt[3] = pt[2] + 1; pt[4] = pt[0] + (in->dims[0] * in->dims[1]); pt[5] = pt[4] + 1; pt[6] = pt[4] + in->dims[0]; pt[7] = pt[6] + 1; for (k = 0; k < im->hres; k++) { for (m = 0; m < 8; m++) pt[m] += hinc[k]; t1 = *pt[4] - ((*pt[4] - *pt[0]) * dratio[i]); t2 = *pt[6] - ((*pt[6] - *pt[2]) * dratio[i]); t3 = *pt[5] - ((*pt[5] - *pt[1]) * dratio[i]); t4 = *pt[7] - ((*pt[7] - *pt[3]) * dratio[i]); t5 = t2 - ((t2 - t1) * vratio[j]); t6 = t4 - ((t4 - t3) * vratio[j]); pix = t6 - ((t6 - t5) * hratio[k]); if (pix > in->max) pix = in->max; /* clip (bug fix) */ if (pix < in->min) pix = in->min; /* ditto */ *ip++ = (unsigned char)((ratio * (pix - in->min)) + (float32)1.5); } } } } /* * free dynamically allocated memory */ free(hratio); free(vratio); if (in->rank == 3) free(dratio); free(hinc); free(voff); if (in->rank == 3) free(doff); return (0); err: return (1); } /* * Name: * isnum * * Purpose: * Determine whether or not the string is representative of an * integer or floating point number. If it is, a non-zero value * is returned. A leading (-) to denote sign is acceptable. */ static int isnum(char *s) { char *cp; int rval = FALSE; /* * check to see if its a floating point number */ cp = s; (void)strtod(s, &cp); if ((*cp == '\0') && (cp != s)) rval = TRUE; /* * check to see if its an integer number (radix 8, 10, or 16) */ else { cp = s; (void)strtol(s, &cp, 0); if ((*cp == '\0') && (cp != s)) rval = TRUE; } return (rval); } /* * Name: * mean * * Purpose: * Reset the maximum and minimum data values to be symmetric about * the user-specified mean value. */ void mean(struct Input *in, struct Options *opt) { float32 delta, delta_max, delta_min; delta_max = (float32)fabs((double)(in->max - opt->meanval)); delta_min = (float32)fabs((double)(opt->meanval - in->min)); delta = (delta_max > delta_min) ? delta_max : delta_min; in->max = opt->meanval + delta; in->min = opt->meanval - delta; return; } /* * Name: * palette * * Purpose: * Process the (user specified) palette input file. */ static int palette(char *palfile) { unsigned char *color; unsigned char pal[1024], red[256], green[256], blue[256]; FILE *strm; int i; const char *err1 = "Unable to get palette from file: %s.\n"; const char *err2 = "Unable to open palette file: %s.\n"; const char *err3 = "Unable to set default palette.\n"; /* * extract a palette from an HDF file */ if (Hishdf(palfile)) { if (DFPgetpal(palfile, pal)) { fprintf(stderr, err1, palfile); goto err; } /* * read in a raw palette file */ } else { if ((strm = fopen(palfile, "r")) == NULL) { fprintf(stderr, err2, palfile); goto err; } if (fread((char *)red, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } else if (fread((char *)green, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } else if (fread((char *)blue, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } (void)fclose(strm); /* * interleave the R,G,B values */ color = pal; for (i = 0; i < 256; i++) { *color++ = red[i]; *color++ = green[i]; *color++ = blue[i]; } } /* * set up the palette as the default for subsequent images */ if (DFR8setpalette(pal)) { fprintf(stderr, "%s", err3); goto err; } return (0); err: return (1); } /* * Name: * pixrep * * Purpose: * Expand the image(s) to the desired resolution using pixel * replication. */ static int pixrep(struct Input *in, struct Raster *im) { int *hidx, *vidx, *didx; int ovidx, odidx; int dummy; int32 i, j, k; float32 *dp; float32 range; float32 ratio; unsigned char *ip, *plane, *row, *pix; const char *err1 = "Unable to dynamically allocate memory.\n"; dp = (float32 *)in->data; ip = im->image; range = in->max - in->min; ratio = (float32)237.9 / range; /* * determine the scale indexes of the horizontal pixel locations */ if ((hidx = (int *)malloc((unsigned int)(im->hres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->hscale, in->dims[0], hidx, im->hres)) goto err; /* * determine the scale indexes of the vertical pixel locations */ if ((vidx = (int *)malloc((unsigned int)(im->vres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->vscale, in->dims[1], vidx, im->vres)) goto err; /* * determine the scale indexes of the depth plane locations */ dummy = 0; didx = &dummy; if (in->rank == 3) { if ((didx = (int *)malloc((unsigned int)(im->dres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->dscale, in->dims[2], didx, im->dres)) goto err; } /* * compute the expanded image */ if ((pix = (unsigned char *)malloc((unsigned int)(in->dims[0] + 1))) == NULL) { fprintf(stderr, "%s", err1); goto err; } for (k = 0, odidx = didx[0] - 1; k < im->dres; k++) { /* * construct a new depth plane */ if (didx[k] > odidx) { for (j = 0, ovidx = vidx[0] - 1; j < im->vres; j++) { /* * construct a new row */ if (vidx[j] > ovidx) { for (i = 0; i < in->dims[0]; i++) pix[i] = (unsigned char)((ratio * (*dp++ - in->min)) + (float32)1.5); for (i = 0; i < im->hres; i++) *ip++ = pix[hidx[i]]; /* * repeat the previous row */ } else { row = ip - im->hres; for (i = 0; i < im->hres; i++) *ip++ = *row++; } ovidx = vidx[j]; } /* * repeat the previous depth plane */ } else { plane = ip - (im->hres * im->vres); for (j = 0; j < im->vres; j++) for (i = 0; i < im->hres; i++) *ip++ = plane[(j * im->hres) + i]; } odidx = didx[k]; } /* * free dynamically allocated space */ free(hidx); free(vidx); if (in->rank == 3) free(didx); free(pix); return (0); err: return (1); } /* * Name: * process * * Purpose: * Process each input file. */ static int process(struct Options *opt) { struct Input in; struct Raster im; unsigned char *ip; int i, j; int is_maxmin; int is_scale; int32 hdfdims[3]; /* order: ZYX or YX */ int32 len; FILE *strm; int32 hdf; const char *err1 = "Error creating HDF output file: %s.\n"; const char *err2 = "Unable to dynamically allocate memory.\n"; const char *err3a = "Warning: cannot make image smaller using -e "; const char *err3b = "option.\n\t %s resolution will be made the "; const char *err3c = "same as %s dimension of the\n\t dataset, "; const char *err3d = "which is: %d.\n\n"; const char *err4 = "Unable to write an RIS8 to the HDF output file\n"; const char *err5 = "Unable to write an SDS to the HDF output file\n"; /* * process the palette file (if one was specified) */ if (opt->pal == TRUE) if (palette(opt->palfile)) goto err; /* * create the HDF output file */ if ((hdf = Hopen(opt->outfile, DFACC_CREATE, 0)) == FAIL) { fprintf(stderr, err1, opt->outfile); goto err; } (void)Hclose(hdf); /* * main loop: process input files, one per pass */ for (i = 0; i < opt->fcount; i++) { /* * initialize key parameters */ in.is_hdf = FALSE; in.is_text = FALSE; in.is_fp32 = FALSE; in.is_fp64 = FALSE; is_maxmin = FALSE; is_scale = FALSE; /* * get the file type, input data dimensions, and input data * max/min values */ if (gtype(opt->infiles[i], &in, &strm)) goto err; if (gdimen(opt->infiles[i], &in, strm)) goto err; if (gmaxmin(opt->infiles[i], &in, strm, &is_maxmin)) goto err; /* * get the scale for each axis */ if ((in.hscale = (float32 *)malloc((size_t)(in.dims[0] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err2); goto err; } if ((in.vscale = (float32 *)malloc((size_t)(in.dims[1] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err2); goto err; } if (in.rank == 3) { if ((in.dscale = (float32 *)malloc((size_t)(in.dims[2] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err2); goto err; } } if (gscale(opt->infiles[i], &in, strm, &is_scale)) goto err; /* * get the input data */ len = in.dims[0] * in.dims[1] * in.dims[2]; if ((in.data = (void *)malloc((size_t)len * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err2); goto err; } if (gdata(opt->infiles[i], &in, strm, &is_maxmin)) goto err; /* * put the input data in the HDF output file, in SDS format */ if (opt->to_float == TRUE) { /* * hdfdims is ordered: ZYX or YX * in.dims is ordered: XYZ */ if (in.rank == 2) { hdfdims[0] = in.dims[1]; hdfdims[1] = in.dims[0]; } else { hdfdims[0] = in.dims[2]; hdfdims[1] = in.dims[1]; hdfdims[2] = in.dims[0]; } if (DFSDsetNT(DFNT_FLOAT32)) { fprintf(stderr, "%s", err5); goto err; } if (is_scale == TRUE) { if (DFSDsetdims(in.rank, hdfdims)) { fprintf(stderr, "%s", err5); goto err; } if (DFSDsetrange(&in.max, &in.min)) { fprintf(stderr, "%s", err5); goto err; } if (in.rank == 2) { if (DFSDsetdimscale(1, hdfdims[0], in.vscale)) { fprintf(stderr, "%s", err5); goto err; } if (DFSDsetdimscale(2, hdfdims[1], in.hscale)) { fprintf(stderr, "%s", err5); goto err; } } else { if (DFSDsetdimscale(1, hdfdims[0], in.dscale)) { fprintf(stderr, "%s", err5); goto err; } if (DFSDsetdimscale(2, hdfdims[1], in.vscale)) { fprintf(stderr, "%s", err5); goto err; } if (DFSDsetdimscale(3, hdfdims[2], in.hscale)) { fprintf(stderr, "%s", err5); goto err; } } } if (DFSDadddata(opt->outfile, in.rank, hdfdims, in.data)) { fprintf(stderr, "%s", err5); goto err; } } /* * put the input data in the HDF output file, in RIS8 format */ if (opt->to_image == TRUE) { /* * allocate a buffer for the output image */ im.hres = (opt->hres == 0) ? in.dims[0] : opt->hres; if ((im.hres < in.dims[0]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Horiz."); fprintf(stderr, err3c, "horiz."); fprintf(stderr, err3d, in.dims[0]); im.hres = in.dims[0]; opt->hres = in.dims[0]; } im.vres = (opt->vres == 0) ? in.dims[1] : opt->vres; if ((im.vres < in.dims[1]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Vert."); fprintf(stderr, err3c, "vert."); fprintf(stderr, err3d, in.dims[1]); im.vres = in.dims[1]; opt->vres = in.dims[1]; } im.dres = 1; if (in.rank == 3) { im.dres = (opt->dres == 0) ? in.dims[2] : opt->dres; if ((im.dres < in.dims[2]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Depth"); fprintf(stderr, err3c, "depth"); fprintf(stderr, err3d, in.dims[2]); im.dres = in.dims[2]; opt->dres = in.dims[2]; } } len = im.hres * im.vres * im.dres; if ((im.image = (unsigned char *)malloc((unsigned int)len)) == NULL) { fprintf(stderr, "%s", err2); goto err; } /* * reset max/min symmetrically about the mean value */ if (opt->mean == TRUE) mean(&in, opt); /* * perform pixel replication or interpolation */ if (opt->ctm == EXPAND) { if (pixrep(&in, &im)) goto err; } else { /* INTERP */ if (interp(&in, &im)) goto err; } len = im.hres * im.vres; for (j = 0, ip = im.image; j < im.dres; j++, ip += len) { if (DFR8addimage(opt->outfile, ip, im.hres, im.vres, DFTAG_RLE)) { fprintf(stderr, "%s", err4); goto err; } } } /* * free dynamically allocated space */ free(in.hscale); free(in.vscale); if (in.rank == 3) free(in.dscale); free(in.data); if (opt->to_image == TRUE) free(im.image); } return (0); err: return (1); } /* * Name: * usage * * Purpose: * Print a summary of command usage. */ void usage(char *name) { fprintf(stderr, "\nUsage:\t%s -h[elp], OR\n", name); fprintf(stderr, "\t%s [...] ", name); fprintf(stderr, "-o[utfile] [options...]\n\n"); fprintf(stderr, "\toptions...\n"); fprintf(stderr, "\t -r[aster]:\n"); fprintf(stderr, "\t produce an image. Could be "); fprintf(stderr, "followed by:\n"); fprintf(stderr, "\t -e[xpand] "); fprintf(stderr, "[]:\n"); fprintf(stderr, "\t resolution with pixel "); fprintf(stderr, "replication\n"); fprintf(stderr, "\t -i[nterp] "); fprintf(stderr, "[]:\n"); fprintf(stderr, "\t resolution with interpolation\n"); fprintf(stderr, "\t -p[alfile] :\n"); fprintf(stderr, "\t include palette from palfile\n"); fprintf(stderr, "\t -m[ean] :\n"); fprintf(stderr, "\t mean value to scale image "); fprintf(stderr, "around\n"); fprintf(stderr, "\t -f[loat]:\n"); fprintf(stderr, "\t produce floating point data\n\n"); return; } hdf4-hdf4.3.1/hdf/util/fp2hdf.input1000066400000000000000000000010541503061704500170600ustar00rootroot00000000000000open cb32r2.hdf prev tag = 30 next tag = 702 info dump -float close open cb32r3.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r2.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r3.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr3.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r2_ris.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2_ris.hdf prev tag = 30 next tag = 303 info dump -byte close quit hdf4-hdf4.3.1/hdf/util/fp2hdf.input1-32000066400000000000000000000006441503061704500173060ustar00rootroot00000000000000open cb64r2.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r3.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr3.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r2_ris.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2_ris.hdf prev tag = 30 next tag = 303 info dump -byte close quit hdf4-hdf4.3.1/hdf/util/fp2hdf.out1000066400000000000000000000127511503061704500165360ustar00rootroot00000000000000ctxtr2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes ctxtr3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 30 bytes Scientific Data : (tag 702) Ref no 2 240 bytes SciData scales : (tag 703) Ref no 2 51 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb32r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb32r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 30 bytes Scientific Data : (tag 702) Ref no 2 240 bytes SciData scales : (tag 703) Ref no 2 51 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb64r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb64r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 30 bytes Scientific Data : (tag 702) Ref no 2 240 bytes SciData scales : (tag 703) Ref no 2 51 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes ctxtr2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 400 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Compressed Image : (tag 303) Ref no 2 400 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes cb64r2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Image Dimensions-8 : (tag 200) Ref no 3 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 3 2550 bytes Image Dimensions : (tag 300) Ref no 3 20 bytes Compressed Image : (tag 303) Ref no 3 2550 bytes Raster Image Group : (tag 306) Ref no 3 8 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes hdf4-hdf4.3.1/hdf/util/fp2hdf.out1-32000066400000000000000000000102571503061704500167570ustar00rootroot00000000000000ctxtr2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes ctxtr3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 30 bytes Scientific Data : (tag 702) Ref no 2 240 bytes SciData scales : (tag 703) Ref no 2 51 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb64r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes cb64r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 30 bytes Scientific Data : (tag 702) Ref no 2 240 bytes SciData scales : (tag 703) Ref no 2 51 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes ctxtr2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 400 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Compressed Image : (tag 303) Ref no 2 400 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes cb64r2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Image Dimensions-8 : (tag 200) Ref no 3 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 3 2550 bytes Image Dimensions : (tag 300) Ref no 3 20 bytes Compressed Image : (tag 303) Ref no 3 2550 bytes Raster Image Group : (tag 306) Ref no 3 8 bytes Scientific Data Group : (tag 700) Ref no 2 20 bytes SciData dimension record : (tag 701) Ref no 2 22 bytes Scientific Data : (tag 702) Ref no 2 48 bytes SciData scales : (tag 703) Ref no 2 30 bytes SciData max/min : (tag 707) Ref no 2 8 bytes Links related to the dataset : (tag 710) Ref no 2 8 bytes Numeric Data Group : (tag 720) Ref no 2 20 bytes hdf4-hdf4.3.1/hdf/util/fp2hdf.out2000066400000000000000000000173551503061704500165440ustar00rootroot00000000000000 (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Scientific Data : (Tag 702) Ref 2 0: 8.300000e+01 8.500000e+01 8.700000e+01 8.900000e+01 16: 8.400000e+01 8.600000e+01 8.800000e+01 9.000000e+01 32: 8.500000e+01 8.700000e+01 8.900000e+01 9.100000e+01 48: 8.800000e+01 9.000000e+01 9.200000e+01 9.400000e+01 64: 8.900000e+01 9.100000e+01 9.300000e+01 9.500000e+01 80: 9.000000e+01 9.200000e+01 9.400000e+01 9.600000e+01 96: 9.300000e+01 9.500000e+01 9.700000e+01 9.900000e+01 112: 9.400000e+01 9.600000e+01 9.800000e+01 1.000000e+02 128: 9.500000e+01 9.700000e+01 9.900000e+01 1.010000e+02 144: 9.800000e+01 1.000000e+02 1.020000e+02 1.040000e+02 160: 9.900000e+01 1.010000e+02 1.030000e+02 1.050000e+02 176: 1.000000e+02 1.020000e+02 1.040000e+02 1.060000e+02 192: 1.030000e+02 1.050000e+02 1.070000e+02 1.090000e+02 208: 1.040000e+02 1.060000e+02 1.080000e+02 1.100000e+02 224: 1.050000e+02 1.070000e+02 1.090000e+02 1.110000e+02 240: (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Scientific Data : (Tag 702) Ref 2 0: 8.300000e+01 8.500000e+01 8.700000e+01 8.900000e+01 16: 8.400000e+01 8.600000e+01 8.800000e+01 9.000000e+01 32: 8.500000e+01 8.700000e+01 8.900000e+01 9.100000e+01 48: 8.800000e+01 9.000000e+01 9.200000e+01 9.400000e+01 64: 8.900000e+01 9.100000e+01 9.300000e+01 9.500000e+01 80: 9.000000e+01 9.200000e+01 9.400000e+01 9.600000e+01 96: 9.300000e+01 9.500000e+01 9.700000e+01 9.900000e+01 112: 9.400000e+01 9.600000e+01 9.800000e+01 1.000000e+02 128: 9.500000e+01 9.700000e+01 9.900000e+01 1.010000e+02 144: 9.800000e+01 1.000000e+02 1.020000e+02 1.040000e+02 160: 9.900000e+01 1.010000e+02 1.030000e+02 1.050000e+02 176: 1.000000e+02 1.020000e+02 1.040000e+02 1.060000e+02 192: 1.030000e+02 1.050000e+02 1.070000e+02 1.090000e+02 208: 1.040000e+02 1.060000e+02 1.080000e+02 1.100000e+02 224: 1.050000e+02 1.070000e+02 1.090000e+02 1.110000e+02 240: (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Scientific Data : (Tag 702) Ref 2 0: 8.300000e+01 8.500000e+01 8.700000e+01 8.900000e+01 16: 8.400000e+01 8.600000e+01 8.800000e+01 9.000000e+01 32: 8.500000e+01 8.700000e+01 8.900000e+01 9.100000e+01 48: 8.800000e+01 9.000000e+01 9.200000e+01 9.400000e+01 64: 8.900000e+01 9.100000e+01 9.300000e+01 9.500000e+01 80: 9.000000e+01 9.200000e+01 9.400000e+01 9.600000e+01 96: 9.300000e+01 9.500000e+01 9.700000e+01 9.900000e+01 112: 9.400000e+01 9.600000e+01 9.800000e+01 1.000000e+02 128: 9.500000e+01 9.700000e+01 9.900000e+01 1.010000e+02 144: 9.800000e+01 1.000000e+02 1.020000e+02 1.040000e+02 160: 9.900000e+01 1.010000e+02 1.030000e+02 1.050000e+02 176: 1.000000e+02 1.020000e+02 1.040000e+02 1.060000e+02 192: 1.030000e+02 1.050000e+02 1.070000e+02 1.090000e+02 208: 1.040000e+02 1.060000e+02 1.080000e+02 1.100000e+02 224: 1.050000e+02 1.070000e+02 1.090000e+02 1.110000e+02 240: (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Compressed Image : (Tag 303) Ref 2 0: 137 1 144 60 144 120 137 179 8: 137 1 144 60 144 120 137 179 16: 137 1 144 60 144 120 137 179 24: 137 1 144 60 144 120 137 179 32: 137 1 144 60 144 120 137 179 40: 137 1 144 60 144 120 137 179 48: 137 1 144 60 144 120 137 179 56: 137 1 144 60 144 120 137 179 64: 137 1 144 60 144 120 137 179 72: 137 1 144 60 144 120 137 179 80: 137 1 144 60 144 120 137 179 88: 137 1 144 60 144 120 137 179 96: 137 1 144 60 144 120 137 179 104: 137 31 144 90 144 150 137 209 112: 137 31 144 90 144 150 137 209 120: 137 31 144 90 144 150 137 209 128: 137 31 144 90 144 150 137 209 136: 137 31 144 90 144 150 137 209 144: 137 31 144 90 144 150 137 209 152: 137 31 144 90 144 150 137 209 160: 137 31 144 90 144 150 137 209 168: 137 31 144 90 144 150 137 209 176: 137 31 144 90 144 150 137 209 184: 137 31 144 90 144 150 137 209 192: 137 31 144 90 144 150 137 209 200: 137 31 144 90 144 150 137 209 208: 137 31 144 90 144 150 137 209 216: 137 31 144 90 144 150 137 209 224: 137 31 144 90 144 150 137 209 232: 137 31 144 90 144 150 137 209 240: 137 31 144 90 144 150 137 209 248: 137 31 144 90 144 150 137 209 256: 137 31 144 90 144 150 137 209 264: 137 31 144 90 144 150 137 209 272: 137 31 144 90 144 150 137 209 280: 137 31 144 90 144 150 137 209 288: 137 31 144 90 144 150 137 209 296: 137 60 144 120 144 179 137 239 304: 137 60 144 120 144 179 137 239 312: 137 60 144 120 144 179 137 239 320: 137 60 144 120 144 179 137 239 328: 137 60 144 120 144 179 137 239 336: 137 60 144 120 144 179 137 239 344: 137 60 144 120 144 179 137 239 352: 137 60 144 120 144 179 137 239 360: 137 60 144 120 144 179 137 239 368: 137 60 144 120 144 179 137 239 376: 137 60 144 120 144 179 137 239 384: 137 60 144 120 144 179 137 239 392: 137 60 144 120 144 179 137 239 400: hdf4-hdf4.3.1/hdf/util/fp2hdf.out2-32000066400000000000000000000145551503061704500167650ustar00rootroot00000000000000 (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Scientific Data : (Tag 702) Ref 2 0: 8.300000e+01 8.500000e+01 8.700000e+01 8.900000e+01 16: 8.400000e+01 8.600000e+01 8.800000e+01 9.000000e+01 32: 8.500000e+01 8.700000e+01 8.900000e+01 9.100000e+01 48: 8.800000e+01 9.000000e+01 9.200000e+01 9.400000e+01 64: 8.900000e+01 9.100000e+01 9.300000e+01 9.500000e+01 80: 9.000000e+01 9.200000e+01 9.400000e+01 9.600000e+01 96: 9.300000e+01 9.500000e+01 9.700000e+01 9.900000e+01 112: 9.400000e+01 9.600000e+01 9.800000e+01 1.000000e+02 128: 9.500000e+01 9.700000e+01 9.900000e+01 1.010000e+02 144: 9.800000e+01 1.000000e+02 1.020000e+02 1.040000e+02 160: 9.900000e+01 1.010000e+02 1.030000e+02 1.050000e+02 176: 1.000000e+02 1.020000e+02 1.040000e+02 1.060000e+02 192: 1.030000e+02 1.050000e+02 1.070000e+02 1.090000e+02 208: 1.040000e+02 1.060000e+02 1.080000e+02 1.100000e+02 224: 1.050000e+02 1.070000e+02 1.090000e+02 1.110000e+02 240: (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Scientific Data : (Tag 702) Ref 2 0: 8.300000e+01 8.500000e+01 8.700000e+01 8.900000e+01 16: 8.400000e+01 8.600000e+01 8.800000e+01 9.000000e+01 32: 8.500000e+01 8.700000e+01 8.900000e+01 9.100000e+01 48: 8.800000e+01 9.000000e+01 9.200000e+01 9.400000e+01 64: 8.900000e+01 9.100000e+01 9.300000e+01 9.500000e+01 80: 9.000000e+01 9.200000e+01 9.400000e+01 9.600000e+01 96: 9.300000e+01 9.500000e+01 9.700000e+01 9.900000e+01 112: 9.400000e+01 9.600000e+01 9.800000e+01 1.000000e+02 128: 9.500000e+01 9.700000e+01 9.900000e+01 1.010000e+02 144: 9.800000e+01 1.000000e+02 1.020000e+02 1.040000e+02 160: 9.900000e+01 1.010000e+02 1.030000e+02 1.050000e+02 176: 1.000000e+02 1.020000e+02 1.040000e+02 1.060000e+02 192: 1.030000e+02 1.050000e+02 1.070000e+02 1.090000e+02 208: 1.040000e+02 1.060000e+02 1.080000e+02 1.100000e+02 224: 1.050000e+02 1.070000e+02 1.090000e+02 1.110000e+02 240: (2) Scientific Data : (Tag 702) Ref 2 0: 3.200000e+01 3.400000e+01 3.600000e+01 3.800000e+01 16: 3.300000e+01 3.500000e+01 3.700000e+01 3.900000e+01 32: 3.400000e+01 3.600000e+01 3.800000e+01 4.000000e+01 48: (2) Compressed Image : (Tag 303) Ref 2 0: 137 1 144 60 144 120 137 179 8: 137 1 144 60 144 120 137 179 16: 137 1 144 60 144 120 137 179 24: 137 1 144 60 144 120 137 179 32: 137 1 144 60 144 120 137 179 40: 137 1 144 60 144 120 137 179 48: 137 1 144 60 144 120 137 179 56: 137 1 144 60 144 120 137 179 64: 137 1 144 60 144 120 137 179 72: 137 1 144 60 144 120 137 179 80: 137 1 144 60 144 120 137 179 88: 137 1 144 60 144 120 137 179 96: 137 1 144 60 144 120 137 179 104: 137 31 144 90 144 150 137 209 112: 137 31 144 90 144 150 137 209 120: 137 31 144 90 144 150 137 209 128: 137 31 144 90 144 150 137 209 136: 137 31 144 90 144 150 137 209 144: 137 31 144 90 144 150 137 209 152: 137 31 144 90 144 150 137 209 160: 137 31 144 90 144 150 137 209 168: 137 31 144 90 144 150 137 209 176: 137 31 144 90 144 150 137 209 184: 137 31 144 90 144 150 137 209 192: 137 31 144 90 144 150 137 209 200: 137 31 144 90 144 150 137 209 208: 137 31 144 90 144 150 137 209 216: 137 31 144 90 144 150 137 209 224: 137 31 144 90 144 150 137 209 232: 137 31 144 90 144 150 137 209 240: 137 31 144 90 144 150 137 209 248: 137 31 144 90 144 150 137 209 256: 137 31 144 90 144 150 137 209 264: 137 31 144 90 144 150 137 209 272: 137 31 144 90 144 150 137 209 280: 137 31 144 90 144 150 137 209 288: 137 31 144 90 144 150 137 209 296: 137 60 144 120 144 179 137 239 304: 137 60 144 120 144 179 137 239 312: 137 60 144 120 144 179 137 239 320: 137 60 144 120 144 179 137 239 328: 137 60 144 120 144 179 137 239 336: 137 60 144 120 144 179 137 239 344: 137 60 144 120 144 179 137 239 352: 137 60 144 120 144 179 137 239 360: 137 60 144 120 144 179 137 239 368: 137 60 144 120 144 179 137 239 376: 137 60 144 120 144 179 137 239 384: 137 60 144 120 144 179 137 239 392: 137 60 144 120 144 179 137 239 400: hdf4-hdf4.3.1/hdf/util/fp2hdf.test000066400000000000000000000073641503061704500166310ustar00rootroot00000000000000#! /bin/csh -f # Script for testing fp2hdf # # The input files used in this script for testing fp2hdf are # described in the file README.test. # # Output files can be examined with hdfls to see if basic # contents are there. Those with raster images can be displayed # using NCSA Image, DataScope, etc. Those with floating point # data can be examined using hdfed or DataScope. # # Note: these tests are not exhaustive. You may want to add some # of your own, especially if you are doing something a little # different from what we are testing for. You may also want to # eliminate some of these tests if they are not relevant. # set echo # text (100x100) => SDS only ./fp2hdf testfiles/fp2hdf/t100x100 -o o1 # # text => image only ./fp2hdf testfiles/fp2hdf/t100x100 -o o2 -r # # text => SDS and image ./fp2hdf testfiles/fp2hdf/t100x100 -o o3 -r -f # # hdf (100x100) => SDS and image ./fp2hdf testfiles/fp2hdf/h100x100 -o o4 -r -f # # hdf => SDS and image w palette ./fp2hdf testfiles/fp2hdf/h100x100 -o o5 -f -r -p testfiles/fp2hdf/pal.hdf # # hdf => 200x200 image, pixel replication ./fp2hdf testfiles/fp2hdf/h100x100 -o o6 -r -e 200 200 # # hdf => 200x200 image, bilinear interporlation ./fp2hdf testfiles/fp2hdf/h100x100 -o o7 -r -i 200 200 # # hdf => 40x120 interpolated image w palette ./fp2hdf testfiles/fp2hdf/h100x100 -o o8 -r -i 40 120 -p testfiles/fp2hdf/pal.hdf # # hdf => 40x120 pixel rep image w palette (should generate and error) ./fp2hdf testfiles/fp2hdf/h100x100 -o o9 -r -e 40 120 -p testfiles/fp2hdf/pal.hdf # # hdf (60x75) => 120x160 pixel rep image w palette ./fp2hdf testfiles/fp2hdf/h60x75 -o o10 -r -e 120 160 -p testfiles/fp2hdf/pal.hdf # # hdf (100x100, horizontal scale is non-uniform) => SDS and image w palette ./fp2hdf testfiles/fp2hdf/h100x100h -o o11 -f -r -p testfiles/fp2hdf/pal.hdf # # hdf (100x100, horiz and vert scales are non-uniform) => SDS and image w pal ./fp2hdf testfiles/fp2hdf/h100x100hv -o o12 -f -r -p testfiles/fp2hdf/pal.hdf # # hdf (60x75 vert scale is non-uniform) => 120x160 image with palette ./fp2hdf testfiles/fp2hdf/h60x75v -o o13 -r -e 120 160 -p testfiles/fp2hdf/pal.hdf # # hdf (60x75 no scales) => 120x150 pixel rep image with palette ./fp2hdf testfiles/fp2hdf/h60x75n -o o14 -r -e 120 150 -p testfiles/fp2hdf/pal.hdf # # From several files => a file with 100x100 images for all of them ./fp2hdf testfiles/fp2hdf/t100x100 testfiles/fp2hdf/h100x100 testfiles/fp2hdf/h100x100h testfiles/fp2hdf/h100x100hv testfiles/fp2hdf/h60x75 testfiles/fp2hdf/h60x75v -o o15 -r -e 100 100 # # Now do test on the other set of input files # # C: text (3x4) => SDS ./fp2hdf ctxtr2 -o o20 # # C: text (3x4x5) => SDS ./fp2hdf ctxtr3 -o o21 # # C: binary 32-bit (3x4) => SDS ./fp2hdf cb32r2 -o o22 # # C: binary 32-bit (3x4x5) => SDS ./fp2hdf cb32r3 -o o23 # # C: binary 64-bit (3x4) => SDS ./fp2hdf cb64r2 -o o24 # # C: binary 64-bit (3x4x5) => SDS ./fp2hdf cb64r3 -o o25 # # C: text (3x4) => image ./fp2hdf ctxtr2 -o o26 -raster -e 50 50 # # C: binary (3x4) => image and SDS ./fp2hdf cb64r2 -o o27 -raster -i 50 50 -f # # # Fortran: text (3x4) => SDS ./fp2hdf ftxtr2 -o o30 # # Fortran: text (3x4x5) => SDS ./fp2hdf ftxtr3 -o o31 # # Fortran: binary 32-bit (3x4) => SDS ./fp2hdf fb32r2 -o o32 # # Fortran: binary 32-bit (3x4x5) => SDS ./fp2hdf fb32r3 -o o33 # # Fortran: binary 64-bit (3x4) => SDS ./fp2hdf fb64r2 -o o34 # # Fortran: binary 64-bit (3x4x5) => SDS ./fp2hdf fb64r3 -o o35 # # Fortran: text (3x4) => image ./fp2hdf ftxtr2 -o o36 -raster -e 50 50 # # Fortran: binary (3x4) => image and SDS ./fp2hdf fb64r2 -o o37 -raster -i 50 50 -f # # # Compare files o20-o27 with o30-o37. They should be the same. # cmp o20 o30 cmp o21 o31 cmp o22 o32 cmp o23 o33 cmp o24 o34 cmp o25 o35 cmp o26 o36 cmp o27 o37 unset echo hdf4-hdf4.3.1/hdf/util/fp2hdf.test.result000066400000000000000000000026111503061704500201340ustar00rootroot00000000000000********** This is approximately with should be written ********** ********** to the screen when you run fp2hdf.test. ********** fp2hdf t100x100 -o o1 fp2hdf t100x100 -o o2 -r fp2hdf t100x100 -o o3 -r -f fp2hdf h100x100 -o o4 -r -f fp2hdf h100x100 -o o5 -f -r -p pal.hdf fp2hdf h100x100 -o o6 -r -e 200 200 fp2hdf h100x100 -o o7 -r -i 200 200 fp2hdf h100x100 -o o8 -r -i 40 120 -p pal.hdf fp2hdf h100x100 -o o9 -r -e 40 120 -p pal.hdf Warning: cannot make image smaller using -e option. Horiz. resolution will be made the same as horiz. dimension of the dataset, which is: 100. fp2hdf h60x75 -o o10 -r -e 120 160 -p pal.hdf fp2hdf h100x100h -o o11 -f -r -p pal.hdf fp2hdf h100x100hv -o o12 -f -r -p pal.hdf fp2hdf h60x75v -o o13 -r -e 120 160 -p pal.hdf fp2hdf h60x75n -o o14 -r -e 120 150 -p pal.hdf fp2hdf t100x100 h100x100 h100x100h h100x100hv h60x75 h60x75v -o o15 -r -e 100 10 0 fp2hdf ctxtr2 -o o20 fp2hdf ctxtr3 -o o21 fp2hdf cb32r2 -o o22 fp2hdf cb32r3 -o o23 fp2hdf cb64r2 -o o24 fp2hdf cb64r3 -o o25 fp2hdf ctxtr2 -o o26 -raster -e 50 50 fp2hdf cb64r2 -o o27 -raster -i 50 50 -f fp2hdf ftxtr2 -o o30 fp2hdf ftxtr3 -o o31 fp2hdf fb32r2 -o o32 fp2hdf fb32r3 -o o33 fp2hdf fb64r2 -o o34 fp2hdf fb64r3 -o o35 fp2hdf ftxtr2 -o o36 -raster -e 50 50 fp2hdf fb64r2 -o o37 -raster -i 50 50 -f cmp o20 o30 cmp o21 o31 cmp o22 o32 cmp o23 o33 cmp o24 o34 cmp o25 o35 cmp o26 o36 cmp o27 o37 hdf4-hdf4.3.1/hdf/util/fptest.c000066400000000000000000000211661503061704500162240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "hdf.h" #ifdef H4_HAVE_SYS_STAT_H #include #endif #ifdef H4_HAVE_FCNTL_H #include #endif /* * Name: * fptest * * Description: * This program creates six floating point files that can be * used to test the fp2hdf program. * * June 1, 1990 * Bob Weaver, baw@inel.gov * * The file names that are created are named: * ctxtr2, type 'TEXT', size 3x4 * ctxtr3, type 'TEXT', size 3x4x5 * cb32r2, type 'FP32', size 3x4 * cb32r3, type 'FP32', size 3x4x5 * cb64r2, type 'FP64', size 3x4 * cb64r3, type 'FP64', size 3x4x5 * * row values start at 11 and increment by 1 => 11, 12, 13 * column values start at 21 and increment by 2 => 21, 23, 25, 27 * plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71 * * data element value = row value + column value [+ plane value, if rank=3] */ int main(void) { int nrow = 3, ncol = 4, npln = 5, ione = 1; int i, j, k; FILE *sp; float32 b32r2[3][4], b32r3[5][3][4]; float32 row4[3], col4[4], pln4[5]; float32 rowo4 = (float32)11.0e0, colo4 = (float32)21.0e0, plno4 = (float32)51.0e0; float32 rowi4 = (float32)1.0e0, coli4 = (float32)2.0e0, plni4 = (float32)5.0e0; float32 ezero = (float32)0.0e0; float64 b64r2[3][4], b64r3[5][3][4]; float64 row8[3], col8[4], pln8[5]; float64 rowo8 = 11.0e0, colo8 = 21.0e0, plno8 = 51.0e0; float64 rowi8 = 1.0e0, coli8 = 2.0e0, plni8 = 5.0e0; float64 dzero = 0.0e0; const char *text = "TEXT"; const char *fp32 = "FP32"; const char *fp64 = "FP64"; /* * initialize the row, column, and plane vectors * * row values start at 11 and increment by 1 => 11, 12, 13 * column values start at 21 and increment by 2 => 21, 23, 25, 27 * plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71 */ row4[0] = rowo4; col4[0] = colo4; pln4[0] = plno4; row8[0] = rowo8; col8[0] = colo8; pln8[0] = plno8; for (i = 1; i < nrow; i++) { row4[i] = row4[i - 1] + rowi4; row8[i] = row8[i - 1] + rowi8; } for (j = 1; j < ncol; j++) { col4[j] = col4[j - 1] + coli4; col8[j] = col8[j - 1] + coli8; } for (k = 1; k < npln; k++) { pln4[k] = pln4[k - 1] + plni4; pln8[k] = pln8[k - 1] + plni8; } /* * build array elements - rank 2 * * element value = sum of row value and col values */ for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) { b32r2[i][j] = row4[i] + col4[j]; b64r2[i][j] = row8[i] + col8[j]; } } /* * build array elements - rank 3 * * element value = sum of row value, col, and plane values */ for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) { for (k = 0; k < npln; k++) { b32r3[k][i][j] = row4[i] + col4[j] + pln4[k]; b64r3[k][i][j] = row8[i] + col8[j] + pln8[k]; } } } /* * text file - rank 2 & 3 */ /* For WINDOWS platform, file mode should be set explicitly. For text mode, set it to Text; for binary mode, set it to BINARY. */ #if defined H4_HAVE_WIN32_API _fmode = _O_TEXT; #endif sp = fopen("ctxtr2", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", ione, nrow, ncol); fprintf(sp, "%14.6E%14.6E\n", ezero, ezero); for (i = 0; i < nrow; i++) fprintf(sp, "%14.6E", row4[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", col4[j]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", b32r2[i][j]); fprintf(sp, "\n"); } (void)fclose(sp); sp = fopen("ctxtr3", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", npln, nrow, ncol); fprintf(sp, "%14.6E%14.6E\n", ezero, ezero); for (k = 0; k < npln; k++) fprintf(sp, "%14.6E", pln4[k]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) fprintf(sp, "%14.6E", row4[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", col4[j]); fprintf(sp, "\n"); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", b32r3[k][i][j]); fprintf(sp, "\n"); } (void)fclose(sp); /* * binary 32-bit file - rank 2 & 3 */ #if defined H4_HAVE_WIN32_API _fmode = _O_BINARY; #endif sp = fopen("cb32r2", "w"); (void)fwrite(fp32, sizeof(int), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4[i], sizeof(float32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4[j], sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32r2[i][j], sizeof(float32), 1, sp); (void)fclose(sp); sp = fopen("cb32r3", "w"); (void)fwrite(fp32, sizeof(int), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln4[k], sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4[i], sizeof(float32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4[j], sizeof(float32), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32r3[k][i][j], sizeof(float32), 1, sp); (void)fclose(sp); /* * binary 64-bit file - rank 2 & 3 */ sp = fopen("cb64r2", "w"); (void)fwrite(fp64, sizeof(int), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row8[i], sizeof(float64), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col8[j], sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b64r2[i][j], sizeof(float64), 1, sp); (void)fclose(sp); sp = fopen("cb64r3", "w"); (void)fwrite(fp64, sizeof(int), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln8[k], sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row8[i], sizeof(float64), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col8[j], sizeof(float64), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b64r3[k][i][j], sizeof(float64), 1, sp); (void)fclose(sp); return EXIT_SUCCESS; } hdf4-hdf4.3.1/hdf/util/gif.h000066400000000000000000000120021503061704500154560ustar00rootroot00000000000000/****************************************************************************\ ** Title: GIF.H ** ** Purpose: GIF Header file ** ** Version: 1.0 ** ** Date: March 1992 ** ** Author: James D. Murray, Anaheim, CA, USA ** ** C Compilers: Borland C++ v2.0, Microsoft C v6.00a ** ** ** ** This file contains the header structures for the GIF image ** ** file format. ** ** ** ** ** ** Copyright (C) 1991 by Graphics Software Labs. All rights reserved. ** \****************************************************************************/ #include "hdf.h" #ifndef GIF_H #define GIF_H 1 #define MAX_PAL 768 /*#include "datatype.h" Data type definitions */ typedef uint8 BYTE; typedef uint16 WORD; typedef char CHAR; typedef uint8 boolean; #define false 0; #define true 1; /* Set the EndianOrder. ** The GIF Reader file should do this. ** Set EndianOrder = 0 if machine is little endian ** EndianOrder = 1 if machine is big endian. */ extern int EndianOrder; /* ** The GIF header format. ** ** This structure actually contains the header, logical screen ** descriptor, and the global color table for the GIF image. */ typedef struct _GifHeader /* Offset Description */ { BYTE PackedField; /* 0Ah Color Information */ WORD TableSize; BYTE ImageCount; /* Keep a count of the number of images */ BYTE CommentCount; BYTE ApplicationCount; BYTE PlainTextCount; BYTE HDFPalette[256][3]; BYTE HeaderDump[6]; /* BYTE array to dump header contents */ BYTE LSDDump[7]; /* Logical Screen Descriptor dump */ } GIFHEAD; /* ** The GIF Image Descriptor. */ typedef struct _GifImageDescriptor { WORD ImageWidth; /* Width of the image in pixels */ WORD ImageHeight; /* Height of the image in pixels */ BYTE PackedField; /* Image and Color Table Data Information */ WORD TableSize; WORD CodeSize; /* Minimum LZW CodeSize for image data */ BYTE HDFPalette[256][3]; BYTE GIDDump[9]; /* GifImageDescriptor dump */ BYTE *Image; /* Decompressed Raster Image */ BYTE *GIFImage; } GIFIMAGEDESC; /* ** GIF 89a Graphic Control Extension Block */ typedef struct _GifGraphicControlExtension { BYTE GCEDump[5]; /* Graphic Control Extension Dump */ } GIFGRAPHICCONTROL; /* ** GIF 89a Plain Text Extension Block */ typedef struct _GifPlainTextExtension { BYTE PTEDump[15]; /* Plain Text Extension Dump */ BYTE *PlainTextData; /* Plain Text data sub-blocks */ WORD DataSize; } GIFPLAINTEXT; /* ** GIF 89a Application Extension Block */ typedef struct _GifApplicationExtension { BYTE AEDump[14]; /* Application Extension Dump */ BYTE *ApplicationData; /* Application data sub-blocks */ WORD DataSize; } GIFAPPLICATION; /* ** GIF 89a Comment Extension Block */ typedef struct _GifCommentExtension { BYTE CEDump[2]; /* Comment Extension Dump */ BYTE *CommentData; /* Comment data sub-blocks */ WORD DataSize; BYTE Terminator; /* Block Terminator (always 0) */ } GIFCOMMENT; /* ** GIF to HDF Memory Struct ** Purpose : The gif to hdf structure is used to pass all the ** gif data to the memory, which gets caught by the hdf driver ** Its the drivers job to put the data in the appropriate places ** in the HDF file. ** I have assumed that the ImageDescriptors and GraphicControls follow ** one another, ie. I have not associated them with each other. The driver ** must assume a 1-1 correspondence. The same discussion with plain text ** extension. */ typedef struct _GifToMem { GIFHEAD *GifHeader; GIFIMAGEDESC **GifImageDesc; GIFGRAPHICCONTROL **GifGraphicControlExtension; GIFPLAINTEXT **GifPlainTextExtension; GIFAPPLICATION **GifApplicationExtension; GIFCOMMENT **GifCommentExtension; } GIFTOMEM; /* ** Function Prototypes */ /* GIF2MEM.C */ GIFTOMEM Gif2Mem(BYTE *); /* GIFREAD.C */ int ReadGifHeader(GIFHEAD *, BYTE **); int ReadGifImageDesc(GIFIMAGEDESC *, BYTE **); int ReadGifGraphicControl(GIFGRAPHICCONTROL *, BYTE **); int ReadGifPlainText(GIFPLAINTEXT *, BYTE **); int ReadGifApplication(GIFAPPLICATION *, BYTE **); int ReadGifComment(GIFCOMMENT *, BYTE **); /* WRITEHDF.C */ int WriteHDF(GIFTOMEM, CHAR *, CHAR *); BYTE *ReadDataSubBlocks(BYTE **, WORD *); BYTE *Decompress(GIFIMAGEDESC *, GIFHEAD *); BYTE GetByte(BYTE *); WORD GetWord(BYTE *); #endif /* GIF_H */ hdf4-hdf4.3.1/hdf/util/gif2hdf.c000066400000000000000000000122311503061704500162210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "gif.h" int main(int argv, char *argc[]) { GIFTOMEM GifMemoryStruct; FILE *fpGif; int32 i; int32 filesize; BYTE *MemGif; BYTE *StartPos; char GIFFileName[256]; char HDFFileName[256]; /* Initialize all GifMemoryStruct pointers to null ** to prevent hassles later on */ GifMemoryStruct.GifHeader = NULL; GifMemoryStruct.GifImageDesc = NULL; GifMemoryStruct.GifGraphicControlExtension = NULL; GifMemoryStruct.GifPlainTextExtension = NULL; GifMemoryStruct.GifApplicationExtension = NULL; GifMemoryStruct.GifCommentExtension = NULL; if (argv < 3) { printf("\n\nWrong Usage. Use:\ngif2hdf \n\n"); return (-1); } strncpy(GIFFileName, argc[1], VSNAMELENMAX - 1); strncpy(HDFFileName, argc[2], VSNAMELENMAX - 1); GIFFileName[VSNAMELENMAX - 1] = '\0'; HDFFileName[VSNAMELENMAX - 1] = '\0'; if (!(fpGif = fopen(GIFFileName, "rb"))) { printf("Unable to open GIF file for reading.\n"); printf("Filename (including path) must be less than %d characters in length\n", VSNAMELENMAX); exit(-1); } /* Get the whole file into memory. Mem's much faster than I/O */ fseek(fpGif, 0L, 2); filesize = ftell(fpGif); fseek(fpGif, 0L, 0); if (filesize == 0) printf("File Size Zero"); if (!(MemGif = StartPos = (BYTE *)malloc(filesize))) { printf("Out of memory"); exit(-1); } if (fread(MemGif, filesize, 1, fpGif) != 1) { printf("Corrupted Input File"); exit(-1); } fseek(fpGif, 0L, 0); /* ** Call Gif2Mem and break the whole file into parts. ** Gif2Mem also calls decompresses the images so we don't ** have to worry about that */ GifMemoryStruct = Gif2Mem(MemGif); if (ferror(fpGif)) { printf("File Stream Error\n\n"); exit(-1); } fclose(fpGif); /* Call WriteHDF from here. Go ahead and change WriteHDF to write ** whatever format you want */ if (WriteHDF(GifMemoryStruct, argc[2], argc[1])) printf("HDF Write Error\n\n"); /* Free all buffers */ if (GifMemoryStruct.GifImageDesc != NULL) { int32 imageCount = (int32)(GifMemoryStruct.GifHeader)->ImageCount; for (i = 0; i < imageCount; i++) { if (GifMemoryStruct.GifImageDesc[i] != NULL) { free(GifMemoryStruct.GifImageDesc[i]->Image); free(GifMemoryStruct.GifImageDesc[i]); } free(GifMemoryStruct.GifGraphicControlExtension[i]); } free(GifMemoryStruct.GifImageDesc); free(GifMemoryStruct.GifGraphicControlExtension); } if (GifMemoryStruct.GifApplicationExtension != NULL) { int32 appExtCount = (int32)(GifMemoryStruct.GifHeader)->ApplicationCount; for (i = 0; i < appExtCount; i++) { if (GifMemoryStruct.GifApplicationExtension[i] != NULL) { free(GifMemoryStruct.GifApplicationExtension[i]->ApplicationData); free(GifMemoryStruct.GifApplicationExtension[i]); } } free(GifMemoryStruct.GifApplicationExtension); } if (GifMemoryStruct.GifPlainTextExtension != NULL) { int32 plainTextCount = (int32)(GifMemoryStruct.GifHeader)->PlainTextCount; for (i = 0; i < plainTextCount; i++) { if (GifMemoryStruct.GifPlainTextExtension[i] != NULL) { free(GifMemoryStruct.GifPlainTextExtension[i]->PlainTextData); free(GifMemoryStruct.GifPlainTextExtension[i]); } } free(GifMemoryStruct.GifPlainTextExtension); } if (GifMemoryStruct.GifCommentExtension != NULL) { int32 commentCount = (int32)(GifMemoryStruct.GifHeader)->CommentCount; for (i = 0; i < commentCount; i++) { if (GifMemoryStruct.GifCommentExtension[i] != NULL) { free(GifMemoryStruct.GifCommentExtension[i]->CommentData); free(GifMemoryStruct.GifCommentExtension[i]); } } free(GifMemoryStruct.GifCommentExtension); } free(StartPos); free(GifMemoryStruct.GifHeader); return (0); } hdf4-hdf4.3.1/hdf/util/gif2mem.c000066400000000000000000000343031503061704500162420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** This file contains snippets of code from James Murray's original file ** to display the GIF header information, but most of it has been modified to ** suit gif2hdf */ /****************************************************************************\ ** Title: GIFHEAD.C ** ** Purpose: Display the data in a GIF image file. ** ** Version: 1.0 ** ** Date: March 1992 ** ** Author: James D. Murray, Anaheim, CA, USA ** ** C Compilers: Borland C++ v2.0, Microsoft C v6.00a ** ** ** ** GIFHEAD displays all real information contained within a GIF image ** ** file, including all color tables and extension block information. ** ** GIFHEAD reads both GIF 87a and 89a-format files. ** ** ** ** Copyright (C) 1991-92 by Graphics Software Labs. All rights reserved. ** \****************************************************************************/ #include #include #include "gif.h" #include "hdf.h" #define GIF_VERSION "1.00" extern int EndianOrder; GIFTOMEM Gif2Mem(BYTE *MemGif) { /* ** The gif structure outline for passing data to memory ** is given in gif.h ** These pointers are redundant, should take them out in ver. 2 */ GIFHEAD *gifHead; /* GIF Header structure */ GIFIMAGEDESC **gifImageDesc; /* Logical Image Descriptor struct */ GIFPLAINTEXT **gifPlainText; /* Plain Text Extension structure */ GIFAPPLICATION **gifApplication; /* Application Extension structure */ GIFCOMMENT **gifComment; /* Comment Extension structure */ GIFGRAPHICCONTROL **gifGraphicControl; /* Graphic Control Extension strct */ GIFTOMEM GifMemoryStruct; WORD i; /* Loop counter */ BYTE Identifier; /* Extension block identifier holder */ BYTE Label; /* Extension block label holder */ BYTE ImageCount; /* Count of the number of images in the file */ BYTE ImageArray; /* Keep the size of the array to store Images */ BYTE CommentCount; BYTE CommentArray; BYTE ApplicationCount; BYTE ApplicationArray; BYTE PlainTextCount; BYTE PlainTextArray; BYTE GCEflag; BYTE aTemp; BYTE j; BYTE w; /* Two more variables needed only while testing */ BYTE *b; /* Endian Ordering */ /* Allocate memory for the GIF structures */ /* Plug the structs into GifMemoryStruct at the end */ /****************************************************/ if (!(gifHead = (GIFHEAD *)calloc(1, sizeof(GIFHEAD)))) { printf("Could not allocate memory for gifHead\n"); exit(-1); } /* ** The next three have to grow dynamically so we leave them ** for now and let realloc handle it later on. */ gifImageDesc = NULL; gifPlainText = NULL; gifGraphicControl = NULL; gifComment = NULL; gifApplication = NULL; /******************************/ /* Memory allocation complete */ /* Carry out Endian Testing and set Endian Order */ w = 0x0001; b = (BYTE *)&w; EndianOrder = (b[0] ? 1 : 0); /* Read the GIF image file header information */ ReadGifHeader(gifHead, &MemGif); /* Check for FILE stream error */ /* if (ferror(fpGif)) { fputs("GIFHEAD: Error reading header information!\n", stderr); exit(-3); } */ /* ** Identify, read, and display block information. */ ImageCount = ImageArray = 0; CommentCount = CommentArray = 0; ApplicationCount = ApplicationArray = 0; PlainTextCount = PlainTextArray = 0; GCEflag = 0; for (;;) { Identifier = *MemGif++; switch (Identifier) { case 0x3B: /* Trailer */ /* The counts are stored to make it easier while ** putting stuff into the HDF file and then ** deallocating space. */ gifHead->ImageCount = ImageCount; gifHead->CommentCount = CommentCount; gifHead->ApplicationCount = ApplicationCount; gifHead->PlainTextCount = PlainTextCount; /* putting stuff into the gif2mem structure */ GifMemoryStruct.GifHeader = gifHead; GifMemoryStruct.GifImageDesc = gifImageDesc; GifMemoryStruct.GifPlainTextExtension = gifPlainText; GifMemoryStruct.GifApplicationExtension = gifApplication; GifMemoryStruct.GifCommentExtension = gifComment; GifMemoryStruct.GifGraphicControlExtension = gifGraphicControl; /* return the struct */ return GifMemoryStruct; case 0x2C: /* Image Descriptor */ /* If there was no image descriptor before this increase image count. ** If an imagedescriptor was present, reset GCEflag */ if (GCEflag == 0) ImageCount++; else GCEflag = 0; if (ImageCount > ImageArray) { aTemp = ImageArray; ImageArray = (ImageArray << 1) + 1; if (!(gifImageDesc = (GIFIMAGEDESC **)realloc(gifImageDesc, sizeof(GIFIMAGEDESC *) * ImageArray))) { printf("Out of memory!"); exit(-1); } if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc( gifGraphicControl, sizeof(GIFGRAPHICCONTROL *) * ImageArray))) { printf("Out of memory!"); exit(-1); } for (j = aTemp; j < ImageArray; j++) { gifGraphicControl[j] = NULL; gifImageDesc[j] = NULL; } } if (!(gifImageDesc[ImageCount - 1] = (GIFIMAGEDESC *)malloc(sizeof(GIFIMAGEDESC)))) { printf("Out of memory!"); exit(-1); } if (ReadGifImageDesc(gifImageDesc[ImageCount - 1], &MemGif) == -1) fputs("Error reading Image Descriptor information\n", stderr); /* ** Decompress the Image */ gifImageDesc[ImageCount - 1]->Image = Decompress(gifImageDesc[ImageCount - 1], gifHead); free(gifImageDesc[ImageCount - 1]->GIFImage); gifImageDesc[ImageCount - 1]->GIFImage = NULL; /* ** Convert the local palette into an HDF compatible palette ** In case the local color table is present, it is written out as the HDFPalette ** If it is absent the global table is written as the HDFPalette. */ if (!((gifImageDesc[ImageCount - 1]->PackedField) & 0x80)) { /* Check to see if the global color table exists.... */ if (gifHead->PackedField & 0x80) { for (i = 0; i < gifHead->TableSize; i++) { gifImageDesc[ImageCount - 1]->HDFPalette[i][0] = gifHead->HDFPalette[i][0]; gifImageDesc[ImageCount - 1]->HDFPalette[i][1] = gifHead->HDFPalette[i][1]; gifImageDesc[ImageCount - 1]->HDFPalette[i][2] = gifHead->HDFPalette[i][2]; } } gifImageDesc[ImageCount - 1]->TableSize = gifHead->TableSize; } break; case 0x21: /* Extension Block */ Label = *MemGif++; switch (Label) { case 0x01: /* Plain Text Extension */ puts("Plain Text Extension\n"); PlainTextCount++; if (PlainTextCount > PlainTextArray) PlainTextArray = (PlainTextArray << 1) + 1; if (!(gifPlainText = (GIFPLAINTEXT **)realloc(gifPlainText, sizeof(GIFPLAINTEXT *) * PlainTextArray))) { printf("Out of memory!"); exit(-1); } if (!(gifPlainText[PlainTextCount - 1] = (GIFPLAINTEXT *)malloc(sizeof(GIFPLAINTEXT)))) { printf("Out of memory!"); exit(-1); } if (ReadGifPlainText(gifPlainText[PlainTextCount - 1], &MemGif)) fprintf(stderr, "Error reading Plain Text Extension information.\n"); break; case 0xFE: /* Comment Extension */ CommentCount++; if (CommentCount > CommentArray) CommentArray = (CommentArray << 1) + 1; if (!(gifComment = (GIFCOMMENT **)realloc(gifComment, sizeof(GIFCOMMENT *) * CommentArray))) { printf("Out of memory!"); exit(-1); } if (!(gifComment[CommentCount - 1] = (GIFCOMMENT *)malloc(sizeof(GIFCOMMENT)))) { printf("Out of memory!"); exit(-1); } if (ReadGifComment(gifComment[CommentCount - 1], &MemGif)) fprintf(stderr, "Error reading Comment Extension information\n"); break; case 0xF9: /* Graphic Control Extension */ if (GCEflag == 0) ImageCount++; GCEflag = 1; if (ImageCount > ImageArray) { aTemp = ImageArray; ImageArray = (ImageArray << 1) + 1; if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc( gifGraphicControl, sizeof(GIFGRAPHICCONTROL *) * ImageArray))) { printf("Out of memory!"); exit(-1); } if (!(gifImageDesc = (GIFIMAGEDESC **)realloc( gifImageDesc, sizeof(GIFIMAGEDESC *) * ImageArray))) { printf("Out of memory!"); exit(-1); } for (j = aTemp; j < ImageArray; j++) { gifGraphicControl[j] = NULL; gifImageDesc[j] = NULL; } } if (!(gifGraphicControl[ImageCount - 1] = (GIFGRAPHICCONTROL *)malloc(sizeof(GIFGRAPHICCONTROL)))) { printf("Out of memory!"); exit(-1); } if (ReadGifGraphicControl(gifGraphicControl[ImageCount - 1], &MemGif)) fprintf(stderr, "Error reading Graphic Control Extension information\n"); if (!(*MemGif++ == 0)) fprintf(stderr, "Error reading Graphic Control Extension\n"); break; case 0xFF: /* Application Extension */ ApplicationCount++; if (ApplicationCount > ApplicationArray) ApplicationArray = (ApplicationArray << 1) + 1; if (!(gifApplication = (GIFAPPLICATION **)realloc( gifApplication, sizeof(GIFAPPLICATION *) * ApplicationArray))) { printf("Out of memory!"); exit(-1); } if (!(gifApplication[ApplicationCount - 1] = (GIFAPPLICATION *)malloc(sizeof(GIFAPPLICATION)))) { printf("Out of memory!"); exit(-1); } if (ReadGifApplication(gifApplication[ApplicationCount - 1], &MemGif)) fprintf(stderr, "Error reading Application Extension information\n"); break; default: printf("Unknown Extension Label: 0x%02x\n", Label); break; } break; default: fprintf(stderr, "Unknown Block Separator Character: 0x%02x\n", Identifier); } } } hdf4-hdf4.3.1/hdf/util/gifread.c000066400000000000000000000332441503061704500163200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /****************************************************************************\ ** Title: GIFREAD.C ** ** Purpose: Read the information from a GIF file. ** ** Version: 1.0 ** ** Date: March 1992 ** ** Author: James D. Murray, Anaheim, CA USA ** ** C Compilers: Borland C++ v2.0, Microsoft C v6.00a ** ** ** ** This module contains six functions which read various data structures ** ** stored in GIF 87a and 89a-format files. ** ** ** ** This module contains the following functions: ** ** ** ** ReadGifHeader - Read a GIF image file Header ** ** ReadGifImageDesc - Read a GIF Local Image Descriptor ** ** ReadGifGraphicControl - Read a GIF Graphic Control Extension block ** ** ReadGifPlainText - Read a GIF Plain Text Extension block ** ** ReadGifApplication - Read a GIF Application Extension block ** ** ReadGifComment - Read a GIF Comment Extension block ** ** ReadDataSubBlocks - Read one or more GIF data sub-blocks ** ** ** ** Copyright (C) 1991,92 by Graphics Software Labs. All rights reserved. ** \****************************************************************************/ #include #include #include #include "gif.h" /* External global variables */ /* WORD (*GetWord)(FILE *); ** DWORD (*GetDword)(FILE *); */ int EndianOrder; WORD GetWord(BYTE *MemGif) { WORD w; if (EndianOrder == 1) { /* LittleEndian */ w = (WORD)(*MemGif++ & 0xFF); w |= (WORD)((*MemGif++ & 0xFF) << 0x08); } else { w = (WORD)(*MemGif++ & 0xFF); w = ((WORD)(*MemGif++ & 0xFF)) | (w << 0x08); } return w; } BYTE GetByte(BYTE *MemGif) { return *MemGif; } /* ** Read a GIF image BYTE Header. ** ** This function reads the Header, Logical Screen Descriptor, and ** Global Color Table (if any) from a GIF image file. The information ** is stored in a GIFHEAD structure. ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifHead - Pointer to GIF header structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifHeader(GIFHEAD *GifHead, /* Pointer to GIF header structure */ BYTE **MemGif2) /* GIF image file input FILE stream */ { WORD i; /* Loop counter */ WORD tableSize; /* Number of entries in the Global Color Table */ GifHead->TableSize = 0; for (i = 0; i < 6; i++) { GifHead->HeaderDump[i] = *(*MemGif2)++; } if (strncmp((char *)GifHead->HeaderDump, "GIF", 3)) { printf("The file does not appear to be a valid GIF file.\n"); exit(-1); } for (i = 0; i < 7; i++) { GifHead->LSDDump[i] = *(*MemGif2)++; } GifHead->PackedField = GifHead->LSDDump[4]; /* Check if a Global Color Table is present */ if (GifHead->PackedField & 0x80) { /* Read number of color table entries */ tableSize = (WORD)(1L << ((GifHead->PackedField & 0x07) + 1)); GifHead->TableSize = tableSize; /* Read the Global Color Table */ /* ** There are some changes made here apart from just ** reading in the global color table as would ** seem intuitively obvious. ** The colors are stored in the bottom part of the ** palette as opposed to the top */ for (i = 0; i < tableSize; i++) { GifHead->HDFPalette[i][0] = *(*MemGif2)++; GifHead->HDFPalette[i][1] = *(*MemGif2)++; GifHead->HDFPalette[i][2] = *(*MemGif2)++; } } /* Check for a FILE stream error */ /* if (ferror(FpGif)) return(-1); */ return (0); /* No FILE stream error occurred */ } /* ** Read a GIF Local Image Descriptor. ** ** This function reads the Local Image Descriptor, and Local Color ** Table (if any) from a GIF image file. The information is stored ** in a GIFIMAGEDESC structure. ** ** Note that the ImageSeparator field value in the GIFIMAGEDESC ** structure is assigned by the function calling ReadGifImageDesc(). ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifImageDesc - Pointer to GIF image descriptor structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifImageDesc(GIFIMAGEDESC *GifImageDesc, BYTE **MemGif2) { WORD i; /* Loop counter */ WORD tableSize; /* Number of entries in the Local Color Table */ BYTE *TempPtr; int ch, ch1; GifImageDesc->TableSize = 0; for (i = 0; i < 9; i++) { GifImageDesc->GIDDump[i] = *(*MemGif2)++; } /* ** Get the relevant fields. I need ImageWidth and Height actively hence I have ** taken information from those fields. I intend to keep the GifImageDesc data ** structure as it is so that anyone needing the rest of the fields can do so ** quickly. */ if (EndianOrder == 1) /* LittleEndian */ { GifImageDesc->ImageWidth = (WORD)(GifImageDesc->GIDDump[4] & 0xFF); GifImageDesc->ImageWidth |= (WORD)((GifImageDesc->GIDDump[5] & 0xFF) << 0x08); GifImageDesc->ImageHeight = (WORD)(GifImageDesc->GIDDump[6] & 0xFF); GifImageDesc->ImageHeight |= (WORD)((GifImageDesc->GIDDump[7] & 0xFF) << 0x08); } else { GifImageDesc->ImageWidth = (WORD)(GifImageDesc->GIDDump[4] & 0xFF); GifImageDesc->ImageWidth = ((WORD)(GifImageDesc->GIDDump[5] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08); GifImageDesc->ImageHeight = (WORD)(GifImageDesc->GIDDump[6] & 0xFF); GifImageDesc->ImageHeight = ((WORD)(GifImageDesc->GIDDump[7] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08); } GifImageDesc->PackedField = GifImageDesc->GIDDump[8]; /* Check if a Local Color Table is present */ if (GifImageDesc->PackedField & 0x80) { /* Read number of color table entries */ tableSize = (WORD)(1L << ((GifImageDesc->PackedField & 0x07) + 1)); GifImageDesc->TableSize = tableSize; /* Read the Local Color Table */ for (i = 0; i < tableSize; i++) { GifImageDesc->HDFPalette[i][0] = *(*MemGif2)++; GifImageDesc->HDFPalette[i][1] = *(*MemGif2)++; GifImageDesc->HDFPalette[i][2] = *(*MemGif2)++; } } /* ** Get LZW minimum Code Size */ GifImageDesc->CodeSize = (WORD) * (*MemGif2)++; /*GifImageDesc->GIFImage = ReadDataSubBlocks(FpGif);*/ if (!(GifImageDesc->GIFImage = (BYTE *)malloc((GifImageDesc->ImageWidth) * (GifImageDesc->ImageHeight)))) { printf("Out of memory"); exit(-1); } TempPtr = GifImageDesc->GIFImage; do { ch = ch1 = (int)*(*MemGif2)++; while (ch--) *TempPtr++ = *(*MemGif2)++; } while (ch1); return (0); /* No FILE stream error occurred */ } /* ** Read a GIF Graphic Control Extension block. ** ** Note that the Introducer and Label field values in the GIFGRAPHICCONTROL ** structure are assigned by the function calling ReadGifGraphicControl(). ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifGraphicControl - Pointer to GC Extension structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifGraphicControl(GIFGRAPHICCONTROL *GifGraphicControl, BYTE **MemGif2) { int i; for (i = 0; i < 5; i++) { GifGraphicControl->GCEDump[i] = *(*MemGif2)++; } return (0); /* No FILE stream error occurred */ } /* ** Read a GIF Plain Text Extension block. ** ** Note that the Introducer and Label field values in the GIFLPLAINTEXT ** structure are assigned by the function calling ReadGifPlainText(). ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifPlainText - Pointer to Plain Text Extension structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifPlainText(GIFPLAINTEXT *GifPlainText, BYTE **MemGif2) { int i; for (i = 0; i < 13; i++) { GifPlainText->PTEDump[i] = *(*MemGif2)++; } /* Read in the Plain Text data sub-blocks */ if (!(GifPlainText->PlainTextData = ReadDataSubBlocks(MemGif2, &(GifPlainText->DataSize)))) return (1); /* GifPlainText->Terminator = 0; */ /* Check for a FILE stream error */ /* if (ferror(FpGif)) return(-1); */ return (0); /* No FILE stream error occurred */ } /* ** Read a GIF Application Extension block. ** ** Note that the Introducer and Label field values in the GIFAPPLICATION ** structure are assigned by the function calling ReadGifApplication(). ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifApplication - Pointer to Application Extension structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifApplication(GIFAPPLICATION *GifApplication, BYTE **MemGif2) { int i; for (i = 0; i < 12; i++) { GifApplication->AEDump[i] = *(*MemGif2)++; } /* Read in the Plain Text data sub-blocks */ if (!(GifApplication->ApplicationData = ReadDataSubBlocks(MemGif2, &(GifApplication->DataSize)))) return (1); /* GifApplication->Terminator = 0; */ /* Check for a FILE stream error */ /* if (ferror(FpGif)) return(-1); */ return (0); /* No FILE stream error occurred */ } /* ** Read a GIF Comment Extension block. ** ** Note that the Introducer and Label field values in the GIFCOMMENT ** structure are assigned by the function calling ReadGifComment(). ** ** Returns: -1 if a FILE stream error occurred during the read, ** otherwise 0 if no error occurred. ** GifComment - Pointer to GIF Comment Extension structure ** MemGif2 - GIF image file input FILE stream */ int ReadGifComment(GIFCOMMENT *GifComment, BYTE **MemGif2) { /* Read in the Plain Text data sub-blocks */ if (!(GifComment->CommentData = ReadDataSubBlocks(MemGif2, &(GifComment->DataSize)))) return (1); GifComment->Terminator = 0; return (0); /* No FILE stream error occurred */ } /* ** Read one or more GIF data sub-blocks and write the information ** to a buffer. ** ** A GIF "sub-block" is a single count byte followed by 1 to 255 ** additional data bytes. ** ** Returns: A NULL pointer if a memory allocation error occurred, ** otherwise a valid pointer if no error occurred. ** MemGif2 - GIF image file input FILE stream */ BYTE * ReadDataSubBlocks(BYTE **MemGif2, WORD *DSize) { BYTE *ptr1; /* Pointer used to "walk the heap" */ BYTE *ptr2; /* Pointer used to mark the top of the heap */ BYTE dataSize; /* Size of the current data sub-block being read */ WORD bufSize; /* Total size of the Plain Text data buffer */ int tempcount = 0; bufSize = 0; /* The output buffer is empty */ dataSize = *(*MemGif2)++; /* Get the size of the first sub-block */ /* Allocate initial data buffer */ if (!(ptr1 = ptr2 = (BYTE *)malloc(dataSize + 1))) { printf("Out of memory. Allocation of memory for data sub-blocks for\neither Comment, Plain Text or " "Application Extensions failed"); return ((BYTE *)NULL); } for (;;) { tempcount++; bufSize += (dataSize); /* Running total of the buffer size */ *DSize = bufSize; #ifdef NO *ptr1++ = dataSize; /* Write the data count */ #endif while (dataSize--) /* Read/write the Plain Text data */ *ptr1++ = *(*MemGif2)++; /* Check if there is another data sub-block */ if ((dataSize = *(*MemGif2)++) == 0) break; /* Block Terminator encountered */ /* Increase the buffer size to accommodate the next sub-block */ if (!(ptr1 = ptr2 = (BYTE *)realloc(ptr2, bufSize + dataSize + 1))) return ((BYTE *)NULL); ptr1 += bufSize; /* Move pointer to the end of the data */ } #ifdef NO *ptr1++ = (BYTE)NULL; /* Add NULL to simulate Terminator value */ #endif *ptr1++ = '\0'; return (ptr2); /* Return a pointer to the sub-block data */ } hdf4-hdf4.3.1/hdf/util/h4cc.in000066400000000000000000000164761503061704500157340ustar00rootroot00000000000000#! /bin/sh ## ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ############################################################################ ## ## ## Things You May Have to Modify: ## ## ## ## If the following paths don't point to the place were HDF4 is installed ## ## on your system (i.e., you received a binary distribution or moved the ## ## files from the originally installed directory to another directory) ## ## then modify them accordingly to represent the new paths. ## ## ## ############################################################################ prefix="@prefix@" exec_prefix="@exec_prefix@" libdir="@libdir@" includedir="@includedir@" ############################################################################ ## ## ## You shouldn't have to modify anything below this line. ## ## ## ############################################################################ host_os="@host_os@" prog_name="`basename $0`" allargs="" compile_args="" libraries="" link_args="" link_objs="" do_link="yes" do_compile="no" dash_o="no" dash_c="no" get_output_file="no" SHOW="eval" CCBASE="@CC@" CLINKERBASE="@CC@" CFLAGS="@CFLAGS@" CPPFLAGS="@CPPFLAGS@" LDFLAGS="@LDFLAGS@" LIBS="@LIBS@" CC="${HDF4_CC:-$CCBASE}" CLINKER="${HDF4_CLINKER:-$CLINKERBASE}" # If a static library is available, the default will be to use it. If the only # available library is shared, it will be used by default. The user can # override either default, although choosing an unavailable library will result # in link errors. STATIC_AVAILABLE="@enable_static@" if test "${STATIC_AVAILABLE}" = "yes"; then USE_SHARED_LIB="${HDF4_USE_SHLIB:-no}" else USE_SHARED_LIB="${HDF4_USE_SHLIB:-yes}" fi usage() { # A wonderfully informative "usage" message. echo "usage: $prog_name [OPTIONS] " echo " OPTIONS:" echo " -help This help message." echo " -echo Show all the shell commands executed" echo " -prefix=DIR Prefix directory to find HDF4 lib/ and include/" echo " subdirectories [default: $prefix]" echo " -show Show the commands without executing them" echo " -shlib Compile with shared HDF4 libraries [default for hdf4 built" echo " without static libraries]" echo " -noshlib Compile with static HDF4 libraries [default for hdf4 built]" echo " with static libraries]" echo " " echo " - the normal compile line options for your compiler." echo " $prog_name uses the same compiler you used to compile" echo " HDF4. Check with your compiler's man pages for more" echo " information on which options are needed." echo " " echo " You can override the compiler, linker, and whether or not to use static" echo " or shared libraries to compile your program by setting the following" echo " environment variables accordingly:" echo " " echo " HDF4_CC - use a different C compiler" echo " HDF4_CLINKER - use a different linker" echo " HDF4_USE_SHLIB=[yes|no] - use shared or static version of the HDF4 library" echo " [default: no]" echo " " exit 1 } if test "$#" = "0"; then # No parameters specified, issue usage statement and exit. usage fi for arg in $@ ; do if test "x$get_output_file" = "xyes"; then link_args="$link_args $arg" output_file="$arg" get_output_file="no" continue fi case "$arg" in -c) allargs="$allargs $arg" compile_args="$compile_args $arg" if test "x$do_link" = "xyes" -a -n "$output_file"; then compile_args="$compile_args -o $output_file" fi do_link="no" dash_c="yes" ;; -o) allargs="$allargs $arg" dash_o="yes" if test "x$dash_c" = "xyes"; then compile_args="$compile_args $arg" else link_args="$link_args $arg" do_link="yes" get_output_file="yes" fi ;; -E|-M) allargs="$allargs $arg" compile_args="$compile_args $arg" dash_c="yes" do_link="no" ;; -l*) libraries=" $libraries $arg " allargs="$allargs $arg" ;; -prefix=*) prefix="`expr "$arg" : '-prefix=\(.*\)'`" ;; -echo) set -x ;; -show) SHOW="echo" ;; -shlib) USE_SHARED_LIB="yes" ;; -noshlib) USE_SHARED_LIB="no" ;; -help) usage ;; *\"*) qarg="'"$arg"'" allargs="$allargs $qarg" ;; *\'*) qarg='\"'"$arg"'\"' allargs="$allargs $qarg" ;; *) allargs="$allargs $qarg" if test -s "$arg"; then ext=`expr "$arg" : '.*\(\..*\)'` if test "x$ext" = "x.c"; then do_compile="yes" compile_args="$compile_args $arg" fname=`basename $arg .c` link_objs="$link_objs $fname.o" elif test "x$ext" = "x.o"; then if test "x$dash_c" = "xyes"; then compile_args="$compile_args $arg" else do_link="yes" link_objs="$link_objs $arg" fi elif test "x$ext" = "x.a"; then # This is an archive that we're linking in libraries=" $libraries $arg " else compile_args="$compile_args $arg" link_args="$link_args $arg" fi else compile_args="$compile_args $arg" link_args="$link_args $arg" fi ;; esac done if test "x$do_compile" = "xyes"; then if test "x$dash_c" != "xyes"; then compile_args="-c $compile_args" fi $SHOW $CC -I$includedir $CPPFLAGS $CFLAGS $compile_args status=$? if test "$status" != "0"; then exit $status fi fi if test "x$do_link" = "xyes"; then libraries=" $libraries -lmfhdf -ldf " link_args="$link_args -L${libdir}" if test "x$USE_SHARED_LIB" != "xyes"; then # The "-ldf" & "-lmfhdf" flags are in here already...This is a static # compile though, so change it to the static version (.a) of the library. new_libraries="" for lib in $libraries; do case "$lib" in -ldf) new_libraries="$new_libraries ${libdir}/libdf.a" ;; -lmfhdf) new_libraries="$new_libraries ${libdir}/libmfhdf.a" ;; *) new_libraries="$new_libraries $lib" ;; esac done libraries="$new_libraries" fi for lib in $libraries; do if echo $link_args | grep " $lib " > /dev/null || echo $link_args | grep " $lib$" > /dev/null; then : else link_args="$link_args $lib " fi done # The LIBS are just a bunch of -l* libraries necessary for the HDF4 # module. It's okay if they're included twice in the compile line. link_args="$link_args $LIBS" $SHOW $CLINKER $CFLAGS $LDFLAGS $link_objs $link_args status=$? fi exit $status hdf4-hdf4.3.1/hdf/util/h4fc.in000066400000000000000000000135741503061704500157330ustar00rootroot00000000000000#! /bin/sh ## ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ############################################################################ ## ## ## Things You May Have to Modify: ## ## ## ## If the following paths don't point to the place were HDF4 is installed ## ## on your system (i.e., you received a binary distribution or moved the ## ## files from the originally installed directory to another directory) ## ## then modify them accordingly to represent the new paths. ## ## ## ############################################################################ prefix="@prefix@" exec_prefix="@exec_prefix@" libdir="@libdir@" includedir="@includedir@" ############################################################################ ## ## ## You shouldn't have to modify anything below this line. ## ## ## ############################################################################ host_os="@host_os@" prog_name="`basename $0`" allargs="" compile_args="" libraries="" link_args="" link_objs="" do_link="yes" do_compile="no" dash_o="no" dash_c="no" get_output_file="no" SHOW="eval" F77BASE="@F77@" F77LINKERBASE="@F77@" FFLAGS="@FFLAGS@" LDFLAGS="@LDFLAGS@" LIBS="@LIBS@" F77="${HDF4_F77:-$F77BASE}" F77LINKER="${HDF4_F77LINKER:-$F77LINKERBASE}" usage() { # A wonderfully informative "usage" message. echo "usage: $prog_name [OPTIONS] " echo " OPTIONS:" echo " -help This help message." echo " -echo Show all the shell commands executed" echo " -prefix=DIR Prefix directory to find HDF4 lib/ and include/" echo " subdirectories [default: $prefix]" echo " -show Show the commands without executing them" echo " " echo " - the normal compile line options for your compiler." echo " $prog_name uses the same compiler you used to compile" echo " HDF4. Check with your compiler's man pages for more" echo " information on which options are needed." echo " " echo " You can override the compiler, linker, and whether or not to use static" echo " or shared libraries to compile your program by setting the following" echo " environment variables accordingly:" echo " " echo " HDF4_F77 - use a different Fortran 77 compiler" echo " HDF4_F77LINKER - use a different linker" echo " " exit 1 } if test "$#" = "0"; then # No parameters specified, issue usage statement and exit. usage fi for arg in $@ ; do if test "x$get_output_file" = "xyes"; then link_args="$link_args $arg" output_file="$arg" get_output_file="no" continue fi case "$arg" in -c) allargs="$allargs $arg" compile_args="$compile_args $arg" if test "x$do_link" = "xyes" -a -n "$output_file"; then compile_args="$compile_args -o $output_file" fi do_link="no" dash_c="yes" ;; -o) allargs="$allargs $arg" dash_o="yes" if test "x$dash_c" = "xyes"; then compile_args="$compile_args $arg" else link_args="$link_args $arg" do_link="yes" get_output_file="yes" fi ;; -E|-M) allargs="$allargs $arg" compile_args="$compile_args $arg" dash_c="yes" do_link="no" ;; -l*) libraries=" $libraries $arg " allargs="$allargs $arg" ;; -prefix=*) prefix="`expr "$arg" : '-prefix=\(.*\)'`" ;; -echo) set -x ;; -show) SHOW="echo" ;; -help) usage ;; *\"*) qarg="'"$arg"'" allargs="$allargs $qarg" ;; *\'*) qarg='\"'"$arg"'\"' allargs="$allargs $qarg" ;; *) allargs="$allargs $qarg" if test -s "$arg"; then ext=`expr "$arg" : '.*\(\..*\)'` if [ "$ext" = ".f" -o "$ext" = ".F" -o "$ext" = ".f90" -o \ "$ext" = ".for" -o "$ext" = ".FOR" -o "$ext" = ".F90" ] ; then do_compile="yes" compile_args="$compile_args $arg" fname=`basename $arg $ext` link_objs="$link_objs $fname.o" elif test "x$ext" = "x.o"; then if test "x$dash_c" = "xyes"; then compile_args="$compile_args $arg" else do_link="yes" link_objs="$link_objs $arg" fi elif test "x$ext" = "x.a"; then # This is an archive that we're linking in libraries=" $libraries $arg " else compile_args="$compile_args $arg" link_args="$link_args $arg" fi else compile_args="$compile_args $arg" link_args="$link_args $arg" fi ;; esac done if test "x$do_compile" = "xyes"; then if test "x$dash_c" != "xyes"; then compile_args="-c $compile_args" fi $SHOW $F77 -I$includedir $FFLAGS $compile_args status=$? if test "$status" != "0"; then exit $status fi fi if test "x$do_link" = "xyes"; then libraries=" $libraries -lmfhdf -ldf " link_args="$link_args -L${libdir}" for lib in $libraries; do if echo $link_args | grep " $lib " > /dev/null || echo $link_args | grep " $lib$" > /dev/null; then : else link_args="$link_args $lib " fi done # The LIBS are just a bunch of -l* libraries necessary for the HDF4 # module. It's okay if they're included twice in the compile line. link_args="$link_args $LIBS" $SHOW $F77LINKER $FFLAGS $LDFLAGS $link_objs $link_args status=$? fi exit $status hdf4-hdf4.3.1/hdf/util/h4redeploy.in000066400000000000000000000071271503061704500171630ustar00rootroot00000000000000#! /bin/sh ## ## Copyright by the Board of Trustees of the University of Illinois. ## All rights reserved. ## ## Update HDF4 compiler tools after the HDF4 software has been installed ## in a new location. ## For help page, use "h4redeploy -help" # Function definitions # show help page usage() { # A wonderfully informative "usage" message. echo "usage: $prog_name [OPTIONS]" echo " OPTIONS:" echo " -help|help This help message" echo " -echo Show all the shell commands executed" echo " -force No prompt, just do it" echo " -prefix=DIR New directory to find HDF4 lib/ and include/" echo " subdirectories [default: current directory]" echo " -tool=TOOL Tool to update. TOOL must be in the current" echo " directory and writable. [default: $h4tools]" echo " -show Show the commands without executing them" echo " " exit 1 } # display variable values dump_vars(){ echo "====Showing all variable values=====" echo prefix=$prefix echo h4tools=$h4tools echo "====End Showing=====" } # show actions to be taken show_action() { echo "Update the following tools because they are now installed at a new directory" for t in $foundtools; do echo "${t}:" echo " current setting=`sed -e '/^prefix=/s/prefix=//p' -e d $t`" echo " new setting="\""$prefix"\" done } # Report Error message ERROR() { echo "***ERROR***" echo "$1" } # Main # # Initialization h4tools="h4cc h4fc" # possible hdf4 tools foundtools= # tools found and will be modified fmode= # force mode, default is off prefix=`(cd ..;pwd)` # Parse options for arg in $@ ; do case "$arg" in -prefix=*) prefix="`expr "$arg" : '-prefix=\(.*\)'`" ;; -echo) set -x ;; -show) SHOW="echo" ;; -tool=*) h4tools="`expr "$arg" : '-tool=\(.*\)'`" ;; -help|help) usage ;; -force) fmode=yes ;; *) ERROR "Unknown Option($arg)" usage exit 1 ;; esac done # Sanity checks if [ ! -d $prefix ]; then ERROR "prefix($prefix) is not an existing directory" exit 1 fi for x in $h4tools; do if [ -f $x ]; then foundtools="$foundtools $x" if [ ! -w $x ]; then ERROR "hdftool($x) is not writable" exit 1 fi fi done if [ -z "$foundtools" ]; then ERROR "found no tools to modify" exit 1 fi # Show actions to be taken and get consent show_action # Ask confirmation unless fmode is on if [ x-$fmode = x- ]; then echo "Continue? (yes/no)" read ansx ans=`echo $ansx | tr "[A-Z]" "[a-z]"` if [ x-$ans != x-yes ]; then echo ABORT. No tools changed. exit 1 fi fi # Create the update commands CMDFILE=/tmp/h4redeploy.$$ touch $CMDFILE chmod 0600 $CMDFILE echo "/^prefix/c" >> $CMDFILE echo prefix=\""$prefix"\" >> $CMDFILE echo . >> $CMDFILE (echo w; echo q) >> $CMDFILE # Update them if [ "$SHOW" = "echo" ]; then echo "===Update commands are:====" cat $CMDFILE echo "===End Update commands=====" fi for t in $foundtools; do echo Update $t ... COMMAND="ed - $t" if [ "$SHOW" = "echo" ]; then echo $COMMAND else $COMMAND < $CMDFILE fi done # Cleanup rm -f $CMDFILE exit 0 # Some possible future features to add # CCBASE - Name of the alternative C compiler # CLINKERBASE - Name of the alternative linker # LDFLAGS - Path to different libraries your application will link with # (this path should include the path to the zlib library) # LIBS - Libraries your application will link with hdf4-hdf4.3.1/hdf/util/hdf24to8.c000066400000000000000000000217461503061704500162650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /************************************************************************** * hdf24hdf8 Quantizes a HDF RGB 24 bit "pixel" image into a 8 bit image * with RGB palette and stores it as a HDF 8-bit raster image * file. * * usage: hdf24hdf8 r24_file hdf8_file * * On Input: * -------- * * hdf24_file - File containing the HDF RGB 24-bit * raster image. * * On Output: * --------- * * hdf8_file - HDF file with one 8-bit raster image set, * i.e. 8-bit image, dimensions, and * RGB palette. * ****************************************************************************/ typedef unsigned char UCHAR; typedef unsigned int UINT; #define NCOLORS 256 #define PALSIZE 3 * NCOLORS #define COMPRESSION 0 /* no compression */ #include #include #include "hdf.h" #ifdef H4_HAVE_SYS_FILE_H #include #endif #define USAGE fprintf(stderr, "usage: hdf24hdf8 hdf24_file hdf8_file\n") int main(int, char *a[]); int r24r8(int32, int32, unsigned char *, unsigned char *, int, unsigned char *); int main(int argc, char *argv[]) { int i; int32 x_dim, y_dim, size; int interlace; uint8 *r24, *r8, *pal; uint8 hdfpal[PALSIZE], *p; if (argc != 3) { USAGE; exit(1); } /* Get the HDF R24 image */ if (DF24getdims(argv[1], &x_dim, &y_dim, &interlace) < 0) { fprintf(stderr, "error: %s is not an HDF file or ", argv[1]); fprintf(stderr, "it does not contain a R24 image\n"); exit(-1); } size = x_dim * y_dim; if ((r24 = (UCHAR *)malloc(size * 3)) == NULL) { fprintf(stderr, "error: malloc to hold r24 image failed\n"); exit(-1); } if (DF24getimage(argv[1], (void *)r24, x_dim, y_dim) < 0) { fprintf(stderr, "error: DF24getimage failed\n"); exit(-1); } if ((r8 = (UCHAR *)malloc(size)) == NULL) { fprintf(stderr, "error: malloc to hold r8 image failed\n"); exit(-1); } if ((pal = (UCHAR *)malloc(PALSIZE)) == NULL) { fprintf(stderr, "error: malloc to hold palette failed\n"); exit(-1); } if (r24r8(x_dim, y_dim, r24, r8, NCOLORS, pal) == -1) { fprintf(stderr, "error: quantization failed\n"); exit(-1); } /* rearrange palette to conform to HDF requirements */ p = hdfpal; for (i = 0; i < NCOLORS; i++) { *p++ = pal[i]; *p++ = pal[i + NCOLORS]; *p++ = pal[i + NCOLORS * 2]; } if (DFR8setpalette(hdfpal) == -1) { HEprint(stderr, 0); exit(-1); } if (DFR8putimage(argv[2], (void *)r8, x_dim, y_dim, COMPRESSION) == -1) { HEprint(stderr, 0); exit(-1); } free(r24); free(r8); free(pal); return 0; } int r24r8(int32 xres, int32 yres, UCHAR *dat24, UCHAR *dat8, int cres, UCHAR *cdat) { int ct, xct, yct; int rres, rd, rr, rn, rct; int gres, gd, gr, gn, gct; int bres, bd, br, bn, bct; int coff; UINT *idat[2]; UINT *cp, *np; UCHAR *dip, *dop, *rp, *gp, *bp; if ((idat[0] = (UINT *)malloc((size_t)(6 * xres) * sizeof(UINT))) == NULL) { fprintf(stderr, "error: Memory allocation fault\n"); return -1; } idat[1] = idat[0] + (3 * xres); rres = 6; gres = 7; bres = 6; coff = 2; rr = gr = br = 255; rn = rres - 1; gn = gres - 1; bn = bres - 1; rp = cdat + coff; gp = rp + cres; bp = gp + cres; for (rct = 0; rct < rres; rct++) { for (gct = 0; gct < gres; gct++) { for (bct = 0; bct < bres; bct++) { *rp++ = (UCHAR)(rr * rct / rn); *gp++ = (UCHAR)(gr * gct / gn); *bp++ = (UCHAR)(br * bct / bn); } } } rp = cdat; gp = rp + cres; bp = gp + cres; cp = idat[0]; np = idat[1]; dip = dat24; dop = dat8; for (xct = (intn)(3 * xres); --xct >= 0;) *cp++ = (UINT)*dip++; for (yct = 0; yct < (yres - 1); yct++) { np = idat[(yct + 1) % 2]; for (xct = (intn)(3 * xres); --xct >= 0;) *np++ = (UINT)*dip++; cp = idat[yct % 2]; np = idat[(yct + 1) % 2]; if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)(ct = (rct * gres + gct) * bres + bct + coff); rd = (int)cp[0] - rp[ct]; gd = (int)cp[1] - gp[ct]; bd = (int)cp[2] - bp[ct]; cp += 3; np += 3; cp[0] += (UINT)(rd * 7 / 16); cp[1] += (UINT)(gd * 7 / 16); cp[2] += (UINT)(bd * 7 / 16); np[-3] += (UINT)(rd * 5 / 16); np[-2] += (UINT)(gd * 5 / 16); np[-1] += (UINT)(bd * 5 / 16); np[0] += (UINT)(rd / 16); np[1] += (UINT)(gd / 16); np[2] += (UINT)(bd / 16); for (xct = 2; xct < xres; xct++) { if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)(ct = (rct * gres + gct) * bres + bct + coff); rd = (int)cp[0] - rp[ct]; gd = (int)cp[1] - gp[ct]; bd = (int)cp[2] - bp[ct]; cp += 3; np += 3; cp[0] += (UINT)(rd * 7 / 16); cp[1] += (UINT)(gd * 7 / 16); cp[2] += (UINT)(bd * 7 / 16); np[-6] += (UINT)(rd * 3 / 16); np[-5] += (UINT)(gd * 3 / 16); np[-4] += (UINT)(bd * 3 / 16); np[-3] += (UINT)(rd * 5 / 16); np[-2] += (UINT)(gd * 5 / 16); np[-1] += (UINT)(bd * 5 / 16); np[0] += (UINT)(rd / 16); np[1] += (UINT)(gd / 16); np[2] += (UINT)(bd / 16); } if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)(ct = (rct * gres + gct) * bres + bct + coff); rd = (int)cp[0] - rp[ct]; gd = (int)cp[1] - gp[ct]; bd = (int)cp[2] - bp[ct]; cp += 3; np += 3; np[-6] += (UINT)(rd * 3 / 16); np[-5] += (UINT)(gd * 3 / 16); np[-4] += (UINT)(bd * 3 / 16); np[-3] += (UINT)(rd * 5 / 16); np[-2] += (UINT)(gd * 5 / 16); np[-1] += (UINT)(bd * 5 / 16); } cp = idat[yct % 2]; if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)(ct = (rct * gres + gct) * bres + bct + coff); rd = (int)cp[0] - rp[ct]; gd = (int)cp[1] - gp[ct]; bd = (int)cp[2] - bp[ct]; cp += 3; cp[0] += (UINT)(rd * 7 / 16); cp[1] += (UINT)(gd * 7 / 16); cp[2] += (UINT)(bd * 7 / 16); for (xct = 2; xct < xres; xct++) { if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)(ct = (rct * gres + gct) * bres + bct + coff); rd = (int)cp[0] - rp[ct]; gd = (int)cp[1] - gp[ct]; bd = (int)cp[2] - bp[ct]; cp += 3; cp[0] += (UINT)(rd * 7 / 16); cp[1] += (UINT)(gd * 7 / 16); cp[2] += (UINT)(bd * 7 / 16); } if ((rct = ((int)cp[0] * rn / rr)) > rn) rct = rn; if ((gct = ((int)cp[1] * gn / gr)) > gn) gct = gn; if ((bct = ((int)cp[2] * bn / br)) > bn) bct = bn; *dop++ = (UCHAR)((rct * gres + gct) * bres + bct + coff); free(idat[0]); return 0; } hdf4-hdf4.3.1/hdf/util/hdf2gif.c000066400000000000000000000251411503061704500162250ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "gif.h" extern int hdfWriteGIF(FILE *fp, BYTE *pic, int ptype, int w, int h, BYTE *rmap, BYTE *gmap, BYTE *bmap, BYTE *pc2ncmap, int numcols, int colorstyle, int BitsPerPixel); int EndianOrder; static void putword(int w, FILE *fp) { /* writes a 16-bit integer in GIF order (LSB first) */ fputc(w & 0xff, fp); fputc((w >> 8) & 0xff, fp); } int main(int argc, char **argv) { intn status; /* status for functions returning an intn */ int32 file_id; /* HDF file identifier */ int32 gr_id; /* GR interface identifier */ int32 ri_id, pal_id, start[2]; /* start position to write for each dimension */ int32 stride[2], dim_sizes[2]; /* dimension sizes of the image array */ int32 interlace_mode; /* interlace mode of the image */ int32 data_type; /* data type of the image data */ int32 i, index; char gr_name[256]; FILE *fpGif; int32 ncomp; int32 num_attrs; int32 num_entries; int32 n_images; int32 n_fileattributes; BYTE *Image; /* compression structs */ char *HDFName; char *GIFName; /* reference variables */ int has_local_palette; /* treated as a flag */ int loop_times; /* number of times to loop, i'm going to treat it as a yes or no */ BYTE *b; BYTE x; BYTE GlobalPalette[256][3]; BYTE Red[256]; BYTE Green[256]; BYTE Blue[256]; int RWidth, RHeight; int ColorMapSize, InitCodeSize, Background, BitsPerPixel; int j, nc; int numcols = 256; int time_out; BYTE pc2nc[256], r1[256], g1[256], b1[256]; if (argc < 3) { printf("Wrong number of arguments.\nUsage:\nhdf2gif \n"); exit(-1); } HDFName = argv[1]; GIFName = argv[2]; /* Set a default 10 ms time between two consecutive images in case of multiple image file */ if (argc > 3) time_out = atoi(argv[3]); else time_out = 10; /* Do Endian Order testing and set Endian Order */ x = 0x0001; b = (BYTE *)&x; EndianOrder = (b[0] ? 1 : 0); start[0] = start[1] = 0; stride[0] = stride[1] = 1; /*Start HDF file*/ file_id = Hopen(HDFName, DFACC_READ, 0); if (file_id == -1) { printf("Unable to open HDF file"); status = HEvalue(1); printf("%s\n", HEstring(status)); exit(0); } if (!(fpGif = fopen(GIFName, "wb"))) { printf("Error opening gif file for output. Aborting.\n"); exit(-1); } /* Open the hdf file using the GR interface and retrieve the images from it ** Note that for now the images have to be 8 bit. If they are 24 bit this ** program cannot handle it. I shall try to include it, if not please ** refer to the file hdf2gif.c in the source code for the remormat utility. ** There you should find the code to convert 24 bit images to 8 bit (GIF) */ gr_id = GRstart(file_id); if ((status = GRfileinfo(gr_id, &n_images, &n_fileattributes)) == -1) { status = HEvalue(1); printf("%s\n", HEstring(status)); exit(0); } if (n_images < 1) { printf("Error: No GRimages found in hdf file. Aborting.\n"); exit(-1); } Background = 0; for (index = 0; index < n_images; index++) { has_local_palette = true; ri_id = GRselect(gr_id, index); if ((pal_id = GRgetlutid(ri_id, 0)) == -1) has_local_palette = false; if (has_local_palette) { status = GRgetlutinfo(pal_id, &ncomp, &data_type, &interlace_mode, &num_entries); status = GRreadlut(pal_id, (void *)&GlobalPalette); } status = GRgetiminfo(ri_id, gr_name, &ncomp, &data_type, &interlace_mode, dim_sizes, &num_attrs); if (!(data_type == DFNT_CHAR || data_type == DFNT_UCHAR || data_type == DFNT_INT8 || data_type == DFNT_UINT8 || data_type == DFNT_NINT8 || data_type == DFNT_NUINT8)) { printf("The GR data type of image %s in the hdf file appears not to be 8-bit. Trying next " "image...\n", gr_name); continue; } /* BUG FIX 601 - pkamat */ if (1 != ncomp) { /* not an 8-bit image */ if (3 == ncomp) { /* 24-bit image */ printf("The GR data type of image %s in the hdf file appears to be a 24-bit image. ", gr_name); printf("Use hdf2jpeg to convert this image. Trying next image... \n"); continue; } printf("The GR data type of image %s in the hdf file does not appear to be a 8-bit image. ", gr_name); printf("Trying next image... \n"); continue; } /* End BUG FIX 601 */ Image = (BYTE *)malloc(dim_sizes[0] * dim_sizes[1]); status = GRreadimage(ri_id, start, stride, dim_sizes, Image); /* If the first image does not have a palette, I make my own global color table ** Obviously this is not the best thing to do, better steps would be: ** 1. Check for either a global palette or a global attribute called palette ** 2. Check for palettes in any of the other images. */ if (!has_local_palette) { for (i = 0; i < 256; i++) { Red[i] = 255 - i; Green[i] = 255 - i; Blue[i] = 255 - i; } } else { for (i = 0; i < 256; i++) { Red[i] = GlobalPalette[i][0]; Green[i] = GlobalPalette[i][1]; Blue[i] = GlobalPalette[i][2]; } } for (i = 0; i < 256; i++) { pc2nc[i] = r1[i] = g1[i] = b1[i] = 0; } /* compute number of unique colors */ nc = 0; for (i = 0; i < numcols; i++) { /* see if color #i is already used */ for (j = 0; j < i; j++) { if (Red[i] == Red[j] && Green[i] == Green[j] && Blue[i] == Blue[j]) break; } if (j == i) { /* wasn't found */ pc2nc[i] = nc; r1[nc] = Red[i]; g1[nc] = Green[i]; b1[nc] = Blue[i]; nc++; } else pc2nc[i] = pc2nc[j]; } /* figure out 'BitsPerPixel' */ for (i = 1; i < 8; i++) { if ((1 << i) >= nc) break; } BitsPerPixel = i; ColorMapSize = 1 << BitsPerPixel; RWidth = dim_sizes[0]; RHeight = dim_sizes[1]; if (BitsPerPixel <= 1) InitCodeSize = 2; else InitCodeSize = BitsPerPixel; if (!fpGif) { fprintf(stderr, "WriteGIF: file not open for writing\n"); return (1); } /* If it is the first image we do all the header stuff that isn't required for the ** rest of the images. */ if (index == 0) { /* Write out the GIF header and logical screen descriptor */ if (n_images > 0) { fwrite("GIF89a", 1, 6, fpGif); /* the GIF magic number */ loop_times = 0; } else { fwrite("GIF87a", 1, 6, fpGif); /* the GIF magic number */ loop_times = 1; } putword(RWidth, fpGif); /* screen descriptor */ putword(RHeight, fpGif); i = 0x00; /* No, there is no color map */ i |= (8 - 1) << 4; /* OR in the color resolution (hardwired 8) */ i |= (BitsPerPixel - 1); /* OR in the # of bits per pixel */ fputc(i, fpGif); fputc(Background, fpGif); /* background color */ fputc(0, fpGif); /* future expansion byte */ /* If loop_times is 0 , put in the application extension to make the gif anime loop ** indefinitely */ if (!loop_times) { fputc(0x21, fpGif); fputc(0xFF, fpGif); fputc(11, fpGif); fwrite("NETSCAPE2.0", 1, 11, fpGif); fputc(3, fpGif); fputc(1, fpGif); fputc(0, fpGif); fputc(0, fpGif); fputc(0, fpGif); } } if (n_images > 1) { /* write a graphic control block */ fputc(0x21, fpGif); fputc(0xF9, fpGif); fputc(4, fpGif); fputc(4, fpGif); putword(time_out, fpGif); fputc(255, fpGif); fputc(0, fpGif); } /* Put Image Descriptor ** Hardwiring Left Offset and Top Offset to 0x00 */ fputc(0x2c, fpGif); putword(0x00, fpGif); putword(0x00, fpGif); putword(RWidth, fpGif); putword(RHeight, fpGif); if (has_local_palette) { fputc((0x80 | (BitsPerPixel - 1)), fpGif); for (i = 0; i < ColorMapSize; i++) { /* write out Global colormap */ fputc(r1[i], fpGif); fputc(g1[i], fpGif); fputc(b1[i], fpGif); } } else fputc(0x00, fpGif); fputc(InitCodeSize, fpGif); i = hdfWriteGIF(fpGif, Image, 0, dim_sizes[0], dim_sizes[1], r1, g1, b1, pc2nc, 256, 8, BitsPerPixel); fputc(0x00, fpGif); free(Image); status = GRendaccess(ri_id); } fputc(';', fpGif); /* Write GIF file terminator */ status = GRend(gr_id); /* Close the HDF file */ status = Hclose(file_id); fclose(fpGif); return (0); } hdf4-hdf4.3.1/hdf/util/hdf2jpeg.c000066400000000000000000000340111503061704500164010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include "hfile_priv.h" /* Size of the file buffer to copy through */ #define MAX_FILE_BUF 16384 static uint8 file_buf[MAX_FILE_BUF]; /* size of the buffer to copy through */ static void usage(void); static void usage(void) { printf("USAGE: hdf2jpeg \n"); printf(" : the HDF file to extract JPEG images from\n"); printf(" : template for the name \n"); printf(" of the JPEG file(s) to contain\n"); printf(" the images extracted from the HDF\n"); printf(" file. The name may contain\n"); printf(" the special character: '#'\n"); printf(" The '#' character will be replaced\n"); printf(" by the reference number of the HDF\n"); printf(" image being extracted.\n"); printf(" The default format is: file.#.jpg\n"); exit(1); } /* end usage() */ int main(int argc, char *argv[]) { int32 fid, aid, data_aid; int n, status; FILE *jfif_file; /* file ptr for the JFIF file to create */ dd_t image_desc; intn jfif_formatted = 0; /* whether the jfif filename has a'#' in it */ char jfif_name[128]; /* name of the JPEG file to create */ char scratch[128]; /* name of the JPEG file to create */ char *jfif_char; /* location of the '#' char */ /* * If a file name has not been supplied print the usage message */ if (argc < 3) usage(); if ((jfif_char = (char *)strchr(argv[2], '#')) == NULL) strcpy(jfif_name, argv[2]); /* copy the JPEG file name */ else { if (jfif_char > argv[2]) { /* copy initial portion */ strncpy(jfif_name, argv[2], (size_t)(jfif_char - argv[2])); jfif_name[jfif_char - argv[2]] = '\0'; /* terminate the string */ } /* end if */ strcat(jfif_name, "%d"); /* append formatter */ strcat(jfif_name, jfif_char + 1); /* complete the name */ jfif_formatted = TRUE; } /* end else */ fid = Hopen(argv[1], DFACC_READ, -1); if (fid == FAIL) { printf("Error opening HDF file: %s\n", argv[1]); exit(1); } /* end if */ n = 0; aid = Hstartread(fid, DFTAG_JPEG, DFREF_WILDCARD); if (aid != FAIL) { do { n++; /* increment the number of images found */ Hinquire(aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); if (Hread(aid, image_desc.length, file_buf) != image_desc.length) { printf("Error reading %d'th JPEG image from HDF file\n", n); exit(1); } /* end if */ if (jfif_formatted == TRUE) { sprintf(scratch, jfif_name, image_desc.ref); jfif_file = fopen(scratch, "wb"); } /* end if */ else { jfif_file = fopen(jfif_name, "wb"); } /* end else */ if (jfif_file == NULL) { printf("error opening JFIF output file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing to JPEG file\n"); exit(1); } /* end if */ data_aid = Hstartread(fid, DFTAG_CI, image_desc.ref); Hinquire(data_aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); while (image_desc.length > MAX_FILE_BUF) { if (Hread(data_aid, MAX_FILE_BUF, file_buf) != (int32)(MAX_FILE_BUF)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), MAX_FILE_BUF, jfif_file) != MAX_FILE_BUF) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ image_desc.length -= MAX_FILE_BUF; } /* end while */ if (image_desc.length > 0) { if (Hread(data_aid, image_desc.length, file_buf) != (int32)(image_desc.length)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ } /* end if */ Hendaccess(data_aid); /* let go of the JPEG data AID */ fclose(jfif_file); /* close the JFIF file */ status = Hnextread(aid, DFTAG_JPEG, DFREF_WILDCARD, DF_CURRENT); } while (status == SUCCEED); Hendaccess(aid); } /* end if */ aid = Hstartread(fid, DFTAG_GREYJPEG, DFREF_WILDCARD); if (aid != FAIL) { do { n++; /* increment the number of images found */ Hinquire(aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); if (Hread(aid, image_desc.length, file_buf) != image_desc.length) { printf("Error reading %d'th JPEG image from HDF file\n", n); exit(1); } /* end if */ if (jfif_formatted == TRUE) { sprintf(scratch, jfif_name, image_desc.ref); jfif_file = fopen(scratch, "wb"); } /* end if */ else { jfif_file = fopen(jfif_name, "wb"); } /* end else */ if (jfif_file == NULL) { printf("error opening JFIF output file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing to JPEG file\n"); exit(1); } /* end if */ data_aid = Hstartread(fid, DFTAG_CI, image_desc.ref); Hinquire(data_aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); while (image_desc.length > MAX_FILE_BUF) { if (Hread(data_aid, MAX_FILE_BUF, file_buf) != (int32)(MAX_FILE_BUF)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), MAX_FILE_BUF, jfif_file) != (size_t)MAX_FILE_BUF) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ image_desc.length -= MAX_FILE_BUF; } /* end while */ if (image_desc.length > 0) { if (Hread(data_aid, image_desc.length, file_buf) != (int32)(image_desc.length)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ } /* end if */ Hendaccess(data_aid); /* let go of the JPEG data AID */ fclose(jfif_file); /* close the JFIF file */ status = Hnextread(aid, DFTAG_GREYJPEG, DFREF_WILDCARD, DF_CURRENT); } while (status == SUCCEED); Hendaccess(aid); } /* end if */ /* Handle new-style JPEG5 images */ aid = Hstartread(fid, DFTAG_JPEG5, DFREF_WILDCARD); if (aid != FAIL) { do { Hinquire(aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); n++; /* increment the number of images found */ if (jfif_formatted == TRUE) { sprintf(scratch, jfif_name, image_desc.ref); jfif_file = fopen(scratch, "wb"); } /* end if */ else { jfif_file = fopen(jfif_name, "wb"); } /* end else */ if (jfif_file == NULL) { printf("error opening JFIF output file\n"); exit(1); } /* end if */ data_aid = Hstartread(fid, DFTAG_CI, image_desc.ref); Hinquire(data_aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); while (image_desc.length > MAX_FILE_BUF) { if (Hread(data_aid, MAX_FILE_BUF, file_buf) != (int32)(MAX_FILE_BUF)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), MAX_FILE_BUF, jfif_file) != MAX_FILE_BUF) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ image_desc.length -= MAX_FILE_BUF; } /* end while */ if (image_desc.length > 0) { if (Hread(data_aid, image_desc.length, file_buf) != (int32)(image_desc.length)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ } /* end if */ Hendaccess(data_aid); /* let go of the JPEG data AID */ fclose(jfif_file); /* close the JFIF file */ status = Hnextread(aid, DFTAG_JPEG5, DFREF_WILDCARD, DF_CURRENT); } while (status == SUCCEED); Hendaccess(aid); } /* end if */ /* Handle new-style GREYJPEG5 images */ aid = Hstartread(fid, DFTAG_GREYJPEG5, DFREF_WILDCARD); if (aid != FAIL) { do { n++; /* increment the number of images found */ Hinquire(aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); if (jfif_formatted == TRUE) { sprintf(scratch, jfif_name, image_desc.ref); jfif_file = fopen(scratch, "wb"); } /* end if */ else { jfif_file = fopen(jfif_name, "wb"); } /* end else */ if (jfif_file == NULL) { printf("error opening JFIF output file\n"); exit(1); } /* end if */ data_aid = Hstartread(fid, DFTAG_CI, image_desc.ref); Hinquire(data_aid, NULL, &image_desc.tag, &image_desc.ref, &image_desc.length, &image_desc.offset, NULL, NULL, NULL); while (image_desc.length > MAX_FILE_BUF) { if (Hread(data_aid, MAX_FILE_BUF, file_buf) != (int32)(MAX_FILE_BUF)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), MAX_FILE_BUF, jfif_file) != (size_t)MAX_FILE_BUF) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ image_desc.length -= MAX_FILE_BUF; } /* end while */ if (image_desc.length > 0) { if (Hread(data_aid, image_desc.length, file_buf) != (int32)(image_desc.length)) { printf("Error reading JPEG image data from HDF file\n"); exit(1); } /* end if */ if (fwrite(file_buf, sizeof(uint8), (size_t)image_desc.length, jfif_file) != (size_t)image_desc.length) { printf("Error writing JPEG image data\n"); exit(1); } /* end if */ } /* end if */ Hendaccess(data_aid); /* let go of the JPEG data AID */ fclose(jfif_file); /* close the JFIF file */ status = Hnextread(aid, DFTAG_GREYJPEG5, DFREF_WILDCARD, DF_CURRENT); } while (status == SUCCEED); Hendaccess(aid); } /* end if */ /* Close the HDF file */ status = Hclose(fid); if (n == 0) printf("Error, no JPEG images found in HDF file\n"); return (0); } hdf4-hdf4.3.1/hdf/util/hdf8to24.c000066400000000000000000000346341503061704500162650ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include #include /* Exception checking macro */ #define EXCHECK(a, b) \ if (a) \ goto b /* Static variables */ uint8 red_comp[256], green_comp[256], blue_comp[256]; comp_info cinfo; /* compression structure */ static intn magnify(uint8 *from_buffer, uint8 *to_buffer, int32 from_x0, int32 from_y0, int32 from_x1, int32 from_y1, int32 from_width, int32 from_height, int32 to_width, int32 to_height); static intn convert8to24(uint8 *img8_buf, uint8 *img24_buf, int32 img_xdim, int32 img_ydim); static void usage(void); /********************************************************************** * Function : magnify * Purpose : Magnify an image by independent X and Y magnification * factors. Note that the coordinates which specify * the area in the "from" image are _inclusive_, i.e. * if you would like to magnify the entire image, the * "from" coordinates should be specified as: * (0,0) and ((width-1),(height-1)), where "width" * and "height" are the width and height of the image * (respectively) in pixels. * Parameters : * from_buffer - pointer to the buffer which contains the image * to magnify * to_buffer - pointer to the buffer in which to place the * magnified image * from_x0, from_y0 - Upper Left Corner (ULC) of the rectangular * area in the image to magnify * from_x1, from_y1 - Lower Right Corner (LRC) of the rectangular * area in the image to magnify * from_width, from_height - the width and height of the image * to magnify (or "from" image) * to_width, to_height - the width and height of the magnified * image (or "to" image) * Returns : (TRUE) for success, (FALSE) for error * Calls : * Called by : **********************************************************************/ static intn magnify(uint8 *from_buffer, uint8 *to_buffer, int32 from_x0, int32 from_y0, int32 from_x1, int32 from_y1, int32 from_width, int32 from_height, int32 to_width, int32 to_height) { uint8 *buf_off, /* the current offset into the magnified data */ *last_buf, /* pointer to the last useful magnified line */ *y_off, /* the y offset into the data block */ *last_y_coor, /* pointer to the last line copied */ **y_coor; /* pointers to image data */ float64 temp_val, /* temporary value for holding double results */ wind_width, /* the width of the window to magnify */ wind_height; /* the height of the window to magnify */ int32 u, v; /* local unsigned counting variables */ int32 *x_coor, /* the X coor. lookup table */ *x_coor_temp; /* temporary pointer to the x lookup table */ if (from_width == 0 || from_height == 0) /* check for bad image dimensions */ return (FALSE); if (to_width == 0 || to_height == 0) /* check for bad image dimensions */ return (FALSE); if (from_x0 > from_x1 || from_y0 > from_y1) /* check for an invalid window */ return (FALSE); /* find width and height of the window to magnify */ wind_width = (float64)((from_x1 - from_x0) + 1); wind_height = (float64)((from_y1 - from_y0) + 1); /* allocate room for the x coordinate lookup table */ x_coor = (int32 *)malloc((int32)((size_t)to_width * sizeof(int32))); EXCHECK(x_coor == NULL, XCoorFailed); /* check if malloc() failed */ temp_val = wind_width / (float64)to_width; for (u = 0; u < to_width; u++) /* calculate the x coordinate lookup table */ x_coor[u] = ((uint16)((float64)u * temp_val) + from_x0); /* allocate room for the array of pointers */ y_coor = (uint8 **)malloc((int32)((size_t)to_height * sizeof(uint8 *))); EXCHECK(y_coor == NULL, YCoorFailed); /* check if malloc() failed */ temp_val = wind_height / (float64)to_height; for (u = 0; u < to_height; u++) /* calculate the y coordinates */ y_coor[u] = from_buffer + ((uint32)((float64)u * temp_val) + (uint32)from_y0) * (uint32)from_width; last_buf = to_buffer; /* set the previous line pointer */ buf_off = to_buffer; /* set the pointer to the "to" image */ last_y_coor = NULL; /* force to calculate the first line */ for (u = 0; u < to_height; u++) { /* go through each magnified line */ /* if this line is not the same as the previous one, then make it again */ if (y_coor[u] != last_y_coor) { last_y_coor = y_off = y_coor[u]; x_coor_temp = x_coor; /* assign the temporary pointer */ last_buf = buf_off; /* set the pointer to the previous line */ for (v = 0; v < to_width; v++) /* go through each line magnifying it */ *buf_off++ = y_off[*x_coor_temp++]; } /* end if */ /* this line is the same as the previous one, just copy it */ else { memcpy(buf_off, last_buf, to_width); /* copy the previous line */ buf_off += to_width; /* advance the buffer offset pointer */ } /* end else */ } /* end for */ free(y_coor); free(x_coor); return (TRUE); YCoorFailed: /* Failed to allocate memory for the Y coor. lookup table */ free(x_coor); XCoorFailed: /* Failed to allocate memory for the X coor. lookup table */ return (FALSE); } /* end magnify() */ /********************************************************************** * Function : convert8to24 * Purpose : Convert an 8-bit image to a 24-bit image, using the * palette components already set up. * Parameters : * img_8_buf - pointer to the buffer which contains the 8-bit image * img24_buf - pointer to the buffer in which to place the * 24-bit image * img_xdim, img_ydim - the width and height of the images * Returns : (TRUE) for success, (FALSE) for error * Calls : * Called by : **********************************************************************/ static intn convert8to24(uint8 *img8_buf, uint8 *img24_buf, int32 img_xdim, int32 img_ydim) { uint32 pixels; /* local counting variable */ if (img_xdim <= 0 || img_ydim <= 0) /* check for bad image dimensions */ return (FALSE); if (img8_buf == NULL || img24_buf == NULL) /* check for invalid images */ return (FALSE); pixels = (uint32)(img_xdim * img_ydim); /* get the number of pixels to process */ while (pixels > 0) { /* do all the pixels */ *img24_buf++ = red_comp[*img8_buf]; *img24_buf++ = green_comp[*img8_buf]; *img24_buf++ = blue_comp[*img8_buf]; img8_buf++; pixels--; } /* end while */ return (TRUE); } /* end convert8to24() */ static void usage(void) { printf("USAGE: make24 [-s] [-j] \n"); printf(" -s : set scale for magnifying the 8-bit input file.\n"); printf(" scales between 0 and 1 shrink the image, scales\n"); printf(" greater than 1 expand the image. Defaults to 1\n"); printf(" -j[quality] : use JPEG compression to store the 24-bit image\n"); printf(" Defaults to no compression, or quality level\n"); printf(" 75, if no quality is specified\n"); printf(" : HDF file which contains an 8-bit image\n"); printf(" : HDF file to store the 24-bit image\n"); exit(1); } /* end usage() */ int main(int argc, char *argv[]) { intn do_jpeg = FALSE; /* flag to indicate JPEG compression */ intn jpeg_qual = 75; /* JPEG quality factor */ intn do_scale = FALSE; /* flag to indicate whether to scale images */ float32 img_scale = (float32)1.0; /* scaling factor */ int32 xdim, ydim; /* dimensions of the image to convert */ intn ispal; /* whether there's a palette with the image */ uint8 *img_buf; /* buffer to store the image in */ uint8 *img24_buf; /* buffer to store the 24-bit image in */ uint8 *pal_buf = NULL; /* buffer to store the palette in */ intn file = 1; /* the argument the files start at */ intn i; /* local counting variable */ if (argc < 3) usage(); if (argv[1][0] == '-' || argv[1][0] == '/') { /* check command line */ if ((argv[1][1] != 's' && argv[1][1] != 'j') || argc < 4) usage(); while (argv[file][0] == '-' || argv[file][0] == '/') { switch (argv[file][1]) { case 's': if ((img_scale = (float32)atof(&argv[file][2])) <= (float32)0.0) { /* check for valid scale */ printf("Bad scale, must be greater than 0\n"); return (1); } /* end if */ do_scale = TRUE; break; case 'j': if ((jpeg_qual = atoi(&argv[file][2])) <= 0 || jpeg_qual > 100) { printf("Bad JPEG quality setting, should be between\n"); printf("1 and 100, using default value of 75\n"); jpeg_qual = 75; } /* end if */ do_jpeg = TRUE; break; default: usage(); } /* end switch */ file++; } /* end while */ } /* end if */ /* get the image dimensions */ if (DFR8getdims(argv[file], &xdim, &ydim, &ispal) == FAIL) { printf("Error, bad dimensions in file: %s\n", argv[file]); HEprint(stdout, 0); return (1); } /* end if */ if ((img_buf = (uint8 *)malloc((size_t)(xdim * ydim))) == NULL) { printf("Error, cannot allocate space for %dx%d image\n", (int)xdim, (int)ydim); return (1); } /* end if */ if (ispal) { if ((pal_buf = (uint8 *)malloc(768)) == NULL) { printf("Error, cannot allocate space for image palette\n"); return (1); } /* end if */ } /* end if */ else printf("No palette associated with image, using default grey scale conversion\n"); if (DFR8getimage(argv[file], img_buf, xdim, ydim, (ispal ? pal_buf : NULL)) == FAIL) { printf("Error reading image\n"); HEprint(stdout, 0); return (1); } /* end if */ if (do_scale) { /* check whether we should scale the image */ uint8 *scaled_image; /* storage for the scaled image */ int32 new_xdim, new_ydim; /* the new image's x and y dim. */ new_xdim = (int32)(img_scale * (float32)xdim); /* calc. new image's dimensions */ new_ydim = (int32)(img_scale * (float32)ydim); if ((scaled_image = (uint8 *)malloc((size_t)(new_xdim * new_ydim))) == NULL) { printf("Error, cannot allocate space for %dx%d scaled image\n", (int)new_xdim, (int)new_ydim); return (1); } /* end if */ if (!magnify(img_buf, scaled_image, 0, 0, xdim - 1, ydim - 1, xdim, ydim, new_xdim, new_ydim)) { printf("Error scaling image, out of memory or bad dimensions\n"); return (1); } free(img_buf); /* free the old image */ img_buf = scaled_image; /* use the new image for further processing */ xdim = new_xdim; ydim = new_ydim; } /* end if */ /* Generate the RGB components for the 8 -> 24 bit converter */ if (ispal) { uint8 *pal_ptr = pal_buf; /* temporary pointer into the palette */ for (i = 0; i < 256; i++) { red_comp[i] = *pal_ptr++; green_comp[i] = *pal_ptr++; blue_comp[i] = *pal_ptr++; } /* end for */ } /* end if */ else { /* no palette, use a greyscale palette */ for (i = 0; i < 256; i++) red_comp[i] = green_comp[i] = blue_comp[i] = (uint8)i; } /* end else */ /* allocate space for the 24-bit image */ if ((img24_buf = (uint8 *)malloc((size_t)(xdim * ydim * 3))) == NULL) { printf("Error, cannot allocate space for %dx%d 24-bit image\n", (int)xdim, (int)ydim); return (1); } /* end if */ /* convert the image */ if (!convert8to24(img_buf, img24_buf, xdim, ydim)) { printf("Error converting 8-bit image to 24-bit image\n"); return (1); } /* end if */ if (do_jpeg) { /* set up JPEG compression if necessary */ cinfo.jpeg.quality = jpeg_qual; /* set JPEG comp. parameters */ cinfo.jpeg.force_baseline = TRUE; DF24setcompress(COMP_JPEG, &cinfo); /* set compression parameters */ } /* end if */ /* store 24-bit image */ if (DF24putimage(argv[file + 1], (void *)img24_buf, xdim, ydim) == FAIL) { printf("Error storing 24-bit image\n"); HEprint(stdout, 0); return (1); } /* end if */ return (0); } /* end make24 */ hdf4-hdf4.3.1/hdf/util/hdfcomp.c000066400000000000000000000272201503061704500163340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * hdfcomp.c * Re-compress Raster-8 HDF file */ #include #include "hdf.h" uint8 *space; uint8 palette[768]; int32 xdim, ydim; int ispal; int main(int argc, char *argv[]) { int i; char *outfile; intn jpeg_qual = 75; /* JPEG quality factor */ uint16 prevref, writeref, compress = (uint16)0; comp_info cinfo; /* compression structure */ int32 out_fid; /* file ID for the output file */ intn copy_flabel, /* flag to indicate to copy file labels */ copy_fdesc, /* flag to indicate to copy file descriptions */ copy_ilabel, /* flag to indicate to copy image labels */ copy_idesc; /* flag to indicate to copy image descriptions */ char *annbuf = NULL; /* buffer to store annotations in */ int32 annbuflen = 0; /* length of the annotation buffer */ if (argc < 3) { printf("%s, version: 1.3 date: October 15, 1994\n", argv[0]); printf(" This utility will read in raster-8 images from an\n"); printf(" HDF file and create a new HDF containing the\n"); printf(" images in a compressed format. Images will be\n"); printf(" appended to outfile, if it exists.\n\n"); printf("Usage:\n"); printf(" hdfcomp outfile {[-c],[-r],[-i],[-j]} imagefile ...\n"); printf(" {[-c],[-r],[-i],[-j]} imagefile\n"); printf(" -r: Store without compression (default)\n"); printf(" -c: Store using RLE compression\n"); printf(" -i: Store using IMCOMP compression (requires a"); printf(" palette in the HDF file)\n"); printf(" -j: Store using JPEG compression\n"); printf(" with a quality factor from 1-100, 75 default\n"); exit(1); } outfile = argv[1]; /* open the output file so that we can write Annotations into it easily */ if ((out_fid = Hopen(outfile, DFACC_ALL, 0)) == FAIL) { printf("Error opening output file: %s\n", outfile); exit(1); } /* end if */ for (i = 2; i < argc; i++) { /* turn all the flags on (default settings) */ copy_flabel = copy_fdesc = copy_ilabel = copy_idesc = TRUE; if (*argv[i] == '-') { switch (argv[i][1]) { case 'r': /* raster */ compress = (uint16)0; break; case 'c': /* RLE */ compress = COMP_RLE; break; case 'i': /* IMCOMP */ compress = COMP_IMCOMP; break; case 'j': /* JPEG */ compress = COMP_JPEG; if ((jpeg_qual = atoi(&argv[i][2])) <= 0 || jpeg_qual > 100) { printf("Bad JPEG quality setting, should be between\n"); printf("1 and 100, using default value of 75\n"); jpeg_qual = 75; } /* end if */ cinfo.jpeg.quality = jpeg_qual; /* set JPEG parameters */ cinfo.jpeg.force_baseline = TRUE; break; default: printf("Illegal option: %s, skipping....\n", argv[i]); break; } } else { /* file name */ /* copy the file annotations and labels over */ if (copy_flabel == TRUE || copy_fdesc == TRUE) { intn isfirst; /* flip-flop for first image */ int32 annlen; /* length of the annotation to copy */ int32 old_fid; /* file ID for the old and new files */ if ((old_fid = Hopen(argv[i], DFACC_READ, 0)) == FAIL) { printf("Error opening input file: %s, skipping to next file\n", argv[i]); continue; } /* end if */ if (copy_flabel == TRUE) { isfirst = 1; while ((annlen = DFANgetfidlen(old_fid, isfirst)) != FAIL) { if (annbuflen == 0 || annlen > annbuflen) { if (annbuflen != 0) free(annbuf); if ((annbuf = (char *)malloc(annlen)) == NULL) { printf("Error allocating buffer for annotation, aborting!\n"); exit(1); } /* end if */ annbuflen = annlen; } /* end if */ if (DFANgetfid(old_fid, annbuf, annbuflen, isfirst) == FAIL) printf("Error reading file annotation from file:%s, continuing\n", argv[i]); else { if (DFANaddfid(out_fid, annbuf) == FAIL) printf("Error wriring annotation to file:%s, continuing\n", outfile); } /* end else */ isfirst = 0; /* get the next label from the file */ } /* end while */ } /* end if */ if (copy_fdesc == TRUE) { isfirst = 1; while ((annlen = DFANgetfdslen(old_fid, isfirst)) != FAIL) { if (annbuflen == 0 || annlen > annbuflen) { if (annbuflen != 0) free(annbuf); if ((annbuf = (char *)malloc(annlen)) == NULL) { printf("Error allocating buffer for annotation, aborting!\n"); exit(1); } /* end if */ annbuflen = annlen; } /* end if */ if (DFANgetfds(old_fid, annbuf, annbuflen, isfirst) == FAIL) printf("Error reading file annotation from file:%s, continuing\n", argv[i]); else { if (DFANaddfds(out_fid, annbuf, annlen) == FAIL) printf("Error wriring annotation to file:%s, continuing\n", outfile); } /* end else */ isfirst = 0; /* get the next label from the file */ } /* end while */ } /* end if */ Hclose(old_fid); /* remember to close the file */ } /* end if */ /* copy the images over */ while (DFR8getdims(argv[i], &xdim, &ydim, &ispal) >= 0) { prevref = DFR8lastref(); if ((space = (uint8 *)malloc((size_t)(xdim * ydim))) == NULL) { printf("Not enough memory to convert image"); exit(1); } if (DFR8getimage(argv[i], space, xdim, ydim, palette) < 0) { printf("Error reading image from file %s\n", argv[i]); exit(1); } if (ispal) DFR8setpalette((uint8 *)palette); else if (compress == DFTAG_IMC) { printf("Couldn't find palette for IMCOMP compression\n"); exit(1); } writeref = Hnewref(out_fid); DFR8writeref(outfile, writeref); if (compress) DFR8setcompress((int32)compress, &cinfo); if (DFR8addimage(outfile, (void *)space, xdim, ydim, compress) < 0) { printf("Error writing image to file %s\n", outfile); exit(1); } /* sequence through the annotations for this image */ if (copy_ilabel == TRUE || copy_idesc == TRUE) { uint16 image_tag = DFTAG_RIG; /* tag to look for image annotations with */ int32 annlen; /* length of the annotation to copy */ if (copy_ilabel == TRUE) { if ((annlen = DFANgetlablen(argv[i], image_tag, prevref)) != FAIL) { if (annbuflen == 0 || annlen > annbuflen) { if (annbuflen != 0) free(annbuf); if ((annbuf = (char *)malloc(annlen)) == NULL) { printf("Error allocating buffer for annotation, aborting!\n"); exit(1); } /* end if */ annbuflen = annlen; } /* end if */ if (DFANgetlabel(argv[i], image_tag, prevref, annbuf, annbuflen) == FAIL) printf("Error reading annotation from file:%s, continuing\n", argv[i]); else if (DFANputlabel(outfile, image_tag, writeref, annbuf) == FAIL) printf("Error writing annotation to file:%s, continuing\n", outfile); } /* end if */ } /* end if */ if (copy_idesc == TRUE) { if ((annlen = DFANgetdesclen(argv[i], image_tag, prevref)) != FAIL) { if (annbuflen == 0 || annlen > annbuflen) { if (annbuflen != 0) free(annbuf); if ((annbuf = (char *)malloc(annlen)) == NULL) { printf("Error allocating buffer for annotation, aborting!\n"); exit(1); } /* end if */ annbuflen = annlen; } /* end if */ if (DFANgetdesc(argv[i], image_tag, prevref, annbuf, annbuflen) == FAIL) printf("Error reading annotation from file:%s, continuing\n", argv[i]); else if (DFANputdesc(outfile, image_tag, writeref, annbuf, annlen) == FAIL) printf("Error writing annotation to file:%s, continuing\n", outfile); } /* end if */ } /* end if */ } /* end if */ /* sequence past this image */ DFR8readref(argv[i], prevref); DFR8getdims(argv[i], &xdim, &ydim, &ispal); free(space); } } } Hclose(out_fid); /* remember to close the file */ if (annbuflen != 0) /* and free the buffer space */ free(annbuf); return (0); } hdf4-hdf4.3.1/hdf/util/hdfcomp.out1000066400000000000000000000033521503061704500170020ustar00rootroot00000000000000allstorms.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Raster Image-8 : (tag 202) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Ref no 3 20 bytes Ref no 4 20 bytes Raster Image Data : (tag 302) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes Ref no 3 8 bytes Ref no 4 8 bytes allcomp.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 2921 bytes Ref no 3 3058 bytes Ref no 4 3156 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Ref no 3 20 bytes Ref no 4 20 bytes Compressed Image : (tag 303) Ref no 2 2921 bytes Ref no 3 3058 bytes Ref no 4 3156 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes Ref no 3 8 bytes Ref no 4 8 bytes hdf4-hdf4.3.1/hdf/util/hdfcomp.out1.1000066400000000000000000000015661503061704500171460ustar00rootroot00000000000000allstorms.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Raster Image-8 : (tag 202) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Ref no 3 20 bytes Ref no 4 20 bytes Raster Image Data : (tag 302) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes Ref no 3 8 bytes Ref no 4 8 bytes hdf4-hdf4.3.1/hdf/util/hdfcomp.out1.2000066400000000000000000000015641503061704500171450ustar00rootroot00000000000000allcomp.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes Ref no 3 4 bytes Ref no 4 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 2921 bytes Ref no 3 3058 bytes Ref no 4 3156 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Ref no 3 20 bytes Ref no 4 20 bytes Compressed Image : (tag 303) Ref no 2 2921 bytes Ref no 3 3058 bytes Ref no 4 3156 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes Ref no 3 8 bytes Ref no 4 8 bytes hdf4-hdf4.3.1/hdf/util/hdfed-w.out1000066400000000000000000000143701503061704500167020ustar00rootroot00000000000000 (1) Machine type : (Tag 107) Ref 4369 (2) Raster Image Data : (Tag 302) Ref 110 (3) Raster Image-8 : (Tag 202) Ref 110 (4) Number type : (Tag 106) Ref 110 (5) Image Dimensions-8 : (Tag 200) Ref 110 (6) Image Dimensions : (Tag 300) Ref 110 *(7) Raster Image Group : (Tag 306) Ref 110 (6) Image Dimensions : (Tag 300) Ref: 110, Offset: 3459, Length: 20 (bytes) 0: 0 57 0 57 106 110 12: 1 0 0 0 (1) Version Descriptor : (Tag 30) Ref 1 (2) Scientific Data : (Tag 702) Ref 2 (3) Number type : (Tag 106) Ref 2 (4) SciData dimension record : (Tag 701) Ref 2 (5) SciData scales : (Tag 703) Ref 2 (6) SciData max/min : (Tag 707) Ref 2 (7) Calibration information : (Tag 731) Ref 2 (8) Links related to the dataset : (Tag 710) Ref 2 *(9) Numeric Data Group : (Tag 720) Ref 2 (10) Scientific Data Group : (Tag 700) Ref 2 (11) Scientific Data : (Tag 702) Ref 3 (12) Number type : (Tag 106) Ref 3 (13) SciData dimension record : (Tag 701) Ref 3 (14) SciData scales : (Tag 703) Ref 3 (15) SciData max/min : (Tag 707) Ref 3 (16) Numeric Data Group : (Tag 720) Ref 3 (17) Scientific Data : (Tag 702) Ref 4 (18) Number type : (Tag 106) Ref 4 (19) SciData dimension record : (Tag 701) Ref 4 (20) SciData scales : (Tag 703) Ref 4 (21) SciData max/min : (Tag 707) Ref 4 (22) Numeric Data Group : (Tag 720) Ref 4 (23) Scientific Data : (Tag 702) Ref 5 (24) Number type : (Tag 106) Ref 5 (25) SciData dimension record : (Tag 701) Ref 5 (26) SciData scales : (Tag 703) Ref 5 (27) SciData max/min : (Tag 707) Ref 5 (28) Numeric Data Group : (Tag 720) Ref 5 (29) Scientific Data : (Tag 702) Ref 6 (30) Number type : (Tag 106) Ref 6 (31) SciData dimension record : (Tag 701) Ref 6 (32) SciData scales : (Tag 703) Ref 6 (33) SciData max/min : (Tag 707) Ref 6 (34) Numeric Data Group : (Tag 720) Ref 6 (35) Scientific Data : (Tag 702) Ref 7 (36) Number type : (Tag 106) Ref 7 (37) SciData dimension record : (Tag 701) Ref 7 (38) SciData scales : (Tag 703) Ref 7 (39) SciData max/min : (Tag 707) Ref 7 (40) Numeric Data Group : (Tag 720) Ref 7 (41) Scientific Data : (Tag 702) Ref 8 (42) Number type : (Tag 106) Ref 8 (43) SciData dimension record : (Tag 701) Ref 8 (44) SciData scales : (Tag 703) Ref 8 (45) SciData max/min : (Tag 707) Ref 8 (46) Numeric Data Group : (Tag 720) Ref 8 (2) Scientific Data : (Tag 702) Ref: 2, Offset: 294, Length: 400 (bytes) 0: 0.000000e+000 1.000000e+000 2.000000e+000 3.000000e+000 16: 4.000000e+000 5.000000e+000 6.000000e+000 7.000000e+000 32: 8.000000e+000 9.000000e+000 4.000000e+001 4.100000e+001 48: 4.200000e+001 4.300000e+001 4.400000e+001 4.500000e+001 64: 4.600000e+001 4.700000e+001 4.800000e+001 4.900000e+001 80: 8.000000e+001 8.100000e+001 8.200000e+001 8.300000e+001 96: 8.400000e+001 8.500000e+001 8.600000e+001 8.700000e+001 112: 8.800000e+001 8.900000e+001 1.200000e+002 1.210000e+002 128: 1.220000e+002 1.230000e+002 1.240000e+002 1.250000e+002 144: 1.260000e+002 1.270000e+002 1.280000e+002 1.290000e+002 160: 1.600000e+002 1.610000e+002 1.620000e+002 1.630000e+002 176: 1.640000e+002 1.650000e+002 1.660000e+002 1.670000e+002 192: 1.680000e+002 1.690000e+002 2.000000e+002 2.010000e+002 208: 2.020000e+002 2.030000e+002 2.040000e+002 2.050000e+002 224: 2.060000e+002 2.070000e+002 2.080000e+002 2.090000e+002 240: 2.400000e+002 2.410000e+002 2.420000e+002 2.430000e+002 256: 2.440000e+002 2.450000e+002 2.460000e+002 2.470000e+002 272: 2.480000e+002 2.490000e+002 2.800000e+002 2.810000e+002 288: 2.820000e+002 2.830000e+002 2.840000e+002 2.850000e+002 304: 2.860000e+002 2.870000e+002 2.880000e+002 2.890000e+002 320: 3.200000e+002 3.210000e+002 3.220000e+002 3.230000e+002 336: 3.240000e+002 3.250000e+002 3.260000e+002 3.270000e+002 352: 3.280000e+002 3.290000e+002 3.600000e+002 3.610000e+002 368: 3.620000e+002 3.630000e+002 3.640000e+002 3.650000e+002 384: 3.660000e+002 3.670000e+002 3.680000e+002 3.690000e+002 400: (29) Scientific Data : (Tag 702) Ref: 6, Offset: 1616, Length: 200 (bytes) 0: 0 1 2 3 4 5 12: 6 7 8 9 6000 6001 24: 6002 6003 6004 6005 6006 6007 36: 6008 6009 12000 12001 12002 12003 48: 12004 12005 12006 12007 12008 12009 60: 18000 18001 18002 18003 18004 18005 72: 18006 18007 18008 18009 24000 24001 84: 24002 24003 24004 24005 24006 24007 96: 24008 24009 30000 30001 30002 30003 108: 30004 30005 30006 30007 30008 30009 120: -29536 -29535 -29534 -29533 -29532 -29531 132: -29530 -29529 -29528 -29527 -23536 -23535 144: -23534 -23533 -23532 -23531 -23530 -23529 156: -23528 -23527 -17536 -17535 -17534 -17533 168: -17532 -17531 -17530 -17529 -17528 -17527 180: -11536 -11535 -11534 -11533 -11532 -11531 192: -11530 -11529 -11528 -11527 hdf4-hdf4.3.1/hdf/util/hdfed.input1000066400000000000000000000003441503061704500167620ustar00rootroot00000000000000open storm110.hdf info -all prev tag = 300 info -long dump -short close open ntcheck.hdf info -all prev tag = 30 ref = 1 next tag = 702 ref = 2 info -long dump -float next tag = 702 ref = 6 info -long dump -short close quit hdf4-hdf4.3.1/hdf/util/hdfed.out1000066400000000000000000000143701503061704500164360ustar00rootroot00000000000000 (1) Machine type : (Tag 107) Ref 4369 (2) Raster Image Data : (Tag 302) Ref 110 (3) Raster Image-8 : (Tag 202) Ref 110 (4) Number type : (Tag 106) Ref 110 (5) Image Dimensions-8 : (Tag 200) Ref 110 (6) Image Dimensions : (Tag 300) Ref 110 *(7) Raster Image Group : (Tag 306) Ref 110 (6) Image Dimensions : (Tag 300) Ref: 110, Offset: 3459, Length: 20 (bytes) 0: 0 57 0 57 106 110 12: 1 0 0 0 (1) Version Descriptor : (Tag 30) Ref 1 (2) Scientific Data : (Tag 702) Ref 2 (3) Number type : (Tag 106) Ref 2 (4) SciData dimension record : (Tag 701) Ref 2 (5) SciData scales : (Tag 703) Ref 2 (6) SciData max/min : (Tag 707) Ref 2 (7) Calibration information : (Tag 731) Ref 2 (8) Links related to the dataset : (Tag 710) Ref 2 *(9) Numeric Data Group : (Tag 720) Ref 2 (10) Scientific Data Group : (Tag 700) Ref 2 (11) Scientific Data : (Tag 702) Ref 3 (12) Number type : (Tag 106) Ref 3 (13) SciData dimension record : (Tag 701) Ref 3 (14) SciData scales : (Tag 703) Ref 3 (15) SciData max/min : (Tag 707) Ref 3 (16) Numeric Data Group : (Tag 720) Ref 3 (17) Scientific Data : (Tag 702) Ref 4 (18) Number type : (Tag 106) Ref 4 (19) SciData dimension record : (Tag 701) Ref 4 (20) SciData scales : (Tag 703) Ref 4 (21) SciData max/min : (Tag 707) Ref 4 (22) Numeric Data Group : (Tag 720) Ref 4 (23) Scientific Data : (Tag 702) Ref 5 (24) Number type : (Tag 106) Ref 5 (25) SciData dimension record : (Tag 701) Ref 5 (26) SciData scales : (Tag 703) Ref 5 (27) SciData max/min : (Tag 707) Ref 5 (28) Numeric Data Group : (Tag 720) Ref 5 (29) Scientific Data : (Tag 702) Ref 6 (30) Number type : (Tag 106) Ref 6 (31) SciData dimension record : (Tag 701) Ref 6 (32) SciData scales : (Tag 703) Ref 6 (33) SciData max/min : (Tag 707) Ref 6 (34) Numeric Data Group : (Tag 720) Ref 6 (35) Scientific Data : (Tag 702) Ref 7 (36) Number type : (Tag 106) Ref 7 (37) SciData dimension record : (Tag 701) Ref 7 (38) SciData scales : (Tag 703) Ref 7 (39) SciData max/min : (Tag 707) Ref 7 (40) Numeric Data Group : (Tag 720) Ref 7 (41) Scientific Data : (Tag 702) Ref 8 (42) Number type : (Tag 106) Ref 8 (43) SciData dimension record : (Tag 701) Ref 8 (44) SciData scales : (Tag 703) Ref 8 (45) SciData max/min : (Tag 707) Ref 8 (46) Numeric Data Group : (Tag 720) Ref 8 (2) Scientific Data : (Tag 702) Ref: 2, Offset: 294, Length: 400 (bytes) 0: 0.000000e+00 1.000000e+00 2.000000e+00 3.000000e+00 16: 4.000000e+00 5.000000e+00 6.000000e+00 7.000000e+00 32: 8.000000e+00 9.000000e+00 4.000000e+01 4.100000e+01 48: 4.200000e+01 4.300000e+01 4.400000e+01 4.500000e+01 64: 4.600000e+01 4.700000e+01 4.800000e+01 4.900000e+01 80: 8.000000e+01 8.100000e+01 8.200000e+01 8.300000e+01 96: 8.400000e+01 8.500000e+01 8.600000e+01 8.700000e+01 112: 8.800000e+01 8.900000e+01 1.200000e+02 1.210000e+02 128: 1.220000e+02 1.230000e+02 1.240000e+02 1.250000e+02 144: 1.260000e+02 1.270000e+02 1.280000e+02 1.290000e+02 160: 1.600000e+02 1.610000e+02 1.620000e+02 1.630000e+02 176: 1.640000e+02 1.650000e+02 1.660000e+02 1.670000e+02 192: 1.680000e+02 1.690000e+02 2.000000e+02 2.010000e+02 208: 2.020000e+02 2.030000e+02 2.040000e+02 2.050000e+02 224: 2.060000e+02 2.070000e+02 2.080000e+02 2.090000e+02 240: 2.400000e+02 2.410000e+02 2.420000e+02 2.430000e+02 256: 2.440000e+02 2.450000e+02 2.460000e+02 2.470000e+02 272: 2.480000e+02 2.490000e+02 2.800000e+02 2.810000e+02 288: 2.820000e+02 2.830000e+02 2.840000e+02 2.850000e+02 304: 2.860000e+02 2.870000e+02 2.880000e+02 2.890000e+02 320: 3.200000e+02 3.210000e+02 3.220000e+02 3.230000e+02 336: 3.240000e+02 3.250000e+02 3.260000e+02 3.270000e+02 352: 3.280000e+02 3.290000e+02 3.600000e+02 3.610000e+02 368: 3.620000e+02 3.630000e+02 3.640000e+02 3.650000e+02 384: 3.660000e+02 3.670000e+02 3.680000e+02 3.690000e+02 400: (29) Scientific Data : (Tag 702) Ref: 6, Offset: 1616, Length: 200 (bytes) 0: 0 1 2 3 4 5 12: 6 7 8 9 6000 6001 24: 6002 6003 6004 6005 6006 6007 36: 6008 6009 12000 12001 12002 12003 48: 12004 12005 12006 12007 12008 12009 60: 18000 18001 18002 18003 18004 18005 72: 18006 18007 18008 18009 24000 24001 84: 24002 24003 24004 24005 24006 24007 96: 24008 24009 30000 30001 30002 30003 108: 30004 30005 30006 30007 30008 30009 120: -29536 -29535 -29534 -29533 -29532 -29531 132: -29530 -29529 -29528 -29527 -23536 -23535 144: -23534 -23533 -23532 -23531 -23530 -23529 156: -23528 -23527 -17536 -17535 -17534 -17533 168: -17532 -17531 -17530 -17529 -17528 -17527 180: -11536 -11535 -11534 -11533 -11532 -11531 192: -11530 -11529 -11528 -11527 hdf4-hdf4.3.1/hdf/util/hdfgifwr.c000066400000000000000000000313211503061704500165110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * hdfgifwr.c - handles writing of GIF files. * * Contains: * hdfWriteGIF(fp, pic, ptype, w, h, rmap, gmap, bmap, numcols, colorstyle, * comment) * * Note: slightly brain-damaged, in that it'll only write non-interlaced * GIF files (in the interests of speed, or something) * */ /***************************************************************** * Portions of this code Copyright (C) 1989 by Michael Mauldin. * Permission is granted to use this file in whole or in * part for any purpose, educational, recreational or commercial, * provided that this copyright notice is retained unchanged. * This software is available to all free of charge by anonymous * FTP and in the UUNET archives. * * * Authors: Michael Mauldin (mlm@cs.cmu.edu) * David Rowley (mgardi@watdcsu.waterloo.edu) * * Based on: compress.c - File compression ala IEEE Computer, June 1984. * * Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) * Jim McKie (decvax!mcvax!jim) * Steve Davies (decvax!vax135!petsd!peora!srd) * Ken Turkowski (decvax!decwrl!turtlevax!ken) * James A. Woods (decvax!ihnp4!ames!jaw) * Joe Orost (decvax!vax135!petsd!joe) *****************************************************************/ #include #include #include #include "gif.h" typedef BYTE byte; typedef long int count_int; /* indices into conv24MB */ #define CONV24_8BIT 0 #define CONV24_24BIT 1 #define CONV24_SEP1 2 #define CONV24_LOCK 3 #define CONV24_SEP2 4 #define CONV24_FAST 5 #define CONV24_SLOW 6 #define CONV24_BEST 7 #define CONV24_MAX 8 /* values 'picType' can take */ #define PIC8 CONV24_8BIT #define PIC24 CONV24_24BIT /* MONO returns total intensity of r,g,b components */ #define MONO(rd, gn, bl) (((rd) * 11 + (gn) * 16 + (bl) * 5) >> 5) /*.33R+ .5G+ .17B*/ static int curx, cury; static long CountDown; static int Interlace; static void compress(int, FILE *, byte *, int); static void output(int); static void cl_block(void); static void cl_hash(count_int); static void char_init(void); static void char_out(int); static void flush_char(void); static byte pc2nc[256], r1[256], g1[256], b1[256]; /*************************************************************/ int hdfWriteGIF(FILE *fp, byte *pic, int ptype, int w, int h, byte *rmap, byte *gmap, byte *bmap, byte *pc2ncmap, int numcols, int colorstyle, int BitsPerPixel) { int InitCodeSize; int i; byte *pic8; pic8 = pic; (void)ptype; (void)numcols; (void)colorstyle; Interlace = 0; for (i = 0; i < 256; i++) { pc2nc[i] = pc2ncmap[i]; r1[i] = rmap[i]; g1[i] = gmap[i]; b1[i] = bmap[i]; } CountDown = w * h; /* # of pixels we'll be doing */ if (BitsPerPixel <= 1) InitCodeSize = 2; else InitCodeSize = BitsPerPixel; curx = cury = 0; if (!fp) { fprintf(stderr, "WriteGIF: file not open for writing\n"); return (1); } compress(InitCodeSize + 1, fp, pic8, w * h); if (ferror(fp)) return -1; return (0); } /***********************************************************************/ static unsigned long cur_accum = 0; static int cur_bits = 0; #define MAXCODE(n_bits) ((1 << (n_bits)) - 1) #define XV_BITS 12 /* BITS was already defined on some systems */ #define HSIZE 5003 /* 80% occupancy */ typedef unsigned char char_type; static int n_bits; /* number of bits/code */ static int maxbits = XV_BITS; /* user settable max # bits/code */ static int maxcode; /* maximum code, given n_bits */ static int maxmaxcode = 1 << XV_BITS; /* NEVER generate this */ static count_int htab[HSIZE]; static unsigned short codetab[HSIZE]; #define HashTabOf(i) htab[i] #define CodeTabOf(i) codetab[i] static int hsize_g = HSIZE; /* for dynamic table sizing */ /* * To save much memory, we overlay the table used by compress() with those * used by decompress(). The tab_prefix table is the same size and type * as the codetab. The tab_suffix table needs 2**BITS characters. We * get this from the beginning of htab. The output stack uses the rest * of htab, and contains characters. There is plenty of room for any * possible stack (stack used to be 8000 characters). */ #define tab_prefixof(i) CodeTabOf(i) #define tab_suffixof(i) ((char_type *)(htab))[i] #define de_stack ((char_type *)&tab_suffixof(1 << XV_BITS)) static int free_ent = 0; /* first unused entry */ /* * block compression parameters -- after all codes are used up, * and compression rate changes, start over. */ static int clear_flg = 0; static long int in_count = 1; /* length of input */ static long int out_count = 0; /* # of codes output (for debugging) */ /* * compress stdin to stdout * * Algorithm: use open addressing double hashing (no chaining) on the * prefix code / next character combination. We do a variant of Knuth's * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime * secondary probe. Here, the modular division first probe is gives way * to a faster exclusive-or manipulation. Also do block compression with * an adaptive reset, whereby the code table is cleared when the compression * ratio decreases, but after the table fills. The variable-length output * codes are re-sized at this point, and a special CLEAR code is generated * for the decompressor. Late addition: construct the table according to * file size for noticeable speed improvement on small files. Please direct * questions about this implementation to ames!jaw. */ static int g_init_bits; static FILE *g_outfile; static int ClearCode; static int EOFCode; /********************************************************/ static void compress(int init_bits, FILE *outfile, byte *data, int len) { long fcode; int i = 0; int c; int ent; int disp; int hsize_reg; int hshift; /* * Set up the globals: g_init_bits - initial number of bits * g_outfile - pointer to output file */ g_init_bits = init_bits; g_outfile = outfile; /* initialize 'compress' globals */ maxbits = XV_BITS; maxmaxcode = 1 << XV_BITS; memset(htab, 0, sizeof(htab)); memset(codetab, 0, sizeof(codetab)); hsize_g = HSIZE; free_ent = 0; clear_flg = 0; in_count = 1; out_count = 0; cur_accum = 0; cur_bits = 0; /* * Set up the necessary values */ out_count = 0; clear_flg = 0; in_count = 1; maxcode = MAXCODE(n_bits = g_init_bits); ClearCode = (1 << (init_bits - 1)); EOFCode = ClearCode + 1; free_ent = ClearCode + 2; char_init(); ent = pc2nc[*data++]; len--; hshift = 0; for (fcode = (long)hsize_g; fcode < 65536L; fcode *= 2L) hshift++; hshift = 8 - hshift; /* set hash code range bound */ hsize_reg = hsize_g; cl_hash((count_int)hsize_reg); /* clear hash table */ output(ClearCode); while (len) { c = pc2nc[*data++]; len--; in_count++; fcode = (long)(((long)c << maxbits) + ent); i = (((int)c << hshift) ^ ent); /* xor hashing */ if (HashTabOf(i) == fcode) { ent = CodeTabOf(i); continue; } else if ((long)HashTabOf(i) < 0) /* empty slot */ goto nomatch; disp = hsize_reg - i; /* secondary hash (after G. Knott) */ if (i == 0) disp = 1; probe: if ((i -= disp) < 0) i += hsize_reg; if (HashTabOf(i) == fcode) { ent = CodeTabOf(i); continue; } if ((long)HashTabOf(i) >= 0) goto probe; nomatch: output(ent); out_count++; ent = c; if (free_ent < maxmaxcode) { CodeTabOf(i) = free_ent++; /* code -> hashtable */ HashTabOf(i) = fcode; } else cl_block(); } /* Put out the final code */ output(ent); out_count++; output(EOFCode); } /***************************************************************** * TAG( output ) * * Output the given code. * Inputs: * code: A n_bits-bit integer. If == -1, then EOF. This assumes * that n_bits =< (long)wordsize - 1. * Outputs: * Outputs code to the file. * Assumptions: * Chars are 8 bits long. * Algorithm: * Maintain a BITS character long buffer (so that 8 codes will * fit in it exactly). Use the VAX insv instruction to insert each * code in turn. When the buffer fills up empty it and start over. */ static unsigned long masks[] = {0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; static void output(int code) { cur_accum &= masks[cur_bits]; if (cur_bits > 0) cur_accum |= ((long)code << cur_bits); else cur_accum = code; cur_bits += n_bits; while (cur_bits >= 8) { char_out((unsigned int)(cur_accum & 0xff)); cur_accum >>= 8; cur_bits -= 8; } /* * If the next entry is going to be too big for the code size, * then increase it, if possible. */ if (free_ent > maxcode || clear_flg) { if (clear_flg) { maxcode = MAXCODE(n_bits = g_init_bits); clear_flg = 0; } else { n_bits++; if (n_bits == maxbits) maxcode = maxmaxcode; else maxcode = MAXCODE(n_bits); } } if (code == EOFCode) { /* At EOF, write the rest of the buffer */ while (cur_bits > 0) { char_out((unsigned int)(cur_accum & 0xff)); cur_accum >>= 8; cur_bits -= 8; } flush_char(); fflush(g_outfile); } } /********************************/ static void cl_block(void) /* table clear for block compress */ { /* Clear out the hash table */ cl_hash((count_int)hsize_g); free_ent = ClearCode + 2; clear_flg = 1; output(ClearCode); } /********************************/ /* reset code table */ static void cl_hash(count_int hsize) { count_int *htab_p = htab + hsize; long i; long m1 = -1; i = hsize - 16; do { *(htab_p - 16) = m1; *(htab_p - 15) = m1; *(htab_p - 14) = m1; *(htab_p - 13) = m1; *(htab_p - 12) = m1; *(htab_p - 11) = m1; *(htab_p - 10) = m1; *(htab_p - 9) = m1; *(htab_p - 8) = m1; *(htab_p - 7) = m1; *(htab_p - 6) = m1; *(htab_p - 5) = m1; *(htab_p - 4) = m1; *(htab_p - 3) = m1; *(htab_p - 2) = m1; *(htab_p - 1) = m1; htab_p -= 16; } while ((i -= 16) >= 0); for (i += 16; i > 0; i--) *--htab_p = m1; } /****************************************************************************** * * GIF Specific routines * ******************************************************************************/ /* * Number of characters so far in this 'packet' */ static int a_count; /* * Set up the 'byte output' routine */ static void char_init(void) { a_count = 0; } /* * Define the storage for the packet accumulator */ static char accum[256]; /* * Add a character to the end of the current packet, and if it is 254 * characters, flush the packet to disk. */ static void char_out(int c) { accum[a_count++] = c; if (a_count >= 254) flush_char(); } /* * Flush the packet to disk, and reset the accumulator */ static void flush_char(void) { if (a_count > 0) { fputc(a_count, g_outfile); fwrite(accum, 1, a_count, g_outfile); a_count = 0; } } hdf4-hdf4.3.1/hdf/util/hdfls.c000066400000000000000000000502161503061704500160150ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include "hfile_priv.h" #define MAXBUFF 8192 dd_t *desc_buf; intn debug = FALSE, /* Debugging is off by default */ ddblocks = FALSE, /* DD block dumping is off by default */ #ifdef DISKBLOCK_DEBUG diskblock_check = FALSE, /* check disk-block boundaries */ #endif /* DISKBLOCK_DEBUG */ sort = TRUE, /* Sorting is on by default */ longout = FALSE, /* short output by default */ labels = FALSE, /* no label info by default */ special = FALSE, /* no special info by default */ groups = FALSE; /* no group info by default */ static intn v_init_done = FALSE; /* whether the Vset interface has been */ /* initialized for this file */ uint16 only_tag = DFTAG_NULL; /* by default print info about all tags */ char *file_name; /* name of current file being listed */ int compare(const void *, const void *); int main(int, char *a[]); void lprint(int32, dd_t *, int); void print_item(int32, dd_t *, intn); void printfilever(int32 file_id); void usage(char *argv[]); int dumpDD(void); int compare(const void *aa, const void *bb) { const dd_t *a = (const dd_t *)aa; const dd_t *b = (const dd_t *)bb; if (a->tag > b->tag) return (1); if (a->tag < b->tag) return (-1); if (a->ref > b->ref) return (1); if (a->ref < b->ref) return (-1); return (0); } void print_item(int32 fid, dd_t *desc_list, intn n) { intn status; int32 len; char *name, *label_str; printf("\tRef no %6d\t%8d bytes\n", (int)desc_list[n].ref, (int)desc_list[n].length); /* print out labels and annotations if desired */ if (labels) { /* read in all of the labels */ len = DFANgetlablen(file_name, desc_list[n].tag, desc_list[n].ref); if (len != FAIL) { label_str = (char *)malloc((uint32)len + 1); status = DFANgetlabel(file_name, desc_list[n].tag, desc_list[n].ref, label_str, len + 1); label_str[len] = '\0'; if (status == FAIL) printf("\t Unable to read label\n"); else printf("\t Label: %s\n", label_str); free(label_str); } /* read in all of the annotations */ len = DFANgetdesclen(file_name, desc_list[n].tag, desc_list[n].ref); if (len != FAIL) { label_str = (char *)malloc((uint32)len + 1); status = DFANgetdesc(file_name, desc_list[n].tag, desc_list[n].ref, label_str, len + 1); label_str[len] = '\0'; if (status == FAIL) printf("\t Unable to read description\n"); else printf("\t Description: %s\n", label_str); free(label_str); } } if ((special) && (SPECIALTAG(desc_list[n].tag))) { /* print out special info if desired */ sp_info_block_t info; int32 aid, ret; aid = Hstartread(fid, desc_list[n].tag, desc_list[n].ref); if (aid == FAIL) return; ret = HDget_special_info(aid, &info); if ((ret == FAIL) || (info.key == FAIL)) return; switch (info.key) { case SPECIAL_LINKED: printf("\tLinked Block: first %ld standard %ld per unit %ld\n", (long)info.first_len, (long)info.block_len, (long)info.nblocks); break; case SPECIAL_EXT: printf("\tExternal File: path %s offset %ld\n", info.path, (long)info.offset); break; case SPECIAL_COMP: printf("\tCompressed Element: compression type: %s modeling type %s\n", (info.comp_type == COMP_CODE_NONE ? "None" : (info.comp_type == COMP_CODE_RLE ? "Run-Length" : (info.comp_type == COMP_CODE_NBIT ? "N-Bit" : (info.comp_type == COMP_CODE_SKPHUFF ? "Skipping Huffman" : (info.comp_type == COMP_CODE_DEFLATE ? "Deflated" : "Unknown"))))), (info.model_type == COMP_MODEL_STDIO ? "Standard" : "Unknown")); break; case SPECIAL_CHUNKED: printf("\tChunked Element: \n \tlogical size: %ld\n \tnumber of dimensions: %ld \n", (long)info.chunk_size, (long)info.ndims); printf("\tarray of chunk lengths for each dimension:"); for (int i = 0; i < info.ndims; i++) printf("\t %ld", (long)info.cdims[i]); printf("\n"); free(info.cdims); break; default: printf("\tDo not understand special element type %d\n", info.key); break; } Hendaccess(aid); } if ((groups) && (desc_list[n].tag == DFTAG_RIG || desc_list[n].tag == DFTAG_SDG || desc_list[n].tag == DFTAG_NDG || desc_list[n].tag == DFTAG_VG)) { /* print groups */ if (desc_list[n].tag != DFTAG_VG) { /* groups other than Vgroups */ int32 GroupID; DFdi elmt; printf("\tContents:\n"); if ((GroupID = DFdiread(fid, desc_list[n].tag, desc_list[n].ref)) >= 0) { while (!DFdiget(GroupID, &elmt.tag, &elmt.ref)) { name = (char *)HDgettagsname(elmt.tag); if (!name) printf("\t\t%-30s: (tag=%6d) ref=%d\n", "Unknown Tag", elmt.tag, elmt.ref); else { printf("\t\t%-30s: (tag=%6d) ref=%d\n", name, elmt.tag, elmt.ref); free(name); } /* end else */ } /* end while */ } /* end if */ else printf("\t\tNone!\n"); } /* end if */ else { /* dump Vgroup tag/refs */ int32 ntagrefs; int32 vkey; int32 *tag_arr, *ref_arr; if (v_init_done == FALSE) { /* init the V routines */ v_init_done = TRUE; Vinitialize(fid); } /* end if */ if ((vkey = Vattach(fid, (int32)desc_list[n].ref, "r")) != FAIL) { ntagrefs = Vntagrefs(vkey); printf("\tContents: %d items\n", (int)ntagrefs); if (ntagrefs > 0) { tag_arr = (int32 *)malloc(sizeof(int32) * (size_t)ntagrefs); ref_arr = (int32 *)malloc(sizeof(int32) * (size_t)ntagrefs); if (tag_arr == NULL || ref_arr == NULL) { free(tag_arr); free(ref_arr); } else { if (Vgettagrefs(vkey, tag_arr, ref_arr, ntagrefs) != FAIL) { for (int i = 0; i < ntagrefs; i++) { name = (char *)HDgettagsname((uint16)tag_arr[i]); if (!name) printf("\t\t%-30s: (tag=%6d) ref=%d\n", "Unknown Tag", (int)tag_arr[i], (int)ref_arr[i]); else { printf("\t\t%-30s: (tag=%6d) ref=%d\n", name, (int)tag_arr[i], (int)ref_arr[i]); free(name); } /* end else */ } /* end for */ } /* end if */ free(tag_arr); free(ref_arr); } /* end else */ } /* end if */ Vdetach(vkey); } /* end if */ } /* end else */ } /* dumping groups */ } /* print_item */ void lprint(int32 fid, dd_t *desc_tmp, int num) { intn j = 0, empty = 0; uint16 prev = 0; char *name; while (j < num) { if (desc_tmp[j].tag == DFTAG_NULL) { empty++; j++; continue; /* don't print anything now */ } /* * skip this tag if the user only wants to see some tags and * this is not one of them */ if (only_tag != DFTAG_NULL && only_tag != desc_tmp[j].tag) { j++; continue; } /* ** Find and print text description of this tag */ name = (char *)HDgettagsname(desc_tmp[j].tag); if (!name) printf("\n%-30s: (tag %d)\n", "Unknown Tag", desc_tmp[j].tag); else { printf("\n%-30s: (tag %d)\n", name, desc_tmp[j].tag); free(name); } /* ** Print out reference number information */ prev = desc_tmp[j].tag; if (longout) { while (desc_tmp[j].tag == prev && j < num) { print_item(fid, desc_tmp, j); j++; } } else { printf("\tRef nos:"); while (desc_tmp[j].tag == (uint16)prev && j < num) { printf(" %d", desc_tmp[j].ref); j++; } } } if (empty) printf("\nEmpty (tag %d): %d slots\n", DFTAG_NULL, empty); } /* print the library version of the file */ void printfilever(int32 file_id) { uint32 major, minor, release; char string[LIBVSTR_LEN + 1]; if (Hgetfileversion(file_id, &major, &minor, &release, string) == SUCCEED) { string[LIBVSTR_LEN] = '\0'; /* make it a null terminated string */ printf("File library version: "); printf("Major= %u, Minor=%u, Release=%u\nString=%s\n", (unsigned)major, (unsigned)minor, (unsigned)release, string); } else printf("(Does not have library version information)\n"); } /* print command usage */ void usage(char *argv[]) { printf("%s, %s\n\n", argv[0], LIBVER_STRING); #ifdef DISKBLOCK_DEBUG printf("%s [-o] [-l] [-d] [-v] [-g] [-s] [-h] [-x] [-t #] fn ....\n", argv[0]); #else /* DISKBLOCK_DEBUG */ printf("%s [-o] [-l] [-d] [-v] [-g] [-s] [-h] [-t #] fn ....\n", argv[0]); #endif /* DISKBLOCK_DEBUG */ printf(" This program displays information about the"); printf(" data elements in\n"); printf(" HDF file.\n"); printf(" -d: offset & length info of each element in the file\n"); printf(" -o: Ordered - display in reference number order\n"); printf(" -l: Long format - display more information\n"); printf(" -v: Verbose format - display text of annotations and labels.\n"); printf(" (Verbose format automatically puts you in Long format).\n"); printf(" -t #: List only information about a specific type of tag.\n"); printf(" For example '%s -t 700 foo.hdf' \n", argv[0]); printf(" will list information only about Scientific Data\n"); printf(" Groups.\n"); printf(" -s: Give detailed descriptions of \"special elements\"\n"); printf(" -g: List items in groups\n"); printf(" -h: Dump DD Block information\n"); #ifdef DISKBLOCK_DEBUG printf(" -x: Check disk block boundaries (also dumps DD blocks)\n"); #endif /* DISKBLOCK_DEBUG */ } /* dump the DD blocks */ int dumpDD(void) { hdf_file_t file_id; /* stdio file ID */ int32 next_block = MAGICLEN; uint8 *ddbuf; /* buffer to store the DD information */ uint8 buf[NDDS_SZ + OFFSET_SZ]; /* buffer to hold DD block info */ uint8 *b; int16 n_dds; /* number of DDs in the current block */ uint16 tag, ref; /* DD tag & ref */ int32 off, len; /* DD offset & length */ intn l; /* local counting variable */ file_id = HI_OPEN(file_name, DFACC_READ); if (OPENERR(file_id)) { printf("Error opening file: %s\n", file_name); return (FAIL); } /* end if */ while (next_block != 0) { if (HI_SEEK(file_id, next_block) == FAIL) { printf("Error seeking in file: %s\n", file_name); return (FAIL); } /* end if */ if (HI_READ(file_id, buf, NDDS_SZ + OFFSET_SZ) == FAIL) { printf("Error reading in file: %s\n", file_name); return (FAIL); } /* end if */ printf("current block: %ld,", (long)next_block); b = buf; INT16DECODE(b, n_dds); INT32DECODE(b, next_block); printf(" size of block: %ld, number of DDs:%d, next block: %ld\n", (long)(NDDS_SZ + OFFSET_SZ + (n_dds * DD_SZ)), (int)n_dds, (long)next_block); ddbuf = (uint8 *)malloc(n_dds * DD_SZ); if (HI_READ(file_id, ddbuf, n_dds * DD_SZ) == FAIL) { printf("Error reading in file: %s\n", file_name); return (FAIL); } /* end if */ b = ddbuf; for (l = 0; l < n_dds; l++) { #ifdef DISKBLOCK_DEBUG uint8 block_head[DISKBLOCK_HSIZE]; uint8 block_tail[DISKBLOCK_TSIZE]; #endif /* DISKBLOCK_DEBUG */ UINT16DECODE(b, tag); UINT16DECODE(b, ref); INT32DECODE(b, off); INT32DECODE(b, len); printf("\t[%5d] tag=%5u ref=%5u offset=%10ld length=%10ld\n", (int)l, (unsigned)tag, (unsigned)ref, (long)off, (long)len); #ifdef DISKBLOCK_DEBUG if ((tag != DFTAG_NULL && tag != DFTAG_FREE) && (len != INVALID_LENGTH && off != INVALID_OFFSET)) { if (HI_SEEK(file_id, off - DISKBLOCK_HSIZE) == FAIL) { printf("Error seeking in file: %s\n", file_name); return (FAIL); } /* end if */ if (HI_READ(file_id, block_head, DISKBLOCK_HSIZE) == FAIL) { printf("Error reading in file: %s\n", file_name); return (FAIL); } /* end if */ if (memcmp(block_head, diskblock_header, DISKBLOCK_HSIZE) != 0) { intn k; printf("Header wrong for disk block!\n"); for (k = 0; k < DISKBLOCK_HSIZE; k++) { printf("\tbyte: %d, current: %x, correct: %x\n", k, (unsigned)block_head[k], (unsigned)diskblock_header[k]); } /* end for */ } /* end if */ if (HI_SEEK(file_id, off + len) == FAIL) { printf("Error seeking in file: %s\n", file_name); return (FAIL); } /* end if */ if (HI_READ(file_id, block_tail, DISKBLOCK_TSIZE) == FAIL) { printf("Error reading in file: %s\n", file_name); return (FAIL); } /* end if */ if (memcmp(block_tail, diskblock_tail, DISKBLOCK_TSIZE) != 0) { intn k; printf("Tail wrong for disk block!\n"); for (k = 0; k < DISKBLOCK_HSIZE; k++) { printf("\tbyte: %d, current: %x, correct: %x\n", k, (unsigned)block_tail[k], (unsigned)diskblock_tail[k]); } /* end for */ } /* end if */ } /* end if */ #endif /* DISKBLOCK_DEBUG */ } /* end for */ free(ddbuf); } /* end while */ HI_CLOSE(file_id); return (SUCCEED); } int main(int argc, char *argv[]) { int32 fid, aid; int i = 1, j, n, status; while ((i < argc) && (argv[i][0] == '-')) { switch (argv[i][1]) { case 'o': /* give non ordered output */ sort = FALSE; break; case 'd': /* go into debugging mode */ debug = TRUE; break; case 'h': /* dump the dd blocks */ ddblocks = TRUE; break; #ifdef DISKBLOCK_DEBUG case 'x': /* check the disk-block boundaries (implies dumping dd blocks) */ diskblock_check = TRUE; ddblocks = TRUE; break; #endif /* DISKBLOCK_DEBUG */ case 'v': /* print labels for elements */ labels = TRUE; longout = TRUE; break; case 'l': /* give long output */ longout = TRUE; break; case 's': /* give info on special elements */ special = TRUE; longout = TRUE; break; case 'g': /* give info on groups */ groups = TRUE; longout = TRUE; break; case 't': if (argv[i][2] != '\0') only_tag = (uint16)atoi(&(argv[i][2])); else only_tag = (uint16)atoi(&(argv[++i][0])); break; default: printf("Unknown option : -%c\n", argv[1][1]); break; } i++; } /* * If a file name has not been supplied print the usage message */ if (i == argc) { usage(argv); exit(1); } desc_buf = (dd_t *)calloc(MAXBUFF, sizeof(dd_t)); while (i < argc) { file_name = argv[i]; printf("%s:\n", file_name); /* Dump the DD blocks, if asked */ if (ddblocks == TRUE) { if (dumpDD() == FAIL) { i++; continue; } } /* end if */ fid = Hopen(file_name, DFACC_READ, -1); if (fid == FAIL) { if (HEvalue(1) == DFE_NOTDFFILE) { printf("\tNot an HDF file.\n"); i++; continue; } else { HEprint(stderr, 0); } } printfilever(fid); aid = Hstartread(fid, DFTAG_WILDCARD, DFREF_WILDCARD); if (aid == FAIL) { HEprint(stderr, 0); i++; continue; } status = SUCCEED; for (n = 0; (n < MAXBUFF) && (status != FAIL); n++) { Hinquire(aid, NULL, &desc_buf[n].tag, &desc_buf[n].ref, &desc_buf[n].length, &desc_buf[n].offset, NULL, NULL, NULL); status = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); } if (debug) { printf("\n"); for (j = 0; j < n; j++) { printf("%6d) tag %6d ref %6d ", j, desc_buf[j].tag, desc_buf[j].ref); printf(" offset %10d length %10d\n", (int)desc_buf[j].offset, (int)desc_buf[j].length); } } if (sort) qsort((char *)desc_buf, (size_t)n, sizeof(dd_t), compare); v_init_done = FALSE; lprint(fid, desc_buf, n); if (v_init_done == TRUE) Vfinish(fid); if (Hendaccess(aid) == FAIL) HEprint(stderr, 0); if (Hclose(fid) == FAIL) HEprint(stderr, 0); i++; printf("\n"); if (n >= MAXBUFF) fprintf(stderr, "Warning: File may have more DD's than hdfls can display\n"); } free(desc_buf); return (0); } hdf4-hdf4.3.1/hdf/util/hdfpack.c000066400000000000000000000415011503061704500163120ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** FILE ** hdfpack.c ** USAGE ** hdfpack [options] ** DESCRIPTION ** This program will compact an HDF file by reading in all the data ** elements in the file and writing them out to a new file. ** Options are: ** -b Don't coalesce linked-block elements ** -i Interactive mode; prompt for each linked-block element ** -d# Force the output file to have # DDs per DD block ** -t# Force output file to have # linked blocks per table entry ** -x Keep external objects external ** -r rename external objects ** Only one of options b and i can be specified. ** COMMENTS, BUGS, ASSUMPTIONS ** Both arguments must be supplied to the program and they cannot be ** identical. ** You must have enough additional disk space for the compacted file. */ #include #include #include "hdf.h" #include "herr.h" #include "hfile_priv.h" typedef struct mydd_t { uint16 tag; uint16 ref; int32 offset; int32 length; int16 special; } mydd_t; /* Static function prototypes */ int promptblocks(mydd_t *dd); void copy_blocks(mydd_t *dd, int32 infile, int32 outfile); void merge_blocks(mydd_t *dd, int32 infile, int32 outfile); int main(int, char *a[]); static void usage(char *); static void hdferror(void); static void error(const char *); int desc_comp(const void *d1, const void *d2); unsigned char *data; char invoke[81]; int32 data_size; int32 nblk = 0; char *from_file = NULL; char *to_file = NULL; int main(int argc, char *argv[]) { int i, num_desc, fnum, merge; int32 infile, outfile, aid, ret; mydd_t *dlist; int32 oldoff, oldlen; int blocks = 1; int intr = 0; int16 ndds = 0; int optset = 0; intn external = FALSE; char *tmp, fname[2][80]; /* ** Get invocation name of program */ tmp = (char *)NULL; strcpy(invoke, strtok(argv[0], "/]\\\0")); for (;;) { if (tmp != NULL) strcpy(invoke, tmp); if ((tmp = strtok((char *)NULL, "/]\\\0")) == NULL) break; } if (argc < 3) { usage(invoke); exit(1); } /* ** Get option flags */ fnum = 0; i = 1; while (i < argc) { if (argv[i][0] == '-') { switch (argv[i][1]) { case 'b': if (optset == 0) { blocks = 0; optset = 1; } else { error("incompatible options: -i and -b"); } break; case 'i': if (optset == 0) { intr = 1; blocks = 0; optset = 1; } else { error("incompatible options: -i and -b"); } break; case 'd': ndds = (int16)atoi(&argv[i][2]); break; case 't': nblk = atoi(&argv[i][2]); break; case 'x': external = TRUE; break; case 'r': from_file = argv[++i]; to_file = argv[++i]; break; default: fprintf(stderr, "Unknown option -%c ignored\n", argv[i][1]); break; } } else { if (fnum < 2) { strcpy(fname[fnum], argv[i]); fnum++; } } i++; } /* ** Enough [unique] file arguments? */ if ((fnum != 2) || (strcmp(fname[0], fname[1]) == 0)) { error("need 2 unique file names"); } if (from_file && to_file) printf("Going to rename external file %s to %s\n", from_file, to_file); /* ** Check to make sure input file is HDF */ ret = (int)Hishdf(fname[0]); if (ret == FALSE) hdferror(); /* ** Open input and output files */ infile = Hopen(fname[0], DFACC_READ, 0); if (infile == FAIL) hdferror(); outfile = Hopen(fname[1], DFACC_CREATE, ndds); if (outfile == FAIL) hdferror(); /* ** See how many data elements there ** are and make room for their DD's */ num_desc = (int)Hnumber(infile, DFTAG_WILDCARD); if (num_desc == FAIL) hdferror(); dlist = (mydd_t *)malloc(num_desc * sizeof(*dlist)); if (dlist == NULL) error("\tWow! That file must be HUGE!\n\tThere isn't enough memory to hold the DD's.\n"); /* ** Allocate data buffer - try 1 Meg first, work down */ data_size = 1048576; /* 1 MB */ data = NULL; while ((data = (unsigned char *)malloc(data_size)) == NULL) data_size /= 2; /* okay then, cut request by half */ /* ** Get all DD's for data elements */ aid = Hstartread(infile, DFTAG_WILDCARD, DFREF_WILDCARD); if (aid == FAIL) { printf("MAJOR PROBLEM: Hstartread for DD's; line %d\n", __LINE__); hdferror(); } for (i = 0; i < num_desc; i++) { /* * Get data about the current one */ Hinquire(aid, NULL, &dlist[i].tag, &dlist[i].ref, &dlist[i].length, &dlist[i].offset, NULL, NULL, &dlist[i].special); /* * Move to the next one */ ret = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); /* * Fail if there are none left and we expect more */ if ((ret == FAIL) && (i + 1 < num_desc)) { printf("MAJOR PROBLEM: DDs; only got %d of %d; line %d\n", i, num_desc, __LINE__); hdferror(); } } /* * Close the access element */ ret = Hendaccess(aid); if (ret == FAIL) hdferror(); /* ** Sort DD's by offset to make it easy to ** find DD's that point to the same data */ qsort((char *)dlist, (size_t)num_desc, sizeof(*dlist), desc_comp); oldoff = -2; oldlen = -2; for (i = 0; i < num_desc; i++) { if (((dlist[i].tag != DFTAG_NULL) && (dlist[i].tag != DFTAG_VERSION)) && (dlist[i].tag != DFTAG_LINKED)) { if ((dlist[i].offset != oldoff) || (dlist[i].length != oldlen)) { /* ** if this DD points to different data, read the data ** from the old file and write it to the new file */ switch (dlist[i].special) { case SPECIAL_LINKED: if (intr == 1) merge = promptblocks(&dlist[i]); else merge = blocks; if (merge == 0) { copy_blocks(&dlist[i], infile, outfile); } else { merge_blocks(&dlist[i], infile, outfile); } break; case SPECIAL_EXT: if (external) { sp_info_block_t info; int32 _aid, new_aid; char *name; /* get file name and offset */ _aid = Hstartread(infile, dlist[i].tag, dlist[i].ref); if (_aid == FAIL) continue; ret = HDget_special_info(_aid, &info); if ((ret == FAIL) || (info.key != SPECIAL_EXT)) continue; /* see if should be renamed */ if (from_file && !strcmp(info.path, from_file)) name = to_file; else name = info.path; /* create the new one */ new_aid = HXcreate(outfile, BASETAG(dlist[i].tag), dlist[i].ref, name, info.offset, dlist[i].length); /* close the elements */ Hendaccess(_aid); Hendaccess(new_aid); } else { /* pull into the file */ merge_blocks(&dlist[i], infile, outfile); } break; case SPECIAL_COMP: /* This code assumes that you'd like to leave the compressed data that way and not expand it */ { int32 _aid, len; void **buf; /* Read in old compressed data description */ if ((_aid = Hstartaccess(infile, dlist[i].tag, dlist[i].ref, DFACC_READ)) == FAIL) continue; HQuerylength(aid, &len); buf = malloc(len); Hread(_aid, len, buf); Hendaccess(_aid); /* Write compressed data description into new file */ if ((_aid = Hstartaccess(outfile, dlist[i].tag, dlist[i].ref, DFACC_WRITE)) == FAIL) continue; Hwrite(_aid, len, buf); Hendaccess(_aid); free(buf); } break; default: merge_blocks(&dlist[i], infile, outfile); break; } /* switch (special) */ } else { /* ** otherwise, just make a new DD for same data */ ret = Hdupdd(outfile, dlist[i].tag, dlist[i].ref, dlist[i - 1].tag, dlist[i - 1].ref); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } } } /* ** save offset of data to check against next DD */ oldoff = dlist[i].offset; } free(data); free(dlist); /* ** done; close files */ Hclose(infile); Hclose(outfile); return (0); } /* ** NAME ** promptblocks */ int promptblocks(mydd_t *dd) { char ans[80]; printf("Would you like to coalesce the following linked-block element:\n"); printf("\ttag = %d\n\tref = %d\n(y/n): ", dd->tag, dd->ref); fgets(ans, 80, stdin); if ((ans[0] == 'y') || (ans[0] == 'Y')) return (1); else return (0); } /* ** NAME ** copy_blocks -- move a linked-block element; preserve blocking */ void copy_blocks(mydd_t *dd, int32 infile, int32 outfile) { int32 inaid, ret, rdret, outaid; sp_info_block_t info; inaid = Hstartread(infile, dd->tag, dd->ref); ret = HDget_special_info(inaid, &info); if ((ret != SUCCEED) || (info.key != SPECIAL_LINKED)) { HERROR(DFE_GENAPP); hdferror(); } /* ** copy first block */ outaid = Hstartwrite(outfile, BASETAG(dd->tag), dd->ref, info.first_len); if (outaid == FAIL) { HERROR(DFE_GENAPP); hdferror(); } rdret = 0; while (rdret < info.first_len) { ret = Hread(inaid, (data_size < info.first_len) ? data_size : info.first_len, data); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } rdret += ret; ret = Hwrite(outaid, ret, data); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } } ret = Hendaccess(outaid); /* ** promote to linked-block element */ if (nblk > 0) info.nblocks = nblk; outaid = HLcreate(outfile, BASETAG(dd->tag), dd->ref, info.block_len, info.nblocks); if (outaid == FAIL) { HERROR(DFE_GENAPP); hdferror(); } /* ** copy remaining blocks */ rdret = data_size; while (rdret == data_size) { rdret = Hread(inaid, data_size, data); if (rdret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } if (rdret != 0) { ret = Hwrite(outaid, rdret, data); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } } } Hendaccess(outaid); Hendaccess(inaid); } /* ** NAME ** merge_blocks */ void merge_blocks(mydd_t *dd, int32 infile, int32 outfile) { int32 inaid, outaid, ret, len; inaid = Hstartread(infile, dd->tag, dd->ref); if (inaid == FAIL) { HERROR(DFE_GENAPP); hdferror(); } outaid = Hstartaccess(outfile, BASETAG(dd->tag), dd->ref, DFACC_WRITE); if (outaid == FAIL) { HERROR(DFE_GENAPP); hdferror(); } while (dd->length > 0) { dd->length -= (len = Hread(inaid, data_size, data)); if (len == FAIL) { HERROR(DFE_GENAPP); hdferror(); } ret = Hwrite(outaid, len, data); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } } ret = Hendaccess(inaid); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } ret = Hendaccess(outaid); if (ret == FAIL) { HERROR(DFE_GENAPP); hdferror(); } } /* ** NAME ** usage -- print out usage template ** USAGE ** int usage() ** RETURNS ** none ** DESCRIPTION ** Print hdfpack's usage template to stdout. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES */ static void usage(char *name) { fprintf(stderr, "Usage: %s [-i | -b] [-d#] [-t#] [-x] [-r ] \n", name); fprintf(stderr, "\t-t# : reset the linked block sizing\n"); fprintf(stderr, "\t-d# : reset the number of DDs per DD block\n"); fprintf(stderr, "\t-i : interactively merge linked blocks\n"); fprintf(stderr, "\t-b : maintain linked blocking sizes\n"); fprintf(stderr, "\t-x : keep external elements external\n"); fprintf(stderr, "\t-r :\n"); fprintf(stderr, "\t change external element names matching to \n"); } /* ** NAME ** hdferror -- print out HDF error number ** USAGE ** int hdferror() ** RETURNS ** none ** DESCRIPTION ** Print an HDF error number to stderr. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This routine terminates the program with code 1. ** EXAMPLES */ static void hdferror(void) { HEprint(stderr, 0); exit(1); } /* ** NAME ** error -- print error to stderr ** USAGE ** int error(string); ** char *string; IN: pointer to error description string ** RETURNS ** none ** DESCRIPTION ** Print an HDF error number to stderr. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This routine terminates the program with code 1. ** EXAMPLES */ static void error(const char *string) { fprintf(stderr, "%s: %s\n", invoke, string); exit(1); } /* ** NAME ** desc_comp -- compare two DD's by offset ** USAGE ** int desc_cmp(d1, d2) ** mydd_t *d1 IN: pointer to a DD ** mydd_t *d2 IN: pointer to a DD ** RETURNS ** A number less than, greater than, or equal to 0, according to ** whether d1's offset is less than, greater than, or equal to ** d2's offset. ** DESCRIPTION ** A pointer to this routine is passed to qsort() as the comparison ** function for the sort. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** EXAMPLES */ int desc_comp(const void *d1, const void *d2) { return ((int)(((const mydd_t *)d1)->offset - ((const mydd_t *)d2)->offset)); } hdf4-hdf4.3.1/hdf/util/hdfpack.out1000066400000000000000000000034201503061704500167560ustar00rootroot00000000000000test.hdf: Linked Blocks Indicator : (tag 20) Ref nos: 59 60 61 113 114 115 116 117 118 119 120 Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 133 141 150 158 167 SciData dimension record : (tag 701) Ref nos: 133 141 150 158 167 Scientific Data : (tag 702) Ref nos: 58 Numeric Data Group : (tag 720) Ref nos: 2 3 4 5 6 Vdata : (tag 1962) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vdata Storage : (tag 1963) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vgroup : (tag 1965) Ref nos: 122 124 126 134 142 151 159 168 171 Special Scientific Data : (tag 17086) Ref nos: 59 113 116 119 test.pck: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 133 141 150 158 167 SciData dimension record : (tag 701) Ref nos: 133 141 150 158 167 Scientific Data : (tag 702) Ref nos: 58 59 113 116 119 Numeric Data Group : (tag 720) Ref nos: 2 3 4 5 6 Vdata : (tag 1962) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vdata Storage : (tag 1963) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vgroup : (tag 1965) Ref nos: 122 124 126 134 142 151 159 168 171 hdf4-hdf4.3.1/hdf/util/hdfpack.out1.1000066400000000000000000000017211503061704500171170ustar00rootroot00000000000000test.hdf: Linked Blocks Indicator : (tag 20) Ref nos: 59 60 61 113 114 115 116 117 118 119 120 Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 133 141 150 158 167 SciData dimension record : (tag 701) Ref nos: 133 141 150 158 167 Scientific Data : (tag 702) Ref nos: 58 Numeric Data Group : (tag 720) Ref nos: 2 3 4 5 6 Vdata : (tag 1962) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vdata Storage : (tag 1963) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vgroup : (tag 1965) Ref nos: 122 124 126 134 142 151 159 168 171 Special Scientific Data : (tag 17086) Ref nos: 59 113 116 119 hdf4-hdf4.3.1/hdf/util/hdfpack.out1.2000066400000000000000000000014771503061704500171300ustar00rootroot00000000000000test.pck: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 133 141 150 158 167 SciData dimension record : (tag 701) Ref nos: 133 141 150 158 167 Scientific Data : (tag 702) Ref nos: 58 59 113 116 119 Numeric Data Group : (tag 720) Ref nos: 2 3 4 5 6 Vdata : (tag 1962) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vdata Storage : (tag 1963) Ref nos: 121 123 125 127 128 129 130 131 132 135 136 137 138 139 140 143 144 145 146 147 148 149 152 153 154 155 156 157 160 161 162 163 164 165 166 169 170 Vgroup : (tag 1965) Ref nos: 122 124 126 134 142 151 159 168 171 hdf4-hdf4.3.1/hdf/util/hdftopal.c000066400000000000000000000053771503061704500165260ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * hdftopal.c * Version: 1.0 date: August 1, 1989 * This utility converts a palette from an HDF file * to a raw palette in a raw palette file. * The outgoing palette will have 768 bytes: First * 256 red values, then 256 greens, then 256 blues. * * by Mike Folk * first version of hdftopal: 8/01/89 * * This program is in the public domain * */ #include #include "hdf.h" int main(int argc, char *argv[]); int rawpalconv(char *hdffile, char *rawpalfile); int main(int argc, char *argv[]) { if (argc != 3) { printf("Usage:\n"); printf(" %s hdffile rawpalfile \n\n", argv[0]); printf("%s, version: 1.1 date: July 1, 1992\n\n", argv[0]); printf(" This utility converts a palette from an HDF file \n"); printf(" to a raw palette in a raw palette file.\n\n"); printf(" The outgoing palette will have 768 bytes: First \n"); printf(" 256 red values, then 256 greens, then 256 blues.\n\n"); exit(1); } rawpalconv(argv[1], argv[2]); return (0); } /* * rawpalconv(palfile, outfile) sets the palette */ int rawpalconv(char *hdffile, char *rawpalfile) { uint8 palspace[1024], reds[256], greens[256], blues[256], *p; FILE *fp; int j, ret; ret = DFPgetpal(hdffile, (char *)palspace); if (ret < 0) { printf("Error in reading file %s\n", hdffile); exit(1); } p = palspace; for (j = 0; j < 256; j++) { reds[j] = *p++; greens[j] = *p++; blues[j] = *p++; } fp = fopen(rawpalfile, "wb"); if (fp == NULL) { printf("Error opening raw palette file %s\n", rawpalfile); exit(1); } fwrite(reds, 1, 256, fp); fwrite(greens, 1, 256, fp); fwrite(blues, 1, 256, fp); fclose(fp); return (0); } hdf4-hdf4.3.1/hdf/util/hdftor8.c000066400000000000000000000270071503061704500162750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * hdftor8.c * Extract images from HDF file to raster files */ #include #include #include "hdf.h" #define PALETTE_SIZE 768 /* size of palette array */ #define COLOR_SIZE 256 /* size of palette color array */ /* COLOR_SIZE == PALETTE_SIZE / 3 */ #define INTERACTIVE 'i' /* interactive option */ #define RASTER_FILE 'r' /* raster filename template */ #define PALETTE_FILE 'p' /* palette filename template */ #define VERBOSE 'v' /* verbose option */ #define TEMPLATE_NUMBER '#' /* image or palette number positions */ #define TEMPLATE_XDIM '@' /* image x dim positions */ #define TEMPLATE_YDIM '%' /* image y dim positions */ const char D_RASTER_TEM[] = "img#-@.%"; /* default raster file name template */ const char D_PALETTE_TEM[] = "pal#"; /* default palette file name template */ int interactive; /* interactive option */ int verbose; /* verbose option */ int main(int argc, char *argv[]); void putRaster(const char *template, int32 xdim, int32 ydim, int imageNumber, uint8 *image); void putPalette(const char *template, int imageNumber, uint8 *palette); void convert(const char *template, int imageNumber, int32 xdim, int32 ydim, char *stringOut); void fillStr(const char **template, char **stringOut, char *string, char specialChar); char *newSpace(int32 size); const char *getTemplate(const char *type, int imageNumber); int main(int argc, char *argv[]) { int i, imageNumber, ispal, err_val; int32 xdim, ydim; char *hdfFile; uint8 *image, palette[PALETTE_SIZE]; const char *rasterTemplate = NULL, *paletteTemplate = NULL; if (argc < 2) { printf("%s, version: 1.1 date: July 1, 1992\n", argv[0]); printf("\t This utility extracts all raster-8 images and/or\n"); printf("\t palettes from an HDF file and stores them in two sets of\n"); printf("\t files containing only images and palettes, respectively.\n"); printf("Usage:\n"); printf("hdftor8 hdf_file [-i] [-v] [-r image_file] [-p pal_file]\n"); printf("\t -i: interactive (specify filenames interactively)\n"); printf("\t -v: verbose (provide descriptive messages)\n"); printf("\t Images and palettes are placed in the specified files\n"); printf("\t The names of these files may contain special characters\n"); printf("\t\t which will be replaced by numbers:\n"); printf("\t # replace with image or palette number\n"); printf("\t @ replace with x dim of image\n"); printf("\t %% replace with y dim of image\n"); printf("\t If not specified, image filename defaults to img#-@.%%\n"); printf("\t If not specified, palette filename defaults to pal.#\n\n"); exit(1); } hdfFile = argv[1]; for (i = 2; i < argc; i++) { if (*argv[i] == '-') { switch (argv[i][1]) { case INTERACTIVE: interactive = TRUE; break; case RASTER_FILE: rasterTemplate = argv[++i]; break; case PALETTE_FILE: paletteTemplate = argv[++i]; break; case VERBOSE: verbose = TRUE; break; default: printf("Illegal option: %s, skipping...\n", argv[i]); break; } } else printf("Illegal option: %s, skipping...\n", argv[i]); } if (!rasterTemplate && !interactive) rasterTemplate = D_RASTER_TEM; if (!paletteTemplate && !interactive) paletteTemplate = D_PALETTE_TEM; for (imageNumber = 1; !DFR8getdims(hdfFile, &xdim, &ydim, &ispal);) { image = (uint8 *)newSpace(xdim * ydim); if (verbose) { if (ispal) printf("Getting image and palette %d.\n", imageNumber); else printf("Getting image %d.\n", imageNumber); printf("Image dimensions : %d * %d\n", (int)xdim, (int)ydim); } if (!DFR8getimage(hdfFile, image, xdim, ydim, palette)) { putRaster(rasterTemplate, xdim, ydim, imageNumber, image); if (ispal) putPalette(paletteTemplate, imageNumber, palette); imageNumber++; } else break; } err_val = (int)HEvalue(1); if ((err_val != DFE_NOMATCH) && (err_val != DFE_NONE)) { if (verbose) HEprint(stderr, 0); exit(1); } return (0); } /* * putRaster * * Write the image to a raster image file. * * INPUT: * template : pointer to template string * xdim : x dimension of image * ydim : y dimension of image * imageNumber : (need I say more?) * image : pointer to image array */ void putRaster(const char *template, int32 xdim, int32 ydim, int imageNumber, uint8 *image) { FILE *fd; char fileName[DF_MAXFNLEN]; if (!template) /* can assume interactive (see main) */ template = getTemplate("image", imageNumber); convert(template, imageNumber, xdim, ydim, fileName); if (verbose) printf("Writing into image file : %s\n", fileName); if ((fd = fopen(fileName, "wb")) == NULL) { puts("Unable to open file. Exiting..."); exit(1); } if (fwrite(image, (size_t)xdim, (size_t)ydim, fd) != (unsigned)ydim) { puts("Unable to write to file. Exiting..."); exit(1); } if (fclose(fd)) { puts("Unable to close file. Exiting..."); exit(1); } } /* * putPalette * * Write palette array out to palette file. * * INPUT: * template : palette filename template * imageNumber : Yes, the number of the image * palette : pointer to the palette array */ void putPalette(const char *template, int imageNumber, uint8 *palette) { int i; FILE *fd; char fileName[DF_MAXFNLEN], reds[COLOR_SIZE]; char greens[COLOR_SIZE], blues[COLOR_SIZE]; if (!template) /* can assume interactive (see main) */ template = getTemplate("palette", imageNumber); convert(template, imageNumber, (int32)1, (int32)768, fileName); if (verbose) printf("Writing into palette file : %s\n", fileName); if ((fd = fopen(fileName, "wb")) == NULL) { puts("Unable to open file. Exiting..."); exit(1); } for (i = 0; i < COLOR_SIZE; i++) { reds[i] = *palette++; greens[i] = *palette++; blues[i] = *palette++; } if (fwrite(reds, 1, COLOR_SIZE, fd) != COLOR_SIZE) { printf("Unable to write to file. Exiting..."); exit(1); } if (fwrite(greens, 1, COLOR_SIZE, fd) != COLOR_SIZE) { printf("Unable to write to file. Exiting..."); exit(1); } if (fwrite(blues, 1, COLOR_SIZE, fd) != COLOR_SIZE) { printf("Unable to write to file. Exiting..."); exit(1); } if (fclose(fd)) { printf("Unable to close file. Exiting..."); exit(1); } } /* * convert * * Determine the file name given the template, imageNumber, x dimension * and y dimension. Replaces template special characters with the * corresponding numbers. * * INPUT: * template : file name template * imageNumber : * xdim : x dimension of image * ydim : y dimension of image * OUTPUT: * stringOut : the concocted file name */ void convert(const char *template, int imageNumber, int32 xdim, int32 ydim, char *stringOut) { char numStr[20], xStr[20], yStr[20]; sprintf(numStr, "%03d", imageNumber); sprintf(xStr, "%03d", (int)xdim); sprintf(yStr, "%03d", (int)ydim); for (; (*template);) { switch (*template) { case TEMPLATE_NUMBER: fillStr(&template, &stringOut, numStr, TEMPLATE_NUMBER); break; case TEMPLATE_XDIM: fillStr(&template, &stringOut, xStr, TEMPLATE_XDIM); break; case TEMPLATE_YDIM: fillStr(&template, &stringOut, yStr, TEMPLATE_YDIM); break; default: *stringOut++ = *template ++; } } *stringOut = '\0'; } /* * fillStr * * Fill a string of special characters with a number string. * If the number string is shorter than the number of special characters * then the string is padded with '0' on the left. Else the number of the * special characters is ignored. * * INPUT: * template : pointer to pointer of string template * string : pointer to the number string * specialChar : the special character we are replacing * OUTPUT: * stringOut : pointer to pointer of converted string (not really) * BUG: Both the pointer to the template string and the pointer to the * converted string are moved to after the position of the conversion. */ void fillStr(const char **template, char **stringOut, char *string, char specialChar) { int templateLen, stringLen, i; for (templateLen = 1; *(++(*template)) == specialChar; templateLen++) ; stringLen = (int)strlen(string); for (i = templateLen - stringLen; i > 0; i--) *(*stringOut)++ = '0'; for (; (*string);) *(*stringOut)++ = *string++; } /* * newSpace * * Allocate a space with little wastage * * INPUT: * size : size of space request * RETURN: * pointer to the space allocated * * BUG: This routine can only handle one request at any time, * a second call cannot be made while the space is still * in use (somewhere else). */ char * newSpace(int32 size) { static int32 oldSize = 0; /* must be static */ static char *oldSpace = NULL; /* must be static */ if (size >= oldSize) { free(oldSpace); if ((oldSpace = (char *)malloc((uint32)size)) == NULL) { puts("Out of memory. Abort."); exit(1); } oldSize = size; } return oldSpace; } /* * getTemplate * * Ask the user for a file name template string. * * INPUT: * type : a description string of the type of file, * i.e. image or palette. * imageNumber : * RETURN: * pointer to template string * BUG: This routine can only handle one request at any time, * a second call cannot be made while the template is still * in use (somewhere else). */ const char * getTemplate(const char *type, int imageNumber) { static char template[DF_MAXFNLEN]; printf("This is %s %d.\nWhat template would you like?\n", type, imageNumber); scanf("%s", template); return template; } hdf4-hdf4.3.1/hdf/util/hdftor8.out1000066400000000000000000000022641503061704500167410ustar00rootroot00000000000000storm.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Ref no 6 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes Ref no 6 4 bytes Image Palette-8 : (tag 201) Ref no 6 768 bytes Raster Image-8 : (tag 202) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Ref no 5 3249 bytes Imcomp Image-8 : (tag 204) Ref no 6 812 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Ref no 6 20 bytes Image Palette : (tag 301) Ref no 6 768 bytes Raster Image Data : (tag 302) Ref no 2 3249 bytes Ref no 3 3249 bytes Ref no 4 3249 bytes Ref no 5 3249 bytes Compressed Image : (tag 303) Ref no 6 812 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes Ref no 3 8 bytes Ref no 4 8 bytes Ref no 5 8 bytes Ref no 6 12 bytes hdf4-hdf4.3.1/hdf/util/hdfunpac.c000066400000000000000000000121671503061704500165100ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ** FILE ** hdfunpac.c ** USAGE ** hdfunpac [options] ** DESCRIPTION ** This program unpacks an HDF file by exporting the scientific data ** elements (DFTAG_SD) to external object elements. ** Options are: ** -d Use as the external filename. ** Default is "DataFile". */ #include "hdf.h" #include #include #include #ifdef H4_HAVE_SYS_TYPES_H #include #endif #ifdef H4_HAVE_SYS_STAT_H #include #endif #define DefaultDatafile "DataFile" /* Prototypes declaration */ int main(int, char *a[]); void hdferror(void); void error(const char *); void usage(void); /* variables */ char *progname; /* the name this program is invoked, i.e. argv[0] */ int main(int argc, char *argv[]) { int32 infile, aid, ret; char *filename; char datafilename[DF_MAXFNLEN]; uint16 tag; uint16 ref; int32 offset, fileoffset; int32 length; int16 special; /* Get invocation name of program */ progname = *argv++; argc--; /* parse arguments */ while (argc > 0 && **argv == '-') { switch ((*argv)[1]) { case 'd': argc--; argv++; if (argc > 0) { strcpy(datafilename, *argv++); argc--; } else { usage(); exit(1); } break; default: usage(); exit(1); } } if (argc == 1) { filename = *argv++; argc--; } else { usage(); exit(1); } if (datafilename[0] == '\0') strcpy(datafilename, DefaultDatafile); /* Check to make sure input file is HDF */ ret = (int)Hishdf(filename); if (ret == FALSE) { error("given file is not an HDF file\n"); } /* check if datafile already exists. If so, set offset to its length. */ { struct stat buf; if (stat(datafilename, &buf) == 0) { printf("External file %s already exists. Using append mode.\n", datafilename); fileoffset = (int32)buf.st_size; } else fileoffset = 0; } /* Open HDF file */ infile = Hopen(filename, DFACC_RDWR, 0); if (infile == FAIL) { error("Can't open the HDF file\n"); } /* Process the file */ ret = aid = Hstartread(infile, DFTAG_SD, DFREF_WILDCARD); while (ret != FAIL) { /* * Get data about the current one */ ret = Hinquire(aid, NULL, &tag, &ref, &length, &offset, NULL, NULL, &special); /* check the tag value since external element object are returned the same. */ if (tag == DFTAG_SD) { printf("moving Scientific Data (%d,%d) to %s\n", tag, ref, datafilename); ret = HXcreate(infile, tag, ref, datafilename, fileoffset, length); fileoffset += length; } /* * Move to the next one */ ret = Hnextread(aid, DFTAG_SD, DFREF_WILDCARD, DF_CURRENT); } /* * Close the access element */ ret = Hendaccess(aid); if (ret == FAIL) hdferror(); /* done; close files */ Hclose(infile); return (0); } /* ** NAME ** hdferror -- print out HDF error number ** USAGE ** int hdferror() ** RETURNS ** none ** DESCRIPTION ** Print an HDF error number to stderr. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This routine terminates the program with code 1. ** EXAMPLES */ void hdferror(void) { HEprint(stderr, 0); exit(1); } /* ** NAME ** error -- print error to stderr ** USAGE ** int error(string); ** char *string; IN: pointer to error description string ** RETURNS ** none ** DESCRIPTION ** Print an HDF error number to stderr. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** This routine terminates the program with code 1. ** EXAMPLES */ void error(const char *string) { fprintf(stderr, "%s: %s\n", progname, string); exit(1); } void usage(void) { fprintf(stderr, "Usage: %s [-d ] \n", progname); } hdf4-hdf4.3.1/hdf/util/he.h000066400000000000000000000131021503061704500153070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* he.h -- header file for HDFedit */ #include "hdf.h" #include #include #include #include /* * the following may not exist on all systems it should define stuff * like fork(), and other system calls */ #ifdef H4_HAVE_UNISTD_H #include #endif #ifdef DEBUG #define ASSERT(e) \ { \ if (!(e)) { \ fprintf(stderr, "Assertion failed: file %s, line %d\n", __FILE__, __LINE__); \ exit(1); \ } \ } #define NOT_REACHED() \ { \ fprintf(stderr, "Should not reach: file %s, line %d\n", __FILE__, __LINE__); \ exit(1); \ } #else #define ASSERT(e) /* empty assertion */ #define NOT_REACHED() /* empty */ #endif /* DEBUG */ #define HE_ARG_SZ 30 #define HE_DESC_SZ 8192 #define HE_COLOR_SZ 256 #define HE_PALETTE_SZ 768 #define HE_BUF_SZ 1024 /* return status */ #define HE_OK 0 #define HE_FAIL -1 #define YES 1 #define NO 0 /* options */ #define HE_AMBIG -2 #define HE_NOTFOUND -1 #define HE_ALL 1 #define HE_BACKUP 2 #define HE_HELP 3 #define HE_LONGOUT 4 #define HE_NOBACKUP 5 #define HE_REMOTE 6 #define HE_VERBOSE 7 #define HE_FILE 8 #define HE_KEEP 9 #define HE_POSITION 10 #define HE_EXPANSION 11 #define HE_LARGE 12 #define HE_RDONLY 13 #define HE_BATCH 14 #define HE_OFFSET 15 #define HE_ASCII 16 #define HE_OCTAL 17 #define HE_HEX 18 #define HE_DECIMAL 19 #define HE_FLOAT 20 #define HE_DIMS 21 #define HE_IMAGE 22 #define HE_PALETTE 23 #define HE_RASTER 24 #define HE_RLE 25 #define HE_IMCOMP 26 #define HE_DOGROUP 27 #define HE_LENGTH 28 #define HE_ATTACHTO 29 #define HE_LABEL 30 #define HE_DESCRIPTOR 31 #define HE_EDITOR 32 #define HE_BYTE 33 #define HE_SHORT 34 #define HE_DOUBLE 35 #define HE_RAW 36 #define HE_USHORT 37 #define HE_UDECIMAL 38 /* label bits for predicate keys */ #define HE_PREDICATE 0x8000 #define HE_COMPARATOR 0x4000 /* predicate keys */ #define HEK_NULL 0 #define HEK_TAG 1 #define HEK_REF 2 #define HEK_EQUAL 3 #define HEK_NEQUAL 4 #define HEK_GRT 5 #define HEK_GEQUAL 6 #define HEK_LESST 7 #define HEK_LEQUAL 8 #define HEK_ALL 9 #define HEK_SUCCEED 10 #define HEK_FAIL 11 #define HEK_GROUP 12 /* argument type */ #define HE_NUMBER 1 #define HE_STRING 2 typedef int (*HE_FUNC)(void *); typedef struct he_cmd { int argc; char *argv[HE_ARG_SZ]; HE_FUNC func; struct he_cmd *sub, *next; } HE_CMD; typedef struct he_pred { int key, Comp, argType; union { int i; char *str; } arg; } HE_PRED; typedef struct DFdesc_str { uint16 tag, ref; int32 length, offset; } DFdesc, *DFdesc_ptr; typedef struct tag_ref_struct { uint16 tag; uint16 ref; } tag_ref, *tag_ref_ptr; typedef struct he_group { int desc; int size; tag_ref_ptr ddList; } HE_GROUP; extern int he_status; extern int he_numDesc; extern int he_currDesc; extern int he_numGrp; extern int he_remote; extern char *he_file; extern DFdesc *he_desc; extern HE_GROUP *he_grp; /* * ----------------- Convenient Macros --------------------- */ #define unkOpt(st) fprintf(stderr, "Unknown option: %s.\n", st) #define unkArg(st) fprintf(stderr, "Unknown argument: %s.\n", st) #define ambigOpt(st) fprintf(stderr, "Ambiguous option: %s.\n", st) #define irrOpt(st) fprintf(stderr, "Irrelevant option: %s.\n", st) #define noFile() fprintf(stderr, "No file is opened.\n") #define isAnnot(t) (t == DFTAG_DIL || t == DFTAG_DIA) #define isRig(t) (t == DFTAG_RIG) #define currTag (he_desc[he_currDesc].tag) #define currGrpNo (desc2Grp(he_currDesc)) #define currDesc ((DFdesc *)he_desc + he_currDesc) #include "he_proto.h" /* end of he.h */ hdf4-hdf4.3.1/hdf/util/he_cntrl.c000066400000000000000000001203711503061704500165130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ------ he-cntrl.c ------ This file contains much of the control mechanisms for HDFed - Many of the command line functions - The parsing functions - predicate handling */ #include "he.h" /* --- HEif --- executes commands if predicates are satisfied */ int HEif(HE_CMD *cmd) { HE_PRED *pred; /* predicates */ HE_CMD *cmdTail; /* last cmd we've seen in the sublist */ if (cmd->argc == 2 && !strcmp(cmd->argv[1], "-help")) { puts("if []"); puts(" *"); puts("end"); puts("\tExecutes commands if predicates are satisfied by element"); return HE_OK; } /* parse the predicates on this command */ pred = parsePred(cmd->argc, cmd->argv); if (!pred) return FAIL; /* execute the sub list only is the predicates are satisfied */ if (satPred(currDesc, pred)) { /* go through sub-list until an end is encountered */ for (cmdTail = cmd->sub; cmdTail && strcmp(cmdTail->argv[0], "end"); cmdTail = cmdTail->next) if (cmdTail->func) he_status = (*cmdTail->func)(cmdTail); else { fprintf(stderr, "Unrecognized command: %s\n", cmd->argv[0]); return FAIL; } } return HE_OK; } /* --- HEselect --- step through all the elements in a file and execute if predicates are satisfied */ int HEselect(HE_CMD *cmd) { int t_currDesc; /* tmp var */ HE_PRED *pred; /* predicate structure */ HE_CMD *cmdTail; /* last cmd we've seen in the sublist */ if (cmd->argc == 2 && !strcmp(cmd->argv[1], "-help")) { puts("select []"); puts(" *"); puts("end"); puts("\tSteps through all elements in the file that satisfies the"); puts("\tpredicates and execute the commands on them."); return HE_OK; } /* generate predicate structure for this predicate list */ pred = parsePred(cmd->argc, cmd->argv); if (!pred) return FAIL; /* save the curr desc index */ t_currDesc = he_currDesc; /* step through all elements */ for (he_currDesc = 0; he_currDesc < he_numDesc; he_currDesc++) if (currTag != DFTAG_NULL && satPred(currDesc, pred)) { for (cmdTail = cmd->sub; strcmp(cmdTail->argv[0], "end"); cmdTail = cmdTail->next) if (cmdTail->func) he_status = (*cmdTail->func)(cmdTail); else { fprintf(stderr, "Unrecognized command: %s\n", cmdTail->argv[0]); he_status = FAIL; } } /* restore he_currDesc */ he_currDesc = t_currDesc; return HE_OK; } /* --- move to the next item --- */ extern HE_PRED *he_predicates; int HEnext(HE_CMD *cmd) { int tmp; HE_PRED *predicates; if (cmd->argc == 2 && !strcmp(cmd->argv[1], "-help")) { puts("next []"); puts("\tMove to the next element that satisfies the predicate"); return HE_OK; } if (!fileOpen()) { noFile(); return HE_FAIL; } predicates = parsePred(cmd->argc, cmd->argv); /* the following code assumes that parsePred() returns NULL if error, */ /* a predicate struct with no key if empty predicate list */ if (!predicates) return HE_FAIL; /* replace this only if it is non-empty */ if (predicates[0].key != 0) { free(he_predicates); he_predicates = predicates; } tmp = he_currDesc; do { if (tmp >= he_numDesc - 1) { fprintf(stderr, "Reached end of file. Not moved.\n"); return HE_FAIL; } tmp++; } while (he_desc[tmp].tag == DFTAG_NULL || !satPred(he_desc + tmp, he_predicates)); he_currDesc = tmp; return HE_OK; } /* ---------- Move to previous item -------------- */ int HEprev(HE_CMD *cmd) { int tmp; HE_PRED *predicates; if (cmd->argc == 2 && !strcmp(cmd->argv[1], "-help")) { puts("prev []"); puts("\tMove to the next element that satisfies the predicate"); return HE_OK; } if (!fileOpen()) { noFile(); return HE_FAIL; } predicates = parsePred(cmd->argc, cmd->argv); /* the following code assumes that parsePred() returns NULL if error, a predicate struct with no key if empty predicate list */ if (!predicates) return HE_FAIL; if (predicates[0].key != 0) { free(he_predicates); he_predicates = predicates; } tmp = he_currDesc; do { if (tmp <= 0) { fprintf(stderr, "Reached beginning of file. Not moved.\n"); return HE_FAIL; } tmp--; } while (he_desc[tmp].tag == DFTAG_NULL || !satPred(he_desc + tmp, he_predicates)); he_currDesc = tmp; return HE_OK; } /* ----------- routines to call od on some objects ----------- */ int HEdump(HE_CMD *cmd) { int i; int offset = 0, raw = 0; char format[] = "-o"; int32 length = 0; /* zero is special, means all */ for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: printf("dump [-offset ] [-length ]\n"); printf("\t[-decimal|-short|-byte|-hexadecimal|-float|-double|-ascii|\n"); printf("\t[-udecimal|-ushort|-octal|]\n"); printf("\tDisplay the contents of the current object\n"); printf("\t-offset Start offset\n"); printf("\t-length Length (bytes) to look at\n"); printf("\t-decimal Decimal format [32 bit integers]\n"); printf("\t-short Decimal format [16 bit integers]\n"); printf("\t-byte Decimal format [8 bit integers]\n"); printf("\t-hexadecimal Hexadecimal format\n"); printf("\t-float Float format [32 bit floats]\n"); printf("\t-double Float format [64 bit floats]\n"); printf("\t-ascii Ascii format\n"); printf("\t-udecimal Unsigned Decimal format [32 bit integers]\n"); printf("\t-ushort Unsigned Decimal format [16 bit integers]\n"); printf("\t-octal Octal format [Default]\n"); return HE_OK; case HE_OFFSET: offset = atoi(cmd->argv[++i]); break; case HE_LENGTH: length = atoi(cmd->argv[++i]); if (length <= 0) { fprintf(stderr, "Illegal length: %s, ignored.\n", cmd->argv[i]); length = 0; } break; case HE_DECIMAL: strcpy(format, "-i"); break; case HE_UDECIMAL: strcpy(format, "-d"); break; case HE_SHORT: strcpy(format, "-j"); break; case HE_USHORT: strcpy(format, "-s"); break; case HE_BYTE: strcpy(format, "-b"); break; case HE_OCTAL: strcpy(format, "-o"); break; case HE_HEX: strcpy(format, "-x"); break; case HE_FLOAT: strcpy(format, "-f"); break; case HE_DOUBLE: strcpy(format, "-e"); break; case HE_ASCII: strcpy(format, "-a"); break; case HE_RAW: raw = DFNT_NATIVE; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return HEIdump(length, offset, format, raw); } #define MAX_LINE 60 /* * Run 'od' on a segment of the current data element */ int HEIdump(int32 length, int offset, char *format, int raw_flag) { int32 eltLength; int32 i; int len = 0; char *data; if (!fileOpen()) { noFile(); return HE_FAIL; } eltLength = getElement(he_currDesc, &data); if (eltLength <= 0) { fprintf(stderr, "Unable to get element.\n"); return HE_FAIL; } /* adjust the offset, negative offset implies starting from end. then check to see if offset is in range */ if (offset < 0) offset += (int)eltLength; if (offset < 0 || offset > eltLength) { fprintf(stderr, "Illegal offset. Setting offset to 0.\n"); offset = 0; } /* adjust the length if it falls beyond the end of the element */ if (length == 0 || length > (eltLength - offset)) length = eltLength - offset; /* * Dump the data to the console */ switch (format[1]) { case 'i': { int32 *idata; idata = (int32 *)malloc(length / 4 * sizeof(int32)); DFKconvert((void *)(data + offset), (void *)idata, DFNT_INT32 | raw_flag, length / 4, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 4; i++) { printf("%11d ", (int)idata[i]); if (++len > 4) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 4)); } } printf("\n"); free(idata); } break; case 'd': { uint32 *idata; idata = (uint32 *)malloc(length / 4 * sizeof(int32)); DFKconvert((void *)(data + offset), (void *)idata, DFNT_UINT32 | raw_flag, length / 4, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 4; i++) { printf("%11u ", (int)idata[i]); if (++len > 4) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 4)); } } printf("\n"); free(idata); } break; case 'j': { int16 *sdata; sdata = (int16 *)malloc(length / 2 * sizeof(int16)); DFKconvert((void *)(data + offset), (void *)sdata, DFNT_INT16 | raw_flag, length / 2, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 2; i++) { printf("%10d ", sdata[i]); if (++len > 5) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 2)); } } printf("\n"); free(sdata); } break; case 's': { uint16 *sdata; sdata = (uint16 *)malloc(length / 2 * sizeof(uint16)); DFKconvert((void *)(data + offset), (void *)sdata, DFNT_UINT16 | raw_flag, length / 2, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 2; i++) { printf("%10d ", sdata[i]); if (++len > 5) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 2)); } } printf("\n"); free(sdata); } break; case 'b': { uint8 *bdata; bdata = (uint8 *)malloc(length); DFKconvert((void *)(data + offset), (void *)bdata, DFNT_UINT8 | raw_flag, length, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length; i++) { printf("%6d ", bdata[i]); if (++len > 7) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1))); } } printf("\n"); free(bdata); } break; case 'x': { int *idata; size_t sizeint; sizeint = sizeof(int); idata = (int *)malloc((size_t)(length / 4 * sizeint)); DFKconvert((void *)(data + offset), (void *)idata, DFNT_NINT32 | raw_flag, length / 4, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / sizeint; i++) { printf("%10x ", idata[i]); if (++len > 5) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * sizeint)); } } printf("\n"); free(idata); } break; case 'o': { int *idata; size_t sizeint; sizeint = sizeof(int); idata = (int *)malloc((size_t)(length / 4 * sizeint)); DFKconvert((void *)(data + offset), (void *)idata, DFNT_NINT32 | raw_flag, length / 4, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / sizeint; i++) { printf("%10o ", idata[i]); if (++len > 4) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * sizeint)); } } printf("\n"); free(idata); } break; case 'a': { char *cdata; cdata = (char *)(data + offset); printf("%8d: ", offset); for (i = 0; i < length; i++) { if (cdata[i] != '\0') printf("%c", cdata[i]); else printf(" "); if (++len > 40) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1))); } } printf("\n"); } break; case 'f': { float32 *fdata; fdata = (float32 *)malloc(length / 4 * sizeof(float32)); DFKconvert((void *)(data + offset), (void *)fdata, DFNT_FLOAT32 | raw_flag, length / 4, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 4; i++) { printf("%15e", (double)fdata[i]); if (++len > 3) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 4)); } } printf("\n"); free(fdata); } break; case 'e': { float64 *fdata; fdata = (float64 *)malloc(length / 8 * sizeof(float64)); DFKconvert((void *)(data + offset), (void *)fdata, DFNT_FLOAT64 | raw_flag, length / 8, DFACC_READ, 0, 0); printf("%8d: ", offset); for (i = 0; i < length / 8; i++) { printf("%30e", fdata[i]); if (++len > 1) { len = 0; printf("\n%8d: ", (int)(offset + (i + 1) * 8)); } } printf("\n"); free(fdata); } break; default: printf("Doing the default thang\n"); break; } free(data); return HE_OK; } /* ------------------ Print 'info' ----------------- */ int HEinfo(HE_CMD *cmd) { int i; int all = NO; int longout = NO; int group = NO; int label = NO; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("info [-all] [-long] [-group] [-label]"); puts("\t-all\t\tShow info for all elements in file"); puts("\t-long\t\tShow more info"); puts("\t-group\t\tOrganize info in group(s)"); puts("\t-label\t\tShow label if any"); return HE_OK; case HE_LONGOUT: longout = YES; break; case HE_ALL: all = YES; break; case HE_LABEL: label = YES; break; case HE_DOGROUP: group = YES; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return info(all, longout, group, label); } /* *Show info about data elements */ int info(int all, int longout, int group, int label) { int idx; int empty = 0; int start, end; int d; int *mark; if (!fileOpen()) { noFile(); return HE_OK; } if (!group || ((!isGrp(currTag) && !all))) { if (all) { start = 0; end = he_numDesc - 1; } else start = end = he_currDesc; /* The gcc optimizer thinks it can optimize away the conditional here, * which raises a strict-overflow warning. The volatile keyword * prevents optimization (possibly unrolling the for loop) and * squashes the warning. */ for (volatile int i = start; i <= end; i++) if (he_desc[i].tag == DFTAG_NULL) empty++; else { if (all && i == he_currDesc) printf("*"); else printf(" "); printf("(%d) ", i + 1); /* 1 based */ infoDesc(i, longout, label); } if (empty > 0) printf("Empty (tag %d) : %d slots.\n", DFTAG_NULL, empty); } else { mark = (int *)calloc(he_numDesc, sizeof(int)); if (all) { start = 0; end = he_numGrp - 1; } else { if (he_numGrp == 0) { fprintf(stderr, "There is no group in this file.\n"); return HE_FAIL; } start = end = currGrpNo; } for (int i = start; i <= end; i++) { printf("**Group %d:\n", i + 1); /* 1 based */ idx = he_grp[i].desc; infoDesc(idx, longout, label); mark[idx] = YES; for (int j = 0; j < he_grp[i].size; j++) if ((d = findDesc(he_grp[i].ddList + j)) >= 0) { mark[d] = 1; infoDesc(d, longout, 0); } else fprintf(stderr, "**Tag: %d, Ref: %d not in descriptors list!\n", he_grp[i].ddList[j].tag, he_grp[i].ddList[j].ref); } if (all) { puts("\n**These do not belong to any group:"); for (int i = 0; i < he_numDesc; i++) if (!mark[i]) { if (he_desc[i].tag == DFTAG_NULL) empty++; else infoDesc(i, longout, label); } if (empty > 0) printf("Empty (tag %d) : %d slots.\n", DFTAG_NULL, empty); } } return HE_OK; } void infoDesc(int desc, int longout, int label) { char *s; char *name; name = HDgettagsname(he_desc[desc].tag); if (!name) printf("\t%-30s: (Tag %d)", "Unknown Tag", he_desc[desc].tag); else { printf("\t%-30s: (Tag %d)", name, he_desc[desc].tag); free(name); } if (longout) printf("\n\tRef: %d, Offset: %ld, Length: %ld (bytes)\n", he_desc[desc].ref, (long)he_desc[desc].offset, (long)he_desc[desc].length); else printf(" Ref %d\n", he_desc[desc].ref); if (label) { getAnn(HE_LABEL, he_desc[desc].tag, he_desc[desc].ref, &s); if (s != NULL) printf("\tLabel: %s\n", s); } } /* ---------- HEdelete --- 'stub' function for delete */ int HEdelete(HE_CMD *cmd) { if (cmd->argc < 2) return delete (he_currDesc); else { if (cmd->argv[1][0] != '-') { unkArg(cmd->argv[1]); return HE_FAIL; } else switch (findOpt(cmd->argv[1] + 1)) { case HE_HELP: puts("delete"); puts("\tDelete this element or group."); return HE_OK; case HE_NOTFOUND: unkOpt(cmd->argv[1]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[1]); return HE_FAIL; default: irrOpt(cmd->argv[1]); return HE_FAIL; } } } /* delete -- deletes a group and its elts or an elt from current hdf file */ int delete(int curr) { int ret; /* check if any file is open */ if (!fileOpen()) { noFile(); return HE_FAIL; } /* call the actual routine to do it, the update the descriptor list */ ret = recurseDel(curr); updateDesc(); return ret; } /* recurseDel -- this function recursively tries to delete some elts from a file. if the current elt is a group, it will call itself on the elts of the group. else, it will check if any group references the elt, and actually deletes it if there is no other references */ int recurseDel(int curr) { int d, currGrp; int i; if (isGrp(he_desc[curr].tag)) { /* if this is a group, do its elts then itself */ /* find the index of the group */ currGrp = desc2Grp(curr); /* step through the elts of this group */ for (i = 0; i < he_grp[currGrp].size; i++) { d = findDesc(he_grp[currGrp].ddList + i); if (d >= 0) { /* null this so it will not report that this is a multiple * copy of itself */ he_grp[currGrp].ddList[i].tag = DFTAG_NULL; he_grp[currGrp].ddList[i].ref = 0; /* Try to delete this component */ if (recurseDel(d) < 0) return HE_FAIL; } } /* tried all components, now delete self */ if (!hasReference(curr)) if (deleteDesc(curr) < 0) return HE_FAIL; } else /* not a group, actually delete this only if there is no group referencing it */ if (!hasReference(curr)) if (deleteDesc(curr) < 0) return HE_FAIL; return HE_OK; } /* some char const for the get/parse routines */ #define CR '\n' #define SPACE ' ' #define TAB '\t' #define QUOTE '"' #define BREAK '\003' /* C-c */ #define ESCAPE '\\' /* Quote escape */ #define COMMENT '!' /* Comment a line if first character */ /* max line size -- change this if you type longer than this in one line */ #define HE_LINE_SZ 512 /* command separator */ #define HE_SEPARATOR ';' /* is this in batch mode or interactive? */ int he_batch = NO; /* nesting when if/select is encountered */ int he_nestLevel = 0; /* prompt is actually "he" */ const char *he_prompt = ">"; #define he_nestChar '>' /* table to associate command to the function -- add additional functions anywhere in the table BEFORE the Marker {0,0} entry */ struct { const char *str; HE_FUNC func; } he_funcTab[] = { {"open", (HE_FUNC)HEopen}, {"close", (HE_FUNC)HEclose}, {"next", (HE_FUNC)HEnext}, {"prev", (HE_FUNC)HEprev}, {"alias", (HE_FUNC)HEalias}, {"unalias", (HE_FUNC)HEunalias}, {"display", (HE_FUNC)HEdisplay}, {"info", (HE_FUNC)HEinfo}, {"list", (HE_FUNC)HEinfo}, {"if", (HE_FUNC)HEif}, {"select", (HE_FUNC)HEselect}, {"wait", (HE_FUNC)HEwait}, {"delete", (HE_FUNC)HEdelete}, {"quit", (HE_FUNC)HEquit}, {"dump", (HE_FUNC)HEdump}, {"getr8", (HE_FUNC)HEgetR8}, {"putr8", (HE_FUNC)HEputR8}, {"put", (HE_FUNC)HEput}, {"revert", (HE_FUNC)HErevert}, {"write", (HE_FUNC)HEwrite}, {"annotate", (HE_FUNC)HEannotate}, {"help", (HE_FUNC)HEhelp}, {"end", (HE_FUNC)0}, }; HE_FUNC findFunc(char *fword) { unsigned len; int found = -1; len = strlen((const char *)fword); for (int i = 0; i < sizeof(he_funcTab) / sizeof(he_funcTab[0]); i++) if (!strncmp(he_funcTab[i].str, (const char *)fword, len)) { /* check for exact match */ if (strlen(he_funcTab[i].str) == len) return he_funcTab[i].func; if (found < 0) found = (int)i; else { fprintf(stderr, "Ambiguous command: %s.\n", fword); return NULL; } } if (found < 0) return NULL; else return he_funcTab[found].func; } /* prompt -- printout prompt according to the nesting level */ void prompt(void) { if (!he_nestLevel) printf("hdfed%s ", he_prompt); else { int i; printf(" %s ", he_prompt); for (i = he_nestLevel; i; i--) putchar(he_nestChar); putchar(' '); } } /* reads a line of input into p */ /* Skips all initial spaces and empty commands */ /* always returns with at least a word in p, unless eof */ /* if eof and p is not empty, return HE_OK, else if no word, return EOF */ int getLine(char *p) { static int ch = 0; do { if (!he_batch && (ch != EOF)) prompt(); ch = getc(stdin); if (ch == COMMENT) { /* Skip this line */ do ch = getchar(); while ((ch != CR) && (ch != EOF)); } else while ((ch == SPACE) || (ch == TAB) || (ch == HE_SEPARATOR)) ch = getchar(); if (ch == EOF) return EOF; } while (ch == CR); while ((ch != EOF) && (ch != CR)) switch (ch) { case ESCAPE: ch = getchar(); if (!(ch == CR)) *p++ = (char)ch; ch = getchar(); break; case QUOTE: ch = getchar(); while (ch != QUOTE) { if (ch == ESCAPE) ch = getchar(); *p++ = (char)ch; ch = getchar(); } ch = getchar(); /* Skip over the QUOTE */ break; case SPACE: case TAB: *p++ = SPACE; while ((ch == SPACE) || (ch == TAB)) ch = getchar(); break; case HE_SEPARATOR: if (!isspace((int)*(p - 1))) *p++ = SPACE; *p++ = HE_SEPARATOR; ch = SPACE; /* Ensure next is a space */ break; default: *p++ = (char)ch; ch = getchar(); break; } *p++ = '\0'; return ch; } /* copy the next (space-delimited) word and advance the pointer as a side effect */ char * nextWord(char **p) { char *word = NULL; char *s = NULL; char *q = NULL; unsigned len; q = *p; while (*q && isspace((int)*q)) q++; if (!(*q)) { *p = q; return NULL; } s = q; while (*s && !isspace((int)*s)) s++; len = (unsigned)(s - q); word = (char *)malloc(len + 1); strncpy(word, q, len); word[len] = '\0'; *p = s; while (**p && (isspace((int)**p))) (*p)++; return word; } HE_CMD * parseCmd(char **p) { char *word; HE_CMD *cmd; HE_CMD *aliasCmd; HE_CMD *cmdTail; if (!(**p)) return NULL; cmd = (HE_CMD *)calloc(1, sizeof(HE_CMD)); cmd->next = cmd->sub = (HE_CMD *)NULL; cmd->argc = 1; cmd->argv[0] = nextWord(p); if ((aliasCmd = findAlias(cmd->argv[0])) != NULL) cmd = aliasCmd; else cmd->func = findFunc(cmd->argv[0]); if ((cmd->func == (HE_FUNC)HEalias) || (cmd->func == (HE_FUNC)HEwait)) { /* let the alias command handle the parsing */ cmd->argv[1] = copyStr(*p); cmd->argc = 2; **p = '\0'; } else { cmdTail = cmd; while (cmdTail->next) cmdTail = cmdTail->next; for (word = nextWord(p); word && strcmp(word, ";"); word = nextWord(p), cmdTail->argc++) cmdTail->argv[cmdTail->argc] = word; while (**p && (isspace((int)**p) || (**p == ';'))) (*p)++; } return cmd; } /* Inputs a line and returns cmd list of line */ HE_CMD * parse(void) { static char line[HE_LINE_SZ]; static char *ptr; int notDone = 1; HE_CMD *cmd; HE_CMD *cmdTail; if (getLine(line) == EOF) return NULL; ptr = line; cmdTail = cmd = parseCmd(&ptr); while (cmdTail->next) cmdTail = cmdTail->next; while (notDone) { cmdTail->next = parseCmd(&ptr); notDone = (cmdTail->next != NULL); while (cmdTail->next) cmdTail = cmdTail->next; } return cmd; } HE_CMD * getCmd(void) { static HE_CMD *cmdList; HE_CMD *cmd; HE_CMD *cmdTail; if (!cmdList) cmdList = parse(); if (!cmdList) return NULL; cmd = cmdList; if (cmdList) cmdList = cmdList->next; cmd->next = (HE_CMD *)NULL; /* Cut off links since these will be */ /* accessed later */ if (cmd && ((cmd->func == (HE_FUNC)HEif) || (cmd->func == (HE_FUNC)HEselect)) && !((cmd->argc > 1) && (cmd->argv[1][0] == '-') && (findOpt(cmd->argv[1] + 1) == HE_HELP))) { he_nestLevel++; cmd->sub = getCmd(); for (cmdTail = cmd->sub; cmdTail && strcmp(cmdTail->argv[0], "end"); /* while != "end" */ cmdTail = cmdTail->next) cmdTail->next = getCmd(); he_nestLevel--; } return cmd; } #define HE_ALIAS_SZ 256 struct he_alias { char *str; HE_CMD *cmd; } he_aliasTab[HE_ALIAS_SZ]; int he_numAlias = 0; int setAlias(char *str, HE_CMD *cmd) { int i; for (i = 0; i < he_numAlias; i++) if (!strcmp(str, he_aliasTab[i].str)) { he_aliasTab[i].cmd = cmd; return HE_OK; } if (he_numAlias == HE_ALIAS_SZ) { fprintf(stderr, "Alias table full.\n"); return HE_FAIL; } he_aliasTab[he_numAlias].str = str; he_aliasTab[he_numAlias++].cmd = cmd; return HE_OK; } HE_CMD * mkDupCmd(HE_CMD *cmd) { int i; HE_CMD *dupCmd; dupCmd = (HE_CMD *)calloc(1, sizeof(HE_CMD)); dupCmd->func = cmd->func; dupCmd->argc = cmd->argc; dupCmd->next = dupCmd->sub = (HE_CMD *)NULL; for (i = 0; i < cmd->argc; i++) dupCmd->argv[i] = copyStr(cmd->argv[i]); return dupCmd; } HE_CMD * findAlias(char *str) { int i; HE_CMD *cmd; HE_CMD *dupCmd; HE_CMD *cmdTail; for (i = 0; i < he_numAlias; i++) if (!strcmp(str, he_aliasTab[i].str)) { cmd = he_aliasTab[i].cmd; dupCmd = mkDupCmd(cmd); cmd = cmd->next; for (cmdTail = dupCmd; cmd; cmd = cmd->next, cmdTail = cmdTail->next) cmdTail->next = mkDupCmd(cmd); return dupCmd; } return NULL; } int HEunalias(HE_CMD *cmd) { for (int a = 1; a < cmd->argc; a++) for (int i = 0; i < he_numAlias; i++) if (!strcmp(cmd->argv[a], he_aliasTab[i].str)) { he_numAlias--; for (int j = i; j < he_numAlias; j++) { he_aliasTab[j].str = he_aliasTab[j + 1].str; he_aliasTab[j].cmd = he_aliasTab[j + 1].cmd; } break; } return HE_OK; } void printAlias(char *word, HE_CMD *cmd) { printf("%s:", word); for (; cmd; cmd = cmd->next) { printf("\t"); for (int j = 0; j < cmd->argc; j++) printf("%s ", cmd->argv[j]); puts(""); } } int HEalias(HE_CMD *cmd) { char *s; char *word; int i; HE_CMD *cmdTail; s = cmd->argv[1]; word = nextWord(&s); if (!word) { for (i = 0; i < he_numAlias; i++) printAlias(he_aliasTab[i].str, he_aliasTab[i].cmd); return HE_OK; } cmd = parseCmd(&s); if (!cmd) { cmd = findAlias(word); printAlias(word, cmd); return HE_OK; } for (cmdTail = cmd; cmdTail->next; cmdTail = cmdTail->next) /*EMPTY */ ; while ((cmdTail->next = parseCmd(&s)) != NULL) for (; cmdTail->next; cmdTail = cmdTail->next) /*EMPTY */ ; return setAlias(word, cmd); } HE_PRED *he_predicates; /* resetPred -- for setting the he_predicates to point to a pred of only group, this is the default when a file is opened */ int resetPred(void) { free(he_predicates); he_predicates = (HE_PRED *)calloc(2, sizeof(HE_PRED)); he_predicates[0].key = HEK_GROUP; he_predicates[1].key = 0; return HE_OK; } struct { const char *str; int key; } he_keyTab[] = { {"!=", HEK_NEQUAL | HE_COMPARATOR}, {"<", HEK_LESST | HE_COMPARATOR}, {"<=", HEK_LEQUAL | HE_COMPARATOR}, {"==", HEK_EQUAL | HE_COMPARATOR}, {">", HEK_GRT | HE_COMPARATOR}, {">=", HEK_GEQUAL | HE_COMPARATOR}, {"all", HEK_ALL | HE_PREDICATE}, {"any", HEK_ALL | HE_PREDICATE}, {"ref", HEK_REF | HE_PREDICATE}, {"succeed", HEK_SUCCEED | HE_PREDICATE}, {"fail", HEK_FAIL | HE_PREDICATE}, {"tag", HEK_TAG | HE_PREDICATE}, {"group", HEK_GROUP | HE_PREDICATE}, /* Finish this later */ }; int findKey(char *word) { unsigned len; int found = -1; len = strlen(word); for (int i = 0; i < sizeof(he_keyTab) / sizeof(he_keyTab[0]); i++) if (!strncmp(he_keyTab[i].str, word, len)) { /* if this is an exact match, just return */ if (strlen(he_keyTab[i].str) == len) return he_keyTab[i].key; if (found < 0) found = (int)i; else { fprintf(stderr, "Ambiguous: %s.\n", word); return HE_NOTFOUND; } } if (found < 0) { fprintf(stderr, "Predicate/comparator: %s not found.\n", word); return HE_NOTFOUND; } return he_keyTab[found].key; } int isNumber(char *s) { for (; *s; s++) if (!isdigit((int)*s)) return NO; return YES; } #define HE_PRED_SZ HE_ARG_SZ HE_PRED * parsePred(int argc, char *argv[]) { HE_PRED *pred; int predNum = -1; int state = 0; int key = 0; pred = (HE_PRED *)calloc(HE_PRED_SZ, sizeof(HE_PRED)); for (int i = 1; i < argc; i++) { char *s = argv[i]; while (*s) { char *tok = NULL; if (state != 2) tok = nextToken(&s); else tok = nextWord(&s); if (!tok) break; if (state != 2) { if ((key = findKey(tok)) == HE_NOTFOUND) { free(pred); return NULL; } free(tok); } switch (state) { case 0: /* Ready to accept a predicate */ if (!(key & HE_PREDICATE)) { fprintf(stderr, "Parse error: %s.\n", argv[i]); free(pred); return NULL; } pred[++predNum].key = key & ~(HE_PREDICATE | HE_COMPARATOR); state = 1; break; case 1: /* Can be a comparator for previous pred or a new predicate */ if (key & HE_PREDICATE) { pred[++predNum].key = key & ~(HE_PREDICATE | HE_COMPARATOR); } else if (key & HE_COMPARATOR) { pred[predNum].Comp = key & ~(HE_PREDICATE | HE_COMPARATOR); state = 2; } else { fprintf(stderr, "Parse error: %s.\n", argv[i]); free(pred); return NULL; } break; case 2: /* Looking for an argument */ if (isNumber(tok)) { pred[predNum].argType = HE_NUMBER; pred[predNum].arg.i = atoi(tok); } else { pred[predNum].argType = HE_STRING; pred[predNum].arg.str = copyStr(tok); } state = 0; free(tok); break; default: NOT_REACHED(); break; } } } pred[++predNum].key = 0; return pred; } int satPred(DFdesc *desc, HE_PRED pred[]) { int i; if (!pred) return YES; for (i = 0; pred[i].key; i++) { switch (pred[i].key) { case HEK_ALL: return YES; /* Always satisfied */ case HEK_GROUP: if (!isGrp(desc->tag)) return NO; break; case HEK_TAG: if (pred[i].argType != HE_NUMBER) { fprintf(stderr, "Argument to tag predicate not a number."); return NO; } if (!numCompare((int)desc->tag, pred[i].Comp, pred[i].arg.i)) return NO; break; case HEK_REF: if (pred[i].argType != HE_NUMBER) { fprintf(stderr, "Argument to ref predicate not a number."); return NO; } if (!numCompare((int)desc->ref, pred[i].Comp, pred[i].arg.i)) return NO; break; case HEK_SUCCEED: return (he_status == 0); case HEK_FAIL: return (he_status != 0); default: NOT_REACHED(); break; } } return 1; } char * nextToken(char **p) { char *s, *q; char *tok; if (!(**p)) return NULL; s = *p; if (isalnum((int)**p)) while (isalnum((int)*s)) s++; else while (*s && !isalnum((int)*s)) s++; q = tok = (char *)malloc((s - (*p)) + 1); while (*p != s) *q++ = *(*p)++; *q = '\0'; return tok; } int numCompare(int n1, int Comp, int n2) { switch (Comp) { case HEK_EQUAL: return (n1 == n2); case HEK_NEQUAL: return (n1 != n2); case HEK_GRT: return (n1 > n2); case HEK_GEQUAL: return (n1 >= n2); case HEK_LESST: return (n1 < n2); case HEK_LEQUAL: return (n1 <= n2); default: NOT_REACHED(); break; } return NO; } /* end of cntrl.c */ hdf4-hdf4.3.1/hdf/util/he_disp.c000066400000000000000000000247321503061704500163340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* display.c -- contains code for displaying an image using ICR * this code is plucked from hdfrseq.c */ #include "he.h" #define SCRX 1152 #define SCRY 900 /* HEdisplay -- stub function for displaying an image using ICR */ int HEdisplay(HE_CMD *cmd) { int i; int center = 1; int xwhere = 0; int ywhere = 0; int factor = 1; int large = 0; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: printf("display [-position ] [-expansion ] [-large]\n"); printf("\t-position\tImage position on console screen\n"); printf("\t-expansion\tImage expansion factor\n"); printf("\t-large\t\tMake image as large as possible\n"); return HE_OK; case HE_POSITION: center = 0; xwhere = atoi(cmd->argv[++i]); ywhere = atoi(cmd->argv[++i]); if ((xwhere < 0) || (xwhere > SCRX) || (ywhere < 0) || (ywhere > SCRY)) { fprintf(stderr, "Invalid position.\n"); return HE_FAIL; } break; case HE_EXPANSION: factor = atoi(cmd->argv[++i]); if (factor < 1) factor = 1; break; case HE_LARGE: large = 1; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return display(center, xwhere, ywhere, factor, large); } void goTo(int desc) { /* goto element of he_desc[desc] */ /* ask swami */ /* right now this only works for r8 */ DFR8readref(he_file, he_desc[desc].ref); } int oldcf = 0; /* old value of compression flag */ int32 oldx = 0, oldy = 0; /* old values of xdim and ydim */ int coldx = 0, coldy = 0; /* old values of xdim and ydim for CI8s */ int32 xdim = 0, ydim = 0; /* size of image on disk */ int xwhere, ywhere; /* where to put it on the screen */ int ispal; int large; /* should make images as large as possible */ int center; /* should center the images */ int oldxs = 0, oldys = 0; /* old sizes */ int xsize = 0, ysize = 0; /* what final size on screen, after blow-up */ int factor; unsigned char rgb[768]; /* storage for a palette */ char *wherebig = NULL; /* where to store small image */ uint8 *wheresmall = NULL; /* where to store image-related stuff */ int getSpace(void) { /* * Don't allocate anything if the image is the same size as before. */ if (oldx != xdim || oldy != ydim) { oldx = xdim; oldy = ydim; free(wheresmall); if (NULL == (wheresmall = (uint8 *)malloc((size_t)(xdim * ydim)))) { printf(" Cannot allocate memory, fatal error\n"); exit(1); } } return (0); } /*************************************************************************/ /* largeset * Set up the xfact, yfact, xsize and ysize for expanding the image * locally. * */ int largeSet(void) { int tmp; if (large) { factor = (int)(SCRX / xdim); /* how much blow-up can we do? */ /* calculate expansion factor */ tmp = (int)(SCRY / ydim); /* take minimum expansion factor */ if (factor > tmp) factor = tmp; } xsize = (int)(factor * xdim); /* re-calculate actual pixel dimensions */ ysize = (int)(factor * ydim); return (factor > 1); /* is expansion necessary? */ } int display(int c, int x, int y, int f, int l) { center = c; xwhere = x; ywhere = y; factor = f; large = l; if (!isRig(he_desc[he_currDesc].tag)) { fprintf(stderr, "Current element not a image group.\n"); return HE_FAIL; } goTo(he_currDesc); if (DFR8getdims(he_file, &xdim, &ydim, &ispal) < 0) { fprintf(stderr, "Error getting image group.\n"); return HE_FAIL; } if (he_remote) getSpace(); /* get space for image in mem */ /* * Try to successfully load the palette and image from the file */ if (DFR8getimage(he_file, wheresmall, xdim, ydim, rgb) < 0) { fprintf(stderr, "Error getting image group.\n"); return HE_FAIL; } if (he_remote) rImage(ispal); /* display remote image with [palette] */ return HE_OK; } /*****************************************************************************/ /* rimage * Remote display of the image using the ICR. * Just print the codes to stdout using the protocol. */ int rImage(int usepal) { int i, j, newxsize; int8 *thisline, *space, *thischar; unsigned char c; /* * Open the window with the W command */ printf("\033^W;%d;%d;%ld;%ld;0;rseq^", xwhere, ywhere, (long)(xdim * factor), (long)(ydim * factor)); /* * If a palette should be used, send it with the M command. */ if (usepal) { printf("\033^M;0;256;768;rseq^"); /* start map */ thischar = (int8 *)rgb; for (j = 0; j < 768; j++) { c = (unsigned char)*thischar++; if ((unsigned)c > (unsigned)31 && (unsigned)c < (unsigned)123) { putchar((int)c); } else { putchar((int)(((unsigned)c >> 6) + (unsigned)123)); putchar((int)((c & 0x3f) + 32)); } } } /* * Send the data for the image with RLE encoding for efficiency. * Encode each line and send it. */ space = (int8 *)malloc(ydim + 128); thisline = (int8 *)wheresmall; for (i = 0; i < ydim; i++) { newxsize = rleIt((char *)thisline, (char *)space, (int)xdim); thisline += xdim; /* increment to next line */ printf("\033^R;0;%d;%d;%d;rseq^", i * factor, factor, newxsize); thischar = space; for (j = 0; j < newxsize; j++) { /***********************************************************************/ /* Encoding of bytes: * * 123 precedes #'s 0-63 * 124 precedes #'s 64-127 * 125 precedes #'s 128-191 * 126 precedes #'s 192-255 * overall: realchar = (specialchar - 123)*64 + (char-32) * specialchar = r div 64 + 123 * char = r mod 64 + 32 */ /***********************************************************************/ c = (unsigned char)*thischar++; /* get byte to send */ if ((unsigned)c > (unsigned)31 && (unsigned)c < (unsigned)123) { putchar((int)c); } else { putchar((int)((unsigned)(c >> 6) + (unsigned)123)); putchar((int)((c & 0x3f) + 32)); } } } /* * pause for the user */ free(space); return HE_OK; } /*****************************************************************************/ /* expandimg * copy an image memory to memory, expanding byte by byte to get a larger image. * no aliasing, just byte replication */ int bigImg(unsigned char *targ, unsigned char *src) { int i, j, line; unsigned char *p, *q, *oldq; for (line = 0; line < ydim; line++) { p = src + line * xdim; oldq = q = targ + line * xsize * factor; for (i = 0; i < xdim; i++, p++) for (j = 0; j < factor; j++) *q++ = *p; for (i = 1; i < factor; i++) { memcpy(q, oldq, xsize); /* make one copy of the line */ q += xsize; } } return HE_OK; } /********************************************************************/ /* rleit * compress the data to go out with a simple run-length encoded scheme. * */ int rleIt(char *buf, char *bufto, int len) { char *p, *q, *cfoll, *clead; char *begp; int i; p = buf; cfoll = bufto; /* place to copy to */ clead = cfoll + 1; begp = p; while (len > 0) { /* encode stuff until gone */ q = p + 1; i = len - 1; while (*p == *q && i + 120 > len && i) { q++; i--; } if (q > p + 2) { /* three in a row */ if (p > begp) { *cfoll = (char)(p - begp); cfoll = clead; } *cfoll++ = (char)(128 | (q - p)); /* len of seq */ *cfoll++ = *p; /* char of seq */ len -= (int)(q - p); /* subtract len of seq */ p = q; clead = cfoll + 1; begp = p; } else { *clead++ = *p++; /* copy one char */ len--; if (p > begp + 120) { *cfoll = (char)(p - begp); cfoll = clead++; begp = p; } } } /* * fill in last bytecount */ if (p > begp) *cfoll = (char)(p - begp); else clead--; /* don't need count position */ return ((int)(clead - bufto)); /* how many stored as encoded */ } /* end of display.c */ hdf4-hdf4.3.1/hdf/util/he_file.c000066400000000000000000000374041503061704500163140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* --- he-file.c --- file and annotation manipulation routines */ #include "he.h" #ifdef H4_HAVE_SYS_WAIT_H #include #endif #ifdef H4_HAVE_UNISTD_H #include #endif int HEannotate(HE_CMD *cmd) { int i; const char *editor = NULL; int ann = HE_LABEL; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("annotate [-label|-descriptor] [-editor ]"); puts("\tEdit an annotation"); puts("\t-label\t\tEdit label (default)"); puts("\t-descriptor\tEdit descriptor"); puts("\t-editor\t\tUse editor (default EDITOR env value)"); return HE_OK; case HE_LABEL: ann = HE_LABEL; break; case HE_DESCRIPTOR: ann = HE_DESCRIPTOR; break; case HE_EDITOR: if (++i < cmd->argc) editor = cmd->argv[i]; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return annotate(editor, ann); } /* Edit annontations (labels and descriptions) for the * current data element */ int annotate(const char *editor, int ann) { int32 len; /* length of annotation */ char *buf; /* annotation buffer */ char *file; /* tmp file name */ int i; int ret; /* check if any hdf file is open */ if (!fileOpen()) { noFile(); return HE_FAIL; } /* Get the annotation from hdf file */ len = getAnn(ann, currTag, he_desc[he_currDesc].ref, &buf); (void)getTmpName(&file); /* if there is prior annotation, put it into the tmp file */ if (len > 0 && buf != NULL) { /* doctor the buffer a little for the editors */ if (ann == HE_LABEL) buf[len] = '\n'; else len--; writeToFile(file, buf, len + 1); free(buf); } /* make sure some editor will be used * defaults to /usr/bin/ex * but should be made a comple time option */ if (editor == NULL) { editor = (char *)getenv("EDITOR"); if (editor == NULL) editor = "/usr/bin/ex"; } /* Use the fork/wait or system methods if supported, else no support. */ #if defined(H4_HAVE_FORK) && defined(H4_HAVE_WAIT) if (fork() == 0) { /* this is the child */ if (execl(editor, editor, file, 0, (char *)NULL) == -1) fprintf(stderr, "Error while editing label.\n"); /* return control to the parent if exec fails */ exit(0); } /* the parent waits for the child to die */ wait(0); #elif defined(H4_HAVE_SYSTEM) { char cmd[256]; if (strlen(editor) > 100) { fprintf(stderr, "Environment variable EDITOR too big\n"); } else { sprintf(cmd, "%s %s", editor, file); system(cmd); } } #endif /* read in edited annotation */ len = readFromFile(file, &buf); if (len <= 0 || buf == NULL) return len; /* doctor the buffer for standard format */ if (ann == HE_LABEL) { /* take out control characters from the end */ for (i = len; i >= 0 && !isgraph((int)buf[i]); i--) ; buf[i + 1] = '\0'; } /* forget the tmp file */ removeFile(file); /* write annotation to the hdf file */ ret = putAnn(ann, currTag, he_desc[he_currDesc].ref, buf, len); updateDesc(); /* clean up */ free(buf); return ret; } extern int he_backup; int HEopen(HE_CMD *cmd) { int backup = YES; int i; char *file = NULL; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] != '-') { if (!file) file = cmd->argv[i]; else { fprintf(stderr, "Only one file allowed.\n"); return FAIL; } } else switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("open [-nobackup]"); puts("\t-nobackup\tDon't make a backup for this file."); return HE_OK; case HE_NOBACKUP: backup = 0; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return FAIL; default: irrOpt(cmd->argv[i]); return FAIL; } if (!file) { fprintf(stderr, "Please specify a file name.\n"); return FAIL; } return openFile(file, backup); } /* openFile -- Internal open file routine. */ /* Called by: HEopen, main */ /* Returns: HE_OK and FAIL */ int openFile(char *file, int backup) { ASSERT(file); /* only allow one file at a time */ if (fileOpen()) { fprintf(stderr, "File: %s is still open. Close before reopening.\n", he_file); return FAIL; } /* Make backup first if necessary */ if (backup) { if (backupFile(file) < 0) return FAIL; he_backup = 1; } else he_backup = 0; if (initFile(file) < 0) return FAIL; return HE_OK; } /* HEclose -- close current file */ /* Called by HEdoCmd */ int HEclose(HE_CMD *cmd) { int i; int keep = NO; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] != '-') { unkArg(cmd->argv[i]); return FAIL; } else switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("close [-keep]"); puts("\t-keep\t\tDon't delete the backup file."); return HE_OK; case HE_KEEP: keep = YES; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return FAIL; default: irrOpt(cmd->argv[i]); return FAIL; } return closeFile(keep); } int HErevert(HE_CMD *cmd) { if (cmd->argc < 2) return revert(); if (cmd->argv[1][0] != '-' || findOpt(cmd->argv[1] + 1) == HE_HELP) { puts("revert"); puts("\tDiscard all changes."); return HE_OK; } return HE_FAIL; } int HEwrite(HE_CMD *cmd) { int i; char *file; uint16 ref = 0; uint16 tag = 0; if (cmd->argc < 2 || (cmd->argv[1][0] == '-' && findOpt(cmd->argv[1] + 1) == HE_HELP)) { puts("write [-attachto ]"); puts("\tWrite an element or group into another HDF file"); puts("\t-attchto\tONLY for writing annontations"); puts("\t\t\tWhat element to attach annotation to"); return HE_OK; } file = cmd->argv[1]; for (i = 2; i < cmd->argc; i++) if (cmd->argv[i][0] != '-') file = cmd->argv[i]; else switch (findOpt(cmd->argv[i] + 1)) { case HE_ATTACHTO: tag = (uint16)atoi(cmd->argv[++i]); ref = (uint16)atoi(cmd->argv[++i]); break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } return writ(file, tag, ref); } int writ(char *file, uint16 tag, uint16 ref) { int ret; uint16 ref1; if (!fileOpen()) { noFile(); return HE_FAIL; } if (!strcmp(file, he_file)) { fprintf(stderr, "Cannot write to self.\n"); return HE_FAIL; } /* handle special cases */ if (isAnnot(currTag)) return writeAnnot(file, tag, ref); if (isGrp(currTag)) return writeGrp(file); if (getNewRef(file, &ref1) < 0) return HE_FAIL; ret = writeElt(file, ref1, he_currDesc); return ret; } /* --------------------------- get a r8 from a file ----------------------- */ int HEgetR8(HE_CMD *cmd) { int i; int xdim = 0, ydim = 0; char *image, *pal = NULL; int compress = 0; if (cmd->argc < 4 || (cmd->argv[1][0] == '-' && findOpt(cmd->argv[1] + 1) == HE_HELP)) { puts("getr8 [-palette ] [-raster|-rle|-imcomp]"); puts("\tGet a r8 group from raw files"); puts("\t-palette\tRaw palette file"); puts("\t-raster\t\tNo compression (default)"); puts("\t-rle\t\tRun-length compression"); puts("\t-imcomp\t\tImcomp compression"); return HE_OK; } image = cmd->argv[1]; xdim = atoi(cmd->argv[2]); ydim = atoi(cmd->argv[3]); for (i = 4; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_PALETTE: pal = cmd->argv[++i]; break; case HE_RASTER: compress = 0; break; case HE_RLE: compress = HE_RLE; break; case HE_IMCOMP: compress = HE_IMCOMP; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return FAIL; default: irrOpt(cmd->argv[i]); return FAIL; } else { unkArg(cmd->argv[i]); return FAIL; } if (!image) { fprintf(stderr, "No image file specified.\n"); return FAIL; } if (xdim == 0 || ydim == 0) { fprintf(stderr, "No dimensions specified.\n"); return FAIL; } return getR8(xdim, ydim, image, pal, compress); } /* --------------- generic put routines ---------------------- */ int HEput(HE_CMD *cmd) { int i; int verbose = NO; char *template = (char *)"elt#.@"; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("put [-file ] [-verbose]"); puts("\tPut the raw binary of this element in a file"); puts("\t-file\t\tOut file name (default \"elt#.@\")"); puts("\t-verbose\tOutput diagnostic info"); return HE_OK; case HE_FILE: template = cmd->argv[++i]; break; case HE_VERBOSE: verbose = YES; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return put(template, verbose); } int put(char *template, int verbose) { int length; char *data; int ret; length = (int)getElement(he_currDesc, &data); if ((length <= 0) || (data == NULL)) return HE_FAIL; ret = putWithTempl(template, he_currDesc, length, 1, data, length, verbose); free(data); return ret; } /* ------------------ routines to put an r8 into a file --------------------- */ int HEputR8(HE_CMD *cmd) { int i; int verbose = NO; const char *image = "img#.@.%"; const char *pal = "pal#"; for (i = 1; i < cmd->argc; i++) if (cmd->argv[i][0] == '-') switch (findOpt(cmd->argv[i] + 1)) { case HE_HELP: puts("putr8 [-image ] [-palette ] [-verbose]"); puts("\tPut an r8 group into raw image and palette files"); puts("\t-image\t\tImage file name template (default \"img#.@.%\")"); puts("\t-palette\tPalette file name template (default \"pal#\")"); puts("\t-verbose\tTo give output of steps taken"); return HE_OK; case HE_IMAGE: image = cmd->argv[++i]; break; case HE_PALETTE: pal = cmd->argv[++i]; break; case HE_VERBOSE: verbose = YES; break; case HE_NOTFOUND: unkOpt(cmd->argv[i]); return HE_FAIL; case HE_AMBIG: ambigOpt(cmd->argv[i]); return HE_FAIL; default: irrOpt(cmd->argv[i]); return HE_FAIL; } else { unkArg(cmd->argv[i]); return HE_FAIL; } return putR8(image, pal, verbose); } int putR8(char *image, char *pal, int verbose) { int ret; int32 xdim, ydim; char *palette; char *raster; if (!fileOpen()) { noFile(); return HE_FAIL; } if (!isRig(currTag)) { fprintf(stderr, "Current element not an image group."); return HE_FAIL; } getCurrRig(&xdim, &ydim, &palette, &raster); if (raster == NULL) { fprintf(stderr, "Cannot find raster.\n"); return HE_FAIL; } ret = putWithTempl(image, he_currDesc, (int)xdim, (int)ydim, raster, (int)(xdim * ydim), verbose); free(raster); if (ret < 0) return HE_FAIL; if (palette != NULL) { int i; char p[HE_PALETTE_SZ]; for (i = 0; i < HE_COLOR_SZ; i++) { p[i] = *palette++; p[HE_COLOR_SZ + i] = *palette++; p[2 * HE_COLOR_SZ + i] = *palette++; } ret = putWithTempl(pal, he_currDesc, (int)xdim, (int)ydim, p, HE_PALETTE_SZ, verbose); free(palette); if (ret < 0) return HE_FAIL; } return HE_OK; } /* end of he-file.c */ hdf4-hdf4.3.1/hdf/util/he_main.c000066400000000000000000000674251503061704500163270ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /****************************************************************************** * he - HDF editor * * This program has a long history, starting with its creation as a tool to * help HDF developers work at a low-level on HDF files. It has evolved into * user-level program, though it is still designed for small editing tasks on * HDF files. * * he allows sophisticated HDF users to manipulate the elements in an HDF file. * These manipulations include selecting groups and showing information about * them, dumping them to the output, writing them to new files, deleting them, * inserting them, replacing, say, the palette of an r8 group, and editing the * text labels and descriptions of any element. * * he will NOT allow the user to *arbitrarily* modify binary data in the file * or any element, though it allows modification of tag and reference numbers * within strict constraints. The user should not attempt to alter individual * bytes. It is acceptable, however, to replace an element with another of * the same type. * * he can be used both interactively or in "batch" mode. Here is a sample * batch program: * * #!/bin/csh -f * set file=$1 * shift * he -batch $file -nobackup << EOF * info -all -group $* * close * quit * EOF * * This makes use of C-shell variable substitution to pass a filename to he, * invokes he, and then lists out on separate lines the commands to give once * he is running. The $* trailing the info command is also C-shell variable * substitution. * * List of commands: annotate dump if open putr8 unalias * close getr8 info prev revert wait * delete help next put select write * display * * Predicates are of the form TAG = 3 IMAGE_SIZE < 1000 LABEL = "abc" * Type -help for usage of . DO NOT type the command * without arguments and expect help. Some commands delete objects and do not * need any arguments. If you are learning to use he, try it on an expendable * file. *****************************************************************************/ /* ------ he.c ------- main() main HDF interfacing routines */ #include "hdf_priv.h" #include "he.h" #include #ifdef H4_HAVE_UNISTD_H #include #endif #if defined H4_HAVE_WIN32_API && !defined __MINGW32__ typedef int pid_t; #endif /* the return status of last command executed */ int he_status = HE_OK; /* is this on the console or remote terminals? this should eventually be detected automatically */ int he_remote = YES; /* is this batch mode or interactive? */ extern int he_batch; int he_currDesc; int he_numDesc; int he_numGrp; int he_backup; char *he_file = NULL; DFdesc *he_desc = NULL; HE_GROUP *he_grp = NULL; int main(int argc, char *argv[]) { int backup = YES; /* Backup files when opening? */ char *fileName = NULL; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') { switch (findOpt(argv[i] + 1)) { case HE_HELP: printf("he [] [-nobackup] [-batch]\n"); help(); quit(0); break; case HE_BATCH: he_batch = YES; break; case HE_REMOTE: he_remote = YES; break; case HE_NOBACKUP: backup = NO; break; case HE_BACKUP: backup = YES; break; case HE_NOTFOUND: unkOpt(argv[i]); quit(1); /* does not return */ break; case HE_AMBIG: ambigOpt(argv[i]); quit(1); break; default: irrOpt(argv[i]); quit(1); /* does not return */ break; } } else { /* Must be a filename */ if (!fileName) fileName = argv[i]; else fprintf(stderr, "Single file only. %s not open.\n", argv[i]); } } if (NULL == (he_desc = (DFdesc *)calloc(HE_DESC_SZ, sizeof(DFdesc)))) goto error; if (NULL == (he_grp = (HE_GROUP *)calloc(HE_DESC_SZ, sizeof(HE_GROUP)))) goto error; /* if there is a file name given in the command line, open it */ if (fileName) he_status = openFile(fileName, backup); /* read, execute loop */ cmdLoop(); if (fileOpen()) closeFile(YES); /* close with keep */ quit(EXIT_SUCCESS); return EXIT_SUCCESS; error: free(he_desc); free(he_grp); quit(EXIT_FAILURE); return EXIT_FAILURE; } /* cmdLoop -- read commands and execute them */ void cmdLoop(void) { HE_CMD *cmd; for (cmd = getCmd(); cmd; cmd = getCmd()) { if (cmd->func) he_status = (*cmd->func)(cmd); else { fprintf(stderr, "Unknown command: %s.\n", cmd->argv[0]); he_status = HE_FAIL; } deleteCmd(cmd); } } int32 getElement(int desc, char **pdata) { int32 length; int32 fid; length = he_desc[desc].length; /* alloc memory to read the element in */ *pdata = (char *)malloc(length); if (*pdata == NULL) return FAIL; /* read in the element and check for error */ if ((fid = Hopen(he_file, DFACC_READ, 0)) == -1) { HEprint(stderr, 0); return FAIL; } if (Hgetelement(fid, he_desc[desc].tag, he_desc[desc].ref, (unsigned char *)(*pdata)) < 0) { free(*pdata); fprintf(stderr, "Cannot read element.\n"); return FAIL; } Hclose(fid); return length; } /* the tmp directory, currently set for unix */ #define TDIR "/tmp/" int getTmpName(char **pname) { int length; static int count = 0; char s[32]; int pid = getpid(); (void)sprintf(s, "%she%d.%d", TDIR, pid, count); count++; length = (int)strlen(s); if (length <= 0) return FAIL; *pname = (char *)malloc(length + 1); strcpy(*pname, s); return length; } int writeToFile(char *file, char *data, int32 length) { FILE *fd = NULL; int written; fd = fopen(file, "w"); if (fd == NULL) goto error; written = (int)fwrite(data, sizeof(char), (size_t)length, fd); if (written != length) { fprintf(stderr, "Error in write.\n"); goto error; } fclose(fd); return HE_OK; error: if (fd != NULL) fclose(fd); return FAIL; } int removeFile(char *file) { return remove((const char *)file); } /* is a file currently opened */ int fileOpen(void) { return (he_file != NULL); } char * backupName(const char *file) { return catStr(file, "$hdfed$"); } int backupFile(char *file) { char *back = NULL; /* backup file name */ int f = -1; back = backupName(file); f = copyFile(file, back); free(back); return f; } int copyFile(char *from, char *to) { int num_read; char buf[HE_BUF_SZ]; /* copying buffer */ FILE *fp = NULL; FILE *bfp = NULL; /* open the hdf file for backing up */ if ((fp = fopen(from, "r")) == NULL) { fprintf(stderr, "Unable to open file: <%s>\n", from); goto error; } if ((bfp = fopen(to, "w")) == NULL) { fclose(fp); fprintf(stderr, "Unable to open backup file.\n"); goto error; } /* copy the contents from hdf file to backup file */ while ((num_read = (int)fread(buf, 1, HE_BUF_SZ, fp)) > 0) fwrite(buf, 1, (size_t)num_read, bfp); fclose(fp); fclose(bfp); return HE_OK; error: if (fp != NULL) fclose(fp); if (bfp != NULL) fclose(bfp); return FAIL; } int updateDesc(void) { int32 fid; int32 groupID; int32 aid, status; int i; if ((fid = Hopen(he_file, DFACC_READ, 0)) == 0) { printf("failed opening\n"); HEprint(stdout, 0); return FAIL; } aid = Hstartread(fid, DFTAG_WILDCARD, DFREF_WILDCARD); if (aid == FAIL) { HEprint(stderr, 0); return FAIL; } status = SUCCEED; for (i = 0; (i < HE_DESC_SZ) && (status != FAIL); i++) { Hinquire(aid, NULL, &he_desc[i].tag, &he_desc[i].ref, &he_desc[i].length, &he_desc[i].offset, NULL, (int16 *)NULL, (int16 *)NULL); status = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); } he_numDesc = i; /* get information about the groups */ he_numGrp = 0; for (i = 0; i < he_numDesc; i++) { if (isGrp(he_desc[i].tag)) { he_grp[he_numGrp].desc = i; /* he_grp[he_numGrp].size = (int) (he_desc[i].length / sizeof(tag_ref)); he_grp[he_numGrp].ddList = (tag_ref_ptr) malloc(he_desc[i].length); */ he_grp[he_numGrp].size = (int)(he_desc[i].length / 4); he_grp[he_numGrp].ddList = (tag_ref_ptr)malloc(he_grp[he_numGrp].size * sizeof(tag_ref)); if (!he_grp[he_numGrp].ddList) { fprintf(stderr, "Out of memory. Closing file.\n"); closeFile(1); /* keep the backup */ return FAIL; } groupID = DFdiread(fid, he_desc[i].tag, he_desc[i].ref); if (groupID < 0) { HEprint(stderr, 0); return FAIL; } for (int j = 0; j < he_grp[he_numGrp].size; j++) DFdiget(groupID, &he_grp[he_numGrp].ddList[j].tag, &he_grp[he_numGrp].ddList[j].ref); he_numGrp++; } } Hendaccess(aid); Hclose(fid); return SUCCEED; } int initFile(char *file) { free(he_file); he_file = copyStr(file); if (updateDesc() < 0) return FAIL; /* if there are groups in this file, go to the first group tag */ /* otherwise, just go to the first element */ if (he_numGrp > 0) he_currDesc = he_grp[0].desc; else he_currDesc = 0; return resetPred(); } int closeFile(int keep) { char *back = NULL; if (!fileOpen()) { fprintf(stderr, "No open file to close.\n"); return FAIL; } /* free some dynamic storages */ if (he_backup && !keep) { back = backupName(he_file); (void)removeFile(back); free(back); } free(he_file); he_file = NULL; for (int i = 0; i < he_numGrp; i++) free(he_grp[i].ddList); return HE_OK; } int getR8(int xdim, int ydim, char *image, char *pal, int compress) { FILE *fp = NULL; int32 length; char *buf = NULL; if (!fileOpen()) { noFile(); goto error; } if (pal) if (setPal(pal) < 0) /* Error already signalled by setPal */ goto error; length = xdim * ydim; buf = (char *)malloc(length); if ((fp = fopen(image, "r")) == NULL) { fprintf(stderr, "Error opening image file: %s.\n", image); goto error; } if (fread(buf, (size_t)xdim, (size_t)ydim, fp) < (size_t)ydim) { fprintf(stderr, "Error reading image file: %s.\n", image); goto error; } if (DFR8addimage(he_file, buf, (int32)xdim, (int32)ydim, (uint16)compress) < 0) { HEprint(stderr, 0); goto error; } if (updateDesc() < 0) goto error; fclose(fp); free(buf); return HE_OK; error: if (fp != NULL) fclose(fp); free(buf); return FAIL; } int setPal(char *pal) { FILE *fp = NULL; char reds[HE_COLOR_SZ], greens[HE_COLOR_SZ], blues[HE_COLOR_SZ]; char palette[HE_PALETTE_SZ]; char *p; if ((fp = fopen(pal, "r")) == NULL) { fprintf(stderr, "Error opening palette file: %s.\n", pal); goto error; } if (fread(reds, 1, HE_COLOR_SZ, fp) < HE_COLOR_SZ || fread(greens, 1, HE_COLOR_SZ, fp) < HE_COLOR_SZ || fread(blues, 1, HE_COLOR_SZ, fp) < HE_COLOR_SZ) { fprintf(stderr, "Error reading palette file: %s.\n", pal); goto error; } /* convert sun palette to hdf palette */ p = palette; for (int i = 0; i < HE_COLOR_SZ; i++) { *p++ = reds[i]; *p++ = greens[i]; *p++ = blues[i]; } if (DFR8setpalette((uint8 *)palette) < 0) { fputs("Error setting palette.\n", stderr); goto error; } fclose(fp); return HE_OK; error: if (fp != NULL) fclose(fp); return FAIL; } int findDesc(tag_ref_ptr dd) { for (int i = 0; i < he_numDesc; i++) if ((he_desc[i].tag == dd->tag) && (he_desc[i].ref == dd->ref)) return i; return FAIL; } int desc2Grp(int desc) { for (int i = 0; i < he_numGrp; i++) if (he_grp[i].desc == desc) return i; NOT_REACHED(); return FAIL; } int hasReference(int desc) { for (int i = 0; i < he_numGrp; i++) for (int j = 0; j < he_grp[i].size; j++) if (he_grp[i].ddList[j].tag == he_desc[desc].tag && he_grp[i].ddList[j].ref == he_desc[desc].ref) return YES; return NO; } int deleteDesc(int desc) { int32 fid = -1; if ((fid = Hopen(he_file, DFACC_WRITE, 0)) == -1) { HEprint(stderr, 0); goto error; } if (Hdeldd(fid, he_desc[desc].tag, he_desc[desc].ref) == FAIL) { HEprint(stderr, 0); goto error; } return Hclose(fid); error: if (fid != -1) if (FAIL == Hclose(fid)) HEprint(stderr, 0); return FAIL; } int getCurrRig(int32 *pXdim, int32 *pYdim, char **pPalette, char **pRaster) { int ispal; goTo(he_currDesc); if (DFR8getdims(he_file, pXdim, pYdim, &ispal) < 0) { fprintf(stderr, "Error getting image group.\n"); HEprint(stderr, 0); return FAIL; } if (ispal) *pPalette = (char *)malloc(HE_PALETTE_SZ); else *pPalette = (char *)NULL; *pRaster = (char *)malloc((size_t)(*pXdim) * (size_t)(*pYdim)); if (DFR8getimage(he_file, (unsigned char *)*pRaster, *pXdim, *pYdim, (unsigned char *)*pPalette) == FAIL) { fprintf(stderr, "Error getting image group.\n"); HEprint(stderr, 0); return FAIL; } return HE_OK; } int putWithTempl(char *template, int n1, int n2, int n3, char *data, int length, int verbose) { char *file = NULL; int ret = FAIL; convertTemplate(template, n1, n2, n3, &file); if (verbose) printf("Writing to file: %s\n", file); ret = writeToFile(file, data, length); free(file); return ret; } int revert(void) { char *back = NULL; back = backupName(he_file); if (copyFile(back, he_file) < 0) return FAIL; return initFile(he_file); } int writeElt(char *file, uint16 ref, int elt) { int ret; char *data; int32 eltLength; char *p; uint16 rank; int i; uint16 ntTag; uint16 ntRef; tag_ref_ptr ntDesc; int nt; eltLength = getElement(elt, &data); if (eltLength <= 0) { fprintf(stderr, "Cannot get element: tag %d ref %d.\n", he_desc[elt].tag, he_desc[elt].ref); return FAIL; } /* special case */ if (he_desc[elt].tag == DFTAG_SDD) { /* lots of hack here */ /* assume that the number types are of the same ref as this elt */ p = data; /* get the rank */ /* NOTE: UINT16READ and UINT16WRITE advances p */ UINT16DECODE(p, rank); /* move to the NT of the data */ p += (rank * 4); UINT16DECODE(p, ntTag); UINT16DECODE(p, ntRef); /* set up to write the number type element */ ntDesc = (tag_ref_ptr)malloc(sizeof(tag_ref)); ntDesc->tag = ntTag; ntDesc->ref = ntRef; nt = findDesc(ntDesc); free(ntDesc); writeElt(file, ref, nt); p -= 2; UINT16ENCODE(p, ref); /* do the NT of scales */ for (i = 0; (uint16)i < rank; i++) { p += 2; UINT16ENCODE(p, ref); } } ret = putElement(file, he_desc[elt].tag, ref, data, eltLength); free(data); return ret; } int putElement(char *file, uint16 tag, uint16 ref, char *data, int32 len) { int32 ret; int32 fid = -1; if ((fid = Hopen(file, DFACC_READ | DFACC_WRITE, 0)) == FAIL) /* a little tricky here */ if (HEvalue(0) != DFE_FNF || (fid = Hopen(file, DFACC_ALL, 0)) == FAIL) { HEprint(stderr, 0); goto error; } if ((ret = Hputelement(fid, tag, ref, (unsigned char *)data, len)) < 0) { HEprint(stderr, 0); goto error; } return Hclose(fid); error: if (fid != -1) if (FAIL == Hclose(fid)) HEprint(stderr, 0); return FAIL; } int writeGrp(char *file) { uint16 ref = DFREF_NONE; int grp; int elt; int ret; int32 fid; int32 gid; getNewRef(file, &ref); grp = currGrpNo; gid = DFdisetup(he_grp[grp].size); for (int i = 0; i < he_grp[grp].size; i++) { elt = findDesc(he_grp[grp].ddList + i); if (elt >= 0) writeElt(file, ref, elt); /* Update the group dd list */ DFdiput(gid, he_grp[grp].ddList[i].tag, ref); } /* Do the group now */ if ((fid = Hopen(file, DFACC_READ | DFACC_WRITE, 0)) == FAIL) { HEprint(stderr, 0); return FAIL; } if ((ret = DFdiwrite(fid, gid, currTag, ref)) < 0) { HEprint(stderr, 0); return ret; } return Hclose(fid); } int getNewRef(char *file, uint16 *pRef) { int32 fid; if ((fid = Hopen(file, DFACC_READ | DFACC_WRITE, 0)) == FAIL) { /* a little tricky here */ if (HEvalue(0) != DFE_FNF || (fid = Hopen(file, DFACC_ALL, 0)) == FAIL) { HEprint(stderr, 0); return FAIL; } } *pRef = Hnewref(fid); return Hclose(fid); } int writeAnnot(char *file, uint16 tag, uint16 ref) { char *data; int32 eltLength; int tmp; char *p; uint16 newRef; while (tag == 0) { printf("Attach to what tag? (> 0)"); scanf("%d", &tmp); tag = (uint16)tmp; } while (ref == 0) { printf("Attach to what ref? (> 0)"); scanf("%d", &tmp); ref = (uint16)tmp; } eltLength = getElement(he_currDesc, &data); if (eltLength <= 0) { fprintf(stderr, "Cannot get element: tag %d ref %d.\n", he_desc[he_currDesc].tag, he_desc[he_currDesc].ref); return FAIL; } p = data; /* * This is really ugly... */ UINT16ENCODE(p, tag); UINT16ENCODE(p, ref); if (getNewRef(file, &newRef) < 0) { fprintf(stderr, "Error getting new ref number.\n"); return FAIL; } return putElement(file, he_desc[he_currDesc].tag, newRef, data, eltLength); } int32 getAnn(int ann, uint16 tag, uint16 ref, char **pBuf) { int32 len; if (ann == HE_LABEL) { len = DFANgetlablen(he_file, tag, ref); if (len > 0) { *pBuf = (char *)malloc((size_t)(len + 1)); DFANgetlabel(he_file, tag, ref, *pBuf, len + 1); } else *pBuf = NULL; } else { len = DFANgetdesclen(he_file, tag, ref); if (len > 0) { *pBuf = (char *)malloc((size_t)len); DFANgetdesc(he_file, tag, ref, *pBuf, len); } else *pBuf = NULL; } return len; } int putAnn(int ann, uint16 tag, uint16 ref, char *buf, int32 len) { int ret; if (ann == HE_LABEL) ret = DFANputlabel(he_file, tag, ref, buf); else ret = DFANputdesc(he_file, tag, ref, buf, len); if (ret < 0) HEprint(stderr, 0); return ret; } int32 readFromFile(char *file, char **pBuf) { FILE *fp = NULL; int32 soFar; int32 bufLen; int32 num_read; fp = fopen(file, "r"); if (fp == NULL) goto error; soFar = 0; bufLen = 0; for (num_read = HE_BUF_SZ; num_read == HE_BUF_SZ; soFar += num_read) { bufLen += HE_BUF_SZ; if (bufLen == HE_BUF_SZ) *pBuf = (char *)malloc(bufLen); else *pBuf = (char *)realloc(*pBuf, bufLen); if (*pBuf == NULL) goto error; num_read = (int32)fread((*pBuf) + soFar, 1, HE_BUF_SZ, fp); } *pBuf = (char *)realloc(*pBuf, soFar + 1); (*pBuf)[soFar] = '\0'; fclose(fp); return soFar; error: if (fp != NULL) fclose(fp); return FAIL; } /* ---- table for operators -------- */ struct { const char *str; int key; } he_optTab[] = { {"readonly", HE_RDONLY}, {"all", HE_ALL}, {"backup", HE_BACKUP}, {"batch", HE_BATCH}, {"help", HE_HELP}, {"longout", HE_LONGOUT}, {"nobackup", HE_NOBACKUP}, {"remote", HE_REMOTE}, {"verbose", HE_VERBOSE}, {"position", HE_POSITION}, {"expansion", HE_EXPANSION}, {"large", HE_LARGE}, {"offset", HE_OFFSET}, {"ascii", HE_ASCII}, {"octal", HE_OCTAL}, {"hexadecimal", HE_HEX}, {"decimal", HE_DECIMAL}, {"float", HE_FLOAT}, {"dimensions", HE_DIMS}, {"image", HE_IMAGE}, {"palette", HE_PALETTE}, {"raster", HE_RASTER}, {"rle", HE_RLE}, {"compress", HE_RLE}, {"imcomp", HE_IMCOMP}, {"group", HE_DOGROUP}, {"file", HE_FILE}, {"keep", HE_KEEP}, {"length", HE_LENGTH}, {"attachto", HE_ATTACHTO}, {"label", HE_LABEL}, {"descriptor", HE_DESCRIPTOR}, {"editor", HE_EDITOR}, {"byte", HE_BYTE}, {"short", HE_SHORT}, {"double", HE_DOUBLE}, {"ushort", HE_USHORT}, {"udecimal", HE_UDECIMAL}, {"raw", HE_RAW}, }; int findOpt(char *word) { unsigned len; int found = -1; len = strlen(word); for (int i = 0; i < sizeof(he_optTab) / sizeof(he_optTab[0]); i++) if (!strncmp(he_optTab[i].str, word, len)) { /* exact match */ if (strlen(he_optTab[i].str) == len) return he_optTab[i].key; if (found < 0) found = (int)i; else return HE_AMBIG; } if (found < 0) return HE_NOTFOUND; return he_optTab[found].key; } char * catStr(const char *s, const char *s1) { char *t = NULL; t = (char *)malloc(strlen(s) + strlen(s1) + 1); strcpy(t, s); strcat(t, s1); return t; } char * copyStr(char *s) { char *t = NULL; t = (char *)malloc(strlen(s) + 1); strcpy(t, s); return t; } int isGrp(uint16 tag) { switch (tag) { case DFTAG_RIG: case DFTAG_SDG: case DFTAG_NDG: /* and other group tags */ return 1; default: return 0; } } int HEquit(HE_CMD *cmd) { if (cmd->argc > 1) { puts("quit"); puts("\tQuits this application."); return HE_OK; } return quit(0); } int quit(int status) { free(he_desc); free(he_grp); if (fileOpen()) { if (closeFile(0) < 0) return HE_FAIL; } exit(status); } int HEhelp(HE_CMD *dummy) { (void)dummy; help(); return HE_OK; } void help(void) { /* print some help information */ printf("hdfed allows sophisticated HDF users to manipulate the elements in"); printf(" an HDF file.\nThese manipulations include selecting groups and "); printf("showing information about\nthem, dumping them to the output, "); printf("writing them to new files, deleting them,\ninserting them, "); printf("replacing, say, the palette of an r8 group, and editing the\n"); printf("text labels and descriptions of any element.\n\n"); printf("hdfed will NOT allow the user to *arbitrarily* modify binary data "); printf("in the file or\nany element, though it allows modification of tag "); printf("and reference numbers within\nstrict constraints. The user should"); printf(" not attempt to alter individual bytes. It\nis acceptable,"); printf(" however, to replace an element with another of the same type.\n\n"); printf("hdfed can be used both interactively or in 'batch' mode. See the "); printf("\"HDF Calling\nInterfaces and Utilities\" manual section on hdfed "); printf("for an example.\n\n"); printf("List of commands:"); printf("\tannotate dump if open putr8 unalias\n"); printf("\t\t\tclose getr8 info prev revert wait\n"); printf("\t\t\tdelete help next put select write\n"); printf("\nPredicates for 'if' 'select' 'next' and 'prev' are of the form\n"); printf("\ttag = 3 ref = 2 image_size < 1000 label = \"abc\"\n"); printf("Type -help for usage of . DO NOT type the"); printf(" command without\narguments and expect help. Some commands delete"); printf(" objects and do not need any\narguments. If you are learning to "); printf("use hdfed, try it on an expendable file.\n"); } int HEwait(HE_CMD *cmd) { int c; if (cmd->argv[1][0] == '-' && findOpt(cmd->argv[1] + 1) == HE_HELP) { printf("wait []\n"); printf("\tPrints message and then wait for user to hit return\n"); return HE_OK; } printf("%s\nPress return to continue.", cmd->argv[1]); do c = getchar(); while (c != '\n'); return HE_OK; } void deleteCmd(HE_CMD *cmd) { if (cmd == NULL) return; if (cmd->next != NULL) deleteCmd(cmd->next); if (cmd->sub != NULL) deleteCmd(cmd->sub); for (int i = 0; i < cmd->argc; i++) free(cmd->argv[i]); free(cmd); } /* -------------- routines to manipulate templates --------------------- */ #define TEMPLATE_CHAR1 '#' #define TEMPLATE_CHAR2 '@' #define TEMPLATE_CHAR3 '%' void convertTemplate(char *template, int n1, int n2, int n3, char **pname) { char s1[20], s2[20], s3[20]; char *t; sprintf(s1, "%1d", n1); sprintf(s2, "%1d", n2); sprintf(s3, "%1d", n3); *pname = t = (char *)malloc(strlen(template) + 61); while (*template) switch (*template) { case TEMPLATE_CHAR1: fillTemplate(&template, &t, s1, TEMPLATE_CHAR1); break; case TEMPLATE_CHAR2: fillTemplate(&template, &t, s2, TEMPLATE_CHAR2); break; case TEMPLATE_CHAR3: fillTemplate(&template, &t, s3, TEMPLATE_CHAR3); break; default: *t++ = *template ++; } *t = '\0'; } void fillTemplate(char **template, char **pout, char *s, char templateChar) { int templateLen, sLen; /* count length of template to replace */ for (templateLen = 0; **template == templateChar; (*template)++, templateLen++) ; sLen = (int)strlen(s); /* fill with zero's if the space reserved in template is longer than the length of s */ for (; templateLen > sLen; templateLen--) *(*pout)++ = '0'; while (*s) *(*pout)++ = *s++; } /* end of he-main.c */ hdf4-hdf4.3.1/hdf/util/he_proto.h000066400000000000000000000105301503061704500165340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Prototypes for hdfed functions */ int HEalias(HE_CMD *cmd); int HEannotate(HE_CMD *cmd); int HEclose(HE_CMD *cmd); int HEdelete(HE_CMD *cmd); int HEdisplay(HE_CMD *cmd); int HEdump(HE_CMD *cmd); int HEgetR8(HE_CMD *cmd); int HEhelp(HE_CMD *cmd); int HEif(HE_CMD *cmd); int HEinfo(HE_CMD *cmd); int HEnext(HE_CMD *cmd); int HEopen(HE_CMD *cmd); int HEprev(HE_CMD *cmd); int HEput(HE_CMD *cmd); int HEputR8(HE_CMD *cmd); int HEquit(HE_CMD *cmd); int HErevert(HE_CMD *cmd); int HEselect(HE_CMD *cmd); int HEunalias(HE_CMD *cmd); int HEwait(HE_CMD *cmd); int HEwrite(HE_CMD *cmd); int annotate(const char *editor, int ann); int backupFile(char *file); char *backupName(const char *file); int bigImg(unsigned char *targ, unsigned char *src); char *catStr(const char *s1, const char *s2); int closeFile(int keep); void cmdLoop(void); void convertTemplate(char *template, int n1, int n2, int n3, char **pname); int copyFile(char *from, char *to); char *copyStr(char *str); int delete(int curr); void deleteCmd(HE_CMD *cmd); int deleteDesc(int desc); int desc2Grp(int desc); int display(int c, int x, int y, int f, int l); int HEIdump(int32 length, int offset, char *format, int raw); int fileOpen(void); void fillTemplate(char **template, char **pout, char *s, char templateChar); HE_CMD *findAlias(char *str); int findDesc(tag_ref_ptr dd); HE_FUNC findFunc(char *word); int findKey(char *word); int findOpt(char *word); int32 getAnn(int ann, uint16 tag, uint16 ref, char **pBuf); HE_CMD *getCmd(void); int getCurrRig(int32 *pXdim, int32 *pYdim, char **pPalette, char **pRaster); int32 getElement(int desc, char **pdata); int getLine(char *); int getNewRef(char *file, uint16 *pRef); int getPix(void); int getR8(int xdim, int ydim, char *image, char *pal, int compress); int getSpace(void); int getTmpName(char **pname); void goTo(int desc); int hasReference(int desc); void help(void); int info(int all, int longout, int group, int label); void infoDesc(int desc, int longout, int label); int initFile(char *file); int isGrp(uint16 tag); int isNumber(char *s); int largeSet(void); int main(int argc, char *argv[]); HE_CMD *mkDupCmd(HE_CMD *cmd); char *nextToken(char **p); char *nextWord(char **p); int numCompare(int n1, int Comp, int n2); int od(char *format, char *file); int openFile(char *file, int backup); HE_CMD *parse(void); HE_CMD *parseCmd(char **p); HE_PRED *parsePred(int argc, char *argv[]); int pixImage(int usepal); void printAlias(char *word, HE_CMD *cmd); void prompt(void); int put(char *template, int verbose); int putAnn(int ann, uint16 tag, uint16 ref, char *buf, int32 len); int putElement(char *file, uint16 tag, uint16 ref, char *data, int32 len); int putR8(char *image, char *pal, int verbose); int putWithTempl(char *template, int n1, int n2, int n3, char *data, int length, int verbose); int quit(int status); int rImage(int usepal); int32 readFromFile(char *file, char **pBuf); int recurseDel(int curr); int removeFile(char *file); int resetPred(void); int revert(void); int rleIt(char *buf, char *bufto, int len); int satPred(DFdesc *desc, HE_PRED pred[]); int setAlias(char *str, HE_CMD *cmd); int setPal(char *pal); int updateDesc(void); int writ(char *file, uint16 tag, uint16 ref); int writeAnnot(char *file, uint16 tag, uint16 ref); int writeElt(char *file, uint16 ref, int elt); int writeGrp(char *file); int writeToFile(char *file, char *data, int32 length); hdf4-hdf4.3.1/hdf/util/jpeg2hdf.c000066400000000000000000000301001503061704500163740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf_priv.h" /* Size of the file buffer to copy through */ #define MAX_FILE_BUF 16384 typedef enum { /* JPEG marker codes */ M_SOF0 = 0xc0, M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, M_DHT = 0xc4, M_DAC = 0xcc, M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, M_RST3 = 0xd3, M_RST4 = 0xd4, M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, M_DQT = 0xdb, M_DNL = 0xdc, M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, M_APP0 = 0xe0, M_APP15 = 0xef, M_JPG0 = 0xf0, M_JPG13 = 0xfd, M_COM = 0xfe, M_TEM = 0x01, M_ERROR = 0x100 } JPEG_MARKER; static int32 num_bytes; /* number of bytes until the SOS code. */ static int32 image_width = 0; /* width of the JPEG image in pixels */ static int32 image_height = 0; /* height of the JPEG image in pixels */ static intn num_components = 0; /* number of components in the JPEG image */ static uint8 file_buf[MAX_FILE_BUF]; /* size of the buffer to copy through */ /* * Routines to parse JPEG markers & save away the useful info. */ static intn jgetc(FILE *f) /* Get a 2-byte unsigned integer (e.g., a marker parameter length field) */ { intn a; a = fgetc(f); if (a != EOF) num_bytes++; return (a); } static int32 get_2bytes(FILE *f) /* Get a 2-byte unsigned integer (e.g., a marker parameter length field) */ { int32 a; a = jgetc(f); return (a << 8) + jgetc(f); } static void get_sof(FILE *f) /* Process a SOFn marker */ { short ci; (void)get_2bytes(f); jgetc(f); /* data_precision */ image_height = get_2bytes(f); image_width = get_2bytes(f); num_components = jgetc(f); for (ci = 0; ci < num_components; ci++) { jgetc(f); jgetc(f); jgetc(f); } } static void skip_variable(FILE *f) /* Skip over an unknown or uninteresting variable-length marker */ { int32 length; length = get_2bytes(f); for (length -= 2; length > 0; length--) (void)jgetc(f); } static intn next_marker(FILE *f) /* Find the next JPEG marker */ /* Note that the output might not be a valid marker code, */ /* but it will never be 0 or FF */ { intn c, nbytes; nbytes = 0; do { do { /* skip any non-FF bytes */ nbytes++; c = jgetc(f); } while (c != 0xFF); do { /* skip any duplicate FFs */ nbytes++; c = jgetc(f); } while (c == 0xFF); } while (c == 0); /* repeat if it was a stuffed FF/00 */ return c; } static JPEG_MARKER process_tables(FILE *f) /* Scan and process JPEG markers that can appear in any order */ /* Return when an SOI, EOI, SOFn, or SOS is found */ { int c; while (TRUE) { c = next_marker(f); switch (c) { case M_EOI: return ((JPEG_MARKER)c); case M_SOF0: case M_SOF1: case M_SOF9: get_sof(f); return ((JPEG_MARKER)c); case M_RST0: /* these are all parameterless */ case M_RST1: case M_RST2: case M_RST3: case M_RST4: case M_RST5: case M_RST6: case M_RST7: case M_TEM: break; default: /* must be DNL, DHP, EXP, APPn, JPGn, COM, or RESn */ skip_variable(f); break; } } } /* * Initialize and read the file header (everything through the SOF marker). */ static int32 read_file_header(FILE *f) { int c; num_bytes = 0; /* reset the number of bytes into the file we are */ /* Demand an SOI marker at the start of the file --- otherwise it's * probably not a JPEG file at all. If the user interface wants to support * nonstandard headers in front of the SOI, it must skip over them itself * before calling jpeg_decompress(). */ if (jgetc(f) != 0xFF || jgetc(f) != M_SOI) return (0); /* Process markers until SOF */ c = (int)process_tables(f); switch (c) { case M_SOF0: /* ok, now we know the correct number of bytes to grab */ case M_SOF1: case M_SOF9: return (num_bytes); default: return (0); } } /*----------------------------------------------------------------------------- * Name: DFJPEGaddrig * Purpose: Write RIG struct for the new JPEG image out to HDF file * Inputs: file_id: HDF file pointer * ref: ref to write RIG with * Returns: 0 on success, -1 on failure with DFerror set * Users: hopefully only routines in this utility * Invokes: DFdistart, DFdiadd, DFdiend, DFputelement * Remarks: another really, really, nasty hack brought to you by QAK in the * interest of not decompressing the JPEG image before stuffing it * into the HDF file... *---------------------------------------------------------------------------*/ static intn DFJPEGaddrig(int32 file_id, uint16 ref, uint16 ctag) { uint8 ntstring[4]; int32 GroupID; uint8 *p; ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = DFNT_UCHAR; /* type */ ntstring[2] = 8; /* width: RIG data is 8-bit chars */ ntstring[3] = DFNTC_BYTE; /* class: data are numeric values */ if (Hputelement(file_id, DFTAG_NT, ref, (uint8 *)ntstring, (int32)4) == FAIL) return FAIL; p = file_buf; INT32ENCODE(p, image_width); /* width */ INT32ENCODE(p, image_height); /* height */ UINT16ENCODE(p, DFTAG_NT); /* number type */ UINT16ENCODE(p, ref); INT16ENCODE(p, num_components); /* number of components */ INT16ENCODE(p, 0); /* interlace scheme */ UINT16ENCODE(p, ctag); /* compression type */ UINT16ENCODE(p, ref); if (Hputelement(file_id, DFTAG_ID, ref, file_buf, (int32)(p - file_buf)) == FAIL) return FAIL; /* prepare to start writing rig */ /* ### NOTE: the parameter to this call may go away */ if ((GroupID = DFdisetup(10)) == FAIL) return FAIL; /* max 10 tag/refs in set */ /* add tag/ref to RIG - image description, image and lookup table */ if (DFdiput(GroupID, DFTAG_ID, ref) == FAIL) return FAIL; if (DFdiput(GroupID, DFTAG_CI, ref) == FAIL) return FAIL; /* write out RIG */ return (DFdiwrite(file_id, GroupID, DFTAG_RIG, ref)); } static void usage(void) { printf("USAGE: jpeg2hdf \n"); printf(" : JPEG file containing input image \n"); printf(" : HDF file to store the image\n"); exit(1); } /* end usage() */ int main(int argc, char *argv[]) { int32 off_image; /* offset of the JPEG image in the JFIF file */ int32 file_len; /* total length of the JPEG file */ FILE *jfif_file; /* file handle of the JFIF image */ int32 file_id; /* HDF file ID of the file to write */ uint16 wtag; /* tag number to use for the image */ uint16 wref; /* reference number to use for the image */ uint16 ctag; /* tag for the compression to do */ int32 aid; /* access ID for the JPEG image to stuff */ if (argc != 3) usage(); if (argv[1][0] == '-' || argv[1][0] == '/') /* check command line */ usage(); jfif_file = fopen(argv[1], "rb"); if (jfif_file == NULL) { printf("Error opening JPEG file: %s\n", argv[1]); exit(1); } /* end if */ off_image = read_file_header(jfif_file); if (off_image == 0 || image_width <= 0 || image_height <= 0 || num_components <= 0) { printf("Error reading JPEG file: %s, could not find a JFIF header\n", argv[1]); exit(1); } /* end if */ if (!fseek(jfif_file, 0, SEEK_END)) { file_len = (int32)ftell(jfif_file); fseek(jfif_file, 0, SEEK_SET); /* go back to beginning of JFIF file */ } /* end if */ else { printf("Error, cannot fseek in %s(?!)\n", argv[1]); exit(1); } /* end else */ if ((file_id = Hopen(argv[2], DFACC_RDWR, 0)) != FAIL) { wref = Hnewref(file_id); if (!wref) { printf("Error getting a reference number for HDF file: %s\n", argv[2]); Hclose(file_id); exit(1); } /* end if */ wtag = DFTAG_CI; /* yes, this is a compressed image */ if (num_components == 1) ctag = DFTAG_GREYJPEG5; else if (num_components == 3) ctag = DFTAG_JPEG5; else { printf("Error, cannot support JPEG file containing %d components\n", num_components); Hclose(file_id); exit(1); } /* end else */ if ((aid = Hstartwrite(file_id, ctag, wref, 0)) == FAIL) { printf("Error writing JPEG header to HDF file: %s\n", argv[2]); exit(1); } /* end if */ Hendaccess(aid); if ((aid = Hstartwrite(file_id, wtag, wref, file_len)) == FAIL) { printf("Error from Hstartwrite() for JPEG image data\n"); exit(1); } /* end if */ while (file_len > MAX_FILE_BUF) { if (fread(file_buf, sizeof(uint8), MAX_FILE_BUF, jfif_file) != MAX_FILE_BUF) { printf("Error reading JFIF image data from %s\n", argv[1]); exit(1); } /* end if */ if (Hwrite(aid, MAX_FILE_BUF, file_buf) != (int32)(MAX_FILE_BUF)) { printf("Error writing JPEG image data to HDF file\n"); exit(1); } /* end if */ file_len -= MAX_FILE_BUF; } /* end while */ if (file_len > 0) { if (fread(file_buf, sizeof(uint8), (size_t)file_len, jfif_file) != (size_t)file_len) { printf("Error reading JFIF image data from %s\n", argv[1]); exit(1); } /* end if */ if (Hwrite(aid, file_len, file_buf) != (int32)(file_len)) { printf("Error writing last of JPEG image data to HDF file\n"); exit(1); } /* end if */ } /* end if */ Hendaccess(aid); /* done with JPEG data, create RIG */ if (DFJPEGaddrig(file_id, wref, ctag) == FAIL) { printf("Error writing JPEG RIG information\n"); exit(1); } /* end if */ Hclose(file_id); } /* end if */ else { printf("Error opening HDF file: %s\b", argv[2]); exit(1); } /* end else */ return (0); } /* end jpeg2hdf */ hdf4-hdf4.3.1/hdf/util/jpeg2hdf.out1000066400000000000000000000006771503061704500170620ustar00rootroot00000000000000jpeg.hdf: 24-bit JPEG Encoding : (tag 15) Ref no 2 0 bytes Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Compressed Image : (tag 303) Ref no 2 2922 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes hdf4-hdf4.3.1/hdf/util/paltohdf.c000066400000000000000000000056441503061704500165230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * paltohdf.c * Version: 1.0 date: August 1, 1989 * This utility converts a raw palette to hdf format * The incoming palette is assumed to have 768 bytes: * 256 red values, 256 greens, and 256 blues. * The palette in the HDF file will have the RGB values * interlaced: RGB RGB ... (This is standard HDF format.) * * by Mike Folk * first version of paltohdf: 8/01/89 * * This program is in the public domain */ #include #include "hdf.h" int main(int argc, char *argv[]); int palconv(char *palfile, char *outfile); int main(int argc, char *argv[]) { if (argc != 3) { printf("Usage:\n"); printf(" %s rawpalfile hdffile \n\n", argv[0]); printf("%s, version: 1.1 date: July 1, 1992\n\n", argv[0]); printf("\t This utility converts a raw palette to hdf format \n\n"); printf("\t The incoming palette is assumed to have 768 bytes:\n"); printf("\t 256 red values, 256 greens, and 256 blues.\n\n"); printf("\t The palette in the HDF file will have the RGB values\n"); printf("\t interlaced: RGB RGB ... (standard HDF format).\n\n"); exit(1); } palconv(argv[1], argv[2]); return (0); } /* * palconv(palfile, outfile) sets the palette */ int palconv(char *palfile, char *outfile) { unsigned char palspace[1024], reds[256], greens[256], blues[256], *p; FILE *fp; int j, ret; fp = fopen(palfile, "r"); if (fp == NULL) { printf(" Error opening palette file %s\n", palfile); exit(1); } fread(reds, 1, 256, fp); fread(greens, 1, 256, fp); fread(blues, 1, 256, fp); fclose(fp); p = palspace; for (j = 0; j < 256; j++) { *p++ = reds[j]; *p++ = greens[j]; *p++ = blues[j]; } ret = DFPaddpal(outfile, (void *)palspace); if (ret < 0) { printf(" Error: %d, in writing palette %s\n", ret, palfile); exit(1); } return (0); } hdf4-hdf4.3.1/hdf/util/r8tohdf.c000066400000000000000000000133331503061704500162720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * r8tohdf.c * Encoding of raster images in HDF files */ /* The intrepretation of arguments has changed a little. A -p introduces a palette which will be used for subsequent images, till another -p. -i and -c introduce a series of images/compressed images */ #include #include "hdf.h" int32 xdim, ydim; int main(int argc, char *argv[]); int palconv(char *palfile); int imconv(char *outfile, char *imfile, uint16 compress); int main(int argc, char *argv[]) { int is_pal = 0; int image = 1; char *outfile = NULL; uint16 compress = 0; if (argc < 5) { printf("%s, version: 1.1 date: July 1, 1992\n", argv[0]); printf(" This utility converts one or more raw raster-8 images to\n"); printf(" HDF RIS8 format and writes them to an HDF file.\n\n"); printf("Usage:\n"); printf(" %s xdim ydim outfile [-p palfile] ", argv[0]); printf("{[-r],[-c],[-i]} imagefile\n"); printf("\t\t\t\t... [-p palfile] {[-r],[-c],[-i]} imagefile ...\n"); printf(" -r: Store without compression (default)\n"); printf(" -c: Store using RLE compression\n"); printf(" -i: Store using IMCOMP compression\n\n"); printf("* r8tohdf can take any number of images and palettes\n"); printf("* Compression, palette, apply to all subsequent images.\n"); printf("* All images are assumed to be the same dimensions.\n\n"); exit(1); } xdim = atoi(argv[1]); ydim = atoi(argv[2]); if (xdim < 1 || ydim < 1) { printf("Must specify xdim and ydim\n"); exit(1); } outfile = argv[3]; for (int i = 4; i < argc; i++) { if (*argv[i] == '-') { switch (argv[i][1]) { case 'p': /* palette */ is_pal = 1; image = 0; break; case 'r': /* raster */ image = 1; compress = (uint16)0; break; case 'c': /* RLE */ image = 1; compress = DFTAG_RLE; break; case 'i': /* IMCOMP */ image = 1; compress = DFTAG_IMC; break; default: printf("Illegal option: %s, skipping....\n", argv[i]); break; } } else { /* file name */ if (image) { if (compress == DFTAG_IMC && is_pal == 0) { printf("Illegal options. If imcomp compression (-i) "); printf("chosen, you must supply a palette.\n"); printf("Program aborted.\n"); exit(1); } imconv(outfile, argv[i], compress); } else { palconv(argv[i]); image = 1; } } } return 0; } /* * palconv(file) sets the palette */ int palconv(char *palfile) { uint8 palspace[1024], reds[256], greens[256], blues[256]; uint8 *p = NULL; FILE *fp = NULL; int ret = FAIL; size_t fret = 0; fp = fopen(palfile, "rb"); if (fp == NULL) { printf(" Error opening palette file %s\n", palfile); exit(1); } fret = fread(reds, 1, 256, fp); if (fret != 256) { printf(" Error reading reds\n"); exit(1); } fret = fread(greens, 1, 256, fp); if (fret != 256) { printf(" Error reading greens\n"); exit(1); } fret = fread(blues, 1, 256, fp); if (fret != 256) { printf(" Error reading blues\n"); exit(1); } fclose(fp); p = palspace; for (int j = 0; j < 256; j++) { *p++ = reds[j]; *p++ = greens[j]; *p++ = blues[j]; } ret = DFR8setpalette(palspace); if (ret < 0) { printf(" Error: %d, in writing palette %s\n", ret, palfile); exit(1); } return 0; } int imconv(char *outfile, char *imfile, uint16 compress) { char *space = NULL; FILE *fp = NULL; size_t fret = 0; if ((fp = fopen(imfile, "rb")) == NULL) { printf("Error opening image file\n"); exit(1); } if ((space = (char *)calloc((size_t)(xdim * ydim), sizeof(char))) == NULL) { printf("Not enough memory to convert image\n"); exit(1); } fret = fread(space, sizeof(uint8), (size_t)(xdim * ydim), fp); if (fret != (size_t)(xdim * ydim)) { printf("Error reading image file\n"); fclose(fp); exit(1); } if (DFR8addimage(outfile, space, xdim, ydim, compress) < 0) { printf(" Error: %d, in writing image %s\n", HEvalue(1), outfile); exit(1); } free(space); fclose(fp); return 0; } hdf4-hdf4.3.1/hdf/util/ristosds.c000066400000000000000000000133301503061704500165630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* This program converts a series raster image hdf files into */ /* a single 3D sds hdf file. Each ris hdf file contains one */ /* or more raster images. All images should be of the same */ /* dimension sizes. And, if there is a palette associated to */ /* the images, the palette should be included in the first */ /* ris file. Any subsequent palettes will be ignored. */ /* Sept. 23, 1991 */ /* USAGE: ristosds infile{ infile} -o outfile */ #include #include "hdf.h" #define r_imgae 2; #define r_sds 3; #define USAGE "ristosds infile{ infile} -o outfile" int main(int, char *a[]); int cntimage(char *filename, int32 *p_w, int32 *p_h, int *n_images); void finishing(void); int main(int argc, char *argv[]) { int i, j; int nimg, nimg0; /* nimg, nimg0 -- number of images */ int32 w, h; /* w, h -- width and height of images */ int ret, n_infile, getoutfile, ispal; int32 dimsizes[3]; char *infile, *outfile, **argv_infile; uint8 *indata, *indata0, palette[768]; uint8 *outdata, *outdata0; if (argc < 4) { printf("Usage %s.\n", USAGE); finishing(); } /* initialization */ nimg = 0; w = h = 0; n_infile = 0; /* count number of input files */ getoutfile = 0; argv_infile = &argv[1]; /* save start address of input file names. */ /* Count total number of images to be converted. */ while (--argc > 1) { /* reach -o. go to get output file name */ infile = *++argv; if (infile[0] == '-') { getoutfile = 1; break; } else { n_infile++; ret = cntimage(infile, &w, &h, &nimg); if (ret != 0) finishing(); } } nimg0 = nimg; printf("Total number of images: %d.\n", nimg); /* get output file name */ argc--; if (getoutfile == 0 || argc < 1) { /* is -o or outfile missing? */ printf("Bad command line. \n\n\t\t %s\n", USAGE); finishing(); } outfile = *++argv; /* read in images from all input files. */ outdata0 = outdata = (uint8 *)malloc((size_t)(nimg * w * h) * (sizeof(uint8))); if (outdata0 == NULL) { printf("Not enough space. \n\n\n"); finishing(); } indata0 = indata = (uint8 *)malloc((size_t)(nimg * w * h) * sizeof(uint8)); if (indata0 == NULL) { printf("Not enough space. \n\n\n"); finishing(); } infile = *argv_infile; ret = DFR8getdims(infile, &w, &h, &ispal); if (ispal) { DFPgetpal(infile, (char *)palette); DFR8restart(); /* in case the palette is not at the */ /* beginning of the first input file */ DFPputpal(outfile, (char *)palette, 0, "a"); } while (nimg > 0) { indata = indata0; /* Restart from the beginning of the buf */ ret = DFR8getimage(infile, indata, w, h, palette); if (ret != 0) { /* end of file. open next one */ n_infile--; if (n_infile < 1) { printf("Inconsistent number of files and images\n"); finishing(); } infile = *++argv_infile; ret = DFR8getimage(infile, indata, w, h, palette); if (ret != 0) finishing(); } /* convert image data into floating point and store in the array */ for (i = 0; i < w; i++) for (j = 0; j < h; j++) *outdata++ = *indata++; nimg--; } dimsizes[0] = nimg0; dimsizes[1] = h; dimsizes[2] = w; if (DFSDsetNT(DFNT_UINT8) == FAIL) finishing(); ret = DFSDadddata(outfile, 3, dimsizes, (void *)outdata0); free(outdata0); free(indata0); if (ret != 0) finishing(); return (0); } void finishing(void) { printf("end of ristosds.\n"); exit(1); } /* count # of images */ int cntimage(char *filename, int32 *p_w, int32 *p_h, int *n_images) { int32 ret, width, height; int ispal, dimerror; dimerror = 0; ret = DFR8getdims(filename, &width, &height, &ispal); if (ret == FAIL) { HEprint(stderr, 0); finishing(); } if (*p_w == 0 && *p_h == 0) { /* the first time */ *p_w = width; *p_h = height; } while (ret == 0) { /* count # of images and check dims */ if ((width != *p_w) || (height != *p_h)) { printf("Inconsistent dims: %s .\n", filename); dimerror = -1; break; } *n_images = *n_images + 1; ret = DFR8getdims(filename, &width, &height, &ispal); } /* ready to return */ DFR8restart(); if (dimerror == -1) return (-1); else return (0); } hdf4-hdf4.3.1/hdf/util/ristosds.input1000066400000000000000000000002221503061704500175550ustar00rootroot00000000000000open storm.hdf prev tag = 702 info -long dump -length 20 -byte close open storm110.hdf prev tag = 302 info -long dump -length 20 -byte close quit hdf4-hdf4.3.1/hdf/util/ristosds.out1000066400000000000000000000010221503061704500172240ustar00rootroot00000000000000 (2) Scientific Data : (Tag 702) Ref: 2, Offset: 294, Length: 9747 (bytes) 0: 82 82 81 81 80 79 79 79 8: 78 78 78 78 78 78 78 78 16: 78 78 78 78 (2) Raster Image Data : (Tag 302) Ref: 110, Offset: 202, Length: 3249 (bytes) 0: 82 82 81 81 80 79 79 79 8: 78 78 78 78 78 78 78 78 16: 78 78 78 78 hdf4-hdf4.3.1/hdf/util/testfiles/000077500000000000000000000000001503061704500165475ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/util/testfiles/README000066400000000000000000000023511503061704500174300ustar00rootroot00000000000000This directory contains files that can be used for testing hdf. File types can be determined by their extensions: .hdf - HDF file. Could contain any number of different HDF objects .r24 - HDF file containing one or more 24-bit raster image sets .r8 - HDF file containing one or more 8-bit raster image sets, with color palettes possible also included .sd - HDF file containing one or more scientific data sets .pal - HDF file containing one or more color palettes .raw - non-HDF file containing binary data (image, float data, etc.) .txt - non-HDF file containing ascii data .Z - files compressed with Unix compress. Use uncompress to uncompress them. head.r24 - isosurface rendering of human head palette.raw - contains a raw palette storm110.raw - raw image of data from storm simulation storm120.raw - raw image of data from storm simulation storm130.raw - raw image of data from storm simulation storm140.raw - raw image of data from storm simulation storm110.hdf - hdf image of data from storm simulation storm120.hdf - hdf image of data from storm simulation storm130.hdf - hdf image of data from storm simulation storm140.hdf - hdf image of data from storm simulation hdf4-hdf4.3.1/hdf/util/testfiles/SunWheel.gif000066400000000000000000000344431503061704500210000ustar00rootroot00000000000000GIF89addôÿÿÿÖB)çZ1ÞR)÷„1ÿœBÿœ9ÿ¥B÷œ1ïŒÿ­9ÿ­1÷œÿÆcÿ­ÿ¥ÿïÎÿ½1ÿ½ÿÎ)ÿçŒÿÞBÿÖÿÖÿçcÿÞ!ÿï{ÿ÷µÿÿïÎ1Î1Î1!ÿ NETSCAPE2.0!þGifBuilder 0.5 by Yves Piguet!ù ÿ,ddþ ŽdižhŠn[Êœ*ÏtmËÜ…BuÿÀ Pâ+A$¡rÉMF‰Ò¬ª8T+ ’h‰v\Ú4ÆÜʨq¹œÉp TûHÌí"|,Ï67 v1mz{VoM T…‡ˆa1L<…†•Z’ Mu„…Œ M’nJžb¬U…AG³ ®mD¹6^%·”2¦³žsÇ3 Êx·Þ'ѳ ÔÍØ5Ð #©ÕaH ~#ŽÀ›ôaìíL=hÎ_1~0ì{e±BÆ„PÀ4Уxl ®³¸0A<‡þpᑾ@ñýÀh„Ø@AGA@úsFš=ÎiµÒÓ9`½(2˜ä‡†.•ÎÚP°'ƒŽE˜Yãèµ=€‰áѳPG/óèM©ÁAßMD/ÈÙ5̾1xNUÆ¡.ŵÌ‚ *í^l»>Å7£Æq(^,å`gÑ.ôÒtê¾ýý|ˆªä}E…fö7x“aœßRáÔ ‚ƒ Ò%‚ú¥ëO•=SCFLJ:|K².|EêÊÇ´E®ÛN5$4™_(!Fe ÛZkž@ìª1G_V°Ë)î¶¥;28_LC¥é`˜ ½þÎÓ*xïÛœ½}ƒ›íåž:>åâ€nþþýGOGã EOtcœôR‚ àÄ´¨HQŒŠÅד”ØsÒÔÁhm5Ã]2dx\zÝùcä¨cŽ ØÒB¬¸„%@Î .—]5 ãPFy@ްX c'—h)‚"V®ôTf8p€ ¤©fš0¥ŠuƒC‹$S—ÆÉž“P®©@~º™cœž|7C†R$J¨AS¢ùgBú(›ƒ:Ö2.ªŽ}F@€‘Fj*àd„^5g˜‹F`¦šŽ*0Á¬´šA¬oVx©/BjZ •¢9k´ÒJì·ª9%«:R>úê@ýjYl%–˜A±€šJí4#˜±žbRLPŽÕ×ç£ÄÊš=ÛÊŠliNiŸ@^ÎA(&™j4íiZ;A”@Äv;ey¶Í2ž ÿr. „å«?:ë5.øÃR §` ‹‚RTPAbîÃÀ˜›† 鬬J0,¾ äºRÍïÐP® `0gV°ÂØö´í½ù¢  n, w%WãfÂÇÎ+õÏN[í× Lಠr– “`Ó­AÆ]€ôШ[D%ÔECÛÄcÜD݆J¸Y°­¤PâýÚ E ÌgA¿&ÈÂàJ.þv@ŒÃ"ô·ô<à@´NA Œ|?h>‹r=u(±†×Sé³Úê-ÅÕ8»A²‡»ö(âÞU” z-½SO@À§§k´ PP‰>GÞ°u0õ Þ¦ÒgàþûðO=· =U˜#"Çf€ïõ×kÓ±&à²hË:Ñ=ØA íÌ·"€€| œà§ˆºå8 ®‹Mëò÷¹üÇM:‹Þ+ø ‚ úRP¢\! )ɧáß«þ„, `˜”Óbè«ç8ëÌêIŽÞµ& ít˜[!B‰$±'œ‚žŸ†h¦)§|þ‡*¢¦$¥2N©Äób=zãž0K à[ŒÁNµ#*¥Ñ‹ˆ@2Z;)€qa’ÀZà µÁH$øl§Ex €„ ŒCüà@„Ácgìà BÒ,Ú^>€á¼"FƒIÑûVƒëˆRJ™…·s»v=:{ðXV8CÆÉzKŽêF¨¿Ñ¸HÔ™åN0ÙíA&,Y‹^:bŸõt%(x‰3ÉP°0ø`š"j‹)J9•K6+y*F° »½ G–#Ê‚;ö™L4À¶lÌç™_mÑà<ŠØLÎu~àgj˜5Bv%49ÙG<ŽQîôŒ çý gHô`;µƒ™ÍaUP@š€TÊS¢ÇOgV73×8D¬ d *šqb‚¤õD„)¦ACâÂ/î´uΚJXd¢4È¡'Š‹-‡ * Ä*«à’©– …Á@7™%Ä2Û$CNÚˆ1+ù€¦o¹".4 ²Â¡APjÕÙqš+ Ê09D`€„Üc‘HÊ"@`‘ÇÑÃ4o(„å…‘ ê^(AÄ–sÝ‹]¬ ÑT ®{ã4¾Ñð ³Ø @bD ¸D+€ o–ºZ%dÀPÛ’ä™Úâ°xm t;•œÖ·íèÍaq± †±Èeí1z Ϊ9® hØ‚VAEÕî \1} • Ro+k©ZaEê¥5\÷~—ñemsÉ“ÇÞG̯ް+@ú/Š­x‡á¥ã xC’<ÁñÌ q©ÁÇ!ù ÿ,ddþ Ždiž$‡’Û¶¾p,Ï4ШðÕ|ïÏ Ü«"ùÆÇ¶I4ƒI5A$”瑘òWu\¢H*Z.ºw “ß#Ê¥Û&ÞØFryÂár}0 …b3{sK(…N4W‚‹of–C’4–‡˜U•–$„ž3 –ŠLy¥+|°X&’w³%§œ0½´&°· K»¼1ǰÁ+Å3È¢ Í Ä#¶–ŸCtÖƒâÙs\»ä/Ø¢/„ ç2¯êÈ»1÷·¤%ôù©#¾ eá@ÝÀUÔcŸ³‚êÌÅa‡gb¿ŠÙ$H{Qqý0D”´f  (l÷ÂßÁ94åsÀ®@*ˆÜ‰ æ h7/ð{wP_·-áp`VèAU1tâsTóæÓŽ¥(ô|€¡†‚¤¨Hzmæ¦Ø†ž &¡d¾’²-{Žª¤o2„JjÒ˜]K «.¬·RÒ„À Ð^Ð`‚Ú¿?‹aè…>ÉKG¼•|‡²KMØb5ÁE²»“ƒÑ¶uy`†f#FFkN“äÂo(˜WÒCv¦Ð@Âá˜D®^eÆ s,ÓGKÞží8™êBÐàü·wϹgœ>šsűe—‡T DXiÉ[Úy碋*úåž[¥Y‚†ã J¦"`£Œ@€ øX@œê„†I¡ eÙe¢ L 묥F«˜¨"3k&E¤[ÊÁ¬³;­]ih6³°ëG79P@—ýw›Á†f@쎉êØ0UgG ¥Škêhë±x*0d®c9ô÷Àcdhµ‰«ŠÊÚ%ÐÁ°ÜÊ[ƒ&>µËbdä•*ÀÕNðrÙ$ðÂvgbOMp)40A”°ÈË墲>'°ñâÚ`ŸwL™°z“¼ÂU|-ZÚÂËå¼êI bþHÁ³2@P#Za®l,»@ÃÌó©¶ÙC’Tàõ’*ø{RÏ cRÅÆ[€ÞÜÃ'5Ÿz*–=ÁÏãäm‰Ú6 $Û„=1¦4ïb¥´Â|72 ŽÂ«°··\'¢K8lxƒˆ;:þ,Þs¦'s%ÅHc•ÖÇ›Õa%‰nô¡²ñ7¸Tx2Ây=ẅOWæX ‹øâ@Zbƒ”Ò9"¹ˆq}*F¦Ù–M:H$<±…aÞDà’Ù]Î äœ ÁñMLã+°í$POª‹]Œ6=±¨ ôÑGGD€IHsޤðË‚Œ©KSLÈ˼™k‡Q8€:6èÂe…à—èã -èb䲆X q™‹ˆ`‹¹& 8pNIPó›‘DR¸Ð,h€4¸„ÆrOZäó/^Q‚…xSP&4&ý[DjÚq ­žSý|[s !¢”¢O(ƒE3™y¢†˜@ éƒƒ6ã `ñÑMÌ.¸—'Gé,i²Ô¦‘àèÒFPÊ9@³MY$A²)—HQ4IÍolZ5x:”djJ&Œ´ŒÝyÆænªž@,İ OOðÐ;†«øÌSn™]` Ž[1ë 0ÐË[Ä” ^ó¡TZ u€…IOÀªˆçâX«^12‡?&§/€á:ÙDHP*D:Eà›¯Nö(sà,VòWhdö´¾he.ûWb.¶$˜Ï_§Á…ݾ⵸候 K‚äDÔ©™Ä-$v+žÄ@pÊM_YWÝè–"(0‚uiAFÕÒ !ù ÿ,ddþ ŽdižhÙ4ië¾p,Ç;ßx®‹%nßnH,Š8Ÿ¦fl:g”%rqF@€SNi@*aÀ0¹¡DÖóƒ0 È"” LàçŸjFÀgŒ}Eˆª0P™'Nå€ÞFÀ\¤Š~Fð矖N (‹òD#)PA4°ã\>ÍðpÄ5ä@,yiíµ—Á¥AZ)£)Õ`sÑbfE@'^å°¤w{ø¥¥}f@Ë­}j*¤…ýÿÀ9g´Z-^E8òÚ«¬(ëàMXšëd^FD°£)y†¥ŸtÓ×Tªë{ßÄ;Ýd⎛!œÒ®Hè{ä AÅÀafJ+G·&Ì.ÃåÐ@x0ì§³W*Ù„lªwc/óz¡Ç~ø¦B`€zɱŽzý±<±³¸cÁ­TN8³u ø¸:W2@æXP©¦ìîÚ["D˜z´ž¹Zº³[{8íg j¶;]FX 0…  9ë³O@À˜OíÀZ7@ À©X@—79¿(€Ú.øà¤M€  Fö ¼q‘¼®Òé‰ €G ŠHööÛ/f:þ›ÿ=m)K[Æ.P è\>À@”D ¸™ J€ÀèŽû˜£K½p±;Sç ´žeu•Àh¯æ¸ëþïdNK-05æf,‘yBëËOdŠÏkzûPåd$ÿsäñĸYcp{oo‹B Én.º!C €ü6D¿J€ m?bŸ…€” ¥ G¸8ˆ(;Â8`Ê Ü í~-ØÀ@L@@ I) 7°&]ˆƒÞXP1Š@Æ%¡pSx,à€Êel6@¡lpÐ8äp ȘJ!B$‚«‡¶¸&‘žà©x€,X‘þI’Dʶ¨¼|Ña„ƒ®ó½Òéë:AÒÉ–ÌCÜÈ&3•£ø¸AÂQ¡ƒó*že~“ÄkviUžˆƒƒé¥6x_xPw…›½D atRȆâ6AhPz8R<טLŒÞØÅ£*Ø7u7”lÂlÂHU+¥Ä…aöV»DÀ0? r€1ZÚòŽ(Ê ( ÄJT'ÐÊD £K^Z"å¬B7˜ ^YÑІ¼³LöãdÄ š¤Œyg yN ô ˜¢FÌ-ãS„0²v”Š6ÖRþSÅÑ=É",L(OK‘ÁÃÔ;•0š®HBõ¡Ï ,dmÙÚÄE¥Nåi‚‘úo'}>Á€¼Š`L]0&<’¥)€Ù˘Å.ƒ8ŒIuàRø$ †;5A&°$à3°g%p‘ƨv¥èè¡:z\PÓ«/(f:š ´Â@;N` JcÓ“q­_ÖêVX”^@¨k_w°1ím XlàDb)Vêc×9“e„!ù ÿ,ddþ Ždižhj>š*rn,Ït=6är˜íÿÀD"‘]‚Ȥ­q)Æ$¥tz’4euKâDkÎI<¸hÆ¢³i.pŠKcN£+Y›~Ѫf0v[ ‚2Vpc( fmƒS 4Šp(ˆ’R—1|M~%¤Ÿ¡¢'‘.މ©ª$€ N°B«d•_*™|-x¾Á* ¯)Å Ñ.{¹MØÏ=Ò×Ã*àr*LÝMÏÏÇã&M³œà›*CëìíÚAÖ?LŒRÔòÊE²\༣Aƒ§þl„‘§C»èRPÈçÙ­"ˆ90‰" åýHôzÖB…ƒ©Š“A䢒IÔ-Š@¡çÑ©Ì Êp&Á׈S à =áxA*M©rÑIuƒO;ˆòQ8ãA®”[Äæó”`a‰—Tgªˆ€PÓ®© ½¡öJ ¸©ön™ˆ7«R}›Dq÷¦@*„ ÃáWUÜÅ"¸.J¡AÜ$›’/8¡y\7ŸÐ 3 ++—Ú4j < z¦r…-Ó -œ]¼3C‚ËGy†J”ÓDîjF‡Òù nˆÊ€ãݰ=8Lp×bf%'À`±]úìÉÃÞôWèJQíSú c0Ù¡ññÕ3»æžóþ¨ ‚lACžµu%.¸4ÒÀ¸EPAPà Z @(¦ˆ¢X˜ ¸E“Cù}Œ&TЕ¤xÀ@€¢®…‡H~s48ްG'p€ Tie• $V J!8Ÿ8=åöÝÀQ?^©@¸©%Š öÆÅvKþBD€BRù&œ€ú'–t†¦Õ”¸gá‰mF@€jo*Ðc’A!É@ÝY”Vú©À¤–ji¢n‰\“TüÖ©…C¾I%©”Zj­ j¥}i %.^à@VÂikR˜­pÊeS‡7ý.¶ùg­£fÐͲ£æ§B®ÁƒTDÚ°TiìOÔÚ,¸P;Y>IqØpÁ~šîŸ¤~À»@«³¹4øK¬ÆÀ€lÀðì઻n¯´~«jÂM@n "=uq7঻.²]-ëm•á®ÃŸg"lPqø69D‘j©1©Ú¶Üqʘ®UÀ¶§2D8ð%JsD©¾0P`>=þLj‹TÝúm žÉqy‰ÄöJQD¨5Ëp¤÷žË úcØ'¯uhes’6Ý ;w*‰´æJï³}7]A„§ÄD ÛA†7[þ+ÝM,n*¤–ÖÛ·*%¼D.@*@é±Ûº<Ò{ºª+š©È¥¯g üðÄOà:¨~|±Ò@ QR'í´g‰ëP¼Çðœ`\˜WxôpN*€ðAéŸÿ(÷[8Þ|‰iùïôç§ÿAûzs°h( Ý/WÀ €A¥ìò{†F‹uÅ€ÿºÒ·¾E¯p-aRAž–„é†Q­sӥđž˜ì)ør[ž#. Þツ¤ Étk9†Í|ŠfÔèÈ i¡ØkA¸”ІôÄn„‡‚ØÔÖ4|å® þÏñEóa˜16™ÊX“#¥`Œ÷°ùEÝD€*Ð¥/1Be"§œHÐŒ¯Ò!É‚À‚«’F2P"|æe='0á;añM~Ê@ y±'j@#;Ù_A_Ø™Ž÷¦›ñú< îjЋvÃ*ÈØÖvNxöS N“È#¨‚QDEžì 2ÑR@ £D¨3KÐ µ€TuDå[N²…ŠQÀ¤5s£‘b…–XóÔæ ‚úª„ ³AN­Ìnj DE,¡…;îK©ô@D9 ÚP—8Ô¬# ƒ/&ƒÚ¨­xë WÈU#0!:eЊ†5‹°hOVÅ÷·t¢¯5hÍn¸í®]ÍcM`¿Ø€Ž@,\)`Òè0hXfP†É¶S\]-–!1¨V¶H˜€kIäYÜJg·#°Bl}ëƒÃtb°Ä…Gv*Š!ù ÿ,ddþ ŽdižhªZ[y´j,Ït]W)vïÿ@‘&ÃA‚ȤR˜¨’ÈrJ­QäB©zIÝo%‘ØJ`_oî+!_.NúûW7äÇ[2§‡©n{G}S|Td oph…JˆIyŽ ‘A"fvH‹de™qœ@ZPoRHc¦ ™o›ª@z¯„>³´µ½¸=Á{ Ä3ÇÀÈ™kÅ=[¨)²ÎµÉÒ> »ÞˆË#WÎdÖÂè4ÚiÔÞä·$—ëXô<>T)Ço¤!úNÑæÃU Üó§™¾vÞ@ÙXôîK)Œ±€]A6ýÆ TUJâÄaxJ¾„÷‹R¡³@ò“  ä3r PР† 8p8:!ßJUMN|“OAz Ö=ØZ•L¼>]¥N•9Öç,'$6PX«¡M$øÖM¥ju®YS‰ hp€Ž„VF%‰éìêÂu¦¶¹›ƒÃŒQ:"!ÜÍnå©aõEà@$Ã4”éôÖ5ñÜÌÎ0ph@Z°—г “6%›_ÉŽ8Z(®ÖÓûæ:Z\XµˆäÞ~Á©O¸shÅuЃ ¶©çØ}>®S‚r*B)ˆ{u–iìSËãÅùÂ>Í»T›œ…ûŠÕI7úÍÓ*¡Ç `àþ*`?]u±}ôÝ ’_zcàá‡h@!áK’™@_‰ÁczS` À8Þh€!*£0=ˆÁ9i¹òc&z˜£ì#iK8f˜x¢”„h#“MvÙ%—:Fùãv6‰¥Œ4À$xé¥0©‡üHÔg'8n©À€:g~ö˜!™>¬Ö_Œ"2i# h¤Šcˆ‹îT! `ðWHÏ9PŽMJšÁ}÷e i“aúˆÝxB[IPQjEéJréŸx£êŸ•:"vY9" D•@BÁDý¢ªÉ% `[‘²ª@ˆ» [‹'pP`€®f=à@ ˆs^&ðyíüäHi«ÀéçZ  ³¨=KÏ·7v h¦è{£¡!© ¬?äy—)óö£d©œ:•ª[ç|¯3‡lŒ ’Ö‚ìÈîàáÉŽ$¬ZHPã²K6Lé N4©“àÍÏM(¡ñ] `T Ð€ŠLÕÕoX ê—*]‹Îú8ÐâÀÌ‚] =ÕRr&ÐŽVj²«_ç±Õ]¸uT°, -éG-Ÿ¬Fjµ_ŽÀ è snr(•+رU@¶ #܇ Äiþª°$O@›&S«M§ÄiÕÀå2hÁˆsSï(€çÔnûítN¡‡A<4àÀðMV€¹ééMš;Œ>úŽC;àüìÆ°ëUo“|Ypëße¢WíMÂ)€ðAéŸÏfõtc)9K˜ù1w~~ú´ß¦±Ç:*ÄÖ³ëñÃ@1«0€Lߺ™b¸‡QiZ’œ6h²m‚Þ¸S ´ ¥Hƒ Ñ@¸‡wU Õ@W8Îä‚è†zÜ™æG$ iÀ]=0 s@'‰H‡;ÜÔ*+[™‹†7¼ëEñ9PÆ À'„—(ƒþ³!#®7?.c'›@à86Á°œíYD^)¹_\æL”SR"1-zt!së¢s('Â9 ñ8 K}²ŸB¨)û áu3þÀ‰Þˆ¤\œÓå]@ k†çÉ òe3€õcIÊ Y`L £ðTQH¢™!¦. ‘Јú“ƒPÒºyL±2pТÞpÀ-†WN$ɨKA‡$äŸ#B¦&О<´6Í™VDZ‚ñe4-ø!ŽªŠ fB+ Þý#ÎTƒ©.E&k¡V¾’LÓ©4`º¯Yõí¡HX™œ8TáÚÔ\OPTÐF­(à)÷*ƒ>¾¢<-­„€JØÂZã ÍÐ+ ²ÙX+XC Çh¤€Îʪ  YD4”Ѐxv}„F;˜ÁžÖ¬I…ªQ…»¾ÄèÌk‹…xX€ª»õÁ”£–݆!ù ÿ,ddþ Ždiž%„Ž×¶¾p,Ï4°Q0öpuïÿ3îÅI8€È$ò1|IåF¥¬® ’æÊ‘Ø!žu\¢H1nóÃ>ÈpRã"‰=]ŸYBÃ#tZ'w].4 h~q€G+xxQ3‰|Œœ‹'“ 3Xœušps¦ž$„xo2œŠ(†¨5ª¦ }O¡§0f´‚#ǹ0—´«T¡°2‰¦Ê¸Ë3ÕÎt Òx1ÎY'ѾÛ1ŽÞ¦âkiÞ•­yì4Íï´¯xÚ(Ý8Åá*9|4Üí£3éÁ:úhe¡P=„1J-„wïE1o 8PˆÐPŒŸ ý0PxX.à¾;ÃV˜{'´ ¨8lÈpçA…0l¤ÕqÅ.oÒnÛ & +\ÒLÀRÓY/CÂ×4Á“‡rJ  @˜ ƒ9»ŒC׉0¤z“°•Px†Â‚š«`C¾rÄ^ð2âî$z³aM[7Š"\Z ã“t“Øe‰ 5†%¶lÍ&úùóøÞ¡—fÄဌ®x ¡ˆœ6·…Ÿjj0pÅè <u¦XqXÅÆô#Ñ.R«;Ðr´÷áÖÎt3ÂR}% €_%b}Ïè‚;-SU½úƒêñ½9èž??\T õ—–€´þ&¨à\U]A Dà@˜" (h)Äe'Á¬œÀ[†ïX @,¶È¢&Þ…rUW!¨•€ÈzùY`@‹)ä,ð™ W88}@àÀBÛ!¡zø)¸b`(àå—^`‘ÒIñt±Ý‰ì‘÷ øc`*pfc²8UšÒÔXâX‘xy案ÚA˜z¾£ZlŸ}È^ðí³"`¢ˆ@€ üX@ZÊ%§œt9Z—lûDÀå—…z9Á¬´†A¬ ‰¢1+¤Jƒa],T¤…έ´;Á­_ÉãPÿ‘€ý€¢¥__ž‰lr˜²w†Ší®]Tðà-œ…DPét*z¬dðηô.»h®£føè$Ž¡'¼ªè¬°P.‘S.˜¦b¨D̉«ªì ,üÆ2Zf‚:p‘ÀJ¨ž3¹j¬lk»¯®$7´`V®¼Q®k[oŒC}«¯—D&øÔ ø œë©ñ¬öŠ%ôAöÛŸJ'ÁAÏþøô¬@o”ì¾Ðßdl »Ú™û,'+~Í-?ÑbÁ·‡òlvp4X:¤ù6Áû5'ÐÆ.ËïÈ4UÎ5.x‚÷¼è±s›²þx­›Šk±)N6Ðå5HÉg° ©À§ÛÞ+ôhʯ£  ÞœMVP„ýd·˜ÀžÁñÈ'?ÁëÜJó9¹é.ƒPÀàÖ.Èå‹Ö^»˜ÊNà€÷ÅÏ\€\ Îníš9÷· €ðAõϯ©ùC? µ¹ÜBÆ”1PÉ~öËߦfV´ôC}©Ø-XT@‡Éo€¢ˆV5ÁØd/šØ>Fô˜ê3, ˜öµ/~ lCù 4 ÿ]ÎRÛ‹W„Ä%½€d¨á* žW(ç'ÀÐ;@¤!9‘H]zâ7pm„¾€À-’V)êGTþ.*’¦pX©FPš‡b¸QgŒ\ÀJÀ:¾iG#4M ÞÇ8R  Î}\¢=ꨈœËÏC DÈtÞÖØG8î mÛ¢P!e‘ódpò@ÉàHÀY²ÎpÄ#BB‰Ò‰€…DÈúT1 c\H“`)<4áMX¢É d¢¡¢•þ€@|&Q—V<M¡˜‘ °FDd#ÄÉ56àæ(¨MÖzÀŸw|Ð ÛÜÇ$ˆyjJ£™…XA1`f1ðË$$95@ „#X3e º’ÄszqÊ?ʉJÐÀr]¸¥4Š<¡ýa“7\Yƒ Là„6„¡KÀ”0‰r$€‰þà8¬{‡5êŒjjMmüü•Ÿ´Cò$‹ÙÝ$à{Î…r¥Ô´'„lg;‚0¡ \hNux»‚0 ¯‘Ç4%KÜ,õˆ@Áo›» s bœÔ•‚ 8Ê*„!ù ÿ,ddþ Ždiž¨é4ië¾p,—Æ•DÍ|ïÿɆ4þŽÈd “ЈrF¥t:s$0ÊE7½Q¿)J"±i\.,% nÓcÉY"ÝXÜø<ñ˜ï’tyxqg[^Gƒ„†‡H|) C=… r‡‰<œ'‹ ¡™1c}ž[=b¤$E±ª<c|¯~3{$ r¹º3£½¿si/{W" ÀÊ3½Î‘•VÜCÄÙ3ܾÎ[Ð$Ó½Œ‡\é1ôcîs0€ÐÀ7,< Úc»vîìU0ÈQOðÀPèƒb€[40{xðÞ+'xý&áE’HÜ&¸èéž ~hh Ñ+žœnà{•Q£„o<’t¨/æ¡Ë#'B²J2Øòš ™Ùcµ ÒnÑ€çVgŒà³Q¹|Ž:À÷X_ ðŒ —d…9|^uC0H…-oÑšˆ®O›J8pØÀ™ó±’}²{[˜´Æ1'YsaÚƒCC;cÐËñ/ƒ˜À:S-…C8v d»£\²?{¨ês#mÙ¤Ý=tÀ!Âó|fÁ.¼»'­×Ã6Ú>ºˆ÷ШWßýÁÚAY[í8þ¼ýC½dGañ‹~Z e÷øÊOùþQJ-°ÁÃ&±aŒ}X`¡Ðö6”°ÁDHñ0 Iúšd(PÀŠ,®¨€ç!¸”DàÀ0G@Sh@ÀâDyÀŠÔ÷ P-‚„8L>¦b À•X^i€G^š†LÆ´ L„Yœ3B™¥5®É劒&"ÁR˜îi%›5öÙ'ŸZ œL>PÁ˜?ÈèÖ/*ªøé§°©€ ×ÕzyE  vs¾•Xî©À¨¦zi¦vy V=nf³2Ò¢ž ɦ•¨Fjª¾NÀ*–GF¥èû‘€V4AøWEý äu[T€e¿f`¡…üÚæ¥ÚþÒJ²Oó_ ÚÂ{ §&Ÿ¾žšÁ/áž*lW WQˆMø_öÄ0 ’žd{À•ÜNÐÒuàë¸Gþ¨´¥ÅH|A»oa üʨ ó‰ê9“Àô¨—îü¥¤ à °w ”Ü'ªá¶o¿åbøÎÉ—ó {ûX¸?çœ)†l°Èhêì½K÷Ê/‘Oõw($ÃÁN#HÀò«¢†¨ †*’ªÒg¸Â”áþI$Ûì*,÷XŸ1@æXЫ°Nã´1X'´àmúJ÷‰«)¹ þ…,+÷X‘ TÚ-¾LO@¤N߇L nFºK Z³_÷–˜žÁïÀØê¬ºêÝQŸ×Æ7à¼ÔºCåü®¾ú–e;`}ïjëÝR·ÐØu€¼Á­=¡0õ¬ €ðAñ¿i÷A{]zNÅ³Û Á<µ‘ ` 8à^Zr¦CpIg¥{_ü>P¿HuÏ_æêÕ ”H€PšSúΰ" Ë}€u4 f0L~ÛDD¨A”°dYR›ÚœV€³ý‚ƒKAìvÔÉ4Štkj!•^"Â:õ L4l…lp$#YñHQL±#ÿñ -þQ”bw€©!I‹¿øF <"ìäÐ@ÆfÈÀY YÍ¢6Àôõ‰0¡NPEýCh^»J|ÆàÅÿX@ˆ|Ô=¢ƒHÏqd‘ÔA­`g£”UÒk˜ñc¸ORˆf#€b=<è=¦‡’p9^ÔdA¶A è,_A›]*§D\d‡§6à.YH&j#áljã:tY¯¬P‡¤PÅb'̘s© 4ÂB! MÀX¯AR h|]ØqÌX(ªÇKÞªy™j(ê˜"Hf9íÃ[ºc*~” RØè˜¿¨‡ygŸŠ–?`²>ÐP%;€–qÞ.Z8ýÐ@'ÔéÝÌA˜T¦'ÐQͤ@ê±g> a/jz äÆÚ6»‚ý" ?åÆB|€ 7$÷XЧnÀRoT7 y²Óüô§ =P.üÑÈ´šÀ¯Se‰P€|C©Cµk°#ÆŽ“«‰*RÌ´~•£?9,JŸã„’ºM°>=FˆT×xT}"˜Æe1«#ä½ ÿëœ  8Z»Äy„|Íè#ž°R³ˆäN:ƒ¾Îá+pè'n[ð9Äf«ebêp3ÐX$g«0X‡L† ƒO!¡ý\‡r©‹\Ì Íån.R3ŠwPçyq:Ýõ¦#êÅC!ù ÿ,ddþ Ždižhjn¥¾p,ÏtÉIdj\íÿ@Yã"9a4Á¤2‘\Æâr ë)‡OãƒÊMm2® “xš$6Ýt‰õ@û(ãœI’«ïG¢âÃ^.v" {w†ƒ :3[$f ‡†„m3c #‰”–@k„ŠV0œ:y¨•£> *z„P1¬·„²?‹)¨ À0޾„HÁ5¹Fƪ)~Ë ÆnÐ3ž(ÆÇ0Ú˨‘ß3èâ&åì)Mé¿í4öð$ÍŠŒlÝû“j  \[¢ìI u^ÀHäS pºÍ£~ÂQºÊfÖõ¬›Ý8„P¶¿£J®…²å“JàfL4\\»ÛÉcžGyùíCR`˜ §þý& ƧÒY@@ ÁiÑI0A€‡©dtèa‡ Xà WAh€P&B d ãŒthæQÁwÑQbB§=à@ Ø‘Í#p€ 4éd“PãVÎ6ÕãŸ|lÐÐ#0Êø¤D0¦”Æ'—ò bh»ÔÈ$™eÖY'P¦Ùœ.1IlÙq(f`§@¦0 `g\œ„ã@(éäœ L é¦ŒF€é”`AÊÅ‘ÚH&“šF°é¦ªNà©“5ŽÆ§%d6âàd™«fÀ ƒ¬ZfžTÎ$jc“ª$&ªfšA:Áfꪙý Ô8ÓF}Òð@uûÚ­¸ZJ§¦0P¨:lµ|yA5Ø&ô‚›N¥4Éë$pî¤Jl\ÑÈ„­ö¦S­¾ûÊš*µ jCßH0f²j„sÕæ»¯¯B;m“Ö¦3±–Ù¾€ÑKo‘4Þ@R2¬é³!?ܱ£÷t§HÊ1X¶Z,̬ Œ6k*¢J¬R[€êEwPFô:P¤Ž<s‡Iƒ É×Xì2BmJho9“ ø†Ê.¹æ;î8ÿ1@œXª«ì›0VDq±ÁAGÖ§ª^Ñ7§†2ÚîàÆùE Ų́€¢½B+þòÊ.åŽ[8M\ô"×Q Ày°Ç.û›àiÄ ?`JŽi£äf†z”­Nà€ð®C\@²Æ»Ä·÷Ô ¼§ @|ÐöÖª¼à#²}îR$¥ÝÁ[ýÜ qÉàê¡û7d×!ú®V?ÀàÙ1ü·:ÙÜ–ðÁå~v{µ¨Å®,-|+š¬À‹Áz¿”æÆô?%ëMÆñkz¤ dh'°ÇˆP#¹°F“K *â2X%0 Mж%a+lÔ‡lT¾eø¢+ Z§Ð»[YÀPÌhŒŒö`P¤ûM5,ˆL¤&‹þ*{‚ABðçXQ3è1 4#*'#„˜g–r P eDEÔÊt€ñdUßÓ‘Yñ;iÔ†1¬t‡ª8hðc:Öx!¨ŽðËÜFñ‰@’X!S40´Õð‡>Rœ¢UF!…TàÇ"UÏÖsɨ´Æè8Aù²rYJÅHÀ Ec °1»+/—q27ðAbù†ci‚eâÓÀ!ÍB@5¸ 2J3,§ÍdÉaGR?9š‰esM :91Ô2Ý@æØç%á3Òè& F³•¹‘9çì¤(dÂ`› 5O0žu@qË ðø0B“Å ²t¬,• ]Zƒ"v¢è)é>CÎö  7ÆñA›a ̽Ӧ'Ð@&¥rGÜ`†+ÀP_°Ó8Ted£\ÂR›Ve¨ðç ÊXSÌo©á!3ú²¬‰Ъ>j“ Œ¡V«\ƒZÛq‹0`.«xLÉBÖÙžbÐaO¥‰À*rŒñ®³"ì7AÎ8(¶'1ÅÈúؘNHieÛxY'Pv³i¸ ª Z\Ö³´ÐˆjC;hdf4-hdf4.3.1/hdf/util/testfiles/bttrfly.gif000066400000000000000000000306171503061704500207330ustar00rootroot00000000000000GIF89a22w!ÿ NETSCAPE2.0!ùÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðÆzˆ @Â9'†$)Ò$Á•$«°,9ÐãA› gÊdé2çÌlׂ’쉳æ@˜€ é2f¶" ð4J¥Ï™"±\ÃBRàH^²Õ@h§AÑügU Íj q*« €® ×¼ÐéU$© ;¯i“ '´ÖZµ2±ÜIJgÕvßXéj› ²“ghMÚô·0§Ä&P®‹µ¯]]dxÉKÃó § —´9§±iƒNƒ½öE$ìØ3jÚ0îN¸+ŠÄœØùéÓÌ• DJw¤áï‡þÌ•NzpðÐE;óÈ­"™G}<ÉÄ×=s"„-,¬Mw”rùÇ süáÝißv`f=m§ÜmT¨ß hýáGZòVa…·AxKò¡öÝ  ¦p×Ie˜—Ä]g æÇIx->¶£~ß±×RBH•X ƒƒ¨Õ£\9ÞHÄ]‰…|€Š"ýÑI*ªxÞmÙE©—]sÎ9kœy‹ ª™Æ9ã £â•CE¤Ç0Àœ3Ì8\€Ñg25HÕ"7$S…Ÿ\Ä©'0b6À0\ÃÅr™ùàCfRq)09Ò0%°ôØgXŠ£m,•0L{ŽŽäcuš§ùçñé÷\¬]=„iT”–zéHì Ù)CX¦›r™Öš®®‚fâs3›ÞY åê«s™ˆ˜T+­dÞ\ÑQ+ §$Éç¬Tã¹çž¶…ÑÈj«É¶+/yî™kî±ã>tczþ™4ÝJþ¥×k£ ÝÈ’[6!û.DYPà ۉÁüÑÅg¬ñÆwìñÇ ‡,òÈ$—lòÉ(?!ùÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðÆ‚î  †»‚s¦$¸‡I;äÀ™)'á½/m¼üpïŸÇƒá‰)ÆË8pd&E¸ã%j×¼…©Ï§Á>ÿðÅ™Å7/Nõ$¥yäZCˆ•àœ~M Qm*™JË`AŠÛ5\0¼±°”"Å>ÿV ôh‡„ '…°xÃЋ›µ, P»ÔàÈ/ÞJ%HÀMš0²/±À”î,"ñ©l¾ÀÀfÍè]šk=;­æm €Ÿ\‰âßÏ?÷4AáJÓÈZ_nVZS8.^Zþx©fÃÑ'G>‰(„ÃÀ:8‰x…¢É§)X¬éÌÅ+Šf¼3é%Œ$ç#ޏ`Ä=#Ýs š4¡DrI ¨HÉtP\t%G¸ò‰&Ÿ"‚!àÓ Ž<`'(@Þ|8’JuÒH4Ü’%F¸ðI'0&X!IZ2"‘"0â0ü2ÒH…ÐMr…¨I'Dº2ÅHü1R\Â(£SZ‰PHY@ŽtBÉ „©À ”xI@"¸àÒK1·N# ⊠.¹Pç¤0 J2@’ŽDg íáTˆ#ŽÈÉ'Ž<ªÀ#C’È¥z;ÕÁCþý1e#Ÿ #Œ”@˜B‰­Dré„KàQew é3IvRÄ›o‚)&Ð`%T‡ E÷HsŽè°3@˜°3.;Ì@­K?8Ñ>{œÎ1ÍPFo|ÈëÅpÁâ Ó 0i~ôÁ)jtñ'´ƒBàF]ÜP¥EîLÀF$¥@¢+.àCSDˆh‰$‰ Æul,Ñ ‹Ì Ɇ¸B Ë'@‚&®(‘D­–(0ÒdIÄáH.E;ÒS+õÔG'Ѳ$U@r!S=RR¤çÒJtÃH.0H!pŠ@òK)ŸH$FVµŽáÀ¯š˜àR0r"rŒXB†ÑÈÝÁEÄ&ˆ,À‰B€>#qîÈ.}ÞH3È;‘#ýí‚& h²8ƒ0(D$|W€Â“è óDz¼ä‚4?#ís¶ð…<@bihQ??X(O¹ó-IÍGn‘²rÅÐÓ@÷t ×LxkT/AÐH0öÈ~$ÿüô×oÿýøç¯ÿþü÷ïÿÿ  h‘€!ùÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðF„rˆ°£ßÀ9Q ”c$ypbʉ g&œ„òŒ¤1ò>ÿÈ£ 2O‘7äÄ‘YSf–#­u+%òÇ¿>ÿ蛀€/o_F˜I–éM„"iøº0r¤º@Oîi+K)šê™°klÜ@}1ÕÄH øT üSF‰AG e‰åÍ yË–í{¡Ú4£Þ²HáT¢IŽ*çðóÄE'#¨ª°Ñ-l^½zû¶­¦­&M%P¨ó³ØO‰ vdæ¦6åôeÁkR¦ |rAÈ’@ëþÔâI“NVnÙ¸  f³›ÑÒ€¢“+š\Lq'R)Ž$áŠ& Ì÷Ü^g Þè¤É'œtâ‚ð€:"$Ä'ö¿Œ$Gt{%4¶Dà%"XÒ‰}¶…®DȈ Œ|èEWÐÑdN:µõ`'vü@E¾x]I1E¢B!µE á "$I!Ÿ8’¥ ´¥R$Ƈ>#!ò S$—¥$xB @rŸ®!Ò$îeRBú@%Òƒœ@ø ‹IŠ0I'žéŠ!GŠ$%‚ƒ&N!Pi‘œ B@’(á‹""Ò sÄ‘&þz8G›®‘å‘£ö!VR¸’Ä‘ÔÑcSX9T¨XÓL3ìL¤ì,#N3DDF 3¹#‘<Ä(ãÌ2TTñ HúÀ nPÁÅ2Ïs‡2é£Q k´¡HGéÃ#YC]Ü0¬÷L WŒDD‡øà† x‚H\ƒfMÉ#"!#%ŸAÒÃ42"à'Iˆ´ƒMziÇóáûƒT:ß» Ì"m'®"©€máÜ£:?³ DP*Å9í!I$àˆ “„ÛLól „4±R3$!…" Á Z/]ÒÁ#R´!Ü#’”"8‰øX¤ÏóÅ—G<ôCYrË«‘Ýti;’m} ¬ÜpÔ‘©F¢û^>ü­”^{|¤ýöÜwïý÷à‡/þøä—oþù觯þú!ùÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðF‡ò¸!áœ?Ô9(ŽK9.á”|(€ÜÄ'òfŒ~zb”I´(Äjdk1£_Á: ²m@`¨Õ—DaÎtH J œøìwìY‹^% –_[D ñAPˆ)¾fÑÂNß´€·6œ ÊF-VK®¬ü7Ï CµlЪ‚u¨Z¬mؘfŠ=ýP4ÄËTkS¿„ˆT†ú! )Œ¶TY¥ÍU­—ádÆéh "38í0ŠÉÎ+g…øA–>)ÁS F®ˆþ`±6zQ¶Ш1(‘+HDppï舋þþ–.üa°š|b ü#Ÿ¸’NÜU…€ `Éž I8Àæ¥Q?„‰@‚˜€Œq?ð§Zé0avŸHÁâ œtòÉŒU©¦ZDîàÈ'BºÀâv¢É8„˜Lñd€#(Á}Èçˆ å ™÷H¤#ÅœsF5ˆ³ÌTÉadex8%?y “F]DÌÀ]“>ýƒÏ0ÈçÚhÐÅúa•–<Ác)¼bÄ>Ð !4€é•çÁä‘Eßz`‰‘¸@ª‘8ÂI åµ Ø«ý'>ì ’|åݨ°ź€.¤„SŽÄWf¦ª1Ñö1RN(‘„(කʡ-Dz˜PˆR €$‘#½îܺ%©D!&”Ó: ˜`D7ô•¨eCñë>ÔKDÉ5AD—5þ¥¨Kœj¤¥à“<(˜P@™Ò- GÇQZàýP– kš£JHËà”°.õÑè@ý A5PÇ™rè4ôÓPG-õÔTWmõÕXg­õÖ\wíõ×!ù ÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðF‰sþü XGN‡ùôÀ‘Çâ9ð Ô—À‡GƒõàÀ‰£s¥Ï•c`‘'– SþdÉRgS0¬(/‹‚ê–jeÚÒ¢ Qå¾Ue`Nž>›rý©Ñ†1Ä*«”«Z§Z5Rˆ÷Ÿ˜,ÔŹ‹WkZQ´\x%T< Û-,G#„‡8ä"Ú»kCë z(33S8LNK™µÆ8J¦àDÊÏ­%÷|½BÊŸ?MŽÈ­´FuŒøùs¤€¹£³Ô(OÈŠß&Ž€i½µ0P‹óVþ8úÝèÈÖ†AûÔˆo £?} !ê‰[w^‹ú\Xø­ÀE}¼¢-¥Q?¤ñ› Wœa™ÃEØ@LO«-(Ç=å; ÃZ r7F`áƒBÀPaz” h!?ì Ev·bWuÀ;‹†±V™EýÀ€Âl(ˆ@ê©õQ IÌF d'dk.1[(Èd‹$Z1Û4Ìá}„}†–XA…^N6¤EpÔ =Ìàewé}¤Ç ¿õPÆ?ë„h¨rÔóÑ7ôƒ„F×; OWuÜTמjé¡O¥ †*ꨤ–jꩨ¦ªêª¬¶êê«°²!ù ÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðF‡ò¸!áœ?Ô9(ŽK9.á”|(€ÜÄ'òfŒ~zb”I´(Äjdk1£_Á: ²m@`¨Õ—DaÎtH J œøìwìY‹^% –_[D ñAPˆ)¾fÑÂNß´€·6œ ÊF-VK®¬ü7Ï CµlЪ‚u¨Z¬mؘfŠ=ýP4ÄËTkS¿„ˆT†ú! )Œ¶TY¥ÍU­—ádÆéh "38í0ŠÉÎ+g…øA–>)ÁS F®ˆþ`±6zQ¶Ш1(‘+HDppï舋þþ–.üa°š|b ü#Ÿ¸’NÜU…€ `Éž I8Àæ¥Q?„‰@‚˜€Œq?ð§Zé0avŸHÁâ œtòÉŒU©¦ZDîàÈ'BºÀâv¢É8„˜Lñd€#(Á}Èçˆ å ™÷H¤#ÅœsF5ˆ³ÌTÉadex8%?y “F]DÌÀ]“>ýƒÏ0ÈçÚhÐÅúa•–<Ác)¼bÄ>Ð !4€é•çÁä‘Eßz`‰‘¸@ª‘8ÂI åµ Ø«ý'>ì ’|åݨ°ź€.¤„SŽÄWf¦ª1Ñö1RN(‘„(කʡ-Dz˜PˆR €$‘#½îܺ%©D!&”Ó: ˜`D7ô•¨eCñë>ÔKDÉ5AD—5þ¥¨Kœj¤¥à“<(˜P@™Ò- GÇQZàýP– kš£JHËà”°.õÑè@ý A5PÇ™rè4ôÓPG-õÔTWmõÕXg­õÖ\wíõ×!ù ÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðF„rˆ°£ßÀ9Q ”c$ypbʉ g&œ„òŒ¤1ò>ÿÈ£ 2O‘7äÄ‘YSf–#­u+%òÇ¿>ÿ蛀€/o_F˜I–éM„"iøº0r¤º@Oîi+K)šê™°klÜ@}1ÕÄH øT üSF‰AG e‰åÍ yË–í{¡Ú4£Þ²HáT¢IŽ*çðóÄE'#¨ª°Ñ-l^½zû¶­¦­&M%P¨ó³ØO‰ vdæ¦6åôeÁkR¦ |rAÈ’@ëþÔâI“NVnÙ¸  f³›ÑÒ€¢“+š\Lq'R)Ž$áŠ& Ì÷Ü^g Þè¤É'œtâ‚ð€:"$Ä'ö¿Œ$Gt{%4¶Dà%"XÒ‰}¶…®DȈ Œ|èEWÐÑdN:µõ`'vü@E¾x]I1E¢B!µE á "$I!Ÿ8’¥ ´¥R$Ƈ>#!ò S$—¥$xB @rŸ®!Ò$îeRBú@%Òƒœ@ø ‹IŠ0I'žéŠ!GŠ$%‚ƒ&N!Pi‘œ B@’(á‹""Ò sÄ‘&þz8G›®‘å‘£ö!VR¸’Ä‘ÔÑcSX9T¨XÓL3ìL¤ì,#N3DDF 3¹#‘<Ä(ãÌ2TTñ HúÀ nPÁÅ2Ïs‡2é£Q k´¡HGéÃ#YC]Ü0¬÷L WŒDD‡øà† x‚H\ƒfMÉ#"!#%ŸAÒÃ42"à'Iˆ´ƒMziÇóáûƒT:ß» Ì"m'®"©€máÜ£:?³ DP*Å9í!I$àˆ “„ÛLól „4±R3$!…" Á Z/]ÒÁ#R´!Ü#’”"8‰øX¤ÏóÅ—G<ôCYrË«‘Ýti;’m} ¬ÜpÔ‘©F¢û^>ü­”^{|¤ýöÜwïý÷à‡/þøä—oþù觯þú!ù ÿ,22‡!% ) !% !&# !!!!!))!)1!!!)!)))))1119?FJ!R!F" Z%c!c)51F;c)Z< ;2"111)19;;=F9H?+PP'OJB=FLJRVRRJRRRRZZZJJZRRZZZk)o-s1{-k1k9u3 {9„6{9„BŒ1Œ9Ž<”=œBhLk`˜BšRcP3cc1nK'ƒV3hm+vo)ˆyƒ1ok@„mGˆŒ5–”9cZR{cR„cRscZccckccœkJskZhme„„R”{J”{Rœ{JœˆR”Zœœckkkksssss{ss{{s{{{{{„„{k„{{’…u„„„ŒˆŒ””””””œœœœœ¥B­BµJ¥B¥J­F­R§Z#µJµR½J½R½RÆR ÆZÐZ ÖZÖcÞZÞcÞcçcçcïcïcïkïk÷k÷k÷sÿkÿs¥œ­sµŒ)­ 5­¥Bµ­B­µJ­ŒRµµ9µµBµµJ½µÆsÆ„)ÿ{ÿ„ÎÆÖÎƽ1ÈÀAƽJÊÆJÎÆRÎÎRÞÖçÚ ÿïÿ÷ÿÿîê9ÖÎRàÚN­ŒZ¥”Z­”Z­”c¥”s¥œc¥¥cÆ¥kÆ­kµµsƵsƽ{ιwÎÆ{Ö½{ÖÆ{ÎÎZÖ΄Þ΄ÞÞRçÞRçÞZççZïçZïïZ÷ïZ÷ïcÿ÷Zÿ÷cÿÿcÿÿkÿÿsÞÖ„çÖ„ÞÖŒçÞŒïÞŒ­œ”µ­”÷ï”÷÷œÿ÷œ¥¥¥­¥¥ÿÿ¥¥¥­­­­µ­­µµµ½½µ½½½½½Æ½ÆÆÆÆÆÆÎÎÎÎÎÖÖÖÞÞÞççççïïïïï÷÷÷÷÷ÿÿÿÿþÿ H° Áƒ*\Ȱ¡Ã‡#J\`"ÄŠ-FĈðÆ‚î  †»‚s¦$¸‡I;äÀ™)'á½/m¼üpïŸÇƒá‰)ÆË8pd&E¸ã%j×¼…©Ï§Á>ÿðÅ™Å7/Nõ$¥yäZCˆ•àœ~M Qm*™JË`AŠÛ5\0¼±°”"Å>ÿV ôh‡„ '…°xÃЋ›µ, P»ÔàÈ/ÞJ%HÀMš0²/±À”î,"ñ©l¾ÀÀfÍè]šk=;­æm €Ÿ\‰âßÏ?÷4AáJÓÈZ_nVZS8.^Zþx©fÃÑ'G>‰(„ÃÀ:8‰x…¢É§)X¬éÌÅ+Šf¼3é%Œ$ç#ޏ`Ä=#Ýs š4¡DrI ¨HÉtP\t%G¸ò‰&Ÿ"‚!àÓ Ž<`'(@Þ|8’JuÒH4Ü’%F¸ðI'0&X!IZ2"‘"0â0ü2ÒH…ÐMr…¨I'Dº2ÅHü1R\Â(£SZ‰PHY@ŽtBÉ „©À ”xI@"¸àÒK1·N# ⊠.¹Pç¤0 J2@’ŽDg íáTˆ#ŽÈÉ'Ž<ªÀ#C’È¥z;ÕÁCþý1e#Ÿ #Œ”@˜B‰­Dré„KàQew é3IvRÄ›o‚)&Ð`%T‡ E÷HsŽè°3@˜°3.;Ì@­K?8Ñ>{œÎ1ÍPFo|ÈëÅpÁâ Ó 0i~ôÁ)jtñ'´ƒBàF]ÜP¥EîLÀF$¥@¢+.àCSDˆh‰$‰ Æul,Ñ ‹Ì Ɇ¸B Ë'@‚&®(‘D­–(0ÒdIÄáH.E;ÒS+õÔG'Ѳ$U@r!S=RR¤çÒJtÃH.0H!pŠ@òK)ŸH$FVµŽáÀ¯š˜àR0r"rŒXB†ÑÈÝÁEÄ&ˆ,À‰B€>#qîÈ.}ÞH3È;‘#ýí‚& h²8ƒ0(D$|W€Â“è óDz¼ä‚4?#ís¶ð…<@bihQ??X(O¹ó-IÍGn‘²rÅÐÓ@÷t ×LxkT/AÐH0öÈ~$ÿüô×oÿýøç¯ÿþü÷ïÿÿ  h‘€;hdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/000077500000000000000000000000001503061704500177205ustar00rootroot00000000000000hdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h100x100000066400000000000000000001201361503061704500207270ustar00rootroot00000000000000k¾Êœ@j ½¿$"àF¼ Nÿþÿþÿþÿþÿþÿþÿþÿþÿþ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@àAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@APAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`BdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxB|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†BˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜BšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨BªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªB¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸BºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºB¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾BÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈ ddjjj?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”B–B˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆ?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”B–B˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆBȾ½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h100x100h000066400000000000000000001201361503061704500210770ustar00rootroot00000000000000k¾Êœ@j ½¿$"àF¼ Nÿþÿþÿþÿþÿþÿþÿþÿþÿþ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@àAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@APAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`BdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxB|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†BˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜BšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨BªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªB¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸BºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºB¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾BÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈ ddjjj?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”B–B˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆDzDz@DzÀD{€D|€D}ÀD@D€€D€D‚ DƒàD…@D†ÀDˆ`DŠ DŒDŽD D’`D”ÀD—@D™àDœ DŸ€D¢€D¥ D¨àD¬@D¯ÀD³`D· D»D¿Dà DÇ`DËÀDÐ@DÔàDÙ DÞ€Dã€Dè DíàDó@DøÀDþ`EEEE E0E`E EðEPEÀE"@E%ÐE)pE- E0àE4°E8E<€E@€EDEH°ELàEQ EUpEYÐE^@EbÀEgPEkðEp Eu`Ez0EE‚E„€E‡E‰˜EŒ0EŽÐE‘xE”(E–àE™ EœhEŸ8E¢E¤ðE§ØEªÈE­ÀE°ÀE³ÈE¶ØE¹ðBȾ½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h100x100hv000066400000000000000000001201361503061704500212650ustar00rootroot00000000000000k¾Êœ@j ½¿$"àF¼ Nÿþÿþÿþÿþÿþÿþÿþÿþÿþ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@àAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@APAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B\B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`BdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxB|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B|B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B€B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B‚B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B„B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†B†BˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBˆBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŠBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBŒBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B’B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B”B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B–B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜B˜BšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBšBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBœBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžBžB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¤B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¦B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨B¨BªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªBªB¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B¬B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B®B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B°B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B²B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B´B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸B¸BºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºBºB¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¼B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾B¾BÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÀBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÂBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÄBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÆBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈBÈ ddjjjDzDz@DzÀD{€D|€D}ÀD@D€€D€D‚ DƒàD…@D†ÀDˆ`DŠ DŒDŽD D’`D”ÀD—@D™àDœ DŸ€D¢€D¥ D¨àD¬@D¯ÀD³`D· D»D¿Dà DÇ`DËÀDÐ@DÔàDÙ DÞ€Dã€Dè DíàDó@DøÀDþ`EEEE E0E`E EðEPEÀE"@E%ÐE)pE- E0àE4°E8E<€E@€EDEH°ELàEQ EUpEYÐE^@EbÀEgPEkðEp Eu`Ez0EE‚E„€E‡E‰˜EŒ0EŽÐE‘xE”(E–àE™ EœhEŸ8E¢E¤ðE§ØEªÈE­ÀE°ÀE³ÈE¶ØE¹ðDzDz@DzÀD{€D|€D}ÀD@D€€D€D‚ DƒàD…@D†ÀDˆ`DŠ DŒDŽD D’`D”ÀD—@D™àDœ DŸ€D¢€D¥ D¨àD¬@D¯ÀD³`D· D»D¿Dà DÇ`DËÀDÐ@DÔàDÙ DÞ€Dã€Dè DíàDó@DøÀDþ`EEEE E0E`E EðEPEÀE"@E%ÐE)pE- E0àE4°E8E<€E@€EDEH°ELàEQ EUpEYÐE^@EbÀEgPEkðEp Eu`Ez0EE‚E„€E‡E‰˜EŒ0EŽÐE‘xE”(E–àE™ EœhEŸ8E¢E¤ðE§ØEªÈE­ÀE°ÀE³ÈE¶ØE¹ðBȾ½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h60x75000066400000000000000000000445521503061704500206160ustar00rootroot00000000000000k¾ÊFPjG½G¿G4ÃIR¼IZÿþÿþÿþÿþÿþÿþÿþÿþÿþ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@ÀAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`BdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBp <Kjjj?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBl?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”Bp¾½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h60x75n000066400000000000000000000356201503061704500207700ustar00rootroot00000000000000k¾Ê:˜j;b½;fÃ;|¼;„ ÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@à@àAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@APAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A˜A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAÈAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBH 2KjjjBH¾½Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/h60x75v000066400000000000000000000445521503061704500210040ustar00rootroot00000000000000k¾ÊFPjG½G¿G4ÃIR¼IZÿþ ÿþ ÿþ ÿþ ÿþ ÿþ ÿþ ÿþ ÿþ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@€@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@À@ÀAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A@A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`ApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApApA€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€A€AˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAˆAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A¨A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A°A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸A¸AÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÀAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAàAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAèAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðAðBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B$B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B(B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B<B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`B`BdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBhBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBlBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBp <KjjjDzDz@DzÀD{€D|€D}ÀD@D€€D€D‚ DƒàD…@D†ÀDˆ`DŠ DŒDŽD D’`D”ÀD—@D™àDœ DŸ€D¢€D¥ D¨àD¬@D¯ÀD³`D· D»D¿Dà DÇ`DËÀDÐ@DÔàDÙ DÞ€Dã€Dè DíàDó@DøÀDþ`EEEE E0E`E EðEPEÀE"@E%ÐE)pE- ?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”Bp¾½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/pal.hdf000066400000000000000000000017121503061704500211600ustar00rootroot00000000000000kÉÊ`(`(`(`(`(`(`(`(`(`(`(`(`(`(ÿ|ÿxþsÿoþjÿfþaÿ]þXÿTþOÿKþFÿBþ=ÿ9þ4ÿ0þ+ÿ'þ"ÿþÿþÿ þÿþÿþ ÿþÿþÿ!þ&ÿ*þ/ÿ3þ8ÿ<þAÿEþJÿNþSÿWþ\ÿ`þeÿiþnÿrþwÿzþ€ÿƒþ‰ÿŒþ’ÿ•þ›ÿžþ¤ÿ§þ­ÿ°þ¶ÿ¹þ¿ÿÂþÈÿËþÑÿÔþÚÿÝþãÿæþìÿðþõÿùþþÿþúÿ÷þñÿîþèÿåþßÿÜþÖÿÓþÍÿÊþÄÿÁþ»ÿ¸þ²ÿ¯þ©ÿ¦þ ÿþ—ÿ”þŽÿ‹þ…ÿ‚þ}ÿyþtÿpþkÿgþbÿ^þYÿUþPÿLþGÿCþ>ÿ:þ5ÿ1þ,ÿ(þ#ÿþÿþÿ þÿþÿ þÿþÿþ ÿ%þ)ÿ.þ2ÿ7þ;ÿ@þDÿIþMÿRþVÿ[þ_ÿdþhÿmþqÿvþ{ÿ~þ„ÿ‡þÿþ–ÿ™þŸÿ¢þ¨ÿ«þ±ÿ´þºÿ½þÃÿÆþÌÿÏþÕÿØþÞÿáþçÿêþðÿóþùÿüþÿüþ÷ÿóþîÿêþåÿáþÜÿØþÓÿÏþÊÿÆþÁÿ½þ¸ÿ´þ¯ÿ«þ¦ÿ¢þÿ™þ”ÿþ‹ÿ‡þƒÿ~þzÿuþqÿlþhÿcþ_ÿZþVÿQþMÿHþDÿ?þ;ÿ6þ2ÿ-þ)ÿ$þ ÿþÿþÿ ÿhdf4-hdf4.3.1/hdf/util/testfiles/fp2hdf/t100x100000066400000000000000000002145241503061704500207500ustar00rootroot00000000000000TEXT 1 100 100 100.000000 0.000000 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 11.000000 12.000000 13.000000 14.000000 15.000000 16.000000 17.000000 18.000000 19.000000 20.000000 21.000000 22.000000 23.000000 24.000000 25.000000 26.000000 27.000000 28.000000 29.000000 30.000000 31.000000 32.000000 33.000000 34.000000 35.000000 36.000000 37.000000 38.000000 39.000000 40.000000 41.000000 42.000000 43.000000 44.000000 45.000000 46.000000 47.000000 48.000000 49.000000 50.000000 51.000000 52.000000 53.000000 54.000000 55.000000 56.000000 57.000000 58.000000 59.000000 60.000000 61.000000 62.000000 63.000000 64.000000 65.000000 66.000000 67.000000 68.000000 69.000000 70.000000 71.000000 72.000000 73.000000 74.000000 75.000000 76.000000 77.000000 78.000000 79.000000 80.000000 81.000000 82.000000 83.000000 84.000000 85.000000 86.000000 87.000000 88.000000 89.000000 90.000000 91.000000 92.000000 93.000000 94.000000 95.000000 96.000000 97.000000 98.000000 99.000000 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 11.000000 12.000000 13.000000 14.000000 15.000000 16.000000 17.000000 18.000000 19.000000 20.000000 21.000000 22.000000 23.000000 24.000000 25.000000 26.000000 27.000000 28.000000 29.000000 30.000000 31.000000 32.000000 33.000000 34.000000 35.000000 36.000000 37.000000 38.000000 39.000000 40.000000 41.000000 42.000000 43.000000 44.000000 45.000000 46.000000 47.000000 48.000000 49.000000 50.000000 51.000000 52.000000 53.000000 54.000000 55.000000 56.000000 57.000000 58.000000 59.000000 60.000000 61.000000 62.000000 63.000000 64.000000 65.000000 66.000000 67.000000 68.000000 69.000000 70.000000 71.000000 72.000000 73.000000 74.000000 75.000000 76.000000 77.000000 78.000000 79.000000 80.000000 81.000000 82.000000 83.000000 84.000000 85.000000 86.000000 87.000000 88.000000 89.000000 90.000000 91.000000 92.000000 93.000000 94.000000 95.000000 96.000000 97.000000 98.000000 99.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 6.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 12.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 17.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 18.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 19.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 22.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 23.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 24.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 25.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 26.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 27.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 28.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 29.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 30.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 32.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 33.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 34.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 35.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 36.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 39.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 40.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 42.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 43.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 44.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 45.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 46.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 47.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 48.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 49.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 50.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 52.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 54.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 55.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 56.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 57.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 58.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 59.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 60.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 62.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 63.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 64.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 65.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 66.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 67.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 68.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 69.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 70.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 73.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 74.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 75.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 76.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 77.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 78.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 79.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 80.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 82.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 83.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 84.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 85.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 86.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 87.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 88.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 89.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 90.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 92.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 93.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 94.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 95.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 96.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 97.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 98.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 99.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 0.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 hdf4-hdf4.3.1/hdf/util/testfiles/head.r24000066400000000000000000007717221503061704500200210ustar00rootroot00000000000000k.Êòèjó²,ó¶2óÊAAAGGG---888333DDDHHHHHHHHHDDD333???AAABBBEEE===...::::::999444777@@@@@@@@@@@@@@@EEE@@@@@@DDD<<<===888777CCC,,,999:::444FFFHHHCCCddd;;;BBB@@@BBBBBB<<<;;;;;;JJJJJJ;;;111***666888777???555;;;555BBBKKKBBB@@@???BBBKKKKKKTTTPPPQQQPPPJJJJJJOOOOOOCCCCCCJJJLLLLLLMMMKKK:::???444555444???111???222:::===KKKHHHIIIBBBFFFCCCSSSPPPRRRMMMQQQQQQOOOIII:::[[[[[[VVVVVVEEEPPPPPPGGGGGGAAA777999@@@888BBB???777<<>>444777BBBOOOPPPJJJJJJSSSRRRRRRQQQYYYXXXXXXXXXXXXVVV@@@BBBBBB>>>HHHCCCMMMEEEKKK<<<,,,BBBEEE@@@???222???CCCFFFHHHBBB///DDDDDD888:::@@@???QQQTTTTTTYYYYYYQQQQQQZZZZZZYYYYYYXXX???PPPNNNNNNEEEEEECCCCCCUUUKKK555666===999<<>>>>>@@@;;;GGGGGGPPP]]]???>>>///III@@@>>>AAANNNGGGIIIRRRRRRPPPOOOJJJJJJRRRRRRQQQQQQTTTSSSOOOOOOOOO===UUUEEEJJJKKKKKKKKK666IIIDDDGGG999<<<444DDDCCC777;;;======BBBBBBFFF666JJJDDDAAA@@@IIIMMMKKKOOOVVVOOORRRRRRLLLLLLLLLLLLYYYTTTTTTQQQQQQJJJIIIKKKQQQTTTRRRRRRLLLOOOBBBBBBEEELLLLLLAAAJJJ;;;;;;AAACCC<<<===DDD===555888DDD777>>>>>>CCCDDD@@@DDDFFFNNNPPPMMMPPPVVVVVVXXXdddffffffQQQXXXYYYWWWWWWUUUUUURRRRRRRRRTTTTTTTTTWWWVVVVVVTTTJJJIIIGGGFFFBBBCCCLLLPPPKKK444GGGKKKAAAFFF@@@:::BBBCCCFFFBBBNNNNNN>>>MMMMMMAAAAAAPPPKKKEEEBBBWWWQQQ\\\IIIIII]]]RRRRRRUUUWWWXXXXXXRRRRRR``````YYYYYYXXXUUUUUUUUUWWWWWWVVVVVVOOOOOOOOOOOOHHHOOOOOOAAAHHHKKKFFF;;;CCCDDD???===EEE??????EEE444IIIJJJGGGGGGCCCLLLKKKPPPGGGHHHQQQQQQXXXFFFFFFRRRRRRNNNNNN^^^aaa``````JJJJJJUUUXXXWWWWWWFFFSSSRRR[[[ZZZZZZ^^^^^^^^^WWWLLLLLLRRRRRRVVVQQQCCCHHHGGGEEEEEEDDD;;;;;;EEE>>>???FFF>>>EEECCCIIIEEE777FFFFFFDDD>>>LLLRRRRRR777TTTTTTCCCLLLOOONNNWWWZZZ___aaaaaaYYYYYY___]]]VVVVVVVVVSSSSSSSSSUUUZZZXXXVVVVVVVVVPPPPPPaaa]]][[[[[[YYYJJJIIIAAAEEEDDDAAAEEEHHHGGG???EEEBBB<<>>@@@IIIKKKBBBGGGUUUOOOOOOTTT@@@LLLCCCBBBHHH???___[[[WWWhhhSSSSSSTTTbbbccc[[[[[[______TTTUUUYYYYYY^^^\\\\\\SSSSSS```]]]^^^WWWVVVLLLMMMYYYYYYSSSdddMMMOOOUUUMMMIIILLLCCCGGGOOO@@@???<<>>???FFF???@@@>>>IIIIIIFFFHHHGGGFFFBBBEEEOOOFFFFFFOOODDDLLLaaaaaa[[[[[[eeebbbbbb^^^^^^______[[[[[[\\\\\\^^^______^^^cccdddbbbaaaOOOPPP]]]ZZZSSSZZZ^^^VVVXXXZZZddddddNNNNNNEEE>>>???PPPCCCGGGEEEBBBHHHJJJEEEGGGEEEBBBIIIDDDLLLLLLKKKHHHSSSSSSJJJFFFIIIQQQQQQ^^^kkk______KKKZZZ[[[bbbbbbYYYYYY___bbb```VVVVVV]]]]]]``````_______________^^^^^^^^^]]]YYYUUUUUU\\\\\\^^^]]]```______\\\HHHfffLLL\\\HHHEEEOOOOOOLLLFFFBBBBBBIIIIIIKKKDDDDDD===HHHLLLFFFHHHGGGLLLNNNQQQPPPLLLJJJRRRSSSSSSQQQaaakkkdddGGGFFFUUUXXX___ccccccUUU\\\aaahhhggg___aaa^^^^^^^^^ffffff\\\\\\______cccbbbbbbbbbccccccddddddccc[[[\\\UUUWWWWWWUUUOOOMMMWWWYYYZZZVVVKKKKKKDDDDDD<<>>>>>:::’’’’’’««««««ÃÃË‹‹„„„„„„~~~~~~WWWWWWZZZZZZddd¦¦¦®®®vvv³³³ŸŸŸšššYYYpppyyy°°°mmm¸¸¸¸¸¸mmmƒƒƒggglll]]]eeebbbcccfffZZZccckkk^^^YYY[[[XXX\\\UUUXXXbbbYYY^^^ccc^^^eeeaaaaaaXXXfffcccaaa___aaapppnnn™™™```»»»nnn{{{}}}‚‚‚õõõÎÎÎmmmuuupppggg¯¯¯¯¯¯–––©©©©©©©©©```rrr}}}rrr———˜˜˜£££ÃÃÃcccvvvbbb```yyyiiiÅÅňˆˆ\\\rrreeeXXX|||¦¦¦[[[ccciiiiiivvvYYYtttxxx{{{LLLWWWaaa­­­ÜÜÜ{{{ìììÃÃÃÉÉÉÁÁÁ–––£££££££££¥¥¥´´´´´´ÿÿÿÿÿÿÞÞÞƒƒƒ^^^\\\ccc^^^eeeÜÜÜeeeyyykkkzzznnnnnnpppppp```BBBVVV^^^nnn«««¼¼¼±±±©©©«««ŽŽŽ’’’§§§«««­­­‹‹‹„„„~~~WWWWWW[[[ŒŒŒŒŒŒžžž©©©‰‰‰³³³ŸŸŸššš???YYYyyy˜˜˜°°°¸¸¸¢¢¢¸¸¸mmmsssbbbaaahhhggg___cccfffZZZcccccc^^^YYY[[[XXX\\\WWWUUU^^^XXXTTTZZZVVV^^^kkk___\\\XXXªªªdddrrraaaaaapppppp™™™™™™°°°»»»{{{{{{RRRjjjƒƒƒ‚‚‚ÎÎÎÎÎÎ{{{{{{{{{¯¯¯¯¯¯¯¯¯ËËËrrr………˜˜˜ŒŒŒbbbrrrUUUKKKKKKccc¥¥¥¥¥¥¥¥¥ƒƒƒƒƒƒiiiSSS”””TTT€€€€€€ZZZRRRbbbcccgggggguuuuuu€€€^^^ÿÿÿÿÿÿÿÿÿaaaccc   |||ÕÕÕÿÿÿÿÿÿÿÿÿæææ¶¶¶¶¶¶¡¡¡¡¡¡¨¨¨¨¨¨´´´´´´———ÿÿÿçç熆†ªªª’’’ccckkk˜˜˜tttvvv```jjj}}}{{{aaa\\\\\\bbbkkk………………˜˜˜‘‘‘““““““yyyyyyyyyyyyqqqqqqssssssyyyyyy………………gggggg¦¦¦¦¦¦™™™™™™cccQQQzzzzzz€€€QQQ­­­˜˜˜••••••iiiiii¢¢¢iiisssgggaaa___hhhgggddd___ddd^^^eee©©©\\\XXX[[[ZZZ\\\XXXWWW^^^\\\]]]WWW[[[\\\kkk```\\\ggguuucccgggpppbbb‰‰‰]]]|||tttƒƒƒ†††€€€ñññ©©©©©©===>>>QQQNNN¢¢¢õõõ~~~lllaaa¦¦¦œœœwwwvvvZZZŠŠŠŠŠŠ©©©©©©™™™®®®µµµººº¤¤¤¢¢¢RRR”””PPP€€€€€€ZZZOOObbbQQQggg```uuuyyy€€€[[[ÿÿÿËËËaaaccc      ÕÕÕÕÕÕÿÿÿÿÿÿææææææ¶¶¶§§§¡¡¡«««¨¨¨ÍÍͧ§§——————¥¥¥‚‚‚nnnkkkiii___kkk˜˜˜tttvvvbbbjjj}}}}}}aaaaaa\\\```kkkkkkfff………˜˜˜“““žžž¾¾¾yyyyyypppqqqqqqnnnssssssyyyyyy………gggWWWWWW¦¦¦¥¥¥™™™ÂÂÂccc[[[QQQQQQ©©©ÖÖÖ©©©ooorrriii‚‚‚xxxŽŽŽyyyiiidddzzz___OOOXXXaaaeee^^^ddd©©©\\\XXX]]]ZZZ\\\XXXWWW\\\]]]bbb[[[```\\\iii```WWWgggeeefffgggpppdddoooeee^^^wwwƒƒƒƒƒƒ|||†††ªªªªªª§§§§§§¨¨¨¨¨¨………TTTõõõõõõ~~~~~~¦¦¦¦¦¦œœœœœœvvvvvvYYYYYYžžž™™™™™™ºººººº¤¤¤¤¤¤©©©ggg‘‘‘‘‘‘``````ZZZƒƒƒ``````nnnQQQüüüüüüÜÜÜjjj•••eee………………      ´´´´´´ÿÿÿÿÿÿ®®®®®®®®®ššššššœœœœœœÓÓÓÿÿÿÿÿÿ¹¹¹¡¡¡|||nnnnnniii```kkkiii}}}ÆÆÆ‡‡‡„„„ttttttYYY___–––oooppppppmmmDDDDDD||||||ÌÌ̾¾¾000000RRRRRRYYYVVVssssss~~~~~~``````UUU]]]aaaaaaÎÎÎÎÎÎ[[[[[[¡¡¡³³³ÖÖÖ___rrrrrr‚‚‚XXXŽŽŽŽŽŽiiiiiieeezzz^^^YYYgggbbbdddcccddd©©©\\\bbb\\\\\\YYY\\\TTT[[[\\\bbb[[[```ZZZ______^^^bbbddd```___eeesss‚‚‚ÀÀÀxxx„„„gggaaaÍÍÍ£££UUURRRƒƒƒŸŸŸ©©©ÆÆÆaaa{{{|||ÚÚÚ™™™‘‘‘mmmlllƒƒƒƒƒƒŠŠŠŸŸŸˆˆˆ„„„lllrrr………‹‹‹ôôôÄÄÄ«««¤¤¤ˆˆˆ‚‚‚†††©©©ZZZƒƒƒ‹‹‹ZZZnnnnnn^^^üüüÿÿÿggg]]]eee………jjj   lll´´´ÿÿÿÿÿÿrrr®®®®®®®®®”””šššœœœÉÉÉÓÓÓÿÿÿÿÿÿ‡‡‡kkkmmmfffiiicccmmmiiihhhkkk‡‡‡„„„tttkkkYYY ^^^ßßߟŸŸ······þþþðððÅÅňˆˆ||||||ÌÌÌ«««|||TTTNNNpppppp‚‚‚~~~~~~ WWWWWWWWWWWWuuuuuutttÎÎÎïïïäääšššhhh]]]___qqq“““¼¼¼XXX–––rrreeehhhbbbhhh]]]bbb‰‰‰uuuccccccdddÿÿÿYYYccc\\\[[[XXX\\\ZZZaaa\\\\\\XXXYYY^^^___```^^^bbbccc```aaaeeeeeevvvvvvÀÀÀÀÀÀ„„„„„„aaaÍÍÍ££££££‡‡‡RRRƒƒƒƒƒƒÆÆÆ¢¢¢{{{{{{||||||‘‘‘TTTUUU^^^yyyyyyfffjjjçç矟Ÿ„„„„„„rrrrrrôôôôôôÄÄÄÄÄĤ¤¤¤¤¤‚‚‚‚‚‚llldddwwwwwwVVVeee```aaayyyeee______iiifffssshhhÀÀÀÀÀÀppp···¾¾¾‰‰‰‰‰‰ŠŠŠŠŠŠ¦¦¦¦¦¦‹‹‹‹‹‹³³³³³³„„„gggmmmfffccceeemmmffffff___ŠŠŠäääßßßßßßuuuuuuPPPŸŸŸŸŸŸŸŸŸ···þþþþþþÅÅÅÅÅňˆˆˆˆˆ||||||««««««}}} rrrrrrrrrrrroooˆˆˆ‡‡‡WWWXXX???nnnnnnFFFsssççç–––šššššš]]]xxxaaa```•••³³³rrr```iii___]]]\\\aaabbb°°°hhheeeaaadddÿÿÿfffcccYYYbbbXXXXXXZZZaaa```]]]\\\YYY^^^```fff^^^```ggg```fffbbbZZZxxxWWWssslllttt{{{ñññggg}}}˜˜˜ªªªeeeˆˆˆpppmmmBBBCCCCCCLLLYYYVVVSSS___jjjyyyqqquuummmkkkxxxxxx‘‘‘™™™ßßßýýýwwwrrrÉÉÉ´´´¢¢¢¤¤¤¸¸¸§§§hhh^^^wwwaaaVVVccc___yyy|||______fff```ssspppÀÀÀrrr‰‰‰½½½¾¾¾¾¾¾‰‰‰………ŠŠŠ™™™¦¦¦ªªª‹‹‹†††³³³vvv„„„cccfffccceeebbbffffff___ŠŠŠµµµáááaaa©©©»»»•••“““££££££mmmfffŒŒŒŒŒŒVVVÁÁÁ©©©ªªª³³³µµµþþþÿÿÿ‡‡‡ddd`````````ooo‡‡‡‡‡‡uuuuuuqqqqqqfff//////kkkrrrÌÌÌÇÇÇrrrƒƒƒÕÕÕ   HHHSSSddd\\\˜˜˜kkkkkkdddccc™™™gggaaa```dddaaaeee```YYYVVVYYYWWW]]]^^^```]]]\\\```aaaaaafffaaa```ggg```fffbbbqqq\\\xxxZZZooottt{{{ñññÂÂÂ}}}}}}îîîîîînnnpppBBBJJJIIIOOOVVVYYYXXX______rrrqqqqqqmmmmmmxxxxxxxxxxxx™™™™™™ýýýýýýrrrrrr´´´´´´¤¤¤¤¤¤hhhjjjbbbBBBFFFSSS``````vvvvvvggghhhgggeeejjjuuuÔÔÔÔÔÔ···ŠŠŠ‹‹‹‹‹‹xxx|||xxxuuuuuu››››››ààààààwwwwwwddddddbbbfffaaadddaaa\\\lllµµµáááaaaœœœ©©©••••••““““““£££ãããfffkkkŒŒŒ£££©©©©©©©©©³³³³³³ÿÿÿ ×××———•••sssqqqvvvvvvvvv```uuu]]]ZZZNNNbbbuuuuuuXXXrrrööörrrƒƒƒÿÿÿ      ___VVV˜˜˜˜˜˜kkkkkkdddccciii```aaabbbdddaaaeeeaaaXXXYYYVVVWWW]]]\\\^^^]]]]]]```aaaaaaccc___eeebbb^^^hhhbbbmmmxxxttt‘‘‘÷÷÷lllƒƒƒddd™™™TTT«««©©©___ccczzzwwwLLL777TTTUUU^^^tttlll“““ÍÍÍÿÿÿÿÿÿÎÎÎÞÞÞ¹¹¹¾¾¾¡¡¡åååÀÀÀ¨¨¨›››mmmlll›››¡¡¡“““®®®ªªªªªª¦¦¦¤¤¤¤¤¤WWW______```uuueeeggghhhfffeeejjjmmmÔÔÔ°°°······‹‹‹¡¡¡¡¡¡„„„‡‡‡wwwqqq›››©©©×××wwwnnncccdddaaaWWWbbbeee___‹‹‹---WWW222YYY„„„¨¨¨ÞÞÞœœœ‹‹‹‹‹‹ÂÂÂÂÂÂííííííõõõÿÿÿÿÿÿ———˜˜˜ªªªäääUUU®®®×××ååååå嬬¬½½½¯¯¯ÅÅÅÜÜÜaaa```ZZZ\\\iii¬¬¬zzz{{{ccccccccc{{{|||   ÿÿÿxxx˜˜˜„„„eeehhh___bbbfff```fffbbbdddddd```^^^XXXZZZZZZVVVYYY]]]^^^^^^^^^```cccbbbbbb]]]eeebbb^^^jjjfffnnnxxxttt‘‘‘‘‘‘ƒƒƒrrrdddddd¸¸¸xxx______ccccccwww===ppp]]]]]][[[dddÍÍÍÍÍÍÿÿÿÿÿÿÎÎÎÎÎι¹¹¹¹¹¡¡¡¡¡¡ÀÀÀÀÀÀ¨¨¨¨¨¨llllll¡¡¡¡¡¡®®®®®®ªªªªªª¤¤¤UUUSSS```ÇÇÇaaaddd^^^______ZZZfffddddddwwwŠŠŠ‰‰‰‰‰‰ÓÓÓÍÍÍÍÍ͇‡‡‡‡‡™™™™™™•••{{{™™™™™™iiiiiibbbbbb___hhhdddfff___mmm]]]gggÑÑÑâââ„„„„„„ÞÞÞÞÞÞœœœœœœ‹‹‹ŠŠŠÂÂÂÊÊÊíííõõõèèèÿÿÿÿÿÿ˜˜˜˜˜˜ääääääbbb®®®œœœÞÞÞÓÓÓ¬¬¬¼¼¼¯¯¯ÜÜÜMMMJJJZZZWWWccc¬¬¬¬¬¬{{{{{{eeemmm{{{{{{||||||xxxxxxsss___aaagggdddbbbeee^^^fffaaadddcccddd^^^^^^ZZZZZZVVVYYY]]]bbb]]]ZZZbbbaaacccbbbddd]]]aaa```^^^ZZZ___©©©©©©VVVdddFFFFFFFFFªªªlllwwwwwwjjjpppŒŒŒcccUUUzzzzzz___]]]]]]\\\ðððÎÎÎÒÒÒ^^^^^^zzz‚‚‚€€€   ©©©ÙÙÙÀÀÀ±±±®®®¶¶¶¥¥¥      pppÁÁÁÿÿÿyyyqqqªªªgggTTT***FFFUUUeee^^^SSSZZZ___dddcccwwwŠŠŠ‰‰‰˜˜˜ÓÓÓÍÍÍÍÍÍÿÿÿ‡‡‡™™™¨¨¨ŽŽŽlll™™™uuuhhhbbb___```hhhddd]]]]]]………JJJeee§§§ÿÿÿ©©©•••ddd}}}xxx¹¹¹¹¹¹óóóóóóÝÝÝààବ¬»»»···©©©­­­ÜÜÜÅÅÅ___iii………ÓÓÓÓÓÓuuu©©©½½½ÄÄÄQQQjjj]]]bbb‰‰‰ìì줤¤ãããÄÄÄnnnvvv{{{vvv‹‹‹|||ooonnnddd```___eeeaaadddddddddXXXXXXZZZZZZYYYWWW\\\]]]]]]\\\bbbbbb^^^cccccc]]]aaa___^^^[[[ZZZ[[[nnn```dddfff¦¦¦ªªªªªªwwwwwwppp………ŒŒŒŒŒŒUUUgggzzz]]]]]]^^^```ÿÿÿÒÒÒ©©©©©©¢¢¢ŸŸŸ      “““­­­   ÙÙÙÙÙÙ±±±±±±¶¶¶¶¶¶   sssppppppÿÿÿÿÿÿqqqqqqTTT^^^LLL‡‡‡eeeeeeZZZaaaTTT```kkkccc~~~~~~|||‘‘‘eeeƒƒƒƒƒƒsssssshhhhhhrrrhhhfff^^^^^^eeedddUUUgggdddQQQoooÙÙÙ———©©©©©©VVV{{{{{{ƒƒƒŽŽŽ¹¹¹ýýýóóóÿÿÿ°°°¬¬¬¬¬¬······­­­­­­ÅÅÅŽŽŽ………………‚‚‚ÓÓÓ¹¹¹cccXXXÄÄÄdddzzz€€€bbb‰‰‰‰‰‰ããããããnnnnnnmmmqqquuuWWW‹‹‹‹‹‹ooocccggg``````ddd{{{hhhfffbbbdddTTTXXX[[[]]]YYYWWW\\\]]]ZZZ]]]fffbbb___cccbbbaaabbb```]]]cccaaannn^^^©©©©©©©©©¼¼¼```iiiqqqrrrmmmpppƒƒƒ‡‡‡‡‡‡UUUcccTTT\\\\\\eeeeee}}}}}}¬¬¬ªªªªªªõõõ“““³³³±±±ÿÿÿÿÿÿúúúàà຺ºµµµþþþ¥¥¥ÈÈÈÿÿÿÿÿÿÉÉɺººâââÎÎÎÎÎÎUUUJJJŠŠŠaaaJJJaaaccceeeeeelll^^^]]]kkkccc†††~~~|||›››eeeeeeoooƒƒƒssslllŠŠŠhhhaaahhhfff^^^gggdddaaa]]]SSS333iiioooÙÙÙ›››}}}yyyuuu¨¨¨†††‰‰‰„„„sss’’’’’’lllXXXmmm²²²ÞÞÞÿÿÿ­­­PPPÿÿÿÿÿÿ´´´´´´––––––¹¹¹kkkffffffhhh———aaa¥¥¥üüüãããZZZ___bbbpppWWWYYY|||rrr```¼¼¼bbbfffaaa]]]^^^dddbbbeeehhhdddiii___VVV\\\[[[]]]ZZZXXX\\\\\\___VVV]]]jjjbbb___cccbbbaaabbbdddcccjjjccc©©©©©©NNN{{{bbb©©©©©©```iiirrrrrr~~~ppp‡‡‡´´´LLLYYYYYY\\\€€€eeemmm}}}¼¼¼ªªªªªªõõõõõõ³³³³³³³³³···úúúúúúººººººþþþþþþÈÈÈÈÈÈÿÿÿÿÿÿººººººÎÎÎ]]]JJJJJJŠŠŠlllMMMVVVPPPeeeaaaaaa^^^]]]gggccc~~~~~~ˆˆˆˆˆˆdddddd†††ƒƒƒƒƒƒ††††††wwwwwwxxxxxxaaaeeeccc```gggcccaaa]]]¶¶¶„„„hhhwwwÙÙÙÙÙÙœœœœœœuuuÊÊʨ¨¨¨¨¨‰‰‰‰‰‰„„„^^^’’’‹‹‹lll\\\mmmÞÞÞÞÞÞMMM]]]ZZZÿÿÿµµµ´´´¿¿¿kkkwwwfff———PPPxxxbbb¥¥¥¥¥¥¯¯¯”””»»»lllaaaeee|||¶¶¶UUUbbbeeefff]]]]]]^^^ddd```cccccc```iii___]]]\\\[[[\\\YYYXXXZZZ\\\___VVV[[[___eeeaaabbbdddaaabbb\\\[[[oooggg}}}”””XXXnnn______©©©———ÇÇǵµµæææµµµµµµvvvZZZ^^^©©©YYY[[[ÄÄÄjjj“““ÔÔÔÔÔÔÅÅŪªª±±±ìììyyywwwþþþ¯¯¯¡¡¡   nnngggºººþþþþþþ©©©¯¯¯¡¡¡ŠŠŠ£££òòòqqqqqqbbbiii^^^OOOÿÿÿgggcccgggwwwfff___eeeccc~~~dddˆˆˆ\\\ddd††††††‚‚‚ƒƒƒ„„„†††wwwxxxzzzaaa```___\\\bbbbbb^^^xxx»»»tttVVVdddbbb~~~~~~‚‚‚‚‚‚VVVtttrrrpppqqqkkk¾¾¾¾¾¾xxx¥¥¥ðððÊÊÊbbb\\\bbbbbb½½½½½½ûûûkkkÿÿÿwwwÆÆÆsss¨¨¨^^^ÿÿÿhhhõõõXXXRRRTTTddd‚‚‚lllñññnnnÒÒÒœœœÿÿÿWWW___hhh]]]___aaaaaaeeefffýýýsssbbbWWWZZZ\\\YYYXXXZZZ\\\___ZZZ\\\___eeeaaabbbdddaaaaaa\\\[[[oooggg}}}nnnüüüXXXWWW___ZZZ¦¦¦ÿÿÿµµµµµµµµµ´´´vvv```^^^©©©OOO[[[ÄÄÄjjj›››ÔÔÔÔÔÔúúú±±± ­­­œœœtttwww¯¯¯¯¯¯   ‰‰‰•••UUUþþþŒŒŒ¯¯¯±±±¡¡¡¡¡¡€€€ŸŸŸxxxxxxqqqbbbiiiYYYOOObbbgggcccwwwwww^^^___eeeeeedddfff^^^^^^†††††††††‚‚‚‚‚‚„„„„„„zzzzzzhhh```___\\\ZZZbbb^^^rrr¬¬¬IIIcccWWWlllbbb~~~~~~‚‚‚||||||rrrqqqkkk¾¾¾xxxPPPðððððð dddddd\\\BBBBBBJJJÉÉÉÍÍÍkkkwwwÆÆÆ¨¨¨ƒƒƒ```^^^hhhXXXjjjNNNŒŒŒddd‚‚‚{{{ñññsssÒÒÒÒÒÒvvv———wwwwww^^^^^^]]]aaafffaaagggdddýýýssscccXXX___ZZZYYYWWWZZZ\\\WWW]]]ggg^^^fffgggbbbeeegggeee```ccc^^^^^^uuuZZZÁÁÁÁÁÁòòòÆÆÆwww333ffffffjjjkkkôôôÙÙÙŒŒŒ\\\OOOddd­­­nnn___wwwÅÅÅÖÖÖÐÐÐÐÐÐòòòòòò………‰‰‰………†††¦¦¦¡¡¡££££££LLLàà௯¯§§§®®®¡¡¡¡¡¡^^^‡‡‡‘‘‘XXXXXX^^^ÿÿÿgggOOOTTTMMMXXXttt\\\^^^]]]eeeaaaccchhhppplll~~~~~~uuuuuurrrrrrooo```zzzdddqqqdddddd```]]]\\\bbb\\\···IIIKKKSSS\\\\\\¯¯¯‰‰‰‰‰‰„„„dddŒŒŒŒŒŒllllllOOO„„„eeebbbhhhyyyyyyuuu```cccYYY\\\®®®TTTÕÕÕÕÕÕÕÕÕÕÕÕþþþ„„„_________\\\fff\\\ggg‚‚‚‚‚‚yyy¤¤¤mmmoooÿÿÿ²²²²²²aaaQQQ©©©©©©]]]yyycccmmmmmm\\\pppdddddd[[[^^^WWW\\\WWW[[[___WWWfffYYYbbbhhhfffggghhhcccgggeee```ddd^^^ZZZ^^^ttt\\\ÁÁÁÀÀÀYYYrrrsss``````ssssssôôôÙÙÙŒŒŒTTTddd[[[­­­­­­oooÿÿÿ›››ÕÕÕÆÆÆÐÐÐòòòWWW‰‰‰vvv”””††††††££££££LLLøøøàààààà   §§§¡¡¡QQQ^^^^^^‘‘‘‘‘‘XXX^^^ÿÿÿccc\\\NNN???aaa]]]\\\^^^]]]eeeaaahhhhhhŠŠŠlll~~~hhhzzzwwwwwwxxxxxxqqq```dddooodddcccccc``````eee\\\fff@@@KKKRRR\\\\\\kkkkkkdddŒŒŒeeelllcccccc111eee¬¬¬hhhWWWOOOZZZ```___YYY®®®®®®¼¼¼¢¢¢\\\ÿÿÿÕÕÕ–––þþþþþþ\\\®®®```\\\SSS\\\^^^WWW‚‚‚¤¤¤¤¤¤¢¢¢mmmwww²²²mmm___­­­©©©ZZZ]]]yyycccmmmmmmpppxxxbbbccc[[[^^^\\\\\\[[[[[[___WWWjjjYYY]]]hhhffffffddddddeeebbb^^^^^^```{{{iiieee™™™SSS²²²WWW\\\nnngggeeeƒƒƒƒƒƒ¯¯¯¶¶¶KKKmmmfff[[[ÖÖÖËËËýýýÿÿÿ›››çççlllÿÿÿ°°°°°°„„„ÿÿÿ···ÿÿÿ¸¸¸ÿÿÿ```hhhÎÎÎÊÊÊýýýæææ˜˜˜ÄÄÄ©©©ÜÜÜ©©©^^^ððð”””aaa]]]ZZZJJJcccQQQaaa^^^]]]``````cccbbbiiiiiiaaaaaauuusssrrrxxxxxxwwwwwwlllˆˆˆcccbbbbbbaaa^^^```___dddcccdddxxxOOO444OOORRRRRR[[[[[[VVV___DDDvvvUUUbbb\\\oooLLLTTTTTTQQQTTTRRRVVVNNN………××××××âââ½½½êêêêêêÿÿÿ––––––ÿÿÿ¤¤¤___\\\SSSXXXaaa^^^^^^ggg–––fffqqqIII½½½ÿÿÿhhhíííyyy}}}äääddddddiiiiiiÌÌÌÃÃÃbbbcccWWWWWW\\\XXX[[[\\\^^^WWW^^^XXX]]]dddcccfffcccdddfffdddbbb^^^```©©©iiiiiiSSSSSSÁÁÁWWW\\\uuugggeee‹‹‹ƒƒƒ>>>KKKiiimmmcccaaaÖÖÖÖÖÖýýýýýýððð\\\lllÿÿÿæææ°°°±±±|||ÿÿÿÿÿÿ———```hhhhhhÊÊÊÊÊÊææææææÄÄÄ©©©¢¢¢©©©KKK^^^””””””;;;^^^HHHcccKKK___ccc```]]]```bbbbbbiiiaaaaaaaaasssjjjrrrrrrxxxxxxwwwllllllcccbbbbbbaaa^^^^^^___ZZZbbbPPPxxxÌÌÌwww^^^RRRRRRÊÊÊDDDDDD………vvvUUUdddaaaoooLLLmmmmmmNNNjjjXXXBBB‹‹‹………………´´´½½½ ½½½êêêììì–––oooÿÿÿÿÿÿ‰‰‰___aaacccXXXbbbccc^^^–––gggfffqqq]]]WWWÿÿÿhhhÁÁÁyyy[[[{{{dddœœœhhhdddÌÌÌÃÃÃcccdddWWW[[[TTTWWW[[[^^^^^^XXX___[[[~~~dddggghhhdddeeevvvddd___ddd___aaa___\\\^^^dddÿÿÿWWW```bbbgggRRR››››››aaaXXXccceeebbb```|||ÞÞÞÿÿÿÿÿÿçççbbb³³³ÑÑÑ××××××µµµµµµ^^^hhhPPPTTTQQQNNNtttppp¦¦¦NNN«««ÄÄÄ©©©‰‰‰```YYY[[[^^^dddYYYcccaaa```dddccc^^^```aaa___bbbbbbaaa]]]^^^^^^ppppppkkkkkknnnnnnxxx```cccZZZYYY]]]aaaggg[[[]]][[[___TTTSSSuuu___\\\ZZZ¦¦¦   ooo___```mmmmmm]]]cccaaaqqqqqqiiihhhkkkmmmaaalllþþþ¹¹¹¹¹¹••• ÍÍÍÍÍÍäääooo‚‚‚sssÿÿÿÿÿÿ³³³```aaa```\\\XXXccc}}}nnnpppZZZaaaaaakkkRRRWWWfff^^^hhhÄÄÄkkkccc¬¬¬pppcccdddWWWZZZXXXWWWXXX^^^bbbXXX^^^[[[~~~bbbgggllldddhhhvvvddd___```bbbaaa___ggggggdddÿÿÿyyyxxxbbb|||ggg}}}›››aaa\\\cccYYYddd```||||||ÿÿÿÿÿÿÃÃÃbbb‹‹‹ÿÿÿ¤¤¤××פ¤¤µµµeeeŸŸŸÅÅÅTTT[[[???AAAAAAAAANNNNNNÄÄÄ©©©™™™```:::777œœœsssssscccTTTÿÿÿdddcccbbb]]]aaa]]]bbbbbb°°°```[[[[[[^^^aaakkknnnnnnxxxxxxuuuuuuZZZZZZ]]]aaabbb[[[\\\]]]___WWW777\\\]]]fffZZZ      ddd```OOO___]]]aaacccqqquuuiiihhhrrrrrrllleeeSSSþþþþþþ¹¹¹sssssssssÍÍÍÖÖÖooo‚‚‚sssÿÿÿªªªªªª[[[aaa```cccXXXccc©©©}}}nnngggeeeaaaaaakkkkkkTTT^^^¨¨¨···jjj~~~nnnpppcccdddVVVZZZYYYXXX[[[___bbbUUU]]]ZZZ›››bbbhhhmmmdddkkkyyyooooooccc^^^cccccc``````cccÍÍÍÿÿÿÿÿÿìììÛÛÛsssIIIRRRYYYccc]]]ÞÞÞbbb      ˆˆˆöööÃÃí­­|||ùùù©©©©©©©©©©©©kkk‚‚‚qqq^^^CCC___<<<;;;;;;JJJJJJJJJ———bbbgggddd•••bbb¶¶¶bbbTTT]]]ccc\\\___ZZZ```]]]___\\\ccc^^^```^^^ccccccwwwwwwwwwmmm\\\``````XXX\\\\\\\\\\\\YYY]]]``````___```ggggggYYY```jjj’’’ÓÓÓmmmMMM|||RRRYYY]]]ccc‹‹‹wwwkkkjjj¯¯¯¯¯¯~~~œœœTTT¸¸¸³³³³³³¹¹¹²²²¸¸¸žžžÏÏÏ~~~mmmkkkÊÊÊWWWˆˆˆ[[[YYY```cccUUU^^^‹‹‹‹‹‹fff___\\\hhhTTTsssbbbŒŒŒZZZmmmþþþ¼¼¼ËËËiiivvviiibbbdddXXXZZZYYYYYY[[[___^^^VVV\\\___\\\___cccgggmmmdddgggnnnmmmoooddd^^^fff+++fff```©©©YYYnnnÿÿÿÿÿÿÛÛÛ€€€SSSKKKbbbccc]]]___]]]   “““ˆˆˆˆˆˆ‰‰‰nnnßßßùùù´´´©©©³³³©©©pppkkkqqqeeejjjIIIOOOaaakkkooo^^^ccc???RRRbbb\\\ÀÀÀdddÁÁÁÁÁÁbbbWWWNNNÿÿÿ^^^___```[[[___]]]\\\`````````\\\cccrrrwwwYYYYYY[[[[[[VVVXXXXXX\\\]]][[[\\\]]]___```ccc___SSShhh[[[cccRRR\\\’’’’’’mmm–––MMMRRRqqqqqq[[[bbbiii‹‹‹sssxxx¡¡¡ììì~~~TTT¸¸¸¸¸¸••••••¹¹¹žžžžžžÏÏÏ~~~mmmjjjzzzŒŒŒ```]]]YYY```ccc^^^^^^‹‹‹‹‹‹fff___[[[aaaTTTsssÔÔÔkkkZZZYYYmmmËËËðððˆˆˆ}}}qqqiiifffdddXXX]]]\\\YYY[[[[[[^^^VVVaaa___```]]]cccgggllliiilllooommm^^^eeebbb“““^^^RRRZZZ___mmmbbbYYY¾¾¾¿¿¿mmmÇÇÇæææLLL```bbbhhh\\\]]]×××ÅÅÅmmm¸¸¸qqqlllqqqqqqkkkŽŽŽ€€€€€€œœœŒŒŒ‹‹‹···ZZZkkk§§§cccccchhhhhhuuuwwwþþþªªªRRRaaauuu ___VVV<<<ÅÅÅbbb]]]]]]]]][[[aaaaaammmTTTXXX\\\^^^ZZZfff]]]|||ddddddbbbbbbWWWTTTXXXXXXXXX]]]UUUPPPVVV\\\›››MMMpppggg[[[ ÿÿÿôôô£££[[[XXXnnnŽŽŽŽŽŽ[[[bbbdddfffuuuŠŠŠºººººº‹‹‹TTT„„„ƒƒƒ………………ŠŠŠVVV¾¾¾iiikkkiiihhh“““LLL]]]aaabbbVVV^^^]]]~~~RRRccc```bbbhhhMMMbbb\\\MMM[[[ZZZ¬¬¬ÞÞÞ………}}}ppphhheeedddXXX```ZZZ]]]\\\[[[```VVV```]]]```dddmmmgggfffiiilllooooooààà[[[bbb………^^^RRRZZZXXXXXXmmmbbbYYYmmmçççÇÇÇSSS```bbbhhh\\\eeeÅÅÅÃÃÄ„„ÁÁÁqqqŠŠŠ©©©qqqyyykkknnnrrrœœœœœœ······€€€rrr§§§eeeccc```hhhhhhwwwwwwYYYªªªªªªTTTYYYWWWWWWZZZXXX``````]]]]]]]]]```aaa```]]]___^^^XXX^^^___xxx|||||||||ccc[[[bbbWWWTTTVVVXXXXXX]]]XXXSSSSSSWWWZZZ›››UUUggg444RRRÿÿÿÿÿÿ££££££ZZZnnnmmmŽŽŽ___bbbbbbfffuuu{{{¯¯¯ººº•••TTT]]]aaafff^^^[[[VVVÿÿÿiiihhhkkkfffiiijjjjjjaaabbbZZZTTT]]]ggguuu```aaabbbhhh[[[ppp]]]hhh£££§§§ýýýßßßwwwrrrllleeedddXXX```\\\]]]\\\[[[___VVV```\\\``````lllgggdddmmmmmmpppÿÿÿÿÿÿ¶¶¶ccc^^^XXX^^^gggYYY§§§ºººpppxxxWWW\\\nnnZZZ```cccbbbWWWNNNxxxäääüüü„„„eeeWWW´´´´´´¯¯¯¯¯¯‚‚‚‚‚‚³³³~~~}}}ttt¦¦¦«««gggccceeebbbOOOTTTLLLQQQLLL```VVVZZZMMMSSSZZZ]]]___^^^^^^aaaaaa^^^^^^\\\YYYXXX]]]___’’’’’’………PPPPPPRRRRRR______TTTTTTYYYYYYZZZVVV\\\\\\WWW^^^QQQ]]]VVVWWW©©©eeeÉÉÉžžž©©©iii777dddYYYaaa___```œœœiii|||}}}¦¦¦ŽŽŽtttyyyyyySSS‡‡‡‡‡‡”””qqqeeehhh¾¾¾\\\‚‚‚‚‚‚[[[```ZZZ^^^___pppeeeVVVbbbnnnhhhcccZZZ\\\äää¾¾¾¯¯¯­­­ÿÿÿüüüùùùhhhhhhjjjhhhgggXXX___\\\]]]XXX^^^\\\YYY]]]ccc```ŒŒŒmmmdddmmmmmmÿÿÿÿÿÿhhhdddVVVaaa^^^]]]yyyººººººxxxxxxrrrnnnZZZ```cccbbbWWW^^^xxxxxxüüüüüüeeefffSSS´´´±±±¯¯¯××ׂ‚‚³³³³³³{{{¦¦¦qqqÿÿÿÿÿÿ¨¨¨£££bbbPPPTTTVVVõõõ```SSSPPP```aaaaaaSSS^^^___^^^\\\aaa\\\]]]\\\ZZZXXX]]]]]]hhh’’’}}}………………bbbddd|||___YYYTTTYYYYYYYYYVVVTTT[[[ZZZWWW___hhhZZZWWWWWWyyygggNNNžžžžžžeeeWWWVVVYYYXXX______œœœœœœ}}}}}}———¦¦¦‰‰‰›››‡‡‡°°°°°°   ‡‡‡qqqqqqjjjppp°°°\\\ggg‚‚‚YYY```HHHVVV___‘‘‘~~~mmmgggooohhhcccbbbYYYäääää䯯¯¯¯¯æææ«««ùùùùùùhhhhhhdddgggXXX___\\\XXXWWW^^^XXXYYYXXX___bbbfffŽŽŽlllcccmmmmmm½½½qqqÿÿÿÿÿÿ•••ŸŸŸZZZ^^^^^^iiiOOO]]]gggfffaaahhhggggggwwwjjjZZZ```\\\]]]ÌÌ̬¬¬²²²¢¢¢iiilll‰‰‰>>>;;;iii'''ŸŸŸ‹‹‹tttÿÿÿ½½½ÉÉÉrrrvvvvvvyyy___RRROOOddddddfffÃÃÃÿÿÿ```nnnmmmbbb]]]]]]^^^]]]```[[[ZZZ[[[^^^[[[[[[[[[hhhoooooooooŠŠŠŠŠŠfffYYYYYYYYY[[[[[[]]]ZZZXXX[[[XXX\\\www___VVVYYY‡‡‡†††___III‹‹‹YYYOOOFFFXXXZZZ```___aaagggggggggqqquuurrr££££££¥¥¥‘‘‘ÇÇÇÇÇlj‰‰”””———pppñññbbbbbbaaaVVVZZZYYYYYYQQQ±±±µµµ¸¸¸”””aaa___………aaaWWW      aaauuulllˆˆˆ___ŸŸŸffffffcccddd\\\VVV[[[WWWWWW^^^WWWZZZFFF___bbbfffffflllmmmmmmmmm½½½½½½fffÿÿÿèè蟟ŸŸŸŸPPP^^^dddYYY]]]mmmgggaaaaaaggg¬¬¬wwwjjjBBB```\\\]]]ÌÌÌÌÌ̲²²²²²mmmttt‰‰‰‰‰‰ŽŽŽŽŽŽ˜˜˜†††rrrpppüüüÊÊÊqqqÉÉÉÉÉÉvvvfffaaaaaaeeeddddddÏÏÏLLLfffÿÿÿjjjmmm___aaaZZZ]]]]]]```\\\ZZZZZZ]]]]]][[[[[[[[[}}}eeeÿÿÿ@@@QQQddd¡¡¡]]]dddYYYWWWYYY \\\]]]XXXVVVWWWYYYZZZ\\\___©©©VVVTTT††††††^^^[[[EEEbbbJJJFFFZZZWWW___XXX{{{ggggggqqqqqqxxxppp‚‚‚£££‘‘‘‚‚‚‡‡‡ÇÇlj‰‰”””yyyyyylllbbb^^^aaa^^^YYYYYY---‰‰‰±±±¸¸¸¸¸¸¸¸¸___YYY[[[WWW   VVVVVVfffllllllttt___kkkfffcccddd\\\WWW[[[WWWWWW```YYY[[[\\\AAA______dddfffiiigggmmmlll···eeefff¢¢¢ÿÿÿÏÏÏÏÏÏGGGbbbPPPbbb„„„\\\ggg¶¶¶›››¹¹¹hhh{{{eeeOOO[[[SSSVVVXXXXXXttttttddd^^^rrrzzz~~~‚‚‚WWW®®®®®®dddddd,,,tttŸŸŸooo``````^^^^^^fffccceeeRRRWWWkkkÑÑÑ€€€yyyWWW•••]]]^^^ZZZXXX\\\[[[ZZZ]]]]]][[[[[[aaaXXX______hhh LLLoooooonnn]]]YYYYYYYYY[[[YYY]]]ZZZYYYWWWZZZYYYRRR777iiiiiiXXXQQQpppwww]]]LLLAAAUUU\\\HHHXXX\\\XXXVVVhhhÿÿÿlll„„„„„„¶¶¶———kkkmmm‰‰‰xxxxxxggg[[[fffdddyyy@@@qqq{{{jjj šššttt©©©ÝÝÝ¡¡¡aaagggbbbZZZUUUXXXhhhhhhNNN‚‚‚‚‚‚žžž………vvviiigggbbbbbb\\\WWW___[[[WWW```YYYYYY^^^UUU]]]fffdddfffhhhrrrmmmmmmeeeooo¢¢¢¢¢¢‰‰‰ÏÏÏššš¦¦¦lllVVVRRRÁÁÁ¶¶¶¶¶¶¹¹¹¹¹¹VVVTTT___jjjqqqWWWWWWVVV]]]aaaggggggrrrggg___¦¦¦®®®eeeˆˆˆ¤¤¤¤¤¤rrrŸŸŸŸŸŸnnn………uuu^^^ÔÔÔcccYYY^^^WWWhhhbbbqqqFFFŽŽŽZZZ___ZZZbbb]]]]]]XXX[[[\\\aaaZZZgggZZZ]]]fff^^^jjjdddddd‹‹‹ˆˆˆddddddWWWZZZZZZ ]]]©©©ZZZ[[[OOOWWW[[[YYYTTTUUUiiiXXXQQQbbbwww]]]KKKKKKAAAQQQ[[[YYYTTT\\\VVVÄÄÄÿÿÿÿÿÿ[[[„„„„„„——————‰‰‰‰‰‰xxx[[[YYY___RRReeemmmVVVZZZÿÿÿjjj]]]†††©©©¡¡¡¡¡¡gggYYYNNNgggcccXXXcccuuuZZZ‚‚‚jjj………‚‚‚iiigggdddbbb]]]VVVbbb[[[WWW^^^\\\UUUMMMIIIbbb^^^gggdddiiikkkvvvlllkkkwww†††°°°hhhjjjjjjKKK^^^aaa```}}}aaa„„„„„„ttt¶¶¶ÉÉɤ¤¤mmmMMMggg______UUUYYYOOOMMMHHHiiiiiittt]]]]]]^^^bbbTTTˆˆˆ„„„tttdddqqqqqqggg¨¨¨™™™ MMMZZZYYYUUUhhhdddwwwOOOooooooaaaaaabbbWWW]]]YYYaaa[[[aaa\\\ZZZVVV]]]]]]``````jjjjjjdddJJJfffjjjjjjWWWWWWZZZZZZWWW©©©PPPXXXXXXWWWRRRYYYYYYqqqQQQ©©©]]]kkkVVV[[[mmmPPPYYYYYY[[[;;;;;;³³³œœœ|||}}}}}}rrrÿÿÿÿÿÿkkkeeedddwwwvvvqqqTTTžžž······OOOFFFKKKUUU¨¨¨mmmcccÿÿÿ‹‹‹›››©©©˜˜˜ZZZeee|||{{{xxxrrrqqqiiilllhhhuuuhhhgggfffcccccc]]]VVV\\\\\\WWW^^^YYYggg111\\\bbb^^^ddddddiiikkkiiikkkttt††††††jjjjjjeeejjjgggZZZ^^^ooo}}}ˆˆˆ„„„ªªª”””tttÉÉÉÉÉÉmmmmmmCCCbbbpppBBBQQQ[[[|||JJJhhhmmmtttttt€€€………………‡‡‡tttzzzkkkqqq†††ddd®®®™™™ðððMMMZZZUUUooohhhddd888iiihhhSSS[[[``````YYYUUU______```[[[XXXUUUZZZ©©©ZZZhhhjjjffffffoooooollllllUUUWWWWWWTTTXXXhhhWWW©©©aaaMMMRRRXXX___YYY[[[©©©XXXZZZŒŒŒwwwmmmmmmRRR```______NNNIIIœœœœœœŒŒŒƒƒƒrrroooÿÿÿ¼¼¼lllkkkkkk[[[[[[žžžžžž———···OOOaaaaaaUUUUUUccc†††ÿÿÿ………©©©¢¢¢˜˜˜˜˜˜SSS[[[yyy rrrqqqqqq€€€llliiikkkhhhgggfffcccccc]]]UUU\\\\\\```___]]]gggUUURRRkkkVVV^^^cccgggjjjggg{{{kkklllxxxllldddaaadddkkk]]]cccbbbcccˆˆˆˆˆˆssskkkmmm}}}``````pppHHHhhh‚‚‚[[[HHHNNNaaattt]]][[[}}}nnnsssxxxªªªíí툈ˆRRR”””“““‰‰‰„„„kkkkkkŸŸŸ   NNNKKKhhhfff```MMMVVVVVVCCCZZZ[[[```VVVYYY___]]]aaa___ÿÿÿ```kkk[[[©©©©©©]]]]]]jjjjjjfffgggooollllll```UUUWWWWWWWWWhhhXXXJJJJJJZZZMMMXXX______UUURRRXXX^^^VVV“““¾¾¾|||€€€||||||zzzlll```]]]§§§ôôô³³³±±±···aaa¨¨¨¨¨¨¬¬¬OOOiiiYYYpppppp}}}}}}ÿÿÿaaaooohhh___­­­³³³††††††aaaVVV‰‰‰–––gggmmm‚‚‚}}}www€€€llllllkkknnnnnnaaabbbcccbbbbbb]]]VVV]]]YYY\\\```]]]^^^\\\^^^kkkZZZ```eeegggbbbfffmmmdddlllggggggbbb‹‹‹dddzzz```bbbkkkvvvˆˆˆnnnssssss}}}ttt```eeepppkkkzzzOOO[[[€€€^^^¡¡¡€€€¼¼¼tttXXXWWWWWWZZZLLLnnnííííí퉉‰©©©““““““„„„„„„^^^TTTOOOZZZ]]]hhhhhh^^^YYYVVVTTTVVV^^^]]]\\\ZZZ______[[[ccc\\\ZZZ^^^gggXXXSSS©©©ddddddyyyzzzzzzyyyyyyuuuuuu[[[[[[VVVUUUXXX]]]YYY]]]PPPYYYRRRUUUSSS\\\YYYbbbfff©©©VVV```¾¾¾¾¾¾|||€€€@@@@@@ddd```cccWWWôôôôôô±±±±±±jjjªªª¨¨¨OOOkkkgggffflllppp^^^}}}ÿÿÿiii\\\hhhÓÓÓ­­­ÆÆÆ³³³’’’††† sssbbb––––––bbbmmm}}}www€€€€€€aaakkkaaannnqqqbbbcccbbbbbb]]]VVV]]]YYYZZZ___\\\^^^aaaaaaWWW\\\```cccaaaccchhhfffdddkkkkkkmmmgggffffff^^^``````ssssssuuuþþþÿÿÿÿÿÿÿÿÿ“““www›››{{{{{{dddÑÑÑeeelllgggqqqiiicccwww„„„„„„––––––VVVccc½½½ððð¾¾¾¾¾¾jjjjjjFFF___XXXZZZ³³³YYYTTTWWW©©©VVV^^^]]]\\\YYYZZZ___ZZZ\\\YYY^^^ZZZ]]]cccQQQ©©©©©©dddmmmyyyyyyzzzzzzyyyyyyuuummm[[[VVVVVVXXXcccYYY]]]NNNRRROOOQQQSSS]]]YYY\\\RRRTTTTTTbbb‰‰‰«««ÿÿÿ˜˜˜˜˜˜mmmmmmMMM::::::BBBÔÔÔÔÔÔ²²²WWWWWW§§§999AAAVVVVVVXXXjjjAAA,,,]]]sssssstttTTTƒƒƒzzzvvvssssss™™™™™™vvvxxx–––‘‘‘wwwyyyyyycccrrrfffpppbbbaaahhhcccdddbbbccc```WWWYYY[[[ZZZ___[[[]]]aaaWWW\\\aaabbbbbbdddhhhfffkkkkkkkkkssseeefff```]]]```mmmsss–––ÿÿÿþþþÿÿÿÿÿÿÿÿÿŸŸŸµµµ¥¥¥®®®{{{dddÑÑÑeee|||°°°jjj™™™†††„„„¡¡¡–––RRRVVVccc½½½ððð¾¾¾___jjjDDD““““““^^^××׳³³YYY©©©OOONNNWWW\\\]]][[[[[[VVVXXXQQQWWWQQQXXXddd___qqqbbbÿÿÿÿÿÿ¾¾¾¾¾¾WWWWWWWWWaaaaaauuuuuuccccccSSSSSSYYYVVVWWW^^^hhhWWWNNNTTTYYYXXXYYY]]]^^^fff]]]ZZZXXXyyyÿÿÿ©©©˜˜˜–––mmmvvvYYY\\\lllpppttt××ײ²²©©©§§§žžž–––~~~~~~hhhLLLkkkaaa]]]sssvvv¢¢¢TTTƒƒƒ‚‚‚zzzyyyssskkk™™™¼¼¼vvv{{{‘‘‘‘‘‘yyytttnnncccffffffffffffdddeeedddbbbbbb```WWWWWW[[[ZZZ^^^ZZZXXX\\\PPPUUU___bbbeeebbbfffhhhdddhhhiiidddbbb^^^^^^fffbbbcccjjj}}}uuu}}}|||bbbaaaxxxlllpppeeehhhyyy777777}}}}}}GGGDDD¶¶¶°°°°°°ÿÿÿÿÿÿRRRXXXjjj©©©‘‘‘JJJ<<>>šššqqqfffffftttfff¢¢¢¢¢¢ÖÖÖÖÖÖ‡‡‡‡‡‡vvvvvvHHH\\\VVV[[[VVV[[[___``````WWW___]]][[[]]]]]]]]]]]]YYYZZZPPPWWWbbbaaa}}}aaahhhZZZeeeeeeooohhhhhhhhhhhh}}}}}}WWWWWWYYY,,,^^^MMMXXXWWWVVVYYYZZZ[[[ZZZZZZZZZYYY\\\\\\ZZZXXXWWWZZZTTTPPPFFFPPPVVVnnnooobbbÒÒÒêêêêêêllllll^^^hhhggggggOOOhhhhhhºººººº}}}QQQddddddjjjjjjkkkkkkwwwwwwooommm„„„„„„ooommmuuuuuueeekkkmmmjjjjjjaaaaaabbbbbb``````YYYXXX^^^[[[[[[ZZZ^^^^^^XXXZZZ^^^```gggdddbbbaaaccceee^^^^^^___aaaaaabbbmmmtttvvveeeeeeooooooiiinnn___\\\aaaeee‰‰‰„„„rrrwwwgggddd```ZZZZZZbbbnnnfff|||yyyÙÙÙÉÉÉ¢¢¢ÖÖÖ}}}HHH|||vvv›››DDDVVVWWWWWWQQQ]]]^^^___bbb\\\]]]```]]]\\\]]]]]]]]]VVV[[[ZZZ___[[[UUUaaa^^^```ÿÿÿ\\\ooofffoooooohhhhhhhhhVVV}}}xxxWWWYYY©©©___\\\MMMYYYVVVRRR\\\[[[ZZZWWWXXXZZZ[[[[[[ZZZYYYSSSTTTXXXTTTTTTSSSPPPRRR‚‚‚nnn···êêêaaahhhššššššgggkkkhhhÿÿÿWWWiiigggbbbqqqHHH^^^jjjttttttlllwwwvvvooolll„„„„„„sssllluuuqqqkkkgggkkknnncccaaabbbccc``````^^^WWWYYY[[[[[[\\\[[[```YYYaaa^^^cccccceeebbbaaaccc^^^aaaccc___^^^aaawwwwww\\\\\\[[[zzzmmmnnndddcccccc```aaa```jjjrrrrrrVVVVVVcccoooªªªªªªaaalllÃÃÃÃÃÃ¥¥¥²²²{{{{{{qqqOOO||||||AAAIIIXXXSSSXXXXXX^^^]]]______[[[\\\```]]]ZZZ^^^]]]aaa```aaa^^^``````ZZZHHHVVVQQQWWW```]]]]]]]]]FFFFFFrrrVVVVVVffffffdddVVV······XXXJJJJJJOOOAAA\\\[[[WWWXXXVVV[[[WWWXXXZZZ[[[[[[YYY[[[WWWRRRXXXXXXXXXSSSSSSRRR```¤¤¤···aaaHHHhhhhhhZZZZZZ||||||yyyyyyeeeiiikkkdddbbbkkkkkkfffdddppppppiiiqqq~~~~~~ggghhhƒƒƒƒƒƒ~~~‚‚‚vvvvvvaaafffooodddaaaaaaaaaaaabbb^^^WWWYYY[[[ZZZ]]][[[XXX¾¾¾```^^^```bbbeeebbbbbbaaa^^^aaaccc______aaawww^^^fffYYYzzzzzzYYYnnnnnnddd___``````iiilllrrrVVV]]]]]]jjj sssllllll™™™ÃÃÃÌÌ̲²²–––{{{||||||qqquuuuuuEEE^^^XXXUUUTTTVVVYYYZZZ\\\]]]___bbbbbb```]]]ZZZ^^^\\\aaa]]]aaa^^^```[[[[[[YYYTTTaaa\\\eee```oooooo``````ddddddbbbaaahhheeeZZZUUU···ŒŒŒ```ZZZRRROOOWWW[[[WWWXXXVVV[[[YYYXXXYYY^^^```]]]]]]eeeaaaUUU\\\\\\\\\TTTUUUXXX```]]]PPP===<<>>999QQQcccëëëjjjjjjTTTeeeZZZ\\\[[[···––––––ÿÿÿÿÿÿ¸¸¸³³³•••ÿÿÿÿÿÿµµµµµµ¹¹¹¹¹¹ÄÄÄÄÄÄ‚‚‚ŠŠŠ¸¸¸¸¸¸òòòòòòÿÿÿŸŸŸ¼¼¼ÉÉÉ´´´‡‡‡–––§§§³³³ŽŽŽ“““½½½‚‚‚ƒƒƒ˜˜˜‘‘‘ssssssŒŒŒŒŒŒ’’’ŠŠŠ|||nnnŒŒŒ   wwwwwwfffhhhhhhdddfff```cccccc[[[YYY\\\aaa\\\³³³}}}FFF‹‹‹iii[[[^^^\\\``````aaaaaa```dddfffdddfffdddcccmmmuuulllssskkktttqqqrrr———ÝÝݨ¨¨¨¨¨¼¼¼¾¾¾èèèÍÍÍÿÿÿÿÿÿïïïØØØÙÙÙØØØ•••¼¼¼¼¼¼ÿÿÿÿÿÿ©©©òòòÿÿÿ¼¼¼¯¯¯ÖÖÖôôô¨¨¨§§§ºººååå©©©···æææþþþÁÁÁÁÁÁyyy|||bbb]]]]]]OOOmmm111lllOOOYYYFFFOOOIII```gggOOO©©©<<>>[[[üüü``````^^^[[[[[[ˆˆˆhhhÆÆÆggg444444ÂÂÂtttmmmRRR______kkkiiittt]]]]]]***uuuzzzzzzYYYtttzzz£££¥¥¥WWWWWW©©©ssssssFFFnnnÃÃÃÃÃﯯõõõØØØ   ÀÀÀ¬¬¬ÍÍÍ»»»ÐÐÐÿÿÿöööõõõÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼¼¼¼ÖÖÖÖÖÖwwwwwwÔÔÔÔÔÔiii†††‹‹‹–––qqqssssss^^^¯¯¯¯¯¯lllggg]]]bbbaaa```jjj]]]aaaZZZ]]][[[[[[```ZZZkkkTTTccc]]]___XXX[[[]]]^^^eeebbb```\\\```fffeeedddcccddddddkkkddd“““zzzeeehhhªªªrrr‹‹‹ïïïïïïmmmmmm   ªªªëëëÿÿÿ¶¶¶¶¶¶ËËËééé···­­­®®®ÝÝÝ···²²²üüü¶¶¶¶¶¶ÊÊÊÊÊʧ§§§§§›››¶¶¶|||ÕÕÕÎÎÎÎÎÎ]]]ccc‘‘‘iii___LLLoooTTTTTTjjjjjj©©©___JJJJJJDDD\\\[[[bbbooocccaaabbb```[[[@@@gggdddbbbSSScccfffŽŽŽŽŽŽyyyyyyGGGgggZZZuuuuuuuuuzzzlllYYYzzzzzz¥¥¥¥¥¥©©©eeeÿÿÿ>>>OOOOOO¡¡¡´´´´´´§§§§§§ØØØØØØÒÒÒÒÒÒ³³³³³³»»»»»»ÝÝÝäääÿÿÿÿÿÿËËËËËË™™™¶¶¶ÿÿÿõõõssssssšššýýýÃÃÃiiiÄÄÄ‹‹‹uuujjjbbbfffqqq¯¯¯cccfff^^^fffbbb___fffjjj```[[[WWWWWWZZZ[[[bbb___LLLhhh```WWWZZZ\\\^^^fff]]]```\\\eeeaaaeeebbbbbbfffdddmmmaaauuuzzz~~~eeekkk©©©{{{ÿÿÿ‚‚‚ƒƒƒ   °°°ÿÿÿÿÿÿÄÄÄÄÄÄéééééé······®®®®®®······üüüüüü¶¶¶§§§ÊÊÊ«««§§§åååÌÌ̶¶¶||||||ÎÎÎooo]]]eee___nnn___XXXjjjjjj   †††µµµ˜˜˜˜˜˜___RRR\\\[[[[[[hhhcccaaabbbFFFFFFggghhhhhhcccZZZSSSSSS”””ŽŽŽyyyRRRNNN rrrssssss’’’———“““ccccccbbbOOOeeeeeeccccccOOO———¡¡¡¡¡¡´´´ÀÀÀ§§§­­­ØØØ¦¦¦ÒÒÒ«««³³³»»»òòòäääááḸ¸ÿÿÿoooËËË™™™™™™ÿÿÿÿÿÿsssÌÌÌýýýýýýhhhTTTiii···tttgggiiidddfffqqqcccdddeeeccciiicccbbb```\\\aaa\\\XXX]]][[[fffbbb___iiiddd```XXXYYY\\\___^^^```eeebbbbbbdddeeebbbbbbfffbbbhhhgggfff“““mmm~~~kkk©©©ÂÂÂ{{{{{{ÝÝÝ{{{   °°°ÿÿÿÿÿÿÿÿÿŒŒŒŸŸŸŸŸŸÿÿÿÛÛÛÊÊÊêêêËËËËËËËËËÿÿÿÿÿÿ™™™™™™žžžžžžÊÊÊÊÊʃƒƒƒƒƒ£££RRRKKK,,,+++©©©nnnnnnXXXeeeaaaaaa   µµµµµµðð𘘘^^^•••›››dddZZZUUUSSScccJJJvvvdddcccVVV\\\UUURRRkkklll‰‰‰””””””YYYWWWZZZrrrrrr```qqq’’’rrrÿÿÿ“““ccc¬¬¬YYY[[[======eee——————¡¡¡¡¡¡¡¡¡ÀÀÀÀÀÀ­­­­­­¦¦¦¦¦¦««««««òòòòòòÿÿÿÿÿÿfffÿÿÿýýý¶¶¶ïïïeeeýýýbbbttt³³³iiimmmttt¦¦¦mmmdddmmmmmmccc}}}lllhhhiiicccggg```bbb^^^^^^ZZZ]]]___```cccSSS\\\dddooobbbZZZXXXaaa``````aaabbbddddddeeeddddddgggbbbhhhgggddd“““°°°‚‚‚˜˜˜lll××ד““”””¿¿¿{{{µµµðððÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸ¼¼¼ÿÿÿÿÿÿÊÊÊÊÊÊËËËÿÿÿËËËËËËÿÿÿÔÔÔ™™™ÑÑÑžžž¬¬¬ÊÊʃƒƒŒŒŒ¶¶¶£££ŒŒŒaaaXXX©©©KKK{{{QQQUUUnnnOOO¦¦¦¦¦¦EEEðððððð––––––›››cccZZZZZZCCC©©©PPPòòòÆÆÆaaaMMM\\\SSScccÀÀÀ¥¥¥ƒƒƒcccYYYWWWZZZDDDrrr```ccc___ŒŒŒ¾¾¾hhh¬¬¬ZZZhhhŠŠŠfffiiiöööñññ“““™™™ÊÊÊÊÊʵµµéé颢¢­­­ÿÿÿ———£££’’’®®®òòòÿÿÿÿÿÿÿÿÿfffÿÿÿÿÿÿÿÿÿ¶¶¶ÕÕÕýýýbbbÌÌÌÌÌ̆††yyy«««ÄÄÄlllccclll```ccc}}}lllddddddccccccaaabbbccc^^^TTT___^^^\\\ccc\\\\\\bbbttt^^^XXXXXX___```cccaaabbbaaacccpppccceeegggddddddhhhccc```°°°sss˜˜˜lll©©©úúú}}}uuummmþþþÖÖÖÐÐІ††gggÿÿÿ¶¶¶¶¶¶ÿÿÿÿÿÿÙÙÙÞÞÞÿÿÿÿÿÿÿÿÿØØØØØØÈÈÈÈÈÈÿÿÿÿÿÿÍÍÍÍÍÍkkkŒŒŒ¶¶¶¶¶¶ŒŒŒŒŒŒXXXsss{{{PPPUUUÿÿÿnnnMMM¦¦¦EEEooooooRRRPPPPPPGGGYYY???aaa©©©ŽŽŽŒŒŒcccÆÆÆÆÆÆ111SSSSSScccccc¥¥¥¥¥¥………………]]]YYYXXXXXXaaa[[[ZZZ___ŒŒŒ¾¾¾ÅÅÅZZZZZZŠŠŠŠŠŠööööööññññññ™™™™™™ÊÊʵµµéé颢¢¢¢¢ÿÿÿÿÿÿ££££££®®®®®®ÿÿÿÿÿÿââââââÿÿÿÿÿÿÿÿÿÿÿÿ¤¤¤æææ‰‰‰sssoooÌÌÌ‹‹‹ƒƒƒ†††ÄÄı±±cccccckkk```†††hhhZZZddddddccccccccc___bbb___[[[ZZZ\\\^^^```ZZZZZZaaaUUUXXXWWW___```bbbccc]]]bbbccc^^^oooddddddbbbdddkkkccccccfffjjj‚‚‚}}}ÜÜܵµµ———sssdddþþþóóóÐÐÐÐÐÐgggyyy¶¶¶ñññÿÿÿÿÿÿÙÙÙÙÙÙÿÿÿÿÿÿÿÿÿÿÿÿØØØ§§§ÈÈÈÿÿÿ§§§¨¨¨ÍÍÍkkk```ffffffNNNNNNhhhhhhgggggg‚‚‚XXXPPPÿÿÿ||||||ooommm\\\ZZZ<<>> mmmmmm„„„[[[ŽŽŽ555LLLLLLvvv>>>rrriii|||ttt¥¥¥±±±   ¾¾¾ÿÿÿÿÿÿÿÿÿææææææÿÿÿÿÿÿšššššš†††ÅÅņ††¾¾¾ooolllvvvÃÃÃvvvttt”””jjjccceeedddddd```eeeaaafff]]]eeeeeefff[[[fffZZZ```\\\[[[\\\^^^;;;FFFYYY[[[\\\```bbb___```bbbgggfffdddaaaxxxddd```bbbbbbffftttiiikkkjjj˜˜˜}}}ŸŸŸ€€€ÜÜÜeee‹‹‹}}}¼¼¼{{{ºººÐÐÐþþþþþþÛÛÛîîî···üüüçççÒÒÒÒÒÒtttvvv]]]]]]YYYYYY``````TTTkkkJJJ CCCaaa``````]]]jjj••••••sssssswwwwww```EEE^^^ÿÿÿŽŽŽPPP\\\aaa£££››››››ššš‘‘‘±±±………åå妦¦¦¦¦”””™™™XXX]]]sssJJJ```ppppppŒŒŒ©©©zzzzzzeee___ÃÃÃmmmrrr„„„[[[\\\€€€666666rrrrrriii†††ËËËÁÁÁÁÁÁÔÔÔÔÔÔÿÿÿÿÿÿÞÞÞÞÞÞóóóëëëááá¶¶¶›››ÅÅņ††ƒƒƒ‰‰‰¥¥¥llliii~~~vvv~~~eee^^^ccceeeeeeddd```eeebbbccc___eee^^^fff```___\\\``````[[[\\\ZZZfffhhhYYYWWW[[[[[[ccc___```bbb______fffaaaxxxdddcccaaadddcccccciiinnn———”””}}}ŒŒŒÌÌÌÌÌÌeeeŠŠŠrrrlll~~~ÐÐÐÿÿÿþþþ¿¿¿ïï﨨¨······çç窪ªÒÒÒ   ñññªªªvvv______ooosss```kkkžžž<<<```aaa``````]]]jjj„„„•••sssfffmmmmmm°°°aaaMMMÿÿÿCCCRRRRRRWWW¾¾¾ùùùµµµµµµ©©©©©©îîîååå©©©©©©¬¬¬¬¬¬±±±lllÝÝÝeee```zzzppp©©©‹‹‹………zzzeee___ÃÃÃmmmrrrrrr°°°SSSUUUUUUGGGCCCxxxqqq```ËËËÞÞÞíííÁÁÁ¿¿¿ÔÔÔÿÿÿÿÿÿ½½½ÞÞÞóóóóóóááá¶¶¶››››››sssqqqtttfff^^^ÍÍÍŒŒŒgggbbbeeebbbbbbgggjjjdddggg___bbbaaabbbhhhccc___aaa___XXX^^^```^^^¾¾¾¾¾¾WWWCCC]]]]]]\\\bbbaaadddccc___aaafffaaaooofffaaacccdddcccbbbbbbhhh„„„uuupppkkkvvvxxx¸¸¸ÌÌÌfffŠŠŠŠŠŠ­­­llleeeÿÿÿÿÿÿÆÆÆúúú«««½½½½½½ÍÍÍ}}}ZZZ   ËËË[[[vvv†††\\\ssssssffftttžžž___VVVVVVqqqqqqxxxjjj„„„„„„fffpppmmm[[[RRRaaa yyy€€€ˆˆˆWWWùùùùùùµµµ¤¤¤©©©ÿÿÿîîî¹¹¹©©©¬¬¬³³³lllçççÝÝÝeeeeeezzzzzz £££iiimmmhhhjjjçççkkkkkkQQQTTT??????———hhhkkkqqq™™™ÞÞÞÞÞÞÖÖÖÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼¼¼¼òòòòòòvvvªªª———lllnnnssshhheeeÍÍÍÍÍÍvvvXXXfffgggsssuuugggjjjgggggg\\\^^^aaaaaaccclll^^^\\\\\\XXX[[[``````tttdddZZZ[[[[[[___```bbb^^^cccbbbcccbbbaaaqqqfffffffffkkkjjjkkk```ccckkkhhhÿÿÿ¨¨¨aaa–––¸¸¸¸¸¸hhh«««€€€ƒƒƒ›››eee|||ÿÿÿÿÿÿ¾¾¾úúú½½½ŽŽŽÍÍÍZZZ^^^qqq£££ˆˆˆ¥¥¥ÌÌÌÞÞÞÎÎÎÎÎÎkkkkkk___eeeccciii]]]qqqjjjjjjnnnnnnVVV©©©PPP©©©SSSVVVuuu½½½½½½µµµµµµýýýýýýÿÿÿÿÿÿÿÿÿèèèèèè——————žžž‘‘‘[[[æææ¹¹¹SSSSSS§§§§§§ËËË€€€ÈÈÈ£££mmmhhhjjjjjjttt^^^QQQYYY^^^žžžžžžhhhhhh___¯¯¯ÓÓÓÞÞÞÿÿÿÖÖÖòòòÿÿÿÿÿÿÿÿÿÖÖÖ¼¼¼òòòhhhªªªªªªllllllrrrrrrqqqqqq¹¹¹iiiaaajjjjjjrrruuuuuueee___[[[```hhh^^^bbb______^^^^^^]]]]]]ZZZbbbTTTWWWQQQRRR^^^___^^^```bbb]]]^^^dddddddddaaadddcccaaafffsss§§§iiiiiihhhcccTTTÿÿÿÿÿÿvvvkkk~~~¸¸¸hhh~~~«««ƒƒƒ\\\eeerrrÎÎÎÎÎÎÐÐн½½€€€€€€lllddd­­­££££££ˆˆˆ¥¥¥¢¢¢ÞÞÞÍÍÍÎÎÎeee^^^hhhpppqqq{{{RRRnnn[[[\\\nnn```VVV©©©UUUSSSSSSuuuííí¨¨¨½½½ªªªµµµÙÙÙýýýõõõÿÿÿÿÿÿÉÉÉèèè±±±———¦¦¦£££žžž²²²[[[¹¹¹¹¹¹SSSVVV§§§€€€€€€ÈÈÈÈÈÈhhhfffZZZ”””```pppYYY©©©~~~žžž£££hhhfffÐÐЯ¯¯ÓÓÓÓÓÓÿÿÿÿÿÿÿÿÿÿÿÿôôôôôôçççççç~~~~~~˜˜˜ªªªsssuuuhhh¡¡¡nnnqqqiiiaaannn………€€€cccmmm{{{___\\\^^^___¤¤¤mmmccceee______ccc^^^cccWWW```aaaZZZ\\\^^^bbb]]]eee^^^bbbaaaiiicccdddccc``````eeetttpppmmmfffˆˆˆccc]]]ÿÿÿmmmvvvhhhuuubbb©©©ËËËÿÿÿ¨¨¨eeeeeeÎÎΗ——ÈÈÈ•••€€€hhhlllpppÿÿÿÞÞÞˆˆˆ¶¶¶°°°ÍÍÍÎÎÎeeepppzzzpppfffAAARRR²²²fffhhhóóóóóó|||–––ggggggxxxíííííí¨¨¨¨¨¨ªªªªªªÙÙÙÙÙÙõõõÿÿÿ‚‚‚777777±±±±±±¦¦¦¦¦¦££££££²²²[[[VVV¤¤¤¤¤¤pppppp€€€}}}{{{¡¡¡€€€fffmmmZZZppp‰‰‰fffmmmmmm££££££   fffýýýaaaÿÿÿÂÂÂÖÖÖ{{{bbbþþþÖÖÖôôô›››çççlllÄÄĘ˜˜˜˜˜sssuuuWWWqqqooojjjwwwrrrnnn‚‚‚xxxccc{{{{{{___fff\\\]]]¤¤¤mmmccc^^^bbb^^^cccYYY^^^]]]```\\\[[[___aaaYYY]]]```dddaaaaaaiiiccc^^^fffcccggg```ttthhhmmmhhhˆˆˆŽŽŽeeejjjmmmhhhuuu©©©©©©¥¥¥ÿÿÿööömmmeeeŸŸŸŸŸŸµµµsss]]]]]]lllpppÿÿÿÿÿÿÞÞÞˆˆˆmmm°°°¥¥¥~~~fffyyy‰‰‰‰‰‰pppAAA²²²²²²]]]|||óó󘘘———“““gggaaa´´´‰‰‰‰‰‰………ggg\\\’’’«««³³³»»»ººº‚‚‚………“““‘‘‘¡¡¡‘‘‘lllmmm………ŒŒŒŒŒŒVVVVVV¤¤¤pppeee€€€}}}{{{{{{€€€kkkmmmVVVppp^^^XXX©©©www___ÅÅÅ   pppýýýaaaÿÿÿÿÿÿÖÖÖÖÖÖbbbÖÖÖååååå厎Žyyyhhhmmm\\\______uuu¬¬¬ŽŽŽlllfffrrrjjj[[[dddbbbgggaaa___iii[[[|||```\\\]]]\\\bbb___\\\aaaVVV^^^```\\\aaa^^^ZZZ``````dddaaabbbbbbfffbbb___ccciiikkkddddddgggƒƒƒeeepppŒŒŒfffjjjffflll••••••iiiÿÿÿÿÿÿöööeeeŸŸŸ¤¤¤µµµsss]]]£££iiiiii£££ÿÿÿÿÿÿ‡‡‡‡‡‡mmm°°°lll~~~iiiooo‰‰‰ÍÍÍrrr‚‚‚ýýýaaa„„„„„„ñññÿÿÿ““““““aaa¥¥¥´´´´´´‰‰‰gggggg\\\\\\««««««»»»»»»ººº““““““¡¡¡¡¡¡llllllmmmmmmŒŒŒŒŒŒ‚‚‚VVVVVV½½½ddd••••••pppÔÔÔ‡‡‡}}}nnnpppppp^^^RRR~~~œœœ___ÿÿÿpppcccWWWZZZccccccˆˆˆ‰‰‰bbb™™™åååmmm}}}gggiii\\\hhhbbb‰‰‰ÿÿÿÿÿÿsss^^^cccccc\\\\\\dddoookkkcccaaaaaaddd|||```\\\cccaaaaaabbb```___[[[```]]]YYYaaa___``````___]]]aaabbbbbbdddfffbbbbbb^^^kkkfffdddgggYYYggg€€€pppdddfffffflll\\\•••´´´iiixxxuuuddd¤¤¤¤¤¤µµµµµµ___£££iiiƒƒƒ££££££ÿÿÿ~~~fffššš€€€ççç   uuuooo€€€ÍÍÍ‚‚‚‚‚‚aaaaaa„„„ññññññÿÿÿþþþ{{{___–––˜˜˜˜˜˜nnn©©©©©©¸¸¸mmmvvv½½½–––………ƒƒƒ²²²²²²¤¤¤iiiooo™™™wwwnnnôôôôôô{{{ddddddzzz•••¡¡¡ppp‡‡‡}}}mmmÈÈÈÈÈÈÈÈÈddd888ŠŠŠßßßÃÃò²²aaapppZZZssscccccc‰‰‰‰‰‰™™™™™™kkk†††hhhmmmËËËÃÃÆ††ÌÌÌÿÿÿggg______fffiiioooooo’’’bbbdddeeebbb___hhh^^^___```aaa```___eee^^^aaaZZZ^^^^^^YYY______```\\\___aaaaaa___eeedddbbbdddddd___dddhhh¼¼¼………eeecccbbbccchhh|||‹‹‹{{{fffùùùcccuuuuuuddd¤¤¤°°°µµµnnniiièè膆†›››»»»»»»ììì~~~fffššš€€€ççç   fffooo{{{ÕÕÕ€€€ooooooooo’’’’’’ ÿÿÿ{{{µµµ–––‡‡‡˜˜˜nnnªªª©©©©©©¼¼¼|||vvvvvv––––––ƒƒƒƒƒƒ²²²iiiiii¤¤¤   ™™™iiinnnôôô{{{dddzzzzzzHHH‹‹‹ŽŽŽgggdddQQQ©©©©©©___gggÈÈÈdddfffŠŠŠòòòÃÃÃÃÃÃaaarrr………………–––xxxÿÿÿþþþÜÜÜkkkssshhhvvvýýýyyy†††ÿÿÿrrrrrrnnnxxxnnniiiooosssqqqdddiii```aaa[[[```^^^___eeecccaaa___eee\\\bbbZZZbbbXXXZZZ]]]```___[[[fff___```___aaadddbbbkkk|||bbbiiihhhhhh```rrrfff```aaappp|||‹‹‹nnnfffcccuuuÌÌÌccc¡¡¡¡¡¡uuunnnèèèßß߆††ËËË»»»}}}||||||···¢¢¢¢¢¢ÇÇǺººeeeyyy{{{¶¶¶eeeooooooeee’’’VVVoooæææþþþõõõÄÄÄmmmoooÿÿÿÿÿÿªªªªªª¸¸¸¸¸¸§§§§§§   §§§ÀÀÀÀÀÀ‡‡‡}}}µµµ¡¡¡¡¡¡’’’’’’¹¹¹ŸŸŸŸŸŸYYYÿÿÿ[[[vvvxxx‹‹‹WWWcccTTTššššššœœœ   gggˆˆˆkkkkkkEEE˜˜˜¾¾¾®®®}}}rrr………~~~bbbfffÿÿÿÿÿÿÜÜÜkkkqqqlllnnn²²²¹¹¹±±±pppiiivvvsssjjjcccbbbccc___aaa```aaa^^^aaaaaahhh\\\dddeeeaaa^^^ddd]]]YYYbbbYYYZZZ]]]ZZZ___eeeiii___bbbcccdddeeebbbbbbkkkcccggg```^^^lllrrrfffrrraaabbbkkk[[[```]]]ccc———uuubbb¡¡¡€€€wwwwwwþþþñññ›››ÿÿÿ„„„ÖÖÖÖÖÖ···sss¢¢¢ôôôºººccclll___¢¢¢hhhrrruuueeeZZZ```ææææææþþþþþþÄÄÄÄÄÄoooÿÿÿÿÿÿªªª›››žžž¸¸¸ûûû§§§      ÀÀÀ‡‡‡‡‡‡µµµžžž¡¡¡šššššš££££££€€€‘‘‘DDDˆˆˆˆˆˆXXXXXXUUUsssÝÝÝ^^^EEEÉÉɈˆˆlllgggkkk˜˜˜˜˜˜uuuuuuoooooo˜˜˜˜˜˜kkkfffÿÿÿééérrryyyqqqzzzllllll¹¹¹¹¹¹mmmèèèuuulllvvveeeooocccdddbbb___```kkkddd^^^aaa___hhhjjjdddddd^^^aaaYYYcccVVVYYY```XXX^^^[[[```eee^^^aaaccccccdddeee```\\\^^^kkkccc```^^^llloooppp–––………ÄÄÄ```kkkfffnnn[[[SSSmmmlllccceee~~~mmmmmmþþþþþþ›››óóó„„„ÞÞÞÞÞÞgggmmm———ooo¯¯¯ggglll°°°¢¢¢ˆˆˆrrrËËËiiijjj€€€ªªªªªª‹‹‹ôôôEEEooogggUUUÿÿÿ———jjj]]]›››ûûû¨¨¨      fff©©©žžžžžžtttœœœzzzzzz¬¬¬£££ÐÐÐÐÐÐWWWZZZ§§§………………çççUUU^^^^^^XXXXXXllllllhhhçççrrrrrr””””””nnnÝÝݰ°°˜˜˜ƒƒƒwwwÿÿÿééérrrrrrzzz‚‚‚``````yyy©©©èèèýýýuuuhhhvvveeeccc]]]gggiiieeegggkkkhhh^^^XXX]]]YYYZZZddd```[[[```cccaaa___]]]___\\\^^^ccc``````bbbaaaccciii```ZZZhhh```[[[kkknnnlllcccbbblll†††fffoooÄÄÄeeettt˜˜˜kkkiiillllllWWWÏÏÏÏÏÏ___ooo›››bbb‚‚‚ŒŒŒŒŒŒÞÞÞkkkggg——————nnn¯¯¯dddeeeÖÖÖbbbbbbWWWËË˪ªªddd………§§§ªªª‹‹‹ôôôBBBoooooo‹‹‹‹‹‹¡¡¡¡¡¡‡‡‡‡‡‡000hhhkkk   eeeddd¡¡¡ÞÞÞÞÞÞ““““““õõõºººeeeCCCWWWZZZ§§§ggg^^^ZZZoooUUUÓÓÓ………¼¼¼nnnmmmçççííírrr”””nnnnnn°°°°°°¡¡¡rrrØØØØØØnnnggg‚‚‚```bbbaaayyyyyyýýýýýý___bbbdddeeebbb```lllggggggggg]]]zzzTTTVVVXXXZZZiiiiii___[[[iii```]]]\\\\\\^^^ZZZZZZ```[[[bbbbbb```aaaYYYbbb```\\\hhhggg\\\uuullliiimmmbbb‹‹‹fffhhhŒŒŒuuuhhhttt‡‡‡iiibbblll\\\ªªªªªª```[[[iii„„„zzzÂlllŒŒŒŒŒŒ‰‰‰rrrÿÿÿÿÿÿ„„„ŠŠŠooodddeeebbbbbb]]]]]]©©©www\\\cccwwwwwwHHHVVV___‹‹‹rrr¡¡¡˜˜˜‡‡‡¬¬¬åååsssvvvvvvvvvfff¡¡¡šššÞÞÞÃÃÃÃÃÃÖÖÖ\\\eeeeee¦¦¦oooqqqjjjhhh›››ccc``````“““¼¼¼mmmmmmffffffxxxxxx{{{ccc€€€€€€°°°hhh¡¡¡¿¿¿°°°ØØØnnnggg```llldddddd¦¦¦ˆˆˆ{{{pppaaabbbdddooofffsssˆˆˆZZZ[[[^^^‚‚‚XXX¤¤¤]]]______iii^^^]]]aaa___```VVVZZZ```ZZZ\\\[[[```[[[aaacccdddaaafff[[[fff^^^ccchhh\\\uuuiiiaaa‡‡‡ccceeeuuuœœœfffuuuƒƒƒ“““nnn___jjjtttcccnnn```dddüüü„„„ëëëÿÿÿ›››gggyyyyyy‰‰‰‰‰‰ÿÿÿ„„„„„„bbboooddd|||mmmmmmhhhggg“““©©©NNN\\\[[[aaaxxx……………… fffUUU[[[UUU˜˜˜˜˜˜åååååå———‹‹‹‹‹‹ššššššyyyggg^^^^^^ƒƒƒXXX[[[\\\\\\]]]ÿÿÿ¬¬¬ŸŸŸnnnddd¶¶¶kkkqqqnnnfff”””xxx{{{ÍÍÍ···€€€°°°hhhÿÿÿÿÿÿ………………ffffffeeelllddddddˆˆˆˆˆˆ{{{———pppmmmeeeaaafffsss]]]QQQdddYYYYYYUUU¤¤¤\\\JJJJJJZZZ]]]^^^bbbaaa^^^^^^]]]^^^WWW]]]ZZZ```ZZZdddcccdddbbb```ooo\\\^^^bbbeeeZZZdddiiiaaafff‡‡‡hhh]]]‰‰‰[[[{{{ƒƒƒmmm±±±nnnvvv€€€ÜÜÜÜÜÜÿÿÿjjjrrr„„„êêêëëëÔÔÔ››››››ÓÓÓWWW²²²ffftttQQQfff}}}dddgggˆˆˆmmmpppnnn×××SSS[[[[[[SSSgggaaa………………rrrrrr]]]¤¤¤|||[[[ZZZfffmmmKKKiiiÙÙÙeee‡‡‡‡‡‡OOOZZZeee^^^†††XXX‘‘‘‘‘‘QQQÿÿÿÿÿÿ¾¾¾jjjÜÜÜvvvhhhddddddÕÕÕqqqqqqnnnnnn““““““ccc………€€€ãããfff±±±ÿÿÿeee………ØØØfff}}}fffiiigggfffÿÿÿêêê———¤¤¤‚‚‚dddeeeaaa]]]WWWbbbbbbZZZYYYPPPnnnnnn\\\©©©YYY```\\\___aaaaaa```ZZZTTTaaaZZZ___cccVVVaaaooojjjbbbooofff___bbbddd___ddddddvvvggggggpppccccccƒƒƒ[[[^^^^^^hhhhhh|||‹‹‹¯¯¯ÜÜÜÿÿÿVVVQQQVVVlllfffgggssssssÓÓÓÓÓÓWWWqqqffftttfffªªªbbb[[[fff{{{mmmppp¥¥¥×××¶¶¶±±±nnn```???RRRRRR‡‡‡ŒŒŒWWWXXXÐÐÐËËËÝÝÝ»»»ãã㦦¦///bbbOOObbbÒÒÒºººtttPPPOOOTTTssssss???jjjdddmmmÿÿÿŒŒŒ¨¨¨æææ«««ÿÿÿooo]]]XXXCCCppppppãããããã±±±±±±¾¾¾lllßßßßßßJJJuuueeebbbgggfffêêêêêêuuuiiibbb\\\cccfff^^^```aaabbbdddXXXˆˆˆaaa~~~aaaWWW___XXX```dddaaa]]]```YYY]]]ccc[[[```]]]bbbaaa\\\ffftttVVVfff___aaahhhZZZaaadddaaa———gggdddjjjggg””””””iii^^^eeerrrppp]]]llllllŒŒŒaaajjjQQQVVVCCCUUUUUUffffffHHHrrrvvvËËËââ⤤¤bbb|||fffvvvvvviiiiiieeesssnnnŠŠŠ>>>???ƒƒƒRRRmmmccchhhÞÞÞ ÐÐÐËËËnnn»»»»»»kkk:::MMMKKKbbbjjjºººeeeYYYcccdddmmmnnnYYYYYYeeemmmYYY”””sssÿÿÿfffýýýÿÿÿ[[[\\\{{{JJJ\\\VVV}}}†††ŒŒŒ¢¢¢lll½½½ßßßRRRggguuuiiidddiii___ÊÊÊ\\\dddiiiYYY\\\[[[kkkgggfffbbbccckkkXXXˆˆˆ___cccYYY___XXX```gggZZZZZZ]]][[[]]]]]]YYY]]]```bbbbbb^^^fffbbb†††```fffbbbaaahhhZZZaaagggmmmccc………gggdddgggËËË”””uuussscccdddjjj]]]YYYllltttMMMjjj______FFFRRRbbbggg ËË˵µµeee---TTTOOO@@@CCC%%%fffaaa¶¶¶¶¶¶ÌÌÌÞÞÞMMM™™™ääärrrmmmmmmccc^^^\\\OOOÐÐÐBBB~~~SSSzzzzzzsssDDDHHHÓÓÓjjjgggYYY´´´cccdddmmmnnnYYYTTTUUU{{{```rrrŠŠŠbbbýýýëëëGGG[[[]]]ÁÁÁ[[[aaa††††††ŒŒŒŒŒŒ½½½½½½```PPPcccõõõ¯¯¯dddiii„„„\\\\\\nnn©©©cccqqqlllkkkgggffffffyyyeeedddjjj___bbbjjjeee___nnnggg```hhh```bbb^^^VVVcccYYY\\\YYYaaabbbffffffkkk‰‰‰eeedddaaabbbeee[[[mmmmmmccc………mmmdddfff±±±±±±jjjuuuÕÕÕddddddjjjiiiÅÅÅóóómmm„„„HHHZZZbbbggg©©©iii………BBB[[[~~~@@@WWWwwweee«««UUUooocccccc¡¡¡ttt££££££mmm```^^^bbbsssSSSzzzzzzOOODDDœœœˆˆˆ~~~~~~‚‚‚•••gggcccggggggccccccWWWVVVWWWWWW©©©[[[ëëë[[[hhh¶¶¶WWW\\\\\\\\\mmm[[[gggcccccc   dddaaaxxxiii___nnn©©©cccqqquuuyyy^^^^^^dddbbbaaadddjjj___^^^nnneeeccceeeddddddooo```]]]XXXZZZYYYZZZ]]]___aaabbb]]][[[[[[bbbaaaggg___\\\eeeÉÉÉ]]]llliiifffddddddmmmfff±±±‰‰‰vvvçççhhh‚‚‚___eeeÅÅÅmmmmmmRRRRRR^^^OOObbbhhhbbbiiiPPP NNNSSS¢¢¢ ««««««rrr“““gggdddKKKddd   £££mmmëëëyyyqqqbbb™™™UUUbbbbbbqqqqqqqqqaaa………~~~rrr‚‚‚bbbcccgggSSS<<>>>>> ‰‰‰‡‡‡ OOOPPPmmm\\\^^^tttkkkdddbbbLLLmmm¸¸¸ÊÊÊÊÊÊddd;;;dddttt™™™]]]ggg±±±LLL   ÿÿÿ×××dddðððooo]]]mmm××פ¤¤hhh°°°¤¤¤ÅÅÅccc]]]UUU˜˜˜¤¤¤AAA………………Hj,.hdf4-hdf4.3.1/hdf/util/testfiles/head.r8000066400000000000000000002503701503061704500177320ustar00rootroot00000000000000333333939333339333933393d393333333393339993j39^93939d9933333333339933^9dd9d9d3dd33d3d99393333333399d3d9d9d9^9d3d3ddd99d9^9333933333939399^9d3333d9d3dd9d9d9ddd393d93d993333393393d33933939d9ddd9d9dddd99d9^93d9d3393933339339ddd933d93d9^9d99d39d9d9d9^9d3d99^993d39393333939^93393d39d9^d9d9^9d9ddd9d3d9d9d9dd39^9d3d339333333933939^93d9d9^d9dddddddd9d9d9d9d9ddd93d9393d9d3d999339993dd3d939d933d9d99dd9d9d9ddddddd9dd9ddd9ddd9d939^9^3d3333393^9939d9d3dddd9d9dd9dddd9d9d9d39ddd9dd9d93d9d3d3d939399393399d339d3d9^d3d939d9dddddd9dd9dd9d9dd9d9d9dddddd3d3993d9^93d39393933d9d3dd9d3993d3dddd99dddd?dd9dddddd9dddd9d99d9dd9dd9^99^939^d3393393d39^993939d3d93ddd9dddd9jdddddd9dd9dddd9ddddddd9ddd9d339d3d399d3d3393d9d3d9d3ddddddddd9jdd9djdd9dd?dddddjddj9dd9d9d9dddd9ddd9d3d99^9^99393393d9d3d9d9dd9dddj999dddj9ddjddddddjd9j9ddjddjddjddd9d9d9d9dd9d9^939d9^d3d3939^9d3d9d93d3dd9d9ddddddddddjdd?djdjdjdddd9d9dd9dd9dddjddd9d9dd9d9d9d39d999d339d39d9d39ddd9ddddjdd9ddd?djd9jddddjd9dd9djddjdjdjddjd?dd9jdddd9ddd9^d9d3d3d3d9933339d9d3d9d9d9dd9dj9dddd9djdjddjdjjdjdjdjdjdjdjddjdjdd9ddddddj9d9dd9dd93d9d9d9^9^d39939d3d3d93d9d^d9dddddjd9djddddjdddddjdddjdjdjdjdddddjdjddjd9jdddddd9d9dd9dd3d3d9d99d3d3393d99d9d9^9d9dd9d9ddddddd9djd9ddjdjd9jdddjdjddjjjdjdjdd9jddddjd9d9ddd9d9d9d99d39d3d39d33393d9d^9d3d9d9d9ddddjd9d?d9djdddd9jdd9djdjdjdjdjdddjddddjjddjdj9djdjddddd9dd9dd3d9d3d9d939d339^9d9d9d9dd9ddddd9d9ddjddddjd9djdjddjddddjdjddddjjdjdjjdddjddddjdddddj9jddd9d9dd9d9d9^9dd93993d9d9d3d9^d9d3d9d9ddddj9dd9d9ddddjdddj9jjjdjdjdjjdjddjdjdjjddjdjdddj9jd9ddjdddd9d9dd3d99^93dd3d3399^9^9d9d99d9ddddd9dj9ddjddjdjdjddjd9dddj•jddjdjdjdjdjdjddjdjdjdjdjdddddddd9d9dd9d9d9d^9d9^993d9339d3d9d93d3d3dd9d9d9dddddddd9ddd9djddjdjjdddjjdjjdjdjddjddjjdjdjdddj9ddjdj9jddjddddd9d39d9d9d9dd9^9339^9d9d9dd9dd9d3dd9dddj9jd?djdjdjdjddjdjdddjjdj•djj•djdjdjdjdjdjdjddjdjdjdddd9d9d9ddddd9d3d3d9^99d9d339d9d9d3d9d3d9ddd9dddd9ddddddddd9ddjdjdjdjjj•djdjdjdjdjj•djjdjdjdjjdjdjddd9jddjddd9d9d9d9dd9d9dd9d^93d9339d3d9^9d93d9d9d9dd9d9jddjd9jdj9jdjdjdjdjdjddjjjdjjjjjdjj•djdjddjdjdjdjddj9d9ddddddd9dd9d9d9^9d9d9^9d33d9d9d9d9dd9dd9ddd9dddddjdd9djddjddddjddjdjdj•djdjdjjddjdjdjjdjjd•djdjdjddjdjdddjdd?dd9ddd9dd9^d9d9d9d9d9d9339d9dd3d9d3d9d9ddd9dd9jd9ddjdjdjdjdjjjdjjddj•djjd•j•jj•j•j•j•dd•jdjdjdddjddjdd9jdddd9jd9d9dd9d9d9dd9d^9d3d9d33d9dd3d9d9dd9d3dd9dd9dddjdd9dddjdddjdddddjdjjdjdjjdjdjdjdj•j•jjjjdjjjdjj•djddjdddjdjdddddd9dd9dd9dd9dd9dd9d3d9939d9d9d9d9d9dd9dd9dd9ddjddjdjdjddjdjdjdjjdjdj•d•j•j•jj•j•jdjd•d•jd•djjdddjjdjddjddd9djd9j9dd9ddd9d9dd9d9d9d9d9d^93d93dd3dd9d^9dd9d9dd9dddd9dddd9jdjdjddjdjdjdjdj•j•djjjjd•j•j•jdjdjdjjdj•jjddjdjjdjjdjddddddddd99dddd9dd3d9dd9^9d9d399d9d9d9d9dd9d9dddd9dddd9djdj9jddjdjdjdj•jd•j•jdjjj•jjj•j•jjdjj•j•j•jd•jdjd•jdjjddjddjddj9jd9j9ddd9d9dd3dddd9ddd9d9d933dd3dd9dd9dd9ddd399ddd99ddjd9ddjdjdjdjdj•djjjj••jd•d••jjj••j•d•jdj•j•djd•djd•djjdjdjdd9jddjddddddddd9d9d9d9d9d9ddd3dd93d9d9d9^9dd9ddd9d9dddjddddj9djjdjdjddjj•jdjd•jdjj•djdjj•jj•jj•j•jj•jdjdjd•jjjdjjjjdjdjdjddjdddj9dj9d9dddd9dd9dd9d93dd9d3d39d9^d9dd9d9dd9ddddddjd9dd9ddddjdjdjd•jdjdj•djd•j•jj••j•j•jjjdjd•dj•j••jjj•d•jd•djjjdjdjdjddjddjd9djd9d9dd9dd9ddddd9d9d993d9d9d9dd9dddd9d9d9d9dd9dd9djdjdjdjd•jjd•j•djj•jj•j•••p•j•j•j•j•j•jj•djj•••djjj•jjjjdjddjdjddd9jdddjddddd9d9dd9dd99dd9d9d^d9d9d3dd9dd9dd9d9ddddd9dd9dddjddjdjdjddjdjdj•djd•j•jdjjjj•j•jd•jj•j•j•j•j•jdjj•j•djj•jjdjjddjdjdjddjdddd9d9dd9dd9ddddd9dddd99d3933d9d99dd9ddd9ddd9d9dddddd?dd9jddjjdj••djd•jdj•djjj•djjdjdjjj•j•j•jj•••j•jdj•jjjdjdj•djjdjdjddjd9jdjddd9ddd9ddd9d9dd9d9ddd9ddd9d9dddd9dd9d9dd9dddd9d9d?dddjjdjjjj•jj•jjd•jjj•jj•d••j••j••j•j•jj•jjjjj•j••jd•j••j•djd•dj•ddjddjddd9jdjdd9ddd9dd9dd9dd9d9d9d9d93d9d9d9dd9ddd9ddd9d9dddddd9j•ddjdjjj•j••j•djj•d•jd•j•p•j•j•jj•j•j•jjj•jjj•j•j•j•dj•jj•jjjddjjdjdjddjdd9d9jd9ddd9dd9dd9dd9dd3dd9d39ddd9ddd9ddd9ddd9dddd9d?dd9•jdjjd•jjj•jjjd•j•djj••jj•j•jj•j•j•j•j•j••j••j•j•jj•jjj•jd•jdd•d•jd•djdddjddjdddddd9d9dd9dd9dd9dd9d9dd9d9^9d9dd9ddd9ddd9dd9d9ddjddjj•jdjd••jj•jj•d•jj•dj•j•j•j•dj•jjjd•jjjjjj••j••j•j•jj•j•jjj•j•jjjdjjjj•jdjddd9djdd9dddd9dd9dddd9dddd9d9d39d9ddd9dd9ddd9dd9ddjddjd9djddjdd›•jj•j•jj••••j•›j•j•j•j•j•j••›•j••j••jj•jjj••j••jj•jjjjjd•j•jjddjjddjdjdddjddj9ddd9dd9d9ddd9d9dd9d93d9dd9ddd9dd9dddjdd9d9dd9djjdjdj•dj••jjj•jj›•›j•›jjd•jj•j••j•j••jj•j••j•j•jj•jj•••j•jjjjd•jd•j•j•d•jdjjdjdjd9djdddj9dd9ddddd9dddd9dd9ddddd9dd9ddd9ddd?d9ddjdddjddjdjdj•dj•jj•j•j•j•jdj•jd•j•›••j•jj•j•j••j•jj•›•j•••j••jj•j••••••j••j››•j›dj•jdjdjdjdd9jd9dd9ddd9d9ddd9d9d9dd3d39d9dd9dd9ddd?dddd9d9d9dddjjd•djjjj•j•jj•j•jdj••jj•j•j•jj••••j••j•j•jj•j•••p•›j•j•jj•j•jj•j•››••››d•jd•j•djdddjddjdddjdd?ddjdd9dddddd9d9d39dddd9dddd9dddd9dddddjdjdjjdjdj•d•jd••••j•j•••jj••j•j•jj•›j›j›•p•j•j••j•jj•jj•j•j••j•j•j•j•›•j•jj•›j••jdjjdjjd9djddd?ddddd9dd9dj9d9d9ddd9d9dd9dddd9ddjd9jdd9d?dddjdjdjd••›Æj••›•j•j•j••j•j›•›•jj•j•›••j•j••›•›•›••j•jj•jj•j•j›•j•j•jjjj››••jd•›••jj•djdjdjdddjddd9jdddjddd9ddddd9dd9d9d9dd9d9dd9d9ddd9dddddjddjddjdj•›•j›jj•jj•j•j•j•••›j•••›••›j•j••j•j›j•j›••p••••••j•j•j•j•j••••d•p•›j•jjj•jdj•jdjddjd9ddjdd9jd9dj9dd9d?dd9ddd93dddddjd9djddd9djdjdjd9jddd›Æj•›jj•j•jj•••j•j•j•j›j•j›•›j••j•›•›j•j•j••j•p••››j›j•j•j•j•j•j•››j•••›•j•j•j••jjjdjddjdjdd9dddddjdddddddddd9d9d39d9d9d9ddd9ddjddddd9djddjj›››jdj•dj••••j•pj••j›•jj••›•jj••j•j•j•›j•j•jj•j••j•›••›•›j•j•j•j•jj•››Ì•j›•j•›Æj•jdj•jdjdjdd9jdjd9d9d9d9d?d9d9dddd9dd9dddddd9ddd?d9dj9jdddjdj›d•jddj›•j•j›››•j•j••jjj••›•j••jÌÌ›››•›••›•›•››•j›•jj•j•j••j•j•j•jjd•››››•›››••››•›j•d••djdjjdjdddjddddjdddddjdd9d9dd99dd9d9d9jdd?dddjddddjdjj•djdjddj•›•›j•••••jÆÌj•j•››•›•j›Ì•jÌ•›•›j•›j••›•›••j••j•j•j•p••j•j›•Æ›••••j••›››j•››••jjjjjddddjd›d9d9dj9ddjd9d9ddd9d9dd9d9ddddjdd9ddddd9djddjdddjdjj•j›dj•j•j•›jjjÆ›j•j•›Æ››j•›•›•••jj••›j•›j›j›•››•››•›•›•›•j•›j•j•›Ì›j›j•j••›››•d›••j•j•j•jdjddd›djdjddd9dddjdd9dddd9d39dd9d9dd9dddd?ddjdd9jddjjdjdÌj•dd›•d•›•j•›Æ›j•›Æ››•j••››•››j•j•jj••›•••••›j•›•j›•›j•›•›•j•j•j›•››••ÌÌ•›ÆÆ›››j•›j•jjdjdjj•jd›djddddjdd9dd9dj9d9dd9dd9dddddjddd?dddddddjdjdj•Ìj•ÌÆj•d››d›j›••›•›j•›Ì››•j•j›•j•jd•j››•›•›•j›j›››•›j•›•›••j›•j›jÌÆj•j•›››j•ÌÌj•ÌÆ›•››••j•›jd•dj•d›djdd?dd9djd9jddddd9ddd99dd9d9dd9dddd9jd?dd9dddd¡ddýÆÌdj››dj•••››››ÆÆ››ÌÆ››Æ›Æ¡••j•j•››•››•j››•j•›››•›•j›•››j•›•••ÆÌ›ÌÌÌ›•Æ›••ÌÌ›•ÌÆ››››•j••jjdjjdjjdjjdddddjddddd9d9djd9d9dd3dddddd?dd?ddddjddjdjjdjÌdýÒd•djdjdjj•››Æ›Æ››Æ›•›•›Æ››Æ›››Ìý›•›•›••›•››Æ›••••››•›j•j••jjjjj•ÌÆÌÌÆ››Æ›››Ìý››ÆÌ••›••jÆ••jjddj•dÆjdjdj9dd9jd9dddd9ddd9d99dd9d9ddddddd?dd9djdjddjjdd•djdjdjd••Ì•›Æ¡•››››•j••›››•›•››ÆÌ›•››•›j•›•›Æ››•j›j•›•›••›››•j•jjd›››••ÌÌ›••›••¡ÆÌÆ•›•›jj››j•djdd›9•d9ddddjdddddj9ddd9ddddd9ddddj9d?jdjddjdddddjdjddj•jdddj•j•ÌÌ››Æ›•›•››•j•›j•››•••›•••›•••››•›››››››••›•›•j›j•••››•›••jÆ›•j•ÌÆ›•›•›•¡ÆÌ›››•jj••j•jj•j›jdjddjd9dd9dj9ddd9jd9d9d99dd9jd9dddddddddjdjdjddjdjj•jdjjj••¡•›ÌÌj•›››Æ••››››••j•›j››j•p•p••›•›•›•›•››•›•›•••›j›•••›››Ì•jý›ÆÌjÌ›Ìý•›Ì÷p•Ì››•›dj••j•dj•d•jddj9djdjddddd9jdddddd9d9dd9dddddjd9jd9j9ddjdjdjjddjddjj••j•›•ÌÌ••››Æ›•p›Æ›Æ•›••ÌÌ›•›Æj•j•›j›j•››•›••››•›j›•p•›•p›››•›ÆÌ•jÆ›ÌÆjÌÌÌÌ›jÌ÷•›j•j•›djjdjj•jddjjdddddd9dj9jdddd9d9d9dd9^9ddd9dd?ddddjdddjddd9dddjdjdjdj•j••›•›Æ››Æ›Æ››Ì›Æ›•j››››ÆÌ›Æ›•••j•••›•›››•›j•›•›••›••›••••›››ÌÆÌj•›Æ¡ÆÆÌÌ›•jd›››•j•j››djjddjj›•jdddjdjdjdddddj9ddjddd9dd9ddjddjddd9ddd9jddj9jdjdjdjdjd›d•j››j››ÆÌ›Ì›››ÌÆÆ¡•j››Æ›•››››•››››››j›••••j••j•›j•p•j•jj•jj••›ÆÌ›ÆjjÌÆ¡›ÌÆ››Æjd•››••›d••j•dj•dd›•djddj9ddd?dd9dddd9d9dd9d9dd9d9d9ddjdj9jddjdddj•djddjd•j•j•jÆ›•›Æ›ÆÌ››Æ›ÌÌÌ›•ÌýÆÌ›•j•›•›››•›•›••››j•›•›Æj••›••›j•›j•j•j•››Ìƛƛ›Æ›Æ›››Æ›Æ››•›•››•jjd•jjÆdj•jdj9ddjdddjdjdj9djddd9ddd9dddddjd9dddddddd?djddjdjdj•j›•jj•j•›Æ››ÌÌÌ›•››÷›•Ì÷ýÒ÷Ò•›Æ›ÆÌ•›•›••›•›•›•›•››››•p•p•›•›•›•››•››ÆÌ››Æ›Æ››Æ››ÆÌ›Æ››•jj•j›••jjjdjj•jddjddj9ddd9ddddd9d9dd9d9dd9d9ddddj9djdj9ddjdjddjddjd›•jd•j••Ì›››Æ›Æ›•ÆÆj•››••••›•››››››››•››j›•››•p•••››••›••›•›•›•››Æ••››Æ››ÆÌ›••›Æ›•›j•Æp•j•••jjÆjd›j•d•djddjddjdjddjdj9djddd9d99dddd9djd?dddjdddjdjddjdddjdjj•›d•j•p•›•››››•›Æ››•››››•p››••›Æ››••›››››•j›•›•›››››•j•››•j›•››•››››••›Æ››ÌÌ›j›ÆÌ›•›•››•j•j›••j••dj•jjddjddjdd9dd9dd9dddd?ddddd9dddddddddjdd9jddjddjdjdjdddj›Æj••›•›•››Æ›•›Æ›››Æ››››Æ››•››•››•j•j•›•››•››•›››ÆÆÌ››•j›•›•››•›Æ›››ÌÌÌÌÌ›•›÷ÌÌÌÌÆ›•››•›•jj•jj•jj•djjdj•d9dd?ddjdjdddjd?dddd9d9dd9d?d9jdd9djddjdddjdddjdjdj••jdjjj››•›››››ÆÌÌ›ÆÌÆ›•››Æ››•j›•›••••j•••••›••j•›Æ›ÌÆ››Æ›››••››››Æ››ÆÌÌÌÌÌ›•›Ì÷ÌÆ¡Ì›•››ÆÌdjd•••›•jjdjdjdjjdjddjddjd?dddddd9dj9d9dddddddddjdjdddj9djdjdjdjddjdjdj›j•›j•ÆÆ›•Ì›•›•›››››•••j÷Ì›••›››j••j•j›•›››•›•pÆ››Æ››Æ›•jj•››››ÆÆ›•j••›Æ››•jjÆÆÌÆj•››ÌÌdjj•j›d›••jddjddddjddj9dddd9jdjdd9dd9ddd9djdjd9dd9dj9ddjddjjdjjdjj•j•jd•j›j•›Ì•jÌ÷Ì›•›•››Æ••›j•jýÌ•›ÆÌ•››››››››•›•›j•••¡Æ›Æ››••››••›•›Æ¡Æ››•›•›››••jj›Æ¡Æ••j•››•djjj•dj•jjddjdjddjddddjdjddd9d9dddd9dddd9d9djddjdddjdjdjdddddjdjjj•j•d››dÆ›››÷›››•››Æ››››››Ì›•j•›•›Ì›•›•›••›•››•›•››››•›•›•j›•››•››››››ÆÆ››ÌÆ›•›ÆÌ••›•jj••j••›j•d•jdj›jjdjddjdd9jdjd9ddjdjdddj9dd9d9djdddd9ddjdjdddjdjdjdjdjdd••jj•••›Ì›ÆÌÌÌ›•›Æ›Ìƛƛ›•›••›•››•›•›•›››•›››•›•›•›Æ•j•›j•›•›•Æ¡•••ƛƛ›Ì•›ÌÆ››•¡Ìj•››•j›jjj••j•jjjddjjddjdd9jddjdddjdd9ddj9ddd9dddddd9djdjdjdd9djdjddjddjdjdj›•j•j•›jƛƛ›ÆÌ›ÆÌ•››Æ›ÌÆÆ›••›•›•››››•›••›•›••›j••››j•›j••›•››››•›•j••››››Æ›•Ì››••••j•›•›j••jj•j•djjj•jdjdjdjddjd9djdjddjdddd9jd99dd?ddjdddd9jdjddjddjdjjjddjd›djj•›Ì•››•›Æ¡Æ›ÌÌ̛ƛÌÌ››•››•›•p•ÌÆ›•››•›•›•p••›j•›•j•j•p•j››•››•›•p••›Æ››Æ››Æ›››j›•j•›j•›••dj•j•jdjd•j•djdddjdddjddd9dd9jdj9dddddddddjd9d?ddjddddjdjdjdddj•jjd•jdÆÆ•››•›ÌÌ•››ÆÌÆÌ›ý••››ÆÌ•›››••j›››jj•j›•››››•››•j•›•••››•›››•››•Æ››•jÆ›ÌÆ››•›•›•›•››•j•›j•jd•j•d•jdjdddjjddjdddjdjdjdjdddddd9d9d9djd9djdddjddjdjdjjddjdjjddj•••››jÌ›••ÌÌ›•›››Æ¡›Ì÷Ò•›››Æ››Æ›•j•••j••j›•›•›••••›j•jj•›j›•›•›››•›››Ì›››•››ÌÌ››Æ›•›•p•j›•j•jj•j›jjjj•ddjjdddjdd?djd9ddd9dd9d9jdd9d9dd9dddddjdddd9jdjddjddjd•jdj•j•›j•›jj›››•ÌÌÆÌ›•›•j•›ÆÆ››••p•››ýj•Ì››•›•j••j•››•››••›j••j•›Æ›••••››Æ››•j÷ÌÆ•••››››••j•›j•j•dj••jddjdjdjjjddjddjddjdjddjdjddd9ddd9dddjd9dj9dd?djddjdjddjjdjddjdjjj••››••››•Æ›ÆÌ›•›Æ›•›Æ¡Æ››•j•›››ýý•j››•›•›j•j››››•›››••j••j››•›j•››››Æ›Æ•jÌÌ›j•›••›•›j•j•jd••jd•dj••jdjdddjddjjddjdd9jddddjddjd9ddd9ddjddddjddddjd•jddjddddjdjj•d•j•j›••ÌÆÌÌÆ¡ÆÌý›››››ý›Æ›Æ››Ì••••››•›•›››•››››•ƛ̛››››››ÌÆ›•••››••••›Æ›Ìdj•j•›•›››•›••jj•jj••jjjd•›dddjdjdjdjddddjdddd?djd9dddd99dddjddd?djddjjddjjddjdjdjddjd••j••››••›ÆÌ›››Æ›ýÌÌ›•›Æýý›Æ›Æ›Æ¡•›j•›•›•›Æ›››•›•›ÌÆÌÆ›ÆÆ›Æ›Ì̛ƛ›•›•›j•jÌÆÌÌj•jj•›•›››•›•••jdjj•jjdjdjjdjdjddjjdjdj9djdjdddddd9d?ddddjd9d9jddddjddjdddddjddddjdj••j•›j•››››Ì›Ì÷ýý›•ýý••Ì•›•›•››››Æ›•››•›•›››•›•••›•››•j••›•›•ÌÌÆ››››››››ÌÆ›››••›•ÆÌ››••››•p•j•jd•j••jdjddjddjdjdddjddjddd9jdj9jddddd99dddjddddd?dddd9jdjdjdjdjddjdjjj•›j•›•••›››Ìýj››ýd›ÆÌÆ›•›››•›•›•›››•›•›•›››››•›•›•›•j•››•›ÌÌ›››ÆÆ›Æ›ÆÌ•›Æ›Æp•››ÆÌ››j•››•›•›•j•dj•jdd•jdjdjdddjddjddjdjdddddd9dj9jd9djdd9djd9jddj9jddjdjddjddjddjj•j•j•›››•››Ì÷Ì››••dÒý››Ì››Ìƛƛơƛ•›•›j•›•••••jj•jdd¡››••›•›••••››››•››ÌÌÌ›››•›•j••›Æ•›››••j›•jjjdjdj•jdjdjjjdjjddjdd9djdjdjddj9ddddd9djdjddddjdddÆdjddjdjdd?djdjj•j•››•jÆ››Ì÷Ì›•ÌÌjd÷ýýÆ›•Ì››Ì››Æ›ÌÆ››•j•›•jj•j••›Æjj›Æ››•›j••›j•j•›Æ››•Æ›Ì̛ƛ›•››j›•›››•›››•›j•›Æjjdjdddjdddjddjdjdjdjddd9jdj9ddd9d9ddddd9djddd9jdýjdjddjdjdddjdjj•••›•ÌÆ›ÆÌý•›Ì÷ÌÌj››Æ››ÌÌ›ÌÆ›››Æ››ÆÌ›Æ›•›••›•ÒÌýÒ•Æ•›••›•Ìj›j•›•››››››ÌÌ•›››ÆÆÌ››ÆÌ›ÆÌ›Æ››•›••j•››•ddjddjdjddjddjjddddjdjddjddd9dddd9dj9jddd?djdjdjdd9dj9djdjddd•j•j›j›››•jÌÆ››ÌÌÌÌ•›Æ›Æ›Ì÷ÌÆ›Ì›•ƛƛ̛››››•j›j›•ÌÌ÷››•›•›•›ÆÌj•j•››Æ›•Æ›÷ÌÆ••›Ìƛƛ›Ì̛ƛƛ÷ÒÆ›››••••j•jdjddjdjdjdddjdj9dddjddjd9ddjd9ddddddjdddddÌddjdjddjddddjdj•jj•j•Ì•››ÌÆ¡ÆÌ÷›Æ›•››››Æ›•ý›Æ›Æ›››››ÆÌ›Æ›Æ››Æ›ÆÆÌ›Ì››››››Æ››Ì›Æ›››•j••››››ÌÌÌÆ››››ÆÆ››Æ›ÌÆ›ÌÌ÷›Æ››•p•jjjddjddjdddjjddddjdj9ddjd9dddddd9ddjd9ddjd?d›dj9ddjddjdjd9jjdj›•››ÆÌÆýý››ý̛ơÆÌ̛ƛƛ›•›Æ›Æ›Æ›Æ››Æ››››Æ›Æ›››Æ›Æ››•›››Æ¡Æ›Æ››››••j•››•››ÆÌ̛ƛ›Æ¡Æ››Æ›Ì•››ÌÆ››•›•›jdd•djdjddjdjdjjdjdddjdddddd9j9jdd9djddjd9ddj›dddjddjjdjdjd•jj•›•›ÆÌÌýý›•ýýÆ›j•››•››Æ›Ì•››Æ¡Ì››•ÌÌÆ››•›•›•›•››››››Æ››•›•››Æ›Æ›Æ›››Æ›ÆÆ››Æ›Æ›ÌÌý÷Ò÷ÌýýýýÌÆ››•ÌÆ››•›••djjddd9djdddddjdd9jddj9j9d9dddd9d9dddj9djddjdddjddd9jdjddjdj•ÆÌÆÌÌÆjýýýÌÌý›››•ÌÆ››Æ››••›››Æ›Æ›ý›•Ì›ÌÆ›•››•›•›••›Æ›•›Æ›•›•››››Æ›ÆÆ››Æ¡››•Ì››ÆÌÆýÒ÷Ì÷ÌýýýýÌÌ÷Ì›ÌýÆÌÌ›ÌÆjjdjjddddjdjdddjddd9ddddjddj9dd9dddjddddjdddddjd?jdjddjdj•jýÌÌ›•ýÌjjýýÌÌ•›››Æ›ýý›Æýý•Ì›•›››Æ›ýý››Æ›Ì̛ƛ››››››ÌÆ›››››Æ››››Æ››Æ›Æ¡››•›Æ›ÌÌÌÌÌÌýýÌýÒýÌýýýÌÌÌÌÌÆÌýÌÌ›ÌÌýdjdjdjd?dddjdjddjdjdjddd9dddddd9d9ddj9dd9jdj9dddjddjdjd›dýý›•jdÌÌ•Ìý÷•Ì›Ì÷›Ì÷ý›Æýý•p•›››Æ›››÷ý›Æ›ÆÌÆ››Æ›Æ›Æ››ÆÌ›Æ•Æ››Æ›Æ•›››››ÆÆ››››ÆÆÌÌÌÌÌÌÆýÌ÷÷ýý›ÆýýýýýýÌÌýýd••jÆ›•Ìdjddddj9djdd9djdddj9jdd9d9d9dddjdddjdddddjdjdjdjdddj••ýj›ddÌÌÌ•ýýý¡•›d›Ì÷ÌÆ¡ÌÌÆ¡Æ›››Æ›Æ›ÆÌý›››ÆÌÌ››•››•›Æ›ÌÆ•›››Æ›ÆÌ››Æ›Æ›Æ¡Ì›Æ›ÆÆÌÌýýý÷Ìj›ÌÌÒ÷Ò÷›ÌýýýÌýýýýýýj•›››•jdjdjdjddddjdjdd9djdddddd9djd9ddd9jdddjd?ddddjd•jdjdj•p•j•jýýýýÌÌÌý•ÌÆdj÷ýýÒýýÌÆý̛ƛ›ÆÌ››ý÷Æ›››ýÆ›››•››Æ››ÆÌ›•››Æ››Æ›Æ›Æ›››ÆÆÆ››››Ì÷ýýý›÷Ì••Ìý÷Ò÷ÌÌÆ››››•j››ÌÌÌÆ››dj›•jdddjdj9dddjdjdddjd9d9jdd9d9djdd9jdjdddjdjddjdjd•j•j••d›ýýýýýÌýj÷ÒÆÌdýýýýýýýýÌ››Æ›Æ›Æ›ÆÌý›Ì›Æýý›Æ›ÆÆ›Æ›Æ››››ÌÌÌÆ››››Ì̛ƛƛ›Æ›Æ››ÆÌÌý›ÆÒÌj•ýý÷¡÷ÌÌÌÆ•››••›•ÌÌ››•ýdddjjdd9ddjdjd9ddd?dd9dddd9dd9dddjddd9jdjdd9djddjdjjd••jjj•›Æjjýý›ÆýÌÌ›•99ýýÌÌ÷Òýý››ÆÌÌ›››ÌýÆÆ›››ý››Æ›Æ¡ÆÌ›ÆÌ›ÆÆÌÆÌ›ÆÆ››Æ›››ýơƛ›Ì›Æ›•ýÌ›÷ýýý›Æ¡ÆÌýýýýj•ÌÌdj•jddd9•›jddjdjdjddddjdjdddddjd9d9ddd9dd9dd9djddddjdjdjdjjddddjdjdj›Æj••›ýÌÌý÷Ìj••jddÌ÷ÌýýýýÆ›ÆÌÆ››ÌÌÌ›››Æ›Æ›››Æ››ÆÌ››Æ››››Æ››ÆÆ››Æ›ÆýýÆ›ÌÆÌ÷p•••ýýÌý÷ÒÆ¡ÆÌ›ýÌýýýj•Ì›jdj•9ddd•jjj•djdd9jd?ddd?dj9ddjd9dd9dd9ddjdjdddjdj9dj›ddjddddjdj••ÌÆÌ››•›•››ýýÌ•ÌÌÌýdý›ý÷ÌÌý›Ì›ÆÌÌ›ÆÌ›ÌÆ››Æ››Æ›ÆÆ››Æ››Æ››Æ›Æ›Æ›¡Æ›Æ››Ìý›ÌÌ››•j››Ì›ýýÒýýýÌÌý•›ýýÌý÷ýýÌÌ•jÆ›djjddjdjjddjdddddjddddjdd9ddd9jd99ddd9dd9djddddjddddddd9jdj•jÆÌ›ýý÷›››•››ýýÒÌÌýýdj››ÌýÌÌÆ›››ÌÌÌÆÆ››Æ›››Æ›››››Æ››Æ›Æ›››››››Æ›Æ›ÌÆ›ÌÌ›ÆÌÌ•j›Æ››››÷ý÷ýýý÷j›ýýýýýýÌýÌÌýj•›Æjdjdddddjdddjdjdd9dj9ddjddjddddddd9jdjdjdd9jd9djdd?d9djdd•jÌÒÌÌý÷ýýÌÌÆÆÌÌ÷Ìý÷Ì›dd›ÆÌýÌÆ››ÆÆ›ÆÆ››Ì›ÆÆ›Æ››Æ›Æ›››Æ››ÌÆÌ›ÆÆ››››ý›•Æ›ÌÆÌ›Ì•jƛ̛÷÷›ýÌ››•›jdýjdÆ›ÌÌýýÌÌýýÌÌÌ›•jdddjdjdjdd9ddjdjddj9dd9d9dj9d9dddddd9djddjjdddddddjjj›ýý÷ýÌÌýÒýý÷ÌÒÆÌÌýÌýýÌýjd››÷ÌÌ̛ƛƛ›Æ¡ÆÆÆÌÌ››ÆÆ›››Æ›Æ››ÆÌÌÆÌ›Æ›ÆÆ›ýý››Æ›ÆÌÆj•›Æ››•›ýýÌ››•›djÆ›d•jÌÌÌýý÷Ìýý÷ÌÌÆd•jjjdddjdjdjd9ddddddddjdjdddd9ddd9djddjddjdddd?d9djj•Æ›ÌÌý÷ÌÌÆ›Æ›ÌÌýÆ›››÷ýýýýÆddjj•••j••››››Æ›ÌÌÌÌ›››››•›››››Æ›Ì̛̛ƛ›››ÆýÆ›››•ýÒ÷ý››•Æ››ý÷›ÆÆ›jd››djj̕ƛÆÌ›ÆÆÌÌÌýý¡Ì•jjdd9dddddjddj9jdj9dd9dd9jdd9djdd9ddd9ddd9ddddj•››ÌÆ›ýýýý›››››ÌÆÌýÌÌÆÌýýýýýÌdjdjj•j•jj•›Æ››ÆÌ›Ì̛ƛƛ›•›Æ››Æ›÷ÌÆÆ›››Æ›ÆÌ›Ì››•›•ýýÌÌ›•›››÷›•¡›ddÆ›ddd›•››Æ¡Æ››ÌÆ›ÌÆýÆýý•j•jdd9jjddj9ddd9ddjdd9dddj9dd9djdjd›jjd9dj9ddj•j÷ÌÆ›ýýýý›Æ›Æ››ÆÌ››•›jj•jý÷Ìd›••jj•jjjdj••››ý÷ÌÌÆ›Æ››Æ››Æ››Æ›ÌÌ›››ÆÌ•›››ÌÆÌ•›››j•ÌÌÌ››•jjd›••›ýj•jj›Æ•›ÌÆýýýÌýýýýýÌÒýÌýj•djdddd?dddjddjdjdddd9d9dd9ddd9ddjdjddd9ddjjdj•ÌÌÌ›ýýýýÌ›÷ÌÌýÌÆ›Æj›••j•jýÌýj•j•jj•ddjd9••›ÌÌÌÆÆ¡ÆÆ››Æ››Æ›ÌÆ›ÌÆ›Æ›ÌÌ•›Æ›Ì•›•›d•ÌÆ›ÌÆj•djÆ•›j›ýý••Æ››ý•›Ì›ýÆÒýÌýýýýý•›ý•Ìj•jd?dddd9djddd9d9d9ddjddddjddjdd9jdddjdjdjjj•ÌÌý÷ýýýýÆÌÒ÷ÌÌÌÌÆ›Ædjddj•ddj›dd›••j›÷Æ•››Ì›•›Æ¡Æ•›•›››•ÌÆ›ÆÌ››ÌÌ›››Æ››Æ•›ÆÌ••››ÌÆ›•••j•dj9dj•jdjjj•ddjddjjjd•ýýýýýÌj•››Æj•jdjddjjddd9jddjdddd9dd99dd9ddjddjd9ddddjd••›ýÌ›ýýÌÌÌÌÌýý›•j›››•jdjdjddjdd•9dj••›Ì›j•›ÌÆ›•›ÌÌ›•j›•Æ›ÌÌÆÒÆý›ÌÆ›•Æ››››Æ¡ÌÌ›jÆÌÌÌ•››djdjdddjdj•j•jdjdjjjd•jdj••ýýýÌÌýƛ̕›jdjddddjdjddd9dj9d9dddjdd9ddj9djddddd?djdj•Ò÷Ì÷›Æýý÷ÒÌÌýý››•dÆ›•jjdjdd9jdjdjd9dd››••j•›•››•j•›››Æ››ÆÌÌ÷ÌÌý÷ÌÌ•›•›••›•ýýdjd•j•jjd›•››Æ›jdjj•djd•jdjjjjdj••››•ýýýÆýýÌÌÆÌ•jjdjd9djd9djddddddj9d9d9ddj9djddd9jddjdj•jýÌýý›ÌÌÌýÆÆ•jd•j•jj•j›÷ýÌýjddjdjddjdjd››••jj›•››•••›•›Æ››ÌÌÌÌÌ›ýýÌÌ•j•›j››ýdddjdj•djjd››••jdj•djdjd9•j•j••›•››jj•››•ýýýÌÆ¡Æj•j•djddddjdd9j9d9d9ddd9ddddddjdj9dddjdjj•›÷Ìýý›ýÌÌ÷Òj•j•ddj•jj•j÷Òýýdjdjdjddj•jddjj•••j››Æ›j•ÌÌ›››•›ÆÌÌÆ•jýýýý››j•j•j•ýÌj•9›djd›•jjdjdjjjdddd9•j•djj•••›•›•jÆÆýýýý›ÆÌ›•jd›djd9jdd9dddddddd9ddd9d9ddjddddd9jdj•d•›ÌÆÌÆÌ•›•›j•j•j•j•djdddjdjdddj•dý›dj••jdd99•j••›››››Æ››•››Æ›ÌÆÌÌ›•ýý››•ýj•j•jýÌjdddd••d9ddj•dddddjdddddjj••j•jj••jjdjj›•›•ý›Ìj›•jdjddddjdjdj9d9jddd?ddddj9dd9d9jddjdj•››Ì›ÌÌÆj•j••jj•j•›jdddd93ddjdjddjd››d9••jjdddjj•j••››Æ›Æ›ý•Ìýý›ÌÌÌ›•Ìý••››•j••ýdj3ddjjjddjd9d9djjdd9jjjdjdjdjdj33dddj•j•›•ýýÆÌj•••jdjdjd9ddddddd9d9ddd9d9ddj•ddddjdjj•j••Æ¡ÆÌjjj•jjd•j•jdjddjddd9dd9djjdd9djjdj•j›ýdj•jj•j•›Æ›Æ›ýý›ÆýÆ›ÆÌý››Ìý››dd••›ýjdjdjdj3d9dd3ýÆdddd9•›Æ›ÆÌ›ÌÆ›››Æ›››••j•jd›Ì››•j•j›djdd9jddjd?dj9dddj9ddddjddj9jddjddj•›››Ìƛ̛•j•djddjdjdjdj39333djdddddjdjdj•jýýj•jd•j••››ÌÆÌÌÆÌ̡ƛƛ›•ÆýýdjjjÆ¡ddddjdjdd9dd9ýý9jd9dj•jÆ›•››››Æ›Æ¡Æ›•p•9dd›››››••›jjdjddddjd9ddddd9d9ddd9ddd9dddd9jdjdj•›••j›ddjdjj•jjjdjdd›•››Æ››Ì÷Ì93d9d9jddd9djdd9•9•••jÆÌÌ›ý››ýÌ›ÌÌÆ›Æ›Æ››ÌdÌdÌÆjddjjjÌÌddddjdjdd9djj•jjjÆ¡Ìd•••››››ý••dd•›ÌÌÆj••j•jÌ••djdjdddjddj9ddd9ddjddd9jdjd9jddj•jjd•››Ì•jdjddjd•djdj••j•›››•ýÌÌÌ3d9dd9d9ddddd9d3jd•p•jÌÌÌ÷›Æýýƛƛ›Æ¡›Æ››dj››ÆÆ9jd•jÆýj•pjdjdjjd•j•ddjj•ÆÌ›››•›•Æ›ýýjjjd•›Ì••jj•dÌÆ›jdjddjdjd9ddd9dddddd99dd9djdddjddj•d•›djdj•j•j••›j•djj››Æ›•›•j•jÆÌÌddddjdd9dd9dddddddjd›•ýýÌý›ÌÌ›ÌÌ÷››•Ì›ýýj•Ìdjj•jddd3•jj•dj•jd•dd›•›dd››ddj••j•›•›ýýý•jd››djj••››•›j•jdjdjddjd9djd9d9d9jdddjdd9djddjjjj•j›Ìj•ddj•j•››÷jjdjjd›››ý••j•›ÌÆ›dd9ddjdd99ddjdjdjdddd›•ýýj÷ÌÌ›•ÌÌÌ››ÌÆýý••›d•••jdd9››Ìjdd•j•dj›•››jd›ddjdjj••j›•ýýýýdd›dj•j•j›•jdj•jdjddj9ddjdd9dd9ddjd9dd9ddddjddjdj•d›d•jj•ýýdjj•dddjÆdÆd•j•›››ÌÆjjjj•›ddddÌ•d9jdjdjdd?d9d›ÌÌýÒÌÆ››•jÆ••›ýýý•jÆjd9djdÌjjddddjjdddjdj›39^3j•›››Æ›j•j•ddd9j››•›››djjÆjÆ›j•djddddjddjddd9dd9d9dddjdd9jddddjd›dÆjj•jjj÷Ìdjdj›Æ•›››djjj•›•Ìdjdd•dÌjdjd9j›ddjdjdjj•9dd›÷j÷ÆÌÆ›••››››Æ›ýýÌ•›d9jddÌj•djjdjdd9d9jÆÆ›Æ›•j•›••›Æ›•j•jd9dj•››•››•3dj•›Æ›Ædjddjdjdd9dd9dddj9ddd99ddjddd›djddjd›››Æjddd•jÌÌ•j•›››Ìj•›•djd9dd›››•jd9›9•jddddjdjd•dýýýdjj›•Ìýýý̛̛›››Æ››ýýj›•j•d›jd››dd•jddddj•j›•›•jjjjjdjjj•j•dj››››ddj•jd››•›dj›djdjddjddjdj›dd9ddd9dddd9djd9jjdjjd•djd•••j•ý››333d9›ý•jdd››jdd•j››•ƛ̛›d•9•jd9ddddjjjdýÌdjd››ÌÌýýýÌÆ›•ƛ̛•››•jdddj•j••dj•jdjddjdd••›•›Æj•djjd•dj•jjdd›•›Ædd9d›ÌÆjdj•j•jjdjd9d9ddd›d9jd9ddd?d9dddddddjdjdjddjj•j•jjÆ›››››•d÷ýj•››•›•jdd››•›Æ››•›d›•dddjdjddýýÌd•j••›•Æ›ýý››››•››ÌýýÆ›jdjjdjdjÌj•jddd›djdj99•jjjÌÆ33ddd9jd•jdd9dddÌÌdd›ÆÌdjj•9••jddjdddjdjd›ddddd9d9dddd9jd9jddddjj•Ìj•jdÌ›d9••›ÆÆdjjÌ›•›dj•j•›j•dj••ýÌÆ›•j•››d•jdjddýýjddjd›j›ýýjƛƕ››•ÌÌýý•djdddjddj•jjjdd̛ƛý÷Ì•••jÌ›jd9dj•j•d9ddjjjÌÌ÷›dddd•Æd›jddjdddjjddjýdj9d9ddjdd9ddddddjd9jdjjÆÌj•dÌ››•9•jÆ›j•j••9ddjjddÌ›•jjjýÌÌÆ››•j••jdjjdjddjdddjdjdÌÆjÆÆ•j›•››••›Æjdjdjdjdjd•÷Ì÷jjd›››ÆýýÌ¡•j•jÆ›j•djjd•jdd3jdddý›•›9jdj•›jdddddjd›jdddýdddjdd9dd9dd9jdj9ddjddjdjdjjýdj•›d•jd939d9dddjjjjd•j•›ÌýjdÌ›››››››jdjddddjjddjdjdÌj•›Ì¡•j••››••›j•dddddjddjÌÌd›Æ›••››jd••9Ì››Æ›ýý•dddjj•jjjjdd33djÌÌj•Ì›9ddd›jddj•jddj9jd9d9ddjdd9dddjddjdddjdjddj•ÌÌj•÷Òdj9dd3dd9ddjjdd•jj•j•›ýýjjÆÆ•››Æddd93d9jj•djddjjÌÌÆ•j•j•jjj•›Ì÷jjdjdjddddj›÷j››•›j•›Ìdj•››Æ›Æ›ýÌ››djdj•djddddjjddýd•ý›•d9›•jdjdjddjdddjd9dd9dd9ddjdd9jddjdjdj•ýdjd›d››dd•d93d9djd›ÆýýÌÌÆÆ›ÌÌÆ›•›dj››•›››››ÆddddjddjddddÌÆ›Ì•››•j••j•›Ì•jddj9dj9•3d39•›Ì››••ÌÌÌýýýý•››÷d›Ì÷ÒÆÆ›ÌÌddd9j›jjddj•jj›ý••jdjddddj9djd9ddd9ddjd9dddjddd9jdj•j•›•jdd›•ddjdj3jdddd›ÌÌýýÌÌÆ›››ÆÌ›Æ•›dd››Æ›Æ››d9dÌdddd9djdjj••jÌÌÌ••›••j››ddjdddjddjdjÌÌ•j÷Ì››•jÆÌÌýÌýý•›Ìýd››Ì̛ƛ÷9d9dd›Æj•djj•j•jjjdddd?ddddjdddd9dd9dd99ddj9ddjdddd››dd939Æjjjdj•ddj•dd9dÒÆÌddj•j›•ÆÌÆ››Æ›››dÌýjdÆ•d9399dj•9ddjdj•j›ÌÌÆýj•››•j•jddddjdddj9d›ý›•›•djjÆ¡ýýÌ÷›Æ¡›ÆÌÌdd•ÌÌj›ÆÌ9ddj•÷›ÌÌdj•j•d•j•jjjddjdddjd9ddd9ddjdddddjdd9dd9dddddd›•››jj•j›9djddjdýÌ››››•›•››ÌÌÆ›ÆÆ›jjýýjj•›dd9•dj9dd9jdj•j•••jj•jj•›djjdjd9dj9jdddÌ›››•9•j••Æý÷ý›››ÆÆ››Æ›j•jÌÆddÌdj•dj•Ò÷jd•djjjd••jdddddjjddjd9djd9d9d9djdddjdjdjdjd›››Ìddjjdj•j•ddd9dddj•›Æ›ý•›ÆýýýÌÌ›ý›ÌýýÆÆÌÌÌ93•d9dddjjdddd•j•›•jdj•jdj••ddjddjddd93jjÌ••j•j›•j•j•pddjÆÌý›dýý›Æ›•Ìjddj•›d›ýÌddjjddjd¡dddjdjdjdjd9dd9dddddd9djd9jdddddjd››djd››ddjjj•›9dddjjj›jÆ››ýý›Ì›ÆýýÆÌýýÆÌýý¡ÆÌdd9•j9d9dddddjdj•j•ddj•j••jjjjddjddjddÆjd•ÌÌ›•jÆ››•j•d›•jdjÌ÷9ddý›ÆÌ›•djd›9jd››Æj•›dddj›ddjdd9dd9dd9jddddd9d9jdd9ddddj9j9djdj•djdd››ÌÆÒÆ›•dd›d9Ìd•ÌÌÌ›ÆÌ•jý›››dj›ýý›››••›÷jddjddýdjdjjddjjd•9jj•j•j••j•jddd9dd9jÌjddd•j••jdjjjjdÆ¡j›÷ÌjddddÌ›ýdýjÌj›dýdýd9dj•jýjÌ››ý•9djddjdjdýjd9dj9ddd9dddjdddddddjdjjýd9dd›ý›Æ›Æjdd›9dÌd›ÌÌýÆ››d•›Æ›••dý•›Æ››j›jjjddd9dddjjddjddjdd•j•j•j•›•jjdjdd?ddj›^d9jdjj•j•j•djdÌdd÷Ò•jd993dÌÌdjÆ›•ddddd9•djj÷jÌÌd›jjdd9jdddjýjddd9dd9ddddddjdjdjddddjdÆÌýÌj3ddjdýÌ•9dd›jdjÆÌÌÌý÷•j•j››››9Ì››››•d••dddýd9d9djdd9dddjdjj•jjjjddjdjdddddjdÆ99ddd›••jd••djdjddjj•jdddd›››9ÌÌÌÌý•9dj9jdjj•j›djýÆ›dd››djdjjdddjdddd9dj9j9djddjddj9jd9djd›ÆddjddjjýÌ•ddd›Æjý›ÌÆÌ÷9•j›••›•dýÌ÷›Æ›ddd›•9dýjd93dddddjdjdjj•dj•d•jjddjdjd?dd9›d39dddjjd›•jddd3j›dd9ddd9ƛƛ•dýÌ›ýýd›ddddddj››ÆdjÆjd›Æddjdjdjjdd9d9jdddddd9djdd?dddddjjd›d›ddjdj•jÆ›9jddÌÌýý•÷jý›ÆjýÆý›ýddÌÌý̛ƛ̛dÒ•jd9ddddj9djd9djddjjdj•jjd•dddddddjddjd399ddd9d9jdddj9dd9d9d9•ÌÌÒÆýÌý›•ý›•›d9d9dddd•djd›ýdýjjÌdjddÌÆjdddd9dd9dd9dddjddjdj9d›djd9Ì9djdd•j3ddjdjÌÌýýý9dýý›Æj•ýý›djdÌÌ÷ÌÌ›››dd•›3d9d9dddd9djddjdjd•jjjjjdjdj9dd9ddjÌjdd9Ìd3•j9djdddj^dd9•j•ÆÌÆý÷›dýý•jdddddjd›djdddýdÌdd•d›djÌÆdj9d9dddj9ddjdjdjdjdddjdddddýdddj9››dddjddjÌýýÌdÌÌÌÌÆ¡dj9d9ddj›9ÆÆ›•d9ddd9ddddjd?ddjdddddjdjddj•ddd9ddjdddd9ddddd››ddjdddddjjddjjdjý¡Æ•ÌÌÌj•jýýÆjdj9d9•›jdjdddj9djdjÆjd›jddddd9d9ddddjddjddjddjdddjddýjjdjd••j9ddddj•ýýÌd•ý›Ì›Æd›Ædd3933d9Ì››d39›jjddýjddddddj›d9dddjdjjdjjddddd9d?dd3jdjd››dd9djdjdjdjdjjddýý›jjjÌÌd•jý››d9dddj•›jjdjd9jddd›•›jjdjdj9d9ddjd9d9›djdjdjjjd9jdd9jÌýýýÌj•9ddd9Òd››•÷Ì›jý››››dj•jd9d393d3d•djd•dÆj9dd9d9jd9ddjddjdj•jddddd9d9jddddjddjddd•Ìj9•9d9d•jjdÆ›•›9Æ›ÆÆ›Æ›ÌjddÌd•dddj9dj•dddddjd•9jý›Ìd•jddddddd9ddd9dddddjdjdjdddd3jd›ddýýÌ••99djddd›•j•jjÌýƛƛjdjdd9ddjddd99dd¡dÌ›dd9ýdjddddddd?ddjjddddd9ddjdd9djd9djdd9d›•d›9ddjddj•jj›÷jd›Æ››Æ›•Ì•jdj•9d9dddd›•jddj9jÌjdddÌý•j•djd9d?ddd?dd9ddjdjddjddjd›9dddjdd›ÌdÌ÷9dddddÌÌj›•djdd•j•›••››dd›djdjd•ý›ddjdd3Ìdd9d9jdj9dd9dddjdjdj9d9d9dd9dd›3jddýÒ›ddd›•ddddj••›Æ•dj•jj•d¡djdj•ddjd9ddj9dddd9dddd9ƕ̕jjdjddddd9dddddddjddjjdj÷9djd9d9djddjjÌÌdddj9jÆÌjÆj•›•jjdj•›Æ¡•d›dddjdjjd››ddd9ddd?dddjddddd9ddjj•jd9ddd9ddd9d9d9›dd99ýý››ddj•9jdjjj•›Ì›9ddjdd9ýddjdjdjddd9djjddjddjdd››ýÌj•jddj9d9jddd9j9ddjdjdjd•ýýÌddddjd››j•ddjd9jdd9jÌý•dd›Æ›Æ••›•j•j››jdjd9d9d9dd9d9d?dddjdd9d9ddj•›•9d9ddd9ddd9ddddddjd9d›dÌ•›d9ddddd›d•j›•••jjjdj•›jddÌdj•9jddjddddjdjddÌÌ›Æýýýdjdjddddd9dj9dd9•jdjd•jýýdj9dd9j•ÆÆjjdjddddddj•ýýdj9Æ››ÌjÆ›•j›dýý››dddd÷d9dddddddd9d9dddd?dd›j•jddjjdd9d9dd9d9ddddddjdd››dd9d9jd›•j••›j›••›Æ›•djdj›ddjdd99d›jjdjddd9ýÌÆ›Ì›ýýdjddd?ddd9ddd9jd›ddjdÌjýý•›ddjdd9jdddjdjddj9dÌ›››dj•39d3››•jýÆÌj•d•d99ddjÆýdjjd9djdddd?ddd9jdjd••j••jddddd9ddd9djd9d•jd9•d9dddd9djddjjj•›››•ÌÌ•›•jýddjd9dd9ƛƛddjjd››djj•d›ddjddd9d9dd99ddddjjdjÆ›dýÒ››9dddddjddd›jj3dddÌÆÆ›jd••›•›jdjýÌdÌÆjdddddjÌ9dýjddddd9dj9ddd9ddjd•ý9dd›dd9d9djd9dd9dj›d9••dd9d39d9ddjdjdjjj›•j•¡••j•ddddddd3••›Æ››jdd9•d9djdjdjddj9ddddjddd3ddjdddjdÆjd›ýÆÌ^d9djdj››Æj•dd9d9ddjjddjjjjdÆ›dd3j›ddjd?dddddjÌjjd›9dd9ddd9djddddjd9jdjdd9dd9dd9ddd93djd9jjd93dd9dd9djýd•jÆ•jd•jjddddj9jjj›j›Ì›djd9ddjdd•j›•jdjddd9d9d9d9dd9ddjjjdjdj››•Ì›››•jd9ÆÆ›Ì›d9djjd9dddjdjjdd››d›››d››j•jdÌjd9dddj3•ddjddd9djd9dd?ddjdd••jd9ddd›dd9d9ddddd9djdd99dd9dddÆýýdj•›•›••jdd?ddjddýddj••›››ddddd9djd•d•jdjddjddddddd99ddjdddjjdj•›djddd9djd•jjÆÌ›ddddddd999dj•ddddd•j•jdjd›•d9dddjjdjjdd9dj9ddddd9ddddjdj9djdd9ddd›9dd9dd9j9›ddddddd9d39››jjjjýýjddjjjd›Æ›d39d›djý•››•djjjjjj••jdjjdjddj9d9j9d9j3dd9djdjdd•j•jddjdddj•j•››jÆÌdj9dj39d•3jdjd›j•j•jj•dj•d››ý9d9jdd3ddd9jdd9ddj9ddd›djdjdjdjddd9d9dd›dd9dddd›dd•jjd9dddd9•›••jjýÆjdjdd•›•›ddd9ddjýj›››•ddjjj•jjddjdjddd9dddjddd9j9dddjdjjdjjddjdddjdj•jjdjddj3j•d9ddjddjjd•›ýjd•••jjj››^dddd9d99ddd9dddddýdj9››d9jdddjdjd9dddjd99d9ddjddd9d›Æj•j•jddd›ý›ÆÆd›››dd9jd•jýdjdd›•Æ••dd•›dd•jj•djdjdddddjddd9ddd9dddddjddjddjddj•djddjj•jjd•jdjdj•9djd›jÆjdddd9dý÷j›››•j•d9ddddjdddddd9dddjdj9ddddd›jdj•jj•jjdd9d9ddddd9d9d9dd›d9ÌÆj•39djddýý››j››ddjdjjdjýjdjÌÆÌ››jjd›•jd•jj•dddjjdjd9d9ddd9djdd99dddjdjdjdjddjdd?djj•ýýýý•j›•j•dÌddjdddj••j•››ddÆÒÆÆdj3d9d›d9d›9dddd9d9ddd9dj9››dj•jj•jd•ddd9dd9d9d9d9ddd9dddj›ý›•jd9339ÌÌÆdd›33dddd93djdjdjjjdj›•jj•›jj•djdjddjddjddd9ddjdddjdddjddjdjdj•djdddjj••ýýýýý›Æ›•›jdÌ›djÆj•›•j•›•9dd¡÷¡dj3›•dÌÆ9›d9dd9djdd9d9djdjdýýÆÆ9ddddjjdj9dd9dddd9dd9dddj9ddjý››•j•dddjdÌ››››•jjd9dddjj›dj•j•jd›Æjj••jdjddjdjddjddj9dd9d9d9dd9dd9jdddjddddd?dd•j••jj•ddjdj•djj33•j93Æ›Ìýý9dd›•93jdj›Æ››jddd9djd9d9ddd9ddddýÌjdjdjjdd9ddd9jd9d9dd9ddd9d•ý••››Ì›•j››dddddjdjdÆÌj›dÆ›•dÌÆÌÌ•j•••jj•jdjjdjddjdj9dd9dddd9d9ddjddjdjddj9jdddj•j•j•jddjj•jdj•j•3jj•99Æ›ýd•›››jdddýd››Æ›ddd9dddd9ddddddjdddjdddjdjdj•djdddd9d939dd9dd9dj9d9d›ýj•j›ýý›•••Ìd9djdjd›Æj››ddÆ›jdÌÌÆÌj•›•j•j•djdjdjddddddddd9jdddd9ddjddjddddddjd›Æjjj•›jdÌ›••›••ÌÌÆ›ÌÆÌdddd›jjjddýý••›dÌÌjd9d9ddd9ddd9d?d9ddjd9j9djdjdjdjdjddd›d9dd9dd9dddd9d3dddj•d•••jýÌýý•d9dddddddjÆjd››jdj••jjdjjddj•dddddd?djdj9d9dd9d9dddjddjddjdjdddj›jjd•›j•Æ››j›•›•›Æj›•Ìd››99d›dd•ýý›•jjÌÌ•ddd9ddddjd9djdddjdddjddddjjdjddjdjd9dd›ddd9dd9dd9dddd9d99djjdj››÷ÌýýÌddjdjd99dý››jd›Æ•dj•••jd•jjdj•jjdjdddd9dd9dddd9dj9ddjddjd9dd9jd9dddj•j•jj•jÆÆdjjjd›••j9•ddd33djýýýý›•››dd9dddd9d9dddd9dd9ddj9dd9j›••djdjd•djd9dd9jjddd9dd9dd9d9dd39ddjddjÌÌýÒ•j››j•›d›ÆjjÆ›•djjj•jjj•jd••jj•jdddjdjdjdddd9jddd9ddj9dj9djdjddddjjdj•djd•jÆÌjj•jdjdjjdddd›dddj›Ìýýýý››djd9d9dddjdd9ddd9ddj9ýdjddd›jj•j•jdjdddd939ddd9dd9dd9ddjd9ddd3d›jdjÌÆýýý•››Æ›jd›ÆÆjd››•ddjj•dj•jjdj•jd•jjddd9dd9d9jd9d9d›9dddjdddjdd9djddj•j••jdjddj9ddjdjddjdd9›jddjd››ÌÌ•jjd•9ddd9dd9d9ddj9djdd9ddddjdjddd•jdddjd•jd9d3dd9dd9ddddd9dddd9d9d9dddjdÌÌ÷jdddjddjd¡Æjdddjddjjjdj••jjj•djdjdjdjdjddd9ddddd9ddjddjdddddddd?dj•jjddjjdjdddj••jjdddd9ddjjjÌ̕̕9•j›3dd9ddddjddj9ddd9dddd9ddddý9j•jdjjdjddjjdd›dd9dd9dd9d9dd9d9ddd9d9d9•dÌÒdj•jj•›djdýddjdj9djjd•jdjj•ddjjdjdjddddd9dddd9d?dd9dddjd9jd?dj9dj•dddjjdddjdddjdjdddj››djÌÆ›Æ••j•j9j3dd9dd9d9dd9dddd9jdd?ddd999ddddd9dddddjddÆ›d99d3ddd9dd9dddddd9d9dd9ddd›Æd9djddj•j••jdjddddddjjdj•jdd•j••jjddjdj9jdjd9d9dddd¡dd9jdddddddddjjdd9j•djjddddjdjd9dd•jd›ÆÌ››•jj•djjdd9dd9ddddjdjd9djdddddd?dddddjdjjdddjdddj9d¡•dd9d9d9d9ddd9jd9jdddddd9d9dd939d3jdjjj•djdjdjjdjdddj•jjj•jjd•djdddddddd9djd9dÌ9djddjdjdj9djdddjdjdd9dddj9ddddddjjdjdjdjÆ›j•ddjd3ddd9dd9d9dddddjd9dd?ddddd9dd9jd9dd9jdjjdddddjdd9dd9dddd9dddddddj9d9dd9ddddjj9d9••›jjjdjdddjdjdjdj•jdj•j•djddjdjd?ddd9dddddÌ•ddddd9dd9ddjd9dddddddddjjdjdd?ddjdddjdddjddd99ddddd9dd9ddddd?dj9dddjddj9d?dd9d93jjd›dd››jjjjd9d9dd9ddddd9dd9jd9j9dddddddd9jddjdj••3jdjd•j•jdjddjdjddddj•dj•j•djd9ddddj9ddd?dd9ÌÌ9djdjdjddjddddjdjjjddjddddddjddjdjdjddjjjdjdjdddd?dddddd9jdjdddddjd9jddddd9d99d•j•jdjd9•Ìjdjdd99dd9d9djdjdd9dddddjd9d9jdddjdddjdj•jjjdj•djddjjddjjddjdjjddjj•jjdjdjdddd9dd9ddÌÌddd9dd9djd9ddjdd9ddd?ddjd9jddjddjdjjdjdjddjddjdjdddj9d?dddddd9djd9dddd9dj9dddd9dddddjddddjdddd9dd39d9dd9dd9jdd9d9dddjddd9jddjdjjddjj••j•jj•jjddjddjdjddddjj•jjd•djd9dj9ddj9djdÌÌ9djdjdjddddj9djddjjdddjdjddjddjdjddjdjdjdjdjdjjddj9dddddd?ddjdjddjddjd9ddd9d9dddddj9ddj339399dd9d9^9ddddd9dddjdjdd?jd9d9dddjjddjjddjj••j•dj••jjdjdjdjdjdjdjddddjjddjddd9dddddddýdddddddd?ddddd9ddddjdjdjddjdjddjdjdjdj•dj•djjddd9ddd9jd9jdd9djdd9djd9dj39d9dd9d9d9d3dd99dddd9d9ddddd9d9djddjddddjddddjddddjddjdj•jdjddddjdjdjd•jddjdjdjdjdj•djdddddddj9dd9djdd›9dj9jd?dddj9jdjjdjdjdjddjddjdjdjdjdjjjjdjdjdddjddjdddjddjdjdjdjdddjdj3ddd9d9d933ddjdddjdjd9ddd99d9d9ddj9dd9jd9dd9jd•jdjd9jddjddjdjdjjjdjdjd•jd•djdjdjddjdjjdjjjdjd?ddd9jd9d9d›ddddddddjddddddjd9ddjdjddjdjddjdjdj•djdjdjddjd9jdjddjdddj•jddjdddd?djdÌd9d9d9^9^9d9d99d9d99ddd9d9dddddd9ddjdddjddjddddpddjdjjjddj•dj•jj•jd•jj•jjj•j•jdjdjdd›•ddjdjddd9ddddddddý9dd9jd9jd9jdj9ddddjdjddjdjddjdjdjjdjdjdjddjdddjddjd9djdjjddjddjd?ddj•dÌ9dd9dd9djdjddddddddddd9d3dd9dd9ddjddj9ddjdjdj9ddjjdjdjjjdjjddjjjj•jjd•j•j•djd•j•ddjddjjdjdddjddd9dd9djdýddjddddddddddjdjd9djdjddjjdjjjjjjdj•jdj•jdjjjdjdjdjdjdddjddjjdddjýdjdddd9d9dddd9d9d9399d393dd9dd9d9ddd9ddjddjdjdj•djdj•dddjjjdj•d•j•j••d•••jjdjdj••dj•jj•jjdjdjdjdjd9dddjdd9jdÒ9dd9jd9jdjdjddd9jdjddd9jdjddjd•jjdj•ddjdjdj•djdjdjddj•jj•jjj••jdddýddjd9dddd9d9ddddd9dddjdd9ddd9ddddj9djddjdddjdjjj›djdjjjdd•d•jjjj•j•j••jj••j•j•jj•jdd•jdjd•djddjdddjd9d9d9ddýýddjdddddd9djdjdddjdjjj•j•djj•jjjj•jdj•jdjdjdjdjddjd•j••j›d•›jdjdjýdjddd9d9dddd9dd9ddjdddj››d99dd9d9dddd9j•9jjdddj•››dd••j•djjd•jjd•jjj•›jj›••›••dj›Æjj•jjjdjdjdjdjd9jddd›ddjý9ddd?dj9jddd9jdjdjdj•djdjdj•d•jjd•jj•djd•j•djddjjjd›•›dj›djj••jddjÌd9dj9ddd9d99dd9ddddjddd›dddd9djdddd9dddjdd››jjdj•jjjd››jjd•j•jjj•j•d•j•›d••›•j•jjd›•j•jjd•dj•ddjdddddd?dj•jjddd9ddddddjdjdddjddjddjdj••••jj•••j•djjdjdjdddjd•dj••j•jÌ•j•ýj•djýdjddddd9d9d9ddd9d9jddjjdjdd9jddddjd9jd9ddjdj•›d••j••djdj••jjjj•••dj•j•j•j››jj››››ÆÌ•jjj•›djjjddjjddjd9ddddd›››ý9djdjdjdddjdjjjddjdjddj•›j›jd•jj•jj•j•j••ddjjdjjd•jj•j››djýý•jddýýdjd9jd9dddddj9dddd9jddjddd9dd9djdjddddÌdd9d›•j•j•›•›djdj••jdd›•jdj••j••j•••j•›••›Æj•jd›•d•djdjdjdddd9jd9jj3dýdddd9dd9jddjddjdjdjj••›Æj•j•››••j•jj•j•jddjjd•j•j•j•d›Æ•jýýjÆ›dj›Ìddddd9dd9d›9dd9dddjddjdjdjdddd›dj9d9dÌÌjjdj••jÌ›•››•›djdj••jjdj•›djd›•jj••›••j››•››Ì•••j•jjdjjddjdd?ddd9ddjddd9ddjdjdddj9ddjddjdjjjÆ›•jj•›•›jj•••jjdjjj•jj•j•••›Ì̛̛›ddÌÆjdÌddj9ddd¡ddj•›dddd9ddjddjddjd9d››ddddddjÌdjdd›djÌ››ÌÌÆ››••jj•j•jdj••jjd››•›•jÌ›••Ì›•›Æ›j›••j•ddjdjdjdd9ddddjdddjdd9d9dd?dddjddjdjd•j•j•jj••j•jdj•jj••jjdjd•jd•••›j›››ÌÆÌÆ›•jjjdjddjdjd9dÆ9ddjdd9d9d9ddjddjdddjdj•9d9d9djdjdd¡d›•ýýÆÌÆÌÆ›jj•j•j•j•djj•jj•›Æ•›••Ì›•jÌÆjÌ›••›j•jdjd•djdddj9d9djddd99djdddjddjdjdjdjdjjjj•›j•dj••j••j•jjj•j•j••jdj•j••›•Ì÷¡ÆÆÆ›•djÆjjddjjdjd9djdd›ddjÌd•p•›››ýÌj9dd•djddd9djddd›d›Ì÷ýýýýÌÆÌ•j•jjj••jj•j•••jj›››Ì››Ìý•››jÆÌ•j•›jjÆdjjddjdddddd9•djdýdd9dd9ddddjdjdjddjdd••j•jj•j•j•j•j•j•j•j•›jd••p•››•ÌÌÌÆýÌÌ››jdÌddd9ddd9dddd9›d9›jdj••›•›ýýdd›•jdj9d9•dd9ddjdjÆ›ÌÒý›Æ››ÌÌÆjj•jj•j•j•j••j••ƛƛ››Ì•›••jÌ•jjÆ›•jdjdjdjdj9d9ddjjd›Ædddjddjdjddjddjdjdj•jj•jdj•›•jj•••j•j•j•••j•›››•j•››ÆÌýýÌÒÆ›d•›Æ›djdjdd9d9dd›djdddj›•›•jdd9ýÌjd9ddj•?dddjd9d›ÆÌýýý›ÆÌÆÌ›Æ•jj›•j•j•›jj•›j•j•jÌÌ•›Ì•ÌÌdj›•jd›jjdjdjddjddddjddjd›j9dd9djd9djddjdjdjd•j•››•j•j•j•j•j›j•j••j›j•››•›••›Ì•›ÌÌýýÌ››Æj•›ýd9dd9djdd9djdjjdjýý•›ddjjd9Ìdddd9djdd9d9ddjdddÌ÷Ì÷ÌÌ›››Æ¡Æ›••›j•j•••jj••j•pdd÷Ì›•›•¡••••›j•d•jdjdjddd9d9d9djjddddjddddjddjddjddjd•jd›Æjj›•j••›Æ¡d••›jj›••jjÆ›•j››ÌÌÌÌýÌýýÆ›ýÆ››ýddjdjddddjdd••3›•ýýdddd3dddjjdd9jdd9ddjjj››ýýÌÌÌÌÌÆ››Æ›Æ›j›•j•››ÆÌÆj››ÆÆ›•jÌÆÌÆ››Ìj›››•d›••jddjdjdjddjd•dd9d9dd9d?ddj9djdjdjjdjd›jdjÀ›•j›››Æj•›•d••›j•jÆ›••̛ƛƛƛÌýý››Ìddýý9dd9djdj9ddj›•3j•dddÌ›39dd99d99dÆ›ddd9ddddÌ›Ìý›÷ÌÌÌÆÌÆ¡ÌÌ›•j›••j››ÆÌÌ•››Æ¡Æ•››ÌÌ•››••›jdjjjjdjddddd9d9d9Ìjjjdddjddddddjddjdjdjdjd•djÆj••›ÆÌj›››j•ÌÌj•jÆ›•j¡Æ››ÌÌ››››ýý›ÆÌÌd9›dddddjddd›jd3d9ddjj›Ì››33djd›dÌdd9Æjd9ddddjdÌÆÌÌÆ››ÆÌÌ››ÆÌ̛ƕj››••››Ì›Æ›ýýÆ›jÆ›ÆÌ››Æ›j•djd•d•djdjdjdddddd›ddjd9dd9dj9jddjdjdj•djjdj››djj•››•››Æd•ÌÌjdjÆÌjjÌÆÌÆ›•›ÌÌÌÆ›ýÆ›•Ìýjdjd9d9d3d›jdd9dd›ý›Æ›Æ•j•9djÆjÌddd9ddjdd9ddjÆ¡Æý›ÌÆ¡ÆÌÆ››••››Æ•j•›j••jÌÆ›ýýÒ•jj÷›››››•›•j•j•jdjdjddd9d9j9d•›ddjddjdddddjddjddjjd•j•d›•j•›•›››ÌÌj•Ò›•j•Æ¡d•ÌÌýÌj›Æ›÷ÌÆ›Æ››Æ››ýdjddjd993ddddjd››d••››››•j9÷9jddd9d9djdjd9dd?dÌÆÌ̛ƛ̛›ÌÆ››•j››Æ•j›•jj•jÌ•ýýýý››ýÆ›•›•›•jÆj•jdjdddjdjdddddd9jdddd9d9djdjddjdjdddj•jj•jj••j›Æ›Ì÷d•Ì÷›•ÌýÌ›•›ÆÆÌÆÌÆ›•ÌÌ÷Ì›ÆÌ›ý•Ìddjdd9d•dj9jd›ddjjjj•›Ìýýddýýdddddjdd•j›dd9dddÌÌjÆÌ•›ÆÆ››Ì÷ÌÌýýÌÌÌ›dÌÆ›d››Ì›÷ýý••ÌÌ›•››•jÆ›jjj•jjdjdddj9d9djdj•jddddjdd9dj9djdjdjd•jdj••j•ý÷Ò÷ýdjÌÌýÌ›Ì÷›•ÌÆ›ÌÆÌ›Æý››ÌýÌÆ›ÌÌýýÆýdd9d3jddddd9•›ddddj•›Æýýjd›ý•9jd39d›ddd9ddd›ÌdjdÌÌ›•¡Æ›ÌÌÌÌýýÆÌÆÌ›dÌÆ›d›Æ››ýýj•››d›•Æ•j›j›dj•dddjddddjd9dj•j›d9d9ddjdddjddddjjjdj••jj••ýÒÆýjj÷ý•››ÌÌÌÌÌýý››Ìý››ý÷››÷ÒÆÌýýÆÒj•j9d9dddjdjddjdd3jdj•ÌýdddÌýjÆ393ddÌjjddd9d¡›•ýýÌ›•ýý›ÆÌÆÌÆj•›ÆÒýý›Æ¡Æ•›››••›•j••jj•›j•jd•›•jdjdjdd?d9dddd›jd•jdddj9ddjddjdjdjdj•djdj•›ÌÌ››ÆÌ÷Ìýý›÷ÌÌ÷•›Ìýý›ýýÌ›Ìý››ÆÌ››÷ýÌÆjjddddj3j9d999dd9›3ddd9ddjd9•ýj›d›ÆÌd9•9^9ddd›ÌÆ›ýƛƛ•ý›Æ››ÌÌ››•ÌÌýýÌÆÌ››•›ÆÌ•›j•Ò÷j••j•›•j›•ddjdddjddddd9jdd3Æ¡›9d9ddjd9jddjddjddjdj••j•ÌÆ›•Ì›ÌÒýý››Æ››ýýÌÌ÷ýýýÆÌÌ÷››Æ¡•›››djd•Ìdd9jdddddddddd3jddjdd9ddddýjddd›9dd9dd93dÌdddÌÌÌÌ›››››ÆÆÌÆ››ýý›ÆÆÌ›ýÆýÌÌýÌýÌ››Ìýj•j›•jdj•›jddjdjddjd9jddj9djddddddd9dddjddjdjjdjdj•›•j›Ì››ÆÌÆ÷ý•›Æ›Æ›ýýý÷Òýýý›ÆÒ÷›››ÆÌ•Æjdd9dÌ9ddjddjÒdddj•jdj›d9dddd?dddjdddjýd›d93dd9d9d››ýÌÌ̛ƛ̛ơÌÌÆ›ýýÆ››ÌÆ›ÆÌÌýýýýý•›ÆÌj•›•›jdj••djjdjdjd9ddd9j›^ddjd9d9jddjdjddjdddjd•djj•••Ì•›ÆÌ•¡Ì•ÌýýÌýÌ÷Ìýýýýýý•›ÌÌÌÆ››ÌÌýýjjdjjd9ddd9dýd9ýdj9dd›dddjddd9dd•99jjddd•9jd9dd››jjÌÌ÷Ì››ÆÆÌ›ÆÆÌÆÌÌÌýÌýýýÌ››•Ìýý›•d›Ì•jÌj•djdj•›jd•dddddjd9ddd›d9jddddddjd9ddjddjdjdjj•dj›jjÌ•j››•Ì•›ÌýýÌÆÒýÌÒýýýýý›››÷›ÆÌ››ÌÌý••dddddd9ddjdddÒdd•3d9dd9d9jdd9d›jÆ•jddjjddd•9dÌ÷ýd•ÌÌ÷›Æ››Æ›Ì›Ì¡Æ÷Òý÷ýýýÌÆÌ•jý÷›Ìd›Ì•Ì÷jjjdj•›djdjdjd?dddjddj›3jdjd9d9ddddjdd9jddjdd•j•dd••Ì›•›•jýÌýÌÌÌÆýÌýý÷ý÷›ýýÆÆ››››ÆÆ›Æ÷ýjj9ddjdd9d9jdjd9dýd9ddjjdddjdjddjÆdj•d9›djddj9djdj•ÌÌ›››››››Æ›ÌÌÌ÷ýýýýýýÌÌÆ›ýýýÆjdÌ•j÷j•Æjd›•jdjddjddd9ddd9jdjd›•›ddj9dj9djddjddjdjj•jj•jÌÌ÷Ì›dýýýýÆÌ›ýÌÌýýýÌÆ›ý›Ì››Æ››Ì››ýÒ•jdd9•jd››•j•9dÌ9Ìý9dÌjdd9›d›d9dd¡d•jjdjÆdj9dd9dÌ›•j››ýÌÆÆ›Æ›Æ›Æ›ÆÌÌýÌýýýýÌÌj›ýýý¡jdÆ¡•j•j•ddjdÌdjddj9djdd9jdd33•d›9dddjddddjddjdjjdjdjj•Ì•ÌýÌd›››•Ì¡Æýý÷ýýýýÒÆ›ýƛƛ›•››Æ›ýýddd9d9•9›3djdddddÌýddÌdjd9^9›Æ›djdjjjddd39ddÌ9^9d•›•›•›ÌÌ›››››ÌÆ››ÌÌýýýÒýý››j•Æ¡›ýÆÌÌÌjÆjjdÌjdÌÌjdjdddjdd9jddd93djdjddjdddjd9djddjddjdj•jdÌýjÆ›j•›››ÆÌÆýýýÒýýýýÌÌ̛ƛ›Æ›Ì›Æ›Ìýddjjdddddddjddj›››dd9djddjddjdÌdddd›•3›dd›d3ddÌjj›Æ››Æ÷ý÷›Æ›Æ›ÆÒ›ÌýÌýÆýÆÌj••jÌÆÆý›÷Ì•››Æd•jdjd›ddjdjdddjdd9d›jd9ddj9d9d9ddjdjddjdjdjd•j•j›ý•Ì›•ý•›ýýýÒýýýýý÷ýÌÌÆÌÌ›Æ›Æ›ÌÆÌÆÌÌd•j••9jddddjdd9d›djd9•ddd9djd3d9d93d3d›d››dd9dÌÌÌjƛƛÌÒ÷Ì›››››÷÷ÌÌÌý›ÌÆÌÆÌjdýÌ›Æjýj•›•djjjd•jdjddddd?d9ddddjdd›dddddjdjddddjddddjd•j•jdÆÌ›dj•ýj•ýý÷ÌýýýýÌýýÌ›ÌÆÌÆ›››Æ›Æ›•jý9d•dj›d9dj•jddjdýdjd3j•¡99d39djj3jj9d9dj•›dd9dd›•÷ýj›››ý÷ÒÌÌÆ›Æ›ÆÒÌÌÌÌ÷¡÷ÌÌjdÆýý›djÆj•›j••dj›dd›djdjdjddddjdj›9djjd9dddd9dj9ddjdjddjj•j•d›Æ•jj÷Ò••ýýÌÌýý÷ÒÌÌýý››ÆÌ̛ƛƛ›››•j›jj•djd•dd›j›››dýdjddjdÌÆddd•j33•d9djddÌ•9d9djjýj••›•ýýÌÌÌ››Æ››ÆÌÆ÷ÌÌÌýÌýd››ÌÌ››••¡jd•›jjd›jjdddjddddd9dj9ddddjdjd9djdjddjdjdjdjddjdjjd›•jýÆÒ•›•ýýýÌýýýý÷ÌýýÆ››ÌÌ››››ÆÌÆ››^dj÷dd9djd9d••Ì39j•d›9ddddddd3d9dj3dddjdjdÌdÌddj3dj•›d›•jýýÆÆ›ÆÆÌ››ÆÌýýÌÆýýý9•Ì›÷Æ›•jÆÆjdjdjdj•djdjddj9jdd9ddd•9dd••9dd9ddddddjddjdjddjd•j›•jÌÌ›ý››ýýýýÆýýýÌ÷ýýÌÆ›ÌÌÆ›Æ›Æ›Æ››dÌ9÷jdÆjdj9ddjdýdd•j••9djjd›d9d93djdd9dÌddjd¡d9dj•jÆ›d›•›jýý›Æ››ÆÌÆ››ýÌÌýýýýdý•›ÌÌÆ¡Ìj›•jdjdj•jdjddjddd9djdd?ddj9djdddj9jd?ddjdjddjdjjj•j••›•›÷››ýýÌýÌýýýýÒýÌÌÌÌÆÌÆ›››•j••dÌÌdjj3jdjdd9djÌ÷d9Æ•›dd9ddj3jddd•dd9ddÒÆ›9ddddd•ÌÌ›•9djj•d››ÆÌÆ¡ÆÌÌ››ýýýýýýýdjýÌÆjÌÆ•j•j•d•jdj•djddjdd?djddddd9d›jdd9dddddddjdd9djddjd••d•p•••ÌÌ›ÆdýÌ÷ýýýýýýýÌý÷ÌÌÆ¡ÆÌ•ÌÌjd››d•d•j›jdjddÌÆÌ¡djd999d3jd9dd›j99dd9jdj••djjjdj•ýj›ddjjd›•Æ›•Ì›ÆÌÌý•ÆýýýýÌjd•jÌÌjÌ››jÆjjj•›jjdjddjd9dddd9d?dj39Ædddd9jdjdddjdjdjdjdjj•jj•j•ÒÆÆ››Ì›•›ÌÒýýýýÌÌÆÌÌÆ¡ÆÆ››››dj›dÌ9j•d9dddddd››Æ›ddddd•d9dd››Ædjd9d9djjj•jjÆ›dd9ÆdjdÆÌ›ÆÒý››››ÆÌýýýýýýýýÆ•ÌÌdÆj›Æjd•j•djddd›jdjddjddj9dddd9•›d9›9ddjd9dj9dddddjddj•d•›jdýjjÌ›ÆÌÌ•jÆýýýýýÌÆÌÆÒÌÌ›››•›d•›dÌÌdj›jdjj3d93•3dýjddd9›dÌd33Ìjddddjdjdd3j•jdjj››dd›jjddÌÆ››÷̛ƛ̛ÌýýÌýýýý¡ÆÌÌjj̕̕d•j›jj•d›Ædjddddj9dddd9jddddddddd9jdddjdjdjddjd›jdj›••Ò÷jd››÷ýÌ›ÌÌÆ››ÌÆ›ý›ÆÌƛƛ›•ÌjÌÌÌdd•jdddd9jd›d9d9d9djdjddd9ddd9dj••jjdd9jdj•dd•j›››dý3d9››Æ››ÌÌÌÌÆÆÆ›ÌýýýÌÆ››ýýj›ýÆ›dÌ•jdddj›djdd?ddjdd9ddddd9jdd9ddddj9ddjd9jdjdjj•dd›•jý•j›ÆýýÌÆýÌ̛ƛƛýý››Ì››÷›Ì›•jÆjdjddd9dj••Æ››d9ddd›dddd99djdjdd9›•jd9j•j••›•dddddddd9•››ÆÌ›ÆÌÆÌ››ÌýÌÌÆýdÌ•›ýýjÌýýd9j›jddjdjddddjddd9dddd?djdddd9ddjddddjddjdddjdd•jjj›Ìj•Ì•››ýýýj››ýÌÌ÷ÌÌÌýý›•››ÆÌ•j›d933›djdjdd››ÌÌ›d•›d9d9j9jdddd9ddj••›d9djddj•jý•j›39d93j•›•››ÆÆ››››Æ›ý÷ýý•pd›ýýÆ÷•dýdjÆdj›jdjdjjjdjdjdjdd9dddd9djjd9d9djdddjddjdjddj•›••jÌ••ÌjÆ÷ýýýý›ÆýýÌÌÌýÌÌý̛̕›Ìj•Æ›•dd›djd9dd››3ý÷›•›ddd9›^ýÌd9d9dÌ›j•9ddd3•ddd•¡d›dd••djý÷››ÆÌ›ý›Æý•›•›ýýýý•dýýý›Ì›jýdÌÌ•j›Ìddjdd•djdddddj9djd9jdddjdd9ddd?dd9jddjddjdd›j›d›ýjdjýÌÌjdýÆ›ýýÌÌýýýÌÌÆÌýýÌÌd•›Æ•jdjjd9ýjd›ddj9d93d9d›••9ÌÌ39ddd››••d9ddd9djjÆÌd9•j›•ýÒý÷›•Ì›÷››ýý››››ýýÌÒýýýý›Ì••jjÆj•jÌÆddjd•jdddj9jdddd9ddd9dd99ddjdddjddjdd9jddjdd•j÷››jdýýÌÌdjÆýýýÌÌýýýýÌ›Æý›ÆÌdjdj9ddddd•d9ýdjjddd3jdddýýýdd››•djjƛ̛jdd9jdddddj3339››^9ýýÌÌ››ÆýýÆÆýýýý÷dýýý›•j•jd››j•››d•jdddd?dddd9jd9dd9djdjdddd9jddjjdjdjdjdjdjdjÆÆÌdd•j›Æjý›ýý÷ýÌýýýýý›ÆÌÌd9dddddd9djj•jdýjdddddjdd?•Ìý›d¡dÆdddj››Æ›jjddd9jdj9dddjd9^9›››Æ9ýÆÌ•›ÆÌýý›ýýýýýjÌÌ›•jdjdj•›•j›djdjdj9jddjdjddddjdd9dd9d9ddddd?dddjddd9j•jdjdj•Ò÷›j•››dýÌÆÒýÌ÷ýýýýý›j›•ddý›ÌÌ¡•jjjj•jýjdd9jdjdd›9›•›ÆdýjjdjýýÌý÷dd9dddjdddjjj•3dd›•d9ýd›››››ÆÒýÆÌÌÌÌÆÌýÌÆ•j•jdý•dj›•jdjddddddjdd9dd9d9ddjddjddd?djdddjddjdjdjdjd•jd•j÷››jý•›ýý›Ì÷ýýýýýýý›•›d9dÒÆ9Æ›•dd•djÆ›dd9ddjjdjj÷ýdd9jýýýdj•›ýÆýÌÒdj9d9ddj93dddd9•j›d›Æd•›•›•›÷ÒýÌÌÌÌÌÌýj•jd›ÌdÒdÌj•dddjdjdjdjddjdjdjdd9dj9ddd9dddddjddjddjdddjdj›jdjjdj••ýý›ýýýÌÌýýýýýýýjÌ›dddjý›dj›ddjdjdd›dd9d9dddd››÷Òdjdjjjj•›ÆÌýýÌ›dddddd9ddd9dÌýd›ÆÌd›ddj••j››Ì÷ýýýýý÷ýj•›jjÆÆjd•jd•j›jdddjddd9jddd9d9dddd9›dddd?dd9dddjddjjd•jd•›jd››d›dÆýý›dýýýÆýýýýýýÌdd9•j•ý9••dj9ddjdd›jjddjdddd›Ì›÷ýj•jddd›ýÌdýÌÆjddj9ddd9d•jd9ddÌÆÒd9d•p•j•ÆÌÌýýýý÷Ò•j›Æ›•Ì›jd•j•jd›jdjddjdjdddjddddd9d9Æ›d9ddddjdjd9djdddjddjjÆddýý•d9j›ýýj•ýýÌ›››÷ÒýÌdd•››j›j9dd•3jd33dj•ddddÒjjÌÌÆ›ýý33››jjdýýdjdd9djdd›djjddjÌ›d›9ÆÌ9dýÌÌ••¡›ÌÌÌÌÌj•››•›ý•››d•jj•j•jddd•jd9ddjd9d9j9djdjdd›dd9dj9dddjdjdj9ddjj•d›Ìjdýjjý•ÆÌÌÆjÌýÌÌÆÌÒ÷ýd9•›•›d›jddjdj›d9d9•jddjdÒ÷dd›Æ›jdj•j•j•9ýÌÌ›ddd9ddjj•›djd9›33dýý9›dýýýÌý•›ÆÌÌÌÌÆ•›Æ›•ýýjjdjdj•j•jdddjjddjdddjddddd9d9ddjd9ddddjd9jdd9ddjdjdjddÌÆj•d•ýdýÌ••ÆÌýýÌýÌ÷›•j÷Ìdjd›•••j•djjdddddjd›•j•djd››•jdjj•jddý÷ÌÌ››d9djj393j3dddd›ddýýddjd•j•›››•ýýýý÷Òý›j›ý•j•djd›jd›•jdjdddddjd?ddjd9ddddd9dj9d9dd9jddjdjjdddjdjddjÌ•j›dÌjd•pÆ¡÷ýýýýýÌý•Ò÷j9jdd9ddý99jjjjdjd›•jjdjdd••›ddd›•›Æ›Ì•••jddd9d••jddjj3jdjd•39dj3jdjj›Æ›ÆýýýÌ÷ýý•›•Æ•Ìjd•Æjj••jdddj9jddddjd9jdd9d9j39dddjdddjddddjdjddjjdjj•›j›•jÌj•jÆjÆÌýýÌý›ýÌÌÌjdddddj9dd9ddddj•›djjjd9dýpddd›•›•››•Ò››•›d9•3djd•›•jjdÌdj•9jj33j•d••ÌÆ¡ÌÌýýÌÌý÷ÌÆ›¡•j•›jd•j•ddjdjdddj9jddjdddjdddddjd9d9djdddjdjjdddjddjd•j•••jÌÌd•jjjÌýýÆÒ›ÆÆý›Ì›ý›jd9jddj›3dddddjj•jddjÆd9ý3d9dÌý›Æ››ýÌÆ›››ÆjÌdjjj›••jddÌdjjÆ9dd9^jjdÌÌ÷ÌÆÌýýÆÒýýÌ¡•›djjddÌ•ddj9ddjdjddddjddd9d9dj›Ì93dddddj9ddjddjdjddddj•jjdj•ÆÌdj•›djýýÌ÷›Æ¡Ì•d•Ìdj•djjdj•dddjjjd•jjjdd9dj•j•jdýý››Æý÷›Æ›ÆjÌ÷jdj›djddýdjdd33›djd›ÌÌÌÌýýýýÆÆÒ÷jÆ•jd•ddÌÌjddjjjdjdd9djddj9ddddddjdd9d9jddjdd9djdddjdjddjdý›d››Æj›••›djýýÆýÌ•Ì9dj›j›ÌÌÌÌdjdjdjdjdjjdd›d›ddjÆÌ›Æýýýýý›•Ò÷›››•dÌÌ9d››Ì•Æ›djdjjd9dd››ddd›Ì÷ýÌýýýýÌ›ýd››jdjjjjÆddjdjd•dd9djdd9dddd?dj9d9dddddd9djdjddjdjj›djdd9ýýjdjÆdj›•ddjÆÌÌ›j•dd››••››÷ÌÌddjdjjddddddd›dd9j÷›Æ››ÌýýýýÆ›÷››•›››d›Æ9d›•jÌÌdjd•ddd›j•›djÌÆÌÌýýýýÌýÌýj•››jd›djdjdjjdjjdddj›djdjdjdd9dd9dd?djdddjdjdd9djjdj•ddýd•djj›Ìý›dj̛̕•djjý•j÷•››ÌÌdj•jd3d›jdýÒ••ddj÷Ò››Æ›ÌÌýýj33›Æ››››Ædd››dj•jj••djdj•jdj›››dýdýÌÌjdýÌý›÷jÆ›•jjdjjjdj•jd•jdj9d›dddd9d9ddddddddddd?ddd9jdjdjdjd›j›djjdj›Æ›ýýdd›››dddjdýýjÌ•jÆ›•dj•jj3Æ›djý•››dj›•••dd››Æ›Æj•›››•jd•j•9d›dj•j•jjd9jd9ÆjdÆ›jýdýýÌÌdÌ÷Ì•jdj•dddj›•ddjddjddddddjddj9jddjdd?d9j9djdddjdddddjddd•jdj•ddjd••dýýýd››Æjd›dj›ýý•jj›djdj•Ìj•ýdj•ýý•jd›Æ››dj9d›Æ¡ÆÌ••››djdj•›jdd¡d›•dÌ•j•djdd9•›dýddd9dd•jj›Ìj•djdjdjýýjdjddddjjdjdjjddddddd9ddd9dddd9djddjdjddjdjddj•›djddjd››jjjd››Æ›d›d•›•ý•d›•÷›jd•Ì•jdj•Ò÷ýýjd››•j››ÆjjÆ•j•›››dj••jj÷ýjddj••›j•j•jÆÌÌd3•ÌÌÆjjdjdj••›•jjdjÆ¡•Ìýddddjjj•dddd9dddj9jdjdjd9d9ddjdd9ddjd9jdddj›•dd›ddjj•jdýddjd›Æ›jj÷j›ÆÌÌjj•jÒ›djjÌjdjd›•ýjÆ›j•j››Æ›•jj›•j•›jd•››•jdýjdj•9••dd9››djÆjd•ý›Ìddj•›jýýÌjd•djýj•ýjjjjjddjjdjdjddjdddddd9ddjddd9d9jdj9dddjjdjdjdjddpdj•jjdd•jÌd››jd÷Ò•Ì›j••››ÆÆÆd•jÆdjjd•9j÷ýýÆjdýý››ÆÆ››•›ÌÌ•jÆ››••Æ››dýdjj•9jd›•››d•jd9›Æ›jj•jddýýÌ•jjdjÆ›•›dd•d•jddddd9ddj9ddjd?djd9d99ddjdddddjdjdddjddjjdj•ddjdddjj•jd›•d•ýý•ý•jÌÌÆj›ý›jdd›djjddÒÌýý¡ÆjýýÆ•››ýÆ››Æj•Æ››•››››j•9••9ddjÌd9Æ••jdj•›jjdj•›djýÌjjd•jdÆ¡dýjdjdjddjdjjdjdddjdjdddd9dddd9djdjdjddd9jdddddjj•jÌddjjdddjddd•jdýý›Ò•j÷Ìjd•jÆdj››•jÌdjjÆ›•ý3jddý•jd›ý›•›•j››•j›jj›•ÌÌd9›•j÷9dddd›djdÌjd•›d÷››•jý÷jjjddjÆÌýjd•dddjddddjd9dd9dd9djdddj9djddd9ddj9jddjjdjdd•jjÆjj•jdjddÌÌdj•jÆj•j••Ìjd›•j›ddÌdddÌ›d•››•ý9dj••››•j3dj›••dd›Ì÷••ýÆd9dd›dddjdÌjjÆjd÷ýj••jjÆ››dÌÌjd•ddjjjýýddjdjddjdjdj9d9djjddjd9dd9ddd9djdj9ddddjdjdjdjjdd•jdj•jdjd››ddjjjÌjd›••jýý••jdjdjdd›jddjj9ddpd›••››÷jjjjj›•ÌÌÌÌdjd›djdj›ddd•››jdjdjjjd•j›d›ÌÆÌjddjdd›•jdjddjdjjd9djd›ddddddd9dd9jd9dddjdddddjddddjddjdjj›dj•j•jddjdjddý•Ìý›djj••ýj•djdjdjdj•›ddddj••dddd›•••Ò÷••••›jdddjdddddý›››djj•Æjjdj••jÌ›•Æjýýj•djdjdj•j•›djdddjddddd9›d99dd?djdddd9d9d9ddjdjdd9jd9djdj•dd•dj•jÆdjj÷Ìýjjjý÷Ì›•Ìd›jjddjdj•jdjÌd9d9dd•jjjd›jd9jj9dÌjj•›9djdjd•p•9ýý›ÆdÌjdjdÌjdjd›•d•j÷j›ýd•Ìdjdjddýý•›•djdd9dj9d9jd›ddddddd9ddddjd9jddjdddjddjjddjdjjddddjj•›ÌýddddjdjjÌÌdddjd›dddjdj›ÌÆ›jd9d9••d•dÌÌÌÆÌ›3d9dÌÆjd9djj3jddý•›÷›ýjdd9djÌÌÆ›ÆjÌÌdjddjdÒÌjddddjddddjd•djddd9jdj9jddj9dddddjjdjddjdddd›djdd›•j9djddjj•dd9d3dddddjjÌÌ›djjj•dddjd•93•djddÌÌÌdÌÆj3d9ddÆdddddjdddjd›jýdýýddj9dd•j››dÌÌddjjdddÌddjd9djdjdjd9•djd9ddj9ddd9d9ddjd?ddjddj9d9djddjdjdÌ•jjddjdddj•9ddd9dddÌÆd3d9^93djÆÆÌÌd›Ìjdjdjd9Ì3•9j•d33dÌjd9¡djdjd9djdd•jý÷9ddÆddj•••¡Æd9dý›djjddj›djjddjdjdjdd9jdjdddjddddd9d9ddjdj•dddjddjjd•jdd››jÌjdjdÌýj•99dj›d•9dj9djd›9j•dd›j››ddddjddjd9›j•j•••jddddddd9d›dÒ•pdj›d9ddjdjdd›ddjjdd›djdjddddddjddjddjdjddd9d9dddjdddd9jdddjÌddjddjjdÆ•jÌj•ddÌdd9d9ddddj9d9›Æ›j•jd9d•ÆjÒjjd›dddjdjdj•jjjddjd9d9dd•dddddddj••9ddddÒddddýjj•j•d9jdjd9dddddjddjdjdj9dd9dd?dddj9d9jdddjjýddjj•ý•jdjdjdj›d9ý9d››djddddd››ý÷››••dd›jdjjdd››d9dýýdd9d?d9d99djdpd9ýÌddjdýd••jddjdjd9•jdj9jddjd9d9d9ddjddddjdjddddjdddjýýddjjÌ•jddjýddÌ39dd›3›dd93ddj3dýýÌ›jd›jjd›Æ›dd›Æ›Ì›•jÌ•jj•dd39djdddjdddjjd•jdjdjÆjjdddd9jjdd9ddd9ddd9ddd9djdj9dddjdjdjjdjddjd9djÌ•ý9djÌýdj••d9ddddjd9ddj•jýÆÌ3ddj•dj••›j•j›Æ›Æý÷•jjddd9dd9Ìdd9•jj3dÌdjdÌdjdj›Æjd9jdddddjjdddd9d9ddjd9ddd9ddjddjjdd•ddjdjdjdddjjj•ddjddÆdj•Ìd9ddd9dd9djjdjjddjjd9d›djd3333•››ýýjdddjdd9339Æ9d›•ýd›jdjjddd•jdd›ddj9d9dddd9jdýdjdddddjdjdddjddjdd9jddjddjdjd•djdj•Òd99ddýd3Òdddjddd9^jjd•j•d9dd9d9ddjd9d9djjddjd9•j9d3Æd•›dj9••d›jdjdjdjÌddjd›j•d9djjdýýdd9j9dd9ddj9ddjdjjddjd9dýdjddjjddd•dddd›dj9ÆÌý3jdj9d9dý•›•››Æjdd33d3d33jdddjdd››jddd9dd9djd•jd9dÆjddjÌddÌjjjd›djýdddddj9jdddd9dddjddjdd9ddjddd›djddjj•djdjdjj9d3Æjdjjjdd9ddjj•››Æ›Æjj3jdd9jdd3jdj•j9•dd•›39d•j••d›j•ddj›djjjddjdjdddjdj9ddjdd9d9ddjd9djddjdjddj9d››ddjj•jddddj›ddd›jddd›ýd9ddÌ››Æ›ýýýýýýjjÌÌÌÌj•9ddddd•93jdj9ddjjdd›djd•dd›ddjddd9ddÌdddddjdd9ddddj9djdjdjjdj›dÌdddjdjjddÌÌ99j••jd›Æý9dÆÌ››•Ì›ý÷ýýý•jÆÌÌ÷Ì•9dddjdjd3dj3›••j›••djddddjdd•djdjd9dd9dd9d9dd9dddj9ddddddj•dddd•jd¡ddjdjjdjÌýÆdddj•3dÌ›9•d9jjÀ›•ÌÆ›ýýýýýÆÌj•jjdÆjd9Ìj•d9d9Æ9•dj3›Æ››d9ddjddj9jdddÌdjdjddpdddjÒdd9dddjdjdjjdjjdjdjddd›djjdjÆdjýÆjdjj›^d›dddjd›ýd›ÌÌýýýý›dd•jdjdjjd9djdddd9d›dd››ddd?d9j•dj›ddjdjdd9dddj9d9djdd9jdjddjdjddddjdd››jjdÌdjd››dÌ•9d›d›ýdddj•¡ÆÌÌýýdddddd•›ýýýjÆ›9dd9d9›9djd9›•dddÌÌýdd9djd9djdjddddddjdjdddjddddjd9jd9dý›ýdddÌdj•j›dddÌddýýjjdj•djdjd9d9jdj9dýýýýjÆ›ddd••9^jjdjddjjdjj›Ìddjd›ddddddj9d9d9dddd9ddj9djdjdjddýý›÷Òdd¡Ì9ýd›•jdd››3djd9djdjdd3ddjdÆýdddjddd›99ýý›ý•jddjddjdÌdjdjdddd9Ò›djdddddddjd9djdddÌdddjddjý››Æýý9d•••d›•ýjddýjd9ddjddjddd›jjddj3339••jdýÆj›Æd›ddÌÌÌ÷jddd9jd9ý÷d9•jd9d9djddjdjÌdjdjdjjdjÆjÌddj9jdj•dd9ýjjd›ddjdj•›•ÌÌ›dddd›jj••dd•jd›jddd›ÆÌ›Ìdjdjd9dÌÌjj›dddddd9dd9d9d9djddj•dddjdjdý•›djdjjddd•›dj•›•j•j•jjd•ýjd•j9dd9dd9ddjj÷jddjddjd›•dd9djdjd9djdj•›ddjd›dj›jdddýý•›dd9›j9ddÌÌ›Ædd9Ìdj9d9jjddjddjd›•›Ìd9d9djddddjd••jjddd9dddjdj9ý›d9d3d›dddjÆ›9djÌdd›ý››d9jddjj•ddd9dddjdddjjddjjjdjjddjdddÆ¡djj9j›jjdj9ýddjýdj•ddjddj9dddjd9ddjdjjddddjdjddjjddd›d9ddjjd3ÌdÆd•›ddÌ÷ddddjjddd9d9d9djd9djddÆ›jd•jddjddjdjddd÷jÌjÌ9ÌÌÌdjdd99jd9^djdddjd•jd9d9djÌdjjddÌdjdjdddd›•j•ddÌ››Æjddjddd9ddjd9›j›dddjddjj•d›ddd›Ædjd›djýdýdddÌÆ›d9djddjj•d›3jdj99djdddj›d›d9•jjdd•›ddÌd9d9933dddjd9d3dd••9dddÒd3j•jdj•jjdÌÌd39djdÌÌÌj3jdjdjjjd›Æý•9•›ddjd›3dd•¡djdjddjd93jdÌdÌd›3•j•j••››jd9djdÒdddjdddjddddÆd9›ÌÌ3d›jddjddjjdj9jÆÌÆd3dj•dd›d›ýÌdýddjÌ›d››Ìdd9•›3jjhdf4-hdf4.3.1/hdf/util/testfiles/jet2.hdf000066400000000000000000003542621503061704500201120ustar00rootroot00000000000000k.dÊÔÀÊdÊÔÀ-dÕŠÉdÕŠjdØŠÈdØŽ,dØ’2dئ  =4' ]VMA0ljhcX0mkjjib<kihhiidI%lihhiih]EmigghjjgY; oigghjkjdV qifefikljd7skfedehklkX*vmgdcdfillc?wohdadegjmiR0 wqjdadefhll_A  wsmfadghhjlgO. "(,047:<=>><:840)# srojcahjjjkj[A !)1;BJPW^bfjmpqrsssrpmib[RH=.$ monkgahklkkkaM, (4>GOW_dhknqsuwxyz{||}}||{xvqleWK>1$ fhjkjbejmllkeU8 !+5@JU]chmqsuwxyz{||}~~€€}zsj`TF2% _aehjdchmnllh\C&  $0?KU_gnqtuvwxxyyzzz{{||}~~€‚‚‚ƒƒ‚zrhUE5& Z\_ciibflonmjbO0!  )7ESckpstuvvwwxxxxxwwwwwwwxyz{|~€‚ƒƒƒƒƒƒ€xl[I5 YZ]`cidbenonleUD6% &4JXdmrstuuvvuusqonmlllmmnnopqrstuvwy{|~€ƒƒƒƒ„ƒ‚xlS>+XY[_bhgcbjnnlfZG>2$*:IXflorttttsqnlkjiiijjkklmmnopqrstuvwxy{|}~€‚ƒ„„„ƒ~seS?, WXZ]cgheackmlg\JA9/ &;JXckrssssqomkigffffghijlmopqrtuvvwwxxxyzz{|}~€‚ƒ„„………‚|qcQ5" WWX\dghgc]ehie]KB<6, #3DZfnrsssqonjgdcbcdefhjlnqsvx{|~€‚‚‚‚€~~~~~~€‚ƒ„……††…ƒ}sZD. WWX\fiihf_Zaca]LB=96  .BVhqrsssrpkfb__``bcegjmrw|…ŠŽ‘”–˜™™™˜–•“ŽŠˆ…ƒ€€€‚ƒ„…††‡‡†…}lT:! ZZ[_hlkjhf[VVYYSG?<:0  ,J^kqrssrpld`^]]_`adgnu}…—ž¤©®²µ·¹º»»»»º¹·¶³°¬¨¤Ÿš”‹ˆ…„„„……†‡‡‡‡†„}nW1 ]]`fklkjih`XSQRPKE@=7# &;Qelprrqnid`]\\]^bfmu‹•¤«²¶¹»½¿ÀÁÁÂÂÂÁÁÁÀ¿½¼º¸µ³°­©¤ ›–Œ‰‡††‡‡‡‡‡†„uY=$`aejmmkjiie_WPMLKGC?;+ /EXgpqqqoid`\Z[\^bgr{†‘›§®³¸¼ÀÁÃÃÄÄÄÄÄÃÃÂÂÁÁÀÀ¿¾½¼º¹·¶³±®ª¦ ›–‘Šˆˆ‡‡‡‡‡†ƒu`G,cdhmnljiiihe_VLHHGEB>2  7N`lpqpolg_[YYY]agpz‹˜£¬´»¾ÁÃÄÄÄÄÄÄÃÂÁÀ¿½¼»ºº¹¹¹¹¹¹¸¸··¶µµ³²®ª¥Ÿ™’Ž‹‰ˆˆ‡‡‡‡„{iP3fgknnhgghiiie^QFEEDC@8$7]hnqrpnhaZWWWY[cn|Œ›«´º¾ÁÃÄÅÅÅÅÄÃÁÀ½º¸µ³¯­¬ª©©©ª«­¯±²³´µµµ´³²²°­ª¢›•‹‰ˆˆ‡‡‡†t\/ gilnngefgiiigbWFDCCBA<*/Kdmpqqoh_YVTVX\do‡—¥±¹¿ÂÃÄÅÅÄÃÂÀ½¹µ±¬¥Ÿš•І‚}{{|}„ˆ’—ž¤©­°±±±°¯®¬¨£œ’Šˆˆ‡‡‡„€hD%hikmngeefhhhe_VFCBBBA=,6Oakppole\WUUVZcp€¤¯·¼ÁÃÄÄÄÃÂÀ½¹´­§ ™‘‡€zsngc_\YWWWWX[^bglu}…•Ÿ¥ª­®®­¬ª§¡š”ŽŠˆˆ‡†…|hL-gikmnifefhhfa[TGBAAAA>. :Rbkopnib[TSTW\jzŠ›ª¶¼ÀÃÄÄÄÃÁ¿º¶°©¢—Ž…|sha[UPLIGECBBBBBDEHJNTY`gp}‡‘™¡¨«¬¬«¨¤Ÿš“Šˆ‡‡…|kQ0ghjlmjgfghgc\URJC@@AA>. 3Xelopmg`XTQTX_k‚–¥±»ÀÃÄÄÄÃÁ¾»¶®¦”‰{pg]ULGC?=;:999999999::;<>@CHNXbny†–ž¤¨ª«ª¨¥Ÿ–Œ‰ˆ‡…pU'fgijkkihhih]UPPNEA@AA>-4Vjmnoog\UQPRWbr‡¡¯¹¿ÃÅÅÅÄ¿»¶°©œ„xk[QIB=9877666667777778888999:;<>BHP\pœ¥ª««ª©£›“‰ˆ‡†‚zO*defghkjjklaUPPQPIC@AA=* !@\jmnnkeWROOR]nƒ™«º¿ÃÅÅÅÃÁ¾»´¬¢—Šwh[PF=:76555555666666677777788888999:;<>DLYi{‘Ÿ¦ªª©§¤”Œ‰ˆ‡…|^:cccdfgijkm[RPQRPHCAAA9$@XglmmibYQOOT]tŠ®¹ÂÄÅÅÄÁ¿»¶°¤—Š{lZNE?:76555555555566666666777777888899::;=@ELVj|‹™¤¨¨¨¥ –‹ˆ‡ƒw^>bbaacdgikmXQPQQNFBAA@4 =WekmmibYQMOU`qŽ¢±»ÂÅÅÄÃÁ½¸²©Ÿ}n`RE>:7544444555555555555555666666777888999:;<>BNZiz‹œ¤¨¨¦ š“މ‡ƒv_=ba`_`bdgjmZRQQNJDBAB?,-XeklljbXQMNTasЧµ¾ÃÆÆÄ¿¼¶®¤—‰rbTI@965444444444445555554444444555556667788899::;>BKYj„”Ÿ¥§¦£–‰‡ƒxb/ba`__``chmbSPPIFCBBB85433333333344444333322222222222221111112222223334466789:<>BI\q„• ¦¤Ÿ™‘‰„u\6`a```a`__`kWMJMHC:+)L`ikid\SJIN[oŠ«ºÂÆÇÆÂ¾ºµ«ŒyeNC;7433322233334444433322222222211111000000000111222233445689:;<>ESf{‘¡¤¤¡šŠ„w\&`````aba__geSEKE=/ A[gjjf_TLHJVk…¡¼ÃÆÇÆÃ¾ºµ®ž‹vbO?9643322222333444443322222111111000/////......///01122233345789:;=AK[r“Ÿ¤¤£›‘‹…}O$ `````accb_`gZHBA5$*\eijg^SKGHUl‡¢¹ÆÇÆÅý¸²ª„nZJ>654332222233444443321111111110000/////.....-------../012233345689;<>BJe~’ ¥¤Ÿ–Žˆ|X0```__aceea`fbVA91" @chigcWMHHLeœ³ÂÇÇÅÿ¸²©‹o[K?854332222234444443221111111110000////////.....--------..01223344569:<>AM_uŠœ¤£Ÿ˜…uU/ _____acege`ce^H2)-Rgihd^PIHKVx•­¾ÇÇÆÃ¿º³ªžx[K@85432222223344444322111111110000000000000000////..--,,,,--./123334568:;=BK[o†œ¢¢Ÿ˜„qS*_____acehhbbdbT0" <_iif`XJGIRd‹§ºÅÈÆÄÀ»µ¬ {dK?85432221223445544321111111110000000000011111111100//.--,,,,,-.0123334579;=@HUi‰™¡¢ •„rP __^__acfhjgbceb9!+Lejgb[QFFM\uŸ·ÃÈÈÄÁ¼·°¤“~hR?854322111234455543211111111100000011111111111222233221/.-,,,,,,-/023334568;=?DMj†˜¢£ –Œƒw;^^^__cfhikkfddgY/=\hid]SIDJXo޶ÂÈÈÆÁ¼¶¯§“}fRA75432111123455554321111111110001111111111111111222333444320.,,+++,-/02334447:<>@I]w £¡™…sB^^^_`egikklifdfaC"  'Hahh`WNFEOc ¿ÆÈÆÃ¾·±¨ƒlWF:54321111234555543211111111111111111110//.....//00123344554420.-,++,,./23344569;>BK[rŒŸ¡Ÿ™Že=]^^_afhjklmlhefeT33Qdgf\RJEHWq°ÆÈÇÄÀº³« ‘s\J>743221112245555532211111111111111110/..-,,,,,--./002234455655320.,+++,-/12344568;>BJYp‘œ Ÿ˜ˆz\5]^^`bgikklmmjgef`D ?XfgcXNHEKa ¼ÊÈÆÂ½µ®¤–ƒcOA853321111235565543211111111111111100.-,++++++,,-../012344566666531/,,++,-/12344468<>BHUxœ¡ ’‡tV&\]^`dijkllmmljefeS4 !J_fg_SKFEPm®ÅËÇÿ¹±¨›ŠtTD:6432111123456654321111111111122210/-+*****+++,,-.//0123445666777653/-,+++,.02444458<>AEXwž¢ž„pM\]_afjkkkllmmlgff`M#1SbeeZOIFG[€¢¼ÉÊÄÀ»´ªžŽy`E;643210001345665542111111111122221/,+*)***++,-.//0111223344566677777642/-+++,-/2344457:>@ESm‰¡‘ƒv9\^`cgkkkkkklmljffdV6  854310001245666543211111111122210.+*)))*+,-./0011222223344556677777776420.,++,-02344567:>BHVlŠŸŸš^.\^`dhkkkkjjklmlggf^IE[ddbRJFGMs›·ÇÊÇ¿º´«Œv^I964321000134566654321111111122210.+))))*,-./0112222222233344566777777776420-,++,-02345568:?BIWo’ž˜ŒtK% \^aeikkkkjijkmmhgfcX M^dc_NHEHR€§¾ÉÊļ¶°¦–jS@65321000123556654322111111122220.+)()*+,.0011222222222222333456677777777653/-,++,.02455568]_bfjkkkjihijlmiggea. T`db]KFDIY±ÄÊÉÁº³¬¢v^I;5432000012455665432221111122221.+)(()+-/011122222233322221112355677777777652/-,++,.02455669=@CG]•  Ž~Z/ ]_bgkkkjjighijmkhgfeA*ZadaXHEENdºÇÊɽ¶¯¦š€gQ@7432100011355555532222211222222.*(((*,.0011122345678876532110//0235667777776420.,+,,.0345567:=@CI\z•¡ŸŒxX#^_cgkkkjihgghilkhgffN" 1]bc_UFDFRm§¾ÈÉǺ³«¡“v]I;6432000012355555432222222222220*(((),./0011235:>CGJMMLJGA<841////02356677776542/-,,,-.1345679;>AENc~š¡™ˆlD^_cgkkkjiggggillhggfW*7^bb^SEDHWv¯ÂÉÉÅ·°¨œ‹lUC8532100001235555543222222222221-(''(*./000135:@IPV[`deeda[TLE=620./01345666666531/-,,,-0245568:753210001123455553222222222221/*''(),//00026BDHTl–Ÿ›Žz=^`chkkkjhgfffhlliggga:  C`ba[ODDK_†½ÆÊÇÀ³ª ‘{ZF;643100001223445543222222222220-(''(+.///016>GRZbglptx{}ƒƒ|r`RE:2///024455665532/-,,,-/245668:=ADFJR™¡š†],^`cgkkkjhffffhlligggdA $),-,)%! )9ELOOG9)  "Jab`ZMDDLcÁÈÊÆ½°§š‰qP@854210000123344444322222222231.*'&'*-.///15?IQW\cgkmpsvy}€„…†††‚whXG820/023455555431/-,+,.0256679;ACEFIZ˜ œ}M% ^_cgkkkjigffgillhffgeE!  ,7AFJMOPONLIEA@CIU[_ab`ZRF5 &Nab`YLCDMf•ÃÈÊÅ»®¤–ƒjJ=644200000122334444322222222320,(&&(+.../039DKQWZ\[YWVVY]bit{…‡‡„~tdL?61/023445554420.-,,-/146678:?CEFHOi‡ž¡Šh=^_bgkkkkiggfhjmlgffhfH# )5@IPVXZ\]^^]]\ZXXY\begiiihe_U@+ *Qab`XKCDNh˜ÄÉÊŹ¬¢’}cE;64310000112233343332222222332/+'&&),....15>@BFKV`ju‡‰ˆ„|gTD92012345554421/-,,,.0356679=CFGHJWs‘¢˜}U* ]_bfkkkkjhggikmlgefhgJ% $5JSXZ[[[[\]^_``acccdeghiijjjiihaO6 -Tbb_XJCDOj›ÅÊÊÄ·ªŸŽx]A954310000112233333332222222332.)&%'*-.../17=EIIGA841////0139ALZi{ƒˆ‹‹€nZG91112344544310.-,,-/256678854310000112223333332222223331,(&%'+-.../27=CC@90-,,++,,,,--/27B\r‹ŽŽ‡v_G5211244444321/-,,-.156678;@FJLJJPe¤˜€\)\_adjkklllkllmmgddfifI%  DRXZ[XRKFA>==>@DIOV]dfghhhgggffffghiihdZ 3Ubb_XKCCOkœÆÊÉõ¥™†mS;743200000122222333333222233331+'%%(,----.26;;93.,++++++++,,,,,-.3@Un…‘ŽƒlI;412344444310.-,,-/35677:>EKPOLLSgž£—yK\^`cjkklllmmmmleddfieE$  2ERWXVRJEA><:9:;=AFMU]defffgffffedcccefggdI"  4Ubb_XKCDNjœÆÊÉ´¤—ƒiO:643200001122222233333333333330*&%%),----.15773/,++++++++++,,,,,,.2;Ja‚‘Ž…eL=42234444321/-,,-.356779=CIQSPMNUŒŸœˆg&[^`bikkklmmmmljdcdfhcA# '9ITVURNIB?<:9889:<@FMU^deeffffedba`___`aceg_B$  4Ubb_XLCDMgšÆÊÉ´¤–€gL9643200001122222223333333333330)&%%),-----0233/-++++++++++++++++++,/6Ce}‹’‘~cL;42334444310--,-.256778CHOX`giihgc^ZWUTTUWZ\\]]_efaL 25(2Sbb`YMCCJa’ÆËÊô£”}cI8543200011222222222233333333330)&$%)+,,,,,-//.,,++++++++++++********++/Ca‘•Žx\A4333444321.----036778:@GOZ[YUOMs”¥q=U\^`djjjiijjhd``adggT2 .HPOKIHGEDCBA@?=;988;>BFNYcjkjhd_VSQPPPQSVY[\\\]^dfe`5 @B:' ,Oab`[OCCH[ˆÃÊÊͤ“|bG7543110111222222222233333333330*&$$(*,,,,,,---,,,,,,,,+++*****)(('(()*+.?[€“”{Z;533444431/.---/357789?FMZ]^\ULW{¤Ž\0S\^_bjjjhgggda`_begfL. 4ELLJIHHIGEDCCB@=;99:>BFP\dikjga[UPNLKJKMPSW[\\\]^`ceeYG3$%3AC;( 'Kaba\QDCFW¿ÊËÅ·¥”}bG7543110112222222222233333333331*&$$'*+,+++,,---,,,,,,,++***)))('&%%&')*,3De‹’’ˆqH;544444320.---/257789>FMY^a_[OPlŽ¥›sEQ[^_aijjifedb`_`cefcC, 4FKKIJMMLKIFEEDB@=;:;>CHNZdikjf`YSNIGEDDFHLPTZ[\\]^_`cee]O@32=DD<  E_aa]SDCESuºÈÌÆ¹¦•~cH7533111112222222222233333333332+'$$&)*+++++,,-,,,,,,,++**)(((('&%$##$&)*-6K|“ƒYC844444430/---.257889>EMW_bb`TO^{¡¡‡Z, OZ^^_hijifcba``aded];) *JKJHKPTURLIGFEDB@=<>?ADHLQXZ\\]___`bddbZG<>BFMU^hiig`TNHC=::;<=>@CHMUY[\]_``_^^__^]MECGLI.4[`a_YHCCK`ªÄÍɾª˜fK7533111112222222112223333333333.)%$%&()*++++++,,,,,+*)(((''''&&%$!  %(*,.NwŒ““~[D74444441/.--.147889=CMV]cff`TQ_ФŸ‚V"KY]]^cgijidbaaaddc\J++DKGFMWbed_XQJIIHGCA@@BJU_gkje_WOGA;878888789<@EMTXZ\^abbba_]\[ZSMJKOK6 $T^a`\KECGS›¾ÌËÁ­œ…jN85332111122222221122233443333431,'%%&&'')**++++++*)(((((((('''&%$!!&)+,8`‘“ŒmQ<54444420/...147889V_`_RHCDIz­ÆÍÇ´¤sU;64321111233322221222334443334431,'&&&&&&&'''(''''''(()+,,--..-,*% "'*+0Giˆ“‘€eI85555431/../1478993.+(&%%%&&&&&&%$###$&()+++++,.4:@GKPSY^bcddddec`]YTB' &CY_^UKDCHk™ÁÏǹ§rK=6321111123333332222234554443344442.+*))****++,-.////000011246773*##'*+-6Su’y]B765554310013699::=CLSUWY^fgd^TY~–¡n7CTZ[ZYROQY^_[TK3! (FMHDBCP^glmlllkigec_ZOF=5.)(''()*+,,--,+*(&%$#%&()******,049?EJPW^bccccddc`]ZP8 7R^^XOFBE\‰µÍË¿®˜{RA74211111234444433222345554433444442/-+*+++,,--..////000112367883*# $'*+-7Su‘y^B76555432111479:::>DLRTUW[dfe`UWu¡ ~ECTZZZYQJGKPPJA5 5KMFBABP]ejkkkjhfb^YRH:2,)(()*+,/011222210-+(&$$%&')))))))*+-19>ELU^abcccddc`]YI0 ,H\][RHBCQw¦ÊÍõ „ZE:421111123445554333334555544334444431/-,,,--...///00011223689993)# !%(+,.:Vw‘Œx]B7665543211258:::;>DMQRSTWbeeaWVmŠ ¡‹S' BSYZZYQG@>?:2'  %?NMDA@ANZbgiigfc_VLB80+*)))-.011122233444420-*'$$%&(())))))))*,/5EMPPQRT_debYVf„ž¢•a1BRXYYZWJ<51)# 2JPKC???GOTWXWQLF>50-,++,-/11111111223445666641.)&$$%''((((((())*+-0==AEHHGD>:62/-,,-./00110000000123457899752.*'%$%&&''((((()))*+08DR]bccddcba\R'#;X[ZUJBCLfšÈÌȼ©`J;4211101245788887555556666543333344555554433333334455678:;;:71'$##$(+,-.6Pn‡iP=766665444469:;;;;@FMMLKLMX`cb\U\x–£Ÿ}LAPVWWYYTI;4/)$ +CQRIA=<;<==<:731/----./001100000///00134679:;;972.+(%%%&&''''((((())+.6AP]accdcbb`\;$ .RXZWOCBFX¿ÊÊólR@622110123579999976666666665433333445555555555555566789:;<:72,%$$$&*,-.0?\w‹zaJ;76666544458:;;;;R\accccbb`N1# &HUYXSEBCNi°ÅÌȽ›z]F93211001357::;::987777777764333233345555566666667778:;;<;83-($$%&),-.04Ki€Ž‰qXD97666655556:;<<;;NSTUWYYUL@<84-! >OUTGA=;8431/..----/001123333110////01269;<=>>??><72.,(&&&&''&&%%%&&'()*+-?Q\accccbb[?,"#77666666668;<<<;;=BHKKHFFFP[`a^UWlˆ££–l9:4'  +HTVUGA>;820/....../11233444430////0247:<==>>??@@@?=93/,*))(''&&%%%%&&'()**,7HXabbcbb`R;)&/GTXXPFBCHx©ÄÎ̺}_G74211001359;<==<<;:9999887654322111122344555677899:::95/+('&')+-./03=Np…Ž‹pVD97777666778;===<<<>CIKJFEDEMY_`^UVhƒ¢¤œwE9IOPPRVXXVNIEA;- 4MVWUGA><820..-../012233443310/./01579:;<==>>???????<94.,+*)(('&%%%&&&'())**.7EXabbbbaZF2(,?NWXSICBDb•¸ÊÎĬŽnR<6311001248:<=>>=<<;::::997643211100112233445667888741.+)(((*,-./038777777789:<>>=<<<>DIJIFDDDLX^_]TVf€¡¥Ÿ~O7GMNMNUXXWQMJFA0 >=;72/-+*)('&&&&'(((())**+.7FZ`bbbb^O<+,8HUWUMEAAR§ÄÎ˹Ÿ€`D:4210001269;=>?>>=<;;;;;:97642110////00112334454421.,+)))*+,../02;K^sˆŒŠ‚qQB:777777889;<>>>=<<<50..-../01223221//./03589:::::9877666778:;;;951.,+*)('''()******++*+-4MZ`bbbaVE0-4CQWVPHB@Gh“¹ÌÏį’qN@7321000147:=>???>>=<<<<;:9763210/..--..//00000/.-+***)*+,-.//02:K^q‚ŒŠƒu_D;87778889:;=>??>=<<<@EIIGEDDDKV\^\TTb{Ÿ§£Š`(1@FGGHOUXXUROJC- HV[[XJC@?=72/.-../012110/.../2689:::976410//...//034688730.,+*)(((*+,,,,---,+++,9N[abba[M6.1>MVVSKC?BT{§ÈÐ˽¥…\H<5211000258<>?@@??>===<<;:975310/-,,+********)))))))*+,-.//0026KasŠ‹„vcL;8778889:;<=?????=<<=BFIIFDDDDJU[][ST`yž¨¥h/.:@AABJQVWUQME:#!LW\\ZLD@??;61.---......../2579:99741/-,++***++++++,-.//000.-++***++,,,,-.0431.++,9KZabb^S>=<:86421/-,+**)(((((((()**,-.////0126@Rn|…‰Š€p]K<878889:;<=?@@@@@>=<<>CGIIEDDDDJTZ[ZSS_w©¦•q8 +5:<<P^ba^T?/08DSVUQJB>BQn›ÃÍÏÆ´ŒnVD93210000247;>?@A@@@@@@?>=;86420.-,+*))))))*+,-..///000014?@AA@@?>===?EHIHEDDDEJTY[YRR^vœ©§˜v> )045538?FIHC;0#'QY]][QFA???=:74100012356898752/.,+**))))******+++++,,-----,,,,,,,,----./14:AA?91,-5CW``^U@/06BQVVSME??G[²ÆÏÎÄ£„hQ@63210000248;=?@@@@@@@@@?>;:86420/.--,,,--..//0000000138CScrˆˆ…}pYJ@97899:;=>?@AAAA@@?>===AFHIHDDDDEISXYXQR]vœª¨›|D(+-..*+/3550(*SZ]][SHA>>??><:6555579::9741.,**))))))))****++++++,,,,-----,,,,----./0158AMgœ¸ÊÑθœ~cL;632100001479<>?@@@@@@@@?><;9864322111112111111011147>H\mz„ˆ‰„zkZF>:889:;<=?@ABBBAA@@?====CGHHGDDDEEIRWXWQQ]uœª©€J&'''' .T[]][UKC===>>>=<<;;;;;:72-+**)))))))))***++,,--------------......//0248>DKORSRPJ4/.19RWVN;-.4?OVVUQKC??DQ¥¿ÎÔʳ—y]D;632100001247:=>?@@@@@@?>==<;988765544332211111124;FTe{ƒ‡ˆ‰…wfTD;9899;<=>?ABCCCBAA@@>===>EHIHFDDDEFIQVWVPQ]uœ«© „O%$"   /U[]]\VMD=9:;====<;:81,***))))(())))*+-.024678::::::987543322223458;>BGPV\bijgc_\I80/1;BC?4,,3?OWWURNFA>>A^ƒ¥¿ÏÔʸž]J=6311000000124689;<==>>==<;:9887654432211111249@Qap}…‡ˆˆ„|eSG?;99:;<=?@ACDDDCCBAA@?>==>AGHHHFDDEFGIPTVUPP\uœ«ª¢‰V%#!  /TZ]]\WNE=8678997631/-,++*(((((*+-/157:<>ACEFHIJKKLLKKKJIHGGFGGIJMPTY^ckpuy|}{voi[E7003541+)*3APWWVSOHD@==JhŠªÃÒÐǶžy`M@84321100001223457788888876654432221111234:AJVdt|‚…ˆ‡‚ym]LD?;::;<=>@BCDDEDDCCBA@@?>>>@CHHHGEEEFGGIOSUTOP\u¬«£Œ[ %#   1SZ]]\XPG>74334443321/,)(''()+.158;=ACFHJMNPRSUVWXYZZ[\\\]]]^_acehmquz…ˆ‹ŽˆymVB410/,(&&)4CQWXVTPJFB?;@Rn¯ÊÐÏÆ·–|eRC8543211111111223333443333322221112358@ACDEEEEDDCBAA@??>>@BFHHHGEEFGHHJNRSSOP\vž¬«¤Ž_ $" 4SZ]]]ZSI?72100123331.)%$%'*-16<@CFIKMOQRTVXY[]^`acdfgijlnoqsux{~‚‡‹’–™œŸŸžœ™“‰~iQ<20-($#$)7FSXXWURMHEA<<<;<=>@ACDFFFFFEDDCBAA@???@BDGHHGFEEGIIJJNQRQOP\w ¬¬¥d $"  !8SY\]][VMA831002440)" !"$&+16<@EHJLNPRSUVY[\^`bdfgikmopruwy|~ƒ‡‹“˜›ž¡¤§¨©ª««©§£š~dI41-($#$,:ITXXWVSOJGC><;BTs¢¼ÌÓÔɸ¢‰pTE<753322111000000000111223457=<<<=>?BDEFGGGGFFEDDCBAA@@@@BDGHHHGFFFIJKKKMOQPNO]x¡­¬¦’g" $!  #,:OW[[[[YTK?655663+$!#$%(.4:@EJMPRUX[]`cfiknpsuwy{}ƒ…ˆ‹Ž‘•›Ÿ¢¥¨«¬®¯°±²²³³³²²°­¡–‚fD40*%#%/=KUYZYWTPMJGC><;>Hq”²ÈÒÔÏÆ¸¤†p\K@9754332222233457:=AGPYbku‡ŒŽ‘’’‘‹…{obQID@?>====>?ACEGHHHHHGGFFEDDCBAAAAACEGHHHGGFFHLMNMLMNOONO]y£®­§”k%%!#-49?MTYZZZYVQH?<:96,$ !#$%&(07?EKQTX[^behknrtwy|ƒ†ˆ‹Ž‘”˜¡¥¨«®¯°±±²³³³´´´´´´´´´´³­¤–~\;3-)&'/=KV[[[YVQMKIFB><;>PmŒªÃÑÒÏÉÁ¯‹yhWNGC@>>?@BFJOU[cjpv{€ƒ‡Š‹†xpd\UOJDA?>>==>?@BDFGHIIIIIHHGGFEDDCCBBCCDFGHHHHGGGGJOPPOMMNNNMO^{¥®­¨–n'&"#.9BHKQUWXYYYXUOFB>81$  "$%&')2;CKQWZ^beimpsvy|~ƒ‡‰Œ’–šž£§¬¯²³µµµµµµµµµµµµµµµµµµµµµ³®¥”vK;1+))0;:@Pgƒ¢¿ÊÏÏÍÄ»¯£•„zrlheeghkptx|€…ˆ‹ŽŒ‡‚~ytlf`ZTLGDB@?>>>>?@ACEGHIJJJJJJJIHHGGFEEDDDDEEFGHHHHHGGGHMRTTRMMMMMMN_}¦¯®¨—q)($ "'/;GQUVVWWXXXWVSLE>5*  #%&'(+6@HOU[_cgkpsvy|€ƒ…ˆ‹’•˜›¡¦«¯²¶····¶¶¶µµµµ¶¶¶¶¶¶¶¶µµµµµµ´°¥‘bH7/,,1;IU]^^\YTPMKIGEA=:;?K^xžµÃËÍÌÉÅ¿¸­¥ž™”‘‘‘“”–—˜——•’Œ‰…‚~ytlf`YSLHECA@@?????@@ACEFHIKKLLLKKKKJJIHHHGFFFFFFGGHHHHHHHGGHIQVXWVNMLLLLN`¨°®©˜s+-*$ 0@MUYYYXXWVVUSME;0$!$'()*,9CLSY_dimqvz}€„ˆ‹Ž‘”™ ¥©±µ¸ºº¹¸¸·¶µµµµµ¶¶··¸¹¹¸¸·¶µµµµ¶¶µ²¨[B3..1:GT]__^[VROLIHGDA<;;>DQp§¼ÇËÉÇž»·´°­ª§¥¢Ÿš—”އwnbZSNIEDBAA@@@@?????@ABDEGIJKLMMMMMMLLKKKJIIIHHHHHHHHHHHHHHHHHHHIKVZ\\ZPMLLLLNaª°®©˜u-!$%$"  !,;MSWYYXWVTRME;0% !$)***,1ALU\bjotx}‚†‰•™œ £©­³¸½¿¾¾¼»·µ´´´´µ¶¸º½¿ÂÄÆÇÇÇÆÄÀ¼¸¶µµµ¶¶µ¦ƒ_B2/06AP]`aa^YUQNKHHGEB=<;<=DTi€—¯¹¿ÀÀ½º·³°«§£ž˜ƒxlaTNIFCBAA@@@@@@AAAABBCEFGIJKLMMNOOOOONNMMLLKKKJJJJJIIIIIHHHHHHHHHHHIJMQ\acb`TNLKKKNc„¬±¯©™w/"$$$#!%.5=FOVWVUSNH?4)%&),-+*+/8IS[bhpuy~‚ˆŒ”—œ £¨¬³¸¼¿ÀÀ½º·´³³³´¶¹¼¾ÁÄÈËÍÏÑÒÓÓÒÑÎÊÅÀº¶µ¶¶¶±~\>114FIKLJF@=;94.*-4?LY`gnt{†‹–šŸ£§¬±·½ÁÄÄ¿º³¯®¯±µ¸¼¿ÁÄÇÊÍÑÕרÚÛÛÜÜÜÜÜÛØÕÑǾ¹·¶¶µ«—vH:349LX`efd_YSNKJIHGFEC@=;;;<=@DINTXXVTPJGFEEFGHIKMOQRSTUUUUUUUUUUUUUUUUTTTSSRRQQPPOONNMMMLLLLKKKKKKJJJJIIIIIIJJJKLNRW]bmrttq`TNKJJNg‹°³¯ªšz2&&&%%$$####$%'(+-./02222210.,*'%#"""#%*0;ABA?:4.*(*3@LV`gnu{‚ˆ“˜ž£§«¯¶¼ÂÆÇÆÃ½¶­¬¬®±·½¾ÀÁÂÆÉÍÒÕÙÛÜÜÝÝÝÝÝÝÝÞÝÛØÒÊÁ¹··¶µ¬™eH823?P\cggd^WPLJIHGGGFDA=;;;<<=>?@AAAAAABCEGJMOQSTUUVVVVVVVVVVVVUUUUUUUTTTSRRQPPOONNNMMMMLLLLLLLLLKKKKKKKKKKKKLMNOSX^dirxzzxeWOKIJNh±´°ª›z23322211111112346789:<<<<<;986420.,*'&%%%&''''''(*.=HQY_jqx~ƒ‹‘–›¡§«°´ºÃÈÉÉǾ±ª§¨¬³¸¼¾¿¿ÀÁÄËÑÕØÚÛÛÛÚØÕÕÕÖØÛÝÞßßÛ×ÏÆ¼···µ±“nO:23>M[dhhfaZPLJHHGGGFEC@?===<<<==>?@ADGIKLMLKIFCBBCDEGJMOQQRRSSSSSSRRRRQQPPPOOONNNNNNNOOPPPPPPPPPPPPPPPOPPPQRSTW\agmqy‚€n]RLIJOj²´°ª›{3<<<<;;;;::;;;<=>?@AABCCCBA@?=<:875310.-+++++,.04:ALSZahry„Š’˜¢¨®³¸¾ÅÉÊÉ嫨§¨­·º¼½¾½½¿ÂÈÏÓÖØÙ×ÔÐËÇÄÂÃÄÆËÑ×ÛÞÞÜØÐÇ»¸·¶µ©mP:26?L\fggeaXRMJHGGGFFEDBA@>====>?ACFIJJIFA=964210//12468>BGJMOPQQQQQQQQPPPPOOOPPQRRSTUVVVWWWWXXWWWWVVVVVVVWXY[_cinsv|ƒ†‡†ubTMIJOl‘³´°ª›{3FFEEEEDDDDDDEEFGGHHIIIIIIHGFECA@?=<:987544457:>BHNV\cjqz€†‹‘™Ÿ¤ª®µ»ÁÆËËÈ¿µ«£¥ª°¶¼½½¼ºº»¿ÄÊÑÓÕÕÓÎÈþº¸¸¹º½ÂÆÌÒØÞßÝÙÑļ¹··³£ŠkM746?M_dffd_YTOKHHGGFFEDCB@?>>?ACEGIJHEA=97554455431/-,,/269=CFJLNOPPPPPPPPQQRSTVXYZ[\]^^^________^^^]]]]]^_acfjoswz†ŠŒ‹}gXNJJPm“´µ°ªš{3OOOOONNNNNNNNNOOOPPPQQPPPONMLKIHGFEDCBA@@@ABDHKPTY_fmsz‡’˜ ¦«±µ½ÃÉÍÍȾ±¥ £ª²¹½½¼º¸··º¿ÆÌÐÒÒÐËý¸´²²´µ·º½ÀÃÈÏÚÞßÞÚÎü¹¸·²¢‰iE935=S^ceec_[VQLJIHGGFFEDBBBBCFHJJJGB=965679;>@BCB>:50,)((*-38=AEHJLMNOPPQRSUWY[^_abcdeeffgggggffffeeedeeefhjmqtx{}‰Ž…n\OJJPn•´µ°©š{2YYXXXXXWWWWWWWWXXXXXXXXWWVUTSRQPONMLLKKKKKLNPSVZ^ckqw|‰Ž”™Ÿ§­²·¼ÆÌÎÎ̼¨ŸŸ«¶¼¾½»·µ´´µ¹ÀÆÌÎÎÍÉÄ»¶²°°±³µ·º½ÀÃÆÈÑÙÞàߨÍû¸¸·±£‰]F713@R^ccb`^\XSPLJIHGGGFFGHIKLLKJG>85445578;?CHLPRPKD;0*'%%&'*-29>BFILNPQRTWY\_bcefghijkllmmmmmmllllkkkllmnpruwz}€ƒ‹‘••uaQKKQo–µµ°ªšz2eeeeeedddddcccccccccbbbaa`_^]\[ZZYXXWWWWXYZ\^beimqw|†Œ“˜£©±¶»ÁÈÏÐÎÆ¶š™›¡°½¾¾¼·²²³³³µºÀÇÊËËÈû²®¬¬®²¶»ÀÃÆÇÇÈÉÌÑØÞàßÙÏÅ»¸¸·³ª‡hN;12;JX`_^^\[YWUSQONNMMMNNNNMKGA943344455559?GNU[\[WQG?81,'&&&'(*-15527>FKKIGFFHKMNNNKHC>82100110/...13457;CNZiqvwumf^VNE@<9766789<9:;<<;:741/////.,+++-03557=FQ]mu{}|ume]ULFB?>=>?@BEGILOTY^bfjmpruxz{}~€€‚‚‚‚‚‚ƒ„†‰‹Ž•šœ ¥ªª¦’tVRXv›·¶±©–o(¡¡¡¡¡¡   ŸŸžœœš™˜—–•”“’ŽŒ‹‹‹‹‹‹‹ŒŽ’”–˜œž¡¤¦ª­°´¸¾ÂÇÎÔÕÑ¿¥ˆ”¥µ¾¾ºµ±¯®¯²¶º»»¹¸·¸¼¿ÁÁ¿µ­©¨®¾ÎÛâåååååååååæååäâààáââáÜÔ˼ººº¸´£zdO<6458;<<;:7542100/.--...-+*))*.13568?IUaqy‚yqi`WNIECBBCDFGIJLORX]aeimpruxz|~€‚‚ƒƒƒ„„„„„……††‡‡‰Š‹Œ’•—› ¢¤¨¬¬ª˜|[UZwœ·¶±©•l&««««ªªªª©©¨§¦¦¥£¢¡ žœš™˜—–•””““’’’““”•–˜šœž¡¤¦©«­±´·º¿ÃÈÎÔÖÓÁ§…¤´½¾ºµ±¯®¯³¹¾ÁÁÀ¼¹¸¸¼¾ÀÀ½²«¨¨²ÆÕàäåååååååååååååäâáââââßÚÑÈÀ»»»º¹²¥”€kRD;6568898641/.,++**++++*))))+/2456:CMYfu…‡†}tkbYPKHFFFGHJKLMORV\aehkpsux{}‚„……†††‡‡‡‡‡ˆ‰ŠŠ‹Ž‘“–™›ž¡¦§©«®®¬ž„`W\y·¶±©“i$ ´´´´´´´³³²±±°¯®¬«©¨§¥£¢¡Ÿžœ››šššššš››ž ¢¤¦¨«®°²´¸º½ÁÄÉÏÔ×ÖÉ©‘…ˆ¡´½¾¼´±¯®¯³ºÁÇÈÈÅ¿¹·¸»¾¿¿º¯©§¨¸ÍÛãåååååååååååååååäãããããáÝ×ÏÆ½¼»»»º´©›ˆm[K@9656666420.,*)((())))())*-14567=HS^j{…‹ŠvlbYPLJIIIJKLMNPSV[`dhknsvy{~ƒ„†‡ˆ‰‰ŠŠŠŠŠŠ‹ŒŒŽ‘“•–˜œŸ¡¤§«­®¯°°¯£Œf[_{ž·¶±¨’e! ¾¾¾¾¾½½½¼¼»º¹¸·µ´²±¯­«©¨¦¤£¢¡¡      ¡¢£¥§ª¬®°³µ·¹»½ÀÃÇÉÐÖØ×Õ®Žƒ‡•¸½¾¼¶°®­®±»ÄËÏÐÏÉÁ¹··»½¾½¸­§§©¿ÔßäååååååååååååååååäääããâàÛÕÌÀ½»»»¼»·¯£ŒyfUF;533444320-+*)(((((())+-035678BNYdp‚’’ƒwlaXPMLKKLLMMNPSW[`ehkorvy|„†‡‰Š‹ŒŒŽŽ‘‘’“”–—™› £¦©¬°²²²²²±¨’l^c~ ¸¶±§a ÊÊÊÊÊÊÊÊÉÉÈÇÆÄÃÁ¿½¼º¸¶´³±°¯®­¬¬««««¬­®¯±³µ·¹º½¾ÀÁÃÅÈËÎÒÙÙØÐ¹…ˆš·¿¾ºµ¯¬¬¯µ¾ÊÐÔ××Ö͹¶·¹»¼¼µ«¦¦ªÇÙâåååååååååååååååååååäääãáßÛÕÉÁ½¼¼¼¼¼»·¬ž~lWK@955443320/.,+++++-.0235679=MYcmz™œš“ƒuh]UOMLLMMNNPRW[_bfjmptw|„†‰ŠŒŽ‘’“”•–—™š›œŸ ¡£¤§©«­°µ¶¶¶µ´³­šudh‚¢¸µ±¦Œ[ ÔÔÔÔÔÔÔÔÓÓÒÑÏÎÍÊÈÆÄ¿¼º¸¶´³²±±±°°°±±²³µ¶¹»½¾ÀÂÄÆÇÉÌÏÑÔ×ÚÚѽ•€†™¯½¾»µ°««¯¶¾ÇÐÔרÙ×Îú¶¶¸º»º´©¥¦«ËÜãååååååååååååååååååååååãâàÝÙÏÇÁ½¼¼¼½½¼¸°¦š‹vhZND;865432210////001245668>GWajv…œ¢£ž“pdZSNMMMNOPSUX]`cfjnqux|€ƒ†ˆŠŒŽ‘’“”•—˜š›œžŸ ¢£¤¥§¨©ª¬®¯°²¶¸¸¸·¶µ¯Ÿ{im†¤¸µ°¤‰VÝÝÝÞÞÞÞÞÝÝÜÚÙ×ÖÓÑÏÍËÈÅÃÀ¾»º¸··¶¶¶¶¶·¹º¼¾ÁÃÅÇÈÊÌÍÏÐÓÕרÚÛÖÀ¢„‚–«»¿¼¶°«©­µ¾ÇÎÔרÙÙØÏĺ¶¶¸¹º¹³¨¤¥¬ÎÝäååååååååååååååååååååååäâàßÜÕÍÆÀ½¼¼½¾¾¾»¶®¤“…wi\MF@;854332222223345679>GSait‚”¨«¨Ÿyj_VQNNNOQSVX[^behknswz~…‡ŠŒŽ‘’”•—˜™›Ÿ ¢£¥¦¨©ª«¬­®¯°±²³´µ¸¹ºº¹·¶²¢nr‰¦¸µ°£…QççççèèèèççæåãáßÜÚ×ÕÒÏÍËÈÆÃÁÀ¾½½¼¼¼½¿ÀÂÅÇÊÌÍÏÐÒÓÔÕÖØÙÚÛÛÙÉ©Šª¹¾½¸°«¨ª³½ÆÍÒÖØÙÚÚØÐÅ»¶µ·¸¸¸²¨£¥¬ÐÞäåååååååååååååååååææææåäâáßÞÙÓÌÅ¿¼¼½½¾ÀÀ¾¼·« “†xg[QIB<97544434445667:@IS^ir€‘¥³²ªŠrdYSONOQSUY\_adgjmpty|€ƒ†‰ŒŽ‘”•—˜šœž ¢¤¦¨©«¬®¯¯°±²³³´µ¶¶···¹º»»º¹¸´¦‡sw¨·µ°¡KðñññòòñññññðïíëçãßÛ×ÔÑÏÎÌÊÈÇÆÅÄÄÄÅÅÇÉËÍÏÑÒÓÔÕÖÖרÙÚÛÛÜÛÕ­Ž‚ªº¿½º³ª§¨­½ÄËÐÔØÙÚÚÚØÑÆ»µµ¶···²§£¤«ÐÞäåååååååååååååååååæææææåãáàßÝØÑÊþ¼¼¼½¿ÁÂÂÁ¼µ«¡”ƒvj_UJD?;86656677789BMWahr£¶»¶©—i]UPOPRUX[_bdfilosvz‚†‰‹Ž’”–˜š› £¥¨ª¬®°±²³´µ¶¶··¸¸¸¹¹¹ººº»»¼¼»º¹µ©y|‘ª·µ°Ÿ}FüûùöôñðïïðññòóóòñðíéâÝØÔÒÏÎÍÌÌËËËÌÌÎÐÒÔÖ×רØÙÙÚÛÜÝÝÝÝÛÖ¢…}ˆ¦À¿½¹µ¦¤¦¬¹ÃÉÏÔØÚÛÛÛÛÙÑǽ¶µµ¶¶¶²¨££¨ÎÞäååäåååååååååååååææææææåãâàßÞÜØÒÊ¿½¼¼½¿ÁÃÅÅÿ¹±£˜Œ€uh_WQKEB@>==>AFNZagnv‡™¬»ÄÀ±†p[TRQRW[_bdgiknqux|€ƒ‡Š’”–˜š ¢¥¨«®°²´¶·¹ºº»»»»»»»»»»»»»»»¼¼¼¼½¼»º·¬“ƒ–¬·´¯›v> ´µ¶¹¾ÂÇÈÈÆÄÆÉÍÓÜãéìëéæâÝÙÕÒÑÐÏÏÏÏÐÑÕ×ØØØ×××××ÙÚÛÛØËÀ²¡||¥ºÀ½ºµ­¢¢¨±¼ÆÍÓ×ÚÛÛÛÛÛÙÓÉ¿¸´µµµµ²©£¡¥ÈÜãääääåååååååååååæææææææåãâàßÞÞÛÖÐÇ¿½¼¼¾¿ÂÄÆÇÆÃ¾´ª •‹}skc\UQNLLNQUZ`fkr}Šž¯½ÆÈ»¥ŒucVTSUY^bdgilnqtw|€ƒ‡ŠŽ“•—šŸ¢¤¨«®±³¶¸º»¼¼½½½½½½½½½¼¼¼¼¼¼¼¼¼¼¼½½½½¼»¸®–„ˆš¯·´®—p8 ”¢±½ÅÊÎÏÏÍÌÌÌÌÌÐÖÜâèëêèäàÛØÕÔÓÒÓÔÖØÛÚÙÔÊÅÆÉËËÆ»¯ ‘„€}ysyŒ¤¸Á¾º¶°¤Ÿ¢ª´¾ÊÑÖÙÛÛÛÛÛÛÚÔ̺µ´´µ´²ª£ ¢ÁØâäääääååååæææææææææææææåãâàßßÞÝÚÔËÅÁ¾½¼½¾ÀÂÆÈÉÉÆÀ¹°§†~vogca__`cfilrz…’ ³ÀÉËÆ­’zgZUVX\aehjlnrux|„ˆ‹Ž‘”—™›ž¡¤§ª­±´·¹»½½¾¿¿ÀÀÀÀÀ¿¿¿¿¿¾¾¾¾¾½½½½½½½½½½¼¼¹°™‰Œž±·´­“i1 ˜²ÈØàââââââáÞÙÓÏÎÑÖßèêêèæáÞÛØ×רÚÜÞÙͶ¥š›œ™Œ{iVGGP^lw¨¹ÂÁº¸²©£¬·ÁÎÕØÚÛÛÛÛÛÛÛÖÏŽ¶´´´´²«¤  ¸ÓàäääääääååæææææææææææææäãáàßßßÞÜ×ÏÈÃÀ¾½¼½¾ÁÅÈËÌÌÈüµ¬ —ˆzvtrqqrsvyƒœª¶ÅÌÎɼ—|i\WX[_dhlnpruy}€„ˆ“•˜› £¦ª­±´·º¼¾ÀÁÁÂÂÂÂÃÃÃÃÃÂÂÂÂÂÁÁÀÀÀÀ¿¿¿¿¿¾¾¾¾½¼º±œ‘¢³·´«b+ºÒÝâããââááááááàÙÒÏÏÒáçêêêæäáÞÜÝßààÞÊ mbSH>2$'6Pcr€±¾ÃÁ½¸µ¬¡™š¢­¸ÄÒ×ÙÚÚÛÛÛÛÛÛÙÒÊÀ¸µ´³³²¬¥ ž®ÍÞääääããääååæææææææææææåäâáàßßßßÝÚÑËÆÂ¿½½½¾ÀÅÈËÍÎÍÉľ¸®¦Ÿ˜‘‹†ƒ}{{~„Ÿ«µ¾ÇÐÒÍÀ¥{g\XX]bgkmprux|…‰‘•—šœŸ£¦©­°µ¸»¾ÀÂÃÃÄÄÅÆÆÇÇÇÇÇÇÇÇÇÇÆÆÅÅÄÄÄÃÃÂÁÁÀÀ¿¿¾½½»²Ÿ‘–¥´·³ªŠ[%ÅØàââàßßßààààááàÚÔÏÏÓÜäéêéèåããææÚ¸s;)  1Iav‡˜¦¹ÄÄÁ½¸¶®¢˜–˜ ¬ºÉÖØÙÙÙÚÛÛÛÜÜÛ×ÐǼ·´³³²®§¡ž¢¾ÔâääãããããääååååææææåååäâáàààßßßÞÚÒËÆÂ¿½½½¾ÁÆÉÌÏÑÑÏÌÇÀ·°©£•‘’™¢«´¼ÂÈÎÓÓ̶—u_\\^ckortvz}…Š“—𠣦©­²µ¹¼¿ÂÄÅÆÇÈÈÉÊËÌÌÌÍÍÍÎÎÎÎÎÎÍÍÌÌËÊÊÉÈÈÇÆÅÄÃÂÁÀ¾½»³¡—œª¶·³¦‚PÍÛáâáßßßßàààààááÞØÒÏÓÛãèêêéèçç⽊W/  2Sgx…˜¢¯ºÂ޹·µ§œ•”–ž¬¼ÍØØØØØÙÛÛÛÜÜÜÚÖÎÁº¶³³±¯©£žŸ±ÈÜãäããããããããääääääääããâááàààààßÜØÏÉÄÁ¾½¾¿ÂÅÊÎÑÓÔÔÒÏÌÆ¾¸²­¨¤££¤§¬±·¼ÀÇÌÑÓÔÇ«Žte^_bglrtwz}ƒ‡Œ”𡤍­°´¸»¿ÁÄÅÇÈÉÊËËÌÍÍÍÎÎÎÏÏÏÏÏÐÐÐÐÐÐÏÏÏÏÎÍÍÌËÊÉÈÇÅÄÃÁ¿¾»´¢š ¬··²¢{HÏÜáâáÞÞßàáààààááßÙÓÑÓÛãéêêêéæÞ«uF"'A\x†‘™Ÿ«µ¾ÄÅþº¸·° —““•¬¿ÑÙØ×ÕÕØÚÛÜÜÜÝÜÙÔÈ¿¹´³±°¬¦Ÿ¦»ÒáäããããââââãããããããâââááàààààßÝÙÓËÅ¿¿ÀÂÅÈÌÐÒÔÖÖÕÓÑÎÊÅÀ¼¸µ´³´¶¸½ÀÃÇËÏÒÓΡ†reachlquy|€„ˆ”˜œ ¥ª®²¶º¾ÀÃÅÇÈÉÊËÌÌÌÍÍÎÎÎÏÏÏÏÏÏÐÐÐÐÐÑÑÑÑÑÑÑÑÑÐÐÏÎÍÌÌÊÈÇÅ¿¾¼´¤ž¤¯··±žs@ÎÜáááÞÝÞàáààààáàÞÙÔÒÖÞåéëêéãÒ´_0 -Kh~—Ÿ¦¯»ÂÆÆÄÁ»¹¸·ª›”““”œ­ÂÕØ×ÔÓÓ×ÙÛÛÜÜÝÝÜÙÏŽ·³±°­©¡Ÿ­ÃÚâããããââââââââââáááááàààààßÝÙÓÍÅÁ¿¾¿ÃÇÊÎÑÔÕÖ×ÖÕÓÑÎÌÉÆÄÂÁÀÀÁÂÄÇÉËÎÑÓÐÇ·Ÿyjddflrvz}‚†‹‘–¡¦ª®³·»¿ÂÆÈÉÊËËËËÌÌÌÌÌÌÌÌÌÍÍÍÎÎÏÏÏÐÐÐÐÑÑÑÑÒÒÒÒÒÒÒÑÑÐÏÎÍËÉÇÄÀ¿¼´¥¡¨±¸¶°˜j7ÍÛáááÞÝÝÞàáááááÞÚ×ÕÔÛäéëëêæÏ¡X ,Qn‚¦®·¿ÆÇÇż¹¸¸·¢—“““”œ®ÅÖØÕÒÏÐÕØÙÛÜÜÝÝÝÝ×Íû´±°®«¥œ¡°ËàâãããââââââáááááááááàààààÞØÑÊľ¼¼¾ÀÅÈÌÏÒÔÕÖÖÕÔÒÐÍËÉÈÇÆÅÅÆÇÉËÎÐÒÓÔÐÁ¦ˆoffhlrwz}€…Œ’˜ž£ª°µ»¿ÄÇÈÉÊÊËËÌÌÌËËÊÊÉÉÉÈÈÇÇÇÈÉÊËÌÍÎÏÏÐÐÐÑÑÑÒÒÒÒÓÓÓÓÓÒÑÑÏÎÌÉÆÁÀ¼´¦¤¬´¸¶¯‘a/ ÆØàáâÞÝÝÝÝÝÝÝÜÛÙÙÙÜáèêêêèØ¦j4'[u‰˜¦´»ÁÅÇÈÇÅÁ¿º¹¹¸´›•“““”›°ÈØØÒÍÊËÐÓÖØÚÛÜÝÝÞÜ×ÏÅ»³±¯­«¡œ «ÍÛáããââââââáááááááàààßÞÜØÏȾ»ºº»½¿ÃÅÇÉÊÌÌÌÌÌËËÊÊÊÉÉÉÉÊÌÎÏÐÐÑÑÏɺ•}oihjoty}„‰–¥«±¶¼ÂÅÇÈÉÉÊÊÊÉÇÆÄÂÀ¼¸µ±®«ª©¨¨¨©«­°´¸»¿ÃÈÊÍÎÐÑÑÑÒÒÒÒÓÔÔÔÔÔÓÓÒÐÏÌÈÂÀ¼´¨§°¶¸¶«†T$½ÓÝàâàßÞÝÝÝÝÝÝÝÝßâäæéèã׿P- $Iu‹«¶¿ÂÅÇÈÇÅÃÁ¾ººº·°˜–••”•œ²ËØ×ÐÊÆÆÊÎÑÓÖØÚÜÜÝÝÛÖÏĸ³°®¬¦  ²É×ßâââáááááááàààßßÞÛØÔÐÊÄÀ½»ººº¼½¿ÁÃÄÆÇÈÉÉÊÊÊÊËËËÌÍÎÎÏÏÏÏÏÎÈ»«™ˆxropty~‚†‹’˜Ÿ¦®·¼¿ÂÄÇÈÈÇÆÄÀ¼¸³¬§¢žš—•“‘Œ‹‹‹Ž’•šž£©¯¸½ÃÇËÎÐÑÒÒÒÒÓÓÔÕÕÔÔÔÓÒÐÎÉÃÁ»³©ª³·¸µ¨|I¯Ê×ÝáààßßÞÞÞßßàáâäåäÞ͵•o8@h ®¹ÀÄÆÇÈÇÆÄÂÀ¾º»»·­˜˜˜—••´ÍØÖÍÆÂÀÃÇÊÍÐÔ×ÙÚÜÝÜÚÖÎÁ¹´°­ª¤Ÿœ›¢²ÄÓÝááááààßßÞÝÜÛÚØÖÒÏËÇÿ½¼»º»¼½¿ÀÃÄÆÇÈÊÊËÌÍÎÎÎÏÏÐÐÐÐÏÍÊŽ´¤—Š~uqsux}„Š–§­³¸½ÂÄÅÆÅÁ¾¹´¯¨£žš•Œ‰†„‚€€~}}}}}~ƒ†ŠŽ”𤬴¼ÂÉÌÏÑÒÒÒÓÓÔÕÕÕÕÕÔÓÒÏÊÃÁ»³«­µ¸¸´£q?¼ÌÔÜÞßßßßßßàààßÝÙÒǰ‘lE" 6_ƒ¡±»ÂÅÆÇÈÇÇÅÃÂÁ¾¼¼¼·ªš››š–•ž·ÏØÕËþº»¿ÁÄÈÌÑÔ×ÙÜÜÜÛ×̺´¯¬¨£ž›™ ­¾ÏÜÞßàßÞÝÜÛÚØÖÔÒÏËÈÅÃÁ¿¿¾¾¿ÀÁÃÅÆÉÊËÍÎÏÏÐÐÑÑÒÒÑÑÏÎËÈﵫŸ‘zvtux|†‹”š¢ª²»¿ÃÄÅÃÁ¾ºµ­¦Ÿ˜‘Š…‚}|{{zzyyyyyyyyyxwwwwxz|‚‡‘𣭶ÀÆËÎÑÑÒÒÓÔÕÕÖÖÖÕÔÓÐÊÄÁº²­¯·¹·³›f5Ч¹ÅÑ×ÚÜÜÝÝÝÝÜÚÔÊ·{H* (S}š³¾ÃÅÅÇÇÇÇÆÅÄÿ½¾½·¨žŸ—– ¹Ñ×ÓÉÀº´³µ¶¹½ÂÈÌÐÔÙÚÜÜÛ×ÎÄ»³®¬¨£œ™˜š¢³Î×ÝàßßÝÜÛÙÖÔÒÐÎÊÈÆÄÃÃÃÅÇÉÍÏÑÓÔÕÖÖÖÖÕÕÕÔÓÒÒÑÏÍÉú°£’‡zwuuvx|…Œ”¥°·½ÁÃÅÅÅÄÁ¸®£˜Ž…€~|{zzzyyyzzz{{{{{{{zzyyxwvvuuuvxz€ˆ‘œ¦´½ÄÊÎÑÑÒÓÔÕÕÖÖÖÖÕÔÑËÅÁº²®³¹¹¶±’Y+ rƒš¦­±´´²¬¥š‹y\F2" Nz›°ÁÃÄÅÅÇÇÇÇÆÆÆÅÃÀ¿À¿¸©£¤¤ —–¤¼Ò×ÑÆ½¶­©§¦§ª¯µ»ÁÇÏÓ×ÚÛÛØÓËÁµ°­ª§žš—––ž®¿ÎÙÜÝÝÜÛÚØ×ÖÕÔÓÓÔÕÖÖ××ØØØ×××ÖÕÕÔÒÐÍÊÆÁ¹±©¡™‡‚}||}~€…Š•šŸ¥«²¹¿ÂÅÅﱤ—‹}{zyyyyyz|~€‚„ˆŠ’””””’‹‡„|zxvtssssuy‡‘¡¬·ÀÈÍÏÑÒÓÔÕÖÖ×ÖÖÕÒËÅÁ¹²°¶º¹µ®‚Hfnsw{}zxsmd^VMC6," 0iªºÃÃÄÄÅÇÇÇÇÇÈÈÆÄÁÁÂÀº¬¨¨§¡––¦¿ÓÖÐż´ª£Ÿœ›œž£©¯¶ÀÇÍÓ×ÚÙ×ÓÎú³®«¦¡™––› §³ÂËÒÖרØ××ÖÖÕÕÕÕÕÕÕÔÔÒÐÍÊÆÀ»·²­§£žš–’Œ‰†ƒ‚€€€‚„ˆŒ’™¡©±»¿ÃÅÆÂº¯¤™Žˆƒ|zyyz{~†‹˜¢§«¯²³´µ¶¶µ´³°­©¤Ÿ—‘Šƒ}xurqqqsw|…“Ÿ«¶ÀÉÌÏÐÒÔÕÖ×××ÖÕÒËÆ¿¸²²¹º¸³ªs;^aba_\XTPKEA=83/*#  L‚¢´ÀÃÃÃÄÅÇÇÇÇÈÉÉÇÅÂÃý±¬¬©¡––©ÁÓÖÐÄ»²¨Ÿš”‘“—£®µ¾ÆÍÕר×ÕÎÆ¾¶°«¨¤Ÿ›—•”•𥫲·»ÁÃÅÆÇÈÇÇÆÄÂÀ¾»¸´°¬©¥ ™–’ŽŒ‰‡…„ƒ‚‚‚ƒ„…‡‰Ž”š¡§°¶»ÀÄÅÁ»³«¡˜‡€{yxxy|€„Š˜Ÿ¥«°¶º¾ÁÄÆÇÈÈÉÉÉÈÈÇÅÃÀ¼¸±©¡˜Žƒ|vrpooqu{‡“Ÿ¬¸ÃÈÌÏÑÓÕÖ××××ÕÑËÆ¾·³´»º·°£c/YYYWSKGDBA@@?>=:6/'h—¯»ÃÃÂÂÃÆÈÇÇÈÉËÊÈÅÄÅÅÄ¿µ°¯© •–¬ÃÔÖÐĺ²¨—Ї„…ˆ‹™¡©³½ÉÐÔÖÖÕÑËú²®ª§£™–“‘‘’”—œ£§ª¬­®®­«©¦£ œ˜“‹‰‡†……„„„„„……†‡ˆ‰”™Ÿ§®¶½ÄÉÉÇÿµªž‘…|xvvvxz}†Ž•ž¦®¸¿ÄÇÊÍÎÏÏÐÐÑÑÑÑÑÑÑÑÑÐÏÎÌÊÅ¿¸¯¤•‰wrnmnps}‡”¡®¼ÄÉÍÏÒÔÖ××××ÕÑËż¶´¶¼º¶­šR$ UVVUSJFCAAEIMPRNH@6)  $¤¶¾ÄÂÀÁÃÆÈÇÇÈÊÌËÈÆÆÇÇÅÁ¹³°¨ž•–®ÅÔÕÐÄ»²¨–އƒ~||}„Š’›¥¶ÂÌÔÖ×ÖÕÒ̾µ¯«¨¦£ ˜“‘ŽŽŽŽŽŽŽŽŒ‹Š‰ˆˆˆ‡‡‡††††††‡‡ˆ‰Š“—›£«³»ÃËÏÒÔÓɹ©™Œ€{wtssstuw}…›§¶¿ÅÉÌÎÏÐÐÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÐÎÉú«Žwolllnt~‰–¤µ¾ÆÊÎÑÔÖ××××ÕÐËû¶¶¸½¹´¨ŽBSTUUTMIGGJ^fjji_VJ<- 7–¯»ÀÄÁ¿ÀÂÆÆÆÇÉÌÍËÉÉÉÊÊÇ»²­¤›”–°ÆÔÕÑȾ´¬ ˜‰ƒ~zxwvwxz~ƒ›ª¸ÇÒÕÖÖÖÔÎÆ¼³¬©¦¥£ žœ™—•“’‘ŽŽŒŒŒŒŒŒŒŒŽ‘“•˜š¡§¯¶½ÃÉÐÓÕÖÕÇ´¢’ˆ|yvtrqqqru|†’¡´¾ÅÊÍÏÏÐÐÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÒÒÐ̶§–†unkjjmt~Š—ª·ÀÇÌÐÓÕרØ×ÔÏÊÀ¹··»½¸±Ÿy-SUVWVRONQ[ptutocWH9( @±»ÀÄÁ¿¿ÀÃÄÅÈËÎÎÌËËÌÌÊÆ¿¶¬§ ™”–¯ÅÓÕÒËļ³§ž–‰‚~{ywvvvwy}‚Š•£·ÃÍÓÖÖÔÑÍÈ¿¸±¬¨¤¢ Ÿ›™˜—–••••””””””••–—™œŸ£¨­´¹¾ÃÇËÍÏÐμ«Ÿ˜•‹…€{wspoooqw€‹©³»ÁÈËÍÏÐÐÑÑÑÒÒÓÓÓÔÔÔÕÕÕÕÕÕÕÔÔÔÔÓÓÓÓÓÓÓÓÓÒÒÐËö§•~slihjow‚Ž£±¼ÄÊÏÓÕרØ×ÓÎɾ¹·¹½¼¶¬”e SVYZZWUU[k|~~zrcSB2# Dž±»ÀÄÂÀ¿¿ÁÄÆÊÎÏÏÍÍÎÎÌÇ¿µª¤¡œ—“•­ÂÑÓÒÎÉý²ª¢›”‹†‚~{xvuuuuwz‡–£±¾ÉÑÔÕÕÓÍÈþ¹²®«©¦¤¢¡ ŸžœžŸ¡¢¦©¬¯²·º¾ÁÅÉÌÍÊÁ­§¥¤£™Ž‡~{xtqnmklpvƒŽš¤¯¼ÃÉÌÎÐÐÑÑÒÒÓÓÔÕÕÖÖÖ×××××ØØØ××××ÖÖÕÕÔÔÔÓÓÓÓÓÓÒÐ˵¤‰yoighlr{‡›«¸ÂÉÏÒÕרØ×ÒÍǼ¹¸º¾º´¥‡RSY]_`]\^gz„…ƒ|q]J8)Bœ¯¹¿ÄÄÁÀÀÂÅÉÍÐÐÐÐÐÏÎǼ¯£šš›š–’“¨¾ÎÑÑÐÍÊÇ¿¹²«¥š”މ„~{xvutttuv{„Ÿ®¿ÈÎÒÔÕÕÓÐËÅÀ¼¸¶²±¯®­¬««¬¬®°²´·»ÀÄÈÌÏÎËǽº·°¢„}zzz||{yuqmjgglrz…‘¥´¿ÇËÎÏÐÐÑÒÒÓÓÔÕÖÖרØÙÙÙÙÚÚÚÚÚÚÚÙÙÙÙÙØØ×ÖÖÕÔÔÓÓÓÓÒÒÐËÁ±•sjffinv€•¦µÀÈÎÒÕרÙÖÑËĺ¹¹¼¿¸±œw> T]cffcbiu†‹Š„ykP<, :–«¶½ÅÆÅÃÃÄÊÎÑÒÒÒÒÑÏ˹¥•Š„–—•‘‘¢¸ËÏÐÐÏÎÎËÉÅÀº°¨ ™’Š„€|xutsssstv{„˜©¸ÅÎÔÖÖÖÖÖÕÓÐÌÈÆÄÃÃÅÆÈÉÊÍÏÑÒÓÔÕÕÔÔÐÆµ ŠunlowˆŠŠ…~vmd`]^_cj•©ºÅËÍÏÏÐÐÑÑÒÓÔÕÖרÙÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÙÙØ×ÖÕÔÓÓÓÓÒÒÏɽ¢‹ylfdgkqz£³¿ÇÎÓÖרÙÕÏÉÁº¹»½¿¶­‘e+Ucjmmlnx…Š€oW7* +… ­µÀÇÈÉÊÌÑÒÓÓÓÓÑͰxlgg€Ž””Ž–¬ÁÉÌÎÏÏÏÏÏÏÏÎÊž·¯¥–ˆ‚}ywtsrrrruxˆ•§´ÀÉÐÕØÚÜÝÝÜÛÚÙ×××××ÖÕÔÑÍÁ¯œ‰zjilt”••‘‰|oc\ZYYZ]fv‹¢·ÅÊÍÎÏÐÐÑÑÒÓÕÖרÙÙÙÚÚÚÚÚÚÚÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÚÚÚÚÙØ×ÖÔÔÓÓÒÒÒÏȰ—‚qfcehlt‹ ±¾ÇÏÓÖØÙØÓÍžºº½¾½²£|IVfnqrsyƒ“‘†t^H5' r”£©±ÄÊÌÎÑÓÔÔÔÓÑÊ»¦Œtib__n„Ž‘ŒŽŸ³¿ÄÉÌÍÍÏÏÐÐÐÏÍÊÆÀ·°©¡š‘Œ‡‚zwusrrsuw{‡Ž–Ÿ©°·¼ÁÄÇÈÊÊÉÆÀ¸® ˜‰‚}|ƒˆŽ‘’••ƒxmea]ZYY^frƒž¬¸ÁÈÌÎÏÐÐÑÒÔÕÖרØÙÙÚÚÚÚÚÛÛÛÜÝÞÞßßààààààßÞÝÝÜÜÛÛÛÛÛÚÚÚÙ×ÖÕÔÓÒÒÒÐ͹ ‰vhcefjq‰Ÿ±¿ÈÐÔרÙ×ÑÊüº»¾¾¹®–h5Wiruvzƒ“–~jWG9, Y†˜œ ´ÄËÏÒÓÔÔÓÑÆ¶ Šyjc_\[bu…Љ“¢°¶½ÂÅÆÊÌÎÏÐÐÑÐÎËÄ¿¸°©Ÿ™“Ž‹†‚~{xutrrqrtw{€†‹’•—™šš˜•’Š„€€…‹’˜š”‹}skb[WWX[`kzŠ›«¾ÆÊÍÎÏÐÑÒÓÕÖרØÙÙÚÚÚÚÚÛÜÜÝÞßàáããäååæååååäãâáàßÞÝÜÛÛÛÛÛÚÙØÖÔÓÒÒÒÑÏÀ¨zjcdehn‰ ³ÀÉÑÕרØÕÎÇÀ»»½¿½µ©…S$Xmvyz‚”——ŠvfZSI<-;sŒ’‘´ÂÊÏÑÑÐÍDz›‡xrlheb]]hzЉ…‡œ£ª°´¶½ÁÄÈËÍÏÑÑÐÍÉľ¶­¦Ÿ™•‘ŽŠ‡ƒ~{xvusrrrrrrsssrrrqpoopqs{„Œ”™Ÿ¡££¢œ•Œr`ZWVVX[`iuŒ ±ÀÈÍÎÏÐÐÑÒÔÕÖØÙÙÙÙÚÚÚÚÛÛÜÝÞßáâãåæçèèéééééééèççæäãáàÞÝÜÛÛÛÛÚÙ×ÕÔÓÒÒÒÑů–kccdgmŠ¢´ÂËÒÖØØØÓËľ»»¾¿»± p>Zpy|~Š”™™–‚qjijiYL<'\‹‰„•¬ÀÆÌÌÈÀ²”‚zvtuyyrd]_m~‹Œ„€€…Œ”™š §®µ½ÄÊÎÑÒÓÒÐËÄ»²©¡›—•“’Ї„‚~{xvtsrrqqrsuy~‡‘”—›Ÿ¡£¥¦¦¥£Ÿ|l`YVUUVW_ft…š¸ÃÊÍÎÏÏÐÑÒÕרÙÙÙÙÚÚÚÚÚÛÜÝÞßàáâäåææçèééêêêêêêéééèèçæåäâàÝÜÜÛÛÛÚÙ×ÔÓÒÒÒÑÉ´œƒmccdgm¥·ÄÌÔ×ØØØÐÈÁ½»¼À¾¸­’Y* ]t~€ƒ‘™œš’|xy|}wng\I1 &Z…‹wu|‰˜Ÿ¢Ÿ—ˆ~|{}†“–˜–rdbl„Œ‰‚zywvvvuuwz†•¤´ÂÌÓÖØØÕÐÊÁ·¬¡œ˜–•”“’‘‘‘“•—™››Ÿ£§ª­®®ª¥›Ž}ia[XVUWY^gv‹¡¶ÅÌÎÏÏÐÑÒÔÖØÙÙÙÙÙÚÚÚÚÛÜÝÞßààáââãäåæçèèéééééèèèèèèèèççæååäáßÝÜÜÛÛÚØÖÓÒÒÒÒ̺¡‡pdccgp”«»ÇÏÕØÙØÖËÿ¼¼¿À¹¯¦s:]vƒ…”›™Ž€„ˆ‰ƒ{si[H4 3a‡‚uqu~ŠŒŠ†~~‚‰–˜šššŽzjep‰Š„|xurqppnnnnorz†•¦¼ÈÏÔÖÕÓÏɳ«¤žš˜–•””““’’’’““”•–˜šŸ£¦©¬®°±±¯«¡•‰|pc]YWVX]dn|˜­¼ÆÌÎÏÐÐÒÔÖרÙÙÙÙÙÚÚÚÛÜÝÞÞßßààáááâãäååææææååååääåååææææææåäãáßÝÜÜÛÛÙÖÔÓÒÒÒͼ¤‰qdcchu›°¿ÊÑÖØØ×ÒÇÁ½¼½ÀÀ¶¨™U& ]xƒ…‡•œž™…ˆŒ‡€viUF4 8i†}snpx~€€€„‰”–˜šœ›Ž{jez†‡yurponljigfdeipz‘§¸ÆÏÕÖÕÓÏż³«¥ œš™˜—————˜™š›ž £¥¨«®±³´µ³°¬¥—‹sh^ZXXY_gt„˜´ÂÉÍÎÏÐÒÓÕרÙÙÙÙÙÙÚÚÛÜÜÝÞßßßßßßßßàáâãääääääãããããããããääåååååääâáßÝÜÜÛÚ×ÔÓÒÒÒν¥Šrecdk{£¶ÃÌÓØØØÕÏÿ½½¾Á¼±Ÿ„:]y„‡‰•œž™‰Ž“•–•‘‹‚u_QC2:u€{rmlu{€‚ƒ‰Ž‘“•—™›žœŽydg|‡ˆ~wtqpnmljhfa^[YXe}•«½ÏÔÕÖÖÑËû²ª¦¤¡ žœœœœž ¢¦¨«­°³´¶··¶³®§ž„xmcZYYZ^iw‰ž´ÇÌÎÏÏÑÒÔÖØÙÙÙÙÙÙÙÚÚÛÜÝÝÞÞÞÞÞÝÝÝÝÞßàââããããããããâââââââââãääååääãâàÞÜÜÛÚ×ÔÓÒÒÒξ¥Šsecen…«»ÇÏÔØØ×ÒÊÀ¾½¾¿Àµ©’j" [y…‰Š•œ™Ž”˜šš™˜”hXK?2 Arƒ€ujks}„‰ŒŽ‘’”–šŸž›Žo]kŒ‰{xurqqppnld_ZUQMUi‚¿ÍÓÕ×ÕÓÏÉÀ¶°«©§¤£¢¡¡¡¢£¥§©«®±³·¹º»º·²¬£™Š}pe^ZZ\`fwŒ¢·ÈÍÎÏÐÑÓÖØÙÙÙÙÙÙÙÙÚÛÛÜÝÝÝÞÝÝÜÛÛÛÜÝÞßáââããããããããããâââââââââããäääãâáßÝÜÜÚ×ÔÓÒÒÒν¥Šsedgt³ÁËÑרØÕÏž½½¿Á¿®JWv…‰‹”œ™’’˜›››šš™˜–eRD=# "Qy…soqv†Š‹‹‹‘—  Ÿœ•c[dw‹‚}zxz}|uj]RJECI[‰§¾ÌÔ×ÕÕÓÏÆ½¶°¬©§¥¤£¤¥¦©«°³¶¸º¼¼¼¼»¶°©Ÿ”ƒvkb][]aiv“ª½ÊÎÏÏÑÒÔØØÙÙÙÙÙÙÙÙÚÛÛÜÜÜÜÜÛÚÙÚÚÛÛÜÞßááâââãããããããããããããâââââââããããâáàÞÝÜÚ×ÔÓÒÒÒλ¡‡refm€¢½ÇÏÕØØ×ÐÈÀ½½¾ÀÀ¶¥ˆ^%Tq‚‰Œ“›š”•š››šššš›š’x]G>/ 8^wz{{{|~€€€‚ˆŽ”›¡¡ Ÿœ„f[ar‹‰†‚€‚„……„ƒ~ugQG@>?Sr’±ÊÕÕÕÔÒÎÊüµ°­«©¨¨¨ª¬®³µ¸º¼½½¾½»¶¯§‘rha]]aiwЍ»ÇÍÏÐÑÓÕרÙÙÙÙÙÙÙÙÚÛÛÛÜÜÛÚÙÙÙÙÙÚÛÜÞàáââââããããããããããããããããââââââããââáàÞÞÜÚ×ÓÓÒÒÒ̸ž„pfgvޝÃËÒרØÓÌÄ¿¾¾¿À¿©˜q@Rk~‰Œ“›š•˜›››ššš›žœŠlM<4!*F^mv{€‚ƒƒ„†‹•š ¡¢¡Ÿ–{dW\u„‰‰†……†‡‡ˆˆˆ„|gTE:46Gb…«ÌÒÕÕÔÒÐËÆ¿·³°®¬ª««­°´¸º¼¾¾¿¾¾¼µ®¥šŽ{of`]_gt†œ¸ÆÌÏÐÑÓÕרÙÙÙÙÙÙÙÙÚÚÛÛÛÛÚÙØØØØÙÚÛÝßááââââââââââââããããããããããâââââââââáàßÞÜÙÖÓÓÒÒÑɳšmhkŸ¹ÇÏÕØØÖÏÇÁ¾¾¿À¾¸ …W' Qfy‡“š›—š››š™™šœŸ¡¡™}Y:3*0FWeu}‚‡‹“–™›Ÿ¡¢¢ ž‘x^PYqŠŒ‰‰ˆˆˆˆ‰‹‹‹€jS@3+,:U|´ÇÒÖÖÔÒÐÍÈ¿ºµ²¯­¬­®±¶¹¼¿¿¿¿¿¾¼µ­£˜‹xmd`^do€•¬ÄÌÏÐÑÒÕרÙÙÙÙÙÙÙÙÚÚÚÛÚÚÙØ×××רÚÛÝßáâââââââââááááâââââãããããããâââââââááßßÞÛØÕÓÒÒÒÑÅ­”~ljs¯ÁËÓרØÓÉÿ¾¾À¿º­—k;P`s„Ž“š›˜›œ›™™™šž¢¥¦¢l9++'H[m|Š—›Ÿ ¢¢¢ xRHOg€ŽŒ‹‰ˆˆŠ‹ŽŽ…nR6)%%,A…±ÊÕ×ÖÓÒÐÎÇÀ»¶²¯®¯°²·»¾¿ÀÀÀ¿¾»´¬¢–ˆujc``izޤºÍÏÐÑÒÔÖØØÙÙÙÙÙÙÙÙÚÚÚÚÙØ××ÖÖ××ÙÜßáââââââááààààààààáááâââãããããâââáááááàßßÞÛ×ÔÒÒÒÒÑÀ§Žxllƒ¢¼ÆÐÖØØ×ÍÄÀ¾¾ÀÀ¾µ¡‡M!Q[m•›œš››š™™™›¡¨®¯«¡‡U%'0Hj—›Ÿ ¡¢¡ ž–‚MCBPqŽŽŒŠ‹ŒŽ‘‡uU,$ 4gœÅרÖÔÒÑÎÊÄ¿¹´±°±²¸»¾ÀÀÁÀÀ¾»´« “…rhbadu‰ž´ÇÏÐÑÒÓÖØØÙÙÙÙÙÙÙÙÙÚÙÙØ×ÖÖÕÖÖØÛÞáâââââáààßßßßßßßÞÞÞÞÞßßàáâãããããâáááááààßßÜÙÕÓÒÒÒÐ͵Ÿ…qmvŸ¸ÆËÖØØÖÒÄÀ¿¿¿À¾³¤—Y& QYk€–››œ›š™™™›¢©±³±©”n" ;UlŒ•™œž ¡ Ÿœ•qO>;Gs‡ŽŽ’“’Œ€k?)!7b•ÄØØ×ÕÒÏÌÈý·´²²³¸¼¿ÀÁÁÁÀ¾»³ªŸ‘‚ofbcj~“©½ËÐÑÒÓÕרØÙÙÙÙÙÙÙÙÙÙÙØ×ÖÕÕÕÖØÛÞáââââáàßßßßßßßÞÞÝÝÜÜÜÝÝÞßàáâããããâááààààßßÞÛ×ÔÒÒÒÑÎǯ‘|qp’±ÁÊÑר×ÓÊÁ¿¿¿À¿·ª—4QWj‘—œ›œ›š™™š›¡©³¶´¯ & .D[pŠ‘–šžŸž‹iJ3-Lp…‘‘‘’“•–•‘ˆzQ1 9a˜ÍÕØ×ÔÒÎËÇ»·µµµ¸½¿ÀÁÁÁÀ¾»³©€mecfo‡²ÃÎÑÑÒÔÖØØØØØØÙÙÙÙÙÙÙØ×ÖÕÔÕÕØÛÞàâââáàßÞÞßßßßßÞÝÜÜÜÜÜÜÜÜÝÞßáâãããâááààààßßÞÜÙÕÓÒÒÑÐË¡…wu~«¾ÈÎÕØØÔÍÄ¿¿¿¿À»­ž†[QVj‚’˜œž›œššššš› §²·¶´©1  4Kcr~‡Ž•™›žš„a<"'Moˆ‘“”•–˜™˜•Žƒb=#6b±ËÖÙ×ÔÑÎËÇÀ»¸··¸½¿ÁÁÁÁÀ¾»³©œŽ~ledju¥¹ÈÐÑÒÓÕ×ØØØØØØØÙÙÙÙØØ×ÖÔÔÔÕÖÚÝàáâáàßÞÝÝÞßßßßÞÝÜÜÜÜÜÜÜÜÜÝÝßáâãããâáàààßßßÞÝÚÖÔÒÒÑÑÎǸ}w~•½ÆÍÒרÕÎÆÀ¿¿¿¿¾²¢Žl4RWl„“™žœœ››››››¢­µ¶µ®ŸE:N^lx…Ž•šœœ—~V#"It“•—˜šœ›™”ŒrN, 0‚¶ÐÙØ×ÔÑÍÉÄ¿»ºº»¾¿ÁÁÁÁÀ¾»²¨›Œ|jefn|–¬¿ÌÑÒÓÔÖ×ØØØØØØØØØØØØ×ÖÕÔÔÔÕØÜßáââàßÝÝÜÝÞßààßÝÜÜÜÜÜÜÜÜÜÜÝÞßáâãããâáàßßßÞÞÝÜØÔÒÒÑÑÐÌÀ§}y}³ÇÌÑÖØ×ÐÈÁ¿¿¿¿¾¹¤˜vFSZqˆ“šžœœ›œ›››¢²¶¶²¥V &6H_r‚—›š”|G 6jŽ“—™›œ›™—“~c@  8z¯ÐÙØ×ÕÒÎÉÆÂ¿¾¾¿ÀÁÁÁÁÀ¾»²§™Šyifisƒž³ÄÎÒÓÓÕÖ×ØØØØØØØØØØØ×ÖÕÔÓÔÕ×ÚÞàááàÞÜÛÛÜÞßàààÞÝÜÜÜÜÜÜÜÜÜÜÝÞàââããâáßßÞÞÞÝÝÜØÔÒÑÑÑÐÍ¿§†}–³ÆÍÓÖ××ÐÆÁÀ¿¿¿½µ§™wET_u‹”›žžœœœžŸœ››ž¬´¶³«b% $Ž”ž§ª–“’‘”™Ÿžœ™–’‚\/ ‘™¡¥Ÿ•“’‘•šž  Ÿš˜’xN#” ž”‘‘‘‘’›žŸŸŸž›™l@”š“‘‘‘›žœ›œ™‹]1””Š‘‘”Ÿ™—–—™›œ›—vD‹‰Š‘‘“™›—••–—˜˜•\/І‡Š‘‘‘”š˜–•••••“ŠyA †ƒ†Š‘‘‘”™—–••”“‘Š{^(‚‚†‹‘‘”—––••”’Œ~e@€‚†‹‘’•–—––•”eC€‚†‹‘’•–——–”“sQ.€‚†‹‘’”–—–•”’‡c=€‚†‹‘‘’”–—–”“‘~R,€‚†Œ‘‘‘’”––•”’p@€‚†‹‘‘‘’“••”’‰W' €…‹‘‘‘’“•”’Œ>€…‹‘’’“””“‘†p'€€„Š‘’““”“‘Œ|X€ƒ‰‘’“““‘އo:‚ˆ’’‘ŽŽ‹vN‚†‹ŽŽŽ‚]. ‚…‰ŒŒ‰l@€€„‡Š‹ŒŒ‹{L#€€„‡ˆ‹Œ‹ˆ^' ‚ƒ„†Š‹Šk ‚ƒ„…ˆ‹Še4 „…†ˆŠ‰~a;‡‡ˆ‰‰}a9‰‰‰‰†^,ˆ†}hBiXC-7)  ƒ‡‹“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿÿÿÿ ÿÿÿÿÿÿ#ÿ'ÿ+ÿ/ÿ3ÿ7ÿ;ÿ?ÿCÿGÿKÿOÿSÿWÿ[ÿ_ÿcÿgÿkÿoÿsÿwÿ{ÿÿƒÿ‡ÿ‹ÿÿ“ÿ—ÿ›ÿŸÿ£ÿ§ÿ«ÿ¯ÿ³ÿ·ÿ»ÿ¿ÿÃÿÇÿËÿÏÿÓÿ×ÿÛÿßÿãÿçÿëÿïÿóÿ÷ÿûÿÿÿÿÿÿûÿ÷ ÿóÿïÿëÿçÿãÿß#ÿÛ'ÿ×+ÿÓ/ÿÏ3ÿË7ÿÇ;ÿÃ?ÿ¿Cÿ»Gÿ·Kÿ³Oÿ¯Sÿ«Wÿ§[ÿ£_ÿŸcÿ›gÿ—kÿ“oÿsÿ‹wÿ‡{ÿƒÿƒÿ{‡ÿw‹ÿsÿo“ÿk—ÿg›ÿcŸÿ_£ÿ[§ÿW«ÿS¯ÿO³ÿK·ÿG»ÿC¿ÿ?Ãÿ;Çÿ7Ëÿ3Ïÿ/Óÿ+×ÿ'Ûÿ#ßÿãÿçÿëÿïÿóÿ ÷ÿûÿÿÿÿûÿ÷ÿóÿïÿëÿçÿãÿßÿÛÿ×ÿÓÿÏÿËÿÇÿÃÿ¿ÿ»ÿ·ÿ³ÿ¯ÿ«ÿ§ÿ£ÿŸÿ›ÿ—ÿ“ÿÿ‹ÿ‡ÿƒÿÿ{ÿwÿsÿoÿkÿgÿcÿ_ÿ[ÿWÿSÿOÿKÿGÿCÿ?ÿ;ÿ7ÿ3ÿ/ÿ+ÿ'ÿ#ÿÿÿÿÿÿ ÿÿÿúöñíéäàÛ×ÓÎÊÅÁ½¸´¯«§¢ž™•‘Œˆƒ,,jd,d.d-dhdf4-hdf4.3.1/hdf/util/testfiles/jpeg_img.jpg000066400000000000000000000055521503061704500210410ustar00rootroot00000000000000ÿØÿÛ„   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc//cB8BBcccccccccccccccccccccccccccccccccccccccccccccccccÿÀ€€!ÿÄÒ }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?½gpæÕÇÀ=jܺ€œÕøîw·ÎvpïLºP];óŠŠévÇqD@©lõ3DHÞÈÒmw5ϼ†âòL(œ`v®†Æ *;÷«È ÒºŠ¥4 ·N*j„ä­U¹³FSòÖ=Ü^FTK…ž uúlŒ-YX¹À¦ß9ŽQ÷ª/µ;,‘–À:UÉl„g8<“IzpTcµ#;HOSúSµ&0X6ÇòÔ :Ÿa\ö‰šà±“šéã\•2Œ ñUÈɦ¹Àª“8®Vs¼VCŸš»= $³'#µ6¡±U$qÀÅS¼Ô%·‚7çÈ*Íœ“ÏÉ1ï‘ô«\²ã®*{_ºìÜdà{Õ p¯ÙÜ}çðOþ½3B¶òmC0Ã?5´ª)X`T$’pi­ÀÍT™ñTe“XºŸÌk)þõz;ÙÛ[€Ávdã"¢…Fù”õݤn plš}’ïÞûvñ€;T²Aô©T6©é÷Ÿ°öŸ©1R?¹`îÞôHܲjµi|’¼3éV÷îi¤sLU9’©KYwi¸ÅaÍz…ÈýÑ;7cœU3¸¡Ü¤w,±¤ƒ 2pi«Œm) '˜7çíFNð ò>ìc·¹¬ë÷T™L‡{ƒ–ÇE•M/RiYwàvÍ,¶Ï £ʵ,ç2D ëS™@¨ZåsŒÔ̧½RœäðjŒÝ b\ JkÔeÄÀuÇžÒ?—‰>ð&ŸnCAœ•‰qHí€|° ÿxô_z®˜Øv6?4‡«ŸjfÔ2„ùsüGÖ²gµG› æŸ*¼(TUë!ûœô¨on<¥55ôŒçkb£[©ÉÆìÕ•’r¹#5˸a† g\Ÿ5ê,Aš6´[·a³ô¢4òƒàž8«,Ù@zÕk¢V¼á û£«ŸJŽKŽê: ñ©•™‰Þ>ƒµU¸´©Á¨’Sµ˜7µ^#ƒ¦+šÕn79Pk=`%7õ«væ8“÷±Œç·Zt·1¡;:zUyYf\Š¡*žkÓ³YìcK·]„3 çÖ–2p8aÍXŒAU5T œÈzî/­Elã`"?áQÕÏ©©•˜1 r{ÓÈÜ:âˆáýj=Ráb„¨<×- .åz·hŸ!Ï5+¬Aó Åeê;÷!ª°–ì8©LlFH¯D5Jé$óãeÆÌüÙíN+ó ¼jÕ¨TNÇë;Xe;¶gdonªZ±ÚJ¬>üŸÝ‚¬)¾\ã¶jÊãíÛµ`êR´’“Š y ·n0ʵ,)*üÚθ²œ ÔQÛyoœqDä@®Ô“U¯t_œŒÝêÀŠ5·' §zdçžéôŸ¬#y“µe±Ý» ¡hFÅ »‡ðF;ŸSWFârø-ß*d9#< ‡Q¸HãÂ7>ÕÎÜÈÎx5»“i­XS¥Z8^RR–P:¡4¹=k·ó9©£@ÊY‡¦ï'Vè J2 |ݳ֪ê±ï·gbv¢’«cÚ+ÄáØ!ZJN`vöPÑ‘œÞ¹­LO˜,Hõ¬á3ùZÓãidgíZÁ¶b•åâ©O7^j„²UWjôc2>;µp¯ËŽÂª¿ÊÇð©#9^àõ¢ä/—¹Ç ócÔŠÁEx.¶ÈF?Ôö­Y°ïnµKí‘Ùn†™sj—k½Xc„ö ²œœŒÕèQcPbœç& ‘ȪLÄÕG<Ôj$Šª¥‰=z\1ì@1Z‘ºU ‰ ÈÈö§@à¶2?ý*IWqPFFyȬ«èrèç«;K!ÿdt©¼Ï>ÑeþµVXce Ta¿SžÆæ>S±_cYÅî"o™X¥MÒ’àûÔîx¡äUI*»j}=B»ÌÒì8õ¯Eܾ¼u¦±Î@ª³—¥VGÄÖÇÖ­œ§¨öïøÔ7*ά£—p"°ÉçBV´E‚#RUïŠYP¼D/9éYæââÙŽåbµZ{ç—Œ`gÒ¢P¤‚ÀTã0*'#š«+uªìNx>•,ïä@°‚ÈysÔ×sæ8<ýá‚GûG üH²ïp3ϰê:$”Žž¾ß_zÌl¬¸ ñÓŠÑ…÷ħ#wlšd„WÃÈÉáW·âj”ë±T,0>ìÆ§Š1ªg8QüªWHÝpÊ f]ZCÉUûVdÐmn*.W½W‘ÈÏ5]ä’jÜAÀéŠFóŸ{ÙêI¯F1ÞHÎÜÿzýF¸B1ʯOp£ú±§©*0Ç:ŸÔþ|U{È7®åÎáëÉüjYŠb?@ABCDEPQRSTUVWXY jjj¦ºÎâö 2FZ€¾½¿ÃH¾¨dj ½¿& Ã2Ð4¾DÈj ½¿&Ã<Ð@¾PÈj½¿2 ()*+,-./01<=>?@ABCDEPQRSTUVWXYdefghijklmxyz{|}~€ŒŽ‘’“”• ¡¢£¤¥¦§¨©´µ¶·¸¹º»¼½ jjj 2FZn‚–ª¾ÿ¾½¿ÃŠÐŠÑŠÒŠÓŠÔŠÕŠÖŠ×ŠØŠÙ¢@¢A¢B¢C¢D¢E¢F¢G¢H¢I¹°¹±¹²¹³¹´¹µ¹¶¹·¹¸¹¹Ñ Ñ!Ñ"Ñ#Ñ$Ñ%Ñ&Ñ'Ñ(Ñ)èè‘è’è“è”è•è–è—è˜è™ pqrstuvwxy.à.á.â.ã.ä.å.æ.ç.è.éFPFQFRFSFTFUFVFWFXFY]À]Á]Â]Ã]Ä]Å]Æ]Ç]È]É jjjŠÚ¢J¹ºÑ*èš z.êFZ]ʰûP¾½¿Ã pqrstuvwxy.à.á.â.ã.ä.å.æ.ç.è.éFPFQFRFSFTFUFVFWFXFY]À]Á]Â]Ã]Ä]Å]Æ]Ç]È]Éu0u1u2u3u4u5u6u7u8u9Œ Œ¡Œ¢Œ£Œ¤Œ¥Œ¦Œ§Œ¨Œ©¤¤¤¤¤¤¤¤¤¤»€»»‚»ƒ»„»…»†»‡»ˆ»‰ÒðÒñÒòÒóÒôÒõÒöÒ÷ÒøÒù jjj z.êFZ]Êu:Œª¤»ŠÒúÃо"j ²½ ¶¿ Ì*à öÐ þ¾ j ž½ ¢¿ ¸*à âÐ êN ¾½¿Ãÿûl ÿûl!ÿûl"ÿûl#ÿûl$ÿûl%ÿûl&ÿûl'ÿûl(ÿûl)ÿüV€ÿüVÿüV‚ÿüVƒÿüV„ÿüV…ÿüV†ÿüV‡ÿüVˆÿüV‰ÿý@àÿý@áÿý@âÿý@ãÿý@äÿý@åÿý@æÿý@çÿý@èÿý@éÿþ+@ÿþ+Aÿþ+Bÿþ+Cÿþ+Dÿþ+Eÿþ+Fÿþ+Gÿþ+Hÿþ+Iÿÿ ÿÿ¡ÿÿ¢ÿÿ£ÿÿ¤ÿÿ¥ÿÿ¦ÿÿ§ÿÿ¨ÿÿ© ê`êaêbêcêdêeêfêgêhêiÔÀÔÁÔÂÔÃÔÄÔÅÔÆÔÇÔÈÔÉ¿ ¿!¿"¿#¿$¿%¿&¿'¿(¿)©€©©‚©ƒ©„©…©†©‡©ˆ©‰  jjjÿûl*ÿüVŠÿý@êÿþ+Jÿÿª êjÔÊ¿*©ŠõàÿÄe6¾½¿Ã ׄׄׄׄׄׄׄׄׄׄ /¯/¯/¯/¯/¯/¯/¯/¯/¯/¯ G†ŒG†ŒG†ŒG†ŒG†ŒG†ŒG†ŒG†ŒG†ŒG†Œ _^_^_^_^_^_^_^_^_^_^ w5”w5”w5”w5”w5”w5”w5”w5”w5”w5”           ¦äœ¦äœ¦äœ¦äœ¦äœ¦äœ¦äœ¦äœ¦äœ¦äœ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ ¾¼ Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤Ö“¤   jjj ׄ /¯ G†Œ _^ w5”  ¦äœ ¾¼ Ö“¤ ;šÉÿ¾½¿Ãhdf4-hdf4.3.1/hdf/util/testfiles/palette.raw000066400000000000000000000014001503061704500207130ustar00rootroot00000000000000 #'+/37;?CGKOSW[_cgkosw{ƒ‡‹“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúöñíéäàÛ×ÓÎÊÅÁ½¸´¯«§¢ž™•‘Œˆƒ #'+/37;?CGKOSW[_cgkosw{ƒ‡‹“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû÷óïëçãßÛ×ÓÏËÇÿ»·³¯«§£Ÿ›—“‹‡ƒ{wsokgc_[WSOKGC?;73/+'# ƒ‡‹“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû÷óïëçãßÛ×ÓÏËÇÿ»·³¯«§£Ÿ›—“‹‡ƒ{wsokgc_[WSOKGC?;73/+'# hdf4-hdf4.3.1/hdf/util/testfiles/skull.hdf000066400000000000000000030432771503061704500204040ustar00rootroot00000000000000×®k31/ÊE)ËÊE)-EóÉEójHó,H÷ÈI 2I /IEËIE-Ž.ÉŽ.2‘. /‘:FtË‘:FtøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø®]ƒc,„c23ø‹ø®¾c3]”·”]c]2,ø‡ø®2c]¾“]32,3c2322cøø¯cc¾”¾“„c”¾cŽƒc3c]÷ø¨ 3†ccƒ] 3\3]3]c3322öø§ 93 99c”¾…c¾”ccc32c,”2-232óø¡9::3  3 :c]cc]ŽccŽƒc 3“¾“”3cc]2ñøž 3 9::9:94@@:@”Ž2¾¾ƒc ”Žc”c”“cc-ƒc]3ccc,îø3 39 9A@ 4::3:3cc¾”¾¾ccc¾c”Ž”c”¾cc\323cŽ]ìøš3 „:,j::9:9:9@@”¾ccc””””2,”ccc]cc]]]c]cëø˜- 3 394::9:@::@@@:A::ccc¾c”Ž“””¾”cc”cƒc ]3“23b3]2êø– 3 9:: 99 33@„:)9:@]33””323””¾”½”c]c¾”¾ccc-”“Žcc]2èø•% 3 9:3 :9:@:@@AA@@qGqAqAqi½””””¾c]ƒc¾”]”cccŽc”2233“3323èø”B :9  :99:AqAq@@j:A@AAqGkAÔ¾””¾“¾“¾cc¾“¾”ccd¾¾“Ž”Žc,]3\32,3232æø’99: 3394::9 @:@:AAjAj„:)@™23\””,2-2ŽŽŽc”¾”¾cc”2]“Ž”32,3]3åø‘ 39  3 9A…@qqr@AjA@rAqGqGqq¾cccƒ” d“””2””¾ccc”c3cc¾“c”3c2]23ãø @: :9ƒ@…:ƒA: j::9Aq@AqAqAG¾¾”Ž”¾¾”¾c¾”¾”c”¾c¾“޽33ccd,2cc,92]ƒc]Ýø :9 9:9::3:@::ƒ@(k@jAAGqGAAqAqAqqGŽ“””½”““”“¾c”“323Žƒc””c”¾ƒc 3,3332]ccc2ÜøŽR9 : 3 :9AA:GqAqqGkGqAjAAjqqA@qAAq¾Ž“ޓ޾ޔŽ“””¾c”c“Ž”cc¾cc,޾cc323]2cc,ÜøR 3 :9@::@@9Ak@qAAqGkA@A@@qGGqA@@kG¾”“ޓ޾”¾“Ž“”¾”cc¾”“Ž“¸cc¾cŽ“2cŽcc”c]2cŽ]cÝøŒ.9: 3@::@3:A:AqA:AqAqAAqGkqrAqkGqrqGk”¾“cc”½”“”ƒc"¾“¾“ޓ޾”c”“Žc”]”Žc]22]3c]3Ýø‹T@ 3 ::9: G::jGk?qAGkAq@qAqxqrGrqGqHqr“¾”¾¾”¾”·”¾””¾”¾”¾“”“¾”cŽ“”]c\3”¾Ž“c]3c2cÝøŠ 3:3@@:Aj:GqGAqGƒq@GkGkqHqHwrqHqGqqG¾”¾½”¾¾“¾”¾¾“¾“¾“¾”¾”¾”¾¾””·”cc”cc2ccŽcc”,3c3Ýø‰3@ 9::@:Aq::GkqƒA,qAGkGqHqxqrGqGqrqHAk”½”¾”¾”¾”½”¾”¾”¾¾“¾½”½”ƒ¾ccŽ“]”2Ž2cŽ2c3c]23Üø‰$: 9: 9A@3A@@GkGAj@kGqAGqqrqHwGqrGqGrƒq0””¾]b”“”¾]b]“ޓޓ”ޓޔ¾“”¾“c”]”c3“-2”2c23ÜøˆG: :::3@A@@:kGqAqGrqAqAqrGrMrqrGkGkrGrGr“”“¾”¾”“”¾”“Ž”“”¸¾c¾½”¾“”¾”¾cƒc”cc3c,”3,332,Ûø‡=::99::@k@qGkqAqAqGkGqrqrqrqGqGqqHqqrqr”·¾”¾¾”“¸¾“¾¾“ޓ޽¾¾ƒc”¸“¾½”¾3”cc¸”3¾2,3c2Žc]Úø†5 9:: :@:kA@AkGAAqGqGkGqGqGrGqHqArqrxHwHq”””“””“¾ƒ”%”¾”¾”¾“Ž”¾””½”3¾]c”“]c]3“,c3c,,Ùø‡<:9::@3:@A@@A@qAq@qAkA@qqrHwrGkGkqHqHqrqqG””“¾¾”¾Ž½”޽޽¾¾“¾“„¾“””¾”½¾3“”]c¾,c”2cŽ2c]Ùø… 9 „:W@:@@qAkAqAkGqGk@rGrGrGkGkqHwrxqxGGrqc¾¾”¾cc]c]”¾”¾”¾”¾“”¾”¾“Ž”¾””¾]“cŽ”cc323cŽ332Ùø„_3 @:9:@:A@Ak@@A@qrGkG@qrqrGkFkMrqrqHqGqqGk””c“c”½Ž““”22¾“”c”““””“””c¾“”¾“Ž”c“Žc]c,c,c2-Ùø„` :3@@:@:@Aj:G@kGkGqqAqrGqHqAqAqrGrGxqGkGAkA½””,”c””¾”¾”¾¾”¾“޾¾””¾”””ccc3c”,”c]3Øø„ 33ƒ:@:ƒ@T:A@@qqAA@qGqrGqAGqrGqqr@AqAkGqA“ޓޔ¾c¾“¾”“”¾¾“¾cŽ””“¾¾”“ޓޓ¸“”Žcc”]]“3”,c232×øƒc33A :9A@rAkr@jAkGqA@qHqrAAqAqqGrqGGkGqGqqGkc”“Ž3“Ž”“””ccc¾¾2”“¾”Ž“”“”¾“3Žc“c32Ž932ÖøƒJ 2@3@:A:@@kFA@AqGkAqqAqr@q@qA@Ak@GrqqrqGkGqA¾”¾“Ž“”“Ž]c¾”¾Ž“޽”¾””¾¾”¾“ƒc”c¾“”cc3]“c2]23Öøƒ 3A 9@:ƒ@-Ak@:qAqAqGrrqGAqGAj@:@AqArGrrGqGkG¾”¾¾¾Ž“”ƒc]“]”¾”¾“”“¾¾”cŽŽcŽ]]”ƒcŽcŽc“3Ž“Ž23]9,Öøg3@@3A@::@k@A:qGqA@qGqH@kAqq::GkGqqAGqqA@A@kG¾“j¾š””“”¾“¾”“¾2¾”¾c”¾¾“¾¾c9cc“”¾¾Ž3ccŽcŽc3323]Õøƒ0 @::: @@k@:AqAAjGkAr@A@qGA@qrqrrGk@A@A@rrqrŽ“„¾0“Ž“”¾¾Ž”¾””¾c¾¾””“”cc]cŽ“”“”2cŽcc32Ž2c,Õø* 3 :3A994Gk:G@qA@kAqqAqqAA:9rGrNwA@qGjAƒq HqN”¾”½”„¾””¾““”½ƒ¾#ccc2Ž“¾”¾cc”””Ž2c]c3c332,Ôø1 : 3:3A3Gq9kqAqAqq@:@@q @qrqrqr@kAqArwrH3Gkqă¾”¾¾šƒ¾!”½”¾Ž¾¾”¾“¾cŽ“Ž3½”¾dc3¾””c3ƒc 3“cc,323Óøi ,9 : A9Aq:AGqAqAq@;@rrq3rqNqHwAA@GkwrrwrwrGq”¾”½”½”¾¾š½¾””½”¾½¾Ä¾”Ä””Ž2”¾””¾”¾“”¾c2c]ccŽc23c2Óø  3 ::3k9ƒ:'qAqA@q:@@GqG xxrrwr@AqAwrHwHxr qrG¾”¾”ă¾“„¾“޾”“¾¾”ƒ¾!“¾“¾”¾2¾¾”Ä”¾½Ž”“d¾3c¾3\,c3c]2-Óø23 93:@ :A9 9AGkkG @:rr @rqHwrNAjA@xrwrxqrqGrq”½„¾šƒ¾Ä”¾¾“¾¾”ľ¾”¾¾ƒ”¾¾”3½ƒ¾“Ž”,“¾Ž½c9]c2]cÓø 3 :@3ƒ:NkGq@@A2:Arw 3xrxqxr@k@AxqxrxqxGqrqGxÔ¾“¾”½”¾“¾¾Ä””“”¾¾“”½Ä¾”¾½”½”¾¾”¾”¾”“”„” 2]”3cŽ”23Òø53: 39@ :@ 3Gk@:@@:wrr xqxqxHqGAqqxrxqNr9rrGrxqɾ”¾Äƒ¾ ”¾¾š¾½”޽”ƒ¾%”¾¾½¾”¾”¾½¾“¾Ä¾“ޓޓ¾¾”c¾cc”“32-Òø; 93G:@ 9:@@k@A@r@@Aq wrxGxrwrqAqxrwHxr9HqxqxqHÔľ“”¾“ľ“„¾“”¾”¾Ä¾”Ä”¾¾½¾“””ƒ¾“¾¾”””¾”2c3c3¾,3,cÒø5 3: 3:@3:A@A@A:@@:qrqAqrwrrxGrGqAqHxrxq@:qHqHqxrɾ¾”,†¾”½”ƒ¾)c¾½”¾½¾¾”Ä”¾”½Ž½”¾¾”¾”“””½”½-2”3cc¾,”]23,Òø 3 9 ::@ 3ƒ::::::Gqr@A:GAApAqqxGr@q@kMrGAjA@AkqqAjAk@:@ŽcŽicc]d“c”ƒ¾,”¾”¾”¾š¾¾½¾½Ä”¾¾cc”½]“¾“”¾¾]c”¾¾3c3,cdc2Ïø!A@::@qAkAGkGk@q:@rqGrqr@@AA@@AjA†2rGGkA@@A@ “޾Äc33“c3]¾“¾¾“¾¾Ä½¾¾½¾”¾”¾½”¾””]c¾”ƒ¾c3¾“¾”2Žc2 cc32Ïø@:G:rqGkGkG:rqAqrGkGr::ƒqAƒ@A@Aƒ @rAFk@qA@3Ži„¾73232c”¾”“¾”½¾”ľ”ľ”¾”¾¾“¾cc”¾“””¾2¾”¾¾“-c”c,c]23,ÎøD:q3:MrGkFq3@q@rGqr::GqAGkqqAk@k@3@qqA kG@3 ¾“Ž“”“c]3Žc¾“¾“¾¾Ä…¾”½¾Ä½ƒ”½”23¾”¾“”¾½”“3ƒc],923Îøf:GrqrqGAG@:AA@A@qG@:@k@qAG @AA@qqGkA9@ @k:qŽi3cc2c””¾”¾”Ä”½”¾¾”¾¾Ä“¾”޾c””½”¾”“”Ž”¾Ž“ƒ32]3Ïø@3GqHqrqA@Aq@Ak@qAƒ: GAqA:jAjAƒq8GAkqA@ :2A:q”¾¾”Žccc]”¾¾Ä¾¾½¾Ä¾Ä”ľ”¾¾”½2]”“Ž”¾“„¾“”½¾c”\32]c]cÎø9Gq9 qrG@qq:9AAjG@Ak:@GqqA@qGAGjAGkAjHqAA2::q4x¾”ľ¾š„c#-“ŽÄ”½”¾Ä”¾”¾½¾¾½¾”¾“]Ž9”c¾”½”¾”¾ƒ” ,d32-23]2Ï÷4AqG: kGqr@Grr9:@Aj@:AqqAqAqrqqH@@A@@:A9q 9@ 9: ”“ƒ” “¾”Žc¾ˆ¾%½¾”¾š¾Ä¾””“]”“c¾”¾”½¾”½¾“”“]]33“ŽÏøJqq:AAqGr@kxqr3@Aq:@qGqG@qGqGq@4@:@3GkA@: iŒ”Ž“¸\33Žc”Ž“”“”¾š½”¾”Ä„¾ ”½¾“Žcc”c¾“¾”¾”¾¾“޽ޔc]]232Îø,:@qAq@@GrGqAj@rG qAqr@AkGr:3@@3:A@k9Ak:ƒ32™””¾Ä¾ƒc4”3“c¾”¾½”¾¾”½”¾“¾š¾¾””c]””c”¾“¾¾½”¾”“Ž“Žc]c323 Îø2:::@qHkGkr:9:@3Aq3@AqGkAqGk@AA@AAqqG ::@ @@ 22™†¾6c”¾c޾”¾¾”½¾”¾”“¾¾½”½”23“Žc¾”¾”¾”¾½¾¾”c23c2]3]Îøn: 99:GqqAqA9::@AA@AkGqA@kGA@@k3@qrqr 9A@:392É”“”“”“]c”]ccľi”¾¾”½¾”“¾”“¾”¾c”””¾“¾½”“¾””¾“Žc]2323bÎø% 3qqH@qGq:9:q:@Aqq@qGqAAqAjA@@AqGqH„F9rq 323Ô3,”c]c”]ccŽ“”cŽc¾”ľ”¾“¾”“”Ž“¸”\cŽ””¾””“”“Ž“”cc3]233,Íø@9:GqqAqrA9::ƒ@rGrAqqAkGAjrGqqHq„9:  “cc“”“¾Ä¾”¾223ccŽ“ƒ¾”¾“ƒ¾#”½¾¾”“”2]ciŽ“¾”½”¾¸“ޓޓcc]c,3Íø]A9 @l@GrGkG:rrq:: qGqAqqAA9qAqq39::2™ih¾Ž”””c¾¾3]c]c¾”¾”¾½”¾¾š¾¾””“Ž“Ž9cc¾”¾¾ƒ“޾¾cd,c2-2cc2Íø+@q:@@rqqrGA9:Gq3qHq: qrGqGqAA9HkG@r:9ƒÓ”½Ž“Ž“23bc]3“”½”¾¾”¾¾½ƒ¾“”Žƒc ]cŽ“¾“¾””””ƒ¾ƒc-“33c-Íø*:@H::AGqHqGq:9qG3 :qqG@:qrqrGjA9qGk3 rM::„-c™iiŽ””¾2”c3]3cc]“¾”½”½¾Ä¾š¾”¾”½””]cc-23„cŽƒ“ ”“ŽŽ“]2]2Íø!:q @jArqqA:@4A@3@A@:@4qGAGkAGkkƒAqqr3@3ƒ]™b““¾”¾Ä¾2Ž]cc,c]”¾”¾”½”ƒ¾ľ“Ž“¸“„c”cŽ„c]cŽ“Žƒc 2Ž2]93c3Ëø+q @@AkGAAq9:A3@A::@qGkqA@q:@qA@@qHqM3@A:ƒc“8c¾“”½Ž“Žcc,c]ƒc¾“3½”„¾“„¾””“Ž”¾¾”·¾Žƒc]¾¾Ž3c,332]]2,ÊøGqAk@qGƒqhGq:@:@A9::@AkGGqAq:AqGqrG93rGA:9 q”“™™“ޓޔ¾“Žc3ccc”cd23“¾”“ľ¾š¾”½”¸“¾¾j”“ŽcŽ“””2c2cc32c]cc2ÊøOq: @:qGkHq9:::@@9::AqAkGkGqGqrG::xxqGk:c™™Ã”¾¾“¾cc3,d,”c”2-”½¾”¾”½…¾”“”¾¾“Ž”“ŽcŽ\cŽ9cc,32]33c,ÉøX x@;Ak 3@Ak@@rq;9@qGqAkGqGkGqrqxrxrAq3c½™™½”¾¾Ä¾ccŽ“3c2”c,c¾”¾¾“”¾“¾¾š¾”½”¾”½”ƒ¾“d“c”cc3”3c”]3,33Êø+:qr:@@q@AkAA:@@AqAGA@rqGqGqqGkqHqrxxrMxAG3ƒc™Ãþ¾“””¾”]”3ƒc¾ƒc.”¾“¾¾¾”¾¾½Ä¾Ä¾¾”“¾¾”¾ŽcŽcc]c]””]”\”2“]23Éø:Mr@kqAAqGq@qAƒqr9ƒ:Arrxqrxrxrxrrxrxr@j:ƒ4]“™¾”¾“Ž“]cc]cŽd½”¾¾š¾j“”“”¾”“¾“¾”“”½””“””ƒc”2¾“¾“]”]Ž232É÷+ 9r@rNj@rqGkGqrArGxrGjAwrGxrxrMrwH@qxqxq„ci“hŽ“”ľ”c”cc]c“”c¾”¾”ƒ¾'“”¾”¾2]3¾”½Ž¾””½¾””Žccc]”¾32c]33Éõ-9Hq:@@rx@ArqrqGkGqGqrqrqx@rGqqxGxrxrx:@rN:G3„D““8¾”¾ŽÄ¾ÄŽ“cŽcc޾c”“¾½¾Ä¾¾”¾“”¾¾“”Ž“”½””¾”¾”“c]¾c3“,”]ccc]c2Êõ-Grq:ArwrrqxGrGqAqAqGrwNrqxqrGrGrxqxqr@A@A::q9„Žh29“¸“ľî¾ÄŽ“c2d¾2”“¾c¾”¾”¾”ƒ¾”“…¾“”·””½”½”¾Žcc¾cc32]ccŽc3]c]Éö,rG @rMrxrxqxGrqAAqrxqxHrGqGqqGrxrNqx@kqx:A „&832b¾”¾Ä¾¾Ä¾¾”Žc¾]¾cc¾”½¾”½¾š½¾¾”¾¾šƒ¾”ƒ¾”¾”½””“Ž”c]3„cc2c,Éô. 3qxxq@rMrqqGrGkGGrxqrwrrqGkqGrwrx: xqx9Aq„“2c9¾Ä¾¾Ä¾î¾Ä½Žcc¾c3Žc¾¾”‰¾”½ƒ¾ľ“”½¾“¾”¾”“2ccc]”,c32Ž]Ëô/@ @ qrqAAqAAqqHqrGqAqqGrGxrMrrxGAqGrqx qHrxAA@ƒ:i82Äèľľľ¾Ä,c,c]2c2”ƒ¾ Ä”¾“ĔľĔ¾”…¾ ”¾”¾¾“”¾¾-ƒc Žc½”c¾2cjËô9:3@qqGAqAqAFrrxrqrqx@A@kGrwrxG::q:A@rxqrxqxqq@A@G9@,3ľą¾ľĄc ]”ŽÄ¾¾“¾Äˆ¾ ½Ä¾š¾Ä”¾½ƒ¾”¾¾ccc”Ž”,Ž92ÊôL::r@rwqAxqNqxNqHqAk@q@rxGr@@:q@qH@ qrN:: 3Ak q22ľîľľľľc]]32Ž”¾Äƒ¾ Ĕľ“ľ𾔾½„¾””½”“¾“¾2cd]3“,c323\3Ëô qqrxrwrGrrwrxqAq@A9ƒA8@Ak@::qHqrq Gqx::qGj™c9¾Ä¾¾Ä¾Ä¾¾Ä¾cŽ93”2¾¾”¾Ä”¾¾½†¾ľ¾š¾Äƒ¾”¾””c3¾2cc]c]“3,cc3,Êô qrHwrwrxrxqxHxqxAGj::…q:Aj ::AqrGxqqA@:@Gk94Abc¾Ä¾î¾Ä¾Ä¾Ž¾cc”232ľĽ¾¾Ä¾Ä”ľšƒ¾”¾¾½”¾Ä½”“”¾3¾”]cc]d]9c,3ËöGqrq qHwGrxqxHqGq:@:@GrGA@Ak k@rwrqHA@@:39:3ic“2ľľÄèľ,”¾””23¾c3ƒ¾”ľ¾”…¾þľþ¾Ä¾”¾¾”””2”“cŽcc9c32ÌõKrq r@rrq:xHqxrqr:: 9A::@kGk@:Aq qNrq@k:@:A:@@“cb2”¾”¾Ä¾Ä¾”ľ23¾c2¾¾Äƒ¾ þ¾Ä¾š¾¾”ƒ¾”ƒ¾ľ¾”½Ž“32]cc2”,c2,3Ìö @ƒAX@xAG@xrwrNqGqA:qGqAqAq@::qG xrxkA@@::qA:9:]i2”“¾Ä¾ï”¾3”¾“-c,Ä”¾½”¾¾š¾¾½¾¾Ä¾¾Ä¾Ä¾š¾“ƒ¾“”¾]c]c,””]¾ÎöG@3@@j@A@kAk@xrxqrGrq: qqGqGk@@:qqrxqxr@:q@@kGq::98¾dŽc3cc2””2cƒ¾ľă¾Ĕă¾™¾¾”„¾ ”þ¾”¾¾3„c”c2]Îö4:G-@;q:@qGk@AqxHqxqxqr:GkGkGkG xrx:GqG;qGkG@2] ƒ”cƒc¾¾”ƒ¾ c,ľ”¾¾”¾Ä”ƒ¾”þľĽ”ƒ¾”¾“”¾323,”2]Ž32Íö: @:ƒ@LAk@GqGAqxqrHqNqrGqGqGr 3Gk@@xr@ qkq@qGqAA”]:9”·”¾ÄÄ-3¾Ä¾¾”“Žc”¾¾Ä¾Ä¾½¾¾Ä¾Ãƒ¾šƒ¾”¾Ä¾”ľ“”¾c33c]32“32Í÷M::@:@;qAqqr@kGrqxwrqHqr:qG 3@@kA@A@:@:G4@:r@k“]9 ”“,2c]c¾¾Ä“¾”“3”¾”½”¾¾šƒ¾”¾¾Äƒ¾ š¾¾Ä¾¾½¾“”¾”ƒc ,”]3Ž“-ÍøqA:@::ƒ@@AA@@AGrrGrqGqGA3Ak@qA@AkGkAqA:G:A@:@: :99¸”¾ŽcŽ“c]¾¾”¾¾Äc”½¾¾Äƒ¾"ľþľ”¾Ä¾¾½¾¾”ľ”””½dc]c]¾2cc3“ÎøqGk:@@A:@k@3@:ƒ@9:: 3 9 : 9993qG:@:AkAk@kGccŽ”ccŽ“”“ŽŽcc3cc]c]c”,”,„c]áø— 9 933:94@4ˆ:‡@:@”¾“Žcƒ”“ޓޓ””””d“Žƒc3c]„c-cc]áø“ :ƒ:9„:@::„@7A@A@Aq@kAjA@kA:@Ž“”¾“ޓ޾c¾“¾””¾”cc3]c3c-32c3cc]3àø’ 9 3@„:'9@@AAjAk@@k@kGAkGqA@A@kqAccŽ“”cccc¾”¾cƒ””¾“¾¾3cc,c2]cc]c]8àø‘<:@3 @49:@@:@:@:: A@A@Aq@kG@Ak@kGA@k¾”“Ž“¸”¾”¾“¾”\]”¾”“Žƒc ]3323c]c322]àø 9 ::@:@ƒ:@ 3::@@k@k::qA@:AjA@A@@jAG½¾¾“޾“¾”¾”¾“¾”“”””c3“¾c32c2]33càø 3 ::@:@::@@A@A@q@A::FkGkƒq2GkGjAkGqk””¾”“޽”¾“”¾”¾”ޓޔ¾””c3“Ž“]c32cc3,cÞøŽ9 q@@AA::9:@j@A@A@@AqrqƒG!kGqGrqrrGq™cŽ”¾¾”cc]cŽ““Ž3““Žƒc]]cc¾3”\c-332cÞøŽ 39:@ƒ:99:9::@@A@:@kAk@G:@:A@AqGkGqGrqHc¾½”“¾“¾¾”c”””c”¾”“Ž”¾ƒc¾\323]ƒ2]ccÝøŒ 3„:9:@AA@@kAqAqkGjAqAqAqAƒqBqqAAG@qq”¾”¾“¾”¾¾”“Ž”ƒ¾““Ž“”½”¾¾cc2-c]c233,c3Ûø‹ 93::@:9ƒ:(@@:AAj:AAqAqGqrqrGqqAqrxGqqrqGrc”½””¾¾½”ƒ¾½”¾”¾d“”¾¾”””½cŽ“¾cc]cc233Üø‹V4GA@::::@@::@k@GApA@qGqGqGrqAqGA@qrGrqrrwcc””“]c”“3“”“”¾¾”””]c3Žc”cc3c33]\”Ûø‰ 3::@:9:3:@A:@qA@ƒq$GkGqkGr:qGqGAjqHqGrqNqHq¾¾Ž“¾¾”¾“”“„¾”¾””¾”½c]8””c3232cÛøˆ 39 @9::@:@Aƒ@$qA@qHqAAqrGrqAqGqGqrHrqqrGqrqrw”¾¾“”ƒ¾%”¾“Ž”¾“¾c“”“¾”“Ž”¾3”¾”Žc3c,c3c2Ùøˆ93::@ :@:@Aj:Ak@kGkGqrqGr@rqHƒr:GqqGrrwrGqGGr¾””¾¾”“¾”¾¾“””“¾ŽccŽ“¾¾“c¾3“”¾i”c¾]cc2-3Ùøˆ?9@@::@9::@:@Ak@AGqAqrGrqAqGrqqGqqGqq@::@qHqq:3\3“”½cc]“¾”¾“¸”“ƒ¾“”””cc¾¾”“-c¾i333c]Ùø‡ :@::@ : A@:q@AƒqJAqGqrGAqrqNqHqrHkGrGrGrqAqHq¾Ä“¾”¾”¾¾“Ž“”¾“¾Ž“”¾¾¾”¾”¾cc”¾c”,c”c,cc2c2Øø†_ 3:@::@q::@k@AAkGqH@qrrGrwrqGqrqqHqqxrrqrqHqxrqH¾”¾”½Ž½”¾”“¾”¾¾”“ޓޓ¾c¾“”¾c“]c”,“d2d¾2c,32]×ø… 9 @4@@A:@ k@@qq@ƒq,AAqGrqGrxrxGrGqxrGxqNxqxrGxqx½¾¾“Ž“¾¾”¾¾”¾”ƒ¾ “”¾”¾¾¾”½”ƒcŽ”c”c”¾,cc323Öø…a @3 @@;@@3@A@AqAGkHA@qrqxrGqrGqrqrqNqxrxqrNqxqrGr”¾”¾¾””½¾”½¾¾”¾¾“¾”¾“¾“¾”“c”¾”Ž”c“”2c¾,c233,c]Öø„5:@3@::@:@:@:@@AkGqAqrqHqGqrwrGqGqxrxrwHxqrqHqxqGþĄ¾”ƒ¾”¾¾“…¾”¾”„¾c¾”¾”-c”,c3,”2c2Öø„c 3A ::AjA@::kAkAqqGqqHqxGqrGrGqrGrxHwrqxqrGxrwrHxq™”½”¾™¾¾“Ä”¾Ã”¾”¾”½”½”½”¾”¾¾””c“¾3cc-c2Ž“c-2Õø„> 99 3@q@@A::FApGqGkGrqrGqrGqqrGrqxqrxrNrqxrqHqxqrxÔcc¾”¾cƒ¾!Ä“¾”¾”¾”“¾½”¾“”cc”“c3”c2]”33cÖø„d349 @A@k@AjAAkAqAqGqHqGqHqrGrwGxrNqxqrwHqHwrxHxqNɾ”¾”¾”¾¾“¾”¾“”¾”¾“¾“¾¾””¾¾”¾“”ŽŽ”¾2¾Ž2c,”\3]23Ôøƒd 94G9A:@A@qAAjGkGkrGkrqGqqrqxqGrrqrwrHwrrwrwrwrqxrqÔ¾¾Ä¾“¾”¾”¾¾”½”½”¾¾c¾“¾½”“¾”¾”]“””“32”,c””32Õøƒa 99A3@:k:@Aq@AqGkGGkGGqqHrGrGrqrMrxHwrqHqHqHxrNrwHx™““”“””“”½¾”¾”¾”¾”¾¾“Ž”¾””½”¾3”“¾Ž¾2¾”c]¾cŽƒc3ÔøN 9 :A9 A@:@@kAkGqAqAqAqGqqrqxGqHqrwrxqGrqGrxqxqxrxqr™¾”¾”·”¾¾”¾”½¾¾“¾“¾¾”“”ƒ¾“”¾½3c”Ž”½”c3c]c\”,c23ÓøJ k:A3Gk:k@qAFkGkGkGqGkHqNqrGrwrxGrGrqHwxrwrxHwqHwrq”¾½”¾“¾”½”¾”¾”¾¾”½”„¾“”“¾”¾”\c“cc¸“]3“c””,32Óø:3@39A9:G:@ArAqAqGqGqAqAqrqrGqrqrMrrqqrqqrxrNrwrrqrrMqŽ“Žƒ¾,c¾¾“¾Ä½”¾¾”¾½”¾”“”¸”¾c¾“”¾Ž¾cc”“]”c”,32Óøi:: A9:k9:@qGAkqGkGqqGqrGrGrGrwHrwrGrGxHxqrwrrGqNqGrq”““”“Ž“””“”¾¾“¾“”¾“¾¾”½”“ccŽ“¾””””Ž2cŽ,]“cŽc,Óøj3@ @k:@:@:Aqk@GqGqrAqArqrwqGqrqxr@qrGqrwrNqrGGqqHqrAG¾”Ž”””¾”“޾”½”¾”¾”¾”¾”½”””޾“޾“””·Žc¾”c]cc]9]cÒø 9 9„:U@@:G@A:qAqHqGqrqNqGrrqNrw@rGrqxrMrqxAqqHqrGqGq¾¾“¾]]“”½”“¾”¾”½”“”½¾“¾”½¾¾“”¾””¾¾“3“Žƒ3ccc]3Óøj 3:9:::@@:k@:GkGqkAkGrqrGrqHwrGAqGrwGGrrxrGqHqqHwrxAr“”¾“¾¾“¾”¾¾”½”¾”¾“Ž”“޾””“¾¾“”¾“””¾“”cc3“Žccc2Òø3 39:9: @::@:@kGqHAFrqNqGqGrwrrqqrqrGrqAFAqqrqrxqrƒq4GÔ¾””¾””½cc¾“¾””޾½¾¾Ž“”Ž“¾””cޓޓcŽ“cŽc33ÒøG3 9::9@@49 @:Gqr@jqGrqGqrqrrMqGGqHqqAAqqrqGGrGqGrGxr@™¾”“¾“¾”½]c¾¾”¾“„¾“”¾”ƒ¾“¾Ž”d”3“ccŽc“Žccc2c,2Òø8 9:: ::@@:qA:qrq@HqrqGkGqGGqqAqrqrxAFqqHqrGqqrGqHqGqr™ƒ¾/”¾“Ž””c¾¾”¾”½”¾“”½”½”¾c“Ž““¾”¾,޾2Žc]c”3¾33Òø& 3::9G:@A@: @:@GA@qGrrqHqrrqHqGrGqGq@ƒrxxwA@ qGqqrqHqɾľ“¾”½”½”Žcc¾“…¾”“”¾”ƒ¾ccc””½”””¾ccc”·”2]2Ñø"9:3G3:k@:@::@rk@rqHwGqrxGqGkGrqƒA&rxqNqrAqrGqAqHrxqGɾ””¾¾”¾”¾“Ž”“Ž“”2ƒ¾”½”½”¾“cd¾Ž“޽”““cŽc]c3c,32Ñø:3:@ q @A9:@qƒ:)GqGqrqGkGqAqAxrGkwrwrxqxAqGqrqxrqxGxr™”½„¾ “¾””¾½¾Ž”ƒ¾š¾c“¾¾””¾”¾¾c”¾“””Ž”]2ƒc]cc”3Ñø<::@:: :A9::G::qqHqGrGqGrAAqrxqxqrxrxGxrGqGrqxHxrNqxrÉ”¾¾Ä…¾½ƒ”½”¾”ƒ¾”“Ž“¾“2”¾”“Ž”2Ž“¾cc]c¾ƒc¾2Ñø7 :9::99@@4@@: @AqrqAqrq:AqAwqH@:xrMrxrwAqrqrxrxqxrxA@”„¾”ľ𾔾“¾¾“¾½¾”½¾¾“Ž”¾”¾“¾¾”ƒ¾“Ž”¾c”c”“Žcc,32Ðø? 9::@ 4:@@Ak9:AqGrGqGq ApAxrqGkxrwrxqxGkGqHwrxrxxqrG3 q¾”Ľ¾”½„¾)”¾”¾“”ľľ¾”¾cc¾3¾”¾”“¾”¾“”c]“3,]3]3Ðøƒ:@:9 ƒ:,G:@kAqGkAq:AqAwrxr:xqNrxrN:qGqGrxrMxrxGxqrwrƒ¾”ƒ¾ľľ¾“¾”ƒ¾"”¾”¾”½”¾¾”2¾¾“¾¾“”“Ž“¾“33]2c”]2c]Ðøl :::@ 4@3@:9:A@GkGqGr9GkqrxGqxrxrwrwAqGkAxxrxrxq xrwrrN½š¾¾Ä¾”¾“¾”¾¾“¾”¾¾½Ä¾“¾¾”“¾¾”½”¾”¾¾”””޾½3c¾c¾3]2Ðø8:: @A39:A9q3@AjAqA3GqAqNq:@rxGxrxrGqqGqrxrwrwrxrqxHxwrƒ¾Ľ¾Äƒ¾*Ľ”“Ž“¾”¾”¾¾”¾¾”“¾”¾¾“¾”¾”“ޓޓ”¾2]”c”223Ðøl @A3:@@A3G:Gq::AqAq qAqrqrxGqrxrwrMrGAqrrwrxrxNrwHxqxrx¾š¾¾”¾”½”¾”¾¾””“¾”½”¾½š¾½”¾“¾2”¾½¾¾“ޓ޽”“3c½3]]”Ðø89A@9:A@@3:3::Gq@A9GkGqHwHqrGrwHxrxqkqHqNrxqNq3rqxrwrxrM„¾ă¾Ä”½Ä”¾“Ž…¾ š¾¾”¾”¾¾“”¾“¾””¾””]2-c2]9c32Ïø j:@@k@@::qAq9:AqqGƒq&HqAGkxq@rxxGqrqxrxr@AGGrxrNqxr¾Ä“¾¾”Ôƒ¾*”½¾¾“”“¾”½¾”½”¾½”¾”¾”¾“¾”¾“Ž“”Ž”cc]32]23Ïø3A@ƒ:Aƒ:% 9AqAqGrqGrrGrGqqAj@:@@GqGrqGAGGqG:@ƒq Hwrxrw”¾¾Ä„¾”ƒ¾ ””¾¾”¾¾Ä”¾¾”„¾“”¾“¾”¾”½”“Ž“]c“3”2]29,Ïø&Gk@::GqqAqqHqqHqqHqqGr@AA@::A:rqA…qAq:qArGrqxqxr¾Ä¾”½””½¾š½”½ƒ¾%“¾“¾¾“¾½¾”½””¾”¾“¾“¾¾””¾”¾3]c3]c3Ïø:Gk@:@:9q9Gqr qGrqHqxrqArqx@A@@rqGr@A@AGqAqrGkrqHxrNx¾”ƒ¾0“¾”¾¾”¾”¾”c¾¾”¾”¾”¾”¾”“¾“¾”¾¾”“Ž“¾“¾”¾2”cc2c3,ÏøBG::@:G3@@kHw kGqGrqG@ rAkq@@rq q@3rqGAwrGqqrqxqxq¾¾Ã”¾”“¾¾“ƒ¾(½Ä”¾“¾“¾¾Ä“¾“¾¾””½”¾“¾“”¾”¾“¾”¾”]3]2Ïø&:@:q:q: A@;qqrx kGr@@Akqrqrq@:rqHq@Aƒ:GrqqHqr qGGqxrx”„¾“””¾¾”½š¾3¾“¾”ƒ¾“¾”¾ƒ”,”¾¾””޽””¾“¾2”“cc]93Ïø'::GGqA3q:@rGxqxr@@3AkGqGqHq@@A@rwA@@:ƒ AAqqGqHqqHqxr“¾”Ä”½Ž“¾“ƒ¾c“””¾¾½š„¾“¾½”¾“¾¾”¾¾”“¸“¾Ž3Ž3c9Ïø :G3qHk A@@qrGrq:@AkAqrq4qG„:qAk„2GqHƒqHqrqHx¾“ƒ¾0“3¾¾”¾2”޽¾“¾”¾¾”Ä”¾¾”¾””¾“”¾”“޾“”“¾”c¾22]3ÏøIGqGqq@q@:Gqrq@qq:rAqGq:A@Ak@qGq:@:@ 3GkGkGAAqqHqqx”¾¾“¾”2”¾”½””½”¾”ƒ¾!”þ¾½¾”½”“””½¾”½”¾Žd¾2c”2d3”Ïø@qGr@AG@A@kGkG@:Gq@rkGr::@A@AAA@A@qGqGAqqrGqqAqxrNq¾“¾Ä¾¾”“ƒ¾*”¾””¾¾”þ¾”¾”ľ¾”””“¾””“¾¾“”¾“3¾Ž2]“cÏø3rG@eqAjr AqƒA:rA:@qA@9G@k9„@*AkGkArqq@GqqGqAqGrqG¾¾”¾”“¾Ž¾”“¾½”½”½¾¾”…¾”ƒ¾“ޓޔc·”¾”¾”¾“¾”“cc32Ïø#GqA@q :qGq kGj:9A9A@A3 qAA9Gkqrqƒ:G@:qHqAr@;AAkGrqH@q””½”c”“¾c“¾d¾””¾¾”ľ¾™¾”þ¾™¾dc””””¾”½”¾”½dc3,3ÏøI::q@rG:9HqrAqAA@@AjA9AqGq:qrGqA: 9:@:@:A@rqGkGkGqAk@Ô”½¾¾2¾cŽi¾“¾”ƒ¾”„¾”¾”ƒ¾cc3½Ž”¾¾”½”¾“c]c23Ïø!:GAq3:qqHqrqA@k@Ak@A9AkqG:AAqG„::Aq@3A@rG@kGqr@AA™½”ƒ¾0”3c”¾“¾¾½¾š½¾Ä”½Ä¾½¾¾”½c””c“”2”“”¾“c,3c3]2,Îøn:Aj@9HqqGqq@3:@A:GqAqAqAq:@ApA9qG@AAkGk@k@AqGqqA2“”“”“]3c,”½”Ž”¾”¾¾”¾¾”¾”Ä”¾Ä”ccŽcŽ2Ž”c¾”¾cc¾32Îø9@G@A ::9AqGrGrq3A@r9:qGq:GkG:kGA:qHq@3@9A@G:A@qArAG:@ƒ””Ž“,”””½”½¾¾Ä¾½Ä¾¾½ƒ¾ “¾“Ž”2””ƒ”“¾”””¾c32322Íø'k@:3@qAqrqAqGrq9@A:q @AAkG@kG:@AjqGqr†CkA9k9AqGq:G”·”¾332”·”Ž“¾”¾“¾”¾”¾š¾”ľ¾”“޾ccc¾”¾“¾”¾“Ž2c]c]3,Ìø&:AA9 AqAGr@rqrG4@j@@qqkGqAA@k@:qGAqG‡:q @:Gqqrx3q””“¾¾Ä23c”½”„¾$ľ¾½”¾½¾”¾“Ž““c”]c””½”¾””“”,32ccÍø:?:93ƒ:qqrAqGrw:@ ::r qGkq@Aq@AqAqAˆ qN3AkArxrqƒ¾”“”Ž2]9]2޾”“¾”¾“¾š¾¾”¾½”¾”ƒcc”¾¾”¾½¾”޾“3,]2Íøƒ: :@:HqwGrqGqqƒ:@::qGAkqGA@:AqA@‡::@ 9r9qrÉc”½”¾“¾2]32cƒ¾ă¾#”¾¾“¾Ä”¾½””dŽcc”½”¾”¾¾“””c]323Ìø%G939:wrGrGqHqr3A9:qH@::G@qGqkAj9Gq†@:„?k 39:@H2É””]]3c3¾i¾”½”¾Ä¾½¾Ä¾”¾¾”¾2cccc¾”¾¾“¾“¾”¾”]]c2Ìø&A9 A::@rqrqrqH 9@::GrqG:@kHqAq@kGkA„r@@A]A9 9r23i½”„¾*iŽc2”Ž“¾”¾¾“¾”¾”¾¾½š¾¾33cŽ”“¾”¾””¾½”¾ƒc3Ìø,GqAjM:AqNqHwr@3:GA3@@rqGkGqqGA:3Gqq:@:@: ƒ:c:G3 Éc™2”¾Äƒ¾“d¾ccƒ¾&Ä”¾Ä3¾½”¾”¾“”¾ccŽ,”¾“¾½”“¾”“”c]cc,Ìøƒm9AAr@@rqrqrGqA@kq 9A@@rAqGkAq3G3HAq@::9:9 ::2 ::3ŸÃ™™2¾¾”¾“”¾Žccc¾“”¾“”¾½”ľ“¾¾””“¾¾cc¾”,”¾”¾¾Ž“޾c]33,Ìø„0@@qq@AqGxqrGA9Gq @@:@kGqGqG qGqAG:@::3 2 qqGÄ™8“2”¾cc¾“”j¾c””“¾¾”¾¾”¾”“¾“Ž“¾]d”¾”½Ž“”“޾cc]“]Ìø„*@rrA@AqxGrGkF:q: :3:3 qqAkAkqrq:3A@:A::@:ƒ@?Akx™™“™2É”½”¾c“]“Ž2”c¾”¾”¾“¾¾Ä½¾”¾”“Ž”33c“¾”¾”“޾¾½”Žc]”]]Ìø„8rqq:AqGrr3Gk::q@:9HqGrAG9GrGqG:9q@ q:@:@A:kxq™b“bb9b¾”„¾ c3””¾“¾“ƒ¾ ”¾”¾“¾¾“Žcƒc3cƒ ”“”“”¾cc9ÍøO 9qHwAqAqG3GqAG9:@:: kqrGkA9:qGqrAqA:3 ::@:@::xri™cbi8“2”½¾Ä¾”¾c”233¾””¾”¾”½„¾”¾“”cccŽ]3cc3cŽ”¾”“cc2]Í÷p9 9rAA@kGqqGqqk:@@q@:@@3G@@qrAq:@A@:AqAqxrA@@9c™“ib9“iÃc”¾”½”cc¾3c2,”½Ž½”¾Ä”¾™¾¾””½”cccdcc”¸cc3]23Íö9 39 @wkGA@kHqHq:@rGq:@:@ƒ:P qA@@:qGqGqqrxq:G::]™Ã™“22iÔ¾\”¾”]c]c]9,2”¾¾“¾¾”¾¾”¾¾“޾”””޾c“cdc”cc¾3“”Íô9 3 3@rr@k@qGƒq :@:9qA::@:Hƒqƒ@4AkAqAqqAqrHwrN9k@:c™“i™iÃ2i½”¾”Äcc32cc”c,””¾”½¾¾“ă¾”“¾”“¾¾Ž”ccŽ“¾cc]””Ìô qr:qNA@qAq4GArGkGA@A 3G„:.@@AqGqHqqGqq@:@:A:9™“˜Ã™Éß¾”¾Ä¾¾”]cc]2c¾“ƒ¾š„¾“¾¾””¾¾2,Ž“”“ޓޓŽc]33“ŽÍô^@39:qHq@@qAjGr9GkGqGAk@k@qq:qqG:G33:qqrqrGrG AAxqq@GA\™2™ÃəÙ¾¾“¾“¾”c¾3]cc¾d¾3“¾”½¾”¾Ä¾Ä¾¾“ƒ” ¾2ޓޓޓdcƒc””]Íôg@ : rwH@ArGk@GqqHkqGqxrqA@A :: rGrGrGrGqr@3AxrxGr:@2c2i“™“i“Ž”¾”¾“”b]c]”cc¾¾2¾¾”¾½”¾”¾“¾¾“¾½”¾”“Ž”ƒ cc]cŽ“3bÍôY: 3@Aqr@kwAxrkxrqGqqHqxHqx@AqAqxrwrwrwrxr@ xqxrr@qA3c2““282¾“¾\3]”c,dcc,”]”¾”““¾”¾¾Ãƒ¾ľ¾””„¾“Ž“Žiƒc3c]32]Íôs3@AqA9ArxqxxrNrrGrxrGxrrxkGkxqGrrNrHqxqrxrxrwxAqq,2™“i832”¾”¾Ä¾c]c¾c”“””¾“”¾”¾”¾”“¾“¾“”“¾”½d“Žc-c]2]c3Íö :@AjGxqrqHxrwrwrqGrƒq@xqxqx@rxqGqrwxrNr@rwxrx@: 2™2c2™¾“¾¾Ä¾Äcc”2]c”½”½¾¾””“¾“ƒ¾”¾”¾¾”¾”¾“Ž“c2”]c2]”Íör:Arwrx@xqxrqHGqxr@ArGxrNrxGqGqGqrxqxq:A:xrw 9A,, b382™™Ã¾”¾“¾”2”2cc]c””¾”¾¾“”¾”¾”cc“¾“¾“¾“¾“¾”Žc¾3c”]“”Ì÷ 3qrGqGqƒAB:xrwkHwGA@AxqrqxqrAkAkAwHrqNq@A@x :32c-2i\™™“É”½”¾”¾3]”cc]”c”ƒ¾”¾¾“¾“¾½¾¾”¾Ž””¾Ž“¾”¾”½c]]ccc”Íørqr::GƒqAA@xAGqkGjAjAxGqGqGrGqƒAKwrqr9AjAq9AA:9]cbc“b3þ”¾¾c]c”,c3“cŽ“”½”ľ”¾”¾”¾”¾½”½¾“¾¾””½Ž”3c]cc]Í÷":qNqGqAAr@qAqrqrrqr@@qGrqHqrqqGƒqAqNqx:@ƒr@“3]ch3b2™ch™ƒ¾ľÄc””32]”¾”¾”¾½„¾½”¾¾Ä”¾”¾”¾“3]“¾“”32ƒc3Í÷:qrqrqqxA@kGxxGxHwGkAƒ@2rxrNrqGr:@@qrH9rGwG:Ž2]8]32328ii¾“ľľ¾c“3]“cŽ“ƒ¾ ”¾š½¾”¾¾“„¾½”¾¾“33¾Ž¾3\]c2Í÷] : rGxHxHqGkxqrqx@kAqG::@A:xqqGqr:@Aqxqqrrqrcc]c]™c’¾Ä¾”¾“¾Žc”2]”c¾¾”½¾Ä½¾”ľľ¾”¾™ƒ¾“¾¾“¾2Ži¾23dccÎøQ9 9:wqxr@xqNrxr@AqA3@Ak@A@AGkGA@q::GGA9AwHwAc32cc2c8\ci””½¾¾”¾“c3c¾½¾”¾”„¾”½”ă¾”¾Ä”¾”¾“cŽ“c”3,]2”ÎøN k@ A@r:qxrxqxGqA@qGA@@AkqGkA@k@AAGqqkqGrqA@”cc]3bc88“½¾¾cc]cjcc¾c”¾”ƒ¾š¾”½„¾“¾Ä¾”¾¾½”¾Ž”c¾2c3“¸Îøn::::AGAr@:rMrrxqAqk9A:qGkAqAjAq@qkGGAq:qGkqG”Žcc]c8i2“i¾”¾”¾Ä”dc¾3”¾½”Ľ¾¾Ä¾š¾¾š¾¾”½¾¾”¾¾“”c”,”]3]“3Îø@ƒ:-j:@@AG:@rwrxqGGk99 qAFkGqGAqAGkqA@AqAAj”“c3ƒcbi328þ¾Ä¾Ä¾“”Žc¾2”¾”¾”¾“ƒ¾”½„¾š¾½Ä”¾¾“Ž“”\c3cÎøn9A9::@A@:jA@:qrMrrGkGGA939:@qGqA@@:Grx@::GqA”Žc]c“282ß¾¾Ä¾¾Ä޾“c]9c3¾¾½¾¾Ä¾”¾“ľ”Ä“¾¾”¾”½¾“Žcd2]3c323ÎøU :9G::Aj@AjAk@rrwGqGkrqG::@GrqAkAq@rxqr@:@kG”c\333b392ɾľľ¾Ä”¾,cc¾”¾š¾“¾”þ”½„¾ ””“Ž“¾c2c2]Îø 9:: qqƒ:1AFq@@AAqrrqGrqG:@qGAkGqA@xrx9:G:3A“”ccŽ993]9’cɃ¾ľă¾ 3]c¾”½¾”ƒ¾½”¾”½”ľ¾š¾“”½¾¾”j”c,”]3Ïøƒ::@@qGG9„:@:ƒ@@rGxqrqr@A::9GqAj@kGqG::kGqA”·cc:29iÃiÉľľľ¾Ä¾Ä2ccd,”¾¾”¾¾“ă¾ Ä”¾½”¾½”¾””ƒ¾c¾2]3232Ïø„$kAqr :@:@Gr:3:q:HqN3:9:Ak::@:AkGkƒ:G:3“Ž3:G3 :biÙɾă¾”¾¾Ä23Ž2¾”½¾Ä”¾”¾”“ƒ¾”¾”¾¾”½¾“cc”cc]2c3Ðø…' k: q::Gk @::@9A@A@3:9GqAGkGGkG:G@kƒ:"“@ qq @:cÃÃɾľ¾Ä¾Ä¾”Ž23”¾”¾“ƒ¾“ƒ¾”þ¾Ä“¾¾”¾cc“3]2c,Ðø…H 9 9H:GkGk @:@@q@:9:@:3rqGkGq:AqqGkGG3GŽ3GqH3: 9ŽŸ™É¾¾Ä¾¾Ä¾¾“Ž32,3¾“„¾”½”ľ”ľ”¾“¾¾”¾½¾cŽŽc23]33Ðø‡*:@-qqGqGq:: kAAq@ 9q9:Gk: rxr@AqAqAqG…:@@:@Ù¾¾Ä¾Ä¾¾Äc¾2c3“¾”¾“Ä”¾Äƒ¾½”¾½”¾”¾¾š¾¾cc”“c3¾23ÑøˆR@A qrqrqG jA@kAG::G:wrq@:qqGqGqA9 AqG:A@ ™“cc¾Ä¾Ä,c3¾¾3]3¾½”¾¾½¾”½”¾”¾¾”ƒ¾™¾¾”cc”޾2”2Ñøˆc@@:: GqGqq33 2AAkGAqAq k qGq:@HqGkqrxqAqqrq:qq:cŽcŽÄ¾,c޾¾Ä29”“¾”¾”¾¾”¾½”¾½”ľ¾”½“ޓ޽”¾2]33Ñøˆƒ:q rqHkGq: k @kG@kƒ@J:qG:@:@AqAqAqHxrq qHwrqAAq:ccc¾Ä”“”¾¾3¾”“¾¾”½¾š½¾š¾”¾¾“¾”¾c3”“”]3cÑøˆ"A:@:G3GqHqA q9A: qr@@:k@rwkGrrqƒ@%rqqNqrxqrMrxr“dc3¾¾cc”޽2c”j“¾Ž¾”½”ƒ¾”¾½”½”ƒ¾ c“3¾“¾Ž“9]”Òøˆb@k@@AqAAqqAA:2 3qGrqrA@@kGkGrwrGqrrxrq:qHqxGrqxqޓޓcc”]“”3c¾¾”2¾¾“¾”½”¾“¾¾”¾Ä”c]”“Ž”½3c,23Òøƒƒ@c:@A:9A@j@A:@k3 qqHqAF::Gq rqrx@rxqHqGrGxqrqGr:@¾¾Ä3”Ä”¾”“-“¾c“޾Ĕ“”¾¾”Äcc¾”½”¾¾2c3]Óø… :@3 @:kqGqAƒ@-qqAkG3GqA@kA@:qA9A@::xGxrGqxrwrGxr@A@Aľc¾“Žƒ¾”¾¾”]cc¾”“”¾ƒ”¾½¾cc]”“”¾”½c]329Óø…5:@:@49GAqAqAkGrG@qq:@::Aq@xqA3AA@kG@:@:@:GAqHq rGqAkÄ„¾+”¾Ä¾”“¾”¾cc3¾“޾cŽiŽ“¾”2c3”½”¾¾]cc32c,Óøƒ GqHkGA9G@kAqAƒq)GqkGGA3Gk@A:r@3G::GqAqqGrqqAqG:qGk@@A¾¾šƒ¾)½”¾“Ž”¾“””¾c¾c”c”””¾¾“”¸”¾c9323Ôøƒe:qGqqA@;@kG@@rGrqAGrq@9A@qAqG3@qG:qGqrGrxGqG3qAqGqGkG¾¾½¾š¾Ä¾¾”¾“”“Ž””ccc””¾””¾“Ž“¾¾”½3cc3]cÔø„@ƒA3k9r@q@rqGqGr@- q93AAqGkq A@:qGkGqrxrqAqxrrGkqGqr½š…¾”Ä“¾”·”½Ž“ŽcŽccޓޓ”“¾½Ž“ƒ” ½¾c”]”cc]Ôø‰0 qAAqGrqH-9:9 9ArHpAqAqqqrqGqqrxqGqqrxGx@rG::xƒ¾+ľľ½¾”¾“”Ž“”“Ž“ccc”2Ž“¸”””¾½””c]ccŽÕø‹ 3@:: 39 GGqAAqGqq qAq: 3HwGkHrG@ƒAxrxrq@rr@:G¾Ä¾¾Ä¾Ä¾¾”“¸“”޽ޔ„cd”¾c”“d¾”Ž“ccc”Ž9“Æø‹ q:@qAA@qkHjGqqGr kGA9 xqrAqx„q4xrxxqNArwrxx:¾¾Ä”¾¾”ľ¾””¾“Ž“”Žc]”c””Ž“”“”cc]cƒ”¾“]23232ÑøŠ/Aq@ qA:AkGqGkGkHqr9AqG:kqxr@xrGA:Grwrxr@@xrwrxx„¾ Ľ¾¾Ä¾¾½”Ž“”¾ƒcc”cc”¾”¾”c]”¾”¾]”ކ…cÆø‰@kGqr @3Fq :rrqrqr@@Aq:9AGrwAƒqBG3xrxxrx@rxqHxrw”ľ¾”ľ”½¾””½3¾“¾c”cŽcŽccŽ””“”½33”“޽”c””„cÍøˆb@AA:q:A9 :3@:@qH9 9rqA@@Awr:H@A:xxrxqNqrqrGrwxx޾Ľ¾”¾¾Ä¾¾“”]3“¾¾d“cdc””¾,”¾]c“¾Ž½”]39,Ž“Ž2Òø‰3@kGGAjA@rAqG:@rqGrGrGr@Akxr qAqAqrxqGqArMrqxqxrxw””ƒ¾(“¾”¾“”“¾c”¾”c3c3cŽ”“,”¾¾2””½””]833Õø‡_Gq q@kGAqrqGqrGqA@rqrwrwq xqx@AqAqAGqGAqxrqHqGArxrr¾½”¾š¾¾Ä¾””¾¾]“¾c22޾iŽ”¾“c”2]¾cc]3Öøˆ^rqGqGkqGqrqHqkG:rxqHqHqH3AxA@qAqqrqGrrwrGxAqq@@xx¾Ä¾Ä¾¾½¾¾“޾½”¾¾cc¾3”¾”¾2cc”¾””]“c]””“cc”¾Öø‰ Ar@@:9rGqHqGƒq" GkA@xqAq9AjrGqrGqrqrGrqrGqrGrqGr…¾ĔĔ¾¾”¾Ä¾Äc”¾2”½¾”]c”]2ƒ” ¾”¾””“”Õø‰>Aqr@:H9:qqA::Gr@93Gk@r A@ArqrwHqxx:@:MkqrqxGr@x”ľĔ¾¾2”“¾½”„¾ c¾”¾]”]“ƒc]c”½””Ž”¾”,¾¾cÒø‰c@qrq:qGrH:@GAkG:AqGqA@r@3:@xGrGrwrxrwqr@xxHwrqGrx¾½”¾Ä½3“¾”]92”“”¾c¾¾“”\c”ccŽ9]“¸”c”½”¾“”“”¾c”ccÐø‰@AGG9rƒq+xAjqrw:AqqGk@:@@ qrwrqqHqxr r@rxrqHqrqxxcă¾“Ž“]2”]¾¾“¾2¾“ƒ”]]“”½3¾“”””¾”¾c”¾¾”¾ÑøŠ'3::@;Nqr GqH9Ar::GA@3rq:@@:xrxrGGqrwHƒx2qxHxrcd“¾”c]”¾2cc2]c3””¾3”¾””]“Ž“”¾“¾“Ž”2]ƒcÓøŒ9G::@k:@AqrqAqr@kGkGqGqGrNqxqGrrwqxqHqxrxqrwrxrwrxqrxrMrrɾ”¾“ƒ¾%c”¾”½¾¾3¾”¾½¾“¾¾”¾c”3”]c”cc¾3cc2Ñø…:G::@G:AqqGqAq@A@qGkGrrƒq1rGxrwrNrrxxrwHqxrxrxrxrNrwrxrwrŸ¾“¾¾”¾”¾¾“¾”¾”½¾“ƒ”¾”½ƒ”c޽cc”¾c¾]c2Ž“]cÒø…99::@::FAAqAqGAjGkGqGrGrGrwrqrNrqMrwrrwrNqxGxqNqxrxGxqHxƒ¾ ”“”½¾Ä¾”“ƒ¾”¾”½¾“¾””¾“¾c””2„c32”2]cÑø„:A@:@ƒ:2k@AkAq@kHqAqqrqrGrHxrwqrqHxrxGxHqxrxxrxrxrwrxrxqr“„¾(”¾“¾”¾”“”¾¾½¾”¾”½¾¾“Ž””¾c]”2d2]c]]3]Ñø„ ::@:@:@:9:Gq@„A:jGrqHqGqrqwrM:rGrqqxqxqrxrwrxqxxqxxrwHqxrľ”Ľ¾¾”¾¾½¾¾½”¾šƒ¾“””¾¾“”½”9”¾c”cc”c2Ðø„ ::@:@:A:9Gk@@„q8GqAqGrqGrGx:qxxqxrGxrxqxxHxrNqxHxqNrxrwHɾ½”¾”¾¾“ľ”¾¾”ƒ¾“ƒ¾“¾”¾””Ž“]”½cd,c,”c3“3Ðø„h9:@::@q::GqA@AAqHrqHq3HqGqrqrHrxHwrxrGxrNqxqxrxrwrxrwrxrxԾľ¾Ä¾¾”¾¾Ä”½¾“¾”¾”“”¾”½¾¾“Ž“]d¾c2ŽŽ“cc]ccÐø„ 9A:@:G9qAq ƒq:rqGq rqrqHq:MqxqxrxGxrqxrxrxqxqxrxqxrxGxqŸ¾¾”““Ž“¾Ä““޾šƒ¾“ƒ¾“¾”¾”“”ޓޓŽ2”Žc]c3]ÐøƒT :9@::@jA:A@AkAGrqGr9rGqNqqGrrqxrqNqrqxHwrqxHxxHxqNrxNrxrxþľ¾”“¾¾”¾¾”“”¾”cc¾”¾”¾“„¾ c”“Žc”,c½ƒc]c]Ðø„?9:: :A:9@A@:qGqqHqAqHqqrqHrwrGxrMrxrqNrwrxHwrwrwrxrxqxqxqxŸ¾“¾”…¾%”¾”¾½¾”½”“¾½”¾”½”¾c”“”½”cŽŽc”c2Ïøƒ:ƒ:e@@::@@k:GkGrAqAqqHqNqqrGrxqxrqrMrxqxrwrrwrNrwrxqxrxqNrÔ¾¾“¾”¾š½¾“¾¾”¾”¾”¾¾“޾”“¾”“¾¾”c]”¸“32”,]“Ž“3Ïøƒ„:f9:@:@:AAj@qqAqAqrrqrqHqxqxqxHwHqxrxrxGrwHxrwrxHxrNqxrxq™¾“¾¾”¾½”¾”¾Ä”¾½”¾½¾”¾”“¾¾”¾”¾“””c”“Ž\c”]”]]Ïøƒ9:9:„:9@kG:@HqA@AqNqNqqrGrGxrxrqxrxqxGrxrxqrwrxrwrwrxHwrxɾ¾”¾½”ƒ¾“„¾”¾”ƒ¾”¾”””½”޽,d”c”Žƒcc3Ïøƒj::A::@::@k@:qGqAqqrqrNqGrxrwHqxrqxHxrGqGqrNrxHxrxxrMrxrwHÔ“¾“”¾Ä”¾¾Ä”½”Ľ¾”“¾¾“¾¾“”c”޾c”cŽ“c]cc]ÏøƒB:@:j:9::9:@ @:AqqrGxGqqHqqxqrxqHxrwrwAqrxrwrwrxwrMqGrxqrrwÔ¾”¾¾”ƒ“Ž“ƒ¾ ”¾”¾¾“¾¾”¾¾”¾”“¾“”Žc¾c”ŽccÏøƒj9@A:@@:G:@AA9::qr@GrqrGrqrxHxrGxxqGxrxrxqxGxrxxrxrqHrwrqNqxA“”½”“¾”¸”“”¾”2”½¾Ä”¾”¾½””“Ž“¾”¾”]c“cd”c2ÏøƒH:A9@A@:q:@AjA@:GqArwrxqGrMrwrqrwrxrxGqrMrxrrwHwrMqrxqrxxrxGr¾¾”¾¾”½”½Ž¾“ƒ¾ ”2¾¾½”¾š½”¾“ƒ””“”Ž”“Ž3c23Îø/ :@:3:@::kGAj:@rG@rxGrGrqxrqGxrHxqx:rxqrxqNqƒr GrqGqxHxqxrAwƒ¾$“¾”””¾”¾”½”“”¾””¾“¾”½”¾“޽”””¾c“Ž„cŽ2ŽÏø ƒ@ :A:: @jGAƒ@.r@rqxAqxqrMrrqxqrx:MrGxrNqrGqGqxrGrGqqrxGx9rÉ”„¾)“¾“¾“¾¾“Ž”½”½”“¾”“޾”¾”c””½cŽcŽcc”23Îø3ƒ:=9:@39:@Ak@:A:qA@xqrqHwrrwHxqGG@qrwrxqxrqxGxrwrGqrGrwrxrrMÔ½”ƒ¾””¾”“ƒ¾”¾””„¾“¾“””ƒ¾ ”c¾2“ccŽc2Îø 9:@ @@ ::@:qAƒ@<:A@AqHwrrMrqrwr9qrHqxHqrGxGrrwrHwqG::qGrxGxrÔ”¾“Ä”½]c¾¾”¾”½„¾“”ƒ¾”޾”c”¾“”c¾3cŽ]c2,c]Îø:A:3@A@:9 @:9Aƒ:jAqrwrGrqxGrN3HGrqHxqxGqqrxqxxrƒ: @qrrGxrqx™Äƒ¾*”¾”¾c”¾”¾”½”¾¾”¾“¾”“cŽ”“ޓޓ3cc3c,3Îø93A@9;j@3:3@@:qƒ: @qHrqx@rGƒqMGqrqrwrr@rGrxrxrw::GrqHwrxrwGkɾ¾Ä“¾¾“”¾c”“¾”¾¾“¾¾“¾”“¾”Žcc”“¾”¾“¾c3c¾33cÎø@:Aq:9@A@43@G:;@q::GqGrwGqHqrr@rrGqxxrxGAwrxwrMr rwrxqrGxqxrrGÉ„¾”“¾¾“¾¾“Ž”¾½”c¾”ľ”„¾“”“¾”޽”,c¾c޽”\3ÎømA@: :@A93@:@q::AqqGqrGrqx@HqGrrNqxAjxrxrxxr wrGxqNxrxrNwŽGÃÄ”½”¾¾”¾””¾”“ľ”cc“”¾“¾”¾””””,”d”cŽ“¾””cÏøƒAq@: 9;@3@A::qG::@qAAkGqqrG@qrqrwrqHqAxrwrMrqGrrwrxrxrwxqr™“ŽÉ¾”¾Äƒ¾“¾½”½ƒ”¾¾“¾”¸“”¾22”½¾””“¾2”½”¾“]2Ïøƒ>:G@3:@:@A:q qq:AqG2GrGqHjHqGrxrxGqqxqNrxrxrqqNrxGxqxrxxq”:9É”ƒ¾)Ľ¾¾”¾“޾“¾”¾”¾½”¾”¾¾c¾”¾“”·”¾c”¾”“3c33Ïøm@@kA@@A:@kG 3 r@Gk qrqrG:rqGrxGxx@rxHxqxqx qHqrwrxrxrNrqi:xr™¾½Ä¾”¾š¾¾“Ž“”¾”½¾”¾¾“¾“¾”3“¾”Ž“”¾”””3¾2]ÏøP@A k@:jG3AqA2 @ @kGqGqHq:qxGrqxx@A@rwrxrxr9rMqGxrwrxwrxqxrxqxɾ”¾¾Ä¾¾“¾¾””½”¾”ƒ¾“¾¾”Žc½”¾”½”¾¾“ޓޓ޽]”]2]Îø":@q AqA@qGq q4@rrqHq:@rGrqrxrrƒqrrwrGqNqrrqrqxHxrNrqxNrxrx™¾Äƒ¾)“¾¾”¾“Ž”¾¾“¾”ľ”“”“”¾“¾”½””d“””c½c39Îø@@qAqqq :qq39:9Hwqq:@AqqGxqNwxGrGxGrxqxrGqGrGxrwrwrrxqxqNxɃ¾š¾¾”¾Ä”¾½”“¾”¾”½¾”½”¾Ž½Ž””¾”¾ƒ ”cŽ“, 32]ÎønGkHq:G-AqAA93GrrG:xrrGqrGqArxqGrrxqGxrxrqrGxqHxqrrwrxHxrqɾ”¾½¾¾Ä“¾½”¾¾Ž“¾”¾”½”¾”“¾“]“”¾“””Ž“”3”\33ÎøƒkqqGA9 A@@4: qqGr@rGrwGrqHqqGqHjA@ 9GqGqHqNqrxqrN:qArwrwrxxÃľľĔ¾¾”¾¾”¾“””½”½”¾”¾“Ž”¾”c¾”Ž“”Žc”]c3]ccÎø":AGr@A@d:@9AqGrqxqrwrHqrqrGqAq„:3::qHqqGk@A@A@r9Aqxrxrxqx™ƒ¾*”¾¾“¾”½”½”””¾”¾“Ž“¾”½”c”¾“”¸“¾c“”“23]Ïø'@:@:kAkq @3:GjAqGrG AAGjGAGqAq@:@:@GAƒ: GkGqGkGkqAwrq@AqNqxHxɾ”þľ¾”¾¾„” ¾“¾¾“¾”¾”¾c¾Ž“¾“¾ccޓ޾3c“3“Îø@AkqGqAG3ƒA0qrqrw k@rq::@ 3:@:@:9: @qGrqr :AqGkqGrAqGrxqxrÉ”„¾(“¾“¾”½”¾¾”“”¾””¾”½”Ž“”“¾Ž“d””·”“3ccÏøƒj@AqqGrk: qq@rwrxrqxA::G@q3A@GkAGkq9::AqHqq9qGqHrqGqrqxrxGɾ¾Ä”¾”¾”¾½”“¾”\”¸“”·”½”¾”c”Ž”“Žc¾,“””Ž2cc]Ïøƒ=qAk :qAqG9AAq@AqGqGr 2@9Ak@G@4GAqAq 9 ::9@ArqAqGqrqGGrGxqxľÄ”½ƒ”"¾¾””“¾”“¾”¾“””¾“”¾¾c””Ž“c,cc¾Ïøm AA@:qGq:AjGAkGqrqr ::@@AqA3AjGkGkGkGqAA:@A@@qGqGrAqGqrxHɔē¾¾“”¾“¾¾“3”¾”¾“¾Ž”¾“”·”c””””¾c]3Ï÷n33@3AjA@;@3 9Gkq@@;: : @@3@kG:@@kG:qGkqGk@Aj @: :AqHqGqkqGqrqþ¾Ä¾¾“””¾“”¾¾””“¾”½”¾”½”“¾cŽ“”¾“””cc”,cÏõq 9 ::@::@q ::AqHqAp::@@k@ AqAq:Aq:AqGGrq3:999:qGk@kHqHqHqNÉ”¾¾”¾“Ž”¸“c”¾””¾”½”¾¾Ž””c””Ž“cŽc”””c3Îõ43 9@:@:3G49G:qG„qA :@:A@A3:GkG:A9:GkqAq@:49ƒ <3GkAqGqAqqGqri½¾Ä¾¾”“”“¾Ž“”“¾”½Ž½¾”¾“¾“¾cŽ”3“d”“¾Ž“Žc3cÎô$ 9: 3::G@A q::A::qGrGrq@39A:q@:@kG:ƒ@:@AAk:: ::392 :9AqAqAƒr1qG“”¾”¾Ä”¾”¾”“c޾”¾”¾¾”¾”¾”¾“cŽ“dcc”½Ž“”“,c]cÎó*3 : 3GkjA9:@q:@qGqrGGq @@r kGAq:@k@@:ƒ@F3 3@:@ 3“ qrGkGkGGqxGqþ”þ¾”¾“”]c”¾“¾”½”½¾“¾”¾”cc”cc¾Ž””]”cc½ÎóF 3 99 @4qGAq:@@AqGkrA@kqH@3A:9A@qk@:qG:A9qqA:@93 @:GkGqGqGqqrAqGÉ”„¾ “”Žc”¾¾”ƒ¾ ”¾”¾¾”½¾”¾ƒc Žc”½c“]c”½,cÏôs:43 @::G::A@qGqGqGAqqr :3:@kGq:GkGk@3Aq@ 33: 2:223A@qAkAqAqGqAqþ¾”ľ”“¾cc“¸”¾“¾¾“¾½”¾“¾¾”¾¾”]”c3””Ž“”c3]3,ÍòR 3 3:-@3 9:@@:rqArrqqHqq @9qrG:AAqGqA3 qG;@: 9 9Ac23jA@AFk:GqrAGr™”¾½“Žc3ccŽ”“ƒ¾ ”½”¾”¾”¾”¾½”¾cccŽ“””¾”Ž23Íó3 93 9ƒ:T :3:A@@rqHwAqrHq3@ qHqGjqGqGk qAq3:9 @3@Ai2]@qq:qA9rGqAqɾ”¾”¾¾\cc“¸“¾”½”¾”¾”½¾¾½”ƒ¾icŽƒc Ž”½”””“3]Íó 3 9:3ƒ:h9:Aq:rwrqxGqxqq9:GqAAqGkAqG9rGA @:A::“c@Hq q:GqrqGk@A½”¾¾Ã”]3cŽ“””¾”¾”½¾”¾”¾Ä¾¾šŽ9cŽ””¾”½”Ž“Ž2cÍòu@ 3 :A3 93k 3GkG@rGxHqrxGr A3 Aj@:qGqqGqHqqAjA:@:9:h”c::9 q:GqGqAA@”“¾””¾“3”¾”½¾“¾”¾“¾½””“¾“Žc3,cc”“”½Ž”½””“3cÍòv:@9A:9Aq::3@:AG:@ArqxGrxq kk@A@qHq;@rAqG3 @@:q : ™”cc9AAkGrGr3Aq™¾“¾“”¾cc¾”¾”¾½”¾”¾“¾”¾”“c33””¾“¾”¾”Žc,cÌóu@ :@@::9:: qk@k@xqqrqr3Gq 3 qq: qGqrqA39A@:9::“Ž322™qAqArwr :Ô¾”¸c]33c¾“¾“¾”¾“¾”¾”½”½Žc3cc””½”¾”½””“332ÌõGAjA@ :A@k3Aqx@AqGrGxq@Aq qqrGA@:3GA@A9::@@rG@“c2i3ÙGk9@3x“@q™¾“”ƒ¾ ic2¾c¾¾”¾¾”ƒ¾½”¾”¾””2c]c2”޾”½”¾”¾”3ÌöA@@33GkA: qxGk@ArqrGr@A@„:&9::9A@k9:A:9:qqrA@c89“ch]G: @: @xrx“ƒ¾+Ô¾3c¾¾”½”¾½”¾”¾¾“¾“Žc3c]cc¾22]”¾”cc]c3“Ìöm3A9 3@A@ qrqrAqqGxqr@qA:j:AG G 3:9A@@A@:@k:: 99::2™bc38:qq @Akwr¾”½”¾”½3cc¾”¾¾”¾Ä¾½š¾”¾¾“”]cc”¾Ž“”“¾“¸“ƒc]ÌöA3:@ƒ@.39HxGqGqGqH:9Aq9A:q:@:3A3Ak@kAqqGA@: qA:A™cc…:3:@GrÃŽ¾”¾¾”ƒ$c]c¾“¾”½”¾¾”½”“Ž”¾3cc¾“޾”޾”¾”cc3Íõs 3@ @::@49 @rq: AqHq:GrGk@r9:39 q:@AGkAGkqk:9Aq:G™@k99@A9::Ã2“™™”½”½cŽiŽc¾”“Ž“¾”¾”½¾”¾¾”“32c]””“¾“”½Ž]2,ÌõM @:3::9 qA@@qGrqAkGqrqGq9;9 @3@@ 3kGk@qAq:GGqGrAG3A@:AGA™i™“h22i““”¾”¾¾iŽƒc¾¾“”¾½”¾¾”“”¾“Žƒc]cc332]Ž”¾“]32 Ëör:9 AAqqAqrq qAqqHqrG @:3@A::9A3kGAjG: 3Gk@33Aj:Aqkqq:b8““9hcÉ“¾¾Ä¾¾“cŽ”“޾“¾¾”¾½”¾“Ž“]cŽ2ccŽc“c”3]9“3,Ì÷ 39AjHqArq kGqrqGqAjA@ ƒ@:AAqA:ƒqK::G2Gq9:qr@AxAF@GA:bicc™b“iþ”½¾”¾”Žc“c””½”¾”½”¾”½”””cŽ”,3“ŽcŽc”]ccÌ÷ @:AAq3rAqGrGkGrGxƒ@AqqrAkAqA@Aq9Aƒ@IkGk rGrGqxqxk:A@chÙÉ228Ôc¾”¾½”“3]2޾“¾”¾¾”¾“¾”¾”½”d“j¾“”“”c“32c3Ì÷q2A39:GAGkGkxAqqxr@rqrqrGqGqrGkGjAA@@A::G:9kGqrqrxrxrG@Aj2™Ã™™icc8¾“¾“”c”]3“3”¾“”½”¾”¾¾”“”Ž””,”””ŽcŽccd32Ìø :k@kqAƒqGGr@qGrGGqAqAqAqA9Gk9„:A94xqGqGGqHwrG:qAA8,iic“b8ic¾”„¾(”c”c”22¾Ž“¾”½¾“¾¾”½¾“¸“3”“¾”cccc,]]Ìø!:@:9GqA qGrHqqrqHqrqrqHqrqxqGkAƒ:@@rqNqƒrCqGrAAFk:q@k82™“™™“b28¾½”¾¾”¾]“2]½Ž]¾“”¾”¾”¾”½¾””Ž“”¾23Ž”“ŽcccŽ23“Ìøp9:@:Arq krqxrGrqqHqxGrqxHxrxqGkG@AwrxxqrxGrMrAqqkAqGA@cc™b™Ã8ccß¾¾”þ”cŽ2cc¾3½”½”½”¾”¾¾½”¾“¾”23½Ž“Žc]]”Ìøo39rqrGqxGr qrqHqxrrxqHqxqrMrxqqkrqHqxrGqxGqr@qGxqxGkqAhc™2™c8c8™Ã”¾¾”½]“3]3”c¾”3¾”¾”¾½¾”¾”½”޽¾¾”“Ž”cc”23]3Íøo9 :GrG@rqrqG:GqxrwHwrGrxqHwrxqrNqAwrqNqrGqrrq qrrxGrAGj2b38b382™™”¾cc”c”3cc¾c¾½”\c¾½””¾½”¾”¾“””¾“¾”“Ž“c]3]92Íøn @9qrGqG@@qAqA qrqHqrqxqrrwrxrqxAGAqAxqxrqNr9rMrwrqqGA2ccbc8c2™™“¾“¾¾Ä,c¾2c]“,”ޔ޾“¾”¾½”¾¾”½”¾¾“¾Žcc22]Îøƒ 3A qGqrGrGqGkAwHq@:GA@:@GrGqHqAƒ@kGrqNrq@ 3xrrMŽGkq2c2cbi2c2Ôƒ¾'”¾c¾¾c¾c”“”½”¾“”¾”¾”¾¾“¾”¾”½”ޓޓŽ],3Îø„! @ 9qGqqAqr@A@qGA@k@A::@qHqGqGkAƒ@FrqqG:qGA@xqrckGAcŽ3232b™c™¾“¾”½¾c¾c¾cŽ”¾¾”¾”½”½c””½”½”””“c3]“Îø…:3:9rqHqrqHqAkqrqGrq:GkGkGkGqkqqrG@GqG:@k@rxc]“Ac”2i8„™“ƒ¾&š¾¾,”c3]3“޽”¾¾“”¾”¾”¾”½”¾Ž”¾“Ž”¾”3Ïø†h3:A@rqrGrq qqHqrwrG3@@::9:qrqr AGq:AkGrr@:AqG]9]]c2Ž3]3:Ù““™¾”¾“¾”¾cc2c””½”¾”¾½”¾“¾”¾¾“¾“¾”\”“c¾2c3ÎøˆA@Arqq qrwHqH@:@Ajƒ@NG:HwGqqA@AkAkqr@:qGqG]c2]”“c bi““™“¾”¾¾cc”,cŽ9”¾“¾¾”¾¾“¾”¾“¾¾”¾”]3¾c¾”3ÏøˆT:3:A9Hq qHqrqq:G:@A:Akr@kGkGqA@kGFAqA:qGrGkc2c]“29,c32™bi2þ¾Ä¾¾c”2cŽc¾”¾”¾“¾¾“¾”ƒ¾ ”“¾“¾”“¾cc¾“3Ðø‰c: p:Aq@AqrGrGqkGk9:@9@:@rGkA@qkAqGq::qrqG]c]cŽbibi2c™“2iÉ”“¾¾”¾2¾”]3“”½”½”¾¾”¾”½”½”¾”¾”½”¾“c323Ðøˆ ::A:9:A@:GqqxHqƒA@ƒ:$AqA@A@k@GqGqAqGc qG3 2cc38cc23b™“þ$“ľ23c3“3¾””¾”¾“¾“¾”¾¾”½”½”¾””d]2Ñø‰=@:3 3:G:@AjHqGqrFkqArF kGkGkGk: :qAqGkcc3A@: 3]2c28c“i“Ÿ¾”ƒ¾”ƒ33]c“¸“¾”¾”¾“¾”½”¾”¾“¾”¾”cc]Ðøˆc 9: @3@@k@A@:rGkA@qqrGk@AqGqG9:qGrAAqGA 39 9:A2ŽŽ3™“þĔÄc”c”\c”“¾”½”½”¾”½”¾“¾”¾¾“¸cc]33Ñøˆ>AA9:3Gqq::39:@:qrqHqrqA@:@Aqq:AqrqGjG3@@3 3A: :9 b2,“™Ÿ¾½„¾”””“¾¾”¾“”¾“¾”¾””½Ž“”¾”ƒc¾,Ñøˆ k@@9qGGAG:ƒ:GqGrM:@::@k @3 rqA9ƒ:993@::3q23ib™¾”¾Ä¾Ä”c””]¾”½”޽”¾”“¾“¾”¾”½””]”9Ñø‰ Gk::@3HkqA@„Q qG9A3A@A@@::@q::qGr9::9: ::9Gq:: b,cb™™¾Ä¾¾”½¾”]]c””½Ž¾“¾”“¾Ž¾”¾“¾Ž””½c3Òø„AA@@A@3 @A@3Gqq†P 3AqGk@AqqGqA:GkGq AGqA239:Grq :@A2928™™¾“¾¾Ä”¾”cc“3“¸”“”¾”¾”½”½””¾“”””]c]2Òø†9AjAk :@k@AkGA†P3G3Ak:9@qAqH3@3GkG3qGk: 3:@:qr::9bc2™bþ”“cc”c]¾,”“¾”½Ž“””¾”¾”·””¾“¾3c23Òø‡@A3:@:@@:@@k9 „3 3AqG k@AqAqGA3GqqHAkG9@:ƒ@::@:Abic2cŸÃÄ„¾ ””]c32”¾””½Ž½”·”¾”“”¾”½””]cc3Òøˆ9::„:Y@AA@: 3:: @kA9GqGrr:qq 3Hqq@Gk :Aq::A:A9::hc82cÉ”¾¾Ä¾¾“Žc]2¾””½Ž””¾””½”¾”½”¸2cc32Òø‡b:@A@k:@qAk:Gk@AqqG:9 d qqr kAwr9G:@qrrx@qGkqGqG:@k @jA@9:@™™Éþľ”ľ“”3”“¾“”¾“¾¾“Ž”“””¾Ž“]3c”“Óø† rGk@k@:GqGGkGk@qrqAqA3@ qHqrwAqGƒ:@r@@ArrqGqrGr::@qrGk@A@4™“™É¾”ƒ¾”¾92””¸“”¸“””¾“¸”·”“¾c“Ž”,Óø…c@GkGqG:qGkkGqAqrGqHqA@ @3rqxGkGAkAwr@GAAqGqGkHqrqr@GrG3Aq@É™™É¾Ä¾Ä¾½”¾¾2Ž”½”¾“”¾“Ž“”“”¾”¾3,”c3‡ccÊø†::@Aq@rAAqGkqGqrG„q*@A:GrqGAqA@@qGAqqrqqAGkqHqHqGqqGqq:9ArÉ“cÉ„¾Ä”„¾”“¾”Ž”½”¾Ž“¾“¸22cd“Ž3†cc3Ëø‰AA3ƒ@ZAkGqrGrqHqHq:@:AFAqA3GjAqr:GrwHAqAxqxqxqGrGk:Grq:rÉibÃ¾š¾“”¾š¾c¾¾””“޾c””¾Ž]c”ޓޓ23cÓøŠ`3 kAqAqHqrFA@33A@kqGkGqrA@G:9kGrqAqxqxHqxrrqrrGqrAGG“b™™¾¾”¾¾”½¾“”“”c¾¾cc”½”½,ޓޓ33ccÒø… „]:qG:qq:993@:@A9 k:9: qA@qA94:@@A@A@xrxqqHqNqxGxqGA@qkG9cÃÄ”½¾”¾¾”¾c¾]]i”c]c””\”ޓޔ2]2cÕøŠ 9GqGq@A@…: ƒ:#G:G3 qqGrA99G:AqAjGkGAqHqrqHqrqAqkGƒ:@@”¾“ƒ¾Ãc¾”2ƒc Žc]“cŽ”c„”“]””]”ÕøŠ AAkGq3:@k@:ƒqNGk@qGqG3Gkqr@:Aq@@q@rqA@A@qqGqq:A@AqGqqcc]23c¾Ä”3,c¾c”]cc3cc””c¾Ž½”2]c]c“,ÕøŠ%@A@k AAA@@A@HqAG@AkAAkGGrqGkG:A@rGrƒq5rGrGr@;wrAqGkr”¾33c¾c¾¾23c¾c]c]ccŽ“cŽ“”c3]3“”¾Ž3ÕøŠ!9Ak:::9Aj:AqqAjAjAqq@:AqG:3GkA@ƒq8HqxHxq:@:qqHqqGkx2¾”½”¾”¾c”c3¾c]cccdc]c”]3]“Ž“23ÖøŠ[:@39qGqA:3Aq@r@rGrq:A:9qGk@qGkqHqGqrxqqHqqrGrqGqAGq”¾“¾”¾”½“cŽ“”c]c3“c]c¾“2“Žcc,×øŠ @@:AAqAqAqƒ:9ƒqHHq@A@:Gq:@4qrGqqHqrGxHqqHrwrGqrrGqr¾”¾”½¾”¾Ž”””Žc3c\Žc3c“Ž””,Žc”,3Øø‹Z qrqGkGqGGqGqAkqr@k@qArA::HwAqHqrqGkGkxqHqr@rGqAxq”“¾”¾”½”“”””3c\Žcc]“Ž”“¾c“”Ž“323×ø‹4AAG:AqqGkqGA@rqGAw:@: qGAq9:wrA@qrGqrqqGrxxrwAqxr@kGƒ¾½ƒ¾”¾“Ž“Žiƒc3c]3“Ž“”Ž2c”cŽ““ccÕø‹AƒqN::GqrGq:@qH3r:qHqrrqAqHAAqA@rqrGqHrqxGrxGrxGrxGk¾”¾”¾”½”¾“ŽcŽ”ccc]cc”c]3“Žƒc Ž”“Ž”]cÓøŒ^:@@@qH9:A@kG: qGxqNqx@q9AqAjAxrMAqrwHrxqxrwrqxqrM¾½¾Ä“¾”¾”¾“Ž““cc]c“3”””]”c”“”“Žc,ÒøŒ7:@Ak@qqrqGkGk 93GrqrqrGkAGkwr:9GAkAxrxxqxqxHqHxrxqr¾š¾”ƒ¾ ½¾”“cŽ”Žc]cƒ”33”ƒc ]9ccŽ”””ÓøŽT 3A:GGrq:: ::3@:@:@xqGrqGkqqGqqxqxGrGrwrqqGrNw¾¾”¾¾”Ä”¾“Ž““”¾]c“¸“c3ccŽi”””ŽÚøŽOAG@kqG::9qrq@@GqA@@rrAwA3AGqGqGrGrGqrxrrMrGxrwr”“¾½”½¾¾””]””23”“]]cc”c2Ž“ŽƒcÛøkƒAk:rqH„:@@A9:xq@:@GkqGrkrqrGrrwrMrqqr@xrx¾¾”¾”¾““cc”]]3¾232cޔޓޓccÝøƒqJAqqGqHq@:qrq :G3@: @kGrqGrGxqqGxrGrqGrxGAqx”¾”ľ¾”¾”cc¾“”c¾”\cŽ”“3cc”3ßø<GqA:A@:qrqrq:MGq@A@rGr9 AqrGrqxqHr9 qGqrGrqqHq¾”½¾“¾“¾¾¾”ƒ¾i¾””¾3¾3cc]””23Þø1::Gq:@kHqHwHqqrAA3AqGq:xqrqrGrxqHqqrArqHqxAGrw”ƒ¾”¾¾“d¾“”¾”¾“¸““]c]2c¾”¾“Þø:kG@AGqGk 2 ::q@k@Aƒ:79 ::rGAGqx:GAqxrqrqGqxr½””½”¾cc”c2¾”½¾“””¾”\c¾”“¾”¾Þø:: qkGqA@qqGAqƒ:3Gk@:9:A@ 3@9qqrGk:wrqxNqGkxrq”]”¾¾cc]c]3”¾ccŽ]½”“„c],33”ÝøP:@3GAkGkA@qqAqA9 :Gk:9 qGA:Gq:3“Ž @:rGkGq]9“c“”cc”c2”c“Žc¾3]3c,cc¾”½]Üø‘H@qAqqGqAAqGkAAqG3GkqGq kqrGqAAq:qGqG@::qr@AA¾“”¾”¾¾”]ŽcŽ23]2Žc]ƒ]àø“@AqGqAqqGkGqGqAq qGrGr GrqqGqqAqrqrqqrGqGqqcc¾”“3””¾“¾cc“Žccc2ƒc2ƒc”áø“>@qG kGqAqAq@AqA3r:Gqq qqAGrqGq GxGGrGrqGrA¾”,3½Ž“޽”¾”¾”“Žc]ƒcŽ2]cŽâø“ :@3GqrAqGqAA@@3Mqƒ:1@:rqqGkAG-qrrqqrqxrGcc]c”޾“””“¾”cŽcc“cŽ]2cdccãø•C:@3Gq qqHqkqr 3k:A@:H9rGrq qNqxGrGrGq¾”½c”“”¾”“Ž“¾¾“]9]cŽc3c3cäø–AA3GqHqq GqGr9 qq3:9:q9rqG rwƒr wrGqr“¾c]””,”½”¾“¸“””“¾“¾“Ž”2åø•B 3Gk@A9rGkrqrG39GG:3GA9@r93rGxGq qrqH¾”cc]“]”¾¾”””½Ž]]c¾”“Ž“”cåø–A3AqAkA9rqHqG 3rq3 AkGkArG@rqrxG:9Hq”c]c¾”½”c]cc”3c]”¾Ž2åø—?Gq@GkGA@:qrAqGAq :@qqG39:9rqHq@AqGqqH¾½”¾”¾“”cŽ“”33cc¾2,cŽ22æø—<AkAGkqq@GqA3@qH3qG:qH@A:@:qrGqGqr q”¾“¾“¾Ž“”cc2޾]23c”céø™A9qGqHk q@:@:@GqrGrqqGƒ@ qqHq:3q”¾”¾”¾“޽Ž]””cccŽ3ëøš::AqG@qr@3:qrqAGqqGƒq"G::qHqqGAkGr“¾2¾cc]“c”]\cŽc“2]êø›ƒ:kAqH9GrGqrq rGrGr k::qH:qrGkƒccc”cƒ” Ž]cc”]]23êø)@9AAqq qGqGrqGkGqrGkGqGrqqHqrG”¾””¾3]cc„c”c3c2Ž“êø3 3AqGqGrrqHAkGkA@kGqrqGqHqrqqŽ”¾“¾2ccޓ޾2cc”,9]23ìøž23 kGqAqqHqqGqGkG9GkGqGrGqqGrG¾“”ޔޓޓ”]2c]9]c”ìøž1 qGqGkHqrGkGqGqkGqAqGqrGkGq”“¾“Ž“””c]dc]]cíøŸ/ AqAqrqGAk@qrqHqGqArqHqrGqq”¾”ޓޓ¾“Ž”cccc]“cîø -3@qGqGqqGrGrGrqArqGrqrqrHq””“¾”½Ž””“]cc]c3ïø¢$qHq qGqqrqqGqGrqqHqHqqA”“¸”“d“”¾„c¾32ïø£) qqArqHqGr@AqrGrqrGqGq@޾“¾Ž“Ž”c]c]“3ðø¤& AkGqqGqGr@AqqHqMrqGq:”½””“Ž”¾c“””3c]òø¥$AqAqHkqGrAqHqrqqArGk””½”޽”cŽccccóø§ kGkG„qrqGqHqAqqG¾“޽””½cc”Ž“],óø¨ 3 qAHqHqGrqGq@Gr@”¾”¾“¸cŽ”“”]3ôøª9 9qHqqrGqrGkGkG”“¾ƒcŽ”]õø¬ 3qGqGq AqAqA“޾”¸c]”“Ž“öø® rGr k@qA@¾”““3“dd“øøµc]cc”½332ޓ޸øµƒc]”cc¸“ƒ”øøµƒcŽ“ŽcŽ“ø„ø¶]cƒŽ“3ø…øº”“”ø‡øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄ¶·-ØtÉØt2Ût /Û€FòËÛ€Fò-"rÉ"r2%r /%~FË%~F-kÉk2n /n‹E,Ën‹E,-³·UªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÃ2]ƒc]óø¬2ƒ 2c]c]c23cŠ]…c 223cc]32êø«2‡c]232]c‰c]c]cc]]cc3\†2]áøª]3‡c3,ƒc2‡ 3c]cc]c]9…c]]9ƒc],Ûø± 233]3c3ccc]‰…c,3cc‡cŽc]83,2]cc2Üøª2ƒc]3ƒ23c]3„c‡cc]]cc3]]ccc]cc]c2-c3Üøª3323c]22, ,2-23]]ƒ c]c3cŽc2„3cŽƒcƒc3ccÝø©c22222,2,,22,‡„c-cc„ ccdcc3àø¨23“2322332,,23-2232cƒc]c…c]ƒ32cŽcc]àø§$]328 3 333,,32c,3]33]ƒc]]c]2ƒ32c]c]3ßø§ 28333 9:9ƒ 2323822322,23“323]„c32ƒccc]ßø§23: 3 :933 ƒ23„2322323333c]ƒcƒc]]cc3ßø§*b9:@::93 3 3 3282323223223223,23]3c]3ƒc]3c]23]]àø¨5@@3:@:9:9::99 3829228223223,22 ,32223c]cc3c]3cc]ßø§( @:A@ 3 :@ 33@:339b29832922323,32233,ƒc]„c]]càø¦5 9@k33A9@:@@ @:3 :29b3b928383323,3233,3c]]c]c]8áø¦-3@;@@3 3 3@A 39 39:2]88]2]32]232323323\]3„c3äø¨-9: A@A@9 :3 3 399]]c39\323232]2323,3222„cãø©0 @d 9A3:@:33 93 3 4bcc3\]3c3]3]3232323323]33]cãø©39@::@3@:@@:9 3 39c2]ƒc]c23\332],3]2]232,2,äø¨ A@ @3@A:@ ƒ:!@33 ::i33]cc]c]9c]]9]2323]23,93cäø§2 93A@k 3@@Aj 9:@:AkG9::bcc232cc]2]2323]c]3]2]cãø§ @A;ƒ@4@3„: 9AFAkAF@AhƒcŽ3cc323]c2cc2]2]33c3âø¦ @33@Aj3::@@ 9ƒ@9A@:@„:“i]Ž““32cc33]32323]3]2]áø¦ @A:@@:@@A3A@A:A:Ajƒ@!:@::b”¾“ŽŽ“”¾cŽ“]cc3]32322,332,3ßø¥ :3@@4@:A:ƒ@AkqGq@AAkA@A:@“¾”¾”“”¸“””ƒc]c23c23]3c]9\3Þø¥'@::3A@kGk@k:kAGk@AqqkGjA@::hccŽccc„c3cc,]c]22c]23Þø¥:@:@@Aƒ@A@AGj@A@kGAqGqAjAqG“c”j“Žƒc Ž3c]]c3ƒc3c3\32Üø¥&@@A@k@k@AjA@@A@@kGk@AAqGqqAk™3]c”Žƒc‡c3ƒc ]2c3,3,3c23]Ûø£%:@A@:A@:@rqHqqAkAkA@AkGkGkGqGqr™“c”ƒc3\33cc]c]c3]32c323c32Úø¢:@AkGqk@:AqAqGAƒq Gk@qGqqAkƒA#GA™3¾””¾”3]2Žcc“c3,3“]c3c\32c\c]Ùø¡ƒ@?AqAqGkGq:@:@rqHrqGrqAqAqGjAqjGŒ”¾“¾“¾“¾”“”c]”ccŽc32]c]332cÙøžAG:@rAqGqqAAqGqGkA„@/AqqHqrGAkGqGqA@”“ޓޔ¾“¾”½ŽcŽd”,“c3c]9]cc]cÙøAqqA3A@AqAAqqGkqAƒq4rqqGqHqGqAqqrqrGqq™¸”“¾“Ž”””“dc“Ž2cccc]3\3cc3]2×ø›K@AqAG3@@kGkAjAAqGrGkGAGArqr@AkGqGqNqGrqHÃc]cŽccŽ“”Ž“Žc3“ŽcŽc,Žbc23]]c3ÖøšHAA@:q@@:qGkG@AqGkAqGqArqrqHqqGkGqqAq@:qGq™™”c””“ccŽc“Žc]“Ž3“]]3c,29ƒc]\Õø™@Aqƒ@4AkGqrGqqGkGkGkAqqGrGqrGqGrqAqGkGkGrAqÔ¾¾c”ޔޓcŽ“ƒ”]“c]cc32323\ccÕø˜@:GqA@:AkAqHqAqAqqGqAqGAqGqqGrqrqrqrHqGkGkGqA™¾“¾”“¾½¾“”]””½”ƒc ]cc]]cŽ3]cŽcÔø˜P:@qkAk@qGqqGqAqHqrGqAqGkAqAqGrNqHwHqrqHqAqrq™¾”¾¾”¾””¾”“”“Ž”cŽ”d“]c9Ž2“c2c2cÔø•@A@ƒA=G@AqGqGkGkrqqGqqGqrqGqAqGkGkGrqqrMrqrxGqHÓ¾“¾“¾½”¾”¾”]c””ƒc3]c]“”]c3]3Óø”U@AAj@@k@k@qqHqGk@GrGrrGrGqHqrGrGqqGqGqHqrqNqrrwq™¾”¾”¾”¾¾”½”·”“”c¾”Žc3c2Ž“cc]3c22Óø”I:@:A@kGkqGrGkr@rGrqG:qrqrqrGqrqrqHqkGqGqGrrwHqHxr”¾½”2¾”½”¾”“”¸“Žc””cc„cŽ]c33cÓø’.@Aq@AqA@qGqrGqrGqGqqGrqGGqHqrqrGxGrqrxAqkHqqGrƒq'Gq¾”¾¾”½”¾¾“¾¾c”¾”“Ž”]ccc]“cc]iŽ]]Òø‘*@AA@:q@kGkGAqGk3AqrGrqGrqAqHqNqxrqxrMrxGqƒr wrGrGrG™“”½”¾¾“””¾”½”d””“cdƒc3Žƒccc3ÒøZ:@k@@:GkAAqqGrqqGkAqGqAqGkGqrqqGAqrGrqqrrxxGqHqxqrqq™¾”¾¾”¾”·”¾¾”¾”“”“””¾”cŽ]c2c3]c]ccÒø[A@@qAqqGqqAAq3kqGqGqrGqrqGrqGrGkxqxqHqNrwHqxxqHqHqHqþ¾“¾“¾¾”½”½¾“޾”½¾¾c]“]“Ž33,32]c2c2Ñø=@A3GkAqGrqHqAxAAqrAkGqkGqHqrqHqrwHrGxqrqxqrxqGqrxwrxGÉ”¾¾c]”ƒ¾”¾”¾“”””¾“”c”cc“cc]2c32c]]ÑøŽ@A@9AqAqAqAqGqGƒqKAqGqGqHqHqqHqxqNrqxqGqGrHqGqHrqHqxHqr™¾”½””½”½”¾“”“¸”¾“¾”Ž“¾”]”c”]233c]“Ñø;@Aq@4GqGrGkGqqAqAqAGqGkHqrqqHqqrGrqrqHqxrxqxrxrqrwrxGrwrq”“„¾””“”ƒ¾c¾“”¾¾”¾”c”c”3]c32ŽcÐøŒ?::@qA@qrqGkGr@AqArAqGkqGrrqHqqHqxqHwHwrxrxrNqxrxNqHqqrqHqx¾¾”¾“ƒ¾“Ž“ƒ¾c”¾“¾””½c”¾c”2c]2c”]ÏøŒa:@AA@AqGqrA9qqA@qG@kGrGrqNqqHrwrHqrqrqxGrwrxrwHwrxqHqxrwrG¾”¾¾”¾“¾¾“”¾”¾¾cŽ“”¾3½”¾Žcc¾c]]332]9Ïø‹b:@@kGj:rqAG:qGr@qrqGqrqqGrqGqrwrxxqGxqNrqxHqGrxrxqxrxxrxrxq”¾½”c¾¾”¾”·¾Ä“¾””½”“¾”½Ž“3ccc”39]cc2Ïø‹b:@@Ak:GqArqGqGAAqHkGrGrrqGrrMrHqGrxrxqxrGqxqrGqrxGxqxNqxHx½”¾¾“”½”“¾”“”¾”¾””¾”¾”ccŽ”]3cÏø‹:@;@q @kGqx@AkqAƒqGkxrqMrrwrqrqqrwHwrrNqrxrxqƒx qxrxqrxqxq™”“„¾!”“Ž“¾c¾“¾“¾”½”¾“Ž”,“cc]c”2]c]c3ÎøŠBG:@@Aqr:GrqrqA9AAqHqGqxGrqxGrxGrGxrqrNqxrxqxHxrwHxrwHrMrqxr™¾”¾”ă¾“””¾ƒc””¾”¾”¾”¾Ž”¸2c]“cc]cÎøŠq:@kAqG@qGAqH9Gƒq7@rqGrqrGxrqrGxxrwrNqrxqxrxxqxqxrxrrwrqxHqrŸ¾½”½¾”¾”¾¾”ƒ¾”½”½3c½”¾2cc”c””]c3Îø‰A:GA@@AqA:qrqG9qrGqAqGqrGrGrqGrGxrwrxGrxxrxqNqGrrNrwrMrxxrxqxrÔ¾”ƒ¾!þ¾”“¾“¾“¾”¾”]”½””,Ž“”]2”]c”Îø‰?@r@@A@rwAqAGrAqGrA@rGqAqrqxqrGxqxrGrqxrwxHxrqxxqxqHqxrqNqxHxw™“ƒ¾š¾”¾”ƒ¾”¾”¾””¾”½ŽŽ“3”c”]3“ƒc]Íø‰f:G:@k@rr@AqrqAk@qGqkHqrMrGrwrrxqxqxxrxrxqxxrxrNqxxrxwrxrxqxrÉŽ“”½¾¾“““”¾“¾“¾¾”½”¾”¾“Ž2޾]cc“Ž]c]cÍøˆD:@q:A@kGq@qGrxqGAqqGkHqqHrqqHxqNqrHqxrwNrxqxrwHxqxrxqHxrMrxrwHÔ“޾”ƒ¾ ”޾“¾d”¾¾”½”¾”“Ž2Ž”c]“]”“c]9]Íøˆ\:@A@jAAqx:qqGqr3qHkGqGrqqxGrqxrqxqxxHxrxqHxrxxrxrxrNxrwrxqxGrxþ¾“¾“¾”¾“”½”¾¾””½”¾”]½¾””2”ƒc”c]c2ccÍøˆg:@k@A@k@r@HqAG qHqGqArqHqrqxGxqNqrNrwrwrwxrwHxwrxqxqrxGqrNrxqGÉ”¾”¾¾”½¾¾”¾”¾“¾”½”¾“¾“””¾]c”“”c3”3]Íø‡@:@:G@AA@r@@qAqqAqrAqrGqqHwHrqxHqrqxqxrNrxrxxrxrxxHxxqrrxqrqrxrþ&“¾Ä¾”¾¾“”¾”¾””¾”¾“¾“”“޾¾]“]¾c22Ìø‡I@@A:@j@kGA:qrGqAGqqHqrGrqrwrxqrxHxrxHqxqxGqrwrwHwxrqNqxHxxMrqNÉ”“¾”¾”¾Ä“ƒ¾“¾½¾¾”“¾¾”¾“”c]¾c2Žcc”]]c3]Ìø‡ƒ: @:A@Aqq@:qGrƒq:@AqqxGrGxGrGxqxqxqxrwrƒx$HxxrxrxxrxrwrwrrwrrÉ”¾¾½¾¾“޾”½¾cc”ƒ¾”½¾”¾”cc”½-ci-c¾]3ccÌø‡i9:@Aj:@kGr@:rqGqHqHqqHGqrqrqxqrxrxGqrMrxqrxqxqxrxqxrwHxrxqxHxqŸ¾“”¾”Ä”¾“¾¾”¾¾”c¾“”¾”¾“¾”·cŽi2c3c“]3Ìø‡:@::@A@k„AWqHqAqGqrGqrqxGGrrGxqNqrxGrqHxxrxrNrwxrNrxqxqNrxqrxÔ¾“¾¾“¾”¾”ľ”“¾“¾”½”“¾Ž“”ŽŽ23”,c,cƒ“3cÌø†i:@:@::@AApAj@AqA@qrGr9rqHqrq@qGrqr@xrrxqrqxrMrwrxrNqxqxrxrxqxxGxÔ¾¾”¾”¾¾½¾¾“¾¾”¾”¾”¾”¾“Ž“”“”3]“cdcŽ]Íø†:@@:q@:@jA@AjGkqAGkrwHqxqrM:ƒr"GqArxqNrxGxqxrxrxqxrxrxGxrwxrNrxrɃ¾%“¾“¾Ä”ľ””¾¾½¾”½Ž½”¾“Ž”]2””Ž”2ccÍø†C@:A:A:A:A@@A@:GAkqGrqGqHq@:xxwrwHqwHqxwrxrHqxxqNrwrwHwrxxrNrqxqx™¾“„¾”ƒ¾“¾½”¾”¾“”“”¾”“””“3ccc3]ccÌø†k:@Ak@9A@@dAjAqk@@rqNqrGqG:rqrNqrqxrxrqxrxqxqNrxrxrNrxrxrwrxwrxrqÉ”¾”¾”½”½¾”¾¾”¾“¾”¾¾”·”¾Ž½””3”2c,cc3Ëø†ƒ@:@:@:„@_:Gr@@rGqrGrqqrGrwrrMrrGxrNrxGxrxqrwrwrwrxwrxrxqxrGxrx¾“”½¾š¾¾”¾½”¾”¾¾“¾“¾”½”¾”½Žjc3”ŽccŽc3Ëø†k:AA@@Ak::r:A:kwA@qrGqqGAxrwHxqxrxqxqxqxqxrwHxrNrGxrxrxrMrxHxrwrMr¾¾””“¾¾”Ô”“”½¾”¾¾”¾”¾“¾“”c””\”c2”Žc\Ëø… :@k:ƒ@@A9G:@:Gq:AqHqrGqrxrqxqHxqNrxrxrGxrxrxqxqxxrxwxHxxqxqrwHxrŸ¾“¾¾”‡¾”¾½Ä”“¾“Ž”¾Ž”3”3”Ž3cŽc\93Ëø…9:ƒ@L;@:k:@:@kAA@@AqqGkrqxHxqHqxrqxqNrwrxrMrxrNrxqxrNrwrrxGxrqrwrþ¾”½”¾Ä”¾¾c“¾¾”ƒ¾”“޾“¾”“¾2cc“…cÌø…k::@:@9A@A:@3AFqA:@@rqAxGxqxqxrqrxxHxrwrxGxrxqGxqxrNqxrxqxrxqxNxrx™”½¾”¾”½¾“¾¾”¾“Ä”“¾”¾“Ž”¾“””¾3]cc”cŽ”]c]cÌøƒF 9@:A@::@:@:@3AkGk@:@qHkqrxHqxHqHwrwrwrxGxrxqxrqrxrwrxxqxrMrqxrxqxqŸ¾”…¾”¾”Ľ¾¾”½¾”½””””·”“””½cc„c,ÌøY 3@::@:9AjA::@@AqA@@kGqGrMrqrqxqrxHxrxGxrxqxrMrxxqNrxrxrxrxqxNrxrNrɾ¾š½”¾™¾¾½”¾”¾””¾“ƒ¾“޽”]“޾c¾c]”cŽ”ÌøP:3 :@@::@A@9::@@kG:@AkqA@xrxGxrNwrwrwrxrxrGxrqGxrxrwrwHwrwHxqrxqxqxÔ½¾32c¾¾”ƒ¾“¾“¾“””“Ž”“”Ž“””“”,3ccc]“3Ì÷q3 9 9 Ak:@:Aj@3@3:@k@@:@AqArwrqrwrrxrxHwrwrwrAqHxrwxrxNrxrxrqxrxrNrx@Ô¾”¾”¾“”“”“””¾”¾”·”¾½¾”½Ž“””¾”2d”cdccŽ\Ìöq 349 43F@@:3:AA3:3@ :@A@@A@:kwrGqHrwHwrwrrxHxrGqxqxrxHwrwrxwrNxrMrwxqr@É”½”¾½”¾”·””½3½¾“¾”“¾”¾””޽”¾“c޾2Ž]ccÍõs 3 :9:3@Ak@:@:@9 A@:qAkq@A:GAqGrwrqxrGxrGqxqrwrxrxqxrxrxrqNqAqxrxrxxH@™¾”¾¾”¾¾””¾¾”¾3¾”¾¾¾””“””Ž“”]“ccc]jÌôK 3 3::9 qA3: AjA:Aq3@@3A@r:@:qArxrxGrxqxrwrxAAwrNrwHxqxqHwrxqGqAqGqxGrxqɃ¾%“¾¾“¾“”¾½”¾”½””“,”¾”¾c”¾”]3cd]“Íó_ 9 9: :3AGA@k q@ @kAj:kGq@@:kGqqNqxqHxqHxq@qxrxqxrxrxHqxqNrrGkGqqGrxxqGþ¾Ä¾“””””½”¾i¾”“ƒ¾“””½”Žc”ƒ¾8¾”c9ÍòC 3: 33 9:9Aqk: @kq k@A::3GkG:Aqrqrqxr@qGrwGrrNqxGrxqxGqqxrxrwrGqƒA/qxrxGr:É”¾¾”½””½”¾”“¾¾”¾¾”¾”¾¾”¾“”½”cŽ“¾2Ž3cÍóP33 994@ qGqG3A@G:3@A@9 9GkAj AqNqGrGrxrGkxrwrrxrxGxqrHqNqxqNqr@k@kxrqrxrxÔ¾”ƒ¾c¾”¾¾”ƒ¾”½”ľ¾”cŽc”¾¾½c”2]“ŽÍót9: 3 : :3GkG39AqA 9qG3@ :q 9rA@kGrqxqrwAxqHqNqxqxrrNqxrxrrxqAxAxxqNxxqxqNɾ“¾¾Ä¾“c”“¾”¾”½”¾””¾“””c“”½”“¾]3”“¾Íòu 3: 9 3 3:@A:qGA@k@@A3q :9::9:Aqqr99GqHxGqAxrwrqxrNrGqxrwrwrMrAxqxqrxqrxHqAq™¾¾Ä”½¾”¾”Ž“¾c”½”¾“”¾”¾¾”cŽ”¾””cc”,”Íñ% 99 39 9: kA qqA@k@A@:A9:9 9kGqHwHƒr qGkGrqxHxrG„qxrxrxHxrwxrxrxxGxqrwiqAÉ„¾#”¾“”¾”“¾”½cc¾”¾”½”½¾””“Ž223]”]“,3Íòu943@3 : @qA:GkGq@:k@:::3:AqqGrqrqMrAqrqxrqxqxrxHqHqGqHqwqrrwrwrMrxrNr“i™™ÃÄ”½Ä”¾”¾”¾”c]¾¾”c¾“޾”¾¾“”·”“Ž”“c,”Íñ 9:3 @4, qGk9qGkGkGA9@„:Y@@A@rqHwrrFrqNqHwrxHqAwrqrxrwrr@HqxHxrxrwrwrc”j@Aþ¾”¾“”½Ž½”“Ž”¾”¾“¾”½”½3Ž“””¾“¾cŽ”3½ÍòQ:9 3 :@@: @Aq kGAkGkGrGk@:@:@:xqqHqGrqxrwrxHwqGqrMrMqHqN@rwrxqxxGrxHr“Ž“A@@Ãľ“ƒ¾!”¾”½Ž“Ž“¾¾“”¾”¾¾“””¾ŽŽccd“]3Íò 3: 99A@:@3@@:@@kGk@Aƒq0 @@A@:rxHqr@qAxqxHxqxrqHqHqrrqr@@rxrGxrGrwrqxh¾xƒr)xÔ”¾¾”½”½”””“””½”¾”“Ž“¾”23”“”cccŽ2cÍñ 9 ,3::3„:#A:3:@A3Gk qH:@A3:qrwrGrxqGAGrwrxrxGƒqBrGqNxrqrqxqrqxqrNrGrxrwxrw”½¾¾Ä”¾¾”””޽””¾¾¾“ޓޓ3d”cŽc3c23Íñ 3@::39: @k::…@`k q@:AqqHqGrwrwrGrqqGkAGAxrqHqHqrxqxqHqHqGrGrGq@qxrxrxqr”¾¾š¾½”“¾”“Ž“”¾“”¾””c”ޓޓ“Žccd2c3ÍñA :3A @:@ @@A@A@ƒ::@ @:qqGAqrqxxHxqrGqrGk@qA@@::@9AAxrqHqqxGqrqxqrrwrMrwHɾ”ƒ¾#”¾”½”¾”½””¸“¾”Ž“c”d“Ž”cc]c,cÍñv@3 , 9393:: jA3@3qAk9:@@:@:GkGqrGrG j@@:AAqqGkGqAqA9::9AqGqqHqHqrG: qNrrwrrxrɾ¾Ä½”½”½Ž¾“”ޓޓޓ””c”c”ccŽccŽ,cÍñ:3 9AG9@@:k:G@ qA ƒ:_@kAqGkGrwrqr@Aq 33A3@@:A:: :8AqAG@@::@@qrGrwHrwHwr™¾“¾”¾”¾””“¾”¾c””“Ž“”c”cŽc””c3“Ž“c-cÌò,@ ::9kAk:@:3 @@k@Aq9:9@4GA@k@AqGGqGq:A:@k:: „: 99: q2b,,Ž3ƒ@7kGrqGqAwrxqrGɾ¾Ä¾”½”½”¸“c””Ž””·”cd“Ž“]3“ccŽcc3]Ìó 3::@9:@@A: ::AkG@:@ƒ:]qqAAkGAqkG::@@AjAq99 qG33:i3”3“rqAqGrx qqGqrGxr™¾”¾“¾¾”“¾“”Ž“”,Ž“”””cccŽ“c3“d33ÍôC :@:@:9 9Aj@@@Aj::G:@AGqq@::9: 9rAjA:G@: qAq:9@3“cc””qA:GkGqc@ƒr-wrqqÉ”½”¾Ä“ޔ޾”””Ž“”“cd”“]3”cŽ2“Žc]ÍôK3@@:@::3AA:Gk9:G::A3@kGkGq@9 @3 q:G9AjA@qGqA@:3“”c”c9@kGkGkGAFrHqHqŸƒ¾%“Ž”“·”j”½3”c””Ž””,”3ccŽcŽ”32ÍótA3@A@@AAq9:@Aq:@@A:FG:@kGkGkG4@@3 A:: qGkAqAqG:A: “cŽc™ :GkGkGqkGkqqNq¾¾”¾¾“Ž”“޽”cc””“”””c9”cc]c“Žc“Íõ@A@ƒ:@ƒ:"@:@3G;j:AkGq@AqGkGq: :qq@kGkG3Gk@„:B3:™iŽc”™3qGk@@AqAqGGqr™¾”ľ”“Ž“”””]Ž”””¾“Ž“ŽccŽc]]“Ž“c33”Íô4::94Ak@9@:@A@A2:A9Aq qAqAqAqAq :q @:qGkG:q qG::@@:„c;]c2 3 @:qAGqAqAqGþ¾½¾¾c”””c”“Ž“”¾”Ž“”ccŽcc2”cd”c“Íõd::@@9 :Gk:qA@ :@qG@qGqGkGqGqA qA:rqGqqGkGrq:@3@3@9]]cc23q:GqAAqAkqrqGr““”¾š¾dc”c””“¾”“”½””Žƒc 3””c”]23Ìõ' @A9 3::qG:@3@3:@AqAqrrqrGrqrq: qA@GrqƒA @:@:@:@AAjcb]i2@AqAqAqGAwGrGq™”„¾%i””3Ž“”¸“¸”·”Ž“¾”c]c]ccŽc”3]Ìö kA93@Aƒ@3A :qAq:rGqHwrqHqNk kqr9:@@:39AA@::3 qAcci@A@@kGƒq0GrqqHq¾”¾Ä””“Ž“d“””¾“¾”“””½”ޓޓ]cc]cc”cdc2cÌörFk39::9k@kq qAq@@ArwrqHqqrq@3GqG3@;@@e:@@Ak9GGqGk q™“hrq@k:@AqGrqGAqqH½”½¾¾””¾¾“¾””¸“Ž“¾”¾½”c]cc”Ž“”d“3]Ìöƒ:" A:9@A@Aq qGkr@@rrMrqxHwrGAqA3A :Aƒ@!A@qAA33GqA@k™bc3GkG@qG:qGrqAGr™¾”ƒ¾%“c]cŽc”¾””¾“”“¾¾”½””c”c,c”””“Ž3bÌöH@@:3@AA:@kGq qqGqA@AwrqHxqr kGkA@:@k@:kAkGjAA:kqG™cc2:c@4Gq::rGrqAq™ƒ¾'š¾”ccc”“Ž“¾”¾”¾“¾¾c]cd””“ޓޔc3Ì÷U9 9 Aj@A@9A: qrrGkGkrGrqq@ G:qAq9A@qGkG@A@AjG@::G@“b9,9™9:AqGrqGqq ɾ“¾“¾“]]”“Ž“”½ƒ”½”¾¾”¾”2]cc3“”¾”¾”ccÌ÷q9493A9@@kA@: qHqGkGqqxqNr:33:@A@:3AqAA@9kAkGk c::29],i™3:AqqrxqH:qA¾”¾¾”]3c“Ž3”Ž“¸“Ž”“Ž“Žc,cc3”¾”””“”c]cÌø#:3::Aq@:kqrqG3HrMrqG:G9@:9@ 3GAƒqJ::GjG3AqG3@:cc’™™AqArMqG-GA@¾¾“¾”½cc3“¾”“ޓޓ”””c3c]”32”½”¾”]ccÌø3@3::@3Gr@@3rGrƒqCGrq@kG4@ q:A@@:3@:@kGk:9:c@3AG c,32i™ÃqGqqHqq qq™”¾¾”¾”cc¾”¾”¾¾”ƒ¾”“”Ž]cc“¾Ž”¾”c]cÌøo:@@3 qAqAAqq@ AqHq@Ark: AjA@@9kA@:G A@ c: qA:]c™Ã™™qG:AkG3’q™¾“¾½”½3””¾““¾“¾“¾“”¾Žcc]]””½”“””“]3Íø ƒ:h :qG:kGqHqqrA@@4qrG:@3@:Gk@::G@k:33@::c2:c2,™™3@rq9 ::™iqGÔ¾iŽcc¾”½”¸”¾”¾¾”¾“Ž““d½3c””Ž”½¸”cÎø„k9 3GqqA@9qGrGqrqrGqA9::G::@:9 kAAq @A::@”Ž“Žcc] @@A@:Gr93qAkqŸ¾”¾”޾””½¾”¾“¾Ž“”Žc¾2ccŽ9cc””½,”Íø…\3 kG:qAqH:qrGrwHqr@q 9AqA9A@:AqApA@k 3@A”c”c,:@kqqA:93G49AGqxrq”½¾¾”“c2”””¾“”“¾”“¾Žcc]ƒcƒcŽ“c]Ïø†i qGkAGkGq@ qqHqxqGAqAqAkGkGkGkG@Ak@39:”cdc::GAG:qGcc83:kxr™™¾””½¾”¾3c¾“”¾”¾””“ŽccŽ”cjŽccŽcc”]3Íø†i qkGq qqHq3GrqqHqAk@GrqGqGkGk@qkG@A@A:@Ž“rqGqAq@qAq89™™Ã::h™“”½¾”¾”½cc”Ž“¾”½””¾”ccc”3]“cŽc]2ccÍø†] qHqrrGqr rGqxA@rwrqqHqrq@AGkG:AjA9Aq:d“c:xGxqqrqGqArqqAcbi82chiÔ¾“”¾cdcc””¾Ž“ޓޓcŽ”c”ƒcŽ“Žƒc]Ïø‡fqqGq qrGq qrGqAxqHqHqqrGrq kG@@k3@A@ArrqrqHxrxqAqGAbÃib32™“i™½”¾¾“ŽcŽ””¾¾“Ž“¾“¾”“Ž3“””c]32Ïø‡( qGk qrrx3HqqAqrwrqxrNqqHxq33AAAkqkqrxƒGqxqrMrrGqGk™ibccb™“Ô¾”¾”ƒc“¾””¾”ޓޔ”“ŽŽ“”cc32Ðø‡>A3Gq rwA@ qGqAxqHqNqrqxrwrqGAqGk@@rGrwrqrAGrxqrGqqAkG™c™bchc2ƒ™$¾½¾”¾”]c”Ž“””“”“Ž“””“¸“”3”Ž”c32Ðø‡G:: qGrAqGkGAqrwrqrMrNqrNrrGqqAqrrwrxHqrqxqAGqGqGrGkA™bcibc222™“”¾½¾”ƒc¾c3”“¾Ž½¾”¾“¸“ޓ޾2c“Žcc]Ñø‡e9 9: qrGkGqqAkGqGrHwrrqxrqwrqrGAqGqrNqqrFAGk:qHqqAqGkbibc8ibci\™¾]¾”¾½cŽ2”]c”¸“””¾“¾”””””“c3Ðø‡e 3 :r@q@qrGq@AqGqqAqGxqNqHxqHrpHqHwrGAGqqA@:qqHqqGqAGccb8“2cb98c¾”ľ“3c”c]”\c”·””½Ž”””“”¾“¾Žcd]cÐø‡$3Gk 3 qGAqqGkA@AqG::qr:9 kGqGk::@@Aƒq=rGq3A:GrqGkGkr923bc892i\É”½¾¾”23“32Žb”cŽ“”½”¾”¾½”¸“”޾“ŽccÑøˆAG@3@@kAqHqGqr@A:qGGqGkA::GkAƒ@C::94GAqAGrqrqHqHHqA]c2icb8“cŸÃ””¾“¾”]]3½3]c”¾”Ž”½”“¾”“¸“¾“c”c3Ñøˆck@::9A qAqrGqqGkqH3A:9qAj@@AjA@3:9AqA@3rA@9rqqc:q@9]3b8c29b™“¾“¾¾”¾”“c32Žc”“”¾“¾””¸”“””””]Ñø†eA9 k:9 9AjGk qqArGq3@Gk:@AAqqHq::@A@3:@rFA@@rGqA 9Gkcci“ibic™™“޾”¾½¾332,c”½Ž””¾“¾”½”Ž“Ž3c2Ñø†G3„ 33@A::AG3GqGqƒAOqA:@3kGk@A@A@A9A@qA@kAqA:@9:A2c3c“8cb2i“™“¾½”¾”½c33c”Ž“”½”¾Ž””“”Ž“””“]3“Ñø† 9AkFk9@@A:2:Gƒ:qAƒqOG@k@ :@:@@A::@:@:@:qGk:GkGq@ :A]8c““c]hÃi™b,™”¾¾Äc¾3,3cc”¾””¾”“”¾”¾Ž“Ž“Ž92Òø‡A@k::ƒ@ZAAq:@:@3 GkqA@:@rA@A@@::@AkqAAqAq:qAq:A@:93]bi’i3ch“i™™¾“¾””c¾23cŽ“”¾“¾””“¾”“”Ž2],Òøˆ;A9:@@kAk@:@q@ 39kGA@:qrqr@kAk:@kAq@qAqAq::GqA@k@:2@i“2„“’™¾”ƒ¾”c”c2”“¸“”””¾“ޓޓޓޓ3cÓø‰`9 @:Ak@@:@:k:: 33qGqrGGk@A@A:G@@::qrGqA:9G]@:3@@223™“h9™™¾“¾“¾¾2]c,cޓޔ”Ž“¾””“ޓޓc3\Óø‡ 9:@:q@ 3::@::ƒ@TA:: 3A 3Gk: 993 q3@A@qGkG@qG::@:@@:@4322Ž2]™™b“™”¾”¾”½3“c]”Ž“”“¸“””””ޓޓŽ]2Ž3ccÐø‡ 9AAkAG@Aq::GqƒA:@:@:A9:A3G9q:qq:@::9AqGk:3::ƒ@:r@933c2”c™cƒ™!½”½¾dc¾3c“”“¸”“ޓޓޓ””]23cÒø†-GqqAGq@kqGG@kGq@3qqG:@@Aq@qGAk9GqH:9 kGqG3:9„:2Aqrq cq32ic2“h“Ù¾¾”¾”c”2”ŽŽ“cޓޓޔ”c“Ž2cÓø†? rGqAk@GqrqqGkGqGrGqq::A@qAAkG9Gr@@:r:GkAq qq::@@A@rcc22c]ƒ™!Ô½”¾½”2¾”iŽ“d“ޓޓޓ”dcŽ“3cÓø‰3:@A@rAGkGrGrqqGrA:@@jAqGqrGqkGr @qAqGkG3qGq9AjA@@3ƒ:)323]c™“Ù¾”¾¾”¾32]”ŽŽc”ŽiŽc“Ž23cÔø‰: 93q@AqAqqGrGƒqGq;@@:qrqrAAqqqGAqqHqƒAq:@@ƒ: @AA@q:2c]iƒ™¾½”¾¾“¾cccŽi”c“”iŽc””3]cÔø‰%9 3qA@kGqrqGrAAqAqGkA:qHqGq:qH@qr:qH„q5A@@:A9:9Aq:@A92cb2ib“™Ã™¾Ä“޾c3Žc”Ž“ŽŽ“c”Ži]cÕø‰ 3GkGkAqqHqHƒq.A@k:GkG:qrwG qG3A3@AqqxHGqrqq:qG:@:q:Aq::cib2cƒ™ɾ”¾¾“c”,cŽ“”cŽicŽ”2cc]Öø‹ZAqqGqGk@A@3 :A@::Gk@GAqqAqAG3GqGrAqAqNrGqHq:@3AjA@ @ci2™Ã™Ã”¾Ä”¾c””ŽiŽ“Žc”i33cc]×ø‰[ @AA:r:@::@3@3993qG@kqGqGqAq:qqHqqGqqrqGkGrqGA3qGAqqA@Abc2™™“ɾ½¾¾”¾c2””””cc”Ž2]cØøŠU:k9A@3AGk@@:@A@::A@AqA:q qA@:@AqGq rqHqGqGqrGkGqGrqqG39rqib2“iÉ”¾š¾¾”cc-”cc””]d“ƒcdØøŠ@9AA@:AGkA@::qGrG@qAk39GqAqqAqr@3NqrqArGrqrqrrGAA@A2GAqHq9ÃÙƒ¾½Ä¾c22]32”“cc]c3ÙøŠ@Ajƒ:Sqq@GkA9:GrqkG::@:4GkqHrA:G@@qrAGAqqrMrMr@rqqAkGkqG:q8“™iɾ¾š””3c””2ccŽ9ŽcŽ3c”Ùø‹@@GqGqGk3A@A@qGqƒ:@q: qGƒq#@9qAqAApAqqxrqr@AqxqrFAkGGqq:ÓiÃÉ”ƒ¾”“Ž“3]“]ƒc3cc”ccÛø‹V ::qGkGqAA2qk qr:AGqqAqAqAAqH:Gq:AqqAqGGkNqGqGrqHqAqGkqAGqŸÉ“Éþľ“¾””3c]3cc]”c]ccÛøŒkƒA@rA@qA::q AqkG@qA3ƒq5A@@kGqrGrAqrAqAAqAqGqrwAqGqHqA@Ä“i™É¾”½”¾“cc3cc]2d“Ž„c32cc×øŒ(@q@k9:qAqGkA@rqGqA@AAq HqHq::GrGqqAqxqqGƒq/rGrqGqAAqGqqA@É2™™Ã“¾”¾¾””]2c]c”]ccŽdcŽ23Öø::9@A@:q@@qA94@:q3Gq@qqA@:ƒq8AAqGrHrqrHqGk@ArGqAqqrHqric™“™¾”“¾”“Ž“¾c]cd”c2d“”cØøŽQ G@qAqAqAqG3::Ak@:9AAqAA@:qHrqGrqqxqNqqr@AAqqrqArrGqrqqihi““¾”]”½]3cccc”]]dcÝøOqqA3GkGA3G4:9Gq@:AqrGqAq:qrGrqGrHqxrGrGrqqGqGr@qqxrG3cc““”“”“”Ž3c2cŽcc”“cÞøŽ7 AqGqAqA:@:9@@@rqHqrqA3G@AqqHqqGqGqGqrqGGqArqHqHqH“”„c½”ޓ޽3\3ccc]cc]2”””3ÛøŽ3Ak:GkGq::@:rq:ƒA8wrMr@@:kGqHwrGqqrGrGqHqrq@@rqxqxq””޾cŽc¾“¾”c3c3c]ccãø=AGkGk:@: qHq:qqGrqr@:9Gkrwr@rrHqrqqGrwrrG@rGr@G”¾”½””d¾ƒc ]c]cc]ãø3:k@GkG: qqrG@4@:A@9:qH:qGq::@rGq:GrGrqGrGqrqGq@k”¾ƒ”½”“Ž“cc]c33i33cäø‘I:9AqGkqHqqr:Gqq AA@rq:AqA:GqGqAqxqrGqrqqGrqrrGr”“¾“¸””“Žc]cŽc2”]9,c3]âø 9kGkGAqqGGƒq@GqkGkqAqAqHqGkGkGqAqqGrGqrqqrq™Ž““Ž”“Ž”ccccc3b3]c]c23\ÒøªA@AqqGrqAAGkArqrrGqGqrGrGqGqqGrGrG““Ž”·””c”dc”cdcc]c]3]92]3c23Ñø¨CAGqAArqrMqq@qqHwHqGqrAqGqqHqrGrqrqr™¾“”“Ž“¾”“Žcccc]3]c]c]2]c]3Ñø¥GGqGqqAxqrGrrqHqHqAkGqrrwrGqBqqHqrGqGGq™”“Ž“c”Ž“”dcc]“cc3cc2c,Ðø¤HGqrqHq@qGqrwHqqrqqx@qGqxHxqrqGqqHqqGqrGqÔ”Ž”cŽcccŽ“cc32Ž9cc]2c,9cÐø¢-GkArGr@qAqHqGqqrNqxHqGrrGkGkGrrxHqqrGrAqqG“ccƒ¾“ƒcŽc”Ž“Žc”,c]c3c2]33ƒcÏø¡4GqGkFrqAAqAqrqGGqqHqrxrwrqrGqqHwrwrGqrqxGkAqA¾¾“¾”¾¾ƒ”cc”””2”Ž]]c]cc]ŽÏøŸOGqqHqqrGqGqrqrGrqHqGrwrGrqNrwqHqrqHqrrHwrrqxrq”¾”¾¾”¾“¾“ޔޔ2 3c2 ]2cŽ“ÎøžOA@A@qrGAqAqqHxrwGqrqrqHqxqHqqHxrxqGqGqqrGxGrGxq™¾“¾“¾“¾””½Ž“”“ŽdŽ2]cc23,]c]ÏøPGqkGkAqqAqqHqrwHrrGrGrGrqGxqxrxqxqNrrqHxqrqxrwHrŸ¾”¾”¾””·””“Ž“”cŽc“c”23]]3292ccÏø›S:GqGqGqHqGqGrqrNqrqqrwrwrqHqrGrwrHwrrwHqqGrGrGqrqq™“”¾c”””¾“cŽc]cc3cc3,3Îø›G@@:qBqAqqGkrGrwrxGrMrrGrxGrqrwHqqxrGxrxrxqGrqqHqHq“i¾”“””¾cŽ“Žcc”3”ƒc ccŽc3cÍø™:@A @;@kGk:@Aq:@3@:@:@rG@:A:GkGqAkNrxHqrxGrxrqxqxGqrqxrxqGqqGƒq1rxqxrxrGqrqN™“™™Ã¾”¾½”¾””¾”¾¾“”c”“¾”¾“cޓޔcƒcËô q@kA@@qAƒ@ikGq3 A3@: 3HqkAq:qGq:Gqxqxqx@:@rxxHrxqxrGrxGqHqGlqG rGxrxqxGrqNqq“GAß¾“¾”¾½”“¾“”2¾”¾cc¾Ž¾]cŽ“3c]32-Ëô kGkFkAG:@Aƒ@A9:9:G„@;:@Aq:GkGqqGrxGqGrGkAwrwrMrrqxGxqGqrqH3rxrxqNrxqqrqr”qAGÔƒ¾“ޓޔ¾¾c”¾cc”¾”3“Ž9„c3]cÌôu@AAk@k@:dAAj:@4Gq:3:AjAAj@kGqrrqGrrGrqqGqAAwrrwHqGqAqAqAqrwHqxGxrxGqHqGr“”Awrq™¾¾š”“”½”ccޓޔ“¾¾i,ccŽc]]cc2Ëõ3:ƒ@:9 3AkƒAV@9r@:GA@:@@:GkGqAAqrqGrxGrrGqA@@A@@rqAqAqGrxGrqxqrqxGqqGr””rwrrwÃɾ¾“¾”¾Ž”c”“ޓޔ“”„c -c]cc]c3c2Ìõg9A: 94@@AqG@9A @@Aq@k@k:@kGAkG@rGqrq@:9A@:qkA@AjA:33 rxqrqHqHxGAkGkG”qxqxrwH™™“Ž”½”“ŽcŽŽ“”“Žc]c‡c]c]2Ìök3@3 :9 :@kG:jAqqA@A@:AA@A@qAAjAGkGGqG:Aq:A9G:@::AAi33@@AqqGqAkGqAcÃqrqHqGrqÔ¾”¾”“Ž”cj“Ž“ccc]3cc]ƒc]ƒcÌ÷* @ 9A:@Aq@:rGkG3kA@kG:@AkGk9 qA@kAqAqAjGƒq:A9 qjq:8\9i@AG:qqGqAqr8qHqGqrqrG™¾”¾¾½”””dcdccŽc]c33ƒc3,]ccÎ÷, ::@:@@:q:@Aqq4::@@Aj::AjAFAA:@AqGqq @:9;@ƒ:A9 @Ak ™“h,“™4AqGxAqrqxrGrGrÔ½”“ޓޓޓccd]ccŽcc]c],cc3cÍø%::3@A:@A@kGA:@qAjA9qGAjAjA@::3G3r@ƒ:5G:A@::GkGA3™hd,™““:Gk@Aq“:@AGqrwGk™”¾“””“Ž“ŽiŽ9]ccƒcc32c c3ccÍø'39GAkG:@:@AjA3@:GkGA9AqAqkGq@:GkG:A@:„@Dk@@qAkA™,c™ih9::@@kGG:GqqGqHqG½”¾”¾“Ž”cccdccdccccŽ3cc3c33Íøƒ:@A::q:@kG@@9 @kGk@rqGqAqGkA@:@kAFqqA@Ak:@:@3b9“2biccbc“ @ƒ:AjA@qqHqrqAÔ“”½”¾ƒcc]jcc]cŽccdccŽƒc23\Íø„kGk@ qk:A:9kGkGAqrqGrqrGqqƒ@DAkGqA3Aq @:@3cbbc8]b9bi9:@q:@AjAA@AqAGq™”¸“޾cc”ccŽc3]ccŽcc]3c]ƒc]c]c3Íø„k9Aq@AkAq@3qGqqAAqHqGqGrGr3Ak@@qAA3@AAj:cŽc]9c32chik@A@9A@:@kAjAqAk™½”¾“cccŽ3ccccŽcŽ2c]cc]cc]cc3\Íø„+4AAjAqq@: :qrAqA@qrqrGrqqr@GA@A3G:9qAjAcc†c"]2i“h@AkAA@AqAqGA@qA™“”¾”¾cdcci„cŽ“Žicc332cdc]c23Íø…- :@@:G A@3:GqrGkAwHqrqqHqN:kAq@@::G @ŽccŽ2ƒc29h“4@@A@kkqAFkqqA99“¾”½¾¾ƒc]ccŽŽ“ŽŽcjc3c]dcŽcc,cÍø…:@::9AjA3:qHqGqG@rqGrMrq:9GjA3ƒ@=:qAŽccŽ,c]3322i@Aj@:GAqqAGAqGrG“”¾”¾”c3cޓޔ”j“cŽc]ƒc””“Žc3cÍø†=9:@:3qrA qqr@qkGqrGqr9 @:AAq k@:qA@:cccŽ“HG@@]c,cÙÃ@;@q@qHƒqHƒq$““¾¾“¾cc”¾“”jd””“Ž2cc”””“c]Îø†33@:r@@q rGrAG:rxqGqG3 @:@k@A@kG:qAŽ”cŽ@qrr]c„™1:@qr@qGrGkqHq™”“¾¾cc]]”½dŽidc¾”33cޓޓŽcc2Îø†N : qAG:qAwrqAqxqGrqAAq : jA3AkGkGqAqc“Žc@rGqc2ÙÙ3@rAqrqrGqAqG“¾”¾”dcc”ƒc“Žc¾“ޓޓ32”2”½””¾3]]Îø†F33@qA@kG3Hq@@AqrGqAqA9:@:@GjGkGkGkGd””c]9Aq3-22“i“™@AqHqNqqGkGk™ƒ¾“]ccŽc”ŽcŽc3]2Ž””Ž“¸cc2Ïø†X 3GAAq@AqqA@@r@Aq:AGqA ::A9AAkGqGqAAcc”ccŽGrc23ih“8-GqGrqrrGA9 É”¾”¾“3 cdc”cŽiƒc 23“Ž“””“Ž2Ïø†3 3ƒq AqGrG@4qrqH@:rw::3@@jGqGqqGqAƒc32]3“cc32ci22™bƒq HqG3@qAÔ¾“¾ƒc”¾“”“””½”dc3ޓޓޓ”“Ïø…f 9A9HqGq3rGqq:@rGqrqqGq:q:qGkAqArqA@ A]ccŽ“Ž3c23’c2i:9 rG:rGqqAAÔ½¾”]c””¸“Ž””cŽc”2dccŽcÑø†*9AqAqH9HqrGqqxHwrxGqGrqqAkAqGqGqAqq@::@]„c7c]23:9AAG3Gr9G9™“qq™¾””“Ž2”¾”“”¾“””cc,cc”ccd3Ñø‡;AqGkA9qrGkrGqqrGrqAqAGqGrGqqHqAqAA:@@:]]332cc:@AqGqkA:qGƒ:&c™i@rq”¾½¾””“޾¾””·cŽ“c]cŽ3cdcc3Ñø‡:A@Aq rGqGG4rGrGqGqrGƒrJqrqHqkAAqGq::@9:933qAA@qGkGAp8:q9:GbcqGq™¾”¾”½”¾”“”“”””c3c”“cŽc3Òø‡ „:!9 qrqrqrqqGrrqrqMrGrqrGq9Gk A@3ƒ:9 39 wqqrqAkGrb™c499GqrGÔ“¾“Žc¾”””””c”]cc”]ccŽc3Òø„1:Gk9 :3:9 qGGk9rGAArqNqNqrqrMrqr:A93qAG:@qqxqƒr1GGkGqqGc“2:ArGqq™¾”¾”“c”cd“ŽcŽ9cŽc]cŽ“”c]Óø†c:3 93: 9rqGkGAjAwrqrqrMrwrqNq39:GAAqAqq3@rHwrGrrqrGqrqrGci@:qq™™”½¾¾Ž3cd“Ž”cŽ“ccŽ“cc“ŽccÓø†(AqA@q@:9 r@A@kGk@:qNrGqHrqHqrqHGAqk@AqGƒr8qr@A@rwrwHq3HqGqibi\c9“™½”¾“””2Žc”ccŽ“ccŽc33””c,Óø†cAqAk:@A@A@rGkG9rqqGrqwrxGxqrqGqGAwrqxqNqGrqGrqNqqHqqHq9“cibi™™’™”¾”¾”½ccŽc]cd”Ž“”cŽ“]“]3Óø†KkG@@A@:3:k@3qrqA@ AAkGqHqrqrGxqrGk@kAAqrGrrqGqAqrqGr9GqAqc8“bib2™™Ã”½¾”ƒc3c””“Ž”c”ccd93Óø†c ::9A@qAGq:A@rGGkq@@Ap @qGGrwGrGqqH@kqqNqA@@AkAqGqrGq:GrGkhchcbc2,™Ã™¾”¾”“Žc3”½3c“ޔޓcŽc”Ž“cc]Óø†&39 :9A@kGGk@Ak@Grq:@AAkAkA@:9@A:A3: ƒ:@qkGƒ@/rqHq@AqqAG28cichcc22™”½”¾”2Ž”\3]i“c””“”“Ž“”Žƒc,Óø†c :@@A@A9::99:@A@kGAkAjGk@AkAA@::9:9::q@@A@@3rq@rGkA@A2Aqk“i2hc8cc2i“”½Ž“”]3cŽ2cd”Ž“ŽŽ“Ž“]c]9Óø†c:@kAqAk@::@9:9:A@A@:@@k9ApAkA@GAqG::@A::9GA: qGqAj3qrGc“cibch2ibiÃc¾”¾“]cccŽc””·”“]”“Ž“ccŽ2]Óø†bkGqGkGjAAq::@Gq::9 k@@kA@9:G:9:9:qqAA@A@k:3GAjA@:qAk@Aq@A22c“™238c8i’c¾”¾”2”]c”c”“”“¾c”cŽcc3cÔø†a 3Gk@qAqGqG@::GA3k @k@@:4AqrG99 rk@@A@9GqA@@kG:q3c kA““3˜“bi“ihÙ]”¾½”]c2]c”޾cŽ“Žccc3Õø‡`9::AA@qqGrqrqq qrGq 3:@@Aqqk:@;@: @:3::AkAqA@q@A94@ 9Gk˜“83bi“8“c2™™“”¾¾c3 cŽ“”“cŽ“Žcc”c3,3Õø‡# @:@AkGqGGqHqAqGkGq::qAqHqGkGqAjƒ::@:qqGkA:AAj:@@A9:c3i“™“™h2“™¾¾“”2c3jc”dŽ“ccdc323Õø‡"j qk@AkGkqHqAqAqqAG:@@AAjGk qqGƒ::G9 rG@9GkkAq@::9d”,8i’““i™“¾”¾”2]cŽcccdcŽc32]Öøˆ@A:qGq@ƒ:GqqGqAGkGk@:A:qAA9 qAqAqGƒ:G@kAqAƒ@jAqA@ :9c,”]c]“™i““™“”¾“¾]”„cdŽ“cc„c33×øˆQ:q:@: AAqA::GkGkAGk:@9A@qqGq:GqGrqq@AjG@3A@:@AA@Aq@:]@32cc““’ih@“”“¾Ž9¾]cŽc…cdc]ƒc\×ø‰K Aq::@qA9:@A@:9@k@@Aj:GqrGq:4qqAqH@qAkG:9rq4@:@@:3:9A,™Ÿ“2™™“”޾Äc]“]„cdƒc]ƒc]]c,Øø‰J 3::@q @@k@ :@A@AjGG:rGqr 9rGAqq:qGqqGrGqk:@:9: 9329c™Ã™i“™™½”½c3”…cƒc]c]cc3]ØøŠR@9 A@qkA@3Ak@::9:qqAqqGq rq:qGqGAqHkG:@@r@@Ak::Gk @3329c]c“i™™“™”¾”¾2c]c]c]]cc]„cccÙøŠK:Aq:@3:AG@;@@A@::A@GkAGkG3qGqAGkHqAqqrGrq;@3::@::G jA9:8\3c“’™“’™”½”¾“”c]…c]c]c]c33Úø‹&@:qGqGqkGkA@:@qqAkGA@:qGrGk@qAAqq@rGqGƒq&GrGqq:q:Gk@389]c™™Ãi™¸”ŽcŽ2c]c]c]„c-cÜø‹<@GkGkrGkGqq:@:rGqGq:933GqAAqGkqGkGrqArHqGqrqH@@A2 :338c\]ƒ™ Ù“”¾¾i]“Žƒc32cc]]3Ýø‹% A:qGkG::qGAk:qqGk 9AA9:kGA@kGqGrAqqHƒq,GrqHqq@:qGkGGqcb92c3™“Ù™¾“¾¾3”cc]c]c3cc]Ýø‹3@A@::@ƒA2AG3H@AkGq:A@ƒq@r@::@@rGqrGrqGqr@AkqAƒqG:Gbc2ch™™Ã™”¾””¾“3cƒc]ccÞøŒM 3@ :Aq9k@3Gk:@kA@A9A@A@rGqA::A@qrGqrGqrGqqrGrqG::A:Ac22cÙÙ¾½”¾”]c]c]]ãøŒ<3Ak@jAGq:GqGA:@3@AkGj:qG;qr@@qqrAGkGqrGrrHqrGqGr:@@kGqqGc82ƒ™ Ô¾”½”½3“ŽccäøŒK @@:@Ak@Aqk@:9:GqAq:@Hqq@:AqGqA@qGkGqrGqqGAqqrG@qAqGqc83ÙÙ¾“¾”ccccåø;:3A@qA@:q::@:GkGk GkqGrGk@qAr@AqrGqAqAqHq@rGqqAqGkqBq@q2„™ ¾”½””c]”Žƒcãø(::93AqGqGq@3A@A@kG@::qAqqAA@rGqAqAqqrGqGƒq"rAqHqAkHqA@A@Ac™“Ù½”¾¾“¾]c“ŽcŽ“âøŽN99GkGkG;@A@k@k@qAjA9:GqAk@qrqGAqGqHqrqGrGqGr@AAqqGA@@:A@ib“É™”¾”¾”¾cc2”c]Ž3àøE 3GkGq@A::3GqG@rGqHqrA@q@GqGqqAqrqrGrGqAAqAqqAGqrqqr::ÃÃi“iþ“¾½”½c,èø:Aq:@k9:Gqr: qqrqqGqƒA@;qrAqrGGrGqqrqA@kqGƒqHqHqG:9™É“˜™É¾¾””“Žc3èø:ƒ@-;G@qGqG: kAAGqrG93:qGkGAqGqqGqGrGrq@GqrGr9Grƒq:@Ã9™Ã™¾”½¾”c]2c]æø‘ ::9kG:AkAqAqGqƒ:$qGq:GqGqA@rAAqrqGqqA@kHqqG:qGqHA@3™ƒ™ þ¾”“c]cçø’3 qG@q:9AqGqq q9:rG:qAk@@kƒqHqGrGqGqqrGrq:GrA„3“’™™É”½”Žc]cèø’>3:@;@kGAqAq 9AqG: 9:AGA:AqGGqqrAkAAqBGqGA@AqqAcŽcci23b“””ƒcéø“+9Ak@@qGq@k::@4qGkG9 k@j@qHqrGqGqApAqqAkGqqƒA“””c™“8ci””êø”=GA@AjAAGqG:9GkG::qq AqAqqrGrArqGrqHqqrqAqAjA”dc32“2d]ccëø”79@:qA@AjAqAAkq:qrG3 3@GqHqqrqGrqqHqqHqGAqGqqŽ“cc”“”Ž23„cìø•<49AqA:A@kFk qGrGq 9AAkGqArGrqGrGqrGrqq@AqGޓޔ½Ž“Ž\32cŽc”cëø—?GkGq::@kGA9Ak@q :qGqkGqGqGAqqrGrwGrHjArq””“Ž”cŽcc”“Ž”“Žæø˜5AjGq:GkA3:@:: : @kGqGqkA@r@A@rAqqr@9A@Ž”½”“¾cc]”“¾”‡”½æø™9Aq@ @@:A@:9:9:A@:qqrG::@q ƒq GkGq3AqccŽƒc,3¾”¾Š”âø™ 9:Aqƒ:.9:@@ :@A9A9Hq :qqGr@qGrGAAq qA@cŽcc¸”]2”½Žc”‰”âøš1 :@:q:9:@A::@A393 :@@AqHqqAqHq3@@:@ccdccŽ““Žc””ƒcíø›5kG@:GA@::Ap:A@::@ @k qAqAAqq::@:c,Žcc3”½d3“”cd“Žìø›Ak:@kAkGkGA@@:@:@:3 @3A@A@jƒ@ŽŽc”c¾“””,”c”“cëøœ9::GkFAjGkq:@:@:GqkA@:AjA@@ƒ: “dc”¾“¸”d“„”Žc¾Ž]ëø)3GqAqGqAGqqG:qAqGqA@@A@A:::c”“c]3“”c…2”c“ìøžq:@@kGkqA:AqAqGkG:@:9::@::ƒc]c]]“”އ,îø ::3GqƒAj9GqAq@A@jG:@:q:@ƒc‡,c2]“‡3”îø¡@ q:ƒ@ A:q:@::@kGlƒ: AAc3,3]3]223øø¢A:@::@3ƒ: @AA@qG:@:@c]‡c23øø£AkGkGGAGA@j@Ak@3:9:cc2]c]3],øƒø¥AqAqkq:@::@kG::@]]cc]c232cø„ø§AqG:@:@:@ ::9493cc]9]]]ø…ø©„:cc49„c3ƒc]c23]ø†øª@ƒcc3]]3cc]]cc,3]ø‡ø®cc]2cc]cc]c32øˆø¯ 2233\3c]c223ø‰ø° 3]2cc]b3]ø‹ø±23]c]øŽøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÐ3]êøÐc\cc]çøÐ ]cc]c223]càøÐ2]„c 33\cc]2]Ýø»†c2,Œ 32c]cc]„c3Ýø¸cc„ ]c]cdc2c‰„c ],3]3c2cc2Úø³]c‰ “]“Žc]c‡3]cc]2c2c]c]cŽc23\32c]Ñø± „cc„c c3Ž”Žcc2ˆ 3c]cc3]3ƒcŽ32]]cc3ccÏø´cc„cŽc9c]3,,2-‡†cccc]cc]cc]c]cc]9Ðø±88cb “„]ƒcdއcˆ\c]c]„c]ˆc3c]3Ñø° b,i,8c9c,ƒc ]c9cޓޔ]c‰3]cc]3]]2]cc]c]3]ccÑøµ bc8\cbc]-ƒc dc”””c‰2-3]ƒc 33c23cc]c]Õø±! 3@::9c2”c32ccŽ“ŽcŽc3„2cc]ccc23,cc32Õø° @ ::@: @ @cƒ2c]„c d3cŽc„“…232cc]3ccc]ccÖø¯ 33@@ @:3 :A9 92c]3c]c3cc33ƒc‰3c]c]c233]23Öøµ39 9 ƒ:923cc]3ƒc]ƒc3ccˆ 2c]cc]32,2c3Öø½ 3cc]cc]c]c]2„cdŽˆ]2]c]cƒ3]×ø¾ 98c]c]c2cc]c3]cc]c“cކ„c]323Øø¿:cbcc]c]]c3c2]c]ccŽ““Žƒ]c]c]ccÛø¿"::h]cc]9c]c3]c]2c]c3Ž“”]cc3]9c]Ûø±:::Š::i]cc]c]b]c23]ƒc 32””3c]ccÝø¯::3@3::@‡ƒ:b„c]cc3c]93]32]c”“c]„cÞø­%:@::@AA999 ::@:@cc]cc]cc]c\]8]3ƒc ]]cc]c]Þø«:: @:3@:@:9:::3:@q:9:@ƒc]hcb9b9]9]2]cc3c,cc]9]2Ýø«ƒ:@ …:%@::@:33::G3A@:hcbc8c8cb8b8332c]223c,ƒcÞøª3::@:9::@:9::9::@:@::@:@ A@iibcbcb9c9b2233c]c3cc]3]ßøª@ 3@„::3@:@ ƒ:@ƒ:@::@:iibibib8cb92b323cc]ƒc]ccÝøª :@:9:„:+9:99:@::@:@@:@hicibccbcbc823]2c]c3cc]Üø«: ::@9@::9::3:9ƒ:!@:@:@@:ib“hibiib9bc9\c33cc]3c3Ûø¯9:::9ƒ:: @:„:@:@:“iciibichicbi]c\ƒcƒc]cÛø°„:@ 93ƒ:@:@:@ƒ:@:ih“b“chcbib9bcc]3]cdcc]c]cÚø²:† 9:9:@ƒ:9:3A@ihi@chccbc8]3c23c]\3c]ƒcÙøº)3:::3 :@::@@“iŒi“chcbchc]c]cc3cc2c2]Ùø»":9:93@::A@@A:i@ibih“chccbc]c]cc]ƒc]]3Ùø¼(::@3@@::k@:j@““i“chcibc8c3c]2cc3],c3b]Øø¼3@A@@:@A…@A@“i’ihihchicc]ƒc3]2„c3c×ø¼A@::94Gk@::A:A@“i““c“icbbƒc]c]bƒcc]c]×ø½)3:93A@qAqGAj@:A’“h“h“h“ich]c]cc]c3]3cc2Öø½ ::@ƒ:GkqA@AjAA™“i“i“bih„c ]c]cc3c3]cc]Õø½3 :9:9@@AqAq@A@kh““h“h“iih†c ]cc,32cc]Õø½+9:: @A:@qrqrqAA“h“™@i“hc]c]c]]cc3]3cc32Ôø¼ A9 3:9: qGrGqqA“i““i“ihd„c ]c9]]cc\c]c3]Óø¼3@A:9:::3::@@rqGAF“h™h“dcc]†c ]32cc,cc]Òø¼ 9ƒ:933:@:@@rqqA“i“ccƒcŽƒc ]ccc,c3]]cc2Òø¼ :9@@ „:%@A:@k@AA@“iŽccŽccc]ccc]c32323,c3cÑø¼/9 A::@:::9@A:qG@jAA“”c“Žccccc]cc3c3]323]32Ñø»$ :399 A@A39 2A@kGk@k˜Ž“ŽiŽcŽcdc]ƒc 3c]cc2]3cÐø» @„:+@:9A:93 @A@kG@AA™Ž“Ž“ccdccŽccc2c]c3cc\Ðø»23@A@9::9:@AA:9:@A@A@kG“””cŽddcc]cccc3232cÏøº @::@ƒ:* 99::Aj3AjA:q™c”“Ži”ccdcc]33]2c]3c-Ïøº93:9 A@@::3::3: 9ƒ@Aq™d”“ŽjcŽccŽcc33c3c]9]c]cÎø¹' @: 9:@::9:@: 9:@A::A@q“c””ccŽcƒc ]]cc,2]c3c2Íø¹, @@A9::9:3:9::9 @Aj@Ak™“”c”dcdc3c]ƒc]22]2Îø¸ 3A94@::::9ƒ:qGrqrqqAkGGk™“”cc””ciŽ3cc]]ƒc3d2cÍø¸::9::ƒ@0:@:GrqHqrGqHqHqGkGk™”””cŽdc3cc2cc3c3c,3Ìø· @ƒ::rrxqrqGqxrwrqqHqqGkGq“™„”c“Ž“c”]9]cc3c323c,33Ìø·(3@@qHqrGqrGrqxrGxrNrxqGrrGqAGA¾“¸”c”ƒc3cc]3„c22Ëøµ<:GrrqHqrwrMrwGrGrqqGrqHrxqqrGqq“G¾”¾“”dc”]cc]3c]c]3c,]cc3Ëø´ GqxqNqrwGƒr1qrrqxqHrqxqxqrNqGqAAÙ”½”¾”“¾cŽcŽc“]cc23cc]9,]2Ëø²@GqrGrrwrxGrGqGxwNqHqqNqHqrMrqxrrxq™¾¾”¾“¸””“”ccŽ“3c32]2c33dÊø¯GrqrGrqxrNrxrqGqxƒr/xqHqqrwrGrqrGrwrrw™“”¾“””ޓޓ”cc]3,c]c3c2ŽbÊøž:EAqxrMrxG9GxqxqxrqGrqNwrqxrGrrwrwHwrqHwHq™Ž½””޽”“Žc”Ždc]9]“c]32c]”Êø:@A3‰HGqrGAxqrwArAqrrxHwHrxrGqrGrxqxGrGrqrqNrwrqr™””½”“¾”ޓޓccc”\c3”233cÊøƒ 9•:9:@:‰qrNƒqCGGArqqrqGqGxrwxqxxrGrwHxrxqxGxrGrqHqHqþ“޾”¾”“””ŽcdcŽ“c32c33Êø 9: Š 9:@ :@ƒ:9::@: †@HqrxƒrCqrqGxGxrxqrxrxrxqxqxrqxqxHqrqxqxGqrqNq™¾”½Žc“Ž””cc”Žc3]c]cÉø : 33†„:@@:„@0:@:@@:9::::GqHqAxqrMqGxqNqrxqxrGxqHwrNrxrGqHqHqƒx'GrxqrxGqqH™“¾””“Ž”c””Žic”,cc]c2]3Éø 9: 93 ƒ6:@ :9:3 ::A@:@:@:::@:9rxqrqqrGxqrrqHrxqxrGxrqrqxrwrƒx/rqGrwrqxrwHrGrqHqqr”¾¾“Žc””cc”3c”2]2]c33c2É÷ 9 9393:9 ::3:@:9::ƒ@EA@:AA:@:9 rqHqAwHrGrqHqMrwrwrNxrqxHwxHwrxqHwrxxqrNqrxrwrxwrqxGqG޽”¾”„”]½Ž“”3Žcc3cc2233É÷33:3 :9 ::@3 ::@:3::@k:@j9ƒ:SrqxGqGAkqMrwrwrrxrwHxrwxrwrxrqxrNrxrwHxxrqHqHqxGxrxGrr™Ã“”¾¾“¾”9”½Ž“cŽ“32Ž“c]cc2É÷I33 9:3@@ : :9@:@:@@A:9:@A::A@GAwrqHqqxHqqrNqHwrxrxrwrrNrxqNrqxqxqxrxrwƒx(qrwrrxqxrxwÔ¾”½”¾“ޓޔޓ”¾”3]c]c,cÉöv 3 333:@A39::9::@@::@A9 @A@:@rqArGrqrNqrqxrqxqxrMrwrxrwrwrxrwrNrqxrxqxrNrqNrHwrGrGqrHxþ”¾””¾”½”“Ž“”Žcc”]9ccŽc”2ŽÈö"9 ::94 : 9 :9:::@4:@A@A9k@A@rqGƒqOxGqrwrHwHxrxGxrxrxGxrxrNwrxrwrxHwHxxrwrxrwrqHwrqNqxq™¾¾“¾“¾”¾””¾ccc]cc”]ƒcÇôƒ v39:9: 3:4@: @k@3:@:@:9:@AqrqrqAGrxqGrrwrrwrwrrqrwxrxqGrwrxxrxrMrwrxqHwrxxrwrNqrqHqrrw™“”¾”½Ž“cŽ“”“”3”ccŽc“Ž2Ž2Çô 33 3 33 93: :99:@:9‡:?qqrMrqqrHqqrMrwGrHrxxGxrNqGrxqxrxqNqxrxrxqrxrqxHxrwrxqNqxqHqɾƒ”¾”¾””¾c””cŽcc3Žc2c3Çó9 9 3:9 3: 3 @99„:e@:9:9:@9GAqGrxGrAxwrGxrxrGqxqxqxrw:xrxrNrxHxrxxrxqNrwHwHqxqxrxrxrqHwrr™¾¾½”¾“¾“””cŽcc””23“c33]Çò : :3: 33393:: 39@„:aA99AkGqrqrqGrqxGrqxrxxqGrxHGrxGkxqxrwGqAwrxwHxrxqxrxqrxGxrMxxqrqNqŸ¾”¾¾c”¾Ž”c]”“3]“c”2]Žc]22cÇñ 9 :9 3 : @3: :9:9ƒ:]@@:@A9:AqAqGrxGqrxrqxHqxqrHqGrwrwrrwAGrGqrxqxrxrxxqxrxqxHqxrwrxrrxNqrrÔ¾“¾c]”“¾“cŽ”cŽ“Ž3„c]c]Çñ 33 9: 33 3@4 :3:::: ::@ƒ:xAqGkGrwAqxGxrqrGƒxqG::xrxqNrxrwxrxxqrMrxqƒxHxxrwrGrxrwrMrrwrMþ”¾”¾¾“¾”c”¾“”“3]3c3323Çñ3 9 :9 9:9 @:399ƒ: 39::ƒ@VqrwAqGqrxqAxrwHxqrxqHqrxqqxGxrwrwrxrwrNrqqxxrxrwrxrxrxqHwHxrwrrwr™¾“¾”½¾“””¾””ccŽ”c]„c]23Çð 9 33 3: : @A9 : :9: 99@:ƒAYwrGkqHqkGrxrwrGxrxrwrwHrrxqrrMrxrxHxrwxrNrxrxxrxMxrMrwrqrqxNqHqŸ¾”¾”¾”¾¾“¾½”Žc“޾3cc]ccƒ322Çïy 3 93:393 @::3993:A99@::@:kFkrxAGqqrGqAxqxrqGqG@@rNrqxqHxqxrxrMrwrxrxxrwrMrxwrxrxxrrGxqNrqxqr™¾“¾c”½”¾””¾“”Ž““”]c3cc]2-Çðy3 3 3:3 :::39 :9:@A :9::AGkGq qAAqxAqAqxHx9:rxrGqrxxrwrxrMrwrxrxrwxrxrxxrwrNrxqxqxqxrrwrxrGq™¾”½¾i¾”¾“¾¾2¾Ž“”Ž“]ccc3]c232Æðy 9 :3 :9 949: 993::@@3 @:@kGkGqAqGkxAqAxqrxArqxqHqAwHqxHxrrxrwxrxrNrwNrwrxrxqxxrNrxGxqxrNqxr™¾”¾”c¾¾”¾c”ޓޔ“Žcc2c]3Çð9::9 39 : 9:9 4ƒ:@:9ƒ:dAG@kGqAqGkGrGqArwHrqAGrrGkwrxqrxqxwrNxrxGxxqxrxxrxNqxxrxqxqxrqNrxqxrwq”½”¾”¾”½”½””Žiccd9c]cc3\3Æïy : 9 9: 9: 9:3 ::9:@9: ::9@kA@AqGkGqGqqAqqxqxqrqG@kGrxrNqHxrxqxrwrxrxxrxqxxrxxrxrGrxrNrxrwrxrMr™”¾”½¾“¾”¾”¾“¾c””¾c”]cc]3,cÆï93:3:3: 39 9::::@@ƒ:,G@AqAjrAqAqqAqAGrrNrqNjAqxrwrxqrqxqxrxxrxxwrƒx6rxHwqrxGxxqNqxqrwrNrwrx™¾“¾”¾”½”“¾“¸c”¾cc“Žcc-c32cŽÆïy34: 3:9 :@:9 :9:@4:::Aj@A@Aq@AqGkGkGqGqqxAkGrqHqHwrNqxxHxqNrwHxrxGxrxwrxxrxxrqxrxqxHxqxrxrq™¾”¾“]”¾Žcޓޔ“Ž””ccc]]32Æð : 999 :93@: :9ƒ:b@@:@k@A@kAjAGkqGqGkGkAxrx@xqxGqxqxrwrxrxrxrxxqxxrxrwrxxrxGxqxHqxrNqrwrxGrwr™¾“¾¾c¾”“”cc””“¾“¾“ƒc]323cÆïE 39:: 33 :3@:939@9:@:3A@AjA@@Gk@GkGkGkGkwqrwr@AqqrGrqxHqxxqxqxqxrxrƒx7rNrxxrxrxqrxGxrxrxHwrxHw™¾”¾”¾“¾”¾””d“Ž“¾Ž””¸cŽc”]“”“3Æðy 3 3 9:: @;:3::A::@@Aq@A@k@AkGkGqAq qArHqNrr@HqrwHxrwrxHxrNxrNqxxqNrxwxrwxqxrNqxrwrwrqrrwrqxq””½”¾”“޾”“Ž”¾¾“¾“Žcc½]“-Æïu3 9- @@3::@3:@ 9 ::kAk@A@k@@AqAqGrGkGqxqxxqrqrrqxrHwrwrwrxqxrGxrxwrxrxHxrNqxrqxrxHxGxGrGrGr“¾”¾”“Ž“”½d“޽cc”ƒc”cŽ”2Æï>  3 3A9A: :9 :@3 :@@:@AFA@jA9AjAAqAqqAqGqHqrx@xGqrMrGxqrxrxrƒx rxrxwrxxrƒx2rwrxxqNrwrwrxqrwrxqr”¾““¾”“ŽŽc“Ž”“”޾“”c”3]“ŽcÆïy 3 3 3G3AqA@Aq 3@@39::9:AqkG@@;@A9qAqGqGkAqrGxrxrGqrqrxqxGxqNqxrMrwxrHxrxxGxrxrwrxrqxHxrqHwrHwrGÔ¾¾cŽ“¾Ž“””¾”½Žc”“”¾c¾3Žc“3Æð3 @9 ƒ:t2A@:@::@;9 A@:@AqA@:@qA@AqGkGqAqGrq @rqGrMrGxrqxrxrGxrxrxwrwrMrxrwxHxqHqNqrwHxrxqxrqx™¾“””“¸”“Ž“¾”“޾”Ž”““Ž2Æïy9:@@:33@: @k@:@ 3:9k@@:@k@k9:GqAk@qG4AGqrqGrGAqGrrqrqxHxqHwrxqrNrxxrxrxqxrxqxrxxrxrxqqxqNqHqr™¾”½¾”¾c”¾¾”“d”c3“Ž“cŽ,33,Æï9:3ƒ :::2:3 @:@::9A@kA@@A::@kƒ@@AkA9AkqHqGqrqGrxqNqHxqxrxqxrNqxqxrxxqxrNrxrxwrGxqxqNrGrrqrGq™“”ƒ¾“Ž“ƒ¾c”“]c”cc“c”3Æï:9 93@@: 3:AkA@@:G:Aƒ@ek@:@:AA@kAkGkGqAqwGrqGxrq@rxqqrxrwHrqxqrxrNxqHxrwrwrMrxxqrxHqrwrwrGwr™”Ž”¾“ޓޓ¾c“c”Ž“¾¾”“c]¾332cÆï 3:@:3 ƒ:949 @9::qAj@:kA@A:@A@k„@ZAFkGqGrqGArqxqr@ArMrGqxrwHxrMrwrqxrwHxrxrxqrxGrwrwrHqHqrGq™”“”½””“¾”””Ž””””½”c3c]Æï@ G:@:9:@@A 3@:@:GqA@A9A@ƒ:ak@Gk:Ak@kGkGqGkGjqrNqHwA9rqrGrqxrwrxqHqxHwrxxqNqrNqrqxHqHqxqrwHqr™”¾¾”½””½”““”Ž“”¾ŽŽc3“”2-Æð39@A3ƒ: @A@k@:@:@Aƒqg@A:@@j@Ak@GkG3A@AqqAqAqGHqrqAkxGA@rwrGrGrwHqrGqrrwHqxrxqxrGxrwrwGrqNqrqG™·”¾”¾¾”·”޾¾”ޓޓ¾Ž“3cc]3cÇð @k A9@@k@G@kAk 9ArG:@ƒ:A:ƒ@BA@@:@k@GqHkGkqqGqxqrqrx@rMrqxqrqxqrwHqrqHqxGrxwrxrxGrrqxqrGqr™”“„¾“Ž“¾”½””¾”c“Žcc]]23232Çñy999 jAA3AAkAGqA3:q:@::@qA3@@:@::k9A@qAkGAkGGrrqAkxGqrwGqrxqHxGrGA@rxxHwrGqxrxHxqNrxqHqHqrGr™™“޾“¾“d“”¾c””“”½”Ž“ccc23,c-Çñ 3 A9A@9A9::kGk@@:AA:@:qG9ƒ:@9A@A@qAqGk@@krqHqxAGqGGƒr(GGrwrqGrqGqqrwrqrxqNqrwrwqHqrwrMqGq™¾”“¾„”“¾”½””·Ž“޾“¾]cc,cc32Çñr 3 kA9:@@AF3 @:G:@jA3@kG4@@A:3@A@A@kGkG@@AqxqHqrqAkrqxxqrGrGqrwrrHqGrGxrNrqxrrNqHqqGGkrqAq™¾“¾Ž½”½Ž“Ž“””·”“Ž”½”ƒc-c-2c]2ÇðP9: A99: 9 2@@:A9kGqG@ :q::@k@qA3:@dAGkG@kAqGrqrwHwxrGxqHxqrwqrNrwrwrrxrwrqxrwHƒq*GkGqrGqHqGÔ¾””¾”½c”¾¾””“ŽcŽc]3c]]9-Çñy ::9:::3 :@:@:q qAk::@@A@:9A@Aq@ @3@AkA@AqAqGrGrwrrwrGrqrxqrHqqxHqHqGxrxHxqNqqHqHqGrqrGqGrq™c”½”½¾c]”“¾cc”·”“cŽccc],9]2Èñ3:9@:9 9@A:AkGƒ:$GAG:9r:@@ @AqGq3AG::Fk@AkGAqqGrrwHxqƒxBMrNqxrxqrxwrqGqxqxqqHqqGkGrqHqrqrqr™c”¾”Ž“¾”¾¾”””cŽcŽ3\93c2Èò::@ ƒ:s9:@@kGk 9:9:k@9GqG3:k@q4 94q@@A@:@jqGqqxGrxrqHqrrxrwrGrGxqHxrxGrqHqHqGkrqrqrqrMrGq™””“¾“”Ž“¾“ޓޓŽcjc38]c]\33ÈókA @:@AA@:A@3GA:@ƒ:aq;@q: : @@A@ :AqqA@:AqGkGrxqxrxxqGxqxrwrwrGrxqxrqxGqrqGrqHwHwHwGqAqGÃ“Ž¾”Ž”½”¾d“Ž“ccŽc”c2]c]cËóx qApA:@kk@k9:9A93A@:@@AqGq:9:Ak:@@:qGkq:@qAGkxqHqNqxrxrxGrHqHqxqrxGqHqqGAGrqrwrqrqrqrGqG“”¾“Ž“¾Žc“Žc”Ž”””c]3cc3c32Éóx kAAjGkGAAG3@:k@ ::A@kHq:A9::@@rqAGqAA3AGqrqqrxrMrGqrqxqxrxHqGrqqHqrxqrxHxrMqGGqAqkG““ޓޓޔ”””“Žccc]“]c23Éóa:FkG@kGj: 943:: AkqG:9:G:9:GqA3 3 :A:qr@qA@:kHwHxqNrxqrwHqHxrwGrwrqGrGrwrxqxqrwHkGkGkGr“””½””¾”“ƒ”“Ž“Žc”„cŽ]Ž2c-2Éó :3AqAA@q @@G39:9 @A: ƒ:\ qrGAq33 @@qAAq@qGrqrGxqrqxGrqxqxGrrqHqGrxqrrMrrMrGqGqAqrGrG™½Ž”½”””½”½Ž””“c”cc]c]“c32Êôv3AG9A@9:@39AkGq::@k@@99:@AqGr:GA33 :r@@kAqqGxqrqHwrrwrNrqrqxGxqxrwrNqxrwrqGqGkGqrGrqq™”“¾]c¾“Žc]c”½Ž””cŽccc”3c3,Êõc33 qkGA @Ak@qAG 9:AkA::@A@:@@qqA3 3@qAkG@qHrqxGrqHqGxrqxGxHqqrrqNrqrxqHqHqrqAqrrqrqHq™¾”“”¾”¾½”¾”ƒdc”cdc]c22c]2Êõu @3GAq@jA:@AAq:k:G9:9@:r@@:@kAqGq:@:qG@krqrqHqxrGqxrqHqrxqqHqGxrqxrMqrqHqGqxrrMrNqxqA™“¸”½Ž½”””dc“Žcdcc”Ž32c]Êö k9A@:@kGqA@@A9q:A9:@Aqqr:@:G„:QGAkA@rGxqGqGrrqHwrGq@rGrxrwxHqxrxHqqrqrNrqrqxqG Ù”“¾””””¾cd“Ž“”ccc]c]]iÊø9 „:lGkGk@:@:Gq:AA@qHq@@q93::FAkFqrx@rqHArxqx@xrwrGqrxqxrHwrxqxqxxrMrxqxGxrGrqr™¾¾”c]”“ŽcŽ“”cŽ“Žccc]”c”]“3Êø\:3@:GkGjG::A9qH9@k@A@:@;@@3 GGkAGqrxGrw@rwrwrHwA@AqGrxrMrwrxqHxrNqrwr@:@::GrqG @™”½Žcc¾”ƒc]”“Ž“3]“Žc3”½Ž“cËøq @:9A:Gk@@qGq:@:qA@k @Aj::AAqqGkqrGrxAArqGrrwrrqxrqxrwrxrqxHxqrwrxrGr@::Gqrwrr:AÔ¾“¾”¾“¾c””c“”Ž2c”c]c¾3ccŽËøƒn::@@AkGkAqrGq;9Gqr9Ak::GqA@qAqqHwrw:qwrqxAGrGwrrxGrxHxqGrwrxrwrxGrqG@rqrGrGrMqAÓ¾”“¾¾3c]”¾]””9]cc3”2”Ëøƒf@:@:qAFkGqqH:r::Aq@A@qq@@qqHqrGqHqrHqHwrqqrxGxrxqrwrGqHrwrNrGrxqxqrGqGrwrqrqqŸ¾“¸”¾“]cc“Ž“”””c”Ž2cŽƒc“”,,Ëø„;@:A@::AqH::@:A@@AAq@qAr@;GrqGqGrqxGqrwrGxxGrxqxrNqrMrxqxrxƒq-GGArGrqxrqNqHqr™¾”¾¾“Žc¾c”¾”¾c]“¾”ccd”cÍø…k9AjG@:9::@:@kFkAj@AkGA3@qqAGAqrxrqrxG:rxqrxqxHxqGqrxrqHxqGqHqqk:wrwrNqxrGq 9 Ô¾“¾“cŽ“”cc””cŽcc]3cÌø…7:GkA@:A@@:@A@:@A@kFA@@q:AAqkqGqqHxqGrGqxHxqNrqqHqrxqxrq„A0qGrNqxHrwrrGqq™™Aß¾¾””¾c]c”Žcdcޓޓޔ]cdcc,2Ìø„L 9k@@:@jA@AjA:@kA@@kq:AAq@AAGqrGqGqrxqq@@rwrqrGrwrMrxHFA@q@q:rqrxrwrHqGqGikAƒ™¾“¾“””c”””d9Ž“¾2„c,3Ìø„k3:@Gq3 Ak@::9:@:G@AqG:jGkAq@kGqAqArwHrGkGA:rMrqrGrrwAjAqAq9rGxqNqrGxGkGkqAqGk™™”“¾”””“”c]“”ccc3]c23,Íø„ :GkGqA9@A@3:9@@k@:Aq:AqGq@ƒ:LGqAAG9:q@:AjA::@GqAFA@A@A9qGrqxrqrxqGkAqG]GqGkG““¾Ž”¾””3c¸“”c]¾”c]3c]233Îø„ qAqqG3Aq :@AƒqWAG:9@:@:@@@A:@: k ccc2cŽ:9AjA:qrGrGrGrMr@AqAqAqrGrq™™¾“¾¾c””]c”]c]3c¾“,c]23232Îø„ 9::GAk 3qGk3A@AAqA::A:@ƒ: @:4@:93c“Žj„c,cc]c2““9:@qqGrq@A@A@@3qxqGrqHÙ¾¾cc”c”ccƒc “c323,3c]c2Ïø…V::@@AqGr@A99AqkGAjAqGj::AGk:9@:9A@Žc”ŽcŽcc]38i’o@A@AkG@A@@j™kqGkGrqGq“™”c”c]3„cŽƒ3c,33c]22ÐøƒT:9::9:@::9Ak@4rGqAjAFqrGqGqA:FA:qGkGŽccdcc“cc]c]32ic““™::3kri:GkGqAqGkA™c¾””„c]c]]9]2c]23cc]83Ñø„$A: :@::qGG3:qrqGA@kGkGkGqq@AjGAqAqƒc33b]c]„c 2cb™i’i:9A3ƒ:'rG3 @kGqAqA™”“”¾cccc]c]2c2]9]323\93]Ñøƒ( 9A@93::@9Hqk:qGqA@A@qGqAqGqrqAqqAqG3 ,ƒc<32cd]cc]3i™™“h::@@::@@ 3GAkGAqGk™“޾ccd]cc2332]c3c22]c]3\Òø6 3kA@A99::qr: AqGqqkqAkGrqrGkHqAGkGkGk39]c3]]“@Aj]ƒ2Ù.@3:: @:@9kGqAq:@@““Ž“”Žcc]]c2]cc]c]2]c]cc3Ñø  ,:qA@@: @Gƒ@Zq@AqAAGqGqqHqGqHqqAqGqGqG]cc]c3A@A@33i™Ã9A:A@:@::3@@:@kG:@A™Ž“Ž“Žcc]2c33]9]c3b3c””c3Òø3ƒ:) @::99A:q;@Aq:qrqGkAqHqAkAj:GqAqAqAq:3c]ƒc”jrqA2]i’i:@q:A@A@qƒA#@::@@:@“iŽ“Ž2]92c3\3cc]c]3c”c]Òø( 9A9:@::Gqr@@AqA:GrGA@rqqG@@AA: qqGqrGƒ>3\c23HqGq3]hi,”3@@qkGqGjA@kGqrqi”Ž“Žc]923]c]cc]c]c3“”Ži3Óø:@@Gqƒ: 39rGkAkGqƒ@:@rGrkqGk@:qGqBqA„;@@3,33]:Gk2i“22™2@:qGAqAqA@qqA@ic“”½”“,23Žccc]ccc3c”ƒÓø':@A3::94@@AqAk:GqAq;:qr@@AGk: 9AqGkGqƒ?q]3]3223]cqG3i2™ib3:@qq:qGqrGrGk““޽ޔ]33“”“cc]c3Žic”c”ŽiÓø :3 9AGA:: ƒ@ZA9rqqG@@rqrqA@rq@@3GkGqAqccG@32]23,d],ic“i“iAqA@rqrAqqAq““Ž”“”2]c]c]c]“Žicddcd“Ôø3:Gkƒ@O@k:A9rGrk rGxqqAqH9rkGkGkG]dqkqc3A:2d“32ih“h“bAkGrGqGqAGq@“””½Žc]c]cc]ƒc 3]32ŽccƒcÔøƒe @@kA@kA::@9HqA@ 9qqHqHqGkGqrAqGkG]cAqAA2:@kG32cd232]™“™cqGrqrGqqAAqi“Ž”c”cc]c”]c]3c23c“]c]Ôøƒ_3:3@:AkFkG:93qGqq :GqqrqrqGqGqrqAAkAqAqq3c:@Aq@Ac,ccŽ9::@@3GqrGrrGk9iic¾”½”cc”cc]2ccŽ„c2Õøƒ' @ ::9@AAq::GrqG-9rrGGqGrqAqHqHqk 9Aq„8::GkA9:c3A@k@qGkG9rGqrwGq:™¾”¾¾”Žcc”Ž“”]c3]Ž“ccc-Öøƒb :9:@A333:94qHqq :GrqrGrqxGqrqrqG: :kGA :22:@AA3@:AkGqGkGq:rGqG3i“qA™“¸“”¾c2”¾“]j]c\3c”dc3×øƒb :@:A@G@k:: 9HqrG:@r@@AqxHqrGrGxrqq:: 9: 9qG:qq:3::qqGqrGqAciqA:Gqc™q™¾”“¾¾c”””]cŽcc3ccc3×øƒ @AqqkGAG@„:@:rGkƒ:qrqHqqrqHwHq:9@:@qGkqƒ:3@ rwrNrqHkAqqG“iq9kG2iirq”¾c””c]ccc9ccc3]Žc]2×øƒ3@kGAqqAq@A@:@9qqGƒ@;xGxAqGrqqrqHGAqG: kGrGq::rGrqqxqGqHqr8“i9q3cqGAq”¾“¾“”23ƒc]ƒc cc33c32×ø@: 3ƒ@LGkGqk@:A@ArGr::@Ak@qAqGrGGqqAkGk@kGqrHqGk@:wrHqGqqGrqqic9GqGqr@A“Ž””޽]3ƒc ]]cc]c323Øø…S3@A9;qGkGqGq:A@::@@r::@:@@rqGrqHqGqAA: qrGqqHqGkGAqwrrGrAqrGq2cc:@rqrAÔ“޽Žd“3c]„c ]ccŽcc,×ø… AjGq :qGqlGqqA@:@@qqH„:2AG:qrqGkApA@2AqGrG:9::AqGrGqqqA@qiichiqAr™˜“”¾¾”‡c ccc]cd233Øø…-3@::kG@:qGqqGkGjA9 rq@:@@:@@q:@::9: 3 3 3:@A„@.AqrqHq4@qG3h“cc™™“™i“¾”¾ccŽ2]cc]ŽcŽcŽcj2c2Øø†B@k:@;:GkGkAG@A@ ::9@:: qGq @@A@:@:A@9A:93 kq:@rGr@:@AAqicbibÙ“””“”3c3c]cŽic3c]]]Øø‡@: qAq@A:GqAqqkAk@ ƒ: qqH:qA@k::ƒ@6kA@@@@AG::q@@::b@kGh“ib9bc™Ã™™”½”·”,cc]cŽ””c33cÚø‡L 93A::Ak994@AqAGkG:@9A@9A@AkGqA@@qkG:@:Aqk@@j::@A@:@”AqA2i“8chc,Ù“޾”3]ƒc]d“…c]c]2Úøˆ" 3G3 @@:A@@A:9@AjA9 k@4GkA9kG:GkG„:q@A@A:Gk:@3 :GrG2ƒ“i“82c2™¸“¾”“]c]ccŽƒc3c2cÛøˆ" 2 :@:@A@A9:3@A@A@@A@:qGkG3Gq q:ƒ@-:qr9:A39A:: @:@@k2o’ibcihcÃ8””¾¾cc]cccc3cƒ]c]3Üøˆ:@A@@qG-Gk@A9AA…:qG:qGqGq:GqAqA@kG„:@A…@'39A:Aj33i““bc“iiÃ“Ž“”2c]c]c]c]cc33\3Üøˆ3@qkAqGqqAjA@k@@k@AqAAqqArƒ:9q:@qA@@A@:9@@:@:A@:3: 232]c“™2ih“™“8¾“Ž33c]c]9]2]3bcÝø‰U: AqAqGAqA@AqqGAq@qA::q@:GqG:@AqA:qq@A: qqA@::9 93:22-2i“hcib™“Ž”“Ž]c]232]239\3]Þø‰T:@9:Akq3GkGj@GqqGkAAjkAGkGqAqAqGk:GAAjGrGr@kA@:@:9-2 c“™bbc“ib””“]92]9]323]23]ßø‰R 3:@:A@@ qAA:qAqG3:9:qGqrAqq::A@qqAAq:qq:@@::q 33c3icc“™“ibi’i”¾c]232]2c32áø‰:: ::@@A::k9„:@AA@49GkG:qAAGqGkGƒqGqH9:::G3Aq @22c3cƒ™h9@“™””“”323233\ãøŠM9:9A:@:kA@:@::AjA3 @rGqA:@qqAq:qAGkrGkqqrq9k@Gk A833c™Ã™“™™3“”””3]3]2åø‹:34Gk::Gk ::@::GqA3Gq:qAqqAA@qGkGrqrGqqHqHqH:@A@q q\8]2,cƒ“ ™“’i“¾Ž]“3éø‹G 9 qAqGkG::9A@:@AqGk::G@:qAj:HqAqGAGqHqGqqG:@:qqAqq:9b33™™c”“i“Ž”½9êøŒF3 qAGjG:9:@A@@kGkG:@:qqH:qA@qqGrqqArqGrGkGq@kGkGqHq:98,“™™Ã“h““”Ž“cêø93G9:Aq@A@Ak9AA@kGqGqGqqAG::GrqGAqGqrqAqGkrAqGr qGk2i23]ƒ™ Ù™cŽ“”,Ž“èøH :93Gk@:@AAk@@k@::GrAqAk@qqGqrqAqGAqAqr@GkGkGqqAqA kb233™™Ã™“™”””c]cçø9@ qA@:qqG::@AqA@:qGqGA@rGrGqGrAqGkGqGr9GqAqAqGkqGGAi2h™Ãƒ™””3“êøŽD A:9::@qAqA:@kGqqGqAk@q@qqAqAqAqqrGkGkGr:GqAqGqA@kAqb23cÙÃi“Ž“¾c2êøC@AA9::q:@qAjGqq:GkAq@ q;GqAqAqqHqGqqGqAqrAA:qrGq:9:@c82™Ã™™“””Ž2]êøD3:9:@GG::A9qA:Gk::A:@qGkAAqAAGqqrAAkAGkGqq@qGrAAG:@A2c™™Ã™™c”“Ž2d3éø‘ 9Ak::9GkGƒ:4GA@@Aq:GkGk@A@qkGAGkqGqqAqAqGrqGqqk 9A2,™™Ã™””¾Ž“3cêø’3AA@ :kG:@9Ak@k9A:qAqGk@Aƒ:qqGrqHq9GqGk AqAG @A9:ƒ™““¾“Ž2êø’(AjAj@:AA99Aq:q ::@@A@kqGqGqGqGqAA@:qGƒqAk::j39™b3™ÃÓ””¾”c3cêø”>GAjA9Aj@A:AqGkGqqAk@AqGqqArqAA@k@q:rqAGrG@:: 93™™\8“o“”½Ž\3êø”=q@A@:A@9A9:qGq:AqAqGrqGqA@::@:qGA@4A:qAq]23]c™™“™Ã™“”¾“”cëø•13:kA@:93::9:3G kGkGqHqrAkGqrGkGqG@A9:q2Žicc22„™Ô½”¾cëø–;k:@@:9A:::3 @-GqAqAqqGqGqqGkGrk:AjAAqc]c3]““™“™Ã™”¾”cëø–'A@Aq:k:94@3:@:@k@AkGAqrAqGkGrqGqGkAqq„cc”c““8c™Ã“”]c33ëø—39:@A@Aƒ@:@:A2 9qAFkAA:9qHqAqGrqq:ƒGc]ŽŽci“™b™™¾“]c2]ëø˜"3GkAqA@:q:939Aq:3Gk? G:kAq@rGq: ƒ:”i”3”3™“™b]cŽ3“éø™/ kG3AkAAqA::@AA@A@@qAqA@GkA@A@r:@3c”3]c2“8ƒc323„”éøš3:GpAqAqqAk@AkG3ƒ:9:99A2 c33c]c]9cc]Ž3]]2]3ïø›,:@AkG3@:@AqGkF9:: :9:: cc]cc2c]]c32c]c“”ƒcòø#:3:9:qA994AAp3@3cc3ccd“Ž““Žc…Ž“cóøž":@AAk:A9 @:@:qA943cc]]2Ž32cŽ“”c„2Ž“dôø @q@Gk: 94:G:@ 2c3]c332]3„އ”ôø¡ AkG99399A33„c33232,3Ž,côø£3 cc]3c3,]cc]223,3c”ôø§ƒc]ƒc]32]22øŽø¨ 3\3c3cc32323øø¨ ]3]2]]23233ø‘ø©2232323,ø“ø¬23ø–øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ–yɳ·2·} /·‰FkË·‰Fk-ýôÉýô2ô /G:ËG:-H:ÉH:2K: / KFH3Ë KFH3- “yÉ “y,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÚ2]àøÚcc]ßøÚ]3c]c2ÛøÚ 2cc2c]23\3]ÕøÛ 2]c]c3]9cc2Ôøº“Ž„c™ƒc ]c,3b]c]cÔøº ”cc2c3]2ƒ 2cc3\‹]cc]9c3]c223c2]Ðø½iŽccd””Žc]cŽc2Š]3c]]2323c]cc2Ïø¹8bcbiccdc“””c”2Žid”]cc†2„c2ccc]c]cc33232c]ccÇø½2“cŽ“]c”232cŽ“c]c‡,2]3]c]c]c]3c]]c]3cccÆøº::@:i“i„ccdc””]c2”cˆ ]c]32332…c ]cc]c]93Çø¶::: ƒ9iccd3ccŽ“ŽŽc-]3‰2c3cc]c3c3cc223\Èø»@A:bc33\cccccc”cc]‰3]†c2]23]c2]3c]cÈø¿ 3@@ 22cd3d„cŽcc”“]c‹2]]c]3c23]23ÍøÁ :@]8c3cd“c,”“¸”“Š2]cc]3223]c]cÎøÃ3 “3c]323ŽdccŽ“Ž]“…32]9\]3ƒ2ÐøÄ 9b8ccd2”“,2c3”ƒŽ“„cc3\93ƒ3c2ÏøÄAqiib3,cŽ2Ž”cŽ]9d“އ 3]cc]3\2,ÑøÅ@::c8cŽ„c Ž“]9c“†]c]2]9ccÔøµ: 3 bicccc„cccŽcŽ“…2]2cc×ø²3 9ƒ 3 9:‰9:bƒc]dc]dcciŽc]„cØø±9::9 :9::@: @: 9„ :@icdccƒc dd“-“Ž“ƒc]9c]Øø° :: :9 :@99ƒ:@3 :@@:@::iiccc]…c 3c]“Ž”Žc2]]3Øø° †:9 : :9:@A:3 9 :3 9@cccƒcŽc3ƒc 3“”½Ž”]cÙø± 9:::9:9ƒ:9 ::@:A9@A9@@idcކc ]ccc]”““Úøµ!3: 3 99: ::9:@3A@:A“ccc]]ƒc dcc3cŽ”ŽcÚøµ 9::9:: 9:3ƒ@;@rq::@@“cdccdcc]cc]cc]“¾“cÙø·:9„ :9:@;@:@@A:q@:“cccƒc ]c]3c]cŽcØø¾3 9 9:@@:9A:GA@“ddcŽcc]ƒc]3ƒc3c]2×øÀƒ:::@Aƒ@ k@A“cccŽƒc]3cc3ƒc]c]3ÖøÀ 999A@:k@A@@jA“ccŽcc…c]c2,c]„c2cÕøÁ&:@;9 :A:@4A@A’dcic“iicbc]3c3,32c]]cÕøÀ) @@:9@:@k@@jAA@™i“hibibcch]32cc333“Žc]ÓøÁ3:3::9@:@3:AjAk“’i“i“hchcb9\]ƒcc3cc]ÔøÀ'3:@9A43@:A@@AFA““h“h“c“ibc8]3]d2,c]ƒcÒøÀ)3:9 :9:3@:@@kAji“i“iihi’iib9\9ccŽcc]cc]ÓøÀ: ::@:@A: @k::9AF“™’ƒ“bibcib9]]3”„cÒø¿ 9Ak9 @A3:9 3 @@A:A’i“ihi“i“bibƒc \c3c3cc,Ñø¾, 3 93: 99:@3@ 3:9@AA“h™““hih“cibcc3ccc]c3,Òø¾-3:3A:93: ::A@ 3 @jA™““h“i“ch“bicc3cc]3cccÑø¾%49@3::43@::@:@Ak@A@“i™i’i’iib9cc]ƒc]c]33Ñø½/ @:9 94@A:9@@:@A:qA@kG“’™““ii’cih]cc]]cc]c]ccÐø½(3A@:9:A@A9 949:AjA@qA@kFA“i’““ibciiccc‡c,Ïø¼0 9@A@:9:9:A99 :@qA@Ak@@AkF“o“h“ihc’]c]c]]cc]]2Ðø»9 39:A::3:9AA:33Gqk@AA@k™ƒ“h“i“ibiƒc dcc3]c2c]cÏø»$@::33@@A93::9 9qHqGkFkAA˜“oki’i’iƒc ]c3cd2ccÎøº& A@@A: 949::3@:A94GqGqrA@@q“™“’A“ii“h…c ]cccŽc]Íø¹,93A39@:93:9:99 39:@AqGqAqAGA“™™i’“’ichc]„c]3cccÍø¸ :@ 9:A@::@: 93:3ƒ:A@rqrqGk@qA˜“™“i“hiƒc ]ccŽ3c232]3Íø· A@A:9:@3::ƒ@::9::@A3@rGrqrAq™AG“˜i““hcc]„c c,32]cÌø¶@Aj@@3A: ::@@:A:@9 9:ƒ9": @AqHqGq“™“™““o““hcd]cc]3Ž232Ìø¶39 3:Aƒ@(:9A@3@:@::9:3:@:ApqrGqG“˜“™’“h“idccŽƒc2]c3c]]Ëø³2:@@:@:9:@A@:@:3::A@A@:94@@9::@AqGqqA™“™“o“i“iccŽƒc ]cc]c2cËø„˜ @::@@:A@„:7 9:Aj@::jA:@: 94@:9A@:qAAqAq“o“’™“h“Žcc]dcc32c3]ccÊøƒ : ‹ ‡@@:@A93:ƒ@A:@@::@:9:3:@A@:: 33:ƒ@(3:A@AkA@qqAA@A™’™“i™“cdcd9c3]c,93Êø 3 Š :@@ :@@:@A@Aƒ::Š:@@A:A@A3:@A@:@::33 A9:3kAƒ:@jA@j@HqAk:q“™“™““d“ccƒc Žc3cc]]2Êø 9 3: :…ƒ:@:ƒ@ :A@:A399:9 9‡:@@A@@A3:9:@A@@ƒ:@:@9A@A:94@@9: ƒ: 9:AjGqG@AGƒ“iddc]dcc]cc,9c3Êø 3 3939…, :9:9@349:A@:@:@A::9@ ::@@::@@A:@;@::@A:@@3Aƒ@7A@:49@A3@:@94:@9A@:9:AAk@kAjG““Ž”iŽcdccc3c2cc3cÉø) 9 3::  :@ ::3:@:@@k@::@:@: :9:@@A :ƒ@ :9:@@:@@3ƒ:'@A@k::9@:39:@@::9@4@A@: :9AAG@Aq““Ž“Žƒ”ccŽcŽcc23]c3c3É÷ 99: :9:39@@:399:@@ ::A@A:@A:@ƒ: :@ƒ:&@:A::@:3@A@::@:9:@d @@::@A: :@A:99;@ 9„:9A@9@kAjGA™“Ž“”c”cccƒc -332ccÈ÷ 33:9: 9 A: ::@;ƒ@ƒ: jA@:9::9 3„:N9:9::@@A@;3:9::@ :9::@A@@:@@:9:@@A3@@::9@94@k@A@kA@q“”””d“ddccc3cc]cÈ÷ 3:9: 3@A3939ƒ:9@:3@@::@@::@@::39:@@::@@:A@3@@::@@:9:9;@:@AdA@;@3@A@::Aƒ@':4@4@AAk@ApAq™”“Ž””c“3Ž“3c2]3]3Èõ2 9 ::3: 3 A@9:9:@ 3:A@::@A9A@:9 :@:: 9:A@@::Aƒ@ :39 9@A@ƒ:„@3:3@k@: @k4:9:@99G@k@AAk™“¾”“Ž“Žc”ŽcŽ“c333]383,2Çö 39 33:3::„: @::@k99:AjA@:@:@ƒ:"@ ::@@4@::@k3@A::@@::9:@:9@;j::@A3ƒ:99:kƒ:#:kGA@jGq™Ž“¾d“”cccŽcc3c2323Çõ 2 :3 9 @:9:@3@@9„:@:@A@A@kA::3 ::9::@:„@A::@9ƒ:?@4:: @@;@A@@3:@:@@9A@:94@A@::kF:@k@AqG™Ž“”“ޓޔc”c”cc\32c,Çô 3 3 3 : :9::9„:@„:@ƒ: @@::@A9: „:N9:@Aj43@@:@; 9::@@3A9:@@A@:@:@A::@3:9@:@:9:A@:AqAAq“”ޔޓcŽ“c],dc]3dcÇô: ::333:3@:4::@@::@::@ƒ:,@:@:@k@::3::9:@:A9@A:@A:@A9:@A9:@:@Aj;@:@Aƒ@"::9 @::@@:9Ak9@AjAq™““c””Žd“dƒcc32ŽÇó8 3 3:3:: 3 :: 9:@A:@:@::@@A@:A9:@:9::3:9:9:@A@:@949:ƒ@„: A@:@:@:@4ƒ:0@;@@::@4@rrqrrqxGrqGqG™™””ޓޓc“Ž”c]]cŽ23c3c3Æó :@: 9 39 99:9„:99::G@9@A@k@:@:@::@ :9:9 :@A„:@9:9ƒ:3@::@@A:A@::9@:9@AjrxrxqrwrxHwHqrqHqAqk™¾”“ޓޓcŽƒc 3cc2c]cc“cÅñ 39349@3 9 :@@: ƒ:9„:&@A@::@A@ :@3@@A3@:@jA@::3@:@A@:@:jAƒ:@@„r#qxrxGrxGrNqxrqxGqqrGqG™”“¾”””””ƒc 33cc2”3Åñ2 : 3:9:3 @3: 9ƒ:@ 9::@@:@A:@k@A:@:@::9:@39ƒ:J@A@@A:@;@A@@:@@A:9@rxrrwHwrxrMrxqxrwrrwrxrqrNqqrAq“””“d“Ž”ccŽ“3]c-2-Æñ, 33:::A9 9:9A@3@::@@A:@::@A@jA@:@@9:33†: @:@Aj@A9@kƒ:?k@::9rxqxwrxqrMrxrwrGxrxGrqNqxNqrqGqr™™Ž“¸”””c”cd]9c]83“2Åð 33 ::3@3:@@3 3 ::@:9ƒ: @:A@::@@k@A@†::@::9@@„:G@AjA:@@A@xrxrxrwHrxxrxrqxqxHxrqNqxqxrxqrxGrrGqA™””“Ž“”]cc]cc3]32Ž3Æð3 9: :@ @3: 9::@ …:39:A@A@jA@k@ : 9:@:@ƒ:@9ƒ:F3:@A@3qrxxrwrNrxxqxNqNqHqxqxxqrrqHqxHxqrxqGrqq™¾“”¾”cŽccŽc]c,ccÆð 3 39:3::@: 33ƒ:@A9:9A ::@k@k@Aƒ@:39ƒ:R@A@:::@::@3:rxrGqrwxrxqqGqxrxrxqrxGrqxxGxqxHqqrMrxrwGrr™”¾”””c“Ž“”ccŽcc]c]cŽ2cÅða 23 @::9:9 33:9A9: ::@:@::@A@A:@kAk@: :@@:@A@@:@A@9::AwrwrqHqxrNqxxrGrxqxxrwrxrxHxrxGrwrxrqrMƒrwHÓ”½””””cŽƒc]9c3c3cÅïƒ :3:: 9: 94 ::@ 9::9::@@:@:jA@@A@@A@3@ @A@A@:39:@:xrxGArxrƒx>rwrrGxrxqGxrxNrxGqGrwrxrwrHwrNqrqMrqx™”·””¾“ޓޓŽcc]2cŽ2c3Åñ23:99 2: ::ƒ9m:@::9:9A33:@:A@:3AjAjA :9::j:@:@:A@rxrwqrwHwrxGxrwrxrwrxrxrwrxxrqrwrxqxrwrqrwrMrrGrGÙ”½Ž“Ž“ŽŽ“”ccŽ“”Ž2c]32cÅð3 : 3: :@ 9 3::ƒ:<@ 99@@:@:@@:@@94@A@2::@A@A@:rxqAxqHxrxqGrqxrxHwrxrNqxGxrxqƒx GrxGrxrNrMrrxqHqxqq™Ã””½”¾“””ƒc ””c]23cÅð 2 93:9: : 9: 9:@@„: 9;:@:@::@„:@:@k 9:ƒ@QAdqrwrGqrGrwrGxrxrGxqxrwHxqxrxrwxxrNrxqxqrMrwrrwHqrwrGrGÙ½Ž”“”””””d ”,c3c],Åð3 9 :9: 3@3:9::@9::@Aƒ:@::ƒ@3::@:A9…:rwHAxrqrwAqrxrxqxqxrxrxrƒx5rxqxHrxqxrxxrxGrxqrxqrxGrwrqr™™”¾¾Ž”””2Ž2cc]]2Æï 3 39::93 @49 :@:3A:::@Aƒ@bA@:A:A@::@@:9@@xrwrqqrMrHrxxGrwrxHxxrxwHxwrxrMrxwrxxrwrxNrxqrNqxHwrxqHqGqr™½”¾””“Ž”j”]“”c3cc3Åð!3 3 3@::9:33:@ :@3@A993@AjA@:ƒ@::@ƒ:RGrqxrNqHqxqwrwrxqNrxwrxqNrxrxrxxrxrxrMrxxHwrxrxqrqxqxrGxrqHqG™Ž“”½”“ޓޓޓ3“Žc]ƒcÄî9: 39:::@:: 94:@@949ƒ: @:A@AjA@kAƒ@Z:@GkrHwr rwGrrGrxrxrqxrxqxxrxxwrxqxxqxHwrxqxrxrwxrxxGrxGxqrxGxrx™™¾””ޓޓŽcŽc”3ccc32ŽcÃð 3 : 94@ @@3A9:: 93@@::ƒ@-k@A@k@@kA:qqGrqxrwrqrxxrqGxxqNrwrNrGxrwrxxrNrƒx3rxxrNrxwrxrwHxrqrrqNqxqrqqÃÃc¾“¾“¾¾c“cd“cŽ3ccŽ“Äð 9 3: 3@4:: ƒ@h: 3@;@@:@;@@Aj@@A@AjGrGqGrGrGxAGrwrGrqxxrwrxqxrqxrxrNwrxqxrxqxrwrxrxHxxrwxxGxrqrGxrNq™”¾”¾”c””d”cd]ƒc“ŽcÃï 3:9 q::q:9:9: @A: 3…:h@::@::@4::@AqqAqrqGqxrqGkxrxxqNrqxGrxrxxGrMrwrrwrxNxrxxrxqNrwxqxxrxrqHwHqrqxqrŸ¾”½””¾“Ž“”“Ž“]“c2]”3ccÃïy 9: @:GAq:A933:9::@:9:9:@@::@@A:@@kGqGqAqrGrwqqAwrGrqxrxrxGqNqxrxqAqxxrxrwrxrMxrxrwrrxrwHxxqxqrxGrGxq™¾”¾“޽””ޓޓŽ3cŽ3“,c32Äï@A:3 9q@:@kG3@9:9@:@Š:@AqkGkGkGrGrqG:HqrƒxKqNrwHxqrGqrqGxrGAxrwNxrxwxrxxqxrNqxHqxrwHrxGrqxqrr™“”¾“¾Ž“””3“dc3c]3Äïƒ::99 :@A @:@::3„:i@:9::@:9:AqAGqAqGkGqqrr:qGxrGxrxqrwrxqrG:xrxxrqAxrxrqHrxxrxNrwrxqxrqHxrwrxxGrGrGÉÔ”¾”¾Ž“”¾i]]c”cc]2Åïy9:39:: :@4939A@A@93@:@::@:99::@:@@kGkGrqGqrGqNqGqrxrxqxGrrNqGxrxqxrwrwAGqrwxxqrwrxqxxrMrxGxqxqxrqxqrqGq™Ã”¾“”½”“Ž”3]“c3ccƒc3Åð : @:A::@:A@@A:@:3@:9ƒ:,99: AkGkGqGrqAqHqrrqGrwrxHxr@@9rxrwrxrNrxxrƒx5rxrNxrMrxxrxrxxrqrxHxrNrqNqrq™Ã”¾”·”ޓޓ3cŽc”cŽc]c]ÅïA:3:@@@:@ 3@3A:@:Aq :@:9::@:AqGjGAkGqAqHqqGqGqAqxHw:qqxrAxrxrNƒq=xrwrxqxHwrxqxrxrxxqxrwHxGrqxqxqxqHqHÔ½”¾”“Ž“c“Ž“Ž2,cc32cÄï@@ 3A:@A@:@:@ @k@kGq::@:@::@:GkGAkGjrGqAqGkGrqHqAxrx:xHxqG@rwrƒx0GrxrxxHxxrxrxxrGxqxHxxrwrwrwHxqHrGqqGÔ”½””“”””ƒc ””3c]3]cÄïy 3 @33@::A@A9:@:GA@::9 ::@:@@A@j@AjGqAqGrqHqqGrxqrwr@xrxrqxrwrHrxxqNqxxqxqxwrxxqxrxqxqNrxrGrqrGxqrqHq™¾“”·”¸”“޽ŽcŽc”¾„c2Æï :AGA:@:k@@k@ :@:@ƒ: A9 ::9AqkAA@qƒAY@qkGqqrGqqrqxHxxA@xGqrNrxqxwrxrxrxrxrxrNrwrxHxxrxrxqxrxqNqrqxGrqG™”¸“””“¾”””“Ž”c2c33,ÅïJ 93 33A:@@kAq:kA9::k@A9::9AqAGq@AAjGk@GrqGqGkGGrxqxqrwr@:GrwrxHqxxrwxrwrƒx3rxxrxrwrwHxqxrxGrqrqGxrqxqq™“”޽”¸“”“¾”cccŽ3]c32Åïy3kG j@:A@@qGAkA9@A@qA::@:GkAqk@k@Aq:kGqBqHqkqGrxHxGqGr@rwrxwrxrxxHxrNxqxHwrxwHxxrxqxrNrxqxGqHrwrHqHq™¸“¾”“”ŽŽ“ccc“cc]2]Åï39:9:A393AAk@qGA::@ƒ:2@@:@:qAqA@Aqk@@GqGqqrGGrGqrq9rrxrqqHqxrxGrwrxwrxqƒx3rxrxxqxrxrxqxqxGrxqqxrwrwGr™””]c”¸“”]9ŽcŽcŽ”cŽ2332Åð3:3G9„: F:@@AkF::9:@ƒ:Aƒ@aAq@AA@Ak@AkGkGr9kGrqxHr@xqxHqqxrNqxqNrqxxrxHrwxxqxrxrMxqNxrGrxqHqHwHrGrGq™·”“”“¾“Ž“cc”]c3322-Åðy9:: kG9A9@Ak 3@:@:9 G@qAkA@@kA@jAjGAqAqGqGkGqrGrwx@@rrwrHxrwrrxrxrHxwrxxrxrNxrwxqrxrxxqqrxqrwrqxqrq“”“Ž”½¾Žc”Žcc”\dcc]”“Åð 9G3 9 :@:„:!Gk:Gk:@:qG@kA@@k@:@AkGkGkGrqGkGrwƒrIqr@xHqxqxrMrxqxqxrxxqxrMrwrxHrxHwrwrHxGrMrrGxqHwH™Ž“”ޓޔ”cŽc”]c]2ŽÆñ:3::949 2:9:Gq@AqA:q@@:Aj@Aƒ@]:A@qA@qGqArGqArqHwxGGr@rwrrMrrwrNrxqxGrxrxrxrxxwrwrxGrxqqrqrGxqrxrqq™”“”¾””“”cccŽ“”3cc2Åñ:AjAƒ v3::@AAqAqAqGj:Gr@::G@dA@A::qAjAAkGq:qAqGxxrrxrGqrGxrwrNrxwrNqrwHwxrwxqrxrxrqxrGrMrwrqrxGrGxGÃŽ½¾]c“Ž“Žcdc””c]c23ŽÅñ39AGj@::9::GApGq99„:ƒq@ƒ:a@A:jA@@AGj@qAqAAqGqqG9ArqxAxqrwrHwrwrrwrxrrxrxxrxHwHwrNrxqqxrGrNqGrqrqqr™””“”“”ޓޓcc”¾c”cc]”“Åñ 9AqA@9@Aƒ@ kAkAA:::@Gƒ: @:@:@@AjAkq:ƒA8qAqAAqrGrqqAxqqGrMrxqrqrMrrxGxwrwHxqxrxrxqxqxHqGrxqrqqGqƒGq“Ž“¾cŽ“ŽcŽc””“c2cŽÅò @A@kAkA@kA9Aqƒ@kGqGƒ:S@::@q@:@kA@@A@@k@AqAqqGqqGrGr@AqGrqrxrMrxrwHxxrxHqrqxHxqxrxGxrwrqxrGxGrGrqrkGd”ŽƒcŽcc”c””Ž”,c2Åóy:3GA@qA@@kGAqA:AqGqA@3@:Gr:3@@:@kAqGkGkGqGqHqqGrqrG:rqrGxqxrGrwrwrqxrxxHqxrxxGrrGrxGrGqrqqGqrGqG™”“”“”cŽ“”cc””“cÆóq A3q@kGqAqA33::9A@k@@::@:qGA@4@::@@AjG@kGkGkGrGkqxqxq@xGrqxHwxrHqrGrGxqrxxqxGrwrwqGqrqrMqHqrrGrGq™¸“¸c””Ž“”Žc†c]d2cÆóy2@ @A@3@qAq :GA9:9AA:@G::G3:@@A@:9Ak@AqA@qqAkGqAGrHqrG@rqHqxrqqwHqxqrxxwrxGrqxrNqrxqHwrrqrGrGqqAk™””””c¾”¾cc޾cŽŽ,3c3Æô:33AqA3@A9::A9qAA9:@k@rqƒ:^9A:@@A9@A:AkGkAGkGkGqqGrGqrq:wqGqGrNqrqHwrGxrGrqrGqrqxrHqqHqNqGqqGqGkihÔ”½”c¾”½cc””92ŽÇõ# 3G349 @3GA99:AA@3:GqH:@:Aj@kqA3:ƒ@RqGkG@kAqArqq:Gxrx@rrGrqrrMrxrGrqHwrMrxqNqHwrGrwrGqqHqGkGA““c”“¾cc”cd”c””,]cd2Çö33 9::@3:9::qA@ ƒ:a9@:@A@AqGq ::A@kGk@@AqqGrHwrqxGrGrqGrGqrqGqqGqqrGrqxGrqrqxqGrGqGkGqAqA™“ŽŽ“ŽŽ“dd½cŽ“”]323Çøƒ39 :GAq@Aj@@:9:@:qGƒ:Gq@9k@kA@AAqAqHƒq!rAxqArwrGrqqGrGqGqGrGqrGqrqrGqHqHƒqƒAqqG;@“””“””“”””cŽccc32Ž3Èøƒ :AkGkGqG33::9ƒ:Gqq9 ::@:G:9A@q@kGƒq&HqHqqAxGqHqrFArqGrAk::qrGqqAqNqrqxqrrHƒqrGrkqq™”“޾½Ž¾””¾2c“¾”dc]223Èøt qAq@:AjGkG@49 @@ 9r 3A3A3:q:AqA@k@qArGrwrMrqrGrqxqrqGr@qrwrHqrqHqGAk@HqHqMqqGHqAqGGA™“cc”¾”cj½”]3””c,c33,Èø Ak@@A:qAqAƒ:AA@;@:3:9@qGqA@: ƒ@O::@@AqqxqHrrwrwrGqrGrqH@rqHqxqGqxGqrqHqxqrqrxGkqAqqAqq“cc¾cccŽ“ŽcŽcc23Éø9A@j:GA:@k9:9@ƒ3<:@:G:rGqqA :jA:qq::@AGqGqxqHrGrqGqAwrwrqGxqGrGAkqHqrwrGrGrGƒA@AGkGA@™Ž“Žc”Žcc”jƒcŽcc3,33,Éøq :jA:GjA9:@G9GrAF: @@:@qk 3:@@3@:@rGq::@kGkGqrwrwrqHrwrxGrqqGrGkqGrqrMrGqrqGAq@jAqqAq:@“™””“””“ޔޓޓ]3c2Ëøƒo@:@@kGk9AqA:qG3q3@:qH:9@9Aq: 3:qGqG:@AqAqArGrGxGqqHqrqHqHrqqGqAqGrqrqGGAq@AAqGkAkGqq™™½Ž”½Ž“”“Ž”3c]cc32Êø$ @A:@AAG:@AqGq4@:@A::Gqq:: qGq@ ƒ:>AAkG:AqGqGqrrqxqrGxrwGqGqGrqrHqGqGAqkA@kqqGkGqGqAG“™]”””3]”“Ž„c]cc]c32]Ëö` 993 :k@qk@@qqHqG:qHq: q: ::A3::939::@qAq:@AqqGqGxrxHqrGqHqqAqrGrwqGqAqAq@AqGGkGqqA@Ak“™c”“ƒ“ŽccŽc]9]cc3223Ëói 3 3 49:@A@3:@Hkq:9qq 33 :@:9: 9::@A 9A@qAqqrGrqrqrMrqGqGqqGrrGrqGAqAqAA@:qGqkqGrGAk@A@™c”cd””c]„c cc]323,Ëó 3 ƒ:9@ 3:A@q@ @3: A@:3:ƒ:93„: 9::@ 3 kAGqAGqrqHqHqrGqqGƒrqHqqGqGqGqAqrqGrqHqHjAk@A@ji“”„c”]cccƒc323]c3Ìò 3 ::: : 9:kGAkAA9Ak@A@@:@A@: ƒ:39:4@A9 qGqkAqGrwGqGqqrGrkGqHqqGqGkAkrqrGrqrGqr@Aƒ@:qAAh””¸””“ŽŽcŽc]c]3c32Ìò 9:9@:9: 2ƒ:iGkG@jA@Ak@:A::@A@q:@@ 9:Gk:GkqGkGqqrGqHrrqGAqrGxqqGqHq:rrxqNqHqwHqrA@AjAqqAqA““””“Ž”“cc3c32,3“3\3Ìòv 3::@@A@:: ::Gqk:GkG::@:k@::@qkGA9 @rAGkGqqGqArqxHqqGqGqrGqGqrGrGrAkqHwrGrqGrqrqGAqA@AqGAq@@™c””Ži]2Ž”cc]cc33\3“3cÌñV: @::@::9::@k@G :@@j:9@A9Aq@GqAkAqqAqAqHqArxqHqxqHr:kGAjrrGqGkqq@xrwHqqHqqGqAGkFkwrƒq GkG:™””””ƒd“c]3c]cc]2c]dÍò[ jA@@:A3@@:AGqq:q@kA@A9A:@@AkGkqAqGqr@rqqGrqrwrxqHjrqxqrG@@r@kHqHqHqrqrGqHrqGkGkAxrwGrGrrƒ“ޓޓŽc”cc]c3c]c]2 2cÍòe9A93:@@A@;2qGqGq@@k@ ::@qAkGqAqHqA@rGrwrMrxGqrxGAqNrqrq@GrwrxqrwHwrxrwrGrqqNqGqGkHqG“c”c„c cc32c32Ž2]dÍôe :@: :@k@A@ AkqHq@:3 :@kGjGAAqAq:@AqxqGrrqGrqHqrqr@rwHqHrqrGrqNrqrHqGqGrxqNkA943GkGqA™“””c””cdc]„cƒc2]”“Íõq@@3 :3@@A3:qGq@;A ::A@AAjAq:@G:@kGqHqAqNrqGrxGxqxqrqxqxrGrwrwrGqxqrxrwrrGq:qGrGqGqAq™™Ž“Ž]9”c]cc¾33c3]cŽ2Îõ:A9::9@:3:@Ak„q ::@@jAj@Gkƒ@.kA@@kGkwrqrGrGqrqNrGxGrxGrwrGrAA@rqNqrNqGqGAqrƒqAqk::™““Ž““”ccŽ“cŽcc]3cc]c3Îöo@49@ @@:99 :@9GrGGA:@:A@qGkAG:kAqA@A@kAGGrwqrqAGqrwrqrqrwrr@GqwrqGxrxqAqA@:kGrGrHqrGqG™™””¸”3c]cŽ3“c]cc2Ï÷ @Gk@A: : @„:^qAq9:@kGkAGjq@:GkGk@k@GqqAGAqxq@:xHqNrMrGG@AqGrqHqrwAAqA@:@rqxqGrqGqGk™Ž“Ž“”c”c“”33”cŽ“ccŽ3Ðø:9A:99ƒ:c3@:9:GqA:@:Gk@kAA@A@3:9:99:A@A:qHqAA:wrqqGqrqrqqrrwr@::AFA:qrxGqHqrGAcc@™™¾”“¾”]cccŽ]cccc-2]2Ðöa:9 :9A:: @3::9:qrG9:@:GAGjAkA@A@ @A@@49:93:qr9@@:9 qHkGAxrHwr:@::@@rqqrGqqrqA@jqqA:™Ã”·””\Ž“c¾ƒcccŽ2332Ò÷ :@kGA@q@ :9GkGrGq3:@:ƒqP@@ApqAqqAj3@A:c32]32]]d3c 3 q@A@:::A@qqrGrGqrG@A@A:GqA9“i½”Ž“Žc“Ž”2Žc¾c32Ô÷ 3@:Aqk@Akƒ:[GqA9::G @AkAA:9@AA@A@qA:q93,3c23323cc:@k@bi239@3GkGkGrGrwrq@@:@@3GqGki““c”“ccŽŽcc”cŽ“Ö÷C:9 qGAjGG9:qG@k@:qq:A@qAq::kGkqAqGqA:323]2AAk2]@:@Ai“i“™23::@AqAƒq H@::A@3GqAqAqi’c”Ž“cŽc“]32]3c23×÷. ::3:GkGkAG9Hqr@ 9GA:qqGkGGqGqGkGAqHk:@223@@:9ƒ:5“A::@chc8“i™:@3@A@:9:9 @AkGqAqA“™””¾“]c33\cc,2]2×÷3:@ƒ:P@@kA:@@A::qq:rGqAqqGrkG@@4AqG@@-]@j A@:@@:qq3h“2:@ 9@3@ 3qA @k@A@:A:@ih¾”„c -3\323ŽcØ÷ :9A@:99:93ƒ:*k9:AGG9A@qGrqGA9::9@k:AG2:@;@@qA@dc:Gq]iƒ2:G9:: ƒ:@ 24kAk@@:“b33c]c]32233c“3Øø: :@„A9:@:@A:GrkA@:@r:GƒqrG:9A @3@::q:2:9G:@3rq3i“iƒ“ @k:@39::@A@@:@A@:hŽƒ”3]23323232ccÙø @3@kFkGkGƒ:D@:qGqGk@:qq:rAGqq ::2A:9@AqG3 ::kA23qG]i’i˜i3@:AA@;@ 9:A@@:39ciƒc33\332]323,3]ccÙ÷@A A@qAqAqA@::3:qr@:G3:HqHƒqBHq9:9 q: kqGq:]:9A@Ac3”“c“i™“bc:AqqAq@@:A33949:i“ccc2322323]c]„cÙøV3A,A@qAqAqA@:9GAqAj::GqrGqA@Aq:A @AqGkG:@@A9 jcA,3cc“bi™b @qGq:qAq@@:Gq82cc]c-2ƒ32cc]cc]Ûø8@A::@AqApA9::qqGqH:@qGqrGqrqGqq kqk9AqGkA@k@:@Aj:@33]ƒc&2™2 @rq:@AqGkGqAA2ccc”322c]]cc]ÛøV,@qG:qAqAqA :GrqG:9qHkGAqrGkGrGqr A9Aq AjA@:@kG@A@,223cbi“ibkGAqGqqAkGr@ji“d”3]2ƒ3233c3,Üøƒ7: 9A9:GkGqq:qG3qA:qqHqqHqrGkGqrGqAqG@@:@A@@AkAA3cAkA„@"A9AqrqHkGqAqAA“c“Ž“cc]cc]2-2cc]Üøƒ[ 4GkG:9GkGAA9:@:qA 9@AqqGqGkrGrqr:: :@49:@kA@q @@kGqqArqq:qGqGrqGkG:ApicŽŽ2cŽ“c323cccÞøƒ\3 9AkGk::Gqk@A@A:GqA@:@rqrGkGqrqHqG:@@-Gqrq:@AjAjAkAqGrqGkG:HqAqGrAqA9Abcc“Ž2”Ž23]c]]33c]3Ýøƒ 3Ap:AFƒ:Q@Aqq:qqH3@::GrG@kGqGqqGqAqG:qGqH:@@:@rqGqGrGqAqi@,AqGki“Gqq™“]”Ž“c”2]c]cc292-c2Ýøƒ*33: 99A@@A@k@:@ 9::q:9 k@A@qGAGkA@q:9AqAƒq-Gk@qGrqrqqGkGr“i ql@i’qG“™”“”2]3232c3]]2cßøƒ5 9AkG3::@AjA@A::@A3::Gq3 9:qHkqqA@k@A:GkGqHkGkA::GqGƒAƒq chc-qq™c2G™Ž“޾¾],323]3]29]c]3Þøƒ. :@AA@@kGA:@9:@:AGA9 93 9:Aq:AGqA@@:@q :AAqAqƒ@AqG„q#HqHqrhi:Gq23Aqk”“”]]3]9\3c3]c32Þø„P39:@qkGqqqA::Aq@:@@4 3 A9 2AkGq4:: :9Aj 9 9:@AqrGrGq:AqqHqi’q3GqrAG”Ž“329\ƒc]b]c2àø„Q::9 AqAqAAjA@q@A:@@qGq:qA@kAqA9AA9@:@::9 A9:Gq:@rqrGq:GqAq2ici @rqrG:““””3]cc]ƒc]9,áø…, 3::3GqAqGAjAAqkAkGkAGkGqG:GkG::G@A@::@:qA@„:GqG: @qGkGi“hbc:qGq™™“””c3ƒc,c]323áø† 99„:'GkG@@qAq@AqAj@Gkq:@:q9Aqk@39:G@:@@A:G9ƒ:"3]@kGqA“hc8cb™™“™“i”3c\]c]3]223âø†S33G:@:9AkA@qAqGqA k@@:qqGAkGA:@:Gq3A@::@kA9: @crAq“™cb“b3Ù™bcŽ”]23c23232 ,ãø‡P9 kGA9 A9@kA:qA3:GjA99:GqGkGqqGkG:q:@A:@k:9:99:,Ž2qqA“™i“ii2b™™Ã™™“i2-32-,åø‡O qAkGkGkG@ApA@@A@kG9: :qAqHkGk:@kGqGq:qq AA@A@3 2 A@Ac’i™“h2ci2™“jŽ“Ž32,23æø‡*3 39AqAk::@A@@qqA3k@:GkAAqAGA@:qAq:@:Gr:ƒ@jA:942@A2c“™’™c“iib™”c32,éøˆH3@:k@q:?AkAkqAGqGkG::Gq:@:qqAq:GqAqAq4G9:A94G:A9 c223c“™2“’ci™2Ži¾Ž23ìøˆG A9AGA@Aq@G@AkGkGq:@::Aq@@:@kG9qAqGqA@A3 q:A@@qq323ci“iiih“i™Ž“ccíø‰ 3@A33@A@ƒ:9@A@kA@AAkG9:A@AqGA:GqHqAqqA@qq 9A@3Aq9b2dc“™“bi,2“hc2cŽcîøŠ39 @9@:qAj:@:Gk@kGqAqGk@:ƒqAqA@kGqGqAqH::3 @kG:c2ƒc™“i’ciic”c3íø‹C 9A:@;qA@A@:q@AA@:qqAkA:@GkGAkGkGqBqqA@k: FkGkG998]3,c™™bc™bb28c”cîøŒ3A@k@3@ƒ:8GkGk@AAqGApA:qHq@qAqqGqAA@AGq9AqAqG;bc832™™“™™ic8Žc¾3îø@A@3Aq99@AqGkƒ@/qAq@GqqAkGqAqAq@qAjAqA@qGkq@929,c“™“™“™h“cccîøŽ@@AA39@AA9A3 jAk@:@AAkGqHqAqGkGAkGkGk@A@kGqAk A2i]™““i“iiŽcŽcîøŽ43@A33@A9:kGq :@@::@jG;@:AqGqAqGkGkGq:@AqGkGA:@3b3c„™’“hcc“ïø:9A„:69:A3Gq@A3::q:@@k@AkGqqA@AqGkGk@kHqqA:@@cc\c“™Ã™™cbc¾”cïø 3:9@:9 @ 99AkGƒ:!@GqA:@@k@A@;@qqA@qAA@qqAA@3@c22iƒ™Ùic]cŽïø= A:@AA3@: :Gk9:@94@Ak@k3qGqqHkGqAkGk@@Ak@:::232c“™™Ã“cŽcïø‘3:ƒ@739::9:9 :AG@AjGAqGkAqAqG3:9Aq@GkA@9@ c2c™“Ù™bcc“Žcïø’* kA@:A::3:@39 ,AjGqqGkGkGkG::@A:G@AkG9: 3ƒc-28…™cd”“3ïø“:@39AAFA:A9AA 9 qAkAqHqG:@@:3Gk:9: 9q A3 c3ci2ÙÙb“cc3ïø”.:9kAjAq @A@:GkGAqqAqAqqGAk@GA9: 3: 3]]ci22ƒ™““c”ccïø•': A2 9 9k@k@Aq@:q@GqqAGkAqGqAk9::Gq]c3ƒc“i“2“ÙhŽiŽ]ïø– 9::@:@:Gk 3 3ƒ@';@;3 q:@qAqGqA@A323]cc]h““™i“ii”“3ïø˜@A@A9A@9 39AAA33cƒAqAqAk9ƒ3]„c3“8“’“h“ccŽc3ðø™ @AjA3 3@@:3ƒc]322@@ƒ:G:]c9„c,3cŽo“™“o“™cc”“3ðøœ c]cccc]2]3b]3]3],2cc3,2c,3c„ ““h“™““Ž“Ž3ðøŸ2]3]\cc]2c]3c]c,33232„”Ž“dc“bc™™Ž¾“ñøŸ]9]8]33]c3223‡Ž…“Žcci™“’c“”23ñø  ]2cc3c]c23“ ”™82c”3cóø¡32,2,–c]cŽ22õø£c-2˜2d9øø¿”øƒøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøæ3]cÓøæc232ÒøÆ“Žcc›2c]]3ÑøÆ ””ccc]cˆ]Žc,9\3cƒ232ÊøÄbbƒ c]cc3“ŽƒccŽcc]3c]ƒ]c]3ÉøÇc’iŽcc”“”“3„cŽ c]2]2323\c2ÈøÄ @ich32cŽ”·””2],3]2cŠcc]9c32]c3c]c3ÆøÁ9 @:@:@,ic]”cŽ2Ž“Ž23“2cc]]ˆ,cƒ] c]2232]cc,ÆøÅ:ƒ@“-cŽcc”,]]3Ž2,c‡ 329\3c]c]c3ƒc ”222,23¾øÆ@94@,“”cd“”c]c”ccŽc]3†2,32,3c32c]c3c3]c33c3½øÉAq3@“„ccŽc3“Ž2c”2cc]†33]ƒc23cc]c2c,323”c¼øËicc]cc3“32Ž2ŽŽc2‡c3c3]c3]3\3]c2]33½øÌ@ii2dd“Žccޓޓc3,‡2]\c2,222323ƒ2c¿øÌ@j222cŽ“ccŽc,c‰ccƒ3ƒ-3]3\Åø¼ 4b92Ž“cŽ]cc”cc””]cˆ 3c]]22-,Çøº 99 ::Ž9 ƒcŽ“Ž3c”Ž“”]†]\]2ƒ3cƒ]Èø¸ :9:3 9 @:@‹!::™cŽ9iŽ3“c¾””9]2]23c32c]bÌø¸: :949: :9 @:@‰::™cc]c]c”Žcc””c3“„c]Ðø»0 :94: : :@:@ G@“bcc]c]“Ž“ŽŽ”cc”]c2Ñø½.93 :93:9 3 :@@3 kG2A@“i]cc””“Žc]“Ž“Žc]32]3Ñø½+ 39: 9:9:9@9:AA@: 9Ak@ch]iŽc”””]ccd“ccÔøÆ"3AA9:@:9@A:9:hcicc”i]c””]ÔøÆ" 3@A3A9::@:3::i’ddccdc3d“ŽcÔøÆ :9@A:9@@:@ƒ:@@ic”d“Ž“Žc”“ccÓøÇ! 499::@49A@::@A“cŽccdcd“ŽcŽƒcÑøÆ%:@@:@::@:@@A:@3:““iŽc“cc”cc3“Ž”¾]ÑøÆ%34: @A::qq@G@@“ciŽcŽcŽ9cŽ“3”“Ž“ÑøÅ : 9ƒ: 9A@A@3HqqrA“idicccd“3”“ŽÐøÅ'99 3 9: @k@A@k@Aq@A““cŽcŽcŽccc3cŽ“”ÐøÃ*:A39: 9:@393 @AAqA@“c”ccccŽ3dc,””cÏøÃ+@A33:@:@:@A@:q::@qA™cŽ“ddcc9c3cc”ccÎøÂ- 9393::9 3:9AA@A@A@A@@“jc“dcc3c]]c]cÍøÁ" ::9:@ :9 9:3 jAjAjAjAkoŽiŽccdƒc3ƒcccÎøÀ/ 9@:: 9:A:9 3::3A@A@qA@“”c“ŽcŽcccc3cc3]c]Íø¿::@Aƒ:*@@A: :9:@:@-@kA9AqA““Žc”cd3]c3]2c3cccËø¾(::99 39:33 93@ :@@ @A@AjG““ŽcŽccc„cccŽ”Ìø½4@A9 3:@: 9::A933:9:Aj3AjGkA™cŽ“Žcc”iicc]c3,ŽŽ2]cËø»,::@A@::9:A3: A@33:@:3A@A@kG@k“ic“i’ib“c]ƒc2c3c,3Ëøº9ƒ:333:9: 39:93 3:A9 3 :@k@AkGG™Ž™i“i’cbc9]2cŽ3c]2]cËø¸@@::@:::3A9::…:?A@: 33 @A@@kA™“o’“h“iichb]]c…c]cÊø… 9¯<: 9:@ 3@:: 3:9@:::93 :9:9@3 kA@:qA™““™i“h“hc9]9]c3cŽccÊø„ 3 Œ ‡::@@::‘::@:@:93 9::@ 9:::@@ƒ:9:@:9: A3@kG:q’™™“’i“c“ihb]ƒcƒŽcËø„  ‰ 93 ::@:„@:A::Œ:@@:ƒ@:@ƒ:9„@:9A@…:9„:@:99@3ƒ@ kG““™A’ihi’cc8]c,d”c9]Êøƒ 93 2 … ::9 @9:@@„A@::939Š:ƒ@:A@A@Aƒ:@:3 3ƒ: 3:„@:@:9:@3::A@ ƒ:Aq“˜i™“™“ibiib3c3“cŽÌø  333: 3„ :9: ::@Aj@ƒ:%@9:: :::9:@:@@:AA@@A::9@A@:@: 39@@ƒ:,@A:@::9A: 3@::AkAjAj@G“™““h“h“i“hic]c3cc]Êø'  9 : 9 :@9:3@:9@A@@:@:@@::9:::@ƒ:@A@:A@ƒ:59::@A:@A@9::94@3:@9A@3::9@39::@::9@:@AGkGk™h™“™“i’i“„cc]]9ccÉø"3 3 :3:9::3@ 3@::9:@kA::@:A@: ƒ:@: :@@ƒ:$9:@::@:@@33@e@:9: 3:@:: 3:9@: ::@: 9ƒ:A@:qAk@G“™“i“hi“ibicc]cc3]cÉø :3:3: :@:3::@@::@::ƒ@3:9:@3 9@::99@ƒ: @:@@:@@3 3:9ƒ@ :A::A@::9:ƒ@'::@A:9 3@kAqGGkG““™’™“i’i“bcc3ccc2cÈø23 :3: :3 @3 ::9::@:A:@Aj:@AA:: 3::@:9 @@:@::@A3„:>@::9;@A33::@@3:@:9A ::9A@@::3:9GA@:k@AkF“™“A’“ihiicc3cŽcc32Èø  39: :9 @3ƒ: :AA:@:@@:@AA:@jA9 3:: 9A:@A3 ƒ:$@@:@@ :9 39A@:@::3:@@: 39:@:9:: :::ƒqAGkFAkG“˜i™“ic’ccdcccc]]2È÷ 9: :3:9@:9@::@3@Ak 3A@jAƒ@:9:9„:@@ƒ:@@9:9A@@49:9 :9::@A@@:9@A@ƒ:):9A::9:9::rGqAjA@q“i™““o’“iicc]c]Ž9c,c]Èø.3 :3:: :@:3@@A3:@::@@:@A@kA@:: :@ 9@A::@@:ƒ@Aƒ:3:@:9@3@:@:9ƒ:@@:9@:ƒ@ƒ:!::qGqqGkAGk˜“™h“i“h“hccc32Žc”cÇ÷  : 9: ::3:@ƒ:@ƒ:@@ƒ:"@kA@k@:@3 :::@j@:@@;::9:9@:A:93 ƒ:9:@::@@A@::@:@ 3ƒ:::9:GrqHkG@jG“™ƒ“h“ihcc]cc]3cÇö 39 3:9: :3@ 3::@@::@::@@:ƒ@ :@AA::9 „: @:A::@::@@„:9:@@ƒ:@;@:9;j@k9:@A:@:9@:9ƒ:9AqGqrAqAA™“™i™“i“ibcc3c“”ccÇö :: 9: 3: : 9:@A:@ƒ: @:@::@A::j@9ƒ:9:9::ƒ@J:@j@:@::9:@@:9:A@:@A@@:9@3 ::A@j:::::99AqrGqqGkG“˜“™’i’“hcccdccc2-ccÆõ"9::9: :@ 3 93::@@::@9:@:A@:@9:@ƒ:„: 9:@:AjA:3ƒ:"@9:@:A@33:@@k@:3:@A9::33:99:@:9Aƒ: qrHqqAqA™™““™i““icccccŽ32c]Æõ : 9 3:3 3: 9ƒ:99:AA9:@Aj:@:A:@::@99: „: @::@@:@3A@;ƒ@;A9:@A@::@:@:@9@:9:A:: 9:9:9 A@xrGqAq“™™h““nibc]d]cŽ32-2cÆô9 9: 94@:: 2 9ƒ@: ::ƒ@::@A@:@@A::@: 9A@ :„@::@A@Aƒ:9::@:A9:@:@:9A@A:@ 3:::ƒ@3:„:9AjGqGkG™’™“™““i“ccƒc332dcÅô( 39 3:@:: 9::@::@@::@@3@AjA:@:@::9 „: 9:@:A@A@A:@9:ƒ@ ::@A@A@A:A9ƒ:@@:@:9ƒ:@„:9::9:GAqrGqG“™k™“h“h“hƒc c3\32cÅô3 ƒ: @:393A: @ƒ:@A@;:@:A@Aj:@:@9: 99::@::@:jA@ƒ:9@:A@A@Aj@:A::jƒ:@@;@::@:9:@@:9ƒ: 9GA:@Akq:q“ƒ™“™i“i]ccŽc]cc3Ž3Åò0  :3:@9: A9 ::@3 :@:@:@39:@Ak@A@::@:9 :@:9::@ƒ:@A@@::@;@:@@e9 ::99:ƒ@ :@A9::9:@:9Aƒ:$9:::k@:qAG:Gq“™“™h“h“ccŽ]ccc33Åò3: 99::9@:@3 39::9:9:@„:@Aƒ@ jA:A: :9:@„:9@::@ƒ:@@:@:@:A9:@@:9:@:@::@jA@:9ƒ:)A::9::9::9G:@qAq9:G“™™“™““icccŽ3dc232Åò  @ 3@A j 3 ::@ 39ƒ:ƒ@AjAAƒ@:@2::ƒ@ :@:@:@:9ƒ: @::@k9::@:@…:53:@;:9:@:@::9::9:9:GkGqAA@k™“˜™“o’cdcŽ3“c2c32cÄñ 33::9 :@@: 93A@3::9ƒ:@ @Aj:@AjAk@3 :@;@A@::ƒ@L::@:9:@9::@@:@@::@::@::9 @@:9 @@::9:::@9::9kGAkGjAG“™““™“ijcc]cŽ3c]33cÃñ 33:3ƒ:A39 9 ::@9:3@ 39:ƒA3@A3A@9: 3@@:@:: ::@ƒ: @::@;@@::Aƒ:@@::@::@3:99::3::9ˆ:ApA@AkGj™™“h™“c”ƒc “]cc]cÃñ  39::@:9 33:9::A„:@ :@@ j@:A9A@Ak :9::A::9…@::@@::@„:7@9@:A@ @A:@@:@::3A@::::9:99:99A@k@AqA™“™“icŽcdƒc2c3cÃð/ , 2 :9:@9 ::A:9@::@::@::A@:@k3Aj@::@@:@ƒ: @;jA@:@:@ƒ:@@::@A3@::@9:@A@;99@A@::9::9ƒ: 99kA9AGk@Aqƒ“™cŽiŽcŽcc]…cÃð13 3 3:9 3: 93:@@A3::A:@@:@:@3::@:AA3 @:A@:@3 ƒ@A:39ƒ:9@:@@ @ƒ:@@::@„:3@:9A:k@:9:9::9:9:9::A3@kGk@G““”“Žcccdc3Ž,c3,Ãð':3::39: 9 4:@A3 9:Ap::A:@:Ak:@@:@†:k:@:9::ƒ@ :@@:G: @::9::@@;@A::@Aj@:3:@9:9„:&9::::A@A@G:qA™Ž“Žc”c”dccc32j23Ãð ƒ )3@: 3 :9A@:9:@9:AA9:Aj:@:@A@:@:@9:@::@@ƒ: @A@e@:A@ ƒ:@A@3:@:@:@@:@@j@A::@AA::99ƒ:%99:9::qk@k@kGq““Ž“Žcc”332332Ãò$393@ 39 @49:3:: :@ 39@@A@:@k@A:@„:9ƒ:@@::ƒ@!::9::@:@@:@A9::@AjAj:A@A@9:@;@j:ƒ:'9:::94:9:AAq:GAkG™”“Ž“”ŽicccŽi3]2,Äñ 3:3: :3@3@:@:9 ƒ:@::@Aj:A@k@@:@@::@:9†:@…:@@:@:3:ƒ@=:A@:A@:@4::9A@@:@::9 9::9:::k@G:kFkG““Ž”“ŽjŽcŽ3c,c33cÃï' 3 3@: 9:@3 3@ d::3::@::@:A9A@AjA@kAkƒ: 9:@::@@9@:A…@A…:@A:Aƒ@ :9::9:9: :@…:+9:9::939:3:AGkAFAkGk™”“Ž“Žcc“c“33223c]Âï:3 ::@ @:@@3ƒ@: ::@:ƒ@ :@:@kA:@Aƒ@A:9„:: ƒ@…:9:@@:@„:@kƒ:9:@@:@ƒ:/@@:9:9::: ::9:@q9Ak@Aq™””“ŽdccŽc3c32ŽcÂï 9: @:@3:@A:: 3@:3…:9:A:@:@9:@@k::Aj ::@:@@…: @A@:: @::@3:„@ :9::A::A„:9@„:+9:::9::99::GA9A@q@G“™Ž½”Ž“ccc”3]cc]“cŽÂï  ::9@;:@@ƒ: @: ƒ@„:@@:@::@:@@A:@A::@„: 9@:@:j:@:@3 ƒ: @A@::9::…@ :9::@A@99:9ƒ:% 9::9:@:kA@A9q“™“ޓޓޔŽdc\3]c3cÂï 3 9:@39 3:k9ƒ: 9ƒ:@::@ƒ:A::@AA@A@:@@93::9:9::@ƒ:@;@„:%@@::9;@k::::AjA:A::@::@@A:94:99::9ƒ:9AqApAq4Gq““ޓޓ”cc”“32“cc,Ãï69: :@A @GA@:2 ::@:@:@:9@:@::Aj@::j@:@4:::::9:@:9:…@:@:@@:@::9::@:@A@::9„:.@Aj39499:::rwHrwrqHqGqAq™””Ž“Žc“Žc33]33Äð9:@k@@kqA@kG::@:@:@:@ƒ:@:@99AA:@@:@:9„:9„:ƒ:@;@:A@A@A:9::@ƒ: 9:3::9A@:@:9„:*9xrxrqxqrwrwrGxrqGqAqG“””“ޓޓŽcc]9323Ãð @@A:-ƒAk@@ƒ:!@:@::@::@:@::9:3@::@A:@::9:9::@@†:I@Aj@Aj3::@::@@::@:9:@:@@:AxrxrMrrNrwxHrxGrxHxrqMrqrGkG™“Ž“Žc”cŽc3c3]c32Äï ::3@:ƒ9'A@@3 :9:3:@@:@:@::@::A@@:@:3A:@9 :::9ƒ:ƒ@9::@49:@:9:@@:ƒ@3,3]@39@: : 3AqAA:@@AqAwrxGqGqAqHGqqGq:qxqxGqqGGAqqGkGkGqBqAƒqAjAG““c””ccŽc]cc]2Ìó::A3:@j::AqAq :k„]32-23„@Q :A:9 @:@@::qGk :jAqGqqrGrqqAqAqHqrGqGrAjGqq@k@@qGqGqAqAqGAAqA@@chŽcc”“Žc]”dccÎò@ƒ:g@@A@3 @ qqH3G:,c]c,3232,32-::@@A j@3A@::qAGkG:AqArGqqGAqAqrqqGqArqGkGAqHAqGkGkGkqGqA@k@k@@A“h]3“”·]2„cccd32ÍòX:9AkAq:: @3:qGqrq:c3c]c]232ccqG:94q::@ @3@@:GkGqA9A@q@AArqrGqGqHqGrGkG@k@AkqGkGqGqqAG…:@@A:hƒcƒc 3]cc]3c23Îò#4@9k@::@@: :AqGrqG@:c]33,A3qArqAƒ: @@ :A@;@rqAkGƒq7AAqkGAqrqrqHqrqG@AjAqGqAAqGqkH:@;@::9@@::@@“””ccŽccŽƒc¾33ÏòT39::3A@A9A@::@@qrGAk:@A2GkGkAqGqAF9:Gqkq@:qqGrGqAqGqqGqHqqGxHwrAGAAkkGAAqGqqAq:A@@ƒ:9A@A@::@A“b“”cŽ“Žc”“]]2322Ïò :@:@GqA@:k:@ƒ:5q@A@q:A@@k qGAqqA3GrqGqrqHqrqGq 3GqHqrqGqGqAAFk@q@G„qƒA@A:@@A::@Ak@k@k„:h“2cƒc Ž3]3c3],Ðò 9„:qAkG@ ƒ:6@:@qqrqG@@:k@:AqAAqqAqGr: qGrqGqGqrqGqBkGqGkAkAqqAkqGr…A(j@k@:@kqkAq@qAG@@::9:hi]cŽc]cŽ232]c,c2Ðòq 9 :9@A@Aqkq9:A@::rGqG::@A@@AjGkGqGqqHkAqxqGrqrrGrrqGqAAqGk@AGkGGkAjqApA@:xqGqAqGGkGkG:9:: @:8c]c323c3]2]9\32ccÑó 3:@::qGkGA 9::@::@Aqk@@kAk@A@kƒAqA@ApHqrqGrwrwrGrqGƒq-rxGkGqAqAqA@:rqqrGqAqqGkGk::9:9A@::8cc”cŽ“…c]332]Ñôƒ:T@::A@@kGA::@:@:Gq:A@@kGqAjGkFA@@:qAqrMrqHrGrqqHqqHqHqG:qqGj@qGrwrwGGqGkGkGk@:@:9AAƒ@“i]ccŽ“ccŽc]c323223cÑôJ@@:@:9Gk@@93:@:@A:qAq::@kA@AqA@Gk@kAk@AqGrGrqwrGrMrqrqGqqAq:GrrqHqqHqHqkGkƒA@A@:rGqAq@k3i“c]ccc]ƒc3]23,Òô A@:AAk9ƒ:?@::G:j@@G::A@Aq@@Aj@@;@@Ak@@AjAqHqGqAqrGqH@r@rqHrqGrqHqqGqGqrGƒq!G:@rGqAqAk@Abcc”cc, ,c]c]c3cÒô[A3pAGAA9:@::qG::A::@:@@qAk@AAk:@AqA@A@kAGjrqrGrAFkxqrqrGxqqGqrGqrGqrAAqqHqHq@3 kG@A@qAih„c]3323]32c3b32cÓõk::AjGkGqAA::G::G3@qG:kq@:A9@k@G:@k3 @k@GAqGqrwrrGrGqGrqHqrGqqH@:qGrqrGrqq@;qGqAk@k:GcŒŽcŽcc]cc]9]c]3]ÔõS@9A:@kGjGqA@@99Aj:@Aq:@:@AqG::@:@:qA@:9@::@3rxGkG9rqrGrGqqHq:AGjrGrqrwrxGqA:qrqGqAƒ@ :™ic¾”dƒc]c2322Ôö_ 3 :9AkGqk@:@:G::Gk@:GqAqkGq@@;@A@3G::@:c :@ qG::qGrqGAA@@qqrGqrqHqH@:@3AGqHqrGqAkAkhc“cŽcc„c]c]c]Öö3:93A 9AA@A@:@Aƒ:E@AA@3AqAqGkrGq:@k@k 9::c@@ :c:9AAjAjrrHqqrGrw:@::@AqGkGqGkG:9::i“„c “33cc-]3cØö 9AjA3GkqAqA:@:@:qAjA@@kGqGAA3ƒ:CGA@::A@qAj:A3c:9Gc“A@@qxGr33A@qGkqGqAqAq::q:9“™cŽ”3c”]c9“Ùõ8 949A@AA9:GAjG::9::qGq9:@:r9kq:qG:q@@:@@k9A:@::@A@:33Giƒ“@ 3@@AkGqGrqGAqGkGƒ:GAA:™“Ž23]c]“3cc]“-Ùõ 9 9Aq@@A:9qAqƒ:ƒ@HA:A3@@GrGAqr3Ak@:A@Aq:A@qG@:@]33,cih““@@9:3:@@kGqGqqA:3:99Gqq@bih”“cc]…c]cÚöL 3:9A@:@@:9: @ ::qGqqA@::rGrqqGqkG:93qGq:3 kAk”@]322cbibc“ A@:@AkGk 3 @ƒA:@@:cbc]cc3c,33\ÝöI 9A 94:@:A@A@kG:@GkGr:@:GkqGA::Gk:Gk@:kGkGcGkFkA2cŽ9b2™22 ::@:34Gƒ:9:9@:4h„c]”3c]â÷ :9AqA@@k@Aj„@ kq:r@:@:AGAkAƒq,GqGk@:3G:ccAqAA@]cc”ccci“83@@:@A@:3@:9@@ƒ: 38cb””]22â÷Y :@Ak:Ak@A:A3:@:@:G::@qqAqqrGGrqAq AGk::3cc@kG2::]“Ž““h2™c @kG@kA@:9 @;::9:39b9,]232,äø 39@:@q@G3A@39…:>Gq@@:qGqr@AkGqq:9@A:AA@@@]“ŽGGhc“AqkG@kAA::3@GA2b9]„c,3åø1 :9: @kG9k@A:@A:@GkG9::@qGGk@qGrGq::A-:@@j:kAq:„A"qkG@k@AAqAA@qFqGqG4jAjc9\3\33, ]2åø?: A: 3 GkA@Aq@A@@:9:99GqkGAqAqqGqH:@GqGqH:@@A@ j@qAqAqqGqq:@AƒqAkAqA:@2ch33c]23232åø3AjA2:9:AqGjA@k@kAj:Gr q ƒ:Gk„Aj@A3Aƒq+G:@:3@qAqGqqGrAqGq@qAqGk@Aq @ci]c]cc323,2æø: A A@A@A@AAqAGk  qA@kGƒ@*j:@:: qAGkrqA@:GkGqAqHqGqqiqAA@rGqGq 3@Ab]„c,,32èø 33:@qk@k@k@kGjAqAq@@:qAƒ@.-GkA:@::99 k@A@A@:Ak qGr@:qArG“c:qGc“GkG3A223ƒc2,332éø(3@ @A@G:@@AA@j@A@qA:9::@:A@qA:G@::@ ::ƒ@ A2 q:@AkAkGkGƒqc“:qk™“GqqG“i]8c]3c]23éøƒ@@339::@:jAAkGkGj„:8GkqAq jAkG@3::G::A::qG:@AqqGqA@rGqGi’:GG2c2qA:hcŽc3\c32ëø„6 9:@AkGkAk@GkGk9G::GkGqAq:@@k:G:@qGq:k@:A9:qGqrA@:qAƒqi8:q 83qAA“cc”¾232íø…39:A@k„@=AkFkGqAq@:Gk@A@qA:AF:qA:@@@ @kA9GrG@kGkG“cbc qkqqHj@“c”ðø…3Aƒ@0A@A9@A@ 3@A@A9AGjA9Gq@::AA9::qqA@j @k3 ,“@AqAqƒi h3@GrGq“dƒðø†F @:3@kA:@:@kA3@@::9:A@::AAq:pGkGA3Gq:A@9A::9 c3qAG““’“cb:qA“™ci“Žccðøˆ@:@A2ƒ:1Ak:9::q:@A99A@@:jA::GkqGk@: 33 qAFAkc29rqA“i™™b38ƒ™““hccŽccðø‡D ::@3@:GjG AqA@:qAAk:@:A@A@kGGkGA@@qGq q@kGk8::@@A˜™“™i2“Ù™23c””ñøˆ 3@A::3:AjGk@A@AqqG:@ƒqAkFk@Aƒq!AAq :@ @qAcb2Žc“i2b“8ch™™“cc¾ccñøˆ3@33ƒ:'9:A@G:@:@kGk::GAq@AAqAqAAqA3 9AjAAq8c8„c““bii“ib,™hc],ñø‰A 3:@: :@3AkA9:@G@:qGkAqAqAqG:@::Gq@AAkGkb923cŽi“8ch“2i““cŽcòøŠ@A@::9 39Aj::3@@A:AkGqAqAq@k@k@@qA::qAqG929\3“Ž’™“ib2chc“cc” òøŠ:3@3@@AA39:@ @ ::q9:9:@GkFAAGkGA9A@:qAqAk@2c8c,c™™“hc89,hƒcŽ3óøŒ9:Ak@@A@:: 9:9@:qG::@@kGkApAAj@k jAGkGjA:@2cŽ™“™““i\cib„cóø(3@@3 9 @k 9:: k@A@:A@kG::9:@AqA@@kG@@:9ƒci]c™“™i˜i8i8]3ôøŽ7:@@3@:kA@@3:GqGAqAjA@:ApAGkA@A@k@:@::@dc]c23c“™’““i“2]ƒcôø9:@:@3@3 :AjAkGqAqA:GkGkG39A@AkA@3cc]3b82]c™™i“hcb9]c]ôø‘6@;3c3@3@A@ApAqAqGjAq 9:G::@kGkccc3232cb™“™™“bc]ccõø•'3c3]cc@kAAqAqA@9:Ak@3 3@9A3cc32c829…™b33ccõø•1]8]9\3]:9:@@Ak:AG:@A@@A94Gkcc]]3,322i’™Ã™™22]cöø–32c]c3ccƒ: FAk9A@kGk3ƒ:2c]9]„c 2cb™“™“™b3cc]öø—323,,322,]cA@qA@A@ „c,]„c]92†™\9]ccöø™]c323…23: 93A2cc]33]]ccƒc h™Ã™½b2c]“Ž÷ø™]32,ƒc]9d]32“icb“™iicb3cc÷ø«]9,…“dbb“i“™“hb3c]c÷ø³Ž”ci™™“h“™2c]cøøµƒ“ i“hc8“]c3øø´,”]9bibcbi32cdcøø´23c““hci“Žc“,øø¹ o““hicc“Žøø¹ccb„cøƒøºcc2-c3ø„øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÔ“Ž“œ2ÇøÑ bi”cc3™]c]ÆøÑhƒ2dccc‡]2]922ÅøÍƒ: @i22ccƒcc]ƒcccƒ3,ÄøÐ@@;@ci“8-cŽ]”¾””]2]cŒ2]cc\33„23¾øÑ @@j2ii]c”“”“]cŒ]c32322ƒ,3]2½øÒ3A@A@2ŽcŽcc¾”·”322]c]Šcc]3]332c3¼øÓ@k@:“ic“d””“33c,‰23,23223323c2»øÕ :“i2Ž“c3“ŽŽc]c3c]‡2,3,c32232c],ºøÂ „ ŽA9838dŽ33“cŽ“ ]cc2cˆ-cc]2-3cc]32-ƒ,¶øÂ 3 3Ž 3 “ij“]3”,c]c…23]2323,cc]2322c2c³øÃ339 3:3 “iŽƒc””2޾ƒc”]c„3]c2323232323, ]cŽc³øÆ 9 93@ ‹@“iccdc””“,cc]cc]c2cc]3„,323,ƒ]32]c³øÆ @3 :@A@: @ †@A’cŽcc”c”] ,3”c]]833232]3ƒ323†233µøÊ 933 @3@:@ƒ@A8cc”cc”3\c2,”]ccƒ]cÈøÎ%@:@@3A@3AG::b923”Žcccc-”2c3223ÉøÎ" 3 3@3A@3 ::::bcc3c3ccdcŽ“”c]3ÌøÍ":9 3 :@:A@j9q 3@@8Ž“3”cc”””3cÍøÍ% :@:@3 9:A@A3@:@;“c”Žccc”””]c3ÊøÌ @3 :9 A@:@@A@3A:@i™ƒccŽcc””“cc2”ÉøÊ@:3 :9:A9@A@e@AA@3A@i]ƒc”ŽcŽc”Žc3·”ÉøÈ 3:@A9 3:@A@k@ƒ:@k@@qA“hc]33c“Ž“cc,“ŽicËøÇ9: 3 3 3@:9::@@A@kƒ@Aq“™]“ޓޓŽc]cŽcŽÊøÅ :9:9@:@ƒ:"9: 9A@jA@AAjA:@i“c”””ŽccŽiccÉøÃ' ::9@A: 9:93 93@::A@:jAA:@::hic]cŽc“Žƒc3Ž“cÊøŠ:¶:@9ƒ:39„:@: ::@ ::@@Aq@kƒ@“ic“c]“c3c”ŽcÉø‰ ‹§::@A@:::@:9:@A3:9ƒ:@:@@A@AkAA’idŽcd“]”c]Èø‰ 3 ‰ 3 ::@@:@@:A@::•†:349ƒ: @A9 :9::„:9AjAqkG:@qiiciŽc“Žc”32cŽ“cÈø‡3 9 39… 9: :@9:@@AA@A@Ak:‘ƒ: 3@:@@: ƒ::ƒ "9 3::@93 9::jA@A@qAqq:““cddcŽƒcŽ”Èø‡ƒ 3: :„:3@::A@k@k 393 :9:‡:@:@:@:„@:@ 3:@@:9:@:993ƒ:' :: ::::@Ak@Ak@qH@“icjcc3c3”¾Çø† 93 : 9: :@949::„@:@„:@4:::::@:@@Aƒ@A@@;@:@ƒ:69:@@: 9::: @9:9:3::@:@A:@AGqqA@™jcdcd33““dÇø†$ 3 : 99 3 3@ 9:::Ak@::@:@A:9: ::@ƒ:,@AA@:A@;@::::@@::@A@:@::9:@::9: :@A9 ::ƒ@:jAqGAkidccc“cccŽc”cÆø…3 :9:3@9: ƒ:@:9:@@A::@ @j@ :9::9:@@::939:9…: @:A:@:2 ::9ƒ:@@:@@ƒ:&9 ::@::3@k@A@:@:@k™i“d“cŽcŽccŽŽÆø†9: 99 :4:3 9::@::@::@@:@…: ::9:@::@::Aƒ:A:@:9@A@:@3@:9:@::9‡:9ƒ:@@::9::@AjAAkA@A@“cŽcŽccƒcc]”“cÆø…. 9 : : 3 @99:@@::@@:@Aj::@A@:9:@::9:@:@@:@:ƒ@ 39:@@A…:ƒ@#A:9@@:@:@:9::@9: ::@A@@:@k@kG““cdƒcdc3]ƒcÆø… 9 3:9 :3:3: ::9:AA@:@A:@k@@ 3ƒ:@A@@k 3@:9499:A„:@j:@: „:#9:A@::@9:@kA@9::99Ak@@AA@@“”iŽƒc cc9c3]Åøƒ 9 93:@@: @@ @::@„: @@A@A@:39:@„:3ƒ:@::@@:Aƒ@::@A@3::9:@:: 9:@ƒ:@:3 „: 9 @A@k:@k@qidŽccŽccŽ3cc-ccÄø! 2 9 39@:@9A:@::@:@@:@kAkk@„:@::@:Aƒ:@@::@ 39:9:3:@A@„:ƒ@„:@:@ „:$9::@:93@AjA@A@Ak™““c“Žccc32Žcc,cÄø : 33 @9ƒ:3@ ::@:@::@:@::@AFA@@: 9 9:9:†@A 29:9‡: @@:@A@@: ƒ::ƒ@::9:@@::@::4:@@Ak@q@AA™Žc“ŽcŽ„c]ccŽcÄø3 ƒ:9 ::@@:@::@:@:@@k:@kA9: 9::ƒ:@::9::Aƒ: @:9@@:@;@:jƒ:9::@@: …:'@@A93@:@9Ak @AqAq@™c”cc“Žc]cc3cc3Äø# 3 93:@::3@3:@:k@:9A:@:@:A@::@A9ƒ:9…: @@::@:@:@ƒ:@::3:9:@:@A:@::9ƒ:9::9:@ 9::93 ƒ:3@AjAkGkA™”d“dcc]3,dc]Äø:33„:?@ : 9:@:3:A@k@:A:@@::@::9 ::9:9:@A@::@:@:@9:@:9A@::@::@@::9Aƒ@ƒ:@::@…:9ƒ:@:9@A@@kFk““d”c…c2”c23Äø/  3 @:@: 39:@A@ 9:@:9::@jA:@@:@:@ 9:: 9:@:@„:29A9::@:@:@::@A@::9@:@::9@:9@::@::@@:9::3Aq@@AGƒ“di“iic]c]3c,c]cÃø::@:: 2 3 ::@@3ƒ:@:„@!A@:@k:@::93@@9: @:A::@@:@:@@A:9Aƒ:@@:Aƒ: @@A::9:@@ „:9ƒ::@::9@AkAkGqi““i“hcc]c3cc3ccÄø9::3A@3 33@ƒ:9:@:A9:A:jA:@:: : ƒ:9ƒ: @:@@:@::@…:@::@@:Aj@:9:9::9ƒ:@„:9@::@„:@:@ @A@:qA™“i’i“hib]3cccÄ÷? 3::9A9: 3 AA3@::@A3 @:@@A@k:@:99:9:@::@:k@@A:9A:@:@:@:@:ƒ@Aƒ:ƒ:/@: 3::9:::9:9:@9 :@33@AqAq™™“™i“i“bc9]cccŽdÄ÷%3: 9 99:@ 99:9:99A:9:@A@;@jA@:@9 3ƒ:9::9ƒ:3@@A@:@:@::@A@A@@:A::@@:@A::@9::9:@::@:9A9:@A93 : Aƒ@Aq“™“™’i’iibb3cŽ”Äö : „: 9 39ƒ: 4:9::@@:k@@;@:@:ƒ @…:@9:@::@@A@A@:@@::j:@ƒ:7@:9:9::@9::9:@::@@A93 ::@3 @3:@k@Aq“n“i“i“hic\32””cÃö-: 3@:@3 @ 3 :9::::3 k@@:Aj@@::::@:@@:@9ƒ:@ƒ:@:j@A:@k@@::@:9:@„:9@:@:@::9@:@ ƒ:@…:9@A@kAkGG“™““’ihcibc9]c3cÃö:3:9@ 9:33:@9:9 : 39:ƒA99@A@A@3 93@@:@@::@:9::9::@A::@k@@A9:A9@:A9@:@:@:9:9::@@ƒ:9ƒ:?:@9:A::AFAkq“™™i™“ib“i8]2c33cÃô 9 :::9 :@ ƒ:@ 9 @::@A:@@:3A@k@A99…: 9:@::@@::ƒ@:@@::@::@:9: :9:A:@ƒ: @::9A:@:@::?„::@:@qk@AG˜“’“h“i“bi\cc]c3cÃô3 9::::933@@:@:3@:@::ƒ@8:@A3@Ak@:: @:@:9::@@:@::@@:Ak:Aj:A@A:@:9::9:9:@:@:::@::ƒ@&::9@::::@:G9:qAGjq“™A™ih“hib9c]323cÃó 9 :9: 3:: 3 :@@:ƒ:@:@@::@:@@:@@A@::@::@ƒ:@@A@@:@ 3@::9A:@ƒ:@::@@::::A@:9ƒ:9:@;ƒ:@:9::9::9:kA:GkAAGqGƒ“ ibi“chcc]c3cÃó&3 39::@: 3 9:@; 3::@:@::@::k::@::j9ƒ:@@::@ƒ:3 ƒ: A:9:@::@:@:ƒ@AA:9: 9„: 9@@9::@:9„: @:@:@:GqA@q@jAq“i˜i“i’ibi‡c2cc3Ãó+ 9 :93::9 3@:@:: 9AA@:@A:@:G9::@::9::@::@ƒ: @@:@@:@:@@ƒ:ƒ@A93:@::@9:@:@:9:::@„: 9::@:@9„:@qGqAAq@AA“™“’“iciibcc3cc]cÂò?3:39 3@ 9@ 9@3@ 9:3A:@@:A9:@:@@::@:9:@@::@;@:@::@:@ @::9ƒ:@::Aƒ:@:@ƒ:9A@: :9::9@:9ƒ:@9@::GƒqAA@@kF““i“h“b“ƒc]cŽcÂò)3 :49: : 24@:@3 :@::@@9@@k:A@A:@::@::ƒ:@ƒ:@@3 @:93::9:9:@ƒ:@@:@:9@„:@:@@Aƒ:@9:@ƒ:@:9ƒ:@:qAGqAq@AkA™h™““hch„c3”Âò  :@9: @3 @ :@: :@::9::@4ƒ@k„@:@::„::9ƒ:@„:A@ƒ:@:@@:::@:@:@A@@:9::3:9:9…:%9::@:9::@qrGqAjAF““™“h“iihcc]cc3cÃñ 93::@@3: k@::9ƒ:<9A@:@:AkA@kAkA:@::9: 9:@::@@:A@@:@::: A:@:@A@@:@:@:A::@@A„:9:9ƒ:?::9@ƒ:@AGkqGAjAqi“™i“h“chcc]c32cÂñ3::ƒ:@@3@A@ :@:@::@@:A@A:@@A@AjA:9ƒ:9::9 @ƒ:9:@::@9ƒ:@:@@:j;@A:AjA:9:9A@::@:9ƒ:9„:9ƒ:::3GqHqƒAq’™’i“i’ib]cc3c3Ãòƒ:#@3@:9 :3@::9:@::@:@A@:@j::@k@:@@A …:@ƒ:9:@ƒ:@::9A::9::@:AA@ƒ:9::9:::@A@::9::9::9:::@„:9 qqrGqk@G“i™“h“icb„c]ccÁñ 9@:9:AA9: A:@94@:@…: @::@@::@Aƒ@ d :9@9::9ƒ:ƒ@:@:@A@:9ƒ@::@:@:9::9:9:@A::@:9:9@:9@†: @9:: AqkAG@k™““h“ihicc]c]c3cÁñ3 :::@:@k@3:@ ::@:@:@:@@:@::A@@A@:@;9 3:: :9:@9:@ƒ:@::9::A::A@:9::@:9:@:9:@::9:@„:9„:&9::9::9:39AjGGqkAGk˜“™i“bcbcc]cŽc3cÁñ @:: AA@3@Aƒ:@:@:@:@:@::@@:@k@:@j:93: @„:9„: @@:@::::@@:@ƒ: 9:9::@@::@ƒ: @::::9@…:@::9 9@:AqGq9AG“™“h“ibƒc3cc33Áð : 9A3@:@3A:@:ƒ@ :@::@::@::@ƒ:@:@;@:9::9:9@:99::@:@::„@A@:@:9„: @:@A@:9:9ƒ:@::@9ƒ:@9:9@:993:A:9A@qA:q“™i™“ihib…c323Áðƒ:A@A9A@q@:@ @kA:@:@@::@ƒ:@„:@ƒ:99:::9ƒ:@::@A„@Aj49::@„:A@@…: @:@@::9:9:9ƒ:::9ƒ: @@A:qAk9:GA™’“i’i“c]c]c23c]Áñ9::@jAAjGkGAj::@@:@ƒ:I@:@@A@A@@:@3:@:9 ::9::9:@9::@4:@;9::9:@::@9:9::@::@:@:@A@:9::9@:::9ƒ: 9 :@:9GqA:qA™“™““ihic]cc]cc2cÀñ$ 9: @AkGqAj9:@:@:A@:@:@A:@::@:: @ƒ: 9:::9:9:@:@:@@:9@49: @:@@::@„:9:9ƒ: @:@::9::„:9::9:9@ :@9AkGqAk:Gk™’™i’i“]„c3c-3cÀð>9: 9@A@,:AAqA@kA::@:@A:@:@A@:@:@:@:@A@@:: 9:9::3::@::@::@::@„:A@A@:9:::@@:@::@::ƒ:9:@:ƒ:…:kFAqA@9AG““™i“hicc]3c23,Àï @ƒ:<9:A:?3:GA9Aq@::@@:@::@k@k::@39:9@@:@:493@9 ::@::@:@A@@::@A†: 9A@::A@A@„:%9::9:::9::9:@9@:@:@Ak@@kAq@™i’“i“bƒc3]c ,3cÀï 3ƒ:@4 @::3Aq9AA9ƒ:@:@:@:9:@@:3 ::A@::9 @:9 ƒ:@9:@ƒ:'@@;::@:9:9:@9::@@A@::9:@@A9:::9:9:9ƒ: @:9:@:9AA@A9A“™™i’icc3cc3c2Áï 9:9 Ap9A@::3 9A-A@:::@‡:9 :@:@::3::9::9::9ƒ::@::@9:9A9::@@…: @:9::9A@@A@ƒ:9:9„:$9:@::9::@A3@kAj@k™’““iicd23ccŽÁð:3 9A:AqqG3@ 9:ƒ@Ak@:@::@::@:393:@@ƒ:@A:ƒ::9:9@:9;@::::A ::9::Aƒ@39AAj:@:@::9@:9ƒ:9ƒ:@:@A@@qA3@A“G“h“cƒc]3]cÁï9:9 : @k9AAq:@@3 :AjGkƒ:@3@:@ ::@]:A:@:@@::9@9„:#@:::@@::9:@:@:: ::@:Ad::9A9:@::@ƒ:(9::@:9 :3@9:: jAk@AAjG“’o“cdcŽcc]22Áï< ::3:G:@@:G:A 39::9:9 9A:@:@3::@39:9::@A@:: :3:::@;@::ƒ@A::@3 9:9::…:@A::9::ƒ:'9::93 :@:9 kFAApA@koŽ“icŽcccd]cc-Áð9::@ qGqƒ:Aq:@@::@:@@:@::9:@ ::@:9:9ƒ:ƒ@W:@::9:@::3:@A::A::9A:9::@::9: :9:@9A:@::9@99::99:33@:@:: @kA9Ak@A™“Žc“ccdc]ccÂð-::@:3 :@:@:Gk@:@:A@:9: @:::@@: @3:9@:A:A@ƒ:::9 ::93@:@:9:@:::9::@ƒ: 9:::9 @@:@@…:(9::49 :@::@k@G:@A3@koŽiŽcŽcc3c3cÀð::@:@A2ƒ:F:@qAq33:9:A9 9 3A::@A@A@]ƒ:+@::@9::9 : ::@@:9A:::: 9:@:928@@9::A::@„: 9:@:9 3 ƒ:@::A:AjAq@ qA““Ž“cc]cc]icŽÀï @::@: AG9 @AkGkAA9:@A@: 3Aƒ@ :93:@:@34:@ƒ:@:9 „:9 3A@:9: 3@::3:@ƒ:i3„: 9@@:@@:@@:ƒ:% :3:99:@:@@q A@Ak9AF“”ŽiŽcc3cŽc,dÁïE3 :A@A:93@:3::qA@A@@ 3A@3@3:@kA9::@Aj:3@:9::@@::@:@9:3@A3 339 3@†:i9„:1A9::@@::@9:9 :9 :::::ApAj@A kA™”ccdc3Áð#9::@@:q q:@A@:q:@:3 qA3 @AA:@:9A::@„:ƒ:@ 9ƒ:):9::9: 39:::@:A::9@:@:?c3::@:9:@A::@::9„:%9: 99:99:@::@A@Ak@Ap“c””cdccŽccc3Áï* @::A@:Gq @393:@39 qA@@:k@@A@3A@A@:@ @::@ƒ:9::@@::9::::3@::@@ @::„:::„@:@:93:9ƒ: :3 3:::@:ƒ@kA@A3@kA™”cŽcccŽ]cÁîB ::@jA3 33 :: 3 9 :q@A@@3 j:kApA9:@ ::9:@@:9: 3:@:9 ::9: :9 @„:@ƒ:;@9::@:9 9:@:9::::@:@9 3:@:9:@:@;:@AjA@9A@™“c””icdccc2Áî"99AGkFA9 3:9 q:qAqAA9Ak: 3A:A9@ƒ:` ::::@@:: 3 9@: :@A:@9::9:@:@::@:@::@::3@::@: @@:9:::9 9 ::@:A@@kqAGjA:@ki™”cŽccc3ŽÁè2 9::4: 3@AjAA@::@Gq@A:q@kF3 @3 9@:G::9@A:39:@3 ƒ:9 3:: ::@@:@::9ƒ:@:@9::9::::: @ƒ:@„:9@:@ : 3„:@:@:AGjA@Aj A’™djccŽc]3cÁç/ :::9::3 3@A@k@:@::qAqGA@AA@:@@:3 k@: ::@GA:ƒ@C3:: 9 :@3:@@:@:@::3 9:@@::9:@:@9@@A:3@A:@:@9 ::9::rxqxGqHrxrqqHƒqGkGƒ“jŽccŽ92ŽÁæ 99::9:9ƒ:E 3 9AjAA@AkGk@AqkGj@kAqAqA@Gk@9 9Ak9@: 3: :3:@3@@Aj@:3::3::;@:@:9…: @A@9:@A@:xrƒx"rNrqrqxrxqrwqrwrGxqrGkGkG“™cŽ”ccŽƒc]c3cÁæ249 9::@ @9:3 kA2@kG@qGkGAqGkAA@k@Aq@9A::@@::9 ƒ:X3 :@9 @:@:A@AGjA@AA@k@949:9@: xrxrGkwrqrxrrwrwrxGrxqNrGrHwHqqrGqGrqAq@““ŽiŽc“Žc23c]3cÁæ33::@:@:9:@99@ƒA\@: kGqA:qAGq@:G@@::AA9@@::@:9::99:@3:::9@::@:k@ 399: 9 : AxxrMAwrwr@rGrxGxqxHxrxrGrqxrwrwrƒqHrwrrGqGAkG““Žcdc]2c3\Áæy::@@:@:: A:@3:9:3:9qAqA@:G3:@q:k@A:@k@A@:@::9;@ :: 39: 3 9;@:9 3 9@rrxqrrxqqxqxrrxrxqxqGAqxrxqxqxGxxqHwrxHqHxGrqHqNqqGrq@“™c”j”“c]3]cÁå :9@::A@@9:@3@: @:„@%A3Aq:@@AkGAj@AjAqA@:@:9 9: : :9ƒ:G9:AqqGrxrxNqrGwrGrrxrwrwrGrxrxqrxqxxGGrxqrxqrNqxqrqqHqxqqGrqAqG“™Ž“cƒc]c33Âæy9: ::@AA3:@:3@::A::9 3@::A@@:A@AG@k@k @A3:@49 : 9A:@GqHqqHrqGrwrrwrqxrwxqGGrxrxxGxqxxrxHxrqqrxqxHxqxqGrGxGrqrGrqHqAqqi““dd“Žc-c3c,c2Âç 9@:ƒ@3A:@@A :3@@A@@A3 qA39:@::@:@kqAA@k@49::9::9AqqGkƒqFGrqGrwrHqrGxHqGrxrqqGxxqxrxxrxGxxqxrHqHxqxrqGqrrwrqGrGqGrqrGqG““””ƒc]323Ãè :@:AjA@93 j : 3 39 :: kGAq3A9„:gqAq:@A@9::AkGq@kGAqGqHrGqrqHrwrGxrwrxqrNxrxrxrNqxqHxqxrxrxqxqGrxqNqHqrxrGrqqrGqrGqAqA™™ccŽ””2c]cc]c32cÁèy@::@::@:: 39@@3 @3A@@qG@:kGA@A@:9G@A9@@:AA@GA@qAGAkGkqAqGqHqGqxqrG:xrqHqrwrMrwrwrxrxqxxrwrwHqHxrwrrqrqGrwGqGrGqrGqGkGqA“cc“cdc]i3cÂéy@:@:@@:93: 9:: 39A@:@kA:@Aqk 3@k@:A@jA@k:ApAqkGAjAqGkGqGrqqGrqrGrGqqGqxrxGrxrxrNrxqxHxrqNrxrxqxqxrMrxHxqrHqArqrGqrGqAqAA™“Ž”dcc]cc”2]Âê 9::3:@;@: @ƒ:y@AjA@::qA99AA: :@j;@:A@kG:AGk@A@AqkGkGrGqBqqHqqGqGrGkNqxqGrwrwrwrNxqxrxrwHqHqxrNqrxqwrxGqGrwxGqHqGkGqqA““dcŽcc3c3cÂë 9 9:@3@:3 @:@:@A@q@A::3 „@h:@A@q:@qA@kGjAq@k@@AqGkqGrqGqrMrq:rqGqrqNrqxrNrxHwrxqrMrqrwrwrxqrxqHqHqrqrqrrGrqGqqGrAAp“Ž“Žicjc]c]3cÂì : @: A@A:9ƒ:y k@3A@@::@ @:3:@dGk:qGrA k@@:GA@AAkAjGAqGqGrqGrqrGqHqrrMrqqHqrqGqxrqrGqrxGxrxrNqxGrwrxrwHxGGrwAqGqBqrAqA“hcŽccŽc]c]9Âî„:8@::9: 9 @A kAjrqqA:@q:@qAq 3@:9 @A:k@k@jx@AkGk@kqGrqGrGƒqErMrqrGrqxGrqGrxGqrxGrxqNqxrxrxqHxqHxqrqqHqGqrqGqqAq@™“”jdccc”cc]Âïƒ:9„: @3:qqGqGqHqqAƒ: ::ƒ@Aƒ@_k :@@AjAA@@A@qAqHqGkHqqrGrGrxqxrxGrwrwrqGrqxGqxqrxrxqHwrGxqrwrxGrqHqGkrGrqGqAAq“i”c”c]3]3cÃðd@:999 ::@GqAqAAkAGq9::9A3@:@k:@A@:@j@AGjAAqqAq@GqArqGqAqrGqqrNqxqxGrGrNrqGqrrGrAxqxrGxqrxqxHqHqrqNƒqGrqAGkAqG@™”¾cŽ“]33c]3Äñy9 :A3:9::AqGqqAGjGqA@::@: @:@:Aj:@:A@k@AjGAqAAqkrqGqqHqGqrGrqxrHxqrq@rwr@:xxrxq@rNqGqrqNqrrqxqxGqrGrGqGAqAq:AqA“Ž”cdc2]cc2cÄð99A93ƒ:H@kGkAAjAqGA:9A@@::A@:@@Aq:@kAAq@kAqq@AGqGrGqqGrGqrGrGqxqxxr@rrxr@:Gxq@A@ƒrxGrrxGxGrGrqHqrqrrqGkGqGqA“™i“ƒc c3c]83,Äï+ :A3 @::@AAqAAqG@4Aj@@3::@9:@k::@q@;Fk@Aƒ@AAkAqAqAqHkqGrGrƒq6H@AqHq@@Grwr@rrxrx@xqwrxwqrxrqxqrqrwGrGAqAqAqAqA˜““ŽŽƒc]c3]2Åï::@:j: :9::AjA@@qA@@:AG::@: : :@Gq:@:3@k@Ak@q@AFkGkG:qHƒq :@::@:@33:9@:@:@:Ak@@:94::3@A@:@@A@j@kqrqGrwrqHqrqGkq@@:A:ƒA kGkqA:@::@†:9:: ::9::9: 3 bc“3ccc23,×òƒ:Nqq:AjA@A@@A:@3@:@:@A:@AG@A::@Aj::kA@A:@@rxqHqxGqGqG:GkGqA@jA@@k@:@@3@@3qA@A@A…@ :@9 399bƒc32cc-2c×ñ@ 9:@A@@A@k:@@k@:@;@:qA@@kGkAqAq::99A::@@A@@GqGq:AqrqG:qA:@kGkƒ:)@ rqrqHqAk@ApAjA@k@3 :3 @232cc3]2]3c3]×òi33A@:@kA@A@4@:@:@:qA@:@:qGqqAG:Ak@:@:@c:A@k@kGAq@AAqkG:qrqrqHwqHqAqGGAjAG:@k@A@9 3 @::9832]cc]cc]3c2Ùò :9A,:A@kk@:@:3@„:7@:3A@@kAGk@3:9:@:@::q 3AA@qkGkqrHxrqGGqGqGAqqAq@kAjG@kqƒ:94 k@:A:3@cb32cƒ]c3232,Úò49 :A@:@A@:A:ƒ@UqGqq@:A:qAjGqGq 9:: :qAqAqG3AAGA93GqAqqBqAqAAqGkG@k@:kA@G@A9@@A:@3::8c2c3]c32c]3Úó :9 39:@qAk@A@ƒ:SAqH@;@@qGqGrqrG3:@:3GqAq:@:9k@ 9 qGkGqGqGqq@:9:qGqHqGqA:9HqA:@:@:@29c3]]23\9]2-cÜó39 :@@A@AAjG@k@qAƒ:F@:@@kAkG::A@ 9A:9 qA:@A@A:@]“Ž““@A@:qHqAqGqHqHqAqr@A:9qqGq::@@:icc]ƒc2c3]]2Ýô3ƒ:ƒ@:@A@@A9@ƒ:<@:@AGk@@qGqAqA@A@:@kGj@A9]c3c232“::qqrGkGkrqG3::9 k@rGAA@Aƒ:\bc]“c]c3c23cÞõ39:9:9@Ad @k@A:k@:@Aq:@kqAqrqHkGqG@3:@A@@:A@k ,”]3ƒ2 ihcrGrG:AAqAAG@AqA@k@k9@:3 ci]ƒc]]3\]]ßö:::@:@@A@k@AFkG93 3ƒ:FFAGk:@AkG:@::@:k:@A::3223383“i“::k:3@:@GkFk@A@@A3 AkA99cb3]cc”c23cà÷"@::AqAkkAjAkAk@:@@k @AkAj:@AqAkG:ƒ@6k@q::@qAAkGkq@A@i@@A@:@:@@kGAk@3 @@9:9:“89ccc]32]3âö ::9@@k@A@AAqG@„:EGAq:GjG Aq@Aq@qAjAqGq@kA3@ApAGkGjAkA3ApA@@A: 3:933::9: 23b3c,9æ÷@AA@@A@@:@k@qGGqA:@AjAGk@k@::9ƒ:.@AqArGk@@3kAAqkGqGqGq:@Ak@Aj@:::  cb8c22ƒ3]23ç÷P :@::@@k:9A@ :3Aq@A:jGAk@Gk:@@A939AqGkG::kApAGkGkGkqG:qAGk@@AkqAq@@Aj“™2322ŽiƒéøP::@@e@ 9:@k3@ A@jAAjA@@kGGAk@:9:Gk:9::@33A@qAq qqGkiAq@kGkG@AAq :2832233]2ìø 93:9:9:A@Aƒ:>kGk@9@@:qAq:9A@AA9: :A@::G::@@A@:3@GkGqc9@qGkGqk@qA@b9\98-222ïø :: 9 k9 q:@A@A@4@::Gk@A:ƒ@+AkGkG@:@@3@AkqkGA@qHqibc:GqA“GqA9::8c8]233,ñøƒ 2„:9 @AqG@jAk@A:Gƒ@/Aq@kAkG@k@:@A:@A3@GAqq@:qAkGAc::GkiqGkGb232]]9óøƒE39@@:@3Aj@@::GkGk::@:k@AkFAq@A9@:3kAk ,9@kGqGqih8:qGb9qAc8c2]92ôø„BA@ 9@ 99Gk@@:qAGkG@A:@kAq@AAk@GAAb,A@Akq““cb kGc2qGci]cöø…ƒ:>@@9A::3 @3@A@:AqA@jAjGkG@qA@k9:99@9ci“9AkA“™™h3 qAqqrG:“\]“Žöø‡9ƒ:@:@@:@: @@A:@ApAA@kA@94:3@::@ƒA:b8:A@qA™“™cb2GqGq bc3c÷øŠ]3\3: ,@::qk39A@qkGqA„@AqA@:@k@@c28::@ihbih3i:q““iÃ8ƒc3÷ø‹0c3c\c::@:3::kA@A@AjA:A:9kGk k@cc8]c”’ic“™2“ƒ™c“]Žc÷ø‹9232c3c:@AqAAk@:@A@@k@A:@@k@ AjA@9]b32Ži28“i’i™“hc3“cøøŒ7323,2@AjAGk::@@k@Aj@@kG:kA9:9 32c892ci““i’3’c“ib3“]øøŽ2332]@AAjAFAGk:AAjAA@ƒ:9: c]]9,i,cc™“™“h9iih“hƒc]cøø]23]@q@AqAjAq@@AA2:A:9Akƒc32222]c“™“h““2bc8c3]ccøø”.3:@kGA9A@j:@ :39]c]c22c2c™“™i“hc8,c2]8Ž2øø–+:9@@@@49@:@:3@ c]9],32-83]cc“™h“cbc8cc3\øƒø›kƒA@:@cc]ƒc323]922ibc“™“ihc23]cø„øž"2:@-2,32]3,22cc]c82c™“™“hii8922c3ø„ø¡ c3cc32]9]ƒc23bc™“™™,b3233ø…ø¢]c3”cccc]92i™b™“™bc23]ø†ø© ccc-8]22„™“™83c\ø†ø©Ž]3“h“8“™“’“82]3ø‡ø©3ccbcic2™“™“i32c]ø‡ø­cibiih“™2823c3øˆø­ci“h“ch“22]]2øˆø® ccbcb8]33ccø‰ø¯ ci“c2cbc2,cøŠø¯ ci™bibcc]3øŠø° cc223]9ø‹ø°]c]]c3øøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ|72 —? / —KHrË —KHr- ß½É ß½2 â½ / âÉI!Ë âÉI!- +êÉ +ê2 .ê / .öJ5Ë .öJ5- y+É y+2 |+ ,/ - øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøßb“”,ÕøÚ 9ƒ ih23Žcc]2ccÒøÜ @@:322ƒc]3ÒøÝ :@:A223Ž“”ccc2332]cºøÍ3Aq@i“b2Žc9”¾cc3ccŒ2]9]]·øÍ:  k@22ic2cc]”¾”,3]c‹2]c2232·øÎ 3 Œ@A22ic3“”¾”c‹3cc]33¹øÐ: 3 9Š:3@A28Žcc]2Ž“”½]ƒc]ˆ232322ƒ2]3³øÓ33 3@:‰3@A“cƒc ”¸“Ž33cc]‡,2-2323,3]23²ø‘ Ä ‰ @“cdc¾“”,“]3cc22†23]92]3232c,22±ø’:Â@@3@::@ †'@r29\3cc”c23ccc32c]3c232-,2-33²ø’‹ ´ @3:@:@A3::ƒ):9929bcŽ3”323,Žcc]]223,23]]23°øŽ: 3‡ 3 9:@:@:¨% ::@93@  3@@3:@ 9:@ 3:h“cccc]”ƒc 3c33]323ƒ,c2c3,3,c«øŽ  9 3 93 :@3:@A@A@@:A@:9Ÿ :::9 @@A9 ƒ9!: :A @:9G: @9:i“cŽccc]i2Ž32]23ˆ]332-ƒ22c«ø 3::3:9: :: :9::A@AjAA@@9: ::™…:@ˆ:9ƒ:"@:@@k33A3:@:@chccd2cŽc3]2”c’,ŽcŽcªøŽ 9 3 @::3:93@9:@@:@@9ƒ:3 9 9:9:@:@::@:@…:@ƒ::@:@::@@9 9ƒ:$@ 33 @ 3G39:3A’icdcccŽ]9cŽc32’3,22c«ø 9 3 ::9: :@9 ::::@A„:@:3::@::9:@:„@:@:ƒ@:@: „@ : 9 9 9 9ƒ:&: :9::9@3@:@A9Aq:@Ab]3cc]cc“]c“Žc]ÂøŒ  3„:4 :@3::@:9@:@@9@@:A:: 9:49:@A@:A:A@@AA:@@:@:9:39…:@@::ƒ@%:93 3 @::@@A9@::cb3“Ž]cdc]“3Ž“ccÂø‹ 33 9:9@ :@::@:@:@:A::A::@:‡: 39:9:9:3:939ƒ: 3:@:@„:@9ƒ:@:9:9…: ::3@AkA9A@::hc3“Žc“Žc]3”2,”]]ÂøŠ 3 :9ƒ:+ @3 9A :@:@:@::A@::@9:@:9@@:@@::A:@:A::A:ƒ@„: @@::393 9 ƒ:::9:9 @:@3:A@k@ƒ:ibc]c3ƒc]3ccÂø‹93 3ƒ:@ ,ƒ@::@:A3@A@:p:@:ƒ:/@A:@:@::A@@:A@@:@@:@:@:9 ::9::@::@:: @@: ::ƒ: @A:qA@k@@:c8j32cc2c“ccÃøˆ 499@ :@:9Aƒ:@:@:9A@k@AA:9 9 ::9:: 9::ƒ@3@:9 39 „: 9:@‰:99ƒ:'9:9:9@@3:@@::@AkA9:Abic”cc]cŽ”Ž232Àø‡3 3 :9: @@::9:@@::@ƒ:@AkAj@@: 3 9 :@:@ƒ:Aƒ:A:9AAƒ:9ƒ@„:@@::::@ƒ:9 3::@3@…:@kG@:q@A@k@i“cccŽccŽ“cccÀøƒ2239 9::3::3@:ƒ:9::@:@:@ApA:@: 93:9ƒ:ƒ@:ƒ@6:@@:@39@::@:A:@9 :@:::@::@9 9:@ 3:@:@:@::@@Aq@kA@@iƒc]cƒc”cd]3¿ø†33„: 3: :„@::@ƒ:ƒ@:@Aƒ:9 ::9ƒ:9@A3::9 : @::9 ƒ:9 :@::@9:@:@:@ƒ:&@::@@:9@:: @@kAkAq@Aq:“cdcŽdccc3Âø… 9 @:9 9:@:33:@;@4@::ƒ@ :@k::@k9:: „:@::Aƒ:@::@@::@ƒ:@:@:A@„:@ƒ:@@:@:@†: @::@93Aq@@AA@kAq™cc]]3“Žc]cŽccÂø„ 3 3„: @:: A:@:39 9:A@:Aƒ:@„:9:9::@@:@@:@@ @ƒ:@:@:@@:@@:@: @:9ƒ:ƒ:„@„: ;@::@Apk„@ci“”c]i33ccÁø„ 39:@:9::3:@:@:9:ƒ@:@Aj@:@:@: 9:9:ƒ:9:94@:9@::9::9:@:@::@„:.@::@::@@: A:::@:9@:@AAq@;@@ic”cc]93cŽcÁø„ :94@3::@@ @@ ƒ:$@:A39:@:@:@@:@:3@@:: :@::@:9A::A@…:A:@:@::@:@9:@:@„:@::@†:@:@A9qGqq:@i’cc¾cc”c33cÁøƒ 3 9:93: 3 jƒ:3@:@„:@:A@:A: ::4:9::@:@@:@ƒ:@@:@kA9:@9A@:@…:@†:@:@::@ƒ: @9@::@:A:@kHqGA@“c“cccc]2c”cÁø2ƒ:9 3:@: 3:33:@:@@AA@AjA@ƒ:3@99::9::@:A@::9†:@::9::@:@:@:@9@:@:@@:9ƒ:@@::@@::3:@:@@k@AkGk@A@“icc]ƒcŽƒc]Àø ƒ: :@: 39:3ƒ:„@:@A9::9 9:::9:9@A@„:@:@:9:A::@:@@k„:@:@@ƒ:,@@:@ @@: 9:@:9:@:@:@@AqGq:k@“hccŽcd3c]c”“Àø 3:9:3:@: 2 :: 9 3::::@::kƒ@;@@„:@ƒ:@„: @@:9@::@@:ƒ@ :@@:@:@:@3 ƒ:@9::@„:93:A@4 9:Aq:@kqH@:@i“c]ƒcc22Ž”¿øƒ99:9:@ƒ:* 3@:9: :@: 3:AkGAkA:@::9:@:@:9::@@::@@A:ƒ@:@:ƒ@ :AjA:@::@ƒ:@::@ƒ:@:9@::@„:@@@::@:Gqq:A@ciƒc c]cd]c“c¿ø :: @::9:9::3@ƒ:@:@@93ƒ@ k@@9::@:@…:9:@ ƒ:9@A::A@Aƒ: @::9:@:@:ƒ@9::@:@::@@::@::@:@:@3::@A:@:ƒ@k’“cdd„c3d¿ð]c22,993 3ƒ: ::@„:@9@:@9:@A3A@@A: „:'99:@:@:@:9:A::@A9Aj:9:A:9:A: :9A:@::ƒ:@ƒ:'@::@:@::@:@ @:@k@AA:@Ai“ccccd23]cc¿ó,33 ::9 : @@:::@9::9@::„: A@9 kAj9::@:@„:@:@::@::9A:9Aj:@A:9:@::@@…: @:@:@@::?ƒ:&@::@::@:@:@:3@A@:@jA:jA’dcc]cc]cc3”3¿÷ƒ:F:93@A:::@ :9A@:@::@@Aq@@::@@A::9::::@::@::@::@A@A:@@::A:9AA@9:@…:@ƒ:@:@ƒ:%@:@9:@:@::9:A@A@A@A@“cdcdcc2]cc¾÷ :3:@9: 9:: @@A 9@@::A@ƒ:@:@3::9…:9::9 ƒ:A9::@::@A9:@39 93::9 9@@„:@…:@:ƒ:@:9:@:@::@@d@Aj@Akiccc]ƒc]c3c¾ö :99 : :@::93 9 ƒ:@:@:@@qA:@:@:A:@:9::9@:@:@A@…:@::9Aƒ: @::A@:@:@@„: @9::?:@:9 @@:ƒ @: :@:@::Aq:@A:jA’dcŽƒc]cc]3c]¾ö:9: 3@:@9:@@9::9:9:@:A@A:kGƒ:7@@::9 :@:::@:@:@:@9A@9A9::@@::@@:@@::@:@;@@:9@:@ :9„:@ƒ:@:3 @:A9@@AAk@A:@icŽ„cc33,i޾õ :9 :@†:@:9:ƒ:@:@:k@@Aj@@:@ƒ:":9:39:9:9: :33:93@:@:9:9@:3A3Aƒ: :@ƒ:@ƒ:(@:@:@:@::@:@::@3 @@4:Aq@A3@AkicccŽ]c3ƒc¿õ 9:3::@:@:9:ƒ:3:@9ƒ:@:AkA@AAjA::9:9:@ ƒ:ƒ:@ƒ:@::@::9Aƒ:@:::9:@::@:@::9@::ƒ@;@„:$@:@:@::@::@9:@k@Ak@@A˜ddccc]c]ccc¿õ9 @9: @:9: @ @@„:@:@:G9@k@A@k:@ƒ:9 @:: :@:@@::@@:A:@:@:@:@:99ƒ: @:@:@:9::@@:9…:@:@:9::@„:@:33@:AjGAk@“c“cdƒc]c3c3¿õ:9 „: :@3:A:@ƒ: @:AA@:k::@Aj:ƒ@9‡:@::@:9A9:9:9A9:@:@:@;@:@:@:@…: @@:3:@::@ƒ:'@:@:@:@9@::@ 33@@AjAFki“dcc]]9c2,3c¾õ! 2:9@:@A:@@@:@@9::@:@:G::@A@:@ƒ:9:::9:@9::@:A:9„:#@:@::@:@@:@::@:@::9@:@A:@::@::@9::@…:@:@::::9:A@AkA“cdcdƒc]cŽcc¿õ3::@ ::@3:AG::@ƒ:ƒ@ :@:j:@AjA@3@ ƒ:@9::@9†:@ @ @A::@:@:@:@:A@:@:@:93 „:@„:(@:@:@:@@:@:@:@3:: 3Gk:F@A“ccŽcc]c]]2¿ô3@:@:q 9Aj:@::@:@AA::@3@AG:ƒ@:@3:ƒ: 9@:9@:@::9ƒ:@:@:@::@:@::@@‡: @@:@::@::?::@„:@ƒ:@::@:@::@ @@::@kojcƒc3ccc¿ó/ @3 3@::9G3@AG:@:@:@:@:@:@:@@:@:@::3:3:9::9:9ƒ:@:9ƒ:9A::@:@„:?@::A:9:@@9:@A::9::::@:9@:@9:@:@:@::9:@3@Ak @kid“iibcc\cc]Ž¿ò 3@3 ::9Aq kA@@k::@@A::@::@:@ƒ:@ƒ::9:9::9:::9‡@:@A@ƒ:9@ƒ:@::9A@A@A9::@:@:@ƒ:$@::@::@::@:@:: 9:: 3@@k9A™“c™h“hcb33„c¿ò# A3 kGk@A@3Gq:@A:@:A:@:@39AkAj@::9„:9ƒ:9:::9:@;@:A:A@ƒ: @@::9::@9A:9‡:9::9ƒ:::@::@:@::@::9ƒ:@: @A@@A™“™“iichc8]3cŽ¿ï :3@@3@@Aq:AA3A@:@ƒ:@ƒ:@Aƒ@ƒ:@ƒ: 9 :9 9::ƒ:9„:@A9:@:9:@::@@ƒ:@@:9@@:9::@::::@„:'9@:9::@:@:@:@::@:qAjAkF“i’“’icb83\cŽc¿ï=9: 3: @k@A qGqAkA@:@@:@:@@k@A::@:@@:: 9::9 39:9:@:9A@:9„:@::9::ƒ@::@…: 9::@:9:9:@:@ƒ:@:@::@::9::@:: :9qA@@Aq“™ƒi ’cc83]2¿î @@::9G3:AAj kAqG@q:@@::@::@Ak@ƒ:# 3: ::@: 99: :9 ::9:@:9A@::@:9:@::…:@„:@:@:9::@:::9:@:ƒ:"@::@:9:@:9@@:A@k@kG“’“h“chc2323Ž3¿íM 3@3:k:@kA3GqAj9:9:@@::@@:@:@:@ :9@:9:: : :9@9:@:@:@k@@:A::@@:9@:9::@ƒ:„@4A@:@9::@9@:9@::@::9@9: :9:@::9r@A@Ako“™ihcbib]2c¿í$9::9 3@3:q:FA@kAq@AAGkA@:@@:@::@:@ƒ:@:@:9: 9:9:9:9„:@A:AA@:@9A:@:@:9:@:9„:@@ƒ::9::@…:%@:@:9:::@9 @A@4GAjAqA˜“i’iibcc]c3,c¿ì „: ƒ:@@A:G:@k@@A:qAq@Aj::@:@ƒ:]3 3 ƒ:' : 94: ::9:@:9A@:9A9::@::@:9:@A:@:@@„:29::@::@::?9:::@::99:@::3@Aq9A@:@Aq“i’i“bib83c2c¿ì99@:39@ƒ:"G:3A:@::9 3@ 94:@:3:@:@:@:9::@:@:@ƒ:@9: 93@A@:3A@:9A:9ƒ@ :A@:@:@A@j@A…:@:9:@…:&@:@::9::@::@::GA@k@@k:G“i“ibci8c]c3c3¿ê ƒ: 3 9::: q9:qG:99:AkAG@@::@:@„::@::@:@@:@: 93ƒ:9ƒ:k@::@:9:@::@:9::@„:@:ƒ@:?::@ƒ:+?::9:::@::3@::@:@:kqA@A:@:qG’ih“bcbcc]c]¿ê9:99:9:@:9::q:GkG9:A 9@@k@k@†:9:9:@@:9::@@A:: : :9:9@@:@Aƒ@ƒ:B@4@::9:@::@9@:@Aj::9::?:@:::9@::@3A:@:@::@AGkAj@A:A“i“iichc3b3ƒc¾êƒ  ::@::9G:Gqq:Aj3::9„: @:@ 9@::@A3ƒ:9A:ƒ@:9@:993::@:@kA:@:@:3@:ƒ: @@A@3:@:A@@„:†:?::@9 :@„:@:@:GkGqA@:@@“h“b“bib9]3\c,¿ä: 9 :9::@:@ ::@A@3 ::k:k@@93„: 9@::A3 :@@9::@@k@ƒ: :: :9†:9Aƒ: :3@:9 ƒ:9@9:@::@::?::@::@9::@:: 3@:@:@:@::9@kGqA@@:@A“i“hi8c]c]c3c¿â9::9ƒ:9:9:@:2:3:@A9 qGq:9GAƒ:::@3::@ 9:9:@; 9ƒ:#@:@;9:9:3::::@:@9@:: 9 9@@A@:9@„:@„:@ƒ:9@ƒ:)::@: :@:@:@:@ :@AAq@k::A’i’iiccb9\9c,c]¾á „:@@ƒ:,49: 9@:A@q A@3:Ak@AGkGA kGk 9:@39:@3:::@„:9:2ƒ:9 : @::@::@9:@…:@:9::@9:@@::9:9@::9@:@„:"@:@:@:@:@:: jqGA@@3@“i“h“hib]c]cc3¿á 3::@ƒ:@::@ 9ƒ:@@A@A33ƒ:"F@qqAqA:9@:93 @3: ::9::@::9:@: ƒ:9:33@:9„: ƒ:ƒ@ƒ: 9@@9:A:@:@…:9@ƒ:9:@ƒ:!9:@:@:@3@:AkAjA: A“h“iibc8]3c2]2¿áƒ: :@:@9:@: : @:@;j@:9 @9::Gkƒ@9:9 3 @k@@:A@@ƒ:@ƒ:::9::@@ƒ: 3@ 9:3 „:3c2::9 33@@:@::?:@ƒ:*@:@:@9@:@:A:: @: :@q@A:j@A“i’ci“2c]c3cc¿á :9 @:@@„:W@:@3:@:@A@A39:: :@kGA@:3:A9:@93A@;@@A::@::9@@:9:@@:99:: 3@39 9:@:9:@:@:9:h 94@:@;@:@„:@9:9::9 9: :@A:@ƒ:33@AAqA@@A“h“ihchc32c]c]¿á9ƒ:%@::@@99@A: :@k@:@q @@k@Gq@:9G3:Gkƒ:@ j39 9:9@A@A 3 @ 39„: :9 9:93 9 :i3ƒ:89:@::@::9:9:@:::: 9 :@::@:9: A:9@Ak::@““ihhcb3c]c]3¿âH9@@k@@;@:@A@9 :@Ak 3Gq 39 k 3: 33AA@ AG9: A@A:@ :3@::99:9493 :@9:@ƒ:@@A:@: :@:9::@:@4@:@:@@Aƒ:@ƒ:(9 :9 3@:@:@:A:39@@3A@A9:@k@“iihc8c]c]c3c¿â „:3AjA::@k::33::@A@3 3  93@@:@3@j::9@::@@A@:@:9::@ƒ: :A@:3…: 9:@::@@A@:9@„:@:@:@:@@ƒ:@@:9ƒ:9 3: 9:@:@:@:@9@A3A@kƒ:@“o’c“cb32c]c2c¿ã99:9Aƒ@: :ƒ@ 9:@@AA@@3:@::GkG:Ak A9 3A@@„:q9:9::@9: @::@A3 99:::9: 3„: 9:9:@:9„:@:93…:?: :: 99ƒ:@:@:@:3:A@qA@ƒ:A“i“hibcc3]9c,Àäƒ:M@A@A93@;@ 3:@k@k:9:AG:q::@@A29:@:@:k9 :qAA :9:3@3@::@::@@AA@:@::@A@::9@ƒ: 9 9:@:@ƒ: @:@„:*9:9 :::@:@;@::9@Ak@k j @@“h“ibib]8]c2cc¿ä"::9AjA:3@k@A9 ::@qGAGq@@AqAq@:kGƒA :93AA9 :@q:9ƒ: „:@@:3@@:A@k@A:@::9@@:@::9:9„: @:@::9@„:@::9: :9:9:@:@„:@:A@@A@3A:A““ihccb9]3c3]c¿åƒ:y@:@39 @k@:@:@A@:@kAAk@@q:@@AjAqAqAAFk:3:@:@@:9: 33A9:kA@@:@@:@:9@;@A::9::9:9:@9 A:@@;@:9@:@@::3 9 ::@:: 3 @::@A,A@@jA::@jih“i’cc]c]2cc]¿æI:9::@ 9:3A@@:@kA::GqGkA:Gq:AGkG@:@3 @::9::@: 9 :@9:@49:@@k@A3:@:9 @3@ƒ:#:9:::@A:9A9@:@@::9:@:: :9::9:@„:@::@@jA:@@:AA“i’ci8c3c2c]cÀæ::ƒ: 9 ::9::3:9„@qAkGk:AkGk@Aq:@A@k@3@@9ƒ:3 …: …:@:AkAA:jAA@A9:9::9:9ƒ@ :3A:@A@49„:@9: 9: :@:@:@::@@:@:A@:@Aƒ: @@“i“hcb3c]ƒc]c¿è'3:9::@ 3@ ;@k@k Aj@:@@9Ak@A@dG@:ƒ:#:@:9:93 399:@:@:q@q3:A@:q@: 9:ƒ: @;9:9@:@:@@ƒ:@: :@3 ::@::@:„@:A::j @:@@k@“h“ibcc]c,cc]Àê:::@: @ƒ:"9:@AA@A@kG @:@A@@k@@AkAk9:@::@3 ƒ: @…:@9 3 9 :@:@:9 :„:@@3:::Aƒ: @:@:@9::@::…:ƒ@A:@:9@A: @k@Aj::@@i“hicc]cc]3,Àê ::@…: @3::9:9A3 2ƒ:<@:@k@A@;@@A@@ A@::9 99 @A@AGAAp:AAj9@:9:@: ::9:9 A9 ::@:@ƒ:9: „:"@::@::@:@:Aj:AkAk9@3@@3A@3@A@“iibƒc]cc2ŽÀì :9:39:@@ƒ:yA9:qG3G 2 :@:@Aj9:k@qAk@k:9 :@:3A@@jAjqAA@:q@ ::: :@: @:9@::99:@::@::@:@:@ :@9@:@:@:@@:@G9: 3A@::A9A@“h“cc]cc]c3cÁë:9ƒ: @A@::9:@@::Aƒ@6kGqAk:@:@4@GkA@q9:9:@333  9A@kGjAA9 Aj ::@@:993„: @:@::@:@:@ƒ:!@3:@:9::@::A@@:A@kA9: @@A:@@:3@A“ƒcc]c]c2cÁì,:9::@:A@:39A:9A@kq;@kGq@:@: @@AjA@:@:@:9 ƒ:@A3ƒ:3GkA@@:@:999ƒ:ƒA9:@9:: : 2::@@:@9 ƒ:@ƒ:@@j:@:k@A@:9:@-ƒ@A3@“hƒc]ƒc3c,cÀí$ @ 3 2 39:Aq@A@@:GkAA@9 3AkA@:@3„:1@:3:9 3@@ @@:@A@:@A:@:9A@:@9:9::93::93:@::AA@ƒ: 99 99AA@A:„@3 ::@A@;j::9A“iccc3]c2c,Áï=4999 ::AAjA@:@qG9::93:@@k@Ak::933@@A3@::k]22i2cc99ƒ:9:9ƒ: @„:"@A:@:@@3:9:@:9 9:@:@k:@kA::k:9:„@::9:@icŽc]cc]c]cŽÁô: 9:3GjGAjG@;:3:9: @A@Ak@ƒ:9A:@…:9@3@b89“j™bc: 3@:@ƒ:9 :9: @@:9:@::@ƒ:93 3@@:A@@A@Aƒ@ :3@ @:;j;ƒ:@iccc]c]ccÁì(  :93@::@ :A@qA:@k@99:@@jA@A:3FA@@ƒ:@:@93 @:i3’“i“8b83@…:9„: :@:9:@:@A:@:::9: @:A9A@k@k:@kAƒ:3::@@:::@cŽƒc]c3„cÁì 39:@ A9„:ƒ@-kAk@A9: 323333:?AAk@A3c3 :9:9 :2cbc“i“iƒc9:::@:9:@39A@A@Aƒ:@:ƒ@,:@: :@::9Aj:A@@:@@:9@@@A:@9::@@icŽc]cc2c]Âë :@:A jA9::@9ƒ:GA@2A]32323]AAq@@kG3 AqAq„:&9c,3c““i’82:: 3@:9:::@:@:@A@A@:9@A„:@9ƒ:@:A@Ak@@:A@:: 3Ak@@;@:@:AŒcc„cŽc-2Âê :@ @@k9 A…:@:@ƒqrGqrqq@3@A@3@ ::@Aƒ@3A2:@A@@:  @kcc“h“i9:@3:@:::39 :@A:k@:jA@:@::@@„:9ƒ@AjA@A@::@:9:9@@q:@ƒ: @i“cŽc]c]ƒc2cÂêy: :j@A:A9@:@@:@:qHqGqrGqG A@33@A@k@Aj:AkA@AAjGqA@A2AjA:GAG“i’2c9 9:@9::@ 9:393A@@::3@:A@3:@AqAkGkqrqAqqk@:AGq;q@A:@3@i“„c3c-2]Âêy@::@A@9qA@3 :@::@AqGrGkAAkA3:G3A@kjAAq:@kApAAkAkAkGkA@kqqGqGqrqGrqGqrHwrqGqrrGArrqx:rxqNr@rqxArrwrxrqNqGrqrGrGqqrGqGkA@A@:ihƒcd]cc2-cÂé :@@:A3 3A9: @@:@AkGkqG@AqGqƒ:i :Gk9AqGqA@qAq@GkFq@qAq@GAqqArqGrqGrqHxrrwrGAxqAwAwrrxqHrqxAqGrFrwrxrwrqHqrMrqGqGrqGrAqGk@Ajiccdccc2cÂé$ 9::kA@@:A@3 3:A@AjGqAqAjG:@ @:@2::ƒ@R:AqGkA@kGAqAA@AqkGAqGqGqGrqHqrqwHxqrqAxrxAAw@rxqxxqx@rGrqrGxGrNqqGrqrxqHkGqAqqGkGƒ@ hc]cc]c3cÂê&:@:@k@@:kAqA@@ :9AqGkGkA3q@:@:@@: @:Aƒ@5:@:@:@k@ApA@qGkGqAkrGqrGqrGxrGrxqHqqxqxqrGxqxrGrrwAqƒxrqxqrGqqHqxGqqrGkqHqGkA@e@icd„c]3]3Ãéƒ:y@:@Ak@ @Aj::@k@AkAAqA:9AA@@: :@:@@k:@A:k :@:@A@kA@kAqGkGqGqrGqrGqrGA@qrxqHqxrxrGxrxHqxwrxrxqrqGArGrqHqrxqrGqGqGrqGkGk@A“ icd]c32]Ãé9…:$F:A@k@:9::@A@GjAq9@ kA@;j::A@3A:@:@k„@Y:@:k@A@kA@AkGkGrGqArGqHqrjqGrGrqGxqNqrqxqxqrNrwrxrNrqGqrGrqGqA@rGrAqAqAqAqAqAh“cŽcc3,3]cÄé):@@:: :@@A@::@:@:kGqG:9A@kG@Aj@3:A9@Ak9ƒAS:kAjAGk@AwAkGkGkGqrqGqrqrq@HqGqqGxrqxrwrNrxGxrwrHwrwrwHqGqrwrGqAAqqGqGrGkAqA@qAi’cƒc3232cÄêy@3@@9@@kq3:Ak:@:@9rqr@A::d::@:3A@G3Aj@q@A@k@GkAkG@kGkGkGqHqGrGqAwrrGkHqrxGrGrwrqrrwHrwrxHqrqqGqrGqHqGkwrrGkGkGqGqGA@:ciƒc3c3cÄê…: @kGG:9A@k@ƒ: GqGkAj :9@@:@:: @@ƒ:^GqAqA@kAqA@q@qGApAqGkGqrkqrGqGrqGqqrwrqrwrHqNqxrwrqHqxrMrGrrGrqrqGkHwGqAqGkAqA@j:“h“3cŽŽc3]2”]Äêy:@:@:AkAA:q@@:@:@ qqAqAA93::@:A9::@3@A@@A3: @A@qA@qAqkG@kGqkGGqGqrGrGrqHqGGqHqHwrqrwHqrNqxqGqqHqqrqxGrGqGrqAqAqAqA@Aj 3 iic]cc]2]cc“]Äê:::@49Aj9AG@A„:2@AqGq:@9:9:A@::]@:@AjAk@@939@A@@:AkA@AqGqGqkGkAqHƒq5GrqGrqGqrqGqHqrGqGqrGrqHqqrHwGrqqrqr@AqGqkGA@kAA@@“cƒc]9\3c9Äêy9:@:@AApAGkq::@:@k@AkG@AA :@@k:9c@A@:: q::A@A39:A@A@Aj@AkGlGrGqGqqHqGrqrqHqrGrGqAxqHqGrqrGqrqrNqqHqGrGqH@qAqrGqAkG@q@@: icc]cc]9ƒcÅê3@A@k@GkGAqA@:@: :AkGq„:3A:A: AjA@9@:: ƒ@U;9:@k@jGAA@AkGqGqAqHqqGrqNqxqrGrqqrGqrGqqGrGrqNqxqHqqrqGrGqqAqHq:A@qAq@A:cbc]c]cc]23Æë/ :A:@kGkGkG@3@:A9:qGqr:9@: kG@@A:3@Ak@:@@k@Aƒ:@A@kAjkG@kAqAqGqGrqGqqArNrxqGƒr%GqrqrGqqrqrrGrqHqGrqqrrGqGkAqAq@qA@k@ˆc]32Æê 9:9:@@AkGqƒ:„@3qrGqA::@3::9AjAk Aj@:Aƒ@VAjGk@:AjA@AGkGqGqA@krqkHqqBGkwrwrxrwNqx@xHxr:xNxqGqGqqHqGqGqGkGqA@qG@AA:@@i“cŽc]c3cÇê:Aƒ:&Gj3:9@:A:A3AqGqA:k@93@::@A@3@@::Akƒ:&9A@:@A@jAjAqAqAqqGAqHqrGqqH@qHq::qrG:ƒq+H@@qqHqqrHqqrqHqGkGqAqAqAj:kGj:ihcdcŽ3]2cÇé& ::9:9 kGk@::@::3@ qArq::GA:@9 Ak@::@ƒ:RAjA@@:A9: @@kA@@AqqGqAqGqGqGqrGqrqHq9rq@Hqxr@HqxqAqHqrGqqHqGqAqAqGkGkGA@AAq@A:i“„c22c]Èéy 9:9:3GkAG@A:@::@A3AqqGGq39@: 9AA@:9:G@:@@A:k@::93 k@A@k@AG:qAqArkGkGArxqxqHrGxqArqHqqArqr@:qxrNqqrHqqHqArqGq:Aj@A@k@ibƒc]c3-cÈé 3 ƒ: jG@k@Aq::9:99qrq GA 3:9:ƒ@]A@dc3:@kFAq:@ ::@kAGkGkq@AqqGqrGqq::GGq@qrrGqxqxrxqxGrGqHqG:qHqGqGqAqAGkGAjA@k@A:icc]c32]23Éê :9:9AG3A@@kGA@ @:@ƒ: G99kq@A@ƒ:T@k@A:@]@AkAq : @:A9@@AqAjGAq@AAqHqqGrG:qrGrGqrqHqHwGqHqxqqrqGrqGkGkqHkqGk@AkFAk@A@:h„c]32cc32Éê9 :: 3@:33GqAq@:@::@ƒ:hAGk k@kAq j:@:3]@@ :::3@A:@@qAqqAA@A@kGArqr:: qqArGqqrxqrGqrGqHqGqqHqGkGqqAqGAqqAkG@A::@“Ž]cc3]c3Êë3 @3@: …:9@:@„@3GqGk@A@:9:3AG3 3 8c33 3:„@KA@:9AA@AAqqkqAqk::GqG@qrGqGqHwGqHqrqHqGqrqArqGqGqAGAqA@AAFAjA:@9chŽicc232]Ëê 9:9A:Aj@9 FA:@;ƒ@kA:A@kGkG@kG3GqG::]2AkA@::Gk@3A@jA::@k@kAAGqqGGq:GqGkGqGkGrqrrGqGrqqHqrGrGqGrkGkqAqAk@k@kA@:93:hicc32]cËë8 :9: 3@:@A93@@:@@e@:qA@Ak@r@Ak@Aqq:@:qrGA@@:AjGk:A@AA@9:…@@kGqHqrq::qGqGkGkqGqGqAqAqGqGqGqGqAqGqAqAAjG@AA@:@@::ci\c]c32c3ŽÌëy 9::@::@A@;:@A93 @A@:@k@@AqA@@AkA:AqAqGrjA@k@GkFkAjAkG:@kAkA@qAqGrxGxqrGrqAqGrGkGkGqGrAqArqrGqAqrqHkGAkGj::@k:9@cb8]3c3]32Íëƒ:@Aq:@k@@ƒ:YAk@:kG:@AkAq@Ak@Gq:FkGqrqA@3 3 @qkAF:AqA9:A@qGkGkGk@GqAGkAAqqHqqHqqHqrqqrrqGqGrkGkAGjGjGkƒ:ƒ@:@:ƒc33]323,Îë8 33:GA3@:@:@3@@Ak3 j:@:qG@@k@kA@:AqAqGA@A3:93 @@;q3@qAƒ:AqA@AkG@kGk9GqAAqƒA,kAqrqGGrGqGAkAqGkGA@kGA@:@@Aj::@c823\32c9cÎìx9 9:@:A@A::A@@:@@A:@@:Aj;@AqAq@AGkGr@:kGqHqrqGk@G:qA9@Aq@k@@AkArxr3GkGkqGjAqGAGkAAqAqAAqGkG:qqGq:@A@:@::@ bc33cc323ÐìO :9: :@A, k9@A9:@:k@@A@@k@@kA@:Gk@kGqqAqGqrqGrGkGk@AGkG:9GkGqAkG9:@Gk@A@AqGqG„q%GqqGqGqqGqA@k:@A:@A::@:@@::]c2c]2,32Ðí" 9::3 39:9A::A:@:@:@;@dGAA@Aq:@:@qƒ@A@rqGqA@@:9:@AqqAq@k::GAqqGkA9qƒAjA@@AjGkGGrqrGqGrGkA@kA@@:@ƒ:@:jA::2c8]332c32]Ñí 9::9ƒ:m:@A@j::@A::@@Ak@jA3 q@3A@A:A@kGqA@A@:qHqqrGr@AqG9A@kAqqGqHqrwr99@A@AA@::AA@A:AjAAjA@AqA@:@@j3::9 c23c23,33Òî<:::@:A@@A@A@:@@k:A@:A@@A@A9@AjAj@A@kGkGkqrqHqrqqxA@kG:kFƒAkA@@AAFAAk@kkqAqqGqkqqAqGkGk„@A@:: :9 :bcc3c]232Óï :9 :@:@@kƒ@Kk:@jA:@AjA@:@kGkAk9:A@::@AAjGkGqHwqHqNqGqrAq@@:kFkF@Aj@kAj@A@A:9@:AqAGGqG::ƒ@:9;@:949:: :22cc2]]c3]ÔîR:@: :@A@9:A::9A@@AjAqq::@:k@qAG93 @:@jA@:GkGrqHqqGqrG@qAq::9@::Aj:@AqAAkAqwr 9::9„:@:@AkG:@::@3 c32cc3c]2Öï 3 9@kAqA@k@GA@k:@AkGG:…@ A@AA@A@A:Aƒ@:qGrqqHqrGkGkA@:@AGkGkGAqA@A…@A:@:@@A@kGq:9:@@::@@39 ƒ3:2ccƒ]2,9×ï! : :9@AjA:@AjAjA@:99q@:AjAAk@Ajqrƒ3$93Ak3::@qHqqHqGkGq@A::9A:@@::9A@k@k@…:@;@@3†: ::3@ 3: 22]ƒc3]2ØðF993A:@Aq:@@AkA@::@;:A@@AkGkG@qGq : qA@AG@A@@:GkA:GkAq9AA@9:393::9:9:9ƒ:9::9…:@@:@::9:9 9338]33c]c2Úð ::@@::9:@A99AqAƒ@:@d@:@A9:4@:@@:@A@ƒ:*9@A@:AG9A:Gk:9Ak@ @:@@::9 999:@@A@:@@:@ƒ:9:  3 22232cc]3Üñ 9:3  ::@@:@AkA:@3:ƒA@3:qG@AkA3:9Aj@@ƒ:;3@::kF:@9AA9:@:@3A 9@ qr: 93 3 33 @3:22c2c]2c]ÝòM39:@:@3 9;@Aj@A@:@@ @j:qGqr9:@:9@:@A@A:q@k9@@:@kAkA@@kAG@kGAk@A@A:@:@::@:@…:9 ,9322cc]c3àó 9A::9:@ƒ:2AGj:3@Aj:@@A@@ AA@A@:: @kA9:@Ab@:3: @G:kAGk@A@kAƒ@k:@::3:@ƒ: :933 2293c]32áô:99@@:9:9 @9kAG@:: :@A@;3ƒ@'k@A ::qGq AAj9AkGAq@3@@GjA@kA@AjA3@A:9ƒ@ƒ: ::3:9: ::829,3\c33äø :::AqA@@:@:@„:.kA@A:33 :9:GkGk:@@:9AkAjGkGkA9: qGqqkGAqGkA@qƒA@ qA@@3@G32,32 22,äø 3]39@:33 kGk„@D:@qk@@: 3@:kGkGAq@4A@q@AAqAqAq@k:AAqG@kqGAjAq::3 qGkG334932332]2çø2]cA@: 3GkA@:kƒ@*AG:A@k@A@@ 3933@@:AjAqAFkG@A@jG@- 9@A@A…@ƒ:9 : „233“32c]çø#3232, @@9@A@:AAjAq@@k@:3A:::@@ …:93GqqGc:kAA@:@ƒ:@jA::A::@@A@3 29c9]2]2cêøƒ ,33\:@@Aj:ƒ@3A@@k@A@AG@:@-@A3:@AqAA@@kAAkhqGq@k@@:@AA93:2:9 39„2c2,,c,ìøƒ3c23c::@k@:@AjA:k@A@k@k:@Aƒ:.@ k@@qA@AkGqcc:GkbAA@@kA b:c8382923223]3íø…H2:A@kG ::@AkGk::@:@AqA:@@: 9ch @@Aj@AFc:GqiiqkA3383bc2832]323]23ïøˆ2@kAAqƒ:@@:9ƒ@.::@k@::@@]bcd@:AqA™cb:Gkb9kGqAb9229c]]2322…cðøŠ@k@Apƒ:0@@:@;3:@: j@:A@3ch93:q@Aq“™hc qGcbGkG:cc]c,3øøŠ A@AjA@A@q:@:ƒ@(:A@9A: 39]2cb89@Aq@“™hc82kGbiG9:22c,323øƒø‹0@A@@A@A@:@A@:@:9:9: c32c9]::ibc“2c2AAqGk::b9ƒ3ø†øŒ3:9Aj jAƒ:kAA3A]c]2]33b2ƒcc2i“8ci9q:q™“832ø†øŽ/3 :::3:9, 3cc]c,23,32323cŽhi“’i’c““ci“2]]32ø‡ø“):9::323]23\93,23]2]c“i“h“ii“b“hc2ccøˆø–c23ƒc c3,32cb32cc“™“ih9bi“™“™823cc]øˆø—3]23233]]3223c“˜“bc8ƒ2iib9232øŠø™ 22c3\„c382c“™“ib,3cb]c,3c]øŠødƒcc223b™“hicihc8c32c]ø‹øcc]cŽƒc322i“i“hchc2,323]øø¢3]c“i8cbi’i“bcb232]9øø¢cch22c™““i“ib 222øø¢c]ichch“i™hi“,]øø£cibc2™“™“ib2c3ø‘ø£]h““ibih2“i]23]ø‘ø£]cb9bcbci223c]ø’ø¤ ]i“b2iic23ø“ø¤ cciicb8b]2]cø”ø¥ c]8292c3ø•ø¥ ]232c]23cø–ø§2,23ø™øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/ - øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø› ø¨øš3 ø§ø™ 3 : 3† øø„23’: :99 :933 : 9:@:@ø˜ø…,2 :9499 : 9 9:@A@@A::@A@ø’ø– 39ƒ:9 93 3: :@:A@Aƒ@:Aj::ø‘ø• :9ƒ:99:399:@A@d3:3: 9 93:9¡ âø‹2ˆ 99:@9: : ƒ: ::@@::A@@3 3@:: @::@:@›99Œ @Abb2cÉø”3:9„:$:99 @:9@:@@4@::@@: :39 99:@:A@@::@ƒ:@:•9AA9‰ 3G::9””c]cÇø‘ 9::9:, : 3A:9:A::3@:@„: 3:9:9:: :@:ƒ@:ƒ@:@ƒ: @:@:@:@::Œ 3:: ˆ :9:G23“]cc2]Åø2 3 3: @:: :@A9:9:ƒ@"3@::@::9: ::@@::@@:A:: 3A:@:@::ƒ@ƒ:@@…:  @:A9@@A @‰3Gƒ: 23c]c]”“cc,3Áø 3:: 2:@9::@„:'@::9:@@::A@:@ :93:@:@@::@@::k@:9A9: :9ƒ:@:@:@:9@@:9::@A@3A j 3@A9‡3Gqbcb2”””Žc3““Ž¿øŽ 3:9:„:@9::@9„: :AA@A:@9 @„:J@A9:3:@:@::@@::A@:@@:@A:@:@ 4 : 3::9:94 399 3:@ 9: @9A:@292Ž”“c¾“3”\¿øŽ3:9:@::9::9:@::@:@:9@AqA@ƒ:3:9::@ƒ:@@ƒ: 9 3 @@:@:@ƒ:@:@:ƒ@,::@A:A:@@::@AA@3 3 :99 39:@22c2”]3””,c3cˆ,232]3c¯øŒ534:9 @::9 9 :@::::9G::@@:@@::9: :@:@@::@::@A:9A@ƒ: 9::@:9@:@ƒ:-@3::@@:9@;@:@@::@@3:9:::3 :3 @38,cc2”¾”,“,‡ 232c]c]c\3®ò2, 99…: : 3::@:9A9…:%@@:j@:: 9:9::@::9339 @:@@:@A:@::@:A„:9:9 3 3::@@3: ƒ:, : A9@ :9A@9Ak28cc]3”“”]9cc]2]2332322323¯ñc, 232,3„,2ƒ:9::@::@@:@3::@ƒ: 9 @@:@A::@A9: 9:9:@:A::9A::949ƒ:@@:@:@::@:@::@…:*@@ 93 9:3 2 99:A:@3 :9: A@cc]ccŽ“Ž2]3]cƒ3 2]]3,33„,23ªó%,2,,223]c39 :@ 3::@4@:@:3 9:@ƒ:@A@:9ƒ:9:393ƒ:@@::@::@:@@::@3ƒ:@:9:@:@::@@:@@ƒ: @@:3@:9ƒ: 3@:@::3@3ibccc]”¾“]3c232„2c„2]23]32]ªø33,33]9c33@: @:@„: ::@: :@:@ :@„:@@:: :9:: :@@::9: @9::@:@::9Aƒ:@@ƒ: @@::9:@99ƒ:@: ƒ:9 3: G3@:9G 3::b933c]“]2Ž2]c]‹c2322323©ø2cc22]cc93 ::@:9:@@:@: 9::@:@:@::@A:9 399:9ƒ:9::9:A::@A:@ :@A@:@:@:@:@ƒ:@:@::9: 9:9:9„:@ kG3::@A:@93b82c””]c”iŽc2cˆ 3232323©ø 32]c3: ƒ:7@:: 3: 3@:9:@:@:@k@@::9 :9:3:::@::@:@9A@9:@::@A:3@9„:…:@†:9 @:@ A:@@9 3 9GA9Aj :9 ƒc ]½3c“”,c3Ž3c‰,-232,©ø„,23@: 9:9::999:@ 3 9@ƒ:.@@:@::9::::::9:@@:@:A9 3A@@9A:@9A:@:@:@A9:@ƒ: 9@@::@::@3@ƒ: @: 9: :3:9:93::9i]c3c2Žc,c223cƒc¥ø†3::9 9:@3 A 3 9: ::@ 39:@:@:Aƒ@†: 9::9 @:@::„: @@4@:A9 9A„: @::@:@9@:@::@ƒ:(@::@3:@:: :99 :9@::AA3::ibcc]cccc2dcc‘2cc¥ø‡::: :3 @- 3: 9:9ƒ:(@:9 @kG3::9 @:?::9 :9:@::9::@:@@:9A::9::„@::@:@„:@::ƒ@ ƒ@A:@:@@3 : : ::@A9A:@bic]c]ƒc2,c3c]2]32d¥ø…": 9 @j @:3@9::9::9@::@3A9A@-@:„: @:::9:@:@::@@A@ƒ: @@::@:@::@:@„:ƒ:@…:3@:@ƒ:@:A9 93 9:GkG9@:@ci]ƒc ]cd]cc23•c¥ø„ 9: 9:@3:@:@9@†:@@A@@3ƒ@A:9:9:9…:…:@:@:@:@:A@@A:@:@:@:@:@::ƒ@:@:@:@:@ƒ:99: @33: 3::GkG@„:bc]c]c]“c]¾2”]3¹ø„3:2:@4@: ::: :@:@@ƒ: A@AA:@AA9::@„:@:9@:@9:9A@AjA:@Aƒ@ :@@A:@::@ :@@ƒ:1@:@::@:@:@:@:: @@:: 3 @ qA@k9@:9c23]9\3]cc23“]c¹øƒ 3: @A::@: :@9:2:93 :@:@@q:j„:@:9:9 9 :?::@:9:@:@::@@::@ƒ:j:A3:@@ƒ:@::@@:@:@:9:@@: @:@…: @3::: 9:@GA:@:cb9“cc”“],”3¾]c]¸øƒ:9@:9@:@::@9: :@:@ƒ: AA@@::9@::99…: 9 ::9:9A:9Ak9Aj:94@:@9A::@::@@ƒ:@::@:@ƒ:)@:@A:@9::@:@ :@:@:q:@:A:@bc]c3Žc3“,”cc¹øƒ:;@:9:@@@:9:3@ƒ: @A9qA@::@…:9: 9:@ƒ:@@::@3@A@9::A:A@::@A:9A9@ƒ:@::@::@::9::39@:„@ƒ:3:F:qGqAk9@:8c3cc]“]23c]¹øƒ:@:@::@::A:93ƒ:6A::@::@@Ak@:9::9 :33:::@::@:9@::9A::9A:3::3:9A:@9Aƒ:@::@@9:@::@:@::@ A:A3@:@:@ 3ƒ:GkGkG::@cbcc]c]cccccc¹î ‹29 :@::@: 9@3 @:9:@::@:AkAp:@:@:93:: 39::9:@: :9ƒ:A:9::9A@9A 39::@:@„: @::@:@:@:@:@…:949:@@3@:3@ 3GA9::h…c ]c]cŽc¸í:@Š @::9@:A@A::@:::9A::„@:A@A::9:9::93 ƒ:@9:@::::93:@9:9@:3:@:9†:-9@:@:@@::@:A:@:@@:@@:@: @::@ @3 q:A@kG:@ch]c]„cicc3]¸í:9‰@::9 :@:@k@@::9ƒ:@Fƒ:5@:@@Aj@:9:9:::::9:3:9A::@@:9A::9A: 939:@::@:@@::@„:@:@:@:@:A:@::@:@:@ƒ:9:::@@q@A@Abiƒc]c]]3]c»í::3… @:9 @::@:@:@@::@@:@:Gƒ:@A::@:9 :9::9„:9ƒ:":94 ::@:9::9A:9 @:@ @@::@::@9:@ƒ:%@:@::@::@:@:@:@:: :@:qAAjAj“ic]c”…c»ì@4@ 3:„99:3ƒ:@::3@@ƒ:@@ƒ:j@@:@j„:93:9::9::9::9A:9„: 39::@::9A†: @::@::@:@ƒ:@::9ƒ@:@:@::9ƒ@A::qHqrqAA™“c3c]”cc3]c]»ê ::@9: :@ 9ƒ ::9 3:@@:9 :@::@@ƒ:@ @AA:Aƒ: : ::949:3ƒ: @::9@@:9?ƒ:@:@:@:@:@:9::@:@::@9:@::@:@„::@;9:@;@@:A:j9:@:AqGq:@@bc”ƒcc23cc»êƒ:3:@ƒ:53 @:9AA@9;@:: @@:@A::@:@@Aj@@:@9 39 9:::99:@94ƒ:9:9 @@ƒ:@ƒ:?@::@@:@::9@:@: @:@:@:@@::@:@:@::@@:@3:::G9@qAG:@@ic·”]cŽ]2]»ê(::@A @A9:93A9:k:9@:q3qA:@:@:9@:@:A@…:9 ::9:9:9 ::9:@:9::@‡:@@A@„:@:@ƒ:@„:@::@:@:@::@:@::@:3 @e@:A3 9„:@kGq::@chc”]c“c3cc»è::@3 @k@k3@3G:AA3 9ƒ: Gq4Aj::A„:/A@kAk9:::9:9:39::9 :3:@:@@:A::@@:@@3@:@99@@„:9::@::@@::@:@:@@::@:@:@:3 ƒ@: 9 :G:qGkG::@“icc]c3Žc2]cŽºç::@ƒ:#9:@A@@A94@kF::GqGrG9GA@Aq:@9:GjA@ƒ:39::9 9: 94 9::94@::@:A@j@A@A@::;:@4A:@:@@:@@:@:@ƒ:@:@:@ƒ:)@:@:@:@:@@@;9 3 9@ kGqA::@ih3c\c]cc”ºâƒ:#  9:9::@@:9: :3AA: qGrAq3:AjA@@ƒ:!9AAq@:9@@@9:: 349: :@@::A::9ƒ:9ƒ:9@@::9@:@::@::@„:@:@:@ƒ:@@:@:@:@:@:@:@@:99 33…:@„: icc]cc]3]“”¹à @9:3 3:@@ 9 „:-3::@j :@kA3AAG3G:@::@::@ApAA::3::9: 93 :ƒ:#9:@:3@:9A::9::@9 ;@:9@:3:A@@:@@:@ƒ:'@:@:@:@:@::@:@:@:@:j::9 :@:@@:@::@:h]ƒc]cc,3c]ºß„:ƒ@\9::@:@A@9:@:@:9::q:@@Aq 2qGkGk@:@::@@:A@:?::::@:: 99::9:::@:@:A::::@:::@:@:3:@:3@::@:Aƒ:@:@::@:@:@::@@:@:@;@:@3:@: @ƒ:@:@:9@bcc]c]c]cc3ccºß3::9 3ƒ 9ƒ: @49: @@ 3ƒ:9A:qA qGkGkA@99:@A@ƒ:" 9:9: :: 9 3499:@9::@:@@k@::9A:9„:@:A@A@:@ƒ:&@:@:9@:@::@::@:@::@;@:@:@:39: :@::@:@ƒ:@9:ii]ƒc]9]c”]ºß 9@:„@:@„:9ƒAj@3:@:@:@3@3AqG:39AA:@Aj:@9†:+@ ::949 934@@4@A@A@@A@:@@4@::@:@@:@A@@:9ƒ:@…:/@::@:@:@:A::@:@:k:::3@A93::@@: ::ibcc]c]c]9]»Þ3@:@:@;@j:@::9 3 @9„:@::@:qA@qAqAqGA„:@„:9:@:@:@ƒ: :::94@ƒ:A:99A::9A:@::@::9@;@::@;:9„:4@:@@:@:@:@:@:@:@:@A@@:@::3 3 9:Gk:@9:@cic]c]83b]22»ßO:@::A@@;@::3:@@:@9 @:@3@@q3G@A:@A@kqGA@:@::@9933 :9::@: 9 9::@:9@::@A:9„:@::@9:@9::@jA@A:@9::9@:@ƒ:,@:@:@:@:@:d:@::@:3 39::q:@:: :h“cc]c]]2]3ccºÞ @; @k:@@ƒ:, 3:@:9: 3@:@::@AqAA::@@k@A:39:3:9:@:9@:@:@:ƒ@:@39 : :94::9A:94@:9 :@@:@:ƒ@j::9::@:@:@::@:@ƒ:@:@ƒ:@:@:@:@@::34@ 9 ::@G::9:@ib]„c9]92c»ß:93@k@A@:@:@:@4: :A@:@A:ƒq:@:9@@Ak3@: :A: ƒ:+9:@:A@::939@@A@@A@@:9A:: 3::@:@:A@::9ƒ:@ƒ: @:@:@::@:@;@:A:@:@:@3@:@4@ :9 :@ƒ: kbcc]c]]c]c]¼ß ƒ:2A@k@kA@::@:@:3 3 :@A:@@@qGGq:@3 k@Ak@A9::39:@:9ƒ: @Aj:99A9::9„:@:@k@A:@:9@A3::@:@::@@ƒ: @::@:@:@:@ƒ: @::@:@:@@:@„::@@9A9„:@::9@A„c]c2c3c]3»à ::@9:@:@A:@qAƒ: 39:@@k :@,@Aqr:AA9:39A@A@9ƒ:9:„@ A@:3:939ƒ:@:@4:@:: @@:93 :@:3A:@:@@:@@ƒ:)@::@:@9:@:@::@:@::@:@:@3 3 3 9@A@::@@cc]ƒc]9\c]¼à@„: AAkF:k@A9:@ :9:@A:393::A:@:9„:9:@ƒ:!@:99::@::@::9: :@3:@:@::@::@9ƒ: @@@A@@3@::@A„:@:@:@:@::@::@@ƒ:@ƒ::@:: :9::3:A:@::@@“ƒc]cc]3cc¼á9::„@:@@:@@::33:@4@kF:9Gq@:jƒ: 9„:, @:@:@@::9::@:@A9:: :@::99 @:@:9@@A9:3 3@:@ƒ:@A:ƒ@A@@::9ƒ:@:9:@:@::@::@:@9:@:: 9::@: ƒ@j:@;hc]cc]c]2¾á; @:9AjA:@3@A@:3@:@:@@AAq kA9:3AF:GqAG@Gqq:@:c 3:9::@::94:ƒ@ :@:3@::9†:9 @:A93 :@:9A:@::@:@:@:?:@@…:@:@::9:3:@::9@39:9 @kƒ: @@ƒc]cc23]c¼âƒ:\@::@@AjA@@ ,@A@AjA@: :9:9A:q@kG:9: 3 ::9:@::9::A@9 :@::93: :3 :@:@@@:@A:9:@:@4@A:9@†:@ƒ:+@:@:@:@::: :@:@: :@:9:@3 @@9:9Acic]c]]32¾â!::9:@:3:9AAk9: @AjAkGjA9:A :Gkƒ@::9:@3@A@:@:@ 9@ @„:@:9 939 9A3:@@3::@;ƒ@:9:@@49@j::@:@:@9:@:@„: @::@@39::@„:@:A:: -@r : @’‡c]ƒc¼ä.99:: 9; jA9:3A@@A@kA@9:@:@:qGA@;9:GkGq:A@:@@„:@A@:3 9 3 3 3 : :9 33 3ƒ33ƒ:@:3:@A@@„:3@::@:::@:@:: 4@@::@@::9 9:9 @@:93Aicc]c8]32c]¼ä#:: 3: :@ 9@A9A9A9k@A@q 9 Ak@qqA::@ƒ: @A::@@k:: @:@j::@::9:9: @:@3:9ƒ:@ƒ:@::9 3::A@::A@:@::@::@:9@ƒ:@94ƒ@::@:@:@: : 9:2A:@: @“]„c823]c½æ6:@:@39:A@A:9::@A93Gq3 2 AqG3@@kG3GkG:@@@A:3:@;:99„:9:9:9:@A9 9:@:9ƒ:@3 ƒ:9Aƒ:@ƒ:@::@:9@::@:@ @„:@:@@::3:9 : : :@::@A“ƒchcb232]½æƒ:;@: ::33: :@:A@: :@:9:43A9@k:G@j:jA::9@::9::9: @:@A:9†: @A:@ 93  :ƒ@::9A:9:@:@:@:@:::@::@ @:†@:@:@:@9 :39:@:@3A@“c“bib923c½æ::9ƒ:@@:: 9ƒ:@AjA3@@„:!GqAA@@:q3GA3:9Gq::@9:@@:@@A@9 3ƒ:@:@:@@A@k:@@:9::@:9 jƒ:@„: 9 @:@::@:@…:"A:@;@4::@A@A3 :: @::9A@“ihccb3223c½ç<@993::@@3::@:@@@qGA:A:@:Ak@@:A@:k@9:Ak::33:3@@::3@@ƒ9@ƒ: @A@:9@::@„:ƒ@ƒ:@@:@…:-9::::@::@:@@:@:@:@3@A9@@:q:@:9A@“i“b9b92,]½èS:::@@:@A9 @:@@k@::kGkA@qqGq9@Ak@Ak9@A3:@::99::9;:9:@@AAk@A@: :@:@j:3:@:33@:@ƒ:@:@@::@:@9@:::@9::9ƒ@;j::@ƒ:@3 @4 : q:@: @ki’ibcb823,c½é39::@@A@A::@A:Gk99qAq@:GqG;k@GjAG3 A99::@:A@A::@9ƒ:&AA@k@A@@A@9::Ak:::9::3 @:@:@::9:@:@…:9 :3 3A:@@A::3@ƒ:339@3@::@3A@“i“b92933]½ê:@:Ad :93@kAA@kA qAqGqrqGGkGƒ@A9A3:@::@3@A9:@ƒ:„@kƒ@k@:@::ƒ@H9:9::39:3A::@:@@:@:@@:@:9: 343::@Aj;@::@:9: 94 :@A@:@:3A@“bicb92]2c¾ó#@:AG2A@A2A@A::GkqAk::AkA:9:@A9:@ @ƒ:"@9::@A:@A@4@A::9@:A@::3949: 9 @Aƒ@:@::@:@ƒ:/::33@:@@:@3@:3:9@3:9A@A@:: 9Akibch9b23233½ò293@:@@k@ @k:G:@AAƒ@ok@Ap@ :: :33:3@::39::@k:@:9:@@::A9:@:: 9::A39Aj@;@A@:@:@A::@9:: :9:@:@:@@:@A:9: :@@::@jA:@:3 kF“ib9\98]2]\½ñ]329 9: @A@@-G939ƒ:/jA@AqAkA@@:9:: @ 9@: @:@:@::@@:AkAk:@@A@A99 : 3ƒ: 3A:@@k::@::@:@::9 „:&@:@;k@@:39@::9@::@Aq@::9Achcbc823323¾í0,3223]@ 3:33A93:Aq:@:Ak@A@@Aj: GA:9:@:: @AAƒ@:949:9:3@kAj 3:9: :9 9@:@A@@…:@@:9 ::9@::@Aƒ@:@:9 @;@@4 9:@:A„: 9:ibic8c8]23]¾ê 232cc322ƒ(:9:@@:G::@qG9:9:@9AjA@AjA@3:9::@k@AkƒA@@:3::A@ƒ: @A: 9:@3@ ƒ:@„: @::@::@A:399†:&@:A:@:: ::@@: 3@@Ak@:::@chcb2923]c3c½é @39::2„:9 @ƒ:\qAA@@kGk@: @@3AA@k@A@::@::@:9 3 qApA:@AA9@@A:@99:9: @:93:@:@:@:@@3@:@:@:9 :::@:?: 33A:: ƒ@d:@:9::G:9 9@:ibic82b32]b¾é@ƒ: @ 3:3:: „:4@9Aq@A@kGAA@9: :@@k@A@:@@:: 3 @@3993@AqAjG3A@:9:: ƒ: :: 9 @:@ ::@333::@:@ƒ:@ƒ:„@:@3@:j;A@:::„@ :3@:cibc8332ƒ3¾ç@Aƒ@AA3 3A„@G9::GAAk@@Ak@@3 :9:@kA9Aj:@k:99:@: 3 :: @k@: 9: @A9:9A@A99:9::@A@3:@:ƒ@ @:@@:9:@…:&@::@::@:@A:9::@;9:@:k: :@ibcbc2232]2¾æ @@3;@qA39A:9:A„:qAqA@A,…:0c3 @Ak@AA:@: 9:@A:: @::@Ak@:Gkk::@A9@:9 9 9…:3:A:@:9 33:@:@:†@Aƒ@A:@:@@:: @:@:A :3 @chcb9b32,c¿æd3A3@AjA@3 G::@:@@9:GkGqk@@:@:@@c]@:AGkFk 33@::@:99393@@j:AF:@:@@:@:9::9: :3:9:@@9@A@::@A@:: : @:@„: @:A@:A:@:k::@ƒ:3::@::93@cichc8,ƒ3]¿å: :@A@k:39:@::@: @:@A@A@:A@ƒ:2:q@kA@33:A@:@„:[@ :2c8]8,A@3:9 @@439 :@@;:@:@::@:@A93@::@::@@:@:@Ad@::3 @:@@:@ 3:@:@39 3@chcb9232]2c¿ç4 :@k@A@3GkA::@:3@@3 j 2::9:92- 39 @@] :9A@4 @::9 ƒ@2cbc8ci2i9::9:9:494: @ƒ: @:@:@3:@A9ƒ:.@:9:@:@:A@:@@:AqA9@94::3@:@: ::9 @chcb29233cÀæ:@:@Ak@A9 3:9@:ƒ@;@:AkG 32]23]c39:ƒc8]c2-bc] q:9 423c3i“@“cb :9 :9 9 99@:@:@:@:A:@@:@:9:@ ƒ:(@:A@@:@Ak@Aj: ::9A9 :@3@:9 9:@cibc823\3Áåƒ::@:k@Aj: A:: @;@@:@3@A@:kAA@A:@@3@@4@Ak:Gq: 3A@ A92c8,ccƒ“ib9:33:9:3:@:A@::@:@:@@„: 9 39 :ƒ@kA@:jAƒ@: :9ƒ:@ ::@ƒ:9 @:ibcb92323\Àå9@:„@AA@3q@A9@k@@:A@rqqrGGjAƒ@":A9:@::@@: :@::Gqk@:9:b32]c“n“hcbƒ:@:33:@@:@A@kA9A:@A:@ƒ:9 3@@:A@A@jA@AAj4::@@: 9::3@ƒ:3 3@cbi83232]cÀæ-:@:@::q@AAqAq3 @k@::qHqGqqGqr:A@q 3 @::@:@@ƒ:@:Gk3 3@]ci“i8c@@::9:3, ƒ:>94@k@@A9:@:@:@:9:@A:@@;j:Ak@:@A93:9@399: :@ 9 ::ichc8b32]3ÁæyA@@;@:GkAq@Aj@ :@:9@AkGqqHqkAA9@kAqGk:9:@3@:9::@:q@@AqAqAA“ih“82A9A::9@:@::@3 @A@j:Aj:@@:@:@:@AkA@@A@:A@:@3@9:@3:@::@::33:@bib]8332]3Áå ::ƒ@ Ak9@@k@A@ƒ:AAƒ@kGrqGA@k@@A@3AAq@:A@A:A:@ƒ:A@AkG@A9ƒAi“239 3 k3:@„:„@ :@:@3::@A3ƒ:@::AjA@:@:@k@@4:@@@: @ƒ:@: 93@:cc8c2]2]9\Áå @::@4@ƒ:WA @A9:9:@jAjAqGqAq@AA@:qA9A@A9::@kq:::@q@:@k@:@jA9cb3822:9:9:: 9:9::A:A::@ @:3:@9:„@#Aj@Ak@:Ak@9: 3A:3 3A9:@::9 ::chcb8ƒ3,]ÂåU9:9A@:9 9Gq93qA9:@:A@AkAqGqA@3qAj@:@:@kA9AkGA:@:@:@AqA@Aqq:A@c]c83232:9:9@@:@@:@:9ƒ:@9…:9:@A:k@@:@A@@:@::9 9 9: @3ƒ:@9:@::hchc23\3cÃå :@…:5AqAqkGA@A@@k@GkGkA@49A@@A@:@GkAG@kF:A@::AkGqk@AG:@]ƒc““ihi83ƒ:9 :9 9;ƒ@:@:4:: :@A@Aƒ@':A@k@:@:@@: :9::3@::@9:3:@:cb98]32]9Ãæ89:@@:GkGA3:Gk@k@A:A@kAAq@3:@A@k:@Aj: 9k@kGk:GkG@@Ak@A@kƒ@c]cc“i“839:kG9:9„:@ƒ:@@::@@:@k@;@k:@:A@:@:: 9: ƒ:@::@ƒ: 9ƒ: hcb]9]3\cÃäU 3:k@@kFk@GkGq@:@:@jA@:qG: @@k@@A3@A:@ :@@AqAq@kq@AFk@:@A3:d“Žc“i’cb4A3Gk4::9:@ƒ:@…:@:@@A@jA@@AjAjA:@93::9 3 @:@ƒ:::@:bc9]]8332Ãä] :9::@:AqAqkAq@A@@;@:@k@:qr:3:@: 93:9A::@@Ak@@3GGAk@kAGkAk@@qGic8i2293:AA9:@:@3 @:@A:@9„:@k:A@k:A@A@@:: :9@3: @ƒ:9:9:@:hcc]9\3]23Ãä9ƒ:b@A@kAAAqAAjA@@:k@::GqGG 9:AA9A@:933@:@@AA@:3Aq:@AkFqAGkA@q @kGqccb:: @@93A9A@:Ak@::@:9:9:9:A:@@:ƒ@$k@Ak:9:3 ::A@::3:@: :3@:c]c]323c]cÃä:::@ApA@qAj@:A:kG@ƒ:qHqq:A@@kAjA@ :3kA@@kƒ@K ::@@qAAjAGkGkGkGkGqGqGqrqA:@: 9: 33:9:9: 999@AkA:A@:A@@9 9 9 @:@k3:9ƒ: :bc9]c]2ÄãX 3::@:@3:GkGkG::9A@@:A:9GqGkG:@@qA @@9:@3A@k3AAk@:@@:A@@Aq@kGjAkGqGqArGkAGqqAA :Gk ::@ƒ: 9 :@A@:Aƒ@kƒ@"j@4 3:@3A9:@@A399:9::9cc]8]32c3Ää 9ƒ:M :@qA3:9:@:Aj@k@:@AAqG:@:@39@jAjA:9;@::A@q@Ak@@:@:kA@AA@qAqGkGkHqqAqrqHqApqqrƒ9(GA@q::qrq@k::k@A@Aj;@;@:@:@ @:: j::@::9ƒ: 9:cc]c]3b3]Åä9 :@@qGAqG@A9@:9 :A@ k@kGkƒ:K9@:A@Ak @@:qA@k@AqA@kAkq@AjAjA@qGkGkGqAAqGqGqrGrGrGAArqrGAqxGAAqGkGAkGkA@qƒ@ Aq:9:3:99„:G9: :::b9cc3]3ccÅä…:k@q@A@A„:q@@kAqGqqG:9: 3@A@@:@::A@@AjAGjAqA@G@GkG@@AkAAkGAqqAkqGrqrGqrqrqxqqGqr:@Gq@kqrqAA@qAq@k@AkAjAA::@AAq@AG9A:9::9:8cƒ]b3c]Åä_:9  @:3:@A@k::9:A@qAqHqrGA 3AjA::9:9:@k@Gk@:@@kGkkAGkAqApA@GqAqAqGqGqGqrGrM@rqHqAqMrkAqrA@ƒqAqAq:@@A@A@@:@::@9H@@kA@:3 ƒ: 8]9c3c2]Æåƒ:y@@3:::kAG@3@:@AqGkG:q 3:9:@:@A@3A@A3@@AA@@3 9ApAq@qAk@kAqGqGqGkrGqGrqr@rxrqGrrxwAqrx@AqH3@@qG@rqrqxqrAqGkGqr:qGk9:: :::bc]c]c2]Çät9:@::@ 3@qAqk::@3:A3Gqq:: @@:9:@:@@:]@k A:@,A@@ 3@@AkAGqGAqA@AqArqGqrGkqG:qHwrxqGqrqxxGrqrx@rxAq@rGqrrGrqGkGqGqƒAqGA@A@@::b9]c]b3]Èä 9ƒ:3@39@:9 @9::@: @: kAqAG3kAA3A :A3c3@:kA@:@k@:9 Aƒ@BkGkqGkqqAqGqAqGrGrqGrqxGrGqrNrGkxqHqAqGqAqrGrGxqqGkG@qqHqAjGk@kAj@ƒ: b9c]c]923Çä9::3ƒ:@@:933A9ƒ:@A:3@rqG:GjA9 9:Aq9:cƒ@[:qA@@AkA:39:@:A@A@qAGqGkGrAqAqqGrqGqrxAqHqqxqGrwrqGxrqrGrqrqAGrqGkAqHqAkGk@Gk@A@::8cb3cc2]2Èå:9:@9A:A@A::@@ kG2:@::G::q@9ƒ:Ap 93@]]AkGkG:k9AFkƒ:NA@jAk@@AkGqAqAqGq:HqqHrGqGqrqGrGrqHrGrqrwHwrwrGqAqGAqAqrqqAGk@AqGA@@::bc9\c2]cÉå „:OGk@k@:@: @@:9: A@:@::qGq 9:@Aq9 39]@A@qAqAA@kG:@:@AA@Ak@kAqGqqGkA@qqGrqrGkGrqNƒqH„q)GxGrqrGrGqGAqAqGkGqGAkFAk@A@j::@:bc9]c]c3Éæ9::@ ƒ:`@::9:Ak@A jAk@@9AqAq: Gk@A: 3c 9:A@@39 9A:@A:@k@jAG@A@kGkGqA@rGrAqHqGkGAqAqHqqHqHrqrqHqGxqrqqA@ƒqGA@kGkGjAq@A@Ak@c8ƒc]cËå 3::3@@:@ƒ:FkA@@A@A@AA9AqA 3 qA99 ƒ:\@@@9A3@@3@A@AjAqqGAk@AkGqqAqqGqqGqkGqqGqAqqHqqNqGqrqHqGAGkqGAq:AAqr@A@A@@kA::98cc]]9]2Éæ 9„:  3 : A@9:@k@k@q@Aq@qqAq@A9: 9ƒ:\Ak9:3:@ :@ 3AjAq9A@AkGkGkGqArqHqAqGrGqGkGrA@rGqr@GqrGAGkGkGqGkrGqAjAqGk@AjA@A9:99cb]9c2cdÉç*3 9@::9 k@:9k@::A@A@9:A@AAqGAAkqAqG9:@99„G:@:A@k9A@AAkApAqG@qAqqGqAqGkA@rqrGqAqGkqG@qAqGkApAqGkqGqGkGkAq::A@k@Aƒ: @9bc2323Êæ99A ƒ:y@4@::A:9:3@@@3Aj@@rq@9AGqG:@G: AqA@A9::k@k:@A:@jG@kAqAqkGqGrGqGqqAkGrrwrAqrqGqAqHkAkGqqGqqGkAAkGkGA@@qqA@::@::9c9c]323Ëç 3399A@Aƒ@t::@:@:kA@:@:AqAAk@kGk@kA:@qqAq@:AqG@@:@::@AkGApA@@qGkGkAqrAGkG@:GqG:qxrrAqrqx@GqGrqHkGGkGqAGkFA@qA9:@@::9 28]233]cËçy3@A3A@k:@k:@@:@:@A@@AkA:qA@@A@qA@:qGkqrGA@AkGkG:@::@@3:@GkAqAk@AqGkGkAA@rxqr@qAr::GGq:GqGqrqrrGAqAqAqAAqqAk@q::@:@A9::29]232c,cÌç :93:@:q@A::@ƒ:@A@jA„@YA@:AjGkGkG:AqGqGr@39:@:@:kA@AA@:9:A@AqAA@:qHqGkFqArwr:@qqG@qkG::GqH:GGqkGkGkGkGjAA@A@:@AA„: 9cb3c]c]9,Íé,:@AkG@@:A@@:@A@:k@Ak@kA@kAqAqAq@AkGrq@AA@ƒ:NAGkGjkG:@::@jA@qq:@:qAGkq:GAGq:Hqrq@HqqrqGqq:qAqAqAqAqAAq@k@k@:A9:@@:c8]cc2c3Îéƒ:(@@Aj@:@jA@3A3A@@Aj@A@k9A@A::qGjAGkq@AqA3„9=@@AA@kG3A@:qAAqAqAqAkxGrqkqGkqHGAqqHqHGqrGqAxqr@AqG@k@@Aq@Aqƒ: @::938]cc3]Ðê39@ƒ: :@;@: @:@@k@;@@::@A3@Gƒ:Z@:@GqAAqqGrHq49q9GkGk@kGAApAqAqAG9:AqA:MkGAGkqqGrqGqkGqrAqAGGkGAk@Gk@@:@A3@:9:@9 8cc]3c]2Ïë 39@@:9:@AjAk@k@A@k@k 9Aƒ@^k@@:@A::@:qGqGrqqrqGkAqA:GkGAjAjA@qAqrqr9A@qGkGrqqAqGrGkGqGrGAqAqkG@kG@kA@Ak@@3@::@3 c23c22cÐî3@::ƒ@n:: A@k@@A@qA::@:kAAk9@@qAk@rqrAqAG@AqGkA@kG9:@GAjAAq@@AxqxrGkGkG@AqGqqGkGqkGkqGqGkGqqAkGj@A::q:@@:: :823]23-3Ñî3]c9„:#@3@AkA@3qA:@AjAA@q@A9;@3@A@rGqAq:A@ƒ: @:AkA9:qAƒ@:AA@kAA@AqAq@kGkGAA@kAGAqAqAAkAkAA@@A@Aj@:@:: 3c8cc3]23cÑîp232-@3@3j@A@k@A3@k@A@j @@A@3:9@AqGkGAqqrqqHwrqAFkA:9GqAk@:@GqAk9@AjGkGqAq@kAAjAk@AqApAF@AjAk@@:@::@:93 3bccƒcÓðp23:@AAqA@Ak@@:@9A@A@kA@3:qq @::@@:@kGqrGrGqrGqrAFk@A@:A@k@k9Aqw jAA@GAkGkAqGqGqGqAAqAAk@k@qA@:@:@ 39 932,332,Ôð 33]3@kG::@ƒ:3 @A:@k:9@@3:GqG::@ 3A@:@kGqrqrGqrqGkAG9A@@k@qGA9:@A„@+kk@@:A@kAkGkGqApAkFA@@A@@:@:3 :@949323]c,Õñ\3\@ : 9A@k@:ƒ@99:GkGq::A39:@A@::9:AqGqGrGqHq@@kA:kAAk@kGkAqr@3;:@AAqAqA„@Ak@@:@Ak@:@:@A:9::@:9 3232cÖó432:@:3Aq@:qA::@AjGqAG3:9:AjA:9::@GrqrGqGqA3@AqA@:ƒ@3A:9:@@:rF::@:@kGjGkqAqAAkGkG@@:@::3:: 993 229,cc]×õ,:@:A@@Ak@:@Aƒ:"@;@:@:@AAjA@:@:@GGqrqGk@A3@:FjAk9ƒ:@:@A:9:@@:@:9:@@::Aj@@„:@ƒ:33ƒ: 22323Ú÷@:@Aj::@@AkA@:@ƒ: @::9AjGqA@9A@ƒ:@@A:@rqGkGr :GA@@Ak@:A@@:9::3ƒAkAƒ@:@:@@:@:@3:@: 2ƒ823c,Üø@:@A:@:@:@@:@@ƒ9 ::A@k@A@::Ak9:@:@:@A…@ :93:9 Ak:@:@ƒ:"Grqq93kAkA@A@::3:9 3 9 93]3cÝø= 3AkGk@k:@:A@;:A@:@:FkA@:9 :@kFAAqrqG:@A@e@:: 9::@@:33 3:9ƒ:3@ 39:93:3@A9 9:322823]\3Þø @@kG…: Ak@:3 93„:@@ :9„:+@@A::3@:@:GkGq qHq39 3@:@:33 :@ 9:339ƒ:  223-2]áø @AkG@k@9:@9„:@9AA99@::k@:A@@9 3qG@AA3@@:@A@::@@A@qqGqAAG ::9: :::9:3 9 ,ƒ2232ãø3:@:@@::@::3::@@9:@::@c3@k@AA: Aqkqh@;94@:jA@A@†:9:939:9: 3 33,22333]3äø  3 :@@A:9…:8@A3 3@k2ib9bA@@@k@AicqA@9AAqAk:@A:::9:4 :9 :2ƒ 2, ,32èø„639:@:: @@33@]22]323bib3c@AjA@:@b :q@A3@qA@@qkG@:A@ƒ:A@: @q222-2-23cëø‰.:@@:3c33]9]323232c8]3::@@A@kcb::Aq83Gk@ 3:@:@ƒ: G@9:3 ,22ƒ332ïø‹?3cc]cc2]2323]23c8c@AA@kAhc82:Gkc kGk b:@::9:3:28323232]2òøŒ]…c632-23c]2c23c:jAh“ib38 q8b @Aqb9b283b92232223322-2ôøŒ,3]2-,3223]c]282cccb3““822 kGi,GkA223c3„ 323233\]9õø‘ 3c2-]3b3832ƒc#i“h™8cc2AqAqAq 823cc]3]3\323,3232øø•3]…c83cc“’“™29’cAqi“i’232,32‰232]øø•c2ccc2b]c“™ib92ch““bb“ii3ccøø•]ccŽcc238cc“™“8c22“i2™“9,2,cø’ø—]3bc283b“i’cbiib92“iƒ2ccø“ø—3cbi“bci“iibiib2c2c232]ø•ø—bc23h9bibhiibccb22c3,93ø•ø—]cchc2i“i“hhch23]32ø˜ø—3cbc2c“’™“c™i8,]c2ø™ø˜]ib9b8cbibc’3]3ø›ø˜]hcbc9b9“hc3øžø˜cciibihi3232øø™ ]]82c2i,3,3øŸø™ cc29223232ø øš,3\323,cø¢øœ23ø¦øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/ - øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø‰22ø¸øøÄøøÄøøÄøŽ22ø´øøÄøœ]c]ø¥ø’23ˆ 22,c  øø’32 33 3 9øšø¡3 33ƒ ø—øŸ 9 3 3 :9 3 3ø“ô,2¡ 3 9:9 99:3:3 : @:øôc3,322]š 9 2::9 39 9 993@A:@@A@øö,3323™ : 3:99949:3 3::@:@A@ƒ:ƒ@ø‰÷2,323,– 939 93::3: 99 ::ƒ@ƒ3::@A@: 9ø‡ø2ƒ,:@ @ƒ:93:„:3:9A3 @:@@9 33@: 9:ø„ø„/323232]3\32c32]22 :94:@::9:: 9 @:9:::9@4@„:9 3 :@ƒ:@::øø„Ccc,3]cc2c3]c3]]23]3::99::9:9@::@:9:@@::@9::@9 :9:@@9 :@@:@::@:õø…322c]„c*]2c2c3c239:@:9:::9:9::9: :: @@::A@A:99…:@@3 :@:@ƒ:@:òø‰%cc]c]cc]3]b33 :3 939:3 9::99:9:A…@„: :ƒ:@::ƒ@ :@:@@ƒ:@:îø‰c3]3c]3c]23 :@3 @:3:::@3„: :9ƒ:$@kAk::@ 39::@@3 @9A@::@@9 :@::@:@@ëø‰Kcc2]8 39: 9:: :@:3:9 @:@9:A9@@A@@:9:999::@::@A3 3::@::9A9::9A@A:9@èø‰@3,c332324:@3 3@::@:@::@@::@::A:A:@:9:3:93::9A:93A@ 3:A@…:@Aƒ:@:@:äø‹Pc]],]c9:@::@@3:99:9@3::::3 :@:@:@9@::493:9@@ 3 9@:9@A3:@:@@:@@99:@:@4@:@áøŒcc23: 9: 9:9:: :9 9:9::9:@†:.9:3:3@:@::9@A3 3 :9AA9:@::9;@;::3:9A@:: 9 Ýø‹323] : 9ƒ:@3:9:: 3:9 ::9„:9@::9::93 ::@3:9::3@::@::@k@ƒ:@@:@9A@A:::@:: „@ ×øŒ,3:ƒ:9::@@:: 3:@93::@:„@::@@::339:9@4@;3 9:::@@…:9@:9A9::9@;:9@@3 9@3AA::3GÕøŒ33::9:::@:: 3:9…:A@:A@ 3 :9 :3:::9:@:9A@: j@A@:9@@::@::@:@::9:9:A@::@:939:q:Óî “ 2:@49:9„: 3 @9:3ƒ: @@:@@:@:3ƒ:"3:9:93@@::9:@:99A:@3:A@:9:9@ƒ:ƒ@43:@:@@A@A9:@33Ðî :“ :9:9::ƒ:@ 9::93::@ 3:AG:@:9:9:: ƒ:@::9::9: A@:3A::3ƒ:@A:@„:@::9: 3:@:9@A@33 :::Ìí:@’ 9:ƒ:@ƒ:3:39::9::9 @@4@@:@:49 ƒ:9:3:@::9A@:4@@k3@A@@9 A9ƒ:9:ƒ@ :@::@@:@:9 39ƒ: A3Aj 3: 9A9 AÆì:9:9 :9@:: @@ 33A9:9:@::AkG3@:@ƒ:%9 :9:::4:9::@A9:@:4@A39:9A@:@::@ƒ:ƒ@ƒ: 9::3@A@: j:G@3 A@::99:3: qAAbi2Âë :@:@A3::@Œ: 9;@:@9@@3 @:A@::@::ƒ@AjA:@Aj:9::99„:9::9@::@@A:9@:9:@;@ƒ:9:@@ƒ:::Aƒ:#9 @@:3@@ 9 @3 k@ ::3: q3“8cc¿ê :@:@9 33@Œ: 9:@9 AA3:Ak@@3 9ƒ:@:Aj@A::@::4::3::9:@:3@:9A@3Aƒ:@A@::@::@@:@::ƒ@-::9:9:@::3::93@:k@4 3@ 33A@@3A9G223”cc¼ê :@::A949::9ŒP @:@ 3Ak@@k@A3:9::@:9Aq@@:9:@9:3:9:9::9:@4:A9@@:@::@:Aj::@:@@:@:@::9:@@:ƒ:@: @A9:@:: 3: 33 9ƒ:k:932Ž]ccc3¹è :@:9::@9A::Š' 3@: :@G:kAGk ::@:@@:GA::9::9 :- 3„:R9:@: :A@:3A@:A@@A@k:@@A@:@:@@::9::A:9@@:@:@:3A@499 :3 9: 33 @ 3GAG23232cŽc23¸ç:@:@A93:@A@:9‰ 93@ 3@kAj:3A„@6:9::@A@::@:: 9:3 :99 @9@::9::@3::@9Ak:@k@@ 3@@:@‡:4@:9::9A@: ::@ 3@@A@93 :9 :9 9:A93q:8\3“,”cŽc3½Ž\c2´â@:@@:@:: :9A@k3@ˆ:933Aƒ@:@G@3:@:@A::A@k9„@339 :3:4:9::@3:ƒ:3@@:3@:@@:3@:@4@:A@;9::@:@:ƒ@:@ƒ:99@@A:A@ƒ: : 3: A:k ::@@ :3292””]”½c”2ƒ3,2±á@A:@:: A3@:@:ƒ@: A@:†C :3 k@A@:3Ak@::9@A9:9A@94@Ae@:9: 99:::9::3@: 9@:9A:@3:@A@3A„:&9A:9@:@:A:A:@@:: 9;@99:@:@:: 9339A2ƒ:9 :283c”½”,”ƒ 233232]2¬ß @:@:@: 3:@@A9:9Aƒ:@9::@A@ƒ 9 A@A@@k@: FAA3@A@„: @A9@:9::3: ƒ:49:9:::9A:9A@:3 :3@:3@@: 9 j@:9@:@:@::@:@:@@:@A@@::9ƒ:@:@A:@:99 9 9 q ::@32c2]3¾ƒ”2„ c,2333\3©Þ 9:@3 3A@ƒ: @::A@3:@@ƒ:@A@@A3 3: jA@d:: :3:j@@:@k9::F„:k9„:. 9::9 :::9@: :9A@:99A: :9@: 3@: ::A::9::@:@ƒ:@@:@:@:@@A:A:ƒ@9 3ƒ 3:93@AA3A:2c322c“¸“3ccˆ23c2]§Þ/9::A@@A3 3::@:@::@3A@:@:@k@3 :3@:@@:: 9:@:@†:.@Aq:@:9 9: 9 :3:9 4@:9A::9:: @:99:@3:9::9 @ƒ:9::@:@ƒ: 9:A::3:3 @:@„: 3@4 9 39 q G:Ak9@:99b3]cŽ”]c]† 332]2]]2§Þ A@@A@jA„@ :: :@@A@:9…:9 3 @@„:=9 :A9AA@:9@@Aj@::9: 99 :9 93::@ :@:@::9@::3: @: 3@:@@:Aj„:9@ƒ:@@:@:@ƒ:,@9@4@@A9:@@: :9:3 :3 q9 @A:93:8]23¾”32c32† ]232332-2¥ÞG@AjA@;@AkA@:@:9::A@A@4:::9A:9:k::@:9A9:94@@:9: jA@@::93: :93:: 9ƒ:W9 :@49;@:9@::9: @: A:@ :9:@@:@:@:A@:@:@:@:@:9 k@::9::@@3 3 29 9 :9:9:@ :83]92”23“333‡ 2]323323¥Þ @A@@k@k@@„:9:943:9:@@Aƒ:*qG:@9AG;@:9@3::AjAAkA9::339 3:33: @…:9@ƒ: †:@: 3A@:9::@@::@:@::@:@:ƒ@:@:@A: @@:@:@:: : 3: 3ƒ:AA :3 b232]c]232Ž2Š223]2¥Þ 3::3@A@A@:ƒ@ 9:Aƒ@k@A@A@:9::Gk@:q@:jƒ:NqGq:3@kG@k@:9::9 9 9 3 3:::@:@@::@::9@9:@@:@:9:@@:3@@::@@:@:@::@:@:;@:A@:@ƒ:&@3@@:@:: 9: 9 3A9Aq9 9 b233“”¾”ccdŒ,3¦à :AAkGd@@Aƒ:9:@::@A@@393A::GkG ƒ:9 GqƒA&@:@AGkA@:9::9 :393::39:@3@@:@A@@A@…:@:@Aƒ:9:@::@:@:@::@::@ƒ:1@@:@:A@:@@:A3@3A:@93:3 3:Gq:@ k 9398]3½3“¾]3]Œcc2,c¢ß:„@kA@:jƒ:G 3:::@A:9 @@:9@Ajq::9GAqrqGkpA@A@jAp:93:9: 9 :::4@ 9A::9@:@3A@:ƒ@:†@::@::@†: @:@3@::9:A:9ƒ: @:@@: ::@:ƒ @3 3Aq :99 :c2c2]3,c3323Œ2-cc¢ß :@@:@AkAA@@Aƒ@„:0@:9 kA3:A@@r:@kq@Aq:9AA:@jA:A9:9: @::3: 93: 93…:@:A@::3@@::9:@:A3:@;@@::@…:@: @ƒ:@@:@94ƒ@)::@::3@@:@399: 399Gk@3: 3:39]3c323]22”]Ž2d¢ß:@ƒ:)@kFkG@kGk:@:9@:@3@A@9:9@:q::@GAAqG3A@@kAƒ@:: @:3 3::3 994:…@XAj::9 A::9:@A::3@:@3A:@:: :?:@:@::@@:@:@::9@;@:@:@@:::@ 3:9 9:3@::9 :bc]\c3ccc]“3c³à::9:A@@A@@kA@A@: :A@:3A„:D@Aq9:GkGj3kGkG@:9Ak:94@@:9:@:9:43949::3A:@A@::9A@3::@:3@:9 @@„:>@:@::@:@@:@:@@:@:@:@::@;@::@:@3 : :999Aq : 9c8]39c]cc,3cc32³à ƒ:@:@@::@@j@3:3:9:@ 9ƒ@C:@A:A@AqA9AqAq@kA:@:93 @3 93::@ 3 9 9 :@ @:@:A@A@:93@:9@A@:: A:…@<:@:@:@:@:@:A:@::@;@:@3:@@j@::@3A39:3 :4Gk@3 3: c3\32]2c]µà ::@:Ak@A3„A::@A 9: :AA@:A:@:q@qA qGqA39„:9@3:@@ƒ: ::@3 34@:3ƒ:@k:@:@:Aƒ:N@:@:@A@A:j:A:A:@::@:@:@:@:@:A@:@:@:@:3 3;@@:A@A3A3:9qGqAG:9: b33½33c3cc3c3]²ây::@::3@99k@k@9Ak@A3@:9@@k@:9A@:qHjA:qGqGr3:: ::: :9 @:@:9 33:3:@3@:93@:@3A::@@::@4@:@k@@A:@@3@:@:@:@:@:@:A@:@:A@:A@:@ '@@;@3 3@@A@A9::GkGkA9::8b3”½””c,”]c]²â9:9:99AAF: „@3ƒ:@kAA::9AA9AAjGk rkGAG:9::99„:@:A@:9@49A@A:@:A:3:@::@:@:ƒ:G@:@@::A@:@:@:@:@:@;@:@:@:@:@j:@::3@@A:3 3@k@3G @3 qA9 9:b9\”]3“޽ ”cc³ãy:9:: @kA9Aj:A3:3::A@j@@:k@qq:@AA@@A39A::99::@@:@kA9333@3:@:@A@A9:9@::@@A@@A:A@94@:k:93A:@::@:@::@:@:@dA:j@:A:@:@:%@;@9 9 :9::@Aq:@AqG49:9\3c2]2323cc³äa::9:@k 9Ak:@AA:@3@@@kG:A9AqGq:@jk@G@3A@:93@@A@@A@A9: A9 9 :9:@::@@A::@ , 3::j:9 9:@:@@A:@:@ƒ:@A::@:@:@@:@;@:@@A::@@::3 3:ƒ@: 3:q@AkG::8c3]c]3cc,c´äƒ:S@:3@@::@k: @:9:@Aq @@AqHqGAA3@:AAk9 :9::@;@:j:9 9:@93:@:@A3@::@:3:@A:9::@:@:@…:9@:@:@:@@::@:@:@A:@:@:@@:@:@@::9 99:A@:94@Aq@A9:99b3bŽ2„c],´ä::9:3::3A@A9A@3@A@qA@kG3@:ƒq :@k9A:9:9A:@ƒ:29::@k9 @3::@@39@:@:3;@@::9@A@33 @:@3A@:@@@:@:@ƒ:5@@:@:@:j:@A:@:A:@:@;93:@3 9A3:3rGAk9::8]]39]3\c]·ä @: ::@ :, 3: @AAqAqA„:\49A:9@:A:: 99:@@:@:@:99:: @A:93 @:@::3@@k 3 :@:@3 @3@ A:@@3@;:@::@:@:@:@:@:@:A:@:@j:@:j@: ƒ: @3@3 3 9kƒq9@:cbcc\3233]·å„:ƒ@:@:93 3 k@kqAGk:@Gq 3 @:@ 39Gƒ:@A@ƒ:i@3AA@:A@::94: 3A@::@:: 3:393A@3A@Aj@:@:A@@:k:@:@:@:k:@:A:@:@:@;@@;@;@3 9@:@3A 99 943:AGk9 :@i3]c”“¾]c2·ç :@@A@A3ƒ:W@kA@kGqG9A:@9AA9kG:A9:G3@:@:@A:@@k:@3@@33: :@A @:@@::@3@::@3:@A:@::@:j:@:@:@A:@::@ƒ:.@:@k:@:@j:@:@A::9A@A3A3: 99:qGA99:@b2]]”]3c·ç*9::@::@A@9 @::@ @@A@qAk9:@4 93G:A9:q:@3 3ƒ:@@A@@: 9:: 3 9:@@::@Ak9 :ƒ @49ƒ:@3 @@k@:@::@::j:@::@@:@:@:ƒ@(:A:@:: :@: 93@A@A9 9:GqA9;:@ccŽ“cc2,c]·é0@A:k@k@:3@@::9@:k@AqA@:@:4GkA@::@Gk@AA@:::jA@Aƒ:.@ 3 @@:2: 3:@:@@k@ 9@@A3@::9A::@::@:A@:@ƒ:0@:@;@Aj;@@::@39:99 : 93@A@qGk93 :@cbc”]c33·ï:@A@A:93@@:qAq:::9qGkƒ@A:Gk@::@:9::@k::@†:@ƒ:ƒ:A39 3A:@A3:@@:9 @A94@:@:@:@:@@::@:@:@:@d:@:@:@:@: :: 339 3A@kA9ƒ:A49::bccŽ“d3\c·é 2-232,A@:jAƒ:A@A@3Gk9 :@:GqA:@Ak@qA@:@:Gƒ:-@:9:@@:9 3:999:9 ::@9@A39 9:3 3AjA:@::@:@„:@::@:„@+:@:@::@:9:@:@@: : 9 33:3:9 3:@9h]“33\c””·æ3\32cc3223@:G@ƒ:K:A:3 :AqGk9 @kGqA@@k@:@:k9@@:A::@:GA93:@:@A:@:@k@4:9: : 39 9A@@Aj:@:@::„@5::@:@:A:;:@:@:@::@:@:9A3@9:3: 99 9:@:3 99cbc33\3c3\·çc]3,233c 9:AqAk:„@ :@A@@@3@@ƒ:A:q:@::9@:9@A@k 9 @:@:A@ƒ: 9@49::9@ƒ: @A:@:A:@:@…: @::@:@:@j::@ƒ:%9::@:@4:@4 3 :3:9:33 9:9c923\33c]¸å2::2ˆ6]93@:@A@9::qrGkA@:kA3@A@::9A9:9:G4:::9AA@k@@3 3:@:„@A@@3 A 9:@@ 9@dA::@@ƒ:ƒ@:@:@:@:@:@@:9::9Aƒ:!@::3: 9 A3339 9: 3 :283]332]c¹æ3ˆƒc„:K@:AA9:@Gk@qq:A@: :k:9A@9:@@99@@:@:@::@A@@kA:@k:@:AA@A@j3::93 A:9:@:@:@„:4@:@:@:@:@49 :9@A:@@::@:3:9:33@3 3::9 3 9:b923\3]2ºå:99†G]c]23 9:@@k9GA9kGk@GAqGkAj:@:kA:@:@AA3A:@3@:@AA@:@AjA@3:@::@k@3 33 @ƒ:@@::@::@::@::@:@::@:@3:9:@A:@„:!@:A:: :@ 3A@3Gk: 3 :cb3\3293c¹æ::AA::ƒgcc-23]@9AkAkq AqAqqrGqAqA@A@9: 99:Aj9A@:A@ @@AjAjA:AA@@::@@k@@39 33 @@:A@:@:@:@:@9:@::@:@:@:3 ::@:@@:ƒ@:@:@@:: @:33Akƒ:939:9c3]33]22ºç29@@:9@]c]c]cc: 39A@A3@A@A:Gkq:GA@kGA:3::A@3A@:9ƒ:,@k@@A@@j@k@:@:A@AA3::49A::@:@:3:@::@A:@:@ƒ:!@@ @@:@@;@:@;@@:: :93@3::33 9A93ƒ 9:bc2]8233ºåY@A9A:A@:3] c3ccc3:@A@: jAq:@A@AjAq@k:::93@ 9@:@:9::@A:@j4:9::@:@Ak@9:93 3 3@:@::@49ƒ:@::@„:@ƒ:A:@@;:@:ƒ@!::@:39: @ 39 :3:339:9c83]33]2»ä5 A@:9AqAG:3::9:A23]9: 23@ 9:9:@:@Aq@AA@@:: @::@A:…@A:@A9A@::@4@@3: 9 9 9 ƒ@AjA@::ƒ@:@ƒ: @9: ::@:@::ƒ@%A:A::@:9 : :3A33 3@:: 3 :8]3b323]»ã:9@:@;@kGk 9::ƒ: 9@:@9 Aqkƒ:I9:9@A:k@@A:@3 3 @4@3 Ak@;@:9:@4A@A:@@9:@: 33 3@3A@:@A:@:@@;@::@:@: :@9ƒ:+@@:Ad@@d@::;9 ::9@A3 9::9 9 ::c3c3\3232ºã3@@;k@AjGk:A::G@:9@::A@AjG@:Gqq33 :qA:@j q@@:3@ƒ:)@AAjA@:9:9:9:@:@3@:3 9 9 :3 k:@e@@A@:@:@@„:39:@::9:9A@j@@;@@: A@3A:3:9 3@Aj @::33 @bb3\332]9»ä<@;@G@kA@:93G:@j@:AA:@::@A,@:@GkG:@k Aj@AA@@;3@@3@:93 qAk@ƒ:::@3 ƒAL 3 9:3:9@:@@A:j@::@;:@:9@:@3@ ::3A:A:A@:@:3@:j3A39:9 :Ap: :@  9::c3c3b332¼ã:ƒ@ kAq@A@3qƒ:A@k@@9ƒ: GkGq@Aq:@A 2@ƒ:$9@@:@@:3A4A3: 9 :A:@@33AA@::2@:9:ƒ 9:@Aƒ:@::@:ƒ@ƒ:3:::9:@AjA@@k:@:@A:: @3@: :33 @ :93 9 ::b9\]3\32¼â:@:A@AjAGj:: 9@Aƒ@1A@A@3qGqAk :@::39::AkG3Ak:k@:3:93:3:k@G:AA9@ƒ::3:339 :@:@:@:@ƒ:@::3@ 9 :9:::@:k@@;3::…:93: @3 3 3@:A3 :3::8]9]9],¼âf:@::@@AjAA9k::@@:k@:@A qGkGq:@@:@: ::@GkGA@::@3:A ::9@::@39:@A:@93@A3 9 ::@:@:@::9:@@:A@A@3 3:ƒ:@:Aˆ@":99 @3: 9:A@3A9 3:@:99 :bc9\3\3,3¼ãƒ@Nk@@AqG@3 Aq@k:@AjAj:qGkG:qAqA@c9kAqAk9:::@:A:@3:9:@3A@ 3 3:@::A3 93 :9 ƒ:A@@:@: @:@j::3 99::@::@@:Ak:@;::9: ::@: : 2A@9A3j:93@:8c3]92323¼ãPA:@:A@kAk@:AjA@:@AjAA@A:@Aq @:@:]:  q@:@2c2,3 ::@:3 :9@:@:@k:@A3 : 9@3 39:@ƒ: 3:@A@:@:A@@ ƒ:02A:@k@@A@@9:: 3@@: 99: A@A939:3 ::b3c\23]½á= 9@:A@jAkGAk9AGqAA3A@AjA@:@3: :@:@@:993 93Acc3cc]c3:@93:@4@3ƒ298:@@3„: 333:@:@:ƒ@ :@:@:@k@:3ƒ: 9@:k@:@3@:@…: @@:ƒ@:::93A9 :A93: 9@c8c]832¾á ƒ:@::@:9GGkAq@3jA@::@: :9@:9]ƒ:p@@cccŽcc2c:: @ 9322c8cbk@ 9:333:@:@:@A@A@:AjA:9 3 @: @:@@::@:@A3A@:: 3@@;@A-@A9:9 9:3@:39::i]3b922]½á9@::@@„:3@3G@@A3:Ak@9::33@@A@AA„@Q: ::9@k:Aq:3:3A@AkG32c8chc]3223339 99 @:@:@::j:@@A:@::9:3 @:@::@::@@:@@::3@@:ƒ@:3:9:9:3 9 :3 3 @:ibb9\23¾à :9:@ƒ:U ::93A@:@:@GA9@G@ qAkAj@k@::G3@ @:@AqAG:3@ 2 @323,2c]i™““9;933 4@A:@::A@:@AA33@Aƒ: @:@:@::@:ƒ@ :AA@:@@:@@ƒ:@: :@ƒ: 3A9 j:39:@cc8c23¾à9::@@:Gk9:9GG3@qƒ:"@:qAkA3qGqqGqA:A:@k @3A::AA:9 AkAƒ:92323ci’ihb 3@A3 3ƒ@ :A@j:@:@:@ƒ:99:: @::@@:A@:A@@d@k@;@@A:@:@:@3::@ 3A9:99:39 @cbi822,3¾ß:@ƒ: A@k@AAqAq :Aqƒ@ :A@A@AqqHqqAƒq @:Gqq::99ƒ:@@4:F:A@9 23]cŽ“iicb 3@34„:@jA@A@4@@:@:@ 9@3 9ƒ:@@:@:k:A@:@@:@:@Aƒ: 9A:@A@:A@@ƒ: 3 :@chc2322¿ßƒ:@:ƒ@ AkGkAq9qƒAjA@qk@AAqAqHqGGA@@kA A@: ƒ@:9ƒ:-9A@k:3 9@Ži“’i29@:A949: @3@: @AjA9A:k@:@::@: ƒ:@:AdA„@:A:3@::j::@:@@:9A:@9ƒ:A99 33@:ib9b22-¿Þ2 9@::@::kGAqA@:GkGq9:A@k@Ak@qGqGqrk:k@AA93@@ 9Aj ƒ:;9::@A@@GAkAqci]h22:@3: 3@::@:@A:@:@A@:@:@:9: 9 @k@@A@::Aƒ@A3@:ƒ@::3 :@3 3:@9 9 9@@cb23232¿Þ ƒ:`@:@@:k@ApAkGkAqAA9@AA@kFqAqrkGq@A@AjAAq :3@A@k9:9Aq@::q@G9@k@ci22 3 : 39 :9@A:@dA:@3@:@:@::9 3ƒ@:@:Aj@AjAjAk@:@†:  393A9 9ƒ: 9 : 3:“b9ƒ2,3¿ÞV9:@:@3A@GkG3@A@A@AjAAj@qAqAGkGGqr::qA@ :jA9kGkAjA9:G::GkA@:AkAA@AAbb323:9 9A4@:@::ƒ@4@:@k@3 @:@A:A@:@Ak@@A@@:@:3:9ƒ::3 A9A3@@: 3: 3@99\92322ÀßY :@:@@:qA@qqAk:A@@A@A@AqAAqkG: @@Aj@A@A3AAGj:: @:@:@qG::FkG:j]cc8922:: 3@3:@A@:@::@„: @:@:@::kƒ@ k@AA:@kA9:9 @ƒ:A3 9 @9A9:9 3 99\9822ÃÞ@ 3:@:: k@kGkAq 9:@kAj:@k:@k@kGqG3@@:AAj j:jGkA@:Gk: 3::@@kAq@:ƒcƒ“28 9:3:39:@dA@: ƒ:9:@3::ƒ@ :q@kA:A@@k@:@A9: @:: @3@ 33:3 ƒ:3:9 :39b9,3ÁÞ…: 9::GAq3ƒ:F@:9A@qA@:A9@@qrq Ak9 jAqA@Ak@GAqAG9::A@@:@AkGŽ“di’ic23 9 33: ::@::ƒ@:@ 3@ƒ:@A@@A@:k@@:A@:@:3@ƒ:@99A: 9 9 2 9:@ 3 3 99bƒ2 ,ÁÝ 3@:@:ƒ@NA:kGAG@:9@: @AAjA@: :@rGr kGA3: :@@: Aj9Aqk:@@:@kA::F:ccc“ih99 :3A:@:9:@ƒ:@:3 ƒ@4Aj@;@j:@@Aj@k@@::@:9 @ @:@::3A@:9:3 3339:2c83,32ÁÞ^9 ::@@:3 pAq:@@::9:AjAA:9:@rGqq :@k@kA9::@@:3: qAGG:AqA:q@33ŽccŽiŽi“bc39:Ak@@::3:@A@3@:@ƒ:3@Ak@A:@:A@;@A@e::@3@::99A3 9 @94::9 3: :99b22-3ÂÞO::@@::@:99:3:@::A::9A@@:@@kqqHq @AGA@A9:k@@:@q@k9GkG@@AqGccc”]8ci82 :9AFƒ:A9AAk@:jA::9::@@A@A@jA:@@k@@:@@9:@ 9: 3@A3 9@3: ::9 3: 3:2322ÃÞC 9:9::::@G kG@@A3:9A9A@-AGqHk9A3@:@,:@:9 9:@A@AkG:kGkAjGAkAAccƒcbbib:A@A3@ :9 3:@ƒ:9:@ƒ: jA@:A@@A@A@:@ƒ:"::3:: 9 @@3@ A39:49 3 39:8c2233ÃÞE :@:A@@A@:3 @kAk9 :9:@3 q@kAAG:3@@:9:9: :: 9 k@AkF@ qAqG:k@:9@A: 39ƒc 83@Aj@:@: ƒ:@ƒ::@99 3@A@@k@kA:jAj@;@@:9:9 :33 k 3 3A949 9 99 :99b2,3ÃÞ„:B@:9::@A@3@9 ::9::A :A:qqGjA9 :@::@:3@3:A3GAjAAk@9AqA@AGk@k::9:]iƒ2 A:@4:@@ ƒ:9:9::9 @:9A:@A@k@A@A@d:: „:3: 3 @9A99 3:::339:8]23-ÄÞy9 9@ 3:Aq:@k:3:3:9AGAj:Fk@GqrA@ j9 :@@33AG:@@:A@3@AA@9AqAjAGAA3@:G:829c@:9AA9A:339@:::::Aj@:9Ak@@A@:k@A9:3:93 :@ :AA9 k93 3:3: 948822-2ÄÞT 9:3@::@Aq:@A:3@ kkG::3GAqAqqA9::AA3:]c@@k@: j:@:q@k@ ::@@kpA@A@qA@A22ch:@j:9: 9ƒ ;2 9:@AA9A@@Aj@A@@A@: :9 3:@9 3:@j@::G39: :9: 3c832323ÄÞ 9:@A @@39:9ƒ:y :@::@9:9 @qAqA@A99Ap 23@:9Ak@AGA9AqAAj@:@:AGkGkAqAq3Gqc2:@:@:: @33@ , :9@:A9A@:@Ak:@:j::9: @9@: @33@499::@ 3::99\8323ÅßH 39 :@-G::9:@kAq::9@3AkGAq9 39Ak ]23@ AF:qAj:AGjAA@:@:@@kG@kGkAAqAƒqE 9:: 9A@A3::@@3:A@94@AjAA@@A@:: 3:@@4 A3@3 A9 39:49:3::93b92-2Åßf9:@A3::9:k 93AF393AG:33:3qGAkAA9A9 \33:@:9kG3@A@k@Gk9Aq@::@AjA@qApAqAAGqrGqA3 @j39::AA9:9 ::@:@k@@…:$@@:@:@@:@:@ @k@A ::9 @3:3 :8\2323Æßb: 3333 A@3AG9A@ :@ :3A:@::q@G@kA@4 99: 3:cc:A@@ k@A3AAkG@kA@kA@qAGkGqk@@;@GqkGAA49 9@3:3::@A@„:(939@:@::@:@:3@::3@A2@9 :333@9483832,2Çàb::::A @jA9::9:k9:@A@3A@A@@:@:qq:A93@33@A3cqAj::@A39Gq@qAq@A@q@GkGkGkGAqq:AqGq@3:@4 9:: @AjA@ƒ:@@;::@ƒ:9ƒ: :33A@433@3:92c2233Çá ::9kA@Aƒ@&::@:qA@q@k@A9:qGA@A949AA2A:cGkGqA9 ƒ@U AkGkGkG@AkAqApAqAqGq@qGkA@qrGGkG3::9:@A@::@@:@@:@:9::9 @3 3AA9 :93 :3:943823,3Èá 3@A:@Ak@3@;::@@:@AjƒAt@kAA9AkG33: :3]AjA:]qGkAA@9kA@:9:GkGAkk@@AqAqGqG@;qHqrGqkGrq:@krG@A@@:@:@:@:@;:9@9::@: 3A@9Aj39 : : 3:9 b232323Èäy@ @@Aq@@:@:3@::@:jG3qqAAq@qG 393\9]GA9:]:9 @@: kGk@3@:q@qGqAjA@A@kAqqGqGqrGrqGr:GqGr@@rqGqrqq@@:@@: :@:9 3 9 3AkA 33::@ 93:3832-22Èä3j:kGA: ƒ@,::@:3@A@:@AjG:@krGAG3]@@kA933cc:9AkA:3ƒ@MAkGqAAqAqGqGkGkrGqGqAqGqqHq::qGr:@qAGAk@A@A9Ak@:@3 33::G93: 9:::48]3\323Éä2332„:"@::9A@A@:A@k@@Ak@:GAjqA@3 99A@ cc2„:9AAp::@A:A@@qAqqAjGkqrGqGkGkrGrqrGrAqGq:qr9GkG:@:Ak@:@:@ƒ:@q 9Ak:@k: :9:9 93 32]2323Éå223::ƒ@1k: @:A9AjAj@;k@@:qqAA::qGqG 3 :9 399::@AjA@AA@:AjƒA(@qGqAqAGqkGqHqGqqGArwqqAqGrA@rAqA:k@@A@jƒ:@::@3:: @@:9 3@:: : 382]3232Êæ(33\:949A @A@@k@A@AA@AAk@GqAq@GkGqAjA9@kGƒAƒ@3A@@:33@@A@@k@A@AkGAqAqGkGqkGkqAqHrxAqrwAAqG jG@A@j†:@:@:AqAqq:A3@:93@3 3932232Ëæ+2]c:@9:@:j@k@:9Ak@q@jG@AqAAqAjGkGAkG:@39Ak@ƒ:kAA@ 3@Ak@Ak@k@AqkGkAGkGqHkGƒq)GqrwAqHqrqGrqAqkqA@A:9@9@qH@:qGqGq@ ::ƒ 3 282]3Ìç,3@ 3A@A@AA:@A@ƒATkAj:AjGqAAq:@AqArGr@@:GkGq@k@@3 k@@AjAA@k@@GkGkGkGkGqqHqAqr@AqGrqGqAqqGqGqA@kG9AqrGAƒq:A 33ƒ:3 393 2c3323Ìè"32-@3@:9:k@@kGjAj@9:@AG@kAqAq:@kGƒqZG49GkGqGA3A@3A9Ak@GjAqAAk@qGq::GqqArqrrGGAqGqrGxGqHqrGkGkAAqGkGqrqAA@AjAG: 939:39232]32Íê#,2 kAk::A@:@AA@@A::9AkGA@:G@kA@qAqHƒ:-9@kGkG@3:::@AkAA@q@qAA::AGqkGrGqHqGAjqGrGqqAƒqHqArqGqqAqGqrGAq@:qAkA@@A:@ƒ: 923232,3Íì^Gk@:@:9: j:@:q@@:G::@@:9:G@kAGqq:@G:@:@kAqA@A@9A@GjGk@AApAq@qAqGqGqGqAk@AqrGkAGqrGrAqqGrGqGrqƒAqA@AAkGF@:k9:@@:: 223233ÎíG:@ 9@A@:A@kGk@AA:@:jA@A@:k@AkqHAqq4::@AkGkAjAq9AkGk@AqAqAqAqGkGkrqAkGqƒA.kG@qkGqAqGqGqAqqrGqAj@Aj@jAqA:jA:@AA:9 383233\Ïí@9@A3A@k@k@@3AAj@k@@AjA3ƒ@%::@GkqA9G99:@A@qAG@:9@AAqAj@@kGqAqGqƒA.@qAGkqGqAq:GkGkGqqHkGkGqrA@AkGA@Ak@A@@:@@99: @ƒ23223ÏïY:@:@A@:AA3@A@Ak@ qqA@:A@:@@qAqGqAqrG:9qA@kAq::@@ApAA@qGkGAkAqAq@AkqqrGk@:AAqGq:GkAqAqGAƒ@ kGqkq:9AjA:@„: :39832]3Ðð @@A@@:@:@A:Akƒ@U: :: ,:9AkAqGrAkrGqqGqAqAGjAA::@:A@k@AkGkG@A@q@Aq:AwGrqrGq@kA:AAkG:@A@kAkA@k@A@:GqG@„: @ 9 223]23cÐï k::k@@::@j @„:3GkGkƒ:@@AqqGAqGAqAqGAjAAG9@k@qA@@Aƒ::Gkq@@kAqr@AAqG:wrqx qAjAF@kGk@A@qGkAG@::A@3::@:33 223223Ñð3:G@…:;@::@@9AGjA99@ @3 :@rGqAjA@k@:kGA3@j :A@AjAk@kG@@:Ark:9AqqGƒq:AGA:qrwr@:qAkGqkA…@kG::@ƒ: 993 29223,cÒïr @kGk9:9@A9:@A:9:: :9 :A@k3@::qGqqrGrGqqAqAA@9Ak@A@AqAqAk9qqNq:AGq:GrG:Gkq::GA@@rqGqA@A@k@AdA@:@:G:9: 9 2233,3Óð@:@ƒ: 93::9:9: 9:9ƒ:N j@A@ @@::AGAqqGrqHqqAqA9:AqAjA@qGqqA@@rGqAGkGqqA@qAGF:kG:@Ak@A@jA@A:@k@@:939ƒ: 3 2322,cÔñ :9@::@ 99: 3 3ƒ@:AjA@::@::kqGrqGrqGr@@kA9:FA:ƒ@:@rqqAkG:qqAqA@AkG„q A@k@AjA@k@A@Aƒ@„:9:A:9 2923,3Õò343:9:9 9:9:@9 9:9:@A:@@4:@:9AqGqqGrqqrAFA@@:@k@ƒ:!@A@3rGk@AA@q@kGqAqA@AqGq:A@rqjAj…:@:9:3: 3223323Ö÷. 3 3@:9 ]3]339:3c:@::99:@:GrGkGAG@qqAk@A:@@Aƒ@kqHƒ@qGk@@AkGkGk@AAkA@@AjA@@A@@:@@:@ƒ: 33 223]c3×ø 39cc]c2c]2c2323ch3@::@ƒ:@:kGqAq:A :G@::kA@jAƒ:3@@rr@:@AkAjAA@:@AkFkG:kA@qA@@;:@A::3:99: 3 223]2]Øøc]3ƒc]32332]cbic@A:@: k::@:„q :kG:@„: qA9 @: :@Aƒ@ Aq@@A@@A@:@Aƒ@:@:j@@::@:9: 9 32223,3Ùø]c,3-22323]3cb9]@:AjA@kGƒ::@3qG39@@9 ::9:rqq‡:@kAkAj@A@j@;@A@ƒ:@ƒ:9 9: 2232-]29Úø„322-23„2]8cbccŽc:@A@A@93Gq9::@ :: 9 Aƒ:9 …:q:9:@G@ƒ:9A@kAk@A@:j:AA@:394 3 223239Ýø‰ 323]]c32icc„@$k::k:9:::GqGk-933@A@:@:3::::9Aƒ@G:@@:9ƒ:@::9:9: 39 22232,ÞøŠ3]cc]38223c3;@;@@“>8\@:F ƒ:@:GqHq9:9:9Gq 3@A9ƒ:k@:@@A:@:9A@:@ 39 3 22,3-c3ÞøŠ23…c8]c2cc:@““8cc2:Ak3 @:9…:-@GkG3:: 393Gq @A:@9:9:499 : 39 2 3 223]3âøŠ 3cc2c28]ƒc+bi2“b9293GF3F3:@AA99:3:9 @@:333:3 @ƒ:::3 3222,32æøŠ4232cŽc2c8]c“i““8cbi’2 kc™AA@kG9::AA@:39 33 3 3 3 ƒ3 :@ 3,3323æø‹H3]cbi283hc““h829ii“2:9A@k@:9cb39A9::@::9:@:9223 333 22,223,33233éøŒ2ci“28]cih“9cb2b“ichci:“2ƒcŽ3„23 382323]83-3,32322íø‹2]c22chb“ibb2i9,“2™“8“ib]c3,ƒ]9]3ƒ222]3\-,2,323óø‹ ]9bciibii8cƒi,2i8\ii“b23,-ˆ2232„3,2c3ø…ø‹3]b9b8cchbib2c2c8,88323]Œ33ƒ2 23øˆøŒcbc8]8““ii’iihc2c]]323ø øŒ33bc8c88“bci22cc]3ø¢øŒb]c8c2ic“bc2-cc,ø¦øŒ]9b82chih323c,ø¨ø ]3382,]2,32øªøŽ 22]c3]32ø¬ø323]ø¯øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/ - ½é/ |ýL#Ë |ýL#- É É É 2 Ì /Ì,M¶ËÌ,M¶-âÉâ2â /îN¾ËîN¾-k¬Ék¬2n¬ /n¸O1øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø]2ø²ø’2ø±øøÄøøÄøøÄøøÄøøÄø¡]ø¢ø—23\‡2c]ø ø—233‡3,2øžø¦,cøœø]c232¡2øšø2]c2]3¡33\ø˜ø„2-3\3¡23,ø–ø„32,23]£3c3ø”øˆ322¤ƒ2ø’ø‹3¥]3]øøŠ3c22Ÿ2 ,22øøŠc2ƒ3,œ 39: 3 ,33]øøŠ 23,3\232,–22:: :9 3222ø‹ø 3ccc323\22,3: ::9 :9 3 3]3ø‰øcdƒc ]c3]33,32,„]c3]392::9 9 33: 33 9ƒ2ø‡ø2cc,c]c]c]8]3c]c322]c]cc2 ::9:3 :999333 ]]cø…øŽ3-cc3]9]93c2]9]c]c322c]2:3:9:9 :9 93: 9 9@932øƒø.22]2322c]\323\329]332 3 @:@339499 93 39:@ƒ:@3:3cøø63cc3]323]3c3]\3c\] :@3@@43:3:3: 9::@@::AA99:,2÷ø8c]cc3,322c\c92]3c3 :9@@AA39 : ::9  33 3@:@::@9:@A 9]cõò:@“:2]32c2-32c]c]c @:@:3:9: 399939:9:: 3:94@A@: 9 23óñ:@“23,c]ƒc/-8]c]3c] 3@: :9:@: 34@9:3 :@9 9:3::33:93ƒ: c]ññ @’.2332c2]c]23cc]cc 933@@::@:::9 :@: 99 :9:94@ƒ: 3::: :@:ƒ@:23ïï: 3@;323,33]cc32]cc 33A@9A::@:@9:9A: 3:33:A@@ @A@9 9::9:@@…:32]íî :@9@:Œ/2c]3\3]cc]c]cc2@@:9: A394:@A3::9 :9:9AAj@9ƒ: 9::9:@:43ƒ:@:@9íí @@A@:: 3: ŠB3c2]322]323c29::3::A@::@@9 : 3 9::9 ::AjA:: 3 :9:@4 :3A@3:9ƒ:@@3êì :@A9:@:@ 93Š42cc33]3323]323 @:@@ k@::@:: 39 j@:9: :@3::A9:9@33„:jA9ƒ:@:@@ƒ:93èê:@@ ::@4@:@::Š3]3c\]…c79:3@A39@A9AA9:AA::999:@::@9::@3 93:@ @:9A: 9@94@A3…:@A:\æå:ƒA@@:A:ƒ@Aj::Š2]c2]cc3]]3:: 9A3@:: @A9: 3ƒ9@;9…:!:::39 :3A@3:3@;@93:A@9:9::ƒ@3ää A@A@ 9::@A9ƒ:AA@::Š cc]3c]2]c2 :@9 9:@A:@A:3 9 : „:@ƒ:9ƒ:#@3 3:9: ::9:A3 : 3A jA:: 99AA@A92âá:@Ak@@;39:A:@:k@kG99:ˆ2]c]]2c3c2:3@: k:@A@:@39:9: :9:@::::@@::@99 3 9ƒ:99:3::9@:@:::9::@A@@k:9A93àà ::@:@@Aj 9:@9@:qAFAj:Aˆƒc 23]c2]:@A3 ƒ@5:: :3:: 99:: AG:@:@: 3 343@:4@: @9:: A:@9A@A9ƒ:9A9ƒ:@A@3ßà9ƒ:@ -9:@::@@:k:9A@ƒ:@@:9„]c]]3c]339A@@::@::@@:@ƒ: 39:: :@@9:@A3::939:333ƒ: 3:9A:@3@:@A:@k:9:9::@A@9A@A9 @Ýà::FAjA@A9 3::@:@A@@:@@9ƒ:A:„]ƒc23\c3ƒ:?@:@A:@:@::9A@:@:A@kA9::@:9 3: 9: :9:9@::9: @:@@:93:@A@3A@ƒ: ::9A@@3Ûß,@A@kA@AjA@A9 :@Ak@:9AkA@@A@@A@]92232]3:@4@„:ƒ@A@ƒ:*9:G:@:@A@AGkA@@::9::39: :9: 3@3A@::@:A:3ƒ:A@@3:9:A9::9A@3:9A@A@9ÙàNAqAFkA:@Ak@:@:@3:@A@A@@Aj@kA@k2c3]c]:@ 39:9:@@Ak@::9:@@AkG::9:@jA@:@:@34::9„: @ƒ: @@:9A@A3@ @@„:949:@;@:9A@:9 @k9: ::×á 9A@k@A9:@@ƒ:@:@AjAkƒ:@A@k@ 9]2]c9A 3:A:@k 3ƒ:"A@qAkF:@:9AA@:9::343:9 3::::@ ƒ:@A:93@:Ak: 9@:9A@:9„:9:9ƒ:@ ƒ:A@:Õá::9A@k@A@::@:9 ƒ:9ƒ:@ƒ::@ 3 cc]cAA@@3:9A@kA99::FkGkAGk: jA:@:93::9 9 3 9::9::3::3ƒ@ A::@:@:3:3ƒ@ƒ:;@9:9@A9 :@A@:9@3A@@:Óà:@:A@AqA@:A@3 9ƒ@9 9ƒ@ :@::@:: cc]ƒ@3::@A9:9@:GG@AjGkG9@@A3@ƒ: 9 :33: 99::@ 99:Aj@@„:@:3ƒ@„: 9::3@A@A@ƒ:9 ::9:A3kA9@ :Ñà :9@AkFAj@k@A„:A@…A@3A„@:@ @::3:@9::AqAqkA@@A94@A3„@! 4933:9::3@ 3:3@::3: A@@3A@:@@‡::@::9:9A9:@::@39@AA3:3A@9 Ïà3:@A@@:@A@Aj:@ 3:@:AjApA:9Ak:@:943: 9:@::9:AkGkGA@kƒ@0k @k9:;9:99 93 939:: 9 3@;9 @::@:3A@k@3:@@:@:„@:@@:::A@::9::9 Aj@:9@Ak::ÍàU@@A94@qkAG@@AF :9:@Ak@:99:@:A@AqA9:@:::A@qAqAq:@G::3 jGA3@@3:: : 33 9:9 93A@4:: ƒ@ 3:@@A@ A@A@Aƒ@":@A:A@::A9@::9 9 @33 ::A9A,:q@2Ëà::9ƒALGjAkqAk@@:@:@@A9::@:3 j@@3 @::9:@kGAjAG3@:k9:@A@Ak:@:39: 39 39: :3@;@ 9 9@9ƒ: @@:A33@@:3:@A@:Aj@3::99A:9ƒ:@::@A@3:@k@ :G:3 93Éà@:::@k@@k@AApA::@ƒ:@@„:5 @A@;@@::A@AA@k@A@:3@@A A@k@A@A9:@9 93 3 :9:9: 3@„: @::@:339A@:3@:@k:@39::9 9::@A9„::9:9:3A3G@3::92Çâ)@@:@Aj@:AjGkG:@:3 3 :9:3 @k@3:@A99Gk@k@Gƒ@6k:AAq 3@AjA99: 3@3 : 33::9 3:9@4 9:3@:3:: @:339: @@ƒ:9 A9::@;ƒ:9@@::@399 A@ k j:A :3 A3Åâ::@::AA@9AG@@k::9@:Aƒ@R:@@:::@:@;qG@:@@:Ad@A@:@q 9Ak@9 9 333 : 33::9@: 39;@: 3::@: : @: ::3@:@A::†@ƒ: 9A@:@3@A:3Aƒ@9:99 :92:993ÃãG@@:@3A:kAkA@@:@9:@;:@Aj:Aq:@3@@ql@A@A,@:A::@q 3A@939 94 3 339:3::@ƒ:3A:9 :993:9 @9ƒ: jA9A@@ƒ:@::A:Aƒ@::@:9„:3:@:A@39 ::3 33 32Áãl::9:939@GkGk: q@3@3 kA9Aq@ ::@lGq@@dGqG:9:@3 jGk39::9 3 39 3 :@ @A:@:@:9:: 3:::93:: @:@@: ::9:9:@@:@…:!@::9A@:9 A@:9: 39:393 3 9:9::8c¿ã- 3 : 3 :@kFAqAAqA@:Aq@@9AA:9@:AqGkAAAqAA3: ƒq$3: 3::3 33 : 9:@ 3A@:@A:@A9::9@@ƒ:3 3@@:3::9:::„:9:ƒ@Aƒ@3@@A:j@3A9 3 ƒ @ 3::@9:A323½ã@ ƒ:C@:AAAkF:9@A@A3FAq Ak9:@:GA@qG9k@@r@kGqGGA:9:@ ::933 3::9::@@:ƒ@:@3Aƒ@::@::9@:9:3::@„:@::@@99A@A:@::Aƒ:9A„: 3A9 333@9 ƒ:A3 ::22c»ãa @ 9::k99Ak@@AjA@3:9 @9:@:@@k@rqr@@:@qrqr@kGk93::3:9::@3 93A :@@:A93A:@3A@:@: @:@@:@:9: 3@@:ƒ@:@@:@@:A„:(9:3::@@::9@@A@:3 @ 3 : A@A:93G 32]c¹är:j:::9:9A@:@@Ak@A9A3:3@:A@:AqqH:@A:AAqGqGkG9:@A339 :: 3 9@3:@:@@A@;@@3 @A@;3@A:@A:@:3@:@:@:@;@@;@@::A:@@::@:9ƒ@;@@A:A::3: 93 33ƒ@ 3 3Aq@A223cc·å::9:3Aƒ Y@A@:kGAjA@9 @@:@qA@qA::@@kGkGqG:q@A3:9A@@3:94::9 : 3 @:3A::@jA:3A:@3@:@:@:3@:@ A:@:A:@:@„:ƒ@::ƒ@+A@:@3 :@::@:j@39 93:  3:::A@: j 282i2]2¶æW: @A@k@-9A:@kA@A3:@A::AAqAA@A@@kGqA::qAG:A:3@::::F:@ 39 9:: @@:3@:@@::3 @:A@:3@:@3ƒ@/::@:@3:@:@@;@;@@::@::@;:93@@::@:@A3 : 9 39 9 3ƒ:9 G2 ,“icc]c]3´è:@ ƒ@)33 ::@:9@9A9:9AjGk@q@@;qAqq qAAqqA93@Aƒ: AA@:@ 9:ƒ@j:@3A@:@;@@ @::9:: @::@:;@:3…: 9::@3„:)@::@A@:@ Aj::@A@:9: 3 3k9:@ :@3A3 2,ƒcc22²é"@:@e@A3:9@3  :@::9@AqGA3qA@qqHk ƒq!Gq33:@A@j@:@k 33@3 :@;@: 3@:@3@„:@@ƒ:@ƒ:@@„::9@: : ƒ: 939:@A@::j@„:(9:j:A99 3 3  3G3A99 3GAA2 ”]cc,33,°ã2]„K@k:@A@3::@:G3::@A:9AAk9:A:@A9qGAqGqA:::9:@A@A@q 93 ::@9A@@A9: @:@::@:„@:ƒ@;@:@@:@@:@:@:@@:„@6::@:9:@;@@:@49;:@:: 33 9  33 :A@: kpA22Ž2c,c3“2332]®äJ]9\2 :@@A@@9A:9@::AjA9 kGA@@AkGkH:@kG:A3GAq ::@Aj@k@33A9 9::9:A:3@3 3@ƒ:ƒ@;3A@@A::ƒ@A@:@:@:@:@:@:@:A:@@„:@@:@@:@A@:@@:33 : 39ƒ 39@:@3A 22323”]”2”¸232c¬â$23]c3,23,c@A@A3:qA@A:Apq4@@kGƒqn:GkA@q3A:@@:@;@@: 3::A@3@:@A3@:A@::@@A:@@3@::j9@A::j @:A:@@:@@:@A@:@;@::93A@:@;@@3::A@@3: 3:39:3 k@@j:3ƒ2”c””„,3]¬â]c2„R32-23c jAjA@-: kApAqAGq@AkGqH@A3:@::qA:AjAk@A:3@:@@3 @::@: @:@@ : :A23::@A93 ;ƒ@":3:@:@@;@:Ad@:@dA@:@@:@::@::@:A9 @ƒ::9 3  2G3@A4A 3@ 232”2,”„33c2]2©å @…HcccA@A@k:@:9AqA@AqkG4@:rGq:k:9 3Gk@:@9A@@:::@A:9 :@A::3@A@:3 9Aj 9„:@:@ƒ:@ @;@:@:@:@:A@:@:@@:@:A@@:94ƒ@$:3@@:@3 9:3 92 3A3@G3 @A223,3c””]„\32]9232§å:…cc]c]cAj@A9:@: k@q@kGq:ƒ@5:@A3::@A:9 9:@@:A@k@A3@@:33 @@:@@3 9:@A@3 9:@@:@@„:D@;@:@:@:@@;@:@A:@;jA:@@:@:: @k@@:A@:@:3: 3 3 3 3@3: 93G3@3322ޓ޽cc„233]3]]¦ã:99ƒbc]c]cc]c3@AA9::@3A:AqGq::Ak 2@:@99:G3A@:@kAA@3 :@3 3 3:@k:@:A@::9:9A@A3@::@:A@::@3@@:@j:@::@j:@:„@:@@;@:@:@3@A:A:9@;: @39 @9 9„ 9A 3@: 3283c”3†223c]9¥ä:: ƒ*]cc]c23c::@:AG3: 339AqAAq:A@9 @@AA: :Aj3:ƒ@k@:@3 3 3 :@@:@@:@„:T393@:@@:A@:@A: @@;j:@;@@;@:@:@e@:A:@:j@A@:@3 @@j::@@::9:9: 339kjA9A 232, ””232†,3232c]¥æ+93c]cc3232@3@3:q@::@:qrGk9A9 :3AA::@k3Aƒ o@::@@::@: 3 @@94 @;jA9:9:;:@ 3:@@-@:9@@A:@@:@@:@:@@;@@:@:j@:A:@:k:@: k@;@A3@949 3: :3 3G4@A3:32233,2Ž33,ˆ232]2¤ç]9]3cc]3,3]c ::3:@:@A@;qGqA@ƒ:GAq@j@:GA@kq:: @:A:@:@ƒ:1k:@9 2 :9@A@ A3 @:A: 9::@d@:@:@;@:@d@:@:@;@A:ƒ@;ƒ@:A9@A@:3@ @A@: @3 9 kG9A9:ƒ 2232”c2ˆ-2]9]¤ã$: ]A3 393c]cc :9@A:::@qAq9:A99ƒqA@:@kq@@A933@2@AAƒ@: 9‡: 3@:Aj@9:ƒ@J3:@A:@:@;@:@:@;@:@:A:j@:@k:@j::A@:@::@: 93AjA93@ @:3 3AA93 :33 23223“”cdŠc2],£ã'@9@A:Aq@:@,2cc]:94@99Ak q:@4G9AA3Hq:ƒAwqG::@@G@:k::@jA@k@3 : 9:@9::9 9@A@@:@A:3 :@:@@:@:@:@:k@@:@A:@@:@A:@:@;@@:@@::A@:3 3 @AA:3: 9 :G394 3 322 ,”޾9c3ˆ]32c£â9 Ak@:@@:AA@@4c3]32ƒ )@::9::Gq@3j :9A@qA:q::@:3@:@:@A@k@3 ƒ@:A@@:@:A3@3:33@ 9ƒ:>9:A:@::@:@@:@;@:j:@:@:@@A:@@:Aj;@93@: 9 :2:@: 993 39Ak @:3 ƒ2 ”2323]“3Š2c]£Ý02,2:: @:@:qAp@:39]c]23233:@A::9AqHq:Aj@A@@A@ƒ:@:A:@9@@:@AjA@A33:@AjAƒ:ZAjA3A@3 : 39:@@4@:@A@:@:A@;@:j:@:A:Aj;@:@k:@:@@:3::@:9::@::@A9 9 3 q@3@3 322332,2Ž“332‹ޤß 3:9:GjAAqAƒ:J99 cc]239:A:FAqA9GkAAq::A3:@j:@q @:@k:@::@@::@@ 3@:@:@::@ 3:: @::@@Aƒ@3A::@:A:@j@:@:@:@@:@:@@k:@@:@:: :@::3 @:@@3: 3 qƒA9A33923,3c3c33“3°ày2:A@kAAkFkGq93A:9 cc3:@A9kA3G3AqA:qGA@j: @:9:: :9@A33A@::@A@A:@:@3:@@:@@A9 :3 @:@ 3::@A:@::@:@d@::A@:@:A:@@A@dA:@@;@A@+:@@:@:@3:93AA2:@AA9:Gq@k 9A3 23232cc]2]]“3°àM3:AjA@q@AAqG:3 :@@::A3@@Ak:@@:3@GkGqq:A@q@A 39 :AjAG3::@@k@k@:qA@A:@A@@:@A„@S49: 3@:@3@;@@:@:@:@@:@:@:@@::j:A@@:@:@::A:@:@:@399AA@339:3k@93A3 232332]ccj,2°áy@@A@kGkGjA@::@:AqAj@A:@k@@  : Ak::Gk@AqAAqq:9: jA9A@:9:AA@A:@:AjA@@::k@:k@33A3 @:9::@:A@@:@j:@:@;@:@:@::AjA:@@:@;@@:@:9(::933A@3: 9A@@ GA@:@33@323“””c޲á\Aj@A@AjGAk:9:9GqAqA@@:A@3Ak939Ak@AF:@Aq@AkGk:3: A3j::@:@k@:@:GAj@;9@:A9:: @39A::@A:@@d:@ƒ:8@:@:@:@:@:@:@:@:A@:@:@e@3:9@:49@:A3:399A:339A@A3 32„3,”]c2cc3°à7 :A@:kA@qAq:@ AqAqAG:k@k@@A::3 q:@::@@:@qAq :: :99@4A„@:A@:@k9AA@j:@Ak@ 3:3ƒ @:9@@ƒ:@@:@:@:@:@:@;@:k@:@:@::@Aj:@@ ƒ:@:9 3 @9A94 9@: 3Gk@A9 : 39ƒ2,2”,3c]±ß^3kAk@AjAqAG9q3k@@k@AAG:A@A@qAqA@:@: 3:@:G::@9A3: ::@3AA@A@::@:@@k@::@@Ak 3 3@::@:@9 A:@„: @:A:@d@:@:@:Aˆ:@:@@4@A: :39A@:3ƒ: 3 qG@A3 99 22„3]c2cŽc±Þ" :@@Ak@A@qAq@3:A:@A@AjApA@k3@k@Gkƒ@yqqA9 @k@@::@A@9 9::@ k@k@@:9A9A@A::@4@:9 2 3 @:@A@A:A:3@A@:@@:@:@:@:@:@4:9:9::9:@@:@@:@A93 : 3A@A 3 3 3qAq3 :: 39232]\92޲Þr:@@:@@A@k@GkAA:9@A@kA@A@A::9:@@:G@@kAq kG3 @A:@AjAA@3A@3@33AAk@:9::@@:@@3@: 3 2 3 j::@e@@:@:@:@:@:@:@:@::@: 3::@A„@-:@@::@49@:@:3 :39AjA9 2 9Aq: 3@93923,2]9,2c³Ý9 :@ƒ:@::@kGqA9:AkAjAjA:jAƒ@":qkqGqA@AAq jAk9A:@9k9 A9@; :9@A@ƒ:9::@::@:9 3::A@A@@:@:@:@k:@…:@:@:@3 ƒ@:@@;@:@ƒ:%@:9 : 9:@3 3 Aj@9A kGq 3 :: 23233,3·Û„:3@:9@::@@Ak:AqGq@3AGk@G@A94ƒG-kr@Aj@9:9 jGA9A@A::93 :9 33 jA@@::@:3 : 33ƒ 3:@::@:@:@:@:@:@:@@„:73 :@:@A@A:@:@:A:@:9:3: ::@9 :99 :3A9qG: 3 9:bc2]2232·Ûƒ@:@:@A::qA:kGk@ƒA9@A@kA@3GqqrG@kG:A3ƒ:+GkG3Aj@@3Ak:@ 39@A@A:@4Ak@@:9A3 93 :@A@@…:@:@::@„::3 @::@@A:@:@:j@A@:@@:@A:@@ 9A@39: 9: :Gk3 3:bc23]”3·ÛZ:@:@::@:@@Ak993:@@AqAj9@3Gk@ApAA::qGkA@AjA9 qAqAqc,3A@k@  9: @::@j :9@AA@3: 3 3 3:@:@:@@ƒ:"@:@:@::@:9@@9@:9::@::@k@A:@:k@::Aƒ::9:3A@ 3 9 :33@ 3 9:b9c3“]¸Ú 9:A@:@@A@k@ƒAE:::9@A@A@@kA9::@:@:3A@@A@@:99:@@ccc] ::@3 ::@:@AA9::3@@3 @33 9:ƒ@:k:A9ƒ@ƒ: 9:@:::: @ƒ:9:@k@:@k@A@::@:93:@9ƒ:3 3Aj A393 3 3 9 9 9b3c32¸ÚT 9:@:@A:jA@kFq9@AqG3Gq::@@q::9:@::9 :@::@:A@3 9AcŽ]c2c3@3 3 2@A@393::9 ::9 : 3:@ƒ:3ƒ@G:A3A@A@A:9 3 9::9::@:@A@A@:@::@: 9::9@3:9 A jAA9 3 3 93 :3 8]92¸Ù4 3: @@:jA@AkGAA:qAq:Aq:@:AAGA9GkG33 Aj3:93 3]AA@3ƒc3] 9 3: 2c23@ƒ:"A39::3 39@@: 9 3:A@:3@:@k@@4 3:9…:2@:A@Ad@:@A93 ::@9: ::3Aj@ k 3 :3 9:3b3“2¹Ù$9 :3@k:A@@AjAj@3@A: qGkA@j@kAqAq:9„@:@::9A@9:@:9Aqc3 @3Aq :ƒ283h28@A@:: 3:@4@A:@A@@:@A@:@:@;:9 9:9::@:@@:@Aj@A@::@ƒ@#A9 @: 3 3 3:A@99 33:9 3 39b2322ºÙ :@:ƒ@y::q::GA:AAk@AkGqA@kA@qA@qA@ 3AkA@:@:9Ak:@::AAqA@3 @3 @:22383hccbi2A2: 3 3@:@:@@:A@4@@d@:AjA3 3 :@::@:@:A@A@:A3:@:jA:k9:!A93 :9 @939A:339 :933 b3,33ºØ 9:@„:y :@A@kGjA@kFAqAq:@AqAqAA@:9GqGk@:@::AF 9 :@q:@ k 9 393,23cihc“22 3 ;@::@:@:@jA3@A@A::9 3:9@::@:@:@@AdA@:@Ak::@@:@@9 ƒ:9A3A::: 3 :3 3 3 2-2,2ºØ@3:@:A:@3 9AqAqA9qG@kAkA@AkGqApAkAqGqqGqq:A9Akq::9Gk::39AA9:,ƒ3i“i“2ƒ@#9:@:9A@@::A@@3@Aj:3@ :@: 3@@A@:Aƒ@k@:@@9ƒ:$9::@ @::9 9A@3A 33 3 39: 3 9232-»×x :@@A@@:@k:9AGk AkA93GAp@A@AqA:9 GkqBqArAqG@kA@::9 :9: :@kA:: \ccŽh“hc83A33@:9:@:Ak@:@A:@:@:@:@:3 @:@@:@:@:9;jA@:Aƒ:'3::9: :9 3 94@AA23A3 : 33 382-232»× 9:@A9„:J9:9A@9@:9::@kA@k@kAqAG:qGqGqqGqGe@@A@::9:A: 9:A9@A9: 9ccc“cb9@3 9 :@3: ƒ@A3@@:@…:ƒ@:ƒ@::A:@:@39 @A:@9ƒ:&9:@:339 @3 :9 q@@:@3 9:9 3 93233,»×ƒ:@:9:39:@kGk:::: GkG9Aƒ@k@3GkGkHqrA@@:A@jƒ:3@@39:9AAj:GAA3Aiib2AA@33@4@A@:AjA@AjAA@: :@:3:@ƒ:„@3A@;@A@A:@::9 9A:@@:9:3A3 39 @: k :39 9 392232,3¼× 3 93@:@::9ƒ:W qA@:@:9 9A@kGkA@A@3 qGkqGq::@Ak@qA:9A@A9:3jA@:@qA9Ac3\i23:@@3 ::@:@:A@:@A:@d@@:@: ƒ:@A:k:@eƒ@/:k:@:3:@A@@;9@;: :j @ :3@:@9 93 3 :2323,2¼Ø3: @ƒ:AAƒ@q 9ƒ:U93::GkA@k@:@:@AkGqA::A@A3:Gq@@Aj ::Aq@::Gk@9Aq:cb 9 3 @@9 3@:@@:k3@:@@;@::93::@:ƒ@ :@A@k:A@@:ƒ@'A:@:@AA:@3@:k39A 399 : 33 39 32 2-½Øn33@::@G::@A9A3A@39:9@AqAF:@kAqA@qA:3::GjA3@A@4 qG:3:::G::A@::@Ac89:: ::3:@A::@A@3@@A@@:@:: 3 j;@k@:„@+k:@:@e@::@:@3@:: 9:9A@A39AA39 33 :22323¿ØR33A 9:A99::3@A3 jAk@ @ kA9@:k@AG@jHqqGAGkAk@ q:A9AqA: 9: ::@kFkG9::c]2b2, 9:: 3:ƒ@ƒ:@:Aƒ:3 3 3 9@@: 3@AA@k:A:@@A:ƒ@:@A:3ƒ:@93:kF::A@3A@ 3 3 9 923,2¿ØP: 33@@A:GkA@3:9AA9::9@Ak@A@kA@qHq:Aq@ G:@Aq:kAq9::9:@@AGk@AAk“c“i“23 93 @„: @:@3::9:@:3::@@:A@A@:@k@:@A@@49„:$A:@d@9:@:: 99 :9 @49@3: 33\2323ÀØ93A3 ::@33A939 9„Ay@9A@A@2AqrqG39 9:j:k@A@:@GA:9@@Ak@G:j@ccŽciibb :9 :@:9::@:@: @::9:@::@A@::d:A@A@@k@k:@A@::@@::@:@:@@:3 3:3A9 3 3 3 9 923,2-¿Ù9:9 99 93:9:9:9A: 3AAjG9: k@3GkGqGr939 GA9:@@:3Gk@::qkƒ:@j:@]”“di“92: :@@::3@:ƒ@ :94@:@:@:@:Aƒ@k@kA:ƒ@A:ƒ@&:@@:@A:@:A@ 3 A39 9:: :33 3:223232¿Ù 3†::„AkG9A:@9::q39AkG@kGkAA94@:3Aƒ:G:@@:3A@:GG@:9:@A …c'c“9:2:@ @k::9AA :@;:9 3@:A@:AjA@jA@A@Aƒ@;k@:@3‡:9 ::@::Aj@A3AA@ 3 3 :9 232-ÁÚ` 9@: @3 @jA993 k@q 9::@A@@kGAqA@k@A@322::993k@ 939qkG::@ jc]ccŽc]89b8A@3A@93 @j: @::A@:@:@Aƒ@ A@k@k@k@A:@@ƒ:(9:9::@:9 39 ,@@3A:9@@kG,A 33 9:38322]ÀÛr3@A33A@Aj3 :@A 9:AA9 @k q@qGqA9A93232@@A:9@ @A@ AqAqAq :9]c]]3]ccb929:@A9 39 3:@:3@:@:A:@:jAAj;@:@A@@k@@k9::9@ƒ:"@ 9 333A 3: 99 A k 3 3 :94b323,ÂÛR23@@:@AjA@3A::Aj9:@:@:q@A3 k::qqG:A3323@3:c9: 33@A@qGA@:q@:@qc39 2c]9b3:@A33: 9:@ƒ: 2:@:@:Aƒ@%A@j:Aj@;@k@::@@:@:::@@3: :@k 9: 3@ƒ9 29 998922ÄÜ2]3 :A@A: @:9A9:@A:@kA3@9G9ƒA0:99323 3 9:3 :G3k@AAk@k:Gq:@:@AkG3,c223@@9 : ƒ:@„:=9 @:k@AjAjA:A@A@@A@A::@:@@::4@:9 3A39@k@ 43 9 3 :3c232ÄÜ3233@kGj@:@::9A::q@9AG@:: AkGk@„:- 9 k : c9@:@:Aq@jAAq qAqAqAq@AA: 29 9AA3@: 2ƒ: 9:9949:@A@@;…@.k:@:k@:9:@;:A@:@@439@:9A@39 39: 39 9 9b22ÅÝ 3]93AG:3@ƒ: 9:ƒA=j3:9:9:@qGA@3 93 k@ 3 ]cqA@ 3A@3AjG:GqAq:@:Aj@:9“b:@@: 93 @ƒ 3::@A@3AjA@k@;jA@A:@@ƒ:&:9::93A3 3@: :9 A3:: 9: 3 9 ::2c22ÅÝ,c3]@ ::ƒ@:9ƒ:K@k@A:A@A@:Gkk@G33q@A2A8ŽGkA@kG:9GAk@:AqA@A9:GA@:™i2249::@:3 333@@A93ƒ@4A@@A@Aj@@;9::9:9:9 :@3 3 :@ 3@33 3: 3 9 :9 b923ÅÞi2, :@::A:9 @:@@:@@GkGqA:@A@qq3223AG:]3c\::3GkGAkGAk@3GkGkGkG3@@@c: ::3: Aj:: : @:3AA@:k@;j:@A::@3 ƒ:&:: 93 A: 99@A3A3A-: 9 :399::8c22-Äß32@kƒ@k@ƒ@=A@A9:qA@kAq:@qGA3]@3A9@3c]ccG3G@:@3qGqA :GkGkGk9A@kA3G@k@ ƒ@93 ::@3 9:9 @@A:@k@@A@k9: 9::@933 @ 92A34399::k 9 9:ƒ 9 b2ÈàI,3: @:@3@:Ak@kA::AGkGqA@q:Gkq323A@@Akb22c qGkAjAAq@A:@@:@@AjGAjAk9Aq@4 3ƒ:39::@3 : 3:@::k@A@@Aƒ:*9:: 9 33@:39 A@ 9@@49 9 3:9 3::3 3 232]Çá23: A@:3@A:@ƒ@K:@:3qGAk@AA939 @:9:cd,dqAqA@Aj Ak@@k@@::AGk@AAqG@:@ @A@A@: :@ 3 3@A@A@@:@ƒ:.@:3 93:@3 3 ::3A39 :39:A3 3 3:: 3 323ÆãY3@,9A@ @qA@:k@k@@ :kGAqGqGA93@A:9c3qGqk9jAqAqA@@:@:Gk@k@GkAAq :@jAk@A9 3 99:@Aj:@:@ƒ:-939 A:@@:@@:::3 3: ::A@9 3 3: 39 9 3 223cÈä:Aƒ:yAj@:3AA@kA@@ApA::qAqAqAj:cŽbi::9A@9@@ 9Gkqk@q@:qA@qAAq@qk@:@AGk@33: :9@A@::@:93A::@::@:9@A333@@A3: q 3933:3 3 22Êäy:AkAq:@k@@Aq@:GjAk@::9GqAqAq::2cŽib8cii:: @A@3GAGk@Ak@AAqGjAqAGkqAjA9 94 9 @:@::@:@:A@A@::@::9A@:A3@39A@k@ ::9:3 ::3: 9 3 92322Èå&99 9:99 39AqAkG@AkG:qqAkGk@ 3 94::8ƒ:7@33kk@ kqAqAq@ApA@kGAqA@GAqGA3 3@3@A@:@:@A@:@:j::@:9…: 9@@49 3 :: k 9 3 9 :9: 9 23Êæ%:A9:@A3 9AApAkAjGkGAqAGkGAqGqG9:@9 3ƒ:5:9 qGk@3@AqAqA@Ak@GkApGqq:@:qGk 9 4 :@:@A:@d@A@:@@:9ƒ:":9::: Ak3:9:q 3 :9 : 9 3 322ÌèA@A@@Ak:@kAG@qAƒ@:AqAq@qGkqAA@A@kGAF @:G3ƒA&:A9:GqAqkGAkAqAAkAqA@::qG::3@:A@:@:@Aƒ:@:@ †:"3A@:9 j9 3@ :9A 3 93:9 : 3 322 ,Êè @AjAjA@A 99ƒ:>9:9;q@AqAAkGqAkG@::GkAk@:kA:@k@@:@:@qAGq@@qGqGqAGkGqGkG::@ @‡:9„:(3 :@@93@:9 9 9A@::9 3:3@ 9 33 322]ÌçT3A@:A@@k@@kA9A@A:9AGkGkGqAq:@Gj;@@3Gk@:@A@9@@kA@@A:@qAqqAA@kAqAqAqA:G,GqGqqAk :9::@ƒ:@:@@33: 3:3@ 49 3:9@„: :9 3 9 233Íæ' @jAk:@::GA@qGjA@k:9A@:9Gk@@kGqqrqGqGƒqAAjA@@::@@A:@qAqAjAG@jAqGƒq)GqrAqrG:@2@@:9:99@::@4;:@A3 3 A9 : j@A@ƒ::9 9 9:3 3222Ìæy3@AAk@::9@@k: kA@A@:Aj@@:9AA@AkGqGr3:GkGrGk@Ak@3@AjAkA:AqGqqAqGkGkGkGrAqqGq4qGkG:@A 3 :9@A::@3 9 9:39Ak::9:: : 9 4 9 22ÏçQ:@:@G@::@A3A@@AqAjAG@AAjA@:qAkGAqG4@::GqGk@:G@@4A@Ak@ApA@qHAkGkGqAqGqqGrGqAGkGq3Gƒq*AqG:@:9:@:9@@4 9  3AA9: 9 39::99 32-Ïè$::9:9 39A@::GjA@q@:jGA9:@@:ApAqrAGqƒ:0AqA:k@@:A@ApAA@A:kGkGkGkGkGkAqGkHqGkGA::qAq:GqAƒ:$A:@:A33 A@3A@qk9: 3:3:: 9 ,2,Îêy:94@:3993 9:9 @: :q@4@A@:@kAAqG9:@@:GkG3@A3:@k@A@kAjA@qAqA@qAqAqGkGqqAqAqqA:@AAqGk9@ @A9 :9: 9k A@:AG:A3::: 3 32,Ïí 33: 3:A@:@k 2AAk::@Ak@qGq:9 ƒ:TApA@@A@A@AkGq@Aq@A@qAqAAqAqGkGkA qAqHApAqqA@A @A@j:@3::9:A@9k@@k 2 93:3 9: 222ÐîP ]c93Ak3@A@::9A:9 qA@qAGkGqq::Gk@k@k9@kFkAk@AkG@@kGq@AqAqAqGqr@qrqGkGAAqA@ƒ:"kG:999: :99:@9 @3 9 :: 2 2 ,Ñî]\32ƒc ]c2] 93:99 ƒ@BA2:AAqqAAqqGGqAqAGk@A:@AAq@Aq@kA::9:9AqGkGqrGqrHwrqAqqwAqkqA:@::9 ƒ: 39@AkGk@: 3@3 339 322, ,Ñï 23,332,232ƒ3W@;@:A::@@kGqqGkGqqGqAqAGkG9::qAq@AAqqGkGAqGkGqGqGrGqqrGqGqHqqAGq@kG:@: : qGqG::@AGkG:9ƒ: 9  33-,Òño3,3323,3]c3c8@:@::@:@::GqAqAA@kGqAk@A@::9@:Aq@@qGkGkGkGqqGkGrqqG:@GkGqqG:qAqA@qA@:3@kGqqG:@3 3:@: :3 2,2ÔôT2,32322c]ccic3@::A@::GkGqrA@:qAq9Ak9A::@:GkA@qAGkGqAqArqA@:A:qAqGkH@AkGqAq:@k@A@kA@ƒAk@@:@9ƒ: 393 ,2 3Óö332]9]c2bcc@A:@9ƒ: GqrqGqrGqAƒ@A9A@:ƒ@;k@;qGkAqGk@@A@AAj@A@kA@k@kGqAA@AA@AjAGjAqq@:@::3:333 3ƒ3,Ô÷823]cc3]8c8]:9:: ::9AkGqAqGqGqAkA::@qAqA:@:9:@G@@:AkA949ƒA k@A@AkGqAAjG„qAGqqGqAA@::@@A@9:@ 9 232Ö÷ 3]cc]c83’9„c*“@A3F:9AGkGqrkrqA@Ap::@A@kA@AA::kAk99:GkGƒq,GAq:@A@Ak@qGkGA@qAqA:A@j::@A:@49::94 3, ,Ö÷2ƒcMcc83cc:k@A@@:@kGqAAGqGqAjA9:AjA@@qkFA@:9GAAqkqG::qGqkGk@kGk@qAqA@kAqA@:@@„:@k@::39 2-2Ø÷(23cccb8]3c@::@k:99qAqAjAAqqGAGA3:GAjƒAƒq6@qrqq:@HqqA@r:GqqA@k@A@A@A@k@@:@:k@A9A@ ::94@3 :3,2Ùø3]c]2icb„c :A@:@@c9\ƒ:.Gq@:@ rqk:@@9@@:@@:qHq:@Hq@@q:rqG:AA@rGqA@k@@ƒ:@ƒ:A@@:A99ƒ: 9 9 92,-Ùø23bi28ƒc)‡“ibi““cbc8:A@:3qAq:@A@@A:@;::9:@:qqr@k:„AGAk@q3G::@qq::@Aj@Aƒ@:@:@9 @A99 93 b, 3ÚøK2-i“i23bcc“i’i2“hii8c q qA9:: q k@ @Aj@A::Gqr@ @r@A@q@kp@@AG@k@@A@::GkqA@:@ƒ:@k@A93:3 8,2323,Úø53bhcbibch“i“289“hc“29Ab“Aj: :Gq:@3:9:@:9::Gr::G@A@ƒ: AAkqAGk:@ƒ: @@:@:@::@„:3 @3 3232 ,Ü÷H2]8chibi“hc882i“,b““28AjA“@39 9AjA3 3@3 99GqG:9:@:@jA@@AjAFAq:@AkA@@::@…:9:@9:34932,ßø 3cb9bcc8ƒc:@A@:9AkkG@k::@ 94@A@:@: 3@A@Aq:A@A99A@:9@:3A@A@k@AAk@k@:@:ƒ@1A39::@: 39:99 9: 9: @@:@: :@@k@::@A:A@@A3@A@:2ÝäA349: 9A3GkG@@::9:GAk@::ƒ3 AjA@:@k:9 ƒ:" :@Aq@jAqAkG@@:qAkqGk@339: 39: ƒ: 3:@::@::3@ 3:@:@A@:9:9ƒ:93Aj:9:2Üå!@3 :3:@AqAkA@@ ::@AjA@@:GkA@k…@33ƒ@H:qA@Ak::@:@:qAqGqA::3: : 33:93:9: 9:: ::@@3A@::9 :9:3A:3@:9A9::@A ÛåA@ 9„:[ 3AjGqAq9: 3@@A@:kA@k@A9AkA@A3::@:@AkG:@:9:A@k@AqqAGkG@@ 39 39 3@3@@ 9:: @:9: @:9 @:@A@:ƒ@4@::@A@A9:@Aj ÚåX@k@:9::9G@qAAqA::G3 9k93A@kA@qA@q@Ak9::@@A:@:@:@:AjAqqG 39::A:39:9 3:3:@:: 33@:@ @ƒ:@:A@k: ::9 A99Aƒ:@AAj@3Øæ89:9 9:A3GjA@:Gk@A9 AGkG@@kAqA3G3 @Aj@:Aj:@:@qqGqGqHqAjƒA@:9::ƒ 3 :9 9 @3@@:3@:@ƒ:@9 3:3@:@A@::@A99A9:9:A99×çƒ:N@A@39 :Aq@9A@AjAqAkF@kAGkFA@3A@k@@A:@:AqqAqAqGrqG:@kG993 3 33: 3 :@3:: :9:ƒ:@:3ƒ@:@:ƒ@ :9:94::9:@kƒ: @A39A@A9Öé[ jA@A3@@A:kGjA@3:G:kAqAGkq:@A@A@::qAqGkGqAqAqAqA::9:3 3 3 9 33:@ 2:: @93@@4@A@ 3@:A@A::@„:::99::@:99:9:9AjA@4Õã]]„wA@9:@ k@:G@AqAA:@@A@@Aq:GAq:@k@kA@qAk@GkGkGqG:qA9 @ 3 3 3: 9:: @:@:@:3 :9 3@:@@k@3@A:@:9::@:A@A@3@A9:@:9::8Óá`2cc]]2323,@A::A2:qAq@@9AkAq:9:GkqA:@AFkqH@AjGkGAAk@AqG3A:33 39 @3:@:9949 : 39: @@:@:@4 ƒ@k@@A@:@@:A@::9AjA@ :@A 94@49:Òá4232]923cc]@A@@A@3: @:A@A@:@@A9@:9Aq:9:AjAqGqk@GkA@kƒ@k@AA9:G:9@@kG@AqGrqr9G@k@AqGr@Aq: : 3:33 @: @:@:@k:@@:A@:@ƒ: @33 9 @:@j:9ƒ@„:ƒ@A9A@A9::A@4:93:: 3AA@AÌã8 :9]]cc]ccc33 kAkA@k@@3:@::9:AqqAjGqrG@Gk@A@rqrqGqA:@„:K 3 :@ @:A:A@:93A@:@@: @@::::@:A@::4::3::9:@;@@A:9:9:@:9 9 @A:9@: jAk:2Êã99:3c]c3cc]ck@ApAqGkAƒ:n9A@:9:GAqAqAA@@kAqAjGqGr@qAA@:9@@9 @4@@:3@@:@j:@: :jA@- j@;@:9:9433 39 9::9A @@e@@j::@A:@:39::39 @AApAF:2Éä]3ƒcccƒ]T3c9A@Aq9@@:@@A:kG3jAqqAq:k@AqAqGkrG:A@@j::AA:@3::@::@@::3@A:@@::9 :@:A:@: ::@@::@:ƒ@:@ƒ:9A@@„:9:@@A:@ A9:@k@kA@A:2Çâ7] @cc]3ccc33c232A:@A9:@9::@:@G:k:GqGA3GGk@qGk@@A@j: kAƒ@Rk 9 3 9:@A:@ :@@;:@:: @:@@9 :@@::A::@:@@;@A@A:@:@49:@A@A::93@:@A:3AAA@3 @:@3::2Æá]@@3ƒcK]]c ]\232c9::A9:A:@::qqAq:kGq: @3GAqrG3 qqHqA@AkA@3 :A9 3:93@@:@:3 @@:@:9ƒ:3: :@@:Aƒ@:@A:@j::@@:@;@9:Aƒ@A::9A:@9:@k@k3@:A 3ÆÛ 2,,2::332]c:9:9]]32cˆ3@@: A@ƒ:qAAG3GkG@kA@k@AqGqqGkG9::ƒ@!: :9:@:AA:3@3 3:@::@:@@:: j::3ƒ@ ;@@:@@A:A::@:ƒ@ƒ::-@j:@A@::9A9::Ak9:: 3348ÄÜO,322 ::33:22dcc3A@Ak@3A@@:3GqkG:qGq:@q@AqG@kGlG::Aq:A@k99:@:@@::@@k :@@…:&@:A@;@3@@: ;jA9:3::33 :9:@@e@;@@A:9:9ƒ:@ƒ:9A@:993:9 ::33i2ÂÝ32-c9:@99@::93 cƒ]Kc] @:9AqG:@ kGqAqqA:AA@qGrqAAqA@9qA@jA@4@:@: 3:@3: :@@;@:@A@jA2 @:A@@-@ƒ:399::9 :@@;@@j:Aj@::@@A@@:9@A@@A:33 9 3:9493ÁÝ23323 ::GAqAG@]cc3232c@ƒ:# qA::9@@:3GArq@k3 rqG:q 2:: 3A@A@ ƒ: 3@@ 9 @jA9::k@3ƒ:ƒ@:@:@Aƒ@ ::@:@:@33:@3@A9::@:@:@3@A@:3Ajƒ:3::3 9,A9 93cÀÝy3\33]G@:3Gk:AjA@kAcc23,Aj:9A@3@:43AGqqGAqAA@r:G: : qGqAk@:3@:3A:@jA@3 ::@@A:93:4 3:A@@:@;@@;@:@:@:: :: 3:@@A@: @:9@::A@A::343::::@39 c¾Ý 23c\c::@ :ƒ@.AjAG:c]cc323@@: 39Ak:@@ qGqq@A@k@::k99 ::9Aƒ@ 3ƒ 3A@@:@A:@„:@@Aj …:% :@@dA9A@:@@:A@:@A@:@:@:3::A:@k:@49@@„:@A:9 93: 3  :@:@:923½Ý"32]3:@3@kqAqAqGq:@c]c]22 @@A:::ƒ@(:krGkG:AqGA:F9qAA@A@A@:@: 2 @@k:@:@@:ƒ@ ::@A 9:@:?@…:# 3:@e@@:@;@:@:@@:@@:@@:@@A:@A@A:@:ƒ@A9 9 9 9:3@A::AA 32c¼ÝZ232]A@@AkGGkGkGkG@::@]cc23:AjA@@:@Aj;@GqrGq:@A2:3A::q49Aq3@:k@:@: @k@9:@@kA::@:949@: ::@:ƒ@?:9::@@:@:@:j@:k@@;@@;@@::9::@@A::93A:j@49 : 3 3 @k@:@j:j3c»Ý233kA@k@AqA@qAqq@ƒ:79 c]:@@A@:@k@ @::qGrGkA3 @Aj@:@@A9 3 k@Ak@@::3:: 33 ƒ:=3@@::@:@@ @;@:@ @@:@@:@;@:A@:@:@k@:@;@::9A@;@@::@:@@A@:9 39:ƒ -9A:@9@4:98]c¹Ü232,AjAAqAqAqAqGƒ:@@::9 AjAk,@kGƒ:q@4Gk:9@9 kGA@:G:@kG:ƒ@A@k9 @:@@: 2 ƒ@2 :@ :@:@@4@:@A@A:@A:@:@@:@A@:@:Aj@:@:@Aj@k@:9A@ƒ:3: 9 399:AA3A9 9: 2c]¸Ü+,3::3A@k@@A@qAGjA@::9A@::9A@q@4:GAk:9Gq@3Gƒ:J qGjAk @qA@k: :@kA@Ak ::9 :@::3 @:@j 3 ::@::99:A@:j:@:j@:@:@;@:jA@@:@:@:@†:#@@@k@:@ 3: 39 :: 9 3@:@k9AA23c2·Ü7339@@kA@AkqGqkGk@:@:@:9 ::A :@:: 3Gq:rGq3:@ 3G3AGqqA„: :A@kAjA @A@@k@ƒ: @3 3@A:3@:@3ƒ:@@:@A@;@A:@k:@j:@:@;jA@A@;ƒ@(:9@:A::A@:9: 9 : @3 9 2::@:@3 A@233\¶Ü'@9A@@Aq@A@qAqGA@A :qGqrGAqA@]9A:9::ƒA!:Ak@3@3G@:@::9::@@:@@93@A:A@A„@4:9@ 3:@ -::@:A@:@:@j:@@:@@;@:A@:@@:@:j@A:@:39A@j:3@„:9 :993 @:3:3AA9Ak@22c3c´Ú @::3A@k@kAqAqGkqA2:9A@kAGq…@yk :39 :G3GkF: k@@ ::Ak@Ak@@:39@k@@A:@3@@k9::@k@::3 9:@@ @@;@:@:@:A:@A:@@::@A:k@;@;@:jA@ 3@A:@ @@:@ :39 33 39 3A3:@3 @A823323³Ù :@:@:@::ƒ@9:@qAGkAA::93Gk@kqA:kA933 :3@@k qG::@9@9 @::AkG 3AA@Aj@ƒ:k3:@A@:A@3 A3 ::9 :ƒ@49@@e@:A@jA:j@:A@@dƒ@:ƒ@ jA::@4Aj@@ƒ@ 39 A 93:3 : :A9 3 3,icb3]2³Øy ::@A@@:@:9:@:@AkGqAp:9A:AGAGkAqGk@Gk99: kAA@@kG9:A:4G33 @q jA9:k@kA@@:A@A:A@:@@:3 3:@ :@:A@:@;@:@:@::@@::@d@:A@;@AdA:@@A@::9@;@:@:kƒ: 99 : 9 93 9@39 k h]32,±×F::AjA@A@@A::@@AqAq9::AG:q@kAGkGk@AqA3 ::q jA:@qA::GqA: 3:A9 A@:@@Akƒ:/pA@@:@k@:@A 2@3 3 :@:@d@A@:@:@@;@@:A@:A@:@@:@j:ƒ@3;@:@@:@@k@:A@:@9A9 :939 3: -@4:A: @A@,c]c232c¯ÖG9:@:@A@k:Ak@AkAk qAG3@Gk@A@qApAjGAk@GAqAqAk:@:@A:@:q@A:9 A:9::@@:A9ƒ:AqA@3 @A::k:@;@ƒ:T@::3@:@:@:@:k@:@:@:@:@:A:k@A@;@:j:Aj;@@jA:A9@@:A944 : 9 @A3:@:9:9jA2Ž“3c,3323®Öy : :@Aj:@AjAAjG@93 q3kGqGqAA@kGAjG@3q:@qAGkA@A@-@A:@A::99 3@::9A@A@A@@:@@: k@:@:k9:@@ : :@:@::@A@d@:A:@:@kA:j:@A@j@:@:@@k@A:ƒ@0A: @@:3Ak99:9393 93k @AAGk @ ,”3c”,2-\­ÕQ 9:9:3@AAk@Aq@AkGAG:@A :qAkG9k9AkGAkAA::@Aq@GjAj:Gk3@@:9 A39:G3AjAj:9A@:@@:@:@ƒA@3 93@3„@ƒ:"@:A@:@:@;@@:@A:@:A:@A@A:@:@@:A:j@3ƒ:+9:3@ @A:9 3 @3 9 A33 j 9 ,3”\c”3233]¬Ôj4 3@: AjAFk@AqAFkA:@k39@AqAq:@:GkG@qGj @A3GqAk@AkGGA93:@2A@ -A@@3@@A::9A:@A9:@3@jA3 9 :@A@e@3A@@:@:@@:ƒ@H:@:@:@j:@A@j;@jA@A:@j@:3@:@ 9 :k@:@:3 9: 9: 3 3 : 2”3“23\922«Ó 9: ƒ@#A@k@AAjA@k@9:@ GA:qAA@AA@kGk@kGA3::ƒqyGqA@:9:9AAq@:@Ak9A@9A3: k@@::9:@@::@3A@ 2 3@:@@:@3 jA:@@:k:@;j:@:@:@;@:@;@@:@:@d@A:::@:39: : @@:39: 933 3 99@@,9,“Ž“Ž,9]3]3ªÓ33 :@3@;k@: k@:9Aq@A:qAqkqGkG@kq@:GkG@kAq:GqGrqGqA@ƒ:y9GkAA@q:9:@k 9A@:@:9::@:@ :3 2 ::@e@@;@@3:@;@4::@:@A:@A:@@k@::@A@:A@:@:::9:@: : @3:k::943, A3@: :932””] ]23\92c©Òy 39:@A@A@@3 9 :Ak9AGk:G3Gqk@:@@k39:@:::qGqH3AqkG:@kGGj@A@3:A3@A 39@A::@:@A@:@A9  3 9A@@:@A@::@:@:@:@::@@:@:j:@:A@@ A@:j;@:@@Aƒ@:@ƒ:$93:@:@::: 94 9:k333:, ,“Ž“cƒ23,32¨Ò 9:: @kƒ:=9GkApAkGAjAq@A@AkGqAA@AqA:::9::9 qA@AjAG93AkG@]c3:A@@393 ::ƒ@e::9;@:39@33:@:j;@::@:@:@:@:@:@:@:A:@;@@:@;j:@A:@@j;@:9:@:@:@@39:@::@A9: 9 9@3 : :k2c”,„3,323]3§ÒW 3 93 @9:9@:3:9AGjA@9@AjA@qAqAqk@kGAqGkGA @:9:@kA@39:3@Ac32 ::@3::@@Ad@::AjA@3: 3 ƒ:@A@:@:9A:@:A@:@:@::@:@::@@::9:@ƒ:@:@;@…:@;9A3::94@A@9::3ƒ:9A 93: 23, 2†23,cc§Ò 9: :3A@ƒ:1A@::3Gk9 k@A@AkGk@@AAGkAqAAq 9:9AA:: 23c3Accƒ3:@ 9@ @::@A3::3A@A9 ::@::@@A3::@:@:@:@:@:@::@:@@::94::9†:193::@@::9:A@:9:@A:@:339Ak 9@:3 ,2,”,†32332§Ò):9:@ A9:::3:9:@:9G33 qAG@kGqqAqAjG9„:6A@:@232-9@:3cc33A93@9:3 :@3@:9 33@::@:@;@9@@:@„:@::@::@:3 ,:3:@@A†@:ƒ@.:@@:4 @:A9k@@3GAA A@3::9 32-cc,…2]23§Ò.:@ 3A3@A:k9: @::@Aj9:9::@Gkq@AkAqAqG3 kG9:@@ƒ:393Aƒ:%GkG:@3GA,9 2c8c :AA93: :: @@:: 3@@ƒ:@Aƒ:@ƒ:F@@3:@@:@A:@@:A@A@k@A::@:A:A@:93:A99:9AA@3@@k ,q: @: 9 ic”Žc]†323¨Ò:@33 k93@:GA@@:@@qƒA:9:3AqA@kG@qGk 3k: qA@@:@9AA@ƒ:*@qAq:@ 3: 292ch2b:9AA39:@:@@:@:3:A@:9:ƒ@9:@::@e@@::@:@@:@A@k@d:@:@ƒ:.@:@9A9:9:9A@: :@k:3 A33AG@@3 93,¾33c‡2-c¨ÒI @ 3A9A@A qA9::@k AkF:@ 9 3:GkG9AkGkFA:G3Gqqk::3@k@9 :@Aq@@3 32,29bchƒc 8A@3 :@::@:A:„@":@:@A:k@A@:93 @::@@::A:@;j:@@A:@:A„@-:94::@A:3 A@:99:A:93::kAj 33 2,3“3“²Ó`39 @9:9: 9:9:@@A:94:9 @:@qA3@A@AkG3:3GqAGqGqAkAFq::9A@3A39A@: 93,32iibi223:@::@:@@::A@3:@A:ƒ@ ;@:3 9@@…:>9:@k@@A:@@A@j::A::993A99 :9A9AA :99@949@ 49 3 ,, 2cŽ“33²Ói3 9::3-:A9Aq:A@3 @A@A3: @kGkGk@k@@3@ qGrqAqAGq@A 9 3A33 Ak@:3]c“Žc“ibi2 ::@3@A@:@:jA@A@j:@4@@:33„:9:@:ƒ@3A:@k@;j:A@::@:@:@ 9: 9: :k: 3:3 :G3:A333 223ƒ23ƒ±ÓO23A3-AA9A@q:@@4933@A@9:3:A@qAG@A@@k3GkqAqGrGkG:@3:::3@: 3@ @::cŽcih“2 3 ƒ: A@k@:9A@3@;@„:M39 3@::9:@::@@:@;@@k@@A@@:@:@93A::3@: 93 394@Ak9 :9:: 3G:@@4 3 23,c3]3“±Ô62]@A3@@:: ::3: @:3A3@ 9A@Ak@k@:kA9 qGqGkGqk:@kA:3„:t9 9A@k@3 :cib“833 3@ ::3@:A3A@::@@:@:9 :@@::@::@:@@:A@jA:A@:@::@:@:4@:@ :@:9A39:@A3@A:: Aj:@ 39 3,Ž”]2޲ÔS23239@ 39AA@A9AA:9: A@A@Aj:@A@kAFA93AqBqGr9 @kqA@G3A9 @A9 3@kA:A@3ciib,G@@ :3@@:ƒ@Aƒ@T:@:@::@@3@;: :: @@:Aj@:A@3@:@k:94:9::@:9:@: :9 :9A@@:AA99qA@@-3 32“cc3c3²Õb33]2@ 3@A@jAk@A9:@::AjAjA9kGk@AkAAGkGqGk9:A@A9Aq : @: 9AA@A@kGA3]]b9333 @::@:Aj:@kA@::3:@:Aˆ@CAj@@A@Aj@3 @::@:@@A9::9:9:@:3AA9:39::9:k9 3 AqA9: 32,3”3]23c3²ÕN233]32A@@A@@:9:9:A@kG9:GA3A9Ak@A@@kGjAqGkA::kAG:@k@:3:AqkGjGkG3:99b9 4:3„:@@:A@:@kƒ@OA@3@:A:k@;@d@;:9;@k@;@Ak@:@A::@:3: ::9:9:k9A@ :9:9:AqqG9 3 2-232323³Õ ,23c] @Aj@::9ƒ:?@A3 k93@kG9AGjAA9AkAqqG3:9Gk@@:Gq:: :3 :@qAA@j:@Ac3 :ƒ@::@39A:@;@::@3„:G@::@A@:@@49@A@@A@:@:@:@::@@:@9 3::9 Ak9A9::AqGq3332,]33]´ÖW322]@A@k::G 39Aj:::@ 3A@@kGkA:qAFqGrA:GkGk @3 9Gqq 9@A@AjA@A:@]b8]3 3:9A@:@:A@A3ƒ@:@::3::„@k:@A@:@A3@A::@†:9:9A99ƒ: ::9Aƒ@3AG9::AqA::93  22ƒ\2µ×J23239AA:@@:3 9:A@:q@kAAkF9AqqGqqG::9@qG9:q:9::Gk:9 3AkG@k@3cci“82 :ƒ:9A:@3…:@:Aƒ:9:@:@:A:ƒ@:kƒ@6A@:j@:@::99@::3A@:: @9 99A3kA9:3:3 39 233ºØ,3A@:@:3@3:@ƒ:yqAA@qApA@Ak@@kGkGl@3:@ :AkG3AGA::GkG::@A@@k@AcŽcii“2:@:::@:@::@:@::2 3 3:9: j@A:k@@;@k:@A@:@394@::9:A9:9 93:49A@ GjGA::::9 232,3»Ù-2:@ :@3@@::9:AF9:AqAAk jq:@qG@A@ A3::c::Gjƒ@qAq„:@:@cccci’2 3:@A3 @:ƒ@9:@9 @:ƒ@E;@@:@ :@A@:Aj@A@::394A@@:A@:49:@A:3 9A3::9:9:Ak9A3:9 39948,33“”ºÚk3@3@@A@@;9::9jA:@kAp9  3G:AqkA@3Aj 23\AAdA:qAG:9:@A@c]cddc“ic3:@3@@3@:A::9 9@:@:@A@A@A::k@@:@@A:@Aƒ@A@:@;ƒ@ :949:A39 ::@:99 :9:@A9  3 9ƒ 22 23“»Û 33@Aj:A:@†:y@@:AA::@3qG:AqGk@kG393]“3]:@A@@3A@@:GqqAkc]c]cc]8cbA@ @: 3:@:A@::3: :@:@:j::@:@@AjA:k@@:j;@:@A@k@:A:@A@:: 9AA993GA9A:9A:3 333 23323]c,»Ü4:@A@ ::@:@A@@A@Aj@ 9:@::AqGAAjAA@A32c3@3 @3:@Aqqƒ:ecc3]9]2c8c@::k9:: :@:3@:@@:@k:@k@A@Aj:AjA@:@@:A:9::@Ad@:@@:93@::::@A:3:@::9A:9::: 333 , 22c]¼ÜH@::9A:3@AkGk@@kA@3:@@kG3Aqk@9:Aq3“d@33@A9k qG9::b3223c29,::@ :„:@:@:@A@:ƒ@A@A@Aƒ@A@kAA@k@::@::@@:@A†:#3@39Aj:9@@:ApAGA@39 39 3 9233¾Ý%@A3@@3@Aq:@ : :@ kGkG:@9A@@ 9@:@-2c]ƒcN@AG39A@AA3GqGqG::2:33]8b2@ k @::9@:@:@@::@::A@k@:k@3:A@:@@jA@:@A@::@A:@:@9:@@ƒ::@4:3A:9AA,G3 9 : 3 322¿Ý :3AqA::AjAƒ@j:@:qAqGk@:@kAk@:A2c3„c$::@A93AjAGkHkGqqAkGA9 23 @@k:@@::@…:G3@@k@A@A@94@Aj@Ak@:A@@:@:9:@::@kA9:@::9::9 AA3 :9:@::3 3 9 3 3-ÀÞh@A@A9:@AG@kA@A@AkGkGkG@;FAq @:,,3c]94q@: 3GAjAq@A:qG:@AjA9i]@:@::@ 3@:949A@A:@dA@:@@A:@@A@kA:@49ƒ:(@@::9@:@::@: ::jA9:A99:: 334 3 2ƒ¿Þ 2 :k9:993„:@k@k@::GqAkAqAq:@3dc“i2iAq@ qGqA@kA@:qA:@:Gk@i22 :@A@3 3 3 ƒ:9:@@d@A@@A@e@@k@k:@:@:ƒ@:@::@„:!A@3:9:9AkA3:9 33 33 2Ãßy2A @:@ 3: k@A@@:3GqGk@qA9A@c“3ihi,9G:3GkA:9GkG@qGqqAk@AA“2Ak@::@@3 339:@@:@:A@:A@:j:@A:@A:@:@::@;::@3 : :9: jAA@449:9 AF3 GA39 93 9 322Â߃@\AkA@A:j@3GkAqAGk:AqAG@:3:ŽcŽc“2:GkG3AqqG39AkA:kGqG:@jAF3@A::@A:3 @:: :A@ k:@@k@A:A@@A:@@„:/99:@:@@:93 @:3@A9 : 9k9::j:@ :3 39 232Âßy9:Ak@A@kA9:: Aq@AqAF@kGkqAqG3:cccib2 qGkG3G:@: qGjA:AAk@::@kAAjA3 @:@ 3::@3 @3 @@::A@:@@jAj@@k::@:@A:A@:@A3:33,9:A@@A9 ::9 :39 3ƒ ,ÄÞ3@ƒ:K@k@qA9:9GAkGjAkG:93qGkGAcccbi8:qAq qA@: qGAq qqG@AqGAjG:@@2:Aj @::@ 3@ƒ:@@k@A@A@ƒ:9ƒ:-@9::9::@@A3: kA93A9:k@A::99 :33 33 ,ÅÞZ3A:Gk@A@@A9: AqAqAqGkGk@qGkGAqkqc32i““i9 :@ 3AkAq@k@AjAqkGkG9@A@@;@A@k 3@@3 3@@::@AjA@:kƒ:3 ƒ:@9ƒ:93@A:@:939@ :9 ::AjAG9ƒ: 93 33 22,Ä߃:$@A::9 @@3Aq@qAqAqGA:qAqqA@: 9:9:hciƒ279kG9AqA@:A@@kGkGk:@Aj:@@kAF@3:9:3A@k@@k::@A@::9 9::9@„:+@3:9 339:@44:: 2:3A@3:G39::3 9 2ÅßP 9:9::9@@A3G9:9:9:@k:GqAGqAqq 9:@@“223’™9 kAq:q@;@@AqAGk@qG4@@kA3 3 ::A@ƒ:@:9:@:@9ƒ:1: :93:4A :9 9 9:: 3AA9 ::9: :93 9 22-Æáy 39@3 A:3 kA9AAk9:AGqAGkqAqGkGk k9:3@::@ 3: 3@A9kGjA:A@qA@AAkA@Aj A 9::9@::@:@:9:: 3 39: 9A9:@:9 k393 :3:9 9A@93Ak9: 3:: 3 3 ,Çãy 3@93k3GqAA@kGkGkGAqAqGqAqG@AGAG:3::9 q@A3GkG@@jA@kAkFAjAkA3@:3@@::@:@@:@;@@:@@:@@A9:@3:: 9 A@3: @AA3:9:: 3 3:  3 3 22Èä5] 333AqA3AGjA@:9AqAqAAqAkGq@4Aqk@q@A@q 9Gq@3:GkqAAƒ@AjAqkG @G@Aj :@:@:@:Aƒ@7A:@:@:@A:9::9 9:: 3@:: 93 3G339@ q 39339 3 22,ÈäQ3c23c3 39 @qAAqA@:A:9qGk@@qA@@93GA:@:q:9AqAq@ qAGq@kAk@GkAGqkqq@3 @::@:A@:@;@A…:@::@A:@A3@:3 9: @A9:9„::: 93::9 : 33ƒ2Êå23233c3c23Aq@qAq@@k@:@ƒAkGkA@:ƒ@:ƒA9 ƒA:9:qAqA@kAk@GqƒAqGqA3@@ƒ:@::@j:„@::9ƒ:+@::@A449 : 939: :9 Aq9:9 : :49 3 23Ëæ23\-2ƒ3A93::9 k@A9A:qq@AqAqGk:qkƒq!AA2Aj@:9:qGkq@AFkGk@qAAkGq 3:@3 ƒ:@†:3 ::@9„:9@A3:3A@ 9:: „: 3@A9  39 3 9 322Ëé)323232]FA:9:: qG:@@:9AkGqAq ::GHqGkA @Aqƒ:@AqGAq@Ak@qAqqGkA@@::@:@9@ƒ:@::3:@…:(@ 3:93 @3AA9:: kF9 k 393 9 33 323Íë),3233]3 A@@A@A:9:@:@AkGq qA::qGkG93AjA9Aƒ@;qqAqƒAqA@AqGƒ:AF3:@ƒ:@:9:@:ƒ@-3@@:9 A9:: 339::9AG3:@ 9334 33 32Îì>23\c23c2 3 :9A@4@:A:@AkGkGq@@AkGk:AA@:@Ak@@:GqAq@k@qAkAqAq9qAƒ:%@:9 3 @:@A: :9: :3@: 3A3AF3@:@ 3:ƒ: :9 : 39 3 2Ííw33]3c332ibAj:@:4 qAFkGk@3::@GkGG,GjA9:@Ak@A:qGkAFAkGFkGkGAqGA9:99:@@:: @@::@@39 9AA399@ k:: 3G3:@9:3::9 3 3 2Ðí23ƒc]b2cb :9::@3 jA@AqAG9ƒ:&GkG3A@A::@A@kAkAqGkAjA@A@kGqAqqGqGqA ƒ:1@:39A:@A@: :3A34:9 k@A9::A::9:9 9934:3 ,Ïì,3ƒc/]cb3hc9A@:@@ @kGq@qAGq:9:Gk9AjA9:AjAG@q@AqGqGƒqAGqAqqGkGqHqkAj@ ::9:3:@:jA@:3A9 39 9A@A9::9Ak:99 ::9 3 ,Ðìw23]cc2c8c3]c@A9:99A@AqGqAqGAq:AG3GA@A@kA@k@Ak@AqAkAAqAqAqGqGrkqH qGq:@9: 3::9@4:9:3::9 ::::G: :: 33 ,,Ñí23c,2c823cc2: A„:1qqHkAqkGqAq9Aqq9@AqAqqAAjA@qAqAqAqGkGkqAGqAqAqA3@ƒ:9 9@3:3:39kGk9@@Aƒ:23 9:33:3 ,Òí32cc83h…c<::@3Aj9:@@:GqAqA@qAqGkGkAA9Aq@AApA@A@kGApAqAqAqAqGqqGkGkGqGƒA@3 :: 9 9 :3 A9„: 9@:@:3: 9ƒ 2Óí2,ci22c82c]3@@:@A @„:[qGqqA@@kGk@A@::9AqAjAAqk@@kGAAqAqAGkAqAkAAj :kGk9kGk 3:9 @A, @AA9:@::@::3: 2:9 332,Ôìs232“i2c8ccii:3@::@3Ab3AqAqGk@AqA:@k9::@AqAFk@A@:@kq@A@qAqAGkGGqAAqAqGqGqG:9:9A::3AjkG@jAq::9:9:99 33Õì"332chchccic“ihi2i““ibc8::@AqAkGqGAƒ@MAA@::@Ak@AqqGAA939AkG@qAqrGqqGkAqAkGk @::A9: 9 ::A@:kG::: 94 9432,Öì2\9bibchibic“i,c“ihcb9c@:@ƒA0qGqkqqAkG::F:9@@qA@qkqGqkGqGAqqGqrqqAqqGAjAAqG:9ƒ:9 9:9::ƒ@AAq,:939: 39 9 ÙìS38c2c8“cb822ihb8“ii2“9:@:@kGkGGqH@kA9::AA::@A@:GAkAqAqkqGkGkGGqArGrAGjqAj:9:9 :ƒ :ƒ3@k:: :3 3 2Úì]3ƒ2h3cb9b9bc““2 c“’289 @:3GkG@kGkqA@qA:@jGjA@:qA@qAqAqAGkGqAqqrGqGqqkGGqAAF::9 3kqk@AGA@@:@339 9332Ûì>2]8238iihc2ibc2b“i239A@“ 99Ak@::AkG@k9:AA@kAAk94GqAGkGqGkGqA…:)AGkqAqGk@q@:@:GAGq::@A:@3 93333 3Üì3c322ibc“ibc2ihcc8b“2i:„@PA@: qAq qqA@@ q@A@jAFA@:@A@:@A@:A:@@:@@AkGAqGk kA@AAj:@:@@kG::3 9: :3 : 2Ýì82]238cbch“bichcbic8ii22 :3c@:99AqA@A@:93:9A@kGk@:9:93ƒ:/93;@@Aj@:@::GkFAkq@A@@Aj::9::99 :9:: 39 23Þí232,„2„2.,83\i89\2c 3A@3G3@k:A@@:@:9:qGk:GqGAkGqA:ƒq$A@@A@:@qAqAq@@:@:@::@@A9: 9:9 9 99ƒ2Ýî2332ƒ3c]ƒc d]cccc]„cJ,349A@4:@@A:@:: 9:GqA:qqG::qG:@Aqq43AjAA@@:@@AAkAk@A::AqA 3 3 99: 322áñ233,3322-323,2323,2ƒ3:9A@ 3:394@:9HqA:qƒAkGqAqGrGAGqGA@@k@:@kAqƒ@A@kGq@:@:99:43: 2âø• @34@3ƒ 3 9 :qG9:…@A@kGqk:@ƒqAA@:@::@AkAk@ƒ:@3 ƒ: 9: 3ƒ32áø–C3 3 3 3:9 3GkG3G::@:A:jA@kAG :A::Gk:@::@@:@:@9:::9 @:@ 3 3 322ãø™@A@3 3@ :9 qA„: @j::9A@@k„@::qG::@…:9::@:9:: 3 9 22äøš&2-29 3: 3:3q 9::@:@:@AjAAkA@3:@::kAqƒ@::9::9 @:9 3 23,ãøœ32,28 3 9 9: 9::49 :9:@:@Aƒ:9:9::9 9: @:33 , 22çø,332332c 3  :@ƒ:$@::9@:@A@3:9AFA: 9:: 9: :@ 32,èø 2,2-23 q:: 93 :9 9„:9: 9:9ƒ: 3 33 ƒ232-êø¨ , 3:3 :@9„:939 @:: 3 3 922333íø®":9 9 3 33 39 2 ,22,22,ìø¯9 -  : 3 322,2-23cïø³2]32\2,223,2-2ôø·3333,2,3, 2,õøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø¨2ø›øøÄøøÄøøÄøøÄøøÄøøÄø—]32øªø—cc22Ž23ø˜ø—,c33,,3\†]ø‘ø˜,232c•ccøø™3c3–]2øø™2,2—23øŽøš33˜,2øø›,,—ccøŒø232—3øŒø›2›,ø‹ø2š23øŠø›2c3šc]ø‰øœc3]23‹222øˆø,,3š32ø‡øœ3 \3,˜2]cø†ø‰@:‘ 2]c“c32,—32ø…ø†: @: 22-22ŽcŽc33—32]ø„ø„A@@3@’ 333]“9]cc22—32ø„ø  Ap:A:@A@Ž2]32c3c]]c3]2“c]øƒò@A @q@kA:9:: @:9ˆ]c,cc32]ccŽc3]9]2c3,–2øï@ƒAq@ 33Ak@@A9A:@ j::‡ƒc33]23c]cc],c2]c2c2323”32øí:@A@@qAk@ :G@A@:A@A:‡2cc]\c232c33c]92ƒ3]c3]2”]cøì A@@k:9@A@k ƒ: @@AkAq:@:… 23]33]2c]3c,ƒc 232,322]c3c]’c]c÷ìA@k@:: :@39: qAk @q@k@A93…]cc]c3c33cc32cc3233,c]9\3\c],‘232öì:3GkGqAq3AG3::kF:@A@Aj :…cc]3ƒc2]232-cd]3\cc]]9]33cc,3‘32]õìAqAqAqA@::9:@::kAk@G93„#]c]c2]c2cc32cc3]3cc]c]8]23,2‘ccõí :GkGqAqA@: „: @:Fq@kA:@ƒ3ƒc]3ƒc3,cc3]33c3c]cŽcc3c]3c]233]2cŒ,3ôê:@@:AqAqGAjAq3@:@q9ƒA@:@@;c3ƒc6]c]cc]3c]c,c]8332c3c3cc\9]2]93\2c]c]232]2]3223óê":AAj@@:@Ak9GA 33kGA9k@@A@@:]c\cc3ƒc]c\cc]c2]c3]3ccƒ3]9]ƒc332233223,3c]9c3323]òëU@A@A@@k@G::q9:39A@A3AjA:j:2cc3]\c]cc]3]cc3c]c3b3]c3ccŽ2c]c]3\32-32,23,3232322]2,c,ƒcñëkGkkA@kA@::9: @;qA@3GAjA@Aƒc c]3c]c23c3c]ƒc ]23]3b32c32]9\c]3]3223 \3c,2ƒ3 9 2,32ðê#9 kGGkAq@@:G 9:@@ jA kGAkAjAkc]3c]„c2]cc]c3c]233]ccccc3„c]3]23322]c 394@: 3]2ïéJ qAqA3@@:@kGk :9A:@3Fj@AFA@@A2]c]c]c3c]c]cc]32cc2]ccdcc33c]2]cc]2c3\ƒ39 39AA@@49 3c]îê$@::3@A@kAGk@A:9A@::@A:@@kAk@kAcc]]ƒc]c]cc]cc]2]323]cc3-ƒc]2323c32 9:9:9A@93@::9 32cîê :@k@AjGqAq@@3:@Aj::@Ak@A@A@A3ƒc232]ƒc 23cc3cc…c%3c]c2c3c3]]293:9 :9:AA93A 3:A3 332íêRkGA39AAkAFAqA@3k@AAq:@A@j@kAj cc]3]232c3,3,23]32]c33cc]]323 99: : ::9@@9:@@ƒ: @A@:333cìé3 @k@ @k@@kAqAqAq 3A:pAGk@AA:@@9 c]c2c3233c]c332cc„c32ccc3:  333:99Aƒ:@Aƒ: @ 3 :@ 39 3cëé"9:A@q 3@A@@qAqGkA399:AkGk9Ak@@A@3 „cc]3c3c\3]cc3c3]2ƒ3 3 9:9: 3:9:A@:9@Aƒ:@A@@::3 9::93]cêè) 3@:94::AqA:qAkFG: :@@Aq@:9Aq:A9:3c]ccƒ@3232cc]2]3:9 3 3:9„:@::A@@::AA:@@q993:3 :93 :32éé AA9:9:9Akƒ@Gkk@ƒ:AjA@3Aƒ@::„c e@A:@3]3]ƒc3c:3Gk:9:3::@:@:GG@:@qAq@:kGƒ:@ 2 3 3 :@9ccèé@q…:99 @kGk@::@99AGk@ 3A,AA@ ]ƒ:4@AkA:@c32]32qqG3949@:@:AA@@:Gk@:@kA:9:9@::@: :::3ƒ:@39:‡cçéL:9 :@:::AGkGA9: 3AG3@@A@:9 j9Aq9::qAq@A@ ccc]cAq 3 :@:@:Gk@k@Ak@@qqAq@:ƒA@@ ƒ@33:@:99 Aj:@2çæ,ƒd@9399::99A@kGkAG@@:@:AqA@49 : kA@Aq@AqAq@k:ccc:94 @:: :Ak:@::A@:Gk:@A@AAp@@:@kG@;9 : 3: :@: A 3ææcƒ: ::@ 9AGk9:ApGk@:: :qAk@A9:9:A@kG:@AqAAq99ccc 3@@39::qƒ@kGk@@qAG::@kAjAA3AA3 3A@:@ ƒ: 993: @@93]åã2]c]cc„ Ak9A9AAkG:: 2 AjA@kA::GqA„@BkAp343]AA@:qA@AAq:@@A:@:@:AkGk@AA@@:@3Gq:::q@A:3:@ : 99:: 9:3äâ+]232c]c23\3@jA@:3:FAjA@qAA3@:9A@qG:qAq@;kƒ@4:933: ::Aq:@kG: „:*@:@AjGk@AjAkGqAq ::9:Ak:3  : ::@:A@32ãç)c3]c3-:A@3 @AjAA::qq@@A9A@qAkGAjAkFAk@Aƒ:?A@]G::9@:@:3 @qqGkGqAAqA@@:9:@:FkGqAq: :9: 9:3:93@:9 3:99,âéI2-2c23A@3:@Aj@GjAA@k9AqAA@@kGAq kG@A9:@q@kkGkG:@:q@@qAA@qqApAqGkAAGkG@ƒ: @: 99: @:9:A@::@A:@A9:9:2áê9c3ck3@A@::@A:kGAqA@ kG@jAqAq@q@@kA9@AqA@ @:q:@@A@;@qAj„Ak@qA@q@q„: @:3: 2@3 ƒ:9 3: 3:  9:93 càè7]cc2323GA@@A@3 9@qGk@k@:@kA@AqAqA@A:9A93G3@:3 :@::3@q„A.qFkFAqAkGkA@:@@:@:3 9 3@:9::@93:A ::j3::3ƒ:àç2]cc]ƒc&3::@k@39AA@kGA@:AA@q@kGkGk @:3 3@A3::„@kA@AqAk@qqAkAqGAjGƒ@':@:@:93 9:9: 3@ 9 : ::3:: :9@:@:2ßå\ @A@c3cc:@@A@: @@::@@:9@kAA::@@9 @3 @@A@:@:@:@AkA@qqAqAqGqAFqAqAGkqAkAqA3::3 :9 :3 @ƒ:@9:9 :9:@ A:9ƒ:hÞâ23]c:9:cccdcc] 3 9:AjA@„:q@@:9ƒ@A@:9:9 :9kGAqAqA@Aq@A„@7A::@:A@@kAqGA@A@3 9;9 @ 39:: :@:9 9 :@@:@@jA99::cÝÚ,…]cc]cc9:9ccŽc‡…c-3@] kA@9:9G@AA@k@Ak::@3::q:@AAjAq@A@kA@AjAAjAƒ@4k@k@AqqGqkA9::9 :9:: 3:@:: 3@: ::@AA:k@:: 9 @AÝÛ2,22c]c]2 ]c]]„c-]ƒcA:3 9:3AAk@@k@Aƒ@23@A:@GrG:qAqA@A@kA@j@A@@;@kAkGA@33GqqAA994::@4 ƒ::@A@:@9:9::9@:A@:@A99:@ÜÜA--39::c]3cc]cc]c]3c,c3G3AGqGkGkA@AjA:3 :@@qrGkGkFAqqAqGqqAqqlƒqGƒqrGqA::A:: :49:9 9@:: 2„:9 :@@: @:9 3:9 A@kÛÝ2323@ƒ:3cc]ƒ:N]32c2c-2AApAqAqA@A@k@A:@::@kAA9:@::@kGAqqrGkGrGqGHqqHrGqAqG@::9:9:@:@43::…:@9: @A:@@A9Aj@:3@ :@3A@k9ÚÝ 3,32]:9 ƒ@63bŽ32c32AqAqA@qAq@Ak@:@@G@@9A@A@kGAqAqGqAGqAqGqqArqG…: 9:: ƒ:+9 9@A@::@:@: @@::93 ,9 :94 9:@:A@:9:3ÙÝf2323]39AA2:9:9A@]23c,3 @@94@AjA@ kG:Aq:A:kAk@AAqkGqrrqAkGqrqBqGqGq::@:9 ::@@:: :: 93 : :@:@A@ƒ:@@::@@: @@:@:@k9:9A@ ØÜ2323]83@A @A@:3cc2-ƒc4399:@k @A@AjA@94@kG@dA@qGkpGqqGqHqGqAqAAqAqArG:G@9ƒ:@:A@:@@949:A9:@A:@@:@:k@:@‡:99::@:@A:9AkA9×Üy32]3c,c] :2A94cc3]c]ccc]AA::A9@:jG@:@3@Ak@@3AkAqAqAqHqrqG@:qAGkGkGqqG:939A@:@:9 @A::939 39 -9 39@@A:@99: :::9AjA 9:3AFA@:ÖÜ'232]c]32]c9 9::9c9c]33cc3@A@@kAAk@@4:ƒ@A@3@AqqGkAqqHqHq:qA939AG„:9 2:@@:@:@::Aj@:@ƒ:::9:@:9: 9@:k@@:A:ƒ@:93 A:99::@9:9:3ÕÜP2-3232c3cqAA9:Gk@qA4c3\2]k@3GkGq@;9:@A@k@k:@qHqGkGrqrq@AqGkHq:99::3 :: :@A:ƒ@;@3 @@ƒ:'9: 93 99::@@k@:@:AA@@:9:9AA3:@@ÕÛY,3232]3c\9 @@4GqAAqGk@]c,33c @:9AA3@A3::A@qA3@AqGqGqGqA@GAqAkGqGqHAqq:::@:@:@j:@::9 :@;ƒ@:: 9: :@::9:@:@A@A@kƒ@k:3@:A3:9::AA9ÔÛI2323]2c] 3@A3@@Ak@Ak@Aqcc23\3A@:@qAkG@A@:9kGq:q:GkrAqA@AAqqAqAGqrqAqG : ƒ::@@4 :A:@:@@k@@;@@A99 3 :: :9:jA:@A@:k@:::9A@::9@k@:ÓÚP23]323]3cGAk@qAqqGkAGqAAc]3,3 k::@3GqAkFk@:GkGG:GkGqq@Ak@qAqAGkqGqAqG-9 2:3@:@:ƒ@5:@::9:3@Aj:: 3@::@::@j:A@93 3:9 :9@@:@:: 9:A9A@@:ÒÚ33\3\9\,GkGAkGAqAqGƒq$@:c]2c ::9@@:@:q:GkGk:qqrGA@qGkGƒq@Aq:A@ƒ:@:3AA:@3:3:@:: j:@@:@„:3 9-9A:@@;:@@:9 9 ƒ:@A@:9:@A394@3ÑÙY23\392:A::Aq@qAqAqGkGkGGk:cc]339@@A:3 @:: qqGq:GHqA@qA:AqGrG:@A@qGq:@::@@:@@3::3 :@@:9ƒ:@49A:@::93 9 399ƒ:@@A@3 @:9 :@939:9A9:9ÐÙB2323:@::@9AAqAqAqGkGkGqqA@:A]32 @AjA@: k@: :Aq qqGkAkqAqAqqA:kGq…:#9 @A:9:@:: :@@;9A@@A9::@@ @::@@ƒ:@3 :9:@;@@AA@:: 3@ 9: @: 9 ÏØS, :@A::@A@q@k@@AkAqAGqAA@:@: 3 3A@A@@k G::939:G3GrqA@Gq@qGAAqGqqA :9 ::94 @@:@ƒ:9::@A@:@:3@@:3:@A@:A„@A@:@A3@@k:k9:3::@93ƒ: :A@::A@]Î×a2 3A@:@:qAkAqGkGqGqGk@kAjA:Aj9 qAj@3:@Aj3:@ 4qGkGqA@kGAqqA@qq:qq : 9@::@@: 9 3@:@A@@@„:@@dA@d@;@e@@A:@ Aƒ@A@:9ƒ:  @9jA3AqÎÖR 3AAjAq@@AjA@AqAqAqGqGq@AA@9:@k:9Aq@3] 9A:Ak@A@qGrrqAqAk9Hqk@A:Aq 33 , 3@A@jAƒ39:@:A3:3@@;@:@9@;@A@:@Aƒ@!:@j@:@A94:3::@A3:@:9 :93A@99:9ÍÕq:A@AkAA@:@@:9@@AqAqkGk:A@@3@@A9:@3::@:@AkG@@3@::rAqGqqAqAGk@:3::Gq@:@ @ 3:@A@:@:::@A@: 9 :j@@::@A9::9:3:33 ƒ: A@:j@::@@ƒ:A@@:@:9@ :@ :@AÌÓ 3::@@qApAjA:@ƒ:6@:AGkGqA:@@A:kGkq :239:@:qGkG::A@: qrqHq@Aq@@::G:F9:A@ƒ:2:@3::@@:@:@@3:@kƒ:9 3 @:A:@@::@@9 9 †:A:@::@Aƒ@:ƒ: A9ƒ:9A@:9A@:ËÓ_3:: 3A@k@AAjA@@:9:@kGqAqA3@3A@qAAqqAG3A29:k::q@@rGrqGAqA::@@A3Gk@A:@@: :@ :@;jA:@A:9@A 9ƒ:9 :@@j@;@:@:A:@::@:ƒ@:@@A@:k@Aj:9:@A93:@A3A3ÊÑf3:: :@@39AGkAqAqAkAA@:AqAqGk@::@3Hq@qGqA@A2:9::@3@:Gq:99AGkG3@A@k@@qG4AjAk:3:: 93::@@:3@::9::@„:3 @:A@:ƒ@:@:A::@:@k@@: ƒ:A3A:::93A@AkAA8ÉÐ$ :9:@@A@A 9AkG@AjGkG@kAqqGkG@@AAq:qƒAuqAAjAkA::@: q@:rG: 9::@ q@k@;@Ak::@A@AA :@3@@3: 3 9:::@:A:@:9:@:@@d@@;@:@;j::9 3::@A@::9:9:@k@9:Akq@3qA99ÈÐd9: @A@3@jAkG@kqAGqAkGAp@3GqA:@kFA@Aq@kAjAqAF99: @:G:@@Ak9: qkGkGAq:3@:k@k@j @A@A:@:9@k3 :@ :@:ƒ@:@ @:@:@;@@:k@@:@@::9 9„:@@:A9@:99A@A@ @ƒAkk92ÇÏ 9 :3AAƒ@;kGApAqGk@qAA@::3@qAqqAk@qGAqGqGqkAGqqk kG94Aj4 9 3 3Gq@A9ƒ:@A@@AA3k@k@A::@3A@:@ …:33@@;@A@:@A:@@;@A:ƒ@#:@:@@A::@:3@A::9Aj:9A3jGAA:3ÆÏi9:9@@kGjA@A3@A:A@A@Ak@@:AGA@rGkGAAqkAqAqAGAqAq:@9A:9@AkG kA@kA@k:G9 A@k@@:4 @A@j@@3 :@@-@::@:::ƒ@4d@;j@:j:@@d@A:A@A:@e@@:jA@33:@9:@:@@A99:9 @@33cÅÎ ::93: @3 ::@A3:@@9kGjA9@A9kƒ:3GƒqAAFkGqGkqAjG: ƒ:G3@A@qqAq9@:3: @AG: 3G@AAƒ:83@:A::@A@23:::@ :9;@@;j:A@@:A@A:A@A:@j:@:@k:::@A@:@3ƒ@:@A::A@4::9:A@ 9 cÄÎ 3@9:3AA@3ƒ:P9A@k9Aq:A9:qkG99A::qAG:3G:GkGkG@AqGqGq9 9A@:Gq ::A@ 9:kk@3Ak@j::9AA39A@::@A:@ƒ  :@: :Aƒ@1:@;@@:@:@:@@A:AjA:@@:9:3@:AA@;@3@@::::9 :39ƒ:@ÄÎy @4@@9A9:@9:3:A:GAkGAqGG4kGqAG@kG:j:qGkAqAq@@kAqAGkG::@@:qG@Aq 39:G3@A@:Fk9:@kF jA@:9:3 3:::@:3@Aj:@;@@j@;j@A:j:@*:@@:@@;@@:: @A@j:@k@: ::Aj@9993A9: 394bÃÎB3 3:3A@k93::A3@@3Gk@k@kG9 kGqq@kGAqqAq@qGk @AjGqAA:@k3@4 ::93ƒ _@@A:@:@:9::AG:@3A@@:: 3::,:@:@@:@:A:@:A:@@:@:@A:AjA@Ad@@:@@A@k@A@::9:A:@@443:349 3:::2ÂÏ^@3 A9:A9 qA:939:@:: pAA@3Gk@@AqAqAqA@A9qGqAqAq kGAk:@:qA@A@3::9: @33A:k@@::9:@:3:@:9@Aj:@@3 ƒ: @@:3A@A@:ƒ@:@A@;@k@@:@@:@:A@Aj;@@-ƒ:@A@9 @j@@::9:: 3: 9::933ÁÎI2 39@::@A: 9A::@::@@:9A@3kA@AjAqGqAq@kG3:GkGq @:@qAqAkGkGkG:9::@A3G@3ƒ@Z::@:@@:@:@AA9A::@:@@:3:@:@:@@:k:Aj:@j:@:A@:A@k@@:@:@A:@:9::@:9 jA:@A@::3: 9 : 3 ::@393ÀÎ33ƒ @:9:„@GAA9:@::3 3GAq::AqGkAAqA@qq9ƒ:9 qqGkqGq@9::9 : kAkAjA9 A@„:N@@A:@A@dA94@9@:@ @A@Ad@;9@@:@A:A@;@@d@:@:Ad@;@@:k@@9@A@: @:@:: :3 9:9: 9 :ƒ@:3c¿Î+22]@3@A9:AkGk99AA@A qG@9k 2 qGq@@kGqAkGq…:Q :qGGrqAA:@:@A3@@q9A@AG 3Aj@:99:@@::3@A@@ , @A@;@:@::@:@@:A@A:@@:@@:A@A@k@@A:@kƒ@$::3 Aj::3:A::9:9: : :39 9 :A94 \c¾Ï23@A3 kA@A9:qGƒ:k@k@qGkAA@ 9A3GkGkGqAqGkAqAG@ @3:qrGAqqA@AqGA@A99ApA3 39::@:@::@: @@3:@:@j@:k@@:@:A@:j:@k:@:k@:@:@:A:ƒ@):A:A@@:3@A@: @:@@:9 :93 :9439:@A92c½Ï ,3]933@@k@: ƒ:9@:@:A@k9 93 qGqAqAqGkGqGq@k 3]@::@kGAA23@Ak2-3::A@93 :ƒ@'::3:@A::392@;@:@;@A3@@;@:@:j:A@:@@A:ƒ@2e@A@j@A:@Aj@@;@3 @@:9 @k@3:9 3 :3 39 9 39:9AA@A,½ÎL23c2]3@ A:@A:AGk@:A@93:3 39AqAqGkGrkGkAA3:@:@G::A“3:kAc23 :39:9:@AAƒ:[9A@3 @9: 9A@:@::@:@::@@::@@;@@:A@:@@;j:@@:@;@d@;@:Aj@: @k@A:A@:9: :993@::9::k9 ::c¼Ï,ƒ3Xc:@9::99:3 @@3 9A@A@@3:@ qAq:AkGqGqGk 3 @:@@:q:3c :cŽ23 3:@:@@::9:Ak@3 @ 3::@:kƒ:K@j::@:AjA3@:@:@j:A:j@A@;@k@@A@@j@A:@;@:@A:@:3@:@:9 k9 : 3 @-: 9@@: A3923»ÐG22]c]@49:A@A@:: 3 933@Ak : 3GqAq A@AkAAqA9qG:94@:99 9A :@:G2339A9 :@ƒ:*9 k@A@@3:@::@A@99@A@::@:@:@:@@;@A:@:@:@:ƒ@3:A:j;@;@@jA@j:@:@k@@@:: :9 9 :3:: 9: :9@3 :32ºÐy332]c@@ @;j@k@Aj:@9 :3@A::3GkGqAqk@@k@Aq q: ::@: 3@A@9 @kA:9A9 3 :@ :@:9A@k :@::@@j:::@:@:@:@:@A:@j:@:@A:@A@e@A@:A„@e@:@:@A3@A:99A:@: ƒ:3:: :9:::AA9::99]¹Ñ2323:A@k@@A@::G@3 ƒ: 3Aƒ@3AqGkGA@@A9@kGq@qAG339A@@49 kG@A@ :3 8cbcb:9:@:93…: @9 A@A39:@Aƒ:I@A@::@:A@@:@d@A:@@Ad@@j:AjA@@;@A:9:@:: :9A@A3939: 9 :9 39:@@:@ 9 9c]¸Ò ,32@:@@;Aƒ:q„:K@A@@@k@A@k@AqAqAj@A@A@: qGqqAqAAjA: 3@Aq@k@3 23b989c8:9A:@:9@@::3 :@3:ƒ@„:@:@ƒ:@;@:A:@@:@@:@:A@:A:ƒ@::9ƒ:%99:3Aj::3: :9 ::9 : 39 3 :9223c·Òk233@A3AjG9kG AF3k@k::@Aj kA:AjA@AAjAjA3 qqGAqGk9AA@3 A:jA@:93232chcb9@kA:9::@A@@3:A@:@k:@9:@@::@:@:@:ƒ@…:9@A:A@@A@@:k::9::@:4:9@A:93 : 3 9:3: 9A9 3: @cc¶Ó2ƒ3[ qA:G39: @A9:A@:9 3GGj:GqAq@AA9:G9qAqAkGkAAj @:3@GA3 3A@::3c]3chcb399::@@::@A:3@:@:@@;9ƒ:@@::933 d:939…:6@d@d@;@::9@:@@: :93: @::9:99:39 39 93AA3999,]2¶Ô32 3ƒ@f:99:@:399:@:A9 kAq@:GkGk@jA :94GqAqAqGqAq::9q:99:3@@: 3i“ib:3 A@A@@k@ ::@:@A:@A@::3@@::@@:@A„:9@::@::ƒ@+:9:A@;@:: 3@::@A::39 9 399A::9:9:392ƒ23µÕ23 Ak@::A@: 3@9:@A@:qA@@:A:Aq@ƒA3j9 9AGqAqGqG39:@9:3 :: @:A9 ccichci3:99@k::3@:3„@:k@@::9:3 @A::@;::@:„@Aƒ@ƒ:3 „:.@::@@::9:@:@k@:99 :39: 9::@:A9@2c323´Õ,A@Akƒ@NA3::4AqG:kGkGkG@qqAqApAA2AqAqqHqq 3:G:Gk3 9A 2@:qA@k 9dibi3 @A3 :@@ @A 3@Aƒ:@:@: 9 @9:@:@@A@@A@:A@;jAƒ@A„@:@::@ƒ:'9 @:@::::93:39A@::2A2,3\³Ö_@Ak@A93: @@::kG:kFkGjAkApAqA@k:GqAqAqA3:AGk::G@3 39AqA93A@k ccb9@3:@:@@A:k@:@:@:@@::943 9‡:"9::@::@;@j@@:@@;:@j;:@A:9:3@A:33Aƒ:!@:::33:3:@3:@9]3]2²ÖA@:9 Aƒ:;@::9:A@AkGAAqA3qAqA3@:GkGkGqG29qAG 9k :3 :A@:kGAj3b9b ƒ:9:@:A:@@Aj::@@;@:@ @@9ƒ:9:@::@ƒ:@:Aj@A:@A:@@::ƒ@1:@@A99A@9:@@::9::9 9:9:: ::9:A3“2c233²ÖG@Aj::3@@9::A9A@:@:@:jA@ 3AA@q k@qqGqqA33kGk3@Aqq 3:9q kGk :9832:…:@@3@:A@:3:@:@:3@ƒ:+@@:@:@@::9@:@@A@:A@dA@@:@A::9A@A:39:@A::9:@ƒ: ::39: 3: :3:833”]2±× @3 9A::@Aƒ@)k@@kG@@Aj:@:q:@AqGqHqArq23q:9Aq@Gr3 9ƒAq@@3:@@c2 ,:9@:@@:@3A@@Aƒ@4:@:33 : :@:@@:A@@A:@AdA@jA@@;j@;::@:9:j:39A9ƒ@!3: :949::93::92222c332°×.3Ak @9AqAjA3 AjAk@ :@qA9:qqAAqqGq:33ckG:9qƒA)@: q:jA9;@ @]3823::@:@::A3 jAd@;@:3@;ƒ@;@A@3 :@@A@:@kƒ@@A:@:A@:A@::9:@A:94:9:: 3A@49A@9::  ::: 94:23Ž33,c3]]¯Ø<233@@3A@kGA@AA3 9A@k @:@@4:G:qAqA:@c]c:9 3Aqq:k9:GqA@A9@Akƒc“22 ::9 @: 39@::„@K::94:@:Aj@@d@:Ak@AjA@@:A@:@@A:@j@:j@@::9::93 A@:9:A@AkA93:33 „ 3i2]83¯Ù< :A::93kAk@jA@:9A@3@Ak@:q@:GqG:Ždc]cc:GAGkGA:GqA:@:3A]cƒci2 @@ 3Aƒ@ ‰: :9::@:@;@Aƒ@K:A@@e@3 k@:k93A :9A@:@::9:@4@9:@::@:@3@@Aq@ : 9 2c32Ž]32323®Ø 9A@@:: 39ƒ:@kƒ@: @@AqA9GkA@qk3…cc9kAƒ@7:qG::@A]cccch“3:9@@@::@:@@:9:9 :9:@:@A@@:@:@;@39A@Aƒ@ A93: 39„:7@3::499::@A9::@k::A@3@A,3 3393,c”2]]9]c\­ØC39AjAA @q@@:9A@@A::3qqAq@A9AAk3cccdd 9@@k@ kqq::@]c3c]ccib2 ƒ:@k:@@ƒ: 9:@:@3 9ƒ:@:k@A@k@@A:@k@A:k@A::A:@@A@:@ƒ:#9:@:9A3 :9A9:9:3:A:9AkA: 3 :„Ž”92]2c3c¬Øn:@::jAkAA:jA:: jA@ GkGqk@A9@:“3ccŽc“:;9Ak@3GqGq::c3\cc322:@@:@4@;j:93:@@:@A@:A@@3@@;@:@;@@:@:@:@:@::ƒ@ :A@:9:::@ƒ:&@9:: 3A@A9 @:3@:A  @:9 49:2,“Žiƒ2233c]]­× A:kGA9A@@qƒ:I@@ kGAjAqGkGqA@A@kGc,3“b2ic@:@@49A9 A:Gqq233c]83b::@ :::@:@A:@@3 :@@Aƒ@;@:@@jA@jAdA@AjA@†:@@k@@ƒ:,@ :@:::39Ak::9:9:99A@3 33 ””]„-223¯ØE::GjA@AjAA@@:@@:Gk@A@A:9rAqk@kGkcciiiibq:A@qG:AA:3@:qGA323c2282@ @ƒ:@: :@:@A:A@Ad@:;@94@AA:@:Aƒ@:@ƒ:@@:@9„:9A3@:9 :3 :3@4::„@:@:: 9:9:33 ,chcc3c„23±Ø99:9ƒ:E99:9 ::@qqAqjA9 qGA@AkGŽhc,2bc“qkA@3:9AjA39Hq:: 332: @3::9:@:3ƒ:"@@:j@A@Aj@49Aj@Aj@@;@k@:39:9499:@ƒ:)9: 9:@A:9::9:3A:: AA@:9::A34@9 :8„Ž23·Ùi33@:9:@A@A?:qAq@qAqA:qAq@@Aqcch29’icqGA33GAFA qqG::Gk 33:@ : 3::@::@@::@A:@k@:@:@@A@:A:Aj@:A@@A:ƒ@:Aƒ@*:3A@::@: :3 AA9 9: 9:kF:3:@9:4 3 …2Ž23·Û>3:@ 3@ 33:AqGkGAqAq@GqAk3: 9b“ci““9GqkG@3 qkAj qGrq::G3h ƒ:Y9 3@:9: @jA@@A@A@A@:A@:k@@k@::3@::@A@:A@@A:A9:@::9 3@A9::j9 4A ::9A:9@AG3AA9:: 93,ƒ33]9]·Ûg3]9 3 9:@4@3GkGqAqGqGlqGq Gqq :“ibi’cqGk9kqGqAGk@AqGq9:233@9@A@3 3 @:@4@A:j:@::3:@@k@A@A@@A:@::@A@ƒ:-@dAj:949:@A:9:@:9A@@39::@:@:93A9: 33ƒ ,c2c2¶Ü323 3ƒ E9 q:3GqAqAqG@4:qGqGk b8c“i“ qAqG33q: :qAk@::H::A@ @39:@3: 39:@:9A@ƒ:P@A:@A@:@@:k@A:@:@::@jA@@:@:@A:@:9:993:@AA::A39GA9::@A@:9A 9332,c]3·Ý423233 39 3AG:3 3 ::qG@kGkGkGqc“hi82:qAq3kG:3GqA9Gƒq@:k@ 33ƒ: :9 3:@: ::@@Aj@:@jA@kA@@Aj@:@ƒ:<@;@:A:@::@:@ 33A 3: k@:9:@@: kG:9AqG9 43 3 2”c]d2”¸Ý_23,3223]9k9:qGA39;@:rGqGqAAk9i““8cq:@A9A:@@9:AGk:GqAA@k@ :@3:@3 9@:@j::@@;@:A@:A:@Ad@::@„:ƒ@j:@9::@: @:9A9:99Ak:9 ƒ:9A@G:3@A: 9 3 3392c3c3],·ß3223323\Gk9 qAq@:Gq:GqkGl@: 39ƒ:28\i“icqGk :: qAq:rGq:GkA@k@A3 9:@ : @A@:@A@:@:jAƒ@=j::A@@:@@:@@::@:@@:@:@:9:@3: ::@A93: 9:Gk9kG:39: 3  2…2322-¸áD3,232]c33 qAqA@kGqkGqGqqGqG 9@:@:8i’iq339GqqGAq:AqGq:@k@A@k 3:39ƒ:9:@k:ƒ@A@dA:A:@@;:@A::@:@ƒ:A@:@@ƒ: ::@A:9:A9 G@ƒ:@:A@k 3: 3  2ˆ]ºâd33233cc :GqAqA@3GGkGkAqGqkGkAG33@:@A@:: kAqqAA9GkA@AqGAjG@@ 94 :@A@@A@A@Aj;@:@:@@::@@:::::39:: 3ƒ:)@::99A9:9@A93::9@::@G39: 3 2 2,…3]»âM22]]23]cAqAqAqA@4qGrGqAqHkGGqAAG3:@k3:99 qA@AjA9:GqAqGqAAjA3 :9A@jA:@::j@:@„:9::9::†@ ::A@ ::@9ƒ@'344AA9 :@3AGA9::@33 3 3 3 323Áã-23„c kG3:Gk@@Aƒ:7GkGkGkqAqk@Aq 9@@3 Aq q:GA@:qAqk:@@Ak @@:@ 3A:@:@:@:A@ƒ:9 :9::@…:$k::@@39:39Ak33 :9:@9 33:9Aj:GAGƒ9499 9 3 23”Àã 23c]c]Gk:39:: q@A39:Gk@AqG@@9Aq…A):93G@AqGqq@::qGGqAkFA33 :@:@:@:@:@:9::@@9„:@ƒ:9::99:@::: 9 Aƒ@':3 9:9::GA9::G:k949 3 33232ŽÁä†cbi @:@3:A@:G:k@AkGk@A@kƒ@Mj@qA: qAj::AqA@@AkqAqAkG@:3:@:@@:@k:@A9: :: 9: 9@::@::9:9A3@:@9::93:33A@A9 ƒ:3AA@:::9 3:9 39 3 233Ââ 23c]c]cbihc3ƒ @9ƒ:7@:GjAGkGkG:qq;AqA@3GqqA@3GqqA:@AAqA@q 3@:9:@A:@:@A@:A:ƒ@8A@@: 999:4 9 : 9 A@A9:@k9:9kF:::9-9 3 3„23,cÃã2]ccc8“bcck9ƒ:y9:@@:GkGkGkG:AqGqGk: qGkGA3GkAq@@jA@qAAq @:@::@@k:A@jA@::Aj::A@:@:A9::@:9A@4:@@:93A9:9A9:AA:AAqAp 3 339 32Äã!32]c29bib9]cc @:9:@ @Aj:GkGkG2::GƒqG:9kGA@::@GqAqAA@kApA@ j:@ „:@@:@::@ƒ:=@@A::@A9@:39399:3:9 :9 9::9939@:A9 ,: 93: 2 ,,ÆãD,iib3“c3c]cc2Ak@@A33G::GjGkAG::qHAk: Gk9A:9::qGqAkGAqAkGqA :@,::@@„:ƒ@:@„:@@k:@: 3:3A@9 :33ƒ:" ::@A@ ::9@3 33 3 9 3 ,Æâ<2,i“2bccbcc]:@333:3GkAGkGk9::AkGG@3A@ qqA:@AqAq@k@A@GjAƒq@:@…:@†:;@@::@@:@A3:@: 9 j::9: ::3AFA93Aj kGk9:3 3 39 3 23ÉáS2332chc8cbicc9@@A3AG9::@A@q@q@@::@Gkk@ kAk:@A@kGqAqAqAq@qAAqGr::@ @:9@@:@::@::9@„:/9:933 3 @kF3AjA9:: ::A9:: 9 33 3-Íá 322ibiibiƒcD“23A@@kA9@@A@kAAqAkG9::qGq@ q@::@k@A@qGqGAjAAqAq@Ak@933 @:@A@9:@Aƒ:5@:A@499:A3::9:3 9 3:9A:9q93 kF: 39 93 ,Êá23\2cbc“ibi]i“ciƒ:9ƒ:,A@A@qAq@AkGq:9Aq@qA@:@AAjA:qAqAqAqAqAqA@qAƒ:@„:@:3 @9:9 93 :: 3@:3@@A@ƒ:A39 :A9ƒ::: q3 93 : 3 2Îá!322c83bc“ibi’ib2“@@:@@3c9::qGqGqƒA`:Gk@AjA:@@qA@@AqAqA@kGk@GkG::9@ :@:@:A@A@:939AA@:@:9 @A 3 3 9::9@:@::@:@3:9:A 39 9 3 ,Ïá 2c8232i8b9\ƒ2 “i2iibicbch ƒ:KqHkAq@qA9G:kAG@@:A@kAkA@qGqA@qAqAqAq9:@j ::@:9Aj::@A3:@3:@ :AA:9:93„: ƒ:9 GAA 943 -23Ðáy323822,ccbcicibc““ibcibA@@:@AqqAAkGqAqAqqAkAjGk@G@qAAkqAq@AqAAqAGkqA:@@9:9:@:@A@39:3A9 3 k@39@j:::3@:@ kGj::9A23 3943 3 ÓáE2323iic2™ibi2ih9bh“ib2i9;@9:GqqGq@:qAqGkAF:AkFAjAAjA@rqGkA@qAqGkGk ƒ: : 3 @j:@A99A93:9A Akƒ@39AA@9:A@ 9: 9: 3  ÑâL23bchci’“ihih,c8““h92:@@A:9AqGkAA@AqA@AqA9:@qAqAqAq@AqGqqGqq:AqAqGqGk@3 :ƒ:@A949: ::3939ƒ: 3q99:@3 3 9 39 9 3 222Òã232]ƒ2"i2chc82i“8i22“:@““9:@:A@AqkG:q@:@@ƒ:GkGkA@@AjAGkAAqAGkGqqGqqGqAƒ@k9:993:9:3:9:4ƒ:3Akƒ:G39 9 349 3 32Ôå,32 2c2322329bcci2@ƒ:F4@:9AkGqAqAq:@k:G9@AqAFkGk@@kGkGkGqGkGkGkGkGqk@ :: 9: :9: 9:: 9A9„:G9@::ƒ:9 39:9 3 3 2Õè&, ,3322cb3,82c8 :@@3kG@:GkGqAqA@Ajƒ:6AqAk@AA@AA@AqAkGkGqGkGrAqG@A@A:: 393 :99 ::9 :@3ƒ:ƒ:: :ƒ 3  ,Õí2ƒ3l,223b322322cch3kA@@qkA@Ak:@AG:9@A@GkFk@@qk@A@qAqAkGqGkqGkqk@@::9 94994 AjA:@kA@::GAG9::9: 39: 33 3 ,2×òP323,2322,cc@@9kqAq@AFA:@kA@:@k@@rqqA:Gk@kA@qA@kAqAG3qGk@@3::@9 A@ 3A9:@ƒ:@Aq::99 349 3 3 23Øøb2 2,3bA:Ak9AqkGj:@ApAq@@kA@GkGqGqGApAAqAG@k@A@@k:AqAqA 3k9kA@@A:: @::9q 9:9 9 3 3,Úø‡ 3233@@3A9GAk@ :@A@Ak:G@AkGkAkGkGƒq GqqrGq@;A@q@AqA3 3AG ::Gk@qAF::ƒ@::@:9 339:3 3 3 2ÜøŠ 4@@3G3„@3qAk@AGk@:qAGkGkGkGAqAqGrqAƒqAAq9::9A3@9AA@@AqAƒ:9ƒ:ƒ 9 3 3 ßø‹S 3::k :A@3@k@kA@:9@@:GkGkGqAqAqGkGqGqAq@33:@ 994 3@@3qA?: 99 39:9 3 3 ,Þø‹- 3 93@ 3:@A@:@::@qA@:AjA:@@:kGqGqGqqHqkGk@AGkƒ:! 3 :@::Gk9 3@43:4 3 3 2àø @ 9A3:39:@:9::qG:qG39::@ˆ: 3„A&qA@@::@kGkG:q3:@:G39:9 3 9: 3 2áøŽK3:@- A 3@:q::Aq:AqG:qGA@q::@:@AA@q@q@kA@@ ::@Aq@:@@:@334 3:: 392ãøE2 3@39: 3G:9G::Gk::qq:@G@@A@jGkGkAqG@k@A@:99 :943 k :9: 993 3  „,âø‘H339: 93k9A:9Aq@@G::Gq::qA@A:@:9@@AjA@Ad@@A::9 9::9::3 :33 ,2, ãø’*,323 33 kG3::@:A:@@A@qAAqkq@@A:AkA@AkG::ƒ@: 9 9:3:33:9  3äø” ,22,c 9kƒ:9@@k@@AAq:@:Ak@:@@::@@A@::@„:349:3: 3 2 ,æø— ,23 k : 9„:@4939 q::@Gq:ƒ@kAj@::Aj:9:A99 99 93 323,èø›2 39 9 9:@:@A@A@@ƒ:ApA„:9::„@AA:9:: 3:9 23éøž :3@: : 3:@A:Aƒ@ ::qq::3@A„:9:: 9: 22ëøŸ3: @9ƒ:9ƒ:@…:@@::9:3 9:@9 942323,íø¢+9 :: 9 3:@:39@4:9:9 9393:9 2  2]2ïøž2…(9 33 ::9:39:3@:: 9 3 3:: 32,3c2 ðø§ 3„ 33 ::9  3 3 2,2223,òøª 23, 3-ƒ„2 323 2,ôø­23232322232,32232øø²23,-23,3, ,ø„ø¹,ø‰øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø¶cøøµ,2øøøÄøøÄøøÄø¶2øø¥2]2,ø›ø¥2c]3ø›ø§3ø›ø¦223‹23øø¦3,”]ø‡ø¦,32“2cø†ø¨3”c]ø…ø¨2•2ø…ø§c–32ø„ø¦,2,”3ø„ø¦2c2•22øƒø–:Ž223c–32øø’:@:2Ž,3]–3øø„ƒ A… 9A@@ @@3]2c322•23øø@:@kq3 Gk Aq:@:A 23\3c32,•]øø:@AG@Aq: qAqqA@@:ƒA , 2]c3c–2ø÷@AkAj@Ak@A9k@:@:3A:A@ˆc]c3,]3]cŽ“•32÷ö kAq@ƒ:@AjA :@A@:@@3Ap:…„c2cc32c“3c2dŽ2“2]÷÷9:AqG9: @Aj ::@:qAA@kA:„]cc‡c]]c3\c]c3]c32]“c]öökGqAqAqq:qG:9 kG :qkGGjƒ23]„c323c3cŽ9]]cc32’ccöõA3:GkGqGkG kG3:Gk3@A@k@A3ƒc ]3c]c23]2ƒc ]3]3]92“2õô!AG@:G:kGqA:3::@ k@AkG@A9:cc]c]ƒcc3,c3d]32cc2c\3]3‘332ôô k@kA@@kGAjAA @:99:G@k@k 93†c]c3]c32ccŽ2]3]232]]‘\côó: 3G@kA@@kA@@q3@:@AGkG@A3@:ccƒ]ƒcc2c]ccŽcc329]23c23‘]cóñ A99AkGk@kA@q::Aj :3GA9AjA@A:@c]…cc32ccŽc3cc”]23]3\3c]\3óò>AA @qGqGAjGA@:q::k@k@A@j@@:]cc]c]cc]]c33c]323,cc3]8]323òò@q@39AkGqA@k@k:949@:qA@AjAA:@@c3]]cccd]cc323c3d23c3c]c]3]c,Ž3\3ñò k::q@3A@:@A3A;@@AjAq:AjA„c]cc3„c,c3c32c]ccc]9\9\9]c,ccñð# @3:AGA A@AqAkG@34@@:@kGAqGA@A]c]„c]ƒc3cc]]3c3]9]c,c3]]22ððE3@: qkG9k@kAqAFkA:99A@:3AAjAkGk@@c]c]c3]cc]]3cccc3“cc]c3c]2323,23]ðï$ A@AGk :@@q@kA9@A 3@::@AF@kGk@Aƒc]3ƒc-2cƒc3]]9Žcc]c3c3]3232Ž23ïï@qAkAq@3AA@@AGqGk@3A„@:jAkGkA@A@32cc]]ƒc33cd338]3“2]i]\c2c]3323Œ2c]îð9qAk9: 3@jAAqkAqAqA3AjAk@A@A@Gk@k@]]3323c-2]cc]3]cc]2]33ƒc33c]ƒc]22]3Œcîð(Aq@ 9:9:kG@qAqAA@ 9:GkG:k@j@A@AAc3\32ƒc 3cc38323ƒccŽcc]9]3]c332c]c2,‡323íêc]2ƒ$@ : 3:@:99Aj:AqAq@9:9:@AqAF3A@k@9@cƒc 3c23]c]cƒ3]c3cccc3\3222322332„,]2íè2c]9ƒA2 99„:'9:@AG@kG3: :qAqA3AAk@A@4cccc3c]3],3ƒc%3c]c3cdc,]c3c2cc,3-22]3232c323,cìé,c]]c :A:: ::@AjkGAkƒ:9AAjA99AG@@4cdccŽ2c]2]9cc3]ƒc323„c]]c]32c32-2323,3]3]2cëì3]cc3]2]9,A 99:G3@AGk@9:@:9AGq@ kA:@9:cccc]]32c3]…c#c3cc33c3cc232]cc]33232]]2]232cííS9]b323:3@AAkGkGkGk@@3 AqA@A@@3F,A:93]]c]c3@@Gc3]]ccd]23ccc32]]3]923,3b-232ƒ3c232]]êí]c2323@@kGk qG:@kGGk@A3@Aqk@k@4A@AAc32:k@k:k33c2cc,3232233]cc3c3c2]3]233233\23\323 2êë2ƒc3Ž23@A2 9:9:AGjGƒ::kFAq :G@:k@qƒ:(@AA@A@ 2]dcc33]2c]3c3]2]3c2,]9\]2:ƒ3 :9 3 3 ,éè ]23]c]33ƒ*23Aq 9A@kAkG:@Aj:@AAk99::Aq@AA@:qAqAj:ƒc]ƒc&2c3]cc]cc9kG: \9:39 9:4:99:@AéÝ,2…&]c2c3]ccccc,32: 3:9AFkGk@qG@3@:k@ƒA>:9AG@@k@AqAqG@:dcc3]c3]32] : : ,: q 9:3::933 ::9 A@:@:éß22]cc3]c9cdccŽc]kGk@@:@kAƒ@AkƒA 3:@:FkG:Gkq:ƒ@1kGkGjA:3c]c]93]3,32 qAq , 999-3::: 9::A@@ƒ:9AAcçÞ2-32cc]„c3::AkƒcD3GkG@:@3Gk:qGq@k@9:@AkFk@kGA@:kAGkG@A@33c2]c]2c3qGq q 3@A::9::ƒ: 93: ::@A@ƒ:@A::@3çß5233c23c3@9:ccdccc 9:AA 39:AkGk@A Ak@GkAAFkqAqAƒ@"33::]2332]cGqq:9:9 3::99:@:@:@„:9@A::3:9@A@::@9G æß32323:@: @c]: ƒcc3c3:@@j9@ AqGq„@Gk@A@qAqA@Aq@;@„:ƒc0cc39 q:::@:A@@:@;@@A@:@@:@A3::@9:@A:@:@@A@:@æà[323\3@A2: 3c3ccc]]3c3@- : k@Ak@qA::Ad@ k@kGkGk@qAjA::FG@3]ccc3:A:9:39A@A@@A@A@kAk@:@3GA…@k:@@::@A:@:k:9åß232332] ::3cc@„:ƒc42c:@:@ qAq@:@:@:@A@k@A@qAq@ k9@AjAkAG]c:: @kAA9@„:$3@:j4:G@@AkGkA@@3GkG@A@:k@q:@j:@@A:cäÞE23]3\3]c9:9 3@A@c3]c32]c3c33Aq@A9: ::@k@Aq:@GkG ::@;:GAq@kq33:G3 ƒ@qA@AqG@kAAF@:@k:qA@@kAkGƒ:@qAG@:@:: q49:9äÞ+2,32]c]39AkAA:jA33\c,3,cc:3:@@4:Aq@A@A:ƒ@EA@:::9399::GA3 @Gq:@::@A@@kGk@A@k@kqqAG@@kGqqA@A@kA@:@;@A:9: 3 @ãÝ1,332cc3239Ak@9: c,c]3,i]2cAkGAqA9AqAk@k@k@:A:@ƒ:"9:@;@:@k@-@Aqq@@A:k3G@@A3@A@@;ƒ@rqAqAAk@kGkAjA@@ˆ: 39ãÝ232332]c]]9 A3 2ƒc33ƒc4-2:ApAqGkGAq@A@A@@A:2Ak 9:@3A3@qk@49A@@kA:@j@GAkAƒq @:@:@A:kAGq:ƒ@Aq@qGkGk@j:9::AAâÜ233]32]c3]c9cc3c]c]]ƒc\ƒc\,39AqGkGqAqAq@k@@:3@:Gk qAA kG3@ k9:@:@;@@A:AAjA@qGAAqArqqAqAqAqAAjA@AAk@A@:9;::G::9: 93]áÛ=232323]c]bc]]c]cc]9]cc]cc]cc]c23:A:93GkGk@Ak:9::AkF ::9kk ƒ: @@:@AjA@k„:'@AkAqAqqGkGqGq@@AjGAkqqG3@:@:9  3:@@„:áÛ 32]3]\3c3]3ƒc#]3 c 9c]c33]c3,:99:3kA@G@A@ „:D@@A@Aq@qAqGqGrA@AqAG@A@qqGkGkGqAqGkGkGkGk@:@AqGk@:@ :@k:::@G@àÚ!2332]23\3c2cc]c:GAj:@qA 93323ccGƒ: 9 A@kA::339A„@@jAqrqG:@qAqAƒq4AAqjAqqGkGApGqAqAAqqAqAqGqq:@ 3@ :9 29:kA@::93àÙD,323232c3c]c]cc9@k@A:GkqAkG9q2]23AGA3Aj:Gq@qA@3@Aj:@:qHqqGqA@qGkGqƒA5q@qAGkAAqAqqHkGAqqAGkGkGq;@@A@23 A9:9 :A99ßÙ2323233232c33 3GkAA9AjGqAqGA…3cAjA99:GkG::@33Gq:ƒACqAkG::@AkAqGrAkGjGkA@k@A@AjA@kGkqGkGkGkGkG@:A,9:@:: :::9:::9: ƒ:2Þ×e,323,332]3c 3 @9AqGqqGkGAqAqAA@232]9@@AAGqA:@3 AAkA@@jqGA@:AqA@@AqAqGqAqrGk@Aq@kFA@:@@AA@qGkGAqAkA9 „:::9A@:@:: 29 :@@:99 Þ×y23233 ::@A:@@k:GqAqAqGqqGkGkGkG,2324@@3Gk@9AqG3@@9A@AqGk@k@qGkAkGqAqAqqHqqGrqGrqAkGqAqkGkA@qAq@G93:9: :9::@ 2 :@::9:3::9ÝÕy239:9AFA@@k @@kGqAqGkGkGqGqGk: 2]3Gk:@@A3GkGq:: qAkAA@AqGAkGqGkGqGrqHqGqGqrqGrqGrqrGAj@rGkA@ @@:9AA:::A:3::@A@: :@@::@ÝÓy 3 3:kG:@Aj@:@qA@qAk@qGrGqAqkGkG@:3]22 @:A@qGkGq:@AjGAjAq@kGqqGqqrqqrGrqAqAqGrqGrqqHqqrGqA@9::A9::::9:99A@@ k@: 9A@A9::ÜÓl 33:G9A@kGkGkA3GkGkGqAAkAqAqGqGqkGj323 3A:3::AqAqA@3@AkqGqr@rqGrkGrGrGrqqGAqrGrGrqGrqxq@::A@j@A9@:9k@@ƒ:@ƒ: @@@:A:@A9:9:::]ÛÑ1:9 :@@A:3:GAqAqA@3GkGkGkGqGqAqAqBqGAk@@] 2A@q@@:ƒ@?: qA @:qGqG@A@rqGqAqqGrqGr@@qGqqGqqrGr@::@@A@:94 @@@94::@@ƒ:A@:k:9A@3 93:@AÛÐ3::A@ƒ:Y@:@k@qAGjA@9@:GkGkGkGqqHkGkAjA@A@3Ak@@:@@A:@:@q3::GqGk@AqGrqGqHqrGrqA@rGkGkGkGGqG:G:@A@jƒ:%33 3A::@:@:A:@:@3 9::A93 @: 9ÚÎS3::9 @@k@3AjA@:GkGkAqAA@:9@AqGqqHqGq@qAGAj::3G@3AA:k9::@: q@qHkG::qqGrqGqrqqGA@qA„:Gq::@:@@:9A@:@ƒ:#9: 33:9:@@k@: j@@:9A::@39:3@AÚÍ@:9: jA@ kG@:9AqAqGkGjA@::@:kAAkAqGAk@k9:@Aq 3 @@jA 3A@3 qHƒq::GrqHqrA@AGqkqGqqGqrG„: :@@:: @Aƒ@$::93A@ ::@:@::9:9A9 3:99:@ k@@ÙÎh9A9@ @A93GkA@qAqGkGkGkGkA@:AGqGqGk::GA9:A@@k: :@k::@A:9kG@::qqGkH@qqGrqGAkGkGqGrAqArqG:qq@:@@k@:3@;jA@A„:" 9 39@3::@@A9:::49:A3:3A9AAk2ØÍj:A@A:33A3 qApAkGkGkGkGqAqAk@kGkGkGq@@k@q:::c:@@A993:: qA::@A@qG3HqrGr@qAqAqGqGkGqrqGr:33 :@:9 -ƒ@…:3 9A@:@@:9:93:99 k@Aj9::ØÍy AkA9:9: 9AqAA@:GkGqAqGkFA@k@qGkGq:@AAqAGqGr 93@A@;AAq@A3::@:@;@k qrGq@qA:GkGqrqrGqGAq::@::9@@::A@AjA@;99 39:@ , :@AA@:A::ƒ: @A9::A@×ËK2 jAF33@3kG9::Fk99@:GkGkAqAq3GqqAA:@jA9AqqrqqGk::qGqA@@A9@A:@@rrGqAAƒq:GqqHqAk@kG9 k@Aƒ:@@;:3ƒ:@@;@:: @A3@:@::@:@jA:„@ @A@A:9:k@×Ë2 Aj3A:9@:A kA9„:9:@9Aƒ@oAjA@::AAj@AAkG@:GAqGrGqA3 3 qA9qA@:@@k:qHqrqqAGqGAkGrq:GGqH@A@@:@9::9::A@j::93@@::3 @A:@A: :A@@AjA:A9Aj:9ƒ:@A@AAÖË323 9A:kAp 9::@3ƒA6@:kAk@@A@:@AjAqqGqA@:qqAqGkAAjG99:9A:q::9:@3GqqrGAqGkHƒqAqGrqqHd@AjA3@9@@@:@A@@:::Aƒ:!@9 3@@:@::3@A@j:A3@::9A9:jÖËm,32A 3@:Aq q 3:9A:9A3:9GkF:AjA@3AqAGkGkAk:GqAqrGkGAk:@:: @@::A@A rGqGkGqk:@GAqA:93 9A@A:99 :@A3Aj@A@@:ƒ@ƒ: @::A3 3@::@:3 Aj:9:@@A9Ak9@ÕËf2323@@A::GjA93A@:9@@3:q:G@@qqAqGA:qGqG3AqAGqAqqAF: A@3kG@:qA@:qrqrqAqAG q:9GqG@3::@:@:@::@@A: ƒ:@A:@::ƒ@A@@:@ƒ:39„:9: 9@4@:Aj:9:93A@ÔË32323j3k9:A99A@Ak:3 :@AqAkAkGq:A:93::Gqq:GqGkqGqGƒq 9A:q::@qG:@rGrGqAqq j:G:Aƒ: :9 @@::ƒ@4:@k99@@;j@:@AjA@A:@A@:@@A:@ 9:9@@:39A9A@: 39:AkAÔË7,]32 3 3AGA A@A3:9 @@::3AFA@qH:3GkG9GkGr@kAqAqGkGkGrAƒq+ kG:Aqqr@3GkqGAG@AA@::qGk::@ ::39A@::@@ ƒ:.3@ :@;94@@d@AjA@j@:A@:@A@@:A:@k:@9  A@@A@ÓË232]c 3A9Aj:99A@A@qG33ƒ@C3Aj 3k@ @AkGkAqA@Gk@GqrGqGkGqGqG@3Gq::AA@ 3 G@kk@j@Ak9 9@@9jAj ƒ:7@A33: 399:@j@A@@:93 3@A:A:A@:@4@@e@A@@:9 @:: jA99AÓÌy23]cc:@3AA@AAjkqGq3AA9:A9 2A: @@j@GqGA@qAk:@kGqAkAGkGr::9 :@@A3A93@:qAAkA:3G::@A2A@A@@A@A9 ::::@:9:A:@dA::@@:33 :@@jA:@@A@@A@@4ƒ: 39A9A9@:ÒÌ%323]c3:9A@@k@A@ qH3:@A9:@39 2::A:qAƒqQA@qG:rGqrGqkGqAqq:: k@AjqGk3@ 3A@::9A@:AAjA@@j::j 3 :9:@:@:@:9:9:@;@::39ƒ:@:A@3:@k:9::9 9 9„:9ÑÌk,323]c A2:A@k@@k:@:9@3::A3G@3:A3 qAqGlGkAAqGqGkGqAq4@@AqG:9A9A@AkG3k39 kq@: @:@:-@k@;@::3:@4::A@@:@ƒ:@:ƒ@:ƒ@ @::@::@:k:9ƒ:9@@:A9:: :A@:ÑÍ 222c@k39ƒ:@A…:'@:@:qGA93:@3GqrG@qGkGq qrGqrAG9AkGqqGkƒ:ƒ@BAq :@ 3Aq 2A@:3: @@::@@3@::::: 3::@:@@:A@;@A@:@:9 @@::@A@::ƒ@:@:@: @93@9@4A@ÐÎ 23]3@A3@9:ƒ@+A3 ::@: @k@49 3rGkAkGkGkGk ::GqA9AqAGkA„@"::@@k@A :@q jA@33:@kAk:9:A@ @:ƒ4:99::@A@:A@@:j@:jA:@;:3@:@Aj@@:A@A:@:A@:@:3@3AA9kAÐÎJ232cAj9:@@;@k9 39 3 3 2:AqGqAqGqGkGkG::@::q9@@::9:GkAAk@:3 2A@: @ƒ::9AkAƒ@A@:@::33 @@::@:@:@;@@dA@:A:@:Aƒ@:3@:A@A:3@A:::@9:3AA9A @q@ÏÏ.332kA9::@A@@A@:Akk9 :9A@@jA ::@qAqGqkGqGqAqGk9ƒ:9A@qGrqAG@jG3:@ @-9A:@ƒ:!@:AG::3AjA9: 2 :::@ :@@A:@j;@@Aƒ@&Aj@:j:@:: ::@j@:9:@@93:A993:9::9ÎÏ 2]33A@A@@:Aƒ:-k@@: :9:@AA2:3@AqqAqGkGrqGq@AAF:: qkGkGrqrƒ: :9kA Ak@:@9:@:@j:@A@ƒ: ::@@::A:@:@:ƒ@ ::j;@:@;@A„@:399;::A:9 ::A:A99:9A 9:@ÎÐl2339 39Ak9:@qA@@::@: k@: 3 @qHk:AqHkGkqH@k924@GkHqq::9@ @qAGk@k3@A@: @:@4: @@k@@- 3:@::@ j@A@k@A:A:Aƒ@k@Aj@:AdA:@:A@@:@@ƒ@:@k@::99@: A@ÍÐ(,2 3@A@G:AqA@k@Aj@k @A3 qAqGAqAkGkƒq& 332@4GqGGq:Gq:@:9:@q 3:@::@;@:ƒ@ A3A:@: 3@:A:@:@:@j@@j;@:@::@;„@A@@:@A@@A:@3A@49@:9AA@kAj@ÍÑ3 AGkA@9:93:Aq:3@A@:ƒ@A@@3GƒqGkGq@@ƒA&::2-@@:@:Ak3 @kA2 3:@: :@:@:93@:@„:Dk@3@@: 3@:@@:@;@@;@;@:@A@;jA@@j;@:j;@@:9:@:@4 jA9:@k9@k9A@A AAÌÑ2k@q:@ƒ:):@3 @A9:A94:@d @49HkGqAG:@kAq:A@q@@:AqGƒc/qqc2- :3:9::@:: @:@::3@A::@A@@::@A:k@@dAƒ@k@:@dƒ@':A@@A@:@Ad::3@@:99 ::9:@A@:@ k@9jA9ËÑW3AjAGA93@@:@:@ 3:3A@A9: qAqA9:GkGkqA@A@3@k ql@A9:: 3  ::23:A:9AA:9 ::@@;9:3;@ƒ:>@:@@:@@:@:@@:k:@A@:A@;@@dA:jA@@:@@9A@A::@A@: @:@@;9AAA@@ËÑU2AA@3 ::@AA39::Aq@:A3AqGkA9:GkGA@k@k@:: q@A@:3 @39:@Ac9A9 @A@9:9::Ak :9@Aƒ:9@:k:@A:@@;@AdA@@A:@Aƒ@dAƒ@:@;jA@A9 @;@j:A@@A:kƒ: A9: 2AjkAÊÑY2A3@:93@:9::@: 9AqA@@kGq@@q@::GkGq@A@AkFA@:A@:k 3@@4:kA9:393 9Aj:  @@Ak3 :@j@:9Aƒ@ @dA:j@:ƒ@233@@d@:k:@@:A@Aj:@@:@:2@:A@::9::3@A@:93:A9A@ÊÒZ2A9 3A@::@:A@qAq:qAqAAqA:A :qGkGjA@:@Akq:3qrqGk@@A:9 @AFk:9::bcbA :9 k@A3:9A@:@:@:@;ƒ:ƒ@9;@@;@;@A@;@:@@A:A@dA:@A@;jA@:::@@::9:@:@@::9:::39::@ÉÒ,3@3@ƒ:b@A:@A:9AqAqGkGq:@3@GkGk@A33 kG :GqGrAqA@k3 jkGkA3b383b::3::9 @A@3::@::9:@@;@9:@@j@@:@@A@;ƒ@dAƒ@:„@ :@@9:@A@3@A@A@@:9::3 ::9A:AÈÓ6233AG3 :@:G@jAjA@:@AqAqAq:@ kGqAqAA99 ::qqHqA@AqA @ƒAO@@39323b9c:@ 9::@@: j:A3@:A@@::@:@:A:A::A:A@d@@j;@;@@A:k@;j;@A:@93@@:@3 @:@@ƒ:A: :9:3::3ÈÔ 23:@:@:@AkƒA0GjAGkA:@@ AkkGkG@@k::9,:?GqqGkGkGjA33Aqj3 3@;ƒ3!2chchAk@4@:@:@@ @@3:@@:@:@@Aj:@@:ƒ@j:@;@;„@A:j@@A:ƒ@ j:@4Ak@;9 jƒ:k@93:9: :949::9ÇÓA : :G::9AjGkFj::@kGj@:A3@qAkGqAqA@@:2dqGqArGqAqqA 9@AqA9::3c3ƒcchA@@:@:9;@:@A::@A@49::@ƒ:@:@e@;„@ jA:k:jA@;ƒ@$AdA:A@3::@@:3:::@:::943394@:ÇÓ:9Aj9 ::9:3GkAG@3:9AAj@@Aƒ@kGqAjA@qGqHqqrGqA 99ƒ:(9 2@:G: ccibc3A@@:@:@:3::@:@@:3A@;ƒ@::„@:AdA:ƒ@A„@(;j;@@:@@A9A@A@@:A@:9:3:3:3:9 3 33ÆÓh:@@AAjA@:39:GjAA@:AF@::@:3@:AqA9:A@:qAqkGA@:@kAqG:G394 @kG@3 3cŽcbi8@:3:@A :@@:@::@Ad@::@@:@:A:@:A:@A:ƒ@;@A:@e@A„@$:A@d@ @:Aj:A@:@49:9 9: : ::43:9ÆÒ:@@;@:9AkAA9 9::@@A:9:Ak@::Aƒ<@:GqqGqHqGkGk9qGkG:qGkG3A@k @@3 c8c23A9:@:@3@:3@A@@:@A:@@ƒ:?@@:9::@:k:@:@:jAj@A@@:j;@k:@A@;@:k@@: d@:9:3:4 9::9:  A9:ÅÓS:@AjA9AFk@@:A@::@A@@A@@:9@@Aj@::qHqArqqAqGc”G:GqG4@kGA:99AA@kGk 9cb89::@@49:A@: :@ƒ:@Aƒ: 9:33@;@39@…:@:@:@AdA@@A@@:@@:3@@:@3„@:3:3:99 99 39:@:9: ÄÓK :@@:@A@AqA@::@:@k@3AjA::@AkAA:@q@kGqGrGkcŽGq4Gk9AAkq :9Aq:AqG923:@::@:ƒ@ƒ:@:@::939 9 :@ƒ:ƒ@:99:9ƒ: @A:@A@A@:@k@;ƒ:@A:: A:Aƒ:9A9 9 9: 4 9: 2 A@3ÄÓ:33:@kAjA@:@:@3:9A::9:qGk@q:@r@AqAA::dcqG:9G49@ q 3Aƒ@,39 8::9::@:@@ A:A@:@@k::: 9 :9:A::@;:@@;@…:0@:j@:j:A@::9:@::9:@::@9 :3: 9: :3@939 3Aj 9ÃÔM393@@9 :9 :@@: G3A@G:GqGqGAqGA@kqq:jj:: :GkGqr 3@A:@39A2c9:@:@A:3@kƒ@ -:@:@::@;9…:9@@:@A‡@„: @A@:::@kƒ:!@3:39@A:9: :9393@ :3:9 9 @]ÂÔa339Aj9A@A@k@@: ::qqAkAqqGrqqA9kqAAG2“c”d9r94GqA ::G@k@: 3cb233@:: 9A3:@Aj;@ @@A9@:@::@:@@:@ƒ:@::A@A@Aƒ@:@::@ƒ:@@:ƒ@!::9:A@:9:9:94493:3994 3A9::ÂÔP2]23 3 3@3 9A@:3@:GqAq@qHqAqGAA:@:9“9bcid“i29GqGj :@k@3@cc]ci2A 9@@:3@::@@A@„:@;3@:@@::@A::@ƒ: @:j:A@dA@A@@„:@:@A:@@9: 3:A@ƒ: : 93: :9 ::@:::ÁÕJ323234@9::3 3@ @qGkAA:qHqk@A@:,ii“i“i2 :AqA@;q::@q: 3c,ccbc2: :A@@@ƒ:@:@:9:9A„@ :@@:ƒ@:9::@A@@;@@:j;†@;@:: @ƒ: @:3@A:9:3949::9: 3:k::: ÁÖ/2]2- 3 3 @ q3GkAqqGk:qGqAqAqA2cbc8’i:@3 jkƒ@ :qG:@cc3ccbi2 :j :@:3:@:9:3@::9ƒ:@;@dA@@3@A@:@A:ƒ@e@@k:A@:@;jA:j@::9:@@:9: ƒ:99ƒ: :: 9::A39A9 2 ÀØ>3223,33::33:GqrGqGqGq:GkG:ApA22iihcib3G:3A@:qAk9 qr@:c]c2cb9„:@:@::9: 9 3::@:ƒ@;@@A:A@:k@A:@@;@@A„@A@::@@A::::@k3ƒ: @A@ƒ: 9:9 :9 9:33A :9 2¿ØI32323]3]339GrAqGqAqGq qGqq@AA2ch““bi2:q@@Aj:@A: qGq::c32c:@:9@: @@93:„@O :9:@:Aj@@e@@:@A@A@:@:jAj@;@k:@j@@;:9:@A@@:9A@:9j:@k:@9:9 @4:9::9 9::A9: 939ÀÙy32323c\c :4Gq9GlqHqkHAqrGA:@39i“8ci“ihA3qAAq9:A9: AqrG323289@:9:@::A:@9 :@:@@A:: @:A@@:Aj:3@jA@d @@;@j@;@A:A@:::@j::9 @ƒ:!9A@::@:::3:9 9 :99 9::9:@ :]¾Ú2-23]ƒc qGk::@GqAƒq94q qkG3i““h22::q qA@9::qA:3@:@qG23@,@::@@3:@A@;@k:AjA:ƒ@-@@;@jA@:3 A@@A3:@@A::@@:@:,A:9ƒ:939:@@ƒ:@@:A::99499:939: 99 9 :¾Û23]2ƒc:qG3qqA::GqH@qAqAqAA9h9299qGq:GqA9::9Gq9 @qr:39:@3 ::@ƒ:@@:ƒ@:@@AjA3@Aj@A@@A@3@k@:@A@3@9:@„:@:@::A@ƒ:A@: ::A„:93 9 9 99:94:99 @:2½ÛL32323c]c q3GqAq9::Aq@kGqGkGAibcb qAGk9 :3 :AAq:Gq:@ 9::9:2:@::9@:@:@:AAjƒ:#9@A@:@;jA:@@A:@@:@A::@A@3:9:@@:@::3ƒ:(9:9::9@::@9:9:9:99949::: ::c¼Û_,3c3c]c3“ :GkGAA9qG:rGqrGAk@\9b““@kGA:9G::qqAGj qrG:3 :@A9 3::9 AjA:@:k@A@@: @@k@A@@:k@:@@;@„:@@:@A@@ƒ:@:: 9::3A@@A9:ƒ@: 9949::93:9::3A3 22-¼Ûcc]„cS]2“:qGqqAAqqGqqGqkG@3:ci“::9Aq ::qGqGkGqqGqrG@3 :9A2 39@:3@@:A@@A@:A@jA@:A:jA@@Aƒ:@dƒ@::@:@jA::@:3:9@@@:9:@kƒ:!9AA9494@3::9:9: :@A9::232»Ú:2]cc]cc3i“ qAqAqG@kHqArAqGqq:3:@2G3 b 3GqG: :kGkA@qr:@3ƒ:(: ::@ AAj:@::@3:@@:Aj@@;@@;j@A93:3@:9„:9: ƒ:, ::9:3::9:9A:A@:39:9: 9:9:9:::b2¼ÚF23cc3bbihqA94GqkAA9AqGqrAqHqG39:@2“c9Gq rq: qGqA@:A@9:@:@ :39:3@ƒ:@@k:9A:Aj@;@A@:@@A@@Aƒ@#4:9::@::@A9::@:@ ::9AA9::Aj9:k@:9ƒA@@:9::9:9:,c33ºÚN23]]c3hc9hcc3G:9::GjAAqGqGkGqAA9A3 @:c9kGk @qqGkGAq:qq:A@A3:::9 9A9: @;@::ƒ@;ƒ@j;@„: j:AjA@@A:@ƒ: @:9:9:99@: 9„:%99:9A9A@q9  : 3:9:,22cc»Ûcbi88“ibicc 3„:QqAj:AqGrqGkGkG3::@AAq q :: qAqA :GrGA@k 9:@:A@39@@j::@@e@@k:A@@j:@3::@A:@@A:ƒ@:::9A@ : A9 :3A@9 AjA:9::9A@::A:33 3 993-2¹Ù2ƒi$b3“bcbccc  93Aq@G::qAqAqGkAG@ @k9ƒ: 9 3GqqGk@:ƒq$GkG  3:@:@:9:A@::@:@A@@A@:k:@:@A::ƒ@B;j@@Aj::9@::@:@:3 ::9A94::A@:9 ::@3:A@9::3 3:3 323,c23]3¸Øf232chbchc833]b394:@:A@:A:@qAAqA@@kAk@:@@::A3 qqGrAq:rGr:Aj 9 @A@@:@:@k:A:@@A@:k:@::@:A:9:@@;j@A:@ƒ:†:49 3 :9 :99:9@@:9:9::Ap: 9 39 3 2]cc3\2¸ØJ323bc2ichŽcŽ9]8cAG:@@@::jA:Gk@qGk@9AFAkAG:9 qAA@kGA:GkGqGAk9A:@jA:k:@A„@'::@k@@A:@@A:9::@:@@A:@Ad::@A:@:@@::9Ajƒ:-9AA9:@A: 3:3: :93:39 ,c8,3c3233·×',22cbihcihc]9b:@ 3@:: A@::GqAqA@Aqƒ@1k@q:949 qAj@A9:qGk@kFA@@:@::@:@:@:k::@::@:@:@:@::ƒ@::@:@@:@::@:@9:3:9ƒ:@:ƒ:,@::3@3 3AkA:::9:::3 33 3232Ž32]]2·×232c8ci2“i’cŽc“2cƒ@::9k399A@k@kGkGkG:@rkAqGA:3k@3GqqA@:qGAqqAk::9A@@:@:9:@@„:94::@@-:@::@@A::@-@ƒ:@:94 9:9 9@k9:ƒ@ AA3:?A@k@93::A:9:9: 93: 3,ƒ233]3]]¶Ö23b9223bci“ihi“bc8:@4@AGƒ:1A9A@@AqAqA,:GqGqk@:9GqGAAqHqAk@qqGqG@A@:@@;@A@;9ƒ:@:9:9„:ƒ@A :3994:@:@:@@:9@:49 ƒ:2@A::9:A@43:@::A@ @:G:: 3 9  , 32]2c2¶×3ƒ23ci8b8cb2ih23:qA9…::3G:@qAqAG9rqGqGq3rGqk@::qGAA@AqArkGk: @j:@k@A@9 :9 @::@:@…:j@ƒ: 9 3::@@„:1:9:9:9:9::@:3A@A@:@@@kG@:3 :9 3 23c,3ƒ32¹×2329’i,ccb92cc“bc9“@…:)@@93GkGkG@kA:9HkAkG: qAqGk9:GqqA@kAqGqAF„:@A@@A:A@@A9499:@:@:@„:@@:9…: @::@„:.@A9:@AA939Aq9:99Aj@@:@:39 3 32,c23¾×y,328i“8“™“bch2832bi“i’i @iAk:AqAGk@@9::@qGq:9AkA@AA::qGq@A@AkAqAq::@::@::@j:@A:@@A::39:@::9::3:993@j@9 9:9A@:9:Aj:3…:ƒ:@ ;@::93 9:ƒ ,3,”ÀØD233]8“h9h3ii“8c2i“i“hchc9AG9AqAk@qA9 :GqAA@3GAqq:@:9GkHqk@@qAGkA:@ƒ:V@k@;@:@@;@jA:@A:3:93@A@@:4 :::: 9A@::9:@@AA99:FA@G 3@2qG3:9 : 3,,3Ž2¿ÚG,2]2232chc’ibc2ih“8c““@Aj::@qGkAGk9::Gqq: qAk@qA@:AqqAAqAqAjGk@:@@:@::ƒ@::@jAƒ:'@@::@@:9:33::9: k :@:9A3::AjA93A@:3ƒ:Ak: ƒ: q 3 9 93†3c2c3c¿Ü@32]829bcibi8,i“8b2:@A@:@@qGqqAGkA9AqA: qAA@kA:@qGqqAkGkGAqGkƒ:@:334†:L@@ :9;@:9A@A3:9339:@ 3:9A939: 3A:9@9::qAqA9: 33 33-c]3c,c,¾Þy3,3,382bc8,cb8329:@@:3 :rGqAk@A:9Gq3GkG2:@Ap:AAqAqAGjAq@AqA39 :@@A@@:@@:@:@@:@A@3 3:9@:9:@:: A@A 3A@A9@::AA9::GjG: ::9A@:9 9 3 3 cc]3Áá2323,dbcib2@A@2ƒ:v9@:@qGkAqqA:GA:GkA :@@Aq@AqqGqAGkAqqAqGq@:@:@A:9A@::@:@:k9::@:4@A93:3@k::@A:9 ::3:9:9A:kG9@9 -:3 9 3 3 ,ƒ3c2d2Áã:323239i,2c::9:9A:A9:AqGAGqA@k9kFk9@:kGAjA@rAqAkFGAqAGqrƒ:A:9 @…:'@:99:9 :9A@:3:3:9:9:9:9Ak3AA@A:ƒ:Aq9 943 33 9,9„3\3232Àæ323\328cb::@@:@::GƒqAA@:qGqGqAGAk@AkGkG@@qGqAkAqGkGA@q::9:@Aj :9:93 @;@A:933::4„: ƒ:!@A93Gk99 :@:F4333 3 3 32ƒ2332]2ÁêL]2]]2922ccii@A9::A@kGkAAqAqAk:@GkFkGkAAqkGAqAqAqkqAA9::9A@:@@A3: :3@:9:: ƒ: 3 @k93ƒ:$99:3: AqA999 3 33393 3 3,„22]3Âí@32],2c@::@AAqAFqAqA@qG::GkAAq@qA@qqA@qAq@GkG9:::@:@AjA9:9@@„:.99 :9: 9:3A94kAjG9A@AA @:qA9  39 949ƒ 3 ,2Êð\3,2]8849GkGkGkAk@:@A@q:@kGqqAGkGkGrAqApAqAqG::@ 3@@4::49:@ : jA@3: @AA@9: @949Aj 2„:A:: 2 3:43 3 3,]3Êô!3,3:3@A@jAFqAqAkA@::@AqAqAkGAkGqƒA qAGkAqA@@:ƒ:ƒ@@A9A@ 3 3::9 :399 ::9A39:9Ak ::qAqA9 j3: 3 9: :9 3 2c2Ëõ 32] @3A@@qAA@qA@@:q:@qAG@kFk@AqAƒqP@qAqGkG-::99:@A:3::@:9:9A@A3:@A@A::9:: 9::A 9::A@q9::3 33:9 3 -2-3Ì÷B2c @9AA9kAkAq:@@A@:@kGkGA@k@kGqAGkG@kGkGqG: 9 ,:9::39: 3: k9„:)9 @:@:: ::@:9 3AGk 99 :3 3 3,232ÎøG3 33A@:Gq@A@:@kA::Gk@kGkG@@kGkGkGkGq qAqqGk 3:3::9 3:: G@9@@::9ƒ:@ ƒ:@339::Gk@: : 3 3,23Ðø> 9:9A93Gk@@:@@q@@:GAjGk@A@A@AqAqGkGqqGqA9A@:: 39:994 :9Ak9ƒ:@@3@qAG3kAp:9 kAƒ: 94933 3 -Ñø 9:9A3A@@A3qƒA;q@@kG@qAjA@k@A@qAqAqAqAqGq@:99:39 :9::@@AA:39kA99::FAƒ:9AFA:9 3 3 3 ,2,2Óø/:@ 3@: @A:jA k@kAk@A@AqGqqrGkGkAqAqAqGqGr:@@Aƒ: :9 9A„:&3AGA9::A:3 9:Aq3::9 33 3 22Ôøƒc23 A3 :@A@3@A@FAk@9AkGkGqGq@AjGAAqAqAq::qA@@ 93G@A9:@kA32:@:99:@:@k9 99 9:9: 3 3 3 -,Öø…]::9@3:A@:@kAkFAk9GkAAqAkGqA@q@A@qAqG:qrAj::3 k39  @::@A@:@3::@:: 9 :949 : 3 3 3 2Úø…"23 3@9::9:@kA@::@qAqAqAqAqqr@kƒA@:A@kG@:G3: AkG3:Aƒ:!@GkG:343 994 3 33 3,-Ùø‡ ,9 :39:::@qGA9:@:GqAqGqAGqrGƒq:@@AqA:3„:'Gk@@AAk9 9:@:A9: :@ 3::3 2 9 3 2 2ßøˆ-,3:9: @::q:AkA:G3A::@AkGqkGqArGAqAqA39:Aq…@"kGA::@::@:9::3 ::9 9 3 9 3 2àø‰@32-c3q9AGjG:qA@@:@@::GkGqAqAqGkGk3 ::3 3 kG:@:@:@9:39ƒ:9 3 3 3 3 ,áø‹,- 3 k@9A:q9:Aq:qqA9ƒ:79:GqGkGqA@@:3qG3 9:A@k@q:9 :@: 9493 3 33 3,áøŽK-2: AA99:@@k@:Aq:GqG::9A@@Ak@kAkG:AkAA3 93@Aq9 :9 3::9: 3 33 3 3 22ãø3 j9A3ƒ:@:@AG:Aq:Ak@@:@Ak@A@Aq@@:@9Gj„:@: 33:: 3 9 33  2åø“A3 ::9@:k@:@Aq:GA@ƒ:,kGjAjG@:@A39 9 A@:3@3 99::3:9 33 3 3 ,22çø“ 3@:3 ::@kƒ@A@@:k@@A@:@AA@:AjA@ :9 :9ƒ:3439 9 9 3 2éø” :9: @ƒ:@::@k::Gk@Aj@Ajƒ@:@:@39::99 939 3 3 3 3 2íø•3::@93 @:@:A@::@qA:@:9ƒ:Aƒ:@A: 9::3:9: 33 3 322îø–62 3::9:@:@@:@:@A:@:@A@k:@@:9:9 99: 9 3 3 22,ðø™ 3 93 9::9ƒ:&99:qG:9499:9@::@ ::29 93 3 3 ,3ñø› 33 3:@:: :9ƒ: :A::9A9:9 3- 3 22 ,óøœ3ƒ 3 9 9::94::99 3 3 93-ƒ232õøŸ 29 39:4ƒ 3  39393:3 3,-,,öø¡"3322  239 9 ::322232øø¥32-223,22222232323,øƒø¨323c-3-2-c3,,32øˆø«,-2„cø‘øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄ·Ën¸O1-¾¯É¾¯2Á¯ /Á»OÁËÁ»OÁ-|É|2| /ˆOÙˈOÙ-daÉda2ga /gmO§ËgmO§UªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÄ,cöøøÄøµ,øŽø´2øŽø´,3,Œ2øøµ2øŽø¶3øø´2Œ22øøµ3‹3øøµ2øŽø’ Ÿ,23]ôøŽ@@AGj@A@…::]2,2côø‹ 3@AkG:@Aq::AGGk@: :@2c33,Ž3]cóø‹ GqAqGj;q:@@ qA2Aq: k2-322323óøŠ :ƒ@:q 9A@Aj9A@ q :9: 22c3,2óø‰::3:kGqq:k@A:@:A3@@:@@‰23,ƒ32]c232òøˆ:G 3GAqAGq:@@@:k@A@ 3 A‡,2]32]22d233‘3òøˆkGq:Gk:qGqG:q :qqAq39A@@4…c333233]c, \,23ñø‡$:3GkGk@G9Gkr@ k 9:Aq @AGkGA@93]cc]]„c 2232323]c32]ñø…":: 3Gk@A@AkGq:@:9:@q@kAqAj3c3]ƒc]cc]]]2c2]‘2ñø„ Aj 3GkGqAj@Ak@kA :@9:AqAG@A ]ƒc]ƒccc3cŽiŽŽ”“332ðøƒ#@AA3:qGqA@@k9AA@39:@4AF@k@k33cc]ƒc]cc32ccc33cŽ“ccðø<9 @3q @:GqkGkA@A:@q@: Aq@kA@A3c3ccc]c]c33ŽcŽc]2]c]øˆø":@3@:k:@GrGAjAjAq::9 q::@k@Aj@:ƒc cc3]3]ƒc3“39cƒc33\ïø 9AA@GqAk 3@A@ƒ:9: :@A@k@@:@:cccd]22ƒc3]3c,Ž33]c,223ïø?@ kGkAqGkG:@A@@kAG@q 3::AjAA@A@:ccŽcdcc,3c3c]92d c\3c3]3,Œ3ccîø(@:AqA2GkGk9:@qkGkqA@3 ::@@k@Aj:Ac]cccƒcc3c32Žc“]c323c2]9c‡îï23c]„)@ kG :Aq:AkAGqAAq@:93A:@AAqAqA@ccccŽc]ƒcŽ2Žccd233\]]23\Ž3îï32]c]„? kG3:9:94@@A@@AjGq:@ :@::jA@qAjA]cc3cdcc39]d“2]c3c233c332]íñ/23bc]@39G:@::::k jqGqAG:3@:@:@AjAGqAA@cŽc]ƒcŽc,3\93c3c323cc\]c2,2‹32íó]dc]cƒ >3::@::9:FA qBqkGk A@@k:@A@qAqq@ccdccc,9cccd\c]cc-c33c]9Œcíóƒc \3]c:@9::@„:6k@AqAGjA3AkA@@k@kGA@;jc]c]cc-3c]cc33“3ccŽ]cc2c]]3Œcìð2„c.3c232c: 9: 9@::@q@@kAG:3:@Aq:A@Akq@@A3]9]cc2ƒccd2]c3“Ž2c]]c3322c‹2]ìäX,,]c2]c23]c]c]23c]23cA 9A::@GkAqAq3::@@qAGk@@G@;j2]cd3c]d33c3]c3cc]c,c]cc,‹32ëå32]c33ƒc4ccŽc32c3,:@kA9:G3GqAG@A9:9AGkGjG:kA3@c9c32ƒc]]]23\9]“3c]c3c3\3]cc2‰2ëå23c\ccdccccƒ*,3:@@GqA:Gq:GkGjA3G 94@k@AkGk@@A9cc33c3]„c2cc]3\932c]c3232]23‰ccëåZ2-c33cc3cŽccdc23k q:9G:AkAkG@:3A9AqGq kGk@3dc]cc]2323]c3229cŽ2cŽic3c]c3232Š3êåZ23233\3c]cc:3cc]c-,c k3: ::FkGqA@:3GAkAk@Gk@::c9]23c]23cdd33]]b3]8],33‰]2êä,323]23::3cc]]@::GAƒcE2cA3 ::qAkFAq@@: :qAF:@AA:ccd3c32c33c ]cccc33c9]c]cc]322ˆ3]êäB23]2329@A3@c3::cccc3ckGq@:@::FAkGkAk33:Gkk9Aj@A2cc]c]3]c]„c]c,c]ccŽcŽ3c]3cc]9]]ˆccéã,33232]c :3::3\ccc33ƒcH]c qA@::9::A@qA@AGk:G@G@ k@Ak@A33c:cA8 3c23]c33c23cc]c29\3]]239\3†ccéã232c]9]33@3 @Aƒ:c]3c: 9::@9ApA@kGqA@@A:k@kƒ:@G@kA@3:@A@@Acccd3c2]c23]]ƒc ]]cc32,cc,…2]2èá,32332323\:AA@::ƒ@:ƒc]]c@ :ƒ@2: 94@@qAqq@A@:@AAF:GkA@@k@@Gk@k:@3cŽ\3]23cc9]ƒc]9]cc]23,32,„33èá/232323]]cc:@k@A:@:3cc]3c233j:ckA:9A 3AqqGkA@kƒ@kA:Gkq@A@AkAqGqA9d…c23c23]c323]232]\332,33ƒ2]èß233232]c]8cc]:GAq@3:9]c2],2c]ƒc?:@:9qAqGkG@: @k@k@q:jGGk@:AqAqAA@A3]ccŽ23]2c]cc]c2c]]23c„3,23c,2éÞ232323]]c3c]3c293:9]cc,3c3„cN4 AqAkAkGq;@j@AkAA@GkGk @k@qAGq@j:]c3]cc]3b32cc232]3]9\33\323]2233,2, ]332,æÝ ,323\3232c]3ƒcc]]c3]\c]9c32]2]3-cc@3qA@A@@::@:@;@A@AjAqAqAjAA@@qAjA9 ]c3b3\3]33]233cc]8]3c2c332c,3c3232”32åÜ23232-3]2c3\c]cc3ƒc3ƒc]ccƒc,-]@„:93„:D@@AjAjA@qAqAAq@A@:3 : 32ccc3ccc233c3c,32323]32]3]23]23]3]8]23]3äÛB232323232]c3cc]c]]2]2]9]c]c33cc-2AkGA9q :@:F::@@AA@AqAGqqA@jƒ:09 cc]c]c]cc3cc]9]]3c2c32]232c222]332c2äÙF23,3,32-23c]c3\32c]29]3cc]c]cc3\33]c,A9AqGqGqA@kG@kA@:@@:qGkGAq3@:Aƒ@c]ƒc(3]cc3]9::3qG:q 23q: 233]9]32233å×@2,323233]9]c]c233]3cc,323:GqAc3 c32c]22c q:GkGkGqGkA@k@@d@@49ƒ: @: ApAqAkŽc„c cqqGq q94 ƒ:9: AGq 9:93 3: :9 äÔA,23 :239232 ]c3cc]232:9:AAqG@k9:232]22:@ kGkGqAqAq@A@:@;::@ƒ:@3::9:A:@AAccc]d9:GrGq…:@A3: 2 3:94:9 3:9::93 ãÒ2, 9 †: @@::@:@AkG3 :@GkFkG:@AqGqA3c2ƒ:9:@ qGkGkA@@:@@kGAkƒ:33@:@:Aq ]cc:@:@Gƒ: 9@A3 3::9: @@ 3::9:93ƒ:ƒ 9::áÏ,23:@;@ƒ:49::qA:::@A@k@@kG3@qGqqA9kAqGkAqA32]2 q:@9 :kGqA@@kƒ:)@AkF9:9@q:@G:@k@3:q :@:AkqA@:9:9@@:9ƒ:@:-:@::3 39@ƒ:9::@áÎ2ƒ/@@@3G3@A @@q:A@qGkAjAAk@3:@HkGrqGqAqAqqGk]32:„AO:AGkAAjA@ 3 3GkA9 qAGAG3:qGAA9G3qq:93 k@AA@A@A@@:@@:@:3:9::@:: 9@@3G:: àÎ3 :@ƒ:B :9A@@:k@A3GkGqGqGq@ 9G:GqqGkGrGqGqGkGkAc3,kFq9Aj:@qAG39:9:9@:@ƒ:(qkG@kG3@::@::GqG@;@A@qA@::@:93AjA@kA@@:ƒ@„:@@Aƒ:9::àÍ%, ::A@@3:AAkA9@Ak9GkGkGkAkGqAkGkGqHƒq"HqkHqGA@k]:GA@qqGqAqAqAA 3A@A:@::ƒ@0Aq @ 3::q3:::@qA@j@A@AjA@AjA@@:kGAjA@3A:AA9@:@ƒ:9::@A:@àÌX2 9k9A@A3A@kG3GkG:9:qAqqGkG3GqGqGkAkGqGkGqqGkqAG,ck@k AqGkA@:@q GkGjG:@@AkGj:::@:AG„:A@qrG::k@A@kqGA:kA@A@3A@AAkƒ@A@@:@::AA:@::9:ßË[,3 3GA@@@9Aq:@:AqA@::GqGkGAq:@:qArqGqAkHqrGqrGqA:2 qA@@kAq@AqA3::@k9jAk@:A@AApqGk@::@:ƒ@":: kA@A@qA@A@jA@AjAkGk9qA@@A3@A@k3„@:3ƒ:@GÞËY22 9AqA2:9:Ak qAqAqqArAqGA9A::qGqGrqGqAqAqAqGq:3kAA@qA9AqqGq:9A@qG:@kA@kAqqHqA@qGqƒ@Ajƒ:"9A@kAkAk@A@:@A@@qGAA@@3A@kAqA@A@:3ƒ@A:@:ÞËy3, 3A2 ::@A:9:GqGkFkGqGqqGkqAjA::@AqGqqGqAqGrGkA:92 k:9A@@qAqGkGAkG:@kAGkqGkqrqGqA@kGqrqGAAG@Aq::@A@AqqkGq:@A@@jAqrA:qG@@::@@AAk9A@:@3@@ÝËy,32 A3AA9@:G-G-GqAGqArAqqGqGqA:@@AkqHqBqqGkGkGq@AkG@Gj :3GkGkGk @::Ak@AqGkAGG@:@AkGrqAGqrqkqqAkFAq@qkGAqAqqr@eAAkGqA@@kAjAkGkq@A:@9A::ßË 2,3A3 9@ƒ:ykGkG:qAk:qGqAqArGqG@AjAGkAqGrGkGqAA@@A@k@A@A9AkGqA:@:@:9GqqGqrFkA@kGkA@@qGrqAAGAGkGAkqGqGkGqAqGrGqGqApAqq::@AAq@kA@@:A@:2 9:ÞËy2332A@j :@A9GqA q:9:G::@rGqGqAqAk@AqAqGq:@AqGkAk:@3@AjA@A@@: 2q@3AAqAqAAkqGqG@kAk@qGkqkGkGkFGqqAqAqAqAkGkGkGk@@AqG @@jAAqG@A@:93ƒ: ÞËc]c23jA kA@:qA q99::@9::@A:qkGkAq@AqAqGkGq:qAkG:@@A3 @:Aj@@3 :@:@GkAkGkGkGqqGkGkGqGqHkHqGqAjAFkƒA&kGkGqGqAqAqGqGkG:AkAkG@:q@:3::@ @k@ÝÊ232]33q 3:@qA39k::@ƒ:@A:@:ƒAmqA@k9:@AqqGkH9AqA::@jG3@@Akq :3AAqGk kGqGqqAqGqrqqBqGqqGqGrqGrAjGk@A@qGqAqAqGkAkAqAqG@:Gqk@:@A:Aj 3:AÝË,33c\ 9 9Ak::9@A9::@@:@Aƒ:BjA@kGAA::qGqrA@Ak@AjGk@A: Aj:@A:3:@Aq@Aq3@@qrGqFrqHqHqGrqrGrrqGrƒq*HqGkGk@;@qAqGqAqGqGqGqA@3 A93Ak:@:9:ÝËd32]cc393 :GAp k9A@::@:Aq: k@A@k@@9Gr:@AjGAj:9AqqG3:@A3:9 :9A@3@A3G@rGqHqAkGqrqGqrqHqqrGrqGrGrqrƒq&A@kAAqGkGqAqAk@:AjA@k:9A99@:::GAÜË$232]c] Aq9Ak@::@A39 :@:kGk:9qG@@kFA„:SA@@kAqA@:AGrGq 39 :9@:9:@qA@@4@qrGk@@AqqGrqGrGqrGqrGqAqqHqGrGrqGqGkAkAAqAGkGA:@::9ƒ:@:9 :9A9ÝÌ'2-9]9]@:@kG@AA9@ Ak9 @:@::GkqGA@Aqq qGƒqMGqAq@@qqGkqrG33AAGA::GqA@3rGqrGA:@qHqrGrqrGqrGA@AjHqqrwHqxGrqrGpApqAqA9:9Aj„:@ 9: 39A:@9:ÝÍ:3\c] AAkGkFkA:3FAAq3@@:3GAkqqA@qGqAGrqGqAA:GqkHqGqq kƒq.G@ 3:@:@9rGqqA:qrqrGqrGqrGrGjAkGqHqGqrGqrqNqrGƒA:@ƒ:9:9ƒ@ƒ: @:  ::9ƒ:ÜÌ2233c2qA:@kGkA9Aƒqc Ak@::k@@Aqq:AqA@:qAqG3rGqGqrAGk@ qA:j@:3@A3@rG:9rGrqrGqrGAqqAApGqqGqGqGqrGr@:@:33@@A:A@@ƒ:::@@A@:9: A 99ÜÍ932]32k@:kA9AAq r:3AA3@:@3 3Gr @:@k :GrqGkGqAqrGqGkA@ƒ: 9:AqG9A@@3A@k:qHqwGqGAqGqqGqr„:+qBqG@:qG@::@@ 39::@:@:@:@@A@ :@A::93@:@::ÜÍ 332c Aq9AFk ƒ:y@kG@@:9@:@:@:Gk::G3:@kAkGqGqA:qHqGqGkqGkA@:::Gk@:@kA9:qGrqrHqHqAkGkqHqqAqGqHqG@:A:A@A@@9:3:9A@@;@@A:9A@:@:@:A9A@:9::ÜÍ 2]3ckFA: ::ƒ@ k@A3:ƒ:6@: 3 3 @:GkGkAqAk9qAqrqHqq:@9:3A@Ak@@:qrqGxqqAƒq9AqGqqHqHqGrqqr9:9:2;A3::33A:93AjA9:::9A:@A@A:9::ÛÎf2]] kA@:@kA@:@:A3 k:@:@A3qAA3AG:@@:GqGkGqA @qAqGqHqGq 9 9q@@:@4GrGrqHqGqGr:AqHqrqGkrGqqA@ 3:@:…@::3ƒA:„:@@4@k9:9: :9:ÛÏy]:9@kA@@:@k@:9: : 3 qHj 9A, 3kGkGqAqAqA@:rGrqGqHqqGqq:rGr::qA@@GkqrGxqA@rGkGqAqrGGk@G@A3 :@@:A@;jA@:: A@:@:@A9::99@@3A9 2@:A@ÚÎU2,c :3A3 @k@::9:A@:3 3 3 @A@33@qrqGqAqAqqr@qqGqlGkGkrGrGqGq9 GqA@;: wHqqGkGqqGqrGƒq4:@499 @:@A@@::@@:9 ::39:99 A@@:::4A: @@:3:3:ÚÎi33,@Gq@@9A9:AA@q@@:  ::93 93 :A:GqGrAqGqAGrGrqHqGkGqGqqAAq@jGqA@9rqrGrAqqH:@:AkGHq@:@::@@;@A@e:9:ƒ:99@„: 3:9@::„9 @@39:9:9A@ÚÏ23AAqAqA::@kGkƒAAj:@d:: @A@3::qGkGkAqAqqGqqGqAqqGqAA93 @:@A@k@:rqrqGqGqAA@:ƒq ::@:;j@33 @@:ƒ@:A: 3 @@:@:@@:A@@::49ƒ: 9AA@AjA@ÙÎg,2 qAqAq::@9:@39:@::@@3:@k@k9 @qrGkGqqGqAq:qHqHqk:AqGqq::A3@:k@ @3 GGqAA@;@:q@A:9@A:9A@: @:@Aƒ:#@:@:@3@A::@@k@A@@: ::9A@kA@kÙÎjqAj:GA3@ 3 :@::Aq 3@;@@ Aq 3@qHqqGqHqrGqH::@qqHG:@kGkHq9A A@r@A39 j@A@k@j::9AA@@A::@:9:A9:3@Aj@::ƒ@:@@::@9ƒ:@A:AjA@A@:@:A9:9ÙÎ&,3@GA9 339 @: @@:@:@3:3@A 39:GqG:ƒqGqArqAqƒ:ƒqX:GqGqqGA:9:@kAkG:9 kAkA:G: AjA2AA3A3:3933 :A@;@A@A@A@: 9@A,A@:@@A@A@9::9AAØÏ29:9:9ƒ:\ :9Aj@:3 :9A@@ @:@: A9qHkAGlGqrqGqGAA:@::A3::GqA@@A::@Gk@:9 9 q@:9:@A@@::k::9A9:Aƒ@$:9:@dA@d@A@: 39:@A39A@k@kA:9::9:A@ØÏ23ƒ: @@::@A3 ::9AA@q43qq2@AqGƒq:GkGqGrqAj@A2::@:@ƒA9:kG@:3@k ::3 q@::9A3ƒ@93: @:ƒ&9::@A::@:A:k::9 @@A@dA@@:3::@: 33A@9@ƒ:3AjØÐ 23 :@ 3@:@:@ƒ:K 3GkqA@G9:GqG:3qHqAqGkGA3Gq3cŽic::9qk@rGkk@@@:@@A@qA:33@A9;::@@3:@„:@@:@@::ƒ@„: 3@A@@k:@3@:@:: 9:@:9:@:AAAA@×Ñh2393A@ @:@::@GqGqAqG@Ak@GqGkA@:@kGrGkG:A@AA]ccŽ9:GAqqrqGGk3 ::94A: 3:@AAkAjA9:@9::9:@A:@:9:::ƒ@:3 3 j;@@:@A@:ƒ@: 9:A:A9@99:×Ñ0:3::k@3@::qAk@AqGk@kqGkGAkq@:3A@qAqG:k@@j,d“ŽƒcU @:qGHq::@@A3@kAkA@:99:@:Ap:9A@A3:  99 9:A@:@@A:@;@@::3:9:@A:@:@;@A9A:@@:A9ƒ:@AÖÐr 93Gq@@ kAGkGkGjA3@GqAqAqkG@:@@:@AqGkA@A:9cc @k@A@::kGq:G:@::@@@@A::@:@ : k@:::2:@@:@::@@:@A@:@@A@@:@@ @ƒ:@@:@A@j@@:A@:A:9:9::AjÖÐy@::qA3::9AkGqAFAqAAk@qGqAqG:A:A@rqGqA@@jA:@]ccqq@@;@q:@AA:@@:9::9 @::3: @@A9: ::@:: :@@:@A@:k@Ad@dA@;@3:@@::Aj3 @k@@:9 @: 3AjAÖÏY@:A@kGG::@99AqAqk @qGk@A:AqG:@k@3@qGlGk@;AjG@@AjqHqrAj9 3 9c33 k: 39:@@A3::@::@::k @@9ƒ@4::@:A@@:j@:@:@A:@@j:@@ @A:@@;@:9::@:3::9 :9 k@A@AÕÎ 3Aq@:9„AL9:AqApA9 kGA:@A3Ak:A9HkGqq:@3@AqkG::GkA@A :3A::@:AA@k:9 @:@:9::@3@„:5@:k@@dA@;@A@A@:@A:@A:@- @:jA@@::@@:A9::: 9A3A3@ÕÏ$3:AA@:ApkAA99:Gk@:@3GjAk@AkGG@39GqqƒAf@3 :GkGk@AqA@k j:Ak :@ @A::3::@::9 :@::@:9@:k@:@;@@:@@d@:k@@dA@:@A:2:@@:k@:A@A@:A:@9:9 :@ƒ:ÕÏH :9:@@9AAFkG::@::@A9::AFA:pA@:]@qGrG@jA39::q@@qrqqGk@3:Ap @:93:9A29 ƒ: @:@9: „:@@ A@:@A@@:AjA@A@@::@A@:k„@4 3@@A@:@dA:@jƒ: :: 9: 9:ÔÐm 39A@;qkAqA@:Aq:@A9::@:@A:@@3AqAqAj;@3]c::A@rGrGAA@: 3GAk@9 c8b :3 3@A 3@@A9:@@:@::@@;@dA@@:@;@e@A@::ƒ@;@;@@: ƒ:@@4:ƒ@::@9 @93A9@::ÔÏ$2]:@@:9Gk@q@:@::@::@3@::@::@:@qGqrƒ@2c]2@ƒqaGqGk@qAA@k :9b22cbA@3Aj@ :@@e9::@A3@@e@::@@:k@Aj:@@:A@k:@A@j@:A@9@A:@@: :@:9@49: A@A9AÓÏ#2339Ak@:@ :9:@@:@Aq@AjAjA::@: qƒA5dcdcAqHkGrqHjA@qAqq@A@-:3398c2::3@Ak9@A@@ :@;@:9;ƒ@4:@@;@@:@:A@:@j@@A:j:@;@j@:@jA@::39:A94@@:@A9@kk@ÓÐ 323c99:AjƒAX:@A@kAq@:@AqA@ @A@q@A39:@A:@qGqGqHqAAqqA@@A@k 9::9c,33bc 3:@ @:k 3:@@:9::@:A@:k@@;jAƒ@)k:A:@@A@A@@A:A@:@A:jA@@:9A@:@A3:3AAAÓÐ 23,3 2 9:9A@kƒ@ A@ 3@:kA@ƒ: j@AkAjA@Gqrƒq/GqrkGqqAqGk@::@:q@:3cc]b8ck@:9@:3@@3@:@::9:ƒ@ 4@@:@k@@:@;„@'A:j:@:Ad@@:j:::@:@4 :@:@A:9:::9A3jAÒÑ 2]2,@  39@q;k@j:9:@GqA@9@AkGkAƒ@rqGAqHqqGAq;:9GkG::@::@@:A9 ƒc cibAGk::@ƒ:A :@A@49::A:j:@A:@:A@k3@;@:jA@A@k@@;@A@::9::@@99@;:@@9:9:3@::9ÒÒ2„3; 34  qA A@::qAqA:qqGqG@:rqAqqHqrAqAq@ qGqA@:q:@AqA@3 ƒc 8c2:@@:A@9ƒ:@@:@9:„@7A@::@A@:@:@@:k@:@;@:@;@@j:@@9@A@A4:@@::3:9A9A:9A@ÑÓK2,232] 3 2@@3@A@qHqAqqHqrGqk@qH@qAqqGkGkcr@qrAq:@rGq@:A3@: ]]9bc9@@@@: „:A@AjA3:A:A:@:k@@d@A@A@;@@A@A@jA@@:A@A:@3@A@d@:@;:9:@ A@A: k:@AÑÔ% ,3c3cc: @ 4 jA9AqqAqAqrGqrAA:qqAAqAƒ:+jqG3GqG:@qGk::@@Aq 29b2:@:@ dA@-@@:@:@:9 ƒ@::ƒ@4;@A@:j:@jA:@:j:A:@k@:@@k:@@A@A:Aj@@:A:@kA@3@:@A3ÑÔ62323]c]933993 3GqqGkGqA::qGqqA@:Aq@Aqic:G;3Gk:AkGƒ:Gk@@22@ƒ:@ƒ@)::@:@@:A::@:@@k:A:@@:jA:@A:@@k@A@@A:@Aj;ƒ@: 9::@::@:9A@@:@@:@A@@ 9A@ÐÔ.,3232c]c3@: 3q@rGrGqqGq::qHqAk@9: “ii“3bci“9qƒ:@AAqq@:@:A@3@ƒ:@:@@-@::@@:@:@@…:@:@:@:jA:@@;@@k:@:@;@jA:ƒ@;@;@-:9@:A9:: :@::A9:@A9AqÐÕ23]3ccƒ !:9 q qqGkHqqG:@GqqGA@::“i’28i“hƒ:b@qGqr93@:@@k2:@::@ :A@::@;@::3@::9:949:@:@:A@@dA@@A@A@@;@@;@j@Aj@9 A@@j:9A9@:k@@949 3A3Ak@@ÏÖ3\cc]c]2c3qHqrƒq6HqGA:qHqAjGA@“i’ 2ich3::k:qqAqH9A:c]22 A9 @@3@@A@:ƒ@C:9 933:@@::3@@:@A@:A:@:j;@@j@@;@:@:@49@A:@ @:@A:@A:9:::3A@AÏÔ]ƒc;dcc2c]cGq q:3:HqGkrq qqGqAjAkhi22c3@A3@kqAGqAA@]2]cckƒ@;@ Ad@@j:@:A:@33:::@ƒ:@@@„: @@k@A@@j;@;j@AjA@:9A:k@:9A@::@:@ƒ: ::9:9@AkÏÓQ2c]c]ccc]ci““ 3 qHq qrGqG:qHqA:A@i2““299qG3A9AkGkA@q@:Aq9c9b2:A,:@::@A@A:@:@::ƒ@4„::@::@:A993:@:@:A:Aƒ@$A:@:@; 3@A@@;3:@:@@:9:3:9:9::93ÎÓ,3ƒc@cci2““™“9::9GqG9AqqA3:q qG3392iihikG@@kAF::Aq@@Ajq@]bcic:@:: @ƒ:9;@„:@9 :@:@@„:@:ƒ@;:@ƒ:-@@j@@;@:@@k@A@9 @@;@3::A::::99:3:9:::ÍÓ?233]cŽ8c“ch™i“:GqHqqA::@HqAGAkGq 9bc8,c8kA3Aq :FAk3 qH@-28@„:@::9::3@9:9:@:A@3…@„:@Ad„@ƒ:A:A@jAj;@::@:@:k@@: @@:j@ƒ:3ƒ: 99:3:: @@ÍÒ,c]hcb“ih“iii :qqGqGq:@A@ƒq/Gqq 3ii“9:Gk@:qA@qq::qA:9Hq@@23@:9:@@39:9: 3:@ƒ:@@k@@::@;@:9:@::@A@;@„:@:@;ƒ@%A@::33A:@A:2:A::@99:: 9 :339:3:ÌÐ[23c2ch“9bi“c™hccqGqHkGr@ qqrGqHqr@AA“’@:GkG:@GqAq @:G::qrq;22:::@A@9:@@ 9::@@:@@A@A3 „@:9::@@Aj„@ƒ:@@:A„: 9:@@A:39Aƒ@9:: 9:4:9 :939: 3ÌÐX,32cibc“hihccdcqq qqGqAqqH@rqqGAkAjo“i@:qGk::qAA9A:qG:39Gr@: @A@ :@A:A@@A@@3::A@:@:ƒ@3:A@A@ƒ:@:@;@Aƒ@'::@3::9@A9@::@::9A:@:: :93:9:: :4:ƒ@:ËÏ 2322cbb9“biƒc4]cc q: :qlqA k@qHqrG@@ 3:““ kG:9:q:@:@kG:3A@Gq39@„:%@j@ d@;@A:9::@k:A@k:@A@:@A9:@A@A:@d@;ƒ@*::@::@@;@@:@9 ::::99::: :393::9:3 @3ËÏO229bc“hciŽ3ih3 @4:qA@:qGqGqqrq  @kG@qG :9G:@ qGkG@@:r@ : @:@:@@::@:Ajƒ@)A@ :@Aj:@A:@k@k::@@Aj@jA@:@j;@k@@:@:@:@;@„:9AjA@::::9: ::3::@ 3:ÌÎ2,32ibcbc“ii““d9bcbik 3:9::qqAqrGkGqr 3@@bcc]9ƒ:! qrAqG;qqA@2 @:9A:A:@:@A@;:@@-ƒ@A@A:@3@A:@@@@;@;@@A@:ƒ@;ƒ@#A:@:3::9:9A::9:3:9:39 :@ 99::9ÍÎG323223i2“h“i“c]bc@iAq  9q@A:GqHqGq 3: :c2c: G@qrqqGkqrG@A 94@ƒ:,@::@Aj@:@:@3@A:@k@@A3 @@:@j@@A@:k@;@Ad@@:Adƒ:"9@@:: 9 :@@:93@499:9:@34:  ËÎ238232ƒcC“i“hcii229:: @@j@@:A@kq@:qAqrAkG@k::A 3 qqHq: qAqGrqrq@, 39:: @@:ƒ@A@:@;3@A:j@:Aj:@3@;ƒ@6A:@dA@@:j@@A:@:::9::@::9::@3AA@::4: 93: A33::393ËÎJ,232“bc8b8ci“bc88@jA23 ::9@:G::qGqAqAqAG@:jGAqqGq:@r@rGq@@rGA@9 9 @:3ƒ:#@e@::k9@A@@A:A@@A::@@k@;j@A@:@;@A:A…:@A@:9ƒ:9@ :@ƒ:9:9:::39:::9ƒ::ÊÏ23“ib2™c8cb“i“cƒ:;AGk3: 9::@k@AAkGAq@:jA@Ak:k qA@:q::qA:@A@jA: ::9@:9@:@::ƒ@;@::@Aj@;@:@:@:@:@::-9ƒ@:2@:9:@ƒ:9ƒ@: 3@:@A9::@:3ƒ: :939A9 @ÊÏ,,3229“i“bcchihc28@:9AkG::9:A@AAG:qAqGk@@ k…@!3@ kG:AHqGkq@A:A@::@A@: @A@:@A:ƒ@ jA@@;@@jA::@Aƒ:@:@@;93ƒ: @A@@::@9:9AAƒ:9A:k@ƒ: :: 9: :49:9ƒ :ÊÑ023]22™2i8bi2382cii@::G:@:@@:3AjA@qGkGkG:9@A@kG:@ƒ: 3GqqqAqH@qr:ƒ@::@3::@k@::@Aj;@;@dA@jAƒ@:3ƒ@::@A:@A@ƒ:@:@:@:@@A3:99:@ƒ:@:9:3:9: 3@3:9: :2@:ÉÓ2„2i“i“b9’ƒ“@:@::@ 3:qA@kGqGkG:A@kAkqƒ:3qHqHqGq:@rGqAq:A@::@@A@::@@:Aƒ@A@:@4 @A@@A3:9:@::@@:A@:@:@::9…:#:A@A:2@@::@::: :9:3:9A3 9: ÉÔb32 38cbibcb2ii’ihi’@i2:@A@k:Gq:qGkAqAqqG@qGG@ :: qqA@rqAA@qrqGk@@::@A@j::@:k@@k:j:A@::3@:k:@A@49:9…:9:9::@::@::::9::9:9A:@ƒ: 93::9 ƒ: 9:: -::3 ÈÖN,2-223ibich“ibci“c’::Aq@:9:qGAkGkG@qGlqAqA::9::AGkA@qG:qGqHkG@;@:@:A@:@:A@A:@Aƒ@%:@@:@:@A@j:A@A::@::@A@ 3::9@:@:::@ƒ:@ƒ:@:9:39:9:99:::9 9È×C32328bc8,ii“8c’i“A@@::AqAGkGqA@k::qGqGq:9:: qGk@qA@k@krAqqAq:@:9:@ƒ:ƒ@jA@@:;:@:@:@::@A:@@Aƒ@::@@ƒ:@@::A ::9::9A@A9::ƒ@:ƒ:: :3:9 9::2::4 ÉÙ„38cibbcƒ249@@k@@:@A@qAqkGk@9 AkAqGA9:G3GkF3GAqAA@GqAGkG@k:9:@†:@::@:j@A„:@@j:A:@@;jA::9::9: 99:@:A:9ƒ:99A@A9:99949:9:9ƒ:  :9 Aj9ÆÛ923,8c2i2@:kA@@:3@::kGqAqGk 3:GqGkA:9GqqGqA9:@rAp:qqAqGkƒ@A::ƒ@99„:@:A::ƒ@::A@A@@k:@@::9::@@A 3::@:9@ƒ:9A@„:9 9 9:9:9:9::9 :9::@9 ÇÝ6]23c]h2A::bi:@ 9A@:qGAAqG3:@qAk@:9AqAAqA:@rqqAA@qAqqƒA@:@@3†: 9::@@j;ƒ@:@:jA@ƒ:@@:„: @@:9::9::ƒ:"@k9:9A:k@A:::::3::2:9 3 Çß2-232c9ƒ: @@k 9: @ƒqA@3:9HqG:9HkG@A@q::GqGkƒAMqHqAq@k@A:@@ 3@:@:@::@A: 3:@;j:@::@::9A@@:@:@:: 9 @:: k@ 9:::9A:9:9 9:9::9„:  :3 9 39ÆàA232c2829@:A@:3:3@:rGqqAG@4Gqq :qAqAqqA@:qGrApAqqGqGk@@:@A:A@A 9 ƒ@ƒ: j@@A9::@:@:@ƒ: @:@::9@@:9: ƒ:99:: A@A:9@::@AA9ƒ: :93:@3A9   cÅäF-2322cih:@:::@qGlGk@q9AqA9GqAkGq:A@:rGqqA@AAkqGq::@k:@:@:@A94::@:@::Aƒ:9ƒ:@:„@::99…:#9Ak9 :@::99A:94::9A@Ak999:3ƒ: :9, ,ÅåC2 , ,2“i::@A:GqqA@rG4GA::AqAqAA@q:@AqGqAq@qGAkA ::@:@:jA@@:@:9:9:@„: @@:::@:A@;@ƒ:@:99:9ƒ:'9A@A::@A3::9::9:9 :: 9:  3 : ƒ2Äè02Ž22ih9A@:kGqGk:A@k@9qAqGq@@kG@k@rqGkAqAqAqG3@3‰:@@;4:9:@:3†: :@::@ @A9ƒ:,A@::@A99 @@:Aj9::9A@Ak:33 9:9 ,3Æê.23b3]A::@A@A@:qAqGqAkAA@AkGAkGqHqGkGkGkGk@A„@:@:@A ƒ:&@@::93 @A9:99 j@::@ 9:9::@A9::9A@9ƒ:3 9:9ƒ:Ak9:9: 939:9 3322c,Ãë032]c3@:@kAqqA@qGrAqAq@kGqkGAAqqAkGkGkGk @::@ƒ:@@j:9ƒ:I9: ::@@:9 9A@A9933::@A9::9::9:@A:3::9AA::@39 @:3 @:3 9 3233ÃìT32c2 :qAkGk@AqAqGqGk@AqAkGAj@kGqr@qGkGkGk 2::A@@::@@Ak3::A@A3 ::9A@::9:@:ƒ:-@A@:A93: ::@AjG:9:::@@9::9394 3 2 ,922,cÄí.,c3:9A@@:AGjA@:AkGq:@AqGkGqGA@qGrGkGqAqGqGA@3ƒ:@„:9…: 39:9:@:9 933ƒ@:9 ::9:@A@:9 9:jGj::@:3 ƒ:Aj:„ 9 2 22c-2ÃïL22 :9A@@:qA@qqAAjG@@kGkGkGkqAqGqAqAqGqAqr:@:@::9:99 A9:: 33A@93@::AA9:3 9 ƒ: @AA9::9 :9ƒ:&A::@::9:A9Aq:? :9 :93:33 922c,3Ãñy:93A9Aq@kGAq9Ak:@qGqAqAqAqArqAqAqAqGkG:@A@@:9 @A999:9A@A:3:: @AA: A:9:@A9:9@@A3A:3@9::@A@:@@::9k:9:39 3 29,cc3c3Ãð\2 :@3A9AqAkGq:@G@:AkGqGkGqAqGkGAqGkGkGkG,::9:9AA2 ,:3A 9:999:::9AjA:9::9 :@:9 9::ƒA#@@: @A@;@ 3 3 9 : 333 232,32]2Âñ': 9:@k::AqAq@A@kA:@qAqAGkGkAqGqAqAqAqGqƒ:@Aƒ:9:9:@::9 9 :: :9 : ƒ:9:A9: 9ƒ:1AqA3:AA:@:Fk9 2::@d@ 9 9 3 9 93,23]c3cÂðT2::94@ @9AGqA@:AqA@:GkGkGjGAqqrGkAqGkGkG:@@A@:9::9:@::@::993:A9:9::9:@:Aj:@93ƒ:GjA@:::kA:: 39:: ƒ:9 3  32c 2]9\]3ÁñH2 A3@4j@A@Aj@Aq@:AqAqAqAjAGkGqqGqAqAqA@::::9A@A 3 9A@@A9  @A9:3ƒ:@G3:3Ak@9Aj: 2 ƒ:@@Gj: A399333 23c2Éò13: 33AjA@:AqAqA@kGAqA@A@qGkGqAA@kGqA9::939:99ƒ:A@:3ƒ<3Aj  39AAFA993 :9AFA9 : ::9AA@9A9 39 39: 3,33ccÊò(,2A@3@3 @k@9AkGkA@@k@AqAqA@kGAqqAqGqAqGƒ:3 3 ::Aj393AGk @ƒ:69 943@A@AAk3 3:@:@AkF:3 3 , 9333 3 2,3ŽËô2ƒ #3 :3AA@:@kFkG@Ak@qqA:Aq@kAGqAqrGkGqƒ$:9::9:9 93 2A9:9:9::Ap43:9:Aj:3 ƒ:%@G@::9:   39 9 9 3 2 22,-c2]9]Êõv3\3 3@3A@A@AAkGk9AGkGq@qAqAqAqAqAqq qAG:9 94::@A@: ::9:3::9@A3 @:@:@Ak:9 93939 3 :3 9 3 2cc]c3],Éö-3c : 93@:9:@qAA9AqAqGq A@qAqAqGqGkGqA3:9  …:9:9@::99: @:@:@33ƒ: 9Ak@@:9 23… 3 :9 94 3 32,2,c3“2Ëøc39:ƒ: 9:Aq@::qAqAƒqYAAq@qAkGkGq::@: 9k9:93 AA9::@::G::@: 3 :@::@Aq9 94 :9:@ 3 393::3 3 9 3 3,-3332Ëø329: 3:9G:@qqA9:GkGAGkGqƒA$q@GqAqGq@@:@A@ :33Fk:99Ak@q 9 ƒ: @9:9 @ƒ:9 39:99 9 3 3…3ƒ]222Ìø,  9G::@:AA@:9@:qkGqAƒqA@kAqAqBqH: @2 3A@qA : ƒ:0kAA::3AkAF:: ::9AkAF33 9:43 4 3 2  -c,…3]3Íø„#39 A9AA9k@@rGA:@kGqAGkGqA@AA@@:@9„:AA2 ::@@:@:@@:9ƒ:+9k@@::3 kG9:Aq@:: 9 9 3 3 3 32]2cÔø… 2 393@3A@ƒ:S@k@ :@:AqqGqAqrqqA@:qkG:@:pAA@:@k@:9::@@::A3 3::9AGjA 3 393: 3 33 3 3,Øø† A q:9::FA:ƒ@Pq @::GkGqGqGqqA@A933:A@@kkAq9: @:@AqA@::99:9  , 23 : 9 3 9 3 2 , 2,232×ø‰*@ 3 ::@@:q::Ak@q::9AqkGqAAqkA39A@A@AqA:@ƒ:,@AqA:99 33:999 3 333 3 9 3 32323Úøˆ 3 9 ::9::@:G:Ak@rGƒ: GqAqAqAG3 9ƒ33A@:::@@::9   3 9:33: 33 333 , 2,3,2,Üø‰3@ 9:3@ :A@k@@:@Aj@@A@A@9Aƒ@5AjA :9:Ak@:@9: 9:9::@3:9:39 3 3 9 9 3 2 3222àø‰R2:9: @:@3@A@A@:AA@@kAkAk@AkAqA@@A99kGAk9 3@@:99:: 3 3 933 3 3,2, ,áøŒ: ::3:@:@3@k@@k@ ƒ:6FA@jAq:9 39:9:@ 3-3::9:9 : 3 39333 3 3,2,åøC3 39: @:@A::@AjA@@::A:@:@33 A@:3339 :9: 3 339 9 4 9 3 3 22ìø2393@9:9A:@::@qA@::@k@@:@ƒA9::3:9 9::9:339 33 93ƒ 3 ,ƒ3éø 33 399:@@:9ƒ:-@9949 q:@::9333: :93: 339 3 9 3 3 2 2,ïø2 : 3ƒ:29 9@@::A@@A@:99@A3 9 :9:9 9 3 39 9 3 3 3 3 ,23ðø•43 3 949:@ 94 93 : :9::9333 3 3 3 3 3 3 222óø”,23 3: ::9 ::@@::@ 33:3 3 3 33 3 ƒ2÷ø–&-232 93 3 3:93@:@:@@:3 3 3 3 3 ƒ2øƒø˜&,32c  3 3: 34 3  322,22ø†øš,3223,229 3 3 3 2ƒ22 , øˆøž ,232232ƒ2ƒ2 2,32-,øŠøŸ3ƒ, 223, ,3233, , ,øø­, ø•øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøÂ2]Žcéøž@£3cŽ,éøš 9AkAG@:A@žcøø™ 9AqqGqk@@qŸ,2÷ø™::@AAqA@:A@GA:9 –2Œ,ìø—@G::9:: 93GA@4qqGA@„:,3øø”9Gk:@@kGkG:Aj:9A@q::9@’32‰,22îø’A@:@:AqGk@AGqqGk@@9:@3@:‘]232Š3ïø 9AAk:qqA@k9AqqGq::A:@A923cc,,øø" :@kFA93qHkGkG:qHkqG9Gq@@;@ 3 @‰ 232]2, 23øøŽ#:9A9Ak9 A@qAGk@AqG@:3:GkGkq9:Aq@:…22323]232]32-‰23]ëø$ @@::@G3:qrqqA@AA9;A9:G :GAkGA9…c]3]2,3]c”3c32Œcëø23\2„:9AkA@@:q:@qGGqA@@k@kG3:@:9kAqGk3ccc]3c,]3cc,23c2-2Š]c]êø3\]3„,A3:GqGk@qGqA rq:AjA@Ak@:@::A@qAjAA c]cŽ32]ƒc 23]3cc2]322êøƒ]c]„:@AqGkAG3AqGq3 @kA@k@G: k3A@A@A2 cc]cc]c3c3bcc]2]c23‹3cêø…]iƒ;9 qAq3GqAqA@A@jA@::9:93 3G3 q@k@3 c]cc,cc]23]cd233]3,Š23êî,Ž93 kqA 3::qG:@:AqGqA@q @:ƒ@:@@:@ccdcc]c]9c]cdc22c]‹]êî 22]c]2]c232ˆc ]cG:q:„:Ak@qrAkAG:3 :9A: k@ƒ: cŽcc]c3]2]]ƒc Ž3cc-3]Œ2êï ]c9]c]ccc]ƒc 3]]2,c :9@:@ƒ:/@@Ak@A@Gj@@ 3::@@k@@::@ccd]2]c3“ccdci2]c”“ŽŒ3]éí23,2]2cc3ŽŽc]c2ƒ39@A @A@:9:@A@A@qqG;3 @@9:AAqA::cdc32ccŽc]c“]c]c323“Œ23éí ,23c32c]3„ccc-2cc2c::9::@ƒ: jAkqGkqA@ƒ:AjGAqAGcccc]ccŽc]i]c33]c3c2]2ƒ3c3‰3\éíR323223c3cŽccdcc3ccc:@ :: :@:G@ qGAqGk @@9:A@qAq:jc]cccci3c3\3c333cc]‹céë,32…33„cHcccc,32-2::kGjG@:@@kGqAk@A2:AA@@AkGqAqc]cdcŽ]333“c”c]c]]cc\3,ˆ,êê,3232\32]@A\]3ƒc*::c3c]-::@:Gq3:@3AqAkAG@3:@k:@k@AqAq:…cŽc2]cccd3cc2]]23‰3]èêX232]]c3]c]@A33c3::3Gcc,-ckGqA9GkkGkG@k3::@A@@A:qAq@@]dcc]239]ccŽiŽc2]]3c39],ˆ29èè ,-2323232c39ƒ: cŽ:@: ƒ3#2323kq@:qG4GkAjA@:9:9GkAjA@qA@:@ƒcŽc33ccc]“3c]c3c]\9\3\c‰3èå,2323232323\c33:@9: @: :ƒc@2c]]c3::9::A@:9AFA@:G9 qAqAG@k@@A:dc3cccddc3\c323,cc‰ccèä2323232]]c3c]3:A@@3Aƒ: 33]cc3]cqG3: 3ƒ@%AkAqA@:9@AAp3A@@A@@Žc]c3cccŽ9cƒc 3c3]9]32‰]èã ,-233]]9]3ƒc>3c:9AA@:@@:@@Acc2:cc]qAq:@:@:kAkFkGq:2GAkqG kk:@k@ccccŽcŽƒccc3c3“,c]\c]2‡232çàK,233232232c]b]]3\32:FkG3: 3@c]3@:]cqH::@@:GkGAq@@::AqAAkA2GG:: dcc3]ƒc]]3c]3cŽ3Ž2c923cc3‡]3çÝ,23,3,2323]3\c33„c9]cc49:]c]c,932c,cA@:@::@::9A:AGkqAqA:9:Gj@GkkG:@c3c]23ƒc]9cc3\c]c“3“cc]c]c]c,†2çØ 22,323,32ƒ3_]23233]2c]c]3\c3c3]8cc]2] ,ccc32:@:@:9 jG@AqA@AA2:GkA@q@:]]c233]2,3]c]2cc33“Ž2c]c2,9]3223‡ccçÔ]223,322,::32]2c]3c]cc3]ƒc;]9]2]cc]c32c33]cc]3cc@Ak@:3Ak@AqAqq :AFk A@Ak cc]]23c3ƒcc32333cc]c32]9]cˆ]çÒ[,22 3 ::@AA9:9:33\32,3\3\c]]2c3c]c]c]c]2c,32c:::qA9::qGqAq@:AjA93AjA@c9]c2]iŽƒc]3]c3cdc]c3\32c3†32çÒ2 9: ƒ@Aƒ@ :@:@:@@  ƒcV]9,33c]c2c3cccccc]2,ccA9:GkA9 :GqqG:@@::@A@::@:Gk:c]3c]cccŽc2d9dcc3\3c3]2]c‡]3æÑ2-3 9 @@;@k@::9::@„:@kƒ:ƒc]22cc]ƒc!]c]c2c3]c32 3c:3:GkGAkGkGk@:Aƒ@*kA9G9AqAG@9k@ c3Žccc33c3]cc3\9]3c]†2cæÏ,3 9 3 :-@@A9::ƒAdq:FqA9::@:@33]3b3c]c]2 Žc3c]]c,c: 9:GkFk kGq:@AkA@k@G:AqAq:@@:A@q@:Gk9c]cŽ9ccccc]c]3c,,32,…ccæÏD2c 3:: qAk@:9A:q@q:FAA@@qA@:qAkGA@q43c:@@:qGqc2323cck93A9:@A:@ƒ:1A@@kAAk@kGkG:@kAqkA@ 3Ac32c23]c3Žc”]c3bcccc3†]æÏC3,:9AqAqA@::AkGk9AjAj qAqGqAGk@kGkGG9::AAqAqA@42], A@kA:qGj:@ƒ:@@k…@+AkFkG:@AjGAqA@@:cc3]2cc33\]9\3c]c,3c322„23æÎ 2,3:Aq9G@qƒ:q:@AG:@qGA:AqAƒq GkGkAGk@AGƒqAq:@AkƒcC,cc:@AqAqAq:A@39A@@:AjA@kGAqAjAqAqAqAjAc]cŽc3c3cc23]c3c]32323]23„3\æÏ32] A„:qA @::G:@::qAqA:@qqHGkqGA@9q@AjqGrGq:GkGkqGc-]c@@qGkGqGqAqAGk@A@A@:qAqAk@G@AqAqG@:9]ccc]323]]i]cc]cc]32-c]3ƒccåÎ23233 3:G:9k 9@ƒ:7@qGqA:@qGqqHqAq:qG:qGrGqqHqGkGqGkq 3qk@4@@kGkGkGkG@Ajƒ:4AqGkGqk@@:@AjA3 c3,33c2]2c3ccŽ233]c]cc,23223c,,cåÎ ]232@k@@:9Aƒ@s:GqrGkGq@qBqGkGq:GqrGkGkqHqqHqqGkGrGq , A:@:A@ qGqGq:@:@:@@:9Aq:G@:A:9:: c]9]3]93c]]9]c3832]3323,223åÍK2]3233AGk@AjA:@k9qq@qqGkG-GqqHqqAqA:AqqGrGqAqHqqHqGqqrA :GkG@@::kGkGA@;@@ƒ:@: ::@9 @:@:9A]ƒc!cc\323,cc2]c]]2c]2c3,c-233]åÎ=3c]33qA kG@@::GGkAqGqGkGqHqqArGqq:A:qHqqAAqqHqqrqHAq@k:9Gkƒ:AGkGk@@j::AqAq::9: 3:39A@:@„cc„c]cc]ic3]2c9]3c,332],8åÍ3223c\32::A@:kGqG:q:;@q qGrqGqHkG@AAqqHqqHqqGrGƒqAA@@k@:9Aq@kGA@A::3GkGkA@ƒ:/3:4:9Akc]cdc3cc,cc,3]923]2]233c]322c],cäÍ3,c]c339:9kA:q q„:N@A:2:qGqrAqGqk@@AAqqHqGkGqArGqGkG]qAAqGqGkGkq3:9 ApA::9:9:9::@:@@AcdccŽc]ƒc3c]2]]3b3c2]23c22],c233,ãÍ23,9c]c: A:9G::q:G::@:@„:AqGqqHqGqAk@kAƒq(rAqAqqGkqG:9qGAj kGqAqAGAG9:9A9:9:AG:G„:AkG c]„ccc]cd23@G]ƒ3c2]ƒ3 ,9],23]32áÏ32c]2 qA9:qGq:9:@@:@:q:ƒ@0AAqHqqkHqqAAFkGrGqGqGqHqHqkGqA@AqAqA@@d@k AkAƒ:6@@:GkGGq @::c]]3,ccŽc:: qHq qqq]b]3\32]233]23]32áÎy2323cc@@AqA@::@@:A:3::@:A@:@::qHqAAq@kGkGkGrqrAqAqGq:@q@qAq:@AkGkG3 kG@G@:@:@::GkG,Aq:@:GG\3@:@:9qGqq:: : 3: c3]9232233b32-3ßÏ<3]c3]c k:GkGkG9A@Aj:G@:@@:k9A@:A@kGkA@kGqAqGqGqAqqAqA@AAqA9ƒ@, 9AqAqA:9qAkq::@:@k:qq:::kqA9rq@:@: A:: „:9 39 kG]c3]323]2c2àÎj23]23\3kG:kGkGkG:: :9A:@:A:@:k@AjGkA:9GkGqqAr@qHqHkG:@@:@AA:A3AqGqAq9:GqG9:@A@AG@:: 9::@ A 3q kGkGƒ: 9:: 9:9: 99 93ƒ,3323,ßÎr322332cGk@:AqAqA9: 3:A9A3:G:9@kGAjAA@F:@rqGrGqGAkGkGkGk:3Ak@9A9kGkGkGA:AkGqGkAj:3@Aq@Aq::9:GqGq99:99„: :339 999áÎj2]3\33AqA@AjGkGk::9GkG @::9AGqA@kA@:q:GqqBqA:GkGq@:@AqAjAk:@GqAG93@q@:A@@qGAk@AqAqA@3:GkGk 3@kG;@A@ƒ:@AjA@@ƒ:@43 :93 3: àÏ,9c3qA@:@A@9:ƒ@[k:qGq33@@:3AqqA@q@:A9:AAjA@kGk:@A:@q @AG@A3::3:9@@A@@kAkAqAqqGqqGqA@:@3 @A@:qqA@kGqqA„:A@@::@:@:9 ::9 ::9:9: ÝÐ]3\ Aj@ƒ:6q :@::Aqqq: @3:9:qA@@qAq:9Gr@qAAqAqGkGk@A3 jk9 ƒ:4@@::kA9AqGAqqGAqrHqr@kAqq@A@@:@Aq::A@AA@@:@3 @A@@@„: 9:9 3 3 3 ÜÏ 2c2k3:@@@…:f3GqAA:3AA@;9A@AkGq:qGrGqqGqAq::Gqq3 @:@AA2 2 @A@AqA9AqAqqGqAqAq@:qA@AqHqqAjA@A@A@k@k@kGqG@@d qqAAƒ@‡:9:9::9::ÛÏ, 23:: @:kGkq…@xqA@A3:@:9A@A:qr@:GkGkqGqkGkG@:qGqG39:@3 :A@kGk:qGA:AqGkGqAqA@@kAAq9qGqAqGAkAjA:@A@qG@A@kAkA@@A@k@A:@@ 9: 9::9::@ÚÏ 2,3 :qA9: kGƒ:/@AA93:qA:@::@@:kA2:GqAAq@;Gq qGkGkqrGrqr:: @ƒ:F@@: @Aqk9GkGqGkGqrGqGA@A@rGqrqqGkGkG:kA@kAk9@A@AjA@@A@:@::@A@@:@:@:@ƒ:ÚÐy33G:qGqA:9AA9:9:9A:39::9A@:9AqA@:G3 :@@::9GqGk@qHkqGqGrGk 9:@Ak3AkG9:@@qrqGrGkGrqqAkA@rGAAqAqGkGkFkAApAqr:@@AjrAjqq Ak @jA:@: „:9:ÚÎy,39AjGkGk@:Gj9A@kA@@4  9A 933: 9@A:kGA3qrGqG:kGqGrGrGqqkqG:kAFqG@AqH@rGqHqAkGqGqGqGqqAqqAqAqAqAqA@q@AkAGqk@A@qqA A @A@:A:@„:9@@::@ÙÎx2AqAqGkG:@AA:jAkG@k@:@::: 3AqH@ :A:@:@GkGAqGr::qGrqGqkqG3qGqq@qrqAq@:@rqrqGkGqqrqHqrqGqqHqqAAqGkG@qqGqA@qAGqA@:A:ƒ@d3ƒ@qAkƒ@„:9@:ÙÎh,3A9GA: 39 kG9:9AkA@A4k :@9 @@:3A9::@kqAqGqqGkGqrGqrGrGqA@:4Gr@AArA@@:qrGqH@kGkHqrGqGrrHqqGrqqA@AqƒAkGqAqAqGqrq@AkAqAGqAk::@A@3@@:@ƒ:@ØÏy23k99@9:3 9 ::33Ak@@:@: 39349 3 @:qGkGqkGrAAqAqGrGqqAqAk9:9:AkGq:FA::qHqrqA@qGqHqqHqqGqrGrqHqrqA@qAjAqAqAqAkAqGkAFkA@:@Aƒ@ :@:@:A@@3@@AØÏ(3c ::3: ::@:39@@A9::@q3:@: :@AA@9@k:9Hƒq^GqHkq@qAAqqrGrqr@A: :@AjGA3@k9:qGqGA@rqrqrGrqrrGqrqHqGqxqrqAG@AqGqGqGkGqGkA@qqG::@kAjAqA@94@ƒ:@ØÐy2c3::9 3@@A:@A9@AqA @A::3:9@AA3 @:G:qGrAqGqGqHqAjHqGrqGrq 9 9A@A@:kA@:@AqjrqHqGrqqHqrqGqrqGrGqHqrqAjA@@kqAkGkGkGqG:AkGjAA@A@A:@A:9A@:@:×Ð`32c3@3 @;9:AkA@A@@-k@ @3Aj kqHqGqArqAqqAqqHqqGrGqrG3@9:@3A:@@A@::@q@GrqxqHqHqGqHqAGAƒq&HqqNqrwAkA@:GkGqAGkGkG:@A@@jAq@j@:@@3ÛÐ2::3@k@A@j@A@:@@ƒ3l:3 qA@Aj: 9 3A qqrqGkGrqAGqHqqHqAqqGqGq:qAq@@kGjA@rGrqrGrGqGqGqAqGk@kAGqqHqrGrqqGkGAqGkGkGkGkGqq:@rqƒ: ::: ÛÏ , ::@Aq@kA :@ƒ:y@: 9 AqAqG3 @@: j@:qHqGkrGrGqqr@qrGrqGqHqGrqHqHqA3A:@qA:qqkrGrwrGq AjqGqAGqqrGqqHqqNqHqGkGk@qGkGjGkG@A3 @A:@3 3kA@ÚÏA@@k9AAƒ@ƒ:q@q@qqAqqA@kG3:q:AA3ƒqHqHƒqTrGGqH:qGrqqGlqGqAAj@q 9A@kA@:rHqxqHqGkqqAk@GqGkqq::GqHqqGrqrqrqrGkA@AjAGk 3A:949ƒ:@::AÚÏAk@AqA9 jAk@qAqƒAOqGqGkA@k:@Aqqr9A qHqAkqGrGqqAqq@@AqHqqGkAq@: qA@kGqA@:@qqHqrqGqHqq@AqrqHqGGrƒ:%GqGqGrGx:FA@:9A@:9A@39: 3 94A9@@:9ÛÎ 9 @k@:Gk ƒ:dGqAqGqkGA:qAqGqGGqGqGA:FqGqrGqGqGrGrqHkG::@qqHq:GAqqG49G@A@AqqA@:rGrwGqAqrGr@AqGrqGrqGqqGqAA@qq 94ƒ@9::3@@:9@@A9:9:3 AkÚÎy 3@AqAkk@:9AqGkG kq@A@qkGqkGqBq@A:3AqGqrGrkGqrGqAAk@::HqG:kGqHqG4j:AA@@: qrwqHrAqGqrGqGrqHqrGqqHqr@@:A@4A@:@@:@::@A@A@A:9::: :9ÝÌ@233::@@A::GkAA9::GqA9 AqAkAGqGqGkq:@:9 AqrGqqG@A@qrGj@@c@@:A:@qGƒq A949A@k@Aƒ:<rGrqGqrGqHqrqGqA@@kA@:@@;Aj@::339:94AjA9:9A@@:@@::A9A9::ÝÍ"3 3::@@:GkGkA9::qAq3kGq@AAkGrG:@ƒ:e@A@qArGk@A:AdŽd:@:3@AA:GrAA9 k@qrq@k9GkGqAqGr:@GA:qr@@A@:A9:@@A3: 9A:@:A@:: @:@:k:@ 93 3ÝÌt232 9 3@A9kGqG@A9::Gq:3kGq:@AqkAAAk@qrGqqA@:“d“c”c@ :@jA@3@@:q:@GAG:: A@qAqAq:q@::@@:@;94:::9A3@: 3…: 9A@3j::@„:@9ÝÍ4232:kA9A@9AqAq@AG:@@A9AAk@@kGq:q@q:@:rGqGk@A:ŽccŽ„c”Ž9:AqAqGkAqA:@Aj ,ƒ:kA@ƒ:@:@:@@9::@:@::@:@@3@::9:9 ƒ@::@::@:@A:A:::@ÜÍy,32] q9@3 9Ak@A@:@;@::AjA:qAGk@ :AqqGrq:@:@@A2d“ŽŽj: 9@AqqrGkA@@:@k::@ q@A3G:::@AA:3:@A@A9:@A3 3 3@@:99::9:9AAA9A9 9::9ÜÍ 2-,c::Akƒ:@@j:@:@::@9:@G:@3 ƒ@-::qGrqA:A:AqAjAqc@@A@:kGGrqGk@ :G G:@9 ƒ@3:@39A33949493@:@@A@:@: 3@@ƒ:ƒ@A99@:3::3 @: 9:ÜÎj23,3:9:@AFAk@A:@kA@::9:2@:A:kAqGqGqA@qGkGq:@AGqrqr@k@A@kGqA:@q@AjA::3::AkAA@:9@:@ :@:@@;@:@;@dA„@:: @:3A:@@;949:@@ @@33@3 AÜÏ,323 3:@ ,A@A@qAAqA939A3:ƒ@A@kGqrGr:@@::GkG3@kGqNqƒAO9cq :@A 9: @:39@: @:9AkA:@A39:::@@::@@A:@@3e@A@@: 3A:@:@Aj@A@: :@2 ::9:kÜÐ232]3 @AqAjA@k@q9A@A@A@ƒ:B2cqGkq@:@Ž::qGA3GkGAkGjGj39:Ak@:3 ::@9 @:@k9 @@A9:9 ::9@A:@ƒ:%@k@::@@:k@A:3 @:@A@A:@:3:@:9:93A@ÜÐ22]]9k 3 Ak@AGA::@@:kAkA:„crG:A@:c]32@@:3ƒ@Tqr@AA: :A@@9k::@@4 @:::@k9 @4@33 9A@3:99::93 @:Aj@@:39@2@jA@@::A9A9A@AÜÑ?232c]92:: 39 qGk93::A:@@G@:@:AjA@Ak@]Žc2”@A9A@krGrqGk:@@A3:ƒAE9:F3:3:: 9::@A9: :@:@@A9::@@ ::@:@:@3 j@:A@@33@@:A@:A@@A:@A9k@ÜÑF,33cc]cc:@: @:A9@A@@rqk@:@:@kAqAk 9::c”@k@@rGqrGqA@ 3Aj :9:@:: 3 ƒ:)@@::9:@3:@@::@:@:@;@A@@:A@A:: 3A@@:A@9ƒ:@9:k@:Aj@A9A9A@ÛÑ 32,c]c3 @„:M9 9k@j@qGqGjAkGqAq@GkAqGAkA@qGrkGrqGqA@j@@qGA9cb3 :@:@:99:@: :k::9@:@Aƒ@j:@A@:@:@@:: 3A@j::@ƒ: 9 9@:9A:9†:ÛÑy,3]Žcc:@39 :9 9:A:AqHkGkqGqAqA@k@qHqqG@qArGqqGrqA@AqAA@3 :bcb::39@A: 3@:@@3:@:A@e@:k:A@;@@:AjA@@3 :9;@A@A:@@A9 :9:9A„:9:@@ÛÐ]c3ccc: @Aj ƒ:GG:GqqrGqGrqrqGqA@GrqGrqrqrqqHqrGkGkG@k@A3 9-383bA@@A@3 ::::@: @@A@:ƒ@A@@:@j:Aj:@:A:ƒ@ƒ:@@::@@:A@::9:9:A9AkÛÏy2c]ccdc]3cc:A39 q@3qHqGqAqrGxGrqGkAqqGqGrGrGGAkG:@GkGjAA:99:,3\9824@@kA9@9:3@:@:@:@:@A:A:j:A@A:@@A@@:@@Ad@:@@:@A@@k@Aj:@A::@:@9A@ÛÏy,cc]“cc3c2c] q qAqrqGqrqG:qqHqGq@qAqAqqrGqkGk@ qqAq:9@@A::cc3bc 3 @A@ :@:@A;@A:j@@jA@@:k@@;@:@;jA:@@ @A@k:@k3A@@:@A:@@:@:9A@ÚÎZ, c]iŽdc]c““™““™ qHqAqGrqHqGr9AqqrGk@HAAqAG9:AG3G@qrGqH@A@k@q cc]9bcA @3@:3::@@;9j@:@ƒ: A:@;@@:Aj@:kƒ@k:@:3@:@A@::9;@:@:A::9†:ÚÎA]cŽ8chc8“™i™i’ q q@ :qGqrqGr@:GrGqA@j@@AqAiqqAqqrGqAjrGAk 3ƒc,“ibk@2:A3 @@;@@3@@;@k@A@:@Aj@;@@:A@:@;@@A:@ƒ:@jA@::9ƒ:9:99ƒ: :99@AÚË ,2Žhchichƒib“™’“’“ii 3 :@@:rGqHqAq@qGqAqƒ:&32b“i“i3 r@ qq:A@qq@:@:c]8\89:@:9::„@4::ƒ@ :@:@Aj:@A@:kƒ@$A:@@:@k::9 ::@A:@A@:A:9:: @: A9@AÚË]cichcc’““b“i“o“8@„:6qrGrqqrqA rqrAGkG@ci““’™  :@:Aq:AqAG:qG29\9b@:@:9ƒ:=@:k3:@:A:@A@d@:A@:j@@:;j@@:k@:@@A@39::@@:Aj@@::@: 93A@AjAÚÉE222cbib“bi“ihi“c“cdq@:@:@Gqq rGqHqqrGq@@A@c’ihii“39:@:@qA@kGk :G:ƒ2 :@:@k@@:@„@ @:ƒ@4dA:@A@A@:@A:A@@:A:@@;@A@:@:::@A:::A:@A:@:9 k3A@ÚÈ2,32cbcbci“h“iccŽck q qqHqq:@AqqA qr@:Ajibcbcƒ@A9 @:qq:Gkq:39 ƒ:@A@@4:@:@:A:49:@;@;ƒ@ :@:@dA@:@j:A@@k:Aj@:jA@@@:k:@: ƒ@k@:: @:3:9AjÙÇ2323298cb“h“i“c”c]ci ƒqGrqGrG:@ArG3GqGkqƒiK“:Aq 9A9q:GqrqGqHq@3@@@:@:3@A:@:j:9::@@j@:AdA@k@A@:k@;@@d@:@@:A@A:@;jAƒ@:93@::9:@9 :99::9A:ÙÈ],3222ci“i““™c“Žcc3ibi3Gr@rGqqGk qqAqGkAqrG 2bb8:qA3A9:A:qGAqGkqr92A@:jA@::@:@:9A::@::A…@:@:@:„@(A3A@A@A@j:@@Aj@:A:@A@:A@:9:: :: A:9Ùȃ2ycib]™h“i“Ž3bchci:3G@ qHqrAqHqqAqrGqGkc2i:A2A@@A3GkGkAAqGA@cb 3@: @@;@A@@:3@@:9::@:AdA:A@A:AjA:A:@@:@:j:A@A:j:@9::@j:A9@3@::@9A@:@::ÙÈI, 2“32c8“™“’c”3hii“b3Aq 3@::qGqqHqGrGqr@:Ab3:@kG@Aj9AqG:: jAAq@A@A2::@ƒ:ƒ@E3@:A@44:9:3 :@:@:j:@@:@@jA:A@k@A@:@:A@A:: 9@A:@:3@AAA@@:9A3A9 :@AØÈ232i™“bc88ii“ih23b“:iqA 3„:urAk:GkqqrGqAA@c8@kGk@:: qAq:@qGqA9AjA@2::@::@AdA::@:@@:3 333@@3A@:A@A@:A:@j@:@:@AjA@j:@@: @:@:A9 @k:@@:A9@9:3A@ØÊP28,™i23bbcicb9b9@@q@ 3 3@9GGkqHqGrAj@ bc@GkG:@@rqGAq: kGk9:@r@::9:9:9@@::9„:@@:9:@ƒ:'@33@@:j;@jA:A@A@Ad@:@;@A:@@jA@k@:9A:@:ƒ:9 „:9AjAØËc]2ƒ“Pbicbi’i“ib:A@“:@3@A@G::kGA qrqGqrq bcAqq::qHkG:@@qG::rqA:@A3: 3 ::9::@@ @A@…:@:@AAƒ@ :A@@:@d@@A@;ƒ@dA@;:9A:@:Aj:@:9A9:9@A-9AØË3328cb9bi29hib3@@„: ƒ:'3::G@q:GrqGrGq :8k kG : 9G::A@:q@:qrGqƒ@-A99:@3 @::@@;j:@@::9:@:@::::@:@k@A@;@:@@j;ƒ@:@::9:A@@A:@ 9:A:A:@@ ::9ØÌP223229b““8]2ci“3:@qGk9 9::jAAq@@qHqqrq 3c3 3@:q:@k@Aq:@:@rqA:A:A @A@@3:@::ƒ@j ƒ@:@„:ƒ@049:@:@:@:jA@k:@@A:k@:9::@@:::@3 @:@@:@@::33:@A×Í-2 28cc“ibibi’i“@@::@A9ƒ:2@“@:@q;@qqGrGAkA9“::@@9A:GqA9AAqG::j@@-@A@A3ƒ@A:A@A@-@:A::9@@;@@::9;@AdA@:@@A:Aj@:@:3@:A@:9::3@:@:@A3A:@A@A×ÏU323228b9b2i““o“@A:@:@:@@ i @kG@AqHkGkGA2:A’: ::q q@rqAqGA@Aq3@::@ :@d@A94@:@:jA@ :ƒ@„:@A@:@ƒ:ƒ@ A@;@@j:@A@ƒ:@A@d@3:::A:::9AAAAj@×ÐZ2329bici2ih““i“h@ :@@493i3 @Aq:AkGqAqAk:@A9 q qGqrAqqGqGAj@r@ @@::@:@A@A@:A@A::@k @;@@:9ƒ:jA@ƒ:*@:@:j@;@;@A:@3 @:@A@: @@A@:k:@@:9A3@@9:A×Ñ23,922bi2i“hbi“id8] 9ƒ@':kAq@@qAqAp:@@qAj qqGlqqrGqlqAqqr:@;ƒ:@k:@:A@A@j@A@::j@A@A:9@@:@A@@ƒ:)@A:A@j@:@@;@Aj:@3 @:@@::@:9::9 :AjAÖÓ?32Ž82i““bic““8“::@qA:A:@ jGkAqGqGq::A@:@A3 qGq@H@rGqGrGr @@:„@A::@@,:A@jA@@:;@d@@ƒ:A@:@:A@ƒ:ƒ@:A@Ad@@3@@:A: 9:ƒ:A@:9:9j k@A@@ÖÔ23\cb92ƒ2RikG@:AG@AjA:@:qAAqqGlG@:@@qq@ :3:A@qA@qGqAqrq@A::9A@k@::@A@@A:A@;@:@A@A:9:@@A@k:„@:@:k„:@::3A:j@@3A@:@:@j@ƒ: 9::33AjA×Õ=323]cc2i@AjGA::jAGk@9:Gq@GlGkAq:A@AkG:@@::G@:k:qrGA@qHj:99ƒ:@:@@3@;@:@jAj@A3@:@::@A:j;ƒ@:A@:@3::@9@:9:@@A@;3 :@:@„:93:9: ƒ: @kÖÖ 32322cjA@@:@99@AkGA::qHqAqqGAAƒqGqqAj::93AqAqGqkqAA@G9 :@@A9@;ƒ@j:A@A:@A@3@A:::@A@@A@e@:j@A@ƒ:@A:@::@:39@@A::9 :9 :9ƒ: 9A9::39 9ÕØ3222cƒ:“@„:(@:Aj: AqqGqA@j9GrAqAA@A:@::GqAqHqHqHq@r@ƒ:MA@49;@@;@:@@k:@Aj: :@j@A@d@A:j@@A@::@A@:@:@@;@@:::@;@d:9::99::9 9::9::: ÕÙD2-c2]9@::@::A@@A3GqAqAA@A3GqGqqA@3::@3qGqrqGqG39AqrA@@Aj::@@j@A:Aƒ@A:@A:@:A:@A@:@A@;@:A@:Ad„@:@@:A@…:@:::::9::9 :9:933@@ÓÛR2-22 @@A@:@:j:@3 kGqAqk@3;kqHq@::@::Gqr:@ArqqA rqqGk@@:9:@A;@d@@e@;j@Aj:@:@::@Ajƒ:@jA@jA@:@A:A@::3ƒ:99:@@A9:9:4:943:94„:3@AÓÜ 23232cij:A@ƒ:(A3 @qAkAGq 3GAqGkA@:q@ qGA@rFAqA@qrGrG@Aƒ:@A@:@A@A@:@@A@@:9@;@::@:@:3@A:@ƒ:@:3ƒ:"@@9:94@A9::949::3:3:3::9ÓÞX2-,i“::9:9G9 @AqG@kA 9qqGkA@::G:qrAqAqr@A@A3qrqG::9:@A@jA@:k:@@493:A:A3@:@::@A@@3 :: 2ƒ: 9@A:9@@;9:3ƒ::9:9 9::94:3:9 :9:3 Òà0,ci’:@:k :k@qrqGqA3AqGA@:9qq:HqGk9GAqqA@qHGqq„: @:@A:jA@@:@::…@A994@:@:@:A9:9:@@:9A†:":::@3@A9: ::3:3994:3:9  @Òá*-82ic 3 3@@AqGr@:@@Aqrq9:GAqGk@qA@AqrGkGƒq*AGq@@9:@A:@:@:@:A@@::AjA:A@39:9;@@A@@::@:@ƒ: @9:9@@A:@:9Aƒ: :9:9:9:4@ 3::23:@:Ñâ3232c33@AA:qGrGA:q3AqGƒ:"qrGqAAq@:@qGqAkGrGqrA@::949::@:@Ajƒ: @::@@j@A@::9…:.@:@:@::@@:A@::3::@:@9:9::9 9:3@39:9@3:9ÓãH2]c3kGj@:qqAj:GA@q:@:GqGkAqA@A@rqrqGkGqAqGk@ :@::9A::@:@:@:A@A:@;@A†:@9:@ƒ: ˆ: 9:@@: @A9::3:9: :: 3:::3 33Óäc3]29 3A:@A:@A@k@AA9:GkGkGqA@q@AqGqHkAAqqHqGAj3::@::@ :@@A@:@@k@:@jA@jA:@:@A@3 ::9@@::@9:9@A:9A:…:::3:9:9::9::: 3 Óæy 3 9A@Ak@kGAjA@qAqGrGAjqGk:AqHqGjGAqqrA@@;@9 @@::@@3:@:@:@:@A@A:@A@::9:9::@::@:@:@@:::9::9;@:@9::9::9::3:49:::3Óç2 :3@:@kGqGk@AAq:rGqAk@kAGkAqAƒq!AqAqGqGq:@@A@49:@::@A@3 :A@:AdA:@ƒ:@9:A9ƒ: @@ 9::9::ƒ:@@:A::::: 9 9ƒ:9 :Óæ?3 @::@::@AkFkqGqGqAqGA@qGq@AqGrGqGqAqArq:@;@::3@:@::@Aj::@:„@::9@A:9A@A: 93@:A9::9A@A9ƒ:ƒ: 9:39:9:::9:9: :93Ôç2243:@9A@@k@GqG@AkqGqAkGqAqAqAqqGrAqAkGqAq :2:@:A@ƒ:@…:@ƒ: 3A9::@A:@„:@:@3:@::ƒ@3„:9:9Aƒ:2:: :9:: @:3::33 : ÓèR93 3:93A:Gk@kGk@AAqA@qAqqAqAAGqrqqGqGkGqG3@:A@k@: 93:9:@:@@:9@:@::@:@:@::9::3 …:@@:::ƒ@ A@::9:::939„:A@ : 9Óç3:: ::@::@GkGqqAqA@AqqAqGƒq8AAqGrAqGqAqAq:@:@;::@@::@:9:9::@:A@@:@:9:@:9 333@:„:ƒ@…:9::::949:99:::2 3 Òç,3:@9:@ƒ:#@kGkGkGk@Aj:AqGqAqAqAkGqqGkqAqGk ::ƒ@A@94@:9:93A3:9::@:3 :94:9…:A„:&@@9 9::9:9:@3:9:9::9:9::9:::3 3 Òè23A49@:AqAqƒA)kGA@AqGrqHqGqAqHqAqGqArGq:@::k@::99:3A3ƒ@4:9 „: @@:@::9@A9:9…:!A3::@@:AA@A9:9:::::: 39 :Òé%2 9::A9A@qGq@k@q@@kGkGqAqAqGqqGqArGƒq(Gr9: 9:9::94:@A@ ::9:9 @j@::@:::99::9ƒ:@@ƒ:"@A@@:99:9993 ::9:: :9 -39A3ÑèK,32Aj 9 q kAAkA@GAqA@:qGkGqAqGkHqAqGqkHqAqH9 3 @A:9:@9:9::@::3AA:9939: ƒ:9A@::9AA@9::993@::A@@ „::9ƒ: : :3@9Ðêg3 39:3:FkFA:jAqA@AqqGkGkGkGqrqGkGqGkGqA::A@:@: 949:A3:@39 94 @33::@@::@AA9:9::3@A@9;:9:@: k@A9…:99::39: 9 2 Ïëy,3 3@Ak@:GkGqqAAkGqAqAAqAqHqAqHkGqHk9:9::9:: @A@:3 ::9A93@A:9:@::99::9:@;3:@A::A:9::3:99:99::  332 3 Ïë12c:3:3 @ k@:qAqAq@AqAqGkqAqGqGqAqqGqkG:::::@::ƒ9 , 9:99A@A 33 9 ::ƒ:@A@::Aj@@ 9 39 9 ::9::@A ƒ: 2 9A: 3ÐìV,32  33k@:AGkGk@qAkGAGk@kGkqr@GkGqGq:A@A9:99: 4: ::3::9:9:::9AA@::@kA:9949 ƒ: 9A9::@::@@:kA@: 2 3 9: , 3 Ïî:2393: :9A:9qAqGAAqAqqAAGAqGAqrAqAqAqA9:9:3 @@A:9:93  ƒ:::@k@@Aj:9:9:393@::AA@:@A@AA9 9 ::3:9::3: 29 :32,Ïï'2] : 9@@::GkAq:@qGrqk@kGkGGkGrGqqG: „:"Aj:@@93 -:A9:9:9A:9::9 3: @A@3ƒ: @GjA9:@:@2„:@:@ :9 9 ::9 3332Îð 333 9::@ƒ:;GkGjAAqGqGqGkAqkGqGqAkG:@:9 :@A9 3 3 :@:k@3 3 3@ 9 @:@:A„:A9…::9A@3 ƒ:@@3  9 @39::2   22Ïð239 ƒ:4@G@@qGA@kGkGrq qAGkGkGqrGkG::333:9@Aj k@A9 : ƒ:@A:@:939 39:@9A@ƒ: @A9Ak@:@A3:39:9 :9:9 23,c22Îò'- 333@:9A:AkA@:qGkGqG3GkGqAqAqGq3A9:ƒ:3A:@k@ 3 :339AjA?:ƒ9:9 ƒ:@kƒ: AFkA@:: :ƒ@::9A : ::3 39 282c,Îò%22 3::A3Aj:@@::@@qAqAqqAkGqAqGkGqAAƒ:M9G@A9 2:9:9:AA:9 ::::3AG9@AAFA@:9: 33@@A@@:9:k:9:9: 32 9 c2-2-23Íï3ƒ-- :9::@A@@k@qr@:qGqAGqAAkGkGqAq:Ak9: 9:9:…::39 399:@A@::AjA::933 3ƒ:AA9ƒ:@:: 3 9 3: 3 9 2232Ðô2 2@:9„:!A9:A@:@;qAqqGqqGkGkGqGqA99 3 @kAƒ:@9 :3 :@„: AjA 3 2 3 ƒ:9A9@:@@kA9:3 :99 3 3ƒ 9339 222c3Ñõ23: 3@:@A:@A@q:@:GkGkGqAAqAkGqA@3 3Gk k@99 :9 A„:@9:A9 39 @:@A@@:@AqAA:@A9ƒ 3 :49ƒ:93 : 3,332]Ñõ:, 33 9:@:k@@k@AqA9::rGqqGqq@AAkG::Gk:Aj 3::9 @kF:@: 3„:19kA@::qAk:9:9:3 3 3,9: 93 3 3 3 2,9],33Ðõ ] 3:9::ƒ@Ak::AA@@:qAqAqHƒq::q::AG2:@:@:@::Gj ::9: 2 ƒ:49@:AGjA:9:93 :393 3 3 333 94 3 , -2,23]cÐø ::9ƒ:ƒ@GjAAqG::GqAqAGA@@9@ƒA@:9A@:@9::9:9::A@A@:::9 2:3@::@33: :9 39 33 39 39  22 ,†]]Ðø:9:::@3GkA@::@k@ƒ:PGqAkGkGk:Aq@kFk39::::@::9ApAk:9 3 :::::  3 3 93:33 3 3 -23,dÖø6, 3 ::9:@:3@@k@@A@A9@: 3GkGqA93@@::@::@:@AA@:@:@9 3ƒ:@A9ƒ:%AkA9: 9:39939493: 3 3  - 2, 2]]Øø33: ƒ:#@A@3@AAqqA@A@kAp@:@:  9: ::@:@:Aq@ƒ:339:Aq@qA@@q 49 394: 9ƒ 3 33 2 2,2]2]3c3c×øƒ"3 9 @: @A@::@@: ::qA@A@AqqG3:ApA„:<9: 3 3 9 3A2 393 3 39 3 3 9 39 3 322223322×ø„ , 3 9 9:3 „:=@k@k:3A@kAqA:9:G:9:   3::3:393:3 9339 :3 3 3 33 3 3ƒ 3,333,332 ,×ø†3 :3:@:ƒ@ƒ:@:@@AjA:@:9A@@- 9: j:99@ƒ:&3 9:3 3 3 9 3 933 3 3 3 33 2c2ƒ3\3232Ùø†,3ƒ 3::9:@::::9::@::GA39 9:3: †:,9 9:3: 339 9 33 3 3 3 3 3 ,33]c„3]3Úøˆ 293  3 @@qƒ@@::@:Gq::@ 99 9949:9: 3 3 3 3339 9 433 3 3 2 2  223223ˆcÜø‰B2,2 3 39:4::94:@@:3::9::9:4: 9 3 3 39 9 9339 44 3 33 3 3 ƒ23233,æø‹33, :9:3 9493:9:9 :333 3 9 3334 9 9 3 3ƒ 3 222223,2éøŒB-2 - 3 3 : :@::99 9 3  3 39393 9 333 3 33322-,-22îøŽ ,3]2  3ƒ@%::@:3 39 933 3 3 3 9 3 3 2  22 ,„3ôø+23,322 33 33339@ 3 3 3 3 3 3 3 2,ƒ2,ø„ø”,2322 9 933 3 3 3 2  …222 , øˆø–],-232 3 „2,ƒ2,22,øøš,32,33,2-3333ø—øž322 2-øžøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøª 9@Aø•ø¨ 9:AƒqAG øø¦@A3@:@qAqq:@@køøž 3 :@ 9:q „:GAq:Akø‘ø 9:@ ƒ:Gq:@@A@kG3k@:3øø2]22‰ ::@AAkA@@::GqA@kGAqGkA@:GqAGA—,êø23,]3†#:9:A:9G@:9:9qHqqAA9qGqA@:q:Gk9@::”3,êø]2‹3,3]…"@ 9 F@@Aqq:9BqGkGkGkGkGqq:::G9: ƒ:’2ìøcc23ˆ323“…"A::qkqA@:q@:A@qHk@G:qGqAq:9:@:@–,ëø,3ƒ]c2323c]c,3cƒ"9:qGGkAjAGqA@:qHqGkG:kG:q G::@A”2,Ž2Þø ,9]c]c„c2c“Ž2:GqAqAqG39AqA@ƒqGA:@Aq::qGq@:‘,3ì÷,-3cc]ccc]]†c*]3@AkGqG 9HqHqq Gr:j@k@@A@9:qAq:9 9::Œ232-ìö323232]c]2Žcccc]c]ƒ3,]cG:qAƒ: qAqq:@Aj@ƒA@3Ak:999AGAAqA@ˆ 23c,c332ìõ23232323c3cdƒc@Žc]2]23c3@94G9::qG::A@A@@j::k@:@::@kAq@k 3cc,322-32c32],…2,åó ,2]]23,32]c:„cdƒc, c2-ccA@3@A9:@:A@Aƒq'rA@:: 3Aq AAGjAqAc]2c32323232-223,ìï),232233233\c]cc9@@3]ccc33,c2c3A9:A@ƒ:,@@kAAGA@kG3kA@ j@@A@3 c]c]232,c]c,3c33íì 2,23233]232ƒ3,c23@AjA9:AAjA@:@:j9GrqAqHAkA::GkAAqqAGq@rGqrAqr@A@@A9:…@ ::@::9::@:@ƒ:@:ƒ@:@;@A@;@@:@d@@ 9:@A@:Aƒ:9„: @::9::9::@à×U-23i@A@A9:A@@3:q:AGkGqAqAq@qGqAkGk@A@@:jAqA@AqqGqrw@@Aj:A:@A::k@3 @@:9@:A@93:@A:kƒ@%:j@@e@A@A:@ @;@:@:39@:@::9: :A:àÙ,,2ijA@@:k: qGG3qHqrGAƒ@a:qGqGkGk@4@::@A@k@AqHqrqHqA::@A@@k@k@:A@-@@A::@@:@A:9:@@:@;@A:A:@@:j:@A3:@@k:9:@A:@A:A:@9@ ,::àÙ!, ci:@:@: qAk: 9qGqAq: 3:qAqkGA„@ƒ:@q@ƒqrqrGAj::@k:@:„@ :@:@:9:@;@@ƒ:@A:@j:ƒ@!AdA@A:@ :@@:@ @@:@@@:A9A@A9:àÛ3322“b@:@:qAqG93AAqAqGq:GAqHqAjAj;@@:9rGrqHq: Aqr@ƒ: :A@A@;ƒ:@kƒ@4::@:@@ƒ:@@;@A@e@:@@:@@d ƒ: A:jA::4@„:9 k9:àÛ42322c9:3kGA9:AA@qGkAkA9kGkGkG@@:@@A:qGqrqHqGqGA@q:9ƒ@A@@:jA@@:@@:@;@99@@k:A@ƒ:@@:j:@@A@A@:A99:ƒ@ :A@:@3 :39: 9„:A@àÜx2Ž89::@@k A@jAqrGkG AqGkGk:@:A,:GqrAAqqrGk:kAG@A:@;j:A@A@dA@-@A@j: :A:@@:@@::@dA@A@:@d@;j:: @AdA2A@: 3@ @ @:9 jAàÜ33,93:3q@AqGq:Gk@3ƒq+AG@:@r@rqG:GkGqGrA9Gqq:@@:@@:jA:@A@@A@:A::„@A:@k:@::@:@:A@;ƒ@:3A„@::9:@3@A@AjAA2 9AàÞJc 9qA3GA@@rqH@@qG3GrGk::@qGAqGqA:qqAGqAF:qHqA@Aj:@A@@k@@k@-@@::@@e@@k:„@9;ƒ@#:j@A:@3 @@e@;:3A::@: j@@A:: ::9àÞ c: :9A3qA:qHk@Ak 3GqA:@@qAq@ƒq:GrGkqAjGrqr@@A:A@A:@@;@ƒ:@:@@A@@:A@@::A:A@@;:@A:@@; @eƒ@:9 k@@:@::@:9@3:9:@AßÞwc :@@:A3Gk@A@@k@@A@kG@::qGrqkGAqA@k@rGqA9rGqA@j@Ad@@;j@A@:9@:@k:@:Aj:@A@:@@:@3:::@::32:@A:: 9:@::A:A@:A9:3A:A@@ßà@239 3@@:Gk@kA@k@@Ak@:@qrqG:qHkqA@AGqqGkAqGrqA@;@@A:@@;@jA:9;@::ƒ@:A@Ad@A:jA:@:@:@::9:@A:@@:3@::„@::@:: @@:@Ak@ßßD22:9:39@A:@AqGqG3AAq@qGGk:r@Gq@AjqrGqGkGrqG:@@k:@@k39 A@@4@@:@:Ajƒ: @@;@@:@A@@:ƒ@!::@::@:: @A:@::Aj@::9:9:3 ::AßÞB,2 93:@::@@:qAA9@kG-@qArq9kGkGAA@rGrqGkAqqGr::@:@::@::93A@@39:@ƒ:2@ 3:@@j;@@:j;@:@;@@:@:9:9@:@:@:@:@: 9:A:: ,A9Ajßß?39:: 9::@qA@AjAAk@q qHqGqkGAkGq@kqqrGrGqGqHqq:9:@:A@:@@ @@;@A@„:ƒ@3@A:@@Ad@:@@Ad@@A@::9@;@@2…: 4:9:9::9A9ƒ@ßß,:9: 9ƒ: @:kGkqGA@AƒqrAqAqAqqƒAqGrqAqAqqHq::@@:@ƒ:@:j@A@;@9:@;@:@3Œ:3†:9:-„:99 9:999: :9@Aßß,:Ak::@::@:@@Gƒq8:qArGqAqAGqGqAjGqrqGqAqArqG@::@::@@::@A@d@@A::9::@@A@::ƒ@::9@@:9:@@:9:9:9@::9::9 9ˆ:9 ,Aßà32 Gƒ::9A@:qAqArGqAGqA@qAqqAr@qGrGrqrGqGqGr:@::@@3@A@:@A@A@e@A@49ƒ:@A@@A@A@:@A@@:@A@@::;@@:::ƒ:99:9:9: 93ßßC,32:9@@@:@AqGqGqAkAAkGqGqrGqAqqrGqGqGkGqr:@::@ -:@:@dA::@@jA@ƒ:…:@:@†:9:::9…:::@:9@:94:94:9„: :9Þß33AAƒ:'9A:kAqAqAkGAq@jGqrqAqqHkGrGrqrGkGrGq@:3ƒ:@@94@@:@@A@A@:@@::ƒ@.9@:@::9:@@:::A9::@3@9:99:::99:::9::Þá&,2@933:9GkGqAAqqGAAkGqGrGqGqAqqGrGƒqAqkA@:@::A@9 :A@d@:@„:@9„:33:9 3ƒ:94†: 9A@A:: :94ƒ: ::93: 9:9 939@Üâ+]39 3@:9kGA:ApAqq@AqGrqGqBqqGrGrqqHqHqGqƒ:39::@::@3:@:A@ƒ: ƒ: 9::@::@@„:@:?::@„::9:9:9::9 9:9 9:  @;Üâ1c 3:9 4@ kq@@AkGqAjAqGkrGqGrAqqGrGqGkqHqA @@:ƒ:@A@ƒ:*@:9:@Aj::@@::9@:A9@9:A@:9AjA @j::9:9 ƒ::9 : :9: , 92 Ûã@,3:3 9@3GAq:qGqHk@GqqGqAqrGqGrqGqrqGrqA@k @::9949:3@:@::@:@†:3:: 9::9::9„:„:9:3::9:93@3:9:3 3 : 3Ûä53229 :@:AqA:qGkGqAkGrAqrGqkGrqGrGqGqGqq::9 :93:9ƒ:@:@A:@::@@:@:@::3@:@:9ƒ::9::@:@:::@ƒ::j: 9:9::9:@ÚäI2-23  3: q@:@qGkGkGkGqGkGkGqqrqqGlqHqHq@::@:9:@A @::9::@Aj@A:9::@@::9@@ƒ:@Aƒ:@@A9:„@:9::9:: 9::3 9„: @ 3 9;@:ÚæN2, :3 : 2:@@AkGqGAAqGkGqGkGkHqGrAqGqkqH@A9::3:93 :9 93 3 ::9: 9:: 3 3 3:9: „:@ƒ:ƒ:@::::9:9:9::3 2 :9Üæ:2  2 :9:@A@:qArqAqAqrGkGkGqGrGqqrGrGq:9:3:::@3:9:3:@ƒ:@@A9ƒ:@3@:@:9:@:?:99@:9:::9 :9:3ƒ: 4::  3 Ýç&23 3 :9@:A@:qGq@qAqGkGkGqGrqqHqGqAqr„:G9:A@ @:::@@A@:@@:9A@:9:@A9::@A:9:@A@::@@A@:9:9:9: 9:::::9 ,:9 , ÜçC,339::qA::@kGkG:qAqGk@AqkGAqqAqGqHq::::@:9:3:99 :3 ::9 :3:99„: 9:339:9ƒ:9::@3:9ƒ:9:3ƒ: 9:  :3 Üä2ƒ;33::9A9@qAAqqA@AqGqr@qAGqqGrGkGkqG@ :9 33  3::3@: j:: ƒ:ƒ ::::9ƒ:#9A3:99:@49::9: 9:9::9:339 9: 3Üè:,: 9::@A:@:@AAq@@rqAqHqGkGkGqqHqGrAk9 3@A:9:9:99AA@3@A„:1@A::9A@A::A@A9:@A@::A@@ @@:9:9::9::9:::A33 3Ýén222 ::9@:Aj@k@kA:AqGqGrkGkGkGkGrkGq@A@9:@A9 9 339:9: 939 9::99:9:99:9:9:9:99:949 9:9:9:9::9:33 : 3Ýé2 : @…:*@AqA@qA@AqAqGqGkGqAqqGqGk@3: 3 3 3 3:ƒ:@„:Aƒ: A9:9A :93@A 94@:::3::9::9:ƒ:33 ÞìE:@3:9@@:A@:AjA@qrqGlGqAqHqGrkGqG39 33:@ @A:94:9A@A9::@jA9:AjA::Aƒ@:@A@@ƒ:9:ƒ@3 ::9:„: @ ,  3Þê$,339A 3::@A@@k@@AjA@AqqGqqAqAqAqGrqAƒ: A@ @k@A33„:9ƒ:9::9::ƒ9::3 3 33 9:@AjA@:9ƒ:9:9::9:@33:ÞìO 33:9:@:A@kA@AqA@qBqAqHkGkGqqGqG::@AkkAj 9: 2:9 3 :@ 9 :99@ :3@:3::3 ƒ: :99:9@::ƒ: 23@ 9Ýí83:3:9A9:@q@AqqA:qGqGqGkGkGkHkA3:9::99 :9:: 3@A:9::…:@Aƒ@9„:Akƒ:Aj:9:@ƒ:@ ::::9:9 :3 A9: Ýí!]3@:@@49A:@Ak@A@A3@rGrkGqAqGqGqAƒ @†: :9:A:k@:@@Ak@:@A@3 3ƒA::@A„@AGA:@ƒ:@A@„: 2 : 33:3:Ûí2  93@:ƒ@=:A@q@AjG:@qGqqGqAAkqG:pA2A@::@:9:9:393 :99 9: 939::39 @9:@ƒ:@::@9: 9ƒ:9Ak@@999 , j 9„: Úî, 9 : ƒ:A:qAA@kAAqr::AqAƒqKA:@:AqA3:@ 9 : 3::93:9 AA:9:AA9:9AA::@@A:9:9@@3:9::@:9:9: 3: 3:94 9ƒ: 3Úï 2: :3:@:@@9A„@A@ƒ:qHqHqAƒ::@:ƒ:C9: k@::@39jAj@:@A@A::AjGj:AkFA:A@A:9A::@A@34::33 9 ::9: :@:Ûð29 9:@:Aj3::k:@Aƒ@ qƒA2pG@:kG3@A@::A@kGA::@:@333 3 3 299::9:9::99:3 :ƒ@:@A@4 3:3 9:::: 3Üð&, 3 39::@AA@@:@kAjA@A3q@kGqGAkG3@A:9ƒ:9:9:3 3 :: ::ƒ 9: :9:  @:@;@ƒ:3„:3 ::9„ ::3 22Ûò 29 :39:3 @::ƒ@3@:qAGkG@kG39:@:39::9ƒ:::9A9:9:@::kAƒ: Aj:@::kA::@A@ƒ:@@::9:@ 2:: 3:9: 32::9 22,Úò, 3 3:ƒ@%3:@:A@AA@:q@@AA@;9:::@:@@Aq:@:@:9A@Aƒ:59A@GjA@jGAG::AFkG:@kAj::3 3:: A:9:9 3 3 : 38c23Ûóa, 3 3 -:9::@:qA@:3:@jqGq k::@:AA@A@::AAj@:@9 :9 3 2:-9:333 2 9:99339 93 349 3„2Ûô-23293 9 9:@::@:A@A@qH::@AG99::9@::9999 3 ƒ: :: 3@@::9: 39939ƒ: 3 3: 33  823cc-Ûõe,-3 :99q@@Aj994@::@@:k3  39  3499:9AkA9:9A@::9:@@: 2 239 :9 :93  -9 3 \2232-232Úöƒ2_ 39 :4::39A@@:9:qAq :3 3:93 3:993- @AqA@AkAA9: 3 23 3:9 :9349 3:9 33 333 3 2922c233Ü÷K2, 3:933:@A:::@::9:9:9:@A@:@:: 9:9 3 2 :349 943 43 3 9„ 3 2 3 3 2,23323]ÝøJ3c32 3 3:994933::@::3:::9:3949:3: 9 9 9 33  3 3 ::39:943:93 9 3 ƒ3 3 2ƒ23,23ßøƒ,, ƒ 9:@ƒ: 9:: 9 39 3… 83 3 3 33 3 933 33 9 3 933 3 :3 3  3 3322c]ßø„J-3,2933 @ :9 :3 3 3 39393933 9 333 9 933 9 3 3 3 9 3 9 3 2 …2 -,ccc32ßø†Q,2,: 3:9 93@@:9 33 3 939 9333 949 933 3 3 93 3 9 3 2  3 2,32-]3“Žåø‡Ec2-2: 3 49@ 3 3 9 93 3 33 39 943 3 3 33 3 3 3 2 2 3 32ƒ23,cc32æø‹,,2,… ?3 3 3 3 9 3 33 3 3 33 3 3 3 3 2  2 3 22,223,3c3]çøŽ, ,2,2322  2 3 3 3ƒ 3 3 2 3ƒ   22,…2, ]c33]3232i2åø -,,22,2,3…233  23ƒ2,2,ƒ2222,3-3,32†233,æø”-22, 3,222,22,ƒ22ƒ2,ƒ , ,33, ,32,3‰]c2éøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄ®„-·ÚÉ·Ú2ºÚ /ºæO ˺æO - ïÉ ï2 ï / ûN1Ë ûN1-[,É[,2^, /^8MLË^8ML-«„UªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø™]c2ø§øc]‰2c]2œ ø‰øŽ,c23\‡,c3]2Œ ˆ49: 9Aø†ø3]cc32†3233‹39 q@@ @@AG3@:AqGA@Aø„ç,› 223223c233cc„,23† :9ƒ:A:AA3 A:@k@ @A9:qkqG øæ232,,“,]33223c]3c]c]c-c„ k 9::G@:@jGAj@:qG3kA@A9:G:9:k@øã2,23329-,,2‡,232323\22c2Žc„c]]iŽ,ƒ@G3@@AqA@@qA:9ƒ:GqAjƒAq::Aøá,233\„: 9„32-22,,23223,323]932-3c]„c Žc]cc]cc]c„:3 qGkGjAkG-9:kGqAq@AjGkG@::øá+c]239::@A39@32323333233232323]2]c\3]c:†c]c32-c3@:9GqAqAqA@AA@A@ƒAkGqqAqGk@:G:÷à^23c]:9::@A93AA@9kG:332322-23]3]]232c]3cc2]@:c]cc]c2232A2qkGqAA39:qqA:@3qqGAA:GkGqA:G:AAöà`2]32@:@A::A@A@kAAjA:3]332]23b32]c]323cc3:@Acdc-9c323232- 9:Gk3qAqAq@qGqq@k9AqkG39::9:9 ôß+2c]Aq:qqAqAq@AG@@:@:\323c]3]cc]2c]c239„:093cc2]2Ž2,c3::Gq::@:qGqG3 3GkGA@:AqGq:: 3ƒ:óÝ]2-23c:GqA:GqAqqGAqƒ:@:3: c323cc323cc23 @Aƒ@/dc3c @:2cŽŽc @A3@::@HqA:A3@qH@jA@A:: 3 :9@:@öÝ223c@:: qqAqAq:@@kqƒ:1@:qG]cc]bcc32]39:@@k@c k::Žc,c]@:9;@A@:A:ƒ@A@@kA@:ƒ@3 qG::@÷Ý2]332]Aq:@GA@q@@:@G qGk@:@@]]c]3]]c]2:AA@A39:ƒc3@@:9c3ƒc!@A9:@@k@:@k@kqA@k@A:3 k@GA: •2àÜ123]2,c3AkAkA:qq@k:A@qkAqqGkGq:@::9]2c3233qqk@@ƒ:]c3@A:G:3] @:A::@A:@„AqkG@:9:3@:9:jA@93 ‘2-àÜe,cc33c:GqGq3@AkAAG@:Aq@ rGqAAqGqG::3c3]b]3:@A9c]c]]9]2cc:93:3@:@:@kFk@Ak@:A 9 kA @AAqAAG@:,ãÜ"]]239q:G kGA@q@k@Aq 3AqG:qAkGk…:=2]9]9c]c ,cc]232]233] qq::GAAq:A@@AjA@A@Ak@9G2AjA@@k@33,23ãÜ33]c23c]@@:jqAqq@A@:A@3A@A:@AjGAA@  @3c3\cc]9cc]„c]2933ƒckGGkqA 3@:k@4GƒqA:4G: ƒ@kAqA ,22322]2c,233,äÜ"2c3329:A@@AqGA k@q:q@:jAqGrq@„q2:@: c]32,cc]323]@@]\cck@:@qA3 @:@:@AkGAqA9 :9„:@;@@39c23]]23]]cc3]232âÛ,23,3\cc@kqA@:kG:@kGrGqq:qHqqA@kGGrGkG: „c dccŽ32A:ƒc8ŽcA::9:Gq:@qq:A@kGk@Gk:: @:@::@93cc]]c]2232cc32c,,ãÛ5,c]32]c:qG:@GkA2Gr:qG@qrAqHqqGr@qAqrGqr@kGkccccƒ+cAk 2,39 GrGk@A@Aq:qGq:@Ak@::@Ak:39:cc,ƒc,933,ccŽ323 ˆ2ÚÚS23323cc]:9Ak@@kG@3 q:Gr:qA@qGrqGAAkGqqHqA@kGAqcŽcŽcc,c,3c]2Žc@:3qAq A@jG:@GkA@:„@%:9:@@G3:]c]3c3c,c3c]d]23c3]222ÞÛy3c23]c3:q@AqqG ,G:qAqA@rqGq33A@rGrqGqAGqGkG ccc332cc2cA@:4:@:@kAAkGAjA@kA3 @A3@kA@]c3c32c323cc]c2c3-c]b2-2ßÛ2c3\3239:GqAqqGlq @A:@…@rGr „qMGrqrqAkGkqGc:@3]c]c,cŽc@A::@3@kAqq@Ak@A@:9 39A@:@:Aj:23c]]c]]9]3c3cc,2cƒ32âÛ2]32,ccqAq@HqGAk@:@@:A@Ak@;@qG3qrGrHqAqGqG9:9:@k„:@@q3cc: @::@:@@GqAkFAj:3 9 @A9::9GA@3cc]c]9]cc32]]3]32323ãÛWc,33GqGqGA:qAqG@:A:@k@:@3@A@q 3GrqqGqHqq;qGr@A@AqGAAqG3cc23 2@:@AkAGkAkG: 3Gk@„: Aq cc3c]ƒcc]c92cc,32323ÞÚd,232:9AqAqAkAq:qGqqr@@j:A@3A@@k:q @rqGrqrqGA@rqGqAqqrqqGAqqcc A9 :@:G::@qAkGqG:9G3GA@:@9k:@ccƒcccŽc3,3]c3]23ƒ]ßÚ 332: kG:Aƒ:nGA3GrAq::@A@A:@AqA@Ak@AqHqGqHqA@qGrGqrGqHqqAqA@-c k: @:@qA:: kG@qAqG3Gk@k@A@::A@::c33c3]c]cc32cc2232]cßÙ*22Ž3G@A@99:9qA3GqGq A:99@A:@@A@@A@AqqrGƒq=AAkqqGqrGqrGqGqG@2A@ 9::kGqA9qAqAkGk@AkG@GqAkA:@::@,cc,c932]ƒc3cc-]32cc]3]ߨ c3@ q jA†:3@:@3Ak9@:493@kA@k@@kAqHqrGqHk@@HqrGqrGqrqAqkqk@3ƒ:2GqAq:@3@@qAGk@9AkAq@@:@:2c3]Ž3]\9dc,]c23”],ƒ23ߨa]2q3Gq @qqG::@:Ak@::9@;@@AA9AAj:@;:GjAqGqrGqqAkqGrqGrqHqHqGAqG:@ :@@AqAqAqAqGkA9@ jGkG:@:3]ˆcŽc3cŽ3]3”„]8ߨxc,GqGkGkqGkG::3GqGAA9::@A39GkGk:9:9AApGqHqqHq@AGqGrqGrqGqrqGrqA@@AjA@::9AkGqAqG::A@AAqA:: 2cc]c]ccd39\,”j,ƒ3àÖ2]c3q qA3GrGq@:9 qq@@ƒ:;@ 9GkA@Ak@A9:@AAjAqAqHkGkGrqHqGqrqGrAGqGkAjA@kAq@: 9AqAq::ƒ@:2@@9]cdccƒc Ži]3cc]ƒ3]2„càÖQ23cG3Gk @kG::9:A:AA:@:@@A2Arq@@qGq:94@:@AkGqA@qGkqGqqrqHqGrqqAqqA@qGkGqA@:3@Gƒ:!@@3:A3A@k3c3cccŽccŽccc33c\cc2,ƒc3cc]à×N,2c::3: 3 3GAA@qq@A3@:A@AAqG:@;@@: @@:kAkAq@A3GkqHqGrGqrGqrqA@k@:@AqAqA:ƒ:@:AA:ƒ@$3@A]923cccc]cd]cc]3c]3]3cc]23bà׃32ƒ:99 :93Aj@Gq9::9:@j@r: kGqqƒ:X @:@:3AFkA:@ qGrGrqGqAqqHqGk@A@A@A@kGqA@k jAG:9k@@A3::@:c]23]c]cc]]cccc3c2,33c]2232]3àÖy,2]c]2323:: 93AAq 3A@AAkGA33Gk@9@:3A@@qAkA@G:@:qqAqAqGqqHqGqAG@@kA@j: qGqqAG@k:@:G@:jAA@Ak@]c]cc33c3c]c3cc]c3c2]]c32ccàÖc3c9:@:c3@A@@:@@3ƒ:9kGk@AjGq 94Aƒ: ::@:qG9:Aq3A@rGqqGqkHqGqqGqkAk…:4GkqAqAj@A:@@:@A@@qqA9A@c]c2cc]9]cccc]232]39]c,3cáÕ2:3 AG::3@:kG3 3 9::9:@AAqA3„:[9:@9 :@A: @k:9:@qqHqrGqGqlGkGrG3GGq9AAjGGqA@A:@@:@:@kAkAG::@::,cc33]]\c]cŽ]cŽ23c]cc\323]áÔS3::qAjA@@4GkA@@k@:9AAk9@Aj  @A@3:3@@:3AqGqkAqGqAqHkAqGqGkGkAk@Gk@@AAkG@@:@ƒ:)@qAqA@q:9:@@ k@: c2cc3ci]“c32c3c]c2-8]áÎTc]2]32A9::@qGkqGqAkqq@AAG::@kGk@;3AG99::@3 GAk 3GkGqG3::@;AqGqAqGrqrGq GqAqGk@@k@„:-@:9::AkGk@:@AqAkA@@::c3c2cd]2cc3c]2]c3c2]3áÐ+c23q99AkG@qGkGk:A:q@k9:@Gk@Aj@q :A@ qGƒqKA@A@qqA@ qGqAqAk@@kGqAqAk:qAqAqGA@kG9:393:@:@:@qG:AkGAqGkA@3Akccd]c3dc]ƒc]c32ccáÐ+23c9A::AqAkGkHqAGAA:@:AkG@kGAq:@@:qAkƒ:q93GqA3qGrqGA@GqAqGkGqGq::ƒ@7kGjAAkA9 A@A::qA:q:@qAkG@k@cccccc]32]9]c,3,32áÐ32]9ƒ:39@A@A:qG:@@:qA:qA9AkGq 9@:@3qAGq@:rGq 3:GkGqGƒqkGqAqH3A@:3@A@kAƒ@ :G93@::9„:9::@@qGk@::c]3cŽ]3Žcdƒc 3]c]2]3âÐy,2c4@ 3@:@@9@Aq3Ak@qqAFk@qA3@A9: @:A3@@::@3@A@AG39:@::GkHqqHq qAqA9A:AkA9949AqA:3@:: 9 ::@::9 @::3c3c9,cc3cc]c c]8]3cc,âÑ)c]:9A3Gk:@kGqA@:GqGkGkGqGq3 3AkA,Gk94@kƒAU9 :qA@@;AAk@:G3GqAqAqqGq::Aq@Gk:AGqAk9 :G@::3:93@::9:9 ]c2]c3cc]c]]9]]223]32âÐ42]cc99GqGAqGkGqA@:qAqqHqAqGrqAqGjA@A93:@q@A: @3:„@=GkA9qAqGkAGqH:@@3Gk@:GkGqGA93A@A3: G9: @AA]c]c]3c2d32cŽcŽƒc 3]8]323c,ãÑT,c]9:qqA3qGqqA@AAjHqG3GkAqGkGkGq@A9::9GkG3@k@k@@kqkqAqAqqGrqAG@qkqq3@A:@@qGkAk ƒq)@3:9A933A9@]cc]9]3]c]]322cc]cc]c32-cc2ãÑy,c :@@k @rAGk:@:qGqrGqAqAqA@qAq @4@:@ 39 @A@A@AqGGqAGqGqrGAj:qrGrGq :9: :qGk@AqGAA::9:3Ak:9:Acc]3b2c]cc33]c3]2c]232,c]ãÑ 3]A9: ::Gk:kGkG3@AqGk::qGkGqqƒA]3:GqA: :k@3:qrGrqkGkGAjAqHqGqrG:A::9: 3 99 3@:@:@::@GA:@@32c3\33]c3cd“]9]9]cc,39,3cãÑ(,232c3 2:@qA@@qAkGkG;q@:9:GqArGqqGqq::ƒ?3qA9GrGqqGGqGkGk@qGqrqGqqk@A @A@@:3 A3:GkGk@Ak:q:cc]c3ƒccc323c]c\3]c3]232ãÓ3]39 :@:qA@qAGkƒ@2;@:GqGqAqGqqGqGqrqA@q@A@ qrqGrGkqrGrA@ qrqHqHqArGAƒ@5jAjAk A@j@k@qGrq@@Gk ::ccdcdc]c3\cc392,]c2]3âÒ232]9]9 3 3:qAAj@A@@;ƒ@ :qlG@qkHqBqrG:9AA k:qrGqrqrGrGƒq: qGAqqGqqHqqq::AqA@qq@@3:A@A@@A::@ 93cd,cc2332cc3c]c3]ƒc-]93c33âÒy,3]c]3q3: AG qAA@k@k@:j;9:@q@AAqGqqG::@4@39rqGqrGqGrqGrqHqAqqGrqHqqG:rGq:@: q3GqB3GqGk:kAkGkG,  3AG3c3c]]223c]b3]c,23232,3\âÒ 32c3b3:3@3ƒqAqGkAqƒ:@AA@:@AqGr:@:@@ƒ:@GrqHA@rqGrqGqqG kAqHqGrqHq:@qHqAqA 3Gq9ArGk@:GqGkGk@A@3 2Aqccƒc33\33]8]c323,2323ccáÑ/23c]2c]3@3 9 :AGkAGkG@:9::kAqkGkAA:@:399: kGƒq*@qHqGrqHqrqGrqqrGqqH@:qqA:qAq GkGqGqGkGƒqAqq„A9A:@:H33c]]23b3]2c3cc,3, \3]3àÏc]c”c]c]cA9A:3:qAqAkG@ƒ:hG@kGkG@kGkG9:A AqqHqGrGqrqGqrGq qrqHqGrqrq:G @:@qG@qqGkrGkGqAqGrGAGkqq@A@: 3qG::9::9q3c,32]3,32cc2àÍh,2]c3c3]icc9A@9G: qGqA@::9: 33 @ 3 @kGkG:@:kAGqGrqrqHqGrGqrArGqqHqGrGqr:kA@ @AjqAqGq3AAqAqAqAqkGAƒqk:AA9@@3:9AkqGc]23232]3]2àË,32c]“ƒchc]:A:9A3:9 kGkq 3 A9:3@9:@:j:9 @@3::@k@rqGqGqqGrqqHqA@rGrqrAqqGr @:@A,Aj rGqA@AqAqrGqGqGAq@:GGAq93Gƒ:G3A@ qqA]323]2 232àÈ2”„cŽ“dŽcc32 3:9 @@:Aƒ@- 39@:9:@:@:AjAAc32::@:G@qrGqrGrA@;qGrqGqAkAqGƒqAGrGqk@:@:@:q@@kAA@:AqqrqrqqqGk::@kAG:::GqA9A@::A,323,3,3,ÞÅ,”]2cbiŽ“c]„c3@:Ak@::@Aj;@:A::A@:@:@@A@]c2-]@@rqHqrGqq::@@AqGA@Aƒ@*qrHqHqGkGqG 3: rG4GkF:rwrGrGqGqAqGG:AqAƒq::@9A3@A9 939 32323c23ÞÃ223b9bchibib9c9bcc]cŽŽ@A@@:ƒ@q:9:@A@qAAk@k@@,c:qHqqGrqA:@ŽcŽAjAjAA@qqHqrqHqGr kA9Aq@9AAk@qHqrMkGqAqGkAqk@AqGGq:@::Aq:@:399 233,cc2]3,ÞÅ2cc8cb32“ii™“h“ci“™“™2ŽƒtqkG4:@:@@kAAjA@qH:@k”cHqrqGrq:@::ic”cc,@k@rqr@AAqAjA3qAAqAqG@@AqrqrGAqqGrqGqAq@:qkGG:@:@G:@@: : 3 3,323ßÄO32cbc8c22ih“™“™ih™“™“™c“o““ qAqG:@A@Aq@:A@rqqr@@d“3qHqGrq@@A@ccŽcŽcŽ c@A@rƒ@:kGqAA9: :@@qA@q:@kAwGGk@qGrqqrGqGkA@GkqG:A939:@Aq:@:3 Aƒ323]ÞÅ2c,c29“™““˜“™“™“™’™ƒ“_˜iqGk@::qA@@qrqHqGr:@A@Aqqrq@@::G:3c“Ž“d“c2,A@AAkGqqrGq3AkqAkG3Ak k@:AqAqAAqrGrGqGkGqAqAƒqA@4@:Aƒ@ƒ:399Ab]3223c,ÚÄ2b9hi3““˜““o“i““™“™i“nƒ“]@A9:r:rG,@rqHwqrq AjAk@AqG:A::Gqq qA”Žcc332A@9@@::GqqAGkG@qGkA3G@3@@rq @:qxqGqqrqGrqAqGkƒAjA@A:@;@;@:9@ : 92]32323ÛÆ™™,ƒcy“o“i˜“ic“”cb8i“ihi@::9Gq:qqGrqHqqrGrG3GkqGkAq@@qA::@GŽidb]cc,3@k::@@:qHq 3@A@qAqG@3@ 3rG 2AqrGrrGrGqrGqGkGqAGkGA@@k@q:@k@@::933 c]]22ÚÄ2]2ibi’“™™““”„cyŽc qA@:4rHqAqrqHqGqqr 3MrqGkGqGŽ @:9AqAŽcc :9AAk@A@qA@ k@kAAqkG:@3Grq qrGrqGrqGqHqGrqGqGq@AjAjA@@:A9:A@:@::@33233ÛÅS]89bcbi™“™””c]c]cic qAk 99 @A@rq GrwrqHqG3qrGrqGkGkGG:@:@AqAq32cŽrqr@A9:A@kAƒ:39 A@q@AqA@3Aq::qHqrMrqxGrqGqqAqrqrqr@AqA@A@Aj 9@:A@„: 9 93ÜÆyc2“™22c3’i”33ii“b““i3GkG9::@Aq@AqG:3qHqHqrG3NqrwHqrAAkqA::@qAqAqk@qAkGrq@:GkA@qq@@A3qqG@@3@AqNqqxqrGqAqAAqAqGkGrGGqAƒ@qq:@A@49ƒ: G@:@:33 3ÜÅ92223ibch“i“3hc’iichi3 Aj:: :Gj@qqr@rqrwHq@3@rGrqGqGqGƒqWr@AqGA3 @:@AqGAGA@@AjrGrGk@3AAkqA@ :ArqqHqHqGqrGqkGrqGqGrqrG@e@qAkAjAqG:@@: @:939 9ÜÆr-c23bihcc8“hc82““hic™@@k@ 9: qkrHqGqHqrqrGAGqrqxqGkGqrHqHq@:kG@k@Ak@qq@k:@:qG3GqqA@:GjGAqk@kGqrqxGrqGqrqA@qGƒAqkGqqrGA@:G@AAkA@::@„:9: 33 ÙÇy232ibch2“i“bch“i’ibA@A3:qrGGrqqHq:@rGqHqkAqGrGrqArqGqqrqrGqqGqrqGrxHqA@3@:q@A:: :@A9: @A@kHqHkGqGrqHqr:Gkqk@kAAqGrGqq;@:k@jGkG9:@k@A9:9: 93 ØÇV322ch“9h“™i“ic“::iiqk::qrqHqrGrA@rqxqG@rqrqGrFrqGrGqHwrGqrGqHqrqqrGk3 :93A3†:*@:3AqGq@qGqqHqrG@:qHqGk@qGqAqrqHq@@qAA@AkGƒ: @A@::9333×Ç2329bi™“82i’chiƒ@@:bqGA3q 9:G@rGrqqA@qHqrqqrMrGqAA@qAqAqrqrGqAqrqrMr@A@A::@4 9ƒ:B@:A@:@ :qA@AqGrkGrqGqqHqqGqGqkGqGqGqr:@:Aq@@Aqq::@::9@::@ : 4ÖÈK23229hi8cbii’A@:@ckG 3 9::@A@qrwHqA@qGqGrqNqrqGk@::GkGqHwAAkGAqHq@@A@jA@ƒ:=@3A@@A@k9:99:3@:@qqA:G:q@ArqqGrrGkGk:GkGrqHqr@@:Ak@kGA@@:G9…::@933ÖÉ/, 2\cb9ch““i“AkG::GkG39 3@:@AqHqqrqGrqG qrGAƒ@/A939Aq9::@qAqA@@AkA@qA::@:: 3@::@:A9 3 A@ :9;ƒ@A@@rG@ƒA(qrqGqGq::AAqqGqAA@9A@Aq@A@@:@::@:33 ::ÖÊy2383bibci™h“G@kGk@9A: :@A3@:@AqqHqrqrGqqAq@k@;@“:G:A@rAGqrqAqAAj:3:3@@:9 9A@3 @9 3:@:49::A:@:33 9GrqAqHqAqAqGrqqAj@qA@AjqkAk::@@::33 9ÖÊ3ƒ2Scib2ih“™“A@qAGk 93@@:“i“:@@rGqNqGqHqGqGk@@“™:@:qGk@rqGrq9 k@A83 :@9@:: kAG9ƒ:;93@:@@:9:@@3::9A: ::9:@@kAqGqHqAA:kGk@AA9Ak9::9@:9@:: 3ÕË`3,c82“8“c™“™’A@Ak@3::9@@qA@rq@3GrqrqrrqH“™A@:3::rGqrqGGAkFA8]@@::@:::F9 :93:9:9A@ƒ:@ƒ:99:39:@@A @A9@49Aƒq@A@jA@qA@A@:@:: :33 ÕÌH323c™ii“™’“i“q@A@G 3 :™“9A@@kGr qrGqHqGr@ic@AA@ :9::@Aj @GrqAkGkA22 ƒ: 9394@3 3ƒ::@@:@:9:@A@9:A 9 94@ƒ:9::@@ A:Gj:GkA jAjA::ƒ@A9 9 3:ÕÌ2-22b2“h“ii’i@3ƒ@k@ƒ:Bb8c2@;@kGq9HqrqrqG@c@hkGk@39:: jAq@AkqA@A@qr82 3@A@:3:@ ::9:::@ƒ:ƒ@.:@::39: ::@: @:@::94@3:@9 A::?@AAq q @A:k„:9 ÕÍ2ƒc$8232’“™i“@;@A:A@cici““9 qAr 3qHqNAkƒ@.::@k@@A@A@A@Ak@GA@kGqrq9b3:kA9@99::@:3 ƒ@6;@@:@:@:: ::9::::@A9:@::3::::@3 @Aq3@A:99:::ÕÎ2323“hii\ib™“93ƒ9i“˜“hc kGkG3A@xƒq#H:kGkG@Aj kG:@@j @qA3AqqGqG2993ƒ: @@::::99Aƒ: @:A:@:@@:3„@$ ::9:9;@ @:k@ 39:A3:3 9:::@„:ÔÏ,8cii’A@qG:A@Gkƒ:3™““i839AGkAkGrGrwrGkAjAqA@A:9qq; qq 3qGqAqq3k@ @:ƒ@G: :@:@:@:@::@::99;@@:@A:@:::@9 @@A@:@::@A@ :-@A2: 939 3 39  99:ÔÏL ]2bkGqkGkGq@kGqAA@:™’“™ qAqqAFrqrGqrqGAk@A@@qHk qGA3GrqG3H@@ 3@::A:@::ƒ@;ƒ@6;@@;@:9 9@3::@@A:@: :@9Ad::A:3@: :@:949 :@ :@: 3@AÜÐy,3ch::@A@kA@A@AAjA@:ii99AqGqGkGqGrqGkGqAkGqrGqG@Aq3GqrG qr949:@A@@A@:@;@j:A:@@:@@A@@::@ 33@:j@:3@:@;9::9:@ A:k:@A99: 39:@9A@ÜÑo2,c:@:i“i@kAkqGA@@qG“::9GrqAqGrqr@ qqA9@kqrGqkr@k qAqHq qr::@:@:@3::@@j:A@:jA:k@:@:A@A:@@ A@A:@ 9:9@:@@:…: @:9 @@3ƒ:ƒ:9:ÝÒ32@:Aƒ@D:AjAGkqqqAq“@ 9kGqAqqGqGAqG 949:GqGqH@AqGrGq kGq::@A@A33@:A:A@:ƒ@:ƒ@+A:j@:j@;@33@:A@:: @:@A@::9:@:@:@@A3: 9:ƒ AÞÒ5,32@kAj:@A@jGAGk@“™:A@AqrGrGrqAkA3cc3::A@Aqr@kA9rƒqGAqAqA@: @d 3@:@@j@::@:A:A@;@d@A:@A:@@3 3@@:@:3@@-@A@::9::A:k:A@ 9 9:ãÓ-2A@AA::@AAqk@A::hi:k@AqAƒq_GrqA9A@@ 3@@A@kA@AAq@AqGq:@kGk::@: 9@A@;@::@@;@j@@d@@A:@@;@@k:@:9A:k@: 9: 3@@A::@:39 9: 9:@:9äÕ?2,ckFk@@kG@q@@::8bA@AqrGqHqrGq:9A@A9 9@@AjAq@AqGrA@:Gq:@::9ƒ:@@j::@:j@;@;@A:@@:@j:@:A@3 :„@…:@;@@::9: 3@:@: :ƒ:äÖJ”ihA@k@@k@3 ;q:92k9@qqAqGqGrG:@:@9q:rA@:GkAqr@A:qrG@3 @:9::@@;@A@;@A:ƒ@:@@:Aj;@@;@@:A@ƒ: A:@9:@@3@@:@ƒ: @ 3@:3:9:å×D22ŽbA@A@A@3qGq2 :qHqrGrqAqA9:G@A3qG:qGqrqGAqqAj@rqr@A93:::@::@:ƒ@:@Ad@A:j@:@@:A@:ƒ@3@:@@:@;@:: 3AjA9:9::3 9 ƒ:åÖy23bi9@AjA:3GAqAqc:9GqrGqr@ qAqA@kq:AqqrAqqrrqrGA@@GqH:9: 39 9:@@:Aj:Aj@:@:@@;@A:A@:@k:A:3@@:A@:@@:@39@;@ :@99::9 @@åÖW23223: @: qAqAq::GkGqrGq@:@qGq:AAqAq:GGqGqqGrq@kArw@@@: 9 :Aj:@@:A:A@:@;@:j@:@j:ƒ@: @;@:jA,:@@:3@@@@@A@ 3AæÖ_,Ž2::9:qGqA :9GAqAGkGqG3GkG:qGAqAA@@rArqArqqH3GqAGA@;@949393:@:@;@@:@j;@j@@;@@;@A:A:@3:@:ƒ@ @;@@3ƒ: ::3@j@jƒ@æ×:323 :9::@AA2c9:qAqGqGkGq kGkGkGjA@jA:qGkFrA@qHqq AAq@dAƒ:::@@ @:@j;@@:@@:A:@:A@:@@j@A:93A@;@-9@;@::9@:9:4:A@3@kAæØ%c2:9:qGj,:qA@kGkqAqqAqGqAkAG@A@ƒ:@A@kAqrGr jqr@:@j @@:9ƒ:@:Aƒ@;@A:ƒ@Aj:@j;@;@:@3 @@j::@@A„: @:9::9::@@æØm]2@::kG] 9AqAAqrGrGkG3HqAqrG@@j@A9@:@rq @AqqrqqNrq:@A@@:@:::@:3@:@;j@:@j;@d@:@;@ :@@:A3:@;@@:9::j@@:@: ‡:@çØ;22 :@3::92:qAk@rqqG@A: qqGkGk@A:AjA@:qrG3@qrGw AqqH:@@;@3ƒ:9:@@:A@@:A@:@@:A:A@@:@j:Aj@„:@::@:@ @;@@A:@:9:@çØ3,33@:A  :A9@qA@wHq@:qqAqHqA@Aƒ@:qA:@rGqqrGrqHkGAxq:@@:A@@@::9:@::@e@@:k:A@:@@:@k:@@:@: 9ƒ@ A@@A:39:ƒ: @A9A@:A@çØ22 ::3 :@AAkGA@A@;q: ƒqGA:@drqA@rqGr AqrGrGqqGqr:@A:jƒ@ƒ: @:@@49@;ƒ@):@@;jA:@@;@A@: @:A:@-@::@::9:9 @:: @k@AçÚ*2 :::9:9A::@qAkAk@:@@GrAk@@AqGqAqrqGq:qqHƒqG:GkG:ƒ@A::ƒ@:9:@A@3A@:@;@k:@@:@:A@:@:@-ƒ@d@: 3@:::@:3@:3::9 9AjçØn,339:: 9;@@:@A@qqGq 9:AqA@@:qqrGqAqGqr:GrqGqHqA:kqr@@Aj@:@:@:A@94:@:A:3@@:j@:@@;@A@:j@A:@ ::@A:: @A@@:@: @:…:@AçÙ2@:ƒ@149:Aj@k@A@Aj 3AqA3::qrGqrGkGrGq:GqAqqGkG:wHq@A@;@„:@j;@:„@-3::@;@@;@@d@:@A:@j ::@:@@3:@:2@:@@::9:9:@èÙ@,::@ 9::@::@Ak@kA9AqG3@qGrGqG:qHkGq:AkGAqHkG:qrqH@k@@k@:@:A@3ƒ:@;@3:@@:@@dA@@A:@j;@3 @@A:A:@@ƒ:@A:3:A3A@ A@èÙG329:qA@@:@::@@AqGAq@:q qHqqGrqGkGkG:@A@kqrqGkqGqNqA@:@@A@j@:9:@@:jA9ƒ:@A:A@:@;@j;@@: @d@:j@:3…: @: 3: 9A,A@kèØ322b9:q::A@:@:@:@qrG@ rqqHqrGqAkG@qAqAqGxGqGAqrGrƒ@k:A@,:@„:@:A@::@A9:@:j@:A@@:@@:A:3@@;@ƒ: @:9:@: @:3::@ 9@AèÙ733 :@:@@:A@kAqqGqrqGqHqqHqqAqAqqrAqAqrqqHqGqrqq@;@A@…: @@@:@j::@A„: @:A@:j:A:ƒ@3::ƒ@:3@A:@A: ::::@::@@èÚ^22:AA@:@A:j@@AAqHqGrqAqGr@AqGkGrGAq@qrGrGqqAqHqH@j:@k@:9::@A@A:@A@:@@::@:@:@@;@@j;@:9:@;@ ƒ@:@:k9@99:9;:èÚ]2 3G:@:@::@qAqqGrGkGkGkGqGkHƒq,GkGqGrqqGkqHqqr@4A@@3@:@:@:@@;@@A::@9 @@A:ƒ@!;@@::9::@@:2:AdA:@: @:A3A@: @::èÚ ,3b9:3@ƒ:V9:GqGrkGkGqAqAqAqrqGrGkGqrqHqGrGqqHqr@:94@A@4:@::@:@d@@e@:@A:@@::j;@d@@:34@@:A: :@@:3ƒ:9ƒ:@A@::éÛ c2 9:@3„:4GkqGkGkGkGkGAqrGqGqrGqGrqwrGqGrGrqG@:9@@;@@3@::@A:@;„@::@@3„:"@@;@3 @@:A@j:9::@3 9:::9::9:@3 9éÜo3,2 9: 9:@3GkGkGqAqrGjqGqHqrGqrGqHqHqrqAqqHq@::@;@jA@A3:9::@@::Ad@@;@@::@ 9:3 @:A@j:: :@: 3@A:@::9 ::9 AéÝ;39:99Aj:AqG@kGrGqAAqrGqqGrqGqkrqrGqHqHqqr@@::@@:A@@3::ƒ@3:ƒ@+A:j:A@9@@::9@:Aj:A:9@@9@:@A@:A:9: k@éÜX2]2- A :3:A9GqkAqrqqGkAGqrGrqGrqGGqHqGqqAqGrG@;@:@A@jA@A3::@:@:@:A:@A@:@;@:@::@:j@:@ „:A:@@:@@@:@A 3 9AéÞ?99:3 99:kGG:qGrGkGqqGqrGrqGrkGrqrqHqrqGqr@:@:@A:@e@A9:9:A:@…:%@:@@::@:@@:@:A:@3@@: :@:j:@::@2:„:éÞ433 :3 @4:qkAqGqGqAGqrGqqGrqGqrGqHqqGqHqrGA3@:@k:A„@;9 9:@A9:9@9::„:"@A:@::9: @:@:j@:@-@A:@A9:@3 9A:9@éÞ=,93: 3A9::A@A@rGrqGkGqrGrqGrqGrqHqGrqHqqGq:@3@:@@jA:A@@A9:ƒ:9A@;9::@@::3 3::93@@;@@:ƒ@ƒ:9ƒ: @3@A:A@Aéß , :9:@::@AjAqqGqAqqAqGqGrGqrGƒqrGqqHqr„:!:@;@@:@k:@::@:@::@:9@A@:9:@@:9„:@@, :@‡: 9:9: @@:k@éÞ5--9 9:94@9A@A@@ArqAqArGrqrAqGqrGrGqrGrqHq:@@A::@:@…: @:@@A9:@:@:@…:@:@ƒ:9:::9::9: 9: ::9: 2A2 9:éß:, 9: :@::Aj@A@qGrqGqGqqAGqqHqGrqGrGqGqqH9949:9:@A::9: 9ƒ:9: :9ƒ:9@:99:: 9:9::@@::9„:99:9::9 A9A@éà2:3„:ƒ@&AqkAqGkA@qArGkGkqHqrGqqrqrGrq43:::@ƒ:@@A9:9@4:@9:: 9:@::ƒ@::†::::9…: 9:::3 :@:éá22 :9G@@A@::A@kqHq@AqrGqqGqGqqHqrGrGqrGqA@ ::9::@:ƒ@„: @A@9::@:@„:#9::@::@:9@::9:@49: 999::::9 @jAéá73 3:@::qA@k@A@AqAA@qGqrAqArGqqrGkGrGqr:9:93:9:@AjA:@†: 39@@:9ƒ:"::3 39A:A@:3:93::::9::9::9@Aéá339::A9ƒ:@qA@kGAqjAqrGqrGqqArGqrGƒqHq3@ ::9: 93::9ƒ:9::@:@ƒ:3::9@@:9:;ƒ:9:9::9::3:3:9:99:393éá3, ::9::@:A@@qAjAA@AqrGqqHqGqrGqqAGrqGA@A3@::3 :@ƒ:3@@:9:9:@:9:9ƒ:9::@A@3:::@::9:::::„: ::éã3„:8@:@kAkA@@qqAqAqGrG:qkGqGrGrqGrq :9 949A@@A@:@:@A::3 9 ƒ:@A::99::@A@:9ƒ:9: :3@949:9 :@ 33éâ33 3ƒ:1@A@@kG:AA:A@qrGqqArGkqGqqHqGq: 9:3:3933::9@A@:9@ƒ: 9::93 :A@::9†:@: ::99:939::9::3:9@æâ 323 9@@9:ƒ@kAkq@kF:AAqqBqHqqHqrGrƒqA:3 9 ::A @393 94A:9:@A:@…:&9::9:@A@@::9:9:9:3::99: 39 :9:2A@;æâ523 3 3::@AjA@G@A@Aqq@kAqGqqGkGqGqGrk 9 9 9 @k@k @@49ƒ:(993::@@::@@::::9:@A::9:9::4@A9 ƒ:  3  3:æã222 3:9A::Ak:qAq@@A:@@qrGqHqAqArqGqr 3 39 3:9: 3…:A@::9ƒ: 99 93:@@ƒ:!@@::9:@::3::9::3 :9::3 32 :3 åä, 3: 9:„@2A@qAq:A@:A@qHqqGkGqGkrGq jA:@A:3:9 9 9A@:9@@ƒ:::9:9:9@A@@::9:9:@:ƒ: 4:9:: :9 9„ 2åäI2 39:3@:Aj:GkAqAkG9A@qHqrGqArGqqGAj9A@@:9::9A3:::9:9::@A9:A@:::@:ƒ:A9::9:9::9::99 :33@ , 33:@ååj, 3@::@:@A9:@A@qAqq:qkGqArAqqGrq::::3:3 39A@A@:9A@A::::9:9:9A@A@:9@@:9:@:9:::9::94:9: 9: 3 3 94åå0,3 3@:@::@A:9Ak@@AA::GrGqqAAqG:9:9: :: 9: 3ƒ:'9A@A9:AjA9@:A99:9::A@;39A9:::9:9::4…: , :  9 çç29: :9::AjG:@@k@kƒ@:qqAqGq@A:A:::99:9: 3A9ƒ:6:3:9::@A:@A@A94@: 39A@A@:9:::::99:9@9 3 @, 3 çæ.,3 93: :@ @:@@qGkAkA rqAkG::@:@3 :::@A@@Aƒ:#@:@93:9:9Aj@:A@3@::949::9:9„:::99 j :9 2çè1c,9 :@9::9A:@@A@3@G@k qAkGk@3 :9:3 3393 39 @kA„:@A@:9 @:34 3:A„:@@ : 9ƒ::9:9ƒ: @33 9: 3 çé, 33 :@A@q:@AdA@3AqGqA3AqGqA@„: 3@ƒ: 9 :9 939 9A„:„:%:3939AA@39::9::9:::9  2 33 èé32:33 :::@AqG:9kGkƒ@ qG3A:@:@q@@A9ƒ:9 :3A@ƒ: 9 9 9 9:@AAkƒ:@A::9 ,@A9::ƒ:9ƒ: 2:33 : éé',233@3::9@:@:@A::9AA@kA@3 9:9::AA…: A9A@A99AAƒ: 3::9:9G9Ak@A9:@@:9:9@ƒ:9::9  3  2 êê$ ,299 9::AqAkA@@kAA9AjGqq::@:9::ƒ9 333 3A@AjA9:AjA::9 ::@:@::@ƒ:@A 39ƒ: 9:3 3 2:3 ëì-2 ƒ:9:@:9A9:99@@A@;@ƒ:@AkG…:49 9::9:: 3 3 :9G@A?:A@A:9::93AAj 3::9@::: 3ƒ 9ëí22: 9ƒ:@ƒ:AA94@:@@A:9@AkFk:@9:A@AA9ƒ:9G9:: 3 3 :9:ApA:@A@A „:9:A@::@9 3::@339ëî33 9 9:9:9AA@qrqkq3 2ƒ:9 9 jA@:9AAjA:@:@kƒ:'  3:9:9A@::@A@::9:: 93 @ 3 9 3éî82,3 3 9:::99::@@ 3 9 3 3 9 3 :3:3::@:AFA@::Ajƒ:#3 ::@@::@k@::93@39 2 2 93 èñ32 3 9:A@@::9:A9:: @ƒ: 9 3 3 ::9ƒ 299::9:9ApAG::kA@9:@:A:: 3@: :3:33 : , :3 3çò 2233 9 3 3„:G3:99ƒ:@:9:3@:9 3:AAjƒ: 3:@ 3 9:9A@k@…:@9ƒ: 3::9:33 :ƒ9 : 3 :3 çñ-,c32949:9@::: 9 :3 94::9:9 3qAA9:A@„:@39:9 3ƒ 3 ::9A@ :@: 93 ::  9:3 :3èõB32::39:@:@ 3 3 3 3 39439::9 k@A9:@:@:3: 2 2:9:33ƒ:9 :9:3 9 3 3éö2- 9:@@3 33339 3„ 3„ &3 9    2 ,9 3  -: 9 9 33„ 3 3 : 283éø;2-223 - 33 9 9 :3393 3393 3 392 3:9:39 39 2:333ƒ:9 3 9 2 2 3 33322èøS23323 3 3 3 3 3 9 933 333 9 9 3494:49 : 3934939 93333 33 9 323h32éøƒK23,2,3 3 3 9 3 3 3 94339 3 3339 3 33 99 9 4 3 :: 9 3 9 9: 2 29„23éø†M3,322,22 2  3 333 9 3 3 943 3 3 33 3433 9 9 3  3 3 249: 32322332éøŠ -3,,22 ƒ +3 3 3 3 3 3 3 3 39 3 3 34 3 3 3333 3„ 3292c2323éø, ƒ2,322   3 3 3 3 3 2 3 3 3 3 99 3 3 3  3…23]232-ìø—„2,2  2  2 2  3 2 3ƒ 3 2  3ƒ2 23,9]32ìø›,22,ƒ2ƒ2322, 3 2 , 3,ƒ2 22,c,ccðø§ 22,2,2223ƒ2222-cc-c33233ðø¨, 3---22,32c,2,3,cc23öø°2332323,3]32,c3÷øÀƒ3,2ôøÀ2]23øøÄ÷øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄô,øÆñ,,9,2,øÄî,23]3]ƒ322øÂí2]33299:9: ,,ø¿ì23c2c3:9::9: ]2 ,”c]cø¦ë,c3]2:A@A@A9A@@32322c2]‰c]3øšé2]c]]c@k:@::A@k@A@32-ƒ2,2,,2,23]c32‡]cc2ø™é2-]9]9:A@qG:qA@ @33AkA92…3232]ƒ32,23c\33†2c2-2ø˜é%323]ck@:3qqqGkkGAG@A@: 23,2, 2323ƒ223]9]ƒc„2]3c3ø˜è]322]cAG3H:HkqGkqAkFk::32ƒ3,]232c3232c,ccc]c]ƒ323\ø˜è.cc2cc]@kGA9:@@A AkGk@@::@:@3\239]232-]3]c3…c 2c3,3c ø‰è&\]3cc:9G:qA9A@kk@kGq@@:AAq 3@:]3\3]]ƒc23]„c :]c]c]ccŽ… A ::9@@A3Aø…ç2c33]@:q:q A@AqA@qA@;@q@3ƒ:@G]„c2323cc2Žc::cc]c]8]3ƒc3„Gƒ9::A@:3kA@3@A@9 9 òç23]23c3]@A@:G3rqA@qAAk@qq qGqGq::@]3]3]3c]\3 2@:@„c]c32]c2ƒ9A3A@@kA::@Ak@9A:@@k;GAk9@@ðæ@,32c]9j@A@A@3qGkG3Gk@A@rG:3rGkGq::@c\9cc,323::@@::3c]9]c,32ƒ:9kGqG@@q@AG:@:qGq3@ƒ:GkA@ïå$2]23]9]cAAk9k AkGkGkGk@AjA9AqGqAA@ƒ: ]23c3 @AkƒA+@3]c]2,@A:GAqAkAk@qq9:9: qA:9 qAqA îæ]322]2]:@qGqA@@AqAƒ@q@@„Aqq;@kAqGA@:93c:@Aƒ@ :@9c322332„:@kGkGqG3A jA:9GqGkA@@3G9: íå23233]9]::kAqAAjA@k@rq@:qjƒAƒ@?Aq@:9::2c::A,A@9ccŽ3@@A:32c] 9@:qG 39:qqG@A@kAqkG@kAAq3j@íå532-223] :qA@jAqA9GqG:qr@qq:qrqGkA:9:3]9:@A@::4ƒc)3Aj::cc]32@;9Gk :@:GkGkAj@ :G@q jGA@: îäA23223]2:9@qGAkrGqA3 q: qG qGk qqHqGqAqGqG:@3]c93@:9]c-c9A@@:ƒc G:::@AqGkGA@3Aqkq@@AkGq:îä;2]3]c 9qGrqAqAqGq Aq:qqqrAqGrqqH@qGqGqk@:2c3 : 3c]c3ƒc%3@c :k94@Ak:@:qGkq 3qGGq;9AqAqA:kGíãe,32c 93GqHkGqAAqqBq@A@@A@@qAqGqHqqAkGrqAG:: cc]c],c223c3]]3c d@@:@A@@A@A:@:@ @kqA@:@qGq9:9Aìâ#2333:9:AkGqq@A@@qGqGk@@jA@k@:G@rƒq 9AqAqGqq@qccc3ƒc,]32c]c]39\ @A: @@k @:k@A@A@A :@@::3G:k9ìá]]2 \39AkG@A49qk:ArqAqA:@@A@A@k@kAAqH93AqqHqrGr@Akcc]c232]2d]c]8 :k@@3::@@d@@AkAq:k@jA@ƒ: @3 3 : êá?2 q 4G3AF::9::G39GqHq@A:k@k k@9A@qGq:GqHqqGqrGA@qAq]c3c, @]ƒc$d ,G:@kGAq3A @:ApAkGqG49: @A3 G9:@ƒ:êà 2]qGqGqq jAq„:9A:@lGqk@:@:A@A@AA@kAq:rqqGrqHƒq4AqGqc]3,@Acccc@q:@GkGAG::Aj@A@AjA@@::: 2A9: íÝ22]2 k:qG3GqGqG:@ƒ:. @34@AjAjqAj:@Aq:3GrGrGkGqHqAkAAGc23:ƒc#k::G@:qGk3:93@A@:qA@A:@A:3 @:3A3:íÞ,3,2c]G@lG3 qkGq::3qAkG::9@ 9AAG@AqAG@AA@ƒq"GrqrG:@qqGjA:@:@,c:-23:::kG3: 9„:9:AkGq@@k9 kA9@AA@ ìà:33 ::@:q kGqH:A9:9:qGqA9:@k:933@A@k@k@kAqHqrGqGqArGr@A@Aƒ:@„c]9:@qqA@:@GG:ƒ@qAqAk :9A@9A:@j@@3 @êÞ23]c2ƒ:-99 3 @@:: A @A@A@:99:A  k@A@A@A@qAqGqrGrAk…qAƒq.@AqrccA@G@k9 ::9 Aqk@:qAqAq@A@: 9::@@A@A@k :êÞ]c]23c9 :3:k@k@@:9q@k@…:A@A9kqG@@kk@:@kGqrGqqGkGAqHGrqGrGr@AqccA@::@:@9A@@A@A@qAA@Ak@@„:G:@:@kA3“,2×Ý]c:9:::@3:k@A@:rG3A3Aƒ@A@3:GrqAk@A::@kGAAqqHqrGqAƒqGrqGqqr@qqd3 : :@„:Ak@qAkG@k@:@A@:::@@:943 39“2ÙÔc]†:9@ 3ƒA9:: @A@ƒ:@A@qq 9„:R@k@::qGA@qGq:G3 @jAqGqHqqAqAGrqGqrGrG:AA:399 :3 @ @@AqAkFkA@A:j ,:@3@@A93c3233232‹,,2ÙÕcc2]22:G A:@qqGk @:9 q„:3 :: Gk@:9A@Aqr@3q:::3@kA@Aƒq HqA@qqGrqAqGƒq:@@:A3::@:@::9AkGkAG@::@:9 @A3:Aj:9]23c]22-]]2c,,3c2-Û×m32]:9A@::AqAqAq kG33GA@@33 9:qGAAkAqA:@qGrG:9@;@@::GkGqqAqArqGrGrqHqH@kAq :@:@qA::@qGq@kAk9: 3:@3:@3A:cc3ƒc,322]c,3]2,,Ü×,c„:jGqAq@GqqGq@qGk@A qƒ:a9@kFqAq 9:Aq@A9: @@:A3AqAA@qAqGqHqqGrqGqr@qG3:@:GkGq::qAkGkGq@:3G@A9::GA93c32cc3]2232]3, ]Ý×u2c3:@@:@:AqAqAqG3G:AkAqG:9AA9::AA@qA::9k:: kkAjG3GAqA@3GqGrqGrqGrqr:AqAA::@3Gk ::GkGAqAq 9AqA@3:GkGkcc]]c]32c3ƒc ,3]c]232ÜØ]2ƒ:#@:@@A@A:qHqA3A@ kGk9 @AGAq 3AqAk ƒ:U :9@AAkFkAjA@A3HqqHqGrqAGqGkGqA@A@qG9:@9A9:Gj@:9A@k@q9Aq@Ac3cc]9]]c]c232-8c232-Ü×23c@: @:kqq:A@qqA@qq::9@@A3@ƒq:ƒ@ Aj3 9:@@:3ƒ@Ak@qG@k@qqGrqqAqGrqrGqrqGk@k@„:,4@qAqAA@ 3Aq@:Aq::@c]cc]c]cc]9,]c,323]3]32Š2cÐ×,3]c:@ qA GqkqG3Ak@GqGkGA@@;qAGAqkqGA:@A3 ƒ:@4A„@7AA::A qHkGAqGqAqGqrGA:AqGAqA 93GqAqAAj :3@AA9::9::]cƒccc3ccƒ3cc]2232Û×y,9]c:@3Gq kG3GqHqAG@rqGkAq:qG3 33:q:A@qG, A@3 :33qG:3:@qqGqqAqrqHqqGqA@:@@k@Gk@: :GkGq::@@Ak:GA9::2c3]ccccc3c]23\c32332ÜÙy923::@3Gk:qGqGq@;@qrGqAqA9 @:: @::9@@:3AqA33qAA39AGqqGA@kGqrArGqGqqHkGkA@:@:AkGk@3@:qA:9:9@:A9:k9::9cc]cc]c]ccd3c23cc]2,32ÝØ[2]]A949A@Aq AqqlGk@AqAqGqGqAq3 3 3:@:A:GkGG:@@3 qqAq@k::@AqGqqAkHkGqqGq:@@k@GkGAG3@:9::@ƒ:!@:F:3232c3\33cc]c3cc3]c32323Ý×e,33cG9:: @:q:9AGkGk@AqGqqlGkGqrGk@G::AG@9:9A@@A@:qGqGAA3 GqqAGqrGkGqGqAqrAq:9:: qqk@A A@:A@9::A@3ƒc]„c]ccc]c2323,323ÜØy9\3]@ 3@A@qA:AqGqA@AqHqGqGkHqqGkqA@kq: :9::k@::@:@@q:3GqqGqAkA@AqAqrqAGkqA:9:AGAqGk@k@kAA:@:jAcc3c]ccdc3cc3,3,ƒc3]ÝØy]2c3: :3@AqA@qqAq qAqqG:rqGkGAqAGqGAA:9::@Aq:94@kA9 3GkGqG@Ak@AqGAqqA:Aq::@@qqAq@:@AA@k@:: k:@ccccdccdccc]3c3]232Žc]]Ý×^23c3\ 93 3@@qA@qGkqGqAqr::GqAqqA@kGk@q:@::@kGAA99@A@::@::rqAqGqAqqGGq:qAGAGkA@Aq@;@:j@@:@:ƒ@ƒ:cd3ccŽ]cd33c]2],3“c2,3ÝÖ2]3c::@3G3AkA ƒAA@:@::ƒqGqqr@Ak@A9:@3 qk39 3 @@:@Akƒ:'GqqGkGqAqAk:qkqGqA:@::@:@@4@::G@A@@:@]ƒc ,dccc32c]ƒc 2-233Ž3ÞÓc]cŽ„c* @ @: q:9Gk@k@k@k@A@: qHqHkGqrG@AjGqA: 3ƒA6jA@k:@@kGAF:3Grq:AA@A@:@GkG:q@k9A9@:::q@k@:kA9A@c]ƒc,cc3ƒc]c]2-ƒc]]ÞÍ,,,cc]9c]c]c3:39:@4GqGqA@G@@:@93@GqqGrG„qG;  39kA@k@AqqAqAqAqGrqGAAjƒq3@A@A@A::A@9A3ƒ:"A@AqA@9: j: Žcc]]cc]2c]9]233,9]c2ƒcÞÈ ,“Žcccc]…c#]“]c]G:@3@qAq qkkAk@: krGAAkGkGHƒqVk@:@ 3 @qA9:qGqGkApAqGqAqq@AGrG:@kAkA99@::A9A:@@:@k@AqAA::A@ cc]9]c]ccc]cc,]]9]2]c߯,223…2ƒcŽ“Žcc3c“:Ajƒ:GqAqAAqG@A9AG@:k@@qHqqArG@3A@3 9Aq@9HqHqrAqGqGqlGkAA@kqGk:@Aq@@:A9AGk3„:AkAj@qAqAjA::c]3ƒcd3cc3,c2c]3323ÞÇ)23hcc9chih“”“cŽc32::@A:@A:G: qGk 2AkA9ƒ:4@A@A@AqGrq::@AA2A]3 qqGqrGkGqrAGk@AF:rqGqHqGk::@kGƒqA9::9ƒ: kGkAGjGAj@:c]ccƒc 3c3]3c3\c3ßÇy2“™8bci\“i“8ccc3cc 3 :9: @@:3GqGq@:@::@3@kqkA@q4@:@::39 @3HqrGrrGqGqGqGqkG@3qqGqrGqqA@ @AqAGkAAG@9 39 3:@@qAkG@:AAcc,ccŽ3c3\c]cc]c]22ÞÇ"i““b9b289“h““9b9]c]cŽ“@AAq:@k@AkGƒ:39 9 33@AGq:AG„:ƒ:@ qqGrGqrqrGrkrGAkqGkHqAqHƒ:29AqGqqA@3@:@3:93:@:@AqA@k:c33]83c33cc]c]9\32ßÇ 2cic83’iiƒ™i’ih“ic@A@q::AF@:@:::@ƒ: 3ƒ@[kqAF:9@A:qHrqAjAGqGrqGqrq qqHqGqrGqq :9 ::@A3 qk@ A9 k9: 3@:9 2cŽ23c]cc,c]22c3c23àÆ-]™™ibc“i““’““™“i““™“™“3AqAck@A:@@:@A@@::ƒ@@:A@kGk@AjA9qGqGqA@rqrqGrqHqGqAGqArqGqArG@j j3:@A3GGA94@3: ƒ: 9: 9 ]cc32]ƒcdcc3c]c]c]2-2߯c™“bƒcy“˜“™™“˜“™™’™“™i“’3c”qA@@;:3::@A@q:A:@j:@G@AA:@AkGkqHqrGqGrqGrqG3 qqGqGqrGqqr@A:@A@A:9 9k93A:9 @3 3:9,c]2]ccccd c]2]c]cc,3,ßÇ03b9“ic“™™i“o“i“’™“™“’i™i™“cqGqk:@:@@:@AjAGk@Aƒ@\::Ak@39@AjAAqGqqGrqHqGqGrq 3ArqrqHqqA::G@@kA9G@kA4:@qGq43@@]c]c32d32cc2c3c]c3c]c2 ]233ÞÇ\ƒ2ychi““™“™“c”c“o““’“h“iqAqG@A@3AkA@@:AjAkA@::9:A@A:k@qqHkGrqGrGqkGrqA3GqGrGqqHqr::qq:AqA3qA@:@ @A@AqGq@::@]c3c23cc]c]dd]c]cc]c3c,3c23ßÈy3“™““n“™™”Ž”“”cd“bihi“™i“@AA9“Žq@@@qk@A@qqr:@c]ck:AqrGrqqHqqA@kGrqGqG rqrGqHqqHq@:GqAq 3GqA@:39:qk@:@r:@Ac]c3c]c332ccc3c]3b]232]2,ßÈc™2h2chƒ““Ž“]„c Žci3™A99ii“qr@rGqAqrqxHqq:9ƒc6 qqGrqGrGq::A@AqGqrGk @rGqrAqGqG:qA@kG3GqA39 qGGkG@:@ƒ: 3]2c]ccccc]ƒc ]c3c]3232cc-ßÈ]2ci“ic“i“33iicƒ“micc3GqGk@:c’AGrqrGqrqHwrGqrGr]A@qrqrGrqGk@::ccqrGAqGkGkqGqqAqHqq4A@: qAqA@AqGrk@:qGkGAj9cc323]23cc3c3]ƒc b]323c323ßÉyc2chcbhb™i™8“’i’c8“h]c3HkG3 933Aj@HqqAGrqrGrqxqkAj@;qHqqG@A@::“Ž“3k@A@kGGrqHqAqAqkA@q@@A3qrGkGq:@GkAqAkA@Ac]cc]c]c33c]c32]9232c]32àÈ2,22cbii“b98]™“bi“ci9AqGkƒ:@3G@AAk@GkAqrMqrGqHA9AqAƒ@ q:A@::“c2d“cƒDcAjA@kqGrqrqGqAqAp : @ @qGqA@:rGkGqqGAqk@Accc]c]9]cc]cc]2-23,cc,àÈ;, 23bi™2i“i““hib™hkAA@A9:3AqAFkGA9AqrGqrqq94GqrAkrGAƒ:M@:ŽŽc3]3,:A@rqGqGrGkrG@::@kA3@AqGr qr@AkAGqGkAGqA@]23c]c]2c]cc3c23]23]cáÉq2Ž29™“™2h“’™ii“™::i@q@j ::AAqqAkq@ArqrqHqH9GrqGr@Gqq@qGq Gjc”2c::kA@rqHA@qGqq 3 :: qqAkGkA@AqAqqAqAq@kƒqA@@33c3c]c3cc]2-2c3c3âÊy3228“i2cibc’™@A:hi@qA94:99rqGqqHqqr qHwHwqA9AqrwrGkGqAqG3Ak c,Ž2cA@AjGA@k@kGkGAq A9kGA9GkAq@AqqHqqGqAGAAGqA:qG::b]3\cc3]c2]c]3àÊB29“’8“ihchi“AAj@9“qqAq G:: rGrqrGrG3@rqrqHA9AqHqqGqAkGkG@AqG”ƒcE3]j@A@k:GA@A@rqA9:qAqqAkGqA@qqHqqHqrG3k@@3GkG3A@:@::3c]23,33]92]àÊ3ƒ2yc“hc™™““™qGA@\GqG3Aq :qqrGxqGq @rGrqqGkGrqNrqGqGkGk:9AqcŽccc2A939A:9@j:kqGrA2:@AAqGkGAq@ArqHwGk kGAqGk9:Gk9:9::9939Ac3ƒ23,]8àËO,”29“c8ch™™hk@k@:@lG3 93 @:@@A@rqHqrAqAwrGrGkGqqrqHqkGqGrGq@kcc,Ž3 3@rA@::ƒ@7HqGk AAqAqA9AkG@:qGrqrGAqGkGkGA:GkG3:kG Aq33,3232c]àËK22288ch““™“iqAqGq:Gk@9 9:39:AkAAqGrqqGAqqHqq@kGrGrqGqGrqrqrr@q- :9: qrGqƒ@c2c82™“™’ihkG@Ak@9 :9@:i“cqr@3@AqxqG qqGrGrwHqHqrqqAAqGrqGqxGGƒqA@Aj@@G@A:qAA@qƒ:1GkGAqGkG3A9 @qr @:@:qqArGkGq@@qAqA:3A@:@33 2]2]2ƒ3ßÌ, ƒcbihii“i“@qA@kƒ:s9 “h™“@@AkGqH2rqrGqqAqrwAGA@@:AqAkGrqrAqAqqrwrqrqAj@:@:qqG:@@qGk@kGkG@: qrqq3AqrqHqGqqGqAqAAqAGk9:@k:9 3 2323,22ßÍ2,]89“2b““h“A39A@@:9ƒ rcb™c:qAGkqr@rGqrGrGq AAj@A:@@kGqAqHqrGqGrGrGrMr@A9Aq@GqAq::A@q@@ 3@3GqGq qqHqqrqGrGqAqGk@GkGk@@ 3@:9 9 ,3c3]2ÞÎ729’ic“hii@AjA@A::2“8ibi:@AjGGqA9HqGrqqGqkAq@@:k:@A„:FAqAqrqqrqrGkA9::ƒA9@q 9AkGkA@3AA3:GrHqqHqGrqGrqGrqAqAq@@G::@::@:: , 2]23ÞÎC,3,9bi““bi“hc“@A@k@b8cbc™2i@A@kGrq:GrqqHrqrGq“i::qG@k@q@::kGkGGrGƒ@BApA3@:@k:@49AGkGkGk @kqGrqwHqrwrGqqArqAqGqAq@AjA::9::@3::@ 32-2ÞÎh3]cbGA@qGkq@@:9:Ai“™ch““™bc9:AqGq:qqHwrqHq:9:A:A@A 3GqGG@q@Ak@A@@A3@@A2Aq:93: @@A@AqGrqHqrqGGqƒA qGqGkGkqGk@Aƒ@::@::9 3323,ÝÏy,cb@kAqAqAAkAqA@:™“h3b“™:9GqGqA:AqrGrwA@ AA@@99:3qqAqrGqAGkAq:9333A: : @:3@k:@kGkqHqGqGqrGqqGA@kGkGqHqHq@A:@ @ @A3 : 332]ÞÐ,2A@@2A@qA@q@Aj@@™“29“™hƒ:SAqAqGAqxqHq@:@:jGkA3 ::9:HqGqrqrq 9AjAA 9A9:@@A@@qkqA9A 3@qGqG@kAqGrGqrGk:@qAqGrƒqG:jA@::@3@A@:9 32]cÝÑyc“@:A@i“@qA@AkA@:““i’i“i @:qGrqAqGrqrq:@::AkF@3A9::AGjAAqGrGq :qA@2 @A@AA@:@ 3@:@A@@:qAAk@;qGqkqrGrA9:AqA@;qGGrqr:@k@:@ 3:@9::332ÛÒP2k@@:@:AqAqGjAA@’2i“h:3:9AqqGqArqNqHq Aq@A@A@@:GkAGqAjHqqrAkGkG: @::@,::93ƒ:494@A@kAA9@qGHqGrqA:qGkA@@AqkGAq::GA@:@ 3::@9 3]923ÛÓyiAkAk@:@AkGqGq@qG ™“i“@::qHqAqrwGrqxq jGkGk@3qAq:@kqAkGkGA@ApAGk@9:A23:A 3A3:@:@:@@:9 jG:AkG::qGqqGqGkAj@AqGqGq@:@k@: qA9:A9: c2-2ÛÓtŽ,cGjGA@Aq@qAqA3Gkq2“c@9qrqGqGqrqHq rGkGkAA::@:G@9:GkA@k@Aqq@:@3::jA:A9::@:A@:3@A@qA@k@qrqHqqHkGqAqAqAqqHqƒ:@AA@:9: :93 ],ÚÒg3ibqAkq@kGAqAA@::i™AGkGqHqrHqGr@@ qGkG3@A@@qGqq 3GA9@qGqqHq A9::3::@ :93 94@:@@A@:::3 :qA@qrAƒqGAkkGkGkGq::G@dA@@:A@9 9 ÝÔT2iikGA@AjAqAjA::™“™”Gk@ArqGqrqrqAAjGqA@A@kqrGqG3AqqA9AqqHkGq:@: 9:@3 :: 3::@ƒ:-@A@:9::@::Gq@A@rqAqG3AGqGrGq:kA@k@A9A:9:3 3ÜÓy232cb@k@AjAAq9A:9:“˜kGAkwGqrGrGqHjA kG9k@ qrGqr:AGqH3qGrG3 @:A93:@::::9@@A@9:@@d@3: 3@: @:3GGkGkAq9AkGkqH:9@A @kG9:A93  ÛÔy,8c:@:AA@@9 qG:@2“G:9rqrGqrqHqqA9k:9::AqqHr@k:@GqrqG3rq@9::@ 393::@94@:@::A3:9:9:@ :@A@49q:@AA@AkGqqG:9A3 @@A:3:9: 3  ÚÓ2322ƒ:AFk@k qAqGq29c@3:qHqHqGqHqxG:@A::A:Ak@rGq @qAqqrGqH3 qH:@::@ 9ƒ::@::@ 3::@:@9:: 9@ƒ::9@A:@@:@:q@qAqGA:@@@ƒ:39: 2 ÚÓ3299ƒ:6@qGqAkA““’:A:qGxqqGrqrqrG9A@@:@q@AAqA@kAA9HqGrq 3Gr@@ƒ:@:9ƒ:?@:9 3@:@A@:@:@@A9; 94@ @@9::9::@A3q:@AqGk@:k@@k@@:A:9 93 93ÙÓ2323::@:@AqAqG™“@:9GqrqHrq@ƒGkG3ƒ:#9q: @:qAk@qAqAqqGqAqGk@@::@:@:@:@ƒ:@::@::@ƒ:1:9:3A:k@3@:: 9:@: @: 3A@rGq::@;@:q:@:939 3 ØÓ2-22:@ƒ:@AAq“h2:@:GqAGqAqGƒ:)qGkGq:9Hq:qq @qAApGrGk@AkGq 3:@:@@;@@:ƒ@:@::9:@:@:@@: 3@ ::@:…:"9A :k: @:@:Ak@:A@@A@ k ::@3 9 3 ×ÔN22 :@ q@,cc-::GqAqqAqGqr::qq:AG::q:@rGq@rA3GkqGkA@@Aq :@:@@:@@:@:@;@:A@ƒ:@@ƒ: @@:9 :999: ƒ@$:9@A3@:3A:3@A@@A@@:jA@:@:3:A3 9×Ó.,3229: jGqq3c 9qrGkGqGkGqGq qGA:qAqAAG:@qHkƒqG3@rGkG@Aqrq::@@:A@;@@;@:ƒ@:@ƒ:*4:9@;@:99@A3 ::@@:@:9@3::@@A2:::9:A9::ƒ@::9ƒ:: 3 ×ÓF, 2: :@k9Ž“: :GqGkGrrGqkAAqAkG:GjApAq@AqAGrG3GrqrGk@AqrG@@:A@:@::ƒ@A:;:@:„@ƒ: @@:A:@::@:@„:#9A:39 :9 @A9 :93:@kA:q9 :9 9:3-×Ô22 ƒ:@ @:: :@:AqqAqrqqGkGq qGƒq AGkA@:A@A2AqqG qrGqrG@qrG@:A@:j:ƒ@e@:jƒ@j;@::ƒ@: @@:@@3:@ 9;ƒ@$@@ @A@3 3:@3:@3:A@::@4AF@::9 3 9×Ôr, 3@@33@3:@AkFrGkGqHq:@A@qrAqGAk@G:@Aj@A@kGrk AqrMqrqAqr:@:jA:@;@:@:A:@:A:@@A@:A:@3@;j@: @: 3:::@@::j@A:99 ƒ:@ 3@A3 993@@: @3 ×Ô_3 3@@:A ::@:k@@rqAAGj@::ArGqGkGqA9AjA@Aj@AAqGkGqqrGAAqGq::@:@@A:jA:@@:A@::@::@:@@:3:@:@@33@ƒ@':9:@:3@: :j:9 @: @:: : :3::3A39 93×Ô33@;ƒ@ ::@kAFA@AAqqƒAq@:AqqrAqA@@A@A:@k:@Aqq qAqHq9kGkG3@:@A:@:@@:@:A@:j@@:Aj@A:@A::A:A::@j;@::9:9::A:@ 92 @:@39: 9:@ 3 93 :×Ôd2,9A@:3A3:@:qAk@k@qGqqA9:@qrGqA@:@k@qkAAqrqr @AqrwH3Gqqr 9:@:@A:@;@@j:@:@;@@:@:@j:@:9:@:@@33@:@@:@ƒ:@ƒ:@:3: :93 @::3 A@3 ƒ 3 ×Óy]329:q 9:@@A@@qAGAqAA3@@AqGk@@A@:qrqAjqHqGq rqqHqrqrGr3:@:@j@@dA:@:A:@:@;@A:A@:949@@:A:@ -@A:9:@ @@3@@: A@39:3@ƒ 3@AAˆ9:ÖÒ2328ƒ:CrG @@A@:@A@qAk@q @Ak@:A@AjqrGqArGrqrG3rwHqxG33Grq::@3:@;@;@@:@A:ƒ@e@@d@:@:A9@:;@@:9ƒ::@@A9:99A@ƒ:…:„ 99âÒy32,39 @ :2:@kAk@@e@qGAAqkqA9A::qHqGrGkGqrGq@GqGqrGqrGqAqH9::@ :@:@:@A:@@dA:@:@@:A@j: :@:@;@:9:@:3@:@::9@ :3:@ 3@:9 :@:„ AAâÓL, 22 9q@: ::A@@kAG@@AjqG@G3 qqrqqGrq@qGrqqHqrqGrqrqGrGqrw:::3@@k:@:@::@@:ƒ@ ;@@:@;@3@:ƒ@ :@;@@: @Ad@ƒ: 3 : ::@ 3@9êÔ]ƒ43q@@Aj@A@kAkAqqHr:@rqrGqGrq::GrqGrGkGqHqGrGq@:qAGƒ::::@3:@@Aj;@@:A@:A:@:A@:@@3A@;@dA3::9::@A@:@ 9@33@3: 9:@ëÔTc32 3 @@:@A:@A@jGqrGqqrqGrGrqH::GqAqAqqAA@qAqqGqA@:rqr@@:99:@A:@:@:@:@d@:@j@:j:Ajƒ:@:@@: :@::3@: …::@ 3ƒ:ìÕ2ƒ9A3:9A@ƒ:[@@rqHqrqHqGqqrGrqGqGkGkGAGkGkGqrGrAq:rMrG::@: @::@@A@;@:@;@:A:@;@A@:A: 9:@;@3:@:@:A@,@@:…:39::ìÕr]23@ ::9@@:@:qGqqGrGrqrGrGqGqqGkGkGqqAq@qrGrqqGqHqrq:@::9::@A3@:@@:j@:@@:@@::@@@@3@A:@@ 9:@@3:3: @: @@:9:: @íÕ]2 3:…:e@:@lGrqGqGqGqGqAqGqGqrGrqAqAqHqrqGrArqqNq:@:@: :@@:94@:k@:@;@:Ad@A@:@@:@3:@@:@::@;@ ::@ 9:3:@ @;: 9 @í×H3 :@@::9:q:qGqGkGkGkGkGqAqBqrGqqGqGqrqrGqrGqqNqr:@:A@93A:@: 9@:@;@@:ƒ@:@:k:@@: ::@;@:9:@@-@ƒ:@ƒ:2A@@AjîÖp, 29:@3:9:A9GkrGkGqqHrqAqGrqrGrqHkHqGrGxqHqqHqrGq@@;@@43:@:@::@:@@:@:@:A:@@:@;j 39:@@: :@A:@@: ,@::9::9: d@Aî×f22::9:9::q@rGqA@qrGrqGqArqGrqGrqGqrqrqHqqGqqHqrr@@:93::@@A:39:A:@;@j;@d@;@A@:@ :@@;@-@@:j: ::@@: …::@;îØ4::39::@:@::qGkAqHqqGkGqrqrGrqxGrqGrGxqrGrGrqqH9@;ƒ:@:@:@:@@::@:j:@@:ƒ@:j:@:3@:@@::@::@::@:3@: @: 9ƒ:@ïØ>,: 9 :A@:@@rG@rqqrHqGqGrGrqGrGqrGqrqHqGrqqGrwr::@@:@:A::@„:@@;@:A@;@;@@;@ƒ:@:A@:39@„:@::@3@:@: 9@AïØ 339439:Gƒ:2AkGkGrGqqlGrqqHwrqrqGrqHwqrqqGrqHqr@:@@::@:@@::@@3ƒ:@@:@:@@:j:@@:3@::@:@: @;@@:@:9„: ::@@AðØ, ƒ:e9::@::@qAkGqqrG3GqqHqrGqHqHqqHqrGrGrqHqrM@3@::@:@@:@@:@;@9:@:@A@Ad@@A@;@3 @@:@@-@@:@ :@@::@: ::@ ,A:ðÚ^93:@3@::A@AqAFAqHqrGqGrqHqrqqNqqGrwrqGxqHqqHqA :9::@:A:A:@:@:::@::j:@;@:@@:3@:@A:@ ::@:39;@ „:9„:@@ðÚ 3:9:ƒ@-k@@AjGkAqGrqrqHqqGrGrqrGrqHqHqrGqrGrq@@3:@A:ƒ@ jA::@@3@:@A:@@:@:@e :@:@:@:9::9ƒ: @:39@9 @9 ::ñØ 239::@;ƒ@'kAG@kGqrGqGqqHqrwqGqHqrwrqqrGrwHqwA@A3@ƒ:@ƒ:@:@:@;9:A:@@;@@Ad@@ƒ:@:A@:: @: 3@:9 A: 3@@3@AñÚ 3@ƒ::k@A@jAqAqGqrGrGqqHqGrrGqrGrGrMrqqHqrG@;@@ ::@:@3@;@@::@: ƒ:@@:j:@::9::@@:3@:@: ƒ@ :3@:39;9Aj@ñØc3239@:A@@k@A@@AjGrqGqAkGrqGrGqrqGrqqGrqHqrqqA@jA@39 @:A:@@:A::@@:9::@:A@; 9::@@;@:@Aj: @:j9:@: ƒ: 2@AòØd29:3@@k:@Ak@kAjAAqAqqAAqGrqGqGqHqxGrqHqwHqNq@A:@A@49:@:@:@@:@@:@::9::@:3::@@;@j :@:@@:9A: @:@:„:@:òÛH49:A9@:@@A@qAqAGkGAqAqrGqrqrGrqqrGrwrGrqqr@@Aj:A@3:@@4::@j;@@::@@A9:3 ƒ@;@jƒ:9:@:3„: 9::@@4@:9::òÙ, :9@ƒ:'A@k@qA@AqqAqGk@rqrGAqGqqHqHqqHqrqHq@:A:ƒ@…:A@9„:@:A@:@::9@@:@:@@::ƒ:@: :@…: 9 @A2@::òÛ34 :…@kAqAjA@qqGAqGqGrqGrqHƒqGrwGrqwH: :@:AjA9:@::9:@@ƒ:9@;:@@ƒ:A@@::3:3@@3@@: 99:9:: 3@ @::óÚƒ9::Aƒ:@GkAGqƒAJqqArqrGr@qHqrGrqGrqGrGr@@::9::@::@3:@:@::9::@::@::@::@;9 9@::::@:: :: …:3:9óÙ@,2 4 9A@:9GkA@qqGq@k@@kGqHqq@rqGqrGrGqrqrq:@:@:9:@:9:9A@ @::@:ƒ@%:9::@@3:9: 3@:: :@: :@::::99: @AóÚ+3939@:Ak@Aq:@kGkAq:GAqwrGrGqqHqqrqHqHqH9ƒ: @:@@A99::9ƒ:@†:@@ƒ::3@@:@ :@:@:@j:@@:@@: @A 3ƒ@óÜ 39 ƒ:ƒ@$kGA@qAAqGA@kGrGqqHqHqHqGrqGxq9 9@A@A„:9;@ :33:9:::9:@::9ƒ:@A: @:A-@:A::@ƒ:33 9:AôÛ22 3:9@:A@:kG@Akq@AkqAAqrqH…q7HqqHqqH:33:@j:@:@::@A9::9 :@@:9::9::::::k:@::9@ƒ: @3 9@3ƒ:ôÛ-, 3::A@@A:Gk:@GqA@A@@k@rGqGrGHqrGxqGrq:3A…:9„: @:ƒ@ƒ: 9:@@:39ƒ@ƒ:9…:@:9:93@ @A::9@ôÞ>3 99;:j@:@qqGkqAqq:GAqrqrGkqGqrqHqq:3@:j@:@: @@9@:3::9::@ƒ:@:9…:@:9::9::9::@:33:: -@AõÜ/324:9::A@:GAk:GA@qAq:@GqHqqGqrGqGqrG:39A::ƒ@ƒ:9ƒ:9ƒ:@:9„:@9ƒ: :99::::9ƒ: 9::@õÜ02 ::::@k:qA@:kGAAqqA@qqGrqGqqHrqG39@AA d 9:@ƒ:9 : 9:@@:: 9@@9: 3A@@:9„:::9::939 @: :@AôÝ=c, 3 9:@@:@9AqA@Aqq@AA@@;qGqHqHqqrq :@j @@: 3 @A@:9: 3 3::@„:4@::@„:@:9„:493„:3 @3@kõßG2 ::9:@::@:9@@3GkApAk@AqrGqqAqAqH@A394 ::@::9:39A@@:9:9::: @A@3„:999:99::99 9:9ƒ:õà*3 3::9:A@:A@A@A@qGqA@AqrqHqGqGqAj::9:3 „:@:@9Aj::9: 3:@@:9:3ƒ@9: ƒ:ƒ:9 9:9::9ƒ: @õÞ?32 :3:: :Aq@k@jAAkGkqA9AqAkqA@A9393::9A99A@A9::93 @A@::9„:@@A…:9:9ƒ::3:999:: 2A@õÞ,,c3 3 @9:9:@@kA@kk@AkG9AqAGkA9:: 33 @A@ƒ:9:9:9A@ƒ:93:9:@:9A:@:: ::::93:::9ƒ:9: 33õà ,3::: @:ƒ@OqGq kGqGk9AqGkG3 9: 9 3 9:@:9A@::49@:9: 9@A@:9: @@:9:9A9:3::9 94:::: ::õâ, 9:@„: q:@; k@A@::ƒA*qqG39 :9A@:A9:::9A@A9:99 @A@@::3:9:@Ajƒ:@ 9::::9::::93:9: :9õá2 3:@::@:@r@k@AkG@::pAkƒA 9 2 3939A@ƒ:79 3:9:A@A9::9:@::@A9: :@A@: 9::949:3A@339:9 2 :3 9:òáM]3, 39:@:@:@@Aq:@qkG@A@GjA:@A  49:@A:@:3:9A@::@A94@A@::9@@::9:9::ƒ:9 9 ƒ: 9: 2 9:A@òä22  9::@::9:@@A::@@3Aƒq:9A@kAƒ:9 9 :@Aƒ:"3 :9A@k@:3:9:@A@@49:@ ::9:@93ƒ: 9:: 3  9 òâ2ƒ23: 9:@„: @k@::@@kAAƒ:'9:9A9::9 :9 33A@:A@:93 @A3@@:493A3@„:9::9:33@::9:: :3: 3:3 ñæ233ƒ 3@@::9:@:qA@q@A@@Gƒ:A: 3:A9A@:9:33::@ @:@3 ::@:::@3AA9:99:::@3: :3 39 33 3 3ñå23:9 39A@::@@Aq@AkAGƒ:9 3 3 3@A9Ak9 k@„:3 3…: 99:9:9ƒ:9::9ƒ: 9 :: 9 3 @:@ðä-2]3 33: 94Aj::9A@A, 9:k9:9:@A9: 3 :@k@ƒ:39:@A@:: 3:9A@A49::9„:3„:9 9 93 39 93ðæ0-232:9 ::Gk9::@:qq:9 3 93A@k@:4::93 A@:9AA„:@k:9:@:Aj@ 9 ::99ƒ::: 3 3 :9 9 óéC22: ::9:::@:: :3@ 39 A@:9::AA9::9 A@jA9::A@kA9::jA::9„:: :999 3@ 3@3 3óì2 :„:K@@::9:9@@::9 33:: 9@AjA:: 2 :9:@AA9::@:@::@::9 9::9:9:9 :9:9 A 3:39:9 ôê723, 29::@A2 3 :3:9:3 :9 3:@::Fk::9 :@kA9:9 †:@ 9ƒ: ::@:: :: 3„ 3 ôí32 3 :3 -3 9 :9ƒ: 9:A@3:::9:A@ƒ:( 9:@A@A39@AAj:39@9:9@: 3 39:9 3:3 õì32- 9: 3 9 3 3 3ƒ 39: ,AG:9:39:@Aq@:: 39:9A„:@ @A::@: 9 3 3 : 3 ÷î+,22 3 3 9 9 3333:9::A@:@A3:@ 94Gƒ:@3:@Aj:@::@:9A:9::33: 33@3øð2322- 3 3 33 3 3 3ƒ 3:3@AAƒ:&9A@k@::@@::@A@999@  3 3: 3øó/, ,  3 3 9 9 3 33 9 3339@:@@::3 @:9:@ƒ: 39:@ : 3 33 3 @39 øô-,2222  3 3 9 9 9 3 9492 3 ::3 3 ƒ:9@@: 2:3::9: 3 3 3 3øöG2-223 3 3 3 9 3 93 9 3: 39:9 9 , :@3 3::3@33:9 :9 3 ÷øF,,22  3 3 33 3 9 339: :3 3 :9 9 9: k@:9: 39 :3 :33 öø†,,2 3 3 3 9 3 9 3ƒ 9 :93393 92 :9ƒ3: @ ::9:9 2:3 3: 3 õøˆ>2,   3 3 3 3 93 3 3  43:394:: 99 3  : 3 9: 3 :3öøŒ922,  2 3 3 3 3 3 9 3:33 3 9:39 3 3 3 2  3:33÷ø5222 2 3 2 3 3 3 3 33333: 3 399 3 3 3 3@ 8,øø‘-,22 ,  3  3 9 3… 3ƒ  39 33 39 3 2b322÷ø˜,2,-3 2 33929 3333:3 3 8cci23øøš#2222 3 2 3 3 3 3 3  3 32ƒ2c2c2øø›--,ƒ2    2  3 232 22c23233øøŸ-2†2,2‡2,,22ƒ3c33,øø¡22--2-3c2-3, --23cc3322ø„ø¦223ƒc3,3ƒ23c,c-ø‰ø­3\93d]23cc2ø‰ø¯23c]øø¯ 3232c23øŒø±]23øŽø³3øøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø‹,ø¸ø„ ,,2]92ø·øƒ2„3]23232,øµø,9]\32:93::32ø´÷2,]c3c23@A9:::2ø²÷33,9]c]c:k@AAj::9:2ø±ö2]9]c]8]@A@q:@A@A@ 3ø¯õ2]22]9]q @@33 Gq::3@A@A:2ø­õ3c-9]\Akq: qGAkAj@ 3,ø«õ]22c]9@3qG3 AqGkGAkA@Ak@A22ø©ô#,92cc3:@qA:Gk::AqA2GqAq@A@@332,2,‰cø›ó 2323]3c::AqqG9 @kGAkAqGkAjAA@ ƒ3 2 ,,23]cøšò2332-“]]:FA@:Ak kA@qAFkGq@@„:9 2,32,]9,-223\øšó23]]32ckAk@A@G9 qGkAkG:A@;@@kGƒ:„3 2]323]c]ø™ñ32-223c2Žc@AFk9A@3GkGq@qG@kAqqG@3:9::\322],32c3232†c]c]øŽñ233]2ƒc*::qGGkG3 qAqAqAk@kFAqA9GkGA9:3]3c232]c3]3‡\cc]øð 32,3\3]39ƒ#Aq @A@kGAkG@AAkGq:AqGqGk:F32-]3]c22„c†3c2cøï 2]33c3c]ƒ:+ qqAk@kA@k9 @q3@AkAAqqrqG:::]8]8233c]c]…]23]2øŒî2,32c]9 GqGkGA3:GqAG3qqG@:qk@GqAkAGk9:32]c2ƒc33cc2ƒ3232øì'223c]::3GqqAqGkqGqkG9 rGAqqG 3@:AAƒ@kGG:9c]3] ],c@@]c]ƒ23cøì,,c : : 9GqAqHqqAAkGqGqk:@qqqGk@qGq :kqGAjƒA32 9:3::c3c],ccøë232qqA3q kAA@kA:9qA:kGk@ƒA'@Aq AqGkqGqHqqGkF9:@9 3AF::]2332]93… 9 @ø„èG2]3 qG-GqG:@q@:93q@:GqHq@AjAk@AjAqAAqqGqrGqA::: @@9@@A:@AAc233]]…G:3@:9ƒ öèF32,c, 3A@ qA93GkG@:A3k:9GkGqA@A@A@q@Aq kGqrGqkAqGqAq:3A3A@:93c2c]22c…9A9A@:::jAAóçG232c3@k @qq qGqAr@@:9A:AqGrqAk@@k@AA@@AAkGqGrGqGkGqAA9A:3:23c3c]23c† : 3Aj@A:99A@@ ðè]c]c23„:=Aq:AqGqA@:@@9qAqGk@:A@k@kAjG@qHk:9AkGkGqA99@3 c3,c9@k:„A:qAqGAk9AAk9::@A@íÞ2‡5]cc33A:9::93 q:@kA92:GrAA:9A@k@Aq9Aq:@kGqq:@AqGƒqA3;@ cŽ3„ckA@:,ƒ :9 @kGkG@AkAjGA@:@:q 9A èÞ#c]322 q 3A@:99::9:9:@A3@:3A@:A@ƒq+A3k99A:G@:AqAq:@qqGqrGrG:GA:3c2c32 A@k@ ƒ39 :qAqAqAjAqG 3:9:Gk: @k@3çß c232-:Gqƒ@d:qGA@:9 ::@@A@@A jqqAA@@A@3:@A@Ak@kGk@Aq:AqHqAqAqqr@k@c33cc,ccqA2 @::Aq3 9:j:49:G::9:@A@åàF,cc:@qA@:A:qGqqAA@AqAk::@A93:qGqA@k@A:::A9 @AqAqAGA@qqHqqAqHAAFAAcc]„cŽc]ƒc:3 k@9G@:@AGqAA@A@@AqGk@@ AjA@äà2c3ƒ:@@kAqGkAAqqqAqGq9::@: qH33A@ƒ:@:9 39Ak@A@k@qAqHqGkGƒq AkqAq2c3]ƒc$]3cc, @@A::@kA:@@kGqGk@A3@:qA@A3 A@åá]2:@@k@@AqGqAqGqGqAA 3„:9kƒ: @@k@ :qrGqƒ@@kG@AkGqkqHqHqG@@ApA,2c]32]8]c3 @A::9 @AkGjAAkGk@A3GkG :@:@9::ãà"]32:A@3A@AkAqAqrqAqqqA: ::GAƒ:LA@A2@HqqAAk@A@@kGkGqHqqGrA:qq 9AA]c]32]c] ,Aj: @jAA@@ApA::3kGkq: jAq :@3ãà 9:@:A3A:ƒ@82“cb8“™“™A@GqGqrqH:qArqqGrGkGqrqGr:@qA:9AA9kA@qAqHqHq99AqAjGƒq!AqAk@:@@3@;9:A99@::3 @A9:9::]3,æØFq@A™’GkFkG:@::qAA@i,28c“™“˜“@r:qArGqq qGqHqrqqGqAqHqqAAkG9:A::3G@AqG„q0A:3AqAAqGqAqGk@AA;:9:::AA9::9 :9 ::22c22,2âÖy22 @:™bGkGkqA@:9:9“chi™“™8b8ci™AqAGkqrH9qHqrqrGr qHqrqHGq@GkGc2cc2]cAqqAGrA9 qGqqGkGAkGqAA@qA@ 9A@3 j@:9@A c]]c32ƒ3]càÕA,c2k@::3GkGGkG::b3™bichi\A29\bc@qGkGGq 3GrqGqHwq :qGrGqqrGkAkA„c>] :qGkG3GqHqGqGkGqAq qGkq@:@A9: ::4:@:99]c]c9c]]33]]c2,,2ƒ,„23ÒÕy,2qGkG@AAqqA@j@A9c8chc\9cAk c8c™:qGkqxGq@qHqrqHqrqrqrqHqAq@Aj3c]]39: kAqAqAqqArkGqkA9 :@kGqA@3@:@@Ak@::942323]c]cc]b3]ƒc 332]32ØÕs]2cGkGk@kGqqGA@A hi““™bi’AqGqG:@:qGrqG::qGqGq9GrGqHqGrqGqAqGA33 2 9:@A@AqAqAqGAqGqGq ::9@qG:kFA:@@k@A:FA: 23c22†c]2],2,33c233×Õ<23“ qGkAGqGkqAk@:22i“™ci“2qAq:@@rGrqr@:rqrqrGr39A@qHqxGqrƒq#rGq]23:9 2A@qAqGrqGAqAq kG@4 :@@A@ƒ:@AqA@k@@Acc]3]]3cc]c32ccƒ3c]23232×ÕQ3,cqAqGk@qAqGqG@A2c82™2™2A:k@:qGrGqGrGrGrqGr 9Aqq@@kGGqGGAqG:] 3 9GkGkGƒq4AqG9q@kA@:: k:9 :3993 3@cc]cc232]cc]2cc323\3c]]2-2×Õi22ibqGkAqAqGlGkqAqA““hc™22“@:9@AqGkGqqGrqqHqGrqGqGq;:AAqkHqkAqr9c:3 2 39AqAqGrArAqkGkAGj@9qA93@ 4Aƒ@;ƒc ]ccc]23cƒ] 2]cc]8]]32ØÔ3,]:@Aq@GkGqAqAq qGqƒicc322:@A:@qrqrGrqqHqqrqGr:3Aƒ@8A@AqqGAqqHq@] 2@;@ kGqAqGqqGAA@:A9AAkGA@3 ::@9:AkA@:c]‡c,cc2323c]3]2323ØÔy]c8:@q:AkGkGkGkGA94i’iŒ“Žc232Aq@@rGrGqqGrGrqNq@:@ @kGk qkGqGkqGrqH:@ @393 qAqGqr@:3@kA9 AkG@939 : 9A@A@ApA@:9]c]c]c33]cc33c2322,323ÙÓy2c38,@@;:@Gk@AAq:AjA:9i,cŽ“3]h2™GqAqrqHrGrGrqrGrG@:3A@AqG::@@AqGrqHqqAAq@: @::Gk:A@:@ AqG:9Ak@k94 :99 @::kGjAk@A9cc]332]cc322]23]2-9232ÙÓ ]2b2i:39@ƒ:@@3 9@Gk“cc]]cc9qGrAqGrƒqarqrMrqqr:@:G3Gk :2AkA@rqGGkGqr::@:qq ::@Ak:3 qAq@k@@: 3:GqAkA9GkGA@@::]c]c23c]2]]3,23c3\33,×Ór23-2 @:A@@:A@qAGkGq™““Žc“”c]qG:qAqrMrGrGrqrMrGkA9qA@AjG99@@:@@kGkAqrwr: @q9G9:9@q@ q@A@A3 3G@GkGkGAq9Gk9@;9@ƒc3]]ƒc3233ƒc]‰c]ÐÓh3292 9A@3:@:@qGqAqAk2™”Ž“Žc:9:@A@rqGrqrwrwHqrqrFA::@kAAkA9:::9 :qAqGqGrGqqHq 3GkG4qGA3@A@:9 qAkqGkAGj…::: ]c]ƒc2]cc,32]cc]2ÜÒ,3ƒ2 ƒ:n :@qqGkAq892]3c“Ž@:;@rqrqHqrMrGrqr@A Gk:@: 3@9 9:qGqAkA@qAqrqrqHqq:@3GqG3Gk@33qAqAFkGq q:GqGA@39]c2cc]ƒc 3,32]c]]cc3ÝÔ0, :9:99AqG2ci\8282@:@::@qqrqHwrqrqrwHwA@@kA„@ A:9::AqBqGƒ:, AFA@rwHq::qkA9:A:AqGkGA:@AkA@A@qAqq@:@3,„c ]]c]22-9]ƒc32ÝÒS2299:Ak:@kq32“hci“i3@;@AqGrGrGxqrGxGxGrqr@@kGkG:@33:9 :GkGqAqrqGq3 k@A@AqAGqA@ƒA/::AjAkGkq@qqGqA@jAq@:AqA@:3]33]cc]232c3c]c2c]cÝÐT,229: ,A@@9 :3c3 9:@A3@rqqrGqrqGqGqqrqrqxGr qGqAq3 @kAAqAqAqGkAqGrqG9AAjA@qGkG:ƒq0A@:qGA@AjGqAqGkGjA@kGrA@qAA@9c]\cc323c3]]cc33]c,ÝÐ3223:kGkAq:3@:9::@@AjA@qGrGqqGqGkAqHq@GGqGqqqG:ƒ@:: :9:@:GqGk@GqqGrq 39@qqA9:@;GkG2GkGk@qAG:qArGkAqGqGqAqAƒ@:]ƒcc]cc]c2]]c2c2ÞÐyc-, : kAFq: Gk@A:@kAAqGkGrqGqHrrGqGrqH:@qrG4G3::A@: 2qGrqGkGkAqAjArqG @: AGk q:@:@@kG::qGkGqk:GqA@AqAqrqHkA@k::@:cdc3„c]c9]c]23ÞÏ]c, 3GkA3Gƒ:@@AGAjqGkGkGrqrƒq'GkqHq 9qG3Gq:9::9::@3GrqGrAq@93:GA@qA@A„q)A@@ ::@kA@qAqAqAqG:Gk@:qGkGqGqGqA@k@:q:ƒc 2]]c3c]]bc233ÞÏ[23,q @;q@3 qG::@qAjGqGkGkGrqGGrHr:@GqG3GkG4A@:9A@::AAkGqrGq9 qGqA9AA@:jAGk@kAk:G@Aj qAƒ@( qAq@A@:9::GAAqk:qAq@ :A9c]c]3c]cc]9,3,2ßÏ.3283@:@:q @rq9AGkAqAkGqAqGqGrqGq:@ qkrAqA:@@ƒ:G:@AqGjAqHq qAqAqA:9@kqGA@kGA3GAA@:k:k@3AqqAkAAk:@93HqGqq9AGAq@@AkA:ƒc ]cc]c]c2 3àÎd23,92A9;@3 q9A@ @kG9GqAqAqGqqrGqAq: kAqA@A9AkG:9qGq;3:G@AqAqAqA:@9GrqGrAkqH:A@kpAGA9A:9AGkGjG394ƒAjAq4::kAqGk@A@kGkc]c]c]cc223]áÏF223:@ :3Gq 3qAAqqAAqAGkqHqGrqGk @@qHpAqqAF3qGrA@3GqGqqAk@AqA@:qHqqHƒq!AG93q::@33Gk99A9:Aq 9@@k :9G3ƒ:9GAqAq:@9AG]c]c]c]233c]áÏy32394:@:qAAqA@kGAqA3AqAqGrAqA @:@qrAqAqAkAGkG:3AqqrA3@Aq@AqAqGqrGqG4:3@ @:@A3 G@ :@@:9A@@:A@A3GqGrGqGqGqqAqA@::qG ]c3c2232]c22àÏy23 3 :@:A@@AkGq@kGqApAqGrkGkG:@e@rGqGAqA@AjA@qAGkGAq qqGkGkGqrGqrq rqqA@A3 : qAjA@3qA9:3:@:3 qGkqqGrGkGkGAkGk@:@k c\3323c2-áÎ.,323G@k9@k@kFkAAqA@qGkAq@qGq:@@AqGqrqAqA@@ƒ:T@AjGqGqqrGqG3GkGkGqrAGqrG 3 39:9::AAj kAA: @qGqqAqHqqGqqGrAqAq@A@A@k33232cc332áÐ,22 3:@::AAGkApAqAkGqGAAqrqr@qkG:@AA@@:@@:ƒ@TA@@;qrGqGrq4@AqGqAA@@qAqAk9@: @::@@3:AqG:9:9qAA3@Aq:AGkAqBqqAqGqA@:3@A3 c23‡]232áÐ"2 : 9:@:9@q:@AA@q@@kGkqqHwHqH:G9ƒ:)@:A::@k@Aj::k@@kGrqA9GrqqGqAjAkAqGk@ :3@ƒ:@„:9@AjA GkGkG3::qGqGkAAƒ@AqAk@:ƒ@3k3]9c3ãÑ%2 3:9:9A:AA@@k@@AkGrqHqrqrqrq949:@@r„q#GkqAq A@A@AkGqGkrGqHqqGAjAqq:@A9@3ƒ@:3ƒ@+@::A3@kGq@A :AkAAqGqq@@qAG:@kA@3@ 2c]]2ãÓH3 ::@kG@:@A@kA@qGrqNqNqNqHqHqrqrGqGrqrGGq @k@kqqGqAqGqrqrGkAkGqHq:3:@„:@…:+@::@9::GkAkG9G:@kFk@qqGkG-AqAjA@A:@ :9 ]23äÐy2 :3:@;q::@k@:AqqA@rqrqrqrqrwrGrGqrGqHqGkAqrqqrGGrq:@AkGrGr:qrGrqq:: 9 :93 ::@ :@:@::@::AFkGk9kGqGAqGqGk39A@Aq@k:@::3:29]äÐQ23 @@:GA@@:A@@:qGr@AqGqG@GGrGrqqHwrGrqGr@rqHqGrGqqGq @AqGrqwAqGqH9 93::@9 :@ƒ:,3:: :@@ 9 :qAA@A@4qGq4AqA9A@kGkGA@9:: ]]8äÍ 2, 3 :@@„:N@@:jGAqA@qrrGqrkGqqGGrqrqrqHqqGqrqHqqrAq qqrqrqGr:9A@qq  9 ::@: @@: ::@3ƒ:#@: 3GjAqA9AqAqqr@A@::@qqAk::9:9c]äÐ"239:@:@:q@@dAqAkG@AqGrGkGqGqGqqAƒG5qGqAAkGGqqHqAFqqHqGrGrq9:qrG9:9::3 94@:@@:33:9:9:@ ƒ:#@39@3 kGAqGqGrGqAkA@9AqAqG9:3@ ]cäÑ3 ƒ:@A::A@:@Aqq@AkqrqqGqGrqrrHƒq3kAqGqkGAkGqr:GkqHqrqrGrwAqGqHqq:::::@::9:A@3@:@@„:@@:9::A 9:9AjA@Ak@:AAƒ@:AAqAA9::43cäÎH,, :9:3:k@@:qA@qAA@qAqHqArqrGrGqGrGqGqlGrqqGqAGq@AGkGqHqxqGrqrGqr 9::@„:ƒ@ ::@@:A:A9:@ 9: @::3ƒ: qkGkG:kqqA@:jA@kG3:39 3äÍ 233::@Aƒ@?kA@kAAq@kGqqHqxGrqrqqGkGrrGrqGqGqqGkGkGkGAqqHqA@qGqrG:@:3:@ ‡:.@ :@::@: @:@: :::9:3 9qGk9:qA@A@@k@q 99 ::åÏC, 3 94:Gj:AAqAGjGk@rGrGqGrqxGqHqrrqrGrwrrqHqAqGkqrGqqHqGq@AAkGq@:@ƒ:@:@:@3::9@@:@ƒ: 9 @3:@:3 :@3 ƒ:ƒ:GqA:Gk@@dGA@AqA339:æÎ,34@:@@Ak@AqkGkGAqqGƒq;HqrqGrGqNqrwrGqHwqGqrqHqxqrqqrAA@jAGrq:@:@@: :@@; :@:@ 3:9ƒ:9ƒ:%@3:9:@39@: ::@AqqAqA@Ak@jAAq ::33äÌ:]2 3 @A@Ak9AFqAGkGqGqGrGlGqrGxqqrqrHwHqrwrHqrGrGrqHqHqHƒq rqrqq@:@:@:@„: @:9@:@9ƒ: 9 @: ::@@ 3ƒ:93 :9:@:G9AqAq@A@kGk9:9A3:äÍy,-9:A@:jA9AqAqApAqAkGqqGqrGrqHqHqxqrGqGrqqHqrqrqNqrqGqGrxGrGr@:@;@:@::9:@:@::3: :@::9 @@39 :@3A3@@:: 3:::@A39:9A::@ AqA3@: A 9äÎy22:@@:@AAqG:qAqAqAqGkGrqGrwrqrGxqHqrqrqHqHqrGqHqrqGrqrGqrqrq@:@:@:@:@@ ::@:@:::9@ @9:@: 3 @::@@ 3:: @:9::@:@: 9:@:@k @q :9:93: ãÍE22 ::3@k@q@A@Ak@qGkGkGkGrqHqHqMrqrwHwHqxqxqrGrqxqHwrGqGrxGxG@:@:@:@„:4@ 39::@@3:@:3:@ 3:@: 9:@: :9:9:9A::94@:GAq „: 9 ãÍ],, 9@:@:@@AjAqGqAqAqAqGqGrqrwrrqNqrqrqHqHqHqqxGqrqHqrGrqGrqr@:@:@:@:@@:@:3::@:@::9:@:::@ƒ:$@::3j 9 :: @@:@@9A@k@A:9: 3ãÐO2 :@:@;@A@kAkAGkGqGkrGqqHqHqGqrGrMrwrwrqrMrqrHqNqrwrqxqrG@:@:A:@:A:@A:@::9:@:@†: ::@@ 9: „:9ƒ:2 @:A@:: 9q:A@q::9A2@ ãÎ= :@:@:@@qqA@GjAqqGqGAqHqrwqGqHqqGrqHqHqNqrGxqqrqrGrMrGrw:@ƒ:C@:@:@::@:@:@: @:@::@: 9:@: :: @:9::@::@:9 3 3@@:@::@:9Ak49:: 3 ãÎy,39:9@::@AkA@@kGqGrqAqqGkqHqGkGrqHqrxqrwHqqrqHxGrMqxqrqrG@:@:@@:@:@:@:@:@:@3::@:@ :@ 3::3@:@::@::@: 9::9 33 j:@;:3@3 G9 :9:3 ãÌ^,3 ::@@:k@GkAqqAqAqGrqrGqGqHqGrqxrqNqHqrqHqNqrqrqrGrGxGx@;:@:@:@A:@:@:@:@::::@:@3:@:9 ::@…:#@ :@:@4:3: ,AA9 :@:9 :: :349 3âÏ3 9ƒ:yAA@k@AqHkGqGrqHqqArGqrqrrGxqqHqrMrqrqrMrMrqxqrqrq@@::@:@:@:@A:@:@:@::9:@:A::@:9::@::@@::@9 ::@: 9 9 @@A3 3: @9:3 9 9:@3@3 âÎZ2 3::@@q@:A@kGqAAqqAqqHqGkAkGrMrqrGrqxqrwHwHqrqrGrGrGxG@;@::@::@:@::@:@;@:@:::@:9:: :9:@„:&@:@4:@:9 :@: 32@:A9@39 -::A9 3âÎ2 9ƒ:BA@qG@qGkqGrGrGqAqqGGqqrqxqGrqHwHqrqrwHqxqqxqrq3@:@:@:@:A:@:@k:@:j@ƒ:@:@::@ƒ:, ::@::@::9:@: 9:@: :39: @@A3 9 3 94: @3âÍ ,93:@:ƒ@/qkAkGAqrqGqrqGqHqkHqHxGrGqxqrqxHwHqrwHrGrMr ;@ƒ:@:@:@:@:@:@:@;@@:@:@A39:ƒ@,:39:@:9@ @: 3:@ ::@@: ::@:j@ 3 3 399:9:3 âÍS, 3 3::@:A:qAAqqAqGqAqGrqAqGAqqrqxqArqHxGrqqrqNqrwrqr@9 @:@:@:@:@:A:@A:@:@39:@:@:@„:*@:@::@: ::@:: :3@::@393 :@A:3 :99::„ 9áÐO93@:9A@@Aq@qAAjHqrqrGrGqkGqHwrHrwrMrqrwHqHqrqHqHw:@ d@:@:@:@:@:@:@:@:A@4:::@ƒ:@:@:A@ƒ:'9:@:3@A:93 :@@33:@ 33:@@3@: :9A@@33âÍ , 3 @::@AjƒAZqqAAqGAqHqqGkGkGqrqwrGrqrwHrwrqxHwrwrH@:A3@:@:@:@;@:j:@@:@:93:@:@@;:@:@::@:@::@::@ :@3 9ƒ: @ 3@9:9: 9 :3ƒ 3 âÌc,, 93:@:@A@kq@AqAƒqiGAqq qGrAqGrHrwrxqHrwrqHxqrqHrw:@:3::@:@:@:@@;@:k:@@:@:@:@:@:@:@: @:@::@: : :@: :@: :@jA9: @A3@:3 39 ƒ:3, áÎ23 „:t@:@Ak@A@qHqAqGqArqGkGqrwrGrGxqrGrxqHqNqxq9: 94:@:@:A::@:@:@:@:A::9::A@:@:@: :@:@::@ 3@:3:@@93: 9::@3 : 33@@ 3@:9 „: áÍ2 9 9ƒ:*@A@qAqAq@AqqAqrGqGqqrGrqNqxqrMrwrGqrwrrG@:ƒ@:@ƒ:<@:@:@:@:@:@:@:9::@:@:3:9:@::@:@::@ 3::@:34 ::@@ ::9:: 33 3ƒ@33…9:3âÎZ,4 39:A@:@@AqA@@qGrGqrGqHqAqrwrqrGrqrrwrxGrqx@:A:A:@3@:@:@:@:@:A:@:@:A::@:@:@ :@:@:9:@Aƒ: @ @ :@:  @:3::@:: 3: 9:A@ 3 … 3 áÌP2 ::::k@:A:qqAAkG:qGqkGkGqAGqHxqrwHwHqHqrwH::@@:9@;::@:@:@:@:@d@:@:@3 :@:@ƒ:@:@„:@:@::3@39:3 :2@: @9:@:„ 9 :@:A99 †3áÎg,-3 :9A9@:q@A@AqqGkGkGqGqrGqAqrqHqHqrqxqxrMr@ :@:@::@9::@:A:@;@:@:@;@:39:@:@:@::@:@::@:3 9::@: @ :@ ƒ:@ƒ:… 3: k9:@3 † âÎl 3::@A@::q@:qA:qGqqAkArGrqAGqrqxqHwrGrGrq:@:@:@::@::@:@:@:@j:@:A:@:@:@:@:@ ::@:@ ::@::@:3:@39@39:3@99::‡ : @A‹3áÎ.-2,9 :9@A@:9A@:A@:kGAqA@qqGrqAqNqH9rqrxqxq:@ƒ:%@:A:@:@:@:@@:@:@;@:@@::@:@:A:@:@:@:3„:@: 9 @::A: ::@::ˆ3@:9ŽáÎX2393::@:qAA@AkqAqAk@rqGAqrGq@rqrqGrGqHqr:@ :@:9:@: ::@:A:@;@:@@:3@::@:@:@:@:@: :@:@ƒ: @::3@:@3@::@‹AñÏ7]29@9:@AkGj@AGqAFA:Grq:GqqH:@qGrGqrqxHw9 @@93:@@:@:9ƒ:'@@:@@:@:@39::@:@:@:9::@ :@:@:@:9@:@ 3„:@:ø†Î2] 9: :@:@kGk jAƒqFGqGrqAqHqqA@rGqGqGqr9 :@4:::@:@::@:@:@:@:k:@::@:@:A:9 @:@::@:3:@::@ƒ:@:: 9 3@ø‡Ñ122 3:9:9A@@AqAqAqHqkqGqGAqrq@:qGrqAqG: 9:@3::@@„:9::@A:@:A:9:@:@:@A@: 3@:@3„:9@: :@::@: 9@::øˆÐ?22 2 :::9A:@qA@GkAqGqGrk@AqGrGrqqHq::9:9: 3@::@:9:@:@:@33@:39„:@:@„: @:@: :@@ƒ: @:@::@:: :@;@ø‰Ò23 ƒ:94:@A@kAj@AqAA@qHqA@qGqrGrq:ƒ:@@9 ƒ:$3::@::@3 9 :9 :@:@:@:99::@::@:@@:9„: 9 9::9@@øŠÐ3239 ::@9::@GkA@AqqAkAƒqGrkGqqH::3:::@ ::@:@:9@@…:9:@:@:@:@@:A 3:@„:@@:39:@:@: @::2:@Aø‹Ñ03233:@A::@kG@Aj@HqG@AAq4GqAqG9:@@4:: :9: 9ƒ:@3:@ƒ:@:@A:@:A@@:@:@:9†: ::9::@: 9:øŒÒ 32 : :ƒ@+::@AjA@@Aqk@qA9GrqH@3:@@:9@@::99 9::3:9ƒ:@@:@:@@ƒ:@@:@: @:@@:@:3 9 :9 :@:AøŒÓ,23j :@:@::9AqA@dAAqGqAqAqƒ: 3::93:93:@:9::3@@A:A::@ƒ:3„:@:3:@:@ :39@:929: ::@@øÕJ23:@:@:A@@:@:qAAjG:kGqGq : 9::9 A9:4:3@ :9 94@::9:39:3 3 9:@::9::@:3„: @ : :@: ::@øŽÔ<32 9:3: jAkqH@AjAq@@GqA3 9@A@3 993:9 :@:99 99@99:: ƒ@:@: 3 9„:@:@ 93::@:3@@:øŽØ*3 9k:9A@AjqA@AGqrAq A::9A9: A@ 939:: @„:@@3„:3@ƒ:@3: 2:@:@ 9::9 :: :@9 :@:øÔJ22 3 3@3 3@A@r@kAAqqA3 @3 @:9:3@::9A@ 39 9:@;933:@@: :@:@:@@: 3ƒ:9:33ƒ:@:øÕ13,2 39 : @3 A@qA@3G3A9:A93399949A9:9@4::3@ƒ:9: ƒ@;@:@@;@:3 3::@ ::9 :@: 9:@ø‘Õ3233 3 33@@39:AqA9k:: 9 3 ::A@k :3@3 :3:9 A@9ƒ:@4@;99:@::3 @A:@@:: 9 ƒ:@:: @::ø‘×;23 :9 :A 9:G G993:9 : 9A33@:9:@A:9 A@: 9949 9 9:@ :9„:@@j:@ ƒ:@ :@: 9ƒ:ø’Ù=223:9 @@::9:3:9:99 39 j:9 9:39:93A9::@A9::@A9:@3@9 9:9„:@::@:@393:9 39:ø’Ù,ƒ> 3::39 39 @ :34A@@39: 9A@ :9 9 9:: ::9::9:@3@:: 9:9ƒ: 2 3 @:3 @@ø“ÜM2 43 33 @4 @A3A@::9A::39A94 @@:9::9 :@:::@949:9 ::9::@3 39 3::@;ø“ÛM2 3 3 3 939-@@9A@3:@A9: 9:@:9@A33@A9:@:3:93::@: 993 @; ::@ø”Þ 2 3333 9ƒ:.A3:9A9 : 3A@: @AA393:9@A@:49:@: 93::9::3ƒ: ::@39::ø•Ý2 3 9 3 399: 3ƒ:0 @jA:994@k@9@AA9 :@A33:@ 949:9:94::9 9 9 9ƒ@ø•Þ2„3 :93 ::94:9A-@:9A@@:@Aƒ3#@:3:@@A9@94::9::9499:::9: @:: ::ø–á, 2 2 :9 9 @A94@:9: ƒ: @:@ 9:@A9 @9:4999 :9 3:9:A9ƒ:3 9:ø–â5 , 2 9 9 3: k3@:99 A@A3 9:: ::9 @dA@::9:9::3:3ƒ: 9:9:@: 9:@@ø–ã,„ 53 94 393 :9:A@9:9A@: 3@33 @49::9::::9 ::3:ƒ:9ƒ:ø—â8,2 3 3 939 9::9 9AAk99A:9A9:@:@A@@:9:3:9 :9 9„:9:3 9ø˜ç) , 3 9 3 9 39A9:9:9:A9:9 :9:Aj:3:9ƒ::9:@:3 9::94ƒ @ø—æ', 3 3 : 9 3A@:A::A@A9 :A@ ::@ :9„: 9::9 9:3:9ƒ 939:ø—ë:3 , 93 3 3@::3@A@3@:9:@k9:@@Aj:99:: 949:9:::9 3 :9 ø—é(23 3 : 9 3 9::AjA:33:9A:9::@3::9:3…:@:9:9::339 : ø•ê?3  39 3  @:@A9::@A::@:@A@: ::9 9:9 3:9::3 3 3 39 3:@ø“ë ,3 3ƒ3 :99ƒ:A@ 3 ƒ:@:9:9ƒ: 9:9::9 3 :9 33 9 ø”ï% 2 3 39 3:343 @@3 :@9 9:@A9::9::9ƒ:9:@:: :9 39 3:ø•ð 2 3 3 9 39 :A39:Aƒ: k@A3::9:9::9 3 3:: 3 3 9 9 ø“ï:23 39 3 9:9 3 9:@:9:A3::9:9: 9:: 3 9 9: 9333:ø“ñ92 2 33 3399 ::@:@A@@A@:::9@@:3 @@: 3 @9 :3: 3@ø’ó2 3 3 9 3 339:: ::9:93A::9…:A3 3: 339 39 ø•ô2 3 3 3 3 9 3 9 3 ƒ:@9::9: 3 3:33 9 3:9 3ø–ö/3 3 9 9 9 : 9339:9 : 33 3:39 93 9: 3ø—õ.22 3 3 3 3:9 3@93@9:9 @:99 3:3:@ 3: ø™ø2  3 3 9 :3 :4ƒ @A:3:::9:@: 3øžøƒ 23 3 99:: 3 393: 9 3:: : 9ø¡ø„,ƒ3 3 9:9 39:93:: 9 3 9 3 ø øƒ!23 33 ::::3:9@3- 3ø ø…!329 3 3 393:9: :9 : 3 øžø‰3…3 9  3 3 9:3 øø‡,cƒ223 3 :333 3 93 9 3:3øœø‰ ,c2, 2 : 9  , @:3 3@ 3ø›øŠ ,,223 3:9 33 øøŒc23,2-2232 2  23b8cøŸøŒ ]3c]c3, …2cƒ23ƒ2øžøŒ23232c323,323323c29øŸø 23c]2c,ƒ c32cc3cc3ø øŽ,32cc]33„3ƒc2]]ø ø33,33c„,…32ø£ø“c2ø­øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø2ƒ2,2ø øœ ,]c33232øžøš233cc32]32-3\3ø›ø™2]2]c]]2c]32 3øšø˜2]]9]cc323@kAk3 3ø™ø—32-c3cc2Aq@ :@AjG:@ 3ø˜ø–23cc\,3@k 3@k:AG3A@@ ø–ø”232]33c:@ 9AqAq3AkA@, :ø–ø’2, 23]2c]c@:kAG::k@G:kGA2 :ø”ø#22]-2]32]9]c:AkAp:@qG@:@k@kA@A9ø”ø‡]…%,]33,23323c]c2 G@AA@kAq::A@GAj 3::ø’ô2,‰,cc]2332 :]232c3]@:@k@3@AqA9AjAq@qAk@@:ø‘õc3‰)]c2c323AqAq93 3 3 :@:k@@: kGkG@A@AA@ƒ:øõc232ƒ/,c]]33:3 kG@qA 9 3qGkGkG9:G:AqGA3Akqq@k@:@øö3cc: @k 3G@3:ƒ@:AqAq :@@qAqGjAA@kAq:GjA9AqGAƒ: 9 øö7cc]3@:@qGq@@Aj@@ @kAjGkG9:A:@:qAGjA3 @A@:qA@@kAqAG9: 3ø÷7]32]@@3:AA@AqGkqA @:q:9AqAqAA3@:@ GqkGjAG9:A@@kFkG@A@ øŽö922]c9Ak@Ak kAqkGrG@d @::AqAkA@k@ kAkG@kGk9 3@:AqAGkq:3 3øã]23\Œ=]2339 A@A@@kFkAqGqqr@3:99AqGjA@A2 q@@kAGkkGqA3 9AkG9Gq@ øŒâ8cb322,‰*c]c3@A@jA39GAAFqAqAAG@:::9:@AA@@ kG:AqAƒ@AqA@AqAq@kAkGk@@3†,ø„à 2c29bŽ332Š32Ž23@49 qAjAkAqAqqkGq„:"@Aj9:3 qAkGkGkAk@k k@qA@3G@GkGA@@,ƒ2,ø…Þ,23“™2i8bc]3ƒ2„@23cc@:Aq kAqA:9GqG:GqGAqG 39@: @:qq:GkG9AGkG@kGk9A:k@3 @32øˆÞV2Ž8“22i““2icc]cc23232]@k@:@:@AjqqA@:AkqA:93:GAj::@@q:AqGqA@Ak@q kGkGA@A:@3 ,øˆÝ23]8“228i2chc8ccƒ]2,32]3k ::A@@kGkGrƒ:@AqqG4kqq::F:kGkGAƒq @kFAk@AqA@3kGjA:@3 ]øˆÝ32c2™23322cchƒc-]c233232@39Aq:9AAqAq:GqqG:GkG9AGA @::A9Aj„Aj:Ak@:G@@k GkGkGk@@A2øˆÝ2]i“2”i8chi“„cC3]23] :4@9:AqAAqGAqGqrqGkG::qq:qG:@k:@9:@k@@ 39AG:kqAGkGkGqAGA:3 øˆÝW3ci“i23hih9]cc]23,33@@: ::k@qqGjAqAqGkGkAk@@3Gqq:@@:A@AG:@ @@:GA:pAqAqAq@kG::øˆÜc2™“˜“™2icbii“ƒcE]3]38Ak@:@9:9:GAkGA@@kGrGkGqGqAA@rG9@AAqAq:@@kA9@33:kF:qAqAqGk@@q@@:ø‡ÝX,3™“™“™“i“h“i’i2]c2“392]3Gk AA:9:@AqkGkGkGk@AqGqA@kAkq@@kG@@:k@A@4@ Aq:GkGqGk9AA@A@@ˆ]öÞ32c™b™“™h™“i“i“™233]2]c39 pA9ƒ:9G:@qAqAqGkGqAqkAqqAG:AA@:@k@AAk@9:qA@ qAAqA:@::@k@k:3 „2ccõÞX]™“h“i™““™h“h““bi]c32c] 3A@3@@Gq::GqAqGqGkAqA@AqGq::9qAqr@:AqqG:9GqqA@A9:qA@:AqA@Ak@@ƒ:ƒ2]c]ôÜ ]8™““™“ƒ™“i“hichƒcE3:@AqG:@qA@:A::qA9GkG::GkGqAAkAA@ kGqqHk9@A9:@Ak:@AjA@:GjApAGkq@Gk 9„]cc2ôÜ]c3,8ch™™““”i“™bib]2::Gk9:AqG:j@kGAq:kGkGqqGkGqGjG@kqGk:9GkG:94GAk@@:qAkA9:GkAqAqAAqA9 @9ƒ323]cóÞ2iiƒ“R˜™™””ci“i“™“3cA99 @@qk@H@@kqGqGkG:AqAqGkAqAq:Gq@::GqGr:AjG@;GqGqA@kGAqGjGk@qA9:ƒA23323ôÝ7,c2“™hi8“™“Ž“Žcc“˜i’i2kGAqAA@;@qA:GqA kGqkGkGqq@qGqqG„:@ƒ:#kGq:AA@@qAqAq9AqGkAGkG@Aq@::9 32]cõÜcc“bi29\i™c]c“Žcƒ“1i“2GkGkA@k@Aq:9qGq:GkG3Gq@;@AqrGqAq::::@ @: 99:9„:9:kGkGqAqAqAkA@:ƒ23]cõÞC2,2ibibc8“ihcccŽci“˜ciGkGkA@k@3:GkGkq:Gk@A@A@AkGkAAqGA@:9 @: :: 9ƒ:9:9 :Gk@qAqAqGqAF:@@c2]2õÝ?339hic“2ib“cbdc”2“i“i“AjG@A9AGkGqGq:@A:@AjA:@qGqGAjAk@:: :ƒ@9: 9ƒ:Aƒ:kGA@qAqAqAj: :@-:@@AõÝbc22“™“ib™“hi2“8ic”8i’cc“Ž2:9qAq:AqA:Aq:qA:3:@qGqkq:@GqG3@@kq:43:A:? @@:Gk94GqA@kGGkq@23kAj@„ 3îÝN]c™b“hib9“i“29““i”cbihc“Ž23:GkG::@:@kG@qAq9kGkrGrGq:qHk kqGA@:qAG@k:@:ƒ@kGqGqkGAq: ,2A@A:ƒ @A3 @ìÝc“28cc“™“’“i“’i’ƒcY2c9“9::qA2qAAq:@@::kGk:AAqAGqGqqAG:qAqGAq:@:AAqAkkGjGk@@qAqkGqGkGq3:]cA@3 99@ 3:êÝo]8““ibc™“h“i’GkGA“cdc3GkGqAqAkAqGkG3:9:]A39:3@A@kAqGqkGq@Aq:@:@A@qAq@:9:AAk@:AqGqGkAqAkGG:3 @ kA: :@ :èÛ,]chi“b™™i™“GqAjƒc @AqGqAqAqGA3@qG@:A@33ƒ:9:@:3GAAkGAAkGkG@A@:j@kA@A@::ƒ@A@Ak::GqGqGAkGkGk ƒ -9:9 @kAk„:çÝE3bc“™™““hi“qGq:9\Ž 2:kAqAqG9 3@q9::@@3 qGq@@AA::9 jAqGqqGkGq;@3::@AƒqA@@:Aj@kGq@:qAqAqqAq@Aqƒ 9:@@A@AF3 @:@@äÜQ22chcb™“™i’“GqG4b2 kGqA:q3 9c3::3 AqAqA:@q:qG3 kGkG94G@:@:kGqAG@A:kGA9:ƒA G:qGqAqAGkGk@k : @@::k@kAjA@A@:@äÚy232“™iibchibi“qHqG3 kGqGkGA9 93:9AA@A9: @k@A@qAqqrGk@qGq qAqAq 9::@::3Grqq:@@Aj@: @kF:kGkHkGqkGkG9:::jA::@A3kAjGA::@@áÛN,3b2ii“hcibiqqAqA@AqrGk @:3AA::@A:9Aq:A@@kGqGqGqAA:: :@qGkA9:9:9:: :@@;@jƒA)2G2;qGqGqGkGqAG:9@::@:9A@A@k@ 9A2 ::A@AßÛ32“i2hichcib@qGkG:@qGq„:@Gk:@@k@AqrGqqAqAqkGqr9Ak9@ƒ:ƒ@< 3 : 9 2 333Aq:9A,AqGrqAqAqGkqA:@A@9A@@k@:@A@A@A@3 ::9AÞÜ,9““qA’™chcq:HqAk @r::@:ƒ@`A@:@kGkGkGqqG9GkGrqGqGqGqHq@;@-:: :: :Aq@:G:: @G:9GkGkGqAqGqAqAqG9A: jA@kGk@@kAjAk@A3@A9@ÜÚ82,8™@@qA@cbqG@:qG@@:@A@:9A@kA@k@@kGkGqGrqrqHkG@;qHqqHƒqD4@:99:@@3 Aq:G::AkAqq@AkGqGkqAqqHkGkG3:3A::@A@A@AjA@k@A@9A3 9A@ÛÛ, ,iAkGqkGkcb“qAkG:k@@k::A3@kƒ:A@9AqG3qGqGqrGƒ:LqGkqHqHq:33 @:93:9A@:A@@jA@3G3A qAqGqAGkGkG3:A:Ak@q:9AjAj@A@@A@:3 9Ak@3@ÚÜy32kGqGkAG:@iAqGk@@;::9:h2@ :@Gq::AqGkGqHqlGqr:?:GkGAqrGq 9 3: 3 9:39AjA@Aq qGqAqqAqAqqGqAqAFk@:k@A@A:@A@A@kA933@A@A@A@@9ÙÛy232q ::ibGk@q::qGkGkA@@9 ci““822@:@Gk:GqrqGqr@@qGqrGqAqqr:@k::@:rGqGkGGkGqGkG@3AkG3:qGkGkHqGkGq@A@9:93 93@@;@AjAAkAk@k@k@::ÙÛ2-2c q::2GqAqG:@@qAGj::8c2ch“ƒ™`2::@kA@kGqHqGqAqGlGqrqrHq:@:A9::GkGrGkGqAqAqqAqAGkA::GkGAqqAqGkG::9 9A:@A3Aj@kGk@@3@G@A@@: @:ÙÚc322cGqGq: kGqGk@;„:hcichi2“i“™™c::G@@qHqqrqHqGƒqMGqGrqG:9@:@9Aq@@AkGqAqAqqAGkGAq:q@9:@kGk@AqA@::3:@A@A@kA@@A::AGjAA9:@j:@@k 9ÙÚi],2cqGkGkGkGkGAq:98“i22b3b9“˜™“™b:GjrAAqGrGqqHkHqHqHqA@qqHqqr qAqGk@qGqAqAqAqAkGjGA: qA@@AqAqA@3 :@AkAƒ@::93@:FkA@k@A@ 3A@3:ÚÚm23i qGqAAqAqq@:@:2i’ii“™2cb™“™™“ibGkGqAkqGrG3qGrqqrqAqGqGqHq: qGkGqAqAqrGkGqA@qAAkGqqr@A@Ak@Gq:9A:9@A3@k@A@ƒ:kA@A@ƒ:@49AA9:ÙÚZ]2chqAkGkGqGrAA@3 2ibihi2cc2“™“hi“qGqqAGqq rGqrGGqGqGkArqqG: kGqGkGqGqAqGkGkA@kGkGqG::ƒ@A@-::A@3::@GkAjAƒ@:A@k@@:9::9 394ÚÙ[3“c8cGqGqAqAqGqkG:@:c““™2232G 8“™““::@qGqrrGqqrGqqlGr qqGqGrq::jGkGkGAqArGkGqAqG@:qGqHqAq„: @j :@9AqAGk@@;@9:@@Aƒ: @:AÝØ%\c98:qArA@qAqkGqAj@ch“™bi“b2GkqGqGbƒ@8rGrqHqq;@AqrGqqq:HqArGqA@A::A@A9kGqAqGkGqkG@:@:qkAAjA93„@::@AGkA@kFk@@:A@@;„9 39:93ÜØ\]9]b2:@qG:@kGqGqGkGk@@c8“i“i23“AGkqq::G:AqrqrG@@AqGqArHqGqrqqGr@@k@Gk@3AqAkGkGqqGqA@:@9:@qƒA k@A@3AA99ApA@A@::@jA:24 : 3 :Þ×h32]8:AA@:kGkGkGkG:AAqGAb22™“22i2GkGA:GjA@qGGq@rqrGrqrG::qrGrGrqGrA@A@c:3AAFqAqqArGAjAqqA@qGqGq9 k@k 99ƒ: k@3 3 3 :9 @::@@@ Ý×U2]2“A2:3@:9:@@Aq:Aj@Aqkic™“892““ 9AkG:A@kGkGqHqGrqGqGrq::GqrqGrqAkGj@]AkAqGArGqq49ƒAqAqAƒq9:9ƒAkA@Aq@Gk: : 39 k9:: 3 949ÝÖ23b32 9A@:@:@:: :@AA9ƒifbcccb2ocikG@jqrqrq:rqGrqGrqqGqG:qGA:qAGqqAA@A9:39 qkGqqA:A@q@AqAqAHqA ::pA:@AkG@:qA9 3 9:@: 3@ @3: ÞÕ ,,223:A@A3ƒ:5@qqAqAq9:“hc“Žc983hcbqqrAGqHqHqGqqHqrGqHqrqGrq:@AqqHƒq#rq9A9 :qGkGkGkqAk@qGAqAq3:9@A@@:@ƒ:@A@9@ƒ: ::@3@@9A::@ÝÕ2-, ƒ:y9: ::@AqAAqA:hc]”“Ž82““hqGAGkGrqrwGrHqrqGr::@:@qA@A:AqGqrAAqGq :kAqGkGkGkGqGqAGkA@kGA:@:kA@39:9::9:A@:@@ :A3 @::@9 ÝÔr3,2 3:@ 3  3Gq qAq@q™,”3c3,”bc™:9 :@kGqqHqGrqrqNqrq@:@: ::A9qAAqGqqA@rq:@Aq AqAGkGkGkGkGkGkGq@@@3@@3GA 3::@ƒ: 3:99@::9Aƒ:ÜÓ222 3ƒ:y@q@@kA9b:99b3”c”:@:9::@qqrqGrqGrqrMrqrGq@A:qAqqGkG]2rqGqAqG9@:99A@kGkGqAqGkG@k@qAAkA:@A93Ak2A ::@3A9A:: 33@::@ÞÑ2332ƒ:^ qAqAk:3::chc@c8c @3:@:@:A9rqrHqGrqGrqrMrqrGrqG3AjAAqAAqAq2GrGrqGr:@:AAj @qGkGqA@@kqGA3GkGqqƒ:k: @j:G@3A@@9  :: àÒcc2 3: qAGkG 3AG9ƒ:c9A:Ak@9@GrqrGqGrGqrqGrqxGrqrGq@Aqr9@Aq@GjAqGc]@rGrqq@:3@A: kGqAqGqAGkA3:@qAqA:@A 9G@::9 3@k AjA:èÐq2c]322 33 jAqAqA2q@qA@A@GAAjGq:ArqGrGqGrqGkGxqHqrqNqxr@@AA@:@AkG9A:@A3c3 @kGrGA@: 9@@qGkGkAqqA@q9:@@GqA@Gj:kA39ƒ:@A@3::@éÑ!]32qG 9A@kG3 AqH@:Aq:q@kGqGqGqHƒq>GkGkGqqGrqHwrqrGr@:9Aq A@AkG39 jA32- @kGqAjr9::3:AqGkGqAkAAG@ƒ:@:kAA@ ::9  9:3:9::éÐ$2329: 33A@3 3@Gqr9qqG:GqGqqBqGkrqHƒrSqrGArqr@:qGrwr@ Ak@:@jAj@q 3 Aj 93c3@AqA@AqH:9:GqAqGqG3jAqAA3 @@Ap :j@@A::9A ::êÑ3ƒ2#k :@A@9Aq:Aq:AGkG:qA9BqGqkGrGqqMrMƒqrMr@: qHqG3ApA@ƒ:> 3 3 9 qAGk G@kGqA@rqG: :G::@A::A@@3Ap@@:@k 9@:A@k@A3cc]32éÐNc]83 39:G3:A@rq:GqAqGqAqG3qGkHqrwrGrqGr::@Hq 3G:qqHqGqAA@@99 :3:qAqGk@@k@Aƒq*GrqqGqq ::@k9AkA3 k:9qA94@:A9A@::33]c2]éÐ*23b399: @A@@q@qAqGkqGkGqAqGqrGrqrGqqG:Gƒq GqA3::Gqk:ƒ@):43A@AAqAGqAqG:9@q AqAqHqrG:3@q: @A@qqƒAkGA@3 99::9: @c\c32]c,32,2äÏy,322q9G:3@k@:Ak@kGqqHAqGkGqArqGrqNqqHq qArGAkAq@::9::@:A: 3:399AqAqA3qGqHk9:A@AqAqq3GqG3Gk@AAq@qA39 A3 3:@@ @3,]c 3c33]3,3ãÏ6,3G3kG :A:@qA@GkHAjAqqGkAqGrxqGqGrq@:@qA@Aq:::ƒ:693 2GkGqHAkGqAjAGkGqqG::Gk@A@qG4 qGk kG@kAqAA9Ak qAƒ:@,]23]c]c]232c3,âÏ&,32,q 39:@j@:Gk@qGkGkGkAqGrAqGqGqAq:ƒ@;qr@kG3A@:9:ƒ@':AqGrqGqAp@3qA@qqHqA@:@qAqGqAqAkA@3G::ƒ@:9 qAqAq@q@@A9AAc32]c]ƒc]c]c23,…,„2ÕÏ-:9ƒ:y9A:A:qAq::qA@qAAqAqqAqArqG;@A@;qqGA@qA@k9HqkGq:3Aq@kGrqqA3 9::qAqHkr :@:AqqAqq:GqAqA@:39AqAqAqAqAqA@AAjAAjc33]cc]3223cc,2 \c,2ÚÐm322: :@ :@:@kFkGA@@Aq@AjGkGqGAqrqHq:AjqqGqr@kA:@AAqGqA@ 39AGAqG qAqGAAq@:A:@:qqAqGq:G::@GkG:@q@AAqAqA@@:GjGqƒ:9:G3 cc2c]b332cc,323222ÙÏ 223 9:9ƒ:@qGq@:AqA@kGAqqrrqrqNqrq:GAGAqƒA_@q::@@kGk@3AGqqkA@k:GkAkGj9:@A@@AqGqk@::@Aj@AkqA@@AkGq@qqA@AkGAqA@: 3cc]]c3c]c]]3932cc,32,3ÙÎ+223@@3 @A@AqGA:@Aq@@kAqqGrMrwHqrqHwqG93: ƒ@:ƒ@A:A@kGAkGkGA3:A@k@Gk@@AqqAqqkG:@k3::9::@AqA9:Gqk@k@qGkGAqk@:@@:qƒ:cc]cc2]c]3b32]c]c]3]23ÚÍF],22 : 3@AjGq:@Akq:A@AqqH@rqHqrwHwrGr3::@94@::9::@@:@:qGkG3qGqqGAkA@ƒqDHqGqGqAqG:@ ::G::Aj@:q:kGqAqG:qAqqGAAqA@qG:F:932,33c3cc32c]23232323ÚÍy2  3@:@A3@:A@k@@A@qqHqAkGqqGArqrqGrqHqGrqAqqH::@:@A:@:9rGrqGqq3GkGAqGrqArG3:A@k@A39:G@kGA9 AGqGkGqA:GqAkAjGqqAqA@kA: 332c223,23232-2323ÛÍ2,-33 ::@A@@:@kG:@A@qlGkG@qrrGrqGqGrqrMrqrGqGkGqAƒqVAk@A@@AqqHqA:Aq@qGkGrq rqGq3AAjA :::@3 qk@AAqAqqGkGA9GqkGqGqqA@::@2cc]c]32-233,323ÜÍj2-, 9@::9A:qA@k@@kAqGk@AjrGqrGqGkGqGGrqHqrqGqAqqAAq @AjA@AqAqG4GqqGkGqA@qAqqGrA@k@ApA@qA@:qAqAjA:GA::Ajƒ:GqAqlGkA@@:@33]cc,2323c]c]3ÝÌ:,322 3 ::3:9:qA@A:qAkqGkGAqGrxGqGqqGkGkqGAqqGr 9GkHpqrqqHƒqE:GqqGqrGrqGA@A:qGAq:@::9:Aq@:@A9:: GkG9k99:9 @::AAqGkkA@::9c]232-ƒ]„c]ÞËr2,2 39: 9:@AA@@kAGkGGqAq@qqGrqGkrHrqrGrqAqAqqrGkGqGrqHqGqrGqH3GAkGqrGrkqAjA@qG::@:@@ 3A@@k:@@qAq:4 @A@k@qG93ƒAq@@:9:A9323,39ƒc]c,2ßËg,3,3 3:A@Aj@@:AqAqqAqGkqHrqrqrHwqrGrqGqqGAGAqAAkAqrMqrqHqGk:9:qGqrGqGAAqGqrA::@: 3@ 3AqAq:@3A@kG93:ƒ@A3 33::9@k@Ak::3332c3c]cc232ˆ,3cÕËFc22 3 3:@A@@A@kAq@qGqAqAGrqGrGrwqrHwrGqrGqkqqGqAjG@qGqHqGkA3rGqHqkGqrƒq rqrGq@@3:@: ƒ:0q@AA@@A@k:9 9:@;3GkGkGqAG9@qA@9:@42c3]c]c]2]cáËM3232 3@@k@3AkGkqrGkGqGqqrGqqrGGrqqHqrGqGrHqHqqrGqGAqkqHjGqGrqGqHqHqH::GAqGr„:8::@::@9 kAj 3Ak@@:@ qqAqqGkGqGkGkkA@kA9::Gc]cc]cc3]c]àË2-223::ƒA@kGA:GqGkGkAqrGkGrGƒq0HqrGqGrqrqqGrqHqrGkqAGkAAqrGqHqrqqGq:9@@qGq::@3ƒ:4@::@: @ qAF393qAAqGAkGqqrGqAqG@@A@: qA]c]c]cc2c3áÊ=2,2 3 9:@3@@Aqq@@AAqGqqGkGqGkGrGrqNqrqrqHqNrqrqrGqqGkGqAq@AAƒqIGqHqA9rGrqHq 9:@::@@ 39:9:A@k93GAGqG3@AqAAGAkGqAkA@k:@:Aq3cc3b]c323áÊn, 23: 3:A@Aj:@@AAjAjGkGAkGrGqGqrqHqrqHqNqrwrqNqHwrqHqGkGkGrqqAGrqrGqrGqqGqkA9 3@:@:@@3 ::@:::@kG3A@qkAqG4@9ƒqAkGkGjA@q@:@:c]c]cc,32âÊ-223 :@:@AqA@k@AqGqGkqGkGqk rGqxrMrqrqxGrGrƒq HqrqrGqqHqwHƒqGGkG@qrHqrG3::9@: ƒ: ƒ:@ƒ:* 2: @kA@A@:k:9AA@AqAF:AkGA@: @:cc]23232ãÈ 232 : ƒ@yA:@k@rqAqAqAqHqArqrqrGrqrwGxGrqrwrHqrqGrGqrGrqrqqHqHqAA@;AqGqG 399 A:@3:@:9@:@ 39 9 3@A3kG@Aq:: k@AjGqAk9@qqA:3@:cc232-2-ãÉM,, 339@:Aj@@A@rGAjGqArGqrqGGqGrwrMrrqrrwHqHqxqNqrGxqGrqHqHqqGqqA@d@AjG33ƒ: @:@3:@@ „:)@::9 3: 3FAkAq3Gkqq@qAqAq @AAj::@: ,32c3åÈS322, :@@:A:jkAqqAAqrGqrqGqqArqHqrqGqGrGrwrwrGrqHqqrGrqrwrqHqrGqrqrqqH39 93:@9 3ƒ:@ƒ: @@†:%9 2 kGjGA:@AqHq 3A@G3:q@@:@9:3]c]23äÈy]22 :39 k@AkGG@qAprGqqGqHqHqqGqrGxqHqrGwqGrGrwrqxqHqrGqHqGrGqGrqHqNqH99: : 3:@:@:@ :@@::@:@:@:9: 3 3A@A9@A9AqAq kG3 :G:AA@::ƒc23åÉN2-399::@@AkkAAqGqrGkrGqrqrHqGqrGqqGrqHqGrrwHqHqHqxqrGqrqwrGqrGrqrq  3:9:9„: @::33:@::@::9ƒ:" 39 9:@k:qGkGkGqGq@A@k@kG:3@3 ]2-2åÉ22 33ƒ::@k@G@qqAqHqAGqrGrwHwrqGqGrGrqxqHqrqrqqrqqxGrqxGrGrGrqGqqHqƒ:@ :@@ ::ƒ@33 :@:@:@3:@ ::@:@:93 3: G3A@qGqAqAq@:A3kGq : 3232æÈy2-2, 3:::@@A@k@rGkAqqGrqrGqrqrGqAqArqxHqrqrGxGrMrGrGrqHqrqrGrqrrGrq@39::@::@ :@:@39:@::@: ::@: :9:3: ::3@Aq:AA@:9AAj ::9Ak@A9: cèÈX323 9 94@9A@kAAqGqAqGkrGqqGrGqGrrGrwrqxrMrqrqrqrGqqrwHqGqNqxqNqqxG@::@:@: 3::@3:@A::@:@ƒ:) @:2:@ @ @9:@3 39@A@kGkqA94AqG::@@A@k3 3èÉy22 :3::@::Aq@AqGkGqrGqrNqrqxrGkqGrqHqHqrGqNqNrwrHqHqqrqrqHqrqHqr@:@ ::@@: 9::@::@ :@A9:@3:@: ::@k :9 3@ 9@@AqAqG3k:G@ :@A@kA9 :èÈN322 9:@A:qAk@qAqqHqAqqrGrGrGqGqGrqrwrxqGrrxqrGxqxqrMrGxqrGxqrM::@:@ :@:@3 9ƒ:@:@3:@ƒ:@: @:@:3@3@:: 2: 3 A@:@qAqA:G:@ƒ:@:@A93 3èÉd22 :3@3:@@AjGAqGAqqGqHqrqxqxqrGkGqHwHqNrqqxGrwrrqHwrqrqGrqrGrq:@::@:@::@:@:@@::@:@3@:@9: 2@:@: @ @ƒ: 333@A@AkGqAq:@:@A@jA@3ƒ èÈ 2-22 : : Aƒ@7A@kGqAAqAqqHwGqHqHqqHqrqrxrqrGrqrwHwHwrqHxGrqHwrwH@:@:@„:=@:@:@:@ 3:@::@:9 @:@3::@93::93 9:@3 3:@qA@k@@::q:@Ak 339 çÈU23 9:9:@::kAk@qqAqGkAxqrGrqqGqGrGqHqqNqxqNrMrrqrGrqrqxqNqrG:@:@:@:@:@ ::@:@: 3 @::@…:@ :: :@:A39@: ƒ: @@A39:9 qAGkA„@A@A 9:çÇ, ,23: ƒ:Z@@:@GAAqGkqAGqHqqHqHqrqqGrqHwrrAqrqrwrxqrMrMrGrqrw:@:@::@::@@:3 9::@::: 9:::@::3@:@@:3:@„:9@9::@:@A@3@33G@@kA::@k@399çÈ<“ 22: 9@::A@@k@kAqHqqAkqHqqrqGqHqAqqrrwrwHwrNrGrMrqrqrwrGrƒ:F@:@:@::@:@ 9::@::9:@3@9@ :@ :::@ 9:@:@4 ::@A@:@ @ 3 :@Aj:9A@k 3 3 çÈI3,2 3 9@:@@d@Aq@G@kGqAGqq@HqxrGqqrGrMrGxrqxqrwrxqrxGxrGrw:@:@:@:@::@:A:@ƒ:@ƒ:9@:9: ::3:@@@3:@:@ „: 9„:@A@3A@939:A::@AA33@:çÇ:,22, 3;@:qAAjAqkA@qHjAqH@qGGqrGqGqrqxrqNrrMrrMrrMrrqxqxƒ:@:@@::@:@:@::@9::@@…: @: 3@@:3:: ƒ:@@3 @9@ƒ:9:@@:A:@…: 9::@k@9 :çÈM332 39:9@:AqA@A@qAAqG@qrqqrqAqGrqHqGrqNqrwrrwrqxqrqxGrN::@9:@:A:@:@:@@:@:: 9„: @: ::9::@ƒ:'@:9 3@3-: @:9::Aj@:@A 9@:33@A@3 :9:çÈ8232 3:: @:A@qqAAqq@qk:@GqHqGqArqHqAqrxqGqHwrGxHqGrMrx:@ƒ:&@::@:@:@::@;@:99::@:@ :@ 9:@@ @@ @:: @ƒ: @9 93ƒ:ƒ@A@:Aj3 :A: 9A@k9: 3çÇ23ƒ2N ::94@jA@qGkGAqHGkGrAqGkrAxqrqrGqHrr@rqxrqxrGrrq@@:@:@::@:@:@:@:@:@:::@:@:9@ƒ: 9 :3::@3:9@:@…: 9 :@:@;jA:@: @39:9 3AA@ 3AçÉy323 ::@ @:A@AqAqAqkGqqGqArqHjGrGqGrqxqxGrrGxrGxkwr :@:@:@::@::@A::@:@:@:9::@ 3:@::@:@@::@:@::@:@:@3 3 9 3@A@::99:4 :3k9 3çÈ82322 9::@:@:@kAqGk qGqAkG:qxqAqrwrA@rxGr@qxqrwrqG@: @:@…: @:@:@:@::@ƒ: 9:@:@::@: 9ƒ:-@:@:@::@:@3: :@: 39 39 @j:@ 4 :9 9 339 ::çÉI, 22 9 :@::@:qAAqG3GkGrqr@rGrxGrHqrG@rqq:rGxHqxH:@@3::@@:@@::@::@:@:@:@:@ƒ:@ƒ:2 :: @:: @:@::@ 3@ @9 :9 : 3 :3@:@3:9@:9 3 3 :39 èÉX232233:@@A:@:@kGqqGqGqHq@qrGqGqqxqA@rxGGqxqxrw@::@3@::@:@:@::@:@:@:@::9:@@::@::@:@:39@ƒ:@ :@ƒ:" ::3: :93 3@: @:@::@93 3: :33çÊK323 :@3A@j:@:@AkAqAkGqqHqHqrqAqHqx@kGqqAqHqrG@::@3:@:@::@:@:@::@:@:@3:@:@…:3@:@: ::@3 :@3::@:3:3@3 9 3 @@49A:@@3 9 3 393@ çÈ'c,322 9: :@A@k@A@@qGqAqAAqqAGqxGkGqHrGqƒr GqG@:@:@:9ƒ:@:@::@:@:@@:@:A3@ƒ::A:@:@:@ @:@:@:@:3@3:9 :@: @:3:3 :3@@3 33 3: 3  34:çÊ 2 99: @AA@:j@AqGkAkGqHqqArqGk„q HwHqr@::@ƒ:$@ :@::@:@:@::@::A:@:@:@:@@:@::@ ::@@ƒ:*@ 3@:@: 3 @:3: 3:3:@: AA3 3 9 3 9 39éÊ3,22ƒ:>9:@jGA@AAqAqGkGkqrAqGqqHqHqHqrqx:::@:@@:9::@:@:@::@:@:@@:@@;9ƒ::@::@@:@3:@::@:@ ::@ @@ 3:9 : @@ 9 3@j@@39 4 933 :3 çË&22 93A3@kAk:@AjAqAGAqGwAqHqrGrqqrMr…:.@@;@: :@::@:@:@:@::@:@::9:@:@:@::@:@ @:@:@::@ƒ:%@::9 3:@@3 39: 93A@A: 3:3 q :93 @3èË,32 399A@3A@@q:@ƒA>qq@qGrqAqG:qqHq:3@:@:@::@:@:@:@:@:@:@:@:@:@:@::@:@3 9:@3::@ƒ:-@::3@ :@@3 @: :: 3:A 3:: 3:9@: 3@3 3 3çÌ/32 3 9AA:@A@kG@k@jGqAAqA@qGrqHqr@3: @3::@::@ƒ:@:@:@:@:@:@::@3:@:@:@ƒ:@ƒ:@:@@:@::@:@3::A: ƒ:3 3@:3@ 39@:: :3:3 3„::3èÌ1,22 3 :9A9q3AGkGqGAkGqAqq::qGqrG:93@@494@::@::@ƒ:"@:@:@:A:@:@3 ::@::@:@::@@::@:@::@@ƒ: @ƒ:93:@: @::3 9 ;@3:@3 9 9 † çÌk-23::9:GA9kGkAqqAqGqGAAqrGr99::3 @; 9:@:@:9 @:@:@:@:@:@:@:@::@:@::@:@:@::9:@:@::@3@ 3:@39: @:@@3:9:: @ƒ3 @@3@@:394…9èÍ32, 9::kG:@AqGkGqAk:ƒqHqA9:39@A93:9@@„:93::@:@::@:@:33::@:@:@@ :@:@ƒ:*@:@ 3:@3:@9 @: 9::@ ::@@:::@3 :@ @:@4 9† èÍ22 …:9:@:A@qAqA@:GkH3@3:: 9„: ::@43@::@@:@A:@;@3„:@: -@:@:: :@: :@: :@„: @: @:3@::@ƒ:3@ :939A:A9 9 …3èÎ<329:@9::@Aj:AqAqqA:G39:39@: :9:9 ::939::@:@:@:@:@3@::ƒ@ :@@:@::@@:39„:@:@ ::@9:@9:@3::@:@:@A† 9: :9@@9 2ðÎ,- @„: @AG9A@rGq 3 9::3 @9@3: 9 9::@„:@3::3:9ƒ:@:@::@ƒ:9ƒ:@:@:@:@ƒ:39ƒ: @@49: @9:@::‡ 9 3@A3:A 3ðÏ-2339@:::@j::@A3@A@39:9:: 49 :9:9 9 :@@9ƒ:03:34::@::@:@ :@::@::@:: :@:@::@ ::@:@:@::@‰ :3AAèÐ - :9@93ƒAP:k k9:A@A@:93@: 9 9::@9:@3@:@@:@:@:@:@:@:@::@:@:@ ::@ 2:@:@::@: 93@::@:@A@‹3AøÏ\2]2:;@: 993G:9A9A9A@4 : 9: :4@::@:9:@::@:@:@:@:A:@ :99::@: :@:@::@: :@ ::@: ::@::  èÐ-2, 33 9 :9:393:993 A3 4:@:3A33:@„:@;@:A:@@:3 94::@ƒ: @:@:@:: @„: @:: 33:@ø’ÓV29 3 93 33:::3: 9 49:@:39A@9::@@: 33@9 9@:@:@:@@:3@:@@:@: 9:@:@::9A:@:@@::2@:@::ø“Ó53 9 : 39 @3333  9A33@A:: 39:9@@;9: :3::93:3„:@:@: 9ƒ:@ƒ:@:@:93::@@::@@ø•Ò7,2 3 34 3 3 A@: 3A9 @:9 :93:3@: 9 @A:@:933 9 9„:@ :@:ƒ@:9„:9ƒ:@: 3:@:ø–Ô2-- 3 9: 9 jAA@3:99@A9 3;9: 4@9 3:9@A:@ƒ:@:: ::@:@: 9@9ƒ:3:@:ø—Ô@, 93 33 3 :@3 @@ 9: 9A3:@A2 93A@::39 9:@:@ 3@ 3 299::@ @†: 9 3:@ :@:@ø˜Ö'22 3 3339: 9 j4 9 k@j933@49@@3ƒ: @@:: :@:@::@…:9ƒ: :93:@: ::@:ø™×233 3 33: 3:3: j AA3 A@ 93@A:9:93:3A9:@:@Aƒ: 9: ƒ:@@::9::@43::øšÙH 3 9 : 9  9@ @:9:99A9 3:@@3::@@::@ 3@@::@@: 3@:@:9::9: ::9 @:@ø›Ø+2 39 339 A:j@k9@ 3::@3:@@:9:@4@3@ƒ:@:9A@k@:A:@: :9::@„:@:øœÙF,33 9 33 :3 jAA@::  @A9 @93:@-9:9:4@::3:9A:@3 33:::@: @:@øÛ# 3 3 9: 99 @:3@39A9kA3@Aj39A@@„: 9 @:9::9 9:@„:@ 3ƒ: @:@::øÙE2,3 3 93 ::k:9:9::@@ 9A@3:4@A9:3:93::3:3@:9:@ : 9: 9:9:9øžÛB2  3 99@39:: @A 9: 9::A9 @k3@:@3@:3@:::9 :9: :99 3@33 3:9øŸÜ!,2 2 33 94 Ak3@3 : 9:3:9A@ƒ:9:39: :33:94@9:9 39 ƒ@ø ß7 ,3 3 3933FA9A:9@Aj : 3@;@9:@ @:9 :99::::9 :@ ::@…:ø¡Ý42  333 3@::9::@:93@@::33 99 :9::9: :3ƒ:9: 9:9:ø¡ß2-3 3 33 :9:@A@3„: 3:3::@9 :93 33 :3:@ 9 3 9:@@ø¢à9  9 3 9 @kkA3:99::@A::9::9::9 3: 99:A @@:93@ø£à9,2 3 3 33 : @: @9@A :A9::::94 :9393:99::9: 9:ø£â633 9 3 93::3 9:9k@9:@@k:3:9:3:9: 9: 399 9@4 :9:@ø¤â", 2 9 9 9: 39: A@:3:9A@3::49„:9:@3„:9:9 :ø¥â2ƒ 3 3 3 9ƒ A@9;@ƒ:99:99:9 9 39 39::9 3 9:ø¤ã-22 3 3@ 3:3A3:3 ƒ:@::9: :9 39: 3:9 :9: 3@ø¥ä2,23 3 3 9 33:AA9 9::9:9:9 :9399:9:: 3 3:ø¦æ1,22 3 393 3::@::9@A:9::9 3:3:9::9:33 9ø¥è22 2 3 39 : @:9::A@k :3†:9:9 :3 : 9:3 : ø¢è, 3ƒ 3 9 ƒ :@@9 ƒ:99:9::@3: 3@: 3 3 3@ø¡é,2 33 3 3 @:::@AAj:9:9:ƒ:9: 3:9 33:93: ø¡ë12233 339A3@9:A9::9:@:333 3: : 933 3 ø ì23 9 9: 9 9A@A9: 9…:9: 3A93 39: 34:3ø¡ë2,2 3 9: 33 3 9 3 9 3:: 9 3:99 3:99 ::øŸï%2 3:9 339 :@A:A::9 33 :3 :9 ƒ:3  ø í,, 2, 9:: 3 3 @j@: :9:93:93@ 94:3ø£ï),2  :9 939:@@39:3: :: 3:::: 3 ø¤ñ3 2 9 3 4::@ :: 9 3:9ø­ò3,3 3 :9::3:@:@@399ø°ïc],2† 499:93 33 ø°î223323c223 9 :9:9:9@343ø°í c-3322332ƒ 93„ : 3  3ø®îc22-,32c2ƒ3 33 99 :9ƒ ø¬ñ c3]c]], ,,22 33 :3 3::3 ø«ó233c3c]332 9 3 :39 :9 9øªôc223c]c2332232388 3 ø¬ó32c-2cc]c32,3, \223b9bø¯ô]c,2cc-,22323c]c22ø®÷33… ,32c,c2cc3ø°÷23]3]†2„3]3,c]ø¯÷32]c‹,9ƒcø¯øccøÁøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø¨,232,ø•ø¦ ,3322]3232ø“ø¥ 232c]3c23323ø’ø¤323]c3c]3c]232,øøˆ2™]23\9]c]2c]c]@A- øø‰2’3\32,23c]3c\cA@@@@:A@@ øŽð232Žd,23„]c„22,3]9,32c]232::G3 A:AjG9:øŒï28]c”]223cc2ƒ3]82 33c]3c3c]@9AjGkG3 kAƒ@øŒë ,232cci232Œ'c32::9:qA,@j]3AA9232]]bc:AA@Ak:Gƒ@kA:3:øŠë38““ƒ23]]3‹33]2c@AAqG::A@A@ƒ@k@A3]3@@AjA:@@kA@::A@@3ø‰é238]™ciibbh]3ˆ]23c] @kA93A3@@A:ƒq:@kGAkA9 :@A@AqA:@@k@k@@9ø‰é33]88“282“8“9c\3‰2]]29 k@@:AqAqAqqGAq:AqAp 9::qqAk9:@:@99A@A@@A øˆéL2,c2i2c8“2cbi2c23c],329 A@A@@9:@AqAqqGq::@AkkA@::GkGA@k@A9AAk@qA@kA@:9ø‡é32]““82Ž™2iib„c:]22233: 93q3AG@@kGAqAqG::qAGkA@::Gk@A@@k@:jAA@kA@@j::ø‡èO2, ,c“™““i2cbibcc]c3,332]2 jG: @AkAqAqAqAqA3G,:qA@q@A@@ 9@-A@A::@k@GjqA@@::ø…è,3“™’™“™ccbiic]3]23232]9@ƒ:'k@@qA@:AqAqGqGkG:::A@qAk@-Gk@Gk@A9G@kƒAkA: 93ø…èO,28c“™™““hcbicc]c232-23]3:9 AqAA@AjAqAq::AkGkAq9:@kA@A@@qAk@Gk@qA9 @@jG@A9 ø…è ,ibi“™™hƒibƒc+]3232339::@:@q9:kGkGq:9:@AqG@A:@k9::@A9ƒ@Ak9 kGk@AAjAk: ø„çR23™™“™“˜““ib“h“b9c]323\ @ 3@@3:A@GkFk:GAqGqA3Aq 3AqG 39@ :qq::GAkG3AkG@A::3øƒçB, 2,™“™“™™““hic™“,3“3233q@3:@;@:@:kGqGAjGkGq:GqA:9AqH:9 @A9:AqGƒ: F:Ak@@k@93ø„èR,3,i2™“˜™™“Žibi2232]2k9A ::@q::GqAqGkAGkGqGqAq::Gk ::39Ak:@kGqGq:Ak@Aq@ :AqA@:øçTc2™“i™“™™Ž“cchib9c,3c3:k9Aq9A:9A@AqAq@AqAqkGkGqA9:qq@:@:9:A@kAqG:AjAq@ jA@AjA:øæ ]3bi“hb“™“™d“Žb“cbc2c:3:GAj@ƒ:2Gq:@qGkGqAqAGkGqGkAGGq::@A::9GA@kA@qA@@kAqA@k@AjA:øæS2]29hc8c8™™”cii“ib3@AAkA9: G@@kG::qG:kGkGk@@AkGk@::q 3@@GAjAq@@AjAA@q@kG @9ƒ:øçU3bcbccbci“ic”]cc“h““3]@:9:9AAqkA@:qAqA:GkGkGAkGqAGqGkGA@Aqk@@:@::qAG:qA@AkAjA::øç;c2,i“8ci8bi’“c”cii’i2q:9A@kGA@k@@Aqq:qAq:kGk@@kGk:9AjƒA@A@Ak 9@:@qAkGk@AqAj@:,öçV]c™ibi2“cib9bcccci“i“2AqAA@A3GkGA@AkAG:GqAqGqGkGA@k@@3GqA@qq:@k@Aq:33:Gk@ApAAjAGA@@:÷å72]“b“i“8ibib3“cŽc,™chqAqq@:@:qq@:GqAkGq:AqAqAjA@ƒAqAqqGqq:AkG@ ::G:G:kGqGAjAjA::÷å']“biib““h“i2biic”c,cciAqA@A@k@@::qAƒq*AqGkGqAqAqGkAj9GkG:@:AG3 q@:9:Gk@:@qAkqAGkƒ:÷åY2-cci“b™™““™ci8k9iŽ89’cc“,Ak@Ak A@AqAGq:qA9AqG@@kGqGqGqGk@;:qqGq @AA@A9G:@@9GqG3@@A@:öä=c2chi““™“™h™kA@::c3c8]ib9 22 :9qAjGkqG:AA:@AjAAqGkqHkA@qƒ@::rGrkAq@jAqq;@4GA:kA9:ƒ@öã,32 2““8b™“hih““ƒq*:@c3,qGkG ,::AqA@qA:@A::@q::@A@jAkGqGqAq„:@3A@9Ak@AkGAq@9:@k@AAj:A@õä2-ƒ2i“b9hcic“iqGGc8cc3 :@rGkAq9A@qƒA@:@@qAk@GkG9::@GkGAk@Aƒ:@Ak @3:9G@::qAAq:A@@ApƒAjA9õä(238i“i“bibch“qGqA39kGk:@:@qAAGkG3Apk@@ƒ:Gk33@A@kGqqGA@A@@3 @:ƒ:@:@:33:Gk@kAjGjAA9õã\ 2™“8bi“chch“GqqGkGqGkGAq::G9k3Aq:9432Ak q3 3AkGkGkq:@q:@:9@A2::9:@@::3:AqGkAFA@AjA9õâG,c23iqqA8cbcch:rGAk:AAqqAAq 9k 39:@A@@:c qGqGA@39:qGrAq3Gq3@AkA3…:@:A @@kGAjAkAkG@:2]cðã322“@AqG:@chcGAqqA„@2qG39:9 3@A9A@@AA9 @A@k@@-AA33AqAG9AqA qGq::Gƒ:9A@:q@@kGAFkFAk:]cc]ïâ2,39i@qAƒqA@cAq@Gk@:@:rGƒ:A@A@@ :@jA9:Aƒq6kA@;qGkGqA9Gq@kAqA@3Gq::@@A@A@G:@@3@AkG3AjAqA@@:9]9ccïãa3229kG™cGqA@A’cGqGq:@qAjA:Ajq@A-:@kAq4GkGqGAqApAqAqAq@:Aq AqAkGkA@:@A@qqAjA3:A:@:@GkGAq@49:Ac2-ðâbc33bAAq:“2qGk:9cqAqAqAA@Ak9A:GAkqk@A@A9AqGkGAAkGkGkG:@@3 jG:GkG@A@AjAkGkG9:Gk@qA::GkGkGkAA::23cðâ]283bqGq:qAAG:9cGqrA@kƒ@:9A9AGƒ: @kA9GkqGk…q1AqAqGqqAA@::qA9Gk@@3:9@AAqG@:@:@A@:qAq@qGq@A@3]2ðá ]2c2irqG4kƒqSG:@AqGk@:@A:9i™“93:@:Gq@:qGqqGAqBGqAG@AkGkqqGq:k:9@A@3@4AqqGkA@k@q::@qAqAkAq@9,9ñá)32c3GkGqGqAGkGAk@::GA@:kc’2™“8i:@A@qƒAqqGqqAjqqA:qGGkGkG3AA„: :9:GqqGk@:Aq@@AqGqAqAG@qA3@AjAïàD\c,3h qGqAkGkGq:A@:@:@“]8“2cci2i““i::G@kA@@qHqrAqGr@ :@AkGqHqGq@@A„:3 :Hq@A@AA:qAq:@AqGkAqGqA:3ïßF3cic8rqAqAGkGqrG:@3“29b8“cch2“i22bcc@kAGk@AqqGqGkG::qGkGqAAqkGk 3:9ƒ:@:39@AjAjAGk@A:qAqGk@kGA@ ïÞd]c]bcb:GqGqAqGqAqqA@:™ib238c829’™b922c@@:kGqqAqBqGrqGAqGqqGqqGrqGA@::9:9A@::93 qG@@Aj:AqGkG@qAkƒ@3 êÝo323b92@@:qA:AqAkAqGAk:@ ’ic““™cb“™“™22Ž@:@qGqHkAqqGkGqqAqAqkHqrG::39 @9:: 3A@:G::9Aqk2@::@@Aq@kGkA@k9:3::èÜq,2]b2:AA ::@AqGqGqqAqA:2cih“h™biG“™“™32cc:cqqAqGqAqGr kGrrGqGrqAk9:3 @:3 33@A:q:@AqAq:c@A@qqGAkAG@kA@ ::9:@:çÜr2 292933::9A@kAqAAqApAih“i“i“2cqG™™“hc“c::A@rqGrqqGqGqrGqAqAA@GGqq::rqGqA3@@:@AqAAqAj qkGkqAGqk@G@:939@:A@::æÛ 2-222:3@A@ƒ:93@:AqAƒ@\qqA“bi2822Gkq“ib8“A:A@qrGrqrGrkGrqGkGqGqAqqkGAq k@A@qGAGkGA@:AjGqGqAAqGGqAjAGkAk@3A:@@:A@9:åÙw2]2393:@:A9:@AqG39A@;GAk™““™2™3qAGqqi:@qG@A@kGqHq@:@AkHqGkqrGqAqGqqG3A9@AqAkAqAqk@q AqkGqAqkGAqGk@AqG@k@@:@k@AA:äØ232233ƒ::9:A3 ::GkAGk@93ƒ2Yh““83’2AkGkc@A@@j:AAjAq@:rGqqGkqGGkqGqAqAq4 AqAqAqGk@qAqGqq3GAqAqAqAkqGkGk@q9A@::@@3 jA ƒ@á×2cŽƒ2v 9::@@A@@:@A@:q@Aq:3iic™“8838i29:Gqqq:A:rqqGAqGrGqGqGkHqrGkGrAqH@::FkGk@AqAGkGAkGAAkGkG9AqGGkGqA@ @@3@A@A3A:@:Ak::áÖ8c322 3:9 @rkGkA:33:9AkGA“iib™“ib9\8“ccbAAGrAqGqGrqqGƒq rGkGqq:GqGƒqGkAG@@kAGkGkGk@k@AkGk@A@ƒ:AkAqGkGk:@A ::ƒ@ ::@3A@:: @ÞÖ 33]233 3AjAGkGqq @@ 3 39G,2ƒc%3:: 39: 33:9AAkqrGqGrGqHqqHkGr@:AqBqHƒq-::AAq@A@qGqAGk@@kGApk@9:FA@qGkGkG:@jA9:@kAk@Aƒ@A@ 9A@ÝÕ\2]2c k3 9AAqkG@ qqAq:@A@::@ AG:9:@@:@:3:@Gq:GqGrqGrGkrGrGqqGqGr:qr@AqGAqA:@:q 9AqkGkG@qAƒ@AqGƒ:@A:kGkGk9 A@::@A@9@:Aj;jAj 94@ÜÓ2]c2]cb @:3@AjAq 3 kqrr@AApqGq@AqkqrGqHqGqHkGqGrqHƒq:GqrqrqGrqqHq:qAqrGqr9GqAkG@:: 3qGkGAkGkAqA:kGqkH@::jAGkG@ ƒ: 9A:9AjA@:ƒ@A@A@@3 ÛÓy2]9,2 A9:@AA@9 qq@Aq@:qGqHkGqqHqGqAqrqrAqGrqGrqGqHqGqGrxqrGqAqA@AGqAA@:kqqGqq@:qAkA@qGkGqAp:@kGqq@9:A@qG@3:99:3 3@4@A@kA3@A933@@3@ÚÓ_2332c:3:@A3@:GkrH@A9GqAqq:qGrqGqqGrqGqAGqAqGqAqrqHqrqHqqHGqrGq;@3AkApAk:GGrqHqqA@cAGqAkGqGkGAƒ:&GAqAG9Ak:@:3 :@A@:@ 9:@A@AA33 @@AA@ :ÙÓy32329293G@@3@@qA@qG9qGlGqHqArqGqAq:qGrqrrqrqrqGqGqHqqHqrHqqr@qGq::9:A@2AqGqrGA:@99Aq@qGkGj@@GqA:A@k@3::: @@A@@AjA@AjkAp@9:@A:3@A3ØÒWc323,2 qkq: AqAjAqAkGqGkGqrGAqGqrGrHqrGrMrwHqAkGrqr@rqHwqxr@:GkA” 9::9:3323@rqrq@qq k:ƒA(qqGk9AkAj@kA@@ @:@@3@A3:A::@A@::Aq:AA3ƒ@3A::ØÒc,3ƒ2[qA:Gq @kGk@AqAGkqGqrAGqqAqGqGqqrGxqrGqqHqAqrMr:GrqrHq@A:c A9AAGk::@3]2ŽGrGq:Gk c99qqGrA9::Aƒ@:GkqA3@@:9 ::9ƒ@ j@:9:3@@A@A@ƒ:A::9 ×ÓH23,2 G39::@:@k@:@Aq@qHkG@kqGqGrkrqHqrwrGrqHq:@@rqr@@9rGqqr qA@3GkG3qGA@@ƒc53AqrGrq kGGqA3GAkGkA@kGkGq :A@3@::AkAkAA@A:@A@k@@kƒ@:@@ƒ:×Ñm2,3,3:3::9:AA:AAqGkAqqGkqAGqAqGqGqqHqHqrqGr: qGq qA:9rGr @k3Gk@3AqA:c]cc9AGqGq3@3AqAkGAqApAqA@kG@qG4@@ƒ:G9A@G@kAj@::@@Aj„:93@@k 3ØÑ33ƒ2D:::@9 :@:q@@qqGk:AAqAqAAkGqrGrGrqGqGrq qGqqA9AqA:rqGjA9::AkGA@@A@]„c4]c kAqqH:9: AqAqkFkGk@q@A@kA:9A@AAk9 3@kAFk@:@::@A9ƒ: ;@::ØÐy2,2839::9 jAkFAqrG::G@qAG@Aq@qAqGkAqGrqrGqA@@A:r@AqA@9 qGqA@::99@Aj ::@Žc323:9AGkG@;939@qAGkA@GAAk@AAq:@kk9Ak@A::@ @:9A@::3:9ƒ:99 9:ØÏ!]c32,92 3:3AA@@qqH@@:AjGAj:kGkAqƒrqqrqGqrƒ@\A:@qA@kG9@qGkG:@A9:3 9 3@@932-93GqGk@qH9: qGqAGkq:G@k@@:9:@A9:@AGk@k:: 3 @Aj: 9:9:@@4 ÛÏ=23,,39 @:@kA@::@k@qGA@@AqAqqGrGwHqHqrrGrAA@jqqG@@A9::3::9„:G3 @@ 3 kGkGA jGkqqH@rqG3::AqAjGA9kAG3@@3:@A:@AjA@:G@3@::94 9: 3::ÝÏ9232 :@:Ak@@A@@AkAAjAjAkGqrGAjGrqxqNqGrwAq:GArqA@qA@A9ƒ:43 393qk 3@:AAqAqAkqAAq qkqGrq :AqAqAqk:Fk @;AA9:@@…:9A3 3 :3 @@:9:99ÝÎ]3,2 33:@::9:@A@kkGƒ@AkGqqGqA@kAqqGqrqrqGr@k93@A@:kƒ:13GqAq:@:qAGqAq 3GjAGjA3GjA :GqGqHqkGqGkGG:@A2ƒqA:@A3A9:9:9:9:::9A@3:: ::9ÞÍ 32-223 :9„:m@Aqk@A@AjkGkqHkAGkqGxGrGAqHwHqx 3: ::9@@::@GqGAG:: @@qAqGqA@kGkqGqAqAqq:9AAkqGrAq9::9k@:A:@AGkG:3 qA ::Aƒ: 9:3 933 9 :ÞÌ022,23 99 9::G@kG@A@jAGkGGqAGkqGqrqqrGqAqAqrqxGƒqW :3 ::9:AkG::qkAk@qGkGk@@:A@:qGqHA9:AqAAqqG3 9:3A@@:AkGk9@ q9 A2:@:@@ :@A:: : 9:ÞË93c33823 339:AF@A@@::qAkGkqGkqGAqGqHqHqAqGkGqGrqqHqGqAq3ƒ:?@:qqAkGqAGrkGqA3 k9kG::GkqG@:AFkGAkG3kG:::A9@@:@AA:@Aj:3@ƒ: 39A9 @@9: 94ÞË:232]233 ::A@kAjAkqAqAqGqG4GqqAqrrqrGqGkGkGkGAqHqqHqAqqG@…:IAqGkAG3 @:@AkAG@AAqGqkGAjA::qAqqGqGqGqk9Aq ::@AjG,AA3:@3A9 @ @:94@ƒ:ÞË+]232c2 3:@@Aq@:qAA@AqqrGkGqqAAqxGrGqrqrqrGƒq:GAqqHqqAqGqAqGq:9:AkFqk9A:@Aj::@j 9A:9:Gk@:GqGkGqk qA A†@3:@@:9:3 Aj 3@A29:@ @: ÞÉs,, ,2233::@Ak@@3GqqAqr@GkA:qGrqxGqrqxGrGxqrGrGqqAAjGr AqAA@q @A@@:qrqGGqA@k@:GqqHqA9@A:@qGqqGA3GqGA:A2Aj:AkA:k ƒ@: : :@@:A@:3 3:k:@3ÞÊ 3c223 9 9:@Aƒ@n;@AqG@@AAqGkGrqHqAqGrGqqGrqHqqGrAqGkAAqqA@@kqrGq@@::AAqqAq39A@@qGkqrGkG@:A@qH3@:q4GkqAqA@:@AjGkA@q :@;99:@3:93ƒ:@„3 3@:ßÊy3\22 3@:: @:k:@A@AkAjAjGqGkGq qqArqGrGrqGqHqqGqAqGk@G@@eGqHqqArqGq:GqAq GqAAkAGqGqAqAq:qAk9 q::@:GkA@::AqA@3G@kA2 3 9 ƒ:::êÈ92323233:@k@@A@k@k@AAqrGkGqAqqHqGqGrqrqHrqqHqrqrGqGkqAƒ@#kqGqqGqkGqAqAqrGkqGAqAqHqAq 3@A9A93ƒ:@@:3Gj::qAkGqqAq@A@@:: @ ::ìÇy223,23 ::3@@AAjA@kGrqqGqGqAqqAqGrqrqGrMrqqHqqHqHqrGqrGqkAAGqHqHkHqAq3kAqGqGqq@@::A@rqGq::@A99A@A @A9GqG:GjG@AkGAk@A:@@::ðÇy,c]c3 :3::AkAjA@@qGrqGGqGkGqGrGkrG3GrqrqxGrqNqqrqxqGrGqHqAkAqkGq@@ 3GqG:GAkGrAqAq:@qA@rG::9::AkAk@kA:qkq:GkqA@3@@kAjA@@3@ïÈc323239ƒ:+@G@A@@rqAqGqAqkGrqrqrqGGqrqHqNrqrGqrrMrGrqr„qGqGkAGA@;qqrrGƒq3AqqGqAkAqG:q@A@:A:@GkGjA@A93AqGGq:@@GqAqGk@@@k9 2ïÈvc329 :::3@:kAqGkAqAkGrrqrGrGqHqrAqxrwrqNqxrMrqrqGrGGrHqrAkFk@kAj@GqrGkGqGqHqqGqrGqqA@3kA@3::q@:@Aq qApAqkGqAqAqGqAqGƒ:A@@3 îÇ3,3ƒ2y3:::@@AFkAqGAqqGqqGqGrqrGrqqGGAqHqxqGqGrqHwrqGrqqGrqGqGqqGqA@AqGqHqrAqA:4AGqqGk@A9A@@: :@:A@kGkG@A9HqAq:GkAqGAkAq9::A9 ,2êÆy23c,323:9@:@:kAApAk@rHqHqrGrqGrwrGrqrqGrwHqrqrGqrGrGrqHqqGrqGrGrqGrqAqqAqGqG39Gq@kAG4:A3 @k@:Ak@@A3::qqAkA:AqG:kGqAkGqA GAqA@A932-2éÇ2322 …:y@A@ApAAqGqqGqqHqGqrxGrqxrGqrqqHqGqHqqGqrwrqHqrGqGrqqrGrqGqqHAqAkAqrHqGqGq::@@3 ::@k@AA@kG:@: AqG::q3:@A39AqAqjGkG9A3c3232,çÇy233299::@:@A:@AqGkGArGkGqqrrGrqGrGxqHqGGqrrqrHrqHqrMrqwHqrqGqAqqGrqHkq@@A@:GqrqrA39:: 3 @@3 GjA@:93@:A@@q@k@9 :: 3 A9GqAG kG:@:@:]32]ƒ3æÆ2Ž232 :@ƒ: AjAjAqAqAƒqYHqrGrwrqGxqrGqqHqrqrMrwqxqrwHqrGrqqHqrGrGrqGqGqGkA:@@AqGrG33 3::@3 Ak@3A@:qAj:Gq ::9:…@kAqAqAjA::9:323]22æÅH,323233::::@A9A@qAqAqGqrqHqqHwHqrxqrGrwqGrrqrHrGxGrqrwGqHqrGrqrqGrGkGkHƒq9rqqAq9:: 9:: 33  3 k@Gk ::@AAq: 3 ::@ -G9A9 @A9::943ƒc ,-223,2ÞÆi23,22:@::9GkA@kAGkGqrGqHqGrqrqrGrMrqGArqHwHwqxqrqrMrqrGqrGrqGqHqqrGqGqrGrqGrq::@@::@3333 3 9AkG A@:Aƒ:qGq@ƒqAqGk3 jA@:: 3c,233]23],àÅ23232: :@9:@AFkA@qAqqHqGƒqwrwHwGrwrqHqqGkHqrqrNkGqHqrGrqrGqxqHqrqHqGrkqGrqNrq@ :@ 3::3:93: 39 A2kAjA@393kAAqqAAqHqGqGqAA@kG:3:@3]3\323cc22323ÝÄ Ž3233 @„:K@A@qGkGqGqqArHqHqrrqrHwrqrGkGwrwHwrqGrxqxrMrGrqHqGqGrqHqrGrGqGqGAA :: 9:3ƒ:7 9 3 39AAqAj9:AqGkq::@A@kqAqAkGk@@A333232]cc,33]23,ÞÅ23,3299:::@AjAAjGkGkGrƒqpGrxqNqxqrGrqGqrrwrrMrqrMrqxrqqrGqrqrqGqrqxqrqHq:9 993:9:@:@ :: @ 3 :9A@G:3Ak@@Gq:9 @39AAqAqA@q:A@3 2232323ƒ2323ßÅy32322 ::9 :k@GkGA@qGqAGrHqqGrqrGrGqNqGxrGrGrMrrwHxqrNqrNqrwrGqHqrGxGrGqGq4 :943::@ @:@ :: 3 3 3 3A93:@@AqA:q3 3:@@qAA@qA@AjA::9-,332332-àÃy,2323239:9::@AjGkqGkqGqkGqrGrqN@rwrxqrqGqrqxqrwrGrqrwrGrqGrGrqHqGrqqrqHq43 9:: @A:@@3::@399:: 9333@@A@k@@k9k@@ 3GA:@k@3G@@A@9AG3232c]c]23áÄy323]8834::@:Aq@AqAqAArGkGqrGqrqA@qHqrGrqGrGrGxr@@rwHrqxqxGqrMrqqrGrGrMq 3::99:@3::@ 9::@:: 3@3 9 3 A@k@AA@A@3A@3 3k@:AGA:k@k:9 jc]c]ƒc]cãÅV”\3b3 9:@@:9AAqA9Aq@qAqAqGrxGrwrrGqHwrGkqxqxrGrrwrwrNqHqrqrqrMrGxqrq3 3 9 3::@: 9:@ƒ:+@:@: @3 3 39::@kAkA9@AkGqG:@k@jG::G: ::ƒc]c-äÄ2ƒ3@8b3 @@:@:@@qAqqAqGqGkqr@qrqHqqGkqrGrqHqHqxrwrHqHqrxqxHwHwrqrqrM „:C 3 @939:@3@:@ @:@ :93 3:3 3 3:Aq@Gq@::AqGrqGkGkG:q@3::c]c32,åÅy2]2c83:@A@A:AAkGqHqGrkGqGqHqHqqHqrGrwrwHqrqxGr@xqxrxqHrqxrqHqHqGr:: :3 ::3: ::@:@::@ ::@3@: :9 : 9 39 3A3@@:@@3GkAGq@A@kGA@::3b]c323ãÄJ,3238399:Aj:@@qAqGrqGqrGrGqrqGqrMrGqrHqrGqHrxqAqxHwrwrGqrMrwrqN@3@9:@:3@@…:1@:@:@:@::3 @@:@@:3 : 33 3 :93AA:qA9:AqAqAqA9:@@ƒ:9cc]c]2æÄ3]2c83ƒ: @AAjA@AqqAqrAƒq'GrGqGrqrqGrwrqqxqxqxAxrqxqHrwrwHrqrMr:@ƒ:F9:@@:@@:9:@:@ :@: @@:@:A::@:: 39 9 339:9::@qAq AqAqAqAq::A@k9A:3c233‡,]ÜÄy232]2c :9:9AqA@k@qGqGqGrGrqqrqAqNqGkqHwHqHqHxqqHwrHxqxGrrwrxq:@::@@:@::@:@ :@:@:3@:@34@@:@:3@A:@:3 3:3 :3@A@AA9k@GkG:„@ k:@G:92323çÅB2338b::::@Aq@A@AkGkHqqrGArGrAqrrqGrqrxrGqxqrGxrwrqxqrxGrw:@::@::@ƒ:@„:@3@::@ 3ƒ: @::33@@ :@ƒ:%33 3::@::@:k@k@AqG:3:@@;9kGk ::2èÄ9,Ž2]989:@::9AAkGjAAqGqrGqrGqxqGqxGrrGxqHwkGrxr@rqNqxHrMrx„:B@::@:@ @@:@3:@:@:@@ :@:@:@@ 9::@::@:@ 93: 3@:3::39@AA9AqkG @AkG3:„@33,éÅ2322] ƒ:5@:9AFkA@qAqAqrGqGqHqrGrwrwGrxqrGqGrw@xrrxqrwA@:@:@::@ƒ:@:@:A@33::@:@::@:@@„:- :@ :@3@::9 9 3:@:A: :@@kGA@@3@jAq9A:A@A33êÄ2]382 9@9A@:Aƒq&AAkAqGrqGkrqGrqGrHqrGqxrGrqrGkNqxGrxr@ƒ:@@:@::@:@:@:@:@@:@@: :@@A3:@::@ @:@3: ::9::3@ 3@ @:@Aj@@kA@k@k@:Gƒ: k:@:@3 2êÄD,323292 ::A@:9:AGqqA@qqGqHqGrqxGqrwrGqrGxAqrwrqrqrxq@::@:@::@:@::@:@ƒ: @;@A::@ ::@:@ƒ:.@:9:: :@:@9: 3 9 39A@@A3@@::GqGkA9:9A::@A3ëÄ<32323239A:@:GA::qAGkAGkHqqGqrGrqHqrwqHqrq@rMrNqHwH:@:@::@9:@ƒ:„: 3@:@@: 3::39ƒ:1@@:9: @:@:3@: :: 9 3 :94@A@A@3@@:qAqAqAk:@:@A@3ìÅ622]839:9::qq9:GqqGjGqAqrqGqqrxqGqH@rxqxrqrqrxq@:@:@:@ƒ:@:@:@:@:ƒ@ 9:4:@9:@:@„:0: @:@3@::9:@@: 3 9 33@d@A3:A@3GA@9:@ q@:@j : ëÆ723329 :9::GA@A:AqGqAk@GrGrAGqHqGrqA@rGqHwHw:: @:@:::9„:@ƒ:@…:@:@ƒ:@::@::9:@@3::9ƒ:@…: 99 :3::3A@A@9 :9 -@4@A34@:A 9ëÆ0,32383:@:@k:q:9qHkGr@qArqqGqqHqrqrqqHqrqr@::@3@†:ƒ@I::@:?::@:@:@::@:9:@4@::@ 3:::@:::A 9:@: @: 3@@ 9:: 39: :A@@9: 99@A, -ëÇ]2323:9:@@:@qG:GƒqGrGqqGqBqr@rGq xrqGƒ@ ::@: @:@:@:@ƒ: @:@:@::@:@„:@ƒ:8@:: :@::3@: @:939:@::@9:@:@3A@4:@@3:49:3@A@3 : @A ëÇ2c29 :@@:@A@qA:AqHAƒq)ArGqqGqrqrG3Gx:@::@:@:@3::@::@:@:@:@:@::@ƒ:@9::@9:: 3::@3:@:@:3 @ A @@„: ƒ: ƒ@:A3: 9 94 :k:39@:k@3ëÆC2-32239:A:@:@Aq@A:qqGrGqGq:HqGrGxq ::@:@@;:@: ::@:@::9:@::@:@:@:@:@ƒ:=@:@ @:@ 9:3:@:@ :@::3@::3@::39:9:9:A@A:9A:@: 3 3@9: @:A@ ::ëÇ;23229::@:A::@:qkG:AqGrqAr@qrqrq: 9@@:@:@@::@3:9:@:@:@::@::@ƒ:@:@::@ƒ::@3::3: @: @:9:: @: @@ : @3@::9::j@@:@@4:9 3::3A3@@- @ìÈ&3232 :@j@:A@AqG@@rqqHqA@qH 9@@ ::@:@ƒ:E@::@:@:@::@:@:@:@:@:@::@::9@:@ @ :@:@3@A:@:3@:3 :93 3 3::9@:AA@:@ƒ:9 3@: 9@A@A3 9 ëÇ!22322 39:AA@:jAGk@:qArqG@;9AA:9…:@::9:ƒ:@::@:@„: @::@:@:@@ƒ:<@:@:@3:9 @ :@:3@:@ @:@3 @: 9 3::::9@jA:A@9 3 3A9 :9A@3 9ëÈ-2322::ƒ@:A:@qAqA@qG@AjA@::@@33@:@9:@::@3::@:@:@::@@:@::@::@4@:@:@…:7 9 :@3::@@:@:@:@::@:9 3 9 :3@@3A@:@jA33@3 933: j: :3ëÇ=223223 9::@k::qG33 3@A3@::@39 @::@:@:@ :@::@::@::@::@@:@ƒ:9:@ƒ:(@@9@ ::@::@ 9::@:A3@:3@:@::9 3 3A@A@k@ƒ:@: 3: 3 9 3 39@ìÈ -,323@::9ƒ 39A 3 3:9::9:: 3@:93:@ƒ:X@ :9:@:@:@:@:@:@::@:@@::@:@:@: :@3:@:3@:@:A::@@39:@ @:@: 9 39 99A@A@:@9 9 3: 9:33  3 ìÉ>2322 4 :3 93 Aq@ 3 @9: :93A9 :@@::@::@:@::@::@::@:@:@:@„:@::@:@ @:@ :@:@:@ 3@ 9: @::@ƒ: : @:@j:@4@:4 3 3 :3 3ìÉ3,3233993 3 3 jA3 @: 3 9ƒ@::„:@ƒ:@:@:@::@::@:@:@:@ƒ:@@:@:@:@::3:@:3:@:@::@ @::@:@A3@:9 9 3jA:3A@@3:3 9:3 3 @: 33ìÉ92322 3 : 33 :9 3:9A3@:@3:A- :9:@::@:::@:@::@:@:@:@:@ƒ:C::@:@: :@@3@:@@:@:@3@:33::@:3:: : @:3 3@@3:@;@: @:3 :33 33 :ìÊy23232 3 33 9 3: 3 :@9:9:@9 : :@@9:@3:@::@:@::@:@::@:@::@:@:@:@:@A :@:@:@:@ @@ @: :@ :@:@3 9 3 3 @3::@A39@3:9 3 9 3 9 íÊy, 232 3 9 3 : :3 @AA,49 3: 93:@3 9:3 9:@:@:@:@:@:@:@ :@::@:@ 3 :@:93:@:A:A3::@3:@3 3@: @::93: 33:3:: 33 9:349 3: 3:íÌ:2323 933 9 3 33:@943A3:9 9 :9 ::@99:@:@::@:@:@: @:@:@ƒ:> :@:@:3:@::@:@:@ :: @:@ 9 939 @:@: 3@;@A@k3: :9 39 9 9íÌ3,322 3 3 339 3 33 A9: 3:3:@:9::@::@:@:@:@: ƒ:@:@:@@:@ƒ::@:@::@:@:@:@3@:@:A@949 :@:A@4:3 @AjA@:39 3 93 3949 :: íË7,,32 3 3 9999:33@A33 9:: 39@::@ 9::@:@:@:93@:@ƒ::@::@:@:@:@:@:@:@::@::@:@:@3 : 3@:9:3@@ :39:@A@@3 :9: :: 9ƒ :3 íÍ ƒ2 3 9 3 : 399:@A3A@3:-9 9:3@ 49ƒ: :@ ƒ:A@A:@:@:@:@ 3:@:@…:5@:@:@A9::@3:@::3@::9: 3:@@A9 3:@A:@A@3: 39 3399 îÌ/,32 33 9:9 4 3@ @k 9 @ ::3A@3 :@9: 33ƒ:@::@:@ƒ:0@::@:@:@:@:: :@:: : @@:3:: : @3@@:: 33@A@:j@3@„: 9: 9 :: îÍ*,232 3 33 9 9 99A@493 3A3:@ 3 9:9:::@ƒ:9::@:@:@:@:@:9:@:: 2ƒ:+@ 3 ::::9::A 9 9:@: : 933 9A:@4@49:9 @ „3 3 3îÍC,23 9 3 93: @@9:33@33:3@: 3 :@:9@:@:@::@::@:@@:3:9:::@ :@:@ƒ:+@:@::@@::@ 9:@:A3@:3:@@: 39 39@ @A@@ 93:ƒ 3 3:îσ2- 33 3  3; 9 9:@9A: 3: @@ :9:@:@:@:@::@„:@:@ƒ:@::@::@:@:: ::@39:@:@@:@:3:@@Aƒ:3@ 9 4:@9A@A:2 39„3ïÑK32 9 333:3@3A 3@ 3: 3@: 9:@:A3 3A::@:@:@:@ 94@@A:@ :@:: :@9 @:@:9 @@„:9::@@::@@:9 93 :9:3@:j:9 39‡3ïÑ)223 33 3 9:@ 3@3 A3 9@A3: 3@3 9: 3::9ƒ: @„:%@3:: :@9::@:@::@::@: 3::@::@:@::@:@:A† 399::A@:9  † ðÏV222 9 9 3 9:A@ A@k@@:949@: 33@ 39 :9:33 9 ::@:@::@::9@:@@:@::@ :@:9 2 @@4:@:A::@:‰ 93@:9:@ :: ‡ ðÒM 223 :9 9 3@A:2A:@3 @A 39@ 3 :: 3 9:@:@:39:9:@:@:: 9::@::@::@3::@@:@:@: 9:@:ƒ@Œ3:@3AAƒ:9ˆðÓ23 3: 3 3 j: 39:: A2@3 3A39ƒ:9 „:@@:9„:@@:@ƒ:@ ::@:@:@::@:@: 333:@Ž@A@ˆøÓƒ2 3 3 3ƒ 9:: 9A2 A33A 3:39 9 ƒ@:@ 3: 33@::@::@:3ƒ:@ƒ:9: :@::ƒ@::øžÓ(323 39 33 :9:@:9:@3 9 @333A@@4@3:@A:ƒ@:33::@:@ 9 9::99:@:@::@:@:Aø Ò 2,329 3 3 3 3 :A@A 9:A3@A@:93@ƒ: :9:@:@::@::@ƒ:@„:@:@: ::@9 3::@:ø¡Ô$]223 3 2 39:9@3: @ 3@3 :@@49:9:9„: @A:@ 3 9ƒ: 9:94 3:@ƒ:@:@ø£Ö2 3 3 9ƒ @ :A9 A3:@A934@9A::3@:3@9::@@Aƒ@::9:@:3 :@:@9 ::@:@ø¤Õ3232 93 33 3 39@ :3 @Aƒ@::@ :@3@:@::@;:: „: 9 ::@: 39@:ø¥Ø>223 3 33: 3@ A93 9 jA33::9::93:9A ::@:@3::999 @3:9::@:@:ø¦Ö*229 3 3 3 3 :AAj33A@@: 9:::::3@33ƒ:@@…: @:@: :@::@ø¨×3ƒ2'9 3 39:2 A94:9:A@@::::9 : @ 9:3@:9…: 3::@:9 9:@:ø©Ù'2329 3 3 3 :3@ 9A@::3939:@9:9493: ƒ:@  9 9::9::@::øªØ223 9 3 93 39 9A9:Aƒ:@ 3 9:3:::3@ :93 9: : 9:9ø«Ù-ƒ2933 3 3 @9A3 349@„: : 9:3:9::@9 3: 9 9 @::ø¬Û 32 3 ::33 ::9A@:9:499 9:39ƒ 3::9 ::9:@ 39:@:ø­Û*2232 93 9 3 , 9::3A3 999 9 ::9:3 9:@33ƒ 9 9ƒ:ø®Ü13,2 3 3 393 : 9: :949:3:3 9 3:4@ A@@::9:@:ø¯Û),323 33 ::3 3 :9@39 :9 ::9: 33:4@ƒ:9 4:ø°Û032-22 3 29 : 3 :3::93:: 3: 34:9 ::93@: ::@@ø±Ý,32 3 :9 9 :3 9A@@99:ƒ: 99 : 9:3:9:9::ø±Þ,322 3 3: :G:9AA::49 99 ::93349:: 3:ø²Þ2-ƒ2 33 39 2Ak@ 3:9„: 94 9 :9 @ : 3 39:ø²ß+-22 33 : :@q:9 :93:9:9: 9:99:3 3 99ø²ß2,32 : 39::AA939:::::ƒ: : 39 3 3 ø²á,2-23 9 3 933  949;9:9:@3 9:9 3 9 : ø¯à.3222:9 3 9433A@ 9A33 3 9 39: 3 39 3:ø®á-, ,2 2 :9 39 9:9 @A3:@:3 :3 9 : 93 3::ø®â*232 : 3 9 39 ::9 : 3 3 39: 3:9ƒ ø­ã,-,2-9@3ƒ:9 ƒ:39:9:9 9 :93 :93ø­âc23,, 3 9 : @A3ƒ:99:: ::3:9 99:33:ø¬ã]9,3222: 33@: 9ƒ:9;: :9::9::93ø°Ý,2„3232cc323 3::9:@9 :3Š  3ø±Ü!23]22,23c3c3,22 :: :@@:9:ø¿Ûc2323ƒ32]]c],33b29 :93@ 3 : ø¿Üc3,c]]2c3cc,2-„ 23 :39:9ø¿Þ ,3c323]cc23232 , 3 33ø¾à c232]c,2cc,332,22 9 9 3: ø¼á!,332cc]3c2]c3,3223 3 :23øºá32]3c23c2c32329c2ƒ23 93 ø¹á 3]93]2c3,„ Ž3c\323238ƒ 3ø¹â 22\32],c… “33233]ƒ2cø¾å3233]9„32ƒ “]32]c2828ø¼å32]c]Œ2,3c3,3ø¿æƒcŽ3223cø¾ç]c’ccø¿øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ¬2œ /œJSËœJS-ægÉæg2ég /ésI˜ËésI˜-3 É3 26 /6H‰Ë6H‰-~ É~ 2  ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø223\ø¼ø22]22ƒcø»ö ]c3329“8ch33Š2ø¯ö23\9bi2c83b]23ˆcø¯ö3cb9“28“8chc]ˆž23øõ ,2ci2cbc28ƒc]‡Ž232”,32]22øŽõ32]2,i“8cb9cbccb‡ c“ cc2-2cc…,,† 232]3223ø‹õ23““™“28ch“83]ƒ'2-2c]c]@@A39AA2233]22]3223]c]c3]23øŠõ,c23“™™“™i2cb9bƒc]…323]c :kA3k9::@:@3c2ƒ2 ]]c3c]23\3\3ø‰ö2ib“™˜“cb9“bccc32ƒc3]29 kƒ@:AA@A@ƒ:q :A93]c3c]c]cc]c332::ø‡ó@2Ž™™i“™“™ib8c9]c]3232,ccA3 @@A@@k9AqAqGqAqA::cc3c]29A@99:ƒ@ø†óD,c™“™’™“h“cb2bcc3]23232c]c:qAq3 @q@AqAqAq:@A@@c23@: A@AA9A@A@ø…óE,3hc™“™™“ibcci9]3]2,32]33j9A:: @@AAkA@kGkGkG3k@k@@3]:@Aj@@:: j::ø„òG3, hc“™“™“™hc8ih“c23233c2A:9:AjA@jA@:GkGkGqAq @94:9AAk@Ak3A@k@@;@@:øƒñ 222“ihb„™9Žcbci2]3232] 3:9:A::G@4A@k@k@AqAqAA3AA@A9:@A@3 :9A@@:@4ƒ@øñ;,3,8“c8c™’™ccbi2323 3:@:@@:9@k@qAqAG@99AApA:@:k@A@9kƒ@ @@A33@@A:@:øòE,ccib2cbc™™j]8““2”3239AG@3:@::@A:AjGq9:AG:qA:k@:A@@kA@:@;::3A@:@„: øð 2”c’icb9bƒ“cd8i283]2]:9kƒ:,@@:@qGqAqAAkqAqAk:@@kA@@A::@:@:9A:@kA@A:÷ð"2-c2chcibo“icŽ“cc“ib3@A@:A3GA9Aƒ:)@AAqAk@AGkG@qA9::@qA@:@kAjA@AA@@;@@Aj@:9 öï&c32ib32i2ci’bcdccbih3@jA@G@k@3:@Aqƒ@&kGAq@kGkGkG3::Gqq j;Fk:@Aj:kk@@k@Aq:9 öîQcc2ci“8b“™bic9b”cŽci“c\3A@::93AGqA@qAdGqAqAqAqGqAkG@:qA:: @A@99 k@@3::@A@A:9 õî ]2-9bi“b9ƒ“Dhbc88Žccchii3q:93AAqA@k@:GkGkGAq@AjAG@qAA3k33@AA:AkG3AA@A:@k@A3 õî232b™™22™“™™“™i“c@@”““i]h3GƒA2GjA:@A@AkAq:@k@AqA:kAqAq9:G:9A@:9AjGAq@AjAj:@A@@:õîR32c23“™29’i“h“™Gk@A:Ž22ccGkqApAk@:kGj@A@q:GqAkkFApAG:@:A9 @@::A@kFk:@:@A@@k:9:ôìc23i™ƒ“J8cbi“i“qGk::“c”2cb@@A:@Aq@q::@qA@:qGqAqGkG@AkGkGq 3k@@kGkGAGA@AA@@k:@ 3ôìU]“3™“˜b@ib9bch“GkGqbc3]2 : 3 @@A3@A3 GkAGk@AGkG:GkGkA@jGk::@AGkA@@k@@jAj@k@:AA@3óìJ32322qGqGAbc8ci’GqAG “ k@@:qAqAjA:9:A@@kGq:@qGkqAqApA@A:@ qGjAq3:@A@:AjƒAjA@kƒ@A9òì73]bcAqBqq:8cb“iqGqk@kGkGqA::@AjA3@GA@jA@AkG:qA9AqGkAAjƒ@k@qAAGG39A@kGApAA@A@:@d:9òë3c2383GqGchAA@ibGqAqGA@AqAqA@@:q@A@A@j@AA@:@Aq:@A:@Aƒ@!kGkq qAqq:kGAA9kA:9Ak@@:2A@::òë,3\99Aq3“iqq:AikAAqqA:qAqAqAk@:@ ,: k@3:@jƒA(j:AjAkA@qAGqAqAG:@@k@qGAj: 9:GkAkA@A@:3òê>3c839qHq 2Gr@@3qqGk:9:@@q 9:9@::@@ :9A@:qG:@@k@GqA :A@kqAqAƒ@A:@@kq @: 9AAj@AFk@:A@@:ñé2]2b qGq39qGeA9qGkG:@„A#9:AGAAk@3::@@A:: kG:@:AqkG3@@AGkGjƒ:j@:A@A3 2AA99A:@qAq@@A:9ñè\3ccc9BqGqGkqGqG4cAqqGAk@k@:9::kG@@: A@kGkGjGkGkA@::9Gk:3Gk@A@q:@ @k9:@3 kA@A@q@:3GAd@@3ðç2c]2c GkGkGkGAqqGkFAAqqAƒ@@A9@:qqkG::qAAq3GAkGk@@k@AqA@G:@ kG@AAj:9@: A@@ApA3qAqA@Ak@3::9 ðæ^]32b92,83GkGAkAqAqAAkApAGkGjAk@:\8q@@:@ jApA:AqqGAqGq@A@kGk@@kk@k @@4@@94@:@@:qGAk@@:9A:A:ðåƒ2J9,@A3GqGk@AqAqGq:9@A:@kA@Ab““8cc:Ž@:@: k@A@qGqqAqAqAqA@AjG::A3Aq:@A@A:9ƒ:A@:39kƒA@@:9:9ïãP,323,™:A@3 ::@kG@qGkGq:cbi™““™2i™29bŽ“cŽ:@AAq:qAGkGkGkGAqqAqAqA9 AkG9:qAqk@@:ƒ@ ::A3:AjG@@A„:ïá_232,22c3 3 @A@kGkGqAA9422c88“™2bc™22”cc::qq@A@@:qGqGqAq@qGkAqAq:@3AA3AGkG9:@A@:@:9@::@AqAj„@9ïàM,cc,38c 9::@:9 3@@kA@kA@A3i283“ib9bii“8ccŽ@@GqkAqAqrGkGkAqGr:9GAqAkG3FAq@ƒ:@A:@A@::AAGqAk@A:k@A:ïß^cŽ8322 39:: 3 :9: :9@AAjA:9ci2b2bc83’i“bicA@A3AqqGq:GkGkG@:3GqAq@AqAFk k@:@A@A@qk:A3:@:k@A„@:@;ðÝg23]282 39::9:qG@:: 3@:Ak@@A@:hcii“ic““™“cc] j:9:GrGqG:qGkG:AqGAqAq@:qAq:A@A@@3A@qGAjA9 9A@@AjAAk@@ðÜ 2322329ƒ:' AAqAkGA@:@:qA@9A:@kG@“i“2c’iG’™bcc3@„:2@qAqA@kGkGkAqAkGA:qAqA9@k@4@::@AqqG:3AkG:A@jA:@3ïÙj23]c233:: :@@kGqAkq: :@3 kA99Aqc’i2ihqqG“Žcc:@:@@GqHqrqGk qAqGqqApAqGqGk:@@:9@::qqAqqA@:q9::jA@A@ƒ:îÙ']cc]29b @A @@AkAqA@3GkqqGA:@@9 q““hi“ƒ2CikGkG82cc@AjG:@:AqqGrqGqAqAqGAqAqqG:9 :A: ::@GrGA@k:G9::GA@k@@3 :îØS323]23b839:@:k@@93GqAAGqrGk@AA@q:A@AqA9  9:AkG3“@kGk:@:AjAAqGq::@AqqrAq:@A::A:39ƒ:3 93::qA@A@kG:Aq@9Ak@A9îØ232338c2:9::Ak@ :@AGqr@kq@ 3G„qNHq@AqqrG:qAqA9 33AA@kA@qAqGqAA:qHqA@AqGjGA@@qqAAG3@:@9:::93AjAGk9GkqAqGA@@ cí×2-23„2E99A@q@:@qGkAqr:9GqGqqGq;GkGAqrG@qqAqGqAqGqq9:@AAqGkGqqGqqGqkGkAGkkƒA qjGA:@:@@A:9:3 3@AqAGqA@kA@kcíØ9c3]3293G49Gk@:@Aqq@@A9GAqArAqBqqrqrqGAqqHqGqAqGkAGAqGkqkGƒqAkAkGkGqAqA@qqGkGkFAqA3„ :@A@:@:GqqAq@@:AqAj@A3îÖ23„2b q94@ 9AA@A::@kAqAqGqqrqHA@GqGqAqGqrqrAqAAjqGkGqGqAkHqGqGAqrGqAGqr@AqAqqAqAq 2@qkAk:9A@;qAAqAk::@ƒA@kAî×p3]2323G3::@:A::@jAkGkGA@qrq:@AGqqAAqqHqArqHqrqHqqHqAqGrAqGqGqArqqHqGkqAqqA@qAGkGk@:AA:@Aq@AA@:9GkGkc3@:@AqjA@A@@íÖ6232,92::9:A93:@A:A@@GkwkHq:GA@kGqq@rGqrqGrwHwrwrGqqAAƒq9AqGkrGqrGqqA:9GAr@@AkGkGAk@@jA@@A@q@k@:AqA:G@A@kGkG@k@@A:ìÖr]23282 9:: 9 @A@:q@rqrqAG9@AqAkGqGqGq:rGrqrrqHqHqrGAqGrGrrqrGqrGqrGrGk@Aqqrqrq@Aq@G9::A@kAk@AqA:q@q3qAkAqA@@k@Aj@@ìÓ#]2323,92: 3 @:k@k@qGr@:@:AAkGA@@kƒAPkGr@qrMqHwrqxGq:@rqrqA@GrqHqqHAqqGq@A@:GqAG9qAq@;99A@k9AGjAq@G:@GqGkGkGjA@qAA:A@ëÓv23232,3 @j@@AA@:94@@:@:qqG@@:kA@qkGkGqGqHqrqHqHqr:rqGrwH@:qrGqrG:@qGrAA3@A@AkA:GqrGq:9@@Aq@@A@qAk qAqAqAqA@Ak@@k3@ëÓ c]2-2 3 3@ƒ:iAj9@:@:@kGkA@@;jAkGjrGqqrqG;qqrGqrqqqGqHqrq@::qHqrGj::GkAqA3Aj@3@9:AqGkGqA9;k@A@kA:@kGk@Aq qAqAqqGA@@: 3êÑ 2]322833 39ƒ: 9:9A@:GAqGAƒ@_A:@rGqqHqAAqNqrqGrGrqGAA@AqG9:Aq:@qrGr@@c39AjGApA 332qGqrqr:qqGAq@A@kA:@A:A@@A3G@AkA@kA@k3 9èÐ3c2323 9 999A@AqA@@;@:Ak„q\GqAG@@AqqHqrqGqqr@AjA@:rq:GkG:@GrqGcd]ckGA2A@A: 2c3, rGrG:: q@AjA@q@@:@kGk:9AkFqA@k@q:@ ::çÏy23]c328 33 99A@kA@Aj:Aj:kAqqAGqHAkGk@kqqGkAqGrqHqk@@:qqG:GkG3 3q@AqA@kccA93:@A2 3c]]ccqqGr@Ak@AkA@A@A:@qAqG:@@AqAq@A:@A@ƒ:çÍy23,223233 3 ::A@kA@k@AGkAAFkGAqqAkGkAqGqHqHqGqrGqqHA:AqGq:AqA3:9 qA@AkAA@j::3:cc: 3:GrqGkGkAk@qApAj@3AkGq9:9:qAq@A9 :@:@:@:@:åÎ 2Ž,9b299 9ƒ@WkAA@@AqkA@qAkGqqGqAqG@qGqrGqqAkG@rGrq@3 kAG@Aq@@:qGq:@9@3AqGk::@ 3c]c]c3GkGqGk:FA@AqƒA@:3GqAG4:@@AA@A@:Aƒ:@A@@3äÌ 2c]c3223 …:wAA@@k@3GkGqqrwr@AkGqGkAqGrrqrGkGAkA@rqrqrqG:k:@q::3AkAq:: k qAGA@]\3c2c]b:GqAqG3:AjGkGqj:9kAjGG::kGd@:9@k@:3@ãÌ?,c]c3839: @9:@:@:@A:@A@@A@::Gq@AqkHqqrqrGrqrGqqGkFAqHqHqqG99: „:E 993: G3qA9c23c]3]2c:AqAq: 9qGkG@3@:AA:A@@:9:9A: ::@;@@:@A9::àË2ƒ3Q2,22 39::@k@A:q@k@AjAA@AqGqAqrqH@AqGqGrMrrqGqqAA@xqGkqGA9 :@AGq@k9 : 33 ::cc]…c#33cAqGq:@rGkG@3GkA::@@q j: 9: jA@:ƒ@ k:@@ ::àÊ32,cc,33:::9A@k@k@A@kA@k@qqGkGqAGq qGAqrqGqqGrqH„qC@rGGkq@k 99:@kGA@A:GqAk @:cqqA:@@]\ qkG:@GkGAk@k@A@@::@kA:::@@ƒ: @:AA@A:@:@„:ßÉ7,cd3c]883 ::9:@qA@A@A@kGqqrGkGqAqAkGAqqrqAqGqGqHqGrqGqGƒA>qqGAGk ::@k9:@k:GkGkF A@kAAqk9 GkAqHq:qqA3GkAAGjAj@AjAqG3„:9:@:9@3@@::@:@@@ÞÊ3c\32c ƒ: 3:@A::k@kƒqwGqAqAGkGqAqGkqGrGqGqGrrqGqqGkGAqkGjA:AqAkG@@k9AAkGjAA@kGkGk@jA@Aj@AGkAq@:qGqHqG kG@k@Ak@:A@@G3:9 @@A: ;9A@k::@AjA3@ÝÈq223,9]329:@:@:@@AjAqGqGAkAqAk@qArqGqGr@Aqr9rGqGrqHqrGqrAGkA@AqqAq:A@k99Aq@AjGk:qGAq:@@kA@AkqA9:GrAqGq3@q@Ak9@Aƒ@k A::3@:@A::::ƒ@ j@:@ : ÜÈ-23c,22…::9A:@AqGAkGkGAqGqGrqxGrrqrqqA@rGrqArqrqGqGkGqqGqq@A::@G:@k …:@A@:@9kAG: j:qAGkG3::qGqlGƒA&@@AG9Ak:A3A@:: @:3 9@:@j@::kA@3 A:@3:ÛÇy2323]3@9:A@Ak@AkGkGAqrqrrwHqGqqHqGrGqA9rqrxqHqHqrqGrqHqrGqqA@:qkqGqG:@kqqrqGA:@@Aj:@AA:pAAqr:@AqAGqq@qAjAk k@:@Aj@@ 9:9:@k::9A:A@AjA@:ƒ@:@ :ÚÉ 3]2]c9::@ ƒ@ik@AjGkGqqGrMqGkqGqHqqrqGrqr@xGrGrwrqHqHqrGqrGqAqGq::GrGkGkGkAGqAqAq@A@@::@@AqAq@AA@kGkGkGkAqA@qA@@A3@A@Aƒ:ƒAkA@@:9 2:AA@k@ƒ:@:@ÛÆy,2]2]3299 A@:@::@AqAqGqGkqGrAqHqrqrrMrHwrG rAqqrMrGqqrqrGrqGqqHqAqA@AjGkGqAAqkAqAAk @::qA:33 :9Gk@k@AqAqAqG 3:3A@:@3:@k@9339@@:@AA:: 9Aj@@A9:@:@::9ÙÆ72332c2::@::A:Ak@AGqGkqGrqGqrqHqHwrqGrqrwrqGAqrGqqGGqHƒq.HqArqGqGkA@AqGkGqA@GA@3qGqAj@kGkG@kF:3GqA@@AqAƒqGq: 3::@:@:@@: A@Aƒ@kA@@:93A@Ak@A@A:@9ÙÇF323]823@@:@@:@qAjAqqGAqHqrGrwGqrqHqrwHqrGqqGAqqGkrGkGrGrqGqGqkGr@jA@@ƒ:@k33A@qGkGkA@AqGk@A@:@qAƒq/GqGAAqAG9:@:Ak@k:@:k@Gk::@:@:@::@:A@:@k:9:::ÙÅy]33]2]893::A:@:@qGkGkGkrqrqHqqHqrGrwrGqrqNqxrHqqrHrqHqqGqrGqrqrGqGqAAjAA@::qAqGGqA@kGkGA@kGqAAjA:A@qHq @:qAqGkA@:@@qGAG:@:…@ kA9::9A@:@@ƒ:9@::@A9 ÙÅ2“]233bƒ:pA9@:k@A@kGqGqGGqHqqGrqGqrHqxHwrrA@xqqGxqxqxrrGrwrGqGqGkrGqqGkqA@@qGrqqAqAAqAqAkF::@AA3:A@:@3 qq:Ak@k@@A@AkpA3 …:A@k 9 3@A@:9::@ƒ:@@: 3ÙÅG332]2c2:9A@::@AkA@qAqGrqGrqGrqrGrrwrGqrrMqxAArqrrGrGqGqqHqrqHqHqGqkGAqGƒq2AqAGqGqAqAqGkFA@A9AjqGkG3A:q:qGAAq@A@::@:k@:A3 pƒ:9@ 3@ƒ:93: :9:@:9:3:ÚÄ23\ƒ3782::@::@kG@kGqAkGqAqqGqrGrqxGrwrxGrrqrqGqGqNqrwrrGrqGrGƒq5HkGrAqrGrGkGkGkGkGqAqGq rqrkGk@@A@k3:@q:GqqA@qA@@:9:ƒ@A9AAk9ƒ:33 ::3 ::9@: ::ÚÃhc,33\c]83:@:@@AkGqqGqAqrGrGrGrqxGrwrGqrwrqNqqArqrwHqHqGqrqGrqGkqGrqqGqqAqGqGkAqAqGk@3:@qGqAGkA9AG 3 3„:& 9AAj:A@A@ kAq:9:A9:9::9 :9:3:ßà 22c38c9„:u@:@AjAGkGqGqrqqArwrGrwrxqHxqrqrqxHqxGrqrxqAqrGrqGrGGqrGqHqGrqHkGkG::@A@qHqrA:AqGk@:@@k3@A9@A:9AkA9 jA3:G:@k:„:9A33@@„:@:ßÃ3M]3cbc :@@A@AjAqAqG:qHqAGrqqHqqxrGrxqrNqNGqrqGrxqNqrGqxGxqrqrqArqrGqqBqGqAqAqG„:AqrqGqG@ƒ:1@@A:@Gq 3@A@AA@9 qG:kAk 3G@ @3@ 9::@: :9 :3:@9áÃ223\c8cb9:AjA@:GAƒq:GrkGkqGrrwrGrqxqHGqx3rqAGqrqHqrxqxGrrqNqNqGrGqHqGqGqkGqAqA„q@AGqGk@ƒ:ƒ:&@jAqA@k@k@9 @kG9G@A@qAk@@: 3 9:@ 2:@ƒ:@ ::áÃy,323]b9b::A@AjA@kqGAqrGqqHqrGxGrAwHrwrqGrqNqqGqHwrwrGrGrqrqrrqrqqrGqqrGkHqrGkGqGrHGqkGk:9:::9A@::@AkGj:Gk@33 kGqkq:k@A@kG@A:@::9A 3 :3@ :99:9áÃ*23]cc]h::@:kF:AqAAqqAqqHqqHqqAqrFrAwrGrGAwƒr#GrqrqHxqGqrMrMqNqNqHqqHqGrqGqGqrAqGƒq*Gq:AA:@9:@@:@:@kG:@:GA qGqAqHAGqGqAA3@:j„:9 :: @;@@: 3 áÃy3,23c]c@:@:AqA@k@GkGGrqHqq@HqGqrqrAwrqrqrqNqrqxGxqrxrqrqxrqrGqrqGrqGqGqrqrGqGqAqHk::9:@k@@ A@::k9A@@:AA9@qGkGkGq@kA:qkGqkG:AF::@@29:@d@:@:âÃy23]c3cb:@:@@:Gk@GkAGkqGrqHqrqqGrrMqArxxGqHwrwrGrrqxGrwHwHqrNqrqHqrGqArkGqHqrGqqG::@@:::3A3:@k:GAG@Ak:@k@::qGkG:qA@qAAqAGkGk9 @3 @::349AA:@âÃy323\cbc:@@::@qGkG@qAqGrGqrGrGrqGrqxAqGrqrwrrGrwqNrqxrqrrqxqrwHqrGqrrqGqHqGqGrG;::@:: @::3@:@::@j@k3@3@9:@:@4@Gk:GkA@q@A@k@@AAk9@ƒ: 9 3:@:3âÄN]23c8i:@AA@::qAqAqAkGqqHqqxrGrqrGrwrqHqHrMrqrHqrwHqAxMrxGrNrqxqrGqNqrqqHqrq:9@ƒ:19 9::9 :@:@@3 A@A@@ :A@:@A@qAq:Gq 94@:9AqGjA@A3: † 93:9 âÂ223c3bc8:@j::q:@GkGkGqAƒq2HqHqxGrwrGrwrqGwrqxGqqNqrxGqrrwrqxqrGrGxqrqGqHqq: „:%@A :3::9 9:A9:3 3 j@A3@:9G:Ak:Gk@3: 9„: 3AqAAjA@:3îÃy3]cc]bc::@:GA@:qqAqqAqGrGrqxqqGrGqGrqNqrrqxrxGrqrMrAqxGrNqHqGrwrGrGqrGq:39 ::@:: : 3:9 : @ 3AkAA39:Ak@Aq9 33: 9:@: :AGjGA@:9@îÂH32]23c8:9AAk@:AqAqGqGqAqqrGrGrqqrrqHwrxqNqHwrqGrGrqAxqxqrxqrqGrqxqrG94„: 9A9::@:@33ƒ: 3:93@9AGj AA@qA@Aq::@ƒ:@GqGrAjAqAjG:9:îÂ2]23cc8ƒ:ƒ@Bk@q@GAqGkGqHqGrqqGrHwHwrqrNrqxrqxGqrxqqxqHrxGrwHxqrGrG943:: @:@@3ƒ: 99::9493 33ƒ:#@Akk@A:Aq:9 :kG3Gq::@qqAqA@@:@4 íÂJ]23c]3b:9::A@AAq;@qkGrqAqrqGrGrqqrxqHqxqxGrwHrqrxqNArxwrqxrrqqNr@ 9 :9 @:9ƒ:8:@9 ::4 3:3 9:A::@9AGkGjA@9 q@GkG3G::@;GAqG@:: 99 íÂy3323c]b:@:@@jqG@:rGqrGrGqGrqxqHqNqxqHqxrqxrxqGxGrqAwrrMrqN@G@:@@:3:: :9:9:43@:99:3 9 9 :@@::9:@A@ 339;@@qGqq::9: 9 AjGkq@k@@::íÁ.c\232]9b: @::A@AqAqqAGqrqAqAqGrxqHqxrqrxGrxGrwƒrxrxqrMrrwr94:@3ƒ:C 399: 9: :::@ 9:A::3: 3 3 9::::q::A@kA:qAG:@ @3Aq:@AA@A@A3 @íÂbc-23]c8c@:@@k@A@kHq@:rGqrqGrqrGrqrGxGqrxAqxrx@GqGxqxrrw@:@9:@ 3@:939:9 @: 3::@:@: @: 39 3 94ƒ:@@ƒ:@@:Aq::@q:@49 @::@kGjAj:@ @ìÃF-2c]bc@:kA@Ak@Aqr@AqrqGrqGqHwrGxqrrxGxqGqGr@rrqrNq@::@::9::94 3:9 3 ƒ:$:3@:@:@3@A3 :@ @39 9 @::9:9:::@A@:„@3A@9 qGƒ: 9@A@A@@::íÃj,3]c8c8:@A@j@A@kqGAqAqHqGqHqrqrqrGx@xrq:rrqG@rwN::@::@::@: @:@ ::3 99::9 @:@:@ :@@3::3: : 33 9 ::@3@ 3ƒ@:@A:9:AA3 q@:@A@ƒ:@A3:íÃ.23b3b38:@@kAAjAGAqAqAFrqrqqGrGwGqrqrwrGqNqGq3 ƒ:S@:@4@:@@: :@3 ::@@ 33:: @:3::@39:A9:@:39 :3 9 9@:3 34@kAkGA3::@qGkG:@A:@:@j3 @íÄ53]33b:@:@AkG@k@qqGqqAqGrGrqrqArGqrHwrG:3 : :9:@:@::@„:@A9:@3@„:9 :9::@:: A:@:@ƒ:+@ :9 9 94A@3@ 9A@qGkG:9:qqHqAjA:9A:: @,ìÃ/3\cc3b93:@:qGk@GAAqqAAkqHwrGqHwrqHqx::@:@ 39::@…:@::@@:@:@:@:@3 :9:@3:9:9:3ƒ@:ƒ@%::@ @: 39 39: @:94@A:@:9A@ 3AAkG:ƒ@ :AA9 k22èÃ,233c]8b:9:@Ak@AjAjGrqAFrqrxGrqrG:@:@::@:9 :@ƒ:@@:@::@„:@A@„:@A@@ƒ:>994@A@:@:3::A3::93::9 94 9:9:9:9::@:A@qAA9:@Aqk@A94:p:@:33ƒc…223ßÃ232]2c84@:@qAqA@kGqGkAqGrq„@::@::9:@: 9:9:@ƒ:@:@:9@:@::@@::@@::@Aƒ:@:@:3@…:@ 9: 3@3393 39:4ƒ@!AjAkGq@AqAjAG@kA9:A:3:9c]c]3]2,,ãÃ#32]9]8c9::@A@AqGA@rqH33:@@::A99:@…:9ƒ: @::@:@::9:@:ƒ:@ƒ:@„:@3ƒ: @3::@4::@ ƒ@:@9: :9: :33 9::3ƒ:9:9@@::kAq@Akq@:::@9,232]-2åÃ2]3\338:9::AjA339 :ƒ 9:@::@:: :@@:99::@:@:9::@:@„: ?::@3@@:@9::@3:@@9::9@@A:A:@ƒ:0::9 9333::9:: :9:A@kGGq9 Gk@::3@@4 9]332,33åÄ%32c3\c2: 3 9 :3 @3::@:@@A93 ,:@:@ƒ:a@:@::@::@::@:@::@:@@A:@:::@A@@:@3 :9 @;@3:@@3@:@:: 9 9 933:A@@A9:9:@AqAqAG-@GA@9 Ak9 cc]232çÃ92]32c3b99 9 339 :: 3 9:::@:@::@::@:@@:@ :@:@9::@:@::@„:K@::@@49:@::@:A3@:@A:@:94:@3A::@:949 9:3:@:@:9A:9: :9:@AqkG::qA3@AG3]c],éÃ323]]32c9 33 :933@ ::3:@;3 ƒ: @:@:@:@::@„:@ƒ:@::9:@::9 @:@:@A:@ƒ:<@@::@:@::9@3:@:@:@:3: 3:::@:@39:A9:: :@k@::@:q93:@:9322ëÄ232cc]849 3: 39AA@,@@: ƒ:' 9@:@:@:A:@: 3::@::99:@::@:@:@:@3:@A@3ƒ@3@:@:@:@::@@::3::@3@„:'3: 9::@::@: @A:9:@3:@Gq:qA::33::@ ]-ëÄ'3232]38:9 33@9 9 A:@::3@9 :@:@:@:@:@ƒ:@::@::::@::@:@:@@3ƒ:(@:3:: 3:@:@@:@:@49:@::::@: 334 @:A@Aƒ:9 ƒ:@:AqA:G9::3 9:@323ìÄ2,32]c8499 :94@A@@ƒ: @3 ::::@ƒ:@3 ƒ: 9:@:@:?:@::9@„:+:@@:A :9 @@;@:A::@:9 ::3::@9:9 3: 99 9:@k„@A@:9::Aq@3G3::Aƒ:3íÄ323]3b993 :9 :::9:jAƒ: 33ƒ:9:@@:@: :9@@:@ƒ:@ƒ: @:@::@:@:@ƒ: @:@:A::@:@@ƒ: 3@::@:@A@4:9 93:3:9A@Ak@kA@ƒ: 9:A@:A3: 9@3:@ðÅ32323]8: : 3:949 @ :393 9 @ƒ:@ƒ:@3::@::@::@::@::@:@:9:@:@::@ƒ:<@:9:@::9::@3@:9::9: @:@3::3 994@@A@9A@@:99 :@3:@9:@3:@: ïÅ=232]2c39 3 9 9939 9: 3A3@:@:@::@ @:9:@::@::@::@:9::@::@@„:@@:@„: @:3:@3:3ƒ:@::@::9 @:39:::@kƒ:@: ::A@9A @A 3@@†2,3åÆ;,32388:9 333:39 @: 33 @@ 9:@9:@ :9:@::@::@::?::@:@::@:ƒ:9@„:9:@ 3@93:@3@:@:9A@ƒ:@:3: 94 ::9:@A@9:@:ƒ@3:@3:93@:@ïÅ%3232]2c2: 94 3 9 9AA@:3:@A 33:::@3ƒ:@@:@ƒ:@::@ƒ:@::@:@:@:@::9@ :9 : :@ @;3 @ƒ:)3 @:@: @:9:@A::9:A:94:94@49:9: @ : @:ïÅ!23,3283b9 :9 39339@ 9 3 9 9:@…:@::@::@:@:@::@:@::@:†:::@3:::9::@4:@3:39@:@ƒ:93ƒ:9A@@:@:9:::9::::99 ::9::@:3ïÆ92323b8:3: 3343 3: 3 :9 :@@:@:@:@9:@:@:@::@::@::@9@:@:ƒ@:@:@3@:@3:@3:@9::3@@Aƒ:(A:@:9 9:@: @k@@:A9@:9: :9 9 3::9::@@: ïÆ,3,b9\ƒ9 9 3 9:9 3 39: 9…:@::@:@ƒ:@::@:@@„: @3:A@::@ƒ:=@3:: @: ::@ @ @:@:@:9@@:: 9 ::3@:3A9:3A9A:@ 3:99: @: :ïÆ232329b: 333:: 9 @k:ƒ:3:@ƒ:&9::@:@:@:@:@::@:@@:3:@:j::@:@:@ 9:3@:ƒ@33:@A:@:9:@4:@@93@@::9@A@A@:@: 943 :A3:49@A3 ïÇ3ƒ2$c2:994 3 9:@3 39:333:99:@:@:@ƒ:@:@ƒ:@:@@::@ƒ:@:@ƒ:;3@ :@3 :A@4@:9@:A3 @:3: : @:: ::@k@:A::93: 99 :9A9: 2:@3 ðÇ,-298c9: 9 AA3ƒ 3 : 3:: 4@ƒ:@:@:@ƒ:@:@:@A:@::@:@:9:@ 9:@ :@A3:ƒ@0:@;@@:@: :3:94:9:3:@9A@A:j@:: 9 :::3@43: 3ðÇ522c8c9 3 93:@:9 33: @:39@ ::@ :@:@::@:@:@:@::@:9ƒ:E@:@::@:@@ :@39:@3@:A:A@9;:9:@@:9 9 9 @39:@Aj:@AA33A3 9::@ 3 :,:@ðÇ32ƒ2c8: 3 9 :@A 3 3A@:3: :@ƒ::@:@:@::@:@::@:@:@::@:@::@ƒ:=3@::4@:A@@39:@:9:@4@:@A:3:3 93A@A@@:: @: 9 3 9::99@: :9ðÇ:,229b39:9 3::q@9 A33:@:@A:3@::9@::@::@::@:@:: :@::@::@ƒ:ƒ@::@:A@:@3@:A3@::9: 9 Aƒ:#:3:39:4@k:@@3:9:9::9 3: : :3 3ñÈ.3,229b99 9493:A@33@ :@:@9 ::9 3:@:@:@:@::ƒ@J::@::@:@ @:@A9@::@:@@:3:@ @:3@ @:@:@:@3 @:33A:9:@@;3:99 394 949:3:3ñÈ&23,32b99: 3 9G@:9A393:9 3 @::::9ƒ:Q@ 9::@:@::@:: 3 :@:4:@:@;@:3@3 :@::A:@:9::@ 933:@@:9A@@93::@:3:93:: :òÈ>3,292c3:9 33::@:@ 3@ 3: 3@::9:9 9:@@:@:9:@:@:@:@:@:@::@ƒ:9@A@@:@::A:@:3@:@9::@@:@:4 3 3::@494@:3@@ :9: @@4 :39 òÉ/2-22c899 3 39A:@3:3A39 93 @:@:A@@3 ::A::@:@ƒ:@::@ƒ:@@:@:@ƒ:&@:39:@3:@@4: :@:A:9:: 9 3@: :::9A9ƒ: 3A@ 2 3 29òÉ&23229\84933:9:@: 9 @@3: 9A@3 9:@::@ƒ:O@:@:@::@@::@:@@:@:@@:@:@@::@3 ::@:@:3@:9::9::9 3394@99@:9 :93: 9::99:9 3 93 óÉ 32, 229b39„ 9:@:A3A3 3@:@ 3 3::@@:@@:@ƒ: @:@::@::@::@ˆ:@@: @A9ƒ:@::9 : 3@9;@:: 3 ::ƒA9:39 ƒ: 3 : 3:: 33óÊ.,322329\:49 94@:9 @A39 3A@:3: 3@::@::@:@:@:@ƒ:9::@@: 9@:@@ :@:kƒ:1@@::@3 3: @:A @@:399 ::@k@ 3:9::9::9 993:39 óË8-22b9::9 39@333@39A@3:-39 ::@:@:@:@9:9:@@::9:A: 3„:9 ::@@::93 @::@3ƒ@3@@9:3 A :: :9:A@A@9: 9 ƒ: ::33 õË=2,292cb: 9 9:99: 9 @@33:@ 9@3 3:@: ,::4:@:@:@:@::@@:@@„:43 @:@:@3:@ 3: 9: :A:@@9 94@99A@A@:9:99 3993 9 ôÌ 3289ƒ:"9349A 339A3 9 :: 3:@: 3:9A@:@ƒ: @:: :@:@:ƒ:@:@:ƒ@/::@A 94::@:A9@@:9 33:k:A3@49A:::9 :: 3: 3 öÎ123b2b8: 3 93: k @A3 @@9 3@@::@:@ ::@:@:@::A@:@ƒ: :@ƒ:69 ::@::@:3 @:@::@@3A:3:::3:@:@:@949:9449:93 3 3õÌ*]223ccb::39 99Aj: 3 9:3::@ @ @:@ 9:@3:@ƒ: 9„:ƒ@::@::ƒ@:@:@3@@ƒ:*A@@:9@: 3:@@: 3 : 9:: @4@9 :93 :  : 339 öÏ%288c8:: 33 :9A3: 9 @@ 3 @d 9@::3: ƒ:ƒ@ :9:9@::@@ƒ:@…:3 :@;:@:@3: 3@:@A::@: @:49:@:9A@:9:99:9 3 3 õÍ32]292cb:: 9: :: 3 j ;9@33A9;9::@::@ ::@:@:@:: „:3@::@9 :3:@@3@:@:@:@A:ƒ@::393: ƒ: 99:@@:: 3 :…93 ÷ÍA3229b9:9 9 3: 93 @3A@j @:3:@::@:@::@: 9@:@::@::9@:@::@9:@:@:@„: @@:A@:@:@;ˆ 99::AAk 9: 3 … øÎ'3,223\i::93 9: :3@@A39:9:9 @: ::„:@A:: 9„:@9: ::@:9 3@::@@:Ž9:AA::@9:9 9ø‰Ð329]389 :3 ::9 : @@3@3::9ƒ: 9::@A@39 949@…:@:9::@::@:@ :@@:@:@A@;9:@@:A:9 3ˆ ,÷ÏC23,32]3b:9 99:33:34:3@ : :@::@j::@::::9 99:9:::@:9 3:@:A@:’9@‰ø‹Ñ>323c293:: 3 :3 9A@3: :@393@ 3:94:@::@: 9@:: 4@:@::9 2 :@:ø­Ð=23232]8c39 3933A3A9 :9:::9:: 9:: 9 39::9 3::@:9 ::@::@­ øÐ)23\33]843@@394@3 9::3 ::33: @3@::@ƒ:9: :@9::ƒ 9::@:ø°Ñ%3,3232c8:9 3 3339A9:3:99339 ::3ƒ:9: :@ƒ: 9@::@::ø²Ñ7,323]32]:@33: 3:3:: :3 3:3:: @@: 3::@: ::@::ø´Ñ$c2322]38:9:@ 3 A393A3: 9 :: 3 9:9ƒ:99 3:@9 ƒ:@::ø¶Ò323323223 @39@@A3 9: 39:33 9: 9::9 :9 3 3 3 9:9ø·Ò%]32323\99:34 Ak@3 3: 9:: 3 9: :@3†:@ ƒ@3ø¸Ò&c32323283:9 @AqG33:9 9 39: 3 93;ƒ 9 9::@;ø¹Ó*323]23]39: 3@@A@k 3: :: 9: 39 9:9@::99ƒ:@ø»Ô ]3,3]223 9 ƒ3:@9 33 93::3 9:3:@:: 3:@ø¼Ô*c3\32338:93: :: :3 9: 9 3: 3:94@::9@4ø¾Õ)c3b323223 :93:9:@@3:: 39:39@ ::@3 :@ø¾Ö'33,322923 9 @A9 :3A@@:3@ : @: :3 3@ ø¿Ö 2]c232232:9 ƒ3 :9::3:A@3@3@ 3 3 9øÀÔ ]cc]c3c,2c8ƒ:3A: :3:33@ƒ 3 9 33ø¿Õ,cc]3c]c33bc@9 @@j :93:9 :33 9:9433 3ø»Õ,cc2c32232 3993@A3 99:: 9 3 3 3 3 3 ø»Ô23ƒc,33,2\9 : 9:@ 2@:9„9:9 3@9 9 3349ø»Ë,22…2323]]ƒc23c3339 :: @A@@†:: 39 3 :3 3øºÊ233„23]2,22]cŽ3]\3299:3@4 ‡:9 :33 943 ø¹Écc3,,2,323323323]c233cb3„ 3@@3Š 99 9 :ø¸Ê23„c32ƒccccc]b3c3,38 3@@393ø½Í 232-c],„c -c2]c23ƒ2 9A@@::øÍÎ d23232Ž3c]3233c]]332,3 3 øÎÏ3233ƒ2332Ž22]9]3]]8c92 : øÍÐ32]2ƒ,3cc]ccc“3c]cb93 ƒ9 øÊÐ3]3ƒ32,3c23… ]“3]23]8ƒ93 øÈÑ \,]23cc]ˆ””“]c3\22 :: 3øÉÕ232]ccˆ2Ž“c332928 9:øÅÔ332c]3‰3””\33,83,8øËÔ2c]cc3cc]„22øÉÖc]’,23“ŽøÌíŽcøÌøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø,23,]9ø°ø‹]23ƒ28c\]ø¯øŠ 23c38cichiicø®øŠ 32b9\c8“h]]ø­ø‰22,ci22cb9bc8ø­ø‰3]2ccbcc“ibc]ø¬øˆ,c232i“™bibcicc…c2ø¥ø‡2,c“™™“>2chc]c…cŽø¥ø‡,8“h“™’™Ž898b33„cø¤ø‡2,32™i™“™“hi2“bccc]cd23\øŸø…"2,cb“™“h™ci22ccc]c2cc]9]øø…%, bic™“™“ih\23c]c3232c]3322::  øšø…*222ihc˜“™“i9b9,3]3]2,9]232c]:@A@9A9ø•øƒ'2,-cibic™™c8c8c2,3323]c]9 :@:93Aƒ@ƒ:ø“øƒ*32c3icibcbi“™c]8cb]c32,3,c]9:2 :@A39AkƒAkA2†232øˆø&c2-c2,hc2chc’™“cc29cc32-323cc@39::9ƒ@AqA@qkFAqA2,32]c3]]2ø‡ø9]23cc8c82cbci““™cc“h322c] @:::@A@k@A:q@A@GkG@3@3232ƒ23,3ø…ø@2c322ibi““8ci’i“Žc2c23233] 9:@:A@:@k@::9::@kGkAqA @@,3]c3]9]23ø„øA2238“2ii“i“biibcc“]c8i2,32:@A@:@:j:@:A:@:@@A@kGkGjAjA:c3c]c3]3\3øƒ÷$]32c™“2’i’™ib8c“Žccbc232k@@kA3: :„@AjA@:@3 kFA@ @:c]2:@2c32øƒö=2c32“8“™“2“i“™ibc“d9cihcA@@A@3Gk@:@;:kGqAqAk@@Ak@@:: @@3A@ƒA3:9::øö32]2ƒ™ b:G29bbi’™GAƒ:1cbcib3@:@A@k: 93G@A@AjA@A@AkG@-:@@4@:9A@@A@@A@@::÷õ?23]38“:@qG38cci™“AqG::““bibG:@:9:@@AqA@kk@@AkGkA@@kA@ 339A:@@Aƒ39@A@@:öõFc]2c9qGqAk928b““GkGjiŽ2c9kGkA@AAjAG@A@9@kGAjGk@@qGqk: @ 3:@::@:k@ƒ:9õô)3]2c8:: ccbG39cchqGk@AŽ22cAqAjA99:@::qƒAqk@A@Ak@kGkG:@qkG3@Aƒ:@A::@:@:ôóH22,829qA2 b“G@:bcGAqGk@AGAG@:Ak@A:A@3Ak@j@GA@@j@@3A@Aq:@AqA @:k99:: @…:óñP23]3cbGqGqi“qG@38k@qAA@AkGkA@@9AA@@:@kAGj:@:@kqAA@A@A9AkGk::@:@k@A@::9@@::@9 óï233„2L983GkqAciqq:38iqGq3@@kG@k@;9@:j:k@@3@:qAAk@@AqkA@k@A@@A@9A@3@:@ 3 Ak:9 9:@òîU,2]]292b: AAqGqAGkA 3bGkGq ::kGk3::9 @::A@@:@AqA@qGq:@Ak@kAk@AAk3A@::@@A@@::9:3 ñêY,2333229b9b33@kAqAkAGqA “qGqAkAq@A@ 9@:Aq::@ 93A@:99:GkAGkGkG@@kFkGkG3A@A:@Ak@k 39:AA93ñécc,3„2;92::@3GkGq@@AFkAp@kGAqAqG@AjA99;GkG@:@:39::@A 3 qAkAq@k@A@ƒ:@@qAjA@jAq@A@A3:@@:ñæZc223,23b  3::3:AAjAqAA9AqA@qAkA@Ak9 9@Gkq::G@A@kAjAAk@A9G@AA@j::@@3GA@kG@kAGAkG:@A9ƒ: ðåZ2-c-2,32 39 :: 3@:@AkGkG3A@k@AqAjA@9@@:qGq@:9AkGA9AApAA@@3AjAkGA: @kGk@AkGA@j@@3@A:ƒ@:9ðä523c]223 9 ::@@kA@A@@:@jAFk@@32ccqG3c2]q::A@;@9:ƒ@:9Aƒq@@;:9Aq@AjGk@AjAƒ@ jA3@;@A@j::@ƒ:ðâ:,c]]22983 :@3A@@A@kGkA:@93:AA@A@3ibc“h™,b32Ž23::@A@3AkAƒq&HqAAq@A@:G@kA@A@A@k@:@:A@kG:@@A:9 9@ ïà`233232c8c 9A::@::k@jAAq@9kAqHq@::@32chi““2928]“Ž23Ak@A@ kG@:@:G@k@kAj:@A@@:k@jA:Ak@@kGk@@kAjA@ƒ:@::îßQ]2]238c8:9:@@kA@::3G@rGAqGqGk9:: 389bci™28323“ŽccA3:kG9 @A:@qqAGApAGqq:qA@@:„@;@AkG@3 k@@„: í߃cG”3]284:93:AqA39@GqAkqqAjGqk::@@qGkb828cbc22Ž“c A@qq ]qrqA:AGkkAA@qrƒAjA@k@::@k9:@:3 p j 3A@A@9 9íÞi223]2,2:9::@Aq @AqAqAqA 9AkGGAqAGk@Gk::AkAchi2cŽ“c3@jAG3cGqGkG9kG@q:qAqGk@Aj:AA::@4@ jA@: 9A@j::9 íÜk,33,32: 3 ::@:@A@A@A:@:FkAGqAqAqGk@kGkGqrwrwA9:9 dc,:A@::9::@:qA:Ak@A:@9q@Aq@AAjA@9;@9::A@A@k@@: :@: íÜ023],89Aq :@:A@:99:kAjA@kAG@qAqAqGqrGrqGqGAG:G@ƒA8GAc2@:@:AAG::GqGq@Gk@9A@GAjA@A@A@@k@Aj:@@Aj@:Gk::A::@:íÛ@2]332292b9 9::3:@A@:A@A@kGk@rqrqA9AAqG@q:GkqAqkq@@kk@kA@kG9:9„:qAqAqAA@k@A@k@AjAj AqAqƒ:@:A@:kGqƒ@::9 ìÙ,23]c,2ƒ: 3 :„@;@kƒqUGqqHj :GkG93Aq:@AqGq:rMrrqGA@@AAkGk:@:AAFk:GqGkGkGkGqAjAA:@A@A@Aj 3:3A@@:@:Ak 3 3ìÚ]3,92 9  ::@::@;@jAG3 @:@:„@NkA@AqGqAqArqrHqrqrGrxqqr@q@qAGA:pAkGA@::9:9AqqGkA@qqAjAj:9::A@A@:@:k@:99A@:@::ìØ]ƒc832 3393:9: :39„:@ƒ:AGkAkGƒ:7@Aj:@A@::GqqHwrqxqHqGqAAqAq@qAqGk@k@qAGA@@qAApAAq@A@::Aƒ@k@ƒ: @9::A@::@:33ëÕ'2c3c2cc\833 9 : 33A@:GAq@AG@:@:@:@:@kƒ@ AAqAqG9rGrqHqHqrqGqqAqqAqAkGAqA@ƒA'qAqA@k@AAj@ 9AAFA:@A:@A9:: 9:@AkG:@:9ëÕ]2232c2 9 3 9:@A@k@@A:j@†: @kAqqGqGrƒqGqGq::qGrwrqNqxqB@AAqqGkFkAjG„qGkGjAr@kA:qAjk9@::ƒ@q: ::@A@@:@::3ëÒw2]2d2]3b33: 2@:@@AjA@:A@@AA9A@kFkGAqGrGkqAA:@rqrA@rGrqHqHqrG:AjqqHqrGqGqGkGqGkGkGAqqAGApA@A@Ak :@:qkqAq99:@3Aj@:9:@:ëÑ,3ƒc328: 3ƒ:h@@Aj:@::3Ak@@:AjGAk@qqGk@AG@::@:AqGqGqqGrwrqx::qHrwqH@rqGkGqAkGqAqAjHqAjAAjAk@k@:93: @GqGAA@:: 9 :@4@: ëÑ92]]c3ƒ23:9@ 9: ƒ:@ƒ:@GjAkwrxqqGqAqA@kGkkGƒqGA:qAqAqqH@A@kGƒq.HrGk@@rrGqAqAqGqA@AkGqAqAGjAAF A:9::kGk@AkG3ƒ:@@:: ëÐ]2-c]2- 3 :@@:@A@:GA@@:@:ƒ@H::AGkA:GqGAjGGkGqBqkGqHqGq A@kA@kG 399@:@qqGqr@:GkGk@AFrAq@:qA@k:4993ƒ:9Ak@Gk9@@:@:9ëÏF2cc]c]9b 3::9A:@kqqA@k@@A@A@@;A@@AkG@qAqkqHqrqrGqA@A@:qkGk@Ap@@:@::ƒA@rHrGq::qGqA@kAjGqqG:„@:qAq@:@ƒ: AkAG3AA:: ƒ:ëÍ 233]2c32cb 3:@@::A@qA@@:@rqqkqr„q(A@kAqrrMA@qGqGqAkA@j:@HqA@:AkGk:GkGk@@Aƒq-3A:GqA::Aj9kGA:9A@AjA:GAA9:@9:qG,GkG@kAq@: ëÍ 2c]232,92:3:@„:9A:k@kƒqGkGAGA@AAGkG@qGGqkq:@kGrqGƒqH@:rqGqqqGkG:qAq::@kA939::@Aƒ@$AAjkG9Aqr:: @:@k@ q@A9AqGkGkG@A@k:@ëÌO,32c3]929 @:::@:@AqGqAGAAqAqqAjA@kqAqAkAqGGqH@rAAqAGqGqk@@qrGkGAq@@Aq 3@ k2„:%@@:AjAk@@: k9rGqAq 39A@A@:3@kGkGkG@:jƒ@:ëËy323]3c]b 39:9:A@@AqA@AkGkqA@rqrqHqrqGqGqGqArrqrAq@qAqAqAqGkGA:AqAq :3A@::9GkGA2:@:Aj :9@A:@ qGqrGqA :@k@A@AkGkGk@:@A@kA@A3ëÊy2]232cc2cb:@A@:@@:Aq@AqAqAqGqqHqHqqrGqGkqHqAq@:GqqAqGqqGkAqAqAq:qGkA@ 9@34G:kG@A@:@AqA@A:@kA3A::Aqqr9k @@AdAA@qAGkG@::A@@k:@ëÊy23]2-32cb:@:A::@::A@AjAqGqqrGqqGqGqGqGkGqqrGqG:qHqqAqGrAqAGkAA@A@r@q:@3:kGq::AjA9:@k @k@c]A@@:93rGqGG:@:@AjA@q:3Gkk@k@:@:@:ëÉ 323c2c]2:ƒ@s:@A@:q@kGkGqAGkGqAkAqHqrqrrGrGqkqr9rxrGrqGqG:kGq@k@@::A@:k 9 3:AG:AG@@A@c]c2@@:@:HqrGrkGk@@:@k@G:9AGqA@A@:A@:@êÉU2-2c3]3bc ::@;@:@:qGqGkGqqGkGrrqHqxrqHqHqrGqrGrGq@GqrqrqrAqGAkGqA@:qGkG@k :@Aq@3]@@„:(@33]3]]33@:GqqA@@A@e@:@kAA:qAqAq@:@jA::êÉk]c3c32c@:@A@k@:A@kAAqAqGkrGrqHqxqGqGqrwGqqHqrGrGrAqGrGqGqGqqGqGkqA:GkAA@:3@@:A@3 3A3@@9:9393c22c33@kGAkGk„@A9:Gq:@qkGk@A:@:@êÉpc2]32]b9:@:@::@:qAqGkGkGrGqqGqqGqHqHqHqHrGqrGqqrqqGrqGqAqrqGrqAqHqAq:9@3@:G-@3:9:GqAk:cc-22]3,c]@qAqAq@Ak:A@ƒ: 9AA:9A@:ƒ@::êÇ22332]c89b9:@k@:@kGAkGqqGƒqGHqrGrqGrqArqxqqrxGrA@xHrwAqAGkAGAqGqGqkGkGAqk 2@@ :kA@A@:A@Ak9-]2332-3ƒc]GqAqAƒ@jA:@@:GkA@kA@qAk:@ :éÇy2]”cc\c::A::@AGkFqAqAqGrGqHqqHrqrGqxqHqHqqrqqA@qrqGrqrqGkGkqBqAAqAqAk@9AGrqA:@A@@k@k@k@ 3Gk@:93-23kGqG:kAkA@@:@@kGk @AkAq:@::êÆ 32]3c\]iib::„@BAjAjGkGqGrqAqrqrGqrMrqrGxrqrGqHwHq@rGrqxqHqqrGqGqGqG9qGkG:@AqAAqA3ƒ:/@@:qA@A:@:@Aj:3\323cqrq:G@k@G@k::@AkG3:9AFA@A@kêÅ2]23\ƒcWbc9::@AkA@A@qAqGr:GqrGqHqqrwrqHqxqrMrxGrqrqA@qGrGrqHqGkAqGkqAqAqAq@:@Aqk@G@A@qGkA9k9:„@":2Gk@:GqG:kGAkA3@: @qAq 9kkA@:@:êÅ3323„cCib::@A@ApAkGqArqGqrGqArqHxHqHqqxHqHqxqrAqNqxrGqrqGqqHqqHqrGkGkGAqA@ƒ:*qAGk@jA:AAGk9A@@94@::GAqAG3@:rGkGk@@k@3A:ƒ@ 3:A@k@3:ëÅ,c2c]„c@:@@AqAk@AqAqGqAqqrGrƒq:xqxrxHwrxqxqHwrFrrqGrrMrqHqqHqqGqrGqGkGkGkG:@:99: @AjGj@@Aƒ:"@:@AqAjAq@3:@qAGkG:@k@A@9:@::9:AGƒ@:ëÄ2233]3„cq:@@AjAjGqAqGqArqHqGrqHwHrqHwrqrwAr@rx9rqAwrqxqrqrqHApGqHqAqAqGkG@AkGj::@kq :qAqA:9 3:@:@A@AkA::AqGkGq@@:A@A:@:@„:9A:9A3 êÄy]3]2cc]ch@@:A@A@Aq@qAqqGqqHqrwrqrFrqxHwrxqx@AqHqxrGrGrGxGrMqqHqGkGqGkAqAkApAAqGA:qAqqAk@qAAp::A@:9AjA@q:@GkGqkGA:q@A@@::AkG9 9::3@:9éÄy223]c2cci:AjA@@:qGkGkGqArqrGrGrGrAGrqrqArGr@:qxHwAqrwrqrqrqGrqrrqGkGAqqGqAqqAqAqA@HqAGA:AjAA@@AqA@:@A@A@AqAqAqAj@;@j;@: @@:A 39: @:@ƒ:èÃy3,3]c3]cch:@A@k@kqGkGkGkGqHqGrqqrwqr@xGxGArwrxqAxqrxrqHqGrGxGqrqHqGrqrGkGqGqAqAqAqAkA@kGkA@kG@k9@AkG@A9qkGj@qGqGqAq@@A3:@:@::pƒ: 9@@:9:@çà ]22c3ccch:k:ƒ@ƒAWqGqGqHqqHqqHq@HxqGrqrxqqGrxGqrNqrwrwrqxqr:GqHqrqGrGqqGrqAqGqGqA@Gj@AkFk@Gk@A@:9A@j;@AqGƒAqAqqHqA@A@@A@:A3@ @A@ƒ::@ æÃ_3]3cccic@A@k@kq@AqkGrqAqGqrqrGrwrrqqHwrGrqGqqrqrwHrMrGrGrMrqrqGqHqqAqGkGqGkAAk@Ak@A9AGkGAkGk@ƒ:9::@A9Ak„qrGrqG::jA:@j:@:9:@@:@:@:@:@:æÂy]2]c]c”]hc@:qAAqA@kGrqHqqrqHqHwrxqHqGrqHqqxrqHrGxGrqqrqxGrqrqHqxrqrGqGqrAkArGqAqG@Ak@:9:@k3 @qGAA@:qA@qH: 9A@AkA9:: ƒ: @;ƒ: @A@@::@@ãÂc]3c2…cyb@:AqAGk@rAqGqrGGqqHqrwHqxGrwHqGrqNqGqxqrGrGrGrxqHwrqGqHwGrqAqGqGkGkGkGkq@AA@q 9AqrAk:@qAjA@AjA@:99AA9AAkFk3:3A@@::3@:@::@k@9ƒ:9â 2c2c3]c]cb:ƒ@\Aj@@rGjAAqGrqHqqrMrqHqqrqqrqxrqrxrqHxrqwHqrqGkGxrGrqrqHqrGkGkGkGkGqAqGjqGqAqA@qG@G::GAk@:3@ƒ:#9@@kGAkA:9 kA@9: @:k @:@:@:9::âÂv]32]c]3cbc@@Aj@AAqqrG@qrqGrqGrqrGqqrHwHxrMrMrxGrwrwrGrqGxrGqrqxqHqNqrGqqHqrGApGqGqGkAAqqAAq@AkG33Gk@G@@ @A:9kA@:jA@qƒ: @@:: :9@@„:@@:@::ƒ@ àÂc2323ƒcMih::A@kAkGGqAqAqHqrqGrGqrrHwrqrwrrqxrwrqHrxrqGqqrGkwHqHwrqrqrqHqqGqqAkGkqGkGqƒA)qAkA@@:: @kAkAk @kA:qGq:@AjGA::@::@@3:9„:3@ƒ:@A@ @;@3àÁc]23,c]ƒcyiA@jAAq@kA@qrAGqqHqrqrGqqxqHxrNqxHqxHqxxqGxGxrGrFrrwrqrGrGxGqqHqGkGqGqAqGqAqG93:@9:@A9@:@@G@q 2 :@:GkGA@A@k9:@AjA@A 3 jAA@33::@@kA33 3ßÂQ323c]cb:jA@kA@GqAqrGq@ArqxGGqGrHxrqqxqxqrxqxrGxrxqrrxrxAwrHwHwrwrqrGrqGrGkHqqGkƒ: 393…:@AkAkG3@: @:@qqkA3@kA:G@kFA::3ƒ@@9AA: :@k@A9:@:9 ÞÃ23]„cyh:@AkGkGkGkGqqAAqqNqrqGqrqxqNrxrHxGxrxGxrwrNqxqNqAxqxrqrGrGqHqGrqqAq AA G3 :@3: 9:@:9:@@:@k@9; 2@:A9 q qA9@Ak@A@:@@k@A::9Aj@9 :A@AjA9„:ÞÃU32c3c]hc:A@qA@kGkAqGr@qqGrqHqqHqxHxqxGxqrxqxAqrxrxqGrxqxrxqHqNqxqrqxqA3AA9Aq@@kAkG:@Aƒ:$@: ::@A3:@AAq@kA2A@@;@:3 G9::@@:@::ƒ@j:9:@A:3 jA@AA::@:9ÝÁ,,c]„cKh:jA@qAqGApGkqrHqGqGrqGqrqxqrrqrGxqxrGxrwH@xqGrrwrrxqrqr:@ 9@9::@Ak@A9:9ƒ:899 @:993k@@AAFAqA@k@@ qAq qA@:@kG:@:;@:@ :@:9@:Aj@k„@ƒ:ÝÁ]3cc]ƒc)@:Ak@qGkGAqGrqxqAqrqrrGrNqrMGrwrrNAqxqxrwƒr qGxrM @ @@ƒ: 9: ::3A9 3 9:@33 3 :3::4ƒ:/9:@AjGjA:qA@@3A@:qAqA@:3 q@k3:@:9A 39A@A:@A9@A@ƒ:@:ÜÁ7ccc]c]cbi:@@AqGqAk@qArGrGqGrGxqxqrrGrqGrwrqxAxrqNA@:@:ƒ@:3@A::9 : :9::9 qA9„:9@:@ A9::9:9@@:@:@kA@:@kGkAqqA@qGqqA@@kAA@@:9::9: 9;@:9ƒ:@:@3ƒ: ÜÁc]c3„c*b@:kGAkqGkGkGqxqrGkrqrNrqNqqrqG:Gxr@::@:3@…:_A@3 @@:94939:A:@A@AAqA@@::@::9A@9 @: 3@::@::A@AkG:q@qGkGkGrAqGkGA9A::9A9 3@:@9::@::@ :@@ 3Ü ,3c\]c]hc:ƒ@(qAqAqqGkHqHqqGrMrwrxqr@@::@:::@::@:@:@@ƒ:Q@3:@A39 : @4@@ :@39::::@@A@:3:@3:@3@:: :GA@@k@:AjG@AAqGkG:qGkG:kApAp::9 :3 :9 3…:@ƒ:@39ÜÁ32c2c]c]ch::A@kGAqHqAqqrwH:@A@Aƒ@A@:@::@3ƒ:@9ƒ:'9::@@:A 9A3:9: 9@3:@ 3::@@A@@:@3:@: @ƒ:@:@:Gkq@A@3 @@4@jA:@kG:qAAk:@GkƒA99:3@:9:3 :9::@:@:: ÝÁ]c]3]9ccbc@:3 „:@::@:: 9Aj@:@A:@:@:: 9 …:(@::@:@ 99: 39493:@::@94:@:@k:@: @@: 3ƒ:9@:@ 3@:A@3@A3k@@:A@:q@k@Aq@@:@AkFkF3 9 : 93:@99::@49: ÞÁ7,c2c]c]9c:@ :@:?::@@3 939:A@:AjA@:@:@:: ::@:9:9:@@4„:@ 94::9 ::@@49:ƒ:@:3 ,@::99::@@39 Aƒ@*:Ak9:@AkAqGAqG:: 3 39AAqAA@3@:9 @@::9äÁ3c]3c]cc]h::@3ƒ:99:949;@:@:@@:@„:@9:99:9ƒ:::@:9:@933:9: 9: 9ƒ:@ƒ:?@:@:@3:9 3::@:@ 39AkAk @3@kA@9 9 33:9:99:9@Aq@A@3 9 3:: 9ƒ:äÁ82]]38cc]i: 9 @9::@4::@:@A@;jA@::9@;9 3:::@:@:9 :@@ƒ:A@:9ƒ:9 3 @ƒ:@9:: 9: 9::@:9:@:@ƒ:(@Ap @@kAqApAq3 9 @ :::qGA@k@A@@A3@A9::9ƒ::äÁ+3c2]c3‡ccb@ 3 @::9::@9:@@:@:@@::@::9::9: 9 …:^9:@@::@:A9:@:43::9:@:@:@9::9: 93394:93 ::@A 9AA3@k@A@A @: :@kGkGk@:GkAk@@Ad@:9: 9:3 9::åÁ2]3c2]cc]c:33:9:@:@ ƒ:A::@ˆ:::3:3::@::@A@:9:@4@:@:3:9::ƒ ::3 9:: :@ 39:@ƒ:,9@:@@:39 k@A@:@k:9A@kGq:A9AA:@@Aqq@A::@A@ƒ::9åÁ]2]3]„ci: 9ƒ:ƒ: :…@:@:…@ ::9 9 :::9…:9„:#@A9::9 :9:9:9@:9 ::99:@ 3:9:99@„:.A::9 @A@k:@3::@:@AqG:@ :@3AkG@A::9 3 :@:: 39:æÁ329\23c]cb@3:9:9@:3:@33A:A9ƒ:@::@:: 33@3:@:@:@@:@@ƒ: @:3:@:3ƒ:ƒ:D 9:3::39:: ::9::@:@:@@::3@A93kG:@:qqAq:A9:@3G@kAj@:: 39:9:: æÁc]]39]cc]i: :9@::@3:9@@ @@ƒ:@::@:@:9 9 :::@ƒ:9ƒ:…@ 49 ::@@39ƒ:9:: :@3@:9:3::9: ::@:@@ƒ:(@]@9:A9:9@@k@:A@qAk9: @:9GkA@@3 :: @:èÁ 2c3\3c]ccb@:ƒ:@ :: ::@:@3 9@@::@:@3:@::@ƒ:/@3:@::@;@@39:9 39::::9:9:@:@A:: 9 :94::@„:@:9 :9: :@:A:@: :3@A9:qqG49Aƒ@ :::9 3@:èÂ'c3]9]c8cc::3: 3::@39 :@:@::9;@4::@: 3:9„:@„:[@::@::@:A9::99:: 9 @:@::@:@::@::9: 9:9::@9:::9:9: :99:@::@@:Aq::@kA@::3:3 9:çÁ!232]\9]bch:@: 9@::@: :@@A339@@ƒ: 9: ::@::?:@ƒ:@„:+@3::@@4::9::3A9::A:@:A@:@9: 99 ::@::@:@ƒ:9†:AAk@3:A::9kG:9:@:@ƒ::îÁ3]32c]b9bi::99ƒ:@:: 9::j::@::@:@@ƒ:@:@::@ƒ:@:9@„:&@@:A: 3@:99 :@:@:::@9::93::34993@ƒ:@::@3 :@9@AqGA@: 9@qHqG;@„:@@3:îÁ\923]38cbc@: 3:::9:@9 @:: 3 ƒ:@::9::@::@:9:@ƒ:ƒ:J?@@A:@9@9::9:@:9:@::3:@4:@9::94 93: 9 9 :9:: 3:9::@A@:kGk: ::@kqA: @@ƒ:9:îÂ2]3b3bcibi:9: ::@: :@@: :3:@@:@:@:@@:@::@:?:@9„:@@ƒ: A@:A @::9ƒ:49A9@;@ƒ:@:@:: 3::39@A993 9ƒ::@::9ƒ@93:@AAG:@::@:: 9 îÁ*3]23328chch::3:::@ 9;@:9::@@:@:@:@: @::@ƒ:@…: @:@:@4@:@:@ƒ:5@::9:::@@A@:@@:@@:@3@:93:: :9@ : 3:A@Aj:9@AkGkAA„@ k@:@39@: @ îÁ223]2c8cbic@3:9„::3 3:9@3@:@::@:@ :@ƒ:?:@:@:@9:@@:@::9@A:@::9„:@:@A:@ƒ:@A3ƒ:/@:9: 9 2:: @@3:9:@@A@::@ :Gq@qAq;@A@k@: A9 :ïÂ]9223bcibi: 3 @:@ 3 3:: ::@ƒ:@:3 ::@:::9:@@†:ƒ@::@9ƒ:ƒ:@9::@9ƒ:9::@3:@9ƒ: 993 : 99„:ƒ:@:@†:9AGkG3A3Aq:: k93ïÃ+]3292bich@33 93:: :9 39@::9@:@:@: 9:@::@9:9ƒ:@::„:A@Aƒ: 9::9@::49ƒ:9@ 3@A::9:@::9:999:ƒ:@Ak ::9:ƒ@AkGqAq3GA@9 :@ :ïÂ.23232cbchc@3 3 @@:@9@::@::@::@:@4::@9::@::@ƒ:@:9@:@9::@@::@@A@ƒ:9::9:@A@A:@@399:3: :4ƒ:!9::9::@9:@::9@:A@@qGkG9kG:9:@A9 ïÂ]3,ƒ2#9bic@@ 9AA@A3: @A@:@:@::@ 9::@::@ƒ:@@::9„:@„:@:ƒ@„:9::@:@A:A:@@94:@::3:9:9:99 ƒ:@:@ƒ:9:@ƒ:@A::A@::Gk@:@Aj ðÂ!232329bchi:@3 9:jA:A3:3 ::@:@: ƒ:9:@::@„:@:@:@:@9:@:9 ::9@::ƒ:@:@:@ƒ: @::@::9::@4ƒ: ƒ:@@A9 @:9@::9:@k@q9:q:A9 :@A3ðÂ]323b9bcib@3 ƒ@:39:3@4@:@9::@ƒ:@ƒ: @:@::@9::9:@„:@@4::9 :@99:@:@::9::@3@ƒ::::9: 99 :9@@:@@A‰:@@AA:GA9:339::9ð 322]bc8ch@ 3:@Aqq::3::@::9:@ „:@:@::@„:@„:@@:„@:A9:99ƒ:6@@:@::@ @::@3@::94::49 93@::@@::k9:@@99::Aq39k:9ƒ 3:òÂ\332329bcic:9ƒ: qA@ 9:@†:@:@:@:@::@9:@9:@:@„: @;@::@3::@;ƒ@::@ƒ:9::@9::@::@:@:9::9:9:@ƒ: @;9:@::@@…:@@A 9G:: j 9 c,íÂ3c3ƒ2 cbibh: 3:@ƒA :9@:9@4@:@::9ƒ:@ƒ:@::@::@::::?::@@„:K@:@@:@:A:@@:@:@9:@4 9 9::@: 9::: :@@AA@::@::@::9::@:9::@:9: :232,2êÂ2]23329bcci::9 ::@jA9  3 ƒ:"@::@@::@:@:@:::@::@:@::3:9:@@:@„:@:@A:9:9 3: :@::@„:!9:: @:9::A@k@AA@A@::@9:9@:@:@@ƒ: :@:22323ëÂc3\382cbhc@: 3:@:GkA:: 3@ @ƒ:@:@:ƒ:@9@ƒ:@„:@@ƒ:(:@:@::9@::@9::A::@:9:@9::9:@439:9 ::9ƒ@ Aj@A9:@::9ƒ:@:@A:@3:@ 9::32, ,íÃ)]232]8cbib:@3@:A@k::93:@33:@:@::@:@@9ƒ: @:?:@:@::@„: @:@A3@:A:@„:!@:@:@:4:: @::9: :49:::A@kA@k@„: :9:@:@…: 9:9òÃ3]328c8cibA 3@ƒ:FA3ƒ: @:9 ƒ: @:@:@::@:@@„: @:9@::@:@„:3:@9::9:::@:A9:@@:@:@:99::9…:9:AjAƒ@:@:9A :@:@::@:3 :@ òÃ\9232c8cbic@93::@A:j3ƒ@ƒ:3@:@:@ƒ:@::@::@:@::::@ƒ:9::9::@:: @@:A9:@A3@„:@::@:@:::99 @ƒ:@:G9A@A9 A:9:99ƒ:@::9::9ôÃ(3]3\89\ibchk@ @::q:@ 3 43::@ :@:@::@::@…: @:@3::@:ƒ@:@@:9;3@A:@:9::@ƒ:0:9 3@:@::3::9: @:9::@A::@k9:A@9 :9 9:@@:::@ óÄ23322cbchi@A3 :@A9::@3  9:9 @ƒ:@:@:@:9@@:@:@@ƒ:@@„: @::@ :@@4:@3ƒ: @@:3@@:@::@:@„:@:::@k@:@:A3:9:9:9::3@:9ƒ: 9ƒ:óÅ&232c8cbci“@ 3:@::@ 393 :: 9:@::@:@:@ƒ: @:@@::@:@ƒ:@@ƒ:*@393:: @A9:A9:@:9:9:@:@:9@::@9:@AA@:@@9‡:9:::9 ::9 @:93óÄ 2,283biihc@@3@:@3:: 4 3@:: 9:@ƒ:@ƒ:„:@@†:@:@3@@:@@A:@@93:@9:A@4@:ƒ:-9:@::4:9:3A@3@:9:@ :@9::9: 3:::3 :@ :óÄ c] 29b9bihk@…: 9:39 @@:@9:9::@::@:@:9@::@:@:@ƒ:@:@:A9:@::A@::A@:@@9:@9:: :9ƒ:9@ƒ:9:@@A@@4@A9@@4:9 9ƒ:9ƒ: :949ôÅ+]2,29bcbii@:9:@: 9@3@@:9:A3 9: 3::@:@†:#@@::@::@ ::@::@A9:@@:@:A@::@99:39ƒ:@:9ƒ:jA@@:@:: 93: @@:::9 :9: ôÄKc2323b2ib“i@:9A9 3@@49 49@:@:::@@:9::@::@@:@:@:9@:@@@::@9:@:@@::Aj:@Aƒ:2@ :9:9 :9:9 :@@A@:A:@A:93:4::9 ::9:@3 9::23,ðÅ"332-8c8cibi@;::3::9A@3: :3 :@:@::9ƒ:@@::@@::@:9 ::@A„:@:A@A9:A:9:@A::@9ƒ@*::9:3@3 9A3A@k@@:@::A@ 3 :9 9:::33 õÅ\c382cbƒcj@:9@:@:@: 39 3:@:@:@:@ƒ:@ƒ:@:@:@:@„:@:9@:ƒ@:@…:59:@:9::3A:@::3:39 9 9:AjA@A:@: :@9: 9 39A3: @3 3 õÆ]3]3b…c-@@:@:@:3 3: 3 ::@:@:@:9@::@:@@: @::@:@: @ƒ:#@:Aj:A9:@9@4:@A @9@;@:9 :9 39:9::ƒ@:@3:@: ::9: 3::3@3:: 3öÇ)c23]9c]cbc@:::@:: @ ::3:39:@:@::@::@::@ƒ:@::@::@@„:@:@@;@3:@@ ::@:@9„:@: 39 :@::@:9A:j :@ƒ:9 : 3::: ::öÆ]323c]…c@:9:9@:9@3@3:@ @@ 3„:@ƒ:"@::@::@::@::@@:@:@:@:@:@:@4@@3@:@ƒ: 99:9@:3:93:ƒ:@:@A@„: 9::@::ƒ: :9:9 :÷Æc23\c]c]cb@:9::: :@@ 9@@ƒ: 9:9::@A:9:@:@:@9ƒ:9:@:@:A93:@ :A@ƒ:9@9::ƒ::4:9:@::@Aj:9 A9 ::9 3:9:9ƒ: 3÷Æc]2]3c3„c!@: ::@:@:9A9:A3@:@::9@A::3:@:@…:::@::@:@:@::3@@9„:/@ :@:@:9:@:9:3 99A@:9:@:A::9A9:@:::::3:: 3øÆc]c3\c]b]cch:3„:@::9@@ 3ƒ:@9::9:@@†:@:ƒ@„:@::@@:@:@A99::ƒ@/:9:::::9:: 9 3@A::@::A9::9::@: 3@ 39:3 3øÇ2c33c3c]ƒc"@::9:@9:9: A3@ 9@@: :: @::@:@:@@ ƒ: @:@:@: ::@ƒ:@ ƒ: @ :3:: :@::@:::9 3 ::@AAG9:@::ƒ:9:3 3:9:: 39øÇ3,c2]c3c]cb:9ƒ::: :3: :3::@@ 3::@:: 9:@::9„:::@ƒ:@3 @: 3::9 @9:@9@:@:9„: :9:9:ApAj :9„: @: :9:9: 3ƒ øÇ]]9]2c]c]i::9:9„:9:@ 3@ 3:@::9: :ƒ@„:@:„@:@„:; :@:@::@@:@A3@A3@:@3:399::4@:@AjA@::9:9::@:::9:9399øÇ1c]2]c]9\cbi: ::@@::@: 9: @ ::@::@:9:9;@::9:@:@:@ƒ:@@ @ƒ:7@@:@:9 3339 :@A@A:@@9 3@Aj@A@3 @@:::@9:@:9 :4 øƒÇc3c3c2]c]cb@:9q99ƒ::33@ @@:: 9::9:@::@: ‹: @::39:@:@A:@„:)A::@@::39::3::@A:@3::@: @:3:::99 3 øƒÇƒcA]b3c3cc9c::::AkA9:9:3 9: @3@@:@ : @ 9 9:9@:@@:@:@:9:::@:@::A9ƒ:9@@9@:3::: :::9:@:@ƒ: @9::33@„:99 ø„Ç(cŽc]3c2]]cb:@9A9AqA@A9@::::3@4::@@::3ƒ: 3 ::@::@::„@ƒ:4@:@@:@ :9 9: :A:@@:39:9 ::@ @A@:9A::9: :: 9: 33ø„Ç%”cc]]c3b3bc:9::GkF::@: 3: 3:: @@::@„:9::@:@::99 3ƒ:5@:@:: A@:@@:@A:@@A@::9:@:9 :@9:9:@A@: :9::99:: 2ø†È(cc]92c]c]8c::kAqG:@::3 9 3:9 ::9 ƒ@ :93::@ƒ:@:: ƒ:@:@k:@:@@;j:@@:949 9ƒ:4@@:@:3:3 : 3: 3:ø‡É'cc]c]c]9]bi::9:@GkAk:: 9339::j:@@ 9ƒ:93:2 ::9:@9 :@@:@ 3:@:A@@A‹3 93:@A@kA::9„3 93ø†Écƒc ]8]c3bc@::9:ƒ@ 92:3 :9 3ƒ:@ƒ:9 9:@:@::9 3::@@:@@“3A::@A@:A9@: :†:33ø‡Ê,c]3]c3]ccb99:@:@A:9: 33 33@ 3:: 9@::@ƒ: 9 ::@:@::@:–@@A@:AjA@k: 2:9ˆ:ø‡Ë]ƒc"c323bc9: :@k:@:9 :: 2:3@:@::9 3ƒ:@:9:@ƒ:9ƒ:@¥ ‹9ø‡Ëcc2c]c3i8:@@3 @:@A:ƒ@: 3@: 93 3::9:  ::@:@:ø¾Ë]c]3ƒc32]ci:: 3:@:@::@;@:@3 : „:@ 9†:@:øÀÉccc2cŽc3\i::@9: @:@3ƒ:3493@ 24::3 2 9øÃÊ.2cd]c3c2]9b8:@ 3: :@:@:: 93 @9A:@ 39:@A3øÄÊ(3cc9]c]3c]c94 @393 @@::9: 3:3::9:3 @ƒ:øÇÌ]cd,92cc]c22:: ::3@: 93 ƒ: ::9:3:øÉË']cc”]2cc]89\3 9@ ::@39 @:39::@@øÊË&2]\”3]3cc3,29 3@;@:99:@393 3 3 :3øË»,2,‡,3ƒ2]c2c2]cc]cc28: 3@ „:: ƒ:9 3 9øÌ¹232 …2,32ƒ3ccŽŽ2]cc]]9c2cc:9@::† :33 3 øÊ¹#cd223,2, 23222,cc”3]9cc]c]]9b…:‡ 3 9:: 39ƒ øÇ¹c32ƒ"23c,332-33cc]“c3cc]9]c]8c@ @Š::33 ƒ3:øÆ»,Ž3c]c2323\3]232ƒ3 cc3ci3 3 3  øÆ¿c3232ƒ,c32323]ccc33c]ccb23 3 33 9 9øÄ¿2,32ƒ33232233]9]3]c“2”“]c92:9 9„øÃÀ 3]3\22]3,3†2c-””c3]]cb::øÚÀ]92cƒ323cc]†3]22Ž“¾ƒc]9ƒ:øØÁ23ƒ33\c]3Š3“Ž”Žc3c2:9@ø×Å223,ƒcŠ2]”½”“]c]2c:::øÔÅ-2]c]3‹3””]cci289ƒ:øÓÄ23cc]Œ2…]9c3øÙÇ3c” 2]c3c28cøÕßcc”øØáŽ“øÙøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøš,,ø§ø– ]22]c232]ø¥ø– 298322ccø¥ø” 2c-cb3hciiccø¤ø“ 23c“b2c’i]ø¤ø’3]]22chcchcbc]ø£ø‘ 2]2cch2ichcƒi]ø£ø‘,]2ic™™“™2ibicø£ø23™hi““™bcbibccø¢ø3,22cb““˜i“822“c]ø¢ø2]23chcii“bib3“ib3]ø¢ø3238,2cibi’i™b382ccƒc]cøø‹]c23c]ibibii““h232cŽƒc]ccøøŠ2c,3]c2c22cb™“™c223„c]]c,øšøŠ#23288““2829bi“™“c]8,]]323232c3]cø—øˆ2c32c“™™i“29ch““˜c]238c3223ƒcc22]ø–øˆ(]c3cb“b“i’“ih“icc223]2-3c]2]332399ø”ø‡/23]32“ih“™ii“i“ibc-232222c]cc3 3:: ::: øŽø†)c32b™™G@G:hc8“’2idcc8c3233cc]@9 kAA9:ƒ@ @@:3 øŒø†$323b99:AqkA@]8\iicb@:]8c22,]c :9: „@ A@:kA@k@@A@ø‹øƒ7,22c22::A“8qq29bi™“@GkA99bc339 9A3AA@::@:@:AjA@A@@A@øŠø:2c]c, b:GkGbcAG38““˜Gk@G: bcb3@@:@@ @:93A:@:@::@kAkk@øŠð+c]c]c,2323]cc29bGkGk9bqG:ch“Ak@@:cb3@Aƒ:3G:@:ƒ@:ƒ@::9G@Aq@øŠï4,2]2,332238cb9b 3 @qGciqA:8Ak@GA@Aj29h:@@j:GkA:@ƒ:kkAk@::3Gk@A:,ø‡í-,33222838\cb9c Ak@:k@cqG:,ibGkq:@Ak@A@3 „:ƒ@ k@AjA@A@@A„@ A:@,@32]c2øƒí c2232c238ƒ3@ 9 39k@A:@A@@kGqcGkGA@kAGk@A:3@AA:@Ak@A@AjA@@k::Aj@ ::c23,øƒê]2ƒ3b922 3ƒ@::@::@A@A9:@:@@kAA@bGƒq* 39::@:9 @@::9A9:@Aj@AqA@A@:@@9@@ ,323øç2]23“3\ƒ23 : ƒ:@A:A@k@k@:: 2:qA@jAkGAAqAA„@$39:33 3AjA@k@A@kA@j@A:@kAk 3 :@A]32øçU2332323: 99 qAqG3 ::qA@AqGk@GrAq:A@GkqAAjG:kAkAAGAqAk::  @:@Gk@::@k@AGq 3 @::c]3øåW23]2,23G@3 A@kG3@AjGkAkGkqAAqAqAG3:9A@qqAkG@q4@@:qAqA@9:33:@@Ak:@::@:@:@@kqA@9:@øä23]23,929::4::3:9 ƒ:F@:@9:@@ A@@AjA@k@AA@3AGkFkA94@k@3GqG:: @@A@:@4@@A@::@@k@A:: 9:9::@33ôá`232,98, 3339: ::@:@3@:@:A@@kAq@A@qAGj@A@39 :@8q:@:@A@@:@k@Ak3@A@j@:A@@3:Gk@@::@:::A:óà2]ƒc ,322 9 …:+@:@:9@:@:AjA@kAkAjAAq@:AkAA@@:@cA@A:AjAk9ƒ:@:9Gƒq :A@3@;@@A@Aƒ@ 3 3:@::9 òÝ>2]2]c-838: 2: 933 9 93 :rq :33A9:@::9Gj:@:kG::@ @@:ƒ@%A9: Gk@AqH: :A@A:3@:@kq@:A@:@ 9: 9 ñÜ2]cc33ƒ2 2  „:@:@:@:@A@@:99:9ƒ:@:@:@ @kA9:9Aq:A:Aq:@Aj9ƒ:&@A@::@@:3::@A@j@@:@:@AkA9:@A:3:@@:9:3 ð܃c 322c 99 3ƒ:@:@:@ˆ:J9:::::9::39::@AA9AGAq9GjA:@@;@Ak@kq 3@ qrG@qAqAA@:@:@A:@:A@k@:@AA@;@::ðÙ]2c]c]232 3:3 „: :9::@:: ƒ@N:@9::@:A@k@@:9:@@:@:9:A@qqAqqHqqrq@:@3AA 939qGk@Ak@@jA@Aq:9:@k@kAA@:k@k@3: :ï×)223]c]c]: 3 9 9A@@:@@9AqA@kA@:@;@@:A@@„AGkAGkG@A:pAAqGqHqqHqrGq:ƒ@k@A@A@k@A@A@A@;:qkAAƒ@A@q@@AqAGA@:3 3ïÖ3,cc3cc32c3 9 @::@:qGA::@::@:9::9 qrrAjAkqAj:@A::@ƒ::GkGjAqAqHqqHqrAA@:A@@3@39kAq:q::@9GAq@:AjA9:@@:3@@j: 9@:îÔ223]c2]b32: :@3::9@ƒ: @:@::qGqGAqAƒ:L@@A@A@Aj@A@jAqA@:@:qAqrGrqrGrqxGqkGkG@A@4@A:9AGjAq::@kA@@j:@A:@AdA@A@::@ ::îÓp23,3c]3c]i3 :9 :9@A@A@:kqAqGqGkqAqGqAqAAjAjGkAA@@A@AkGk@@qAAGqqHqrGqrqGAk@kAjA@A@A@9AA@A@A:@k@;@A@:k@A@Aj:@::ƒ9îÒ2-23c32c 9::9A@ƒ:kAk@AAqAk@;@AA@:@:@Aƒ@:3Mrwqr„q'A@kA9Aq@ArwrwrGr@:@@GqqA@@:q@A3@q33@AjAƒ@::@@::A:@A::9ƒ:: íÑ232c,3]9b9b9:A@@ƒ:…@Aj@A@qG„qrƒqOGqk@k@A@k@AkAAGqrG@::GkGkGq@A9:9@@AqqGr@AjA@k@:@:GA@@qA@;@:@:@::p::p:93 9:9 íÐ,323]c3]]2::@:@::@@:A@:kAGƒq6HqGrGrGqHqrGqGqA@AAqGk9:qAqAqGq:9AqAA@AAGArqrqHqGkqAkƒA!q:@AjA@k@@k@kA@:@:@@:A A:2: ::9 ìÐ232]cc23b93@:@::Aƒ@qkqA@AkGqAkAkAA@qƒAqƒALqAqkG3rwr@G@@A@kAG:9Aq@kGkqqGrGrqA:@rGqAp@qAqAA@@A:@@:@k:@:A@::@Aj:A:9 9ìÎ'c]cc33]32cb@::@Ak9@:A@kGAq@qGqAAFkGwqqGƒqQAjAqAqA@qG9AGqAkq@AkGk::9Gk@3A@:@33: q@AqrGkA::Gk@k@jqq::@A3 k@k: @:@:@3Gk: :3 ëÎ,233\32ccb@::@@„:dGkAGkAAqAqGqqrGrrGrqrHqqHqGqqGkGkGkGqA@AqA@qAFA:9GqA:@qAqA 3 A@qGqAqA@kG@A@;GAA@A:kA@@AA@:@@:kA:Gk@ƒ: ëÍ2 ]2c3]8cbA9@A@:@@AjGkAƒqKGqAqrGqqGqGqAqGqGqqGkGqGqrqxrqrqqAqA@kAjA9AA@kGAA:@q@A:jAqrqGq@:Gk@@k@qAjAj„@ A339@A:@A@@ƒ:@9:ëÌc3c23ƒc88ch:::@::@AjGA@qGGqAqqHqGrAqAqrGkGkGrGqGkGrAqG::NqGrqGk…@8;9kG@@k9qAAj@A@AqHq:@:qGk@Ak@rAA@A@kA:@@:@:@39A@:@ @:4ëËy]c,c]cc“c9 ::@AkGk@AqqAqAqAqHqAqqrqGrqHqqGrqqrAqGqqGqAq:GqGqHkGkAAk@::@@k@ @Aq9@:AjA,]::GqA3GA@qAqq@A@Aj@:@:@AA39:Aj3@::99 êË2323ccŽcib::@A@k@A@k@GAkGqAƒq>rGrGqHqqHqqHqrGrGqArrG:qGq::kGkGqAGjA@A@::@A@k:A:9 39c] 3 Gq ƒ:@k@AqGk3@@:A@;@†: @: @ 3ëÊi2]c]cc]cŽ“@::@kAGkqGAqqAqqGkGrGqAqrGqHqqrGrqrqGrqGqq ::rrGAqA@A@kGqqAqA@:@A3:9@ @@3]@:@@ 3AF3A@k qAG9„:@:@:qGqG3 @@33:::êÉ23cc23]ƒc0ii:@@A@k@Gk@kGqGqGkGqGrqqHqqrqrGrqxHqHqrqGrGqr:Gƒq"Grq@k@kGqAkGk@::@:@ 93GkAq@3@:@k@@ƒ:A@ @qk9q:@:@:@3@AkG:@@:AA9ƒ: êÉ23]33]…ce@@AjA@AkGAqAqAqrGqrGk:HqqHqHqxrwHqxqqxGrq@rGq::GGrqGqGqA@AkGjG@Aj::@: AkFA:@]c@A@A@A:9:2 ,AG3qHq:99ƒ:@AjA@kAj::9 3 éÈ323c2ƒch’c@k@A@k@@kqGqGqGkqHqrGxqxG@@rqHGqqrGrGqrwrGrrqNqkGqGqlGqAq@AqAk@AA@3 :9:@A:q::9Ak9:3:k@3 @@: qGqGqA A@ƒ: @AjAGkG39ƒ:9 éÈ]c2,ƒcyc“c@@AqA@A@qGqAqAkGqGqrGqqHqrqr@rwqH:xrqG@rH9rGqrqGrqGkGqAqGkqrAF@:k@@A2::@:j@AFA9::@:@@GA3::@:q::qrAq3: @:@9:ApAq 99:éÇTc23]ccŽcih:AjA@jAqAAqGqGqHqlGqrqHqqHqG@@rqrG:qNq:@3Gqr@GqrGrqHqGqAqGGqAkAq@Ak@:@A9ƒ:&@k@:@@3 Ak@::@3@A:GqGq@ j:@:@::9:AAƒ:@:93éÇ]32…cjŽc“ijA:AjAqGkAqAqAqqGqrGqHqqArxrr:xHwr@xrxrrxrxqxAGqqGrqqBqAkGkGqA@A@@A@::qAA@A@A@:@AA3AA@@::9 ::@A9qHqG43ƒ@:@::AGjG:@::9:êÆy223d]cc]bA@@qGAkAq@qAqGrrGrGqrGqrHwqrqGqGrqrqGqrMqGrxHxkqGrqGqGqq@qAkAApAqAj@k@::@Ak@:@@kA@3@@jAAF @:9:Aqrq:A::9;G kGkGjA:@: ëÆ3c3ƒc1]c]cci:@AkApA@@rGqAqqGrqrGqrqGrrqNqrqGqrGrqGrqrqGƒqHqrGqHqrGAqHqAqA@AjA@AA@9ƒ@-A3::@:@@A@ :jA@93:@::qGAA@@:@AkGjGqAAp@A@9:êŃc]]c]ƒc4i@@AjAGAkGkrqGkAqqGrGqGrqxqNqrGrqrGAqxGqGqHqrrNqxqHƒqDHkGqGkGqGkA@Ak@k@@;:3Aj@::G3::@Aj]9:@@A9 @A@qqA@k:@:@:qGkA@qA:@@4:êÄT3c3\3cc]cd’:@AAj@kGqGGqA@xHqrqrqrrGrGqrGqHqGqqHqrqArqGqGqGrGqqHqqGkAqqGqqGq@@Ak@@:ƒ@/3 ::@kA@@:@:c::Aj::93@:GkqA@::@:@@Aq qA93A::9:êÄy\”c]c2]cc]cii3 k@AqGkAqq@qrGkGqHqHwGrqqGqrwrxrrwrwHrxqHqGqrqGrrGqHqrGqGkGkGkAqkGqAAkAkAA3:9@@A@k @::k@::9 9AkGqGq ::@:@ Ak:A@AA99@:@:êÄ%33c2]“Žc]i’i:@@kGkGqAGkHrqGqqrqHqrqGƒr/xqHqrMrrNqrwrqxqrrGrqGqrqqHqrGrqHqAqAAGkGq@GkFkƒ@GkGkƒ:@A3:9:@@ƒ:3A@kGrq ::@:k@G9:qqG@„:@êÄ]“]]3…cyib:AkGqGkAqqAqrwrGkHqHwqGrqNqxGxrxqxqxqrqNqHqHxqrGqArqH@qrGqAqqGqAqk@AqAk@AqAAkAqAA@9G@k9A9::@ :9 @@rGq3@:@:9Ak9Ak@;9@:9@êÄyc232cciiqG@kGkGqGqGqGr@AqGrqrrGqGrqxrxqxHrwHxrxqrxxqrMqrGqqN@rqHqrqHqrGkGGk@Aq@AkFA@@A:@kA9A@A3A99:A@@k@A@3@qkHA@::@:9::Aj@@ ::@::éÄW]32,3cŽcŽc“hkAqAqA@qAqAqqHjAqqGxGqrAqxrxqHxqxqrxqNqHwrqNqrGrqGqAqrGqqGqqHqAqAkGjAGjA@k:„@&A@@A:j@A3@A::@@:Gk9::GAjAk@A:9 :@A@A:kƒ:@:9éÃy2c3cŽccci“@AkGAqrqGqrGqrGxrGqqrGqGkxGxrwrxrNqrxrxqrxrxqHqxrr@AqrqHqrGqqGqAqGqA@kA@A@@:@d jAj:@A:@:@:@;@k@::AqAApA@k@ :@@Aj jAF:@ƒ:éÃy3c,3c]ccdi:@@AjqGqHkGqrGrqrqrGrqxrqxrxqxAqNqrxqNqrGxqNrqGrxqxArwHqqHqqHqAkGqAqGk@ApAkA::@: 9A@:A@@3:@A:@@:q AAqGqAq9: @:qAGk@:@A@:@:éÂ]2c„c\ccibk@@qAGqqGqrGqGrwHqGqGrqNrGxqHAwArxqNqxr@r@AxqxqAqNrwrrwrGqrGqArGqAqAqA@AqAq@q@kGkAk@k@ƒ:" :@:3A@qAjGkqGkA@A@3 3Aj 9A@kA@:: éÂc,c„cQdi“@A@AqkGrAqGqAqrqxrqrqNrwrxqrGqrAprrqrrwrwrAwArqGqrqxGxGqrGrqGrqGqGkA@qkG@qAqƒA&kGAjGqGA9Aq93::@kGAA@qGqGA@@::@ :9A 3ƒ@:::éÂyc2c]c]cch:@kA@qGqGrrGqrGrGqGqrqrxrqNqGrwrAwHxqN:xHwrAqxrGAxqrxrqHqrGrqGqqAqGqA@GkAAq@AjG@k@A:Gk@A9AA@ q: kq@kGkGqqA:@:@:3:qA9A@A:@@êÂc,3cc]…c'“i@3::@;q:rq@:@AqG@rrHGGAqGA@::A@::9::ƒ@13993 @::@:9 989“i“AGk:@k@ j@AqGAjAApAj:AjAAƒ@3 @@ qGqrGrqrq::@:@:@9A:@k@:3:êÂc2cc3c]Žci“::@:@@qA@ ƒ:a@:@:A@jAj@:@::9::@::@@:@A@:A@;@:@ :9:::@: @:\i“h“cA@  , @:@k@: @A@@A@:@3@3A@A3@qrGqqGrGq:@:@ƒ: 9A39A@: @:êÃ-c„cci:@:@:@;@A@:3:@:A@jGA@A@@†:)@:@@::9Ak@A@:@@::93:9::33::c’i“icc]2,c9ƒ:"@kGqA39Ak@AkA@ ]3232]]A A@G:@ƒ: 9::A@ k:@:3ëƒc3]c]cŽcci@@::9ƒ@k@3@::@k:@A@:k@:3@:@ :@:@:A:@ƒ:@k@kA3ƒ:9:@:::3cb9“c™“c989: 9ƒ:- 3c 3@@AjG::3  3,32:99A@kAk@:@:@::k @:: 3ìÁ]cc3„cŽc“„::Aƒ: :9:A@@:k@A@A9A:@399„:@:@:@@::9:@39@9‡:B@:cb8““i“2“,9: 3::@:9:9A@kA39A@k@@@::3A@:@Aq@A:9:@9@ 9:9 9ìÁYccc]c]ccci@::9 :@@:@9: @@:A@A@jA@:@: 39:9:@:@::9@: @:: :9@@:@:9 9c8“@™8c8: @:9„:@:@ƒ:@@Aj@A@3@:3:@:q@kAqA3: :ôÁ3cc]c]cc]cŽci@:::@A@@: @3A@:k@jA@@::@9 :9:@@ :9:@ƒ:@kƒ:9@ ::@9: :@3::bc8i„2A:@A9A@@9 94::@@k@Aƒ@9 ƒ:Gk@@;@Aq@::33 3:9ïÂ3cc3„ci“A9:ƒ@'dA@:94@k@@:A@kA, 9: 3:::@kA:@:@:9:@9ƒ:I9:9::@A9:@:@@A:@k:A@3@:93 3@ :9:@:94@:AjAk 3 kAGkG:@k@AAq:9  3 :9íÀ#c,c3c]c]cd“h@3;@;@3@::@:A@@:@:@@†:@::@:ƒ@ : 3 3::::ƒA@:9:9:@3A@AAk @:: A@ƒ:, 9:@:@:@A@@A@3:A9@qAq@Ak@jG9@493:A@@:@::ìÁc3]c]ƒc]ii@A:9@k@@A@33GjA@;@:k:@:@9„:9ˆ:@:@:@@„:ƒ97::@::A@3kAqFA@k9 3 3 @::::AjA:kAq@:@:AqAq@@A@Aƒ:k9::@Aƒ:@99:ëÁ]2ƒc]ccii“@@4@@4@:3 9:A@:@@:@@:@ƒ:@ @ƒ:ƒ@:@ƒ:@9:9:@: :@ :@: ::3@3A@::qAGAkƒ@A3:@: 9::@AAjA@A93A@Aƒ:9 q3Gk:9A@9:@@::3: :ëÁ13c]cc]cch“hAk:9A@3A@3@:@kA@:k@A:@:@:@::@::9:49ƒ: @:@:: 9A „:.: :@:9:@ AkG:AjAq@A@@39:339::@k@ApA@A@k:q@@„: 3 A9:9:: 9::@ƒ:@::ëÁ"]c]c]cbi“i@@::@@A@A3:@A3@:@A:@:@„::@ƒ:$@::@:@:9@A::: @@::9::39:@:A:39 3 9‡:!@ :: 3@::@:9AAjA@A@@:A@:@3Aq:@ƒA@…:@ @ƒ:9:êÀ]ccc]ƒchi’iA@A@:j@::@@:Aj:@@ƒ:>@:3 :@39::@:@@A@:@9:9@A::9::39@A:A@: AGk@@:@:993 39::9A :ƒ:3@Aj@:k@3Aq9A:@:qA qƒ@: @3@::: è¿c3cc]cc2cbi“i’A@ƒ:@A:ƒ@8:@:@::@:@::@:9:3:9@:::4@:@:@4;@::9:9:9:A@AjA:pAjA:@…: …:& :3@:9::@@kAA@:Gk@AApA:AFkAq@k:@499:9ƒ:93ƒ:9::æÀQ\cc]c2ccib“i“@k:@@A@@j:@:@::@:@::9: 3 9@:@:@9:@@A::@::@k:9:::::@j9:9:@@ @@Aƒ@9:9A::@:9 :@::::A3:@@kGAj@Aq@@kGqA::Ak@@:A@ :::@:9:ç¿-]cc,c]]cbci’i“@A9@:jAjAA:@@: 3 :9A9: 939::A†:@:@:@3 A9:::9„:@:A@„:C@@;j@Ak3@9 9 :9;@@::@ 23Ak@GkAqAjA@@:qA@q@kG:@@A@:@:@k@33:@::@:å¿cc3c33c8chi“h“A9A3A@:@A@@ƒ:@:@†: :3::@:@9:@ƒ:@:@3::9„:9::ƒ@::9@@A:k@A:@@3:@…: …:/Gk: :@@3::@AqAG:@qAq:A@AqqGq@::39A@A@3:A@A3:9ä¿O]c2]c\]chch“i“@ @3@3G@k@;9:9@:@:@:9:3:9::9:@::@ :9:@:@A9 9:9:@:9:@;@:::@@Aƒ@::@::@3@: @9: kG@::A@A9@@3 @kƒ:G:q@::9AA@A9 3@@A3 :@@A@:@:äÀ2]c3c3bcic“h“Aƒ:@Ak@A:3 :@:@@:@::: 9: :@:9ƒ: 9:@:@:9„:9:: ƒ:@ 9:9::9:993 @A:@ƒ: 9::9499A@ƒ:+@@k 3:A3@A@qAq:@;: :@k@@A93@A:@3:@AjA:9: ã¿c,cc]2c8ihi’“ij::9 @Ak3@@:9:@ƒ: @:@3 :3 :9ƒ::ƒ@::@A9ƒ: @@:::@9:@@Aƒ:@:9…:B :j@:39::@::9@:@@A@@::@3@@A93@:A:9 9 3 9AdA:9 3::@A9:@A@::9:9â¿.c3c]c3b3b“ci“@G:@9A@k@A9 :@:@:A@:9 9:3::9@:9ƒ@;ƒ:@::@::@::@: :@:A@@:@ƒ:F@@ 39:3:9::@:: ::AjA3::GA3:kA9 :3 @ 339Gq Aj@: 9@A@:A@@k@A@: â¿+3]cc]3biibi’i“@:: k@@3@A3::@:@:@: 3 :99:@†:@:@:@:ƒ:Yi:-9 3 9::949: 9::9:3 @3 A@A:9::99 3@ @::9Gq9A:3:@qq:A3::3G@j@A@: 3:Aj:99:@:@::9::á¿2cc]9\9bi“b“i“ƒ@AqAA@ , @::@:@:@3:9:9…:?ƒ:9:@:@@:3:9 Œ:9:@„:9@: 93@3 9:9::9:@„:@ƒ:'@::A@A@:@9 A::A99:@@Gk@::@4@:A@@:@ :@„: @;@:@ :: á¿ c]2c]c2ibii“hAkA:@Aq@A3:@3::@:@A„: 9::@9::@::@:@:@:9 :9::839 :@@9ƒ :: 9: :9:@::@::99::@„:2@@A:j@A@39 33:@:AqG:@9A3 @AjA:@:9: @::@:@:3::? á¿$,c3]3c2ic’i““hG39@A@q: 9::@:@::9::@…:@:?ƒ::@:@A@4:3@:9@::@ƒ:@:3ƒ:9::@ 99„: 9@„:,@:9::993 A, 3 3@A9:GqAqA@k::9 3@@A@:@:9: :@„:@::9: 3á¿2ƒc]9bib“ih““@ @AjqGk :@:@:@:@:@ƒ:@:@::9ƒ:?„:9:A9„: 9:@::@@:@:9@@:@::@33ƒ:@ƒ: 99::@9: @ƒ:-9:@3kGA jAqAq:AG9: A@4q@k:@4399 @:@:@::@:á¾$]c-c]2ccbii’ii’A:@@AqAA@94:@:@;@::„:9:@…:@9::@::@:@:9@A@@: 3 ::@::@…: 9 3:9:A:@@ƒ:9 @::93 @::3@::::@kA::ƒq 3A@:9::@ƒ:9ƒ:9ƒ:â¿'c2c]c]bcbi““i@A9AdAqAq::9:@:@::@:3 :@9@…:?:9::@:@@9:@:: ƒ: -:ƒ:@ƒ: @::9: :9ƒ:@k@A: :9A@: 3 q@:@:39„:9@:G9:G::3@A@::@:@::9::3::ãÀc]3c3bichi’““@:@@AqGkG:@:@ƒ:@:@3:@ƒ:9::?ƒ:@ƒ:@@A:A93„@ƒ:9::3„@:ƒ@=:@::9:3::@9:@@A:9@:@3@A:@@: :9:::9::4Aj:qGq:G3:::@9: 3 ƒ é¾,cc]c2]c8ch“iih“G:@:AjGkG::@:@:@@3 :@::9::@ƒ: 9:::@k@:@…:@:9:@@ @ƒ:@AA@@:@@:99 93::ƒ@ ::9::@:9::9…:@AAk@A9@::GkG:q@ :9ƒ:9:9:9:ê¿ ccc]bchciŒi“Aq:@@AAkGk@:@::@:3„:@‡:ƒ:@::@A@:@::@:@39:@:A9:9A9:A@ƒ:9:9::3 9ƒ: @;9@:@@:9„:@:@:@:@kG@k:4 9::Gq:k :9@:9ƒ ƒ:9ê¿,,c3]c8ccbii’i™A:Ad@@Aq@::@::@:9::@9::?:@9@@ƒ:9@ƒ: 9:@:AjA@:ƒ@A@:@A9::@:9A@:9A@::::9@:@:@:@„:&9::9@::@ :@@94:9 9:::@3:G:@:@: :@:9ì¿c,3c]8chch“i““qA@@kA9Aq@ ::@:9„:@::@„: @::@::9::@:@Aƒ:@A@„:@:@:9@::@k :@:99:3:3: :9ƒ:& 3 3::@@:@::@:@kGk:A@Ak@:G:q:@:93:@ƒ:ì¿%c2]9bcbii“h“’Gq@A@q9A@:99:@ ::9:@::ƒ: 9:@::9::?@@ƒ: 9@:@::9::@::@ƒ:@@A@@ƒ:9ƒ:99:92: :@:@::@:@ƒ:@:@:@AAqGG@@qAG:qA9G:3@ 3:9:9í¿]233,8cchib™“™AAj@Aq 9:@ƒ: :9:::@9:9:@:„:@9::@AAƒ@::9…: @::@@::@:k@Ajƒ@8:@::4: 94@::@:93::@:@:@@:@:@:9:3AqqA jA@:k::@: í¿2Ž2338chc“i““iqA@AjG:@ƒ: @:9::@:@::@…:9:@9ƒ:@::9::@„: @::9::9::@ƒ:@::@A4:@„::9 :9:3:9:: : ƒ:AA@Aƒ:@:@:@AkGkAq3AAk:9A:::@î¿2d2]2cbchi’i™’Gk@A@q4@3:@ƒ:@:@:@ƒ: @:@:@:::?‡:@::@::ƒ@G:9:@:9:@9:@@::@:::9 :993::@@3:@:@@jAj@:@:@:@:Gk@GqA jA@@ :9 ::ï¿]c338cbi“i““™Aq@k@r9:ƒ:9@…: 9@::9::9@„: 9@9:9:@9:@@ƒ:@::9A:9@49A@9ƒ:9ƒ: 9:9: :: ::@:ƒ:!9@@A@@::@:@:@::@k kG:GkG:9@;2 :9ᅢc&]\8cchi’i’“™A:@A@ @:@:9::@:@:@@::@:@:@ƒ:@9„:@:@:9:A9@:@9::@@ƒ:'@@A::A@@:::::9::9:9::9:@:@GkA39;@:@Aƒ:A@@qG3ƒ@qAq 3@ 3ò¿#cc3]bic“i“c™“F3AjA3 :: @::@:@::@…:9@:::@9:@9@@A@@ƒ:@‰:@@A@:ƒ@:@::9ƒ:9ƒ:*9:::9:@::@:@:@:@::@@:@:k@:Ak qk:9: 3A3 ò¿„c*3cbchi’cik@9A@A2@::9::@:@::@::?:@:@::?:@„:@Aƒ:A99:@::@:@:@:@::A†:@:::99:9:: :3::@:@:@:@ƒ:@@::@:@:@kG@3G9:@ 3 @3ó¿c]Ž]3„ccŽiŽ“Gƒ:@@ „:@@::@:@::@::::@…:?:@:@:9…:A@:@:@:9:@:@:@::9::@::@::9ƒ:)::9:::@:A@Ak@4@@:@A:@::@::@A3k:@:@3 9ô¿c3c\„c%cdij@A:Ak 9:9::@:@::@::@:@@9::@:?ƒ:1 9:9::@:@:@:@:@:@:@::A@3@@::@::9:@:9:@9::3@9:Aƒ@:A@::ƒ@::@:@:Gk@3@:@ƒ:@3õ¿ccc]c]cdccoAq@@A@3:3:@ƒ:@::@::@9::@:@::@@ƒ::@:@@:@:@:@:@:@:@ƒ: 9::@:9::@ƒ:9::ƒ: @@kA::@@:@„:@:@:@::@:@:: 3õ¾%]2,3c]9]cccŽcŽ“@kAAk@:9 9 ::@@::@::?ƒ:@ƒ:@:::@ƒ:9::@:@ƒ:@@;@:@:@:@:9::9:@ƒ:@::@9†:%9A@@:A@@:@k:@AA@::@:@:k:9:@@::@33:ô¿3c3c]cccdc“iq@GjGj@::3 @ƒ:@::@::@::@:9::::@„:@@:@A9@::9:A::@A::@A::@ƒ: @:@::::99…: A@kAj@:A@:@@„:@:9A:@: @:: ::õ¿ƒc3ƒcccŽciAj@AA@A@@ƒ:@@::@:@†:…@ 3@:@:@9@:@::@ƒ:::@ƒ: @:9:@:@@::@@„:9:::@:9@:@A@A@AkF:@ƒ:9@:3:9: :3A:@:9@33:õ¿*ccc2c]cccdijA@9A@kA:9@@ 3:9@::@@:9@::@‰:$@: :@::9:49@:9:9@:@:9 :33: 9:9:9 ƒ: ƒ:@:@jAk@@A:@:@9::9ƒ: @:@9::@:: ::9õ¾c33ƒc]dcc“A@:Ak@q@::@:: @::@ƒ:@:::9:@@::9:@@ƒ: @:@A::@::@@ƒ:@::A:@:A@:@:@: :@:3 :9:@:@::GA:ƒ@:@ƒ:9:::ƒ:@:@3 :9:ö¾3c]]c]cccŽci@Aƒ@Ak@::@:@@3:@  9@@ ::@…:@:@:@:ƒ@:9A@9:Aƒ:A:9:A9::9:@@::@„: 9::9@:@@„:jGjA:@A:@9: 3 3::@:: : 9: ö¾c3…c]ƒcŽ“GjAjA:@A@::@::@9:@†:@ƒ: @::9::@:9 ƒ: 3 3:@9@@:9A::@„: 9ƒ:9@9::9ƒ:#9A:@:@:GA::@k93A@: @@::9:@9 2 : 3÷¾cc32ccŽccdcc“@A@A„@;9::@†:6@:9:@::@9:@:@::@::9:@@A:@A:9:A@:A@A@::@@:@:@@:: :@ƒ:ƒ@::@@k@@…:@A:: ::::@@ :: ƒ:ø¿]“3c]]ƒcci@k:@k@;j@@ :@@:@::@:@:@::@„:@:@ ::@„:Aj::@ƒ:@A9A@:@A9::@::@::@ƒ:+@:::9AAk 9A@3@:@:9@::9:@9:@@:A@3:3:@3,õ¿cc]23cƒcŽcd““ƒ@9A@@A:A: 3:@:@:@::@::@::@:@: 9:@@::9:@::@:9:@A:@k9:@::9@„: @99::@: :„@3A@„:@ƒ:@†: 3:9: 393ƒ32c]ð¿cŽc]ƒc]Žccc“hA@::@:@j@::9ƒ: @::@::@::ƒ:@::9@:A@::@:9:@A9::ƒ@:@A@::9: @@:@:ƒ:(@::9:@@A:A@3:@:@@::@: 9:9:9::@3:9 ø¿c”]ccŽƒcƒci“@A@qrk:@::@@Aƒ: 9:@:@:@@:@:@…:@::@:@@A::@@A:@:A@:ƒ@Aƒ: @:9::@:@::ƒ: qkAG@A: 3ƒ: ::@ ::@…:9øƒ¿”c32ccc]dib@:@rGqA:k@:ƒ9ƒ@$3 :::@::9@:@: 9::@:@:@k::@A:@::@ƒ:@@::@ˆ:@9„@:@@:@@::9: 993:: 2 ::@3::39øÀ“”c]c-cŽcccc““Ak:qAq@@ƒ@::3@ƒ: :@A3@:@:@:@:@„:@:A@::@::@::@::@ƒ:ƒ@ƒ:9:9:@:3„:@A@:j;@::9:9:3@@: ƒ: øÀ]ccƒcdcihA@@qGkA@kA::@:9::@:@:@:@ƒ:@ƒ:@:@::@:@@:@::9:9A9…:%9:9:A@:@:9::: 9:9A@k@AAjA@:@: 3:9ƒ ::@3 9:@:, øÁcŽc3ccccc““ij;qGqq:ƒ@ ::@:9::@ƒ: @::@:9:9@@ƒ:9@:@:k9@::@ k@:@@ƒ:1A:@:@:9::99: :@:@:@:@:9:@:@3@::A3 2:3:::9 9øƒÁc3]cc”]cŽcci’:@GrGq:A@:@…:@::@ƒ:?::@@:@ƒ:2@::@:@:A::::9A@:@@:9@@::@:9::@; :9:@:A:@A:@3A:@ƒ::: @@:93@::93ø„Á,9Žc3]]Žc”¾]“i@:A:kA@::@:9@:9@@99@:::@ƒ:@:@:@::@:@ @99::@:9A9 :9…:ƒ:9 3@::@@:k@A:@@ƒ:9@:A@3ƒ:@9: 3 ø„Á]“cccc”]c“”cbiƒ@(AqAA@::@@::9:@:@ :@:9@:9:9@ :@@A:@:Aƒ:@ƒ: @k:@:@:@ƒ:9:9„:@ƒ:@:@k:93 9 @::@ 3:@@ 9ƒ: 3 9ø„Â]cc]cƒ#3]]c“kAk@Aj@kGk 3@@9:@:@::@::@:@:@ƒ:@ƒ:9:A@:@jƒ:@@:@::@@::@@::@ƒ:3::9A@@:A@@:Aƒ:A9@A@:9 9:@3 ::@ 9 3ø…Â3dƒcŽi”cccc™@AAjGAqAA@@3::@:: :@‡:@@:@ƒ: @:@:39:9: 9ƒ:5 :9 ::9@::9@:9: 9:@:A@:@k:@:@:@9::@:: 3: 3::9:33ø†¿ 23c”cc]†c @kFAkAA@j:@:@„:39A:99@†:@:9@:@;@:@@: @:@A:@:A:@†:9 9 9@:@kA@::@:@::@:@ƒ:94@ 3ƒ: 9 3323øƒÀ4ccc”cŽcc]Ži“:A@@kp@@AqA::@:9@ :@: 39@:@::::@ƒ:ƒ@„:9Aj::@ƒ:F::@@:@: 9 9 ::@AqApƒ:@::9:@:9:9@:3@:3 3 ø‡À233c””cc]cŽ“cib@@4GAAƒ: @@: @@:: :9:9ƒ:9…:@::@:@:3 :@9 9 9 :@9@@ƒ:)9 :@9::33:@A@@A@A9::@@:@:A9:@:::9 39øˆÃcŽ,cc33d9bA:@9k@kG:@Aƒ:,9::9 A: 9:@9@:9:9@9:@:@:@k:@:G:@:A:@@:@@„:@9ƒ: @:j@@ @@ƒ:@@: :ƒ:3ø‰Â]93“3ƒcg2cc]ch:@:@A@k@3@:: 9:9@3@@: 9 3::::@:@:@:@A:@::@A::@A::@:@;@::@::@:@A@:A:@:@: @: 3@ :@9:9 : 3ø‰Â!3c”23]3cŽcŽ“3bc::@A9GA@@33@: :9„:3 ::@ƒ:9„:@„:93::93:99:9:9:9 ƒ:$9::::@9@:@@::@@:@:9:::3@39 3 3 øŠÂ-]c”2”3,cc3“Ž“3bi:9A9:@k:@:: 9 9 :@::9:@:@ƒ:@9 : ƒ:!@@:AA@:@A:@:@A@:9:::9 :@@:A@:@:@„:@: @: @:@: 3 øŒÂ c]”½]]“Ž„c]c]8@A3qA9A@:@ @3ƒ:9 ::@:@4943 9:@:@: ƒ:@@:@A:ƒ@A:@„:@9:9 :A„:@k:@9::39:@ :9::3 : ,øŒ«]2,’ ,9]”c3c”cc„c&“i@:: 9A3 @33 :@::9: :@::@9@:@::@:ƒ@:@:A@@:@;j@@::@:9::9::99@:@…:9: 9ƒ: 3 3 øŒªcc3“.c2]2dc3cŽci“@:@@49@3 k:@:@4:9:9::9::@ƒ:@:@™:: 49:@ƒA@Ak@::3::9:3@ 9:3 ø«cŽc22„,232ˆ23]23c3c]ccƒc“i94@ 9G3A@3A@ @:9:3@A@ :@::@Ÿ9@AA@@AjAj@: @: 99ƒ 9  ø«233ƒ2c3]2ƒ22323]c2cc2Ž“]ƒcŽc“h43@::A9 @@3 @94@:@ ¨ :A@A::9 3 ‡93 33øŽ°32Ž]c3ƒ,,232„cŽ233c¾3Žcb3894:ƒ@ @4A:ƒ@3:´3Š ø²23,222332c]cc]]„c]2dc¾cc38]8q@†3@9@:3:@Â:-ø±32,c332-]3\9]2†33c3]Ž,”“¾ccci@ ˆ3 3 Ã9ø‘²3332323233‡]cc32”“Ž“ccŽcc“@A3‰@@393 øÓ³ \]23,32323ˆcc]cc޽”¸,]cd23@@ @Š: 3 :øÐ´„32]c]c‹Žc“”¾“”3cc“22Aj Œ 3: 3 øÎ·,323cc3‹c]2,”””]cc3b“22Ak  9øÍ·3]c]]3Œ]cŽ2c”¾]c”29“i@Aq  øÍºƒc 3“”3]cc“cŽŽƒ2A@:@3øÝÒŽc3ƒc322@@AøÜÒ cc2ccŽ29“cƒ3øÚÕ2Ž”“”høßøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/- ­/‚rGË‚rG-ÉŠÉÉŠ2ÌŠ /Ì–F¹ËÌ–F¹- OÉ O2 O / [H£Ë [H£- ^þÉ ^þ2 aþ / b JùøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø£,ø øž2]23322øžø32,3ƒ233]øøœ 2,c29\9ccøøš2]]ccibihc]øœøœ ]ibccbcihcøœø˜23]icibichcbcøœø–23]c28““b™“™bii“]øœø•3]2]22cbii’i“22biccø›ø“2]22382cihi8“2ch]ø›ø’]c228]8cchcih“8c“2ccø›ø‘cc,2c“i“2cbi“h“ib2ic]cø›ø‘2]32ch™i“ibch““]92cc2-øšø]2]2]3‡c328““i““h82ic“ic223ccccøšøc323ƒ2!323,329\ @@A@3ci2c™’“c3bcd]cøšö]2322323233,2„cƒ2 :9AkG@@c8ƒ“ih]22]ƒc3]ø™õc232]ƒ23ƒ29„232:AA@“8kG22“hibcc]33c32322ƒ,ø”ð:2,2323239238b 3 c9:2c qGAb9kA29ib9c@: 2b32,3,-229]]ø’ï]3323228233 :9:: ƒ:@::9q2cGq38““@k@A: 2323,3]…c]cø’ê2]2cc2]3223229Aƒ :AAq @:Akƒ@AqA@kG9cAqA@@ƒ:22-29]9]]c]323 øæI2323]32-222 @A3 339:@949:99A@AkA@A@AqAAh“@@k@@28cc232,c]c :@399:øå3c]]„2?2c2:: 39 3 93:93 :9::9:@:@::qAkG3A@A@:ŽAb83@3c @ 33A@::@ƒ: 3øŠâ]232]c]232 3@393:9ƒ:9:: : kAA@@::@:…@:@:@3q@A@A@:@@::@:A@@„: @A@:@: ø‡ß22]9]cc]8c  : 3 @:@3:::3 3:: :99@@3 3GqrqrqAƒ@ :A9A:3 9:@Aƒ: 9: 39 @@ƒ:@@A:@:@:ø†ß+c]c2]c22::9::393:: 9:9:9:93 9:9  9 @ƒ: 3:rqqAq@@:ƒ:39ƒ:@G::@::@9::39Ak@::ø†Ü2]c32c32c 3 3 9 @ƒ:@:9A@A@AAGAk9: 3qq:9ƒ:,@: 39 9: ::@:A@AqGqq: 99 3:@@:@@:AA@@4Fk@A:ø†Û 2]c]]2]cb92ƒ:@@ƒ:29::@A:@@:@k@::@@A@A@A:3::@@::@A@A::3 q@@3@@A3@ 93„A qA9A@:@A@„: @k@ø†Ù5]c233“c329b:9:@::9:@ 9@@:@@;@::@qkA@:@:@9:@A@: :@A@:„@$AG: 3qrq:3@@99:qAp:3A33 ,:@:9@@:ø†Ùc3232]29b94::9@ƒ:@AkGqAjAq@kGAqGkƒqAAkƒ:9r @:@„:!939AjA@AAGGrqHA9:GA:@:@:@@:: @A„:9ø…ÖY,23323238c2@9::@@: ::A@kA@A@AkA@A@@kA@A@AkFAG@@:9:rqrq9@:A@:@:A@@k@kGkGqq:9@3@:@A@A3 @ƒ:@: :@ø„Öb2322cc]]2c894:@@:9A@@k@k@Ak@k@GqqAqkGqqGj@AjA@:@:@:@@:@AkGkGA@@:AqqrGkGqGrGqA @::@k@k@qqGqA@:@A3@ø„Ôc2-c3]dib: :9ƒ:>A@AjA@A@qGqAGkGkGqAAqGqkGkGqAj@AkA@@:A@A@@Aqk@::@A@qqHqrGqrGk@ƒ:9 Aƒ:4@:@:@:A 9 9øÓ=]233cc”ib3 :3A@@AjA@kGjAAkGkGkAqAqGkAkAGAkAqAGkAGk@@Aqrqrƒ@(A@:9:@ArGqqGrqGrGk@:: 3Gq@:@A:9::@:j:AqøÒg]2cŽ2cc]3cc““9@A@jA@k@A@AA@kGAjGkGqA@qqGqGkGk@@AqAq@kFk@A@A@A:A::@A@3A@@qrHqqrqqGAA@A:3 :3:j@:@::@:@ƒAøÑ2ƒcI23]cccch:@:A@k@A@A@kqqAqGkG@AqqAqqGrAqAqqGqAqGkA@AAGkqr@kG::jA@:kA3@A@3@ƒ:@:@:kFq@:::@rk::@:@@ƒ:9:9øÐ>23]]3c33cib:@@Aj@A@k@kA@GkGkGk@kAqGqGqAqGqGqGkGqqAqGqqAjAGkƒqx:@@:@@9Aj@AGAG@AkGkqHq:@ƒ:@@GA:@:@qG3:@ øÏc,332„cS“c@@:A@A@k:GqA@qAqGqAGqGkAqAqHqkrqGrqGrGrqGkqGqA9AkGAAqGqAk@:@:AA3:qAqkqqGqGAjG::@ƒ:@A@:94GkA@::@9÷Ïq]2323Ž”ci’:@Ak:@:@@kAqAkGkAqkqGqGAwrrqHqHqrAkrqrAGkGrAqGkxqrF3GAkG@A@A@@kFA@q3GrGrqrAqA@::9:@3::@:9@A:@: @: ôÏ323„cEŽci:@A:@@:kqAGk@AqAqGqGqkGqqAqGqq:qGqAGqGqqAqqGqGkGAGqr@:A@k@:@::9:Aƒ@A9:33k@AqA@Ak9:@A@ †: 9A@3 93:ñÍ[c2”2cc33cc]ihA@:@k@qGqAkGqq@qAqAqHqAqGkG:Gq:rGqqGrGA9rrxrAqAq3GAqG:@:qq:@::9:@;jA::@::G@AƒqA@@A@:@::@:@:@:@A@4A@::ñÌ]c3]ƒc ]c]cb:@k@q„A::qGAqArGqqHqqGrqAqƒrq9GqGq3rqG3GqGq:qrqHkGkqAqA:A@kƒ: ::@@ƒ:93qAqGqA:9A@AjA:9:@:9ƒ:k:@@q::ñÌ]cƒc)]ccci“@A@AA@jAqGqrGkGqGqGrqGkrGqrGqGqGA„rNqGqq3Gk9Gx@A@A@kGkG9Aƒ@!A:::A:@A@@3 AqHqqA@:@k:@:@::@:@:„@:A@: ðË23c]c]„c,33i@:kAj@kA@qAqqGq@kGkAqAqHqqHqrrqHqqAqGAjA„rxrw::Ak„q5A@A@kG:@A@k@::9@Aq@A@Ak@qqGr@A:A@:@:qA9::@:9;@: @@9 ïÊyc]3c3c]Ž]c“i“:@A@AAqGkGqA@:rGqGqrGrqrGqGqGGqGqGqGkqGAFrG@GqrG@A@GGqAqGkGk@AjA@@:9@:@9::@k@A@ 3::@:qqA@q:GA@@;@::@A@@,A939ïÉ]”c3c\ƒc5Ži’@:A@kqGkGqAqGqrqGkrGqqGrqrGqAqAkqHqrAAqr@kGkqGqGrƒq:AkAqAkGj@AjG:@:@A:@:: :@AjA9:A9A:qGqAk:@kA@::3@@A:k@A9@ îÉc3\23ƒchŽ“cii:@kGGkGk@qAkqrNrqGAqGrqHwGqrqrqNqqGrqwHqqA@qGkGqqHqHqGqAqAq@A@AkA@q:::93 9:@@:@A9: 3 3A@G:GkA@:9@ƒ:A3:9 3ïÈMc]“3]33”]”“@qGq@k@GqGqGqHqG@AqqHqGr@rqHqHqrqHrqrxqrGrwrrGqAkGqGkqAqGkG@@kƒ@k@:@:@:: @::@ƒ:@Aq@:@: qk@qAq::G::@A99 : 94îÈQcŽ32ci]“dci“@GkAkGkqGkGkHqqAqrrGqrqGqAqrrxqNrqxGqHqxqGrGqGrrqGkGqGkGq:@kAGkA@:ƒ@::@39:9:: 93Aq„: 9::@: AqA@„: @:@:@:: íÈcc2c3ƒcvŽci“A@@AqGqHqqHkqGqqrwrqHqGrq@rGxqrwrMrrqrGrGrqrrqqHqHkArqGqA9AAkGAjA@::A:@@ ::A@A@:@AA9A9:AqAqAqGq94:@: @:A::@: 3íÈyc,3cŽc]c“di@AkqAqAqqAqAqHqGrHqHqqGrqH@:qrNrqrxqxGxqxrqGqNqGqqGqAqrGk@Aq@AjAGkA:@:@::99@@:9::@kG9 @::@kG@@3Aq qG99:9:@@k@:A9:íÇT2]c2c]cc”c“ijA@AqAqGqArqGqrqrqrGqHqrqrrqNqqx@GrGrqrqHwrGxrqGrqHqxGqA@qGAkGqAqApAj‡:@A3:A@k :9AAFk@A@q3Hqq 9ƒ: @ A@@::9: ëÆ"c]2c3Žcc”ccŽi“@@kGkGqArqGxqGqHqN„qVrGxqNrqxHqr@rwGGrxqrGqrqxqGqrqrGqAkGqqAqApAk@AAq@@:9:@:@::9 :k :ApAkAk@AAqGqG: :@:@-3ƒ@:@3ëÆcƒ3Mcc]cŽcc“i@A:@:qGqAxqrrAqqAqrGrGxrqxqxrqAqG@@rrq:xxqGkNqHrqrHwr:@qAqAqAqGAq„@ AkA@@::9:ƒ:ƒ@399A@ @ @jA:qAqƒ@ :A99 kA3: :ëÆ]2cŽccc”ci@j:ƒ@:qAAq:rG@AqAG@AqAA@GAGqGGqGqr:@rGrG:xrqr@rxqA@rqNjHqGkGqGAqƒA1q:@@A@@A@@;::@9:@A@A :A2:9@;@k@:GkA :@AkAA3::3ëÆ[cc3dcdjŽc“@9A:r@qG@@:qAGj:AqAq@kAqqAqqAqAGqAqqGk@:GrG@r@r@AqrqrqHqGkGkqAqjG@k@:@jA:Aƒ@ :A9:@:k@3 3A:@qGAqAqA@9A@kƒ@::39ëÅc]2Žccccc“i@@:3:@AqAAƒ::9@@kGkqGqGA@@kAAqHAqqAqrrGkGqrx@qrwrGx@AqNqxGqrGqGk@@AkA@A„:*@j:A:@9 :@:@A@A3A:@: kA94qGqq::@k:@A:A9 ëÅ-cc“3ccŽcŽiŽc“A@: :@k@k@:9:@:A@AA@qA:jA@A3ƒ:&@rqGqrGrq@AGrqxAkqxAqrqrGkGkGqAkG@kAk„@:A:@@4ƒ@ƒ:3:ƒ@:9@A9:@GqA::@:@:AjGkA@99êÅyc3cŽcc]ccŽ“Žij: @@kA@Gk9 A:@@kAjAA@@Ak@93:9@:@:: :@9A@A:q:@AAFAqGkGGqGkGqqAqAqAkF@Aj:@;@@9::@@;@:9: @3@;9:@:3G3Aqq:@:: @@:@AqGk@49 êÄ[ccc3c33c”c“™@:3::@Ak9 jA@:A@AGk@@k@A9 3949: 3 9 3 A@@::A@k@2A@:3GkAA@AAqGA@kA@A::@ƒ:39ƒ:@ ƒ:qA@@3@;9 Ak@GlG@ƒ: A:9:3 qG9 2êÄc,]ƒc&]cd“ŽhAA 3AjG9A3@A@k@A:jA@@A@: 3 :ƒ: @: 3:9 93@:@:ƒ@:29’c“iƒ GqrqqGk@:qAj@@A@:@A@@::@::@@ @ƒ: @9 jA@qGq3::@@:AGkG3:33êÄccd„c^ciŽi““Gj:@AA3AA@@AjA@:@Ap:AjA9: 9:@A@ A2 :@A: ::@A3::c2iibic9Ž“ccŽ“iAk@GAq:@k@@jA@:@::@9ƒ:@3:@:@49A9 3GqH3@:@kGj@A@4@ êÃKc,c]cc‡cddi“i“@::@Aj@Ap::@@A@@:k@AAjA@3::9:@A:9::9::@::@:@:kG9:@b2ci’bcƒc]ci33A:G39:@;@A:ƒ@A…:3@ 9@:@AA@k qAq9:@:GkAGk@:9:39êÂc2„ccci’“˜“G 9A@A:3A::@kAkA„@ k@A9:@: @„:(@@:: ::@:9:9Gk::@::ibii“i“Žccc@A@@k: ƒ:@k@A::@:@Aq9:9 A::AjA9: qq @ƒ: qAq@@A:: 4êÂ(c]cccdci“i“i“@:k@k@G@3@:@:@@jA@:@A@Aƒ: ::@@:@:@@A@ ::@ƒ:@ 9:@@bi“’i“ic]d@kAk@„:-@:@@Aj:@:@AjA@A@:9:@A@: :9Gq@:: @@:3@A@:94 ëÃ]ccd‡ƒc0“h“™’Gk:@A:AjA @:@:@kAA@:@k@:@::9@::9:@Ak@k9:@Aƒ:@@:3 bi™“˜“„cA@@qA„@:@@A:qGA:9A9:@A@@k@„:@:3::@rAA@:9:A@:Gkk::@9ëÂ]ccŽcƒc#ih“i“iA@@A@9Aq3@A:@AApA@d@::99::9ƒ:2@:@::@: @ @:@9:@:9 :c22929cc]@k@:qGk@AkGj;3@qA9ƒ:#3Gk@:A3:@9:9:G9:@qAq@A:9Aq 9kGG9 9 ëÁƒcc32]ƒci“i’™“p@3@@k@A3:A@@:j@:AjA„:@A:„: @A:@@:@399†: 938c2b„c9AA@A@:A@kGk@@3@:Gk @A9A@A3@ @::A9GkG@qAqGqA33@: A::3@:3 êÁc]3…c5b“h“™i“A3 @AAk @@:jA@AA@kA9::9Aj::99:@@A@@:k@A@:A:@ƒ: G : 3ib9ƒ“7kGk@:@qqA:qG@A@A::@9:@Ak@:93@A@::qAkAGqrGq@:3::@k@Aƒ:ëÁƒcc]c]iihƒ“l˜“G@3Ak@@Ak@:A@k@@k@9::@: @:@::@:@@Aj:3:A:@@@@::?:@@:9 @cb8“o““cAj@kAq@AqA@:@@:@A@4Aj@:3: 3A@@A:@G@kGqGrqAƒ: 9A@@k:9:@:êÁcd3…c%’c“i™“iqA:@A@k 9@:@A@@:AA:@::39::@@ƒ:A@A:@@:9ƒ:3 :9::@ƒ:*9cc“’™iŽc]: 3 93Gk@k@:@kA@@A@:@@:Gk@k@ƒ:qqGkqGk@ƒ: A@k@@A9::9êÀ2c]c]c]ii’i’“™“ƒ@k@kFAk@A@:k@Aj@:@ 93…:"@:@:@k@@A@A@@:@39:9:A@ 3: chbo““™ƒc732c@::@@AqAq::AjA3@k::A@49AA@AkGkGArGrGrG:@9@@A@@::93:ê¿c3,dƒc]ibi“i“i˜“Gk3AA@kAFA@:ƒ@A: 39 @9@::ƒ@ ::@Aj@A3@ƒ:=:@A994@3@ cc“i˜““cbcb Gk @k:A@3GA@qAG9:@A@:@jAjA@qA93Ak@ƒ:::::@ƒ: 3ê¿"c323cc3ccbc’i’“™“Gk 9A9GAj@k:@:k@ƒ:99 „:ƒ@:A:@@;9A:@3::9::9@;:@ƒ:%9:bh™™A“h3b82:9:@:cc3ccc3]]c:2,c]ƒc3@: 39:@@: :9:@;:@::9:ê¿'c3cc2‡ccii“i™“™AG9:@qAkG:@:@:@:@:@:9ƒ: 99@:@:9:@ƒ:@:@3 :@ƒ:J@:A@::@:9 :ic8i2bcA::: :3cc]c::Ajc2:3:@3]3j:9:::@A:9::92:@:@@:ë¿#,c23c‡cc]bi’i’“o’kG::AApA9A@:@:@::@‡: ;@:A:@A:ƒ@PA@3@:::9@:@:9@@::9:@:“28999A@,:9::9 3 9  :@A@A:A329:::9A@:q:@: 9:99A:@ƒ: :ê¾c3c3ƒc,9i“i“i™“™Ak9 pAA9Ak:@:@:@:@::@:: 9:@@k@@:@3ƒ:@„:@ƒ:>@::@:@A:@:@:@:GkAjA@4:3@::@9 3 33:@Aj:@3@c@:9@A::A:GkAq ƒ:A2 :@ƒ:ë¾%]2dc3c]cbc’i’““˜“G9 qAk@:@ @@:@A:@:9„:3„: @::3 :: @::@ƒ:M9:@A::G:::@:9Aq:@9 9:::::@3: @@jA9A:@A@A:@ ]394:: :9qA@ApA3@ :3@A@:@:@:ë¾!ccc]cc]chi“i“o““GqAAGk@3::@::@„:@::@ƒ:3@@:@:@:@@k@:@:@:9:A@k@@99:3A:9 : 3AAq@3@@: 39:A:@ 3…:%k9A@j@3 ,Aq@A@::9@@kG3 9 @3 kA:9:ì¾/c3cŽc]c8ci’“™h“™’GkA@jA@9 @@k@::9:@:9 @::@9: …:@:@ƒ:9:@::@@:: :@:9@k@ApAkA9ƒ:239 3 :@:@:@A@A@:: 39:@kAGk9:@:A@@:3 :3:39:9 :í¾*cccc3cc’ci“i™“™“A9@AAqA@4@@3 9::@::9::@ƒ:ƒ@ ::9: A@:9:ƒ@::@ƒ:F@3::@:9:@ @k:G@AA: 3 3:@ :@A3::GkG9kAq3A@:q@q:::@q99 3 : 3@ í¾+c3cc]ccbibi’™“˜“™AAkFqAk@9::@A:9:: 94:3@ƒ: A@A@:@@::9ƒ:A@ƒ:@9A@3@@::@:3:@9Aq@kF@k@@kƒ:& 39:Fk@kAAF3A9A3@9:AA:@3-G:93]3:ò½7]ccc]ccic“i““i“™@q@AkGkFAA@A:@::9: 9 9:@A9993A@@:A9ƒ:C@:@:@@:9:9:A@AA@::9:: 3:9@@;@A@k 3 9::@3 G:@AjAA@@:@AA:9:qGq 3: 3ø½cd3ƒcb“h“h™“F“GqAqAqGkAj@@::@ƒ:9 :9@A@@::@:@A@Aj:9::@ƒ:9::::@k:@A9AA@Aƒ@,;:@@:@:@@:: 3:9:@:@@kG@k:@A:j@A:9:: 9:@ 3ø½.cc2cci’ii““™“™qr@AqqGqG:@;@:@:9: 3:9:9::@@ƒ: @Aj:@:: AA:@„: 9::@A@:@@::„@A@@Aƒ:9:3@@:3:A:@::@3A„@:@Ak@A@@9AA@:@ 3ø½;cŽccd]cchci’i’i“™™GqAA@AqAq3@:k@:@ : :9::@@;@:9@A@:@A9:9k?ƒ:@:@:@:ƒ@k9::@A3kA@k@@:933:939:ƒ: :@@;9:Akƒ:AjAGqqA:9AjAqk ø½.9]9]cc’ii““™h™“qqAqkGkGq @A@:9: :2@: 9::@:@…:@:A9:@:9::@::@:AjA::„@A@k@:@…:,@:: :@99:@::@@A:9:@AjG@kG@kG:GkGk@3@@::9ò½32c]]cbiib““h“ƒ™qGA@q@Aq:@:@A@: 3@ 3: „: A:9:9:A@@;9 „:H@:@@::@:@A:9:@Ak:k@AAkA9:@@::@:@@:@A:9 3:3:q@@:Aq@:GkA@A:qA@k@A: @jA@@:ò½"cc39]c8c’ii™“™™Ã™kqAkA@kA@:@@j:93ƒ: :9:9:@::@ƒ: @@k@@:99:@ƒ:B@:@:@@A@::@:A@@A@k@@9 ::@@ :AA94:::3 :Aq::9GAjA@@:q3GqA@@Aq3 A@ƒ:3 ñ¼4c,333b]bii“’“™™“™™GA@qq:@A@:@;@:::9: ::@@::@:@@::@„:@ƒ:"9@@ ::@@k@:9:: kA@@3AA@@:49 3Aƒ:' ::q :9GA@ 3@Ak@A:A9A:A@:G:@::@3:9ð¼c32”c]c9b““i™’ƒ™“qkAAqA@A@:@:9„::@9ƒ:9:9:@:@ƒ:9ƒ:@@„:J@A@@A@AjA:@::9:9:49A@:@:9@:: @:9G3@:GkG9:A@k 9k9@A:pAA9A:@:, @:@:3 :3: ï¼$c]“Ž2c]cbii’“™“™“™ÃGAqAqA@k:@:@::@:9ƒ:9@::„:Z@:@A9:@:@@: @ 3 j:9::@A@:9:9:: 9:9:A@:3::9 @:99@3@:@:@:@9:@k :AA@@:93@:k @3@:@@ 3::39:î¼=c]ccc]9cb“o“i™™“™qAjG:A@::@:: :@::@:9:@:9@:@@A@:@::9::2:ƒ@:@::@@k9 :@A9 @3:9ƒ:9@3„: 9 ::4@A@@A33ƒA99:G33:@::Gq@3:@ kq : 3 9 í¼"cc3Žcc]bii’™“’””“qAGq9k::@:@:@ƒ:9:9ƒ: 9::@:@:@:@:3 3iƒ:@:@ƒ: @:9: 3 3@A ƒ:9ƒ::@:93@::9:9::k::9q„:Gƒ:@@kH:@@ 2 :@k9: 3:: 3ì¼ 2Žc“c]cc“i““™“Ž““™qAqAq@@:@::9ƒ:@:ƒ:9„:/@:@AkA9::9::8“:9:3A:9 : 93: :393 39 3 :@:@†:):::@:@9AG:@A99:@:AqA@A9::k @:@::9:9:93ì»/]“Žc”c]cci“cޓޙAqqGkG9:@:9 ::@::9:?:::9@„:@9ƒ:@@:8:@:@:@::3 @::A@@3 ::@ƒ:@A::9@A::@:@:9: „: 3: 3@q::@:G:@ƒ:@ 9:A@:@ 3:::ë»+c3“]2dcccޔޓޓ“qG:AAq4::@3 :@::@9::::9…:9@:AA::@:@ :@::@A@:@@„:99A@ 39„:@:ƒ@*::@@:3::9 ::@@ @@A@ 2 @:9A@@:q:kG:@39Aj„: :ƒ@ƒ:ê»"c]2c32cd“d”””™Aq@kqA9:3::9:@ƒ:::@:@:99::@:@@:ƒ@;ƒ:@A3 ƒ:@@:::@A :@:@@A::@:9ƒ:@ƒ:- 3::@3::9@: :A@:99AkA9GkG::AAk @:9 39@:@33ê»cc-”dƒc Ž“c”“Ž™qA@AGq::9:@::@:9::@:@:9…:*@@AjA9@;@:3:9@@:3 93 @@:9@:@k39:9::@:3@:@ƒ:@::@:@:@ƒ:@@@;@3:39:@A: 9:9:Aj@:@@q qƒ:  : @AA::é»c2c]2cƒd“Ž”““GqAqkA@ƒ:9„:@:…::9:9:AjA@::9A@A9:@:@:: @:@„: @:@:9:@:@ƒ:@:@‡:9@ƒ: :9:@A:@9„:9::@9::Gk:9 3@:@3@:9Aj@:94 è»*3ccŽccŽcd“Ž”c”Ž™AqGkG@A@:@::@:@9:9::?@„::@@A@„:@@::94ƒ@ 3:@:k::@:@ƒ:9„:/@::@@A@:9:@:@::99 3 jAjA:A@3 9A 3::qGkGG3 : ƒ: @:9:AA:@9:èº c]cŽccŽ]cŽi””c™qAqAqAjA::@@ƒ:@ƒ:@„:G9:@@:@::@9:@:@3@9:@:3:@A@@:@:@:@:@:::@@::@@AjA999@:@4:3@@:@@9:@A„@: ƒ:AqA9q: 93:9@:9„@A@éº,c]c3“9dcŽ“d“ޓޓGkG@kAGj@@::@:9:9@:9@:9…:,@:@@A:@A@A:: @:A:A::9:@A@A@A::9::@@::@AjA@„: @AA:@:9 :@:@ƒ:@33@;:@@:9:9Aq:A@:::4 ƒ:k:@::3 çº22,c“]”ciŽc“ޓޓ“G@qA@q:A@:@::@:@::::@:@:9:9@„:@ƒ:99AAj:@k@:@::9A::@k@j@:@:3: :::@A@:@9:@k9:@:3@:@4@:@ :@ƒ:9:qAq:G9: kG::@@:9:9A@@:A9ƒ:çº!c3ccdd“Ž“Žc”“™k:qAkG:@A:@:@„:@::@9::9:@A@@:@:@…:@ƒ:@@:@: @:9A@::@ƒ: @::9:9@@:@„:/33@ :@:9 @:@:@@:A:@:GAq:@A@:G:AG9A99:3 :@:3 93ƒ:ç¹+”c,c]c“ccŽc“d”™™AGA@qGk@@::@::@:9::9:@„:9:@::A@::@@9@:9:9A@„:@ƒ:9@ƒ:@:@ƒ:„:3@:@:@@ƒ:9ƒ:A:@A3:ƒ@!:@:3 G:@qqA@:q39A::9 39:@:@:A99@èº.c3cc]Žcc”dj™“GjkGqAA@:@::@:9@:@:@::99@„:@:@:@ˆ:@@A@:@:@:@:A:@:A::999:9@ @ƒ:@::9::@ @:@AjA@:;@ƒ:@33 :qGqAA:@ƒ:  9 3 3@ƒ: 蹃c 3]c9Ž”c”“Ž““™kGAkApA@::@::@ƒ:::@…:9@::9@::@@:@@99ƒ:9::@@:Aƒ@:@:9@:: ‡:+@3@::@:9::@:@:@A::9::9 @:G@AkAkG:@@:: 93…:@9 9:99è¸1ccŽ“,c2c”cŽ“dd“d™™AjG@Ak@kG::@::@:@:?::@9:9@‹:@A@9†:@:@@kAkƒ@:@@:@ 9@::9:@3@::@ƒ:  :@:@k@Aj„@A@k::9A9G@k:@A:: 99ƒ:::3:: é¹#cd2cŽ3ccŽ“”c“AGAqApAGk@@::9@†:@::@„:ƒ@A:@@:9A…:@9:::9A@:@@::A…:= :::9:::@:@ 3@:@kAAk@:@:AjA@:A::@A,AA@9AjA3:3 @9 3::@ ê¹ cŽccc]9Ž”cŽiŽc“Ž™@kFkAAk@Ak:@ƒ:@:?:@:9ƒ:9ƒ@Aƒ@ A9::@@9:@::ƒ@::@:9A@::@::@@::„:@94@ƒ:A@ ::@:AjG@:@A:kAƒ@k9:@k@ qqA9AA@:@@ƒ:ñº1c””]c3“””“Žc™qAqApAFkG@@:@:@::@::@:9@::@;†:@„: 9::9@A:@:@ƒ:?A:9@::3@::::3:9 :@:@:@:@A@AkG:@:@A@@;@A::@A3AG3:@:@3@:@ñ¹%c””32c”cjŽc”™“GqrGqqAAjA@::@:9@ƒ:?::@::@ 39@::@@:@9:9@ƒ:9::@@A@:„@<:@ :@::9::@::@:9: ::@@:@AkkGjA@:@@k@@:k@jA@@ :q3@::@-3A3:󺔔c3cŽ3””“Žc““™™AqAGkA99r@@ƒ:@::@…:9@@ƒ:9::@@A@AA@::@:::@…: A::@:@:9@ƒ: ?::@:99::@A:„@Aƒ@:kA@A:@Ak@:Aj@:@:@A @@: @39ó¹!ccc”]23”½Žc”Ž““qAqrqG@A3AA:@„:@:@@:9ƒ:@::::@:@:k@:@:@@Ak9:@ƒ:@:@„:@ƒ:9:@ @„:+@ 9:@:@jAk@Aj::Ak@Aj@@dA@@AA:@:@@3: 3 3 :ô¸OccŽ“ŽŽcc3½””“Ž”¾¾““™GqGkGk@ jA@:@9:@9:@:@@ :@:@::9:9@:@:@:@:@::@:@:A@99:@9::@†:@„:@@ :9::@@k@AkA9:@@:G@@A:ƒ@AjA3j:@::A39  @õ»'””ccccŽ“”¾™“AqGqA@rAGj@::::@:@‰:ƒ@::A@3:@:@@::@::@ƒ:Aƒ:9@:@:@:9@:@:@9:: 9:@::AA@@A@A:@:kA@:@;@:@A@ 3@:@@9A:9:öº#c”c”ccŽ“”“”ccc™“Gkrqr@AjA :@9@ƒ:@ 9::?::9@::@:@:@‡:@†:@9A9:9ƒ: 9@::@:@:9@ƒ:*9A@A:AjA::k@@:@k@:@:@:jA:33 3@A:@9:A-4::õ¹cc-cŽiccŽ”Žc”Ž™qGqHqAjGkƒ:9::@ƒ:@ƒ:!::@@ 9::@::@:9:@:@:@@::@:9 @ 99ƒ:@„:@::@: „@#A@q@@A@:kA@:@::jA:9@ @3@:@:@@: 3@÷º!c,”cŽdŽiŽ“Žc”“™AqGqqGA@A@:@@…:@ƒ:9:@9:@:@…:@@9@A@ƒ:@:@:@„:9@:A:@:999:@9:@::@::AjA@A@kA@k@@:@:@@::@:@@: A3 ::@339@÷º ]ccj”c““dƒ”cŽ™AqAqGkAk@:@:@:9:@::@:@@ƒ: @9:@::@:9Aƒ:@::ƒ@ :@3: A@ƒ:@†:-  ::@9:@:k@k@q@@:@k:@:@:@::49 :@ 39@; : 9ø¹“]ccc””d”Ž“Ži””™“GrqGkGqA„:@::@:@9:@::9::@A@ 9 ::@:A@::A†:;@@::@@: ::?::9::@:3@:@3@:@:Gk@@::@::@:@:@4@@:9:@:@:@@:9 ø¹$ccŽ33”“¾“c¾””“@kGqqGq@:9:9::@†:@:@:@ƒ:@ƒ:A:@::ƒ9-@:@:9A9@:A:@:@@::@:::@::9 ::@:@A:@:A@:@: @:A…:9ƒ: 3::@:@:3 3: øº cc””“3”Žd”¾”“i“GqGrGAAk::ƒ:>@9:@:@:@::@@::@:@::9A::A@A9AAF:@A9:9::@@::9@:@:@ :@@:9:@:@::ƒ@:@:@@:9:9@:@:::@3@3 9::øƒº2Žcc]¾“-2Ž”cciŽ“Žc“ijGkGqk@qGAk@:::@:9:@::@:A:@ƒ:@@::FA9A@A:jA::A::ƒ@ ::@:@:@9::9@ƒ:9:@ƒ: A9k:@;@A:9@@ @:@:@: @:@ : @3øƒ¹*3cc”¾2]”½c2””]“Ž“c““AAqAA@A9Ap:@:@@::@:@„:!9:@:@:@@::@:@::@k:@Aj@:@@::@::@:@…:@ƒ:@:AA@:@@A:G@:@::@:@A:3@Aƒ: 3@@3::3@:ø…º9“3]]½”3c]”c,”“cŽ“”cc“@@qqAjA:AA@:9A:@::@:@:@:@3::@::@@:ƒ@Aƒ@ ::@@k@:9:@ƒ:@:@:@„:@9:ƒ@: j@94@:@:@:@:9:@ƒ::9@A:: 9:: ø„»c]9¾¾cc3ccccc“AGkGqq:q9„:@ƒ:@::@::@:@::@:@:@AkAk@@:@:ƒ@::@::@:@::939:ƒ @@3@A A9 @:A::@:@„:@ :9:A9:93::9 ø…».cc2]”“]”¾2cŽŽŽdc“@kGqGAA::@A@::9@::9:@:@„:@@:@:A:@:A:@:A:AA@A@:@A::@9ƒ:@ƒ: 39::A@:39:@Aj@ƒ:@3:9::3A9:@: : 3ø†»(],cc]23¾”c”“c””™AGqkr@j@@::39@::@ƒ:@„:@:@:A@:j@::@@::@@::@:@::@„:"@:@::@ 99@;@@:@@::@:: 3:@@3::: 3ƒ: @: 9::9:ø…Ÿc›c]c3]ƒc”cŽ“d“Ž™AkGqƒA@r:@:@ @„:@::@:@:9ƒ:@:k: :@„:@:@ƒ:@:ƒ@:@::@…: ::@:@:@::@ƒ:3939 9::9: :@:@„:9 ø‡Ÿcc2˜”,c“Ž”“Ž”cŽ“Žc”™Aq@AApA@@„: 9::@9::@ƒ: @@:@::@@ƒ:@:Fk:9Ak9::@@;@:@:@ƒ:@39ƒ:"@kA@:@:@:@:@: 3934 @@:3 :@:: 3ø‡Ÿcc]—ƒcŽ“33“3“Ž“cŽ““@@A@jAkA@A9@@„:%@:@:@:@@::@::@9:9:9@::A::@@:@:@:@:@:@„: 93:@@A@@:@ƒ:@:@:@3ƒ: @ @:A 9ƒ: 9 ø‡ŸcŽc3—$cc]cŽ9]c\Ž”¾“3cdi“@:q:GqG:q::@: 9@ƒ:@ƒ:9::@9:@:@:A@:9:@@:9:A::@A@:j:9ƒ:@@39:A:A@@;@:@:3@@;@ ::ƒ@3 ,A9949:@322,ø„£32–,c3“”]c3ccŽ”¾“chi:@A:qA@:qG:A9::9 ::9:@ƒ: @:@A:@@:@ƒ: @@:99::9:@„:9:@: 3„@)::@jA@:@A@:@::@Ak 3 @@:: @::: 3]33cc,ø¥c3“3222(cŽ3“cc]iccccŽcibi:q@AjA:qAk9@ :94@:@„: @:@ 9:9„:ƒ@Aƒ:G:@:Aƒ@: ƒ: @ƒ: A@:3A:@k@@3 ƒ:9A:@9 :9:3:9@@ƒ: 9322-cø¥c]2-3]3‘]ccŽ“Žcc3¾”Žc”“AA@:@@q:@Aƒ: :@9::@:@:@:@9::A@:@::: :93:@@„:@::@:@:9:@:AjA::ƒ@ƒ:@@A9@A@d@::@A: ƒ:@ øŠ¥ c]23223,]cŒ„cƒc””“Žc”“Ž““™@:9:3AA@@q:@9 3„ :@:9…:@:@A::@:@k:@:A@:@9:9:@:@ƒ:::@@A@@:Ak@A:@;@9A:@k@:@:9:@3ƒ:@ 3 øŒ¦M-23323,2223232]23\3,2Žc]cޓޔcŽicbqq:A9G@k:GqA9:9:@939:@:: ::9ƒ: G@::Gk:@A::@A@:@::9:3: :@@kApA@A„@ƒ:@A::@@ @ ::@@3 33øŒ¬ 323223c3c,ƒc]ƒc$d“Ž“””¾“”2ccŽhc G::949A@:AA9A:Aƒ:9„:@:@9@:ƒ@*:A39 9:9::A@:@:@A:::@: :@:AjAAj@:j;@j:@@„: A@-3:@:: 3ø­23ƒc],‹,223“32¾“”¾”]”c™bcAj@ 9AA9::9:@:@:@::@:@ƒ:@:A@:A@:@A@@:GA29:: :9ƒ:&@A9 @@3A@@A@A::@9;@:@;j::@3@::@3 øŽ­3]2]]3c]‹ccc޾”“¸”½¾c”c™bcG::9A3Aqk@„:19@:@3@ 9 :9::9:9:q:@:kA@:k@:@A@:@A9@@:9 :@::q:@:„@::@::@A@3@3:9::9:4 ø°3c\Ž(]c“Ž”¾”””“”]]™iqq:9 AAGq: ::@:@:@ƒ:@:@;::@:@::93:: @:@A@@:3:@:@…:@A@:@j;@k@:@AA93: 3@::@:: ø‘Á"ccŽ”c”“޽cŽ2”]““@Hq@@9@3 @:93†:@:@::ƒ@:@:@@A:„@:A@3::3@::@::9:A@:9:@A:@@::ƒ@:9A::9ƒ:: 9 3 ø‘Ã!cc]3“Ž“””¾cŽc”bcG@A:A 9:q A@ Œ:@::@A:@@A:@A@jA:@99ƒ:!@ @kF:@::@@k::@::49:@3@:::: 9 3ø’Éc¸“”]c“¾”cbAjG:„ AAqAk@:9”@d@:@@::@:: 93 @„:9@;@A@ƒ:9 3: @ƒ:ƒ93 ø’Î ”“Ž“c™“GqA:ˆ@A :9œ::9:@ 93 :A@A:@k:9:3: 9ƒ:9@:4: ƒ,øÑ”½“™ƒ@:‹3:Ÿ:A:GjA@kGj@k9:: : :@ :99ƒ: 9 3 32øø”@A@AA@::9: 3:9:ƒ:@93 ø”ø›@:3 ƒ :93 9::3ø–ø¦9: 393ø–ø© 3ø—øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø¥2]2øšø£2]3c]23ø™ø¡ 23222332ø˜øŸ 2,33]ibicbccø˜ø‰2222‹2323c32biib“bicc]ø—ö,]c2ƒ c]2-3]33]3ˆ]3,3]822chc’i9bihcø—ñ23223223,32]3b232832,2…]c2b8cc2cib9b““„cø—î 2c3,232232ƒƒ2'3c22c,,223]c,i““ibhcbcchi28hcø—é&2]cc23b9222322 ::9 3 3 232 39 3cƒ29“i“i2“iibihcb2ƒcø—ç c2Žc3,3b9ƒ2233 ,  9A3 9 :3 9A:9::@:: 9@@“ihchcib982ccø—äcc]3\2823 3ƒ:09 93 3@@49:9::@:: 3  3 @:@:A@@3bcc“hc22iic]ø—ãB2c32]83933 3 93::@ A::3:9:9::93@@:@3 949@::@A@“™“38,ib]cø—ß23c33229::94::3ƒ @:@::9:@:@A::A@@A:9 9: q 39G„:3:@@“™22dcc23ø–Þ]3\3c3”9b9 3ƒ:99:@@ƒ: @@:@:@::@::9ƒ:@AkA 3: A3:9 qG9 ::9]3ccc]ø–܃cG323]cc]c“ 3 9 @:@:A@:k@@::@A@A@AjA@GkGA9@:9A@@3 9 :9: 9 93G::92cŽ]cø–Û12,2d232Žb9b@ 3@@::@::@@;qAA@@A:@9Aj@A@k@@:qAA@Aƒ:@@3G3 :3ƒ: 3AqA9::cc]cø–Ú3]9,d9Ž“cc8:9:@:ƒ@:@:@:@Ap@k@k@krqHqA@kA@::@:@kƒ@:@::rq 3:@9:GA3 22ø•Øc2]23“]jcch„:=@@;@;@kG:@kAAkAA@A@@Aq@qAGkApAqA:@:@@:A@@:3Gq@3 :9:@q :9:kA ø•×2,c]cŽ9dc32i“9:9 ƒ:(@A@k@A@jAGjGkAkA@AAk@kFqGAkGjAk@Aj@;@:qHƒ:@A9: :9qG:33,2ø‘Ö,3c32Ž„c@2c]8:A9:@:@qGkjA@A@A@k@AqApA@@qrqAqAqk@AjG@Ak@A@::@:qqH:@Aj::@ƒ: A@qG3]cøÕc2”2]cc]c]ccch::@@A@Akƒ:>@AqAjAqAqAqGkGk@AqA9 3GAq@AqqA@k@qk@@:@:qr@::9 3Gq:@AAkq@3 c]øÔc]3cc,c9c,3ii::@A@k„@BAGqqAqAqAGkGkGAjAk@@AAj qGA:@AqA@AA::@A:@rGq@3: :@3::Gqq@AAqG3: øÓ9233cc,dc3ih:@:@:@AkAqA@@AkG@k@kFkGkGqGGkGqxq 3AjAkGA„q"G:@A2:@qG3@:9@::qGrqqGkG: 9:: :øŠÒcc”32c39cŽ“Žib:9:@:qAkGjAk@::GqqAGkGqGkGkGkqGkGkx@rx@ q3@ Gqr j@Arq:q:@::::GqGqAqqG:3 3: :: ø‡Ñc]“3]]jc]”i::@@AAqA@kGApAƒq-HkGkGAqGqqGqAAqGqAA@@AxqrqAkAqAAqA@xq:@::9„:@rArqGr:@:9::9 39:3ø†Ð_c“3]32“Žc]“Žci“GA@kA@@AjGqAqGkAAqGkFkAkGqAqAq@Ak@Ak@:q:GA@qrrG@k@rqxq@:AA3@@::::A@@:qAq@A 9ƒ: : 9:ø„Ï cc332]cŽcc„cY“i@k@ApAkqGkGkGqGk@:qqHqGqqHkAqGkqGqqAG:@AkF:Gqqrqr@AGq:9@A@3 : 39@:@qAq@A@AjAG @@AjAA:9ø„Ïic33]c“ccŽ“cŽihAj@AqAqAqGkGAqAqGqHqrGqAAk:GqqrGqrGqGqqrqGkG:AGA@xqqA@AjA::A@9:9 ::@AqGqqAkAqq:qAq 3@:ø„Ïcc22cdcd“cŽi@k@AAkGAqƒAOqkGqArqqGqqrAqG9:GrqrGrqHkGrGqAqq@AjG@kGG:@:Ak@A@:A A@:::qGkHkGq@GA9: 99:@ 9øÎƒc-2Žccdc]c“@A@kFAqqAƒqGqAqqGrGrGGqGqAƒqGrwrGrqrqGqqGAqAqAk@AkAqk@@A@jƒ@k:@:9@:@::GqGkA@q:@3Aq:9:3:øÎ ]2]3c”3]ƒcMŽiŽo“@AjA:@AqqGqGrGqAqGqqGkqGrqqHrGrxHqrqNqGqHqkGqrGqGq@@k@AAjA@AAd:@A::@:9:@…:9AAq : :A9: 9 øÍ c]32”cƒcŽcb@@3@@:@kGƒ:3Gqq…AJqGrqqHqqrqGqqG9GqqArqHqqAqGkAqAq@AqG@kAj@:@:A@9:: ::@:@:Gk@Aq:@39:: ::@9 ÷Ì)c]c\”c3c]cŽii@A3@@qqAq9A@:3GqAjAq3AkƒA.@AqHqr@Gk::rGkAqqHqGqrGAkGA@Aqk@A@A::@9:A:9:3„:9:@AjGq:: :99 :@A:÷Ì!]c3“cŽ23c]cŽ“Žc“@A @A:qH3GrqH@Aƒ 4: @@AjAqqA@A@GkqGA9rGq3rqGAqGrjAqq:@AqAk93@A@:@::ƒ:ƒ@ :3@AqA::9: ƒ:Ak@:9öËi]ccŽi]c]cd“c““@-:@jAA@qA:Gq:Aq@j@k@::@@AqAq@@k@AqrqAqGkqqGq:qrqG@qHq@kAF:@@::@A@9:93:9A@: 949GkGq@:ƒ@:9::93õËc3iŽcc]c“d”c™@A@@A@qAkA9ƒ:@kA@:@@A@@:kFAqqrA@qGƒA2q:qH@3@rAqqrq:rqr G:@AA@A@d:@: :94:3@@A:::qAA@ƒ:@„:9:õÊc3“c3„cŽc“dŽ“A@:9AkAjG@:9:ƒ@A@rq@k:@@krGqGqAA@ƒq=GG:q:@AqGqqHqG:Grqr:q@@kAjA@@:@39:393:@AAjA9:9:Aj:r@::@99 9:õÉ]c3c]3ccŽc™“™@A@: :@GA3:ƒ:K@AjA3 : @:@:AqAqG:r@kAAqrAqAqr qAqH:rq:@GqGqAqA@k@Ak@;@: :: :AjAA9: :A@Gqƒ:@A9:9:õÉ c”cccŽcŽcƒ“ i“Gj:@:k@k9ƒ: 9::@A@:A@@ƒ:39@ Gk@@kGqAqGq@@rGr@Aƒq3@rGq:qGqGqAqA@@A@A@::@:94@::99 @::39AqG@3GAk :::3ôÉ,3c3ccŽccii“h™’A @A@qA:@9ƒ:VGkApA:k@:@@;A@:@;@@A:@ :qrqrqq@kHrGA@qGq;@rqGk@AkAjAj@A:9A: 9:@@:A@k@:944AA9:@A::9:ôÈc32,c”cccdihƒ“ ™Aq:kFk kG„: ::@@:q@::„@(3:@AjA93@:9Ab98“™:qqr@kGr@@A@:AAkFAq@:@ƒ:9@:@ ƒ:@@A@:9:9:9AjG::@q9:: 3 òÇc2ƒcƒc"Žch““i™h“A@A@Ak@ k@:9:3@@kA@kA@:@„:$@:@kA@: :: “2b™c@A@G:qGAkqAk9qGkAƒ@;@@‡::Aj3@ƒ::939:AqA9A :9:@òÇ cc-Ž3cƒci“h““™“G@k@q:Aq 99ƒ:E@A@k@@::@::@Gk@3GAj@:@9Ak9c:c@k@: 29:k@@AqAA:Gqq:A@@:@@:9G:@::9AA 9„:GAk3@@A:@:9 A@ñÇ]cc3„cPbi““™“ojAjAA@@A@39:@:9Aj@@A:9@:@:@:AA@:@@:@:9::@kA@“@AqA3283@A@3A@@::@:k@:A:@ƒ:9ƒ:k9@@::@:A9:AqkqG9::9 kñÇnccŽcŽcc]ci“h“i˜““GkG@kAqA2::@AkGA@A@:@:@A@:GkGj @@:kA@A 93:Aq:i@@kGq2] @3Ak@qqkG:@A9:@jA:@:9::?:9:9:@:@:@9ƒ: qG3q::: @ñÅccc†cC“h“i™“™“Fj@GjAF:@:@@qA@k@A:A@Aj kGkA9:AkGAk@3 3@Abi’A@k“283::@@ƒA qGkG@A@;:@@ƒ:9A3ƒ:A@::9 @A9::9 q:GG 9AjòÄ,ccŽƒcŽcc]“ihƒ“+’™“GkAAkAqAp::@AkAj@A@k@k@A 2 3@Aj@ jGA:9ƒA!9:cbici“ch32A@9 k@jGkG9:@k:9@A@:9ƒ:ƒ @:@:9 :Ak@ƒ: AqAkq : 3ñÅ533cccc““i’A™“™@A@AjG@ kA@::GjGA@@A@kAk2 333 3ƒ:.93 pAk@2ii’ih23hA@A3: 3A@@::3:@ @kA9:@:@:3 3„:9AjGk@GA:9@AqAG:@3 ñÄ33“dƒc*]ibi’iA™“™“G::qA@:3@A@@:GkA@k@k@G9 :9::@ƒAK 3@::AA9Aq@A@22“c29’iAj@3@@A@:A@AA99:3 k:@ :9:: ::9:AAGkAk@@A@k:@j:@::9ðà c\323c]3ƒchi““™’™“Gq9A@@:qAkAk:@kGj@Aƒ: 3::ƒ@O:@9@::9AjA@Aq@A39hibcci2: @A@@k:@:k9 :Gq @:3 ::?::::@AjAFk@A@kk9@GqA:@:99îÂc33\32c„cJh““i’i™“™A9Aq9;GAqG@@:@AA@A@@:3:9:9:@;@:@3 9 :@A@kA::22cch““cc:@AdA:@ƒ:)@:GkG:3:@ @::@:99:GkA@A2AAG:AqAqA: @kƒ@íÂ?c\93dcc]ic“@“™™“™˜GkA3GkjG@kA::@j@k@k@::99::9:9:3 3: A@jƒ@'A3829biihicc]9A 3@A99::9AqA: ::9 : ƒ:9::@:9 qAj @qAqG::A:@:AíÂcŽ3cc„cyh““ii“™“™“q9 GkGAkA@@kFA@:@A@A9::9::A:@:@A9:@93:3@:AAk@9c2i’cicŽcŽc2923GAq93:939:9:@ 3 :@:@ 9::@:Aq: @qG::@@j @A:@:ìÁ)2ccŽ]cccci“h™’™“˜“GA3GkA@9Gk@@AjA@:@Aj„: @k:: 3 @Aƒ:&: :kF:@ h8c““hc“cd“Ž823::@AA@ 4 ƒ:!@ @@::@@:39::93:9Aq:qAq::@A@3A3:íÀc3,2„cHcdbi’i““™“™“™q:GkG@:9A3@A@A@:@:@A@:9 2;@:9@:@:9:A@:@ @9:Gk::@9:2c“h“™“ƒc4d“3@:9Ak9Ak@A3@@:@Ak:@@A::@ :9: GkA9GqA9@A::@:9 íÀccc]]ƒcib“i“™ccc]o@A@AqA9AGjA@@A9@A9 33@q::@ 9@A33G@q kGq :@jA@qAqí¿']3Ž9ccdcihi“™’“™’™™A@AkAGA9@@A:qAAkƒ: 9::9::9: …@†:0@::9@:A3@@ici˜“™dŽcq:qAj@A@@3GAjA@:A@k@3 3 q@ƒ:@:9: k 3 qG3@@:@AkGkGíÀcccŽ…c2““i’“™i™G“Gq:@@q@k:AA@@AjG9:@:9::9A9::@:kAkA@:@:@ƒ:H@A: A@: 2h232“™]cAAGkGk@@:@3A@kA@@AAq99AA@ :: :@:9 :3Gk:@k:@:9AGk ìÀ&2Ždcc]cch““i™“™“GÃqAAqAk@@:@@:kG::@ƒ: 3@A 3@:9::ƒ@:3:@A@ @@::9:3@ c22cb9„c+Aq@@qAA@k9A@Aj@Aj:Aj@:A@ :3@@:9@9:9 3Aq: ƒ:AAkFk íÁ“d“„c “ii’i’“™’ƒ™qApAq@A@A:@@kG::@:3:@@…:@:A@A:9@: :9:9ƒ:F@:@ :@3cb9c“iAkGkA@kGk@@Ak@A9AqA@:Gk:@@:@: :@k@::A9@AqG:9:@@kFAk:9ì¿*,cdc3cic’i““™i™“™Ã™qAqAqGkAq:k@@k9: 3ƒ:9@@:„@Vk@A@:A9:@@A:9:@:::3 hc8c’™““AkF@@AqAA:q@@A@A@Aj9AG:A@@:3@kGA::A@kGkGq:@AA@k@93 @3ê¾c“Ž2c]ƒc’ii’i™“„™ qrGkGkGqG:@ƒ:@:9:9 :9ƒ: @:@@;jA@kƒ@k ::ƒ@$:@A@@:3@i2ch“i™”GA:kGkFk9AA@dAj@@ƒ:!@qqj@3:9GkA9:9GAqAqqG::GkGA@:3 3ì½cŽ“3Žƒc-bi“h““™’™Ã™ÃqGqAqGkGk@::@::: @A:9@::@:@A@:@ƒ:PA@A2 k@:@:@k:@:@cbci““™““c]3 93GAAqA@A@@A:kA@GkA@:A9 G@AAqAAqqGkGq:@:@:3@9: 3 ì¾3c]ƒc ]cbi“i““o“ƒ™ ÙrGkGkGkG:@ƒ:g@::9::9::@@::@Aj@:A@kA:@:@: :: ::@39::2ib™h™“cc3cc:3:@Aq@kA@:qA@A@@A@:qA@j@AjA:AqAqGrG:9A@:GA3 3ì¾2Ž“33]ƒc ic’“™“˜™™Ãƒ™ qAqG@AqA:@@:9„:9:9:@:@A:@@::A:@A@jA@3ƒ:J@@,A@A3::A:2ib“™“™c]c@3@@AjGkGjA9:AjA3@j :9::qAA@kGAjA@qAqGk@Ak:kGk@3ì¾]c3“]2ƒc#hi“o“™™“™Ã™ÃqGkG:@kG::@:::@:: 9@…:A@@::ƒ@ A@:@9@:@A„:C:938ic™“™icibbA: :qA:@:3GqAq9AA@A@::A@k@AqAGjAA@AqGk 9@Aj9 ì½.3c2”c33cc““’™“™™Ã™“™qHqAq@kAj@:9::@9:939::†@ƒ:@jA@3@†:@:ƒ@B::9:bcb“ib2ib23:k@kAGk@::@AkG@AA9@:@A::@A@kAFkGkFk@k@ 39::AqA9í¼c]c2d“Ž\3ccih“™“™™““”¸™qqAqrA@G„:@: :: 9::@:k@A@;jƒ@:Aj;@ƒ:L@:@A@@:@@:: 3::9“88cbA9A:@A2cc3]cc]c@:3939:3 @@k@9 :@@9::@:@93: 3ì¼*c3,ccc“™i™™˜¾””™qHqA@Ak@:9:@A:9:9@„:@A:39333Aj:@@:@9ƒ: @k::@kA:::@ƒ:bc23::Aj:::3ƒc32„c ]2:@:9: c]ƒc„: ƒ: 9 3::@:A99 í¼ccdŽƒc"Žc“™Ž“Ž“”™qAqAjG@:@::9:: @::9ƒ@::3:@@A…:%@::@G@@9@A@9:: 9 G9:G@A9@@:3A:::3]ƒc&]32c:@@3 @A c23:9::99:A3::::@@A33 í¼2cŽc2Žƒcޓޓ”“Ž“”·™“qGqq: k:@:9::99„:/A@k:@:9A:@:@:@:@::@Aj:@:Aj: A@3 3AA93A3 3:ƒ@:@:ƒc&]3:@;@:q@@jcc:9@ ::@kA 93A@:9 ::ì¼ 3”c]2ccc””Ž“”Ž“”™qqrGr@:G:@ƒ:9 3A@::@::9:@::@@A@:@:9ƒ:H@AAG@;:@ ::@9:@:@k:k@:@99 :A@; 9:3A@c:k@@:@:AAc]39::@:@@: :GqA9 39„:3ì»c]c“ƒ3&dd””“ޓ޽ޙqGAqq:@ ::@ 9 : 99A@@:9ƒA:9:A@kƒ: @@A@9::@,::9ƒ@k @@AjAAGk@9::3 …:-@-:9 ::@G:@:@A:j@3- :39:@::@kA: : ::9 3ìº>c2c3Ž2”cc””””“Ž“™qAkAq@:@k9: 3 @9:A@k@::3@j:::@@:9@A:@ƒ:@ @ 9A::A@@::@k@@3A@:†:„@ -9:jA:@@j…:3 9@@A9::@A:@@k 23: 3:@::3 ìº2c,cŽc92ccŽ“”””””ÃHkGqH@A@ : 9 ::3:9A@A9@@AAƒ@A„:@:A@:@ƒ:9 :kAjA@4@:9::@:@A@k933 ƒ3(::@ 3:q:AkAA@@9A 3 dAjA:3939qG9 :9 @ƒ:9 íºLŽc323]”]“Ž”””“޽ޙ™qGqrqAjA33@3:9::@A@A::@kAj:@:@:@::A@::9@:9:@AG9@:9„:=@:3@@k@AkAA@9A9:@@::qA::@GjA9A9:@33Ak9 :4Gk:39:3:9@:3 íºA2Žc”2”]”c””””””™qkGqGqA@@:3@::9:9Aj@A9@A@@A@A:@9A@@::@:@ƒ:A@k@:kAA:@@A@A:@@Aƒ@AjA9„:*9: 3Gq@@kAAj@@:3 @49 AqG39Gq 9 3 :@:9:îº"]9c3cŽ“ccޓޔ”””“@AqHkAk@A:ƒ:9 ƒ:@A@ƒ:\k@A@j@::A@::@:@::@:@@:GkA@:@@AjA@k@Ak@AjA@A@4::@ A9:A @:A@q@@;@:@A@@3@:@:: 49 9::9 :@A@î¹.cc]“Ž232Žj”””“Ž“”ÃqGqAq@Gk@:3:9::9::9A3„:$@9AA:9@kA@::@:@:@:@:AjA@@:@:A@3AG@kG„: 2A@9 :@j: 3:ƒ@j:9@:A::@@A:@A:@3@9:ˆ„:3@î¸c]ccŽƒc"2Ž“Žc””“ޓޓ¸™™qGkAG@kG::@9:9@ƒ:79:@:9@:@Aj@: 99:@::@:A@:@:A@@:@AjAjAAjAk@A@::9:9: 2 3:9ƒ:::A@::A@::@:@jAqAqAG::@‰: 9ï¸$c]cc2c]3c””“ޓޓޔ“™qArGkqAAj@:9„:'9:@9::@:::@A@A:3 :@::@@::AkFAj:@@Akƒ@ AqAq@:@ :@„:, 9AA:9@:jA@A@:@:@Ak9AqGk@qAAkA@A 3:9 3ð¸.”ccŽcc2Ž“”cŽ”“ޓޓ¾™qqGkGrpAA :::9::9:9„@ƒ:@k@„: 9:@:k9:@:@…:<3AjA@:kAFkA9::3@:@: 93@3@A9:4:@:k:@@:@@AkGkAAqq@A@kG3  õ¸#“Ž33c]3ccŽ“”“ޓޓ””™qA@AqGAqA@9„:9ƒ:+3:9::A@:@:9:9A@:@ ::@@::@AkGkG9:@ 3@@Aq@A@ƒ:@ @:A@@ @33„:Gk@A:qAk:@:9@ qAp@ 3 :2ö¸!,c“]23cccޓޓޔ”””™“GkqqAqAq@ƒ:9::99@::@:@:@Aƒ:@A@ :@3AA::@@AFkA::9:39ƒ:Aƒ@:@:9 3:9@A@:9 9:„@-A…@:A@3@:AAk3:÷·(c””2c”cj“ޓޓ””™“qGrGkGkGk:@:9:9„:9::@@k@k:9:Aj@3:@@Aj@ƒ:@k:@:@:9„:" 9:@q:@A3:94@:9 :::@:A::A@Ak@3 @k„:AjG ƒ@A3 :9÷¶ccŽc33…c!¸”””“Ž”™rGqAqAqAqA9::::99:9ƒ:9;@@::@:99:22@:A@@A:„@A9::@99@:@@A@:ƒ@ƒ:) ::@::9:@:jG:93kG39Aq@:A@:qq::k99: ö¶cƒc%2]Žc]cc””Ž“”ÙÃqGkGAqAG::@9:9::@ƒ::ƒ@>Ak9:::ii:@:@k@@:Ak@A: 9 3:::2:@:49:::@::@@:: 3Aq: :3A@„:@3:@:939GA@::Gq A@ö¶"d”¾”Žcc”]””“”ŽÄ”¾™™qGkGqAqjƒ:)::@:9::9:@::@9 ::@Ajcb:@:A9:9:99:3 9 :ƒ@:::@ƒ:/9 ::@::99A@A:::@ 99 3A@@A@A 3::@AAk@A:9A@@:ö¶*c””Žccc,cc”¾Ž“޾¾“”ÃGrGqAqGkG:?::9:@ƒ:9ƒ:@@AA:@@A@:9:@:@k@A::ƒ A3:3 kA@: 3 3 @@A3::@:9@AjA@@ 3 @A:9:Gk@@kG39AAk@A::2 3A93:@@ô·G“Ž“cŽccd2c”¾½”¾š¾”½™qqA:3Gr99:9::@:9:9:9:@Aj@:@AjA3@:@@33 3@:ƒ:$@@ 9::9:99 ::949@:93:@A@@:dA93:@@ ƒ: k@A3:9:9A@@k:@:9 q:@9ô·ŽiŽcc””“cŽ3””“ƒ¾”™rGqqGq:rHq::9:9:@ƒ: 9:@A@A::@A@3„:@Ak 9 ::@@:9:A@94@…:2@@A@:::@: :@k@;@A@:@kAk@:9:AG@qA @A:9qAG:@:GqAƒ:ô·+ޓޓŽccc3c”””“”cÃqrAqAq:x@A9:::@::ƒ:L9:@k@@3@A@A9:@Aj@339:@;jA9:@k3:@:@:@Aj:@:9A@::3:@::@k@@: 3A@@: 394:@@3@ƒ: k@::qG :@9ôµ(c2-”¾“”ŽcŽc¾“””½”Ž”“¾™™qGqAAG:qA:@:@†:@::@A@„:jA@9 @AA@ 3A3 ƒ:@:: @::ƒAjA@ƒ: @3:@::@:9…: @:@:@::A 99A3@ :@: F::@:9@: @ó´2cŽ2c”3c”“d“ޓޓޔ½”¾””ÃxqGkGqqAG::9::9::?::@ƒ:@9::@AjA::9:@:@3@::3:@A@9:::„@9:@A@…:A 9::@@A@@:3@AkAkFƒ:9 9: @:qqAG:39 94ôµ#c2c]c“Ž””]“””“Ž“”¾“޽”™qrrGrAqA9„:9„::@:@9„:@A@3::@::@:39A@@::„@?4:A3AA93:@A::9::A@:: @:AjA: kFAAk :@@A:@q::3@ AjAq 33:9 óµ,2]dc”””””””””“Ž“ÃGqrqGkGk9:?:@:9@9ƒ:@…:ƒ@A@:: ::ƒ@ :A@A@:@::A:@ƒ:@ƒ: 9:@::@A9ƒ:@::@::@@A@3:9:kFkƒ@@„: :@::3G3G9 : 9 3 òµ'cc¾cŽ“d¾9”“Ž“¾Ž“޾“¾Ž““AGrqGqAG@@::9ƒ: :9::@A@@:9ƒ:9:AF3@ 3::@39AA@@A@@k@@ƒ:@:@@::@AjAAj:9@:@:3ƒ:% jA @@:A3@@Ad::::qG:@G3:9A:3: 3òµ#cŽcdc”¾“]]”Ž””½¾Ž“Ž”™qqGqGkqA@…:9:9::@@::A@:@::@:@::„@M:@::9@kAjA@A:@3:@@AA@:A@AjAF9 ::@:@93 :3@@A@@::@:G:@kAFkG2qAkAAk@:3@@:9 9ñµ632””cc¾”c”¾“cޓ޾“”“Ž™™qqrGrqHj@::@9::@:9::@:9@:@ƒ:@ƒ:@AA@A@::3A:9A@k@k@ƒ: 9:9A:@@:q@@ƒ:'3@A:9 :9 k:@dA@A@:qAq@ j:AAqG:A2A3A@ƒ:9:@ ñ¶#c3cc¾”2]c¾”2c””“ÓqG::qHpA:@ˆ:9:@:@A::@:A9:@9::@k@k:::@::@ƒ:;@:@:@::94@A:@:@::9 A@A@:@4@@A:A@j@k@@:A@:: @@Aqq@ 93@:9ƒ ::3 ð¶+c”2c]¾¾cccÄŽ23”””¾Ž“™qGrq:9A9 ::@9:?::9ƒ:„@"::@A@::@:9:9@:@:@A9::9A:9:@::@@::9ƒ:&@k@:@:: :@3:@:99 A:@:@:A:A:A:@@:@@k@kƒAA@3: 3@3@:: î¶#,””32¾”¾cc]“޾¾“”¾¾“Ž™AqrGGkrqr9„:::@:@:Ak::@:@@k@@3@ƒ:A@A@:@A9@:@@::@Aƒ:@:ƒ@ :@:@@„:!9::@:A:@jAk@@kAp:@::k@3 @3:@kG3@ƒ: 3A@A:99 î·.c]“޾¾“]3¾”””””“Ž“™qGrqAG9HGA@:9@:9:9:@@:ƒ@::@:@ƒ:@::@ƒ:@:9A@A@::A@:A@@:@: @ƒ:893@3::3:9::@ :@@Ak@A@3 @A@3@A@A@::@AGjAq:@@A 9:@@:@ 3î´%”3”c”c¾”c]“””¾“Ž“”Ž““qGkGk@kqA„:@:@ƒ:@ƒ:@ƒ:@@ƒ:@ƒ:9::9ƒ:jAA:@A@@::@3:@::@::@ @:@ƒ::3:@:@k@AkA@@Aj::9@@3@ƒ:qqA9AG: @3:@A:@Akï´ “32cc3½3ƒc3”¾“Ž“ƒ”””¾™qHkGq@@G:@@9::9:@: 3ƒ:#@:@A::@::@:9@A:@@:@::@:@:j::@:@:@:9ƒ:83:@: :::3 :@@kAGjAF@k@:@AG:3 3:9:@:A3:9@:23@A@j@A@ î´ 3“c]]3“]ƒ”“]2ޓޔ¾¾“”¾™™kqqr@k@ƒ:-@::9@:9::@:@AjA@A@@:9:@:@A@::@@::@A:@:@: @ƒ:9„:…@0:3@@:@;qAkG:@;@@Ak@@A3::@ :@A3 @:Ak@3@A@:@::@î—c,œ&Ž“d2¾]“”½”””“”“”¸“””™qGrGrG@AA:3ƒ:9@†: @:@:@@AjAk:@ƒ:@A@jA@@A@:9A::9@:@:3:@:@:9„:/@: @:@;@k@qAq:@j:kA@:@k 9: @@::9A@@A@:@@:@4:9ƒ:î–”23š%“Žc”c”]3\c”Žc”Žc“ޓޙkG:rGkA,@:@…::::9::@:@:@@:ƒ@:: :@::@„:@:@@:@ƒ:93@::@9ƒ: @:@ƒ:/@;@kGAqAG:@:AGk@@A:A@A3-@@3A@:Aj :@::@@49:î–cc”2˜3cc”Žc3“ccŽ“¾c”ľޙ“GkwGkGqx@A9:@9@:9::@::@@ ƒ:@ƒ:@ƒ:@3:@:@:@:@:@:3:@::@ƒ: @::@:@@39::@:ƒ@k@k@A9„@#kA@@:kFk9Aj @@::A:3@@33939A@@:@î–cdc”]˜$Ž“c”“Žc¾”Žc޾”¾c¾¾”“Ž™“™AkGqAqrGjƒ::9::9::@:@:@:@3„: @:@:@9@:3:@:@†:B@:9:@:@:@:@:@@:@@;kAAGAjA@A:kAGj@A@kA@ A3 @A::@@9A@, 9 ::33 9:ï—3232]]—+Žc,c”½””c“”¾¾j“˜“GkGkwrGk@:@:9::ƒ@ƒ:@@ƒ:@@„:ƒ:@ƒ: @:9::9:9@ƒ:9@::@:@@:@::9::@:q@q@k@A@@dGkG:A@:@A@3 3 3:@:@A3: 3:@ …:ï›cƒc]22“+c“cŽ33cc”¾”cŽc“Ž”“Ž“™AqAGAAjGAj::@@::@ƒ:@:9A::@ A:@9@@::@: @:9Aƒ:@:::@ƒ: :@:@A::4„:*A@A:@A@j@;@kG:@j@Aj@A:9 @@:A:@j :@33 33ƒ:@:ð c,33c]c,cŽ“„"”””cc¾¾“d“Ž””“Ž™q9 3q@ @k@9:@:9„:„: @k@:9@4@:@:@ƒ:@ :@:@:@:9:9@ƒ:@ƒ:@::ƒ@/9AkF::q@A@kGAk@@;@:A::9: ,@@3 @:@:@9 :: 3@@:@ñœ]cc32„c3‘&Žc”]”iŽc”ޓޓ¾Ž“Ž““Ž”“GAqAqAqrqA::@ƒ:9:@@: 2A@@:@:@:@A3@:ƒ@::@@: 9::9:@@:@:@@„: ƒ@:A@A@@AA@@kAq@:ƒ@k@::@9 @: @::A:9::@3:øœ ]232,3,,23$c3“Ž“”c””“Ž“c޾cޓޙ“wAqGk@rwA@A„:!@:@A@::@@:3:3@::A@::@A::@:@:@:@ƒ: @A@:@:@::@:ƒ@::ƒ@&:@k@j:AGk@:@:A@:@::@ :@4:2:@:3@: @3ø32c32332,2‹6c]c”2޾”¾”“Ž”¾¾””\3“Ž““™qAAqAqAGkG@::?:@:@::3::A:@:@ƒ:@@A:@:A@::@@:3ƒ:@@9„: 39::@ƒ:@ƒ:kA@kAAj@@:@A:jA@ƒ:94k:@@3@:9 9øƒž]c3]c323232Š&ccŽ2“cc“]c“¾“¾“]cŽ“”c“i™qAqA9A@Ak@A…:@A:@:9::@:A@::@A9:@9@:@9Aƒ:@@ƒ:9:@:3@„:@:ƒ@:A:@A@@A@@A:@@:ƒ@::@:@@:@3::A@: :4øƒ¡ b]3c323]‹I3”23cc]””cc¾”¾”c“Ž”“i“GjAqGkqqr@:@:@::9 :@@:@AjA@::@@:Ak@3A@A::@::@:9…:@:@@ @:@3@A:@@:kF„:@:@:4„::@:@:3@A ::@::@ø„£ c2c]cc]3]2Š$“3c]¾¾¾”,¾”¾¾“޾¾”ÃirwAAqGAqHq@ƒ:@ƒ:9„:O@A@@:@AjAkFA@:Ak@:@:@::9:@@:@:@:@:@3A:9@;kFA@k:@:@@::99:9@::@:9@:@:@93::3Aø…¦ƒc”2232Š1Ž”c]¾”“”“¾”½”¾””c½¾iÙqrGjGkGqGk@@9:9:@:9@:@:kƒ@k::@:Aj:@@A@:@@†:59A9:@::@;@:@:@4@kGkAj@@:@:3@::@ @;@@::A:@@k@ 9 9:ø…ª cc,c]c]23†Lc”“3¾“¾”¾””½¾¾“Ž“”Ž™rwAA@qA@Aq;9::@:::@:@:@:@:@@A@:9@:Ak@@:@:@:9@@::@…:+@:9:@@ :G@k@A@:@::@A@@4:@@: 3@:@;3@3@: 9ø‡­ cc3c]2]32ƒ)c¾Ž3“Žc”¾””¾”¾”¾”“irxA3:q@k@A@::@ƒ:@:@::@ƒ:@::@@A@@9:A9::@@„:@:@::9ƒ:@A: :@:@9 @:A@:@:@ƒ:@:@:3:A@:9@ ::9Aø‡±…c]c]”c2c,cc”“”¾½”¾c”ƒ¾c““Gk@qGq k@A@9:9::@:@:AA9„:@@::@ƒ: AAj@:A:@:::@„:9 @9 ::@:@:94 @:jƒ:@‡: 9 9A@j::9 ƒ::øˆ´3c32c22cb™@ci“™”“¾¾“”“””“2GA@AkGqqH9@k::@::9::ƒ@:AFƒ:A@:A:A@@:@:@@:@:@@ƒ:-@::93@;@9::@kA@@:jA@:@::3@9@:@ A:3::33:9øŠ¸'dc3323@:@2@ :3@:@“™““˜“™™qx@qAqHkA @@„:.@:@A::@:@k::F:3@jAp:@@:@A:@:@:@A9:@ ::@@3:@:@…: :: @ @:A:@ ,@@:@@ 3: 3øŠ¼Fc3299:3:: 3:3 q::ArqA :993 :k9::@:@@:A:@::Fk@::A@::@;@:@:@:@;@„:3 9@::@:A@@::@: @:@@33@:93 „:@4ƒ:39ø‹¿,3829 3 ::9393@::@:k @@ 2::@3 :@:@k@ƒ:9A:@A@@::@@:@:@:@::@ƒ: @@A@:A@Aƒ:9:ƒ@:@A@3@@A@;3 @:@:9 :@::3 ø‹Ã332:9 @ 9: ::@: 3@AqGq ƒ:#9A@@::@A3:@:9@::@Aj:9::@:@::@::@:ƒ@39;@Aj:@A@@:@:9 A@j::3:AAƒ@ 9A@A3:@:@33øŒÉF9:9 9: : 9A@:@qqrqG3G::A@:9:@@:@@9:@A@A@:A@@::94:@@4::j A@@:A@49:Akƒ@:Aj:A:@A@@k@3:Aj@3A9:@  3øÌ2: 3 :9 @@3:@GqAqA:9@Aƒ:9:A@:@;9 9:39:A@:@Aƒ@::ƒ@,:@:@;j@A@@ApA@A:9:9A@k@3 3:@@:: @: :@33øŽÐ 894 3:@@;@„:#9 :9:@:@:39@:Gk@:@A@:9:@kA:A:9A:@„:@3A@A@kAAk@@:Aƒ@:@AjA3@A: :@3::@;::3 øÔ<99 3 :@::@@::9::@:@A::A3:@Ak@::A@::@@:@@::@4:: @@k@kApA@kƒ@ k@4@A@A::@A@ƒ: „:@39ø×=]A39@:@:@:@4@:@;@:@:G@:@kA33@:G:@:@jA:@::9 @3 jA@A@AAkG:@;@4ƒ@:j:@:9:A@ @:@@3 3 ø‘Ú 3b:9::@:9@@…:-j@A:A@@:GA39:9:A:@::9@A39 @@:k@@j@A@@Aj9A@:A@ƒ: :::33::@:3ø”Ü 23cA@@:;ƒ@%:9@:@:93@A:k@@:A@@::@::@;9:A@kGA@:@@ƒ:9:@:@kA@9A39A@3::@:@3  ,ø’ß32-239†:C@:@A:@@9:@@:A@A:@:@@A9:@:@33@Ak:9A@@::kAj 3:: @: 39@9 ,323øŽãL32323@9:@:@@::@::Ak:j: @:@::9::@AA9::@A@AjA:9@@A:9A3 @::93@::3 ]9-2-,øæƒ] 2]3] :@@:@Aƒ@:@::93:3@@;9@Ak@A@9::@k@ƒ:@:99A@3@:@@::@9:3 ]c]9]c2ƒcøŒê13b2]323:94::@A3@@A:93: 3:9933@@A@:@:@:9 :@:@@ƒ:@ 3 ‡3øí"323,]2c39:A@@:9@:A@qA@A:Gk@A::@Aƒ: 3:3@:A@„: 9 3øšñ3323,ƒ2]…:@:GkA@@kGA:@::9 9:9 ::@„:@ 99 øšõ33,†c::9„:G@k@:@ƒ: 9ƒ:@ƒ:@3 39 3øšø3323‡cc9:3:k9:39::9:9::@ 3:: øœø„,32Œ3394:::::39 93øœø‡32 33:93 9: :ƒ øžø‹,]2ø´øc]ø³øøÄøøÄøøÄø§22ø›øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄócc]c,2,23232ø¹îƒc],3ƒ2 3]2382c2]2c]ø¸ìc]]c]c223,23223223322ø¶é!]c]c2c38322,   93 3 99ø²çƒc'9\39283: 3393 :9:3:9:39 q : 3 9ø«å)]2,c3c9]22:3 :99 :3::9::9 AA@439:9 ƒ:ø©ã223cd]c3cchc33::9ƒ:3:::@:@::99:@::@:@ 9 93 ø¦â2] ]c3†c 9 ::@ 9 ::ƒ@9:@@:@:@ Aq::@ƒ:9:@ :@3ˆ232ø™à,c3]]9]]c22c3bi:@::@@::@A@@:A…:A@ƒ:9 @@::@@„:@: 9:232,3\3232ø–à“3]cc23dcbc99:@„:9:9 :q@:@@::@A@A@@:3:@:@A:@ƒ:3@:3:::22223ø–Þc322cƒcŽib9 9:9:9@@A@A:kGA@::ƒ@k@k@:@::Gq:@:A:ƒ@ 9: 9 3: icii]b3ø•Ü83233cc]d9ih4:9:A@A@:@Aj@: 3@qGk:@A@A@A:@:@A:@jA:@…:9: 2 3 :’cccø•Û 2”233cŽccŽƒc'iŒiAj@A::@::AqA@A@qAqAA@A@kA@k@@A@Aqq:ƒ@:AA@ƒ: 3: qA93 38ibcø•ÙN]2Ž232]c9cccib@@;@:@A@Aq@AjAkA@:@kA9:@@kAqA:k@k@GqHk@:9:j@::@39 k@ 3 3icø•Øcc323,ƒc(cŽccŽbc@;@@kA@k@@AjA@A@qAkGqqGkAk@Aq@Aƒ: A@:3 qrGAƒ@:@A9 3Gq::@3ø•× cc2c3,cŽ]ƒcF]cdc“@@:@A@A@Ak@@:qAqA@qGqGkGk@A@3AqAj@Gk:@@9qrq::@A@::9:GqG : @@ ø“Ö,cc]2d9cc3ccic::@k@:2 jAAqGqAk@qGkAqAAGƒ@$3G@qGkG@kA@::9@3r@@r::@Ak9 33:3ø“Ö]]32dƒcc3cŽƒcE@:9 3:Aq :q3Aq:@AAk@GAjAkqAkA3GqqGkGqGkAkAA@@Gqr@:qqrA9 9Gk@:øÕc]23„c]3ccŽci::939AqGqƒ:8:@@qGk@kGqGqGkGqArrGqAqqA@GkA@A3: qqGqq GqA@:39Aq@A3 øŽÔc]c3“ŽƒcQcccci@9: @:AqAqAq@@:@AjAq:3 A@AjGqAqGAkAqGqA@kGjAjA@:@Hqq;G:9::9 : 3 q::G@3øÓK]cc2dcc]cŽcŽcŽ“i@@:3:GqA@9 : Aq@r@:A@Ak@@j:3AA@qGk:@@ kAqA@qG@A@A::9;@ ƒ:::99 93:Ap:@A:øŒÓMccŽc3cc]cdcci“i“A39:@kG::qrq kGkGk@@A@@A@;@G:@AkAqqA3Gq:@:qAk@kAjAA9A@j9ƒ:: 3 :AqAA@@ø‹Ò/ccc3c]cccd““h“@k: @:A::@k Gqq@A@A@33@:k@A@ƒ:9ApA@k9G: @AkAqAA@q@@Ak9::A9ƒ: 9:@@39AqAjAkAø‹Ñ ]c2c]3cc3ƒc%di’ii“™@: @:A@kA 3q @:@:@ :A@k@kG„:A@kG3qq:@qAAqrw:qGkƒ@AA@@:@„: : 3GqGkG@:øŠÐ c]2c]cc]cƒc“bi“’i@A@@j:AjAF:99 ::@„:8@:9:@AqAq:9:@AqGGr A@rq:AA3GkGkA@qqAA:@::999 9AA:@AkA9øŠÑc3-cŽˆci““i™“A@:@A@k@93:@ @@:Aƒ@6:Aq: :Ak@qG9:@AjG::@qkAqqAq@A@3Gr@AqAq@k@:@:9:49 9Aqkƒ@A@ø‰Ïec22cccc]cc“h“h“’i@k@k@A@AA9 :3@AkkA::qA@93qqAkG::@:@@kAGqG9AGkGkG3:@A9qG @@:: 39:393GGkGk@@:øˆÎc2ŽŽcc3…cZbic“i“o“G:@Aj9Aq9 3:@:@A@A@@:@:3A@@:A@Gk9Aq:AkGq:q:AAkGk@G::@A9Aqr@4@@:9::9 44qGqAq@kA ø‡Í]cc,c3ƒc]cchib“h™“’Aj@@k@: @A3 ƒ:D@:kAp@kGk:::kG@A@@AqqG@qA:AqGqAq@A:qAq@34@Ak@@:@:9: :9 9::qG:A9A3ø‡ÍƒcŽc3c]ƒc@icb“i““i™A3A@A:Ak 39::9@::@@A:AkG:9:GAkk@:A@@A2“i“AqGqq:@@k:9rwrƒ@AkFAA:@ƒ:99 3 @@ƒ:@::  øƒÌc]cc]2…ch““i“@™’™“@A@k:@G@„:G::93Aj@@:@::„@:qAk@k:2bi“hkG4kAqG:qAA:Aƒ:Aq@:@…:9 3 k:@@:@qG94:@: øÌc3c]ƒc-]ccbi’i@“™“™Ak@@Ak@3 :99A:@::9@:@::@Aj:@:ƒ@7kGA9i’ii“ @kG qq:AGq:@@:@:9@@:@:993A@A@kG:A99 3 3 øÊ c]2c3]cc]„chcƒ“2™“oAAq@@Ak@Gk@:9:@:@@Ak@::AA@A@@AA:AkAGkG,:ii““hƒ:@b::AkF:A@:@9:@A:@ƒ:9: 3@:@:9A@kA:3 k93 ÷Ê2c]]c„c.]ic“h“i˜i™jGk @k@A@@Aq : :@:k@A:9:@@A@jAk@j@Apƒ:(Aq@“’i““i™:A83GA99A@:9AAq::@::99 3:: @„: @Ak@: :9 4 9÷ÉZc]23cc]ccŽcbi“i“™i“™“™A@@Ak@k@:9:@@A@Aq@: @k@-@:Gk@AkA::@:9ii’i“˜“hcqA:“i9 :@k:@kA@93ƒ::9 :@:@::@AG@: 93 3÷Èc]c]cdƒc#]cci’“h“’“™“™ApAk@@A@k :9:@AjA9:@99„:@AAqA@@Gƒ@:kA@:bii“™“ibcGqA™A233@::@@9GA9:93:93@A:9:@:k9::9 : öÇ2cc”ƒccch“ii“™A™’™“Gk@A:AjGƒ:S@Aq:@@;:@ 9A:@99Aq::@::A@kA92i“’™“’i™8kA™’ii8 ::GA9 :Aj: @9: : 9:@Ak@@::@@3:: :3@@3õÇx3]ccŽccc]cciib“’iA@™“™AjA3GjAq k:9 k@:@A:G::@A@@A@A@@:@:@k@k9G32c“i“™“™bcA@Ak9A@3@kAqAk@:3: ::9 9:9:@::9::@:@G33 @:õÆ 2]c3c]c]ƒc]“i“i“™™“™“GA:k@G@3A@:: @:@A@kAj@:@k@k @::q:@499:GkG2ih“h“hcc2@jA @::@A@q@:@:: 9::@9:9 39 „: 9:GqA9:3 9 óÆ 3cc3c“c3ƒc!“h“h“™’“™“˜“q@kG@kA@3::99:@:@:@@A„:J@AjA:qAA@:: @ Gcb™“i@iihib339@k k@@qAA@:3A@:::9 4 3949 9@::9Gq k@:3 9 óÅ2cƒcŽ]„ci““i’i™“™i™qGqA@A@k @A@ƒ:@A9„:9:@@kG:@9AqA::@A3 2c22“™bƒ:c283@A3:3@@AqAq@A:q@ƒ::: 9 9::3:9:49AA@@: 93óÄR]cŽdc3cccb“hi““™“i˜Ã™r@:@@kA9:@kG@G:3:@:@@A@:@A@kA@A@@j: 9 qc82ci@:@q99\2A@ ƒAkƒ:$Gk@:GqG:@:9 93 93@ @A9 9AAqq3A@3 óÅ”c“”c2cii“i“’i™’“ƒ™eÃqAA:kGj::@AqAk:@:@Ak@kA@kGk@ 3@:@A:: 3ikA2ck@qAAb3c@4q@qG@ 9:3 3q:39@3@: 39::@A3::9GAG@Ak3óà c]cc2]cc]„chi’i“i“™™Ã™ÃGrFk@@:@A:@qAqƒ@T:AqA@A9:9AGk@@kAqkGk 3 b@A@2“i@qAqG23:@:@:AqqAk:@::: :9: 3:339:939A@::9:q@qGk 3óÄ]i,3c3c]cc“i“i“’™™“„™ qqAGqAqA@ƒ: @AqA@AjAFk9ƒ K939:A@9AAq3Aq:k:ci3::Gk83\::@:@AqAqG3:@@ 3::@A9 9:9A94:AA9: @:9 q::G@3óÃc“3]2]„cih“h“™“„™;ÙqrGkAqAAkG::GkG:AkGA@3 9393 : 99:@:@9::@A:G@9bibi“h“83:A@ƒ:3Gk @::ƒ@ :9:9 : @A99:@k: :: :AqGA9 òÂ(c333cc]dcc“i““˜™“™™Ãq™™qAqA@q@q@:@Ap:ƒ@k@:9 :ƒ 3 A3 :@:AA9:@kGA2cb™bci“2ƒ@k@@A@Aƒ@k:@;ƒ:9 3A3 , : 393@@k:9:@9Gk:933òÂcc]3ccci’“™™“ƒ™5ÓŽÃqqGAqAkAAq9@AA@k@A9: 9:@:@@A@jA:3:@kAGk@Ak@8“icƒ23iic3@:AjAk@:GkAq933:3 :@3:4:@A:9:@: kkGA93òÀc3cŽ3““3]ccii“™“ƒ™$·””“™HkGk@GjGjAA@:jAA@A93::A:@:k@@A@ƒ:E :@A@Aq@Aq3bib?bib23@:A9@@q:@k:9::@Aq@A@33::9 ::@9:9A@A3 @: @A@kA3òÀy2]3c2”cccdŽ™“˜“™“”””ÙqGkwA@k@A@A:@@AjA9:: ::A@k@@39:9::@k@@kG:@28ccb““j3\i3@A:Aq@:@::GqGkAjA: 9 q3:: 939 3 @k@jA@A9óÀ+3]8]2dŽccc““i“ޓޓ¸“Ž™qqAq::AA@AjA::@kA‡:P@:@9:@4: : 9@A@k@G392c2chi“i“cŽi28,:@;@:@AqAqAq@:@9:A@3:G::9:3A q@ 3@A@A:@@ òÀ5]cc3c”ccŽc””“Ž“””“Ž“™kGAq@Ap@:AjG:@@A99:9:9@A:@k„:9::93 9Aj q 3 23282ch“hcƒc“329ƒ:9::GkGA@…: @@::9:k AqA@3 @3q:: ò¿ƒc$]3ccŽcޓޔ“ޓޔ¾™qGkGrAA:qAAjƒ:9… 9@A@:9@A@„: ƒ:9 Ak 3:i2cii“™idcc“23233A@A„: 9:k@:@@939@::9:99A@kG3 3GAAp3ò¿3cŽ“dc2c3”cc”“ޓޓ޽””™qrqr@AqA@k@qA@:@3:933@A@k„: 9A@@:9: :9:@qƒ@; , 2i’i“G““ŽcŽ2,:@qAF99:: @@;:9A:9 9@A@:9AqA39@kGkAó¾(c]3“c]33”c”ޓޓޔ“Ž“¸“™qHrq@@k@@Gk:@ƒ:7: @:@Ak@9:@@:@A@:@@3:@: ::@:@@:“i“™“™“ccc3AkA:A94:ƒA :@k@::99ƒ:AA:9:9:@A@3@AkG9ó¾-2]3]3½3ccŽ”””“Ž“¾Ž“™ÃGrqNA@@AkA9::@9:3„:S9::@A@:A@@::@ @:@3 :@A:Akhi’™“™™cŽc9kA@kGq9A@k@j A@:@A 9:4:@:@q@ 9Aq::39AqA9:ò½23],2c”32Ž“cŽ“”“ޓޓ””“Ž™qrAqqAjA:@9:: 3 3@A99ƒ:@A@AjA3@:@:@:A9 2:AkA@32cbicƒ“ƒc,kA@qG@k:@:G@AAj@:@k@qA3:9::@A@4::GA3GkG3ƒ ð½]c33“Žc]c2“ޓޓޔ”””¾”™kGqrGAqA9::@9:9: 3:@:@A:@k@G9A@Aj†:BkAj@333i,cbii™““3k@@kGkFA9G@@A@AjA9:GkGk9A@::9GAk @: @A@kG9 @ƒ:3 î»2cc]2ƒc6]“Ž””“””””™™qqAGjqGk99::49:@:@@::@:@A:9:@:@A :ƒ@BA3@@A9A:@ :i8ich““™“c]G39AAq@kGk:@:kA@A3::GkG k@A3GAqG@3@Ak@jAqG::„@A: íºc]ƒc3ƒc9]ccޓޓޔ””“ޓޙqGAqAA@kA::9: 99:@AA:@A9A@:@@kAk@39Akƒ@A@A@:3 3“2ih““™“™c]9ƒ: 9:GAk@@kAƒ@#kG@:qA@:AkG@kqkA@3@A@AqGkG::@AkG9:í¹yccc,cŽcŽcc]cd“Ž“”“”¾”™™qkGkxkGA@:::9 9:@:@k9:@::@:Ak@@:A::9:@;::k@3:9A:,ic™“˜™“cc]c@@::@kG@kGAj@kGk@:Gj@@AqkA@Gq@A9AkGkGqq @ƒ:k:î¹,c”Žc ]ccŽc]“Ž“”ޓ޾ޓ““GqrxqG:q3:39 …:ƒ@WA@k@:@jAAk@9@9: @@3FAk@Aj ::2ib™“o“™c2c@A@AGjAGkAA@A@A@@AA:k@qAGjA@Ak@AAkFAqqA::k@@Að¹c”Ž23„c0cc”“ޓޓ”“Ž“c¾™ÉqrGxAGkGk9: ::9:@::@AA:k@AjA:ƒ@NA3:9@:@33A:9 Ak bib™“™bi3bic:@::3G::qG::jG3:k99:9A:FkG@k@AkGqAq@AAq:@@Ak@9ï¸Ac,ccc]8]cŽcc]Ž“Ž“Ž“ŽŽ¾”ÙxGrAqAjGq: 9 3@::@:@AAjA@@A@A@AjA9:@ƒ:,@;@@:@:@::9 3:92“8bchcb93@A:kG:@2AGkG::@ƒA@A@kG@AAk@A@:@kGj„Ak@A9 ï¸Bc]c]c33cޓޓcŽc”¾”i¾Ä¾™™qrqAqAqqA3:9@A::@A@k9:9:Aj:AjAA@:@:9ƒ:AkAA:k@@::@: :c2c8c22ƒ:1Aj:3Aq:@:Ak@A@k@@A9@@k@@Ad@A@qAjA@@:A@2@@:@9 3:í· cŽ””“”„c c””¾½ccŽƒ¾#”ÉÃHqApAqGA93 @;@::@Aj@:::@@A@:9@…:K@:@@G@:@G::9@9Ak@@:A8A9A@@A9c3cc9 99:9@Ak9::3:@A@A@j: kG3 :@AA@::Ak ï¶2”cŽc”Žc]cŽ,””½cdޔľľ™™qGkGqGkG39::9A9@:@ƒ:%@:@@Aj::@::@99:@A@:@:k@3A@A3 9:@:kGƒ:Gk:Aj: ccc]:c] ƒ:@@: 9 @k@k:@:99 @ƒ: 2@::FA2 ï¶92Žc“3cc”Ž“”]cޓޓ¾“¾”½c™ÃxqGAqqHq:: :Aq@::@@A@:9A@@ƒ:@:@:@::AAGjAjA@„:9@:@Ak9AGk@:@3G9@@3:cc]c]ƒc] @::@::@-9@:@@ƒ:@@:@9 3:9 9kA3ï¶?iŽc””“”cdŽ“c”“¾”¾”¾”¾ÃÉr@:rAAqq: :pAA@:9Ak@A::@kA@A@::@ƒ:7@:9A@9:@:A@A@9A@A@AA:Aj@:3::9AA:@@3c]9]@@:@::@:93@:@„:@@:94:Gk 9::Aj@ð¶9cŽ”dcc”cŽ“i””Ž“3,3“¾½¾“”ÃNq@@qAjx::9: kFk9: @k9::@@kƒ:&@@A::9:@::3 Ak:@k@kA:@d j@@A3@:9 @Ajƒ: 32c3]c:Gƒ:A@3A9;@:: 9: ::qAq ::: ï¶1i32ccŽcޓޔ޽”“¾”¾”¾”¾”¾“ÃqrGkr@AxA 9:@A@AA@@ƒA9:ƒ@):9::3:@:@: 9:9A@A@3 :9@@A:@3AAj:@@A@::@Aƒ@*9:]c39:Gk@:9@:A9 9@@3 9:3::GkG3:9:3ï¶72Ž”¾3c”Ž“c“”Ž“¸”“¾“¾“¾“¾”™rqGGrFkGk 9:AjAjA9AjApA9Aƒ: @@:F::@:ƒ:, @kGk:@@A9:@A3@A@:A9: :@3:@:A:]c:@@:G:@:ƒ@: ,:@:: 3@::@qA :@ƒ 3ï¶E3,dc“”3c¾ccޓޓ¾”Ž“¾”Ž“ŽÃMqArxA@k:99AA@:9:AA@:@:@:@:9::@:9::@9ƒ@ k@@kAk 9:@@ƒ:9@@Ak9:9:3 9A@@:@ 39:G::k:@@:33 339 :@A33@499 q43:@3 3 ï´c2Ž2”Ž”“cc¾¾ccŽ“¾¾“Ž“”ƒ¾”™™kGrxkGk@:9ƒ:.9::9:@9A@94:@:@A@:@:9:@::@:A:GkGAp@:A@;j:9@:k@„A1 3 9::3 @3:GkG@@AjA@:A@A@: @@3: A99q :9 @::3 ð³ ,33“”“Žƒc+]šc¾¾¾”“3¾¾“”“Ž”ÃxqrxAqAG:999:@@::@::Aƒ@:@A:@::@::A@:@:AjAk9::AjAq@ƒA@Aq@k@k@:@: :kG :9A@@A@AA@ƒ:ƒ:3 9 :9::A@43:3::99ï´,“Ž3¾”jc]¾2]c”“”¾“33¾“Ž”¾”ÃHqxGqGqq:::9ƒ:4@:@:A@k@A:@ -::@::@AF:@:qA@G@@AG@Gk Aq@qk@@A@AFk93ƒ: q3:9 Ad@k::ƒ@:A9 :@9: :: 3:9:: @::3 ð´"3iŽ9323,¾”32Ž”c޾½”c”¾¾”½™qrGƒq GA@:9: :@Aƒ:1@A@k@@:A::@::@::@:Aq@:@AkAkA@q@kA@@A:@:qAA9 : „: 3:Aƒ@::@::@::ƒ@kGAA:@A3:9 :k::@:@  ï´ c3c]“cƒ¾3cc3¾cƒ¾””ƒ¾Ä”¾qHqqHqB@jA9:3::3ƒ@>A99A@A:3:@:3@::G9:@:Ak@:A:k@ApGk@AqAGk@@:@::3@:9 :9G@: G:@kA:ƒ@k9:@::qGkqAkA39: @AkG 39 93 ïµo32c””Ž”cÄ“33\””b]Ľ”½3c¾“”ÃwHrqxr@A9:::99AAj::A9Aj@@:@: @AqAA::GjGAqA9:9AkAFk@Aq@Ak:3::9@: 9;9 Ak@:9::@3:@ƒ:@A9:qGkqGAjG9A@:9:9@:9 :: 3 ð³c23Ž“Žccc3”¾“¾c¾¾“¾”“Žƒ¾A“”¾”ÃGk@xAqk::::9::@:@:@:9::AA@A9::9:@q:@@AkGjG9:A9 qA@kGAkG9@:ƒ@1:@:@::@2 @3::@@ :A:9@A@A@:: :9:AqAk@@33 9 @:9 ñ³-c]2”“]”c¾¾“¾”¾]“””ޓޓ¾”¾½”½™rqA@@rq9::ƒ:0@A@@::A9:@kA33@A@A@A@@;@k@Ak:@: 333Ap:9:::A@Aƒ:(9 AA@kA@@3:@jG@:kAk:@:9 @:qAGkG39:3ƒ: 3ñ´y23]32”¾c¾”¾”½”¾3¾“ޓ޾“¾¾“Ž”¾™qxrGkGxrG::9:9:@@kAA@A@3:A@@3A@k@k@A:@@A@A9::G:3 9:@:@:A@@A@k@@939:3@A@A99 :A:A9:Aq:9:3: 3 3@AjA 9ƒ:@3@@ñ´33\”Žc3c¾¾“¾¾”“Ž“¾”“Žƒ”½”™qAGkGqrGk9„:a@A@j9Aj::@:ii@d@@AAk@jAk@k9@:A@9: @ :@:A::A@k9: 3:@: 3:@@:qkA:39ApA:A2:A9::@Ak@@Gq 3 : :@:3@ò”2Ÿ ]2Žc“”¾“”c¾ƒc%¾”””¾“”½”½Ž“ÙrGkGk:Gk:::::@jAAƒ:Gk:h“b:@:Ak@:A@3 3@ A jA99 @ƒ:Gjƒ@9ƒ: 333A9::9AGq G 3@@k@::@9ƒ: kG@Aq : @: 39ó’””]c23™)”c9]”½Ž“”“3”“Ž“”“ŽŽ“””Ž™qqGqqAFqGƒ:b9::9A:@@:@@A@A9c@3 :qA@@k9 @:9 k@9 9:3::@3 @A@3@A@::@3 @A39 q@3 :A@AGqG3 @:@:9@:k@9:@::9::ô’c“¸2cc]™“3\3c“””¾”¾c”c””¾”“”ƒ¾8“Ž™“Gr:93AAq:99::@@kA@:Ak@q::@:@3 3AjAGA93 3G9A3A@::ƒ@5A::k3@:@::@:@::@3 3@A@A::39A@3:3AA92@AkA@@:: qA94:ö’ccŽ“,c™ ]”c]2ޓޓޅ¾”½¾””¾¾Ä¾“”™ÃqqxrApAqGƒ:`9::A@@k@k@AA@@:@@AA9::3A99:@ :9A@A@:93@@:k@:9@::@@A:A@33 AjA@9 39 9:qA@:3GAq::Aj@:@9Gq:ö“]ƒc]cƒ223, 3“”c3c3ƒ¾y“¾”Ä“¾””½Ž”]2¾¾”\3ß™rGqG3AAj@9@::@@k@: A@q@::@:AjA@:39@:@::@A@A 3:@:9 9494 @A94:@@3:@:@@jA9 39:A@qA 3:@@AqA93A@GA:@:AkG9ö•c]ccc3]33]2Žcc”2c¾ƒc$¾“¾”¾”½”½”“¾”“¾””¾”ÃGqGkx9:G::9:9:ƒ@KA@j@AAj::AkAAp:::@A@@:@AjA99::9:@:@:@@::9:@::9@A@kA@A@k: 9:AqAq:94 kGk@: ƒ: kk@:@@k:9õ–”Ž“323Ž)c“Ž3¾¾”½””“޽””Žc¾¾”޾““™rqrxrxAq…: @::@k:@:k@AA„@:@: 9@@kA9 @A@4@::@:@:ƒA+@:9::9@Ak@:@AjA@::3 qAG:A@9 :@@k:@:@9 ƒ::AA:: õ˜ cccŽŽ“323,Ž“”c”2””½”]c”½”¾“¾¾””Ĕޔ“™@GAxAGqG:99ƒ: 9:@A:AFkG3@ƒ:7@@A3@:3 3:@::9: :@:Ak@q@9A93@@ :3@AA:@:@AA@:3A@@Aj:9@ƒ: @A: 9:@A@A9:q9 :9õ—c]3c”2233232]2‹ cŽccŽ2c¾”ƒ¾“”޽ޔ””¾¾cc“™rƒqAqAkGƒ:ƒ@:9:@@:AA9 @:@:@:3 @A:ƒ@E::9A9:99::G@GA@kA@A9A :9:@k9@@Aj@:j :@@:q@A@::3:9:@A3@:@k@9: A9::õ—39dccc]c]\c2]9,‰ycc””,c¾”½¾”¾”“””“ccc”””™™xqH9qGqq@:9:@::@@:A:9@::9:@33A@3:@AjA::@A@A94@::AjAk9@:@:@;93 :9: :@k@A@: @93AkGAkA9@@:9:93A@A3G:@A33@3 õ˜cc]cc]„ccd]3c2ˆ3,ccŽŽ¾”“Ž\¾””“޾”¾”¸cc]“Ž“ŽÃ™xqrGkx3qG:@@:@:@:@ƒ:-@AAjA@9 39A@A@:Aj:@A9@:@3 3A@A@:@A:k@:9:@4@„: Aj:3 3 3G@q„A9AA@:@q9:k3939:@: @ õ˜ƒc]3c3”3223c‰.c3ciŽ3¾¾“Ž“”¾¾2¾”“”½c””¾“”ÃrGqrGrxrGk:@:@A„:@A9…:@A@A9:33A:jAA@k@AA@:Aƒ@9::@:k@AA9:@A@3@:A@A@:9 9A@ƒ:9Aj@A:3@A3qAGGA :A@:AA9Ajõšccc]“Ž22]3cŽ23‡3c”“޽c“3cŽ“””c]c¾¾”¾cŽ„¾P”™™xGrqrGqAq::AAk9@@:Aj:@@A?:@kAjA:@@k@@k@@Aj@:A@::A@@:@k@ApA:9A:@::@Aj@kA33 3Aƒ@:A@@:qA9A9: AjAqq q 3 ::9:: õ› cc”cŽ„c‰.c3޾”]“]c]c””¾¾“]2¾”¾”¾½32ľ“ÙrqrGGkGkG:@:@Gƒ:.@AA@AkA::A@AA@::9:@A@A@AjA3 j@3AjAk:AG@A@A@::@…:'@A@@3@@Ak3G:@A:qGk@3:9@@A@:: @@::3öœd3\332cc2]]c3‡2”c]22” ]c”¾“ƒ¾ľ¾½¾”¾””“¾”™™xq@qqGqGk:@:@ƒ:[@@::@:@9:9:@kF::@A@::@@k@A:@A@:@@ k:9@k@k@k:3:@:9 9@@:3A@: @AjAjA3GkA A@q:@39 :@k9A:@@: ö cc323]cc]cc3ˆG,c”“Ž”¾c2”½¾”¾¾”¾”“”¾š¾“¾¾“޾““xrq:Grr9:AG:@::@@:@:@@:@3:@:9@::Ak@:@A9ƒ:B@:@::@::9 @:A@A:@:@:9 :: @9:: @@:@k@A@A@@A@@k p q:: k@kG :3 , 3öŸ cc”232c3ŠcŽcŽc¾”cc”“”¾½Ä¾2ŽÄƒ¾”¾“ƒ¾™xxGrqGrrGqk99:9@:qA9…:9@:@::„@ :k@A::@A@:@@„:@:@Ak@„:9:@@A@:@:3@:A@k:ƒ@ kAj@::G@A@Aƒ: GAAk@:@::9÷ ƒc¾,]3Œc”“c¾½c]c¾”¾”¾”¾”ƒ¾Hľ“¾¾Ä¾¾“™rxqHqxAqAG:::AAkAk@Aq9:@ :@::@:9:A@A@:@k::@k::@3@@:@@ :@9@@:@…:'@::@@kAq@AjAqAA@kAj9A:99:9@k9:Gj@@3÷¢cd2‹2,cd¾””¾”ihÙb¾“”2““¾Äƒc“”“cikxGqrAqGqA9„:@@G@k@Aƒ:9:@ƒ:A:@AjAjAAF:Aj:@:@ …:49A3 :@3 9:@:@:A:@kGA:33 q@3G@A394@:G:A@A@AA93@÷£c”c]2]‰c޾¾½2™2bci™“c™ÃÙÉÃ3]ƒ™ ÃÉ™™rqGqGqAqAƒ:9@ƒ:=@Aq@:::A@A@k9@:@@A:@jAF:@@::@:@@:@@ 3@@::@::3:@:@@kAAjGk@Aƒ@ƒ:@3@:A@Ak: 9Gjƒ:: ø¥ƒc323‰2dƒc“™c“bq9GA@G:rxrGqƒ™$Ù™Ãxqq:Aqq9:qG@@: @:@@:@A::@9:@k@AFƒ:9A:9@ƒ:@:@::@9„:393@:@@ @ :A@kAkFkGk@@A:kAkG:9::A93:@@A3 :@A@-:ø§d\32‡8”2c“ii“b3@: 9kAq:9:wr9:9rrG3xrxGq::GrAGk@::9A:@:@::9@@„:@k::@ :@:A@:@:@: :@ƒ:@:@::@:A:@:@,@:@:qAqGkG:@A@jAqƒ@: :A@ 3A@A@3@Aj  :3÷¨cŽc2]3†3ci23:9:q: @k9GAGqHAAGkq9rxGrq @AjG::@A:9::9…:Q 9::@::@:AjAj:@3@A:: @:@:@:@ @::@: @:A@kAqAqA@@:@:Gk@:A@k:9A9@@:94@@A@- 3 :: öªcc”]c2…Ž232kGƒA6q :9:3 :3 Aq9qqGkArGArwrGk9Aq:@:9:@:@:@99:9:9 9::@9ƒ:@::@:@ƒ:9:@ƒ:8@::@3A:@::@:@:qAqAq:@@;@kqA@A@:kA39 3@;@:@A@j: 2 3@:@3õ¬c32„1c22ikGpAA39:9: 2 3 qAqAqGqqAqrGqA:AG3@:@3@3 ƒ:@:::@…:@@:9:@:@::9:@::@:@::@ƒ: 9::@@k@kGkGƒ@ A:jGkGA@:kG@3 3@ @:@A@3:@A33@ ƒ@ õ®Ž2ccƒ-ƒ28Ak9G:3 :9:::A@39:@@…:@A@A@@:9:9: AAƒ:@@A@::@:3@:9A@ :@:…:@:@:@:@:@:@::99@:@AA@kGk@A@j@Aq@@:k@Ak@9: @3:Aj 3:@3:3 @@:kA@õ¯Qc]d,23]32@@ :9:93::99:@ :: @@:9::99A3: q:9A:@:2:@A::9A3@@::@:@:@9A@3::@@:@ƒ: @:@:A9:9ƒ:@4AjAqAA@k@A:qAA@;ƒ@A@@4:3 k::@@3ƒ@ :3@Ak@A@-õ±Ž“3„3c2c33 99:49:3Ak„:&3GA39 G3:kGk:Gk9:@:@A3@::@@:: :9@:: 3„::@ƒ:0@:@:@:A@:@3:@:@3kA@:@jA@@kGkG@j@Aj;@:@99::@::@…: 3@A@@:k õ³32„Jc8c3: 49A :9:9 @@3 @kGrqq:@A3@A39AGA::@@::9:9:@:@@:@::@@:9@:9:9::@:@:@ƒ:0@:@;@@:@:@A@qAq@@AkGkG:@;@:A@::@:@A 99:A:@: 3„:@ƒ:3ôµ c]3,22A39ƒ:@9@ƒ: 3A9 :qqGqH94@:q@Aq,@AkAƒ@A@::A@Aƒ:@A@:@ƒ: 9ƒ@:@:@:@‡: @:@AqAq@A@kAq:@A:@k@@:ƒ@:9@k3@::@:@ 3@A@@A@9:@õ¶>3\323b: @ 9 :39:3 :9Ak:AGkrqHwGqGA@rA@@A@:k:@:@@Ak9:@ A@ƒ:+ @@::3A: 9;@::@:@@:@@A::9@AkG:AkGA@@:@jA@A„::9@:@:@: @ 9 @:k@A3@:õ¸c3ƒY32 99 :9A9:@@9AG3:@qrGk:Ak@Aj:jA@@:G@kGAj@:AAj:@@:9@:93@:@: 3@::9::@:@k@:@9Ak@:@k„@:@k@;@::@:@:@ 99ƒ:@ 39::@::9 k@3Aöº2ƒ ,,3 :93 :9„:9@:@ƒ::::@ƒ:@„:@k@A9ƒ:@A@:ƒ@:@:@‡:.3@:@:@ @@:@:3@:@;9A@@: A@::k@@:A@:9::@33@4 :ƒ@: 3@A:@:33@÷À29:4 3: 9@:A@A:3::39ƒ: 9:9::@@A@ƒ:@A@:9:AqA@::@Aƒ:F@ 9:@ @@:@@:A:@@:@: @@kGk:@::9@:@@:49:3@:@@: 3@A@@3@:9: @A@::@:@:@ ö 333:9 3…: @@::@::@:@:ƒ:@@::9:@@::@A@:3A@k9::@:9ƒ:A@@:@::ƒ@;@:A@AkqAq@A@@39„:9 3 @:@::3@:@;ƒ@ 3 9: 339„:@;÷Â233 :@:3:@:@@;9@: @ƒ:%:@@:A9:A@:@@:k@:@A@:A@:@A@3:j@:@4†:3:@ƒ:AqAAjAƒ:"A@:@A@@:@: 3A@A@j3A 3@ @@3:9 3ƒ@:øÄ232939 :9:9:@@::3:ƒ:@A@„:8@A@::kA@@::j@:@A:k@:@:3:@:3 99::@:@@:9Aq9::9:@:@@A@jA@3ƒ:@AA@@A:@;9 :@:3A@3øˆÇ23 3:9@„:::@:@9:@ :@@:@@3:@:AF@ƒ:9A@@:@q@:@:@A†: 9 @@A3:9Aq 9:@::@…:@@:@:9k@Aj:@:9 ƒ:943@@;@øˆÉ2A@9:: ::::@ˆ:3A@@ƒ:9:A:@@Aƒ:@@::A@:A:@::3:9: A3:9:@:9:9::@:A@A:@@ :3 3 @:3@A@494 :9  @3ø‹É ]c3:::@„:@:@9@:@:@@::3:@:9:k k@::@@A:@:ƒ@dA:@ƒ:2 @@jA@A@A::@::: @:@j: 3:@A@ :4@@3:3 39: 94@A@ø‹Ë339 ::@@ @::@ƒ:3@:@:@A99@:A@@39::A@@::@:@:@:@:@:9:@AA3 jA@:9: @Aƒ:@A@ @@AjA3 :3:@:@@ „:3:@AøŒÍ29bA3@:@@::@@ :@::AjA@ƒ: kG@@AA@:94@::@ƒ:@@:@3@A@A@jA9:@@ƒ:@Ajƒ@„: k@A@3@39@„: ƒ:9:94@@øÏ,c29;ƒ: @: @@::@:@@ƒ:GA@@:3:„@.:@@:@:9:@Aj4 @A@j3@A@A:AkA@@39@A@3:@Aj:9 :„@ 9::@ 34@@øÑ$29b3:9::33@@:@@@:Aj:@@:A@@:3::@A:@ƒ:5@:@@:@:@ A@:k@:Gj@A@:A@::9A@kA@: @A3@@AA@:3::39:@AøÓ33b@A:@ƒ:@@ƒ:q@@::kAp;@:A@A:9@::@@A@„:.3@:kA@A@kGA@k@A@Aj:@Ak@A9 3::@A::3:@:9: A@øÖ c“hA: 9@Aƒ:9::@ A@@ƒ:%@kA@:A@:@A9::@:9 ::@:@@k@@kGk@A@j:@@:ƒ@ ::A9 ::@339: ƒ:3ø•Ò,…13’294 @:@:9:@A@:@@A:G@:@9:jA@@::3A@A9 @A@qAA@:A@kƒ@A3A@;@@:A:j:9@@:: :ƒ@ ø–Ó]23…38:9::@A„:>@::@2:A@:A@:9A::@@A39 :@:@kGjA:@:@@::3@A@@kAk3: @A@A3 @:@:33ø—Õ],…%2cb 3@:@@::@:@:@:9:@k@:9@@Aj::@::@kA ƒ@:@kA@::9A@k@:3@:@k@:k @@:@9ø˜×323†32c @@:@j:@::@A:9: @;jƒ:)@::AjAq@3;9:A@k:@9AA@949A 9A@A3:@::9:ø™Ø]22-3]…$3]3 ::@::@::@::@@::99:A:@:9 A39:@kƒ@ƒ:@33 3A@:@j33A::3 ø›Ú3c\9‡:3233 @::@A@3@Ak@: @A:@:Ak@A@kG:9:@@AA@@:3 :3 9:@@;:@::@ 3øÛ3c,23]‡ 2]3c 3@::@ƒ:@:k …@Aj@A@A:@ƒ:9:9: 9 @:@:A9::@:3øÝ33]8Š2]3c::3::9::9:@;j:@::qAj@:ƒ:9@@ :@:@A@::@::9 9øžß],3]‹,39„:9:@:@::9::@@::A:@ƒ: ::@:@„:3 ]øá3c229223cƒ:9:9:9:9::@@::@:@:93@:@„: 99 :3]c3c,-ø›â]]]2*383]c: 943 :39:: 9:9:9::@3 3 ]]]3ø›ä33]”]c]9]cŽ3ƒ 39:9:93:::3 @ ]c]322,23\3ø˜æ2323˜322]c2c]c:9 9: 9 ƒ2323b3]3233232ø—ç]]2,›2ƒ3\3]Œ 32c]c]3c]2c]3ø–é33¯3„c]c]]ccø–ë\,°]2]c9]2ø–í32øÍî32,2øÊð33øÊò23øÈø,cc,ø³õ2]‰]…ccø´÷22]2øÁøcøÁø”]ø¯øøÄøøÄøš23\3ø¦øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/-øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø]c]cø¾÷223…c,23ø¹ò2]c,cc]]c2],2, 232ø·ð]cc2cc]3228 8ƒ2cb]c3ø´ïcc23-3cc3b9b3b3bc 2]ø²ë&c23c]c23cb9 3 3 33 3 3 3   ø«éc]2ƒc&3cc]8923 339:9::@9:3 993:9 39 9 ø¦çcc,2cc3]cc]]cbc33„ 94ƒ:9;@:@: :9:3 AA9 3 3ø¤å c33cc]c]c]„cb:@@::39::9::: 9ƒ:93:ƒ: 99:9: 9  ø¡å83,cc]c]c2]cc]82:: ::9::@:@:@@:@A@:94:9:3kA9:9: 99 øŸä]2ƒc ]c]2]cc]3bcƒ:@::@:@9:::9:@:93 9 9:@ƒ: 9 9A: 9 3 øžá22]ƒc3c]c2c]ƒc2ƒ9:399::@:A@@;@:A@AkA@A:@::@@ƒ: A@ ::33:3 øœà'c33cc32]]c]c]cc]cc93:9 3:9433@@:9:Aƒ@:k@:9::@3::jA@:@ 9  ø›ß 23cc2c]c2ƒc]…c9„: @„:@A@„:@„:@:@@A::ƒ@A@9 9 G3 :93 øšÝ ]c]c-c]c]c]„cich:: :9@:9:@@9AjA:@A@3@@3:9Aq:ƒ@::@kA@:@::9 kG:: 93 ø™Ü*c]cc]cc]2cc]c]chibi@:@:@ : Ak@:@A@qqH:AAƒ@Ak@33AAjAqqAA@A@:9:Gq:@A9 ø˜Û]ƒc2c]cc]c]c9bibi“h:@9ƒ:& 99A@A3@A::q@@k@kA:@::@ 3 @A@@::jAk:@ƒ:k 33ø—Ú]…cF]2]cc]8cbibichc@::@:@A@:3A:9:9@AA:@qG:@@3A@9:9:Ak::@@::@@:9AG q ø–Ùcc2,cc]cc]3c8cbibic’i@::ƒ@ :9:@:@kGA@ƒ:AjA@:@:3@@AA@:39A9:A::@:@ƒ:AqA9 Aø”Ù]2ƒc ]2]9]8cbccƒi’A:@„:A@:@:3 @k:@kGq ƒ@::@: ::ƒq@3@:G@A:9:@A9::@3 jAqkø”×2ƒc&]c]3c]8cbchib“bi“@:9:9@:@A3:  9: 3 3@ƒ:@ƒ:"@:9:@;@@ 3 k9A9::G:A@::@ qAAGkG: ø‘Öc]ƒc3]cc]cbcb9ibii’i“@ƒ:9;@Aj:@ @@:3: 3@ ::„@A9 @:Aƒ@39@:@:A@Aq:9A93:993 q@:ø‘Õ]ƒc]]cc3]c8c8ibi“h“i“@@3:@:@3@A: ƒ:3ƒ:?::9@3: j;@A@:3 @:A@ A3ƒ:@A9:@::@A9:: : 3 3øÔc]cc3ƒcR]c]bc8ci“hi“i’i@:@:@@:@A:39:@9:@@:@@AA@::@kk@A @A@kA9qA@ 93@A@A@@:q:A9A@@393 :øŽÔc2]ccƒ]4c]9bichc’i“h““Ak:@@4@A::@ @: :93A@A::@A@“ G:@k@33@ƒ:@A:r@AjA9:: : :@k:343A@øÓ]33cƒc%]c]8ch“ch“i““i’A@:A3@A@A9::3:99 ::99;ƒ@.:kGk@““i:9A9@@A@3@3Gr@:@:@AA9::@@:9 :3 :2A@:ø‹Ó2]cc3]]ƒc8chii’i“h“i“@A@:@A@Aj:@: ƒ:6A::j“A@:@:@@99AA 94A9kA:@:@@AA:@:j @3 :A:@:9 3 @:9:øŠÐ]2ƒc]ƒcT]c2ibc“b“i“i“h“A:@@A@3 2 ::@:@:@9A@@AAhcb“@A@A4A@q@A9::@A@AkAjAj@:33 9:9::@4 3 : 2ƒA9ø‰Ïc2cc3ƒc\23cbici’i“i“h““@A9:@k9A@@::3:@@ AjAk3@kib™“@k:?A@k::GA@:jA@G:@:A3G@3 ;@::@@: 33 k@A::øˆÎ#]ccc3c]]c]ccb“hii’i““@™™q@A@:@:kƒ@3@:A::@:9G@:GAqAA83@:@kG9:9Ak3ƒ@ƒ: 9AG3qHq@399ƒ: 99 3 AjA@:ø‡Î]cc-cc]ƒcHbchiic’i“i’i™™qqA2:@A@@A33 @:@:q@:kAk@3GkGkq@@b2AAkA 3AFA@3A“@::@kGq@A9ƒ: 3ƒ9 4 33@A@@Aø‡Í2ccc]9]cchichhi“h“„™Oq@A@:3A@:9 :@;:AkA@@GA@::9A@@AkAA“˜“™ q@@kG@@3A9A@3 @A@4@993 3:939  k@k@@3ø†Ì2cc-ccŽ3c]cbccbi“ii““ƒ™=“™qG@A@:A@39 @:@@kF:@@:@j A@k@Ak@Aq@99“’™::A@kAqch kG3Gk 2A9ƒ:39: 99 3 3Gq@A@3ø†Ëƒc3c3cc]cc8chih“’““™“™“™™k„:j@†:D@k@Ak@AkA@A39::G:@Aj:2chi“b@:AGkA9ck:@@:: @:@9:3 9: 33:kGkAq:@ø…Ê ]]c32,c]„ch“i“i“™’ƒ™™™q@:9::@:9::@„:@@k@GkA:9:AGk@:@A::bci“iiƒ:%9GAbqAGk@AqGkA9::@@3:9:3 33:GkAG:@ø…Ê2d3]ƒc]…ci’i“™’™™““Ž“™kGA@A@:@@:::9@„:?G@k:9::@@:@q:A::828i’™hc@GjAjcGqAA@:@qAA@9 @: 3:@ 3 3 @Aj: @ø…È32]i3\Žc]9ciƒ“’“™“”“ޓޙqAjAjA:@4@:: ƒ@ƒ: @:@@:GA:@A:@qƒ@/2“™“ih3@A@AhkGk@“@kAApAqA@:A3 :A@3 3@@::9Aø„È2Ž23ƒc13cd“o““d“ޓޓ“qA@A@A@@A93@:@@;A@@::@ @A9:k@j@ƒ:,qAkGbib““i:qAqAA2 A“A@q@::@:kA@:@@:3 3Aƒ@:k@ø„È ]dcc3ŽƒcQd““ޓޓޓޙGk@k@k@::9A@A@AjA::@AjA:@A@@AAkGAq@Aq2i“ibbi::qAq3A2hAq@@:@@:AF@ƒ:3 :A9 ƒ3AkAq@@3øƒÇƒc/]23ŽccccŽc”””c”Ž“™AkAA@A@A:3:@:@kAkF@39Aƒ@k@:q:@@39 k:@Ac2ibi““hƒ@$cG@k kA:9A:kGkk:@::@33 j:9 @k@A:@ øƒÆ2c]]b]cc“]cdc””Žiޓޓ”c™q@Gq:@j:9:AkA9:@k:: ƒ:9AjAqA:AqA8c8 @:2“8“i’“c@cbbA“hi’::GqAF::@@9A:39: 3@:ƒ@A3øƒÅwc,233c3]c3dccd“”””Ž™kGk@:@A@:: 3@AqA@AG@A:9G:kG:Aq:9A22:9:::“i“h“i™bi AAi“A8“3::qAkA:@::@A99::A3@::A:3 9 øÅ$cc3“Ž9,c3cŽ“d“Žj”””™GA@q jAƒ::ƒ@ k:@k9:@Aj„@5k@::@::49::’i“i™“™ib:kFbchA@A@A@q@:@@::Aq93:9A, ƒ:@@34@øÄ(]c3]c3\cd“ccdc””””“d™Aqrx@AAj:@Aƒ:/Ak@A@A:@@AAk:A@:G:9 :9:@ A9:i’i“˜“hcb:9A@@:@AAƒ@kA:@9@: @: 3@: @39:@@A@3 öÄccƒc$3”cdiޓޓޓޓd““qGrqAjA@@A@::ƒ@@::q9@::9q@@k:Gk@3@A@:qAqci“™“i“b92:94@::@kk@;qG@@::@:@A::@9:3ƒ : :@3A:3 3öÃ2c]c,cd3c”ccd”ޓޔ“d””™@kAqqA@k@Ak@9@A3:9:4ƒ:.A@:AG9kG@:3A@A@Aq28ch2i’™8c2 A3@:@AG:qGkAjGq…:@: 39 3@:2A@:q 3 öÂ2]3ƒcƒc"3cŽc”iŽ“”Ž“”“™kGqrGk@G@kGk:@„:@GA@:FkAq@kA@A„::kA9:223““8:@:c28c@3A kAk@@::@q@:rGq 9:9:3:9:9: 3:@:AqAq 9 öƒc'cŽ3cc3cŽ“cŽc”Ži”Ž™™qrGrG@kA:AjGƒ:1@@GkAq:AkFAkG@AjA@9 @99:2292“hAA:A28c8A9:9AFkGj:@„:G::9:@ @@:9 9„:Gk 9 3õÁ ]cccŽ“c]]ƒc_d“Ž”””j””™kGqqA@AqApA@A@@AqAk@q@:9GkAFk@::qAkG @A@8c@k@kFk922A3:Gk:Gk@A@:9@:@9::4:@„:9A3 :@::9@A@3õÀ ]]3c]cc]c3ƒ(dc”“c”¾d““GqGAq@k@@AkG:kGjAGG3:9 ƒ:AAk9GAq@3 3cbA@,ciƒ@AqAb3ƒ:*@9GkGkGqkA:@:@::9:9@:::: :3:9:AkG:3 óÀc„c$c]cccŽc”“cŽc”“Ž“cŽ”¾ŸqGkAkAGkA:qAƒ@AAq@39::3:9:9:ƒ@A9 9A@GkA“h:49 2832@k@@4::GkG3ƒ@A::@„:9k9ƒ@3„:AqGk:@ 3ó¿ 2c]c,ccdc3ƒcZ”Žc”Žc¾¾É™qAqAwAjA@@:@kAj@@:3 :9::: 9:Ak@49 3A@:3@cbi2“i“8]:A@9:G@GjGk@:@A@k@:@:@ƒ::GA :: 9 @::@AqG@:q ó¾ ”c]23c]ƒcIŽcŽcc”¾”cc¾Ä¾”ÃÉr@AxqGAjA::@A@A::39:993 33A@::39@@AqA@kG3Abi“82“™2ccƒ@ƒ:(kAA::GA@A@@:@3@:@::3393 @3 3:@:9::qAG3ó½y]c”c3”2]ccŽc2”db””½”“c¾Ä¾¾Ä™™qxrqAk@AF::@k@:9:@ ::A@AG@k@::::@kG jG@3G2c8c828cbcc@:@A@@:q@:qAqk::@:@:A9A::::A3@ 3 :9 :9GA9k ó¾eccŽ“Ž]cccc3”3¾½d޾ľ”¾¾™qqrFAG@qAk:@@A:9: :9::@@k@k@A9@::@::@:@AkGkAbc229cbiii\ckG::9@k::@@…:@3:@:@:@A93@ @@: @:AqAG2ó¼yc,c32dcccŽcޓޔc”¾”“¾”¾¾Ä¾9qrHGkAkqr@@::@:@::3@::@:@AA@k@A@::A@kA@kA: b9b2c8““c]i™22@:@;@9:@:@qG: A@: 3:9 @9 : 3 @::9AqA ò¼yc3cc”ccŽcc“Ž“c]”c¾”¾¾Ä¾”¾“Éx@kFkGGAk9::9 3: 9:@:@::q@::9:9:: jA@k@G9@b92cb“i“cc22“]c33@A@AqGkAq:9A@3@ @A9:: 3 :94:9: qAjA3òº>ccŽcc]cŽcŽccŽd””“”½]c¾”¾”¾“¾”ÃrGkAGk@::@:: ::3 3:@A::@:@ƒ:A: 9:9Aq@A:23b28c8““™“icŽi2323:@:@AGqAG@:3@:9:@k@::3 9: 3…@ òº ”cŽcŽ“”ƒc6c“”“¾Ž“”¾”½”¾“¾”¾™xrq@qqGq9:::9: 9@A@A:@9@:@:@::@@A„:6A@328c29bi“o“@™cc“,32c :@k@:@::qk@@AA@3 A@:@@A@33ƒ:A@k::3òº8c2Žc“d“ccŽcc¾¾Äd”Ž“¾”¾”¾”½”¾“™qGGrGAqA 9 3 9 @3@k@9…:K@@:@:3@@:@:9:: 2c::c“bi’™“cc”8323@@kA@::@::G:Aj@::93::@:jA@:9 3:kA9@9ò¹5c]]ccc2c޾šc¾”¾¾“¾3“¾¾”¾”™ÃrAkxkxrq:9 933@:: ƒ:9 ƒ@ A@A3@A: 3:@Aƒ:@ 2@:G’i““™“™233]A:A:Gk„:@::9A@A9A:@::@: :@4 @9AA@9ò¹2d]“ƒ”]cŽƒc¾cŽ“ƒ¾ “32Ž”“¾“d™q@G@xGrx@4 9:@:@:@ƒ: @AjA@k@::@9:@:@49:@A22A9:“ib8™“™„c,2@@AkG9: q@Gkk@@AkG@::@::@:3:@A33@39:A@A@ò¸c3,32޾c”¾]iŽ”¾“”3,„¾Ä޾¾Ÿrr@krq@Ak9 9†:@:„@)AjA@:@:: @@;:9 @Ak 8k@chi“ih“Žcc:A9Aq@kƒ@!Ak@AA@:@@kG@:@:: @A@k q @::@kAó·-cc23cc”c-3”c23”3Ä”¾“ľ“”ľÃqAGqxG@kƒ:A9:ƒ@N:@:A@;jAA@:@::@@;:@@93: j:9i329bch“iicAqAA@@A@Ak:@@Aj:@::kAjA9A@9@@:q@kF3 kƒ:A@q3ò·,33]cc””“]“”h¾”c”¾¾Ä†¾ă¾”™wrxrAk@@39A@„:E@::@@k@AjAk :AjA@:@k:@ @:93i“2iibc““™AGkGjAj:q:9AA@3@:@A@A@AAq kA:@ƒ:AA9A3@ @: jAA3ò¶c3]c“cŽ“3Ž“”„¾L3½¾”ľš½”ľ¾Ä¾¾qHqAFkFA@ 3::9@@::9@A@A@kA@A@39AG@k 3@:A:@:@@32cbci˜i““cA@ƒ:(@:A@:ApA::@Ak@j@k@Aq@:@A@::Fk9 3 @:A@q ó¶ 3“ccc3”cƒ¾””½¾9¾”cc¾¾”¾¾Ä”¾”¾wrƒqGrkA:99:@A@A@A3@:kAGjAjAƒ@F:@@::9A@@3:A3 c8cbi“i’i3k:@AG@kGk@@Ak:kGk@AkG:qAAk@3@::A:@3 :@k@Aô¶3“Ždcd“¾”¾Ä¾½„¾ ½¾”¾¾”¾½”ƒ¾i½¾”xrGGrG@@3 ::@Ak@:@A@A@@k@@:A9A@k@4@ 9A@:: 9@“8cbih“™““]8:9:k@A@A@@:@:@A@A3:GqGk9qA@:Aq:9: Aq :@@9 ôµ2c23cŽcŽc¾”¾¾c”“”Ä2””““”“”¾¾“”“Ãxqxx@A:@3:9:@ƒ:A@:k@ƒ:N@AAjG3:@A@:9A@@k:@::9“cibi““™“c]3:@:@:@kqA:@:Ak@k @kGkG AqAqA@G:3 :@:kAq3ôµa,3c”“”””¾”“¾¾ccŽ“¾c¾¾””¾”“”””™rxrxA3k::@::@A@@j:@9:@:@k@AA@:9:@:: j::@:99A@G3hc““™h™9]@ƒ:ƒ@:@:qA9@:GjG:Gkƒ@k@kGqAjG 3@qqAGA9ô”cc]cœ7cc]“Ž””c¾¾”¾“””¾¾cccŽ“””””¾”ÙqGG@kG @:: @@jA@A@ƒA:9@AjAj@„:A@3 AkA9:AA@322c™i™˜ƒ“ƒci@AkAqAqAqA:@@kƒ@:@A:@AAq@AqAA::@@A:qAqk 3ò’“”¾c”ƒcš;2]c3¾”c¾¾“¾”c”¾”cŽc¾”3”¾¾”¾c™qGkq:Aqr:@@:AA@kA@k@j@ƒ:@A@A@::ƒ@73:9G@::9A3 :@2“h“™chi323:@:@: @kAp::AA@k3@:k@kGkGk@qGƒ@ k:k@@AGkA39ò’]¾“Ž“32šc3]c”“c”c“”…¾y“¾c¾¾”½¾Ä¾”¾½ciiqrAAq@xAq9:AjA::@j@:A@A@A@ jA:9::@:@ @@A@ :@@3A@3“83bci“bcb::@@3: k@9A@ApA: ::G:Gk@qAA@:k@A:GqA@j@@q :ñ’]c]“Žcc‡]„c]Žc2]cc”¸9¸“c¾Ä¾”ľľc]¾“¾”¾că¾”cÃi“qAGjGAkFA::@AjG@„:@A@kAk ˆ:4AjA::j:@:: @:A3“ibih229]:@:@ 9A@:@ k@qA93Ak9@:qAqAƒ@k@:qAqAqA:AA@@A@Að””cƒƒc322Œc,]c]c3“¾”cŽ”ˆ¾“3]¾”¾ƒcÄ”¾cßrqqr@:GkA@3ƒ@]A:@:@@k@k@:@:@99:@9AjA9A@A@A@@:3@3@:@::::9@@::3Ak@:A@k@AG:A@kGA@:GkG@:@k@A@A::Gk@@3 @:k@kð–”]”dc2,ccdc]]Œ ”c32cc”ƒ¾½¾”¾“”“¾”¾¾”½”½…¾Q½c¾”ÉrGrA@qAq@:@AkAj: :@A@A@@::9::::A@AA:@k@3 3::39:9 ::A@:@:A@AA@3c]c] 2@@:AjAƒ@:9:@kG:@@k@A@k39:@:@3Aj:@A@ð•ccƒ c“¾”3cƒc3]cc†2Ž“3”c]cc”¾”¾¾Ä¾”ƒ¾“¾“¾¾”¾”“d”¾””Ãxƒ@AAkqAA9AA@AG:@jA@:@::@9@::9:@qAj9::@A:@Aj:@ AjkFk:@kAq@kA@cc3b ƒ:3@@:k:9 3:9:A@::3: j ƒ::@A:ó–cc¾Ž“”]c3]c]c3“33†C3½Ž33c¾¾“”“¾”\3“¾¾”¾Ä”¾c“¾ccdÉ™rxA::qAFk@@k@q@::AjAk@@:9::9ƒ: 9:G:@k9AqA@A@k@A:AkGƒ@ :@3@@@c]3@‡:@9A@A:: 9:@:@::@:9A@9 @@::@Aò—”cdcŽ“cŽ”cc2c]cŽc†3””“c33””“”ƒ¾*Ä”¾”¾¾Äc¾½cd¾”ccc““w:@k9A@qAA@AjAAk:@AG@…:A…:,@9 AjAG3@:9:A@;@9AG949A@3 @:A@:c@@:@:9@ƒ:@A@::9:Aj::@A@:@::A:@@Aj9ò—”Ž“””Ž“ccd“c“32„c3ccŽ23cľ”ľ¾½”““¾”“”ƒc7“Žc”޾™ÉxrGGx@Ax@k::Gj@A9:@:9:@@ :9@:9 99:3@AFk 9 @A@ƒ:2A@@3:9: 3 @kA@dc]: :@:@A@::Aƒ: @@Aj3@@3 :@ƒ:k::@::ò— ”c“ޓޓ2†3cŽ”]]„?2cŽ“”c]3¾¾2”c¾Ä”¾¾”¾¾””Ž“c”¾Ä¾¾™xrqrxkGq@A@:@AAj@:@::@3:@ƒ::@ƒ:"@:@kA@qA3@A:@k@ @:A:@A@@:@AAj@:@ ƒc# 9:GqA99A@3@@@3 :@: :A@:9GA:A@@ò—Ž“dccƒ”ƒ3]2cc”“†<3“Žc¾232”¾¾”¾”“¾cc”½¾“޾“ŽÄ¾¾”¾ÉxrxqGAqqAj::9@A@@::@A@ƒ:@ ƒ:J9@:@@:GkAGkG:@:@G:@@:j:@:@:3399A@:@:32,:@A:A@::@:3:k :@@A99 :j@::A939@Aó˜c]“d2ƒŽƒ3cc¾3‡1cŽc“Ž“3cc¾¾2”½”¾””cd¾”½”“޾ľľ¾”ÃxqGAqAkGAA@:ƒ@>;@:@:@@::@:9@:@@::@::AkFAk@@kA@:@kAk@:@::@::3A@: @:Gk@A93ƒ: :9: @q:9 43 ::9A: k@ò™”23]¾“],“ccŽ“¾3†cc”Žcc¾c]3¾¾”¾“Ž“„¾#”¾”¾cc¾¾Ã™xrqA@@x:j9:@Ak@k@:@ ::9:9ƒ:.@A:@::Gk@Gk@GkAFkA2Ak@A@GAkGA9@ @@::9:@::@Aq:„@: q@ @::: 3@::@9q3 @3 󙔎cc]c3“””Ž”]ˆŽƒc ”“¾d”“¾¾”½ƒ¾Kľccľ¾““¾¾”¾”c¾™Gxqx@A@rG:@A@@AA@@3kA:@:Gk@::@A@G@@A@kFkA99AGAqAqk@AjAkƒ: j:@ q 3:@ƒ:A:A9A9A:2::@:@A:3:9A@9 @ 3ôš ”“]32cc]2ƒcŽcc9…,3“c””“¾¾c”]c”¾¾Ä¾Ä„¾P”¾¾Ä¾”¾¾““¾¾™rrHxrx@rqA9:9AjAj ::A3@::G@@::@@kAkAjAkGAqA@AkApA@@AqAAFA9A9 3:@‡: @@39::@::9:::Gk9@: 9:3 3: ó›Žcc]]cc”ŽŽc]c‡”ccƒ¾Qc¾“”c]Ä“¾”¾Ä¾Ä¾“¾”¾¾“”¾Ä¾Ä¾™xwrwAkqqH@A@:3Ak@A@j:@ k@:Gk:9:9AGkFk:@AkGkG@kGjA@k„@'kkG:9::@:A@9:G 9@::@A@::9AA::qGkG@: @„: 39 3ôœ ccc]cc2”“32‰"ޔޓ]ľ¾c”¾¾”¾”½¾¾Ä¾”“¾¾Ä¾¾“¾cŽƒ¾DÉxrqGkGAqr@k@:@9 Ak@A@3:GA@:AqA@A@kGAG@::9AFk@AkGA@@;@k:9:@::9:AGk@ƒ:#@:A@AkG@3@A@qGkGkGk@A339::9:9 : ,óœ Žcc]cŽ2Ž3]‰c””””2¾”¾c9¾¾½”¾¾Äƒ¾E]ľ¾Ä”™i“iŸÃxrHqrwr@A@A:: :9AqA@:i9k@@j@A@AjAAjG:9A9:9AqAkGjAk@:k@:ƒ@:9: kGk 9::@::3@9ƒ:A3ƒ: 3 qA:A@::ƒ:4 93óccŽƒc]2‹c¾“d¾“c¾¾Ä”]2™Ãƒ™y¾”¾“c™i¾¾“Ž“ÃŸÃÉ“™Awx@@A@rqA9@A3 9A@k93@A@A@AkAq:Gq@Aj:@@: ::9:9AGk9@:@@A@A@::@:q@GA@A@@:AAq@@A@:3G3 9k@A@qA::G9:: 2óžc”]cc‹]]”“]“cc¾3¾¾c2™“™É“i™ÃƒÉ“™’„É(™™ÉÃÊÉ™xrqxr@@rq@: :@:3G@:4@AjAjAGjA9AAƒ: @:A3:94@A@„:@:A@Ak@…:*@ 3AjGj33AAj:A@:@@A9 A@93:9AqAG9 3 9 2 óžcc”“cŽ““”]cŽƒ¾22™23™“ƒ™ÃiÉÉÙ;“rÉ“™“ÉßÙÃxrHxxAqGr@:9:9A@:ibi :@AkA@@A@:993@@Ak@9:: @@k„@6:@@k::@:99-9@:@A@A 3 qG:@kG:k@::@@3GAjAA:9Ak: 3 :3 óŸ]Ž“],Š3]””“c¾¾c3™Ãi8i“™“GqxAq@rxrxG„xrrq…xgqxAqAqr@:A@AqA@@:99kG@qAk@:@:A9:A9AA99@@:A@::AAkAkG:@: A::@::9Ak@::@33@AA@::93Gq@A99@9@ @33ó “Ž“Žc33‹Oc,]”]cc™ci’3’Gk9AqqArAGAxxr@A@xxGr@xrxxrqqrqGA::@k@k@b@:@::@::@kF::9:9A@A:99:3ƒ:9:@@:Aj9@:99:::9@A9:@„:@@k @3:AqAq39@A:@ƒ: A23@::9::9 ó¡”c2c23Š]”“”“Ž“”™Ã™ibiq:GkGrq9rƒqAwAkA@kqA@A@rxGA@A@Aq9:AFAGƒ:V@A@A:@:@:A9:39Aj @: :::@Ak@k@:@ @ :9 :9Ak9::@A@::@A:9:@ 9GqA9A3@kG::99A:: :Gq : 3ô¢cc¾”\‰L2”¾],™™b™i:rG@:qAqG:@::qrqqrGxrqrqNq:qx@@AqA@Akk@@3@:kAq@:9::9- :9::@ ƒ@?A39jA@A@A9::@@A3:9A9 AA9:9::@AjA:9: 3 kAA99GkGq:A@::@:Aq:õ£c]”32ˆ<,3c““Žc8,A@rq@r9r@::9:::qq@:@@G@AAFrqrA@rrqAr@@k@@A@3AFk„:ƒ@:99:@ƒ:@kA@@3„:@@kG:9Aƒ:/@:@A:99AA:: 9:@@qG:: :::pAA::G::@A:@3@A9:õ¤””3ˆc,”,i“bkA@A@rƒ:G3 :@3@AqH@:rqr@@:rwƒ@#AkGq:@AGk@3AAjA::@:@AAk4@A@A9 3A@ƒ:9@::9A@3A9A@@:@@ƒ:)3@A3::@AqA@@9:9AAkG@: 3 @A@:@@@::@õ¥”c\32† ,”c]h, qrƒq+ 99:Aq 9 @A@A@@qAqxrqGxrxr:@@qr@:kFA9A@:„@A9::@kA9@AkA@A@@:ƒ@A 9ƒ@5A9:A@k:@A::@A393A@9::9AqA::3:A99GA:@k@9 3@@@A:@ :9 ö¦c]c]c]…I2d¾2ci23@qHqH::9:FA39 93r::@:qAqGrGkAxrxGkA@q@::@Ak9A@:qA@:9::93::Aj@„:.9::@:AkA@;@3:@:::@:@@Aj :@:: @A::G93A9 : 2:ƒ@49@A@k:@::j: 3ö§cc”cc…@]cc32@ qqH2 9:@::9k 3:q@qrAqGkqGqGkGGkGqA@AA@3:9:Aj:AkA94@ƒ:ƒ@FA:@3@:@;kGkFA@:k:@99:A@@;jA@:9 9::@:@:kG3A::@k :3A3: :A9@:3 3:9A  ö¨Žc… cci223:qGA3 9::9::A 3::@rGk@ƒA(kA@q@qGkGkq@A@::@A@::99 :9Ak:@:@::kA:@3„:G@kAGkA@@A@:9Aj;„@A@:: ƒ:!9:qGAqG9:@@Aj:@AA@3:Gk 3 A@Ak@93ö©“”†y2c]bi8Aq99 :9::@: 3 3::AqG:@k@A@k@AkqA@@:qk@@::9::@@A3:AAF@:@:AA@@9A:GjAqAp:9GjAj:: :9A@k@kAjAA@@3@@4:GkAqA:9A::@A 3@9qAqAq@:9@:@ 94@öªŽ”cƒ]c“2Aq 9 3ƒ:-@3 3:A@:9:qA@AjA@9:A@qq;@Aqr@@AA:@Aj@A@@k@kƒ:Aj@k9A:@:3:@A::@„:5A99 : kG:@A:AjAjA @A99:9Aq@AA@q q :9:Gk@::G:3@93 @ö«c]cƒcc,c8cƒ 3: 9:ƒ: 3 3AjAG@:qqxƒ@-r@@A:GqG@rGrAjG9AqAAk@:: @@Aq@A@@:@Ak@A@A@k:ƒ@ :Ap @@:@@Aƒ@(k@A@:3@3A@A@@3ApAk9 Aj::::A 3:@k@ :::÷¬“”…c23b 99: 3::9:@ 9G3qA@AjAAGqƒrg@:AqA@@kqA@@A@: 9 @kFA@:@9:A@@k@kAAk9:@:@:k@A::A@AjA:9::3 @:jAk@::@9::kA@kAAG:@Gk9 9:G3:9:@Aq9 :99÷®…$,3c22q: 3:9::@ 99Aq@:@@kGrGqr@@ƒq HqGrrq@k@@ƒ:@:k:A@ƒ:K@@A@Aq@G3GA3ApAGj@Aq:@Ak9:A: 3@@;@A@:3: :3GkGA@jAqkGG:9A9G49 :@AjA 9: 3 ÷¯“…32cq :93 3:ƒ:Q@3:@:q:A@@rGqqHrr@AqGkA@k G::3@:9@:@Ak@::k:AjA@:9A@@9: k@@AjA@k@A 9::@ 9AjA@k 3ƒ@! @AjA@k:qAqAA@q 3:q@Aj:k 3 9 ÷°32ƒ02]3223 39:: 9 3:9@A::9:@Ak@A994:wrwA@:A@q:GkA9ƒ:9::„@:@G@@::9ƒ:/@A@A@: :@kGkA@@:: :9:::@@k@99:@:@kGk@kA9AA@k@:ƒ@@:GqGAA@A9k:3ø± 33c], A9 :93 @9:9@@A:@:@A9ƒ:?::qGq:94@@kGk:@:AA9::3:@AkA:@A@:@::@4::9@@:GAp::993::9 9:ƒA&3@;@Aq@A@@GqA@:@Ak9A@k3 qA@3@3qAk@ 9 ø²„3223G39 :99:: 3::@AA@@…:9 9:9::9 ::@:@@G9:@:@k@:@:…@Hk@k@:@@A:@::@A:@kA::9::@3:@A@:@:@@:@@kGk@k:AkGjAk@k@::@@3@@:9 @3A@3:ø¹ -2::@:: ƒ::@:9::@::@9 9:::@ @:9:@ƒ:@::9A@:GA9::AjAAqA@:Akƒ:?„:@:9A@ :@:@4@ƒ::@:@AqAGA9:9GkA9A@:@:@4ƒ: @3@@:@A :3øº2 3@3:3@@:@9q:@A:9:9„:R@;@:4@::::9::@@49:@kA9:Ak@@9A@kG@@:@::@:@::@:@ :@:@ 49 :@:@@:@kGkGqk::AA@A9:@:@9ƒ:9 @Aƒ:@:94-:ø¹cc2q 49 : :@„:)@:3:@:@@3A@9@::@ k:@ 3:94:@@:GAG:@:9…:@:9@ƒ:@::9:@@ƒ:@:@::@:@kGkAqAGA…@kAGk:3:A@k@@:9A:@A3 øƒº3,2A:3: 9: 3:9::9::@ :99ƒ:b@4@:A@A:@::@:@:39 :4@@::jAkA@:@9@:@::@::@:9@:9:A:@@:@:@:@:qGkGkG:@j@;@kA@@:@ 993@:@:@3 @A@33ø„½L2 :@@ 99 :::9: :9::9A@:9:@:@A:@3:9: ::9::9:G@:: @:@:@3@::9@@::@3@ƒ:,9:@;@qkAAqAGk@::@kGk@@:@@3:: 3@A:94@:@@A39 ø„¼32 3 :9:::9 :ƒ@ƒ:%@9::9:@@::@A@ j:@43@@A @:9::@::9:@:@ƒ:3 :@::@ƒ:2A ::99::@:@kGqGkAq@@:@AkGA@@AkAk::@::@A@@;93: ø…¼72]23 9 9:: 99::@: @::9::@::kGk::@3 9:@: :@39:@: @:ƒ:@::9:@::@::@:ƒ@0:9 :@:@@:qAqAq@@:@@kGk@@:k@Aj 3@ 39@A:@@:3@:@ ø…¾3,2A93„: @::9:A:: 9ƒ:9:A:GkF@@k:A@ @@:9::@:A@:3::9 @ƒ:9:@::ƒ@5:A@@::994@:AkAG@kG@A@A:qAqA@:@@k@@:@:49:@A@3:@:9ø†¿333 3:9: :::99:@::9ƒ:9:@:9;qGG@A3:3 A@: @3::@ 39:@…:@::ƒ@::3ƒ:@GA@A@3A:@Aj;jAqƒ@AjA:@:: ::@@A:@:3 :  ø‡À62] 9:9 @3:: 93 @:9:@::9A::qk@@:AA3:@@4@A@::9::3ƒ: 9@:@:@A@A:@:„@-3::@k@@qA@@:@qAq::A:@:@A@:@3:9@@::@9A:339:9ø†À ,3c2:9::93:@‡: 9:99:@Aƒ@A3:@q„@:@A@::9:@:33@@:@:@:@ˆ:.@A9::@qAqAjA@kGA@:@@:A@A::@3:@;A9:9:@: :3:ø†Â,92 3A::9@A@@:@:@ƒ:'@A:@@3@;9:A@: kA:qA@@49@:@:4@::k:@:@:@ƒ:@:@@:@@:@:9 @AkG:@AkA:@:A@:Aj„: 3@Aj9:@:A 3 23@:@: ø„Ã32 9:@: @k:@::9:@@::@;9:@:ƒ@ A@3:Gk@k@@A„: @33 @:@4:@ 3:@:@:A:@::Aj:@@kˆ@kƒ@A@:2 @A3::@A-9 @:@:: 2øƒÃ232 3 :@:3:: 9ƒ:@ƒ: @:@ A@A3@::ƒ@: A@:33@@3339ƒ:@@@:@:3 @:@@::@:qGk@A@: A@k:@k:A:@;::@:39@d:9:@:@3:@::@:@A øƒÅ,22Aq9::99 9@…:)@:@@3@@::A9:A:Aj::G3 ::9 9: : @:@:@3@@:@ƒ: @AkqAqGA:393ƒ:9 @jA@@ƒ:3:@:AG9ƒ:@9 :3@:@A@A@@3øƒÆ 2cbA9@„: 9::@:@:@::@ƒ:9A@::@@:@@A:@@Aƒ@333ƒ@@:3::A:@:A@3::9GkGk@@A@: ::@:9A@k:@:@:A@@:A9:949 9 :@@k:AjøƒÇ,9c @::99 9A@@ 9:@::@ƒ:ƒ@:Aj @@:@@:9;@:: @@ƒ: 3ƒ:@@jA93A::G:@A@:@9„@":@::@@:3:@@k@;@3@@3: 3A@@jA:@@A3ø„É,33:@99A9 :@:A@@A3@ƒ:AjA@A4@„:@:@:@:@;@93@9ƒ@ A:3A@:9 9A3ƒ:@„:A:3:@:::@A@A9ƒ@4:9:3ƒ@;@@A:ƒ@ø„Ê!]823 3:9:4@3@:@:@:9@::@Aj@:@::j@ƒ:9@:A@:Aj:@: 3 @AjAA@A@::9 9:@A:@@::@9::@A@:3 @A@dA@;@33 ƒ: 9A@:3A@@kA3A::øƒË 2-82 @: 9„:@:@::AAG@@A@:kA@A@@:9:@@:j@ƒ:A@:9 Aj@Aj 3:@A94 @: :9::@A@@A@A@3: :@j:@@A@: 9 3 :@@A:@::@Aj:@ø„Í2]ci@:3 :@:: @::A@j:@e9AkF@@:9ƒ: 9::@::@@:9 @k@A::@A@:k@A:9:@A@:@„:jA@@3A 3@9 ::ƒ3 94 9@@AjA@ƒ:9Ak3ø…Ï=c“i2A 9 9@@A93::@@:AAq@;:3@:@:: @3 A@;@ @;@@:@A@AjA:@k@::A9@:ƒ@(:@@A@k9A99@9 j:@@ : 3 9A@k@A@k@A9:3@@ø…ÐJ2“ib3@A@Aj:9:@:Aj@:9@:A@::@@::9A@@:@::@:3@Aj@:@qAqA@A9:@Ak:3A@kAj9::9:A„:9A:: :@Aj: Aƒ:9@: @A@ø…Ñ,c93 A…:@ƒ: @::@:A@k@@…: @@;@:@:9 9AA9ƒ:A@:AqA@:@A@: 3:A@A9AA9ƒ:„@:9 @::@339 9 @A@:@:Aø…Êcˆ329339:@::A@:@…:@@:: :„@A99:Aj@4AjAAkG@::@kF@@A@d9A„@:@:3ƒ:@@A3 3::9:9A3:3A@::93::k:3ø‡Ë2-ˆ,“983@::@:@A@9ƒ:@:@@:@A:9:A@@3 „:9@GjA@::AAk:@:3A@@3AjA93AA 3@@A: 3:9:@3:9:@A@93@ 9 @@øˆÌcŠO,3c 9@::9::@@:@:@:@;@:93A@:k@A@9:@Aq@A:9:9@k@@::3A@A@3 3 A@@3:39 ::@::9 Aƒ@AjAøÍ]2]‰2c3c @A:@:@@A9ƒ:?93A@A@A::@:@:Aq@:@k 3 :A@Ak9A@k@4 3@:@:@@A@A:@:@::9:A::3@;@:ø’Î323‹2c3:@:@:k@::@9 A@k::3@A3ƒ@ kA@k:@A3:@kƒ@ƒ: @:9::@:@Aj:k3@:@:3:9:A@@:@A@kø“Ïc,‹ 3]3]Ak:@:@ @ƒ:ƒ@ @93ƒ:@@A@:Gk@:39:AA@k@@jƒ@ :@@A@ „: ƒ jAj@A@:@ø“Ïccc]‹2,cc3:Ak@::9 ƒ:@:@:9:9„:ƒ@A@::A@:9:A@A:A3@:@Ad k@:@:† @:@jø•Ð2]c3 33]c @::@::9ƒ:@A@„:!9:@AjA@k@A@::@:A@@k@3 ::@:@::9:9‰3:@ø—Ñ]c223ƒc9 9ƒ:@ƒ:„@:@@:@A:@A@jA@j:@AjA3@:@:@ƒ:@:‰:@Aø—Òc]]23]]d99:99::A:@A…:@:j@;@@A@A@@3:@:@@„:9 :Œ@@ø˜Ó2Žc3“3]c:9:ƒ:9:9 9:9@ƒ:@@…:3 3@:@;ƒ:9 3 ø¦Ôcc•22]3]c99: ::: :9…:@::9:9:@::@9: 3 ø¨Õ]2c]2–2c]32Žc3c3 3  3::93: ƒ: 9ø¬Ö332š ]c]c2]c“Žcc9cc33:33 2]3]c2ø¨×cc,3]2Ž23d2 ]2]2-c3]]cc32323232]cc3ø¦Ø23c3Œ2c3“23]3c22]9cc]23,32,2 23]ø§Ù]c\§3,cc]c3cc]c3]c3c]cø¥Ú]c2§ƒc]2]c23]32ccc]c2ø¤Û3233¦]c]c]2]…c,,32c3,ø£Ü]c§2c]c32ƒc ]]cc3c32,3ø£Ý]c2¥3c]2c3,]c3cc23c]3223ø¢Þ2]3¥2„c]323]c]32,c23]]9,ø ßc©]c]3c]c23]3]3c3b]cø à232ª2cc3„c2]c]3c3ø á],«]\c]…cc]cøŸâc2ª33ccc…cøŸã233® cŽ32ccc3øŸä]ø×åc23øÔæ]øÕç]øÔè2c2cc,ø¿é3cøÀê2]cøÏì2]øÎøˆ2cøºøøÄøøÄø23]2ø±øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄ £ŠË b Jù- ­ÉÉ ­É2 °É /! °ÕM&Ë! °ÕM&-! ýûÉ! ýû2! û /" O Ë" O -" P'É" P'2" S' /# S3PWË# S3PWUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/ - øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø‹2ø¸ø„232322ƒ32øµø23,3]2]32332323,2ø³õ 232-c2c3cƒ2 ,2c2,]3ø²ñ 2]2]]c]8,]3ƒ2 32328238c8]ø±î ]]2c3232ƒ322329 93 3 3 ø­ícc]ƒ3 233\3\32 33993:93::9 3: 3ø¨ì,2]232\c]2c]9]833 3 : : 3 33 9 93::  ø¤ê02]23323c33c38b9bc 99 :9: :33@:9:9: :: :93 33:ø¢è52]33]]23238bc2cb99:: 3 9 3:: 3::9:3:9 ::93 øŸæ92]]223233b2b38b9b93:33 3 93 3949:93:339 339:: øä#2]]]]323b2389bcbc8:9 3: 3 3::ƒ: 3 @:9 349::349@:ø›ã]c]c32382382]b9b9b:: 3 3 :3ƒ: 3 393@:3ƒ:9‡: @::9::ø™â]9]3]3\323b2cb9bcbc:9 @::@::3ƒ :@:9…::3ƒ:::9::9:G3:3 3 ø˜á 2c,]2]23ƒ28c8cbchccb:@49: 9:@:@@3 @9:: 3 3:::: 39:@::939:9 @, ø—ß2]]3]233292ccbcb9hchi:3@„:9:@9@9:9:Aq::3:::9:9::9 9ƒ: 9 ::3:@Aø–Ý23c]c23c]82cbc8c>cicib:@ƒ:9:9:9 ::A 9 A9ƒ@::@@ 3@„: 3::99 @ 93Aø”Ü!]c]c23]9\23b98cbichchc@::3:9:„:@:99:3 :@::A@@9 9ƒ:9: 3 :94 39: 3@3ø”Û7]cc]23]23\38c8cbchcbibch:9 ::9:@:@:9@: 3 ::3::::3:9 ƒ:::9:3 :99 A9 3@A ø’Ú2c]23c32338c8cbcbichci““Aƒ:9„:/ 9A:33A@A3:399 33GAq@:: 3 ::92A9 3:ø’Ù53]]cc2]38b3bc8cbibc“™h“™@::::@9@:@: 33:9 3 :@@: 9„:9:9: :@@9: :: 3 9: :ø‘×2c]ƒc 233\9b3b8cb„i’i““iA@9„:: 9 93:33 :@:ƒ@4::@ƒ:9ƒ:@:G2 :39: @:3 øÖ]cc]2]32]c2cbcchii’“i“™c“Fkƒ:89::93 A@3 3@:@:3@:A:@:::9::9::@ 3 @kAj 2: Aj: 3@øÕ]c]3ƒcS3cc]cc8chcib““i“cik9:::@::@@:@@::93 3@@3@::3 :@::@:@9 3@ 3::@:: :9 9::@øÔ2cc2c]c]2c]ccbƒi ’iccciq@@ƒ:::@:93: 3:9:9449 9::9:9@:ƒ@ƒ: @:::@::99 ƒ93 @:3 øÓ3cc3ƒc]2c]…c)cccdcdc“@: :@:9: @A@:: 9:@:@3@@:@3„@ƒ:@ƒ:@:: :qƒ:9†:39A øŒÑ']cc]2,c,c]c3c]ccdcdccd“AA::3 :9…:@4@::@;@:@ A::@ƒ:Aƒ@9:@::@::@::@ 9:3:: 3::øŒÐ422c2Žc-cc3c]c]ccŽccccŽcci’A@:@9:9::@:@:@@::@@:@:ƒA)@, :@@::A:@:: 9:@@kG::@::9: :39 3 933øŒÐcc]c,c2c3c]3cccdddcŽc™Aƒ@@:::99 3 @:39@3AA@@k@j::““™i:@A@A:9@3: :A@kG:@@ :q: 9 :99 49 ø‹Ï ]c3cc-323cc„cQŽccccci@k:@k@:: :A@@39::::9AjA@@:9@i˜i“@:@@j:A@:9kA@k@Gk::@Aq993:A::@ 3 ø‹Î2cc]c]ƒc]„cccddcdd“i“Aƒ@B3:@@9:::@:9:@@::@A@A:AAq““i“@::@:@39:@qA9A9:Aq9q:9:@@::94 2øŠÍ2]3cc3c2c3]cccŽ„c"”cccc“@::@4::9@A::@:@3 @:AA9:2“„@:A9i’9:33 @A @ƒ:GkA:@:@qA3: 9 3:@:3 øŠÌ ]c]cc,c,]d]ƒc]ccccŽƒc Žcc“™A@xrƒ@@:@3:@3::@@::jA@:@Ab““AjA@9AAGA3::k:3 @:@:G@:@:@3 @: 9 93:@:A3 øŠË3ƒc"]2ccc3cc]cccŽŽcccŽ“cc“™Ajrq@@Aƒ:5:9@@:@;GA@A@@AkAi22A@Ak@k@kG:9GA@:@9:@@3Ak@A@@:G349„ kGk-9:ø‡Ê 2]cc]c]c]ƒccc]c”ƒc2Žcc]”¾ibAxGqAAj@@39 :@A:@Aj:9k@:@A@kG8“A@@:Gk:9@ kƒ@A@4AkA9: kAq:A@: 3 339kAA 9 ø†Ë c]ccc33c2]ƒcŽ“ƒc]Žc]cƒ¾™ÃA@qqGk@A9: 9ƒ:@Ak@@ƒA6@::@kGkAk8jA@@:9@A@:AjA@Ap:@9:@G@A@@Aj@ 3: 99Ak99ø†Écc]2ƒc]c]]3ƒcŽ“]3Ž“”“c¾¾”¾¾™™qqAqA:Ak: :ƒ@ Ak@AA@j@k@:@:„@/kAi“@k@ 3Ak@k3@“:@A@ :@@:kGd@A@A3993A 9@A:: ø…È2c,ccc3…c ]Ž”c¾”23c„¾R™¾™qqGq:@A@A@:@:AA@Aq:jAA@A2AjAkAjAGjA“i“i“@:@A@A@ j kA@kAq@ AkAkG9: 4 3 :@A3A:@ø…Ç2]c]93]]cccc”c¾¾ccƒ¾ľľ¾™GA@A:Aj@:@::@:@kƒ@A@k@A9:99:A@kG9bih“hiƒ@$:qA22AA@k:9:Aq@:9qGk::G3:9 j@3@A ø„Æcc3cc]ƒcccŽcŽc3“”¾””ƒ¾Uľc™™q:@r@@:@9:Gk@@:@AkAqA@k9:::A:@A9:9cc“i“b::@kAqc@k@@:@@AqA:@Ak@:@::A9:A::3Aj ø„Å ]cŽ3c]c]ƒc]Žc“cc“Ž“¾jľ””“ŽÉrxrƒq A@4@@:@3@::ƒ@(k9::A3@:@::@::8ic’i“c@@:@AAbGkG@:@A@kA„@A@:9:@ 3:@@@k3ø„Äd]22c33cc]¾¾”ÄŽ“Ž”¾Ž“3“””¾”½”½”™rqr@@:qG3@;@A@A@@::3A@A3@A:AAj@Aq@::2c™“hb4AkAji8kG@A3AAkGAjGkAqAƒ:@ :9 9:9:@::øƒÄ c3ccŽ“3]c]c”ƒ¾"c”¾“¾¾“3,¾¾”“Ž”Ãx@@:A:G::@@k@Ajƒ:A@A3 ƒ@j:@A99AA98i’“ic9AFAG\92:@kƒ@:9@ƒ:@3@9@3@3 :@ 3 @øƒÃA]c]c3cc9c“”“c¾””½c33cc””¾Žc™Gk@A@A@A9@;A@kAA@3ApA@:hAk@AAqƒA@k@k2ci“hi::kGkF,22Gk:9„:@A:9:A9GA3:::A3:øƒÁcc2ƒc:c]cŽ3””Ž”½”޾¾”½¾Äc¾™“G@@k@Aj3 k@kA@@k@@9A@:kA9Akƒ@5k99AA@A8c’o“cb:@:F3AAicqA:99AGj@:9:9A::@@:393:FAøƒÀecc3,c,¾ccc“3c”¾¾Ä¾3¾”cc¾¾cc¾Ä¾¾Ä™::qrGkGG3:@G@9:A@A@:9:@Aj@A@q:A@A28:k@b2i2c˜“8@Ajc2@khihi9:@AjAA„: ƒ: @:@@9A@:A:øÀc-cŽƒ”cddc¾“”“¾2¾¾ccľľcc¾¾Ä¾¾ÉqrxrGqrq:9A@k::9@:9 AAjAA@kA@:@22322::89b9“i““2c@Aih3:“2: @k@A9@@:9@A9„:@3A@Aƒ:ø¿]2-cic,cc”¾Äc޽¾¾Ä¾c””ƒ¾(”c¾¾Ä¾¾”ÃGqHwrrwH9jAG@A@A9;@k@A9AjAFkAkƒ239b@:ci“hc˜iich Aj@cib@:9A@A@q@:A:9A:@@:@3 :@A:3::9ø¾cc2ƒc ]”3cc33”“¾¾“…¾Ä]“Ž“”¾¾c¾c”¾¾ŸqAxqGr@::3ƒ:399A3A@:9:@A9:9AA9 23283@92“i““c™’ci9@A::’ :Aq:qAqAƒ@:@ƒ: @3 :@:3 @:ø¾]2]3cŽ“]23“”¾¾ÄŽ””ľ9…¾a½”½”¾¾”½”¾qr@rGq@AA9 99 9 393:A@@k:@Aj:2232qAA@“2h“h“ihc333:G@kA@qGkA@kGA3@:9:::9:9:3A@ ø¾2c3…cƒ¾”“ƒ¾ ľ¾c¾“”¾“¾ƒ”%c“””xGrqA@A@k9:9:kAk@:A@AqAAkAAkGƒ9+3:A:2b9““™“ibi2 3@3@k G@@;@q@AqkG:9:@:9…: 3Aj@ø˜“Ž“ƒc]c3„cŽc”޾”¾¾¾½¾Äc”¾cc”“ƒ^d”ŽiÃrwA@@Ad@A::AAk@AGA@Aq@Ak@@q@@:94Ak9:9ci’2i“hb32“@: @A@k3:@@:@::G3:: ::@A:::@A:@A@:ø– “¾¾“”¾””]c›Icc,cc]c]”3ľ“¾”dc”¾¾c]c””Žc””“Ži“™qGkGkG:@@AGjGAq@99:@@k@@kG9AkAA ƒ@3:32i @@:99b29@:9 kA:Gƒ:@„:@::@9:9@@9:@A@9 :kA ÷– 32¾¾”“]c]‡ccc]3]“dcŽ]d”c“c¾¾Äƒ¾ ľc]c”¾½cc…¾9“™kGkGqƒ:@k@AAjA9…:1@:@A@k:GApA9@:A::@22c@A:AA@9bi:A9:GjGqGk::A@A@:9„: ::A 3@A9 3@@A2÷—cc”¾”cƒ “]3c¾””c“2cc“c“c”c޾Ĕ¾Ä¾Ä¾c2”½”…¾ľ”¾“cbGrxq:Gk@A@@k@9: ::9::@ƒ:A@k@9 @:A99::9bcƒ@.jAb2]:9A@3@:@kG39@Ap:@@A@:::: @@A3@3: :@: ö˜]“¾cƒ¾¾”¾c“”“Žcc]“”2„]c3]””c Žc”c”¾”ƒ¾ľ”¾¾c¾”½”“”¾¾Ä½¾”“™“xxr@ƒ:@Ak9:: 3ƒ:,@:: 3:@93G@A:3@3A@AA2bibc3A 2923Ak@:9AqAG3:@ƒA@k@:@@:@:@::3A:k 9: 2@:3@ö™cƒc¾””½¾cŽ”“d3]9””]c3„y2cc]c3Žc3d“¾¾Ä¾¾2]c½”¾cc¾¾”“”¾”“Ž”Érq@A@:9A@::3::9:99 ::39@AqAA@kG389c2i“’i,2@:@:9:kAqA: @k@k@A@k@A:@A:@39:ƒ@: :A@k ö™””]c”¾½”¾”“Ž“ccc¾“”]2„3c]ƒc”c2”¾“ƒ¾ľc””¾¾”¾¾”¾”ƒ¾”†¾ÉxG@AqGƒ:9:9:ƒ@L:A@: 9A@:@3::AkAq@@k@93bbi2“i“2c32:9 @A:GkF:qGkG@A@@:A@@9:@:@@: @;@Aj jAqA9 õ™”Ž“””\c]”¾”¸ccƒc””½ccƒ]]2c]c3½””¾”¾”“”¾Äc”¾“¾½Ä2¾¾„c”¾ƒc Ér@AqA@A@9@ „: @AjAkAkƒ@C:: @ @ bAA@:9ccb928b838“2ii@k@:Gk:AqAq:@k@Aj:A:: jA@::39@:@3 qAG99õ›“”c¾¾”Ž2c“¾cŽƒ]”“Ž”¾cƒ2c]ccc”””“¾”½¾¾Äƒ¾ “¾”d¾”½cc¾¾„cEÃix@:kAjA3:9: @:@:AqAFA@:k@@:@:@:99jAkA@ch92293i’c3,2“i“8]@@:@:@:@@Aƒ:@:9:k k@:@ : @: 3:@ƒ:Aôš2¸„”½”¾“¾”‡”½”½3“Ž…Žc3„c ]c3””¾””¾Ä„¾ ”¾¾c“3cc¾”„cb¾¾É™qrAFAAq3:33 9@:@@:@k@q:A@::3 kAk9:@9:b9bc8“’““cc9bbi]3]A@A@:A@AjG39A:@:@@A@A@3 9:@: @:kG@kô› ”½””¾”“]3†cc”Ž”]3ƒ<3c“]2]c]cc”¾¾c½¾“¾ŽÄ¾Ä“¾”¾cŽc¾cc¾¾Ä¾ÉÃxG@k@q9:4:9::@ƒ:@A::@ƒ:C9 9:FA::92c82c8“i“™““]c“cbc2k@kGkqAkG9 k@3A 99A:j @3::33 @9AjA ôš c¾”½””cƒ“ƒ]c3”¾¾cc2c”j9c]3ccƒ¾]”„¾“Ž”“””¾c”¾”“3¾¾Äƒ¾Ÿxrq:qrG3: @A@A@@ƒ:…@$:@::@:@::AFA:@8c2c8ch““nAޓޙ2292]A3…@Aq@kA@: A@9: k@@: :@::3GAq99ó›”¾“Ž,ƒ¾”23”¾3½¾cƒ]]”Žc”]c]c]ľă¾)“¾”¾“Ž”½”¾“”“¾ŽÄ”¾Ä¾Ãxx@GqGr::@3q@A:@ƒ:Aj;@A„@)A9:@9:9::2c9:““bc™““ic23 ::A@k@:GqA„@ A9::@ @:@3 ƒ:@3k@@ ó›c¾”Ž2cƒ ”·]32]“””“3„]“]3cc“Žcc]ccc¾¾c“2 ¾Ä¾¾“”¾ƒ¾”“Ž“¾”“¾¾ÉxrxkGqr:3::A@::9:@@ƒ: @@jA:A@@3 @ƒ:<c:GG“i™bi™“jc“832AjGk:@@A@:A@kAkA9:@@:@k@3 :9: 3@:9:9ó›]”½”¾ccc¾9]¾”¾”½Ž””23ƒ 2cc]2”c”cƒ=Äc“d¾¾½¾Ä¾Ä¾¾“ŽÄ¾Ä¾Ž“¾Ä¾¾”¾¾ŸxrxrA@r9@:@9@:@3 Ak@@Ak@;@9Aj:A@…:;8bA:@“’cih“™Ž“32:@@Aq@:A@:@j@:A@k@@k@A@k:@4 9@A@2AA@:9óœ]”¾ccƒ ]c“¾“¾”c½”„ ,dc3c]”ƒc Ži¾]cccƒ¾tľľ”¾¾”½¾¾Ä¾c¾Ä¾“qA@A@x::A:@A:@A@A@k@A@k@::A:@k 9:@ c2k9A2ih““c™9]”@AkGkA9:@::@:A:@:A9@AA:2:@A@99 @kA 3kG3: 󜔽ccŽ“c]c3“Ž”½d½„cccŽb-“ccd¾c”¾””ŽÄ¾¾š„¾bľ“”¾Ä¾Ä”¾Ä¾Ä¾¾Äxxr@kxr::9A@:@@A@k@kAFA::@@ @:@39 :9A3 8i92cci“i“ic“:Aj:Gk@@:GkGkA9kAj@:@k9A A@ƒ: AA@kA3 G3@@: ò2”ŽccŽ””¾”“]c†33ƒc3d””c¾“¾”Ä…¾ľľ¾”cÄ…¾”bÉ]cc”xrxGqGqqƒ:8A@:@k@A@@k:9::9 :@:@ : :9:93“92ic“’™““A @AjA::G@Ak@@::ƒ@9@A@@3jA9k@:@Aq@@A3::@:òžcŽcŽ“”¾“”¾cc‡a23,”c“c”¾¾]¾¾”“¾¾Ä¾š¾¾Ä¾¾Ä¾ÄÃľľc“c™™ÉÃÉrxxAqAxr@:9@@k:AjAjA@:9A@Aj:@k@::2A:: :A 32i8biihickƒ: @@A39AAk@3@„:@AjAkG9A3A@:@:@k:@3ƒ:@AA3òž”“Ž“””c]¾“]3ˆ3]“c¾c¾šc¾¾“¾””c™ÃɃ™"¾Ä¾¾ccɓľ”“ÃÃÉÃÉ™ÃxxqxqGrwA9AA:@@ƒA@@A::@:G@:3::@:A@:9:39c8cchcƒcA@9:A9A@3@q@@ :9AG@ƒ:@Aq3::@A9: @A:: 9@@:óŸ ”ccŽ“Žc¾3‰*32”“ޔޔ”c¾Ä¾”½Ž“™ÃÉ™™ÃÉɾ¾“ÓiÉÉÙÉÃʃÉY™xrxA@rr@:@k::@k@j@Aj9A@@k3A:93AA@9:@9 :i8“ib“i““]c@:@:@:@kA3Ak@::Ak@:Gk@kG:G j9Aq3:q @ƒ 3:@3óŸ Ž”“Ž“”cŠ!3]“-c“”¾“¾””]ľ“™Ã™É“ÙßÃÉÉi™™ƒÉÊ“™™ÉŸÃ™™Ax@A@kwrG:„@):@AA::A:@Ak@ @:@A@j@:3 :9Ahc2“bi“’i™3]c@Aƒ@:@G…:ƒ@A9:qAGk::@::@:@::3…@:@3óŸ c”3”2”Œy2¾c,”cc¾cbi™9“™™Ãəə™AÉ“™“xr@AAGxxrxAkAxxrxrxrAG@:AA3@:@k@:@A99:@@A:3@A@@:A:@: 8“ibci“i“’c23: @;jA@k@:@9AAk@A:GkGA9 :GGA:@:@ ƒ:@Ak ô ]cc”¾,Œ,”]¾Ž2c¾¾3ßÃi„™ÃÉ™xk@Aqƒx rA@xrxxrqG„x_rqGkGqrk@jG@::@@AkFk::@A9@::9:A:9 A@kc2b“i“˜™“8332:9k@AqAG:@AAp:9AjA@kG@:@9kqAq@A:@A@Aq@k@ ô 3\””33‹,c”c¾cc¾¾i3ÉÓh“™ÃrGrxxqA@qGrxx@qrqxrwrqGrƒx qGqGrwA@Ak@ƒ:PA@A@A:@::9A@3@AAj::qA@9 i8c8“ib“o3]9@3:AkGk@@qkAA@AA@:@::@::AG@AjGA@@:j ::G@Ak ô¡”“”39\Š*2]”“¾ccj”™ÃŸ“i“@qqrxrGkqrqHqx@rGqqxrGƒqVxrxrxAjxr@:@A@A@k@k@k9:9:@::A@::@:@::q9:@:32““ib“i“22c@:@ @@9A@A@q@:q9:@A9::@@jAkGAkAjƒ:@q:9@A@jô¡””]”Š73,c޾c]c¾j™É™™“hi@krGqrx xrNrxrrxqrxrNAkxHxrxx@A@Aqx:ƒ@?jAkFA@ 9:9:@:@A@A@A@A@::::9A™ibi“882c@: @3949@;@:@3A::3AkGkƒAqAjGkG:@:@A@Ak@:kAô¢””“”‹4c2ccccŽ””ÙÃÉ““™“q@GkGqHw:G@3wAwGqxrNrwqGrxrGqrxrxxƒ@AkAA@A„:9: ƒ: 9AjA9:@@3@@…: 3:9@,c33 9 : AA:@3 3…@Gk„@jA@:G:@:9:@Aqq@AA@@:ô¢c]”2‰^”,c,¾]“28ÙÃcGqAxqrGkAqqA@:krAxrA@GqqrAqGqGkxGkGqArr:A@k@k @9:93:9A@A@::@k:A@3:G@@: 3:@:3ƒ:,]:@3:@k@:@k@A@AkA@kGA@A:@qAq::@:@:GkGAk@@:õ£cc”cŠ23cc¾”ŽicGAqxr@x:GqƒAƒ@)AqwA:qr@qAGqrGkGqAxqGqAqxwAjA@@::9::999ƒA"k9:9@:Gk@A @@3:9:A@k:9@@@: cc]„@A@j@ƒ:@kG:9k@Aƒ: @:@:@39AqA::ö¤]¾“-Š:,¾c]””2™hcwAqrxAx3 k 9@:k @r@@qrGxr@qqGqrqGqqGxrxq@rrA@Ajƒ:993:9:39 :@AA@k@Aj::AAƒ@2:kAk@@:Aq@k:3:c]9:@A:j 4@@3@9:93A@@:@ 3:@ :3:@ø¤“Ž”“32ˆ5¾”¾c9™Ã@kqGGx@x9A3:@@A:9r:rrGkGAqrHqGqH3GrqqxAAqrƒ@:::@ƒ: 9:493@:@Ajƒ:@A:@:qA 3AFA@A@@:AGƒ@3]bƒ:"33@A:@AA:@: 3:Aj 3:@:3 A9 3::3 ô¥“Ž”,‡r233¾c™bc:@rqrqr3:@@:@k@:qGqx@qAqrqGkGkxrxAAqGkGx::99 @:9:9:9::::@AAjAGA9:@A@:3:@Ak@39AAj @:@A@]@: @:3::@ƒ:@A@:@3:9 @:@:A@3A@:9:@@:9@:@ò¥޽“3]†2,“¾¾3iib99A:xrNq q9„:@@:GqGrxrG@rwrxA@xrxxAqAqqG„:@ƒ:R: 9::9::@::GkGkGAq :jGAq:@: kAAjA@A33A@j ]:9:9:9@A9AjA@:: 3@::@A@Aj@4G@:@A@Aó¦]cd9]…?33¾ccb“A@:q:9::9: :9::@@A3xAkGqrGk@rxrGqAxxqGjGqGqGq:@::9:9ƒ:9A@ƒ:HAq@AjGj@Aq9AqA@@::@GjG@@k@Aq@::@: :@::@:AkA39A@:@: 3 9:@9393:A9kAk:@:@ó¦c]”½cc…y23”ciibG:qrrG::9: 9:9:@::@3x@xAkAqAqGqAkGqrqrHqrGkrG :@:9 99:@A9::@ApAkG9:AkGkA9@@AkA9::@A:@:9:A@:@:::9:@:A@G@: ::3@ :: 3@@AA 3 9ƒ:G@9:ö§c“Žc]…3,“c,2c8r@ :9::9 3…:M9 rAqx@AqGqGrGqGqAxGxqrA@qGk@43G::AA@@:AGAjAG@@AkGAqAF:AkApAq:Gk@@A@3@kAA9„:GAk@kA9::9::9:@ A@499A@@:9qƒ:ö¨Ž“”†3” “k@kA3 ::9::q3: ƒ: @r@r@x:@Aƒq8HqqGkqxqGkGqAqrGqA k4@A@q@A@kGk@GkAjAkGjGk9::ApAqAAq@Aj„:3Aƒ@3AG†@:@:9:AG 9@:j3A9 A@@:@:AG@:@ö¨“”¾†dcc™2Gqrq::9::: :::?Aq@@:qrqrGqGqGrqGAqAxrGkGqrrGq9:9:@AjAk@:@:GkAFk::GAkAG:AjAAk@ApAkAA@:9::„:9A::A@„:@: k:@k :A@Aq::@AjAA@@3:@::õ©”½c„k338“2 q G:: ::9: :9::r:GAA@GkqHkrqAqAqAqAxqqAGGrx@Ac:Gk@@:GkAkGkGkAG:@@kGjG:FAjGAq@AAFkFk::@: :@A2:9„:@:A99:AA@3:qGA@33 39::@: @@öª]3d„:”2383 q 393:9::9q3:q::G:qGrqqAqAqrxAGkGkGqGkGrqrqAq9AA9Aƒ@Q;@kG9:9G@qAp9A@@:Gk@kAAjG@:k@k:GA9@@3A3AkA9:A@3@A@@q:Aq:9A@kAqA::A@A:@@33@A@:ô«3“c„yŽ3““2Gq: :99:q9q:GqqGqqAGqxqxrGAqArqGkMrGxqAAj @k@Ak@qAq9AGkA@@;@k9:@:@A@qG@A:@A@@:kG::@: qAqkAAj@: :3A@9A3@: :@ kAjG99@q::  ø«“”,3…“3\22r9r99 :9::A99r9q:rGkƒA@k@rNrGqqGqqrGqrqrwA@:9ƒ:AqƒAqA:@:q::@@:A:@ƒ:*@kAkA9@@3@A@@:@@:@:qGk @qAGA@:@@qA::@ 93Gƒ:9:@::AqAq:@: ,÷¬Ž“,…`323i2G:9:G43: 9@3q3H@rqrGkGkGAxkGqqrAqGqGrGA@:ch::kG@kFk@A@:@3:@kAG::9:A@Ap:@::A@k@AjA:AA:ƒ@ :@:9:q@@kƒ:@:@A9 kGj:GqAA@A:Gq::3 ÷­”†323ib :9 9:9:: q3A@A@A@rwrq@AqAj:9:rwrxA kAGkGjc@ƒ:D@:@kAqAG:qA@A:k:@k@:@:9AqAA@A93@A@kAAjA@:j@::@:@:GAkAAqAG@qG:@A3@Aƒ: Fk@k@:@A:G3A÷­”… 3cc“:q 39ƒ:'3 k@@@:3@GA9AAq@:99:xAGkAjAqAi:@:„@A@@AjG@„:qA9:@3:@:9:@j@@A@AjAƒ@ Aj@@:@::@A:@:ƒ@q 9kG:9Aj@  :ƒ@ :99A@::@:@:99ö®22„ \cqr@ „:# 9 Aq:Gk:9AkA@9:9:99::93@A9AjAGj@@ƒ:AAj3@A@:q3@:@:@:G9ƒ: @A9:AA:@k@:@Ak:@A@:@ƒ:AkG:@:qkG:@:@3 kGA33 3@AjA@ @@ƒ:9qG3 ö¯Ž„c8c“@493A9 9::3:A@:@:@:3A@;9@@9@:@:@:3:9:9:@:@:@@:@:G9ƒ:@:@:: 3ƒ@jA2@;ƒ@:qAqA@::jAj@:9ƒ: @:@33 3:øˆÂ5]c229 :939 9A ::@:AjA@3@;9: :kG:A::@:3: 3: 9:@::@ƒ:@:ƒ@::9:9 :9:@@A:q@;@@::kGA@:@:@@ƒ: 3: @:: @:3@ :9:øŠÃ:c33:34A:9::99::@33@;99 :@@9A@@A@3 99:@: :@::@::@Aƒ:Gƒ:(@:@: 9:qAqA@:@kGkGk:@:@::@@ 3 A:@@::@3ƒ:9:øŠÄ]ƒ2 :@ @4@ƒ:@:@;@::@A@9@:A@3:kA @:: : :9‡:@@3ƒ:1@:9::@:@:A9:Gk:@@AkG::@:@:@@A:3:9Aj@A39::@ 9øŒÇ[322 3 3@9@:9A@3A@:@A:@3@:A@:Gj ::@ 393 :@: @:: :9:@:9:@::Gq:@::G:@AjA@:@:@:@::j:Aƒ@ :A9:@::3øŒÈg322@33::@::9:@39:@:::A@j:@@A@3@@: 399::@@:@:@3@@:@@399 3GqAq@:@ k@:@::@@:@@:@: 3A@qA@;93::@:9:9 øÉ\]9ii@4 9:9::9: 3A@AjA@k@ @::kGk@:@@ :@:@::@93@:@A@@ 4 3 AqA:A@:9 ::9:3@:@;j:3 3@A@:@A9ƒ: : øÉ]c’i2…:;:: 9A39@A@: @:@:9:A@::3@:@:@:@ 3@A@@Ak@@9 @A9A@@:A:9ƒ@::ƒ@3 A@qAƒ@ :k@: 9 @:3@øŽÊ c,i“2 :@@:ƒ@::9::Ak@@:@:::9:ƒ@:@;ƒ: 9 j@ƒ: @::@:A3:3:ƒ:#9::@;@;@:@;@Aj@@:@:@;@:9 93 ::@:@:øÌci3@;:@A@d:@A3:9@3@A3A39‡:@:ƒ@:@A@: A@:k@A3A@@3 :33:@3Aƒ@ 3@@A::9AkGq@;@:q:@:@ 3 @3@A:3 9øŒÍc]2i3@:@::@::3ƒ:9 A:@:@AA@:@ƒ:-@:@A@@d@A:j@:@@:9Ak@:9A @A:@9:A@AA@j@:Aj@:Aƒ@:@34 ::3:A:@:@:øŒÃc‰ c3c2i3::3…@:@:93:@@k@:@@:9:9@@A@„:!@4@A@3:@:@:A@A@: @k@@:A@:A:94 ::ƒ@A:@:k@:9: 3@ 99A@@::@:::øŠÄ]cŠ"c232@::@::@: 39 :3@:@3A3:@A:A::kƒ@3::9AA@A::qAqA@j@:@:@@ƒ:@j3@:@@;@@33: 3 :9 A@:ƒ@ƒ: 9:@ø‰Äc‹]c299 ƒ:ƒ@A@3::::@@:@::@93ƒ@3::A@AjA9@@3 ƒ@0k9;@ A@;@@3 3A3:@@:@@3A@:@3: 3:k@kA:k@:@@::@Aø‰ÅŒa]]cc :@3@::@A:939:3@:9A9A@;@:A @A:kA@A3@4:3jA@A@3 k@k@:: 9A@A33 33@499 : ::9::@A@@::A:@:A@@Aø‰Åcc,Œ23]c …:@3ƒ: :: A@A@4ƒ@:9A9:3 ƒ@9:@A3:@AjA:@9:9 :@::@:@@::@A: 33@A@A@::@@AjA@k@k@-ø‰Æcc2Ž9c]c3@ 9@A@:@9A@@::93: @49:@:9::9@3@A@A99:@A:@A@A@k@::@„:@@:9:: 3„:A@A@jA@:ƒ@Aj@@A@3øŠÆ33Ž ,c3cA@:@ƒ: 93 9: @ƒ:9„:9‡:/49 A::@3:@:@: @@:3 9@@A@4: 2 9 9:@k9:AjA::kAjƒAjA øŠÇcc‘c32 39:ƒ@:@ :@@:@ƒ:@@:@:@:@@:@@:@:@::@9:3@@:@4@„:$9@A@:A39 @::9 @@A:@:@@k:9:AFk@Aj :ø‰Çcc 2,c]c A@…: @;@Aj: @A::ƒ@ ;@@;@@:@:ƒ@1:@@:@:@@:@:9@A:@:3@:@::@@Ak@::@A@@:@A@A@@A@kA:@:ø‰È3]]c 2ccA9::9 9:9ƒ:@399„:@:@:@A@@:A:A@::@;@A@3:@: 33:„: 9Ak@A::@j@A:Ak@AjA@::@A9:øŠÈ2cc’ ,d]c:3ƒ:$@:@:: 9::@@A@@Ad@k:A@j::@@:@@3 ::@:@ƒ: 9:9A@A@@jAAk@:9AkF::@@:ƒ@ø‹Éc”322ccŽ933 3::@:@ƒ:ƒ@:Ad@A@A@@:A:@A:Aj„:@ƒ:!9 3::9:@:9:@:@: jGk::@@:@:Aj@:A@ø‹Écdc]• ,cc]9 39„:@:@3::9::9A@:@k:ƒ@:k::@:@:9:9:ƒ@:9ƒ: @:@@:@@A@A@9ƒ:@@A:AjAkø‹Ê23]2]”33c„3 3 33 3ƒ:@:@ƒ:/9::9 @::@::43 :@A::@ 9 A@k@3:@::9A@:9::@@k@A@øŒÊ239]–2]c2]ƒc cc]c] - 9„:9::939 3 9 3ƒ::9::AA:9A@@: :3:@A@:@Aƒ:A@AøŽËc23cc3c]9]]32cc2:c3cƒ 3Ž9@::@kA:@@A@k@k „3øÌcc2ž3]3c322c2333323ccc,33c3 ::Ak@@3:Ak:@Aø—Ì32Ž23¢]]2dcc3]c]c,3]9]23\3 :@kFA@A@kFøšÍ2c32¤]c33232233\323cccAk@A3@AAøšÍcc¬ 23c]9]3c]]„c9ƒ@k@ø›Î]cc]©33]]2c2]29]]3cƒ:øžÏ3]9©\c]923]3cc]2c]]c:9:øžÏc3]©]32]32]c]]9]2c3c]Ž3øŸÐcc©]ƒc239\9cc]c32]c3:ø Ñc]§2322]3]23]2]c]c2]2232ø­Ñ232¥ 32]c3\93c3]2…cŽ323ø­Òcc]¥3]2cc]cc2]2c]cc]2cc]ø«Òcc‰23š2c]2c3c3\c]332c]ccc3ø«Óc32†]3\š,c3ccŽ3c3c32,33c32dc]9øªÔ]32¢ 23,cŽcc2cc3ƒc ]232,]]c3c\øªÔc¤ 3cc]323]3ƒc 2]cc3c]3]øªÕc2£3]„c]3cc3dc]3c]8]23ø©Õ,33£22c]c]cc2c]cc]3ccc,c]ø¨Öc]2£3]9]c]33cdc]8]3cŽ9ccø¨×c¥ccƒccc‡c]c]cø¨×]232£ccŽ…cd]c]„cccø§Ø233¨]cc]ƒc„ccc]cø§Ø]c¬c]]cŽcŽ]cdddcø§Ùc® c]icccŽcø§Ú,2° ]c3“”c3ø§ÚcøáÛ]øàøøÄÜ]øßÝ92cøÊÝ],cŽøËÞ2c]øÛà3cøÚöcøÅøøÄøøÄøˆ,ø»øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/!-!øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄø‰2,22,3ø´ø…2,23 , 323cø±ø22, ,32,32,ƒ2322ø¯ô ,2,,3,32ƒƒ2 232223-ø¯ñ22-22232232   ø¯ð"2-2,3232232 3 39 2 - ::9 øªí+223,-223223223223 3:99 3:9 3 3 33  ø¤ë23, ,2223229283833„:9399 33 3 ƒ 3ø¡è422-2,32232323822928]93:99 3:3::9 3 39:93 ø ç 323,32 ,2 ƒ283838\9c9 33 43:: 9ƒ:3 3 3 3 33 øžå 2232-22ƒ2/32328]8ccbc@:93 :9::99: 93@c::9:@3:3: 3 2 3øœã@2332,323,32929b8cbcbiccb@:: :@3: 9: 9:4@:@:9:993  3 3 :ø™â]c,3,ƒ3292283b3ibcc]c]b@@ @:@3ƒ 33 ::93 3 ƒ:3:9:A393@: 933 :ø˜à23c2]232]3]]9]c]9\c3]9]3bcƒ:@:: 333 q49:@„:9::99 3 : 3 3 3 ø–Þ,232ƒ3)2]9\9\9]c]c]3c]c]9b9:@ 3 3:9 A2 9 ::9„::9:3„: @:39:9 3 ø–Þc,c\3c23]]c]2c3b3ƒc53b]b@:9 3 9 3:9:@3AA:G:@ 99@:33 9 9 9:9:: :3 3ø“Û232,ƒc2]23329]cc]]cƒ]5b]c9::333::::9::99:9: 3 :::@:9::9 :9:9:9 9 3ø”Ú3c]ƒ3 c]3c]c]]23ƒc38cc33b:@39939 :3 :@AA„:9 :9:@::9:@:@::9 ƒ::93: 3ø’Ú-\cc232]32]c9cc]2]3c323hi::3  3 3 3 @:@:@ƒ:@A@A 3 3  ::@::ƒ9 :99::99 3ø×]2]93]323c323c]cc]ƒc.232Ž“i::9:3 3:9@::@::A@A3Fk@@Aj 39 9::@ƒ: : 9::99  ø×+c323233c]c3,]c]¾¾”¾¾”™::9:3:93G33:ƒ@ 39:9:A9Aj@ƒ: :: 23 @:@:9::::33:3 3øŽÖ,323,232]c]cc3c¾¾2332ă¾>“¾““@9 : 3 A3AA@4@A3 :3A@@:9:@;GAj9A@@: G3 ::9:3: : 9  -øŽÔ]ccc3233]c]cŽc”¾¾”“ƒ¾#š¾Ä¾”“qAqrq@@:@9 -@A39: 9:9A@@;:@„:@@ƒ:@39: 9: 9:93:3:3 9øŽÔc23]2c3”“”c¾”““”c,”Ä]ƒ¾@““@rwA@::@3:3 9:9:9 9 3Aj@A::9A@:3:99 A@:3:::3:: 9 3 ø‹Ñ232,32]ccd¾“¾c””ƒ¾Kc”“Ž“¾”“”“™qkG@:@:9 3A@A@:9:3@@:AA@:39 @A3@@A@:9:3:A39 3: 9: 9 3 33 øŠÑac3cc33]c”½¾Ä¾¾23]c¾”“Ž“”ŽÄŽ“d“rrA@A:@A 3:3 3 j3::A@:4@@j@::@@A99 @A:3 3@::@ 39: :9 93::G::øŠÎc]c2c3…c”ƒ¾6Ä2]c“c3]]“¾”c3“˜r@9:9:@:3@A3@@::9A@:3@;::@: ::…@3:@ƒ: G 933:93 :9:3ø‹ÎK“]޾]cc]“¾¾cľ”¾”c9]]¾”¾33¾3½¾8A@:G:@::@A@:@39::::33AA3@9 @:@:@:AdA…:@@j4AA3 : 933A 3ø‰Î cc“3޾”¾¾c”¾”ă¾!”3¾¾Ä¾Ä“¾“¾¾”Ã@qGr@:A3@@3 AAjA 9…:9:9 :@:@::@@:@::9:@ ::@Aƒ@3 3 : 3 33 ø‰Ë233]2ccc¾“”½”¾c”„¾cc¾½”¾¾”¾¾”ľ¾Ä¾™q:3:9:G3ƒ:ƒ@3::9„@!:@@A@:@A@A:@k@A@:@A49 :A@@k@3 ƒ9 :3 99ø‰¦£]]c2cŽc]c¾”¾”ƒ¾½Ä¾Äcc¾”¾¾“ľ¾“„¾”¾G::::9: 9:@ƒ:53@@::A@;:94@::@3@k@:@:@j:@A9A :99@A@@ :3::9: :øˆŸ“¾”“¾“”ƒc‡ƒ”“”cc]ƒc;]c3c]c”¾“¾“]cc¾¾Ä¾c¾“¾“”¾“”“¾”“”“¾™q@9A@A@3::3@@A9;@A@A::ƒ@3::@„:@@Aƒ:@@:39A@::93A@:@: 3 999 39øˆŸ…¾c†ƒc””¾¾”cc“”½”†c32ƒcA”\c3]¾”¾”¾¾Ä¾Ä¾c””¾”]3c]c]cccÃGrqGrqrA@@A3@A9:@A@k@k@AkA: 9@Aƒ@$k@::9:: :A@k@:@:9:Aj@k 33:9 : 9 9ø† ¾”¾¾ƒ¾¾cƒ¾“”Žccƒ¾Žc‡cc]c3c”]“ccƒ¾ľ¾š¾¾c”c\“cc]cƒc]ÉÃrwHqrqx:@:9::9ƒ:2A@A@AjA9“i“@:A@A:9@A::3@@A@@A@:@::A@@ @:;:9 ::øˆ ”Ä”“ƒŽ2”¾”¾c”“¾Ž“cc¾”¾”cc† 2-c32c]c3cŽƒ¾Ľ¾Äƒ¾32,2¾”¾332¾¾”¾¾ƒi6q@rGq9:3@::::@:@jAj@A@@“i’iij@:@:A@39:GAk@k:@k@A@@ƒ: 3@@:@33 3 3ø‡ “”cƒc¾”¾¾½Ä”¾¾”¾“cŽc¾”ƒ¾”c…]2c3]cc]“Ž”c¾Ä¾“¾”ľc”½„”U¾¾”¾½¾”¾Ä¾“¾2:@:qrG:@3@A9A@ 3:@@::i@A@A@A@““i“Aj::@:k:@:3A@@:@AkAk@:92:3933 ø† 3¾¾]dƒ¾“Ä„¾”¾Ž“c]“¾“¾“ކPc]2c3]3“Ž9c”¾¾Ä¾ccc¾”½”¾¾”½””¾¾”½”¾”™@qG::@A3 3:@:@A:AA@:@““33@j:9“’ kA9:9@Aƒ@:9@k@:@:ƒ@ :@@A@ @@-3 ø†¡ “c”“Ž“¾“¾”ƒc“ƒ¾ “d3]¾¾”¾””„3,c3”]„cjŽc]c¾¾”¾¾c¾”¾¾”¾“޽¾¾”¾½”½¾”¾“¾Ãr:A@A@k4@:A:@:k@@k@:A@i2iAA@: AG@:9:A:@3A:@A@A:@A::@:@;jA@k93 3 :, ø…¢]“¾c¾¾Ä”ƒ¾dc”2„”Ô¾c¾“„„c2“32]c]c“”¾”½“”“¾Ä¾““c-“”¾¾“¾”¾”¾¾332Ér@Aj9339:ƒ@A@3@@3:ƒ@#A22AA@k@kA@A::jG@@:: @j:3AkkAj:A@Aƒ@ 3  39 - ø…¢3ƒ¾”„¾”¾”¾…cc…¾cc…c]cŽ2Ž“]c3”½¾¾”†¾””¾”c]”¾“¾c3“”“ƒ2L¾ÉÃxqr@AA9A@A:@kAjA3Ak@:@kAk@A99@@Aq@@9@3AAkA@A9AA@:9AqAG@AjAjA@:: 3 ::3ø…¢½”¾”½”¾“ƒc† cc”“”¾Äc…]ƒc2Ž“c”ccŽ”¾”¾¾”¾Ä”¾“ƒ¾#”cc¾”c¾¾2]]¾”¾¾9rNr@@A@:@:AkA@A@A@Aƒ@ ;@@AA@A2Ak@ƒ:3:@:9@AjA33::9Aƒ@kk@A@A@ƒ:  33 @: 2 ø„¡ ””½¾¾”¾cƒ“ƒ]c]”½„¾dƒy3]c3cc]9,”c¾Ä““¾¾Ã”¾“¾”½”¾¾½32c¾“3ľľ¾Ä¾ÉrwA@k@A:@kFAjA@k@k@k AjAk@jAjAb@:@9A@A@A:@A@@:::@AjA GkAq@3::@kA93@: , øƒ¡ 2¾”¾”Ã3ƒ”cc”¾””c¾Äc‡]cccƒ3ƒ¾”¾”„¾#“””¾¾”¾”“¾Ž2¾Ä”¾¾”É™x@AkG:93@AjA@kƒ@:GA:3 9@@Aq@Akiici3@::@:@:jAƒ@:3 3Aj@93kA9:ApAk 3 køƒ¡Ž“”¾¾“]9„½”cƒcƒ¾“cc†$,c]cc]c]ci¾Ä¾Ä3¾“¾Ä¾Ä]c½”¾“¾ÄŽ”“„¾4“¾¾ÉÃxq@@::@ @@A@A@A@k@399@@AA9AA:9:b“chcAj::@k @A9A„:@AqAA@AA@A@3: 2::3 ø„¡¾”¾¾cƒ¾Ž…¾”½”¾„]2c32cŽ„c ŽcŽÄ¾¾“Ž“¾”ƒ¾:ľ]¾“”¾¾”c]”ľ¾”¾”Érx:A@q@A@eA@:jAj4A:A@A:@@:jA9:hii“ch3ƒ@$Aq k@:3@:@k@A@k@k@k@@::3 A@A493 3øƒ¢cƒ¾ccƒ23c”“”…¾”¾cŽƒcc]…c7]cc””ccŽ“””¾Ä¾¾Ä¾iŽ“¾¾“”¾”]ľc2ľÉrN@@r:Aj@@A:@@:@@Aƒ@8;9AkA9::@cbi’““b :A:@@b9A@A3 AqAqG3@GAqA:: 9k39:@A33 øƒ¢c¾šޓޔ”¾”¾™¾“”… c3]3cŽ„cŽ”cc”¾”“¾”¾¾”ľޓ”ƒ¾½]2„¾Nhrxqrqx@AAk@94@@;93@;@@:3@: @A3c29’i8 k@kAA23@k@@k@:9:3 :93::994A 3 @@3:9 3øƒ¢3c¾¾”“¾””c”¾”c†c]…c 3c”]¾”“¾cˆ¾ľľ¾“¾Ä¾¾Ä”¾¾™c8ɾ@xqrGxrƒ@ A:9::@@AAjƒ3-:GAq@k@A@ibi“ic33 j9b 3:GA:9:9@A@9 33@9ƒ:3 9: 3ø£“cƒc d¾“”¾¾”¾“¾c†:]2c]c3]cc]c]¾9¾“¾”¾“¾Ä¾Ä¾Ä¾Ä¾¾Ä¾d“ľ¾“¾¾ŸÃÉÃÉÉrxGrqrwA:kƒ@':9 k:@A@A9:j::AGjA@c“hib3 @@Ak@:@9 kFƒ:@A@A@::3:@ @::9Aq::3 øƒ£ ޓޓޔ”½”¾ƒ¾”\c†9ƒcc3ccc¾¾”¾¾””ÉÉ„™¾Äƒ¾Q“ɓɾľ”ÉßÃÉ Ãxr@:@xr@A@A:A:@A:@A@A@A3AG:bb:@:ch““bicAk@]:@A9A3:@Ak@k9:@::@@ƒ: @ kG:9 9øƒ¤”½”“”¾“”“”¾2ˆsc2-ccŽ2”d¾¾cŽÄ¾“”½¾™ÃəÙÉÉÃľ“ÉÉ“ŸÉÔ¾ÃÉÃÉÉÃÉxr:@: Ak @:93@A@@93AjA@:9bcic::h29iih2i9A@cb32::@::@AjAA@:A@:@:ƒ9 ::@A:@ :øƒ¥ Ž”¸“”¾”¾d¾2ˆ3]c2,”c”“޾“”¾că¾”¾™Ã™Éƒ™ ÃÃÉÉÃəʓ™ÃƒÉVßÉÉÄÉÉirxGrqx: @d :@933A:Aj k:3 988cb::8cb“h““ibcb:@329b :9Ak9:Aq@A@A3@@ :A:A:@k@3øƒ¥ “Ž”½”½””“”‰y2c]3“Žc¸”¾”¾“”cc™Ä““™™Ã™Ã™ÃÙÉßÉi“h“™rŸciiqrxHxrx@xqrMr3@A3 4AG:k@A@@:@ \2c8c:ciibci“bcb :@:9c 3@@A@AGkGAjAjA393A@Aj ::9 9 3øƒ¥ ”“¾”¾]”ŽŠ&,9]cŽ“”“¾“¾“”¾cÙ“™™Ã™™ÉÉÄ™™xAA@A@xrxƒ@?:xrx:@:@rxrGx@r@AjAk@A@@kG9@Ak@A9 2c8c@k@8“hci’iib9c9A 3 @A9Akƒ@k@@kGA@::@@9A„:A :øƒ¥ 2Ž“¾”“]¾“‹/3]c2”c¸“c]c3¾¾3c™2™Ã™ÃÉßrwqrAj@rxrx@Arxxrwr@rƒx rx::rw@kAF„@BA@A:AjAGj 23@2c b2““h“i“ih2:3 9@A@A:@@kA@A@3 3: :@3 @:@Aj 9ø¥32Ž“¸¾c]‹ 323“3,c”Žc”ƒ¾2ÉÙ™“™Ã™GqrxrGxAxrƒxrAwrrxxrxrwrxxw:@:wrA9ƒ:2AjA:j@k9@A@Ak883 8c8c9i2i“ib“b22:k-33Gk9:@A@:@Aƒ@:394@::@3A@:ø¥23“¾”¾cc‹c]2ƒ¾“”c½Ž“3ßÙ“™™qxGrƒxrxqxqrxrwrxqxqxqHwHqrGxrwrGr9„:C@@A@A@:@@jA@:29bc:82ch:@:3@2923@A:@3A@qAAG:k@kA@:A@:@::@ : @: @A9ø¦Ž”“”“c,Š<32c]c”¾“c””½””ÃÉÙ™“’r@ rqxrGxrxrxwrxrwrxHxrxqrxrwrrGrqxr:ƒ@:9:@d:AAkAA933b92A9:bcc@:ƒ@*A2“9:@A @A@A9:jGA@AjA::jA::@9:99pA::9:ø¦“¾Ž”¾‹c2c3c¾c¾”3½¾”¾“Ƀ™“™GA@xrqxxrqxxwrxxHGxxrxw„xU@xrxqxGrxq :@:@@::3A@9AFk@: 9 :@k@29b2@::A:29,A@@:3Akq9::@kAp:@@jA:@:@AA:A: :9:A9:ø¦Ž“¾ƒc¾‰+2Ž”cc¾c¾¾c¾iÙÉÄÉc™™:r@rqrMrx9:qHGrwxrqG@ƒrHqrAxxHxrwAqA::@@ƒ:D:9A@:3 @Ak@@AjAA2c8c2“ib92299:3: 3@GA9:A@qAA@A@A@A@@k@A@:939A9AA ø§”“޾”\‰-3cc½cc¾“]cbÃÃÉ2rqq @rxxGqr@AG:@qqrqrx9@AAwr…@ rw:@::@r@@:Aƒ:9: @:ƒ@*kG3A@A@k8cb2i“i22,c2 @:A@k@3AkAAkGjAjAjƒ: @Aq@:@3A@jA2ø§]“”½”3‰Wc“]d3”]”¾ccii@rxGqxx3xqrqHq@k@@3rGGqH rrxqxrwrxrxrxrwrxrG3@AjA@A@A@k: 3:@ 3:@k@:Abicc…2*33]83833A@A3AGkq@G@A@:@A@@ 39 3 AA9AjA@ :ø§]]”]‰%c3]c2¾¾”“¾i“hkA:xAxr@rNrw::G@;3 xAxrƒqrqrxGrGrqGxGrGrGwx:@A@k@qA:ƒ@A:A3@:9A@A@k@ihb2923™“c232cb23b3A3AjG:@A:j@k@:q::A9:A9A9A3@:@:A9÷¨9“¾”2ˆI2¾c2c¾”“]c™’iqGrqxAxx@:@::G3@q@kGr@:GGrMrqxqrwHqrxxqxrAr@@k@AqAjAk@A:9 „A:9@::@2cb98ci’“oc]i22c23GjG:@@k@@A:@A::@q :A@j39A::9 j ÷¨¾”]c‰ 3¾3”޾¾“Žb™ƒr2qxGxAwA@ 3:A3AAjAAwrwrxqrqNrqNrqqrwrxxqqAx@:@A@A„@CA:@39@j3 :93@:c82c2“i“i“cb“i,c32Ak@kA@kAj:Ak@@3A9:pA@A::@4:@ ÷¨”“”“]ˆ62]“¾¾š”™bi:@xrxrwrq 9A:3:@@qr@@qrxrxrGxqrwrr@GrHqxGƒAOwr@3:@k@A@A:j:@@;@@A@:9b9b3c8ch“’“˜Žc™c3,22 @@AAjA@A@:9A@AAj :: :@:A94:::9÷©޽”32‡4]¾c¾cc]™“iq:@@xqxr 3G:k@:F:@AAqAqrxGqGqrxrGrGqxrxqHƒqGk@:@@::@Aj@:@Aƒ: @„::9:\:9:“i“8i“i““822322 :@k@Gk@kA@A:qA@@::@A@3Ak9 :@A@Aö©“Ž“¾33†y32¾”¾cib™qHqrA@: q@k:@:AAqr@@rGrxrqrGrMrxqrGxxrxqrGqrGrx@A@@:@AkA:jA@A93A@@:A:2iG@A’“hi“h“j“cc2AGjAk9A@A@@q@A@@jA3:@k@k@ @:3 :@k@A3õ©]]”3\†Wc3“2¾c™“bH:@qr@A:q:@:G @:F:qG:@qrqGxxAAqxrwxA@xrw@A@qHqxqrAkA::@k@A@A@k@A3@@:99c8kAk@iƒ“0™“oc“83]@k@AAGA@k@A@Ak@kAA3:@A@A@::9 @3:@A99õª2”“]c… 2]cŽc”™cb@:ƒx9qq@q:G:33:A3@qr@:rGqxrq:@qGrGAA@kxxrxrrqxqrNqA@k@A@3Aj::3ƒ@ :3943c8“G@chi™’i™“cŽ“c AGk9::ƒ@AjA@:@Aq9A:9:9AjA@:AkA@A:@3: õª]”¾23…,3\c“”\9’iq:q::::G :@:@@A:A@:@9AqrGqHxrqrwrƒxqHwrxwNrqGrqx@@A@kAA@@9ƒ:A999@ 98“Akiib“™„“dƒ@(j@kA@@3@;jAAkAjAj@:G:9A3G@@:@kFA3G9AA3 3ôª“”“3]…]3޾38] x:Gq:9:9qr„:6A@j:A9AkGxxq wrNqxrqqrqxrMrqrGxrxqHqAk@@:9::3:@:@9:3Aƒ::94ib8“h“c8“o’ŽGj3A:A9:@A@A9kAp jG@A:@ k9:@:9A::@:Aj kq@39õ«¾”2…=3c\”“ŽÃ8q:xrx9:qr::@:39A3@q:AGkr@:qrqxrGxrNqHqxxrGrqGrxxqrƒ@ 3 3@A@3ƒ:Aƒ@ : 9AG23bccbiƒcA9 93:A@jAk@:9ƒ:9::@:::: A@:@@:9: @A9:ô«”¾“3…9“]”¾™™bG:9Hw::9:G:9 @:3::G:Gr@@kwHxrxNrqxqrwrqxrqHxxqGrqƒx @Ak:9@A@Ak„:C9@:A@::3:2992cbichic@A@:A9@A::G@::@A:9::k9::@j33A:::3:9::ó¬¾2… ”c“cc™™cq „:#9:A9r:@@:@@:qAqAAqGqqGqrwHqHqHxGqHƒqXrxqrGr@@A@@:@:@Aj@@: A@A9@A9:c\9’9h]i“c3]@:k@@::@ 9Aj:@:Aj@:A@@A:@A9A 9 Ak: 3:9 ::@ô¬32”c„9¾Žc™b:q:9:::9rG:q9A@@::9r@rxrGrqHqxrqqHqqrxqxHqxHxqrqƒ:O@A:AAk@:A@ :@k@A@49:A9“2cbi“ic“c]cG@Ak@: 9:AA A@AjA:@kAq9:Ak9kAq::3@:9:9 ô­3c„5]”¾chc8r9:9::@qq:G:@:@:@:AwrqrGqGrxxNqrGqGxrGrGqrƒx@:G9:@:39:@@: „@A:@: @:2]82i“i“˜2“ƒc b3@AAk9:ƒ9:@k@A@:@ƒA @:@GG@@A:@ ƒ@ 9: ô­”]c„9“2”cc2r:49 99r:G@:@:3:@:@AqrwHwrGkqrwrAqGrqrx:qAxqx:@@ƒA @@:@@A:@Aƒ34A::3@k 9@: 2cbbii“i3::AjGƒA 9 A:93@:@A:q9ƒ:qAqA@A@@3Aj 9 @@: õ®”3]ƒy3Ž32cc™2q:@x:9:9Hw :: :@@:@kqxGrqH@qGxrAGqAqrGq GkGqr@A @@jAk@::@@4@A9:@Aj@:@AqA:A@3™“i’““™]2b3@99kF:@jA::AA@::@::9@::Ak@kƒ@ :@A94@:A@õ®“3„1“]2]3™8rH@:G:::qr: :@: qGrrxGqqAkGqA@k xqxrw kƒ@ :AjA3A@A:@ƒ:@:@:ƒ@"A:@::@9@:k@“™ii“@8339:A@3 :@A@:Gƒ@:@:@k@A@A@Ap:@A@:k@A@k@9 @:@õ®”2„?“c332]:q@3:949: q:93@:A@AkGqNrx:@qG3A@q 9@r@A@3@AAjA:@A@A@@,93…: @AAkAjA3::ƒ@79322“8A:b8::9A::3:@@:3@kA::jA949:@AkAGk@k@A::@GAA3:@kõ¯”¾„y]c-“22r9 ::9@:::qq @qGqq@:@A3:@AA9:@@A@:A@:@A@k@::9:3 99@@:3@@Gq@kG@AkA:::k@93 :: 3k93@ ::3:F:@:AAGAGj@ApAAjA399:@k99:9::õ°“ŽƒTc””239r3:9:3::Aq @ @Ar@r:qr::39 9Aq@3:@;@k9@Aj:@A@:93 3334@Ak3:@A@AkA@Ak@@39 ƒ:3@@:92::@: :@@ƒ:@kA:@:9A@q@jAjA@A:@::9 ƒ:ƒA@A9:õ°Ž2ƒccc]”2™2 9:4:A@q3 kq:A@qH:@:3: 9 @kG:Aj@A A@A@@::99:439 93 ::@@:9::Aj@:Ac:93@@k9 3@@:9 2ƒ:@@: @:A:@kAGk9:@Aj:9„: 3AFk@Aj ÷°ƒZ]”]cbc29@ 3:9:9:kq@HqAqGqq@q 3::9:3::Gk:@@A@@:@j:3:3 33393 9 94::@@:AkAG2@A@AqAG:@AAjA::ƒA @A3 c3c@:@:@::@9::@k 99A@@ 3:ƒ: 3AAj:3÷°”,ƒ=““]cik 3: :9AGrqqAGq@;@q @9443:@A@k:@;3::9 9:99393:ƒ@*9 kGjGk@A@::G3::@AA@Aq@@,AjAAc]93::3@:9ƒ:@:9@:@:A@:@4@ @:@@3Gj:: ÷±”2„-Žc2i2G9 :9::q 9H@@kGrqrG::9:9 :3Ak9:@:Aj:9‡:/3 :34@:94:9AqA@A@qAk@:@qAq:9A933Ak@@AjAc:cƒ: 9:@ @@:AA@A@3:3@@A::A@3 A:3ø±3ƒy]“3]i29k3 349::GqqrqGqHq:@:94393@@:@A:@A@ :@9 9A9:3A@:9AAqA@k@A@AqAq q@A@::@AAGjA@Ak:@A@A3@:9@A9@A3 kGkA93 :@: :9@kAGkF:9@ø²2ƒ+3c2ci2@3:9 33 :k9ArGr@:q@4@:9449:9::9@:ƒ@A:  949A:kAGjA@AA@AkGkA@kq@AqAkAAjGk:@kA@k@GA@:@k@:@::3:@:Aj 3ƒ@:@@3:9@:A@kA@:3@ø²3ƒycŽc,ic :9393G:: qq @q 9:4994:@A@@::Ak@AjA@kA3G@GkA@@k@k@k@@qAkGAkGk@:@qAqAk9@Aq@Gk:99AA@33 3 A@9A@: A33@k :@:@: A Ak993::9:A@ø²2„]“3bchrƒ:y3: : k9GrqH9:94@499@:AjA:99G@:A@kG9A3@k:@Aq:GkAGkGAk @GjAFk9:@A@A@qGAAj@Ak@A94@k:: @A3@k:A@A9: :9A:@:Aq3 A@A@@::@9÷³3ƒV””\32iqq:9493: q :3GqA:9 9:9:9:;@@:A9:3A@kGkGkb@A@@:@kGk99:@kG@3@AkGk:G@k@kA@kAjAAƒ@/A:9 @@q@@AGA::9:9: Ak9:@k@kG:33Ak:@:A@@A@::9õ³]„:”2c2@A::9: 9339 qkGq:: :3:jA99A:@:3A@qAj@A@AjAqAq@GƒA@@qA9:qƒ@@:9A@@AGk@AqA@k@A:jA@3@kGkA@k:@j:9::9 39AG@:AAG@A@9 @@Ak@@A3k@@::õ¸"2Ž3bi: :943 3 q:q:Gq::949:9::@Aƒ:@:AAjAA:@ :9AGkGkGk@@jAjA@A9ƒAAjA@:@k@:@k@A@qAG@::@A@3Gq :Gk@:@A@@:@A@:3@kA99kjAkA:3:@::@:933ö¸2ccc@3ƒ:l933:G:GqqGq::9:::@::99AkAjAAj:9@3A@k@AkFAqAA@A::@:@@:@A@@AkAkG9:@kGA@kA9@A3A qAq9AGkG@A::3A:@:A@@AAAp…@AqG:@;@:ø¸y]”,i: 3:9::9 3Ak@qHqBq:@9 9::::@AA@AqA@@c@:@ q@AjAGkA@kq@k@G:AjA@:@k@j@AF::@:@Aj@@k@@A@93GqAAj33Aj3:@ qA99A9A@k@A@kG kG:@kGqq@k:ø¹)c2cb 9:9:9:9 3@Aq:Gq:@::: 93A@9A@k@Aq@„:>9 AkGAjAF:@A@A@:q@@Ak:@k@AAqAj:@@:A@AkA@AjA@AkA:@A@kG:AA 9:9ƒ:@:@:3 @:A@k @kGkGk@A9:÷¹”22@3:9::: @k@ qG„:\9:@:A@4@k@ApA@A9AA@@kApA@k3@AjA@qA@:@3@@A::qAq@A3:AjA@kG@@Aj:k:@::@k@A@@:@q::AA::G@A:q@3 @ƒ: q @:@G::GG3öº””233…:Y9: @A3qA:9 :9AA9::k9:GA@:@k@AjAkqA: AjA@ k@:@k@kAjA :@:@9@A:@A@A@k@Gkk@A@A@@A:@qAAjA@qkGƒ@k9:39A: :9kG:@A3::94::q÷ºU2Ž,3 :3::9:q:Gq::9AAq9:9::AjGk@:A@A@A@A@j9@ @:@3:A@A9A@:3A::93A@A:A@jA@A@k@Gkƒ@,k :@A@qGqAkGqAkA@@: k qA@:@:9:@:k 99 @A::@öº<23“cb :: 3:9::@:: 3:3A@:943:AqA:GkqAqk@jG :Ak93::@3A9ƒ:! @@9:AGkGk@jA:AjAjAA@AjA:@k@k@A@kƒ@A@:9Aj:39 9 9:A9ƒ: @@A@3:A@@ öº(329:::9 9 3:A:@qqG::99A9::9AA9:@:jAƒ9 A@Aq:Gk@: ƒ:A@kA9:9A::9@kGkA@AA9:ƒ@A9kG9 @k@@ @k@A3…:Gk9AG9 9A:3 :3 :@@A3@A33@kq3ö»2d“b 3::: 3::3@q:G:q39ƒ: A9AAp3:@:G„A5k@9:@AGAA99: jA@A::@A93A@A@GkGqk9@A@A::@:kAA@A:: @3@ƒ:GkAGk93GkG3::Aq9 39@ q@:Aƒ:AA33õ»ci2„:/@ 9 :G: :G:: :@9:@@AA9:@kFk@@G3 :3@kjGA3@A3:9ƒ@ Aj:A@kAjA@kA:@A39@@:: kGk@j:@:9ƒ:ƒ@!qA9AG::@:A@9AA: 9 3A q:3 9 jGAõ¼ Ž“23 :9@„:9:3k:9 9::@::@:9:Aƒ:D9A@k3A3A@A@k9 A@G:@::@@A@A@GA@A@@q A@k:@:A@@:FkGAA3@:9@@AAjAq k9: ƒ@A@3F:9 39q:3k A@:kõ¼2d8: 9:9:9:::3 9„:MGAqA@: kF9:@@: @A@::9:@@A3 @k@@kGAkAqAqkA9qkGkA3Aj::Ak k@:AAjAq@3@ : qAqAGkG9ƒ:Aƒ:@A:q 3A :G:3G3:A@õ¼3ib @ 99: : qG:3:9 :qAq9ƒ:'A9:Ak@:k@:@G:3 k9A@@k@:@:9 9:9:GjAA9AqAƒ@6A@@A@A:9@@k@AA9: @3:9:AqAq:qGj@@k@jG3@@:3:@3@ :9:÷¼.323b:29 3::9:93:G3:@:3@:A:9A9: :@A@A9@Ak@@ƒ: @Ak@3@:: @ƒ:C@@AqAqA9 3:9:A9:q@k9A@:@q@@::9A@:A@qAqAqGkGA@;@3::Gk 94@q 39 9: :÷½ycc2c :3 :3@:@:G::A: ::GAq :99:Aq@::@Ak:@:k@A@::@@::9AGkG@A@@:3 @:9@:AAAGjA@:A@A: :@ @A@ApAqA@qk@3Gk:G::3 A qGr@:3::3÷½9cŽkF: 9:@3@3 qq:@:@::99:Gj9: 9:9Ak:9:@:@A:Ap::9@@:Aƒ@CkAqA@9kA@A@3:A:@kFj@:@A:k@A2:@k9kqqAqA@kAA:3 Gk9@ 9kGdG:@kA@9 @ø¾ ,32@@3:: 9 ƒ:AGG9:@:A9:@9: A@:FAA@ƒ:Ap:A@:9AA@:3@A„@„: 9:@:@3 :GjƒA:9::@k@::A GGAqAAkq:9AqA:„@:9AGkG3 :qGq 33ø¾$9,2::@9::@:@9 9kG3:: 9AkG:3:AA9Ajƒ:BqA99@:A@:@A:@@e@3:AkAk :@::AGk 9:@::@Aq@::@: 9::9A@k::GkFAAGkGA2Aƒ:@ 9A@@k q 34 :ø¾b329294@@: @:@3:GkG::GkG9:9::39A9::@:@:k:@kApAk9A99:9A@k9:@A@@k9 93A9@:AjAA@:@: @::9:G:jA@kq„@kA@@:@33qA9k qA@A93 ø¿ 33“A ::†:D9 3G:qA@::@::@::@:@A9:AjA3:@@AkG@;kA A:@Aj:GAk@@:@9 : @A:@:@@kA@:@ƒ:%@::q@A@k@GkkA@qAk@: GqGAkGqA9:  3ø¿c322i9:: 39:9@Aq:9:9ƒ:2G:9: ::qAq9:@:G:9:@A@@k@@Aj@@:@A@kGqA:@:3@3Aj@Akƒ@ kAj::99AAƒ:GqA::9A:9 ::9A::@A39ƒ:-93ø¿cŽ23ƒ2A jƒ 2:9 k9ƒ:*qGq: :@9::FA::@:@9:A3@::9A@kAAk9A:@Ak@93ƒ: @:@@A@Aq:ƒ@A„:#Aq@q:GpAkG@9A@@@::3@::3 @A:3: øƒÁ232cA2 3 3: A…:9:@: ƒ:ƒ: 9AG3 AAp ƒ:59:@9:9::@:@AF39 9:9:9A@:@AA@::9:@qGkGkG@kAGkGA::A:3ƒ: :@:@ @jA9 9 3ø„Â83,2b  3 9::3:G9:@: :@:@::9Aq:@9AA:9A@:A:::99…:@A:9:::@A::9ƒ:9A@GkGkGAk@A@kGjA@@:9 9: 9A@3ƒ: A@3: 9 -9øƒÃ-2i:3 3@3 9GAƒ@:@3 q@;@::3:A::939AAj@@:9„: 9::9:9@:@::9ƒ:1 3A9::9:AAqA@qAGj@::@qAq k@3 9 :3::@@:@9 3394 ø„Å3“b@ @3: 3: ƒ: ƒ:@:@3:9:@ 39AGƒ:9:9A:@9@:::9ƒ: @ @:3 9:9ƒ: G@@k@k@Ajƒ:@:9@@A@@ 3 93:9::@ƒ: ::3 ø†Ç)2ich:3 @:9@33 9@::9AqA@@::@: q::9:9†:9:‡:9:9: 99::GGkGkG@AAk„:9A@AAƒ:9 3:4:9::9@3@:: øˆÆccbi22::@::3 @:@@A„:@Aqƒ: 9:9 9:9ƒ:@:9::9::9@@ƒ:9 …:*@:jGkqAq:?::FAA@k9:9::9:@::@@AA 9:,øˆÆ3bi3ƒ:#99::9 - :@:::@@@: 3A:3::99 39ƒ:9::9ƒ@:: 9 :: @:@:@AqA@@:@::GkAj@:: ƒ:@:::9@:: @@:9::ø‰Ç c,i:9:ƒ: 9:939::@@:@3AA::9:  9ƒ: 9::9@::@Aƒ:@3:@:@: @::q @:@:@:Aq@A@ƒ: 39 9Aƒ: @:93:::9 9øŠÉŽc929„: 9: 3 ::‡:ƒ@ :9- 9ƒ:9:::A@::@:: : :9Aq:qAG3:@ƒ:qAAj@:ƒ@@ 33:A@::9:@: 3 ø‹Écc“83:@@:9:334@9:@@3@ƒ:.G:@::3 ::99::99:@@:@ @::3:qAqA3::9q::@:@A@qƒ:3 33: A:@@:@: 39 9@4 2øŒÉ]22i:@::@::@:: 9A 9: ::93Gƒ: @:::?:@::ƒ@#:@::9:@:@:@ @AqA@9@::9@:Ak@:9:@ 3A3ƒ ::@@A@:@393AA3@9 ø¿Š”,32i’:::9:@4@:9 : : 3@@:: 3„:@9:@3ƒ:9GA3A@@::A@::@@3:@q:@::A:@:ƒ@ A9A9:9:@@k:3 ::@@3@:: øŽ¿cŒNc],c4@::: 9:3:G3 @:  9:9::@:@@ 9@:@@A:33::9A::@3@@::@: @:@@::3 j:@:@99ƒ: @Ak@:@Aƒ:ø‘¿cŒ:c,3,39:9:@:@::: 933:3@::@@:@::@ kqq@:@k@::9@A@k :ƒ@ : @: :9:::@„::@::3@;:33: 9 ø‘ÀŽ3Œc,c]c:::9:: ::@ƒ: 9:: @@:@::@:9 3@ƒ:@3ƒ@: k@:@3ƒ: :q:::3AA3†:ƒ@ ::3 A3@@: 3ø“Àc“3Ž!c3c]9:::@93:9:::A@@A: ::@ 3A…:1@@::@;@: @@A: @3 3 :: qqG::@GGk::9 9@3@ @3 9ø”Àc]Ž'c23c9::@:: :@93 :j:3AkG::@ 3@:9@39„:@3:@ƒ: qk:@:9:9@…:@Gk@:@3A3 3:3 99 ø“Àc”,Ž ]cc : ƒ:33@ƒ: 3@::@3kAA@:9:„:@9::9 9ƒ:9@:A :::3 9:@:@:@::@@A3 ƒ@ @@k@;@ø“Á3‘3cc@:@ƒ: :@: 9:9:9:@:@:9ƒ:@:::9ƒ:) @::9A99:9::9:9:::@:@:A3:@: 3 jAjA@A:@ø“Ác3‘2-c]3]@:@ :3@::9 :@:@ 3@„:9ƒ:9::@:::3:@4:†:9A3@@:3:9 @: 3 :9:A@AjA@:ø“ÁŽ” c2cc@ @@:: @„: ::@„:9@@9:@:@ ::9::9:3:9::9@:@:::9:: @: @3 3@:@A@kAk@AjAø“Ác2•3c]]2@::9:@:@:@9ƒ:<39:3: : :@:@@:@;9:@:@:@:@:@::99@@33@ @33 jG3@kAqA@@A@:@ø“ÂcŽc]c“]ƒc399 3@:@::@:@:@::@:@:@:@…:9 3A@ 9 39393:@ƒ:A@3 AA9AA:@GjApA:k@::ø’Â3”c]•cc3cƒ 33::9: 3 :@:@:@::@ƒ:@::@:@ƒ:$@:@:;@:::@A@3A@k@@3@:@:kGAAj@@A:@:ø’Â2cc—,3]c3]c 3 9::9::3:9ƒ:@@:@@::@:@:@:@:@:@ :9„:9 9 AAqƒ:@::@:@Aj@:@Ak@:@::ø‘Ãd2˜ c3ccc2cc3 33…:%9:@@:@:@:A@:@:@:@:@:@::9::: 9 :3@qƒ@3:@@:@:AA@A@k@@ƒ:9:øÃŽc,˜'233]]3]233 9 3 3 9 3A@:@:@:A:@;@3ƒ:ƒ!:@ @:9AAkA@A@A:9@A@jAkGA@A:9@::93øŽÃc2dc3™]cƒ22]233,2-23::9ƒ:@:9:393 AkAk :@@:@:9A@@kƒ@3:@A@@AjGk@j::@:@AAøŽÄ2c]šƒc3ƒcc]3232ccc2- @@; …93 kFA@3@:@::@ 9:@A@3:ƒAjA:@qA:@A@@:@::@øŽÄŽc32 ,c2c3]323]]c]3323]]‰A@9@AjA :@k@:@ƒ:9A@3:@k@AjAA@@:@:@AA:A@3øŽÄc3¥c2323233c,]322‰9::@@Aq@A@A@:: Ak9: :@Aƒ@ kAk@@:kA:p@@:øÅ”c2© cc223‰#:@:@;@@::@:@:9:@@:G@AkF:Ak@Gj@A@AjƒA3øÅ3c]3¨5dc33c]3\3c323]@AA:@k@::@:@: :9A@kGk@:Aj@:Ak@Ak@kƒ@kAAøÅ23c23©3„c,””„ ccAjA@:Ak@:@ƒ: :jA@k:@ApAAƒ@ Ak@GA@A@Ap::øŽÆ,c32©2]ccdcc,”c”c”c]2A9AjA@Akƒ:@9 Aj:@@A@:Aq@kAq@:93A@jA3@øÆcŽªc]3ƒcƒc3c]2Žc]AGjA@:9:ƒ@3::@ƒ:@kA@@:A@A@A jA@ øÆcc”©9c2]c3cd]c]3cc3c””A93:9@@:@:A@3@@:@@:@Ap :@k@qA@@@::jøÇc”]2¨ c3Ž]d†c]“Ž“Ž@A9:@AA@ƒ:3:ƒA:@ jAA3ƒ@ :@AjAj@kAAøÇ2”]¨]c]„cccccƒc3”@9ƒAjAjA@:9A@@:39:@:9:A:@@k@A::A@ø‘Èc]¨ 3cc”3c]c]cc]ƒc'c @:@A@A@@::9Aqk@A9A:AA@kA@;@:A@:@ø’Ècލ]c23c2-3cc3Žcc3cŽccƒ@::kA@3:@AqA@@A@AjA9@@kƒ@j:@ø“Èc2§c3]2]2c23]2cŽcc]32މ9@Ak@A@AjA@@A3øœÉ3c32¦ 2c]c39]3ƒcŽccƒc3“cˆ :@AqAq @k3 øžÉ23]¦c32c]c]c3cccŽcc]cc‰ @:@@k@kAø ÉcŽ23¦c3]23cc,ccŽcŽ„c]cc]c‹ :@A@@ø¡Êc,§]c]cc,cccc”Ž”cc]]cŠ:@:ø¤Êc¦ 22c3c]3c3ƒc ŽcciŽcc3“ŽŠ:@@ø¤Ê232]¥]33cc]c32]cccŽcŽ”Žc]“3‰@:ø¥Ëc,3¥2c\c9cc]ccd”cc]92”cø°Ëc¤2]c3c]c3ccŽ]]9cccŽc”23ø¯Ìc,¤c3]c]cc]2c9c]2cc]9c”ccø¯ÌcŽ¢23]2c]cŽ3ccŽ]cc2]c3…cŽcø¯Ì,c3ƒ23œ2c93cc“ccc]ic]cc]c]cŽ„cø¯Íc]3]bœ3]2]cdc32]3ccŽƒc Žcc2dc]ø¯Ícc¢33cŽc2]2]3“Ž””]“cŽcƒc]3ø®Íc¢c2cc3c3,cc”Žccc]3“Ž”c]3]3ø®Î,9]¡3]3ƒc ]ccc]“cd„cŽ“cŽ“cø®Îcc2¢c2c]c]cc]9cŽc“3ŽccŽccŽ“ø®Îc£,c]cc”3ccŽcc”cޓޓ޸­Ïc£]c”c”ƒd“Ž”cdcŽid“djjø­Ïcc¦dcdcc””cc”“Žƒø­Ï,c3«“cƒc ]cޓޓŽc”“ø­Ðc,­ dcŽj”c””ƒcø­Ðc3°c”ƒcŽ“Žcø­øøÄÑc2øéÑ]øêÒcøéÒc,Šc…]cøÔÒ]ccc“ŽøÓÓ3c]øæÕcøæíøÍøøÄ÷2øÄø,øÂøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/"-"øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøŽ,2,ø³ø†,22,3\22c]ø¯ø2,32232„32ø®ô2]2232]2322323„ 3282cø­ï,,23, 23,32232--229 ƒ3 3 3 3  ø¨é]22,3,232-33,23ƒ23 3:9:9 3 3 3 3 ø¥ê23-, ]32,322“Ž“329 33ƒ 3 2 39 9 3 94 ø£æ ccdcŽcƒ¾”c”“„¾!”2 3 9 39 9:9 3 3 :3 39 3: 9ø åc¾”¾¾”¾ƒc/“c”¾”¾”¾”¾”i3:933: :9 9 9 9 3 9 3 3  øâ>c22¾¾2c¾”Ľ””¾”¾“”½¾¾Ä”ci3: 9 3 9::39:: 93:9: 9 9 9 3 33 øœá]3”޾”…¾ ”]9]ccccŽc¾„c:933ƒ::9ƒ:9:: 9 9:33 3   3 ø™© “”½”¾“¾c†c¾”½¾”“Žcc”¾½cc,2c¾“¾“¾“¾¾š¾Ä“¾¾ƒc33”c]c¾23”b: 9: 99:3 ƒ 3 33 933334„3 3 ø—©,””„¾””†”„¾“””cƒ¾”cc ”c””“ŽŽÄ„¾%c”c¾½¾½¾¾c¾””½”bqG , 9 @q3:@@ƒ:9 ƒ: 9: 39 93 3 3ƒ ø”ª“¸¾Ä¾“„c¾“”¾”i¾”ēޓ”¾Ä¾¾“”cM]23”½Ž“”c“¾Ä¾Äc¾”¾¾””¾”“¾¾½”¾¾™:A2  3 39:@:3::9 9 99 9 9: 39 33 ø“ª¾”“¾2ƒc¾”‰¾“Ž”¸c„¾š¾“Ž‹ ,2223c323„¾Ž”¾Äc¾”½ƒ¾½”ƒ¾ ”¾¾“”“@qG:9ƒ: ::Ak: 9 3 @„:9 ƒ:93: 949 3 9 393ø’ªc¾2]ƒcƒ¾”½”¾Ä¾Ä¾¾”““]9¾Ä¾¾””‹c3c]3]“„¾/“¾”Ľ¾¾”½””““Ž“”““””“@:A::9::G39 3@:9 3G::@„:9: 9:9 33 3  9 øª]¾”cccŽÄ¾Ä¾“”“¾¾š“Ž”]9ƒ¾”½”“Š 2ccc]9]9¾¾Äƒ¾#”¾¾”“”c3Žc32,3cc”¾”Ùk:: :9: ::ƒ "Gk :@:39:9:9: :33 9:99 3 23  ø«¾c“Žcƒ¾”¾¾””Ä”\23ƒ¾Ä“”¾‹Žcc”c¾c“”¾”¾”““”””¾”½c¾¾ƒ”8¾“¾¾8cGq:A:@ :9:: 9:jA@@:@:3:::9::9: 3 3 3 39 3ø¬3“”¾Ä¾Ä¾½¾”¾“”33ƒ ޾½Ä¾¾cމ62,2c3¾¾c¾c޾¾“¾“¾9d“ޓޔ¾”¾¾”¾¾“¾¾¾”ÃGA2@k9 9 :@3ƒ:"9@:3AkG9:3:9:: :9 9:39 33 9 3ø«2¾”…¾”ľĎ† cc¾”¾¾Ä“ކc3]32,c]cc,¾”“cƒ¾ ”¾cc”2”½”ƒ¾ þ¾”¾”¾¾™9k„: GA3 9 @@GAkAp 9::9 : :9::9 ƒ: ::9:399 øŽ«3½ƒ¾Ä”Äiކ cc¾¾Ä”“އ c23cc]c””„¾'Ä”¾“¾”¾¾””¾”““”Ž“”“ÉqGqGrwr@3:@:@„:@A@ A:9A@A9:  ƒ:@ƒ: 9 9 33 3 øŒ« “¾”¾”¾¾“Ž“ƒ“ƒ ”ŽÄ¾¾”“¾Ž‰]c32ƒc3”¾“¾”Ä„¾”¾½”„¾2”½]¾¾¾”¾”¾¾™qrAqGrw 99A::ƒ@:@ƒ: @::9:AA@933@:9:9:99:9 943 3øŒª 3¾3¾Ä½¾¾9]ƒ””“¾¾Ä¾¾iŽi†c,3¾c”]c-c¾¾“޾½”¾”¾Ä¾”ƒ¾)ľ”c]”“޾ľ“¾”½™rGqG:: 3:9 9@Aj:AjA3@jA„@kF:3 3: 39 @::@: :: 9 3 øŠª \”\ľ”¾ccƒŽ“”Ž”¾š¾”¾”އ&c]]cc]“c”c“¾¾Ä”“¾”““¾“¾¾“”¾½”½”]””Ä”ƒ¾”¾¾qrAq::@3@AA9A@:3ƒ:9A:A@:@:@3:@ : 3„: ::9:3 9 3 ø‰ª3“]¾¾Äcƒ3c“”ˆ¾Ô“…c]2c3ccŽccŽÄƒ¾X”¾¾”¾”¾¾2¾Ä”“¾”¾b”¾¾Ä“¾¾“ÉH@::3 3 3 3 9:A@AA9@jAkAq@A@A::A:33 :@:9: 9 9 9 33øˆ«”š¾¾cc32]“”Ž“¾”ľľÄc”‡icc3cccc3cd¾¾cc¾¾“”½¾¾“¾”¾“Ž”¾“¾c]”“¾¾,”¾ÉrqGAq4:39A39:9::9:@2 :A@@::@A@::@:3 k9 :@::9: 3 3  ø‰«¾¾c2”½”¾¾“¾Ž“¾¾“¾¾c‰]ƒc dc]ccc¾c“”„¾””¾”ƒ¾”c¾”¾“”¾¾™23”¾™w 3GA93†:. :: 9A@@3 ::@::9::@9A@@A9 3Gk9 9:::9 :2:3øˆ«cc¾ÄŽ“¾”¾“¾”“¾¾Ä”c‰32]ccc]cc”d“”c¾¾”¾”ƒ¾ľ½š¾¾“޾¾”¾”¾™“™ƒ2rr@::q 3::@A@9:9 93A@kAƒ:# jA9:93 k@k:@@3@ A:AA93 :3: :9 9 ø‡« cc”Ž“”Žƒ¾”„¾”¾ˆ]2c223Žc]cc”3“ƒ¾ ”“™™¾Ã™Ã¾Äƒ¾-iŸi¾½”½¾™ÉÉÃÙÃGq:: 99:9:9A::9A@@A@A@993„:9:9: :@::@jk: :: 9: :3 3ø‡«3¾“„” ¾”½”½¾”ľ2‰'c2]c]c]9c3cc]¾”¾”¾¾“¾™Ã™™Ã™É¾¾Ä”ÉÃÃÉ™ƒ¾F™ÉÃÉÉŸÃxr@k9 @A@:9@A@::@k@j::@AA9:@A@:9:@9AA9:3 9 39 3 933 ø†¬”޽”½ƒ¾ľ”“¾¾2Š cc323]2,2c¾“””½”¾¾™™Ãƒ™-ٟÔÄÉÊÉ™™ÃÉÉŸÉßÚÉÉrrxqr@3@@ @A:9:3Ak@:9A@„: @::9::9…: 9 9 :3@ :9:  39 ø†¬½”¾””¾“¾”“Ž”¾Œ cŽ23c]“””Žcƒ¾“Ž„™Ä™ÃÉßÃÉÃÉ“™ÃŸ™ÉÃÙğÃccwHqHq ˆ: 9:@A:9:@A@:ƒ@Aƒ@A@4@3A@@A@33393 3A9:3: 3 ø…­””…¾“”“‹ 3c]c3¾”cƒ¾!“c™8Ž“™™Ã™“™™ÃÙÙÃÃÉ9bcixx3brxr†xAqxrwr:@A@@:99:@:: 9A3::9@@:A@:AA@k:@ @3AjA@A93 399:3:99:9  ø„­Ž“ƒ¾𾓔”·‹]2]cc]”½¾Ä”¾¾ccÙ“™“ƒ™ÃÃɃ™„x!rxrxxrwrxrNqxqr 3rNq@r9:@AjA9:@:@‡:+@;@;::@Aj@::@Aj:@@Aj@A 93 94A@:33 : 3-ø„® ¾¾”¾½c¾“ŒƒcŽ“c ”“Ž“”32Ù“™˜Ã™ÃÉ™ƒqrq:99rwr9:rqrx@xrwxqxrqN:ƒ@:A3@A:@A@A9A@@A:@A@j@@k@A@:@A93@:@AAjA9 9:;2A:3: 3 øƒ­ “”“¾Ä¾cŽcŒw3]c]“cŽcc-¾”¾c2ÄÉ™“™“™ÃGAqGrGrGAxrrMrxArxrwHwrrxxHrxqNrqA@Aj3A@:AAjA@::Aj@@A9AA@A:@k:Aj 3 3:jA@A@@A33@:3 39 3 3 3øƒ­ ,Ž”¾”¾“”‹x3\3cc”¾cc¾“¾c3ÙÙ“™™rGqqxrqqrGxrxqxrqxxrxrqrNxrwxqNrwrq9@A::@:Aj@A@:@99:@;j::@j@A::@@A@3 @A:9:3@k:A2@ 99 3 33øƒ®“¾½¾dc‹!2c]cc”¾c¾”¾¾™Ã™É™™“˜rxqGrxxrGxq„xrNxrxwxxrwrxrxrxrxrGxƒ:9::FAAjAkA::4@A@@AAj:@ƒ: @:@k@@:A99:AA@@;@9:3 3@3 3 3 øƒ­ƒ””¾“‹ 3\3“c¾c¾“c¾”ƒ¾ ™ÃŸÃ™“™HqrrrƒxqrxrxrxxqxxrxrxxHxxwrxx 3qr@@ƒ:9@@k@k@AFk9A“h“@k@k@A:9:@:@k@A@@k@:A@@q:kA@AA:3 33øƒ®·”“”¾”‹L]c3””¾c¾]3”¾“ßÉÃÉÙ“qqAxxrwrxx:G@@rwrxrxrwrGqGqqHxqHqqrqxH@:9:Aj@:A@AjA:@b„i@A@k:@A 9:@AAjA@:@AAjA@ƒ:k@3 93: 3 3ø®”½””¾2Šy2c,c¾c”c“™É™ÃŸ32™@HqxqrMrxx AqAqxrMrwHwHqxxrxrqxrwxxHxqA@@A@A@A9i“@A@@:@c’i, jA:@:@3 @:3 @::@@k@A@A@943:: ::9 3 øƒ®“”¾¾2]‰y32]”c””¾¾ci“ŸÃ™rqAwA@qxxHxrqA@AqqAqHxrxrxrqxrrxqxrMrrHwr@r@:@A:@k: @““9A@A3i“b 39:9@A@3Aj:@Aj::@A@@k@:j:A@9 93 933@ 3 3ø®3¾“¾¾ cˆR2]3”“޾c¾”¾¾“h“qrGqqr::xrxqrw:@Aj@@rqxrwrwr@rGxGxrGrrqwrrx@r@Aj@@:@::@:i“@A@9 @Aƒ:@:Aƒ@"AAjA:@k@kA@@:AG@AA9:3 9:::@3 3ø®23¾”¾2]‡y]322¾c¾”¾“”™““GqrG3Grx@ @::AA@qA@AqHxrxxr9Axq 933xMr 3rA@A:3@A@9::@@cbAk@Ak@A@@::@Aj:A:A@:9:AkA@AjAjAj:A :9:@9 3A ø®23¾”“]‡2”,””c¾¾“cÃiÃhx:@ xrGqxƒ:c9G@q:G:rGkqwHqxrrwrxrxrxxrxrxrxqrx3@k@A@@:A@A@A@c9@A@Aj@:::@A@A@:9A@A9A@A@k@AAjA@::9AkA3@:: 33 ø¯2”¾”2‡33cc¾¾c¾””Žh™™rw:xxrwAx:„@8A3:@@AqGqxrqHwrNrxxrwrxGxrwrwrxqH@3AAjA:k@AjAj:@k@k@::@„:&jAk@:3::9:@k@@AjAjA@9::@@kG3A3A9 3 3 ø¯޾”c,†3c2cc”c¾“”™c“qrGxrqxr@q„: :A@@k@rqrƒxrwrxqxxHxrqxrxHxrGqx@@::Ak@Aƒ@A@k@ciƒ@ :9:@@::@A:@:9ƒ:@@:A9 3 @A9:A@ q A3333ø¯“”“cd†P\3]¾c¾Ž”ÃÙb@@rxrwHqx::G:G:@:q@@k:@r xrxrxGrxrxHwxrqxxHwxqxArqA:@:? 33@k:3AkA@@„cA@…:$k@ ::@@AA@jA@Aj@@A::9:9A393  9 3 ø¯޽”c3†Wc]9½c¾iÉ™“x:@rGqrxrq::@:@@3Gq:qH@AqxrxrxrwrxMrxr9@xrxqxG:@@x@A@3@:A@ @A@:@A9::chbc23A…@$A@A2::@AjAk@@AjGAj@:9:A::3 393 ø¯2]¾¾c2…Bc]c2cc¾cŽichrw:xrqG: G@:@:@:@k@Gkr@rxxqNqxGrwrrwrxrrNqxrGqkrrx :@ƒ:<@::jAA39A::hc“i]8 @Ak@A3@9:A9 kAGAk@A@A@49 @4A3:9:9:q93ø¯3”¾”¾3…]9ƒ];c¾ÉÉchrHxqxGq:@:q:A@@:q::Aq@rqrwrxqxrGrGxrxqAxqxrGxkxHwxr@ƒ:9ƒ::@ k@:@:9ci’i“b3@@A@k@4@@::@A@393 93:93 : 3@:: 9@:: 9ø°2¾“¾2…]2…c/™Ãih::@ArxG::@q:A@:AAqr@A@rMrxHxrNjAwrxq:@@xxrƒxrxrxrwrƒ@:@A@3:@Aƒ@3A“22ib3 :k@A@A@3 3:@k::A:@:@:3@::93 3AA ::9 ø°2޾”3…32c]”c¾cÃo“r@r@@:9: 3:@::Gj3GkMr@@:Axrwrx9::@r@:@:xrƒxrxrwHqxxrx@:A9A@A3:Gƒ: A@@:c“bc8::@@j:3@:@ 9::9ApAA@3ƒ@:: :99A3Gk393: ø°”“”]\„“]cc”¾”]ibxr@qx@ƒ:q:@ƒ:3@A@rqA9:kxqxrMrxxrxrxxrNrxqNqxHxxqHwrx:@:@@j@@ j:bhƒ:1@bi“8c jAA@ @:@:::9@:@@:@A@;:@:@::GkkF @9 :3ø°¾“cc…]c]“ƒ¾uhcxqxrxA@:: q@:@@A3@kq@A9AGrxGx3xrwrwxrNqxqxrxrwrwqrxrxG :@: ::3iicc9:9i“ihch3A@k:33 ::9 A@:A@k@@A@3:9:9AG3AA3„:ø±”¾]c„=]”cc”¾™™ib@4xxrG:q::A@:Aq:G9:@:Akwx rxxGxrxHxwrxrxHwrxxrGxr„x@k@@kAj:Ahchic::chi’ci2cbAb:9:: :@A@AjAA@;j@A9:@@k9 :9 9:@ø±“”]c„ ”½c¾™Ãhc9ƒ@U9:9 :@G:3@:A@Aq:Gr@A@rrwxrxrxrxwrxxGrwrxrMqGrxrwr::@A:@@A@3 chchi@9cib9bib29b :9 :3@„:k@Aq@:@A@k@::A9@ :@9A3:@ø±,”¾c]ƒ¾¾”¾”“™ir:A@Aƒ: ƒ:!@::@:3G@AqqA@xqxrqxqGxqrxrHxqrxrwƒr)xqxrN@:@:@@3 3@:hc:9@Ahi“29“icbcb3 99 ƒ@:@@Ak@A@k3 @A9:9:@@,@4A@:Aø³“ccƒy2¾¾”¾“™“’x9@A:9: 9:9@@@:@@:@kGr@xrxGrNrxrxrMrwrqrxwHxxGxqHxqx:@A@AjA@:@:c @3cc3bibibchcb9h9239A :-@Aj @A@jA@A@k@::::9:: 9Aq@9ø²,”¾]ƒ"”]c¾”Ù::@A9:qrr::@:k@A:@@Axrƒx]rwrGqxrxrxGrwNrxrGrqxr99:Aj@A@AkAA@9cbih89b3c2ihc2ii\:9A@:@AjA@k@@AAk@A@@A@@:@:9:9A:: :ø²“Žccƒ2]9c9]2c”””23]c]c3c””A3AjGkG3::Gk@@:@A@A@A3Gk kAkGA@k@k@Aø–À”]2¤>cc,cŽc2c¸”23cc3\32Ž“c@AA@kG @:@qAAkGk@k@@3G3:@GjAq::@@::ø–Àcc3¥33c”ƒc4c3””¾”2]3¾”¾2ŽŽqAqAq :jAAqGjGk@@:@::@AkGkGApA:@:ø–Á2Ž“3¥3…c6]d\3\”233cc“2cGk@A3GA@@kGAkG@A:@@A@:@@G:@kAq:@: ø•Á,d22¦]c]c,„c4]9]”c”””cc”qGkGj:@k@@3AqAjA@A@:@@AkAj@AGk@:99 ø”ÁcŽ2¦=c]Ž“”“d”cŽ“”¾”@:@AA9GA@39AG@@;jA:@k@@AA@jA::@9ø”Á”c3¦>3d2c“cŽ””Ž“3“Ž“]”””½”cA:@@kA:jA9:@:k@@A9::@kAjAqAk@A:@:3ø“Ác”“¦@23c2ŽŽ“c””“cŽ2”cc””Ž”A3@A@q@A@A:9::@Aj:@AApAqAqAGj:@::9:@ø‘”¾]]¤,c]cŽ“””””Ž„c+]“¾“Ž“¾ @kAk@A@k :@:39A:jGA@AqApAA::@::A ø‘Â,”“3¥:3c3dd””j]cŽ“ŽŽ“¾”“33ApGAj @:AAq: 9:@A9AkAq@@::Fqƒ@A9ø’“3]¦$ccd2”c“3“Ž“d“Ž”“Žc”·”:AFAkA@:kƒ@AA:A@@kFkA@A:Aj:AqA@:3ø‘ÂcŽ3\§Žƒc3“Žƒc2””“””cc””@@kAF39:@@:@qkGjAj@AAqApAkFkA@AAq9 ø’“33§<2c]ccŽ“Žc,3”Ž“Ž3“Ž”“k@Ak9 @3A@kA@Ak@@AAj9AGkAGk@G@k@3 ø“ÃŽ“2§.23ccc]3“”c33“ŽiŽ“]c“Ž“ŽAq@A9:@::3A@:9AAkGk@ƒ: GjAqAqA@A9Aø“ÃŽ32¦c,ƒc83cŽ\i ”“”ŽccޓޓkAq::@:G: @:@:@:@:qAq:A@kGAq@kG@3A:ø’Ã,“”]¦3c]”]c]2 dc,”””ƒc ”AqA@:@AqA2:@„:@GA@AGjGAjA@AkAk @:ø’ÃŽ23¦;cdc]2cc33\cdc3,””Žc]“@@:A@qA 9@:@@:@Aj 3@kAkFAk@q@G93ø”Ãc”23¦;cc]c9c]cc3”“32””“c”Ž“AAkFk@k :AA:A3@qA3AF@qAqA@A@:@Aø”Ä3\¦$]ccŽ“]c]cc]cŽ”“Ž”ŽiŽcŽGkGA@A@::ƒqAj:@A@@k@AAqAq@k@kA@ø”Ä”3¦;c3c3cŽc2]c”“Ž”““Ž“Žc@k@9::@:9AGkAA @k@A:@k@AjAA@:AjAø”Å32¥:cc2c“32”””“Ž“ŽŽ“jcc@Ak@:@AjAGj @:@k@3AqAqAFkA@@Gø•ÄŽ23¥83“]33]”Žc33””””“”Ž“Žcc”AjAk3Ak@GqA jAkG@A3G@k@AkGj ø—Ä3\¤123”c3“”3”””ޓޓޓcŽ”A@:@AkGkG@A@kGj 3„9:ø™Å“33¤d]23“]“3c]c“”””“Ž“Žd“Žc“ƒ :G@k@@q@k@k 3ø¢Åc32¤c93c]c3]cޓޓ””3“”“Ž“”Ž… :A@A@AkFø¤ÅŽ2¥cd3c]ƒc3“ŽiŽ”“Ž“Ž23”Ž]“†9::@k@ø¦Æ“33¤2Ž3“Ž“]ccŽc“Ž”cŽ“”“c]†„:ø¨ÅŽ2¥c]cc“ccŽc“Ž“ccŽccŽccŽ””†9 9ø©Æc32£c]92Žc]Žƒc]c]3ccc””“cŽ”‡ øªÆ33¢23]c]92“c]3“Žcj]3”ƒcŽ”“Ž“ø²Æc23¢2]cc]c]3c]“3”2dc3“Ž”“Ž”“d“ø²ÆŽ2¢cc]2c”]cŽc23“””c”“Ž]8ŽdŽø²Ç32Ÿ,3…cŽccc,Ž”“Ž“ccޓޓŽc“ccø²Æc“3]]ž 2”3cŽ3ƒc3”“”””cc]3“”“dc”ccø±Ç32Ÿ"3c3ccc93cޓޓޔ]””””Žø±Çc33 !c]d3]3c,Ž“d””c3“ޓޓ”””¾“ø±Ç3\¡‡c]3“Ž“c]iŽc”cŽ””Ž“”Ž“”“Žø±È“3¢c]c]]c2cc3”c”“””“Ž“¾Ž“¸”ø±È3¤,9cŽj]“””3”“ޓ޾“Ž“”Ž“”“”ø±Èc3¤””“ޓޔ”“Ž”“”cŽ“¸“¾¾Ž“ø±È3«“Ž“ŽcŽc]c””cŽ“””¾ø±Èc2¯”cc“ޓޓޔ“Ž”¾ccø±É3±Ž“”Ž“””“ޓޓø±É2cøñÉc3øñÉc\øñÉc33øðÉc2‹23…cøÜÊ,cccŽ“øÚÊ33øïÌc]™øÔøøÄøøÄô,øÇøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄ ¥Ø-# ¤PÉ# ¤P2# §P /$ §\R Ë$ §\R -$ ùgÉ$ ùg2$ üg /% üsR~Ë% üsR~-% NñÉ% Nñ2% Qñ /& QýPÛË& QýPÛ-& ¢ØUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/#-#øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄÒc”¾¾øâÆc¾”¾½”“cc„¾cc˜””cc¾“¾”cƒø¸´ 2”“¾¾”½Ž“†”¾¾Ä¾”“¾]c޾ľľ“c–ƒc ”2,3“¾cc¾¾2…ø¸´]¾¾”¾¾“Ž“”32Ž“”“”¾¾š¾“”¾cc¾Äƒ¾“””•c””¾¾ƒ”…”¾„”ø¸µ ”½¾“¾2cƒ¾”½”…¾”¾“””c„¾š¾““¾¾Ž“”„¾“¾]”“”¾“””,3ccøµµƒ¾33c¾¾Ä¾”¾”½¾Ä¾Ä“޾]c¾¾Ä¾“¾”“cƒc””¾½š¾”“޾“¾”¾“”¾“”ø¶µ!”¾Ä2c]¾¾Ä¾¾½”½””¾¾“”½”]c]ľ”“¾” c“]cd”½”„¾iŽ“3c]3]3]]3]323bøµµ½¾2Ž“¾Ä¾¾”¾š¾””¾ƒc ]“¾¾”Ä””#2¾¾Ä”Ž”½”¾”¾9”¾¾“”““¾¾½i”“22ø°·3ƒ¾š¾Ä„¾½”ccƒ Ž“d¾Ä¾Ä¾“Ž“‘(]3¾¾Ä¾¾“¾Ž“”¾”¾¾”¾”Ž”¾”¾¾”i  ,ø®¶c¾š¾Äƒ¾““”“Ž… cŽ“¾”¾¾”Ž’3“3“””“3”c]¾½”‡c]¾¾c@j 33 2,ø­¶“ƒ¾”¾Ä¾”ޓޓ”ƒ”¾¾Ä¾“¾““””3]“ޓޓcc33c”“cƒ¾ƒ“¾”¾b:  -2 ø®µ”¾¾Äƒ¾“”””·””·¾Ä¾”¾“””2”½”„¾ ”“ޔ޽”“””cƒ¾””¾¾Ä”“ 3 3 3 3 2ø­µ ”¾c¾”½Äccƒ“”¾””„¾ľ¾“Ž’ c””¾¾“”“о“޾¾Ä2”¾“””“A33 9 3 3 3 ø¨µ“¾c¾¾Äcƒcc”ƒ¾ ľĔľ“cŽ:,“cc¾”¾”¾“¾¾c”“¾¾“¾”¾¾“”33½c¾¾“¾Ž“”“: 2  3 3 3  ø¥µ”“c¾¾c„c¾”¾“‡¾c””Ž!””c32”½”½¾¾”¾¾“¸”“¾”ľ“Ž“”“d¾¾”ƒ¾”““3 3499:4993:39933ø¢µ ·”¾¾cd”Ž”ƒ¾”¾”¾¾Ä¾Äƒc2ƒ]=cŽ”¾¾]”¾¾“¾””½””½¾“ޓޓ”¾Ä“”¾Ä¾”q9::93 3934 3 3  øžµ ””¾c½”½”ƒ¾ ½”½”¾¾š]cŒI,”c½Ž”“c“¾cc“¾“¾”¾“Ž””“c¾“Ž”“¾¾™i]c™r9 3 3 3:9 9 339 9 3 93  øœ´3””“”””¾¾”ƒ¾”¾Ã¾c2¾¾c”“”¾3cŽc¾”¾”¾“ƒ¾(”¾“¸”Ž™”””¾8iŒicc™q@A3@93 3:3:93 ƒ: 9::9:9 ø™µ¾]”¾¾”“¾Ä¾Ä¾”½¾¾32c]9]cc“ޓ޾¾““™“ƒ™72¾”¾“”98c”½Ž¾ÄcÉÉ™“™qA@rq 33 94 9 ::9: 33 39 33 ø˜µ“¾“޽”…¾“”“¾”2]2cc]c]cŽ””¾™¾¾i’™Ãƒ™7ɾ”¾™Ã“™™”¾Ä“ÉÃÉÉ™™k@A9 3 3 9:333 3: 9:9 333 9 9ø—µ”¾”“¾”¾¾Ä¾¾”¾”¾¾]3ƒc]c]ƒc ¾¾”¾cŽih߃“™“™™ÉÃÉÉi“’“ÉÉÄ™(“ÉÉqA9@A93 3:: 39:994 33 : 3::ø•¶“Ž“”½ƒ¾Ä“”“Ž]2]2ccŽc]c]cc¾½”i“’““™“i™h„™ “ÉÉch“™““É„™Ù“2GqGk:3Gk@@qA9„:9 3:: 3 33 3ƒ 3 3ø“· “޾¾”ľ“”” 2”2ccc¾c„c™ih“i™i™“hÙ™“x™ÃqGA„x2GqqrxrxxkGkqG: :9 @::33:9::3 93 93339 93 9 ø‘·]ƒ¾ľ“޾”22c3¾c…¾icƒ™“2ƒ™G’™™Ã™™qxrwrxrqqrxrxrxqxxrxxrxq:3 9: ,: :3: 9 99:3 :993 93 93 : :99ø·¾”ă¾“Ž“Ž33Ž3„¾?Ä”¾¾c-™Ã™““™“™™:A@AqrqqHqqHxrqHqGqrGA@xqGqGrqGq::A@3 @@ 3 ƒ:943:99: :9 9: : ø¸¾½¾š¾”ŽD23c22c¾¾““32ÃÉ“h™“™˜k@@kAjGqAxxqGqqGAxxqGqG:xrxqHqrGk 9: 9A:9:@Aƒ:9 3:9 393 9 3 39 3 øŽ¸¾šƒ¾“ŽŽ 2]]3Ž”2cƒ¾3c™Éc2™“’xrArqGqHqxrxxqHqr„xqHqƒxrxqGrqG3:9 39 9„@ 3 3 @::93:93 :3 9 : 3 9 ø·“”½¾”¾“2Œ2329c¾c3¾¾”ľ™“ƒ™=“™xrGqxxrGqrxxrxrqGxrxrxrqxrxrxxrx@r 9@:9AAq@AqAk::9:9::9@ƒ: 93 9 3 ::9 ,9 øŒ·Ž“”„¾ ŒC32]cc]¾”¾¾Ä¾¾É“™É““hrGqGrxrwrxrwHxqNrxrxqxrxxArxqxrxrxrx: ::9A@ƒ3 9ƒ:::3 :9: 39 339 3:ƒ 3 ø‹·“¾Ž“”¾Ä,‹ 2]ccŽc”““”i„™FÉÃÉ“iqGArxqrNrx@:qAqqrwrGqGxqrwrGGAxqxqxG939::@::@:9 93 249 …: 93 : 939 3ø‹·Ž“¾¾“¾cŒg2cŽ“””¾i’™Ã™Ã@qG@qkxwrxqx9@@:qAGrxHxqGqAxxH@qqkGrxN:q9@A:@@Aq@kGkA9AkG:: 3:99 93: 93 9:3: 9ø‹·,c¾¾”2Š 23,dc”c¸½””“™“:xqGAq:@AxxrxHx:@ƒ:H@kxxrwrx4GkGAqAqGAqGqkGr9;@:@:@@A@AG:99A9:: 9 949::9: :9 399 9 ø‰·¾¾Ä¾ccŠl,¾”cci¾”¾Ã™“GxrxqrAAkxqGqGq::@AG:@rrxqxrxGqGrxrxxqrxrxrxqG::@:A:@:A@:@:@A:@:: 93 3 9: @ :: : 3 9: 3 3øˆ·,”ƒ¾cŽŠc”c¾“cÉ™hiqAq@AGkq@ „:>@:@k@@rGqxHxwrGqqrxwr@GqrwrxqGq kAA9AjA2A,AkAj@AkFA9:: 9 9:Aƒ39:39 9 93 3øˆ¸”ľ2cˆo232”d¾”cÉÙ“rG9 qAqG 39::9A@@A@:rqxxrwrx@rGqGrxAqrGqGrx@rG3A@:9:@A@q@G@:@Ak9:949: 39:39:934 : 9:3 ø‡·””½”“]3‡3233”“””iicwr:„xAqr::„@:k@qrGxrxrxqƒrqrqrGqHqGqHr3993::@ƒ:(@: :kAk3@: 3 9 94 ::GkA::39 q: 3 ø†·”””3‡¾cc¾cc¾”Óh“rƒxqqrqGrq9:@9:A:q@@:GAqxrwHqƒxrwN…x rxrxrxxqAƒ:0::A@q:@k@9A9A@A:@:@@3G:q:G9::3: : :33 ø…·“¾“Ž“3‡s32¾cc¾”cÃÉ“bA9rGqHqHq@@ A:9:AGq:A:AqkGqxrxrxrwNrxrwrxGxqxrxr@q@:9::?: @ 3@A@@:@A@:@: 3 :9::::9 9:39:9 9 ø…·Ž“¸“Ž2…J,3c2”c”c“Éi“x9xrq:3::3:@:@Aj q@A@AqGrxrxwHxxrxrxxrxGrxrwrx@Aq:@:39:: 3ƒ:::@@„: :jA@:93 A@k@:: A@3 :9: 93 -ø„¸c¾¾“-…Cc\3]”cc¾™ibixrrxqH93:@@:@:9k::@k@xrxrwHxrwrxrxwr:xxrxx3:GxAAƒ:09:@Ak@@39Ak:9:9AAjA:::kA:: A3:: :3:: 3ø„·,¾Ä”¾2…[23c]c”d“hcqGqrrqGq33G::@ :q:GG@@3rwrxxrwxGrxwrxxqGqrxqGAxqrx::@:: A@k@@9: ::@:99 Aƒ@:9: 233 9:9 9::ƒ ø„¸ƒ¾„v2]c3c“ccÉicx9:GqGrq 9 3kA@:@q:@k@;3GxrNqxxrqrGxrxH9rrGxr@rxrxxr:9:9:@AjA@AAjAA@k:@A@A::@9:Ak:9 99:39:9AA@::3 @33ø…·,¾¾2„93]3\”޾cŽb“xr9rGk9::3@@:@:@k@:GGq 3xrxqxrxAGqrqxr@rxxr„xqxrxwƒ: A@A::@Aj@:AjAƒ:#@k:9:@:@::9: :3939kG:9:3:: 39 øƒ¸””ƒcƒ+2c3c“¾¾c“ihx9rxAq9:9:r@@@::A3 q:Arqrxwrxƒ 39rx xqxxrwxrwrxHxwrx::@:ƒ@ :@@::3 9::@ƒ: @:@@:9:9 ::93 9A:9::3 : øƒ¸¾cdƒc]9cŽƒ¾$h“rrxHxqA9:9 @:@A::@krx@A3qGqxrxrxw„x!rxxrxGxrxrNrqqrxNr9@:9::@A9::@A9Aƒ@A@A„@3Ak@Aj :3 ::A@ @A 3: :3:3øƒ¸”“cƒ]c¾]c“¾™ÉiiwrFrwA9 ƒ: G::@@:GkGrq@3AxrxHwrxrxrxrwxrNqƒxArwxxGrxqxx@:A::@:@:9:@A@@A@k@k@::@A@3k@AA9499 9kj 3:9: 3 3ø¸”cŽƒy3]”¾c¾“”Ù“hAkGk::9:9:@k@:@:9A@rwA :kGqrwxrMrxxrwxHxxrxxrxxrxqxxrxrx@A@:@:@::A@@jAd@A@A:@:@:33@:A@k@A9:9A393 33 3: 93 øºy¾]3¾¾Ã]”¾”½™Ãi:@qAG9:4::@G: ::3:A::@qAAwrxrxrxxrwxrxxrqxxrxqNAGrxrx 3A@A::@k@A:AA@A@:k@k:@:Ak9@k@AjA9: :: @A493: 9 ø¹ƒ¾c“¾¾Ä¾¾“”™É2@3GkG:9: Gƒ:#@:@A@Gq@GqA@xrxqNrwrqHxrxrxwHqxxrxxƒq=xxw::@A@j@:@A@@j@k@:k@@A@:@Aj393:kA@@:@:93k ::333 øº”½9”c¾3ľ”·™Ã:3GkA9ƒ:G:@::9AqAk9A@q@rƒxTrxxrGqxqxNwrrqxrMxrqHqrHx@:Ak@:@:A:9:AA@:@A@A@:@AjA ::@::FkA@AAj:@ 33::939 3ø¹”c]2]cc¾\¾””Ã:@3@Gk:@:ƒ@':@Aq:G@A@:rrxxrxwrxGkHqHqrxqNxrxr9GrqHƒ::@A@AjAAj::9:@kA@k@k:@::9:Aj::@@:A@A@@A9@@:9:: 33 9ø¹“Žc”]c”cc“”Ã2:r@AqA9q„:>@:@:@@:@rjAqxrxwrx:@@qq99 :9xrxx 3:9A@::@:@@k@A@k@:@@ii3@AjAA9ƒ:$@ AjAF:Ak@AjA@k:@9:4: 3:3 9 3ø¹4”c32c]c3c¾ÃÉ@r@@rA3G:G@@:@:@:Aj:@qHqxrNrxAqAG3 ƒ: GAxrx99:„@:Aƒ@#AjAA@:9ichcA@A9:@@3jA@A@3:9A@A@k@ƒ:3 99…: @@39A9 ø¹y”c¾]”2]ccÉ,3:qG3 9 q:q::@:A@j:@AqHqxrwxr@Gk:9 ::3GkGx@:9:A::@k@jA:i:“@q@A:ib“i2:k@::@ 3A:Aj::9A@k@@:@@AA@: 943@: 3AA9 9493øº”½”¾“c]¾¾iiq:G3 :9::@rƒ@::@:A@qGrxrxxrx@Aƒ@ : 9:9:@:9ƒ:@:@AA@A93:@i:@A@“ib: ƒ:*@@A3@A@k@A@:A@A@k:@:kApA93:9 :@A@:9 4øº””¾¾2Ž3¾“¾bi:qr @3H:@ƒ:q:@@:@A@rkxqxr :9„:9 3…:„@:@:@:ƒ:'9499c@k@@ @A@:@@:@:@Aj:AFkA9Aj@AA@@AGjƒA:9AAG3A93:3øºU,¾“]”c“¾”Éib@: 9:q ::G:A:kq@A3xGxrx 9 ::@::@@3 9@:@@;@A@A@@kAj@::A@::@@AjAjAj@ƒ:)@@A@A@9A@@:9AAj@Ak@kA@j:9Ak@k 3:3: 9øº“c]cc3cc”c™i“ƒ@1: qr 3q@:@k@Gqr:qxrGxw :3@::9A 3 ::@@:@kA@:@-A@ƒA:@kAA@ƒ:3@A@A@@::9A@AjA@@::@::A@qA@kAG@kG:9A@: :::9: 9 øºFŽcc¾c2¾”™™biq;@:qGq 9@:A@qqrrxqHxr3 9 :@93A::9:@AkA@AjAk@:@3Aj@9ƒ@:„@“AjA::@ 9::AjA@39ƒ: 9::9::@@:@@ƒ:@:3@:@93: @:3 øº“cccƒ¾#”““™Ã™r@@:q:r 9:3@@rAxGxqqxx 3 3 2ƒ: 9::Ak@:ƒ@"A@A@:@:@9 3:A@3AA@::b 9A:9: @@:Aj„:!9::@AA9@:AkA:@99: 3@:9: 9::933øº?cc33”¾¾“Ž™“i@q@;qqrq@: @;wGkxrxGrw 9 9 :@ 3: 3@A:Ak:k@k@k@„:AjA@kA@3@k::i9\83@k 399Aƒ "99:A@qA:GjGjA:@3: 3::9:33:@: :3 øº=ŽcŽ2¾c]”““™’Arq9 :qrMrx@AjrrxAq@qrx3 3:3@3:@3@:@:@@:: ƒ:2@:9:9 @@k k::h“83h9@@AA@9::9:: 9A@A@9:  3 9ƒ ::G : ::9 øº“cƒ¾c23””b™“@A::kHwƒr0@AxqGxrxxrxr@3:@A:99:A:2@A:@:A@:9::@9AA: 9ƒ:@::hi““833A@k@AA3ƒ: :@@:9:A9ƒ:3ƒ:9:3@ Gk G3:9 :33ø»)c]”cc]c]“™™“@@:9AqrqxGx@@rqrxqxrN ::3 :3ƒ:3ƒ:O jA @k@:@k@GA::A@Aj AA@:@cbibib :@@Aj:@ 9 9:@:9:@kA@::@:::@k9G3@9@39 ø»;c2¾]2]“Ž™Ã™A@3:G:q@ 3rxrrMrxrwr ::@9 ::9:9 9: 3 @:@:@@:@ƒ:9::„@3@@::@A:2i“cb339 :A::9@A9::9ƒ: „@A:@::kA9::3A :9 :Aø»f””]”c”i™™jA3:::rwrxrxxqrxAxrk@: 3GG 9 3::@:::@::@3@:A:@::A:3 @:h“@99ch™82:kAk@99::@@ ::@:ƒ@„:j:@: @A@::99 3:@ø»Jc”\c¾2¾Äc“™™r:9:qr@rx@qxqrx Fr@ @A39 kkA33:@9:A:9:@::@AA:@jA:@@qA93cbiiƒ:2c“ic293A@A3 @ 9: 3A::@:GkA@A:@@::@:-@9A Aq A:ø»33¾”ƒ¾ƒ“"xwx :rqH@rqNrxHxqxrr@@k:G:3@G:9: ƒ:kFƒ:@:@kGk9@@:@@:@:“i“b“:9ƒ2i“b93Gj3 :@@3:99:AAjGkAj3::@„:@ƒ:33 kA39:ø¼y2]“¾¾Ä”i™@r3qHwq@r@rwrwrxrq@A@9:3: 9:9::9:@9AA9::@@A@k@A:@@:kA:@3ibii9::i22ibb8c 9 :9:@@AA@A@A9 k@A9@A:F:A9G 9:ø¼E¾3¾c23¾8™q@49Gr:@G@:x:@x@rMrxx3::9: 9:: :9A::3A9:9@:AjAAGkG:A@Aq@:@„:5 9 cicbci,8c23A9 AGk@A:jGjAjA@A@AjA:q:k:G::2GAø¼/”½”c]3cc™™k@ : qxrq: @Ar@Aqqxrx9 :G 9439: @@3„:+@AkA@@:k@AjAk@AA9:ihibciibbi8b2923b38:@@49ƒ@3:@AAkGAq@kAjA@AAGGAj::@Aqø»y2]3¾3b2c3Ùq;9 3@rqA@3@@qr@rGrwrr: :3: 3 3A@3A 9 :@@A@@kAj@@AkG:@@k@:@cb9i3b9b3943:i3b @:: 9A@A3:Aq@AjG@kA@A@AqkAqG:9@Akø»O”cc2]¾3¾c“™q@ 9 :xHr@rqGrxxrGrx3@ @A3A@ 2:3 @@:@kA@GAA9:@k@ k@@:@:@-@k:8cbƒ9-49922: 2: :@:kA GjAq@AkG@k@k@2q9q9A:A kFø»C2]cc¾2¾¾cibq:9 3@9rrAxGqrxrwxG@3: 3G:3::933 ::@:Ak@A@@Aj::@ @@Gk…:@:@:ƒ2 3i92222:@9ƒ: Gkq3Aq@Ak@AqAFk@A33@@:@::@93:ø¼&]”¾”2¾”cci:@ 9 @3r q@rqGrxGxrA@ :3 2@„:U@9:: :@:@AjA@::@::3::@::@9:h:@ @cii2bi22323832::9:9A@@AkG@qA@kA@@::A@A@::@::@::ø¼2¾2„¾Ic’c@:: 3rrA@rqGrxrxr@@-9:3A@@::@::@:@@:@A@:@@::@:@:@@::@:@@:3@k@i“8]8ƒ“ i“3b9229@ :9:A@k@@Ak@k@ApA:k9::ƒ@:@A::@@ø¼<”¾¾3¾š¾cibq@3 3x9@:@r@rqr@rwx@A:93 3G A@:@A@kA@@k@kAk 3 @„:9@…:::8cƒ2cbib@“ci\232A@ƒAjA@A@@AAG@AA@@4@:A::@kG:@:A@ø¼5½3¾“]2¾c2™A@3 9:@:qqAqG@@xrA@@:9:@9@Ak23A:@A@::@3AAƒ@FAj@A@A:9AA:9chcchcb2ic2cbccbc8b@3@qAAk@k:q@kk@@:::G@::Aq:3@@;ø¼"3½3“]c2™“q:3 :G9qH@rr@A@Ak@::A@ƒ:Bq: 3Gk@kA3Ak q@kAk@Ak@@k@A@kG9cch:b:A98ic™“hch8c232 :Aq@A:9:„@:@ƒ: qAk:9:A9;@:ø¼%“c]”32c¾™™G:39:qrrq@qGr9rq@3:@@A@:Aƒ@=9A@3AAp @G3 kG@Aq@AkA@:k@@:h :q9@Ak8““™““iccb22,233 jAk@Gƒ:@A@kA@:@@kApAG:@:@@jƒ:ø¼y-c]c¾3”¾2“q:9 3G:r@ArGrrxGrx A3: 39 k@; kA @k9:AjA3FAk@A@AFk@A::@A9:2:29“@@Aj“™’™“’cic83A@@AAFkA@G:@:kG@k@:AGkGj :@A:9A:ø»n]c23½”½¾”bi:@ 3:3GxA@rqqxqqxr 9@:q::9G:3 9@:@@::@A@Ak@AqA@jA@Aj9:@:A c2bc:Abi“c™i™“cih2@A@A@A@@jA@qkAq:qAk@ƒ: @@:A@A3@:k4Gøƒ»4c3¾c”¾”¾¾ib@Ak Ar@::xGqHxGrw 3 qA@: qA3:@::@:@AjAƒ@#k@k@@AjA@::@ 33c8“8cchii“hii3AA9ƒ:"@Aj::AkAAFkAA@A@:@@:q:9@k9:@:GkkGø¼E½”]2¾¾“¾hc@:9 939:@@:@qHqrqrx 9 qA@:9A@k :9::A@:9A@@:@:AF;@k@:@@: k@Aƒ: @:8i,†2)cc@jA@:::@@A@qAkGjAjGk:@@3:: :9 :@@:3Gøƒ¼”ƒ¾]92¾”2cq@:3:rr:9q:qq@@Gxr3 3@A@:@3 9::::@@A9@:k@3 3@39 :9::kG@@:93@22c292ccbc2A@kAk k:kG„@:ƒ@:@:9A3@9:9 ,::k::39ø½C2¾”c3¾™q:A3 9xqH:G:G;@:@A @9Aq:9Aq::@@ 39::@::@::A::@: :493A@Aƒ:83“9\“ih“i8c2cAGqAq9:@AjAk 3 3 3:9:@:@:: A:@:@@: 9:3ø½632¾c¾2,2™q@::3 :Gx9r9rq@@:Aj@3 :AG3GAG9@A9 Gk@3@A@:ApAƒ@k@@3@@@:@@9: qA9„“/i’icc232kGAGAAAk:Aq::@::@:@::@@ jG9AG@39@ ø¾&2c”\c”2™@:9 3qrqq:GArrqrx 3:9Aj:3Gj4ƒ:3 AA@:@:A@A@k@A@:ƒA(@:@k:@93Ak98™“h““™“9,2 jqkGk:@@:Fk@Gƒ:@:@;::@kAA:k3:A ø¾93]¾3¾”cciq@ 9 :Gr9r:x@xrGxr9::9@3AA@@3@:9@k@ :@:jA@A@Aj…:@k9::9AApAA9“ƒ™ i@“c82 GAƒ@:: 3…:9@:@:9::q@@A9:F:@9493 9÷¾,¾“ƒ¾cbc:@339r9N9r@rwAxq3ƒ: @::@@Ak :@ƒ:Aj::9A@k9:: 9 @:@A@„A@jAAƒ@cbi“9Gb3c93G::k:@:3:@::@@9:3ƒ:@@A@@jA9:A@kA9 ÷¿?”¾8¾”cih:33 :q ::9r@rxqrx33@::9;jA@@::@:@:A@:@@A:A@@3 939@k@ƒq:GkF:32chch::c22 Ak:@:@:@: ƒ@ƒ:@AAGA@A@:@AkAA :9Gk: 9ø¿“]¾”¾c“b:G9 3 r@ƒ:@:@:Grw ƒ:@: ƒ@Aƒ@/:  - 2 3 3 3::@A@AA@3:@3 3292cibi“2 qA@ƒ:$@@Aj :k@:93AqkG@:3@@AjGk@k9: qA3 3÷¿Y”]9]½c™2@kAq9Aq@rM::A@9@A3@A@ 9:@::@;9:3@:jA:@A-kG@A:@@A@k@k@AA22 9 29228\::@:G:@9ƒ:A3: 9 „:9 ::@:3::9AkGA9:@A@Aø¿>2”\c]““3qAqA9 r94wrr9@r:@:A@:k@3 3 3 3::9GqA@k@:qAA::q:@@;@Aƒ@<:@kG 3 :99:94:3 k@: 9:9 9: :@:9@A@AjA@@A@::9AjG:@AqkG3øÀ+3c33™2G@A@3@: rqNr@rxrx9 99:9 3:9:9:AA@ƒqO@:AqqG@@Ak:@@qkAk@AkGj  kA A A3:3::9:99::99:3 A@kGkGk@::@@::kG:@A:G@9 ÷À\¾]¾ci23Aqq@: qGxqr@rwrqr A„:[AA@4@::94 4GkA@AjA:@::@AA@A@A@kAAk3@@:@::p:@:9 :3 3 3 3@4:@@AjA@kG@:@::3 3 3 3:@:@:3øÀy”¾“Äc“iqxrH@:Aqrq:w@rNrxx 9 :@@kG:jA:@:@Aq@@A@@3@:qA@@qAj@@kAj:Gq@G ::9qAAq@ 33@ @3@::9::A@: 3A@  393:9:3 :@kGk øÀ(2¾¾”¾c“ixqxq@: GqH:r@rq@xq 3@@AAqAk @:9Gƒ@.qGkAkGkG:@kA@kGAA:@@A@@kGkG2@A@A@@Ak@ 3 94 9:†:@@::Gk@kGk: :@:Aj k@: 2øÁS“3¾¾cihc qx:93 q:@@rxArx 3A@@kGkGk@9Aqkr:AkGqGqGqGAkGqqAq@@3::@A@k@AkGkqkqA@AkGk ƒ:" @: @:FA: kFkGkG@A@ @:3@AGkGA@ 3:øƒÁy”¾2¾i“br r@ 9qr::@:@@xAq @k:@33G:AqGqG@@AqAqAqA::GkAAqAqA39::@:Gk@@AqAGAqA@:A99:@@A@:qA@:9 dkGkGA@@Aqk@@:@kGj@k: @:øÁ2¾33ƒc9hc9A3 q3:qHq4@qq9:@A@ @A@@kGkHkA@3AqGqAq@:q@@j@qGkG9 @ƒ:@A@k@:GqkG2:q@::@:AjAƒ@3 3ƒ kAG:@:j:k 9 q:AqA@Aq„@øÁ>23½3]c“bc3@ 3 : qqrq@:rN3@Aqkq@kA9AqGqkG3GqAqGAjAA@: kGkGkAƒ@<9::kA@A@:AFk Gk@AAq@A@AdA99 :9:@:@jA@@:Gq::AGkGA3GAkAkAq::öÁyŽ”b39c9b3@ 93 3AAqrq@@::AqGqAq@AqA9AqGq kGqAk@AqqA@3GkGkGqq;@@:9@Gk@@:qA@3AG:@ApA@@:q@3AG4::@kG@qr:@kA 9qA@@jq@k@:q@A@9:ôÁ23¾23]cÃ239:3 @:A wrN@:Hƒ: GkAAqAA@k ƒ:Aq@GkGqGqk Aqk AqAGkAAqA„:+AqAk@:9:@@k@:qA:@;qAq9:@:qGqq;q:GjAGk@ƒA @A9@:q :ó cc,”2323“8 9 @9rqr@r:q9:9::@q@ƒ: 2:@@A@;:@AkqAG3qG3Aq@kFkG@kƒ@;:@AqA@@AqAq@A ::qGqGkq:AqGkGkGAk@@:9:@Aq@Aq93A@k@:9A@qG39ôÂy”3¾3c2“82q k33A@@rxrx@ 9qGk:9A@@:A:9::@k@@Gq3 G::qGA@: :@: :@@k@qGjA@kGAk33:GkGkqGAqGkAqGkA@:@@A@AkA@k:3@G: 3@H::9A3óÂy2”9½d¾33c8A3G3 :3@q3GAwr@r9GqGqk@:@A3:@A@A@A:3@@:@:A@::3Gq::@::k@AAqAAqAq:AGq qGqkGAqGkGq @:qA@3 ::@k qqAAG Ak 3@39:3 9óÃB32޾8]8c2 q 9 3 rG:qrG@rx 9rA:9A@Ak@A93q3qA@A9::q: :qAkG@:@@:Gƒ@kGqAqA@qkA kGkGqA…:"q9:AqGkGq:@ q@:93:@q @@3 Aq AóÃ023\9”¾]c2b™ k3 9 9:rqqGr9r:9A@::Gk@3:@@AqAjƒ Jk:3GkG@kAj@:@kAj:AqAqAj@AGk@kkGq @:@q@@ A::@:qAqGq:k:99: : -qkHq q: ôÄ]339]c8c“ 39 3::A@@3rGqrrNq9 ƒ:.qGq@ @:A:GkG@33:93GqGqqAGAk::@GA3GkG@kGkGkGkƒ:' :@:qAq 3qG::@AqAkG:9A: 2 :@A:G949 :öÄ/c]c”]8ccbbA3:::kAqGr:xqxrr3GqAqAq ::@:@@kAƒ@ A:qAq k@k@ @kG3GqAqAqAqG9G@:ƒ@%:qGqGk qqG:9GAq:3:q: 3A:@:@q:39 :9ö¾c…c]c¾”“Ž“3ibr@:9ƒ:YG qGqAA@AGk9 @@qGq @kA@@kGkA:@@qAq xq:qAAjA@q3GkG::GqAk:9: :@3 3 AkG3:9 3::3AAƒ@ Akq9:9: ÷¾c…Eccc,]¾¾cic qHq::93@3Arqx@rwAxq3A@k 3@A@j AqAqGkAqGqqGq qq@qA 3Gƒ:9Aq::GA3@A3:qA@k@AA ::ƒ:::Aq::@3A@::3 9 9 ö¾…7c””“3¾c2’9b G::9 :3G@:@AxrGrxrA@A@:@@A2A@@A39 3rGƒq>rx @@A@@A3:G3@A@ qA@: k@ qGqqA@:9:9 ::9 @3:F:9 :@A@::@9 9 ÷¾Žc…)Ž“d“-“¾c]8i\9:@: 3 3:q A:q9:@qrw:3@A::@ƒ:;3@3 @3xrqrHqHqrw:@kAkq:@:AqAq:@k::F@:@;:qxGqG:: 9::@@…: @k@:@: :3: 3ö¿¾…c””½”3“3¾”¾3]q8ƒq: @3:@:rxArGAAk9A@3@Ad::ƒ@Iqq@A:@:@:q@A@A@34ApA@@:ApAqA9@@:@@kq:AkGqrqG3: :39@@:@@:@:@:@3:@: 3ø¾“c„x,”,3222¾ccq3HGq:@@A::q99rqxqAq3: ::r@;qAG-q@@:@qHqr@r:@@9 ::@A3 @:@AAj:qA:@qGk9:: : @A:@:@Aj@::@A@:@9939 ÷¾“Ž”„f2”c”Ž3”¾¾c qq3q::33@AqrGAqxrwHqj@@rwr@:@:rwGr4:3 3GqAwr@:@43G993qr::@@:@AqA@ AkA:::3: j@@kAAqƒ:9A3q@A94 3 ø¾”…K,3”232”,“cc qGq:@:3 qG:@rGrqA@:@:xrxrx:@rxrqG3rx A@:@ 3: @3@:rNrMqxrƒ:(@ 3rqq@:?3: :: @@kG:@@: @@A@ ::9: :39 3ø¾”…)3c32c3”,”¸”c3HqGqG@3: 3:q@xqxqG3qG@:„@:Gƒ3A @@qAq:A@A ::@rr 939::qGqq:9rqGrGA r@::9q:@;@::@3@A:: :@:@3: : ø¾”„,32]ƒcm3c“]¾]cG9AkG::GGA::qG@rqH@Adxrqrrx9:9@:@rGk@:,:9:qx:9:xrq GAG33qq@r@:@A@:@@:AjA::@:9:@k@::39 ø¾”¾†0233cc3”¾“]c]qq k@ 9kq q:@: 3: 9:rGqGr9 ƒA8@:@r@ 2;@:3:@Aq:GqGq:Gk:94::@:@@@@:kAk:9:@::@:q::9ƒ:9 ,ø¿¾¾…[33c]ccŽ,2”cc:Gq q:@:AGA9GqGr@339::qrqr9A@::@qkG:qrG@:9: @ :@Ak@rqH3@@:@qrGqrq:@kqAƒ:@9 A@qƒ: 9:A: @3 øƒ¾“cc‰m,ccc”3¾”c 3: qrq@j@:49 :G3 :9 ::@::9:@:qAq::9:9A:9:Gkq@:9@@rGqqrqr:@:rGr:@: @:@::@AqA:@::9@ ::9 3@ø…¾Ž”c‰,2]3”23¾“ŽŽc 9GwA@;@@ 3 ::93::9GqH :@@ƒ:GA@:GkG:A@qAGq: 3:9:Gr@Aƒ@:@:qGA @@:qAG@k: :@:@„:9 9 94 ø†¾“cŠ3]\3323\32”“3] @3Grq@3  9ƒ:+3:qG3Hqq::3A9G:@:qG3::@:GkGqG:9 GqGqGqrrƒ:qH3qqkGq„:@:@@9:9:9:49 øŠ¾”]c‹*“cc323c3]]“cc3:GrGqA9 33:3GlGrq:@::Gqƒ:*qGkA qGq:qAqAr@AqG4qrrGqG 99 :qG@:@::@@:9„: 9:: : 9 øŠ¾Ž“dI32]\”“Žcc3 3:3Gk@A@3 9 @A@3:3@9: 9 @:@AjGqAqA@Aqq:Ak@qA@A9GqHqqHq:9@Aƒ: @@Aƒ: @:9: 99@:9øŠ¿¾¾c]c]”c”,]23 3@3 394 9ƒ:9:G@ƒ:;9: 3 9A@AAqGqG:A2 @k 3 3@@AkA:93349:@:@@e:@qG qAq : 39ƒ:9øŠ¿¾“¾”$]c]“]“¾3\3G9 @:@9 9::Aq::A@:3 3ƒ:k@@kr3qq 3::9: 3 33:@A9:9 @„: 3:99 3 @:@3 q:A 3øŠ¿“¾cc•'3]””]c”½33A3 3 33::933  33 3 3„ 3 9: 39 99:@kA@:@ƒ:@9:9 „:9:93 Aj :kFk øŠ¾”c]™“c¾¾”3c 9 : k@: 9 :3 ƒ3 39::93 ƒ90 3 2::933G3qxrq:@:: qr@::3AG3@A3 :AqA9øŠ¾“Žcc”cƒ,”2¾”cc]23cc3:@33ƒ: 3 93@:@:@:@@ƒAkƒA,:9: 9:: 3:rGr rqrq qH3qqrq:: @399 99:øŠ¾”cc”d„ ”]”¾2”¾¾ƒc]3@4Grqq :q ƒ:GAG:A@ƒqrw@j@A:ƒ3%@Hq qHqG::rM3@rq qHq :@ 9Ak@ AA ø‹¾”¾¾]“cc„4“¾c¾“”¾”¾23c23]q933233q]3229:@k@rH@A@Aqr@G@Aqq:AGƒ:9qq49:A:@:@ @3@@: ƒ@ƒk@ø‹¿”½”]•c„4”3cc”½3“]]2323cc323,323233\33Gk:G@:3 3@ 33 qGAqAjƒ@::ƒ ƒ@::94A 3 3 :@3Aø‘¿”¾¾”› cc2¾c¾]ƒc:¾¾“޾,2c323,32,239 kGGk@:qA@A:@@A@kGk@A3q4:q@A3::A@::9:ø˜¿”½]œC2Ž2-”3c3c]”“”2”]c”¾”¾”¾3: qAqA@qGkGk@@kAA@k@G3 @@AqGjA:@Ak@@A:øš¾”“cc?2Ž223]232”¾”¾”]]c¾“¾”¾ccA@99kG¾”kG:9Aq@@A@:@:3 :3GkG@@:@G@„:ø™¿”c3”, ,3c,323½””c]c]¾”½c]c]cŽ„c”½G:Ak@:@3:@A@@:@ @kG:@::@:ƒ@:ø™¿”cž”c2232]3c¾Ž½Ž“]3“”¾”“”3\332…¾3@qA9@; @:@kAA:2AA:3:@@:kA@@:ø™¿”cdž”2c-c2]2cc”“¾ƒc0Ž”¾“¾¾]c23cc”¾”2”Ak:A@kqrqqAjA9AjA9A@@k AjAjAø™¿”¾“]žB2Ž”Ž2c3]32Žccc“¾¾”¾3c3“Ž“”“]””“¾G9A@: qGAqGq@49A@qA:@:9qA@A9ø™À¾”,2ž “3“cŽ3232]“ƒ”2Ž“]cc]”¾cc\3\Ž“]]c]]”::@kkGqAqAA:AA3G::9AAqq:9ø™À”2Ÿ2333“3\ 3]“ޔބc½”„c%”¾”“]c“¾”@@:9AkGkAAqA:@99A9::AqGkGA:ø™¿]3Ÿ32-2233\]3“””“c]„c)]c]¾“]c3]“¾:q:@q q k@q999A@A:9AqA@k ø™¿c”9] 123]323”23c]“Ž2”Žcc¾”¾”Ž“¾”¾”¾””qA:9Gk:qA@4…: @9:@Aq:@:2ø™¿]c¡?232323”,2]”“Ž3cc]¾“¾”“¾“”¾“Ž2:k:AqA@A@kG9::@@kA@Aq:@A@ ø™¿””½¢ 32Ž2cŽcc3c2ƒ”0“¾”¾”“”””޾¾”¾¾“Ž“:GqAGkqqGqA :GA9q jGGk@k: ø˜À¾¾3] @2Ž”cc“Ž”c,c,”¾”¾“¾”]c¾”½”c½”“¾”¾@@AqA@A:@kGjAqkGkA3AqAAq@::ø˜À¾”b¡?“3c]”d½¾32Ž]“¾”¾”·”¾cc”Ž”¾“¾””:@kGqq@qGA@@A3Gq @AFA@j@A@@:ø˜À,c3¡-ccƒc73“Ž2“3¾“”½”“”cŽ”“”¾”½”@@kGqAqAqqA:: 3A9AjAkGA@@k9@ø˜À”ƒc¡”cŽc”,Žc“Ž“,”¾”¾”¸”½”“Žƒ”!½”¾”¾:qAqAqAqAAkGj@ q:@AkGjA::9 9ø˜À”c]¡?”]”“”Ž“””¾”,33½”¾“”Ž“Žc”¾”½¾GqAkG:AqGqAjA@k@::G@kGkGk@::ø˜À”]c¡?323“-“”Ž”½”“”,32¾”“޽”¾“¾”3½”“Ž“¾@kGGk9::@:@@A@:@::kG@A@qAG::ø˜À”¾c¢>c]232,“¾”“¸”½3233¾¾”“”·”¾“¾Ž“¾”cA@kAG:@Gk@A:k:@:A@@kAjAqAj@:ø˜À”½”2¢4,32332]””“Žd2Ž\3½Ž¾””½””]”¾“¾”k@GkG9A:3@:@A@:@qAƒ@AkGqA:@ ø—Áƒ¾£>232]c]c2”޾“Žc323c]”“¾“޾“”¾”½AqAqA2A@@ @:q::@AqqA@@qA9:9:9ø—À”c2¢A2Ž239c332“Ž”i¾3c]9]“¾”¾“Žcc”¾”AqAkG:qAk:9:@kGAqkGkGkA:: ø•À“]c¢B”2Žc3]c¾“Ž””3“3\c”¾“¾”¾“]”¾GqAqA@@:A9:@ :@3GkGkGk@GqA9::93 ø”ÀŽ“Žc¢BŽcjc23]]9“¾“]”¾“3]2”¾Ž½”¾””23“kGq9A:@kA :9:A@9AA@qA@A@A@:9::@ø”À”cc¢.,3“”dc”Ž2cc]“¸”“Ž“Ž]c3\”¾”“¾”“Ž””qAA:k@A@kGkƒ@A@qAqAq„:@q@:@:ø”À””]£B2]”cc2”¾23”]“,”“”2c3]“¾”½Ž¾“¾”¾G9:@A9A@:GqA@k@:kGkGAjGq@:AG:@:ø“¾2¤@23cc]c¸”“3c2]c]””Ž“33½””½””½”::@:9@k@A:@@Aq::qGkAqGkG:@qA::ø””¾¤ 32]cc]c”¾33ƒc0¾“޽””2232¸”“¾Ž“Žj@:@A:@Aj@qA@qG4GkAqGkGqkG@;q::ø”Ácc ]„)Žc”]cc]“Žcccc”¾””½Ž¾”,3“Ž”“”@A@k@ :@@ƒ:@:qA::9A@qAqGkq@ @ø•Ác]¤ c”2c23ccƒc¸”“¾¾”“””]“”c·”¾:@qGA2…:9 AAq@@AjAAqAqGkG3A@ø”Ácc£Accc]””2]c”Ž]]””½”¾”“¾Ž½”“¾”¾c”¾GkGk 3AAj9 k@kqqAAjAqGkGqA39:ø”ÁŽcc¤?c”3]“Ž“-c¾“”3c½”¸“¾”½”¾“¸””””qAqG:@k@rGk AqGGkGqGqAq kG: 9ø•Á“]¤>]22”c”cc”¾2”””“¾”޾“”¾”“¾””qGkq:@GqGkG3@AqqGkGkGk@A9:@:ø–””¾£>c3Ž“,3c]c]”“”¾c¾”¾“”¾¾“Ž”“,”¾””kG :AkAqAA3@q:AqAqGqAGA@A:A@ø–Âc2£]2”¾2Žc2c]“Žc”“Ž“¾”¾”½ƒ”%¾“޾”2¾“:@:@kG@AqAA:@kGqAqAqq@k:FkAø–Á”]c£c]]“”“]3“]cc]3½Ž”½”·”ƒ%2-“”cAA3AqAqAkq@A@ qAqGqAqG@@AjAø–Ác“]c£;]“3],”c”¸c”cc2”¾“Ž””””””ޓޔ::@Aq9:A9@:qqA2 qAqAqAql@ø™Á”]c£”ƒc4Ž2c“Ž“]]”””””””””””9kFAqGqG:A qA @: :@@:øšÁ”]9¢22Ž“c“cŽ”½Žc””c”“cޓޓޓ”¾”½”¾“ qGkG:@Ak@k 99:ø£Â”“3¢)3“3”“c]2c¾Ž“”¾Ž“Ž”“””“”·””½Ž”“¸3 A,:…@Aø¦Ã¾½£"c3Ž2Ž2-cc”””ccޓޓޔ½””“¾””„9 :A:Aø¨Âc]£",]“cŽ“2Ž“c]”c””cŽ2”¾¾“”޽”¸“¸“„ 93ø«Âƒc£"cc]2c]2”“3cc””“¸“”””“¸c”“””“Ž… ø¬Âc]¢233cc]cŽŽ]”]c]2””¾Ž“””“Žƒ”¾”·”“ø²Âcc¢#cc]ccŽ“c3“cc”޽””Ž“Ž\”½”””Žø²ÂŽc]¡$cŽc]c“ŽccŽc¾“””¾“¾3]2”¾””“””½”ø²Àc]”2 2Ž“c2ŽcŽ”]9]“Ž“¸“ƒ”j2””½””½Ž”·””·ø²À23¾2Ÿ&3]“c]Ži9c”3\”“”ޓ޽]c]]“¾”””½””¾“¾ø²Â“ccŸ&\9]ccŽcŽc3“”Žc\]“d“c””¾”¾¾“¾Ž½”¾Ž”ø²Ã]c ]c332†c”·“]”””c”·”½”“”¾“¾”½”½”ø²Ãc]¢#3cc]]9]2]“cc”“”d”¾”½”¸”·””½”޾”½ø²Ãc£"“c323”ŽŽc޾”¾c”½”“޾c“”¾“޾“¾“”ø²Ãc¥ 3“”¾”“”“”¾“””¸”½c]cŽ“””c¾”ø²Ä”©c””””Žc“]ccŽ“Žcޓ޽”·ccø²Ãcc±Ž“”””””“””“”¾”޽ø²Ãc]´”½”¾”“¾¾“¾Ž“¾“”ø²ÃccøöÃcŽcøöÔøèÃc¾32“cøàăc‘c””øÞÅ,cøõÇ›c“øÖøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/$-$øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄÝc†cøÖÑcc¾¾“¾”“”c”¾½”ccø×¿ “”½”¾“¾“ˆc…¾“¾”]cŽ„¾cøØ¾]¾¾”ƒ¾”””c”¾¾Ä”Ä””¾c]”ľē””øØ¿ c¾½”¾“Ž“”]ƒ¾”¾Äƒ¾“¸“c¾¾½”¾“cøÙ¿#”¾¾9]3¾¾Ä”¾”¾”¾”¾”Ä“””c]”ľ¾“døÚ¿c¾¾2c2¾¾”½¾¾“¾¾”½Ä¾“¸”c]ă¾iŽ˜cc”½ccc”½”c2]ø°¿¾”cc]¾¾Ä¾¾”¾š¾”½¾ccc”ƒ¾½”“”“”2¾3c]ccƒ¾Ž“Žc]c…cø°Ác¾¾š¾”¾½š¾½¾”¾cƒ ”Ž“¾¾š¾Äc”2]3b]“”¾“”“”Šcø°Àccƒ¾ ½¾Ä”””“”…ŽiŽÄƒ¾“Žc• c¾¾cc”¾”¾d‹Žø°¿”¾“¾š¾”¾“¸]“„”“”ƒ¾”“”“]¾¾”¾¾cŽcc”2„3””ø¶¿”½c„¾ccƒ“””½¾“„¾”ľ“Ž”‘,“”c2cccc”“Ž3]2cŽ“¾½”]cc3ø±¿””Ä”cƒc޾”¾¾”¾Ä¾½cc•Ž“¾¾„cc32]¾”ƒcc¾¾3½¾“ø¯¾c¾”¾”c””cŽc¾¾”„¾½ƒ¾iŽ•c”¾¾”“޾c”¾”¾¾”¾c]¾¾3¾c]¾¾”,ø¯¾ c¾””¾c”“”ƒ¾ 𾾔ĽĔÄ23–”¾”¾”ľ””¾¾”¾¾”ƒc ¾”¾Äcšcccø¯¾c¾“޾8¾”¾Ž½”¾¾½”¾½ƒ¾33—c”¾2ƒ¾”¾“cc¾”½“c3“cc¾c¾¾c“2ø¯¾¾”2“”¾“”“”¾¾š¾”“””¾Äc— c”,3“““Ž„c“Žc”c]]”]9ci:ø¯¾ c¾2Ž”¾”¸“¸„¾“¾”½¾—]c3c]9¾”3c”cÉ””ŽŽˆc ]Ä™2cdb92ø®¾”¾“”½”¾¾Ä”“”¾“¾—'c,c2ccc¾¾“c8i“chch”cd“bcc¾ÃÉ8““i ø¯¿”¾”¾”¾Ä„¾“”•+2”3c]c]¾¾”cbch“™““bcc]o“ic¾cÉÉÃÉihj 2ø®¿“”“¾“ƒ¾š“Ž•$c”33cc”cchb9b™“bibii’ÙÉÙÉbcßÃcƒi“ÃÉA ø¯ÀŽ”…¾“Ž”/2”,c2]2c3™™bccbcibc™ibi’iißÃ9bGcbÃ92rwr r@3 ø®À2„¾š“”“•0,,¾¾]c3]bibc8cb9bi“™h“A@rxr@Ak@rxr@A@Axrxw:@A3 ø®Á¾¾š¾¾“Ž“’,2¾3Ä”¾”c\9Ó2i“i“iqGAƒ@rxqxr@Awrxxr@kwxrxrx@3 32ø­À 2”¾¾½¾”Ž,“32”¾3¾¾cciÙbih“qqƒ:@:xkAAGAqxrG q Gqr 3xw Ak 9 2ø­À”¾Ä”¾“322Ž3323¾Ä¾¾2ÃÉÃi%c:qN9:9:@A@xwr@@A@:xxr@A@@xrxr@Gqr 3ø­À”“¾“ƒ¾2Ž 2]33cc¾2¾¾“¾¾ƒi ““’“9xrqqHqAjArxrxxrkxxrxxrjAxrƒxrAq 3 ø­À”¾¾”ƒ¾%c]9c¾cjÉŸ“h““hc@rxGrqrqrxqqGqqGqx…qHqxqGqGqq@r93ø­À”“¾¾“c“#,3c],¾Ži““i“ÉÃÉic@@ xrqHqNq:@@:ƒr@@A:Nr@@ ::qH:@94ø­Á¾¾”c2ccccŽ”“cn“™::Gr@@A@r„x q 9 ::@:Aƒ@A@A:@qr@rrq:rq@@A 3 3ƒ ø¨Á¾”ľ3Œ2]ƒc&]“”¾”“™“ 9@ :@A:jxxrqrw 4 9@r@@rxrx@Aq„:9:x@A@A@rx933 33„ ø¤Á„¾ÄcŒ33]cŽ”¾i’ibqxrr@:k:GrA@G@9 :@ƒ:@AAjxqA@k@xqxGx@@rxqxr@A9: 3 9„9: ø¢Á”ľ¾c‹>,cc“Žc“cc’ii@:@@:@@A@2 393 3:9::@@A2rGrqrq @:xrx:@A@rxr@@k9 9ƒ: 3:: 3 93 3 øžÀ“¾¾“3ŠƒccŽ“ŽÉbi9qr xrG:kF 3 3ƒ 9::@AkGk„x&Nr@kxrwrxAjrxqxrx@: 999 9 93 39 3 3øœÀ”“”“”Šc]ccޓޙci rG3xrwr@A3 3393:9ƒ:1@:qGqrqrqxAqAwrNr@AAwrNqx@A3 9 93:9 9 93::3 9 øšÀ””޽,‰2c¾”ccÃÉib@xrqGAqAqGrq 9: :9::@::GqrxGxxr@@A@Axrƒ@k@xrx:Ak:3 : 949…: 9:9 3 3 ø˜À”“Ž”,ˆ>“dc”dÉÉchr :xqrGkGk 33 93:9:@:@qqrNqrrMrxxqxrxqxrqxrxrwxx@ƒ 9„:9„:  :9 99:9 ø—Á¾¾”2‡Z3]ccŽc™Ãch:x xxqr9 3339: :::@@:A@AxrxwrxxrxrxrxxrGxGrwxrrA9kq9:@:99 9939:: 9393 ø•À”¾¾Ä,†2]“]c”c™“bi rxrwrNq 3ƒ E3::9:Gq::@k@GqrqHxqxqxrwxqxGrxrqHxx@A@@A9 9 93:9::: 39 33 33 9ø“Áƒ¾ĆB23]”ÉÃi8rxqGqGkA9 33 ::9::Gk::@:xrrwrxqrGxrNrxHxqxrx:rqx@A…:9::9:9:39:3993 33:3:ø’À¾š¾†23„c[”Écb3 :xqG:33 33 :9::9::9@G:qGqxrNrxxAqrwxrxAjAxrwA@rwHx3:99A@::9::@ 3 34 :9::9 3:9ø‘À“”c…c3]2]¾¾”“i9r xrGq :3 3 9 :9::@ :GA:qrxrxqxwrGkGxrxq9rx@Axrwrrxrx :9:@9:: : :93:99:43: 3 9: 3øÀŽc”„ 3\3c””¾i™hƒx”¾¾c¾2¾”“™™ÃF:q:GqGq:x@xrwHwxqrxx::@39 @: ::@A::A9::@:Aƒ:@9:@:Ak@:@:AA3939 :@:@:3@:ƒ@:9:9:9:@:9::3 ::3: 9 9 øƒ¿D,Žc“,¾3ľ¾“Ž™Ã™x:3rrr:qxrrxrwrrGxq@93A 3 39 3:9@@3:@@9@AAj:9:@@ƒ:@@„:-3@AA@AjAA@:@:3AAk@A:9:933::9G:2:: 93: 9 øƒ¿D“”3¾3¾¾Ä¾“Ž™™rxr:Gxq:q:xqxqNqrGqA@AA9 9:9 3 3@@::9:@:@ @jA9@@Ajƒ@:@@:9A@A@@AjA@Aj:@:@: @A@A@ƒ:9A3@: :: :9:: 9 39øƒÀ>c2Ž2¾2¾¾“Ž™™@@qq9rrGxGrxHxrxxrxxAjA9::: 393@:AA@Ak@:AA3@ƒ:8A@A:@A:@A@Aj@k:@A@k@@A@:3@@,Ak@k@:::9:99:@:9949 3øƒÁx¾3c3¾2¾”“™kA :: Gxrxqxqxxqxqxrx@ :94@@9 :A@:k@:@k@@ :j9 AA@jAjA:@kAj@:kA@@:@k@A:@A@::9A:A@A@@:@k3 3 @:::A933:øƒÁ9]\3¾2Ä3c”“™Ã@@q:q:qxrxr@rx:xHxqxr399: 3 :kAAk@A@A:@@ƒ:/@jAA@:@@:@:AA@@A@:A@A@:@k@393:::k@AjA3A@A@ „: @@A: 94 øƒÁ 23¾šccc]¾™™kA rAq:xq:N@A@xqqxrƒx9: :ƒ: @A93@Ak@2Akƒ:@:Aƒ@):AjA::9AjA@jAjA:@@A@ :: ::@:9@A@A q:@3„: @@A99A393øÀ]”¾¾2c¾-cc™ÃFAwqrƒ@Aq@AkAqNrxxrw 9:3@A,: 9:9:@::9ƒ:A9:9@:ƒ@k@:A@ƒ:@9A@kA@A:@:j3:A@9:9::AAjA@99ƒ::9@:A9A: 3: :ø¿%c2¾2¾¾3¾¾j“A@krw@A@A@ k@qxxGrxrwH: …:9@:9 9A@::9:@:9@:A@A:@Ak@A:?@::A@A@k9:@::jAk@:A@@AjA@@…:9:::9@39 3:ø¿3]2323¾2¾¾cijA9HƒrI:rAkwrrwrqxqx @@3:9::@ 3::@:9:9A@::@A@@j@c@@Aj@::i“ck@k:@:3:@:@:@:9„@„:@A9:9: @:q A3 3 393 ø¿%2”232¾”2¾Äc““G@rwrwxwx@GrxGxrGrxr@k ƒ:9A@3 †:H@::@:A@k@4:c:i,A@A:hcbi:@A@::@: @@A@A9:@kAk::@@k@A9 9 @A 93 9 3 3ø¿”c3¾¾”¾i“@Aq@ArGrxAkxrqxrqƒxA@ 9:@: 9:@:@:@::A9ƒ:%@A@9 3 i::@k bci:@::@@:@Ak@AjAk::@:@Aƒ@AjAGk9A3@-3@:: :9 3: 3ø¿H“3]32¾2¾2¾ib™qAqA@xrxqGAw:GxxGrx@Ak 2:93A9:3:A9 Aj@:@A::@k9::@A99:b@@:„@/:@@:@:AjA@A@@:3Ak@:@AjA@k94A@ 3A: 39 9::9 ø¿-¾2¾2¾¾ccc-™™r@r@qrw:@rqAqxA@:AqA@3 : 3A:9Aƒ@A2ƒA::@@k@A@:@AjA:9ƒ:@Ak:@:@ƒ:"AjA@::9::93AG@k@AjAA@ 99:9 9 ,G3ƒ:::9 ø¿>2¾”¾¾”cc-c¾8ÃqA@A @A:@rAxqAk9GkG2 3 :@ 3: @:@kAAjAF@:9: @A9…:@::@A@A@@:3::@@A@k 9ƒ: :9A@:9:A@ƒ: 3 3: 9 9Gkƒ:::9:ø¿#3¾¾2¾¾3¾2”¾8™r@kw:A@@AqxAqrx@rxqA ƒ9: 3A::@:@@Aj@;9:9:AA@AF @ƒ:3bAj@A3 3@:k@:9: 9:9AjAA9AAkF:9@ 9 9:3G3@::9:øƒ¿]2¾c32…¾““@AAr3x:3xr@AwrxrGƒxZ2 kA 3 9 -3::@:9:@3:93:@3939:@::@@:9:2@:3 k@::@@::9:9:@@A@@::9::9 3 3 3@ 9:9 9:9 ::9ø¿13cc2¾”Ä”¾Äh“Ax@@qxr qGk@rGxxqrxr qG9 39 @@Ajƒ:@@A93ƒ:AA @@::@::832ƒ9.A@@A:@:9 3::::93:@A9 9::9:9: Aq A@3 3A39Aø¿“ƒc1¾¾2¾½¾i“@k@AqxqkAGrwrqxGxrxr3:3: 9::9AAjAA@:@A@ƒAB9:@GjA3::9:9::ih“2c9:@AjAA:99:::9: 9A39::@:@:@A@3A2 @33@3 :A9ø¿6¾cŽc]3¾”c¾”™“GGk@rHx qqA@rqxrrxwr:@@39 : Aj9 9:: ::ƒ9@:A:@ƒ:2bccb93A::@::93 3…:A…:A@:@3 ::::3: G3:9:øÀ3]3¾22¾2¾¾8™qAƒ@xq3AqGkwHx:@xr@ :9::ƒ9:9A@::9:9Gk9:A@:9Aq@ 3A3„@:ib899@ 9A9@A@3:ƒAF:9:Ak@G9::9:@;@::@:@A@ƒ: „:øÀ2ƒ¾„c132ÙrpArr@AG@rqAqr@A@AGkA93@  ::3A::@:@AkAG3::@„:=@ ihi:3 3i’i2, 9 k@A33:9 393AApAGkA9::9A:@@::@:@:@:3@9ø½:2]¾”½šc¾3¾¾8ÃrA@x9A@k@@qAxGqA@x@@3 :@k9A:9A99:@A@A@k@Gƒ:?G9:3ii“@49ccib92: @kA9:: A : AA::@Aq@AjA9AjA:@q:k@A:@ Aq:øƒ½-cc23¾3¾3¾¾c¾c“i@qAqrxq@r@:x@Ax@qrxA3 9A@ Ak3ƒ:L :@kAp@AkA@@:kAA9:9i9i39h29b229:9: 9j:@qkG9::@kAGAk@kA@k@AA:GA@q::2GA9øƒ½=]2]c2]Ä2¾¾“i“@Ajxrwrxrx:xrkxrqxr 2:9A:2A: ::@@AAFkA@@AqAjGƒ@=3::9:h:9:Gcbcicc8c 33 ::9:@:@:@AkFAjGA@GjGA3q9q:::@ kG9øÀ3ƒcR¾¾2¾”“ojrN@@rHwrx:xqGrxGxxrx: 39 ::@@@AjAkA@Aj jG@Ak:::icih]bc8c2b82c223: ::@ƒ: AG::FA@kAjGkAAj@ 9:@@:@@9 q3:øƒÀƒcA3¾¾Ä¾i““@rq@rxrwH@rxAwrqrxx: :@:9@@3@A@A@q@Gk@:@Ak@@kGA9::9@:kGƒ2 3 3 9b:@:@ƒ: @AqAkkAjA@GkApAjA@3@ @@;k@:@;@@ƒ:øÀR3]c]29¾2¾c9qGqHrwrGxr@r@Ax:qxr@ :3@::@: :A2:k@AAj @A@3G:Ak@:@::99::b28c89 ’,:ƒ@:@:Gj@Gk@kAFkAAGk@39;@:@„:3@:øƒÁ;23¾¾c3cŽccqHqqrrw:@A@A@@A@AGkAq A@:@A:j@:@@A@jA@@:A3:@::@ƒ:;h:3:ii“3b3’“ii2A:: 3::@::@:AA@qA@kF@@9 :@:@::G:@:@@øÁ-]”½”ccc“”™bqGqHqA@AjAj:k@@kAFk3@@:@@:G:@:@…:@j:@:@:9:@:@::::@cbƒ2 9b9bc3b9:9 ƒ"A@A@A@@jA@kAAFk:A:9::Aq@:@k::@:@øÁ-23¾¾c3¾Ž““c:Gqrq:rx@x@Ax@qxx@@3G::@k:A@:Ak„@:@…:G9 ih“ibc2i2ccbc™“bc3 @…q@kGjA@:AFk@kA@::9:GA@::@9@:@:ø„Á232”c¾3¾“Ž™b@AxrAGkwƒr/x@xrGrrx@ kG3@Gk:Aq@AA:@;qA@:@A@GkA9“ihccA:ƒ@“™“8cc8A@:3 :A@k@:A@kAqAƒ@:: GkkGk@:@:ƒ:øƒÁ]32cƒ¾qÄ”™“rqrwA@GrxMrxAxrqxxr:@ @AkFkAk@kAjGkAA@k@ApA9cbch9b@@A@““i’i“b3cjA@@9AqAA@93@:@::@::@kG@qA :@::@::øƒÀ23ƒcL¾¾š¾“™™xxxA::wrrwr@xrGrwrx:3 j@k:Gj Aq@AG@@kGkG::A@:9cib2c3A@\o“™i™“ih2ƒ$@;@@:@:AjAkA::@:@kA@::@:GkA93@:A:Apø„¿H,32]c]¾2¾”Ž“™h@r@xqrxqxxAxqxrxxG3::9A:@AAj @k@k@AjA@q::@@:9@38ci28ƒ“/h“’o3ijA@:k@:kA:@:@AFkG9:@Ak@:3@@:@k@G3::@G9AAøƒÀx3”23”½3c¾“™““i@AkqxrM:rx@xr@xrGr:3 9:@::@@A@2@Ak@@A@@A@:@:@9c“3hc222i2A@@3::@A@@AkAFkA@Aj@A@::A::@@3  kA9kGø„À7c½”¸c¾”ccŽ“™i““@qHwr@A@kA@kGqrx 33::@:9:@@::AjGA@@Ajƒ:>99:@kA::b2cibc922c@AkG :9k@@kFkAGk@k@A9::99:9:::@Ap3 ø„À%cŽ“23¾¾2cc”Ãh“@Aq:A:q@@r@@rGAwx3 ƒ:@3A@:@:A@k@3A:9:93AA@qƒ:3G9c“™bccbc8i2kGkqA:Gk@AkGk@qA@A::9@93A::A::ø…Àc2Ž”,2¾¾3c””Ã3@Gƒ@xr@rx@rqq@AA@ 9::93::9Aƒ: 3  A:9ƒ@":3@kAGb“™™i“i“2cAGAq9:@A@@:@ƒ:3 3 ::3::9 :@:@:3 2ø…À ,”½””]9¾2ƒckÉ;k:@Arqxqrrwrr@Aj@: kA3AA@::AqG:@:GjqA@::@;qG:AqGkG“™“h@@323jGkA@@k@:Gk9:9::?:99: Aq:Aq:9:ø…À””¾½3¾¾c]Žcd”2ƒ@< -:qGq GqGqG@A::9 @A2AA9Gk@qA9kA@::9::@:qAqG:kGA@@A@™““qk2ƒ GkGjGkA@@kGAG9@ƒ: 9: kFA9kA3ƒ: 3ø„ÀP,¾”2¾23½”ccc¾Ãk::q:@r@Ax:kx:kx@93::9:@9qG::@@3:q:@9 @:GkGk:@qk@kbici™:@@3ƒ&k@:: 9::9:3 93::3:@AkA@AF @A  øƒÁ>2Ž”3323¾2]32¾c™c39H:9:xrGrxAxxAxr@:9 GkqG:@qGq::GA9:@:@:Aƒ@A@3 2ibibib“GA@@„: @ 3::@:9 9 3 ƒ::@@:@::jAj@:3 øÁh3½”c¾“cc¾¾cc“b:q::@rx@xr@rxAxrx:@3qHq:GqkGqBqGq::Gk::@:@:@k@:“c3 bcb8cbc9393@k@:A:@93A3@A9 AqA@Ak@Gƒ:AkFk @@:@ 3 3øÁ ]“”2Ž3¾¾2cŽÄ¾ccib™qH@:GkAqqAwr@ƒq::ƒ:GGk@@A@@A:A@9:9:@@kA@::@Aj39bcc8cbb A@A@@::@:: :@A:9 jAq::9:@@qAkG„:Aq 3 øÁ&Ž22]2”¾c3¾cc9Ã:q::3x:x@:rwrxr@Gr@„:GkA:Aƒq::A:G@;ƒ@:@kAA:99 3 9 :jƒ:#9:9 @::9:@3A@:@::9:A9 kGjA::FkAjA3øÁ:“¾“Ž233¾c“”c2“ii@@:rqrwr:xrGxxrqxr:@q:@Gk@qqAqG:@Aqq@ƒ:@:@r2ƒA2qGkAAkk  2 9 39 9:3@:qAqA::@:9 AqAp:@AqA øÁLޓޓ-”]ic¾”¾”¾c’“qGGkAwHrx9NxqrxxGrxx@@G:@qGkHqH::qqGkAq::@:@ rx9:9:9Ak9ƒ:* 93A@@::9 9 2@A:qAq::@:@: jGA:@:G@939øÁ ”Ž“2”¾]…¾“d™“rqxqA:GkqrGGqGqqGqƒ:@3AqGqGk@:G:AqGqG3@:@rqr@:Aƒ@A@@:9 „9A†:ƒ;@@@:9@A9:9:2 …: øÁT”””¾32¾”¾2ľi™irxA3@:Nqrqr@HrxGxx@3GqHqkGAk@k@:@qAqAq :rwrxGrA@3GkGkG@:AjA@ƒ:9G:9:@@::@kAqƒA@Aq 3@AAGkG@j:9 øƒÁ\””½”½”]c¾cc3¾iŽ2™’i@qA@3r@qrwHxrqxrxrxr9AkqGrAjA q:AqGqGkxrwrGrxrx@:AqAq:q@:A@AAq::@:Gƒ:@@:AqGjq@qHAq@kG: @::3:A@ƒ ñÁgc””¾“¾”2]cc”c“Ž“Ži“ @qA9 qHrwrxGrwrxrx @AqGkGGj qG:qAqk xxqrxGrwrxr93GkGqGA3@k@@:@qG3 k@:@@qGqAƒ:@2::9@:::3A@G@ƒ9: 3ñÁ”¾c,”“¾3¾c]]¾2…¾“rwrAqxr3 GkGkGAGqGqr9: :ƒq ƒqJGqAqA@A@A 9qAqGqGrqGkq@:Ak@AAkGk GkGkA@A:A@::@3A@A@A@:@::@A@k@99: :òÁy”¾ccŽ3cc2932¾2”¾“r wAr@k9qq@rqqrxAxrGrx@AGAAxr@AAkGAqGqAjA@jA@Aqr@AkG@:@GkkG@kFkGA@qqA@rGk@kGk@:@9A@A9A@3@:@:@@k@ @499::3@ñÁy“”¾]cd“c]cc]3cc2cŽ“:x@AA9qH:xrGxqAwrxqrx@kqxrxxkGqAxqrqA@A@AqrGAxrGq@k@kAGxrqrGAkGjAqqG@rqGkxAqr@3AAj9;k:AAj:@:kA @:39 A@ñÁ"¾“c9-3¾]c”¾¾d“”xkG3Gkq@ 9ƒ@Ak@ƒAxqxAqrxwrxAqAwrqGq„:"9:99:9::@A@kGkxrxwrqxA@A@AA:3qGk @ƒ: qrGkGA„@3„: G2: 9: 3:óÁR”¾”cd”22]c,32¾”¾”,¾¾crq qHr3 rr@rw:kw@qH@:qHqAGkGjGkAA :9:9:39:@A@kA :9A…:)@k@:9rGq: 3@:@@3G@@A@:@A@:@@::@:A:@ :9 óÁy””½””“Ž“3cc32c]¾c¾c¾cAw@qr3xqrxrx@xrGrx@Aq@xqqrAxq@:@99rGAwrr@ :@k@qqxrx@A@@xGw3@@rxqr @:9:@@3AkAj@A@jA@:@r@Aq@3@:39: ôÁA¾”””3,”,33cc22ccc:G@Aq rwHwrAxrqrqxAqArqHqxqHqqrA@rx9ƒ:2@ r3:@AxrxGx@kAxrqrHq:rwHq q:::3AAF:@AjAAjqA9q: @ƒ:9 93ôÂ1¾¾”“¾”,92322,”¾”¾¾””qrxr@AkA@:9:G9:A@:9A…@:@@ 93:Aq@Aq:@9…@!AA@:99A@A@q :9: @9::@r@A3:@:@:@ƒ:A@@A: @99: ô¾“¾””¾”]c]]c32½¾”,ƒ”;qxqxxqGq43:Gk::q :3:rr9A:A::AGArGAkGkGk@::Ak:9:3rqH:@A@ƒq @@qGqrr3G@Aƒ@:A@:A@:@A::@q@ƒ:3: 2ôÁy““Ž2¾“¾2]c2”Žcc,”2cd¾2,c:x@rkG:3r::@:q:A@@AxqxH@@:@AjAqqkGqAqG@:@:@A@rxqHwrwAjqGA@ArGkGr93AAj@k:3@kA@jA@AjqAqA@:9: 3öÁ3Ž””,3]3c232,”]3¾Žc3cŽ“:Gk@qAqGGq:9A:  3 9ƒ:H@k@qAqGkG@@: 9A@:9AkGqGq ::@::AA::qG:xrGq:rGA@GkAq@:@:@A::@::9:9 õÀ”“Ž““””32332”c3Ä”2ƒ¾b”““ŽqrxrrqxrqGr:@@:@k@qrw:Gk@AA@rqG@rAk 39j: :A3GAqArqrq3jAj@xq::A@A@A@@3A@@A@A@:@::@@A:@: 3:÷Ày“ޓޓ-””323]“]]c22¾2d¾2¾¾2,”“HrxAqGqGq@@A@AqxHr@@AqAjrqG:rwAj 9@: ::@@39AxqNqArrq@AAqr::@q@k@k@3A@jAj@:k:9:A::@: : 3 öÀb”¾cc,”“c]3cŽ9]323,cc33c3: G@A:AAk::@kA@k@A9 3@A3 9@@:9@ 3 99AA@AqAk qGGk@A@@:@::@„:9†:@:Gƒ: 9@::2 ::÷Á¾¾”]cc]]cc2Ž32c\32¾3ƒ¾ 2”c]c]cc:jƒ:@3„@Aƒ@rwr@Aq„@rqAAqGk:9:A3:@33:ƒ@ qrAkGk@Aj@:@ƒ:9„@Aƒ@:ƒ@A::@::@:9 , 9 ÷Á”ƒ¾ƒc c3c“33“ƒ3H23”2¾”“,¾Ž¾Äc¾¾”“@3Gk@;qkGdArqHxqA:qA;qqA:qqAq::9 3@:@A@3:qrqxq@:qGqGAA„@AA@:G@A@:A@A:@::9:9: 3A@93øÁ.c¾Äcc]ccŽcc]j,322¾2c32¾”c“¾c¾”¾:@::999:…@ƒ:)@@rw:A@9:: :qAGqG3:3 qA@@::@@: 3:933 ƒ: 3 3::93@@k99: :: @3A øÀ”ƒ]c]ccd3”c232-]ccc]„c dc“”:3  „: @A:kƒ@::@AqAqAGkGkGGqqAqHkAƒ@A@4:9 33 3 @::9@:@:„qH3Hqrƒ: 9 :::3øÀ:“Ž“d“c32ccc3”“]Ž“]c33”¾¾¾Ž¾¾2cŽ“::rqG :j:@9 3::@Aƒ@ AqAqqGrqGqHqqGqqr@:9 @A@:q:xrxrƒ@A:@3:@: 9qqH9::3 :9:3øÀ2”“Žc,3cd”]cc”Žc]2¾c,”“2¾3¾c¾”¾¾Ä¾cq AA„:A 9 ::kAkqqGkGqArrxrGkGAk: 3Aj:A:@:rqxG@A::@@::@:9:: 3 9:9: 9:3::ø…À“Ž“Žcƒ3ƒc”“]c,c3223]9]c]cŽc”2cŽ2¾¾”¾ƒc@9: :@::93:99 A@kGqGkwAqA2:@ :@@A:9@:rq@::@::rqr@:A:@:@:9:ƒ ƒ@ƒ ø„Áƒ¾3ƒ323cc]c3cŽcc,332]c3c¾c¾¾”Žcc2ľcccŽ“rq@qr@AGAƒr%x9:9:3 3 3AwrxrwAqArwr@ArrqAArxqxr9qHƒ@::@9::qk9:3ø…À¾¾š¾2ƒ2]cc]c]ƒcUc3]2]c\c3¾¾¾“,”ޓ޾””¾¾”¾”]9]9]“Ž“Nq@A@A@rx@A@AAwrHGk@qA3rqqN@@A@rxq 3H@k::9ƒ: ::G: ø‹Áƒ¾3„1”Ž23]2Žcc]c3]“Žc3\3,¾”2 “¾“d“޾“¾2¾¾“”ă¾4ľ qq3 2@@3”9:kG qGq r::9:9A@xrwrGqrwAGq :9::@ø‹À“”“c\…>3“Ž23]ccc,cŽ2”]“c3cdic]ccŽc“”¾cc2iŽc¾š¾¾Ž” 3@A@rƒ¾9Gkk„:@:qrqr@A@rqGqrG rq 2:@: øŒÀ””‰Ž“]”2c23,23c]c323ƒc&¾”¾”cŽcccŽcc]23”c¾¾i”c””Ž”i¾ƒA"k@Gk::GqG qN@A3 @:@A9A@@ : 3AqøŒÀ”””Š]9]”-„]2””½c3]33cc¾”]cc”ƒc¾”¾”¾c”¾c]¾”¾”¾3“Žc“„¾cc@jA@AkAqGqrqqGkqG::@A3„: @@3::qA3øŒÀ””cƒ&3”,3”9c]c¾c3ccc¾¾“Ž“c”]9¾½¾”\ƒcdj¾šc”ŽqGqA:qGqqHqGqGq3ƒ:@:9:9:9::9::A øŒÀ”“Ž“ŽŽƒF3“],c2c]cc2]c3ŽcccŽcc½”c“cŽcc]”“Žc]c]\3qGqA@qGqA@AqAqr3:9ƒ:9::@ @:@::ø‹Áƒ¾”c„,3c”c-9cc]cd2]c”23¾¾”¾¾”¾””]„¾$”¾”“¾”½””¾”¾qq9 :rGk@kGA@:939:…: @:@::@::9ø‹Á„¾“c„ ”3c]c,”½]]ƒc-cccŽ“”2¾”“Ž“”½”2¾š¾c”¾”¾“”½”qHq:@A@:@ƒ:@:A@:@:@3999A9G::G3øŒÁ¾™¾Žc„ 22323c”cc]„c(”]cc”232”dŽ“3¾ccdc¾“cdc¾¾GrG3A:kƒ@ :@3949@:A„: 3:: k@qAG:ø‹À“cc– Ž”,3]c]cƒc ]Žc]ccc¾”ƒ¾“ŽiŽƒ¾”¾“”¾„c””c39 99::A:: 2 @„:9:: A:::GkG2ø‹ÀŽƒc– 2”c23c“¾,ŽƒcccŽcdc]¾“¾“””““”¾Äcޓބ¾*d¾½¾Aq3AA9q :9 ::99::993 q9: 9::q:øŒÀ”cd–V,32]3\33233c]c”ccc¾¾””¾””Ž”“”jc”¾cd“c”¾@AG:::qq3@::9 ::A9:9:A@A@3ø‹À”c]c—T232c2”¾2-c,23c]cc]cc¾”“2޾“Ž“”Ž”“Ž““Ž“””23¾@@::@:A9@GqG@:@@::@AA3Ak@ :k@9øŒÀƒ¾]˜A]3”””“””¾”\]3c]cc¾”¾2””“Ž”“”¾”¾”¾”¾”¾”¾”¾”]c3: qqA@@: kA::A@ƒ:@@3G@9:949 øÁ”ľ2™P9]“”,¾,”½¾c3c3cd2¾””·¾“Ž“¾¾“¾“¾”¾¾Ä¾½”½”“ qrGqk@A9AAq::@@:9:A@G:9 k : øŽÁƒ¾3™=23,”“”]]c]”\c3cc¾3½””¾“”¾c]cc”¾¾”½”½”¾”¾”¾”:3AqGqGq@3@@3Gƒ: @@::3@A@k@ø‘Ác¾i3™]”3“,c]c”“cc3]ƒc)”]3¾½”¾¾”¾¾”“¾“¾¾””¾½¾¾½”½: :GkAAq::A@Akƒ@ :@A@: A@3 k ø’À”“™J2””½]ccc]“¾,”¾c,c]“]c¾¾”¾½”¾¾””¾”½¾“”¾””¾¾”:q9 :3AqG:9AG::@@Aj:@@jA3 @ø”À“””š],”c]”ƒc>]”2”” ]c“]9¾½”¾¾“¾¾””“¾”””½¾”¾½:Aq qG@rq: j k9@:kGA@@;9ø–À”d›&c3c]c]”cc”c”,c3c”3¾¾”¾¾”½¾“޾”½”½ƒc¾¾”9GqG:9:@::A@ƒ:Gkqq49ø™ÀޓޓœC]c2c]c,cŽ”¾2¾”2c2]3“]c¾“¾š¾”¾”½”¾”¾”¾”“¾”¾qHkqG: 3 qAq:9A@qGGq ø™Á¾¾-›c]c]3”“Žcc”””]c]c2cƒ¾ ½¾”½”¾”ccƒ¾”½¾@GkG3qG3@A@k@A:@AqkGk ø™Áƒ¾Äœ]cc2d”“Ž“,c””“”\3„c¾”¾”…¾”c]¾”¾¾”“kGqGqAq9:9:@9:AqGq;@øšÁ¾š¾2233c]”“޾“¸”]]„c¾¾½”¾“¾š¾¾c¾½”ƒ¾GkGkGqAk @qA:@qAq@3øšÀ“.,¾”,”Ž“”¾”“¾”¾“”c3]cc”¾”Ä”¾½¾”c¾¾“¾”qrGƒ: A@@qG::AqGƒAø™À“Ž”cž@]¾]“””“¾””¾”½”¾c]ccĽ”¾¾”¾½”“¾”ľ¾GqAqqG@::AkGk:GAqAj@@øšÀŽ“ŽžBccc,”,”¾”½d¾”½”¾¾”]ccŽcc¾¾“¾¾”¾””¾¾”½”qq:GkGk@:@qG kqAqAAq:A3ø˜À“ŽiŸ&3””2”½”“¾”¾”¾“Ž“c]ccd”¾¾“¾¾½”“ƒ¾ Gq:AqAq::@ k9„@:ƒ@A: ø˜Á“ŽžB“Ž,“”””cc¾”½”“-c”cccŽc¾Ä”¾š¾”¾”½”,G:GkG@:@Aq ::@AkA94:@@3ø˜Á¾¾Ÿ”c],”,””]c]3¾”¾¾¾”]”…c#¾¾½¾”½¾””¾¾”q:: q::@:@:@::Ak@GAqq:3ø™Â¾¾žBc23]]“,”2Ž“,9\”½”,”¾¾¾”ccc¾”¾¾”¾½¾”½¾G :3@::@A@:@:@AqAqAqG:ø˜Â¾2ž0cc]cŽ“-cc3]c3¾”¾”½””¾“¾]”cc¾”½¾””¾”¾”q3:GAƒ:k@:k:@kGkGkGk: ø˜Á“ŽcŸ7Žc]c3cŽ“c]”c”\”,”¾¾“¾”]“Ž”cŽcÄ”¾½”½¾”¾G qAqAkA:@@Gƒ@kGkG@:ø˜Á“ŽŸ22323”“ccc2c¾cc¾c“”¾“323\„c¾”¾”¾”½¾q 3qGk:A:@kqq;ƒ@A9:94 ø—ÁŽc“ 3“-c2”Ž ¾2-”2ƒc.Žc¾”¾¾””]c”cc½”¾½””q @@kG9@:2kGGqA:qAq@A:ø˜Á“Žc AŽ“2”Ž,“c¾“½”3Ž]cŽc“”½”½¾½”c]“]cc”¾”\Gk@AAk @3:@@AkqG@kG@qA::@ø—Á¾” C“”¸“¾c,”¾”¾“3cc””¾¾””¾¾”3]”¾9¾”¾@@AjAFk :@:qGAqrAkAqqG:9 ø•Á¾¾ 0,”2Ž“ŽccŽc2”½ŽŽc3“cŽ”¾”¾½¾”½”¾3\”¾“¾”@:A9AkGk„@:kGAqq9A@A@3:3:ø”¾2 +cc]””cc]cc]¾cc3½cd”½¾“¾”¾”¾¾“¾”“2”Ž”“¾@@:ƒ@:A@k:A@AqA@Ak:3:9kG::ø”Á“cŽ E2]c]2,cc,ccc,c¾”cc¾”¾¾”¾“¾“¾”¾¾”¾¾22¾”:q@;@A@q@Aq:39GqkGAqGq:Gq:@ ø“ÁŽc¡C3c232”, ” c2””cc¾”¾“¾¾”¾”¾¾“¾”½”¾”¾¾@A@k@jA3A9:G@ qGqAqGqHq::G::ø”Á“Ž“¡C3c””,¾”,c¾¾“¾,””¾”¾”½¾”½”¾”½”¾”c¾”qk@A::99::Gk94AkGqkGkG@::@ø”ÁcŽ¡ ,3]]”“¾ƒc5,”¾””¾”“¾½”¾”¾¾”½”¾”¾“¾cc¾GA 3@@: : @qAG9@A@AqGqkq: ø–Á”c¢Ac23c””cd2”¾½Ž“¾”¾½¾“¾”““¾“Ž“Žqk@@A@qq 3A@kG:AjA@rGqr:ø•Á”¾2¡C323½”23dc””c]”¾”¾”¾”“ޓޔޓ”Ž“”¾GA@kqAGkAqqqrq@A@qqGkGqG:9ø”Áƒ¾¡C3c”¾”3”233c¾¾cŽc“¾“¾“”¾“ޓ޾¾”¾“޽”q:9AAqGkG@qGrAGqGkqArqHq:ø”Á2¾2¡Cc2c¸“¾¾“3”]2c”½c”¾”¾”cc””¾“”¾¾“޾”¾G:@kGAkG-AAqqqGrqGqAA@q2G ø”Á“d¢@c2”¾”¾”½c3¾“”]c]”½¾¾”¾”½”¾¾“¾”¾“¾¾kAGjAqGk@A@G:qGrGkGjA::@ø–Áj¡B,cdcc¾c,”3½”¾”]¾”“Ž”“”Ž“¾”¾“¾¾”½¾”¾”k 9::3 3qG:@@kGkqGrqGA9:@ø•Á”¡*c3c,ccc”]”¾“¾2c”¾¾”“Ž“”½”¾”“¾”¾½”½@9:„@:Ak@A@qGkrGqqƒ:Aø–Ád“¢,”,c”,”cŽ“32¾ƒ”2”¾“”¾3ƒ¾”„¾”¾”¾:GqGkGk::qqA2HqGqGlGr9@@kø–Á“d¢>”“¾”Ž3c¾¾c”·”23“¾¾”““”½”¾“””½”½¾”qGkA:qA@@ qHqAkA3AqAAG3ø˜Á”¾2¢<¾Ž”“,”c2”“Žc”“¾,¾”¾¾¾Ž”“3¾””¾¾””½Hq :@@:A@@:Aj9 Ap3øšÁ,¾¾ 2,c¾Ž2””23”]9”Ž2”¾”½”¾”½”·”,¾¾““”½”¾:: 394@:3ø¦Á“d“¡'23c]c3c3½””]“Žc,¾”¾”½””“Ž“”2-”¾””¾”¾“¾ƒ øªÁd¢&3\3c]c2Ž]2Žcc¾”½”“”¾¾”3¾¾“¾“¾“¾“¾”¾ø°Á”“¡'2Ž“cc]ccŽ“cŽic”“””½Ž¾“”“]2¾”¾“””¾¾”¾“¾ø°Ád¢”dƒ””c]”¾¾”“¾]3]”½¾”¾“¾“ƒ¾”¾ø°Á“¢c3d“d“Ž“]c”“¾”“”]Ž“c¾“¾”¾¾”ƒ¾”“¾“¾ø°»2]2ƒŽc¡(]“d2cŽc”“”¾”c]¾c””¾”¾¾”½”½””½¾”¾¾”ø°»23„“]Ÿ*3\93,cŽc“ccŽd”“¾]¾”¾”””¾¾”½”¾”¾½”¾”¾“¾¾ø°Ác” )c]“cc233]cc3“”c”“¾“¾”½”“¾”¾“¾””¾“¾¾”“ø°ÁŽ“¡Žc]”232Ž”Žc”½”¾””c¾”¾“¾3]“ƒŽ””½”¾ø°Á”¤$Ž2”¾“Ž“”¾Ž“”·””23]“”Ži”“¾“”]cø°Ác“ަ”“””Ži¾”“¾”½d“ޓ޾¾”“Ž“Žƒ¾”¾Ž¾“¾ø°ÁŽ“¶”½”¾¾“Ž”½”¾½”½”ø°Á””øøÁc¾2ŽcøéÁ2”cc•øàÁ]”c“c””øßÄcŸøÖÄ,c­“øÈøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/%-%øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄåcøÖÚ]“¾“”½Žƒcc„3]øÏÇc“¾”“ŽŠ]c¾¾”¾¾”““3Ž”¾“¾“cøÐÆc¾”¾”¾“Ž“”½]c]cc¾“ƒ¾“Ž””]]”½¾”ŽøÐÇ$c¾¾“¾c“d“¾”¾”¾”½”¾“¾”¾“”“¸cc”¾”¾“ccøÑÇ”¾¾c]¾¾”½”½”¾”¾¾”¾“””¸ƒc]½¾¾”ƒcøÒÇ!c¾“32¾”¾¾”¾”¾“¾¾“¾c”·”“”¾”““”øÔÇ!2”c¾”½”¾½”½”¾“¾¾c“Ž””¾“¾¾”]cøÔÈcd½¾”¾”“”ޓޔ”ƒ” “Žc”¾”¾cc]øÖÈŽc¾””¾¾”¾””½”½¾”¾”½””› c]“”,2ccø´Ç“”½”½cc“Ž“”¾ƒ”¾”½¾””–”“323½”¾”ccŽ”“cø°Ç””¾””¾c””“ŽcŽƒ¾ ”½¾½¾¾”¾c]— ”½”¾]3]Ž„iŽƒc]ƒ23ø«Ç“¾”½cc””·”¾š¾“¾¾”¾””½¾˜\2”¾23““39jŽŠø«Æc¾Ž”ƒ¾”¾”„¾”¾½”½3˜]cc”ƒ¾ ”]3\]3c3cø¶Æ ¾”“”“”“”“ƒ¾“¾““ƒ¾˜“”“¾”¾”¾½”¾”“¾“”]2…”]”½”ø«Ç”Ži„¾ ޾¾”¾“”cŽ””˜ 2]c¾¾2]c]ƒc23]“”]c2]3¾”,¾“cŽcø«Ç¾”Ž“”“¾¾”½”“Ž32š]cc,””“cŽcc]]2]c]cc22¾2¾ccƒøªÇ“”“”¾¾”½¾”“cc3]3¾“Žccß3,”]ƒc]9”]33¾”]3]ŸŽiøªÇ ””¾”¾¾”¾cš#2]ccc“”cc]Ãi“hi22É™”Ã8c8b““3“ÉÃi22ø«È 2”¾½”¾ccœ]…cŽ\22ii23b38cbcbc229b88982É9bøªÈ 3¾¾”¾¾“””›%c32323\232382cbc 32988983:c8c]qq 332øªÈ2”ƒ¾“Ž”—”2,3cÓc2chcbc:3@9rw„: @rwA9:GqHr9q:ø«È ¾”½”“3“-2”¾”¾c]28™“28c829: 9::qHrq:93rqHq49rqxHrø«È””¾”¾”3’/]2”23¾½”¾883™b8iiqrG: 9rq:qx:qwr:qrH9xqx9:ø«Èc“¾“ƒ¾2]c2”Ž2¾”¾¾”ÃÃÉ,ic“9Hq kAj::rqHqr9::qrwHx9:xHrrx::øªÉ””ƒ¾cc23”“Ž“ÉbbcŸÃ™É839rqqAqGGkGr@A@A@AqxGAAqAxqrwxqHw:øªÉ¾¾”ccŽ23232”,”cbcibcbÉc :r3HxGkqA3 939:933393 9 9 3 9ø­É¾¾”½c2,c]c“Ž”™“i8 ƒ:!@3:rxqrqH9 3 9:GAq 3 3 3 33 ø­Éľľc3c3c3“¾c™’9b:39G:9 Gr9::99 3:39Gqrqr9@:3 3 3 33ø­Èc¾”cŒ7232c]c]cÃbcqG3rr49Gk :393399rqHq: : 9Gq 9 3Grqø«È”“Žc‹2]c]ƒc ™ÃibNq4 33ƒ: 93 3: 9 3ƒ kG9:9:3rqq qqHƒqHq:ø«Èc””“‹#2cc3]¾3i’92@rqrqx:: 33 9 3 3 3ƒ:qH9::9HqrqH9rHrqrq:ø«Èd“¾”,‰2]”¾ƒc3ÃÃ28xqA:@@:@Ax3 33 9 9 939 rqGqAqA 99rMr9:qwrMr:ø«É“¾”,‰;cc]cc]™ÃŸbr9:rqHw :93 33 3: 3 :AA9A@Aqrxrw::rHqrG::Hqrwr9ø«È2ƒ¾‰<,c]3c™“bcxxxqxr 39 9 933 33:9:ArqAAwrG:9:wA@x:9:wrxG:rø«É¾”¾”ˆ 3]“Žcihc2rqAƒ@: 9: : 34 3 : :9:ƒqxqrqxrrHxrqrqxAqHwrrw:ø«È”¾¾‡?c2c3¾É]8rx9Hq33933943 9 9 :3@:::@HrwHxGwrwqGxrN@rxrrMr::øªÈc““…*ccŽcc”½”“iwAxqG39 9 : 39 33:9A9:qGqqGƒqrrGƒr GqkxqGwrrGqGqøªÈcŽcŽc…,2]2””Ãih“rxxrqA 3:3 : 99 9 94Aq9A9AxrrxHrƒ@rwHw9H:9rxr:GqqrrøªÈic†]cƒ¾;™™“iwrGqGAk9 9 93 : 3@:k@A@:9HrqNqrw:@:@:xr:GqqHqGqGqrNqxøªÈ3cŽ2„.232¾”¾“™™’i:GqA39 :34 3::3@:9@A9 qxqxrGrqHƒrwHqrrGrwrxrxA@xrGøªÈ2¾¾ƒ2¾”ƒ¾=”¾Ã™™::qqG3 9 93 9 :3 :9AA@k :@:rxGxqxqxqNqrwrMrwrrMrwAAqrwrøªÈcƒ¾ƒC¾”¾¾”½”“™Ã:qGqr:39 9 :9: A9:9 ,@:GqGqqHqHrwrMrrqxrxqGrxAxqxGrxøªÈKcc¾c3¾¾”“¾¾”¾Ék:GqBq3: : 3:@3 99qG:@@:qqGrrG@AqxGrrwHxqHwrx99@rxrq:3ø©ÈOccd,3”½”“¾“ÃÉA9qGqA9: 3 9  9AqG4x::rqHrxrxr@ArxrwrGkGxrxr@A:Aqxq939 9 ø¥ÉJ”c,cc¾””¾ÉqAq:A:94 3 3 9:@@3Aj:9rqxqxqx@@j@@rxGrwrqrw@A@A9: 9::3ƒ: 9 ø£É.Žc3]c”c”™É:AGq:9:3@:9: @A@kF:rxrGrGrG†:339rrx9 49 3  …: 9:3:3ø É*“3¾ccŽc3¾¾Éi“G:@: :33q4 9:9@k@3AAA@xrƒx(:@:@ ::: 9Nqr9 3 3 :9::9:9: :33:9 3øžÈ 3¾¾c]c]“¾”““i9:93:9 : @3@;ƒ::2Grxqrwr9:9 9:9:::3 ƒ:3 3 …:99:39 ::9:3 9 ø›ÉL¾”]cc]c]”“Ãhi9:q:333:@@9A@:93: kxrwr:333 qA@ 3:9:: 3 9 399::3ƒ: 9:@:3::9 ø™ÈDc“Ž”2”c¾“”Ù“i@rG33: A3 3:9:@:3GqGrwrrx 3 3 3: 3 3 3: 9:::9 3 9ƒ:939ƒ:9:@: 3:9::93 ø˜È-Ž“¾”½¾¾”“™™“ÃrwA:9 39 :99;@Aq:xqrxr::99ƒ:::9::93@::9 :@A@@ @ƒ:::@ƒ: 9::9:3::3ø—ÈPcc2”,¾”¾”¾™™2rwA@:9  @: 9G:3@:qHwrw ::93:@::@:@99: : @A9:::@k@: ::@:93:9…: ::9399:9ø•È1cŽc]2”2¾Ä“¾“ÓGqG:3 k9:9 9A3 93xHxqrxH@: :@::@„:@399ƒ:GA:@3 :@9:@:@: „:99:33: 9:9ø”È„c^¾¾ ¾”““™™Aq4993 A,: :3xqrwHqxqx@: :G3:@@3@:@: :: @@399 99: :: 9:@:9:9::49::49: 939 : ø’È0c3¾2””¾™Ã™AG33:9 9 9q:xqHxrxqHxr 3 3@:: @k„: :A„:9„: 9:@A@:@ƒ: 993:9 9::ƒ:4:9:9ø‘Çd””]]2cc޽”ÙGkG3:A9: 2A ::qxrwrGqr::9: 393@:@:G 93 3:G9 3A@ 3:: jAk@:@@:@:@3:99::3::93 3 ø‘Ç\2”]ccŽ“¾”iÙqAq9:39::3@GrMrqGxrwr@:@:@:: 3 3@:3999 3  3A: 3:A@G:@:@::A:9:9::9:9ƒ:394:9 øÆA2”¾”¾cc,”¾“™™ÃG:9k@3q9:GAqxqrxrGrxH@::@:@:3:9 : 3::3:993:3ƒ9$ 393:@:@;@3 3 3 3: 9: 9:393::øŽÇ'¾“¾2”-ľ¾”“™™q:9GH: ::qGqrqxrMrqxq:@::ƒ@3:@943 93:9:94:: 9339:9: 93 3 99::@9: : 9: ƒ:9:4 33øŽÅ33,¾”¾¾¾”¾“™Ã™r4q9Aq:@rAGqHwrx9A@A@A@3 3 ::@3 3ƒ 4:9AA3 3 3A@@:A::93 9:9 ::@::@:: 9399::9:9 :9øÅ2-ƒ¾?2¾¾”“™jA:q:AG:qGrjxqHqrxG@A,@:9: 9 3 3::93993 3 39 9@:A@::ƒ 3AAkA::99…: 3 3„:9: 9ƒ:4øŒÄ43]cc“d2¾c”¾“ÃGAqqAAGqr@rqxAxrxxGqrrq3@A9 ::39::ƒ:94 39 9 „:@:†@ 9G@@:@39:3 @G2 3 :99ƒ:: 9øŒÅ0“c”c3cc,“c™rpA3xqrqGqxHwAxq:qGrxxr3:9393ƒ:@ƒ: 9 3 A„@ jAkAk33 33:@:3 3 23@A9 :@ƒ: 9::39 :ø‹Ã,c”]2޾cc3cdÃrAGAqxrxrqxrGqG rxxqxxr9:3„: 39::@ 93 :@@ƒ:@;@A@:@ 9:  3 9:9…:9:3@@AG:9::9:::3øŠÄ1“,”23”¾cc¾”oq@kGr@krqNrq@rAkqxqrxHw9 3:@::9ƒ 3 3 ::A@393@:@j:A@@k@A:@@:939::9::@:: Ak@k93@9ƒ: 93ø‰Ä,3]„¾c¾¾”““AGkqr@xrA@ qxGqHxrqx„:3@: 3:3393 39 :@k:ƒA:@:A@3A@AjA@:@A:@…: :@:9 G:3 „: 9::3@9: ø‰Ä623”½”¾š¾¾¾¾Žo“GkFqG @@3@AqrxqGrwx @A@: A@3 ::9:9:9ƒ:7 3 jA9::@k@k@A@jAjA::@:@:3 @:9:3 3 3@99::9:93øˆÅ%”¾“¾c¾¾¾š“™@kAkGk3@ qrxqxrxqxrrxA:ƒ9 3 3 93„: @::9:9::9ƒ:ƒ@+:93@A@A@9:@:@::Aj::3:9 :: 9@: :9 3øˆÄ5c”“¾cľ¾b™rGq@r@:xAqrxGrwHqrNw j@ 3339 :@@:@…:@Aƒ:0@9@@;@A@A@:Aj::A:9: @4:@:::@: @:3:3 AA@::9@39ø‰Äq]iŽ”“dc¾iŽ8™ÃqAq:xqqqGrqrxrxGxr@A3 93: : @:@: ::9:9@A@:9@:A@A93A@Aj@A@A@@A@:j9: 3:: @A3 @3::9k@:: @:3 @3ø‡Ãrc]cc,c,d޾¾cŸrGq@Hw:rGkN@qNqAxkGq:@: 9:jA:A:@j:9 9@A:@@A:@:@3: 3@k@;@@j::@A::9 9 @:@A93 :9@:9: @3::ø‡ÃV2”cc ¾”c¾”Äb™qA@@rr9rGq@rqAqAqxqr::9 39:@Aj@:AA:9:@:@Ak@9:9@3 49:9 3A@@;@:@Aj 3 ƒ:9@:3 3 3@:::9393A93:39ø†Ã ޽-”2¾¾cc¾ƒ¾2™“Gkq@rw @r kNqAGqrxHq9:3@A:@Aj::@:@::@:@A@::@ƒ:09 3@A@:Aj::@:@A@Aj::@: 33 @:@: jA9 :9:9493ø†Ã“”¾¾c¾”2ƒ¾š¾¾o“Gƒr#N@ArwrGqrxqGqxrx:3@A@3::::@:@: ƒ:!39 3@3:9A@A3 @A@3 9 3::@k@@A3::9ƒ:@9: 3 3:A:9:: :33: ø†Ã,c¾¾”¾¾”¾¾¾½™“@qG@kAjrq@Arwrxrqxqxx3k@: „:9 :Aj 9:@ ::@:ƒ@:@Ajƒ@-3 :@@ƒ:9;ƒ@„:@9ƒ:AA 93:@:9 : 93ø†Ã/]c¾c2c¾Ä“”™“ÉrG@k@:AwGqxqrxrxGxrN3:3A::9::@ƒ:@9:9A::@@A@AA@A@@AA:A@A@@A@Aƒ@"A::k@:@:9@:@::9j:AA3 :@:93:3ø…Ã,cc“cŽcŽ“¾]8ÙqA@rx9rGkGrxGxqxrxr:: 3 :ƒ@:::4ƒ@:@:@:k@:@k@k:@@k@:@:k@ƒ:@k@@ 3„:9::@: :9k 3@::4: 9 ø…ÃBc¾cŽcŽic”3cÉ™xkqxG:qrGqArxrGA@GGqA3, 3:@@A:9@3 @:@A:@:@:@:@k@„:.@:9::@:3 :@@:@A@:@:@:@:9::9::9 :@:@A:9 934ø…Ä7¾”c3¾d]ľ™ÃqGrrx GqrGqqrGjGkAqA3: @@Ak93:A@2A@Ajƒ:9@A:@::A::@:@::@@A@:@@;9::@k@A@::9::A3:@:@:9:@:@ @A939:ø…Ãt”¾¾2¾”9¾,¾¾““™HqGxq:qAq:AxGAkqGxrq: :A:@4@:jA@Aj@49@@Aj@:A@@ :9:@A@AjAjA@k:@A9:@AjA@:@::@9:: @::@:@@k9 :94ø…Ãc,¾”ƒ¾m2¾¾Ä”¾““™GrAGAqGrqGkGqxrqxrx9::@k@k@9:@A@AjA3@@A@A@A@jA@j A@AjA@A@A@A:@:@A@3@A@A@:@:k@ 9 3:@:@A3:@A33:9ø…Ã+c¾¾c”¾¾Ä”¾¾ÄŽ™“qrqkGkAG@xAqxrGrxwr :A@:ƒAF9Aj@k@ 9A:@:k@A:A@A@@k@A@:jA@k@:@@:@:@: @k@A@:A@Aj :@:@:A94 99 ø…Ã4“d”c¾š¾¾¾¾““hGqrGq@xqq@rxAxxqGxrx9:9::9Aj:9A@A@ƒ:@AA@A@d@@k@e@@Aj@:A@@;@:k 9„:3:@AjAA:@k:Aƒ: 9:9 @ 3 3:9 ø…Ã޽cƒc,¾¾2¾“™cqHqrrAxrr@rxqqxrqxr@ 3: @@::9k@ƒ:/@A@jA:@AA:@:@A@@:@A@k:9A@34@::@:9:@@:k9:A:: ƒ: A9@39 993 ø„ÃK“¾Ži޾“ÄŽi¾ci@qrMrwrwr@xqGrGAAGqAq :3@;9::9:@A:9:@::@:@:@:j:@:@k@A:@k@:ƒ@'A:@:9: @A@k:@::99:::@:9:A :93: 3ø„À92,3”޾””Ž“3¾”Ãh@rqrxrMrx@AqAqAq@qGq@:9A9:9:@:9::@:ƒ@:@k@9::9:9 @k@A3:@ƒ:9@A@:9@:AjA@::9…::@ 3:@9:9 49 3ø„À,]c2”c¾¾”“ľ“™“iqGxxGrxAqGkAqGqqrqA:9 „:@ƒ:9:@A@A@k@:A@3@::A3@A@9„: „:9 A@ƒ:9:@A@9:@@@3@:49:: 9:9 ø„À c”2޾¾”3“„¾:”Ù™qrxrqAqAqGkxrAqxrG3::9@:@:9::A:Aj@3:9c@@;@:i“2 ;j„: 9@:@@4 jA@A@k9@AjA@ƒ::k 3A9 :9 9: ::ø„Ã4”,c“¾¾2¾¾Ä¾Ä”™™Ã xrxGkGkArGAxqxGrxr3@:AA@@::9::9ƒA  @:@kb9b :@@::: @A@k@A@@„:@A:@k@A@93A@:3 3A9:: ::99 ø„Ã=cŽccŽ“¾¾Ä”2¾¾“¸™ÃAGxrGqx@Awrqrxrqxxr :@@kFAk@::9:@@393A@k39„:/8:@A@A@::@k@@Aj@:3@Aj:9A@A@:9493 93 9@@4:@9ƒ: ø…Ãuccc””c¾¾޾”“Ù™qAxqrxr@xrGwrxGrx@qA:9@:A@A@:9 :@:@AjA@ 9::@A::9k@49:@@A@::94:: @A 9:@j4@3: 3 9 A3A:@9 :3@ 2ø„Ä3cŽ“Žc¾2”¾”Ùqk wrwAxqqrx:GxAAx…:@kƒ@39349Aj@A ::@:ƒ@ ::9::@A@@k ƒ:#39@k@@3A@A@33 9: jA 3A9 93::jA ø„Äc323iƒ¾H“Ž“”¾”É™“qGq xr@xrGr@Grqqxrx:9993@  A@3A 3@k::94@:@k:: @@:j:39 9†:9@@3 3:93@A:3:F3 @@9:93:@9ø„ÄG23c3¾š¾ޓޓ¾¾™™kr3xArGqGkGqxGqGqG33A:3A@kA94k@A3:9:@::22:A @@jƒ:A:: 9@@ 99 A3 3Aƒ:@:ƒ@ @::3:@:@k:A::ø„ÄD3cc3c3¾¾2”””™GqA9AqAkxAqAxrqqAqA39 :Ak 3 3@3 k9:@ 3::i2:9ƒ:-@A9:9 9: ::@:499A@A99 3 :@A@k:@A@9A:A@3:@:ø„Ät]]c¾c32¾Ž””“,ÉqqAA:qxAGqxA9rxxGrGk9:A@@ApA@:9A@Ak :@A:3:hcicb: @A@A@:94:9:A@9@Ak@AA@:@:@:@@9:A@qA:AkAø„Ã']cc]”32Ž2c”””¾ÃAqGq@Awrqxrx qrqGkGƒ:A@kAAjA4A9:@9: @:@ b8b8c9A9ƒ:*@:@ 3@; kA kAjAAjA:9:Ak@A@A:kA@Ap:3G@qø„Á)23229¾cc””Ž“”“ŽcÉ2::A@kxrwAqqr@@Arxkƒ@AkGj@AkG99:AkA3“c@ c“ƒ20:3 @@A3:94@:@kFk 9A@qAFkA@G@k@A9k@q::G: kG3ø„Á&2Ž“Ž2]2cc޾¾c””,޾“Ž“cb@r@A:qH@@GGrGkƒx,:Gk@A@AApA@AA@:@: ::3 @39b9b3::9Aj@: 9A9::9ƒ:9@:Ak@AjA@kAk@A3:@:@@:@:93Gk::ø„À]cc”23”ƒcÄŽc¾c¾¾coißrƒ@=GkxrkGrxAwrx:GqGkGj@AkAjAj k9:9i9:3:9 c82:9 A:3 944A@AAƒ@A@AApAFAk@ 9:@@AjA@::@@: ø„ÀK3”c”¾]cŽc“c3“¾Äc“hiÃxAjrxAxqxkxqxrqNqA@k@A@k@9AG@A@GA@::9 9 ““i“i2ƒ: @:: ƒ@jAqk@k@@kGjAAk@A@3@ …:9A@:A@:ø„Àx]c“޾¾½””“]3”c¾j“É“™q@ArwrxrxGrxx 93rxrGkq 9A:9AjA:k@@:@339283 3™“22:9Aj 3A@ :@AA@AjA@kFAj@: 9::@9kA:@@k 2ø„À82”,”½”,”¾3¾””½Ž“¾Äc¾¾”“™“3qHqqNqrwxrqxrGqxxr@GqA@:3@A@ƒ:=9:9:@:9c“i2:rNq c@A:@ :@:@:9Aj@@Ak@A@A@49:@:A@:@@k@::@3 ø„Á”¾””2”¾“¾2¾”d2”¾¾Ä¾”“™rƒx4Gq3G:xAwHxrqxrx@qAkA@@:@@:9::@: :@Aib22@ wr 9cA@:9ƒ"AjA@k@@:A@k@A@k@A:AqAA@:@:9@4::ø„Á1c”“”¾”]”2¾“,¾Ä2¾¾”™Ã™rxqHrG@rxrwrx rwrrAqG„:@:AA9 ii’icb8A@A83rxrxr93@†!@@AA@:@k@@AkG@::9Fk@qA@:@:: :?:ø„Á2,”ƒ¾K”½c3cŽŽ“ ¾2 ¾“”™Ã™™qrGqrqAwrxqrwr9AwxrG:@:A@k@qA3hib2c2:3 rqxqxqNxk:@… 3:@:@:@:Akƒ@k@3 AqAj3::9:@Aø…ÃO¾“”½””cc”½3iŽ”“c,”¾”¾™“™GkqrqArwrN AqxrGrrwr@qGk@:Gk@Aihii292:xxqHxrNrxrx:@… kAk@A3 @A::9„::Aq@ ::@::@ø…Âcc¾””¾¾c,¾¾c,]3c¾”„¾5“”q::xNxwrxrqxxqrxrGxxr@@A@:@:@@ji“b“2cb2 qArwGxqxrxxƒ:9ƒ: @9:@@-@qkA9:A:@9::@@j::9@:9Gkø…Âcc޽”ƒ¾ c3”d”“Žcƒ¾ľ”½xxGkwrGrwHxrqGqGqqrqxrrƒqBrq 3 qrGch 3GqGqAq:rqGqHqrGAqA9AA@qGqAGqqGq 9GqGA@:3A@:9H@AkG@øƒÃy¾”½”½¾”c3“c3¾3¾ÄÄ”ArqAGrq:GqqGrr 3 GxAGqxrGGqHkxrqGqqrGrqG3 @:@@:39GqrqGqrqAwrqGqGqGqAAjGrq jkAAA@:9Aqk@Gj :@:øÃ¾“Ž”ƒ¾c323d“ƒc¾i]”¾¾“qGkGGq: rqGƒxQAqxrGqxxrqrqxrwrqHqGxxqAk@kAxrGqkxArGqHqHqGxrqrGqkGkGkAq:AAk 2Gk@9AkAqkAA@A: @Aö ,”¾“¾”Äcƒ¾ dcc”c9”¾2ƒ¾b”qr:9rxr@xAqrxxAxqx:rxxGqGqGrGrqGrqGkA@kwrxrGGrxqqGkqGkAqAAFrrGkrGAqG@rGk@GA@:9GA@:A@q@::9:kqAóӔޓƒ¾ c”¾c”Žƒ¾k2¾¾“3ľ“ xr9rxxrxqxqxqrGq:9rrHqrGrGrqGqq @@Arxqxr@k@AAqAG:@:Gk@3A@AkAFkq::@qAqr@kA9:Aqk:q@A@k@A:@@A@:3ñÂy”޾“¾”c”¾c””“2¾¾޾“3¾”Ax3:GrqGAqGGql kqxrG@qqGxx9:@A:: 3Ad@@ 3@ 3GqGq3 3 qGqGjA@@qAA@@:qrq G@@:9AqGAGk@k@@3:@ :@k@@ 9::9”ƒ¾>,3i3cŽcc,”,c¾““޾2cc¾“Aq q9GqqHqrAqxxAqxrxAGrrqxqGr9:AkA@@:„@AjAqAqqH@rxqAqAq@r@:Aq@rrqG:ƒ3:rGkG:jGq@AA3Aƒ:AA:@49: ðÂ Ž“c3ľcƒ¾vc”c32dc]c”¾”]”¾¾ xxA3xxrqxxAqxx xxr@qGxrxGrxqG:@@: - -@: :9GqAqxrxxrGqAxrqrqAxqxGrq:@A9:AjG3AAjH@q3@@:@@q::: 9: ïÂy,””“”“¾cc3¾cccc3”c¾¾”2¾¾9\¾Ä“Axx3 xxqrxxAqA33GqqAqAG3GAAkFr@@rx@AwrGkx::AqGkGAqAq:@:@:@:xqAA@A:@:AGkG3A@@9A:AG:q@: q@@:@9::3ïÃ5cd“¸””¾c2cdc”c3¾c¾Ä2޾2c”¾Ž“kx 9AxHqAG3A@rqA@Aƒ:@kGkF3ƒ:. j@krrwA9:9 3 3339@:@: ::@::@@:39:AwkG@9G@kAƒ@k@@AA@q: ::9 :9ï c””“¾¾ccƒ3ccc,c3,3cc”ccc¾Ž“¸“¸”“dc¾¾”¾¾”¾“¾”¾“¾¾”¾@x@:9qAkGq:: øšÄ”¾ž]c”¾c]cd“Ž”cc”¾¾”“”Žcƒ¾“¾¾“¾”¾½¾¾”½¾¾øªÄ”¾ž32¾”“”ƒ¾ “Ž“”]c¾¾”cƒ¾iŽ“¾¾”ľ”½¾”¾”¾”¾”Ä”½øªÄ“¾”Ÿcƒccƒ”!½Žc¾”“¾c”“””¾”¾””½”½”¾”½”½”½cc½”¾øªºc,,…Ž”½ž-]cddcc“¾”“޽c]”½¾”½”¾“¾“¾”¾”2¾cj””“”]”øªÃ”¾”.2c]cdc¾“”,323”d”¾””·”ޓ޾c“ޓ޾¾“”½”¸“3øªÃ“¾Ä]Ž”]ccic¾“Ž3””d“”¾“¾“¾””ƒ¾“ޓޔľ¾”¾”“¾¾øªÃƒ¾8¦”¾“¾”“އ ޓޓ”¾š¾¾”“øµÃ3ľ]øõÄc¾“c•cƒ™¾2øÀžc]–”ŠŽ“Š3øÅøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿÉ& ¢Ø2& ¦ž /' ¦ªN&Ë' ¦ªN&-' ôÐÉ' ôÐ2' ÷Ð /( ÷ÜK×Ë( ÷ÜK×-( C³É( C³2( F³  Qý: Qý: Qý: Qý:,/&-&øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄêcøÑÍ‘ 2””“2ƒc„2øËÌ c¾”“”cƒcƒ2]”¾“¾”Ž””33ޓޓ3]øËÌ$”½¾”¾c”””“¾“”¾”½”“”]c2””“¾c3øÌÌ"””¾c””“”””¾”¾”“ޓޔŽcc]¾“¸”23øÎÌ!33“Ž”¸“”Ž“¾”½¾”Ž“”c“ޓޓ޸ÏÌ 23cd“¾“Ž“”“”޽”¾”“Žc””“Ž“3øÐÍ]“c”Ž”¾”¸“”Ž”“ƒ” ”””¾”33øÑÍcd““c”Ž“c]”½”½””“¾cøÓÌc”c”ŽccŽ””c”¾“¾Ž””¾323øÔÌcŽc””¾“ޓ޾”¾”¾”¾“ޓ޸ÙÌ“Žcc¾“¾”“¾“¾¾½””½”2›2”“ƒƒ3øµÍ ”cc””¾”“””¾”„c]3]›3¾¾”¾ƒc2cø±Ì”cŽ“”·”¾¾cc]œ2޽2޽”¾Žc”ŽŽccø¬ÍŽc”½””¾“Ž]3]œ,2””3c”“3933223]”“cŽ“ø¨Î 39”޽”c]8›!223” “¾]””“¸3cc3c]2”“¸ccޓ޸§Î 2]“¾“”ޓޓ›!3332¾”Ž™”2c“”dc2,”ccŽø¨Î 3””¾c›\32Ž”””cc™c2ƒ9™Ã™Ž“2„cƒ™cø©Î cc¾“Ž“d¾3œ"cŽ“”c22“ii“8\8c8cb929“ccb323bc8ø§Îc”¾¾“¾— “Ž“,ccŽhƒ2cbcbb8b9c82382cbc8b29bcbøªÎc”½”¾”c“2ƒ”$½”3c‡™ic98983229 :GkGkq 3:AGq 9:GqHøªÎ,Ž””¾¾c“'c3cc™™,™Ã™cb22,2c::3kGqGqAG qqGrAq „q@ø¨Î¾“¾“]‘\c3i,22icihcb qq:ƒ@:@r9 3::9rq::qGq qHqHqH ø§Î,”¾”¾cc,c33“ƒiŒbc2A q:GqGrq 3@„:: :9@::3:39ø«Îcc¾“¾]cŽ.c2Ž292“22bc2989@3q 3G3 :3 :9 9:9:9: 24 9::9ø«Î„cŽ“”‹ ]233c™Ã9ƒi$ch2: 3 A3 3 99 9 3 9 9::994 ø¬Î]cŽ“,Š23c2,2“™b,@qqGq q k9 33:93 3 343:93:9:9:39ø¬Î2”“¾Š32]c“”3Ã22crqHqAqAqrqG3 3 3 9 93:94::3: 9499ø¬Î,”¾”,‰32Žc3]2™™92A qqrq: 9:9 3 9 93 9 9GqA9:939:3::94ø­Î2”¾”,ˆ8]22”2“c22qAqqHqGr33 :39 9:9 9: A 3GqG3494::Gø©Îcc¾“Žˆ832Ž”™Ã:rqGA9:@9::933 : 9 9: 3qqA@AjA3 qGkHq:: @A qø©Î]c¾c‡:,32””i“q@rGqA:@49 333:9:9 qqG:qqHq 3 qqGq qrqqG3ø¨Îc]ccކc2”™ibiqrGqq@3 94„:"3::2:9:AqAqHqqGqGqHqrGq:qGqHqG ø§Ïcc†=cc¾””““biqHq@A@;9333:99 94 ,: 3AA@AjHqAqqAkGqrAqGrGqrAjø§Î23¾”‡<¾”½”’iibrqAq: :93:94::9 9 :33q::qqrqG39rGrGq A qGk 3AAqGø§Î3\”¾…>¾”“¾Ž“™Ãc@@qGA39: 99 9:394 9:3G9 qGrGqrq3 rqqr:qAkAkGAkqGqø§Ï]”c“¾“¾”“”¸ÉÉ@qGqq9:33ƒ:) :39 @:@:9:GqGq qGqGqqGqGqGq@qqGqq@:qrGø¦ÏG3c”””·”“”ÃG:kHk@:9 :::394:93:: 3rqAA@qGrqHqGlGkrGr@rqH@rGA@rø¦Ï#c“””c””¾ÃjGq:@@43:943 39ƒ: :GrGrqqrH9rGqAqqHqGrqH@Aqrqq 3ø§Ï)]“Ž3“Ž“¾”™ÉqA:Gqr 349: 9:3 AqAqG:GƒqHwHq:9 rrqHAqAqqGr9:9:::ø¨Ï0]i32,”33“””“i:Aq: 9:3 949: 3-@ @3rGkGqGkq9 ƒ: 9kqqGA93:9ø®Î"]c¾”,33c]“Ž“h“ 3:9 39 3 3 ::„@ @qrqrqH9 :9:9:rGr9:9ø®Ï>c“32“c]”“”Ãi“ :G3 949 94:9: 9 :3@33rqr:@:@ :: 9::9:@ 39:ø¯ÏcŽ“]3c]”“Ž““ih:qG39 93  ƒ3:@3ƒ rGrG:9:9:: :9ƒ::99:9ƒ:ø¯Ï9]c”“¾”¾™™bÃrqG3:39:3 33 9: q9rxqx@@:::939::@ :933„:@ø¯Ï3cc”Ž”¾½””“biAGA@:9:3 @3@::9G:9Hqqr 9::93::3…:@@::9ø¯Ï4]cc¾“”¾“¾”™“k@k9:9 : 9:  9G949rqHqH39::::@94:9:„@A:@@: ø¯Ï=“¾]¾”¾“Ž”™Ã“Gk::3 A3 9q :GrGqGrwrw::@ 993::93:@::@:9 3ø°Î 2””c½”c”ƒ™!jG:949G3@ 9@ 3:qqrwrqr9 93@9: …: @:@:@:: 9:ø°Ì/2,]”·ccŽ””ÙÃG:9:q 3 3 kxGrHwAGG::93 @4:9ƒ: @9:@::3„:ø°Ì@233“cŽ”½”“™ÃA9:9 k9 A3 q9GrqqxGqrrq@ :9@:@ 9 9::@9:9::@:9:: ø°Ì3]c]cd”ƒ¾5“Ž™™k 9A9A9 @3qrGrGqkGr@3 9 9:3::99::9 : :::9 ø°Ì*“c2”]”c“¾”¾“ÙqA9 k3:93GqrGrqrHqG@:@:3 „:@: 9:9: 993:3 9ø±ËDcc¾”c½¾c¾“¾“Ž™™AA9:3:GAqrGrw:Gqr@::: :9:@:@39:: ::33: 9: 39:ø­Ë”޽”]”c”¾c”ÃqA994Aƒ:0qqAqGqAqrGrqr3 9393@:3:9439 9339394:9 :ø©Ê,3“Ž“”]ƒ Ž”i™qAA@:„@qAqrqrrGrwrwr9::::949ƒ:@ ::3939 3::„:933ø¦É23“Ž“Ž\3”¾ƒ“qGkƒ@,:@kGqGrGxqxrGrGr49Ak49 3:@::99: :33:9:ƒ:9…::9ø£É&33]c¾c3c”c¾“¾™iq9Gr:rqAkrGrqGAqrGxrxƒ:)9:9:9:99 A9 :9:333@::@::::99:3:9ø¡È*2,ccŽ”c”]“¾””“™AA@@:AqAGqrAkqGrqrw:@:@„:9„: ƒ9 :9::339: :@:99:9::9::93øŸÇ23c3”½c¾¾c”“¾iÃqqrqAƒqƒ@"rqGrqHwH3@A99:3:@:9:: 39:::9: ‡:9::…:9 9ƒ: 3øÈ'c]“3”“¾¾c¾”c”]i™™qGqGkG@ 3AqGrxqGrqx:@ƒ:@ƒ:@„:9: : @:3:3@@99ƒ:::@93::9 9::99øœÇ*]]c]¾¾“”¾c¾c”¾hÙrGkG@:@kGrGrqHqqrx::3@ƒA9A9:@::::9@ ::@:A@3ƒ: @::@::@::@ƒ:9ƒ:9 :9ø™ÈG2”“””“Ž“3¾¾™™ÃqGA@:@rGkqrqrwrGGqGq:k@::A@:::3@@3: 9::@@::::@@ƒ:94:9ƒ:@::9ƒ:9ø˜È””3½”3cc]”¾ƒ™rGjk:rqGGrGqHAGrqrqr9 :99:@ƒ::A@@ 3::933@::::@@9ƒ:9ƒ: :99:9::9::ø—ÇJ3c,”2Ž””¾c¾¾“™““G3rG:GrkG:qrFk@rwHrM::9 9 :kG39:9:A:@93: 9::@A3@:@ƒ:@„: 99::399:9ø–Ç=\ccc޾¾c¾”“¾¾™“™qGqq:w@q qrGqqrqrwr :@::939 9: 3 :9:@: 49ƒ: @: jA@@::ƒ@:9:99†:9:9ƒ: ø•ÇRc]c]¾c¾”¾¾”¾””¾“ŸÃrGrG:@HrqGrqrHqNqHxq :39 :: 33:9339 9 @@9::@:A@A@@:@:@:::9ƒ: :@::: :9ø“ÈW”¾¾c”½”“¾¾“¸“]hÙwkrw kqrkwHwrwrqrq 9:9:939:9::9: :39:: @::@@j@;@:A3 33:3:9:ƒ:3:99:9:9ø’ÇN”½”¾”“¾”“¾”“3¾™™ÃrG@A3GqGqrHqrxGrMrGk3:; 9 3 ::9 9  : 3@3@3:: 3A@@3 9 9ƒ:@:@9:ƒ: @9::9 3 ø’ÇDc”,”””޾¾“™™qGkA:AqGkxqxGrGkGkG9 39:3993:::: 33:9:9:@9ƒ:3943::@:@::@::93@ƒ: 9:::::9øÇF”,”c””Ži¾Ä””™™rGqG:qGr:GrqGqAqrqq ::3::3:9: @3 3 :@3A@:@:@‡: @:@:@:9 : 9„:9::3::øÇ ccŽ“”¾c¾ƒ¾““™qr:q:Grq:GrxAkGqxHx:9ˆ:9 39 99:93A@:@3@ 3ƒ@A@@9:@:@ 3A9 :9:@::: 9::9øÇ9¾”c¾”½¾Äc”¾¾““™qx9H@qrM:qGrwqqHqrq3:: 9@9@:@::99 93ƒ:@@Aƒ@A3 @:A@::@3@: 3:-@:3 @Aƒ: @:9: ::øŽÆ923¾”¾“”¾”¾¾””“¾”™“GrGr@qGrrqqGrHrqxqxH:: 9 : :@:9 9 : @ƒ:@@;3@Ad@@: 3 3@:3 :9 9: : ƒ@:k9:@ƒ:9::9:4øÇ0”¾¾“޾”½”¾”“Žc’i:rqq@rqA@xGqrwrGxH9q3: 33 ƒ:33@@::@ 3:@@A@:3@9 3 9:@…: @::9:A:@@ƒ:9ƒ:@ :9øÇ ½”¾”“Ž“ƒ”&”¾”ÓGqxrAqGk@rrGrqxAqqGr 3:9:: 39ƒ:@:3:9::ƒ@ 33 :9: 33 „:@:@@:: @@::3 @::@:9@::3øŒÇE¾“¾cޓޓ¸“¾”¾¾“™“AxrxxGr@AwrqrGqGqHqq ::3::9 :99@A:@@A:@@;@jA@A@Aƒ@ƒ:@@ƒ:@:399ƒ39 3@:9„:@: :3øŒÇ9cŽ“”””“”¾¾”¾¾™Ã™qxwrqrA@rGGqGrqrrqr 9:9:@9:@::9 3 :@Aƒ:@3:@A@@:k@;@:@:@:9ƒ @:9: ::3: 3A@@::9:øŒÇ”””¾¾”¸“]¾Ä½”™Ã™9HxrGqGƒqAqrGqrMrq : @:@@†:4@A9:9@3@:@@:k@A@:@:@@ 3 :@9:@:: 9::3:3@A@:3@::3@:ø‹Æ)c¾”“Ž“¾”¾“]¾”c“¾¾”ßÃÉqrxGqqrHqrrqqHqxr 3ƒ@„:@3ƒ:9@„:1@@A@::3:9@A@:3@:3 ::9@::@3@:@ @A3: :@:::: :@ 9øŠÆJc¾¾””¾¾“2”¾c””¾“¾ÃÉ™rGxqAGAqrGwHxxrwxGq:@A3@:9:? @:9:@@;@@4@A@::@::@@ƒ:@::@9:: k::@::@3@::9::@9: @: øŠÆE“”“Ž“”“”¾Žc2¾]“¾”¾¾”É™Ãqr:qrAwrGrxqrxqH@r::99::9::@A@A:9:@:@@: 9@A@Aƒ@;ƒ@:@: 3 3@A9 :39 :@ @A@…:ƒ:9øŠÆ޾¾Ž¾“”“]3“”¾“¾“¾¾Éƒ™UqN@qArwrwrx9Hx@rxr@;93@@:Aj@@::@ 3 3 3:@AjA:k:@AjA::9:: :: 93 3 @:@3:@k@@349:9 9ø‰Ã9]2“¾“”“Ž”¾¾¾c¾”¾”¾”¾Ã™2rrq:GqrxHqGrqrxqqHq@: ::9A:@@A…:29:3:@:94@:@:@:@A3@@::@::9: 9:@ :9:3@:3::@@49 9:9 ø‰Â]8,””“Ž“””“ƒ¾`2”“¾“¾“¾”É2GxGq@rM:qGqGxxqxGrqA9@@:3@@:3 3@@9:39 @A@: :@:@3@@:A@::@@::9::@::@:: @@:@::@ 3 ::ø‰Æ1޾”Ž“”·”¾¾””޾”¾”½]É9qrqHrGqAxrrqrxrrqrGr9;@:@ƒ:93 9 @9@:A3 @A93 93ƒ:@@:@@9:@::@@::@@:3 A:@ƒ: 9:93 ø‰ÆJ““d“Ž“””“¾Ä”“”¾“”¾“ÃcGqAwkGqrxxGqxxNqGxqA @@3 :@A@@:@:A:@:@A33 9::@:@„:AA: …: @:@9@9 @:ƒ@3 j33:ø‰Ç1Ž””””Ž“””·””¾¾“Ž™8AAxrAqrxqxrGAkxrqr@r:94 :ƒ@:@;jA@@A@A:@:@@:@@;ƒ@#:@@:@@:@:@:@:@: :@:@::3@A9A@9:39:øˆÇT“Ž“””¾“c]3””“޾¾”™™ÃÉqxAxqGxrxAqGqxHqGqr@@:A:@Aj@:@Aj@:j:@A@:A@:@@;@A@Aj3@:@:@„:A9:@:k@::9::9:A9 :9øˆÇ c”cŽc”ƒ¾ 2,”½¾¾””“™“ÉrxAwrAGAqqxqxrx@rƒq A@::@:A:A@:Aƒ:Aj@:@@:A3@@::@:A@A:@„:@@3:@:@A::@A :: 9:4øˆÇc]“”]cƒ”¾¾”“޾2”¾“™™“™xqGrxƒqxrHrwrxGGrAqƒ:@k@:@:@@::@@::@;9@@A…:@@:jA:ƒ@::@3@: 3:@:@:@ 9 4393øˆÇcŽ9c¾3“¾¾“”¾“”“Ž2ccƒ¾#“ÙxkwGrxGqxr9:@:rrxqGrq@@A@@AjA33ƒ:ƒ@ A@kA:j@ :@@::„@::@::@A9A: :@:@3:93 39ƒ:øˆÇBc3c¾2Ž”½””””]3¾¾Ä¾Ä¾”Ù™rrxqrrxrxx:rGwrxrGqrq:@k@A@@A@3@@A@;jƒ@)A@:3rq:3:A:A@:@:A@::@3@:@: @:2 ::9 3ø‡Çc]c3¾”¾“]”¾“c¾Ä¾”ƒ¾,“™™ÃŸxxHqxrxqxGxrqHxqxqGqHkA@:@k:@@A@:@::@;@ƒ:'@3rx9@@:@:jA@3 :j@:@: @:@:3:9:9:3::3ø‡Çncc2¾“”¾¾”¾9”Žc¾¾”½”¾¾”ÃÉÃÙxqqxq@:rrwHx:xxrrGrqA@@k@A:@:@A@j::@A@:@:3Nqxrr@:@AA@:A3@::@:@-93 3 @ @4: 9:93ø‡ÇcŽc¾”c¾“,¾¾“¾“¾½”¾¾”“”cƒ¾:šÃÙrxHArNqxrwrw:@@rxrGqrqA:@AjA@j;A@@:j::3 xqxrxxrxr@k:@@ƒ:@ƒ:@:: @2A949:3: ø‡Æc”¾¾c¾””“¾Ž“Ž”¾”“¾”cƒ¾<”ÉA@:xwxrxrxrGxqHqxqx@rGqq@:@:A:@@:@A:@@9rqGrxGxrqx@A@::9@ƒ:@ 9 @2 :9:3:@39 ø‡Â 2cdc””ƒ¾ ”“”””¾”ƒ¾"”,”ľ“rx:@qrqGxr::GrrxqGxrxrGqGrrx…:0r@3:@49HqGrGrxqxHx@@k@@r:@::@3rqqA:3@A9::::@ ƒ9AøÂc,3“Žc“Žcc¾Ä¾“]“¾“”“¾“”ƒ¾2”“¾¾xxq:GrqrxqxƒqxGr:xrwrxqrqxrGƒqGxrxA9rqrqGqAqxrwƒr#qqrGrr93HqrGAqrGr94:39A:39:qH@øÁ"c”d“Ž“3“޾¾”c3ޓ޾”¾¾”“¾Ä¾”ƒ¾X”¾qH@xrwHxHwrrwr::GxxrxHwrGqxrqrqxqGkA::AkGA@::@qNrGqqrwrrGqrqGqqG@:qrG:3:@@ @AAqq:A@öÁcc3”¾””””¾¾šƒ¾“”޽”2¾¾2¾”¾¾””¾Ä¾“Gq@:xxrwrƒ:qMxq:ƒxBqxrqxHxrMrGxAqGkGk@qAk@xGqrqqxHqHrwrqGrGqGrqAkAqrGq :@: :q@qAAq:@õÁycc3½”“¾“”½”¾¾“¾Ž“”“¾32”ccc¾Ä¾“¾¾Ä”rq:@rxxqHwrGqqrrx@@rGrHwrrwqrqxrqGk9AAqA9q qrrxGxGqrqGqGqGqGrqqGrqG:A9GqqA3::9qAA@@kG3@:ôÁ]c,ޓޔ¾“޾9¾Ä,””“޽޾,”c”¾¾””¾¾””½¾“xx:@qGrxqHwxqGrMrqA@Aqxr:::GGAq@::A@k@xrx qGGkqrGrGqG„:3GqAAqGqq:qA@: 3G::GqAkqA:9@A::óÂŽ2”“”¾””½c]”¾¸“]c”“”2¾”]ƒ¾“¾“¾¾“”Žƒ¾ r:rA@rxqrrxƒ:#qHxqrGqGqG@A@qA@A9A@AFkqxr::qAqHqA@…:AqAqGkrGA@:x@AqAq:qGkGA@q@@Aƒ:AòÁa¾”c޾“¾cc“¾,”¾“ޓ޾2”½32ľ”¾”¾¾“c¾¾Ä¾MAj::xxGrGq@GrqxrqGrqrxqq::@::Gk@kAGAGGA9::qqxq::9:qGrqƒ:AqGjA@rqA3q@:@GkAq@qAAkG@@::@:ñÁ(“ޓޔ“¸”Ž”¾”¾”¾”“”¾,”¾3]“¾“d9¾¾c¾”ƒ¾xx::GxxqrGrxqHƒxAqxGrxGqr@@kqA@9A„:2qGqGrGrGGrxGrqqHwA@kGkAqqG@3A@:qrFAr@qq@qA3::9@::𔓎9¾”“”cc¾”¾“¾”“ޓޓޓ”bƒcă¾b2¾¾c¾½”¾”½xG@qrxrxxrwr@@qrwArqGq4GxqGqA@A@k@qFkG@AqqxqrqxqrGrGxrxqAq@rxAqA3@krGqGkqGAAqAA@:@:@A@9 ïÂ2c¾½”½¾]\cŽ“¾”¾“””·”“Ž”]¾”¾”¾”Ä]”“”¾“”“¾”¾q:A@:GƒxGrxq:AGkG@@::@qAqAqr:93AkGk::@AGqHqGqrxAFkA@AqGrxqxAq@A:xGkG:AqqA@q@::@ƒ:@:A3 îÂc”¾„”¾c””½”ƒc”޾“Žcƒ¾“”¾¾2¾¾2ƒ¾c”ƒ¾Mxqxq:qxrMrxrGkGqA@kGqGqA:A@:rx@9:9qrq@A::qH:@:Aj::9:9A@@:9::@@qAq:qAGqAk@Aqƒ:9@A:@9îÂ?]c”¾½”½¾“Ž2¾”]¾”¾,“””2c“¾”¾“¾¾9]””“¾¾”½””¾”xxH9HqxrqHwr9:94@…:A@k@9HqAAqGkGrx:9:9ƒ:+@:@:@@A@A@k@AAGq@;AqA:GA@qA@A@kG:9G::@9A:3:íÃd2¾“Ž”¾”¾3¾”¾23½¾””¾3c”“¾”]c]¾½¾“ޔĔ¾½”c½”¾¾”qrGrwrqrGrH@:9:GqAj:3GkG@qrr@A@@::9GGAqG993GqA9:GƒqGkApAq:qqAkGk@qAqG:q:@Gƒ:9 íÄ,¾”2¾”½”½3¾¾Ä¾2”¾Ž“”c]”]3¾¾”½”¾¾”“¾¾“cc]…¾GqGqH„xqxqHqGqGA@kG::9:AqGkƒ:qGrAqqA@rrGqqGqkGqrGrq„AGAqG@qGAAq@kGqG;:@::9 9íÄ>¾”]“¾”¾”“”½3”c””c3cc”““¾¾Ä¾”¾“Ž“cc]¾¾”32ľš¾qxrqxqxGqrqHqƒr3qrqxrxrrxqrxGAqGrxrxqrqxqGrqHkGqAqArqGqApk@k@:Aqk@qƒA qAq3@:3:3:íÄ“¾]”¾”“Ž“”¾“”¾c”Ž“Žƒcj¾¾”“¾”¾½””¾¾”c”¾“]3¾¾½¾”rwHqGqrGrwrqNqGqGrGqrMrwHxqrwrqxrwrHwHqrqGrqGkHqGqA@AkAA@A@k@AqGAqq@kG@k@: @:9 : íÄ”c”“ޓ޾”¾”¾“Ž””ƒc ¾”“¾”“Žccƒ¾ c””23b3¾Ä†¾/”qrqHGqAqGrqGrqHqxrqrNxrxxHwrxqxqHqHqqAAqG:kAqAƒ@qAqGA@@Ak@AqA@:AA:Gƒ: 3:9íÄc”“ޓޓ””“¾“¾¾“Ž“d“”3]]3”2]3ƒ¾”c”¾“¾”]\”””“”¾Ä¾Ä¾”¾”¾ƒ@ A@kGkGrqNqxqƒx7qrwHqxxrGrrqrqqA::9:@A@qAjAk@:qAk@qkA@kA@Ak@qA@k9:: 9íÄc޾“Ž”½Ž”¾”Ž“¾Žc]“Ž“3““„¾“”¾½c½””½””]¾¾“¸“”¾¾”“¾“„¾F@:kA@qGqqrxrHxGrxrxrxrxGqxGxGG:@:@@AjA@A@@:@:qA@qAqAAq@AjA@@kG3@:@ :îÄ?“”¾“Ž“”]¾¾½”]cc¾c32”Ž“”]”¾”¾”½”¾”cc¾¾“”¾”“Ž“”¾“”¾”“¾”¾”“ƒ” ¾¾GqGqqAqqGxqxqxAqGr::qq::GA@@A@„:@@::9:@@:GjAAqA@q:Gƒ: ::3 9îÄ cޓ޾“Ž]8ƒ¾-”,”¾23“ޓޓ޾“¾½””½c”¾”¾cc¾”“”Ž“]c]c]”¾“ƒc“Ž“¸“¾“…¾ľAGqGAGƒ@/A:@¾GG:Aqqkqkq:rwrGkA@::@:A@:@Aq@@qG@3:9 9@93îÄ=c¾“”¾“c]¾š¾¾Ž“”]“¾32¾“ޓޓ¾”¾”½””c¾¾”¾c”½”¾”]c”“Ž“”½”¾”¾”„¾”¾¾”ľĔ…¾@:kA@kG¾¾Aq@AqGAGrxqrqxqGkAq:@„:@::@Akq;G:Gk: 3 3îÄ12Ž””¾”¾”“¾3“ޓޓޓ”¾”2”¾¾”]”¾¾”]3“”½”cƒ¾”ˆ¾”“c„¾”„¾“¾”‰¾ ½¾9:9:GkAjƒGrGrGkFA@A@:A@q@A@::GqGk:G: @ 39ïÄ8Ž””½”¾”“¾””c2cc]””Ž“”“c”]“¾“c½”c½”¾¾]]”½””,”¾½”¾”„¾Ä”c”¾Ä“¾”8¾”¾“¾”¾š¾“¾”¾”¾9ƒ:&9AqqkGq:9AGk@qAAq@qrr9:qG@:qGk@39:@3 :îÄy“”2”¾”¾”“Ž”¾”3c3¾”23””Ž“¾Žc“]””Ž“”cc¾”“”2”¾“”23¾¾Ã”¾c“”””“¾¾32¾]3\”¾“¾“¾”¾¾½Äcc:GA@AAFAA::9::k@Aq@qAqAwqAqr::@:9 @ 9: 3ïÄ8]”]“”½”¾“¾“¾2Ž޾3½””Ž“Žcc”c,”Ž“]]¾¾”¾]\3ޓޓ”¾¾ƒc#c””½Žc“¾”“¾Ä¾c¾”¾¾“¾”¾”c¾AjAjAjAƒ:@::9GqGq:AqAA@::Gqr@:@@„:3 @3ðÄ!c“]”¾”””¾3“”“Ž2”]3“”””Žƒc¾”“c“¾“¾”¾¾9]”¾”½”ƒ¾ ”¾”¾¾”“¾”†¾6”“¾¾”¾”½,¾”¾qqrxwAq@xqrGqGkGk:9:@@:@kAA9@@::9:::3 ðÄ42-c“Žc3ľ¾2ŽiŽccŽ“3”“Žc”c”“޾”“Ž”]c]¾”½”¾½¾“ƒ”“¾¾Ä¾¾“ƒ¾0””“”¾Äc”¾”“¾¾½”Ž“”¾”qHqG::rqrMqqHqrqAjqGqAjAk:ƒ@ƒ: 9 9: 9:3 ðÄ%2”¾”j]2¾Ä¾c””]c”¾cޓޓޓ¾”“¾”ƒcƒc¾”¾””ƒ¾½¾”ƒ¾DÄ”¾”½”¾Ä¸“]2]c“¾“¾”“cŽ“””GqA@qAwHwAqHqqH@AGr@GAAqG@@;@:3:@::9:@9ñÄy”¾¾”¾½”3¾Ä¾cŽi”]c”]“””“”ޓޓ¾c2Ž”cŽcŽc32¾¾“¾”“¾”¾”½”c“¾¾”¾½¾”¾”¾”¾”cdcc””¾Gk@@qAGk 3rGqq :99AqAk@qA@kA9: @A 3: 9@ 3ñÄK“¾”½”¾“”¾””cŽ“¾23c2Žcc2¸“””޾”3“޾¾š½”“cc¾“¾¾”¾¾cccdc¾½cd”½¾“¾”¾”‹¾9…:@:@„: A::93@qAqAkƒ: @::: :@A9 ñÄI””“ŽcŽ“””23”“3diŽ2”¾¾32޽”““¾½32¾””¾”Ž”“Ž“””“”“¾”¾”¾¾Ä¾¾Ä“”¾”¾¾“ƒ¾ľľ𾔽ľ@9:99::@:9:GAq@ƒA k@ 3G@@:@:@„: ?:@:3òÄ%””Ž“cŽc“Ž“]”¾”“dcŽ“¾23”Ž”ŽŽƒc“”½””½Ž“”¾¾“ޓ޾¾Ä¾Ä½”„¾“””¾¾”½”“¾¾“޽”¾”¾::::xGqqHrƒqG„q AqA@:@::@A9 993 : 9òÃ:2””“”””””cc¾c,”c”Ž”2”d2cc“Ž“”“”Ž“¾””“¾”¾¾”¾”“”ƒ¾”¾¾”Ä…¾8½”¾¾”¾”cc]“¾”¾“”qAqrGqkGqrwHqGqGkH@qAqr3Ak93@: 2: 9:93:3òÄ5Ž”¾½””c¾¾,ccc”c]“”“]3”c¸”Ž“””“Ž”¾¾”¾””¾½”ƒ¾““޽”“¾“¾”¾”¾”Ä“¾“¾“ƒ”-¾“¾“”xr9GAqGkGAx@qHkG:A@Aqq @q@:@ 39 A3:9óÄ6“””Ž“Ž3¾Ä-“c3¾¾3“޾Žcc¾¾“”¾“ŽŽ“Ž”“¾””½Ž¾“”¾”¾“ƒ¾ ”””¾”¾¾”½¾Ä‰¾½¾”„¾&::Gk@A:9:33::@:@k@@:::A@ 3 :: @:9:9ôÃ:“޾“¾“¾32¾¾,”c323”¾2Ž““”d\”¾””ccc¾¾¾“”¾”¾c¾“”¾”¾Ä„¾””¾¾“ľ”¾½”¾š½”ă¾,”¾”¾Ä¾:9 399: : 9 9 9 3 93 949:94 3:@kAqG: ôÃ2Ž“”cŽ””3ľ¾””-2”¾iŽŽ“ “¾“]c3¾ÄŽc”c”½”޽”¾“ƒ¾ “¾”½¾¾Ä¾Ä¾¾Ãƒ¾9”½”c”½¾”¾”½”“¾“¾“¾”93433949 394:3339 :@A@ qG@3ôÃD“Ž“¸“”j””½”¾c23“”Ž”cŽ“]””޾¾“2”¾c¾c¾”“޽””“¾”¾“¾””¾”¾“¾¾”¾”Ä…¾”¾¾ccc¾¾”””3::@A…:@:33 9 3 3 9A:@:@Aj9õÄ@””””½”¾33 ¸c]3“”iŽc”“”¾c-“¾c””¾“¸””c¾”¾½”¾”¾“c¾¾Ä¾Ä”ƒ¾”¾šƒ¾“¾¾”¾”„¾(“”“333A@:@ 9 3 933 33 9:A@AjA:@jAA@9õÄ “¾]“Ž“””ƒ”]2]“„c"2””Žc”]”¾“Ž“3“]”“¾¾2”“¾½]“¾””½„¾cc¾”¾½¾š½¾¾½¾š¾Ä¾Äƒ¾”ă¾ ””:9:393Aƒ:9 3  39AG3qG@Ak@A@@:@@3÷Ä@Ž“3cŽ”¾½”33“]c””i“Ž\¾c332”¾”,”Ž“”¾Ž“¾”¾”¾“¾””¾”¾¾c“¾Ä”ƒ¾š¾Ä„¾/”¾“¾š½”“¾Ä¾½AqGA@: 9 99::9@99::9AAqAjAA2:@@33 ÷ÄB2]c”c“ޓޔ”cccc]d”·33]Ž”“cc,c”¾¾2”“¾”½Ž”¾“”¾Ž“¾½”¾Ã¾¾cc]¾½”ƒ¾“”¾“ľą¾”„¾AAqqr@ 3 3A9:ƒA@ q93Ak:@AqG:A3 øÅ8c3“¸c”32ľ,c]ccŽc”]“”cc“3“”Žc”c”3”¾”ޓޓ]”¾”½”Ž“¾¾“†¾ šc¾¾“””½”„¾+”½”¾”½”“¾Ä@k@ 3:AqGAqA9GkAq9AA:@G3 9kGkA@ øÇ;”“”]3¾Äc3”““Žc2¾Ž“Ž“””c3½”“Ž“Žc”””“¾”“¾””Žš¾Ä”„¾ă¾ ”¾¾“¾“ľ¾Äƒ¾ ”¾¾::qGqG@ƒ:Aq@49GkAqGkqAqAk9Gq3 øÇ8¾3c\9¾¾,cc]]”]cc32]2Žc]3”””3”2]2¾””c”””“”¾”½”¾””ƒ¾6Ľ¾”¾¾“¾¾½”¾Ä¾¾”¾”½”¾“¾”@GqHq3G::9:@A@A@3@AqA@@:A 3 ø„ÈD“ޓ޽””cc]“c]”3c“”“23“Ž3¾¾”c”¾½Ž”“¾¾”޽”¾¾“”“¾”¾”¾Ä“¾Ä¾Ä”ƒ¾$”ľ¾Ä¾”¾¾“¾qGkqH3@ :9 3A@A :@kGkAqø‰È”””¾“„c ]””c”Ž“¾¾3””c”“”¾“޾cc]“Žƒ” ”¾¾“¾¾”¾“¾¾Ä„¾”„¾š„¾!Ô¾“¾”¾”q:GqGqGq::9:q@AjA3@A@Aq@Aø‰È cŽ”“”¾ƒc3””3“Ž”2ޓޓ”¾c”“c„” 2”½Ž“¾”¾”“¾”“¾“¾”½”¾Ä¾¾š½¾¾Ä½Ä”ƒ¾”¾Ä“¾@:qAAkGk@ : @A3@9@:@@kApø‰Ê?32޾“¾””¾c]c“Ž“3¾¾”2c”Ž“d¾”“3¾¾c]¾½¾3”“Ž“”“”Ž“¾¾”¾”¾Ä”½”ƒ¾šƒ¾”½”¾¾½ƒ¾”@AAkGkG3@::@3Aj@A3Ak@@3:@øˆË*c”¾””¸”ccŽ2Ž3“”2cc]””“””¸“Ž”¾¾9]¾”½”¾ƒ ccŽ“”¾“¾¾“Ž”½„¾ă¾(½š¾¾”“”¾š¾Ä¾¾@kF:@k: :@A@9AA@@@k@AA@:: ø‡ÌA3¾¾“¾“]cc“Žcc3c”cŽ“””“¾¾\9“¾”“Ž”3¾¾c¾“޾“¾c“¾””¾”½”ľš…¾”“ƒ¾”½¾AGk@A@:@9A@3939 @3AGkGk9:ø‰Ë<2c¾ÄŽ]]23\3]3cc2d¾”Ž“Žc”¾“”“””c]c¾¾“”¾c””¾”Ž“¾”¾“¾“„¾“ƒ¾$𽾓¾¾”½¾”¾@qGA:q: 393 : 3q @@k@@ Aø‰Ë3]ľ‡iŽ“33c¾c“Ž8޾”c”¸””¾¾”cƒ””“¾”“”“Ž”¾”¾”¾”¾”¾¾Äƒ¾"”¾¾”½¾¾Ä¾¾::@:@@3 @:A jAA3A@AA:9øŠÌ”¾½‡E3“Ž2Ž2¾””ޓޓ””¾¾,“”¾”½¾”“¾”½cc]]”“¾“¾“¾½”½¾Ä¾”½Ä¾Ä¾”¾”¾”¾”¾9 ƒqAk@:@AAqAq 99AjA:ø‹Ì“¾””†#3,””2”c”“޾””¾”Ž“”””¾cc޾”„¾c”””¾”¾”¾”½ƒ¾#”¾”¾½¾”ľ¾Ä”@k G:A@ :@@q@A: :A9kø‹Ì”½‰-“cd,¾c”””½c”½¾,2޽”½Ž¾”¾¾3½”¾“”2”]“Ž“¾””“ƒ¾“¾”¾š¾¾½¾Ä”ľ¾½ƒ¾@A:3:@:@ jA3@@:3@3GA3ø‹Ì”¾‰"3”¾2”cŽ“]“”Ž“”-“Ž””½¾”¾3¾”½”ƒ¾2”232¸“¸”¾”¾¾”½¾”¾š„¾½”ľš¾@rq 9:@:@@3ƒ: @:9@A: 3øˆÌ”¾”ˆ!2c””2Ž2ޓޔcޓ޾“Ž“¾”“¾¾”½9½”ƒ¾”¾””Ž””½”½”½¾”¾½¾¾“¾Ä”†¾@rq @ :9A3::@@::@@99ø‹Ì”Š&3”½Ž“¾3c”“¾”3“Ž“””“Ž“”¾”“¾”¾”½””½”½”ƒ¾1,”¾¾”“¾”¾””¾Ä¾”¾¾Ä¾”¾“¾@r93::3 kGA @3:9::@4øŠË2]Ä,‡92””3]c¾]”¾Ž“¾2¾Žc¾”¾“3Ž”¾¾”½”¾”““”¾“”¾”½”½”ƒ¾½”¾Ä½Ä¾¾3 :: @39ƒ@k ƒ:@@:A:9:øŠÉ2]c¾Ä¾„?c]cc33””c,3c”“c¾3Ž”3¾”½””½”¾]2””½”¾”¾”½”¾“Ž”¾“¾Ž¾½”¾”¾“¾šƒ¾”¾¾”¾:qx@3 9 A::9:@@A@ 9Aq øŠÊcŽ“¾”…c7”c3”c”2¾]”“d2“c\¾”¾3޾29¾¾”¾“¾½””””“¾¾”“¾”¾“ƒ¾!”¾¾š½Ä¾Ä¾ÄG9H: 9:G:@3:@@ :q@kGAø‹Ë“޾¾Š023”¾”cŽ“3“ޓޓŽ]c“¾”“Ž™¾”\”¾½¾¾”¾,c¾”¾¾”…¾”½”½”ƒ¾”ƒ¾Gq:9:3:q:::: 3:GkAA@k@3øŠË”“¾ŒV]“”c”¾”””“c¾¾”¾¾“”¾¾”3½”¾”¾¾“Ž”½”¾¾”¾“¾”¾š¾“”¾”¾“¾”¾¾Ä“¾qGA@A::@34 9:A@j 9 ø‹ËŽ“¾”Œ73”cŽ”“Ž“¾Ž”¾”2”¾”“¾“]”“¾¾Ä””,”¾”,”Ľ¾””¾½“”¾“¾¾“ƒ¾ľ k@@k9::@::33 :@@3AAk@ø‹Ë“Ž”½Œ'22Žcc””¾”“¾¾“”¾”¾Ž2”¾“”½¾“޽”“ƒ¾”ƒ¾)“Ž””¾“¾””“”Ž“”¾Ä@ qkG::@Ak@A9 2:A@:@qGA3øŠË”¾43]-c””2¾c”””””½cc¾“Ž””¾””¾“¾”½¾Ä¾¾”ľ”½””“„¾“¾”¾“rqAGkA9A@AqG3:@@@k@q3ø‹Ëc¾Ä&“”c,c“cޓޔ“¾”23¾¾”””“””½”””¾ƒ”¾¾Ä„¾”¾Ž“”ƒ¾”½”¾ 2r@3A@qGqqA::3:@A@Aø‹Ë]ľ/”c]]”cc”¾”“”¾”“¾¾¾¾c¾Ž½”””“Ž“¾“¾½¾”½”¾“ƒ¾“”·””ľ”¾39G:3A@krGq ƒ@: @:AøŒË]ľ1cc”¾”]“¾¾”¾”¾Ž“¾”“¾””“”¾“Ž”¾”]cŽ”¾¾”¾Ä¾”ă¾”““¾”,¾¾G:@qrGqAqGkA @k::93 k9øŒË“¾”Ž3Ž2-c2Ž“””¾“޽”“”Ž“,””½Ž“¾Ž““¾]c“Ž“”¾”þ”½¾¾“¾”ƒ¾332¾¾”¾q:@AAqr@qGA@k @@A@@3øŽË””½Žc”„c!3”¾”½Ž“”¾Žc”Ž“¾””“cŽcc”c””ƒ¾ ”¾¾”¾”ľ“¾“„¾”½Ä¾G:@3Aq @Ak@@9A@:A3øË”¾”‘LŽ“””””“”¾”c]“”¾c¾Ž”]“¾””¾¾½”¾¾“¾¾“¾”¾”¾”¾š¾“¾”¾”39: 3Gk kGk@A3@A,:øË“”½”‘Kcd]ccŽ“””޽”¾c]cc¾¾“Žc]”¾“޽”¾Ä¾¾Ä”¾¾“¾“¾“¾¾½¾”¾“¾¾ @@ kGkG@@k9 :9:ø‘ËŽ”¾¾‘ƒc]”]c”¾“Ž“¾”½”]¾c”½””2cƒ¾“cƒ¾&”½”¾½”ľ”¾”¾¾š¾¾”½””½r@3:@ 9:@:3:9: ø‘Ë”½”‘/Žcc½c””c”¾”¾“c””¾3¾¾“¾¾¾Ä¾”¾¾”¾¾”½”ƒc¾c3“””¾G@A::3@@:@Aq9:ø’Ëc¾¾’IcŽccd”]”“¾“¾c“cŽ“”2¾¾š¾”¾”“”“¾Ä¾½”¾¾“ޓޓ¾¾“Ž”¾½Gq::9A @A@@kGk ø“Ëc¾Ä’ c”3”c„c=,ŽccŽ”””¾2Ž”½¾¾“¾¾“¾¾”¾Ä”“”“ޓ޾¾Ä””¾”¾¾G3:@A:@jkHqAG93ø’˾”– ¾”3j¾¾”2iŽc]¾“ޓޓ¾3“¾”¾”“cŽƒ¾“¾¾”½Ž“ŽÄ¾”¾¾Ä¾¾Äƒ¾@ :@qA:qGqGkA9 ø’Ë”¾–¾c¾¾”¾”2Žc]cc3½”ƒcŽ”“¾”“¾c¾Ä¾Ä¾”½¾”ƒ¾“¾¾Ã¾”¾”¾“¾”3 :Gkqq:kGqA@:ø’Ë“¾“•“c,”¾”“¾,cc3c¾””,c””¾¾””†¾ Ä”¾¾”½¾Ä¾¾”¾½ƒ¾Ä¾Ä @2A@qGq:@A@,@ø’Ì”¾–Žd¾“””¾“3””2¾“¾cŽ””“ƒ¾“ƒ¾'Ĕľ¾“¾“¾¾š¾¾Ä¾”¾”Ô¾”½@: :AAqqHk@Aq:93ø‘Ì”¾–(2”c”¾¾c””]”½”””””¾¾”¾2”½”¾¾½”¾”¾”„¾”½¾Ä…¾ľA::99AAqqGk@Gq9ø‘̽”–3“Ž“Žc”2c,2”d¾”c¾ƒ¾ă¾”¾“¾Ä¾Ä¾“¾“¾”ľľ¾”Ä¾šƒ¾ƒ@r:@k@GrG@kGk3øÌ”¾– Ž“3”½””]c]c¾¾¾¾“¾¾“”¾”¾“2¾”½ˆ¾!”“¾¾”¾¾Ä¾½¾¾½Ä¾93 q:G:@qkArq: G øÌ¾2˜,””·”cc¾””¾¾”¾””¾½Ä„¾ ”¾š¾Ä¾Ä¾Ä„¾½Ä”¾¾Ä”¾¾”¾GrqGAqGq:AAqqGq k@ øŽÌ™$2c”“¾3¾]”¾½”¾“¾“¾¾“”“¾¾”ľľ”¾¾”¾”ƒ¾"ľ𾔽¾”“¾“¾Ä¾AAGkGkAqG@qqHqrq9Ak9øËľ™Ic¾”9c”¾“¾”¾”“””Ž”“¾¾”¾¾Ä¾½Ä¾½Ä”“”“¾“”¾“¾¾””¾¾FkG@:G:qkGAqAGAG3G: øŒË¾Ä™=cŽ23]“Ž“”¾”½”””¾“Žc”““¾“¾¾”¾”“¾c¾¾”¾”¾”¾¾“¾”@:kAjA:qHƒ: GkGjqG3: øŒËcľ¾˜-c3c”””½Ž“”¾”½”¾“Ž“”“¾¾”¾“¾“¾¾]c¾”ľ“”…¾ “¾A@@qqGƒq @::qqArqG:3øŒË޾¾Ä˜(]3“]“d“Ž“Ž3c”]c¾”]c¾”“-¾”¾Ä”“”¾””c¾¾Ä†¾”½”¾”½A3AqH3ArGAqAqH@qGqAøËľ¾™“”]Ž”2”]9”]9¾“¾c]¾”½”¾Ä…¾'2”“¾”¾”¾”¾™¾”¾“¾”q k@r@kGrqqGqA@qrA@øË¾Ä¾˜”cc¾3¾¾2]”¾\”¾”½]ƒc ޓޓ“Žcccƒ¾ ”½¾½”½”¾”½”ƒ¾G3Gr:@Aƒq HqqAq:GqAjøËcľ3˜C]””2¾”23”¾9“322cŽcc¾”¾“Ž”“cŽi¾¾”¾¾””¾¾”¾“¾¾”¾“¾A@A@@AqGGrqHqqGƒ:@: øŒÊc¾Ä]9ˆ3½Ž]”“3½”“33]cŽcŽ”cc¾”¾ccƒ¾9ƒ¾%ľ¾“¾”½”¾””½¾”¾“¾G33q:rqGqHqr: @: 9øŒÊľ2˜+c]“cc¾Žc]2]c“”“c¾”¾½c”½””¾¾Ä””“”“”¾¾”¾ƒc”“”¾“@:9qq qGrqqHqGq3@3øË”¾Ä3˜ƒcE2c޾”¾¾Äd¾”¾Ž””½”c”cľ33¾c]“cc¾¾”“¾“”¾¾: 3:GrGqrGqGqrqHq::øË¾Ä¾2–$c]c3ccc”ľ“”“”¾c]¾½”¾””¾c“Ž“„¾cŽ“”ľ¾”޾¾”ƒ@qGrqqArrGrq @:ø½23“о”¾”•Icd3c,Žcc”“3c”]cc””¾”½Ž“Ž”¾Ä”¾GAGkGk qq9@A99A:rGrqAAGqAwq:@:øŽçDc“ccc”cc”Ž]”½”“”d”¾½ @A@A::@:@:qGkGk@@qG@A@A::Aq@A@39 3j  ø‘çcŽ]c”c¾¾“c]32c3ƒc#cG33“:9:A:9 @3 3 3:3@:@::@@3ƒ  ø—ç,cccŽc33,cc]c]3,3c]ccŽG9:jŽc 2“Ž” @j:ˆø ç)ccŽc“Ž“]9-c]c232c]“cŽ””“ޓޓޓޔø¬é ]2cc]”]2ƒc]332Ž3c]3ccŽ“d””3”“”ø¬é']2cc3]c]c3c\223]c2d3c“d“d“ޓޓޓ޸¬ò3ƒ233223,c3]2cŽ”cŽ“Žcø®øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/'-'øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄâc…c]cøÏÏc”c]…c„ ,“Ž“Žcc2ccƒ,2øÊÎ$”“”“ccc,cc”“Ž“”j””c]ccc3c3øÊÎ"ccŽ””cŽcc޾”½””¾cicdc]”cŽ22øÌÏ]„cŽcŽc“”Žc”¾“¸cŽiŽ„ccŽcøÍÏc]cc]c¾c”“Ž“2Ž“””“ŽcŽŽ2øÏÐc„c]cŽ“Žc¾”c޽”cŽ“ccøÑÏcc]Ž”¾”“Žc”¾”“ŽccŽ“cøÕÏcŽ”c”“”d“”“”½¾”c2øÖÐc”“cŽ”¾”Ž3323ccœ“ø»Ðc]cƒ””cc2,Ÿ”Ž“øºÐ c3cc””“Ž“,2¡]c””øºÒ ]“ŽcŽcŽc c]ƒc “,c]c]†]cø©Ñ3c]“”„cœc]cc3\]”Žj232c]ccc”“Žø¨Òc]cc]”2š232¾“ccc3”“”3cc]ccƒc”ø¨Ò2]”””]c•$cc,32Žc”¾cŽ22,i““iciic822ci““ø©Ò2c“޾2c” cŽ“c32cƒ222“i“hc8cbbcbib9cii28icbcø§Ò3Ž“¾cc’"]c]ccic,Ž2i™cci2“™8,@AichcbA28ƒ2ø¬Ñ,3c””c]c’ƒc%2c2ii““iibcb 93rG j@@AbAAjAb3qAqAø©Ò\3½Žcc]c3,cb™™“’ibcbc@AAqA@3ƒ:@::k@: 3: 3G 2AkFAø§Ò9]“c3“™2298\ihcAq @3 ƒ@::@::@ƒ: 3 3:AFø©Ò2]””Œ.c”“™8ic“iib3bA9 :9::@3 ::9: 3:9:9:9::ø«Ò2Ž“”23‰,3Ž23“™2ibkGq@A@A@q :@ 3: ::9:33 : 9 @ƒ:@ø«Ò3]“Ž2‰2]“c“™™bihkGkGk933:94: 3ƒ9:9 943:9499 3 3 ø¬Ó23dˆ2cc2cbAqA@ @::3 939:: †: 9:9 3:9:994ø¬Ó33ccˆcd™iibiGqAq:9qƒ: 3 2 33 :9@::9ƒ: 9 9:::@ø­Ó\cc,†c]””““bbc@::G::A ƒ: 39 9: :3:9::9 9 39„:ø­Ó3“Ž2…%3“Ž““ch9cqA@k::@3@9 9 3 9 ::9:9q…:9:: 3 9 ø®Ò“32”„4c¾“Ž™™“G@kG@@9 @3: ::934333::9A:@AAFAA@:GAjA@:ƒ@AGø§Ô,ccƒ%”¾”™2:AqAq @:@::9 : : 93: kGqG…:q:k@AjA@Ak@A@A@::@ø¦Ôdc”ƒ”"¾ÃA:qAq:@:@39 9339 93 @:@A3Gƒ@A@A9Aq kG:@:@::@kAø¦Ô%c””c¾“cc2@kGqG:@:3::9449 :: ƒq k@A3Ak@k@A@k@ApA9AkGk:9GkGø¥ÔCc]3””cޓޙik@9G- @:3::39 9:94 AqGqAq@ kAjA@qAGkGkFAqGAkø¥ÔA3“”·c32ciib3G :@:99:3:9:3: A:@A@AkGk::@:@:G:qA9::9::@@ø§Ô;”,”33”“chc:Ak::93:: ::@::3@::3:9kGkq@::@::@3Aq 3:@ø­Ô2cc3c3“ޓޙhÙqAF3ƒ::9 ::„:qGA3 @@ƒ:@::@::@:ƒ@9::ø­Ô.3c3c¾“””“2iqG::3:9: 9:3@9:3::q:qGj@A@::@:9ƒ:@::@…:ø®Ô42]c]”¾”½i“i@:@9::9:: 9 :3GGrq A::@@::9:@:@: 9„:@ø¯Ô+,”c”c½”¾cŽ™““Aj4:3 :9: 3 kqAqGk ::@::9…: :@:@:? 9ø¯Ò8,cc޽”]”c““™˜AA9349:: 2 3k9AqGqAqG:9::39::@: :9::3ƒ:ø¯Ñ;23”2””½]c”ޓޙ“Ap::33::3G9qAqkG3::9:@:::9:@99:9::ø°Ñ;]“c,c¾]9¾“¾”“™: 9 :33 3qAqG@:A@ :@:4:@:99:: 9 99 :: ø°Ñ']cŽc,c”¾””˜“Gj: :3@:3G9AkqrqGqk::@ƒ:@:9ƒ: @: : 9 3ø²Ñ,c2c]c”“c¾“¾”“™@A93::33G3 qGGAGkG::@ 9::9 9ƒ: ::9:9: 3:ø±Ñ23,c”¸c¾”c™™Aj @k@A9AqqGƒq ƒ:q :9:@ @ƒ:@9†:9::9ø±Ñ:,””c3“”c¾”d™kAA9kA3 A@AA@rAkGqGqG3@:: :@:: 9::?9:@:9::ø±Ð 3”“]2޽3”ƒ$“GjG@Ak9AAqk@@kAqGkqGq:9:@:: 9::@ƒ:9 ::ø²Îc]\””Žc2cŽc”“”Ži“GAk 3 :ƒ@qAqGkqrGqr 9ƒ: 3:@@:99:9ƒ:ƒ@ø²Í:,c3“¾“cŽ”c·”“”™@qA@@:@AkAAqA@AqGqr:@:@::9 @::@ ::::@ƒ:ø²Í*2””2¾cc”½c”¾ŽciÃGkG39qAFq9AqrAqGq4@::@…:9‡:@:@:@ø²Í4,”]3”Žc”””½2¾b™qAq:@:@Ak:GqqGqGqBq @::9::@3:9::„@A@A:ø³Í.23c,”“”c¾Ž¾d””““™AqAGqA@:@qAqHqkGqGq:9 9::9ƒ: 99AA@Aj:93ø³Í7cc2c”¾c2”c2”½Ž™“™A3@k:AqGqHqGkG:qGrr9::93::39:@:@@„:ø³Ê+,2c”]½”¾],c””¾”½“™’qG::@AkqGqkrAkGrqrw@ƒ: 9@:9:@:@ƒ:9:9ø³Ë33]c”c¾”c””¾“¸“”“™™rG:GqGAq:AG@A@qGqG3:9::9:9:3„:9…:9ø³Êc]”””ƒ#”c”¾“¾”¾chÙqG:qqAq:GqqrqrqrGr 9ƒ:@::::ƒ:@::ø´Ê>c2cc½]c”“]”“¾”“¾2¾”™ÃGk:G:qAqAqrGqGqGqqAk:@::@9:9::9:9::9: ø´Ê>cŽcc]”½”¾c¾Ž¾Ž”¾™™rG::qGqAqqGrqHqrAAq@::943:9499::9 9ø´Ê03c]c]”¾”“Ž“¾”2”½””“™q::@qGqqHqrGqAA@kqH ::@ :9ƒ: :499 ::øµÊ=c2Ž2”“”½”¾”¾¾”¾™“qx@AqAqGqHqAqAqqGxq39:9::::9:9:9 9:9:øµÊ]“Ž2¾”·””¾”½¾“¾ƒ“HqqrGkrGkqrA@qGrqGq ƒ:9ƒ: @ ::9 944 9ø´ÊC“Ž“3“¾”Ž”“”¾”,”¾””™™@rGqqHqqHqxGqrqGrqH3:39:@:9:949:99:9:99ø¯Ê?”3¾c”“”޾½””¾“¾“™rxrxqHqrGqAqGqqGqGqG::9: 9::9 99 :94:9…::ø¬ÊB”c2””“Ž“¾¾”¾”“¾”¾“™“wrxGrwAqrGqGrAGlqrr3:9 :9: 39:939:9::9@ƒ:9:9ø©É2c޾””¾”·”2”“ƒ¾”¾“ŽÃ™GrwxqAAqGqA„qGrGx„: 39:99: 93ƒ:@:@ƒ: 9::9:::9ø¦É-3“¾3”½Ž“””3¾“”c¾“¾”¾™ÉÃrGrGq@rqGqGrHqrGr9:9ƒ:9 :::9 ƒ:9ƒ:@ƒ:9::„::ø£É'2-”¾2”¾“Ž2”2¾”¸c¾¾”½”ÃÉ™ÉrqqGAqGrqrqrGƒq ƒ:…:@3::9ƒ:@:9:@9::@@99„:94ø¢É32¾“3“”¸“3”¾3,”“]”½¾”¾¾ÉßÃxrAqqrGAqGrGqHrqHq::99ƒ:@ƒ: 3@9::@::::@9„::@::9ø Ê3“”,¾“”¾½¾23½”c¾¾”ƒ¾,ęßrxrGqHqqHqq qqH@qr 9:@@ 9:@::@@ 9:@:@:9ƒ@:9:„:@: „:øžÉ,cŽ“”¸”½”¾”]2”¾cƒ¾½šƒ¾=™Ã8rwrAqxAqrGrGrwrGqr::@A:9:@:9@:A ::@@::9:::@:@::9: @:9øÉ%2¾”,”“¾,”¾¾22Ž3½”¾”¾“¾”\Ÿ3xrqxAqqGrƒqrxrqHwG9:3@::9 9@:9A9@A:@ƒ:@:@::9ƒ:ƒ9:9ƒ:ø›É,”¾¾””2¾”½3”¾¾9¾”¾Ãƒ¾ľc“wxGqGqGrqGGrxqNqrrx::9 :3 9„:3 A@A@A::@A@:@:@::9@::…: øšÉ8¾”¾¾”2”¾”¾”½””½”¾”¾”¾“”icArGkGrGqrr@rxrqNqrG399 3 :„@3@k@:j@A@@A:99:9::@:@:9::99:ø™ÉQ,¾”½”¾”¾”½”½”¾”¾”¾¾”cc“Ž“Ã™ÉkwAqArrwrGxqxxqxqGr:3 3 :3::@ A:@A@A@k3934@9::@ƒ:9…: ø—È;]2”¾”½”“޽”¾¾”¾“¾“”½”¾c2¾”Ž™“ßrqAxwrNqrGrGqHqrGrwr9:39 @ƒ:@93A@d9 :4:9@::@9ƒ: @::@9:9::ø–Ç]c¾¾”“¸”“¾“¾”½”¾c¾”¾½”2”½Ž“ƒ™ÙqGqrxqxqqrrGqrGqrGrGr9:3@@‡::9 :ƒ@A:@:::9:@9:9:9::9:ø•Å22c”¾“¾”“¾Ž2””½3¾cc¾”¾”,3”„¾ŸÃrGrGqGrGrMrqxxrxqrwrqr::ƒ:@:@:994::9@:@:A::9 @:‡:9:9ø•Å>3323”¾¾“Ž“¾,”¸”c”¾¾2”¾¾¾cc]3¾”½”“™™qxxrr qqrq@ArwHqNrGxrM3::ƒ@"3@::@::@@:@A:@93Ak:@:@@:@:@:@ ::ø”ÆG,3“,”“¾”¾3¾“¾]¾”¾Ž“¾”¾8¾¾“¾”¾“ŽÃÃÉrxxq qHqH@A@xqrqrqxqrG:@@;9 9@@:A@ƒ:@„: 3qx:@@A9@@:9::9 :9ø’ÇZ3¾Ž“Ž“”¾””c¾½”“¾”“¾3¾¾”Ľ”¾“ÃÉ™ÉÃxGrqrxqrqxrGxqNqHxqGqA:@:3;9 @:@@3:99 :9rGAGkG:@::@„:@@A:9 ø‘Ç2d”½””,¾c”¾cc¾”¾”ƒ¾3½”“„¾ ”¾Ä¾”ÉÃÉrƒxGrGqG:@xrxqqrxArxƒ@A9 3:93: : : kqrxxqAkGkGAA9:@„:9:9ø‘Ç ,c2””“޾”]“”c¾¾“c¾“¾9¾¾”¾”“3ƒ¾B”¾Gr@xrxqqrrqAAkGqHqHqqrqrr9:3: 9 3@:@9 qrGxrxrwqrGk@@A@:@ @::4øÈc,Ž“¸“Ž“]””¾”¾3¾”¾¾2¾¾½ƒ¾Ä2¾”¾“¾GqAqNrqNƒxqqGrxqrqNqGrGxrx@A@Aqxrx„:qHkGxqqHqqAqAkqAA@:@@::@AøÈ32Ž“”Žc“”¾c¾¾Ä2¾“¾c¾¾“c¾š¾¾3ƒ¾ă¾8Ärqxrx@@AqHqqrNxrxrxxqxrrG@Aqxrwr@:9HwrqqxHxxrxqGqAqqxr@ƒ:qrqA GõÈ32Ž“,”¾”2¾Ž½cƒ¾X2”¾”¾¾””¾¾“¾“¾“”ľ¾””qGAxrxqHqrG9@@A@rwrxrwxAqqrxrNrwA@rqGr:GjrxqNrrwrxGrwA:qxGxAqqGqA‹qk@ôÈi]””2”¾2”¾c¾Ä2”¾”½¾2¾¾c¾”¾¾”¾”“c¾”Ľ”qx@rxxr@xxrr@krwrxHwrNrqrGqrwrxqA@A@:A@qGA@A@xqrNqrwrqqArqrGqGA@:ŠAkGq:óÈ2,””¾¾”,”¾“]”¾2]“¾”¾39¾c¾¾“”“ƒ¾ƒ¾F”¾¾r@xqxrwA@@9GrqN@rxrxqxrwrxHxqrGrq@AjGqGkqqrrqxqxrGrGrGAFrqGqqA:qGqA†9:G:qƒ:òÈ^32Ž”2”¾“c¾””¾]”¾”\c¾¾Ä“Žc¾Ä¾c¾š½”¾Ä¾ÄrxGAxrxrrGqrqqGqAqxqNrxqxqxrxq:A@A@;@qGrGqxHqrxAqqrƒq xAqHkG@A93… A:GjAA@:@òÈ\2“Ž”2”¾”””“”¾¾3¾”“¾3”½c¾”¾”c¾”¾”¾”¾c¾¾Ä¾”qqAxqxqrrxNrrGrwHqr@@AGqGqAA@:AjGkqrkGrGqrMrGqAƒ@:HqqGqqGk:@4GqGA qAqA@q:@9:ñÈ, “Ž,””c”””¾“]“¾”“]¾”cƒ¾½¾¾½”“¾¾½cľ¾“¾rx@rxrGxƒ@"AqxqrqGrGqkGkGAqA@@qAkGxr9AqqrGrqGƒ@ A:rGqGqArqGq:q@rGr:@qq@q@kG:@:@:ðÉ&]””¾¾“]“¾Ž¾”¾“¾”¾¾3¾Äc¾“”¾”“””c¾¾Äƒ¾”ƒ¾@xrxAxrƒxAqrxHqrqrGqA@Ak@qrA@GkGqGqA@A@rwr:@e@rwrqqrGrGqA::G:@::@AqHAA@Gq@Aƒ:ðÇ]2c]“޾”¾3¾“”c¾¾2c”½”¾b”¾cƒ¾“„¾Z½”¾”𔓔ľ¾xAGj@xrxrxrwxrGxqrAqqGkGqGk:9qGrqHqrqrwrGk@rqrGr@:@kGqAA@qrqA:qqGqAjq:qA@k::ðÅ%c”9¾½¾3“Ž]c“¾2-”¾“¾3¾½c¾“Žc¾Ä¾”ˆ¾ “”¾Ä¾wrG@rƒxqxHGqxqHƒ@2rqAqGk9AG@A@AqAqxGrxrGrGxqrGrAGqAqAqAqG3@@Gr@q:GrAƒ:G@:9@ïÄ33c3Ž“”¾Žc””¾”½3]”¾2”¾¾c”¾c”¾”¾”½¾”½šc2¾Ä¾“޾¾”…¾xqrxrxxrxrGjA@rGqGA@@A@kAƒq.rGqGrxqrqwrGxqrwAkA@@rqAqrG:AqqA:AqG@::@k@@4:îÃc32Ž“¾”\¾““c”¾¾c¾”¾¾ƒ” “¾”c¾¾“”¾”…¾Y2”¾¾””““¾”ľ”qHqxqxqxxrxrqqrGq:r3A@@kGrGqAqAqHwGrGrqrGGkG@qrqqGqGqAqAqA@q:qr9G@:@:A:A@íÃ5”]2”Ži¾””¾Ž2”“”c¾“3“¾½¾”\””¾”¾½i¾”¾”2¾”¾”¾¾”“]ƒ¾L“¾xqHwxrxxqxqxNrxrxA@A:xx:q@:A:9A@A@A@A@AGj@@rqGqHqrqrqAGkq:GqA::@q::@::@39íÂ8,”32Ž“”¾“,”“”2¸”½c¾”¾¾”¾”¾c”c¾“¾“”Äd¾Ä½¾”¾““”¾¾”c”ă¾'ľxrrMrrNrxrxqxqrwrwrxrxxrxrxrxxrrxqrxqƒr qGrGqqGqHqGk@GAGqGA9@Gl@:49:@@íà c“3cc¾”޾¾3“Ž”c¾“”¾“¾”]“c¾ƒc¾”½”¾¾š¾“¾”Ž“”¾“]¾¾“că¾H”ľ¾ÄqxqNrGrGrrwrqxqxrxqxqxxrwxrwrqrMqNrqGkrGrGkGAGkAjAqq:GA@@kA:99:@ :AìÃ,Ž9Ž“¾”“”cŽ”]“¾“””¾,”¾”¾“]””¾”]”¾”¾¾Ä¾”„¾ c¾¾“”¾”¾”¾Ä„¾”ƒ¾AxrqqrqMrHxrNrwHxrxxrwrxqxrMrqrrqqGqGqG:qGqkAjGAqA:Aq@:k:@:G:A:3@@ìÔ¾c2”¾”½”¾cc¾“c”Žccƒ¾0“¾“Ž”“ޓޓ¾]½”½”¾¾“”¾Ä¾¾“”c¾½¾š¾¾“¾”Ãľ¾š¾¾ÄƒG3]232cd¾Ä32]c”]¾”“”¾“]¾”d½”3”¾“¾¾“¾“¾“¾½””¾”¾”“¾¾”¾“¸“ƒ¾š“„¾ ”½¾¾Ä¾Ä¾”ƒ¾ ľ9:9@ 3 AAƒ@3 :ø‡Ñd3232-“¾¾3]ccc”“”¸”¾2”¾””¾”¾“¾”“””¾”¾”c]”¾“”·”¾”½”c”]¾“¾¾¾š¾¾“¾Ä¾¾”¾¾Ä”¾”¾¾@:3::993 kAkA@3:ø‡Ó>]32cŽ”¾½”2]32¾””“”¾cc]c“¾“¾3”¾”½”¾¾¾c”¾“¾”¾“]Žc”¾,”¾¾””ƒ¾!“¾¾Ä”¾Ä¾½Ä¾½¾Ä½”@:3@@ 3A@Aj::ø‡Ô“Ž“¾”¾“”c]2”½”]”·”¾¾¾“3޾”¾]”„¾”]“”¾“c¾”¾¾“¾¾”2c¾“”¾¾™ƒ¾“”¾”¾Ä„¾”¾”¾”¾””“:@::A@3 3GkG::3øˆÔ72c3”¾¾“]cŽ”\”“¾2”¾“¾“”½”c“¾”½”¾c]”¾¾c¾½”¾¾”¾“3¾”¾“„¾ ”ľ¾Ã¾”¾”½”½”ƒ¾“ƒ¾”@;99AAkAq9A@k9@ø‰Ô?cc]i¾”“Žc”]cc¾“cŽ”c¾””¾”c¾c”¾½”2¾½”c”¾¾”½”¾”2””¾¾”ľ½¾¾”ƒ¾Ôƒ¾ Ä“¾š¾”½”]@ƒ: 9:@AqkGA::ø‰Ö@2޾¾”¾”]cc޾cc”c,”¾“Ž””2]¾¾c”½”¾¾š¾”¾¾“¾”¾½”2¾”½Ž½¾“”¾”½¾”½”ƒ¾š¾””“ƒ¾9\¾: qAAq q::@:F@ ø‰×[Ä2c¾““c¾3c””c¾“¾”2”]¾”c¾”“¾”¾”¾”¾“¾¾”¾¾”¾”¸“¾”¾”¾”¾“¾”¾”¾”¾”ľ½¾¾”½”¾¾”¾3@qG@9@:@:3@:øŠÖ]d¾332””Žc”\3޽3”¾”½c,¾¾“”¾¾“”¾“¾”½”¾“¾”¾“¾“¾“””]c“c¾”¾”¾½”¾½”½¾”¾¾cc¾”½¾”3 3A::A::Ak@ ø‰×"Ä2c¾”c”]2””c½”¾Žc3”¾”“¾Ž½”]cƒ¾7”¾¾Ä”¾¾”¾“”]“Ž”½¾“¾”¾”ľ”¾¾”ľ¾3ľ¾”½ 9q @@:@:9@@3 ø‰×c¾¾,”“¾c3“3””cŽ“¾“2”“¾”½”ƒ¾$9½¾¾Ä𾓾“”“¾]]“Žci¾¾”¾”¾“¾“”“¾“”½”…¾ľ”k 3:@A@9::@AA93øˆ×<”¾c3“޾”¾¾c2]¾“޾32,”¾¾”]”¾“¾””“¾”¾“¾”¾”9]”½”¾¾Ä¾“¾¾”ƒ¾”“¾”¾¾“¾”ľ”½”½:@9:9:@AAjAA9øˆ×c¾¾c,c”½”½”3”c¾3“”¾“3]ƒc¾”¾“¾¾”½”¾¾“””޽c]3½¾”†¾ ”½¾”“¾¾Ž“¾“ƒ¾½¾“¾”¾”9::@3 @AjA@Aq@Aøˆ×¾”2 ¾c¾”Ž“Ž]2Ž”2Ž“”¾2ƒ¾D3¾“¾“”¾¾”“¾”¾¾c¾”2c3c¾”¾”c¾š¾Ä”¾”¾½”¾“¾Ž”Ä”cc”“¾¾ @A@q 3 k@k@AjAøˆÉc-”Ä2,Ž“3½”9c“¾c¾”¾2””¾“¾”¾Ž¾“”¾”¾¾c2”½”Ž3cƒ¾“2¾¾“”“¾½¾”¾”½”c”ƒ¾c””¾”q@:qAqA9GA@q::9øˆÉ2ŒS22¾¾2”]c]”c]]cc¾]”””,¾”½””½”¾¾“”c¾c“޾“Ž“¾2¾”½”¾2”½Ž¾¾”¾½”“Žjc¾š¾Ä¾cd¾½”¾q@:Gƒq kGkGqG@øˆÈއ"2]3Ž3”c32¾”]i,33½”¾¾”¾”¾“„¾”¾””¾¾”3¾“¾¾”2¾”“”¾¾š¾¾“”„¾”½”¾¾Ä¾”¾¾GAqArGA3A@:GkGkøˆÒ>“2cÄ“c323¾“ޓޓ]“޾¾2”½”¾”¾”¾Ä¾¾“c3,”¾“¾”¾2¾¾”¾””“¾Ž¾¾“ƒ¾ľ”¾”¾š„¾”½”¾½”¾¾@qq@A@ q@kAqA9øˆØ\¾ÄŽŽc23\””cŽ33”½””2”޽¾¾“¾¾“¾Ä¾c2¾“”¾“Ž23¾“¾“¾¾”“¾Ä¾Ä¾Ä¾”¾½”¾½¾Ä¾”½”¾¾”¾¾Ä”q:A@@k @A@kG3øˆØ¾Ä¾,3cŽ“Ži”2c”]¾””¾“”“ƒ¾””3¾”“Ž“”¾cc“Ž“¾¾“„¾Ä„¾½”¾¾”ľ¾“¾¾”¾“¾Ä”½¾A9Aƒ:@::@@AAø‰Ø:¾Ä¾3cc]3“Ž\3c,”Ž“¾¾”¾¾””“¾“c¾”¾“3¾“]c”¾”¾¾””c”¾¾Ä¾šƒ¾ ”ľ“¾”ľľĄ¾ľGA:@@:@k9@kAjø‰×cî¾Äƒ1””c2”2”3]c2c¾”½”c]cc]¾23¾“-cc”޽3¾”¾¾,¾“¾Äƒ¾ľľ½¾”„¾ľ¾”¾™ƒ¾ 39 3Aj AA9 kø‰×A¾Ä¾]3c¾¾,””2]c¾c””,cc¾39cc]c3c¾“¾c””¾¾½Ä¾“ľ”¾¾Ä¾Ä¾Ä¾Ä¾ƒc“¾Ä¾Ä¾Ä¾¾Ä¾9::@ q3::øŠ×Qc¾Ä¾Äc22”3c¾”cc””2c¾¾“]]c”3¾”¾””¾“¾¾”¾¾š¾”¾¾“¾¾Ä¾¾Ä¾¾Ä¾¾cc¾”¾¾Ä””¾@@ƒ:qAG:øŒ×1ľ]cŽŽc2””2]¾¾cc޾¾”¾”¾”c,””“c”¾,¾¾”¾¾Ã”„¾cc¾”¾¾Ä¾”¾Ä¾¾Ä¾2ƒ¾“”¾¾“¾¾A9:qG@Aj:ø×޾Ä3ƒR”32-2”Ž32”¾“c¾“”“”c”“c]¾23”½”2”¾“”¾”¾Ä¾Ä¾¾c]Ľ”¾¾½”c¾¾”“””½¾”¾”“Aq 9Aq@A: øŒÖ“ľîƒ!“ŽcŽ“¾“3c¾”¾3“¾”””c,c]¾””¾¾”ƒ¾”“ƒ¾“¾¾Ä¾¾ƒ¾”“3c¾cc¾”¾””…¾ “”qAq3 AjA@øŒ×ľľ3ƒ!]2””“Ž2c”½3¾”½””,”]c,”¾¾“¾“¾“ƒ¾”“¾¾”““cc¾”i¾¾Äîƒc¾¾Ä¾”¾”¾“”“”“Ž“@qH@A@qAøŒ×¾Äéľ2ƒ3c,3]3]]¸”3½”¾Ž“Ž“cc”¾“”ƒ¾””“”“޾““Ž””3cƒ¾"”“Ž“”¾”]”¾”“¾¾“¾”¾“¾”¾¾”k:qq@:qAq3ø‹Ø¾Ä¾Ä¾ƒ+c”“,”22c2c”“¾¾”¾“Žc¾”¾“¾”¾“Žcc¾Ž“c¾½3ƒ¾ľƒc¾¾“¾¾”¾”“¾“¾Ž½”“¾9A::G:qAqAø‹àc3323,„c%Ž3”¾½¾]c]cc¾”¾”““޾¾”¾c”½c]¾””id„c]¾¾”¾”“”½”¾Ž”“¾”¾”¾A@A3qAAqG@øŠâ.]c2,c]”]2¾”¾”2ccÄ]]c½”½Ž¾“”cc¾””c]c¾”¾cc¾¾ƒc]¾¾“¾¾“¸¾”“¾\3]ƒ””qx@:@qGqqr@ø‰ãR23c]”c2Ž“¾¾3Ž¾ÄŽ“”Ž“¾cd¾“]”½cŽcc¾”½cc¾¾””¾¾Ä“”“”¾“¾Ä”]c¾¾iŽ”“”¾@qH@kAAkA@A@@ø‡ãS323c]]]2””½”2c]“Ž“”c¾]c”“ccc”c”¾”¾3]”““޽ľ޾”¾cc]c¾”¾¾“”޾¾Aqq:@A@kqAA:ø†ä3c”2,3””]32Ž“Ž]c¾”cc3ƒc4]”c¾”½”\c“¾Ž“”]cŽcc¾”¾¾qqrq@qG:3G@qGrGq3:qqGAqq:ø†å3c32 ,3“Ž“cc2cc”“3¾”“]”ccƒ¾2””¾]c”Ž”“¾ŽcGqG:qqGrGxAjrGrq qr@r@qrGr@GrqAqAqø†çc232Ž“Žcc,½”]cƒ¾%23]]”]”“Ž“c]c3“¾“rrwGqr@rqqrxGrwr9;xƒrGqHq:AqGqGrA9 AqG@ø†Å“¾3]2 332-2”½ƒc,””2¾”c23c”“]]¾cƒ:0AprqrrwrrqGrqGrGrqrGrG:@qGG@@Aqrq@@AqrqqGk99rGkø†Äc]c2 O23,””]]2Ž“Ž,ccc¾“¾A9: @:AqHGAGAwrGrqHqGqHqxqqAkGkG::j:9 3:3@ qHqqHA: k@Aø…êM23¾”c3”,9]“ŽcA kA:@:@qq@@kGj@qkGqqHqqrqA@qGGr9@qrGq:@ 3 G: q rAqGrqGq @qø…ëM,,c¾”]2”c]3c@@kAFkAj A@k@Ak@rqrrGqG::GA@:qrqG3qGrx:@4GkAjAqq qAqAqqHq:3ø„ê+c3,d2c]3c]3Fk@A@k:GkA@kAjA@qGqGrM@kGqGqq@„:Gq::rxqr:@@qGA@xHq@qGqAqrqrx :ø…ç92c,3“3]2c]2”@kAj:@:3A@@q:@@:9:GrqrrGqAqkHrqxqGqrHqG@G:ƒ@A@3Aqr@ƒr AqxHxq@@Aø…ë,3c3“””22”A@@:@:AqGq…:2@4qAGq@qHqHqqGrrGqGrq94@:@AkqAA@:9 kMr@qHqqr@A@@ø…ìJ23,2Ž”¾,3393GkGkA9GA@9 @3GkqGqAkAkGGqrMqHq9HGqG:@:qGqk@q::@:@Aqq :3::ø†ìI2Ž32”¾”¾2cc3 9AApA@k@3:@A3@GqHqGAp@qr: ::qArqqrqqAqGrGqAqG:@::3:: 99ø‡ì,2”¾23”“23233\: qA::G::@:@A…:'@A:rGq 9:qGqGArGAqGAk@qrGrqq::9 3 3AGøˆí"3“޾3\c33]239 39 :@::@::@q@3@3Aƒ@A qAGƒ:399A@;jƒA@qA„:9øí<””½323]2]2-2@ 333@:@AAG:A@39:49:3 3  33 2@::@:@ø“íƒ)c2cc,33232 2 3@Ak:@@k@q::49 3 9 99„: 394::3k@ø•탔cŽ„c]c2ƒc']3, 93@@ :@kAAq@”9:9:@:@;:@:@:9 :9@@ø™í2“3\3]3c‡Žc]33]c]332c 3@Aj@:G9:@@” 9 qGq :3::@øí¸“223…c]2]3223\32-2]A,23ƒcc””“¾ø¨í(cŽc]c3]cc]cc32c]c3]c,32G@@323233,Ž”¸”cø§îƒc]c,„c3233]cc]9,c]c]c]2]3\c“”¾“”]ø§ï&33c]232Žc]]3cc2c]c3c]332323233””“ޓ޸§ð&,cc]9]2cc2]2,c]c”“Ž“ŽŽ””“޾””“ø¦õ2-2,322ƒcŽc”””“”c“Ž“Žc”“¾”ø§ø323]c“cc]”””ŽiŽ“Ž]“ø©øƒ3,]3dc”””””Ž““ø«ø† ]c2cc3”ƒd“c“ŽŽø«ø†23]32]“Žiޓޔޔcø«øŒ33c”cø°øøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄøøÄUªU«3f™Ìÿ**3*f*™*Ì*ÿUU3UfU™UÌUÿ3f™Ìÿªª3ªfª™ªÌªÿÔÔ3ÔfÔ™ÔÌÔÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3*3*33*f3*™3*Ì3*ÿ3U3U33Uf3U™3UÌ3Uÿ3333f3™3Ì3ÿ3ª3ª33ªf3ª™3ªÌ3ªÿ3Ô3Ô33Ôf3Ô™3ÔÌ3Ôÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf*f*3f*ff*™f*Ìf*ÿfUfU3fUffU™fUÌfUÿff3fff™fÌfÿfªfª3fªffª™fªÌfªÿfÔfÔ3fÔffÔ™fÔÌfÔÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™*™*3™*f™*™™*Ì™*ÿ™U™U3™Uf™U™™UÌ™Uÿ™™3™f™™™Ì™ÿ™ª™ª3™ªf™ª™™ªÌ™ªÿ™Ô™Ô3™Ôf™Ô™™ÔÌ™Ôÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ*Ì*3Ì*fÌ*™Ì*ÌÌ*ÿÌUÌU3ÌUfÌU™ÌUÌÌUÿÌÌ3ÌfÌ™ÌÌÌÿ̪̪3̪f̪™ÌªÌ̪ÿÌÔÌÔ3ÌÔfÌÔ™ÌÔÌÌÔÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ*ÿ*3ÿ*fÿ*™ÿ*Ìÿ*ÿÿUÿU3ÿUfÿU™ÿUÌÿUÿÿÿ3ÿfÿ™ÿÌÿÿÿªÿª3ÿªfÿª™ÿªÌÿªÿÿÔÿÔ3ÿÔfÿÔ™ÿÔÌÿÔÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿTªÿUªÿ,/(-(hdf4-hdf4.3.1/hdf/util/testfiles/storm110.hdf000066400000000000000000000066371503061704500206340ustar00rootroot00000000000000k.nÊ ±ÊnÊ ±jn {Èn ,n ƒ2n —ÿúäA@záÿúäA@záÿúäA@záÿúäA@záÿúäA@záÿúäA@záÿúäA@záÿúäA@záÿúäA@záRRQQPOOONNNNNNNNNNNNOOPQRSSTUVWXYZZZZYXXWVUTTTTTTTTUUUUVVQPPPOONNNMMNNNNNNNNNNOPQRRSTUVWXYZZZZYXWWVUTTTTTTTTUUUUVVOOOONNNMMMMMMMMMMMMNNOPPQRSTUVWXYZZZZYXWVVUTTTTTTTTUUUUVVNNOONNMMMLLLLLMMMMMMNNOPQRSSTVWXYYZZYYXWVVUTTTTTTTTUUUUVVMNOONNMMLLLLLLLLLLMMMNOPPQRSTUVXXYYYYYXWVUUTTTTTTTTUUUUVWNOOOONNMMLLLLLLLLLLMMNNOPQRSTUVWXYYYYXXWVUUTTTTTTTTUUUUVWQQPPOONNMMLLLLLLLLLLMMNOPQQRSUVWXXYYXXWWVUTTTTTTTTTUUUVVWSSRQPOONNMMMLLLLLLLLMMNNOPQRSTUVWXXXXXWVUUTTTTTTTTTUUUVVWWVTSQPPONNNMMMLLLLLLLMMNOPPQRTUVWXXXXWWVUUTTSSSTTTTUUUVVW[YVTRQPPOONNMMMLLLLLLMMNNOPQRSTVWWXXWWVUUTTSSSSSTTTUUUVVW[ZVSRQQPPPONNMMMLLLLLLMMNNOPQRTUVWWWWVVUTTSSSSSSTTTUUUVVW]XTRQQQQPPOONNMMLLLLLLLLMNNOPRSTUVWWVVUTTSSSSSSSTTTUUUVVW[XSPOPPPPPOONMMLLLKKKKKLLMMNPQRTUVVVVUUTSSSRRSSSSTTTUUVVW^VPNNOOOOOONNMMLLKKKJJJKKLLMOPQSTUVVUUTTSSRRRRSSSTTTUUUVWYRNMMNNOONNNMLLKKJJJIIIJJKKLMOPRSTUUUUTSSRRRRRRSSTTTUUUVWUPLKLMMMNMMMLLKJJIIHHHHHIIJKLNOQSTUUUTTSRRRRRRRSSTTTUUUVWHLJJKKLLLLLKKJJIHHGGGGFGGHHJKLNPRSTTTTSSRRQQQRRRSSTTUUVVWDHHHIJJJJJJJIIHHGFFEEEEEEFGHIKMOQRSTTTSRRQQQQRRRSSTTUUVVWACEFGGHHHHHHHGFFEDDCCBBBCDDFGIKMPQSSTSSRRQQQQQRRSSTTUUVWX=?ACDDEEEFFFEEDDCBBA@@??@ABCEGILNPRSSSSRRQQQQQRRSSTUUUVWX:;>@AAABBBBBBBBAA@?>>==<==>@BEGJMOQRSSRRQQQQQQRRSTTUUVVWX78;<=====>>>>>>==<;:988889;BFIMOQRRRRQQQQQRRSSTUUVVWXY568::87655667788888876520..16:>CGKNPQRRRQQQQQRRSTTUUVWXXY=<<==;:877779:;<>@BDDDB@;61-/5:@EJMPQRRRRQQRRRSSTUUVWWXYZ79=ABBA?>=>?@BEHLNQSVXXVRJA70/5@BEJMOPQTWZ]`bcddddddcba_][Y[`iˆropsuwxxyyyywxwrswpcVMGEEFILNQTX[^`bbbbbccbba`^][YWVX[_€uonprtvwxxwwxvvwtoquskbZUSSUWZ]_aaa`________^\[YWTQNKIF@AAABBBBBBBBAA@?>>==<==>@BEGJMOQRSSRRQQQQQQRRSTTUUVVWX78;<=====>>>>>>==<;:988889;BFIMOQRRRRQQQQQRRSSTUUVVWXY568::87655667788888876520..16:>CGKNPQRRRQQQQQRRSTTUUVWXXY=<<==;:877779:;<>@BDDDB@;61-/5:@EJMPQRRRRQQRRRSSTUUVWWXYZ79=ABBA?>=>?@BEHLNQSVXXVRJA70/5@BEJMOPQTWZ]`bcddddddcba_][Y[`iˆropsuwxxyyyywxwrswpcVMGEEFILNQTX[^`bbbbbccbba`^][YWVX[_€uonprtvwxxwwxvvwtoquskbZUSSUWZ]_aaa`________^\[YWTQNKIF=?@BCDEEFFFGGHHIJLMNPRUXZ\^_`_]YUPLIGGHIKMOQSTVWXYYYZZZC@><<>@BDEFFGHHIIJJKLNPRTWZ\^```^ZVQMIGGHIKMOQRTVWXYYYYYYWWUOHC@ACEGHJLMNPPQQPPPRTWY\^`a`_\WRMJHGHIKMOQRTVWXXXXXXXmnmg]SLGFGIKMPRTVWXXXWVTTVY\^`aa`]YSNJHGHIKMOQRTVWXXXXXXXkuyulc[VSSTVY\_`aaa`_^]\ZXY\^`bba^ZUOKIHHIKMOQRTVWXXXXXXXfr~wojgffgjloqrrqomifca`^[\^abcb_[VQLIHHJKMOQSTVWXYYXXXWzˆˆ€wsrsuwy{}~}{xtojfdc`^^accca]XRMJIIJLMOQSUVXYYYYXXXk|‹Ž‡}xwxz}€‚ƒƒ‚‚‚€~{wqkfddb`acddb^YTOKIIJLNOQSUWXYZZZYYY„Ž‘Œƒ|{}‚…‡†…†ˆ‡„~|yslfddcaceec`[UPLJJKLNPRTVXYZ[[[ZZY{ˆ‘“†ƒ†ŠŒ‹ˆ‰Œˆ…‚€~{yslfeecceedb]WRNKKKMOQSUWYZ\]]]\\\~…”‰……ˆ‹ŽŠŠ‰†……„|yvpieedcefec_YTOLKLNOQSVXZ\]^__^^^ƒ‰”‘Šˆ‰‹ŽŒ’”Œ‰‘’ˆ€ytqkededeffda[VQNMMNPRTWY[]_`aaaa`ƒŠ‘“ŒŒ”—Ž‹“¡Ÿ˜‚xqmjeceeefgeb]XSPNNOQSVXZ]_`bccddd†‹’‘’•˜”‹•¤­¬¤—Š~skgfcaceefgfd`ZURPOQRUWY\^`bdeffgg‡‹‘‘‘’Ž“™™“¤²´«~sjc`a`_beeghheb]XTRQRTVX[]`bdeghhiiˆŒ‘‘‘‘‘—š•Ž›¯·²¤‘pf_ZY[\]adegiigd_[WTSSUWZ\_aceghijkkŠ‘‘’Ž’˜˜‘¤µ·¬›†sdZURRUX[`efhjjifb]YVUUWY[^`befhjkllmŒ‘‘“™–Ž”©¶²¦”k\SNLNRVY`eghkkjhe`\YXWXZ\_adfhiklmmn‹ŒŽŽ”—”Œ–ª³­ ŽzhYPKIKPUZaghjlmljgd`\ZZZ\^`beghjkmmno‹‹ŒŒŽŽ”•‘‹•¨®¨›ŠxfYOJILQV\dijlnnnmjgc`]\\]_acegiklmnopŠŠŠ‹Œ‹““Š’£©¢–†vgZQLLNSY`hklnpppolifc`_^_`bdfhiklmnoq‰Š‰Š‹‹‹Š‘‘ˆœ£ž’„uh\TPPSX^flnnqrrrqolifcaaabcefhjklmnpr‡ˆ‡‡ˆŠ‰‰‹Œ†ˆ”œ™ƒvj`ZWWZ_elppqtuutsqolifdcbcdeghiklmoru††……†‡ˆˆ‰ŒŽŒ…ƒ‹””„xnfa_`chmqstuvwvvusqnkhfdddefghijlmptx††„„…‡‡‡‡‰Œ‹…ƒŠŽ‹„|smihilpsvwxxyyxxvurpmjhfeeeffgijkou{}„„ƒƒ„…†††‡‰Š…~}†‡„ytqqrtwz|||||{zywusqnkigfeeefggimt|ƒ‡ƒƒ‚ƒ„…………†ˆ†€zz~‚€}zyyz|~€€€~}{zxvsqnligfeeeeegkou|ƒˆ‚€‚‚‚ƒƒ‚„……{wwz|}~}}~‚ƒ‚‚€~}{yxuspnkigeedccehkowƒ‹€€€€€€‚ƒ}xttvxz{}~€‚‚‚€}|zywtromjhgecbbdefjt„‘˜š€~~~~~zusrstvxz|}~~}|{zxwurpnligecbbcbagu‡–Ÿ¡ ~}~~~}}||}}|xurqrstvwyzz{{zyxwvtspnljhedcca^^fxŠ˜¢¦¦£~}}}}~~~}}}|{{{{zxusrqrstuvwwwwvvusrpnljhfedb_\]gw‡•Ÿ¥§¦¤~}|}}}|}||||{zzzzywutrrrrsstttttsrqpnlkihfda^[]fs‚𢦧¦¥}|||||{{zzz{{zyyyyxwvtsrrqqqrrrqqponmljigda]\^ep|ˆ”ž¥¨§¦¥}{{{{{zzyyyyyyyyyyyxwvtsrqppppppoonmljhfc`]]_emw€‹– ¦¨¨¦¤|{{{{{zzyxxyxxxyyyyyyxvusrponmmllkjigec`_^^afmtz‚™£¨©¨§§|zz{zzzzyxxyyxxyyyyyyyxxwvusqpnmlkjihfeedegimrw|ƒŽ›¤©ª¨¦¦|{z{zzzzxxxyxxxyyyyyyxxxwvvuuttsrqqponmllllnpty}„›¤©ª¨¦¥9999jx,x.xhdf4-hdf4.3.1/hdf/util/testfiles/storm120.raw000066400000000000000000000062611503061704500206560ustar00rootroot00000000000000RRRRQQQPPPOOOOOOPQRSUVXY[]^___^\YVRNKHFFGIKMNPRSUVWWXXXYYRRRRQQQPPPOOOOOOPQRSUVXY[]^___^\YVRNKHFFGIKMNPRSUVWWXXXYYRRRRQQQPPPOOOOOOPQRSTVXY[]^___^\YVRNKHFFGIKMNPRSUVWWXXXYYRRRQQQQPPPOOOOOOPQRSTVXY[]^___^\YVRNJHFFGIKMNPRSUVWWXXXYYRRRQQQPPPPOOOOOOPQRSTVXY[\^___]\YVRNJHFFGIKLNPRSUVWXXXYYYRRRQQQPPPPOOOOOOPQRSTVXY[\^___]\YVRNJHFFGIKLNPRSUVWXXXYYYRRQQQQPPPOOOOOOOPPRSTVWY[\^^_^]\YVRNJHFFGIKLNPRSUVWXXXYYYRRQQQQPPPOOOOOOOPPQSTVWY[\^^_^]\YVRNKHFFGIKLNPRSUVWXXYYYZRQQQQPPPPOOONNOOPPQSTVWY[\]^_^]\YVRNKHFFGIKMNPRTUVWXYYYZZQQQQPPPPOOOONNNOOPQRTUWYZ\]^_^]\YVRNKHFFGIKMNPRTUWXXYYZZ[QQQPPPPOOONNNNNNOPQRTUWXZ\]^^^]\YVRNKHFFGIKMNPRTUWXYYZZ[[PPPPPOOOONNNNNNNNOPRSUVXZ\]^^^]\YVRNKHFFGIKMOPRTVWXYZZ[[\OOOOOONNNNNMMMMNNOPQRTVXZ[]^^^]\YVRNKHFFGIKMOQRTVXYZZ[[\\NNNNNNNMMMMMMMMMMNOPRTUWY[]^^^^\YVRNKHFFGIKMOQSUVXYZZ[\\]LLMMMMMMLLLLLLLLMMNOQSUWYZ\^^^^\ZVRNKHFFGIKMOQSUVXYZ[[\]]JKKLLLLLKKKKKKKKLLMNPRTVXZ\]^_^]ZWSNKHFFGIKMOQSUWXYZ[[\\]GHIJJJJJJJJJJJJKKLLNOQSUWY[]^_^][WSOKHFFGIKMOQSUVXYZZ[[\]EEFFGHIIIIIIIIIJJKLMNPRTVY[]^__^[XTOKHGFHIKMOQSUVXYZZZ[[\?ABCDEFGGHHHHHIIIJKLMOQSVX[]^__^\YTPLHGFHIKMOQSUVXYYZZZ[[@>=?@BCDEEFFFGGHHIJLMNPRUXZ\^_`_]YUPLIGGHIKMOQSTVWXYYYZZZC@><<>@BDEFFGHHIIJJKLNPRTWZ\^```^ZVQMIGGHIKMOQRTVWXYYYYYYWWUOHC@ACEGHJLMNPPQQPPPRTWY\^`a`_\WRMJHGHIKMOQRTVWXXXXXXXmnmg]SLGFGIKMPRTVWXXXWVTTVY\^`aa`]YSNJHGHIKMOQRTVWXXXXXXXkuyulc[VSSTVY\_`aaa`_^]\ZXY\^`bba^ZUOKIHHIKMOQRTVWXXXXXXXfr~wojgffgjloqrrqomifca`^[\^abcb_[VQLIHHJKMOQSTVWXYYXXXWzˆˆ€wsrsuwy{}~}{xtojfdc`^^accca]XRMJIIJLMOQSUVXYYYYXXXk|‹Ž‡}xwxz}€‚ƒƒ‚‚‚€~{wqkfddb`acddb^YTOKIIJLNOQSUWXYZZZYYY„Ž‘Œƒ|{}‚…‡†…†ˆ‡„~|yslfddcaceec`[UPLJJKLNPRTVXYZ[[[ZZY{ˆ‘“†ƒ†ŠŒ‹ˆ‰Œˆ…‚€~{yslfeecceedb]WRNKKKMOQSUWYZ\]]]\\\~…”‰……ˆ‹ŽŠŠ‰†……„|yvpieedcefec_YTOLKLNOQSVXZ\]^__^^^ƒ‰”‘Šˆ‰‹ŽŒ’”Œ‰‘’ˆ€ytqkededeffda[VQNMMNPRTWY[]_`aaaa`ƒŠ‘“ŒŒ”—Ž‹“¡Ÿ˜‚xqmjeceeefgeb]XSPNNOQSVXZ]_`bccddd†‹’‘’•˜”‹•¤­¬¤—Š~skgfcaceefgfd`ZURPOQRUWY\^`bdeffgg‡‹‘‘‘’Ž“™™“¤²´«~sjc`a`_beeghheb]XTRQRTVX[]`bdeghhiiˆŒ‘‘‘‘‘—š•Ž›¯·²¤‘pf_ZY[\]adegiigd_[WTSSUWZ\_aceghijkkŠ‘‘’Ž’˜˜‘¤µ·¬›†sdZURRUX[`efhjjifb]YVUUWY[^`befhjkllmŒ‘‘“™–Ž”©¶²¦”k\SNLNRVY`eghkkjhe`\YXWXZ\_adfhiklmmn‹ŒŽŽ”—”Œ–ª³­ ŽzhYPKIKPUZaghjlmljgd`\ZZZ\^`beghjkmmno‹‹ŒŒŽŽ”•‘‹•¨®¨›ŠxfYOJILQV\dijlnnnmjgc`]\\]_acegiklmnopŠŠŠ‹Œ‹““Š’£©¢–†vgZQLLNSY`hklnpppolifc`_^_`bdfhiklmnoq‰Š‰Š‹‹‹Š‘‘ˆœ£ž’„uh\TPPSX^flnnqrrrqolifcaaabcefhjklmnpr‡ˆ‡‡ˆŠ‰‰‹Œ†ˆ”œ™ƒvj`ZWWZ_elppqtuutsqolifdcbcdeghiklmoru††……†‡ˆˆ‰ŒŽŒ…ƒ‹””„xnfa_`chmqstuvwvvusqnkhfdddefghijlmptx††„„…‡‡‡‡‰Œ‹…ƒŠŽ‹„|smihilpsvwxxyyxxvurpmjhfeeeffgijkou{}„„ƒƒ„…†††‡‰Š…~}†‡„ytqqrtwz|||||{zywusqnkigfeeefggimt|ƒ‡ƒƒ‚ƒ„…………†ˆ†€zz~‚€}zyyz|~€€€~}{zxvsqnligfeeeeegkou|ƒˆ‚€‚‚‚ƒƒ‚„……{wwz|}~}}~‚ƒ‚‚€~}{yxuspnkigeedccehkowƒ‹€€€€€€‚ƒ}xttvxz{}~€‚‚‚€}|zywtromjhgecbbdefjt„‘˜š€~~~~~zusrstvxz|}~~}|{zxwurpnligecbbcbagu‡–Ÿ¡ ~}~~~}}||}}|xurqrstvwyzz{{zyxwvtspnljhedcca^^fxŠ˜¢¦¦£~}}}}~~~}}}|{{{{zxusrqrstuvwwwwvvusrpnljhfedb_\]gw‡•Ÿ¥§¦¤~}|}}}|}||||{zzzzywutrrrrsstttttsrqpnlkihfda^[]fs‚𢦧¦¥}|||||{{zzz{{zyyyyxwvtsrrqqqrrrqqponmljigda]\^ep|ˆ”ž¥¨§¦¥}{{{{{zzyyyyyyyyyyyxwvtsrqppppppoonmljhfc`]]_emw€‹– ¦¨¨¦¤|{{{{{zzyxxyxxxyyyyyyxvusrponmmllkjigec`_^^afmtz‚™£¨©¨§§|zz{zzzzyxxyyxxyyyyyyyxxwvusqpnmlkjihfeedegimrw|ƒŽ›¤©ª¨¦¦|{z{zzzzxxxyxxxyyyyyyxxxwvvuuttsrqqponmllllnpty}„›¤©ª¨¦¥hdf4-hdf4.3.1/hdf/util/testfiles/storm130.hdf000066400000000000000000000066371503061704500206360ustar00rootroot00000000000000k.‚Ê ±Ê‚Ê ±j‚ {È‚ ,‚ ƒ2‚ —ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =ÿúäA‹ =UTTTUUUTTTUUUVVWXYYZ[\\]^^_``aaa`_]ZVQKFDEGKOSVX[\^_``aaaUTTTUUUTTTUUUVVWXYYZ[\\]^__``aaa`_]ZVQKFDEGKOSVX[\^_``aaaUTTUUUUUUUUUUVVWXYZZ[\\]^__``aaa`_]ZVQKFDEGKOSVXZ\^_``aaaTTTTUUUUTUUUUVVWXYZZ[\\]^__`aaaa`_]ZVQKFDEGKOSVXZ\]__`aaaTTTTUUUTTUUUUVVWXYZ[[\]]^_``aaaa`_]ZVQKFDEGKOSVXZ\]^_``aaTTTTUUUUUUUVVVWXXYZ[[\]]^_``aaaa`_][WQKFDEGKORVXZ\]^_```aTTTTUUUUUUUUVVWXXYZ[\\]^^_``aaaa`_][WQKFDEGKORUXZ\]^__```TTTTUUUUUUUVVVWXXYZ[\]]^^_`aaaaaa_][WQKFDEGJNRUXZ[]^^__``TSTUUUUUUUVVVWXXYZ[[\]]^__`aaaaaa_][WQKFDDGJNRUXZ[]]^____SSTTUUUUUUVVVWXXYZ[\\]^^_``aabbaa`][WQKFDDGJNRUXZ[\]^^___SSSTUUUUUVVVWWXXYZ[\]]^^_`aabbbaa`^[WQKFCDFJNRUXZ[\]^^^^_SRRSTUUVVVVWWXYYZ[\\]^^__`aabbbba`^[WRKFCDFJNRUXZ[\]^^^^^TRRSSTUUVVVWXXYZZ[\]^^__``abbbbba`^[WRKECCFJNRUXZ[\]^^^__TSRSTTUUVVVWXXYZ[\]]^__``aabbbbba`^\XSLEBCFJNRVXZ[\]^^___TSRRSTUVVWWWXYZ[\\]^__```abbcccbba_\YSLEBCFJOSVXZ\]]^__``UTSSTUVVWXXXXXY[\]]^__``aabcccccba_]YTMEABFJOSVYZ\]^__`aaUTSRRTVXXXYYYYZ[\^^__``aabccdddccb`^ZUMEABFKOSWY[\^_``abbXWVTRRTVXZZ[\\\\]^__```abbcddddddca^[VNFABFKPTWY[]^_aabccXXXXWUUUVXZ\]^^^^_`aaaaabccdeeeedcb_\WOF@AFKPTWZ\^_`bcdddha[XXXXYYYY[]^_```abbbbbbcddefffedb`]XPG@AFKPTXZ\^`acdeff€zpd\YYZ[\]^_`abbabbccbbccdeffgffeca^YRG@@FKQUX[]_`bcefgg”ˆ|nd^\\]_`acdeedcccddccddefgggfedb^ZSH@@FLQUX[]_abdeghhŸ˜Žtjda`aabcefggfeddedddeefghhgfeb_[TI@@FLQUX[]_acdfghh£ œ•Œvnjhhgggghhihhgfeeeeeffghhhgfc`\UKA?FLQUX[]_acdfghi¡›—”ކ~wspooonnnmlkjihgfffffgghiihfda]WLA?ELQUX[]_abdefgh˜’‘‘ˆƒ~zxvvuuutsrpnljihgfffghiiiigeb^XNB?ELQUX[]_`bcdeggŽŽŽ‹‡„€~|{zzzyyxwurnkihgffghijjihfc_YOC>ELQUX[]^`abcdeeˆ‹Ž‹ˆ…ƒ€}|{{zzywsokihggghijjjigd`ZQD>ELPUXZ\]_``abcdŠŒŽ’““’‘ŽŒ‰‡„}|{zywtokiggghijkkjgda[SE>ELPTWZ[]^__`aabŒ‘”•–––•”“’Ž‹‡ƒ|zzywsnjhggghjkkjheb]TG?DLPTWY[\]^__``a‘”•–––––—˜™˜—”‹†€{xxxvrliggghjkkkifc^VI?DLPTWY[]^__``aa“••••–˜›ž›˜•’ˆyuuvtojggghiklljgd_WJ@DLPTWZ\^_`abbbb‘”••–—šŸŸœ™”‘‘‘މwsstqkhgghikllkhe`YMADLQUX[^`bcdeeff’““”—›žž™”‘”––”Œ†}sprrmhffgiklmljfb[OBCLQVZ]`cefghhii‘‘‘•šžœ—’‘–¢¤¢œ”†unnpnigfgikmmmkhc]QDCLRW[_cehikllll‘”˜š›™•‘”œ¦¯³³­¤™„}vmknnjgfgikmnnlie_TFCLRX]behklnopqq‘•—˜–”‘’– ¬¸¿À»²¦˜‹xslhkmkgfgilnoomkgaWIDLSY_dhkmoqrrss‘•––”’’— ­»ÅÉź­Ÿ‘…yqniehlkhghjlnppolid[LEKT[afjmpqsuvvv’•”“‘’–žª¹ÆÍÊÀ²¡’…zpigfceklighjmoqqpnkf^PFKT\bhlprtuwy{}‘’‘‘‘•›¦´ÃÌÍÆ¸¦“ƒvmfa`badjlihiknprrrpmhaUHKT]djnrtvxyz{~Ž‘‘‘’˜ ¬»ÇÍʾ®š†uha]Z[^_cjmjijloqsttrokdZLLT]ekptwyz{{{{Ž‘‘”›¤°¾ÈËÄ·¤{j^XUTW\^cknljkmprtuutqmh^PMT]flrvy{}~~~}Ž‘•œ¦²¿Çƾ°ˆtdXSQQU[^elomkmortvwwvspkbVOT]fmsx{~€‚Ž‘•¦²½ÃÁ¹ª˜…rbWRPQV\`goqnmoqsvxxxwurmf[RU]fnuy}€‚ƒ„„…Ž”œ¥°º¾¼´¦•ƒrcYTRTY^dkrrpoqsuwyzzywtpjaWV]fou{~ƒ…†‡ˆŽ“𢬵¹·¯£”„tg^XWY^chputrqsuwyz{{zyvrme\Y^fov{‚„†ˆŠŽŽŽ—ž§¯³±« “…xlc_]_chntwvttuwy{||}|zxupi`\`gov{‚…‡‹“ŽŒŽ“š¡©¬«§ž“‡{qjfefjntxzxvvxy{|}}~}{yvqle`bhov{ƒ†‰‘–ŒŽŽ‹‹•›¢¦¦¢›’ˆvpmlmpty{{yxxz{|}~~~~|zwtnhdeiov{ƒ‡‹”œŠ‹‹‹‰ˆŠ•›Ÿ ž™’Š‚{vtsuwz}~}{z{|}~~~}{xtpkghkpv{€…‰‘š¨ˆ‰‰‰ˆ††Š”˜š™–‘‹…€|zz{}€€~}|}}~~~}{xuqmjjlqv|†ŠŽ–¥¶‡‡‡‡†…ƒ…‰‘””“Œ‡„€€‚‚‚€~~~}{xuqnllnrw~ƒ‡Ž—£²¾††……„ƒƒ‡‹ŽŽ‹‰†„„ƒ„„„„ƒ€€€€€~}|zwurommotz…Ž™¤®·¿……„ƒ‚‚€~…ˆŠ‹‹‹Šˆˆ‡‡‡††…„‚€€€~~}{ywtqnmnrw|ƒœ¥«°µº„„‚‚€~}}€ƒ†ˆ‰‰‰ˆˆˆˆˆˆ‡†„ƒ‚€€~~}|zxurpooqsw¤¨«¯³µ„ƒ‚€~~}||~‚…‡ˆ‰‰‰‰‰‰ˆ‡†„ƒ‚€€~}}{zxvsqpooqv€›¡¤¦ª¯±²„ƒ‚€~}}|||~„†ˆ‰ŠŠŠ‰ˆ‡…„‚€€~~}|{zxvtrqpoqu}Š–¡£¦ª®°°9999j‚,‚.‚hdf4-hdf4.3.1/hdf/util/testfiles/storm130.raw000066400000000000000000000062611503061704500206570ustar00rootroot00000000000000UTTTUUUTTTUUUVVWXYYZ[\\]^^_``aaa`_]ZVQKFDEGKOSVX[\^_``aaaUTTTUUUTTTUUUVVWXYYZ[\\]^__``aaa`_]ZVQKFDEGKOSVX[\^_``aaaUTTUUUUUUUUUUVVWXYZZ[\\]^__``aaa`_]ZVQKFDEGKOSVXZ\^_``aaaTTTTUUUUTUUUUVVWXYZZ[\\]^__`aaaa`_]ZVQKFDEGKOSVXZ\]__`aaaTTTTUUUTTUUUUVVWXYZ[[\]]^_``aaaa`_]ZVQKFDEGKOSVXZ\]^_``aaTTTTUUUUUUUVVVWXXYZ[[\]]^_``aaaa`_][WQKFDEGKORVXZ\]^_```aTTTTUUUUUUUUVVWXXYZ[\\]^^_``aaaa`_][WQKFDEGKORUXZ\]^__```TTTTUUUUUUUVVVWXXYZ[\]]^^_`aaaaaa_][WQKFDEGJNRUXZ[]^^__``TSTUUUUUUUVVVWXXYZ[[\]]^__`aaaaaa_][WQKFDDGJNRUXZ[]]^____SSTTUUUUUUVVVWXXYZ[\\]^^_``aabbaa`][WQKFDDGJNRUXZ[\]^^___SSSTUUUUUVVVWWXXYZ[\]]^^_`aabbbaa`^[WQKFCDFJNRUXZ[\]^^^^_SRRSTUUVVVVWWXYYZ[\\]^^__`aabbbba`^[WRKFCDFJNRUXZ[\]^^^^^TRRSSTUUVVVWXXYZZ[\]^^__``abbbbba`^[WRKECCFJNRUXZ[\]^^^__TSRSTTUUVVVWXXYZ[\]]^__``aabbbbba`^\XSLEBCFJNRVXZ[\]^^___TSRRSTUVVWWWXYZ[\\]^__```abbcccbba_\YSLEBCFJOSVXZ\]]^__``UTSSTUVVWXXXXXY[\]]^__``aabcccccba_]YTMEABFJOSVYZ\]^__`aaUTSRRTVXXXYYYYZ[\^^__``aabccdddccb`^ZUMEABFKOSWY[\^_``abbXWVTRRTVXZZ[\\\\]^__```abbcddddddca^[VNFABFKPTWY[]^_aabccXXXXWUUUVXZ\]^^^^_`aaaaabccdeeeedcb_\WOF@AFKPTWZ\^_`bcdddha[XXXXYYYY[]^_```abbbbbbcddefffedb`]XPG@AFKPTXZ\^`acdeff€zpd\YYZ[\]^_`abbabbccbbccdeffgffeca^YRG@@FKQUX[]_`bcefgg”ˆ|nd^\\]_`acdeedcccddccddefgggfedb^ZSH@@FLQUX[]_abdeghhŸ˜Žtjda`aabcefggfeddedddeefghhgfeb_[TI@@FLQUX[]_acdfghh£ œ•Œvnjhhgggghhihhgfeeeeeffghhhgfc`\UKA?FLQUX[]_acdfghi¡›—”ކ~wspooonnnmlkjihgfffffgghiihfda]WLA?ELQUX[]_abdefgh˜’‘‘ˆƒ~zxvvuuutsrpnljihgfffghiiiigeb^XNB?ELQUX[]_`bcdeggŽŽŽ‹‡„€~|{zzzyyxwurnkihgffghijjihfc_YOC>ELQUX[]^`abcdeeˆ‹Ž‹ˆ…ƒ€}|{{zzywsokihggghijjjigd`ZQD>ELPUXZ\]_``abcdŠŒŽ’““’‘ŽŒ‰‡„}|{zywtokiggghijkkjgda[SE>ELPTWZ[]^__`aabŒ‘”•–––•”“’Ž‹‡ƒ|zzywsnjhggghjkkjheb]TG?DLPTWY[\]^__``a‘”•–––––—˜™˜—”‹†€{xxxvrliggghjkkkifc^VI?DLPTWY[]^__``aa“••••–˜›ž›˜•’ˆyuuvtojggghiklljgd_WJ@DLPTWZ\^_`abbbb‘”••–—šŸŸœ™”‘‘‘މwsstqkhgghikllkhe`YMADLQUX[^`bcdeeff’““”—›žž™”‘”––”Œ†}sprrmhffgiklmljfb[OBCLQVZ]`cefghhii‘‘‘•šžœ—’‘–¢¤¢œ”†unnpnigfgikmmmkhc]QDCLRW[_cehikllll‘”˜š›™•‘”œ¦¯³³­¤™„}vmknnjgfgikmnnlie_TFCLRX]behklnopqq‘•—˜–”‘’– ¬¸¿À»²¦˜‹xslhkmkgfgilnoomkgaWIDLSY_dhkmoqrrss‘•––”’’— ­»ÅÉź­Ÿ‘…yqniehlkhghjlnppolid[LEKT[afjmpqsuvvv’•”“‘’–žª¹ÆÍÊÀ²¡’…zpigfceklighjmoqqpnkf^PFKT\bhlprtuwy{}‘’‘‘‘•›¦´ÃÌÍÆ¸¦“ƒvmfa`badjlihiknprrrpmhaUHKT]djnrtvxyz{~Ž‘‘‘’˜ ¬»ÇÍʾ®š†uha]Z[^_cjmjijloqsttrokdZLLT]ekptwyz{{{{Ž‘‘”›¤°¾ÈËÄ·¤{j^XUTW\^cknljkmprtuutqmh^PMT]flrvy{}~~~}Ž‘•œ¦²¿Çƾ°ˆtdXSQQU[^elomkmortvwwvspkbVOT]fmsx{~€‚Ž‘•¦²½ÃÁ¹ª˜…rbWRPQV\`goqnmoqsvxxxwurmf[RU]fnuy}€‚ƒ„„…Ž”œ¥°º¾¼´¦•ƒrcYTRTY^dkrrpoqsuwyzzywtpjaWV]fou{~ƒ…†‡ˆŽ“𢬵¹·¯£”„tg^XWY^chputrqsuwyz{{zyvrme\Y^fov{‚„†ˆŠŽŽŽ—ž§¯³±« “…xlc_]_chntwvttuwy{||}|zxupi`\`gov{‚…‡‹“ŽŒŽ“š¡©¬«§ž“‡{qjfefjntxzxvvxy{|}}~}{yvqle`bhov{ƒ†‰‘–ŒŽŽ‹‹•›¢¦¦¢›’ˆvpmlmpty{{yxxz{|}~~~~|zwtnhdeiov{ƒ‡‹”œŠ‹‹‹‰ˆŠ•›Ÿ ž™’Š‚{vtsuwz}~}{z{|}~~~}{xtpkghkpv{€…‰‘š¨ˆ‰‰‰ˆ††Š”˜š™–‘‹…€|zz{}€€~}|}}~~~}{xuqmjjlqv|†ŠŽ–¥¶‡‡‡‡†…ƒ…‰‘””“Œ‡„€€‚‚‚€~~~}{xuqnllnrw~ƒ‡Ž—£²¾††……„ƒƒ‡‹ŽŽ‹‰†„„ƒ„„„„ƒ€€€€€~}|zwurommotz…Ž™¤®·¿……„ƒ‚‚€~…ˆŠ‹‹‹Šˆˆ‡‡‡††…„‚€€€~~}{ywtqnmnrw|ƒœ¥«°µº„„‚‚€~}}€ƒ†ˆ‰‰‰ˆˆˆˆˆˆ‡†„ƒ‚€€~~}|zxurpooqsw¤¨«¯³µ„ƒ‚€~~}||~‚…‡ˆ‰‰‰‰‰‰ˆ‡†„ƒ‚€€~}}{zxvsqpooqv€›¡¤¦ª¯±²„ƒ‚€~}}|||~„†ˆ‰ŠŠŠ‰ˆ‡…„‚€€~~}|{zxvtrqpoqu}Š–¡£¦ª®°°hdf4-hdf4.3.1/hdf/util/testfiles/storm140.raw000066400000000000000000000062611503061704500206600ustar00rootroot00000000000000\ZYYXXYYYYYYXXXXXXXXXXXXXYYYZZZZZ[[\\\\]^`chhc^^`bceeffff\[YYYYYYYYYYXXXXXXXXXXXXXYYYZZZZZ[[\\\\]^`chhc^^`bceeffff\[ZYYYYYYYYYYXXXXXXXXXXXXYYYZZZZZ[[\\\\]^`chhb^^`bceeffff][ZYYYYYYYYYYYYXXXXXXXXXYYYYZZZZZ[[\\\\]^`chhb^^`bceeffff][ZZYYYYZYYYYYYYYYYYYYXYYYYZZZZZZ[[\\\\]^`chhb^]`bceeefff^\[ZZZZZZZZZZYYYYYYYYYYYYYZZZZZZ[[[\\\\]^_cghb^]_acdeeeee^][[ZZZZZZZZZZZYYYYYYYYYYZZZZZZ[[[[\\\\]^_cghb^]_acdeeeee_]\[[[[[[[[[ZZZZZZZZYYYYZZZZZ[[[[[\\\\\]^_cghb^]_acddeedd`^]\\\\\\\[[[[[ZZZZZZZZZZZZ[[[[[[[\\\\\]^`cghb]]_acddddddb_^]]\\\\\\\\[[[[[[[ZZZZZZ[[[[[[[\\\\\\]^`chhb]]`bcddddddc`_^]]]]]]]]\\\\[[[[[[[[[[[[[[[[\\\\\]]]^`chga\^`bddeddddda`_^^^^^^^]]]\\\\\\\[[[[\\\\\\\\\\]]]]]^`dhf_\^aceeeeeddeca_______^^^]]]]\\\\\\\\\\\\\\\\\]]]]]]^`dhe^]`bdeffeeeeeda`________^^^]]]]]]\\\\\\]]]\\\]]]]]]^_aehc]^adfgggfffffeba````````__^^^^^]]]]]]]]]]]]]]]]]]]]^_afhb]_cfghhhggffgfca`````a````__^^^^^^]]]]]]]]]]]]]]]]]^_bff`^aegiiiihggfgfdba``aaaaaaa``__^^^^^^^^^^^^]]]]]]]]]^_cfe__dgijjjihhggffdba`aaabbbaaaa``____^^^^^^^^^]]]]^]]]^`cfc_afikkkkjihhhhhfdbaabbbbbbbbaaa``_______^^^^]]]]^^]]^`ceb`dhklllkkjiiioomheccccccccbbbbaaa``_______^^^]]^^^^^_`bdaafjlmmmllkkjj{{xqjfeeeeeddccbbbbaa``````___^^^]^^^^^_`bcbdilnnnnmmlllkˆ‰‡€vmhggfffeddcccbbbaa`````__^^^^^^^^___accfknoooonnnmmm–˜—‘†xojiihhgfedcccccbaa`````__^^^^^^__^^`cdhmoppppppoooo¢¥¥¡—ˆzqmlkjihgeddddccbaa`````_^^^^^___]]adfjnpqqqqqqqqqq®¯°­¥—ˆ{ronmkjihfdddddcbaaaa``__^^^___^\\aehloqrrssssssssµ¶µ³­£•‡|tponlkihfeeeedcbaaa``__^^^___^[\bfinprssttuuuvvv¹·´±®¨ž’‡}vrqpnljhgffeedcbaa```_____`_]Z]chkoqrttuvwwxxyyµ±­¬«¨£š‘ˆxsrrqnkhgfffedbaa```_____`_[Z^eilprstuvwxyz{{{¯©¦§¨¨¤Ÿ™’Š‚zussrokhffffecba````___``^ZY_fjmprtuvwxz{||}}«¦¤¦©©§¢ž™”…~yvutplhffffdca````__```]YZahknqstuwxy{|}~¥¢£¦©«ª§¢š–ˆ|zxuqlgeeeecba````````\Y[ciloqstuvxyz|}~€€žŸ¢¦©¬­¬¨¢™–‘Š„|zvpjfddedba``````a_[X\djmoqrstuwxyz|}~~›Ÿ¤¨«®°°¯ª£œ˜–’Œ†‚~zuohdcddba`````aa_[X]fkmoqrsttvwxz{}}~› ¥§©ª¬¬­¬¨¢›•“‘Œ‡ƒysleccccba````aa^ZY^glmopqrstuvwy{|~šŸ¢¢¢¢¢£¤¦¦¥ ˜’Ž‹‡ƒ}wpicbbbba```aaa^ZY`hlmnppqrrtuvwxz|}™œœ›››œžŸ¡£¤£Ÿ—‹Š‰…zslebabba```aaa^YZahlmnoopqrstuvwxyy—™˜˜™›ž ¢¤¥¥¥¤Ÿ–Œˆ‡†ƒ~vohb`aba```aba^YZailmnnnopqstuvvwxx••–™œ ¤§ª¬­­«¨¥Ÿ”‰„„ƒyqjc_`aaa`abba]Y[bilmmmnoqrsuvwwxyy”–šž£¨­±µ¸¹¸´¯©£›„€€{sle__`a``abca^Z[billmmnpqstvwxyyzz–š ¥ª°¶¼ÁÄĽ¶®¦ž”‡~}}{unf`^_`aabccb^Z\billmnoprtuwxyzz{{šŸ¥«²¹ÀÆÊÌÊÆÀ¹±§ž•Š~yzzvoha^^`aabcdb^[\bilmmnpqsuwxz{{{||ž¤ª±¹ÁÈÌÎÌÈ»´¬¤›“Šwwyvpic^^`abcdec_[\bilmnpqsuvxz{}}}}}¡§®¶¿ÆÌÍËŽµ¬¦¡œ•އ~utvvpjd_^`abcded`\]bimnoqrtvxz|}~€¢©±ºÃÈËȸ­¢™’ŽŽ‹‡‚|sqtuqke`_`bcdegea]]bhmoprtvxz|~€‚£«´½ÄÇÆÀ¶ªœ„}z|~|xqnrtqkfa``bdefhgc_^bhmprtvx{}€‚ƒƒ„„„¤«µ½Âÿ¶ª›Œ~rjgkrvvtnlpsqlgcaacefhihea_bgmqsvx{}€‚„…†‡ˆˆˆ£«µ¼¿½·¬Ÿpd[Y^gnppljosqmhdbacegijjgbabgmqtwz}€ƒ…ˆ‰‹Œ¢ª³¹»¸°¥–†vgZRPU`hkljiosrmieccefhjlliebcglruy|€ƒ†‰ŒŽ‘’““ ¨±µ·³«Ÿ‘qbVOMR\dhihiosrnifddegjlmnkgddglrvz~‚†Š’“•–˜š¤­²³¯§œŽ~oaVPOT\cfhhjqtrnjhfegikmopnjgfgkqv{€„‰Œ“•—˜š ™ ©®¯¬¥šqdZUTX^cfhhlrusokigghjmoqrplighkpv|†‹“–˜™›ž¢¦•›¤©¬©¤š‚uja\[]behijouvsoljiijloqstsoliikpv|‚ˆ‘•˜š›ž¢¨±–ž¤¨§£œ’‡{qidcdfhijmrwwspmkjjlnpsuvurnkjkou|‚‰Ž”—™›ž¢ª·Ç‹—ž£¤¢•Œ‚yqmjjkllnqvywtpnlllnpruwxwuqmklot{‚‰”—𡬼ÊÒ‡Š–  —ˆ€ytrppopquyzwtqnmmnoqtvxzywsollot{‚‰•™›Ÿ­¿ËÐÑ…†Š”™œ›—’Œ…zwutstwz|{wtqonnoqsvxz{{yuqnmotz‚‰”—­¿ÊÍÍÌ…†ˆ‹Ž’•–•‘‡‚~{yxxy{}}zwsqpopqrtwy{||{wrnmot{‚‰”›¨»ÆÊÉÈÇhdf4-hdf4.3.1/hdf/util/testfiles/test.cdf000066400000000000000000000270231503061704500202100ustar00rootroot000000000000002 b\«<ª<6­=: «>Z$ª>~3­?±«@ͪ@á3­A«B0ªB43«CgªCk6«D¡ªD¥6«EÛªEß6«FªF6«GOªGj6«H ªH¡8jIÙ­J'E«KªK"3«LUªLY6«MªM“6«NɪNÍ6«OªO6«P=ªPK6jQ­R)ÆB«SêSÇ3«TúªTþ6«U4ªU86«VnªVr6«W¨ªW¬6NCSA HDF Version 3.2 Beta Release 2 June 4, 1992÷z"`  hVALUESrecord DimVal0.0ªrecordUDim0.0¨ VALUESixx DimVal0.07ªixxDim0.0XVALUESiyy DimVal0.07ªiyyDim0.0XonesVALUESUNITSAttr0.07ÂþVALUESVALIDMINAttr0.0BþVALUESVALIDMAXAttr0.0ÂþVALUESSCALEMINAttr0.0BþVALUESSCALEMAXAttr0.0Byte sized integer variableVALUESFIELDNAMAttr0.0-VALUES _FillValueAttr0.0 ­­ªªªªªªªj ByteVar0.0÷onesVALUESUNITSAttr0.07ÆÿþVALUESVALIDMINAttr0.0FÿþVALUESVALIDMAXAttr0.0ÆÿþVALUESSCALEMINAttr0.0FÿþVALUESSCALEMAXAttr0.0Short variableVALUESFIELDNAMAttr0.0 ­­ªªªªªªjShortVar0.0onesVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.02$«XâªX÷6«Y-ªY18­ZiA«[ªª[¯3«\âª\æ6«] ª] 6«^ Vª^ Z6«_ ª_ ”6«` Ê(ª` ò6­a!(B«b!jªb!p3«c!£ªc!§6«d!ݪd!á6«e"ªe"6«f"Qªf"U6«g"‹(ªg"³6«h"éªh"ñ8ji#)­j-ÈK«k#tªk#|3«l#¯4ªl#ã3­m$En$[ ªn$g6«6´ª6367®´ª7b6G«7˜8¨9:;Long Integer variableVALUESFIELDNAMAttr0.0ÿÿÿÿVALUES _FillValueAttr0.0 ­­ªªªªªªªj LongVar0.0÷flotsVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.0Single Precision Floating Point variable(((VALUESFIELDNAMAttr0.0 ­­­ªªªªªªj"#$%&'(FloatVar0.0sdflotsVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.0Double Precision Floating Point variable(((VALUESFIELDNAMAttr0.0ÀÇ€VALUES _FillValueAttr0.0@ ­­­ªªªªªªªj*+,-./01DoubleVar0.07test.cdfVALUESTITLEAttr0.07$Id: cdftest.c,v 1.31 1991/10/07 18:59:43 russ Exp $444VALUESRCSIDAttr0.07 ­­­­­­­­ªª!)234test.cdfCDF0.0÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-DATA0.0Data0.0Data0.0 ­­ªªªªªªªjª 6LongVar0.0?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0hDATA0.0Data0.0Data0.0 879:; ­­­ªªªªªªjª"#$%&'(7FloatVar0.0zB4B8B<B@BDBHBLBPBTBXB\B`Bd@-øTBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”B–B˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆBÈBÊBÌBÎBÐBÒBÔBÖBØBÚBÜBÞBàBâBäBæBèBêBìBîBðBòBôBöBøBúBüBþCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CC€C€€CC€C‚C‚€CƒCƒ€C„C„€C…C…€C†C†€C‡C‡€CˆCˆ€C‰C‰€CŠCŠ€C‹C‹€CŒCŒ€CC€CŽCŽ€CC€CC€C‘C‘€C’C’€C“C“€C”C”€C•C•€C–C–€C—C—€C˜C˜€C™C™€CšCš€C›C›€CœCœ€CC€CžCž€CŸCŸ€C C €C¡C¡€C¢C¢€C£C£€C¤C¤€C¥C¥€C¦C¦€C§C§€C¨C¨€C©C©€CªCª€C«C«€C¬C¬€C­C­€C®C®€C¯C¯€C°C°€C±C±€C²C²€C³C³€VALUESrecord DimVal0.0ª<recordUDim0.0¨ VALUESixx DimVal0.07ª>ixxDim0.0XVALUESiyy DimVal0.07ª@iyyDim0.0XonesVALUESUNITSAttr0.07ÂþVALUESVALIDMINAttr0.0BþVALUESVALIDMAXAttr0.0ÂþVALUESSCALEMINAttr0.0BþVALUESSCALEMAXAttr0.0Byte sized integer variableVALUESFIELDNAMAttr0.0-VALUES _FillValueAttr0.0 ­­ªªªªªªªj=?BCDEFGHIByteVar0.0÷onesVALUESUNITSAttr0.07ÆÿþVALUESVALIDMINAttr0.0FÿþVALUESVALIDMAXAttr0.0ÆÿþVALUESSCALEMINAttr0.0FÿþVALUESSCALEMAXAttr0.0Short variableVALUESFIELDNAMAttr0.0 ­­ªªªªªªj=AKLMNOPQShortVar0.0onesVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.0Long Integer variableVALUESFIELDNAMAttr0.0ÿÿÿÿVALUES _FillValueAttr0.0 ­­ªªªªªªªª?ASTUVWXY6LongVar0.0flotsVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.0Single Precision Floating Point variable(((VALUESFIELDNAMAttr0.0 ­­­ªªªªªªª=?A[\]^_`7FloatVar0.0dflotsVALUESUNITSAttr0.07ÏVALUESVALIDMINAttr0.0OVALUESVALIDMAXAttr0.0ÏVALUESSCALEMINAttr0.0OVALUESSCALEMAXAttr0.0Double Precision Floating Point variable(((VALUESFIELDNAMAttr0.0ÀÇ€VALUES _FillValueAttr0.0@ ­­­ªªªªªªªj=?AbcdefghiDoubleVar0.07test.cdfVALUESTITLEAttr0.07$Id: cdftest.c,v 1.31 1991/10/07 18:59:43 russ Exp $444VALUESRCSIDAttr0.07 ­­­­­­­­ªª=?AJRZajkltest.cdfCDF0.0÷BThe red AdeHDATA0.0Data0.0Data0.02G«n&ûo' p'bq)b ªq)n6G«q)¤r)´s*t,hªt-p6G«t-¦u-¶Honp ­­ªªªªªªªjª=?BCDEFGHInByteVar0.0÷ath ha-d long d-evastate-d the co-untry.t-rying ag-ain TIT€€€€€€ DATA0.0Data0.0Data0.0rqs ­­ªªªªªªjª=AKLMNOPQqShortVar0.0zaÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€@ !ûTD-ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€-DATA0.0Data0.0Data0.0hut ­­­ªªªªªªªjª=?AbcdefghitDoubleVar0.0hdf4-hdf4.3.1/hdf/util/testfiles/test.hdf000066400000000000000000000731031503061704500202150ustar00rootroot00000000000000È j\«yiϪyiÓ6­zj «{j)ª{jE3­|jx«}j” ª}j´3­~jç«kªk3«€k:ª€kB6«kxªk€6«‚k¶ª‚k¾6«ƒkôªƒkü6«„l2ª„lM6j…lƒ½…l‡Ðl ­†l©I«‡lòª‡lö3«ˆm)ªˆm16«‰mgª‰mo6«Šm¥ªŠm­6«‹m㪋më6«Œn!ªŒn/6jne½niÐn ­Žn‹J«nÕªnÙ3«o ªo6«‘oJª‘oR6«’oˆª’o6«“oƪ“oÎ6«”pª”p6«•pOª•pS8j–p‹½–pÐp¥ ­—p±M«˜pþª˜q3«™q6ª™q>6«šqtªšq|6«›q²ª›qº6«œqðªœqø6«r.(ªrV6jžrŒ½žrÐr® ­ŸrºN« sª s3«¡sAª¡sI6«¢sª¢s‡6«£s½ª£sÅ6«¤sûª¤t6«¥t9(ª¥ta6«¦t—ª¦tŸ8j§t×½§tÛÐtù ­¨uS«©uXª©u`3«ªu“8ªªuË3­«uþE¾:à;?àB¾;</=8q]ÛB¾q]ãr]ós_>ta>B¾taNua^vbªwfªÀB¾whjxhzNCSA HDF Version 3.3 Release 2, Novermber 1993VALUESrecord DimVal0.0ªrecordUDim0.0VALUESixx DimVal0.0ª ixxDim0.0VALUESiyy DimVal0.0ª iyyDim0.0onesVALUESUNITSAttr0.0À_ÀVALUESVALIDMINAttr0.0@_ÀVALUESVALIDMAXAttr0.0À_ÀVALUESSCALEMINAttr0.0@_ÀVALUESSCALEMAXAttr0.0Byte sized integer variableVALUESFIELDNAMAttr0.0jjjj½ ­­ªªªªªªj½Ð ByteVar0.0onesVALUESUNITSAttr0.0ÀßÿÀVALUESVALIDMINAttr0.0@ßÿÀVALUESVALIDMAXAttr0.0ÀßÿÀVALUESSCALEMINAttr0.0@ßÿÀVALUESSCALEMAXAttr0.0Short variableVALUESFIELDNAMAttr0.0jjjj½ ­­ªªªªªªj½Ð ShortVar0.0onesVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Long Integer variableVALUESFIELDNAMAttr0.0ÿÿÿÿVALUES _FillValueAttr0.0 j$j$j$j$½$ ­­ªªªªªªªj½Ð  !"#$$LongVar0.0flotsVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Single Precision Floating Point variable(((VALUESFIELDNAMAttr0.0 j,j,j,j,j,½, ­­­ªªªªªªj½Ð &'()*+,,FloatVar0.0dflotsVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Double Precision Floating Point variable(((VALUESFIELDNAMAttr0.0ÀÇ€VALUES _FillValueAttr0.0@j5j5j5j5j5½5 ­­­ªªªªªªªj½Ð ./0123455DoubleVar0.0test.cdfVALUESTITLEAttr0.0Id: cdftest.c,v 1.10.2.1 1994/01/07 20:24:12 chouck Exp 888VALUESRCSIDAttr0.0 ­­­­­­­­ªª %-678test.cdfCDF0.0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ­­ªªªªªªªj½Ð¾  !"#$$:LongVar0.0?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\8€<;= ­­­ªªªªªªj½Ð¾ &'()*+,,;FloatVar0.0B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”@-øTB˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆBÈBÊBÌBÎBÐBÒBÔBÖBØBÚBÜBÞBàBâBäBæBèBêBìBîBðBòBôBöBøBúBüBþCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCCC C!C"C#C$C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C;C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CC€C€€CC€C‚C‚€CƒCƒ€C„C„€C…C…€C†C†€C‡C‡€CˆCˆ€C‰C‰€CŠCŠ€C‹C‹€CŒCŒ€CC€CŽCŽ€CC€CC€C‘C‘€C’C’€C“C“€C”C”€C•C•€C–C–€C—C—€C˜C˜€C™C™€CšCš€C›C›€CœCœ€CC€CžCž€CŸCŸ€C C €C¡C¡€C¢C¢€C£C£€C¤C¤€C¥C¥€C¦C¦€C§C§€C¨C¨€C©C©€CªCª€C«C«€C¬C¬€C­C­€C®C®€C¯C¯€C°C°€C±C±€C²C²€C³C³€C´C´€CµCµ€C¶C¶€C·C·€C¸C¸€C¹C¹€CºCº€C»C»€C¼C¼€C½C½€C¾C¾€C¿C¿€CÀCÀ€CÁCÁ€CÂC€CÃCÀCÄCÄ€CÅCÅ€CÆCÆ€CÇCÇ€CÈCÈ€CÉCÉ€CÊCÊ€CËCË€CÌCÌ€CÍCÍ€CÎC΀CÏCÏ€CÐCЀCÑCÑ€CÒCÒ€CÓCÓ€CÔCÔ€CÕCÕ€CÖCÖ€C×C×€CØCØ€CÙCÙ€CÚCÚ€CÛCÛ€CÜCÜ€CÝCÝ€CÞCÞ€CßC߀VALUESrecord DimVal0.0ª>recordUDim0.0VALUESixx DimVal0.0ª@ixxDim0.0VALUESiyy DimVal0.0ªBiyyDim0.0onesVALUESUNITSAttr0.0À_ÀVALUESVALIDMINAttr0.0@_ÀVALUESVALIDMAXAttr0.0À_ÀVALUESSCALEMINAttr0.0@_ÀVALUESSCALEMAXAttr0.0Byte sized integer variableVALUESFIELDNAMAttr0.0jJjJjJjJ½J ­­ªªªªªªj½Ð?ADEFGHIJJByteVar0.0onesVALUESUNITSAttr0.0ÀßÿÀVALUESVALIDMINAttr0.0@ßÿÀVALUESVALIDMAXAttr0.0ÀßÿÀVALUESSCALEMINAttr0.0@ßÿÀVALUESSCALEMAXAttr0.0Short variableVALUESFIELDNAMAttr0.0jRjRjRjR½R ­­ªªªªªªj½Ð?CLMNOPQRRShortVar0.0onesVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Long Integer variableVALUESFIELDNAMAttr0.0ÿÿÿÿVALUES _FillValueAttr0.0 j[j[j[¾:j[½[ ­­ªªªªªªª¾j½ÐACTUVWXYZ:[[LongVar0.0flotsVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Single Precision Floating Point variable(((VALUESFIELDNAMAttr0.0 jcjcjcjc¾;jc½c ­­­ªªªªªª¾j½Ð?AC]^_`ab;ccFloatVar0.0dflotsVALUESUNITSAttr0.08ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Double Precision Floating Point variable(((VALUESFIELDNAMAttr0.0ÀÇ€VALUES _FillValueAttr0.0@jljljljljl½l ­­­ªªªªªªªj½Ð?ACefghijkllDoubleVar0.0test.cdfVALUESTITLEAttr0.0Id: cdftest.c,v 1.10.2.1 1994/01/07 20:24:12 chouck Exp 888VALUESRCSIDAttr0.0 ­­­­­­­­ªª?ACKS\dmnotest.cdfCDF0.0BThe reA@€rqs ­­ªªªªªªj½Ð¾?ADEFGHIJJqByteVar0.0d death had long devastated the country.€€€€€€€€0€utv ­­ªªªªªªj½Ð¾?CLMNOPQRRtShortVar0.0€€€€€€€€€a€€€€€€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€@ ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€ÀÇ€Àp€xw­­­ªªªªªªªj½Ð¾?ACefghijkllwDoubleVar0.0VALUESrecord DimVal0.0ªyrecordUDim0.0VALUESixx DimVal0.0ª{ixxDim0.0VALUESiyy DimVal0.0ª}iyyDim0.0onesVALUESUNITSAttr0.0À_ÀVALUESVALIDMINAttr0.0@_ÀVALUESVALIDMAXAttr0.0À_ÀVALUESSCALEMINAttr0.0@_ÀVALUESSCALEMAXAttr0.0Byte sized integer variableVALUESFIELDNAMAttr0.0j…j…j…¾qj…½… ­­ªªªªªª¾j½Ðz|€‚ƒ„q……ByteVar0.0onesVALUESUNITSAttr0.0ÀßÿÀVALUESVALIDMINAttr0.0@ßÿÀVALUESVALIDMAXAttr0.0ÀßÿÀVALUESSCALEMINAttr0.0@ßÿÀVALUESSCALEMAXAttr0.0Short variableVALUESFIELDNAMAttr0.0jjj¾tj½ ­­ªªªªªª¾j½Ðz~‡ˆ‰Š‹ŒtShortVar0.0onesVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Long Integer variableVALUESFIELDNAMAttr0.0ÿÿÿÿVALUES _FillValueAttr0.0 j–j–j–¾:j–½– ­­ªªªªªªª¾j½Ð|~‘’“”•:––LongVar0.0flotsVALUESUNITSAttr0.0ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Single Precision Floating Point variable(((VALUESFIELDNAMAttr0.0 jžjžjžjž¾;jž½ž ­­­ªªªªªª¾j½Ðz|~˜™š›œ;žžFloatVar0.0dflotsVALUESUNITSAttr0.0´ÁßÿÿÿÀVALUESVALIDMINAttr0.0AßÿÿÿÀVALUESVALIDMAXAttr0.0ÁßÿÿÿÀVALUESSCALEMINAttr0.0AßÿÿÿÀVALUESSCALEMAXAttr0.0Double Precision Floating Point variable(((VALUESFIELDNAMAttr0.0ÀÇ€VALUES _FillValueAttr0.0@j§j§j§j§¾wj§½§­­­ªªªªªªª¾j½Ðz|~ ¡¢£¤¥¦w§§DoubleVar0.0test.cdfVALUESTITLEAttr0.0Id: cdftest.c,v 1.10.2.1 1994/01/07 20:24:12 chouck Exp 888VALUESRCSIDAttr0.0 ­­­­­­­­ªªz|~†Ž—Ÿ¨©ªtest.cdfCDF0.0hdf4-hdf4.3.1/hdf/util/testfiles/tvattr.hdf000066400000000000000000000043201503061704500205550ustar00rootroot00000000000000Ê\­"&«<ªˆ~­ˆ«¢ªª:«äªè:«HªK:«…ª‰:« ê Ç:« NCSA HDF post Version 4.0 Release 2, July 23, 1996vgname0ABCDEFfldname1fldname2vsname1ªvgname1'0'PVALUESattname1Attr0.0 VALUESattname2Attr0.0vgname0ªªmNpVALUESattname3Attr0.0BVALUESattname4Attr0.0BVALUESattname5Attr0.0B€ª Ë:« ª  :« Gª O9« «ª":«\ª_:«™ª:ª €~«=ªA:«{VALUESattname4Attr0.0ÀPæšÔ,=VALUESattname5Attr0.0@PæšÔ,=VALUESvsname1Attr0.0fldname1fldname2vsname1ÿÿÿÿªªª ÿÿÿÿª ª ª ÿÿÿÿ BVALUESattname6Attr0.0mNpVALUESattname7Attr0.0BVALUESattname8Attr0.0fldname0fldname1vsname0ªÿÿÿÿªªÂ VALUESattname8Attr0.0mNpStªF:­2« ª$:«^ªb;VALUESattname9Attr0.0fldname0fldname1vsname0vsclass0ªÿÿÿÿªªªªª vgname2vgclass2dVALUESattname9Attr0.0 VALUES attname10Attr0.0ª vgname2vgclass2ªªhdf4-hdf4.3.1/hdf/util/testutil.sh.in000066400000000000000000000356311503061704500173730ustar00rootroot00000000000000#!/bin/sh # HDF Utilities Test script # Usage: testutil.sh [machine-type] srcdir=@srcdir@ machinetype="$1" # Check if target machine supports 32 bits datatype. # "true" is TRUE; "" means FALSE. case $machinetype in *unicos*) has32="";; *) has32="true";; esac # initialize errors variable errors=0 haserr=0 # setup hdfed command which is used often HDFED='./hdfed' HDFEDCMD="$HDFED -batch" # use -batch mode for no prompt SED="sed -e /library/,/String/d" # filter out the library version echo "" echo "==============================" echo "HDF Utilities tests started" echo "==============================" # gif2hdf and hdf2gif if [ -f gif2hdf -a -f hdf2gif ]; then echo "** Testing gif2hdf and hdf2gif ***" /bin/rm -rf gif_hdf_temp /bin/mkdir gif_hdf_temp $TESTS_ENVIRONMENT ./hdf2gif $srcdir/testfiles/skull.hdf gif_hdf_temp/skull.gif $TESTS_ENVIRONMENT ./gif2hdf $srcdir/testfiles/SunWheel.gif gif_hdf_temp/SunWheel.hdf $TESTS_ENVIRONMENT ./gif2hdf $srcdir/testfiles/bttrfly.gif gif_hdf_temp/bttrfly.hdf else echo "** hdf2gif or gif2hdf is not available ***"; fi echo " *********************** NOTE ****************************" echo " Use WEB Browser and JHV to compare " echo " $srcdir/testfiles/SunWheel.gif and $srcdir/testfiles/bttrfly.gif " echo " with gif_hdf_temp/SunWheel.hdf and gif_hdf_temp/bttrfly.hdf" echo " " echo " Use JHV and WEB Browser to compare " echo " $srcdir/testfiles/skull.hdf and gif_hdf_temp/skull.gif" echo " ********************* END NOTE **************************" echo "" errors=0 # hdf24to8 # "uncompress" utiltiy became obsolete; replaced with gunzip EIP 2004/12/01 # gunzip not available on Windows; simply untarring files SJW 2007/7/31 if [ -f hdf24to8 -a -f hdftor8 ]; then echo "** Testing hdf24to8 ***" /bin/rm -f head.r24 head.r8 head8.hdf img001-263.328 pal001 #cp $srcdir/testfiles/head.r24.Z $srcdir/testfiles/head.r8.Z . cp $srcdir/testfiles/head.r24 $srcdir/testfiles/head.r8 . $TESTS_ENVIRONMENT ./hdf24to8 head.r24 head8.hdf $TESTS_ENVIRONMENT ./hdftor8 head8.hdf cmp img001-263.328 head.r8 || errors=1 /bin/rm -f head.r24 head.r8 head8.hdf img001-263.328 pal001 else echo "** hdf24to8 or hdftor8 is not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdf24to8 might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo " /bin/rm -f head.r24 head.r8 head8.hdf img001-263.328 pal001" echo " cp $srcdir/testfiles/head.r24 $srcdir/testfiles/head.r8 . " echo " ./hdf24to8 head.r24 head8.hdf " echo " ./hdftor8 head8.hdf " echo " cmp img001-263.328 head.r8 " echo " ******* END NOTE *************" echo "" errors=0 fi # hdfed if [ -f $HDFED ]; then echo "** Testing hdfed ***" /bin/rm -f storm110.hdf ntcheck.hdf hdfed.tmp cp $srcdir/testfiles/storm110.hdf $srcdir/testfiles/ntcheck.hdf . $TESTS_ENVIRONMENT $HDFEDCMD < $srcdir/hdfed.input1 > hdfed.tmp 2>&1 diff -b hdfed.tmp $srcdir/hdfed.out1 || errors=1 /bin/rm -f storm110.hdf ntcheck.hdf hdfed.tmp else echo "** hdfed not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdfed might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo "/bin/rm -f storm110.hdf ntcheck.hdf hdfed.tmp " echo "cp $srcdir/testfiles/storm110.hdf $srcdir/testfiles/ntcheck.hdf . " echo "$HDFEDCMD < $srcdir/hdfed.input1 >& hdfed.tmp " echo "diff hdfed.tmp $srcdir/hdfed.out1 " echo " ******* END NOTE *************" echo "" errors=0 fi # ristosds if [ -f ristosds -a -f $HDFED ]; then echo "** Testing ristosds ***" /bin/rm -f storm*.hdf hdfed.tmp1 cp $srcdir/testfiles/storm110.hdf $srcdir/testfiles/storm120.hdf $srcdir/testfiles/storm130.hdf . $TESTS_ENVIRONMENT ./ristosds storm*.hdf -o storm.hdf > /dev/null 2>&1 $TESTS_ENVIRONMENT $HDFEDCMD < $srcdir/ristosds.input1 > hdfed.tmp1 2>&1 diff -b hdfed.tmp1 $srcdir/ristosds.out1 || errors=1 /bin/rm -f storm*.hdf hdfed.tmp1 else echo "** ristosds or hdfed not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " ristosds might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo " /bin/rm -f storm*.hdf hdfed.tmp1 " echo " cp $srcdir/testfiles/storm110.hdf $srcdir/testfiles/storm120.hdf $srcdir/testfiles/storm130.hdf . " echo "./ristosds storm*.hdf -o storm.hdf " echo "$HDFEDCMD < $srcdir/ristosds.input1 >& hdfed.tmp1 " echo " diff hdfed.tmp1 $srcdir/ristosds.out1" echo " ******* END NOTE *************" echo "" errors=0 fi #hdfpack if [ -f hdfpack -a -f hdfls ]; then echo "** Testing hdfpack ***" /bin/rm -f test.hdf test.blk test.pck hdfls.tmp1 cp $srcdir/testfiles/test.hdf . $TESTS_ENVIRONMENT ./hdfpack test.hdf test.pck $TESTS_ENVIRONMENT ./hdfpack -b test.hdf test.blk ($TESTS_ENVIRONMENT ./hdfls test.hdf | $SED ) > hdfls.tmp1 2>&1 ($TESTS_ENVIRONMENT ./hdfls test.pck | $SED ) >> hdfls.tmp1 2>&1 diff -b hdfls.tmp1 $srcdir/hdfpack.out1 || errors=1 /bin/rm -f test.hdf test.blk test.pck hdfls.tmp1 else echo "** hdfpack or hdfls not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdfpack might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo "/bin/rm -f test.hdf test.blk test.pck hdfls.tmp1 " echo " cp $srcdir/testfiles/test.hdf . " echo "./hdfpack test.hdf test.pck " echo "./hdfpack -b test.hdf test.blk " echo "(./hdfls test.hdf | $SED ) >& hdfls.tmp1" echo "(./hdfls test.pck | $SED ) >>& hdfls.tmp1" echo " diff hdfls.tmp1 $srcdir/hdfpack.out1 " echo " ******* END NOTE *************" echo "" errors=0 fi #hdftopal/paltohdf if [ -f hdftopal -a -f paltohdf ]; then echo "** Testing hdftopal/paltohdf ***" /bin/rm -f palette.* cp $srcdir/testfiles/palette.raw . $TESTS_ENVIRONMENT ./paltohdf palette.raw palette.hdf $TESTS_ENVIRONMENT ./hdftopal palette.hdf palette.raw.new cmp palette.raw palette.raw.new || errors=1 /bin/rm -f palette.* else echo "** hdftopal or paltohdf not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdftopal or paltohdf might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo " /bin/rm -f palette.* " echo " cp $srcdir/testfiles/palette.raw . " echo "./paltohdf palette.raw palette.hdf " echo "./hdftopal palette.hdf palette.raw.new " echo "cmp palette.raw palette.raw.new " echo " ******* END NOTE *************" echo "" errors=0 fi # r8tohdf/hdftor8 if [ -f r8tohdf -a -f hdftor8 -a -f hdfls ]; then echo "** Testing r8tohdf/hdftor8 ***" /bin/rm -f storm* img* palette.raw hdfls.tmp2 pal005 cp $srcdir/testfiles/storm*.raw $srcdir/testfiles/palette.raw . $TESTS_ENVIRONMENT ./r8tohdf 57 57 storm.hdf storm*.raw $TESTS_ENVIRONMENT ./r8tohdf 57 57 storm.hdf -p palette.raw -i storm110.raw $TESTS_ENVIRONMENT ./hdftor8 storm.hdf ($TESTS_ENVIRONMENT ./hdfls -l storm.hdf | $SED) > hdfls.tmp2 2>&1 diff -b hdfls.tmp2 $srcdir/hdftor8.out1 || errors=1 cmp img001-057.057 storm110.raw || errors=1 cmp img002-057.057 storm120.raw || errors=1 cmp img003-057.057 storm130.raw || errors=1 cmp img004-057.057 storm140.raw || errors=1 /bin/rm -f storm* img* palette.raw hdfls.tmp2 pal005 else echo "** r8tohdf, hdftor8 or hdfls not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " r8tohdf or hdftor8 might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo "/bin/rm -f storm* img* palette.raw hdfls.tmp2 pal005 " echo "cp $srcdir/testfiles/storm*.raw $srcdir/testfiles/palette.raw . " echo "./r8tohdf 57 57 storm.hdf storm*.raw " echo "./r8tohdf 57 57 storm.hdf -p palette.raw -i storm110.raw " echo "./hdftor8 storm.hdf " echo "(./hdfls -l storm.hdf | $SED) >& hdfls.tmp2 " echo " diff hdfls.tmp2 $srcdir/hdftor8.out1 " echo "cmp img001-057.057 storm110.raw " echo "cmp img002-057.057 storm120.raw " echo "cmp img003-057.057 storm130.raw " echo "cmp img004-057.057 storm140.raw " echo " ******* END NOTE *************" echo "" errors=0 fi # hdfcomp if [ -f hdfcomp -a -f hdfls ]; then echo "** Testing hdfcomp ***" /bin/rm -f storm*.hdf all*.hdf hdfls.tmp3 cp $srcdir/testfiles/storm*.hdf . $TESTS_ENVIRONMENT ./hdfcomp allstorms.hdf storm*.hdf $TESTS_ENVIRONMENT ./hdfcomp allcomp.hdf -c storm*.hdf ($TESTS_ENVIRONMENT ./hdfls -l allstorms.hdf | $SED) > hdfls.tmp3 2>&1 ($TESTS_ENVIRONMENT ./hdfls -l allcomp.hdf | $SED) >> hdfls.tmp3 2>&1 diff -b hdfls.tmp3 $srcdir/hdfcomp.out1 || errors=1 /bin/rm -f storm*.hdf all*.hdf hdfls.tmp3 else echo "** hdfcomp or hdfls not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdfcomp might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo "/bin/rm -f storm*.hdf all*.hdf hdfls.tmp3 " echo "cp $srcdir/testfiles/storm*.hdf . " echo "./hdfcomp allstorms.hdf storm*.hdf " echo "./hdfcomp allcomp.hdf -c storm*.hdf " echo "(./hdfls -l allstorms.hdf | $SED) >& hdfls.tmp3 " echo "(./hdfls -l allcomp.hdf | $SED) >>& hdfls.tmp3 " echo "diff hdfls.tmp3 $srcdir/hdfcomp.out1 " echo " ******* END NOTE *************" echo "" errors=0 fi #jpeg2hdf/hdf2jpeg if [ -f jpeg2hdf -a -f hdf2jpeg -a -f hdfls ]; then echo "** Testing jpeg2hdf/hdf2jpeg ***" /bin/rm -f jpeg.hdf jpeg_img.jpg jpeg2.jpg hdfls.tmp4 cp $srcdir/testfiles/jpeg_img.jpg . $TESTS_ENVIRONMENT ./jpeg2hdf jpeg_img.jpg jpeg.hdf $TESTS_ENVIRONMENT ./hdf2jpeg jpeg.hdf jpeg2.jpg ($TESTS_ENVIRONMENT ./hdfls -l jpeg.hdf | $SED) > hdfls.tmp4 2>&1 diff -b hdfls.tmp4 $srcdir/jpeg2hdf.out1 || errors=1 cmp jpeg_img.jpg jpeg2.jpg || errors=1 /bin/rm -f jpeg.hdf jpeg_img.jpg jpeg2.jpg hdfls.tmp4 else echo "** jpeg2hdf, hdf2jpeg or hdfls not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " jpeg2hdf or hdf2jpeg might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo "/bin/rm -f jpeg.hdf jpeg_img.jpg jpeg2.jpg hdfls.tmp4 " echo "cp $srcdir/testfiles/jpeg_img.jpg . " echo "./jpeg2hdf jpeg_img.jpg jpeg.hdf " echo "./hdf2jpeg jpeg.hdf jpeg2.jpg " echo "(./hdfls -l jpeg.hdf | $SED) >& hdfls.tmp4 " echo "diff hdfls.tmp4 $srcdir/jpeg2hdf.out1 " echo "cmp jpeg_img.jpg jpeg2.jpg " echo " ******* END NOTE *************" echo "" errors=0 fi ## ## fp2hdf is now called hdfimport, and is in mfhdf/hdfimport ## # # fp2hdf # if [ -f fp2hdf -a -f hdfls -a -f $HDFED ]; then # echo "** Testing fp2hdf ***" # if [ ! "$has32" ]; then # echo " $machinetype does not support float32." # echo " float32 tests skipped." # fi # # /bin/rm -f ctxtr* cb* *.hdf hdfls.tmp5 hdfed.tmp6 # ./fptest # ./fp2hdf ctxtr2 -o ctxtr2.hdf # ./fp2hdf ctxtr3 -o ctxtr3.hdf # if [ "$has32" ]; then # ./fp2hdf cb32r2 -o cb32r2.hdf # ./fp2hdf cb32r3 -o cb32r3.hdf # fi # ./fp2hdf cb64r2 -o cb64r2.hdf # ./fp2hdf cb64r3 -o cb64r3.hdf # ./fp2hdf ctxtr2 -o ctxtr2_ris.hdf -raster -e 50 50 # ./fp2hdf cb64r2 -o cb64r2_ris.hdf -raster -i 50 50 -f # (./hdfls -l ctxtr2.hdf | $SED) > hdfls.tmp5 2>&1 # (./hdfls -l ctxtr3.hdf | $SED) >> hdfls.tmp5 2>&1 # if [ "$has32" ]; then # (./hdfls -l cb32r2.hdf | $SED) >> hdfls.tmp5 2>&1 # (./hdfls -l cb32r3.hdf | $SED) >> hdfls.tmp5 2>&1 # fi # (./hdfls -l cb64r2.hdf | $SED) >> hdfls.tmp5 2>&1 # (./hdfls -l cb64r3.hdf | $SED) >> hdfls.tmp5 2>&1 # (./hdfls -l ctxtr2_ris.hdf | $SED) >> hdfls.tmp5 2>&1 # (./hdfls -l cb64r2_ris.hdf | $SED) >> hdfls.tmp5 2>&1 # if [ "$has32" ]; then # diff hdfls.tmp5 $srcdir/fp2hdf.out1 || errors=1 # $HDFEDCMD < $srcdir/fp2hdf.input1 > hdfed.tmp6 2>&1 # diff hdfed.tmp6 $srcdir/fp2hdf.out2 || errors=1 # else # diff hdfls.tmp5 $srcdir/fp2hdf.out1-32 || errors=1 # $HDFEDCMD < $srcdir/fp2hdf.input1-32 > hdfed.tmp6 2>&1 # diff hdfed.tmp6 $srcdir/fp2hdf.out2-32 || errors=1 # fi # /bin/rm -f ctxtr* cb* *.hdf hdfls.tmp5 hdfed.tmp6 # else # echo "** fp2hdf, hdfed or hdfls not available ***" # fi # # if [ $errors -eq 1 ]; then # haserr=1 # echo " ********* NOTE ***************" # echo " fp2hdf might have failed ***" # echo " The above errors could be formatting " # echo " problems which can be ignored " # echo " please run the following by hand to verify " # echo " " # echo " /bin/rm -f ctxtr* cb* *.hdf hdfls.tmp5 hdfed.tmp6" # echo " ./fptest " # echo " ./fp2hdf ctxtr2 -o ctxtr2.hdf " # echo " ./fp2hdf ctxtr3 -o ctxtr3.hdf " # if [ "$has32" ]; then # echo " ./fp2hdf cb32r2 -o cb32r2.hdf " # echo " ./fp2hdf cb32r3 -o cb32r3.hdf " # fi # echo " ./fp2hdf cb64r2 -o cb64r2.hdf " # echo " ./fp2hdf cb64r3 -o cb64r3.hdf " # echo " ./fp2hdf ctxtr2 -o ctxtr2_ris.hdf -raster -e 50 50 " # echo " ./fp2hdf cb64r2 -o cb64r2_ris.hdf -raster -i 50 50 -f " # echo "( ./hdfls -l ctxtr2.hdf | $SED) >& hdfls.tmp5 " # echo "( ./hdfls -l ctxtr3.hdf | $SED) >>& hdfls.tmp5 " # if [ "$has32" ]; then # echo "( ./hdfls -l cb32r2.hdf | $SED) >>& hdfls.tmp5 " # echo "( ./hdfls -l cb32r3.hdf | $SED) >>& hdfls.tmp5 " # fi # echo "( ./hdfls -l cb64r2.hdf | $SED) >>& hdfls.tmp5 " # echo "( ./hdfls -l cb64r3.hdf | $SED) >>& hdfls.tmp5 " # echo "( ./hdfls -l ctxtr2_ris.hdf | $SED) >>& hdfls.tmp5 " # echo "( ./hdfls -l cb64r2_ris.hdf | $SED) >>& hdfls.tmp5 " # if [ "$has32" ]; then # echo " diff hdfls.tmp5 $srcdir/fp2hdf.out1 " # echo " $HDFEDCMD < $srcdir/fp2hdf.input1 >& hdfed.tmp6 " # echo " diff hdfed.tmp6 $srcdir/fp2hdf.out2 " # else # echo " diff hdfls.tmp5 $srcdir/fp2hdf.out1-32 " # echo " $HDFEDCMD < $srcdir/fp2hdf.input1-32 >& hdfed.tmp6 " # echo " diff hdfed.tmp6 $srcdir/fp2hdf.out2-32 " # fi # echo " ******* END NOTE *************" # echo "" # errors=0 # fi # # Check errors result if [ $haserr -eq 0 ]; then echo "==============================" echo "HDF Utilities tests passed." echo "==============================" else echo "**************************************" echo "HDF Utilities tests encountered errors" echo "**************************************" fi echo "" exit $haserr hdf4-hdf4.3.1/hdf/util/vmake.c000066400000000000000000000325701503061704500160230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** * * vmake.c * * HDF Vset utility. * * vmake: utility creates vsets. May be used in 3 ways: * (1) add a new vgroup. * (2) add a new vdata from ascii data. * (3) link vgroups and vdatas to a vgroup. * * USAGE: * (1) vmake file vgname * (2) vmake file vsname {format} {ascii data stream} * (3) vmake file -l vgref v1 v2 ... vn * * ******************************************************************************/ #include #include #include "hdf.h" /* * Prototypes of local functions */ int32 vsetlink(char *hfile, int32 vgid, int32 ids[], int32 n); int32 vgadd(char *hfile, char *vgname); int32 inpdata(unsigned char **bp); void vsadd(char *hfile, char *vsname, char *format); int32 scanit(char *string, char ***fields, int32 **type, int32 **order); int32 savfld(char *ss, int p1, int p2); int32 compact(char *ss, char *dd); int32 savtype(char *ss, int p1, int p2); int32 separate(char *ss, char *fmt, int32 *num); int show_help_msg(void); void showfmttypes(void); /* * Main entry point */ int main(int ac, char **av) { char *hfile, *vgname, *vsname, *fmt; if (ac < 3) { show_help_msg(); exit(0); } else if (ac == 3) { if (!strcmp(av[2], "-l")) { show_help_msg(); exit(0); } hfile = av[1]; vgname = av[2]; vgadd(hfile, vgname); } else if (ac == 4) { if (!strcmp(av[2], "-l")) { show_help_msg(); exit(0); } hfile = av[1]; vsname = av[2]; fmt = av[3]; vsadd(hfile, vsname, fmt); } else if (!strcmp(av[2], "-l")) { int i; int32 n; int32 vgref, ids[50]; hfile = av[1]; sscanf(av[3], "%d", (int *)&vgref); for (n = 0, i = 4; i < ac; i++, n++) { sscanf(av[i], "%d", (int *)&ids[n]); } vsetlink(hfile, vgref, ids, n); } else { show_help_msg(); exit(0); } return (0); } /* main */ void showfmttypes(void) { fprintf(stderr, "\tvalid fmt types: \n"); fprintf(stderr, "\t c - char (char in HDF file) \n"); fprintf(stderr, "\t b - byte (int8 in HDF file) \n"); fprintf(stderr, "\t s - short (int16 in HDF file) \n"); fprintf(stderr, "\t l - long (int32 in HDF file) \n"); fprintf(stderr, "\t f - float (float32 in HDF file) \n"); } int show_help_msg(void) { printf("\nvmake: creates vsets.\n"); printf("\nUSAGE:\n"); printf(" (1) vmake file vgname (adds a new vgroup)\n"); printf(" (2) vmake file vsname format (adds a new vdata)\n"); printf(" (3) vmake file -l vgref v1 .. vn (links v1 v2 .. vn into vgref)\n"); printf("\nwhere\n"); printf(" vgref is the ref of a vgroup\n"); printf(" v1,..,vn are refs of vgroups and vdatas\n"); printf(" format is \n"); printf(" field is any text string\n"); printf(" fmt is one of the following optionally preceded by a decimal.\n"); showfmttypes(); printf("\nTo create a vdata, vmake reads ascii data from stdin\n"); printf("EXAMPLES:\n"); printf("\t cat dat.txt | vmake hh.hdf \"triangles\" \"PLIST3=3l\"\n"); printf("\t vmake abc.hdf \"xyvals\" \"X=d,Y=f\" < abc.dat\n"); printf("\n"); return (1); } /* show_help_msg */ /* ------------------------------------------------------- */ int32 vsetlink(char *hfile, int32 vgid, int32 ids[], int32 n) { HFILEID f; int32 vgmain, vg; int32 vs; int32 err = 0; int32 i; f = Hopen(hfile, DFACC_ALL, 0); if (f == FAIL) { fprintf(stderr, "cannot open %s. \n", hfile); exit(0); } Vinitialize(f); vgmain = Vattach(f, vgid, "w"); if (vgmain == FAIL) { fprintf(stderr, "0\n"); Vfinish(f); Hclose(f); exit(-1); } for (i = 0; i < n; i++) { if (-1 != vexistvg(f, (uint16)ids[i])) { if ((vg = Vattach(f, ids[i], "r")) != FAIL) { if (Vinsert(vgmain, vg) == -1) { /* is really VGROUP* */ err = 1; fprintf(stderr, "insert a vg (%d)fails!!\n", (int)ids[i]); } Vdetach(vg); } } else if (-1 != vexistvs(f, (uint16)ids[i])) { if ((vs = VSattach(f, ids[i], "r")) != FAIL) { if (Vinsert(vgmain, vs) == FAIL) { err = 1; fprintf(stderr, "insert a vs (%d)fails!!\n", (int)ids[i]); } VSdetach(vs); } } else { fprintf(stderr, "no such vgroup or vdata [%d]\n", (int)ids[i]); err = 1; } } Vdetach(vgmain); Vfinish(f); Hclose(f); if (err) exit(-1); else fprintf(stderr, "1\n"); /* success */ return (1); } /* vsetlink */ /* ------------------------------------------------------- */ /* add a (new) vgroup to the file */ int32 vgadd(char *hfile, char *vgname) { HFILEID f; int32 ref; int32 vg; f = Hopen(hfile, DFACC_ALL, 0); if (f == FAIL) { fprintf(stderr, "cannot open %s. \n", hfile); exit(0); } Vinitialize(f); vg = Vattach(f, -1, "w"); if (vg == FAIL) { fprintf(stderr, "cannot attach vg\n"); exit(0); } ref = VQueryref(vg); Vsetname(vg, vgname); Vdetach(vg); Vfinish(f); Hclose(f); fprintf(stderr, "%d\n", (int)ref); return (1); } /* vgadd */ /* ------------------------------------------------------- */ /* add a (new) vdata to the file. Data will be ascii and will come in from stdin according to the format (c-style). */ void vsadd(char *hfile, char *vsname, char *format) { int32 ret, i, n, nwritten; unsigned char *buf; char **fields; int32 *type, *order, nfld; char allfields[100]; HFILEID f; int32 vs; int32 ref, ftype; nfld = scanit(format, &fields, &type, &order); if (nfld < 1) { fprintf(stderr, "bad fields\n"); exit(-1); } if ((f = Hopen(hfile, DFACC_ALL, 0)) == FAIL) { fprintf(stderr, "cannot open %s. \n", hfile); exit(-1); } Vinitialize(f); vs = VSattach(f, -1, "w"); ref = VSQueryref(vs); printf("vsadd: ref is %d\n", (int)ref); allfields[0] = '\0'; for (i = 0; i < nfld; i++) { switch (type[i]) { case 'c': ftype = DFNT_CHAR; break; case 's': ftype = DFNT_INT16; break; case 'f': ftype = DFNT_FLOAT32; break; case 'l': ftype = DFNT_INT32; break; case 'b': ftype = DFNT_INT8; break; case 'D': ftype = DFNT_DOUBLE; break; default: fprintf(stderr, "bad type [%c]\n", (char)type[i]); showfmttypes(); exit(-1); break; } ret = VSfdefine(vs, fields[i], ftype, order[i]); strcat(allfields, fields[i]); strcat(allfields, ","); } i = (int32)strlen(allfields); allfields[i - 1] = '\0'; /* remove last comma */ VSsetname(vs, vsname); ret = VSsetfields(vs, allfields); nwritten = 0; while ((n = inpdata(&buf)) > 0) { /* printf("inpdata rets n=%d .. ",n); */ ret = VSwrite(vs, buf, n, FULL_INTERLACE); printf("+%d \n", (int)ret); nwritten += n; if (ret < 1) fprintf(stderr, "Vswrite stat=%d\n", (int)ret); } VSdetach(vs); Vfinish(f); Hclose(f); fprintf(stderr, "%d, %d\n", (int)ref, (int)nwritten); return; } /* vsadd */ /* ------------------------------------------------------------------ */ /* This part of the code deals with formatting stdin input data. */ /* ------------------------------------------------------------------ */ #include #define MAXVAR 32 static char *fldptr[MAXVAR]; static char flds[MAXVAR][100]; static char fmts[MAXVAR]; static int32 fords[MAXVAR]; static int32 ftyp[MAXVAR]; static int ntotal = 0; /* scanf functions */ static int32 inplong(void *x) { int32 val, ret; ret = scanf("%d ", (int *)&val); *(int32 *)x = (int32)val; return (ret); } static int32 inpshort(void *x) { int ret, val; ret = scanf("%d ", &val); *(int16 *)x = (int16)val; return (ret); } static int32 inpbyte(void *x) { int ret; int val; ret = scanf("%d ", &val); *(int8 *)x = (int8)val; return (ret); } static int32 inpfloat(void *x) { int ret; float val; ret = scanf("%f ", &val); *(float32 *)x = (float32)val; return (ret); } static int32 inpchar(void *x) { return (scanf("%c ", (char *)x)); } #define BUFSIZE 40000 unsigned char inpbuffer[BUFSIZE]; int32 inpdata(unsigned char **bp) { int32 totalsize, nread, t, i, j, k; unsigned char *b; int32 maxrec; int32 (*inpfn[MAXVAR])(void *); int32 inpsiz[MAXVAR]; for (i = 0; i < ntotal; i++) { switch (fmts[i]) { case 'c': inpfn[i] = inpchar; inpsiz[i] = sizeof(char); break; case 'b': inpfn[i] = inpbyte; inpsiz[i] = sizeof(int8); break; case 's': inpfn[i] = inpshort; inpsiz[i] = sizeof(short); break; case 'l': inpfn[i] = inplong; inpsiz[i] = sizeof(long); break; case 'f': inpfn[i] = inpfloat; inpsiz[i] = sizeof(float); break; default: printf("inpdata: fmt routine for [%c] not ready\n", fmts[i]); } } for (totalsize = 0, i = 0; i < ntotal; i++) totalsize += (fords[i] * inpsiz[i]); maxrec = BUFSIZE / totalsize - 1; /* begin reading in the ascii data from stdin */ *bp = b = inpbuffer; for (nread = 0, j = 0; j < maxrec; j++, nread++) { for (i = 0; i < ntotal; i++) { for (k = 0; k < fords[i]; k++) { t = (inpfn[i])(b); if (t == EOF) return (nread); b += inpsiz[i]; } } } return (nread); /* no of recs read */ } /* inpdata */ int32 scanit(char *string, char ***fields, int32 **type, int32 **order) { int32 ns, i; int32 p1, p2; char ss[300]; int32 c; compact(string, ss); ns = (int32)strlen(ss); ss[ns++] = ','; p1 = p2 = 0; for (i = 0; i < ns; i++) { c = (int32)ss[i]; if (c == '=') { p2 = i; savfld(ss, (int)p1, (int)(p2 - 1)); p1 = p2 + 1; } else if (c == ',') { p2 = i; savtype(ss, (int)p1, (int)(p2 - 1)); p1 = p2 + 1; } } for (i = 0; i < ntotal; i++) { fldptr[i] = flds[i]; ftyp[i] = (int32)fmts[i]; } *type = ftyp; *order = fords; *fields = fldptr; return (ntotal); } /* scanit */ int32 compact(char *ss, char *dd) { int i, t, n = (int)strlen(ss); for (t = 0, i = 0; i < n; i++) if (ss[i] != ' ') { dd[t++] = ss[i]; } dd[t] = '\0'; return (1); } /* ------------------------------------------------------------------ */ int32 savfld(char *ss, int p1, int p2) { int32 t = p2 - p1 + 1; strncpy(flds[ntotal], &ss[p1], (size_t)t); flds[ntotal][t] = '\0'; return (1); } /* savfld */ int32 savtype(char *ss, int p1, int p2) { char temp[20]; int32 t = p2 - p1 + 1; strncpy(temp, &ss[p1], (size_t)(p2 - p1 + 1)); temp[t] = '\0'; separate(temp, &fmts[ntotal], &fords[ntotal]); ntotal++; return (1); } int32 separate(char *ss, char *fmt, int32 *num) { int32 i, n; i = 0; n = (int32)strlen(ss); while (i < n) { if (ss[i] < '0' || ss[i] > '9') break; i++; } if (i > 0) sscanf(ss, "%d", (int *)num); else *num = 1; *fmt = ss[i]; return (1); } /* ------------------------------------------------------------------ */ hdf4-hdf4.3.1/hdf/util/vshow.c000066400000000000000000000551041503061704500160640ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /***************************************************************************** * * vshow.c * * HDF Vset utility. * * vshow: dumps out vsets in a hdf file. * * Usage: vshow file [+|-[n]] * the '+' option indicates a full dump * the '-' option indicates a full dump with one record per line * 'n' means only for the nth vdata. * * ******************************************************************************/ #include "hdf.h" #include "vg_priv.h" static int condensed; static int32 vsdumpfull(int32 vs); static int32 fmtbyte(char *x); static int32 fmtchar(char *x); static int32 fmtfloat(char *x); static int32 fmtulong(char *x); static int32 fmtlong(char *x); static int32 fmtshort(char *x); static int32 fmtdouble(char *x); static intn dumpattr(int32 vid, intn full, intn isvs); int main(int ac, char **av) { int32 vg, vgt; int32 vgotag, vgoref; int32 vs; int32 vsotag, vsoref; HFILEID f; int32 vgid = -1; int32 vsid = -1; int32 vsno = 0; int32 vstag; int32 i, t, nvg, n, ne, nv, interlace, vsize; int32 *lonevs; /* array to store refs of all lone vdatas */ int32 nlone; /* total number of lone vdatas */ uint16 name_len; /* length of vgroup's name or classname */ char fields[VSFIELDMAX * FIELDNAMELENMAX]; char *vgname, *vgclass; char vsname[VSNAMELENMAX]; char vsclass[VSNAMELENMAX]; char *name; int32 fulldump = 0, full; if (ac == 3) if (av[2][0] == '-' || av[2][0] == '+') { sscanf(&(av[2][1]), "%d", (int *)&vsno); if (vsno == 0) { printf("FULL DUMP\n"); } else { printf("FULL DUMP on vs#%ld\n", (long)vsno); } fulldump = 1; if (av[2][0] == '+') condensed = 1; else condensed = 0; } if (ac < 2) { printf("%s: dumps HDF vsets info from hdf file\n", av[0]); printf("usage: %s file [+|-[n]]\n", av[0]); printf("\t + gives full dump of all vdatas.\n"); printf("\t - gives full dump of all vdatas one record per line.\n"); printf("\t n gives full dump of vdata with id n.\n"); exit(0); } if ((f = Hopen(av[1], DFACC_READ, 0)) == FAIL) { printf("\nFile (%s) failed to open.\n", av[1]); exit(0); } Vstart(f); printf("\nFILE: %s\n", av[1]); nvg = 0; while ((vgid = Vgetid(f, vgid)) != -1) { vg = Vattach(f, vgid, "r"); if (vg == FAIL) { printf("cannot open vg id=%d\n", (int)vgid); } /* get the length of the vgname to allocate enough space */ Vgetnamelen(vg, &name_len); vgname = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgname == NULL) { printf("Error: Out of memory. Cannot allocate %d bytes space. Quit.\n", name_len + 1); return (0); } Vinquire(vg, &n, vgname); if (strlen(vgname) == 0) strcat(vgname, "NoName"); vgotag = VQuerytag(vg); vgoref = VQueryref(vg); /* get the length of the vgname to allocate enough space */ Vgetclassnamelen(vg, &name_len); vgclass = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgclass == NULL) { printf("Error: Out of memory. Cannot allocate %d bytes space. Quit.\n", name_len + 1); return (0); } Vgetclass(vg, vgclass); if (strlen(vgclass) == 0) strcat(vgclass, "NoClass"); printf("\nvg:%d <%d/%d> (%s {%s}) has %d entries:\n", (int)nvg, (int)vgotag, (int)vgoref, vgname, vgclass, (int)n); dumpattr(vg, fulldump, 0); for (t = 0; t < Vntagrefs(vg); t++) { Vgettagref(vg, t, &vstag, &vsid); /* ------ V D A T A ---------- */ if (vstag == VSDESCTAG) { vs = VSattach(f, vsid, "r"); if (vs == FAIL) { printf("cannot open vs id=%d\n", (int)vsid); continue; } VSinquire(vs, &nv, &interlace, fields, &vsize, vsname); vsotag = VSQuerytag(vs); vsoref = VSQueryref(vs); if (strlen(vsname) == 0) strcat(vsname, "NoName"); VSgetclass(vs, vsclass); printf(" vs:%d <%d/%d> nv=%d i=%d fld [%s] vsize=%d (%s {%s})\n", (int)t, (int)vsotag, (int)vsoref, (int)nv, (int)interlace, fields, (int)vsize, vsname, vsclass); if (fulldump && vsno == 0) vsdumpfull(vs); else if (fulldump && vsno == vsoref) vsdumpfull(vs); /* dump attributes */ full = fulldump && (vsno == 0 || vsno == vsoref); dumpattr(vs, full, 1); VSdetach(vs); } else if (vstag == DFTAG_VG) { /* ------ V G R O U P ----- */ vgt = Vattach(f, vsid, "r"); if (vgt == FAIL) { printf("cannot open vg id=%d\n", (int)vsid); continue; } /* get length of the vgclass to allocate enough space */ Vgetclassnamelen(vgt, &name_len); vgclass = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgclass == NULL) { printf("Error: Out of memory. Cannot allocate %d bytes space. Quit.\n", name_len + 1); return (0); } Vgetclass(vg, vgclass); if (strlen(vgclass) == 0) strcat(vgclass, "NoClass"); /* get length of the vgname to allocate enough space */ Vgetnamelen(vgt, &name_len); vgname = (char *)malloc(sizeof(char *) * (name_len + 1)); if (vgname == NULL) { printf("Error: Out of memory. Cannot allocate %d bytes space. Quit.\n", name_len + 1); return (0); } Vinquire(vgt, &ne, vgname); if (strlen(vgname) == 0) strcat(vgname, "NoName"); vgotag = VQuerytag(vgt); vgoref = VQueryref(vgt); Vgetclass(vgt, vgclass); printf(" vg:%d <%d/%d> ne=%d (%s {%s})\n", (int)t, (int)vgotag, (int)vgoref, (int)ne, vgname, vgclass); dumpattr(vg, fulldump, 0); Vdetach(vgt); } else { name = HDgettagsname((uint16)vstag); if (!name) printf(" --:%d <%d/%d> %s\n", (int)t, (int)vstag, (int)vsid, "Unknown Tag"); else { printf(" --:%d <%d/%d> %s\n", (int)t, (int)vstag, (int)vsid, name); free(name); } } } /* while */ Vdetach(vg); nvg++; } /* while */ if (nvg == 0) { printf("No vgroups in this file\n"); } nlone = VSlone(f, NULL, 0); if (nlone > 0) { printf("Lone vdatas:\n"); if (NULL == (lonevs = (int32 *)malloc(sizeof(int) * (size_t)nlone))) { printf("%s: File has %d lone vdatas but ", av[0], (int)nlone); printf("cannot alloc lonevs space. Quit.\n"); exit(0); } VSlone(f, lonevs, nlone); for (i = 0; i < nlone; i++) { vsid = lonevs[i]; if (FAIL == (vs = VSattach(f, lonevs[i], "r"))) { printf("cannot open vs id=%d\n", (int)vsid); continue; } VSinquire(vs, &nv, &interlace, fields, &vsize, vsname); if (strlen(vsname) == 0) strcat(vsname, "NoName"); vsotag = VSQuerytag(vs); vsoref = VSQueryref(vs); VSgetclass(vs, vsclass); printf("L vs:%d <%d/%d> nv=%d i=%d fld [%s] vsize=%d (%s {%s})\n", (int)vsid, (int)vsotag, (int)vsoref, (int)nv, (int)interlace, fields, (int)vsize, vsname, vsclass); if (fulldump && vsno == 0) vsdumpfull(vs); else if (fulldump && vsno == vsoref) vsdumpfull(vs); full = fulldump && (vsno == 0 || vsno == vsoref); dumpattr(vs, full, 1); VSdetach(vs); } free(lonevs); } Vend(f); Hclose(f); return (0); } /* main */ static int32 cn = 0; /* ------------------------------------------------ */ /* printing functions used by vsdumpfull(). */ static int32 fmtbyte(char *x) { cn += printf("%02x ", *x); return (1); } static int32 fmtchar(char *x) { cn++; putchar(*x); return (1); } static int32 fmtfloat(char *x) { float f = (float)0.0; memcpy(&f, x, sizeof(float32)); cn += printf("%f", (double)f); return (1); } static int32 fmtulong(char *x) { unsigned l = 0; memcpy(&l, x, sizeof(int32)); cn += printf("%u", l); return (1); } static int32 fmtlong(char *x) { long l = 0; memcpy(&l, x, sizeof(int32)); cn += printf("%ld", l); return (1); } static int32 fmtshort(char *x) { short s = 0; memcpy(&s, x, sizeof(int16)); cn += printf("%d", s); return (1); } static int32 fmtdouble(char *x) { double d = 0.0; memcpy(&d, x, sizeof(float64)); cn += printf("%f", d); return (1); } #define BUFFER 1000000 /* ------------------------------------------------ */ static int32 vsdumpfull(int32 vs) { char fields[VSFIELDMAX * FIELDNAMELENMAX]; char vsname[100]; int32 j, i, t, interlace, nv, vsize; uint8 *bb, *b; DYN_VWRITELIST *w; int32 (*fmtfn[VSFIELDMAX])(char *); int32 off[VSFIELDMAX]; int32 order[VSFIELDMAX]; int32 bufsize; /* size of the buffer we are using */ int32 chunk; /* number of rows that will fit in the buffer */ int32 done; /* number of rows we have done */ int32 count; /* number of rows to do this time through the loop */ int32 nf; /* number of fields in this Vdata */ VSinquire(vs, &nv, &interlace, fields, &vsize, vsname); if (nv * vsize > BUFFER) { bufsize = BUFFER; chunk = BUFFER / vsize; } else { bufsize = nv * vsize; chunk = nv; } done = 0; bb = (uint8 *)malloc(bufsize); if (bb == NULL) { printf("vsdumpfull malloc error\n"); return (0); } VSsetfields(vs, fields); w = vswritelist(vs); nf = w->n; for (i = 0; i < w->n; i++) { printf("%d: fld [%s], type=%d, order=%d\n", (int)i, w->name[i], w->type[i], w->order[i]); order[i] = (int32)w->order[i]; off[i] = DFKNTsize(w->type[i] | DFNT_NATIVE); switch (w->type[i]) { case DFNT_CHAR: case DFNT_UCHAR: fmtfn[i] = fmtchar; break; case DFNT_UINT8: case DFNT_INT8: fmtfn[i] = fmtbyte; break; case DFNT_UINT16: case DFNT_INT16: fmtfn[i] = fmtshort; break; case DFNT_UINT32: fmtfn[i] = fmtulong; break; case DFNT_INT32: fmtfn[i] = fmtlong; break; case DFNT_FLOAT32: fmtfn[i] = fmtfloat; break; case DFNT_FLOAT64: fmtfn[i] = fmtdouble; break; default: fprintf(stderr, "sorry, type [%d] not supported\n", (int)w->type[i]); break; } } cn = 0; done = count = 0; while (done != nv) { /* figure out how many to read this time */ if ((nv - done) > chunk) count = chunk; else count = nv - done; /* read and update bookkeeping */ VSread(vs, bb, count, interlace); done += count; b = bb; /* print out the data */ for (j = 0; j < count; j++) { for (i = 0; i < nf; i++) { for (t = 0; t < order[i]; t++) { (fmtfn[i])((char *)b); b += off[i]; putchar(' '); cn++; } putchar(' '); cn++; } /* * if condensed == TRUE put as many as possible on one line else * put one record per line */ if (condensed) { if (cn > 65) { putchar('\n'); cn = 0; } } else { putchar('\n'); } } } /* ============================================ */ free(bb); printf("\n"); return (1); } /* vsdumpfull */ /* ------------------------------------------------ */ static intn dumpattr(int32 vid, intn full, intn isvs) { int i, j, k, _cn = 0; VDATA *vs; vsinstance_t *vs_inst; VGROUP *vg; vginstance_t *v; intn ret, nattrs, f_nattrs, alloc_flag = 0; vs_attr_t *vs_alist; vg_attr_t *v_alist; int32 i_type, i_count, i_size, off; uint8 *buf = NULL, *ptr; int32 (*fmtfn)(char *) = NULL; char name[FIELDNAMELENMAX + 1]; intn ret_val = SUCCEED; uint8 attrbuf[BUFFER]; if (isvs) { vs_inst = (vsinstance_t *)HAatom_object(vid); if (vs_inst == NULL) { printf(">>>dumpattr:failed in getting vdata instance.\n"); ret_val = FAIL; goto done; } vs = vs_inst->vs; if (vs == NULL) { printf(">>>dumpattr:Failed in getting vs. \n"); ret_val = FAIL; goto done; } if (0 == (nattrs = VSnattrs(vid))) { printf(" 0 attributes.\n"); ret_val = SUCCEED; goto done; } vs_alist = vs->alist; if (!full) { printf(" %d attributes: attr_tag/ref attr_of_field\n", nattrs); for (i = 0; i < nattrs; i++) { if (vs_alist->findex != (int)_HDF_VDATA) printf(" %d: %d/%d %d\n", i, vs_alist->atag, vs_alist->aref, (int)vs_alist->findex); else printf(" %d: %d/%d %s\n", i, vs_alist->atag, vs_alist->aref, "VDATA"); vs_alist++; } ret_val = SUCCEED; goto done; } printf("%d attributes:\n", nattrs); for (j = -1; j < vs->wlist.n; j++) { int32 temp; temp = (j == -1) ? (int)_HDF_VDATA : j; f_nattrs = VSfnattrs(vid, temp); if (f_nattrs == 0) continue; /* no attr for this field */ if (j == -1) printf(" Attrs of vdata:\n"); else printf(" Attrs of field %d:\n", j); for (i = 0; i < f_nattrs; i++) { /* dump the attrs */ ret = VSattrinfo(vid, temp, i, name, &i_type, &i_count, &i_size); if (ret == FAIL) { printf(">>>dumpattr: failed in getting attr info.\n"); continue; } printf(" %d: name=%s type=%d count=%d size=%d\n", i, name, (int)i_type, (int)i_count, (int)i_size); if (i_size > BUFFER) { if (NULL == (buf = malloc(i_size))) { printf(">>>dumpattr:can't allocate buf.\n"); continue; } alloc_flag = 1; if (FAIL == VSgetattr(vid, temp, i, buf)) { printf(">>>dympattr: failed in VSgetattr.\n"); continue; } } else { if (FAIL == VSgetattr(vid, temp, i, attrbuf)) { printf(">>>dympattr: failed in VSgetattr.\n"); continue; } } /* format output */ switch (i_type) { case DFNT_CHAR: case DFNT_UCHAR: fmtfn = fmtchar; break; case DFNT_UINT8: case DFNT_INT8: fmtfn = fmtbyte; break; case DFNT_UINT16: case DFNT_INT16: fmtfn = fmtshort; break; case DFNT_UINT32: fmtfn = fmtulong; break; case DFNT_INT32: fmtfn = fmtlong; break; case DFNT_FLOAT32: fmtfn = fmtfloat; break; case DFNT_FLOAT64: fmtfn = fmtdouble; break; default: printf(">>>dumpattr: sorry, type [%d] not supported\n", (int)i_type); break; } off = DFKNTsize(i_type | DFNT_NATIVE); ptr = (alloc_flag) ? buf : attrbuf; putchar('\t'); _cn = 0; for (k = 0; k < i_count; k++) { fmtfn((char *)ptr); ptr += off; putchar(' '); _cn++; if (_cn > 55) { putchar('\n'); putchar('\t'); _cn = 0; } } if (_cn) putchar('\n'); if (alloc_flag) { free(buf); alloc_flag = 0; } } /* attr */ } /* field */ } /* isvs */ else { /* vgroup */ v = (vginstance_t *)HAatom_object(vid); if (v == NULL) { printf(">>>dumpattr:failed in getting vgroup instance.\n"); ret_val = FAIL; goto done; } vg = v->vg; if (vg == NULL) { printf(">>>dumpattr:Failed in getting vg. \n"); ret_val = FAIL; goto done; } if (0 == (nattrs = Vnattrs(vid))) { printf(" 0 attributes.\n"); ret_val = SUCCEED; goto done; } v_alist = vg->alist; if (!full) { printf("%d attributes: attr_tag/ref \n", nattrs); for (i = 0; i < nattrs; i++) { printf(" %d: %d/%d \n", i, v_alist->atag, v_alist->aref); v_alist++; } ret_val = SUCCEED; goto done; } printf("%d attributes:\n", nattrs); for (i = 0; i < nattrs; i++) { /* dump the attrs */ ret = Vattrinfo(vid, i, name, &i_type, &i_count, &i_size); if (ret == FAIL) { printf(">>>dumpattr: failed in getting attr info.\n"); continue; } printf(" %d: name=%s type=%d count=%d size=%d\n", i, name, (int)i_type, (int)i_count, (int)i_size); if (i_size > BUFFER) { if (NULL == (buf = malloc(i_size))) { printf(">>>dumpattr:can't allocate buf.\n"); continue; } alloc_flag = 1; if (FAIL == Vgetattr(vid, i, buf)) { printf(">>>dympattr: failed in Vgetattr.\n"); continue; } } else { if (FAIL == Vgetattr(vid, i, attrbuf)) { printf(">>>dympattr: failed in Vgetattr.\n"); continue; } } /* format output */ switch (i_type) { case DFNT_CHAR: case DFNT_UCHAR: fmtfn = fmtchar; break; case DFNT_UINT8: case DFNT_INT8: fmtfn = fmtbyte; break; case DFNT_UINT16: case DFNT_INT16: fmtfn = fmtshort; break; case DFNT_UINT32: fmtfn = fmtulong; break; case DFNT_INT32: fmtfn = fmtlong; break; case DFNT_FLOAT32: fmtfn = fmtfloat; break; case DFNT_FLOAT64: fmtfn = fmtdouble; break; default: printf(">>>dumpattr: sorry, type [%d] not supported\n", (int)i_type); break; } off = DFKNTsize(i_type | DFNT_NATIVE); ptr = (alloc_flag) ? buf : attrbuf; putchar('\t'); _cn = 0; for (k = 0; k < i_count; k++) { fmtfn((char *)ptr); ptr += off; putchar(' '); _cn++; if (_cn > 55) { putchar('\n'); putchar('\t'); _cn = 0; } } if (_cn) putchar('\n'); if (alloc_flag) { free(buf); alloc_flag = 0; } } /* attr */ } /* vgroup */ ret_val = SUCCEED; done: return ret_val; } /* ------------------------------------- */ hdf4-hdf4.3.1/hdf/util/writehdf.c000066400000000000000000000201551503061704500165300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include "gif.h" #include #include int WriteHDF(GIFTOMEM GifMemoryStruct, char *HDFName, char *GIFFileName) { GIFHEAD gifHead; /* GIF Header structure */ GIFIMAGEDESC gifImageDesc; /* Logical Image Descriptor struct */ intn status; /* status for functions returning an intn */ int32 file_id, /* HDF file identifier */ gr_id, /* GR interface identifier */ ri_id, vgroup_id, /* VGroup interface identifier */ pal_id, start[2], /* start position to write for each dimension */ edges[2], /* number of elements to be written along each dimension */ dim_sizes[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type, /* data type of the image data */ ImageCount, CommentCount, ApplicationCount, PlainTextCount, i; /* compression structs */ uint32 comp_type; /* compression type */ comp_info c_info; /* the compression information for setcompress */ char ImageName[256]; /* Image name for the GR Image */ char CommentName[256]; char ApplicationName[256]; char PlainTextName[256]; /* reference variables */ uint32 gr_ref; /* GR reference for the VGroup */ /* Setting compression to gzip. If you want to change compression ** type or params change it here */ c_info.deflate.level = 6; comp_type = COMP_CODE_NONE; data_type = DFNT_UINT8; interlace_mode = MFGR_INTERLACE_PIXEL; /* Get the stuff from the GIFMem data struct */ gifHead = *(GifMemoryStruct.GifHeader); ImageCount = (int32)gifHead.ImageCount; CommentCount = (int32)gifHead.CommentCount; ApplicationCount = (int32)gifHead.ApplicationCount; PlainTextCount = (int32)gifHead.PlainTextCount; /*Start HDF file*/ file_id = Hopen(HDFName, DFACC_CREATE, 0); if (file_id == -1) { printf("Unable to create HDF file"); status = HEvalue(1); printf("%s\n", HEstring(status)); exit(0); } if ((status = Vstart(file_id)) == -1) { printf("Could not start VGroup interface\n"); printf("%s\n", HEstring(HEvalue(1))); exit(-1); } vgroup_id = Vattach(file_id, -1, "w"); status = Vsetname(vgroup_id, GIFFileName); status = Vsetclass(vgroup_id, "GIF"); /* Put the global palette in as an attribute to the vgroup */ if (gifHead.PackedField & 0x80) { status = Vsetattr(vgroup_id, "Global Palette", DFNT_UINT8, 3 * gifHead.TableSize, (void *)gifHead.HDFPalette); if (status) { printf("Could not add global palette.\n"); printf("%s\n", HEstring(HEvalue(1))); } } for (i = 0; i < CommentCount; i++) { sprintf(CommentName, "Comment Extension Data %d", (int)i); status = Vsetattr(vgroup_id, CommentName, DFNT_CHAR8, (int32)(GifMemoryStruct.GifCommentExtension[i])->DataSize, (void *)(GifMemoryStruct.GifCommentExtension[i])->CommentData); } for (i = 0; i < ApplicationCount; i++) { sprintf(ApplicationName, "Application Extension Data %d", (int)i); status = Vsetattr(vgroup_id, ApplicationName, DFNT_CHAR8, (int32)(GifMemoryStruct.GifApplicationExtension[i])->DataSize, (void *)(GifMemoryStruct.GifApplicationExtension[i])->ApplicationData); sprintf(ApplicationName, "Application Extension Dump %d", (int)i); status = Vsetattr(vgroup_id, ApplicationName, DFNT_CHAR8, (int32)11, (void *)(GifMemoryStruct.GifApplicationExtension[i])->AEDump); } for (i = 0; i < PlainTextCount; i++) { sprintf(PlainTextName, "PlainText Extension Data %d", (int)i); status = Vsetattr(vgroup_id, PlainTextName, DFNT_CHAR8, (int32)(GifMemoryStruct.GifPlainTextExtension[i])->DataSize, (void *)(GifMemoryStruct.GifPlainTextExtension[i])->PlainTextData); sprintf(PlainTextName, "PlainText Extension Dump %d", (int)i); status = Vsetattr(vgroup_id, PlainTextName, DFNT_CHAR8, (int32)15, (void *)(GifMemoryStruct.GifPlainTextExtension[i])->PTEDump); } gr_id = GRstart(file_id); /* Add GR images into VGroup */ for (i = 0; i < ImageCount; i++) { gifImageDesc = *(GifMemoryStruct.GifImageDesc[i]); dim_sizes[0] = gifImageDesc.ImageWidth; dim_sizes[1] = gifImageDesc.ImageHeight; start[0] = start[1] = 0; edges[0] = gifImageDesc.ImageWidth; edges[1] = gifImageDesc.ImageHeight; /* Create GR Image */ sprintf(ImageName, "Image%d", (int)i); ri_id = GRcreate(gr_id, ImageName, 1, data_type, interlace_mode, dim_sizes); /* GRSetCompress */ if ((status = GRsetcompress(ri_id, comp_type, &c_info)) == -1) { printf("Error occurred while setting compression\n"); printf("%s\n", HEstring(HEvalue(1))); exit(-1); } /* Write the GR Image */ if ((status = GRwriteimage(ri_id, start, NULL, edges, (void *)gifImageDesc.Image)) == -1) { printf("Error occurred while trying to write GR image\n"); printf("%s\n", HEstring(HEvalue(1))); exit(-1); } /* Create palette */ pal_id = GRgetlutid(ri_id, 0); if ((status = GRwritelut(pal_id, 3, DFNT_UINT8, interlace_mode, 256, (void *)gifImageDesc.HDFPalette)) == -1) { printf("Could not write palette\n"); printf("%s\n", HEstring(HEvalue(1))); exit(-1); } /* Put both image and palette in VGroup */ gr_ref = GRidtoref(ri_id); if ((status = GRendaccess(ri_id)) == -1) { printf("Could not terminate GR access\n"); printf("%s\n", HEstring(HEvalue(1))); exit(-1); } /* Adding GR to vgroup */ if ((status = Vaddtagref(vgroup_id, (int32)1965, gr_ref)) == -1) { printf("Could not add tag to Vgroup"); printf("%s\n", HEstring(HEvalue(1))); } } /* Terminate GR access */ if ((status = GRend(gr_id)) == -1) { printf("Could not end GR access\n"); printf("%s\n", HEstring(HEvalue(1))); printf("Trying to continue (file may be corrupt)...\n"); } /* Terminate access to the VGroup */ if ((status = Vdetach(vgroup_id)) == -1) { printf("Could not detach Vgroup\n"); printf("%s\n", HEstring(HEvalue(1))); printf("Trying to continue (file may be corrupt)...\n"); } /* Terminate access to the V interface */ if ((status = Vend(file_id)) == -1) { printf("Could not end VGroup access\n"); printf("%s\n", HEstring(HEvalue(1))); printf("Trying to continue (file may be corrupt)... \n"); } /* Close the HDF file */ if ((status = Hclose(file_id)) == -1) { printf("Could not close HDF file. Fatal Error"); printf("%s\n", HEstring(HEvalue(1))); return (-1); } return (0); } hdf4-hdf4.3.1/java/000077500000000000000000000000001503061704500137505ustar00rootroot00000000000000hdf4-hdf4.3.1/java/CMakeLists.txt000066400000000000000000000046611503061704500165170ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA C Java) set(CMAKE_DIRECTORY_LABELS “JAVAâ€) set (CMAKE_MODULE_PATH "${HDF_RESOURCES_DIR}") find_package (Java) #----------------------------------------------------------------------------- # Include some macros for reusable code #----------------------------------------------------------------------------- include (${HDF_RESOURCES_DIR}/UseJava.cmake) message (VERBOSE "JAVA: JAVA_HOME=$ENV{JAVA_HOME} JAVA_ROOT=$ENV{JAVA_ROOT}") find_package (JNI) message (VERBOSE "JNI_LIBRARIES=${JNI_LIBRARIES}") message (VERBOSE "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}") if (WIN32) set (HDF_JRE_DIRECTORY "C:/Program Files/Java/jre") else () set (HDF_JRE_DIRECTORY "/usr/lib/jvm/jre") endif () #----------------------------------------------------------------------------- # Include the main src and config directories #----------------------------------------------------------------------------- set (HDF4_JAVA_INCLUDE_DIRECTORIES ${JNI_INCLUDE_DIRS} ${HDF4_JAVA_JNI_SRC_DIR} ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2} ) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF4_JAVA_INCLUDE_DIRECTORIES}") set (CMAKE_JAVA_INCLUDE_PATH "") #----------------------------------------------------------------------------- # Traverse source subdirectory #----------------------------------------------------------------------------- add_subdirectory (src) #----------------------------------------------------------------------------- # Testing #----------------------------------------------------------------------------- if (NOT HDF4_EXTERNALLY_CONFIGURED AND BUILD_TESTING) add_subdirectory (test) endif () #----------------------------------------------------------------------------- # Add Required Jar(s) #----------------------------------------------------------------------------- install ( FILES ${HDF4_JAVA_LOGGING_JAR} ${HDF4_JAVA_LOGGING_NOP_JAR} ${HDF4_JAVA_LOGGING_SIMPLE_JAR} DESTINATION ${HDF4_INSTALL_JAR_DIR} COMPONENT libraries ) #----------------------------------------------------------------------------- # Option to include jre #----------------------------------------------------------------------------- option (HDF4_JAVA_PACK_JRE "Package a JRE installer directory" OFF) if (HDF4_JAVA_PACK_JRE) install ( DIRECTORY ${HDF_JRE_DIRECTORY} DESTINATION ${HDF4_INSTALL_BIN_DIR} USE_SOURCE_PERMISSIONS ) endif () hdf4-hdf4.3.1/java/Makefile.am000066400000000000000000000005111503061704500160010ustar00rootroot00000000000000# # HDF Java native interface (JNI) Library Makefile(.in) include $(top_srcdir)/config/commence.am ## Only recurse into subdirectories if the Java (JNI) interface is enabled. if BUILD_JAVA_CONDITIONAL # Mark this directory as part of the JNI API JAVA_API=yes SUBDIRS=src test endif include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/java/Makefile.in000066400000000000000000001225571503061704500160310ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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@ # # HDF Java native interface (JNI) Library Makefile(.in) VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ TESTS = subdir = java ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac DIST_SUBDIRS = src test am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog # Mark this directory as part of the JNI API @BUILD_JAVA_CONDITIONAL_TRUE@JAVA_API = yes @BUILD_JAVA_CONDITIONAL_TRUE@SUBDIRS = src test # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-recursive .SUFFIXES: .SUFFIXES: .log .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 java/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign java/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile all-local 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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 \ mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-TESTS check-am clean clean-generic clean-libtool \ cscopelist-am ctags ctags-am 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 mostlyclean-local pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/java/lib/000077500000000000000000000000001503061704500145165ustar00rootroot00000000000000hdf4-hdf4.3.1/java/lib/ext/000077500000000000000000000000001503061704500153165ustar00rootroot00000000000000hdf4-hdf4.3.1/java/lib/ext/slf4j-nop-2.0.16.jar000066400000000000000000000115661503061704500203630ustar00rootroot00000000000000PK H YMETA-INF/MANIFEST.MFþÊ•T]oÚ0}”ÿàñ0„ÍG»® K¥A»i ‚®š´'7¹·&öl‡–¿›-í¤=%¹÷äÜs}N2æ©X€uôŒ* H‡µ}o`€;ˆi/šGK c¾†”ô³4–@¦2KDJ>°ûä{ýLȘã:פÛÉk9^‚ŒÐ® ž¾žÉõdJ¦F­E fSÑÏÙ( KçtÐj=>>2+§÷L™¤D©…g(¥±¤2AmÉb[+áèö饮8ÆÛ…«}»U뚯àŸ"ç›ÕBÒXêKÕžûÒX™-›Ì¾tvÓX›uÎ|ïêI+ãè”G¿ª¸ê¼‘gáF)~Ó3v‚†vÛÝnû¬ý±s’§ó¨•ùgX|îtxù# ç‡npUÃ÷þPKœ¬´HÞPK  H Y META-INF/PK  H YMETA-INF/services/PK  H YMETA-INF/versions/PK  H YMETA-INF/versions/9/PK  H Yorg/PK  H Y org/slf4j/PK  H Yorg/slf4j/nop/PK  H YMETA-INF/maven/PK  H YMETA-INF/maven/org.slf4j/PK  H Y#META-INF/maven/org.slf4j/slf4j-nop/PK H YMETA-INF/LICENSE.txtURÑnÚ0}”¸â©•²®B{Ú›IL±âÌ1e} ‰!žBŒl3Ô}ý® mW ¶ï9çž{œ›Ó«Õ‡ÁÃ]wóÇÇo_æó9üäÍC7@ÓÚîš‹ö•Û©¿O2Ž!¬rÊþQýCš¤I­ìQ;§ÍÚÁ ¬Ú½ÂÁ¶“W}{«€ÙC7´ö 2ðÚéNÊ:D˜oõ¤§Cš´v‹ý€TàÌÞ_Z‹xìΙN·H Лî|T“o}ÐÝëQaýTšÌšlvÕ WízdUðvèm0gÁŒ·º D–uã¹ý¼Œú¨o:‘á6ƒÀ|vh(4ÁÑôzo8ªhótÞÚ Yšô:ðïÎwÁ…íNMˆ¦¾ Ná`‹FèýS›ÙÕ»7ir sö·ÁEýË`ŽŸM…ög;¡² (œN1 ²¿Uç#OìÍ8š ÚDÝ©×Áœû”C˜öÎüQ×4®w&ã±ë[1œÓGêï§nhƒ•†p#ö€s›oölhÅy¼C9¥¯‘øˆ÷J®(@×rKÖÔ‚?³‚3‚KÖÌ2Ø2¹â €U‚Tò€/TøþÁªçOÕ‚6 pu]2ZdÀª¼Ü¬zX ºâJ¶f2KQûÆÈ(b—i²¦"_áš,XÉä &°d² Üáoà ø«‰,ß”$îÔQó†ÆÃªH“ŠW¬Z Ô¦kZÉìõ>ãš)Ë(O6hLĶs^¿ö´’°âeAqsAÓ¤ddQÒ¨ìæ%aë ²&O4Â8Òe·†·+·Pà7—ŒWi‚ãÊy%®3ô.ä;vËŠ6‰`M˜ÔRpÃF4¬è'$;Ï kÂzÓÐv JJ$kúÿâyøüPKrzI±šPK H Y4META-INF/services/org.slf4j.spi.SLF4JServiceProviderË/J×+ÎI3ÉÒËË/ÐóóN-*ËLN (Ê/ËLI-PK~£S" PK H Y&org/slf4j/nop/NOPServiceProvider.class…”OÓ@Ç¿Ç ¥Ž_2ù­" ]§†Œ˜ ŒÓ d¸ÄÄ„”î‡e]!ÑW%*!ÑÄà‹2>íê¶v3þ±»çîžÏóÜ=ß§ûõûûOå¦Ëз!ªÂ}Î[Z.Ɉ3,ØNE«[ï2§Ú ·jÜ©k…½}Ý®T¸³c˜®í|T #Ö¨2UÜÀÃ\ «Ú5)rçB˜|ß±/D™; ƒV{†¤ÞbvC ²2n2Üí¼É £.̼á¼o»Ëpã.£*Æ0NYÎÚ#YB(e¹Å0Ûõ½ùí­Í²Qs¹£`¢‘à¶Š)L3(ge38 G¯×„Öâ²3«bó c¹W¯sÅÃÜöÑæþîQ)wPÜÝ+0$ô–$E×ÕJ6Ž;$ËZz5½¾.ã^H/CQßɼ쨭´e—9Ã.ª¼p~vÌCãØâ^Û4¬’áolJSdý¢e©i*ÜÕÃÂM--ÿ[º‘‹!Â2fѬ\Ô=RW†qr?àÎyÝååÍš(‘h®2Œ×QPRÌëqaXâ½=¾aZAÏ+EûÜ1ùŽðj2Ñùú´ ó¤c¨!¡ß““¾­„×ôþL=çÏÔ4ËäGŸ‹´z‹YÀbê,õò›kô_A!s˜ÌÄFÈœ sò ÉKòìÁ}?šD㣔e IʱD;j#–‘¢™a‚LÍÞYoê”ÏÍ@}þædÜÛ„"݉ÂÓ]a «]àdžï ?ÂZ§Xú‚™(»ØÆJMöq³¸+þš~—p¥ d§ÿàŒBÞ‰…¯˜¹ô½Zt‚Æ'~ħPKªO0„HPK H Y*META-INF/maven/org.slf4j/slf4j-nop/pom.xml½TÁnÛ0 ½è?Æ®–’.†@Qo6¤k€nî‚Ì&ÊlI'ŰŸLËžÝyëm9E|äã£dv{©«¬ç•Ñ›|IyZšRéý&ÿòù®xŸßòë+f9‚ Y¤k¿É!Ø5¥µh@a…<1nOw÷tEmd®/^ ìóùLÎo‘w³X,é·ûícL¬E¡´BKȯ¯²þ3×á­‘" ¾WÛfc\|Ù ä‘xÎã\m?V›ª¯aF'±Ä³Â¼ÓÈöΜ쇒ÇêÄWO«#£}(1„ êIÈ#H(ºŒŽ€DMà7±ûò£ÍÐaUt Ní Qkjmft‚£V:ˆÅãR´±/t¤åw±ËçGáÚ"ýQ-jàÛ»ÕÇìÓÃ.Û9Ó¨"¤”à¥S¶]×,sŒcÂÉU|t?P]»1F[¤—包(|ïHÜÏ©‚ 8ÕJìµIQµ­ Žö൚擨÷\£$üVýïüù&áÙGAs@ZÒx®äŸ]Æ'8šuˆ=óþ}¼~ûæ–.¬š»|tÒàÿ4Lô!€ÞµÁ–Ƀxó#}yHŠü|ù8Zç¥I¥¢Ùøv²I ÷—Ð6ˆ§_PKk‹‚DÞPK H Y1META-INF/maven/org.slf4j/slf4j-nop/pom.propertiesK,*ÉLKL.ñL±-ÎI3ÉÒÍË/àJ/Ê/-Šä¥ëE¹ÊR‹Š3óólô ô ͸PKƒ¯®36PK H Y%META-INF/versions/9/module-info.class]NKnÂ0}Ã/|Z „TÝã@E9‹ h¤œÀƒ )FŽÈšsuÑp(ÄÄQi©Gž™÷“æ|ùúð†¾‡¡õiVÇD ô~mÍÈm¬¦:Q„îIle& µ¹£|x„Gc7"MÖã­Ø›k¯b(FMB#·‹¥LÙúÀðfí£]$Nzè^~©ô ƒh6¿GÊf:V¡5™^)ë¡Gx¾‹‹ðŸ‹Ð.n e¼“•žÂÏ+s%TPå9D{q㔫-‡ø>ç-&9–ÐáÿŸ÷J®\PKm•1*ØFPK H Yœ¬´HÞMETA-INF/MANIFEST.MFþÊPK  H Y ŽMETA-INF/PK  H YµMETA-INF/services/PK  H YåMETA-INF/versions/PK  H YMETA-INF/versions/9/PK  H YGorg/PK  H Y iorg/slf4j/PK  H Y‘org/slf4j/nop/PK  H Y½META-INF/maven/PK  H YêMETA-INF/maven/org.slf4j/PK  H Y#!META-INF/maven/org.slf4j/slf4j-nop/PK H YrzI±šbMETA-INF/LICENSE.txtPK H Y~£S" 4UMETA-INF/services/org.slf4j.spi.SLF4JServiceProviderPK H YªO0„H&Ùorg/slf4j/nop/NOPServiceProvider.classPK H Yk‹‚DÞ*± META-INF/maven/org.slf4j/slf4j-nop/pom.xmlPK H Yƒ¯®361ç META-INF/maven/org.slf4j/slf4j-nop/pom.propertiesPK H Ym•1*ØF%y META-INF/versions/9/module-info.classPK¼¤hdf4-hdf4.3.1/java/lib/ext/slf4j-simple-2.0.16.jar000066400000000000000000000365301503061704500210560ustar00rootroot00000000000000PK H YMETA-INF/MANIFEST.MFþÊ•T]oÚ0}”ÿàñ0„ÍG»® K¥A»i ÖŠtÕ¤=¹É%¸5±g;´üûÙI)í:í‰pï¹çžÃ=dN3¶mð (ÍD éûÞD5àñ6@Ÿ$W€ætçYÂ]ñãš)Ë(O6hLĶs^¿ö´’°âeAqsAÓ¤ddQÒ¨ìæ%aë ²&O4Â8Òe·†·+·Pà7—ŒWi‚ãÊy%®3ô.ä;vËŠ6‰`M˜ÔRpÃF4¬è'$;Ï kÂzÓÐv JJ$kúÿâyøüPKrzI±šPK H Y4META-INF/services/org.slf4j.spi.SLF4JServiceProviderË/J×+ÎI3ÉÒ+ÎÌ-ÈIÕ SÁ©Ee™É©Eùe™)©EPK~Õì$&PK H Y4org/slf4j/simple/OutputChoice$OutputChoiceType.class•TmOÓP~[-l E@PÔ ” _ØÄ1Ét†Â’ŤŒ2JºŽt‰ßüI2! ŸýQÆs¯'’uéžœsŸóœ—{oüüò@ y>†™†SK6­½ÔA²iÖ-#Yj¹‡-7¿ß0«Æd§±ùáЃÁ¯"€ ƒ¬U´íÒÖ&Ãl±;•4— ©s™Þ|.¿VXÙöÔøÒ êE†ÂÆ÷õªˆ\¦{K}*b|É¿º^,pÇM·0@ñ“å\q« 1̽ï¶Dƒ’1 bwU«a$Oô#=iév-YÚ90ª.qGqWÆ=c¸O%þ%ìVê8Ò­–QÚcXˆwDç-½ÙLw84×1íZº3ú*&ñ€!˜1mÓ]bˆ_\O”C(4‚‰Â!¨!DBˆqÇ3Hò™ˆbš óñD×S¡üÂýùÆ. $R4mãm«¾c8›úŽEž•ÿ–è>Q¬Ø¨êVYwL.ëiûm½nðµ+¢o w¿±ûNwˆã¯ÑÝ7 šY³u·åP¨O”éðeª–7ÇåKÓÎt[êåV´FË©«&/²¯“2ÃÕÔuÛ6±ãFSFŽaôÚ4ÔÎåDÙYÚÆQº»Áì¿aØCÕȇ1ŽÑa~("@¼Y$)~ެqBþ(môÆís ~"‹á)×k=ÄÃ<|‚Ÿ"ä^%ƦÎ0rÆù¾ø)úW³°€g„Ïy^r|äT:º„Ø¡D(OMœbüø%/xB)ì£v Þ—"d1ªðíµ”†_´4úV‘Ú´Š¿Í? 6mN%ØFV‘ÛˆjW{ Qø¢'´ë ­}%ØCéN #î†,ŒD@Š0¦‚ÂèÆ´,ŒèŸ ÿø"›BE½ÈQFÉk"ƒW—ðZ0ý²XÎþPKµ>¥¾¦PK H Y#org/slf4j/simple/OutputChoice.class•T]OA=C––-t–BåKÛ[ü? µÄ&U”VžÈRƲ¸Ým¶[#ÏþL|ªD$ÑDßýQêm…Úº™™»wî½ç̹³ýõûÛKX >’‚Nt1„ôwzÊÔ­Rjc÷€]†®‡†e¸|ñÄ–ÝðË(è´Rªj¾Y:HUrÅ䩚[©¹é}Û(òéÖ—Âa…3HëÙ\†a>wµÄ½ “ç䲦ÉKº¹æ”jen¹™÷E^q Û Ÿ*úe ($Ç.Å¢3ÛmhâC"¹7½–~–yº“ßÎïl¼.ø1Œ£ ®aì?¹ò‡U——I%ªÆÎy;†zé–›w®—W±˜‚ë"Uuu§ÄÝ–m;©`ª6³¹)`g܉>î8 +H@cmgϰtÓkP–a1~Uq[Ô˜´½GZôå ‹¿¨•w¹SÐwMòôçì¢nnéŽ!Þ›NÉÝ7ª ±Ë‘V‚yW/¾}®Wš‰Ñø…Â=•sà iShWˆa(ž¸°C oל"_7ŒÚJ#)”¬eq'mêÕ*'î¡v¨-*}  ‡¬h­>˜ÃYuŠq«Ú)Øì1ä#ô|Gpû}?µÙ„È>BP;Fôã1Lމ†cÚstkŒÖÏ^å[4kÐ< aú®"@”žaÄ0B=Å<ݶeŒã ñIRd¤íÀ³_†Ûd÷CúC:d¨2Ý„C’Ç~¡ÉþU“½*Ø#™ Ö• y’æ)¢3M2Ì´Àªg°*Iæý‘Üi–ÿ@1ÂóHû‚ÐWÜüDvŸ¨:A#Ac¦¹&H¤:éR§øñú?Ï”‰s NFåçxž ¼’J¨IGœ½ RÜ瓈Â]ï0÷pŸÖÅuÙ«Ñ¿PK¦ ŠÂøPK H Y#org/slf4j/simple/SimpleLogger.class¥Y |Tg•ÿŸd’;™\BI`x„ð a’ò°”(!™ÀÐÉ£É ”¦“ä&˜ÌÄ™ ÔV[µ¶Õ¶ºM×ZmQ‹–G ,¥¶J]»u·[wuu×ݪ«®ë®ºêºÛeÁs¾{gr“L°¿Ÿù13÷{œóÇÿ<¾Ë7¯>ÿ€uô°†,Ââhl 6î_·¿6>ªõG{ƒ‰P4Òp(3üÑ#¦ÁAXhÛµêÇÜ’‡läêÐà$äûZ}_ƒß·ÇÛD =.^séȇNp„"¡!»rå.!)Ð1…„m­Í¾mÝí  -„jÿuOkŒFúC#1%h½ Epi˜Mð¼}*JPªaŽŽ¹"WÅ8å 6bñZ¿1ìmè‰'bÁÞ„É‚»Q4Ø,ÂÏÓ1 3{Gb1#"[üÆA#Ì:ûd½LÇ"”ôø`4&«­Á!ƒPäß<¬ #µ‰X(2P/»—èX*»Þ%&[®£+Øð1ƒˆ‡˜óhcthx$a¨cLZBqåÊ©Å&+uxPÅÆ«¹@Ô’®¤rêþ•,qjt¬RõýÁ‘pZ#nÀj kt¬eØ p29›%lDƒÊ³>Ù~£Žõ¸‰é‰[›J+}¾ ²j¨#Ì™<½u$î3b.l@©›óÙE«”‹VÅm^]ެ’]7ëØ‚%8ŠëH`„ã³g›£±¡`"!)¦Ôd–0'¹ÄÖ;„ÃFuÁ»Øö™61úû­‡e–Lés§ƒá{$Rïsg N1÷{u¼÷°"¡¸JÞˆ‚#ÌÁ${4¼?e)uVC,õ‡â îEi>ŽâC>¬ã#¸o‚-d ç‹`_ß$W§€¯ Çý:Àƒ„òP$bĶ#}a£UT ‡Ž}’XÊÆ`˜óZ_¥ Ý,g$Q«Ä­÷O<4C„îz|F f6àãR42Õß%ž|DÇ'¤òI¦?$¶„Ìþg:•„RÈ!’òpŸlŒÿ˜Ž?ǧYíÎÂùӒÞ ,¨l¼^¦ú,>§áó:žÄS³ñhk¾>?À?køoâ‡ÜjLÝÂ& Æ[9m(HìŠëøWüDZ5=Ñ)V8hø‹?n–`ì€ËÇOqÖ…Ç/4ü‡ŽÿÄ/ K¦¶R-F<°ç¸Âž`<Ô«RE*smÈî3Äå49ê×:þ ¿aG©’@X=•[ ÁÓD¶¿cò@GC£×‰ßóc“wëÎmNü/Æ×ÚÜæÄÿñÓV'þŸ—½m®qUgè ‡¹mäÞŒcÜ{¸×–^ÓIÄVÝáF.:‘¼U®PX¾—£Ž²9êÈ!Q—!ÿ¦dvR.Gé>®’S²O0Ÿ\”¯‘®Ó *`â)¸53£WŒŽ Énönæ4é¢Bš¥Q‘N³©8cK<žxÛƒ1'»’3K^$5MØž!Û$©·Ÿ}=®õ¢_©Nsh.§*–ÞÄŸV4ù*Ÿ‹àótš/¦öšp“é…:•Ñ"Î<Ýb!âRoVf€–œ¹X§%´Ô$°Õü9“•iK%èX(ÞŲ¿wúšäJÄÁHb—tw9¿_ÿæ÷W²fúÛ¶uû½»¼þn¶l¾‹a´žL»8ÅŽO e¶x¬RfË&°Pà”éJ6IÀ×ÔÝÞámöÝÆbïikn–kx²³«3àm±69‰ûö9ÓtÛÖÙ·x»Ò,Ë·{»ÛvÚwº;Þ†ùñµª}NÚH¨œ†]o°wÐ0›ÊTX"Y"Ú¹ÜlB2¾ªF&܉JRëÞÊ&¾Åè4ylžÇ¤ºÀ=›}~¯IÊU²lúHsH¡¤s{ÛînþâÂ*Ô­ -5ßVLC=¹^pùVl&2¸ÅL¬Ó1HÓ+ÚÀvvB“œ/ ˯C>^Ã9Àì9ŠþVÂÒ?JÞÔ𪮢»¹­£¥!`Ò¦?¿Ïê—RuÀ<œ¢ß}ýóS={¾ÉÛܰÓoÚßDb°gzÏOºìr¶ ŒúÔ‹ Gc´OZ~(b´Ž õ±€™f¨þ¿%8l‹ä½IxWÓ­IGbPZ¯ ·.û{‰z¹¾ÙÑëä&nØtFAȼÓùùzוšÝ3ÂE÷´…‚«DBðŸ)Y1¦ê¶–µŒ×š73;²XÊSfç‰â=“obº´ù¶ ®GéÛO4=#鉡¸/Òµws$Û ¼±X4–ž˜?x½þ¿ÚþrÛò'ݸô‡M çLs߆Ô9 “Ïf½†ÌÕ®š!¾gæÇKÓì ’ðŽÄx-Ò†Rµ°pr%”Ë㎧°¸lÒÞS%Û¬h!‘¹÷§n,VAe1:C‘`b$ÆÏ‡ßæu+ãAšœV²$2à‹ÿXÛ!^3Ì^¨ìú[ùšáK{åÛmT•r¹ ‡GoáÕþÑ'x4bf;7ö†Õ+C¹rEGb½†Y+fÙSÀ*Ñ‹¹-áŠ<óh9¾¢ eÑ Ì“;?/ •Xž÷ð¸Ê6®æqm,ïòjmãx¼Ú6^§Ü@ùy.­Eyj/ð¾u¶}ï€KÞìÊ>y]Ë¿yóÉ¿÷ÈNþuÓãô´žÇlü6ò¸Î¶^ÏãM¶ñfo±xÜh7ñ¸Ù6ÞÆcŸm¼ƒÇ~Û¸…Çm¶q;;lãNï´wñø6Û¸ Å| Û gnç™-ÜžÉßÌSȃã¤ã4rÎ!ï¤Ú¼¿K‘ÃßÏ"'ØP§Ó(ÀstÏfƒÄvùinK-nÚ)ÌHb–p!ÅÅŦÎ3—çÙÀÜã[_âyiÔÖz΢ØSX|nÁBOÕ,ö$±¬¥ú2 <ÕçPÉKÇ0ÃÜŸC5„y¶b^<þþ3¾È]b?þ˜µü Ü|ƒ[ˆŸ¡?Çü‚ºyW¹yÝIA%éZy3ÍR»—=ü”¥›¬kL–­É¿øÔXaÉ}‘Ù8ø·Ùóû©¥*‰ÚÍÕ¯`ý¬'±¦*{aï𳨰¡ë,ê‹6&±™÷lNb+%ám©:_QKm›]{µúDZ•% Š¿d›ÿŠ­ýkÈͯ¿a@þëñ;4ñíMÔð˜§[jä z•n6Õ`Ê:êcºl¥Ð d]…nê†\(-U.ËoH¯¬,Û‘Ä®V~êªs¼TÃoMâvOuM=üéw;^>†üºþuç\:ÉÇÌb£¬dê•X¥~M5ÊXP7ùÌ¢Æ`.1V–’«ù&2®Âš´'ÖAý ?kh€™·‹;üí·T(Ÿ¬DŽòÉ û5ìÓè€@pÿ[|žCÞ›Z:uY°rU]†³ª:‰Ð8Z d…fÀAÈãkÔ8*\iY\JRO"AV îyÌøÑ4 ^à‘D‡ç¢ìæwú• c]­/™l¿ƒ-5l2W£æe·ã{ZLVÆéüY®~³ÇãŒfsp–°ÉJ9MÍaõç¦Mµ94¤<ËcKP'–P„¢,h%‹8”†o…˜j1ÊTQ¤¬týlB:ª ͼÞHë²IÔè ¢å£àé¸3‰wŸH'ƒ\ÙB ”Pº¹ÝÅ!¯Q-V-ÌXÄ,˜Ï|ÜŸ…æ8Göñ´ª&—íŠK©¹3mùVÙùë,} 7}ôNüÐb}o—cs=ÙIÜ}|’`-6Ár-–D±4õj‹Zóº2wØÈµ4y<yqòÝÉ™ÈË2ßž‘|$yeò`r¤Cù‹¼OlP].çÔ’ ¸—!ûº\wnõy|0 »=UîÜ·Ãs=©¨…ûú¡Gñ8á)úž¥Çq–>é |ƒ>ƒ×éóø=‰7é)–ìi\¥c¤ÑÈMÏÐB:Nôej¢¯pÐ=Ë÷ßSÔCgh?¥S°ìçÌÝÄÙI ˜'@I”Ÿ,€ò“/K=Yå'  ü4 šOƒª2årô5Ö®œÃ ‡SôøÉ™­Éí^+—!ÿ Ör™*Y¶¼ð –pº-/žwÅ~ðªØ>¼Gùœ×p— —x$ÁbÌFÒV•Í¿µR‰øs#Šù³Aî>Á©¸¹è·'ŠþûDÑÿœ(zëDÑ•pµËj=f+·ÎORÖlÊ1;³¤]šTª/`]ÄzºÄ]ÃW±‰^f~ôŠ-Ié7èCé$íDîº,ùãñ‡é#–2O°¹$Ê×W§<‘àò&ÏÎZq‹YuŽf¶zÌþ.!Ô$ÉÍŸ<*'Xé'Û–~^eo¾†"ú{ôuîèßÀôm[±>-ÚzºQÇ÷Ô(!³¸Ù\D÷3Í."WÒ ÛÄÁxL•¾jÞOÊ#“+ÝwmI5+Utécé~w³2 KÉå4ž.,?±lî / ¨ë,-;ã-p‘’ô1æü9á.õ8¯|\q~èPKkñ`Ѥ¸"PK H Y0org/slf4j/simple/SimpleLoggerConfiguration.classXxÅþG’½çÓZ’×–-¹X`é¬bƒqÜHU샓äH² DYÝ­¤ƒÕ­|·gCBK$BJBœ"ÀË-½@ é½÷^H¯$äŸÙ½¢rJ±?Ýͼ÷æÍ«ÿÌÜ'ÿuæý6ˆ-A” TC™Ž9˜+PuµyÐl±ÍäpKÏàÕV̘»-‘L¸Ï(­oØ3ÌÓÔQ] 줆[ÒöІ«[Ò‰Ñ1ÛjéS_QgxØJµ9É¡Äp&eº ')PÛÞÑÙº;Ú?íÙ1íØÓð)""5W訔j+ãÖ™±]ª‰Z-[òè0°P@O8‡ÚM×êOŒZ\¸_2«u,Æùq2:Ô¨éºVJ`qTùãZ׺-í9ÖV¹¤VÇR©¯BêëIYf¼Ûµ$k¹Ž¹­#}n*‘VÖ7ëhÁ:šèdܱŒÛ6â$b”^–žµôJ{ÄÌØˆå±©Ù2G¸H loko·”{–ŽMÒ–ÊCf*©Òàí¯a‹À"eUÆMØ-»RΘ•rV:ˆÍ(•K/Öñl<‡Þåx¹\LY³5HùVÛeõUØŽÏó4´ ¬˜µÄè8Ÿ"ÍJ¤9]ÀkžREr§:"¸”Î[®çŽ¿Ýu›ê§Çz:¥a:I*ŽêèB7+0­hýŽÚR z¥ ‘v œ[Äì‚â’š{uô-bÐäíŽc[f2oóâÔïoØÀ5³è/,Ò.X=‹p¶ÛØ/pÞ,‚ù6 àÊÙufÛ*€ç×÷7öÚVVÖóu˜²(—··öw ôGº::{z»Zûúú{³p"c:âRpÁd QCÅKfZŽ—Ò\-°²˜^¯Ÿ`IÔ‘™Ö2ûIÆÆœQ2¬žIý¾aÆôÿÐ@d\šF¯Ÿòðĸò<È)ß=±|óŒˆm[æݚÎŒZI·ãÚ˜5&1?–hÇv3’Y )õ¡D2ä™e{~çAbkèP¶C¦…R–Í“ã r²^ˆë5Ü ãFÜDóó.ŽX6—§[z­1Ö´Dý9DS‡ßáÙš%è2m‹< _¤ãÅx ϹT†§Õ¹õ~§§­X&•p¯#h%2‡ÃV¼5&½cß¿ /×ð ¯Ä-ÌýdñÖXÌJ§yº)‡ñ¡=zÜÉëÈ'¯ø…XãÇLÞm,EN8-‘dA±lÆ«u¼¯%†K¨ñ7˜,Hoƒ¸·ë¸Cbí¤- ¯/TÛ“K¡¬Á7Jм‹0S1L'pMpS&í^¼YÃ[t¼÷Mº\x¢$Y2¦Ž '”Õf¦­"%·?ˆð †·éx»4¥P•:Ay(³À¨áË dü¸µð.úï²×Ù˜ïá0n fØÇÓüDrÈ àQŽd›pcÇXÎІÇf:• [l&pRÃ)§qF yVáºÂIÿuc AE[kÛÎŽö¾}}½½ëfoéi*XšÇñ^ÙÃ︰þ]-ïyø€ŽJó5ߌ>œ¿°°G¥ÌGu|LÊZܳ»_²žÐññÜrÒ4|’%™-1‰†“±îp5|º  ÙÉ÷I|Vºó9^#óU]¨@•õq|AJ}qRíèQØõe¦¯ÐŒnÇít2Éx®84|U`ÉÔ"ÜžIØq+ÄWPÀ7XƒmNÆŽ‡’ŽbÕ%CWHÖ·t|ßá­Ù#MØô_5¯œ½ó=îUÍ¡vïîBVÈuBù[¢Üã:~ˆ \'ÛG‹êg¼—ü?Õð3?Ç/&õŒwúò¶Â¶H±³óÉj<ªRó+¿ÆoØœl2 i<7Úl3Žh$´ÕNZXÀ¢G¿e0‹~¿Ç4üQÇŸðgjŸQK‚»öZi'“ŠY­i/• Å#;ñä6Õñ7¹G­¼ù©pN×h´õtwFvìîmíôttF¢ŒýM»fÒÝcÚ6çâ¾={ò÷ÿÒQʬ;ÅíßÙÛÑÚ>ÐÝ:™/²«}~¤=ÿªV ù4*\ÅbPt~ôöÏÀ­õÞQ‘îí½­m—uô÷åyUR\úP Lµ©ìÆ]»Õ•©£µ+Ï]*¯þÞˬO2#Ý;ò̲6'Nï+£‰¤Õ´Rýòì”/'fÚ{ÌTBÎ}b™;’à¿q:ò} nU¨›à‹SPA]ô?_/¸¢zÊ?Ûóû\ÞàºÌ1ßž’ôê‹C‹² 3ùZ@{’¦|cêþ&~”Éúe÷Ùþ†<†:»4Z ÜhhùX… -)'ù~›˜(±Ä6GãfÝä—RŸ‚Kêg.~‰ª‘Û¢*Ò¥Ú³ý‡~°Oõ…÷]Y4aÍRËŒ—¯s¬ËrGœxºJ¬™Š$þå¥r®hà…B„u±R¬ª«Hh ŠfÑ¢‰uºX/.˜t­L$:×X-Qå1•›CfÌuR¼S–Ξ,‘gËN3·ž¨ã\“›á5Wl¡:ÿ/¦·åìk¦sÛLÛîK¸3¡G’I†ZfG¾›«¦ÏšØÈ'Óå±&6eï¥EEyVyÂ8‡w½ÂÔRþÿ;‰fÿà¬O‘^]œü}FI<…9þ?ùip.é|ñ;(_J~1–(ú¿ äŸQ%/0EÏ E¯!RN–ùò%SäWûôÒ)ôó}zYkø·Ö·«ëΤu%ò§EŸ[°n?7©u†ü]Cù'äïet³GPÊ9°+|"| Ú Ì—ž@UXœÀ¢pÙ ÔÈé29Z)GçȺ°±æ¤L“œ¯N`cø,6ï;‰­'°í¨Ü]ø¹ü\…2Ô1kPEkªéÃRl$u3©ÛÐ@Ëš±Ö¶‘ÒIK#hÇebWêž}"(ÊÕ1¥gmqê”GÓiÚ~IØèØ]û8ÊÃkOá2éHØè)›Às¥éacw©žÃá^oXÅá>O †Ã+<ê²°qÕ1 PÙq ’lyä:‡ $KOÃF"üÔ¬³k<¡õaIåßúSepŽaðq*<‹û8<‰4ƒzÁ.ãÚÆSxÁQºv?SpQª‚µ‡¡ºéØ.:þ\«5èg©ìf€ö08{˜Ëу}¸û1ÄÏ®ÂÍÀmx>Þ„AjŒSç0µZ8F‰SH¨@†¬c|6ͪUNû!Õùh¨”%#ªT“”> ÷þwk88—¢Ûs¯ål….>鸥ĭQ±ö!4Óåmk'ð*þ½î0VuƲ.o¼ãÊnoùû¦oà1.”&_j¼3̈܃9¥ãÆ»½áܪà¸1ž/7ÉŽWŽG²ãúqãhv|Á8ÅrA݈ùü¼ó؇åÜwÞÌ#ä-tá­ìàûhìý¾Xb+ÞÆN~;vàpÌ]*j$X+—˜[®þÑ/c~ ®a8d€o1ÖxF¬Xv*Îâ8æÄIœ=â ß/‡Æ‡¦‰|$/ò¸7üÄ>Â秺ÎâÉ}'ñ™nÉl:‰Ï!é+Dó¯_ŸÀ7©è›Æwù1ïKè*Ø…†wzL|Ƀ‡øïaƇ `Òý#tì(Ûò]Œ+NÄNÊNsåÂÖY܈÷ªPl`5ôÀµb)“u9æ‰eb9ÝÄ‚× U¹·äNÃ[Ô¹'üªœS\ܯáKUAyOó“~¥ŸôšSøñ~yYøqÃÆSøÝã©SøK¾1 Ü$«Ða Ç8OåÒ£a‰sréOÃÐø< ˆssçé:µÛ¶jÑqÄq ð(á9"ÏC¡v¨Põ¼š>60Baî»Z•uâþ`ºŒ6Ä$Ä$ÐÎÞåû\µ¸]Rßw…á3´Ïš¶éÏ3ÄÆ3:ÆB§ªoZªáØFÕu…í«¹úr…{;ë¼"CB,‰N(®(¸ŠÈã–TÏÚžÞU=³\±„Z'Ý)•„»Ì ßq’Vh Aô„#/MFº%\SД1xa†‹<ÈSYÝt } ®£Ÿ!Á+‹‚/ë—ÉRË4$¶]µ ßtlu9Zh¸›n)ÄÃð¿‹`HN¹RõE~{¡èÑ&Cn\oVD»0l¦Õ_Âö¬¤ZÁ ªßcèmŒRð]Ó.i™ ‚QcÁ…& KpWÂ8CÿS¾Y¶‚Y²¹_uÃê%d›m «7ç©Ík ñœ³Eœ)Ý´Å»j¹(ܼhÑN·îÜÚà®ØÑfÜß1=jÓËÉHi—„Úcç]EkRÄæå0wÅp÷ëÝ–p…'HL¹àT]C,›A’ýçä2p‘V‹Žã{¾Ë+ëÂßq¶¼4^6eI{ŽÚ©feúéæú½§Ò˜JµãµŒ,JÈ)xƒ¥Óf Q¦½ïì Uçåâ§p|ûTÌÎr£õ«1zªe·Âí-Kx#ºãìU+Ú9’þøá "þï°òbl¦õ4Ç-«`ú"P(oÛÂÍYÜó„'a…aôRåIXeºØ•žÌš3î’m`¸O‚æ ­ÚEœÖôäÒ8A;yÄBŸkÙC°ì ¤ÍC$¿Bþ†ôçð€ÆnÜãd¥ðìI¥%K¥™á¦"Ú¢m£¹'ûòDö½ÀbøÛŸê¼í!~&äê«ùG\Áê1žÐy<覈u.bMž ksâw›©æ¨’uªdêi½îç49Hð# gåÊ!~pzC™rÄóÐs†8jg¯hï4оú1¼¥{]ÃÀPK²«` îPK H Y,org/slf4j/simple/SimpleServiceProvider.class”OÓ@Ç¿ÇÝJ˜€€Àd* Ô5b‚°%˜òCŠ‹þEºî‡Ý:ÛB¢¯JTB¢‰/Àe|Zæ¶v#ñŸ{îzÏçž{žïsýýçÇ/+x.£1 q½èc:1Î Õ2ju¯tÂM¡o]Ô„÷‚!–](&‘@R‚¬  ÜíTT×z¿r¢º¢Z·¸ªFçΙ0ù¾cŸ‰2w,»RáNÁ0=ÛùÄ0©µÈm­}oÍqCÁ †«·ë°ö½K)¸‰¹Z67ÊFÝóC·3n]¨;[›½€Sp ã £ù×oòúa~ëhcû¨˜?з÷vRZ«$ºçˆZeMÂ$ýkR%#c¯îtÈý˜[uî¸êKÃf( S¾û†t§ûîÞ~ëê2Òˆ%p—äYÎ-åVW%ÜgÈ„3ÕµÂÊ«)â›v™3 j¢ÆwO«%î%‹û™Ú¦a GøëÆÇ¸w,\†¬öJ¯Q U¸§…ÕžÊ.\¯÷±:B„¥¦¾ð‰f1¢î•ÆÈý€<å®ÇËuQ¤z »Æ0B\‡¼Ô?~Ç ÃŸ©‰uÓj¼Y·O“„_™É®ÈùÇa–«¤:âHúýE­Ç2¥Ö,õ*Y‰üèíÑ8G+•,#Û»x v¸ÍÓØ|”‘¥Q¹rÀÉ2<ÀÃø;¤/x¼+ü¹.ð@žî «XêGáLWø1–p®Ç¿b4Êη±ñ&û¤Y¯·ˆ]ÅXü‰‰w—¸}‰¦S4¹ÀMÓ4½Àp«˜): ”y?E£«ÏR­(™F”ýÿE™ vèN©Ì7ŒžwhÝq˜Æ§ÁéÏþPK½,F7€YPK H Y-META-INF/maven/org.slf4j/slf4j-simple/pom.xml½TÁnÛ0 ½è?Æ®–’.†@Qo6¤X€lC¯‚Ì&ÊlI'ŰŸLËž½¤ëm9E|Oäã#ev®«¬ç•Ñ«|NfyZšRéÝ*ÿöõ¡ø˜ßóÛf9€ Y¤k¿Ê÷!Ø%¥µh@a…Ü1nG7_é‚ÌÚ4È\ž½اӉœÞ#ïn6›Ó§Çõ6^¬E¡´BKÈoo²þo.=Âk#E@}o–Í^cœ}Ù ä‘xÎc_m=V›ªïaF'±Ä³Â¼ÓÈvÎí§’ÇìÄWÏ‹£}(1„ êYÈ#H(ºŒŽ€DMàw±úü£ÍPaUt {NíQkjmft‚£V:ˆÅã…¯j[Á…”Ø£ü!vqúü \›¥?"ªE |»~X|ζ˜ Û8Ó¨"1d•à¥S¶Ùkä1ï]ÅGk‚"ÛÁ1Ú"ýœ±ƒï‰c:VP`ía¤onŒ¦ Á&!‰u4 ì"é„oÁ5JÂùÿÎr½Tx±À{e×°4·qÉN ºŒ¯rÔ÷{áý“y{!¯í°êÚ>ÒIÿS42ч>¸}ƒ-“7òîgú‘ùõ÷{iÍ—&¥Šfãÿ«M½ç8„¶@<ýPK ëðà!PK H Y4META-INF/maven/org.slf4j/slf4j-simple/pom.propertiesK,*ÉLKL.ñL±-ÎI3ÉÒ-ÎÌ-ÈIåJ/Ê/- æ¥ë%¸ÊR‹Š3óólô ô ͸PK“í69PK H Y%META-INF/versions/9/module-info.class]NKnÂ0}4!P(mrìêÐ z¨•"å&1Èj䈬9W ‡ª˜8*BØ¿y?É¿?gsD>Z„þÞäÇB½êïµ!ôRs´™ZèBF7–ØÊJ¼/'…ðÙ6v#Êb=ÛŠRïuÃ{Sñö¢Gê†XÉ’ÓL¯éæ;7e#ÂøF=è8ý\Ì–©²•ÎTbM¥se}¼&÷í8up—% ›ÿ&2ÛÉ*Oáÿ´ù-tðÀ8…Ço—ypªÝ¾c„Ë6HN%<ñ<#ä½S;PK~--ØRPK H YX¼—½X@META-INF/MANIFEST.MFþÊPK  H Y žMETA-INF/PK  H YÅMETA-INF/services/PK  H YõMETA-INF/versions/PK  H Y%META-INF/versions/9/PK  H YWorg/PK  H Y yorg/slf4j/PK  H Y¡org/slf4j/simple/PK  H YÐMETA-INF/maven/PK  H YýMETA-INF/maven/org.slf4j/PK  H Y&4META-INF/maven/org.slf4j/slf4j-simple/PK H YrzI±šxMETA-INF/LICENSE.txtPK H Y~Õì$&4kMETA-INF/services/org.slf4j.spi.SLF4JServiceProviderPK H Yµ>¥¾¦4ñorg/slf4j/simple/OutputChoice$OutputChoiceType.classPK H Y¦ ŠÂø# org/slf4j/simple/OutputChoice.classPK H Ykñ`Ѥ¸"#$org/slf4j/simple/SimpleLogger.classPK H Yß } 0org/slf4j/simple/SimpleLoggerConfiguration.classPK H Y²«` î*~,org/slf4j/simple/SimpleLoggerFactory.classPK H Y½,F7€Y,â/org/slf4j/simple/SimpleServiceProvider.classPK H Y ëðà!-¼2META-INF/maven/org.slf4j/slf4j-simple/pom.xmlPK H Y“í694÷4META-INF/maven/org.slf4j/slf4j-simple/pom.propertiesPK H Y~--ØR%5META-INF/versions/9/module-info.classPKˆº6hdf4-hdf4.3.1/java/lib/org.hamcrest.jar000066400000000000000000003607401503061704500176220ustar00rootroot00000000000000PK †>QO META-INF/PK †>QOÐoRš½META-INF/MANIFEST.MF•UMo›@½#ñ‡Ê–ÌŠZNA>ÔQ­ê*j¢^z¨;›.,]ÿûΆÄ` Á9Ybß{óÆûfvKs¶ƒR9?A–Lä¡å×4¾d‡ rE~tî™âZ4K$‚Mãs¥D†g‰³iÅÁùN3¹'-hSå)ݳXp–ŒAzuN&|âŸøÛg‹í!å©ó– «³ƒm/Wž¿üä¾ë6 ©œ[šü¡{,ûH´&uÆIŽ6Ê‚&¡Á+]8\‹BÿR¾huAMÃRã8ÝÇ¿ !©È^´ZÑ¡±¿¶as‹`nŸ!H 4/§@¨“Î!Ñ5¦À‰È *©r€DX” ËHl­Å¡Î84¯²†u{(?b+ˆB7 j5%†W¡Îe?àoÅ$8×´ 1ãL1†åž€hÇ86®íÙ‡Ùó·õWŒÀÝÍ|ö"å‘Õ\ëÜ ÁCKG/ ‰K|×[¹+‰‰»‰rž ÙÎ A³¦qSŸÇ²ÛAÛ :·£ª„}wmö.ï%ÃK¿Â&¾¨Ó$øí,vítq'–ŽeÏÈ;ØmZQ§Ø‹ÙÝø¢Î…¼a¤»ÄÞÿÜçŠKm¢Î«“q¡Ñ§QÑëèÝÌóÙy"¡Î4OÏÓD"Q§ e—ÜÝŽöi‘7Àà}8_úר‚ÔÙõStEÜß~à;@­Ù­d<²6ã)®0ÓøPK †>QOorg/PK †>QO org/hamcrest/PK †>QOºÓ±’UÅ'org/hamcrest/Condition$NotMatched.class…SAsÒ@þ–R V­•Zm¥V ¶P{pÆ08SfœqÄz íA½,t a’àèò §:üþ(Ç·›”LhûÞÛ÷Þ÷}ûvóçï¯ßñ<å ’¨oWÃ3 { ©ºe[~ƒA)•OÔ¦Ó3r-Ë6'£Žé¼3¤•–ÓåÃSîZ"7U`y ™cÇÇýîÀì1dߨ¶é6‡ÜóLÊ[ŽÛ¯ø¨ëšž_m:vÏò-ÇÞ¾ìÑVgÑ¿Ž/J×·× CoÆÒHÄ–ÝgØk *]½uÆ?óêÛýjÛw©T/`HÊF)"ª‰A™žÇûr ÿ!0¬Gö]ÈJ·­¾Íý‰Kíµh]Ai´8…Û= û4ë¶oŽ^ÄNDäõrLVž‚Çr< !våë{¤Ö8‘gûX?yyEöûΙÙõõÆB‰—ýqZë2«¡JJc¡tñ\_j …ø†Ãº%1–:¸´LÛ™¸]óµ%Þàò4½/€²HAK1‹¶®}¢ô¶¢kèñ,ÃZÜÉH¢}¾PнxÒ¨Ò_/> ¡ô¯PtD#›ª°s$~§ -b¹Û@†ÖlPX&››ÙÉ“e¸…ÂxŸ(RÈ&”osX¯$Öf ±„wwd>»X¥Uà Tå§U÷¨jMú÷É+`#d4(ÕêO(ßç8$g€¦N9U<Ä#ÊçfrùinsÊ´•HÅpVoC¦då,zT\rJ•Ä6ž„TÁÐ’!•Rìà©´%Ü$[ }qQYòÖÉ>H¥ñXå—þPK †>QOorg/hamcrest/core/PK †>QOŒûˆ5v(org/hamcrest/core/StringStartsWith.class’ËnÓ@†ÿIÜ8vÝK —rIKi]§ìReSB °*¢»‰;M\¥6OÅ$ÔJ ñ<âŒã꺀s9óÏwþsÆ?~~ýàØ0Ñ(cÕFkzsÏ¢aÝÆ}l˜Ø4á2”v‚0P†šÛ=âÞñpÐê)„ƒöÖƒ±†¥nŠ—ã㾯yD‘j7òùhË@ïÓ ¡†A̰Þä 5äǾ±jù‘)³§¸Tñ›@ Û V<îÇIXã.¤g¨»ûù®œ`Fz·ËcJËöÉ¡˜ðQï øêð’’HÉȡό0xyÂó%¼àÊ IžJï¤8 >û™àj,É@ç¿ ;…]éo?ÏÏ•f÷¢±ôÅÓ@··–mâC s`¡Ê° è¸ñžNtpˇ¦ƒeTLl;¸Ž:ÃÚ¿Ÿ&_tÖÚ´7§èKÞËò£p"¤ ¹½Êyýål «ôÿ–¡¿96ó´k£ˆͦWlž‚}¦e%€„ 4Ö§,b)A˜º/t®AÕô ¡è†W-¬lŸ¢˜EÍ'¨ÆT4CY¸‚«i* -¦F §Ð'©»Š×<áy_0Gó J3ðÅ?|Vfð ®%>-z¿t¦‘)¾aƒù¶èQÍŸ2¬•„åLU¸IÓš[DºO2òHî_H w’ÕÝ_PK †>QO¼6Ì\ .org/hamcrest/core/IsCollectionContaining.classV]SÛF= c¡RRùj“ÔØ…~ÑÆÆ-Á¡¥1¡]fž„¼1ÊØ#‰Îä'ô¿ô¡i“N;ÓésT§÷ʲ„äš¾¬V{÷žsîÇ®ô÷?¿ÿ à|«`_äñ¥‚1ìp_ñì  vyxÊÃ_çñB»žäñ,¦ÀT[veG÷¤@±a;íHïŽt=Ͱ©í¸;žtôîܲ-O7-ÓêT M³céÞ‰Cn+#ºU[­J|'«ôêÕ„»ºgI§²¼/Û²Û„}±aZòéIïP:-F¸Ü° ½»¯;&¿‹9ïÈtJ©J¶ìnWži[±f(îž´¼€U`>]oˆR¾:Ðj#ó b_J娮æ›é 윗 =Émê/d÷•ÀZ±ñRÿ^׺ºÕÑ9¯ÄQêÒ5ó˜U–Ÿ (F¨PàJš¿À\Ït}ªˆ³Àb60Ï"…‘­§é ¬ÿ¡¶í/Ê–-p½8d3¥gº•›?Ò¹{«Y­–Uói“üÂÖPêòØ‘’¶À‹jëa$˜½Ã—”ËJmxéÒÙ9᜕Šgi2çL?ÐËg]Æ R`7C7ÿ—¼© »tð´âÁ9ó«FòKW3ü©âé–°±²ª1Ôíñ†á.<;±<³'÷M×$æeÙžÎ}Æò#ž|2é®ÐŽK^e2z'Ì~>çRœ¨ÄCëxp¾B†i)m6üH>OWwâ{’sQ7õŽe»t ŽÖVJÓ>q ¹mò {-ý:]e¾˜O‘NOhEÅZ÷Fû,ñî+*.bVÅ-ÜVQIJŠ2îóð@ÅGø˜‡ :[guÓGsÔO@RPf~è¼—÷q›¾Ò3ô'^GÏKô6FoS4'Í4‹VLäh\*½(ý±ïÊo0þ+r?Óâ8æiœ¡'9hWém¾ï„·±ø³E\#क़ízh» ¸I8”¨€¾MØŒ®”~A®|ÿ5&~ y'É$”ùnõw…| ÞÁ»¾]ÁÜ%´Sf%dæ]÷Bæ÷hFÕ¡‘™›´Â» >ókLž¬ø†ÊÔb$ØBH^@‰(ûÁª¾ˆB@YàÊ l’…m¥ßÿ)UÙî;O`…r‡¯Ü çj?V¯ùàRÀ§’à1ð5¼Ÿ_£?¿8ø‡ø;•J“/$Á÷bàëø$¾ŽOàQ ¼«ôd¢"%I¤Çˆjø,ATÃç ¢Í(ÑlšæQPìí°ÍÊašÚLM¶™a´ÙRl…ë› ˜¶P÷Ÿþï6ð/PK †>QO‹`Vöè;(org/hamcrest/core/SubstringMatcher.class…T]SU~N²°ùX „ÓÐÖQâw‹´ÕÖP¬‰Ôöîds¶&ÙÌÿÀ¿àŒ×zÓ :­3êµ?Êúž³›†@'“óý>Ïó>ï9ûï/þPÂ÷1¤ñI)|*›+²ÙÔñY[1Œáó¦q5F‹Û|Ç®Ep=‚|)g_EpSÇ-yàkÙ”uìê¸Í`8¢É=Ën»V‡!Y~Èy±ÉÛbÅs¬vã ±m[Žw¸+Ø}†¨Û­¹jŸa|Ój[ÞC.w:úþ饕}mÇ®ÔTÙj‹ÛÝVM8U^k )À6ysŸ;–œ‹šw`¹ ˶Ó(ð–é×+š¶#Š•žŽ]î™Â!¹›?ìòŽŠV‰Þ¢Õ–:àVøÑ|Â!v…2Ó,O´fëÂ5«&v-WEöâŠ#â^ÕuMEv¤©*×™V1°Á°pvC¬Ç^µÞʯâFM»}(OÔ.ÊqT…ÃÜ¡BN‰CÞìº÷`(Ù½ÚCaz¯I6="BÚ­Ð%â^סrn¼ Q}ÒÒÝ ‚›§nIK*v×1Å K^ˆôpÙ×eŒ7±g`sæñ†Ì1dOàn6›¢Á›ÛN£ÛmïúcS®MS\‚ËôïµûÆÀ|k`—Æq7“ÕQ1PÅwô ²”Ïø§34ÏØÇ]†ÉLï½dLõ`à ÈaÅÀ% ›}ýfX<Ï0*_î”õo-îÙeû‘püכʼógU•œçŽh׫â±Ç°>òJs•ã~ô>ovÅPxïzœ®] oUš>€a$e]i””¥¥>%«K}UjôNhö3Ô¨_Î?ËŽÊ/!œ_;‚ÆÖ~ÁÄŸ»—ýïßìµKЩ¢À¢ô$’úÍI–hߦݼ‹ .j$å05’‚Bj$%…)Í^Ò@Ó±¬ã"£?-2Yò@iƒBdP*ŸÿáŸ+#ò+4ê¢OûÒÆÅ‚’0ëŸïKHá%AÒ‘€=¢zIÃOÙlé=‚S?·šŒ=G<„‚j“†êîJKBŠ7¦¸–Tò’;ã‡õ¹çn9Ê£@§V±ÐüäV*$'2¥ò™&{sí9¦ˆÒOÞ($'«² ƒr˜!ãɺ,Ñ®P>DzbI©/«„uã[Û ¢ñn êõòxbÈð߆Ü^€Nô¡x¯ï¶ŽÐäUòVÓä§ö¶IS) yŸÀ¤Y±|áL¯#yb«O0® 5Žù„p‰"}„R`_T!cæé9Ñ@a¨öC|¤úÿPK †>QO¦c´rWÞ/org/hamcrest/core/StringRegularExpression.class••[SÓ@Çÿ›VÒ† Ð"ÞP[¯ÐUñâ…‚·¢Žepôm km“š¤Š_ÅÏÀƒÎ(ÞfŸýPŽg·ÚB§3ÉîÙs~çºéï?ߘÀC½#Ž\ g»qçåcÂÀ\4p —c¸¢ãªAפpR®¦t\—ïi7ôá9  /ùž«v%牒XÉ=nM2tMÙŽL3 wÔYdˆÎ¸Ë‚¡·`;âa½º$¼¾T!I¢àZ¼²È=[îCa4(Û>C¶àz¥\™W-OøAÎr=‘+ží”žˆR½Â½Ù•ø¶+C1–…oyö’XpŽ ·ÚæÕY-ª2žîåMáÎÊ =UXeáù QyÇ 3­p§†3¹ƒ³çT$nu^‘Én±dHVm_¹È7‡ÔS ¸õjž×Â’˜aOdiÎíPîÖ`æ•GŽâE»äð înöí§¶†>MÌÌ6ÅèÀ¯üô®:xmiÁ£¥— þÑ‚©Öã…w5!û™·yÉq}âîìÐ(ºuÏs¶lÅP‡—¦&¸i¢ý GyÊWª)Õ<¹Ê"^¬”Ž[&ncÆD³:æLÜÁ]÷LÜǺ+R7´ËýÃÈ®¯ƒŒ"i¢€y'p’¡¯=-Gp”áôîÊ–׿@§"S‰x­&œå±0Œÿ»Ã­—¬»a½È+uÑföwGóý†™>cÕõ &š¡3eîÅëºp,AèvóÍ™ÝBÞ¨HHöUmhÄtË­ÖÔ€Œm›}§û†4}s{é»Í É¹¡U¢²$ ÝÉ5z™/`™ìghi§a=÷"BÏ$éei7ØÐÆ~ÔJRýâPÈ|2“ÙDä¢2Ÿ }à O7á†R9L¡ 5“à$ 0*g)¤#CJK`v ]kÐßc`4Sn² ‘Õè*)E”›€å’&ÐqÃIå.Õm¸KÓIŠÜÈUšk¤+ì¥NSN‚õ÷QJñˆ?£’6êRŠn6”ŠŸR:§èL:¯jÄ2_Ñýf;çv'†aŠm3Ò—§L2aI.P@Õ¿ì/ôŒ®aïj©¿‰´Þ7-de1ªÞcPK †>QOà’¢ÜýC org/hamcrest/core/Every.class•UÝrÛDþÖv"[VR7vÓ&SóÓâØIL ¥4vC›&‚vRZè…¬(ŽŠ-yd¥C^€›\À ?ã2ÃpÝGàQ˜NáìJVíXp³{öì9ßùÎÏJÏ_>ûÀ ËHàýÜŠc«qQâËí8ÖðAw⸋u~¸Å?lJØ’ÉáC ñý¾„¤–êh‡ºÍ0]¶ìFáPmi¶Þq W_dˆU†©:G¶Î0hTZªÕŠkd:^2LÃYc˜É£-ì1DîYûu®l˜úöQ«®Û5µÞ$ÍTÙÒÔæžjüì)#ΡÑ!ÀA<ͲõÂæSÝ>. æý~Çížïü(§’Ç÷J0M/Nv­O§ªèÍc†ëÙòõ©Zhªf£pßÑm©8ˆ²¡w4Ûh;†e10‡çöÊm§þD× /kV³I"2¤‚€’-£#8ô¡2ÌŽŽÈ&öÜd¯”÷Ÿ¨:ªöuEm‹JIø„áfPfžÃÙùÉûBQ×kC:{†14¾ßŸGLçí h-†åQ33j0ãùUzó{9¸•µ]‘°^Ú]nÁÚˆþ §à¸¥à*q§Žrvõ•jAÌøPóÜ0Ô†iu ³q6šGG®ZG¶¦oü9Èbö—¹ƒ‚ (+8)lÓ(ØÁ§ >Ãçª jØeˆªf†×8#aOÁ|¡à!ˆò¤èš{et2 ¾ÄW G<6kš^À0QWa¸ößRíA9FÓ…p,R†³|¬¢†¯˜Î.”‡ ©Ò¡ÚÙÖ¿q„¥1Å!Õ³|œ© îûLú$]h5‡½4ªÝÔµÝÖÍýšˆ»Üï_ulÊôôÌ ¾ëDïU¼OÂÿ7*TҥЧÞ9`¸uê!TõækRÿZxþ% ú)Q{ø<Ñž¤S)Œ‘L­'ù"iê´‡h—s¿‚åò?#ô#¸Dë$ítƒâà?µ:M»Ö˜Åe@H.úÜÀ]Ú¿Kù‘çI¢ÁòâþIØc´¯ç»3l/uaø+$Œ1¬Fr?!4éb<„ï0»8%u á«^ì"Føäû¿ŸGN%"øÎC¢5Aòy\#VŠ\$·‰ÙŠÊùç„íUªÏë$Q|?“u¼7‰#—®’H䔵àöoùöiß>Kö $+¿€$!wã/òsóÍÓÝ"–håù>öêœÌOÉ"žHqJéUÁea2GÔÓ}ÅNú“X&bn±A5éщQ²o{¥Ý$4~û ÊCjëÄ~€qq‘à.@ ×)ú ¹æͳXIÜ¥®½ëe±E8b&rù?0¹ø Μ–ú°{S27 I \ýÞûÍPK †>QO8ä^ÌãfAorg/hamcrest/core/CombinableMatcher$CombinableEitherMatcher.class¥S]oÓ@œË—‰kZSÀ%P(Ði*°o$Í„Û>´ŠÊgs$W%6:;Hü+€J ñøQˆ=×qI›¢H}°÷vwnfníûýçÇ/OP7aàvÜ1p×D«úµfàžû å÷RÅ ƒãEªçöù0P"NÜ-ž}¡š Õ]Ù y2R‚ay*¨õpo¿Ù&h¥%C™´jõélë]†R'zGT ž Åöhè µÇýU½(àƒ.WRçY±”ôḛԉ†¾ uí¹Lˆ*cd°^…¡PcAÀÍIá RÂ=Þ›íZ;ƒŽ` ÇÄΤOÆ–žG¢•jeú„²Qê9"2±yÖ gñ@2å(Ióòÿr³°×[ûO½þ‘»öÜÿ@I³}ºÄ`îF#ˆRÍ9ÅøHo±`á… ¨2¬Î`Cã/Z¨á:Có‚Á>阡X_ïâ1݃îý‘ÚE“²æèaZâQO2{¬+org/hamcrest/core/ShortcutCombination.class•TÛRÓP]§¤¤´A´B­P¼¦åRo @E¼¼´¢ð–¦‘FKÓISGgü}òÍ_œñ2èŒãøèGø!Ž£îsŠ¥ÁËtš}.;k¯µÎÎùòãýG'±Æ.Œw`'NGpLbŠ?22ÎFÐŽéÎɘ £ã!œçq–?æB˜à.ʸ$ã2ChMsô’a׺³÷µ‡Zº¬UVÓWÃÖ ecŠ¡#g®V4§n '|R2YË^M—´5Ý6jNzÁÅËŒäóSÓôchϘÓ™fØ£úUH.1HsV‘໲fÅX¬¯ ;Ï÷¢YK×ÊKšmò¹·(9%“øm.¬[¶‘Ε,ÛÑëΜµV0‰µiUˆA¬åquiøß 2B ØŸ€¿èçòd×dâÜó;ÂõÂ}Cw¦’+ á¢QÓm³`ä-†ýj3伨« 1.æ²ÂQ¼:¶PìCŠ$0‹›Úò:5BÍÓM9ÿ“*†Îœ£é´ª0RƆôXÿV0çØfeUèˆ7Sönÿ:±³ªä¶cÙÍì=0:™L~²UÕt3ä¬V36„x:Â9«nëÆE“wC¯ÏÑrP1\UÅn×d±@Š,⺂¸IŸŽŸY $7Uêü­”gëf¹ÈŠ%ÜBNA·i–”±¤àî2þ§Ö$ÖÛi$«DÙºc–Ýnþµ©Üûhk#“Ëf#+¦&³­o“crI«-D"UĤ{#¿¹«ÚµjÕ¨FTŸhYòláîXîÒVèÆ‘÷n×.tªnÕ¬Y#f÷|*ÿçÊæ]µ}J ºwÑíLÞòN¡ØM³z¤q {hÜK+ŠŠáÔ;°ÔÐ^Ѭ }ôÜAˆ@‚B—u'öÒ,æfc‹èû›öú{=Êã-P<€ƒ´&ÑüísŸ)#Hq"õu´1,ެóÔ§ AáÚ'¥>ihrñçÆ_¾øù5þ ²ôRÛKØ'hųŸD¦|˜ˆ§‰§Ÿ¢œ~vGhDåB&p*‘á£$å’Üü¡F>7Lÿ.¿#,cdðò }/¤kÔÓó„Hp÷Ô¡hè:–ß!¼…2L1x‹ÎèWlWw6] ˆNBPN¸8 ¢*‰9&ˆª8ŽQÅ[qé<ÏO┈c¿PK †>QOÚI•B™=org/hamcrest/core/IsNull.class•S]OÓP~ÎVèÖäK?·LEDÝBTˆ†dàÅŒzuÖ5£XÚ¥íŒþ"o¼Ð+PoMüQÆ÷tŵÝzá–œ÷œ÷¼Ïó¼§¿ÿ|ÿ `äQÊ¡\À VeÜV ¡$–5Ü»»2î1ŒÖLÛô·²ÅÒƒ´í´ †ñºiûÝã¦áj¼i‘g²îèÜ:à®)ΡSòMa¾î¸íÊ!?Ö]Ãó+ºã•]o¿kYU†™8ðcç ¼˜ŠªiZu‹ ò1÷õCƒ¦‹õ#þžW,n·+/›G†îWKo˜#2¸bkø\·Ç;¡˜Ò2<Ý5›†Fˆ…b\z'¸ëø¦cWE ­¾c ºh0CÞ¦|¸Õ%¹b)º¤ïа†Ù¶¹ßu)l5%¬6X‡h‚j;þ~_¤íĶÅ=¯šª*ùÔm†‰„˜JÂwÖóÝšöxH"ª½ø”JB®á\qÌ3î œÒpº®n<7Åä ½7±&xT((P]¢é2ÖUÜÇõ=í©¸ŒTlâ¡8,'ƒ#âÉ«èPx§cØ-Íøà3¬E›Ñð]Ón'$³Ctˆ*k;=¡L,–éëÍCüd0ÑZU:=%ËÈŽ”OÀ¾Ò&‹1ZG§ŠsÁ`çÉNÄ<“d.`*¤{K6CVYùYú)û™NR„s<àœéE…œb7M>aWBöÙ@)“{"òœÃÅPH#‚žÐdæ²¼ê'¯7STïtŠØ<. Ë‹éS´PX P@î¤×'ù”Ú/ä ýA1‹„Zú‡Z î¨Ë§=…œ•# z[!h‡,KHEç°™CWq-6á¹$$˜oéô™{ãÍ•O‘ ó‰2¿ø/æL¸»‰[-þPK †>QO‰Wñj&org/hamcrest/core/StringEndsWith.class’ÏnÓ@Æ¿MÒ8v iÒ6üi´@IœBpK•KUR€Cª"zÛ8›dQjKk;ðP@B­ÀC!f§"© ø°öÎ~û›ofüó×·žâ±µ¶-°£7÷MZXxˆ] ÔòûÒ“a‡a£Þ}ϧ¼5áÞ¨Õ •ôFíÆ1CîÀ†RWzâutÚêˆ÷'©t}—O޹’zŸsáX ;]_Zc~ê*„-×W"azƒà­ Çm3ˆúAÔ°Kɪõ“tO¶y¾Þð€’²ò'¦|Ò›ß ¯(ˆ”ŒüDbƒÁI“-ÚÅCw,9ÊÑp(?’÷Yàa¤(}ç¿ û—…¢®Ïݼ\(Ëêù‘rÅs©»¶Ø¾'dÃD…¡H×é¨öâ:Ô°á ice{6n¢ÊPû×@hh)’yC“ê)Å^1%Óõ½©P¡0ì¦ö(eæ«Ë1lÓ?[€~V@PX´i×FzN¶yö…>3°iÍ“$¼Fku&Áu”b„¡»BçTI@/#Ýp*™Í½sd—QÅU›‰.P&Ö°ž¤ÒÐ a6(á z˜¸+;Í3äç+Vè}†ü§%xéŸå x7bŸ&Mïiä3J oXßa¼Ë:Tóç%ÖV̲g*Ü&°k¶ˆt'”K#5þBb¸Ýû PK †>QO[æå #org/hamcrest/core/DescribedAs.class¥VÝSUÿmØ]ZÊ÷G±Eû‘„@*ˆÚ£ÚŠ¥$R[„vÙ܆¥É&l6”úU}ôÅw_}ñÅQI‹Î8>;ãâáǹw—è&Ó‡™›sî=÷œß9çwîòÇ?¿ü`_†Ð‡-è»|™ á=¼/cˆ+s æ±À¥›!,âVKHñ%ÂXVprõNw±ÂÕ¸ºÊO×ør;¸/C ‘õ tî&#ƒIèȰ’nEÛ(˜i–/æ4›vÛç6µm-žÓÌl¼riäòêpDÅ|!¡·^ªzê0RB“ž+˜”yg8â5)^=ððç¾^Ækû>½¡Y)¶Uf¦Î‘cx`˜ÑIÛ¦’3¤Ñ„´§e^*¯—\¹;<;ñzÛ{ë͵\+™™IÓ(Jõ j¤Ñ7e­B¹È_ïÀ§÷fM›¥z‹šUb¤{¬âQžŠj™DŽ¡òˆcOãlÎ13kÓ‹!ë…|QPzÄ3¿z_ Ñ÷´¾ß´sÖ“ÔΉ /‘ìÃÒ‰û$÷sÚÓo3!éìi_Óo€ŸFŸBŠïÁíÁ© ð;šöмK§~\¤µM´v‘}7ZЃè¥Ø}ÓnÔñ‚IG# ‰ãñ ‰#ñcXøò¹ö1×þ4aõ¹¨Gè&M*­ã-ÚáÖJôgø‡÷!ûð}T³2(@8N•*—ð*󀪰SÜ€Æè_Çý_ƒ_ûAŠà« eÞŸŒUúcÃ|g¥u­>Üæ[ͱ@'žáäØ>Úh N%¿û÷ÏAÇAû·hwnVÐáÜÚMâˆ/Pñ@ÍP¨ ­ÔˆNÚ¹H Êaš°.ÂUJÿ°¬kÕŒÖð&·‚^Ç”o+•çM\vËêd¹æfyEdìÿ­2ÒDÒ{å¦}Ÿ®øùQÕØ>:ý8ìuH”rŒ® gÛ*IQZ.qH¾šðªþ+¼w\ž­w¸åWt݉Çž¢û‡c=œ® ¤Ó·‡¹Äéã;ÒMNšªO!ˆ«äÅIoHX-í=ÏÐû‚»¢í‡á:ªl›Á5ñ{ý?PK †>QOXR0ã_?org/hamcrest/core/CombinableMatcher$CombinableBothMatcher.classSmOÓP=woe¥BE©NQ@Lj6Æ/Âêb\b4ú²à7oËu»dkÍmgâ¿ÒD%ÑÄà2>wtÅÁ4 zŸû¼ÜsNO{ýþþÀ#TMX)£„UwL䱦—uw l0ßI' N+R·Ëûqâîò$è Ug(ïÉNÈ“ K‡¼ûûõ–<ʤÁP©NFÛl3šÑ!AÍ·d(^ ú¾PûÜïQe¡¼×æJê<-’®Œ›Qß—¡®=‹’nŠÇ`½ C¡š=Ç‚Æêã´A¤„{z2=µ>‹äý¬3.åãû‘œ§'ðR“–'{“š¨ÊóðáÉ¿<œFñ‰Z¿Ë‹ÿóMƒ6’^õvZGüw{<츯ý#$õÆùƒ¹ T žKíšsñ>bÁÂ= 3(3¬M!CÏ_²PÁ †í û¬^²¼ºÙÆCº$]úµ(Š&e9ÌÒÃ47Å9ªøsÍÚ1Xmë+rŸ)ËcžÖ9ŠÀc°M;°)sN¦qWánqˆîŒõ®e½ÙŒù:íèuSÞ·„­§íÈ¿©}Aî…­o(~ÊØK4x±Ú«›gXíŒU÷NY—ídw ·‡qW†ÚèŠSo•?PK †>QO&{L› org/hamcrest/core/IsEqual.classTßS[Eþ6 ùqs!@!…–jjà l¡Úb)¥Š†R% Ô›°†[Conûêøà¿PŸœ¾ô…Q¤uÆG;ã¿áá8êÙÍææG“ч»»÷œ³ß÷í9g÷÷¿Ÿþ àL ÃH‡0„74®…±†ëbµ.†6pS¬ÞÃ[6ñ¶ÞŽŒ†-Ü `[ønð.à ÿ²Ê ßÏ™¥:gÍÜ7¿0“%³\Lnçï“k…ÁŸ²Ê–“f?ïžË1øÖ+û´9’±ÊüVý0Ïí¬™/I¸JÁ,åLÛÿÊès¬ÃT¦b“æaÁæ5'Y¨Ø<¹YÛø¼n–ˆ3ÈÅbÍ.2D;AT›@³ýRÙìJš`¼43„v¬bÙtê6mòÇÉ$DM§pÀk}޵Ç6 N]0ËÔhû¼V°­<ÏVfâÜ7¤¯êX•²ï· gúÓIM›KÍ zé-Íß&ò¤ HµÜqÌÂg[fU¥gˆ€×lÛ|PSðê<ÒÖVzõ?Ö ÏðrÑ9hnoš7Jü—¦YômR­š`”—€,›ÈÑ+©yØ’°)J•Ûf™q9•½úüÆ´,ZÏÝÍJ*æÆ†ôÿæOõà#ÀåÞJ:!®›5Þ%DÛ©Ôí¿i‰èªŽSxOÇFu\@<€YÜÑéZŸÓ1/,9»â'‰¸ŽEay_Ç]ìéøêøpOlø„a²o÷ ¢1†‰~Ré^ÄE—NôkKÑ+Õ*/7Ÿ……ÿNfgSw‡SËÊÑu;ÝòÙüÓ9“ªƒBEî4º¯Ï¥¤~óRL9×ëñ Rüzɬñ©x{„4R@¤Ë$“³‡sôFÓ“K˜¨­4ZS^áÁ8ýåiö«ñ3˜‘ø žèÏ‹(C4ƒvùh_ˆöœ¦¿h#˜äê yéìðM»¾ò½@kÎÒj–ô0É»­xC ãGxNà=riý"kÑ…\º^tétRt /!¦Às \—àOàó`·u,Mú¦&q-ÝåÐq/wpèŠCý®8¾QKÆ3 &ž!à{ Ÿ÷(ñÎ'xˆ‰„œ"Íþ‡M¿‘8F uÖ(hœ¥‹BÅHÁy,GK׿dÙÄÊgOH%~ý½ßôÑzÞUuG©Š Ö b¹ì]9žoã‰âÅ%MžxƈC7YQÜV#tLеïú /¶¡¸è#艾è¢E¢ëbÞÕiAðSÆô  1P›|‹ïÑ×öøŸ?|Ýi\"¤eê¹ËT¬%j”+RÀ,Åxh|¥”˜+%Ö&Eƒ÷/xØäŸ„¤‰—Lé¹H³8LÐ8†~ŒÁ#ÙË­C®JŽF›‰uT¶ä2ihܯ b—mú †îÒ‹|ß•¥Ý6€^“S–šWèuú¿âB_êÝ®í^èÐUú«¤ä¼ú/PK †>QOÃÌžgâßorg/hamcrest/core/IsNot.class…TÛRÓP]'mI›Êý&xÁ^”ª­¡8ãL‡vptƇ4 %X’š¦ŒþŠ?à‹:£#èŒàG9î\蒳Ͼ¬µÏÚ'ùó÷çoËÈ ˆâ^<–¢Hã~¢xˆeëõˆÇŠ@‘UkxlYë<6øÉ”ƒa¬ Õô‘t"JÃLï:þ C¤¨V5Él ôgR¶TÊä(³/«jª™c˜Œ{ƒ%‚Ûz… ª¦ì5OÊŠQ’Ê5ò tYªH†jí]gÐÞ›hÅ[Ì“dш펀ŠËK~—:G€ÃGðÁO>“;h7ÐGÉl›8Ö"Ža³.±hçÅ\â9zBà†6¹¯cÞe|sÁ˜ž#ÄÁb>G‡—í# vÊ4Ìø°.à†'k宨;„fÅ"¿À¿"aÃ_ZΑ6¸±DdÄÖ ®n·mèE:fç„“gˆœAèE^ë@ãIÔ‰lyâ-ä=Ž•DÊ^ïþPK †>QOY2Ú$™&org/hamcrest/core/StringContains.class’ÏnÓ@Æ¿MÒ86î§´@4-PR§mpK•K"ÀÁ¨½mÜ%1Jm±¶óT@B­ÀC!f7nhRðaíýö7ßÌøç¯o?<Á›Ô-T°¥6Û&-,<Ä#;3”ƒ0H: kÞ>æ­-/‘A8hï1”ºÑ‰`Xî¡xžö…|Ëû#ŠT{‘ÏGG\jŸKÉ0ˆ¶{‘´†üÔ—"NZ~$EÆìFaƒ0n3˜qÚuPÁ®$gXoç{²ƒAi));&bÌGÞðÍûk "%#K~fÃËò»yâÙ"^ñÄ ©Œ{”Ÿ'©¤Üÿ¾xxUØ!ØÆ¬•3•Y^”J_<ToWg;x p6LTI—AèXE6váÚXc icû õ„Æ–#¹hiVC#§âkæd’­±‰8aØÉmTÎÔWæc j±vÓr鉩}A³ÅýÞ¨g”­7h×Fzn±yö…> °i-“$\¤u}"Á–5ÂPí£sªf —(Šn¸ÕBmïÅ?(K_·)ÿ¢ÆÕ'Â)ÎÄ*nfé¸@¨5J:?Ë:nó %×ýŠzŸ¡üiΫsÉ«3…;¸¥½š¸;t¦O)ºa}‡ñ®èRÝŸçX›šeOTÚ°¡55"ÝÍ'•òHû!1ÜÓ_÷PK †>QOö<í§{ org/hamcrest/core/AllOf.classU[sÛDþÖv,[VÛT¹—Ä$…‚í\L[JIliÓ–€“”Ú$ô¬mÅQêÈYaè#üø¼ôf`ÚÀ Ãüþ ÃgW²|‰œN÷röìw¾s[ýñÏÏ¿¸Œ}ïâ=:VT ãZœV×XÅnâ–ÞW°–@ $ð! 1¬‹yCH6c¸ÃG1Ü¢¢‚’úXÁClŸ;•]Ãn2 öø<[çV-»æ6/×C¼hÖ,îÚÃ¥•|¡aײ»|¿bM'»îâåçK¥Ü2ý¢yÓ2e†s©ûº¹4‰\oTÉ™‚i‡ûeÃ. t½Ð¨ðú·M±÷„g×$ÊÝx•†mdWêõÍ2;ÖÇÃh7âãƒj²\^:Ã0Œé9Ë0ÝÇCOAø9qçÐrÌ}cËlšdtŲw̆EîŒu„·Èw ¢ÈíZS8“ JŽÀ»tòœœˆ{Š›x²šíDØ,ï'×}ÕhVló@°Ì¥ïùwmÊೆÈÜ1\QpfS^§zèo…aòäHŸ*:¼òhÈÔ)ØfP« l”ÈöTêÈýDµ-`à"Ë sÁaî礑/-÷qùÿd$øØs6Û·qú1»Ý‡ÙÉåy"‰\0dO˜M^³MÓªõÜV‹C»bÜ4EŸ©²©˜‚O4ÜÅ= x] ÷5Œ`TÁ ñ)%VÃgø\G™ž¨ ‚Ò¨(¨j0@9dÓjØÕ`bv)Êî4·ªÓ´Nkx„:uSŸ6×poÓ3p²KTØ2 ‡ŽYwóë4H8Ø®Ø6LåÍ‚Ùt.Pà….]hßj¥pJÔ¦~¼|¨oLßÒhªój‹]WvysÃøÒ‘@Ô§Kn†[úÝ8Ð÷âÖx¿Æaâ†U퉮Yìéµ¢QßqUʵ޲ênsÕE,I¢ ŒŠŽýÜÛƒ­–_÷•|Ͷ| n¦v(¼ ¤ß»Ñi3ô¦O;e[Ô;Íc´ aQ|Empa¼D’‡$ ÑÏÌ>{ŠÐ´ c’FU Ñ~S´u‘ÄË€\`š€gºÎÎûg¯øF_Åš£´MR¢V$©0_öÌ«™§gfB¤mÿ4Í9B(q"Þæ úTϹ™®³óþÙ¸Ï!E«424 »öÍk™9ÂÃÆü¢ ßà*-†ß[ŠLDfá[$ç&HO AOA a›ŽæŽp*Œð“ïþý=ò„À"’v “4O‘Á$‰ê5 Ô*ѺEAndH7IÁ˜Å­ˆ†ïÐæ±@$Å*‹7ˆxË5Wÿ¢¯/œ¼D á¿¡*¸¼øi1¼‰+ž“ÈE}V?­ŸÑ]_Ï`»7É)œ%®íë>o 7Àšä¥{¶ãâ1óÒxƒÐÄYüèw)•¡ï}QypQ‚»q™3t@Æe¦àej_ô’W «¤!tbªÏgêEÎu ÇdEv"Çd¶s]uò¤y¼#çåÿPK †>QOð«3¦§\ $org/hamcrest/core/IsInstanceOf.classVmWW~6Äl6,‚DŨ”†H«´UCi‚MÀ–EûvI.ÉÆÍnÜl,´¿¤ý^?ù=k=§? ? ?§§sw“7¨œÃιwž™yfînþþ÷Ï¿\ÇÏL!­à >Ðã ±Ê(±À6eÜU `]Æ— ú…üJÁ€[ ‚Bf ùµ‚!·Œ yÏûýØÁƒâ±úVÆwL íÇ÷Bþ "0±½+Ôœy\d±'£ a€ïWxÎæùU«†3%ö„%tfŽ))AÙÒ ³k—p¶s1¶DGËÌÎÙ®Îë8¾EÍÐì%rˆv!ÎlKð®˜y‚ f4ƒoÔÊ»ÜÊ o ¡Œ™cú6³4¡×^»¨h$cZ…D‘•s¯Ú‰œiñDºš6ª63r|s ·»Tc]yˆÌE*S=2ìÁÂÀ–ÍrÖY¥ë Ø›Ùá‡S ‰V·ÍÝ‘Ÿl/k•Ws–V±5ÓHÎ< â5›—1]~üe­ê@K˜8EB 層Í·ú»¥wŽUû- vL¢¸\ÍéÞ¹àÛL¯ñôFv§¡û\w s=ó:¡Kâ%Ràv=Ÿ‘h¯WŸL6XY¼þ£Ý@Á6Ý5.Ó—eŠ>z„ÄœC»Ž%}¦M÷ÑšJëY²äIzH†b¯ Åâ/á‰Åÿ@ßKxŸ“µsb^z†é9FŸËqú$žÃ¼cq<‘À{€³r#¿Ok•¤k‰6c_C@\¿zäHŠ3¥8;‚ïøBòá øŠBJ ¡ô“¢6”RJ”¡†2LJ¨¡Œr¶¡ŒÆ)š×©hšê.ÐÇþ"}œ')¿KX@·‰Ç bò!®¢H|Î7+)9µ¡¥¶’SÈT—@uÿêµ~@‘>ÄGtRÔú1ÙG2%ÅŸbp6~1îõ=‹ýoüã¿">s¼ÁÄÎ+œ]8ÂEÚ™<Â%Z!Òpñ>k6f’~Ê€(=C ¤–QÂç©·©!+D´H?ân6)…¸éÂ-$)Õ‡ÏÐ5².âãzÊõÁÇC—Дª‡’qÓxî9ç”.NÝ ßE7[†"ÜŒÆE¡3øŸÖ[Ÿ¢œDÊ\Ù¡Á»zØ,ÉçlÜia^¡rÚ™Á¼Ëô2é+o}ÿ¡W›Ð)úwWk”’ŸýPK †>QO!ñ_žœÌorg/hamcrest/core/IsSame.class•SÛnÓ@=ë¸q8)¤´´Rî¤ 4”Ò‚ ª7©R ‰ŠàmœUâ’Ø‘í ø!xá$*H|…˜µÝÄN ²»3;sΙ³ñï??~XÇÝ t”thX™F9‹ ®ËåÆ4V5T3”¿©a!í4„é3vø[^íp»U}äî3è5«es¿ï †T½N™ô–e[þ6Ã\éxÃÊ>ƒúÈiRõÌ®e‹gýnC¸uÞèIà˜¼³Ï]KÆQRõÛ–ÇPÜuÜVµÍ»¦+<¿j:®¨îx5ÞD9Ÿl|ß;j^žØµEZ·¥Ú¤*­Ë}³-¼ º_ÑxÜm1äj>7ßìñ^D‘i Ït­†¨; K¥$áãà®ç[Žd›Ãı™âÅ †G*wlÏç¶I4åq¢’ý{Á®Ê'©‚žls«~ïxßv0óØæ#[²~;F¾1&‰ð{b%Ssú®)žZÒ¨lhüªÄ1Ç-dÉÐø % ëncÃÀ&î0°†…Io(QfFïc2èÉJÒõ…I6“BÞë »YïÈ­Õ¸Ç5ßµìÖ¨MÉ7ʆÝû¼Ó#íãŸ(ÞŽ ô‰éô)Ò_:A»A‘‚¦èL£Ñùe´+´gÊßÁÊ•oP¾P”ÂIZó´ËU¥jª ͇՘Å) 8…ès‰»ùÁ]nÀ|šN X¤Uò¾Žxó•òW( ©¡¦>QF ¸ÓTâræœyœFP—8ÏÐo Šñ€g±‘u"²b¥:„ª@rbJA!Ä/†CHH¦A$³¸H8Cň"Îa9!¢‰Ðqžìí}B¨òNÿ í%Y<ýy@Nx5t\¤¹ƒ”™\I/Q|ùß¡×þ Z‰NWH’ܯýPK †>QO!Qàân"org/hamcrest/core/IsAnything.classS]OÓP~N™ëÚU&(ȧø± Ü4ÄYHP"ÌyAƒâÝYw2JX»´ÅÈò Q€?Êøž³²­ƒ¡íy{ÎóÕ÷mÿùñ ÀžeðÈDMd7¨*dQÄŠŽU¹×ñ„Ao‰0äMÁ0^=âyù˜{Íò^¸^s!]q=7Ú`ÉöR¯üAsU×µ“V]6¯+²ïðã}¸ò9ÞLE‡nÈ0_õƒfù·œ@„QÙñQÞ 7½S:V&“IòiûB`ùZfŶ×7ˆ>‘¿œ\†Õ[(•ª4Õ”œî7éiU€^gçоP9‚Qº›tÜ"ørTYíŒÑ:žØ¹­ ¨'±è{âJ¶Y<ÇHqåR=ÝQZAŒ¡ L(íÉ:Ö–•ŒÊú\̮ˡ;.;´Jž–úÜUO+ôtŸªÖUÕpS U­«:™Xu?În­¿"õ74¼ìÊ<½ëBŸ‡Õõ°p³ +ö00GQO½hjfËorg/hamcrest/core/Is.class…VÛnÓ@=ë„:qÌ¥M)”B[îm ÷[B¹´ i $„„“.©QâÛAðO<€‚‚ÄðQˆÙµë:ŽâÝ9sÎììì*þþü à"ªvãZ)\ÏàŠ)”2¸‰yñ¹%,·UÜÑÈ}WÃÅlIÃ=ÜWñ€Amn}ƒÛ cå¶Ý(l­ºÍ·°âÙ‹ éŠÙ° ·cs†‰XP©Z-Îr¨dZ¦;Ï0>O6ûŒ!¹Ð^'¦½eÓâ«VÛU£Ö$ËH¹]7šÏ Ûkߘt7L§'¹zÛæ…e§(á ›Û±Û™NÆ'è¹E–~]HzÿLù­ñÞ(4 «QX«½åu·8û’!aØ ‘t“A[çNÝ6k¼Úf8‘Z”¾M×l[R)³¾c`8Ô̰o›wÅtd~ …˜ìë%M—·²-Ÿc1,¯ˆbÏõ;½~²ZªÞèMc~`6R.®æýÔw½7š:ñ3\é“ 9k&LçÃlXy¡i8Ná¤KíÆ0ÜÁ0µ•rBã~¿BÅ g{9ž©;æ®áðHœViwì:¿gŠ;¢.;s‚CÇ–uìÁ^uÆYŽit”±¢ck:Nà$í,îZ ‚¬ŠÇ:ž ¯c³*žê¨àÃÁ~)‘ÆŒhÈѸ}F㺺T367¹µ^å\Ù­;u¨¸¶i5¢µë¾EY/:d\{Ãp=Ò­Þ|ãAjÿe«ÉÒ»ŽÑ¤s1Ї`2µl9®aÕ¹HA3ƒŽÒ3½›ÞwzaĹиV †¡J[–æ£d©Ñ¨Ð¨å¾ƒåòß |¡Uû黇F2IÈ4YÆh5æ¡q9óØÇ»|‡ßp QOWE¿ y )org/hamcrest/core/CombinableMatcher.class½VíRU~NH²,m€H mCŠ_4)JC)h(bR0µ~l²KØšìf6‹38Þ€ãx ý¡3*ƒÌx^”ã{v—]’lŠã=Ÿïyžçýسû×ßü `²€GÂÚÖño>@a< cS O„±ÅGŸ†Q0€­0Jñ˜7OÃØå›;†yÿÃX^oTTMªÔ•Gª¹§’Y¥ŽA\×4ÅÈ×¥VKi1\÷ êæžknœŒF ºQËìIª¡´ÌŒc‘eˆÕš&™û†Âð5ÊÍ—JÙ%2 åTM5—âI´Ùm†`^— êZAÕ”'ûŠb”¸,†á‚^•êÛ’¡ò¹³4÷TÒ»¯ªJÆsÉ;ÚŽqÐ<ÁI çø1é/ßñ“;1hÇ­U”v•úC&Yx!}+eê’VËlV^(U3ÛŽ±¢´ª†Ú4U]ËÎ>#ÇTSip§»Î1ô7Ô–EÀ0Þ…¡ô–¢)U¿ÙšŽ«SIZ>›\­…ŠRÒn&Ï0&_do8%MfxÐ+ÁçÌÓÝ´ªníìH_$ið†(¨Íºd*rAm™;ôN0Ì÷Ôj…~ßTë™eÃø+ú¶mz˜,ø­çÎr…+Üúg_3XѹÅËäcÆ÷r ð[½Ø kE‹ý»îw—ðROOí“—•sÉCŠjÑÓÿÈù¶+”¾ÿŸ¼kãõüËçJ~äíàüŠã—Њ*Õ4½¥jµŽ×B(êûFUYUùÕ0Ú%ã'‘@YÄ ÄÃx&âs<ñ¾ ã+_Cb˜>‡Cô5ê¶Z®×7wE¼‡÷9G…77ý µƒÍ]†Ÿw@DÏ_¹d²—HÃóEœîÆ$¿/c~Åá~jù­âó±à·rôäVÞp¯ÿ ~WˆýF¯] ®Ôl*š|j‡|±£š‹J}×6¡hÔ:‹¹ý4vZÞº©I–ñýÍÄèˆ>s¼¸¨§Yè§1•oÑJ…úõBê,•þ _hÖ‡Ij¯RˆÒOP„fS4µ­ ÿuÀÙèÓm{3îÞ„Ë|›pîà®Ãû#asôDêWÒGè à'D­ÉÜ‚´ù2ø’öƒ–’aêy;ˆÂŒ⨥fÊÆpÕ$Ä,1òQ iâòt%\]Üjެæ-OÙ¸#ð-eðµ\à¶1ÍEáJ;^hko‚~§Â"ºBD¼IôvXDKèÐ3¼E¿¥vdJ?;F¨|Œp9•>Dÿ!"‡~v¹BÖùÉS<1—'†·;ÂsÝä{^øß¡Ñ»½˜N˜EæéK3ø-ä0ÿ@=OZüƒåC\ݘãñý×væÒVëÑÛY¿K›ÄåuŒrêe=îJ‰;RúÉj÷¬{V3®Õ„k•%+[^Žjû–yxEP9F´LïÄPg4, vN#VñãT–ùÊÔÛÐÒ|»¡‡9ôH'ôê ótÒ­0ïW) QOµV¥:é,org/hamcrest/core/IsIterableContaining.classW[w×þF, Ä‘Œ/§iÁ–Ê ˆ-W Å8ubC;¦à¦íX[Ct13ã’)M/iBo¹4ô±/¼ð®Õœ¬ÅÊSòØ?•‡þ‡¶+ ùΙÑxl\èƒgΜ³÷wö÷í}ö‘?ûêãÛÃIìÆ‹è“|ü(§ c1…>”S¨À¥–QMÀLା”@-º°l¨h Ï•$ÎÁRa'‘“Â*^Nâ<^kT¼*Þ¯©ø‰‚Fͨ gFwÊUÃRÐ3Ý´– U½^¶ Û)xóE³ærCwV-CÁ¡FãææŠ%švŒ› Ó))èG™W;Ö¬ê¾i³aœX­/Öœ¾XãLzºYÖkóºeŠoo2æTM[Á&¼rÓ2 Sö”cXÂìX³áèܺ±\”D‚0VZPîcÜc³7œ„ÇVPÙQ—Sö¬¾dÔ.(xdxú¬þ²^¨éåB ¸¸e°˖¹â˜ÍFqä šŽQä×=O.ž5Ê#H–›µ‡´UІ­ S7mFXÁîö›*H™ö³ºíLš–í(PÎó­Ø~VwÌ:zù¥}Eê¨â¢ŠK Ž„qõ|¶g¬šöñúŠC½zCõ6 ÓûR0°ÍFÂ4Y‘ø‹Æ\S·ß›KU‚*©U]äŸòlW°íNEJ¤Í?wò âÄp?½Òxˆ_=®5¾‰orä¢ïÛ°¶ß_ôw&€»¯R%vç¯fs7½†ùtl ñNEoäÖСàÄ5¨ ®aƒ„‚±Xö¯ˆôÓª3ÂÙxìÆõ;ŸçÓIÏ«äzÅ„…ôËŠ‘pŒ\ƒ–O§\K‰ϯA‹"Vº~çùôŽÖÎ (&©O’² ”@/G}üÙ¿9%™"å+‘ÄS´œ¢(®RŽs¤}‘4/“æ}‹B²‰æ(cy¢W$RqAÞ—ñ*à ¥£¦HS˜À#x”2­K{Õ—VØ?FûÇ9€šù* ý‘ÿ"­pø%öª8üon몄ì·^Ö›t€Ý®hR°?A]G, B‡ ¨È{·p7ÆdÀû6¬í÷×ZÁÅI?Ù*"'Çñm>E†Wz™\z§L€ÈÌîc&Ök0ÍX@¤(AÃa~ Ä“ñãÉP懽x4wÆ‹§“ ùI÷q∵ÎOÐušÿ‡þF.ÙI îtâ(3ޤ˜”Š 6ß•ÐÇ<èïyК„¾…tú|]“UD3>úq¼Éhž¢¿@ÿŒ2ˆã2ú 2§³·oòß–ìLþv)z8¶+6ðgìÍïŠ=:ωÍûãÜz »¨ã1åú/r·Ðó¡ŸÕYzK’üÙ¸üžÅsž.Ïó-¸Îz\ÿCm¸îñ¸öÇo¡7ÀóŸaQOh8½"org/hamcrest/core/AnyOf.classTÛNQ]§-s£ÊE.‚Þ^€/´’TÐĤHBk|˜–¡ÒÎéÔ„Gýäˆ&~€eÜg:m§WŒm2gÎÙû¬µÎÚûÌï??~ØÀ+O°¦@ĺ…?DlHxÊÇMÏøøœGhò‚AH¦ál3ÌF>¦-»¨–´JÁÖ«Žº§9…’n'¢‡ ¡ëHgI¦þ¾VÉëvVË—ie!@@ŽÅ¯À.8§I7驸QHýMÕieÌ’1Ž[ ß›lƦ(6MïÜÆ ÍgidÜCZåô9^ˆÅ/ìäžÀᵸ…&·@øwÛ¸…&7Í5¹çém÷èÉùöŸg‹±xè¡oMB.$³E&6ÉDrïGvóDŒQýyд‹]@è<Ì<íZðáKM| ‹x܆/yø2o Ϫ7„ÆcòOˆbT©ïâ—\ð:€ìú¤ìºÏ•(¾R~Ìk‚]ÊpicÔW:‘×|È’[u´‰åµn ÇýµMñ â´C˜Áº÷Ë—Ï;HÂ>’†÷ÝŽ<š¬º£úPK †>QOkû¬BHK "org/hamcrest/TypeSafeMatcher.class•VkSÛF=‹2B<ìðH!$N¡Å– n›†¶Á¥¼ÇæQì’’>èÚ ÔK¤IÿIúøÒ/é&íL?&3ùQÞ] aÇÓ2ƒV{÷Þ{Î=÷®àõ?þ à6òÝDR£Ç§†0/¶ŸiXÀ¢†–„mYà V…ËZŸ÷àRÂr?ˆ´Ød‚X‡*6ƒˆ‰°-_¨ØfèÉín­î­¥6VVi79ª$y¹P57aÙ®Yµy)±mî—Ì‚k=6sO+æšeÍêƒn>©Ù, +C(óˆ?扷Ë%î8äÒµlîWé|°ùY¾o®s·p(©7Ó¹—`¢md2—›£—j\G.™EIâ$ý?RŠÍõ÷ ½e‰ï*¥§ Cõ@›ùG”a.ö´‹Añ2\4BÕÊ›ë–#cÏ#-"©­ÈÈŠkÙ’ˆb¹fYÈ})ŽáJÙK_Ä0úæ„ÔUbÈDÛãª^ÍT}Öå…ÖyÅëÑ@sq4·ÅzÁd¡ä ÑdîîeæóÐKÜiî°–=:®¨p°i fDBÃÑq Sâ1®ã*ÞR‘Ց×:vð@Ç,n©øJÇ. 1Ô ¹áu|ot|‹ï:"Q{øžÅtLãƒñßÇEÀs†kí—áê›*&=›õ!LW0õ8kq‘ö {µá¾O¶¸-"û›L¤µå¤lÇåvÁlæÙ0W¯TL»˜3ŸÙz´¬[µì‚k3x*•´ÁË¢ y±4Cµô;¼tl6å?¿bíò´ ”JÅv”›ô­¢owFÅÈÐ[XÌ è¢Hë‚PÄ‘å:Yî‘Ñ4~;CÇszà=5:åP)K„ÞôšnâmZ',“´Š¬ïPŒÈš§UDkÆFü(yûhy)´ë¦Ì‰"½½Üâ­Æy¢álÒ?óëyWâNyÕìQnáªá§è’p‘š›§b £â=¼OÞu«~ÝÂëú6QúPRÐ?yzÇ_bÔøJüÁgè7hí~U9øE6é† …ž‹$ÿ¥Y&ët÷‰{Ä.t÷èÜ¡ßNtŒ-Ð_^ñåñx¼ö$HÇ_A7˜á ç„~Fb:¬½@)';£Ë÷poÍô}´é—›'è&O1ðÜgm@Šv÷Ñ‹4A†Ø¬Ç ’bsØ¢<¶é4W'sÚ¯&íËœ¦FœË¬{–úº½³4×û·dŠŒâ§ÿ/„vÃa%p†+¿ nLrë’Yúäµíùwå:÷/PK †>QOorg/hamcrest/collection/PK †>QOašær3 %org/hamcrest/collection/IsArray.class•U]SU~6 $Ù,_)P ÖbH() V!€”‚F¡ D°ýX’%,Ýlâfƒrßÿ‚7ÎxÓ‡ ™Q,:2½öwø+G}ÏÉfIBt29ïÇó>ï{ÞsöÏ;0‰=ýXñ!>r#àE>|ŒOõà3Ö™2)’ÙçlØ`æˆ/ð€Ù<ô åÁ—u˧ÌlÚ.EÙi»A)^S’0ƒ=‹Í’Á}ÝúésJŸÖ¯4içÀ DZS³Ðzˆ$;4;hîŒü !=‚㜿ÀuH2'Þ ±fÒÃ….tÚ Úõ–}ð&n|UŽ1\£{ËÖ Úñô¢µ¢ÿHØ ==‰ü ×É÷hq8gÑ“`’ÀD40qŒ¾cªçáŹÈÅÅÉõ¢…úÐk²·ˆ #"èvJ5ŠQN)fÓ‘ÍX ݘM—éb¤»Mk\Ò?„¾¿)L™ÿ8©è–•ù ¬F.’gmþWGý­Çp;=y Ï1¼l:gƒ,£fœˆ+ŽúEn¬Øú}|¿i[ŽCrâð¹“ÿãÐÎ;BÇ¢ Ò.HÙRfÃô»CY¬Q‘ŸP‘Ÿ’l›r¿Áí]T%^ Vð¬]‹,Þæµ`«wð.%vZ•¬]fUU•AV•¹ÓªÜ!Õ{xŸFvª9’3÷hämôo§Ké%:ÑÕB%±ÛËÏ 8NÍ5A'8NM;YÕb6ÏL»ò™Iœï€ÅÎÅžQ+ôÍLçôû²C´rQœÃ–]ìp¤ 6ÓìJ=ØÒ%Áf€u׃­] ì[jÌ9ëÞ,’”鼿£çÝÜÞzÈÇU^~9«!½üJÂ:¼:ç©öóÏ%ëJŠ‘è+êæ#ôÖa·Ua‹gèŠeº„9‚»æ¢õÈx9æ®4ôžôZpX„pÏ‹ÿPK †>QOÂLHâ/org/hamcrest/collection/IsEmptyCollection.class•T[SÓ@þ¶JBD(ˆðÞR¤h½·"ˆeÆ™ª3ÒÁѷЮ%Lšt’Ô‘ÿ䃾€—Çg”ãÙt[šf°{¶»ç|ßw.›?üPÀ¦ …1(¸;†{¸?ŠÂ>LᑊÄò8…¢°%±Àš}Ob 7}¤Ã…È‹RNR)[FÃÒ½¶CJç£i¤¯ K×¹[sŒþÒp}]…… ù?÷£[íÔ–³M ¸`˜Äð(Vc<ÚU_µ.fâÇêAMÃ\tŠa6“ ‡½ô;å²J©ü¸£ÍÔ­FþõÎI+®(Å¥!s†‡gãõ†l&@°aê®[(g¦mµ]^¯Ú›¶São8µØSIÈ} ½ñ9:뎢> «hÿÿʵ—j>ÓÏßœéˆ1Ÿo¢Õ†ÁDÄÜž´ê–ݦnâ5§ûí²×p §5<ÅZ ëžaƒ¦[·ü&.½y ÏQ¦Fžø“ á:n0LEiÔp—4¤1CÏ<.E†”Ñö?ˆT¨ÙAå¥Á×[-nÕ·u³Mù.GU:îªð*ÿä‹ÞòÃjÄEã2}À5ˆß(˜()­ãôo,#;¼xö•6C˜ uÄ?ÔpÆ_}Lâ,Ù©ÐÉ4Y&ê„„÷–þ%Ȧrß‘`ø| pÂLw\$ ØÍâÝO…î¦{wstwžö \ uF’5È‘U–ˆm(·GúUfš’Mû” Ç¥")Ånžnr¥G®„È/Óî ®ÊÂUéDx«¹Éäw G°ÏQüù@Âj]Å5âdZª’SC)Ó[ð£¨a?1òî©/~­Šy]êºIQdeÔšlhòF¿+!ÐÏ$‘ õSœ,‘í ÞšX§R/Ël7 GTP]Ìý¦z@›µoVd~„™F^b–eócǧ%©ôAvÛ”‚WpÛ·wþPK †>QO¡¯¸’ ~+org/hamcrest/collection/IsMapWithSize.classU[OAþ¦­”n—[ÕBA¹öTT¼ÐR/\’†"M$êR–ôæv‹Áà¿ÁAMŒÏþ(ã™Ù]ØE°}˜™3ç|ßùΜ™ýýçûO°ÔŽd;î)P1„‚û ú1«  <Æ1{êÇœS~¤ÚÒzE73 ‘h®j“;¼\0´º™\åfaG3R±<ƒo¡ú^cèÊéíU£¼¥|«D–P®Zà¥<7t±n}æŽ^g˜°ãª¥’V0õj%™­¯òÚkÝÜY×?i)†`Æ&CØ9¹ÑJ¶_;&L^Ž)½±’Úȧ25éÈ‘žÊíò=ž,ñJ1™­˜Z‘x…{`]/V¸Ù0™s\bEõ:·5›ç¥†¶¶Í0µ|¦^¢øZ*æKGà fƒ—DÝíîtXvK:AÒMmÓQ×Mg•·IÆ;7‚Û¹|N¯Ìµ¯míRõSy[æjµsvvU'ÄG¢Y×<}u©e6¯² àÅy(¼²T®™û´ÃÐuÍéÝùŸ<Æ£ç‘bçM Ë'bOcÙjîfãrµ”õjÃ(h˺|Nl÷uZDP÷ó¡2¯ }$ëu‚íb-¦*:0¯b ?ž©xŽ c—z Dd§/U,`QÅ] 3tØRW1€[ ˆe˜w¹+-b×MC¯,âiðFcÔ=çJÃàß;~-¢îmäŒRC#Kä“á×ĸQeˆ;v€cÖ˜¡Ï‚ ñk‚]´Ú„f€O„XÈsïZyÑ-lr§ôÐ[žáºDRp7 -lÛë=Ù룽Í=è'ªy“ó-Ù¥wâ| G¸vpÂ)²¡:ó â¶+ß îœð QÎtðM¾%¨h{?„ÿ,ݰ¤S-') ’äÔÒG£="¡G›Ð³ä!|‚ý¤âíGH·Sðd xzüj‚ ¢ˆ5¡F¤ùxmP¬j®ï^¤r&ÈfÉóÈbâ‰_P¾"xV^‡MžUͰÍÒ+a-ðILÉqú/PK †>QOyš™˜„ Eorg/hamcrest/collection/IsIterableContainingInAnyOrder$Matching.class¥VksU~—ì6—Ò\ÚØ¤ØÖ ÚĪ’Æ\* I¬ÄÔ¶VÝÀ6…]Ü]¢™ñø ü~0_œ±Ó‰Î8ýÜàŒÅqÔ÷ì. 4G; çœ}¯Ïû¼ïYxñ×Ï¿˜ÇW!¼†«!ø°Ö ¬óåN 'ânÈóe3Dâ-Û">q‹>Q±#âcþ´Ë]î‡ñ ðå¡€GaŒáS.~,â3_Äšl+Ša2ŒåäC9Õ°ÔjjE¯V•¢¥êZš¡¿ –5Ùj ÃBW£L^7Ê©Š\+Ši¥6˜™ÙB:K†ó5Õ´3­*fÑPë܉a¢Ó­MG.}US­,Ã|¬;°³ã» ½Dx‡òª¦l5j{б#ïUIÉëE¹º+*v…«¢¢\ÕÊ RNÓc¥*›¦BšåÎlEF*gæ,ÅàaVtÍ’ ´VÎiËÚѶQRŒk͈iNpGæ£z3ûú«ÏØD3ÜëNÕ¿´§7‘‚3!ÄÁ¨½*kåÔöÞOÇyª¥Ô8±§´ ~ÊÁ0P°äâ“M¹îÜ#1w ©æ:eV”Ãx{üfݶYg #Ý øgf\N&»EuµÃðËÄÒ(¶ø±ƒX:µÔãã|ñŒ· ×tÓÐT¨æZ­nÙ!hb.œu_¨¡r½®h¥åkB1×>yËàox¯W^ØñÞ•« å%÷æuëåî&çÃÀ°ß%ù”´®`¯¬Cm Ô¢êq>‹çO÷‚¼„ŠlnÙ,4{iZvÞ>C©é‡ÄÆÍÿ7't&è7ô{áwƒ¦zÊ~ºLÏtMè Ù\%Ù5zú†žý´%ž%~ïÁÌ3øŸ"H>EðGÒøñ­²’´Îb˜F|)L“$êxã:€}r²òÏçÃŒ}ö¹VIÏ겇m–Nti\DßÒέ§?!p‚>†ï0Nç`D8HñNÐïÃ}ÿq‚†ŽíŠZo@¢?SX ì7m„Nîiá4ÞÄ[”q¦C—ôt7H7o×Í¢.À½Má€? h»eÛÇ6İ 1"E"’£ "2äH‡IzŽàG‚¾|}´.‚¿œq #ÈÔ%dp»­€¬W@ïàÝŽ²^\÷^«€A·€Eú¦=†§sµá <ϰ™<Á¯ã:Fžclk–ŽûH6ÌÍfOpXÿ÷ov¥;›áU3ÖU‚5BµNtÞ!þr„ë.­ÞÐLbœ*¼eφWÛF[sZVYÏ*éY5Û$Áÿ'B–âPYÍ~ùÝÓm,ÛûûˆÓ"Ÿ |ŽBÿPK †>QOãt.vàAorg/hamcrest/collection/IsIterableContainingInRelativeOrder.classµW[WUþI˜$ HC!ÐBMµ¥!b[mµIÑ–‹¢\*AZŠU‡ä†&3é̤¯/¾øàŸðÅ—>èZÚ‹¬ÕåƒOþÿƒOÖ}f†Ë$ö²ºXkΜsöåÛß¾Løëßß8‹oÃÄ•ãC +aøUñø(ˆµ.\ŵ Öƒ¸ĆØ}Ä Ÿ„у+a|ŠÏº `3LraäÁ%l‰MA¶XU ; G+·å†ÊÍym…K½Í—<7äyMãÆtQ1Mn2KB–ôÚ»°£ÜVRK-¦TÓJ3„²jAS¬ŠÁ&®3 ºQHm+¥œÁM+µèØÉL¬Î¦§è¡3£jª5ÅÐo´<¶ÆàŸÖódö¥UãK•Ò&7V•Í"DôœR\S UìÝC¿µ­Æ‹õNsz±Ès–ªk©ysÞ↞Ö5K!×Z¡!xÂ4Po{·¼oÿòóÎØ13œn ô84t; 0³Ê/îØ(*Z!µï9]og†›9C- xé±ë”DÕ•c8ì¥M)(©¦í¨F• ¥µYº,µ©¢kÏC׉Öõ)üzDIº ßxA~÷3xÞ‹}×{û„óöÁ&_ÕFâm„)é]ùÚ4Dsâfš“ñ<Ë›;lz̳¨¼ŸÊ $ú§I…! î¨ú< 2ø(@Òß°—än.*e»5$d$ÜdXÊÌ^hVŠ oD™ÖT ª‡V*𥖸šjªtsIÓtK„Êhªh jXÅ(˜¤•"F<ÃoÉŠ,"_¬N¹h }Jš÷Û­ …V ´S{&jâͳè;-@=å z”©x³ãö=rÝl½’Ê"ç3ªRÐt“ÚøÉà„³zÅÈñ9UŒÁøŒƒIaNÆË(Ê8Ša†µ3[„‹’ ºŒ2nÑŒÞ×±\Õ\L š°ØCÇxŒ^nȨà6utLÕb†k3¦;³¡ï × CÙi–ð¹Œ;Ø¥Ž•ñ¾”qïKøJÆ×ø†!ýŠ(S¤92Æ`}²,2ôÔ—&MŸ¸˜‰MEß~†ÊeCÏqS ƒ-êùÝ‚aÕœ£ˆÌmž·}Q!¶²LÒJ¹Ìµü*¿CÈ&kf-ƒÂhì•ú¦«íĵå¡ý”'´ó:ÔWƒSFgoU”"ƒÄÅ*>J ~m9W|JžØê÷R!þzjøïTL'ê“Þ߬†Üâ8ý\¤_ÅTR¢ûh¡]ŽA¢wª5z?N'›´vÐNÜK$CÇ/´óázöÐ ôÂC‘Wi7àHãNö›c}´îîTõîXÕsœìP%»~ ŸÖè|ë‰_©#ïÿ4‘¼‡ÀÄ=tÞm1€nD   "á¨VAD‘Ä89o˜$Ýä<…×HW‹Ù6¢U`Bþ4É;RgèÖx–Î^Çôw°Š%#ÒC; E‘.ö!ä"ÝöéÕ¶ü0Ñ;RCV¬Š3†s„Î!K¶ñÆ\LßÓ$y“¬¿’V§ø‡f=ë÷é|bqüєß?ò#ŽŽ÷ûÏ\$‡Ðû‡Àw~öÓã¿“ù™Ôü6”¬ ˆ,Z%ö³äúª KÐ1LÞÂ[ê,ÒÈÐ$Z²y u±*5U•y}Û¦²ã1•H@Â;.Ñ“QXÿPü£—1Mk' ϸQκQÎЙ` ˜x€>ºÃb§}¾eCuX bïÒ:Zwò­Ž—ù:/!1•Ý2Þ„|h‡×©ÄûÝTjÜ„Èèpqr¬êæƒÞªà·<æÈŽÏîœä¿‡èÝÛÝ5¶÷;f´îä”­áX_Ä’½.ãˆ}KC‚zxáÿPK †>QOU"ŸÓíï \org/hamcrest/collection/IsIterableContainingInRelativeOrder$MatchSeriesInRelativeOrder.classµVßSUþn’²!Y~4P Hu¥TC ¤X­)Bù¡‘¶A(Õj—ä–nvãî†Òþ'¾úâKûà L'uF}òÁ?É:â¹7!’Ч“áþ:çžó}ç~÷.¿ÿõòg7ð4„>Ì·¢ ¢YÍ'a|Š”‚Ï‚X ¡i±¸Æ VÃøwDsWødD³¦à‹0:°®`#Œ{Ø â¾è¿ â+Ñ?Pð‚‡ Á‚îew¸ã2t¦wõ==Qò 3‘6\oŠ¡5cä-Ý+9œa¬ÁœLÛN>±£²w½Är%N2¾¶85M?†®‚áÊèóÜÍ:FÑ3l‹¡¿~Û m [|ß“‘Rû ,ÅÐaêne…çR/0D*8LÝÊ'V·vyVõSV†–¤aÞ4C<ÚÈåì¬Ãë 9;G;Ò†ÅWJ…-î¬é[&Éì¬n®ëŽ!æÕÅ€·cP½ú%¬ w »ÜÔ=c¯:9î0¨)ËâΡw9ùÞ«ÏŸµM“€SúDÊ%ZŽZÖ‹2Ÿ”®`‹a©±úÿ"•óÏF-:v–»r*Ù=qþÇ4¤£R•²,I“|9`H ê>†îfÑÎC,D|zWrDd®4YuPC†»HUwIÔ¤Ýèð}†hrqò´²§›‰=”±KN–/‚@ô?昢b9oASñ6U\Á›tb*8fOà%äusÖÉ— Üòö³¼zwG3;vÉÌin‘gí'šîi&§û©Ù×ø>­z<§q“‹}"ß¶ŠËèWW±ƒJ£b3*ÁTQ€¥ÂF‘¡Y±U| :Ë7êlnnW²E4Im*\x íÚcÝÕ,ÛÓ¶í’E4KØ#Ehú6Õ†?ƾ‚' ë¯çJÐãÙxN„©þ0ô¥szgþñ•8<ۑ²6Ü…BÑ#ð—Nª*ã9Qª)rZkÇ—qz¢ÃéÓñIHÊŽî®Ð‹KÃ’]÷±g½à®ñ”K<ô"ûóÜXRM]«—Ðm@[µ ¡wéÅ"·r'è¯n3LDÓçôÔðy_P%⚤0Ö¬Hç~s*»×u³Ä¶£>oûÔÿP4ú†÷Ñ'?€‹â¢€äN3×SŽéÂÊžîlÍ~~áß¡•—4÷S?{óÂc‡ðÇF)ãÃwhû -›å‚¿ÄFÑú£Ìû.µƒR{fƒh¥Øí³‹,ˆÒ(†úEÉC«äÀ0ýAŽ*˜ÅH õ!Nãê+^c5¯òJÐ8vD!ý ®+Wð­UÝ ÷ñA•Ïeº@ý1,–R4PVbÄð­e´1|„‹µ2Ú}ø“Ëx>Ú‰ÅE)6ÉxH•ùáè ‘úC‚æ×1q̬Êà&Öñ¡¤#ÿ "{“æòNâ#Ú+ʱQ+ÇyLxÿTÍÿjͬ柬¦þ?¡(¸õ KP*E™&ëǘ¡Vå¹QOiOÈ0org/hamcrest/collection/IsIterableWithSize.class•UÛrA=³`–MŒ˜ ÄK¢ÆÄ5Þ!ñJ”Hˆ©¤ôÁª ®°Š‹.‹·gÂ/ð5VYµÊòÙñ¬òÒ3 añ’f¦ûôé3Ý=›/?>|0ƒÌp\ÃN„ ãd§pZüœÑp)i Ìj˜Ã9±;¯â‚X/ª¸ÄЗ6-Ó™cˆÆrU»”,óEÛ¨9ÉEîË†Š¯0ø/Uï [s¦eäëÖ {™¯UÈÎU‹¼²ÂmSœF¿S6k ‡;ùŠÕJÅ(:fÕJfkYǰxÕtÊó¹‘bÕhm$eˆx‹‘ŽöŒÏ6³ýtéåLj.Õ%±‘%=•»Çód…[¥dÖrŒeð`Á,Yܩ۔.é]®±¢ˆw »Â+ucé.C<ÖŽmHLÅ=¦ð;U*Í ¨;fÅ"+!úxÑ©óJËßÉJ]õe`YjµC³$Q覯¿àðâýEþP–\Åe†i¯;¸xï‹ š›z!9¼'¯× ÔÓ™³mäKk÷¨Ó©¹ÿëˆ7¸çmdmbÙžšzhêñçD±nªx·‰{gíL9ïÎÝ_3÷˜z­P­ÛEcÞ¯lG÷cša ÃÜkövì ùÆÜëoÅYÇVdtŒbžÆGÇ\Õ‘Å‚Šk:rXdHüû+\ƒ*ò:–p]G“ôA꾜Ž=ØË°ë5iÆu¼†ÙƒÙV¨‚c›VÉÃ"^|$÷~«j™×òÆS‡Á‹ß¢·iÉÃP̳ÉÛºúB ›_‘ˆ1¯—ÝTIÛ fÉo„jˆu¹Jõö5Ïkcý×€øÛ&ŠÛèt~ÚZb2ÌÂÊ;ø^Óɇ°°IO?‚¹v‰! K&,;ˆmg‡/Úòoíì¦,ÔÉFÎ7d÷Ó:î›|?C~ê=¶0¼Äà …Ñ¾aõÕϯ»7 ®Î/ÕDH9H‡B9¤`˜ÖQÊ/”%$Ä(ÆH;1·4ŽÓÍ÷S>…~ÐI‘jÊÅlá£-üáÑ^‡òA¦"öØÜ›Ä)ަµq“ E3Zƒ¸™x‡àz«x}ÒqPÊÓ],¤€ß–Z]êÃ’zªA}‚¡*l@Û@h]Â~“Ï´‘‡äíšTÓƒ—©ÞIò¸*Ù`bò3ô·è߬RëPé–ng‡%*i]ò#8*×c¿PK †>QOÜTý¥Ò,org/hamcrest/collection/HasItemInArray.class•V[SÛFþÖ&(2!Ð$M‚I5v@¤÷`—–BHhMhkO:-}Y›Å(•%F’;å?õ¥3 iÚ™NŸû£:=+­å †&ã™Õ^Îù.geÿóïx5Sø ƒ+øPÃG:ÒøX.êXCYGŸÈaý2>ÀgØÃçtŠÙ”Ö†G¶&…#Ú wyØ<>ÃlÕó[Öo7}„–Ú/3djvËåaÇ 7GU–ëõò:…^mzŽ#š¡í¹ na0¥~r,jüPlÙ¼åzí¶zL[¯Z©>ç?qËánËÚ …ÏŽP¤ŠñŠíÚá:ÃõÂhOKÏÆ6½2t¥j»âi§Ý~]Â0äª^“;ϸo˵Ú ìàŒ—ž[ë HI{ÇÝð}~RŽÊÙCVÔòkbTTMçF›P~¥•l;Ú d­œ¢.ì÷h¯ñœðËKßSax3ìp‡Á@&÷ ’A+ȧŒŸ=AÓ·b×"Ž.Ãê(†A™[Qê±4‰4Û £ï€áÆùI ó‘‹aõ®ÄºÇp«pqðÄA?·UxS3#2dÖ*õµ³'룻¹{ûê~õš×ñ›bÛ–ÍaöÀŠ5p \EŽaq¨w|aíݯÀ¦ç†œZßmÉ”ëf0«á‰|¡áKU<0°‹U†iîæ¹dÈ7“¤¼†§öð•¯ñ– ÜÁݳ¬çt,½.rÌ.È*NE•ê„¶cEilÌ j!ÃÂÈÖ­ö2dXyXѹ/ jfõÝ Úáff¸vÞmÓ­ðãcáÔÅϤj¥ÿÞk¡O$ê‚Î5ãì¾Í½C†‡CíYÎaÒøDÌÓ«{Š~RÈÉFQD«išÓ-'ë·0Nsº|šß c4f‹/ÁŠ¥HÿDú»ÒKŒ½À¥_é$·iÌQ\<šÈê }nʼ8·pˆf1ûÜÀY>9›N”ÌÓŒšGéøž2Ú(þ†K¥ß1~ í—„]jiî1 £{X`4Fy¶˜0¾C3êYÅø#a§é™í2Þ?Ååža=‚ºMsm>Nh³ŠVΊ(QtO@6pŸfËX¡Q ʲYÊe^AO„¤^a"…o‡ë~—V÷HÊ­ûª`&rLX$"®‚É2cSäyUQn+Ïz±ô7 2œí1Å5žŒÐc]¡Ï ìĘwð@a>R62æ)&‡¯­2s2£j•R5z—þÃÈçûÿPK †>QOƒx-g-org/hamcrest/collection/IsArrayWithSize.class•TmSQ~® ËŠŠf¢YØ‹"¾P©eB–)…ùǦq¦iÅ×A°e±±_e_’©Éés?ªéÜ»ˆ îší—{ï¹ç<Ï=Ï9gÿù~ `«~<ôcZF'fdÌâ‘„Ç2Ú1'ã æù.éGНO%,Èx†ç†ùyQ _J/éæC$–-…Ä®ºŸ7´Š™XUÍü®f$Ç6¼Kåm¡3«—´·Õý-ÍXW·Šd gËyµ¸¡:?×^sW¯0Œ5ãåËÅ¢–7õr)‘©,†zôN7wsú-ɬÐZgdès~‰¸°ÓœQN]•+µžN.Ò„#Ej2»§ª‰¢Z*$2%S+-wäôBI5«q%œ…r‰åò…v4»¡«ÚÚC,¶is^ÛÚ£Ç&Çâ©>jÞ¬ªE†‡Òz“âÅã«3B‡j€´r+´›êSéù‹Ü ÿ'ƒ³óf½‘XÆ•Þ[Ïf†Y——¸7àemÿÀ<ÀÐs¥šqÁÿüHìòj6ª•uÆoF_±šÅNâÒ•r®\5òÚŠÎG ·¥Ó§x M¨ZŠŠˆ~¦‹¨¥¥lYøAA–$,+Hc…aôŠsÄú%¼Tð wqÚœ¨„Ð!·Ž2tµæ+ᵂ7È*¸‰[ ƒ—$ÏðÔ¥YmŠäLC/,|ôº/(Ç žÍaï§™‰´È`h$@ú“DIãëz™!îXw—Þº¹¬Uò†¾¥m/Òï2¸m?åb:";þI=1LýNðÏÆ ˆ6„éô^Úr|<ÌÂm'ð|¥“=Ü&nBPd/íú,O\£Äî:ú -Òt7褻´oñPÅëœdçÞ¾ñÓ¼Ç >þ2ÐîœË×àò!J9ع| .~w»Áu‡ÞK=YçJ6G ü@ûûø |­tQA§XN"!’sË ­ôˆ€­CÏ’÷ P5H5ø…Û9ø¤ <ˆÆPq‚ÇDj„žÄ¿P8à©AöüD°…£1Ú\=v²k™Ôœ"›•a›Ð#ÿ…Žoµf¨4eh i² X <ûb}ðPK †>QO·eA@Ã-org/hamcrest/collection/IsMapContaining.classWkwE~¶i›Û–†ôB/ QÒMÚˆ«X ô®¦(¢lÒmH7a³ê­^Àû]ñ_ø çX=ÇÃ7Ïñ“¿ÇãQß™l³í&¶|èìÌ;ï<Ïó¾óÎLúÇ?¿üà |ÀNœõ£3¬9D7^â<^ âU\`êE6rAÌBc½9æƒX@Þ‡‹>\ò¡ÀF‹>èì[ô¡äÅåÁ”a°„+^\e–k¬Yöâ5 KÚò„jæ4CBçxјO,¨‹9C+› aOJð§óóºj.š„®N©þé±ä ¹ÊWÔÂ’fCÖôÎpïæT^Ï›ƒQwnwk_FBãPq–ä´Žçumri1«Ój¶@–ðx1§2ª‘gcal4òe }N¼\±PÐrf¾¨'FÊji¨¨›*)Òç“<Õ8Ë¥ ÖÍ‚¤('"Ф{|"mõ’ÄbmYä¦rZÓ Ëbtü¢zEM,™ù¹—’}3š4Ý4h²iØúÊ#º®Cµ\Ö(ôç’}Ü‹”yÕK£PÂn7ÿTŒôÆDLÝNÇ\KÚTs—ÈÊsæÅëT ÑšþL~ç¬VÎù¬6‘/óp+ÁÆ×ëÌÖ1¾¬ÄòÏsÕ¶(ÖWMH詽HÂÁÚÊês*š§‹vEë;g«ùԲبc[«ýZ‡ôfjìˆGAÕçSÙ‹T•ÉŒ‹mðÁ‹Ñ}²fúX)¤¢l´Ô ËC7;ÔVP¥ó»†\ˆµjs[È‚u<$¦fÚ½1¦k ÆÞÕ '몯þŽl^¡bÉS\R^SÑH E·ebVÕkS²©­•ÞæËKYÛ‡‘$›ÞÖ*¬„[Ö=ÑnižÙR : Ø#î½MÕ` ]\2rÚñ<{“Ú×==l¥Œ‡ñ†Œ]xHÆÖ¼‰·¼X‘ñ6Þ¡+YÆ»xOÆuÜ [Óå²—ñ>nxñŒqJÆGÌÏG¯EäªZŽxñ±ŒOð©霄†x„:çe|†Ï%„˜SÎÖ9'ã |I^ýôÒïßäãÉÄïóâ+_cÊ‹od|‹›ô°8„Ê8‚¤Œ~ ÐûR/•tƒ¬-15C5‹dôDÙ>úøË™ÖL Û£}UI'SÒAÉ}|y{}§Ã½‚Kk¼t&µk&§ ’hÔù ½âï¼Èšç5“_'ín5Khâý'nò¬«VmRi¨¥’¦ÏNsÎê*M›ûuÓWï9lµVsšñ|™ æ\ ¶hṡŸõ©Û,ê*ãÔœ„Ãë.´V˜³\²ÿL÷ºr34*´áËKjÒª±/{»wºyÕ—éW£>OYWínW´ÆEJ'¬ƒ~Æ ³#ú ÅGï©ï…L}*nê?B–úzè۪܃¤Äî A‰ßç6™QOÍ`%òg9org/hamcrest/collection/IsIterableContainingInOrder.class­W[wUþ¦I:¹L)¤´J1JÁ¤¡X%±X{ÑJZ”Ôb© ÓdH&“03ÁVÅxÁ»._ôøÂƒ®¥@íZ.Ÿý>ø#\ËË>3“û$Bqe­9sö9ûÛûÛ{Ÿ}&¿ýýó/Æñ•ƒxч,ó8㇠+ìÆKœÅ9öx™É^aÑ‹Õ2Èz!yqÞ‹›åýqÁOy(~ úDÑ.ñÐØŠÎÃ`c™ÇeyÑÈäÓ’&K:aNU%mJuM½¶(iôº=uA¼,ÆË†¬ÄS²n$8øÒrN²&qkZN¦ŠZ.ž MÒø¼…“]œILÐCwRVec‚C_¤9ºÄÁ=UÌloJV¥…raUÒÅU…$ÁT1#*K¢&³¹-ty™|<Üh4ST)cÈE5>§Ï’Æ6OUC$ÓjnN=©e%|hÄ\/Upm0iräp¨™ØÄ„Ñî±®§Åó’²^ÃPD5¯XL4âLKzF“KÌ­Dô C6¤ TMóäêò›|òÊ6‡NÈ”Ž‚¬›NÔÁrlo’J¨P_B“[‰Ùp]¢‹BÂŒ¶z˜ŒÙѽW3•4õ¤ 1sq^,™9§cÇãUGoï~Ö¬J‹EC‘›)ßl}”½ËaŠb,²Òš¿¨cK9iõ9(QA¬˜á\HÎk]žˆ°Ugädû°È…N•UC.HK².Óʤª ‘1!OvÕ©²b¦Ã%j9–Û±ˆ3‹¶äŒœ=5Ϫó¶=N‡ómØwÒÚRT┹»#(Ôd¡k£Ï!¬–…Eó´lägÖJŠœ‘ Ö®jÊCÎÊÕ0äÚÁÿ‡Hk_oÇk­]nî®n-[­†;Ÿï3ÎÎ6*±¤°DMËbN-êÔî̺XÖ2Ò¬Ì:t¸C'c0Àš€!ìåpüÛ!ÃZð^§þ'à \ð&Þð6Þð.®ÐQ¹<™*R˜ÇU×ðn…C×Á0½œð>>àñ¡€ëøHÀqœ¢ÞTK椦‰ë,£<>ð >eÆ?ãñ¹€/ð%‡ñ-paÒ­×^1äpàÎT05!Œ" ]Ö®G[jºs{·®[` MµSÊù¼¨/Hk†iƒ]ߪ9ÙYÙߨËyûC¿Cåš÷¬ÏR`ô¼”å°»{´O,•$5»hZ«KÅ£ù<5Þù¶6‹õVí»”T¿@:ZÝß®0ÌŠ23H¸ôÙ(ê3—Ê¢Rë‹ûïÓ–oÚþšdª Oú=¬DÉ(ªåa§è·Â…ê ¦hG¸Œ¬RTQ‰/Ø=Þ Ï?o¥ásˆ¶¿Vš¬ÒA ¿•2ë 4ÞO³.„á¥w:&ô¾$«4vÑè¹n$öº~ ™ ÃôÜF#°nÂð¡ûi6`íÆ<˜oz¤a-Z] W-BÛî4ë¦1± ×òÈÔ4nÁ½Û€‡¾¸Ý!÷º9|ƒAöÆ“È3òÜ„÷[x\7¾ûç÷Ñ›ðÝ u·éè  µ =ô?)‚‘d{p„\cN? ÉŽ‘Ѫû Äñ0¹ÈÞár®‡öŒ“†Ë¤Äœ¶4W5£UÍ#¤ií?Jû#i/\¡ŸÇã<Ž ýIp÷mLâ z2î‚b‘ Å‚þ º‚=Ám, èõàt-~sã>â5\þPÕÿ&Èk+ü‚É#d{x:î“„Â NÓ [óŽÜÆöÛØñ}¿Û”‹&¶¥ïÅ$ž¢1Ò ™¢Ñ¢2[o–FYyÚNé Âdû{7\&K}·°ÓÁØ¥:c½xs ƘäÙª±&”Mãí°jõ6úS±l+PW)²×êt 4zèw²¥Nçñ\u­V§Ï·QO畟„€ 6org/hamcrest/collection/IsArrayContainingInOrder.classV[SÛFþÖd 9€‰¹4ÐBÚcœ@nÅ.-åÒ’H …B[Ù ð-²è ï}éßèK_úÐÌ$!)3™>ô©ÿ£ÿ¡OMÏJ²l † 3»«ÝsÎ÷³ßü÷¼0 ]D/–¬ˆðáaQ<âÃ×"V±Æ÷¾áÃz!|Âf;cKÀ,‹ØÆwíø?ˆä# Èñù¡€q>çùP 0„J²žßS´COv_þQNêj15[)•¼®VÊi†ðªº[–õCìo{e²m7µ'—òšRÓSKfÌ̵ùô4ý1t¨º¢É¹¢b1ÜqºäíX©ÅÚ¢e<[)ë²ZVË»‹å­ hiê]ü2†¶ íêÓ Ýñ¦<²jMO®3f+ʱ#«–•åÃRNÑÖx8†h¶’—‹ë²¦òok3 ï©T¶‰3Íhš|ä•E§ž—ßqT­ãÜ»0@=Ýqʹ×tË]–sô Ø“ b_ÂH(b‘m1øÆ†h±- $¡ zoÝŠÄxÙT%<…Fb—Pãþã êíŸnaBBc gÕŠá’óâéñÅù…tºØ‘æÛäšiqÍû¥Ÿú‡ X•¢¹{!C_+=нÉÕªR.˜`;ÍÊXÕ5J2}ÁúÕ¹eël˜ý®"k •wþé¡\¤L>ó.™ðj«Çæ—  ÓO•^úA䣙ôêÛÆ×ú&ÑØßï#LkÒ­‡iGC€V@Oâ,qßfòþ$’/|F'~\¥1Jv@ŒÆtRŒP>ä~¦7>Â5ÀXõa„®;ÎâöÙ¨Í$A+’ŽÅã ÍÜZJ±­R¶WÆ4}õÂ÷–$pYÀ§42Jë_’ðgFÆf%gŒü>·ò›#Wž{(A×h‘nNÖ iÖ'„Y²GSÅøÎ<ÍÍñè™PS´âÏÓÌ-Ã'ˆnÒCévl7„)܈€ïŒº¾ìœ!-.ZRX°´(&’â2 1öÌ…ÐÕ„ Z×ݱC—N1“x`Åœ·^T؈ù=îçÔå í¶tä·EUä󒙯ÿPK †>QOœ¤£a]b9org/hamcrest/collection/IsArrayContainingInAnyOrder.classV]WWÝ& ÁP‚ñ£F­5$H¬_Xi)bK R%Å"ÚvHF“8™XiûØ—þ _úÒ‡ºVE,k¹úØÕÿÑÿЧÚson&™8‰Kx˜{çÞ3{ïsξ7üýß/\À!Äp[Áb=È1ˆ/ùc)„;øŠ¯-óÇÝV¸Àý~|oø–Zˆ"Wø˜WP !‚Û!èxÐ5¬+ç;l(Ød0lÝÒVKú¼fÖu‹áJ®l­¥×µ­‚¥Wít¡\*éÛ(›é¹êœ ž)›¶f˜†¹6gN›Û VQ·2 ÁEcÍÔ욥3\Ý'L6?›™"¬ÀV]P•!šÛÐiéšm”Ò3Å\ôÜȺ™ebÙ³˜C÷e‰Óžbˆ%¼‘G—|3å"¥13LýfmkU·ò\2C$W.h¥%Í2ø»\ôÙë)½Ô%éiËÒ¶;.êÆÜ®4p'÷Ø(á„wzo¨O>\/~uQ{ —¶I_b¥UÒ̵ôÂê!eFïRÞdŸ-†!mÚ\!H%ÁG-êÕ‚e¬êóFU04ðÏyá»e^ŸVœþ mIŒ– †Ã?b8!„t‡ 5$æË Ç݃û‹­Ü1­SCÒ” WÕ3£ÞË *¯ì¼sF:|O"½wd?)£kzÅÒ š­neg'_¯ôTuÃ[cvEŒw:E¯w±/·v×–ò4n'a/ûy#¨ƒ-òrF•oõ ·m¼ñþ /ÚZas^«ˆC® D—n§¾ð“Ó=ÅtâmΰÇüxNz‹pƒñˉÛv¡ÅrÍ*è× ~mÅ»ÜNãœNËíši[ú’Q5¨ Ó¦Y¶5.±yá M÷fTœ]6—÷÷ÿ>©â0ލxǘ*ʨ¨xˆœ 7Ø CÏXœ&÷TUبQ·â†×Ìíx¹Žòß©ø3\ØÇÝLWÓ-"Š[FÁcÛøž¼ â®çœW‘ÂÃÑnåg8à6™2Á{<ØÆBUíÓªõˆÓÞ‡â5{+òW€ÐÚ/n†C,FVÐ*Ý,ÖÉ´šmѶ¨™·\itµý$¸owÉš×ÛÍ;©±ë×±¶^Z:uqöaM£Ã©è|ä?I¯“Óé6éÕŠEòÜ ý;ú-­ê§x;FïäBç=Ž ÍÉ¡4?E+|4¢Éç`É=ô,§ž£÷|ÉÔ3øŸÒN/Þ£g„â(Šž#ÄtÃÄvZ¬ˆ¯ñ>ÎbVgK¸öF½¸£$I32žÔqF­&‡/µ‹¾(¿:ì} ʥɨ:Œ*ÎbÜŨ:Œ|/í0ž£ù]2nv/áãØÍ„Cê$Aœ´ñz°C–´|v)º) ì»\¢ÙeLГ Xƒ_DÇR‘`$é'þPýˆ„_à@î4Åäg¨ ªýhKbŽ ®ŒzT!,&eüL×È$!pÒk´Ã÷IÊx¿µÕxJ`׿ ƒ, ×ÊUÅÿêI}DŽ¢kJâÏÒÈ#ƒ{\&Ol'È· €¯ÄÛ¦EŸH‚¿hì£qb‘åçÊ%çÇ^Nõ^ö ûŽ=Á‘±aßùI*æßÅ;/0LUüÉÇ~yõ—“’r|BN”ÊlPN›DT"›ÔPÓiöQáž5Auù§Éó²ÊͨëNTÚ‰ú”¢>£·ô¼¢#ãWU0GOF‰þKfnÍñóÁi²æ éŒëÒš¡dêODÉ—#OÛªx°¥Š!i„k…O˜)ä$æ¬<`A¹ƒCí§ë «1íAé%Ÿ<›b\i|!qnÿPK †>QO¬]áÈÛÇ2org/hamcrest/collection/IsCollectionWithSize.class•TYSAþ&„,Ù,"¡Ás+"$à¡*UABaéƒUKX’¥–D7<~¾j•å³?ʲg7ä ³(û23Ý=ß×ýM÷þþóý'€%<ÀÜæe(XA†*ã.%Ü“À’ŒûXæ»òõ‘„Ç ¬Q5ì5†X¢P³ÊjE;,YzÝV75»TÑ­Lr‡Á¿^ÛÓ£ª¿lîêÖ¶¶k’%R¨•4sG³ ~nývŨ3,tã•j¦©—l£VUóõõÖá•aWŠÆg=êÓÚ¤eˆŠÓqœŸÞñ.]Š0»Ë¬Üœ';_8ÐŽ4ÕÔªe5_µõ2qóð`Ñ(W5»a¡*–Ìã.rh_wîîhfCßÚgH'ÜØ†m˜j;ÉLRA¥•ì†fr „·¦„ŽlºY좘®é“J­Î£õj¯§ú˜Í­t`ní_fír²‰ƒ/ªƒWKä=Óò×rXžaÓ#CËÿ¤Mô¢%{M {bânÖ ·[þ‡Ü£]åb­a•ô ƒHL4 ü"u”oLü9ã®Já3·(ÄŠ‚ÛÈHÈ*Xý;æ.3x`HÂOñLÁ n0ŒŠ*S0‰)†É $aXõèÉ=жeTË ŸÈ¾D’Ú`¤G=êû£³!òvFì\Ý–NçÞ;#*é|Ý®1¤„=!ÌšÔÐï›ý`\(ø¦Ó[øiÈ©t„E|'èûB§> s›ã #H§ÚEÝHDpÅA’1Š«„íòµ|ãä‹ÑÞ‡ b!Í›œoÈîD§¿ÁÏpŠþãg€| »b¾i\ó䛯õ_œr¦÷oò団 ð:ué<ÝŒC§¸ANQpHÚ–qZ]è›ô­&ô2Eð˜ÐUqŠS°6¸Ú¢öžmAÝ~Aª$Èãfésj ¦Ò¿ Eè|–ƒ]Yº¢D»,c¬ žDÊYÓPK †>QOu"ô9· Eorg/hamcrest/collection/IsIterableContainingInOrder$MatchSeries.class¥VÛSWþNlHVÔxÁzkŠTC@cж U$6 ¢ Åbo.É!¬n6éîFÁ^ìS_ûÜÎô¥}õÅ™"CiûÜ¿©Óö;»1éLÌœËïúýngóçß¿þ`ßDqW»q×Ô2à ®k˜àF¸©ˆï+b>‚¹>À¼ZnEIþ0‚Ź­á#EüXÃ'1Äñ©b~¦áNûp5Cí‹j)DPT»TbK–5˜‘²á–¥ã ìš¾kÜ7Ò5Ï´ÒÓ¦ë tçÍ’mx5G œjaMWœRzÙ(ézé™ÀÎØÉ¹ìè8{ʦë[¿,Ý‚cV=³b lVÛ£JÌ–+žo)·" r]c¦mzã'“­ð^nh`^ c²R$êÓ¦-¯×ʋҙ3-RâÓ•‚aÍŽ©îub‡·l21ßw^:¦äMÏÙ¶t&-ÃuÕõb³ÃBŲdAùKçÜœ'ei²b{Û¥œ=ë¥Ó¿Å"Üßì|µú@öUùyØ‘÷ŒÂ½£êöË|WÃ=k­ ünŸ^-è¦e_Ý®eØ¥ôìâ]¸͔šž,«t¿ÀÓk›ä¦D£¦›e\î²,’—T¤nÓ ¾?}m ÓÔáíbáh°»‹~‹r¦Þ•ƒÉöæÚÄÈûÚK×}¨H(”ËŽ¼¨>Þ.Ñ|¥ædÖTåOlSåSJYÇ X:ÞÄqÇÐÏ¢ê(ƒsÑ·i:Çž)ÖE§T+KÛ›Z)ÈúÐ å—+5«˜p«²`.­& /aIÃõ[&ä ©ž,&¤%•žreëx TÙRvÅK5(Ž$ØL:>‡£Ãe'pŽ“bWªÜ‰†K­î jÊV^ZKA-22ÀßÛ.¡:ÞÁ9—1%л\Þs¨x©fZEÕ ¾;«x¨–/B#¼~‰¯”ê× L¼âH±iZë&ÐÓÌ.' oðBïœcÿÌ¡æÞIÞ $yàí 5ÂÜO¤Ö!Rá5„RCkn Cà{ìx†Î…x×:´ßSƒkˆ<¡hR\Bã:ÈÛº1„œD/NÑíiºÉÂðM“›üSM¨eýÜ©LCªRoñ‡ø‡&Æ5œÑp–´ °·)Á®‡ñwe%•ú‘ t ðú½ÜÂñèb!0&=„[áÇ©Áuìx܈$Î8ƒ]´ÞG»ý8ï£p¥èS¤Ðëé&^¦Á­cCô×AŽ‘tã\Èo‹ûY…­ô'÷Aöø Y±7°3„?°k»}Ì­x/ï8½OðÿÝE¯¯ã=ÝDQ(ëØ†‰k¢‘¸µzýÓ-Žã3CÌמ~@,5Ä„íeÞÈï¸ÃÙ‚æ º¸Na7²8„+ ü=Öö*»áÚ–H7²˜®gq7;è]"z`S*ÓmH]¢”Bø Ç4L6ÒRïw=”ë¡dT:ŸaßÂ:öÇ{Ÿâ€ ë)^‹äù)ùy¾58¤Ä6p8Œ'~bT0=¾YNÊ Âº¹%€L#€Œ[ø'ÊÖ22>ìçR£” g)œ®0QjÏqh€(e Ä´EÿPK †>QOĹÝ1ý&+org/hamcrest/collection/ArrayMatching.class¥WßSUþ6?ذM  bÁFkK?‚¥Ò–DZ„`©Ú‚ EÑKØ&K7»t³éÈ{_úîø8Îhô©(3ñÕÿÃÿÁ'ë¹ËfÉ.»´Ù›½÷Üï|ç|çž»üùÏ﯌ᩄn,ˆX”Â= ÷ñ@BK–ñ)ÿµ"bUÄgZ±ÃC 1¬óùÏùã øRÄWÚÁbØQ”Љ…3Ø‚,⑈’€–œ¢)椀pj`E@dZß’´M^¨U6ec™mª4ÓQЋL]a†ÂßíɈYVªú ºQÊ”Y¥hÈU3SÔUU.šŠ®e¦ ƒíÎ3³XV´RVÀ¹2«Î™reN³VŒ¤Ü{-[ÙÈøO‚¬ÊY3í‰ Ë„›ñîNu¯ïŽÜðòrv’öµ.)%™5ƒLïå–' Ûì)˨L+e7·)°ì¤?iÁŸzn݆O§ŽF+ÚÑòüÙEš¦€ë$i± —ÆU˜Ö5“Qh%’EÛ]4¶x^3©õSJWHYû•ª¢;`¿€>ÿÊ_Þ¢u?—÷ èØm¡`ö<¨i¦R‘W”ªBU0¥iºÉxr¦ ΖØ#™j†¥jÖ*Ok©f*jfÚ©ëà$üí\ó]ȧ]HÅAk’¡AÊïÉ+3ÊŦÜuúl¢ÆÀAÜ’V›°i󔦀¤VSU.Ϫb–ó_ï¨JQ1ù±>,¹ö†´”*g2â™jšñTÊ ˜ƒÍæâœÀeÓDTóOjL=Œò²¿PGBp‰Ä*Îΰ¥ÊÙ%“ϳ«Š˜Qp÷X­N™DiI¯EyV±®×-0¡âx=®Ýw\×·VDlÇñýq\DR„G3q á‰|ìý3ű «siŒm˜slýº"'¢ñF§%™¶›ÔëszӜ̇˜±Ç±ÓùpN su˜q+žvÒ)5*]¸t ¼‚Òê–’:cÐLŸ=?†Lì­räw—õº—C®A «:èþ”З<žùaæ|Fa%M¯Ru.þmÛ4øGMº0r­15³`w“¾:bõV"` øš;r :¶òf[[ºü®õ‡x‡>ĺÁÿI$*==ߢ· ¤3¢é—~¥!\ g‹5y½ôŒ oÓØÊËž¬øæ<ÂÖZë>Bkþ…^ Z‰Ã»4^rͼGãeËí ºß†ž±yÅÒ{ˆì!êEn@Ž!…2ŸI;ȃxNÇs˜ö{‘[ö z‘g]È#”!7òFä÷qÕÞ7fÅCMÀæ¿H ãöûˆ­í£•§GJwœy‰¸×áFƒÃN‚ÿÀåÏŒ;¯[¡Üð å¬O(5W(71á å&²rÎÊsj!^Îy½<û_^ê²lÐ\ˆ—'yi+ ºüHÖÊ7”Òo-_‰K[œ(ýŸÄ-Úɵ6ê¬Ý¦5Á¨Qú ÖÎ;Ÿîèðì{`·ŽvÛ ø#rB-Ùvò-4Žî£sí%Þ(¤ç‡^M†Ç#]‘¾ïpa¨+ru":Ø¥šÿ ]!¬>‹?¼þk3ˆX Dø‘Òú‚XüDuþ‚üýl1JË^b‘§ÓÀ­Fm1øi˜uthõ±c•u¬xªîÐ[7B¯éϵ¨ˆ9wé)PlS8ë2+X¿æÿPK †>QO\½Ó¹š -org/hamcrest/collection/IsEmptyIterable.class•U]sÚF= Ø€C";Øq“–¤ÁƤi›&P׎ƒ[§ØNãL’Éddm¥Bb$Ñ©ÿJÿ@_ò¾$u;ÓésT§w—„ÃŒvWw÷ž{î=WË¿ÿýù7€Û¨+8»)Ìà^ %”ø&Õ¾Ma ë ÜçóF(¸Ë‡J›|þŽßDZÅ0]6mÓ_eˆæ–öbNÓ`HWMÛØé´ö ·®ï[dѪNC·öt×äïÒóLa©ê¸‡Å#½Õp Ï/6Ë2¾éØÅ-¯ÒjûÇ[¾árCfç¸ÝÃ*œ¤\¯”V i¦¥û#ëé†uÌ0Ÿ«¾ÒÖ‹–nû—ž1$LùÆ07î Ãâs9ß TóõÆOÛz[2MÖÌC[÷;.­¯Œ *=yèLÓð®¹ol›žàÛc{k,Ûá<¾m^„’‡çÁ0Û’X}žÂD_†;!4Ãc*½êŽÈ6ôpªd4cecXÈj”m! Kü–+÷ w÷_‘ö¥Õ åÉÉp½ÒCqw¨AƒéoXºç•&R™ïØÏhÖMÇm ÒÙæmÊpa„·ó)[¯;_NÈhüù÷ȳŸf17Š.ÏÅ1¼Iç: ÆkÀ›÷l(5§CåÛ4ÅGwê .pW ©xˆâ¨ªØÆ{NÏ =/âØUñ?RÕu;+Íö¾bQc¸~ÆûBE„©òUq «XÄ —Ã’í]!¾CË u¥Àêø¦ÕÅ"{©aÈÊ?Ò½ã_\°Të…I Qßêí¶a7÷t«cTM\‚‚Õ|×´Kïi\„a÷ƒÒ ]D c¢†xã*øÿ%À¸ª4ÎÒÛ:ÍŒæ©åw`¿Ó"Š9§…QÁEÕîd0OóÂåÍŒ‹ƒˆ€sè-Bó\þ†D~E<öbÑ×dÐÏ ôL÷¼Dç«Ë¸Bû C{—ú{ÒÞG"zD[cÈÒ2BÙ1Þ&’D‹6£4§W´˜6¥M—øž ²S®F f‡l÷xŸCŸ|õ)>£Ó6é>~гéR¸N«–dYëdá§•¼–8A22}IBT@éGW°L1Y ÒŠŒ™ä_‰L2+¼Hο <}‡Ô¡Ä ºW%¯äU@Qz­I¹c@}sJíB@ínâÖÚÜò¹ˆËQoŸ_§‚!³Ý$^Ae9ÿfVÞâ\X')#$ó#ÌE|)1+²‚Iùé×!ÉȤ,YDþ wÄüõÿPK †>QOf‰ÞÕõ 4org/hamcrest/collection/ArrayAsIterableMatcher.classVmSU~nò²l¦´PMCÁ° ,µP•DyQ4´Ú¤­Jûa Û°5o³»8ò#üâïð‹3‚¶?û£Ͻ{³IÊ63÷žÜsîsžsÎsþù÷Õ_îâ;)|”À[XçK‘/%cCÁ'ø”/›q|ÇVÛ£ØÁnŸóý‹ ÞãË—1|C™aÜrMÛ8l˜û†[;6m†\¹m×õc£Y³MÇÕ«§³b<7·-£Þj;V«.#‹ ‰ŠUoî‰m2l_òZ©üÂøÑÐF«®ïÉÜ¥|u§¸A ±¦é8FS}×&rÇ›ŠÃöü'®ÕзچYs­v‹bV¥A~]6K~æhÉjYîCåÒfp‘÷âc†ÈVûˆª/[-óþIóд«¼t^g»f4¶Å?ËÈ{lQ+ƒLj~}Ó¶ÓMgopzEÞ–8â.!×®ˆUaøù²í:Ùÿ3“àF&= 8œCã” Îô>8|AØÅÅ漢$í&Ãd€›œ”„ä–ã;N™NͶÍ}˺ø+AøƒÄ·ÅÕŽ˜>§8Ù”}†o¾ÄpK«t)VÛ 7sÃGús빫ÖðvÀ Þ§õÒÎúEÏF°Fº=ZR*í»fîZ\3Áº[æà*f±¯â:n¨˜Ä”Šk˜Žá¾Šø:†oT<ÄšŠ VØC¨!ãY U@ìYFÅ|«¢€% xaùjòg˜VC8ÇÛ4ÑÓµÀ¡G5œ²å¸ óÊì{ <Œº²p¹÷Å¿=éSÚ×ÕÊ0ý¦qRÛNÇly¬žç.¾«+žt[EÅ ‘´ÌZ5¢¬ËY‡ÜÆ-ú‘JÑ^S\ AÒ§ÒtJZ {Š«Ã?ŸA”ìYÜ$û:ù…öÒþÓ giù3„µ¥3D~¸ïҚƭÓy B#œIBÉЩæÝ'&Y@Xnæ°8—0æÈÎÐîÅßöãÓ~ü Å{LçéŒ)y>¥#©ÚïçÿÄÈ9¢¿úü¢â~FðI{q>9,’nÀwÛ÷i~oòdÑ; lÎ4ÙÍX8G¬×E@̓¿šŒ_VÒO›”i¹µ ¢{’>ä²îà}Z95Ggó©x*‘RˆGè%FGR_"}ŽãIÕ˜`¡Ñðó”£Ð׬Ï,Kÿé²!ª`˜õøLlÒU™}W–¯hù¿1Fµ÷²xíè‚"ÑçN<̬IÌ9Ä„À<ÇÄëì‡L\€LȶurˆýÃÿPK †>QOT³×î, "org/hamcrest/collection/IsIn.class”ërÛTÇÿlj/’å¦q7©›ÔmiqísI 4i MZ¸ mŒC¾Èα£Ž-y$™¡Ãôú.|€:ÃðP {$Y¶Ù\ôAç¶»¿ýïéÏ¿~ÿÀ8’1‹ îÉØÄ'i|Š­î§±¤ð0…ÏÄês™Œv“øBŒ_ŠWU¼‰×^û rÓètxÓÖ !W}®~§Vú¶Ö©lûûë ÒÖÖU»or†|¤ÑF­¶¾I–‰ M×ìM†Åbt°[u†émã˜"ÍT5ïõ» nÖÔF‡v²U£©vꪩ‰µ·9mŸhÃrÕ0Û•µÛ4¹eW†yWv­]‘d.èü¢7p}¢ç óåè„Ýc‘u®xäZtT½]Ùo<'ç Å;¼Ëu›’œ‹0!G„!Y£ðHvU»yÂÉa¾ó3D5"bÉÇÜjšZƒ×Èb©”¶ãœõüB'ýV‹› —ÆÛQz•ae\Ç‚¾œÔM‘Ê©Úü˜ao£v÷l¾›‹xÐÅ'}ÝÖº¼®YµqK× [ΖQÒ0 rŠi$¤Ù¨q*ÖÆ$îôjb†IÍÚ×ù~‹áâH€µÅéªfÛ"›¸áZ܉¦ãßW-bÈFßlò‡š¸È’¸¯+"Š‚¾RÅ\<ÁA5_ã&¥EÈ‚Ñ*$QWpˆoè2ý@•¹] ÉKOñL¡ŸÈ ÃåIŸ… \†«bVPðVÆåË0U7îü°Ý[¦©¾ f%T«ªY6Ãè¾ =„i¾ueè3kº­j¢ÿ ãn3Líõ¸~\ãßÛÃ+í6Æ65½îiðS˜q½ëj§Ïݤ[!þãήÍMñ'š„ÆUú%ÏÒï>{ÑV/Ð*†yÈ4§^Ð|v4Æh”K¿•Ê¿"ö3­¦°Hïs4LÓL .Ñ*çZ#Ë€3s£/Ζý³yŸ|Åá<.÷¸—ûSèYBgIÈÜ:ã£3$òZñÑâìº~‹f7p“ÞýØC§K¿ V>Åt ?úà̆À´Lãm= âØ¥= Ã-”¼ðâŽ_¾œŸ"Ãa9›Ì¦²’ÀBŽã0¬s‰Ê»LÈ+#ؼͣŒÛlÞÃJx+T#Ý¢q/½Fú§žŠØuŽ;ÃH¸¸Ó'a%·dïâ=Ïû}D_¸×¹YxIo <¥îe°{#0é Lò`ŒÐ°¡á\8ì^@ƒh}PƒhxPÃ3VÇh˜ þ hÃ$6À¼Â‡‘·ÃêÿSƒL³5…ŽWâ×IQÿ±`/ÿ,\ª5gíî~Œ»Î¸þ7PK †>QOôÞ ¥<org/hamcrest/collection/IsIterableContainingInAnyOrder.class¥VëSWÿÝ<Ø$,ˆAÀ ÔX% ú((D,ii¶B±Hm»$k²6¸»¨ôá£Ú‡}~¶ûÅ/~°3­Hqú±Ó?£3þ δöÜÝÍ‹l¢ÅÉÌÞÝsÏùßyÜsóÛ¿??pß° ³~tऀ·pc®!œjÄ<ÞæÓ\ö¼ëÃ{°àCʇ´2ÿ:ãC&€,”aœp.€VÌÃb#Tä,ñó4¾ê ߤd¤²Šša'TUÖFs’®Ë:í,òY£×öäYé‚_6”\|4ŸËÉ)CÉ«C þi%£JƲ&3tTJ$óZ&ž•Sš¬ñI 3Ñ;334L?††„¢*Æ0C¨ÛÙKd–Á3šO“‹MIE•§–dmFZÈ‘$˜Ì§¤Ü¬¤)üÛzŒ¬B¬UºN!ãú„!k\y4¯P3ꈺr\KËÚ¸ve©}dƒ˜ 3^†ç “%ž‚&«ú´tFέ0쳑r’š‰\UâŒÉzJS–¬4ž¢Ä(†¼È“V²<¾p–(3/ߣ¬mq‚eh]Tt“A&Cgm…2[kdƒiÛ]èN‚sS2¸Çjz‰˜Ýñ§uS(SÓ´!¥ÎMJKfÙé8 X.ÏÉyýÄÒ¦`AžÉ3tu×Q¦J7¦ËSLY„õ]†x÷¼cÇ EœÅt¸yy'‹'º£†=±sÞ±{‘r4XÝ?Ã5ÙfδµÓÉ=…N,«†²(Ï*ºB;#ªš7$žὁŸ:ª’–ÑÉ*FLªèÕLK«ƒ2CKÙ!M*:yæÍöë[·ó˜ƒ+`BÀ†©ZI#½ 妯ְ¬èå 64Ž6Â8Þ]í¾þ¡9åL¹ÒˆÏfÞcŠ”Qó:á'£˜Î/k)y\áS}WýñÐÇ‘D<‹‹"žÁ†£O9f8Ö%+xŸæŠˆð¡ˆpYÄ\q ÓVl ðEÅȆÍáp]Ä |ÂÀæ\=az9-âS|F#+¬¨aI] ç¹+Ÿ‹¸‰/D¼ˆ×©ÍKUÑ4i…·®€/E|…¯©AE|ƒ« ý ‹G³‹Uu¾Eô —aï“U¬aÒ4!Œ< ›+O]Ý|J¨qêÏVŸRÄmïŽ$«ýQkYIŸ’/Yžø­©š[ ú•³B°ïe†6‡7‡¿¢SÊô¬œ¦Áåxmsµ­µˆ‚´´$«é“G_9´¡ñÛ1Rï¶­­äq°þŸ’ëz^[Öµ%¨AÒ-{œgtÕÐ ­kHM¦V/Éч8½‘×"ÿž'mf¾í'aÄIÿŠÇ%–eÑ2Z´ KKÿé&é&¸ÿA›€AC]œ|‚`˜žs}“Ââ»4.(îíüPK †>QOorg/hamcrest/beans/PK †>QOxUQ˜XC-org/hamcrest/beans/HasPropertyWithValue.class¥WùW×þFÈŒ/Š;6vLˆ:i›`l°MËV#CŒ8ƒ4ˆ±%23ºkÚ¦­»¯I÷%mº¤­˜Í4éÞ´é¾ÿÜ AOÚûÞŒF‹GN8‡yÛ}÷~w}W¯¾vóe÷à_ïfË÷°Ù{%<‰÷±åûE|@BO±ð¡z|WÙç#|” àã>OŠø”„F\ àÓlüLŸeãçØÍϳÏÓ"ž‘°_ñE ­¸"âKLÆ—ø “ñU _Ã×ëñ |“}ž­Ç·ðmöyNÄwø.£ýžˆï ‡²YÕèO+¦©švN ÅO_<3xbàâÈ`üôØ€ˆçø',5'àŽaÝHuÏ)™„¡šVw¿žMj–¦g³ã^uZ*«Xó†*àÁj´±áKÊ‚Ò=£*Y³{ÜÐsªa-¨fÂÐr–nôÚÇi%›ê6ÔÙ´š°ºGTkNOöö‘9çÜU2$)XD=aZ6Åh”ô¼:¢X‰9ÕÐXŠÆÙ'º°çA¬ˆåØÌ%’Ï7dTÓTRêIÝÈ(–€Ú˜–Õ¬>‘Э¼%vL’5ûõ$áÞ1¬eÕÑùÌŒjÄ•™4×DO(éIÅÐØÚÙô[s9¦£”ŸmºÓŠ™·Þ”fÍM2{¹¶Å|sy^ÑÍ2‰Åã\ãfoó„ÙYt³J3r¦÷ý›¶Ò­tìþñ­ôfÑáæ„2«¦t‡nõt)Ë|TRèövL“;˜ÑJƒÎ¹' ÑL.@@Ke.jȺZC4T&%ùÆŒ×)ûBUˆI·údaƒ®æ“dŒ'·¦f…Ôeæ¹ 8°A“±',%qyDÉñèñª è\AòFõ‚…ã®Ç(xóg<ˆñл’Œ|g«Å*—'ïºÑ”ULkñ”J…VK˜SºqY1ôùl’çw™¨T¯½/ðÛJ)ÛάuFU’6prgh#ÃLW§x}5½~®P…¶é• õp,~ÔCõ-Õ,ï§4î*B|ÂW,ÊzŽùÜÓø‹jKœ·´t÷°fò:¡Yª¡Qì);rNX•0TzcöVq¸ìzìVõYg)žä"~(âG"® xäu‘£¬nÆ@,‘v^Ñš+cýÞ2K™°7ÕðMIeu“”±•&ôy#¡žÔس×ìõÄE™ z…[ó%­µ½Ílo•Ã)öYñfÜ+ãa\”qzdô²ege¼÷ˆ¸.ã¼(ã<.—Ë˸%ËX¡f¤(TB"Ve¬á¦ŒuüX€¯“D¾„—"~"ã§øUŒr?0¯¥“¬“iÕ ˆÉø9~AWiòKüJƯñŠŒßà,õ ›|éaÊþv îоIZÆú~ÒñBTÆ«øˆßËøþH&ãOø³Œ¿à¯k2þ†¿ËøþYbH[sŠ‹6“î+˜p׿¢€Ò¦J¥¢§´j©¢êXš.ÔQyç€Ý^±MôÞâI…•ý{CUkm•¸vÖé={<’ð¼×kçÑx“Âm©ðy´OÔì©ôrSÂ)¹œšMÆÕÇ-ïÖ°£ZGToßvžíèÆÏvéõÛìëE›c³ÜD%w&Ôô¬M2³! ž”³nO©–Wì zUÇJ~©Ò=ÕÚ: èò4f…Á¼kéùÌÙòô¿”Õ-ÛÑľ¥â³N”b&OÖWfÌ*?@<´¥º¾ÍÌ¥5Šv/uÎ{ÁÜYHº†¡,šÌ(¦m¡ÊÁ^üÔúMí •?-CT‡Ó%¹»74T~£èùµ;uAÓçMÎ`š·¿ùRÓ:p~WGøÑ x#­|x‚ì5¡y½%îþQZ÷òýzÚ£bI{}´J‡ë‘Π°ßuZÔà}%"ÆÀ8ŽÓ¬Õ&Ä <ð$ðåC?Íù-F5àP݇AÚ³aœäÂO9¯Òè§±)¼‚špd þpç*¶-¡6ܵ±¥Ûè{†ˆ'ˆa»p–ö&9¬°ÍÂ…ÕäÂjr`±Ó½¦`“ °©àiº9„·8Ÿ†È•Ž’uVxuˑԳñá¼Ñÿäs54óO¬¢aÛŸ/Ã=M˜Ïc;. ¡‹ÖsF]ÜQ¼Ãw#-1gÔE˨Æ\¯ŽÓìmd£}œvu8ܱ†>0LkØåC0˜_×®á6Zïæë©‚…·s43؇:ämÙaa˜¬?J².™# ;¸|¬[ql¶Nœ˜Gz˜ôÈ*nízëh<·‚¦àže4³‚-ôYÆ^Ë*ö]ë"÷ßq‡uÁ|)2ß ¡—(Ô3EnïqÁõ¸æëqÌWG‰1‰©·÷¸†ìq ù ÍþË­sŽY§éŸš-G¡i’ÄîJëØŽ9ÿÀ5×lµ\â£Eæ’\D’ƒ¨¿älÀ=+¸ñ!ZS÷çÈë£}ÆÕ.—ó—c›ÞǃEÎðñ@†ÃóâIŒÃ³•Ë'M×ÑJn8È8 Eœ¯:·dµ$TçÖxAóC\ó;Ë=[¢¹]xØÌ.=lÇ–×w–¤¤\)ÿ!/3? /£mwtv®¡] æ5äÃh䨿k žÁ>„aº×H³?HYé;êîÿnöÂf?e-°DB—I<1jÁMÜI±£ø87IeC>æ@–¨‚jf>ºÂe¤IÝ´QÐõ÷~7ð}Ö¥×]úœKŸ%:\;à{ -"aˆ0:6°(êæ±à¤în%@\E׋¨»^æž!âj_{Œ²œ‹” I5äZîXÒÚþ;‚'qwmÝÿPK †>QOÝRú -org/hamcrest/beans/SamePropertyValuesAs.class­W \Õÿ{̲LŽCb’ÍÕ,»b.  (0 ÆÄê°L`tÙÝî,1é}ØÃÞGzÚËimZ£5$ˆöж¶ö°µ‡­½íeímëÕ¦ÿ÷fvYvBl?xó½÷¾÷½ÿw¿½ÿ?wž°I)ñ£ïòã"Rñn?Þƒ÷så}b{‡õ~AÝ$¨êƒbø>,†¨¸Ù8äÃGÅ÷c~¸ðq?>#búÉ| ·øðiŽúð1ûl nÅ1nóáv1ÿœ`¾Ã‡ã%Ç 1pó¤8’ÐS¦c-i;²ëVw¼í@*©gû§Âƾ3;}Tü€Î$¿ŒRÚȶ,C'‘›¼Ûžs䫸!oÏM·ö8…öðÀ™'/àó³¶<‘wLÁŠ3¤{@"/¦XÌUô«ø‘‚[{ëó6‰¨;K´…£òÿZdʦÈöd|DAKð±ª]V+²V.Ñ­a{u]þjAÙQ˜g ãŒæš¹¾›V‡]¤l æªw"×Ûs¼h‚´¤¡§+åAÍÙ1Ÿ4öEKu]Fj8>ØdÕ…º¢ÂܯÌÚh;1ÒÇ;"E‰º4ã5äJéÉ!ƒ1þë…U ´\8snf› §m¤#‘ñR€Y4ñVŽ­…ªuîW4’Y8Ú¯G"†e­Ù°aƒ‚¢r8OACáœÍ©¸¦Î±xIF¨ÝQü=ñÑdÄh7EÑ®*”{ë…l ¯Ä«4tãaÖçÜËTüXÃOðˆ†Vl×Љçk¸4´ãb #ˆièk?Å^ ƒbØ'{œ“k„ÖQ3:(êðbá­@:Çû%œ€n4ü ?×ð üRů4üjø Uñ[ ¿Ãïi–À5ÆÏUþ€ÇXÛ4üSÝ€lè¼GìîÑð'<¦áÏø »´iÌX$Óy)¶žú;‡†¿âo Îeû¢Û¤Q±ÝØÙ£Æ õw ÿÀìþ‰Ç5ü O*8ÿ9–8 {𔆧ñ #l*?[’Iý HRáŒg5¼ /Ô¿5üO±&æ)§5´‘¢PžR¤¸TÅ­)Å›–;=³¬šZí nCz´%94:bÄRYLeÛã£ÑÁ@,ž¢Ñöǯ3hOw £!º•årŽj«ŠOSŠ¿Pâ2ËgZ¾3¦•DvÀ©yGÊHê²Ο^ϘŒAñÌXQSÏ.23òû©Ý¿Ûf|ÊùÔo¨>óSź;žêFÅ+‘0b,`µÁB¥`†Ä  𼑠VçÁà£&g‰fã‘s$5D³d) æ_ $§â6Íô›éÅ& ‘ÞË\à¶ øY^ŠÎiÛ1û œ>Ëévæëì·ª¦Õ6’m‰±À^µÀF!ÃІÂgg‹e‰_af¿&ó}̳ÅIc$¾ßhN¬ÊnžÛãQÑ}ÒèÚA3«_ÍL/ f7ÿtd =Ä›WÞ“ŸéžÌtÎÊBwSiú]Þ•yןå¯ñ³+Ø!>›ƒszäLƒÀc.}A¿lÖ£ÌaFìÓJDõƒvÈú"ñXJ7câu÷eW·\qñ®®¶îÞžœœ±Àâ™^Ì<»dñ­†Ö?ÛÛ$4{èö'ã×ÛqÙ—î™SÜéoÙ·68ó•S9¬D#.àF¹è³P°ƒ³"´qÎF›™_Â9Ûmf~)çYó.h¤YmIïäÊ­”èæ·:tEár×I¸»Cáãð„jŽÃª­9 õ8|¡° ŠÃ™]¸œãr¨ÏáñÅ(AJ±•XÊõsÄ2\ÁÝ-=è$eƒÔ.Â*âÉåèC?e¾€«~mþÝþ¶ ùm5®¤Ü=ØË¡Ä!ž’çÂY2†U¡pÍ hc¨’ļ1”JbþT÷¸]G¥%…‹àḒ0Va!Vö‚_)ÁOIƒ¿*þ…¸š0dÍY±!_ÊÖ5ó»Ä"¿ýáI,Ø}¥åeã(ÝÏ8*Ʊ“qTN`QÊÏ)_\^Å-ÿ–xÐOÊ;¥ ci¸ü\›g™ÃÃåä¹-£Ïx%šš~#Âh"µµ4qÔi‘ #£S?"ÔDÉÒ¤š&Ê3á<Íú³ì^.cʰ8ŸÔY6ß’Á·%có-0rl¾% © J7÷epÞÇ%qE³ÔÂV åîZ¾ ¬$šÚ ¬V]‘½š`kDZ& °ûhŽi12Ú›0qÖLª5+Ö›3Л3Лèóé’!&«ë¶+š%ì½K¸'ÔñAyM*†Écft:Î]c{FÇZ&2•xž‚1¬&±NÁ=Ö»«Ü´}õah$jÆr=rúኤ:eEò£IRÙIð·9ü²Ù\—:þZ×i?U…¥‚¯îQù—â«ëžäÝvÕÚÏSüiä˜âA~–m“ØÀð;¯+Ô]{j«ÛµÕSé©tߌUµ•žõÞp•WZa^M•wDZ©ÿÕ¤&Wý+iÙ=„²—^½ ç‘>Ÿà¦QOãì\À$org/hamcrest/beans/HasProperty.classUYSAþ&‰äD#b¼–Ks(QñD<@Q@«ñx›$cXÜì¦6K^üþ_|Ð*-E«|ôÁeÙ3Ùͬ­Ìôôñõ·Ý=›?ü0Gôb:Œ(.GpWƒ¸Âõ(n`F.³!Ì…p3„ù nEÈk!ˆÛ ±ªmU…íl­ñŠ`XÙäoxÖàf9›slÝ,Ï2ôÌé¦îÌ3 'w›Së »V‰‚ûVtS¬Õ+açyÁPpV‘ëÜÖåÙUœ ½Æ ­Xv9»Á+E[ÔœlAp³–}ÀkO\B”8Þ¾Uõ &ˆËçgç  ·Â↨åø+alíxÇ…MQtfS/aN´™– C”¹qÛ.×+ÂtßEÕÑ-“ ýVa³³N.™(+åÌ9¼øz•WWêC8§—MîÔmJÓ“$/™3^µ¢­Ī^S4=’Ù.$;ß÷žŠl0Rõ×Qa¬¸Hmv†ÄÞ±ÔÉfðˆÇ3o1œLîï-µ§Žn´ZÂî6=p«ª]6[œËÏì.ÃüCxp£;NgŒœ,Yý±‘œU·‹bI—#×ß6^S0†~܉á0ú‚¸Ã=,2Œ àÿ¸êÿ¨¢$£=­¼ÇIs‚¢Oª¼éå8é|Š•Ç`ˆŒ“a“.Åw.EíÜÀ¡môø ©n#HÖ:gÔáY«<•lœL4)ÊÕ#¦áŒ"&¥³H’w‹¢Ö¤(½$ŧIidÜæ”Üæ$2áœ"꼋M’ŠžjkT¢É&sdmoTÂåÆyL¹U˜&4i ÿDôDì“¢%ô(ÃÞ»Õ ž¥_Cº€‹j¿ôPK †>QOA9 ·Ùe%org/hamcrest/beans/PropertyUtil.classU]SÛV=7þ-DÀó‘–D!m±Áà†$´‰)-Him“Æ@BH› [%²¤JrÛ¼÷ô±}ìK_ÉtƤÍ$yïÏè¯èSÚ•À¶<1£™{W«³»g÷î^ýýæ¯W®â[ ÌñÄG<>Æ 7‘stó<>ÁB>Åg9,qXæÁc.†[ξâ,«Îr›GŸsX‹“—/8|É ×-Þ½½YX)n”wò¥ï¥¬*iÕìúîc¹lç¢óŠ¦Ø ¡Tz‹!¼¬Wd†¾¼¢ÉÅzmW67¤]•4y½,©[’©8ïž2lï+Ã¥¼nV³ûR­lÊ–Ý•%ÍÊÞ1uC6í§›¶¢RœdU¶}Õ-Ù*›Šaë&ÃJª‰UÉ6­š òL©Z=Ÿ¸!ÿ1ÃÓ2\ì |pQª¹¹(0p{¦^£ð­ŸëÖ[²¥ò“‚d¸¥àgàW~,ˆ­èÕdȶV {îš4˪dY¹ôN׿܌ZÓlS· òG Ž©2nÙºáúeHBÕÖ£}jøÇû~;x>H}!GI1JJU“ìºIfۧȰ£§Sd›/«^Ãò%½n–åUÅ¡šhn·Ç‹€! H!Í¡  ˆuw|…»JØà°)` ÷8ܰÔÅ]kÉ0~ÂzMU媤.šÕzMÖì&Ðp{7-Õµ"ÓÙO,ëuµ"jº-Ò8ˆ~‹ˆ•“÷tS°ƒ‡Îòµ€o°î¤òˆ¡¿½dÎ!IýÞeúÄî…{+€ÆM˹TºÓ¼ô·ëèn‘¿«K*u]²CG¤©ä1rê5æ`‹W¿5‡;ž‰Ã§‡L—H¿¦íé 7RãàL5×À7¥ƒÔ4ï+":ž:E›F%õ Ãt‡ë-X>¯ArmøÖ˯#>fë~µ'ß~“nì›úÎ\çÒ[¸D?‰ýzF")L2 ­#ô–¥Ñ™<{FÂQWÙó´ G¼ƒwic åÿL{Ôq2ÅžãL!ój!4N†Ç~Ã…L2<{32i 4Ù@øDG#?…ÙïÿýÃÈ$ä†"· i„½G&HžÆE7¬H˜ôћ袲”Ë8àJ— M·ÉgzÃŒÿ—p^†qzèFp}¿’.Dû q‰L=GôOp …ˆo¿¿}ˆž¡^çsgèË¢ÿµ›x/ň‘ýèQ4Z3´O³™cžËILQ9(†Ë®”!£Ý/¢£ÉzÌ©ÄE61¾â––¢]=>ѵb¡—HügÞYúG4Kë5×îúÿPK †>QOéú›¢Š¶ /org/hamcrest/beans/HasPropertyWithValue$1.class­VûWEþ&6,[”W©-Ñ¢„ðHÑZ-A”òhQ°á!Ö—dš,,»aw ¯¿‰zlhí9êÏþQïl^ÙPô˜œÌãîwï|sçÛ›ùëïß~ð)^4ã}ÜÍ´Œk˜iÆ,ædô➌û˜—ðMß¶`qaL°(CÂ’Œïð@˜“¶,aEª„5AÌð½è×EóCEŸÑŽ%<’i©Ÿ$¤$ü,AeU½ƒ«CpaS-ªQ]5²ÑÅMžvb MNN³ûo2 .˜V6šS·Ó·¨p±£÷U{É2óÜrö×4'·ªê.œ&4Cs&&Ãöª]|p•Á?mf8Cë‚fðDa{ƒ[Ëê†ÎY3­ê«ª¥‰yÅèd”yÃàÖ´®Ú6§éÐE9ô÷®Ó÷óÕàj>¯ï3$Â'¨Zü±N\£qîäÌLìôJ3ÜN[ZÞÑL#v&}Ó¦‘ÑÜ Œ‚xÄœ7ŠDE€–U+ËÙ½4ÏW|:OàOÚe‹«™2†ÞúDéà·5{[uÒ9«K›áRÒQÓ[q5ï¦IbchNjYCu qßø_2Q+„I¢1®µÿ§lû“Ï3…]z…,vJ×Gf"IîqnÛj–&-eÆ•3}÷ž¦,“ŽãÕÄô†Ï©JMå…èÀ3-uޤؼÇÑÅwzÅ_Eˆ®×Àp¾¶6Qtê©Ñ-¥~7ÐOO?¢Ñ |®¥52ô ,2ü ¾È!^ºÀ©m" °ƒj»LP„Ü‘Ie‹ÆŠ‹«>câ &4-Á$øé ¤†"¿Â÷ ü%4¿FÓAb8xƒf†JÝA°ÅíFJPJ¸ôïù°ö­‰·h_‹àú!.;Jè$®`7 ÚUBÏ!®üQ!×F7*ÑÓÈïn!™ÚÍ‹tmÚEÂ^ìSžÐ³§¸g„~Ž^¸Û¼…F bQJBŒp£¸éf)u´õÆð‰»åÝûnÑÚÇI¨¢>£Ÿ ß’„Ûš„ÏñÍ}¸Ó6EɯäŽâŠÈrdèOô—põÀ3õåÈr%òPÅ_‰>/Ý~_¹Ö¯1E;Ý}¤‰òç:]2cMÍÿPK †>QO iA3õæ=org/hamcrest/beans/SamePropertyValuesAs$PropertyMatcher.classVëvUþN’v’Éj(*…*Å&é%UQ,©µ´­4-P/x29M'3af‚eùG_Ãgèײ…êZ>ÏÄr¹ÏLrkPÿœ³Ï>ûòíÛ™yù÷ø†Š|¢b×b8…¬¤%õ©Š%|¦b×åq%ŽU¬)¸¡B•ò*nFñ¹Ü¿ˆc_Êë[QlÈCNÁ¦‚-Õ¼”Þ®]bÛxÌŸòŒÉ­rÆ;¦Ð½Lp—eP*ÜÓw…Ã0ºa;åÌ.¯èŽpI"à“H,o”-îÕÁî)´Øâa«ø˜d—HQ«:vU8Þ³M^!ÝD‹TÞs «L2ƒ‹†exK W’ÁuQpËÍÜ®k® WwŒªg;Ùn©m†Èª]"Û'7 KlÖ*EáxÑô½Ù:7·¹cÈsñv —¤æsàµuËΪÉ]WÀB{˜¦î©BñÒk•¹CØàeËv©ú·’š·kŽ.n²ŠçzUbNêiÇw5äQÐð6Îk¸‡m §1ªà¾†¯ð@ÁC _ã gpVÁ·ÒøŽáLgs®Ô ³$ ð=›ÐÀQPPÔ £¤A`‡!tØePB¯þφa¸Ð?! Ãa'efÇûöµVYxk†[5y}G’©^38Drw[Œómb]OÆÔ¿ •ªÆu]¸îäüü<Ãròx£=f»×œkó¬ÛŽÈ¬»7žøÍ­¹Ë†L÷˜ÔqÛH/>Ãé^6üYªV…E9šMvg²;¹õ"?QÏX g™0ß|AìQ‘çzºè3·Ã±Ì5çü?¾ÔT§-ì-jô…Ž!Ï s')¾&è#6BŸ¼0r ‰JÈÉ•“èÆèLƒêKPOã­éäÐ9Lûdú9Xzú¡„å9À@:ý;f^`ð”Dó-MÐ:ŠZ+ˆÀ‚›QOؘfÐ3P/org/hamcrest/beans/HasPropertyWithValue$2.class­UYSAþB6¬‹"¨€DDH  âD9 ‡„‚òqHÆdq³›Úݨü«<ÊWŸ}Æð¨²|ö7Y–=›  $P–;=ÓÓÝ_wÏ7³ß~|ú`+*šSÑ€¸‚!µˆpYÊ+R9Àˆ\\=Q\Sq7äpSABE#ÆÜR0®à6ƒL7uwœ¡6^cðMYÁИÔM±XÌo{•o¤iIZin¬q[—ë²Òçæt‡A›7MaOÜq-“–çx>m Çon:ñ9î,ÛVAØîÖºîæÖ¸Q½W u¼P0¶R¡ä&ÂËæ{¶ÓÂIÛzÁµìÄÁ¨{ºe&·¦,3£{ B9C÷ñÉ8¯;yî¦s ç*£1¨¶à™á欌´ôÂÜÌÆmñÈi7^Ú#ˆ”ËÓxÁk˜‚; õ)=kr·hSÿ¬ÿ_óXåtÆ)¡Ùоý¥MÚþ·ÆúR®(0lî—O¯t;ªÞªÉ«)«h§Å¬.¹wö0FŤ?ÑwÆL–£›Ù’·‚ “˜ÒЂS¦1ÃÐþ*åÚd:YÔŒ° f3Á ³¸«aó Í=AÝ š–”Ç/ÏSÃ=Ì+¸¯!‰‹–°¬áúºªªá:ÂǾ( M6š¡£J§ÎTê%Cÿ1qN>¥ùÊ>ºw‡*‘ƒ•œÏ w¿G'yT¹"~ºÿÂ$»è~j–Ž$þKU>%rTg‘ç)ÉÖÐßvò:»ViN½¨Dq:íþªxFšC•§ íð^PX"Ê‚|K„|#*6MÖ‘/™aˆžæ&Ñ良¥¸J«VšÅI2’u»`ïiRƒÓ4ú=ås´Ñ¨• ÐŽ³$™äYIç·ÌGrtp5‹,úáÈgÔ>Ü…¯¥n~R+$Z4ì þ#Ô¬À‰íhä´m/‰ÖFÑ4¾„ŠWˆà5¥üÆC(!”Ñå¬]^F£8nʤ—ÄŠÕCÚØw )¸ˆ^¯šKM”q_¹Ü²’ P¿¢!²ƒ“ÛUjV˨¾r¬žÀ § Š3^;k¨ÁðЛéoØï¯ÿ PK †>QO³Ìô<N ,org/hamcrest/TypeSafeDiagnosingMatcher.class•U[SÛFþd d„ˆ± ·¦@]ð Ü&MÀ%„[ìHŠ]Sz£k{1JeÙ#‰4yìÏHÿ@^ú’^`ÒÌä%3íLT§geÅAƤÄkwÏ9{¾ï;gµþçß?_¸†ïU a¦ç0«bY|"–ó*=n©XÀmK*B˜–Õîôc¹òÂùiŸ‰õš‚õ.‹í î*¸'¡¿¸}oeg5¿±¼²)!½Ö°j™=V¯XÜv2ºépËdFf“ï¼âèxñQ“¯êf•[s4þ°If^V ‘µûìË̬e– fÛÒWÐk&sö-òŸëôg“ó2PgNeÛ¶ËG2ñ#qwË÷ aÎÏk™ÛKo:zÜK|%a4^,þOHoV7ugžHıL”$ÈK*Q ¯é&ߨ¯—¹Udeƒ,ѵF…%fébíegO·%Äý˜¢ BIJÎjfÃÖÍÚº«L”jØŸ†"½TS§Ì‘%‰¢Z#Çø‹* ™øÛtOìPöZB0.LŠ× C]Ú *)믋ºóR+ «ü°Îšž¸ÁªÛ†2_×m7ñ[w—(­{›8$\ï@yõ~½ e¤ ­|>Q’Çè΢Š.ŠG³¨8‹ —ĵ^‚"Ë⨴-W SGi6Fë2Õä!¤dêžÒ*ˆqzž¡)SdYÞ£Õp+1¼¸³Ú„Ï7Ùö]jãÆ]Ü­îåÑ‘nòÁÈ]à´-‰A¤ŽÀGÚðòxð-Ÿ€`),G»„/”ü=‡è}¡ºù>„‚«nþVŽ—Âg™t³§1åeý‰0ÄîXê/Œ%G uå1†“©çm¢ïêc*ÿÈÁ_\Fãn{dzÞ ‚Þ¤òÌê#Êbme1L#ãSó8|@¿Æè_—¨_õè¼$I¢`¹Ôß§£ýÏ °õ³¯¨ýŒx::àšSn¹Ï¸óh¸ez†A7^M¦ÒÄ|ëi›ò‘nÑjq›zºHT–{™È¯õ}ó®ŒÑ‡¶Œœ'CÌ®á#ùZPÎ'(8˜é¥:_owm’Œâ~ŽÈv4Ú<ÄÙßÐ#xI.¯^7K”['ìcb#Æ›ÄI´–îbºŒ ÿPK †>QOorg/hamcrest/xml/PK †>QO`IAþÒøorg/hamcrest/xml/HasXPath.class½Xù_Çÿ`VÇ‚© 6‡ 8¸DH`%>J;DL‹ŽTì¶t‘#­Ti18½Ò¦mÒºMï4½ï¦‡Ûb®Ð&éå¶é}K?mßÌ®„$´7|ò³s¼yßï;æÍˆ—þóÜóŽã_vtâjÞeÇ£x7ï½Ç»ðï½—¯¾7ïçÍã¼y‚/|€÷>èÀ5|ˆ7¶áI'>‚Úð1þý¸ŸÀ'ùʧ$<å@>ÍOKøŒ\÷gñ9Þ|Þ‰/à‹¼ù’„/KøŠmx̆¯òï×xóuZñ ŽùM Ïðï·8ö·9ÛïHø.Ÿ¹.á{6|ßnü€%Ü`‡5MMÄ•LFÍ0ÔG'ƒýh¬À?90 ûÇà #—•+Ê‚o!÷iJBͤ”ˆê f{IMWôS u†Ãg'ûƒÆÞ ímI¦g|³J"’V3º/’L«¾áL¿vUŸi3´ÇŠÍhŠ>—VŽ•î4|qE›ñ…ô4ß~š8ƒ£ƒþIÿøp(’°ÄPÒÕáBeÄ2ÓcIí_¦}åÖó±F§.«ýTitùŠŸSŠ™UÓ û •šó$ç)¹`aRM$™HÅâjt|LÑgç`!ES>±à_H‘² qæn †×VÅ µ*'«p#É(ù»¥d`ÏñÈ’xu_L‹é§¼î­ÚJÛÙužÜ? tï‰ijp.1¥¦ÃÊT\園%~^IÇøØœ¬¢Ðf8“}œÐY%#¬$&{ Í~Î×u5•Õwf§\Kºžó?WJÃŽ€µOê´"Yuwa,͉ï²9eRFD?!¢ÿè+`Ý6Ljbo&¤L«ñ« >·P=<â‹&¾ ñ,T3‘t,ÅÏÇ©®‹dKLW"o‹÷1رŒ`h¶ÖÂàˆŠá”NRIr—$ÊÎèæÒ•ÈÃ%e¦¶Ý<¾j”aèöŒ±(uÄ©¼6mS^ü ÕÐDWÃÅ]/Qbyísh¤Î¿ËèTÚÜV»³UÜ_^bÇuüÒÿ°];(Î{ŒB~ ´,¹õ¦„g%,SbÍšuáþ×]«kgöå•C Ñ-ÑçœÞíºieÓ“¯Då¼Ë=%Y²?½ca ´±—‘©œ¢»¬Ò‚¹Ï]â4–­À¶¾HÜ|„Tºy…ì+”ç?¯ïƒ1eFKfˆwyŽPr.Q‡b¼žÖd_G9+Çp\ÆÆ$¬ÈX…ŸB¼yDÆýˆñ¦_ÆqNËä"oí|-è¯ÉXÇs26ðCzÏ(Zûx`¤=šŒÌ%TMoŸé³í­]Âd<¨ø¶Ëx?–ð?ÅÏdü·Ü;­Æ2~_Êø^"@Ë÷Ó‘»%üZÆoð[¿Ãï©ÔÈøþ(ãOø3ÛŽÇÕ%ÞŸž”s0T¶Š³ã¹X<Êß»uÃ]J±¨iÚ½dÐ_ðWãĆðwIX“%;.pEÆ œ”ñøIcqàdœÇ†ƒå~0€ÃýSÆ4hй³$)öZáÕÁÐP2D±Ø GvrZè×PI´œÑ_xÕ¡ðCÃÁé[šE£û¿×]ö^,sáÛÄ«Enr[T^:yVç’‘’J©Z4,,:º}9+|í3vçMŽN3ÜSD%¤Æ§ ‘©m5¶ms^Èæìˉ¡¿T *óÜ*Í /Kãv;Í:*ŽU]e†8Ö»»¶:U¼Œô@¹ÙòÝC’KzdH‰èÉ4½„š:?,R.Bhín‹Œ)Ïs†6˜¹ßd%ÍC›Qõ­9ßåÞáUBå]2ø2œ,™WÛ¿´ªôbè±TP¢qõdö0—ºÏóf³éä<’?xø¿¨V”‚;ÃèÄ]$4ñû…zͼÖá5Ô¯@/éöÈûàâ—Kn|†ÆtíPßÅoñ¥{‡¾µ$3„Iæ,ÞŒ*TÒ×áñ.u¯¢â*1ÌçH¸v¸ñ:êµ’x=FÑ f&z»Aðzš9C3›Q9fbư‡P§ÇÛݳ„ÊUTƒÞMßcÔcˆæ@9P'Αc*DÃWæÁ;|¥ ÿýÑ•lÂ?Eó{èÛêYÅ¢°†êeHï2lžžeØ=MUËpl2jF5µ'ˆÇIÔF9ÿ9ÿî OÚr [s [s [M†¼¦0Tåqm-àúš£{‹Z#<•bW=ñ\…s ò j<Ͼ‚ÚëB~X„–ûè> ÔiÔ‘®}Ôß X}ŽY=Æ1!0ëq—h7Ãñ&kŽÆœk·×µwu ›è\àˆ·Ðàu½*»`_‡‹6½dp¤¯ŸRv^ÒÉ9ì7tæ8t“M—qRìd^Z¦§šk4ÅÕt‚䥯±Ž}• Õ/»{V°ßೆ‹ÂÙÚPÀ`„fd_m”pÙ ª§Œ˜BDø£#Ç¥#çÓœU5XHBÔŒ‡J™Ho“`»°°m qbM‹Ôg½Zè ›»fi=ýLÏ®›‡¬w Í+h xoÁÑí]ÇÁ t{Öq¨‹ ´Nl ”¶»¯àý­ ƒ¢~䡺‰±¡ %§¨:DȰ(™>Ms3h!à¬É9â2&2-8(ŒçÔ{ErBôxrhDÅ¿á’ÿ/m« q'Øé™•2%t®Ãî¡Rá]ësÑ7¬¿šq;@v³0mf¼]d|¶T½U€¤s©Zøªv”õF}(Fº–—ßµ9¤ZÓ$Þ+.Hµ)#0uó˜8 UnØî\Ì,íifè±™h†ž9¡çŠ©gä¹íu÷%¸—Ðe²Ï×÷LžŸêrìëLö†æùº~ª f0ë•éáé^÷z‘ÎÆ<ŽÙm£ˆQO#Ü8o!org/hamcrest/xml/HasXPath$1.class­T]SÓ@=Û–¦” P¡ˆTÅÚ6 ~—áat¦ˆ3E@}ZÒµ &›N²eê¿Â'Ñ_ñG9ÞlѱÐâ‹™ÉÞ»»÷žûu’?¿~°‚r)ÜLáÖæp;<î¤Q@1Òæ ,X4p—!¹êHG­1Ä Å]†Äº_ #GŠ—-ï@;üÀ¥“LÅ·¹»Ë'ÚŸ&Tà ÌRŠ`Ýåa(h;SñƒºÕàžˆPYmϵžópÿW¹å2Ão6Ý ›…Ê!?â–ËeÝÚ>8¶*w»>¡8Måø²\ì¾Z÷eÍÑxÄÝ–ÎñCÊsB+»ÁíÎ0\UÜþ°Å›§µ Vºäªþö¿dºúHUެ—×(p¢ªD“áõ¿BüÁ™‹V{˜÷„OWýV`‹M'*jø÷ J‘-ÍyCÚ®’í–P ¿f dÂÂ’‰4†¨aí&ÙæAm¢–“>éaËUaÉÀ²‰{X1pßÄ<4ðÈÄc<1ñã ÓP€aôlîgºke˜ê GJ¢ìFÛ qo¶Ð¯û‰ú1Ùon„DIJ¶#Ú”P©p¾ŸÅ‹4Ñ;®NPmE 5jißË]}éDd04··ß3ä{°x>Grñ:Á°ƒ~Deú#Ä襙ÒÎ$Í"ÉHÌû¤¯‡iMêÃ\¢Õì`c$éãÂ8YEÎÉ8ÉìÂwŒ.fb_aï‰ã… ,ž yL·q˜A‚Ö=Z÷iÿ†°Þiô\á=Ò.㊎˜Å®R„IÁÆ0¥ÓËDG»†-¯c–d‚ n`T‡ŠQ½Ñ“¢Šó˜NþPK †>QOÊ·ÃßÝ!org/hamcrest/FeatureMatcher.class•UÙrG= #Áh1r-ãXV¼À G"‹ V-‰ 9b„¢¼¤hÐ(0PÃàŠ¿!oðKÅ¥¤*OyÊ7¹R¹Ý3A`a"¿ôrûô½çÞ{zæï~ÿÀ*ŽÆ1…\ÓÈ‹Õc1¬‰á£ Gñ >balŠÍ–Ø|¦âó0îD a[Å*¾dˆGO6¿ÝÚ.llî3¤wZN=sl6+ï¸Ëv¹c›Ì>¯5xŵžrãY›oYv•;9†H§[Þ5ÝÊ1wâƒw};¡Æ‹VÝ6Ý®ÃCAù%ã ·FÐXKàïT«íZ-›Œ;'æS3Ó0íz¦è:–]'dÔGÌ&¹ å-Ûr×'‡³¸èâ¢%UbPÖ[Uò7µcÙ¼Ðm–¹c˜å$Z³Q2Kì}£â[†›ƒ1·QOŽI[Н!org/hamcrest/SelfDescribing.class;õo×>cNvvvF®”Ôâä¢Ì¤Ô|FY Ÿü¢týŒÄÜä¢Ôâ}°\AIf~žµfPqp~iQrª[fN*#ƒppjNDERf^º^VbY"#ƒ4ЍJ@ŠôsóÒõý“²R“Kؘ@€‘…‘™Äb`’L lPK †>QO?ÕÅku$org/hamcrest/Condition$Matched.class•TßSWþn6aCH ""Bµ´Š†M$ V-‰X‹RQЇDœi:—d'¬M6™ÍâèŸÒÿt¦ŽCúôêøÝ»a%²Ç—{ϹçÇ÷ÝsνÿýÿÏ¿Vñ$ƒQÜÌ ƒ[£”~RËÚʨŒá6Ö•tg W𳉻&~Hûûö®lØ“ÛÏå YjI·Yz²÷Ü®ûeѪÓt¥àÑÁ¨Õx’n;½¶ôëû³Û¯YÚ—íºg÷üÒ=»W÷œ®ït\úT×ñ×Jù“‰ãw’ñrÛŽk?>hïÙ^Mîµ4ÅN]¶v¥ç(½˜ô÷ž€¹£HÙ ì–ëÚÞFKöz6 óƒ`·á(¨KýrÌûª{”{á ±–d æó†_*­‹æ¸MB~Ð5Hæ•Õ©ê{t-/þÆ‹µ³¦¦\ì^O6?kb?‡À\dÜ÷oª¾¬ÿ¹#»ý;/G³ Ü£)Òm˜Ø`/ª¾Ý¸™«›²—c¬$“tí—¾Àù¡ñ—‡Ù+WIµöT_î÷ÊÓµ“ã·>”ß§ø8¢m5qO`뫦;vEHâå²ZVÔríÄó:î-°Z©E],–pÐëLµsàÕíMG5z<4/©DYœÂ¤Zîg1†l9L˜ØÌâW<0±•ÅC<Êb[ùìà±À…áOƒãíÀyR|™¸[s,bûp*jpÃÄ¿àLD·ÔÏÄuŒ%“Ý®í6jz.—ò`Ø/8ÑÐêž½þš)&l½Øüº1îÍ`™|†¿“ªoà‹ÖÚ8u¶r’{Ëõ4µÜ î–ø€„UxÃ*¾GòÏ Lqd°ˆ,f.0Kgx2Äaç-xJRH ÌRžæxÍ…^ã!«o)Ç…>—×̨rZëo‡H%ðRÉ7Ô’ÅCŒ$ðL[”~“Îoô}¦4NŠë2ó®}•Ø×‘ÇǘZ!S ßñLhé{ü0ÀÔ ™*¯‹ôº¤+!r}Ê <ºÌr”ÿ I…åŽKxVoDã¬iB.ä‘#FöÙÛ\h+†uºÊÆB‰º•Ì­zbZ…âˆwŸ-h0+p ÁL'hÉMh8×X*C8²Œ>ðu–Pí70Ã}–çj¼ÎRºÂ=?2Š%ÝÕôGPK †>QOPõ<Ǹorg/hamcrest/Description.class­TKO"Aþ‘ÁuUð±õ€ÙD{R W&&ÆS34l“¶!=3f¯^ü?ƃ‰&þ”±ŒYqS]•þ•î®»ûë[¿±náÛ$¾'Ç ?-¬2dª¾R„ëÙódW3¤´fWq×.C¼Z«î1,Vº¦]üËO#\¯Bì0Lò^Oè¦-þy ›…J‡Ÿò¢âº]¬{FêöÎFzv€k-†­ÂsL]¨Ö`KãUÆÔ€ñ+_ ª5:Âñ¢á™¼"]êIŒèé-•ãw*'ë²­¹ç²­JööÿðòGØv´tëƒÄ¡Ê' o(-tö©}/Q«åhvp¸çŸ(ý+òÒ¾âj¢ä(©¥Wf+lÒÛÛí6é&d*R‹ªÒÆTȽëGìË É†X6O …—TÖ‡ž{kȧ1$Cî%I ŸC¢Ô·š —§ÃhheÅÉ RÅ4¦úñ 2ÏÅ4휡]1ÌR=‹¯Oùåó¡|ørÄJÇò5ª_êìè ±KŒ]ôe—蟠’Ša¹]E1˜v½òPK †>QOnE1ÍŠ“.org/hamcrest/Description$NullDescription.class­T[OA=Ó-´”*Ø"‚ŠWж•›‰Bˆ bBl ¦M_xš–iY²ì6³S¢¼ø{ôÉÄ€?ÊøÍîÚ,½lð2—o¾s¾3g.þþú ` )Äñ:‰•VXK`atË´MµÍ`äòU†øŽs$&J¦-öÛ§5!+¼fQ$SrêܪriêyŒ«cÓ¥ìý¶e}n]š-e:6Cz϶…ܱ¸ë J(”Ù,óÓº®*†Rç» › YÞj û(”cw ó´~޼êÁ§kzð²Çƒ\ǃ<Å.áÿçó¿Ð©½H±WX ¼[ .Ÿ‘‰u›W ]=#(ò×q‹ú­$.ÙPK †>QO5¼;žÉorg/hamcrest/Condition$1.classmŒA Â0Eÿh5µŠv%.]¸6ˆG( .Ä…'ˆihSbMôp.<€‡SWþaþ0ðþ½O[ŒÈݭ•j¯"L gK´³ëFÜa¶³Ò8¯muT¡v%CFX¸¶âµ¸ÊVùÀ‘Õ†09X«ÚÂï•'ä] 7ÂVüti” „ùÿp¾¡‡¯úq¿ƒx £§q³ÈPäéPK †>QOorg/hamcrest/comparator/PK †>QO{p%( | 6org/hamcrest/comparator/ComparatorMatcherBuilder.class­TëNAþ¦[h»T)µ¢rPÔm ”›¢@øJRSá Iù7m7í’e‹{!ò>Oà`"!‘Äð¡Œgv·¥ÐKB¥IgÎ̹|ß¹ìüùûë7€%¬…0ÂB‹2$,É`Y†Œ¥I¯ÅòFÃJo†¶jGÇÜävÍüÄíRU5¢YÃPÍ-[–j1È¥† ÃpîŸðŒckzæÊu!²§U n;¦Ê0ÚÖh=Ÿ_Û Ë§šQÒ²z¥ÉïU«djǶV3ØC±4£²#r}×,«&–•d®fV2U~T2UËÎ\qË´d²éh:9dp«V&^ƒ9ÍPwœ£¢jæyQ§›Âz~uÕc«s£RA:íFxõ<ýº©åÍS†JûÂõ”N ¸óÉè?@ñ%×/üPK †>QOpÿ‰ Horg/hamcrest/comparator/ComparatorMatcherBuilder$ComparatorMatcher.class­W[wUþNn“¦ƒ@JJé£rI“JJ¡*´TÚR Ú6BB¡ ÂédH§$“03Öûo?Á'xð…Q»ÖÒµ|Sÿ’.qŸ3“Kée-TXìsö9ûìó}ûr&üñ÷£_ÁWtáj{p­f\ˆ!4! Bèí¸Žb‹0,µãJa”ÅhŠÃ•0ªaÜ Ã ÃöŽ‚Z·Â¸Ʋ‚w¼ËÐ6=•Ë]ÍŸŸe`†m“Óv¸éÌñRM÷?¦? ê™óSãù©óÒÎOøCpêÜ…ñi¡€!¢UÊUnq§b1tN/ñ[<]sŒRz²±>Bw匢ɚ¥3ôlh4šÏŒ‘eX_®ê𣢮a‰›Åtva‰VißOvtkÙ0ݳºPørCÙk˜Z©VЛž3æ)ÝÖ,£ê“¨^&œ.hî´îÙ WZîÌ9–aé¶Ð¨aÎÃ¡ÄÆ×Íd.÷Ï1&+µ}Ú0õÙZyA·ò|¡¤ n—æƒÐ½Å€³hˆMÏ3ÜÑuЬš1MÝš,qÛÖÉäÔtÅ*¦yY³tÛI7s^wv¢f” ºµoÝÆˆÈ×+Õ:’Ìÿ࿞Ñ}ÍÝ&á…j[Y³süº^Zaˆ%ÖGµŸr§hõT3‘î#In;SËš.3*rÇ5§ÆKä?çpíÆ ¯Jв Þ£æ!‹ž; ²ôÖ`êPÒ@Y –*d:Êž‹5¥×½ù!†¸€±µ×H`¾ÂЗØÚ¸½ÐzuˆÛy}ÙaÍôoTã‘fK(xŸaáiJýé«å°Äè[â°CBâ¨à Gÿ[zAFµ’ׯþ„¸åØhþøzØck½‹âù~¢x#¹JÍÒôӆ芾Íî=$¼«HcPˆ+*žÇ *à Š~ô¨H ‘€‚TœÀ‡ >Rñ1>aèݪ||ªâ>£'7~›ÛqŸã ³ÈRñÇé‰ß^Ô͸×…øÂ -†yü–xÀiˆW,:ô"1ìx2çô(—tÛŽ;‹ÜÏîMê’¸C…¥-;º%w|É0ñßbºU¸×àsÄ0ôôégصQÕ2ܨ…׿/ôÜÙ\͘Ž^àB6}¾jeŠ(uÙtmÖyÔv¼ZÕÍ‚ü†6?k.ÙꈸÇÝ^]sÚëÔ-O>mÄ0H¿öЇ¼ Ýô·‡>轤ùÐGÚÞýYÒã-úsˆŠ"'}ŸÔ÷“NõÞФSéÓ<*ª_ŽÔ4v‹z¤Q!+j’‡I{DcˆÆxò|ÉÔ*üÉU’}«&cU„’±à*”ûdãÇɽäG„~Ïà:0ElNÚ3ôC s}â(^¿Vhæb3Ö'g§_ÎÒ€œ ¬A¼"ç~ÏDZ†ý  òá2>Nk#õøüJ§Ä¹TòGø…k¶¢ëcPú8ëÚ5ÀªÈy-§"ﵜJ v[N¥4»-§R²EˉÙ%Jx¨…žêÑ ã2•‹(-O»C?c×¼?ËÍ¢¹ù`twîtÜ—ÿ9i‚¡ëÜ”¿‰·äø6^’-æ£X¡uãœtþPK †>QO°ù÷*D8org/hamcrest/comparator/ComparatorMatcherBuilder$1.class•SÁnÓ@}k'qã:4”6P P P; ¸-HRU‚¤Hi{hÔûÆY%®»ZÛHüS/\@p@œù(Ĭã”RR¤HÞÙ73ofvÇ?}ûà%š&JØX„ŽG›(â‰MO £pþŸâ+yòBNw÷2yëúqƒ4“¼‹“"PK †>QOorg/hamcrest/object/PK †>QOô”³½X|*org/hamcrest/object/IsCompatibleType.classTYSÓPþR4!-4슊Щˆ+­(²(NÁ‡v`àÉ´m˜¶é$©#ÿÉ™QtÆñÙåxnš¦mZ*/¹Ë¹ç[î97þþø`»"†ð@€«"Dë<^pè·N«*‡@êDù¨ÄKJ¥ß,)¦™à ¤µBE±jÅeo<™É$ÖéÐ@R«hÖ:‡±pDä€ð7õ<å§´Šº_+gU#£dK´Lé9¥t [;›ýVQ39,¤t£/*圡šV\Ïž¨9+¾knêåªbiì<©N0Ym ´éÅ®„Ð01Ù¡½a†ÊŠ•+ªfZù –N»û<æÐ—+‘ð±œ(Ãïħ}–&çU3ghYuO3m¢Ír'M»¥-;±jizÅÖ9ZvZ¦.Oâ°ÒUVo±!8£s˜ ÷><˜oÕd­Ö,À¡f9Dº\g;èž}ÿéõgÓ®‡ãdf­%ñ]ßÄúeuìŠ˜ìæž•+î„îm4Ô%ƒ•÷mw™í`Ì+ûÿd‰i½fäÔ5xÈÛËË,KB/%\ǰ„ ÌJx…M[¶±Ãg˜KÎIx7æ¯òDâ(½_& ·p[ f9ÌôrC/#ÌnhD37L“ýPxÇÐË$§ ZûJYeo*Òb:mZ¥@†'.»sê,¥ZU+ù¥TS=¥qý½:_¬§gÔO–'Û!ï‘MÎýô¿¨£ÙMÓ8B+àí½QšÑN–Fbô;¸hì|g´êCˆ¾×i¤ú1dZÉõÓÇ`Ïêè“m±)7p™§iF¥px^!ú¾Ø9ú>»´t”Ô¤\:7QO ¸¿d„5org/hamcrest/object/HasEqualValues$FieldMatcher.class•T[SIþ: L2Œàª Ë.¹ÉÅ QVvØ5¨U¾¸IÆMfâÌÄò·øÖ«¼áÃþ€ýM–åé`IH°xé>súœó}ç6ÿ}ýü/€«x¢cfÃ(è˜ÅtsòóÚ®ãF7‡p ó:°Çm©\Š£(•w4,k¸Ë0°e‹Fa¬ôœ¿äfƒ;uÓ[ aæª|Z`К<°¶…Ç*¹^ÝÜæMË~`–C=™$*vÝáAÛ ÙžF‹6ªÏ)þÂ9.ÚŽ,1̤û28ì™yÌ[qk„6R²±ÞnV…·É« Ò$K®Å¹gËï]e,ض}CE,ïåc¬9ŽðVÜ÷½Îv2w˜ù€û÷_´eÄF[øS#PÃâU‹¬D-¤&áÑÝ/!a˜éÃï°÷„oyv+°]g!ó”¨Ûh2Ä›¶¯¢0Œ÷w Šr+ ¶ '*·þ.ó–*†½¦L«bÓe8Ÿ>— •€[–ðý©B¡ÀP<Ö˜÷¥±LËõ„¹Ò˜ yËæf{ŒY¦ßöžê¥g8Ý+ äÙ~c#smµ„SÛ¯‚®•®•´›CçèžéSJ¬.‚uÞ¤:•ÎŽJ-Ú›ìòþ–sÓ¨£!ûê-†[]{R­Ð¤úŒ0I?ãúWGh”iÂIJÊ¡¥¡´§%9…3tž%Í_ô¥;•ý–ͽG$›ËBôbï1ðVùŒ©(1:gè4‘@âÌbœ4“¡7~Ä@I•)i‚^#äq—vÑþ!kg9û‘Á¬“0pyƒ¼F>ŸÔv@¾~@BÉI]]O”a~CÄ÷Mì ‰*bã¤sŽH]#È븂¸›(b^̆€û—ñÑbJšÂÏD0AÖ¿¨D¦Iû‚¢†4ÙdÈ;$þŒì"tOä:¸{tvp‚Hv׫H½¸C– ü®¢“ ÃìÓ™@ŽHÐvïö'ËêžÁyºuz¦JŸƒþ PK †>QO†´5s† %org/hamcrest/object/IsEventFrom.class•VÙRG=# F Ã&VãØN¬I 8ÁÙ ¶1³˜Dg¤A H#J3øWüÉCx°«bˆãªTžóQ©œî ¡…—îÛÝ·Ï=÷ö™+ýýÏø #¸Ó~Üì†{˜S1¯¡ w¸/æ ðPœ,Šå£N,aY£÷J«ñX쬅ñy_¨Èˆ£u_ŠyC OT|¥@3MÛ+Ž£ oy×84ÒÃΧåÖ´‚ŽŒ•· ÷ l*¨?ŸIܦK»S:(gy©9¼µkf]q:cÙ–{[A,Þßè?¾¡ 4WÊ­gÙ²ÍÕƒâ–Y^7¶ ¿”5 FÙk3äîXä>¶\*çÓ;F1[67]’péEç¾Èo¡\*’ÊÐÙûÏö+ã ÔDfÍÙu 7»c:cÛ,¥šqË uïÀ*ä̲‚n!ü¨K.Ñ 'ªã[|§â{?€p[ÈêÈ!«ÂÔ±¼Ž4ޣʼãߨ¥c{ìX†•’‹–¶=L6œè6éѸöA§Û`Óäu܇:âgçºXãâ“è©“"‹h9‹¶ã¶ø›©¯Õnìï›vNÁD­ƒW=Ê¥EAùD½õp Ây³ÒÔûããMÚºJ‡Uv6õx#6ÂnɳŒ´ó8¯›?1èdSÞçô«’¨´¥³4ª]°Ó °a̺Í?¤ÚãïÜRˆBÁe¹z‹kÊ•¶Ê=ª€{c\íqrîIœ@I$_!H½Bð%·‚¸Î1‚Ç>ŽˆŸæn àmîD½kx7iyá„%£­û;—H Bå]ZGAàW⤥Äo$zŽ©7hÛ`þ4‘¥j"KHÐW‘VŠ7˜¤B`â2m~›>ñ5®¢4"6Ɇú¡àiøv “a†<çj˜>Ü”ax=w.Þç_!}×G%#}2CQ–AÚ‘He+è%ýRöº ÓÆ1ɧhO0ÏIL×PˆU)Ä0EŠR|ø¾ÖD¦œµ7èßUxQ—Îg5Xš|tHK<ºRóèâì#ÎÞ£,£|âG¹ÉYø¨‘ÁÄïzQ¥ï…x$Cx0ª/[æÓÞYjgÚ/Ò”¯-‘ü ƒ©c Õ!uÕ i~âk†©ˆùö¿PK †>QOœ¾våýg (org/hamcrest/object/HasEqualValues.classVéWUÿ Y& ¥”¥´¥ÊPB[­Š(¨,R¬:$/aÚÉÒ™I…j]ë¾ïZ·süâ—~¨çØRì±úÙ¿Â?ÃãñXï{ ! ‹àáðÞ›;÷Þ÷»¿»L~ÿççÛá;~œR° “ îÂãåô8Åe§ùiºOàLžÄS|yZ†®@ÁŒ‚¢`ˆù÷aÖdz\pN†©`\%É•SÜGZÁyX2lޏàs˜W°e<+ã9 êÁÌè˜îDf™E#É$³Lݶ™-¡ŠÍ¥YÄaÑ“3gi—P3zV¿ ‡L=ee=ÊÃF<©;‹IpML¤2Và•üTgÍ2Ža†F › ”ˆzGSV<4«'"³PJ8×íÁóÝ<¥›f·‚íé#/Þ^#i8}ê´•ÈÚOIp¤¢k˨‘dã™Ä ³&ô“ñHRî×2øsNèvf ‚Û²,ty}±‹ùô’›ö Ø÷Q"ieBÄe‡õ3ç%„V‰¨Øï1fG,#í©dOûiJ^¬(—6Í(`8,!Á—0lGÂŽµï$ÌaGœÓÓ"p—$øy<ëãT¢B0Ã&Rš´u”‰–Šè²€2³ZšW—G0!¡±@Ûb1“ "æÄÓuÓ¡Öñ¼Œ$LnÀùÿ+S5“¤sä‹3ꢣښ¸ÖDPÜrUY]Á‹Á¹[JŠ7 ŠšŸ¨Ö#fÛ-]]]ÊæÄr€š¯w¢{¥Û¾âØxAób"KÓ¡â+Ï×*¾Á·N‡„æÿæF¾e‘Fà2#³t‡c®*®wÓë4‘/Îñµ v´ÂJBR¨ÕVyWûŒü…õZa-!S™8Îæ‚Kãcõڪ!çÆ'Íú’ iLʰ‘H›l\O°RaÇ"VÈÅöµï£tš%£A§¶Òº}½1™³Îò[Åz“A Üõo%ÖˆérŠ]d‹xØ¥µ¯—ÌÎM%òíÒ£Ñ5>½”¯†5œ‘]œOÁ}kÛ’Ô’z6qÕ¥¬Ð´‹¥,J½„#«ð:½þ 9-úæ§  5|D°‰§6z¦A•ÀKgêD:ï'‰E{íõà ”-À^‡;¼ Ïux¤7.tÒZ7­µð¡•¨§µ!n—µF┽ý`Ñ»Cùwmy$w“Ç{p8‡ã:Ýã¡=ø ÞEÈÆ÷/Â'ÑØj¢C¹„ß t»ÝÁލ¸ëêwþp_%·X/Ìwb7ý.ÕÐDî!Ç~2@:»¡â^Ü'Âåá†pDÀå§nô˜eà¡QOïâÆê™ò%org/hamcrest/object/HasToString.class•T[SÓ@þ¶mš6D¨å&‚^°!*ŠJ+(Œ:U¨ÌøÂL–6Li0MQÿ•¾£3þ”ãÙ4MÓ6ÍËîžË÷}çìÙüúýý'€U¬'M § ‰¼‚»X–±¢@‚¦àî‹Ý« ñ¢Ù0 †™Lɲ«ZM?6lÞt´7ºcÔ¸]Èî1Äž[œa¬d6øÛÖq…Ûe½R'Kºdz}O·MqöŒ1§f6{ñ¬Ê7í¥Þ,[»Žm6ªBt¼½ÇÆ0®Âu©>Ÿtè–.â)–Ë… BȇB—KGú©®ÕõFUó„‰èä®YmèNË&Š•ðÞ„§Š†r7uO¯·øÎ!‰ÌBw\‰…ì`6݇n8-½.Z;À¥R¦3´„fÔºe•M©Cz¼_,¯ÒnüWõá±Þä2ƒ9CÕ¤ø§âçÝŠÒaEo SýTqÝ‘ ¯Ã {Á·ÛàŸ3e×jÙß6Å,§c»"Âé‰|4ÚBçd²”Ñ=¨PðPÆ#k˜a˜¿à%ˆðU<ÁSWDÎì_T3<2Bƒµ„t›BªßÊ ŸvÅL´aÙ\{ÕÜúàŽ¿ÌÅZ¶úfÆ¿–PUX¤ÿZâ“ÀD±ˆ@¥Ó>b´”\>ÍÒ‘3D¿Ò)ŠKÂÖöPÞFi7åÇr‘\FšÐÆ{|¾o’|S´`šX¨§ç;²‹h)ŽØŸ.Nf@—Jò©$\Ål•äS ßœOuä^ǼGµEØ5ùÒûÜâýts.ÚrëKÒµLº”zÁ…^ô ×‡ì¡GèÙºŠ¸écÝJ½ ŽÜ&ÀÚ$‹(*žËC¢_c"€÷Z2Þc™p1ÛÈK¸ã®™?PK †>QOÔ¾üUQ org/hamcrest/MatcherAssert.class•UëRÓ@=Û–¦¤iŠˆˆ ^{¡Ô»H±‚^( ¤ƒ£ãŸmY!ZÚNš:ú*¾DdFÿû(¾‚3Žßn ¤ÒЦ3ÙÍw=çËÙôû¯/_\ÇŠŽ>\ ᪎^\ “円›:ºp%Œ[¸­cwB˜”Ù¦dÄ] 9™vOGÓf4ÜgNYËÉ1øã‰U†ÀluM0ôä­ŠXjl…]àÅ2Ybùj‰—W¹mÉç¦1àlXu†á|Õ^ÏlðÍ’-êNf‘;¥ aÏÔëÂv² :W»ÂwRñüþŽgʼ²žY.¾%'Û6=+áyÉið²l(‹AÛtCÚ—P/ìµ=èþB!Û ùTšœ9rw›Öz…; ›&¦ “‡Aäâú·"’Å]/gÓ±­Êzö¦^õ’mÕ«Zaj |pà#ÄA[𺌊nÉ1^z»ÈkÍ!<éÀépî?°h“öR:ºÝ÷¯À³—¤³Ú°KbÞRºjQ˸¬` †c 0p4Ìx€9†3-ýÝòæ <Ä# <Áõ™{_#>bmrÄ@‹d‘W±áHË– Ï졜³íªmà)$’g4ñÎòfèýs~ ýíâ÷åJæx›C É vz³òÕj¢²Vï©Áx›Q'þ& HóCÝ›¤…2qSÔ¸Í*¡ë'ÚIæ˜Û×Snù5Ãxk7S”_»!Å£±¸j.ŠE«®&Â9ò£à-!5rª.ÄÃ\Å(}û ¯˜TÝûé)C+‰ ]Ém°-ÚøpœîAe `Rx*'0Hk7Épˆ¢dò+øi„b¾dê3ü2߯òueB£Ÿ¬1àÆá†ˆNã Õ=ÛâÙ÷’ïœBs^u¼Ðìøƒêh5ÇR;øð »èz±àR:¹͇Ï©5Ö­–±ècX-ÏÇRé~ì"ò"ý Ñmô|ÛR„%øq„Ö˜:w‚E=äë¥?“>äÈ3OV¾$˜¤Ü¦q—"ÄeÄS‘fj'Iû<¤MEzÏ7J¶„5ûI…]þIÅ?Õ|]fsâÑSaHôÉ=èîÜ£ªùI3D ‡=³îŠb iª—PY,BÛqÕ*óPK †>QO;I; Áorg/hamcrest/BaseMatcher.class•T[OAþ¦-´´…–Ѝ\±¤"â…" B|LlS^šéîX»»ÍîÔËâAŸ|5ñGÏ^¤—Ô&9sÎù¾óÍ9“ýñóë7kØH"|…±ä.ËIÜÃJÅ8îDZdžÁMiJµÅͪ ±K ™=iŠƒ¶Qv…×›äÉíYoV¹-ÝsàŒ©cé0LíYv£xÌ ÍŽ*>çŽØçJ;v‰a¼ø¡õo³*ˆÉUÛ&{g³²®±õ·²}³M–­¶­‰Ò¥ÏvÍoÅåI#‰uðwfãXKã!ÖÓx„ÇqQO‘o pÌÅ$org/hamcrest/DiagnosingMatcher.class•’KOÛ@Çÿ›8q캅„’RÚÒЇ¡ÂÔKEêó’•—Y9‹bÙ߉ Z‰€Uuvã’&)­êÃ¥ò³ ‘dÂPkG±ïxàÅ"IÝO’ûa”ÈÐßå©7qƒ¡:]~vò ñúµÍ^¯Ñ"€hŸº-o´ù)w‡<ôÝnÿXxic󀆑©Ô sY†Å#‘x±ì‹]™hƒûÌÌ,ºæ$•QØP»Y ²âß «wýwº…µ'ý§£˜vó¶Ù{7_ßš|à‰˜Ù•½bO|‘jÁÕ¹•n+¤ƒ"L/¼DÕÁ1¬ýý)Vîê<›šÚÑév>ëô× >L5'Y"ï=iFºPÿvAFÉ¢–`“tÆp,àþTäé2¿˜áºTŸ#mÕ·.‘û†üù ÒÑÈêøP†TVÊOàÖ-| 3ø!‘òj¬úÖBŒkk^™nUÑüÚøÜ-¿”ñ•µ¬»O:•Æ C½ù9¬hù«Z?ù PK †>QO'õ€ý!!(org/hamcrest/CustomTypeSafeMatcher.class“ßÒ@Ç¿[à ¥È‰" çÝÉ=|R‰951áôããRöJÏÒ’²5øì_d¢¹¨‰>šøG©ÓQÐC}ètvg÷ó™N¿~ûð ÀÜÖÄu•$ª줠âF»ØS±¯â&Ãæ±=£bfúöTÚžËëð—¼åp×jõ¥o»V›a£c»¶ì2lÕþ × ñCo$²=ÛO‚ÉPø:"Äy&wÜ·Ãõb3.ÇöŒa·çùVkÌ'¦/f²ṳ71^MEŸ‹#.ͱðI<=ZÎ/¿ ¤Ó hý?hÃhw ™éKn¾8âÓènÔƒv&4†ÇP®­ò–šU\\fHõmËå2ð)¯»ãÞRÓžO„)ÛÝÕëkòÔú^à›â‘X<·¤ƒ­#:ÃÎ/™ÇŽ#,îÜ÷­`"\ùpnŠEËK©V&„¬ EÅ%ß §’t)h*:š¸EØ7–¡ô·zhÒ~†X-ìca]©z> wdˆ¹d88oòÖƒx•†=Iÿ`X y ùTÙ ­^#F;@¡q Öü‚ÌG(Ïs±SÄ?7šïxC±8.Í#A¶D«2·‰WÁT‘b›¸D^Ž´.‘*Å.Ó{‹ž,Øw: ¨È«„]*àê"¡¡B˜Þl¼Eâ=6< “ˆEIhQl Ø_Ö ëÄ-®ë a×"[¢ôÃ÷öPK †>QOVõgôû org/hamcrest/CustomMatcher.class}SßoÒPþnJ‘‰Ù€Í t<_„èÔÄd›4/åZ:KKÚ[ƒÏþE&šEMôÑÄ?J=íÐÁzzÎ=½ß÷/§ß|úà.îhH£ª¢–F]ƒ‚í Tìdq7TÜTq‹aý¥=£G"0}{*mÏe(ó×¼íp×j÷¥o»V‡a­k»¶ì1l4þnï’ûÞH0älW…“¡ð >tDç™ÜpߎêùaRŽí€¡ràùV{Ì'¦/ÙÞéM¹4ÇÂ'ÒìhQWqèÍô7Xý?(]Ãèô*×—Ü|uȧñxúƒvJ0†Ç°ÙXÆY0%ž°¼ºÍéÛ–Ëe蓞{]ãþ‚IφÇ”Þòõ‡<ç4j}/ôMñÄŽm[c/‚Ó‘Å.ÃöôSÇwøV8®|<3ÅܬꂼZ0öBgTŠšK•:N=ÂÒud ©hêhá6 ¸ÚF†Ò*õ´Cç‚!ш+­2ŒfåÓ©pG†˜I†½íÔj·“uZã4m8¹M@™B9 D1GÕ[$è(5OÀZßû åE!q‚ä×fëR益ÄŠE¤(–©ºFˆÂÛÂT‘{1Öqˆ³q1\¢bMÁóHD"¡Å½D?æ±þ‡X'Üò±>'VHv+ØŒß[¿PK †>QOÿxq-üorg/hamcrest/Matcher.class…QMKÃ@}ckckÕªUÿ@{1ñbEPª§ÁJ^–M2¦[’MÉnÅßæÁà7±â'º0ûfÞ{3»Ï/OÑö°éaËÃ6ÁK¥ 'l;ÁTÞK?‘:ö¯‚)‡¶×½%´"6a®*S6ü_ZYû™†9ë÷KÎ̪L÷ºc‘ˆ2m…Jg §ì²ai› !”6–e$øÁ²ŽÄ¹4ü^$T:»ÑçYΡ´ö®çÚª”Çʨ á3­3+ #·Ãî§¹>8=B}¤b-íQO)lșٙ"org/hamcrest/BaseDescription.classµXkxÕ~g³ÉL6“Û.I¸#q™ DÓT0 *6@51”‹Êd™l7»ag–‚õF‹PïWÔô^k›Vm Õ& V±¶ØÚ›½Ø‹OõO´úð¯Oí{Î “ÝdYÔbžgçœùÎwy¿ï|ç;ßäÍÿ¾ô €Ëð×:pkÃg«° ·i¸]ÅâýNw‰ñ@*>'fŸWqPŒwk8¤â°†/¨¸Gý*îÓp¿Pô@â! kxDã*‹  ¡#”ã Oªx*‚¹Â想/jø’þr_ÁWåk|ßROWá›xFÅ·"X‚o Êh¾ƒïŠÇ³*ž”ç…æï‰Ç÷5ü@ÃQ Ç4üPà *^Tñ#c *VÙiÛíTP[Ò§ Ü•Ùe)¨í¶ÓÖ¦ÜP¿•í5ûS¤D»3 3ÕgfmñîÃî í(˜ÛÉ&ÛÍ¡DÖrܶ5¦c­µœDÖvíLz¥‚ˆ95^ŸK»öÕg;6!­N§3®)ÖèÌÌ|}æ€EÌlÒ¡ÔÀ‡„“GÙàZY„ÒðŠIuò*ºÚɵ4€ç4TöÿŸœk§ä2>E •„í×Tïø®(ãxÉ &ü8twô|ÖJ:£Ø 4¿$ð+Û— ÃòQ»ôÁ¬•t©ÂÛÖáb÷¯ZeKŸã²†c]‚ »™kÉØ³?íšûxÁäÒ™ì麵„ƒéâ¾÷drÙ„µÞůaÒ]»LXÒqVêÈ`XÇ8ŽS:—J)¨› C‡‹aÜ z× w Aÿ…¸£ã^L,d5Lkö»–ŽØDTýìjóôfDu9Ý™t’ÔîBæõ©Œ)˜×wê8‰—UüXÇ+x•nn'µu>'7*XTc;Mpi3Õ¶:›5÷ŸÝ)áñ)×#¡ã5+Ï¥àêc1ž€59;µK8û¼.<þ)M^­ãg8­â ?Ç/t¼‰×UüRǯðkaáf¿Ññ[¼¥`yqd…i"ïØ|œ¿Ó‘DBÅïuü¯êø#ÞVÐ\"Ñt¬ÃzÂiÆ_š Å#-YñAܱCÁìRmXÁþ{KÁ¬s%0óÌë=ú­Þ ›¡Ø¹S]¤ne‚‰ã·Bl$™¦ZÒr»R¦#.ôX~"‰+ ÁçSmGîªT±mÒÁ9Û\И*;Ñ©4²É!V´ZZ´×¤ZÒ Ä¶Í“A]—ª6U€ª @Õ j ag(A1PýüñR÷äx΄özä$–lm ƒÅ$>Ê yPê(õ”úJ}¥ž†w@+€2@Zò<1™dÛ‹É`Äæ/Ää-Ž;ÊÚËei`ZŒ`át–Íh‡U—*8…echÛn/}ïcéÙB–ˆBãó&bØÉ™É’ÚÙ´gX–ÓývbÞtzöo:o:o:o:°[†µŒÇ÷ôò<¿ÄÚ×ÄYÐPö.4eZƒïešt6°þ9u(/´5•]9›N^ò4¢F|ö–³ )£ïýëXù(%Å9Š Ë+a븜ÉfÒæ‰±)𠉜ký3Y‰Ð»)ÿÁŒ°àH0n䰤ūٓᰘ{p¼å PM2h·ñy;êXç9ÎÃ]¬‰pZ¸–\ Ó¾œ&ÀIPŽêÿ:K6?'Ev2ã*ùÛq§AòUó·Nî´ø'xä-FôRy´ÑËäd‘]!'MFôr9©7¢ír¢Í^µK•™à‡X“voÛ{yÏÞO¼°ü=Ä”x˜uçQ&ÖcLª#L¤'óêu2ð3‰½øL৺BaöÉ-Øÿ?PK †>QO"FKWÇ(org/hamcrest/CoreMatchers.class½—ù{ÜäÇ¿o|ÈVD !$1! Žc²m€´à­[c0u`íjÕ®e[é®Ö‘´†„”´IH¸ MzЃ= ô ¥-é}Ѓžôüúcÿ‚¶3ZY+½ûjí ´öóŒ´ïûÎgæÍŒ^½üï_pþ¡c#>¬ã#xŒÅGu| gñ ã“,>¥ãÓøŒŽ'ðYŸÃçY|Å“:žÂÓ,žÑñE|‰Å—Y|…ÅWu| ϲ8©ã9<Ïâë:¾o²ø–ŽpŠÅ·Y¼Èâ;:¾‹ï±xIÇi|ŸÅtü?bñc?ÁOYüLÃÏ5üB =k;¶ß/ÐÒ½i—@ë`yÒ8{Äv¬ÑJ)o¹cf¾H#+Fʳ¸Ëtmþ¶ú3¶'pÁHÙÎ̘¥‚ky~f°ìZ;L¿0c¹^Ÿ@›Y,îœèíÙkΙ™¢éLg†}ËeFߦ¤n¨Gj¥!°R¥(°*éÒþÙy·¶*Ög•v²—õõÓ¿@gΞvL¿âÀÊŽ]cìÌïµ ~_¿j pÕÛ˳™î õöS£²:EAàBõLè‰ÀM){j¨ÖØý®[*Žo—¬]¶gS(§ì›¾]vè™­ŽÙÊ™S=&Ӯ想Ÿó!³˜|(P.eX4gþW¥fe~k[ùdþå^‡×»Òš/û3^8o°\ÊÛïïZ 9ưãXî`Ñô<‹BŸë^¼ë5b¸jƒÒ¹¡•æÍ­JKÁ‹Òö9rC.ØÊ,Ý©aCÍ×ày62ÞnÙ> hø%egmíP0Årüu ^KÖþŸ¶ž°[ÛüÒIË+¸vÞš¨fH¬:}×v¦ûÔÛž¨÷8µ7…6f¹ð £Î=ƒ9³Xá=W®{‘HíÆ[¸üí¥ŠYô†æ­vZs–»ŸúJI`Ëâ’#›ô¢ÜJÛÞx`ÈÊŽ7‘RŠçª~¸9P`;Kø•=šËôP4SOw™Ò¤A2G¢$h!¢À¶i²±#-¶7 °)îNÐÓ½iõéè °¼Nƒ[46oexá\Œ­oìq½é åL ¬éNõ²7e*«pC~aY¤²U5Ô”5mÆôª%²¶ñ)dª©¼kxQeyí8×jîìh:c;ÂR ±ÚöÒwv&ç+•‘ ›»›iÊmvÕÛÖ‰ ¬Òâ1Ñ\@"g4k_Å,Ž•é®2‚~ÕéÔî Ï,YáKôfóéxk‘ÊRzÿÖ†—ÊŽo’çÕª"„WÉ{áý™•]¸H‡”u2äxCÈÃJÈ%2ä±äýä%d½ y²!äQ%äRò|ò rB Ù CN7€,Áƒ»á:º® »kñ8Ñ…wÐu]ÿPK †>QOgÝVâª!org/hamcrest/Condition$Step.classN1nÂ@œccUš´¤ÁEºØ¢!YBra>p1'ç9[wG¤|-È£"Î E\e›Ù™ÝÙŸßï#€WŒ=kV=<žÛã'™á5Á¹À ‘’«EÉ´æš0¾ "<µÛ¸BM‘Cè±¼gY®e—ÎCÿŒ>†47®PK †>QOû?½ “$org/hamcrest/StringDescription.classS[SÓPþ´M›Š\ŠPÀ*^Úp)wåªPÀq¦ÀŒepxLÓKRÓT|òïø*3 "3úîrÜ“–’B|ÈÉž½|ûížÝ?þ0‰×Ò2Æd0.ãÆB$MH˜G=%c3BzÆ ÌJ˜“0Ä‚Œ, Õ’„— ÍfÅfˆeÕjº¨ûéåR‰5_äó ÝÐí%òK¦v|³À¢YÝà›•£<·¶…#C{ÖÔÔâŽjéâ^Súì½ÌÈšÖ~ú@=Ò,^¶Ó9ÛÒýU^Ö,½dë¦Aiz’ÞDΠmVCƓנxq¯ ”'û|ÊR !èÖrƒCÿ­”O-_æ ¨†®äMhÁQ•]U“n¦ßl­}ÒøeMÍeÛñàÔ’³Uíý†ZrEOC½Jf@¾ CgÒ³9gV,¯ë¢½±! Ý×#W*z±À­:Ñ%Žxíè`¸ýa"x…e +ôaXý2<Ä*C‡GÑ ½W™ßV [?â.cQOàxÌ-aqorg/hamcrest/Matchers.classÕ[ |ÕßäØ0 7A”+$Àªˆ 4 A! —€²I&ÉÂf7în ààÙXk=êQ­G­U«V¼­gÛªõ¶ÕzÔVñjµZ±ß÷fvvæí›ÝÔêÏ/³óÞ÷ÿþß7ß÷Þ›÷Æ'wß}?cl²r®Ê:àV~·‘¸Ýw¨ð[¸“Äî‚»Iܣ½pŸ ÷Ã*<¿#ñ‰‡Ux%ñ˜ ÃïI¦©§ï™8À´ªpXV„±˜Ž/?µ.ÏLf)‰hö-µ4|­ sû¹¹S=·–3Þ\ŠWžŠ¡¹K-ãùz0Ž7|ÊQø˜ì[ÉïZ![ÚM1rÀ¢õã¿#×v“Î÷lÔc Ñ`½ÞXf$‚í58 †›] lU*cפi£^µiW&Å>ƒ P;¥â 0°}Ó.Ýb™`é|1`²v(aµ‡¾An•]+°IÙ%‡-$AÔ³rËͽ¥Ü^ºÔC~p%æ²i W ; í‹Õx³XWyÈ”<žÎ±’ êBÓÉ ÆÊ€·Óá ;›Üø¦6$Ó/EùÅÇï•óEqæL´z§g[€¯#ñÌY`CŠ\Npi*•Ÿ…Y®Ø²úñdÍ׈åÑÔ…×C '7EsƒÜÞÏ9’¶ÀôëC³nÌݳ®ìRÊ8XJмŒ¸yAƒmî*^3nñXå- Ÿ~l{ TÁ«H6Ò®e/óž.¤OúUž>9X´]*–ŽY UÙ–Zc” ÇâpƒN9áÒ×PÖ´‡BËŒ©G8y­Å­z•©SW<mÖQ¥'N°ÉÛ½"áxÒAˆX{}̼îZm™‰ñP'zUs8B+14­"‡h<¶ï$Ǫ·¦ÿz¼?°#05¦KÍýåÌ'9=›£:fF´®%€©2ÐökaÔb\Òc1£G¿Ä¥­y€¹]íÜßì­w´a¦ê‰MÛB¡ÛòœgkÛ´Ã;Ìl#fLh6^<Fi9—MÙv/{rˆ„ò€`¬2²—y7ñ»_=¢¬wöéÉï%~õ67q%6b÷1¶¥+¬µ…¹¦P­k,iùçlRÚuY÷õ çH¦ã«’ÎÀÏÃ…Eœ"ªõp3ß.™“³YÜT´¢µ˜3z¸Á%z"T]$ñXúÄÍKkQS’y¥f#v´·½`Ã,»¾‰âHr®Ìúä==t:iå#A'i6#õxØÃ‚KåH\ÎR"íQJR —ØæØJR±{…Srïž-·Ò4+¼ÔIQ(—Eé4öp´6ó²&Њ8"ëÏJ\C[(gTœ6ó³3šù0~ ø%¼ãëÃ}-3S9/C”–(¨rOSAšdôFÓP>‡É©+çËÄrù2±<{{¥Ø9±Ä]C?X^‡ñ·ØËø×’uX½ øtwãäc¤Õ_i4ÆÇ&™)ºÓáïh ùÃøPb4×úkW4…éq¯ÉÕ7,›!`çv/É=š—³e)À¢.{äàÆn†ta®Öò!wNvO{%Ži'‘!mb›}Ê*ÄN&q&–µ Ú§¬ÖØ•ì*Wû”5»™Ý¦±;ÙÝ>åhÝËîó)Çhìö¨OY«±'Ø£$vjìiöŒOA;/°I¼ìSê5ö*5¿JÍo°3I¼åS4ö.ÝyŸíô)û€=£±I[רG¤ðµ4ilAí¢æéêcêÓ¬±OHû3êÓ¢±ÏÙËû‚Ì5ö%ýøŠ~¬ÓØ×ôãú±^c»Ù·>%¤)­JاD4È…<ŸÒ¦AÚC±Sƒ^ì-g¢€þ ¢«A0˜®ô±ìK]÷…Œb/ú”¨cèκSDwbÓbáSâLDÒà'ÒíL¦SèÇ ¦’­©Ôw*™™ ý}ÊF fÒ™Ô6û” ÊéG9Ý.§>›4¨ ­ ²°Yƒ9ì\P­Ábº½˜ü¨£«:ŠÎq,'–ȺZCWÇXKN¯Aê}Ê 4‘'ÒEƒõÒ B¢Ä±$¢ò)'iÃÀ ìÉ>å 6’k›Hl&qAªÁñôãú±UƒÙ·$Pç4 ¶` Â8Õ§œ®ÁéäËl#ÞÛ¨z{j›p rf»SãYø.õ)gkp9\áSÎÑดÄõ(ˆÙ5p®ée¹J_qv˜ð9BößÐâzÉ›®ðMíàTí2㾕µÿΨ,,žÚk¶ýCW ~%}Î) ¼¥ †Én—Yßè•5'^}ìBÊ:ò·R`ûIAlŸ&IXWÅjès¥!Ò|tiªå벑©MµŽWA`¸u©µ}cäŠSi}Y4ޭ˽¹=ˆVvïдo58¹Ìt|úCû>øŽÀG÷‰ÒYÎE§†¾¹6Æ­oç™ÅŸà¸ HÉ xWĪ˜ã |‚{¿ä\²»J[÷JçYgZ²•ÎÃÆÉî=SóØÚ"8Ô›VòðH82( §Å™µ“ñJ| öâ‹Ü•0ߤg”Ø‹,”·×jÄ\0Û’ÛnÆXY?î5/KÚ+ ÆèÉ:i­”Hœ[Z“\û¹ì[*Ø·˜¤=Êí[L#S{,6Æ¥vqŽ=VŽNíißJIlÆ8YEøäæŸkßa-ëA5–Øw06¤@‚ä.s ®Ç··YJ¾ÿŽKßrÓa_ö#¼n7ÙÖiµub›ÁànõǦÕ´šƒæÛ¬®Ì› ³ìç–Gý-ËMËtu!^)œC²W§Õ«ÓêÕ‰½ 6?ál.2ÙœlrñïŸÀfeþD£iœQ±¡c1b1b2¢«ŸâUç–ìßiõï´úwZý;±¿ÁòbÎò“å ¨ŸGϽ@Âr¥¯0WFµŒS=ÄP´¨·¨·¨7©ÒÕ¥<$[š–f§¥ÙiivZš¨iпŒÓÿ™Iÿa¼ŸGõŸ¹ÅeAažÌ‰y܉Y†ºåÄ(ˉQ–£,'F™NÐÕåx•ÇÝIbtZF§…ÑiatZˆa8v:†o½’ÚÏ©×z¨ýŸc ã{´¤öóEØ5jÿ¡ö¯d¿H_û)Öšö°ö¯åV¯Ë\û)–#{¡ö¯çlnÈ®öSu|GµÿKÎòFµŸBõäï±öÅéßä¹öSœØþ«ý_£c7³Û$µï©_à(ÒÛ9õ­Ž;wXEú[„½“Ý--a/ó{Ž ÷²ûLØåˆC¾ùŠK&ì`=Dà›lÅæc÷³x˜|Üð«ÙïÌbÓÌ;·³‡¬2}x„=*ñAMÝãðá±c[>üaŸÂöaÏš‡,Ø'9ìN ¬&Â>ë€}ŠýA€}ŠýÑ‚ýÂ>Íž‘Àöa_sÀ>Ëþ,À>Ëž³`ŸGØØ‹&ì0Þƒ±Ü¬7¡‚ õo¦ÆK\ãeSÃo#Òçæ\Ýîr1¼ò ‚¼*}_Ñ›Ýi§û+‹}?z9`_K‰ýk¶Ø¿ŽÙþ†tñÜ_„u.žßL™@ß´M uL dâ-‰‰¢‰‰océ8M¼*aâaŽ~Wœ¢‰9ï¥ç=!1ß·`íù°P#5@þŽ H³{ÈmMÆìþ‡ûO„ýP ;X„]ç±h>’fïv£Ç‘ã#é*aOó8rì’•øP¡Äá|[‰ï’†m_‘ÈŸÆÇ2"ÃD"×Ûˆ|,%2\$r‡G"ŸH½Ÿû öÓ”@*ú3)ìv§GØÏ¥îH±À^rÀþË6àþA¾‚ì/‚¼“äK)È"Èçÿ _IAF JNZ¯¥ £E¾ÿ ßHAƈ ÃÓ‚ìfßJ@ÆŠ ì Ø  p“ƒM'Á™aÃ)€™mt¨(™EŠ„ Tæ9Èä‹Þ±&*ð9g:¯”$ùxÑÄ ‡‰â؇w¬™T+«b¶ÉÛS¬¼cÕh^ÒiµD„mÏ4­Bo ¶sæ¦[‰‰ ¢‰­™Ð×2ÑOˆy/è/ ÎDÑD§Ó H11Ð2±2$e>I„½q˜‚Áæ~ÑÄÃó!)& -C9sÙc=P„}¥Ëµ¶K˜$šxÏ‘ÃRò|® &ö#X!Cw°ƒÅ2w ¡0ö·@@Q²‰t²0‘*»MѨ1FêÍ!‚79==x3–`¥ÞL¼ÉâêÍ8)’ys¨àMΦÆxÔ(–z3UôÆïÁ›‚•z3Mô¦ÔÕ› 2QæÍa¢7sLI¨á—.r¦‹Þ8výà@q‘ÂA‘ƒv²ŒÈ ‘ÈjSãÔ˜"%R*iñ@äP,Ö©Òb)Âvx(ÖiB±N•&Ä,ÑÄ™^'á0ËÄtÎ\6@.Â^äa€œ!2—íGˆ&®ó0´—"ó™Ræe"샙˜Û³„yo¦ô±–‹&^Îþ‚3S:{Tˆ&veœ=ްL”!ór)óÙ"ìî.'$™Å¿R0‘Ûk2§\š9sDÃÙ‚j™­y¢­[ øŠ”Úè½ÜikÔ$Ú`¡ekÚZ,ù|Ñ”îΑ)17œ1`—pXÙšºZ„:`¤¬© Þl-ÂÖIÙ.a·8`禰¥€'`—rXÛöìL»Ûì2„].Cа;خǼ³Ò‚=Š`q I…]$Â^ë€]%Ž!x'9ú­FØ5È6uÜX,ÂÞ‘ [8š§[’ó鸷D$ÎðÕ8âƒà¹)àµ"øs]w­k¥^Ô‰†ÞòyçЀzóáN7OòòÇí`KÅÑê{í³÷ Ó·F¼2OAG¼&ÙRl™°ËýÊÔhæ Z,¶Ñg¹À O-Ak„Y‡xë!$I×BÐò;‹ ZÅâ²½^‡6"…])ÂŽñÛ&…=J„ìöX)ì*¶Ì#lT »Z„]è6&ÝZ#fÀjGžÇ»SÐŽ 9) G‹ z*ˆ½9Ô)ŸcD¨iùl”UÂZ¡òN6ÃЛdQc»Mc3jäˆõ¢ÆEŽA†ôŽ“é5ˆzW§è/cØ(êÝdÓ8A¦¡‹wÚ4N”î26‰Á Ý.#}ý.iAžÂcút^’í-b¶?ï9IüFN‚“-n§à¨¾N•p ŠÜÞvÂÂV ä4ävºt‘¹NùÔr$™g"È6éòf½èà·í)Ë›íp–{6‡•?$pË×°ç$ƒç"ÈyÒ7ôV[~¡äü”7ôó“ç!ð#„í„ LØjûlq‹kÝs\ººÐZë° ~bY¸ˆ,H #¢÷SÄ/LÂOäbiÛDrÈ%B/†Ke¾+úºØáë%æ‡ öwˆ„¯sá2k®ý¦òåp…ÌBT´Ðè°peâͮ¬vZ¸~nùp5úp܇˜h!æ°ð‹´>\kùp·p=“}ßMœfÿ¾Ã2áƒà—ÚÇ9¾ïàÆË£ɘô¹¶‹ÏÕ±½mš2@~Å'> r¬˜6ˆ(W¹ÄÄ làýÿ»™_ÝÂ~ƒéEû¸‹ÝÊ Ùü{+üPK †>QOorg/hamcrest/text/PK †>QO-¯x›–*org/hamcrest/text/CharSequenceLength.class•T]SÓ@=Û–†„@¡bùR)ŠØ jEÅV^Pfpª<”aÆg–¸4aBª!EýWú"¨3ŽÏþ(Ç»IpRHTò²wïî=÷œ{oö篯ßÔÑDi³†P‚ŠŠ†*,iXFMC·Ü‘ë]u†lÓr,oaªÔ꺚É WzµçÜ3Lá6Ê; ™õîkÁkYŽxÑ;Øî6ߵɓou nïp×’ûЙñLëa¡Ïï½ÚºÉݶxÛŽ!ZÂéxfƒaØö­0!C!žˆÍöáÍiÆÅ؈æRkŸñšÍNmÓñD‡PÖGm[‡{=—Bkñ²be1Fö„»ÃížØÚcX*EîF6Ê1 Trnx=n3L&ÅE“’Ù,'•$k‡—Ø&C=éb3)‘¬ÆrRã“r¾ºXÉ.Îh!ZЭÝ}ax}¥ ] Ïú±7‚Æü+EÂThínÏ5Ć%'jâü¤.Ë0†i^ŒžßYžY º CÇ=³XQp_ÇQO 5R±p^%org/hamcrest/text/IsBlankString.class…TkWWÝ7&™ŒQ"V|´&A™ Õ> Ø€Q£1A&‚´]‹5®aìd'“.ùOýPe-¤íÒÕÏþ(—çÞ Ä¼ðËœû8gï}ÏÝs?|ü÷=€[}Ú<*q ^¾á8Gèmç.”^pË—çŽ,YNÐåùvŽâ^‹®Ì¥Õ†gñ{¶¼ˆ6o͉ ç1­á¦<ÐÅC4äð˜ìjÎH¥3u™¯ ¯¡€5 gpVÃÆÉ1¤.á2ÃÅ/øšál¯†)x¢a)††"ž’µ~¯§4l`“aú¤ã3Lô1*ƒR9ÊYø¼Ë«»¦gð— îZ|1ÙåóÖõv!sÈuù ÐmMös]„Y«qw§H­`˜ëåò“¬ØlU=Nýþ¡¿Ý¥°a: ºà‰î´´»WxÎ0h6ã|â·Þ.î oÕ»bU+5é =…÷{"p“ÞÃ8½¥˜¦¡Ñ”ð H)C˜¤9YÆ Íȉ´sf:EFq0õìµLýоCrqé«50#a™°]P|‡²Ccoš=ÀÀÂu@œ—ãÍ´BŒ®àªdþß`+˜:üC!l¶ä¨rgQ"oá©Çx*®!A8Q$‘¢=7-ùð(Ká-U© +³Tq½WE¤³âÖQÅHš4Ü4/š£©Ùÿ=€Úyü‘Ï: äF0wÜþ,Â’2ùb[o¡íC|‡S[‡6¶„tã§÷‰bt¡×Ǻ†é®Q:û#Ú¦BßÊxóPK †>QOb܆ü+Ÿ&org/hamcrest/text/MatchesPattern.class•UYSAþ&–,Ëa8A%$ (AD.¯phRXèÓ&“¥r¹ÙXðŸ|Ð* *U–Ïþ(˞݅­TÍN÷týM“ß~ü0˜ /T:qKÆ,ædÒÝ–pGF+Ôv,ˆï]±ÜkÇ}ñ}Ð0%<”ÉgIø<’°,„ÇV¤‚fšÜÈ1 EöµšZ2õŒjð?Pwì£0CÛ¢žÓÍ%†‘@C«©]÷j>ɺ#zŽo•²qnÄ´x†4ÞH>¡ev5C²£t›i½È0É)5­e/šªÉLuS3i^¬0èÌÚš¨öŽgú"-—R£¦¡çRá©7„©›<+â;e“¼˜0ô8åFÕa׬³‚©çí«t$+ †áÆÆ ]Ù*¶ ³M²T dßÓ OTOå4³dPbÖÿ×ñüu—3X/I´Z–þÙ©AÔªÒlÇ÷y´J3W ;,pQÍæ`r4_2|C Ó[Ý3ÂCA?Vô¢Oš‚ulHx¢à)ž1øj!WJz&É †1Í_´4~«vbc¦¹ßÿ¤‚çx!–#i[¶ìà%ƒÿ¢~œ¼B”¡§–ƒ‚ŒÒ$5KCK@4¡¯AÐÜfO,çϦ{5­Qþ¾Äs NU«u¯Tûòid¹hq ²µi…Ï%¦ë6Fƒ‡kìOú ‰}»™·U }ó†d1Øh©Ol–1*ÃÌÅ-\=ÁR"Ÿ-X-Öä’u¦Wé!õÒËL/ŽhAڵўªO«¤ ¸èÈÁ#°`è+\ŸIraÖ.´ÐªÀM’†H°­1ŒË€µ¨ô¬‰¦q0—L%ø®P-e¸?ž¢Šø 64åMÁŒÑ9µ01·ÑÞ a5:FëÞÚ¼Ríº W¦}ß¡¸ðºB]¶\|'©hâ4ÐLP®á:ù¬?¯‹šç{”Ž®O5œÇ,(Å6r²yò™´€Ђ¤X@ßÐ]kò –‚)Â>Á ö¬Q.CÎíç\z‚¡_è)ãRm"=U¤ìû¹¨›˜¶¾3PK †>QO×ÑÄE:%org/hamcrest/text/IsEmptyString.class…UkSÓ@=[ iB”—†ým»Äp,¯Z”2|S8» ½ÑýÆ_Rºí‹¼,uè)ƒ‘%˳7D¶À0­=¢zVôí‚—,Ûs•Ã`ódâfWkË0o¦¡±(Šž°¸/r —šä5‘ñä³²ëÛy±j—l’&ẟK %iZRiA vQͬ'`šöReÇùí‡c5ú¦7v„å+}#s–¸9SK>»[Ò£ad eÏlexÍPNI€‰œd ˆ wG»‘’ÊÑðÈÄ2›¸„1Ýè11%w'ÐËÐYßÒÄiœa8óŸ×áD#4<1‘ʆ)¤†Ž:1 ºx]æÙ1ÐlZH^, 7—% S¦ø¨Q«-l¨”StmSÁ AÚ¬0¬Ê1iWŽSvˆVm²;ô-ïêàý Þ·ŸÀån£ªëYœ Ý “Ýá¯h áE…Š¡ž ïáªzÆA=çqê踈1„U½!Õï¡í½"]a¥/TÙaÁ“IZu9²J»ª¡Õט9@ë¸Ü¨k¤qïÈ®Sºêõ5žüCw&È„X Ýl >1ù Æg´×Ûp¼ÊE=-‚+#p‡èËÏèw˜k_pì´Ö8¾Ö²‡ŽÌš<~fŸ 8à³ïIä_c(`5MªÈuö/PK †>QOw‡òZY+org/hamcrest/text/IsEqualIgnoringCase.class•[SÓPÇÿ§Ò†µÈÅz!^¨ŠwEDű};¤ÇL“š¤ŠßÉ™QuF}sÆ¥î9 µ­€¾œûþv÷¿ÛôÇÏO_L㾎8¯a: :b¸˜„K:zq9+ݸŠkr˜I`6ëætº¿¨á†œoÊa^Ã-†® ôm·Ì^Þà/yÞán9_Pg3t;k»v8Ç00ö÷õø*CÇ‚W }˶+Ô*kÂ/ò5GHœgqg•û¶ÜG‡áº0Œ.{~9¿Î+–/‚0ŠÍ0¿,¾¨qg©ìz¾ÀAþ{ !·ž¯ðªP”Vxh­‹ ÀŸ çõÁ=%wv(* ƒ%X¾½&Vì@YîØåw±k í¶²¬†¶çªtû+¢é‚!³·ƒ¾ã½è1ÛŸß]jæö )IÑk…!»[¶­Ø¥OÞ{ÅfUX¡(¢2' vÙåaÍ'ÒÜ“fÿ~87Ó&àõ òôv±¥:ßjV|]²Jû»× ^Í·Ä[öÖð.4%Í ÄÉ?ˆ%ÇeîÌûåZE¸áâ¦%"Ňxî¤[só%wjÂô©¶/J’1` ~·1B­õЦ†Ewp×À=,QËs³þc2UÝÌÐ3©¦dZª|§ÿ«÷Rí)8ŽŽI÷GöS‹!>&µN©0…uèð^Å!1yµ*ÜR‘b˜úwg´vywÝzUªÖf¾Så½Í)1ƒ¾fi(5¦•Fk’œÆAÚ½@œ>qÀpöXî;z>#ö$ÿ€Ž¯ÙÜ{tnÑ]C4¢“Æè N‚Hib Ñé°ºS BP+é‹á0­ûÀ~Ñ6¦áˆ†£*:r ¥i2û¹mt½¡MLùë¢' Þ~²ÁOÂT|& ¡Ñ›8Í©‰´ö‰r‘ŒáñVƒ¨+ÊEd*ªYß ¦"ª\Ä)zM=…3ÿij&—Ö_†¬\¤»Õ¾ÉSšT ²ï'Â!Œ6å‘ixÌÐù)â'1†qºT@qCò3Œ'T•ž·m’L+”Q„¬*jN½™HÍ“ “QÀ$Ô³¹oèØFßVIo"éõ ˆp SaºQIØFª½:zK(õ¬bQ0yœUó¹ßPK †>QOm³›î% 4org/hamcrest/text/IsEqualCompressingWhiteSpace.class••mWEÇÿ“’l–’ ¶ºP­iBI-­¢EZ ´¢@µ‰ X_,›1lÝ즻›–~'_È9šžÚsÔwžã‡RïL–¤!Å7³ót÷?÷Þ™ýûŸß~0ïL`1ŠÏbXRÂ8R¸«P³¬ ƒ{1¬$°Š5ÑÜáA ŸÇ°ÃbõKÑlD±)ö߉bK|Šæ«(¾fö|×´« é'ú3½hévµX’s·iuÑ´M‰a<÷æòÕm†ÈŠSá £¦Í·µ}î–õ}‹ œcèÖ¶îšbLFüÓc¸¾á¸Õâ^3\îùEŸúÅuoíiC·VœZ&=âï˜>/Õuƒ“‘’¯?nêuI¢ãÐIh¶¦ûÆ÷JúÜzqŠÊ=òK¤ÃD…{†kîóMÓ“–ÇvÅ>vÝW¥eÝ7[ž;S  ÙÓ”cïe‡áRn0?Qéä&D’ê2¾+ýNÙ/{ªïÜãbT¯ó Ã.;ëUÛq»ÌïËì’¸)cí÷?¬sÃç•RP;Ê*§¬º/ÜÄKfÕÖý†KØ¥3cßܸD®.šûÖEOâî?!UoIÜx Q"7ºÍÊ/ê\TÇ`uJÉi¸¿oŠâžTÂsÂ^Å1Ìœ°Ö-‹WukÙ­6jÜö× ¤üü–c_³–¥=Ó­×\ „éòŠ`dUœÇ¤Šk˜SQÂøsÝÓ¢(«øÛ*vð-Ý@]kÝmMÆPóaR3NäiÏ…>ÍkÅ2üØ+00MÅ.öT|‡Ç sÿï¢2${ã¤â >PqïQ2…˜äD‚†¥Z*óÉÓòHqש¢íJ™ôÆ·×X÷EL´¬·E\{Ì bà=vyÝ¢Ã.[ÃB¿—ãl·3Bz”Ær}V1Mô½þ”F‘kêÅ©O©§öž"L`2ÿ¬ðF^#´›¿Dä|áW ÑZ©ÀµD0†Æ%O/É5ÉÀ;x=±Â Qì_ÚŠb:Š)…’¸_ ܧòù_0ÔÄp¾@MÑŸh2$ýÓVPïÄOªí'…÷¥&Š#@>¢=aú&gÓ±Wˆ‡Px%„£6Q‘”iR6#©Zk›š ¨¢—ÃUÚMï ÆÂ>[H'$_(—.ÒªwxJS´@ÚTR—!ÖÑNΑm{Ìb–VÄ9è*~î¡Q é‘ô¹&F›Hþܕٚڦ©(Jýq\LJD¹ ÿþaiÔ.å:Ý‹º%QjknÈR™—¸›rç-šýˆp¡³áôÁ ä2Eäãà”7 $¢¯ä "3ÛÄØQIí )­3á2Â|¸$41Þ[:j—”VB˜Oð©üÞþPK †>QO£o”z{ -org/hamcrest/text/StringContainsInOrder.class•V]WUÝw’L  ‚`!!@´­ å£"´  iiýè$`h2aÍL´¼ûâOðÍ7_x¥Ò¢k¹|ö'øO\˯sï 1 âËÜœ³÷¾çì{á׿~üÀ ”ãHà ]XjÇ›XnÇ îðÏÝ(ÞŠ#‚·cȶã¼C.†ÕÖbXçïÅð~Ä)5Ç>ä³Mþ¹Å}†¸S+8®mZ;COnOÿLÏ”uk'“u [/”99oîXº[³ †d@È|Ã^^`Í-RZdÞ´Lw‘¡/(i.µÉ^®–´3gZÆZ­R0ì þƒš«õò¦n›|ío†Ý]“T¦rU{'³«Wжá¸×xâú´ËUËÕMËÉZëvɰICo3ÎÁþ)VúÒá:;*º[Ü5œ¼¾m”Éó‘©T©z5ùÎ…00Ò/oÛÕJÖ*Oh%𼫯êûBZ[ÔSR^2œ¢mŒUÓì§Ü™î抬ˆÌ}׬Z^•Mר0tW|¤†ßZç’;NElT†’Ó´—qNPK&ƒÍÐ ½*Ê͸qù>B´ðf:ù0 ƒ­Dt3ܾUð:C×YxÚ>×m$Š’ÛäözctÍs†Vô¨ø” Ò¤¦`»tC4ÓÒªž_Æ/yÙ¹Èç£0ì᱂)L+ÅK ƒU†®©Ð^sͲg/·J›¡$/¶zÞy 1³Õ›LåÎgSa£»º³FJu'l‰EÏi|c÷(ÚäoÁú6<ߨlŠžˆ«­LAMÔ÷÷ «´!¦ƒÞ¥‹.x§—½©—kFÎtb;èyù;­nu3u׿¥[²mý€^ƈîx"®5]­SŸ7›‡Ía˜þŒ%À½£rwÒx•Vú£9ù惴sŸF‰ÆøÄS°‰ôŽhÂ}¯Ð(£2­^ U¯¡bæ¡‹Hæïô×ùFhF^£/gûŽÛhœ -L|é!†µ©„¾Â(MÚ~AäV8ݼŒW(š^*úwÆ£yD´<_K«í¢v¨ŠW³+mP;Ïò©âxc4ŽS ’Ä“jè—VçÕp“Øè¡cÏø¸CÚ¸ù'tm‘žû¶^çˆøaF@yí•EÃÑÐpY4~Ãgñ%A¿æCÏøÐŠ€~ÕG—ÐWÐùSúzëV×Õ~Î/ÊM «¦É#“Çè>:ƒ$7 ù%„QÌû7|³Ëá=‡È~Í$_ÌÅxûPK †>QOorg/hamcrest/number/PK †>QO*’á×#org/hamcrest/number/IsCloseTo.class…U]wE~H–-¡ÄÐ66fýJøˆ!¶õ“4m F«¤QÁÔx7,l…]βTsë¯ðÆkozŽö›´zŽÇk”Çw†…$„àÍÌË;ó>Ïó~ÌòÏ¿üà&tÌã½x_.è´|G›QÜ–û–Ž$îDq7Š{Q|$më(ác ;òò'>•û}¹|¦ás†™ºhûœ•È~ÌÛ}Á0»i;¶¿EŽL©”Ýgˆl»uòÏ•mG<èwj«òZ›<©²kñö>÷lù;pFü–ÝcX.»^³ÐâË=¿à¨¸ÂýÞvÛ퉪[$xáy®Çp©Ã}«%zÞíC†…LùÌ mî4 %·O¨Åì·lû¢#IÏFÅçÖw»¼ˆH×EÏòìšØµ{ ~^˜~ViIEv}ÛuŠ2ûùNqê€añâ }È^u–2ÓñãõÓ¸qnù}Þ. Ú2±Ô*ÍT‘tÈ%ØUåôH‡æv…Ç:C¬b7î÷=ªÍú…!›çÙ¶Šc5Û«=–ÿ?5[˜![xãlXõ°+dc¦Óë·ïYbÇ–MŒ&h]^6pe/aÁ@Z.y¬iØ5ð{4fÝn4„'êfíÐ4ð¾4ð* —ÍŽë ÓoqÇTOÀd¸ÂMšRáÙ–©^‚ù½M£ìÐIÄt^Å×ö <Ä7ÔÖ©ã-u]eHŽ'dà ¼i`„z}Z-ÂYÉ«ÕYŽJ·+œúþàÕ®O*ùÔ!„WÅþXtÅ÷l§9=ZS%ÚkÈ^Ó4Mx’ñº²y” ÍmâäåÙ"7¯Ñ·"B%¼J_¥yúÒ…’ %+%{J{LÖ“ÖkôëaÌÐ>—;ËeŸ!”[}†ðSº¨Â"Á:A%äeò˜Ha¸Ž%@Yž)ë²ÂdSgš=ŠÑžÌåIüô3´È/ˆ„Ÿ/¬xfUì5…Üa')×èüu²gJÜ¥o¬ì}þ#AH1kù˜¡Œg_@ AQ=Gtà‹ |¿#4t=t…'I«f¬Â ¸4.#GVþTU²#Y:[%Ê|§õNPçTþ†äh>Ç%IßüuÄ1¨ôú)ÌÔ3$Ã[t#¤0·(B΀þ'+™cÌý6†uû–NE[PXºšƒ•HÞ~;yZv#Ðy+h™žËÿäÚ.?ÃL(LCÙú@!,Ó_÷á&Ý–|1…p„Ô“)± Á¡˜[xGíïþPK †>QOöVØ,org/hamcrest/number/OrderingComparison.class•“KoÓ@Çÿ›w\C”–>x”ÒÖ ¥Á©‰¢À)mµz߸+Ç•c—µ]‰o@ø|(Ĭ݀c©±¥™Ùyüvv¼þõûÇO/ñLC5<–•ØVâ‰;JìV±W…ÁPi»¾uŠF㌡tœ †ù®ë‹“xØÒâ}QOž4Æuµøorg/hamcrest/number/IsNaN.class…“]oA†ßÙÒËb)ú©¢V…‚¬ýð¬©Z!5z·À–n»dYªýO^èMk51^û£Œg†iK) s–ó>çœwfÿüýñ À^¨#¥BÅ2_ÒdB¸,_ôø±¢"€”«<®ñe݇ y˶¼ †±dj‡Á÷Ê©™ “EË6·;ÍŠé–JƒÞD‹NÕhì®ÅÿË—>oÏj3,·®ïͪk¶=Ý:ýM{ÛØÎ1„›†WÝ3Û%c×l2Ä’Å}ãÀІ]× N‡H¹ÔG‚YžÙä….í2Äkf»êZsËj Ü)L»ØMA([žåØ9>átS"z6懋ÔÓêe‡áZr4?Të媶ãmvd˜M¦.j·„3.•–¬ºmx—\Í IË_u#×gÁÛʾYõþcAl€‚ŸÀêEYù°erŸG—WKNÇ­š¯-~!TqèYž¨á &5<Âc Oð”Î÷“ÑNøñLCy ÏA—.f$j•803áì&HÏ07ôB1DúÛÐ0‡y 1ÄGMÀG(vx1qå ãV—ëK¸ ³Ã¬£éŒVË´keó³Çí5±ä¹–]Ï¥FÝ¢PW-kgÁp9Vè‹ ƒÿüP¸µ 'èŸN‘Q_>ûF ¦h/ÈҪu0«7JŠó”­P ¤ |ÇØ—>ý”ÐÇ»9RÏŸf0+Ê’ï’ôŽrÆ(F2Qß Æ¤O0¡àýyGª Ä©ñAMtóϨIåO X¤lúÖp]ò_ÊNÕtÔ/ø—È ’ê¼_õŒ¬âíÐ7F5oÒ^DTWº³üDàÃ1‚_…3ç“/á–àߎlÒ”K²‹uê™w­.§CÍ!Ôïx¨ÇqÙb¸# krŽ  Aë·¼”#(²™»¸'bòPK †>QO@1ÿÁ(– +org/hamcrest/number/BigDecimalCloseTo.class­UQSUþnH²l[RLukC‚Ä–Z« –ªhRj©`ÕÞl.ÉÖd7³ÙT™ñ¯øìKl§M§:ãøìr<÷f Ð_î=÷Üs¾s¾{ÎÙýó¯_°„’†8Þb ÈeY£e%Šq|¨Ñ²:‚p3‚5¹ßŠ`=‚lQÜÆÇòþ¹lÊåÓ0>“¾¹0òr¿#—­0î2 •EÍã ñÜ#þ˜gêÜ«fnY•¬0­:¯-“Ác^k †á˶¼U†L²¿iíü6ChÝ)¹œe‹;­zI¸E^ª‘&–sL^Ûæ®%Ͼ2äU­&ÃåœãV2U^7]Ñô2¶òëA^¯9MQtd†Âu—á Å6«¢Yà{¢¶Ïpa@¢ó»ÄòD\ 7¿Ëó†;^MÓµJ"o5ÚÖÒ ÒG’Ì*ï†g9¶">^÷az.¦;1h†‹É“ñGʽ¸#ÜôZ¼–ítqûA…›eÈþ· Í1¯ŠàJ@§!\n—¢«bs¯åÒ?øÀWú¯.vgÛ•ÌVé‘0½SŠ4ÙÇC¶Èõ£nÅý†Ýpz ZÁi¹¦¸m©ŽúGÇ.JGÓø\ÇyLé¸ —·±¨ãž” (†ñ…Žmܧ5ÊÖÞžpEÙ(í:¾ÄØQw\axUnj| †óÜ ®ej`ï-š#›nB†³g„±«ã+<Ðñ5¾Ññ-êàxÈpé_M™L÷5†‰~œu¼…Ë:f1Ç8éÉ‚Iõ9ØÝ¸·EMa:õwUÇ ÕM†©AÕ“ßh»¼ÝùB-ö+䉳Öq/мcÞϵìÊÉÞ“‡Áêºc{ HËn¬oæ×rW®Þ ²äúZ‘{¤Ù*y.,ÃÆé#Ñë;p‚ƒ¼DΩä@ƒX“x5Š.·jDoW¸N3ô+ˆÓß&€˜lG’b²#i€É²Óš ÓYi?—z –Zx@*ýÁ§Êõ¢r ÉkZG!ÿVgIó:iŒŽÞ J’ðLI3$H¦æñÃè }"•~‰Ð3 µ1ü¡Ÿ >!}PÅVþq…ïØwñ'ð¦Â¿Dò±›ŒÔ¢~€ B&”ZH¿B˜XG^!€ ×QhÅsÔùþ!Åi z‘(!’fš˜£Àóújª›JÊOEJI²’TSHû™T|ªséØÈÑ1ýà<žBœ8`uâ7N´Dl–À_b®~ ”‘–¾.~л”¢´J¤%ú3œiãl›ŠJ¡£¿t£uÞ9݃žè¢'|rQdðÝIôUª¾´Ò~ÃØŽ|ÒØq¬å, WT£IiFa]UÖK£kÄ욟ñ5¿`Z*ýÆÚ˜xz SS˜º/«üaïúKþCGB“ONˆú~2×ñžÚoü PK †>QOorg/hamcrest/internal/PK †>QOydfîÆÍ/org/hamcrest/internal/SelfDescribingValue.classRMOÛ@}ë$uã¸$|§PÚòÕ†D•z+Q.@OQ{ˆ•ž×Ιuä8HýY•Š=ôð£Pgí0!‡ÝÙyûÞÌìÜÜþù à3>Z(àMyl”ðïL¼7±ib‹¡pÁƒ‘`XhŸñ î\õïÞ™ðã†bGöGr®KžM©dÜbX®M?Øë2äáËm©Ä·Ñ¹'"—{A"ú<èòHêûØ™Oå¡Ñ£¾sÊÏýH cGªXDŠNG'GbèGÒ“ªßÕ™R+Y¦Ÿƒ;¶OϧiR5-]O:o«—„2lÔ²LéãA,C•€K½{ÃÚl0ÃqÓý2ݩִ+K’M™x¬N8Š|ñUêB«OT´¯m”°mÃÄK;6vñaïÙMa¨QOã–§ÆmÎ&org/hamcrest/internal/NullSafety.class…SËNÛP=×qbÌ£¤ÐÊ£'@LCUUI©ª¨„è"ˆªíê⸉©ã ç¦û~I7lÛ}Hl+õú+Mçš4À‹¹ž™3çÌÿýq `Obа¬á~ ÄðFa ­!£a…!RtÌàÆû›fˆëš6ÒØ’k<Ó—µš¾mnµ¤ PîáwÛt›#}Õž„xµÊ0.Ï7ý‹ˆÐ_%LN€lŒ<“NFg8sö5H’Á(t²úcb˜$³„ äBy“9=A¨œÙ^=-…žª 5õË« 5—¯Ì†!ú ê1³áï+xýIeÇ?+_¨Z “¤ µb¤3OJ9:Ÿ‘’ì`tæÇ-L¨<¦Éaב Jú{úP3=Ôlu‡PwÉÛ…Ú‘4æ4¤È2º]‡""‘Iu¨h0®Î|‡ºVÎRÄz/˜ÜÁƒ·¥PK †>QOGj<07org/hamcrest/internal/SelfDescribingValueIterator.class•“ÛnÓ@†ÿu&Ži’’4´ ´å§Pƒzƒh©U…r‘(pµ Kâʱ‘ãDðN\€T€ÄðPˆYÇ uUígvf÷›™½þþü `4h¸•A·³È⎊»ÒV5$aH¯¦Qn[Å=÷Uì0¤'Ü‹C±yÄ'Üû–m>ó…Ç}×ÛcÈ´¬¾Ãý±'Vl©·Û{ Ú—®[Žå7ÊÕE £Ã|â¾%J®i9âp<ì ¯Í»6E–›nÛîYr“þÀ¢¶v›®×7|ØóÄÈ7-‡ˆ·Í–°ß=£žgu-§ß‘Cœêz%Jüøþ„úè⸓ +‹›&åtê€ÅŸ!Q5^SÿN°Ø¨Ñ’ÑJR9O ݉ΧH‚:6wúæËî‘èù´ëM½ý8oÄC‹š<³9›ÖrÇ^OXR£Í3ÄØ‘tylèÐqYÇÖŒs‹ª£‚MyÞÔq]B*¸Æðð—ŸŸœþ£øè ¥j\#£ƒ-z= EŽBv‰Þ‚RäçQ ™"]² Y­v VÛþå ­¸Bß%²”¡×•%žŽ"­V¦»Q"7¥—#¹«³\nVy•<Ò“¾²îYÔý å ŸfuÓA&ÔÓ§»ÂzåHDVaRãù‚ÎË\á’¯¦ÜÃ1ÒŸçÐ¥SèB ]˜¡éCôóh»*Ù´`ì5’hý<-ç÷å_r÷Cnªö—æÛTOáR1\*lS õÝÂÀÞüPK †>QOë¬4@0org/hamcrest/internal/ReflectiveTypeFinder.class•UIsEþZÛÈãñ&oñ+«¥‘mN¼Ä ñ/!2Ûl£QÛž ͈Ñ(Eîü‰p¢¨¢|᪰]EªÌ¿‚ŸA•ðºgPKqÁAݯ߼åûÞ{ÝúíÙÏÇ^WÅ&ô`J,Ób™Q0«â&æT:ÜËmq|KÁó*šq#ޱ/Ʊ$ö·U¨xGÅ2ÞUñV„´*–5ë j‰{{NaÍ(q†ÄÊã¡‘-ön6ç¹–½;ÃÐÏ¿*sÓã…µj)ÏÝõ»†KÖw+ l™¡Õ{Tæ…š–!6kÙ–7ÇЛª¸¼œ¾Ï™w ”°mŲ¹wÃÈ%Ç4Š÷ ×ç@ñö,J6ºâ¸»Ù=£dº¼âe-›²ÙF1{ï ¡õo’%Ë.p—€·ï´€_.Ÿ4_4*•™t†øE!î'>º~–ìªüFVÌdèhàÝ´ã:%y`èy™(uvœÕçÈ·%çæ«FYš)¸«à}Š˜³vmëºä¨×Qžu,üp}¦a¯ç=òOÖa‰ð1 ¥^M.½Eåãu.cg¹4¨Äµÿcï#VsNÕ5©‰¢H}:;.ü4 ➆^œÓЇ~ è'È/B®ç#PC^ÄFwê €æ¯í…å¢ë:4´½§'õNÕ*Ä8_œ7lÛñ’1Ý%ؤé¸.EOŠÁOî8nRÇøˆÀ§ÒItÆ5lbK ÜVð±†O°¥àS Ÿás òLÐ|éÿ} _ÂL×ÀöYóN‰›–ØåÞ7‹†Ë þ§Šè}úL×rÊUËÜ5ýD©†×Ä(—¹]85Á=Oש‚‚’cÜs|݃T½!Yt7ŠHlν 4ƒB˜ýg¬ý´+Aå_VbåT`Hä´wwí U¯HlÛ h7[•Ü#ÛÛãžeÊ*oá=ÄQz´ÃHˆ™$)!ÆRîr€Ñ0 ÑzžNE„HtéG`zæ!}ða}è‘IÂ0­~ÌKdyM¸‚V\E'F$­îûSæ‹€”D^&%‘9$%‘;LÚK!$3ÿE~ íùÌêh"ú=¦G[;žŒ„'£ÝÑîÈwëŽNLÇô¾Ø”ÇP¥òu”í?ÿÌ›V÷ŸÿúêæS4oAK´¢Uÿ !Úm´¢ý¿HÖ‚Çy™QGÂ;JÒÝÇ ®“t‹¤ù\@;±¼Ša½I"ád—‡egE¦Ð†iªó áž’Lzüp5Ô#’“,ŠÐ•ÛŒ è% 2äWEFJ™xR€˜l艰j-¬„õ9½IÒ¤”®ÿPK †>QOçõè§Ø)org/hamcrest/internal/ArrayIterator.classTISAþ:Û$Ã`4asAÃ&IP7@$¢V¥*Â!JœlB“ NfR…7‡G/^kßÔ4”e›yÌžµš#\½è6dI¼°üdO0÷ tcØ@]¦1£aÖÀc¤ÛpyÛençd¹Q¥º?ß.‰š²\‡Zá¸*Å”ß.jÎÀ%$4<10œ§X`mC½vêZÍ•J¬/Õ<s o Ä²YŒ”¥DµžÚnõ(ÃÐ4…áâéjPög‹Æ- µ`ó:µ;y¢3¾’ ?¥¢ÆZõ\“ʉi+*i9eÚzÛZ)6lŠn¶QOorg/hamcrest/io/PK †>QOcO¸ÏÌ$org/hamcrest/io/FileMatchers$3.class}TÛNÛ@=KBœs¿µ¥¡”RšBhCËZHH TJEÕdz$¦ÆŽl§—¿¢/Aj¥ªÏý¨ª³ŽA X²wvöì™3;³þûïçoYì«èGZ…Š%Ë*ÂxÅ+9fU„°"­× ިаª`MÁ:Cd˰ o‡a;‘·J¦Ê/tG¸^¦À=½*œÍü9ÿÂ3&·*™¢çV¥‹'yÊÎÙeÁ0˜7,q\¿( ç/™äÉÛ:7O¹cÈyà {UÃeÐŽ,K89“»® éL»ÃΦ”¸sÙMÕ­—ÃDwÉóLp¯îˆ}áêŽQó Û’B:„3ôÈc~!|ÂV­ßk×zS]#m¥;)wˆt =åf]œœ1Ì&šÀ £Íd7)ŒâŒßàŽN¾é—Nk®{unu;CÑãúç¯ùJ©ö ó‰ú“ҹн¶ˆ‹!V4*–¯”a·=ÃÃf׉¶GížµZ´ëŽ.$‚a¸µrKO½q`é¦í¾ ¼ª]V°¡a[0¨aÔ†£]òg˜¼p¯n˜eáÈ»TÄèÆŒ†·x§a;r’Qk•®!Ži†éûûŒaêžÃ`x|ßvê".ç ¯šã–mÔRï¹WeXºãŽ%ïê㡊ðnqŒ%º6O(!/a„×jÂ*3¤]ni‡+8EY; T®Ë+T»¨g7×±L¿Š~È'D/U ¤‰¬ýJÂ4FR‹é+°>b˜¾B+¡ïBƒQŒûQL`Ò_â¢Ç·‘ÂÙZ°6Çd…e©‚x_ +ÄS ô\~!üé ½#‘”Å¢44»ô·‡ÑKЦ˜Ó*yÖHغ/j†|’ñ„,) ~#/ާ˜%ŽgÍ4Ì í“÷y "Kx¹#¶úµ¾KšôtdÝÌ"І1ï£^ áI:éMacd©„Öš§óPK †>QO>l$p¬ö-org/hamcrest/io/FileMatchers$FileStatus.class}» Â@EïÄàÀ¹„\³9ðºî#23‚u„~øPK †>QO>`ެpr$org/hamcrest/io/FileMatchers$7.class}QËNÂ@=…BEy(øBÄÄDÐÄš¸0ã†hbR|ÂÝP&0XÚ¤ü*7n4qáøQÆÛ‚ º ÉôÞsï93÷ñõýñ à{4” ¬cCǦŽ-Û É éJuɯÕ; ZÓë †¬%]q;÷„ÿÈ{E –gs§Ã}âYPSC0dn\WøM‡ Xµ<`ùØöE Lé™×Ò-®ì¡ðƒý³C‚\û‰!_³Fü™ÿrõ.UÄm5áÃÊ߃Ñö&¾-BDÒùKC&•}åÚŽHwÐjèõuìd„®£’Á.ª •Å¥1ä¢7îÌ»ÞHØŠá`¡&mÅÕ„:7æAy‘Œ†6ßu-ƒ©C{èâqZ͉6£C=J‘g’ed‡ï`¯Q:Âà= úg¦,a™,ÍÙ™øœlx]âè ±—â‡H\šfâÐË!Où8 kd5£‡@ÑåÂ/EÜ"ÊÉôPK †>QOÄMuw$org/hamcrest/io/FileMatchers$8.class}QKKÃ@þ¶MMãûýV¬ Fð¢T¼ø!꡵‡Þ¶ëÒ¬¦ l6‚ÿÉ‹þ”8‰ª‡63ßÌ÷íÌì|~½8À† ³æ0ocÁÆ¢%†ò±Š”9a(V·› Öi|'Æ|Éë´Û–ºÁÛ!E&ýXð°ÉµÊp/h™@% îeI}ò$‘×ýXw¼€w…–‰ñTì]¨P^q#©“ÍÃC‰\ñÀ0Qõïù#ÿåÔ¶[Ô&å!Ãè߃SS-d†HÚé^Ƥ¶Ï#ƉŠ:WÒñeØ6V]¬aaupk ãyÍGï¦}/…aبÉ@Ýp“ÒäN?X$£G뎡¢’3¥©^¬Ÿòe´°"mŒ‹ÖW Cƒ"Ï#ËÈ–vÞÀ^òôpNÈ‚ 8ôw¨`„,=&Æzâ#²Ùu¥ÝWžÿ‰osñì¡'μqLP¾ˆÉœ?…i²fòB hrÙ7DÜ,—‡¿PK †>QOŒÀ2;st$org/hamcrest/io/FileMatchers$5.class}Q[KAþÆÛêfy)íff¤m=„Ñ‹Z†Aoã8èØº »c¿ª—^ zèô£¢³«õàÂì9ß9ß7s._ߟN±g"†¢‰ulØ4°e`›!q¡¥/¢ÕZ—!Öpû’!ÓR޼Œ{Ò»ç=›"ù–+¸Ýåž ð,ÓCå3¤›Ž#½†Í}_¬´\o` ùXxÒ×–r­keË6×b(=ÿ¬Î'W<1䪭濜zí‘*âBO¸Í°ò7Ç`v܉'d€H:éqÀ¤²¯a»¾rm©‡nßÀN Êiì¢ÂP^\C6|ÓæÎÀºë¤Ð  5èh®'Ô¹9J‹d4´ùæ’‚;žÒ2ÜÄ#N¥uѤhw:Ô¡$yYF6~øö¦S!!6aÒ?=%` Ëdi’ÈÌÄçdƒëâGoˆ¼üß„ââ”0^9ÊG‘ù«X#C!|P.ø’Ä- ”HýPK †>QO\5çœ?™"org/hamcrest/io/FileMatchers.class½WkSÛF=‚e! Q€†4§¡Äq(ÎûIÒPcZS¨M!4M©Vb$"Éyõ‘¾ßïçßHʘz¦? ?ªÓ»òb„‘1™ÎÔ3øÜ]ÝsöîÞ½Wæïþü À)ü.ára‡.bAÄ¢Dfž ·DÜffAÄ’“™–ˆew˜i‹pD¸Џ+áî3ꃊxGDZB'Þ á=ï‹x$¡›>ñ¡ˆ$ô°ÑÇ">‘pˆ™ŸJèÃg!|.¡¹¾eø¥„ï$ 0üZ ÃoBø6„ïH£FAϺª[tÈ)ÓÔíDAu†áÄðøÜL&5•p4mÙ‹ñ¼º¤ÙºãÆ +Έ×TWËë¶Ó·¡rI€Èx™äðˆ€P*;7šJ'™vvn$•I&¦&2³š“×SÙ©,C†i¸W4FN hJX9]@{Ú0õñâÒ¼nO©óšQÒ–¦¦UÛ`c>Ùäæ ´wÛà(¢½ª™¼o8®a.޶®¹–ý@À¾hÕ®8ƒᬱhÒvlZ$ZÃm(}K½«®¯vé Ѻ7Öas¶oµ¶ÍÏ´ª]ͱ¬glÃõÎn>k<¤qwt¬f¼MŽç"ŒQ¦j¹Ä; ¬¹Ž¨ß_¦ é9]µ|º6gêÁòz¶‚ãaTs1ž¶ÌE/°Éûîx¯’wœãê >VW>ëÚ&S?˜Š÷ŽÃéªd7¡š–iБMªn^@gåÁð¼cŠ®^žoY éD^×në¶=ºã‚ÜæÖ™š —|ýAqŠš¦;Έîh¶±ì–É s‹M.¨Fªg“gñÿˆ9à¨Å!­À›Œ”µŠ¶Æ lõAF“q C2.à,˃ÑyÁFru¬NĴ܈º1)ã Üq‘Ñzü4vxËöÓÛr–^ð¼dœg¬Ý~/ÿÊ:LEÆ9æ×®FlÞ4¸[›¦šÌm^÷žÈ8ÃýîñfÂý:6üØW7#®Â÷2~À!ü$ãgü"c ÔO·MÓ w¸¼µ{tK#¬õ°ƒûµñdѤZ¤ÖU†í©§ì÷Sµõš‰,{ÅÑT†íENSõ‹¨¼¾¸ÆÁíw}œíñ·zkœ©çp¶žÃ¹zçë9\p`;JÃF1MÌߢ«)àÈK“nÜæL/ù»j¡¨O,Ð{–½{ªZ4ú&iͲõxÊIÞ)ªâê §,jÉÑtuTµÛÒå/®õé­ï—ÿÚŠ¦égàqúvÑ/5*A²ºYÉzxžãŽ=l…ÀÚ }_¦QœP`üØ*„'d4à }7{“­x‘¾å²®b˜0Œ— /F>ŒF°OËhP•¦5ìzLCÁ'±#žh’ˆ£AÄf%¤ˆÄñå bX‘”–â>ñ• ¢¬´*mÄ>b*ˆØ®ìVö#>â^åÄ3„ ŒØ»e {×Ðñ¸ê|û|çÛ‚4®–¥Æ=© .•¢Ó÷òQBçlLéRžYÅ>&Öè‹úÄZ1‰×3›f²ù)’=H¾›ä÷+Ï®â@µü`]ùéŠü É_’ï!ù^åà*"Õò§ŸR~6HþÉ?ÇäWË_}*y‰½X}òì´”Ð78¶Šç«ÓxÓ”Ýð¦We̺‰·xjçÈjàòoC„Z©¿Þ¡ÿéJèŸ]Å‘´—%ëè äbd[A¸„²^XAC ƒdÅWÐü¤r »(F©Dw¨ƒöÒK ŽR0ï-©Ññ‚öÔ‚“Ô.N5‡éæ±HY-ãÇÇ(Ç~އ8öpìæØYÆPK †>QO»]I rs$org/hamcrest/io/FileMatchers$6.class}Q]KA=£««Û–¥}YiAA½HA°døàÛ8º¶îÂîØ¯ê¥—‚úý¨èîj`=¸0{ï¹÷œ™ûñõýñ à û4” ¬cCǦŽ-Û éKÇsÔC²Vï0hM¿/r¶ãɻɸ'ƒGÞs)R´}Áݜςš:!ƒyëy2hº< %ÁªíkÈÇ"¡²ߺq\ÙâJ eœ7RäŠ'†BÍñgþËiÔ»TjÂ]†•¿9£íO!#DÒùKO"&•}í ×oÐ’jè÷uì˜HC×±kbU†ÝÅ¥1äã7]î ¬ûÞH Åp¸P¶âjBó ²HFC›oŽAÜ{¼/¢‹S$i[4(Z]‚5A(CžE–‘M½ƒ½ÆélLˆ‚6 ú›S–°L–‰ÜL|A6º.uü†ÄË?q+—§„™8òò(P>‰bÌ_ÅY ¥ø!P4A¹èË·„J:ûPK †>QO vš”rr$org/hamcrest/io/FileMatchers$9.class}QËNÂ@=…BEy(øBÅÄDÐÄš¸"7D“¢ QvC™À`i“v0~”7š¸ðü(ãmÁ]Ðdzï¹÷œ™ûøúþøp†}JÖ±¡cSÇ–Žm†ä¹t¥º`ˆWk­éõCÖ’®¸™Œ{¿ã=‡"˳¹Óá¾ ñ,¨©¡ 2×®+ü¦Ãƒ@¬Xž?0‡|lû"P¦ôÌ+éˆWöPøÁA½Á ×~dÈW­⿜F­Kq[M¸Ã°ò7Ç`´½‰o‹‘tþÒ“Ie_º¶ãÒ´„z};$¡ëØÍ`†ÝÅ¥1ä¢7îÌÛÞHØŠáp¡&mÅÕ„:7æAy‘Œ†6ßu-že ‚h]œ"NË¢9Ñæbt¨B)òL²Œlâèì5J§#B¼‡AÿÌ”€%,“¥9";×Ɇ×%Žß{ù'~ˆÄ¥)a&½ò”£ñW±FVC1zQ.üRÄ-¢œLÿPK †>QO¦ß"Ö„$org/hamcrest/io/FileMatchers$2.class}SËnÓ@=“8q⚦-%±}(ëŒ+{,üN÷Šæ–ÃÝ‘ÕS¾tG™zŸA;ö†‚¡Ò•®8'áâ‡2+]ÏæNŸû2§IMeÀ`~t]á;< 7g-HÏ:•ŽHÛo: FÒC5Û2i^ ®B_œˆÀöåµ’ž¹cœa!Ežó‰ˆ §½~¹¾õÛÌT:lÝ¥<"ÒÅ”´ÏP\\2lÕ`º£N=ËJ‘Û*ä-Ÿ3ìÖ¦ðƒ+a«Š4ÅPîÉ‘K3¼Ÿµ|šXºu>+‘½ £ç…¾-"Ãòt)ÚžŠýÁµ/ ü™Pco¨£f¢Ž† %MìS‰§…LTñ˜ac~™ÖæXgXŸ·œlóhtÈоçZ×ï»:úH¨ä2¬Ö2Ê„×ô÷=yúhŸ c§h^ Ôhî·¾ƒ}‹µEBm,PÛH00±s”PÁR<_Â2V‹£‡å±J±™ÎUðˆ"-:¾Tï-õºÐ¼Aî+¹)1+«&€b<ÁS°¥šy–Ò&B•Í_Èß@ûŸ*ñø(§TÖbÔ:žÇý^ÄÙM¼ÄŠ B’ýýPK †>QO{jä)—$org/hamcrest/io/FileMatchers$4.class}S]OÔ@=³Ûý*•„õDDÄý`Y|1‹(IL0Y³>O˰ÒmI;5ñ_é &>ŸýQÆÛÌV–mÓé;gÎ9·wúûÏŸvÐÖQĺŽ<ž–°¡£€g%l–𜡸+]©ö^×{ž?ìØ|dù"Pc®,[øÝÞÿÌ;w‡¾ò¥;œi ´ïL0T{Ò'áÈþGn:”YèywÜ—ÑJ,];ÏJL.Cï{¡o‰Á0?ÞŠíOÍ~çZŽþX(Û;+¡n ¦ÊZØ¢ ¨áÃêô63,O±Î°2m;Ã柤²÷ÍÀsB%>pe3lßr·¢êP¨,Åb}Bçð‚~¨"¢+O•êE&4ºr³µÕþö-Fè4 ¼Å ͳ1GUÌÅëeÌc¹8ºKQ‹éZKiÑMõ^Ñ;BZWÈ}¥ 7&¶‹ÕÀ?±îãØÜ!­QO¢Þ÷=°$org/hamcrest/io/FileMatchers$1.class}S]SÓ@=KcÓ†´~€ˆŠ˜´´ûØÊ ÈŒL‡:õy–v™4a’”ýUú‚ŽŽÏþ(Ç›d;¶PÛ™¦wïž=çÜ=Íï??~¨£n@ÇK¶ ¼Â¶Ž×²°tØ:J Ù¦ôd´ÏðÖjùA¯Öç'aT;á‘ÓA£uɯyÍå^¯ÖŽéõ¦tìƒvàŸ †¥–ôÄépÐÁÞu©³Òòîvx ãµjjQ_† æ{ÏÁËÃPÐrsÒ‚ôkGÒÊI¸µ×`0ÂaW5ŠÓ-“æ…àÑ0‡"tyIß‹Ü1Î0¯§| Âq¯Ÿ®F~í©JÍÊeË'Â}¢\T”îÅÙe¥05Oþ}ŠbàN4ä.ž„2l[cè³î¥p¢ ÕbÈ·eÏK„)ÌI»G©¡‘ëI‰i#m8"ÞgX¡£)æwžãú!Ýቈúþ¹Ž²‰TLä7QEMÇ®‰=¼¡ÇåL<Ä#†ÙA3¬Í€a}Öq†¯?ʨߖŸi‚êþÛÓSãp…׋ú Ë>¦P&¯ˆA¿e»j߉»ô†éˆ?úÒ€®”ª.½†ZÜ)•w*ßÀ¾&ˆyzf X0éYJ1XÀR‘CËÉ~+XÅ\Rݧ*ƒT›j¯€"UZ|ÁJ¯IØ]¾ÁÜwd¾P=7¦g'zEÅøOï1ž€‰iM1ÕS¾Tþí÷nS¥ÖS+yE¥a=A=ÅFòû ›I÷9^`‘*ƒÐÙTò/PK †>QOÎdÜÿû¡%org/hamcrest/io/FileMatchers$10.class­U[OA=Ó Û厈"ŠP¶…‚¢¢Å*ML@MÚ`bbtØí²Ûìn‰$þ/&¢Á㳿É¿™®ÐJ¸<ؤsùöÌ9ßmvþþöÀ-äÛÑŽ9dä0«AÃ\:n&èé|·52߉ãn ;Üß°lQxPóã¸Ç ==Ü3èÏGxy›û¾ íÔŠë•3¾mzÂ2–›‘àU˜áùãG'³ Š›[vÍËÂ7=«X®Ãл²ÉwxÆæN9S<Ë)ÿEû5Ӿ߄n]´+È1¼Lž[ü¸ÀqËÔC,ï–C׊åˆçµíuáùº-¤‹®Éí5îYrcAÅ¢ŒîÆÜ,EÓ±­¶~o{—!•¬;‚³Í ñf§^SÈÜ jܦò4ŸbèÛ¶|EÝ”¢¡“鈌l5;``ÄÜA 2·Vy5 I+)ìº(º #ÉSÜ¢l%J¢™dCN_¬o 38#¬ö‚Uv¨> /4C‹»U!sµlñ²ãúTŸ0Ÿ‹ÍÈQ@ZÁ­y¦{†žÆÜÏH,•ó‰cÚuTÜR÷ud±¨#.ÝèÑÑ+‡><БÃÃ8éXÂcj÷F5C¸Ì0zF¹&Î Ãä9˜aø4$•BÞÙ|E˜[’Vüç›ÑÌÒPæ£IÙ-¦Ô¥ÔÿÓӲă'5•W«Â)Å{êř䙲݃Yziiô‚‹vwË"4SÕÜ+gÄè߇~0\ Ueé7Rû`FzczQã+bŸÈÁ­„Þà"ºZ÷c—hf²ô!ׇkØø –:@K¹‘èLÓ>r€Ö^ìIßg¯Â¾%/ß‘ŸœxLÅoÔ9B~¹ƈÒÆŒ’F‚⸊1â¹V÷í†èÖâ:ÆCO– ‘¾¦H:Z—>ŠFSÏÊÄSQŠuì¡¢Ž¤Ãº—ȧ‰qžÔ¢ò¬‘úxú ÚöNÉŽrÅ0©PIL©Ù@JYÓ˜F§ÊA„N¤ÑÑ*¿Aò×öPK †>QO·£d) org/hamcrest/Condition.class•V[SÓPþN/Ior‘;rK+TDiDkA ŒRÑ'”L Ó¦48úŸ|™ñø£÷$!´¥)Ò‡lÎÙË·ûíž“þùûë7€ÇØ !ŒT¤xÍiþX ÒcIÄr"ÞˆX !ˆUoE¬‰È0DV5MÑÓ¹RQ* ¡’±.¹eŸA´ßD¬3ø¶ ¥ÌÞØÌ~^OeÓ+K‹ £™’žOÈÅœ®TŒDº¤í«†ZÒÆ.Ã$‚[j^“#]a˜»ÞCÊÊ_äDAÖò‰Í½C%g$(Š ©šj,0x£;”Oº´OñZ3ª¦l÷=+ïh§#SÊÉ…YWùÚÞô*•×í‚Ná»jݾ•/\\|¤lÖÌ+Päi«Zž!­µµ Ò“Um:™&'>2L7¶¶â6vñÊõe.êF"ïQr½ÈOÒö|v›Æ“&)¡ì6åäX2µ =.åóÌý&K&ÍLúšÁ0ØŒ+Ÿ¬h4²E¹\6{áÖ6‹#†ñÿ«™Ž„Vu$z£MØ•² ÙuçÍ*N,^„_Ž^õ¯u^T*9]-›ˆMR ;ráÈ<WBò¡U+vGzÝhà(E†÷.…‘òæÙ]T=à:u3I~À=_§¯$WmCEH¹‚}'DgبôÐVéHÏ)Ë*?Ü-NÄ)nÁ]t3Ð-zÃŒb,‚Ûè¤ùsIà î·Á0|íÝÆ çé46dh«O˜î,7èÌ4a†Õ S³fø†é+¡ï qÎÉ;´ò ‹¾&Ι©R$‰>øcgðœÐ‹½ôÌÍNôSk $kv†ãÔ;#´¦.8ëûh'ý8½q¸ßC2‹wxOáû^‡Øc"vY66"{€(éktCŽnÂA‹ZœÐ-´’ÜZˆÅOá?®Ãê­Â,1Yƒ%8X\7UUY LÛXýfL¢ã„c“øK¤AÛc†<ѧßòxG òøásˆ»±8;C >Å‘ªÃx‚Y"Œ§˜³S´ZÁuÏHZ0ÏÛÀ‡ÖîðIÝaVßá[U~‡?’jì^Û/œÑ£Hü9Gp—²ý„pRWy ÙXI-à¥)_Ñ/ÌGØôk €ÿái%‘dÉv’BðPK †>QO íAMETA-INF/PK †>QOÐoRš½¤)META-INF/MANIFEST.MFPK †>QOýArorg/PK †>QO ýA–org/hamcrest/PK †>QOºÓ±’UÅ'´Ãorg/hamcrest/Condition$NotMatched.classPK †>QOýA]org/hamcrest/core/PK †>QOŒûˆ5v(´org/hamcrest/core/StringStartsWith.classPK †>QO¼6Ì\ .´Ûorg/hamcrest/core/IsCollectionContaining.classPK †>QO‹`Vöè;(´ó org/hamcrest/core/SubstringMatcher.classPK †>QO¦c´rWÞ/´!org/hamcrest/core/StringRegularExpression.classPK †>QOà’¢ÜýC ´Åorg/hamcrest/core/Every.classPK †>QO8ä^ÌãfA´ýorg/hamcrest/core/CombinableMatcher$CombinableEitherMatcher.classPK †>QO2{¬+´?org/hamcrest/core/ShortcutCombination.classPK †>QOÚI•B™=´org/hamcrest/core/IsNull.classPK †>QO‰Wñj&´Ø org/hamcrest/core/StringEndsWith.classPK †>QO[æå #´$#org/hamcrest/core/DescribedAs.classPK †>QOXR0ã_?´J(org/hamcrest/core/CombinableMatcher$CombinableBothMatcher.classPK †>QO&{L› ´Š*org/hamcrest/core/IsEqual.classPK †>QOÃÌžgâß´/org/hamcrest/core/IsNot.classPK †>QOY2Ú$™&´02org/hamcrest/core/StringContains.classPK †>QOö<í§{ ´‡4org/hamcrest/core/AllOf.classPK †>QOð«3¦§\ $´=9org/hamcrest/core/IsInstanceOf.classPK †>QO!ñ_žœÌ´&>org/hamcrest/core/IsSame.classPK †>QO!Qàân"´þ@org/hamcrest/core/IsAnything.classPK †>QO½hjfË´¬Corg/hamcrest/core/Is.classPK †>QOWE¿ y )´JGorg/hamcrest/core/CombinableMatcher.classPK †>QOµV¥:é,´ Lorg/hamcrest/core/IsIterableContaining.classPK †>QOh8½"´=Sorg/hamcrest/core/AnyOf.classPK †>QOkû¬BHK "´šVorg/hamcrest/TypeSafeMatcher.classPK †>QOýA"[org/hamcrest/collection/PK †>QOašær3 %´Z[org/hamcrest/collection/IsArray.classPK †>QOÂLHâ/´·`org/hamcrest/collection/IsEmptyCollection.classPK †>QO¡¯¸’ ~+´Ldorg/hamcrest/collection/IsMapWithSize.classPK †>QOyš™˜„ E´žgorg/hamcrest/collection/IsIterableContainingInAnyOrder$Matching.classPK †>QOãt.vàA´™lorg/hamcrest/collection/IsIterableContainingInRelativeOrder.classPK †>QOU"ŸÓíï \´nrorg/hamcrest/collection/IsIterableContainingInRelativeOrder$MatchSeriesInRelativeOrder.classPK †>QOiOÈ0´Õworg/hamcrest/collection/IsIterableWithSize.classPK †>QOÜTý¥Ò,´¢{org/hamcrest/collection/HasItemInArray.classPK †>QOƒx-g-´‘org/hamcrest/collection/IsArrayWithSize.classPK †>QO·eA@Ã-´ ƒorg/hamcrest/collection/IsMapContaining.classPK †>QOÍ`%òg9´”‰org/hamcrest/collection/IsIterableContainingInOrder.classPK †>QO畟„€ 6´Ýorg/hamcrest/collection/IsArrayContainingInOrder.classPK †>QOœ¤£a]b9´9•org/hamcrest/collection/IsArrayContainingInAnyOrder.classPK †>QO¬]áÈÛÇ2´íšorg/hamcrest/collection/IsCollectionWithSize.classPK †>QOu"ô9· E´žorg/hamcrest/collection/IsIterableContainingInOrder$MatchSeries.classPK †>QOĹÝ1ý&+´´£org/hamcrest/collection/ArrayMatching.classPK †>QO\½Ó¹š -´ú¨org/hamcrest/collection/IsEmptyIterable.classPK †>QOf‰ÞÕõ 4´þ¬org/hamcrest/collection/ArrayAsIterableMatcher.classPK †>QOT³×î, "´%±org/hamcrest/collection/IsIn.classPK †>QOôÞ ¥<´Sµorg/hamcrest/collection/IsIterableContainingInAnyOrder.classPK †>QOýA¶»org/hamcrest/beans/PK †>QOxUQ˜XC-´é»org/hamcrest/beans/HasPropertyWithValue.classPK †>QOÝRú -´ŒÄorg/hamcrest/beans/SamePropertyValuesAs.classPK †>QOãì\À$´ÑÏorg/hamcrest/beans/HasProperty.classPK †>QOA9 ·Ùe%´oÓorg/hamcrest/beans/PropertyUtil.classPK †>QOéú›¢Š¶ /´‹×org/hamcrest/beans/HasPropertyWithValue$1.classPK †>QO iA3õæ=´bÜorg/hamcrest/beans/SamePropertyValuesAs$PropertyMatcher.classPK †>QOؘfÐ3P/´²àorg/hamcrest/beans/HasPropertyWithValue$2.classPK †>QO³Ìô<N ,´2äorg/hamcrest/TypeSafeDiagnosingMatcher.classPK †>QOýA¸èorg/hamcrest/xml/PK †>QO`IAþÒø´éèorg/hamcrest/xml/HasXPath.classPK †>QO#Ü8o!´øñorg/hamcrest/xml/HasXPath$1.classPK †>QOÊ·ÃßÝ!´¦ôorg/hamcrest/FeatureMatcher.classPK †>QOŽI[Н!´Äøorg/hamcrest/SelfDescribing.classPK †>QO?ÕÅku$´ùorg/hamcrest/Condition$Matched.classPK †>QOPõ<Ǹ´:ýorg/hamcrest/Description.classPK †>QOnE1ÍŠ“.´.ÿorg/hamcrest/Description$NullDescription.classPK †>QO5¼;žÉ´org/hamcrest/Condition$1.classPK †>QOýAÞorg/hamcrest/comparator/PK †>QO{p%( | 6´org/hamcrest/comparator/ComparatorMatcherBuilder.classPK †>QOpÿ‰ H´vorg/hamcrest/comparator/ComparatorMatcherBuilder$ComparatorMatcher.classPK †>QO°ù÷*D8´Û org/hamcrest/comparator/ComparatorMatcherBuilder$1.classPK †>QOýA8org/hamcrest/object/PK †>QOô”³½X|*´lorg/hamcrest/object/IsCompatibleType.classPK †>QO ¸¿d„5´ org/hamcrest/object/HasEqualValues$FieldMatcher.classPK †>QO†´5s† %´Ãorg/hamcrest/object/IsEventFrom.classPK †>QOœ¾våýg (´yorg/hamcrest/object/HasEqualValues.classPK †>QOïâÆê™ò%´¼!org/hamcrest/object/HasToString.classPK †>QOÔ¾üUQ ´˜$org/hamcrest/MatcherAssert.classPK †>QO;I; Á´+(org/hamcrest/BaseMatcher.classPK †>QO‘o pÌÅ$´(+org/hamcrest/DiagnosingMatcher.classPK †>QO'õ€ý!!(´6-org/hamcrest/CustomTypeSafeMatcher.classPK †>QOVõgôû ´/org/hamcrest/CustomMatcher.classPK †>QOÿxq-ü´ù1org/hamcrest/Matcher.classPK †>QO)lșٙ"´^3org/hamcrest/BaseDescription.classPK †>QO"FKWÇ(´w<org/hamcrest/CoreMatchers.classPK †>QOgÝVâª!´{Dorg/hamcrest/Condition$Step.classPK †>QOû?½ “$´œEorg/hamcrest/StringDescription.classPK †>QOàxÌ-aq´éHorg/hamcrest/Matchers.classPK †>QOýAOaorg/hamcrest/text/PK †>QO-¯x›–*´aorg/hamcrest/text/CharSequenceLength.classPK †>QO 5R±p^%´ddorg/hamcrest/text/IsBlankString.classPK †>QOb܆ü+Ÿ&´horg/hamcrest/text/MatchesPattern.classPK †>QO×ÑÄE:%´†korg/hamcrest/text/IsEmptyString.classPK †>QOw‡òZY+´oorg/hamcrest/text/IsEqualIgnoringCase.classPK †>QOm³›î% 4´±rorg/hamcrest/text/IsEqualCompressingWhiteSpace.classPK †>QO£o”z{ -´ worg/hamcrest/text/StringContainsInOrder.classPK †>QOýAÎ{org/hamcrest/number/PK †>QO*’á×#´|org/hamcrest/number/IsCloseTo.classPK †>QOöVØ,´€org/hamcrest/number/OrderingComparison.classPK †>QOž4Æuµø´e‚org/hamcrest/number/IsNaN.classPK †>QO@1ÿÁ(– +´W…org/hamcrest/number/BigDecimalCloseTo.classPK †>QOýAȉorg/hamcrest/internal/PK †>QOydfîÆÍ/´þ‰org/hamcrest/internal/SelfDescribingValue.classPK †>QOã–§ÆmÎ&´Œorg/hamcrest/internal/NullSafety.classPK †>QOGj<07´ÂŽorg/hamcrest/internal/SelfDescribingValueIterator.classPK †>QOë¬4@0´S‘org/hamcrest/internal/ReflectiveTypeFinder.classPK †>QOçõè§Ø)´Õ•org/hamcrest/internal/ArrayIterator.classPK †>QOýAô˜org/hamcrest/io/PK †>QOcO¸ÏÌ$´$™org/hamcrest/io/FileMatchers$3.classPK †>QO>l$p¬ö-´5œorg/hamcrest/io/FileMatchers$FileStatus.classPK †>QO>`ެpr$´,org/hamcrest/io/FileMatchers$7.classPK †>QOÄMuw$´Þžorg/hamcrest/io/FileMatchers$8.classPK †>QOŒÀ2;st$´• org/hamcrest/io/FileMatchers$5.classPK †>QO\5çœ?™"´J¢org/hamcrest/io/FileMatchers.classPK †>QO»]I rs$´É§org/hamcrest/io/FileMatchers$6.classPK †>QO vš”rr$´}©org/hamcrest/io/FileMatchers$9.classPK †>QO¦ß"Ö„$´1«org/hamcrest/io/FileMatchers$2.classPK †>QO{jä)—$´’­org/hamcrest/io/FileMatchers$4.classPK †>QO¢Þ÷=°$´ý¯org/hamcrest/io/FileMatchers$1.classPK †>QOÎdÜÿû¡%´|²org/hamcrest/io/FileMatchers$10.classPK †>QO·£d) ´ºµorg/hamcrest/Condition.classPKzzr(X¹hdf4-hdf4.3.1/java/lib/org.junit.jar000066400000000000000000014757361503061704500171620ustar00rootroot00000000000000PKW@uWMETA-INF/MANIFEST.MF¤ýÙ’£XÒ. Ÿ·YßCÛke¿ímì*f ºí=@ 1 “ߘ…˜gÁÕRDfVfe EVŸdF Åò5ør|DöÊ4Žºþ÷SÔviUþû_ðÐ?ÿAµÁ%£öÏÇZ݆î__?¸eè«ÂëÓàw¹ ‡<ú]ñŠèßÿºeÚÿó»!ÍÃßaöpóôÿßàïûßwó¿ÿUxmðø½ ï(™Ã7ZÈ·ÞÇ|ÿå}è}Gâí+æ\øUžï_­Úä?ÿ6*öŒþü1"‚BDþCÐ}©ty}¾M‹ª½àýKöƨüúüüϰAžÖ]ô»ÝzuýøÞÛ°_fñï÷߇¾÷VWmÿ»æ™—|?›?¢[µi•½—ÿÑ_¢ªM£î´ì£¶ôòÿÜ~ÿúã¿ÿ·o‡þã_ÑÆ÷‰ÿïÿ¼þ?ÿº¨û÷ÿþÏ‹AÿߟŸ·Cy©¼óGQ…Qþ?ß}¶Fz•î}¤ÿùaèû¸ÿï¯þ(«>ÓàÎUù¹?ü!½”‡w"Ÿ&½J÷>ÒǤ𨓸£ðJï>R=vòõ¤>¢¿3ÎÛ’súõÚ¨îWà‡=¹ô÷¶åÏ=¹/-­‡ü>Òú‰|Ù ÏÆ}¤å÷!âö~禪Í~"¼:“?Oç>Ò¯qÎù7÷éë߬Lø>ÒÚ”~‰£Þnðû—Ú»hü/8½{ìÓ3Bï_êú» {°ï3R÷‘^RûBê«|é£òñ·Ý_æ{éÏAþ _ÿøÛƒ§ký |‚oÖ˜æ±ã_i¿ºJxeÆý}½CúŸñ!}?õ‡?Pûî|¾~ÈÌÕ-‡2øËªVÙ³{ŒôÝÓï%ÿ/Їyü.þA«Ü·6JÞôÊÏd#ý¢ Z¹J÷‘Öî×wÏG/OC¯¯ÚÕÙ9~û/äåOü´B¨º!ï?Ø“(½ëàÏëÊ)}‘Îo”î#}Ff|BVÝGú>ü2ì¸ôW8ó)Žþ ^pã7àÔ u§ßöå¯Ó½ô(}Oåë]üi¸9󛚢ÒßþÏÓzhÎ7òúŸÙ¹ÿ÷à‚×Êè32ð±ãëJüó²·|2§Wø¯´øéƒƒXcö†ú:±ûHžéç‡úzŽü Tñ!kç?@òûHÿµ¦û?ý¼Û_Ÿ×Þã„ï3L—(ü`߯³QïTšó ¡ÿRßGZG^ŸÁbßxí>Ò/ ­÷qþù¡¨ó7@õ6…ß­´Ø|‡ãÛ¥ùˇGCú÷¿.}_ÿßG»ûÓ·NQVíÚïŸþ.„ßÌÛŸ¾ðƒûϨmš¤w¦Ëçß_™°ÆÝ¸HÛè›éúXöÅ+‚»ëÿª6úÿn+Û'øôèþ3¦]ê§yÚÏÿþß6z€ÿ7÷Ïi¯ö¾|á_U—¤DÑ⻑µ÷Ýý?ÿ¿ÿóåÙÿ¼Ñ3Ùÿû¾€ÿÀÿïÿ½oó?ÿñÍlß:ŠïLç^×ý<þýç?LžúÁ7¿3irŸï}…Û'é¾ËƒÓáž@§X,7–ÉØlS‰/ºêP³¨úß(|½­àÃî{7ú@ÎË"c(û»Ž]ä•kÄ¥ù±S2Ì­‹}Mx^)ï6þVMŠ©#kûe4ä”|Hü{M~ÕD õå‡ßÞ~˜©2¸TíoðoðÚ4|Yìô>Såé&7,7ÉT^EåÚ ˆd\‹<óe·AzIÔ?œÆ›X­¨¸§×Î\õ0È{sÚÜ/à Q¢!äadÄa™§ÖI)RσÁ “3áªÍ6ÁÞèöÎÙ Ñ·;j^{_¿ñ~ÙWhí4<©œä…›8›‹»‹)¥ªZq³ß5³Ç̸ÉþãCþ²ÀûNWC¿º‹DÚw ºq;ô2‰mvmÎF}í’d ü‰,hq#÷øú0 ïÊÞO»»Ð™3îŒUø÷ËDº?Šž¬õB§Ð"fÉ<Ði‡L!Ó9$SûÉ6}St”žóy•ÇyjÅ÷;¼6:éxíQôºêSd ÜKy:ÆqUfÕ ÊJbÛ”ðãE¾Ÿø½v©¼¾xåPÜ—¬Ñ-]F@Äëõ¼;í÷ oÌ]ûfKŹ˕‘÷LýƒùŒ[~¤«¶áÛŽþFWåÃZ[£¡ÇD£0Æí\oûàh ™yVpa®±€Õ ׋Æ" ÷mîM’q^ðv¢ï¿)UÿEܲ· ªÓZ›Å­©Vc§ýí¶ûÈ+oK¤â²×»3ÂIËF•]Ê!@ÊÏÕ׋#Gý¥ Ê Óè™tè¶Èu_ƒù"vgbàÁ Þ3wKßJ¼a˜w%÷›š‡~z{D…Þ]j”w€ø¯WŠÁ=U%)2Û‹Áf45û`ZY´vÌQ§…°ý®ÜtŽs÷+3ëÞçƒ=è¿‘¾£«B\£y7½ïÒQm’ïm>™®PÁÄ .Pûp4¨ÓI¯ gLð&©í´¿¬ÑiœÓ±NbßB‡Ú%]^° 2šêM:„€o€I)/=MícžþA÷>„BžG9]õp_á:§]’ó '¥Ù›Á^,ÌÝ zˆIB‡Wmƒ­’4¸,gàc­ôÙ?c ýíÇßîz!ÂèË“U¾»XD“nEÌ5ó¦ f÷·-:˜¯Ç#—…aYââóì–úß}ã°ULå˜ÜhÈURùì Ò ä_¥Žoó1 ~îÒVœœÕ—)~9Úï-QðÎàÊÛï÷MÇÖW\…ðm‡‘›ì¶+ T½]/B­h•Äš“¹]t…‰O«ã7=°ºT JîS3{Õ8Ìá’ú¼{3sŠM¸1¸tjn» xšŸ‚ž·«C?W¢!ÇPuF3¹ƒIervHqI˜¨‰@Œà°­wÔž4Tgzº²¶Ôì«G q7»¨} 2ès® ì`ël†#i¡KX«ƒC0š ya}†bZ/ÖÇ–ÀÇÉ7æ2ë(xLñzO«î;óÝõöpd¬Þm˜¾lšƒc »èQô B™íår½rˆÒø„®CêEêÇšÿÍ2|{´ ¸†ƒGuNÉ1÷jÌÁá"ïqá–ágL+OØÆÚ™Ã uLuÝP¼mû)­òO=1“ñv×{Ñíøö,:qøb¯²‚fëºbû[—ñZˆìÖ”çÃ`aoï3¸«êjhƒU¾[f£¶©~ÚA1±eAÂÜ3 ¢F·Ê ñ³È+ˆMO½UOùÏ ç‰fX#7AÖ»\wí”ÖÕÈÏgr±îàæF¤k9 å$S ÞÇ‹ûIV½¯Ö¸ÿ+¿YIß”õeGy(]¿‹(ãaÈW7¡=úè¦@¶tÈ;CU3qî6[×oý0Ó Ýãè.†G¹>¾À×þ»ÝÛ}E÷Ë÷ÜnÃyÖ@¨¯BLôÍ n­ÛµƒÊó¦Øv¥¶ev†ÿXIþ¹_¾ß,ãýÁáýp¶䮵 v;<ƒ\,2ei÷¼¢¬>Ìuûy ô'’ÿíËCÏÏ£áýÃyýlKwX.ieæµ:ž¹s‚€'Å™T–Ni†'¡i‘4 "ücÃõ¡®½6íª»NNó¡~ûóÉÛOIÿ“Æñý^´o¿=™Íù$ŒWñ¸Câõa~!g¢¸ˆoHC*c» ì®›šÃÎfÝÜZ;0ØÑRwŒ©yƒ ŽNG–;3Ñìc»e…sC’g˜ñ1žøFÔº´ÕôØøî7óÁ‚ëÚôˆ·é‰¡Ñ@¸Ô2FñË^UXÙ“÷ÉZØV?vˆâ…ÿA›þõî?n½9¤wB«XI´²‹UÙŒŽÛÄuñË6IJ]·‚ÉƸ0Uõ²]ÜÖœL?û{~Ãרqçè†-’(:ðåŒÆYp°k-ËÁÁK3­+§óPTsƒ= m[µtuƒÁ»-8U³Õ¡kÁPÂ,a“n áQlw¤©Æ‘fÐÀ¤ê~,Â5ßăÖCQOˆÐ;hâF÷࡜ƒÞÚY³…¼ž¶[ÙÀhR½µÕ¥iܘ >vbýy[¿a»—V÷xÕ•n:éçN”%ÝR‹öˆÛŒÈ§ç8O™žR­Žñ¾ñOø´¾¸Bù=ª}ÄàV&PCfb&ͶE==§t>lñ B6YÖwÔ±™ =uM¾{îÖ™³»:Z|˜ó¦rƒ§…ŽS[{åt˜v‹ZêˆQ÷­)^c—ç`v•OÇ¥ƒÒ- ÷4ø¡.ÙÖ>^ÛI+Îj’è?cÔ0Ü^Èþ7íkÎwpДz~ ²BDÄ'ÌEKÔ-.FâáDªÓ¢*>`lJàc@óÕÍÛõöƒO‹u¿6 öæq.;jW)ì\åš6â¤o‰ÖÚñŠ{ƒ“]'ûOZ#XÁ«gy· ö,Û]ùì°ÇEÜÅ"Ý&§¢¢xÎå¡°`õÁ ‹„.?IüÏtð¡YÔò%;É8eL²\ºŒ\àñ.НbJ”8 —Mm.Ôeâ×8ÿÌ`øê2㾊Ùwt³ê>RA€žµMøó4aøFé­Œë§â¤•Wɹjñžj*t{|v¼ßÄÐo—}°ßÃÔ«v`k‚&Z¡02’ !·:$æñtÞnú[³\…€óØ1²ü„ˆøf2|ë_ „Uò/1U ïÄIﮪÎ-Ýö†Ëý‰ò°4L¼H³»‹½‚a¾nõqMp—WAöh¿ã¹‡âëÄKwߣkôjx3W¨û¸Fù<´e~݃ Ü-´ÈÛ¡›=‚¢gßæÁŠ¿êïÐÏøî}NÏÁz; ‘dmøþ _Ù!S(_²tN„Á-{n¹kÓOVQqþyÿ›P¾)‘¯ðò¥3vPÆÆàJÒ4ð|Bµ(r¸\Y!÷`bB/Ö¦¿Q_WnVmÿØrx‹ÀÎJ‡Îèƒ&8J<Z0GÐònw­„’ÔWŒÈHéc(ùÔ¸ê_ã(2¹]¦…Î]B—8\! y‹–m-÷bÆ/Žùk^ÈŸ(Žö†.’ŸßC-O Ž™^:çy ·$Öâssi{ôš¸è%LÀ¯úç_Y_nÄž{G­«<–nòìວhËzÇ%’ž?]hÿtM:æ£frìØÓ'A²pšÞ7zyÛò7øµF¤h{J4øplú­«o½«³M1ãT#¶b uïócó O~uÊw>¥´|„$ºèÝ·½êõƒ銈𢹮œ¢ gÕÝ2(lä;u. Ý3Á3ùópé%òÂ8¶ÍÆ N/ݤLÅ‘”Yœp‘èZXoæ68°h#“ñzg„ò±ÓT×¥IùøxU¾sˆÊnsº‘Ô%·}¬ç b¸‰2u¹Ñ§f‚ÓÒÏü|_Øé··ßÄ×:æÓeÝ£ro—&ffæô ¹?†úVX¨bí3¯R/ÛËz¡À¿³ÿÚô!Ú½U_~l|„YÂ>ì@Ц[ÀJkÇF"A9å¬zܪ§®ý˜‘Øå/é|_"$_®m·ŽŽ»½J9ÐUŠp¶­$ Ѥe5¬<â*Nñp8€vq0áciõà¸k#Ó‹_‰ Nh3Ë©ì›0 Ûßõ^pÒ臫˜dÌX@£ïËä烹ïnÕ‡ÐZ£šãöjpTœWc|ô sŠyú–OŽˆ TÞ·²ïÏq¶ŸÎßyÞ%ÖKi}Àa8ÜöÆnÍÎ p>¼#BFl•¯:V&áäqg‚OÊÏó*Üò© nàÜŸMjºúüá‹LšÇao6Cp>À•¦ØÏïÎ;ü¢}¿YoOÅcˇۑÆf!âe6 ƒ¿¹^‰9/.0µÇfÆä¨BË7ÿèª^ï:(O0ítØ]ˆÞ–Ù"È"3ÉyW² „z—§aÕsÜõ]ùÀ_÷]}Í2Œýál(nä4ø›:I~ŸæàÆg‘À4þ,ëôŸ ´­¡üµ ˜7EU6K<Þ|T²®üY¯ŠçÂÌâÎWdÚŒ 1±ÜæYXüÇ=øâ¸Z Çs¸O™uL¬ŠÜÇ7ñ€¾1íß™{mt¯›ê“)ëŽÓ÷ßß=§Ê[¢ðÔjKå]õ¯ßq4”[Ù¨G¯>` ±×¨ðf§}ÐGÍ^n&L¾æÔýât¬èÖ¿b…™€Þ­-6Ù<„u Æd-´ ÖQ‡-9Ÿ“3ƒŠ¾÷žùzË¡/^º f4(¤-• ,%ÂsldñMžÞå€_Q¦;¾ “iÿ½´\õ”­š¯³+_À#üJ8B¨·B÷¤ãŠÊUÙ ýìS¡F~,3^ÄW#ˆÇøÁÑã$ÃTìÒ#¢âŒ³IñjS TR ‹,–? ³¬ÆðtG9•¤[àm¼G%E™›mÑhv*®Û¬ÊbžCâš=ÙËü»«­ª`ûz‡<ò“ ï¢+$lÃë¹Ü’é•>{ªi™™³çù_‚H‰ìÜx®¸ Ùõù4ÝîV`Ú¹/é,½å`¬ÛÉþ&‚¶ß:5¬4¥[q¬ŽíñRÈ>¾x¿”Q¸ê´ÃÝ6¾àQ?Ìxh¢“ß®Ýp3Ð=· i´šÏ-´½BîO§û^6ó¶Ðç[IÆiò&¼<Ó4=ÒÜèXx _O…ZËmp鉞UpñˆŒ¯‚þô'¯ºÉ7ŒÀè(.`“a“ºÌ`D$œ®Ûvȶ”Å¢!–YXvùá×nåáýïþU>®ê£ÖîÃù$ÐÙ%%äo¬ëÞ¸òzíÌCC@ÒTmvJ5Ña_D ~ O¼„MˆW™Çnxµ'(ÛD5io9@C‡s“—Ìú({Áú„9ò(kí}:ÈøÜîò[¿$23€íXíÈ¢+8WÈÇBp—»©Gah:nrêðöÌÁÅÞg|ƒý’_Øaìåfï½/Å –I’µ«%¼ÝÌ•BˆÕêÜX'󩇸KÖ”ù0Fò‡ áªvÕa;Éæ‘Ï/ý(Ö7¢›­}”…š/ÒYrõ6Í´Ñwàa|jâ®z¥ÑÕVºý%SýXŸnóRWÖ…NòÝîT'wƒ6ëöwÈ}ÂeïùÝzÇ­ïwëÅþî¼ÚÊŠþf冟¨Rµýt$ÈöfÄeê]7¢9eÆöcÉø±Ëø{ïÝoÈm«)öWx¢ÑÍ …n [’˜§à ›X“QáßvºÌÞ Â5ÆZ³ƒV´¨ôXFí4ö:ÒW‚©X£zÐÉT>"B+7¾ ©£IsÓç‘ܪ·XÊ7Adš67ØÉ8—$bÀû(T¢c5˜¹Ì Nä‘Ö£¿’Uqì¾Ëé|ßö s|ÏDWõ Á¹9 x5Ãä»éÏVQUuául—Î-¶z‘ 𳱿® ª¶>{ê]+™†õg¤Üt5â/ T M·5ŒÂ !ÝÛVQó"µã›_òý¸_¸%SÞ»€Fr¾æ‡ ¤ïÎ¥%W°n¯ÜPšuL G´€Bêèœ?¾VÏÁ¿Ñw´^ß¹í¾^¹»Y“0R`µ`©M),¸ÚáÎ6…Ò (×ÚÒ³›¹Rþ™ÜÞïòëûÚ$lzÏ ì9 ´µÝ”)l:8].Ê(KËaê(åYXñ·/O^hÓÌÏÁƒ…6qÙd7·ÛøLäAݼN Ý¢l—ÍŒr&ësþÔže¢.hÓ§ñ³1+p'–§F¥&]´ªª°Q¯²…WöIŠîwg¼06‡dü‡>w~¬º·˜Ó@Fc·ëdãqLJ ©îî$ocŽ·Ä^M =¯µx?æoˆ/¾–÷›÷Œ¾p­÷Œ°½6‰ÌÓAÞÙZ *óJCóñj¾8B2îB}‹èVÂ2낽@çô`qçr ‡€dv˜ešiZPžK›©T$èL­âóg©Î_×ýM²}ßõGòªT³ÓUåskSµ†îX×VRüN³Á¹dÚhжáÛ.쩟³*¾0Ó—­Õ¬¸æÎÂ^/Ùvo¢“BR\B`Öu™—-¯1[bš‘ÝFûç[ú×#}˘z}¢êíV…ˆ(ãì|fäÍ)A0aÙñÊK§6ÉæaO‰¸æÙúk,y]ZL4IÁÌ6ª™3Ã\5áx´/ ýËÉœQÙ.ÍÅIMécçì·ÓæšœÂÒêo<¡%_ŠU¦íö€fî`{€À#bõÐ!éÜÎ’ •Ò¡‹%„tå€Çñ³ÇëÅà”ÝöÏ9ôÇðå/ê`ð¦«sDŸ«PÆxU93pˆc4=…:s‚íÖˆ½»‡ló„?Ŷ?×<Ûë#t8É™ž}ªàÙFØL}¨Òíí¥W5à‘´[¬x.û)×i•‘‹GÝôbÑYCqFòТ]N˜ÓþØ_ŽžlÆy· ¯ß™Ÿ3ÌVI±ó®ÌUi@« ØÃÎp8`[ŻݮN`dÛ(­¬d~´¥Jõ¸/wu_xiù2öº9Ƥ8ïx©›£t>ЉÛBÈ QÊš€výQ^©úDHctœIä±§&äŠKL,ª4^64EöV³‹Gé6ŽÀQMDEû•”€oUúob# ÕÕ¥o±V “ØTÅé ¸JFЙ?ǧT Ã]Kç4‡ºîŸ…þT´cDõ[i–õÒµÍѪÙãs±ãÉËÈWn¦6tq1O§ÑO•ªÞÍñø“É&ë.ÙdzÓwuÈ«åj;HA9ÇÚ±gAòÒ–¢ì¤„Úž)C …®~ŒäõH¥ÕŸÎ©å3£~¨×÷/(«=­1d`-v‚°£žë­w(í0/<ʶ“í #ó £ö[.¹2äù  ©&ZS7d‘KA/a£Å¸Ð,ÔMÓ†„8¶Að×§ÍUoÑêj¹”éZº{“twb™J' Þž·;ÌÖ×mMΜAÐ!°¯_F^Ä¿r on=F1CÒu3òΪG"nYM «8Ò¤'©‚Ÿù,ÀVºçX—4éá§Ó{ZýÖ'fò–ÕÓX_nÌÑ]ˆëóPÁ»qôÿVy²&T2.Ú°6!Z†G*Þ>PÆ ¹´®"¥­Ü1¯4ŒWéׯ¢dÚr©Jîªs+„×f¶oçÚÑtc#Ü8±ñycý>W±ùg¥øQ‘íuÑWzáêqEwSš7j˜%-üèŸÒ|×{n.Aj¾"0`gˆ‰ÌË™þf¸R{Ôyøùz-ù¡Õ6u §Þ’žO¬šêìïÊniêª×–ÖŒ¯^´|Xw5®Þ"eê‹ày±Û‚“-˜2ì&ZußJNë…ÄNÈ î‡/I YÅd£ÿGë?¸Yº{<±òi û –6¢Sl‘‚v‰x$9»zpœüg>Ì¿úóÞ›<-“Zrøêq‘ÁS×(iàÑ «Âœ9«3:*œWl¨#ès¥ðb7¿É:!)ïDÃïöshŽÇz¿ Ii,”mÀAgd/he¥.ÈŠ‡‚Bgp±kóc9û7*³:1’6om¥ áJvyhš~Ù³ÖI"`Üí-xÅ}Q!÷Ãöß§µ_áÞZ"­úë+ÍöÇ:>Öö…¼ÙIuR2Í:_fŠe–†ËV¼J&³<+²…`5 «(—JOˆ‰)#³2‰ºÉ#¾ï‡9¡ñȽÀº?Yl«ˆÅ«ClŸÑ$ŽuXSöà3±Í¶„ì ‰fU±å¸,ÀpûÉ0×j.7íåùcJozk=´žçnHŒŽsÇh™¶{ X3ÓZe-1뺇²‘£gî™CâKÊAuç„ô©Ì8Y2Ä¡k²® <íDp‰ËZ«°í8"€ˆuô%êâ}&›üea/q€÷›Ñ,·œZ*æ–NNÉþ~dµ-¦ŠÍQgG¤`~‚?ßLjâG M:þØç7¾z†h²=àb`š Û…ì ÝÍ•¬Ë7‚>RÞË]9NáßËä_õ­è)…ÚSïGJ=;êEñlÇæÍÖOò¿ð‹¾hôTÿJ[žo³aË¡x•ÖŽìúÈmŠ%î@3ë2žx@=ÛÊ^3 ¤%E³z˜¥§!©'Ù­¿ýõqûÈ'{VˆL)ƒgF¦š¹üx‘P¬·$z®N'ytæór…\cû‡úfÒîqÏÔ’‰ü!Yµ«á •˜  ¸=)f{øŽëd‡l·D´¼ã{-;+Ê {‹8eÊE1"nê05&ÀjA@\:X{KôÚ”Ú)Ì¡Ûï­«áÐcÿIû±§ÊjN¯p6¯i6×ÂTجÂ}4Ãö9.£—NG϶³Ró ©¯úÃO®æJ{·ÒiÖŒ¬SæJÚ¾:[XŠ$þFÁ–ÏÑxé$àçÄŒ, Õøš‚C‚Tâ9tÕZC í¹Œù#x·9qÔŒðƒ?¸‚Ñû„}ꀡÞ$ÆËŒ)»Ùîñ©¬ýåºÅÛ#AWu µÂ•Ú²úE,ÕmÒ÷eÿ“©€ë8sõHÏœz©†PMÉË•% ­Æ)âé¤74mD“Jbä˜~¢Ä×y°eWÝz•-‡ŽÄ<È!ÏÌ4q˜(¯1ÐnÓ' Èú@ÙÄ‹ÄáoÐëɾ04QµØ 3#G†]%˱…Vö4Ûmª0¥3 5wÌFÙ¹Ëû Ϫb¼pc@CqÌÆÍuÞψaRt›]«àY g‡bÜ8º¤¼*Èo[oþÉ™»µÝ“t$ÙFªËnwl$Ô»±UÉèõxHSÒ¥ÀZó°ïøúÛO(³O ¡D[‡pC â|9ì…›<•(õ75Rè¿ÝWäk:àó<…£0Üî8w`}I׸é,ð‚¼Ðf- áî&TªÑÆÞlÓéãÀè§ÓžVküA÷&E£À³µo6~~g6Òk˜ £7vïÀ Ù‚ÛòK¿Þ70"ûñk3®/ ä;4òqQ¸…HîÖÛø}๦Ë`wuhÉ`jÆàpݤÕVDR¹ |ƒèyÄv«u9Ð~"ûôgƒ„ÊówñÓ½2Kò1U*EŸåws?îöÑ1§Q‘4³Û»À!ŽúZ½pé=ÇÖ¥¼ð¹m˜,í6Îí'êܓږÜÎæò¾‡ å4Yo~ªZ¯ò¿æRÝ· J—×Å¥Ð{>ôKËn—s1Õ$ÄZâ¡ò!Ý ‚)}yÁäã ÿD`õÇëÕ}€ #:ª­&Yt⥔Ï”bɰڳ0*ÀÆ8,¨îà«ýÎõ²Šewt)ôcÏ´Eh%ÓLôÂßèknRÛ`n¨W@]ÙÝ|mz/íø¤´ÀÕˆ’šÛ›åÌCàÉÅ h{f Ù¡K›”OНQé/Zëá_£+K§ú‚_;#;gUG”¦ãlò1ì1jζÁ‰I cD†"õµScÕIÇò¨mŽ]5¬¢@­¡füõ¦n/€ç͇ªAò²â>wþœÂûù”[ÅNúˆ`$jó°£.²YäP^˜kæï<õrô÷õ1º øEòéO~¼UÃóÊáú‚ íPÖl{SC$éĶ2-L*u>éŸõ Fðó´–Xóaêöo?=1¿zxVÁƒ àÄSQèäæyµ¡v¿ˆ1 6‰‹×DAqaž^VLþoïŸ ÍV/•nœ ƒu©VÓvK7³•B‡ž¢0’»-+\Ïϸö±–ù9@}_j=EoQÖ»àz¢6ëkŠ¡‰Ø ©ˆ™vl^D!¯*|T©òV»n*Øõ|§yjȬ¹VKRŒ™Þ ÓÙÔz’ß,R¬Ž³ëb±=k­…@Sg ep g¼ÊzýÈɲÊrÐ"qV£ïA½5wÖX…MQ1Ðn=ƒ€ÚNx¨s¡þ„¤yªÖWéeë.Ç1,ý#´AÎð ›±;\ê·“fUcf->låµVÌOk«â5¿]ˆòSµ+T ˜Q1²Ñ<¢9ˆž¼l,¨¡‰$^hëWâ?çà¼B ¾1/žöc¦.<Ð6 38¨ÐlŽ£# Ø@`{2“x}¾æ‹\^5Ê {ú=j–’wWÓ$@ëk-„ d¸îÆ¿YIÆ f%œð¢ á+$w«7NcÏMœøæ%úë0x»ð=]@¯R>[±"^ JÖ{v ¿V¡·ªþ\¥—ØAÉr_x 'ð@S…€÷(ÛÙl&c¸Xʈ½!œgvêî¥Ä Lo!‹¢UÊу r8ÉðExucõŠo’•vHÏd·aLq+à]7î4}îåÚ&(ÕÏYG°|±),¦›Ñ „OϺáŸîçùÌOÅ‹ËpGO ßÊþT:›kqÖ¶sãC^½±7¾nøsýÉ×Ï}VÞI‡tõ ¶‰ãD7vŒêlÑòŽñ Æ´Ã,’P†ñ-m»Åœ^ýxïÉæOsSç¥rC?U%3BÕ¬‘IbCR¶­ý2pI;T•¬©WÞ‹ñÂâÛUUy/}šôžwHòˆùÐè{ò°ƒ¯L3jkæh;·ÞjL[ ¿ÿ¼ƒæãHÎÚ `AJO'9l£þx} <)ä²=þîZîi%9ôV2í>iê}‡æî×çý$VO¡Z.Üönn{®¬6¡†‰áðY«€ÊHÇV |²®ÞJÏŽ¯Dïö[Eë*KÛ3;ÖPð›L>v •fÚì­l®8µ·Î[æJéÏó¬?ìN±Z7[_¹”ÍC{É|%¹æp?§zè*‹œp=è{{¼Íñ†ï«—…Úìëvxì•e;+.Y‰KW!W2¾tk¿ñ0gx´ò,§öÇ÷<é4:Ž™2Ó.Nâ˦¢ÑB$®|ÿJùòÈ>À-VÜŠÏ#„ÇËN?ò(iœu’S”ãŽkàZ#óÜÕ{tW²Ôw1ò˜ÍÊøJ‚É‹«kN`–6i"¨m€ 7sœ]ÏBCFô½ä x9› u(•iõd¼Üt©œ%ótQ·É)Û¶,‘L>Ù WŠïgÃP(7ó´Q,€þ~‘Íútj"è9ER=vÎø`ƒ·ž*£TãÆR5n6ŽpS-¬ÑxáÇPô…RÚÍ ¯ê©%ØÅ±døêô4±n>ÜÀaÛñA¨O:ßÞêö2Åk*£-&jÙVÕ‘ÊÚæ@È] tKZ¿ŠÞ àêzÏC¬6‡áEbÉ“”ÜpyØó^Jè«êŠë¿òÿ®ñѦoHá…fTûc» HÉcÃY%¨–€ă/Jü7‚`_ýñ«Äm³¤ƒµtNnŠ$g²[•°ÛÉåfàYÓ}W®4—ÿKë“g¡SžÚbÛ¾·Ùxçs “†BÕäGè4Éi-MܳÖ3×ÛOêï­ÃËÍÛ¦ôâç5 Ë€Sìæ-&˜ÙÂ$Ì ¹0[ä@5¾È·ýÁ»øÄdÕˆk±Ü ˜f] ʈñ11°H”æÀÑÃI{°·v[è hX¾%`2¿9ÒvOŒ˜~^$÷C¬vؾMˆ;¦¦lnKu)½åtE y« v²ÛݓҴ)¬°û„séÇ«þ,ÅÚd“7{{ ¾ÁÌ”w–ãC3‰ÇvWÏšº-𜰶¾ï} O ”—¾¾U8A=7f$ÌéhãrSŒÖ,‚=Ug¶?#tÞ¯„y—ráþºK–óЭœý‰¿m÷ÂÀ ºˆ¹ Ãô-в^¦±UõÅüs¯3æm†â„žt@LÁè1ž¼œø„¢t-ViûªeVþÜÝâ¯)Üé;F‹Â§)ÆV¦Ç}R)ÄeÑ.­Dˆ>›1Wx8AU¬Ó²ËZ Þ;t|êPù«"ÿPÿ’0ûPç«B œ8†´p $gû¶ë¢äX¡“Y%õöäL1ÓvS¡öË5yQþ£Sbß)íu¥‰•.vZÉʸ3‰M\KL‹uuˆÁ Län±H9°˜ùìÛ?ès¸–QÁ°RZíŒ}H(çbàÁžÈô­A‰d©éLpŒ†y$òV«ñLm òW›ç>I¬\m÷¯XªÛŒï6¼´Ó*|·,ˆl, ¶´h5g«ð¡Wý:¹! S8ƯtÎj2$»$¥¶ËáVi—ÉÇp7®¼æû¿óÆç)²3¬ˆbúŠ™bµ€@¹_áÌИž‡¢$T ÞÉ/rÿÿ|1mž3Qì=ú3U]—úižöwhõBŒ*ôfÜ„Úy§ó#nçþˆî蔳¨¹ëßóÚÅVÄØBí]?wk}ù²sLÓw$$ª ˜Û®\{!÷œ™Ó"…æ™Ññ(oùFÂOxèë<@6¾B‡Ã8'}DTÄÌ„S¶—ýɉËZ½.rÖC…­äòþ™œ¦½5§y¤/8À ÚÝ¢=··Èé–r£=bD¸«7}(cN`ðÞB½•.Ÿ¿žá?IœS·—üe1M{—L5*±×80'ÇÚ¸ä…Zî‚õn®vW>‘Èð—ÎroñÍ—mG/’׎ŒÅ©vVì‹,):ù5…wÕP²¬÷¿K¯È‹Po^%$¦b¥cf"Ô1fÓ†O"Š:‡ž5$eÍ'ŒGS$P&ìçz_Ó{e™YúxûëÆûèà'Ù9*ï mÐÛYµ r‰kr0.©íæ¡ÅŸßw¡Œnw³éóoÁÊð\*±6Ù”ZÁ\vƒ×Öa«‚C]na½8œ³æSï)óÙz7‚óW™? ›mËÁ¹ýÜ#»<³yÜ®J)¼SãË5˜\Í_´_ê øåj½*þÛ¦ìtWPÍfÎçƒï‰ý±ºY‘Ì… ÖÃY·5[¬˜CÓŸ•sþôêsÚ»kÍua²íÏWótƒo¢«È&"Ô&4½¹µ%8l2áŠÂ¤]˽ðÛ¾I‘u£¸9ŠÝìØ^n&…,ÏŠ[å„“•`—â šËOº.K|>‰“ÊÛ׿xd±8. {Ã1œ@ ³¤àmÞ#öÉMdáiã’5çʪ;…÷„‘ö0~ºìB¹bŠ>N®=A ’kqÜ|f¯ÿuê#Ýçðxû%ýEN~é:ö´å¾@ÓÂcTc;¼hÖÚ. ößÀouá=5‚ÁÉ¿*—OÔ'|§±Vo²vI«] •$I€8¢,87Õí«hÆ:ÂXt©|¡‡ÏgŠÜzE²NV8890qzÂãÐàéœ+ ‘ºÀäøXD­¯-ùoÉ}/ÝjûP, Ãäbö ñRôgõ¸3œ‚ÅÀƒ¤ftAîjwù,VúÒŒì6Š”"ÄìÝX™Zׂ^s `Úâ\—®ÚIº•ÇÁ¢r·³æ©ÿ‹OøI<‹çók¹–`_Ð<¾r6÷{$¦ÛmË"šwä“%Ò’Xë½UÖéYR¬ÖH=ïàe³‰ÉÛŒXç’gº¶æirC”6Íü1{ÒÒÚª¿ŸÜ3k‰Aq3èÝËeï&¬i»Û}AŠÕR|¼­Ù>Ûÿu†à_›+¼(¬Oªž‰¶”o—2É}38¡åwWƒ¿œ²ðL…!°;·X}Qâc&_êÖžÐa/¹œÇ¨®òGÛ”&íúƶ‚ÆéåŽ?Š ˆæzû+5kߊÅÖÈ–YcäHy<Ç·ô˜Ú vWüæ”~ˤõÈÞ¡ÖçƒÑk¡Ù¯Üûød5šŸ-ˆynS9™;ÍTé€ á…ÛÓp4$¼f‡°b “o˜—ŸÛ¯~Ám]q‡ëmr{a¯ÓÚ~7.—Wž´àbns²k¤ºé€Îug>„§qÉU· ±Z eGõÈ¥TlK*<æYQé2)õ~ Ýk`\u'M óo½Òòs¶B×ïm7½.Êaçšà¶9ì¨ÓÞ­Sy<„ÀÙ ÝgsÌΆ±¡úªªgqåP5NªHx+¥kùmxÒ{¬¿Á·Ò¥ä݉~žü9Áq5]¬7¶þÞ/gå|ÈÜ[q«;ÀzÀ.Q ¸]mw•®‘€ g¨G»ÇÕåh%o6ŽF‚l-Ñ%Ýë.,¦Ÿ›=ûD«<ë40ì ,쌄ó{o[óÓõ¢?ìu´pmÿèöÚÞ1>G3 —ÞÞò-Ma5£†Û’AëO'ª‹AÔ=T‰‘m3AG€¤1»t©­ô'ze «2^Åø‘UQª,8©È#t‹|¨óxmôÉÝ6>–oÆ SšÌçýo__ðþÛ‹ÊÛ‚ˆ‡ð4z¼#éqdQ oÂÄ )vQêÑæ¡”½({¤œÖDúÎë¢×/ûsœã$âÃàî÷Û@'cklèSß2¼š·=šà¶ÂtiŸ¿­ê]Ô¼lÊ;‚-‡QéÒ™úÁ;‘¢CìžèèÝBÝÅó¤‡?%Û£¨6T‡þ¥õ¯³[ù¼ÄOÃUgA_6t†Ÿ\l¿½«3Vò&L¡g4 Õw¼º6úYÏ zãÌšœ%þÒ€TÓìÊÝ‰ÉÆ$A=…ÈÐûÑ>Ñ»äCÞeŽtì¸Íã2¬¡2 I’âô¤åkÃó4…ྗ'=Љqù‹ï¹³éjîŠì$!o#ãT1Œ}w”ù%¿O½LàÃ'Q$éŸ{òÿ(d¾8ŒÖßxIJXË5¶Ô}MTç!â!愜4`’wÛ90‘iŠ‚†V^fò y«™QPšr .ôióÿuvmÛŽiQðƒ<¸nA‚X‰Kx[Ä-XH$_ßûì=Æé~HH÷0 ¬Y³fUMIg×’Is²ã4RwœwÏ~:Æc£hkúùdU˜ßxnA4údS™WR¤˜M¥*ð*ñPÊ;eùî`»Cë’ç–.ÛLù«ç^"æÍemä'Ú]õ@X”# ÌäøØ÷šÛãÌ}è Û^Õ¾M |'ò–ùžÐîÉ­a¸‹X„ÅÒNYI+Ërö ´^™_=T1U¯•y™ú¿MÕÞw‚®¤v ‡qSN|Ѹ±˜DHùé嫲¬W:ecª± ŠSÿŽ&43¬(êö(\ð}W÷þÕ,Õ¸k‹©=»öë\8¥ÆAù§êÛGû}J[]ëü²¦eדd'gˬ¡ƒ5mU{òÐ=¶÷ƒñs½Êï°…÷Cµ&¦@ëA`öOuçm¸MáäBqàhp§ó¶uDòçfL¯vA½¿§~¦™1•4ìëÊHÁDâùòëjˆÂ+!µÃ…çï„Ýë7ºÐG|#ÁÅ>"t,jƒ%$ž“èºj¬ˆî3ß”ùJ4M&…ò‰;àDµ´ÎaÞ±Gýí>>ÛÊBâV»†ÊÝiª/ânŸŠ©×%úvꀥ~¾lëàò~1ða«ˆ’.Ö¤9t’UÇÒ4„vpÈNçÓ ±Ù5ákºùcm.œ¸H.Ä;Â&Ê$1µ DEUtŽ×½‘-WÌš‘?2wª@$§`û‰çúr”ÂŠÚÆ[äÐ8Ÿg÷4rI|)wf±ä‹©áÎïåÁaÛº6Ë­Ô¢ ißnãíajÉJ¤Ö'r` ú<³Ççl0Œvñ&µ²-ãx!âÀB‡È!`ŽôHâPx–çæMï»ßuޱ’mn8‡+7)V:8ÂÓÛñp˜Ú¹ê’ #æ$ȋçv­?d¨?Åi±4‰ý­È½UÚXâ5ã’ò­ÐŸq{Ñ1L¨µÈ©I0)n^ÓðS‡Þ› ™¦äXÍ$ál®¼ls ?º}K§;¼yÕ¦ÕÓþÂzåωÿ PKh®…‘A¶PKW@uWMETA-INF/ECLIPSE_.SF´½É²£È²6:?fçö ÷¶7qÌî@ D'Ñ fô}#zñô¿ÖZYY™• iUûO2%2MDx¸þyz–ÔÞ0vÑ¿­¨ë³¦þŸÁÿþû¿è.ò†(ü7uÖÙâ!êèÒëûÿoþuôÿùWnÈ2Ô5Xµk}†ËÓž-1% …«v½†IíâÌ4³ùÓ²ú1Bí•`åÕ^UQ=€'¯ˆ´±²*’®TäÕ[ƒ§’©’ýEѬÉä/Ññ¨âjÀ‘ ™õt„ܹ×å*ð†ùéàÑÒF]ö6æcC5]õ ñý÷÷÷C¤M÷ þoM’Œ{¦]¨†QäZñÐ:A]Óœ-“Sµ1b'Š2ôé4º±|6ªÚ¦óºû©)èûFÙÛß[ƒÂ#‰Ùl ¦GÓ²:štDJDmÁS-»vJϧ;¦y­õƒÖõCŒAÕëﯽÛkïzЇúœLõ|— h(p âäz_(í_%é¶ì…¼EÂúðì+ÝŒÃÖ &Sr&ÛbÁ)Ë,Fâ¢~$ô:$Ž9Eßù¹¹Hæ/ïÉëͬ¼”¼…Ëúá±…ß´‡`UþãŸëäüx=yד€Vƒ {­‡‹c~*LÙÔ3z\¸wRza4ú\ ©(nºhë×±},ûÓ ¼PnMçHHFKÆ„¥[I‰!30‰¥9°ûùüص·Ã’µcé -Ê6õê±z¼^°5î4×0pÉŒ:М™:²Š¦˜¨Is¤R{G-˜!—UõóÅýl\¥ ßWôÝ<ñ²¹±•M…‡.›»¼:gd/eÊ3ïbYú–<Ê=Ÿ1W]#ŠgcŸ²ò¡*N^ð¾£ßäfø®}™%ˆÚ·imÍÂEuzPªÒ§r‰8ûY±ªÈé"^¯/»£Ùé·QÙ?WT)Ò&Ô/Ì¢gÚáJ²4™JV‘bq.þ’”|a8€/ÑUŽ@­á$ÃDééA­š0*A¹aߤ7 Œ{=Îîã??æÕ[^™…Þce¶f±£.1 Ý”;º?ß­údÈ»ñ²è¸FwsL"bª‡dîhþ•ºø2[£ðÛo›ªQ¡®9â± ŒŠáø•Ê={ÄÓN"POcæ^Å~ÑèÇA}³³oº±ŽQðPO^±ÃZNü)À‡¨9ïÖ…õÁÙ=j;Ø*ôùü~~7·+áÖ÷F-°߀ãN9ûƒ<Ó•s‹+ñÀìý³Ïüýó·þí” æã1ºÇ0Fî›R†oòôþèz­Q'0ôÊ0`V­k×]îDA)ÑViÍÌ=£¾Sž–’ÁЈOךçåøí˜ÌMW|Ìg÷6þûÐtå馹˜â«7sÇ“UõâîÂVÁ• »˜§Ò4×îw‘XÙ噼kj;ÒM?Y‡°àZY¢9O)ÙãÞŒÏ;´…çÂ0ñ(GùS °aœš×¶÷M)”eTÒMÕ>h·-ixîöƃ:ô<{±ĸ#„ÚªpgŽJË'‡û±BmJúÜþ2lð0É‚£|üö° åFߟlÊÝð]$s€2îþvp5ŒtÙ(o±êÈeLJ¼a‡Öo®Åñs„ó›Üý°Mm’mÆ[îž÷È8ß%·Œ&†ëÁ¢‹À›Z¥9™Ã.Ž+ˆžníã€eq|œï‡€Ëïß‹¾Ûø6’&ÑwÂÜ5 qóû°bëp.ú®à€]NîÈ‘ûT±übŽßíÀæ«ò¤¾ô…äs.Y^’Âaì#ÓSÈî§¾S‡æ<Õ÷äséú>âûÑ¡Ÿ€+ ôÚ{)O]ÙÐeê²<È`X ^ðPwéùÉ"ìä__R}hÚ6 ©»ÙGÝK‘+Q”” o Ì8)k<#íœM8§­rvˆaJ`Ò‘`þ†CòC¸ô6 Þ¦vôOm{}lÛ2‹êkSo]H_"ÞA;³UÈ‹Ìú;Ã>œÂË Õ4îÆ"B?w’>·üïžáû£­qã`È” ŽqlL23á…É{U¦ÔüÕ¬ñ¢Z±³!>¿ /Tù¡ïÇê}Ù­¬)¿ö4te4´ÛK[;±<@§ãJ˜Q5kzah¡Œ^?'ºÏ<2fù˜ÁÃT7clÊÝ…ß±*ž-©ziÈl¥ËËá{¯Ui½ì8E“íÿŽeØ´‘>²Çw‡†æ¨¤šFÍaº4NÎÍ:ù°vê´£µ–ýçZó7]õñ¶ÚãOéÝKúa¬(;*Ciì*:h!{ü—­Y5]lh"îÚg¶àç ß=Äk¦ðîÌÎãŒ"dž7Ú˜|Ëz1+ÿÃïíÿ@Ã÷Üf}žRç¥hÆ–Ë]À¹†Åˆ`‰×È2ø=³r;áüJwG·ññ‹ýÏFûx° Ñv%4C‹WySZ[ayr¢°K´?ࣷ³ÕOú^6Køe ô'’ÿöý¡ç—ѯðþ±Ÿ™0ÂMQ “© ²÷’õèJU´!G@#8äðªw÷æL}~Îß̵×e}SŸ¼¬»èÛŸOÞ?½iúoÇ,Žç¢{ÿöd6g>½hÚÎÙß°¸_bB 2ÐkÍ®i‹‰Å0ßãžWª/¹ŸÝ­­ —nUË©uÃ\•šÙ°HòÑ„³‡í¦54¹ÞÏ5Ò®™ß¾ÿ¦¿‰à¶5M’Jíñ\Ü"§ L)JéPÚ?$Ÿaz¨ò¹«”»«è<9ûo§^³Ç@›XÉ1Ù¾{ûÍ›¥ï’ðò°"–rw”Ó9JÒæaÔŽ¬‚ë­1ž»‘?ó=ß°M°›ú ò<ÀføS_úe%DH7\WÖß·Ó.¾»Î¹¬Ï½åï ´ëšŽn`0xâ· Ž ¹/+žò$?0gLȯŽ#’Õ°j6‡ s­‰[®éÛXo†zö†`ãÖûAÀñP2 ð¬¤7t•½™ÂN\±±ækƒœDêæô9òçiýí^zÝ Š^@¥®ÄðyÆ7wˆ¹cÄ(Ór®ÞÝ ‚‚ËJûüÕ¶._ÿŒjO¶&ûFšû5A0逇1̬“t/pDÊèk›»ç°¿ÃŸ’_˜»'@^;0´Äšé]¨—MB¢èZ&ƒ¦y Ði|ñ)ÐÍü3Œ± f7å´=žÒˆÂhïr ãN¢dˆ ,µÏp¬Q‹//ü #½aèœøwë«ß.à& ±l^E#&Ù´õÜž¤;àê×tÚ£€–K“Á‡fb¸-ëƒæíûMN«m^^ZoÒÆþÔt{Ç›VÉ—\LÃɰM µ`#%L]ã«ò‚ÉxâoóUG±'+™=ŠœÉ…7¦m'؉ùÃú‡#v*öw¦(ÒEoŸïåoƒ÷oôM†{ðͲ(õKq",Ñã—1c·ÊÔ‰œãAFˆ;^@ÕÊÜáέk~96_¡ÌN¨Ùt³5h¿ÇVÈS°i1ÎËLœÀ°.ÍΤfcåc·OP)ЗÔÐ7þû:¼oöö°i9ÙNJ×>MÞì;É»8º¨ ¾ß CB\1íÐ2?—àÏ]†`ý»ƒ°9¼ÈÉõ~.=EÅ.ÝWr>ã^',Zë15%3­/žÃ=Øþì€TÙÅ ýIæÞˆ?&öæ±ô5ʦáqÚßØÌ­)Þ‘ô²* ¥ƒìL¢Ò5 ö·ž@¢ˆ…jÈÐÆ§i–ü<Òñ;¾û˜Ósp·ç9MÞ´jËzlÐ3âPñaêì4ú¸8\ÿ'Š£½±¤çç°ÙY°_ܯMBx€åÖ›æ‡C†Ó´úà¶·FŽî= k¹›ïWÎwKé(׈2Ù1Ý€\÷Ô¹3î¡R÷­ÈåϘä…sh¬Æ.8]‹^UZ……›uÈB)å‚ǘº§ö~,ó™ëm}nJ7Ôk3<ž'oøç«üÎnê^úþ>ø½!V mðDÂë2&­­ÀUh¦ƒI†ûsB4ÞSÝû+Q}¯ƒ‡½«ßð×cU_E³¼¨2pî£ór^s{¾/*ë-%.Æ)ˆ<­;súç¸ïË(3Ï'±7‡ÑÌ?´‡= R¦ó-Â%8´¸ä®¨N°j¸§ôË|'®¶†DмܭL¡ `·gR_ϳ]y>PY8û8:§ÚÔˆÐþê;o§ß?˜Sùu›úGÊ¥;”}óoŸq¦ ñ8%ía?« ¢âtVYY‚jH°<…— áÏ}‘?‰¬h^‰ÂDйÐsÀ‚ã~ÑìsOCÄ w–©ñ„œ¢b:ãQ·Ÿq=o¯C§^¶ fgv–Æ@oûY³b FÁ•¿˜°¿d;YóX+ÝšÌÝùKLÙ¦ûŠŠqÉäZ‚³ÎVß'=ÔTtü"ᢟªÅ:¾¬æÅ7#ˆdé¬ÂYs{" u½¤ܧÙH£CqQçÄÃUz4z2cŸŸþfÙlZ˜î<>?üÇz¬÷¾/Í”sêš# j%žÓ7Õ¶–Ÿð»›YÚÝÅrgË á,EEļ½›‚@WK“R[ÍÆSýYÏoA¤¿Dvžê<ÎjŸž ®:›$]XG¯pÝï–‡›Ðág rf{Ú¼IÏ7¹©·CˆØÃ@Š%§áI'*WÙ²tÓë±Í‚ö0(í1¼,dìÿ‡ŒÂÍ·,vô‰¥{æºt´¢q¡s«ú„á14á.ºçoº€ïtÂïI3o‰Xcöþ¢Ï—2BNáμù÷”9ª|q¢Ëƽ†¹zØ`Lj®¸á0Î3„l…È>á“7ir[Sœ¥Æ¼uÙ…G£w²Ä|WjcÂãa=kdJëÓìsŒ¶u* ïÿðïõÛQ}¨ÞÏ=\…´E¦ ÂÁXõ„äÞ-”$‚¸—‡) õ³¡VéUk,[yÁþžx†…†Ð¤9&j<Ô5'·<»ëÙÕðÒ€ƒ8U/݆¡i‹Ï-ÿ§@YíÓyƒŒÏý®cq»ŸmGnηƒT@ü-‡¸!#½"…›—QpaD¸°ôVàÿ#(ÚFÁÏ1Øï ù…&œÎ4îL$œ(áÞß)s—›0%L~–á4]~ÊÏšÒßœ‘òM‡œšn“°E"L»;Ü…µâ# wcõð{›»ÙÂEYR—¾/dö4ñp“•F7ÁñXxµ-è=å5TnB&Z…Ôæ#Yo÷KìÜøï8Ïss?pëÇÙz±¾>j; ÜgW@TR–>;´*#f¢s‘O» ÝQ‰²¿˜Àò{÷ Ù à°(tC˜V9ìrŠ‹Â–S…E”#'íÛæáæK9æåÀz2¿žÔúám&s†¹_±«*È#-õ˜ˆ!Ü”¦®`r…O;5ÙàÎo_|ÛM$·„ôƒ¬.D·–×f>òרµPNyÓ•8}…ù¡Yàò±êoiÈ›A1FƒÄ”ø¡ÉD®˜o­$Ň6ÎçâHôÀi,xB Ûüþ.Lßk´6±ÁNc€bšã8ŸÉÝ©p¯d‹^‡«½£¯å VõÜÊÏóáÿº¥ïS¯wT7M¾Ó$µs\‚“gÌQ“Ë«írÖ-z—\.ªtêyÉП±ämmÁÎîpÙ,«–jUbe–N ÄÀºs |#Ëö—Óé?£&aÕ‘¥<…Q‘>šD›€p.Ó±Vq¾rçr]ØXC3´|†{~o«mA¹Ô,t—U"™¨K¿¯sÏ©‰3Œ#4ÖÁ=¹z~2~ _þML_ê©™@vL'°‚‚·PêÅÐqÂ&.54&¨ìb*AêõI¦>)®y¶Ö–É¡9æÚ ÉÑKï¡»~¼7nz€œéÎàЭÇÛ/âU¿å:m ’u¾Ç&³¦ã.íƒCÞs@%BC«!¢\+ǵC>'Š~Ï0ÛJá"›áót×>€£ÿ€0×ðÔfw"ló5×5’¼Û_¯~›·óò0÷•—Õ¯ë…Nôå̧»:0'÷DÎ1BßU‹\ehkDÅ‘ð׉æsˆù…Æf¦’vÏ!¡sƒï«Ÿø&_‹è4#“U6‡h%$5†>_çÏIˆþ{&À‡ÚˆBeóÕVïcÍ…2ç‹ÛÊG/K{Ý×½l£xå£LQ·øMûþT´£Eí{i–ñÒÑ8+-ñ!Ép<¸Ä¸â‰\ƒI‡AdרYZ¦•±ÂŒ_”¾¦dßžýøö@2›«ß “A•GlŠ ›1Ð@ÖRE . )BR”­.åS3lj8ðpõ—:ÄMygG°]Süy÷SÇœºœq¿æË°D¥JK³¦Ø[c)©þϲ@þ(]ÞL\¿PfMHò‘¾ Hxä´Q(ppaÛU¦û]P³:NšÁ jü÷à»õ½—¼Š¥ÁM(Ý–£ŽÊ™¾Z6b7ƒ~¯DÂØ~¼×¶Õ]\Šaê÷êšï‡½l’æ?Ir–egN4Ý©rŽÝˆ¼æ§`*ÊˆŠˆáÂ.YRç ýwÒÁ·ws ÇIÂÍìόުÒÜe7,Òžgã“K`ß„N4ïÐo/óÀûÐïÌÎö¢yJßúÖ=2”ºÒ¶—Ý% ù 'rI‰«ÉÕ’ie3ù¹ ø±Yï˜ð•ZZGoïéáBÔã~<í4ô¹n–MÕ%°çG]Bjž©…w?Æv{ýÀEO¥"‡„Ö´Œ/{£ 幄íá—BÊ$Qpjˆ_ø—?rÉå±,_0(œÊšX"Õ¾F¢æÐÈ>ãüÂ_äŒûˆÍØSPF°Ï¾”û™-Ú|Ûjr°M¬«ËÈñ$¨qÀ3§0ÙPî(DWƒ^ÄúYùÀÛ²¾ˆgD†/âÄ`HA*ö|àêÐÂWÍF×¹ô·€ÕÍjfy Ï^xéÔ¡áŤ-*@o:“{ÆM…‘(:à‘Ô! ƒ*jêÏɯçèþmʤ;(ëD0äèöÇ=%°³pÓº/ÀÐ ÚH9?ŽZ 6/ÖîU” “ò~ÖEùÚÊ·iöÅÊA¨=Ž©¾ ˆ=µÓBCž+‡sÿd¤?‹þ®ëø¤~ þ´ž›Q½Ö_|¼Åu$ÿØ¡—ÇÙŸedžD6¸xàI¾öú9yø*³xIM²# TÆœŠ!É¥Zo‘Þƒm±ÊðÞò¡P( '½/Àêß+ä~YþÇô¢î{"Ü[ ~s¬“ƒ¶º·ÃÍ: L& æö@|þ‰4¨b2éòíCêÖ£á«d–gE¶’RÖ°Ä;ÇèPÓ•I0Ž´ú…£Þ¿ ÇUÖ(§ÉåNš/²9óØ6²{¦Á@R÷6teBIÄÝÄQ€rñí6cƒªæù^ Bõ"§òe.7í•åÛ”Þ'T=VûIJ\™Æ ¸¡Qer3rYÅùèòÒét<Ɉ<dq(nÏðœ{yO9h’=Õ™¤¶éÄã”@wz¢ÓNH«BIÅ“| oæÙÁð’öeaoèêÑú8óY7µÌšv.;gfG›:ÑYá˜"iN|¬^8æ?uÄÑ¢ø­†&›~í‹ókž!šzš'¿…ÅuðÔCy÷âÐ ¤‡'pÌ'7ÚËæHÌàòÅôÒ¿ìþfx ©1‹â˜Õ€´ØŽéÑqé\¹Ñ¡SÜðëî5€0÷Ϻgœ©ÇêUZ;®¸*QYÞ^ÝÇ 4 TìψTwbiœ·Ö Yáà~žžö$»õÛ_woùdÏ q½ëÔÑEnf]© 7ݹG|9$ºoࣗ“ÞÜ!7±gy¯Ç¬;gJ}Œü1Ù Ri-q“£ßÕMåë§6ù]`Ñàxúôl®÷p˜„[éà.zÃ)›™ùÍ¥ðVsDW8 ”…-8U1=¯²‚ÒÐ;‘#Ã#TÑ{ÿµ§Ê&iÐ+l=7ê]Ͱ„¬Ÿ3OÚÓx»ëÕWi™ïTëÉS¾m©oòá÷Nà=?OêéòÒxØUVÆ[ÅÅ˃rÕÎ*§ˆÄ+Ôïð3h“ PÖ™ãÍðâµË DÊöóàœ3Å¿)Ü(·ë,#z|½üR¢ÿÛ8‡wñ2cê2ÀBê@hãÈ{Z¹%Çn¸r Ele-`$óJSާ€ëþ×iq›[ h4ÚUïc×Ó¦¯ÄÎÏÃn·›ãö&V> ÷»sÿBšöó`ê lúí,*u!}}£ƒ« U°9ã÷9„5ŠˆBïz°Ä$Ò‡öÅ‹ÿ€^Hö…£I¤£3tù(hîÕ‹0¼Ÿ›.¾HíVæj¬·>Ý »ŠŸ­x6 ÓNòÎv»‹ç’Ëí$¼·´"C0î×顦:MhÜ^ÔѺλÿFæn&ä¥Ê’^É6:Íü˜Xé ¼Ù­²”Ñ ó€HÓ®ý±Jë¯ÞÙñíŽS¡ºãžè00zhƒÛ‘ïKk§•tÛÜÃùT¢€/ìýB]¿eóy_‘?ÒŸç)°/%…ì–ÎÅÅ£$xËJ #3?GËçäÈÂûy£ÿÞ—Óž6“.ƒ'õà2Ž5¡pýY¾ÜrÅ÷“„ôm8(Í/ÑÎÊð¢ëÕO`Dúññf\ßAÉOhäó¢ðÎ>ì,i‰8dðüô⟃ä‚ÌI9‚à*ЕîgP øübÖÕ3öÍ’|o]ð˜Í³l[K_ù9IàÅ=hz\ÀÙ˜"'ñ¤ì‹h\µs®]B½ü,|©r~3¢-j7|TcÜÂ$Èä4§ä9* ÿÔ !Ýú’sIcl‘²ëZ†|’¯ú2¸}[‚X,:XYOjØTˆI3EÖSöpx“åzÅå,Ì¥A™´Ï=ß?Cêß‡Šž9A(Ùdèe¨šAEijYˆ™²ä½Ò {OOw&3XCè~§Fÿ&žÝ¦1iLÖ+O «žÉ¼'nÃbÖØõ>ÊcÆ.Ã8Wtt§LÕ7Z#þ&f®ôóÖå?¼QÂGŠH3¬0V£ëŠ283ÀX{ÀuA¼r£Ðú·1¿ç~ýþ8X›lQì®Å"«Ý2.÷C}À ƒƒÃ9g;£:w0ׇýå˜ÕÏ"fÖJ|¹,b×Xê#…aeb ïa.ªö:¢ú·BkÔΧȯÎéã_®°zœª± (í½ž÷8ÔCôžMð’tÈrI:®7Õ×Èxõ­òêØ3PY{ƒl-n?Ú£Ó”Gñâú…2üß’CY~¨Ÿþ•[‚à=ñ„{D¹ Bˆ;ñ`*ƒÆ;ÃѾÓä<5…sü2ÌòDiyásß°Åf^³¨+z¨Ò%í§S²·=\Ňaǯ8ºÕŸtÞê^µCü#—ê±M¶¾..E’~@r.,òC‡Á úÃbÖ}9š¬c-Žîv Qæïx‡™Õ›û½6GѨ&9p†IuY]èiw|«xàpe… å”/•Ÿ¨—íì8ˆìdDc&¢GÏ Ìª+±ë.¢¦³ÜÞV6±¼ª>i¬½~¾´Ïâ¥þLïŒõÚ ”4&§FW ß+zµ{þP£\ÝéžÓvá…ÿiTú»ÕzcÀ7)‹Vðt½‹kÙØÃVía ò»âc´JÙiœMôðu±Ajlæ­ž°X>î¯ð¥›î¢æ&3R¤.ÈXáH°u›Äw…áe}ð'Sø83_¢U¢f¶2N†+]ôÕSkQÑò~ÜwÕÅ=³‘bèŸÖÛ×…éƒÇÛt<Ïâëð”NU­É‚AaèÌeéÞŽa¸¾íÜQ¯ü¡:v«!§©Ûß~{¢ÿÁðl:e‡«¥œƒ’3Î]4]ë0AvM ‡4¤‹=h߉Œ…£êoHüÙÐl³ï~!#Í$Xœ=ö“aœ d¯ñî-ß³`3ž¦†D”Q·ðÕ|QÔú#æùxÕ xkd½GYŠëEˆú²\B~ÏdìŇÑ4TYêàPD¯R,KuL¥•$O™-ÚaÍçH2ÉÃ~Úp‘¢×ƒ ì¡äÞ &_Ö1¾;>bêW‘Å/$˦ȥ¾Ø\é0‰2I ö²V‘Qúʼõöh í?Ýý;ùy\âëf}; ˆVØ75¹“Jùv˜]ºò mª†ÜÓ:Ál™,@©sÃF÷Ëϧpêšêµ¼Á`ß“Õ[æbév3œUy>ã9¬½ë†IÌô¬üãßjËñ{Î+Ä Õв§„´9Ýe¬¬‘þÙ‘¥<\¸]³¶—žºý¼Ñû©~s€6ßöakavÅ ‘äÖôêÕÔÚ¯±Fbá´p½Sߦ\÷…òœúíÍ …nãæ-Êröãé˜Ü\ð8(PØò·Dß™>4rß ¼ÿÚx…~ËrÝÔ¤#½ŽÆ®6ðR¸ž%á€pwë2˜œwå(«Aœo|Õ¼ê2ñ2"ò‚¢¨¾LÌ%mWw†#õñ ××%%#ÁÂQœg“íÏ1ésHˆ°^‰(¨¼XØêN÷°²q{ÁmØàÊÕo›€Æ‘ĺ¾¨cÛT!p¤tŽÄîmÊñvÃ}¸.$åÐGæÄ^ͪs…šU´5\}ñ¼õÁ¯qž·oL=lƒ½6Ômmc®àº#zU=44áÜ@‡ú&ƒu™;çëå5úßpßÿ~ÉyŒ°.-dÀ 7Ô¾5L t­záop]ØuÕ«SAÐ4\ü:ÿ½˜ï»Åø^Ì÷²AñQLù08c)·äFvb–†OË+\ŽÊØCŒ7GìBÿ£v„ÛªÁ¡ ’ädrHc©bæ¾ëˆ+Ò»=ƒ*cẺ|Ô7"Øÿ»Bçö"ÝTpËÀ3c*zÅΤdzD0§+³ºi„œt¦¶w”ç‰ Õ=mA»2 6y¹y‘vôs ÎNÇs4—ru€±¹àŽ8Æ!ë#Ò‰!áÿÂâ¼È[tÛñI¡ün—¸îLÙ †²#½bÈ+£8×øðÝQûï(‰'nñwVî1·lõ»¿é·ÛyVJ½;ŠçÙ‰H5ŒÚçFŒËu\pi@-‹8\Ò5æT£Ô‹Iì¢ _U5ý­|ýÈxë °y®ýÞ'ul ›É;5Ç$‰.ªëÑ\qÌÎ=¹°Õ?mküº·ðÞŰXM´Ç.¢µU"ŒkÒ(r?’ˆ˜ó‹ªS_gê?øñíEÏz61J€—ý[r,©Wà®¶† ¥'/± n Z|ø|Ñã±~o öáL½±I<ãÉrFR¼j;”ïʾ4cù’-²¿dJ¡gô^d/ýœŸ¶ý~2lV°o-ç¶ãºSÛÏ­f ’rŒCÄl$ÈÅY ˆþúµÍÛ õ[3a‰ež7G­%;ã&×½vÍ3Ä<[VQ9ÞÝCÔÊ9z…ñßµÈö²µ&ÃYTÝÑäżu4¡¹}ô÷Kçü š¼A†Ðý"§ú{KÂͲ¿Ã¨Q³Þ¦ðÚL™Iõæj 3ûRK¡ØƒIeEÝÈ^1ä¿t2ßš„©®Äi!+ÜÚàz!E)ÿ會Ӏ#RÐÕ¢.ÍËßÏ¥àë©)^´ ÛÅ;]i„PFwNN×°'-ý|JÂqÄot½¨áÍXò/öÓÝVN/€+וØ i òXÙ_ùm'©1eWðUÕü‹•ø£ˆû=IüÃKøB ';ÈE—NkA+HÎÄò£Q€œQ^MCXÙ\÷~³‡6*~¾âªlžæ‹ÆŸiýîÂt·îÓ˜WgfQguX,Q+¬Ä© Š'æ+}®~ƒÕ›:D+ÔpJ/H2[®#z¹u·¢=‰vl#\QøÐžæåxaŒ¯_Þó]/o:ey:ßM‚–h¥Ôuóªú»2Q¹[©¦6È©žß™Õ_´ìäþÊüÏ õwHR›'G×êW|v™c91Ž=%#5ä̶TªèJ‘ŒóŠü¼åÈ_+ô6Í_|SU?Ϙ#fßö4-cviƒ{$ð<»×e¹<½¤˜¶ý†M#?)@쌃N¦áܲ¾8*ܽ;DÇú$GåTÓ˜.+fþüT=ÓÝø`ì÷¦«VܹâUXyôºŸø‹x¦W/‡¹4•k¤í³ÆÖc?ŸñT¦»r{u²áòD21jìtWg­Ñ=*1`::PiÇü»>u97i~¯õ½ÅêÆýšòÉ1u›X™4F¯ #—`±yü¢’ü^¸ú–rÜ–Ñwžüe¸é„Z'/{ÐáÛÙçÔ»x®¦£×Y¨Ï‰!ŒÜý»tA…mr6¿¶MudòiŽ«NÝð€P§þ´?ŽŒôýõœìIì w¤ãÁËé%>þ)“äÿrÐ&îñ:ü5!æÓ÷v–;_$öÔ¶&¡+Ù´ð~µÕ5꧆[ƒ$ÍãÜTf„Ìà†ã<Ä .›¬¹—k–Ÿck6WÕH"øU+C-òÊçݹk»p!Xb”py+XCGµEw6Ãw’uòq,×Oå¾@½•}ý­| ÒÍĆdQ »íQbèæÕDWÌ Q;1 Ä ‚®6-²†:»ÖwÿùË~$›?ÍMmBä“­|Aàæ¦]ص-Jõª°{ŒÛ¢Ei4 PNJÒ^òwjš2ò^ršì°Èâ´büÁtX9ÚÔM¯r·¼ƒf7”¶…6å$ú¾èãð2’³‰¦L—GSær6\›ÉZ@ !Î‘Ü ð^p)TŇ¡ÕL{‘tÿ š{ŸØÜ;n@¦E£/m4FDY×Cæ¢@v=íÖùzò¨»=çÅö{Eë&…w»•Å–¦¹CåËQSïüjˆ}¤óç)ìâÄ_I øKwŠÍÉR—éfb›ûPæ½m€7³Wß cH“RܤÁòø²1ÊŸ>û&Lñ÷LÀÍCç N»üx3ϲ¾‘£c(úÂE² ŸVöýrOÁ6B¸4Š»·{é'–áî·zYô‹NÑhh<ˆ)‡Ë<‘—6únl]vú‘”¡]  *<=_¾Gh! ò<˳ò´ÍÛEßÔ;’Çøì:hm‹7\ï]z™yÔ©«# é{t>!”-ö“ËM7 ¸Z¬;bw[ÉŽÅ¡wvÇ(<È÷ð®j¥îçBTïrÌ<+²úrj"mºðm®[±ê$Û‰Rs10Ë©FÝ"¶ÓÅè8O""*Ý‹ «_@ÑTèCU˜¢N¦rÐÉ>9ŠN†Ö ²çÔëècsm„fço\°×ýåV·—)^#Á²Ýv˜æ“–ßÐìL³,´}™ï•þ”ŠbäÏöXo”4ÿ¦îÞŒµß»‰?oâ:PËH~S‚¦“1Ä'áÌ={ej%ö!æ•vÔ<ôÅëŠ~ÞMˆÂºE.S±ýœ˜”w÷·k¤˜Ccê'ÀÊ…ÊbÏàÑ6éûÖ"øUô6AÕ~Çs"t0{kÑ\i ð´´:V.²×00‡Ÿ=+‰Ýçíñ¿›X§©Ñ:ûCTƒ‡Î¥à8Cñ³§A³N“d:bëQ¾˜·ÿ«ù{çã·» )•aú qXS6â¬,ùȱá1’L Ã¥K£ý­LmËyÖnôGë“'YÀÇ!`éÙÛ‡ö)ôf.>ªç[AçÕ¶ [TEÐë]­ãÛsùó÷Þáe37DìYñY*PÜOå «Crñ€xgÔœù~²SUïܼ8i¿°‹Û­¯(œ²`©{‚r¼Ùó|Ù@uãY‰[¹tÄV§ÝS÷ßæÃ)z‡±7¹±,Ñpñt=­¤Ë1\ª"ÝH¨þô˜EÒíž×SmX¢hß‹;ƒ,̰5U h²%Æ™k’Ü»ljZsŠ” >žˆ}|}àþÌÁÙ£5ˆº|ÆŽbP“[ ಴3…:UlÔtÔí)_NþÉõO.|BÃunR¥i¨k2ì`k|#ªN«ˆ#ÚÚTq•Ö/_›ü„cºÌ9åˆè2ôË:u˜‹B`óLRàÛZ¡*o÷{ HÔð™;÷—Xíf6YÙ쑽²ð0EÞ£jxa-è~á98Ñöòðë†tÌŠ@m±±5$EªÈ8K’„O9ãõqŒéõ­w,ÇLáüVìÑ!³gW˜ÿÁÆß®v;¤°n‘f.67¹]eÒKâ“PÀ€^ýTŠN1؈öй7_ñŽ›;Ãüpò|²îÃ’I;î …Ž› j ³s«ÐÑ!A?OáÎ>0Z>M1.óZºê‰À5éÝ k<Í‹K}âÁ ˆK<ç §Ùur™¸çw!ÿÕÿPÿž0ûfÎ7͸“ïEÖâ‘ >Úš³]ÓªjASî¾ÜïI×4æÝÁyÖCë¯fü݈ýd´·fãMÅ ðlÎÒ8ö@!{?»ü©<Ú±uè•n$ÈL’t Ühúÿ;Rý¤ÏáÆØrÌOØ‚KZ e’pbo@mL“¸˜‰4w¡…Ñå/2#ÓúFˆlKX#i7CÕN½vØcÊ®=EøÜmcÎ@¦– ÒwpãêÐWÀ ßdÚÖJÏ0±D&|[Ð dI09$ïðc½Æ±†/‘U"Afþ_@kß~0ÏsVö„7´¬»A|ftŽŽ2l1(wÂ,s¨µ4­ö>!—8üºúÔí¶¦K` :µ duÆ“Tì]ÓîïÍà,/„. õWTÛO·[nzõ‘!Q%pzs3‹ª&œ Óå[T ¼p² 3ÌŸ&m¼´´Z<ïÆA™™Èªë¥ü|Œ9ÎŽH/ \o÷Ïo/ÙìŒ ]òÖ K½l iñUåwÝj“Õî”3Þe_1¼%§é=e¾Þ<î{pg6Î5-ó¥Ñ"ä"VA(ÅÃòúŽŸ`"çpUÝ÷npÖÃçÈøWÞxÛ&2¦…´‚°N(»»c»´>é8è"â<ðÓý@“ì¼?ÇÏù®ÆÆç9lˆóÕ\ õ!ÛÈŽ“?jå…šïÉxÕoÛ 9ÖÅýE:ØŸÓ–å1н·þLMßg~VfÃZ½òúûS±–( ´˜˜Øqž*i"5>•ØÄüšEÁZã®ñ~#}ø E‰¿öoÝÄBÄÉ>BT‘Ñi¤Å w2ã±Éƒ>†ôQkR®¼¢òåþ…ØÞ/ }[¸» ÙËÙ„Ïž>ÏRå;Ï&×óYâ5¬¹ ÙٸøÏä4õ½9Í»"}ÝnÝŸ,‡oG*¸Ñ’¥§€V£µSÒ@×IbÇsk†uºüÛŸže8ÁORwÍ™=\–Ynúº¤í”qðtcÙæÀJêGIn§¨{Óqì ‰ é,÷ß|Ùv´†•¥ñ‚‚cÚɾ<||ÉÂíÆ6r’§B?WèÞ¨ê¶Ñðå— Í·W ‰h퉽/x>î¡%f ÂÀ!ú DzÚ:´êB5¾Ðøx§( éEövûËó>ÒéG;_³íjEbe༢XŸN¡H]NØx~ Hn_|-·éë·`ÅCsLy‡Q.€Ý£xGò³Æh(V³txX;´Gyý;ò¦[Npù*ó§Õ¸ûMwäï|ßa~žÓaX3ξ=è'Uo-`6rµû[‰!ßÖ«â?r]æ RgÄ«UÇû‘Ãé²&:ç ™¶h{çP&qü%CﯾÀoWŸÓÞÃjn+“›Ë¶\Ù´h37Zr“{Âg ¹ßoš°hÊcï?2k=)_ÝpööûOnRsôߟÔHö!¬¥ß ô´ÐظÔÊåÃn3:ðEžì퟇ObÉTϨk9KÌœAt’-"ô5«ö4×iÐ\<;Ïݸ(ã9¹²É5 rÈKUHƵWPÀ¯+ƒx8ç¾Kð@9e:#AÌï|ÝÎ.:F9¼Ý~Iד߻Ž=m9bsÄ)Ô¦MsÆpºb‚•?žÐWÌ +£î[Ñ¢Ã[»Çí ñær3)ÔíÚó:ö³"Þn–¥¾P̤ðs㡘íë}ø¢NõçÐ×Ö`6:‰fÝîëpŽë(Róöß˽<÷L*ÒÝ>TîøÅ2¾me÷ïû®ëŒ·Æ†Ïu]ÁSì´ú»Q»ùy:!Ó½GGc(š¯¨*íûsy¯‚ó,Ùò•F(ó““ñdÁÞ/Õa?5ÉÂF9Ƹs׸ÍáÈæ³6*Ï: 4+ÚK„Ý¢sß™ÊÅ‚QÙiˆ¼š¨Ø¸.¯¡Ð¾š|N¾²åc#ßÓ6÷qœ‹‰ý‡œèÒ¬ƒ;Ž&u©NÃí÷QP­AwðÛ™þŽÆþÓAÿQe¼ñ½1:âÜp:j‚ ¦Þ…3êMKfˆ·|%¸öFaÃf{ªÄýö"‡òØ”lÂV+¥ìtòRÀ‡oã…9·œ§Šµæ€hÕæÎfm åõÑëËþ´{=@N;Nìr8õE_εˆ© k¦v.Âí¹Wñ¡j^6 ŒÎl,¢p‚íd­™Áºu¤×ÎÜ•¼’Κ§»ÃЗ¢ûÕûrÞŠjCe^zÿzæ÷içy%³ºˆÀ0}B´´…­ âì+Ðã5 >Ó¼º‰±J–:w¡q.±ÉgØ= ] g¼saåÏC“µkž íï]cøº‘ÂQe”—îÖK…+{ÔáÄÁËŒ¨-âZj§ÑàOÅtÓ¹w‰ä”Ë1Ø Ÿº*éǸoÓYÂNeâ© HH²xϲ±Þ¥óƒ0ÚÉI©ßÕ 4¡½ÎÝDµJÁs˜cÒŽèén@Mè0ŒŠF¬O/ÚDäf¾©_8/ß«ÊuÞAöç´O±®Z‹ÇÑ /çF¯M¥_LýYÆ Òw<÷";èe-` J™P£^ if½ƒ9艵Ÿ^÷øLemböáð·n(|EÌ•hoSòK¶¤ÉAÓÓØ-‰A@c'±Í€’;¦œß RÚNd3a„0©ªNLyÖ}_Bœ€ 0<žöfÈ ê2L…þ³|øUÛ:h—_ì =ŒÏÏÅ À§)šg»Ö8g³WÛ È™^T2&„ÓÅÇ®â¼kÇóx¹X©W9qÅåX£v1Ú„¢TÁ ²åçª÷:Ú/”OÁû˜Ï €ôåtlçXVß&Ï—Ö2+ÙkçƒXT¿SûµÙÂæê^+æt/(Ƚ:ÈÓC¯†qkædðÚÜCS &Ç {¬§óÏî‚ÚSؤ$bçXTŒá3éÓ  ù¡,1.±‡ýáº?/=‹ÑŸ Ú ?â ¾ô#º ©éäj€™Ë;×ÏI#%¼0‡P;Ÿƒ‘?g=KøSknƵzª Ó;SÕƒü;—%a(ˆ~Ð, \‚Œ@„òØ9y j¾~Ær+èä.RÝÕ}’ë5‚­ÉwÕ¸œI¸Îö‚‰'¸ÊYã2M%Q7DÛk§1»§YÐŽž¨Q¿ªUݳ¯³B˜Ê§…ÔÙ¯íÒÇln roïÜŠ±FºŠËÆoælX¨:ÕE³=­c;Á(¾ÀŸ&}ØP 1Vo¼­J¡ç®ˆèòc’_ìÖÉ= ´z$'²I ðüS™Å’/ZÃÇËï÷Å¡P !sz)d¨Ò[«kºlb%¾Á qŽÉÅð®û‘1Ÿ Î~LŒ‚n´ž,” ž³Vµµ1Cïv®ƒÜ‡ò,Ðýç5ôãºÎ%Vþ0ju“–p`öüv7ÀÎ]Éñœ†zÌ;‡t†O'øÜ9 õ)No¥)d:yÛóq¹m¯çÒ©šÜÍnpßÃÌ´¬´bwÀ-LËÅ×¼1~êÐd˜^¥‚es¦òÉúR•–Μ¿iƒ­±T—p‡t# °xúPK‘ŠßñJ>j¦PKW@uWMETA-INF/ECLIPSE_.RSAÅzy<”ý÷¾YŒ}ß÷A¶ˆ{ƾ²ï{cß—1v„D²’ I$’-¡l‘µD²'¤Å^}-êéû{žßëõ}}>þ™yoç>÷}Ÿë:×9ÀòèÃˆŽÆjÄn’ÀyX%Ë#ŒÈ6Vä‚ÁøxÉÏ <,- €ÅO° <Sâ_a1Ͻȉœ–&h,ô?µwüÛ~) ‚AL¡0°©1‚ ÙÓªº:»ª8¢1pM/{À°7MBC(ì€[²Ç- Û{{"8޽% ã&h?Œ£ÜÈÛWØÈ¢€€@ ÜßI2ѽø·áÄ,˜ëð­ƒðñ X0nžŒƒðšç“ý\&êg­µä.ÀUtùQ1p'§ü§ø–¦Šå-ʲŸÞe‰&k8VY ¥è—Ì_öd+« þÔE50k3‚/gDaÄñ8—®èLÓµszKSt…KšÏ£ªþYn~Èô~JUJáרU‚èyŒ¬§ïô1R–øp'œÍ^àXïòi½Ž´-NÔ±%üǧ—­˜–:ûžÞS²© qZ ìиédn~ÍÄâ"©`­~10j¶Òj=SÞ©zNü ¢ûeÚéñ‹I‘/kR2•’ƒ[ƒžÔT¶Ýsc”‚P&¾’,Æ[Ç*P¦ø”™b•‘ÏÇ ~G½R@aœ:C ·Y þÖAN£2ÕlQ¥fÂç'5 Í—ä9¿*äkÈ×—¾GeÁ°yäÔ‰$‡Í׸€ÌyKëãçÎ_v Ñø0Y@Íâ”éšÐfCn{~è}jªL®ü8Þ¬ÏùšlU&Á3Ó«PžK¢£í¯µ¡x=ᬭI›œUUTµõŸ†/ø)Û–VÚ3ªf0ØÙˆ¼óeÁá†hÿy‚©ÆÚy•BÆû7AS餜lU&<ç=æÈ Õ1M¼·j”ý'BnÙ$*v6 *SQ[ÍQ,!Ú»Ðô\D¯Ãtüí—9mÚà†îÞ•e± úFÔl®ÂÿÊgo˜TPy†˜7k}ÖU$“íØúhIÛ Â]?(¸Pb£¾Bñî ß› Ø›€â0 °íÉ¡ôPÚåç3Ø_k×ÂΊodÞf¥Ðÿ `½àªG†—x41´¥°´æà%Î8¸P˜õÞöÙÞÉÖʪë :EJj3;O+`F"¡i­j?Yžs‰Ñ‰…›L>ø­§ûˆÉÖ€\‹ŠÒm6ƒu£¿’eë3³\ÝŸ´ßt)俺Íwˆ©ÛpÖ•QH²”æ2V]ê°†t½3 ·ã$ŽìðsêÏ÷µY(ª.®¸¹é)žv2~¤@*k5(aMwN2]¹pE= Möù°¾=éûÉlÖí²wªç¥D—ì* Úا#uDTÏ +æF˜»þ´®ü¼?Çat‘7?ö¹S•²¯¼¢®w,©ÖxÔ@2=šŒè2«þÃw8˜”£Œá¤.˜"'|5Gù tç›tûýo=ëú¢|_¥¨t°_U_HâÊôçiµûÜÆ0ogÓˆ÷t½øOóÞ´»<À>ýN+¡eG]‹ìµ³Ó™*+åg²³k²kPû·ï™àæÅíì ê^<e¼Û[¡W±ššUswE1ƒ÷Æ€y–%ã*S~]Nå•J<ö÷Ï(ô{t7¬¨|–ñ-êÐå-ß9oÝcdžÈ4y—mÞ2ö™²©6A‹% T×a¼PsÞÓªÁeˆ{!Á°ÀlûÃȼö» Æþ¥‹4³¢8Ë (Õ©ÊÏÉôû7ô­:°°;šù“ Ë•ªlrt®~ZÒ˜v{ô¿ÄÉH †”€ïœ,J!EťťO®¿úÀÐø@þݢОÂe@ñàRR»”º\ÅÛÁnìêìåêå 72V¤%àÆÊ¢Rbp$€DÀU”ÿHÍÃÕ"ÇŸñ—ÕZK[²TÆ_½°$uÙ§½¾-†¸VxÑåÅ©õ%±#SÚúƒA*k ÏÙ_n ;3é“ç›ÿ—Õ’ÒQÐõ9âp7qš0\,\'ÒœÚ]%;ëS»,ǧ÷Ýê'inèÜÁyV)ª¾~ˆŸ¼Jôбøsf¤¦ø9yC¦…dÎ 5áükBSŒ˜{ÚWÒ4}Ž#“¾<^d]utI)ÐÕÁRi¹LP6Òš[/0Ò8¶GTéÇišE‹l ç”âÑõKî2ÃÒ…u,² ç»­_‡cŠ*¤kÊl©gFê6Sã峌y/Z¸ÕÕïæSx]/óÌ„e©us>6ШʜJ•tG–èù“+È“¾ºÙš$h¶¤½›ª>5é½Ä»}a¸j[Šr~±7e½ið‹wJìTCšÿY‰£Nü6wüzxy`Ug‡NmÐ1é¼³›<-úiaa™¸øD0¥J"¸i³œÝÿ†cOýŒ†Áj` óî˜AÁ‰”Eæz˜^î,¹tìòP-™ñ³-õy qH  ½a¥mAé*R§L4[t£)”? ·{ò¸P)ÓXdó ‚ÖÎëZŽõEi)(©ÛtFøÅPrsZÚÆ;˜´ôp2/H1…9±> ’R²ô¿ÚëëÔ—’+‡YÈ«ßý\³|Iîñ#5£: f,ÈÀ‚LêôLÀp¸9ÄÈ.’“K5²[6T±_vQ¡„qŽkzÇ÷ÁÀÆ eè#ÿLÙ¿3üÞØx ¤1ŒPÂÇ'€@€ÀïßA ¨;à ù>@±Œ.ŒŒˆˆ·½ŸÏ/P”ìÇŠÛeÚ[öûe£Èwø|CÏNÕÅ„íÑ@eϨ HåIä‰Å"¿ÛA{ˆþ;#ëž8Ç% ß9Ša°½/PПr– ·ª|"aÀJRƒLÖ Ù$˜¹hKClU¨fã´™Ž®Äëªðøh¨s“U¯iïä^ã–l±ÖðÌVÔ\ã«§R3ØÉi¬‰™ 8#éÛ͵y²4¹o=Ímf Þ?l—ßRÓ˜¯ÁxfüE$3ãSTV”ÙFçLÀ›¶Y•-…ô¯Òò¹CY}Z¯ø—lxó3,4†™wŸó)î$÷ľb½c{j•ìæÊäùüFé))½—^õW¿ÌqŸlízëö±@aLå¾h‡¾mjÖú«^ÏQk0-‡’hd:£ê§¿ŸQ÷‰mb¬EÚ‰O½$…b™{yß26%ÜQ‰Èˆƒc}>ôt½ß?Åq^ÊtS2>(¿›ä-‚ù«0Ó)iß©¦œbbدsm꼞 Nˆhö bRËÇä sb9fZÌX¹¿&Ý[Œ õqŸÏ{°#£¨v£m>Å(Aù¡F´ö%Ý2U¥™Ätü½ï>2š¡l#%tMºÍA®;)Ž„¬Yv­—=ôâû{Kݵiæßð+Þ¢¾]$Â塼=EçÔãAÞÕÛºÁ+JJ 7HvsS4´ÅnÂëËYb§-É<»ð µXs‹vòŠ9`˜7ŸFŒ’w*b48·Íe«s ïbÕÖªQ^Í.Ó¼¶±‹%»éloìYdbÍ‚ô,A®–¨ý–³È6‹;‰`óÀ‡Gº¢Œ¡‡C†—³þƒùb/u!qù#u!Åq$â{ꊪ<ä îå>¾¡„4ú^ÚÕ{¿ˆÂÍÐÀô1T Áp¸Ëªfïáêãç(ìv†Ÿðö÷r@a\½½¾9ÿÍ, XÓäûÈ?œ9pýxRD zº@G;Oî~ÑJŽ?ýc|»¼à£kuô’_žH7ÓòR A. `ût¶"²Ü®1¹PVÙ3ÞtëÑlÍÙû¼§½)λè«*ø ÍIÔ‹á£+¬M7¬F/ º•ZÆH±åÖÎLú‰æJÑiS'¼ˆd<á‰6X׎À¿žV·MárÓôhíÖ2;Cѽuä&*ÆNS´4¦íq§Säï©7P[=£ó´çŠˆð›ªt^ÙG&¯ è×´²mD(n\ÅÜ£®{¤i0k|565UÐJÖúl •ü¥aså[î×”ÔF‹ à]\jÄÕu<ŒµYns+ÝÂ2„ó%Îòl³[¢…œ¶”°®lŽóÛ=a×5IB66#êF%º²Ý„³ß…Æ.€¨;Ô·oôf…ùÝ7G`?»ðé åß$í"·¿\×”æ â?åuÖ¬“üýÇc«|‰L*ïÆbB¯*•Ð{ ‰‹*vÏ4§Ô†œðoR±àÏÈ\.|xï1…êâs›]'þ®%[“IÉBUKe*5ºÌ%¾уüã9Õéù.%²G|\øÎ+šV¨1g'¤ñð¨Ý@SmÖ6Bêt°Y–™ECÔ O?qËå»;ÙóI7ížG:äêÄÇn‰  n&-Ó"!¯¿å@0?."Žü’Ðþ˜ñ~&ÄœÓÏŽ—sɵ5oâ›õ e´3ð½e*(NAFý/ñøKF$ˆüsFŒºw™¢Ê¨RÀ8Ï0O?V÷ßæ&u±=°Ãú7¨ }è8Øî§­¿û?0ªp %q"ú# |ßo ¢gùvÅߥµˆŠ1•~H D¢¢ÿ¥8uH üˆs[€ô‡2x¿ñó~JÏ£ž;“©ºŒÜJF5¼zT•žÜy]x*ü-‡HJ+°lC-Gpß®¯ø}Ý«ÊG9V®O3} W>F{ w{FØ÷ò’¦]yq^¾~·í±|wºlpSÇû®rëÇoÀÎá)~•Í ÅǸE¾h¢/¿”(Œ÷üøîЇïÏ Ñ|õ.]øTU³Ê£ª¢‹ÓÄ'Œ®°A¢ñè´¬C ðÖ3-êd]{½™Tç=nÕpX­¸#BK¥CËÆ‡D_Ë„öÊêžô²˜D§Ä:Ñ©5»?è˜}RËͨÝ`fÁ[xCœï*³¡ÿ‰«gbrÖSƒ?Gßj¼Õ#Ycl2árŠ€îì¸[¨˜Þ9ëÜT2m7þù£psüxî]&ÆjTJÁ^ßnƧoâÅjúß)4nê]Û¾»¤~ö}ha¿-þ¸}#ý_°”*æ\ }ãÖƒ°Â»Ðëª F_8)õã7ólš /„'/eÈ ÆsÒµ8KÞP)2AŒÎ¡IÿºÂBv‡õ¨Zh{ËØ[«Ô.Éæª¥4B=€5U/Y m@‡·^~®pg´ ;Vù9}CÈC3l~¶Cð·öÜ©/·Îûë-ó†öjq~ÓšRÊæð‘O)ˆ¼Î¹Õ‘ÝÖ§oë!3ᓎ·êðHÙ‡¡ÕÃMDú¤ Hq㙉–мwî®måá å_ñòJ•Ã.šzíÆê¦= ˆÕ_’œžðh@;g÷BJU„‰$«úOØNÓ=îÀ“mŸ¯ ¢l­q.{Êì(óÆ›x Â]àK eNd¯]ßKç'2#y Ö¶N©Šbë‘Z×ó±ä:–\Fò];Q‚ÉXrIܤè/½qò#¸)8Aí5ÿ‡W-²: ‚æaA¤P,ˆ·€[ÁHö¶Æn© âpHîÅ üåN„G‚OÕ¤õ]c^ }ù´ѽ´l:.éçÑ«”]0Þ ª»÷_gÕµâŽöφyʘ3RàÂ^@"))&yÀ hv0^“ã @õ¤^TlaÔY *òWü±,ø£5öDyaíqØBûx£÷Å$‚c?§ã¤'ýå}Âõ1Þhw9€)ÿ 8"Å%à&®žŽÆ”§ÏD÷ êˆ†ƒ«‹æa‰p _ ÀBáßT~(~妋¡êfçù¦«Ô¿«ü¨Æÿ4ÌÑ®{¶¿‘ÆOw¿/üæ.®–=Ø€à·À1 ÿÕÎÅÞh8Êãâv Á±¿Ÿ#ÜÛË#!HܪÈã¦^®Žh?”ÇAƒk¥\\í÷Ÿ\ùÀ&xÿ—‰ï¿Ct½¸áÒ!ðÿöð¼Žrü?߉Š2.$ÿ®ÿA{ú„Óÿ ^½åUKSý«ÐÖÌQK¦«w@år¾·Iøî±Ù|xÈËnº´ÚõFê„—íïNõ)’˜%oÙ±œYºA0=qÚSIj(öF9,˜µ»»œ¥ùEFÊꇭòKÒÂ-|÷ƒ¤Û£‹Þ½«8w±7ñ‰çâ@æ=vé«­kÙ7×¢§ÚúÃ|êgÏ’ñ¶†*èn׊j~í’Z¯º¢=—żþð­(íÈë'‘c)+» ©æèÀµ§7{v‰ÖÓ$›2âÜÚÇ×*µ‡zˆRlîE‹ÇÝbB&q· •Y,ÉK*{¶Gß×¾˜fó¤’IÝHëÌ™ÑX©7&’¸Ôž/ù½ˆ{"~¿õk`ì 9ˆ<À°úê:¸Âí§ÒcØÓa~8!æ ììio·¯¿ì}üž›Àó·¡}P€ð!-ÈÀöCJú›ÆóÛ?ã°¯%4³p ÌÈã‹åùeÓaÿïá| ç}ÑúNðyN€£«ß[ÂÊñu ˆI=TTØt]׋AO7(¯ HEDúÛýRQÔ~vÕP¿fL=üh‘@Й€éor“þ‹wŽ ‹1Bªí’O éßjñ~¾øj\5¿#*n³8‰n^I |Þz­`ÔÌ!Ú8úŠÅà7ƒe2%Zû~ÚºÜ@´Ãš¢Þ9½ùÒ“,2Bì¡'ºˆÊ¥¬û7îü¯qËéI"HÑŸýi@‰üÑ/ù¯g¢¤¿ òøÒ­ñf×P_u¢ÆD¹¨- ] srÎ΄8W;`cNBÁqøÜØ~Åvö­"Ÿ–¨ž'}ül¢R"WiS1 ËAÜ=æ#ü[,hCù¢8^B™íÏ*Üþê>¤wm¬’ÙÐ掺`9¥ÍµWH©4Å9¡«–ÜÝ‘4ºÛ”¥ÄŒ¦(óþ`¡¶{eŸ<¸®‘Q0y”ÇØ¹îèÅ´Ä!ʬ^tbŒfÌ=¸šM#¼»`eŠZµ\ŽËËŸ.eDñ íÔg–‚¤+x”®0±8½£¡Ìynn¢z·*TÉØ"ø¢¦›Qk땃,×â}’áj¯öž{'þÊwú{‚{"­¿zÿ)¢S: .iW7ç‰æ!bE¾ÆïŽ „÷ lÿ}ïŸñsAáÞù1ŒnµOaôû¶ç÷¯,ö{³á÷NûÑC”Êþó¢ûõõoWd•؇D¹¢þÉAGô¿¦S‰CtZD*¹ÓÃâEÏn#‹( –À eû…NÿÈ· Ó¹îØdiôÝäÓæ|ZUwíc/2c**}BïÍG˜EBƒy|*á ÊG>‡~‘´kÖJ§›ÇŽÅ›x~åßuîóUœ%-°¤\c×Úuì™rŸ1ðÇÓ,êé¾²P¢»YÍ`™ªÜZ«;¿ñ0BUîÄ)†“3…²Ã®¼ÃœáS‘ÎgìnÕê ÓeÏåpWXQ-ú–(o“K•ä“õUW¾TÈyÂÕŽyúZ(¶í¯ž*–Koc^-bl½l‹ÌBÈ:T-Æç·5hsçš'ð+3iÑ´G^?¡âÀSlÕ¦}ìÌÚûžlsÊ$AaFÔ KÑ^ Öó½öÖIM1Ÿ°`³½ê4*á¿F— òÃUE^T!Àü³¡‹+:~©1ÖŸkø ÕþR ˆü\…"¸ ð»Û”ý8ÕüÅÍô¨ÊÀq¡ ºà#7o§ã©6 y¸þÙ» à€;؆é À Kë‘ÍN„Ñ>ŽÜžÆ‚äv7Œß[×r¼Fmú· ˆ° \ÓÁcKÝòOÍÀï£NðþPK¦hCXòS%PKW@uW META-INF/þÊPKPKê‹MRLICENSE-junit.txtÅZK“Û¸µÞãW ¼±»JÖMr“ܪ™•FM»y#KQm—µ0æC!¨–õïó€)µ3É&®šš–œçwÀÿ?U¦"É s´Z>ž¶…ÉåÂäºÂÇ÷òEþqú!6‰œÍç«O³å×tùQ>®W׳O2ÍèÏÏé}r/Ÿ–÷ÉZÒÒM²þ”ÉÕ|À‚d¾H³D>>ý²Hçÿ%K||÷föq$Ÿ’åæÍÝT‚°|Ê’‰\' xÿ4ߤ«¥\­å}šmÖé/Oîó>À/æ«e¶I7O›$þyú˜‚ÚÛŒxM7³å<é¸è› ñÇ©¼O>¤Ë”hfB¼™×UÛ˜í©5uõF–ZUö'!$ÿSwÒT²=h™+è¤Þóßz3ªÝκ™ ~Èë–ªÚy*ø·«óS©«VÑ)rg¬Û¨wòTítƒÝÆÊÙs£5­šD›·W,h•¤=m­þÇ ‹c6:ÆÍ̪zÖV¶5ï~lêçF•ŽtX…ej·3ÄÔxáÏaÑù óph ÿS7¯n•ucžM¥Z-÷M]Òr©-b±·ìP­<ª¦5ù©PM,\BÆv‘o;’ö­'*¢õÒì¥iåYYb äG á4`°¥µºØK’£ºÔ•*oMõ,qÚxí[+·ú ŠýtÀ•…YeU·0P^œÈä‘BD|þù`òÃOòé›”©!6©§¬w§ …Um½oÏôc¬%S‰¼®~;U9kálÚÃ@®à<Ú4²>W²ðÁ«ž„sÝÁ‚˜Åó?|Ñò\7ßlðjOs*㘨¤$yÔPH›Ö›°gØŽ“|„´Uk¥£«ÓG™Ê”Ös­¶…&C©•XsŽwkkUcŠ ô²o`«àGZž(4iUÁ!ÛýG°°dzštZnM…Ýc…ÏþÏ 7ý:2úÀ@RåyÝìT•ë@.e¢¸Ö¹9|ˆtI융l Laošu€ Ây¹¨*àcqÈŸ¦¨¸Üæ­Ó›,°ì´ýMçmˆŠV7¥7ûuYbíSèCÃ` ưQUWïõw0dÁý„<©ØÍ6õEíåýd„Ç "÷Ðv®‰Èhô±ãçX|l(ô-§Äœ‘`nhüX¨Kô 5¹îp]ÖNŸü™ø˜Š­ÿ{ÊöQÀ^$®B|•êö"f&€¢¢˜€½=9\í?šòX7­“24gcµhÁ—Ý;¸ù7{­=q¥=¹!݌طrsu<ÂÜ^—.nU8_‰a”ƒá8Ž œÅf0å —0!_8 X¦é%ÛsZŸ#ÞÀîVe^`ѢƆ ©¯læ„&˜î‡[!>Âz` ™gÌÚT.kyPÍŽS ¢–…´¢L³±ƒÞ;ßÍïdïtü›m¡QëPnv¨Oχk¿uËúóäÙÉÆ =é–ì Œ¤ÓM5 RY{j=-§F Ëq”r⃘ؾ»»\vù€õ*ÅVp³…WÃãN(Í@Ú@êbTâÀ¤cœ‚]V›Êd,"PÆå*æ©0jk Îu¤2ˆ2Ú¶!UµœÎFÔåV‘þëJ¦KæIë‡|6}(¢:‚²à•÷M`ªþ®›ÜXʤ¿‹¢³ Û)6½Ç ^‡@‚LR’_×Ȧ¶GÏô[Ÿ ö#Æ‘¶5Ìð`*?Põð]•ÇB»/ ›‚—q8 >T¹¦á’N 6êsÄ/˜‰ðPå¢Äæné[{- >&íü*¹Õ°cT…ö‚¯èï®Ý„›¶eÙW]|«ês¡wpOpuPû½É‰/Ñ'Ho2àå8rz0A¶¢GÃQn}€qË0¨Cæÿ;E£ô÷§tͽ „Ù€ûR]Pá×5'éWK„Çðí qýJ Ú5ieÐ\¸‚·uµ˜Ë˜äº‡ßH ?Ç 5I­½>:î‡4r\NyÝ>R=®´g$ÕUü”Tn\ß#zž>ßÉÞŽWÃb£weZ´“ a(Œi ´ØHÉ=†‚ILî‡4J„<:²Ö£SÛ›¶"–ŒTÜ]OͦýYÆÍ_¬.0vú÷¨¤@#vªTè cÉw«¼¥oÂ_öˆPT/‚+€é"˜Ø÷±øµ'år/,ZÛ–ÜbÙ˜uðŽää:JNÔœ“Ù(7î W5Ü-}‡û ®y¢N4×.8ëŒPœqjà|æeÈL\îìëf>Pà‹27;ÌI:¬;ØüEVçÑ }ò!,ëm«"¸õâ(tdL­TUþXøLÎ@XQê9•2?Ù¶.]÷t¢Dœu='lÏ­=¡ÄtHcžKE¥[Çø¨¦#VGQ]â8xÑxã­Æ†u)£HVŒl×ßõEoß8‡õ;´ˆÙ羑9]¢2ãÆ¿Ö°m{,Å CÅ“4íOq#Ñ'+ìgæØ³Íþ† ÊõuaxAIüº9%x¡VVÁŽìJy/’sŸç>]rsåV8šøxU ñ穜¯>}JÖót¶ŒÙHi%! ²º$@ú‹‡¤K4¾úG¶'—ä×肾õ݆™áz Â{‹N†aŠ¢ ÒÚ®t/Ì7xá—ƒ)´3_ p!WùéÎ^åtŽòé)ïy>õƒº®h€§µo§G7[ "æÕÖ5H„lEp±£Á­c{ 9¡"Ía:ðv¬[mCÌôX2èá©h¸øp1Vý'ÌN®ÀE¾{Y7žòÜ…ö“s'{ÔNïÉdŽvº¬à]B£§¹\³©_CYkHY=Ã?¬Ciº%€÷H/\°ðáwyÍE¤ËFo¼v7®¬e´tY{" u¶'ã+\ÇM¡Ÿ‘ATîÒc\*ÌÀ )ò–}»‰šÚM©¦oãp€«ÆKcmÈľý½¥Y?ët4Â#Æû³o.ÿ…aE0¬këmaž}7ê=ëñƒÉ¸‰ ½ XrºElÊÕ·nr<#´Éã­[•}\­L¡Dì TþuðÊa¯*—€ò'J WÛ‚AÙW¤ÃáxŠkŒÏzm³4.YRÎàÎ`H!>•˜#Doêbâë†B´«;_µŸÃë&¤-ÖdCÑRŽT¥Ÿ!Š3‰³Ñ«JPáŠ3C-[¼ºD’ÑÜ"TÔ(3édÀö y"DÉÙ+žü^ošÐJŽ_‰éQ)ds*>í–~à{NVâýñnš8Ù0µãYiˆdNQ{J}©+‚naµŽ7²õ&×DØ q™îï+^áèºäro*ŸúêÄÇÑÄO…n væLpP/:BËÀQ„2n 1(E"ù~§P¾,ܳ)OM+|_l£ÒtaGåêVµTŒPÁhOE;ùQ°q%C›k~;¼ï/S¹\É/³5 š¿¢ú•nÚä,“ɯë$Ë_e–lä‡Õzó Óåèòm_ß nWK9[Š7 ”foä/³,Í&òKºyX=mÂyi’Ñà|µ¼wWw4馋ÿ¥Ëû‰L°:YF°R¤Ÿ)ˆ§Ëùâé>]~ìI.ÒOéfFT&LâGGlÒÍ"™ˆåjù>]~XƒŽ†Š§ìšý’.ÒÍWÚù!Ý,ét(@Îäãl½IçO‹ÙZ>>­WYâ&KÑh׸!Kqé=²pMÃNSlª0~’~Có*œƒTC=s}mXánÞü4‡7¤Òoä¶Î ;`—ŽüüˆÚ¢0‰¸}3Ù7y8“LaJÓöwnþ n•­›°=;ºij*ÿ\Ïß_™Pš29w”ØCuÀýNÃ%¨ 9lÕ$ÐâYÏB¤ûáäáFÏj¨6{AU´#u1¾çö&\¡ÆX†ÜÑÓ“ÃÄy}/Ѐòáæª–{¦7U? ¤Ú!@zÆÓh|XBù_ëæ[j¿ò!ÞKOqA5s×Hør†Î"ó;7¸d?E²Lãʆ"î¦peíîº+Æ¡‹Vpë—ú¹¹§ P5iµîü³bë“Ûy=sÄÿv¢âŽrºðC,7b ®ú*ƒ.cþ PKOÌ,ZVp,PKW@uWjunit/PKPKW@uWjunit/extensions/PKPKë‹MR(junit/extensions/ActiveTestSuite$1.classSMoÓ@}»qš8$-QÓ@¡ip!uÚš€8*¡ŠJHÊÙM–ÆÅµ%þçJ pçG!ÞZªPD$lyfvæÍÇÎŒþúö@ûË0°©H[‘­2JèTpVw°mྥ©ë[‰ŒµÁyx‰ó.r/ä‡0zï ©*PV˜HÆ©OÔÆ\Ô›ÌJl1™x±õP “ãäÇD±±ó|”xS©àÇ©—H…~æs ð¶»>¿¼•³s" †c)Px|^œÊhèžúÔ¬‘럸‘§Î¹RWå @À|2:ôÝ8–ÔX ë³ú¼¥iWe.‡i4’Gž Üø ½îN]–õ"ùaìg¯d2 Ǻ&v`›¨â†‰e”MT`š¨¡e gb»&öÐbƒ$PWiß Îœá$’îX ½ÈOÀà-†ÙN<éþ_×óì›óÃ]s¬0õ—"žÈ1Ú\Ü·Y«×U+rv#ãì-~5Ô9¯J<ëä »7ƒ°wg(Ø{3höè—z•´H4Øä›¤f&7ø6¡¦¾ŽVË'ZEïØWŒrí+–   >£ø ÕA.ö~\f¸j¡ÉÍ?™Ö°DêÐÖg†G´ô±…Ç×2wòÌne^·±A®ó½KoðΜ²ç7PKf~P¬÷ÚPKë‹MR&junit/extensions/ActiveTestSuite.classU]S[U]' \W(‰R[ m­!´DZ«ÖP,MAѵ`Ž/½„¹˜Þ07'ýø;¾øÌŒ…ñøoüêÚ‡KBF_öÙ9gïµ×ÚgçÜ?ÿþísx’DŸ‰¹'æs1ÅA¤0/Þý$½_$1€I,â¡ì”’x„%˲~éà++ PpW‚@‡¥š×hè†Bf{±bü—zC7Ì#í™j©Þ Œ‚btÿ¼øfA!ž›~ª(Õ·´BªìzµùbS‡Þf;£åzÅ«=õB_~G› Sõ‰µ¼Û$HA¿6:høõ Qh\oúFÆrå]ï¥W¨yÁNÁR+JÁSÕö—ÂÈ©…ìɲoöŽKÏvÏÏD,¶Cï…~U*Hù’×ÐÅ" ®û;gš!“çNq9;[ˆf:sÖMè;v?0AúsêTáÆiͽAJÿ‘Po”xØ ®äzf>ÑfÍØ¸þÐú —ΊTpˆ' w{cÏ«”06=Û;›hNvn£jo‹#¯<ß|¿¶ÌùlTõƒÙæÉŽà•Àè0lî½µôº¢÷ '©CdÝNJ®×›aE/û24c]c9+`.2ÈŠ¹$暘..`ÌEÓ.n#Ë?o¯ÏIâ×¾qQ¼o±ê`ÍÅcIŸ8›µ‹ï$jò¼" ã½ý;ÿøÿ®1Ý}C } ã…¼½A¹áè=á²r"xmsWWxÛdlP7þö›ÅZ S|¾Ò·ê¡´šÞ}^í»üu‡+Ÿ2ôå¡öéÄðm’+0‚F1NÏ= ÂE¼oÁx‰Œ€Ç\%¶??sˆ˜ Ä;2ÌÉZ„ìQT„ ÞeLéJ ]v&éMYWm•kÍ…Î*ñnžã–Yï*×ñ•Èa‹ÿH†q®N~ææ!Ý”/3i‚M…µÀœˆ²xë ïœ ÿ!=ÎtD~-"ŸÊÇß²ÑTП?€ÓV1Ê>ƒŠû¨7Ièa‚·Õ¤ZRÈcƪ¹‰[øsfIvúw <³ŠWo ÙF¶2¦1„»DøÄ"çrZÈiÌ¢`…¤m£ûð?˜qʺÝIÉ䥒 ý —‹ûË?•÷÷4Ä£x'*}‘½îq·(VžÌs ïs´^`Ö|l‹g"BS¤z\r‘”íÞ3ÖL<k wë+A>ÎÃXê˜×ãÎŨZì§$ ×̯¡UPKU{8u—PKë‹MR#junit/extensions/RepeatedTest.class}S]OA=Ó–¶¬K-­m‹Pü, ˆš4>!Á·¥Êâv·ÙU~€ÂÄ'_xñA¥‰$úîñg¨w¶ËGøÊ&wï½sçÜsîÌüþûã'€²,¤?CêâÎDÎ ˜&ª¶g ™]Ö]NØá|ȇÏ¢>3_å®gв¤Ï KÆ ¹«ªâÂ^ŽaÕúó…Ê®þV/™ºU/µ³T¡¬ÙžSå/ ©µ÷´¤)Y­¢ÆNv®˜&¯ëæ’S÷Ü/öª¼)h Cr·0d ùµ†ç m‹k‹ Ú´Dz¤¢ICŽá±Š2æUŒ@cHŸ¥öÌ3Ìwä®71®bOˆoÞ 8¨ã•gÂ0|n]æŸóªíèÂv2—Ü9çüùyÉ|öò‰=wÇöÌÚš°›þ¹¾ö-íŠêÍ&·j “ÁžKòË¥·ÑCφÑC¡Ù‘!¿ýd(ª#L)N´ÀrÑuˆÐf2ÜBäW1÷_i1„Ù:Èv‘M@>¹>$È4eµ6ÅÀ÷²¸N-¤—£šùtjAÓ9?”b Ñâ7tì|>îõWR>ªÚ® P™<êÁ¡jÙQ /ä$À' N öÑ}$¤”øûÛÿ÷ç„}–AœâÓK\ú -CñèHAˆò£>[iÑ0†Ô—Ékô_ ¤ѹÙò…\;€šì"s€Ä—3rÆOÉI˹åWÝþPKÛŽÚ²ÙPKë‹MR$junit/extensions/TestDecorator.class}’ÝnÓ@…ÏæÇv“––B›…Ä,wE•PP%¤¤¶ê½c¶Á!µ¥µ < AQ¹àx(Äìzå„(ª,wÆ3ßž=Þ?ýðmXØ]ƒ‰»5¬áž ÷mJ÷l<ÀC=}.Cõì„')ÃÖhšEaê ÿœŠÅOÖ÷Œ!ÕÚ½Õ-ýS†Ê0~ÇÖGaÄßdçc.NüñŒ*Qø³S_„2×ÅJú>LºšÇ?§NEMš½þhêô½™M¼¼Jãæ„§¹u-Ù°Ú<û8ÎDÀCåŧ{"™ ب9¸…M-´4±i⑃Ûè0l_mý¹å½_& ¤«¹J”:&¹´1?ÒÛñ”)vézX`tSÈw)‰n’Ak×(Ö);D‰Àv‚¹ƒ(}£¬„uŠu”)nÐäu"4hlåÝTijuƒ¨Œ:¡f5³æ~Gip‰r s¨­>µèÝ^Ö `*7|ÓÀç*—" x‰ ׂg¨/Årò.ÍbÒ~M8Ð’ wp겚.ªdÕ\Q¨1 5ôã4ë™VcI50¾.iÙ[ÐbZî`[Ï{z¾*ç—‡û ÃÕbxGuuÿPKØü±n PKë‹MR"junit/extensions/TestSetup$1.class…RQOAþ¶=zå<ÛRJÁ‚P°ÈÁ£Áø‚˜˜T%€¼o®{Íîð·Lüþ(ãì•ÐÄÄz—™ùfæ›ÝýõûÇO;Øž„‹%+ž{(cÙC +V´­Xu±æâ…‹ƒwÅ“¶:K ÃB·ŸÉØ„gŠ_ŠëT} …6‡yt—¡d.bÝÞáÄRÇ©Ô9ðH˜l`q¯cоaØíŒŽk¶~Âà쥧‚¡Ú¥ø˜]ö„:潄<õnñä„«ØîïŽ%Çÿ½”Bí%\kAžÖí¢ëTjDDó;¶¯·‰±Hë´?J3‰w±mSyÈÝêó+Nôöe”¤:–焹HO]>6°éÃÇcù¨ áã¥[6¢Ag8ŽCÍV.ÏÃO½~Înþïó:òÎ?=JxàÏÐüwWeYìüï"&´0Ÿ _îqG‡6©lWoÓk‰%zde:õIj5;.@šf§‡X UA•¢5²^ѾHºlÜ‚›·(ßQüš§H–Xk5fp[b©d½cv…×ÚO8ï ¯ò²Ó~ô î%¶j·¿Ê€†EoŽ.Ñ5>¿ÍÈ>‡½Ã7]ÜÅ ¯&HæÇ¿¹zÖ±maáè°„ÕË÷®òܸÑš‰p°fõ똷"[PK_S¯xê PKW@uWjunit/framework/PKPKë‹MRjunit/framework/Assert.class—it×Çÿƒe<›`°1‹d –e‡@“‚]/Ší"jŠ)”±<¶²d´°¤K–¶iš4ÝKMIºA×´QC]hÓ¤[Ò5]“oí§öSû¥§÷¾yÆ£SŸã™·Üù¿ß½ï¾E/ü÷™KÖãu ¸[ÃfÜÃ{ùñ~ÐPÎÍåø ÜÇÍâÇý>Œûüx@Ńªñn|HÃGñ1 Ç'¸ôInû”†Oã3Üv’KsÛ) à4—>«áQ|ŽKg4<†Ç¹ôy _À¹ô% _ÆY.Óð|•K_ãÇ×U|CÃZÜíÇ7ùýÃçÒyî~’Oñã[üø6?¾ãÇÓ~ÌúqÍò~|×g¸ã"{ò=?žõã’ŠË*¾¯ ¢+žŒg·(( µŽ(ðõ¤ÆM ‡âIs87=f¦wc j©JŌĈ‘Žs]6ú²SñŒ‚†¡C9é˜HÓæ±TúpÇöLÆLg;h†(íNçȼ>4tÈ8jt$ŒädG4›Ž'';GyTuÚÌdŒI1Ì< •±Tr<ž§’ ”Q6$¾ª²´#F"Ã,F<¡ Îc 6Ö-ã¾#92W°ÉÃÌѲsìËz´°”ß<>Ces¼WZPHX–FQÐz³’×À)Ù"<‹%L#¹c.‚-oJŠ?lð°ìííå.¥WAù¸™ÈäNH6zÙG"aa;YYêa78(ÌI6d•½¬Fż–‡¬·—Ew·Ðéf+«ìeÕÓ#¬zØÊ*{YE£Â*ÊVVÙËj`@X °•U®¶Ri8•Î%Ü)ç˜ÔŠ”(_sJŸÈåbéÊJ”•sP«îçt·Š•©ô´‘ YÅͶQµ¬Íe}…e©`ðÿM¯å©ES¹tÌŒÄyK¨²–þ lG]½æLÚŒ‚mÙ¹d6>mŽÄ3qÚ>¶'“©¬Á«šÈêÂ…o:utám:nÃŽôêeæï톔"ä¯9Þ—N§Òü)}õüPÇq ëØa?RA·@Ojz†¶¶Œ¥K›üu”¿‰ªxNÇó¸¢âªŽã':^ÀO¹gDÅ‹Üó7ÿŒ›ÎÍ£*~Á•_re¿Š_qåe®Tñ W~Í•1¿áÊo¹bªøW~Ï•)àÊ«\9¬#‰#”™î¸wçâ‰q3­`yŸÜ6º’”7[c¹là˜‘ÙÐñGüIÇŸñiÑqŒãáGŽc“Å0ev@Á¢¹-@SȈÜYh·q}s‹ý•æw k³Ýæ.úx‹Ž¸SÇßðÍöÜ'ÜUU¡Z½÷”)¸Îc”¥¦LWÏ…5ZôŒ¢¦ÞTNNjLLªÉ —60ZÀ5£FvŠÎÔ`•tËÛÑMïJÞ£¤@½Ù¶rÅi¨á<DjPFÏ:©‡ B¨Þ2¦Ï"‚¦·¢Ÿ$Xr@Jn$®BYžG™jaPB•m¨Y²mM˜©|çà+óPj!Cª›ªÆ¦ô¦ò¹µ:ˆêFO*Úӥ­î« _EÕE”ï½€ŠËü¦Ø«—]a»™Âv ‰mrˆÖI@›À è¡¹QdìÕ6ÙNæt$Hó‰³|cÛUøÛ¯’#mW ·µÏÂÿUÂmíyTœ[NŽ€ñSxÔ:r¦žÄVb§à Xbvà©ývAÔˆ]TZ ¿C¾•¬KUÂmyhîŽÐ`{ó¡ 1ˆÒ.!ËbQ)v?EÜGïöyžT O¨µV§™_DõÞumíPsÙåØ~rì©$Ç 5FáaKÛv¬X"±vbáü ¢ »©T&¨ÞîéâB·‹‡iØ„ËňíbDº8"Åî$•ÞÍ-­y\wš¼jiÌcQCù©3XnÉ£–:j‹f¬žÂ:ñütôUÒAXG—‚ )œj¶j¦Ñ÷§šiô=b.›ñ*• ޽’ã6¢àpU*ׇ|y,v»u w¯#!*…°µ¾YØZó,ì£RøY3Rpõš<–°ƒ«×LäQ·ö$û·:zj¯÷ðïðA’zKèWi€~Šü Úþ cŸð/HûF0öÉI{§Ä¤ïÛ¯43ÈR·{“ÿ§îù….Di—Á/t­|ß/uw’.ÓV‡WåѤ¬Œ÷ãñj¿šñj怄~—iVþ«JS enÙ³4cç\™vÀδ’ô Mjm Õáy,_Iÿ¤Oéù’¤ý6i¿7歉夾Â-û4‘κHûmÒ~¹&ƼHWéJÒg‰ôRIÒ˜M“¤ãž¤nÙçˆôyiÌ&IRÓ‹´‰0›5‹úk ={Ì"‰íi:ÀDŒb2Bë8e¶i''ˆ—{`O¡$C«I;Hd(K‘Õa¹ja2TI©µéòÆ3Fzˆý†¨z1„äû¢£)LÆÔ3‰p;‘ŸÑòR9ãFùqL„Wsß†í¨ªf>PKƒo@‘½PKë‹MR)junit/framework/ComparisonCompactor.classV[WWþ& IÇ"‚Då¢!ܼU[Á F”Ø€h(­Z+C2 ƒ¹àÌDùþ…>ô¥]j×â¡}¨k Úv­>úÐÇ®þžÒ½Ïœ! æÁÅbŸ};{ûrþþᅵÁ†Š£¸ÙŽ^Üb2Ë$­¹­âKd˜›c2ÏäN *TÜ ã.Ÿ÷Ø;«b_1·ÄÜ×a|öû|ᓇ*¾Å#¶}Æã0–YÖY^ !B^Ax&“I/dÓY±ÌšþLŸ(é•âDÖ±ÌJqRÁþTµb;zÅYÒK5CAû™Ìâôã™ù ö¹|vqúÞ¢‚H\cÃÉ•¢³ª@I“{afcÝÈ9¥ ¦sNM/1·`sƒ¹l­ ¸à”Y1+ ‰ôÇ@>Ö /)¤ªyÂÔ‘1+Æ|­¼bX‹úJÉàRª9½´¤[&ËRpVM[ÁPf­F™& –^6žW­'©jy\íjEp9§jq广rÂÆn%AÝ+$ç^Pp2Ñb«††Ê†mëEC$—]Eµ«5+G† eصÌJž0•«¯aþî7*ù&³×ňÒSh.TO<À9kŽÑ´+Ñj³³¢C· ×Åžy*º@˜(P³þM“{}¨EOÇ9…†a\Ò0€A C8¦á$“ëH…`h( ¨á v˜brçôìEv½f–ò†E öPÃ*L §0š†'(iHpè2*d¤¡Šk®2™ÆµÖ5<…¥Áµ×?>>®j¬z†ç >a7¨ñuHwVÖ ž÷Þ‹Ó¶mXdªVY'æv‹ Éì ÔBÓr4A}}]ìÀØ'ílÙdôݽ+É §9ò“µk+¶4u'Òé–ùÃNÕ»©›çt¦lRóÛø*… æVukšê$ÒÃ)¶êüÚ ^z-*~€ôõ:JŸÉ0Ž Ç à8I>"ùDƒ#¹¿AÖè—vKð´^â<)ÏSRŸg˜î #It„¤étv%ßAIÆ·àKŽnÁŸÛBà¸5J´mD;È3Švt"BùÐÏi“î}ŒcÜiÊ£î !ð î,q~ÒžÃy™ù5É|3•| ÿtÒø•p´ý€èkYõÁßH¢ßp’•ïÐ>ÇL€˜ù‘Ñ1vØÚ‡Ñ¤†õ#N-è%€G)m½¬c €S»€SøL4ò瞢(.`?E øwj‚ŸÎâŸPï¿Ã¾˜¶ýŒ32²:£ùÀò6:I‹ÙÆ9¶þˆÃòÕÐE†Ñº1Z7²–Jãh½¨# ƒk³4Ñ;4MƒJႎ»°v *â¢(h„ ù\äão‹,ã{QNú·Ꮊèt¼G÷CŽ¿Â¨@d=l•ìOn"š¼OR`™îoîüófO÷Ç©O4ƒÓ”ú 8‹Iâg©Ëcb•Dr ¶GXy]¸ëÄ_"—tW¢ ä§$À@þr/#y‰dÜ=ûÙ'.Aözµ¾ÊÎæÎ¿I#žßB´µŸÞœJé¢Äƒ㢀p‰â*p­¡·w%\·pYÀí¢ó qÜ[úÊJà•Λ?é ü­è°ïg„c‡6Ñ;ÌC&@~Ï’#nk;ÝÁ×Ç¡R†æ†•0|üM—)_Ò6sGÍú$y9ö²TñTë€üÍŽq7óG·¥äË¿jÄÞP‰oÑØgFkJ}ôÏœ7Zú3'á^ ‰KѼ÷½ø¯{JÎ4”¬Éh n¯™ÿPK'™‡)G PKë‹MR'junit/framework/ComparisonFailure.classRmoA~®\¯–Phm}­Å ×Ò³~01‚Ti(~(’ú©Ù ^…»æ^ÔŸ¥I+‰&þ”qö hc/¹Ý™ÙçyffgþúöÀ.iHá~ sØ”Ë Š2lHkKŶŠCæ |t\yÝhVšÇõjãeó«1,T\Ǹ´x/q’Í2¤}áټמo»Î›Ú Âî'0üCªSýt&¬@´I¹~Ê?p³Ç®yx¶Ó}Ê vÊVòCò™íØÁs†'…iàU"ŃRqÛ‚a±n;¢öO„×ä'=!“»ÕÉ©ZòGA%xgû õÓR›÷ÅG×{oVÜþA}×Ùãv/ô„¬´/|Ÿw‰6'Æ=%ù¨z­+‚ƒK@¶PœÕkŠ0—ÝΓýçj´C7ô,±g˪–§²ïH19ìèÈ`IGKTö¿«Ž,+p=I2uÜÁ]±Ë°þßVò“˜²Ocì!D´«žçz ¹s’3(jW—j eØœ%6Â:½Þ½-kÐ0¼È¿†Å±Ÿ¦Ÿ®*²³Ñ®ÐYË´®×¦¸B{ÚØ€Ûˆ¥ Ä¿DŒë´f¢ó$ÈÓ°JÚk´ÆGÞè•§q“ôYdÝ"+Y·ÉŠS”n~”±BJµúÊÛtÖ8§Œçˆ0H~…úyœ:óQ:}H¥£ŽMÚåYBÊL’K‘cò½™äØ$ùñLòF„ÊÿPK¼±ÄÁ/TPKë‹MR'junit/framework/JUnit4TestAdapter.class•Wëe~¦M:i˜–¶`kñ®HÛE@…Zìb).-ˆw§É´šÎÄ™ ï{Q×ËîºÝU÷ª»Ë^ÔøÁŸüùÁ?À?G}Î;Cš&i?作÷œç\Þóž3ùê›O?p>MÂÂl›0—ÄM˜oåÊ–a!‰'‘“aQ¶N.òÂü”¬<‘ðeÈÖ—mA†“­èÁ©$‡Ó2œIâi<³Ïâ9ž×ñ‚_”áÇ:~"óO“ø^Jâe¼’ÄÏex¯èxMÇë:ÞÐñ ¿Ôñ+ m³“Ö©iËÆr¦ïkèœX0OšéœéÌ¥i†Ö){Î1ƒ‚giX_y>œ!‹>{´à8–§¡wÂõæÒ ÇÒž¢¥Ã#rµÌŽ™™y¢ôO„ ³ž¹hr½'Ó‡Žq¿C ÍšùÀò§È Û<¡æþ*ÓŽkˆ¹Y"®°k²°8cyÓæLŽ”® 7c掛ž-ûˆ æmzys}ýTm8ËBÓ½ðLþ*hO•e1n¸ÚæF=ñx& ×Þš ¾R{Æ-8rÆô-:ÓÜ?0Α7¤acõuçQË/ä%Þ⩵†ëWãÔ˜³”*èê.v.=aûržª"×Ü#9eD`Qø×]•]–›ÝÕÔ0#Û)½Ïò3žl—^n"gUj–qPfM¶\àÆzìmžµèž´Æç׳²FúW—¨«?ž™·sŠY¼8 MöæÒƒSçš+¹Ùjû%½7ÕÓûo&p§Ïvæä!•‡,¤ªÇiçyÁ5àMÇÎr¦à¥(F•[cÕÜ:c)s|oÒEßõ‚tM‘-ÒÕâ«u}¥‘ ãézYHÕÓrDø"5ºn4ô5(¥ã×tpÊ-x‹óÁvW=Å!‰¸Žßø-~g`wÊð–­Øf` út¼mà÷øƒwð®u¼gà6ð'üÙÀÝø‹{qÐÀ_ñ7÷aÂÀpÔÀû8dà9ø;þ¡ãŸÎâ_:þmà?ø¯ñßíj bàcaüÎièXb óËÀy|¢ãÿ.`ZÇEE\ÒqYÇf^ÝDÄ¥\;2³`exëëk½yv…Fr),¹} ÜLȹ’ç3áñŽÕ&]UÎŽZ‹¦í”RXîÕÅÆ“fÎÎ*3øºÊ·4V´™Oª~ÍšªìªºÙhÇdig_[݆­§ *Î=)“ØÁ¼[¦ v`¶¸f%ÙV£ÇÖèç!T!yµñ_W«¾–ZÏ GĤÆK{b&Þ¤س¶œäVíK ´ð9 =^M¸ª&Õ¨+²Kˆ“¦/Ú¤i¸µnñ¯ê†ñý‡ïŸ~}D•ýœåûcnþL…1!y–#_墣žgž‰ä×Õ ³ÒÛQ—(kŽ•Ý£«šÊÂ7oú“Öé@e[FÌQ›åí"|ÂòÅgûûóÍM˜ÙìXظêv"F­Þ: ¬¾ˆµrn‰b–XÓKRÔ¿¶BˆIò04ln¤0þf>Ÿ£×ôW;(–Ö™ŠÚÑ- u þØÄ_ ?ÀÍØŒ[ÐŒ.©û`Ý㿆& pϪÏu—4Îm<Bšg·r7E‰&έ©ÁËÐ.¡é<7Íü»$ÕÁf$»«î·c V;•¢]\œCÊ@IõJÑ‘¢§97sÞº„æÔÖ‹ˆ¥/".j[ŠÐ/"±¤¹qŽ}t«Ÿ˜h§ ½tB¬Ø¢”¬ØY!«»è`S™=–Ù³›«=æ(ölç,<‰Ô$ŠhýPñˆöERÚBœD¤Mc»‰äÇiÄ£Säù‹ ¦ŠH±æ| ( àvtP|)€%Ó;±÷(3FñÃ(L»8‹JC ‰hÑv®Â´;ÊL3"´ÐÅ1Òöa„•Ž\Œ+^ 2\_r€4~D~ EÌnãÔ>‘¼„µç*œ¼‡1-s²=BLPÛ8«I¾-"Ì/¸ká|P°:Þþ :Ï Ñu˜Ãº"ÖOn»‚k4~³ôqÑ­ásô쎥zcÔ¼;Þ/âÚwѺU½g¿ýzë’5[˜/`´Û Ô¾úwRûÝÔ?†IžQ–ŽÐ†´ô0ÏãäêæÙ!Þj/×Gp¿Ê³ƒ¥Ë:ùÑÉðïåJ¢Â¥È£}Q”:×aC×} =v±æÊ¬š*‹QG »#ÂÖx>]#?éçõ•÷w¢f~ÃñèòG#‹ZË»¡2/¡Ø£+<ìcx€`'¸Žq~¿‡ðpdX%ð•ÀOØ\øª¿Ãã+ع±Î&Ü pOPÑ’3üe”tö;PK»<Ï6PKë‹MR.junit/framework/JUnit4TestAdapterCache$1.classT]SÓ@=KK!Ò ò¡‚h 6Ä"ŠÐ‚NÅ@Þ—fiƒ!a’ü[Î@ñÁàr¼›¨Ph²7÷œs÷Þ»ûçï¯ß2Øì†Š¤R*z0­b/TL!-WºŠYdä0'‡— æ¼bPO¸w…W±|†ÑÂaÅ6}ýÀåGâÔq¿é»Â󷃿Y†ˆ_6½ø,Câ†ß§¯´Ÿ—Þ«?ö…»Æ‹e!1Ë&ýYaØhtWÉ=†ðšc†hÁ´ÅVåh_¸»|ß"K_Á)rk»¦Ü×a4´¶M÷ ¿ì 5¼Æ’†^D5h¸§!†7 ²–ñVà ÞixU4¬a]Cy ÈScµ[†äݹܮØÓóý`è—¡ê·Kúeb&ۣܔ„¿K2ëf#74hë¦Ê&[´…~¡F… %d5'Úê†^ u½±ðc‰&rÿ—>Â=ÃB«¶jzpbÐHµ!±ƒ¤y•ñݲëœÊ»HŽÃ·gŽ¡‹FÎuÊqºy޳MiƒK&l£vˆ¡[ Ò«Û“ .·ƒ|$ŽXLö(@35,YÂôÅpŸŒ>Z-¡!š£©és°ÔÌ9:R?ú!¡è§1BŽ@hÔ‚uñòÅÂ0yIš/DÒAó`êŒÎÀ¦«WÑIS¤ åŠN Ü2À\@9PƒÕ)åj£Dý8ˆ”.6}Oé45™ÍºL¬A¦³Š®ëü äbì’?†q<»Æÿ¼÷uþ,ñ/·ÉB<@O`2°M!A§”LôüPK+¹FrÏäPKë‹MR,junit/framework/JUnit4TestAdapterCache.class•WkSW~ "T´¢† F[«ÔP[Á(Äj‹öv ,†Mº»ÑÒûý~ýhÿ€Ÿ:ƒí Ô2íø¥_ú':ÓRûœ“. ˆ™á\ßËó>ç=ïþþï÷?ÅAìÅ¥jtàrH9UÍÕŒ©æª—ÔÞ¸kAqÝÀËjþJ&^U£×‚hÇë5˜PMÒÀ¤R´”À”é šqÉÀL;a«Él720§/ÕÀAÚ@FéPì ˜1DZÜþ”ô<˨÷,×–©1Ëõì´s%6 Î lëO;ž/L¦²Vr?!P=ÓIK 4<›ul?2åÊ9ëVÚ½9…óc£–矞”Ÿ~drÆŠ TöÙÜ9%Pêô§'i nØv¬xvnÂrGåDŠ+ Ãé$ÑHbâ<¿ðglB N[þ€5%³)_ êz ïÒS«ÇCÃiw:’St³Š‰È€å%];ã3üh±M¥G 5“+R»7·B¨I×’¾•sZ‘œ±S“ev§ÀŽáYySF²¾ŠÄQúi— ^Ööj[I µ©PxÚ·§lËHó¯„/[Š>šF[†£­'¥Š#r9ë<ô¦HtµaöÍÜ 2g^`ß0T9…ˆº P0wªÃ¶"ùÈ£O¶À»ÒPú®åg]gT'W}ñ~óÚ\œÏ<ÌÇÐ:Ù¾ÒYsŠ6ªö´#é†jçâ&f«ú’©ü…Š­Ò:'½™™éÛÜÏÆfƒ‰tÖMZƒ¶Š²­ôu:¬Ü™èÆ!]›pá™8c&|dMÜÄ-obž©^ʉ·@º;7ÎŒ~éYƒ2)'-ååmÖ ¯„‰wð®’zÏÄûøÀćøÈÀÇ&>Q˜>ÅgLÖͨ0ñ´Âý9¾èÚrê1¶Vy:*l_šø _øÆÄ·øN qå¼N»®œWGmà{? +p`k¦¶;¯ží%ru„eöëE2íøÒv¼ Ï£)Ÿ·)éLG.NÌZI?ª¤Ê3Y^ Þ»%ä‹—h€e‰ÈK™/%^iç«ñÞG]~)jUÑ·½LJÎÇI ³*´ÚhÂwmg:º.¸üªÒW%³_Õ_×bán ­¾dúÕ²óŘ÷~Ъ"ÝP¼JÎg¤·Þd8Gwk¢fYœÌ…ÝZºnk¸C[þ¦nV„uàô§b³•±‡KP½>¿Jkõúu4yú+š«µûC×7<êÕ´ví …˜ø,êàP†]èÄ~>IèÙAÎYP86¸Æú¶‡³{¾\P^‚¸«E³­Ô‹Û¸ ¾†´Žhõj>¿žÊ+·ë ð ÊÔ f•n[Þÿ¼ä´ tu/¢ü6ªÃì ª­ø µán=_DåU50î£j¡¥º5ÐB@­hb${è:¢WµÑ<45zǵû×?£\[¢åêÛ0—ï^BÍÂ2Ìq®m[BíûºEÔÇ{îa»Àm´qÐ p'‡Â­„¶cMwü{hØ.F ’màIÔ“ìvÒÝKºÏ"¤Á£Û^¾<{ )Àý½x' ¦ôGѧ¡ å¡ <‡SyèÓ´`ß²Œæñ%´Ä{–±s‘sÌh¯Js>(êi¹tö„ËMé§¡@Ct˧èŸHЛEŽ" 4«Ñ¾B_­rVÙþå­\Q1Óˆ#ø‰2Ä28Dc y œ-+£‡¬8ï…k U9FìñÆdÏ…Lú11\Åj”¿å+ñ3™KS™Ê$s ×¢Ì=Rêû†ÄËÅä Ô3 +sº(àzX•.RÄeF*•ÏPf[(L IL„!ªøPKÌ7B}PKë‹MR!junit/framework/Protectable.class;õo×>CvNv.Fö‚¢ü’ÔäFf Í0F.׊äÔ‚’Ìü¼bvn ?8¿´(9Õ-3'•‘A ¢81)'U/+±,‘‘A:«4/³D?­(17µ<¿([I PH‘~Nb^º¾RØa„PHFQ~9H!##0²]ÂÀä³y š ˆÙl&PK2Ìݘ¿PKë‹MRjunit/framework/Test.classmM; Â@œcb"ˆ…½mÒ¸X[ ‚ *ö›ð”ĸýèÝ,<€‡w{§˜ù0Ÿïë `‰qŠ,EN˜Ô½SöÄÆ®¥aCåÖ³vŠ0/v­S-ïüìõM„æëìª<òcïtÍ›¦cBÂE+’0û7$LC*:©®b_µ\Û„@ˆÅþ1àuˆÄ;„4øýPK×>V9•¸PKë‹MRjunit/framework/TestCase.classX xTÕ>7™™73y FA„†I0.¨E”j¢¡IEÀj_&/0a˜‰³€+‚ â‚ ÁXQpkÝiÅ%Œ¢¢Õº·jí¢µ­Ö¶Z»hk[mëÒþç¾›Çäæ I›ï›ÿÝåÜÿü÷ÞóÎ}7/~ùèDt¨0ÃÔB[CÔLß1è»a*¥­aTîgØÆÕ¸ô ÃC Ô¤í\̇i<=bУaÚAô¸AO„©œ¶i'?Ÿ ÒSüü?¦gèûaz–ž Òó½Àõ z)Lèe†ôÃ0MâJ ½Âð*Ãk ?bxšáu†3ü„á§ ?cxƒáM†Ÿ3¼Åð †_2üŠám†w~Íð.Ão~Ëð;†÷Þgø=Cžá†?0ü‘áO føá#†¿0ü•ácžìß‚ôw^<ÿaÐ'}jÐ?ù;[¬¥¶ ò¦.k™U“°’‹jZ³éxrÑLAcâÉxv– ÒÈÔÓùêR0Ý£)ž´[rKÛít›ÕžƒS1+qš•Žs]5ú²‹ãAc›ºr ©éLÃÏòTzIM›ÉÖYFE»•ž’RÔÈX*—ÌöÛg¤ŽFAf,m[Yû;“KdMˆLõôáôÃKi:—ÄdÒÊ~üî­'Fv×Ïê ðÕZi,ËÚ‹®O-‡‡Q“i[œN-ç…˜éØ'a%(dŸ³»³ñ¬Ã³ûËÇ„½ T@Ô’jÍÅ7ÛÙÅ©wH§ؤí΄ËÖ4&—a#Ø ÍJ/²³…ö•ö‰„½ÈJ‹Ù™L¡Q2Wrã9pú`¶2;mKç w´Ç.. µüÖ"˜„b©dGÜ™¸X€ ŽHƒ2‡¦ÁJd8b:­xÛë4Î>;‡fA3<Ø ZNjï‚2æÚçt£lw pe˜°bYx4%2\Ê!ämá±S†5–-ÇxXÖ××s—¨Ç[Ûa'²ôGT£—}CCƒ´o`;UÙ×ÃnÎi6´§ìeµ@n˜?â<½,jk%O-[9e/«º:iUÇVNÙ˪µUZµ²•Sö²jl”Vlå”G8±Ó’ʶä -Áìb %ËCnIÁò¯ª´Ê4µË©Sr;Å2.º#T­?´©ôR *æü¿1ý;{j·Aÿ‚ÎONr fSŽ… }"žã d ç002ý¥pk*—ŽÙ qÎè#ú3ñÁ<Ú¤S¨Õ¤“i.rEñŒiÒ×éL“΢v†›ô-g¸ƒ°¿{{äLAû»®äùT³’ÉT¶¢Ý®HbýMú&ÝhÒgô9Þë…s©K`+fô…I_Òˇȣ+}!jsñD‡Æ‚9¶•&BL`+++XB'ޤ“LZNó QbŠR:Ã>SøE‚*+2‹S¹D«íε'â1A{ê[g CUýIÜ!6E™ ª*™›ÔMg3äLZÆ¥e\ZÎË~Ëp!à †‹V2\Âp)ÆË.g¸‚áJ†«®fXÏp õ ®c¸ž÷ç“nr;µ™]nf—[¸´…K7Ó|“náê­ ·Ñí&ÝMwa±#øMEN+öá€Gï:^¾m¯1‚¬`ï÷÷>éå·‰<=°ú2¢@0à•q _BZÎ9 é?@óx©k!ï c6`uwÛIpMóúPÔ¤bw&¯]R¯,1ÕïŒÛiþ>ó°T½XxædÁ¾HãTÜ8Âs‰­ƒ*-Ü}†rÝ=;ã‰Dc²5kÅ–´¥­˜Íé½Ð²ðë©zµ7Á7 ´-$è$üJ8áÞp8ÊÈHÀ6ÔŽA»À3ÝN"*¦’m¨•ЩÀ‘¸BÍ#N!šO§¡f:Öh=Ofš¯˜0ªÄeªò`:Lgé’i´c­˜¸´úÒ´ÎPœÕ²ß}.W@¶t¨)Q>N¡jäaj^ÁT:;ùîׯ§ ÆÝÙœåŽ?QÍÆŒö‘¿)ZÕGªûµùœK~:ºÏ/˜©¸üd`ž–Ôœ®Xg)Ö@h]ë–­cÔ%\wm.W ;WÂ\âÔüèkM âÂ/|'Mo®zŽüÕMwR´¹ºÉi«pÛF·8-æÑ>4öó5MÛYõ,ù«vnƒä0¦¶•Áa˜Æá9*é U¯³qháç!4ŽB{ J5î4Τ}W¢vF\1=àëãFÜ%¯£1t=Öãê¹<=àîûFšŒ¾jôÕеàëw/Ø7Ò ´‡r-òä‰tƒ\šY`.ǯƒlø_§,MvÛf`\òñâ¨%,¡hÚ-–‚c wól(oéšr3ú•äi„\Õ‘\OÒ}´'Ö®²y•#šö.ß§Fqå£}´ožÆ JöËÓØM4ÉËnÜ.»héã4¾öŸ‡ýh®î£‰ó;¹X9¯;Q }¼Ö{AsŠÒ(ñóB\±•n@á@á<(£»`{/ltK÷a¶[1bÆä1úÊЃ8pÃô‚úfÛi5="Wt:Âh"FwѰg°k]”@iÖ±‹–ÊP\£Ö± Ážká:†øÕ<:.Oèþ$<=5 ÀÓ2%q)CYp0WNq®^~ÿØ<¨S=ç/¼Ã~I@ Xæ-æ áUŒym1Ë<ÅLÖ©Þ€˜7=Å,wÓ£KÍÓàm¼3€ÀÑÂý™º‚œ?_ž"Ûd¶Ú5þ=Ìû°Æ'‹²nTmD«ªó4Uwø!&ù‘tXᘹ“7ÒΗ" º¥I{á %­ÊSTgýÂ?°¤Ìå,é’•¹VxJ¬ÒɾÀ /‹JœëJœ«$^ä%±Zc>ò ¿&q®+q®’¸Rq ïCtÊÔ1þ±vÀÑ·IžLp£WJŸ¥3¬‡˜ EòMêÔ¹ÉSÌWuªMs£§˜›¼Å§3Ü1·!fs‘SúxìlÞ½Ã>¥7{ŸÒµ:ëøà§ô–"ët²øØ°%nñ–X¯³> ‰Ï !ñfÏO«Ù:ÕsØÒç=?­n)2Çâ%ÌñåaÏñÖ"´'è´¯€öÕaÓÞF·+ÚÙhOÔn¶âõaRúø?Œ$¯?TE$ûÄ6ì­‚•êÐÿåÿmàCS¼»[ Áÿ!T;™œ;ûdu{¬‘/Nsø…ËX}«MÎ=JŸ÷~&»7ú»]ö7JpÓ< Búßã†XA¸øÇ†³“Ÿ!\?/rqïÿ§Æ½rÌ}ÿPK²i’Q( ½PKë‹MR!junit/framework/TestFailure.class}S]SÓ@=Û–¦ Öò©¥‚Ò–øÙ"~0ðbÕfð-m·%Pf“Š?Ê‘âèŒ3¾ú£鈴ÔyÙ½{÷œ³çîÞýõûÛ+x®"…ù$†‘—CAAQE órXH`QÎK*–¡ËèžJ˜«XSp_ÁÛ†Ùâõ]î¸ ã•öeºzCÇüÔGºÌ—ÒÝaŸZ[jüÄ5m‹a¬rh¼7ô–a5uoÓ¨¶8Aãë&Il0,çÃÕBy…=†Ø¦]ç ©Šiñ7íã*»r!S±kFkϦ\ûɘ{`: Ó¡‡È¢ÚBÚQ}õ¥Ü`“ùÂÿjž[¡%&\{ǦÕdýÔÍbÀFL¦ùߣ^sÇ1š”JšŽïŽ!š/¼#‹;v[Ôø¶)ËJ÷Ù_–ÊFñHC×4d0B¾‚ç½l›­:ã C¤4#£’‚²†uÐâ–¦pSÁS xÆ0,ù…ãp!mv»aK[0d¯¸Zrzáãmõ×\¯zǸqr­:ÃR¾Ä”/_—o¿Àûwy~$äyè:›ÜíÝö´-šz· Ór¹°ŒÖ–ÚgˆÀ;®Q;ò¬oÏËÆ£ÿ”¢¡ÏE¯CQL>Í ¨10Fã8­ö ¥9U<+.œ!R\„W˜3Ë;yÌÛXÀ¢…%  Ë …SVbÅ åF'‘A\;ÔüXœ)ý»Ö$¼Î#±ÃÛATùÀ0óbÔO%alâvò~dØ® ì_juŸ!WW‚ÁmR|KŽ[B7y+$d´¡|îsûÌi `p¾H)t=äQ$™  ²Ib­­báSïÙª©kïûâ$”Œ,¼'û—J´/>¦ŒÛ#otø)'dOú¡ŠyôUÄmu`aÅA«l ;(`ȃ’ÏÁJtwƒô0MÚZÈåQí{«“êšþŸñ£«¸ÛùXÐlkuÖEËý«P£:‘ ³/?Îߘêç¥;£Ÿ¸˜§?•§K·)M³íÔ9ý» M¯Éû†NÛdgiw½µ0oýï²Wi K«Iœ£˜ÒÌÙÅÆaÞt%Š2i¶È2¾‚wÌ-r=¾¼ )—ÿä(<瘤™#dŠD¼M9eL§Ø f1–ò5“Ž'PK·Ð!Ä9PKë‹MR junit/framework/TestResult.classWëWw~fwØY– ¤@ @KMÓÍ.d!bmCJJIbcmM%Þ:YfäË.ÎΆ¤ZS­Æ{ïimŒ¶Ú µÇÉ9Äœc=öøÅC†ú¼3Ãì…YäôìáßõyŸ÷:Ã?þóç¿ÁG $±¨¡@‹Í¸EK"¾%ÂQÒà$ÐŒr .b9Á•K2ºÜ‚gñmßÑð\ vâ»"®ÈÞó"¾'ÓïËè…~€ÊÍ«~”@~,“ŸˆàŸâg~.“+~¡áEì%¼,WeúŠˆW5¼¦áuP Ÿ(L{2o”JfIAsî¸aå˶ŒwN]0.™²cå3SVÉãöŒu¾`8ÜW©Û>ÜØ8ok¹c¶]´ ÈÉ “š9ÞÐÆ©9wº\U^WN(hÊÍ8Å%ŽÏ*ˆ¶x{\A4¹ÿŒu²8O¶mSVÁœ./ž3íYã\ž+íSŬ‘?cØ–ÌýEÕY°ˆ¹'”Âi³T΋âÆü¼kŠ‚ÉУcžMy£p>3»`—~ÌåcÙý[© bíUÐY嚎iNQöT‡gt…«¦hÉ®Pt=¹ûAQp¤!ûºÕ ¦‡íXÅ‚\5=ã]söm拓êÝ0OÁ@¸âÀ~Žçƒã­¶¹X¼hVî·fóÅ‚Y•DíÉý›Ó5f»OÕÄúòÒF¼nº¶ìÓÌÂü¬žþú S,Ÿ,– Ž›‹LÓ˜éçOÚc…ò¢Ä–>#úöþé9oâ+ç‚ZŽÚå‚‚¾pº“FÉËÍÞÆÛL*ÖWߦÛEÇÌ:~rÅ©ÆW®sèošó îßn¦U §îÚ<6ù£¦á,H&—Šåü¼Wùt0k¿¹ä¶ãŦ)ëQKîËFi¦œÍš¥R®œçí™bÙΚÇ-Iƒ¶Jyu:îÇtTâ0aÛÆeÉi êȈqŸ×1Š/(ؽE|q\Ã5oàMÓxLÇ/ñ–†ë:~…œŽø5ûÎV¹§ã!ŒëøÕñyïè˜Á¬Žß⌆ßéxïé8ÙHž…{G„Ìû:Î!«á+bëÞíÔ1ÛJh46\UÛm4|¨ã÷8£ã¬ˆ'!)Ö˜ß8ÇÎ]`°Ðk«“f!äTýÙ1I€¸åwIÖ|MUuÏöÍ«¬é£4m^’|)¸ÎëÕ*Ü–"ˆò˜Èç½Nóy”J:jÉzÖÜpZÝVe‹Y©n¾P5l†•ÿžÚºÖ7%kUáÑKÞŒ~C‘,ÕµX¿+’üj‚*Â/‹!Î"8Ày¦n>\5áœäŽYD|¶sÕGùg6¢é5(©ÛˆÌ­!úG¨•aSeKQh"â·\Ä)û¡QÞI==hC/»q/ö …>2ëÇ!îꞌá0ŸRh¾þ´¨‰ÏñÔÇhºæ¹ôàëh‰à)RÒ×±CÁôÐ:Z¼…^Úü;©=jzpwD±òßVØ´“¨¿ûhû}Ô´ße0J-#ü:<‚‡y¢wcÐvjöYÉhG]¦ã8†ãDnÂTý LÛC™“éÉtô32=á2ý2NúLr¯“i,í1¬èM¸{‡ÐB4Ñ×å °uLQ3?!pª!bGâÙñiËÜĬ¸ËO®©´@¯£“Èé›ÜˆºÐ­®á"N#;hb~—Ç<î&ü~¢y+#A œæˆ]Ü7åWÄñÉ f§ý˜unÄlzˆFîŠ0`ÿ®˜éqy‚!9ÍÄšu¹¤Üin°¢tDŸ,á— ÌOúÁí³åS—´_G—‚?zbîÎÙªÂI…ó¾â;ð „?¡ûfÝ}£ê~Ü¿ïùcŽ8gC™¨¡L¬P&_ e¢†0YÚ‚‰Š¯áë>‹3ñðîTzwÞFÏ\*½†ÞS©ôષ¸§Œ.·—)/±ë<Çt¸ÂÎó¼«ên&ÀnàTÒFßÄÓnµ2>ý&Ò×êm¿ZŽÉTäÅî_^¥*ɦ~¦NŸÂ7}÷t*=´Š»V°czèorÏ-—PŒEÝï>;HQž]$âiKѳÀ‹\»ÆS/qö2ÿ¥¼Æ“¯ ¯òäkèÆë̯7\Fã<™àŸ”'"ÍsÔí®wõõèÚEà¹Äëp#Ôçƒrú;UI$N²`>§à¡ÔÜôßRsôäž§ùªút‰CêЧ=ê'›{dOm\Ç^©¸Ý"ZÒKØ^2îEí«æ]Ê÷xâ}ýZ²Âêû½á£ }ažyí3»‚öy2ðÇIßå_Žâ+x%Žr.æÆRjÍ‹Îks7‰«Ê)± ".÷=Ú™ZŽ×ÑÊǾëÐÔ¨Ñz¯UauúX<ãÊ<óBôò#ÈåÿPKêtÇ"FPKë‹MR!junit/framework/TestSuite$1.class}Q[/Aþ¦­nm—VÝ/E‘hK”/„‡†DR^Úx“˜¶£†íl2»[þ–„~€%ά†e“9s滜sæýãõ ÀV‡‘À¬!ÌÙÍ[X°gH÷¸»Ö¾Ï;‚!W»á=^q¹êTê–ª³ÇÜ—J ëÅß׿3¥s†DÕk“\¦&•8 »M¡¼éF^‹»ç\Ksî'ÁµôÀàœ(%tÕå¾/(“¯Ý„d]¹Ò¼+î<}[i?¨‡2k;TYì~›ÁÒ¡2i†xÑxÛu/Ô-q,ôè7aËJ%©–ëùTè©®½¶…EKXv„å …‚ƒæÿ±f˜t[å>YÎþI¤Zï¸VäÍP0ËÒÀv©ÏÉA`3æ+.]lÓ{Ñ#³lÖ4AQŒþ†i 6E‡tŽÓž.o>•7ž{ˆ@iZ“.àÐ:ÓAˆ¢1’#ä0ÞÛ¥Ý0RåG°Ä”ìˆ}I ©9_¸¾Zr’\@ŠÓ˜A&b}ó¥>PK·l„?ЬPKë‹MRjunit/framework/TestSuite.classX x\Uþo2É›N^Údš´¤ËtM2“4t †H›¶hB!µµ­ˆ¯“×d`2g¡€ŠTpEpmÁ…"ĵEH Õ²( (àˆ(â‚ îû®õ¿÷½yy3ó’Š_¿¼wçÞsÏ=ç?ÿ9÷¼>úŸ{X!Π÷i¸_ÔãA?¾$ß_ ùñ°üñˆúJ_Å£¾&ß_×ðXÓñ¸†'üø†ß à[ø¶Ojxʧ¨Çw4<ãÇw5<«á{¾/5>§á~ì `>ž@ǃ~À"ühOø±<æ'rô‚ýTnøY?Ç‹~¼¤áDñ œüe¿Â¯¥ÌoäÏßJ ¿óã÷ræòñ¸|üQßäòŸåã/~üUNþMÊþ]>þQ…â_òñï*4à?œ ˆü)Ê("ÊåÃ'·=$}$ *ðP•¨š”óËÇ4¿øE'¥Ö¡K™ŸÉÇ£~˜ÌÕü!¦O3D •ˆZè½É¤™îI™Œ™¨ØÓoŒ˜ÁÍ—í #9Ô>MÇ“Ck*÷l53ÙŒ³šËÆíÛÌX6•æê´øPÒÈæÒÜ)èÚ|q.϶ïISÿÞTú’v©km77biÓÈšò·ÀÚf×Éʬµ¥¦´x+ðõ¤yüŒÍñ¤ÙŸÙm¦·»ÊŸTÌHl3ÒqùÛžü[èÒÞŸÈņûÌìpjpãe1s4O%¥Ö¬2ÍÉy»/¦[\[äšìMf²F27ä>·‚6—PÚÜ“àV _J“¤ÀV#=dfÝòJ sÈH¬‹ÅÌLÆ-äÏ› ÚÌhtR²*–¢U霌ÀCz&¸mV!P—æÁª+>£+Ò]dª‡FK¨»$¨rþeÄ5H€ä°ÇíÌÊRª´œÔ¿€!q;ÍÓ®“(±\Òöé$m&×›_†#Ú£h ÏÊ®8%ºÊ›[¶IŽ ÇiQ£çÆ\@h&µ^ËE».N‘œ …S¦e‰yYÖ¤š ¦\÷èb…X©‹Ubµ&Öè¢Cœª‹ÓÄé:n‘Îtêb-gðiÜ¡c ŸÐE—8CÝø¼&^¡‰3u±Ž»q/ŽéøŽ1æRyxD¥H6åý—ñ¢Ÿx .ÒÅzÑ£‹ ¢Uu± —èâ,±’eŒŽÒ@~7x·–ÞéÈR7oÊÆ•ß $æCâÄKGööuÅxu%UIs¯•01³øâ·?~ZJ§hB*=Ôn$žä)I#Ѿu8Ú+¿"x\5MȱK²iCj.èVA/ó_ÅÙ5»àŠœÐ@æQ°ÀýU^mÙI¿š<‚àÝ{øxãñ¥óܾÔ`|OÜLÓã‚m¯òrÊyk7+xM<³.“‘ŸÒôB¶íÞm?%x@mïT:+µKÀ6˜ì/Óæ µB{–{h›²ÉW!“}}̪"3 w¾73ñ+Ï€‘Èí¶%—Lý…–ßZ#e$SÉ8?=­.¢œ7uQgÝN‰šÝ4±“+è\ÍT°t–m ï¥~¦¿jÄvÊdõ£°Ír¸Ü0yÓ#?u†S¹Äà@65Jmô@šÛë©Ço&Ì3)››9“áLºö ÜÆ«"kÄå‡j€‰˜Îf¶Ç³Ã“|uì´ât™Í¥“2µó •Ô¶Tœ'ø¶îز‘åÅ|]ÎHd°ÐA7QÆ,ßß,èœ{µ_ˆ¦ÉRÅñkñ,*øx!r¢o ‹û¡|Çø‚㨌ŒCã+èçcÓŽ"p¨uUÇ`~kù¡£º¿íL߯¶û1=:Žc¨iõqiGyt@.áÚN_^g-õD¥Â !ßQÌ”?ê&´OˆÎ*Ç쩤C'SLóÁGO+à§ïÍDgjÔûÔ«÷]˜ƒr”Ù„Z>WSöTJ¯üÃftâ¬Åéè™8çòù*œM-ë‰jµlÀuØH-›xÛ…çÑ‹ÝÔòjˆaÚOG&öpt!Z87D›®C+G빸²ó\ŒK5J0’l§©sIÙwÚZR\ŸÅK~Tù'¥^Ç9+âižÎ¶²Œ7å+”t( 5î(Ÿ‰¹ Ó¼C›#Œg£ñ `:fPÌc:ßÀœ `Û”SòȾ¥SR>d+ÍÑiNŽ>Îä͹”æ° äŒ4gZªŽaþŽà‚È„)1yp¥ZºPh)­ÂåŠÓBö©¶Š ¶Š 7/Œâ5#X|7–v4Y.$(9ÄÈŽ¸4ñ¼ÑÖx¥• ‰Ñì‘è,•j-d‚*P9[í¥De¯ƒ·ÛªåH¢#\èÌVèä“òMü»*¼¸úüœ"BFkwcY”©¹} M}wnFKrsM‡9Û|-°ÌS8R(Üw QÊ´öÏD»m?Ö´ÅòN_Èw¼£¢¼£²¾²¾â æ„|õ•+;µHHk#íWWб?ç†SúÆN<¹ KƱâÂΑ+'Žœ8îúQMÚä‰Õ™|^ÁÙ7pþ*®¼‘0^‰Ud5ÞŒn¼…€\MÙkI´ëáÛöÛqÞý|ïbçv=ã=x7:ÙV‹ÅŠ˜e”ôc5idËj»šÐ^Å\|+³µ‚¿çRó5äÁv‚õ„¬ù"Ï,ãß O~»maÅ¥'ìZR£ŽÔ;¸šªäÔ;mNÅ”×d°¤Ðª±[=Á#‹žhÒMàfåˆuL•cV•m–ÉrPæb“\{—æw«ƒ¯·Ócûd¶(s‘ù›ÌIâ['!³UöÉÛöîAî’(v”ík=Þ]Þá«÷Í;ˆPk½oegE$ª8‚5äÄÕ>I¤ ”–OÙ6|KqÚù^ƒÏ*[º¹¾”í#dÏ"ÆðÚ0ËŽi9ËŽSéK‡csÙqƒ€ÒKǨºùäÚ{ðÞÇ?~‚Ø~í³Á[5S]nÌà1tìˆòç8Ne ÙŒçâi2¿NŸ¸qŠ¢{˜GÞIóîrºÊ1p•rÉ]!V)óf}PÅôC^dêô$Óqúv¼2Yxx“éFfWþàñ Ð&ÓzÕW™óôyíö þÔÊÃÌ¿G\.œ3¼±>L=q*mžœÕ+U…"ò1ö¸Keµ£²š% µjUòÆŒ#~ìÙÆË*+i-ï²JVW_ë=8CÐÛÝ‚`5ô7¶ÝƒWpCר‰ï(ÊŽ'ùë)ÌÃÓ¼§ŸQ&E8?>ï£oå4xÙw«23j›YFÙ“‘ÒóÛp»mL»úÍÛš¦,+¾ò~亠*œ Š©öæky”4§½Øð„ŒÎ™ûQ9=ÒÆñº±ÏMÄj–bþ‹hÄKÌ¡_0~…åøãQ#k±å‘ËÚàÛñIf©ô€ŸÏ¶QçØ¤ôGiÄú23ã÷¬Âp±ÑïhóÛÌ#©·ŒãÏ8¬Ûæ\e$Ê»°Xë?èÉ?]ä¨t´VÚuJ°v|ÎÖu¦­K—À±ÛéQ]aøB¸´éŽ6‡ìvµÒޡ߾ï(Òäw…Ñï„ñN|ÞfÑþ Å–ÌðØoû.ÎÝíp©ÇÖSËÛ}ãÃTÇ×!VâM UQ³ ‰ÙÐEÈ¥¸Ö¡é8ŽØ†ý•Ò’ &‰sV§¯5ä»g—‘_¾Ã²âô`ÑáûœýXá\ùçZWþY² næ£Í®ˆu=€RÕW†í‘6Ù¥÷¤{„1…˜‡J1µb‚b!Ä",‹±E,Åù¢ ;E3E‹r`µe¤#Gy× 5’÷u™Ék³œˆ^¤øàsu̦º¯óR£ÎÍ}ÿîÅ1ÝÍ6gæØ.×ÒËóØbí‡æƒ¯¼8ê­.þÌql›cÛV&ÿ3ÉÖ¼ËÖÜD[øM–øÏÇûQÇñÀØ:ŽWNvÐ)®ƒšœƒšœƒ¾¨ä³ÈÊd˜o%ÛPK.þçN6Ÿ!PKW@uW junit/runner/PKPKë‹MR!junit/runner/BaseTestRunner.class•Y |Tå•?'™™{ss0@ @$DÉ䨨y¿Iˆ¡Q.“›00™ 3wx¨u}Õ¶öa[­ªH­ÛìƒîÔ!ÛTÚ}Tw[w»uí>í>úØnÛ­W-ÛÝÕýŸïÞLn&Cµò˽ßã|çõó?çŽß|ç+ˆh ?mP#½]FÇé—2ºd`ôß2ý•FÿcPˆÞÖéuú?¾£Ó»ØgÒ˜å]bÐ$.•Q@ç (8$+š¬èò(3¨Ÿ •ËÃÔx’AUÞ-=By‹l/ZX½Wç[u¾Mç}:[:ï×9¦sζhÜ«sŸœ8 q\ãƒL]7·îØp[û†›·­ïXÓ¾)ÜvÐ:b5'¬d_s—“Ž'û–3MZ—Jf+éì´Y›ÉìíLÛ½vÚNÆì S¥{&ëÄÍéÔ€vâvç½}íÖ±v;“±úì6;Ùç`âV0ìíÛO8vºË±b‡°¶›IïmKY=ÈZOÆ•L¥‘ºLu©HÒOÚÙþývz‡µ?a‹²©˜•Øi¥ã2÷Î8”ªn;˜“æt6™´ÓÍk­Œ½ÃÎ8ÛÕº•Á ´#KLU¸7mõÛGSéCͲ±\ wIeq ¦ÉÛç aV̬|ÀO9¹¯àè¬HÝå\9%c±Ç—ö¦ðœíˆ§šáP{[ÖÈ:¸7ÛêÇ!cñ˜=àÄq{ðù8E™E&^õÄѺô¬q/_³“=®Ût«§gC:J35]ƃ>†;¤SGåŠO§Ew¡6øn´â‰lD«.˹`uM&#ÞJ%å¨í*¦D-|¤¸¹ê. »Úñ°+ª É¡1dì2ajŽ´þ†NЮ+£Å„].䂱„uûíLµ¾3ëV&Ó‘r6¦²Éžüµ/ïdÿz£oQ‘°cNskòJvXièæ§÷ kM$ì>+±&†@Ìø‰&g²qÇvuÒž³Ôœij¡ºâru Ýv¤zòÁ0šðÓ ù®ˆ®ý4;a dìžñ~{MÆõ©Üê–ºb§'„‘¹À8N‰mkÒ}Ù~;éd$]ö½¢‰¬8Ô€ÿphZ‘3=b´ë Y™Ç½@d·„EÈNº–UØÇœ´s|]X @޺ͱ¬H¥ÅÕ~ìX6wŽû)K¤ªøØ$ýH;©o<¸VñHk*_I»ó}›nAÛ˜J÷[ãò-ÐÓ›Œç«nd¸UA°ÀR]¤8¶ ˆrŸáÀŒ[yK2GóV¹Ô»`»*’%Gý6wbÓṲ̂'ÝnËÝÉî~ìÎÊï®ÍöŠszòûD\\af¤Žª.`»YF¯2°MíE`é,DRÔô±„×+]©l:f»ñ1m|½o>&}ˆ0é~ºÏäCœ0é·éK&ÝE¿)Vu‰|f"ƒl“û®+wuT4é»ôì¼\6éeúæ”IÓ#Ldò69-ª Š¿C¿k"+“¾-kߢ—˜jÞ ØMÎr‚if¡Öfã •;SÕ¹šdʩ镓5µ&ax˜kMú&} .*R`²*†-5!’‹H¨]L>ÆhªŠ'•¾bîíßaòìhüA“ïbø¸ZmFêjú¢×ôg3NÍ~»~tâ1„÷˜œmûúM¾›ï‘»)"ˆ©þ7(_ÐÖÅ»'UÕ!ˆuµi1ù^¾OãûÇ9½xÓøC&?À6ù#üQ\c2åˆÉòÇLúúS *–ÇEȽtÒ¡1fÒ7è?nò'ø“¸»öx&ƒ³5bOM̽.بñC&JÝÐz»×Ê&œšðA›L›üiºˆ[l2ù3ü°ÉðgMº›î‘Ñ£€Ì¦&ì¢`G{“˜Óä¥O“Ûi5¹ù1ù‹rAF¿u¬ßý€“úž\ìå¿«˜æËÖ¶xƱնî¤F½7=R´L•"Ö˜®÷C¿ Ë'®ÔM\òEÆwÒQ¡Ú¥¤Q©Û÷©T¼ÓGŸ’Ë %¼OW4$(á Åû¦Åž50€"ôÓï«1óðYú'ÅÅí{W9»gBÏåç6¡;ž™H¿s´09$R=ñÞ8J"v"¥·+]H¦Ëƒé@¤UjpÈ ¦ŠÜÔž÷yUÒÚM€ê™ãâÂÿ]8­ÈòhKˆƒÔiðmU¿[H«4{”íJpõzgfDÖÊ}8k%2=ɨm»ÇÃÃqD{?¢%%‘\Ð=å;ÆiE–Q~d–Hʇ|ˆfvÅ%ðÊq¡°¥Ç>¶­÷2}Q«ú®ØŸÉç´5¤2ÒZ|Cƒ ܯ…rÕ˪‚p\ú4”8ùi¢hç+16­ÈÒÐWM“ŽÝ§ÂhÀJgPNà–êTº¯ÙÅ ŒfÎJŒ]jÆm¨U[è¸î´1ù^ªD­z¥¬êò à¶ZÜuZ`>§Fbº‚TEwЈJhÒb¬K!Uo”lõƒáýê=´hñü0f×ã ˉÑóÄÑÀsTrVñùˆ¬áMTMº’>Š‘éRÒƒô1¼çÓÇé—5 Ú²h}ŽJs(dR5¢ŠI¥Kè1‘Ñ'é!°QeØcw5Þ"*}†‚…¬¡O“OŸ }FÙ«ZRA7•*æç(ø"-¡P÷yÒÀ ó°.Ë‘±K†åîp˜L̆p€• Ù’ß“ñ\JÐf]C éZXqôý,œW¢Ä†QéÊšÔ=L“ÏÓ”­ÃT OÍQ8š£iƒd´É»þkgAXNÓÁŠð7W½K|–c÷F쯢Y´»«¨^µ²«Òc˜}¬tC‘tÒ³w­§ˆ!ÒëŤB¯­ýßôyDú™Wñ3Ÿž¸ì}N/d·÷Ùúkïs>¢'=v[ ²\ˆ Ô7ähF!·6Ò¨]q«qéòÜt›ŒNÓ@=Ÿž¢/Nà,Ê·|oz|Ÿ¦’Ë|Ëò£Þø”Qñ{ôû®¼’Np‘˺¯T>ïäh&q»xiVû ut4æhvK *ð"…ê[ÑšƒÀ›®ÎÑU<ÂóðÈQMŽæóPG~ÿJ¬âèU¾Mîh/(}žæhQÇ …Á ÒF(ÒÝpžê†@¦ú“T 7¸ZŒØiú:5{ZT†i}K0/j‰¨ÌÑÒ]íW„âZß¶È+$Ûš`¬RïR›(ƒ÷ct††h±z¿Œ|)U÷ð(‰hîÁBï§IÔƒ“½8{\úÀç)NWÑAZD „i?¸&i¥pb€b”†£ã’Å¿£¤Ýø¹©'’þ.H½÷wîê^ú2ny`w0÷×ÈÕ—qw¯@›_ .âÔ[s‰‰h4RÏ€Gš4"¾ ½7!=OÓ`”…¾2 €W Fû_ ž&ñâ O—è¬J¢)ôÐ>ƒè³GÏÒsàò,‘h PÎKg—꼂Þaú£|ÒU”N¦eóœN×¥rtÃP>¤C*\ñ%ݤ¼øIôÁ~€¾JÏ{ì~„Yï8·—®¬®¿ðí«¯^nÉÑòˆdõŠAÚ$K7ª%£ôZ9H×ÊÊ*µ²°þBu`ßÓ)x#`V#ÆËÏÑšðÚ­»¿”Iu»ŒÞ=Ý0¦j MÆóqÌž@&žÂm?©¼A7#[Ák‘uÛi»g{qohûà1/ªTÑܨx$ž74N_£¯ÃÀÐþ1<.ÄwªgòJ¶BÑ9E Ù³ðïs>÷…ò\Côg(RsðMëñÚáAê¬úðúm8Aõõá9ÚØ—£ÍCõcÖNV:Žù¾ Î|få%Ì¢U|”ÑŸç%ìS@NÔtŽZKž¤r¬çé /£¥˜æh‹àÆV7·F å~ƒ¦‚cøŽ•Ä&ú ÷@@~Qã[ô¨Eê Ê{(›õÃÔV]ßõ)Ì+ô‚{´öTÑ_ªs…Ù·óD½Kü-`úªO3ö˜™ßñ®÷ZÙa}˜Ú¥"#ö&GŸ¥’¤)Pz¦€ã¿ø8Îö8òÛ”Çq•çÙ©áŽaÚ¶u„:»£á›ÎÓö1{Ýøþ0Ï,@xEUEC~s™ñ½pœäÑ>£.·ÌïØ*-Šíyºy˜vJÕÍÑ®è ¤áýAZÖ6HKÛÆæ 1¯õÍ+1·Í è ·:\e·*s‹ñ^‚ëZáÍWÓn@D+Š¥;ï„N‹A!ïÕØ‘÷MØ»uæmMЈþ³Ÿ)~—ý'Î_4¿yoAâ›òÿÍÁíçàwÎû$¿‰žämp ü/¢xòß‚o¢\¿ ¯CÎEºëÝX¿ë{ñ¾~©|º°ßˆ÷ßÒßÁ—K0ú{5º1¿¶F­ýFíùµ½ÞHÒïVúGú'’¦âÕ|Ú,õÂEw½¾§0†å Ýëräü÷¼óRö¼«P?ÛÛç¬lx‘‚Õg†é _°%P}“( ÔÚë1®#¢wpì]ÒÀ·œAÁ sˆfpM€¦„^Š™xÿ3"TB¦*ßdUÑ¿ËDðtÕn•À5aú7…oeô}â¨qnç«C¹[‡é¶ãxò8ã¤#"u~Ô9o€Ÿ&è5LûN ! P²¿m„bÝõç©§}„ìnôú½#Ô×ÝxžH££xwKðš^¦ƒ'ß}½A€Cƒïþߊ¡ÁI AF.u+üáê´ ~"žA!®$«¨‚gSÏ¡ZžK \C×ñ|Zŵ´™ÑV^@í¼¶q$íàóCÔ×ÂÛ)_Uþ~¬`f9‚ö' ©…_~ŠÀ-…ü‚÷çðî5¨È¯áDÔižýKTZÃßáò1,);G+Oú „}m€_G »ÇOy e[…þ<õw—†“]Ýpª«;èê…wukátW·ÎtuW„žZ8ÛÕVzã\©°3¢õsQ'œ¢`àÌý%(‹?ó—êôy1-溞—ÓZ^Aë1Þ«òMêR” ){n[üšrÉbäïªìéô_y¼mñL­œÊo>C­TïðQŒa:†éÙ¼aŠó!»– ^‡€]7•Voý?PKËÅò/;#PKë‹MR"junit/runner/TestRunListener.classmQÍJÃ@œmc¢é¯ÚV ^ ž=I ($i¯²¶KI›’l|¸|Jº_ V´§ÙfæÛýöókÿà7¦f ý8™'ËøÕ‹¢EÄÀ†Ás!+Å¥Zñ¼]íg ÃÖçσpy¤v´ªD¥¢ZÆŠ—JlfN˜ñwîæ\nÝX•©Ü>÷+=§uzrC>Ãy!õ˜/v;Ò{$ü´MO´Qì‚\m“MgŸ§9Ç þ'NwØqQ—káë Ã$ù¾G˜VJHQ>P„á.«eªÜ²–ZsÿxÆÇâÅ[&ÖÊÔ D‡Vƒ[tahvÖ0Ssë?‡iègÀ4öÐopÐâ£Ç-^âŠ>×MvrPK›™aþ ÅPKë‹MRjunit/runner/Version.classmQËNÂ@=¥…: òòïWÀ âÂDãÆÄQ WLpmMiMü+u¡Æ…àGo ‰QÛÅܹçž{î¹Óϯ÷ ì™0°ÆbKX6¡£bb«Ö ¬3è'ÊQþ)C²Zë0hgn_2d[Ê‘ݕ޵èŽÉ·Üžu„§Â| jþ­3”[ÀD,/péYé•ë3$TŸ¡X­µ†â^X#á ¬¶ï)g@5ÍÊ¡ÞêÍÿjäDxÒ.Ä”̶x=y®B|:°9ÒÈÐZ‡õF³~``ƒc[Yä lsì`—,ÅùeÈýLºìeÏÿµƾ´é¡Ü€ ¥‰-åZWäÉ'gRØä¬3wa6¢¥jܺäQ§ÿ~I$Â@KRÖ¤È(¦ö_Ážè’À &EPƒFDN7>!as3á¶SJT!Ù|â‘‹ÚõäDœG~J<"É5Ÿ‘|ƒö‚Ôßq¹ˆÿ3ÎDÅH³1ËßPKÏsö]yuPKê‹MRjunit/runner/logo.gifs÷t³°LTcbøÎÅ `ܦÀ, `ù„,þüa£`èƒüRÿþƒ©ÿ`(þdad`àbÐ)å Ž… ¢2læ–r90aa‹€²“ˆ†á£m¼âI2¸¶*8wétl\rx¢†wÑ O]§ê¯+¹¸Äs†FnÞ™™Á©Gûí…'ØX†ÜXr°[ÂrÙ›…OÜ;ùBgÍñ V99‹;~UKf`ºËLØiON +žœ¤-û(&ÊXÁPK›¾#GšsPKW@uW junit/textui/PKPKë‹MR junit/textui/ResultPrinter.classVùgÿN²ÉN6Ž…p†²‰6Ý$À-ØOB)¤P“/&›Iº™‰³³@µJjµõ¶Ô£Ô o‹ÂB[­õ¨G½µÞ÷ÑÿÀŸ­ßçÙƒ0 ÝÏgž}ßwž÷ûÜÏ3Ïýïɧ¬Ç ÜŠ{Z°÷ ¹/ArJÈýBÞ.ä!ïHàxPÇ»äÿÝq¼'÷èx¯ü?$ï“Õûø>(äC:>,Ç‘ÍG…<¬ã´ŽG„íc:>®ã:>©ãÑVœÁcB>ǧåÊg„|VÈçtœM Ÿ—K_Ñ_”í—ø2¾"˜_Õñ5ËòœŽ¯ëø†Žó:.è(鸨㒎'xO5oyh ä'»oêø–Ž§u|;ŽgâøNßÕŸ:àÙ¾åih=j33¶›¹Ý³Ü÷,sf@8¶¹ù⌣AÑмÉvl³†eéHþžýbÛÜIKÃüQÛ±ög&,/kNäy’usf~¿éÙ²cþ» ¡côh‘Èß:áí̘U(æ}…lyÔ¢ùx¨fÓ¬œiH¥Ã Sž9cw½;2Y«à÷v‰ÍžÚT±#Yi¡Wt²ö uÑvQm%à€iSº;3ËëiAkUç;-sRÔˆ¥wU‡<ÏõhÃê«ê$ümŠØ´óE*§ÁPûíÖ”•ó¹]:µèÛùÌSœ±<Ó·]g`$8Ï›Ît†ž¶i§ÙÔ~Âu·º.o/­s™N˹EqZÌ¿sVÅá 4 K.ÃmŒ†ÝikhÚÀf"¶ŒÛÓŽés«a´Že×B©cxkß4tFû½Œ2¢’!p“†UWåÕ°°ºí5gYÏÌYuó¯ŒSUrØuUâ.²òælÁš”L,¶°ê˜GQÑh™¶üre.M÷Ô©MÝœœTɧa]´>5àÙ#ž{\bT©Ï×öÈkÌ-«ÒæÜÖ ÜÐR ·Ö•<çt°P°< º\µŃ4¦Ý/ùn9“Y¥úò:‚²¥à›žð%ÆÝ¢—³†mÕƒ.ë,ëÄ>CÈ؆í±ÕÀ>ì7p¯1pPÈŒY¼)Žïø>²oÊîÛ³9廩œëø¶S´äݳŒÖÜhn-Úy•EÍúþ”à‡¸~„ÇñœŸà§~†Ÿ³T-±ÓÀ!¼ÖÀ/äø—rŸ*»;‘=byVê¸YPH¿¢ûR|ú™oá! ýqüÚÀoð¼ßâwV^%a LaÚÀQ!w Ïë=„ÿ=þ 2þhà6?7óãUÃ4ðÃŽýJ}à±y‘.äù†Iwp·—Â3¿÷"´ÞÆ hèí»€Æs&ŸH!èÄqˆ"Çú}˜uñ(Sªê3œ©T?çB †}¥í^µúÁŸÙ-¡ÿñЏf\ \[®-lš|n†pµÛëy4Î…™®éqM!Œ…ðò(¹E—„òÙ@DtZïÖ$O¢¢L>Š 9c8®Úï ܉¼)¹Häc×D~3Þ¢ïÂ[Cä ‡vœ›cì]5>Ó*`Z¦± ”!ކI¨Z{òI»ƒçÑp(v˜CpAú± å%•d*ÎV÷Rñû8³NQñûÙâ¨ÓâËrOªûwÿPKÙvd=^PKë‹MRjunit/textui/TestRunner.classX x\Uþ_fy“ék’&MÚ”¶L•Öt¦iZ„“Z 1…”$-MÒU„—™—fÚÉL˜yÓ´¨¨ˆ ²‰J‘} ¢B[`(P-®¸ïŠâ¾+Š¢àî¼™LÓ×”¯_ï»Ë¹ÿÙϹ“ï>vÀrM+ǵ¸.ˆi¸^Ç Axp½,>ÄJÜXÎÙGu|,ˆ>.Û7éØ+ße¸Y†Oè¸%ˆÊüέ2»-HÄÛ§áÜ)pwÉÁÝ2»GXÝÄ(îÓñIÙ¾_è?%ôŸ–³Ï1ñ ö°?€A<„‡xDhsŒÉz\†Gex,€ƒ:"‚ø¬|ñž à)Y|.€Ï âäúÓ2<À³ròEY|IÇá žÃ—E»¯èøª†ÀÀútkÌxŠihjèp¿_¢vï`:5"¶Ì{œjgéÍ*z}9 ÛLÛ¤¶ÔˆŒŒxr»‚ U7ÙJhEḼ=Œª(ʶ&,¦a~Ãq,ê‹¥6HDz m=žGF”‰µ­b|‡éÜ©¯”gDé޸褭ep[ÉX~¥Ókù™oØÌf$ó¶ŠJmؾ;j ÛñTR¸™q _×°ÍÝz}é5ÓÛéŠq¿È"1ì†0µS¼ÝAì&»¸ã0‰tdȲStL°(3©¤’=„OX]Îq›‹ïÞ9ž'ʉ[Y}ÈÊdÌí”!˜±ìbÕ ö¤²é¨µ&.9_9ðK…™Ž¯ø:Ö8 Ýæ»$ Ź2œmà­`M­w¬GK¨z ô`›†YǨžRØ&Ãp‘«›Š†4ð a/¼ûóŠÌ:€Ù9Ôo…·k¿üí5´ÊGæ9Ä.&·÷@ˆ5x?O/Á,\ªä o¿x§²äì¢Ä³•œ’ ï»þw“Fø/+Í®º–ä0w/tï8æyøÕ]0Ÿ»'æòqGä `¹ä +\ÎÝ+˜=W¢WÑ–W“æ:R}˜UöDp-mz}1*˜[Óbe<­(J¼Œš½W…PC1ÃøΗí%Þ ÈßOªtU/èö4{=;Z_äи5Rë;¹ú 9¼ñ&”{›½£¸L휤vªÃ‘K}×9,ìÅNu´HEœ“½¿jiojÖëýžZú¢¡«Þ_«{/Èaq÷(V¨;aug rmIucKÇÑız‡–ÓL£y¡G_3—T/P×X)çl©>y o~¢Qmí…^ÒXËúsʾ0-|j‹/\ï“užŸP¸4ºÞ—à âË}ä)<Ïsø3ãõÍ»b€†n¢c÷2Xn¦Ãoa˜ÜŠqÃðv†é¬:w20îb‰»›òVœ{£4ü}ܽŸã-x€ÿÆð ¹<„Ãx˜\rüÑ2FNãx*7Ðí}˜Ë Ü©Jm Ã𠦊Aüpæãr•*>Þ™«œìSþrÂ’3q·¤Á«¸Œ(eÄy…´“;åxY­T…•¿»8ò×€Ón ¤Ã¼p$‡Ójð–ZZ¼õÞ%ãhUvœçÔOIU?Ä\‚ñù¤R`U ˜%󔚚]®Ä‘™áá½*Õ»¼¼PuÉWìbù³Í“D½ªXÏvú˜Á¸¡°!¯Ê¢#ûÍÓ4Ü3|<[R ¢d>äTõ«‹M}•ƒ:¹¡ç»âaÊ÷\ –¿ˆåwš¹ÆÌ”;×üPKCäPÑ PKW@uWorg/PKPKW@uW org/junit/PKPKë‹MRorg/junit/After.class…O=KA}MVãGb)"ŠEJk«€' ÆÈyÚXmŽñØc³+—½@þš…?À%Î¥0Í3ó†÷óýóùà G ‡ …!¡ÿê*ç[ëXŽñ{äê²4KC8Nkíœ_íÂνÑDü‚pþÐh´3¾ÐæÐ)Gö º&t—ÆÕ’9úGúœÍWbPéËcv?I§í–ÌTGQ^´ó‰ã¹df«Qo’dwÓ T….ko£^¿GnìÓYÉy$œµ&n~é-4ÕÁözvÑ“}"H ·ÃØE{ |1öqð PK‚ΧVæuPKë‹MRorg/junit/AfterClass.class…OMKÃ@}SmWëG+xÅC.ž=•šRÁZ‰Ñ‹§mÆí®$›Bÿš€?JÜx0—€3óà}Àûúþøp#CÀÐrU‘òT& Æož‹‰Qey•«µ"œÄ•õzÅ/ºÔKÃckW^;[.îk4ÊfRý2f϶F7„îZ™*þ‘>:£ÓM0ˆøù!¹›G„³vK¢ŠŒ}P^¶ó‘áUÈL6ïD½y”Ì·„cWd2¯¬ö²éH6‹eΩ'œ·Æ6ÅGB'ìêé`û÷vÑ ÿ4 ¸Æ.úØ«á+ˆ±ƒPKh¨íëPKë‹MRorg/junit/Assert.class­Y x[Å•>£+ë^_Ëv,Çvì@¢<‘e;΃G°CÀ±cbÇ1)yᘲ-Û ¶äHrH ¦¼  4m6)¤´%Ùm¢6Úò†îvû€²ívÛÒ×B¡¶Ð¥{ÎÌhtuu•z÷Û|_FsgÎüçŸ3gΜ¿ôÑWŸ€l¿ ƒðW6ÃGTü :c&PssQ‹¦3·Á tæ1¡ˆéÔdPQˆ£™Iµ"*¼T¬Dg¥&L&€Él’ÁÊè×g°rúl² VI’UTL1Y5«¡ÚT*ΠâL*¦Q1 ?3¨˜IÅ,*fëlŽ µl.gQK€jµT ê¬Î„FRß(úêMÖÀ摦F“Íg ès!ÕQïÙTœc°sé÷<*Sq>MT4l‰Á.0ØRúºŠ‹¨h¡b™ÁZ Öf°åôÕnB!Y¤]l°ÔÒa°Nƒ­4X—ÉV±n*.1Øj²ÜÇ v)‰¬¡b­ÉÖaµõEl»Lg=$»‘Zz v¹É6±+Lv%»ŠZBë£åé7؀ΤpŠ!ƒ ë,ÂÀ³$$—2еë¸[ca¥]‘h¸{|´/_êÁ_W¬?4²>зlt'‡# ÞjÜ<Ž@-‰D8žlf`†xmm|+]›C[C#¡èPãšd<jÞHúôÑp"â r$öÇ¢‘d$eÀ6¢ÂU$°ÛC# b1ŠŒ0¨pÐAÂ^!¼|Ë8Š38ßAÌÒrIßæpÒ¡…Cõ„CÑUiÊFxÛv…²ÙËhÛP•2(så—†‡BñTØ=>‚­g&¤§mDiú„dKż»cjêæx4ÃØ$«9¢æ5 ¡Æâ£¡$‡¨rÕÙIR¬“AA@Ô§8Hµµµq±6$Ch¬€lôÚÛÛyo;ƒ21‰–x<´=M¶Ù°7—­CŸ@ÚˆTî ƒ>)– ¶|[xŒÜ/¡3 xµ‰ë©vb¹±—û¯«U¤?E—õ.¢Ë¸¨ütmím¢­\T~:Š®é]#D×pQùé(ÚÑÛ!D;¸¨ütíìí¢\T~Ö8‰¶õŠUvõâÚõí(ÜÞ+<ÁÕÛÎ…Óßå‘h2†F²üÂÉѤ+• ÄÆ1bu$Ú"ƒƒáx8šL;.„k` L‰…’6)‚ ©A’\HŽ-(›má±x¸?Ä÷Bõ¥ãÑdd4¼>’ˆ ¦–h4– qÏÁègá•Óì¼v±Ú¼"VxbܳlQÎân2Ü é"ÚÛj¬ìZ [Å·A¢¢š%åWÚº±ñtþ_¨S€/IïFÑBÑšo¾ôg‘ÐÚ:‚´̱ªæmΨ[C#tì”åˆÓ‘B•n>ÇÊìCmûXú`›l¸$¸”Æ®‰ ECÉñ8Šr¸Œ#rË$Z¢ë¹Å§äéÌ °ˆÏ/m£ôI;L«Sç„JÇóph´?N$W…’ýÃáx³8~Å7…“æk×by†c÷’ì$Ã,^²¶)WïÒvŸn Q¸`bî”w žx8” ü 3‡\ø °ò¦m]ƒŽ·*×ñ,9Ïàx´Ÿ¶z#G  ¢äHY«Ç;y+:fÚíU#îĸ…~>!ðìÀ"\P®GO¶-2ª—æz-2±ÙpW¸òô öÿ`\ÒäzÊ›*ò”Š a1^éh$Á}Y%g%bQñòx<†^ckÉêkVa‡#¢/MÂè-ê ¯6ÇpuÎF´«'dþ<¶û_/HQßxdd`u<<ÙÆ`®SìDÌ5±ñx¸=Bö+™Gr^¸F¼p-\ç…8$¼°ètÍg=Ö Ÿ€Ñnv= €ÁÔÌ\Zc£cnqöãñ‚G³«½ð-¸Þ 7Á^6ÂF½°ƒ>? »½p \ч‡Ì„?1ð÷…ýézžQ»ÖedpÜË¢,†‡ö<¿—±-¸ÅZø*7ù©'®³„—%Ù8)¹Ý 'à¤Î¶RË5Ôr'_öÂ?•{á>*>CÅç¨8DÅCT|Š/1¨ÏL24v`¾Ž•™tk<‚]21ÛæeÛöcôy-ÕŽ1:à,χòU8¥³ëˆó/»žÝ ³^öq¶‹>>AµÉ–·SñM+×%Â~ëm(Cõ~áÿõ~ž×ú“1?×öóœÚ0CBþ(¿&òN*ÐDOÓB=OÅs°óv\’)id”Aؾñ¤ÿšP¢i v/õÂË4ñ¨x‰¼ìEZä²ÌXÒŸàt©j£o]´”pH¤i‰þþ•&zsZ~?Â¥ÔoíŠÎnö²[Ø/»•<ÄMt½ì“Œæ±„–äA/ü~¡³Û¼ðkø­În÷²=@w:‡ýíew÷~¾‹£/ÒÙ^v»[gŸò²{Ø^/ü þÌ`Fææ§ïþ$&þ$9Í^v/»Á|%6'A Ò—æD ã²ps$ÓqË~þ¡‰Øý^öi¶÷b’ýªŽ‘ÍÁãxb³Yÿîí9o ?©Ã2•tÌa7Ò}yl,ÅdºaB1Lîr eF2–7“ŽÁ®ÁIåiK2]]1ÂÕyÊuÉ .| Ó:’º›³,߯ï4Í6« hn¦GŒ6ñˆa½¼¸ü¢Rš‘o§}Gj·¢ðVº¤Êí)¯#Y”1ŸÆÌ-Ô—Úèš÷’"=í¶Sât z©ít™…“­¡h,ÁÜYäÑ:6‰šAB®w¶'’áQlŠ àñIn_J ‹W-G¿C›”eZ;p Q>\”Œ­oK{UE ÃÑ:…ôxÖ§g¨ú€ã‘Ÿ/ÉqÚINO Nj=#áè_â@mÌ€Í0ôïbpÓÙGî(~-Â_<¡ xØ1¬¸ Š¥‰¿g¢è4ˆaÍ+„` ¶ào!ù`9þ’láÔ@¦À•) ËZ ‚õ¨RCÆ9›BØ × An“g£ ©ó°šhvRç s-¤<¶+Rí(I²%Abå>nÍ©Ša™…U‰bU¢Xmwfå¶c­DV]ެ0E’£=¨¯"ø<‚‚ž“àyŠ~ÑöúS6³­G³m@° h…$H éœÁ{pm˜´=³°º AB(Ž©’yºñ·©®>Æ~œHÝ7 p?Ì­ç?Ó‘šá3Ñ`ÁîSPÔÓP÷u(¬Çÿ'ÁûTÆgf> t,Çpm· ŽT!½™HpÚì|¤Hă¨m&”Á ØNÓjR6n‚ðqN¾ vaÍ…œ1?”7[p< Ç#qÈš7Kœ Q?I錈M²;Å=8h¯LW`º»E-ÍZ”¡é”È¥1‚ø[fßN‡Ð܇Ñqâ¸~1Â⸷J£–H£’gº>;ÝcH÷xÝ[mtMÊ·%Øm’îb_ùªàsPu &£CWO@¥¯ ‹0e•l«§¶j,ÐÚ5Ô^Ÿ'jP/À—íj: S1e]§à<øše’‹Õ$K6Ƃ۰MLòvÉkzCþ–NŸqïPœ‘‚©v|•¾ˆõ—-*J•ŠRœúnÇRT¶{IÅÊŽbélš?gØíø B¿j³ãeÇ=’ﬥi•ŸU;¥ gçÚLsàü*x|ð–ÚZ8Lq.G5wqÎ卿.>¢îÆZWø)©p%ª#ƒ²¹)îL·óÿ ºØ‡³r`à5œ€Ýø ܉ß$o°™³f§ÀoÃeEh0¯×@ܽ×@ܽœº¸{¹…ð:…¿„ÛÒ$¯ó4Ã{&†äiX]YD‡ûáÓV‡}XsÁ~¬»±å®àAÇ}1Ó® 4d­'Á‚‚eì3c»Á.ÈËö€b{ ‡ígÙβ+è@6¶Û’íç&Æv‚]–—íAÅö`Ûpd;Û® ôÛØTlJ¶‡&Æv Á¶äe{X±=œÃöóŽlçØ\‡ vØØVlK¶MŒín»-/Û‡Û‡sØqd;×®à^TpŸíÊíÃ’í&Æö‚ÎËöÅö‘¶_td{–]Á£¨à1ÛGÛG$Û/MŒí)ûZ^¶GÛ£9lud°+x&Ùö¦Ï¤SPÛS{‚ÈúÔÙA%ì5Kl·žG÷Ã?ÊóhÖ\¼v7òÙüWÁXœQò¤ Þ®ë—8³_ecÒ¼¶Oê2¸ŒY¦âNOeÎIhpžÊ8•?äÊq5•ãj*{s¦òO9çJ°Ï•y6].7è®ÛTŽ«©Ï:WLz«“SY-qKNA#¦)óùLØÑ+¡ØU•'Ùº_%[ûx²eå¿CðCò„¯’'ü~( ž…'¼8å‹m§¼+¦«*] óU)¥U˜CŠS¾JòUê”ßi”P:ˆ=4²rÖì9)XH:g¥`Úo‘ƒÎ‹ ÐÕ®V‹ÎJ¥³uŠã¹’Ô.^KF @ZgŸÔé:)“ú왌k=êÛe®‹>ŸÒçã‰ãµ´>ŸÔgÒ¬Ô7Œã(“©™‹~6^m´£sC)8gŠ{ßúrgRûJÚ€®ËÁpmBû^‰ö½ ¦¸ú- [)™æÔÀWdšS#Ó“^QÕrŠÄ·z&ô\®uæ¬Áœ7û~g¥C¨t•nF_ U®¨Ei5æ¸"ª†'䤫U´#OʹØî¤ÛÁãºÖvÓ°§œ;TŠÜ#ÃQ9¦ÈäÓ1EirŽcÜ‚À·‚ϵÛÂÙšrî”ir¹J“wÀ“ø›Í™Öç|;g¼¹ì·£»g²ÿSüëë .fßàðß”ð+°fáñ5e]':.…ë³ÒEÚ£vGî g=ùòåf»ªGq}ËÊ—wž&_Þ‘/_^bÇ}ãÚ“Yqmçiòå§ÕÍ,óúQ÷\Þ×׋×^ÊóúñŒ¼œ> Ïæ¼~Spë{hìïg½~<ÃoŽ…ôدÌ(XámÞ}ŒÕ¥9Šë'àvý¡^ÇÍòs µ"E­HQ{Ιڅvjo!ÞÛÔLúc„DØ-wt³Ï̹Ê^äp•m‘WYß2Ñ™å~bÏ¿šë]\¿÷`ªë÷Ðäzß²ŽÍj:Íê&»XÝd_PdŽS\Wÿ07f:­6›i¸4x47x5ë!X¬”«‡–bõ&ðBž76›ù´R„žôwž0^TŒWKCšÄ˜^—Ûâ‰6 éN‡Bm†…ª©¨šêùÂTT_ÌCµÝN¯iZö5-÷ùâ%õ·UºãBŸÙ•gÍ»d[µ]œo©µù i @×ÂTílX cá°PNMƒF¾ÀÄáee.º2R€ló™Ýy8t˶j[‘ö»¬ÔŸÖµó‘U²jFV@«v¡å¤mSoS¾Ñ& ®A gJ'í·Ó.éŠ&wÂÎÜx«µâ¢¶åYÔ¶E5èor™ 4E×;„ ü>§¿ògcà²w5¹ë©,¨vWðw²yV­"Uc”KÈN$Ö-·Š®Æ¢ÚMµQ­€jÒž«ÉÍD² ]ŒÆ\“´˜­­„ ÖóµUФuCX»”Oz©˜„šôjÒw(ÃÞ& „~ø6ÖÜ06Á¿a­Móø®ÌK/ñ¤îù_Ú…á’L²ÃxÝãÜ•2F¿ wSÅÝ|ð=ø>ÐC}1¼ÂÝíUø¨ïøûŸÛ¿#ÂáGryÇä¾ÇŸ×áסҬ°·^¸Ÿƒ•›MP¦]aqy¨QlÀyðœMœÉy‰tä>ygßåìÏ/Z÷ub‚ï;Î'ùƒRÑRPϾ)Ø`×s#󦬧ßô3G>ó8¡ÿþR,›Oº0â_v̶X‡p7¶àÜ1€×~?•‹•éû™ê{]é‹÷ó¿ÂY¦ì±SxMùl–)©L¹Kú«Îɸ,dtN&Ý÷º2³ ó+™_ÃI?^•¯7fœ—?³k¯dÅê7¸ãRíMøM–ãRß[JÝÛ\Åo… ¼-{ðû꿽 ŽÀç»ëpsoÚ… Mîj÷ã¨øŠ&76­ÃˆQ@  1û¡M:·W’w§àª„„{7¹Óýžt?!X<é•‚>é'h ²[§¿íTë'Ao2ª ä0°¡ÚxÊ6&ì~{4â¹&C*êô4ð¿ ‰œ¥{Ù®72ho€y¡ö&˜ÚoÀ§½ÚÛ0EûLÓÞÁ õ.ÔiïÁ9Úû°Nû¶j„û´á öW8¢}_t3ø¶ÛÍí?†9UbÿÞáíÛƒ‹BÓl¼×½‹kRuز Û<¸a+à=¬épê¿á÷è&ÖßDZ_¡ôÎ|¯'ã5ZO¼Bø€‡¿W¥û ­?SºþÀ³ù×øj3¹ÚDü?ÁŸe˜ê–™Þl:(0B ï‡jë1Ö;>3œ¸·¹ K8[òdð.õáÿPK7ºÂLxÃ2PKë‹MRorg/junit/Assume.class•”[sÛDÇÿk;Q¬(NÓÖ¦i¸´@À—· m!7ps)¡nµkHÊMv…­Œ,et Í O|òÊ+O 0Ó¾ó¡ήd[±å0xFÖîž³¿ýŸ³çèïþ|à&2¦°,c«2>ÂÇ2. $ឌ¬ñÉ:_Þ±‰û|ôÉ8¶ð)·>àe¾öûmKØ‘ðÃè²nêî*C<›«1$Ö¬§ÃdY7µm¯]×ìªZ7håbÙj¨FMµu>nKw„Ín÷=KŽãµµ%y];°µ†êjO¦y¦«·µšîè´³dš–«ººeÒîLy_=T‹†j6‹½=œ  VÕöøQÙ=®ÕéÙc÷m›ªá1“ 1*®­›Í%á.µ5ÇQ›Bÿ€ÄOÙ¶ÜmÏ08çIÈm§¾¯5Ü%Á±Ä˜Ô^ŠðèIm©.C!;è"2ÔRÛ [sÜâCÕm´4[ GÕ†ë©ÆY…]°Ôö]yš"¾™£ƒÎíÄ«U2ÏDî[&Û*Y“½iª®g“ÿÝåêâ †Õ,¹žÃà1¬Däÿÿä`kÈɃÔÿÖ2Õ¹Óg í€×Õ0©Ú²­x†„;£ÀÓ‘V†üùaÉ˳Ú¦ÎS?î·Á‰×ñ†@]‹FŇ¢>$Ôb$Šj;@mRÀÜ75s å/ŒìRÀ£/ûIë˜À† e|o¼‰·D´)ÁdB^ó½ò•Ï‘ uR?ó1Ëç2ÁÛ˜ ˜÷ƒÓùSŒQ¬ôJŠ‘|&ð…T@OÛ‡‚Oã¼+‚§Oysh›.’.äÿÀx ǘ)(œ@9ˆ‡ :éÞ§mFHsyªˆÑÞ£ƒæÏØŠ]Û ²Ý2o „gT=œž™+R¾„¹L hø‘4üDóŸ…†kþÎnÞ2B #®&R“j:¶´æ«yŸÔÜÆ Ëw‚,QzSõ+%ö8”Ô1ÜÅ"©·©Ú|F)¨¨d¾ “ýç´í·P“Ý’Ç;oQìYúPK‘·Š PKë‹MR+org/junit/AssumptionViolatedException.class•S]oA=”¥¤µµÚÚ/-TÛR>J|2$1U Ö÷a™À’e—ìÎjýY}"ñÁà2Þ™ÝRZ(*$wîÞsî¹gïîþúýã'€—(¥‘ĉ 9NUÈ((2¬û³¸Ýžo¹Î—ú;ö‘aõÜu|ÉÙæv –þC²j9–¬1rÿÊË6wzåÏ0e¥áz½rŸMOø²ü‰K³/¼Êi›!qîvÃZÃrÄE0ì¯Å;6U6®Iã9™ ë¨˜}Ëg8Ñzƒ€–ßú~0Iòض\›KÑ}i ]¨+nÊ€ÛJnƃ1 0lÍw¨ißG×Vâ­Á{sûª„Õ]nZ=‡ËÀ#þ«jëõ¬‡Zލ 4ÔŠÞL/´)=ËéUþgÅÆPø>ï‰ÛKˆ„RârD¢ËP¿ÇãlÛß]oÎéRõüâ»iõ=÷›Ú°&3IBsQ†tÓ Ð³ó!o2;…§„2‹˜Î”‹ø” …mO°ÂBí"KQ¹¨QEq’ùÂñ+͸ñpDk<ÖBÍäÄC2ò ´#­ú­e&©tÏ2¯oÈÀs¼ 6½ºûøPK8Cï°H,PKë‹MRorg/junit/Before.class…OMKÃ@}SmW[?êQD=ºxö¤Q°Vbôâiưa»+é¦Ð¿æÁà' öp`fó>`>¿Þ?œaOaGaWaHè?†ºÊùÚ:& .ù5T|Zš…!ì§µvÆÏvn§Ž/¼ÑDüœp|×h´3¾ÐæÐ)Gö :'tÆÕ:úGúœÍ—bPéÓ}v;N‡í–ÌTGQž´ó‰ã™dfË7Qoœd7“+Â0T….ko£þýON+ÿdZr G­‘«§GBGz Mu°þ3»èÉ>¤„Û`l¢A_@Œ-lPKŠªIçwPKë‹MRorg/junit/BeforeClass.class…OMKÃ@}SmWëW=xÅCÏž¬F¬•½xÚ†1lØîJ²)ô¯yðø£Ä‰ë!àÀÌ¿Þ?œaWa[aGa@è?úºÌøÚX& FüêK¾´ºªN =ׄý¤vÁÌøÙTfjùÂ9t0ÞU„ã»FYíòHÿQÂ]ƒÎ ݹ¶µ$ÿ‘>xk²…TòtŸÞŽcÂa»%ÕeÎA”'í|ly&™éâEÔÇéÍ䊰çË<*jgBô§¤T^†L¦gpÔš»l>$:²+h¦ƒÕŸÛEOþ %Üc}l4ðÄØÄÖ7PK†YÄìPKë‹MRorg/junit/ClassRule.class…PÁNÂ@}C**‚¨‰#ñ@ôbãÙ“‘›€˜Z½xZp$K–Ö´[~̓àG©Ó ½8ÉμÉ{óvg¿>¿\ãØEÇÅ¡‹#B-Iß8%8—¡}ljUV'qŸßUn¬ó+Ah<%y:å6LhÞ•eanøj®–Špæ±Õ ~Ñ™ž.M2BwXh<£â™§Ö„²å¸@7ò†¥2¹øöþ‘>&FOW2à†ÏQ0ò §›G"•ÎØŠò|3ï^ˆg´úàâþAàû„úÈîÇ:I:óæy¬­·^•Ð*­Æ“9O-ál£{¹@¨Èqäã©J¨¢&]]:'€+Ô–À ¶ÑÚ´#ô.cMìðF í"üPKö¹bÂPKë‹MR#org/junit/ComparisonFailure$1.class}ŒA Â0Eÿh5Z våF® =C±àB\x‚´†šIZçÂx(1Å¥à|æ>̼×ûñ!a` 1!>ÙÎU²PZ¹½Þ„SÞšB(Ý9¹mÄ]æ;Sië•©²½Ø3ÃŒ°²®æMgTËþ6„doŒt¹ÞKOH{×ÂÔüX6²j Ë?t|g„Ð"ŒBFŸ†Ã õ-|PK?aìØ¤ÞPKë‹MRCorg/junit/ComparisonFailure$ComparisonCompactor$DiffExtractor.class¥VISQþ^™ã..QC¢„(*®¨,EPƒ¸/“äCÅ Î$wo.U£q¾(ŸáÁ›­žÑ„'X§ØŒgˆÐŠJ|Ä‚Ø ~eDÑî*¤HÞScÄ癃M«|>{ïùµÊû#G Ç‹ºñ*ÇÊœ÷z¸¬2V8Lê{øyáãW4_ŸÅÊЪ2‚¼ð+*WÆjÚ(#4/»’Z¼¤6¼¢¦¿^ ßS•ßS•Ÿt廉Q©•W*òl{Ý­2ZHÒN¨ŽîÒ}Kºïèv»º~ùºY4Úœ¨ØJ|q·º¸“ç“såÖÔÊ9Ýý`Ë„*W†­Í–‚&jŸ+ØGNЋÏB|ªáydóluUöÓl ÛêŠðЙsä!š)Ð{éÏÊ0Mÿ‡Ù„]´ÓI>‚þŸPKÀ_~¥ž PKë‹MR5org/junit/ComparisonFailure$ComparisonCompactor.class¥VÛweÿ}›4ÛÆ---”K V-˜¦´i)(·KÛh0$¥X.Â6Ù”­ÉnØÝÐxA¼ þ úÄ9úÀ‹xŽ´9ÇG|ððø¯¨3_6M {°Å‡Ì73ßÜ¿™Ùüþ÷¯¿Á·-؉w¤œ‰˜ap6Š]8Å{8E³*.DÑ‚9¼¯b>ŠV–iÅ%æ\fì cWYïƒ(®á:c:ƒY†Š¼@ç¤],éŽéږIJžíh)Ë2œÉ‚+Ð:eæóÓÏñ¯›§ÓéÔ¹L*#Б^Òo鉂n-&2žcZ‹ÇI~Ò¶\O·¼9½P6š±H*S©dòÚôÌT3nD%•™8?Û “²¶å/mX‹Ý‹i•’‘õŒœ@„ü–õ!'LËôÆb±ÔzÇë9ýsáI;g´¥M˘) gV_(ºÕ s”<Ó>3ìÝ0)ã‘´í,&–Êä-Q¯PR7 eÇè ¨e­f«„ÀþX@(A…j1êE=¹Y—}O½ Ykó0rç#oV9™r^rÔ¢áºú"eª¹7t§.º-¡ × VnM¾f(Rò5WrjO×VÔ+™§8Q=›%§}#ÃÃÓ±MW60.¥2\·|-_Ü¼å ¾’R©ûnp|¨‘8ÌġȚ=š±ËNÖHšÜƒ]ëô†8* û°_C {5¼Îà8F4¼‰#ú±¤âC UXl”ÆþW?±QWƒÇæË8"°ãÙÊœ*›…œA‚·°¬¡Â‚1ø˜Á'øTÅm ŸáކÏñ…†/ñƒ»*¾Hl26öºû³ KYhhhˆ:ô*ý.ãio6JêTã&-êícY5r¼ÿéÔƒ™ …çéHÞvŠ:!§Fy½•»ëÕT|#Ì 4êóFäškõG½6Ï5zm^õRIÎñà†–“ÿ¸ÔýZms{ÐZöìZa£Õµ\åG þ¸Ó;PCo©<£KvÑ´šb©_G²´L&¨¾áXª’¡[^p}³],4‡ÛcÁüîçTG`Ïsk‡^úÆî¢Op»±{é}^&J!þn¼Ò@¿Jôk t:x ïài”gLž-$Ó8Á¢ $¦s[|‘x÷Cˆø‡ÅBùYZ:@° MçIòÀ±WЉ«$n¼ª!$‰±_!1ö¬HŒ}‡ˆ;L&ªžÿ"=¶ºÿ¡'ØI‡ò[™btê÷h¨‘Ðüà1ZæãbÑ3VðÒ íXxà1ZçW±epmÄi§cW˜À ¶>}ÓÑpÃÖÖ’ÛMÅ®£:&‹QäpÆ‘— ¢0G1…ƒº9INfGq˜0Ny-ýe¼!ŸAáÕç§úI‡èLr6+è¬æ×ùÛN„ÆzºÀ~¾èYÁv¾áóZ™Å¼®wqÿŸ?%ÝÍô3‘éi-j›x%òná\y/yåÒ¥ágHúQvPÇä#)¼¥ý(ŸP&œK>4æÇ9@¿œ¬Ä)âpn¼gÏõ†Å¹žœ»/ìsî!r-2ü?äùnG=‹½PeÝZÒ½´ž÷ÑvNã6Î~–s½ÉòkUÎSŽÕ*ç0&³ë¥ìÆ µ7Ó ½åç” “[±‰Ú»©î2"™IiZ« `‚M“ò)LúÊÇHšË‰¬"¬ÝU•¨jKlŠ#;ÓAPþ "¨¬lLùm¼ ,~úoeºOIxݲ¿B´~rtò¿õ4! nMNþPKŸŽËT4 PKë‹MR!org/junit/ComparisonFailure.classRénÓ@þ6qâ$¸4¤¡ PJê&œâRdRJÓ QùUmÓmpåÚÕÚA<H-‘@âx(ĬsUmTÕ’wgfç›ã›ùûï×%¼È ¥4R0Õ±¬c% «Ê¼¦$KÇ#%À`T=OHÛåA †)Û?<âÒ |/’Z¡/råí{³Þ¨l7vj•úûÆVe˜°}/¹6¹Ûqª Ï „t¸Û2p|ïSõù~L ÷1†ô~åÛ‘h…b"×øWn¹Ük[[¡t¼ök}¿Ü ;ÜeH¾q<'|Ëð²xÞñ2–¥&ƒfû{‚a²æx¢Þ9ܲÁw]¡’û-ª“ÚUzߨ…_"¢PóeÛ:èPzkÄÉ:wÜŽªÆC¼M€”v“äýº3mn òÅ¥q]¦ÉgÐç’G¤d¶üŽl‰uGÕ3}.ûš f`O LcÆÀ,f¬ ê]3Uà©ûX0ð Ïn^€avÔA™VE†4ÚŠ”j; e.1\?=»ÍÝê2šK±X½ìõV¯l†Å1‹0†^ÌÓò§iß4ÜÀULÒ¦gI‹áé9L õ<ýDb$ÏF·FosäEŒ¶GvÜ3WN3WOÿ!nÑ™‹Þ EdðrQ ‹ÙÃá6îD›ŸÅ]ŠÏ"iž¤X$Ý#)NVšC?£M‘”×ÜohŸ³yó˜2#ÞEÂì"ùú÷aêdäXŠÒ=P?£‚-ºÕ[B…9 ~u œ‚Ç‚cgÁöpŒ(Pg‘슜‘’¢NSDG ÈüPKrØ>ƒ]«PKë‹MRorg/junit/FixMethodOrder.classQ]KBAœ5í–}i}ØK—ž{T4E¯Aô´êÉVÖÝX÷Jþµúý¨è\‚.PËžaæÌì9ûñùöàûv”ì äæRÇ$pQ¹lZ7'±Q>t±1äfa‹ü³õ¬óŒnŠUc¬—^YS£'k/pö¾ VoTûÍH ß³±RCi-5Ôë·´íFä®&r.»±ñjJ÷j¦šÒÈ™Ài3Ñ„Zšq(ˆ°KžLRqVùIÇj5\$êöï¢ÛV]àxyK$ݘ<+Ï—óuMSöŒ/Ä¢lôÐa¯ƒt¿§(¤.íÁ„†¼¼“¥ÆéÈe Ÿþ9‘åä­2ʬ1¹Î ƒ<6ø>âj“Y¶±“”„Š_PK£Fõ&PKë‹MRorg/junit/Ignore.class…PMKÃ@}Û¦¶~´ZÄâ¡èÅàٓЈkKñ´ cذÝH²)ô¯yðø£Ä ‚ñð°»oö} 3Ÿ_ï®päâÀÅ¡‹@k-uAƒó‹ûD®¥§¥‰½…Í”‰¯ú7ƤVZ•š1½ÊB[ti‘Et«4[»“ؤ]–vã 0V­èIåj©©òçÃ?-ä/ádÉ”ˆŽþ‘ÌS­¢ Ýàñ!œL}“zK(³˜,+Ïêy_ÓŠ3Ãͱ¨=õûÙXÀ ŸçÚK³ØK £¬÷3U1³eB¯â´6¹šy$xY >M^¼p8-®Ú\5s¸Lm1l`~‡ŒºL;„ìb¯„/höÑ+¯þ7PK³º¥ÂPKë‹MRorg/junit/Rule.class…QMOÂ@}Û¿9‰¢Ïžˆ-± ˆ©…‹³àHJ–­)[þš€?Jz ‰›ÌÎË›73;³Ÿ_ï®ÑtpäàØÁ‰@Õó»a/z„ž ˆ€¹ÛD/ŒÔf$UFö7b’¾P*`_\²¤ÑÑ:1ÒĉöèUfÊT“,P7V$P3EW3¹”Í0Ó&žÓ(^ÄcEëÔ…@«—k\%õÔ•7$C:G7Üy™?C ýô!QñdÅ N8¼‚¾/pº9%’é” +Ï7Ç}Es®­Þ(ïß üž'PêûÑÝ€A-I§î,Ó±qó)êë*ƒñŒ&¼Œ³…×£·yÕ°Øl¶& (²/ñ÷Xp [(3SaƘ²°ýÜA•}‹Qû„:ØËá,Â>òëðPKŠ–-8ìPKë‹MRorg/junit/Test$None.classmP»NÃ@œuâX6΃„ðê(€ Q‚hŒ‚¬4„t ]Â)¹ÈÜIw6|ÀG!Ö WììÌÍÎ=¾¾?>œa/B[¶ìzNZ%ò©´N}?º&Ð-¡í ¡‹©ÈKéc½ˆÐºTZW„ÆÑñ”ÐLÍ“$t3¥å¸|žI;³œ•~fæ+8œù¯Ø,–Ê1Œf´–6Í…s’Õafì"Y•ŸL¤++×!º3¥ËU%„ÕÎéJ¼ˆ!¢»„Á?s¬V¦$z‘L–Ö¼®oÐùëÅ<þ ~öÑ„ÏØbæ!àΫN`Ü`圑ý“wÐ[m‰¹FŒÀ>¢Í]¼6¡ƒÍÚÓ¯ë½Ú[EÑEøPK#w™×ŒPKë‹MRorg/junit/Test.class…QmKA~6µS{ÏÞì͈Eèè³D%¦aW_ú´Ùd'çžÜíYþµ>ôúQѬD -,;3Ï3Ïì̼¼¾8@Ά…M [¶âu_‘Àô…Rœx2 )HÒKZš2…b­#ûÒö¤jÛCFY`áX)_Kíúê”eäiåš´íN¤\m;ê=#ÍÜÔµÛVRG×)ýU;,ýˆ8Oÿ,ï=*q¦¥Ý.ùkÇ Åj_G }íGA‹Î\5S¦Ø¾ÑÈ6#e’nÝÐe•Ñ/¹©uä7`7I“2Lô¥±dþê•ï¹­ùaó¦î\\V¶Æ§82h“fæîx¼âQ—5AÏŒjò²âœ7NfR`~”ݸïðnrcG-óîÆ,$/x~|c<ɉ8·€$û)öb-¤1e˜f`³LUÌ1a-"Ãï[K /V°Š5cÞA²XÇ$Ò‰óM õ PKsÕÉñp|PKë‹MR.org/junit/TestCouldNotBeSkippedException.class•RËNbA= ßøšau'nL¼—£¢&Nˆ aØ7—Z/ݤêo¹2qáøQÆâ2‰¬ŒÓ‹îªS§úTU÷ÛûË+€=TKX/#"6‹ø!°ìÈ*™vÈ:eôßË3ñG`¡a´óRûŽL0YB`öPiåökMcûñm`7VÚ“Õ2Oœ Ñç«:ʤÒSïü1¡ 8øÝÈ7L–šJÓUvɶe7e¤Ò4 —!¹öÿy?PN >¥Ô&ç&¤½+ãO©u§F£i B"ƒãÜÝÿ-O Ü2Á&t¡ÆÚ[_+íÜÊ{)Õ%cZ¤º¹ 3êм‰Œn¤Jƒ%72~ Ô¾Û@u,§R÷ãë ½ÒT°^k~†[Þ*Ý?˜BÚkÆ£äÙãføáùQE³|ÙË¡Ä÷Ž9Þç9f^ŽÏR½"¶Ÿ‘{ÊX ¼—3|…ó*XdkcÂÖ³ïQâX%»m5ËYûPKí(uwPKW@uWorg/junit/experimental/PKPKë‹MR/org/junit/experimental/ParallelComputer$1.classTkSÓ@=ÛVBÛˆø_¼ZªD|+¾°+0¶âŒß–t¥‹é¦³IýâÏñ³Ž/üàðG©wÛàƒ©Jf’ìÞ=÷Ü““»ûõÛç/&QΠcäOc7Ƴ(à´yœÙõê{ûJcŽ µ0™Æ9œÏ ƒ .Z¸dá2C÷ÓŠÐÏ¥+FËkü9w¢PzŽë+7ÒZ¨Ð)m7 }㦺®K%Û É\~™!Uôk”Þ[–J,D¡«|Å£HÙw¹·Ìµ4ó8˜ ë2`ƒ=§”ÐE H¡ìëUg-"jGl4…– *Ï=g‰kîyÂ+úf =•ÿëÊ– ëMjŸ½J¬¹ÑW­kÁkK¾ï1ärùvõðNpÔüA´ÒdÕùÎm×¹ÜlFºÕjA= kþºb숬’‘”)]˜^X¬”Š‹ 3†ã‰·àDÝÇ×¹ «B7¤â¦5†róÿIË?ù£*/Ú+´³©Ï¨±ÛÉÒw–´Ta%$cT©·Ùžr÷YUsãÊÁ\Gh~géhê¡ÝÞKw¿éu:»’tÓ È®!A#Àÿ6þ ‰÷H¾¡yû虡7p ) a¿Aµ±8€Ã0§Èyf™hñ¼C²°‰T·óŒ"‹±Ïþ66æ1£A#&rú§²ˆªÔˆaÜÄ.3@×[to"Âã×È– o‘ýûMKØ!’“‰KF= Hã4ÅZ9CE&0L¦lI„…8ÙʉÅ$ésì!B‚$ŒìC­O`d¦¹ºPK*s]PKë‹MR-org/junit/experimental/ParallelComputer.classUÛNQ]‡: Pî"wDiJEðÂEä"&$„JjÀ§¡´C¦f:£èŸð¾b"ÖHbôÕ2îs:`µ¥ =—={­½öÞçœþüõõ€l(hÁ\òá‘ŒÇ ÍOdÌËXP cNA‹Üm‰yÊWË2ž1€AÝÌç gÝÒ‹E£È §ÎWlŸv9ÃÍÚiÚ—̼é.34Fö÷£IiÝN m[fÞØör†³«Xd騲Sº•Ô“ï}£äfMb‰nÙN&~èUÜ8*Ž™3ò®nÅ_êŽnY†µnç žk8‹ ƒ‘JoÇã2ãß› >Æ|Oæ"ÕÎ;bZ¬A㡴ʆ¾:NMÃMx¦Kav«Ãã9ª„廯y¦•&Ôë­Cý·ô|&.Š[W†|P†1L\“Ÿê\‚ºS,ëìù» ï çè®B-iËT6ŽRFÁ5í|QÆ C(afòºë9„yuã¤9w½¼CTÙ¿‰ëFù¯Ê†\£è 7†öëª%YÆ*Cò¦z®JZIØž“2^˜¢ÿžüiΦ¢k*ÂhWÑv:×¼7ØÅ0T­œ< r^ìè5ùÆgT¬ã¹ŠaŒ¨èÇ€ŠILÑu¹ôf2L^V¶M2™:ÝWŸ³ DZɻóOõv³Žý¶|LþƨEºx©¬‘ö,N h€I4vÒØ…AZÉÚK–‘2 ·ÐˆÃÄŠj ï0nûaÆ  œAÚ“%4ž€¿¿=¾ Kˆp5ýR ÿA(¼#¾ÿ&©áÖ^í‚Çh×¾#xy¯„¦Ïi'é´ Ù£ô¿0FÀY‘ŠZ†å2,’ã´Í’ œ*AÙÖ>¡áJì š?@ŠqÚ€ Uˆ˜'ÚA©•aÕé¥c~˜0î·Ló8 àn…„0îÑ· ZKd‰ *„s6:x5E©\T Ž¨ µz¥¨¦}QƒU¢bˆWˆºï‹š¡ß±š¥–óhô’ Þ¦ßPK[§…žPKW@uW"org/junit/experimental/categories/PKPKë‹MRAorg/junit/experimental/categories/Categories$CategoryFilter.class½Wyx\UÿÝÌ$3™¼t™¶)]HÓ•t&aÚÒZ$¥Ú¦ªC)M(´ñuòšL™Ì ³ÔQDhYµ,QŠ@ÒRAT¤Š ¸‚²¸üãç'Ÿª¿sçÍ›—™I“Ò~þ1÷{ï¹çüιçžsæùÿ<ñ€¥ø«_@áF¾"߯Êp“ _ à4Ü\Oêë2ÜÀ ¸U¨½2ì–Ûdív¡îðá~ÜÀ$ÜÕ€»q÷Êä>?¾)ßoÉp‡pî ÷ðlÀC”áÛ>|Gö–ဠÈð]‘ô èxÔ‡ÇXˆ›eùñ†0,ÔA‘uH†'|8,ßï5  OúðTÜ,ç¿/ÃÓ>ü@ÁOÆù«Gabt—¹ÛŒäsñD¤ËÊu(ÔwÅ{“f.Ÿ±ŽÜ]U˜&Ìdo¤3af³«B«;VóŒßÚSØP”½&9  ¶q¥¸©W|ö¾Â„N3gõ¦2gÅ9+£`lH&­Œle6·nÛ^®°cq4•éìÊ'㹈µ'meâýV2g&"±‚°¸•t:ä‚‘*ˆÔۙݣñ¤µ1ß¿ÃÊt›;\ FS13±ÅÌÄen/úûÍ\¬O㔹˜BÓH 颔iÜâ7… ª(;Çkã¦Öî6¿ÍGGL®búÔêvU9æßzââ»R所ê³CŸÁ+ öK[·•=½òùñ*ƒwƒ¼¸l<•dä⮉ñ~‹ÃrM®+G9J ×ñZT·*Σ«™—*#¼2$¶ðµçúâ´âÌãÔ;©˜Ó:W0©˜ÔJKuV:c‰H¦ÁpÕЯcÄ9cs>™#¨-ñlœ)cM2™Ê™¹Â4¹•4Õü±#ˆ¢'ˆ‚É^ÅôŸuí®ßãìZyÞ‰½}¢Y\-§WKó䌒GIš<á'êX&¾ƒïmjëbWW.OöJË¥ 4ËR9-næ Tp¯ÍÇ=úúë³}©|¢‡w¤0·ÕK™¼,ÞŠ#¨c1 ž×2c} ÍGçT¨‰/pR§ö݆›™K‰ÎÙ}f¶3•ámçŠVŠ Ö¯XÑuºJÒL}“V–w¹ÉÌ0¼Ý›s[Ë"£gesZ ]Ûwݬ¶vÙXò«µÓmãÏr<»â˜Šzc,•f,öl¶v²‡Rh)­Ê{ñÅŠ=Š)DÇD㽬@W*Ÿ‰YLÖÒו\zªðûðC…ŽãÈþ.ßòÄ2åVá6ÉpvÈð#ïÇ:dx?6°+ œ.ÃçðyÏâˆ.S˜>J®aR*aj¡?ñá9Ïã…Úíf"q‰Ÿâg ž–ö!_4GÚÀÏñ ~iàWxɇ— ü/ø ~ËDr´K6’Óëð ÃWÊð;üžo äýsÌloÀÀ5ø´0ð ^5ðI|ÊÀñ'¯áu…ÐøƒÏÀø³7ñVÑZ [òˬGÙ+xÛÀ;ø‹Â‚ úÍdjpê•R%ˆ”NQLín3‘/4DÕ*ÈŒQÜ Ã/cõ§v[eñë8s¡p/‚’ë8{g5XÉùées¦FÒAÉŽüNÅ$rmF)À8 µufØ«†Qs€sÖp¬£à ¬åØTàC§–"Ô:¬çþYšVöÊÙŽæsPO=l=P«y½Þ'áÙê u„·\ÑUZQAX#>„ó{Öˆ•(¿ñçj36Úâ×ò+Œºré7i顺÷të(ꮜ·…k­»èÎnF°²÷Vr¯€âB®]„­”)(®çЇß9¡aøBÞÇá—¡>>ˆÀãhµé¯ñˆl&¡·ðø­4g/&`Þ†fÜ®Á¶Äa¶k°sp1­4u ©DÙ‹:{Q®}DŸ)½µaêÇÊ~ÅvÝ=üÖŠ. z–€>Y@l£€žáÕDê;)å.¢¾›¨ï!†{©÷>zyAžƒº1:Viª‡Ž­Ñ”Å5¦vrÍë²D¸VÚÔNR^Û†^þ؈{B÷„*¸÷SÞýÄýq?H÷à˜¸»Œå¸·pm$înh½w¶ƒ;N»pGÁáWdÖ††0ñ€f(Å裮PkQÒ/Ú‡¯¦jQ°æ0&m NF0ôaŠbôøƒS÷Ó\´(¿†Þ؇Éá`Ó¦Ë w. ᤒâ ~Ï`{ÓSq„¹ì9WYcƒ˜G/õ#©±³]´áÜH9½<Ä|4c/j½ƒ>s³Îm;„Ùj&‰“žFóÆPûæh¦ýÿ}Ó3è (Üˋ𳃠°{]ˆ—ÐŽ—±ŒMhñÉ.äÎåÈÐü ½›EN£[îÜÕr¢ËU´Â6ºwÉ-7•æûk@ÚKŽÇ].ZDº~/&‡Údqs÷bŠg°8›GÔžA—«ig~‘&, <0X¤æ :wc x•Wù©×qûÝx a¼Í¸~‡ñoŒ¡¿3VþÁ„ôO& ñ¿Ë¨ÿ·ëý§+Ó¶•µ ˆÝú%ÓcaE^M4ñöyØ~#a?_ac»})³ÛíKñœá ËCY`_Ëžx ÄYŠÝ·ªÁbUë<“YhÀ>††\‡ ;@ÞÒÔP1§p2ªÃ&¬!¹|áÁ|œ¿+߃ûä–h„·ÜˆF1FL¤Áÿ›ùOeq¹¾ææÃX¸u‹¢aÀS¢õB!éeÀ›àWÓ1YDKg¸žåà“™N%+\å½°²Ò)ïWÿ¥ÙOâbýD(É' O1eð}¸4„CŒZÕìÒ´5Ö²¾_­‹P)ôdEJO@þÚï´ ^:¿‡½Äд ¡ýi´‰â€¬íG}øNU(KGj¼j>êÕ"LU§¸P,²QL%ßgðYÇÊk©›ÿ¯mÝWÙº›#Bg/‰†žEC8tKY±Ãê–É·dq“Ä— Ó×m0T;uFbK\z›ÙŬÐþnb÷Sôwio¥³Wòüuü}IS×cµö«$Ïp&êÿPKŸ]ç±S qPKë‹MRBorg/junit/experimental/categories/Categories$ExcludeCategory.class•PMOÂ@ဢÈI†€16ž%&5!ñ+ à´Ô±.Y¶¦Ýøküþ(ã”j"‰ñ0»;óÞì{3Ÿoïp5 ¶,ر Šž B¥Ñ^ÅTØJh×î(§å¶ÖžFzúœžE¨ B¶/]-Lès[uE[ëðŒ;3aœ—¶ž#$ÍA’•!×÷Bß¡K©¸¹Ø†\Ï—G Ôz¡6rB2#E±x€°ÿCG,»G†tôbÍú”;OIgÎD«÷psß½¾°`¡åù®=µ46Í^Ég}m„²¥;;6zp1sTøDßž®ø«’ïjMþbÄÆK±©Ûј^áÞJŸñ¸Gÿ1UG@HpD[N¤Ræ|³ä+*C†,䘶°Îüü*À߆Š)‚”a›Ka*õìPK Ón;L?PKë‹MRBorg/junit/experimental/categories/Categories$IncludeCategory.class•PËNA¬áᢀ¢ÈI†€1n„œ2%ÌJx:–;„ pÑŒ_ÎJx¦aþÆÙFÌa¾Ïâ9¾JÝ\_™³£¯âc§{¼ƒ8ãfÁʪ4Œù$,—{;G!ãAŒÊÇ„Œ'0"#†¸Œû9•æË’±‹/oã¯2þ†wvÿ–©ÆX駉¥)ºö¬Ð?`Y¦Åq¼Kùü=—PÆ{x_ÆøPÆGøxµÖª.ƒ„Od|Šs>“ñ9>–ñ¾¤|V•RÆßqHÂ?dœÇ?"åã •ñ˜©t*’ÒJ¬‹W¸+[‚ÃW2¾Æ¿è¾—û†^°3êôaÅž¡®ðŒo±Àe¿cضšÀÈjm!Æ šCÝ1°ª U?óÍÙ*ƓѓU×®ú;¶ºµÜ#Ýÿ©¢«XôomQ…¿*§èÄŒe>ï—8j¢1:\ñ ì^ñáœò‹‘,kñwø¬¢T>ÆcõfJ ¯8Ùú¹Àà‰òéÕ´,+ü‡HqNÒÕŸŸáZ.(j§Œ:G&¼†ØÚ¢•xš:­fùð[£UŒõƒbV·—혺NrîóPó³Î¼€Õ­£í•w,ÍȉLm¢tÕáYìŽÖb¨µ´¦Ì¶,ež|û{T³ÉóæeƒµŽ .F66V¾"å0î¦ÂÝàÿÁø˜ƒ úú/|hßOl» ob¾ -þ~NJ{|´öøãí¾ÞvÿFï"‚—Z@Sæ*äÉÞËhúé2ç'SÛɰÛÈT!€Ý?»l/ZÙ>¬gýèdƒH°ýØÎ†d)ìe÷¡—äÇ Ý.²$ ­è@Q^¬G à°“~¨ï"ÊOü vã’#ÈØƒ{EHû°—þ3Aõc $º‹¤\»C%»CdוO‘ü~¢½´Ë¸¨ rþDñÔäho ½3¾Í—ÐrÍ£‰›Ø‚‰+Xðˆ†‹$à†âÂl„B~@„µÎUÐxÖÃxȇ& °ŠÎ’zoŠÎgŠÎ#•Îo@&Ç­ ç yàõ\¨ò~˜¼§+¼GJÞ×Öx,ó~˜,¤ë†ÞÕ¡¯­úQržY1ô#·}WÝÐKÎÝÐÛV}Œ¼¯ú‘[„N?ŠÞ¿¦÷H,~í G·]Á:ˆõ ×±!“轄çàó^Xøõç a®ÈN ƒ=ŠMl[ÙãPœøää(òÐmëB 1£–† -¼Ô¸®|J4:—*IñÆu‘ ýt)ÿÉúhÏÄo ¿ö¤Et\Œ&® yRw~…ÎDçÎ~ïFïM4]Å“á;/£ó§W=lá×_â×¼ç!Ç=;Y@óUÜ5_D×eÜ].r„Ï 6… Ë¢‰©ˆ°Sèf9ô½‹‘î&´àŠÅK{Žãá Óüy“„´þZÎÅãÊà$BÄÌ‹æj¦DúùÙc¥=N‘>QêÎÉ"/cKü&‚ä$B)Cõócf HnÅ[ðÑ ƒË8¸&€'É’E>2ë¹(Jf1^aÖ‡§¸YRV¨µÊ ·R>!”§¨û\åþbïûã4xÙ…ºÚnûIÛm?²¢u0-äUl¡½ƒrÑCC3MÌ0í[·iŠnBtKðÿPKâìYANLPKë‹MR0org/junit/experimental/categories/Category.class‘ÍN1ǧ¸¸‚¢¨$F/D9Ðxð¤11DüÈ¢ëÁSY&K7¥5Ý.‘WóàøPÆY £‡Ig:¿ùwfúñùö'PóaÓ‡-¶GBeÈ vtüÜIÄHp%tÌ[J¤éƒRWÆZ¸Ì²³9o\UîšÌFx-a•–p;næ,ƒÝ ÓN1”©ì)¼ÔÚ8á¤Ñ)ƒƒ9=ñ“à:Ô¹GÚõ?{£d4&ÐoÚ7W¿ª¶õ­tØ'ø°clÌ“LKÇi²/œ±<œxø$Ý€ Ó9__¨xHo ţɄS>6œŠP]ãÿe ª³^ïz FŽÁþÂög‹«3`P [¢ïdŠ-STŸlåÛ+A™Î=¢V)ë!¬AÖéj##¨~PKQ>Ö-PKë‹MR=org/junit/experimental/categories/CategoryFilterFactory.classUßSUþ.ÙdÃvI%¨-¶´$![ZB©‹¢!­¥RiŸ–°—Y6™›SÞýK|ñµ¾€Ú™úîßÐÿíww$1ãììÞsÏ=ç»ßùqïþù÷ï¯ÜÂsÃX4pw $±¤>EË:îˆáS«âXŒã3%|®ÌX×ð%Öu|¥ãkeزã9þŠ@$“ÝÐJõ][ Yv<»ÒÚß±åkÇ¥f¤\¯Zî–%5o+5ÿ{§)p·\—µÂ^‹@ûEÖξíù–[¨Z¾]«KÇnJ¡x°æ¸¾-׬ªÏIQÀ¬J›K¡Z ’éÀ’-ϳe¡Ëå‘%­ýf1{ÞlßòœF˵|§îµ}ˆ/HóZyÏúÁ*¸–W+”\«Ù¬ÔýµzËÛ}ð¢j7”= cYàf ŒwzÝÉ„›´|Ç-”¦ß?ÅÁM§æY~KÚAüÝ0Ëg¹/çVŠ+ýƒ'VÓ.B`:Ó¹éKÇ«î y¡vñ‚]Þ9K„6ñcÕç@Ù–”Ó£Ï{.º¶ÇE±.0àP0ª$“]»+ÍðyŠãÝ=yÐ8î˱^IS•í+·K}¤è_ÍzKVUG“ÉdϾŸW®&F0ªcÃDM\Ç´‰4¦¦þ«[Ùm·èt8£c)8]®é ÖÌu…ÕN¹â÷ˆÅ; {UJë@ÅΪåu|câ16M<Á·:¶ÔøTÇw&¶ñL`ñ^ ,ôiøwöì*w»rq¸ìé~ެ€^³ýUY£4–ÉöêɉΟÞêf>k.m6\‡ôfzµKÏž“@ûQ“§8𘲓#°ÐcŸs½PÝ­ËËÞÚÝHuâ…¹.fŸiSü™ ƒ'ž¿/Û”³1JŽ‚c4wñ …¤øÊÆù5C\ÆG¶&i¥œmDø—s¹ÙC !ríåÆ+ĶóGÐÿM Ñ9„M„æÔLPNðSÔ%0ˆwñ­Ôj¸‘’ÞÇb\ Xó>×4uœ(}½Æ—gŒþŠÌ_œÅ9Þ…øö7fGŒC\ªÌ½^Ð" ÑT4¥ý„ës©èí¥X:–;„ù+†–ô|Zÿ ‰<ý1*~þçMþ%!"ÙIf¸AÐn“Ç<ŸEÊ÷ø·VÄsežÄoà&tZŒq-CŸ$µYäˆ2Êï,=5ÚÏ`ŽRT< ð>-3 ‡¿uâCp‹ÚqŽ!îmâ†kQwœ†h;üù~H D •"–xƒoPKn¥»š¶VPKë‹MR9org/junit/experimental/categories/CategoryValidator.classV[WWþ&·I†"4Z5XÅЩZi¤FJ”‚5ˆÖÚIrƒ“:3A°{±÷Úw_ûâkmשKWŸûÜßS»gr¬.‹3çìÙ—ogïùûß?Ÿ8†_ìÃ9çxpNÀÞ a/ÞmÃ4fÚÆ¬½\àñ^."# „9. ˜Çå Þ瑵…W\Å<® è‡m¸ŽxÈP!lñT–aÅLš¦ý«Có#eè%;dk/ Hõ„®ª„£BT¸¬§Ê‚3ŠìV iÙÒÝÛŒðvb<£”–U–¦»hδÞãáfÍI*°’LqNÅ[-®¶Òµ­ßÈ6¶öHèØ ”®ƒ†W“zÍÆ, B²Y±<67Q7] n8nv ‹¹µíφDÓ™¾zöÒGÀa·=èÙG'ÀG{a´"‰DOŽžþ p•~ZŽpÓ*VGÂq8€AÒ"c®^$[zOvÞ™ÁuøÒGF|Qß“a¿w8 Dü¿b*ꋎð¿Ã¿‰‡‘`4¸ žÃ=Äí]Ã_„¢ü&¢"´Ž¶{†¢¡ ˆ÷Ÿþs'Àݺ>ôí¿Q4¯ƒð‚´¡õ(Ú)~¼†¥} ÇéÃLðƒ~¦Ð‹!Ò ‘ŽDúYõãŽGر9AÄDp¯ã$åº 3¤w’x ìª™Û»a¼A ‘Ûdï¡È×0B¶^ŒÒû^’TbQ¬ŠÖi’U¨§šïîp—¢øèÙ×Õá{ŒÎ¬wháÌCìH>BWöȺ7ÑãÁåõ”;è ·ƒÜÇȱÞ@ÅIbŸŒsvvÊÒ#‰³.ˆ­Óu­±:Ä ýv½6&ô‰äGˆdùÇe½ÝèÍd}ÝØ™Éú»±+“ t#J¨wo`ÏC¼òüœiÔÐ>Z'ç©ÿPK ½Fb‘ PKë‹MREorg/junit/experimental/categories/ExcludeCategories$ExcludesAny.class¥T[OQþN[ºívË¥ EAÜ–ÂZñ^‚F£IãK ß¶íI9dÙmöbè¿ÒšHâðGçlWh—o}˜3ç;3óM¿ÙÌ÷_¿¨¢¦`UÃ=9¬©Ðp_®b¥ Êò\—`Ez U†ô¶°…¿Ã0«7ŽÌO¦øÂ2Âók¥}†TÝép†©†°ù»à¸ÅÝ÷fË"¤ÐpÚ¦µoºBÞ#0å !÷ê¤mîíÚ}í­ms·n™žÇéq·á¸]ã( VƒŸô¸+Ž¹í›–Ñ6}Þu\Á=#ʯŸ#«#k êE,Ãt¼o†ùñæú½_ ®Åb·‡wË´»FØávy§¶C²MѵM?p)©WæŠ,©Wa4¶É‡"NÅ0Ñ8reºþG’$Cê´]Ñ¢†çôÒH\Ów…Ý•ª5Àmó×B*1IãM™Â0sAøÆô‰TC[Ò,Jóˆ¡/¾«Ã]ùü˜´ãѰ–4<ÁS KXÖð Ë ž3¼üÏñ+xÁPû}‘‘ìÈíÓ?÷¹Ë0Fe®;–ÅÛ¾pìP×ýcl|ñ»ŒJêÒ¦Í^Û† ýò.Ï$’F“ñ!İõú0TþFHŽü%i_ä1‰¦èö)ò€|ù ì`}€ÄÉ/aØ4Y5|Ô)µ„òæ‡Á(àZX,OH‘ ^'_£sˆ,wƒün†d‹Y“ÖÌÏ–S,E\©8QlŒeω²„Ü#’Èís¢;äÑGGVí"cŠg˜8 ]PN‘)¥ãêç0EҦðjH9,[Œ(¸ÚÌÑY /‡MÌBîÓxˆìOPK-G³r…PKë‹MR9org/junit/experimental/categories/ExcludeCategories.class“[kAÇÿ“Ë®I£©F[k½4Æ$‚«QLˆ”`AQ¨|œn†8e³fg%ùVõ© àðC‰gvcL¬¡û°gÎÌ9¿s›ùùëÛÏÑÈÃÂ=÷óHáQÚØµQaX{;v½¨/Â}ÂPxçûBu<†"d°ZÒ—ºÍ®Õ2 /Ö»Ò½hx,ÔG~ìÑN©¸Ü;âJ}º™ÑŸ%1^t5pN"9b<J…¯¹ç¸\‹A ¤iÙN“Rq• ý@zZ(†Wµî ÿÂHKÏéÊP7ës`™¼!÷å(ò¸–ï$žDÊÿÄP\Ä0”Ïg?ý© º`ÛJtû'îQ«Ñn¶‰;”ŸëH‘So1Ñx­œ>—,“Ãîê@M>pŇáêÀÔø™©m%(u†#F†Ú¨’~DÊ5s¡bËK“{jŠ- ‡<ÛKL¾2w ¦V@·ö.Ábxù¯©ùä\õ6êtå.îP%ÑzîÄ7µ?kÃægË7™ÞÖÎÅÁègéÙš/ fÚKÿ5ÒöH2’ÙÆØWZ¤P ¿yèÀ2¨â*­ ‰®ad†zz, à=mî;RŸžœ!}Ç0+vÚåÄh 0«6èüÆ nvnÒª'q«¸o7 òš¤ñ·!s:K3‰°5ÁšE°°I' wâ„¶éün칃+$K13 ›ŠÝÆ#j¶´prÏu³rÈ3¼»ÂÉ—gî£ÆT-p—aï ,†×ÿš¸/uo¢FWnù„ʉÖõÃv|S{ÓA1l.±m,Þdz[;Ë“Ñ#ÎÒ³Õ_L—þk¤í‘d$³õ °¯´HÁ¢¿~èÀ2¨à:­¬Ä 7°N2C3½IpD@í›ûŽÔ§gHŸÇ94Ĉƒvc@)qšôªˆ ²ßšÂõÎmZ•â"îöõÁM’¼%©ã:eÈœOËL2lÍd0¦ l’…á^\0Ã6ÙïÇ‘;¸F²3³0©Ùm<ÁSä~PKnMfä&ñPKW@uWorg/junit/experimental/max/PKPKë‹MR:org/junit/experimental/max/CouldNotReadCoreException.classQ=OA}ƒpÄAÐX˜Øù‘x116šSÍ…B‘~ ,9vÉÞžò·¬L,üþ(ãÜa´ÑÆ-fvÞμ÷2ûþñúàÛ>V°UF³Œ¡–H«DÜ—6QF?Ü\è–P NœÐ®/âT–°ìŠ¡IÂF¤´ì¦³´½ìP̵+rýÝD%„óÈØq0M™=‹9»šIíDÌÄ"MºÆÝI1 •W‹¡œ;6Üf»ÌÑüÕ Á¿7©Êk• íýÉr’MW° Ÿpö„Æoû(ð®yoØE%ÎW”ùF™Ç5F:Œ8{GÇ/ ç¼§ÂÑÏÑ*O®sZË.®6òÿðPÃfÎUÏgŸPK¬ ã/åPKë‹MR,org/junit/experimental/max/MaxCore$1$1.classRMOÛ@}›˜„·$$|·%@„òѲ䜈K•ÓCSq_’%,rl´¶«ôgq@•zàð£ªÎ:µ©lÉ;ogfß¼Ù§ß¿tP/ ‹wEXxŸÇ‡<örá ê3>³¾¯e½Ó%šž¢œS†ÏtGœ[ñ]pWxWKQ¨\î¨ ì6/¬¾?– «Žòä—hz%õ7qå’gÍñG½Z™}â´L+ éĪ3³†òRL ÃPZ”İñoÝwϵ«‹$½Ö)å·(ziÓ‘¹jþ56]“]ú‘ÉseíDê±a ;8óF®(o2á?¶±K(Ø(âž*]× ›‹>ŒTH%ëi( ÎU3ì6š¯¶D„ÏŒ ¥EóÉJ%ÓAô±bæ‘Ðu·[í°ÖÇO?‘¹§}ohÍÅÙoi5L”‡U”€•±†LŒ*¨RtðFâ)¿  6)–Åí2ØÆY‹˜w±LÈ0ä0ÿ²sóPKzIi\¤RPKë‹MR*org/junit/experimental/max/MaxCore$1.class•S[OAþ¦-](+­oX±ÝkõÁ/ÌÂÞÊX†lgqv‰¿  ‰$Æg”ñÌ´^B1ÖMvÎÌ™ïœóË|ûþù €¡„9»Ü+a5÷=Ì—PÀuFxhzX`ƒ¿ª”ÐË1OS‘2Œò¸¦3«£S%Úç‡<ÌŒŒÃH¦æCÑìÉ´ö¡%ºîgJšP-»B‡]~®ñ£åD ‹. ñ‚áI}ƒó[ …ådW0”#©ÄzÖÝz“ïĤ©FI›Ç[\K{î+ – ÃüÑj-"8ÖfÃ%Ì0SoüaÖ+CØ»$$#ï‹÷iØ%zq¸J*Écù™¨­kSzdº-^JKÍïÇ]²IRB+ª'©T5aö’]‹>–ú¨à² ”}TA¥ž&•Z‹<ºêÅ\uB×QkOêæpf£¥2B+ŠôÓÌA6ÄA¢ ÑîUÆyDó0 I†éÁúŠw™H ÃÜ¿=0L¶•µM$øÛ_¶ õɹ “=4µ%_·ƒõj˜‘¤!‰Î•õÂ)mÔÿsŠÍ=¼·JXÜ}›@®R±]HRË­†þ*®Ð»œ¤ÝS:çI–ƒæ X°p‚\pŠüG¼Jk‘€€Â­¾Û—q Ó°û:nôݼÁˆs<{†ÂvÀ¾b$ø„Ü)ŠÇÑF·YócÇÎÚ’ðú¾'\hMC”2cŠîªD~³?Û–ÇMÇén“,P‚wqÉ¥’#tï+ôÄPKíuaEªPKë‹MR(org/junit/experimental/max/MaxCore.class­W xÕþŸ-{åõÆN”Ãq A@Y¶’&!!Ç.NmlH($io%±Z‘¤´¥@Ò#Ð6½h 4JëP\®^´ô¾ïRè}Жè ̼]­dI–“ï«¿Ï»ûÞ›7óÏÿfæžxñÁ‡¬7«x» Þ¡àü~—ŠNRq n­£á»U¼ïå…à ާ¢ž×|x? |€‡äá‡Xê6~XÁGxæ£,p»Š;p'?¦àˆŠù8Tã®zÜ{øñ ÷òò'yúS FUqTÅBÜçǧUÜTd1æÇ8Ž)xPÁïøŒŠexHE fñG<ªà1òã³üþ?>ïÇø}ŸŠvös!¾ÈP÷£‹~IÅ—ñ„‚¯¨ø*¾Æz¿Î2ß`¨ßôã[ ¾Íãïðø.ß º´îD°:âz:m¤÷nîéÚÖßÛ¹e×Ö ûºw­Ü5Ø90¸«£góÀÀ®óû;»º/ôìÓ¯Ô#q=±72`[fbïzÉDÚÖöv=ž1”a3m'­ƒK{’ÖÞȾL´#Æ”a™#FÂÖã‘ý@¤W?pž#H:ꆒVW23,µ-¥V–M£©#i¤Æ×‘Œ‚Æ3aôeFöÖ ¾'n0ðdTo×-“Çî¤:$-öé#<Øb¤,#ªÛFL ¹?“°ÉÄv3m’èæD"ië¶I~ Ì+@—ßÃ<°3FLZŠ“÷«\?Ìd¤ËŒÇ냫¦ßHgâ6Ùk˜¬E vƒI*6 Ì*6°°‰}%Çg«ÚÊ$Â…„ˈ˜„•d(R" >+ÛHÛRŒ ”ìd‚&q}0•ã{N±ð†Ð&Ö7`îMèvÆ"‘H –©„fuK¹Å+2„±â>År„L­@à‚ êKW¶^HÉm%Ó¾h’}=¹Ò~útÒ²ûs χܕkeæJP³#;dQÙŸ´.xp4¼W1Òÿðã¿þ‡éÈòÉìv=^-h*îÄÎåjÇf–v艥vPV¿ t‡¬äH° ‚2/QàÑCPºTUxNÕ§‰Q«E~Q'œ®.)BÕD½Ðøì¯×Ä Ñ ‰F=kåZ°„#‡~Ò €ÿ]™ é]ÇÝ}³Ö•®Öº øXkM±Ê*ëp1vÈujê\Ý4ªb°´¹6Ô:åøzJH?c÷a )Y+•Ís6àÕ¸Tb›!ÕÒ=OÝ.ZcµÛ\µu¬². •qUà:§@U§ª»¡ÓúžÌ»¥¯˜„dH#C.öÍËÁÞ:úcв˜QLÀÖ)0ïŰ‹ÙtÕí$€ìíüpè~ø³hÈ¢1jÍbf³²ä5«RÛŨ'¿Y{ÐÙçiŸïjç¯}¸œ¤÷½®«iÌòÁÖÇ0û0jZGC­c˜Óëš;Žy¡ðšò”ÍC =wC!bꈊF"bÑ·ôl]Û˜…’d+G¦3“’'C}³{RcD"kß8ùDasoë1,èk;†“c}œ,ð(®ó…C;1,:†SªpÑ‘—žœ@pC=55@ê@NûÉíÅäôJ2É0W‘‘ÅD{6I4b 2¸RBßèAß(Ó%„ÕØïAwŽn£„ž[;@sND¤êÚ]jŸ§Cgûi:µÓ‹³XrÊ8N•ã3²XzMhÙ1e;˜uŠzz†y½­7ü8O #ÄÄòÀŠ,^A +«è#‹Õc8ó¯ék{õa׳FÃmãXËíÀëˆó×c&®ÂɸË©]ëp®§˜¹¢îFrî&"êfIOÈíQ‘–D Ú³‰4éääe˜KúºÉFî<µ¨»ˆºNí1ì…l²·SM’«›»²äžæ¤Ÿf $ pý€sÅ;ú±¡|k)'ì#ú¸Îù™=«šÍkÏØK*…c- '‰Ì7ošáTúY»ærÍ¥ˆÊ=K™ MXÅ¢ô¹é''1ÉÕ%~ØÚQ=N*¢Zš3{EÓ/$“jHÇxãpðÍ˼­h `03qˆHæm™DÑžù±Ç0ÿE# óì¦4PF\$±‡«¼™D¢>®a jG\Ç8¥ö¢»/ó+â'è8Aâ :Ûp¿˜Ðz±¯Ñª54E¥&j†t”Ï þ^©[ø†ÑÄø!ø¬¶òf¢ëÝ7£äD&†¢ò= “}¾åùÍ}OS?hÓÍ©›©™ŽÒÔ«Ú±~õoðŒžr'ËäWÝY¬œÔ†ô³ý½gÃý=ø©)ÜdÝf’ÿL^;îëx£†‡7%Wø'è;‹û~nÂ×qãxo5ã&Á&¸Uk‚yJ«ÂÆ2Ç Ô˜.mY#W%êˆ1¼Ã¢ Må0MÞÕš3ÕYް%W˜Å>ÜäÉø?PK5|kó+| PKë‹MR:org/junit/experimental/max/MaxHistory$TestComparator.classTKOQþî´tè8• ˆ/@D”¾t¨â•Š<Š, ,\˜ õZ§3d ÁD£‰.Œݹa‰¢qaÜ™ø£ŒçN'å)6.æÞ{î9÷ûÎs~ýþö@S Täã´œQÀYý8'îÎ+¸€‹B¼$–ËB1(tWd É–q•!æÝ7Üž>†Þ¢í”µß24«hBRœ®ËQQÀ ÇÐ-cTÅMŒ©G·Š ±L¢Èо§ŠÃ8ÂÐÿ?-KuÞ6CëNqSùëL,uPJTâD]öTýÅ ¿Žý«]oÓðnnL‡nÖfhImí[ÑM4‚ àS,„CvëC2K޹ž^Y¤ñ}¨›>Ÿ¾'p&¶ºè'— ÎÝ –LŠÒ¿²’¨(ݶÔO’D»’É~†”ù‚ÈG’$´Ò#à1öÓªgm81 TÁá="ˆÒ^È|‚”]Cô¤!äªBt%“û‚†L––5Ć:^Aîø€¶Ð^MeÒ­Ô¸;ð{ð”"x†ƒxNw/ÂËÀŸL•3ôGœÚÑøX@'$²lÇQÊ@„ÎÔª¡·wHŠÐÞ²7Nå~¢1þñÕÜj½9@8Þû[’߬]Õ·5ÖVXãäçQô@J^#/O„\“d-ì™ì(9úÖ°geÇôV5àN¢7Ð'(^- b"§lç‚Uc5Ä!&}Œs©àåihÁÞGI¡KTì~ =M;’PK6¾ÇëHePKë‹MR+org/junit/experimental/max/MaxHistory.classWkW×Ý#À lHjcW`!Œ­‹›ºNÀÔ5ÂvIZ·ciÀƒ¥23Â8}¤I›>óhš¾’¾ŸNðZ±ËZu>åCAMW÷ if•µtïÜ{ÎÝûœ}ï¹3üû¿ÿü€!üMƒ KÃ2nÊSVENC¶Ì8*VdòE®†é= ð¥ÉK³*Ó«*nÉš5 qÜVñ’†6Ünà¯HóUi¾¦âë*^ÖЉ5Ä7¤yEB¼Šo6â[xMÅ·5tã;2ø®4ßSñ} 1ü@Åëz¥CÅ›*ÞRú„m›îhÖð<ÓSÐÇ9O–2˜½¾l¦ý {%ï§#×vnËo»­=¤i˜¯I(ÌÌœéå³>ÕJFêF,&pNAK¥tW©âϱ½«è«L­&.«ŸªÈd6ï—ÃUñCžË%Ó¯ÜrƒñŸ›—£3½´k2ê«<;$¼iRÃC»¯Sp€üRr} ç¤$TcÚž7Ë›1o Œ‚# õy)&)Þ[ÅÙb噯Ly‘‚úLÉPŸ-•ë@¼ïQ2Ûñ­E+x'çòöVu3Ùf¿â8ï •eÙBßÓ;˜FvOOŠV3ÒiÓóbƒƒƒ ñ=‘3²ÆZÊÉ»is<(‰}eŽŽ̪x[ÇðŽŽQŒ(8ùÿTŽcVÇOðŽ‚ž=E¨cÏñÄìPn¬ÄËT–þTÇÏðsïb–ǼJ]ŠÓ{ÒÐÞR–þ¢áÝà…©ã$>¥ã´4O㌂®K‰2lü_èø%~¥â×:~ƒßªøŽßã<Û‹HÇñ'Æïã/ žÞ“L±*oaýëî¨|Wí/ÇUÈUÁ[ù¥‚–õRá>¶7‚¡­ ÀÄliøÖ ËÆ›Ð\ã /¸½¤lW˜u4Ò7ç]#-3kú¦Réf ßÀr¦5¹ÔKqÇÃWUa–S›Î:^&°Îßp[’WÓYfØvkŠ­ñ–kùæG{üQŠàòÝ­py¯øNáE\eñõ̷ƶ78Uá5¦ ·]µ$ÕUùz˜]¤øñÉj76“’{çѵ{$hL;ÜmËöž“«¿ª ÜÅÔ^/¤½¹Å†(.Žð;.ÎÏ®>~ëu!‰A>ñ)‚O U*—ãá`|ŠãÓcÖ3Ÿu~/žÅ-ŸæÈA ­ÀáÄ=DÞEkâ>jÖ§úï¡–uW7¡.$6P¿Nw•_›:‰#8Ç]¨c{”³1Îö ‰‡-8†$ðZ:è×Dªóx†kI€gzM.SÚ„ü?$”ó›hmj ýЧßCÓ‡PgØ73š}ëg¢òÜ}x¦V&:kÒ;*Þ-‰ÒʈbÄŠ1épÁ8ôë0ös<ô…,zéÊØP°‹¶CJ¼ØSªSŒW2J0÷V<‰1\àêÚŸÅ8s;dùÙ Ëó¸d9Á_”3¢¯ó¢Ø™¢ØÝ̵5±‰¶… <ñÚˉþpàn°eçk´(9÷‘­‹h‡‰·¥0±0…é ¿î€›o7yw~›ëkä¿ …b\ØDçBâ8°® ~ïõsŸêÿíôcwÐ<ÍgUž?¼K€éz¸¸‡2õ”B:Šz¶3}í¸DŸ%›§GŠÍSÌ«¡ð†ŠáE¸ c\¡”¤¹Ä~Žk Ò\ø€†×Á=Àá>D÷z‰¸.PøùxK)÷_ìWH_€¼Lš(û¶-Èîû8òGkpµ,°]ãÆ~)îäj+·•€Ûðyæ&Þ ¢@1YŒºƒí…¨?Á{P£w­ù{Eè×C¡w”:J /TU£}75£ÆªªÑ¾»ËTãæj|±¤Æµ@ …º}¹Hq2ØW¢l"¶P6ÐSîûª^ð*¢*0¨L¤¡7@8V‰°^¡pÃ¥÷׳ÀÌ"R’âSËRSîV€t…@j©át¨b/Ñs)ð¿ão µ ¾—ý-1ö'Ðú?PKáåóÂPKW@uWorg/junit/experimental/results/PKPKë‹MR0org/junit/experimental/results/FailureList.classTÛRA=’å¯ABX¯(ñ‚DѫIJԷ% 0Ô²Im&~Š_à«V)”Z¥¾øâø7êÙ$HDÔ<¤g¦»·Ï9=ùúýýGç`GщL+:50E2ÁÂÙÎæ‚‹Q\„Ë®D0…‰)Óf"«Žr˾, tÚΖc•µr-[•ô´@ë’Zó͸ÀäðŒ]ð׬²§´å—=Oú–WÐjUå­ ž•«žže–Å´YîÔAÑÇá¹Â :låÉÅòæ²ô9Ë.=q»wÜÇŽ¯‚sÍÖëŠt³uør»(}µ)=í¸Å”]]Ú#P“Òû{©çŽr3)5.,àÞR…8šýóÇ• á‘U ×ñÖ¬ùí¼,å3jw 0Ò ´@H ôÔ1_ÐÒwtÁglà<".Jº2ÿ{XöìZ2?Œ.Ê~^æTгκގL$pÕDâ}A71‹k®›¸›æLܼ‰n 7¤ÛÀ ¸Ë9:¤“Gö½$¯9uÁã ɼãèä²t•Ü’É`Œ’ëN±H…+€{éÆgŠ]؇{°¼!ót5¥‚™hÏûÒÑÒþÕê±ÃfãÍnÿ}"ymªv½dÖ:ôÚãz9[ëNiQnW©=ãŸÇ«zöŠÔ±g‰Ñ†I Ä´,éÜÞä¦S ŽnПDª|IûÊ[£I>e|Ú(%˜$®Ý<…ÐÃ?B/×>zžp q¦w!Ò™·½æ© ý´í\Á.Œ6´ò4ÀSo5Gp¨ìªÕU2EÍÓó ï8w'p’6@ûŠ-\ç? éé.ÂvfÍ÷Óoz‡űw0^à 7Ïh gÂ;ˆ¾DÇTó˜Oãm»hÿôòÇ·Ì+ÍðU¾ˆƒˆÐvÑÆI¹›ÑãýÌèÅ Ì‘v b–$&H4‰Sh®d â4eö!‹! WdÏ×$Fp•Ϋ W0‚T¥£qéŸPK Ýÿ@PKë‹MR4org/junit/experimental/results/PrintableResult.classVksÓF=›ÈV”7ÍH) ´ŽQJmBÀ©[¨KhÒ†>¨£Œ#¥ÒªCú›ú!Ì´1Ô3ýýQÞ] ?d’>xµ{çÞ{î]Éÿüû×ß.ÃÖ‘GAG 75,j¸¥#%¹Ü–Â;Š:2X–Ëç:Ʊ”%qIÇø²wqOÃW:±¤¡¬ák#¸¯c+ry 5ßhXeèõyÖÃdÙó«Övè:ÂòC×å¾µªTy]ð@¬Æ†Å\yÛþÕ¶j¶[µŠ5;ò3m¾üù.÷î »fEàõÀwè¼YãMÈtÑ{ÂËŽËï‡;›Ü_“z†‘²·e×Ömß‘çX˜{»ôîŠÌ0ÖiOv±ÏɤqÁ\$ûlÅ©º¶}2)u•"mÞ¡šrîMìýmï§ù‘/éÃq©w‡ä‹ £q¡pjVÙ‘A×%iÏœ€aþøñ3Om§F ‘÷P™áFBTèÎÑõ„óÔÙ²…ã¹V)ËKö ÉLßÞY–tæ<«¬¥Úˆó.z¡Kä¥r3wi r3Ý5仄ǩ"#¼Š Öª4e¯Ô ERÙš@øÜÞa8iϺ³'ømß·÷VB±ŠŠ2—«â…þ/9jh͘“Þ*ÖðÐÀ)\`˜;^?iˆº*»÷EÏçrX7ð-¾“»yóÀc$cÒcÆÀ6ä2©á‘ïqEÃ~ÄÃÔ‘¥7­X”1÷]Š³ÆŸ Î)Mìת¦ÈO†ýI. üŒyWqæ´Õ„•Ím¾EeOvu¨=¶ºí —Ž~™u]9)š³É®¾å¥O¾MOçŽÒŽ¢bè«rQj^ÌÎñ¥ë8¿ÑMæš×1h2®P¥T¯øÐ-Ñ+%xÆŸà}NÆéSÄÐ#»K; YÀÓt>C§eÒ0zfÌ—`/ѳOû¦híUò)¼O«Ùà,> ç¹ɇôœ¦_Î+ä ¤‘È7é#'mFHm4Þ¨ã„y€Þ:´}eÞ r¾-È(>ÂÇ*aË8ÉGÕCÏ!³ÌÆlÙè„󢙬®ô³ô=¼¨°Æ"{˜$ƒÚ]Ä%Âl¥.%s´‹R·èG'N½D'鯛uô™³ÂxÑÌx€"‚<Óä“%V4½MWTKb/c!ƼÝoþãý¯0Àð{‚ˆkmDôÇpŒ½±ÐìV’$òVG·"ÿ¨ÀOHF7,Næ1N¨”§¤¾ •¦HnGë8Á¿7{€±ýDåËòŸ …)µU>‡ÊÐX]ǧ*ÉÊï³ÿPKÐ?šÌ PKë‹MR5org/junit/experimental/results/ResultMatchers$1.class•T[OAþ¦­ÝvY¤”›Ü¤éRÁ+…ZJ„`Ô§e;´K¶»Íî–À¿ñÍ_L´DMŒÏþ(ã™í ¦i:3{æœï|ç›3óûÏ÷Ÿ²xÇULÊhCF‚*#ŒL SbΊán ÓbžiÁ=Ü—¡à„‡2Å<’ðXÂ,C|_3Gt»jy ,Ï3,Ã[`ˆ¤òãÛ4åìgh[3,þ²ZÞáΖ¶c’%¹fëš¹­9†øŒ¯d¸ `Pò–Åœ©¹.'KvÍvŠê^•°U~PáŽQæ–§™ªÃݪé¹êk^×<½Äw$KÔäwuÇØá[6Ã`ÊG(ieBFÜšî0€A)𦰠wA’©Ë®ª›M2¦Ší†°õº0]n¨¶pš†ë¨oüy•»ZMØÎø4q“êþÎi!÷º¼)47Ÿþ@ætWÔOzœ’ïáh¶^kÃhÊ·_ãu ºê¢ÖpuËô½ŒUŽ Ãg+3t–ôªÉݦMîæN*.pG̦4ï‘*YM[˺¬¾“>ç¼é%S3,‡â¿*ÜšU‘ð@ÁCät#® s)˜Çc O<Å‚‚%,)ÆÃ¥Ö<.4u£"l†±w’²!’\7ȇ¤fQ¨ÌjRÁ2žIx® ˆ ê93Æ0xV4&ÏF) ª%ŸéòÑÂ!O†L»Z=™Š‰BNy Ž·¦ƒ!êZ¥ 5©t»æˆ·ÊèR/¢8rœE¡Æí’øØ¦&üÒ¼¸ñwÓt‹¤>”*žÉ1ÑNNÍÉ aV(zm>#ÏùÖD,¯mùsMlSrÿäñâ§G§‹#jïxÜ«FZ…é߃^jø>ZÍ D g²ßÀ2{}¡] ;Hô8õÓ¨økòмº ÞW³»g¾‚í"²ƒDä;.d÷ѤÈ'DŸ[€g}àƒË°·ºŒQ:§ÚÇ•ÀÄ:‘ö´Æ²?!½ßC´·s—û¶ä]Äö¡„ðìkç gCcH’zŒpÍ¿sãþ|7iŽÐs Ã(|Þ/úPK΂†vçâPKë‹MR5org/junit/experimental/results/ResultMatchers$3.class•TKoIþÚ1™Øn’¬1á ÞMØõ2ðNxmˆ!¬óص¤Î¸cw4ž±fÚ~ 7n\¸ AP8 Îû£ÕãYòØdW–åžîªê¯êûººÿþöù €Kø3…a\Lc“ipØf˜Êã²…é4q%ƒ«¸6„ëÜÀM³¸ea&M»f-ܶp‡!óB¸m¡– ƪ~д[¢í2ÔöbÏ>Ã08«<¥)þDaÿâ†äœß #UåÉ¥n{Uu±ê’%[õá>2ëØ˜Ô-2€/xž æ\†’,—¢ ë]JhËŽ T[zZ¸6%ìº:´ÿоqæpbšê;Ü£ÖÄšt_1Lþd%P´¦Jzh3ÅgT’Ò²Í0Õï^†tC†N VeÝg8³G£‘¯£•ïE:eÛ†“3-T×Å a»ÂkÚË«ëÒéUšØ˜2²þËǪ©¦'t7 ‰WvC×_u¤(Vn¶_šw Ñšß YQæì>‰ISÿ¼ç¸~¨¼æ¢Ô-¿aá.Ç=ÜçÅOYüÎ1‡ó¨XxÈñ ç·‹ º¦lÏ×jM9ÂHaW„r‰Çcüa¡Ê±ˆq†‰–ók=Wþ¥Ò­¼Üpd$^>ê*"oa‰c+çg˜ì5Ç)œf°ûìI†Óÿ¥=ÞŽÕÑqe,ÅbÌt'ºÍÓ†<nÎïz:2Ò1 ÅFʘ-{ ÖÕʵ«*4í5¼ÛBÛšR›>](îל¼óÿ ñÂΨz+ð_¥)0·_© V|¯‰ÿA·„zRt:ÒkÔå†ŽÄØÎPÓt˜Í½Bì¼b˜¢×p„žS6:jú“fIúgq„¦Í® A? ]*+}Bâ=­8Jã ÅŒÑÈ£yÇpÒ ™®‰žc B(•71|ƒñÒ0š'¶p(¯Ü„µ…¡^ÃJ¾%û»=¢ c=”8ƒ™ÁYò3Ó×q®•¸Ú\9›ÚB:§Q²-dØ®{˜*Ý –ˆçòôÜô~Æ/¤Ê}b2£ßŽÑS¥òWðMÞ[heTêT 8Oþ$~âC!ú‰‚‘»Œ 8‰GýíúPKm#TFäPKë‹MR5org/junit/experimental/results/ResultMatchers$4.class•T[SÓ@þ¶Ô†† ÈU¹TTÔÒJS¯ a,ƒ¨º¤K&Mj’2ðS|ñÕ_œÑ2êŒã³?Êñ$\*È´™î圳ßùÎe÷×ïo?Œ`!ŠÓ–Ñ‚” ª7¤eR\—0*#‚T#Ƽù†7¤›p·$Ü–éÔ w%Œ3È[Üt\[7ó m ›|‹«7ójÖ—‘EdB7uw’¡3þ¯zh•!œ±r‚¡eA7ÅÓrq]Ø+|Ýœ¥qc•Ûº·„a· ; `PæMS؃;Ž ÉÈ‚eçÕÍ29SÅvIØzQ˜.7T[8eÃuÔgþ¼È]­ lgpŒ¸5ý“åÂØaŸ²L´]Im|è%QÒ]QdH×{–²—ŽfëëbÅbè¯:/ð¢F'\uÆ×•\Ý2ý<5åö =Çפzi}ShU¦¡íôá*:†hVÏ›Ü-Û”âåÃÐ+;%á%(ÈÜD½aNzf­²­‰9Ý+aûáJ¤<:TÿYS3,‡ºbQ¸+'aBÁ=L*hÅm¸¯à¦L##aFÁ,æºk[jº¬9a“¦À ®Ó€f%êC3? à!I˜WðORõE£ } j½ÆÐ÷¿œ2 ×ÈÐAÑÍUƒËìÅÆ8êŽ.g€AEiˆ{m¥lü…)›®/œght­lp©;âCG]ëÖZ ²LôzòȸoËÂԄ߆^* 3GQI÷˜’’Ó³ÇõeÙ·~MHoøˆíùˆá.R2¦ÈÛ¥Àǽ €h"ùJ͵t×@E÷ ¢ÄeÒ‡qÅ·¿Š¸?!ág9‰k8çSbTï×øPK_ñË  PKë‹MR3org/junit/experimental/results/ResultMatchers.class­UkOA=C[–® "Ï‚‚‚¨… ¾Z«%©ÖG(i$ñ˰ í’í.Ù‡è¿ÂOMüþ(ãÝméKlÒÞ¹ÛsΜ™;s÷÷Ÿ¿,Ṋ–U\BVÁŠŠV8åä.\J®@Âý»Ü0IvÍ&ÿE2;ž)FºHèÅÀŠ o¢p²1QãnÙ°ª¦X?öCªªUe˜Ï4m`Ù#z5é±× ²ØgH …–Ê7ßoï =4šn7Àƒ 3=EZUêáPžÈhë‰ýº|jÎ5½Ysì |t6Eø¥¦ëPÔO]T⳪eÛwt±nÈÍj½»‹râ.c …ILÑÝïêêÏ.IîÓ®iË’Vèš–•´g]ÓVèŒtÅ`h?ñÔé–SGéT¬ŠlG¾‚ijé)ÈO/5lÚkjíW(ËRF=‰ù#°o4èÁ ýª1Ä‘ÆR!á85ÄÒ“Çq¤äd€%tì;z!_ƒ (0…«Á$׈BÅnP²äFþ›ü‰ØÖÄâ‡'NBÚ­&I\Ç Š¡Ð4å3¸yV(±EKêmZmš%ác¡Û”ßA¦!ôêTH‘B}R(Ö$´Þ"4‡yŠw[žÜ;‘^ |±“Ǥ”VÛ=~Œô¨Ñ÷~0ZB?Å*P2Øì>z5‡1ш±0þPKM"]oÌÛPKW@uWorg/junit/experimental/runners/PKPKë‹MR-org/junit/experimental/runners/Enclosed.class•TKWÓPþn›± R|¡@íK£ø¶XEDE œ#=ê*m/x1$œ›Ôk…K7nu£¢GŽkÿƒ ÿˆ:7¡ ¤ ì"w2óÍ7ßÌæÇï/«NcÆ€Svã´4Ftœ1 á¬rŸ3pvá".©ÇeeuŽêÒqEG…¡cT¸" £œ«.ØÏm˱Ýykܱ}¿\õ伵Ф¸%›®Ë¥o-z îX÷·ëMá4¸,ç0hã`è¬ —O7k\Þ·kyº«^ÝvØR¨÷5§<>CþŸüå—b‘»í¬W›pëŽçóF™!õLIbØSÉ ×"% Ç·)™¡w³®WK-m=[ Œ*„7&^ÖùR <××q•a笘wí ))¥Êùéeæ„p9Vói׃‚S³ÙÜ“X»ù¸‹¦Swìåe¬-å ½Fs¸K16ÉdèõV3*ÏUá ]Qr3Ž¥<”›‰FSÉn޶ƒ)`)Þ‰ Å›Y›ö¬×”u~S¨ÙÝZƒ“ kâÆL ਉN\gØ»!aLJû•Ò¡Bã&n`BÇM·p[Ǥ‰;¸k¢Š ZÔ-eMLašög› ɰ/~»³Mð–žúþS齈Öʘç÷Ú“k{‹S¹mîL,·Íš¨?enR&•žòbNC2—§èßH|ÎáõÀjaH¬ð[»±¥oYê—ݺÄz«Ñg-IgºP*?‚}Fâ’È“D7= ÂG({{ɈÐèA&dK£ûˆQYûÑGè~²Í5O/ulÎC8Ö?B¬´jd)¿ˆ±ƒÎ»_¡=*¬~BªZ˜*­V’経vè-Kmärª/õŸ¡¿YìK­`G_kìÝŸŸÅâ v2|ƒ±‚] |‡ù~]~H=H‡©xyÇÙQ Û©Pü05sŒšH‘ìa‡HX'!‡ ¯X²”“¥H"rUC£xZê_IÄq€8"TqU"TÔö ²N†–õPK~#þ§/iPKW@uW org/junit/experimental/theories/PKPKë‹MR/org/junit/experimental/theories/DataPoint.class…‘ËNÂ@†Ïp«wAÅËÂH\‰ÆÆ5ÆÄH‰&*ªVC=–!à ™N^Í…àCOMMš¸˜é?ÿùþs¦íÇçÛ;œÁ®e¶Øas#ƒòQ­{;àcîJ®B·cPaAéR)m¹Z5ð…ÇÒ’'B¥ >{“GI%b°õ7%yQ|±C,·±¡')Èùñ/ÇïýÊ{ë]êèØØ’²k nùƒÊž&<ƒ½v¬¬Ⓢ%æ·¤»T~õ䳂ÛF‹*QÔ¼úò ¥¦:íÇ{ÿæÎc°Ÿñ¹ Ñy˜^÷$©§?!AùæwÛ`P¸óü뉚6¡;ˆ•°.NFhDséÚ>j#0rg/Π8Ðê 0 ë uæükT0ÈÐÊÒŸÏää O§²]2X àǀńƒ%ZËßjVéY!µF¹Â:¡”È.d6`3Ù¶¾PK¤gÎb\PKë‹MR0org/junit/experimental/theories/DataPoints.class…‘KO1ǧ¼Vð(ø8â+nc;µiòu 24²ô÷™ƒäiW ]¶@æø @1æ Dcþ[-À"­;¤–È—C(Ã2TbÙƒ  ¬ÆSõ PK‚M¹c^PKë‹MR4org/junit/experimental/theories/FromDataPoints.class…’½NÃ0ÇÏ¥%´|Ú…ª`Ábaa*"•Zˆ’ÀÂä†#¸rìÈq*új <…¸ DAªÔÁöÙ÷»¿ïÎþø|{€sèz°ãÁ®©P%2èžœ'b*¸:味R§— Z‘)m‚©ˆé ¬É®…‘ÚgÏ`/,µ“>ÈBŽöµ6N8itÁàð¦øuðêÊ¢zKÀ(™ÌôÂûÛøfä3Ø_ ›¢#òh±ßW˜‘f<Ë‘ fÐû#?öCCcS>)µt_s´²…âî•Xð@X‘QJ¶ˆÊ«3¨Cƒ¬¬~ϬÑzLÞ&1u„¬ÃFe>CØ„-Ø®v ´¿PKÆF2lFIPKë‹MR8org/junit/experimental/theories/ParameterSignature.class­X [T×~/30ÌpYÑL3ÎÑØˆˆ"nDP"cŒµ—á × 3dæâRÛš4¦û–6m£iÓÖ.6m‰ ±±v3mºï[º7ÝÛŸÐô=ç^îÜYèÓç‘sÎ=ç;ß÷~û_üïs—,Ç|øp óË>œ ˆÇýð‰øáóGý(ó~”Šùc~”‹ùã~Ìó'ü¨ó©>‰O•àÓøL§ñY1<)~.€§ÄçSxÒ‡3,Àc>|^œ|A||1€ÕAgÅðtœ{Ï’gÅçy±š§“‚ÿ1\ôá¹.áKâìy1\¤_þRBý¾*>¾&ξ^‚oàj ^À7Åð-±÷¢ßVPݹcûÀ¦ýº7íëßÝ»©o_OG¯‚òîÚA­yÜ4bÍ=ÚØþ>c8®™ãI]ÁêÌÓ6ë3¦Å‡›;cZ*Õn_“o¯|¼æ‘1²˜“}Σ¹ùî((Ñâñ„©™F"žR°h‹*}ÒÜá,yeÞà¸êLÄêISŒéýš"T -ËÑÍÛ™Ò…ÒF\ß>>:¨'ûÅ%•݉¨Ð’†dbmzFŸšÌ#ò·×d ¸&óTŒ›}GFGu3i숂U¡,À®»;èQ3ÏβŠ&4È9âÁ ‚Ú,ýýkøO@ðp¦Ô¶þÖÜ»í¡i®Y³HM ½µ<äâ‘Ô÷ÇȤ¹G7GCkÜfêH&µ#ÝFJ +•ç æOWÁðµrnëN$‡›ŒÇ ³Y?<¦'Q=nj±fsDO$ =ÕÜ«%5ÊÖ“N¨K{äÕ±•2“ãQ3‘ÌgëPMŸ+¨Ÿ£úÕ)¬D80A•庵îíÉIÑ=3çÞtNU þu)(›'S’š+†•À¡êpçþâY`63I\= ’ê–u·ý_ƒæá\ó 1×kÁëÆQÔfðN{ºŠ¸Ý93–Q°G šsåõ `«È+Í0+ÉeQ-Þêcæ€gi­å)t÷°7‘pÈÒLÒ”:—úe£™›«·¸R›—8™G½ “Ê¢þºyTGJ–7VúC»V“I³‚Æ\Yy…«‡’ÚM(wX1M-9¬Û2"yMÖçÜ«šj;‰T“»kE{/fäVe(O»-g³mFÏ î¥#Z*½E>9 "³âs{®1fsQX¦r¿Ú¨ëcn+óÃ,*JYúÀ2¶êz’´ˆ·@6J»•v°‰¶Î 8WKy™lÄ»B3gKŽV]³Q«a6ÅT×¢#œ´dr §˜çT`p(b^ðhh–:^»–º,3”f¬óX”ÙÅ¢£Y´¸-³+ž'$Ÿ#}‰ñdTßlˆ·YmnºE°á³0Ím«–áÓF…GU|ë¦N%² ‰DL×â*¶¡›‘á:8"ÊOyz£o$‘4™˜.­F(>Jé»â¦>,ö\̺ñá f›c Ì*Ò;ã¬B>|WÅ÷ð}~ â‡ø‘?VñüTÅÏðs}ØëÃ/¦@dö-×^Ò…U¨ø%*Ú±NE6¨ø~­â%Uq?’*~#†qTÑŠ5*~+ˆ‡ßg($=ìÃTüRñŽ«xoWñgAý² ®Ÿ!`T<,D¾Û|ø«Š¿áï>üCÅ?¢áß*:±1ÃnVß`,‹Ÿ;ì)iËt&bâIeÕÃòñøhbÈØ/Ÿ÷ò—ÃÂìwxî‰ÒŒ † _óYUlú{¾—ú¼éÞ¸Œ &DoÖcjnhY¾çT­›4£ê7òÂlÞTÁW}xRQmˆJŒT/ƒÈ0ƒºÌ?Öábʶû\…»}nN&F­w²©ñÔ6¿t<¤U°4_—ÏgœŠ¬ ¦ˆ"-e…vcF½Éäâîp#ÕE=´x”ˆ½QMÜ]’iÅi»B&3ªjØuÈÕw³ëSeî.»8Ûåvý°ʸœæ†ò(Œþl_ Àƒù"±  _X‹J‘‹Î÷z~3-¹žƒ€ˆîmâ×ó¼©pÞ{ ÊîIl Ÿƒ§ Þ (䪨 >kU\¿µ T¡ÄZ©U(µVeU(·VU˜c­*«P%V0÷¬¸™c˜ÂA(Ř˱7 KQ‹[1ðëk>¶cî¦Z[H©\1îÂVªteì¬å—¥ÜäÊÒk«tŒ²<œ«Â‘¦‹¨ö`W¸)b-žv€”I’ø±ˆ@Ka ­k¶0±ê!E®vpU ¤©zª;ª;IeÚIÞ}è·A­â,hÔðjøW{óÎJ:¦Hž-uTã]pÜ%yÝmóÚêâUÇ¿ù6/‹W$ƒ×nÜã2Ÿµ³Çá~/ÍǦ`s‚¼ÂU—°€qC§=¾| š.!¸;l‰[&qãêw÷(§_y¹)-»…ò¿ÑŠÑ‚ ¬ m[¢î[¤ë½”s#^‹}Ò‚a¼š´`ƒˆJ·.ÂtÛÎ5œ-ªýœ­³aǺ#üc×±1ßÇYð,Oba8r á¦óX”vw¥Ti-ÇvšrÝ¿Þåòr2ˆI(åvÒˆ•H——ÑÄÙz'¡F¹Š#ÁQè㎀[yÕágÑ0Å'áóžF¹ç4J‘ ,™@ã™,wJ–¦õˆzŒÉ¸SDç´5Œ¨  æä¶ô$••ëIÜtBJòzÎdÁû Ã>HöBÇ´fb'­YŠ+Ó|Ÿ-¸1b©EÁµa¹¦à“–jÓèvht4æhÌP ^ 6€Ç9 ç5œCˆù¼¬'Pc­Ã¸‚ÈöÈÍ„uÆ%ÜòöNˆ·NS°ž©4‚u„vˆâ­ôŸ‚Ԁöß$¸tª[ôëmúæEµÞ Æ#Ü{=ŽÚ€›¥ëÀÒG#eçøW^Úâ-&oà_,6“›I1™,º€¦l>û\|Š3øãÞŽûúíÀ,~ºùê4~ŠºüTæ¥ÌN†´ŸÄÎƒŽŸÞÌÕC8nKÒh\a¤R¸‡%·h·¤KC@2¦Ò#®Ì+u„•òá&„R·dež8{«#ömüã«Ð«”ò†Ÿû{ƒ'Q¨œ´zë¼—WzVUUžÂæ:ouQK«¯©Î7æ(•‹[¯`ùÙpï"øSm+š‚Þ!Âm-®+¾*HŠm’ãE¬p•ì6J]ã´ÝCë~V¸$ýeòü ÛÐ!Vî1úù¨Tó^‚ÛÌÒ1†wP±zÖÂwråãîN¼‹jziÓ¼›þ,dg¾ïáªH¨ãf¯,D²GKÈÕ{eM›h¯4ÑT@¾{8ž9agÐ öŠ•q›‚&Ï*… \¼Fa-—YDû¨b–ºŸ~å%—âVNc­x€éú ‹üq'§‚„.ÔòÐ87Q…÷K+VؾMÃ]‘åÑb|Úµ´^R@¼‚­§º9Ì·"$6ŽõS=gêV1÷áàX<De€¥—ëüyÏ1¬"ý-‹†ex¯Œ¤á€ÌŽ‚ÐŠ}HºØ†a‰­Jù@8Ûúé`tsGw ¹¯C^Ép@öÞ²„³bê®+h™Ý°bî¸Âãsâó‰pŒ²°<ÝÌy%a;†psmC7—]×(ZÒ=<)s* o§šsW:Ó4kÏ® ®¸Îû9V…[pŒϰ-mþ-^¡rwßÀm—ûL&D¨š·+NA¬2½ž&"Ç%Ž´fLÛ%ߦðJö¡†E,iè@BC'º4tƒ÷ÚK¹û âõYDðZÃ,3ª˜&§¡”;¤ ³‰(½{W§3ƒ^Égƒ)wžï¾†·X‰`UÃ’Ö‘d%Rîàâ‘c—@ 3w*„‚©;àX›#Û©Uo/ÝXšÆrfîÒ(¬S0-»5^{ž Ê:¥Ì59¯™€& $›Ðïe–äV‹ùFÄêL Ú ÉåSlù¤Êý¦p]½(0Á@œÿ„@<.;àÌ&¡%Ä·÷ù=àj9Dz£çP²cçd øMBÑñ… A/GÍ_ÇЇÇ_`?j49ÎÒÎ~‡òµÜ}¾"Y/Ð*}‰Pè»AI’ÿ‰–z¢¾D×DC×D—$’É|’Кˆl|ÁT"z›•¶Í„öch»€–ß qÕî»÷ª®Q‰ T•ðº™o’ÿ˪¢~D8&9Ñ“â>ÃÝSîF°„1_i–—­RÑ^¼ÔùÃŒ H…5õý˜®yƒÄÊlGö‹'ß#®TúbOô?PK3r—cíçPKë‹MRXorg/junit/experimental/theories/PotentialAssignment$CouldNotGenerateValueException.class­RÛJ1=S{ѵõR­Ö+>xñQ)H½ ­}5´‘5‘MVû[> >ø~”8ÙÄÀÎ$3gÎœÉæíýåÀ6–dQõf®€… VÆJD-[eôÕÉN ¥ºÑÖ íZ"JdýE„üžÒÊÕCkë-B¶nn$a¼¡´½ú{“]Bu­q+D Ý ›ÝØjÀàwÓ¨0G†3¾f“i?D–<‘PKNtíƒåPKë‹MR9org/junit/experimental/theories/PotentialAssignment.classS]kA=³ÝdãÛ«Ö¯jµ¥‰‚K)>E ?B[âÓd{ÝNØÌ”ÙÙÒŸ¥O… þ”xw³„j Böa>Μ{î™Ãì¯ßç?lc3D k†ðð(Àz€Çž¬õLžî÷Ž4Yéh ӜޜÆtì”ÑÍ÷šz©Ì2Ê P©´r» íÎ@Àï™CXê+M{ùxHö@SFZ}Ët ­*öè»#Å2/úÆ&Ñ(g¡ˆNɪ1i'ÓÈ‘±Š²è£qŒ(™¾Ê2•èâ¸+ÐøjléPàK»?’'2J¥N¢}g•NºÃŮۙ³‘¯å¸¼ÃLÚÉÄAk¶;LÈUWÚËá4]b‘é¯)‹­ªòþ»hÚ3Ü7¹é­*B\½Äó󢨉W9Ý9î¼±]oìÌQ,°üïE>ÍãâÏq«=él^¿ŸŸ|ñùüf9›¼Ûᙟ1jOÏ ¾óÂÃ5‹ÿ‚A&ױȫ愄%,ó|×Ѫv™SpÃð>?c•…oS•zYÕ*nMX¸•ÒFˆ›Œ _à6V™w§²Vgä.î]D¸ò~©ùRÏcÌGÀ>¼R«ñPKZMädÉÙPKë‹MR?org/junit/experimental/theories/Theories$TheoryAnchor$1$1.classU[OAþ*…²P.Ò€WŠmAZîr-7E ’@xÀ³l'íÂv—Ìîú‡xÆ@5>øü'>x ¾Ïl‹i ØMvæœ3g¾ùfÎ93Ÿ~ø`ËuhDB6½!„Ñ'›ûuˆ ?„V$ƒHÉ~ ˆAi’Êp#•ÒX‚ghØU¨í¨/pÓaèÎX"—ÜrMÝI ×4¹°“+Ëäê©Ó$C“×í(a“¬¬å¹%^§M-o Rå¤YCµmn1ņñ T¾¿Ã….T#éȹ:·“ke!Z‰kMé4mšáUÌ7Ê6_gÌ’‘!œÑM¾ì6¹XS7 ²´d,M5ÖU¡K½l ÈC`˜ôËÊÛ]-§¸D‚¡:&90’Rºépa\Ú¶ÝÂŽ£[æºn4#;¿¯qÏ@8m™-uWMª™£õ„µ'9’=ô׉¨†V-Wh|A—ôNiõË™´ëyS3,[7sKÜÉ[Y1­ í šÐ¬ ] :eó¤ÑÅÐ9¢ f0ËÐzWs˜W°€'A¬¥¯±ÔýPKý˜ º.PKë‹MR=org/junit/experimental/theories/Theories$TheoryAnchor$1.class­VmSU~. YØ.±¥­µÚbÚ&6 ´µQJ¡R(¤Ô¶j»,·ÉÂf—¹{ËÃoþ ±”Ñ€3þ¿øAÿƒãxîf![H ³cfrßöœçœóÜsϽ¿ýû󯆱ډn|¤šq=øX5Ÿh˜ÐÑŽ;:Ò˜ÔqSj4­ã>ÕItFÇ}|¦£ˆY sæ5|Á`”*ÜÛ®UñMg\—‹IÇô}î3€V6L'cyÕu‡KÎp£è‰raµæÚ²À·Ö¹°«Ü•¦S Çæ~Áv%.­Lø¾]vÕg”!%+¶Ÿb¸y$B)d¢¾)ˆ1›”Æ¾ËÆÄˆ¨‰šŠÔ/T½îJÜ—AÔ£ñâË-1$' Š¡§h»|®V]æ¢d.;´Ò[ô,ÓY2…­æábRñÁp+^$™aâ£m‹è|ï11œ³<Çá–œ!1ÛtìoMi{ 'ÞÌWÍ ³P“¶S(Ú¾ âIñðsúàW†¾WCÚ^ß ëÊÙ±úÜ1Ý2E"¼M%6:N‹Äž)k‚´òh¥¦ü:Qå²â­Üqm«¼èÚKãkJ“NÉ”k9žo»åzPQ2ЇÓNâ”3x` ‡<‘˜'$3¬P– <Ä—xŒ'¾Â×¾1ðÏ ˜XÖ`X×ðÜ@*P1í1dïB¥÷ÐÒHp‚u 6ÃõXvˆý÷ûŒ3œ%‹mY™ Ku£:ƒG×Ë–Uírë¼l%ø4fQ¦RvŒìUtÓ²¸ïg†‡¨îýþ¿ß‡ŽY,ÎâΑ8ÖN—¹œ¤'EÍ’ž˜åZøåT6×ü˜†,)oÇe1÷˜î…†*ùDv阛Á`Γs5Ç¡{"Ûĵ—ù½Ÿ? —²­YŠÞc¢úFÐ󮳡…_)i‚?W·a!"Bàç_+@Ë7ghnº–ºéš†ÖŒñìq)Æz§õЯ-VU žJ"­´Óÿ ÎÒƒì-ÝE’Ô§ó/ÀòW_ -?ø‰•.ÎQ›"Ià¼Mm­‘,Îã ½K–ÂEôS¯ïšôàS‰ÄŸ¶A·2Ô^¢±È©•ËÔ^ €²4¢âº»@¦uw_"9û Ú)wS?컫ø‘Í¿{êò—0Hh)’¼Škó …øÅ¿;ÿØ5mƒ»ÐèõHþ‰ wï#w‡Èj4Œ÷IƒáŒ„´,S¯<ëW ;è(* »èüÚÀ.ôüNìÀØAWÃZ¯ÚÆÐÁèeIô1-Âah¹ƒð¯ãY»I³$õ’g·”Û ÖÒ#4d‚ÆŸã ¨7ý×^ïþPKO>’—f PKë‹MR=org/junit/experimental/theories/Theories$TheoryAnchor$2.classU[OQþN)ÝR(ÊÅH•¶\¶"¹ˆÖR”¤¢ }Z–c»°Ýmv·þˆþŸL,üþ(ãœmJl¶IÏÌœž™oîýõûÇOñº ¤Ä‘Ç”8¦#¸…™f¡DC&Bïæ"x‚y äšj$4«\1¸Ë –]TŽª¦î*ü´Âm½ÌMW5·Ä-[玢›.·MºÉ:Ž^4ÅÏÎ*CDØ)s·d2¤®X±«¦ÉmG)[‡ÜP6mµÌO,ûø÷”û„âG›;¥-ÓqUS#/ú GjMU Õ,*oޏæÒÃ[ÒDFÂSòzW¸s–5µ’e“¸%0r†ê8ÜaXúo»M&qÕŽÀXÓIiáKÒ§ ùk;_דÚcæè1CoA7ùvµ|Àí]õÀðiiª±§Úº›—A‘H0,û 21G© s*\UMÓ‘N„„,ÒûЪ|‘ü©Æ+®n™Ž„e’w¬ª­ñM]¸ÔýgVhR$yS3,G7‹¸e¬`UF?â2dtËèA¯Œ(úd aLšŒgX—ñ/$de¼DN†Œ<6©|É0~SYv\ \˜‘ðŠaÁ%ê2M»%Û:i”çncŠrÍ™töu·ôN}@Céý”l¿[ü5ãõ»ñ_"¨Âó~ШG‹Ümø›µ‹Õæå`2Õº‹TMã­L†aÅï¦Þ3D/UÉÂ¥.T=fÛr·«†ÁO¶ðA´úd› í¦›5ë˜çO+¢kÜ8£©K^·Ú ¨UüÉvÆÄî‚Ѩ€(MGipEò<ËÏòò1^>Å'ðIfø3|š—Ïðëgð>×€Ïã ¼|QÂó|ü% _Ž"†xù ëôU ¢èÄEføš„¯³ÀoD±ߌâ[x¦ø¶„ïJøž€<–UMë\¿‘Κ½†j èŠm«¶êí|:­z¯bP ꨶsTu²fF`ÇiM¥Nå ÍIYyfµS93£ê©#–’SÏšÖi´€˜ÑEض"ßXˆ8š'3Š®eFFsˆJ iè”rFIåMO i¶ÃÈ£Ú”¡8yK8¸èóþ€$Í CÑSý¶ÏM;šiŒk¦®8jæðLZuú`Ý~è‹Wl`íСÀÚ!ÍP‡ó¹“ª5¦œÔé¤yÈL+ú¸biüF6?Wg¦UKË©†C†8Ÿç°–éBðƒˆT(°ÙWoÐH›¹ipƒ°u¶™·Òdõý«â˜hŠ^â'øÖ)°>ƒƒ¤…⸱ˆjE™›|=–Ñ"R"kϹÙU ²™%X /T• wà1Ï]1¦RÇNžRÓNßÊ4Jy¡úލËù-bͤ¥ÚänÛQŒ´›çKÉYÅÈèêâºt“lwüNK˜ÓF¨Þ;eh³ÔiÓrŠ.ÖÎÓwËâÖ˜Œ4ËZæY®Ñ¾'—ñÉo]–˜üâ¦3E®eFÉÈëº}ì´[w\]J ÜV¯"¯D gƒçÐCŠ£Œ˜dû¨×ÄÐÝtööö ì«qIcaÕB3½%¸] ÷§jáþOs84³‹—ûxÙM¶ŽºÍáˆÆyMÁ’ .cÇed ÊèÃa™âj)µ~ËRÎñ}$ãA¼EÆnì‘q?ð?Ä%1 áG2~ŒŸÈx Ü[Y´e¼ˆËKFŽ:–fLÌkzF¥Ä}lX=£Z±I3odbÅnjÇœ¬âÄlÊ-{RS31¯`cJ±>ì±X¡F‚Çûb2®à%^~*ãe\•ð3?Ç+2fÙÃxTÆ/s˜—pMÆu¼*aAÆ/øó/qƒŠºŠö*ã&nÑeXUŽuîâÈüJƯñ‡p¸j ûè5¿ÅmC'dYK!£T‹éö¯ã*£þNÂïe¼UÂèªJ?­«æv!5Ë»“Àö ëF.š+ û-4T”à,uR§Kç¾=ÕÔ,˜¢ëŠ{¤’”||e!•Ì^Õ kÈÒà̳'¨G»tRêש÷}ezZ5ÈŽž ¿W©eeÅÛ·ˆ¾Ø¾V¦8¦wDsH|)!Q4•<áå!Í™“Цӥµœnã<¹ØÅ‘dót¡4í#¦5¬Î8Á05dôÆòRRóÇ"º©ÊãRóÒSºie‘¤²á>Êm,Þ£QO#4·ú½´Ü4WuÊ<ÿ¦ßƒ¥<®~nðüAÝLÓx1\ùàXÙeùâ›`ôÜé ËŽg5J&³(ß _i´‘¨æ‡ Fà¡å‡¾¥e²ÂضRÏ¢ÆâŽzýi>¹r╺[ÑM?ó0B©€…¾üuÔX&1E2ÂÈR‰z²ö’ެQCb‚Ê/ü4õÅ.ۨبô°) §–´‰y„JšymâJY›8í3ëÈùÌ#¤Gœ*®›²B,n3WYñøÝágE¦ŸL»Y¢¶É)Ʊ†šðw°“ê¤Þ_Ì{üPK2 :+PKë‹MR.org/junit/experimental/theories/Theories.classW |ÕÿO²G²™$FAIa•"V‚`‚¡!¡&bAkv‡dÈ^ÌÎQZ+ÒCkm/l­wÓŠmµÇF¤¥öÒÖÚË^öníaïû>¤ÿovvöÁì/oÞ¼÷½ïøÇûæ™—ž8 àlE  7Èð6n ` Þ.ÃM2¼#€sñÎnÆ-~àVÜæÇíò¼#€;qлüxWSðî:Ü-Ï÷Èæ=u¸W^î à$Ü߀ð ?T‡÷ ¯±Þ‡Ûd¸£ï—ç="ìa õ# ø>(ÇüxÔÇX àÃ2|D†Êð±: `ñcÜÇåýp–à avD¤}¼Ÿ'•:À'ñ¤Ÿ àÓøL>ëÇçÄêCÂá)±õiÿy¾àÇ3\€/úñ¬_R ë s´+N˜|í‰Çu³;ª¥RzJo¥7¬U ¦·öîÐvi¡¨ ÙÛm›xº]Á”^#®÷¥cÛtsPÛåJSo"¬E7k¦!ï΢Ç6È´½7a…v¤É9¤ïIê¦Óã– Y¢Š¡§BƒÎ¤SwD„)˜V&_ÁÌb!£Éœ é¥Ä+ÛW‘>páž°ž´ŒD<åÇ—ÔCqÍJ›<2«Ì@9#6žÙZ ¯™|R¡펆õ”•£Þʽ*˜?‰3 N '¢Q=lõÌТÆUš(w¡i&LòhvTJ[F4Ôk¤,[ŠOw¶§–î*XX²´²À¦Áa3±[àé(ÚKyW#‘³vQ·ˆfék5KÛ”0âÖ:CF¨ƒw»L´œ6õíbSȦ¡(fš œrÙD4Q=N¥GAÁ‰o»#àä2Ñuk8![¾˜=#ç Œ³Tq%±î®?–ãÖœÔÍè°ÌtØ’tpWÅk®ä€',ÛW –7š7i¦F9 t25ôÈšQÊ®Oå£oÙ䙸1Û鯹íÄîiTZÐԵ𰂶ª1¸NxíN˜#.-9Cór²º„å¹_)0I9*YHˆš.«¯)‡§“$j85_ƒ•\Uàr˜QÆ6›ÙëË–¢ŽVvbÌ?ŽYy;Ë«ÅËxYØNÄ’é’Pljm+/ V!I£­À¨û^.s²a"–Ÿ_&ðÄÎ7d3nM4QÐW½¶–®ÍLE]À–?H›a}!×@cîY"«X‡õ2\¢â5آ⠆dø ¾ªâkxί«ø¾ÉÜ9ž3ÝzäÇ·T|ϳ¦NúLJÅwð]?¾§âûøïϼ×íâÏ’›_°L#>´&mD#º)úÿµße´+ePÅðc?Á 䌥SVp›LI‘ «ø)^ƒ?óãç*~UüÒë&ÓÛ¢Bø+üÚßð¶ÍóÏú‹~+H½תø~ïÇTüRñgü…Ï$½ÈÛtRwÿ¨Š¿âo*þ.2ÿ!³â_*þÿ(Xz⥒öåiÿÅó*þ‡çT¤±KÅK8Æ”+Ëã ‚ž,”ÃÚ.=˜ˆGG9èÁ‚òlÕ Ê2ƒz,iq× ZÚÝš%Ö‚nWÐæg]T¥FÁ¼ã¶~¥VU&“|`”Ó‘ ÎJdç¼û+ñ¦ð“Н#ê¤E"%äýÛvÐ’Nј6l²«3¹À)îõ8§²WÜNéäj{Ä.×Dõ3©ûãÅ­dá4hün)ºC ·¦òUb4¬¥úô=– 6 ðÄí—bÀÉÂmäl#7'ŒˆÐn­Ô±ÍÍÑö%¤mË—Àþx—9”*hüóÌúÜbó*±ã˜=»H“2ÀnŸKŽg·V'-Å­>bÒv#Y«ëɘ÷Rµ´|zR‘î¢6òôÊ,n$çLHÍW§§^Ì8—ìSK½ ßh;ÓZ”GZ ?³º³{’|‚~s>‹ Âo~Õ\.ìðêM=–Ø¥wE£ÈØ*‰‰ØDý“o´&õµ‹yXƒnÈ_ŠtV¨ÅE|Û„þ_û¢q(qV‹›JV{àÅþ€™Y*¼ ½66¢œú9WùÌ®lâìÕœ{ø¼œÕ`olâ8y« åÕÀõZ>ÛŽ`Å–öqtŽce¯” ;ªÎ߸ˆ¶ŠöÈsµ<u ›iƒ|r?fáœÆ”\ˆ‡lƒ‚Y¦Ž*¼Ïvà,^%×Ùfô;é‘ÝÛïîíçZVÑ7qíÍ +ÅV´‹jKP4Á[‰†ãèzÔ½}¶Íd]£‹a#ë‚ÅýƧÐ_Ï:’½É/ཾõÿPKˆ]4= JPKë‹MR,org/junit/experimental/theories/Theory.class…P;OAþ†‡§ > cŒÆ‚hãÆÚŠŒ&"O ¬–sÄ%˹Û#ò×,üþ(ãœ&ÒXLæ›|ݙϯ÷çØ °`;À¡æ2kÓVñÔó3¡xr: 4ZÎÅ^{»6¿èÌú¢8‰P¹³$âKc™P _9Nægc=Ó„½~æ¼™ð£IÍÐò"!%Ýäeµ)ýG¨>{v9º ”gÚfÚüGz[ÍÅônÃën‡p°ÜêdÄ^”ÇËùŽå‰d†ó)‹h¥Û ¯zmù@œŒÔ8sÆ+~›rbr‘¶ÊçËNÕïÖ„ú"µ7sä ‡KZœ¢I ¤~ÎY"”P–iE¦âP« XCEú¾ ªÐëŒ6°™Ã'£ŽÆ7PKe÷æÃ ÍPKW@uW)org/junit/experimental/theories/internal/PKPKë‹MRCorg/junit/experimental/theories/internal/AllMembersSupplier$1.class¥1nÂ@EÿˆÁAŠ;Z jVÔˆEDJa¥àk3²×Zf­Ýu”³¥È8TÄZ)Sf¾fFô5ïöóõ `‡e†,CNÈÏnð5¿Ë„ÕÑÚ’¯ûpúÞöÛNhÂóIjë‚‘¦äغK†'ÂÁùFuƒ˜¨ø³go®,Q[[vÞpPF"{I—¿7;Ë7ö/V‡ÀPŒ4eµ4ê½ê¸Ž„ý? Å:!ð[“$$7Å,í)Ó\¤ÎS†FWÌïPK2~XÛ¾PKë‹MRVorg/junit/experimental/theories/internal/AllMembersSupplier$MethodParameterValue.class­VkSU~N’fC.åÖôb][,á"ŠÕ–^D(ˆ QÀÛ²9“,,»™Ý Å¿âðk;£ÐÚÑúÉþŠãs6R’F†syß罿çÝüù÷/¿™D>H¢6ñtGÃÝ$ÆqOÃ} x˜„†4L$ð±†I SŠýè<š1Ä >IbŸjxœD;æo^à ñmݼ@_Îõ ÙͲcY¯ì8Òó³Ûn^ÚÙiÏØ–O]ok.„ŽSèžEØÁÌ©¥úVb“d ´æ,GΗ·7¤·llؤ´ç\Ó°W ÏR÷*1-_ ³¢`ÁP é­v™ÜÔ¬²6i¾/‰Z¬qDî–¤gmK'0ìlP”®gI?k9vH™°í9©ŒûKåRɶ¤×ÓÈãlͱàRr®š¥DAU:3}¹McÇÈÚ†SÈ>ÙØ”f@AVO cÖ¶eÁ°'¼BYyôh×”¥ÀrB¯7€™¦ôýZPÒp70ÔM`àÄ(§<¦hSPôܧ•dvÕØZ> +õ‡¶˜ÄF7%}Ó³J{oƸx–S×ð™¶N_ü3g$ìÈî°ZFžQƒ^rËž)§-•™‹õ !s —pY-‹)\DZ íxµ5,¥°ŒÏYÉ“ë-pù´Xvz]üYvT,f ówu£*¬ÛÒ)EÝòu³(Í-™Wþ0úI#p»V!ëZ©„¯{2({ŽÌ놣[ŽŠYìý`t4hއS7^ _àËV±¦a=…¯ðµ†oRøßñ•ž¤eÁ H±½*8ŠÝ3é–íü¼ÌHv˜ÈðýÕDzíß*e,æ†þï!!pë?„$pÿL-,ͨ7Ñ{Ê÷'pÁrvÜ-&¥d»¾µ#íïîdêç×z=©á”ëÊÔÏåQ3;m¢f`ÕâÂaý†¾£Ù–=’WîדùÚáÄY´^§L`ü ™TÓ5|=ÃÜ.½™z ò±ÆQpd”Uå[UšÂò§š"–YSÙHgN]ÅÒ˜¨y :?èÝPó´]žbˆ¨ÑCÊÞ¦y‹pOöï#Ò?ð3¢Ïy‹à*×D¹^¡ÄU4á-þºB4®á <]§V~—p=ä)QNI.÷ÿ„¨ˆþŠØÎ=˽‚¶ÚžØGÓëÊñ|xT˜4ï¡åw4Ï þ¶Á—hå·èÚ~€û±è \x…öÕ}t¼5§øÓ#îiz öü¯x}“¾‚^5“ÖBŸÒ¤\B/o}¼õcxŒ÷ÂhÆpŽ˜$Þ%F¥N½C|„Ô ñT£ ³¨2*¨g¨õh˜ ¡"ÚCç³Ã<ÆCú­Ðbª‚9®© ´>R­ÉåT”ñ~F,žÓ“õèÄaâ´ŸùqZ «ú~(y›X°ÞQv ަí,w´%è7rhúPKûêžA PKë‹MRAorg/junit/experimental/theories/internal/AllMembersSupplier.classÍZ xTÕþo23/L²áD–"„$PÔH‚X TQ´vL^ÂÀäMœL¬ë.¶.m]¢¶µT¥­´‚KR×V­vÑÚ½¶v±û¾ïJÿsß›—™ÌDbÀ~ýørç¾ûî=÷üÿYî¹ïãù×y À\5+ˆÜÄ2ìÃÞ§ |&vËðýÒì‘f¯4Hó`!ÂÃ…èÇ€4û ìb â>+Í£A<†Ç Ÿ|óœª(ÿ–Ó"¢ƒÂηf÷#ËÙr¦ƒ›‰%E[×[O[jK­CAÔ}ÊL.ÞœÔ æ…‰9f8hbŽ|å¼Ùõk‰tBE ëˆ5rp´éÜâVN³«†ÍI³r¥Å5•é»ÄbV'•HtöŠ Þ±Ì©ÓrLkcÓ“>©$ÚãÐ¥B¼ÑÞÖÚ¡0³jCvËv²³™mä à‚Êvd÷0áÂIUËßèuA2î éï«#sé²\*Èõ-u†(sÈ/µN5åú¸ÕîULÓ‡ô–ÅékS…XAê°Q8:#¸3+9ƒ,ƒ|¯.–н"öW¡•íj>µ ÿ€`õòªkFþ^>åálÇ!ŸíBøÐ€1X„ÓùTîÌÆ¬tï JåÑu8“óEæUü••ÓÀwÖü+«kjЭ¡ÛÝŽ©ÝÃYùz¯ Ø.Aš¸o3J©Y5c¹Þ7ìHôö†õ8‹»pÖÙØ@­Îá¨éœË‘wrÄÇ‘ÎÓ˜ÞÅ?–ŒŽ–ê4Î,àøŽêš~÷£´ÌÞÖ}ØÊÎX…'0®Þòõc|½?äïGQÆ×HgB?ŠoǸ”ÈSišªCþ™YVbuø(Êû1qGíBu} ä+AE?Ž~õFÈx†«Œý˜DÅû úàÛ <¾ëà•{©k3qœGVŽ'"ß©´Ø jÝLüçègÉ:Øäü22q9_E¼×ò°u:‘Ù8 mh‡Á™ÇÂBžA:±~JìD›ÈO!ރ͈i~wxüîpù•Þ ¿b}GFe8ïr1mó:[ñ‡=œ+³ Ó“3™>.iMà”~LíCií„Ï"•8f?¦åáÌ]_ØëyK1wåO%Âb<… îyÙdt»ÈæyÈ{È{ÈñgD𠢸ÀCñ4™mÓ3QÔ¤PT:þrl½?å3j«C¾Ìg8øÒ „rMÉ&ª»™”Æ0Ÿ”.ä–c‘6U 옪 ôh@s=@  PC–©D†cª†,hIÚ³”(КZU&´Ò 9Hêý:f‰•4ªSVz~¢Ó@3¹Ýô¢‘W£&lõ`Îä¬^lÑ0§y0ç{0›=˜ÍÌæ,»5gãÌ÷e‹µ5:€‹ªkg‡|!ÿjv¡‚\£85üJP;ÔLÓö—0'mÇ\J»ÌÓŸr= kµÁ”yº· i$µZkŸî9ˆSfrVv¹+‰ÏEònþñNå"y™r þ¶æŸä/ó‡|û0{'šB¾2ò\} &ÐV©}uÌ»sjû1·øx6e4× ÅóØëlj’t\k]áW»îj°+1–ɤWÓ$×àT>¯Âuð©Ü¾œIIÔpÍÛ™:¶k‚Z=Z=3µjèyº'ÐóuïR®õ¥™®UÎw¿—¼?:€•@’¢×‡|ûq’B½?ÿ¤@Èïzf“ôèšõFMÈy ¹1ˆ<‰|8àz¶7P¯‰ò&¢ÿªðA¾¿™Ønaª½ÕK®Sq¢fA̱ÞþÞþÞþÞþWK÷h%¿1ò&ß:„Á€æ#ìÎrøpæ_íÍ¿†óŽ®åïßî~…{ØNªQý8yÏʘVqý<ît¤«5‘0x›þÀL“—æÞwðÍÄòa¾ù(“ë]g5÷6xÀ¿ïçìbÝ»^Kšä!ž¤CVñÝ dÍqÓø+~T]½²ö±Eù'ùÊ|“wbrm™ïx9Fo‹tÈù}»¯ðÑ ¯æïn÷2Ôv‘O0%ÜKÜç…[)‹'+Jv»‰Êc:­´]ûJ˜‰c»²j|ˆo¡{7ÓRÊ 7G†“eÖ-üu˜½•+o£g98NqK£ÂꇯOðSö U´™ïO«‰ =R ]7p„ÞN¡wxBŸwÉYâ]ÜÆ•n™´ªv?–Ð}âíÚçHO'ߥõþÙ’t›ö£Y§ÙWfïBÚƒÿ¤Pú:x’=â‘6—Žv'ëÇѬ$³ AK<}—¸úâd|DgÖÔÑî¢üiλyïvz!ûqJ»{8|GßcÔáqîþ$ñ~Àü'€ÜYj¼K.wÉåÝDqwAÜ#—{kðܧâ½*ŽÀêÜ/Â÷Éåý*> âÊˇäò€\TqBŇhÄGdÁGåò±Mž”§ ò'ø$>¥â¡Zñi¹œTñaôÙj´a\ÅÃ,ƒËdÕ#xTÅc²ðT VbBp&Uœ gêñÎâs*žû9ŸáyQ{R._2_T0'–Í&F“z\Á¼þƒ±C±hÎLÑþDÖìVP=Äo13—ÑlŸöyC*3=˜K&̨~8­gczÒŒQó€žÊ$ôltgʤ$3z,ò¹{Q¹dÁê¶ËÄÆtSϸä,ÔÊ#vô¨‚e€L.™Ô3ÙèX*®ÑÝzÖì5hšÚUTØDû¡én½ÏŒ·j/… ‚ý‰¤>˜Û¯gvÇö”Ôõ§FbÆžX&!ïŽÐoHdtÍèm"IO“”‚(üçO=’Î?:ÝŸróôâäe–Á›3Œ+?n 3o«²yå%‘íM¥ FB/´ê*µIý°éu¯+43Ãá$¸1H<c¡²R[vpª²©\f„^]V–] éb1#ÕÍž3'õlä$† B}}«öy¿cÿAFŸJ‚}ÜíY3–a üY3•&µCÎÊú’«[èi3‘JfU|IA³K$»-•œ–:f§¨v–—°šXÁS_QÐW^~#mÕYþ1S÷„s[&5&í ÇH%u«½•Á»„ÿÕiQdybœo¨ ÓeÂBñ†Å~ù!ªam åÒi#¡g$Êd3ûEŽ)k«&“)3&E7›>ïBdŒøæ#Ý*¾ª`ñþ\ˆ™D;ýg[¨(!åq®Mç…’h"×í+‘êšî#3“1SŒéâ]²· @},“YÎjÝ7³¦¡'©Y‘àÅ7b@CÖaçQ¤¸±ˆ—]nK/lÂVÚ^´¶½Œh Ò²\²í]_”ž2 –—ÔÜN=™ÑœÓxC¥›lW؃ΣluiÃðHZ¦»¶{S¹¤iÍ>6ꦑç×;y¼!3“HŽu~èªÒ¬ÔdÎ0²;®áàL YÃh[B=ó< ðYªa¾¦a=^ª¡K.°QÃÓøº†~|C.ßTñ- ߯wØÚË™‡5…Õ“ÉÄŽH£»/Óð] jø¾¯`í ï7‚ñ ?Ä4ü·hø ~J§GDÁ¥e4E ?ÃÏ5ìÀN Æ4ü£®–Ë/ñŒŠ_ixƒñ³ŽÉÖdn,_mBýל®›S)C%5üFÜù-8¾/Ÿ5´³8®â9 ¿Cl+ÕM5üÐðG<£áZ°suÏ>ï†1 Ë‘>ëõôOþŒ¿¨ø«†¿áï –Ìx0ÕðüSÁš¼e!Óö6)‡=¸Rÿðo»Ê(€åÜ{F|0enwÎÖ™Ë=)X4“‚Ö'¾Yþèî6°’½û@&uý3Ä#õ,eKØcoûIãH¯wŒ,ÉŸ‹.0Ö”úUàU)qn)¹Æ9Å{ÕÝ-,cp* —±xœ5ÀnæýuÕ›2žuË)_Md·Ž¥Í#t“Jwí[Uª=/Cã£!YY¼N,ø³‰£Œ­šÍí·y5È9¹Øç9´oeM4Jræ5ì.Ê4ª”ا»ú)KòC?8MÄ Ð_î}±Q|ü /Uúµ<ÒSÑ¿{xçVzUÊk~®Ö%j¶CuW'’ñ-ºžîñž:Ko ’Â9+ZX%ÿ8d‡`Eh–?BƒSç©-: KWeëØ »sÚ¹ªa*°{²Jê×õqi,)?³V†JÌÁ’鬥‰-zv$“p6ÚÔ´Û³µKP>ÔÉT{1ß*°Žïë=ïÝ|çÀäsoœh¼¾œo·òîç½!< %9…Špû)øÂ§àØÂíáu>*ym¥æ"Ú[ŒZ´¡ž¶7S¶×£[ëÉæ!O ÂzÛ>lµ°*­u®V7e6ÏmÄߎWð‹°»žv}¼/oŸ@åiT D§¡žÁœ \yÕÃgžDM¤}ڸ˶ÖZÆDȲÃbÙfã ¯´X.ǫȈû -<9Kᦹa¤`ƒ“NÞ…m ü*Î`®‚‡,¾b¯Êú²Ö²£ÙZN4™ÊÂå"Ù ‚ï j+pÁñi(]”ZåÕØå ÜF=ñ¤S\'’oó"ígp‘’ˆÀûm–u ΠÞ¾ùKDh=ít3þ=êtó؉!ì¦U !\1%B¶då'—SIw±¤J¢-Íñ'Ð0ØÜåoô·œ@[G£¿9.TýŽ×˜?t̯œüß³…ØEÖ •æÑØJÞ;X ›-2•“îŰUnQ—fWQ¦XOûøTÁõ!¼¯¥;¯£ÔÏo¯çߣDˆÞDqµ-<ýaÖÎÅ,¯¦ˆ•Öã¨ÑÂH!\6³~^¸}vàb&uÃS[›Ã§Í ë~Ú â"ŒL ›-‘°åyÅ¢×ùÇóšÈ‰(˜ɪy 2–ã˜w­Ã‘I,¢lñx¤mXr?æFÁR>Gð,–q+ÈFyÉøi¬(_ÈŠ³TÉàh VÃÔÁ­#‚Ý€nt¨$¹Hx°%ݽz ÿxàth§Ú+Úë±r¡óX9yŠåθ®R0‰ðøY´Ûµ)¤½ÎJh5 @ø i¡Àk…Ëk…ë†!N"å cšÏ<ýÙéUæ‘ç~ÙËPt D;Îuù}]••þØÔÑX¹v}USÕ.Y¯6©çü`y“ê[[¨ÇMU~Vï°OxM`õy¬?VÉR}’xkåÍì"–šø]IÛÍÈb)LîßCì0ÈQË‹]ä²”™å7•ZQä¨QÅç>\‡ÃDªa|Xe]ËGù$Ŷ×õ{/ÞÈ,Hô‡Ø;ù®kãÞàâ¾ÉÊ´èßèêß4%NvÞÞÌç·àf'oä`w6gÀ¥èœÞ“n,ÑÙ¼[똋µÁÁª ”ìy« •À¼ÙƒYWó­.æ:3ö]ð`°°BÎÙN 5x—ÒjÛs¥¿Ý‚ÝØòдùN¦çv¼ÃS’ùQWÃQÕoº:âßjõžüV±¿u[Cãíx‡;lýV±¯va© ø6µFÎ@K¤UÄ­…yÙÐ1 ï¹Èôy7æâ4â^À=¸÷¹ƒ8Èá,=Rx®vKh5ý¸L沃Jg¬˜™Û-ô;ð”•^‘5â˨þ?PK‹Ü\Š9 DPKë‹MR>org/junit/experimental/theories/internal/BooleanSupplier.class­S]kA=“M²éº¶5Öøm[µº©âRôAL)T¡OÁ [µO“8ÙN˜ì†ÙÙ¢þ'}²úüQâM¬!•`ssîpÎÝ?¿~°…ÇpÝÅnz¸…ÛJ¸Sê‡5¬»¸ëâCu[&Òì08A³ÃP~•¾ Km™ˆ×ù°+ôï*Bêí´ÇU‡ki÷°lŽeÆð¢ê8äDŠ÷#¡åP$†«Ð‹TK‘…21B'„¼LS%x壑’B·¨U,L‡«\Di®{‚èö‚sùÞp͇‚8#'ÜäZ´ší?áan¤ Û23Díd2fx6ÃÂÙ†áãyÑöù$©!Drµ›ÑÓ{ÜÚ¡·xcmö¤}eFÃ'¶‹žÎÑÁÚ¨sáâ¾ <ðñC¥ÏUF`ÓÇ&1<Ÿ×b†­×îìÎ¥B:Å“ø7ƒ{bÇd¿ÏÐÞNÄ® ¡jýTÃÄpLUDFË$nM!ûÝèòhO–ÿX»«5ÿ@c[å™u™a#8ú[£™ñÄ:jôÚ_ ÌÚG«O»"£XÙüö¹8¾Hkµ=,Òê °„eФêTe/Z¢¸Vù†Ò¡Swʧ %:,׫Î$?…ûi†w±àmŒïNxmv+t~¥¨nPvµÈ®ýPK±VáóePKë‹MR;org/junit/experimental/theories/internal/EnumSupplier.class­TÛNQ]ÓN;0Tî‹wEmË¥‚\¹(Ƥ¢‚žp,‡ 3d:%òà›_⋯šx7ñüŸüu©@I03ûœµÏ^{í}öÌ÷__¾À-6²õ¨G^ôYè·a"k#‡+6 6à*†, [1P'ÝÒæâΖ4Ð’ßÛ"ç·›uD±8n ~A\”|úÛú'²“<ŸP® &éOWd– ˜³Þ£›òÊ•ó¥Íé/ЇHkÞ[Î’ð•Þï‚f°®ŠFóž_Èm”Èœ“Ï·¤¯6¥'¬KÏW²˜Sn }—Èm°PÚÚr”ô)§c?++Ûe§õk…M, §$¼’¿*™~.}dþ›’*Ï„ JrryU ¨&¶­yu­sß_Ù«Úi ßï6ж|¨Ó‘.Æ]ÅE´¨ †jÑeÀÖ·\.‘Å5°tút wÍÕ¢ï€&ŽNêD”p¦+Ôãz6^ü—>ÖžßotNéhÙ;)ý:EMM  ׸Ž1ÞÆßÜÓ¾/v´ ã Là†…ÉnbÊÂt3˜50\Ó˜ø÷¶Tb¢éò°bÞ ÇW³Ïzn1åKM¦3‡UóAŒ?€À[|åôœÙ¢ ºZC÷ÉûÌó—Âá_NWÓV«ËÔtË÷ û$ÖÖt Iñçøc´ù£äW¥ïöw4òasÑLÛBä1m„ÖÎ~„‘íyÈ[î¢h廑V¿Mž¯gDwái´# ”W!{×Ú†Hc%_'WÇ‘ÚÍöƒŒu´3Ùwˆ|@ôÞW˜O>"6ß;f¦Ìo#±èH<OÆ^á\ÊLÆǬ¾”õñ”õ ÖgÔEðèeÜxýûgß›ŠÊ.Äùn'o5v"Ã|c´S8QVüž ³wqoéÃIœbMÇ‘ÆiœAŒøEœåJóÌT*›aÏS}Ù.0"BöAtól´Rmˆ\"V{™Xº¼ÊüPKÙŒêñ©PKë‹MRJorg/junit/experimental/theories/internal/ParameterizedAssertionError.class­VKW#Uþ. é$4 ïÁGPa’È8ƒ™0h†‡2†‡†GíKÒ±Óº; ¸séOàÌf¸Édôè9nݸóç¨u»Cx5žY˜Å}TÝûÕWu«ªóÇß?ÿà]ñ©„¥ …Ägad±ÆM¬ˆíª„51F›²øB ¹0ÖñX(6$l†Ñ/;°…íìà+1<º¯…â187¿• ‘—°ËÐcqSU´ nZª¡?^šg`:ç ݲÝÞP´o‡ûc UWíY†±lY9PRš¢Së%Óxªä5ž>'ÌÙ¦ªÓ;çD«ù2ßµÓñ ÿœQà ÝYUç+µJž›ë€!’5v‰B´hßúí’j1,f ³˜*׈BŠV‰z…ë¶¢¥ì7L•[)U·¹©“dM1• §ú=/d,rÓ&LÓ0ÓdÖVÌ"·wyUÈú=ÝaHÉ(¬˜àvÅ= IU˜"v½®’šï×Ôý1Hl3øŒ|ù"tën°¤X%7P¾X|‰âP6T"{/öjqö¢*pM­¨†WR³U-5gháP|¼¡ü:?´ÉÑ$äá€÷]†6+Ï0|âaMÕ \¼‡ßåÓw`‰$Ší¼ÖÀÅ”8ªž¦EÂÓàÌÕHÌJÌüš£¡œZÔ»f’µW‘'–gÜ:-gåÔÖêøWfx]dÄ'œ3jæ._TE¢ÿ‘æS€^gÌŠYq*õË6è]’Qw1-¡ ƒcZF{2Š(1Ìÿ¥&CEYÆ$¦dêpw$|'CCE}Ÿaðš„4t †Œ*ö%ÐÞ‚-ãÔdÌa^ÆžÊ85«^ªe¸±c.btO¡@ž0 ¼ÈñBdÜ[µ=ì(ö5UKý+$úàœR³È\Ò»Ưi)ÁSr”ð1Ïwî9˯Œi*GT[Åʪ‹]_éÎ q,í4 ¢Ùç•©DAmW,î]u‘«R‰:ÒŠSõ„¿}Ù³¦§T«\/0LzTÏU—ÏtàFé»uS|shÁk4¿N»6¼~ ü%É[$Ù‡?Í£‰kÿm[¾dnËñM6àÏ5ÐþÄDÒæOÎõ·iì‚F™€; ¨ ïÐ.á‚` ãΧn·#b'm›³š@’î2‘ÏM󫤺‘‰ß‚ûxEU¤#c*Š ¦£˜Á#Ù̪Ȫ˜‹ *Ã4<Ž` Qü€'²y*qUüEL®Á3?EÐrð³Š_T £¦múc ziÇÍë«%u·dÛÂõô¢³,,}Nxþ„ex^*9¯ 4ÁI'Ó¦-2¥â’pçŒ%‹3i'gXó†kÊqm2äLOÁ½pñrM¸fQؾaé~A8®)<Ý´}áڜɮ‰œ¹bæî¾1ãpÚË–ÖÖ,S¸)mþ@XAO^øYÓÎ[¢8i k™éľ¬f ×( 2ËšyÛðK®H%ӫƺ¡—|ÓÒ'Ë9ßtlfЬHÜ ã‰[¬†Y†×³¾K i©„(ˆ7,ºbEbèVŒ ˜t5$¹Ïô†ïHùAÏÌ+¸~ÚÜꕚîî½´»âE‰Þ‰Š ¹£M4œ®Â,˜~aÊðsÎÖ4w4à¦MÏOÉT;jâÕÚV] 7å0º§/cxÿýÑmuí òǸÓïÏc¹mWîV¥Åwá”ð Ž\‹+½š‡áêHArÏêž”D7÷y‚IÕâXO­×dwÆ÷PsÐ4R]j׿écÝ…ÃdîÚ±+uë#Y§äæÄ¤)+òüÞÏd á,>Õp— í§cÒuŠÛ8*–4ä°¬A`…5²-hÜuWÒI‰žWQÐ`bUÅs Šl8|ãö(8É~<êdê5/4¸ ŽKX×°!››RRÿ¡< #ò‰¾ >q 7+ðÀ(ã–5%äõÔðôÕÃ×OEϸm;¾! Ço¢á¨Ý‹ 3F=Tß~Jžýë†U"\W"ÙìX &äåÚÕ¬Ö´šµ;€'j"ÙünèÜ=Ë“¡`xñÒ¯à?åulW;9L/­2!N%’M¯­Žw VžS†'ËVÁ¥Äân¨äî›àÄÎjÊ9ôÞ´=™· Ùåe|8ÿ°ÈO ù²=ÇÑüáþ7Pþ`/€ÏØF*³1Fwá<{ÝÕ(|N$Tz_â1BòUæ±”8[¹V”X©‚¯ÚD°Œ™¿~òêHh°ŒV#-ñ–2ÚüŠQÙ‹(ØDt$Ç ½Fû&´2N0N«oqòrƶÇCñpŸ°ðÛ›ñÐïL¬PîEÛR‹“îYÒ>‡[\™fï‰çIy•t¥œYfl/ú 2ª $ùdß²~ P6eÔÅ1ˆË&ÆtÊìÆ®ðßfh\Å5q½fS5ê{Õµ¯¸öuÅØoØ»Ùܮα+V±+VFס풢ûI{d‡h„N[®Ð®aЏF»n|d»FšÛuêHvu׫ëô«k„tS¤}‹do³ý–¶ŒÓ®;q—vMî°+U·k”íAìkb×í]v1o ¶6^·ë{Ííêù»b»ŽT]I7MÚ’¡hË,íÊRÄcÚµðQíR¸e²wïPKð&Å=PKW@uW*org/junit/experimental/theories/suppliers/PKPKë‹MR8org/junit/experimental/theories/suppliers/TestedOn.class•Q=KA‰g¢ÑøUXˆ"´qÑÂF›N$渜6©6—!nØì»{Áü5 €?Jœó+M Xì΃yóÞæýãõ .a߃v=ØcP–ÚY*gçýƒZ/ÍM‚÷R!ƒzŒÖá°«/Æb*D¹vr‚OÒÊB_ëÔ 'SMó×íÔŒø8×Òq|ÉÐO;¡¸{ÆÔH´<FLС±½<Ë”ÄáÝì†Ae*TNf·Kì÷˜±ü7×!™ãv‘‘+¡G\üãꥹ„¦J&E$/z|ˆ[€Ááâ‘X˜:bž,î ‹ðñ,C"UC?ò;AD ®þ¿$ƒÆÜ¤;câ-ô_¤É€A‰Þ œ•é¾P!T‚կ߃5ª§Ô­§–À:l¡›°UÀ>0„lPKôMâ)85PKë‹MR@org/junit/experimental/theories/suppliers/TestedOnSupplier.class­U[OAþ¦·-¥Ü-X/(Òr[¹ªQÄ`Hj!)Á(¾ t(C–ÝfwJäÁ7‰/¾ê‹ˆ&Äg„? žYÊÝllÚ9³gÏù¾s›é÷__ö áI q¤ ôÆв/†~ Ô"„Á(:c0q'FfõÁ¨1ã ‘IiK5ÅL¥—B3NA04d¥-råÍá.ò‹4ÍYg•[KÜ•ú¹¢ ©ué1Lf·hn” ȯK•›ÂVÜ2Õºp\)<Ó+—J–®g. O‰Â¼¯h2DVj‰[e‘wÊîª ÀÙÔ¹ˆ Üå›B 7/‹6WeWdÒÙ ¾ÅͲ’–™•ž"h&é7Gr×íb,ë½%l½—´=Yd­†M CãYÚ¨ªdyì³µÑØÒVTˆÖ“Uß.Tþé)Òó[°à(ÒHnM{”´­_g¦ˆ©æ0%†7ÿ¥îÕÇÛŸ€Y©SLœ•AMGêZŽ(§]—ogýV ÿ{­ ÜãîÇщ ™8&ñÀÀTñÈÀt1Ã0Qý„3 ]¼¨‡>ç¦r¶ ut’¦mÛQ\IG_j¿5·‹æŒÅ=ï Y¾†ššG^zøRi}PšŽ,çl%Š:,cKÔù5ÍÔÜq¬ŠyTÑ}:2kŽë_ ËÇ£Î+WÚÅÌ1ÍüʆXU”H5SÆPrXéà…M[ê//ÑZºTõ'¦GÖz2I2’áÞ°þëFZ#¾²M´Æ÷ ÐŒ’ — +íüAÔÌ}EàÅ‚ÏúZú„ð7„r»ˆÐ¸…’¡‰p2¼7 Ž #y‡Žd8a ŽGû›Dô3è[³‹XÏßìýïý1èGуÖ&D}î\%î1bŸ%™E›Ý+Š`Œv­ôÅ à2’mR¸BºzÐMžm>V®’…Þ]ÃuÊ&Jhíä }7©PA²¡S”¤?œ[•ü÷­ºÈªÛ¯ÑmÒõø»ÔPK;í %í·PKW@uWorg/junit/function/PKPKë‹MR)org/junit/function/ThrowingRunnable.class]ŽM Â0F¿©µÑêBOàF7¡[AÅ}bM)S‰z6ÀC‰‰ÁùyØ×ûñ°ÄP /:Îs¨³ù¯îÚœ[ÛðE`x×x§ÍÚÖ†0ÙŸ\s³\n=³*j³¨ÔU¦+eåÙ¶òèYÇkù¯FQ–µâRnŠÊè–0þ­¾~3!A JÃ[HwÅž…aNÐûPKÓï㲜ÈPKW@uWorg/junit/internal/PKPKë‹MR/org/junit/internal/ArrayComparisonFailure.classUmSU~nHض¤ HyiiŠ­$JªÖ×Ð ¯mj ¶µÕKr.†]ÜÝÐúü þ‚~Õ™’Šqü¤3þ?úSÔsoÖ Ì3gïÙûÜçœóœs7üýó/ÞÄÓưh`)†{pw”¹«L!Fæž2ÇÐb/–±¢ð«>‰ÁÄ¢2ŸFñ™ÚYëÅ:î+³a`Sø<Š ñ0ŠGQ|¡ˆVcxŒ'êå—Ê}bà+œá¼'\ÉkÂõ¤cß/,0°{ çæÛó¹íoðZ]DÐüc ÑJÁ.Ë’ðèhq‡ïólÝ—µlQz~Ž¡gMVmî×]ÁpýÄötÓ¯q»š-ؾ¨ 7—Ï)Æeáy¼JGm5ß•v•ö»+ó¼îÑîHÛî¬Gyû”ñ¢ë:®BMK[úy†›©Ó$g,¤7ÂóN™øãEi‹•úî–p×ùVMçã”HN ‘¼ ûÛ’ªÏ·šÝ©SÔ¬¤r\›×²³®Ë¿wv÷èˆçØK\ÖH JÏØý¯ÆH©YMDÚeñŒÔ.0˜¼\^»ÂV= )V´*ü ô‹©t[ ëÛ®óT%CÄ1µô8k)¼´Í’×ÒÖ•eÍ}-_ÈÛb>ux®.ke¡Qßi¾¢kNÝ-‰%©Ôí\ò”b21 ¢í?ЍÁjL\Ãu)¤MXȘ(¡lâ=¼oB b jbÒÄøª?#-;øšá*W¬^²"]ÏO–e¥"\QNr?)j‚Dõ“&jØ5`›p°g⸠NM£ >5ä‘â­Óâ1é’KØ7‘ô‰9L3¤ÿwۆΚ;†®”jqÚ Ç“©Ž->«ñƾº™«†A—w‹¡ïø¤ 4gß_ÝÚ%?§²éæ{{Â&Äwèôdµ ‡ &I‘§;OXâô[*b›{+♯õxH“jkçøª0Á÷HÃéÞ\:^ùÉ´ú;(‡«ôõ£oY#¸‚$h~È a 5“ä¿¡ý òi“xM£IÙA:sQ9Ïÿù3“Ò¯­†ÑëF²œB/Ù[ˆR™q*tˆ”»B¥ÎP±K”g‘2Ý@ž~+g ñQ«3Ô¥ÛZí4M@ž|%›TE…°³Z¦¹V­Ù@¶esé¤PwÛ„Š´„š×¨…PK$¬$L%PKë‹MR4org/junit/internal/AssumptionViolatedException.class¥W[WWþ&™ #Ø (^©×0 D[«x£"H‹±r­Õ!9 C“Iœ™ Zµµ7«mm_ý }j×*¨}èj_|èêê>g&7¢¶<Ì9³ÏÞçûö•Éßÿüþ€Cø)‚m˜ c+.ñÇ,\æ+A|¡õ*|Á5\o††¹R!¤ù–…ák6‚yè!ìŽ` !ìåë'!Ä"È!Âþ ¸R1ˆA˜AX6ZÌÔµÜ43-½`L IÎIØ0X0,[3ìi-Wb8> Í™Ë*å‹6iKˆŽ.h‹Z2§Ùä„mêFöÙf„јf§æ™I÷]–ÐäÈê-ÆçXÊ&‹P¦¢Ü1Z0³Éy-Ÿ2™e']9é„'ô¬¡Ù%“.éôT:©ö“^ÓIÝÐí~ ý±µä.¯E÷Æëž– ÒÖ:ªì|)?ÇÌIm.'|(¤(dŽÞ]¡lÏëσ⾅qHê†ÍLCË%«!›Ö 9Ífé³K)&Ä8¢ÕD44¯Yn¨‹ÎÌ×§øV± bE“¥øÍþ‡ã<†Ü÷΋%ÃÖólZ·tB0Œ‚­q†gQ½«ŠKŽÄc¯ÞÞWÕ.s:åá×ëžþïöe íWp¹ÚøêÉy³p“gJ(K”°vÏSJd–Ùc̲´,)mŠu{õW$ͬ”©Ï±É‚„±zÂCâÌ)-Öœ® $l]_™TošºÍœ0HØåº¤ÜÈŒ—ìbÉ&LË‹«£…5r ÛYQyÓ˰Îré #tÁ}“ Œ3sÔ Œjl_ƒkö–­x,*dQ¢÷‰BÉL±awEWƒ¾ëå÷+H`QÁnìQ°ÄЭ`/öIhóÈ‚›Xâ6=AÜRpŸqGÁ]Ü“à;ÞE›-ØÇ»|†ÏÉ£D[*w–æ²ûø"ˆ/|…¯|ƒüñm<ÂwA|¯àךûq Çim¢ó´rNº]%4~OX•äxâ)BUÂu„hĺÅ ±° !‰'á«!$|u$N­!Ñï’È YˆË‰D⌠¡:Š5$ÊÑqèø*tükèøëè¼»†ÎiÒèhç5î—$—ޝ†ÎDgTÐépWÓq€V ¸SnÐ[Ëj¢\+L‹8ž"˜iÚÏÔ„¿µÕZñ¼•b3X v=èÎÒ“ƒ&iåÚõ¿T š„ðŠ€p‚p!$ ã=ט*]x:«þß ´Äùúfhx‚3Î6;âxTq7tâŽ Žªü›ãÑ–ê‘ü­´­úÞ‹fz^CשSÔŒ|ÏPFu¢µ@e”#¯ò£_T—p£& ³•ØÌâ}ŒuÎQ²|Â…Ç?Á¾ø 6Ž%¢opÆ+ˆ&¢mÜ…lJDÛ9¡gèâÍœø3l¡2é¬2ÜIÜ€;¨»û{Äð>õòÊÇCª¹G5Ùê«0ꣂ#FÒ:‹tÓIe’LÒ~JÜ=E‰IôÛqäð¿PK}Ú å¢PKë‹MRorg/junit/internal/Checks.classu’KO1…óòh£Iy•W%”¤Óî‰Ø XE€H©‹.œÁœ4™Aå_Á*R+•%? õÚ ‚a¾öñ½÷;öøñéÏ?ß±•C«>çÀªÖ,¬[Ø`È4¥’á>C²Zë2¤üsÁPjI%Ž£Ëž:¼ç‘2ßòîuy õz,¦Â 9`Xiùk÷#jdKŠ@qÏ>¸ίAƒÁR~xyÃvµÕç×Üö¸rí“^_8a£6-1¤¯¹hÌfeÒÉÍÕ³›d§CÛÙ¶t£€”µfgoºÅ~•k&y7ÆÑ+¥R¹ñ­K1p÷Ëq÷÷Ñ1c&×ö£ÀGR&?º¿[€…:ÍK¾ÏSßÜõáoG\…ÒW:k“aéÝÁ0ûÖC¹c§Ko&MOFIz-„Ý,­lŠŒbº>»£I93FÌ Oca”@ñÅ,Š(Q–.>£¨÷Šõäÿ"ñcˆä}ýÖ@t—"E`)ÌQõ«nERç(ÎO( ?eéŒ9?i Dœ‚æ|"5 Ú Ð&™üb@•QɤgŸ°H¨di¹DÚ²™­üPKº³s€¿hPKë‹MR org/junit/internal/Classes.classS]OA=C—nY–ï/ ¨ ¢mAª€¨IL•§Š‰|¶cÒÎ’é¬Á_ä+¾ ñÁW”ñÎöƒÒ–„Mvï;çž{îÌÝ¿ÿ~ýð¯=¤°äⱇ><ñAÖ~r–±b?O]¬2$·¥’f‡!‘É28…°$FŠR‰½¨z$ô?ªPd¼¼rȵ´ëFÐ1DzÆ0_ u9Q^*#´â•|¡Âk5QÛbðÞ‰S-nD‰!ý)RFVÅ¡¬Iâx«Th¸‘¡"žéâ ÿÊó®Êù«bH•…‰ù–2m }£¥*oeÛB1ŒRëìñj¬½+…T½? Äi\ÙEžöeYqiJÈܦÈvn‡h6{@»äôèÓqVÝèk¬d0î¡ò’Ð 3ˆúÆ–=·kwóí´y?“½5oßB³EÞв·F:»Ò–ð÷¼j¡>à1ÌÞ<>&0çâ™Oºæc.^øØÄ†—xÅ0zUòãщ ÃB‡Š½Ð솑*µ.ðZÖÁ±œm(ˆ´Ê4ד™övêQjfÊŽVH*ÏL¡ý´Ó™®î[ç=Ò±Á0ÜÐfºû%Ôõá{Óã°?ß@Ý='X¤¿7û$Àìñ’¤Õ:­ÙþÜO°äôÁ§¯ýÙ8Åy~„aŠbö£7Iñq²t“ Ê5ʵèTn}—Hœ·X“q|®1…)L“¡×¡È¤côlÌ8×`¬’MM_¹@ÿ‡œ³òÞò’ßá¬\Â=ûºž…‹\\f¡žØ(c½yÜ¥B.ɾ‡û„^h‰±{‹äuŠy@þÃØ{ôPKs‘5jPKë‹MR-org/junit/internal/ComparisonCriteria$1.classQMKÃ@}kÓ¦AkµÖo/UÛ FÁ›â%(U•zÞ֥ݒîj’öw)(‚€?Jœ A¥z0Ù·óÞ¼}ÿx}p€Í2¨8°°dcÙÆ ƒ3æA5ŠC©z ¥æ€¹pÕóZ vÄ;–JÆ' åÚïãz›Áòõ­`˜mJ%.GÃŽ¯y'FNwyÐæ¡4û´â¾ŒÀàž+%B?àQ$©7uØó#jæI‹PñÀóõðŽø‘V~( “¼z@žò±n¥žjõ¿\;-= »âLšž•ß2{†C¦OU7Ðq.DÜ×·6V]¬aÝE966vþé‹¡ømäª3ݘaë_dš•N72î_Ýmû¯‰7'›Ðm3µzûô¸½3+{ʦ跑§Y(;¤½AœÆî3XãSICkŽj…iZÝ$w(Î51—*xÍY¶ñö0A¾ÿAΦä JIÕ<(Z(c3‰8y†ùòŸPKkvèûsPKë‹MR+org/junit/internal/ComparisonCriteria.classW[pWþŽuÙÕj‹m¹‘ƒÜÆ®,ËqCRÓ(i¨ã 6ØÄNRÇ­ÃFZÛä•£KãPh „Ê¥-—B(Ps)!ÛCÂCfxà‘GžybxfÊwö"Dz(<£sþýÏþë÷ÿ»þÓ¿ó;ñK ˜R˜W° a–Š5„%?Œ«ÈË}I…­¡€e—4QRQ–üŠŠgT\Ö°‚+’ÿ ©ìYŸÔЊO)xNîÏKæ rù´Ôñiõ³òñªŠÏ©xQ’/E¸|^Á4<„—5|_’Ë—U|ExUÁkÐÇlÛ,æRÉ, Ć'‡ÎŸ9?pêÔÀÌù©áÉé±Éáq¦ñ‹Æ3F_Þ°úN^¸hfËGÂÇ,Û*$»Ï 9S`ç¸e›“•¥ fqÚ¸7ååBÖÈŸ1Š–|ö˜Áò¢EƒŠ }+TÔgÙe³hù¾ÁÂÒ2¥K{°h‘g´5ŠEãÊ𥊑ç½#É{<š*-{áèv·s¤£Ê’Y* æÖ°<%se™¢fŽf#[v jÃ+Ys¹ll>dþOëç¤yAÃ=õÂnÆ>bXùJѤGm÷h`¡ŠÒáb±Pä¡ê»Ë‚¸ÞÒ„Åߘ@¨P¡nÒçx¸h9ù°Ëô#™ðóÐè…9nÚ åEÖ°šŸ£/ÍykÅÜ»`–§ n䲞ŽëÃysÉ´ËÉäöÐÇÆºëaH1ýK!§¾ô3ïÙYvÎ\a‘ ŽðY«¼è›èªSºÂ%ïÆî,3[°ikúʲ9i,1îÎ{µ8M°EIšã›#@EÛî0[” ´n…MnPªLõ¤{ƒëhØT qöAE»£$å zJ$õŽ8Š#ÈЯ‡:J*€c¤ƒx§ %$MBÌû!"Šk©RD ì'ɤ8rìâØUÿ/à X#A‰X ØòQˆ;vÔHmº`3sî½sÏ93wþüýñÀ}ð;î䚦®Óñ,*YœT“ÃÈ3¤°)…™É°Ê§Sáù»¶˜ÇŸî~¸ÍP­7~>#9Òâø°Ò½H:ìVߺ7¦%ý–.4Õ’„ò¸«¡]C9‰î1Z†н5Æ5<Âcz«EÝ´]îkx‚§²öŒ¡ù?ÃPYr|Ù¹xM^W9âv öG ë4¼îY›ôÎkô¶Ý3ö(½2 ôd{HFc(,¤Ûá´ù8ähÊ©ša„DIžE·)k¦IcD™>¦F¿•æ)_PœPZ/Q´Gqœölý;X½:Cìâ_(C‘Ö\XL# ѨX¥hƒjÔ€5¬!ÚÀåP +§´±èTH»=Cb ­F´YZsÒ^%º®áúœö#Rag»ñÉO(7~!y‚T3Úê_Ð Êg”¨š>A¦mQU¢Ô…•" ÈU!’~Mw‘v¶"¡S;mÜ £,D7 Å—B–ÍPK7|CÇ;PKë‹MR$org/junit/internal/JUnitSystem.classMNMKQ œÔµ«õƒž,^<·—><{DP‹K{]Cɲû^y›ýküþ(1[5Âdf’ùþùüpó§9ο‹Ú˜>ÌV„Ño—^ù•pùÒ•†WÒʺæÛ¢z•ZÂÅSåß¼«}ظ½ç†p;;7™ÎþÝ"IÐBûÆøQ»Tò½ÔL?.ƒhñÑ*7ó^O¸ŠiãªÎÖÎlœ‚¯Ý?•yöŸ×—:$èkYd†wx¸kBs„cáWâäPK @áÎ PKë‹MR'org/junit/internal/MethodSorter$1.class…T]OÓP~ÎVÖ­tlC@D„MÊA3BBÆ4Ä1/f¸5eÔ­¤kM׆ÿÀÄo¸Ñ Œ^¯ýQÆç´ Aa!MÏûž÷ãy?Ûß~üPÆS ),iH`YC…`eŠ*J’x¨bU…¡bM ±m»v°#Ï”ªwl dê¶k5úÝ#Ëe9”Œ×½–éš¾-ï¡tìžô}×µüªcöz% uÏo'}B¶X¾k:Æt¼ã¦çó¾X®¨-¯ûÖô ´•¯Ÿ˜ïLÃ1ݶá[o« ì+Ã5…}X·,03ÜFZ¬ó°i&¤½ÍÛòÅp/Nh_¹, á߯ÉÚ/餆ˆ©¦ÝvÍ /k؆ÙlǨ†¥šçoOv‡¸ZÓëû-ë™-œ»Ø³UéÇÙÔÜ–ãõl·)U”uŒB×±ŽG*6t<ƦŽ-<Ñ1;ÓÃâIý¤Àüµ³Èþ_›ÀÄUÅ Ì]ƒÆ±·­ avYÞD¾p¡ÍÀgQ•‚E2dÇìu¢Ýä¢r0c݃ÚëÝfµÖØÛo<˜º²Ù¬qáSÜPßFœ/;Å[šœAÊåÅÈÊ7ˆ/dbã™…idxꑲ¸¹æì×ÀùÁFHW‹gˆ!¾SŠè¦2;©|D†ç'¨±ÏP”Ó¯PŠ¥ï‰ãô<ÊTèarYäøÜÄ8ˆ/£nDȃ¨’›¢^„Ü4¹½–p 3Ì!‡YÜ&§dwå´Ù½ F›^)þB¢Ä÷ êé•%Þ‹ σ¥ xw Ÿ#ƒBé9û!]À"©Â¿ ˜4ØYÎ'ôMþPK´¾¦[e„PKë‹MR'org/junit/internal/MethodSorter$2.class…S]oA= K×ÅR¤Zk±ÕòePã ‰AM±>Ðô} +]²ì˜a1þÿ/¾`âƒñÙe¼³»iPJú°3wÎÜ{Ïœ{ïþþóã'€&^HáÀ@ <Á¡²Ê:*tTuÔtÔup ÉöÄ»ç\:êšéLÀ`žxž-».ŸNmBö{BެñŒR[ŽçÛÒã®õÞö/ÅE_H:´Ú úPL>qI‰^–{cþ™[.÷F–´?ºöÐüÛëo*' ±I“aw½òh1!•3£¸Ãeƃ1…´W‘€áKCÉ_¹S7ĽÑwF÷gJÆëu9g¾ãZÝà Üòxý{;”×è‹™ÚoUã­å²©8jÏo芩ãÂKG& Ü2a¡¡£i¢…g&žƒ^¾³ŽÊÄäJ7vŠ!ó¿,†ÜuºŠ7d£¦lÿ”OHY®\YªCß—¤§ýYˆQ£A9 ÛåÕ Õ¦”/Â4â)šÉ úâôQaÔ„’eÑNãŠDõ;Ø72bHÓš À¸M«:`Y¨Á¦EÁ’¼5Ú µbuúˆwò_‘ÈÏ ÑÑ™_eÍÞyŠ- ƒ"KC5Ì1(kwÖî‘£ˆ,vpñÌ+âßøß‘%']­ýB¢NßÉùµ"†ŽWiÂ÷‚û4=h/R"‹ä«öÑ®aŸÖ­ fÔ© 6õPKÙ§Š7SPKë‹MR%org/junit/internal/MethodSorter.class•TmOÓP~îÆì(eŒã]DP·1™tCt†$ƦŒ2JJKºŽ¿ÀŸƒ’Jbü¤‰?ÊxÚŽQ^Ú¤½÷žóÜç<çÜÓûûÏ·ïâ(pˆóÇ6Lš³'<žbЇÓÍd{Ö†ç<HrxÁƒÇ4‡‚ížåð’CŠP¢ªJzZ+©ÂÀe泩·¹e†`nSÜcUCVbimk[ÔECÓ ÍE¹¬ŠFU—Ư%m«"ªå˜.­+RɈå%cC[K̯ÊÏHÓó…Ìba!P–ŒŒTRD]Z³q¤d,ä`±ô%Âï34¥µ5’Ô–“U©PÝZ•ôeqU!K §•DeEÔes]3z(ÜÞCû¥( |©ž UdëTQßµáƒç£ìnŸFê¼!1«¿”Ÿi¿>Å[IY•w(¼B2éÊiz9¶Y%WLV IWE¥¶§¨é´6Jl/èÐBŽ Yù£ ]Ò×ntê¾õs@†ÞÆ$ …ÿqCÏx“%¥–;_ÔªzIÊÊfqÛyŽ™ ÝBs˜FF@ݘç°€Wîã€t XÄkoä§ÚÞPÚ‘ø?`Æt¡“að ƒÿ¬K«›Têç ]ÂÐJg™RUÍ YS&¯øS±í¢’„®o6ÿÙ1¥t]Ü¥ÈMÒÉ 97ÚBW7ŽÙ¦žQ©ÒY ‡ÂŽ®Ð«æÅS9Wóç¼bçŸvü¡Ý¡]‹!ºìüteºÐcž-]w·­UÖ]çÖMh¦~è¡y/Y>Ñè¦ñN¤ì®`Çpç"‡hÊþ„7:z OtŸnôÑ7}'á£[¸SÄ=~º}ûÉz×f½ „ƒVä´oˆ"ݳ\5Ôp¬ë¡—”Ö¦º éî†'r„[Ÿ-€)‚·(f(•Y+°`ƒð!ËK=_K/S#D~ûn?ò^†C4ï×Ù|–ì9bKˬƒ1€QDi´¥="ïX]ZÜÒ@¾ðïŽÐrîÍZà3¥2‡ÔVûh³ˆ±Iî¢0æã%¯5þPKBÎu/÷PKë‹MR#org/junit/internal/RealSystem.class}QËNÂ@=ÕJ­‚(à Wà‚ÆµÄhL4D(û¡NpH™š25úWêFãÂ𣌷¥Š1ÄÍ}Í=Éýø|{°… X²°Œ• …Uek “;RI½Ç®ÕÛ Æ-²M©ÄiØïˆà’w<šä›¾Ë½6dÔ'CCßÈÃZÓºN/$"G*-Å=çBp¯õ0Т¿M‹â^jJµãXÄEØ1ƒu(nár-®–.B¥e_´å@ÿ¾R¾æZúŠ4ŠÍ¿ãŽÇU×aˆ:í‡Ä\ªÕ‡ ÒwÎ2ÑÒà‘´ÕòÃÀG22œ¹jDë6LL™X·1‹¬ª å?Ã9ëô„Kê•1“+jÇ`¾G…±~Q…A·¢»ÐáÒ”ÉÅ ueFybó쉊,Š“Ã!¦)ÚImc†2‹>E$x—ºTô¶òŠÔlÅC›4gb‚âp)!ˆªæš»ùDn!&/ÐöÐY#qf<#ýøÇXî—1ãÇX)ÞZüPKÌ[M¡PKë‹MR7org/junit/internal/SerializableMatcherDescription.class•UÛNQ]§-´ µ€@•¶ ñ´bâíE.&­x›NíéÌd:5àŸø˜hPI4¾øàG÷™eZæÜöÞkí³öî響ßXÄ ä$Ìa>Ž8îD±C^Bwd¾ÅR÷%2=ˆâ!ÃpCqÔ:·Ÿó¦jk–£™®ï)®µ|ɱ5£V`è/j†æ¬1ŒeÖM»–¯+ ÕæM'¿ÑF(d·"ÏÌ*gZ× ¾ÙjT¸]V*:¦ªèÛŠ­‰½wqêZ“aÉÅÛk|^3nŠž/qrÕµÂsã\Ž”OÔËœ!Ù=×à'=°Nˆ—ÿŸ±X.Ös¢+Ù‰5^Òj†â´l"™ê®SÛUˆåÝ€ÍøߪìqÕ)dw˜,†gbªnf^&É3D~O¢ê/îxogJDiv‘a¡WÍ{I¿Y,¯žO|íBI.TöUwÀ`ÌS¥ÉqíÍ WèW2[¶Ê_j¢f.®ü‚À1ˆGQ,ËXÁª  ³§é¼1š-Ë2m‡W·,n+"îžÊ=ÍWÊÔèi:­5,7¸á¸niÓÐÒªb‰®i¦:Oûê%x Qe<ýöFºÝ‡añ¿ÛYà1¤zÉÇΈޙ 8´ƒÀ[£ŽqO)‹3Õ-qý]Û·"žl·W%ÐùÞ©àMõjRªbYܨ–ù¾ã6æùøÞŽ4½| PÚô ‹2Ò«AH¨Aã%ÚqšC4äŽÀrs_ú‚ð':ã2ƒ4I ºJá);7W0¸«Q:cäá·¥:¶1²Ó:„ Z]Ã$‚ú5a oé‘á¾#ôÿìðö“Èÿ”OêðI˜Â´Ç'»~’ÇÇèÂ×=ômïbò\î3Âß áíé½$×6Mâ¤}r‡CÆ Ì8d#†›¸å‰·Kh–Ìý†”û…ØGôåß!5¥Ã3*fÅ)2ï2¶Q“®vðñ$]Åà)v›¾öjwÎþPK½6ìÚõýPKë‹MR5org/junit/internal/SerializableValueDescription.class•RËJÃ@=Ó6MQk}¿«i#\WÜ(¢Pì¢Rp9­±N‰‰¤Iþ‰QAQ7.ü(ñNÐÖ¢¸Hæ¾Î¹çÞ™÷§ÛÈiP1«aóCP° bQÅ’F沊¥ÍíÀbÈ”š¼ÍM›; ³â{Âi’;Âþ.ÃTþ[º\kZu¿X¨2$öÜ3•„c—5Ë;á5;¤sëÜ®rOH? &ü ÑbØ.¹^ÃlDm Ç·<‡ÛfÅ¢R[\Ëʪ”´oµêž¸ò…ë{åEý&xëŒacÖAð”ïv'e˜ÌͯUÜÀ«[Bª_ýMâ–DëÐU±ªc ë:R"æV¸=2˜ÿ\¤fH÷ÁÏË‹H÷«gPÛ-Ÿÿ½‘h^déU¨ {¢/#åÓ Š#&[SD'#Ƙ±ùˆØ=â·ˆa„þ£T¤‰`œÊ3äÓ]Æ(ŽÐJQ–¶Où‰ˆöpLÖoÐŒW$n g(§Ô'Ùéã_ 9‹ä/‡üz²‚ìILE¬&2§wˆ‘$Ã`îX‰Ä1¢‘U3ŸPKsrk‚§>PKë‹MR%org/junit/internal/TextListener.classVû{e~¿d7;ÝL’v“´¤ô²šn6iW$±!m`KÚb’¶R¯ÓÍ$™²;³ÎÌÒo¨UŠZo Të]À²¥ x×çñÿÿ õ=3³—$›Ðæéw=ß{nï9³ÿúïÛï¸ÿìÄ2¬$Þ³IÜG7qUL¢[ÎÊ2|: ž¬|YUx, j8'óy¹¹ «Çåú3‚ðÙN|Ÿ—á ž»/jø’†/k¸(§_éÄWñ5žLà) O Æ×5<“Ä.|C†gë9Áú¦†oix^–/h¸¤áE ßÖð ßÕpYŽ¿—Ä÷ñƒŽƒÏ„ü“ÝøQ/)tœs-ßtúgÎ9ËÉ=ìZ¶?绦Q:@q˶ü …Û33Ž»”;[á6G ÓµbîÈ nç.x¾Y:0|R!6å,˜ =3–m«”Θî¼q¦È“ÔŒS0Š' ×’}tó—-Oa°ò¼yÞŸ±l›®ØáJÒïe†Â-™–Έ}=¾éù³{š^yËæ‚ÂŽf¿ÜŠMu¹YÓ«ýàA‡¬ÖSèÔ9ßp}AlxÈô ®Uö-Ç`; »6~)˜6¬bÅeز-ØŽo-ZCä"É@Sb±ölïM¾ŠÔå—lÇ6-™þ©ˆ&Û2Ã륳,ÛMcAäb™#rê™·JT®Ž(t"‘æ=f…e…6ë…¾¶â[Å\žª ß‘´k‹uéÍMB Þ*‹ÿó [W’ëB¹F°ûV½¿ÉL\o¶Vaüfƒª,öRŽÁ±ì¥Ge×\´ÎK!¬¹¯oÚq‚ ÷šE£ì™ ¹I/b…2¤­Þ&眊[0§-qxKsÙìé^Öñc<¬ã˜”á÷àÞ^Õq?ÑñaÌê8)L%ðSWñ3ÇåÉÏñ s¾Zéý«d¹C,KË‹_èX€©ã—ø•<ûµŽßà· ¼¦ãu¼¡ãw¸FKç—M×LŸ3¼àÉ›¤V:ÊïcÝÊ@ÙÚ7¦£Šë ¼¥ã†@½wöÜT.ØZ?‰O‘cÃTù{±í2¼+þoðâøCÒãi¡>YE©a5=™Ÿ91{xnppPL䥗¦Æ1šØ5šN×È,Aø3®%ðÅßtüÿPØý}Maxc?Ø©²»6n| íN…¦·g„oÛÖéVŒ,Ëy¶V–faö¶(if×(—M{AúéÔzUŸˆ[dÛ—iAü5Gu¤²}§Æì¾LKb÷·B”ÞIM$U{ÜܺWžÐNË;\*ûO³õxÖã¡ûyùä7´ÔŠúÍ eM}*µö”J— ïÓMuv0­tôø™³fA¬í¢C¬Zó쑽k•Jl®Q ñ Ì”díÌU Óó+Å0Ìå”S‘ÛžF`¢“­6ŸÊsá×xÚqK†>ÌÛžoØ¿½f×Iùò.Foú3‡Zä ƒümr7W0ÒX 5§Øgîã8ÆÝÚøtfGn@)\GÛëܶá@ðcD®¶pNaœ«­¡(>ˆ‰àÇJ'>„ƒÀÉp:Lf¯£=;ò&b ¼n´sìC ýØD´f²Ž™ ÌÌûi\ˆ9Çw"Õ›©"^E‡Ì ´xаÀvh¸]ØÁýÎ&½u½8„Âi<°& ×Û¼¿ŠM§VGaómëDáAäÀ#x¨%àáV€Cœ÷®8ƒ£à±u,Ì·á<º¡…mò݈s .€¯Õ¡:‚û=ˆ`bò-ŠŸá©¤rˆINVi§w ?r]©î*z²»«ØÌ¹Š-U¤Và^$H˜=ä`ÃØ¡º±CL÷<õÄä³êS÷p×Á»+LyïÑÑèS¸LfqÕOÉ—‘m¶`+5‡7UlKÝR·ã*ö6‹ ¬Û^‹MðôV*Ž Än`‡hÚ/«Š_¡]cñì@¼A7{v^lWÞ¦¯þïßâm{àm– }”vÓ»Ë å ýZ ÉÀ‹Ìð«LŽDb‚>^$sO2ûqجÛSøHÀê+õè\‰ØÇKx§»EÞ|£ÎG9 ï>Á»˜|_£œy”èïkŠÁ(íO r`\o«@xp{w¬NÝ ëà(Yv,08ÖÛ˜®‚•A’ˆ…zÿ‡;Iõ%b﹌ãMÜI QWsnö†6e$3ÃÑšiÖR»¯"žÊŠÙ#MyoÆ\¨aíkÂÚ®sµ„¥¢‡ ?‡Ø™@ª'HönRqÉ8ÇDœf* ë3 ö wƒº—êþ_Š’“_[‘דQ©t½…÷í~ºw:UܵºÞ Mp]u¸®¨s,òKÿPK |ZóþPKë‹MR%org/junit/internal/Throwables$1.class…RaoÓ0}n³¤ÍBW6ÖcŒm‡“øÆ4 M U¶jßÝÄJ]Gr’‚øK Òøü(Ä9­t(²s>¿{÷Îw?~~û`÷ëXÀ-6¶±Ûfk;¸ãà.Cm“v"³œ¡Œù„ûE.? Ïc{O*™ï3¬tæ/»Ç ÖA †¥@*ñ²x=zÀ‡ y–ƒ4äÉ1×ÒœgN+ÉŒ ^_)¡že‚<[Aªc\P*_ª\hÅ0Ò阵wII5$qµÓïN…$\Åþ«áX„Fç‚T‘xËÀú õ#+žšRÚ„ `eò«.!6þ¨åÉ0Ë5sSÓA÷ 쥅Å3iT/ýòÀ„‘ç© “4“*~!òQ9¸ç¡ƒ®5uôìx¸Šk–±Â°ùŸòZ "©ÿ ehðìPL„ÎD4 Ø>ߨóm¥g î5þöã!‰MÚMS YUZu¸Ô±E²¡Bàöv¾€õ¾¢ò™Nx´Û„Þãí^i»hà²a3o@(Ãðœ ÃZï„h¢Ê°YÑ)¬ >ÍÑ},éZÓ±®`•î[%z,zé3‰lšüŒüÃçÉ­×u¬—ÿØ(½7±‰f‰£ +s×~PKmäÖëUPKë‹MR+org/junit/internal/Throwables$State$1.classS]oÓ0=^?’eƒ ûÖ ¶I¤å¡"4Ôe¨¢kQSm/•—Ym¦ÔAN ¿…1xM|¼ó£צ‚*VKޝÏ=÷^ûæÇÏ‹oªØrPÀ 7qky¬X¸ma•¡ø4’QöŒaùAóŒ¿å^Ìeß 2É~­±}į'§‚¡ÔŒ¤h†'BuùILÈb3 y|ÄU¤÷c0Ÿ ¢”¡d<£­ÛR¨zÌÓT †ûÍDõ½³Eõ"™ %yìu*y§Ò²q,Wk soTŠ4ÕžLÈo{-Rr†"$§->4iÿ£CŒ ©PDº†Ò_‰‡šKˆ/Ã8I‰{h”\±naÃÅÜuq› [SÕŰ9ÏB™áñ¤¹¤âjM?ÙÚIT-õÅ–«• ÃÒ¤‹}ͰþªÓ®ûAÐh½èuý Û;è…˜5 Ѭ´³³³3¿™ÙÝï?ÞÐD]„› J¸µˆ<Ö…¶!´Û6%l1ä¹¾?f(îšgü×<î5+]ØîT²zpê0L×wº“ñ‰ø‰G–3°¹wÈCWìSc6¹CΊyL[µãûN¨{<Š2ƒ¡báP;›PVÍõc'ô¹§ FaðZ¢rXnµ–^†íD‘HÌðpF}ÕyXDRÆN< N»|œ”ý‡<¬`ÚÎ+z(üAܾd1|Û "ò}–Tȸ+a[E;*î¡¢bWhUTvæêa{? 5†³Þæ’Þ›mñxÿu¢¾¹-®¸Üj4Öf]ñ †Òó~O7,«Ó}rÜ7LCtzÝc½·oP³ó¾Aš©™dú‹Ø<5ú)ló’žöôw%ˆ±@SÆ"ý(…´²ÈK­¾ÎÞ‚½I<–HæÉø•¤šè2®`â/®àZD« Þ¨¿ÃÂ9¤ d¦¤fÏ‘«M/›þæ‘#ù‰ªøLû/ÄøŠU|KøÅ_Œ”/´U¬9C'"þ:Y@•Š 4Kt"‘¼º¯P4ödÜI"åŸPKhR!öÃPKë‹MR+org/junit/internal/Throwables$State$3.classRÛnÓ@œmœØu Ò(½AÓ6 'å¡ T”¸(jšTqT$T)ÚºVâʱ‘íÀ·ô/B_@<ðB|⬉èÍJ;>{vÎìï~þõñ€2Š*dÜU±„{–g‘Š€Uk2ÖROωž1dr3þ†ë.÷zºŽ×«ÔóG RÕ?µÒ dz›ÃÁ‰tø‰K™ù†oq÷ˆŽX“RÔwB†¤ñˆ–ZÝóì êò0´) †í†ôô³!ª;^dwõN?ðß 0fUæ^¾e‡¡8˜áÉ„þòÓh‘’:°£¾Ú䃸ítˆaúÃÀ²÷á!})ñPp)cx–ë‡Ä=ˆ•4(x cCC›¶l#§!ÃæT6¦àÉ(0<žt7Wx/WÄå­ü—D¾¹%~qv§TbXœô‹_]’Ê‚´zØnU Ó¬7_t;†Ùé/[íýnµU3Èý”—"ÕZM¢¯]ac·DÏU†34ÌÒ#R)Ú„„ÈŠËì=Ø»˜1G˜"ð¡Ç ®á&Äó›Ç­qý1}…ââÌœ#YQ8‡|itäè¯^I¯ÔÅ7:ý;nàð3ÖÏüÑë‹h‹¤œ Q›2 N…ƒ4Í%Ú‘ ¯×Tê“Æ®‚ûq¥òPKšÒS;÷¶PKë‹MR+org/junit/internal/Throwables$State$4.classRÛJ1=ém×Z­×ªÕ⃊¶‚«"ŠT¤à„Ú—ßÓmhW¶YÉnõ·ôIðÁðÄŸ'± h±]Hvæäœ“&oŸ/¯öPH#Žy 9 ‹ ©OzÑ)Cn«zËï¹ãsÙvê‘òd»|U¼aHœ-Á­zRÔzݦP Þô ™©.÷o¸òtÞQÇ ’õˆG”f®¤êÌça(Ãf5Pmç¶G·:žŒ„’ÜwÅ·KÛ+ììÉ0,ÚSÄÞaÓž1±1L@zÙ¾þþÚ1Vzü¥ü0ÊÜ÷i_©£)LÓy3&›Åœ©G×0N+OQ HŸ§KFiPKˆo—âuæPKë‹MR)org/junit/internal/Throwables$State.classVßSÛFþÎØHÀH ئÁ@B)…Rˆ-7ÆN-‡Ô¥-F1"B¦²œö¡T3¸‰§L;yÏ{ÿN÷$•`JÁöÌîn÷ÛŸ·ÒŸ¿ùÀ ~ÂmDKHc]À¤€¬„Q<áäK9 "T y<å« Ïøæ+¾ÿšl øFĸ„në[߉˜Ðëí·|/""aÀÛk¶ED% {û¢€†êhŽÎ §,K·¦V©è0ô>ÉeŠª¦2·²ùGJn+‘M* ãé²]ŠïU-É–£Û–fÆó»vùGmÛÔ+c.à"ÃSúyEÍo­åVוgÙÜchð”@NYK+‰|*›ñƒÉl†˜0¶±š~ª¨ w6›´ÛúR3«<†H$Ú¬N0QÞ¡$t¦ KÏT÷·u;ÏȾ –}ΰIïi/µ¸©Y¥¸ê؆UZŒ6 N—‹š¹¡ÙîC-m_çgÿ¥– Â\fè;Çj*ºAÚήA1¶©FÉÒœªMH-~Ð~`—‹z¥ÂCaè÷wäIñEÞÖŠºbêûºå0$¡Ïœ7› ÿ 8|!žrgþ¼p.14³Èà ü4ÍÉ KñÅ,Ã襊 âRÑôS9Ê´bU÷—š p™@$µ\µ‹úšÁËÖùAdŠʘÃÇ2büOÊxŽ’€]†ÛM€Ë˜†áê3\;›—UÃÜÑm~¼ `OÆ ˜2öaQ¦d”aR"Qüù§ ÌŒ7aslFÆ8î4)<+c¢iá{2"M ß—åÂW‹Âpó’¢ÒÈ*šeÞÛ=‘è©’f·÷ô¢CÕ¾€aîtºoñ¼›Ýèá^¿ »i~–tÇ˸·ºÑ·÷Z;8Ð-»wÏ&ÿÓ¤ØAð뺳[ÞñðE§ì‰$Gh”Òk%´2À ŸðyÄçQλy“’¤€6|„»4â§hw‹8ÿI‡£å-‚¿€ÿ8ÑV÷ì5ÉOÓkË“ŸCÀ}Ú~¡Ø¯h}‹W4(Ì•=1ÜÃ}÷œÚœè”ûl¡?9›ªAxuº€yî;>qe‚AÞé´îÆ"–|6 ,@|"V‡X¨¡mòÒ1ÚÃ2Zwðõ"ÇèÌ÷ñƒ£}ý÷ôEjŽéˆdÒñäeÃ%²ökyÜ öõŽ Œ /ÁáßOÆ3Û<áM‡¼½©IzW5OšÃÙé£fz,v4AJh05KŠ¥ãòî½™ãq:ß8˜JOužÈRQg<™1ÓÉX¢sìx:uZØ,šJÓq¾ï²úÎL˜3™x*©Ð.ò.ÏÞ³©ˆšç¦ÅkËJ(󌖦˜~÷<…5KB_‘øT2–ɦ©ø¶mcÝe·/%ÿØX›ôLlâd&› žM¯ïS>³ ò©‡Óq†O¡Îá§\n‡Nÿi—£6Ïq ™<Ãj4–ŽOO›“¶]cŽ]u™Ršd˜¹«vôd3ñDç`ÜÊÈDp6‘Q¨_dõîl<1iŸS·ggr˜X_¢pÛb×·S¾¾œ®M— b±©^36q\aÝ‚3rÚúæ´™¶ŠøzF¦H|€ÁŠeRâˆáFÆ={•U*Oô.¢‘±2!c©äD"+5£Ø,§;4/_ëí&ÂÃ;— V©#·žk‹ÍQ_%žwaŸZÞ´\§Zy›Ë7­é§Šâb©Í̘ÉŸÌ5¬—,é/•ÖìªV©Æ“¦•qev–ê/›ÅåÏŒY£æ)3m  -b÷¦E6—+£„Í[[z<[œ f÷Âæ8rô’ïŒ%ì‹è*©[ct¶?›6O§Ò'€‘^ì¤ ¦i›a˜ì„DœnÙÀdÖs’Õqk(–™8N‰)\FY™;TôWô$èãg†X:½^¢a&ù•2H‚±‰ |}׿Íl+g6([„¢o›H¸÷i0’ʦ'Ìþ¸4ŪBíwˆ5žÁÓ.ÊrqYœb‡*×ô9”éôS×j­Zg¨T£_ÀÛ4Õd¨ÕM>‹YgKàDDo6ð9ºwD¶†p±’¢Á1´˜Jç9- Ð<'i?FÍ5‹!ŸI§äÚXä¥Âžð²QØt£¥wÏÈ0=ñ†$ØžØdé]› S¤YÙ£NW‡ÊÍïLD íå’¹Ìß„ör'.ïç†CÞ_ "WHa†¢àVW¿e^u±DC5tiðã¤ù´lS2ä㨭«ÍÕUÑòż¿M¹µHGE‰Žvœ¶©gh×Y<è:fR§‡Ïë¯Àƒð ´hëô¡–¶YZg,¢"à.èØŽUØ:ì´lrTàgíuÔà!¼‰¬¢Ù?‡Ÿ§tç<çÙÅP¬l½ C‘¦ómåÅ+¨Œ¶Ì¢jÕC­móXEjHž4¦F ñ؆Üë~Fú*1ÈGЈƒX»Ñ"£º\£|¤¿ЄFºñ/»ëžÇÚn_{½oë†Û/á†'ñþ+hŒ®õ½qMÝþzèÆË¸©‡[=k/ãfEZ½æ*ê«H¯÷KHæ°>Ô<‹ õú,62Ž‚óW_¡má±¹Àµ‰\Ž¡õ~û19‹–Ó¸!/Vï¿øhÅÕóW÷Í£­Òí¨âzˆÙ;Ì]”!½—p:‚܇ݬšaÜ{0μ¾‘ãûQ|†ÕóUÂçk¬—o±N$ä÷1`oÂZ¼ï ž)܆wâ]LÕ0Cý‹ ¾Ÿ?_âWSxÅþ*ˆz5œ¯ãÝv’ªð Þƒ÷25xïÃã´RÒUGŠ£í1jsøßO~Ú`9wº8ÛO)„ê´‡:<Ï¢s›/`ñ);ñ+Y®+m¨Ìò÷é|Uæ‹((óº«÷rKц/¡ë%ø<øl¡ú-³¸åyÜÊß`ësç yÏÃë¹0è¹@9ÐlΟ×@ÛA›ý,F¾7°^š¹ ¬–t°Oà#”ÝàZ!V‡ÝHå/” Ô Ôã#íaÃK²dn;‡¤žXÍ[£Wp{´UŠjwÌâÎ9tÏ¡gH09‡mÃ,¬»¢ÝÞÑSï mŸÅŽ'P]ïÅÎÐ.¾œ»úƒvÁµà&ÏY•'¿úÃö‹çáëöÚXRÌø)ÖùnS[Q°Ø*Yn5ÌZ;ËK0±ƒy?ÄŽ qf0ËLŸfæd.bœ6ýØFô} 'F"å|‚»J|’4ih#øñTA{‰ÇGì,>ìF(WÜÎ·Çø­€‘ÏþÚßǘ²³µ}‚`üä5¶¿ üíuo‚÷Ñ1ѳ¹Å.ü¡6·ìojs«¾w¸5´ÇKä­ (¿žWýT}O»QßCŠð4´\»ÐÀ9öùKØÏݹ²)¹Ø~\tV.ÑI©gò·¸uê9@=%òÊW$¯çåù—Õ•œÜR“[‡ÚžÛîÙê­õ®û4Új½[º}-ÒÌwœƒÏ{áQ¯:õµ"óê¤ôT«UëÔ 4r߬ªò^Í2žåq>òߌ9®‚û&Ìòš²Žyz¯‡®Y²»L>U­ã y;óÈ<*J£S»`ø¸"j(ü[e…Õ5Ó®gó£ÏlëX~ó|]Õú³èzBC‘¨74‰úB#‘¨?t0ÕBwG¢zh4­ö‡"\µÐXäìó:?ÃýþjÍy9$Ò‡Eú‘ŽŠô½"}Ä–¾¼ðª¨ð4ø5Ü??¡ ÏÙŽ|‘÷‘3­ÝÏ[j|Oý¶¹úÿPKþæïF ÄPKW@uWorg/junit/internal/builders/PKPKë‹MR@org/junit/internal/builders/AllDefaultPossibilitiesBuilder.classVmWE~&Ùd“e "+ÕÚ*I ¡V ‘šB©ÔVÑ€o›0Åe—³»Ñö§ôøÏѾÈÑÓOýàoðøÔ;›% ¦©2wæîsŸ¹sïÜ;ùãï_ðq'Š×ñ‰ŒU…ä]1|*†œÖÄWp÷ûðÖûPÀ†6…eQÆç úqGÆ bB– aKƶ‚a±þRÁˆ_)òk†ÁŠfn:¼PÓ]¾ÆÝªµÃÀ¶ÂÝÔÝE†`"Yd–¬Î0ÓMž¯”¹½¡• Ò å¬Šf5[k_)¹UÝaÈä,{/½_#¢´nºÜ65#]®éÆ·tÖ0–ù®V3Üû–ãèeÝÐ];·ê߈%±%¶V–ù¡Í+šËɵøzÍtõ^ÔÉÂàYÓ´\ÍÕ-“¶ÉíkßkiC3÷ÒM"ê·k¦ÉíË^24‡“‰¨§[H¶øZ‡§×=AöẂvï’¸V©2Lt@œôÅÎð‘Íãô+ ÃuGj®n¤W)Bšk‰oQ—;®ïì`‡¯ ‘“(2ÄZrºã.ˆ@œÊÉÃÓ¼ ·SeR‹„¿ÑF‘éñ ÂV¹ý Â½ Èø†kˆ[1´û~ŸÞœÂ}oã$GÀ~÷SÁWx à!)ø*¸€‹ T,+ÐP‘¡+XÁª‚*±%wT``¼É^X^Ó5Oƺ5 ÇöÉ@ÂéW‚„³¯52X°%¤÷Sž#ËPMã» UgÇfð»9ßõìZ"TMh"™ÄY7áVm߬$ªêc=¡&6üeÓК˜†Ž¯y¶“xÂ’%Üíæ¢I2(D¢Ñ»c26| GT_L•7KšUi©D$)æbÛrºeè\:¸÷šó)Û´â͉=§ú@r¯Ní1Ü ÎÐü‚( ·+ÆŠAØsŽC¯iíè+&Ï=»­#¡ÓpÃqÁ œ>úÚ¦ ‡0y¹fy%\LÞ;0©í@-F}ò@v²¥?™ >iÝ#¼±;‚ÔYaÅK-ãcpGÉßËÞÝ<~ùVl§¦z.'Û-^¾áwhÛ±EŒð× Ÿ8ã|$¼¼ ‘Ëf'%ïNsMðm–²îñÔ¤Tút< ôG¸æ0O‹<ºPÀ;|;jã]œJxåLÄY¼G}áóGîQî™t>ó£™Dž!ú‘ÂøKIÿŠ{òm¦2[ó?ý÷´IýHõq-r-£·‰\dUB w)úîC/F‘¤E×1òªLUiòØ`uÄ¡Öx]+MŠ?õZdñ~ñy>œo\E+”íaâìüýܺž#þ:Iuo¶à «ô€˜2–ÚR¥ážácˆGárŠ0ö%R°aý$rPƒõtô(K‘(¥gèáËá¥H†ä‘èÝ,¤c éRtýB'V×YЦ~FǶêD” &b¿cp©(Ô9£—ç8º…c€ÅQöñr\Ç î­ÇQ¥Ä d’nr¬Þ‚¤:Eù-^²¨£dã2 {Š—f‚”(Îz£ë˜ !¨tpl™F¹„ìJC&k÷]%=PŸüPKO$EH) PKë‹MR0org/junit/internal/builders/IgnoredBuilder.classR]KA=×Äl]×ø‘˜ÚOµ­ ±8|S„BèC->N’aYgËìl¡ÿʾTh¡}è*½³“¥¸÷kÎ9sïýýçûOo°"À£C<ÁÓÏBTñ<Àj€5Bm_í•Í­.¡zœa¾£z—_ô”ý { W–:i_&]iµÏ‡Åª;Óáu'µ±8ÏYHhã”52½\'e3ñ66©Uƒ£2ß#ÔmnŒ²'©=Ndæù›sùYŠDšXµ½­$K¸x_8æÏ8•¹!uñ“кÙê—O×í6'Áûí¯wªc#]n"nµâ1ÿë&<…_ëÑ aÚ,ë\1ôÚ3ÄÚB‡*É侌x&ÝŽµ‰Ó”ÕTa1t/QÊP‹ìµH#-M”a­Ý™˜É oä:o¤e~ =3›O|Ôàú¸‰[Ú>:t}<Å3šñr«%¦¹¶N#å¶ÙAç¿ç¦g°/µØ¥›*ˆÖÏYùìØ†áöEtÝ‘<ƒ\fâL`ãœ'y1ýŽ*}€Þ§Ù!I¬Q&ÝÇÒëäyO²DÒ ¾ƒÝo(“UFƒÎ:IŠ BU.Õ,‘Õšd£I¸°Ú5‹¾LºOrâYœò­ÖÂ*†íUÁævƒ”OP9¶I [fKÔls†È¹¸ŽÃÌk(à^X¨_Qú…/S´ªõ¯X¤I[µ‰nÁfÝù PK£˜†[PKë‹MR/org/junit/internal/builders/JUnit3Builder.classS]OA=Ó–î²,­¥Zð[T´èÄèƒ „Dû`B¤’èÛPÆ2¸Ý%³»¢?Åÿà¾H¢‰?Àe¼³»Thc“ιs{ϹgîLýþþÀ#¬:°qÓ…[–äqÛÂw±báž…û Åuå«hƒ!_oì0ÚÁžd(w•/7ãá®Ô=±ëQf¡ô…·#´2û,YˆöUÈÐêzÀbâʤö…ÇwcåíIò—¯)ÿøyº]c(éØ÷¥îºí‰è«õîø ¸'üOrk3Ši9•ñg#Fµ2Ád¨wúéðÔíÅñâõæÕ;/>öåa¤?´P'ým5ðEk¢ð k†ó/wŽ ·´|Ò#ÔqÊÉÞ2,NW¥_œí Ö}ÙQÉÈÏMî¡¡¸˜…ãâ ®2<˜2ôÔÍéÌŸ&Ú©5Ãl0,¥„wZ åQ ßsc´-Bi¡é¢etÿ}™ +ãƒù—ÍcTWý{ÞÞ¾޲ ™2zƒå±$Ã> Cs-Äëè`ˆezÓ6Ì'f†Bëí8!#œiž€}¥ —Öb’´0O«› „2!‰£B"†,s„ÕfërŸáþ@þMë…cvœt2R%BÀü±æˆ8ŸHÖRZ&i¢úÒGíLæE5Š „‹XJÌ]¦•n“"c`“Ð(ÙUÌ…â—Q×ô•3ÝìQ7{¢›uK{\£èzÝøPK–kÔMPKë‹MR/org/junit/internal/builders/JUnit4Builder.classRÉJA}ÄŒ×hŒûvŒŠàMñ èA‚‚KÀc'6I‡±'ô̸ü•ž ~€%ÖtÆ5"ΡêUu½Çëêyy}|°=˜t0å"…i3f²ÛJ«p‡!½\ª0döüKÉ0TVZEWUiÎDÕ£ÎHÙ¯ ¯"ŒŠë¤™ *`X-û¦Î› q¥Ci´ðx5RÞ¥4?<§þæn§Üb4‘ÖÒøfÏÑ×–ËMq-¸'tÛÞVé‹bgœŸØDü\(ƒ0¡æ»˜ ÅïNïZïn ?‡·WvhÞÝ¿­ÉV¨|8˜#ýSU×"Œ Qx—µ˜ó—;÷ÔLM(»´ow_¥ú‘…Ã0ñSá}OñùßÞà NR`Á‡H4„~“€U©Ø-wÌ d;Bñn0rÝgC‰H¡ãŽ˜0-L¾m*<ÕŽ«'t`#*”ϵb’!Ç\{´Hy%u(ÅuÛÕ-É<_T:3vϨdjBC¬¾Þ/¢Ó»Ð¡Þæl4%ß(ÿ^ñiñ½fi“ܨ5‘Ÿºyñ…/\å9pL ÙÅü@£„nme4-–ê¹ñ¶0sk—¾4Ò`CœÀù?ŠÀÙæ$ÎñkäràŠWüY³?Õ1œB ÿØœ3m3Šž ×^¼„em"°ƒ6 )ôv±Bñ-f1£!Ïh­5e2T–£êRi¢=È`=»êjFyŒmô(†h ãý0*PK#whl¦PKë‹MR4org/junit/internal/builders/SuiteMethodBuilder.class•S]sÒP=€ ¥‚ßµ•JZ_ét;ö‰öA:í¨O®$4éÜ$~Œ¿Ä_àKêK;££?Àå¸7¡”£cîn6»çœÝ»ùõûÛOëxªAÃ# i,«XÑÇãj*ê’h¨hªXUñ„!¹a9–¿É¯Õ÷”-wÀòËá»ÁQ‹=£gSd¡ãö {ß–|ß´<†µŽ+†úa@@ºåø\8†­÷ËpáéÝÀòù÷Mwð<еr"p.¶]±ea¬Ö:‡Æ;C· g¨‡±v}6J×_††ênôM†ÂLCéªÒÇj§“7›”¯½øÐçǾå:žŠCºk Õè3ªdÍß„åLÛè˜Xç4öšzuâË®Û úfT4DxiŸ{þhFåùjMëºèómKöYžxKÖe‘A6‹»¸Ç°2çÆ¢V®\˜,Ñž ÑZLÑg±†u†¥´ÁÐú¿aXžž°§ÑfÚ£AóŠ—Ô{¦pßnzÎÌi¹ÓCî_\˳ɔ®/,gØ~3g/#‚¿µyß×#„6ªôsiOLŽ–Îkô¦“eds°¯äÄ£3UäéÌF ¸ŽYú¹P$Yl‘-6šgˆ}Fö;⯚çPNÙiÈ$¡rdAÜ)b-P™„,Ee#Hé-âA—Æt2R&ï&ù Ù[¸Š»C>íyRÀ'–èÅæB"þÉ3¨_܉Ÿ('!L†èS#!%ê¤>CT9"ÈE¢RP…ròzK3Ò*3Ò*¡´HP•¼¡÷ðPK®'’]`ÐPKW@uWorg/junit/internal/management/PKPKë‹MR5org/junit/internal/management/FakeRuntimeMXBean.class•Q]KA=£«›f~•öõÒShƒÏŠP‚lÒëhÃ6¶;+ëlпª§¢‡~@?*º«‚¡ô0s?æœsïûõýñ  ‰Ã,,lg±ƒŠª]{ é¶ÒÊt’µú€Áê÷’¡à(-¯"(Ã[1ô(Sv‚‘ð"Tq¼HZæAMšNº|‘WÚÈP ûB WúRÞò&ÒFùòòî\ Ýb(¹Ò\èIdÎB7ŠQ¤S®Õ±x<2Ê㎚fúÊÕÂD!Õ;^´ç±'´Ëû&TÚmuˆ”íQ8’=wY]«ßˆI9¤aÛØÏáyþÏŠËÒ×ñ†Ó¿EV*ËYºç‘‚ 4ýCFúó‡#$ik )Za‚µLÑyœ,#›:y{=gf€8™A–îÜ€Mò@þò„ŠÉÙzGâe…[úŵÜ S¤\iæ•PKÈw–\VPKë‹MR4org/junit/internal/management/FakeThreadMXBean.class•QMOÂ@œ-Ÿ"¢|¨?@ †âYâA"‚r‰z[`‹eÛ”Öø£¼x"ÑDïþ(ãk©ŠL<ì¾y“7³³yïϯŽq@ù h^-ưÃ>C´.•tNB¥rŸ!Ü0G‚!Ý–J\º³°{|`“m›Cnô¹-½> ÃÎDÎjmÓëS—Œt©a+nè3®øXÌ„rô&¿½‰-øèâúLpu gI5,·'gžY©Un1hrÄÀåü×D×µ,ÓvÄÈÏzËèš®=MéEÉ­?Rò{žD q†CëWcýJÍ¿|:–°¹#Muþ0–ªÿû }äǺ3˜Š¡ÃPùÛcU´Zm)D‡âR·AH§Ê¨F* °'tG}2ŠMº“˪[TRHâ:M{vñh7 „ÞÖô)_Ÿ'Žf½‡2ØöŸÍb'p: bh¡Ç5ÂJí;îßå>PK¶UeähyPKë‹MRCorg/junit/internal/management/ManagementFactory$FactoryHolder.class¥TÛNQ]§@§ÔA.*"*`A(E:Þo X+Ub©‰%&Æ3 Ç281Ó©‘/òÕK¢ÆD}ðüãšÓŠC[%Ƈ9{ÏÞkß÷9ß~|úàî&уù^ô#«ÁH¢ g5œKâ<.h¸¨á’†Ë®h¸šÀµ$®cAâ†%‘µ\)wgem¥´þ¤Ë¯ßðèI¾˜+—‹Ûæ ÓpL·bä³V[è-Û× ê¾8ܪ_Ì,_´]; ë®ôìCî¼·IpÑve©^Ýþº¹áP2Tô,Óyhúvøßv[vM ¯`ZçïÜõœMé è«®+}DR½\ôüб]gÃv黦cTM׬Ȫtcm—mú™ÚãIöUdpKšîýmiÓéH1åÀ·ÝÊÂlDÔÀÑP0ÉTD±ê8²b:9Ë’µÚÊKK>lÏ%pªȯÔ䢰ùÌ—OF1VÝlMX7}&ÅŸŠàK^¹nm­É`ËÛŒbNFk‘VÝ·ƒ¨>YU&%³ªÆÐV¸@bÑršSLµN¹ä¯îî‰8\mí¸‚R±wÈ;Ï :Yöê¾% vø3Ü6°lTÇaÑ1€AîOK:–qS` uDr:n!/0±ßXÛþ#˜û‡ Œï3ã1ÔfCmöwO³mýÑp[Ç {Êì< wnü×…á½g•Jnv¸+ÛÞŠÙ‹ÝðÀ}ù“ŽÏ‡Íæ>ãR\K·ß¿Çí¢Ž·t´C¹»¯G‚µ4×óô>×þ׳gücûp–OqŸf¦î/éÿb8ħ9®5%Ô¤‚´'óâ‚åWÂá©78†¤ œÄXÓø»rÌ¿Eì+Ò<3]ŸÑõÝ‚´ç=⯋¯0ÀOç—à×]¯é*Ng£Ð£Ë¦Ð«è4’Šf¾‘Ìy¦Jâ8N«<§i5†qÒ&0Ir3<3˜ÂÒ*ñ%eâ&˜ð¸âN‘›T\ŠÜŒâ&ÉÍ)nJ•:Óô–:³Û§iXê ¸7¤Dß½°–Ì;ÄÞ(E‚Éd7ÂtGlŒmO°ÕØzŽè(Lk˜]…K+Ûƒ˜%L½Ñë†äšÅœ:Ϩ2’ÔõãýþPKÏGÌ%UxPKë‹MRCorg/junit/internal/management/ManagementFactory$RuntimeHolder.class¥T]OA=Ó¯-ëjª?ÐZÛJÙÖÄ'PS$mMx"Óe¬[·³ÉvKôù ú‘ÄGüQÆ»e!ý 6ÈËÜ;wî=ç̽³ûûÏŸJx1TÜÀ‚‚Ç*‚x¢ ­"Œ…(žªÈà™JYyÏf6ß×·7jë{µ½Õõr¡Pµ–ÞîIÓÕMé GrKïpÉ[¢#¤«oö¤kvDmgUp¹ÌY1)õ5C0›k0„Öì}A¸USŠz¯ÓÎ6oZITmƒ[ î˜ÞÞ†Üf—!惾µ­}á0hR gÍâÝ® ã7$Õ.Ü 7\Ûù’Â#‘JK¸ž^†r¶Úæ\·¸léïšma¸Ë¹+^9æøÏg˜‰qH•†èvÓÅb‘AÏ^•#ºbX~cÕ-»ç¢bz›»ì’G®ACLÃ4f^N`,’hˆ!N¯x‘”þ»¸Â? —1Ä©·C! :Š’¸£ ÄðêZó#ŠÑþ2Ì^6ÇÆPùöœ*6º÷_Î9ofwËuLÙ¢÷sÉü'4rLŠð>[€!å “¼ÞD)§N–‘ ç8"'€›´FúÁE$hÕÎp sdS^ÿýâ2ý ¼³dþ¦OÜ%ÐW¨§ï#r8W€Kâ.A!Å=ÌûpóýRø ì°¯yPJ÷/T§ýL-¡œ z‚©ï`G#â~ÐWð³dä©Èá6ñfÈ.!õPKKsS)áPKë‹MRBorg/junit/internal/management/ManagementFactory$ThreadHolder.class¥S]OA=Ó¯-ëRjª?€ZÛŠÝÖ}h%¤Á¤ÅOdºËÖín²ÝýE¾‚>@$ñÑ”ñn»µLãËÜ™{Ι{g~ýþþ@ ϧ 㑌X°(#ˆ% ia,DñXFOd:‘•—ð”!ÖÜØZ¯¾ÝoìW7–ë–ÝQ»SwTÝt„mrCíq“wDO˜ŽÚ<°o7vW7Ë ‘ŠN'W‚ÙÜChÍj †™ºnŠÍA¯%ì&o”IÔ-;ÜÖÝØK†œ½Ï Œ07,£-l ß™¦°× Þï Ú]ù‡ Æ…[ãšcÙŸÓ~8’(u„ãªex“­wù!W nvÔ÷­®Ðœrn²û*Î(þ4BL\d¹¦‰~?]* Ù ¢Íðz*o[[5ÝmÖÜ¥‹\n ¦Ä0Ãðâz¢-ñÁ …ú¡ðSºµË¤óúÚÿøW͘ÚêÏHx¦@EQAw$”*ÿ38†øxkf¯ =»×“2yöœjz<öžÌ9oÆÏ»íغ١‡sÅèÕ … ÷¯ )wä…p§I™8E*YF6œ?Aà˜œnÒ&_"A«2:€[˜#›rÛïWéû»{ÉüOÄÎÜ#ÐÈgï r4WöÁ%q— âæ=¸ùá)ü v4Ôì—Åý Õi裸N=ÅÔ7°ã±ŠWÄý`¨à!fÉ&È“‘ÃmâÍ- õPKßÔ-1ñâã ÆhMÔ¯KÙ`IÙ&Ûbâ¿Ò“ƃ?Àeœ>ÀÁæ›™~óÍìî¼¼¾( g` ,ˆ#«cQÇ’ŽeóúN ^=ñ½ªPžJ)TÑãA + É˦ ݆h3t¬Rê˜;¡¯¾Šâ{®tÃ†ØÆæ ƒVô«‚!Ur¥8o6*B]óŠG™É’ïpï†+7Š;I-¼s†BÉW5«Þ$!Ë•¡P’{VƒK^ !C«üívšï2Œ×DØ™®|{(¸d°66ûuHŠDÚwð¥‘ï«ñ›OÆ•ßTŽ8v£óÌü™4_ç÷ÜDc&Ö6±ŽYštÀóÒq#Ëã²f]Tê öÉu¿öþ å]»ðúžÅ1¸ãˆ ÈÙ¶ýl«Ðhc£/ÝÙEÛ„Œpxë쉜!Œ“5#«aä™m&1E˜À4Òlë ½`葵êã­ì1g0û—ëežQ¿¹V÷yŒfhÌ8u×ÉK„£„&2ŸPK ߟš„PKë‹MRBorg/junit/internal/management/ReflectiveRuntimeMXBean$Holder.class¥TkOÓP~Î6Ö2+— 7Çeè6t ÞXˆJ$ &`ˆ‰ŸJwÜJºSÒùE|MÔ˜ègã2¾m‡”‹hš¾çí{ž¾íÏ__¿˜ÅãN\ÁÍ 4ÜRQÈ ˆ’Š·3H㎂²]AEÁ]÷ë\®ˆ]_>õê~“ ÙZã²áÖ†sÏÔSÔu¿u¸%õÈ·À®Ú–‹ ÉBq‹!µäÖ8C·a ¾î7·¹÷ÊÜvÈ’5\Ët¶LÏžÛÆ”lØ-ªñÂujÜcÐV„àÞ’c¶Zœì‹†ëÕõŸè¶Ü¦£7MaÖy0 ¾ cïñ _H»É×^?ã¦ÈGåh¸ŒiY¼ÕÊW*†ÑBñ" jÕrÚPzeÃãf-ªNC¶Xnh¢F&OÛ×]¹ìú¢öüÅw¥í œˆ­»›¾ÕˆÚÆcÆb1›Üò=[îÇý]ö‰—Ã0p’ÑýÝ#VûOT--dlº¾gñe;ˆý wå UÃUtièFá å Vù˜ùò‰sæqŸH:³C´ §†ÑðÆ/£!w i #P¦àCõˆ¡ç¸þË튤ᜊV%üí}™.Äß§ôlQ_(ž³C”rô¡=9'çÍ™œ ·xþŸ£B¿ þ„/x÷¤%‘€,½ô¤ÓÉèì(}F┲$Ó¡±}$µ(ý$“Šëj'† õì}Ø$ž«RË£6?¶@ž­f“_2f²ÉoH‚²zÍ8€JwÊ(}; cû0@‚sáyòÊ dIàÅ 6Fr®1ŠÂ7HæHN‘ PÌ•òF© IC›j9Òr¡6NZtdM¶ñG™S¡/²4MA1òÌÒÿPK]›-d§ŸPKë‹MR;org/junit/internal/management/ReflectiveRuntimeMXBean.classT[OAþ––Ö•KD@,P°-—-"RI°‘ؤh„˜ø4”qÜÎ’í,Á_ä+&^ˆ‰—'üQÆ3Û‹‰<œ™3³ßœóÍwöÌÏ_Ÿ¿˜Å£8¢ÁÂD¸k"GY“&¦LL›˜1aǑì‰{&æLÌh{ê¹»Ü7`¥ä~ÁeÕ*¯¸îR‰ _?zÌ™4(í³Cf»L:öó}^VËt8/¤P+zÓç?g¶ D Þ.7ÐY’? *;Üßb;.×á¼2s·™/ôº¾U{‚R/–<ß±÷ m ©¸/™kW˜d¯p©ì þÊ¥âoÔ9¾Ð‰O·ÃUQjÕw¥h‰t¦Æ-PµK¢ª‰”m¸rxí«ª'Ge~ „§£6Š®Ë殖˼Zm¥š€êÉaÓ 0¿Æß.ÊCA¶˜OÌñ±MáH¦ŸˆNœ»A¾!Ú¦ò…t–WèP|Ó ü2_ZÌ¡ dšÑG-ô`ÁB7îcÑ@×ßå3ñÀÂè8››"ÿK7ÉËT#e/×ÌÀä(fbÙBƒ®ôïP¶KÎE篔%uÚk‘´nŽ8 uIår9õ´Èg.¼ÎÕž·K¥í¿è5¡ U^SÅ—š4áË&}Ù¬“{ÿ¹à¹!yOR÷Äxå@½Ñu§wâ†^²„þuèÙi!ëÁ Úé%oÖz'žý#;ù-ïBLˆÐ8FRˆa7iÕWC£·€ÐÓQ©;1€Aú¦c~£s•9AäFi̾GKä ¢ÑúmÇ¥·°ÈÚÉ¢¥\;¦m¾f8¡=œ“”VÏ)JS£”%˜¢ÝBÛDb‘г¸Mss¡9…"»ÒGkHtˆ™ö†É ½;ä‡^’<"\¿ÖH(Á(ÙXè¥Ð^•‹íÄÀoPK4d-ÀÂPKë‹MRAorg/junit/internal/management/ReflectiveThreadMXBean$Holder.class¥TmSÓX~.-$Ô Rß°øRYP¨Ð¾ ¢X‹:¶ìŽEFÇNH¯%L¸é¤7Žþ"?»Î¬;;³ûöÿìWÇ')HĪ3î‡äœœóœçžûÜsóïÇ¿þ0‡9 cÖD9M̘Ä%\ΡWL\5pÍÀu7q7ãׂ[–޵¤^Û ¥Ó¬´£5o[Ö¥Þ š…Ú–óʱ}GµìP¾ô¥«ínnAà´×ù¢¨µÛA¨es·zxeùaíÉãê‹zµÑX¾_ȧø:ôT‹¢Áü½râMÒ›O¼s‰2×q>Q-KŽ)z‚kt%èr”Ô…D¨® Æ9XÄ)>PKŠ£Åì$gPKë‹MR:org/junit/internal/management/ReflectiveThreadMXBean.classUQWGþ6 lHWŒ±Ð©"$AˆZ¤"K‚”Ø, 9Ú>-a K—]ÎfCýG¾Ø‡zZèiOÕ'ú£zúÍdѨGOÎν3÷›;÷~sçæßÿþzà:j1Dp½ŸãFúñ•ŽétÜŒa_ë¸%'³:në˜Ó1¯ã QÜ‰á ¾•âܕ×Qˆ!%wu,ëøNC÷Ško OƒQtál³ÙMNýmO˜[«óÂt4$J;æ¾™³M§‘[ÛÜuŽ{ç-Çò4ô¥ß6gj"wKh8[²Qnín ¯jnÚBºsë¦]3=KÎ#þ¶Å“gJ®×Èí´è:g9¾ðÓÎ횎Ù»Âñsëâ‘ͬ}Qm‡ø@†Èpâ á·— {­ªµ+]¦ïeîiШBTY̦÷q]ìù–+·_ ж-¦½X¯‹f3íò-X6€yíxsEgŸIK@Õôjß%<Ïå%ôöí!k‹Y0“¤Õ<•b¥µ·çz¾ 9œÎü¨!Vq[^],[’ÑÁÎ\MÉC bÅÀ (‚®ão^¡ïQÒ±j Œ5 ½'ö’ë4 ÜdžÞǪ†Ô‡8%ïfTÃÄGð©aü½á4)ZÛžÂ7Y|)ßM™*°T(ÉѺ*ª’£s'Žó®k+Ȧ4LJÍjȾÛiðܧœ1zü¾Y|‘ýo¾‘Uáo»¬žÛ¶±üô}Ón‰µGÎóA•NíÉwíe°xM?³g;ôˆŸ:´N¦Çæ95ƒÊƒ‘ z«øžÅ8+LÑýE^¬jC}Àr}ø]é8xc³}Éêh\c÷€îø%äÃagóÄW.R[Fˆ? –=„–ø¡ß8 a˜c¯Âfè!‹L`„³þ6)| (MzåKÇ%\nûÔ’ìì]´Õž!ü E­L™ý¡È?ˆ< ü‰®Êº_B?@ô×Û‘ ‘ò$düHF•üg&z'qöE[=Düã‰ò¬QÆ$åUÆ å4>SrÆQüyÄÕ?Q7nÐ2Í71ÆŸ ¹ë¦0Kë"-s\çl‘ãw¨åQÂ’Êy…ùŒ‘‹Q\áÙSJ£6£´qj JK«È–è?«˜«½f©Fö®*–&¹¿ÍüKb$—Ùg8÷ W8JŽÂäH‘“8Àù§¥'0øEùEJá§ôßM¶™¹”#Ì\ÊËÌ\Êñ×™gi{a7V‰.ó¶kDßg<5¢×kè*#~ 2œæ} QÊ Ù•6FmTiãÔÒJKS“ÞÛy…Sã5$U%ð­²Þ¾ÀÀÿPKVS÷äPKë‹MR1org/junit/internal/management/RuntimeMXBean.classeŽAjAE©qÔlŒ‡E°q­ºÁÙ¸m¥hz˜)¥­Îá\ä9T°G!¤VÿÁüúþ¹}˜á5C7CðæXßåu\¬XôJŒÆÛÂ~ZÕ—fë¯:'tsïÄj Lþ+,ž\Zq&×àÅÍ—IêåçN¼ñe²û(ê+þ8¬ÙÊ´“sp¦ˆâÕxQbKSY±ŽëgÌ…Ðÿ]Ù >i›@h >jšh%~IÔ@;¥ì‘:wPK"š’vº÷PKë‹MR0org/junit/internal/management/ThreadMXBean.classUŽ1‚@Eÿ(Šb£G 7^A c…±[e².…¬‹‡³ðʸÄF§™äýÿ2óz?žÖ˜„‡ˆSÅ.»Z–ù¶i3]1!X$qB˜ëÛ_¶MS[Ç9¡¿ˆO„(­[{á.½4ûv÷Ç K³*ä]–µU¢hvBÇÖÈRTÒHÅ'~ ÿHçˆR%ç‚/nH ôÐM/ð7~0ô„v£PKMŠh©ÒPKW@uWorg/junit/internal/matchers/PKPKë‹MR;org/junit/internal/matchers/StacktracePrintingMatcher.class¥VmwG~fÁ]–MÄD“ÑVÞ ¾Û&4­5I_$FcµŸ˜’MaÉY–šü‚þ™~¨ç´Ú´çôôs”§wf—e!@{ì‡Ì™{çyîë’¿ßýþ'€x¡á4ÖUhø4ŠÏp_,Ÿ‹åÁ)lD±‰-t_hø_Eðµ8<Œ (ä¶XE°Ã0íìÙ­WF¥Á· §ºÇm†x±e×ó{F³jó¶“÷î×Ô’Y· §cs†‹C åòÚ:YNLËtÖæSÃÁÒ» ¡­!.šÔiV¸]~0œ-¶ªFc×°Mqö.CΞÙf¸'ñö;Ÿ7-‡Û–ÑÈ7]Ôv¾äÕïÛ¨òÇ6iM«Þó>ÞztÐE.¼d7Ö¥á!ºj§VãíªmVx¹Å°8`½!uŽÙ²¤q´Ö»`¸0Ú˜!æúØ.ßñÆÃ\ª¸oü`ä†UÏ—»e]K¿¤ä™o2œjÀ0A¾RÑR$„u¼ëð¶Ù–]†›ÃÆG”°ãM¦lnÔz‰fH%p[r¨uÑ•~SöÌv¹wZÕ|£üI¡¼:”x}lÇŽÂüÓuM“ïšm“ î[VË1Däí“¶eT–}´&ãØ<¬r¯ ¦ywïÏ耧¾ñÿñ4LúNeŸW©›rx]Lë‰WBsƒÚm è¯ÂÈ4÷Ó‰­7à§Vjuì*ß2E—FÎçŠ`Ð1‹Ç:¦q&‚':–pIÇS¬ê(á.í÷:ñÊh¯&"(ëx†]Yä"x®ãäî¼×BŸc˜ªŽÒ:–q™aa\Ð4œ)‘êÙa•cˆxßj’Á¡¥¨âQƒnÕÊüБsrb®Òã¾<‹CÒá‡F¾ÄêÜéeIˆŸ*€zETBJ@Á TÚSŽh§› I…¤–y –Éþ å5&pžÖ)’ w!ùjstŠ»Ö˜Ç@î\ô‹}º_7ã3/ÒŽzVÁûÌãf~’=Æ„‚±&UçIÎH£>i Ð%ÕIº:AåõBûv€"¤à'ŸbR>[ôÅõcºý˜®!5•Gø#a‹Œ%%aîá äÎN#¢ày.“}‹SH.= ØeJðeŠëŠt)áù.%=—ÄNÄ®œKúÎ%ûœËÐM”—ð‡$…u8ûÔŸòp5‡°OÆ5?nšÃ•Šä Ao’:õh/¨‹¢ƒà×$¸  ÊvAR•MÏçëôO–ûî¦ÔÝúï4·úhnŸ ¹ ¹¤™Þ ÞõÒôÒ«¡–Éþ=÷±×<±@‚spI½†ýéÞÌñ,cÕãÙñšS• /Ç5Ü|enê)ßWÊ¿A>Á{´ŒS(ü‘XŒPȇò(’\Ÿ‚FÖ¿ãR¼g¡?€YS9Æô Ò2~ ‘¦ÅË«„lˆÅMÜ™ Eò»C‘· “š5Àü™b þËs_ä|ùÊâ:oΛ´¿%Xí#…€_qÅr„O!äSãS¦ˆ,S$Îç Yþ^ù êTð™_còW°ŸDQeI+?É‘õC¯ ¼[f7IöZPÛ—lµ\ùÚò1νŽád#£½twŽŠCZp"ÎuÜ pšAIsŒl¼šÙH5•F `¢ÂüìÉ´Oð©°÷ÿPK¥Š>ÆÇr PKë‹MR9org/junit/internal/matchers/ThrowableMessageMatcher.classU[sÛTþŽbbKQÜÇ®SšÖ´\|I£¦ ‰ ”¦)§Ú†>0Èʉ­Œ-g$™&ü&è „ Ì0<÷G1ì‘dUVätÚí¹ìî÷}»{ìÿýõ€U´\À'2ÜË`m먋ϧ TlÌà3|žÁ}a¿HãBn›i<vK|¥ñ%Cº¯»F—Û …ÆÀîh]½oØÜqµmÿ|AnšKw‡6g¨&:ÕúϺÖÓ­ŽÖtmÓê¬oPàtÝ´Lwƒa±œœ»²Ëz0أĦÅûmn·ôvNæCïíê¶)öÁaÊíšÃ]/ßÁÒk¦årÛÒ{Z ÄÑZ]{ðLøosÇÑ;ü¥”ÂxÎãÃQÞµ7IXoµ<7’å%VEHVö¸cØf›· K±àMïîÐ5–ç<³÷ò€áÒdg†YŸ°ÓÔ÷yXŽ05¬WžRM—÷ò‰ S¤ŒúW&#¼ #ÂÛ¦ãaŒn%#œ¯¨$Òžï¢tu'¨5Ãʤé™4°?Õ[k‰¼6^§QÉ®AËŸ -×ìó]Ó1)ó}˸º ïœyH[ºáìc Ò¢ÕÚipÃ}E¤£›â!œ‰7«Ô¾„„¢_õ‰‡@´2&Ni†¶Á·Lñ2.Oþ‘_žR1‡·.ò#ƒ{ÔKÏL·[êûî¥4¾Vñ *¶ñXžMã;Op‡!3rRÑI½ý¯PpÈ3äôª(£¢â®“Žó”ÓÄ—E½‹“ºAEѹµ×âG®7’gF¦rÞÓÌùÑ‘Ã}†{±ylòÞ¾ïÒ~eF¥ÃÝð‰,”+g ÑqÒ‡¿ù4ªsñ‡w!þT;ÑVÏrHÓš*Më´ÉJd•êŸ`ÕÚžÓn é›% Ì"E+™²iW𽱈K€·ò³¿3vw9¼Ë…ÈK´º‚«ô¸F€›¯ÍO"%áûZõwH§x‹–q óŸ#Ò  ùB%’ëSPÉúw‚BJŒL ôÇ0+`j'˜>EZ¯!Ò´YŒ dC„,ÞÃûc"³¡Hq÷A(òC¤Y 0¡Ü‚qy>ã‹/ŸBžB\çé¼Bû«‹’²(,ÄJ(–"|Š!ŸâŸ*e¬a™2 >ÉŠxùo(?PÃg~‹É¿îûE”½Î"RVÙë'‚Ô7°ÄiÀÜ&ɾôöi [©Öþ…º|‚Ùç1œLD`t–VqË»Wp;¨'ž@¹†;ÎNÐRÙÃ9A6ÞÍL¤›r#0Qa~õ¤@Ú]|äÙÿPK„ay Æ£ PKë‹MR1org/junit/internal/matchers/TypeSafeMatcher.class•U]SU~–l²°lù ¨))EJ(Zl£-P‹&´6‘ÚÖ¯Ãæ$Y&ÙÅÝ#÷þ ¼rœq¸ñBg”2:ƒw:ã/ðÖ?b}Ïîšæ‹Î4{Îy?Ÿ÷}Ÿsò׿¿ž¸†ŠŠ(ÞVÆ;*Fq«>·¬«ØÀ¦ÜQñ.îªØÂ{ ÞïEV…Š\/&…|[Å=Ü»„ÅáWPPð¡µÏu— û\Âpv}ÉÒUf–ÓëUæ8«úòFÙdnÝ&}´]¿–Ìɹsõ wò¬Ä«ÆMv÷v÷(ÃêÜc ‘D¡àoÖ Óp3B‰¹ òºU¤èƒYÃäÛõÚ.· l·J’‘¬¥³ê³ q„²[1 W³–]NïÕ)PÚ0]n›¬šöØNZÔ#àä|oEú ÞÒËZ£ DÉC%Ã,n¶4o6Ñѽ¹.ýŒÔ¸[±Š¦š”6/U)T:çéÈJf¶=+á“U¹IFÒ–„CltWɶj^. ÉDb^ ü!ŽN®yŒ¹f,q61Ëh—²wD»Û³›ìåi„“‰J3\^è ’„ëk…•NyÆc…Õt›;nú6sÚg¦æ­º­ó;†˜z´m° " Ùlð}›ëŒ¦JPÔMרñÃ1ˆ*·LÓr™kX¦ÓZßsŸU ¯ ¦a5¼Š×4ŒaœØÒŽVÁGá±F×{IÁ ãŸjø é&<·ß´mË–ps‰ìñ"'‚ÖèžÄu˦¤nÜ¥:â%ËŽ·\ÂÄ\ÜçÙ‚@ô¹†]º†"¦4p”4”ÅnSR/q$LœÕg ½eîÜMt#ÿt—L>—ò–íŠ#bƒëUf󢯡` ]8ö›1q–ŽÞ8JpŸÙ¬&:)Šs‡[Âýv°MD/9çëûÜÖýsËK—wmÃ,ûD&»mJá…î4ia„/£‡QgU Úo8ùÓ­p×н'’n™j8[¦ã2Sçò%zÁ£ôÏ@·^ЋÖótêÁ"²$&Ú\€,øHç‹t.D¢u(ùR2yŒž„~üÉB˜¦ï­ ™<É3N'Í÷Á%ÌÐz¹E2K«*xN‘E†¿É?BëÝd65Šð÷¸‘:A$7š -Ëcrì;LÏÉK+áÉð ”CôO†ÑZúñkY:zöOê}Ù£gþõÑHÿSh¿7]„Bßiô¦8eNšEÚ-“,ƒ+Ò åŽ®+¤ S- Ì!IȆ a ó)J^Wi'“t ^ï-Ò´ók'¯›hè&hõû¹HÕÒ… ú™ ú93rŽš9pŒÁCœ§]ï©ü-h3ô ùrèÏ[Ôñ€BÌÚi)4•õegfwΙ=3öþúýã'€&+q?EËI”T ‰¥*šŒEu†„?4½RƒAk;î@ß lÓ×MÛç®mXºËßÜó=½ež·E«„Z3)oa±<9¬²Ão9}Îi›6ß öºÜÝ6ºíäÛNϰv ×ñh3..Çp­x¾³× LŸ¿âþÐé? L«Ï]õ¥ms7,Ã)³5ñmJçq’º´Ö '"f¨•Û»Æ{C· {±¬VNUŠÒõ­Ð>åS4wÉPøWëÇýc½sÿ'¯i딯¼8èñ}ßtlO†Nüs`~àD?s59ÿv2hÖ`x=Åà&oj3²tÐK“7 ”„vœÀíñ S4#wú¸.Dª¸UE Šðš2–T,cEÅCa†jÕ#$Â4Mh¼‰«ô}òBD0"^Îèe9),v®“wƒü8Ù›¸^s> S‰yN;‚=!j²ñBŠQÆI­î,z ¸Š)…È{ȓ͓'Ó»œ#{›,²É?PK_[˜!`ÅPKë‹MR.org/junit/internal/requests/ClassRequest.class•UkOA=³},ÝT å©€‚Vm—Ƕà$A ‰I1 Hß–2”ÁeW÷aÔßäMDMüþ(ãÝ…¨Ú~¹wæ>Î9ý]~ýþþ@2è¤4S2˜Öè4£ÂÐBYšŠŠYs*î0€!û̶¹»l™žÇ=w†—Ïw×áóUîï;»Oaír—¡¥–,ë)ß3ËáxžØ–ð÷NË´½ îù!&C®z`¾3 Ë´ëFšgȬ‹ºmúËúÏçôE*ÉÕLû•Ç›T0°m†ô‚°…¿È0P¼¼]ÚdH.;»ÛS6îpwÃܱ(’¯:5ÓÚ4]!ïq0éï ©W·nmÛç®mZ†Ëßô/B_‹nR½ßxÝàYÐoN€‡/È“ï ö_T.ÃC-;d&[s¹éóµ@ŽŠa¤Xj’ë†Q#J’:ͬոçfËe†ÇÅöVj1(å}¹8'§;A¤yiëNàÖøŠ”\szFÒeÑ,z‘Ëb÷¤bXm—¢­…” ÷³x€‡ Åv‘¦þUºÊñQØõÓr½m͆¥Øêǘ(ÊÝØê`mW*áÞå=s/ÞºÇ7~ªÅöþu1AŸŸ }˜äå郓o}äiòtNQŒ†N±aº½&Ÿ ߣ#¡OAÑGÀ¾P(ËdóH’Í‘Ípº æ EÆ£6Œ`Oc!ùÿE‚^"ßM™ù(PKgQýµPKë‹MR/org/junit/internal/requests/FilterRequest.classTëRÓ@þ–^҆ȥä"X0m‘ˆ"Š (up†2Ìtü•–´„I“ºI¼¼‰3ŽŒ>€åx6 R¤(㟳»'ç;ßwvOΟ_¿˜Ç†Œî$ÑU˜¬8æd$—0+ᮄ9 Z÷$Ì ÷}Ýx ce$±(CÂ# %,1HÜxã®Ç0Ztx]Û÷mÓÓ¸oÛ×¶Zß–)¬öÒ´<ƒ3Ì\ kè¶Ùô-Ý3[kÅ$¾bRÌ*CA½<óÕ’ew¢g×`è-š¶±é7*ßÖ+yRE§ª[;:7Å9tF½=ÓeÈ·å7mJeë–Vì†ÙÏŠŒ×“uÃÛ ä0Œ©ÙòƒE@x6ò— F‚ÿQ馳-4m Ý´7ÞW¦pX.9>¯¤UÔzNòܾþVWpO¤1 `C n"£`+ ÿCÉ uº³ïjœ;Dßt¸gÚõÓ;šºÊ+2¤…^ÍÒíºÖF7¹éd0 ªÅ?U™Ø5Ü*7+ô>Ô,g1%Sô† ÏiíÏrêŠ×NE3,©Á¯;pv¢ì€â²íþ‚¥»îr›c{;ïÄC±4Yúi’]d©h—xÝë0Ù:•页7w –Ë¢+7{ˆÈ§ p4€EÉÞ ;Nóf=Ô“cäÉ´`ôev‚†» "4Ô½!ÍGÈäÖsŸÑu„h‘ÖHþ±üAñR9Ä ’å”û†îrD|=‚R*G[ñ×J_ÐsŒÞcô¢¸x¨p1²S4§Ñ‡1OI‹ú[e‚¸oa’pih¸M‘"Ãz¨œJÔ:ó PK<úx„´“PKë‹MR2org/junit/internal/requests/MemoizingRequest.class•RMoÓ@}›¸qã,Ô-´i ~@ë:UWˆ¢@â8T‰£kVéw-6kü þ×V¢TP ŽHü(Ĭ¢ ¤"ö{3;ûöíìüøùå+€{ˆèø¸ †NMÜr¿Û-t±[qlÕÇš; )´–f§¯VÉÛDVe"ÍuZ#µ-Ž…+yÈШ60, r3…VVT91,Áõ¥wêÑæ.ƒ÷8%fJËgÅáž4/’½Œ2s$šd»‰Q.ž$=»¯Æ Ûô•¶Òè$F¾)äØŽÅSy˜«wJ†U†mޤNÌu¢ÍKìñÔÈÄÊóâày^˜T>Qîôù?•·]O8f2D—ôg(‰›D[×(Ž8Ç\õq—c!Ç"ÚNfënưø÷MΗºÿx0êfVB£ÐŽxË4 J sÎ"±GÎ%a>º$f‰íPÌÃø,>Cíå)ê'ðŽ'{7_ 5Ø5b¼ªÇuÌÎbí‰Ö{ªtµýø#¦¾ã>÷ †*nÅñ'ø'˜ªòÓ hT~½o®ìˆBÜéô°UbåcÓ¥sŸÖCÊ´ÉM—Nˆõ`é‚¿~åÏóÜsPLs\*ÝøPKF ÌÚAPKë‹MR1org/junit/internal/requests/OrderingRequest.classT[OAþ¦-l»®mm‹RP/u{õŠ&_HMHŠ$•ð8m'e›ínnñòä¿ñ)‰&þ”ñ̲…*¢/gæœùÎù¾3svþúöÀ<Õq 7б¨Ì’Ž[¸­ãîj(h¸§ÃDQ‡†’†²† ƒ&ÅÛèû s5O¶­ÎÀµ}K\WH«~töœ!îÉ–¶Ûf0ÏâºÜµ{‡û¶çZ›!’²¦_Ø„zÉP4*~ÑrÅm†Øš× ©šíŠ×ƒnCÈ-Þp(’©yMîlsi+? Æü]»Ï°<Æ`»¾.w¬°íþqý“^¦Üõ@ üYœ >ẌçÙ_ZXw÷¸c·FLÕ÷MÑSê†dÈ’?‡Cã dS¼²US¹S‚W:|Hcـ˒HiX1`aVÃ}ƒ¦â!Ãêÿ)d°&Ý]P¡oU¥ôd]ô<é+=ATÃ#ñD)Ze(ÿÃÕ3TÎCoˆ®g‡GM5³š,†D[ø£g,\l̦x¯ç|`˜1kêj-‡»mk³ÑM?˜Áôé(}ijæð> [–¦å鋿™àX`kWzïÔÈR},A}Ã@õž´Ë¨' "DŽ+d3äí¥5U:+•)Uý³AZŒl’l JLRjŽ"‹Gi˜ÁU Ø)ìQ„2®a6¤ùDžÂJ_"V£5Zbê3rß¡í(ˆxå‰ýò>eʼn+‹éPÅí@\qª™&/K•sÈÓ/iþXMŽNòtQ<¡®8qê1ÜzZø PKóaXæPKë‹MR0org/junit/internal/requests/SortingRequest.class•S[OAþ¦JËJ¡µ / ¨í¶qcL|ð‚ñ©Ñ„*‰Ó:©S·³ëtÖ„¥‰@¢‰?Àe<3-(¡õò°gΜÛ÷o3ß|ùàÚ%q»ˆElY³m¯w ¸[B;ÖÜ+à~ Z¼OÅØ0ltb=‡©’&Ô©RB‡‡“Ü.C©®¹‰5ƒßòޏ–ö> æÌ[9fhÿ†$•Zñ(œ*3»±6R ~©á_uœœëþ/å¿êaW*„9tI†ÍFs„;¬vzZVÿCQ©§º/žI˸zy¹‡–¤‡4<”°äÁÃ5ul0ì\™8âJ&iÄ-U'’жµé!@‹!øwMÖçéÆmXêùÿ<Ï“$:f¨Mk"®á‹ÞPô å±MO Hï"ƒŠ]мŠÝ Ë.Z¦ñUW¼£3Kg98 Z'Èíd?Q(‹ªkÏ‘]&[¦Á+ä­â:E¶&m¨Áœgá˜ó,`kä{ <¡°N1R™¬%ðŠæd謟‘9E®óù×ägϰÐ:E¡õÑ5U Y£ }¾æhø“æ)E"·‰4šá¦ë»õPK¬HœL(PKW@uWorg/junit/internal/runners/PKPKë‹MR,org/junit/internal/runners/ClassRoadie.class•VëVWþ& LF € hÕ¢"„K´¶TQ/hˆ«ö6$ †œL¼ôþ«/Ð_}~³VÁe]­ýíkôúµß>B€H‘,Î>³Ï¾|{Ÿ½÷ÌëÿÀiüh  ã58„²Ü”%%ËD-Ò¸¥ã¶Ÿ˜Ä”Aö´,wd™Ñq×Àg¸W‹ûxP‹Ïñ…,_êøJÇ×aé˜5°Yû0®ÃÍ9Q›×± !îz3çØ¾†ž”çÏ' ®$ý‚ëÚ~²x˜±Çs““7 j¨ ì|0š³òy ešŽؾkåBùäô†•j³v>ã;ËbOÃáÇ6Ï)®5›³54§­ÇV2g¹óDq)Q=äP{XÃÏ]ï€~opwGW O÷Œ†Ø¨—%Þú”ãÚéÂÒ¬íO#hLy+7cùŽ<‡ÌX°à0]»!Rh&=+ëHÄudßq—}/°3Õí·†•Í^µœ\Á§Õ]eè¦|ïI ^}`ùóvpåiÆoaEY &ÝÞt£Ñn÷n0Å»½lÏy¾¨ä_õ¬Úih/sæÛs9ONØÁ‚—¥JÄ9^ºèBàä’ãtaž”›>»a«¡L åäöU°:î>öŠW?½5bÊŸªÇH>_XR3Ž—³t¹JËÖÛ{¶¼qƒ½Ûà ½=ÂaIKÉ(C©aŽFæèŸû*K6L•2Œ)¯àg쫎xi(+‚~qÀó1{Ù·3–º6Ö`à,Ù3NÞ!¬—µo…^ZÊmê š8>ïã°‰#8jât˜8†ã:‹èÓpb÷– ëM =Ô‘3±×ÄÇbµW–±qr%£Ã3±ŒG:|y: &㉉§xÆ’~[V™›Í£[³‹<1ñ ¾å<{‡¢0ñ¾×Ðÿnu¡¡©Bï˜èGÒÄxÄɸ·¾ætØ9NØÚÕ0Pa´½emíõî=ODÎ…9Ç·eö•†Hâÿ&j(©\ßËDeÍ2ç¥¡ÐØÕ½³•ë¶røpÂ!ÀBÞ¢P6wr91¬|Ú~¨ yŸ£ÖUÍFÊ F^$Kã!Ã>×µóøÁNVE# ozû|mÝâ°|ÂÖP°Øþì½Cü bˆHGr‘¦T”}IÚ(­IZ ö%:¹žäÓO<¯"mO<‡–èYC$Ñ»†h¢o ±D[l U«ÊF—ÈPWÖB>0ê詉¾Úè©›'-!@퉦v‚%¢v‚&ªv‚'Æ{=Ds–TäÄo¨zj ›Þ ¥ßAÏÇ”7³(z‹IÏ„VRÄ!²Í´y ýi¬ç9âë¨Ùn¯“œTöZŠ:%ôÍ8ů+Áóa ß/¤‚ý³e$ÖQKj®ðÍ\¤Æ„ÐÞW«„ÄQÏO&¡­\ëÑ h+(ZÑÉp@‡’„80鴞¤‡ c`é&ZB?BÈÄäJ€Zá‰ï)†]G]ªçê5Lô¾@ƒ†_ÑÎÍ{þBcºO‹þ¦u4ß]yó÷ jR=ëhyµÂ7ìKì»÷^¥dµo<­ªÈ“ÌÆ~uSƒ*Œ³ãýGU0*Üò ïé,e‡(}ž€ùt™ër†©qWp 78à'1ª‚»ÎoÔÞÉu£LÁQjœcPq†užš­Tñˆ»!rÏЖF+û¸;­Ò1¦c8¬¢æEî.©úÐ(‘WJx—ÿÐÔëx1U·§êLÅT¡í¼ôSÅÔ¬ 6|j_yóz•æ;xI&Hè…RbúQËõ*!]ãÉ8ÏÒ”ºAà7 1MÉN0œ4q[%d˜ÍvšÕ!!ÇxZ­QÿSYLÒ¹0I " >ÎGUº6Ó œ‹ªpÇTµ\!ù»ƒëÀPK•Lƒ ‡M PKë‹MR5org/junit/internal/runners/ErrorReportingRunner.classµW[wWþƲ5².écB*«˜ÂB¥ øxlTÅÃQQ:ÅÚ%!]Vq%Š8JâñtŸïOF¡àSBú´ŠÏD± ŸUñLÏâs*ž‹"çU|>Šíx>‚/[/Dñ"^RñÅ(†ð%1ø²x|EÅWU|MA¸¨×ªFUÁÆñ úE=WsÌrnܬ:£ :'ÌYKwj¶¡`hÍò!w\Ö­ÙÜäœ]¹¤O—ÑÃÜ-–õjµ Ï «±&µ Ç6­Yj„™–éVJ6-çŶÑ@³©3 Úó•ql7-£P›Ÿ6ìI±&ލõòÝ6ÅØ›lwæL¿w¼bÏæ.Ôx\δöôrήY–aWsÇl»bŸ2*¶C\§ä¬ðÚ1ªŽ£`S >2b âPô®Æse¡ióZc‡Ò"^Ù– ˆùuãN.oA*ƒ¦ÛöN†¨u•keÃâšrBA›I¡Ë÷[$.Þ²ÅE;|—Ç m gÖp1ªEÛ\pÌŠ¥ ‘L5%ÅÍE®IC 3ôâœ/I¹ÌîTD~ºJÍæïd,ÄY{’­zVÅ1gÌ¢.sLAŽÉ;by#™{ت ›ç›*`w2 5AU¡N×ÌrIØ×²|Ô]%ê ‹ŠWÞCÁyKµVýá»Ó\¿t» š6òn¡D4OÌÛ¾ÇÜtçvš‰JÍ.ÇMQ]}Aå¼GœÆ¦±&b˜x|ZY+ÔÊå'*²O»\4<†íœd]$Šna$ŠºEl‰i#aQ;Q±Æü‚sEûA¬è®ÑÔ0‰Ó¿û4LᜆaìQðÀÊáRÛõwÌU¼¬á›ø–Šokø¾«bQÃ+øž†ïã î ¦†§ð˜†âU ‡lY‡L~„³ö³ ¯á'~Š×5ü ¯“ñ+[lc¦lÜ ëbÅMǤn“W~€4\ÅÏÙÖ¦°š›gÃ.‹zÙ,M6š‹L“Š_hø%~Å£Ößg:&w>-•»Dä~ÍZ¾MOØÅ0™A¶~ƒßªø†%¼ª`×íx\7Ëü Š,_Óð{üAÃb[î?/ÌFËA•PRp;žl­d1ß»6ÇNÑ6tǘ¨™Ž±ja2À^s ¤Ýè[tÏêfÀ"7½M,ÉTp玵βíÍéÕ‚qÙ‘8ÇæoÉÁædsK{|úIH½Tʻտ- ¥7ƒQ ó7ëÌIÛüÎ…õ…Ã*­ùŠ5¢|›®«’ñ¢Ÿ¯Åå·ÚˆSqeŠ®Ëd¯Rn¾$ÄWB‘¯”E…2Ûtw•6ʆS±Ü°îL¶F! gÇ’“q—¢òVQb&Àùÿ IRwÝÖÙ¢gL[BptÛ1˜£‘;äwÝ’oÊ«Zygº«ú–Û7úÛÙ6ªsF ÛxÏò²ß†˜hÛ¼‚çäèAŽÙÐ)G8÷Þ͹÷p40B|÷¤³íoC™ e&–Ñv3!Œð¥x‡ïF/öSJ¸Ú8€‡)Ä(- éÞKíÔ5oæ ŽøÞ‡għÌ;÷?´£ò}:½ŒPö/ˆdo¾‚îhŸŠu,#ü§laøæH{h¤#Þo ƒÃñŽ}Ã}á¿zJªPz®C¹zëŸétv‘ëèL§3ˈ^G× ü4¶ò?N]¸[Ðϰ 0ƒ„Û£ Øcü 2‰Ò½G j¤SaîIQ#O[Ø…GpŒvÔ>N©C€÷ÃpZ:¯HéýÜᆡ—o×ÚZs×åœÔÿOWd@^âL;ß#é7ÐzÚ›è§ÜõzœÌ¾… ±•ÂFï`S!ÃÐÅê¸ïê­e–¤EáqLZb ’DŸb¢3Ò³4çSLþ8q†ˆl^œ”Éñ¼Ð¨SÀãÄ£à |ÐÃu‰ÚÒb+–Þ,éa†~óÕ[ÿ¾æé‘Ly¡Û‹ÝÌ|ÄCႈ2 C~(‡p <üYq ñØò¾[Æn >µŒÞ“™Õôré‘­cË"¢ÙØÖ:úÎfûÂuÜ/$É“¿sõ]K>3¥ÁFd?åÌïÃ,œQÎì—¹l°aìqÙ%k\6ô°°\6lbtló]“`{åø Î6±Áµæ²aL²¡QOòÇË–çðË|‹°Éüý‹ÐÒ™:Hî%Žɼ‰„œXDWæ$êØ&†ÛÝáö:v,I?»ÑÉçQ:”ÇFÞBØý<~i˜! ÷1'™üýPí»sÄ#· ô<Où´=ÀpÈZ´ít‰»kåܰ\v]ÁµÛ&®|ž•(H6 (]È×±;{CS‚UÉ:Rb&½B­^ï³|>ɬLÑ™stæ¼O1òÁà#^eHbµq×VÉsü£Ò¦þ?PKPŠ«"PKë‹MR-org/junit/internal/runners/FailedBefore.classQ¹N1}Î)r ÂQÑA(²¢B‚„H ÇöÎfŽ6väõ"~‹ ‰‚ࣳ›H¡ÄÅÏoÞŒÇß?Ÿ_ΰ_A»etËØhÆd•Œ²±2úéf$ nêC£c'µ d”P«#JçJ+w!?é…¡™’@ÃWšî’ń죜DŒ´}²¬dqÎ×`Á½¨X ç;óæ yJ;²ZFžM´æ!¼±TM¯èÙXTLbC«´¾õ÷²?—¯’ #ZZ ¥£©ÀÁ}¢ZP bÅ/µ6N:~wíúiI=ó65ƒ¶P8þçHÌõ[HËTGÈñVyC8DEö%Îr(s„´û*Gû)ž~@¼g”ÛRVQg[[°û<š«…vö5{øPK÷¥ƒƒ6ÒPKë‹MR4org/junit/internal/runners/InitializationError.class•S[OAþ¦—-­E°” ¢""Ò‹²à=ÀÓhb±‘ø4”± )³dvWÅ7ÿ‘$šþ”ñÌ´¶Ð–÷aæ\æûÎùÎìüþóý€%A«ñìiò&ícLQ=Ã>EvšöV$Ó©wŸÌhÈ7ÕÖÚÕ’ÅÒ7D›ˆØC9 3‰) ¤[(Ù)”$ÚëDcšŸnÓ•‘°§²ÅØOÄw¢?à씚HTšêež&ÜSÌÙs–â3–ù&fÛcq­Ä‹_ùÜ¡rlpÖÒ´ÔÆÛ4-µ·hbsÖºyKžo£ À_PK²é¦šŠPKë‹MR5org/junit/internal/runners/JUnit38ClassRunner$1.class•ŒA Â0Eÿh5Z vçÖ…[ Å{QPAñ±†ÚHRçÂx(1Õ¥+g˜þðÿ{¾îÆ⣩m.×¥’„Ñö¤K?_,•pîPk-í¬7A®t®Œ+u±“þj. 7¶àU"¼Ô^Z-·Ÿ”㿤IF!Ù4âó—Ž6|®„.øþ\ÉܦaÓq€¶ð­vh¡n„nØý0qðP£ÒÞPKûÕàî¬PKë‹MRPorg/junit/internal/runners/JUnit38ClassRunner$OldTestClassAdaptingListener.class­VkSÛF=kÀ2B€Ã3ii mBŒ JJÒ’†òru B›¾aËF`¤Œ$'ý+ùd¦…´é´_û£:½w-„clŒgúA+íî¹ç¾ïèŸÿÀ4}XRÑåvúZámZÅ<äeUÁš _ñ&£àQT¬3fƒ—Ç*¾Æ& o)ØVÇÞìðÝ7 ž*øNÁ÷1Ûñ­¼eº©Œãôý’mùº[²mÓÕË—Y÷[ß,ÙëxN zÏ"à}ÉDrc;­KNÎèÎX¶¹^:Ü5Ýmc·H'='kw ×â}pØêïYžÀÐF1·mzþRÑð¼…œñ·ìBÆò|ÓfÛµUÖ+/MBg*L²lßtm£ØæékOèxæ®oʳ‘“¯ŠiË{k‰L™5ï‡æ+Ç=Ðù¢ì—/!µížo¸~™'fär+®ë¸2~52ûÆKC/vAßÞsW©GPTúkÞ’¥yÃ*–\BÜj•tH2†·lzY×zÁ³õ|<ÏX!Ç%‘7²§öz=än`æ•‚é¯äófÖ·^š2êcuÕž¹*¡Ê-«`¾ttñ²r÷Rµ÷9ndÐ: $/A·å»T $¦RÓ§Ÿ¯›ÈªÓ*R—cÆ¢f¹Ê™¥Ê½\ÁxÖL÷5ÙÓÒ¨ÈÏS¼L L7-OÚrJnÖL[Ü˃çA“U ×ð/?jÄU ˜Tð“†gx®ÁÀs›—ªfæØÕEŽ&ÆE5¨ÁD^£!û‰†O1«  a–†}\­•Ç%Ã3\ÔpÈË-$P»¬ý£F ~Vd»ûÔäG-cÎ$ô&s"Ð’à´Ž]ºlȪ¼åš¬6M3ßÛ3)º#5ê®r°ŠîS±-|,5Û@ªîÌ ©ÂnK6*üÓÇâ]ÔÞï̸áDÃiV¯~†þ¬k¾´éó¥Ä¹yu~r4T#ƒƒ¹Ø›¨5û5RÌwÊßM¦èÇ ŸÊ==Ü…ôÒŽw&¼O»4í"ôV“'ˆ$S¿¢å í"¢µ -´£#$õ> Ý@ëtùŬ4åèþã€s…äÕ™ü-ÉÔ ZÑvF«ÊË›Ð0ZAÙRvâÝ2åè…”ÑjÊ1¢L6 ¤( äW+½ÿ€òTRŽŸ ¶Î &ŽÑ^†IzëD<%$Ë¢¡‚Á@Ñm„ÐíHa\ÚM“/Pz@{fIý õ5ºSA}4þ:ŽØ—ηè: Õ÷HU3ôWx<ªzqGš0LDêd{;3áQH++þLî¶Ô1ºÏÈ£Òæ¹Š µ…4mÍŒDߦ‡†jàÇ〮üˆ¿Fù?Æ•#bï9ªŠÜ<ù%º±X¡¥/ÔÒ¦æîì«A””djü½Õy~@f? c@°L Ó ÇŸ#Õúí2I3>ÊAoª‚0TÁ £¸/뛿æÉ î–)¹HXÎN„\øRGÍÑñØPK·ó uì PKë‹MR3org/junit/internal/runners/JUnit38ClassRunner.classµXùCT×þÞ03ox¼("A¢XQ‡œh”Æ¥VEm1€-4Æ­â3㤘|ZÅ3γ>‹çTœUqNh|·M>|^Åó^À C†q^Å‹¨Åˆù‚† ¸(F—T\Ö°'T\)ÀZ¼¤â‹¨Ã—ò‰æË*¾¢âe_U@Y½!5ãõ#‘0 ÊwGÂmf")'¶†¾¤íj´I“R ÜI®)XÐx0µ’ÁθÑkŽÅ{‚Bg£ï&‹ó›û‡Œ`Ĉv¥±U{¨_ › æ6ZQ³9ÕÛaÆÛŒŽgŠc!#²Çˆ[âÝ™t'»-b 6Æâ]AÛ£Mšñ¨ ÆSw"¸ëFN_w½tÑ"çÃÓ#^ÌË!°ót´oÔ[ñDáMÍ”Ïoµº¢F2§ÈÕYQ X©?7%b-X¬òg„a£FcI«Ó I+ }³|gBÍuÞTÏB•›7©·©<'¦¹*˜ÅM#ifïò ³‚šÓɨ1º™Óe&·›‰PÜêÊ *üUÙö3$¨3·×è1Ç)ÕMFðt¦\É‚²œÊõF¤„»×I¹x:KŠÅ_ƒ°ÈÔZ”ÓbkÊJJ“QΊ¬K—Ödœ$s­ œ—Ÿjˆ-ÌOŠ¡Cä¨ÈưŠÅdŒÂó©NÐZBbØ>*áp¿5ʽ“ûFØ›sÓ(™¨Ú—×HkÇ z%›i¹¸Ù1CÉ`“™ìŽ……ã¾&3n3”Š[É£;Ž„ÌQ&—f¬7ÇZS¡n[=SÆÉNÉè¸LæÁ¦¾*ãžP,åyPÍ#FoŸ8ëÞN+" ¯Ê‘ê½FÔêKEìàwJAy 3u6Ê“xxŠmOfXÁŠ™¹R ¥yàŽ¹±xr@[)扨Ó›jÓƒsÌ3°X<,ÓyÙ-äD9Ni¶¬IÙŠ VÎÐƒŠ¯Q-a&Ûäí¤vŽúsW'Áqk,™ä\Ôõì[d•È#ÖõISÖ';I:^Á×ulÅ6ñhoè¸Í<:“Wd7bŽoâ[:>„{T|[Çn|GÁ®Y]•SÝàÊwu´c¯Žïáû:~€êèADÅtü?Ñ“nÉ4…@ˆýTÇÏðªŽ×ðs¿À/yßLU¼t¼7±ÂM]³„á_±þO¸fuü¿Qñ[¿Ãë,¾S”—qàs¿Ç«¬ûœz°¡byb¿‚Â1½ÝYÔTüAÇñ'¦AzÛ+[ÉnÊWˆN(±<¡âÏ:þ‚¿òÔÍ´:è8„Ãb'þ¦âï:þêø—H޵S[hŽ ‰³×°¢ñ®˜Ùi×ñnÜÁC5Ó¨ã}x¿Ž7c‹‚ÚYe ÏS–Ñ•àìry5/þ©ñ6D+,a3Ñ3hÑŒDkª#dw‚•9úÑÍaž_T«#놖æ¾oÒŽÐ(Î%ÁLÌ­êt`BñÀlZ­ÙõÁ•«í6’Õ°Þ&a¾?WÌ¢\6Ëv¥ØŸóúœìX;<—ص}Œ3æÍlʳ­OßrLÛàµùÿ/fóů·¦û>¯˜ÙšÍ~ä÷йSßmEÂ2q¦ô!vgu®¼œ7Ì.i ¶L|vªg5l '[c&[w!ö/ãÚÈJÿŒšÅ9²ñ½ãJ¬ V´b±x¯AV×OŠ]“swxóÆæx2ºÄ¹UYRæîN†!÷k¢ÕJr¸»R9“RÎHtÇR‘p‹ø¼›v³÷Ê>_^Íü¾_ pñË½ŽŸàÛD‘pÇì8_Ï·ýðpÌŒ@i¯ž× ò†à‚ç§ó°OMŠ4£ˆÂŽØ*؉·rôV4Ðì.Žuþµgn਑cš¤Ëf>…ËœúZ`Þ@õÔsRJxšC@ ÜhE>Ú2¼iioš „ŸDó6Çf'õ„fù|íCÈoª TBDè5çq• c^Šh¸ >¶(ó°‹°Ozª°m¤=•ãíÄÂÓ†bâi£¶"º'ÇçfZ‘ÈF0§½ZÂܳi^ÉÂ-“à·­*¢Uql­‘ï€OÀFáDK!iÉæÖçXÒDƒeë+"W9w:p®~, \†«‘ Ì㯨zó‡Q|–kJ?š¸¦ˆµ’—¡qiÁTñÖT“wWca3ßJëÜyužO‰û1”U—xQFT¼µ¥ÞA,ºÓ£ ü÷õZa°¼si°¼±ú<®Q ¦÷£S‹…%"–q £b,¦ò tq7c²Ès–!?z±QÊĘK}dü6`«fr܃$WS|ÂQÆ{pwqtïÄýì9vÈ,Ðh¯»y3y9@îös¼Ì¿Å|»•©î§œ®n$ç!„%¢*z¸… î"ŠNʹiW%¾nÊ'ßJæO;GH½¬³s¦žØß%"JþŠÈâÒA¼AD¿ìlã܂׳R¨%¨”K±Ü!£ŒÁP Ùº—°%_@“¥¸‡óÇePÂ)$ô^Ã"Ùé`/G·I`Kìf Œ}µìvÚ鼎 VlZt ¾¢•(.ò»/ ª=/Ç=mF ©¨Ú#g £¦µÝ]#&ÇöÊ>‘÷À}<'2ÎÉ:É$¸r-wåVº­`)É©"šO»Ä(ÕNn¹}µý(£Ë¨mªaÖ¬ra¦½ÆôÜg¯)M¢Õ0/‡l®Ÿ‘ËjdFnðV—z™`ƒ¸¶ù25WËÔ|-P˪RK¥S(ÁV„ë.ÿmäx€ld)xl÷cNab½<Í->ÃTx˜iúÓâQt† ð8Ù~‚a=‰;𔤡…©Q$å-·p,ÒÃË W:é¶Šê(IrÑîv&j©ØÂÂa')I…c´|;i{Çnþ´³—‚RAy™MÓÚ~Ù4­•®Ë.nO3ºg8~–Ñ=—Þ4í1™‹eißel[A§°zÏãú‰Uõ¥Œªêq̸xüÄó8Þ$Cs±R¬ }< ë ­ìPK%ZCÓ ×PKë‹MR4org/junit/internal/runners/JUnit4ClassRunner$1.class•S]OA=Ó–®]G[T J•ÅÔÒ°`ʃJxi ÑÔ’Tí“/ÓíP¦Yg“ýèÿ2Mxàø£ w¶›´‰O»ÉÎǹçžû13ÿÝÞ8› V°m†6Êxic;^YxÍÀgÂwt«K%C†ý^NÜi¢U솉Ö2tçFOÄ*Ðî ÑýŒü‘¡_©È9d8XrS:–¡~湟¿Üéú"Š)dƒVüØw2i˜ =AÀ ®Ón*=IÜ€¼§4ç.Í.âŠ&[<%‚S°Rq)Ë$Û¸òíßWÅ7ÛÁtù¤6[ÊŸÅmÒ´Ì Òîts¼¦hŸ*–~#Q¦Õ†~žø¤‡8õŸ8…»˜QþùfÇ=…¼JæðdœèyL‘fPô˜ÂâPK³ÒH¶wÏPKë‹MR2org/junit/internal/runners/JUnit4ClassRunner.classµX\×ÿ?883l°›xÄ!†bê$5ÞÆ#¸˜¤ã§­Ïp†³…„O't¤+iÓ‘&mÒ6éH·»c7±°C¤»M÷éLG:Òt¥»û}ïNÇ!$:øýôîo¯÷=zò¾û¬5*:ñFoRQ„7—a Þ¢ÒpÏÞʳ·ñÁ] Þ®¢ ïàá<¼KÁ»ùø¤‚÷¨¨Ä{UTà}<¼¿ÀËñ!ÜÍÃ)§ðÃ<ÜÃý*ΠųqžeçT܇ Þû/ïáἂûU<€yû£ >¦b%>΋O(ø$?¥àÓ*Âø ŸUñ>§àó*Úð^|‘‡/)ø²Šv|EEÃÿ«<|Y÷&¤¼*¾o²¼ßâå·|GÅz6ÌwUlÄÃ*¾‡ï+ø‚*ø‘‚ @@ëŠÅ «3ª'FB Ü6ö.ÉѪªû~T$m3é6öZ²^s8¦ÛIËhÉ8^笣zl8b£Æ qh­ÝÀ¨L[rhèŽ[ÑCɘiG̘mX1=±’,K"Ò—†#¤’u&Ál˜òQwN›úñ!¥²ÛŒ=ÉцէˆÒNMw|Pöë–Ékw3`˜Ä½-÷{h{µä°[n‘ÁÃŽØÕY2ÔMetb,Íl^&ðº0›AÝv|гÍx,¡àùYŠ1ë6gذûüþ¨ 5e{¤-k3JêQsH·IÄâ󩕇ýÎvÜbÏæ0Ю©ÐD±˜ŽX–‰Åmó 9¨³º2g\“M™oiÌ] 4Ï•LH žQJé.šYm"s…çi¨.ÒÊŸí¼ÕH Z¦t‹ÀR2i–<> $ÆŒA‹óÁU ²G7ÇH© ¼"Ô´Ï'ªîE&ÁS!©zôQ¤´‡%|¯m™±a¶Â e9B2a®:pˆ´göfìhü°1EW†f¶Ó,(H¸Öi¨uS¥O·H /âI¢Z¼¿|Èï€-µª™N'ÕöiÓ˜¯x KÛæqË6OŸM°æv²Oƾ+~Œ³_š§vÚRà˜¥¥èÌᎦ‚•+eåœhiËIpš8ªvhJt(Õ´1_)-íù ¹È’ %ͨͅ¢i¿ê1s,uжK@çn0%JCa—NSòÔÒ@‚â©©z9ì©Jrž_.‡îh÷pïÎP(o\¤ï&µ7ž´ Ò£.ëfkcÝj«1f÷œ éÈ6G~3aR¸NqcÏ“8k5ô`?ÕµB„bØ«4tc—†kñL W¢Kó?\øÃT~¢á§LàgŒÛ×Q8®™††(F)Efsý¯XÅÜ~Îã~ý ~©áWøµ‚Ç4ükø-’ f  GqLƒR~ GüNÃïñ /ÅË4üOhøþ¬à/þŠ#nÃíþ†¿Sõά~ þ¡áŸø—›Y6Ï¢ôjx4¼/˜;M Öðb¼„êi^'¤-ÙC‰A2‡š(Â+sWÔíº¥¾‘1‹5AM”d å(rŒ¦h¸7j¸ /×D©(S„ª‰r¡i¢û51 ¬ÎT=q&™ØmŒêfÌS~¶!ÑÎÒT*¢JÃ-¢šú¥Ù`SË—%cú$TH©rÚˆüÕÃÌ¥Zíš”U×I¤m–Ϭ±9ê W³%éfÒíǶǭ­ÆA=µÓ*•óÓ²eî \›“vvï=ËŽäÆÿðZÏ¡eÁ—?KìÝýÁ^mÅmÊI®ªs¦vèta›îCUuJïëKk²w©-Ñ=Æq[6ï×Ð “‹Å¹¤$N¯Ø›$¶SúBÙ-Aþ 9o Pª uŽ˜QR}Ù4.ñKkQ¥ÚI<Ýnî”f6}™Ufl9û” Š7:if[ÉAi­eS(¥‹¤„èÖç ŽǺh­Ç)›Cû²›Òi{ïRFO& ~ã5ÍÐ ÞÊF-°ëûŸ5°ì¦‚‰‘#š–|RôÚºÓM_žÇÇ3¶È)÷r . _»½ÊC7cfbÄÈÓO^Öj'ßVSÒÅÈþ/Äÿ%Vr”%FâÉèÐn~~çÍ3*%–1?JVVÌĶÑ1û„ÀÞÿº ÏÔèÖN–¯Îx”ýà$iS(óŸÝ~ÈÑ1Ý)€MýX†-èD¶b5Ü,B`'@«§ÑÚHš×Ðu•(ÆÕ´J @'@}x"<¢æqŸA N!x%ôQN@1žNc‚4.%¤e¨Âr,À%XŒØ-Ï$!ô¢³=è'f{i®Ñ×ÙyÍh ï5®pûhEí-ÍX¤v:aèÒð½¤PzJÂ0÷¹ß(¹9K]ngjŽ]:ý$3KT7²¦5µ»9…ò½4h§=ª5„4ÅT£µhóéSçrРBÇ)Ò êè†hdn{Pæè?ŠffG–›3Ê0Y´jÕ)ÔL2U%p;gà ‘`ØcqŒbQ‰zÉ9ÌØÕróî@MjD]O¸•Ô›ò£“Ìæ"ÐAD×¢ë%Ã0‘ª'‹ŽÀ¤S•9„ÃRˆFOˆFWÁWˆ» šc`-©·€~ Ïâ¢nˆe!‘zZ]‘µ¦Eê4‡’'¥°øä…GšOe„Óf2î2}'9`+Ö`»p5µ`,`€m™Yë¹$‚â$X5©ÃÑ^䛳ÃQàg„+üenh•;¡UŸÂřѵÓ]å.£?G\“љ’–fâ÷L~€¸Q¹†¾|Véà/+>å)\’If·L¥K&x!é‘ä ôa”ÐwS˜ü¾¨‡È®èœÄâŽ`¸¥ua0…†q4žvWY½šÃ­²Pt܉2Ú¥Ëýä…‡Œu Z>õãØðÀ䴜 &s)Dê)Hš(D"ä²vrØrÙv²ódÅ«ñ*^¯r+ÞOð$ð;;Ëz5A¥“o=ýnÁ­žÉƒ’B5‹8²Øo:‹Í™•þ&º.oöÙªÚcY×àµÒä·áv—lÄ-2A­L“ßê+ A¯Â¼NB½oDïp¡ï”:qQZ:•ÎçßPK_è@` PKë‹MR1org/junit/internal/runners/MethodRoadie$1$1.class•SmoÓ0~nËRÖuãÁ€Âš–5TâL¨*R‰Mûž¦Vç*8Èq? ¤øü(Ä9™ÆÄ$ÔYòùüÜÝsç³ýë÷ŸúèyXÁm5ÜñàaËÇ]ÜsqßEËÅBÍʼÕwñBðJ)¡‡iœç"'tÇ™žEóBIIe„VqéÂúäÑka³é»,žJÑê?c®]ÉŽB¯}ޏð€à ³© ¬Ž¥oŠ÷¡÷ãIÊHsœ%qzki÷Ç ck&ì,ž¤,Ïa¦”°ÑÇóøc¥±šEo's‘¶ú£O‰ø`d¦rÛoOÎTl Í Gg*¤02’L%…ÖB™hÈl»g6Ç^VèD¼”ök§KìYnÀH%i–K5«ŒÚ\@ nµº.ØAÈ·sŽóÿ–DØüï!á ëéO:IXfw–m{ÉÕS{Ì´‹^·l{AWBá}‘› Å¿û¿hÔhØòwXâYÇ%FWY{Â{‹øîWPç;–¾”> –6`ePê>šX‡ý#¸Ì^–á)ï¬-èްü }>áðKöç¼¾8Åó\áé0r•åµ2æ:n”ëMÜ*m6q‘µ&cª±R-PKA#óŸâßPKë‹MR/org/junit/internal/runners/MethodRoadie$1.classUëVWþ „)D( ¥¨-Q#mL/@B!Š­–!9’a 3®¹€}•¾€¿íªµÔµú}¨®~g†(¶\’µæœ“½¿}ßûœ¿ÿùó/“ØiG7>WË)ôàn ÷0­c&…Üï@_ªå«v|oÔiV-s˜G^ÇSèÄB ·±¨ã[K:Š0\Wú³Ž2èØ·œLhïI/ Ä¢@kX³ƒÌM‘‚ç‘k‡¦í†Òw-Çô#%˜K2¬yÕUϪÚršB36a9ñlÃR‹#ëÚ¬W•]Û•Åho[úekÛ!¥»àU,gÝòmõÿˆ¨)߯µ‘™¤oÍäpÍ*s)‚÷l× e•Ñ>âG­Ã…]kß2£ÐvÌŠçV"ß—nh–“¬Ì?¯Èg¡í¹TÕ› ËÝ1Óõ@úûv…º®Ÿ¬kþ¹¬D¡ç—EÚ“Duåd™Ù#€J¯/ƒÈaO†æ£0ò°ïý¬ýü¬ž¹[gÛ˜9Øòö®¬„Ó9ª›<ËÜ)2©’ù™·•Ù Ç«1¡ð¬õ¼[q¼Àvw¦ŽeßaÅÀ%|d  `HǪÊ,wÃÕÎL*Ñ5ë6ð½M¥ç‘ð£Çxbà'lé° l£"p­¡Â³«ßyP7¼Ç¾u̲ B¯.Ã+ª$ž ôœÐ0­†#Hÿ7Ëœw¤UJ%nP§@'ÉvX+×Ç^ËÆ³xùÌÖåÜõ»ò Äº±³j¾´ªu–@6;ÒhãO4|Cpz•[™FsF‚h{Ïf4¹ì9ótŠ«o‡¨-¨EaÕ;`¡Om5WÙ2– ……Òüìrq®tê$×ñÔ¶,;,ÝBq3 eÏáEÕQwªè°ÞËwÁ”î3Ââ¸#éðÔùÆþ?Ö ù¨nW«ZÍ[¶Û»˜=¦ˆýâ$É_ÇU>l=|Š>DS:­æàÎáçã×Äo“;ÈÓ]4CãÞ5:ö bôê+4¾FóËx™k+àëx…«Ÿ»¨þ¨—îS %jÄq-¤íþ­ð-›TÒº4vãzŠc‡hã%3úš~Eû!Rîh½Ú/H‘Ó!°1ÞÓ /½§)Þ sóHâ5º~Gú:Î%ÿ^Ò¿>Ïsø ÞŸàCQçè!pŸaåÈ›C/_í<À(`bwP ~…œ%äQä͵BéelñŠ´±Gú:ñýÈàõä©ã:†yÚB;OÙ8e»GyÐð#D Z{Œ1Ü g½XÃ8&è‘ID) ïæ[Þ$yÍø,Îó-LÅznÓ·>žºIëFòkI¶PKûŽ>ÌíºPKë‹MR/org/junit/internal/runners/MethodRoadie$2.classRÛJÃ@=ÛFÓÆTÓÖû])Ø‹ñEñ¥(U¡–оmÛ¥Ý7¤þ—à|ðü(q6-ÔÇ2;{fÎÙ³™üü~}8ÂnV,LaÕÂÖL¬›Ø0±É0õdX8d(Õü ëöJF®T‘÷Ü` ”B÷FD=¿S÷yGŠ3"Kj»`Ø/NÌ*5Œªß s5©Äíà¹%‚oy„äj~›{MH½†¶ÆûZ V=†‚ʤ‡ŽÉl’*‹Ú€uï‚¶¸’Z?û¿õ Ï_8Y»TmÏ¥ê‹&¶ll#oÃDÊFZg;ÈÓçšØƒ£µ]«®{×ê‹vDCub /¼7¡&ƒIpC„$”eÃ:Y5hÊ4!0ÇÑžiþ zÓ°¡ì„ö±Ê•w°ò'¯qM‘X¡hǹ…Yd¡gC~¤pJ«®¥Êo`HŽùV¬üHç>ýÓH4’˜;°H«A?â2œ˜E³FüüPKöÂòu²PKë‹MR-org/junit/internal/runners/MethodRoadie.class•W‹_×þV–ƒÕ¸4˲ˆR%U(ñ‰bX%(IÛt`]vÉæÙ&6ïG›mÒ¤/ÒjظÔĦM›4éû•¾›>þ‚þM¿33;ìÂâ~{ï{Ï9÷œï~çž™·ÿ÷òk6à?~lÂX ZqLšÛ¤ù”4·ûqîôã.Ü-Í=òøi?>#ͽ2wŸŠã~”á³2s¿Šü¨ÀƒòðP)Æ#2zTÅc*WñD1>çÇR|^ =)Í _Pñ”+0VŒ§¥FæÇý8‰SòøE?–ãY1óœŠ/ù±Ï«xAd¾\Œ¯ã«âü׊ñu?ª1¡âEYúF)¾‰Ó¥8ƒoIómßQñ]?6bÒ%™³*¾çÇf¼$aœS‘VZG,f$vDõdÒH*ðYFÒRPÙyX?ª7FõØPã ý‡«EAq,n™ƒ¦‘PPßO 5NÅL«1‘ Îâ€n™ñXãþT¬Û¦biÄH$ÌQYRpõ\Ý3ë÷‹]†5(¸6KÚŒYF"¦G]µdc'Hµ¢V“Bm Žçz™V® ¬‹GQ×K,wÄ#†‚…fÌèNô‰½?jºñ=Ú«'Lyv'}ְɨ»˜§Ž—ûãzÄ4$â¤B ° Ê®ªeŽñQÙ« œ+Mk¸'3é îµ¥8ßcõr޶ƒñ„‘ì6ìIé· roú³4LÆoíðãÞ¶ëfÔˆ8¶éí’,C»Ž ™ã®Ê·‚2×à Ô#™Ô‡Œ\r°flH°Ð¬”Íݦg8sí5dÍ'ŒÁ(YÑØ;w޶GO V¶[þ\h½ß)X–ÇŠÇÀ³Ö 'e™ÑÆ"¢[qɵ?c«"K ÓLJf­Ïã¶d25b{ÓkÆ£ºeD²Ý«ÎåÐm£…g™oßã6 Ó3J×Jsæàè2`Ý ¿‰È‘¦‡«‚ya^øÄS‰£ÝoeSv¨P`§1š0$"5?Òpƒl<‚}¼Ï.3a,Γ.$`N²rY‹Mrs’ÃñT4ˆGDÀ’³ è±€‘ Xñ€Ü5(¢âè~ŒŸhxçy²3FBTv%qRaéì¼Ûž2£!IÕ®c£$–™ÙfK@Ã[ø©†·ñŽŠŸiø9~¡á—Òì–ÍFq+ëÈ䤆_á× Ö]Yªhø ~«`å1cŽ‹á@f®•¬l ô§¬À˜žlÕð;¼Ã ®M\ý}ÎIxT×ð¼«âþ„?«ø‹†¿â¼†¿áï9æf“veèÿ¡á=¼«`ÍÅ«›|âÔ?5ü ÿ¾8›² ™cû"W€™ìŠ‘€» Ü”CúKÔDÖºA3aˆ9ÏÆªà¥ ¥§uÀÒö­àçÁ{%‹n°’Ud„ÚYæ“Ã"Õ¼ìbi½ðåË‹xåܺÄòœ[}D¸È$oÌpß>D ÂáZ2+]‹ôÑQ#æ2×èœ)7Û¤dÚyáP7ËÞâ`¶’ýNGá…³¦X‹¨Þ­ÐÙªàÜmäMÏŠ;c‚ '‘›ˆòRP7O•ÕÌäL¦Í_&H«bštý å þòB=¯.WfÉ®¦å¹3ÜÊtë0KJŽBV}®œ;K †õd·qL^›bv—‹—÷f¼9ϙߜ‡ùtKO¦æ6_"YæÅË ¯@‡ò˜Êw›P«ø±±‰_F>TJUå¨R «Ý³¶²/òʾ„_ »±‡mŸîáüöËBSPBõçPj8‡ÂPï|¡ð9,˜´u÷Š ŠØ¸Ç*ZYr\ƒ*Ô¢kð®lt,¡]€=O{Ôͽ ì‘xUhÄ/×YY]oÞâ³ý¡ÐKXFÑ8rTÈŸ/ urf\ì”l]Yrâ9”†VNÁ?5”æØÒ&°¨;ë±áÂ$}X…{¯ÆÔáÅÖm~Ôñc+Äï²0%×ñ©‘ÿëq%Zˆp;𩵠9#1WS¿ŽûíH¹ÑÈÛŠU;q“ˆËCÓ(ë_ËÓX8ƒ«ßFf ¿H{<›”öp,w­+òòãÚl±‘Êh³¢‡·(Ƀ êc¶IÍvM*ò*äzƒ® äaÚ¨¬?Åäݪ&°¢Ëé—tMci_åUS¨¹Ð-Sã{E„Júº,}-ÛECz!E­çÏ:”²ý$wÒ)7Ȇ(ÙOÙAêQz€„ˆPcõ¶}ÙdHûheõá&;®°M˜»™‘ø§ ÒCï$¢³Âþ Òd·M—Œ#D¼–÷McEß®®\™FÀYZ•Æj>¤qÍjÓX3Tg}×v…_Gp¾I×ÂI,l¯wÊ ‡uãØ–±šm¯’6 » ÎÝô¢º¯!<…u¶­’Î×LÚѵ2¦µvšÔsðk'Z@”(Žó×î¤Ô(ÓëV¦u‚x$‰ˆÅSMáÅaŒánË”;Ûqw`wyizŠ\ø8>Á³ßEäoáÉÐÖ0Ö‰âJâœpæ¬Gh¾³„«]Îô:±®ï$o6(è ŸG“‚q¬ààƒ ßÒ7v7ȾŠMi4œxÿ=‰Up½0Áï°i,!l×]p¢Ï’/ZšVó|h¡f‹1ѲIRê>­™xÿMaÊjâÑDŒ¤ßêaãdÚ“ôêWžâü)J=ÍSæx+wÜŽ“ŒèñxÖÆ¤ÔF^鵫Ev¬>ê¯%לZ]œ‡1¯ï¸Ø 2sÄÎG~¸ñw2zÑ«’«x›ûä:®ŸÂ–4ZfßXÏc1^Ⱥ«¼L¯rñ÷‘í¢“$Ûå/Å_çÚqH¹+@œ¿2§û?PK!øÄD 5PKë‹MR0org/junit/internal/runners/MethodValidator.classVé_çÿ,̰L@V `.ñàˆÑÔ(Ö‚† ‚A“˜aw€±Ë Å£Gš´é}$½µmÒ#©MÏ$ ÒšôzÓÿ¥ïû*Ÿ~ÏÌî‚Æó<Ïï÷üîë™ÿ|xë6€ýøw‡0£c6Ž2ÌTá㘓ÅÑq!ÎýÓ:2:æãpáUcŸÑáÈÆa"8§cQÇE!½$ËeY®ÈÍgu|.ŽF|^x¿`àáù¢Ü¼X—ð%Y¾¬ãå8và+q|_3ðußÐñÍ8vaÆÀ·dÿ¶ÜÇÀw ¼"ð«/Žï‡L?0ðCHñ#¹ùq~‚«® ðS?Óñs¯i¨´}ßó³¶Œ\°­ž\àdzFœlЫ¡jÜ™u­ çÛZK®†pÆrg{&æ|ï¢5±{ W`gƒŒ•¥Ð½#ž?Ûs!ç:Aã¶ïZ™?纶Ÿí™ÈÓ‘©ò¨CšcÚÛî¥}RClÀKÓ´ÚǵGsóÓ¶?!VhHŒx)+3iùŽÀ2Ì94ißÝ䟲ƒ9/=ieœ´x> »1ìa7XnÊI(¨¼MlÐçópãz¥—òŠ÷Ý%t¾=“±SA¤Xů!¯q<°'Uз30Cžž±r™à´²žn·µoLbûäSWÍÈÚ~ ü×¼”²Çs©½)¯}Ôë÷gˆ ü\Š1Ò Ñdž52 l”¸5Ï&™+¸Òж†<ÌçY fC¨ü¯Çßqg)*f[©9 Ûî= eÎn õküf‚£LÆ-×õ$¤ž«¡nƒ '†œ.ÕðH)ÉÑÎ5˜¢°žþÂQñðçî‰Q >îåü”=äHÝÔ—Tc·!Í {Á·S sÔÌÜμ=édf±(QdQk‘§×Ä1 13Å õû¾uY*ÃÄ£8lâ(>Á®*¶Iÿ £hbEôq{Æ“ÑPSDI–u¼nâø¥Ž_™ø5ÞÈ«Z_ÄŽzIé;©¾dÔEbÛ›&~ƒë,’RMÑL©/1L¡MŒaÈÄã² Êò[¼¥¡û.­>L¬ÃÐ^Qá”)(Úgâ÷øƒ†CâJ2%²“Ù9/—I'ç¬E;¹›Î8©äÛ÷º,67o»$+¶ƒÈø£‰?áÏ:Þ6ñÞ2ñ.þºSÙšxoè¸aâY,q†Ú˜çH-3Ê1TÚÇsN&-M¯‡R’&–qÓÄ n©Ñ”¤€ä´ÌªŠ6±Š[&þŠ¿é¸mâ}¥HŽtuy§óî™ø@(ÿnâxFCËÚXIßæ“à&N¸¤7“\ôúðOü‹½¹.T®—\°|‹©µåé¸÷¹Ë2+úûäôKÃî{yXV³vµ.Lœ]'Î&³²f=†3'ë\±U<‡K¦V4–¤iË­tºä6´¹·cDw²ƒó Áe%…ðÖ¶R½"£†V¯ª-ù±½®bÖÐÜŽM Út¶‹ÉF!ú'a͈LlÄÒ9+;j_’h¸j«_gZ䪓.œòÒÎŒ£Ò½m“zn)©mXbQi-,Ø.ƒ×µYh7 ¢š§.ºFYY¥Æ #ðÂ3Ë›´'lv²€ù"YÇ•jKPêIS¡á>Š9­*_žö|­(âIOžËØÄÔØ`¨n,_öBšUFžÛ -ü%<ÄŸÍ2$dîBÃõòãæY'î>ɵÐS(ç Ðб ­ceSË(¿XGç T¼£Xû¹&ãºkjñêùÇwœ˜Æ8¨“(á['3Rñ¹„ª¯c+*Ë—¡s7¢½Jíï¡‚Ç%ÄG:WP­á‰‹­ÂœJÜ·ŒšÔ–áŒXS®¬ÙA'@W <ˆ-üOm®{±­t¬}e}‘e»hóIŽÇ™ÜC̰²õñ‚­Ô q¯£m[b¡u²CQCP•.*ïVÊÌ)R¦á ŒZžT Dàü¶ò«çÞ.‰í~®Sè ;¸‰Ð0§ˆ¥µ¡ð'"k›Eà $rµ«hœx÷¿_jõ£z˜áê]£ 9Rð$¿1üÆ ™G… d‹$i Mg®£i¤œæÎelËgG„¨¦ØPe#YÁ|TVMa&±I*ËgÇd} §_KdD™ü„Þ•5ŸyÖ΋êNVÇh× >Æ‚Ž5ÓÙí®jCrz@ã˲ãHE3íÛyÉí¯ãäö«0-×Q‘xðHeÞÜUìbuïNìYÂ^!nåžh RNí\–ÐQ¨7!¡Ú}7Ñu J…tGBHÑ#Üm½S±>tWý›ñí¿ù|6á;xûêGp=RÂuýÃ¥b[a•HÅV±-ZÙX`}¬ä‹¬—Y7˜œ˜žÿâ þ‡§µ=8§uó-Ï«¤>Ætõqú<…IT¢U;Hº§™Ä:í¦pVÊ\;Ÿ<Ã3’|žžÅsLz•6©š´\5©j`EužTáÝ0ïÂFxž'K¦‘R£'ͯ’”6ðPKxa>RqPKë‹MR,org/junit/internal/runners/SuiteMethod.class•U]wUÝ·™v’a¤PJ¿PlQ1mGDå#¥"--…¤UЂ>LÓÛtÚt¦k>@ÿ ÀW}IY°Ÿ}÷ï¸Øwš”L]š‡Ü{ÏÝ眽Ï9¹ù럸„Ÿ œÅ%#ø]F{ä)¥ðL(ƒpÉ÷öºˆ äÊQj)Úòí=ùÔów­*=™W0þLÜ—[ Y ­÷ (>UÛ¯Ëð}NÝÙ&¼;%Š¡ªÇäŸNÖvܨx‘_“KŽ*å©.Õ³*Љ‹øÔÄ(VØõwš¸‹{:J&ÊXÕ±fâ[|Ç v`‡Yñ޵úŽ[¿9M髨÷MTP5ñlÀèl,0››Ü‹‚prCN!«V3ñ½ÂŒâÒì[ÛØayL¬ã'!I£@á4ÃÄcü(pñ¿,;ý/À»h¾|5.ÖýØv¤:Õmß{Úáñlr{ÔDfHïm¶›Ý½mÕ±ø8i4ŸŸ±ãîL•ÉÛt¶²HesìúD¾H;A%îìٕܣ؉œuFZ¥õäz)ó¡±÷÷¥«ê— ¨×£=,tL‡^Ë$p6É•É6w—¹¯uZƒr¤ZmS®×Äd°IîM®-Ëw¸×¸~„ㄟð†¿ÍvÊ¿y§q]%QÎ¥R¯ 5Ñ_*41ðú3L½Dzý%2ë0òMœhÂz_Mœ<Ààë‚ Ç©&Nÿ‰¡ò¯È¬Î41üzú7&Ô°ˆeþI´ä)¤ÛG©’ê8 ^!±EZ&½;$W&µs1^ã¹YäcJ@™w…8þ=Lc†–ŽèµX4zDÏroÅ»ÏÞPKC£çoPKë‹MR*org/junit/internal/runners/TestClass.classW]sç~Ö’¼²XÛÄÆŽeâjJŒ$£Ä€IŒKc N FPä:šµ¼¶×È»fµ"Ð&-¥´I›´MúhÚ´Ìt|ÃtÒ™ÖNÚ)Ó«\ô¦!ÿ ÿ ô9»ÒJ²dCz¡Ý÷ã¼ÏùzÎyWÿúïßîxwcèÇ| ¾€‹1¾MK*.«ÈÇ b^––·Á‚½ +¸"GE!źqU^k2ºÃ7ñ-¯ î*¾-‹ßÁ1|oÈèf ­øžsvT~’Në®íðp{ÅÈ’ Êàó.GÛë}=T—°äC–À§>_žrõÄx=Ÿ“ í$kaÚ^™¶Ù®k/7. žù?ÍáјYÈ.êsöks=4¸¹Ac-‡Ã’?Vïr‰+'ýü–® öá‡b5Ú‘“ŠI’䊎cX®‚èŠc\5í"ùÒÎ"ÊW Ç ‘Wbn¹ H»ØÜ ö%-c»Â£—Ö1a[×)æÈq–d¹KÔ8T%"%yâZÎX‘¼T¼©â-{vÌo­Õ½@±’—5§‚X¿êŸVy:£/Kç®ɺŽi-ˆaY»èäŒISúe[ÐU÷‹(w Nš–‚ø¹¢åšËÆŒY0Ù^+T,H ®`WÎѰ?Ô° » ^鿢FÃ0(説ú³ÜN*ë^-»_IÒ¸ãè×%SÎညixï¨ø±†Ÿà§ÞÅ{¤Ì†¨¨ø™†Ÿã~‰_i8‰4üïk˜Äó*nk¸ƒß°1m4JÃx_AÏf¼¤Œ†oàU¿Õð;|¨á÷xEà þÀL?Ê=F­ô3³Kgc®Ê˜Á’0Ýë‘ôWv3v¶XîùU¡Aﲫe6kÊ,5è*ællÜõ«¤Ó¢^È×\YˆåMj¹åOˆþ~û&fm‡s*!=¹¼îTÝŠû4É-/¨ÖÊåêy}pÓkuËk3¤Ï‘å]ƒõ®ˆ«]•xLØy1Àg>¯³«L¤!¥Y×cüfãJQÏצׯ>~mÑð³ºÃúd4以àÅòbƒ o-÷¾œO–ƒõRkCØÍÂ~~{2ðR“|‘³& @ãx¾Äñ^®œç»‰ïXbJ"ùW4ý™³žä³o aìD žÀ gݾ4ö!x#=ɱ û+¾GCØ_Ò6Ì·ÈD­!ü‘'#ºš½õ~O‡-éðqÒ|>Õ'Òg`Kœ§â47Àyr Eºš£Ì2RÛ¸~óïP_ZGôt"ñ4­£åÄd†>Á6·qžMÁ?Ñ:އ?FÛh$mŽ7ßQC#Ñ®h—zOÅ›»¢Ã£-ñ–äÚGcñاèNÄ[RëØ~Z*NÐÇšðâ­¨²úàß«þ˜H®£ã6ÔÔÇèL}do˜vƒy‰2 æ@¼>E»³Œã,g—9¿‚ƒü‡q¯c7ðŒçí =É¢‡;‡˜ËSÌæ3ÿ‡0F‰g™QÎGq„ÿ[¾L©1Ž¢Ä{޳g¡®çq”œ“+—¸ûE7ÆÜ¤¤0&Ê¿0ã8Æ wvQÊ?9À“¾ÔD uœR~ÜOðÇ^Êß«%öö&;±c ]wКôÑÅx„WÝ âágt¬ŠÅ½M½ô£–Ų2°ø«üñ)iý€ˆ¾S©Úôö•ÓÛ=N$ãáu<~‘ð½ÕŸUÙÑáù÷kjœUxŒœðl:HÌÔ~ŠÑ 3¶AìR)LqWñF•ØiÁJ%N§=‹3Ü‹ÿDÑ:™ZCiÕ³†øDB÷8⦅”LJ2 íóVîÂ{÷ '½§Ynß ‘rŸ…ïU²—¼õ´16Ûi[õöã ­=Kë¿Ælž¡MÓž Z°›^!_Ä«ÉÀ«IJû^MòÌa/§çʵ…»|‹í»Êµ•Ì }J¦ùe0´†™Õÿ©b~/s--Š—Èà ´î"3þ2;â¥Àa\Yÿ.òÝgdO)ªòÿù,×B7}©@j:à®ó¯sw/r.v”z‹&­ ô´®á‰ýe¶ª¿h%{Î{»M´ýB ÷"÷_Æ+¥xHçùˆànœ¯ŒÔ4¬K\ãGK‰Ã%¨€¬¡o#ÎRƒÆ‚îIÍ"ç…m®$mÿPKVô,VéPKë‹MR+org/junit/internal/runners/TestMethod.classUmSU~6 Y–yP*¥”„¤%VѶ‚µ)/–šR-)µ­oK¸„¥a—ÙÝÔþ€~±38cã茎ŸêŒ?Êñ¹»K²DIfî½{î9Ïy{Îîßÿüö€+¨&1€› ¢(—[*–“XÁªŠµ>Äñ±\n«XOò²$uï&±{*>Mâ3ÜW±©¢,-¨ØR?îžµ£`¢´¯?Ó 5ݬl±[·p×»[Tp…ã.×tÇQ0[²ìja¿nnÁ0]a›z­`×MSØN¡|¬G£ø’A –³Ý±Ï6ÇHcËÖŽP.¦Ø¨l »¬o×(,Y½¶¥Û†|„1wÏ`°™ÿÃo¥h8ëUÓ²kÍÎ=V¬ ·l«îz¢;é¦i¹ºkX¦‚¶„"ˆêë+Ô&ÀêóCf+vVŸWÄ¡o7” Õã¸Z‰M£jênÝfðùv¥|HRÞ³­oež‹7h©ÎS~Œe;jÊŒ¢ÅHG-få#9¡€e!n‰]Ö†<Ž­îµBÉðòžo.uo¹Œ9AÈâ.ûAĸa>³ž2í‘pä÷¶÷iãw^²Oö¹í–±5ãtT‰T<Ñð¾T:I 38¯á+dH„“W3–)™ëoÚº$©×{áh˜EFÃ×ȨøFƒŽí>ý樨hØÌ¸uå™Ê§K§á]ì*¸x¦ñP0ݲ_¯ÕDU¯íjý@˜nˆ'SíJ•ŠpÂTÊ·³bݯx/ë¶71MmÛ?ÖI ú%B#¹m›¬ð$µ¦·Ð²"‰z[ÓÓKÄàE—>Å*NÑq䜒(k¶uÀïà‘“6s–×Њ_ìøIQz¡ká™»ÞaZžt vÎóÛ0À¯I„;IìÈcî (äö×q>=¢<Ê=ûJ.ÿ‘Ü¥—ˆþäLpDŒë×qšN …7ø¦|3¼‰IÀ;I7Šw’Ž"<ŸÃ[›½g`(÷3"Cˆ5Ðó jìÄ¢?6]Å=•s¼æ«ð$3ò¡žR[†4éCÅ õ'â¥ü_èI¼Èÿ UAqêEt=\§÷æ2Ãgé Êa2p’bäÓÔRx¡æEϧ’»t\åáž9åøÒtÛËV#ñ=z”#ÿéèT ótp‰Ù]¦Û‚ç~Ô‡kºÜg=Ë9®9ZùYßœçHæèk@û®KBèÃÍ Óûeï~¾Ù–«Ü¥¤_¢vkȵPCú›p¼Ôå½ ·}¬Ktý ¤ŽNA,… ú?Ë+\ßé•îuó? ¾ñ¨5öV %»•þŽ^{ØâuÒ»]aF«¡r¥šù¥ÌûD¼Ês/±®á:>`#=„%2Zþnq}Äý•>Jî ñ/PKˆCY.\Ï PKW@uW!org/junit/internal/runners/model/PKPKë‹MR7org/junit/internal/runners/model/EachTestNotifier.class••mWGÇÿ“DV6ÛC’R-Vi²AV@°¢ÕZ…–6Ä*˜û K2á,»ž}°~?¯{N…£žÓcßö“ôS´½³Y’blÞÜ™¹sïïν;wö¯^ÿ`›*ò¸:Œ¥¸¦àºJãç n¨ÂM_à–Š¾Lâ6î$±„e)¾Rðµ4\‘ßHñ­e)V¥¨HqWÁw î1·_l î2”ÊŽ»mì¶ð 7°mîÍÍšé Ç6îv%2¾Æ¬s¯æŠ'r‹áÌQß;í}2º.hïC¹0@˜þÔb•!qÛ©s†tYؼìnrwÝÜ´H“);5Óªš®ëH™ðÂc˜ëà Ûç®mZQÏØ% e,™µÆ:÷üŽŒU³^_6…¸D+”w̧¦a™ö¶±Þp_e„ðHißt·¹¿ô¬Æ£êäzÚ2œ"âj`ùâ‰Å#r‡×üÑJœî]NÍ’p:;CLœgÈ6#¾°ŒJÔô™J|w‹r˜œÏ0U×oy^°u®Ð«¤m‹ªp,ÓçõÃ'etˆKƒ:2Œl —˳LwÊkð:%T+°±FŸÀ—ú–feÛv\©É¶láó–aîº VלÀ­‘B^Ÿ\÷­˜–ÕÕp ³>ʆp’R´¬&ñ)Ã…þyÉp÷¬iXÇ U|¯à x¨àG ?ág ¿à}©—NÃ9|¢á±ôœ}NŠËRÌK±“afàî oÒvws‡×|†…ÞÙ¾ïl âÿ~ :>p«3õ÷=0‘e*I­é]ÈŠýRžO·-uXCO¦ˆ‰!È¡£Á2Gµ JÃô*ü™^ׇԨv¸È@:ªGˆ±ƒÌÚÍÐì;†‰÷T¶XÅýòô#‰!#o&Í2òrÒ8 zxpšä8­6È"NcZßÓK/Ó§^"þ[èz&tKL‘L“ëÍNà,i>nºÑ8„3†…3(FsºkQ˜-# 0Yú‰çH饷HìãØ äõß{ƒ¡ ã¥}({8Þ= …Ò‘‰\ ¶ŒžoÒZÑ'qžöèÑ“Å|J«Dsï 2¬N½B’á9r4ÑÞ⃊~q©ÿþÝŽ™ 3;MŒqbž ãéD§ ¤‰C¥I×}†¦(6ÃELGg(Gygf™nGTC›s¥zµ³Ë¶ÈY¸’g0‘à š$KêFº‰“HR5$QkÚFDz¯ûqNtstâ”zr.÷ãdº9ÓÄ1zræûqF»9W‰³Ø“³Ð“íæ,g¹'çJhùÙPK®ãÔŽ PKë‹MR?org/junit/internal/runners/model/MultipleFailureException.classRÛJ#A=c‚cÔ¬®ñ.ø´» Ž>ʈ ^@E¼ä½Mlét‡žnwý,Ÿöa?Àk&J0 ˆó0uª¨sNUSOÏÿþØÄr„!,T±XÅ¡žI§„nJ—)k®Žö tLÛ³&óÂø¦ÐA£÷¡²­Œò;„©Ÿé¸qðJÇ©Ê|ò«I(ïÙI˜H•‘§¡s-Ý¥¸Ö\™Lm‹m›qþZ,û[•’Ôºv|X8VÆKg„Ž]0†‡Š;,¨ã“ ½êjy(”NüiÉ®çžH:gËÔ"4Þ»>tßœ ôn÷r-L;¾¼uöwÞ–ì°ÄÈ…jáÙ”°:¸óG´ü)¢ \KªÜoé£ÖsnÞ—]'[ÂËÂÜy0^udSeŠõv±^äÍY¾Qß±ÏIjADØúòC6úÜÏQ°‚ŸŸæQÆ0Ç g%TQ>ãQ®œq,q¬¬®ý=2BÿQQ˜9Š1F^Æ1Qœ[u|c¥IÆ5޽Ê£ï…Ï4ë4 4ƒÙ‚1WôäóàPK©­˜˜ðPKë‹MR9org/junit/internal/runners/model/ReflectiveCallable.classQËNÛ@=“868ð¦”÷އ`„+ªnP+U²ŠD#ö“0„‰Ì¸š8)ŸX´{> qÆDiµäû<÷ÜÇ<<Þÿ°‡µ!æcTð!ÂBŒ2>FXŒ°$~2ÖäŸÊ›§ÁQv¦ꉱú{ﲩ]C5SF¦’¬¥ÒSåŒ÷Á ¿0]ƒ$smÙé‘H›kgU*]ÏZíºò’„©<Ñç©n妯TšúêC¶$F`fc3騾’©²myÜìǤ ÿÎ? ÷Ì ¿Ù>'ÉMfʵuþ媥z—5ñÐéFX˜dƒ—‰ù‘õ\K5~ù·síú–5D©auíwÌPà Vöÿ㯯 0ý7Ô¸pÙ¯Á[°å«Æ\åŇèÃ`ÏÂe¿å(=I-¨+[w74Jˆ)Ã"8Š*eí@=F-0Ž:Q¾ø˜^‰ººu‹Òu²}‹àO/¨Æiy’ ËCzžr޹‘ Løê€|ª¨åÆAàÏNká?[Œ7÷PK68ø‰ÑPKW@uW!org/junit/internal/runners/rules/PKPKë‹MR<org/junit/internal/runners/rules/RuleMemberValidator$1.class½ 1„gý;=¯´´°6â ˆ‚… ö¹s9sÄ’œgáøPb[+wÙ†o_ïÇÀ£I‚”žlí Þ*̈́ɱּç[Îî,µºÈ`ݼ’wIoL¡­W¦Üs¸ÚK‚!ae])ªÚ¨ ” ìŒÔÂÕÆ°óÑ5{ñ8[@íšÞZKïÙ²æÐÒ”âW\Âòz6ì¾ÓŽ‹˜:èFï u/jRÖÿPKëÂR³PKë‹MRBorg/junit/internal/runners/rules/RuleMemberValidator$Builder.class­V[OAþ¦·mËÊUÄ*ji•- ¶ wE‹7L ¾-í K–]²Ýå}ÐDÿ’Hˆ’øüQÆ3ÓÒÊiyè™Ù3ç|ç›óÍìöï¿ß "FÆBdq“â&†Œq a0ބǘ”0FÓf$Ì2„UÓ´ÕÑ-“¡5³®n©Š¡š«ÊŒ¡ )†Ð’¾jªŽkk Ã'×Ó‰*OI™*OS„!mhΚ•/0°÷TrK5ô¼êX69¢E×Ñ %£œ”„9†È×вGa ò‚ij¶(©QRöDR:c٫ʺkꎢ›Žf›ª¡Ø.Ï)Ðhh….j+š]†í;VD ¤u˜`èˆÕ´¢?Ëà›±òÔ‡–Œnj/\ŽöV]1ÈÓ–±rª‘Um?—œ>gM'¶Ò´«y¶1QÏR>ñë:^fwó¨Ôh ß3IÃ÷þ`Ù‹GúLÆúåÙÖµ*í¾ÆÎC†i…¶*”fσƒ…£óæ×Ç.ů_.§ }£É$Ãë:;u´ÉþS®¯g'Y©2Æ«L5Z…®pS p0É_ïêwÀ<2µ·°¾Jƒâ¤{vI¬z¨K–kç´y߸îS¢8[Ñ#£2ZÑ&#‚fî{ÂÐ^Ùç”m«»|³žÊXÀ3†¡zˆqäç éF ·p¥Í/WÖµœÃ0Ýøa©¯× Þ¬ùø¹ ·š§ûÖY},Š|Å©lødgÑK_M™¾§^´qÝè ¶Ð“Qú‘˜4oãÊ–ýÝ’%ÁÉ^"Ï&ezhì‰ÀOìÃ÷îÃ?D`ùÒ><{ý2Ù.øÉ:ðÁ¥/òUÛ&¤\kW‰Ä¬Èæ:Íe‹žh™Ç ²7ÑGÏœÅ0yxŒ÷ñâ?D/°©ð'Q¦%•ËÜÂíÄEòØHü'<‰_zð®è3uëKßH(‚;ˆ ð~ÄKhßÜ:Dh™ú®ÀÄ·*N¡"T4ˆî–ùšŸ8ùN&[UÉ~Ü+%ˆ¤“ÉÞïgJNÒߪÚdÏY*ƒ”*%ÏR´—GÇ`{§f÷#Êý N³Xš#BŒ‡"s„ú^tR“ºAÒ „k¤È}‰öPK•Äš÷Q PKë‹MRUorg/junit/internal/runners/rules/RuleMemberValidator$DeclaringClassMustBePublic.class­UÙRA=B&&ê âW² *n‰¨ (š€Š…¥o“¤“k2AýŸ|õ|ñ\ªü-­²Êﱼ݈XÆèÃôrçÜ{OŸ¾ÝýéÇûÆq+†8ŒtÙÄ1¦a<Š1„q2ŽS˜ˆá4ÎÄpçb8¬† &5\dˆä„-¼I†Ždj‘!<í”9CO^Ø|®^-r÷®Y´ÈÒŸwJ¦µhºBÎ}cØ{$j CWxÉ¢?veÚ2kµB½æMñ[õ¢%J ú¬msWýà„½wÜŠ±T§¤†°=îÚ¦e¸u‰©Qoñšq‡Ú—¹MK”MÏqü>C–!ºÜÀ£BrCüµ°UZ“e̸f•?uÜÇØÙü’¹l–iW Ô7Ô=ayQó²RHUR-Çeˆ™¶íx¦'›¡ï—<•»®ã’½Í97 ýüÉšØ#­2È¥')ÎDsÞ\fƒe¡q9f¥ßp¥Ü¯»\ç©d£ÛDÅ6½ºKä^´¬»d×µyÉ]µÍ³VŒ#­—GêƒñW«J=Ðp™ Ùd{U>®Ø‡ž1œm7•ß‚SwK|FȪٵjT*§£=:ŽâÃØsù¾´Weé2®ÒLy¢¬„æå„°fâ‰:Q’¢ÊS¦u\ÁU 3:®áº†Y7pSC^Gsææÿó¥@'k½:æ‹K¼ä1Lµ•DÚ‚CWÓüt{ÛDKþç›J<)€ª›îÍ„®t³\fH曵PÅ=ÜbzºÂ*ÜÛ¬5Ãödj‹‹­§ÉD×?ùœ²x(¸¼ðè•™¥cæò‡12Ö0t›‹à¸†“³’é©v4Æ=„:Æ.z!ÃÉr§Y/Í ê霢3½ŠÐ„ÐGmD?£ŸZ½Àv BžèØE(éü’paê÷¤3«èx…㾟éï\Eä´îÉ*d7õÀDñCø¦B§î~h9ÚMÿ˜íÁ^J#Gû°Ÿ|Ð8¡bHT"@ P‡èïaµ„#ôÑiöiÞ&¬ÄÄ3+ˆ®`Û[Ä^´+ý®è 6`¸Oç@ BÜOÝH3Ü+—•ö¥<ç§‘R²­¥l$è t"ƒåv\áG1@ýQ‹#‡4JRÞ(í\—"ÑŸPKÒ€hêeæPKë‹MRKorg/junit/internal/runners/rules/RuleMemberValidator$FieldMustBeARule.class­UÝNAþ¦-ÝR Dü«¡°E~[I„€1i%R£wC;)‹Û]2» ú Þxí[p…?‰à‹M|ã™m)PIlª73gÎ~ç;ßœ93ûõ×§/fñ0ŠRQôª!Œ†lÓQ„0Ó9 ³îi˜c ËpW‚ÉT™!´fWÃ`ѰÄS¯¾#ä6ß1É3\´+Ü,si¨uÓrw ‡!¾a³ZòwU‡BÝh¡n¶P·èkÂßÁí8h‹Í-.Óhn‘]¼ÅÑ %¤w1é‡Mùø$†ý$AªcCdÝ¡ñÔŸs>ù PKÕIÜUPKë‹MROorg/junit/internal/runners/rules/RuleMemberValidator$FieldMustBeATestRule.class­U]OA=Ó–n)J¥øU J¿`[[IÀHB,’©Ñ·¡”Åí.™Ýý ¾øì¿à ?€?Êxg[ T›êËÞ;wÏ=÷ÌÝ;³?}û ˆ§QD‰bP=²ÈiÈG0EóCÐQÐPÔðPÃ#†pÙ° w•!˜ÎTBÏìº`­–xé5÷„Üå{&E»ÆÍ*—†Z·ƒ!wßpÆ7 aÖ·<Ç]k»Âq_yêmlÓ²„|frÇ„zQ±eC?ð¨œnX®7ué)ŒCÖŽ®ò¶„ªZå¦Qç®-g®â.1DŽZª³•¾À|Fؤ}˜ú†äMqlËw-ÖRå€qÝäVC÷uµžk˜zÅpÜ’êA¸éƒ2=ó2D¹eÙ.w Ûbû£± )mI}ˆw×d˜¸Ü܇g Î÷ª œ]%žÅîºå܅ȹB}­ã–TÞl—¤ò…¬Ý}i+5>rpÇhXÜõ$‰ûØsß•º¾¤õ¨+SհȆRº¿)+ú_>ð¾À°Ü/ ÁŽíÉšØ0Ô·›¼5¯ôÇ0„˜†¥c™¡ð×rítjÉs5CDݤó2š‡¦h ËM‹yE½¢áI %”6ÿÛ‰£±=oýöÞ¨¹ ë}Ñ«XgÅ0ܵ^ê¯û ý$2 ñZM8ÎLq¡@?ßû]’y˰ýÏWØq¥a5ü¹<ñt/óz!™®t÷Ÿ @÷ü }”®ý j°h5L+, dO8!'€z†U c”üX €8®Aq$ ¥’?.Dv:÷ÁÏHÎ}GèM.Ÿ8Eø+´^ŸøãY°1h,)–ô™³­ì6³ò&pݯ6ILQåMãåÞ$?¥8|Ô­êvu‡Þ¦ü܃¶8ÓÞâ Ù@{‹ìê-N´!¸~Ú¬O#á R³#ïYÄ#PÿÍ…pä7PKM3ÐSPKë‹MR_org/junit/internal/runners/rules/RuleMemberValidator$MemberMustBeNonStaticOrAlsoClassRule.classµVÛrE=£Ë®,ˉcÇ!áºK–ãµbG$’0‘M$›ŠS¦OciJ³Ú¥fW1|_|7EL ŠGø( gW–;UQ‰ÊË\zNOŸîžîÝ¿ÿùýO|–FWÒ˜ÐÃ2VL\M£ˆôp-…ë)”L”ÓCebÕÄG&n˜¨2éÊ`•!žÍí0$Ö½¦`8]“®Øì´w…ºÇw’LÕ¼wv¸’zß&‚=é3ÌÖ…FÖ;~°&6=w;àll©ªã{ë÷ý»ÎÜv]¡B ­/kžjÙû2oK7Ê厭:ãÓìßÖzÑÝ;Ü‘Mxj([e†ÔƒHƒìÖ³–Ž ´ÉOÇÞP¼-<õUtk¹¶ÏpÛánË/ë :tìšôƒ²Ž‘Ù¾Ï[aPúøí@I·E–vxCnh³ ivÅsΜ A· ¥Ù]åÔŸ¼Î2,tË@M°éø¢b¬šòßš‘úcèCLÃݰÈýk¸¦;•ä‘ì!Í: C¢l$vÕ8ÌHÆ{ò1p_Mòãÿ4iÔ®Ç%ß(ïa¹+rikÝúÛîóÝUš·Ã&¤7Ãt²¢—î%ÃÆ?¿ʰé Ó®©ø³a)¯VF’Åö2楀Ùn’F–^ö^jö(=ôAd;Ñ­Ÿn:í4èI"p@‡h +ã7 ÒkÇ9ȉ9BIçw„ Ñ>žù€à{ŒLFèEfj¸çáÐx~ JÆÚïÐðñS1§ÞMfyÅmc„ ¨Ó8.‘ïe:'‡D]i¡®¶P×èkBep=Jq¢™â"ífŠììG€–ÜÄ-å6©ðI « AªcCtºA;âªhsáÈoPKã0#ÈEPKë‹MRMorg/junit/internal/runners/rules/RuleMemberValidator$MemberMustBeStatic.class­T]OQ=·-ÝR Düª¥À¶ nÕCR$±¤FßnÛMYÜîš»[Ðßà‹Ïþ ^$j¢ÑÄ”qîm)PHlª/÷cöÌ™3³3÷×ïÏ_äð0ŠRQôË%Œ†™f£an:²nk¸£až!œ·ËÀL¦J ¡U·j2 ,Ç|Ú¨—M±ÅË6YF n…Û%.,yoCþ¶åÑ· S"7ž¿b}î[†Øºã˜bÕæžgf½àŠš¾Ó `ºåø¦p¸­‹†Äx´Û¦§?£µÉTâ¶Uå¾+¦N3 ‘ÝæwR°‘<Æ{HW§l}Mðº¹çŠWM£°Ãw¹ns§¦+U-C÷l½`y¾!óט!Õ5/C”;Ž+ŹÃÈ©8Äj á ªB¼3&ÃøÉ¾}}XÜ™näÓˆg¡3n>sÌr¤PÔ>ÒoºCRþ˜×Ö¶p÷¤…ì/Z5‡û AâÞu]w©®'i]êJ•4,2€ÁHöÖc9õço² K½2P݆¨˜k–üwg æ¤þÓp7†%,3dÿ®åN%y,{ˆF³NÃ(› OÜd¼§Áˆ!ûh’Ÿü§I£v=*ùfyǬø +=‘K[ûÆ0Øq_ì­êÔ¼]6!½–w˜½t/6ÿùåP†¢/,§¦:hèdÃR ^­2Œ% e4¤€ù^’F–^ö~jö(=ôAd;Ñmn:í4èK °O‡†h +ã7 ÓkÇ9ȉ91BIç÷„ Ñ>™ùˆàŒÍ~AèEff´ïáOÐx¾¯JÆ!ÚïÐðñS1§›Þ-fyÇm„ ¨Ó$.‘ïe:'‡D]i£®¶Q×èkBep=Jqª•â2íVŠììÇ›€¶>ÜÄ-å6­ðIŒª Aªc#tºA;âªh áÈPK­Ü°µÄEPKë‹MRLorg/junit/internal/runners/rules/RuleMemberValidator$MethodMustBeARule.class­U[OAþ¦-ÝR D¼­¥7Ø"ÁV!MZI„ÔèÛÐŽeq»Kf· ¿ÁŸý<á%ñø{Œ&>ÏlKBbS}™9sö;ç|çÌ9³ß~þ `¢ˆ E¯ZRHkÈD0EÓ}0Õ0£á®†Y†pÞ´Mo™!˜H–B«NE0 L[<­×¶„Üä[i† N™[%.Mun*CÞ¶é2 …·íTŠu×[ŸÕÕ§ØÛrÕâ®+ò¸àȪ±S§X†i{BÚÜ2d]a\Ú-áÊ®(TÈ·Ì ÷9qÆqŽ!²×øLAЉn¼Õ(ËX“¼&öùºá2WØá{ܰ¸]5|RMEÝ3-£`º^Ne®ù`†dÇ~¢Ü¶{¦cS)ÎÄ!¯BJGRâí1FO—õíîQi32ȧ–ÉÏ|{Ü|ú„昡ñ°%æ”Ýd¥ü «Íméì+6>²wìÚÜ«K"÷®ãº+v]QëW²¤až ¹Dw-6ãß|àM–a±[ÔN]–Åš©înìÔ´âCbb¸‡E†ì_Ã5Í©$TÅÍ‚.݃­s[7k»–¨ »Q7Ýy¥7FF1Щo ×Sò´ ½¤á~ 9äÖþÏ8ROßËúÖŽ({ +]ùVºÖ‰¡¿í¼ÐÝÕ0ÌucÈÐÇËeáº3³YêŒLçMò%Ãú?¿K¾bÓ¦]õûsàô8ÐsÍ+†‘D¡½þDYzþ{i&¢ô7" ºŽNýt2h§qAOê 5ì+¿cÖX€8.@ ÖEŒJ¿'\ˆöñôG?`dê B/Ò™ážC„?A àùPy ø ?q¿|Ï©†uÓ³’FqÉ6Ž1B|iWÈö*ɺïC¡®µP×[¨ôU÷3¸¥8ÑLq‰ö@3Ev~Š£ @‹HnãŽo6éãöƒ©Ž) ‘t‹vÄ#P¿Ó¹päPKÍhéåæjPKë‹MRPorg/junit/internal/runners/rules/RuleMemberValidator$MethodMustBeATestRule.class­UmOA~¶-½R |«¦JßàZ[I€H¢i%R£ß–v-‡×;²wúüâgÿŸð%ñø£Œ³×R ’ØT¿ÜÌÎ=óÌììÌîÏ_ß~(àI¤£TŸ ²rÌEÂütä54<Ðð!\2,Ã]e¦ÒU†Ð†] £eÃ/¼æ®;|×$ËxÙ®q³Ê¥¡ÖmcÈÝ3†‰Šp÷ìzÅsÜu±¶#÷¥§~ÇžY–&wA°rÙ– }ߣxºa¹BZÜÔ¥§0IS8ºò«¶ÊM£Î][&/%/2D[ TI£>elÒNL}Sò¦8²å»m±¼Ï¹nr«¡û‰µ žk˜zÙpÜ¢ªB¸éƒÒ=ó2D¹eÙ.w Ûbû#± )mI…ˆwÇd˜¼XÞ§%ÎõšA)³J<‹ÝqKÙs–³ õµŽZT~³])•ÎyíìIûHeã#·†Å]ORr{®»Ê®¯ÔzÌ+]հȆbª¿6+ø'xŸgXî—š`ÛödMlêì¦.AÍ«ücBLÃR °Ìÿk¸¶;•ä©ê!†L“æ!!ƒ•àVÂh˜¢)¬VÝöÛÄé¤Ì«`+ÇPD‰áùÿBêä³ÓØÚÝ5—a½/~e묆»ÖKýÃB?Ž C¼VŽ“,,ä©r½_/é7 [ÿ|ù†mWVÃïÊ‘‹C@—5¯×éÞM•»ëO O—ÿ MB”Þ‚ ª×h5L+$ 2'“À}Ãð'£¤ÇZÄqÊx„RΟ"9“ý‚àgLÌ}Gèu67>p‚ðWh¼:ö*Æ’`Ah,„i¦ùÌ™–w›Yi“¸æG›Á¦)ŠÒfp|ožP>êfu«ƒºMþîÄA[L¶·¸B2ÐÞ"»|‹“-@'‘ÜÃ}ßmÖǧ0î R3#í.IÄ#PéB8òPK†w,dÜhPKë‹MRHorg/junit/internal/runners/rules/RuleMemberValidator$RuleValidator.classQÝJÃ0ý2g[ë¦^ú^øÁ»– ¡Cp²û¯ÛGMMHÒí!|#/|JL7éÆôB „|ç$ç|'ÉÇçÛ;\Áaq}Ñ¥˜¡#£ÓL›‚—µŽ›Z)2–WzF’ V´ÐæeDUN&ÉJœ#—¨ ~'ÑÚo¢vBòLX—œMìE¡ÐÕÆ{¿þÙ;=ü°O/6TJ;tB+~Ó–É`;Bº!yz6z¹$¬Ium¦4ÒG;~¬%­zOVo¡Íe£ á€Áí:¶PŽŒBÙæ7^hù/ò“†kƒþîÝ7Ë«‘ep´Nú—4u ®ÿÓ6`Ðf°.ƒèz¼ëQ?ÃeAϯ±ßñ?ûAôPK‹?ÉePKë‹MR:org/junit/internal/runners/rules/RuleMemberValidator.class­XùC÷ÿ , ÎŽH­x•$ì¢.¨Ð(³ (É­æ°Ã21Ãn23ëѦGÒô²‰¹s𓤵­ÖˆrõHôÎ?ÐúSÿ‰¦ï}gvwØ]ZÜÍÌ{ó¾ß÷yç÷;oùä?ï~  Ÿ*hÇ·ùñ~ܯ (¨Çw—ÑëƒÌ}¹ï3÷æ~¨àG8Åñâ4áÇ£2cŒÇe<D-ž”ñ”Œ§YñÏÊ8£ Ï)x/Èx‘·¾$ãeëq–7½"ãU8+ã5›˜¾® É]|ƒM¿É:32ÞRâå·´à,¯ü„÷üTÆ9Wò3?W°Ý}ù…Œó2.Èø¥HPû ÝÚgj¶­Ûêû ÝœHÙÎ^=:ªÛÎpÊÔ%¬Щd¾üšrWVã‡pEµúô¸n¹²ƒ©qÓˆKXÓ£ÇMÍ2“ÂúÂÅ#Žæ°°É/L&\ù5í¤Àp­-g2¦™Æ„æ$- òÞ”aNèÄÕï‹EGFŽ ßë=2õ÷DG‡†%tÄ’Ödäh*a8#áèVB3#VŠc5u;®õ p§„ê\¤µ>½£†zü«+‘+Z"‘äX’ Jiì¨vL‹˜Zb2"‚";ËFŒÉ„æ¤,Š®=w½«Å'É"E¢¶³›0äiQ*ª±tXBݱt#Ž¥9ú¤ÁÕ¯q‘RŽaFb†íÚXލ«¨\5-(‰ð§²Ë Œn Ñæâ ½ªv†Æ$ö%'(7+bFBLñ¾Qm\t^,×Ì1j3~÷„gÊ håñt_t—æ„*/Þá'1Mî™>7nIsó,bеø”„Тê}–6­OZw»~Ù2£‰šÚÖO¾{½YéhÖ¤îHؼh»nYIË}ÂèÄ­Z˜»“÷¤ó·e©.v…¹Ò×çµP¶_G§¬äqF=±'wgËÕXb„"²¿˜?\”êta]3º7[ŸBE®²ÝãvRBÏçq’¨pÓžgcKöŒ“u9hˆ§ïÖŒÝÌzcs¨Ô³³Úñ>'ùèŠ!ÌrëQ×-=ó!ºá"W•Ö kÙ/›jØî·Í} jñ¸nÛMmÛ[[éÜhõ‰v´úßvò[UWÜô®·òfΡ2’LYq½Ï`°Õ²ó¯"[…ÅcüÆ}*.âý¸IÅ%̪À ŠË˜S1„ƒ2®¨xó*ÞüŒ÷U|€e|¤âWøµŠßà·tþ–˜ŽJØ[z[ª8Œé¬”Òôʪg¾îœ’ßѱÌ.¹õYí‘‘Ó•Tñ{üAÆU|‚?ÑБ»/[dIÜ#a¨(§ŸeØã?«ø þ*aQØ…F¡Ò‘Ò“VQH…ÆDÃßUô WŽœÊC%;¹ø×[²Û®Ë}ìí?ØÛ›Šô¶À`¬b?z%ô•Žè¢`´Å ÑL—½Ø‡Æêqš:Šò«U÷’»ï¸[JÛ ºi»Ø@ɃáaßµÜʈ?—ýóñÆÿ;nÐEFs˜7ëé1|ss^ à×úuEû’jõÂmô½1¼Á¦¶æPá°6_JÓÞ”fê'ñ¢|⥾Ù_·oþ÷tUxøñÅVhŠå§ ¸µ 8™råÎ uÍ…ºkEŽˆ‡aGm›\ѸÓg%§9ôü²Pb:‹l׳åÇ gÊw(,máðWòèU!~I¸¡È)ŽOì]IËkilD;:Èhà¯q |¿ ºß£­åyn&¾ 1z§©FÈi¦ÉÈoJt#$%N#YÑõáË„[æPq •LåK¨bºì” BõVz®B=oF€ ðØTO&Ö‘1±&€ðás_Å!2#Ñär­±¹OQŽJ¢=áwPuÕ-D+gœAÐcÕÁ­W°\Âî@Cà ª%œAs+$|„šÝᆊ-—qÍÌgÿb¯Ê…WµäÈÖZÜŽ]¸ûpDxÔM¶vQên'Y6£wÒ ïíÉxÙƒ¯Q$ÁS¢Ê%„8qå˜ i#QC±ó®»2»&iÕMìýѬçÅùYáÝ JñpX"š [½`j9Dõ–+¨ `æ³fCª& 2µŒl#ÓÎN‚Ü€å¸&Áóÿ®8ÞÉ„Á4+ Î g"S^Ó3k„ëz‚°hNó:¢I$PçQ¨+¥ËXuü-ö«RèO‘ƽ‹i|¡†I4ƒ{é9(ڨϡü9(D¤33”ŸËäÀÕ<%bWÝý":ˆ˜²]´$Gâ•TÆÊ~¢¼'X‡ÕáY4ÌbM.øix0<˜~¬øÚEÀ¿ðš*'p7£/?œŸs™Óç®óÁVàÃ’òÉ‚ÊeKSþzAei ʨÂ7pŸ§üo¯>žÃºy¬?D°a_œG#³»‰ÙÍ‚mböZbgqÝE\?‡æy„XÎÝÙÂì–ôέ?‹mK°a¶5­×F„^a#ۙݑ޼óB¦ƒÝ륑nâ0·x{(-ßÉù]  .ˆ/Ñ:粉èn¬¡L¶£“èv¢]D[ˆ~™è&¢ÝD×ÝC”qo$"%ZKtoeuv;]dÊPKÝa®KPKë‹MR6org/junit/internal/runners/rules/ValidationError.classT[OA=CKÖ"¥P¼Ëz©½Â"Љ)!„DSáa± ñiZ¦eêv¶™ÝEüþ_ð’è£þ‚ñÛ‚€¥՗Ι“ùÎwÎ|ÓýñëË7÷ñh · Ü1qY÷3‘GÁÄŠJÊ )_hÉݚоôÔ«çÏØ †‰5OùWA»¡-g*??O°ï ‰©d°Ê°•¯zºe·CÚÚ:TŠ쎷+\{CóŽxëé7/E§.t¥ÚæûÜv¹jÙk.÷ý³„h©Z•B!¾FÕ “U©ÄfUnóºKLºê5È"'£´?&ãÁžô–θ*Zq÷ÄŽ]áÛAîò€â­kíé …èôŒ1†ÎÀ`r¥¼ §Ã0u.©úa³)"¿çò1Ìþâ]÷Oò°VŠ«¤³Üßy¥t†9õh?=•¨nÜ‘-ŃPSËý¡gõü¯†ƒGl:^¨bCFÁgú³•Ðü·÷„õ$ë[¹¬Ÿ³²4ãÔ©ÖV½-ù$`XLÒ3§u)‰x˜ÄE,3,þë“`˜>m±~ÐÝ£)Oö%§ÿEKŽìt]±I÷Dò…AÃÎ y½  I¥úuèE5=ÝáÃãüù.¯«ý×Rè%3 ¶Pƒƒ¾ÃUŒÃ¤õíF$Äè' §ˆyâ´ZÅ4K|ÅÈN¬|ˆ˜³/"îìŒÎ;Ÿ0ú‰t&†)ú5©¤3‡ ¤ ê1 ‡2˜¥º„˽Ó®®ž=f2¸~rêq7{þ戳zèÖoPK:¨ò¢OèPKW@uW&org/junit/internal/runners/statements/PKPKë‹MR;org/junit/internal/runners/statements/ExpectException.classU[sÛD=k»‘­ªqâÜÚ¨Ú°'niK¡1†6M€â&€Ó@x £8;®‚,y$¹ ?x†?ÐçÎPg†Ìw~Ó³rì8± ÚËÙý.çì·«¿þþãO×ñ­ŽÜHa7UsKMß×p[ÇøPÇ,i(iøHG 7’(«þc…’ÄÝ$î©ù²†û:Ʊ¢a5‰OuLà3 Ÿkx på^(0Wñüzq·åÚaÑo¹®ôƒbÃÛ‘N±Z¡lH7\Hʽ¦¬…rG`¼²k=µŠŽåÖ‹ËŽ\NUíºk…-_ äN¯—æû'¾÷ÌÚväR™v#%›qË·³ÿ!À¹MÒXæ.tÅvåZ«±-ý å^ Sñj–³iù¶š‰ð‰0\_4Û ¥ïZN/lÐ W"Ö+{5Ù mÏeÆÓ'½þØìz^ÿ(b–”O-§ESxV‚£kÃ2¿­F”á¦í9´ØéOYkÈ °ê‘$ÇѪ¡o»u.O Mák^£éH^|' ÷\R?½êµüš\µóÉS*-*ÞBÖÀy\0p³ÞEV`ñÿ%¯á <Ô°f`_ L ÉU`æ4­{-ÛÙ‘¾À¥Gn·rMÙu[0»XÉÀWøÚ@$U6·[¡ùÌ J¤\6ðH¡}{y)r<óÇK$!}µ´âûžßÓ¤?êS™}#pëµjOàò¿Ö—ÀØqJëÛ»´ç9Öe¹d.':} ¢; !u¥)ïªï5H(;xûX#V³)]¾ ÙÁÚÊ @G碊’Y­Y U>ÙÁ}ªüB¯3Èñ=´hÕ%™êßÜÑ€8.ó á»CF%GU—x#Bßä'x>—Ø›D~`gŸÎïCäç_"–/¼Dü¡8)ó[íY>´FqWˆ˜3Ìá*T8TÀÞæØè!*p'…wˆñ–t9zV~‰—ò¿#ÖF"QzŽïr/´1Ò†öΟãÁIlé©­}虳mj¥seFÙt6EÓ4›6ÆÖ0¾µPØGæpöW\=ÀÄV×~ò„=÷îcêðÓ‹‘ò(ÎDý$Ù+Aʤþkbüɤ0É5“»¦ˆN“ä •5¹û…¹È¿Û,Sm›– ¢?S%ÞMzMc 9äéç1åG‚Îa•Ø1 r$m ?aEŠv³ûq~×£•÷^PK>™ÖdFPKë‹MR0org/junit/internal/runners/statements/Fail.classPMOÂ@}[ ¥µ~€è›¢qãYãÅÈ©ñá¾à–”­Ù¶èß2јxл?Ê8[@/<ìî¼™7ofß×÷û€ pÑôQBËÇ6CY“†f4 Ác¡'|05É£Åò’¡r¥´Ê®ÚÇ'C÷&¹— õHiy—ÏGÒ la7JÆ" £,^%ÝlªR†³(1>ËI+I£EÌM®µ4)O3‘ɹÔYÊ{BÅ´£Îª\ˆ8§ CéØnŸÆò!S‰N=î'¹Ëž²s|Ûynwá¡¢Œ C÷ÿS:ä5gN_yÍdØÛà :d±K–“v,EŪtû„z„zƒîX÷ôÎsÁ è®Q/ˆéӧ̡֒Û@ÕH•\A ªYM^` Ü}óù+W)’µB&\V2;tÜbEúEÁßÿPK¸2d-P*PKë‹MR;org/junit/internal/runners/statements/FailOnTimeout$1.classAnÂ0EÿPJh©'`Á+ªzT$( ¸€ £àÈK¶ÃáXp€ªÂQWl;_F_úzóó{»¨PdÈ2ä„üàßðÖX&,¶ÚØZަg7Äu§¯šðñ-uÁH»çxqç ï„/ç[Õ b¢2Ù‹¶Ê"ìƒ QGîYbPO¼UE¡ØµÕ!p ”ãeµ´ª>uÜDÂç?àå2¡'ø›—$¤4ÅkºSÌÒ~KÎS‡ÆTÎPKs~)¹¶ PKë‹MRAorg/junit/internal/runners/statements/FailOnTimeout$Builder.class­U[oGþÆ·µ‚H ÅY›RJ.$H°*›´Éh½™:Ö³t/”ÇþžPB+QD ¤òX©?ªâÌzm‡‹Hdó2×s¾ï|gÎÌü÷ÿ›Œ£”A/®ÉæÙ\W©™Tq“LaZÁL7T(˜U0—ÆM*fÓ¸¥`^En+XP°È³çñ¢ã–ýÀ|\Ùr¹±ÉÀ6ߪs'ði¶Ì„EÃÁÒ¶ñÔÐß²uÓfàº\øz…LÁCjÚ¢Á †xqdüæMÎp¤d ¾Ô«Ü­U›Vr%Ç4ì5õärFºäËK¾%صsÅE#oɪ\cØ(îAlÕél½Ü„ëL±eZ{ CàQp‡ “ÅŽdŽOÉú‰=c¸Ö!ƒj˜&÷¼áñ±1™ñ®ò=²ÜÆ»"ñv‰·ï]j²M|èéJ«e'pM¾h…ð»Ë2–,r8–Eú³8ŽYœD^ÁÝ,–ÐÏp. ×6DM_²m^3ì›n-œ ÏLþÄ·Áp:z5 õÀó U^Ždì[O¹¤$´VÛ¾ï„jö€ô7sP0 !œY2œléüdk¢ƒìÈ€î1Lu‘X†Þ¶œÕê67éz\í¨^Î|±"èa,/̯®Ü.3œ(–Ú´eߥ&¼//º«’\ëŽ/3ÎÒu”>¯8b²Ðh“eöTsÔ§iD5GÆ74»O–ô‚ OÛER‹ï€i™ĵWHí öwèwJî#Ií,ôñe0M¿Û ¡Îá4­f8ƒäctç"ôßÉ>A½6˜yþ¿…²žKï"ónô_9S×s‡v‘}§ JÊQ"Ô^¶è_•ñ¥ð#i*“Š ­­a?¡ˆŸCæEOè³I­,IµRÛ†£hf 9F½¢’:ÛTj¸ÌIâ/!l_ì«à<¥’>i|‹ ز–Vù‹M)‡¥”·èY×.²]iÃ÷„Q>¡LüJcoE¾E‘'M#`½ ³¹Q\§^Z%élí£H…'÷À$[0IŒâ2Á¤¡c,‚ÑɆ…0¯ÿë³0”ÎCÎã¸Òrf-çØË9Oà»Ï8³?÷w¦ý«aû=©ÏѨ—26@§QOàïPKD)Ú™¬› PKë‹MRKorg/junit/internal/runners/statements/FailOnTimeout$CallableStatement.class­T[SÓPþ6´¤QÊ…ji´"7A¼”«Vy€aFß!aB¤ ð ü+¾âŒ€£3úîrÜ ÄËt|ÈÙs6»ß~{9çûÏ_ðZÃ5Z$Ûq¥ç. —…J94R-ÔV@; ¢ƒ Ü B¿uœ…ÂòÇëˆvw#NN=üÅX£ñ׋t…ÝŸ¤Uâ˜~1ÃaŽ×PKë‹MR9org/junit/internal/runners/statements/FailOnTimeout.classµY x\×UþfFo4zZ¬Í;²eÙrF#ɲìÄv¼Å¶,'Rµ¤–ìD ´<ɯò‹G3b–ØnŠ%Ð…-…­bJ (¡–ì§ii mÂNÙÚ²w/¥¬ ÿyóf4’F–>¹ä³î½ïÞsÏýÏrϹgòño¾ð"€.y¨ C˜ ±™5p=nèÇ e˜ÃoêçÍÀ‹:ú’¾¤£ëè#:ú-}ÔÀÇB¨ÂË~;„uøåð»>Äï…P‡ß׿Úü’ý¡.ÒÀ§‚x%„MxU›?ÒæþXü‰?ÕþÏ ü¹¿¡iàӺﯔÍ_ëèo ümmø»:ñþ¬ÏøûváÅ þAûÔùÒÑ?+Ù«ºñ_ ükŸÇBØ/ø’Ò|YW¾RޝâkÚü[9¾Ž׿ºúeøOü—’ü·âüŸþßÔÑk$„D¤$$>ñ—K@J¹C  )3$dH¹!¦³7·“Ý1+•²S‚uÝV,fÅìá´•¶'íxZ`Ï8±³v’«‰¤3áÄ­XÁê¶þDr¢óÑLÜIw&3Ê,Õ9™8kÇ:óDÁ´3iŸ&`Kÿ£ÖcVg&íÄ:ÇññL2IšÎ€Ä†'2¤•>AM,‘82‘NgÆÏœKÚÖY.¨–[àR—¦rnµ%˜‡Šrn§RÛ÷î"Ç×$òÁÖU½ëBÉLrÜ>éh2ªYÀa§ÚÔÄÙjÊ~¹Ç¦ÔC²Ý”Ãr¯!GM9&ÇM\Å/›Ò-' é1å¤ÜgÊýÒk²„z!ý¦ È !C¦< ¯7ä”)ÃÊeDN›rFÌ™uå,س†ûÄõŠá„ÕÑšžàÀÚ¢z6ê6Þ²e…<ÐÛßß;ÜÓ=4xb˜o Nú\^ª7FúV(go·2ÍÅò.åGo/}i®ÍñÛ­üÞp›üV,ås§íùV gÍŸX[2» ÷h^æ…ŸK.ÑÑåžHÓ,Ìãî†þÅQÈeQ–²Ó',{Ro˜?ò°N-©h]°}<'ÝÁ+ª€CÐIå°>¦²||b îZ…‹Îó{ÔWËÕEŠNɳÛʤ˜î×/® çK³ÈŠ/ùm+£¢H©…EÃÖÈ­ùºŠtri‹ÏD‹a=NuÓÙ’©ù[gPÌAK߬ õàmÕ´Ùq.Í»r¸¯æ”ž›Ò1³ßÀž‹¼æk#‹çT”Ê|àeþÊ…DÄé¤z&§Ò—Ôú^Â1ÒZ¼°©Y:Kç¬Ô }‘Ìüq· f+5ý%àõ‹ü°Ý]Óú´ø :=8xìx`ÃòÛ˳EˆW~Ðs{srºÔVú§YaN¤·W—ÝÚFñÛ*l‘òG‰ŒTf,«¤:ݶTçõó3݉XŒ–ÉþRf«F³[k"E6vÞºäÈOR´D’Æ©Ê2[‰vÿÉrùÊ%ºzjªÛIֻù|®µŸî=ë*šÙ :,_¿ú#}­}ØŠ!<À}ÂsT£ïj·çKÛíùºf_2}—CðüÚ ô¿²9øFeþièÏÌÛRöÀ¶c'™’ŸB€GÕÑë4=Òm³(yŽs%î®{  UhÇYŽšÜªaãMîAÕ˜ Ô¶éˆæ ¶¾„æiBÛ¦ý`ÿÍ`Çô`´}‘iWk¨íôƒ&·×ïíWŸ]yŸërí%îH­T’·Mvíq޾ßõè·ñÕVÖ2RBn*ÍeÊÚ: æy/Ê£tÆ(m!ôŶќRfÑ~Àßþ2*ÂþötpÃÎŽ—Ñ3‡ÎÑ9ìEWÍîì¡¢îb7ƒ»g±W5Ú1‹}Ü0‡ý£›hõ…ýãþp`ø:î™Åé°%J ¼x†ÒÒýqš»A‰_  s¸7q^d ú0oôG(ÓÇòšzˆ†'~€û(K^+—]]0êÑ[?Ä3%~˜s>r~?Â~βžó^‹ãø2úðþ¯R_c˜ÿ:AÃó¯b/Ô»kƒ¤Þá gГïÅã'\_:Ÿý7©@[80ƒûö–Ö—6>uá]ËWO…ÝïÃô“¾³Oúåêk¯\Gï¼§EÕâ£Âý¨”ÖK)Å@‹Ñ&e¸G*qˆóǥƕü~¢hdÈy~–fnÁzü~žòj6xš#A$ÕÑ/¸'€cøE®–Ðiöã—8òy÷ðþ±f÷üîqÎ+‡M×ѧ¾ð:5yU;e,{–¤%Õ âŸõ€ y@Œh[û‚LœÍßµyæ$ɳ4ðk^Æ3Åt/€ÁXö|ÕA<ßð˜w²Wªã‰Le Y2|“»þA·½†a7øñz"™V±áŠýièÿ¯“#GÃÿPKÏtðY I PKë‹MR8org/junit/internal/runners/statements/InvokeMethod.class•’]O1†ß2#Ãಠ~À Æe5N4Þ ^HLV½€`ŒWÝåd·ËlK:– hb¢?Àeg7‰|„‘öfÏ{ÞÏç}ß''üýã3#¸G.5¢£òóŽü¼«àr ¸$mcMÇDÞÃù¹ªàZœ>“ ®KË8ÞGVA.Ž&| à¦‚[ÛØðzòŽ»¬­–mÓÓܲmnI+8K†¥Íxºg Ûˆzº»lн5¿ª¯ëš¥ÛËÚí…UcÑ·ê_zŒ8XËžiiy³$m3æ²­{e×?bž8±vÎÕ Æ=Ç]›2¼giüЬ2aÒñŠÀÍÔ)0Er÷À‡pƒaÍyÓ6¦Ë…ÃÕ,Cöé,êÖœîšò^QF¼“]Ž(oÚìÜÖ­ŽRAI»S¶'ýÁ|çá|›ÅjÎÒ 4óüŽ„õ%.¦#U‡³ ºp䩲å™EËÈé¦Åw¦Æ&½T2\/[(z›pêè£ ÑÐ)»Q´œ’¹nXô¼\ÂuPW¡›oŸí0Oò‡R«d’Jx…r]ô¤Ùk”_§æ>ÏÏöôˆtf¡ôà.Âé¡]Dvü|çøí䓴㬓`6VyƒÚtOç_’õ…/ÉÊ!_’XÂ衬Öl]´¨z©#¡L!•g#õ¿?EÃgOͧ#´…Gx1©Á}4 | q_Ð4ÚƒºÄX$“Œì#Âüö?mãë©Ì`p}¡ðkc µ¸±h2Z‰ì“R:¦¤“J%8–IƪÁ&~Îü€æ(äßéEœA ÍÈò\C¥Ê}‹fùó•ç6à!õ[øÖ¿Ó_õ§”¤wýÏ1[7óõ2ãyŒr¦W)_çô²ÜkŽ›¦Ï}ŠÔ—èS¦Ï}ÊßÐg‹¶mÚðþ¶G´=¥ü+úñRþF¿âŽF¹~Þ#¬Ö†n9LÈðb•˜o 1wÕo­æw·æ÷¨b±f»oUð†|kTn¸ÂšžQ+YZeH ¦¤Qáy†_>XÞæXG2+‘áz"áŸpv-ó;>›äÌâ¾u˜QšßSgà]cioÍÁìoûÑÿPKÏE–: PKë‹MR6org/junit/internal/runners/statements/RunBefores.classT]OÓ`~ÞmPVê¢(”mlñ‡¨ S“‰LôªƒWVèZÒvnüþ¯Iƒ‰Æk‰¿B=o; ˆàÅÎ9;ŸÏùèûó÷×ïnṌ²a\¨ ª c­doÅmÜ䮄{2©ï ×&d´à¡„œ„I†É·\†Á‚e¯ªkSwU»bšÜvÔ²µÂ uÁÕ\^榛chv5{•“{¬°¦U5ÕÐÌUõUq/ «Täï-›; m¾¹âê†ZÐa /諦æVlÎk0OžYÀ“D}æI¢rÀ“– ®‘¬ÚâdóQ]'ÝB Ó&ñ ñlú3‚ûhb(Œì£™á#ºH~ e.ÙCøÓŸ_ä؃¼ã%êõ€º Nn&C0Ð~JÚG `kpò'šˆŒP©PðZ÷ ¼©×“=«XÀ€W'î{$B#¤¬õì #^tæ/PK¡§ÎúyPKW@uWorg/junit/matchers/PKPKë‹MR&org/junit/matchers/JUnitMatchers.class½–ývEÀïÐÐmÒµÅ"Å H (i ]Q¡!ZB€bÊG“Öª8ÙŽÉÔd¶gwRå|üKð>”Ç;›MÒ™ÝÐ&åœÜ™¹;÷þî;3›ÿûç\šw ”5x¬Ä%ž*ñL‰u%ÊJT”ØÈÀ&|£Ä·|gÁ÷Fs\p™'0’ß$*xÛŒÀd‰ ö¸Õ¬2¿B« ÔL•<—66©ÏÕ8R¦d.”<¿æì´Ð‘Ó¤Ò­3?pmàp--°ê4X•¬I`![Ú¡{ÔiPQsžTw˜+—çCuÚt}H'²Sf¬ÁšLHAÌŠÀ´Ö‹ÝNh#• >ÎÜc»>s©dÛÒe^T¶||¼–«ÜŽûËgÑ*9”ܾ٘†¯(¹«8=_3ë-!y“mò€ã“!.œK~r`]^k6Lši¶Çüíóx&Ù> i{ ­2t@®'$å"(KŸ‹šqK´•ýkZÕ 2œŠÛÈÚ[.>QÅ—ªz²nÁN¼f• þ]ÔuÏ¢½*ó  7Aùp‡Ûõ|æôº}èvÜtëinÆÜ>ÜçvÂÞ×°ŒíönÁÜF‹¯°]™ÿPKŸYRŒâ3PKW@uWorg/junit/rules/PKPKë‹MR$org/junit/rules/DisableOnDebug.class•U[[U]‡$ $S AD[[A’ÐQ©—6ˆÒ¦T4@-H‘z;1 “83QëŸð¹þ_x¨ßg/øàçsÿAÿŒºÎ$ ¹P>|9gÏ>{¯½Î:{'Oþùó/oâ›8ÞÅ{ \Æ•8†‹ÃÂl?­÷õ眶>H`&0« \C^/× ,ôáF&>êâÞ?6ð‰‚%¨W+;ã…ŠW²wk® líñí5ÇnÑÊ ôo;ÅZ©¤Ü’€ØèUŒ›8“z~ÚÔ:Á¯U¶ ~º \g¹¶Wt¼5YÔå¬BeK–×¥§ôwà v”/p® 3¯|±âæ5š>¦naWþ íZ ÊvAùAÈc@¹ÕZ0ï•j{ްÆ`g”Àh;¥»Õg´&;bgëßeé–ìÕÀ£*¹9-Òª*¹2¨yL™?9¿#Ñ4瘬VËw¾mÇr]Çóí=êZf¼ }£\Wˆwü-OUUqsS'@ üEé“ûĉ‚Û‡øg¯Ïpåç{h8ÕõHìª>ÙxÝ]¢ô¨I‘–ÌÅÀñdPñ´øòðm/t¢-1+FRz¯VjÞ–³ ôc·÷ÚEi`ÙÄ nøÔÄ-¬šÃ+zY31‚¤‰,¦MŒâ¯ã‚ÏL¬ã¶ Ÿã’‰MÜaÇur0¦7ÂÁ2ñ¾d“NËoPVÅ+»Û?VM|…¯)íñÃмRÜu¶(ߨóšOÀ>:bïÃaSŠ•ÿ»$™Š²ùó”/éÔ%[\OT”è‰ÍÑÍÈÁÈç•Ny’J{RK{‘è  ]¤ÙkúŸ%¿âlŒÀœÍfœ­2β1‚á|Åìsl–b€·X"këù nÐPwò&nJ1¾BFï!q ‰jã²júùŒËÒu´¨²ƒ¿øŠ§|«4 ZY#{[Ç”pGûuÜÕ{eÜòæaÔ»þ~PK`)€Ï@PKë‹MR$org/junit/rules/ErrorCollector.class¥V[WWþ†„L2$(ÔKÕX/„$¬Š‹)Z[‚(ïÃ0†Áa†NfPz{è¿èSûªkµ`ËZíêS×êêêwN.QÛ‡dÎ9ûìoûrö9ÿóÛïÎà; qKÅm -¸ÃÜÑp“*¦¢ø\CÓ*fT|¡á=ÌjÐpOüÝoÃ<ŒâFG*kHà‰˜èm˜ƒż˜˜*žj(bA…¥bQÄo:Žéåm½T2K "¦ç¹ã‹úŠž |ËÎ[%HAlÒ*:ºx¦‚ÞmâáòÜÖbnjÁsŸës¶94B­È°åXþˆ‚PªoZA8ïÎSϸå˜ÁÒœéM‰­ ºÆ]C·§uÏóÊbØ_°H&9îzÅÜb@ œØf)7&hæ]Û6 ßõ„™Ó³ž®*ÐÆ^æ²o¹£úü¼Üª`ª!EÁI¡¥ƒuÒQÆÂR•à­f£»!#c,˜Æ³©ÝW©·skn‘‡$ý}ÉðÌ’Ÿ+è>÷{ÒtëŠnÒûJ Ô¥òN=¤ >j«ËÕÈ…¦¦(>ÔPo˜2‘š ÃS—wÚIQÜDOоRïä¤ïYNqè]ÜŽx¦^r­~WpÜÜ…×νofÚ.S3†iγ"Φê*×p#ð<ÓñsyݶËÑ(uh9¾é9º-Ê$X’•6m¹¶î›óµÒ£JÔ¨ *8ú“ N4ßQMØÕ¦i®Ý' ¢­R©¬]ãR}Heªsôià™r©3ÜwÇ©š„ùb™ÖÍùÚAàÚ8ÆÁ«h)8ùVà ú¶Ã gvm/wv¸°ëæ·vM›tÏ0¯[‚ôÞ­­æ´ÀŽã> h3죞§¯ŠFÇaQñ,K ŽlR™lû¶+«§V' öIø¤¡;Žë'ç̤ÃmŸ²ÓïVtìq»õ°8\, Ô/ãðPRAžVâÀe¶×æÝõÄ¡ù<Ž\Uñ"ŽU|¥ ]-¯¤¿à™Ï“MˆÅ‘F¦®­iQñußà[Fª9 :·}Ã´èø–hõ"qŸ•rK¼fì\!°}kÙ6¯ë–Í{«.Tmº Ð)óÒØ›Ú~݉:ènÐqd}M¿`–Jz‘õ±/Õר‡u7¸„nL܆y=(Q5»Ë•´Ë-Ó±•"{+ã#¥óÜ=ÈqÔ² 5ÙE®•³xI¿\1¾Ê¸†ùM0‰Ùt&Û¿Ž®5ìÙNâ3¦íŽ$‘.+ÔH$èõ°4”tZäHÐ ÕÑIH:UÙEÊÊt®P“ݲBgƒë½—ñß§àeA䪫›™šèÏÊLõ¯¡GyYHgåWFèCL~²BuéºGÉ}Fïºðûñˆõü˜»ž0’:™“C+åíLM?µ£ÄÈ2•åzÏ2]ÂFoÍÝ^&ñIÖjQ¬äk§äcŽÆp½âÐ÷ü ‡:3ÙרÏêŠMH^IÍYjÆ=d^9^71”¸îcVj!×(ÏJ†›'HŒnà“Ê©º‰O+P=g7˜¶*¯qþ r4÷eZù ‘øPK¿p" U PKë‹MRBorg/junit/rules/ExpectedException$ExpectedExceptionStatement.class¥SËnÓP=“¸uê¸$4m€¥$äQê„m«J¨*REĦUì÷ªuåØ•í”°á?øÖ‘h©Xðü1… µAÄÂ÷Ο9çÌøúÛ¯/_4ñ|sX1``U¢5‰Öu ”P–å©,U5‚æ«~LXoá±uÚóÝØ {¾¯ÂÈêGʳb;V]åÇ[„ÙøÄŠëpOEÖ^ÿL9±:Úë;ê,v_àÛ.vû•)ðS8¨¶Ùð.' ™–ë«×½nG…‡vÇãÌB+pl¯m‡®œGIM 7䯤s_Ôv=;Šcwn÷Zü7·­u숥SêÜözœ&$+âœ8ZjÚç¶åÙþ±uxoÅ&×c&v`½ÐQ/]é CkS(LÌ㎉ &Ò0M<@›À®£nbÏLlÂ2Ñ@“°ý?-VoýT×0%¸QÛqTÄ7ªÁwjkªK2i|2ܼ½ðß*‡³óW©)Jåi”ªm¬ðÿcðO•À‚ÌÈfeêà ß@dy½Ë§W|Nòž©Õ/@µÏHÔ6.ŒJÁ%òú;Óýàø'r|Êó;.Á"îÃè>K1IÞ…ø=ï‚*×>!y í#æ[Rý ³ .¡€!ÑR®t¶<3Ò]C  tš…AI¤ICŽf°H:–)…c/iv÷†å‘«Çühœ¾åa7O V F—°„ÄoPKO*wr!xPKë‹MR'org/junit/rules/ExpectedException.class•V[wÔTþÒ[¦i€¶Ð µ\mg€iAAh¡-¶Ú‚2µPð–ΤàLR“ ´¢ˆà]¯(^_t¹–Ë\KÚ*K}ÒõèÐ7_]t&#Ã<$gÎÙçû¾}9ûä׿ÿ@7>“P‰$?R"T~OJhäˆ) 5˜¬¥™t¿OŠxBB2¼’• Ãà ÓÍ£g$œÅ³"ÎIxçE\°f`fZMÚjj`&©NÛš¡'lÅV³ªn ‡t]5û2Še©–€åYÅN¦Uó@NˤTS@÷°aNÅOætÍŽ›¹ŒjÅ‹ÐF–léÐ’Õ,KÓ§òªe)Sª€Æá“Ê)%žQô©xÂ6Ɇ̫tC§µM7æbó>#Eæ+†5]=”ËN¨æ¨2‘¡©_6Õ$¹–°úHN·µ¬:¦Y­î×uƒœ&r²9 "¿‡ kz5âÞ+ ²£sŒÕI%3¦˜x,UvZ#Œ eimJ+zŠØ)¸&O ˜¦aÒîõþ|.ëØŽiFF n&£u¦:m˜öHA0jvÚ讎∖F1»ˆQ­LOgfLv,ÙÈuaųìLÜ/˜ž"Š •45¶³  á„b©…!,e\—Êã ¸õÿù)…ªã+€ëMZÉ&MÕ²ã^•öpbE¯Ê¹Bœ…`îg§ó¿:tGot/mªMhSºbçL²[Îφ,aU0qÎñs¦«lbÐP´( ³p®7˜M›ÆiVØÃB¶¡—4fÖenÐüªj «*²«µr–óW@4ܽâ¬gk‰`„Y3Q+¨OÉq¡xòÔ”÷¿Y³öë³~1/V·slSgp—¿. µ#ÔyfØÝÐUj(ùÓ(âyJý¤¢eúsê¨Qx&E¼À)í kož/Š+ER’I óÆ®®.=eÕ’Ò+fºøÑífÐÍå€ò~)aä̤zPã²n.²ÙƼ2Žb‹Œq„úÑ aeİE@ü&¯ íXGá]4k·©FÚm£ÝfÛ7Y2Öcƒ€Þân,}Õ±¶e¼„^/Ëx¯ÊèA¯Œ×pQÆ O¿.ã \ñ¦Œ·pIÆÛx@Æa~¼ƒwE¼'ã2Þg-ã2>Àˆ+2>ÄGêó):Oê&šÏ±3M+ô'Œš[V=¥¯´*îMt?.1pcݼ@#¶±˜–î‚0%Ô̤k;áf(¤™ÕÎÑ;i˜Y¼;$Í'Š}ÁÅ:ú|mƒ€[PFîô]Á‡žÞ ¨ÅFl"‹Íô¯æù¹ŽÊñyT]¥±€ÛéYCoà :œõNo&ê Q[¢1ï&¶kŽÎ£:z5"^C$ÚX{ Ò7Ž5£5¢Šžçéy+pM¸€­4#»»± q‡¹ËWÆ ¼V½ê£¸š.vVx;‹URBÊÀº\&Övìð<ÞGv31#€’3ý9ªñ…Úìšy <ºƒÀBîÄNlRÉ{¯£n<›‡\(ð+«Ýµò±$ìÂ]κ„ÝØC;î¾ôfÔ„'±6ú-"±9,ã ‚k ÑýÁýyºß×=L£‘p¢•!DÑß%ˆZ’‰¾L½m÷*<Â)ŸÃª¯ ÊèŸ@G<Ž þñ„ó„¶FçÐt 1§y-_¢:öSÁI–CV Ih@‹°2 ¿Õ×ßJÎßC4®¢÷­ÓÇÇ·Ó×;Ö¬.ȧÐLø-!šÑŽ9ýlÜó>A‡ŽÙÛ|Õk†i(Uý€¶ñÊXbk Ω°uB[@x›GP‡zç‚©àöäîñÂSÃg´"/Ö ®À©Á#^jðèÒâcxÜCŒ{¨¦ီçÕ`ÐsűŸÀmŽ;ôML5u+*þPK‚·Ä‚+PKë‹MR5org/junit/rules/ExpectedExceptionMatcherBuilder.class•T]SÓ@=Û%`)¢‚â'؈(~´VQÀ"*ˆ£o¡m˜Ð2IªàOñÉ7_|ÀDgŸýQŽ÷¦! …êЙnöãî9gï¹»¿ÿ|ÿ ` ‹tc\ÆÕBoG×:0ëÜ܈Ððf·æa†›Û2²<}‡›»ÜÃ$q_Æ´@ÛšæäKºe Ds«ÚM­:†©æ ÛI ´/ŲæT-]`¸a9“«XEµ¤­å-ÝvÔùN&•MgigkÆ(NV œH. HS•aÉeýqumE·–´“fb¹J^3—5Ëà±7)9%ƒ¹ «UR­ª©ÛêôƺžwôÂôF^_wŒJÙc¬fA·ˆ7¬ }‰Å¥YŠìXàØÁAîBPÔæú®°¾¦g8u0'/2mTwµÛK%«ò¶†F©y%вÂâN$’Íô¨M–25KL­\T}\7ýQÍ4^/•ôyßÞ®¼fSêê1BÝçøä¾É&>_jÂÍìS Œ6s¡Ù9;m£\4w5 Ìü#¥‡LHd±Rµòúƒ?øŸ:eÇp\ §ž{–¥mrJÄÐ#サÄèG"Œ^$5ô‡Q¥õPˆ¡a°ŽÑÃa¼Äˆ†Q c5¦Í™¾èɸ޶±[p¬Àð Ž#=ߨs7¥m¬f ÷¤L T;–è¾nKߘ? ¤ç˜ö{é»//UtÊ¢?-°+~ü}YÐAHÆräJa/'½53giʸyÓΚž¥Î—`H退þVqÎÙ¦ïK"Ѳ‚¢C¼Ad… Ì/PSéE Ð’Ù5LÃ6mcmÇs?«\êºÒó\ä…À²Œå«ÂµÞTw´ÿOaï­ØÔÉÓ¤Ïæå~`¹S„W‹",ÅÑr[û€â`‘æ¼íú–³½,ƒwSøŽW˜Ðш:ÑÑ„“èh¾2ëyæ‘R££]ù§®ü7…iHéx´†i3˜å`”¯«@WÙ^ t–#¨õ¯ÂoØt¿!ÏÉ-×#•¹Å” 7[ÄY077Yöص^½ËíÊ<3|¼+ÉrÁ¬}[.˜–]ðd©Ÿuj,½`~o?8b¥c·¨/‹N¾ðz¾øŠÆFÕ9€;Û¨~›ÐÌ!Hk‚çJî‘xâ"žŠ¦/ÏKÔ’$¢ö V‘%¾DK+‹÷úÄ[Ãäá/Æø›)ò¥É˜B‡´\IŒ£ŸO`”¾}Ó\gè[¤µÄg!¾Jõ¥-)©‰"ñ¸v7­#ÇŽvm(O•@âø(ÄìÆ´àjKžÝŸ9;svüãç×ïvÑòàà‰‡:š.6<Ô°ébËŶ‹§ `h¼I!÷c®”P ÎË(‰²=†Z«=d°÷ÓcÁ°Ð‹ñ6ŸBxSd©—†<ri¿ÚÙiD›½Tžøãœˆ|™ÇBù‡g™ „JsŠ.CO§ñ'†Që/´.Fù:5öûÏÄD$Y÷ Ä?*”Ñ4‹Ò¤Û®À@Å\Q[•ÀóÇ—ü ëÿ?ŸaNýÎex]¥¡j%;¥’ŠöÏBaS.žiñF$(ÅûFÎW‘V¥¬ò‹1ÿÀð0ßÀ=¬ÑÅÜt/Û»þœ¡y’aQ³û1ONüwÁX„ÔúZ9k Tv”ëâ–/уS™~œ LI«kG¥ŠšC{ƒ&Ü¡qviêë´RÓz¸Éóie:ºsö…6n‘uL°Ûd3°ýOÜÁR‘|@èšFïtÎa}.ewLvs†(²õnwÍw+X¥ KË_0îÁ&ð¾¡ö^³ÚeVß°®ÎP¬^Ájã>µf®Ž©WÛêýÑ+(Ðk“÷ì£ uþIÑ¿†ÂÂcc×1g*b¦sz~PKC’ûòoPKë‹MR org/junit/rules/MethodRule.classAÁ@…ß_­bÃÚ Ø˜XwßUE¢'üAMgšé ±v+ p(¡± ‰·xy‹/ß»Ý/WStcÄ1:„HV•:Î£ÌØ(¼Þ9a½ÖlkQš5+‘;é¸dí’ŸHjeÉGc÷3v[³N²B¤PRoÄ|YðÊ%ã?ô„^n¼]qºSLè¿d ¯xÒøÃO‡âZ¼ Âàû³M hB!¡…°Yˆž ýPKÆ|Ȧ PKë‹MRorg/junit/rules/RuleChain.classUkWE~&l²,K‚…Ö6´ZC»/­QLi‹†‹¡ñ‹g“ Ér6»9»³*ÄßA½ÑÊ9úÑsüQß™„¤„‹åÃÌòÎó>ïó^fòÏ¿ü à=TS˜Ä‡:-É垎4îKÛÇ>I¢¤#E ŸêHáþ–ð™\>×°,á_h(ë˜Â+x¨á‘†Ç +k›ÛµïÊ—W×®Uü eíGž#¬ ryhmÑZnÛŽWb˜S¦ª°áx­]G´W=k~(®Töíïm+ŽkUœP>UuZž-¢€3FŽÏDÚæ¡ÑJKäjòNW ‚3¼‘]¸TÛxÙoR˜©Šãñõ¨SçÁ¶]wÉ’ò#Á e¸—½8êåôéŠß°Ý;p$kŸzîb6†Ä¢Cö%†W³£•YØ!½¢í„ qåÇ0sšÿ {Ãõ¾´p’9a~ä5 î5\?äÍ^òS ½±·Îè×4nw»îÃÞé²Èž†V‡êéZÔlÁ;Ü¥3ëÓŽïTï|Jºn‡¤äöK'šC~†—ÇgH.6Ü~ÅDz²zÕ‚èÈäÍA3ïÊrx ÓæpÍ@7 ÜBÑÀ ^§@ªÜ®íµ¬õÈu7}Ç£ùYù±ÁûJnm·y椴YÔL' EÆóE¦Î39I¾Uêü°sËA`ÈöiøÒÀW¨X]¸Ù ‡NrÜf¸zàIL(Ï74lø[tý†²7êû¼!Îq=†éþT)|UtÕ옧gJi7›#ð}iá[9jÍæ²ëR/NiÙw]B¨± Г—š®!ÿ*•[ÎþÿMÉ>/(ݦ”z=z¤éṘ§ç0 jb44 ô¼ÆdûÉvU}ÏÒSš’óA–ëd¹N»üÿìvzhM(ë#BÞÀÍ>²HÞÒš|†XîwŒ*¾!z Z†üæÕ9õšVéÿ„öízîã¹üoˆ?¥ÿƃI;ð Æ±C1wÓL7Uòë-•ÇAi™dö6}ej"FÉYÌÿÉc$jiíÉ¿Ž‘ªA_+äŸc"†ÝBîWğàÏcLÖ G0ªæ(3 Nª¤“¢=Ê«…´•ÂL/Â@a‘Næ)þ )È‘ÖØ@kÏ2«*˜G¡¯±‚¸b01UËK%ÿÊh]ýb™ƒX&ÞÁ]un»䑤ÒbŸùŽB+æÉÚ3¼Biýöt¤¿%ZßWÑ>øPK‘§‹PKë‹MRorg/junit/rules/RunRules.classÅTÛNQ]§2½ EKE. "¨e¸ (¢RDQ416˜!Æ·i9Ò!ôÎÁ!ñ |•Ä>Ÿý ?DÝçб1“9]眽×^û2ýòíã'˜#‘8âÑ2&¶Fã˜Hà2®ˆeRÅÕ¢˜RqMÅu†˜ç›>ßàŽÏ0+¹kÆzàX¾áŽÃ]ÏØ(­rÛXªeZf,2˜exœiÂ>·nnš†m:kÆŸ»fÞæÙ:7cž{×*ûVÉÉ­0(w‰†¡-g9|!ØÈswYx2¤r¥‚i¯˜®%ö•CÅ/ZC÷!^›{Æbà, @ª•¼é‘iD^0¤ébH¬aè=Z(CÇa5Û媢ñô3uò–¹ç }ÙYâŠ-YkŽé.¹ûXÙ#C_õ(ß4í€øÂq¿·UàòÞSqƒ ÌrÙÞž³m†ÿ¨ùM ÂÍB±QÃké2„¬ÁZ›ß²÷ø%WŒ°Ë½À¦‰ßù…n*ÃøR)p ü¾%¦©µ:ÇcB‰†$ú4œÇ€ ­zѧbZC3*nj˜Å- ·1ÇÐù;•îànƒûj †þcU2´f¹è–žW>ÑúrÑäX•êÓG“jÜ•Tý)ƒZ4½¾åË‘|B­wä&]%‘qå×yA”-"”áiS}ýë>¡â? ñ¢„„“hC'h÷ =@›þLý€Ð[„w¥áIZ“ô+V…\’ä’¢¾ï‚v¤‰N5“¨§‰Z Nt‘o7a­v×Cwg‡p–Îh.*2¦h'l¢ú„ßAÙ•6"~\²¥¡RŒT+Z‰}Ž^…NDš4o¶Š:‡÷aXÝC ÃKôP>#:­t)úÈba<|õý«þú—|»Hi72¤UÄœ$¶Š0ˆ M¥hqIÚédÓ*k ËÌ™D"óÐO™ë2sVÉ|ˆ.ÑðPK!;Ó&ÏPKë‹MR!org/junit/rules/Stopwatch$1.classuŒM Â0…ßh5Z‹v+n\¸6ô ¢àB\x‚C‰$©ÞÍ…ðPbŠàÎyÌ{<˜ù^ïÇ@Œ1¤„ôd['Õ®ÖŠ0={½‹ «u#n‚0Û©­¯MyP¡²† aa]É›ÖÔ»V+Ï_«‚B¶7F¹Þ+OÈ;×”üxn” „ù_D¾Œ€¾ÓBl 1 £ã¦ñ†º–>PKe˜¡ÒPKë‹MR%org/junit/rules/Stopwatch$Clock.class…MKA †ß´Ûn]×¶ÖÏzQÁƒzèâYñR”¢‡–Þ§ëÐNÝΔýPüQ ‚âÁà3kÄI2OòfBÞÞ_^a˃ƒ†‡¬ºXw±A(Ÿ(­ÒSBqÿ OpÚæZj¥åe6ȸ'“FÇ„"ê‹XÙ÷:éH%„R;2á Á?×ZÆíH$‰d¼Û1ñ0gÜ?ˆ³H&A75Ó;‘†£½\qL¨h¡MOMd>ÀÁëš,噲ý«_‚ÖXÜ %”]lú¨¢æ¢IØþçBÝ ƒHèap5Ë0ýº÷I*'„æŸ}°ƒ"/Íž_—£€=Yrøšåé ÛrgX`ëÀÃ{²SÏÅ-®¶9ç…‡_ÚÇoZg®- žÛeæ`ÆÛÂQùPKFÇ•Ü.ÛPKë‹MR/org/junit/rules/Stopwatch$InternalWatcher.class¥”oOÓPÆŸ[Æ6J…Šâ†Î06d ¨ ‚ ²ø‚ïLÊvaÅÒ.m'|M4Q5Qã ?€Êxn7º±°Aô͹çÜ{Îï¹NûûÏÏ_2X’ÑŽmdÆd(HÉH##̸0ÂL sS˜)a¦C¸Âm† [ÐXš¡7kÙÛ©’©»)»dp'µæZÅ=ÍÍf(mV§…9†þx“¼‘ †À¢•ç YÝäJ»›Ü^×6 šéÊZ9ÍØÐl]ĕɀ§ìÓå¶©‡Û ÊŠir{ÑЇSB²±j¬®–vv\Ívus›aðø~4µÄœ­]Ý2½-·ç«tÂæDߢ»p <ÏÐæ”r9ÎóÂniº!œ©xvG{¦¥ ÍÜN­lkOœuæô}0ºîkBÎS½XøåÚ-8Ni×#lè–¡¹<ÿ`?ÇËÈÓ‡ÏH áfš=~“ÊxjÒ~Z˜ C_Ó\yÍ*Ù9þP-Òᯉ«QÐ UÁ9t¶6«à®˜™Ã=W0¯`A„}ÂëÇ}CXd9sÿЧPŸ»Î·ñjÍÞZââ¨= sèpµŒãÄ2ét5Aóok•a(¾zú£!'rš*þ­WŽiýOŸa€~L ý¨˜ªŠw#/I<#µÔyŠ&)’h”Éï‡hùJ‘„.²AÊžãYÅóe\D„Æ¢è©æi„pâ¤Tëeoþ)¾ô—Êy†ð.£—ªÔ:G´eŠD–*hebkòÁzê+:ÃëªêSUŸÚçS×*ÔH™:Wáh!û†¶ü–Àïj"¾@ÄèÇÕŠÀ´z•ÑFÐV¯ðž>飧0P®õ¢43è]xÔÓ’Hk×Φ%×k}"­ÏDþÒP+V«¥‚®v¸¢µD$‘L$ÁNn21胈“2ó¼$¼Kz•£t— z‰š2n¯Ó5üPK_¾<åNPKë‹MRorg/junit/rules/Stopwatch.classUmSU~nM²l P¨´Ø^´!@­Z-µyÑ M´ ´Ô×esI–.»™Ý ­3Îè¨3~Pgt¦ŸüÎXG`Ffô»?ÊñÜ›m’†ÌÞ½/ç<çÜsžsößÿþúÀ, ýx_ kb¸BZA±ø@Á2š}Á=drb¹ÂF÷¨x Ö›Båa)èÅÇbø$„OCø,„ÏCÐÀ ¦,‹;‹¦æºÜeè\4mýC4eyܱ4ó¾æéEîЉ^9Y³Br§l^Ò)›ÜMf=»ôXˆKå9Åõ4ÇKk–Ml•!Ì­¼¿à¤| ×}°=ÍÀJ,Q±Ôì5¼î›°Aú¿í`÷Nûfì[í¯þå)¯­Ä+”ŸNü‰®ÈÓ_qöêfßÙCtÿC[Ñùa±ÙEÓðz懅¯¥í"™¾""|søƒø–úÿ¾.•Ó¾3ƒDç[Ò™€hd¾ ‹>i{¾•}²ÙG´‘s?sD~ªco¯=òXT£Uð3aýÒ¤ zEƒòqîú±‰¡w3ÁÑ79u€s¿7„ýi]Ø£Õ°G±@EÊäL„=Ц›.ùÐIYDª…ŽÆGâXë|Gõ«ÍNÑàÕ+˜ÃGb¹s%ù±‘ìÎÚ>*½ºkÒ1“#q¾€•z§=éÊ.ßb÷CFÌÚûÈbŸù±ü\ÀÅRâ.ªæÎù ë7TÛkèó!§hÌà.{o¨Œ“ßy+%ù*®ý‡L_&“ùþºYqÖ´IæßÌÃù PKi'}«ð‹PKë‹MR%org/junit/rules/TemporaryFolder.class•Xy`Wyÿ=í5ZdimI^ùZ'¶µZ]>%–ƒE²$;–lGv!Œ¤‘´ÎjWìÎ&v)”Bh¹š”;6GÀЦ¡J$;´98åh9 -m¹ å*ÇݭÖ9þЛ·o¾ûø½oôÉß}ä"€mêº>Æ8 ã(ª¹[”å|þA–„pAž BõQY’å¢P]’ÝÃa(|L– áŸBx$Œ4<*ÏÇ4<.χрOhø¤Ð}*„O çgBxBÃgÃX‡Oȹ½|NÃ?kø¼l¿ Ëeù’,ÿ¢á_5|YÃW4|UÃ×4ü›Hùzß翇ðalÃ7CøO ÿ%Zÿ[´~+„o‡±ßÑðÝ0®Ç÷4|?Œà4üPÃBøß0úñcyõ ? ágaüÿ§á~)ziûü¿,¿’Ÿ¿–å7žÔð[Qò; ¿×BJiª*Œ›ÅqåÓ”?¬*(?BdQZHU‡T˜”7æ“©)3« ¦Óf¶?eärfŽ?笙¶öfœ·uCÇÛîd¦{o2eîâéòYsÀL™V2“VPG‚Ó.yÃØžá· ¼µoL¶c£$T¨íϤs–‘¶©¼éZëÂc¤=ppÏÞÁ["Ž¢”‘žéµ²Éô •¯K¦“Ön_¼í°‚¿?3e*¬J¦Í‘üÜ„™3&R¦0g&Ôa#›”ßî¡ßšMÒ¡C™ìL÷ñ<ugó)3×=fÎÍg²Fö¤ã$õ4Ä—º)Ê:âOǸɡMš(´íó)´ÇŸ upœÎdéZxωIs^⟠©…€1m‰êàdÖ4,„Òæâ‰Âñåm+Oª6Íçˆ1'Q›¶ÙêãˈªE¦›gÿ¼aÍ*\?ö ¤ûlv“ÂÊ ´|™2Ó|Y•ä©L™?›ÉX,Ŭ™2¬äíæ[Ùj–¨5|ÛT2›ë7R©Ñü䤙ËMçS ÍŽße‘du®/Ïl¹qÁäLÚŽéëìnɰ òé©b¬I˜4ò97zˆÇf³™;¤ä$Ff¸HCUƒû½2ù;=üYs:eNZ݃éÛYÅB4fdgLËËãÕç=ßPÑñ#Ikv$™é›O*DKÉ,õd²'‡Mk63¥ÐRÁ çE‡ pbïíÎýÇIHŠå%­MÎŽ›©<$AŸÅ¤Oä-³/›5N2X’n—©iiŸœ/tñªri×%vï )=¤jb—u_²kûÌå§§“'ÄÚ¹y§%dç{ØÁ-ç‡"u­#pªPç!æá ]ŒÁ)A<’U[Ù“îž°Dô[Á°æ³9já|žÊo“ŒäŠcå°ƒGcF3ùì¤éظªÌ§.abKxyuÌ"#KRÇóñ·â…ºªS+tU¯ZŸ!²è8!"Þ'Ë«ñ†»/¡lÑÕJœe÷V(f6^yG¯•&#&~Åî`2bÖ¬K3ȱV]­RŽÖ˜‘b¨§NÆÌÉœ•‹%Ó6•e欘“]5©f1a5cd»¡«¨j!6•+ÕñR¼Œ\:L¥Ì#Õ—Éϱˆ=¯™ËSÃ< )fX±”IL‰eÒfLjQWkÄÕZG¿}k%ð´Æ’¹X:cÅŒX’\úµ´P­ÃY]­—eƒ°/ó¼ Gkuå1™É§¦l™NÅQ´«u›.ÿº¾<”:Þ„×°7žÎtœºögDºŠ©ÄËÁ|ÚJΙžoÞkÐû©˜•)¸fÊ®às-up…®®T› ¥µÛ$ï›ÝW]éd¦KBÚ%UŸÓÕ Éæ¥¯Œ¸ØDE¨ ©¸®ÚT‚´”ÞÁµ•Б=Z:]µ«]uª.―qXëË1¤ºuµUm³iœ.öwjtµ]íÐÕUêj]õ°JØh¬’¶Ci¸Šaš*˜ÂHõÆX8]±±l’1•¨]Ãß1‰y®+&.LçÉly£.|–5ĨÅWždu:=W–ŸYÃ)÷“¦›0Í´+rJÇ߉é›<¦³Ò±üür!u­®vªÕ:ÞèªWÉmõ4€Ä¢-§Øs‚ƒMÚH4s6:.©–âÍ»ÄÕ‘ GƒYçó¸[Žöá! öɦ­[·*ì|ó_9¤mAÏf<*3ÕRi¬ÃÅ‹j¤0æùy3Í;½óòóÞr˜–ÑÏÊ8G¼sâË eö¨$‘&Ô•zÇ±áÆ „—;¹ì<Næú&r™TÞc >N·çìÁO¡&™ótj°¨)ûÙ¬y‰ÞélIlÜ1æ©bS-_®ÔŽxE¡—S•xêXxÈ·§zgÙü4Ù+ÌSÍËAÛªj8¥ÚßZÒ,[â˘Û*ÍrvüœQle¼’Æ ˜“)…S…ùñ† Ö[ÆÛöTSæê˽“Éœ×Ðm¦Ý‰Ë,>öÔ™,úäçÅŒG5~‡Vçò9·Ü›âƒƒ >`ךÂÚx…÷¥ê¨/uu¿³–|<ñ‹r¯3Õ5ÄÛÊ&>lÄ8ŽðÃswÝø¬’Ñ‹ÏL`’_øSö™ÉßÓ˜)þŽb%÷û¸çÉ5EHƲŸ”B»"±_¢ýAø¾(‰ŠÀÏu€ë Ø‹:ì³E69l®HÙ‰OŒ…ϻ¹Âáçù|†*¨æ:BK÷cxT4U4âEÈRt5Ÿ9WE̦´ ÐÆQ}ÎöO¤mŸo¡T‹!«²©wðLN‰„ËÃõ*’¾Ú®€«8Ï??OnçzG1ú^Q5å¢þ’¤wU¥dävméuÓ§'†ÿ<ôQ[.ç-¨Á[=rô2“øwìJ|Ï||ö\€§Yuí‹X1ܱ€úÓ¸òÆ/ ­Œ¬Z@c;ÿ"M\мˆÕ—:Εåã¨Å;™‹{q'Æ”k[z1=x±]žµhß0ùUev½Äµëjò‰õ5‘¨³Î£¥¤ÌIÓý'k*8ùÒ¢“} ¦„¦6ákÆ}í£ X[.îOýÔí­ÅŸÚö–ÿ™|A8‚«:yfŠ:Û/žFí¬¬_ĆKbñpûHçÅ¿¯'ÐhôŸÁõí½A‰s4¸ˆØ6žÂ&oˆ¯`d£A‰ñ•¥ßP÷ýþa5ÒÑë÷÷Ú{ƒÑàÅž¯GkÔCgðÚh°QÛÞ[-b;£ÕLÞˆl;:°‰?zýQÿ6‹ §1.û-§q³<[Oa‹Wyœ*…IÔ·•Ô{I’v…-´DÁêÎuÔ_ üQ†ø(³ó±àΣHà1ìÄã|÷(qîSD·OÕ>C„x‚¡ÿ,^‡Ïá4>wã ø¾ˆ| _Á—ñ$žPUøº á*oÚɼ‹È“ÀV;…Aêz.%¼œ…ÕBLzQÓuèÇÜøæÅ6]5-{«M$&½Á¦ :î¶é4Iv¡8¸{%é8 ©(þÜ.æ ZüÜùhóÇíl{”8ñBêXZ…RßæÔ¹^^˜ßõÔ¹¶¬ÎÃòîHR <“6L&ΣëÜ׭熘©íÃCÃ)h£á÷;œýŽ%齊I¢ W;‰éd{Žt^º€•h×^²»ÛO׺íg ¶ÙÏ!û¢¹ÍF¬:®?$ÅèÎIñºòSþ3¬ÆÏ™€_`~I4ø/Œ_3E¿!÷“DößÚnï&WܯeâÅÝ]ÄÉ»({€¡¸Eý:nÀë™(EžµÜ½ÑTÒ½.½zS1Ps”â›FvžGïPdWßy\7yw#‰Ç0ÚÙ|×û:GÇý+±ft<À€Ü@äèë ðRÜèãkþJðÙ¿€vf@‘¥Ü ’'–Qyã¿Û(/`˳eùK²È°¹„Áï2tFö¸â£~W>ïk© ŸÖ.¬÷ ò¡^ùѤ‚haí_£4 «j̨0Ž«¼Bé¸GÕÙ¡ü#Öö5ì†7óŠ0X-¬ó{ˆÊ<ÅŸµÞè¾eh܉³§ñ6†°ž°þvÒU±“NêßF¾{Ðìò¾ÓO‡þ^Ò;T÷’*o_N~É»X ïæþL1›y.©¸[ ùž³¶¡µþ †#{G"ÑN–o‹ƒ_û$J¾h`7InšZÀ H¥ÂŸ{ 5Bù¼#íçœçUD¥yë{È©Ý}HÃ\¨k#‘ýòû€s»í+áT± {x0ݨR+Q£Q§šÐ¬š±žM¿Uµ W­AŸZ‹}jÕì'Ý!µÑùMt­Ž×Ï{ì 7ãZ¼×†„õ Ã_ó,ÀtlÀߨðäÇ͸#÷ÏÝnð«XíkH^踟Ðá 7¹·dÇÚÇåºyï”Häæ–áŽÇèXz#·87rBªèÈi|gíËö[ÂXÒ¾…muÚG©ýý:Œˆ:‚¸ºÛÔ8vp¿S=¿˜ï8[óƒŒa×Ùf^$çhýjòÎ…³†¹w.Á¶Â”±Û¾*øÌzx€2ȶàïÙ¶Ò<üìâ§À1TÿPK Žmñä PKë‹MRorg/junit/rules/TestName.class}‘ËN1†ÿ2ÃmD‰¬Lœ¸Æ˜x‰+dÁuJ`ÆtŠÏ¥‰—Ä…àCÏ £"›sNÛ¯çÿOûþñúàe QìXÈc7 …8Šq”L—OC¦9æwÜ™pwè´µ’î°Á;‘®Ô§ FµÖ%ôšnJW´fÓžPÞ›„—½>Ÿt¹’Áz±iê‘ô MO ñŒ9j6¾Ó¾n‘( $|Í•&1†JõèºB9—Âï+y«¥ç6lÀP^1¤†B_ =ò­p²lµ¶l6«íÍT_\ÉÀkêËÓQ@ÚH Çž-dmÄgÈÿ7CqÙÑ ×ý‘P ¥UvQ¡¯ˆÒÿ0œ:TT“#òã»ì“R%l’›ƒ‹&Aµ‰L¨MOðÇË#Œû_^–xaØ©Ü'PK¶P­øe…PKë‹MRorg/junit/rules/TestRule.classŒ; Â@„çy¨ Xzm\¬ÓŠ• /°Æß°Ù û¼š…ðP¢)ÁÆ)†ùøÏÛÀ £ Y†!!‘]§®„ó|kl%š k/lК­­9±…—ž[Ö>ÿAÄš]iëÎ×Fç‹? „qa‚-yS+&Lìü>(^6ò" ³oƒb'>?aÚBI]‰Ý±áÒ§B„>ˆû…äÝÒPK†­ñwŸêPKë‹MR#org/junit/rules/TestWatcher$1.class¥UßSUþ. ,]VšBZ­µÕ ¶!üØP¬¥A ÄVCZ© /Ëæ–Yvãþ¨ò ƒïÎø`ÿŸ;SZÌè»”ãw·¤$-¦i›™Üsî¹ç~÷œïžs÷Ÿÿø À8¾8†WÃ%5Lèèä†÷utbR‡‰)e™VÚj¸¬áÃ\ÁŒš\ÕPTrVÇG˜ÓpMüÀñ»–;X•¡8µÈñ=se?Ø4·cÏ‰Ì ö<˜ ‡ëWºÕ– +”Ïø†æŽ_•®¹Y‘Ü‘^Ä ]Ñ–Î6¹»24Wdݶ"{KÊqÆáRQÀʵôla1 ­ ¤çi$eÇ“•xgC+Ö†KK_Ù·-wÕ 5?0¦U0n(Ìy× CIËÛ­"W|IóhTN,¨¶9^$Ïr͹0Œw’$VßåŽêâw¶¬ó~²¼mݵL×ò6Í•­ÀÿVE¦X“Aà %óØ!Ž×,;¡¢þTs.»µz>Ÿò9¼HýI ®Ðë“I5émöfÕ[Õ*Ë7×Pb77¶¥M ¯÷^R{h;̶šæåÓšPÑØÏ‰æ¨–yñ# ÿw™K±95W–,Çù$-õøÑ"ófEõçž…Å;ü@ôñ«‘ÊdTÛ”ì¼D²¹ÒÁÿi¼É'í µ"çiÊl~x"?²Žüè>RùGHßO¼ßâØEo` g9‰žÅ9œ‡zÙ²ô"–¸C$…uïOt~õ]åüB>@ÇðoÐ(SÑÝ`:Ö ë¿b}ixäw¸­ì# ¯5;Mét¼Ù©¯Ò8ý›cæ>sÈâ"sèIäz¹—äUNä¾Iä~Ld*ɽBËèæ5‹«Ì´È}%LðÅšÂ,¦ù]Å1Jø’¶5\Ã:æQÅñJøž¶=ÊŸù®ýÂgMq˜'OÓ¼—A¼GîÖíBr3÷xíÆO<%G~‡8lÉS¦%MÙËG’;ÅXb3Q`:WO ùýPKÕÓÌ’FPKë‹MR!org/junit/rules/TestWatcher.classµVÍWUÿ ¤LS Tj±[ÛJH !-¥¶Ôj¥ÔV‘ÊG©ýÔ!`è0‰3¥~tÕ•»êÊ…+=žãÂnÊQÏñèÖ?ÊãïN&“BHáÌ}óî¼÷»¿ûñnÞ?ÿþþ'€4VZÑ…Y7D̉¸)âãVìÇ-·[¡âŽh׆ûøD&ŸªÐeœ‘‘a¨XP±¨bIh×lÛpÆ,Ýu WAËÓ6½‹ šãýs "c¹¬¡ c´ÉÂʼáÌêó5]¹ŒnÍéŽ)ó@ñ–LbžÈ9‹©åRNÁ2ÜÔ¬áz7u/³d8£ öèù¼õPÁB¼j¡ðpS+4h¥f<Ý3V Ûݰ$uÙp3Ž™÷Ìœ=ÚßyÍë.ékhq[¶Œ¯ ·¾}n!“1Œ¬‘*˜†'~¥7úUµibYÿ\O<ÓJM˜®7*Vȯ»øÁÒíÅÔì’“ûB¢J-†ãä¶sýNªóð0_ÊEߺµj‚_$DlÆ\´u¯àp×ÕíQß T<Ú» ›VET®Äk.Þ~¨šŒ´‚{»€V}»ûÀÌç+èë•‘1mÏplÝJ]rÝŠ>gæ,Qv|5cÖ¶íÙÐvM(X}±´ê…¨ÃõtÇ3íÅ0F lîREÔbáéPpt‹ÚÌ–bÑ(ÙI~A ·®–wíkIÁ~ݽd!T+˜Úå, §ÖËFÞ12²MAÏtÁöÌcÎtMÆé’mçØÒ¸Ô•QŽdy¹FK äk)sÄÕ™1×=>44¤`2^·—ïàð®‰H‹8U6–c¥É)™2Ø©$×B“ÕänSwÚ;tö.Spß'7ÌomÔ‘œ8Û’ëö +þ[18ò&4›+hvû4›ši><_Í_šñäߨû:É¿°—„ÛŸ"æ3ï¨Å¼‡ JÌ{y_²” g‘ßð«Iý2¹Y¡½ÄCâô`ØÇŒ‡Ä7x¯òà Ÿ‘Ú%ÐÙH |FéQë‘Ë(ìj œ­Íl_#̾¤ü†Ú¯Èäk2{´‹Ì"ÒƒÓxÆ×ñ„®?Æ}ƒŠC3J`&"Í3€x›Os-ˆo+Žq%D©R• Ïi®Ø-®–HÅ’“‰A)º2h»ô„³ï‚ïÀpq#øE<ö• ‡}X¶oŽu9ÿ¸)çá*Η|ý»Á¾1ŽùaØ*ª?mÕñ­!~®Ñż@ŒÓ ñCåñ]Þں誊«Ê],$ïK!òƒM #;‡œÀ‡äGt[’%äàškc 1£Ä,f$JÌb·ˆbRºѯµ&zSãè}›¢OmŽ ©j0üŸöwÎ0­`#PüFÊ¿ÿPKøxègZ-PKë‹MR$org/junit/rules/TestWatchman$1.class•T[OAþ†–¶,˼DDŠ¥[ºD(†HŒE ø<Ýtq/d/ ÏþŸIäÝàÏ1žEµìdg¾=óÍœïÌž3?ÿ`+Б“ݤìòº`h˜@A¢)‰Š²3Ó(¥1-áL³i¼`й“uET÷k “?Ø3÷cÏŽÌ ö<„¦ëׄcnÜG~ðqSQ—2ra•‡‚aüÖe[„+¼ˆ¤¢ºfK #ÑšÛ"Œ>ðȪ»Ü“Ìe›æVÜ\sjËr[8¹Ã\##COÅöĻحŠ`›W²ôW|‹;;<°å÷¥1)bƒþFî¹æð0dmª:;-OOÐñÅä›!‘“®¡Òµu¶‰À㎹†±{Ù¾·cû­¨­²„2Ð>C•}~ÈM‡{{æv=ð¤4²kW$Ò£mùq`‰ [ªî»®¥(WSÀëžåø¡íí]œWs:æ± £:ºÑ££}:1¢ã%u<–è•DKXd(ÞM9ÃÀ ºu,£LùÑüôÆþû7†›mÂÐÎœÏ _r-¤FëiÖê}u_X”U-•F&ŒxÑñ3nô¯7™6alYBÔUof—Ê&¬K˜Úåô³ ¬ænL;øÀ(])]tÏ$z{e&4R2¨‘ÒƒfÚèÄÂ=B+ô”–¼q –/œ¢-?uŠDþ’ÇŠ}Ÿú±P¯+<ˆ‡†,'Ê-bɽ~!A ¨äOh«´¡†ÄR Kº3_é22Îݸ0uç›×…ócR×I> t¨±Meòcúò•ÆRÌÒìE:¯89bX@Ê ˆE˜TKÔÊÔÞⵊg”4h'„1º ©+—1>¥7I˜ãÊ_Ï”mÏñˆ&¯¨çPK¨gz`¶èPKë‹MR"org/junit/rules/TestWatchman.class“ÛnÓ@†ÿͱM=@-åPZ I¦\ª¢"¤´HMwg›l°×‘½¦âš‚«J ñ<bÖ± ¤ÍáÂÞÓ?ßÌÎÌþúýý'€=TsHãAsHàQ¥,ÊYTÀPx£”ð"`È<—Jê ÉR¹Å:ð:‚a©.•8ݶð›¼íÐÎjݳ¹Óâ¾4ëx3¥{’wêžßµú!,?tD`5E ßqm÷\®j i>8Ÿ¾”þSš@Ë%ŽÕÐ\ W(]›(9ô¹+Î<ÿã‘Ð=¯S«÷ù'n9\u­·í¾°u­<ž¢nó€‚ßžKœq#g “Ùãq‘‘æ~Wh“µ 12,¡m ÑD­NÎÈ8Ö”'sÊ¥cìöK#äfÏ÷ÎLEæÏ1JÂÚ¥†…€® ¥êÒô”:$诹†ú¶8”¦ø+£E~b0$x%¾°)}¤^? •–®hÉ@u_)+=E-SñûϦVÀ"rÔPÓúigϨv6§©–ÇSϰ1n1ÌÆIhîã–¦·ñü}9»¯Ê-l!E”JJ/6C#]œþyZY4ÒSEºrö& bðWè_ pK0z+±qƒvS4æ ñ¾RÝ=Gòëâi„¨ e1ÂÌVq-:Ïã:ÖÈÂÌŠ¸$íÞÄzìàYDÃÅÈ^GØâðð/–E0s¡ ÜŠ/éK^†8Š÷†‡#ˆMÜŽÎYuÈìx3â¹;ña*"E‘ýîGûÛ±Ý ô™z&¢üPK’o3GšPKë‹MRorg/junit/rules/Timeout$1.classS]oA=”¥ë­ØVÛ­¢ÒmãÊ›¦Æ—Z“&èƒ&>Na ÓìÎ’ÙÙª?ÆøLlšh¢ïþ(ã$µ$n2_wîœ{î½güüò @ ;‹p°a'ßE ›î”p×E ÷ÜgX8åQC0,·Oø)#®áþ»ž™¨]†¢Ê´ñˆa¥èAx’)iBE" »2If¬ÓSIæg ­æ\¯Kñ· {IŸTÚR‰WY|$t—Ed©µ“¹–ö<1,0xJ ½ñ4dY›¹Ñ"†%AyfÜB¾i£ºS©ƒtî$™î‰Òñ&OZÎDm_õ¢$•jðR˜aÒwÐô°…ÀÃxázXBaõ"Ç×™22°~ ˆƒìû#®y,ŒÐ©œhËBlS™çfÁ°9{g“OØj…C™ÅB†kºC¼ý]µúTê?¢÷ ÇvîRôÝ\Âç"íi9iæ 0Í%tŒ¦ªÎjcJš´Ÿ”["%çªU[e€V*¹µÐXB™dP¡Ý:çi­Ûg`ÁÎrÁ9òŸÆŽUš‹ä|ÀUš½ñ¾‚–autuò²0éǰwå¯(¼©-Ÿ‘;Gñû_(gPÊ”›4ìÛ¢±:ö_í±í6Öqv.Ý:¿PK˜KýŸPKë‹MR%org/junit/rules/Timeout$Builder.class”ßNAÆ¿i·]¶]Q ŠˆUÔvVD½Ñhb•DÒ€±•Dî¶eÒnYv“í®>”«‘˜hâ…zaŒ/ ^úÆ3Ó±’¦XnæÏ™ù~ó3³ûõ÷»q3E#°DsÙÀ̋т;ƒ4®êXÔqa ‚­å ¬Dq}«Ú ¹³ÉÀ6ôÈÝæAÑl…aDÌžø.MgË-ç™cÇ‘ëÙõÀ¯ÇaÈýÈ®ª ·Ò·]ÜaHŠë Z)Øä ce×ç«ñv‡U§æQd¢ÔoÝ ]1WA-jºm:þ^ìz›KžÓnsZÈ—ƒ°a·b:Ác·åÉdtN)È@ö¹5«ý— +C,ÁÔb™}¦Á£™ò£ÚdU¨[ž|¡8´@'…¿2ÞõýµŸ+lÆNšûÝzMÑé È]dª&D Ó…¹ÄËT‚8¬óeW0M_‰˜ÇQdM˜8¢cÉÄuŒ™ÅÃäH¡ºAeH& ã²Xžã7ìµZ‹×©„3ÿ­½ÊƒÒÚêýŠ(ÖÐRב§‡oÐw‘DB¤A£„ÈDö”õ:4‘%èMÒìídÔ笷`Vr ËØCÒz m©WRwL¬#EíKÒ¾ þ±vq§¨Ù%Ð|ŠzºrœRôÇD×ÄkV@ç iuzÌQZ>ùyý,YgeÌT,1î™M“Á;Å·‰$ÖRÖ$w{à´ ~Ùg.¥€Î`¶'f=qªÓ'þ6@ÌÈ]^‰ïÒ¦5-jöOž‘áï$ú!¹î¶^B:ÎѵÐ7†ó˜à$±Óçäç@'pQ‰—Ô ï‘~J·¨÷§òkÀP€.ɶ€Ié™þz´;ãPK0ÙŽWPKë‹MRorg/junit/rules/Timeout.class¥VmSW= K–EÄ ‚Pb5¥Zû‚µ*H…FP‚T¨Š›d…Å͆î‹mgúµýýXûÚÚéÔ™þ€þ¨NϳY7€DÒ1™¹woîóœsž—{7ÿüû×߯¨¸¡AÁt 3øBƒŽœ†Yê¸)ì sbrK†Û2̫ȋý‚ÆáކE|©á.–dX–á+º§â¾Šº°¢â¡ Cz-°ì’é*ЧÇt'lÃóLOQUß*›•ÀW Ì(h•ÕÇâòTnÝxbdß²³ÅŠS \×tüìBd0® Ó®TOUܼ/¬¹¦Q"Ê21 /ù†Ò£¹Š»š]è’uÛôBG¢”˜¨”L‡s–cÎå‚é.›¿´\²èw™ééÑE2æ*EÃ^4\Kö#£„¿f1–ÞzD$h)[¶-FÊ´mÒÜp͢ᛔÛ;8ó¢åYD»ê8ßð­ŠCãîjlÃYÍÖ|Æ%ª™’#b‡Ó†.fƒ $èdz¦n¹­z&E”(Y[5ý…—=>H%+žÂj§cŽå´œÕ½mN²¦'‹\ùæ”aÙsND‘gªÌ2!ÜØ¬t™—-³¬v6¶mÀFAÊ«Á5ä¡]ÿ¶hnDUKöw 5¢èÚ+ºVÖ ^…=ص£Ub1ÒÙÃãv[©†ª ÿõ¬Œ'_ Ü¢9eI{ëQ²Ï åÝ¢cE%œ’Å{:N¢OG¿,0¨ã˜:aUÇGøXAODkâba]Åc§a«(ëpPѱ¯u¸ðt| >ºOô<[õ¤Ž‰.V÷HÍm®°n¥_ñ1=>D°y\ú^ÛÒL×Íé\n:}bnv2:±ÉÛ¢cQ5ä¥tÐݦÆ* ž˜®ßб'×ùZ–ã›®cØqóÄíew$Ÿíº(vÜqGŒ¿;3ôå¯ÅjVŽô Õö _ çJzùMá“áHÁòÿ½–&#ÉXÝ ~|ßë`tƒ|C÷ð­{Íè”sÉ¿r4Ù§“³†Û­†¹@äÓúÊÒ6š6!oí·9¶pÎsÁ;ÄëkH„öZæ­þ@ó6¿sÕÚkáÎ$ѯ#ͧîª%F‘ 4œÁ»D;®ÎE Ù×H¤§@¦çc™m$3§¶Ð’9»5Ó¼…ÖW7’oÑò6ùæqyÅBÈ;@úǼÇÂ<(á“dBðGø'©Êgp-:ûB¾3Ï‘JΚ°rnÛ‡ø!î3Õ¹Bø‡;û˜æ÷I“bàç#º‹ô+ýô¥þj 7côjÊ­MŸuúJS¸P£} oÆ…ãoæ‹ÆÕ¨íg2Ïï3¨Ïqè·= ßï«=«2‹ áx½GpYÎâ‘$Rë¯{`~Ü¡%Á$äb§•8ÏFZNü‰Ã55Gê9:X‚νÑý´C؉XØ \§ܿâ‹@Þ{¸I´ø›4V‡õèæì t-eÎn£{3ÖB‡*É¡°ƒ~æ/O¡â—,Cg•=|•g@v;bÚL„´ò4ÉÞoâw*ü9%‰¬fîêèe»PýÜå¿k®ÿPK‚S(–·± PKë‹MR org/junit/rules/Verifier$1.classR]OA=Ó–nYZE±*ØEÛÕ¸òH0‚˜˜T_ }Ÿ.C;d:ÛÌìVùY&‚‰þ”ñÎ 1FºÉÜ3gî½{f~þúþÀ¢yTñÈ™Ç><¬;³á£‰'ZB†Ú„«°Ï­`huS3ˆOs-³ØäZ cãQz,T|˜ñLŒ„ÎvªÙPÚðÃÚ?t%lÜFžHaëµ$ü Ãn{:m†~CeŸ@†zWjñ1õ…9â}EÈnšpÕãFºü¬¸ùÀ¼w5÷·VÒœ:H¸E×)‘S_†rÛµõ>'bœÉT[›”¦¹IÄ;éº,\}yÊ'œ†;ЉJ­Ôƒ"¦Çžx†v·Ô0 Àr€{Ît°LúM‡aãFi–\ëXq=ˆ†&ýôçÿW§•e˜ãã±:c8iÏ ü”ø­°‰‘…";ÙÞÊÄõ>Ã:=@d©ÑpRäI‡Ð °@·µHÑ6åeòõèù9Xôâ¥èÊ_ bl•ˆ r☋븻p×MÊ˕٣¬Ø‹¾¢t 9v¹¿e‹.-š)¤xóšr+´*„¬ó~qn  ¬‰‡X¢È§Ý*Šï7PK-ëþËoPKë‹MRorg/junit/rules/Verifier.classR[KAþ&Ù¸ºÆ·Ú6ՇĀƒÏlK ¡…}œÝLÌ„Ín˜Ùõò¯Ú'¡@TñÌ&E­MÉžÛ|óËœ_¿Ü8Ä®‡^¸xé!‡W.*.^»¨2€¡ø1Ф> …1Ò0Ì©H%Ç ùZ½ÃàœÆ]ɰÜR‘ü”}©ÛÂ)²ÚŠv„VÖŸ¤¯ˆc»ës>H‰ˆë4”†w¤V=%u“¡ F£ðš¡W{„²E>¤l!?KD"‡2JšO ü­4V£DÅQ³>å CµíÎ^ìÞó3TþŸŸ¦ua£n¼wWÌ¢ÆÅùgqªù^Ù±,ýiÿ` .D ðhHÓf´who¶¦!J–ˆ‡":çŸý ’ ÛÒ$_R›¿|n÷u|9~¬“ÚôgšaVõ޳‡öЦ@K–'M}‘\$“¦íBaÿì;9IÎeÁ –HÇ<Ã2ì–°2¹üh󤽟È}ÝoÜ ÿí/†jÆP£& ÖZE9;÷°†uºá`vå-k#Ë‚§å<(‡MÈ6éwÈÛ"äó ¿ùŒ˜‘}wPKK ”û°]PKW@uWorg/junit/runner/PKPKë‹MR!org/junit/runner/Computer$1.class•SMOÛ@}›„˜8I¦¥”RÚ‰“b8V ‚T)í¡Ž¸pr’•³È±#@û¯Z Z©‡þ€þ¨ª³vè—KÞyóæíìøû¯ß`¿€<—KMEÛ*¶°£`WA¡xa9µ~$œ!÷v»žoç‘+BÃ\—û1ö†Ü1ÞŧW ð!ŽDPÛgXO¥mo<‰Âv$(pÌЩÏÀÍYµqÊkS€¡Ü.ûÜïY}‡<Ë]o`9§–/äyêÌI• `Ð^K¦¶c'ÏÆíjj¤{)qžxI C«Þ=·.,ñ\Ûˆ}‡4G¢—ò !Âiê½T&Cõoµ&7ŠWÿéÇ„W;ï| Ï 4ˆß¶k…‘O)FJšÌ™¥N5½Èð!+–n.¾'Y¨µwàxpí7<yCº†&Z P5(XÔPÄ {0èùgô‘a{®‡eXù}ÞÈ÷.“^¬ÝÊͰhóÐŒDH°^z´þ??gwzÂl]Î[ê$.sÞBw¨ƒ§ô_æé?ÍT*²·íÔh顯†·DÖK:gi/ëÍk0½uŒþÙO1p‰Ö<Ç(ÓªÅv¬@Nÿ*îS²¤1i—Ä%ýŠX®i~Fî#9²lÆ$Õ8%‘V(þðWéY#ëÙ9Úש¼”³AlObk“î'c[x†e²TB-Älø PKð PKë‹MR!org/junit/runner/Computer$2.class¥’MOÛ@†ßMR#Ò”Ò”6Ðð‘u镈C£Vª”rhPz(“¬Â"ÇFþ¨à_µ„ÔC@TÕ׋#¨,R^ÏÎ>3óîìüþóó€]lLÃÄ‹2¦ð²„º… «ÅøDE7µnŽœÓÄW±&¾/C§ŒÏ’X†{ÄÚŠû_6ïárG‘3†Òs>ëÝ»DyCb_»§î7×ñ\ät<7Šöš}³CT`¶«|yŒexè{ôT»ÁÀõún¨Ò}æ4Sݰ?¦¹uIÏòÝúoy“Â9/»ñ@¥)¾KyÅ ÿʺ8›H›ÏÑíÖ>¬‘ŒÜ1‰¹Íæ-¤‡Ê(÷‚$È*Í23Qý:%Ù—÷þÀ "’Ÿd| -¼²ÑÀš",%¬³Â`Ò…Ú=MXÌß¾—¨˜U—îŒ(Q†æ§àÁOŸë6 ýiû¨s¾§8ê¢RI{B«À¯„iI™Ö €ÝÚº„hmï\¡ðƒ{¸I+°¹Öé#‡Tm=FUg³ñs<×¶È< :ó"žf•vøOÏŒªñ]˸)ÐÔ®C¬€%M=CϱŒYZeR¦€¿PK~h„tÊÆPKë‹MRorg/junit/runner/Computer.classTiOQ=¯ËL;¶Z@PPn2‚»>Ø”„¤ÑÄ’â§i™”!à ™ÅíW雨Äà2Þ73]°‹-“ô-÷Ýsν·÷½ß~þ°ƒWâÈ‹(Hñ¹(â¡„(¶%D Kx„» `H†j•tŶU›AØ× Í9`gs5†Hɯ‘7ÿbm„NZA{ø XDØón@¤YÛˆœäÛˆžä -ÅD ÷W<á5ß=æ«›¸/á6‰/wÃã–²¬ÞÁ]/™5Ú­ã^B,œS( ö¯ênŸªÐUºªîcãŠ*·lö©>T·è—õV9Ü 9M«ü/êOPK¯¤FyœPKë‹MR"org/junit/runner/Describable.class;õo×>CNvvvF¾ôÔ—Ôâä¢Ì‚’ÌüèºA{¤Iº²1VØÊ°´-4Ý ¡ØmPî’Û6#MÊM‚Û@|€( >AÜPQ‡0¡ô1&O ¢ˆT|€à_Ìïœ{ss“ÞÒþtì×Þ{î¹çü¿×ÿ|ßw»Çߺ÷~+Y©w¸Á°_¾Æ/wºqÆœØïÂ'îvãŒó© 7\˜tbÊ “%´ò w¯‡\øº¸Ï…ûùüüò ¿<Ä/—âø¦ßr£pò™oóËc¥xßá—ïòßã2¾Ï/OðÇ'ùöðÑ¥(ƹ?rã)ü˜Ïý„¯{šÏý”_žqâg|úçüò ¾ó—n<‹çÜøžç—\x‘ÏüÚ…—\x™¯ø¿e¨H)jLŽ÷)j*–LœÓÝÁÀÎ`(kO&Ri9‘î“ãÅícXì wmìhëíhïi …zÛ‚›ÚÂáγ{êz¶ËËÍ™t,Þ¬*CÊŽæMr:­¨‰u ŽÎà¦p?ÃÑ=Iu¨y{&K7«™DBQ›;”TD¦IZXî …‚í]m½Ý¡ CÉ`ûp,U•CIB{2W"ú®’Pl(!§3ªÂ°ÆrQëÛ ^O Ò`G,5—wöÊ#„ãÑpârb¨9”Vc‰!.hðœD좌Ò5´‰%›C‘±]ò¶¸"€Ú‰dZæÈ)†c·˜dãMsníq†•Tº=.§hG¥iƒ˜¢U…s­>®tMDUä´ÊÄÒŠÉ †°wºþ³+Ò8[|ìíÉ(9g^O,¡ôfF¶)j˜[ÍÝ•Œ™dò=ë“ö„pe©löÇv ͬ]yôueŒxUk®â~ÎóÔàŒúaß•DxÜ4v)Þi1~Gd:Hæ®]œ¬yáÙ9š Ñð4E8±Þ]Úçbó¬(æ¨ð¬@›çwkfÎ ^9˜TGät^F9iN­òÎÊé®›né\FYmé´Y!BÓÅôY*s€‹[côn=C×:]}”ÂÒÃ1r`iÔÉ3Ü¡!çÏEÛÿ9C’yŽêþ?2ʇ”|¶Wy-™ì’£QQÑ{ß> ¶4jNÕ¥$$×Ôf%ˆZߦªòΞX*MBZ¬ßÌ¡ pÆR¢–2ؼ›‰R±/ÙÓ”Ì$ÒâU7O­šE±%Fyòº©é‘ÓI•3RUR™8ma´Á5,§†µúY¬\”‘ãÄ«jsh6nÛNÝÊ:.זܶ=¿Ñ_Ét¥“šG…Æ#£éÔ¹ …âJ*Õž¥çï¬'¦Œš ¤UžÈËG3u/vEŽ S@ç²TVUò—=®$èVž[Æk’ÑT™˜‹À´µ†×®ýt¦‹ýtÕ8š×š•Ç“¼–rÝ ¯Zg×·€$ÉÔÐÍÏ; Ù–Ž‘½ÇÎ÷&ÓˆeÑÎ%¥šéÛµî‹iÏ5<šA%=œŒjÏËGÄC["j,Ò[òÓÕdft£Ú¡ Ê‚žË½Ýs¬DŽ!¾•dEµ½ ©ÚE†Õê; ¨½â§¿5×s4":ßîP2£F” 1Þ‹T˜È¹‚ƒ0,|;K¸q~•…âÄï$¼ò÷1³ÄˆàÒ”wiª‘dž0'~/áø£„ð'~ƒ/gQ$™ˆdTÊ?i"EvHÝð…Jô¬Œ’Q$t S«¸Œ‚›Ãî&þ Éñ6u(3BŒè2VôêÒÀû冑L*Ý@ª6lS~´Wp5^#³øR­¡mˆEóÖ%2ñ8-ëÅF ]è–pΔЃ –ð:®$ZdDü†„Kq‰„køå/ø«“ðwþð&þ!ὸLÂüò!\)AEJBN“pn”ðOüˉKøÞ’pw˜¦‰ÛLbEÌFIh6~K¸šoûn–p*Þådv ·2‡“KÌɵ¸…¹¨ŸònÙšÚ:Ï׸Õë]A×F‰•071ª7ÙÀOZŠ;Ò½aD‰ ˉXjDB;N£ÌlUÔè ¦@/b0íÜTòžø¢õs 'Ïò]•ÍáVgg‰·q.߂Ŕ‡ÒÃÅ!{(û²&$&:QTZéøy­SßèŠé¥É”S K–gú,ù†JW¯²#Í?éÄ-¿ºµÉ‘y±\fUÕ¬ÖWp’ÂP,§83–zgö«Ø¡{W6 j ^ {’rTä¢é™S{ÅK=…T‹÷)~Þ<Ã>«D^;Ã>NÈ«Gò¢Â¯$"Jž!…Yr^0›[õ,+‡nKŽ9#É‘Q‘M›¬Ø3ãßh°äJú=%X€µXGãVE8…žédÒ¸ŽŸ|qowOv´nƒXw:=Sîó”~Ä2ÝOã‰ÉX· ‹pÎÂÙ4¢™Sá Y ôX?óù'Q4&†éZL‹€&œC×mú„>:—à™{·ví°Ñ]ÒÁ“°¢­h Ú:MB?)ÍĈãîflÑqƒ¤$_?Oàú}S°,í6AÏÃVzžÂÄ(}Ý9ô6Úá}~ß&t› ½Ï„îÁùäSˆQÝ££#˜¾jÝ5Ï_@±Ý Y—»E÷{už\Û}(¶1E Ú]­‹Î ¬Î¸MŒè>):¨ûˆ‡ï¨>â.¢_·….š*1$ü37“óʰ`lLÖÕ.7Dø-ð?lR¹\Çç#íä$•çIÚŽòI—4D’ìt/¡ch"¯ï7„¸ðÍ”n‚|ÚBŒˆsÎGç‹ÌG òR‘qá6“ðüì9O ᣺ð§h%ÿkr—o¥¾Cú'Q6ŽòÀ#p&0oÊ¡¢ßS9 ÏMêOóù“Ï?Ž*_`Õ¾¦qÔøêìã¨Í龂p+i|#¯¯P¶Ú‹%¸^ÜU¸-¸‹2Ùå®ý”£ûVkºöu —21ÊÚ×%8f#n©Ýdi—psÖÒ‹hD‘ÎÃfºó5ß=¨.¤Þ”‰']H†.¦ÿìп†LYíêú9ê$jõ˜I«,šfÚNšÛ…KtíZtÓʈ¦õ{à´ï¥„±¯ìIX™aâ¥ÈjÄÍ•9ˆ… …O›Üu¢:Â'h5ççj®Æn8ìûl­Ø"†`à ŽfØZÃð Xo}Ó.hÝ{øåúœ¬$ xN ¾ZשÄñË…=WÚ­Òís‘J5X\hÝ+&ë\†uÔ]ëû£´š³nÿ!°=pØöùɆ G Äcsˆá‡WIË×Ȇ×éø¿aÊœ b, òÂ/'¹WÑ\¯¶`ìŽ+䯛–Œ½Æç*ÆÍ=€%XZhîaKs?Škõýëõ[%òß=tÒéØÐoíôòJ9¬*ëcø¸Îõqºó ¶ðýÁÀýëmkìÕöE7cy Ú¾j­£ÎqËüäÃÝ(ó×9&°üA]ag{?ÃrI·†ç6µ¬KY%ši|"«âדˆZE,ü$­ràx|JT]µ)Ÿ&6؈>âÊå"6-F Zè“ic^²æ3×Yä34ºŸÕM1³¨v ÞBWÔ[¸UÃÙMs{(j8דœ Íܵ¸ª1ŠscÿQ8ؘÏo£'úñO!0.¼_5$WP ?d”&v ì88ÙHl*ÙrT3/¹Èå,€kB[aÐïû>/L³®`%ŽÖK¸¦êht“AÃN=SÕkª–ñ•ý” 93WL¢¹Ð -&/Ô„ø¢¹R‡túìÌbû©¦íN}{ÿÕ·ë‰fáÏ5˜ÀÊ^J%«v£´©~'Pú ä0Evf(e¦"ºÐ ÀB*®— Y ñeQdJÉ#·RɲQ÷â6]ê™ÐþÛÕïY=…ïÆñ¢_ò¬Ñ[³»±D›h1&NÚ/ìæJ”‹h/&Àk©O¿Žf¿*¼ý¿PKå&Ÿr ýPKë‹MR&org/junit/runner/FilterFactories.class­V]WWÝ—$L†±Ô¢‚¦*­Ú mbiC°ÄÒ¢mu‡84LÂd‚úÚµú#úÒW_éK°uÙö¹?ª«ûNLȳZ³VæÞ¹÷œ½÷9çΙùûŸßÿp ÏT ᦊ n©¸¹(î¨Pð™¼Ì+ø<Š/dUô`AÅ ääe±ƒ¸+g_ªXB^Á=Çð•‚e_«ˆã¾‚ré[ß©ø<èž±lË%&–™ÒcS` kÙf®º±j:÷ôÕ"WbÙ’¡—uÇ’÷ŰûĪœÉ–œBj½J ”SµmÓIÍYE×tætÃ-9–YI œ4SwÍÆ†SÚ¨ÏòeÓ¸—h…X27«fÅMg×õ-=UÔíB*ï:–]HO´oè¶U®u×*Ù rrFÜjYêŒ?hPœ:µÎ. ®ù„Æ‚€ân©œ5·Ìâ-³b8VYŠ8Ý êÛ—À·Ÿ¦wÃjþô×mö´y‰åUÂôB`/8P" ¸M¹Y\]7 WAUÞ² ¼é} 0|XÇåCT0Ý%oM`$Pìú&«Ã‰À"ã•UËðuè:UžLÛƒ¶˜Ž¹VäÉKùœÈ0ÚÖ@ ×6ŸÎó^gAÎ7qÔrIc cü¸‚üuóÏîÁVpгGöD&w ~å¤ £ž‘\TqšW­n€w~·½‹3´’οÐ.Ìqf²†®B ÉX¸†ÈÏèç$RCwîŽD^CY %ó+áX4Ÿ»ºü =+S—w ¾Dïöçqr€"£”w„Oqu’œRÃ4÷N „÷0Î+qç¼pfp *ŒÒf‚ö]üÇvI§jö²†êEŽ£oò%´…©äoèë¾ •#衃¤«ã"iàÍRxŸ R^ÂeZ7Ó\¡½¤Ñ}4ý~šæ:aÒM4Óøàš÷j!­®z"w‰¯yò¯Ó–íºçOD”˜£0Ç`_/зð ñ•©ý3IaÛ`/ú™´¯ 7¹v›« à†qgO䣜Á Oþh#+½ô–ÂÅžÈúÊUÎöEJq³ìT8z“¡×8VÃqC5 ÿ…Áí¬T˜” =q1ºîŠë÷"ZàJGYÉÓžà.Î뢄'ªžÃý|’¯ùÿÄ›}Н&roß ç_PK‘lMÂÐ PKë‹MR>org/junit/runner/FilterFactory$FilterNotCreatedException.classQMKÃ@}[ÛÆÄhµ_¶ ‚à¡`ð&V@ªôf*‚ˆÍææäœs?Èþðµ0Á(ÁE‚a‚KÂÍ<+‚ñ+fÞp0ïOŸÚ”!s–0\Xkü¬àª2•HÝ$NÂê~éüZåµÍ‚òuŒª“7gœß¾°çM5}øÛ°ÍʺàˆùîL éZ`é««½Ž0C¸þµwœónÏÓ W1§ ¶kõü–ç;wÿ~F@h!êzHD÷Eud¶ÅȽ…]™ióFâ ŽPKyؤÞÚtPKë‹MR*org/junit/runner/FilterFactoryParams.class’_kAÅÏ$›l›®¶MÿØTMó ’¤ÅE|TQûj¡%àãdÖ ÛÝv2[ô[Yh)(蛂J<³)VìÒúrçÎÜ{çÌ0?}þ à1: øhùXo ‚Ö,ê¸ëÂ=÷}´–lv8PÇ*y¥&‘чVg©@{™8ç©¶¡ÉÓT™ð¯úSOšx"ÐŒå± ™Æáž5:Y«?Óœ{.ð¤{=æêpoHôËì˜èTíä#eöå(QN,‹d2”F»ýÅ¡gßkyxUi['V™mÙÌ|Ü•FLhΕ}Qx_îöÊܯ²a¿ìM:ì¿áU{Yn"Ee:[+1ðÈ °Á7¾ßÉ“d7Ó)Û_ˆT 0ƒÙ Ì <øŸË ,\ߌÆ*²ÕnoÈ_Pç'?@ÓA™5—k‚fn1ÞæîˆU®ýsˆ­ïð7`î *oÏQýÖß<ƒ×ß:Cí¤@Í3® ¢=b‚—[ĵ‰[`¥3Åa‘‚(2'/ŠÌ¨0_âÔT>äêjµþ)jŸþˆÔ‹ÃÅL.€+X-öþ^)¾St­ýPKžT ¾±+PKë‹MRIorg/junit/runner/JUnitCommandLineParseResult$CommandLineParserError.class­R]KA=×ÔEÓ2M+{)è¡/Zz6|Ù ”%"Ó÷Q‡me™ÝègÔOé)è¡Њî®APÍÃý8sϽg¸óúöüà›E, aaÝ¡b¤öE0”Úø¡tO Ô#”P™H¨h(‚Xæ0?DÈŸøÊÚ„ú®;·Â„òì~¤}åµö†„¬N$aÙõ• ÌQc^…%¬¤?!*jÜ#ƒÕ”SG%e%È–QxPKHnp_XoPKë‹MR2org/junit/runner/JUnitCommandLineParseResult.classWic×=#4B ±-ˆ ±‰lY(vZLm0‹‰c‚Í7-cil‘5Îh˜fiº¦KZÒ…–.t/4‰C¡é’.i›´iºÐ-Í÷þ†¦çF’-ÉJé½mîzî½ï>½üŸ®èÀ›tá„‚÷àÁ‰%ðã1<(†‡x(x4ÀÍ 1<&†ÇÅpÒ'Xƒ÷‹ÍÄêƒ~<éÇ)RðáêG=>âÇGÅü±êðñj<…OâOŠáS~|Ú§|&€Ïâ´‚g|ÎÏûñ…Ö⋜Á—Ë—ÅpVÁWÄüU__¾.4ŸSðÖã›bó-ñùÛÕø¾+†ïð}œ¤<«à9 +úÌÉI-•0RúÝš•Ö­–eZÔþTJ·ú’Z:­§%TI[·†§ô8wËŽhGµXÆ6’±#m÷HX2lŒ§4;céš‹>oÊî“Zj<6l[Fj¼§—,J<'}]Ç„Mm½‹:U°‘|7WàÛ;a™Ç´Ñ¤î0ú6)Ãî•PnÝ/Aî34t™p{039ª[{©„Ú3®%÷k–!öî¡lOÔ¶~À´ÆcG2³2žØû¸)†pHOg’“šqÝÞ9·Úpk)rëJÁ+@qù€„+r-Íë€&¡/ò.Npó®‚÷T´±æï TZi×L˜†-ÐKÛCÑáŒeºQ;cY†õ6ãºk¦­hoÆêñ…;*6˜$¸Q <Ü< êL³b¦eôdR »_?˜¤•ºX:®'tÛ乿r™ŽÀ©Œì¢IgÚ6ˆ"”ÒMK !¼76¬Ñ£IÝŠö¹¶i uHNÝ"”ú€mÒÏ6œLÒhœJÒ+·HH¥…Τî8á´Mà‘ËÍ%+ñÜɺ©I퉆É?gŠô†ÈF:PÕgYº›±IfåT]X¨”:[ÃS7;Ó©‘ŒKñº=Ë*ãþ9%@½-Îé,Pha» yO!®iš¥'½Üè;î¸Fª#(%J@W8ò˜@ÓtÀdò°—ƒ©”n r>ïÔmÇèõÓ©½hÎɳ3“&[·xÃb¾0'çá¶C;³ÃÍAY^N0kÂÐk<1w‡{Bó‹¬ Ǽ„­§Œ£iûp´:è+q‚O ¬ RYv¥ãè-ßjï¸ÀL}p0–wz{SQ¯sY©±Túˆ1Ž0kÐHèÄß™¿‹ÂJÜ µ/±ãF·É÷½&_ÓÚ9‚îÁjæ[.¶Vb…¨x­$…²º×Г^Rkx1 àCiøç4D\Ã&lѰ [œ×ð >˜;9ÉʘÉA¶Ù3£éˆ—‘M>Ãç ¾Ðð%ú5|…~4|o|«á"¾X U¿qÌ͹–]qIÃ~Ðð=~`Uü¨a3~Òð3~á•}T™p<8žV¯“ÆËFý•,)’E~Ãe Wp@ÁïþÀU ×eªëFqCƒŽ”aE,P;8ezõQÝéËÄã†ã$2Iù,î™ ØçW qÌ$ùPx'ÛâÒåˆpÒ’ž›»þf:º“ÂâRp «U…>2bXƒü|•Ä"ᤃ³'Ø–/4e&aUºiOœ^×Zª#ö·[s—Mû~°ŠÕq2Æ5zsEð¾R¯Y`UÊUÈyÅö¶ýÏrަŠ^„^¿.*AùØX¬ds}ó̯omAP%¦Zª¯Ý¦í¸ã—Í׳†tî2œ¸mޏ2Áš‚Ø $ˆ .aÚëK }®n»åäÒGcÓn¥Öç¿aù@}S7}Ð:‡˜jaà{*s«yKés:J¿¤'WfÕИŠ:µkh¶å4j#×!"c(Û}å׺BkeXK-†ƒ¾òChĽ4ÒUàϪ¼’USüY5ÁŸÝ’$¸=„ÈɤFZÈg‹|ײ˜’¥É“ʳ¨2~BŽ˜¯¬€O•|eùø ~ö}‡<@+žQdÑâ,–LöŠSĨÇñ„ôå.ìö¡6“×d*Ñlâ@/ €{~BÎåàªÉî½>Ü>îo’ápwáNÊ©eÛ[³XÞ¹ŠP[+¸'ïÊâîgæŽdš#´¹„jJ35†þj½LXs¨v0Û:ºëëòZEÈ;À+t™^%-^#©SäÛÓã ÉŸ%™7Iú,yô-©y„Œä‹›Ó¼ ORÜé§ôã ^&­âÄãšDZyçäüì)Þ2¹8#ˆóE|Ípì½(\ëd¸ ÷uI¸Jþ"õᚤ •”1´‘¯Û9j¢ j©” ÆPKJåJŽó£PKë‹MR org/junit/runner/OrderWith.class•’[KÃ@…Ïj5¶Ök½_PDKE0ø¬"-¼QkE|Ú¦CÜ’nd»)ô¯ùàðG‰“x©ÐŠú2³óÍÉál^^Ÿž`ÝÁ¢ƒ%Ë#D$+ìž5eGºÔ¾{ÈvûP }­|-mdÈÁª€S’ž MW [ÖšL‚Q[ Ô¿}´wßmFZY×D1VQ ­ µ{id”ö·?Dùƒ™ë02•TÀž&äVÙ‡ýX\`¹i«ZTSmUèDëÐ&blaó›ù5p+dIÇ‹çA®Â@y]ÊÍEµ|^X¼R•Æ'ËäÖày1 kV»ÄPªzwUüÑaY?p–‰\/3¾ÕœŒ[{¯(N‚¡þ`¿‚ª}.1·ò3&0ÝórYo’g6Úë…ì`M`ÿ—Ê¡ÿm!/ 0ÄÏ0ÿ¢"Å¡a„»Qî†áÓñ¤Êb‚ßžNò4E˜Â4fâò‚0‹æ˜O<, ÍM†+M¿PKº¢~PKë‹MR)org/junit/runner/OrderWithValidator.classSMoÓ@}Û¤qkÜR’ Ô¥)MZ¨‚Sªª(¢'C©RqtìU²‘cWö:”U.´‰#~bÖI“T©D…³3ã÷ÞŒfvÿùþÀ+X:t<Ò°¦ã1žhx:‡uY˜:6ðL™M e [ ¹}yÀ©T› Ùzèq†%[ücÒkñèÄiù”ÉÛ¡ëøM'*&³²#b†-;ŒÚV7!!+J‚€GÖqäñèTÈNÓñ…çÈ0ª1ûƒ€¿ ‚PÒéÕ}'&·•)…ØêQ'¾uÂc™¢jU»ëô+‘·lKœ—×6ï AŒ†hŽL"êÞþŸªûƒØw‚¶õþÜågR„A퀤õF˜D.?j2¥éì)¢{0VÇ…Äù.;¡—24<7° ÃÊ-u^ÞÄ›®£fi¶¸é†½mÍ3?SUópÔ€*YÕ°c`/ ¼Ä ë cØ£ú×Yk¸;êf¹ñÏA2,´¹“ÞT&FycØiÆA'JÒ˜ “´†ŒDЮ©›[ï©ú>w^• ásj} åIþq«KÀ[¯ïÉ/J¾2 G6OoL}3`j©d(²èdtÎî\‚}M/’Í¥É,‘5,ã>$Où™”|Š yÀÚ.e¾!ó Ë?ý”Ÿ½Dî ÚÅæ.F’‹L¨ç\B9•.èCiå=@JSV‰¼ÕÔ{øPKòîF×+PKë‹MR org/junit/runner/Request$1.class}QMO1}………u#+~ñå`âJ¢'¢‰ z@ý@%Ë.î¿K‰€?Ê8]×Ä—6íL_g^_g>>ßÞtqPD{4ìë¨è¨2+î4ýÈu…ÏPí{þÔžG® íoÌÄæŒ!. ¾`h´R£ÚC­çMC©/]q-F¿ç#‡rßsgÈ}©Î ¨…30€Á¼V=‡ ¤ñÏ#â!AØì’šâT„ƒDu½Õ^£Û¸ó",®¤zÎL8Žæ|ÅIä¥;v¼@ºÓ쉉ê&rÈ›ÐÑ`¨¥‹`¨¤]R±~*zº¦X©?$ÕÙV{ˆcê–Fc–¥4‘—¡¥£@å*’wBg…ðÎ+2OqŒA{žb€6h7cß [Rl°°•0ØdÕ]®ó öø'yù+9—$gQŽ£¶±CV£¹‹Í˜œ4CÂPK#Á[oPnPKë‹MRorg/junit/runner/Request.classXÙ{Uÿ]šf’!µPÚ²VÓt eSi-Ò-¤‹M ܦ“¡2É”Y@ꮸà.ê«øBûÉ÷ùìçåç¹w&Í2Ó¤¥3sÏ=çwösoúïý `¿Éè‚"cªŒCÈó‡&ᆌf,òÇ’]FŒó,ã&ß6$$e´À”±‚[œhñ¥-Á‘ÑWÂmí¸#ã=ÜåÛ«Þ—±HøPÆ|$ác Ÿ0€!1Q,jÖ¨¡Ø¶f3D‡ô¢î 34%»s ‘Q3¯1´fô¢6å4kNY0ˆÒ–1UÅÈ)–Î×>1â,é„q cZ‹ée—€Ò–ËáÓ³Ú-W³ARPМ%3Ïp>™YVn+iC).¦…þÁ BÖ±ôââ`w=¨fÕPVWv€dOÍ”RÆ€žBi¶jé+Žn‰¡³ÚÅ»+%7Ûkõ ¥†‰?žÕ‹ŠãZÄ2pŽólÓ¿¨"$ú‚¡ª+x"T{]‘½*g»ªSÐ\'ëêŽ6éçIRKµ1‘ "Œš…×ѬÁëÛ3QZpu#¯Y Clz‘ ŠŠ‘öwíôÃÓn(®á̘¶­/è†îèš=âíó"°¹± ûC´‰ñ0Úï ìÛé·‘ž ’®úªÂ?nY&—‰©¾g ë¸MÅôœ¡#@ôj$³­6ÌZr›a 4T²Sã!™ÕVLË «ìʲž[²Ì;¼KtîM¯°›Uŵ)9¡ ãÚh‹ú¢…áLHüý2© _ÔœYã`2ŒµTkò Ý dòNÁ p”¢¾â¢ØÒsã=D†ã[c8¢¶r¶ÕU×–×lÝÒòÔ 6%ßó餟×Ñ Q»Š¥8fduƒ‘ÖP†³¡Cõám5nSCÉú97­|)‘c9ÍyNô˜é³1l‚—5]KÕ(½Ô* ­Ÿ;œÀa‘ðiŸáóNâTÓÈzÈLµú„—¯êR{Ƚ„.Aò5Nß¿éÑGA6ëäsÁÖ(•—ÿÒ῵³¯4˜SÉÐs#$VI—®ÐbÔä—»Ö¼×eë»ÂŽ„Š;B÷VMR}¨Î•™ÛtÀlñ°!”c[á¤I]PuÉ» VÕÏÅíŸ0áGÕ©z39q/xÒ ”u.r„~uÿµÐ/!¥ôBä!‘šŒL ö(ºÔaV)aK+zÐKðQÛGÜý 9WšÞ'„QÄA3ßWå0P×`r4 8vÑÔ°ÇaaŸã3Ô9lÔfwLæ-šaZ%gN3×?wT£‘µeXz’’0ŒeäþALu7LSø~z9O;\<âêW”âv`Ù9Óu̶ç 'ÈÛ²Ì\Au×iÒ!Hr«¤ÃTˆ—·æ¦eÛòM et{æŽGKp_ÜhfCæÓS½"U5åÊ„ÑhœÆjc€º"Q¥ÿ—[Ù DS=FóÇÓ#BÒHTÙ1=Ñ"˜Êº4ŽR‘~Ï“¾.{'hHm¡A› #u0.:˜¸=ˆ5IZ€¯ÉãÌà[oVÍ¥úñRHSèÔÑê ˜#ÏÑ/õóZ#K*åÝhzñG³úq|(+Þ‡d•Á|ȽV=Ñåæ $þCþ‘üxˆ<Ñ'O ‹…GÈ_%|r˜ðŸHøÏÇþ gøOãþ…¸Á­t'A0ßgŒ¨ Še€ ?|Ý-ŒõybôÏkZ­Çð2^Q KÊóU,‡¾W©Ÿ¡ßyZKÒß«ó´z™z$DZBWâÊÜÄ¿PKYÀ8¹Æ PKë‹MR,org/junit/runner/Result$SerializedForm.class¥WéwUÿM¶IÒ¡`€bK•¥´i!²Q ¦ŠŠuŸ&“05©³Å}Å]Qqßñ£ž£çØÁ£¸ž#îôÏñxßËJIË€=§÷Ýûîö{÷Ý÷Þäü¿g¾°§XŠ;¹“‘»¹›™‘‘ –#D #YFr"±Q ¢£A܃<ǂР3nÜp×ã^†=~¬òcµÓµlÚò£7‡ƒÀFŽ2q"ˆc¸OÄýAÊû€ˆE<$`ž©ªœR SÕµ‰„sbºfZ²f Éy[ñ¢ø'ðecº­Yº“£òa9b[j>’Öµ´mŠfEdKSÓ‘í|Hh–’SŒ>R6‘ÓtC)97ɦi[”2.«y»¢dK²IÐj2$UÓ¢0”šÓd‹ô6OSoMêF.2jkª1lMSŒˆ¦[jVMË,O¤¸oÅñg÷ÙÚ~uŒÂ³)K6¬¢àÛª’û6­GÛ§˜vÞêëà‰é2Ÿ›T5e=6¢ûå‘<Í„’zšª)SMI.Mz¬C*­§1ÅK­S2qÝ£¢$XÜXžŠÁÖ;cÊö  ¿Ïà Í3Âñ0­s—bÅU%Ÿ°²³X/U ŽŒ*i+¡ÛVÊ2y¬½lÆçË2–µ;ñ  öM+|/MÐ&™e¸–LÏ:h[• <›@‰Zg3ñ(-d¯]^ÈŠYŒÛËf«!£ÔéŸeù}]Î+¿x–0"£jÈé´bšíÑhTÀÇ{ÚuYÇÉu4ZÍ´&Z#¬­z™°åŠ0”\9Ò:©Ûy¤ªëzŽ(¥ÛFZ‰«ì<4V³lzÑ!a-#«‘° Ýz 3²‹xB“8.á)FžÆqó«H·†<ÁàJxÏ2çDšh£o°å '"Z°į¤/,:b7ñ!v òqUi¤ ’ì¢Ün Étkòù^>I·ë‰n é$D%Õ†PKë‹MRorg/junit/runner/Result.class¥XùWWþ^&„,Zm\#Õ@ ¸QÅÚR ¢XZª]ÆdÀ±É Å¥û¾Û}µû¾/¶<åœöÇžÓ?ª§÷¾™$CH8©å‡·ÞïÞïÝwïþþç÷?tbº-°¹q¸q¹9ÃÍYnÎÅЊóÜC”ûbˆqÿ` Îǰqó07pó( <Æ£ÇYä =Éà§xãi^{&‚g£x.†8ž‘"x‘Å.pó7/³éW"x•·_‹àõÖãÞÄ[ܼÍÛïDðn#xOJ¿ahVoVµmÍhÖ,]Íê÷k™>ÓÊ DuÛÑHD`±-÷F5ËÖMc¤Ÿ€hè5 ÛQ gTͺZ-¼?!°Ì“?Âò¬ÃéÓµl†Œ¬:>xZ=£¦t35tò´–v†KSsr»[ 6mº†#ÐîI¹ŽžM¥M#íZ)I©Ž™ÓÓ©ÙõŽ6¡Y„ª×' ÓÒz=ì2:››tˆhŸªgÝÂFtÜ›Úõ÷š“燌Û,ÝÑz,K=Ï ýuÃd@u*p¬zäžAÓšHv ÝIY.û:e˜Ž>®§U&—òÙuï%8¦çÈ@²Š£šÆó"ß[Žk´Kn/9ßúQÍv³Îú¹÷LzíÑIj¯@M²uT ÜkfHcÓ nh‡ÝÜIÍ:¦žÌÒJ󠙦 P Ns1ìœÒÉ£ñJæH{Õ\Ø|ý„æu ÿÒˆR?q¡µ¹—ó¤¼Ã“Ѐì+\qs²5àIÿ&»ç-þ—Kj$ýÁP‹ÓBO…hk8«ÚÃn:­Ùö¸›•ï Žg9D¼ÐX›,Ɇ!×™týœÎœ3 ‘'öŸKk’€Áû4§õLÞšR ýÆ\+ØàbÌêè¶ÌìòôÒ¼³ª1áCØ3i’r´bÁØLr ;–.//·P¥§Öïìèè­/Ý­ÕgGè\GQoWG`r=OúþŸ‘bõÉkÝueZ+Ôœz_kg«-Ì:yÝ“Îú6]+­õ霊õž¥-lGÁn\¯`7ÝØ£ ‹G7â&=ÜìÃ~ÖªÏYI¶{못$â#só 7Ÿâ3fö¹‚/ð%¾Rð5¾Á!ßró Žl,†àˆa»““¦åh™¡IÍ’±UHÞK”Œ‰b…LŒ[f.¡&Îxß³„9ž!‡&œSª“Șšmlt¾â¸DNsN™æô‚Ã8D‡¬®¦1ä{?`LÁøIÁÍèX^ÌÒ•tçS†å~Žà’‚_ð«‚ß0¥`vÒ—º4;)góž'æîx%Kòþ¡€3EÝòÕpØtú¨Øe"ùdQ;R}Ý¿¢Œë &õÖàdOv_‘y?ÿâÁïp¯™Í’+鄲fæ­lg+ÿáãFߨpr ¨ak¨¡¯íØ$(pu2P_©ëT˱jÂ2ÊO¼-*-0Û¿à úGBWe•tJnñr/>@ôôÈšæ½î¤À–à¹åfþVÊùñÃ_{ÿU¹&ٺлëèñÛJ/Þ6Ôa:è /°•^ª!l£9å ›¹BÊ~—ßïö{*Ÿ$ƒ”ßKs*¢r½Gö!Nhê—’ Ujûhv54´Í Ò6‹èØ ê¦.CÅ¡ aŒ†õS¨¡¡BÆ)Ô‡‹.IC¨m¡ßÀF„‘DjjÚéP›ˆèf2¾·„â™G?$–ÊŠOí"ji Hjí—Ñȼ¨obRÔ/Î3¢ñU3hγ¢é’,Í3£éÕr:]±ë$[É)Û° Û‰ßrçNbÓ%Ù-óøìxÄN¤çqÈç¹UÎhÛoOcÙ÷+‹äú sF}M‚Ks|Í4–—â÷•ÅáH*àk§qÍ%øƒeñ·â(I1>åÛ¯eû?—€Àµ>Ø‹°aZ;Vö¡2N+Kb¤€?èÇaœðâ/4Ì">Ö¼b+ÿä…9 IH#‚ ®ÂD@q¼ x·ùŠ»|b mÓXu‘ðW×”²3J ¡x;±ö\4B&ÙhÓ,VQ8®9´©}k/•p²(mm;R]ƒb§ wà8™¨#£E!œ Õ0­ÜIã»p·o¬‡zŽº:ŽñÄÖÍÄäÆ9þ½Ϻ‚‰:2q)ÉÀ7D3cä<Èì^Ðb¦{a¬tâæ†à܇qˆki–-¦;u'þ›ïÂFÞE e‡.ªØ&Ôט TL‹7õÕØ»MDÀúÍ5Féì»NZ'ü9ðÛóçXŒ¼ Çg#1æ:Ÿ >dàpÜHŠ59º)q“»ÉxH°‚-®“ñ²;[ˆå;sdæÈ¾ÿÓk/éåS=>ï$¬Ý?PKBƒä‚L<PKW@uWorg/junit/runner/manipulation/PKPKë‹MR2org/junit/runner/manipulation/Alphanumeric$1.class•”[oAÇÿ”m×¥Ò õV«­Õ.Y𕦦¡Q¬4}¶²Ì’½ýN¾ø‚‰Æg?”ñÌB ‚}˜™³çò;{ΜÝï?¾|Ð@Ý„}˜xˆCLdñØÀ‘Û@‰!{,•ŒNÒvé’!Óò¯ÃõŽTâ<õDpÁ{i¶;¾Ë½KHý~7 Œ¤Q¡³ Vr0¬† Û—ª3÷±Ýhwzcþ‘ûŠë¡šDRɣħSõ™a³½`=ŒEtmKJÁHªÐvà‚™¡vô).W\Á>U#5“‘¡Ÿ¯ ÝN>7šÅ5š¨´ò"j§&Awªu¦~jË é@™˜zð^$#ÖQB™ àJí$"NhŠ­|Cdhæqdx~¹[ߜټ'bÂ¥ž÷ÏP¤7k¿’[ezn’|:™Õ<úö„ª´—r+´×g¨á ì+½Šµ ü’΂Åx_–[ycfÍVº†u—°ëYŒ'b£ðu)Ƚ…ôÅyú ¢UpÐÎyï-dgóìŒ47iß"Ù£ó­Û¸³\ËãeÿSË]"H<¶Ýí>v\\ÏQùY›ýªPKÃ>ð_ö8PKë‹MR,org/junit/runner/manipulation/Filter$2.classT[OAþ†–.lW¨PÀ "HÁÒå¦rW®Š–’!QŸ†v¤C–]Ü ‘?bÂ/ð…M/‰Ægÿ†ÿC=³­Z.A²Ù3çÌ|{Îw.³ß~þ `«µ¨GRG ½:j‘R"­DŸŽ~ D‘Á C†u‚ŽÔ`TÃ-…¸­ãÆ4Œk˜`hÞãf¢ \éˆÂ‚póŽÜõ¤m1´gmg+³í[ÒË8¾e 'Sq>É™’t6ÃЙ<Ú»Áž· ‚¡>+-‘ów6…³Î7MÚiÈÚynnpG*»¼öŠÒeƒ±¬ÜÍ›Üuíœi‡[r×7¹ •Y’¦'œÄ0Ñ«u‹¶oûÖ>¥˜‚ç‹ U2ÁÏnó=žñ=if–É!÷l‡\F •ª)Y›Ä7žì-}ark+³æ9ÒÚ"¼¾fûN^)ÂDKÜŽ ±håMÛ%ÜŠðŠvÁÀ$¦ \FƒFL˜Á]÷0k`ó ,bIÃ}ÔÉ22´—”6\£2”üwtSõbÿ8®nn‹¼gàº4d ¬ ÇÐs±â2$.¤ÙÚá^¾X"pl¶–þ× µ™*JªáŠHw]¸^`R'#â…ÏMÊ·)™=™qÐêè–ðæ‹Ò,8‚È´üi^ÐîYÇáûYézä½ñŒmê»,O%xìÓŠIi8½Ë ¹›/ÉEØ –ãcS&ÈPGô¤»kòýßÇúVš-Êñ¹íPuÆ“§'ïÙiŸFaþ 1ú›°XL i!z§{×DÚ(ªèôTú=XêªÞ’U…f’€<´4]Ç\UÞÔÜ•=¼"t˜Ö‰ôB0RïÀH ’¨>Bd¥ï4†´’RÃð µ¹TÿôT‡_ÿú:ü±•b#ЈW cHcœ¬ Ò¦)Š”&í”Iˆ¸tà:½ŠÿD™™Ò:é”Ñs]eŽ3¨øÇ¢á/0ž„É#\Zûˆº7'ò«È7^öB"@u£‡Ö0q»I\U=è–Qk~PKt&Jñø¶PKë‹MR,org/junit/runner/manipulation/Filter$3.class­SËnÓP=7vG]š†Ð (%S’´©òXuA©R¨E•`çÄ&¹•{ù‘á Ø°‰¦H|…˜‰-Z„¼`ᙹã3gFsÏýñóëwwñ¨ ·Ø¬±¹]ÁšlZE´+0ÒÃ:G%tØoaqG r>9CÒ«;m«¶Þ&ðØ¿Jyɨ*9Ê* ã­¡[†½«oø®°w‰1f´ZÖ{†l¾g÷EµÁM¿,Û3ëªÉnÚfÐv;ÖCY—X™ùìɃ:=ɘ°iÓ#Z†µ3ŒÕÄнŽ¯c“‰ØŽp=RH,šV÷’hNÛ59aÉBª“2-­¦1ˆ ]»0sýˆ!¶i”±˜F?ÂJÌK‰Çaѳ a€ 'Ï•aáüÌ5g“{¾·Î›†°Î1Ä…¤ëßéÊÂ2%µCbÿ'ª°¥ŒÑo* ùCº"ŠV*­éVÐx‘¾tšé…XñlŸ Ñ‚ƒÈÒ˜î0¤'q —»Éóˆ{ÉCD¶‰ ºw‚`¦‡ I\†®óuŒ•ÝÀ(eIB“æ(ÍÙÒO( ì—~@Y*~E,‚ãꆩàYyÞ Å«Øh‡ [­\á&‰ôrÄp‹¢ E&é½|× 'N™™+?B+}Fü5e¯¸zu»8U:@âØ]†A苤š=â¹#ñ ´¢ûI§P¤1BE”Žz?NßòI"¹}í âûACŽ˜%ÈT {‡„@ Œ’ëÎÓINPcƒùPK Ô[¹Ò°PKë‹MR.org/junit/runner/manipulation/Filterable.classŽA Â0EÿTmµ zŒvcܹ֕(¨¸OË()5•4ÏæÂx(1Qp) óÿðþ0çí`‚A„^„˜TiÙÒdY™£(­¬0ÖlÄIjunJiU¥Åâ ÎÒ=!ž_s>ûm¡ïü¶jLÎŽ`Âðʬäq!/’üsØó„‘OˆRê£Xgç–0ý^U;®m½á“TúûWH ðEmB mç;ÎùºŽœÐ}PKÏÁl–¯PKë‹MR<org/junit/runner/manipulation/InvalidOrderingException.class‘ÉJA†ÿ2ËhŒ&ã¾Þ4Šƒ"D¼¸@$èAͽMš¤Ã¤GzfÔ×òðàøPbõdˆârqUÕÕ}õ7óöþò `k9d°hÃ’ ËV¬Š4Jx iåëÛÚ).'¾B¡Ã†ð"™Áà#BöHiR›[ BúÄoIB¡®´¼ŒzwÒ܈;;Óu¿ÉXÁp>'ÍtØQá°î›¶ÛäšHkiÜžÐê>òDÈ&Üš~žj]™{Óí³§¦¼·UBy³ÞÂõ„n»×¡½®ZNOhÇ‹•_ƾtn:Æ´cV¦)¢€Iå_„ܵ™¦Rßa%š‰aëÙæ$0[ÍbŽÕ„ùxzáPK*Ò­çPKë‹MR:org/junit/runner/manipulation/NoTestsRemainException.class½NÃ0…Ïmó!¥¥…&6`ÀBªX@,$PÔJv7XÅUjWN‚x-&$€‡Bܤˆ‰ Ç>GGßµîç×û€ìDh£bb›Ð+”Ó2O•+´57—º%tFÖ¥4e*óJùX"çÚèò‚Ð>8L ÞÈ>*B7ÑF«ÅT¹‰œæœô›1V2œýOè•Oº œ&ÖÍļbp•1ʉ…4zYå²äOˆ±¨¢,îÔBjsõ’©eŸ¢{[¹L]ë¶÷wíx.ŸeŒuD„áæ5BäÒÌÄoŠ}´xo¼ìƒÏwÀ®…_TcÝàD4ðÞ@¯M%f šp ÖxUÀ&º °×´¶¾PKÑo÷ТPKë‹MR-org/junit/runner/manipulation/Orderable.classM Â0…ßhm´þà)ü[ܸq­ .÷iJJL$¶âÙ\x%¦\Š‹aæ ß›aæùº?,0`ˆº =B˺T:Âl²³.ãyiTÁ]iŒtü$Œ:—Zʾ¯8éVÓ#!Zßy®Ú†¾×[ºDn”–„AMŠXËy.®‚0þcp…†•ka2¾s™„ÑoóÁºâã]þ·æ*´JëeÊdßB¡á£é_C!@˫ЫÀgæ£íë:oPKþ_;w¿?PKë‹MR+org/junit/runner/manipulation/Orderer.classVkSU~NHØ\–KÓ€Æ -%7ØVmµ Å" ¤5/3Kö³Ù{a¬ÿÄ~ñ/Ô-ÅÎTýêr|ÏæFëN†³gÏû<ïý=ËßÿüþÀ5|“ÄEÜH ÷“ø7“¸…²\–ÜNb+)|ˆ; Vãø(‰Öäûz w±ÇF+¸—Â$* >Qð)CÜv î«É«ÚNS;ð-áiŽoYÜÑZº%Ú¾©{¶´ZYf]„Za(†&å·¢k¶Á&ªÂâ[~k;õ=“NÒU»¡›Ûº#ä{÷0êí —a!ŒîWqƒ›¼©{ÄaQL¹ê~¨k¾'LmÍ6MÞ¤rþÄqU¸±Uƒ» G´¥œÌNŸOdP„Uë(Ÿ<«$Mn~ïóõ!U'pu.a)‡»¾é­ºô*M Eÿ¨ÝËÀs}X>›öÊ+¤ÿê)ÏBP´a'C0’whð^Œ‰ºhZºç;äöþùIÿ_•§‹‡˜Þn›¦º&MÝjjµ½²t\"èƒN6óaIBeƒ{ºÓ”µIŸÕK‘×mßið !ÕªÝ\’@Ó¨ªÈ`JÁ¦Š-ÔÜWñ—T|†:Ã…Aˆ÷twŸ2-)|®b_PÍ_îdÅ:ÔMaôƪ_†LïlV7 nÌ ·\©üK;ØUðC¶1ü¶)4+] ua_æð–}8,„L›Š|Í0j\izN'–a$'k6u^óH}«eâ»`J†¥C>4ÂWÂÝYTè }*×ÇçûøB/qEBF • Ë2׋´_""AE¾¥§Ì{¦ø&ÂDñOLn– ǸÁ 6éÀÞM(ô‚Š2UévÁ,qU:½JÖd¥2ýX2”•wÉÒÀ:£x¥¾ëÿPKÕñ›ÊÄ…PKë‹MR.org/junit/runner/manipulation/Ordering$1.classTÛnÓ@=›„:1î5$®Ò’u ˆ—T• €)‰¢Jð¶·ÉVŽ­íJù'@ÄðQˆY“Ð[¶wçìœ9³;ã?¿~°‡, hÂÀ†MIÜ3QBÙ@Å@•Á<ánQqÏñû kíc~Âí(”®ý:¶5v¤'Ã]†\é<\>`H5}G0,·¥'^FýC¡ÞðCWh:¿ÃÝ®¤žŒ©°'0X-Ϫéò d©´}Õµ# f«HCvŸ{r¹<”¾g¿RŽPÒë·ITdK‡‡blmM_)Ñ ’¥ò;JÌ×H+}â.MJoú®K ‰³Qž0·e³åˆ £ä@ã䙟íÈzÑÑ‘+†•ó,ù¿SÆé?žÉ·s>÷gg2»ÄXŸ 2‡Kf_v=FŠâöfïÀY¦whް澩Žx!u¾‹ãÚÒΧC†Y•>gy6⤶(ü«æËÍB¨ÚŒ‘ †ÒtQÍj>Ô©» jt¶²¢÷FIzL\ÔýE£GHÐM–Jõ3Xå‰4K`‘Þ ´Xǽ­xlbkÐW—F 5új,‘|?åywÂ31òL!‡<Í´gDZ´šì7$ßVO‘Ú«U>}Á…Ú‡X¨¦ZŠ—”Hz«¨Ä”ë¿Ý&Ä\Æ “!\%úkdÍljiìúìÙnÆrnÇz<º;±0ƒ¯ÆIÒ?-æMÿPK¡š…X&PKë‹MR4org/junit/runner/manipulation/Ordering$Context.class•R]KA=w“ìšu­šÒª­ÚD¥Ä\óÜâKD}¨ø>I†8a•Énñ_ô­ÐöOThúÐÐUzg³*(h|¹s?Î9÷ìeÿþûý@ >Êx]å°ì£‚o<Ô Ó}9êužªDV;‰DÃL«42™ÖÒD{·ów„ê@¦ÇÂp$Ô››ÁËí¤/ ³¥åavÖ•æXtcîÔ:IOÄ'Â([ÍrzªF¯èT^ð†àÀj¶c1IìÜ_w&´:Ïba÷EG¦/ÒƒB€ ¸ï£w æÃ^7O<4 |x9©‰kœ‹Z„pr"Áÿ˜d¦'÷•½ËÌõh{(>‰ó¨páÙlÍÃ:aûi‡!ÌY¥(zu‡²Ç­æ¤ö¥¦ý´·“ÐàŸ®{ÚšuÍY‰ó)T9ú\EüòåQ ÂùÁ‰ƒiŽnÞü‚€c0`sùœ/P÷¹røõÃ+”­_p.ožñ"à+¯ÿÆË¾çJ/ÇèBÉfÖq1…æc,Ó ·®@—w}ÎuêcÄŽËÊ^>w±€ÅÜÕRÎ|…Y~kœ•±Êžªxž3¦þPKý^û¶œPKë‹MR4org/junit/runner/manipulation/Ordering$Factory.classPÁjÂ@}cc¶j´â7Hi/Y<{ ‚àÁ[oë:„ énÙlJûk=ôü¨Ò¨çÌaæ ÷†7翟_+Ì&SBª=«À3‚(œ üÙÖZöE­š†ÂÛËÎùRV­5Aú¶ã仲棭U0Îʽ?±7¶\^Ö¯=kÂøàZ¯ycj&LoD^©O%ðDÈ{žÞ(œÿŽ1îhÞ™ÈZÙRîëÐßíþŠç~‚”@ +J ðxé#¤q."J0Æ0î16²tôPK '8ÌPKë‹MR,org/junit/runner/manipulation/Ordering.class­WÛSWÿmlXD¼ «H `D­­B©Å¢\,AÚh«]’ YºìÆÍk¯ön[{¯½w¦3}éƒ}-ÓjŸ:Ó?ªÓïœMÂ’¤²çäÛïòû®çì?ÿþþ'€nü$A‚"bB‚1qT ^$|˜‘”àƒ&bJ‹ÐEL‹0D˜>¤$´á"{kIHÖP‡„ˆŒˆ P|˜eë%ö¸ÌsŒã “zɇ«"^–ЂWj ãU¦å5öx]Ä"®I؉7k°o‰x[€Ø¯ÄlÓº,@0 Õ ëJ:­¦éEØ4lõ’-6†G†#c£gÂc#£ŽŽÒ³dtèȘ€†Á)eF éŠ1ŠØ–fLö¨%á´­ö¸¢gTU½š¡Ù}*íã¼a3NÔ5ƒš¡g¦'TkL™ÐU¦ÌŒ)ú¸biì–赓 šÖdh*CŠBV†a M+†–Ê芭™FhÄŠ«YóR:™I$t5~”üê 83¶¦‡F#nN÷´—¯«Êâ"yGÝjTÇÕ9Á E®Pð8ö›9¦¦c––bVVƒ¢&ÆjeX®ls²Tr4f‡ÂK Ä/Pܶ»¸†ÍH&–Rí¤?~)¦:4ºxÜt9á”wCÀÚ"Ï(Ša˜¶b«ñ15mg[Vö˜Ê*‘«·=ez¿3[¡$Ü´¼<.§r%2ºr@zƒ«µÕGÖŽ:ý`j¤|\)>ÕmÒPìŒE ¯Õ˃xh%v©ÜËh¦åIÕ) aešÓZÜHí¥¦LeLWææh@\l}Q8;XüÅa&zi…J*¥Si6ºEF&¦¨œzØÜª6f§äÊr±²b+¹¸|Xfõ Ø4£èZœ)‘tØ´,zÉçåY*!nwÀV§ÓKþðA6uVìN¼—ȃZšiN–fí]9q}Eªî+@#fÆŠ©ý‹MmΓÝLŒöî2««›ñ¿C£Ä5½2º~ÚÔè<²òÍ$ Ù=£ü1>Žüªß n¦ã]Å3ª€‘N¡‚êñÞP_˜)×e|€ì^]ŸÐ¼¾Ï p`e•¯‘œf—àùÍãÞµ¦ý餙Ñãþ¤2£ú*3¡k1¿ëüðÏjvÒŸÎ " äó•=ô;[Ûe cDÆG¸!âcŸàSëJ6öÓÑŒ¦“VJd˜ãaAY*%Ãoæ0'ŒÏð9{|!ãKÜ`™ûJÆ! ѼÏf¸(gåf ëÓySÆ×øFÆ·ÌÄw¸! ­Ì¦T§j1+ßËø? ØUÀ¥Q³ìv2^0‚²ŠÑëØ¨tßöέ8-Kß¶®È@÷ CàW¸ùß¶ÌFn –šeµ/¢M§tÕåë%m}!f$Õ´B#ï` Ïïc>¯·Š¸jÄt• _)[¢=üÿka‰ßg›9à%L¹(cIËœåçKß©‡¬{”–{wsmUN? 8[öÙíˆÕœÎõ¬äÃ44º|9i‰äì‚e_ËàJÞùGÔöÌ®Ýë;¦o»ÝÚ¦+}K. h-w¯gJÓw¥ÀŒ±k>3k}ßvjÈNQéM»Ó5ý¾´–bƒêÇ ïX^KÚ=æ[^!‰ºMÞB1ž§´Eún›H& »k­÷÷v,ùÐÜqÈ2e¸-ÓÙ2¥ÍßcÒj{¬û5ß~ïÈ3žéT±¬äŒÙë9ûÓ Çìvj;»VËü)jÒǨ6Gr|Sv,Ÿó9†* †»A·b0‡5žì-5wQàÒÉqušÀ•mK6}kŠY|½fŽCÒÌ!³a{,Wo¿ÂòFÛ'ZHIs©¬¶@î8ÆRì¢1ÚiakŒ%OãS;½þ;Uá™éØmÓ·6¸´v·Óô®”D((–¾˜é«˜Nãü~ÚÎT½å P>9¥óŽØ—ÿï¡Õ6ݾlYwmîóLxm\c,ï ®coÑm3^ûëøßê(âSó¯ô¬JiîsYrSÅCŽ{$pá$q S˜çšK %çYÀ»:ò˜>uÉQaòq•¥«‰{^ 4ÎÝ`…w_áM'|Óq/À9Roº[q™þ9úcœƒ‚'I?£)Þ@²½Ms¶ª4§ÐüYÓ[¡·V>€(W~…òœ¾¸HãYz ‰«Hc—èk&ŒÆ{6ÏBôYšëô-…ˆï2Í®à}™í Y3_y‰Ä˜¬ü…ÄZµüIσø‹â$7Héa~‚ó¸pÏÒZ¬s¤‰Uä#yR8O‚[fÀuŸ¢™K/ÿ¥R}3 üqLZë.«?BÓQF%ðë¨ÒL!üqmP19ÀÍbb»r•ø©êO#u3¨fk4_âÈE9Ô°@iÊg× {6ª.û>Š|“-¬å —¨a~Õ _²'F³z0†»¡„Œ¹U>“ƒ•dËTÿt•žß ‚L ÉÎF²³´ó?‹Ïh¦ …e*c\6ŽÖ"³}}ûÙœý“¼¹b}†pä>ÇJð¾EÛÌÍC¿œ#õ/PK¬\±µ½L PKW@uWorg/junit/runner/notification/PKPKë‹MR+org/junit/runner/notification/Failure.classTYSAþ&!a! @.‰ áX@EDåˆ@J‡dƒa—ÚÝxý*­’`i•?ÀeÙ³Ù !¬hzzºûûzúØüúýý'€ilÅÐŽ©fÄ1­ÄL ð0‚G1„0#ˬÒGñ$†§˜S—ye^ˆá•xÁ‹^F°ÄÐn KòÒ¾°li¯×WØCë²iØ7œ}^*‹ª?Æ ­;oÉ3‡Âs¦UÔOʆtt«lÂÒëüóÄ´wl™ïÕyáaºr'ü×KÜ(ꮓ–…†$Ñ,2̦ofõÅî34-›ÁÏICl—O…µ§| ‰œ™§"9•JwÏØäK›aäz2Ãtä‘Ìs•MÏrY*[ê-…úÒãNca­Eáì ÛY¼ ,†ÎôhÝSwKE¢i£°+M¢¸´Q#L]¦î+ÌõMŒ:f5©ê9Ï«Ž¸ª<=Ï#Ë–°m^T—]³låEVª¶h^Á“*†>,k¸^ Ýè‰`EÃ*Rô‚ÆÂ–ʲDUk¸‡”†,^1æ†"XÓ0¡,%Ò`]Ã65ä°Éú¯æÓ]æÛ9<y‡Ú뚤©ïº+,?UÇL«Uè¿©¡Þ ¤}Vâ·ù)¡ÂüìL†‰ôõ™]£W-5¼Ãg —é¥áËà¥K·]]•]‡çß:ÕqŒ¦ý—Úo:/‡éR¸E’>ñv0ÜB½H ƒôNúfè¢ÍŽô„$Qòõ¡ŸäÝ(&Hg¤ðà™:p¨¦uóÁs¾àLíå›n%@òBg*ˆTM4WÜbÄH« ¥‘øyq²F<æÓ’ ´ohmÄg}[2þ7|[#~Ç?á§*ño|ñ“n”þPK˜)·%ó‘PKë‹MR:org/junit/runner/notification/RunListener$ThreadSafe.classMK1†ßôõkÕú ¤*Rðâ"xó$Z¡Pµ´« žÒí´fI³²›-ô¯yðø£Ä ˆõ° d2yŸ™¼ÌÇçÛ;€3ìzhxØò°-à’<èFihôsÓU™%Céi,gR`Ÿ¬šÒ£ÊÔPÓ¥1‰•V%&8ì:&ÐÒLù#×I”OÉX]ì3¡L'dY¯Î¤Îùë£b®­Éµ ç¯Äp%|굊Ù>±qwc²õÒK´Šæ zý‡»°sÛö°#pž¤“ βAšBÀ•j¬¢ïêÅtŽÃ—”äh ÇìÝÿÔ;®ðJË,#žQcáã~Sdš…Ö“8ù·–€@‰wn•Q᳄*–869÷8.³^{† øXAÝe„U¬a“E®Å:6Zµ/PKã#d„.!PKë‹MR/org/junit/runner/notification/RunListener.class”Án1†§Û,MM[Z(”–Bi“"±B”S "UŠ@jªrv6Nâ°ÝEö.â8såxNHx 1vÒ$„&»‘â±Çó3c[ûûÏÏ_£ZÀv\ìAfùÎøó]‘†wŒmäèÉ›_ÌTGã­žedç÷€}§IŽLPŽÆ8ø†"ÍJý ²WÉÒ Å"EÀS«Á¸8oƒŸ[áZs 4³2–h\¦¹Cv…þ×±š«M­áÆìfzeï2W¶žkf†ÝJ‡½Ï »Ó™a¸“û<¶‰­ Ø]‚±Ù°/3aô¹KoîkÆær¸g•÷I×û­æwþPKI¬? PKë‹MR1org/junit/runner/notification/RunNotifier$1.class•SÛnÓ@=›¦6qMj¥Pî¥…ÝÆô…@H¨ Éô¡©*$xÙ:›d+³F¾TðYH$ø> 1»i \[Þ™=stffýýÇ×o6Ðm`7õ²ìÀŠƒ[¸m£mãÃü!OÚ}‘Ç™|WÈT1,Ei6 J%‹0+•YølzþˆÁ*F2oßgþDª´s wJµm|‘é´Ç’€O¢Õ3äý[Lg¡¾™öI%¶Ë·û"Ûåû EZQódgRûÇÁºÏ÷…¦ÛLxž ЬWÕÞ ršæôC$óB˜¡[¡¬ôX¸àñ¨R'i ÎÖûX˜âs÷Èï¥e‹çRçý"²{À9µeKÅIšK5|)ŠQÚ·±ê¢ßEŽ ç\Ì!°±æb>É9CTG÷ø@œ8ÔýÓî‚V&\ ÃI Êì4íÌÄ®È Šö ž¢Ï°ò—™ü~ªÌmruÂÿUM/E³8¥ËôZôWÖ£>%pÌÁkñÆ,ŽÇ$ÚZÄ%"¾l(® «&û®›Ø ,¡EV‹b³?EïÖk?PK_Á¬²÷}PKë‹MR1org/junit/runner/notification/RunNotifier$2.class•T]OÔ@=³”Ö-•mÅ/TÐÙ¶êƒjL c²ò„÷¡;»R§¦D–‰hâƒ?Àe¼3 D¥MgæÞ9÷ä̽wúó×÷ž ×Ä4îëaÑ…%ðÐAÇÁ2ƒ{ÄÓN.Š*-nõ³|VJ–Q^)%òhÇl½`°ËDÇ áŸ ••r(c^ÊLE;•Ú6¶ÈuØKIÀW oV/÷OÝ}k#†V_*±]½?ù?HÉÓîg1O÷y.µ}â´´n0xo5ÓFÊ‹Bg½¾žÎS:ɬÙýÔ—E)ÌЫq¢SôX¸àqR+“0*ÐæÇX|Ð…ƒGdïfU‹-©çŸÙ;äGœÒ²©â4+¤½e’ ¬zè"ðЄëÁÁ3¬yXG@r.‘†gõÑ»|(N ÊþEsN«R®FÑä€ ÝÚìÄ0”¹ØEIÞ-j²"†…¿å\ïÔ©Ù¤ uÀÿ5D«¼¨‹tçlºƒ ß׉h¦*h}3ð¨+¯Òê9ÙS4ûAx ¬£„ß0õÙ gi´ ТÑ3kŸÞ9š-\ÃuBiž×4kæf|Aã+¬3×lŒHDbHæÇÀ½šÇ "¾i(éW@‚n›è;X0¾»¸‡6­Ú䛯ø±É»b5~PK?È ¬ôkPKë‹MR1org/junit/runner/notification/RunNotifier$3.class•SÛnÓ@=›º1qMk¥¥ÜK »AH<BB¥HH¦MÕ÷­³I¶26Z¯#Ê_!Qxàø(ĬÓ&P¸¶¼³3{æèÌìøû¯ßƒµ•õÉTìo„Úã EšQódŸ+iü“ eÄ3€Á}mè¶žç‚"›ÕEµQ9óåéQ$s-ÌЩPÖ)z,\ðxX©‹“4gû},Êâs÷Éïf…ŠÅ+iŠó~Ù9ä#NmÙNã$Ëe:x#ô0ëÙXwцï¢Ç… .æØØp± Ÿäœ£ «£»¼/Nêþïî¢Q&<„“Ú•Ù–úR‰=‘ën!µèj®´è1¬ýåVÎNP•›› ¤Iø¿®éXxúŒ&¬ÒŸX§?³æy¦ÿYº ¡o. çEÚ=!†¬çÇ`þÆ1j~ð3Kä<­uB#,Ðê–{ÞE²–p‰P†çYÃÜüO¨}†5%pʃ#ñ¡$YOHÌn—‰øJIÉp•]+³¯ãF»‰4iפØ,ÆO¢÷¬ÚOPK-Qór÷PKë‹MR1org/junit/runner/notification/RunNotifier$4.class•SÛnÓ@=›º6qMkRZî¥…ÝÆ !!¡R$¤´¤êûÖÙ$[™5ò¥‚/@‚¯A¢ ñÀðQˆÙM›@AàÚòîÌ왣33ëï?¾~pí:¦q]/Ë.l¬¸¸›šn1Ìð¤ÙyœÉ×…LÃR'ÍÑ~©de¥R"‹žMÎ1ØÅPæÍ» áŸH•²/c®¡ÑËRm_d:í±$à†Îê)òþ-¦µË`m¤=A…t¤Ûå«=‘íð½„"Nód—gRûGAK‹gƒ÷BÓm$<ÏEÖ«‹jÞ§rfÍéÛŽÌ A`†v…²ŽÑ#á‚ÇÃJ]§1¸›obaŠÏÜ!¿›–Y,žK]œÿ‹Èö>?àÔ–M'i.Õ`Kôç`ÕC ‡:\Îx˜Aè`ÍÃ:’sŠ60<¨Žîò¾8v¨û¿»óZm”p5ˆÆ2´*³3,ôe&vD^tKYP?”̇¢Ç°ò—±œ¼BUF7¾‘:áÿÂ&÷â\qR–é_´é߬ù¾ž@;CGè›G×ó,YÉŸ¢ÝÂC°`íµ ü‚©9K«MHàæhõŒíÓ;O»…óX ”æyJ»f®‡Á'Ô>Ú¸æà=‰ø`HGÀ#m-â_4” —HÐe“}WMì–Ð «A±iŒ›¢·­ÚOPKÊß=ûƒPKë‹MR1org/junit/runner/notification/RunNotifier$5.class•SÛnÓ@=›º6qLk¥PÐ6vÃ<BB¥HH¡¤êûÖÙ$[Ùë > >‰‚ÄÀG!f7mÂMàÚòÎÎ왣3³ãoß¿|p:fq]/Ë.l¬¸¸›Zn1Ìò¤ÕEœËWJf)ÃR7ˇÑA™JåešŠù£ŒwfaÁø°¥MgæÞ9÷ôÜ;w~ÿùöÀStê˜Æ==,¹°qßÅϤ¶O–΂ ÞÍ»‘ð<äY«®®õœòš1»»2/:ò;C„ +•sÆàn~ˆÅ{½‘;X&{7-³XlIœAdçs*Ë¦Š“4—jðVôç`ÅC‡:\®xh t°êa ɹDžUGïò¾83¨úÿšsZm”p5ˆÆ 2´+³3,öe&öD^¬çyydt—ˆC0éd.¶S•c·©˜,ò¼Gæ‹ÿÒ±D7Õ¦›[ó}}"Ít<ÚC_µëUZ½ {Šf?OÀ‚ÕÔ‚ð+¦>ä 6!˜¥Ñ3kŸÞ9š-\Ã<¡4Ï:Íš¹ŸQûëœÀ5?IÄ/C²0ž’èÕ®ñ¢¡d¸A‚nšè[¸m|wpMZ5É7Ñc“÷±Uû PKŽ«ú¡PKë‹MR1org/junit/runner/notification/RunNotifier$8.class•S]OÔ@=³”­Û­Ð,Šßº ÛÂV_ŒQcb’ÊÞ‡îìî:5Ó–èÏ2M|ðø`¢?Èx§ »~EK›Î{çÜ“sïÜ~þþñ€{è60›fYtPÇ’ƒ[¸m£mc™aöˆ'ížÈb-_å2U Qªáa¡dêB)¡Ãg“óG õ|(³ö]†àO¤JsÙ—17Ðp§PÛ¥/´I{, ø„!Z=CÞ¿Åtö¬´'¨H*±]¼<z$iEiÌ“}®¥ñO‚–ÏwËÐm$<ËEÖ«‹j? rfÊÓ7‘ÌrA`†n…²NÑ#á‚ÇÃJ]§18›¯cQŸÙ¸CþnZèX<—¦8ï'‘ÝC~Ä©-›*NÒLªÁ ‘ÓžUø.p\Ø8碉ÀÆš‹uø$ç m`¸_½ËûâÔ¡îÿêεaÂÕ ÈЩÌN…ö¥{"Ë·*բǰô— ù}xª\ÚxMÂÿ%M&¢™Oä`‘þ¿:ý5Ï3]ÈÒ˜}M¸4’çi÷ü)²žƒùkǨùÁL½-‘3´Ö |Á,­n¹÷è#ká.Êð<%k˜ÿµ÷°&Nyð•D|+IæGÀ³›Ç%"¾\R2\!AWËìk¸^Æn`-Úµ(6ÑS§èŠUûPKOÓrÑöwPKë‹MR1org/junit/runner/notification/RunNotifier$9.class•SÛnÓ@=›º6qMk¥Pî¥…ÝÆð‚ÄEH¨´’é­ú¾u6ÉVf|©à³(H<ð||bvÓ&å"pmyggöÌÑ™Ùñ—Ÿ>¸‡nÓ¸®—%6–]ÜÀMm·æxÚî‰"ÉåëRfŠa1ÎòA´_)YFy¥”È£g“óG v9”Eû.Cø'Re¥ìË„khô²R[ƹN{, ø„!^9EÞ¿Åtv¬õ¬'¨X*±U½ÚùßK)ÒŠ³„§»<—Ú? ZZ<¼çšn=åE!(²V_Tû•3kN߯²(º5Ê:F„ ž kuqœÆàn¼I„)¾pp‡üí¬Ê±)uqþ ‘Ý}~À©-*I³BªÁ Q³žƒšp=88ãa¡ƒUkHÎ)ÚÀp¿>z›÷űCÝÿÕ×j£”«A4.¡S›jïË\숢ܤ1+†¢Ç°ü—ù}zêÜÚxuÂÿ5MFÂ+OèÁý6ý‘ ß×}ÈÒ%è}3ðh(ÏÒî!ùSdý < Vјzg³´Ú„¾bŽVÏì}zçÉZ8‡ó„Ò9n1_J¼Ve¶Ÿ¶Ñ3!dFà Ä*·2« óXøQ¡jÓ¯§*¶aðY£ C< žép¯&l!ƒsÃòNèìÃ%—×Ñ–¡}nU©Iœ»` k OÙ~i9)¶襟ÚˆÄhíL­\«;†¹f‰ D;j7%(ª(ë¨àŽŽ8Æt¼…+BJêÁ›*¶uÜÅ— ƒgÑ,;—Üľ÷𕊯uÜÇñ C²g²:>ÁŒŽÝÖçëÈ0ÖSÚT:ö` Jû:pÈ0óÿúŸRtFds÷È4¼^":s׸a˜.i ‹šÝS-r^Cwßµ~0eÿSÿ)‰‚¨vÈjv(ݼDòÕ;ЭeP¹[2{ïáÙr1ÔéÈAøùÞÝ·D·MøÆ»â\1]ñšuŒTVË•‡«ùõåR¡¼Ápµ;1tÜÌ+R×¹£ƒFåЩ}/&L£ù›¸. PzYÖ=Û”kôΦמↀá²\Å¢QqwHVèÇÛd¹JÒ,üd´T:ý ì¾'rÿ;B'- #‹k$éä#´ïb(c´C Ü§?ý÷§ÒOáOBIM†? ÏR±À¯¸4£]îþ„ËóÁɈîüŒ7bÁS 4õÿüIPþ‰Ég|BQÄ&Ñk÷!Ñò”™ Ò·Ck´c4Ú'vÞÄnÑ(ÒÕ/á˜4"ëÀy¤F<Æ1I kœ4…Œ¬Ô£fz4òœ¦šCx@'ŠDÅq‘ä—)élØbmÛÇð+Š˜aä÷©¬=½ÄÉ:+:‡÷%2Ý(úžyOñý PKøÒB±3 PKë‹MR/org/junit/runner/notification/RunNotifier.class¥WYtUþ&I;í4´¥”heišRÒBÙ, P«± a+(:$Óv0LêÌî+¸à. .à **¨¤bⓞãƒO>ûä«>éÑ'ÿ½™LÒiÚ&Òsz·¹ÿ÷ýÿý—{óÓ¿ß| _Jè½¥Ôè–ÁaJðÀ`+q‡KpD‚ˆ£l[¢ Çp_ îgýlûƒ"–ð(ñ¸„éxBÄ“ªqœ5'D<%¡O³†&ÏH¨g_êÙäY lÒÈ&'%ÌeÔÏIhf‹Ílñy /àEFõ’ˆ—%´àÖЗW%øqŠ54yMB;“ig“×%t°IN0ÁÓ"ΈxCÄ›¼!y@鋙ꀪè4íÕ4Eï‰Ê†¡  4ª¦B‹4­ ”˸©FAZî¦Ï!uP“͸®Xãø¼:Óãšjô8hœ),›jL lkA ¼{-aIÃQE6” ìP¼Z%ÙµܾÖ]<=±ÑTUMé‹: è;äQZ© ÆÂrt—¬«ln-zÌ!•tn›Z‰´ù¤B™‰¤u°ØW€LÃ’¨-›¯-* \WÅ+êê#º<Ü;@ªíÒ9ÂÜ$`OA ¤AÕ€ª+;äå)ë¦Мƒo£b„uu˜Ap›Ë"™s& òx6“{!FÔ˜ƒh»bÄ£&ç(ÖùX@ý„ÛÔ¤‘CqÕTljÇ,g(+ìõôNiÓѰÂõ4²>o–Õ(oÿT‡oíä‹i±–<¥(½”¤Å<Ÿ3åœsv¶@ÝØTH §ÓaUÉ™V‹%f©Ea™ý¿™™m3Ó‡²Þ0⇸w؆1ìÔb:[Éœ íæJÊèͪn˜™Ü’äpX1ŒùT´òH)»@´Ž/€®£ÄN†ØWb>îuídÍâ Åâz˜‚˜y´2 g1ób?îòâFt{±ë´fÀÂ1-×uE3=±áÄVm·NÙ°^×åãñb-n¢ìåQY ôÅ£Ñm1U3ÝN ³zdli¢Cm’›4ÚÓ”.yŒó-/‚¸MÄÛ^œÅ9³­í©ê6^âœóâ]¼'â}]yÇÔüìš(e&">ðâCœ°lr¬PB é1M=¦D²p™ ¨tçí¾ùLä#/>fÇ]€Ü&÷IA"K ÚÝ5åy²kvX‰lHì4Ƹ¸’eä•Ë".zñ)>óâs\*ˆb9;¨hA"+˜Èå‚DV´{‹î/(½ò¡dÍdÖÖ•0ÝeËógûH«µÊ1G ™ºª ò:Q>¶vг‰ÒÔ±=EÞݺ—_ª,+éúTLþä£ÛÙךµ™/vçch¦¸V8Ä S5Ö³*À7o£[ŠŠÝÖ¾qDL©u…¼prØEÇ,¨þNù¾qÓº€-ךõ–©Ìx‰—_:¡bÙH9lo_›Æ_:¢jl¢»0Á_Ætj;¯O» _1u¾Þ\gL¿DºègàB»nègÂj>[ƒ ì"¡q­ÑDíšÝ 7€ZÿÜþQxúGPt.¿û Š/sÑ.äa›¨­Cf +°‘V¼)alÂf°ß$[p³¼Ÿ€]ÔÏiûÓF!öW•Œ ôšÿ+ÂnKBºŠ2v;fS;åh¢Q3g¨K¡X lÔ‹[ˆC Õ'æò:¸¦åàj¡ÖG\~âj›” ìî´¸¶’ÛÕ@ÀåÕ¨H¢ò4ĶóðŽbzcÕ%›¨˜ /Éo°ÁlCú4¾É'#ªûým#¨I¢6£·Ä?î{Nd §ÙÓ° ·sÈ퇬ã3’˜é„ŒäÁ w`'‡Ü•KËz9+‰'äa‚¼ -wç‚l䳓˜ã„ö®Ä=Ä7šNI69»Ceբޙs,ÝXèL$w˜TvåÊ™®U`•dOõìÓ-ƒÒÏ€[޾ªåu[gŽLNõî—t5_²4µ˜S—èJ™”é–UÛÖÈ{9øÛqzÛÍ‚ãøJÁQ¼§àºœB¿‚’ 2r6 Å Y)>Ày¥¸„þ(¸Œ+—ÞéQð® ­-Ú W/¥zŸ(xˆG'{ëºS굫ž<Ͻ떺¶¦YIdàôoG¬¾>ߥ€^ß°EÛj›…­$Ñ 6Ù@bw_ìn?ë!Ö8ÎËh@‡|.œuÈGÃñÇÑ÷9[à‰ÇÖÔKˆTúR™=÷LOxfaÏ L“fšÄ¹{’;½3Ž}€7“a„7“8gp”aV8J?Ý©ßZ˜þ›CCzáÌ›_ɼøã9ODÐŽNžê¤¯Î‚SÔöÓ÷iz?㡞«ÝÔaÔ³œ‡9žã=x0Acp‚$µ)¤IÙ‡ EíÛ™z5h Np•ÚI0D‚áÀ5¨G Np“ÚIÜ"ÁíÀƒõ¢Á f©½C‚»$˜ L­GМ Oí=Ü'ÁB`^zÄ‚< ö! ‘àñ>ða o\ÿ¥ß‡ %8A‘ZK$X>@ÈKþàÌ•àq¿¦¶Ì¸«Œk®=?/~æ<" *CoâÐFÕ“·oy>•Êß§_ßÞö¯Ë¾Túg4†7Ò!þ ¡ôŸˆOK§Ïqë¶ãnºÖш'„Ê ô{þßý]øqÇEÚWM ¯x7Ãucˆ+y‘òæŒykz}…¶…—h¯äѱ‰Ã›èúµ&¥Ÿv¤´U¦®y§>ÅuÿÜÇQþbœ°¨7Î6ÿPKÝÙ±Z_ÿ PKW@uWorg/junit/runners/PKPKë‹MR org/junit/runners/AllTests.classuQMO1}……•D>!^¼ÅÄg‰!zBcá^ âÚ%Ý®?Ë“‰€?Ê8‘(±M:oÞ¼¾é¤ŸoïÎQóÄž‹Š‹*Cº%•4m†òqwƸp5ñ;¢æÉ€Áé„cÁïJ%nâû¡Ð}> ˆ)vÃ\K›“Ž™Êˆá ê‰?‹ÉÙ×±RBGþEôEd¢&CêÎÚ36:2T~Û>ÏWÖå¿âV£Mzïòi$æF†*r±Ïéɉâ&Öt¥º1’½c§òza¬GâJZçÜêigV…ƒCýÿ ŽÖE©ŒÐŠ?ª^,¸fŽJëþý©í(8D‚~À.F›ºQ–¦ì–øÅtãôì…P.Þ‚­‘®Ž-B•¥ ª`¶‘%§a—Ì¡z÷ ç}ųl×áÖê¥$ð5è[ݬrV½C£OW ­ÔbX$"ÝçŠks5â©´ò°a«`CðÖzva!•ÓëlR]s‚x,xN.ë]›†¿ý%ŸsitæáÉ{¦Hc±#mÔårOOù1§Ô·u¬L&õdV–‡Çž ÀÇB€9̰ ‡0À ,Qª'˰v{93,ÚT"Åõ$ÚŸ¦ædÆV·j"„úS©hª>–µº¼ÿ)FÚäò“Œ¹e2"çC'ÓPX’fƒër`Vsñ ÿå` «ôlH¦ÑD´¹” KÍVgÄ'<\ ‚wý)‰ê®} ÅÇ4Ò*qp‹ÎÛzlB±Ù|ê³cÜ·~¨¨5JDj0-ØAÃÃmÜñ0׃ƒS*¸ë¡‰]Lþ ‘#• £¸<Öì¿Ë›¶oñ¨¾îÐè½)Ú̘¡2½LͰ9k(N¸ê™Û)OE,”íu±iG ¬+’”áåÿÄøçú°LϨLϪP«Ù~$©ù¡¿Fé4ížÑ¹H²êß;óWPð¿¡ø%#ž¡µ ;v«¨ÒÞ5,’,a çˆeÝ<%iuž¿O^öQøŠÒçc>žüáÃ;ôq>óÃp’¸˜ñ/ár†Õq ´sI;‡ìû PK†wUøô*PKë‹MR<org/junit/runners/BlockJUnit4ClassRunner$RuleCollector.classUmSW~NÞV–•¤ (Øl©&!¸`y±$¦"J‹F°cõÛ%ÙÁÅÍ®³/¶þ¬Î´XÛ™ŽŸìLÛû2ÓþÇs7iH$L£àfÏ}ÎsÎ}Î9÷þúêÇŸÌá+CXP‘Ä‚‚EQ, °eIÁ%ŸbYEE—QRðÙ ¸¢BÅÊ ®bUÁ5׬®á–OH•÷Äc¡¾iéeÓó „ms×~à„Ñ7¶‹•J¡Ä˜DÑ´M¿Dˆf²UBlÕ©3:Y6mc#hìnEìXl.;5aU…kÊï–1æ?0=Âñ­À2VË2j¾ã´uÛ6ÜUKxžÁÛ—ÊŽ»«ïGw¹åéW-§öðÆ6͇¸­Ð>ÕEÄÙuG}òè¿È—ß‘³}lQ«X¶R¦SƒE°ô5W4Œ¯÷á-C Qh*h {WßÜÙcº‚Tl æØ¾`¹øàg{p5÷ 2r#d#dûLˆ?VVáP\7’¤:ødPÞÉ÷¢˜“¢DYž‘^ì’­*øœ‚ÞËõˆ²Ì…êE¾™íæ‘^„ûÅÊòaJ‡MGž£™~UjÊ¥ñ‚†Ñn uÛ Üš±fJIO÷Î₌¤ac„‘ƒ±Zq]ñDΖ†÷0Lꮇ‚/4¬ã†‚›ʸ¥`CÃ&nÒÿÓ5¾Ä–†mTÜÑPÅ]Ââ»õ?·É›2¦ßB'B®ÿbÎ÷ÙJ|‰ìþŠm;¾ðMÇ&Ìg: ²²цê^\¿L¿Ùq©åàySs³Üƒã™NöÊ×õðòaÎÑž{“üX$yæRá7¯#ü²Dp‚ß’ˆìN¶œdËmþæñD*÷‘ÜOˆÞ{ŠØ÷ˆ˶(Nñ•ñ ß£ß1ÎßZ |Àë™.KrÒ'q–}$û/Ìçuiz‰}(ϑؘyô8¶çP—cã±HŽÇò3Ï0H؇–ûñü3àîAg 0óK†ü$ý‰ ú iúÓôéß0±y5Á‡ý!&ƒ¶R”¿¦ðq˜äÎá<'7ˆ<2È2»<À$¯M|ºÏµñÓŒoŠ—O¥Ó[ÒÝä•¥Aœ¥£ƒTÒ‘õ’)5íDâ˜å×:T‹·‚F[!.â“pÇû¼ó¯!~ëOsfB¼PKW5Ê“$PKë‹MR.org/junit/runners/BlockJUnit4ClassRunner.classµ[ xTÕµ^+™ÉÉœœ@H 0áa!N^†DPI,ÁdÂ#DU&‡d`2çÁC«­ÚªõUßÔVKßÁÄEÔ Vkµµ­µÖjkkk_÷Ö{ÛÛzï­]kŸ3gΙ™$Ü«_öÙgÏÞÿú×Úk¯½ö>úê?Ÿ9 µø{\ŠY2\†’„Ù2d¢ƒ[dnÉ‘©¦p‘+ã$œ,až 2Ná–| d؉SspJ8gÈèÄ"®Íäßfɇ³¹Ãn;EÂbîPÂØs¹e¥\Ì碌‹S¹p1‡ò¬ÀʬÂjvš„52ÌGG6.àg-7Öeãéü²PÂE2TáÜýL†XÌE= Ù¸„û.•ñ,\–Ëe\®ä›$læg <;?çÀUØ*S±škçHØÆÃÚ¹›•ª“°C†f¶B3®‘p­„ëdX…ë¹G'¸èââ\.Î㢛‹n’a-~ž_Ηð:q3¿\(£·8Ћ=2ª¸•‹^ ûdØ„> ·Ép>?·Ë°2\‚~ÕÏE€‰sp/â"$aXÂ7F¹÷.vò]\Û-áÅ2ð ¿À6¹”‹ËÔòŘ_’ðr~^)á—ü+^%ÃntHx5cÐó ¿Š».êW›‚~¿êCJk  †šüžpX #Báš +ÛZ›67µ5®_¿¹«±­µ¹±³c‚«-ê­Ù ø"5;<~_‡j:ÕpD ïŠ5-AÈïW#}Ážf5ì ù"¾`€°KÛ¶yvxj¢Ÿ¿Æ x£¡ˆÔ4ÕvÏu¬÷õ<‘hHEèOcÈR­P”µ ×ô{TÍÙ!O¿º3ÚÞ.Ø,IêXc"¸dÉ.lÚ°n]‹»sóº m-››:Ü­îÒ}ºFÄï ôÖtö…TOO[ÐëñÓ†Ô¿¤b¥™>ñøèUÈËZê£Ë¦ºL0œKÊ»lM¤Âä6áŽöoQCž-~jÉBº¹c#Oì`Ä·Õçõ° 4c·x'[1G8≨ýäxãÑZëÄ3¬­„ò´9‘.](Båq0DÈé‰;4œñžÔñ…[{ÁJüªÒ7ZùF»W³u®&q‹ªÛ¾õ8`&¢—Ó«F,­tryW¹)´ùÂlÞ³’Óì®ùÞ`ÿ@4¢²'iÍ´fzµøØJ>Šj S·„BÁýZàJ¤Áž‘¥ê?ç%“<5‰¢%dwòŠt*±ÇêÊ"zV×D·ø}^Š,áH(ª…õÙ±ßÜAw0ÀéóÆ#=M_/™YÄ‘8þúHÈè%±ÁÈ¢XkGÀ¿»#0ÆÕP°1ÔkùqJŸ'œ8 ÓÅ^4=6¬•~ò¼ª1r³:RÉÉÙ7äå_¿Úå ûHÿÆ-¾«š4ˆ!-&ŰÏö©~†œk0„ŠZ¦_öR×Ú80—›tlÙF~!üî8Ü<Åøl»nêxÂPÆlåhFDx÷ɬ¿TŒ˜–Ò yÃ6ÊO¥a®F«5°#¸Ù…Ç”“àÒ£:s fÙݲk€F‘y⛕'C ùéq´Ô]d2Ùcø0‡ŒøHö:ÞvU¡‚Úch /Üò¤í´rÌh2u§/Ò·&!ÉÆ:i£$[ŠÄj¸šÜ‡;­T·Ò.@ðYOˆ¢.uÚkZrRVføÆ­•cc–G¯8¸•Ó!ªÛT·a––~©ÑP¸ádøJœCPi%$=Û´qŠAIlL}¼Èst‰¹!s"†P2a®FÛã¸V°cµí!MT©+•3'ío<#_œvúVjÉå ¦ë‡&+c²=«³2 5&Qȱ:ã³ÐùFÖbù'DÕ1•ˆ¶$®?Jø\‰ë4i1Òà%÷gÉÊl£Øò,H†¢;-•‚´—fìZZûãÌq3vÕ"Ô¥´âùšìñzÕp¸´v1qZ6Në™){©×¯|( ™ç¤ð…5>àipœ1g}0òÒ¾ÏQafjŸ:¹)p |Uëàz:ŽLpÒ\å ÷Ñi“zc†_†¯ð¸= <)p?< áu ^7P—¶_×2Ú ~ o¢] >LKʼo‘ðVoÃÛ)@Žg}ïÀ;%üº‚{p¯Çàﻼ¿¡à7ñ^ƒG()²:”‚÷á·xžPàOqñ4Ïqñ/rq\)á>¿÷Kø€‚ûñA‚g)‡KÌIVF)e縚×Ù§û˜j±—µ.Vða|DÁGñ1ÊÆŠ}ábrÄâ°HNOSðqn.ˆ£K­ô„‚ƒð©#Læ.FYø"ÖBG÷£þžâ>ϵXÝåñFü»‹ƒµx@¤ÇÅÞxú©à|Rƒ §šÒ¹˜ÒÛjÚ"£¼›!%RpŸ&Åâ&ûž‚#øŒezµÝV—H j¸ƒÅ<©еĉŽÏÏ*øVðy<¢à x˜@¥‚/âK |^>¿«SPŒ(H†,8¾)ðø @ãü®9Ûãóó̼¬Àð¦?€*ðS.Þåâ}.~IÅcPÒÕÒEm-3ø+ üþFóœÞp-j[ç» üþ!á« ¾†¯Kø}ßÀ7%ü‚?Ä·üþaAzðd>=SbäŸ Ô¤=.–2Aª¡àÛøS>?)ðG*ðü™„ï*øsxV·xÖŠÆÞgfŒµ³)ø­Ä_pñ¾‚PÃ_â¯Î8±˜mð¡%¤hr~¿Qð#.~ üî%O³ÆR:”ò…?x?¦Crš^»ànWª»Hý l¹¤ 3å6d_m„9ãoO•c±Oq‡@I|Ú;2…“­¾8‹75%ÉËFÌjWªÃΗ€é X¢.mªg+BpìóTüÀ3>ÓãÌLr)9j4›¦¸45µÄX5ñQ”ÌøN™òq *;™´žvc¹­~J›ïû4h¾´,™°“½š$꯮TYç$‹iÄÁ£|S¶˜¿ëh6_ªÉ¦M¾{˜XÀÄW|ÑHëÖÆ-aq¥º8UöšÞÄ  öW9óÆôóé«,½ïSÌ÷Eú|,Jë;Yè$k Ž{zý~ΜM½õh+ŒII~¡/ܘòB/Ë30 (:T»’'*ùÞHÏш‡D†Ó.¢¬W]ÆýRv$¨ÕŽ1lZ˜™D!ŸønÐrÏWb ©[Y›S’0{Üdv¦pK$iåOaAvSŠu09¡‰Zø9ŽF-s­CSsšc½\í úzÜ|±i¸Öüd×Ú˜êbXò…[ú"»)\“,h{5ïŸí*æ19Ý$ñ-Êô♌éDéxm*u¦ 6í-«:šÍ¤rêÎØ%.mæ®Mi®ÛLNY‹ËzVÔOÄ,°¯ŠZYÍPt Òúõè¿*ý'½K¹e'u7I$ÏLk/Lõ…ïôô“íŽ@ü oKìŒ%§­å–='m°Òx(˜rcä~œ3ÐNÔÞÚÖÖº¾¥©ÃݼžRÙÔgcýù.ä$øè7“†Ê›]«'w²êÛ…Q6¯c¥-lIš^›¸ðR;]f˜S””×Aôk¶O¿ ¥%dùHfº8ÍOn%êó„Ýâ’:Û«JøØâïvåÍNîa\ª‰d!µ?¸ƒbƒv*?…ÃûNæ+­%‹üÿ»­¯I?.­jÎÒorr ÃQÞ¶zÆÏp’2-½a,®FŒŠ¯kÑ~=Sž™ÈB|‹‘ ©Gý<Á±¯ ân5”À¥pd‚Ì>TËç›.@¸Šêp5ñ™ñ~-̧úup=¸Z6Ó3ƒžS**‡!£b2»‡ÁöØÐ©œDO€Õ`‡•çÀ×è­P7ÁÍ¢v ÜJÀ·Q]¡§Ör;Õî ºžwê¾No×Áª±øv³ø¬ñ&ñºø cŠßkfã3'ÕXÈMôf§gEEåHn.³÷@NUõ8öCá(ÈÝ,>§ÁVá´UW —^YTžOåÄd3IöÍ{¡|‚ÉBB.l¸¾ARH†Á©¾ ÷ STÀ}ð-ÂË‚RØß&}l|ý¨³k¦_X›¼ÊÈ‚IGA²í[棇,r‘IóµÊà¨#_cžÁb¡®ë$êÅfŸ‡á}’kèÖÀNÒ§&¨u¥Ô|Æ®jžò(2IW éJ’t%ÉÜ/¦’µ|,Y“¬ßŸ ,ýÐeuê³!Ó$Ì“(é/dãOL’dC’œ$IN’ôxY—T¯;Ñdݯ3ŸƒCИû?5¹Ïd]T,¨€G @„x7Z™ƒ6c»ÁØ®oofÀcðŠîæ ™¡)PÐߥµ§Á¼Mo¼׎B³ÈGZ†àìöýë…UÝÕÃÐ:XQIÉÉjJ`8u9G¶éÏvýéÏaèpWÐÛwõ 0J.¥ ŸÓ©Õ‘¡ë  ì‡"\ %x”ã2¨ÅåP+ ¡WB6ÉΚ××à{"ø¬5Z«+”KéÌëð}’S DRÄÉδº5%WéaK…µÝ•”Ö%ÌmJ0Ì>K¦d߯_¯tTN½x]»*Eb0é̹Ü0¬o°;íG!o:»«öaØ@±§z,›vƒ‚a*n²—iX†l—!Û¥ËæÚ[B7fÁàÇ$*ýûÊí†_k-oS‹?²é ÷Õ:×òŠ8Ùaè:ÓVhsÜvØ«Ÿ†s mOÂyCÐM¸1n ¯±—¦¬¦£œ¸Ý˜4—„Ë Âå:á<Ú‰ÞŸ’À¬ë]ä7&£–iéV=¥[ 6§M°Rõ~˜4 ›È¦6šÄÏÇ *?î$ƒî6q+3¸•ÜÊ(kÜÊtGQ(<¿G¡Áf˜Pkù…XïÅíÌ”ÜÎ×¹]Èí*âvÍ qû ‰Û‚[4Õ¸a”0Ôcß(l¦œéšItÚ†ÀSAkwKƒÞ ó[C–3kTæ\͵­< ½ ’SzúöÀd§Ý)€/ƒrLÙisJC°mÿgo8퉃Æà>,:nßÿÙ‡$wüd‹†l­êÌ~Þi«g ŽýƒD| \NGB ¿ëÅ3ÓnÞH±á&˜7CÞn¼ÎÃ;`'Þ —ã^¸ï‚kéy;Þ- º•LÜ3i/ýŸR2ð¯iwË‚ôöü–J­l­m ~Gå)ØgLÁ>c öS°OŸâcÚ½âS aüA¬°?Ÿô ½sô¨…@7C°]ì†0P½dý‹¬¯¡ªCŽ;‰¶Èî'Ý ½„SñaSDª2˜V ~H¬æÁŸáßHvŒ•ÖòïÔ¢íg!ÄOÒb×ge×7»ƒÄî±{ŠØ »ÿ0Øý'ýýþ¦³Û gÔÎÊ£0™ŽŽüŸ4Aô°ã öFZè|†¢Ñ(äãs¦}ÎiÐpŠàÛØÿ‹þþÿÐWq«.*·òØü¤óžþE°áK…/›às ø\ >¯™ŽÓŸê°gé°ŽŠÊ#°“Nú‰‰ær”ÀrÀ³Áê.øc³ÒÎѲ€¢ÉØu %Vòf%°DíùäO¨Â?Ç (%¦2ã̆ÏÄÿóÃP³D Ü´À-(Ùˆ˜¡÷¬h”YÂn K„’Q¸„j_8xÀª¥n+@ÆWH'1k˜‰6ñ´Ã—€ï2ì€Ká‹Ô·@×Wû'J.y¹¦Šü8þPK³ëI¶ø6PKë‹MRorg/junit/runners/JUnit4.classuQMO1}åkeD@üH¼„ĉ7 &âAã±à Ë.éîõ_y"ÑÄà2N=Ò&7o¦¯3Óϯ·'Ø×PÐÁPÔŶ†’††X]ØÂk0äÊíä†Åí¡Ñ´¸ëÖŽz ‘¦so2¤ÛÂ6¯üIß”]Þ·ˆÉ¶·z\ åÿïA¸ ¥¶#‡ÆÈ'eCú¶mJ׸¼!ï´Æ+q†ÌÒ{ ù¿¢ÏÓ_áÜbr½Ò |½õ40§žplWÃ.C¼#†6÷|IW K ©;ª'½ãør`ž ¥œ˜v¬r– ŸÐ,£kº^ ’D š:öh”«Úd(/‡Î,g0žÇ¥ë€g¨®zó‚(Á-ñÂU‡-)Ê>,ÿ3Ü…©Kúðý³ZŒ6ÕŒ0ÖÈ»%>D6Uy»«Îš!üJDq:õ X@EÂ@~žŒ1P ë$˜&œ$;g6eGÈf±I(„á­å¿PKà`0bn„PKë‹MR%org/junit/runners/MethodSorters.class•TYOQþ†.Ó–¡”E¥-KeskEj)Š)åa€}0CÊa†L§$þ+£Ñðì2ž3H‹%à4¹çží;ç;÷Þþþóý€),áÅt3˜Ñ/b.„<áå){ž â9^„HI³%@Ë—t³gž•W"„‹Ù•üǬœË—‹o L«œÚ«š²ª†¡Z•ÔŠjïšÛ²iÙ¤¥xÞm¬óKÙõš€PÉÜ?P,Å6-±Âžr¨¤ª¶¦§r—vÊ ÊZÙP쪥 ˜n”©YuÅ(§,uGWK¶[;=OâÈF¶°ž— ¸E—þCE¯ª#ñÄmâ½9s›Zk/h†Z¬îo©Ö𲥓Et€VwÌÅë:”mK3ÊéÄ- £³¤èŠ¥1¢ ë5”}•}ÿ@RïðæŒ7©¸Ü|‰ ´wµ ŸAC½O5/üÏà·­¬Ú¹ºC¾O\w̳׸n8Ü@¦¤»œ=q.9SŸ7ªû™çÌ0!Ù¬Z%uIc¶Ñÿ$ãIèã'Ó/!‹×î߀)a9 ±(!†y Qô°åï:%tñÒͶntÒƒjìZ€¯¤›5Óu1Ç·ºµGH_¹R9]©TÒÍîX#*åÅš] ž[%Í †¢7pZ˜¢ÇßA$¾…^fìre7K²WÐ)Ó¾½‘>g ˆÜ%Ï=Ò†Iò:ð-çð‘F Ðêw|aŠÄ?GXlmí„7ù ¾sxœõ ôJµ0<Àˆã§YÓÊïá¡æ)"96prâ ÄcÒ=F˜$·å§ÌVÊe¬e2â¨CŒwL̓øe¶ô’¥F6A¶$ÆÜz)Ò8Æ—ü ñj³£uÍúÜ5q0I—·N^þÞþ€w3ðœ x†Ð)Z]ò ŽÖæhaß Ú=âÿI n•7½'h“7É‘O!_N9ê £"p~“4‚·‡;rê/PKî~Ïñ7PKë‹MR'org/junit/runners/Parameterized$1.class…ŒA Â0Eÿh5Z‹PÁµ¡g¢à b;Ô–š@’ºðh.<€‡S\¹r>3Ãgþ¼×ûñb, bB|2Íx[ÖL˜•UWölË;ç«JÝa²ÑYm\©‹=û‹ÉF„…±…¬]zi­Ù:ùó»L Œwím]+çØ’–(k¥ y8WœyÂì(™Lßê!¸½°#ôÆŽC†Z— >PK=-…(¥âPKë‹MR0org/junit/runners/Parameterized$AfterParam.class…ÁJ1†ÿ´¶kתµêAD‘<¸xöTtÅ‚µe]½xJ븤d³’Íê£yð|(qÖƒU(4ÌŸÌ73™ùüzÿpŽ]›Ú¶üû¬°cºVšÚCieJެz£ç³‰œJ½¨0N¥ô¨r5ÒÔ5&sÒ©ÌäG·%hi’@þ:‚ˆS˜R]Ô¦Rœ»³fZgàEwq¯ ,‰¥MÈ1y¼ØjJ9g<{%†êý0¾\yØ8ÍlL £\` cÈæÁ¿ŽOº/¬~žx2/Í^‰_j™çÄ}·æ…£ Àá¿̧ÅÄ’ê ï*ÊUÅ ŸÔPg»ÏÊcß*¡k¥|‚ 4±Ž-|”áhußPKäP éPKë‹MR?org/junit/runners/Parameterized$AssumptionViolationRunner.classTkOA=Ó¶,+(”—¢<Ù–Ç‚‹ž 6ÄÁ ÌÒ0dÙ%Û-ãÒDÀHâðGïL·¼ŠÌfwfîÞ{î™{ÏÌï??Á+õHêH¡_Ã€Ž¨\D1Ç-éAîÊÏ= ÷uÔâŽQ<Ô0¦á1CmŽç³¾Ø„ç2ÜÊxþºµYpE`ù×å¾5}ô?ÍPÃ?eyè<|ÌY¸÷]Û±&òù–rXžc<7SŠ ðêqAÞO6̲LykËËqÇZâù`ʱóùtfÓÞ±-Çv×­ÅÀîzú²“Ë ±)‚e¨Ï—/¶V¹¿d¯:diÈxYÛY¶}!ס1lˆ§( Ÿ°O™e4ÏbVA££g¨ó¸Ç1È¥ ßû(O´RiòÂÊdh]¾ÚÀQ'¥8•3Uét„²Q9;*(t'×Ó=!E’0iÖ µIc”ÞšÀÐL³/ˆÑ˜©}°Tÿ"ˆ®ì#6°‡ª†júìAûø.jRƒ»Ð¿)Ì…Gql1öÝìúØ{´’=UÄCÚ5»‰[”MÎ:ˆWDÍ$—(Y»Ð2±h”^U©ï¨ùz˜¦ZÙmBhºÒÐgÈ*ý¨]‘ôêû0öp刲.}XŽŽ(WxÍŘCª ôâ!FЧbLÜPQtéá®Cÿ PKnä´PKë‹MR1org/junit/runners/Parameterized$BeforeParam.class…PËJ1=imÇ>ÔZu!"ŠH7B×®|ŒX°¶ÔÑ«t¼)™Œd2…úi.ü?J¼ãÂR(4ä$çqsóýóùà{¶<´=ìÔÓÜFt«4 ´‡ÒÊ„YõA¯Ý‰œJýQnœJèYej¬éÒ˜ÔI§R“ ß_KûòŸðGa t!P™Jsvg…t˜jÍØàžÂ^?8\n ¥É±òd9hJ83œ½‹ªý ¼ÜxØ8KmìOr£œoscÈfþBǧWô–Zú»h,œš½Âp­e–wÞš—Œ'9£¥¯™ÿ+VÔï”x–QŒ2Öx-¡‚*ïŒ<æÖ 5ÔÑ(à ¡‰ l³ ŽÂ¾‰V§ö PK…‚°ëPKë‹MR/org/junit/runners/Parameterized$Parameter.class…‘MO1†ßáÃDüŽ1Cˆ\Üxöd’MP ¢OGRRºf·K‚?̓?Àeœ½€&$š¾ÓyæNûýóùà ‡ªö<ìòSe&d/¡rcmè”Ó¡mò›JŒËJÅÇ0‰†ÜÖFØjWEjÂŽ#ýÁ¯—c5U„£^bžð³ŽõÀðÂ(&œuRÆ7ÊŽ|5Oø=±°©º&ÔW ÝÐèáL@¯÷tßîZ„“å%}Ø y¾<ß2<ÏþìÊ·ƒV§éá€Ð£‘?N¬v~”XËQìÿ´6…?º¤ð­QqÌ2lyÑõa0æ¡#œ.½È≄XÑ»Nò YéPŽC^¢5‰²<9^™AEÙEmH:Ç(a[©|1¶QÆ®E¤~ìÔ ¿PKͱs2PKë‹MR0org/junit/runners/Parameterized$Parameters.class…QMO1}åkeEÄbŒÆ¢Üxöd#‰Õ‹§uSRº¦Û%¢ñyðø£Œ³Є„CÓy7ïuf¾>¿\ ê`ÓÁ¶ƒ†ŒæcÁP99½ñ ÷×׳Fêà’¡t¥uh¹•¡®‹g+Ëà¼K=¯ n/ŒÍ@ÜHE å7$e…‘obxžˆ1T»±¶r,e$ûJÌÕ"†Ã?†|–ðº$¡“ˆì³®bÒ®-¡vB%S*pº÷~³Õ`Ø_\âsKÌ£Åù†cÒô§/‚H¹Vÿm×ì2œ…&ðF±–Ö3±ÖÂDÞ¿Žgˆzsÿ‚B3¡_+E‚`qnÜîÄ€Fz°ð/óic‰{!E'MfÚ+²„r„Òz^¡0…<\º÷(Z¥tA` ëØHÂ'0"JØ"‚‹D¯ŒJ-ÿ PK»ãF6PKë‹MR4org/junit/runners/Parameterized$RunnersFactory.classµZ xTÕþO23o2y@4l ™¬, „ š$ŒÚe˜<’‘a&ÎÂ" µµU»Y­µ¥ÕV»ÑÚ- $¡©Šuëæn×ÖÖª­v±Ú½Õžsß›}býü$ïÞwß½çžóŸsþ{î|þèÍïÞ `­/@'¾ïâÇ=ò¸×… ܧá~ì¸W¾= Ã?Þ¥÷# ?vá'xPÃÃ.,Å#.áQùü˜</İñÒÜ« x£’Ñ’þYÛp¶ùƒ½ÆnÂŒd8mwñ·@¯ô¥–:œŒä ÆLµqaeƒr®wå¸}Â,ž#qìF0*1“ç¯Häªú¾žUõ²…bõ„ßQmÆ8"JÓ2,~tuND•ã9ßl†××ϲC D„Ç㱄)^Hc­¶P8Õÿ§ú_ÍT¹2; O8ír8Ú&aé‰å]V³æZ8Nó3Y¢Õ‰¦ž‰SsÙH( ²Ôñ,, §SWÛ@W]Á¿ú¸X<—?ÆÇ›'<÷ôçÛ[sr’j3#où#/G•¥pâ6“»UH‘Ÿàôõû½aƒ]úþÿ ñ휠ûçd»› ®KƒFï–p(Ø'å Á÷N°™²&5 |"§“'ón’‹ùÂL‰xûŒ4¥›B¸lB:f˜9“<1õm~® k“ôÕ¨”²ì’{ÜÒc‘*êòv7ÈcQîËKæ )~|>†«bQ¯[ ”·­£sUŒ–ÄÅ"qÉñKä{гɰ.ù•b•«+ ûŒ6¿º_¤­¯tôà|Du¼ ï–Ç]«ãzXÇ9ؤã:|RGºuœ‹êŽïš¢ÑT¦!ªQ_=O¸Ö×é$:™5§rQc³Ž p¡NÓi†N3i–Žã#:ͦSž‰Þ:¹iŽŽC"y.Ññi|F§¹4Ðxâµ¬Ž Ø¨SÍ×hN ©’Cö)XÇ nã[ofZéTE¾ù¥ÇŸ~ÉÖP À3UÝ^šn ‡½{d²€YÍñ’Íš:ÕP­Fu:Õ ¾ T©Ó"Z¬Ñ–Ò©:¾oêt-ã’r‚<¥Órµ‚fÄ•Ig,¾‰e²ÉêS»Ô½5!÷@lkÀïsGä"âs'YÖmR›;t+ÂsëÔH+uj2ƒåt_ÁW ‹Ÿƒtj¦U„™oWnèx?>À îmØ_·wÑþÊ*÷ŽX$ê+Òw{ƒî8¢îÐ6·W€Ôit†N-´š)ú½ªî¿p¿F­¢òÖêÔFgòávÿ½KLXG8{<íWB¾ígË–*%ÍJ·'QëÔå¤ù«»?Úe^°Ý)qd¿£~•®).M±Øç ´(òK™’ƒ„2X˜0-WLó!U`0Sì1ãþ”qäð¹Çõ¼yN­¬Ê>ºý'væï¯6BØš?²VtW~>?Y7¶³r}UöùÉÅjDU=ÑPдµ"×5.û¤)b¡-)w÷¥9~¨JI^óë“«ä÷»XAðoS?°˜ Ì­ÌÜ-× o§7c´KÓÐŽÿ†49cH tc—H¾,% ˜âî m7Öî„"þF€!\‘ŽœuHyå©–$ƒK9Éé·®¢\ƒ¦ý:“rE-Éeïö{#Æî¨T-ªÉ÷ööŠ{s(u~œÛ“ÜÌX8¼éù•c[’ viÒ×FoGü*9oL§®uú#]ŠVUw£"ZQa`ÀöÊ/ScÖËÙd-â¢!s(ÃâøRFvNê%•o ¹*Ð ¹²qܺ1»ØLþbk0QöH}‡Y·É$Œ²c›ÕY‘CáqB)ASRù0jôÉÉ•‘щ¹Å™c\Ã…€×g´×¥8ÏLÀ ,z]®¥åµ”„Þ 7:QÀéRÐp¯DêAÕr5¨Z®Ä¸ßÂý<œÇï\gªq.θ̣\o"ïá²}:ìüõ Ãæ…½§zŽ#Ð<žÃÐFà<‚ê”>ÿŒÀÕq³m#Ð;FQÔÿ0„Iå¶aLîôÔA±§ö¦ˆ€â£(!€–ø=ÿ(Jó0‚©wÝÆZÎBjPÈÚ¼—µ8 E¬ÓŰQÅÁ ŠaíBíC íFíÁbºgÒ~´Ó¥8‡.C„.‡—×.e;êPŽ­ðÁ&¡}€êõÃÏ{Uál\ÄØäñ®[°;x× /ãsV(1ë<àQ\laæ?.×Mä¸gSë–°]SîG¡4#˜6(p”¢l'CY»B¡ú(NæxåØ>‚ƒJÜ{•SXUº}“éJ6ö*eŒ©ÒË„YüÃ.V%®Ò2K¥ÝüÇ52?E¥r›Ïí|qK)faÖ1Ìl¯~Úí˜=Èjp%ÞQ3÷1Ì%LÔË$èL¢kÙ]סŒ®gEnPЏyÎ,8±—•æ[*MÂI؇KYAPWž”Y—Y¸9¸}.ç'cüUÔó[±VZËÐhSV=Sâfn—lC7ÂA7%ÜÊKÎ,Ål'©Þ‡8°óTïJ\ÅŠ:8|b¸šrÉÕÃÚvB ˜î¹ó Ès óøßAÚî@EO¾§+¹»CfÒ-jgÝ\¥d‹^|ÏJ$ì쫦|1„ù5wcÁ8kŽaÁ ÷ÀäQTöðûÂaTÉç–ÉÐ0ª;yØs”#¶rÛQÔJŽœ,½:²×–Û¢>[¾õB­,e­'Õ˜Z aÐS=‚Ew%Üg&Í×ࢯc ÝÊîû»ï›œ4ßB}Ëé;ØLƒØJ·£—a;ÆNR66³›Q€±v´â|×0^Ë9)?Á_$šöY#=¡¦EN…¯ÈK8ßœÏÏLšky6ßU­½ƒ¿IrvyTŠ,nç˜\"1ià®QÃÒÎÚ!œz:7§€½vðà[ÏŽbYÏ(–3„+J‡°Ò3„&n†pú0š“€˜ñ< 'ݹt'ƒpN¥{”ÁÞ~.Šq=’Ï\¸@,AÔe™éäüÿ”bиqæÈ ié—'·R+¦rëä/Ýžêša¬j´Ynn´‹KÙ¼FG¹Ã2p®ô”…g4jåìjí(Zò÷÷SåöAÎŒݲ›%×¢ «-ëfCã=ÌÖ=Èî~ˆ­{­ôÚèq¬£'”•²KØÊø,ϞΜ&V:XËf|Žm³a NÅܳcÛ¸7)·t'Ò¬›Ãýójïn|A‹ônæÇäL·²Y¤Ý’öE•ª²òK9¨êËüÇ×>‹=å¹lVå7ÇѲU›)a—ð·À²›)á(·yjf]‘OåŽa´&Á²e’ØÓÈ£gPHÏb=‡&z^Á±Ž·ZÀ,qcÖÁ­ ‡(»*aðª„Á«,ƒóp:¾Æ “ÏÇÓR|]Á–<.VYfšß„LƒoåÈç;y‚›Mò[(AÛQÍfgÉ»" š®[m×ÖJä,ëBlÎ<"^„^â™Sû•b\˜HÎ…VrÚ9¾¿¥ p1'›{Âà.|‡{¶´ÄmEÞjy£©¦¤mÖÎÂ:qC¹M”rŒâŒDÚ­ç|+wð£ä,3óªeRÃ0ÎNj¦ÄÞmŠàì\">òÿÞ<„·eÜî\P€™Üîçö0·(vþPK«XËï ç#PKë‹MR@org/junit/runners/Parameterized$UseParametersRunnerFactory.class…RÛJÃ@µ­±µj½ßE¤(‚AðIEðÒB¥j©­">­qL·n7e³ôÓ|ðü(qÑTZíCØ™3眙ìûÇëlâÓÌY0Ï õÄe€ &×7ÊMþÄmÉ•kKîû{ Æ•ò 7ÂS'øÀiœ•=íÚÍ@ cë@)Ô¾Ýæš·Ð /xoIÏy<­`'"ªF¨ka•oœ_äŽñô3i¤/…«¸ 4¹¸èv±¿ÙW/fýRúæ> öÌ¥h‹BýD¥³o+Tb0OMF´ðJøâNb<±Ï`¥Ã ÿ)ØU¢PaDù>Š'…ÎiUëçµÒYáOÖ’j1ƒ÷^ê ©qí¢¡újïzAb‹dkÏm$P²vS)X°À`·{…¿V±V÷ñ-2Xø¯˜-…iô§–‹m]Ü5Ñ¡÷²ÜÓi¼fBôq—gÀ`€¾=_–¤Á Eù e ,¢`ÒTÎDÑ0dé\¦|„š’£09ºÓ[`0 ³t“{ fòéOPKŠÌý¯ˆPKë‹MR%org/junit/runners/Parameterized.classWù_ÔFÿ,d QäT¨Ö¥"².*^@¥¨ X® bÁ^a7@dIh’U±—­ô¾kíeo{·öXDZíOý¡TÛ7ÉÞ»t¥ûù$ïÍÌ;¾óÞ›yÙ¿þ¾~À6Ü ‹`Q?ç"¼P87!bS|ApRD¦ùxF€V³æcC„ KDW4âk§ qgøkNÀYkñ=*â1<Î-?!àœ€'ElÀ´OqzžKÌ»ñ4<ãÆ³œ>'b=žç&_𢀗¼Ì@ø¤MSŒAÙ4“aõћݲßÒ rú Ce§i†ff-U×FT=(sÆc;',Å” y†¡p¿2¡Š=ð*CÕ1Ó)$d::1˯1ļNÆâ² ùíª¦ZûÊêzOʧd_PÖ&}6Ð6ïƒë€PŠzUMéÍŒ+ư<¤™’^Ý/GdCåãȤ˚RÉhu¯nLúN†È²Ïpvê‹9UÏ*6†¼i8Í-CE²í¹Ù¨ý²Táöú}$/vñ+väLoІ‡ÔIM¶B©¬MÛ×á[;˜¾ãl¸k’óf›Ym$Í14¯Ô ጠÿš-§ä -%¡H:µ@¼~úkJPà+}öh–2©Άf£Nè!Íb(Í H•£†ÎKh³²Ô ¯W5-ZÛ’2Õž`axÊÐOót¶ñÔmŒâ UÿEuïÑÕ@ çî iJÇ“Šo¤lƶ1˜²ÖÃ3AÉ›!À3TîA_7×8­Ó ™£ÖÄÊÏöÒCe ;/?YÓtË>° ÂLøÎ´œ6$ÌÄu|1ÖIê^Úo&×6ÒKéVÜfér9䑇ôáWºUûfH*Ò­\‹aëÊjYÂ\à¯CÞÄ[œ{[Â;¸(à’„wñž„»ÑK¥ÇØiòÊ…ßghÈæ1á„H8Š!†úl*ñc$à â2CÓrÙéÑìÚVLËÎC?/>ÂÇ>‘ð)>“ð9¾p_ øJÂ׸,á|Kçç3.á;|/áü(઄Ÿð³„_ðk4.v®bw#Ý…ñÙ!ËPµÉý!5à Fpìy$„± áyGðzÌ)= x¦äSŠ§Ù£¶Àu†UžØ%Qgz%,a‘‡ý7 ¿ãê,$(éC!Õ¢ò©Î–„m {³&jù^ÚšMwùnJWF6åØèª)±—f8\™ï¾¬áqN¤ì÷+¦Y³­¹™aÝŠ[Iú^³Ü=œ|éFoçŽw¬Ü1]ÎÅiw(¥20ÁûV7cCÊ­³»W2&ÒTÍ.*…9[`Œ>Å&+v&6×-ßbbmË2EÈ1}„ÜG†¥uÞ 7¥$¹z•x—Û”áó+=n5Òux¼™»QIú,aJ6û•3—f“²$lã'?wP’ÜŽy#æ²c™2]@qð3¬O2g(A²ç‹uÏuË­Q²ÉJ¬"ø§žiƒ;‘!rnU³FxØ©¤BÉ—ggŒ4%FϹÚÚ¼iS‘ÛŽ, ä´Ÿ\¦Æ!¢šb0ÿ2è¶tgŠ¡< W®¤¬F ¡šþ™xÁ.ú·°{‘‹V"9D‹ê–ÀFØr{•¦rÑFo‘/3V³f´Ó¸ÂÇØg›+Bî"“ÄKD™ýĈ8;ˆ.ârÐMõۈ㢹DËë¯Áµ€¼z¢ù× ,Àw¿š ±(`-(c;mG1¡<s‡ÑCnâ`ÊSÀ¬€9B5xzs0iÛlYBÁèľúR64.@"f•Í4.Rèàt E£õa¬ £˜æKnƱVQ,ÁöÂÍZQÌÚPÅÚ±‰Ý‰¬#wK w úÐO˜ÜhÄp;3÷ÐLwñô áà%ûy$Ìs a”¶º*]‹ ´æUæ-¢œáTÎU0üµ­ù•ù®¦0Ö5þ‰Êü0*躱K(.¡£\h ã¶ËØÕ´„õ£KØ@¸½dc.YM´äz‘Ц’bÂØ¼€ÚElÉÁñ+ÿ\ˆï¿–þƒ„ȺàeÝhf‡Ð£ƒõ Á9Ö‡ólÀŽÅQÂßAûÆ1T™Ç1BO>J1‹{©*óøîb‘šÇX$ÃóvÌrlŽÇ,— ô,Nç²£çĘËß‘çqŒJÝORNþ çA›{ˆb ª7êéŒ`›ôêÐD[‰úˆ®"Ú\[€B¢Ûˆn'ºƒh ÑDwÝ][ð/PKóÁ^€°HPKë‹MR&org/junit/runners/ParentRunner$1.class…’]OA†ßiW—.+Äb¡J„•kÄ"‰IùÐ6ÜO·c»Ív×ì‰?Ë cðÂà2¼3¬ÔZc³™33gÏyæ=3çç¯ï?ì£Y…5wðlëxncÃÆ¦†ÀÝl¤Wë­8é{Ã< 2/É£H%©w.eÌ¯þ}#°Ùœ¼}!`Å=%p¿Dê4uUÒ‘Ýž¥VìËðB&ÞNK €€ûN#ŽB™¦Šžg5ö)­6‰üüé7vVöžÎžKýêå:~¥ÙÊKé…2ê{:DcL9 þ {íLfjÄtåEö‘·”’'PnêD§牯ŽÍ_œ8\xCo#?ŒÓ ꟨l÷l¼pacÎEu/]l¡ÎšuÕ±¢³îPùT¹55⻄ÞMV»¨<Xû?Ÿï6]/kd,{Êbs±C ªU-mWæ¨À¡wž«c”øÎÎîWˆo(}11.-³hOpÖ5k Xä¼4áyÝËxX0ßsÖL{÷ e1Ð1î3‚Ï ´vV@õª†&ñö-þêþÐì9þVÚùC©˜R* TiKx‚UΞÒV86»‘kPK±ÎÎDÍ¡PKë‹MR&org/junit/runners/ParentRunner$2.class•S]OA=Ó­-lG[QÁO,uA,Æ-¾j|!škC€ð>lG:¸5ûÑÄŸeÑøàðGÏÔ­54n²{gΜ{r߾ù `q ÷ÜgÕG÷}ÜA³Šµ*Zr¤âÀ&¹ykt*°ÕMÒ“ð´°&ÓÂZ†?#•›Ä†û…íMÈÏ*ùÀdAG 9“–…{*Õ6ßï÷¹áé Þæ<òxxt$PÞIúZ Þ5V÷Šá±NÕqLd©›D*>R©qû XvžÀÒwöN¬²LiͱHúU<°.±_¢Š‰V$6 9†y¬ÍR†l_äô5$W`õbºŠ&îÙµ£äCöf‡zÁÐþÑ«¿L°Y¾Š"eÁv§ƒ&/o…—¹Ôh¸šF6À!|kçe®^sï1ÖÛ[çíÇç(µ?ÁûHÈÃ~+p£o¡ÎµK" \c¼>…Ü€»!ËX™w)ìÎdûŒºg(}Fù·ªïlˆuÔÄÆÊrFYN”=Ü[¿…ÛŒeþw±4Ö,tüüPKíËqϾPKë‹MR&org/junit/runners/ParentRunner$3.classS[OAþ¦-]Ø.mYñ†ª–-v½¿h|!«1B0ñmh'í’íl3; ú‹|&5>è»?Êxf¥Æâ²ÉÌ™óÍ9ß¹ÌÙŸ¿¾}pþ Ѝ™mÙ†…³­Ú¨ã¦…[n3Ìð°k®ÅPHͰډTßßOd }•H)T죞ýí±Ñ†¢qý.Cí ó×\‘Õ›T3¶Oº}ưÕÈ2>Gìµ]†Â •N Å«d¸'Ôß ¹Ð‰º<Üå*0ú X0¹2€ÁiÎDZ d%#úÊÞ¤ü0Ófy·Œ÷´ ö&”;C¾aR·7ßwÅH‘Œ-4HߎÕ[¡œ›ðß眊ܔÝ0ŠÙ)ô êYXsà¡éÀFÉÁ4f8Xtp ‹ÖÜA‹ž%«2†åÌ^3Ì›ü˾¿3PÑáŸÊ—þON=; ô -µP*év…ÜTÌðü¬ 8õÂçšÀêDj‚÷JÁ8¤è¥ý~‡M¾EB®Z5­HRß BËÁ,ME™N/HÏ“¬xÍc0oý9ï òGåQ¡½3A-TS7fL1‡‹$&fÐè-ˆÐ+ÒL(×û„Üg¾bêíGØ#›?ŽÒ;+µ,“ùo<SDt{ˆ{„2ÉöøŸøî©øîIüË´ „\!®«i©×p=Å–pót²é¶ˆôû PKõ³s¨ +PKë‹MR&org/junit/runners/ParentRunner$4.class¥SmOA~–;{åXí_P,Pµ\¡§ ß4ƤфX‘ á3ÛëÒnsî™{!ñg™´šøÁà2ÌE¬MhŒ½tfw^žÌ<³óó×÷ž¢9ÖØ0bÓ…ƒš‹xèà‘ƒÇê åSÕ¤û Kí8A$t/x×È0{ÆÀ_Ç™:Q2ah´ã¤ r­² ɵ–Ipî E¦bæzLÉ¥¬¯ÒÚ†êTZˆDêì°¸™Øçм/Žë³‚§ëü‡ª¶ŽìVÜ• •¶Òr?ÿØ‘Éщ¤¡ Et$eîc£mº`‘±g°[‘HSI–…Öv©¯•IÈÏŸ.`ge7M¶E’uSµû>ΓP¾V&{q"ÔBý¼Òa§J÷Þʬwlqøhp\Ç Žy¸ à¬rlc‡3«ïo¶‰¦K“‰;ïgíj(†2·ú*ê’‘¡9=櫇V¾HgxYÿÏ'€*-„C-Ãò<à @šÈ)4ÑE4Gÿ <ŠZ¤ÓÝmÒË~cæo0çïŒ`ùß`!»…%’%˜‡²‡›tææŒeún‘¾=a¹óžîbõ7ºUø<HàCÂÂúŠk—È®©‡½A…µÿ@÷¦Ð½1º…{E÷±FÚ¦µ¯b¥À¡]Cñ;PKxë*PKë‹MR&org/junit/runners/ParentRunner$5.classT[oQþ +ë"´©-^Z±Òrm· Õ‡6ø€šâ%Bú~X6pȲKöÒÄÄŸä‹I[üþ(ãœm­¥`i²»3gæ›ofΙ³¿~ÿø  Š— ı)?y *r(ª(¡¬ ¢`KÁ6ƒzÄ­œç¸¾é2l¶·¯[øºضéê#n‹q`q_8¶Þq{ q ¼ÜCv*ÂÓ?r×´ýOáJb÷yë ÍÂ<ðÍÒb §g2¤ZÂ6ߣ®évx×"ËbË1¸uÈ]!×çÆ˜,— ZSÒ6,îy&YÖçT”Û¥–')?ÿÒÎ‹Þ–ÑŠáŒÆddÈZC~Äu‹Û}ýCwhþÞ´¥Ødˆ8UÙÉ”Ozj ÑN‡ÔD[ômî’:Q =2xëY_Xz#¬†ûŽ»Oø:ñ¨m'p ó­--LÔ/Ãh“ߨ†åxÂî¿3ýÓS kØAUÃhP5$QÓð ÏìjÈàMƼeH_-”aiV¥ kדQÆ%t}zÐfÒÌ}¡-‰äŒ%{¦g¸¢k6Âê1Ôfœ_q:Óë0j,Uî&•0¼šQòe¢ë½Å&²tÍðÛˆ¤ÓòL’t@ô+ˆÐ›Ä]ò¦H; u”dªT>+UN)}Gô™¢HÓ7N@D6°@º&u [Ä=’Ë–È•Á}"”Ä_ ‰3¥c¢<+Ÿ"&e…ä)n}½’!fȞŜgÚ< sdðˆ´H˜õjåµzZ%ÔZØècªáLËâI(×ñ”dŒþ}X"M¥¨xÈ?PKÕÉ…ªV*PKë‹MR7org/junit/runners/ParentRunner$ClassRuleCollector.class•V[WUþÎ00L åZA)V°I¸,U0Šhl H¥UëS˜ÌàÌ„B½û|óôU]m)v-O>ø'ü'êÞ“„&ÜfΜ}¾³÷·/gÏùûß?þ0€Ÿ´`JÁeLɸ­ SÕ$IÈøHÁ$eÌÔ )³øXAæj0…jL㋸ËÓOyßÝ«Á}|Ưϫ ü…ŒlàKË2Vd¬ Ⱥå9†î Ô%7´m-šñ 3š4\/&P=o¬Yš—qtúžË˜úwÔ„eéNÜÔ\—wÞ|eçHÒvÖ¢Ëð¢N†¡n”wÇmËÓ švæuÅFÉLåˆAÐQŠPxQ ·WÉ`m’ 3™ô²î,hË&Iê“öŠf.jŽÁóœ0à­Ä¡Þg“µbšúŠg;×Ë™ÕryΟu–nb:ÚÊŠ¾å L†ÊìO93:éhiý‘ílNëL0vhêntAw=Vc*Ó>J |f…ÁmÍ̃­Çë&ïY"ÐT„ÉûDËÍG#¶»uµž³‰p†gŽãOFíšî¥œUÝÑWYƹ …Kk/¨gk­ûÅ$ EÚžîh¹¼:º›1=vþ¤z=B˜ï+¡wʆÑsÔ¯ØÔ¬µhjyƒ*Б´Óϯ.ù€ ʺÊY9Rݾ²«§Ãî—Ú9Ö‡,õE®NJ‚›ISÖOˆ2ogœ}ÒàÒ»Tl¼ÍªèÀ› … ;Ž¶Ë‘VÑŠ6Z*SÞ2ªXú ƒÖ™‹DÅ6e˜*Ұز-cKÅWpT¸ðddTl㑊lò2mxŒ¯e|£â[|§â{ü ¢c—óYEa? œ»ÿP~5tΑ ŽÓò-píŒõ)pNë¸eÙžæ¶%0*ªŸ~,\$ÑòÐhaUÀ•SòCçÝæžàÿT$• ËÓ×xEöbê!µµP¢ØhAf¡Ò:N”Aò¹¸xôL“em•~ˆMeT„ïQZ&fæ–ÄSÓ³ãsã ©9î®q;½¥vš¦b¹ŸXŠ5º€k;^e¡Ý•Wäÿ ]ã1ÿåÈcšU¹vÆ1—osõ¥RŠÝºæÎè;ž_ò&`ù“ÆP¸Ô[ö“+ˆNE ]Q^£§ŽO(¯ÓFÂéMÇ™$WI2JWêV¨‹ìAмDÅÒÏüÍG¿Eo…FHƒH7ÐIs5‹G®Û%B°®Ÿéæ ±¿»•Ï! r&òÁ—¨Zê ôþ…ÚÞ}T ¼€ò±‡š}¨î²­ ßÖE! ¡FFTŠùö"Y9{üA·Ï¡=è%Û5´Ö‡(ííÏócÔ@Þëwèë:s<Ÿ’uÞar¿ã \dÇy¶Z=ºje'—¦{öQ/ð Úé£AàU3ݽOÑx€¦,ý'ÿýÓýkÞ…f 0¤Q(ÒÚ¤[’Æ‘âyW†ÈÉx—Ð]${æSɹ×Fćýtº’•¼Ÿw%V7N!É¥ï6é©à$Eº{ˆÐs4WɠıåŽ,*D7sAT¨Æ Õ1惜Öa™UŠB”WØœäIaœÖ+r4?Ä„?N¢ÆV’WÑø z·@ÃÛdö–¿ÿPKZ±AfÓ[ PKë‹MR$org/junit/runners/ParentRunner.class­Z `åõo²»“l& " W€d“Nµ ‰&ID£T»l²°ìÆÝ ‚õ¨Öžb[[k[l«öJ«‚Ž´b/µÚÓŠ¶ÖzU{i[íaåÿ{ßÌÎÎI–ö/î|Ç|ß{ï{÷û&½sô^"Z¨õÒµ\í¥°Oç/°¯3µò¨Óy¾—t®—ÁY¸Pz‹¤·ØËKx©Î§yi Ÿ®ó2ù.¤m”Ç2y,—×M²kE1Exe17ó*y¬ÖyM1Máµ2Ý"«ÎÔy—¦skŸÅg{ñh“^»€éÇzylÇ9òØ(NytÉã\´Içó¼TÇçëÜí¥z>_Þ\ ó…ÒnöÒ"~·Îyi)_¬ó{tö â-òÈdÎA/-ã­:oóR÷êòÒJÞ^Ì;8,²6¢sÔKk¹O—x9Æqé%tî—v—ΗJ»[Öîñòeô/¿—/—Þ^êç+åq• ß'½«eÇ52|¿ô®ÕùÅüAþÎöÒfþˆâž¼þ¨—¯ã½:_/\ü˜—?Οð’Ÿ}²úYðI/Š÷JïFyûio’ÍŸñÒvþl1Ž÷é|³ÀTƒÏË»/xù‹¼W†·HïVoÓùK:Y(ûЬõ ¼¯êü5/½—dðu¡ã:ÓKWñ·t¾ÝKWc0~[ç;t¾Sç»tÞÏTº:ìÇ7ö‡ƒ«£áp0ˆÆ˜ŒÖH$So‚q&bònjnk]Óܵ~c'Ó¸¶íþ]þúþD(\ߊ'™Š:CÛ"þD,ÈÔñzY[4¶­~{$”¨ßå‡zü@Rߌ'†MÉ©Æ&2½¡pO,i‹v0ÍtÀ D#þ^%êÃx¯—%‚;‘Å4Û+Ö/§ˆ×ïŒöÃ)|Ø1nk(œÆ‚=«-dL3‰îêRôŽÁ°l©øF5êL.Å>ϲ–51M¨2!‡ý‘mõ&Õ›˜\«±‘il[(ìèß¹%ëòo c¦§ò‡7ùc![“®Do§›‘ƒ€ ~áˆIðŽÏÂÆ4)äž¾$Ø9£ÀK2aB&Ðe>™ö®Ýö%BÑH\çLåYG•urÚ¹UyÈEŽ Ä‚þD°+%ÑÓrð//!{×ûbÁ õ0½+7iyª3¡ÁM¡xlkŽD¢ ¿:µ°66…›Š·)í*­ªÎ¶™ò¬É$¿Kz‚ñ@,´%¨ 0-rR¿~Ëv˜iÚA€ìRÙU€6êªBÌZXVæÀ’½‡m Dï;Ôº'â[(8OrÏ”€éxZ±!_p™Z¶6‹ÆÀಪLÆÉOÐz=/ËפŽÐÕ‹^*Š®xêË4ÜR¥†þ¾¾ðÛ3‘+èô2Uå뢴P¥m9 i+\ŽõîTkopCÿ–p(°)êéˆ6Ƕµ½Ñ ›“­õäbÄ!KЛ;GòQ-1ÿÎà¥ÑØs©XˆßVe(B(Þ)ý_À¤ïL’²4Ërj3)õ)ÃP o! ŒL™ì~O¶Áæƒ6“I# ¹4);â´Þ€ V…UôÙí¶FÐåaÏ'| î„W{‹Xë™jN¸¢$”‘¢œÕDxòæp8é…Z·E¢1ñ…UÕ°;`Z}i¶Ñc ̱äÒP¢wUp+¶Ù¹Àºá=y w~¬Ð·(Ð:N5oM8r_†èŒ‘wÙ²µ#*–(Û”Åf4¤’œÅ£¿ÊìÌæg;í‘QŽM&4­‘]Ñ"÷Ir¢ÖŽëïK´Æ£aË‹Bq[Hs¹|ˆÍ£¼::ÅIÇ­Ìü“ÒT(ÿ8+•êL¥7:BV,Qr–jöÎD,Ù&¹8"óœªüâ§ŽWmAÿV¦h>Ê3rÄ:Éc2N³À±'$løÃõÍñxÿNrSH챓™F;Ìp`zOŠxñÑ‚«!Þ¹Ã6øÅ¹IgÃZË; ¸njdZæQYU}á¨æƒÝkœDÏÈ!µ ²Ý°°Ë.ƒÀ[$`£°¼3íë ö¬Úsn<s2ÑH8Í5“n„¨ººÓ õõ›†Pߢ*ùå@ž¶´#*ÜŠo îô‡"Nä®ÂU°Mdn~X‘ïåˆÙÉÌÌÆy¡ˬ#Œ‘-ÎRã&b£Sd@¢±Ùà ízYgá-Oý<¸›40™Òîï“ú#uVLˆµ†"ëMlzÔ„&YV~h™Ö¤ÃËŽùéÆœ+ý6/5wHƒÓÔ¨óÝðiñÞh™TbcÐâXa2Æ«°®”ÁZ²ª¿"sçFÑ÷Æ<Õ3·®Ís·åŽèÎ>¿R1¦¦|µÊÁÕö~áþÿ`Y¥äF<èŒ 9Ž4\Ý+öú`<^¹pÁ¦Ž\{ÓJÖ“tèÚîòXÑ. „­ûše] ÙâhÊ=,Î"R.?Å·bƒ·3Ú ±Ê6ÞyÆùBšA/ÑË}†ËQEŒp©±1ˆ~ÌIÈí†A§Oô)Ú Ç=Jº²P€ßcЧé&ƒ¾FÝ@Ÿ4x—ë|ÐàA>Ä4sÔx ôYÀÔBGhÐ1º)õ2•´ô tT¯Ñ >ÌG ºŽö|”‡tþŽÁߥG ¾—ÁóåWE|Ïàïó þ!ÿŽ(ÏÂàûù4øÇüðàaƒ‚=K?1è— ƒ£Ç ú<~+çðàÉômƒž§ þ)=/4B¸¶³ñ¸(•É#aÿŒ©>ï}Š}Øö$}›irf‰*Í5èôOýsTØ'´ÊÆ_Àñ¥6ÚkràLæ®ÿ’!­_ÉãQ¡n4õ[$xf¾n±¬;>úº%²î1!–_óo ~‚Ë z…^McAžY”€ú­ÁOŠ)üÎà§ŠŸCœr™¡ÁÏð³`eŽäÐàçøyƒ_ ·t~Qç— ~zDoÒ[ÿž_‘Ç«ÝIwüÃ:þ(ÇyÚÈB–ü79–Î6ø/²½,åPšc1ÿ‰™rè× ®àSt~Ãà¿òßr¡É#›2øï¸7 ~‹ÿað?…{éÿeðTžf°›ÿtñ#;‚=ëüñ^¤¿ÍÿZÞÑù„¡‘¸¡1éÑÝÐXÓ ­€^Ð5—¡¹5Á^Mgš:RÔ‡rF1¥íjÚ¡Ó-¡Ý¦CPŽÚÐ µ"ƒÒ SÝpžeš¸Û©‹(Яy ºþ+´âѵw©ì0àés9:GŸruZ‰6%ÅÈpÁæabZª‘ƒZ7:LTcªžMY·uÈÖG†k±VGEi+˜ÜUŽ–&Hì¯Èa­«{ƒˆšHVÁÒŽþpXÝ5ç¸,ÍqÉ!åìY˜¶ÊÙ²´¢7Y¼†¬ u{Zéï¸Í+ÍžA½þxGp7ŠWD5éEµMÅød†ê¨¬—æu]ž}£ìñ÷ô4 *ªÚrÙ†J9%¶40Øc_8ÎÎuÍž}e=̽¥œ.çýä’|u2È…ƒíAùbÛ ­nkîì¼xã¹mk/¶¿<¥WƒùƒkTFgh.ú§8i_Ûµný'=z(¾¡bOž×b™rè)PžŸ?(µµuø\ÕY# è9£™YåBµnªuM–¡&àh¿\ºõäúP©=ÙÃÊW?’–‚oƇ›Š–P0l1jlÖ=Ö]`ËÉ×9®.7©»çÑý¯J†Md3**8 äÈŒïk²P‰]ÀnE%ö“¹ ]eÆn Å”k‹bêSÚ°5Dgꂺ0GѯÊîqI-6‰epS-~ÔI=©\‹iqU.ëéžÎ¬6MXêËó䪜÷vê&åõÌû³±ú J3¯<å;Ó%ýþ°|ç3¿Kvö#¤å ]UÙ7¥£ßËz×™íŽÿ ‚YÖǾ™9Ô$SölÙ˱m˜˜6ëôQ>Õ#šŸU†NÀY™OÃäV膹&—„±àÎè.¨ÄÄ\˜DØýh-¬@4D¼1Ó¬ìO9BlÄ<Ä(„vZw|ÕY@s_Þ¨¿ ˆ‡.3/ªZ1¨j•¹’´û4¼„ãÙ×ç#ûá‘rŸhâA^×z8ôŽàžNÁ;>-Â@U 'Íl敤!²ƒa“Žï´+³·åŠÝ£ª8’¡Öÿâ~j¸‹Þ’8Œ?LD#¦>UŸˆ¦uͤké¤ÑéCä¦S䯄˜®'ÂÜǨT.€Ð/•Ë´«ä.È~#ÆŸ¦›ÐŸC.¹¸¡úF7a¤¡ï;Dšoˆ º‘ë ¹}|<ëÝxQxŠ|¾šAò¤bŒýØQ@ûð<•t·ÈêœxØW{˜ReÞC+("? Оc&¾ lßà±GÊ3ÐéðÎ+ÉÀÚG—ƒ¼ËÆ/·™Ý|“øå»h"ï‡Å€µßM§£¤]·i%Ò*„úuèŸÍGéþuñwi3ßK½|Œúøû´‡@—£ý(ÿÐÖâUøý™ÅÖQ¥åé§B<¬´x"¸£©Ôì²~½ÃVx“šÀÜy<¹“]öÎí"„dì'f7{,ÍžnY÷°ëçȵß‹m¼v)Wj–r¨ãiÛÀ‰×Ò'a¿÷0…"H±Û•b·K…ÅñÈ6+³»Hµ&›Aoˆ „xzýSªáŸAg]ý%ØûmàG©›ƒµÒv~Ì•5ø  `=“­q èwØ ÜÁ…\d1PÜ€¹ó8zæúíõJwÙËŦîjµXS„¹7r2«}ˆ¶wƒE;P¸£Ö¬#UA©Ø×!=Ñf·OBÔ¹ žº héN •e¤A¯Ð ÉÂR(z´AÇ» ýõÐyºT — `®‘±wÔ@åãŒÚ.Ñà’=I´ÑöìúµÒ®_û<µ)œ»’Eø¯sʬ0%³BKf#+#ü^T­)³‹à5ˆŸ‚Ìž†Ìž_ Iü2Uò+Ù«t&¿SødöG ðŸ(¡Ýü:]ÉoÐÕü7ºžß¤›ù-:Êÿ Ÿó¿èq~›žáÿÐóh_g³NèCø;&*îÛíCÞ¾^dþ‰ëw#÷=WÉÜEGáÍu_dÍ‚{}Ï2¤Jº›KX*Üëé,«ŠkÈÓÖ7x·t£ÉÆu£ë¸ íFZirú$4‡ÁñÒäï,¬pºûÄ7–I)£Ki÷ý¤»È•™ÞjG¬.ËŠÕeÉ Vþ4ÌJ•?d%âóD'Ñž6 O—Õ(W¸Ê†è½Ýf^0 Özù±ŒÛ"ÍK…Z1•hMÒJh®6Ö‘_ϳêô¬Úž<§[µêÎM“¿Æ²È»Ã"¯Eüó´j<ѧ<Ê ]’¥‘cÛìA8sÏ]€5µòR@\ŠÄm©}šY „´RÒ5ÊÚD*×&Qµv -Ò¦ÐR´ÍÚ4k[²XÛ’VIÝ3Tð)Öz€C" ·FîÀ\™)¶™ŽzÒYë˜n[zCê6 Å?¯]Ÿx•'ÒLÌ<¿©<ÍÂ쨲®RUÖû2’;mNî*ËáïÒ«,Ë©ÐÑé<îå4µßã«9HE) Qõ²¶ÜÚ"Å£n°X<&–q…<Õ¥ ½!ýñ~ÅßÔ•«³žóðì$d®TF!Ï¢›pæª5Dc†èj(ú5‡éýwS¹Àc¼5Ê2åŒsyžj«è#*Îx -×Ò‡qª«Èüo¥Õ6Yí2«ÕÍæÿPKÄV†š”Ë=PKë‹MR'org/junit/runners/RuleContainer$1.class•SKoQþî000ÎØŠøâ!ÖVËv êŠ†Äš©&­6q9À„NgšaÆØŸâθaÓ‰±‰ ãÚe<÷BˆR ²8÷œ{ßyÜsüüú @U$a¤GY…‚ —ª ðË–SAMA!±ãxNØdˆ•ŒC¹å÷m†•ŽãÙϣ㮼´º.iÒ¿g¹‡VàðûT)‡GΈ ZÛóì åZ£‘MšõŽ ÌaDÐfqÓÈÜ\»å{¡EÐÁF½Á ôüã+  7îzapÊðº´0xæÝXÂÕh3H>µ\Y"ˆ‡lÓ”{¹!#uZvÛ#E¼Ônsdfu6K¡õÖ2]˘/ºC»6.jD-ïj|¬lÜBU¦œg…Ï«aF¡ãš-QŽúÁÎ5)‘zàGAÏ~êˆþÃs‹ãÓ"ìz=×9Þ`Ïü¾‚m *.ixˆ¬†ò!Ë`üwf Wqamá†0¬Î·Íù[ß ÅhôP~Ðç\OOlÔè$ioSôYd"j‰o1I&qZiÄËç`ŸH Ó™J—éÔ&XA|ù©ŸiðÄ\±\ù ©JtŽX³ðJa t2éäþÙ V%TH® èò$| Í¥ë¸!Òq“$•Æ-d)‘ÄÇ?M¼O·ñL.ÿŠ<†žË€C–Îæš¨‰Lw&þ³L• é6IÒêj¬8ÅFÞÜ_/W¾#^%ú‚Ä<°ñ°>ÖI³&ì:î’$Q‹ë"r÷¿Mñ %:¯¥I§ˆØ$M¹D%PKyvÓ×^ØPKë‹MR/org/junit/runners/RuleContainer$RuleEntry.classRKoÓ@þ6qâÆ¸m’ò¦4}‰C±8q FD µ&§j“®RwÖëVýEœ9$9ð£³Û ЇÝy};óÍÌ~ÿñå+€ÇxèÁÅJ U´Ìµêa ëFÛpqÏÅ}†…øíëh?ŽöâýÝ7ƒˆõæ{™Ì5—zÈÓB”)c¨[äË(~±óÌb Ž*RÁÐLù1S.'áÎh*Æz›búô=Å*™:Š¡ú$‘‰~ÊÐi_F÷/¸úR‹‰PÛ!åèe”cqHñª8 óÑYÅlÌÓ!W‰±ÏŽ>Lr†Ú.‘ФV§ ~_J¡z)ÏsA¡î S“pZ“P&”‡M=kN5Ôæ¯·ÔÁÒ_X1x{Y¡Æâybyüöú‘Áûhâ,ú¨£æ¢í£ƒÀGÃ]Às Áÿ9*†rÛL¦q‰Ã\r¾5 ¢]¶þQ «ô\Úd71‡mÔ#«„+dûìyê„"½nz²²a%£ÓÄÉ«¤Ö!Ù >ƒÝJÁò å`ë¼­Op>À)ÍPùh“^£û:•ÞÑ£”ÒQ‰d䂳T¸Ûæ·‘f(0«%«5peÒ—mλ¸EÒ#T›¦©ŸPKåwÚÑPKë‹MR%org/junit/runners/RuleContainer.classW[WWþ†\&$#J$¢€€˜1¥­­%ň56 ‹õÂ@F I:3±ÛÚûÝ^­¶kµO¾j«"u­.ŸûØŸÐR»Ï™!3ì'çìÙç;{ûrýûÇŸºð³-ELxQ¹;0)"å…Ë\(l8ëE ¦˜Â´*fØpŽ©¤ÙlÖ‡ ²lȉxM„Æu†~äEœgs^\À–ͲJ˶B(ø‰î•T{8‚¡QÎX6EÌnLj2?;¡h#òDš$þDvRNÊšÊÖ–ÐiL«ä掵Τs<ºb ²0“GÁÒàÄùáŒvTÉg®¬¹Yˆ“©r*% )¸› Ï[ †€m«i Ø^ŠV,Ãò,¥‰€­å5)‚SŠ1œÕ %Å8VYøƒ¡Ò¼ªPÛÔ,O`CYЬO³BÄ·×­d~>·Äþó«f×Ú¡ß_b×ã"¸ä\.M%ýkÐfã,eR:rX“g•¹¬vÎd;Z¢9¤è“šš3Ôl&jSµå€‡ ÙPf©è£¡uèPkÅ~ ?©DÌ4Pþ G½¤¦Šn h\Ým:Ã5Ê2S_²Y@ëºskŠžO“zU!õ¬öãRLwÛJÂ\B3‹f»M>Ø*zz&ÓV×ðgóÚ¤rXå…»‚Ã=l¯„'ñ”€@ÙF-¡»l.*ôiš<ÏN—а„N6\Æ{ÞÇ">”°IøŸ0ðO%|†ÏE|!áK|%á ¾¦ -_êÅuÇ^Â7øV@uÉÅÁþN@}¹> !‚'D|/á\•ð#3ì0^p ½¢è‘Äu6üDÝs-{º¨×­¡C}çÑH ϳuð,ë¸ñÍõG4—'Å}6 ¹T²kËU+F@­ Vèõv]½¨ð[†¸3Èû½Gµz³0dß ý¥RòlZ֓ʃã1ð _ÔmmtðÂj·3ÌN=dw=Ù°Ç<¨]~§Ó¤Jå¬3o©‹PÅÆo™3(QÕûgsÆ<»U©Ç 8[¾©Ëõ¾²¾ÎxùT¶ÁÛ°¼6<šé)ÙBÏX'=$©#Ы0H« „hMm °ÞMëÎeë=¨gÅVXwÁC¿ÔtHò4ÍÆá ÐÞ±¡ã>*Æà¸'M]4ußXœznqŒ½4ÖÑ›¨%{ê°[°•ÎÙ‰I$$†³AË ¶â®2ˆ‡ÐOH¬¹ÑHˆB3Dâ ¸ÆHev.BÀàùd|¦¸JÀÀîEl¨?†i²IÀT'Ã÷áët0;ïbóÔ, Ö´ìÆÃ¿M Û­uÖVg™­áß°åêÃ7É:÷¯‘lùÒ@ñÛGÌç:±~…¿Jl1Ÿ{áæQâÎAÐ…#ˆ³ÿЏ¬ŸdãymqÓ€K8ʳôE+_LI¢§4KbÐŒƒà ÎXÞΙÔ˜c~ÓW>wœ7În%ñVî~·;ඈ±gÀß-ÄÛhpþ‚z6ÙF¤\ÄÏvº]7ha «®pç"Lúp1àºYy 7#NÉ~”LNPšI’ â4^‚NËé Ç‘L¤=Ê)p3 é1GZÃ<™çh×Ëœ 9"¹‡'ýŽãr»‰Æ1úcåvb)p~Yíµj3Qð¼ø†¥Àû“áNòk)Ðÿ,‹°Ÿƒœ$cOQìNSWçæw|'åõ«d¾ƒ´v"¸×2ßC]flEMÉÉBO‘ät¡Ï´òÝ€ï>šÈàæß±åoÌ 7g!D*gøÖq´qã*øÑ­ÔÄ7{þPK|ÆÑuÌPKë‹MR*org/junit/runners/Suite$SuiteClasses.class…‘ßKAÇ¿kÚ¥YYYæC!GõÐѳDý½‚ðiµáZ9÷ânOð_ë¡? ?*š»8éavç»óÙ™Ù¯ïO¨[ص°o¡&P˜J?&êÉéàn,§Òñ¥öœ_FQK ØWž–&©e —gWL•úAŽèVù”ˆX:O@z/ÖFMèYEjèÓµÖ‘F:8ú•LÎN éÄãÄö?H7ðÕhÆ Õ{zp;÷mÃì+® =2LgÇÛ>M8§;{'†òîK·½ô…ýF!÷øÚ²p Ð BÏÇZ'Œµ¦0rÒ4Ó5q»å?²“ sYYTzŽid™Å#äYRÙȱ­ð‹<÷ƒ«UV9X|º–zE”xo°^çhžPÆ6wAØBÛ ì±•¤ÜAÕ.þPK¹±I(AGPKë‹MRorg/junit/runners/Suite.classWùsÓFþÖŽ­XQL™†’Ëv0´@ gÅ„#@›B Š£$ ²$9åè½ïë/™6¡e(üÖ™þQ¾])²cÉÁ0™H»oß~ß·o÷½•ÿýﯿìÆoޗ𠆫®IP›1%#†‚„ih͘‘0Ë›s2tÌËhB¡͸Î'üQ”a¢Ä[ nÈè„%ãØ2”d^”Ñ…ù㦄[Üñ6Ü‘ðƒ2QÖmØPm[³©{Ò45ËïJV™÷©Õ–ŸWÕ\ÙÑ\^·A†Ä„>kªNÙÒ25ÃCù’5››/›º“s1rçÅkðÍ”µâ‚sK03tõõ×ufh.M“Óº¼njãåâ”f]P§ ²täKÕ¸¤Z:ï{FFÿ4;W$#w’Lºjè·UG/™£–Uâ ëg5ç¨i–ÕѦý•w÷¹+2Ts6'¬ƒý—&†ØuÞ`h“U–ÈzBd‰ì¨ÞšµqõÂn-¬,®³–b(-‚9z³ -p’‘ ÈæNAåîÔøNr1 W[7ŠîÖ+ëÆ4íPÿ%Ú#gN'î-õVHLÒ”ëÏÐÛ 0áе<‡®¡¾ƒ˧K…•Ãжóêõ𠳊­"âžàn„+TìUÉ› X]šÓ mPÍċ⭩rGÈѬ)EÜíXøai¼*q*Ãs$ÒÒ(c;¨0ŠÞ@À¸v©kÖì‚¥Oi—a0H+î!epDLÉÍkMÁÅ&Z¥^6“Á£«O B¥ÏèQ¬¸×¸è{‰wÝô̼â7ŽÁp¤z{ÎLÍkçyEDnîâU?ÃGv3¼Âð̈†U“³*í¾ãêרD©l´ã:¯Î²(u;¹†Mu*!]d5§TÁ>£h>Ç۵Br½¨ùw ^ jœ²çJecÚìuRSZj¡dÛ:Ý!œìcJ©Fn"ŸàS†¢¦z»íÞT±l;©9uQK©©j×Tõ=×V» îâž„Ï|Ž/|‰¯d1ÀµŒJøZÁ6|Ã;c *ÂtÓÑ,S5rÞÅaçŽƈ6£– ç¬XŽnPd4Û+*á[þøNÂ÷ ~Àx»‚Ÿð³‚_ðkȦx{©à,Î)Èã4Ã+kŸªúÕÇl±tsVœÎÖÊW„Þï‡*K%b¹Ê,~O̸Zä·}_iUx]eçLÉ*ªŽ¨-—ò"7¶¨e—6ì²ën¨²3ìmèê –ÕhbgHÐȼ¡â>\2 Zƒû±ÓV6IUþ}Ķ÷.‡ Y’‚\URaŸ «+E”¬” !%u¢E'Ž}êSáâ§‘Þ¯Q/‚P@7zÈÒK–‹ôYÏèÝõl’=E$ú‘eDïŸz„ØdG|Òá°mäAµ“ˆÒsY¶£€û©§W;d¤‘¡žÌ¼8Å]H4Ø™^æ%$ž¢9Ÿù‡36MvÈMÑ2M/Ñï‡h]FòIæO¬c¸O3¢‚­ƒxAùÕ‚7IÅ[„y@0ntQé/GïÒ±‹~ÙP=öÔ¸coÐ{ýóe6yAØKí}„æê»Jv¾ž–t6“yˆ¶e´?ðÉeArœÞc‚4庒Œý€hqz&Z0HÞúAÏôC‚þ G~uqL%Í2,»„Že¬¯å?GXç«øŸ_¬L´áð*~n9B–Zþ£Ô¢ÚïñÞò“éGèœ\ƆL6$—ÑŠ+U ’¾‚¤$†}îæ$½¸caZF„–QO‹C±h±Èf²᱘¡XÌ %i×74\SD´¸¦h•&EhZ;BcµšŽ Mcž¦²¸ñÉ,cc:û›þÀæŠ*7Hù Š‘õÌñl¬£m”ŸÁ ÖI¼M-®‡ãpïXúwl¾/¸Œ¸0.ú¹H½ rŠ@è¢ñÒ~?½9y,³„-µ wªÒ+æ¯!†qœªèÒò`Nx±‰gèàn}àã¸;u—æÜ«ŠGÜÇŠÓi>#¸â˜ÀDÚFõ¢þr:ó]„üÒƒ…]U¨²*ãÞã2ÞõPó˜ôPW•¨Kx¹vÙ]UËNø  4êÅñ=Jþ¾Bôœˆ>MéÿÕžÄÿPK⇦D\PKW@uWorg/junit/runners/model/PKPKë‹MR)org/junit/runners/model/Annotatable.class» Â@EïøŠoü-Lã"XD°,LgµêÖ]Ølü8 ?À7">°Ð)f.wæÜ¹\OgC´<4<4 íHØ™RÚrk•z}³Lø‘3ÉUÄøsÇ^g¡õÁFý7h.yšþ1µu)n3#³I8ÿd¦_&aLßuB}­3³‹XºÀÎã[)9Dèj±$S±e&SJ˜”ô^HövêÀׇÕ6;[! È«P"QÜ,£â|/wQuªvWõPKaø+äÊfPKë‹MR,org/junit/runners/model/FrameworkField.classUmWE~& ä¥å­A¤­¡´JZ¬U!`EyÓ¤hi}Ùl†°tÙ­û"åOøÝ_à?Øs4=GÏQ¿yŽ?ÊãÍ6l6¡æp˜ÌܹÏsï<÷Îì?ÿþö€ÛxšBq|œÀ')D°™Ä¶R4l§°ƒÝ8>•‹Ïä¢$‡²J-÷ð¹\~!‡GrØ—Ãc9<‰ãKéõU_3ôhB¯2Œm)ß)]1jKèBu ërk‘¡·¨š³Ìp9{®Wn!¶fVÃÅMÍÛîqEXe¥¢“ehÓT}O±4¹öŒþ¯øJBu-Í9}ð\ÏÍ4(rÌ9Ôl†ì¦iÕ G.eQ°\Ö]8¦XzaÝRŽÅ‰i=}•k¼&œm²1ŒdsAvÇÒŒ9ô“Êa˜Ž"cùõlîqÀQiîÎÜ×ׂc¸ÔbMWl{1×MÿÙFùô¥9ØFÃnÕ‹ü|ÍÒaçb¹¼¸LˆdI«ŠãZä´R,/,üo*Ëmù7¸r42pÍ.*UóDTWOò]W ·ÏpÁt…µ%dЉ5{ÕÒª5±%œC“Z-š•NœôÜ2«õŸe{Æ †× 9ÞR¾pKÊ27ônñk*Øn-ÎH¡ x_¨º"ÛÁ³Sl²1LÙ©Q¸–Šú&ºŽbyˆ¡N»©fÿÚq|‡B§rÌFû1Ìv!dC8OÉÈó[ ¹®! ¥n}‹ÝTŠ–*™®¥ŠuMöàp«ÃœÔ€c †«gzl»º¾kj†#¬¦ K­ØŒêõf¦"2ª%GT3'5‰ëd#ãUa駤[Æ{¤æd•copT1‡à8©:þšW„ãÜ帆IŽë¸Á1…é894q¼;ïâ=Ž9,¢È±ŠIê†îäá˜CaºKÕ®¥º¡ë¢¦è+VÍ=†)Ó¶.t_莔mâ¤=¡Ù»nE×T†Ñs.½h6½h¯æ=.±ì¾Ä„©ãÅ·®¢Û¡x¯îÈ>&ès’¦¯] YšõÑ| oÒ8N«ï¥? ;ó,ÿ7ú~GäÑPô%bÎäEÏL½?€çcuÄDlëá®b’J• /ßeBN!Ic1âOP„!âÅòÊŸôœÀ4nd‰Ò´÷¡)*Y&o&³£Ol?·yo $(‰d©ŸiÞˆÙëÙs'oøøLLvRþôÔq!Œ¿ÙOMH^¿C¿2ˤÄçëà’  ¸í¤NÍ£$é09ÚŸi’KKžf³^7iF­é'yÏÂ)@´¯ŽþŸB‰Þ ÄáÍ8·hÖÈcÞg›õ‰†9‡ø1yÉ:‹u1Œ¿×Q,ºÀ>¾àã{$>¬ô‡pOL—ÛW:| Œßí¼!æûd[8g0Ìóðµ<ôÄø£,ƒU·¤«0'ä`+PÅÐ|PÛ²µgè‹èOgê™lË)›ë§œr® Ç'Ð×°h[¾¯}ЛÏjâ=|¸$‹¶¥B¿€ÊoÜø¿ùÏí¿¿µ-‹AîŸóŽã²B½gÌŸ\wk^Q.+½uý-à3ÕÀa‰cÞÀ& ,bI`¢MvqÔÀ9Œ¸ƒ%㘈cÙ@w dp—£ne.0ÚuNµyàüÿùê%ýQv”‹’^Él ·Û“U÷Æþ^zò±Í[swÅ×›±~$Rà¢ð£’¤f(»xš§Ô‡²!ÞÓˆ¢›²#t¦ÐCiÔЋ>êþ&ψ¬[CÏ1ú"8N9„´4üwj 7ù²)Ý~srø3¢|Cl-;ý‡^cªã5ë›x¦wÄΫÈï·¿fwöH£“²›ì{˜¬gHh‚ M&¼€“˜åÝuŒ„¤³L{Œ4†å»ó¼?E2¤Ò(D[§‰!Â’Î0ª?B«5°uv¯¼QVÃ%`Ù1½ô ®ÀX£›Kn&²ø„Îw- Ú×ÐĆ&9ùåýb²q¶Ę`?&C=…é½Zfx6÷Ÿù«[çÙO­/þPK(´ék ‰PKë‹MR/org/junit/runners/model/FrameworkMethod$1.classS]oA=ȶë*´­ŸÕŠ–Òû¢©ö…ÐÄ5Ú¦/> Û–»dv¡õ_i"j|ðø£Œwb+b²»Ù¹3wÎ=sÏÜ»?}ÿ e¸¯‡ =<0±„’‰u<4ñ›Ê* æ˜ËRÄUWD «í>sGr¿ë¼îô…íÎC®ø d(¼[ÉF=/,Õ*í@uþÈ÷"G|_¨ÐÇB:û/NuòRD½àX=ó¶Çð¦œ8êßÃäS9bÈ4)ž!×ö|ñj4èuÈ;Rh‰ËåWž^Ïœ?¬úø¦äa(ÈSMšY©AŠVòV¼—”„7M.%C±\Yx©­3W #/ðC6­‚‘rž§Ó)ΑokÓò]„žßº T-l¡fá ®ZX†iá2, 9l[pP7аð5ªKb ;çXÏ„ò¹œ ú[ãô ç"{*8z7žKwçùãàD´Î†ZâXÈ OËÉê½è‚ÓeÝ&w]RkÖ©9[Éûì"¥šªuþ4îÚÿö¨§§*pþ¸%ú Óù¼® @–J[*í¤èË!O-·B³=ZgÈíêÌÞš e×&HÛ_‘ù£WiÌx‚V- ÁIEC¸$ &hídwH63ÛÙÝ@¼Åj[‹¶ØJ¨‹­TD µÝØÆÒ‹—Úz­—ú«‰úž3“ÙÝÙM\ó<™9óïò~×söý¿~Àvü³mx<‚»p.„o…ñíx"BⓜÇwBx*„§#¨ÁwÅã‚ N‹í‹bõLß áÙêp.Œï‹÷¥0~ ÞÏE° OÜ‚Ëø¡`>ŒÂøQWÂx1Œ é«5ø ®…ñSññ3ÁuU¬^ áz[pC<^dü9^«g"xU¬Î#ÂLíø…ø”×Bx]PfÅÇ/Åã ñxNÈÝ áMP î7MÝÞ›Ò2=£`É„ž·’ ÖõÐ&µxJ3Çâ¶~<¥'²ñr¯ƒ\†id»lhžŸ­eHAp¯•Ô,ë3L½?71ªÛƒÚhŠ”ú>+¡¥†4Ûß.Qáÿ†"…z"gÙ©žÓ =5,“¦ƒÙqƒ8[ú,{,~"Gq;'\ÈÄ'h+ïµµ ý”eŸôÐÖŒéÙ®[ë›[rl¹aNZ'õžÓ锕1&õÔ”‚{Š}<8z‚ÇÊI-å$*«Ù´.ü­´›Ö–Þ¬¨ OAÄó;Â[ BÔÔOç¬,ñb kæVOj)#©eõC¹Ñ”‘²Œd¿Õm G —5Rñ>#“•é ™¬–5Œýñè¶mÙÄSçgV°ª4aS鹤5ùx;‹ ŽÛÖ)ÁÖÑ%ò0`Œ™Z6gSªµ Ð|rg}¹c g]/ ­ UäÜJÇ ]8hnÙ¯`)‰Gt0~†½$Œ²„§åÔΘÀ/âï.çjŸžHišäP°qc¿%˜‰ÔêYZ?h2"ÉÍ•RóSŠƒÊ|kI딞ÜÃÊlk®º Z˜^Åà?ðØÊŽë¶‚Z#³Ç6’cú\s0J² Ìi)¾µBá †€5z‚µ3®eÆöVÓ¶•Ì%ôŒ†JCAlIé`V2­™‡u¿OOÛz‚¡$¦µGrf֘ЇŒŒÁ@t›¦%*–=!j² £ ÓáäÇK€Ðš‘=s¬B¶WW ;鮥’s[JY5o/^`ëpª¬@PpGs™Ù–*ÔÔ6Ü¢«T«eÐe¯uwîÜù?­t•Asä[ød†³–ÓOÕVš˜ï2Ç‹N·W9¢¥S®%X>™-ííìù?Êz¡a>X-€Îªí‰ÐF¬œÐ{ 1ýVú8¶ <*îÁNx›c¡°?—J² “5éMv»}¢ ™«è¨Mغ(èè)ƒ¹lT3£93©Û©)&%êœÔÛ„wTü !üZÅoð[vàg(S¥·[¶ ÝïªøÞSу*FpXÅ>ÇiV0Q¤zµïÉ©¤6!×;ïã÷¼^D3t)•ŒŽk“zÔ´¢io^ª8‹ƒ!üAÅa©8‚ Î$‡›ÁwÅ!9¯¢$‰PeÜcŒ#}N3©iy\¨ø,áO*þŒ3죖Iž%*>ƒûU$ð€‚»ç N¿u¯ÎO#Q:݇œ©oÙ"V*þ=„T˜°Bø«Š¿ øMUF\Åß…Ëâ~Þ™|©âøPÅðE_—UŒa¼:Í¢ÄKæ+2„C¾Iïž¡îýÀ9q9¯çk4¼ žì_Cê 6áÃÕ·qu,ê PÿúS¸Nié´nÐÖJÜÒ£¶ô¦-™œ#K çÆ>ÔèÌô¼(ù•–d2ŒÎAËb52ûM«™ÒF¦›A㥈qëµ­ áZùa1‚ͼ±ßq]¯£…«U\³ÞøÜůsüà»96ƒE­ïbé,ÃõÁ,~3Öú*”XK¦¡¶ó]AðÀ ÊmÄíhD‹ÐEÉFþ–Ö"ˆu¤5ÐÎF¬FTr ¾FþôhB3v“+J[M| Ý”¦UìÁ^@®:Þ2°=.¶¸üÇ^r ÇàIÜ&ªƒ«æ zq/¹„p©Â±ÚYÔ ÇZÛfÉã¿–»=XäôÀÔâãØ/÷kñ |’}\I9ÀŽ3à`XÌCõkï)Âvµ+8„Ã.Æ‹.Æ®XC[K-µ7§o›Å²áYÔ Ï`y}}+\ \Õ¯ä#[g°ê5¬^„£7¨! ­Ö#0@ëƒXŽûhãh‘]ž]U9ï#š!§ %åSÒ—aÒFæð*mÄ+,äYk.a_Ã4Âõk¯`qýºþ… 7ð±U,Öû°‹òº¸°»ü"rkãËØô‚Ñyãt³$ùԱǙëqfÅà„<‰GâïbSÆ-FoWâNçeó^ó^óeÌû"gDåŠÙ|ÍW1vÅŠá!äVŒO~£¿â¦*È;84ÒF==…ÖÊã6¿’3Z« $1˜ÛýzYL’ÁwôŒ0¸bÔÍb˰Ð5ƒ´æÑXHXDî?ŽeœW»å “ü^:êd”¢$ÔÉ$(®½ã\ñÐs“ð¼;ózi¤‰hÊ£™­¸Ö:ƒ–›1ñ¸$>»ÖKÊelïõ;bò™GLrŸ]¤\ùÏ¿‚…:“ðIó´ÿ6àil–Ñ4çíEò\àt{ÖkÉÍœNH_z=_zY„{¥)LT.›VÙ\®X6¼H¸ò¢…•†h£Ó[oßBÕ9*·TÖÊà\aÐ_¤Ê«Eoð@6 -'¤"n•AÆý _ªÒF†öœ2p@6Ê \ĦַÑ>5ÄÙî–{Û§ ò øµ¿Q„³ÑÃÙˆ,rÜŸ”_§\îÓR–—ÑÊ…\ë/äwæ-äÏ“Æ{Uåìðëy¯bx%sqt#P#ä™§^÷:ÀQðA‘“5ž“5xˆ=[\ý‚ò¯ú¿ÊÕÙù­;ü ?,Y×Íîùš+¿Ë) (;ý™X1ȇñu(ua|ƒƒ¡Š~EÉzXª ¸=ŠÇäû›<ÀÅtPdçñï¿PKóYY×PKë‹MR1org/junit/runners/model/InitializationError.class•S[oAþ†Ë"v¥+µ¶^Z`‘®õöÒ¦‰AŒ5D¨ÄƧGº„î6³»jýU6Ñ`4úüQÆ3"ú 3ç;—ïœïÌòë÷·Ÿ6ñ0Å$’(%`¥PÆíJ*b+p'MÓÒὦ¾ã¹/w3°g ™ªçúwƒ&ï…"ŽÁ1$ÞÖ¤ô¤O•õ.Çí0pzvÝñƒ-†dÃé¸<¥`(L„·¸ÇÝŽ½w ½÷¼Õ[;Tel;®ì0Ì')KM†XÕ{C|suÇÏÃÖ{ª”![÷Ú49§ù ±àÀ¡á*uOvìnHĶ ]—äÙ‡ÄÓ³wÉE‚< ÁZŒšA UåN“ý%¶&‡;Kšy±83¨Bq݉aafùÇKtÜŽ®3|m+ÙSqÚ|GUú‚$d‹¥é§)M9Ï~Tà e[¨ í¬hšÚøf v|ëÚ*üPKi|Ql`ÄPKë‹MR3org/junit/runners/model/InvalidTestClassError.class¥UëwEÿMx,ÙlBJ^&65BhÖWÕB‚¶i«TBTÒÔ´¾ØÀæÀnÜêã³ÿ„_ë9J[=íñøÑÿÈ/ê@ÔSádæÎûüÝ{gÿøë—G^­c[:f‘§åm ïèâR—5l븂«:®á]É|oy\ŸÀû(ÈeGC1‚]yóAê˜ÂGòPÒ°§áôoy6oì[žo»ÎüvarÛu|Á±Ï-+„ÎcК–ïóšÅ+ñ;Ülp§f–„g;µ,CxÓvl‘cXI>v½Ýྟí0ZÂn˜ÛÙµ}†à¶[%[Ñ‚íXÅV³ly{¼ÜPÖÝ …Å)8:w™AQ·}³àz5ó¨EžL¯å8»Ù$; 3ïÜá »ºgùBù¼êy®GaÅÜÃCË©RŒ½+†3CJŸ ÂBé’Øô`Ü ó§ƒûæø$ÀÙA“›©É'Ll>&¶W÷ܯ¤vVJŽ—ìšÃEË#c¹!¥µ§4%Á¬xÖÎIÅ.Eò8Þ"Ц‘V ‡I»„,”ú »J@†VÌU’ÑèÖ€!«¤6ÿPKG b%ÛPKë‹MR1org/junit/runners/model/MemberValueConsumer.classŽÍjÂP…ϨMÔváÒGð¼è²‘l ®÷×8„Ää^sõÝ\ôúPŨ;mÁaæ œïÌÏïùÀ>Ú>Þ žŽcÞ—„°7·’¨Ì™´TâŒa9¨Ân9W3ÑŸ¬ì\lX‚y¦ZåÚ$j¹É8.ƒþšÐZ¥‰Ñ¥&L^†MaE7@o}>£Ã硽²Nbž¥yÖ½“Ö:wüeÍÁ,£«‰0üï‹?,„Îc’G Ôp-jêhTú­R5xUß7ÍÛl]PK“ßÊ]PKë‹MR6org/junit/runners/model/MultipleFailureException.class•VéWWÿ LÐîhD–¡ÚM[@¬Ñ€¶A0jk‡d“™tfbk÷}ßìj—süZÏiYÊiµ_û¡ýú¹ý'jï› IHBO!‡7ïÝ÷û»ËÌoÿüô €»ð€v=bHqRqùÞ­ŽsŠ:=aÈRÊv…3sÑ(Ú-U3 ‡­ÖXv‡˜‘LJYk0•¶æÈ±\ ÈŠÕ3F\>¦0º›Ö V»W¤2=Î㊈gq•CsÞã°ªÊIIí3’™”¬Y95-ŒcŸ>áËqkúRiºå—}2ƒÄ.~ŽR9™>Ãæ˜ªˆçñÛQD'ºD¼„—y¼"âU\ñ^_Q[@]ù|$&dC“èVÓ̤l`£Š®J–œ(@êÏ+ŒÈ¦5 gÔİnõËÑi%.8Êм!âM¼Åãmïà][Öˆ>…ddR6dß,Z¾lÆ¢N×85>%Ç-ï‰xðøPÄGø˜BÓªù|­¦¿Õìñ ®ñøTÄgÑφÏñ…ˆ/Ùì!gC˜ _á:¯E|ƒo9,ÃÃÿ+Pæç~Ýë-ìU)Ö­.Ù÷C¡|`}¡´Ó;¿ÛáGèf¯‚ð²îEë½îOs*/š ÉŸpÓHÀ—PÁáj—áŠyÝ ¨¼XFUŒä<‡x~D5ÍCû–PÃŽvÑDäpµÃ¿¢îê—Q뼺lü€êÎ%l¬ÀØ;Ü$;.ÜMcªiÜI–›è{g¶~?š©»ìE˜¾wÎЉ8Iî¡S:ÕOgîÅ}¤"ýûqÐfBý¥“ÀaÛÇ^š‹ôÌJºs^¡ÙxÐñy?­Øƒ·ï÷ö†«Ê–m»Ù{<Žì=}$£H#»g‘¸´¹[Ʀ˜·Áý3c.v§M×"6G±e[#YY!m¡ÚÄ1Û{jÜŽÓôtѳ5‡2tP6WPí›Çîwþ¾™ƒQg+¢öPÀzm>’5 ¡¥"ƒÀhlu 0ÃaÇð a®´•ÒÓXUä½ïÆ¿Š-÷‘¥~º÷hÎù&T:Î Ø‘s¾-—$m8“Žó‘ucØSÃq²& '×…aˆlWc˜Âç²1ÌÒÓN»€S~î›;ƒÜ×±1àZBsC±ˆ½·–Ñ£Bm½•«¤Í`_ûgé™<\ :š(Èà ](¨ ]À)úw“¤½ JNÛ³‡ÿPK£L> PKë‹MR>org/junit/runners/model/NoGenericTypeParametersValidator.classV[WWþNH2FP0((/H.@*¶¨`iz£¤ VíÅ!ÃÐ0† ¨Ïý¾úÂSºV ‹º–«}í¿ècû#Ú~g2æFˆèš5göÙ³÷þö·÷9gæÏ{à2^„pÓ-8…/CHa&DiVÁœ‚{ æCP0ÝŒ¯äsA¾_lÆ}9Y’ÂøºñHÁcéù‚oåó;ßËç“VƒÖŠN,Ë!ÝŠ02 tO‚kº³bezR«Ú¦–Ìif6iëOszÚIθïÆhuÃ0 g\ 7z°YlIÀ?eetö”aê³…µeÝ^Ô–sÔt¤¬´–[ÒlCÎ=¥ßY16FS–M®‘´ ¦©ÛÉ5ÆÉ%g­Û:§Fzñy^¿§Ù³åÛ%-gd4Dz™ZófqÂp^rÇÈ%SƆSLI×Ò+'ë$.£2„_³í‹Ý˜ät“&⮀ϠÔmÛ²™ûÑZH®jª àÑí¯±½Q·¸b[[Òllœ!ZŒ¬©9›^ñZV¹I²½o«1kU•lΔSD½þ¹ë–Îq&ëÔ(³ø™•Dã…ž)¦y­â>»º9ÉWš ô*’ÀÜA6bÜw ãF.“Ölì•zÈ•&uy6oy‘wù L¿/F#b±‰y»u¶µçErWëךÕ%Ø¢•£\ÁˆÀ™ú{èí9Áã«lpóYZÏ;†e œ(kÛ0³“¶M·”â¹Qñr*Ö@ë¾h,’¶LG3ÌHÁ´õ +·©g"r#G6=(×ÃR‘‡)³]W`«Ø€#pá[@ÅuŒÖ¥S¹žTŒã3óï)|¡¢ µ)‡-9<Ãsú]à¹\ž[^%®@ST¶ôäAß/¾ÊꎷSð˜?5ø:µ|^7a°rÛ5Û§ò:HG…ˆ³8Ýo7V°H¤aÀfÇ*ªÂõraÚª—?ë¢e25æo‘ñkÆ'ÒNAËI²v¶°¦›KÒÆ÷ÉÛž´ fÆS¤¬­²âD¹žSÖZÞ2éXÜÏ=Ul«ª‰YNó·ˆÿ rQ ò>K½À9J·àã„â»ñįðýÌ™ç9¶¡ÉýhG Žâg]Ek\DàJ2ª t ý|'c¾¢ŸD‰ÆoM3oÆ›Füaï+t „ýãxw ± ÿ~±ýß?±ÉEì øWÕƒãŒÔɈ].ê8ãõð÷,Šhfþq$ˆÖJn¤wº1DIúGKÙE‘ÄGÌî2eÕÍRj†)]qY~̛lj—÷_Œ-¯'þ@à%F^#øð5”‡»hîhÙa\>­”:T‰ÙAÛ.Ú÷pÔ‡Û¸NÏc/ÑOüŽc»èØÆ%ª:=U'UÇ·ÑIUø%T© SÕU.À%¤¢î(ÉM°¼3,ð")?aÓ²L4Ï’È¢DŠÉ–È®ã*Ë#\IÒöUÐ^wiû<Ú×xóØñhÿÄ8 Ÿ±ÄNðØ|3âo „a?û5 ãÝÁÙ¯ûõwm¿ú¹Æ¢œ÷sŒ»©ÝaÀS^¿‚|žsûÕÄ~õºýò³_=n¿¸D!†1ÜpŽí£«¢ð)ož‰E ¢Å£0O 'CvÝïGõŒ 0DZI·Hí2ÚaLóy IÒΓàaiO•ì’%»+%»‘ŠòÌ—Ê3Ϲ"„+Õ–g¾ª<“¼ù!ð:ü„±åZáŠÛC€äWfr·ô5fy½b]©%T7yLWªEU«PoSwÇ•îþPKDî abŽ PKë‹MR+org/junit/runners/model/RunnerBuilder.class•Vk{Ç~×^i¼€m!ˆÁ&JX–åˆ!­:áHlCl‚ëд]Kk{ÉzWY­ NÈ¥iî÷¤—¤é=ýЯäyZåÉåúúú#Ú¾3»’,kå=š™9sÎ{ÞsæÌüë¿ÿüÀøkI,h(&Ð…M¸¥S4‹–4,'Ð+‹xVƒÀ œntÃM ŒçDãu£_Cµ —4\N`žO`/$ЋÅâ¡í%Ѽ,šW4¼ÚŸã5 gÅ÷/4¼žÀÝXoˆj{SV6<Óñ+ ¶N^4.ùªoÙùYÓW°iÖZr ¿ê™ ö6¯‚OÛp–òÇl£R)d'Æ'¸'^°ËŸPЙ>¯@=æ–L¡ÛrÌéêÊ‚é3lÎôMºEÃ>ox–ø'UÙ"’¡I×[Ê_¬RQÞ«:ŽéUò+Ôcçgä×Ѫe—LÖ¶Ë']O‚Pˬ6>Ü¢-TÃý‰ÏͲo¹÷æ[ö §6ÚÞW1Í™u│þ v*ô6µÆÜ¹eϽ,H´ûfÅ•õ¶¸£`{3u«å}Û¢ð“ü¢ë,ZK ãLˆl ÓšZ—ë‘^ËYR!¸b8V¹j‚µü™P’fºKf¥èY’M»[7o¬ /¥‘9Ë_&žVá3µÕq oQÚ(•ÎÊLU°'*Æ­4ÅË¡|¶M\#ÉÒ=sŽdÖlm‹°E†bÏáÙ­šZ˜¸ lUq¡òxMZqúºŠËLsÂ`žµn`ú´LœÄ)¼Þj¡mZÅ[Y:ž֩}-fÛ“¥HWno÷ù¶'s[1é–1©#Õ4ŠÌ^Õð¼=ìlÓa§œVÐaq0rG޶¸ó%fݪW4OZ²Â6Ëû… ³¨4tž2*Ë,ç:ö`¯Ž<öë(à‡ ’¥‰²aÜr|Ós »^ Oxžë͘e×óYÛÂÞÛÞÑñ.ÞS°³ý)×ð¾Žð¡Žð±†Ot|Š_êø~­á7:>Ãç$´Ý­pšS–a[/Èš$(x´(8Lí­ ¥3e·R±ìÕ´å”,Ï,úöêpšeÑ7,§’¶üŠi/¦JÚHÏV-ß ‹oOƒ„3 ¹KÇoñ…†ßéø=þ œû£Ž?ás'pRÇætœÆã¬¸ë"©áÏ:þ‚/…Ìt\ÉÿÏ3VE`uÄ~^³·uó)8¼qY>í\"¥Zu®ßr †Ûâuרa;ÚäïÝ%Ó?¾¶Ü§3÷dsÁØh]Áfª<â8®o߇6®òF]4ߨE+1:^eª&3Qw¾ۻÍxß”ÌE>YJGWÌGP¶¡¯T´»4cF¹lÓFj­ Ùd67½ºøªâ=ØFúi^:äpÚXO&÷gýÐ\Ïú9^“‹®·bPõÙÖ"ìDéMEìðãÁmÊ„i.c„ê»2÷ùÄÈDY‰˜SïáÓ5É5k›¨Wì÷ñ«CØÄ1KÛ,g&ÐÉГ½%{ó×Ñù¨_Ié¶â!ŽTäøô@£¸PQ)ñçT®h¡”+Âʧ\ëd?¹†ØT¹ëˆç®NÝD×üÇ›®†z{©£SZÞ‰8Û“l#ŠS؊ǹú=š”H²ÔçÓÿ¤>ÊÆCí@€NŽ~€‡©y¬Ž\ÌŒ×ù8À?«xˆóö1öC„™˜Ê%Ñ} ú÷èž½…Ôè læ«ùklSûUJlm@}’›gèÂ,¶áÒxŠFæ$ÔC\ISf4 ÔIøÌnÜ‹Gq„úz°GqŒ$ÔH=Ξe“3d• '‡²‡:r=ø»n¢w¾¯OýÉùNbÛ6û5R×±ý»‘« øÜ"cð46ã3â l{ j œÇÖñ%f_50½!s§Ø²‚‡Ìg/4é!¨˜ûªn9È!ƒ±ZXcU¯[ÕÕf«b¦¥IŽx„|FiPdÓ]s"“ú§ÅxçèÕ1UúÕï(§q’HÉ~- 6W]®?'¥åÜ`Ð`HƒÁYê«Ã Öž\“ü5jf$ÜÙîJ˜üÉìH®óìº|ÁkØÝˆM\*¼¼L²&Y“¤ÁsM`’u0bí©0"2¼nÃ8ý‡}ûÂMÜÍ£žž™ýö°Úy8–Š¥Ô/±w4;0Ïöǯáž1­_»=ׯÝÀ½ èë1åoÿûw®z7Sx‘¯pü-¾ÌùW˜ÒWˆñ5éÍ W÷‘ô1Í5JmÇ<½‰3'ö3ÏRÓÊ]À‰º—uéŽDt uÿ 2|åSïTÝÁR m\¾‚ FMê'” üÿ)ç~&GÆÿPK+é0øfPKë‹MR-org/junit/runners/model/RunnerScheduler.class]± Â0E﫵©uqüëbpvw îikJL!mü8?Àßòàpî½Ï×ý`ƒ)Ä!#¤}u‘µÓ’°È÷­¸ ®…iøÑ#J-·«“—ÎʨÞ{„Q@VtÎVr§Bn\i‹o‘]‡²³ oQ·¡ç×®–šÿé„ÙoöP¶²!B¸(ö›ˆÿÇH€B¼#–|§;¿;[þø|{p£}L"F˜Â+m´_ú'§kBpmaœj£îš*Sn%³’ijsY®¥Ó­þ1¿Õ5á8µn#І‹„kŒQ®÷”bé¥W•2þ’0T;Y6¬ ñÍs®½¶¦Ž0c½´ËÕ­nKG¿¡óBîd‚Âüß+“v^”ÒlÄ}V¨œ­ÙŸµÚ:ûÔ¾;˜£Ç_Ю¨­g Y fbœ½‚^ºãˆ1ìÌCÆä{{¬ö»pÂ^À|À{ÔåÆ_PKuÑ&üoPKë‹MR)org/junit/runners/model/TestClass$1.class•”[oAÇÿ”X ^ Þ¥–*,Ø-õ’ƒ’˜P}(ÁÄ·ÐÅe·ÙKËÄÆèƒÀbôKÏ kmK›âÃΜ=sæwþgfÏ~ÿýõ€&e°€»r¸—EÕj04Ô544ÜgÈíq§â‹ r€¡Ðó=nF¡í˜];Ÿ2¤Ã;¨¬3¬t=dŽ#×M?r]áæÄ³„cöD¶2|Ó¦€ÃãêñÇÓÕú ©61ä»¶+^E“ð{|àçb×r§Ï}[¾ÇΔ”Çý¥Ì¡¸‚<«g§¯4¥`>ŠÝ¡uºàŽÏ'â½ç¿ÛRO,ÛáîÈ|=‹áTxz¢Vjsƒèü#UÜ “¡x´â»«nÌ›aÓh'ÙëјٶG.#Ÿs+ ´]ø|Vã©”éæ¾,®í¹A4!a¤šì¶ùCѱe%‹·±&átï/Ü¡ã¶;ÚáŽgiXÓab]G9çÑ¡£©aCÇ<¤ïrŽ{¦/û¸t†úhgX>3 Ci$Âg®ë…<VÇŽ¥ ´Ò©žpvÿ<‡»á£6ێɪ¼‰Å£~rsËbX:!Kí-ÊÔýiê ‰BAž @3'ý!ôè8O«‹d=¡÷$Íy£¾f4ö‘0>#ùQæi”à j›´ó¸€Ë ¸„"EIÌ8ÆèÆ'$_Jàd$#«’þ¤ô¿§<9Ò*áŠb븊k}ìb,µ„k7ÉwKi»Tl•±¬æ;X¡9… VqIe¥fS|üPKX²úfRPKë‹MR)org/junit/runners/model/TestClass$2.class•”[oAÇÿ”-°^JëZª°`·ÅKblH JÒ„êC &¾ Ë„..»Í^jüX&6Fü~(ã™a­miS|عœ9ó;ÿ33gýþñÀže°€‡²y”EÕj04Ô544yþÇ]!õIJîŽÌwƒ±°¦ÂÓµÊP›İ@ç©äf˜ ¥Ó>ø›ucÞÛF‹8É^ÚÌž=ryùhά$Ðv™àëYR¦›û2¹¶çÑ„H„‘j²{^ä[¢cËLòÇ·±!átïo\ËñÛíŠpßjØÐabSG9‹Èèб¥¡©ã žÒ»œãžéeŸ•ÎPÿí «—†aX‰ð•ëz!Åp*_Qh©S=çðþYN–à Cm¶“UyùÓv2óáaéœ(µ(Sù§©D4$ŠEy„õtžô‹HЧ㠭æiô‚æIê FýÌh!a|Cò‹r,P+1`‹(ªmLºâ*n@VàJä%1ã£_‘h|G*÷’‘TŒ¬ Ê(<Ë)Nyêsäh+Š­ã&n‘÷m—b©Ë¸s¼v—l÷”¶ûHÅ£2VUÿkÔ§PÁ:®«¨TmŠ?PKá¾”-LPKë‹MR7org/junit/runners/model/TestClass$FieldComparator.class•S]OA=³ýX¨[¨µ€¨Qí‡,y0%$¦ Zà¡ ïÛ2,ÓlwÉt—ø£|ñ¥&>ŸýQÆ;ÛM­-õavîÜ{æœ9wfþúö@‡èØÎ`A}RØÉàvu˜*]ÔQÖQÑñš!}$<3$Ìâ%C²î_q†å†ðøyØksÙ²Û.eò ¿c»—¶j'“ÁèúDp÷ªî÷nmi¾d0N=˺k÷ûœ _:V7$%K†ªÔ·z$äZ-Þ"ØöGAïD+Ò94]ûζ\Ûs,ɯ]Þ ¬hCmf¡xJçsùuÀ°>ǹ!Ìî¸ÄE»K˜ÚtF‘jŸöU;¦jªRÕ±ÇÓœÃrµ¦Z¾3’a±)ÏBÕú¬Ã†p­?]<šéü˜3M?”~"Ô].ÔöÔ<0`a_GÕÀ0¬Í 3ðoªÿ}Ï ¹I+ …û¼0lÍÑ(z6ÎíY*˜Å1ÿÍ@ Ï©ý%8ÌQoã§ÖòVÌéMêÞ7ÿ©Ž ú¹èöéLBS-¤•A+‹fzH•¾BûB†,}Ó*ÉΰD±1`y¨'D=7 tB!Ê$*4H~žà¸ˆ86†¸˜CE+Xx ¬Q¤åÞïã˜÷#¡>[*ÿ@ªBc€ô$ñÙqvDœÅ:žDÄY<¥HËÜ>‰ßѬÅnÙýnW‡€aŠ_P=AR ¿‰—Ѽ…‡4ç)ÒQBŽDžExüPKbɼ=5êPKë‹MR8org/junit/runners/model/TestClass$MethodComparator.class•S]OA=³ýXºl¡TÄ/ E¨l)²QcJHš „XÊC±‰Of)CÙºÝ5Ó­ú£|ÑŒ>ŸýQÆ;ÛM!…Æ5›Ù¹wî™sçž¹óûÏŸJx®ay )äSxˆ I“ÐPP±*cET¬«0’[¶kûÛ 1£ÐdˆW½Î0]³]^ïw¹8²ŽZÉÖ¼–å4-aK?\Œûgv!sÀý3ï¤êuß[Âò=Á ï».UÇêõ8!6kžh›>¥2E_†zf—29æïùly”¤Ì ¶2½6Æ2ì «Ë?zâÝ€ Xا ~ê3"obH»}F{VŒZÇú`™Žå¶ÍÃãoùå«+2‰òé±ðJLFJ*(c|…•Êò’ò‘ ©†Ýv-¿/lŒ;lß·óBõ­ÈJlS­áõE‹ïÚ²¦†Ù×%³ŽIè*J:6ðDÇ&žê˜Å.b ¿©âÃÆÿwuåhÁ ³×ṴAN†… ”íú\¸–c²6 P¯ì¼­4ª;õ—ûõ=†¹k%–7Óæþ`/üQ¸t7‚Ÿ:tVsØn‹ÿ<rô¦SÔB=ÿ8©;yiòLš©»Xýå  ¦èŸ”‹¬‰i²õÜ€ìCÒ<Ü|ˆ}ÀÌWÄŠçˆ¯ÑøŽD ŸGˆÞD¹8$’Önä3¸M–’©ÈûÉ_…äéÕâ/$×hœC%n^"N‰Ó¸‹{qód)PÉ !ñ š•°dv}ÉsÀ0A„9ŠÇ°à`)˜—‘¥9KÖÖ¨ ÷<þPK™‚ÅÙ_kPKë‹MR'org/junit/runners/model/TestClass.classÅ[ |TÕ¹ÿ¾Ì$w2¹ !+ˆ a›Ì$„% „€„@ ˜„˜õ2¹I&3a– `ë¯ÕÚM[ZªU$¶EeÑ,æ‰ÚEû´íÛjë{¯}¶jßÒåùv_íSú}çÞ¹sg $´VùåžsÏùÎw¾õ¾sçç+<{–à¨:PÊmv˜ŽÙÚm˜c+ÊæÚABÉN“yü˜Ædùü˜Î¯9àÂÂ,Âb~”HXjÇè°Ì…8“ifñ£\ÂËìPгy'¯ŸcÇ œkÇy8?pS-äW÷*™±›ž¬Âê\„…ÖäÀ|\Ì%.µã2¬åéåÜ[Áë.gÖWðëJ ëìPƒ¬ÊÁz–s®–pjñJ^Ë=AÐÀKÖIØÈ¶X/ᖳɆ¹ÝdÇfÜ,áUü2Ÿ-¶Úa=¶ñž[ø±•µk๫ù±-·c»„×HØaÃN;´âµvÙa«¶æ:~ì`]Ïä;%¼_n”ð& ;t¡dÃ]Üzy|÷º™Rµcör¯{>–w7?öHè—°ß=0h‡>nò[ÕH_°»1Ø? „”H0„ 7j¨Ñ¯„ÃjaZ“Oõ'-kjÞвþÆÆ-­[¶5´oÙ†°¬%ê­Ù ø"5¡(³×ô»UM»Žvó’X­B˜Þº¡}Ó–DNµ“à”,6±Êôú•ˆeËneP©ñ+ÞALsÙÛ}½% ©EÉóõî5DRÜ/X†›‚¡†@ Q"¾`€õ×È£Ÿ¿¦U ÊÛGêSøyL#ŠÁ«&ÎvÕšU&-¾p¤~B›BJ¿º/Ú£©LKYÚ¢6eа·}4¢ ¿ê’eÕûˆr ‰èJqDe‚µ‘Ö²Y}µ-Ú¿K µ+»ü4RÐô*þ%äãw}Ðéó‘^s/´uI"‡ý1.¥)¢°ÏYš¢°W èÚ«Ý­*ËCûÍq%y=é•—ÚUÅÛ§9¡Ì´AHíñ«ÞHî0RB …æ!ÌÜqA"¿ "ÈðQ'›Ù Ã"8Ò,ÔlN;§ã›L„ÂFÜ š#ªž6hu}äáüQ-{³´Wl†(Ö«$!µ[̓ݪÓÄñ…lž×Ä`qúè»"¥»»=WU"N«\“±+Çpº€µF(#¤þX”ç'6ÎÑ&iïnŠ»ÊIoGÜ9Ô(s.ê+„Š“ ÊÒ$A°ô+tP-¿¤¨ XOŒöv1n¡aLJzbÞã¾úöºÉZP_墿C”‰Ã ¤_Ù£®WÕÿþk$‹¯Ç§¡¤3ô*S޾L5 í§vƒÖ'RÌÃì¼p0ò2~{ƒD§¤£û#[û——`íÓÔjh\™Ž-Q¹ÐêªLMi©?6ý‡ 4ÂêæS[?7 ަJ;-n ýÜ ¥ÂçdL÷‡ [`¶o Èë/űcaïŸL‘øž¹Þ ŸO–ÅUÓ6i\O‡7çZJ[–5¨wÌÕðv•©&Ź{˜-J\CâvÎÛ¸¶ìÚMò¦ææD|SÌ£³MÊýÈ[–¾°3Åäui,"÷øüþ枆]aÂ?ªÑ®C879©ÿ˜YI¼RÔ‰ÙgÅN¸=8Ð\ŒD‚ýé vÒÔgpÅ%Æ0ñ™ÆVtÀtµÌŽÄŠwB©Žú¹È‘¼ÑPHØyAJä§©£X—úôÖd—Ë$ÙfšÒE)Œ¥y²$uT»8J´º h&Ù ù½:–l ø÷7Ò-ŠzÅ%zNm¬þ3‘°\Þø+ÉåLW1&®˜{MâyÛ[#Ë‹gv»¤u“©ÜrÖÑ}~Bà¿ ›¼øD»(\KR쯇råbÝÅ£05HÄúJQ –¦~ ûš\©yž¢ÐdŽ6+‡;ßsSØQ’ €Õðî b˅䘼¤˜aœ˜©Ÿ éÓ}IÆ™ðÓpZ0çpŒöÓÕBܵ{ŒM ~é¯Âij™äëUü ^¯o¸Ù«è4‰ÛRìÂeóêÛÑ}oJÒ!, }̪.žº lû©¥fÌû³’c#qºØ$F{_(¸ï«&y­Ô?‹Ø|á­Ñ]~Ÿ—®l.>FJ|ᆶ``;ëêª$Ê>%ܧ}\"Êf*ZÔ½QÅÏr¤1+³²wí¦»L0ÒÇ~·Õ{ýú§+ZÏA·]\bš||9Ê3>4-b^2Ü‚V‘q/ÒêŠÔx õ’!#") ™‰ÓË\œ^%à Ò©àìSUê©NÚ3{¼Ôœ’=j÷&R‘Ê ßÉð5øº ûàfðã0"c£ʸ~'ãÍHw¯iI± áâ-TºMÒ ,ÍÇdxŽÈðø"Ì“Ë+^÷qoÅÛd€„·ËxÞ)á!Þ€ŸÉð¼&Ãwà%#éó ¼*ã'ð“ü ï’ñnü”„÷Бœæú(ã§‘Ÿaó±KÂÏÊø9ü¼Œ÷â}2~íôœ“a/„X„/N`ZªJexï—ðÄ# 7„BÊ~æÎj•ñKt@ã—ñ˜Œ_³T5Çm²Ní †TÎVAqò¸p‚ŒÁkt$¢~¿ ?†×%|XƯâ#³/’Þ2üÞ¤£þâÉ—°¤Êðkø Ïrtg™Ãcžq§¢âb8ŠP'Ù D|ýªi²vSpŸ³Û×í$”ÐîIΉ†NÅ)@Û¹#;êï,Œ8ÁûJ–ëk“Ra© ï²ôgXú¯S¸à7àU2vr>ËxŸˆ¹+pb¾6eë¢>7ç|®¡‰ÓpÊø$>%ã)x]ÆÓð„gdxÏÊø4'Ó3Ôƒ÷á‡Ùus.*<Â’)ÿ$–¡3eê¿€\ÀœzìhÆà2¼1¡®¬p¥ý™XY&`¨^Ú2HÚ|ú§dS…œô‰ RG)¿ ®ÛÔ›#œ¢I¬žÊhv\+_€VÓ­Tÿh.>׆´ú:öÑÖø²h’_mƒ¦Ü5ñ,+:+ݼV>ðôt“±ï³Ò6Vsä'a ­°†I'„*׎‰ AnúÝ‹÷ž ŽkßRËú”@·_Ý ‡} ëB¾î^5öÆ*WrÍ:•ï¿…¿—¸šÓœµ$cn‚S܈/‰¸dº„¸Ñ¾*ä& ÐYNæ½J%¤·QG¯‹ÍuˆvMÉš>k²⩪¥Ôç–h$醛ZƒÅTJªÓÌ -+SöØ‹3Ì׈¿œ¤'£Éü~‡+ýJ.r&œ£-s¨äˆ(¾@X˜ÖÒË–^®XJ§m¶Ú?Ù¯Ù77v·÷jÀg: è®Ï1-+¢³A¯É2]›7³+&.Òã?í¥8«3_¸™J hŸ™Ã3…—ÍçeðGX3ÕŸU’ƒÛÓÖ¾"ÈVÛÄ©]kó© ¥tì 0ESˆ¿ÄL÷ƒ{è˜ðþAÕOÞY™Æ/iP"­«²”5Ðô[V ÅS†ôã‘«ïHPÒ>’´ŠèÒÊRq-6Kîp5sèåúšÙbº/¬•íZ룮IDÀ¼%d:˜*tPIµ2¡Œ+Jj©¦£¶€kqš‹R?é cã}?½0½„™Ô¿>FýÓÈ߬Ôntº=Ï@†ç%(ñ ƒåœõ8䎃µ« s²ž©kl­zÛæ®ª†lwÕ(ØŸwµhåÓÄÊ·ÒÓ vzVóE 5P‹Á µà‚Ô[IÏU°ê¡ VÃm‚^ˆ·Ã¢§©å‚ÙB¡ ZU*T±À4ï¤V£4¨öTiVSøñ¥;ƒ¦.úh<›Æ»Ÿ†ŒQȃ<„¶ê1˜†pöR'á˜^guXG¡ .Ó‘ynE–e…T,g=åŽÌbiim »¶(òŒBñ! ‡Î¿Éô%Ó— úUýÐù{âÆª=×’ŸÈ(ëà*j¯&ÓHÁƒÔ‚ÍÂH‡ —æsáðIZá‚J¸ ¨†yð)¸²Hý9ðiêI´6>Ÿ%ºkÝçˆn§Aw“A7‡úŸ'S[‰~Ý+ {ØpÄa=ž¸w@8"f~må pÜaaþÕA¢ÒÌ…Ýœôh»žÚ jóÜÃàhñœ²Q˜é9eØ!OìÝJ’¶ [„Î%Ú @3Ùp?é‚B Yì˜'‚ôqaÓ¾RwøNÚqVkÕ¹5–Öbkù#ÐVUl]Êþƒr„º,#‹h$°‹áÂBpÀ7à ¢,"$áåØO’†@+ÖÂS†®˜ý)LL5dPÅõ:M½3pV×ë&=0 Ü 9#PÅÁI˜¶(%8#ä­(äSÀѳ@O–lú÷4ù.œÚÈ3Æ®Ãb×}×íÄ‘×çò¦ …Ù'¾a–ˆî[MåY™ £ãYÀ#ÇÆ¨÷¬¡Þ2j™&›Õ“I½S‚(¾É]bQ¶¾‰Æh\0J'±<‘Ä÷^’ÄNÏÁ9}£‰c&µ«Ç¡†mq«g –p -5áuY ¯]uÖ*‡u –epd½5µ]U#°<9ºî§(x€`óAʈ£BHÎ iü±@fÕŽ›òéßH}‰fdxþzT<ÿAÉ"S±Ë(Ìë4 Öi¬Ó0X§n0îý'üW‚Á: ƒuêÓ¨þÛ0Øÿ·ÿ½¨·j>¾z¶¥ø³ %(ÃÜ?¡ß5||¹îã0ûx{²o4|\XGî̆öa¸æ\Fþ¦Tì†Î:)ÅÕ 4WCẂÃp=/ÝIí0Üóÿ1ÍÿÍäýkÍþGTà\X„ó çC3º¡Bº „U†ÿëa4ÿ·Ñ%âø?áÿVòÿo…ÿ{ ÿ‡ c† c† c† ÿ‡Sü6Œ6üNñÿ{¥Z-×Ñ*GC¨Gᦓ‰Ž5&pÊ1Àéÿ uå åˆ}‚Ù®£¦³ÑÌt™‰i¹Áô}Êéji¡†x’eìWo2«+L¬ VçÅÿ·À¬îÖÓÅnÏ È´žô€ZNÒŨ› û1~ñ¼j+³¯¢¿)"kN^M¸»$\ 9عØ3p=eAÌÆ¦Cv±á¼ÅˆÂy³a:ÁÀ|}A Zu¹– j€ÒqèéÂè= eãÐÇ]ßY¨>-ÔàííŸN2þÈ@Ž JA?på“IwöMµýÔní¿õz;Ÿ"ðdVöïPK^ÂÛ†äá3PKë‹MR3org/junit/runners/model/TestTimedOutException.class•SÛnÓ@=Û\œ¸. IË¥¥Ä!œ@j åRŠxiA"²ÈCÒHON² ®ìuá?ø$h©àxæo³nH«Qñ²Þ=3çÌ™ùû¯/߬àa WTqUE ×T\‡!²ŠiTÒPqC7T,3dî;ö ÅýÀñÜ­g› ¬Æ0³á¹°]Ѳ!OàuØ*üøùŽ!%œ!ßrÁ·vì]Û …30;žÛ }Ÿ»ÂlŽÖ™ì…”›|äô˜¡hÔN¡•[ ñ ¯Ëf-ÇåÏÃa›ûM»= $kyrk“gzÀ¸xé ¦åù}s'$Ó]—Z2‡¤30›<R¿[Å“·þJP¯äOíó,ÆŒ25>=‚[,åS›T^èwøSGZY˜XjYjPPPP—3éêTR·{‚ûz©«—È}&ª3°Ý¾YoïðŽP`j¸…·5ÜÁª‚»îaUÃ}<Ð0‡5 g‘Õà Cõ¿zgÈ•;†ž9B-ÏíÓwåþë="µÑ,Æaj~éŸÓ¡Õ¸öÆ2gç6„ïDìÌIŒæ/<Ë{Ãý ; ^²çùC›tÖŒ¿ù/¬“#[ŸXe~·ÜBò—bX€†P÷ôšÂ,²r®tÏÊÑFÔæé« "ÒàÏ,U± ô!ÂΙó9·ýæÌ÷_OlãnkX/À@¹@Ú +®j°aàšM†—öൌÜé.ŸÛ𨳨—‘­bß*´ç\ñ# %߉±ýÔ ÜWÏöÈáAÃãaØO¼d4}ñË/´ÛþL¸‘ üáÛ¹`H¶ò\ORØc†t­¾Ïic:\éH_t㣑PC>òÈRê.÷ö¹’ŸSâ ÃFgƹãqâtƒAìN[Rxã¦RzÈP±rEKê€úy:½¯óQMßõ‚Pú“]Mƒ±nš°qËDE·Q5QC¡òïLÜA•¡E: ‡Î)‡Î_:çâp› f[%^"d°þï4Ç ;‹¨ÆÐ_HÓg.~ù Îs/ÖÿqP«v_‘f`©Ñë†ý½Æ°×gþŸ"F ÆÒç^2Ê4ÛÙV»ÙÙ±6é™åéÙ1«¬§Fk„—`Ò¾LÈCš4 öìä[ñRõ—þŒL¦÷™ç ÌÌ&ðR”ç2Ö‘E[4„Y²\  ¹$Ï=¬\#[™v IVki”H¦p‰2¬’¼N«D6C#+O±«ØzRù PK2fiø/PKë‹MRXorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$InjectionType.classµTmOA~–»ríõ åE„Š/(j[´‡J?µ!h¤¤¡¦/â§£åêõŽ\ïHôWIIÄh4|öGg—jÚH è^2“Ùyf癹ýùëë/@ÆO‘T0¥ ­BÃψ©ä|Ι0&¸Ö,3D åíj­R/ÔʆXÑi™ ßrÚ‡c“A+:Žél£Ó1; µ’ë5õVàX¾îÜÕÑ Ïh›¾éYÍýí6ÞoÕ °"¢*µkùGoÿà:‹Ir ¡ÍâFiAYÜy]ªoTêiôİ^Én25¤rÁ= Î—,ÇÜÚû¦W3ömÚQDîò!ÃQ²Ô2N Ý6œ¦^õ=ËiæRÃa3Yr†½cx'Ñc";ç¾XP‡òeXe˜¹‚d1µCÑþ‘EŒT­¦cøG'IIîçv/ø°/và ÚùaT·JtÕªx sÓâu¥®sH†3Ó0É'dJ£±y©àCåæ j˜ÅІ»¸×1Ä5L Î06؆í:TÂt2Õ׺ò>?ŽÊ\¿ v Ùþ*p¹«nâ ¹ÜÚ2½=1ÒÚ¯ =Áu<ÁûHLãèÚõ4_jì3F. }"‹á6ÉQá›#ü,ÉK|#b7:9ý¡ È<`d AR»„áæ…ŸºJrF¼~}€’^š?ÇèéÂÜçÜñ@`&¾ =&[T _™o÷&éá3D„¡Êˆ†¾“%uéþïÉ]D«g`§«SéDP®e”zaQèÇš ¤0¶–ø PKžI½)^¹PKë‹MRYorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$RunAfterParams.classµUYSÓP=·Bc eQQÙ”¦Š pAuê2–å§.m M:IÊâøKü>3*Î0>û£¿¤ [«S§“Þ{Oîw¾å|¹÷篃C£xB#D„!#&"ŽAC"†¡xȈ€Q·ÜŒîô0Ì&-;­¬åMÝUì¼irÛQrª­f¹Ëmý=_Qž–¶þrž6ŒMªã¼ów-ênæmiŸ“ Æ ¶L1|ˆÖ†²KÖZᆒrU—g¹é&’kꆪä]ÝP’ºã&ä†à4mbhNê&Ï.s{N]6iMZšj,¨¶î­‹`ЫCEðd•Üúþ ^xýà8-çk’RÿI/T´ É·\†¾*r¥ «ž-E97CÇÉä¶s¥O×hâ\W³^˜›–½þŠ»k%1E´¡”ž6U7o“ZI×?(ò7Þ<ñ$ÝܰÖyc<ßåi{Ϻ![´“«6c}§­¼IB°Ìli<çê–é¸C딕·5>«{唫ÑyØ+‚$HpWÂ=Üð@Â82´-êd¨fZy³¼Æ57! !a“¦ðˆ!õŽA9bÕMÂMÕ(Ó;%¥dFmGÎelk³ÐUÏÿ¡gsöD¨R*jÆ4wKó®¨|ŒÎæ«ñ)eQ;Ï{ÇÐB,å y %Ù•+âדXžÕBj UÓ¸C§í·K5:å -DɾŸ™­œa9ú7¶Æ£gwV0–ÏBè¦ë$D7 ‹D¼n¦Y€ a›hƤŽÅ÷ÀbƒCì ;Ô¡™þ›h>£»d´‡­º},Œ´þì":|Ú0.¡“Þ^ö]°"r…«¾ã.ru ׋®3„{L½ñ}Ôí#x8g]!²¨ÿ1¶ ö ûw|ë£x¾QJèÁ÷cñô–ãéЍÙ(ŽZÐGh~šßô¹n¡F‘°FºX[ø PKô’óÖèPKë‹MRZorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$RunBeforeParams.classµUYSÓPþn)„ÆÊ"¢¢²)M ¤(.X@„§.#<¥åÒÒ¤“¤,Ž¿Ä7õ}dFÑññ™åx’.`)cuêtÒÜûåœï,ßÉÍÑÏï‡Æð0€f ‰ ,BFDDÃFDŒBq‘˜€17šœŒfÆæ¦•V6ò†æ(VÞ0¸e+9ÕR³Üá–öš¯)3º™Ú|òŠ ÆguÕ¶_zV+š“yQ²³ãÄ8©‘É4Ûp}(«°dÍ5®+‹Žêð,7œxbCÝR•¼£éJB³¸¼ÌàŸ%#†Ö„fðgùl’[KjR'¤=a¦T}Yµ4w_ýnÈš2˜áë¦Å½‘Ü^vœ¶Ëu©i°" µÍoð‡a †j„¤çLù„*Kgèú½¾Ý\©ÆÊ6MžkÞMtÛ´6Ÿr'c®Å§‰6°¨¥ ÕÉ[ĤV“ö¢üM4W?I3¶ÌM^À†ÏYéïz7e‹~rÍn ¢§ä¬™7H ¶@ÀÜNŠçÍ4l·h¿hæ­Ÿ×Üvʵ(=ê6A‚ˆs$Œ ¸-áî ¸'a÷:V }ÒU#­¢ŸNäÓ_Χ×£a£<úhçá~Bi}Ý㺺‹„5Ó×µ¾_PK¯ïMë†PKë‹MRJorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters.class­X xT×uþ¯43o4z Y 0Ńh´ÁØKam–ƒmžfž¤Á£eÄMºàfqÚ&©ã´¸©[× 'ĉ… 8‹ÓÆ‰ÛÆuë¸mº¥[º¦iº¥mÜÿ¼÷4óf4 9Ÿ>½»{ιçüçœ{çÅ}þ2€M*Vûð•^ÀW8†ß’ÞoWâkxQÃ×¥ý†Ì¼$T¿àçw+`à÷˜À7eø²|~_Ã+þ €jü¡¯Jû-ù¼æÇIûÇTáO„’2¾? àÏðç2ü éÇw„æ¯üøk?þ&€5Bùmüm‡ïŠ_‰À?ÊçŸ4üsMø ÿÀ÷ño•hƤ÷ïþÃÿ”îK~ü—ÿ@»0jÇ5ü0äüÿúñ~ü(^'{¿RÜ¢Êüªœ‚•' ¼xI“òU`BiÒóÓ4ªB†¿ªô+ݯ–Q5µÜ¯ªüªÚ¯nªùÔʧNSõ”©V Ñ*MU«5u£¦8¨V ¿7iê¦JV!M­¥JêfÙ±N¶7jj½¦6hªI z_"a¦zâF:m¦–dÝ35l¤ŒiNTqb·9‘L™öŒ¦Â ËúÇÍH&–LŒš13²frwÔé?nœ0:ãFb²sh\·)x$P¨q­fR±Ä$×|Ûc‰Xf§Â­áþdj²óx–ÃÎTV4KwæxÇN›ÑÎ139ËL ç$nk>Hö=É(ÙWõÇæ`vzÜLãqK`2bÄ©˜ŒIOf*FM{•¶;žŒÜ¿ÿ ¶X&±¨Šä ?j¥°åÇÑžÖÛ{2bΈ5iÝfŽ#)ÓȘcϺps)s.‹z`캥±À¯³.¯Ê4ÕC3©l$“LåHЍzcf<êZ¯žM33f4wN…›]‡ê‹ÇÍI#Þ‰˜étŽ†Ò•¸*f¤Ø4– OMf§ÍDƽÃ;!¢‚.ò”9§&–Vbn#‘Hf [ŠÜáZKØpØmÃÆÜHDÅQó$•죒¦™R(…Þiâ2ÞÙ+ûf“©ûç•(‹5Ò·¶–ÙL,ÞÙG®ÍʵՎ‚fÔ¢Nï>åR²Úµ§?–,Ü è³|ÚGï‰HQœå@³¢0èb'ºŠ˜n_êAv’«6if­à.Äj.¼ý¢ŸM±c &03SÉè¶’¬|ÓÖ¢Bó’ù0!0â±(íéB/gÃÅ–”<â3S©¤d±¦&É«36•JΊå¬óWŒÆ&F&+0m)fzµm"kù¼^¶›*Væš8&¯ÊlÚdEcIÌeGú$3ˆ—­HV^hËNâ&6‹Xàîd„Zcâõêö¤I‰§}©`¸:sÚ =Ï…9cI¢ªg™yÜ…EaßÕÁ‘ß¹´ƒhãg2ÝöÆ¡íG|[%ZÔCŸ1a—¹:ÂÞΡݹ|ÂéÆp³»þåsMgžŒŒ×.Æc¤RÌ7/…Ÿ'n&H»ÜˆÇ Ô æ7¤%×'³¢´ô˜¹bLÝ —(ोú=£Ìu‘©c¦‘J5ZJ5:J5Îòá-™ŠÆFÜRRž&ò†NðúÒ^ø4ZøZr õ¶"úù#]ƒÞŸIÚS õ¥DQ—µ‹zµŸ.JÄO¼ºÖ<çŸæ.Êo¸&<“ÌÙüK·©¤ÇJ9lM¸ïZÇHî窣~m¦ó¬*š¢µbÎËå·à^ìzÑ×,œ¥§Œô yR°˜°?赿¸±¤™æ<¸i‘¬\pm+ØlF·ë-á§l^Â{ÃkUWB“e_|°ÐÞ%œBàTÈ/}=FV¸má’ãæ’³¶y›Ë!FcÓ3qÓþYA~‚°ƒ¦¥`KK¡2MK| ²ªÏ?ÕÐC‰Â_*{†GÇFôŒ ¸Hï6SÌ*“¤ÞÞ¾½ý¬MåF4Z]óFâˤ*2EP¦Ìo5Éû¥^ÔºŸi¶R4ú«úÎýZÓbé½Ó3&·®Ó#g OðR¿­,σÉv–Ï|[Öˆ;©¢èе¸Ç”¡F^@ìÕÈk†m5â˜æJ‚£ã(ghiiCÙ”Kë‘ÿ‹ð*xßEhexJüÏ â3פÅÑÃï:øÑHyÐŒ&Ìpf…ÍoC °zid(5˾‡í þÏ⤣Á#œú‘– ô?JÊÑ;>aí\oÉ’Ú~ˆtËÎó³üü%T¾„êÃpCMÍj¹³®¦ž9¬¸€•Wr𮀗ßV~ÛFÚ±›ù—×vÄÑÖ‹œÂi—¶k¸þöœ¶·³mªZæ°jÁ–ÏAÍaõùœ(Ÿµ|›ÅZ·IÖn†Ì3,ÛJ‘žp7Otc«euazù1Ür krçkóY«sxSÍMYT2ÍŸxí[«›ç°n€Ä ƒí±^á—ñv6(<¦.OÐ3‡p—7è­EóZžGs—/HG·*lÕ‚Þ6á\¯mžCÛ9üf—ÿÚsjtPVÐ;‡N¶5݃MóZlîªVýsxó¡`ÅÙž;…­Þ-B¾Õ½÷Vç8–кšÛÜÃÛçÐ%4Ûœ Ûñ[^Ð;¯œ{}uÛyZôÝø~‰î•öUl!¸Å'û U`;-½µØ‰½üF/ÃázfÞ‰>{Žpw?ÎßÀ]x…°x£x cjŽò%{å×Tr½?w ‚Ô;Èá ƒ×ÅOâ§ØKáëøiü %¾—q?K\¼›Qô.~5Ê}ïÁ{‰†Cø.Âû¨'0AÊú9ü<‘2Œïãð~žëšìµÀÓ#¿U°'ðìd+˜óÒ|Å wÒëóðÐ8›H-±t¼Åpz‹xb»l[3œtP0îA|˜Vd]&êÎ:a3é°®—,Ò-‘þ4v~öHF)we”8µ›fØ$PGyõ9õxÔ2Ðrç‘™_aï#–Š¿J>Í /Ó©®Foni½€=¶ð½Së%âÚ¬˜z.0ØfÅ‹‡12^A^8.v¨øê}¢ºÞg³ðDŸÀ­îí¥Õê}¡w°×– Þ}¹‘'Z¿ÑW†CçPÙ^ï;Úá96tîõtùVO½§ýòãȶ×{:¶zë½gÑ^ g¿Èñ§;pêª÷zžÀ–«Ð÷KÏ+½E;ÏxÔ¹×ß›÷ŒBz&KÏœ gfÑÀ$¶Ùr˜ùqœ)íIBþi‚ý<ˆ+„ü „û‹üõâ!ÕŠÕ&ÂYr™µÂËŒÿ~+ <Ü=_ãªÏR†ÐyP§¬Ð(CƒªÃ¯ãq+p6Ïソ<.36ý=ÖZ!B~O8È¿—3ä„:ÁãÀ@KÛ Zß¡¶<èmt>L}?DÔ=Âñ‡­³„ì½9tÖá£ø9û°L ô?NëØ²fy"¡_'ɰÃs¸K@8"ÓZÏaÙ%Œni¥ð±ó9ó¬x”9ç#.‘ër"×Y‚x™Â*|Â2Ð|hØ3Ÿ´”xêjJ(¡ÄA[‰CÅJýH…£uRC ðR¤õ4ù1Â!ú†ÃÊ‘/PKP7“¶PKë‹MR=org/junit/runners/parameterized/ParametersRunnerFactory.class…NAJA¬Ž1«‰àÅ[DpÈ)‡œ#xn'Mœe3zgƒæi9ø%Κˆ‡EÒÐtWSU]Ÿ_»\d8ÏÐ%\[ŽòXy/: ú$e|vñõ•WEK¬? º4yå]4úÃ,Íú—à¶²0MÙè¦!2û/#Bwüfe]ðe†^ÂóP©•‰+„põgrˆÅ6}¿ËyÄá±,ÿÈ —µ)Ø/Íì% ·M³UXHaîÓÉqá¶\§«í-ÔEmÂ Ú Ÿ&TÏNê,í-œ}PKtŠÞÖePKë‹MR8org/junit/runners/parameterized/TestWithParameters.class­UkSe~6· a¡trµ ÷\‰Åª¥\Ú’ZÛJ%‚Ôª,a›,]6q³«Sÿ ãgu:Ç:#¡cgœ~sÆåxÎî&„$ëŒÃð¾gÏ{.Ï{žsÞüõ÷ï¸ =‚Q¬„‘à> ãnw ÷x¹/âAa|Á*²f-‚ulDð)/£îò™ˆMVçø#Çg9ŸGЇþØbi;Œ/ÂØañ/_Šx, `(‡ªyõ@ùNÉèŠQÈlZ¦ftXjÅÊêJ¥"`bµd2¶¡YÓ6 Õ¬dKûªžÉÕŒÈ#RVLŠgÑ©€7¦mizfU«XqS+Še›”r²éx±ÂúÞš·–É%´¨QÎe÷b­ßT3ˆø]:KF.¬j†ºfî©fNÙÓ2”òо¥˜{Ê€UÔè:×Ú$«_WûAÝw’nkVq£^Âé|ÈgåZØÇÿË}ÚVï(TkÍá¶/oÇ®D¹3‚§Èêm(î"·–åZôFž§[”o`7\T*E— ,~_@°lj Z 9dª[·HP¿µ’õÇZÃÄ‘oiïà|{‡°dU“2Y%÷êÔ¥›%ÛÌ«w5¦a •µY#a _QñrE5Ê3Õ*ÑC­R¡³"¾–ð v ó1I4Ïõi40‡gULµ~*á\–pQ½g¥ºmšÊ3®§WDìIÈc_ÂÆE¨ÞÇ"žH( (`î¿7¤„ ¢ 4÷Ê­éûª)a ¨š¾è •t&ú=h¼?•pñæ‚;4R÷ AÓ r3=“-ªù§D¢h”¬5[×\oCgk«ÆÛÑ:kh°lI×I­• §õûÛðƒdÔÏÚg¹ÈÆc-ïCk7÷4C0ö¯£BG“≽çF°6J!¥\V}é6OAëÌz-4ÙׯàöÔ<=ô³ø!sב$sã9;5èu'Ù‡Iˆ$OašäÒGb¸~¤H–¼³1‚í÷.&50­ Ÿw¶ &~Cè…cÀ€BŽrÒIê zI¼K?Ç­Îb³s¬­ó¡ñµ8w6;§Ú8»ð¯‘ŽÜCP&Ÿöé‹ó?.Žðªv—FF‹ ©Š®šÜYE÷îq=‹ìò*­sè&H×3FÝh^ÆòC\§\ÝÄ’éqð²?÷²¯'’?#8Nþ‰ ÿ8QÅ…$ýÿÄÉ×èyȸR¶‹G˜`4)‘|„~Æ™r°öA ü‚€ÿ ¦ÛóT‚Ôv‹ÔKè¢We·ò qžm€½^ï‹u²]"Wˆ¬eÒ1ì›uηo ý };§.„*.U1 ÒâVq@reÂ9\ÅH3CJ×é½åXÝþPKúåÞn· PKW@uWorg/junit/validator/PKPKë‹MR-org/junit/validator/AnnotationValidator.class”moAÇÿKy(ˆ¶Ö–ÖúP±ÖB}¸øÂÄÒ„`Išœám³À–.wͱWõ[Y}¡ñ…Àeœ;0…K.¼ÙÙ™ùÍÌfgÿüýõÀ¼L!†Ý$¢x–ž'°Ÿ@Ža½Z;k•ô“÷¥æI­zv\¯×ê †U½Ï¯¸æ(ihºªC²!{&WŽ-öoGºÁÍžvü¹#.•´ÌÂEŋҔêˆa)—o1DËV—âWtiŠª3h »ÉÛYÖt«Ã·¥«ûƨºC†¼nÙ=­ïH»â†ìreÙZÉ4-ÅÝD­±òe|á‹nÙàC‚¼ÍýG±ÓöPP5†ÖCåyòsÚVãS†Ý}‘LÁ78ÛQE £Ëpœ§bóødÙ=×ymÅÎGÐ †Ó…ó7·9ÓÜ¡.,*¬"ÛÈw^{ñɇ¦0ÔOÜár±cø#jXŽÝé¾í­9ï÷µ I#…[iÄ‘H ŸÆ^м…Üiµv_tÃÆ´Ô²ed£zÍI1¸T_Üêiür3—ÍÒg£ÏƒaÛ­†ä2i$ÉÊÜ"iM“E#ÉHÆ~€]{.·i{ÆuÜ¡5=rÀ V=à]¬‘—üŽ´Éè7D¾ÞˆÍz±™Ñ¹ëîîu\Ìí2Ø A{@ÛÂý m›vð0í0€ö'´’O&×´ãʼnŸXúŽÈµwS`†Ö¬öôPKn¢,Î(µPKë‹MR4org/junit/validator/AnnotationValidatorFactory.class•U[SÛF= ¬–pI‚Ó ‚6ÄÆ€HÚ¤;4Æ/)ö8å‰YdÅ#$,™&¿*igÌ´Ì´}êC~LB§ßÚ6DŒ¾]=»ßù.;ûîßßÿp%3XÇ4î*˜Ä=_Eð5î+x€o².ã[2’ ¬!%Ƈb}S̾S0ŽG2Ò‚¼&㱌-†¹r:›y’.v‹û;…Ýýt>_(¥K™B~¿´÷|»ÈËò&×ß²uÃuŒÀóLÇ׷ΦOy£–ãõ$ÃxѪ:Ü<“!p[*ëzUý0p,_orÛªpßõôrgf¾°üZ2”‘v×ç¾å:å÷Xr“4Œ¦,"n2 ÇâeiË­š‰¬å˜ùàèÀôJüÀ&d*ëÜ.sÏÿ]PòkVƒamP;Ü ûŠÜF Ï$½!†\ìòãÉ0Íü\åF±^ïÈæNUßþÙ0ë‚Dk7š}ºzÛ.‚Z ÙS4bØüõk†É>O[6o4„—óéU_‚‡ɩĕê?–2ìn(E7ð sÇçÎýùV…GQÜRq7T<Á6Ã½ÊØQñ=žÊȨøÏTd‘£"…d—áVÝ ß:2ûoö‹¾g9ÕÇeWLÊdòŒ¥y¦aZM³¢×LGkw1µaš!Ò§©È£ â9~T±+Lt«» «W» ×zQMç«X5É.Ʋ—¨í?€´ËúŒZ‹ªêt,Ò\ †ˆcgœ†ÏƒvÍÄBýFêŸy™>hPü ë!r `”×ë¦SaXé?£SÓs;Ε™6Ê”¨P£Ã;›ÿD8ðÓ/J´0ü¤ÜòßY~“ø # ù•F Ü!*µ ¿èQßlH§ß;…²w‚È”ÚÂGÄÿ˜†&¢Ò ®ýI~fqŸÞ³1’-t-Ò‹Â"Â1I gI×<©J}€¬ã‹¶îMŠbž‚_ ‰P _â6ÍHo71[ÄòA1â‰=BKä/ѽƒ,2†•³Ä ®ø"§˜$ýS¿bèm;=½ôEÈ®¶SªÿPKò’jäxÕPKë‹MR0org/junit/validator/AnnotationsValidator$1.classŒ½ 1„gý‹ž^kga!ADÁB,ûxÎa—èÃYø>”˜Cì,Üag¾çëþ°D* Brt×:×[c5a¼bvAãØŸ”5… ®^Tꦣ çÖyÃå^‡‹+†„¹«KY]Ùyûîå/ÈtI!Ý1ëzm•÷Ú²-­âRΕÎaö/1›D^ ŸkG!¶º1;èEÄO↚–õßPK-³TÄ©ûPKë‹MRCorg/junit/validator/AnnotationsValidator$AnnotatableValidator.class¥VmSW~n^ؼ¬€ ´Q[°$‰Z ›¢©ÔªF¬ØV—°…¥kB7‹…¾w¦¢_ûůµÑ¡Î8~ê‡þ…NÿJís7oˆCÐaØû²ç<ç9Ïž{nþþïÏgNá§úp=„~\Wp#¯\ô!ÆṀq ËÇm rûNŸàÓ0‚ø,Œ»¸§@ a… ß-…Ð ]Z}®`Y.ˆh(X8œÎåæòéüì\îî|:;{1Ÿ»~7“žáp[àd¶d-'V׋†x ™Æ’f—¬DºX,Ùšm”Šóµ½ŒVàssJ #eÐzZÀÍ øfJKº@WÖ(ê¹õû‹º•×MîôdKÍœ×,C®«›>{Å( ¨F›õêl±¨[3¦V.ë´º° ¹rÝu¨¹ö7sØ\«ñ¸øzЩ|~jšø‡–uÛõ¾œ)Yy½l;LF]Q¬u™[9qŸr™‰ºÕT,»ª=ЦV\NÌÚº%qˆ¼a,5{Ý"ÙéWÅ©Ñì­¦¨»¸ Ü‹¶ûñ§^ßXc°nf"k”m¾Ù~RÝr¥ti£ ¯I'¡ýµ„\jŸÝƒJnŽÝÚÒ’!‘5ó’e•,Buï´ kn鎷%ˆ€Çb±»Ðœ/S©Í Ýà>ØuÒªfM®5¦ÃmKæ¥ÀÙWéå /‡Û¥2zµ5 k»\؇ôª (yÂY.¾5íÔZÅÜ2ì–æ]6ô 5€޹@û.ntði–Å>p§[S/ÒV̲r·óMì ÕîáÐ(øB‰Ýޤ«õš’Þ³q’±öâ%HÌê5‘Jå“ɶÊdÚE}nqU/ÈB Ý(­[=cÈsipLz©ˆà ˪!FÚ²´M©ˆŠ!W`ª¸¢‚’Š5|©Â‚ÕŠÞÆ1ŽM;ƒ€òôrçîy0Ì5O}çl£œÉpÿrìàxþ)¼·ŸÀw5>òþ-täNlAøœž#˜ôÅ#¾'%ý£…=¸õðÅ?£¿ÕitÀÎ €³Æ8˜À9þMaÒ¡>Í÷ þ ?1ÒÆ~®N’q/)žÂi¢J519{—XÂA;K“lœöŒñ:Æ„ÌÚñ¤UûqÚWR>Ç6¤JÊ"Ç(aî/ÖRÙ‚*Ó}6îóŽûûü}¾_‘9Ñç?ìˆtlaŸ@R‰(½è|Œ®çèL"¿päwtG±?ŒG‚­'„*¢üì_l¹t‰#äð PA\ üiò™áê".#ƒk|.puWÖÈð2z¤rA¾ "ÅüCô#Ê4kf’]À{Ddöi¼Oe»h9CD/õ¼ŠKÄõ±Ö>¤²*ÅŒëÊ.:ºKe\Êž¡U%Öx=ÖŒUñ¬{NÔ=_î«øJµŠåè©V±h]Åýƒ:%?²$-vÖ3CåêÇcÐñÂOÑËwàt?rNS~”Á*œæð‘3^ÃQŽ=œõaG|!ÌrDwàPKŸ[WŸXYPKë‹MR=org/junit/validator/AnnotationsValidator$ClassValidator.classµ•]OA†ßÙ–nY—ùRDH¿d[©DƒII„¯ŒÛvR—,»fw¶ágé /Œ×þ(ã™em×Ú„µ3™sžwΙ3³ß|ù  ‚ªy Y4QÒp+* 9]VqOÅ}†LÕr,±ÉÊåÒ[n“3ŒÔ,‡¿ ŽêÜÛ7ë6ÍŒÕ܆i˜ž%ÇÑdZ¼·|†á-ÛôýÓ¶š¦p=}Çq¸ÎrZ_¯¹^Ë8 HÈhÿ²2ž9Ž+La¹N×uñwÒÃL‹‹ÈRjúÛ®·Ï}Ú9C{Tõ# Á6:VùÚ¡Ù6 ÛtZÆŽàžäyPt9 0ä±gµS…þö²ÊÕ~›$6eŠÇ¢ï‘í—Ënî’ï/–mÔ,_ÈÛÝcÌ'ÖbþëÆª±D¾8nð’¦éÝ?Ðe¸_J”ã²l* K‰*0€Á8ok±º¯lÈÛWºˆÃDL5vûšÉ)ýI TÛs¯Á·-Y—Óýð+2•:¡ÉfAÅªŽ‡XSñHÇ:3ÌŸ«¤ã:¦UÜÚ%߆'•†BòCa˜ì–Ï–kÛ¼š0 ù–Ó²¹pYU ‹¹XIïÖɰ_í-',n†©ž÷‚7£·mõ/U\:—4lÌÑ% ù€"›Šÿ Ê4¢›€LBùDÿèrÎîbˆZýÌøÆ0NVÒ{VÉ,~FêcóëÐyêÌ ã<€ LÒúTh}Zªž÷œú”ô/–Nîå½ ysg^70mP’•ˆ|sô)‘oEa¾$/é§Š¥o8A¦—¾£kº†Ùˆ®á6­*£×$¢vÂ/œ‚õÏÝŸáÏb‘ÖSÑ6ï`9ìs 2…’¢sª`„äæ©Çh–N­‚¥´öPKY4zÏ£3PKë‹MR=org/junit/validator/AnnotationsValidator$FieldValidator.classµ•[SÓ@ÇÿÛ[ F@@ñ"Л„ŠŠÐÂ訙éøó¡]ëBHœ\ñSé Ìøàøì‡r<›Æ6Ö0T6ìî9¿ÿžsöl¿ÿøò@*”T  ¬â>UèXRP‘Ëm†ÿ? Z¤/šü½Ä9~óÄ#å‰KeêhI†¹DÀ Ÿu´HçTª²Ëçq`¨FúW$§ÄÎuÅÕ-Ûwš¼.äÍžŒÓX”ùÔ0Us V4<Áª‚5 UÔæ“Éi¸ŽIë +|Öÿ*1 Åäåa˜9ó…¡w¹÷>òVpZ¹˜¹„ o9ÃDß«‚Ö÷tŒ~>i蘦¨È¿,R²îÔ —h¶D3ê äŠì©Ïô_ šœ«û¸L£Ö±À®„QŒ‘•ô^¥”d–Ž‘þÔçl΃®sã¸Jûõ5é…¸ôMKÿRù™~žð¦;]^70ð&n‘G‡|{ä)‘ï„a¾"/é§KåoÈ#×OßÐÕ.]¥•]Å î"5Ù/!µ~ñ,>w†?yÚO‡ÇÌ£|‹ 2…’¦:-c˜äfé‹‘ªÚ22êOPK¼î«ƒPKë‹MR>org/junit/validator/AnnotationsValidator$MethodValidator.class½•]SÓ@†ßmK1 ‚ˆ "ý’´âÐÂè ŒÌTo`¸âÂ…î”`š8IZ™ñOé Ìxáxír<›„6Ö"{±énÎyÞ=çìž|ÿñå+€VU(È«èGAÅÌ«ÐQTP’Ë)jÁviu8Óã ÎÅ<é ã]Ýç„ÌP>½ýÅh,™¸ÑcоVý¿>$dñéB\¢Y‘ft;αc$>Ó¿49÷Wwp™F-°À\õ Ã!+é½Do’™?BòS—3÷ǃ¶sFqÞùÖã4Ò) q/è™”þùÂRݼºÏ› ,Ú¼4n`2ÜàMÜ"€|{è‘ï„a¾"/é§æò…oè;Bº›¾¡«mºJ+]Å4î"1yiBj;üÜ1XïÜýþîÓûd¸Í ²þ3"S(IªÓIn†žꧪ-`.¥þPK‡N[²PKë‹MR.org/junit/validator/AnnotationsValidator.class¥V[SÓ@þ¶M›6D(å¢xPK#àh­V.ŠPZÁêSh3 ‰“¤Œü¯^fDdt|öÍgÿ‹z6Z,Îtä!ÙÍÙÝïûÎÙ³góý×篆ð\BFEŒI`4Š8Æ›Bº ·á¯Û"îHˆ ËÍwELHh¤ˆ) Çx;-¡“îᾈD<‘cƒXyD<•QÄ3†D£”ƒÕ-›_^ÓJ.Ã¥ÃVïïzÍÚdÃB‡¨ÌÊ Ý?;”õ‰¾ÃÏT¼ÞÊ ®ªÎœöÊõjy+˜ÞGûH3¼ QMÈåZ¢†cÂ2 çùÉ!”Dã‡f(Å cì¯Ät8“³ëÙÅÄóz%u劮©8ÝR$œž“<§©=K×Wç¤>zw“e„ZºzJn½ó¦ôЛ_n@¼@/õäÝI¸ˆKà%3Íà?¨ S›ÚA ¸…àì{Û1Ì n#ÌðÝÔ¾!2.t ý t…¶!°ôæ÷Ï·´<èÑžô ºéöì!ª^ Ý "#:.#Cト¢<âbZ‘D?‰l¥ñ r!¾HÞ»…ÄFÈË«´"@qùô1†÷1FcwÖ0ÍÚÔ5²\ßÓ¤§ A¤ÜAS‘mAÎ…ãÝæ|1´ƒÞå?¡õ„w^¨¸_a/|„zÃþ‰ãÔ&‰¿ƒv ±ýÄqü!Ž.ð_†8EƒÿGÄqJþPKm­É@—PKë‹MR.org/junit/validator/PublicClassValidator.classTÛNÛ@=KÁn¥7B¹(¸7zK …@%$+©H‰¾ '±Â"ÇŽì5j?¥­¨Hý€~TÕY'$RõÁ;»³3gfÎŒ÷×ï?<ÅVƒ˜‰cs½€¦`^ÁBݘ‰aQÊÇòr)†eyÐãˆâIœŸÉ幂 V¼dÎæöŠëÆöæza;—ÝÛÚÙÉíäóÐÔÁmÝà¾H1ôæyÕ1EàY sW®Ó³m:U}ësÙª î:©5òêIs‡‹5†ˆ6_dˆfÜ ùܱ²A­dy³d“&a¸eÓ.š—ç¦2*ö¹Ï°`¸^U?H?4m^1…ë郒ÍËÛôýâ…’ÞnZXËá-Êv Á Çò|½F™ØzË*5ß¡dÑÆ˜ºƒñ?‘þÎ^,]¶›üÅónà•­\3Þ©øe‰¢bc ^©x7*bêÏ0ÖÖæ…ÇêFÀíŠåQ¨Â¾•,K줊·H©Hc•š–ä~ÒqE²_V±†Uï‚÷*Ö±¡"ƒMí¦í¢9k'‘+XeÁ0ÛÉ»EÞ%ßÉ2Mr¿8ÀO4f½n9†%͸JÀEc®sB­Pª–Èš5"X»n'{%ÜÆža¤6MÿH»ï×¶©\êeÙï“…m בãÀ0}Ù¿ÁKÇñ´juñ¥á’Ю`’ž†AÐ/Aß]9 $‡éýèÂ"´§I¡õit’Œd÷Â)Øqh2NkO¨ g@màî“dx€‡d%kô¸tÉgiñ]_¡|CäèÑÝst'¡œ FW½$qZNÐw õ ýG­@·(P…àûZm€6ÊÝ’­ &ãVþar€r†[ß93lW I˜ ݦÿPKÅ!/ФCPKë‹MR,org/junit/validator/TestClassValidator.class޽nÂ@„gù±ùiH•7ˆ’†• "•¥ŽÒ_ì“uÖq‡îÇâÙ(x*Ê+¦H—­f´³ßìõë|°Â<Å4ÅŒðÐr%+îÅ»p~§¸s„õsnlÍš ¥g6h-¬cS ÅúTö’7¼å,x©X.ÏÓBÖšû`!ÿcÓyÅuÍö§R½4:ÛFô¬0Á–âUªÈ~ì ÝóÆ.o‡„§{gû»bӄŽèí³¥O„nC#£èÇÑ D•þ¨É7PKV<-ÆÆ@PKë‹MR&org/junit/validator/ValidateWith.class…‘ßJAÆ¿1mÓþ¨Y]„Ò…AK×F!a Ø*ºÑEŒzXGÖÙØ|µ.z€*:F¥ÐF‡9g¾ïüÎpæíýåÀ9ö-ìZ(YØÈ̤“@éø¤5‘3iûR{öµ/£¨&í)OK‡ì¸úí¸8m¡gOb­ŒÍ 5’&íºÖ‘Fºÿ}W»dZ®Äán”ϸâ—F÷ÊŒÏ`ƒn¬šR_EjàÓ’ TV†ËÁî’!½È˜_ýÇÒ |5œ³ÑêÞ9nó¶!p˜ÜâÊÐ#ÃΣd½áÓ”™îü™Ø”¯;NÛ­»Í¶óä>t>¶©Ç*C#nª$mnu'…%¤=˜ÐД¹ËEURküÓ"-F†«u®R°86>³,r|–ÙµÉjš°…mì,ÒGBPK”²ø91PKW@uWh®…‘A¶META-INF/MANIFEST.MFPKW@uW‘ŠßñJ>j¦ÓAMETA-INF/ECLIPSE_.SFPKW@uW¦hCXòS%_€META-INF/ECLIPSE_.RSAPKW@uW í”›META-INF/þÊPKê‹MROÌ,ZVp,¤Ñ›LICENSE-junit.txtPKW@uWíf¬junit/PKW@uW휬junit/extensions/PKë‹MRf~P¬÷Ú(¤ݬjunit/extensions/ActiveTestSuite$1.classPKë‹MRU{8u—&¤*¯junit/extensions/ActiveTestSuite.classPKë‹MRÛŽÚ²Ù#¤³junit/extensions/RepeatedTest.classPKë‹MRØü±n $¤¶junit/extensions/TestDecorator.classPKë‹MRÓ‡åîåd"¤y¸junit/extensions/TestSetup$1.classPKë‹MR_S¯xê  ¤®ºjunit/extensions/TestSetup.classPKW@uWíæ¼junit/framework/PKë‹MR*$”$¶ b¤&½junit/framework/Assert.classPKë‹MRƒo@‘½*¤&Çjunit/framework/AssertionFailedError.classPKë‹MR'™‡)G )¤Éjunit/framework/ComparisonCompactor.classPKë‹MR¼±ÄÁ/T'¤Îjunit/framework/ComparisonFailure.classPKë‹MR»<Ï6'¤Ñjunit/framework/JUnit4TestAdapter.classPKë‹MR+¹FrÏä.¤7Øjunit/framework/JUnit4TestAdapterCache$1.classPKë‹MR£Ëö`r† ,¤bÛjunit/framework/JUnit4TestAdapterCache.classPKë‹MRÌ7B}*¤.ájunit/framework/JUnit4TestCaseFacade.classPKë‹MR2Ìݘ¿!¤Èãjunit/framework/Protectable.classPKë‹MR×>V9•¸¤¯äjunit/framework/Test.classPKë‹MR²i’Q( ½¤Œåjunit/framework/TestCase.classPKë‹MR\Ä›‰‹§!¤ñjunit/framework/TestFailure.classPKë‹MR´lªöÓV"¤Úójunit/framework/TestListener.classPKë‹MR·Ð!Ä9"¤ýôjunit/framework/TestResult$1.classPKë‹MRêtÇ"F ¤÷junit/framework/TestResult.classPKë‹MR·l„?Ь!¤¥þjunit/framework/TestSuite$1.classPKë‹MR.þçN6Ÿ!¤~junit/framework/TestSuite.classPKW@uW íjunit/runner/PKë‹MRËÅò/;#!¤>junit/runner/BaseTestRunner.classPKë‹MR›™aþ Å"¤¼ junit/runner/TestRunListener.classPKë‹MRÏsö]yu¤"junit/runner/Version.classPKê‹MR´XWYóĤØ#junit/runner/logo.gifPKê‹MR›¾#Gšs¤%junit/runner/smalllogo.gifPKW@uW íð%junit/textui/PKë‹MRÙvd=^ ¤-&junit/textui/ResultPrinter.classPKë‹MRCäPÑ ¤¸.junit/textui/TestRunner.classPKW@uWí”9org/PKW@uW íÈ9org/junit/PKë‹MR‚ΧVæu¤:org/junit/After.classPKë‹MRh¨íë¤+;org/junit/AfterClass.classPKë‹MR7ºÂLxÃ2¤^<org/junit/Assert.classPKë‹MR‘·Š ¤Porg/junit/Assume.classPKë‹MR8Cï°H,+¤vTorg/junit/AssumptionViolatedException.classPKë‹MRŠªIçw¤Worg/junit/Before.classPKë‹MR†YÄì¤BXorg/junit/BeforeClass.classPKë‹MRö¹b¤wYorg/junit/ClassRule.classPKë‹MR?aìØ¤Þ#¤ÖZorg/junit/ComparisonFailure$1.classPKë‹MRÀ_~¥ž C¤Ë[org/junit/ComparisonFailure$ComparisonCompactor$DiffExtractor.classPKë‹MRŸŽËT4 5¤Ú_org/junit/ComparisonFailure$ComparisonCompactor.classPKë‹MRrØ>ƒ]«!¤qeorg/junit/ComparisonFailure.classPKë‹MR£Fõ&¤horg/junit/FixMethodOrder.classPKë‹MR³º¥Â¤iorg/junit/Ignore.classPKë‹MRŠ–-8ì¤èjorg/junit/Rule.classPKë‹MR#w™×Œ¤blorg/junit/Test$None.classPKë‹MRsÕÉñp|¤Âmorg/junit/Test.classPKë‹MRí(uw.¤toorg/junit/TestCouldNotBeSkippedException.classPKW@uWíEqorg/junit/experimental/PKë‹MR*s]/¤Œqorg/junit/experimental/ParallelComputer$1.classPKë‹MR[§…ž-¤uorg/junit/experimental/ParallelComputer.classPKW@uW"íyxorg/junit/experimental/categories/PKë‹MRŸ]ç±S qA¤Ëxorg/junit/experimental/categories/Categories$CategoryFilter.classPKë‹MR Ón;L?B¤ƒorg/junit/experimental/categories/Categories$ExcludeCategory.classPKë‹MR*B»ÊK?B¤I…org/junit/experimental/categories/Categories$IncludeCategory.classPKë‹MRâìYANL2¤‡org/junit/experimental/categories/Categories.classPKë‹MRQ>Ö-0¤²Žorg/junit/experimental/categories/Category.classPKë‹MRn¥»š¶V=¤=org/junit/experimental/categories/CategoryFilterFactory.classPKë‹MR ½Fb‘ 9¤^”org/junit/experimental/categories/CategoryValidator.classPKë‹MR-G³r…E¤'šorg/junit/experimental/categories/ExcludeCategories$ExcludesAny.classPKë‹MR™eÒþ$ñ9¤ org/junit/experimental/categories/ExcludeCategories.classPKë‹MRˆŸCr…E¤—Ÿorg/junit/experimental/categories/IncludeCategories$IncludesAny.classPKë‹MRnMfä&ñ9¤|¢org/junit/experimental/categories/IncludeCategories.classPKW@uWí ¥org/junit/experimental/max/PKë‹MR¬ ã/å:¤T¥org/junit/experimental/max/CouldNotReadCoreException.classPKë‹MRzIi\¤R,¤ë¦org/junit/experimental/max/MaxCore$1$1.classPKë‹MRíuaEª*¤é¨org/junit/experimental/max/MaxCore$1.classPKë‹MRo½h’ Š(¤†«org/junit/experimental/max/MaxCore.classPKë‹MR<¤«ªë-¤n¶org/junit/experimental/max/MaxHistory$1.classPKë‹MR5|kó+| ?¤s·org/junit/experimental/max/MaxHistory$RememberingListener.classPKë‹MR6¾ÇëHe:¤ ¼org/junit/experimental/max/MaxHistory$TestComparator.classPKë‹MRáåóÂ+¤»¿org/junit/experimental/max/MaxHistory.classPKW@uWíÇorg/junit/experimental/results/PKë‹MR Ýÿ@0¤VÇorg/junit/experimental/results/FailureList.classPKë‹MRÐ?šÌ 4¤³Êorg/junit/experimental/results/PrintableResult.classPKë‹MRÜgÇî85¤áÎorg/junit/experimental/results/ResultMatchers$1.classPKë‹MR΂†vçâ5¤2Òorg/junit/experimental/results/ResultMatchers$2.classPKë‹MRm#TFä5¤|Õorg/junit/experimental/results/ResultMatchers$3.classPKë‹MR_ñË  5¤%Ùorg/junit/experimental/results/ResultMatchers$4.classPKë‹MRM"]oÌÛ3¤’Üorg/junit/experimental/results/ResultMatchers.classPKW@uWí¿ßorg/junit/experimental/runners/PKë‹MR~#þ§/i-¤àorg/junit/experimental/runners/Enclosed.classPKW@uW í˜ãorg/junit/experimental/theories/PKë‹MR¤gÎb\/¤èãorg/junit/experimental/theories/DataPoint.classPKë‹MR‚M¹c^0¤§åorg/junit/experimental/theories/DataPoints.classPKë‹MRÆF2lFI4¤hçorg/junit/experimental/theories/FromDataPoints.classPKë‹MRT4ÃÔ ·8¤éorg/junit/experimental/theories/ParameterSignature.classPKë‹MRÙá²J{7¤óorg/junit/experimental/theories/ParameterSupplier.classPKë‹MRV¥aLA:¤?õorg/junit/experimental/theories/ParametersSuppliedBy.classPKë‹MR3r—cíç;¤óöorg/junit/experimental/theories/PotentialAssignment$1.classPKë‹MRNtíƒåX¤Iúorg/junit/experimental/theories/PotentialAssignment$CouldNotGenerateValueException.classPKë‹MRZMädÉÙ9¤Rüorg/junit/experimental/theories/PotentialAssignment.classPKë‹MRý˜ º.?¤‚þorg/junit/experimental/theories/Theories$TheoryAnchor$1$1.classPKë‹MRO>’—f =¤org/junit/experimental/theories/Theories$TheoryAnchor$1.classPKë‹MR‰æÌUýA=¤îorg/junit/experimental/theories/Theories$TheoryAnchor$2.classPKë‹MR2 :+;¤V org/junit/experimental/theories/Theories$TheoryAnchor.classPKë‹MRˆ]4= J.¤ùorg/junit/experimental/theories/Theories.classPKë‹MRe÷æÃ Í,¤’org/junit/experimental/theories/Theory.classPKW@uW)í org/junit/experimental/theories/internal/PKë‹MR2~XÛ¾C¤eorg/junit/experimental/theories/internal/AllMembersSupplier$1.classPKë‹MRûêžA V¤” org/junit/experimental/theories/internal/AllMembersSupplier$MethodParameterValue.classPKë‹MRXV! õ#A¤Y%org/junit/experimental/theories/internal/AllMembersSupplier.classPKë‹MR‹Ü\Š9 D:¤Ï2org/junit/experimental/theories/internal/Assignments.classPKë‹MR±Váóe>¤p=org/junit/experimental/theories/internal/BooleanSupplier.classPKë‹MRÙŒêñ©;¤Ï?org/junit/experimental/theories/internal/EnumSupplier.classPKë‹MRtX_—ã J¤)Corg/junit/experimental/theories/internal/ParameterizedAssertionError.classPKë‹MRð&Å=I¤8Horg/junit/experimental/theories/internal/SpecificDataPointsSupplier.classPKW@uW*ítMorg/junit/experimental/theories/suppliers/PKë‹MRôMâ)858¤ÎMorg/junit/experimental/theories/suppliers/TestedOn.classPKë‹MR;í %í·@¤lOorg/junit/experimental/theories/suppliers/TestedOnSupplier.classPKW@uWíÇRorg/junit/function/PKë‹MRÓï㲜È)¤ Sorg/junit/function/ThrowingRunnable.classPKW@uWíýSorg/junit/internal/PKë‹MR$¬$L%/¤@Torg/junit/internal/ArrayComparisonFailure.classPKë‹MR}Ú å¢4¤éXorg/junit/internal/AssumptionViolatedException.classPKë‹MRº³s€¿h¤0_org/junit/internal/Checks.classPKë‹MRs‘5j ¤5¤'org/junit/internal/SerializableValueDescription.classPKë‹MR |Zóþ%¤1ƒorg/junit/internal/TextListener.classPKë‹MRmäÖëU%¤wŠorg/junit/internal/Throwables$1.classPKë‹MRƒ³2ÐÑ{+¤µŒorg/junit/internal/Throwables$State$1.classPKë‹MRhR!öÃ+¤ߎorg/junit/internal/Throwables$State$2.classPKë‹MRšÒS;÷¶+¤.‘org/junit/internal/Throwables$State$3.classPKë‹MRˆo—âuæ+¤~“org/junit/internal/Throwables$State$4.classPKë‹MRLM¨´å)¤L•org/junit/internal/Throwables$State.classPKë‹MRþæïF Ä#¤©™org/junit/internal/Throwables.classPKW@uWí@§org/junit/internal/builders/PKë‹MRëoßÔj‰ @¤Œ§org/junit/internal/builders/AllDefaultPossibilitiesBuilder.classPKë‹MRO$EH) 2¤d¬org/junit/internal/builders/AnnotatedBuilder.classPKë‹MR±šˆººp0¤ıorg/junit/internal/builders/IgnoredBuilder.classPKë‹MR£˜†[4¤ܳorg/junit/internal/builders/IgnoredClassRunner.classPKë‹MR–kÔM/¤L¶org/junit/internal/builders/JUnit3Builder.classPKë‹MRµÝ‚Š÷/¤ĸorg/junit/internal/builders/JUnit4Builder.classPKë‹MR#whl¦-¤«ºorg/junit/internal/builders/NullBuilder.classPKë‹MR®'’]`Ð4¤r¼org/junit/internal/builders/SuiteMethodBuilder.classPKW@uWí4¿org/junit/internal/management/PKë‹MRÈw–\V5¤‚¿org/junit/internal/management/FakeRuntimeMXBean.classPKë‹MR¶Ueähy4¤AÁorg/junit/internal/management/FakeThreadMXBean.classPKë‹MRÏGÌ%UxC¤ Ãorg/junit/internal/management/ManagementFactory$FactoryHolder.classPKë‹MRKsS)áC¤ÑÆorg/junit/internal/management/ManagementFactory$RuntimeHolder.classPKë‹MRÆÇr 7¤ÿâorg/junit/internal/matchers/ThrowableCauseMatcher.classPKë‹MR„ay Æ£ 9¤+çorg/junit/internal/matchers/ThrowableMessageMatcher.classPKë‹MR8›õrû1¤Xëorg/junit/internal/matchers/TypeSafeMatcher.classPKW@uWí)ðorg/junit/internal/requests/PKë‹MR‘»éî¨ó0¤uðorg/junit/internal/requests/ClassRequest$1.classPKë‹MR¸ Z·æÈS¤{ñorg/junit/internal/requests/ClassRequest$CustomAllDefaultPossibilitiesBuilder.classPKë‹MR_[˜!`ÅG¤âóorg/junit/internal/requests/ClassRequest$CustomSuiteMethodBuilder.classPKë‹MRgQýµ.¤·öorg/junit/internal/requests/ClassRequest.classPKë‹MR<úx„´“/¤Èùorg/junit/internal/requests/FilterRequest.classPKë‹MRF ÌÚA2¤Ùüorg/junit/internal/requests/MemoizingRequest.classPKë‹MRóaXæ1¤ÿorg/junit/internal/requests/OrderingRequest.classPKë‹MR¬HœL(0¤Êorg/junit/internal/requests/SortingRequest.classPKW@uWí.org/junit/internal/runners/PKë‹MR•Lƒ ‡M ,¤yorg/junit/internal/runners/ClassRoadie.classPKë‹MRPŠ«"5¤Z org/junit/internal/runners/ErrorReportingRunner.classPKë‹MR÷¥ƒƒ6Ò-¤<org/junit/internal/runners/FailedBefore.classPKë‹MR²é¦šŠ4¤Íorg/junit/internal/runners/InitializationError.classPKë‹MRûÕàî¬5¤¹org/junit/internal/runners/JUnit38ClassRunner$1.classPKë‹MR·ó uì P¤Èorg/junit/internal/runners/JUnit38ClassRunner$OldTestClassAdaptingListener.classPKë‹MR%ZCÓ ×3¤»org/junit/internal/runners/JUnit38ClassRunner.classPKë‹MR R–­²w4¤ï&org/junit/internal/runners/JUnit4ClassRunner$1.classPKë‹MR³ÒH¶wÏ4¤)org/junit/internal/runners/JUnit4ClassRunner$2.classPKë‹MR_è@` 2¤Ü+org/junit/internal/runners/JUnit4ClassRunner.classPKë‹MRA#óŸâß1¤œ6org/junit/internal/runners/MethodRoadie$1$1.classPKë‹MRûŽ>Ìíº/¤Ý8org/junit/internal/runners/MethodRoadie$1.classPKë‹MRöÂòu²/¤'=org/junit/internal/runners/MethodRoadie$2.classPKë‹MR!øÄD 5-¤ù>org/junit/internal/runners/MethodRoadie.classPKë‹MRxa>Rq0¤˜Horg/junit/internal/runners/MethodValidator.classPKë‹MRC£ço,¤HPorg/junit/internal/runners/SuiteMethod.classPKë‹MRVô,Vé*¤Torg/junit/internal/runners/TestClass.classPKë‹MRˆCY.\Ï +¤¿[org/junit/internal/runners/TestMethod.classPKW@uW!ít`org/junit/internal/runners/model/PKë‹MR®ãÔŽ 7¤Å`org/junit/internal/runners/model/EachTestNotifier.classPKë‹MR©­˜˜ð?¤þdorg/junit/internal/runners/model/MultipleFailureException.classPKë‹MR68ø‰Ñ9¤gorg/junit/internal/runners/model/ReflectiveCallable.classPKW@uW!íóhorg/junit/internal/runners/rules/PKë‹MRëÂR³<¤Diorg/junit/internal/runners/rules/RuleMemberValidator$1.classPKë‹MR•Äš÷Q B¤ajorg/junit/internal/runners/rules/RuleMemberValidator$Builder.classPKë‹MRÒ€hêeæU¤"norg/junit/internal/runners/rules/RuleMemberValidator$DeclaringClassMustBePublic.classPKë‹MRÕIÜUK¤ rorg/junit/internal/runners/rules/RuleMemberValidator$FieldMustBeARule.classPKë‹MRM3ÐSO¤_uorg/junit/internal/runners/rules/RuleMemberValidator$FieldMustBeATestRule.classPKë‹MRâ")k­/ _¤¬xorg/junit/internal/runners/rules/RuleMemberValidator$MemberMustBeNonStaticOrAlsoClassRule.classPKë‹MRã0#ÈEM¤æ|org/junit/internal/runners/rules/RuleMemberValidator$MemberMustBePublic.classPKë‹MR­Ü°µÄEM¤)€org/junit/internal/runners/rules/RuleMemberValidator$MemberMustBeStatic.classPKë‹MRÍhéåæjL¤hƒorg/junit/internal/runners/rules/RuleMemberValidator$MethodMustBeARule.classPKë‹MR†w,dÜhP¤Ȇorg/junit/internal/runners/rules/RuleMemberValidator$MethodMustBeATestRule.classPKë‹MR‹?ÉeH¤"Šorg/junit/internal/runners/rules/RuleMemberValidator$RuleValidator.classPKë‹MRÝa®K:¤°‹org/junit/internal/runners/rules/RuleMemberValidator.classPKë‹MR:¨ò¢Oè6¤Æ“org/junit/internal/runners/rules/ValidationError.classPKW@uW&íy–org/junit/internal/runners/statements/PKë‹MR>™ÖdF;¤Ï–org/junit/internal/runners/statements/ExpectException.classPKë‹MR¸2d-P*0¤Èšorg/junit/internal/runners/statements/Fail.classPKë‹MRs~)¹¶ ;¤vœorg/junit/internal/runners/statements/FailOnTimeout$1.classPKë‹MRD)Ú™¬› A¤•org/junit/internal/runners/statements/FailOnTimeout$Builder.classPKë‹MR6ÅÁý>×K¤°¡org/junit/internal/runners/statements/FailOnTimeout$CallableStatement.classPKë‹MRÏtðY I 9¤g¥org/junit/internal/runners/statements/FailOnTimeout.classPKë‹MRdÚnÍÍm8¤'³org/junit/internal/runners/statements/InvokeMethod.classPKë‹MRÏE–: 5¤Zµorg/junit/internal/runners/statements/RunAfters.classPKë‹MR¡§Îúy6¤÷¹org/junit/internal/runners/statements/RunBefores.classPKW@uWíU½org/junit/matchers/PKë‹MRŸYRŒâ3&¤˜½org/junit/matchers/JUnitMatchers.classPKW@uWíÎÁorg/junit/rules/PKë‹MR.?£Õ#$¤Âorg/junit/rules/DisableOnDebug.classPKë‹MR`)€Ï@&¤5Æorg/junit/rules/ErrorCollector$1.classPKë‹MR¿p" U $¤ÉÈorg/junit/rules/ErrorCollector.classPKë‹MRO*wr!xB¤»Îorg/junit/rules/ExpectedException$ExpectedExceptionStatement.classPKë‹MR‚·Ä‚+'¤LÑorg/junit/rules/ExpectedException.classPKë‹MRz4¿/a±5¤#Øorg/junit/rules/ExpectedExceptionMatcherBuilder.classPKë‹MR·«”õ(¤çÛorg/junit/rules/ExternalResource$1.classPKë‹MRC’ûòo&¤Eßorg/junit/rules/ExternalResource.classPKë‹MRÆ|Ȧ  ¤‹áorg/junit/rules/MethodRule.classPKë‹MR‘§‹¤âorg/junit/rules/RuleChain.classPKë‹MR!;Ó&Ϥsæorg/junit/rules/RunRules.classPKë‹MRe˜¡Ò!¤Žéorg/junit/rules/Stopwatch$1.classPKë‹MRFÇ•Ü.Û%¤~êorg/junit/rules/Stopwatch$Clock.classPKë‹MR_¾<åN/¤ÿëorg/junit/rules/Stopwatch$InternalWatcher.classPKë‹MR=ÅP³¨ ¤Aïorg/junit/rules/Stopwatch.classPKë‹MRi'}«ð‹-¤6ôorg/junit/rules/TemporaryFolder$Builder.classPKë‹MR Žmñä %¤öorg/junit/rules/TemporaryFolder.classPKë‹MR¶P­øe…¤¸org/junit/rules/TestName.classPKë‹MR†­ñwŸê¤iorg/junit/rules/TestRule.classPKë‹MRÕÓÌ’F#¤Torg/junit/rules/TestWatcher$1.classPKë‹MRøxègZ-!¤7 org/junit/rules/TestWatcher.classPKë‹MR¨gz`¶è$¤àorg/junit/rules/TestWatchman$1.classPKë‹MR’o3Gš"¤èorg/junit/rules/TestWatchman.classPKë‹MR˜KýŸ¤org/junit/rules/Timeout$1.classPKë‹MR0ÙŽW%¤Éorg/junit/rules/Timeout$Builder.classPKë‹MR‚S(–·± ¤ªorg/junit/rules/Timeout.classPKë‹MR-ëþËo ¤¬ org/junit/rules/Verifier$1.classPKë‹MRK ”û°]¤Å"org/junit/rules/Verifier.classPKW@uWíÁ$org/junit/runner/PKë‹MRð !¤%org/junit/runner/Computer$1.classPKë‹MR~h„tÊÆ!¤f'org/junit/runner/Computer$2.classPKë‹MR¯¤Fyœ¤)org/junit/runner/Computer.classPKë‹MRÏWQ¬ˆ´"¤E,org/junit/runner/Describable.classPKë‹MRå&Ÿr ý"¤-org/junit/runner/Description.classPKë‹MR‘lMÂÐ &¤9org/junit/runner/FilterFactories.classPKë‹MRÍÏCóPg>¤•>org/junit/runner/FilterFactory$FilterNotCreatedException.classPKë‹MRyؤÞÚt$¤Q@org/junit/runner/FilterFactory.classPKë‹MRžT ¾±+*¤}Aorg/junit/runner/FilterFactoryParams.classPKë‹MRHnp_XoI¤†Corg/junit/runner/JUnitCommandLineParseResult$CommandLineParserError.classPKë‹MRˆÞl# q2¤UEorg/junit/runner/JUnitCommandLineParseResult.classPKë‹MRJåJŽó£ ¤ØNorg/junit/runner/JUnitCore.classPKë‹MRº¢~ ¤Vorg/junit/runner/OrderWith.classPKë‹MRòîF×+)¤åWorg/junit/runner/OrderWithValidator.classPKë‹MR#Á[oPn ¤XZorg/junit/runner/Request$1.classPKë‹MRʳ,ï#¤ö[org/junit/runner/Request.classPKë‹MRžý(ºœË¤1borg/junit/runner/Result$1.classPKë‹MRYÀ8¹Æ &¤corg/junit/runner/Result$Listener.classPKë‹MR›>D%Õ†,¤Šgorg/junit/runner/Result$SerializedForm.classPKë‹MR6œÈÿ^¤¹morg/junit/runner/Result.classPKë‹MR9!¡ÿ' ¤uorg/junit/runner/RunWith.classPKë‹MRBƒä‚L<¤vvorg/junit/runner/Runner.classPKW@uWí xorg/junit/runner/manipulation/PKë‹MR¸áRbA2¤[xorg/junit/runner/manipulation/Alphanumeric$1.classPKë‹MR^½2•ï80¤Òzorg/junit/runner/manipulation/Alphanumeric.classPKë‹MRÃ>ð_ö8,¤}org/junit/runner/manipulation/Filter$1.classPKë‹MRt&Jñø¶,¤oorg/junit/runner/manipulation/Filter$2.classPKë‹MRá¡,ICÃ,¤Á‚org/junit/runner/manipulation/Filter$3.classPKë‹MR Ô[¹Ò°*¤^…org/junit/runner/manipulation/Filter.classPKë‹MRÏÁl–¯.¤ˆˆorg/junit/runner/manipulation/Filterable.classPKë‹MR*Ò­ç<¤“‰org/junit/runner/manipulation/InvalidOrderingException.classPKë‹MRÑo÷Т:¤Œ‹org/junit/runner/manipulation/NoTestsRemainException.classPKë‹MRþ_;w¿?-¤org/junit/runner/manipulation/Orderable.classPKë‹MRÕñ›ÊÄ…+¤Žorg/junit/runner/manipulation/Orderer.classPKë‹MR¡š…X&.¤;’org/junit/runner/manipulation/Ordering$1.classPKë‹MRý^û¶œ4¤ï”org/junit/runner/manipulation/Ordering$Context.classPKë‹MR '8Ì4¤—org/junit/runner/manipulation/Ordering$Factory.classPKë‹MR/‚à­&,¤5˜org/junit/runner/manipulation/Ordering.classPKë‹MR$Ar³Šº,¤<Ÿorg/junit/runner/manipulation/Sortable.classPKë‹MRÔ—+%Í©,¤  org/junit/runner/manipulation/Sorter$1.classPKë‹MR¬\±µ½L *¤G¢org/junit/runner/manipulation/Sorter.classPKW@uWí\¦org/junit/runner/notification/PKë‹MR˜)·%ó‘+¤ª¦org/junit/runner/notification/Failure.classPKë‹MRã#d„.!:¤ö©org/junit/runner/notification/RunListener$ThreadSafe.classPKë‹MRI¬? /¤Œ«org/junit/runner/notification/RunListener.classPKë‹MR_Á¬²÷}1¤þ­org/junit/runner/notification/RunNotifier$1.classPKë‹MR?È ¬ôk1¤T°org/junit/runner/notification/RunNotifier$2.classPKë‹MR-Qór÷1¤§²org/junit/runner/notification/RunNotifier$3.classPKë‹MRÊß=ûƒ1¤ý´org/junit/runner/notification/RunNotifier$4.classPKë‹MRåÅYöw1¤W·org/junit/runner/notification/RunNotifier$5.classPKë‹MRà6¿Åp1¤¬¹org/junit/runner/notification/RunNotifier$6.classPKë‹MRŽ«ú¡1¤мorg/junit/runner/notification/RunNotifier$7.classPKë‹MROÓrÑöw1¤)¿org/junit/runner/notification/RunNotifier$8.classPKë‹MR*B÷y1¤~Áorg/junit/runner/notification/RunNotifier$9.classPKë‹MRøÒB±3 <¤ÔÃorg/junit/runner/notification/RunNotifier$SafeNotifier.classPKë‹MRýŸ“½#/¤CÈorg/junit/runner/notification/RunNotifier.classPKë‹MR¡÷=Ò©:¤¥Ïorg/junit/runner/notification/StoppedByUserException.classPKë‹MRÝÙ±Z_ÿ ;¤#Ñorg/junit/runner/notification/SynchronizedRunListener.classPKW@uWíëÕorg/junit/runners/PKë‹MRB)Ø D ¤-Öorg/junit/runners/AllTests.classPKë‹MRõ§1Îî!0¤¿×org/junit/runners/BlockJUnit4ClassRunner$1.classPKë‹MR†wUøô*0¤ Úorg/junit/runners/BlockJUnit4ClassRunner$2.classPKë‹MRW5Ê“$<¤]Üorg/junit/runners/BlockJUnit4ClassRunner$RuleCollector.classPKë‹MR³ëI¶ø6.¤Zàorg/junit/runners/BlockJUnit4ClassRunner.classPKë‹MRà`0bn„¤lôorg/junit/runners/JUnit4.classPKë‹MRî~Ïñ7%¤&öorg/junit/runners/MethodSorters.classPKë‹MR=-…(¥â'¤jùorg/junit/runners/Parameterized$1.classPKë‹MRäP é0¤dúorg/junit/runners/Parameterized$AfterParam.classPKë‹MRnä´?¤Þûorg/junit/runners/Parameterized$AssumptionViolationRunner.classPKë‹MR…‚°ë1¤Nÿorg/junit/runners/Parameterized$BeforeParam.classPKë‹MRͱs2/¤Éorg/junit/runners/Parameterized$Parameter.classPKë‹MR»ãF60¤Xorg/junit/runners/Parameterized$Parameters.classPKë‹MR«XËï ç#4¤üorg/junit/runners/Parameterized$RunnersFactory.classPKë‹MRŠÌý¯ˆ@¤Morg/junit/runners/Parameterized$UseParametersRunnerFactory.classPKë‹MRóÁ^€°H%¤Corg/junit/runners/Parameterized.classPKë‹MR±ÎÎDÍ¡&¤Forg/junit/runners/ParentRunner$1.classPKë‹MRíËqϾ&¤gorg/junit/runners/ParentRunner$2.classPKë‹MRõ³s¨ +&¤Šorg/junit/runners/ParentRunner$3.classPKë‹MRxë*&¤ë!org/junit/runners/ParentRunner$4.classPKë‹MRÕÉ…ªV*&¤*$org/junit/runners/ParentRunner$5.classPKë‹MRZ±AfÓ[ 7¤Ô&org/junit/runners/ParentRunner$ClassRuleCollector.classPKë‹MRÄV†š”Ë=$¤ ,org/junit/runners/ParentRunner.classPKë‹MRyvÓ×^Ø'¤òCorg/junit/runners/RuleContainer$1.classPKë‹MRåwÚÑ/¤¥Forg/junit/runners/RuleContainer$RuleEntry.classPKë‹MR|ÆÑuÌ%¤ÓHorg/junit/runners/RuleContainer.classPKë‹MR¹±I(AG*¤›Oorg/junit/runners/Suite$SuiteClasses.classPKë‹MR⇦D\¤4Qorg/junit/runners/Suite.classPKW@uWíÃWorg/junit/runners/model/PKë‹MRaø+äÊf)¤ Xorg/junit/runners/model/Annotatable.classPKë‹MR…ôb!vÒ ,¤,Yorg/junit/runners/model/FrameworkField.classPKë‹MR(´ék ‰-¤ü]org/junit/runners/model/FrameworkMember.classPKë‹MRÈ«æ¡n/¤waorg/junit/runners/model/FrameworkMethod$1.classPKë‹MRóYY×-¤ðcorg/junit/runners/model/FrameworkMethod.classPKë‹MRi|Ql`Ä1¤"morg/junit/runners/model/InitializationError.classPKë‹MRG b%Û3¤áoorg/junit/runners/model/InvalidTestClassError.classPKë‹MR“ßÊ]1¤torg/junit/runners/model/MemberValueConsumer.classPKë‹MR£L> 6¤Fuorg/junit/runners/model/MultipleFailureException.classPKë‹MRDî abŽ >¤è{org/junit/runners/model/NoGenericTypeParametersValidator.classPKë‹MR+é0øf+¤¶org/junit/runners/model/RunnerBuilder.classPKë‹MRA϶¤žÍ-¤‰org/junit/runners/model/RunnerScheduler.classPKë‹MRuÑ&üo'¤Šorg/junit/runners/model/Statement.classPKë‹MRX²úfR)¤Q‹org/junit/runners/model/TestClass$1.classPKë‹MRá¾”-L)¤úorg/junit/runners/model/TestClass$2.classPKë‹MRbɼ=5ê7¤org/junit/runners/model/TestClass$FieldComparator.classPKë‹MR™‚ÅÙ_k8¤7“org/junit/runners/model/TestClass$MethodComparator.classPKë‹MR^ÂÛ†äá3'¤ü•org/junit/runners/model/TestClass.classPKë‹MR•-Ž`e3¤5©org/junit/runners/model/TestTimedOutException.classPKW@uW íö«org/junit/runners/parameterized/PKë‹MR2fiø/L¤F¬org/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$1.classPKë‹MRžI½)^¹X¤¸®org/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$InjectionType.classPKë‹MRô’óÖèY¤œ±org/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$RunAfterParams.classPKë‹MR¯ïMë†Z¤ µorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters$RunBeforeParams.classPKë‹MR=½™D­-#J¤~¸org/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParameters.classPKë‹MRP7“¶Q¤£Çorg/junit/runners/parameterized/BlockJUnit4ClassRunnerWithParametersFactory.classPKë‹MRtŠÞÖe=¤µÉorg/junit/runners/parameterized/ParametersRunnerFactory.classPKë‹MRúåÞn· 8¤öÊorg/junit/runners/parameterized/TestWithParameters.classPKW@uWíÊÏorg/junit/validator/PKë‹MRn¢,Î(µ-¤Ðorg/junit/validator/AnnotationValidator.classPKë‹MRò’jäxÕ4¤‘Òorg/junit/validator/AnnotationValidatorFactory.classPKë‹MR-³TÄ©û0¤kÖorg/junit/validator/AnnotationsValidator$1.classPKë‹MRŸ[WŸXYC¤r×org/junit/validator/AnnotationsValidator$AnnotatableValidator.classPKë‹MRY4zÏ£3=¤;Ýorg/junit/validator/AnnotationsValidator$ClassValidator.classPKë‹MR¼î«ƒ=¤Iàorg/junit/validator/AnnotationsValidator$FieldValidator.classPKë‹MR‡N[²>¤_ãorg/junit/validator/AnnotationsValidator$MethodValidator.classPKë‹MRm­É@—.¤}æorg/junit/validator/AnnotationsValidator.classPKë‹MRÅ!/ФC.¤pêorg/junit/validator/PublicClassValidator.classPKë‹MRV<-ÆÆ@,¤píorg/junit/validator/TestClassValidator.classPKë‹MR”²ø91&¤îorg/junit/validator/ValidateWith.classPK‡‡«‹ðhdf4-hdf4.3.1/java/lib/simplelogger.properties000066400000000000000000000031721503061704500213300ustar00rootroot00000000000000# SLF4J's SimpleLogger configuration file # Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. org.slf4j.simpleLogger.logFile=slf4j.simpleLogger.log # Default logging detail level for all instances of SimpleLogger. # Must be one of ("trace", "debug", "info", "warn", or "error"). # If not specified, defaults to "info". org.slf4j.simpleLogger.defaultLog=trace # Logging detail level for a SimpleLogger instance named "xxxxx". # Must be one of ("trace", "debug", "info", "warn", or "error"). # If not specified, the default logging detail level is used. #org.slf4j.simpleLogger.log.xxxxx= # Set to true if you want the current date and time to be included in output messages. # Default is false, and will output the number of milliseconds elapsed since startup. #org.slf4j.simpleLogger.showDateTime=false # The date and time format to be used in the output messages. # The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. # If the format is not specified or is invalid, the default format is used. # The default format is yyyy-MM-dd HH:mm:ss:SSS Z. org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z # Set to true if you want to output the current thread name. # Defaults to true. org.slf4j.simpleLogger.showThreadName=true # Set to true if you want the Logger instance name to be included in output messages. # Defaults to true. org.slf4j.simpleLogger.showLogName=true # Set to true if you want the last component of the name to be included in output messages. # Defaults to false. org.slf4j.simpleLogger.showShortLogName=false hdf4-hdf4.3.1/java/lib/slf4j-api-2.0.16.jar000066400000000000000000002074731503061704500175440ustar00rootroot00000000000000PK H YMETA-INF/MANIFEST.MFþÊ…”]oÚ0†ï‘ø‘°ùêhĤÒvSlX5iWnr¯&öÚ¿ã$ ) zéó¾y·3á‘XBlé˜X¨È'mÖªVn p !¾øäZó` d·‘a…ÈT&+‘O¬Í>W+ÃDÈŽÂ':×ø¤Óv1g¤·Fh›¢ˆ‰åòâ/¹žÞï-*ø5ûdm­ö›ÍÝnÇRSfU˜Æ"€(†7.¥1¤€³6ef‰›ai~`z­ Æ$ïµhµSH?øÙóñ׋‘«LT˜H(äùËæQ!2³eÕq- ý¢P™À~ξ•”×\¬ÅÚ½jåîY+cé”O|…0¬ËÉ“Ÿ#á¼ÈAÉïU‡úI"’Îáu/µÙ¥#uOvRv9Kµr¿Ñ6˜»}¥ aåëuÓôº G—‹úéËM-þÉü®‡I'‰´‚Î@wûmM‚sœÁ¿D 7\óG!…Åw¨â•`ðlq×Àô—BZ08·úÇúežb0[|nKÇ(ÓFÇÊxõ¼Ž/|ê¬åÕ?ì#4ây8¯Å!Ü–”³ê.q¹[–¾…yf˜µhñj}å6÷èÓÚûßæ%ì‹@RÑ= F|ËçwE{ØÝ•ç¼PJúd…´ÇºøÃê´:V¯uÙîº+ûMoÔF ÷ÈÓ_ Ý~÷ÉUYXp³[ÕÊPKôu/;5PK  H Y META-INF/PK  H YMETA-INF/versions/PK  H YMETA-INF/versions/9/PK  H Yorg/PK  H Y org/slf4j/PK  H Yorg/slf4j/event/PK  H Yorg/slf4j/helpers/PK  H Yorg/slf4j/spi/PK  H YMETA-INF/maven/PK  H YMETA-INF/maven/org.slf4j/PK  H Y#META-INF/maven/org.slf4j/slf4j-api/PK H YMETA-INF/LICENSE.txtURÑnÚ0}”¸â©•²®B{Ú›IL±âÌ1e} ‰!žBŒl3Ô}ý® mW ¶ï9çž{œ›Ó«Õ‡ÁÃ]wóÇÇo_æó9üäÍC7@ÓÚîš‹ö•Û©¿O2Ž!¬rÊþQýCš¤I­ìQ;§ÍÚÁ ¬Ú½ÂÁ¶“W}{«€ÙC7´ö 2ðÚéNÊ:D˜oõ¤§Cš´v‹ý€TàÌÞ_Z‹xìΙN·H Лî|T“o}ÐÝëQaýTšÌšlvÕ WízdUðvèm0gÁŒ·º D–uã¹ý¼Œú¨o:‘á6ƒÀ|vh(4ÁÑôzo8ªhótÞÚ Yšô:ðïÎwÁ…íNMˆ¦¾ Ná`‹FèýS›ÙÕ»7ir sö·ÁEýË`ŽŸM…ög;¡² (œN1 ²¿Uç#OìÍ8š ÚDÝ©×Áœû”C˜öÎüQ×4®w&ã±ë[1œÓGêï§nhƒ•†p#ö€s›oölhÅy¼C9¥¯‘øˆ÷J®(@×rKÖÔ‚?³‚3‚KÖÌ2Ø2¹â €U‚Tò€/TøþÁªçOÕ‚6 pu]2ZdÀª¼Ü¬zX ºâJ¶f2KQûÆÈ(b—i²¦"_áš,XÉä &°d² Üáoà ø«‰,ß”$îÔQó†ÆÃªH“ŠW¬Z Ô¦kZÉìõ>ãš)Ë(O6hLĶs^¿ö´’°âeAqsAÓ¤ddQÒ¨ìæ%aë ²&O4Â8Òe·†·+·Pà7—ŒWi‚ãÊy%®3ô.ä;vËŠ6‰`M˜ÔRpÃF4¬è'$;Ï kÂzÓÐv JJ$kúÿâyøüPKrzI±šPK H Yorg/slf4j/ILoggerFactory.class;õo×>Nv&F‰ü¢týâœ4“,}OŸüôôÔ"·Ää’ü¢JvF¬Ä²DýœÄ¼t}ÿ¤¬ÔäFÎôÔˆBF5 „‚à’¢Ì¼tkM„‰uÖŒ \Áù¥EÉ©n™9©Œ ¨éŒ`cd`d`fF ½¬ l ;dbàPKÔÇxŠ´PK H Yorg/slf4j/IMarkerFactory.class;õo×>^v&F‰ü¢týâœ4“,}OßÄ¢ìÔ"·Ää’ü¢JvF¬Ä²DýœÄ¼t}ÿ¤¬ÔäFÎôÔˆBF5 „‚à’¢Ì¼tkM„‰uÖŒ l©™Å%ÅŒ ¢ØtD12𤤖$&gÀ ZâIM‰qç—%§ºeæ¤22£:Vd(##3°ÝÎÊÀÆò;˜æ„Ò\ q Jn ÉÄÀPKüú«³¹PK H Yorg/slf4j/Logger.class–ûsUÇ¿›>ÒÇ–G å!byÒAT åQÚ´FÒ¤¦%µTÄmz›n»Ý »›¶Œ‚ã? ã8ŒãøèŒ?€ÈŒÎèø‹ƒŽ¿ùW(ã¹7§¥” ÍÌî¹sÎ=Ÿsî½›ßÿð#€S¸FHÃ~ÇÍE=kîÔBT, ÛÆä{б=ß°}/ŒZ ‘':^ÞŒ‰9£`ù '—3íœÒ¿T0­Yá6¡õ:ÂhÐPßoÚ¦^ñH≽4n_bóª V_W¦MhC×Ñ‚-¶m¶Ô°Ýôb¶1c‰ÙaÇUföF*9¼*nÓ±­v-‹" l ý$žf°îkÂì £]Ç.ìÖpøi‹dj,pÉF†,á;¶†ÎHuëìÅ aìÓñ"ökر†:߉۾†šHW\Òwè8€ƒ¶˜Þ„kdgO)¨ôÖÑÉ Cb¦c9uTGDNµ˜^Üžs6Ìtëèá™Iõ7Ì×ÑËîb®ë¸<ÆË.ËFÔ2ì\4nY"gXn®°DÑÇV³"ÆIªÔ½qߥD¬o°8%7Ø«*üL^×VàÓròŒŽ³è£ÝgäóÂ&Èã‘Äf_TÔ îû¤‹sÒÅùM–©™‘õŸcÙ€‹´7¯uØŽßኬ“³Í¢˜í•/éĆß)ÛhØyÖ-Ű„¡â…i¤×ñ&.S™'Òƒ1JU…+uGu$•îPìÒ•92¦ã-9RO§äÀ¸Ž 509NÊŒŽIeK§Sé0¦ènÎ ¥S©‰ë‰ÔÈH,}=90J´>1mµ›$cXÑ€wi%iJUË ?i, tfIlM˜¶H–f„;!wŒôèd +c¸¦ìó`­?ozjnó¥B1[å#6|> -㾑]5òl½']°}sIdLϤ›êeÈmG.op9/¬¼p½èà¼È.¦…_pmE@‹4¨EÔÓâò¸ÉC¥áh@Å6PFÙª4ƒm#¶ÓÁªÝÏ_fbÞuVdR”òÎà¨á.R>»®ªLN¬ó=£´G_šÁA_þŸ¶ÁÞÎVå­Bþúÿk(Og´nVÞ¥*ƒCåV­IW¨¼šü¸jÔ®ÐÅ©ú“ªQ'äu©,båVÓ¸Sp³bØ”[·¹¼Í{å‚õ4‡·é3N;W1Mòê…p 1ú`_Çš£¯½ß£öyÔÒ,Ðô5SÝ=PwOéô®'Àà ½ÛËZÈbP-Ë4¯aŽ|…”¯i’R«½»ç!C¸‹fÙÚ½ïÑ&ýÖ(¿[HwÈÇÇdûÉÿíëþÛÙNYi­˜ç€L@à/înöÜÇžsû¾‘ÆWè©CùwR œ¡g=éÙOÏ=z’Ýñ’†oI*‹#eÑUÇHy–öRPQYÜPñ©OÄ]}®Àúþç»wÖLÚ ü~dîwï÷ïìç¾{ûWï{ˆÖk·ë¤1]‹÷7&"}ë¯lôÅúûÍx[0”ŒÅGt*aª¼2x$ؘJ†#ÍñxpÄN$]ä 2ƒtr2•m GÃÉ­LŽU5{]ä¢r ƒ¦Ò4¦éjm$íol‰ ¦iýfR]úbÁ^3ÎT½ªÆW0ËzÔä"¦ͤ pÁ=ÏÑ¡H8NFFCf(Ü6{™.^5Áò_VªÄP¸1àk[iÀŒ ‡ÌÝñØ‘°L*§YT¥Ólƒ. 9à.+«ˆ ™‚½Ø£*wŽž+ÍP²©æ€ð7× y4|B,›vZ°µ3–Ý%o $^H‹tr´˜–@è æ19ÃI3„‰˜f¯Ê¥çµïC°e´\§­¤ULã§0éÁD»y4©L§Ä©5¨Žê™f&‚}fdÄM$ƒÑd8˜4™V®òåk§©Ø¾â Ô¨Ó…­¡µÐLV ‘DÒ3JY¡T<œñ£Á~iAžŽ˜ýfos(ŽEaä­t‰NÛ j¦íL ó§7‡Bf"Ñ‹&ã±HDcôƲ4˜Ö¯:ß5ãU¼¡Õ µA-QeòY«ŠÌÓi'ÓÒqZ;}áþ, úžx<×éÒ´ZöJÆÃÑþí©pDÁKeNòßšÝ ‹„{ȶ»/n{Ýɘ;œu¯Í.YÔaÐnº )%84dF!ìê\-[{䉗·-4»ƒuÑ&|ÌMÂ{ eµéȆû º\f;“1뮋ÐA^oÐè „wÖãÌÈO4všC±xR SjŠ& ²CšI„Á!*Ó)˜–š§ ÒBõ’°æm÷vy›}ÞÍ]ÞŽöî@Ws—‡‰½Žý HŠ-é G{寕–GÀ l"õŽ´ ˜¡ÃòxР(Å@´ó "¹·"/U¨–UW'<^W¢ùS‘dx(bn ˆÒ<ØÓcT‚q f¯$ДAG$Éèá„gp(9"÷Ž4BW#Z`Q‘·ˆ·‰®5èô&X`wgÇ^o«§“iÙä÷:z‹A׉6\R€ÂÁHøjSä¹Þ DžJKDE*±¥qÒÛ h{Ì­ˆfœ2á6㦻/–Šö6ˆ¼Ý wˆ” ãQ'½‹ic«ÙÕDûÅw£±Õ±!ÓŠ÷ªöŽÝ5îˆ*îð ”7hF“ꙓÞÃä ˜¦{ ™JlnlnPÂ5ˆ˜¡X¯™hHF–Fc[J*žÁ^3‰I4ˆlï3èfº…i¹Xxw,‘÷DÌ€l²*·ÈiÆw“QüÌUùIͲø­ÝF`r[òöGcq³w<å3ëų™>dÐí¢úéC±DR&·DÌ`tÏNÇÓˆAYÚs4d‰dÑG ú(}Œiª•l“0ÍÉ  ®xl8©°“NgZ”}æEFìF„Q3CÙIw2-Þƒ¬PDfÉxƒeÙ,‡gÜAw dù$ÒR‘ˆ€',°ì5”)2 ôï}†þƒ©þ ³Á$BVL*_ÁwSJ§ÿ̯Žê™“N¢d5'Q(‡Ò¾&u,›?—,O,q'ÒÈ}$´o©ê*ó3²Ç)ƒNÓ!ŸÂƒÉ‚ªe3s°¶)Æò5è^áh_ÌEgè>î7è ô"¼h5dš"ÌÛØoùy´cgôEú’c(ñTHA–u«Ž[K"nöE AcÎ"|˜¾¢ÓW ú= qÎÙ°hÔ¶€OH¡žóè'S9E<°ÖK¶IJÉøªNå9t{, øÍä@,wÒy¤²(LªovÖ7ógY±aᇜYßfª/±7z$R»‚q(9'š¾ LÝV¬F»‘r¯XZv¯Zž¨WùžÐOêô¦ùJi &r·û!ÓžÀù‰º{cfY7™Í¯Å'‡£(Î}ÁYN?’ û1òM^sÒÿ0]¦Xq!OºC[AÈiׄ+-%ÜI¥‰Aþ«ƒCa·]wî5 5u#K›Áx$lÆd;`÷Ÿ°©í¢f²qO§ÏI?gš§2¬P²‰[•ÆLº ù¥àž_À c1 wœô…78éwL;'UaÂV¢ßž–PªL0êFæyå :=—×xøÂÑÃfïÎ`Bꉋ~/Àî‹l‰{4ޝ !Ѱd‰ÿ5èÏôö«$Õi&b©8¾9qNPû{¢©A»Ì6 ±¿ôw!f€X†L9½@/êô’Aÿ'8¤ªèr+ô;~(ÀcùZöŠA¯ *.Tl?SVéÌéJŽ5z;².ËÔ…‚Ý`B9H<͉»/Tn…‚Ç¥—I•;Hõ$’ád*iZZJȧÁSd‚B ŽxŽ[€E\n°ÁS‘{¶ºº³àhµo<$Í’.DI.žÎ3tžipWBÙ¯a-À¯Ø«€kû`@\µæœœäMU<[ç ž#âÖLz%PvÈ".æ×ó7|£q^5Ù…€ €nu~€†ÅÁè‘unÂmàý½Bõbƒ·ò%Pho)¶ æ™› ([¤ÇµºVoWçf¨6«Sä)°¶VbŠeZ ne4K3­è àYÄTOU^™! Ðòƒw²½9Fbzñô ð·}€«õ“&ìUÝÏvñ6ö‰ùÅq&6Êq: Þ-ÙlV8‘öE·-‰rÌNƒ¢ì™Y–m.eùƒ÷Êò©ÙåèRdÝåï—8º@Öe¶ÎÊ(«üzY=-gu*q2àßêôtÇ F¥0÷˜î(æHUK„î„Àtt-wð!ÁÝWˆz 1{§´± 5ª)-ôÜϽeT0yo[,n¯œ;ÞÖš²ôJƒ3¦9À&2v‘ÉùnàdÔˆ­]ÒF"±aUùͤ;ÖçNd dËœpGÜÁ#&Ä6£î ‚]f¯“‡˜6÷¦T±¼TÐŒ ¡™ n{gh.I¸3Óà '#»lW³¬–T;Se»Á½36 ÎãõŠ󪔀 H)$ ìš0ŒX™æu8 ³ Çâ‡ÝAÁPè"‘wºajpò0-"IÄÎ#îêä£H»Í°þ`À5@¾†¯úËïü  ¿‘ 34)®‘â ÌQ¼‚{R™‘1ƒ©âýÍLWDcØag Ñ_—¨F¦ˆ]Ùúr÷…# £&§"¨â`Hn§ÈDFä~š?«Ë‚Ê®cºpò*³x(§u|½Á7H‰™­ lz½ÍCá½²”âÿ6ƒoâ·cJónowK‡ws—w»×çíÚßíóºKí)ù¿‹ß [ ôâÉľpr`‚ã©N~/6g§™Hƒ[·“ofjt÷Œ¸G€j,ô›í?à Åsäøîíâ÷ó­:ßfðøƒéÆ6ûÖ !§z ëP}ù9zªìÙ’ï}N>Æté¤À­Í}÷`8^74Pô EççOdZ}'”颜SȋۃîXHÀÞ´O¦•”PGoIšß ©õã‚ïDj '¬s³X*‘T–ìEÎÐ`‹»U‹u$ƒöY\áqüïSбj.³–9èäOOV[iÊÝ=çhœü&_{¬è9™{x -ÃÐØ'Qî`âÑ¥Òa_*R¾ øYäëH.Ï¥$âF†L‘á?‘¬Ñ‘G-;(çÊÌÌL“P:ið=|Ê*&öCåø·Ir ÀKÑ”òç •ó‹Ò^³'Õ/ö3ø ߇ê Þà9?¯.å?m*ç/ð `š3Ñ‰ä‡ þ" `«§ËÓÒÕíëØ±ÃÓÙÝÞì÷tû½sWËNôp(WóWtþªÁ_f‡{à/è`DRdH¬Åj¯˜¿nð£ü Àâh,êÇO?4 \Š¿üPø8“§ÕLZ*·ËzØŽ¦÷Ž0ꤺ¹Y85©’Ù› åü$/Õù›ðÎB€ëäoOÖ;-ûs£9ß=Å®ß5ø)þ6CÀÁûDhC&‡þE$…ýÀà§ù‡™£;»ÛÉGfç:wæücñš™Ž ÈAý þ© «*˜MŽÝòqŠŸü,ÿœiðXw[³Ï·½¹eWwÀÓ¹×ÛâÉiõ‹ EµÐ .dÍÉ¿dz'ÖØ:Íc ˜~óbá2wG<ŒŠ†04Ó­{ð )1êö4wú¼žÎ÷äk\*š{‘ÚÉ¿†ŽöDãf04 vqËd´¤T¦óïñ^“x.þ-•9ù€èÖî½Ê]}ãí;:àÝùo&å)ƒT[³×âãjhå XÊŸ¯˜——òÆO)aZvŽR™a!qióÞæî½žöÖŽ¬TNÍmsÒ€ZÕ‹7¤âÒaÊKUoK𤏽¨¢¹ µ·¤ZÆ"_8ŠWú—.IU’bèEöãaÛ7¡<07£Ë¡' eß~tô@Š &øf”LûÛ–lAššÈÿæ£z¯ bŸbÀ”ù28Ùrl,`|ËdJßVP¼d"&&MasV'½xj ‰ÊàÙrL HÉO¦â¸~ݸ·Û“&[ Y'Äîó}[OI~¹2ïß­0ÏCrË¿¨Ñ­Mº¶Þ1!L—¿æ/‘&­9çPÆ_6X>žàøoG°,QØMrÃÞwjö"Öå„Ei‚ÏÝÀXiÜLÈ{óêÄÄïÔ§¼‡[fú#+/Tåè;óÞó寴Mo¿)RúÔÓ߬”"‘\}5Z“q(È5”ûÂrÑyÞæã»ÝfÊuŠNk~Gú£†\¾ò÷O1”ûηÒ,ö¡Þ¬B"[jEâ%çæ^&éÚàóÉq +K Í4-_¹ØhÕy´/.R*‹™L=îPE$×eòÞu;Â13cüü—FX¸²8É"N°¸ð£"sÊ"6Ê©ÿ"A^6J¡e“9rFxnö3ùÖÉ:VŸôá7 dl•S1~éUÖû‚ÚÉ¿”@vW‹ê Ci(–œƒÁ£Š*+¬ˆëš4Ý-“• °X¦©ó.ve$jz‹%ÄÁ‰Nö¦dN㠲œºœnú'óeÍa­d̨b~Z¸ÈÌød¤è™C‘wcˆ¤`*k±ÏrO5àfãHH(J¥®èԢˡŒêHp°§7¸¬ðsÝeh[BûSfW@½Îm ÛH0GÀ¡ À†–2‰$²¾ÞHÌ ¶éeÚM.bíí†öš?C{'°Áª‰?*Åôw»´÷hïÕµ÷ÚÍÚ-ÈQY¶ÃÑ#±Ãf£Oñ‹=‚}iå—æŽÏ•ß^d±´3í˜ Dìpj(W%ã?yÊ[(@ñŸ{hmyîµ5㟊ñá¤Ä¼áF͸}~¥k·Á&%ž®}0ý-í„S‘5­É´}Î!ôsiÿ…ÿŠÆæoªƒù;Æ/äŒ_ÄøÿrÆ/cüjÎø,ÍÑ8;Ö4ŒKrÆ¥ë9c'Æ®œq9ÆSsÆÓ0ž‘CÿÏÌßMÕZEvLŸÂóJ23ëga\•3žñ9ã9WçŒ!¿6/g<ŸvÊg©¸ž#ߨßgùçò«-Èáã9Œæð½ˆœrЉëò9§hV^aȯ¶8‡ßçi9åU¬Y‚;gq¯¿Í÷“cÿ½Tº«‚GiНnŒ¦ûë¿FSkëÏP¥FûjOâVuûêQZ°¹¤ºä -e:FFmuÉÕœ8û§Ú“Òî)«I{›êÚ¦³P C º#ˆgÉØë KÆ £l~aÝjaú"­ó§m}‚øï'/ÜaW…o”ÚëG©?£´wŒößûTÑŽ<Áoõc¸ÿ<9N³éÃÔHU‚×B˜Þ¢ì8t±¶WØÛ¶7®”EY‰;;ó¬!óìB[H´=:í¨¶EºSuh›•HëÀš0WZ{/uߣ&.Eï¸ø´âǰ&iÛ´fü:µí‹Õú¤ïS=­Ô,^ëý­Uyt‡æQÆÞGÓámPRÚØÖ¬™Y0»ÒÓ,*y™6 hçžU9Šu:6üÍ„f-ÅÝûâ|G+>5FŸöqÝ'ÉU7JŸ=F¥|²âs¥СýŽºÀþ’ŠOÆèý}¾ÆÚW; ×(=(É —‡FéË›K«K¡ä“þŠï”Ø ±¦}5=Ÿût‘»Ø}í‚_·¿aÿ>nÿ>iÿ~Kýö@?–ÆÛ ѰþÇæ'xú ­¤Ÿ!@ŸEmü9|ë˜óK¬üùé×ÐìoP/ ¿£ýž®¢çèýAiºÞµ’–k;‘ç5¬ž§yµK¡ý&š©íÒ ]P*Ó¶h~hë „Ìs€jìÐŽWeî…Ô½åŒGµÝ*+•Q\»L*HÆ^Ö™v’)öªÐénÖµ.Äé÷ÁØmô;ã|ÉÎ8~xöKõ(¹§â'pV Ê䫳kJ]:!=“IBÏZIè¿N§¡›NœýNÅoñ{O&ÿ.gý™¦Ð_°íß1ÿA5ôµÒ‹HU/A“/+m‰5`¯¶OÉéWjy£•üÊ-4ÈázYþAݲ—’¬¬s9vº™]‰Å+ìbnnÿ® QñüýÉ>Yñü(ýÕüúq.^V"¶×®>Cg%çžýå *÷U²†¸} Õh˜¶‰"lñ6"}ú˜ÑIÓØE\NóG–ðtªã´gÒÅ\AÛ¸ «*©•áp<[‰¼FDÔökÀìä<Þ2±V;¨êìZh?m…3¼^{ƒÚß“£ g‹Æ˜eÍ—+kVZ]ÕTú ÍÓéG(?/Ë¿¾yáEZ°]gµt× Ûܞɠëí„;cŒKÆX?Å®Qž6ʳ²¹WåPžKžGe¼€¦óBr‰l Úø¥k÷ïúršBuúbþ^”ã\ lçb·¿~”—ŒñòöúÕ£ óLíÃ0Ôæ’Ú‡«K!5¨¬q#‘z©úud½Œƒ—%àe)­áe´‰—ÓVøA3¯$?×d¼lŠÌ!-Å­¡©Z‚ü¢¤**yEÐÇ!åUKZu>þ‰H¥ÙbI}Õ¥Hü©la™&qÄ@@¼šÊ¹!§ªZ¯&àÑ%_µÚIò€BHD‰´NwÕŽòº-Ž‹gÒ[¶ îÃï½¼ ²W—àr”·l,­*=Ne'¨PO¸¹¬ºÌVá2¹R:ܶY¯ÖÇxûü4>NSªõycÜvâìÓ²æR¦gOe£s;Í+kÀØZèmÍäõTÅh1_Dõü:èq­çÍà&ºœ·P7_L&o¥¾„b¼âܬÄ܉z  ­OëÇU=µh@Ë¥ðª°֮ČéÔ«D|Ô£Ep¥AãWhƒ¸ÌÔ©EQ‡J2ÙÌZSå_ž ÙÙl)•Å­R×3£ôÌ"BvCâ„ÙV¾DÚKH5.ùfѶÙUØRÊhw×(·#r °u£ë˜h´lŒ÷Ý“q§Ùâ¼Ü :¨¤‚ÚbÞ•q!PS¢’ºRb)æJÉ1Óïòùe&*½^Zû2«l髃‹ûñçÀ1š&õ¿’ßp/w?T—æeqbsvfGÙÃã{ÀY-þ¯ä÷JÒ»qŒo9ÃbÊáøv©TŽÙ±ò†0ÕOW"H-sn…ʉã4…“È)˜ðÕò013^MùÚÍ×Òø ò©ŸßŠÕo¦Ã|ñú ª_LåZf,E$\¡%qEèý^¯¥Ðˆ2„×&L»2,”pªB8èÚO³_ Òi=ÊÃq¦ùßi#…}¶ifÔžáÞEz ð»ã³™tR&Ïùm9JŸaõ9e|†ÕAØñ¢MÛÆv †'Æ)QÐùkÇøŽc´³’ÿM’¼ºQŸí’2¦ød1TòíJ>‘K"M¿t¾™¦ò-´’ßJ·RßF>þ`&ÒWÒ|»CR(‹?G@’—¥‘EíXSj‹t"Ýé‡Hè Y=D&úÿ]¢ßsUFŒÿ²ZŒ‚Öf[_fþݘPw†?—ãӸάàÿ*”E?L³øc@*w™|ˆäN¤ó»2Rï¢eJj‘qhœÔCyt̪kȈ;EþI€É­ $âc|¯¯–»_£“”×þñç»Næ¤UCQîZ0tµv ¶EíZ[ÉvømA6< à;Å£cüe9i¨­ãGŽÑŠJ~Ìn1ÎðLè3*NK âð[ø›s@°QBü(Ü7€àCbzIé ”¾'Þž &þ& Äw2‰³‚µ7È »- Ò£[EâH‘ãÖ¬Î̬N[_H‡ÒòäÍçQ±ÿó'”—?‡ÿ˜ûï´“_@\¿DûøU:¨¥YçË4€Ï‚z%‹—c†KΨm רO·Nš²Þ«ÔA7ç$:Ý>-rj×eŠä>%&Q£\ÜÏÓ÷ßË¿9Í®ûù·¸úýi~¦’ŸãçOóƒèaïÞï¨äÿ œæ³ESá4’%¨ÓhH? #Ý…zñVÅÊõÚ Ú»pïFímÚ;´÷«àbíVíÚ‡¨úÿPK„ÛôõÿÒDPK H Y#org/slf4j/LoggerFactoryFriend.class}PMKÃ@}kÓÆÆhë÷7êEª¨9øqQ©© I =ôR¶éZSÒ’(ø³ÄƒâÁàg“Šêfvfß¼7ûÞ?^ßìaIÃr*yÊ=~Ï Ÿ]ã²ÝnÂP8ò/9fÈU6†QT¡é‘ðÙ0ê±³×3¬°ÛQ»I=0ä#‹¤HðQc(1,žšŽYuZÖåÙ™yÕªŸØf˾¸¶Oœê9kªgXþƒ°y"è0(Õ°#J–ˆú]¿-"‡·}êLX¡Ëý…Š3©fÄu±Zäkº£±#ÞE¥¸úÖUP$Ö칸âÓ‹‚éE¬fiWt6/™ X¤hÊL9êfI2ÚPK®¯®Á­íPK H Yorg/slf4j/MDC.classVkSU~Òå"mi XÓZk 6ñBµ7« Ò¦€„bñ—ä¶,»ëfCK½Ô¢ßüêuhíŒ~RÇŽ~ÒÑÏ:þqÇç,K²@j±aÈæœ}Ïó¼ïsÞ÷=çö?Ÿ}`×£hhµÝRºlÎ\N_ÎÄASÍ¢ˆ t\Ö—õ´©[¥ôÄÜeYðšO–áhLöÍD8X33MYÒÍA·TY’–7rµ ϰ­4ÞE¹’ptW_’žtݲl/1'VÅ4ãhA›bmØÌÖ sžkX¥S}3-¸OC'v Ä—Š…Á¢îG ;[ ¡ì*ŒàÝ©(v <°Å¿œ§{2äÜ µU›c[ž¼ê]Ðnn2À®x†™æ”< áždž–Õššugr“ñZÇ5œPj·8•òÂÐÊy¹¢fOi8­ÂŠ9¶S<£á<öfX¾^‘þ{‡î»OéÛžŠc™(†5Œ`T`OMÕ¬]*IwT/x¶K¸$™tíe£¨6ü0Cݘ¹ìèÀ¹œt—‚\·cüÏa,ŠsÎ#ËB»ûêD¢pnõn¡ ÕG ãLÌQÝ0e1áÙ‰yÃ*&œ+Ç$žbJCNmm(Û¤éH·œž’Žíú4MÒum7†‹džå¼^1=*¦0-û¨Mc]•Z"TeÆ’cJÕ%ü7©(^`©n¥Ÿ˜¬-ŠcMŒqüb6ëZþâ…éܺU4b¶”=Ýòft³"cxE oÛL±ùÈNNNLå3ƒããÓù¡‘üóH.7xv„ÒOäsÓƒÓcµ*?46>Lkúƒ.0pW:;_Váòìgù9Н¤Œdh!О5,9^Yš“î´ªh¦]ÐÍÝ5Ô8˜Œx FYYo(hÆß¸¨Ò¸qY7©;^a‘U,ŠW›—jì>Õ¾!0´½6”½sï!yKÎ(YºWq øÔæº>½‚3D‰Bß¾©Þº6ê±â¬krìùŽ'ïiaß óYe™À‰í´:¸Š>vº`‡kÌ©ô¡ít j•³+nAŽJ€·#¥8¸»c–%ÝŒ©—ËRmvx£¢x›ºn: p€çK„7„öb/rôG x™=óÕи‹ïó¡ñkˆ©Ó™¿[9âýoæ8z‚OÁgSÿ*?ôM üŽó \"Í,Šü¥­AbžÏuhÒB¼Fß¶¯ÿk´ÞBËlçŽU´~ñ:üñ®ÙήUìUãþ#7±¯ФÑ'éF3¿WHr mx“Çò[„½Ž$ÞñI»Ö€Qbð-ø~ü mí¸ìÿbFóofàÒYõ–Ïöþ#7ðÀ-$fûÅ*~°)ºwÏ{!¢ö*Q{@†çÉÀ›t_©‘¼{Ä7ñP>¨ÜEFp¡mø„Ê€WC 'ê‡ÈC<ðÁù?>ô5lýKb~E¾¡·é÷Œï»mû‘ª¦Ï(QÕg_æ›xD –R~Þ~OúЙŸ?ù𠤃˜¼{± ý'fZ ¶‘m¾éÏÄü…˜¿Öð–|‹¸¼Ÿ¸‹fÝõUzbM¥HÈÙßü;ÿÀ>üR§6wx}ÃŒèr Lx;ÄêõMIABƒð©šÕ¬PEÅ»Q`Y ŠªçeôT¸Œ|_E+šE:HÝ-î euO5«{àUË'÷®€ñâ‹s2œÆ¾ê¢‡„½$Ü¿A˜ZÚøBÝâýóAPõ(ÓÓ[)úIq„GCñt=hLlÖ¼Âä\®&蛜QžõÝÀàùþ¯Ønâ¬ÀÇèx{:/ÜÀDç4¿nafv—8]Óu?Û$ØX#x…p:+¥À<(r^úõ±v‡pWƒ°w áoìŠâ¹¿ØmØÝ”Oר&ÕF5ðâ/èS ;?±PK²]%:ð PK H Yorg/slf4j/Marker.classuR]OA=S´»´"­_€X0q_xØ4UbY’66‘2l/Û©ÛÎòàOóÁà2Þj €›LîÜ;眽gæþþóó€]¼ŠPX26O¦Åéî89ö+Ù·¸:–g2)¤Î“Ó1e.BU ªÊ$}²Jê‡<)H ÖN¿´{Ÿ>ô–»Ô¾³Jç{ £§Nj7EI1êbG`ÅÓÃô8ýÜíÎbÜåÃ×QN.•Öo´¶o“áÀj«{ÕÁÞö@ jibÎè?€#úHN;#U -ikùZí=}³”IG¬Üì•Ú© ÔT±Ï¶ÖÆI§Ø‰ÀÚ¥†.8Þ)«öè”X4#ÆÊ‘•ÎXæü³Q:U$û³:sæû*×Ò•–»Ý¹ôöº…wLŒ3£T¾!vy튼£*}/eqpþ¦sãŽR¸ƒ}¾ƒ¾)mF•ÚúùßÞx*cxÝFMDˆy?Ï£TAó;—òÔxˆ±?L÷°â !®b1÷ῼªÌk†“‡|âã#<æÚ“ õ”óõs!nâYˆÏñ‚1/rë/PKãgÅõÛPK H Yorg/slf4j/MarkerFactory.classS[OA=Ó¶]–[¹X°"­È¢¼L¸Ø¨,bZB¶CYXºÍt!1ñÿøŠújâ£þ$cŒßnKK)D³ÉìÌw9ç»þüóõ;€TTÒЂV†®}~Ìu› úúξ0]†Öy«h¹Ï‚“‰Íˆ(P5´AcèwdA/Û»©}}Ë!3ÜtùŽ¡cm1»ú"»Y\ÞXÏn1 uÛW Æé6t SA—†nD®3dˆ„[1LLõ`s®´Š…t¸Þ«¡ÏCî&÷ársOä+jýP0¨a7ò1œBás¹¾•α•¯p_d*—,=gdR¯sB[¦8·#îŒ*¸¥!†1†ñ»Pj)Ö¸‡Ø./ŒÛw†[¶ÈÇ\'¶kó±RNÅL(¸«a êAeOØ%!ËzV”ézÄ-BJ‡þ}WÕu3Œ{ c+b—Ù.‰<ª%^¶Ì†h¦Ügˆ7Ó4›ª˜B!´ìäC§aÅ›£Ã!7øŽM’¨á˜ÜÞäÒòÞUaÈÝ³Ê ƒMm>¯™ù¡ïÞ”D¥ÿ—G*w{TDÑ« \Ô¬ݪå´à\µ 3™6*v*Œ~ÑÆæ¤eië|A9Ð] :c—âÙ­x»ÃxCÅ›RÐÝ Dkù¼‚¾XÚ¯J*~+BdöªØ‡ý䬠۳åÒlÕ4'­BµH”‰XO,î§ÁA ã°Šâ5µ$É(¤Ußc·%ný€Á°Š¼Å¦ùü¤IúíŠy®M•M“Lr‰H³‚IGXÁ.­F•AŽª8†1ÒÕ. *v\€Ã~WÅq{À »Da_Ö׳šYÕ¯j†U ã=»ý9ô^‰àRœ‰q‡½òfl‹ê&%‰\”Þ„ŠSÌ}ۊןLª8ƒ)ŠÊ^²Ê÷µS§<0sµm’ì·qAÅE\¢øK’4ิ"!ôÖRè%Çî.«Hc†ËP¯T´‚ε-½xEÅU¾!^º–gXÞ¾®"ƒ9¦kõŒ­W(Ó|’Uq“ ºs%Î:S®–òšµƼDÓæ>ëÊ…’fW-¢sÀW)ãžžš­“šHÉ®µ(Ï׎¼­5»Âd$Ö¦‹[g@ª}Ò¯ö­¶j3ȧøÌUdÂ-¸÷öi¿wÈö®§ÎBu Bøœ2ʾÀ—.–—Ð6?¡œ„‚¯(Žñ˜k!ãð&Î:Ùö",y"u„‡u¯ûi¿qQêþËt˜öëpl¬6:¤E-(øßHˆœöY“y"bÖoü@jüßÖuãk¿úŒ¿‡gu :DA†C¸æ—àÙš›a`óÍ´e:.7Ý27<ÿëëFVùõ›?(ï%]3¹ëÙd9¿¿¡oµ5Kç^ÎOæ©S— Ó–f*SÅb¥P.,.—Èõj”žÆpýPMÔv¡ÆÊÔÎÓVÈõuS,zª°—ƒö­EÊ)^ڇ˜».¯È¹6æÞ b=°×ÈÖæ¶¡êÿbü2&c;ª;ËôªŠ‚)Öý«½ê‹gDÕÓZânÝ™3׬ÝûÇÜ6[{lÛ²[‚¡unÖ ±hÙ nè/D=t>Í zÖzÚï]û½íÐé´2CÜžÁüÑh„—¾·Ý7¥£áhTSnkTÓ¾ž©ÝKÕß‘Ý=cWêÚ£? H”hzSkOøfØC4Qf=ÃØzèQ^×tQ—Ý~æR%˳kbV—ªéNwQÄ0”]Œ8N¡„e0<¢]eúÒ4‚üÑ$õÿiîÐùGþù NbOZú#Ië8>¡õ§$y.‡9ýf_ƒe/¼‚’½ÐD÷+ôeÇ_að;:Š¢Bß§£ù“Ä©Ã$Ág$=˜GÕ'0èSaþJ’‰ FëÉ Izu’Ñp¦¯$“£©Ï~¾o}é:á Ïú®#ñЃÀZÁ‘ØË}ȱ]ÈH ©9ѹ~䥎HýÈ«‘‡@Þ而á)ŒÉ¢T&…d•Ÿ1´òoÞL¤?àt£é=“NPÞ•&ÆýE_ïŒÿ†d:1ÞÄ•tb¢‰ëR?ßÄTwÓ‰t¬‰ýÅ›˜#ýÁtâG,Dðx§g®¡›¾“Ô/·©Êw¨öSÔ+w© Ó”Zš™˜%Ò÷h5GoK(ÑE?ŒûÕVOUЀé‡V…Mÿ2Tð9õ`Ô_Ùp(X¹ráQƒ$éj<£öNà ’vý‰Ë ×¶ZýÖJ%ÛßlK‹ðÂß}ùPK‰éŒò PK H Y"org/slf4j/event/KeyValuePair.class}S[OAþf»í–²-´@„ŠÐn õ‚×EHLŒ &5MŠOCYÊÂÚb»%᧘øª¾ôA¹D£ñÉ“1ž™®XhãÃÎΙ=ç»ì9óó÷çoæ°€U‡>†Þ]~ÀÓ6/—Òë›»fÑaðÍ[eËYdðÄù.øÑ¥! £:ÃH¥ZJ×ìí¹Ý´y`–ôó0ÏíºùŒ[UªØ3"«ÿ@sNÕ*—2&¤£½ ÞQp>­ÉÑa¼X½\·ì-³@žÕ0¨cÃçä7s4 ¿¾Í0ogH´k¸—uŒ`”¼óý}³¼Å0oOl¯u•eü¸Â ,Äü˜``1xUÇ$®1øÊ_eýñŽì ¦uÄ‘ Ü’鬨¼Vcè;—+)5‰”†³H3„å÷ºcÙ®9*ó™¯êܦÍtïþƆÀ¼¡ã&n1¨;¼¶Ã¿èùø¦+¿CfžV*[ÔážU«l>­¿Ü4«Ïù¦-{^)r;Ï«–ˆÝCÕÙ±HòØêÿ†+Ã0ЩŸôÃ+ƒÓìs/î­ñ}Ú/,5ÅÐ4“‡@®R¯ÍG–øn%˜ؘ AUè¦(ÔBšxÚ…ÅÔÒ[.Ý †ÛÄ5¢wqf$ ©#?ÊÒ;´F¨ÐÚ. !ˆ»t2Þ,Ã=ÜäNÐ0¹D íip\šœŒÄ„ 'è3>A;Eÿ1.EÆh¡0è†ã´#öáL€O†%i“ á’2šŸ.Á×GÖH¾ƒWm$ dc*IÏ[x=äwø×mJR¯1 XS’™"M}ÕÓ O‹ï(èŽÒÂ(†[|gÏ|g‘!·Œ¾Ç0Og è4¯b¿0©Á¿DÅ"%6•.É´÷+”‚GHÊT¡%wŠë ¾ÇZ|GÏ|/ɬ‡PK âVùºPK H Yorg/slf4j/event/Level.classuT[WUþ¹2L!Œ¡@šBk“PH/ÐVƒHr“j¤U‡dƒÃ +™ Ë'ÿ>ÐÖK–Úg”˽ÓC˜µöì™ïìÛ·Ï>çŸÿø ÀvChrjÕtÝÚžØM†í¦süÎ:vÝÕm·‚_ §Ùf‘”Õ‚*B rkk+k½‹-M3l«¨è`[ÿ³Ùµe®¨è”@~y~…ˆŠníInn}‘TD%R\›Í湪¢}¡³‹ë¹‚@ßæ%IÄðq}*0H1Ê–cÑDrqW?ÐÓ–nWÓ+[»FÙ%Ûkˆ‡p]Å0F:?äìÆ¥;Э†±²-0™8çµôz=s(¸5Ó®fÎgà2þMŸà–@pÊ´MwZàjâ¢g>¹Á4“*R[L%o»"Ï c*Æ‘~·@NÚÅ(!Üþç-˨êÖl­ÚØ£å~*û®éØ!ܧMkvŸk˜VŨ)¸‡I®ù€/‘Üã‘@—ìmÜ´]£jÔâ›lô™Š ¦ˆ˜¾¿oرĒ /M†CLsˆÇ‰üå†aÌ t¿ˆÛޝe§j›?•qöϪx‚µÅuÎ|š÷Ù«BÁ,0§§4Ö­ª$–!…úü%- $[íQ¾µcGat‡åk* (ò¤ÊÙ© ÄÉËf•š÷ÎÊŸu*7Ú´åÆÞ–Q+ê[!£-»zYáŠÁl­î÷¤°¡m££t\ŸaÀLû¬a4Õ!l˜°SÇ(ˆ)’ØÓ" (QÌ úiIŒTž/cC†¡†!šD¿Öìø¿ÞÞ%S9“xOk|b0Y«_÷Â݆Pßqÿ]àûÀ)öUà„?]¡JøJëÝü×›+kqyì.ouôˆMEœþ1´¯À'(Þ0Ü3è¯ÕÓ™ıμBú•âz?JÂ6j:wî jS¨äËŸ%A“ëË´VÕZ¨®PK«»›9s+é,K½¿9sSìÔQ¢[üHZS%ܰýçP`ŸºU{» 0èÖ¡î: #ĉêƒQÒcPrûåÌ~…t5£ÇIOÀ¤ã¦`Ú­36³´2˜£ïu°ÏžkžÞy·ãÁ½‹iaÉ9—ZùPKéЬ0PK H Y,org/slf4j/event/SubstituteLoggingEvent.classUkSÛF=küÀF¼œð yÐð¡‰I …BCÒ„’Ö®ón#°b d›H2ü¨Î™2IÛ™~e¦?ªÓ»+aËò:}ÐjïÞsï¹g÷®þýï¯,ÂI!‚®¢ bˆ3 ìëGzÖÒ«¥ì£Ý}cÏeˆ¯™UÓ]gèR3…$º‘L ¥  ÃLÍ.eëÍâ~Ö82ªn6Wßu\Ó­»†V+•Ìji“›b­[ #Z¡ñ…U·OA?Ý>0l‡Øh‚NÝ5­¬f:îji†sMã†mëïøJ ƒ8Ïkbˆª2…Œ`41ã¸ÀÐ׈ŠÑ‹E†!U ¼šyÎÉ\Tp —RÕaØ;zÅ`H¼s®Må â“ ¾ÀURÊóe˜ TY6¬C*&¤Œa ä´‚ž%Q1G/ܦ*È`Ž¡[·K¢>ªøE;;ĵ®+Èbál㚢zqÝñjV%øLX[žû¦‚¯°ÈtÍŠ‘sõÊ!Ûâ+_+Xz¸eÛЋ\nþFÁ·X倲]ûMßµH¥¡@²ü™Y„¿¥`ïðÀñ® [uã±nÚ‹}À¹ôrÓüŸŽà §Û%rŒS`š°3]ÿ ŽÒOî*®èO5èOá'ä(cž¾)_,Mß?£ Qt"\È‚TÑ'x*St"¬è"a–:(ÊOOü Ï%D®„‰¬H‰¼ÀK‘+a"k„¹Õ?Ú<ñ+©"Sa"·¥D~‘+2&r—0›ˆÌøŠüŠ×"³a"÷¥Dtìʈ̆‰h„Ùî@„75O¼×8ìšOd9EŒó˜?nÊ>A;A‡-IG­Inо,éwB‘ ¼i”i”zã÷P©O¥¥–Pn”Ú%²Çç.ŸàF¸Ô—„yÕ¡T~OñÒLéæ/…5-%²/ßü¥0‘"aŒD–ýÍ?€%!²&R–© *#²&b¦Ò¿±yâšô¦[ yÛñ¦;$Û[ñeÿPKýy«xÊE PK H Y&org/slf4j/helpers/AbstractLogger.class­š lWÇ¿gÏz}Œãdm·Ùš¦IÛ4öÚ©s“8Mp|Õ‰c7¶ã\”dl×›ìaf×qܤI¯PšìÑPR„B¢ª‚HR…JR „T„Š@H\âÿÞŒgwvÞÊÞ¬ygvü¾÷û¾÷¾ùíØñ{ÿûö;D´ƒ^«¦2*÷’¢’‡*­>£ÓÚÃZ4Ø>+è¨fDs‚Ui@íâCò¡"èJCV‚½†3r¢Sé°H°wddx„åƒEØ•Æé(£&s±‡bFD ‡žÐ§øÍ…53W}z…W½@»{é8£zÉ÷ªé$}ÌK«ôq:Åè~·µéñ¸Ôûxþ‰·G#LbOÐêBSZ~ 4ËÚ@šÇj*MÐ$£‰èSݱYhªY:‰äš—€\ï,/!J18kÕ_tÎÄà¸x;ŽªB±è‘Fìš¡;'´hb\ Ïéž÷ÿØÿAàÜ›WРݱ)„Õ †¢úÐ\dB7ÆÌ‰|ƒ±IÌ£a6¼·.*‰™P+8¸”ø;Q²¡kS#z<>çòºU£êÞó“úl©Æ½tŽÑ½‹U™#к±Ç  9C·š[îãv$޵©Mh“gi³VÚ›$£e73>í¦E `"Í:?¶ìœw-k6ùü ¦Ýj¶ñ>X¦eðɆˆ¹n,½d ïÌe0 'Pb£ô»bµ–q_ŠÕŠˆïŠfÉët‡$ŒÞa¬|¶ÝËš­ÀÊWjÖG£=Åfå\tÏw?v?™ã0=ãªÎ…‹cØ|à½Mö%$öi‚•úæÂá…Ãs¸å§C «æ³SõhlΘÔûB¼çë7äÃ<)eœ]†S4×{h†BÄè žËè,)ü©縆ÇA¼Fð®G†£'p‹Ø›bh¯âb€bxUÍ4KŸÀ‘ñg:Wð7Éûõ¼à­’`… ŠcÞfWnRímZ“ß›_iÅ'ÄŒæð5Oç­4Žbþ2}˜éîTx‹šX+»ExAåbÎU8 /¤5tHÌ}—eÍÍÏï ÅÖÈ ¢Rî‚´Ý¢ùÀŒ2& ëͨÈE«(=IO!îi Æ*(8Ö›¸Unó-jÉçï8f;)x3ÌæÕÛ¼zzFðøÙ'qV¾Höáí<]ZªÐÍùàSŸF¡Kz™žÍ/ô¹¥p®Í›.\¨nÁÆ=O/äã^´p®>Ðz“¶Z¼Ö6Y³DÐvQAÈòr×õ }ÊZWN.Ë®&ç½dï£ÇÚGo³¤oàÍ7_`³¼‹‚ÇÏžtî#'Ú"ŸGypl´ÈuÙ¯HzèØ©³ÅÄŽ"Ðf7ÚìF›Ý(º©\œñnR³hÝôò’õ»Úér¸ŒúŸ+¢þ«h¬¼ú¯-Ivíô‹ _ù¥%É 6™÷˜ƒœ”úh‡ îûè*ZúZ:µ\%¥>ÊBd>z뀼Z¼’Rí0}ÔQÀG¯÷9ÌöùR|””úÈQ¨«¾ðQè—Š÷QRê#εy_îuàÞ(ÞGI¹v[<¹¾‚.ý*fûZñ>JÊ}”åÉ|ôxßï[¥ø()÷ÑnÓG…|tì·á£ï¬Œ’r9êwµÓ;Èá{¨ÿÝ"꿜ÜG²k§òAþq)>JI}´Çï“ûè=´ôOÐÒ?]®RRe!2ý Ÿò‹â}”’úhé£}|ôKð~…Ù~]ŠRR9 u5Ðûÿ…þ¶x¥¤>rà\›÷;à~ÜŠ÷QJî£ýOî£?¡KÿŒÙþR¼Rrey2}Þ_Áû[)>JÉ}´ßôѾB>ú;Øÿ€þ¹2>JÉ}ä¨ßÕNÿBÿFýÿ-ÅG)¹äüƤ• ?³²òR|”–ú¨Ç÷K}Ä*È˼´†U-×Gi©²‰˜ H- uÅû(-õQé£~¹°^VÕl,ÅGi©…æ7[ °…6ÔGœkóÖwpŠ÷QZî£Oê#ö ºt#ÖuSñ>JË}”åI|Äൂ·¹¥å>:`ú¨¿€Ø°·RÛ¾2>JË}ä¨ßÕN;‘CêßUŠÒr9È®Þò# ï+ÅG©Mð°ÜGûÑÒÝhéÞåú(#õQ"óÑ£€ r°xe¤>4}4\ÀGCà c5—⣌ÔGŽB] 4ðz´xe¤>rà\›w¸“À=^¼2rX<¹N£K5¬ëdñ>ÊÈ}”åÉ|4 ^¼P)>ÊÈ}4búh¸Â`Gà£ØÊø(#÷‘£~W;È!ŽúçJñQFî#ÙµÓçA^ùÂû¨Œÿí€ÝÒæÊ×€c~å&e3Ïÿ¦ƒØSTÍžÎYë›VC¯ ×˜8ãÜ2qƹåâŒs\ÝDÍnÏ•q§|—ÊŽ—û•Q&¡^ÂÝs9‡š{÷,R}6ÕgS}b¯9µ•Ú,ê VàØá÷¼KÇnP“ƒî÷|ŸŽ!ƒ×Éϯ{¯Wü;5s ||¹ÙóØ‚h=»B;™ùk¼½æôvŠvŠvŠvŠVŠüŒ·£Gl R^߈‘í´ÅJûmÌêűͯܦ»=~Ïh-??½»‚gê¯ð{DÞµââÌueW!¢k¤²$Õ³­ciÚÀ2ÔÊ®‹¼¡´G L󬨠ͮ Í® Í® Í® ®#BAôFú 6Ù¬ ŠÊþC¼t¬JQèUZšþ¿úÄë?+ö÷ÆÿPKÌÊ~» 1$PK H Y)org/slf4j/helpers/BasicMDCAdapter$1.classS]OA=ÓOºmÙ¿¥à¶U }4Ñ¢‘¤U“’&<Û¡»¸l›Ù­‰oþ$|PMŒo&þ(ãÝé"-5©é&;sçνçž3wæ×ï¯ßla-ƒâi$rH"ŰܕŠïmWláö„ô+ϹïXÝÚ³6ïB6Ríø…u ¯OŒßÖ0ƒLZYä–Žù{^q¹×©ìy¶NÀ]±oKÁÛõ®Å]‚ßq<'¨2ÄÍb+Y†9•Ô·òŠûvƒ÷4äa„s ófýbŸö¶Ã¬+ ù¯FJ¯æ°ˆk še;n»Åݾ Fcé—Ö «æ-¶µn› õºã‰×ý“C!÷CyÄQikqé(¹g"}PKd†!VPK H Y'org/slf4j/helpers/BasicMDCAdapter.class–ÛsUÇ¿' Ýf»½ÒK¸•´i (P.-áVHZ´¬W¶é6Ùv» »›EÇ}RÆ/£úà‹ú†3Bq”'˜ñorçì²›lT'3{ùíù}ŸóûýÎ9ùëŸßþp+2"h“U°í ½‹êŠš1T³”™ž[ÔŠCû¸nêÎi†¶ÔPABCªb•2¶±px1SÖŒªfÙ™«eKSçs•¢jäÕêôÂŒ£—lÚbè„"¡KA7zv5;ŸQm½˜?›˜W«Žf1 8!¹³ÚÍšf3 çÖú¤„ {^lï!½èãÓßÄ0˜j äqr¨À§4 `3 [t³¬Yº£ÎZ# Ãî\ÎÉ–Ãs+«fZI5&¬RmY3s·ŠZÕÑ+f¶1Ä—´ÕdQ5ÍŠ“œÓ’fÍ0dlÁN¿“¡?UoƱt³D°2va·„= öbCòEHTè’Fuߔʅ»p÷3t sÍÑ MSÂÃÆÀtQµËd–‘B=¢`HÕæª ŒžèP¡ƒ8¨à^¦qÕ;Öb\ Ïf—:ÌçzD”s=.Æ:ßM:®àj·´åÊŠÆMã Nñ•²¡hhªÅ'ø*ÔοM(8ƒ, §:ÍðÙn|šC‘2äi9ÇëužÊ™Ê5dRKÂE“¸Ä«Öìò™ÕËÚ*Ãþ¥m]l 9yL1tT+UÏ}°Ug4›¸÷¯ã †>j‚l¥ºê->Ohß³…Ä,ÄX¡sUÁ5Þ”="O†„ë ‰`•ÙU=S¿öc3zÉTš¥1̾pýŒ7fp|=Y:M?†h¶2O!zrº©MÕ–ç4ë*צªá‚jé"–kŒ:eöŸ=ëØ¨ƒ—xªâÍ‘éÓŠX`Ë|wè UŸö½ÆÐ«Õ§áü¯iÒJ›!yx:•j`óB†:³…&WÚ [1í–#6¶Æ¾váÛ+Ƽø8þ¸~\› ÂÈź—h‘0‚á?ŠhÉRòk”…ãëiâgäCž©Ô¬¢v^çéܪýî Lš¦fe Õ¶5›6ˆN:c tó3Þ8?;Èö&=G0 …žéü¥ë[d™B”ž€mÃk`Ã!Í®!v2=öÎ’-~ý¿Ï·éÚ6ºŽÏÒ>ˆwèMqýñ.Þ£;£õ’§ý;ŽÒ},ý]±e6þÒ¶ÿ9ü+úï#ùƒS£OÐ÷)Š9<ÅÍ£÷‘M<@¦ ×yب»t½@o áC—±9ì£ÍgÓ8Š+eØ ç¡ð§÷qCàA¥§?À0‡"Í{è®E#ËYbˆtÿm°Œöõ)o&wø?º'öüÈcÄÓÑ=’~€W"x„£wÙ]9.P Tëè£Üï Ž˜tu|Ĥ‡Ø‰~ñÁ\‹FÖæsÀNë+ÑÈÕÉ™ŽEêSèòÌ‘j‘*7O=±PÇ“ðy>OWOW˜g³ËsÊï¦é¡ûö€'G9ê%êg×x:€ F ’^&(“&\¡Fº)À\!¬“&ÀqXN\à°g›‹SB–|9Î-'ш#Îk ÍåºMªɇý£:Š„OÑÕDѦàîb+“]Ç¢Gs›RÍÕ¶6Ò(|¤×p¶™çSÒÿŒxîÁçu<[}ž,…x¸¥'ðd_Æyç âÅgùzŒ<Ç¡…®Ó—ä÷•úkŠñ 5зÏh SEÈ«â7ÐÓ<š‚ÍýÖÐJ=e•FLú›HΣ” KN×…`;’…êw´j¿¯c‘}Ù_ÿ2uÕ ±5æýE}ŠÞ¹L(ßÇ廾p»pú¡.å1_4æ‰2þßÅKeXj:,õãs¥Üy[ôtÍ_Ú!É™ð´¢Äýü\Ùláã &¼è§øŽPKkªŠ«“ PK H Y#org/slf4j/helpers/BasicMarker.class•VKpU=O’ÝŠÔ6Žò#‰:[Š, ØÄ8ŽœX²'Nd -·­vän¥Õ2 0ó Ÿdf1 ÌÔ0¿*Â" ¨š8RÅÌÔTAÕ,gÅ‚ ;X±§(Ây­V[Vœ³Pëõ}ïÝ{Î=÷¾×ÿýþãOìÅ¥B+ˆ¨hA«@Ǽ¾¨gJº5—›ž7 ®@k¿i™î~pwO^AT Ç[TuÍR¦`[…ªã–›²ËçǬIÇtAÇÑÏš7áuˆCUЦ¢w ì°¹L¥4»w>S4Jeédè³Õ3†#Ðæ³= éFWÂIKŸ‚õ]+@GJ%cN/ :sÕ>W0Ê®i[QlèÔ<Çš¥/ZA·,ÛÕ¦ ͪ–J1t`“d¾Y`S÷èŠË ×1­¹¾ž¼Ä~·Š­Ø&‘·®‹¢Sà‘Aϧ¶¨—ªô™cFsmM×j5½¢{cŒ°SÅ=ТL§«›Vѳ’§Ú¾¾ž“qta§‚{™•æÙ8îÇO< ¢=í«“Fõˆ£‰eMaÏíýH©Ø4YVÌ Oì -£âACÛ tL%×°ñŸÉÔUlùˆËÂpùÜFx@¤¥Á•ÞûööeìXBä£Tò:v… ‡tK]Ç}!L®°êB”ÏÇÈêq¦x?Y ` )Êç†É÷p»Þ€]/^ÄK>»„Û£1¾ðjñaö9%dÐëH ¼%r‘ð• tà‘‚ ß}Íi¨ãIéäe: 7%j½Wš5¶F¢~îAý…¿æ/u¼Þ¸¯â}.ÕÜÅj÷4'¢ÁgÌ÷Y«ÀWi{šÏv€™ž¸ŸâGBh†7ÙÅxÅ8~éeQÈßÙÈ6Âÿl ècuEû–й"Ù/! Îî¾~Ï-¡“ƒ!¡+—Nù²sýå›_6d=I&àýÁ) þ!=»Q €ôÃÀ!̲B‹8Ê>”5îëg~E a +ŸÅ¯ƒhGKûºïС``ç·^7ó¦õ }êo"Äj'§Ãÿ§#wàt–Q"©²ñ±-ÒÅ" ÆÑQÖAŽºÕ9 4p874­ä¤®âÄïŸÓ%ùÍÿždê}‰‡ÔZÂWRÿF×»Þ€x³’ ÑgÈrl­ã.°Hßàçô›¬·Ð†·±)Æïü÷H õà7xá·˜L|¨Þ{JK”f~ŒøØöøu•–ñ³æRüCCUGƒ#¥X?|½f¥(ïÒÍ2ŽÈljÑÈOÉ·kx:—îЖ1•8½Œç&S¾X©T]¬lºÎ<˜½ùE:1-ß/ßü_:1#GéeÌÊž‹xèöx§ô;LÊGÄzü‰gæ{$þgÎý…UøWž+#οã$Þ‡Ž<&IîïÇNï@’í5ësZx¿%¡¬€ ÞQù¦Ï¼6÷V tXýšÁóÒú¶—³‹?PKÐEÉ‹âY PK H Y*org/slf4j/helpers/BasicMarkerFactory.classTÑrÓF=+9r”Äq HˆC! mZ'©CBJÀ†Üf&ºVGA–2’ÌÀõ…˜iÇC3Óò3|S‡á®,+©Mi¤ÕÞ½÷œ³çîêý‡?ÿpë(P5¤ ÍÝçO¹ép·a>¨ï +dH/Ù®®0¨³…- §f¢¤Vh;¦å¹VË÷…škÉçìUùATƒ04 ÆÃeÏo˜óøÆ¾¹'œáæ-ØV•ûO„¿Á­ÐóŸ3èÍhN TRù:Ê*ie¸t$~ÓqDƒ;«~£Õ¤”ÛÏ,qÚž{ _0œï°å]Þy‹»®æë"ï¶'ƒ,ƤgÆf+G€µÐ·ÝF©°5ˆs×pÞÀLt9?+Žœk2ræ8^ÇÝR¡?¤á"õáȧŽX y†ÉϺ—ÁƤ¼/ \ƆÁƒV¸ùxµ†ÅOПH„üÊÀ, I› ¹í÷Äó‡º;2ÎÀ¼´'틦÷Th¸ÊpîHýfo¿kvÃåaË wOÐï¥þÎTz+­”RkÞ.aŽTlWÜo5ëÂÿ™×Šä*žÅ-îÛrSážP£*'9¥„®S_;±žîvOK¿(*òœÝnQîS )y.åZùÙŒ+‡j!·ž±ô´xfað§v‡ÁØT±×e%éëQD$j25¯å[bÖ€gûw|Ucšn´†zròVÓhÒÏDÁ×to˜üÐûEnA¥/ [lƒ¡m·¡ÿÌ«(û:½‡)Cþ†RtZFpßÐÌèÔPô& ß⻯MÙ)Ësï0tˆìv.×Æé¿‹¿#3÷g¼Áduþ¦1µ=ׯt5ZšKª\»¿ð Õù—„¡Fü3Ðéý#¡–IË&°Ž5Õ¯!“ÕÁl…ÆR—•Ô'¥–ÕÆdø6Ì äÌúº¹=AÉlL`Ì•W™4¹ÍnwXÇb‡ÏÕsÊŸM1â)²’þSª’¥¹»‰­x²¥œKæwè_g£²ªùBIëS@,Mx‚§ dc‘ü2‘ü Õri‘ÜL ç9ÔbLÞâ5äOÿ‰ÔÎÿö7Ü;Wæ|šJ·þPK’ÌË.CPK H Y,org/slf4j/helpers/LegacyAbstractLogger.class‘ÏNÛ@Æ¿ÍßÖBC@ü+MÍ.U¥Š d¸‚Äm³àxÑÚAêËô zAªŠÔC …:^¬*r-¥ïÌÎ÷ÍoVãßO?ØEÓBÙ"r6ò(0¬+í¶ïj÷¦}-¼;¡ƒöçAj> åºB3>J_†Ÿ²ÍVß ¼,²1›¡ño»#\>ü’„ÌÉ GwÑõùÀ—vÁæl”":b0vcC$ÍÛ¨DÒ¬ ý+5¡¼²Q•s®ý åµZŒëj­ôßyå@hɽ>=Q*ÿì°ÃÀŽˆ°¯ü ä~ØçÞXä¿ì<ö¾+rûêR0”é‹“ñh t/"1T5$'Ýãb.¼–CÓù¿}ì1T'½Ç\ßRµuAÛ™ÜÌIê Ö©ë¡8ÑÐzúý ¿ç¹ ZE†~8Ãêô1,Ó-ƒ(Ï›s•*mŠŒb~ûìÁXÖè,˜¢…u:íg6°i€3x7 ˜1Í?Pü–h.›æÅgCÜe[xkf–R1³ILu ¦’Š)'1KS0ÕTÌB³6SKÅ,&1[S0 ã÷PK8‡›O°µPK H Y*org/slf4j/helpers/MarkerIgnoringBase.class¥—ûSUÇÏ…@ n„RÑ–Xy M¨TKCcyUÒJåÑB[ËB.ai²K7›>´µÅ¶Új}ÔÇŒŽ:£3þèö—tFgüü£Ϲ٠ñ²+éò»‡³÷|¿÷ÜýÜ›äïþø úáëT@¥| TA5ƒ6ÃL…³é•þµð*O¯s3žT3<™0R)n«YΠzPÓ5+Æ ²³k.5P뇀ÏÂàÀÖú Õ¼ÌÍxJ7LMO$vkÙS]æcºº”æI!µ@R»Bƒ*‹3hìL¬©WÕpZÕSái‹¢ÓzÙÀ ÃaDIæôÒ_¶ìšFªib0PV›Ê ¤Ò ÓAå¼[Ñ‹TÔÊ ûÿ­gVMã­‰]ö²ûh]qÁFùR.e/=jS $–*I(s€2 µSÔDQ'E-uSÔJQ½$ºKËÆõ£D3¬@„4}æ)qˆB²Ÿ"!ùEBòEBò¨Q[ò¬jê%’Lj Ék˜§ÄqJÉaŠ„ä(EBòEBr\¸Ýú˜if‰æ)¢uN(3I!:E‘}‡"!:CQ«æ4Ë«?œÓÒIŽ"³P€yXðÃy.ÀEuò»dP“âÖHZÍf4tv•¼8‘Œà,úAU` –¥ç üXOŠÁžÿ”Û$Ð,¸+Âm¦®¯s÷F¯ÓØ’²ûˆÖ€Æ€uRÛ‹5Ƹ‹Tu šReÆÓÆÇ©šØææž-lsLe¹©©é9Ü¿š¡ÏÆGQæ$¾ÝCÏZªnͩ鯺u÷ÉìäÅŽðåŽIì)˜Ðt>™Ë,qs†^ƒú„±Œ:*ªáÿvÒg­j¸í‰r‹¨86GFD»p…2".òsq0lÉ:&xød²)ÙòPœeˆ8mzœÞŠafT„¦R5%}{ƒSõ}hÔW¸bp´,mÇ‹A-jä2\·ˆt‡1 Ÿuê¥gò„ Óèø”A`ÚÈ™Ëü„F´4oeâ •á°Q¾nòeÕâI_ò^ ®àß^È‚…÷~ÄUÀUhÃ?Ýðz3a¼3¼Wu?öD ¹×j‘ì€÷ðªÀûpï ?ÚnÙÅx¯Åyðÿ&÷ˆâ¦Â»˜¢à¶ð Â[fœ>u©®»'»6'µ¬éZû £ŠZÕ¶Eð¡è8wmÕiíû¿»§7Ï˲ýXtXÈv†eýEY?ܲ݇P >¶ .a]ÞkÑ Å—‡=²Å| ¢¿0°hQ[´¨-ZÔÂaAÑCŒ|ØS>qì¦Y¶ÄnŽ=C7ŸÂ#»›Ï öÊÇÑ`h[ƒ¢Áçð…0ØçËK2,£ÛÀr†e¿<Íq¬‰— KÈ–WdÙMx€%ä Ë«²ÅÂrfG°„\`é­f°›Y°„\`é’ Î¡Á¼XzayM†åÂ6°Dœa9(OskÔ²a‰¸ÀÒ'Ë&±ˆ{€%â Ëë²Å*¢í–ˆ ,‡e«4v“ñKÄ–7eƒu4¸â–¨#,2,Ö6°Äœa”§ykn” KÌ–·dÙ›XtË,1WX†d‹;ËÆŽ`‰¹À2"[ÝÃnî{€%æ˘lð z€%îËÛ2,¶%á ËIyš_bÍã²aI¸À2!Ë~ƒEßz€%á ËiÙâ;„åûÁ’påŒlõ#vó“X.°LË?£Á/`ÁŸ†¶Á”x?íÂìüS8‹ÌœËûyHÖ¯âÿ]£ø2^òù]¢é×’¯Ïíïº!ú-ìðÝ{].vúî]`Ñõ1|E]ü PKêì§`¸PK H Y(org/slf4j/helpers/MessageFormatter.class¥Y xå~ÿ=ÃfHB „Â!&»!á–3"$ ÁDn&ÙI²¸Ù» õoEQ[Q[Ó*Eh5¬Rñ¨Å£Úzö°‡ÖÖ^ö®ÕJUúþ³“%Ç&Ù¨ÎÎ|óýï÷~çÿO|éó'N˜!†;`‚Ù‹+l)›ÔÍj¡Wõ5.«Û¤Õ‡ló=>O¨HÀœ›Wã@†ØáPE`¼?ÐXô6ÌØTؤy[´@°°R ÕF­ÌhVC!- ¨j[D °$·â¬êPÀãkœ·¦¢§Ùyy½¡ L®XÙÚâÕæI2I ’‘"Ö¨…V6ü[Ô:¯V¢úÜ·Òœ¹1ÁÏŠ¢‹t¸TÃ1‚œI¬¹Ys—ø[Úrc‚ÄIˆt›‘âs4&•ø¼Ï@¦£d![`Ü€+ ’‘¹y½ :0V‚æLêW%ñ¼žmš{¹P›5f7(ŒW0Â[›5_(È”äö¢I ÎE.«­N zê‹»–ÇœxË#õ 8e»|™Ø×H¤É©@:Ñ)¯ÆŽ)#{¾XØêñºµ€Ó0ÝŽ fbV·–Ѝ±¥¼š¯1Ô¤·T¹…˜-­Í°ä–çÕ$`ž€iû‰³@Aΰ{|nmë²ô„Ê#(Å ¢„ðjK‹æs Ììª[Ò¤ªµËZ5_½6¯¼¼w úó$Ô"e²ªBþÈK™¶Å ʱD Õ\¬W[4w©æõèuЯÕr]…‚J¹.Ù,õ·2ÆÆjih™ä¼\ +·¤oFv¬¦¿m y¼…‹Õ`S¥ÚâÀE0K+¨A-“åÖ´o[±î~´Fc–C't_E¡Û¡ ½¦a•‚ÕXÃÐÖ3ŠÅ¡H¦J°Žw¾V¯Wº²Aº²Q`r¬’é'Ú&Ô)¨ó•À*ñªA6ÏðnÝ© ©Ú€F;šx°‰áìñ^VIPo&½°ôÐ{4ÃÇ" ª ZÄÁb£8 Yò-¬Ê5:j@A BjßïÕTŸn´wL߸kVKœÍg¡ÄÙª  ÛèI][H‹d¡¹\‚”H¯(¸WDOM¼ %äj R-Av)¸×Ê85ù¡¸Qª%Êõ¥\¢Ü¨à&Ü,äñÅQ.1vKŒ%ã6{p;Ýñú}qƒ,‘ wJ2 ò5wánºÓàõ«ñS)“(û$J©DÙ¯à^ÜÇÎsë]7L©„9ÈîcüRð¾N\¤ »âõƒW¯š°ÈŽv1Ûe—šðÀô2ÕãÕÜ9ã-7/ÇãÛì¯WC¿/‡ÿª¼ê6rü 9¡¶-gl¿Ã ¾-ç¢ZÅñ’€GÄ:Žá;v|WÁ£xL ³÷Þ¹BkaaÉadÕ@žLz‰>6¤—Ñ,+.¯XTÚ…óºD<Ž'ì8¡à{xR`h·pðSï÷…T/¸Tk뱕uöõj ñ”‚§ñ §FK+»zv ½þw`C”€ï³vòs$äœÂó˜­Ù¿™ÇI±¬ÇÂx‘< d®~('êËrsXÝÿvõ#©øc©8À¾öšT|]*.é_ñM©ø–T,ë_ñ§RñgR±´?űH’—T&¥tQEyå†ê•Å+V²v¸_-ñû‚!ÕªQ½­š™óí<«uª-[.%;†tJ¸¦ö®"/ª.)^¾hCÉâârÍZnN%~7ƒŸ\áñiU­ÍuZ`¥¬) Àb÷Ö¨|6„–P“‡ÛÈħϞÇzš³5g¶òþ+y'zŽÎ戡åºî\f5ÐØÝ_O`M\v¿( OüLãÖÌcoM ÅøÎH‹Ùº‘å éÐêZ)›Òˆ´©q›ù¹1ÔbÅcŠiÉÇA7 ’' QÎj‹zÉg Öµòø™ÑgS­‚SÊÝy$¤ÇP¹<¶²þZü!~xToäèG]?‡hPÓ|ú Jî1Èyœì^ŸÀFäfuWßÿ±ÞqHµ§Ñ§†Zqña¼ójhÒ_ì<ó &ÜÌs?ïTíKlsƒaà¨ö·êµ2 ]ZÏ&.«0•[²‰ã‚Qø~ _ñÉ„_óù.Ïïòù7x/ú<™øm—÷¿C:ï­°ñú>%…üüµ:CÓU~Ï«MÖá¼*üâoþŒŒÅÅ”JRC–'aZevU‡a?Úär$=¢ˆ¿ô»¿âo|/áþnÀ-#œ‰ÃœVn•%?ä]:dND9 9 ÿÐ!åÝ?yg"x¢Î^‚_Im GºÂZéªÊ?…Þ«rNÎ#Mš0ë&Òɸ‡×ý°ól•ˆû‚ƒºIg"jr$þÅ72ž©ø7>¤I;uÿC™ñ}"ÄgH±ãA; ¿§ 6UTì§KÐze~FõÒ¡ë!‚=ÜÅS%jV1ÌÚiøcü—ÚCˆý‰=‹ÏBÇîÀþ7.ŒszFð‘.™UpÿÓ3›H‡t S.‘퀰9ŸGÒ d¬®üãÈ;êzŠ|dµä5@á*Z˜š2mãqœ7×jžeK³¹NB‡3unvæÏ²¤YL19{_Æɰ:³åº\P+ÅÖ”F^9Ó,a\¸Ëô›¥û0~—íŒÔO³XÜR?Ú²½Uµ|ÞXÔŽ²îï\i¶i'pѪã`á¬L³X¥ÎøˆNŸ»l¢ýLy?¤¢Å@¯² C2ÂÎSTÏucð ð,fã9vÅ)\ˆ°/ò‹÷evÑ+¸ ¯b^ÃN¼ŽkñnǛ؇·poãú$[ô›÷U6ï»ÌòûÄú€9ú˜]'3µ˜Ù(fE|ŠÏd [g-ð.R òîs½ÇpÍê™Éˆg!Ës*I&ÊlzY.Ádå FÀnÇ4–& TS!QÎ`bW©ˆH3§LsF–D/}Ž›râE*o‹QÕ£FïƒÕ|Ø9Zfå’Y)kÂj9l>c&™€#ÀÂ>µ±o“ر#èI:=8[ñ£¢?J˜Éž'8„…±2é~Øa²}ŠdAÅÊ(‰Õ\*Û'm´õ~Ž’ÑVÉ¡7ƒ$ÝÂ'œ§™ÅO» ©´¨Õ4ÃêGú*1œYƒZ*ÑŽΆÙ‰ÎÔµX_{ÌÕµÚ>J8\.mÇ~×3ðïE’Óõ4üa\ÖŽ)i5$­aliÇVJ¶’íaìhG%W’«ÂØÙŽ•”\gH® ã†v,¤äCrK·¶c %w’;Âøj;ÆP²×ì ãžv9pžÆN¼û黉 Åz¶=Xº›Èð*,¥tf~ŒHÄ9BÁ1ç‰$,É()X)†aHE#Ò,F`«HÃ"7Š‘Ø#Fa¿ÈÀ"GD¿‰ÆvIhX/GèwVcX‡…¶L"!:¤dˆ‘â¡HT†uþ“ rŽ‘–CþÅÄHøù×qþÎað¿QéÌ—‰hÇäJ9œŽã›©ß¢ ’—‡y—z„66CpÔ™Ú¡gM·šÈ’xÐ(Ž1ú𛫘Ȉä"IœÃ2›„©â\ÌÎè^ ÿ¯°XLyŒÒ‡z͉z9ÇðÒ(Ö*6N¹óÃÚ(¢D”ÛÍzgÊ9Ôò]#lâh(Îw‰ÇqÒŒZ×É"³£Ù‡0ÎéJ³LË×ÇV¶Å}gê³Òƒ]°wäâçL ó”¿ åΔuõlªçÒIˆÉ°‹ …ÈSø¥<“Ä4¶ót¦yŠø\*ÎC…˜ebjÄ<¬óu§gmGÄ}esM’>ièAÔéõ,}"ñ®gj×wIm2¬Ÿ!GˆìÓ°ž†Ãf$7… "MndÛžiÈur¹(;ëÆ:]ÙÓ;ðRmvV·H˜‰÷ºøIè$îçÓï 8AŠéûBdˆš/Ź|ž,Ê0C\M¬‚qÆ ¥é¨g3éY ‰9àÒý6›¼ù3öŒÈ¤|ÕÆA÷WÃ} ¹/%÷ r¯$÷*r_Fîä~¹¯ˆƒûæ¸_ÁcRÜgHÉ ¸_Lî5ä^Kî—û*r_Mîµä¾–Ü×ÅÁýò¸_Ã5î3÷ä®’{¹×“»›Ü5r¯#÷FroŠƒûÕq¿ 7Çý`Ü/%w/¹7“»ÜýäÞBîÍä ÷`ܯˆûfâà^ØWÃ}3¹o!÷­äÞFîÛÈ};¹o%÷äþ•8¸ïˆû]¸;îS:ðÆ`¸_EîW“ûNrßEî×ûµä¾“ܯ'÷âà~ç@ÜïåwIÜyœýÉ`¸ßLî·ûnr¿•Üo#÷=ä¾›Üï ÷;ãྯîCäÿ îõýÆÏ{|¥ˆݾ?å9\<œ'ÅÞ‹ßî¹øá‹O.rIý?PK´ee“Ý \PK H Y!org/slf4j/helpers/NOPLogger.class¥ØOlÛTðßËŸ&ÍÚŽu- Faaƒ¦e[p×t-ëÖS!4ÓÚ•?;€›º©Kb#;ÙØ!qAâ€@‚Ë.〸À ‰ILB\€ âÂ… GnHHHˆß{v“кû½¸‡:ö{ï÷Í‹?ÎËSü÷ëo sˆA<‰HBƒ¬ãVò^u£°•ß4«¯›®—_2jæzÑ©TLwÆðL]S–mÕÏ3ˆçFVÓÆ“¥Òåd)/]ö‹3Ð ñn<ôö@fÁ®WŠ¥K—æ¯0*Þ£t2GÜ×á7c“gº–Q]ÅÑ–c_]œcÀžeÐ;ëØ^ݰë«Fµa&ÿþùú÷ÇþX¨0HÌ:ëø -Û\jÔÖLwÅX«bKÑ)cŽix4&ê›–Ç U1ëü&0È·ŒëF¾jØ•ürݵìÊ$ƒ>Ë[q²9oóºuqc^f¬óFƒ¹½E#«8ªæUø;‡$‡”´µ”Ö¶Ìr]„tm8nͨcšáîJ F1˜J ÏO`¬â¿Œ1È…$] /LcÅE×5n282„Áè½gµ²é:7øýi ?á`h¯¸ýsæZ£Ò¼ýÉu~‰å-ÚN³=aá•h~ÁpíVó ¼1ó®ë¸­“_ ¿Ö“÷¼á¾†$÷íª‰sñðìî„{Z߃ ©‘áwù¹ˆµáiç¤ÒöŸêt*ÿîÆç¥Q3í:~ãÒSåj°Æd–†[6,þ…ìk®gy dq5‰.x|úá(žàºƒAx/2x> ¾´aÏx¥â+Ã×äè`Ûbè1<òU@Á¡cXÐãÂPë<œ âý©/šå]¢i¢­4”!x$(=”ÆâŸïªœi«Œ5+…A¥&Ú¡}Æ~á¢(¼ßï ùYÃ#8DL‹I…D”DÄ ¿³-┈àgÃXÁƃ°EüK„…]a£~ghXN„ñ³<‹Ã;JÍñ9Ç'ñîúsçÀßmLRúkŸ ù;Sóɧ(öh…a;¿„qûL» |‡·7–1[ð;‰ØœˆÝ!NˆíÌybÞ,ÕÁ¼9¶?ïi*¶—ŒÍ6c9{\lqHv6@°+$;;.Í®ì,]¡Ù‡Ä®Ðì§;˜÷…€]¡Ù•ŽÙnhö ‚]¥Ù/H³«4ûBv•f/ˆ]¥Ù¯D`Wiö#|Û ì¯ìÍ^‘f×höZvf÷Ä®Ñì7#°k4û[ØÇ%Øß!Øušý=ivfÿ0»N³ß:»N³]§Ù?í˜= ›ÿõ:)zÝ…î—îÀ¡/¡g[ mí¥ø¾tF¼éìPKe_2K©PK H Y(org/slf4j/helpers/NOPLoggerFactory.class}QËNÂ@=#… VEDÑ…Æ(c²0Á¸1BL0bÜš¡Ž¥¤´f(&þ•º1qáøQÆ;¥Š„Í=÷qîûýãõ @kL!¡C3DŠ!Ûã÷Üô¸ï˜­NOØ!CêÈõÝð˜!Q®\¥1´ŽŒ ¥@:æÀ»­öÌ®ðÍÖ¹8Ž Ò¯­V£qzÁ°nMàÖtÌ1lN`Ô¹òAG–¡8æýŠ2h'Á`˜·\_4‡ýŽ—¼ã‘'g6÷®¸t•;µ°ë¶&—®1¤~­¶]¶Æ—j‡ÒõZåG™x-jáó~ÔþîÓ†ÒuWÍ’ÿÛq_e`³ô!ÚˆÞ¥¾Dr¬BF˜Ü}{ŠÂ9’ê¡À4T°Hš1"a yB†–ã‡„Š«=CüÎOEü½(·0ŠÇ¹J+b%j»ñKŸPKIÅ[MHPK H Y%org/slf4j/helpers/NOPMDCAdapter.classS[SÓ@>Û+´ÅJÄ+ER@ò   L)ƒêL™¾oÃÒ¦†$æÒ±ÿJŸœñÁàr<» MhƒéðÝ“sùÎw.ûçï¯ß°Û9H@2 ©¤!Càaö©¬Q½#7Ú=¦82‡ª®:UI©ÒÊÂ%ÃêȶvµÓ“»L3™eËçÏgǵ—Ôt˜•…ÅÀÉ6U9°HÕŒKF XWuvî^·™uAÛjJuC¡Z‹Z*ÿ÷•)§«Ú–ë1Y¤QLì0$¾&ÕƒjšŽ¥êƒÊ¸ Ý¿°Oe2]DZ@ŠÀn¡ŸjØ2‹]}ä>EÝæ`Í0«š¡;ì›sFM³’OÏuTMF˜nª:®…hïF퇓Ъ"ÊŒÍó™JÒH"N*§„<ŠcLng`Þ h÷ž¤ÞK÷ äT§M×î NùÜÒØriL™†é«‚ö³¯.óµ«w |‘×þ$~dyME±á¬¹¦áZ ;QÅ‚ßÚØmËÅ7ˆ5áƒÌãïÏ<þÉx¼Ó?ü@!<3BY< ž<€"Þø~‡Á›âÆ·Bd8 %?pï!ßG"e¹àYýH.ÍÁ#ÁtmÆü’QÉß ˆ²gB‚KQâíX„'>Ø®ÀˆÛ ñ#ðž¡-/jö:9^Ó~¨75=ò Ô½„%áS˜D2P½ƒDKàU¨ÕeXÁÓÒj|»ŽbÛµæ·k}‚ùÄÌOÂ¥JÄ`œþÃ+n¥Íøñ5bÆ·%üßüPKLÓ¾b`¬PK H Y3org/slf4j/helpers/NOP_FallbackServiceProvider.class•”}OÓPÆŸË ³ŒW'ï(Ž!+"jȈ –`Ê‹ —˜˜®»Ž e]!ÑO%*!ÑÄà‡2žvu[»iâ½çÜ{Ïïœö<÷öç¯o?¬áY ]ˆÈt£‡aàT¿ÔUS¯”Õýâ)7†ž QÎs†Hr± #Ê0gÙeµf¾[;UO¸YåvMÝÛ?Ьr™Û9Ýp,ûC 2"½¸EFŸ‚ÛègXîˆçtÓ,êÆYžÛ—Âà¶u)JÜfè3[32$´f‚@µŒŒA†{íù_è5aìêöYË‹ Ô_lXÁF©Êyëv¨J¥*ã Ó¿bw{k³¤WnÇ0V/pWÁ&bç%Ãß f¯U…Úä2.3­`³ #‡ÙW¯³ù£ìöñæÁÎq!{˜ßÙßcˆkM}òŽ-*åLó¤Ñjz%½¾.ã~@·B^Ë­½lë­´e•8C¿&*|ïâ¼Èí#½hr·‚eèfA·…;÷%çDÔTí¿ÌÐq*sG ª8‘\ü»Žub7¨HˆjBºD£áðP“F)ü¿¿à5‡—6«¢@_!¬ Ã0qmÝ%ùÜÓ/tS|¤FD7 Ó¿ ±¼ua<'ÜÍü£ i7)fIÝ.Ð!…„^Wdº~q÷^x–N¢géÀ•)Žn# 4{‹yÀBê,õò›ô^#Fî¹ñk ‘;Fîk$®(² ¼lQ©J !I+J=‘"˰„‡~%•¬»×úŠØ§F¢oq¼înÀËHw€‡ÂðdGXÅJ8†ç;°êÃi–>c*Ì&[X©Á>n4wÉ›ÓsÓ- óÁ(ý0ÿ€SÞEÇç¾`êÊ‹jÒý4>ñ2>ý PK=¯Ð‰kPK H Y'org/slf4j/helpers/NamedLoggerBase.class…RMoÓ@}“¸q’º4„@¡ÔR(q@¡Þ‚8ÐR d‰´¹oœÅÙÈñV¶S‚;ÿ$ˆgÄBŒí@‘S Y;»;~ïÍÇÎÏ_ß¾ØÅÝ:J(›0,,¡BhLĉpúÎóáDz ¡òP…*yD(·íA UÔLÔ-,Ã"léÈwâàåîÄËàXF±ÓS9rµïË豈%ÁÙChº§Òý$R¡ß­³Ø9 «hL_&½ ØjÛgA›¸`¢eá".ÖNãæ¡„—èè5¡Æ:¹‹°Ó^²Ý"µkâ2^t›Xç\2¾ÒN_FJêœb#ή®Wéðèé>žVöt'"L"˜É¥ñ»÷?6zGo¹{zÄ´UW…²7›et˜ 5]í±Ž`5¾ÏF2V1aÛýos»„åHŠÑ ëàd¡wù 2¨þä•'Î56a®ý)+Gpk¤˜þÅ0¾¯g‘'TšN«ô^J66ùíJü­á Ûu\ÅX˜‡ª„ë0Òñàs™ÏÿÙä“Ã;¥žÎÐÇ ºÅ¶’9mÜ`kålã&ï”ÎÆùÌòý3Èna‡Q)ùÁœ\í|ÆÊWœ/ò÷ÿáWçüÛ™¡Í«“áïüPKMy]íÖ7PK H Y,org/slf4j/helpers/NormalizedParameters.class¥V]WUÝ—&JC¡|´4¥ŠÉ´ZJmE(Ô@Q*Šõc É4 Lp2ÔâÏðMü t-Y´vYõ¥ú—ªË}oHaêÂåËÜ;wÎ9{Ÿsö=ÉÿüÀ8¾H¢ 1 qÍhèX·î[y×òÊù[«ëv1h¹âxNpU –É.ëH@×4Ð C`¨ê—ó5÷îøz~Ív7l¿–_¨úËu¾µK‹–oU쀇ZŮլ²-*@,¾ã•'dÐv'Ð! [~y³b{:ïÓQ¶)8EÛ`ͯ~c­º ÛÕ`z{ïx"Iën™ÚiÉÌQä€È8Ùe ½$ñMC¿À¹ƒs®k—-w)°{úAÑÞœª—ÀY¬WõFj¶WsŠ–›¶+ÁVºê§½M×MïeÍom%чs’vš‰EÐÎ.'1ˆ ^1ð*†^hÛÒV-°+ªŒT¬nl ˜™£yÎEÍÉÀ d daºlûyNY^É)1).¢nÙ—4`#.ÈãuÁ£z™¯ cFÊ& XZ™d¥b—¦÷L$XÄ™d>*‹6&ŽÕëìr+ÞÄ[.xïœ9àgßg;ò…j¹Lçiù"dAæ÷„|*“= "ãM¸‚I6…Ö×þ^—ÍÍŒb.Þ5p ׌ƚ œÎ¼¬® LxÓì´·wåJÿGä…ãÝæ øTµD´dz6+«¶»Î7U¨RÜË–ïÈ÷ð0¬9¼Î™ãÇ7JGϯGXAݵjÁ´ø[/Ž’016Þ¼â½yk#O†j*Øž€˜ã( 49n:—°X¥V¦%Û "Ä?Û˜ÆQ‘ü—*6ÛuY ü{Dæ°TÝô‹öŒ#êŠvQV穊&Îõ:ä|æ®CNUµrbrÕ!ä4äs†o.­ã\O™»fnš9¼ƒ6sd'ò¼ 7øì¦èg]hçI'cÌòÔ¬ûc7µ“¸Bí$r“ÚIì˜B ‘oÒ/Æ5aæ†Å.ºВʧœ« !]·ÛGHì#$B!ïn7ÏU~k6‚¶½´E¨€uçæ0 À˜Œpn;ì<éÌ;á|ò°óP„³.‡lèü€IÊ´Óæ3–äéhÛ¦ù4^-ä~GÏ÷Hä~C϶ØVͽ¡ ÔÂ磌³ —bzY†ΞYÕ4Õþ›6¢ÝR%Žéâ9Rmt9˜Cß‘›,vnEÛô­¤ÎìbàWIæJÿ/hšïÿ­fl8Öÿç‡ °càN'|'‹ÚCÀ³„;E&ºÔÐË\Hª‡v‹øàgIï#ÕKI¯•ôô¿Ð%4ºérÆ…üþ$?)ÅÙágh‚Ä ÅCílçH7Gº/œ=Âk #ÏÐÅMîr\}éÈOu«]¼q@~ˆ8À—åWÕ*©qw‘A™?`k…ƒ«¸§’'‡Qöò6 KñÏâcuÕäN R¨Ý2%ßDÿ4>Qâ¯'?‘H>GŸF™Ø§ab×Ôí`ÓÌÇçïëc\VOþéz„÷‹éë1ucŸ)%ÞQVŸÿPK«ªÚ PK H Y&org/slf4j/helpers/Reporter$Level.classS[OQþíöÆ"•«ª\µ-JA/E(—M*˜V0„§¥Jɲ%Û-Ïþ ¤¨†g”qæP'9;™9ß|ç›Ù9¿~û `‹^Ô t—ìB¼lnîÄ·¥¹'ír<+÷J¶#íþŒÜ—¦n<Ú\jfeA 7sSV‚Ó|:üœæN/Í/s ^‡®ï§³K¸££Q§²Ùå,GîêhB³€·u:³’Ê ô­ß|[­hó¢YG;î]Þ,YR %ÍìûFÜ4¬B|ycGæ†ÐéE—Ž0î“„¿€”UÙ¥›÷ ³"—·Æ"²gM£\N\ä»ho`Åß­£½ž‰¢Ut&Ú"W3ÓÑU®¸_ÇR·L.%m9"탠³(óÄÚ¯K§|ü>è>428®c#Ü:UAY` ½EóHæY‚{¶´I}kÌ-¹TÙÝö;cÃ¤Èø5¢·¡nÊ”ò†¹jØE&ª±¹-cWòÙNàél—6ß6aˆ‰U9ÛE2þ\±`NÅf†UOUNæ¼m®H4M}œÈ›µ®S€@£—þÐÄͺ'IH WªØy9_dÅ g€!æÐÓ–%m5²ìż@èÿ¤4Š69L)DÏ“ìàõ׬^³liÑLÁ¿Î ÜSŒPþ3òzÉò TüŠ–´~"*UH>ë$|c¨SøQ² 4‰Ø1:N _÷~œ¾ú) Ïñ‚ìKÚ>0”Æ.E¶HÖÍàØ`×ÄÂ_ÐwpNw‡Nn¢íA= eÚ6:còWµÒÔÀŽ/h x§›VBMÐ~ÉZµq²¬K‹}FßÇKÂ.×NoøÔ’Ç”V ìý±æªÂ•[sWáÍ­iUúÅkž*rW»çÃ’5Šu"æ5õš¹\GˆÂ¥¼A·[y^å=Ö4å”÷ÄãQ^Ã1†<8¿$ úÑEMî¤.œ–<eg1§\r ÉÐPK¾ÀÜ!÷°PK H Y-org/slf4j/helpers/Reporter$TargetChoice.classS]OA=ÓmÙvÝÒR¤âP¥[°E-úP ‚ IãbâÓ¶Ú%Ë.™nyö' $B4žýQÆ;cÑj•´›îÉ9çÜ™ýöýÓWe<Óa˜D«ÔñöÊû¥6÷¹è”ÞðÃ@„\ävÑâáF;p<†¨‰FFì°É…`°ªCª+R7‘¸”ÝP.]3a"É çjÏ«o7m†Â»¡= ¤Ö‘41† C¬á>gÏ[Õ}çÈ)yŽß*m×÷y#$î8nè˜01‰› £¿ ›~÷€ 8r¼.ßÞcXÎ÷©7<§Ó©ô-Ø¡pýV¥?ƒ4PþY·0Mý­¸¾®1Lä•[V-Ž˜A½gãHHœ11‹99UC‡a1o ?Êw©‹nM@ªêúüU÷ ÎÅŽS÷heõ… v ™jÐp¼š#\é×3úΗ{Ö é—¯ãA!$5ôoKÖ\2+‚™‰ñœ†}[…­DGÂxHCèXúèéãÒÌB2ŒGÈLçó¹¼d~YàÉq#ÜB ¸—Hêà³/‹âEhx‰Tž&ý£ºBúåÚ&ý㺊¼ÒBw!&7î{ðj ?N>Ç1÷19µùÝÆ3þÎàúRI~5~C‰ ]SW~ʵS1wã5®¢.€ŸáçüFd?5.¿Gé¿G»Ö±ídâˆ$ÖÐ}ú*î^YE_vð“ÇGúzßÅ=ƒ}{‚<¿Wß·ò\@»úßIIª(³ûæš¡ù“èæ“° 9F0É·ëI>U9ŒpÜ¿¦“‘mÇ/iÒ‡ðKî€×ù¿ ¡ÿ [G4ðÂ:ÞдÝÿ¦—Ù½ ¿Ëë2¦Ñh|“߉•Dô M'&q°I|‰Ä£MbxEŠúŽ'¨xŠ®œ¥ãçèÄyìÅ4šáSZfšçð(æq˜…mæ´øâ»-|·…Lßµ†·'ÞîLü ‡W1ÊõèÁ«þâ;P/Xµ¥`;ñ¦ª÷ëªxÝ£„¯|ìZóJˆ¯"µ†ñ÷å~¯ªýOî¥DlO0Ö‰wÐ$àlK8€ee ˆŽþAø.5ôŸ§”¼¿ŸY\Ç“WлŽÓ¡Túç¢O¯á<3~~ 3k¸pÍ¢®úE*z‰©{¹%šýxÛOï£È¯ÚÙJl²UÙÒÖ*z“¶ÞÞÊV~ÝÎÖð&[ö–¶Þ£­÷ië¯[Ûú ñY·e‘%ë1Ðb¢zƒ D]~¹Yƒ·ÑÀQ–øê>âÌù;»åc¿s¨°aUîÞÁ»4'Í^òW1vK³v"Jß§¼ÿÏ–¨b ýaüΟ4)å#îüÑR úµB)ýF¡Š~«p}ëøÎu¤ÖñÜuŒ^SØÛHÜÝ>Æ!6Nc¿W¦ÿ€?ª ;8u\±Ëtüi4ö?PK}Ÿï²V PK H Y$org/slf4j/helpers/Slf4jEnvUtil.class}QËNÛP=C×<œ„”ò¦+®€U7¨•ª†‡”’ýM¸578vä\ø.ØP‰ÛJý&„zìF@UÄ]ÌèÌÌ93sç÷Ãí€]¼w1†‚ƒ¢‡Ê‚™žºTA¤â08êôt× ÊMlì'Aa}£í`\°œ¤a0Œ~ìö‚3 t: Zú_žX¹pñÆçaS‚é'ÉýH ‡7ÔöXuÏU¨³ëͧŠQxÏÅ |UÔþ‚9ª|í"Ý×±UÖ$q›“Ð jÿh¶ljâpOPÜONIœnšX^ô;:ý®:#•fÒUQ[¥&ã`Ñž»Ú|}[êzyö±{ap ª/lÅÕ™{,¬¼4äd˲ú@ Fc¸­ä"íê/&þóÎ[kpxÂìA²#ÒÎôB_jü„\çé:m9®â-­÷·sxG?yÔFdMŸ‰V+Î &¾5~¡$W~ÝæÃ…\ªN*°EÉ€ÿ@¹møØÉ¥ë¤—yÿ,ùDKX¦è Ñ8äžÃ ówóÁÖþPKÝŒÕÒ•PK H Y(org/slf4j/helpers/SubstituteLogger.class¥Z xTÕ>'3ÉËò’˜°ïK˜€L ’„%$ÖåeòH&x3nm¥­¶®±Vk±îV[°&©ŠU±î×¶ÜZµVÛª­]Ðöœû^&“¹ó&ã _òNî»÷?ÿ¹çÜÿÞëóé/|*pA6¤C§ épÂ&m›æöi]íî•­›tO!£ÊÛå V#8ʦ·dA&d)­B¨ýF»;àÛX±ÉÝ¡û¶èFÀÝj ½ÁPP¯÷··ë‚³KëÔ ë°›‚†·«½’ÑòTȇ²õmzWpuHQß³o(èõ¹E“èZ¨B#ŒðºÔÛVùÁ:âæÕ|Þóµ ×ß…€²©ç0Ja8Bf›îÓÛ©/BqÙôú¶&·Ê £­ÂKÑÇv@(íÔ6‹Hˆo-3¬ y}mü¦ª, Ow×ÓÃWí'°ÅëŽ3Z8¯ÂöªhA1Û&©0¦Ðxµ]Z«Oo[ê7Ä[„‘¶7ðÐi*”Át„+˜%ý~»Tð3É\o ®k£?ŠãV æèôR;7¹APÜÆ– x.[‚âùl Š2¤ øMn/bKPü6[‚âwÙ/aKPü¾ —2Å -Xg¹½\…+,†ë4£+ŠáU*t †Û©~À ‚áÙ ¯cK0¼ž-Áp'C †?á6Áð&¶Ã[Ø ocK0¼ƒ-ÁðNvY ×YnïRa•èZÃðQïQ!,­ó nù·Ž{ÙïcKp¼Ÿ-Á±—AǸMp|-Áñ—l ޳%8dKpü• Y‰„x}B…Cð$m9ízp±O Ѝ”J_4VfÃSð´Ϩð,<7h¿5 ®o i¾@Œ>÷/¿ ð‚ /ÂoÈW‡èXìoÓ…È×ñù’ /Ã+Ygl}…òÆ—¯Áë üV…ßÁïFÉûxãÊUý{`6Ùgׯ\¶¬v ˜ú}+yóýƒ Gxó-¥™‹vîñmœÙ‰i¾©Â[ð6íÊzœS¥.P¥ï"LN¦k6¼â3Î{óÊâ„{l©”N æáçþ ÒœöO¯ð¶ˆVMtQTÂjü~Ÿ®uÑŒ|+ðWþÆ5\ õ@P[M«Eó…t®¯'2áSJ©Ïß®À?òcŠHÏFKg(™Ì†Ïàß*üþK•@ihЃ~: ,b[5k4ºj }£ Ïm"ˆcØ*| ÿ£åHüÌæÅš§ƒÂ™hÜGˆ*¦ñÔ9×®i®UЉ0n £¿)äé0{מëÑ·ðqŽGe¨¨ð¨ô¥‹ê›j©¾0KÅlžÊbÖýØ$d“—\óTÌG:U·cDëÌ۵ͿY9±Xë,ÞÎ'7)Xˆ0~ ¹ÎÇt|‹<=ˆD¡ Y'ʽŒöP'ÑŽê7 ¡\&\G<=âx»V3xMõ Ü6yÛ»´`ˆ‹OªØ*i .òþb©¬®LtÔ‹Z¦·PúLÁɯ÷vé¡ÎVÝXËr,dÆ£ùZ4ÃË[Î`‡—´lr2KaØ`ˆó¶ôìN‚ÞWˆW¢Ð\6Š«Iñ ¡¶à©ä|æÁ»ÔæÜMK´3ÀнÑotjtUrP~_t¬B¡y W³ÍÇÊ›f%Ÿw‰8µF÷‚+‰{p"â¤5XØ­Óô‹Yg>¹MAͳ¹AÛbÍbN@.‰l ƒÎ½V x^ÞM¨bi’£ qî#ÑÓÌXé¢alâ®Ö!ÎdÖòùÄq$Ò°rmBMþáÑ—z9’ØÚ9‘éÒu*“vb"P o¨tÇ­áýži¬ÛâIâ%ž´ѳ¯Ÿ€XÊm8 øŽIöJÂIÇÔ6’þú&õwҳصÐUÞŠkFäºÆô@Á>jwà(ú=Œ6€*êydA5äÁB[ˆ£©ÕeŽÇ18øŸbÁ…Š҄ž8ŽìÈ;â”f±O<'àDúÍœÜÔƒû¤»îe¯èÀ$2DãáÔI·œ"ßr­Á È!»ÌqõBIyŒHƒXˆ:1Ììდp²ð<Álœ Ö8ÝzmÀ&¦Ñ±k0XÓ`t¶À*¬9Êf°>˜ŠÖéQ•™(º([‹cè¸Ò`_"[¼:“žgÙPš" p–Øú—\ À}p¢CBl¥âðÄñfߢŠS-²*NÃ2Qîtï¶°×S‘q™åšØ3û`¶So'€Ž¨šÌ€çFÀsqºgËE–vðÅÜ.„ 9…Ð9då8à a¾ö)2öVÂ6l°§D°g≛.ù6¥uª\ZÛlòèÆYVØ=M&z½Ð†¨‰ØOÙœ„Û<.”óx Ûa“Ç~p3£f§‰<²›ZËNzÅŠ•o¹áìƒÅé’£‹IÈ.Ž*ÌîGùGùGù¢tÂâÒqŠÒYnÙR9²K 겯W‘Ù [7u²›+ àª!ÝL‰¸á‚b7¼9Ä“—z”tò²ÆN VÉu}\„f[j’êFzÞ4„@5Û T‹\Ø·Qaßž´@5'¨Óå¼ì"€Ý)T³½@mC¸‡B'-PÍöõu{/aïKZ ÖØ ÔY²@õ !PÍöuŽLôA"z ijN P­r¡aS¨æ„Õ& Ôã$PO—@5'¨rdOÔÓ)TsêÝ;Ú$ ÔKqåÅo'P²@½Á°¨-²@¡çÑ!ʰ¨€\ØïPa¿›´@ *$çå}ø 2ìj»ÂGÂÇI ”a/PçÉØŸö§I ”ßV .êó!ʰ¨oÈDÑ/’(#@}KÊ#" MKA Œ„µC(Ì€æ`ÔK9zаJñ@”ѦAÚ i*gôHÄÛ:ßïíè“Pä:ï¬wѹûá=p”›¼åñÔàAòö(yyÌÆ e¾”à+p®å¤ÚR“ þ&u8¶¸ž¡Œ<%&‘™Ï iy…§ƒ?¥[Xwƒ"z-!fï"¢G/ü%Ìœ÷Áß ?q>Ÿ­wþ³©þÕÇ\÷!ôÀû»!§žÌt2ûv>̆ t ª‘(ÀiQ¾.|fãkÔ㘋¯B¾a:—zŒ§€ù!k üLpä·)èPèͧ8Ï⽇¢áº*sõbæN˜DŽ1eâš¶ÞQÞÔ‹9ëvƒÚ°›Šx78öQoFÁX,ωX$žS±Äâ:²ÈãÄâŒÂ·©çQGωø&L¢çT| ¦á»Q3[™Ù2œ§3æ›γ,X¬`ý”ð³22Ý5V5æ2×'Aq7ÇÀš2Kú½¨BÈš‰tHËYÈ髊àE¯ŽÃÂk±«ãÃx«ƒŽ¯Ü«úÿPKx«Ø' ,PK H Y/org/slf4j/helpers/SubstituteLoggerFactory.class•VmoÛT=·Iê&u³&{í6º¼m¦P¶we]h·BÒ22‚ºonfR·^\9v¥òø/C¢T¥â¿iBœëX‰“f4ûûúñsÏ9Ï‹Ÿ›þýãO ¨§0†˜‚¸ŠÆ¦wC³VSÛÜÞ5žÀø’Õ²¼eX._ObI)“PòŽÛÔÚöO »ÚŽiï›n[«ùÛmÏò|Ϭ8ͦé® Ïq²ûNÛ['”eØÖφg9-ñBAZ`. õ=ËÖN«á»®Ùò´rwùÔhïTý¦“2*²¸( ØG[àB¥AO]Á{¹¡°«µg¾|l;=«Õ|曾™Â¥ðU×ð¾@Ê< kðN PGŸÄu|¨à#cF`ªOSØ4™Ñ¹\e0Ízþ¬IÁ çg8…YÜ’õûDàvºæ¹¦GÔwD¾È×¥ÎÛ*rÈSÔ¾OQ‹CD(³(p±Ç±âºÆaÅj{’㎊»ÐØD{æaMÆžÉå#zhÒS(`^ÊÿLàZ.ò²ìØ6 Ø'zGð‚Š/p`†í›,úÕ>°ˆ¿ô^Tñ@¶t¢a›†++¼¨`‰›z]hÑdÍj¶ ÏwYô'ý µ4$¯ç—F_ÖžÜ>KÈ é·*Íl¼ì¼4eã[-sõmºÏm›–lÅivÝp-ùãÞŽÅŒG¦ƒI¶kÇ6дaò´0`2µŒWŠ3¢Ý%yü~jžÑØcúÃ(Ò]A$a<Ù¾]§K©ƒÆ!Õ“)LuáÚò8»kÄ Og520J}PçŒ ú;¸¿S‹¤jŽï6Ì5Kæîú[ê|WRs„Lð$ÐÃ#9Üy‹U¬…¿/Æû|á7LOðÁþÂlµô7fN1»U¤ù Ê1nV—Ò æbø±ôš›béeBÈ“/ÍY’Å=ÜÄ}R?ˆg:à!±\=ÁSR§éµŽo(û[Z' Þ@S(L ‚*­Rš†Ÿ9EaKrŸ $pŒO_wãFbÌ„TŒnжù€Ÿ\y+àw´=Ã÷! Æ'é“YY€$ú@j´Mv«¼t wâ¬p¯–ò˜¤ÓÔC‘„Å!B9”‘éÄtŸç+õüŽ/{`é U6Å›nsH|œª÷ÿPK¨Ì$ÅÊPK H Y1org/slf4j/helpers/SubstituteServiceProvider.class“oOÓPÆŸ»•ÕápCÀ (ˆ² ¡ŠóÆÑ%˜!Æ)‰‰oºî:.vk½íõSI"!‘Dßû¡Œ§Ý2Ú²!YÖûïüÎssžsÿüýù @UÄWHc I†ÉC½«k¦Þnj{õCn¸ É'¢-ܧ ñBq_Á8CÑ’MÍ1?–µnÚ\:Z­Sw\áv\^µšM.+ºáZò« ñ® ­`"«È0¬^D×¸ì ƒ¿–VW4¸d˜0ƒùˆ®^Z|SÁ5†åóñÏtG»ºü¸çdïžSi\Ç4ɶ‚Ç ù€ìN%•Y†ÅQ*Ï··ºír©b¦'q39Ì3¨­†Ñ? çwl¡q”ÿÃÊ™/ïÚNǶ-éòÆ é®°Ú/¾Üö&*<;—– kÕJùå¹ê&¶­gÈTE›¿ê´ê\¾Õë&íd«–¡›ûºÞº¿™p„ðv¡Mê©&w«aç Å`AöQ5ˆa*ɇØÿõ@O~7ìfD>ì'™ï¢á{¦)ü ÿÜáY²e‹}ºYÁ0EÜ™o5WŠv“âUï= Ýߨ¦jÍêHƒW„Wà…‘e\÷ò`‘Ú'ê6Ä‘õ^½á¬×°þH]E£Bçô”é{‡V(’Ñx¯tV:…òþ©c¨4¤iö9šÎÐôÆ1òGòŸ-Aßqú¦HEEž”ïÒNº—~+42Pì+i4zgc¥P¿%ýÍLÀ%¬^Î …ïcmœ‹Â³CáuŠÂù(à<¸p½PK H Y.org/slf4j/helpers/ThreadLocalMapOfStacks.class­TkOG=ë]p0›Ú< qÉÃy@üÄ@H 8Ò”4’˜õãbÛıݵ‰¤6ˆ"Uù†šþ%õÌìvýÀTþPYZÏÜ{çÞsν3_¾þñ'€ylûàê…¦£ý Æ#U2ÊùÔÖ+è_.–‹õ´5Ýñ⊂`3h»`™Æ^¦’3J>x¡`ºWu|¿‚HÅʧj¥ýùƒTÁ,UM«ÖzbènígëFî]MÁÕzû~<ӵʒ(3¤c#D”7 p4ÍtÂ^ò"ÈœÒܨK)æöb\ÁPÓ´nÔ 4û0UdýVÇ®3kMd F.&î b7Eõ[ ¦ºEtCr[¿Yö™ùkÃôâ.7+–eJw "Œ)÷­Ú¨DݨŽâÄWmßB—ê=ṓ:¦¥€Õ e™ië{¶nËycN Å!§”DºV)•˜¦X)K9Âx¨ã;1:}¹’iX ²Å|Ù¨7,Sѽ‰Ë™¶Æ,g:«/e:ôê’–?ê³VÙc)¦X67ïwMkÛØ-Ñ2,kíVQì£V/9]±L¯“É ¢«‡/ÍC÷#—mµDw¨í;?|ÑI©>¥Á¨ïª@Þ¦†ðï ÎÖNèkguXý—Ùúÿ%ª‚Éž"y¿¤D,æ@¸Âqrtšê¢S´›#¼Ãk•êáÖ¾¬äŸ¼üx›‹½Ä]‚Þ/¶µj°[6¶Ò—­4¬œù¼(HNtŸ“iq·ùþyø²òF‰ÿßsçÁo’"žX~iICå ÄŽ¡ÄNáýå¿Ãw$£ñë“yÐÄWºe<–ùÓxbç¢Yefàuü ÚQì7ø>!ð£›É3ŒœbŒ©¯m sòBÉø nxðáGZH;ƒ~Š; ¸'v‰LzŒ‡´DT¼`4 fŽåkÜ…Xj‚0nˆ‡×q ÷øRÌà.r•ÆžóÙz…ˆ=os@‹ÕS¬H"¯±Ê•‡™V°†g¤0Cñ~ài ?Ò?æúÖ]ß ú~¢Ïµï7½=GÈË'HÁKdeÿæAM@¦}ÊǦ iH¸}hHž ¡pŸúèÒ¿qîìØ4†bf0ŽYñ,Òÿ€ç%Ř]Í¥8çP"dAÌÃILu‰Ù¾u×÷‚>‡Xÿ9’XÀ&¶M† b_$JÍöJLt6yŒÙN^ Ü-’×q,“×còJÉúŸ’×j ¯Y—׬Ë+ìòò_àvyùÿ‹—})¶˜î'ÁnÜ_Nãc,èiGíì´#vm^AsBc¼0 ZõêcÖóŽâ éeYo›³ù3&±Ã¦¾m¡—pé%zδM/Ì™o§gûÖ]_ =Σ_ÒóÛm{# fÿPKëŠÐ h PK H Yorg/slf4j/helpers/Util$1.classmŒ= Â@„ç™è&Q0•XZX»¹(Xˆ…x€5>óò‘Ýèá,<€‡7Ú:Ã|Ó óz?ž2 z„ic éô%«eÉúÊÖÉc[éùR $¤µº+©•)äþTsÞ’Cs³9o*Í„¸Û.ºa¼6¹n\eŠ·esˆ “ÿ÷„ÑÖ¶+­œc—Î@ðS€¾gß!"ÏäòöJ£PKÙxt[œÄPK H Y8org/slf4j/helpers/Util$ClassContextSecurityManager.class•RËN1=w@^Ž‚¨ ¾.À…£†#‰‰ ºAÙ¸ªXÇšqÆt£¥+~€e¼I4Lì¢÷ÑsÎ=Mûñùö Žõ,$ÒHÚ˜@аh× ½ëú­s#½{©CçFÙëk=_¸RRMå«hŸ¨Öº9dŒ`–P¹Âñ„ï:Cƒ™´acŠweô[0W­]´¸ñaƒlW’ñmåËÓþÝ¥ÔgâÒãN±ô„×Z™zÐLF7*$ÔÛÿ¿ÏÊv”단¯Y©<ÂNssŸQ+Õqê;Z—`=nÇc¹NÐ×=y¤Œå¬io™IûØ÷¥ŽgÉ0eBi´ a髤±FXgÛüø˜•àŒ?Ó\9‰ãÄæ+Ò/œXÈ󞊛(ðn0ƒ"ǤyKF “sÏCäÃäÙ3W0ùƒ=ŽÖ@„F;(}"&+¡Ób|‹‹œYX W«VÈ|PKǵ¬m|ýPK H Yorg/slf4j/helpers/Util.classVÛRW]f虡Q2rQ3QaF˜ˆh1&€¨È€£rÁv8 ­M÷ØÝ£’ûýnÞ}L^|ñ˜*°b•yKªò#ù€¼¦’¬ÓÓ 7SI ±ûì>{ïµ×^û~ýóLJºq+*Tkˆèˆ¢F þŠqÝÈZ†]Ìž½|E|šc¦múǪÛÚ/hˆ ìy´iвdѰzÝbyNÚþÀÍ‚,ù¦cÇHØeËJ™v©ì' AW9êÛrŒû®i{Ú/$°õžÐ‘Ķ5@Æç=_Î Ô¥?ê:%éúóÏle£IC£@Ë*³,”]ÓŸ_Aš@3¶kØ¡c§ÊÛä¸Å¬gÍt_ÉÎJ‹¹¼ìyß´ˆÚ3fä)éWÐ,ãˆa—@ÄwË2ÝxRCJÇSس€„&y­lXÞ`Ñv\Ùoxò1TLÆ iŸŽ§ñ ÆúÏ æ'¦†{GzO Œ tç6Ǹ¯ß2<¯ß±}yÓ_®sذ¢t{TÌ6íH dÖÇœêèÍž™êÍñíÄÄTo>?0<š8! &Ett S`‡¢¡ß•†/×¥8ÒÖþ ixV ë¿;&E—ÒÔ!Ö¶Çe>h«‡uQ$©¢M=¯ãØÊÏ«s 4´µ¿ºªKÁÇžŽáE Çu¼„—éµî»€Æ8#Æœ ü76Y©¥OG?HpMEëÔP?ªAÃI'7ŒÜ¸Ï¬š·ÓO¦%§S¾“š1íéé é éTŒÐœ2}/U0ˆ¯vÊŸ•)Ï7 W{øjz)oÖ)[Ó)ÛñS³F©$9#ÐãÐ!9 ó(.ûÝXk:ÙQå³4i̱´³ÕpNǘšöm›ì!=%µ²ˆ;Ï-c²ä¸>‘ËåzŽ&p¯h¸¨cBKÛÕŸŸuÆe‹Ôn-UbzÞ5 RëÍëÉî+›Ö´êò$ªcxƒÉÇs'»ÏM)Ë%.³ A¡Óÿê\ cö¨Ó:¤AÌw–G=ÒïL+|9Ó–#å¹ËÒÍW'sy¿`¸¦Z‡Æˆb]`ûc$ÜC¾¯Êyå¼»Ò+[Ôi]ÀðQ £î ¬>DZ¤a¯=·¢× «ÌmUÛÑšû‡²'œ ê…)C}o[£êÊPpŸ·þLˆúª1ľq†Y,*£"Lþò^ËÒ|i™©Æ QŽ¥ó¹!7‹¶á—]nkÚNí ÈRJHoÒåÜ&ãáAöç<öTø+Š_·‡7Ý YreIÅŽ¬ðÊLŒ;e· Oš |\5³SÐm[º2I6[þá˜Óð5µñ¸Ó y¶Uñ.¯BBÝ|K¨SžÏ8m¼Ô!0ÃÕ!>ŸÑôÄ÷C1جœ÷"‚}˜å›^ÙW‚¼Ã_ š?@KúÔ=€6‘Œ/¡ö'‘KßÇ–ÜD†3 ÜZFlG·ªð»yïû¾ [ˆªø=ËØgƒ”M„\…Åg=j1Ç7›+ÆÙò—ªDÃnþƒÐhâÚÁžÖ%z+ÿ$a4å2¿ Z}7“lYDë]Z+(’̯þÚ‰â0}0Ãó«2'ÃÌü㥕Ì1ˆ?P«r&ÔÅf› èR÷°÷ghüáößFT,ÜGæìü€ýʺBp…3ìÃ#åXß03ž%£Ø…sA®ª¿v¬ä#r•I€ì„XÂÁ…!±Xb¬`™Ý-AC^¡å"½'V¨šz .W*:0¨h‹ÃƒÏ/*þïôTœœ»î!6”øÓ‹x.—l^DÏpõñÖÌÃï°ã@¦µ‹ëEôÞFÍÄ?®wþú-øVÛ½”yø­RÂÀDòÔÊÐÔµ”£Àu Pàjš %AÍð)²ýWÑJšÓlsßj/Á¡¦G„$•1oE®ã‹jä•{“~UüQÌãM–ðVXpe×ÛaëšPóHhöOèÞaEc´.Žwƒ¦¼Gá½B"ò¡|îá á#9ÎgfçMIE@ﳕ0ׇœ‰V ¨+EíÅ'ÁJå© óœº“ `rb ¯%__ÄsN-¢ÀŒëgòý¿Y5“;Ã,•Ø1|º2Ú­¡(£ÕŸ #‚05ùƒ}„þœ#¬J©âü5ãKüJyÕÇþPKÒË^ PK H Y'org/slf4j/spi/CallerBoundaryAware.class;õo×>Nv&FÅü¢týâœ4“,ýâ‚L}çÄœœÔ"§üÒ¼”Ä¢JÇòÄ¢TvF¬Ä²DýœÄ¼t}ÿ¤¬ÔäFÁâÔTåŒ ¢>…Á%E™yéÖšaŒ \Áù¥EÉ©n™9©Œ X,Ñiccd`d`fF ¬ l ;dbàPK Í…”޹PK H Y0org/slf4j/spi/DefaultLoggingEventBuilder$1.classRËnÓ@=“—ãÒPZZ L›¨)*l@Hi⢈öt$Ô2F†a͆V(Ï÷Ç–˜ /²š’!3år"B†õrå¬yiЫ²ÈiÐ \ƒÁ°³ˆ /\«.ÎùDFM8t½¡­ò&®ˆÀÜc(™½OnäŒZü¤<3Î3ãÕ͹…ÄY#Gf¯XFž!}Ô­Öl†ÂnÔÆV ÜÄ*ƒæ×ã´H²\ih¸Eûó)·$÷†VÛïMœÑ¡+äÀ?PUŠnÇUêöÁñ[¥l¸£”T£}ØQÂ=›±pZí¶•pßÀƒ8Çîv;] &C~Q¥Ó 'bȾv¤ë¹Ñ›ØÌ å×ü`XnºžhO>öEpÄû’”•¦ïpyÂWñ¹¸Ô‹¸óŽiÎõž? qè*²yõ!ï*'TÅöé‡4ÙÑÈh°Êÿ{S FÃóDP“< E˜/Ñ?¤wÄòEuçjDÊ#ln›!I#àøØì—þ ÚWõ/}ÇTç3RïbZ š^Ðu¢™½KT[ÐÑlL¿Ð‹Ía¬¡H6¶·ñ/_¢Š:¡÷è&Q&™ØÌoT¨OPÛ¡¶ýT£ˆÖ%¥=ŽCŸà)a »Ô?£¦Çû¤/ŸýPKW*;â JPK H Y.org/slf4j/spi/DefaultLoggingEventBuilder.class¥Y |Õþ^v“I6“k9$1lƒ&€„Ó`‚`hu’,ËÂf7înÀxÔ£­W­VÛj©V­G©7 ¥Z­VêU­ÕÚCí]{ØÓbí÷ÞLf7ÙÙZòûí¼yóÞ÷ýï÷Ÿáð= NLó . n¹È(Ýfì0j#F4T{JǶ`gR oA8N.pUÏh/@> 4xtB¨ŽÅCµ‰È–ºmµ‰žpí²à£7’l‰…BáhhùŽ`4¹¤7é Æ á¬x[R›ZÔ\£†bi©é Ü鄿AJ¥¨eê–¡;Zx‰4fâ›rÒ1côH¢À10Ä’yœŽñð ]]­F|»ÔfLºæ$éäê‰:&¡œt‰`rÝÖxl§Ñ Œ¯nIÙØž·öLÑQJB24ÅC½ÝJÂ1é[L·p}!¦¡JÃ1:¦ãX‰jIo2©ÝÒíL†cÑÚ¶ÞžžHXŠé  4ºzF&’ä¡Ã“÷ä`_»饨Ǧó¶%ã4F£“$a¦ŽY¨(£¶KH$_ëvñ¾!ò[8rW>æè˜‹y.¨tðhºL¦ãtÔK&™Zƒ‰„ j8~PèšrqƒŽF, Ò š[½ÉY‘|,’"Õb1š4,ѱË& '•e*=ØÖ–Ö2 WèX‰“EËZ–/9sÅÚ¥«eNd,•²ÌÔp²À”ÁI–NÝ´Óˆ ± s4¦rèÊNCÆZe¦‚D]£c-N¥R4z{ØpXÕ´¦Y`Yº7²À5ÝaùX§ãÒÉL¾5½‘pg[ËŠºU6›4÷z¤­=!Û¯rú4›pº5­ò‹þóWÅ{K8‘Tö:CÇ™8K`zw0 Z«›¢vH¯1ÂêÞ‚˜{´ˆËô‹”©CG'ºò)“ª9>Jä\Ž<Ø‚†­:ÂØÆdp\%›Œ5ËXb•UæˆèèF”aMŽÈmŠÇ •O3ÂWnêÑq6˜îzhPÍ7(SE§­HÊxïèp(d™Ú7gN9ˆ’µÂíÄ9útœ‹ó'l_"ì–•UjØë¡–~‡ª×ì0Õ,«ûø¤† u\„‹¹s¤§RÕŠª¶ádçÖV£§ŠûªÔ¾*åš*Ë59›š¥?¥ãÓÒƒZ,ÞŽ‘B\ŠË4\®ã \Iu†;Ò§q£“ö¯v(€ŽHB^¥ãs/·+ØÑ’3×èø¼œq‡£[brâ:_PÌĨœø’ŽëÕž`<SIþe»ðFBz*¨¤’7’Y¶qˆý'2ÒnÒñU™–2<¥—$¿EÇ­’Ü«È3ߦãvÜaË6Œ'ÜM:ŠõuìÖð wánâÁŠÒoáÄòîždŸÊ±Ó4ÜËÄÈïÁ=pI¼tìÁ^fz8ŒÉX\žéµ§Ùš'ûƒxHÃÃ:ú%»7s %Øj$VÏIʵè8 Ïmw” Ó_RŠÇuÂ7Ù>==Á(kÎL§f «™$Ä“â[¬÷ÕK³/Ôð´Ã1—îº<…gt<+Ï.×ö`Ÿ„~NB"ÔÀ Ÿ•K"=¯ã¼ÈˆÝaö^§Æä¼¬ã{òPÈOÆõWñ} ¯éøœ/IíZ1Œp¹ÚèfOð†Ã˜Q4ü(cÙà£\wCÚͬ§Ÿªø3ÚéÖ¥±.î*i Gƒ«{»;‚ñuf-öÊc4ÒnÄÃòÞšt'·†)»¿e¤•«‘–‹˜Õi\)æ;õ¦‡ºv^·ÕÞz3è Õãõ&(xC–nvD,Bö¶Žû•ìa>"Ô%ée.£!PqLѦšèòaAY»¶¯gÀ½Ãm\à_ĽmáPÔHöÊP[>¬ôrýÈhYÿ>"¬uY±þ/ÏVÓLa¥©¶þ¢8ÂŒL<÷–³;£C‚Ñ.o#кN·k” §ën1JÝÛ‡ §M#ÔeÄùvˆ"Æ©s¡­ˆ0Û¼Ì1/¬h£ÚæÃQÒ“hEmI£s;›2+…ê>†âÆü¦6yø~ŸG2ßr¦àUˆ6ìNІ³vš=GéÐv‹"©®'õR5dɂ̒+=ŸOƒZý‡-AÆ¥h–G‡–uƺ;xÖ¤Þr5‘£‰±ÔÈ¡À²§Mtð¥%ë-°ah§è(×Çèe÷°£ÇÉéÝ—•nO»7Í9{™0¤Ýº†ÓÃqÏÇÒ)AgÄúNæi‹õÆ;ƒ+ÂÒÎS²Ÿá³$»àæh4WÝK0JöÇ9ü{?„‹ã•8 €[~¹R×B輎Ïü˜¿?áÁ±‹×qþýþš‡¡ù¢hc f?J†w/åàMþz Ìáï\`Æ¢oq¦ÂÜŽŸâg€I¡F?Ç/¸[òm‹n‰ðø‚·¦cý{lzr"_¬Çš+mdÞÁ»Äø%~•oBÞrùÙ$ Þ¯ñ…WßfÁ›œw2ñZ²àý/Zx¿ç3‰·ÑÂ+Qx0U`Ô•ºE85 ´Ä-Áð!ÿȱiV9ó'Žþ¬û G~¼o‰ßJTéŽBEèGu†üëé½ iž+´© e®( e­<çÇ_-Mº,èRÚR¥:C•Í(Æiø¥6~©_Jü÷¸:¥”œùgL¥þιY¨µ”j²lX`ù$°wˆJtIWšõ lÊüCQ mž7_)&á$^?f…ÛJ¸°‚3e€¨Ç?³ÄI]†»‰Í'ÿ²„ª·ãät Ï›Š“'07ݾ Ú*™†ëµq½ø`H¨È™Û¡rD™¡Ö“±ÌÖ ÃÅÊ}Tä\’ž—FZf“–ÙÊÌEÝ)ÿ_€WŸ Ík@Æ}…YU.$ÅE¤¸˜•â’´ØñÙ4>‹FŽ>´bs.þcöñ^âTfò:Ó‘x,ëp)‰/#ñå$¾‚¤W*r¿ f“WÚ䕸H‘C~hçÈE‘çr×ðzŸMï«I é¯%ýuGÓ[‘cê-\VÔôY>,¯yÅ~¡"fán¦hZ-”¤î4Òëù{«È.LÂi>-·IË3©Ü $áVX9%ºR"Wó,ýï„K!5“þDÁl÷ø÷ay?š©¾ö$VíÂ(9z«¸ %»•Ãø¤uß|Ôʃç”ÝÈ÷óڶ׎ý©´p3sñÚë6LÀítÓ<ƒîÄR„»ÒTi¶UiyB³σ»Ô7žâËOØ–ÈOBã<ÐȂƖo5/ùfêööcsCn(UøkÈrôår¸]MÄ ¡!%äd‚÷ò÷>Ú÷~ ó…Ü‹ãxmÀ>%à"“ΰQä‹eãF%jw× r# …NÅ1¢ˆs¹¶OÌgÅÒò ¹©Žèç i¨Ã5JÊÖÀ³Ð\»‘8´¨FIÜàö¹Í9·»>·|LîY#§!/ð ô€Ë—ç*;|îgPàË+÷¹Û¤67hûp~eKfÝMü¨*‡P9T ÙÈ2-Ï1vÒ‘>Í—wŸqÑ5‹S÷Ÿ•÷³S÷WËûŠÔýµò¾4uÿEWšuÛUÃ…RxñCà¦ã ÚãÔÿ0Þ›èЕx«|çã9æôa\…çë/à&¼Ä y™þy…;_Åcx+ÞP^9Õ´ší•ÃfØë)Q¢ÒŽŒ¢T”Q– Ø£7Ùï^ÎåR†Å(®Ë#óùÊSš ¹éРD£›Ä‡(š³˜ƒqŒöA†ù%ü§ÿLœe…ä¹äP{e3Å~ÜÐ*Ç72ìöãf5nW㯭ž™:vÌì~›ÑñËÉ»¨b›”ªfÓmݦ[ºé˜ ƉñÜ]ÅL.R—#?üZÅåu^sU638Hy§àÃÜÀÆTáAܳq?îkåôýÌš™°O>ÂÁ~Ywmp|î~<¶>PZÑ'Öïþè­À»Mgƒ=W;&ÙÎŒb¹™È¦¦žee![šelhV²ó¿žG‘ìýÜCr[&‡P#S‘TÁjVÉaæ}1r‹Dáäixð*k–.×ßj+û¾¥ìæ‘+;o@Ù§”²áÛýøõ](õUßd€Ãi˜Å l&ŠXÞKXYGñpžÈ㬞çËbÊ¿R¬eH๣4ÿ¿PKÉÝáj³ Œ PK H Y'org/slf4j/spi/LocationAwareLogger.classm‘ÍNƒ@…ïmU*Z­Zÿ6&îêF6ݱÂJ BB±.\˜ŒN3Pûn.|Êx©!5“Y|'÷dÎ=óùõþc8Ö ƒp.UbâiœÅkj¸2fe*skÉwe’p¥Á coÌ,O ?Êx\j°Ajcþ™EØ kb?:^ˆ€B"ó¢dy9gbÁ»ô2Ðе}uwS U‚ŽÐs¼©_óøÞ ¼šÏÈ`Ô¡+d‚Ü&Á-S/\™n“tVª4OLç¯ôàþÞ§í Ÿ•\²HpóbŽ ÏäBÅ|š ŽpòOA—•“Ú Tt×霂½jO Ûx«ÅÛÄýïï¶x@¼×â}@ú®º;\iGßPKá˜-ÇPK H Y'org/slf4j/spi/LoggerFactoryBinder.class;õo×>v&FÅü¢týâœ4“,ýâ‚L}ŸüôôÔ"·Ää’ü¢J§Ì¼”Ô"vF¬Ä²DýœÄ¼t}ÿ¤¬Ôä Pzj ŠrF M„yž(²ÖŒ è:œs‹‹ƒKŠD€:V…2óÒ:¸‚óK‹’SÝ2sRÚ±8N¤ ¨Î%µ (59±$5…‘‘™˜€ge`cy€$ÂÀ &¹¸A PKû:ĵ PK H Y%org/slf4j/spi/LoggingEventAware.class;õo×>Nv&Fùü¢týâœ4“,ýâ‚L}Ÿüôô̼tײԼÇòÄ¢TvF¬Ä²DýœÄ¼t}ÿ¤¬ÔäFæœütFE „þT&¬5ø‚óK‹’SÝ2sRÄ0,Ð™ÍÆÈ4’ö±2°X ì@’‰PK•RÞˆ³PK H Y'org/slf4j/spi/LoggingEventBuilder.class¥TKOÛ@žM !á•¶Ðò~HH„êK¤ª ª$DA¹pZ’a³aYGû ê±«‡þ€þ¨ªã`Ad»`ÀÏîÌ÷}žÇzÿüýõj°^„ƒõЈÀªËZ/°}4B!¤û7¨Ý®—ªƒ¦¯Tzü†Škœ\ô°íŒYt{Ü[dðµÚ¸ŸuMø_(¬o5¯3˜?õÚÉklI+‰µ£u踓¡¶ 6†º¨úhl°×ÅöÕ):ot‹+$QâÎ17Wh|®qn9'•#ü5y:ÉšsêìÆLï¤ .½nGÅMßï+™;™RS Í©Hjïþƒ‚Û¿=¡À#ü1èƒÃá›Î¾þÜ’Ïþ«õ¢&tŸ(»Î?ooÊtšÑZ.01ûø»ùdZ*-›7¿W*ô®nµÌf¥GþÍ|%ä—\Èln5ƒ{ž ]{äO Hí #Z¹zÓÆ©h\s-ûGPÏ z¦èQÚiÙ1ˆ.¶”S¾q˜ÈðMB¦ÈW€éD¬oRø ¼½Ã¿KÄf`6…ŸÒŸˆ}€¹ØÎÇv!¶‹d’]Š÷ËĹÕX¡Õê`µöPK)žšÈÅòPK H Yorg/slf4j/spi/MDCAdapter.classRKOƒ@ž­öAµöeµ>®*½È¥‰‰¶ñ¢MM¼¯¸Eº,ü5þ”qvCŠi1iäÀ0ß|ó̓ùúþø€>–¡@  ÇŠüiß³"îZ£áàæ™rÉDÖ 4<:£–OÇ?yÌ–ÖxŒïó! M¤pçré="ßaÈ?Îá÷–!%Á^Ã#ÐÉË@½¢í3*P×T^Õ!OÆÓAHö.G”hš©v,]ßB…‰ëTƵÏãW«Ls*µHÕË*µÌ…Bª©só_ê*Õàqôr›Ü³„@…‡<ýÌÆ²·˜¥èÑßKÕ¥5›¾X…—Ó¤¸®×ý»juÆÂfw®›¬gsªòKð×€zªx?E(º£2T´5 ªílj[ƒ-äב]€úMhÍý6úÛi~'ÍßÝy¼‹þžÒCd_#?PKÇo|ÍMÜPK H Y'org/slf4j/spi/MarkerFactoryBinder.class;õo×>v&FÅü¢týâœ4“,ýâ‚L}ßÄ¢ìÔ"·Ää’ü¢J§Ì¼”Ô"vF¬Ä²DýœÄ¼t}ÿ¤¬Ôä Pzj ŠrF M„yž(²ÖŒ è:œs‹‹ƒKŠD€:V…2óÒ:¸‚óK‹’SÝ2sRÚ±8N¤ ¨Î%µ (59±$5…‘‘™˜€ge`cy€$ÂÀ &¹¸A PKêô´èµ PK H Y*org/slf4j/spi/NOPLoggingEventBuilder.class¥•[SÓ@Ç϶…B©\/€r§¥ —"H±\´jgLJPB„¤“&8<ú@ptÆà‡r<»YbZ’6âìöì9¿óß³g³¿~ÿ 3°ÃŠBÔh=΄„"¨RbgÿX,ê—dU6– ccùFh€Æ0D¢ÐQCš.%JÊáÌq¢T”Ù·M’dUJŸ‰ª‘2eå@Ô 4îne72éÜN–ÀHÆOL2‚‰š£Ð­^ÂUE44•Àpl¬à»ê Ð_Ó™@hM; ´ddUÌš§û¢žö´´g´‚ ä]¦¿¹1dÉ%%l ú ÌÅš,cÒL,î)G´ß$h«ºdžb ËRy:>³"Mp#˜@Š#MCV‡¦Z0dMMìšÅ¢"ûÞC³Æp×Qz«B t•—õ¼x]Ú¾jKñå$m%YRÃÔÑ=]U=õ÷·Zæ7ây^PL¤n9˼kè蟼máƒ'âyyé9@Ý™•.ç™î¿eªjinî‡Öö襸büÉk(‰Æš`–°‹Î¬¹#]ûD›Á'§®`A:]xŠ&ˆ`¶m±T$±âñ]úK>½f´ðÙßž÷]ož‘Ö;_½Ý‚ü ítÛbïWëŽ.3·Ð„a£þ. zOdÁ—¿;!„„Ik˜"s!}ðÄ/w‡Ë2väRAá]dW3õ‚¸.ÓoR·û5AÐïLð†ãß}ú$â£Ú†|KÑrMãHp¬‹_¹ÄI:ñ?}vîAúpµœÐBôÝ〶úá  ‹¯gÖ~–ö÷œÇ‘RCßàÎ…ÉòaYº¬už…ÎB7ؽ>(ã”Gð˜SúpR^WP‚ʤ¥p}Юµ ál˜©ÁÙ(ĸÊŽA•³Œßg­;øcçÜqÔ`¼'\o®‚çÔ»èƒ7€§òqxŠKùÚ¸ëÚõ]ñ¨ÌÓ?¯¯nÐ0c>ϵayÞÛ7„ É™¶ø•L˜±‰½¼ÄXë´}Ë Pöð@U 0“)ˆ?êÃÇVÒæxS›¸úFi¡dY\¦1z´˜ŸÞ‡´ƒ)Ãç,1ˆX‚_;iGᨮôñ FÿÒUÙª¬À ¦Ì,ã  µ#ZÈ,Àú†´§·¹Ò6Y+n¥Â >ÈÃ1y` ìz|ÏT夭6gÄ7W§¿’óé%¹–i) ¤¶„t¢xQ5+ž-ØX7¤]• V*wfÂ’«f…´Ò4)Yæ º)FfÃú6j§ø]Ø• kj¡»’‹¶æ…(ñhÛhåAÝ0Õ“ål‡-¶½ž8]*˜s~mµ£ÿÖ.‘ùœ/JÅ̦óN5—ê«çÅíi+öH ©Ì…T3q!X©‡õØFñìÆ`gŠ%Ï™Ðèy€ö,`ˆ2ÝC7x|xHÏ…˜6Á=[±6Š—ùS;_ðŠM‹vC‡tw½°íMÿ÷Æâ޼ÒÓf÷Ÿ†S=—ÝÕ’²:—öÀáâò4¾+óÀ`1}»½<²Š%Ó×[Ý®Åg!q ƒão+,é¶iÕºíŒ;¨þàëïk˜+Ñ¿ÞÃêRe²ÝÔ]fÕªùn¤77S  >iŸÖý'ÅòLn£(:úq4Ùrª/‰–—"î‘m'äùÙ éÀý øžï“ëŠA Þ»‰àÕûPjPÄu›È9i¯þæ©'cb$ÉØX³¾.áyËÁßeu·Ài¼ã‚›¯/Lê`~RP“9ÔYäüpÐÓDVÂÞ­xB2„œ‰´–jtÐ\ѸúUìm‹ŒFÞÑÎÐ=—øÛʨ7¾}óojÂTÉGÊÈ›ì°ó^7ÜUäUì_#/lÞw¿ Ðþ Ðæ_ÿj©Û8”þPKv±<¶ PK H Y1META-INF/maven/org.slf4j/slf4j-api/pom.propertiesK,*ÉLKL.ñL±-ÎI3ÉÒM,ÈäJ/Ê/-Šä¥ëE¹ÊR‹Š3óólô ô ͸PK¡EKÁ36PK H Y%META-INF/versions/9/module-info.classUŽQN1†ÿdaqYp«ðÝ.ð<MHöu°¸RÒÊ>{.<€‡2–‚¢ôŸÌ÷ÿ“Ìç×û€ ."4½3ßV|¥× Cˆ ³µ%OuÅ„ÁK®T­퇀2D„®±KéªÅxåùÉëÛ ±ç»¨|TŽN÷±<Äú„äwÌÝF éqÍëW3ÂðŸ¸Ú°uáòßz^ÜOÇwÛZ—<³¦Ös¶„þþÊ™*ŸÕ’Ý@øyM_@-œø>BÛkÇûÝà¶Ð = š6 ™×sÿãK½“|PK€æ“•àNPK H Yôu/;5META-INF/MANIFEST.MFþÊPK  H Y META-INF/PK  H Y¨META-INF/versions/PK  H YØMETA-INF/versions/9/PK  H Y org/PK  H Y ,org/slf4j/PK  H YTorg/slf4j/event/PK  H Y‚org/slf4j/helpers/PK  H Y²org/slf4j/spi/PK  H YÞMETA-INF/maven/PK  H Y META-INF/maven/org.slf4j/PK  H Y#BMETA-INF/maven/org.slf4j/slf4j-api/PK H YrzI±šƒMETA-INF/LICENSE.txtPK H YÔÇxŠ´vorg/slf4j/ILoggerFactory.classPK H Yüú«³¹Lorg/slf4j/IMarkerFactory.classPK H Y@%2C–¤ Q org/slf4j/Logger.classPK H Y„ÛôõÿÒD+org/slf4j/LoggerFactory.classPK H YuŠëh'#u.org/slf4j/LoggerFactoryFriend.classPK H Y~›Å“±.0org/slf4j/MDC$1.classPK H Y®¯®Á­í 1org/slf4j/MDC$MDCCloseable.classPK H Y²]%:ð ÿ2org/slf4j/MDC.classPK H YãgÅõÛz9org/slf4j/Marker.classPK H Y‹ý•8–s;org/slf4j/MarkerFactory.classPK H Y\ €èC)T>org/slf4j/event/DefaultLoggingEvent.classPK H YÌ”vJrR$“Dorg/slf4j/event/EventConstants.classPK H Y‰éŒò *WForg/slf4j/event/EventRecordingLogger.classPK H Y âVùº"¡Korg/slf4j/event/KeyValuePair.classPK H Y¤D1}OT«Norg/slf4j/event/Level.classPK H YéЬ0"CSorg/slf4j/event/LoggingEvent.classPK H Yýy«xÊE ,?Uorg/slf4j/event/SubstituteLoggingEvent.classPK H YÌÊ~» 1$&cZorg/slf4j/helpers/AbstractLogger.classPK H Yd†!V)rdorg/slf4j/helpers/BasicMDCAdapter$1.classPK H YkªŠ«“ 'gorg/slf4j/helpers/BasicMDCAdapter.classPK H YÐEÉ‹âY #morg/slf4j/helpers/BasicMarker.classPK H Y‘=çšU–*Rtorg/slf4j/helpers/BasicMarkerFactory.classPK H YÓÍd€»(ÿworg/slf4j/helpers/CheckReturnValue.classPK H Y’ÌË.C'Zyorg/slf4j/helpers/FormattingTuple.classPK H Y8‡›O°µ,Ì{org/slf4j/helpers/LegacyAbstractLogger.classPK H Yêì§`¸*Ö}org/slf4j/helpers/MarkerIgnoringBase.classPK H Y´ee“Ý \(Žƒorg/slf4j/helpers/MessageFormatter.classPK H Ye_2K©!Áorg/slf4j/helpers/NOPLogger.classPK H YIÅ[MH(¹•org/slf4j/helpers/NOPLoggerFactory.classPK H YLÓ¾b`¬%\—org/slf4j/helpers/NOPMDCAdapter.classPK H Y=¯Ð‰k3šorg/slf4j/helpers/NOP_FallbackServiceProvider.classPK H YMy]íÖ7'ùœorg/slf4j/helpers/NamedLoggerBase.classPK H Y«ªÚ ,$Ÿorg/slf4j/helpers/NormalizedParameters.classPK H Y¾ÀÜ!÷°&¤org/slf4j/helpers/Reporter$Level.classPK H YwqiÎ-f§org/slf4j/helpers/Reporter$TargetChoice.classPK H Y}Ÿï²V *ªorg/slf4j/helpers/Reporter.classPK H YÝŒÕÒ•$*±org/slf4j/helpers/Slf4jEnvUtil.classPK H Yx«Ø' ,(³org/slf4j/helpers/SubstituteLogger.classPK H Y¨Ì$ÅÊ/ŽÀorg/slf4j/helpers/SubstituteLoggerFactory.classPK H Y>à<¸p½1°Äorg/slf4j/helpers/SubstituteServiceProvider.classPK H YëŠÐ h .Çorg/slf4j/helpers/ThreadLocalMapOfStacks.classPK H YÙxt[œÄûËorg/slf4j/helpers/Util$1.classPK H Yǵ¬m|ý8ãÌorg/slf4j/helpers/Util$ClassContextSecurityManager.classPK H YÒË^ ÅÎorg/slf4j/helpers/Util.classPK H Y Í…”޹'mÕorg/slf4j/spi/CallerBoundaryAware.classPK H YW*;â J0PÖorg/slf4j/spi/DefaultLoggingEventBuilder$1.classPK H YÉÝáj³ Œ .¸Øorg/slf4j/spi/DefaultLoggingEventBuilder.classPK H Yá˜-Ç'Çåorg/slf4j/spi/LocationAwareLogger.classPK H Yû:ĵ '3çorg/slf4j/spi/LoggerFactoryBinder.classPK H Y•RÞˆ³%=èorg/slf4j/spi/LoggingEventAware.classPK H Y)žšÈÅò'éorg/slf4j/spi/LoggingEventBuilder.classPK H YÇo|ÍMÜ2ëorg/slf4j/spi/MDCAdapter.classPK H Yêô´èµ 'Ëìorg/slf4j/spi/MarkerFactoryBinder.classPK H Ym O«[ *Õíorg/slf4j/spi/NOPLoggingEventBuilder.classPK H YºYö…(Øñorg/slf4j/spi/SLF4JServiceProvider.classPK H Yv±<¶ *$óMETA-INF/maven/org.slf4j/slf4j-api/pom.xmlPK H Y¡EKÁ3612÷META-INF/maven/org.slf4j/slf4j-api/pom.propertiesPK H Y€æ“•àN%Ä÷META-INF/versions/9/module-info.classPKGG.÷øhdf4-hdf4.3.1/java/src/000077500000000000000000000000001503061704500145375ustar00rootroot00000000000000hdf4-hdf4.3.1/java/src/CMakeLists.txt000066400000000000000000000004541503061704500173020ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA_SRC C) #----------------------------------------------------------------------------- # Traverse source subdirectory #----------------------------------------------------------------------------- add_subdirectory (jni) add_subdirectory (hdf) hdf4-hdf4.3.1/java/src/Makefile.am000066400000000000000000000037271503061704500166040ustar00rootroot00000000000000# # HDF Java native interface (JNI) Library Makefile(.in) include $(top_srcdir)/config/commence.am # Mark this directory as part of the JNI API JAVA_API=yes SUBDIRS=jni JAVAROOT = .classes classes: test -d $(@D)/$(JAVAROOT) || $(MKDIR_P) $(@D)/$(JAVAROOT) jarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar hdf_javadir = $(libdir) pkgpath = hdf/hdflib CLASSPATH_ENV=CLASSPATH=.:$(top_srcdir)/java/lib/slf4j-api-2.0.16.jar:$$CLASSPATH AM_JAVACFLAGS = $(H4_JAVACFLAGS) -deprecation hdf_java_JAVA = \ ${pkgpath}/HDFException.java \ ${pkgpath}/HDFJavaException.java \ ${pkgpath}/HDFArray.java \ ${pkgpath}/HDFChunkInfo.java \ ${pkgpath}/HDFCompInfo.java \ ${pkgpath}/HDFConstants.java \ ${pkgpath}/HDFDeflateCompInfo.java \ ${pkgpath}/HDFIMCOMPCompInfo.java \ ${pkgpath}/HDFJPEGCompInfo.java \ ${pkgpath}/HDFLibrary.java \ ${pkgpath}/HDFLibraryException.java \ ${pkgpath}/HDFNativeData.java \ ${pkgpath}/HDFNewCompInfo.java \ ${pkgpath}/HDFNBITChunkInfo.java \ ${pkgpath}/HDFNBITCompInfo.java \ ${pkgpath}/HDFNotImplementedException.java \ ${pkgpath}/HDFOldCompInfo.java \ ${pkgpath}/HDFOldRLECompInfo.java \ ${pkgpath}/HDFRLECompInfo.java \ ${pkgpath}/HDFSKPHUFFCompInfo.java \ ${pkgpath}/HDFSZIPCompInfo.java $(jarfile): classhdf_java.stamp classes docs $(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath) hdf_java_DATA = $(jarfile) .PHONY: docs classes WINDOWTITLE = 'HDF Java' DOCTITLE = '

    HDF Java Wrapper

    ' SRCDIR = '$(pkgpath)' docs: $(JAVADOC) -sourcepath $(srcdir) -d javadoc -use -splitIndex -windowtitle $(WINDOWTITLE) -doctitle $(DOCTITLE) -J-Xmx180m -verbose -overview $(top_srcdir)/java/src/hdf/overview.html -classpath $(CLASSPATH_ENV) hdf.hdflib CLEANFILES = classhdf_java.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class clean: rm -rf $(JAVAROOT)/* rm -f $(jarfile) rm -f classhdf_java.stamp # Clean when check-clean is invoked check-clean :: ; #include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/java/src/Makefile.in000066400000000000000000000674251503061704500166220ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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@ # # HDF Java native interface (JNI) Library Makefile(.in) VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = java/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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__installdirs = "$(DESTDIR)$(hdf_javadir)" \ "$(DESTDIR)$(hdf_javadir)" am__java_sources = $(hdf_java_JAVA) 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; }; \ } DATA = $(hdf_java_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/commence.am 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ SRCDIR = '$(pkgpath)' STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog # Mark this directory as part of the JNI API JAVA_API = yes SUBDIRS = jni JAVAROOT = .classes jarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar hdf_javadir = $(libdir) pkgpath = hdf/hdflib CLASSPATH_ENV = CLASSPATH=.:$(top_srcdir)/java/lib/slf4j-api-2.0.16.jar:$$CLASSPATH AM_JAVACFLAGS = $(H4_JAVACFLAGS) -deprecation hdf_java_JAVA = \ ${pkgpath}/HDFException.java \ ${pkgpath}/HDFJavaException.java \ ${pkgpath}/HDFArray.java \ ${pkgpath}/HDFChunkInfo.java \ ${pkgpath}/HDFCompInfo.java \ ${pkgpath}/HDFConstants.java \ ${pkgpath}/HDFDeflateCompInfo.java \ ${pkgpath}/HDFIMCOMPCompInfo.java \ ${pkgpath}/HDFJPEGCompInfo.java \ ${pkgpath}/HDFLibrary.java \ ${pkgpath}/HDFLibraryException.java \ ${pkgpath}/HDFNativeData.java \ ${pkgpath}/HDFNewCompInfo.java \ ${pkgpath}/HDFNBITChunkInfo.java \ ${pkgpath}/HDFNBITCompInfo.java \ ${pkgpath}/HDFNotImplementedException.java \ ${pkgpath}/HDFOldCompInfo.java \ ${pkgpath}/HDFOldRLECompInfo.java \ ${pkgpath}/HDFRLECompInfo.java \ ${pkgpath}/HDFSKPHUFFCompInfo.java \ ${pkgpath}/HDFSZIPCompInfo.java hdf_java_DATA = $(jarfile) WINDOWTITLE = 'HDF Java' DOCTITLE = '

    HDF Java Wrapper

    ' CLEANFILES = classhdf_java.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 java/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign java/src/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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 classhdf_java.stamp: $(am__java_sources) @list1='$?'; list2=; if test -n "$$list1"; then \ for p in $$list1; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ list2="$$list2 $$d$$p"; \ done; \ echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \ $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \ else :; fi echo timestamp > $@ install-hdf_javaJAVA: classhdf_java.stamp @$(NORMAL_INSTALL) @test -n "$(hdf_java_JAVA)" && test -n "$(hdf_javadir)" || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(hdf_javadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(hdf_javadir)"; \ set x *.class; shift; test "$$1" != "*.class" || exit 0; \ echo " $(INSTALL_DATA)" "$$@" "'$(DESTDIR)$(hdf_javadir)/$$p'"; \ $(INSTALL_DATA) "$$@" "$(DESTDIR)$(hdf_javadir)" uninstall-hdf_javaJAVA: @$(NORMAL_UNINSTALL) @test -n "$(hdf_java_JAVA)" && test -n "$(hdf_javadir)" || exit 0; \ set x *.class; shift; test "$$1" != "*.class" || exit 0; \ echo " ( cd '$(DESTDIR)$(hdf_javadir)' && rm -f" "$$@" ")"; \ cd "$(DESTDIR)$(hdf_javadir)" && rm -f "$$@" clean-hdf_javaJAVA: -rm -f *.class classhdf_java.stamp install-hdf_javaDATA: $(hdf_java_DATA) @$(NORMAL_INSTALL) @list='$(hdf_java_DATA)'; test -n "$(hdf_javadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(hdf_javadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(hdf_javadir)" || 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_DATA) $$files '$(DESTDIR)$(hdf_javadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(hdf_javadir)" || exit $$?; \ done uninstall-hdf_javaDATA: @$(NORMAL_UNINSTALL) @list='$(hdf_java_DATA)'; test -n "$(hdf_javadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(hdf_javadir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 classhdf_java.stamp $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(hdf_javadir)" "$(DESTDIR)$(hdf_javadir)"; 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-am: clean-generic clean-hdf_javaJAVA 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-hdf_javaDATA install-hdf_javaJAVA 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-hdf_javaDATA uninstall-hdf_javaJAVA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-hdf_javaJAVA clean-libtool \ cscopelist-am ctags ctags-am 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-hdf_javaDATA install-hdf_javaJAVA \ 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-am uninstall \ uninstall-am uninstall-hdf_javaDATA uninstall-hdf_javaJAVA .PRECIOUS: Makefile classes: test -d $(@D)/$(JAVAROOT) || $(MKDIR_P) $(@D)/$(JAVAROOT) $(jarfile): classhdf_java.stamp classes docs $(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath) .PHONY: docs classes docs: $(JAVADOC) -sourcepath $(srcdir) -d javadoc -use -splitIndex -windowtitle $(WINDOWTITLE) -doctitle $(DOCTITLE) -J-Xmx180m -verbose -overview $(top_srcdir)/java/src/hdf/overview.html -classpath $(CLASSPATH_ENV) hdf.hdflib clean: rm -rf $(JAVAROOT)/* rm -f $(jarfile) rm -f classhdf_java.stamp # Clean when check-clean is invoked check-clean :: ; #include $(top_srcdir)/config/conclude.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: hdf4-hdf4.3.1/java/src/hdf/000077500000000000000000000000001503061704500153005ustar00rootroot00000000000000hdf4-hdf4.3.1/java/src/hdf/CMakeLists.txt000066400000000000000000000001331503061704500200350ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA_HDF C) add_subdirectory (hdflib) hdf4-hdf4.3.1/java/src/hdf/hdflib/000077500000000000000000000000001503061704500165305ustar00rootroot00000000000000hdf4-hdf4.3.1/java/src/hdf/hdflib/CMakeLists.txt000066400000000000000000000044751503061704500213020ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA_HDF_HDF4 Java) set (CMAKE_VERBOSE_MAKEFILE 1) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF4_JAVA_HDF_HDF4_SOURCE_DIR};${HDF4_JAVA_HDF_HDF4_BINARY_DIR};${HDF4_JAVA_LIB_DIR};${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${HDF4_JAVA_HDF_LIB_CORENAME}.dir/hdf/hdflib") SET_GLOBAL_VARIABLE (HDF4_JAVA_SOURCE_PACKAGES "${HDF4_JAVA_SOURCE_PACKAGES};hdf.hdflib" ) set (HDF4_JAVA_HDF_HDF4_SRCS HDFException.java HDFJavaException.java HDFArray.java HDFChunkInfo.java HDFCompInfo.java HDFConstants.java HDFDeflateCompInfo.java HDFIMCOMPCompInfo.java HDFJPEGCompInfo.java HDFLibrary.java HDFLibraryException.java HDFNativeData.java HDFNewCompInfo.java HDFNBITChunkInfo.java HDFNBITCompInfo.java HDFNotImplementedException.java HDFOldCompInfo.java HDFOldRLECompInfo.java HDFRLECompInfo.java HDFSKPHUFFCompInfo.java HDFSZIPCompInfo.java ) set (CMAKE_JNI_TARGET TRUE) file (WRITE ${PROJECT_BINARY_DIR}/Manifest.txt "Enable-Native-Access: ALL-UNNAMED " ) set (CMAKE_JAVA_INCLUDE_PATH "${HDF4_JAVA_LOGGING_JAR}") add_jar (${HDF4_JAVA_HDF_LIB_TARGET} OUTPUT_NAME "${HDF4_JAVA_HDF_LIB_TARGET}-${HDF4_PACKAGE_VERSION}" OUTPUT_DIR ${CMAKE_JAVA_TARGET_OUTPUT_DIR} MANIFEST ${PROJECT_BINARY_DIR}/Manifest.txt ${HDF4_JAVA_HDF_HDF4_SRCS}) install_jar (${HDF4_JAVA_HDF_LIB_TARGET} LIBRARY DESTINATION ${HDF4_INSTALL_JAR_DIR} COMPONENT libraries) #if (NOT WIN32) # install_jni_symlink (${HDF4_JAVA_HDF_LIB_TARGET} ${HDF4_INSTALL_JAR_DIR} libraries) #endif () get_target_property (${HDF4_JAVA_HDF_LIB_TARGET}_JAR_FILE ${HDF4_JAVA_HDF_LIB_TARGET} JAR_FILE) SET_GLOBAL_VARIABLE (HDF4_JAVA_JARS_TO_EXPORT "${HDF4_JAVA_JARS_TO_EXPORT};${${HDF4_JAVA_HDF_LIB_TARGET}_JAR_FILE}") SET_GLOBAL_VARIABLE (HDF4_JAVA_JARS ${${HDF4_JAVA_HDF_LIB_TARGET}_JAR_FILE}) add_dependencies (${HDF4_JAVA_HDF_LIB_TARGET} ${HDF4_JAVA_JNI_LIB_TARGET}) set_target_properties (${HDF4_JAVA_HDF_LIB_TARGET} PROPERTIES FOLDER libraries/java) create_javadoc(hdf4_java_doc FILES ${HDF4_JAVA_HDF_HDF4_SRCS} OVERVIEW ${HDF4_JAVA_HDF_SRC_DIR}/overview.html CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} WINDOWTITLE "HDF Java" DOCTITLE "

    HDF Java Wrapper

    " INSTALLPATH ${HDF4_INSTALL_DOC_DIR} AUTHOR TRUE USE TRUE VERSION TRUE ) hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFArray.java000066400000000000000000001145271503061704500210050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package hdf.hdflib; import java.util.Arrays; import hdf.hdflib.HDFException; import hdf.hdflib.HDFJavaException; /** * This is a class for handling multidimensional arrays for HDF. *

    * The purpose is to allow the storage and retrieval of arbitrary array types containing scientific data. *

    * The methods support the conversion of an array to and from Java to a one-dimensional array of bytes * suitable for I/O by the C library.

    This class heavily uses the HDFNativeData class to convert between Java and C * representations. */ public class HDFArray { private Object _theArray = null; private ArrayDescriptor _desc = null; private byte[] _barray = null; // public HDFArray() {} /** * The input must be a Java Array (possibly multidimensional) of primitive numbers or sub-classes of * Number.

    The input is analysed to determine the number of dimensions and size of each dimension, as * well as the type of the elements.

    The description is saved in private variables, and used to * convert data. * * @param anArray * The array object. * @exception hdf.hdflib.HDFJavaException * object is not an array. */ public HDFArray(Object anArray) throws HDFJavaException { if (anArray == null) { HDFJavaException ex = new HDFJavaException("HDFArray: array is null?: "); ex.printStackTrace(); } Class tc = anArray.getClass(); if (tc.isArray() == false) { /* exception: not an array */ HDFJavaException ex = new HDFJavaException("HDFArray: not an array?: "); ex.printStackTrace(); throw(ex); } _theArray = anArray; _desc = new ArrayDescriptor(_theArray); /* extra error checking -- probably not needed */ if (_desc == null) { HDFJavaException ex = new HDFJavaException("HDFArray: internal error: array description failed?: "); throw(ex); } } /** * Allocate a one-dimensional array of bytes sufficient to store the array. * * @return A one-D array of bytes, filled with zeroes. The bytes are sufficient to hold the data of the * Array passed * to the constructor. * @exception hdf.hdflib.HDFJavaException * Allocation failed. */ public byte[] emptyBytes() throws HDFJavaException { byte[] b = null; if ((ArrayDescriptor.dims == 1) && (ArrayDescriptor.NT == 'B')) { b = (byte[])_theArray; } else { b = new byte[ArrayDescriptor.totalSize]; } if (b == null) { HDFJavaException ex = new HDFJavaException("HDFArray: emptyBytes: allocation failed"); throw(ex); } return (b); } /** * Given a Java array of numbers, convert it to a one-dimensional array of bytes in correct native order. * * @return A one-D array of bytes, constructed from the Array passed to the constructor. * @exception hdf.hdflib.HDFJavaException * the object not an array or other internal error. */ public byte[] byteify() throws HDFJavaException { if (_barray != null) { return _barray; } if (_theArray == null) { /* exception: not an array */ HDFJavaException ex = new HDFJavaException("HDFArray: byteify not an array?: "); throw(ex); } if (ArrayDescriptor.dims == 1) { /* special case */ if (ArrayDescriptor.NT == 'B') { /* really special case! */ _barray = (byte[])_theArray; return _barray; } else { try { _barray = new byte[ArrayDescriptor.totalSize]; byte[] therow; if (ArrayDescriptor.NT == 'I') { therow = HDFNativeData.intToByte(0, ArrayDescriptor.dimlen[1], (int[])_theArray); } else if (ArrayDescriptor.NT == 'S') { therow = HDFNativeData.shortToByte(0, ArrayDescriptor.dimlen[1], (short[])_theArray); } else if (ArrayDescriptor.NT == 'F') { therow = HDFNativeData.floatToByte(0, ArrayDescriptor.dimlen[1], (float[])_theArray); } else if (ArrayDescriptor.NT == 'J') { therow = HDFNativeData.longToByte(0, ArrayDescriptor.dimlen[1], (long[])_theArray); } else if (ArrayDescriptor.NT == 'D') { therow = HDFNativeData.doubleToByte(0, ArrayDescriptor.dimlen[1], (double[])_theArray); } else if (ArrayDescriptor.NT == 'L') { if (ArrayDescriptor.className.equals("java.lang.Byte")) { therow = ByteObjToByte((Byte[])_theArray); } else if (ArrayDescriptor.className.equals("java.lang.Integer")) { therow = IntegerToByte((Integer[])_theArray); } else if (ArrayDescriptor.className.equals("java.lang.Short")) { therow = ShortToByte((Short[])_theArray); } else if (ArrayDescriptor.className.equals("java.lang.Float")) { therow = FloatObjToByte((Float[])_theArray); } else if (ArrayDescriptor.className.equals("java.lang.Double")) { therow = DoubleObjToByte((Double[])_theArray); } else if (ArrayDescriptor.className.equals("java.lang.Long")) { therow = LongObjToByte((Long[])_theArray); } else { HDFJavaException ex = new HDFJavaException("HDFArray: unknown type of Object?"); throw(ex); } } else { HDFJavaException ex = new HDFJavaException("HDFArray: unknown type of Object?"); throw(ex); } System.arraycopy(therow, 0, _barray, 0, (ArrayDescriptor.dimlen[1] * ArrayDescriptor.NTsize)); return _barray; } catch (OutOfMemoryError err) { HDFException ex = new HDFJavaException("HDFArray: byteify array too big?"); ex.printStackTrace(); throw(ex); } } } try { _barray = new byte[ArrayDescriptor.totalSize]; } catch (OutOfMemoryError err) { HDFException ex = new HDFJavaException("HDFArray: byteify array too big?"); ex.printStackTrace(); throw(ex); } Object oo = _theArray; int n = 0; /* the current byte */ int index = 0; int i; while (n < ArrayDescriptor.totalSize) { oo = ArrayDescriptor.objs[0]; index = n / ArrayDescriptor.bytetoindex[0]; index %= ArrayDescriptor.dimlen[0]; for (i = 0; i < (ArrayDescriptor.dims); i++) { index = n / ArrayDescriptor.bytetoindex[i]; index %= ArrayDescriptor.dimlen[i]; if (index == ArrayDescriptor.currentindex[i]) { /* then use cached copy */ oo = ArrayDescriptor.objs[i]; } else { /* check range of index */ if (index > (ArrayDescriptor.dimlen[i] - 1)) { throw new java.lang.IndexOutOfBoundsException("HDFArray: byteify index OOB?"); } oo = java.lang.reflect.Array.get(oo, index); ArrayDescriptor.currentindex[i] = index; ArrayDescriptor.objs[i] = oo; } } /* byte-ify */ byte arow[]; try { if (ArrayDescriptor.NT == 'J') { arow = HDFNativeData.longToByte(0, ArrayDescriptor.dimlen[ArrayDescriptor.dims], (long[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.NT == 'I') { arow = HDFNativeData.intToByte(0, ArrayDescriptor.dimlen[ArrayDescriptor.dims], (int[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.NT == 'S') { arow = HDFNativeData.shortToByte(0, ArrayDescriptor.dimlen[ArrayDescriptor.dims], (short[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.NT == 'B') { arow = (byte[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]; } else if (ArrayDescriptor.NT == 'F') { /* 32 bit float */ arow = HDFNativeData.floatToByte(0, ArrayDescriptor.dimlen[ArrayDescriptor.dims], (float[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.NT == 'D') { /* 64 bit float */ arow = HDFNativeData.doubleToByte(0, ArrayDescriptor.dimlen[ArrayDescriptor.dims], (double[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.NT == 'L') { if (ArrayDescriptor.className.equals("java.lang.Byte")) { arow = ByteObjToByte((Byte[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.className.equals("java.lang.Integer")) { arow = IntegerToByte((Integer[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.className.equals("java.lang.Short")) { arow = ShortToByte((Short[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.className.equals("java.lang.Float")) { arow = FloatObjToByte((Float[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.className.equals("java.lang.Double")) { arow = DoubleObjToByte((Double[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else if (ArrayDescriptor.className.equals("java.lang.Long")) { arow = LongObjToByte((Long[])ArrayDescriptor.objs[ArrayDescriptor.dims - 1]); } else { HDFJavaException ex = new HDFJavaException("HDFArray: byteify Object type not implemented?"); throw(ex); } } else { HDFJavaException ex = new HDFJavaException("HDFArray: byteify unknown type not implemented?"); throw(ex); } System.arraycopy(arow, 0, _barray, n, (ArrayDescriptor.dimlen[ArrayDescriptor.dims] * ArrayDescriptor.NTsize)); n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1]; } catch (OutOfMemoryError err) { HDFException ex = new HDFJavaException("HDFArray: byteify array too big?"); ex.printStackTrace(); throw(ex); } } /* assert: the whole array is completed--currentindex should == len - 1 */ /* error checks */ if (n < ArrayDescriptor.totalSize) { throw new java.lang.InternalError( new String("HDFArray::byteify: Panic didn't complete all input data: n= " + n + " size = " + ArrayDescriptor.totalSize)); } for (i = 0; i < ArrayDescriptor.dims; i++) { if (ArrayDescriptor.currentindex[i] != ArrayDescriptor.dimlen[i] - 1) { throw new java.lang.InternalError(new String("Panic didn't complete all data: currentindex[" + i + "] = " + ArrayDescriptor.currentindex[i] + " (should be " + (ArrayDescriptor.dimlen[i] - 1) + " ?)")); } } return _barray; } /** * Given a one-dimensional array of bytes representing numbers, convert it to a java array of the shape * and size passed to the constructor. * * @param bytes * The bytes to construct the Array. * @return * An Array (possibly multidimensional) of primitive or number objects. * @exception * hdf.hdflib.HDFJavaException the object not an array or other internal error. */ public Object arrayify(byte[] bytes) throws HDFJavaException { if (_theArray == null) { /* exception: not an array */ HDFJavaException ex = new HDFJavaException("arrayify: not an array?: "); throw(ex); } if (java.lang.reflect.Array.getLength(bytes) != ArrayDescriptor.totalSize) { /* exception: array not right size */ HDFJavaException ex = new HDFJavaException("arrayify: array is wrong size?: "); throw(ex); } _barray = bytes; /* hope that the bytes are correct.... */ if (ArrayDescriptor.dims == 1) { /* special case */ /* 2 data copies here! */ try { if (ArrayDescriptor.NT == 'I') { int[] x = HDFNativeData.byteToInt(_barray); System.arraycopy(x, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'S') { short[] x = HDFNativeData.byteToShort(_barray); System.arraycopy(x, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'F') { float x[] = HDFNativeData.byteToFloat(_barray); System.arraycopy(x, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'J') { long x[] = HDFNativeData.byteToLong(_barray); System.arraycopy(x, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'D') { double x[] = HDFNativeData.byteToDouble(_barray); System.arraycopy(x, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'B') { System.arraycopy(_barray, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.NT == 'L') { if (ArrayDescriptor.className.equals("java.lang.Byte")) { Byte I[] = ByteToByteObj(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.className.equals("java.lang.Integer")) { Integer I[] = ByteToInteger(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.className.equals("java.lang.Short")) { Short I[] = ByteToShort(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.className.equals("java.lang.Float")) { Float I[] = ByteToFloatObj(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.className.equals("java.lang.Double")) { Double I[] = ByteToDoubleObj(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else if (ArrayDescriptor.className.equals("java.lang.Long")) { Long I[] = ByteToLongObj(_barray); System.arraycopy(I, 0, _theArray, 0, ArrayDescriptor.dimlen[1]); return _theArray; } else { HDFJavaException ex = new HDFJavaException("arrayify: Object type not implemented yet..."); throw(ex); } } else { HDFJavaException ex = new HDFJavaException("arrayify: unknown type not implemented yet..."); throw(ex); } } catch (OutOfMemoryError err) { HDFJavaException ex = new HDFJavaException("HDFArray: arrayify array too big?"); ex.printStackTrace(); throw(ex); } } /* Assert dims >= 2 */ Object oo = _theArray; int n = 0; /* the current byte */ int m = 0; /* the current array index */ int index = 0; int i; Object flattenedArray = null; switch (ArrayDescriptor.NT) { case 'J': flattenedArray = (Object)HDFNativeData.byteToLong(_barray); break; case 'S': flattenedArray = (Object)HDFNativeData.byteToShort(_barray); break; case 'I': flattenedArray = (Object)HDFNativeData.byteToInt(_barray); break; case 'F': flattenedArray = (Object)HDFNativeData.byteToFloat(_barray); break; case 'D': flattenedArray = (Object)HDFNativeData.byteToDouble(_barray); break; case 'B': flattenedArray = (Object)_barray; break; case 'L': { if (ArrayDescriptor.className.equals("java.lang.Byte")) flattenedArray = (Object)ByteToByteObj(_barray); else if (ArrayDescriptor.className.equals("java.lang.Short")) flattenedArray = (Object)ByteToShort(_barray); else if (ArrayDescriptor.className.equals("java.lang.Integer")) flattenedArray = (Object)ByteToInteger(_barray); else if (ArrayDescriptor.className.equals("java.lang.Long")) flattenedArray = (Object)ByteToLongObj(_barray); else if (ArrayDescriptor.className.equals("java.lang.Float")) flattenedArray = (Object)ByteToFloatObj(_barray); else if (ArrayDescriptor.className.equals("java.lang.Double")) flattenedArray = (Object)ByteToDoubleObj(_barray); else { HDFJavaException ex = new HDFJavaException("HDFArray: unsupported Object type: " + ArrayDescriptor.NT); throw(ex); } } // end of statement for arrays of boxed objects default: HDFJavaException ex = new HDFJavaException("HDFArray: unknown or unsupported type: " + ArrayDescriptor.NT); throw(ex); } // end of switch statement for arrays of primitives while (n < ArrayDescriptor.totalSize) { oo = ArrayDescriptor.objs[0]; index = n / ArrayDescriptor.bytetoindex[0]; index %= ArrayDescriptor.dimlen[0]; for (i = 0; i < (ArrayDescriptor.dims); i++) { index = n / ArrayDescriptor.bytetoindex[i]; index %= ArrayDescriptor.dimlen[i]; if (index == ArrayDescriptor.currentindex[i]) { /* then use cached copy */ oo = ArrayDescriptor.objs[i]; } else { /* check range of index */ if (index > (ArrayDescriptor.dimlen[i] - 1)) { System.out.println("out of bounds?"); return null; } oo = java.lang.reflect.Array.get(oo, index); ArrayDescriptor.currentindex[i] = index; ArrayDescriptor.objs[i] = oo; } } /* array-ify */ try { Object arow = null; int mm = m + ArrayDescriptor.dimlen[ArrayDescriptor.dims]; switch (ArrayDescriptor.NT) { case 'B': arow = (Object)Arrays.copyOfRange((byte[])flattenedArray, m, mm); break; case 'S': arow = (Object)Arrays.copyOfRange((short[])flattenedArray, m, mm); break; case 'I': arow = (Object)Arrays.copyOfRange((int[])flattenedArray, m, mm); break; case 'J': arow = (Object)Arrays.copyOfRange((long[])flattenedArray, m, mm); break; case 'F': arow = (Object)Arrays.copyOfRange((float[])flattenedArray, m, mm); break; case 'D': arow = (Object)Arrays.copyOfRange((double[])flattenedArray, m, mm); break; case 'L': { if (ArrayDescriptor.className.equals("java.lang.Byte")) arow = (Object)Arrays.copyOfRange((Byte[])flattenedArray, m, mm); else if (ArrayDescriptor.className.equals("java.lang.Short")) arow = (Object)Arrays.copyOfRange((Short[])flattenedArray, m, mm); else if (ArrayDescriptor.className.equals("java.lang.Integer")) arow = (Object)Arrays.copyOfRange((Integer[])flattenedArray, m, mm); else if (ArrayDescriptor.className.equals("java.lang.Long")) arow = (Object)Arrays.copyOfRange((Long[])flattenedArray, m, mm); else if (ArrayDescriptor.className.equals("java.lang.Float")) arow = (Object)Arrays.copyOfRange((Float[])flattenedArray, m, mm); else if (ArrayDescriptor.className.equals("java.lang.Double")) arow = (Object)Arrays.copyOfRange((Double[])flattenedArray, m, mm); else { HDFJavaException ex = new HDFJavaException("HDFArray: unsupported Object type: " + ArrayDescriptor.NT); throw(ex); } } // end of statement for arrays of boxed numerics } // end of switch statement for arrays of primitives java.lang.reflect.Array.set(ArrayDescriptor.objs[ArrayDescriptor.dims - 2], (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]), arow); n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1]; ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++; m = mm; } catch (OutOfMemoryError err) { HDFJavaException ex = new HDFJavaException("HDFArray: arrayify array too big?"); ex.printStackTrace(); throw(ex); } } /* assert: the whole array is completed--currentindex should == len - 1 */ /* error checks */ if (n < ArrayDescriptor.totalSize) { throw new java.lang.InternalError( new String("HDFArray::arrayify Panic didn't complete all input data: n= " + n + " size = " + ArrayDescriptor.totalSize)); } for (i = 0; i <= ArrayDescriptor.dims - 2; i++) { if (ArrayDescriptor.currentindex[i] != ArrayDescriptor.dimlen[i] - 1) { throw new java.lang.InternalError( new String("HDFArray::arrayify Panic didn't complete all data: currentindex[" + i + "] = " + ArrayDescriptor.currentindex[i] + " (should be " + (ArrayDescriptor.dimlen[i] - 1) + "?")); } } if (ArrayDescriptor.NT != 'B') { if (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1] != ArrayDescriptor.dimlen[ArrayDescriptor.dims - 1]) { throw new java.lang.InternalError(new String( "HDFArray::arrayify Panic didn't complete all data: currentindex[" + i + "] = " + ArrayDescriptor.currentindex[i] + " (should be " + (ArrayDescriptor.dimlen[i]) + "?")); } } else { if (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1] != (ArrayDescriptor.dimlen[ArrayDescriptor.dims - 1] - 1)) { throw new java.lang.InternalError( new String("HDFArray::arrayify Panic didn't complete all data: currentindex[" + i + "] = " + ArrayDescriptor.currentindex[i] + " (should be " + (ArrayDescriptor.dimlen[i] - 1) + "?")); } } return _theArray; } private byte[] IntegerToByte(Integer in[]) { int nelems = java.lang.reflect.Array.getLength(in); int[] out = new int[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].intValue(); } return HDFNativeData.intToByte(0, nelems, out); } private Integer[] ByteToInteger(byte[] bin) { int in[] = HDFNativeData.byteToInt(bin); int nelems = java.lang.reflect.Array.getLength(in); Integer[] out = new Integer[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Integer.valueOf(in[i]); } return out; } private Integer[] ByteToInteger(int start, int len, byte[] bin) { int in[] = HDFNativeData.byteToInt(start, len, bin); int nelems = java.lang.reflect.Array.getLength(in); Integer[] out = new Integer[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Integer.valueOf(in[i]); } return out; } private byte[] ShortToByte(Short in[]) { int nelems = java.lang.reflect.Array.getLength(in); short[] out = new short[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].shortValue(); } return HDFNativeData.shortToByte(0, nelems, out); } private Short[] ByteToShort(byte[] bin) { short in[] = HDFNativeData.byteToShort(bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Short[] out = new Short[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Short.valueOf(in[i]); } return out; } private Short[] ByteToShort(int start, int len, byte[] bin) { short in[] = (short[])HDFNativeData.byteToShort(start, len, bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Short[] out = new Short[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Short.valueOf(in[i]); } return out; } private byte[] ByteObjToByte(Byte in[]) { int nelems = java.lang.reflect.Array.getLength((Object)in); byte[] out = new byte[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].byteValue(); } return out; } private Byte[] ByteToByteObj(byte[] bin) { int nelems = java.lang.reflect.Array.getLength((Object)bin); Byte[] out = new Byte[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Byte.valueOf(bin[i]); } return out; } private Byte[] ByteToByteObj(int start, int len, byte[] bin) { Byte[] out = new Byte[len]; for (int i = 0; i < len; i++) { out[i] = Byte.valueOf(bin[i]); } return out; } private byte[] FloatObjToByte(Float in[]) { int nelems = java.lang.reflect.Array.getLength((Object)in); float[] out = new float[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].floatValue(); } return HDFNativeData.floatToByte(0, nelems, out); } private Float[] ByteToFloatObj(byte[] bin) { float in[] = (float[])HDFNativeData.byteToFloat(bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Float[] out = new Float[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Float.valueOf(in[i]); } return out; } private Float[] ByteToFloatObj(int start, int len, byte[] bin) { float in[] = (float[])HDFNativeData.byteToFloat(start, len, bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Float[] out = new Float[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Float.valueOf(in[i]); } return out; } private byte[] DoubleObjToByte(Double in[]) { int nelems = java.lang.reflect.Array.getLength((Object)in); double[] out = new double[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].doubleValue(); } return HDFNativeData.doubleToByte(0, nelems, out); } private Double[] ByteToDoubleObj(byte[] bin) { double in[] = (double[])HDFNativeData.byteToDouble(bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Double[] out = new Double[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Double.valueOf(in[i]); } return out; } private Double[] ByteToDoubleObj(int start, int len, byte[] bin) { double in[] = (double[])HDFNativeData.byteToDouble(start, len, bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Double[] out = new Double[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Double.valueOf(in[i]); } return out; } private byte[] LongObjToByte(Long in[]) { int nelems = java.lang.reflect.Array.getLength((Object)in); long[] out = new long[nelems]; for (int i = 0; i < nelems; i++) { out[i] = in[i].longValue(); } return HDFNativeData.longToByte(0, nelems, out); } private Long[] ByteToLongObj(byte[] bin) { long in[] = (long[])HDFNativeData.byteToLong(bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Long[] out = new Long[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Long.valueOf(in[i]); } return out; } private Long[] ByteToLongObj(int start, int len, byte[] bin) { long in[] = (long[])HDFNativeData.byteToLong(start, len, bin); int nelems = java.lang.reflect.Array.getLength((Object)in); Long[] out = new Long[nelems]; for (int i = 0; i < nelems; i++) { out[i] = Long.valueOf(in[i]); } return out; } } /** * This private class is used by HDFArray to discover the shape and type of an arbitrary array. *

    * We use java.lang.reflection here. */ class ArrayDescriptor { static String theType = ""; static Class theClass = null; static int[] dimlen = null; static int[] dimstart = null; static int[] currentindex = null; static int[] bytetoindex = null; static int totalSize = 0; static int totalElements = 0; static Object[] objs = null; static char NT = ' '; /* must be B,S,I,L,F,D, else error */ static int NTsize = 0; static int dims = 0; static String className; public ArrayDescriptor(Object anArray) throws HDFJavaException { Class tc = anArray.getClass(); if (tc.isArray() == false) { /* exception: not an array */ HDFJavaException ex = new HDFJavaException("ArrayDescriptor: not an array?: "); throw(ex); } theClass = tc; /* * parse the type descriptor to discover the shape of the array */ String ss = tc.toString(); theType = ss; int n = 6; dims = 0; char c = ' '; while (n < ss.length()) { c = ss.charAt(n); n++; if (c == '[') { dims++; } } String css = ss.substring(ss.lastIndexOf('[') + 1); Class compC = tc.getComponentType(); String cs = compC.toString(); NT = c; /* must be B,S,I,L,F,D, else error */ if (NT == 'B') { NTsize = 1; } else if (NT == 'S') { NTsize = 2; } else if ((NT == 'I') || (NT == 'F')) { NTsize = 4; } else if ((NT == 'J') || (NT == 'D')) { NTsize = 8; } else if (css.startsWith("Ljava.lang.Byte")) { NT = 'L'; className = "java.lang.Byte"; NTsize = 1; } else if (css.startsWith("Ljava.lang.Short")) { NT = 'L'; className = "java.lang.Short"; NTsize = 2; } else if (css.startsWith("Ljava.lang.Integer")) { NT = 'L'; className = "java.lang.Integer"; NTsize = 4; } else if (css.startsWith("Ljava.lang.Float")) { NT = 'L'; className = "java.lang.Float"; NTsize = 4; } else if (css.startsWith("Ljava.lang.Double")) { NT = 'L'; className = "java.lang.Double"; NTsize = 8; } else if (css.startsWith("Ljava.lang.Long")) { NT = 'L'; className = "java.lang.Long"; NTsize = 8; } else if (css.startsWith("Ljava.lang.String")) { NT = 'L'; className = "java.lang.String"; NTsize = 1; throw new HDFJavaException( new String("ArrayDesciptor: Warning: String array not fully supported yet")); } else { /* * exception: not a numeric type */ throw new HDFJavaException( new String("ArrayDesciptor: Error: array is not numeric (type is " + css + ") ?")); } /* fill in the table */ dimlen = new int[dims + 1]; dimstart = new int[dims + 1]; currentindex = new int[dims + 1]; bytetoindex = new int[dims + 1]; objs = new Object[dims + 1]; Object o = anArray; objs[0] = o; dimlen[0] = 1; dimstart[0] = 0; currentindex[0] = 0; int elements = 1; int i; for (i = 1; i <= dims; i++) { dimlen[i] = java.lang.reflect.Array.getLength((Object)o); o = java.lang.reflect.Array.get((Object)o, 0); objs[i] = o; dimstart[i] = 0; currentindex[i] = 0; elements *= dimlen[i]; } totalElements = elements; int j; int dd; bytetoindex[dims] = NTsize; for (i = dims; i >= 0; i--) { dd = NTsize; for (j = i; j < dims; j++) { dd *= dimlen[j + 1]; } bytetoindex[i] = dd; } totalSize = bytetoindex[0]; } /** * Debug dump */ public void dumpInfo() { System.out.println("Type: " + theType); System.out.println("Class: " + theClass); System.out.println("NT: " + NT + " NTsize: " + NTsize); System.out.println("Array has " + dims + " dimensions (" + totalSize + " bytes, " + totalElements + " elements)"); int i; for (i = 0; i <= dims; i++) { Class tc = objs[i].getClass(); String ss = tc.toString(); System.out.println(i + ": start " + dimstart[i] + ": len " + dimlen[i] + " current " + currentindex[i] + " bytetoindex " + bytetoindex[i] + " object " + objs[i] + " otype " + ss); } } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFChunkInfo.java000066400000000000000000000037441503061704500216110ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This is a generic class to represent the HDF chunk_info union, which contains parameters for the * different chunking schemes. *

    * The variant parameters are expressed as sub-classes of this class. */ public class HDFChunkInfo { /** */ public int ctype; /** */ public int[] chunk_lengths = new int[HDFConstants.MAX_VAR_DIMS]; /** */ public int comp_type = HDFConstants.COMP_CODE_NONE; /** */ public HDFCompInfo cinfo = null; /** */ public HDFChunkInfo() { ctype = HDFConstants.HDF_NONE; } /** */ public HDFChunkInfo(int[] cl, int ct, HDFCompInfo ci) { if (ct == HDFConstants.COMP_CODE_NONE) { ctype = HDFConstants.HDF_CHUNK; } else { ctype = HDFConstants.HDF_COMP | HDFConstants.HDF_CHUNK; } chunk_lengths = cl; comp_type = ct; cinfo = ci; } /** */ public HDFChunkInfo(int[] cl) { ctype = HDFConstants.HDF_CHUNK; chunk_lengths = cl; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFCompInfo.java000066400000000000000000000024321503061704500214300ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF comp_info union. *

    * The parameters for different compression schemes are represented as sub-classes of this class */ public class HDFCompInfo { /** */ public int ctype; /** */ public HDFCompInfo() { ctype = HDFConstants.COMP_CODE_NONE; }; } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFConstants.java000066400000000000000000000457431503061704500217060ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This interface defines the values of constants defined by the HDF 4.2 API. */ public class HDFConstants { /** FAIL */ public static final int FAIL = -1; // file access code definitions /** */ public static final int DFACC_READ = 1; /** */ public static final int DFACC_WRITE = 2; /** */ public static final int DFACC_RDWR = 3; /** */ public static final int DFACC_CREATE = 4; /** */ public static final int DFACC_RDONLY = DFACC_READ; /** */ public static final int DFACC_DEFAULT = 000; /** */ public static final int DFACC_SERIAL = 001; /** */ public static final int DFACC_PARALLEL = 011; // annotation type in HDF /** */ public static final int AN_DATA_LABEL = 0; /** */ public static final int AN_DATA_DESC = AN_DATA_LABEL + 1; /** */ public static final int AN_FILE_LABEL = AN_DATA_LABEL + 2; /** */ public static final int AN_FILE_DESC = AN_DATA_LABEL + 3; // HDF Tag Definitions /** */ public static final int DFREF_WILDCARD = 0; /** */ public static final int DFTAG_WILDCARD = 0; /** used by mfhdf/libsrc/putget.c */ public static final int DFREF_NONE = 0; // tags and refs /** */ public static final int DFTAG_NULL = 1; /** linked-block special element */ public static final int DFTAG_LINKED = 20; /** */ public static final int DFTAG_VERSION = 30; /** compressed special element */ public static final int DFTAG_COMPRESSED = 40; /** variable-len linked-block header */ public static final int DFTAG_VLINKED = 50; /** variable-len linked-block data */ public static final int DFTAG_VLINKED_DATA = 51; /** chunked special element header */ public static final int DFTAG_CHUNKED = 60; /** chunk element */ public static final int DFTAG_CHUNK = 61; // utility set /** File identifier */ public static final int DFTAG_FID = 100; /** File description */ public static final int DFTAG_FD = 101; /** Tag identifier */ public static final int DFTAG_TID = 102; /** Tag descriptor */ public static final int DFTAG_TD = 103; /** data identifier label */ public static final int DFTAG_DIL = 104; /** data identifier annotation */ public static final int DFTAG_DIA = 105; /** number type */ public static final int DFTAG_NT = 106; /** machine type */ public static final int DFTAG_MT = 107; /** free space in the file */ public static final int DFTAG_FREE = 108; // raster-8 set /** 8-bit Image dimension */ public static final int DFTAG_ID8 = 200; /** 8-bit Image palette */ public static final int DFTAG_IP8 = 201; /** Raster-8 image */ public static final int DFTAG_RI8 = 202; /** RLE compressed 8-bit image */ public static final int DFTAG_CI8 = 203; /** IMCOMP compressed 8-bit image */ public static final int DFTAG_II8 = 204; // Raster Image set /** Image DimRec */ public static final int DFTAG_ID = 300; /** Image Palette */ public static final int DFTAG_LUT = 301; /** Raster Image */ public static final int DFTAG_RI = 302; /** Compressed Image */ public static final int DFTAG_CI = 303; /** New-format Raster Image */ public static final int DFTAG_NRI = 304; /** Raster Image Group */ public static final int DFTAG_RIG = 306; /** Palette DimRec */ public static final int DFTAG_LD = 307; /** Matte DimRec */ public static final int DFTAG_MD = 308; /** Matte Data */ public static final int DFTAG_MA = 309; /** color correction */ public static final int DFTAG_CCN = 310; /** color format */ public static final int DFTAG_CFM = 311; /** aspect ratio */ public static final int DFTAG_AR = 312; /** Draw these images in sequence */ public static final int DFTAG_DRAW = 400; /** run this as a program/script */ public static final int DFTAG_RUN = 401; /** x-y position */ public static final int DFTAG_XYP = 500; /** machine-type override */ public static final int DFTAG_MTO = 501; // Tektronix /** TEK 4014 data */ public static final int DFTAG_T14 = 602; /** TEK 4105 data */ public static final int DFTAG_T105 = 603; // Scientific Data set // Objects of tag 721 are never actually written to the file. The tag is // needed to make things easier mixing DFSD and SD style objects in the // same file /** Scientific Data Group */ public static final int DFTAG_SDG = 700; /** Scientific Data DimRec */ public static final int DFTAG_SDD = 701; /** Scientific Data */ public static final int DFTAG_SD = 702; /** Scales */ public static final int DFTAG_SDS = 703; /** Labels */ public static final int DFTAG_SDL = 704; /** Units */ public static final int DFTAG_SDU = 705; /** Formats */ public static final int DFTAG_SDF = 706; /** Max/Min */ public static final int DFTAG_SDM = 707; /** Coord sys */ public static final int DFTAG_SDC = 708; /** Transpose */ public static final int DFTAG_SDT = 709; /** Links related to the dataset */ public static final int DFTAG_SDLNK = 710; /** Numeric Data Group */ public static final int DFTAG_NDG = 720; /** Calibration information */ public static final int DFTAG_CAL = 731; /** Fill Value information */ public static final int DFTAG_FV = 732; /** Beginning of required tags */ public static final int DFTAG_BREQ = 799; /** List of ragged array line lengths */ public static final int DFTAG_SDRAG = 781; /** Current end of the range */ public static final int DFTAG_EREQ = 780; // VSets /** Vgroup */ public static final int DFTAG_VG = 1965; /** Vdata Header */ public static final int DFTAG_VH = 1962; /** Vdata Storage */ public static final int DFTAG_VS = 1963; // compression schemes /** run length encoding */ public static final int DFTAG_RLE = 11; /** IMCOMP compression alias */ public static final int DFTAG_IMC = 12; /** IMCOMP compression */ public static final int DFTAG_IMCOMP = 12; /** JPEG compression (24-bit data) */ public static final int DFTAG_JPEG = 13; /** JPEG compression (8-bit data) */ public static final int DFTAG_GREYJPEG = 14; /** JPEG compression (24-bit data) */ public static final int DFTAG_JPEG5 = 15; /** JPEG compression (8-bit data) */ public static final int DFTAG_GREYJPEG5 = 16; /** pixel interlacing scheme */ public static final int MFGR_INTERLACE_PIXEL = 0; /** line interlacing scheme */ public static final int MFGR_INTERLACE_LINE = MFGR_INTERLACE_PIXEL + 1; /** component interlacing scheme */ public static final int MFGR_INTERLACE_COMPONENT = MFGR_INTERLACE_PIXEL + 2; /** interlacing supported by the vset. */ public static final int FULL_INTERLACE = 0; /** */ public static final int NO_INTERLACE = 1; /** unsigned char */ public static final int DFNT_UCHAR8 = 3; /** */ public static final int DFNT_UCHAR = 3; /** char */ public static final int DFNT_CHAR8 = 4; /** */ public static final int DFNT_CHAR = 4; /** Not supported by HDF */ public static final int DFNT_CHAR16 = 42; /** */ public static final int DFNT_UCHAR16 = 43; /** float */ public static final int DFNT_FLOAT32 = 5; /** */ public static final int DFNT_FLOAT = 5; /** double */ public static final int DFNT_FLOAT64 = 6; /** */ public static final int DFNT_FLOAT128 = 7; /** */ public static final int DFNT_DOUBLE = 6; /** 8-bit integer */ public static final int DFNT_INT8 = 20; /** unsigned 8-bit integer */ public static final int DFNT_UINT8 = 21; /** short */ public static final int DFNT_INT16 = 22; /** unsigned integer */ public static final int DFNT_UINT16 = 23; /** integer */ public static final int DFNT_INT32 = 24; /** unsigned integer */ public static final int DFNT_UINT32 = 25; /** Not supported */ public static final int DFNT_INT64 = 26; /** */ public static final int DFNT_UINT64 = 27; /** */ public static final int DFNT_INT128 = 28; /** */ public static final int DFNT_UINT128 = 30; /** */ public static final int DFNT_HDF = 0x00000000; /** */ public static final int DFNT_NATIVE = 0x00001000; /** */ public static final int DFNT_CUSTOM = 0x00002000; /** */ public static final int DFNT_LITEND = 0x00004000; /** */ public static final int DFNT_MASK = 0x00000fff; /** */ public static final int DF_FORWARD = 1; /** */ public static final int DFS_MAXLEN = 255; /** */ public static final int COMP_NONE = 0; /** */ public static final int COMP_JPEG = 2; /** */ public static final int COMP_RLE = 11; /** */ public static final int COMP_IMCOMP = 12; /** */ public static final int COMP_CODE_NONE = 0; /** */ public static final int COMP_CODE_RLE = 1; /** */ public static final int COMP_CODE_NBIT = 2; /** */ public static final int COMP_CODE_SKPHUFF = 3; /** */ public static final int COMP_CODE_DEFLATE = 4; /** */ public static final int COMP_CODE_SZIP = 5; /** */ public static final int COMP_CODE_INVALID = 6; /** */ public static final int COMP_CODE_JPEG = 7; // Interlace schemes /** Pixel Interlacing */ public static final int DFIL_PIXEL = 0; /** Scan Line Interlacing */ public static final int DFIL_LINE = 1; /** Scan Plane Interlacing */ public static final int DFIL_PLANE = 2; /** */ public static final int SD_UNLIMITED = 0; /** */ public static final int SD_FILL = 0; /** */ public static final int SD_NOFILL = 0x100; /** */ public static final int SD_DIMVAL_BW_COMP = 1; /** */ public static final int SD_DIMVAL_BW_INCOMP = 0; /** */ public static final int HDF_NONE = 0x0; /** */ public static final int HDF_CHUNK = 0x1; /** */ public static final int HDF_COMP = 0x3; /** */ public static final int HDF_NBIT = 0x5; /** */ public static final int MAX_VAR_DIMS = 32; // the names of the Vgroups created by the GR interface /** */ public static final String GR_NAME = "RIG0.0"; /** */ public static final String RI_NAME = "RI0.0"; /** */ public static final String RIGATTRNAME = "RIATTR0.0N"; /** */ public static final String RIGATTRCLASS = "RIATTR0.0C"; // names of classes of the Vdatas/Vgroups created by the SD interface /** */ public static final String HDF_ATTRIBUTE = "Attr0.0"; /** */ public static final String HDF_VARIABLE = "Var0.0"; /** */ public static final String HDF_DIMENSION = "Dim0.0"; /** */ public static final String HDF_UDIMENSION = "UDim0.0"; /** */ public static final String DIM_VALS = "DimVal0.0"; /** */ public static final String DIM_VALS01 = "DimVal0.1"; /** */ public static final String HDF_CHK_TBL = "_HDF_CHK_TBL_"; /** */ public static final String HDF_SDSVAR = "SDSVar"; /** */ public static final String HDF_CRDVAR = "CoordVar"; public static final String HDF_CDF = "CDF0.0"; // names of data object types /** */ public static final String ANNOTATION = "HDF_ANNOTATION"; /** */ public static final String RI8 = "HDF_RI8"; /** */ public static final String RI24 = "HDF_RI24"; /** */ public static final String GR = "HDF_GR"; /** */ public static final String SDS = "HDF_SDS"; /** */ public static final String VDATA = "HDF_VDATA"; /** */ public static final String VGROUP = "HDF_GROUP"; // data types represented by Strings /** */ public static final String UCHAR8 = "UCHAR8"; /** */ public static final String CHAR8 = "CHAR8"; /** */ public static final String UCHAR16 = "UCHAR16"; /** */ public static final String CHAR16 = "CHAR16"; /** */ public static final String FLOAT32 = "FLOAT32"; /** */ public static final String FLOAT64 = "FLOAT64"; /** */ public static final String FLOAT128 = "FLOAT128"; /** */ public static final String INT8 = "INT8"; /** */ public static final String UINT8 = "UINT8"; /** */ public static final String INT16 = "INT16"; /** */ public static final String UINT16 = "UINT16"; /** */ public static final String INT32 = "INT32"; /** */ public static final String UINT32 = "UINT32"; /** */ public static final String INT64 = "INT64"; /** */ public static final String UINT64 = "UINT64"; /** */ public static final String INT128 = "INT128"; /** */ public static final String UINT128 = "UINT128"; /** * convert number type to string type * * @param type * the number representing the data type * @return the string representing the data type */ public static String getType(int type) { if (type == HDFConstants.DFNT_UCHAR8) { return HDFConstants.UCHAR8; } else if (type == HDFConstants.DFNT_CHAR8) { return HDFConstants.CHAR8; } else if (type == HDFConstants.DFNT_UCHAR16) { return HDFConstants.UCHAR16; } else if (type == HDFConstants.DFNT_CHAR16) { return HDFConstants.CHAR16; } else if (type == HDFConstants.DFNT_FLOAT32) { return HDFConstants.FLOAT32; } else if (type == HDFConstants.DFNT_FLOAT64) { return HDFConstants.FLOAT64; } else if (type == HDFConstants.DFNT_FLOAT128) { return HDFConstants.FLOAT128; } else if (type == HDFConstants.DFNT_INT8) { return HDFConstants.INT8; } else if (type == HDFConstants.DFNT_UINT8) { return HDFConstants.UINT8; } else if (type == HDFConstants.DFNT_INT16) { return HDFConstants.INT16; } else if (type == HDFConstants.DFNT_UINT16) { return HDFConstants.UINT16; } else if (type == HDFConstants.DFNT_INT32) { return HDFConstants.INT32; } else if (type == HDFConstants.DFNT_UINT32) { return HDFConstants.UINT32; } else if (type == HDFConstants.DFNT_INT64) { return HDFConstants.INT64; } else if (type == HDFConstants.DFNT_UINT64) { return HDFConstants.UINT64; } else if (type == HDFConstants.DFNT_INT128) { return HDFConstants.INT128; } else if (type == HDFConstants.DFNT_UINT128) { return HDFConstants.UINT128; } else { return "Undefined Data Type"; } } /** * convert string type to number type * * @param type * the string representing the data type * @return the integer representing the data type */ public static int getType(String type) { if (type.equalsIgnoreCase(HDFConstants.UCHAR8)) { return HDFConstants.DFNT_UCHAR8; } else if (type.equalsIgnoreCase(HDFConstants.CHAR8)) { return HDFConstants.DFNT_CHAR8; } else if (type.equalsIgnoreCase(HDFConstants.UCHAR16)) { return HDFConstants.DFNT_UCHAR16; } else if (type.equalsIgnoreCase(HDFConstants.CHAR16)) { return HDFConstants.DFNT_CHAR16; } else if (type.equalsIgnoreCase(HDFConstants.FLOAT32)) { return HDFConstants.DFNT_FLOAT32; } else if (type.equalsIgnoreCase(HDFConstants.FLOAT64)) { return HDFConstants.DFNT_FLOAT64; } else if (type.equalsIgnoreCase(HDFConstants.FLOAT128)) { return HDFConstants.DFNT_FLOAT128; } else if (type.equalsIgnoreCase(HDFConstants.INT8)) { return HDFConstants.DFNT_INT8; } else if (type.equalsIgnoreCase(HDFConstants.UINT8)) { return HDFConstants.DFNT_UINT8; } else if (type.equalsIgnoreCase(HDFConstants.INT16)) { return HDFConstants.DFNT_INT16; } else if (type.equalsIgnoreCase(HDFConstants.UINT16)) { return HDFConstants.DFNT_UINT16; } else if (type.equalsIgnoreCase(HDFConstants.INT32)) { return HDFConstants.DFNT_INT32; } else if (type.equalsIgnoreCase(HDFConstants.UINT32)) { return HDFConstants.DFNT_UINT32; } else if (type.equalsIgnoreCase(HDFConstants.INT64)) { return HDFConstants.DFNT_INT64; } else if (type.equalsIgnoreCase(HDFConstants.UINT64)) { return HDFConstants.DFNT_UINT64; } else if (type.equalsIgnoreCase(HDFConstants.INT128)) { return HDFConstants.DFNT_INT128; } else if (type.equalsIgnoreCase(HDFConstants.UINT128)) { return HDFConstants.DFNT_UINT128; } else { return -1; } } /** * gets the size of the data type in bytes, e.g size of DFNT_FLOAT32 = 4 * * @param type * the number representing the data type * @return the size of the data type */ public static int getTypeSize(int type) { int size = 0; switch (type) { case HDFConstants.DFNT_UCHAR16: case HDFConstants.DFNT_CHAR16: case HDFConstants.DFNT_INT16: case HDFConstants.DFNT_UINT16: size = 2; break; case HDFConstants.DFNT_FLOAT32: case HDFConstants.DFNT_INT32: case HDFConstants.DFNT_UINT32: size = 4; break; case HDFConstants.DFNT_FLOAT64: case HDFConstants.DFNT_INT64: case HDFConstants.DFNT_UINT64: size = 8; break; case HDFConstants.DFNT_FLOAT128: case HDFConstants.DFNT_INT128: case HDFConstants.DFNT_UINT128: size = 16; break; default: size = 1; break; } return size; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFDeflateCompInfo.java000066400000000000000000000026631503061704500227230ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF DEFLATION compression algorithm. *

    * In this case, the only parameter is the ``level'' of deflation. */ public class HDFDeflateCompInfo extends HDFNewCompInfo { /** */ public int level; /** */ public HDFDeflateCompInfo() { ctype = HDFConstants.COMP_CODE_DEFLATE; } /** */ public HDFDeflateCompInfo(int l) { ctype = HDFConstants.COMP_CODE_DEFLATE; level = l; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFException.java000066400000000000000000000056671503061704500216710ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * The class HDFException returns errors from the HDF library. *

    * Two sub-classes of HDFException are defined: *

      *
    1. HDFLibraryException -- errors raised the HDF library code *
    2. HDFJavaException -- errors raised the HDF Java wrapper code *
    *

    * These exceptions are sub-classed to represent specific error conditions, as needed. *

    * The only specific exception currently defined is HDFNotImplementedException, indicating a * function that is part of the HDF API, but which cannot or will not be implemented for Java. */ public class HDFException extends RuntimeException { static public final String OutOfMemoryMessage = "ERROR: HDF Library: Out of memory"; static public final String HDFExceptionMessage = "ERROR: HDF Library Error"; static public final String HDFMessage = "ERROR: Unknown HDF Error"; /** * the specified error number of this exception */ protected int HDFerror; /** * the specified detail message of this exception */ protected String detailMessage; public HDFException() { super(); HDFerror = 0; detailMessage = null; } /** * Constructs an HDFException with the specified detail * message. * * @param message * the detail message. */ public HDFException(String message) { super(); detailMessage = message; } /** * Constructs an HDFException with the specified error number. * * @param err * the error number. */ public HDFException(int err) { super(); HDFerror = err; detailMessage = null; } /** * Returns the detail message of this exception * * @return the detail message or null if this object does not * have a detail message. */ @Override public String getMessage() { return detailMessage; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFIMCOMPCompInfo.java000066400000000000000000000024031503061704500223330ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF ``Image compression'' compression class. *

    * In this case, no auxiliary information is needed. */ public class HDFIMCOMPCompInfo extends HDFOldCompInfo { /** */ public HDFIMCOMPCompInfo() { ctype = HDFConstants.COMP_IMCOMP; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFJPEGCompInfo.java000066400000000000000000000036641503061704500221060ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF JPEG compression class. *

    * In this case, the parameters are the quality and baseline. */ public class HDFJPEGCompInfo extends HDFOldCompInfo { /* Struct to contain information about how to compress */ /* or decompress a JPEG encoded 24-bit image */ /** Quality factor for JPEG compression, should be from 0 (terrible) to 100 (very good) */ public int quality; /** If force_baseline is set to TRUE then quantization tables are limited to 0..255 for JPEG baseline compatibility This is only an issue for quality settings below 24 */ public int force_baseline; /**/ /** */ public HDFJPEGCompInfo() { ctype = HDFConstants.COMP_JPEG; } /** */ public HDFJPEGCompInfo(int qual, int fb) { ctype = HDFConstants.COMP_JPEG; quality = qual; force_baseline = fb; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFJavaException.java000066400000000000000000000031031503061704500224520ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * The class HDFJavaException returns errors from the Java wrapper of theHDF library. *

    * These errors include Java configuration errors, security violations, and resource exhaustion. */ public class HDFJavaException extends HDFException { /** * Constructs an HDFJavaException with no specified detail * message. */ public HDFJavaException() { super(); } /** * Constructs an HDFJavaException with the specified detail * message. * * @param s * the detail message. */ public HDFJavaException(String s) { super(s); } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFLibrary.java000066400000000000000000003766101503061704500213360ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This is the Java interface for the HDF 4.2 library. *

    * This code is the called by Java programs to access the entry points of the HDF 4.2 library. Each * routine wraps a single HDF entry point, generally with the arguments and return codes analogous * to the C interface. *


    *

    * These routines use the class HDFArray to handle arrays * of arbitrary type and shape. *


    *

    * Mapping of arguments for Java * *

    * In general, arguments to the HDF Java API are straightforward translations from the 'C' API * described in the HDF Reference Manual. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    C types to Java types
    CJava
    int, intn, int32, uint32int
    short, uint16, int16short
    float, float32float
    double, float64double
    char, uchar, int8, uint8byte
    char * (i.e., string)java.lang.String
    voidvoid
    void *, void *, char * (meaning ``any'')Special -- see HDFArray
    * General Rules for Passing Arguments and Results *

    * In general, arguments passed IN to Java are the analogous basic types, as above. The * exception is for arrays, which are discussed below. *

    * The return value of Java methods is also the analogous type, as above. A major exception * to that rule is that all HDF functions that return SUCCEED/FAIL are declared boolean in * the Java version, rather than intn or whatever. (Functions that return a value or else * FAIL are declared the equivalent to the C function.) *

    * Java does not support pass by reference of arguments, so arguments that are returned through * OUT parameters must be wrapped in an object or array. The Java API for HDF consistently * wraps arguments in arrays. *

    * For instance, a function that returns two integers is declared: * *

     *       void HDFdummy( int32* a1, int32* a2)
     * 
    * * For the Java interface, this would be declared: * *
     * public static native void HDFdummy(int args[]);
     * 
    * * where a1 is args[0] and a2 is args[1]. *

    * All the routines where this convention is used will have specific documentation of the details, * given below. *

    * Arrays *

    * HDF needs to read and write multi-dimensional arrays of many types. The HDF API is * self-describing, with the data for the array passed as a block of bytes, for instance, * *

     *      int SDreaddata(int sdsid, int32 *start, int32 * stride,
     *             int32 *count, void * data);
     * 
    *

    * The data parameter may be any valid numeric type, and is a contiguous block of * bytes that is the data for a multi-dimensional array. *

    * For Java, this is a problem, as the type of data must be declared. Furthermore, multidimensional * arrays are definitely not laid out contiguously in memory. It would be infeasible to * declare a separate routine for every combination of number type and dimensionality. For that * reason, the HDFArray class is used to discover the type, shape, and size of the data array * at run time, and to convert to and from contiguous bytes. The upshot is that the data can be * passed as an ``Object'', and the Java API will translate to and from the appropriate bytes. So * the function above would be declared: * *

     * int SDreaddata(int sdsid, int[] start, int[] stride, int[] count, Object data);
     * 
    * * and the parameter data can be any multi-dimensional array of numbers, such as float[][], * or int[][][]. Compression and Chunk Information *

    * The HDF library passes the parameters needed by compression and chunking through C structures * (actually, unions). The Java interface passes these as instances of subclasses of class * HDFCompInfo and HDFChunkInfo respectively. * *

    * See: hdf.hdflib.HDFChunkInfo, and *

    * hdf.hdflib.HDFCompInfo. *


    */ public class HDFLibrary implements java.io.Serializable { /** * */ private static final long serialVersionUID = -1695429510319126910L; private final static Logger log = LoggerFactory.getLogger(HDFLibrary.class); private final static String JHI_VERSION = "4.3.1"; public final static String HDFPATH_PROPERTY_KEY = "hdf.hdflib.HDFLibrary.hdflib"; // add system property to load library by name from library path, via // System.loadLibrary() public final static String H4_LIBRARY_NAME_PROPERTY_KEY = "hdf.hdflib.HDFLibrary.loadLibraryName"; private static String s_libraryName; private static boolean isLibraryLoaded = false; static { loadH4Lib(); } public static void loadH4Lib() { if (isLibraryLoaded) // load only once return; // first try loading library by name from user supplied library path s_libraryName = System.getProperty(H4_LIBRARY_NAME_PROPERTY_KEY, null); String mappedName = null; if ((s_libraryName != null) && (s_libraryName.length() > 0)) { try { mappedName = System.mapLibraryName(s_libraryName); System.loadLibrary(s_libraryName); isLibraryLoaded = true; } catch (Throwable err) { err.printStackTrace(); isLibraryLoaded = false; } finally { log.info("HDF4 library: " + s_libraryName); log.debug(" resolved to: " + mappedName + "; "); log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded from system property"); } } if (!isLibraryLoaded) { // else try loading library via full path String filename = System.getProperty(HDFPATH_PROPERTY_KEY, null); if ((filename != null) && (filename.length() > 0)) { File h4dll = new File(filename); if (h4dll.exists() && h4dll.canRead() && h4dll.isFile()) { try { System.load(filename); isLibraryLoaded = true; } catch (Throwable err) { isLibraryLoaded = false; } finally { log.info("HDF4 library: "); log.debug(filename); log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded."); } } else { isLibraryLoaded = false; throw(new UnsatisfiedLinkError("Invalid HDF4 library, " + filename)); } } } // else load standard library if (!isLibraryLoaded) { mappedName = null; s_libraryName = "hdf_java"; try { mappedName = System.mapLibraryName(s_libraryName); System.loadLibrary("hdf_java"); isLibraryLoaded = true; } catch (Throwable err) { isLibraryLoaded = false; } finally { log.info("HDF4 library: " + s_libraryName); log.debug(" resolved to: " + mappedName + "; "); log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded from java.library.path"); } } try { HDFLibrary.HDdont_atexit(); } catch (HDFException e) { System.exit(1); } /* Important! Exit quietly */ } @Deprecated public static final String getJHIVersion() { return JHI_VERSION; } public static long Hopen(String filename) throws HDFException { return Hopen(filename, HDFConstants.DFACC_RDONLY, 0); } public static long Hopen(String filename, int access) throws HDFException { return Hopen(filename, access, 0); } public static native long Hopen(String filename, int access, int ndds) throws HDFException; public static native boolean Hclose(long fid) throws HDFException; public static native int HDdont_atexit() throws HDFException; public static native boolean Hishdf(String fileName) throws HDFException; public static int Hnumber(long fid) throws HDFException { return Hnumber(fid, HDFConstants.DFTAG_WILDCARD); } public static native int Hnumber(long fid, int tagtype) throws HDFException; public static native int DFKNTsize(long numbertype) throws HDFException; public static native String HDgetNTdesc(int nt) throws HDFException; public static native boolean Hcache(long file_id, int cache_switch) throws HDFException; /* * not yet implemented public static native boolean Hflushdd(long file_id) throws HDFException; */ /** * * Note: the version of an HDF file is not well defined, it is not recommended that programs * rely on these numbers. *

    * * @param file_id * IN: long, the file descriptor returned by Hopen * @param vers * OUT: int[3], the major version, minor version, and release number of the file. * @param string * OUT: String[1], the version string * * @exception hdf.hdflib.HDFException * thrown for errors in the HDF library call. * * @return the major, minor, and release number are returned in the array of ints, and a string is * returned in the string. */ public static native boolean Hgetfileversion(long file_id, int[] vers, String[] string) throws HDFException; /** * @param vers * OUT: int[3], the major version, minor version, and release number of the HDF * library. * @param string * OUT: String[1], the version string * * @return the major, minor, and release number are returned in the array of ints, and a string is * returned in the string. * * @exception hdf.hdflib.HDFException * thrown for errors in the HDF library call. */ public static native boolean Hgetlibversion(int[] vers, String[] string) throws HDFException; public static native boolean Hsetaccesstype(long h_id, int access_type) throws HDFException; public static native boolean Hsync(long file_id) throws HDFException; public static native int ANstart(long fid) throws HDFException; public static native boolean ANend(long an_id) throws HDFException; public static native boolean ANendaccess(long an_id) throws HDFException; /** * @param an_id * IN: the AN interface id, returned by ANstart * @param info * OUT: int[4], n_file_label, n_file_desc, n_data_label, n_data_desc * * @return four integer parameters: info[0] = n_file_label, info[1] = n_file_desc, info[2] = * n_data_label, info[3] = n_data_desc * * @exception hdf.hdflib.HDFException * should be thrown for errors. */ public static native boolean ANfileinfo(long an_id, int[] info) throws HDFException; public static native int ANselect(long an_id, int index, int anntype) throws HDFException; public static native int ANnumann(long an_id, int anntype, short tag, short ref) throws HDFException; public static native short ANatype2tag(int antag) throws HDFException; public static native int ANtag2atype(short anttype) throws HDFException; /** * @param an_id * IN: the AN interface id, returned by ANstart * @param anntype * IN: the number type, as defined in HDFConstants * @param tag * IN: the HDF tag * @param ref * IN: the HDF ref * @param ann_list * OUT: int[], an array of annotation identifiers. The array must be long enough * to hold the number of annotations returned by ANnumann * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return an array of integers, which are the identifiers of the annotations */ public static native int ANannlist(long an_id, int anntype, short tag, short ref, int[] ann_list) throws HDFException; public static native int ANannlen(long ann_id) throws HDFException; /** * @param ann_id * IN: the AN interface id, returned by ANstart * @param annbuf * OUT: String[1], the annotation is returned as annbuf[0]. * @param maxlen * IN: int, the maximum length of the string. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return an annotation string: annbuf[0] = the annotation */ public static native boolean ANreadann(long ann_id, String[] annbuf, int maxlen) throws HDFException; public static native int ANcreate(long an_id, short tag, short ref, int type) throws HDFException; public static native int ANcreatef(long an_id, int type) throws HDFException; /** * @param an_id * IN: the AN interface id, returned by ANstart * @param index * IN: the index of the annotation * @param type * IN: the type of the annotation * @param tagref * OUT: short[2], the tag and ref of the annotation * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the tag and ref: tagref[0] = tag, tagref[1] = ref */ public static native int ANget_tagref(long an_id, int index, int type, short[] tagref) throws HDFException; /** * @param an_id * IN: the AN interface id, returned by ANstart * @param tagref * OUT: short[2], the tag and ref of the annotation * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the tag and ref: tagref[0] = tag, tagref[1] = ref */ public static native boolean ANid2tagref(long an_id, short[] tagref) throws HDFException; public static native long ANtagref2id(long an_id, short tag, short ref) throws HDFException; public static native boolean ANwriteann(long ann_id, String label, int ann_length) throws HDFException; public static native boolean DFPaddpal(String filename, byte[] palette) throws HDFException; public static native boolean DFPgetpal(String filename, byte[] palette) throws HDFException; public static native short DFPlastref() throws HDFException; public static native int DFPnpals(String filename) throws HDFException; public static native boolean DFPputpal(String filename, byte[] palette, int overwrite, String filemode) throws HDFException; /** * @param filename * IN: String, the name of the HDF file * @param palette * IN: byte[] the palette * @param overwrite * IN: boolean, converted to 1 == true, 0 == false to call the HDF library * @param filemode * IN: if "a" append palette to file, "w" create new file * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return true on success */ public static boolean DFPputpal(String filename, byte[] palette, boolean overwrite, String filemode) throws HDFException { if (overwrite) { return DFPputpal(filename, palette, 1, filemode); } else { return DFPputpal(filename, palette, 0, filemode); } } public static native boolean DFPreadref(String filename, short ref) throws HDFException; public static native short DFPrestart() throws HDFException; public static native boolean DFPwriteref(String filename, short ref) throws HDFException; public static native int GRstart(long fid) throws HDFException; public static native boolean GRend(long grid) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param args * OUT: int[2], n_datasets and n_file_attrs * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the file info: args[0] = n_datasets, args[1] = n_file_attrs */ public static native boolean GRfileinfo(long grid, int[] args) throws HDFException; /** * @param sdsid * IN: the SD identifier returned by SDselect * @param chunk_def * OUT: HDFChunkInfo, the chunking info * @param flag * OUT: int[1], the type of chunking * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return c_info contains information about the chunking method, flags[0] == the chunking flags * *

    * NOTE:The chunking algorithm-specific information is passed in an appropriate * sub-class of HDFChunkInfo. */ public static native boolean GRgetchunkinfo(long sdsid, HDFChunkInfo chunk_def, int[] flag) throws HDFException; public static native int GRselect(long grid, int index) throws HDFException; public static native int GRnametoindex(long grid, String name) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param gr_name * OUT: name of raster image * @param args * OUT: int[4], image info: number of components in the image, data type of the * image data, interlace mode of the stored image data, number of attributes assigned to * the image * @param dim_sizes * OUT: int[2], dim_sizes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * * @return the file info: String[0] = gr_name, args[0] = ncomp, args[1] = data_type, args[2] = * interlace, args[3] = num_attrs * *

    * NOTE: the parameters for the Java interface are not in the same order as the C * interface. */ public static native boolean GRgetiminfo(long grid, String[] gr_name, int[] args, int[] dim_sizes) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param start * IN: int[2], start * @param stride * IN: int[2], stride. If the stride parameter is set to NULL, a stride of 1 will * be assumed. strides of 0 are illegal. * @param count * IN: int[2], count * @param data * OUT: byte[], data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the form of a continuous array of bytes. * *

    * NOTE: to read into a Java 2D array use the alternative routine below. */ public static native boolean GRreadimage(long grid, int[] start, int[] stride, int[] count, byte[] data) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param start * IN: int[2], start * @param stride * IN: int[2], stride. If the stride parameter is set to NULL, a stride of 1 will * be assumed. strides of 0 are illegal. * @param count * IN: int[2], count * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array. * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean GRreadimage(long grid, int[] start, int[] stride, int[] count, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = GRreadimage(grid, start, stride, count, data); theData = theArray.arrayify(data); return rval; } public static native boolean GRendaccess(long riid) throws HDFException; /* * "[Later]" public static native int GRgetdimid(long riid, int index) throws HDFException; */ /* * "[Later]" public static native boolean GRdiminfo(long dimid, char[] name, int[] diminfo[]) throws * HDFException; */ public static native short GRidtoref(long riid) throws HDFException; public static native int GRreftoindex(long grid, short ref) throws HDFException; public static native boolean GRreqlutil(long riid, int interlace) throws HDFException; public static native boolean GRreqimageil(long rrid, int interlace) throws HDFException; public static native int GRgetlutid(long rrid, int index) throws HDFException; public static native int GRgetnluts(long rrid) throws HDFException; /** * @param lutid * IN: the palette identifier returned by GRgetlutid * @param args * OUT: int[4], palette info: Number of components in the palette, Data type of * the palette data, Interlace mode of the stored palette data, Number of color lookup * table entries in the palette. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the palette info: args[0] = ncomp, args[1] = data_type, args[2] = interlace, args[3] = * num_entries * */ public static native boolean GRgetlutinfo(long lutid, int[] args) throws HDFException; /** * @param lutid * IN: the palette identifier returned by GRgetlutid * @param data * OUT: byte[], palette data, in bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the palette data: as bytes * *

    * NOTE: to read into a Java 1D array use the alternative routine below. */ public static native boolean GRreadlut(long lutid, byte[] data) throws HDFException; /** * @param lutid * IN: the palette identifier returned by GRgetlutid * @param theData * OUT: Object, palette data, an Java array * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the palette data: as a Java array * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean GRreadlut(long lutid, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = GRreadlut(lutid, data); theData = theArray.arrayify(data); return rval; } /** * @param id * IN: the GR identifier returned by GRstart * @param index * IN: the index of the attribute * @param name * OUT: String[1], the name of the attribute * @param argv * OUT: int[2], the type and length of the attribute * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the name, type, and length of the attribute: name[0] = name, argv[0] = data_type, argv[1] * = length */ public static native boolean GRattrinfo(long id, int index, String[] name, int[] argv) throws HDFException; /** * @param id * IN: the GR identifier returned by GRstart * @param index * IN: index of the attribute for info * @param data * OUT: byte[], attribute data, in bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the attribute data: as bytes * *

    * NOTE: to read into a Java 1D array use the alternative routine below. */ public static native boolean GRgetattr(long id, int index, byte[] data) throws HDFException; /** * @param id * IN: the GR identifier returned by GRstart * @param index * IN: index of the attribute for info * @param theData * OUT: Object, attribute data, an Java array * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the attribute data: as a Java array * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean GRgetattr(long id, int index, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = GRgetattr(id, index, data); theData = theArray.arrayify(data); return rval; } public static native int GRfindattr(long id, String name) throws HDFException; public static native int GRcreate(long gr_id, String name, int ncomp, long data_type, int interlace_mode, int[] dim_sizes) throws HDFException; public static native short GRluttoref(long pal_id) throws HDFException; /** * @param gr_id * IN: the GR identifier returned by GRstart * @param attr_name * IN: the name of the attribute * @param data_type * IN: the number type of the data (should be DFNT_CHAR) * @param count * IN: the length the data (length of 'values') * @param values * IN: the the attribute to write -- A String * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:This routine writes a attribute that is a String. Alternative methods * write data of other types. * * @return true on success */ public static native boolean GRsetattr(long gr_id, String attr_name, long data_type, int count, String values) throws HDFException; /** * @param gr_id * IN: the GR identifier returned by GRstart * @param attr_name * IN: the name of the attribute * @param data_type * IN: the number type of the data * @param count * IN: the length the data (length of 'values') * @param values * IN: the the attribute to write -- in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:This routine writes the attribute as an array of bytes. DO NOT USE * THIS TO WRITE A STRING. This is intended for numeric data that has been * flattened into bytes. * * @return true on success */ public static native boolean GRsetattr(long gr_id, String attr_name, long data_type, int count, byte[] values) throws HDFException; /** * @param gr_id * IN: the GR identifier returned by GRstart * @param attr_name * IN: the name of the attribute * @param data_type * IN: the number type of the data * @param count * IN: the length the data (length of 'values') * @param theData * IN: Object -- the value to be written, a Java array of numbers. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:This routine converts the Java array to bytes then writes it. DO * NOT USE THIS TO WRITE A STRING. * * @return true on success */ public static boolean GRsetattr(long gr_id, String attr_name, long data_type, int count, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return GRsetattr(gr_id, attr_name, data_type, count, data); } /** * @param sdsid * IN: the SD identifier returned by SDselect * @param chunk_def * IN: HDFChunkInfo, the chunking info * @param flags * IN: the type of chunking * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:The chunking algorithm-specific information is passed in an * appropriate sub-class of HDFChunkInfo. * * @return true on success */ public static native boolean GRsetchunk(long sdsid, HDFChunkInfo chunk_def, int flags) throws HDFException; public static native int GRsetchunkcache(long sdsid, int maxcache, int flags) throws HDFException; /** * @param ri_id * IN: the GR identifier returned by GRstart * @param comp_type * IN: the type of compression * @param c_info * IN: HDFCompInfo, the compression info * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:The compression algorithm specific information is passed in an * appropriate sub-class of HDFCompInfo. * * @return true on success */ public static native boolean GRsetcompress(long ri_id, int comp_type, HDFCompInfo c_info) throws HDFException; public static native boolean GRgetcompress(long ri_id, HDFCompInfo c_info) throws HDFException; public static native boolean GRgetcompinfo(long ri_id, HDFCompInfo c_info) throws HDFException; public static native boolean GRsetexternalfile(long ri_id, String filename, int offset) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param start * IN: int[2], start * @param stride * IN: int[2], stride. If the stride parameter is set to NULL, a stride of 1 will * be assumed. strides of 0 are illegal. * @param edge * IN: int[2], count * @param data * IN: byte[], data to be written * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to write from a Java 2D array use the alternative routine below. * * @return true on success */ public static native boolean GRwriteimage(long grid, int[] start, int[] stride, int[] edge, byte[] data) throws HDFException; /** * @param grid * IN: the GR interface id, returned by GRstart * @param start * IN: int[2], start * @param stride * IN: int[2], stride. If the stride parameter is set to NULL, a stride of 1 will * be assumed. strides of 0 are illegal. * @param edge * IN: int[2], count * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts the Java array to a contiguous block of bytes appropriate * for C, and then writes the bytes. * * @return true on success */ public static boolean GRwriteimage(long grid, int[] start, int[] stride, int[] edge, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return GRwriteimage(grid, start, stride, edge, data); } /** * @param pal_id * IN: the palette identifier returned by GRgetlutid * @param ncomp * IN: int, number of components * @param data_type * IN: int, number type * @param interlace * IN: int, interlace * @param num_entries * IN: int, number of entries * @param pal_data * IN: byte[], palette data to be written--as bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * *

    * NOTE: to write from a Java array of numbers use the alternative routine * below. * * @return true on success */ public static native boolean GRwritelut(long pal_id, int ncomp, int data_type, int interlace, int num_entries, byte[] pal_data) throws HDFException; /** * @param pal_id * IN: the palette identifier returned by GRgetlutid * @param ncomp * IN: int, number of components * @param data_type * IN: int, number type * @param interlace * IN: int, interlace * @param num_entries * IN: int, number of entries * @param theData * IN: Object, palette data to be written, any number type. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * *

    * Note: converts the Java array to a contiguous block of bytes appropriate * for C, and then writes the bytes. * * @return true on success */ public static boolean GRwritelut(long pal_id, int ncomp, int data_type, int interlace, int num_entries, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return GRwritelut(pal_id, ncomp, data_type, interlace, num_entries, data); } /** * @param sdsid * IN: the GR interface id, returned by SDselect * @param origin * IN: int[], origin * @param theData * OUT: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return true on success */ public static native boolean GRreadchunk(long sdsid, int[] origin, byte[] theData) throws HDFException; /** * @param grid * IN: the GR interface id, returned by SDselect * @param origin * IN: int[], origin * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return true on success */ public static boolean GRreadchunk(long grid, int[] origin, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = GRreadchunk(grid, origin, data); theData = theArray.arrayify(data); return rval; } public static native boolean HDFclose(long file_id) throws HDFException; public static native long HDFopen(String filename, int access, short n_dds) throws HDFException; public static native short HEvalue(int level) throws HDFException; public static native String HEstring(int error_code) throws HDFException; public static native void HEprint(Object stream, int level) throws HDFException; public static native boolean HXsetcreatedir(String dir) throws HDFException; public static native boolean HXsetdir(String dir) throws HDFException; public static native long SDstart(String filename, int accessmode) throws HDFException; public static native boolean SDend(long sdid) throws HDFException; /** * @param sdid * IN: the SD interface id, returned by SDstart * @param argv * OUT: int[2], Number of datasets in the file, Number of global attributes in the * file * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the file info: argv[0] = n_datasets, argv[1] = n_file_attrs */ public static native boolean SDfileinfo(long sdid, int[] argv) throws HDFException; public static native long SDselect(long sdid, int index) throws HDFException; public static native int SDnametoindex(long sdid, String name) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param name * OUT: String[1], the name of the dataset * @param args * OUT: int[3], dataset info: number of dimensions (rank), data type for the data * stored in the dataset, number of "netCDF-style" attributes for this dataset * @param dimsizes * OUT: int[(rank)], sizes of dimensions * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the file info: name[0] = gr_name, args[0] = rank, args[1] = data_type, args[2] = nattrs, * dim_sizes[] = dimensions * *

    * NOTE: the parameters for the Java interface are not in the same order as the C * interface. */ public static native boolean SDgetinfo(long sdsid, String[] name, int[] dimsizes, int[] args) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param emptySDS * OUT: int[1], 1 if the SDS is empty, 0 if has data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return true on success */ public static native boolean SDcheckempty(long sdsid, int[] emptySDS) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param start * IN: int[], start * @param stride * IN: int[], stride * @param count * IN: int[], count * @param data * OUT: byte[], data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the form of a continuous array of bytes. * *

    * NOTE: to read into a Java array use the alternative routine below. */ public static native boolean SDreaddata(long sdsid, int[] start, int[] stride, int[] count, byte[] data) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param start * IN: int[], start * @param stride * IN: int[], stride * @param count * IN: int[], count * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array. * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean SDreaddata(long sdsid, int[] start, int[] stride, int[] count, Object theData) throws HDFException { boolean status = false; boolean is1D = false; Class dataClass = theData.getClass(); if (!dataClass.isArray()) { throw(new HDFJavaException("SDreaddata: data is not an array")); } String cname = dataClass.getName(); is1D = (cname.lastIndexOf('[') == cname.indexOf('[')); char dname = cname.charAt(cname.lastIndexOf("[") + 1); if (is1D && (dname == 'B')) { status = SDreaddata(sdsid, start, stride, count, (byte[])theData); } else if (is1D && (dname == 'S')) { status = SDreaddata_short(sdsid, start, stride, count, (short[])theData); } else if (is1D && (dname == 'I')) { status = SDreaddata_int(sdsid, start, stride, count, (int[])theData); } else if (is1D && (dname == 'J')) { status = SDreaddata_long(sdsid, start, stride, count, (long[])theData); } else if (is1D && (dname == 'F')) { status = SDreaddata_float(sdsid, start, stride, count, (float[])theData); } else if (is1D && (dname == 'D')) { status = SDreaddata_double(sdsid, start, stride, count, (double[])theData); } else { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); status = SDreaddata(sdsid, start, stride, count, data); theData = theArray.arrayify(data); } return status; } //////////////////////////////////////////////////////////////////// // // // New APIs for read data from library // // Using SDreaddata(..., Object buf) requires function calls // // theArray.emptyBytes() and theArray.arrayify( buf), which // // triples the actual memory needed by the data set. // // Using the following APIs solves the problem. // // // //////////////////////////////////////////////////////////////////// public static native boolean SDreaddata_short(long sdsid, int[] start, int[] stride, int[] count, short[] theData) throws HDFException; public static native boolean SDreaddata_int(long sdsid, int[] start, int[] stride, int[] count, int[] theData) throws HDFException; public static native boolean SDreaddata_long(long sdsid, int[] start, int[] stride, int[] count, long[] theData) throws HDFException; public static native boolean SDreaddata_float(long sdsid, int[] start, int[] stride, int[] count, float[] theData) throws HDFException; public static native boolean SDreaddata_double(long sdsid, int[] start, int[] stride, int[] count, double[] theData) throws HDFException; public static native boolean SDendaccess(long sdsid) throws HDFException; public static native long SDgetdimid(long sdsid, int index) throws HDFException; /** * @param dimid * IN: the dimension id, returned by SDgetdimid * @param name * OUT: String[1], the dimension name * @param argv * OUT: int[3], size of the name string, number type of data in the array, # * attributes for the dimension * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return name[0] = name, argv[0] = count, argv[1] = data_type, argv[2] = nattr */ public static native boolean SDdiminfo(long dimid, String[] name, int[] argv) throws HDFException; public static native int SDidtoref(long sdsid) throws HDFException; public static native int SDreftoindex(long sdid, int ref) throws HDFException; /** * @param id * IN: id of a file, SDS, or dimension * @param index * IN: index of the attribute * @param name * OUT: String[1], the name of the attribute * @param argv * OUT: int[2], number type of the attribute, number of values in the attribute * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return name[0] = attr_name, argv[0] = data_type, argv[1] = count */ public static native boolean SDattrinfo(long id, int index, String[] name, int[] argv) throws HDFException; /** * @param id * IN: id of a file, SDS, or dimension * @param index * IN: index of the attribute * @param data * OUT: byte[], data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the form of a continuous array of bytes. * *

    * NOTE: to read into a Java array use the alternative routine below. */ public static native boolean SDreadattr(long id, int index, byte[] data) throws HDFException; /** * @param id * IN: id of a file, SDS, or dimension * @param index * IN: index of the attribute * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array. * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean SDreadattr(long id, int index, Object theData) throws HDFException { byte[] data; boolean rval; Class theClass = theData.getClass(); String name = theClass.getName(); if (name.equals("java.lang.String")) { data = ((String)theData).getBytes(); rval = SDreadattr(id, index, data); theData = new String(data); } else { HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = SDreadattr(id, index, data); theData = theArray.arrayify(data); } return rval; } public static native long SDfindattr(long id, String name) throws HDFException; public static native boolean SDiscoordvar(long sdsid) throws HDFException; /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param argv * OUT: double[4], calibration information: calibration factor calibration error * offset offset error * @param NT * OUT: int[1], number type of uncalibrated data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return argv[0] = cal, argv[1] = cal_err, argv[2] = offset, argv[3] = offset_err, NT[0] = * data_type */ public static native boolean SDgetcal(long sdsid, double[] argv, int[] NT) throws HDFException; /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param strings * OUT: String[4], data information strings: label unit print format coordinate * system * @param len * IN: int, max len of string (not needed by Java -- the HDFLibrary interface will * handle this) * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return strings[0] = label, strings[1] = unit, strings[2] = format, strings[3] = coordsys, */ public static native boolean SDgetdatastrs(long sdsid, String[] strings, int len) throws HDFException; /** * @param dimid * IN: id of the SDS as returned by SDselect * @param args * OUT: String[3], data information strings: label unit print format * @param len * IN: int, max len of string (not needed by Java -- the HDFLibrary interface will * handle this) * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return strings[0] = label, strings[1] = unit, strings[2] = format */ public static native boolean SDgetdimstrs(long dimid, String[] args, int len) throws HDFException; /** * @param dimid * IN: id of a dimension as returned by SDgetdimid * @param data * OUT: byte[], data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the form of a continuous array of bytes. * *

    * NOTE: to read into a Java array use the alternative routine below. */ public static native boolean SDgetdimscale(long dimid, byte[] data) throws HDFException; /** * @param dimid * IN: id of a dimension as returned by SDgetdimid * @param theData * OUT: Object, a Java array of appropriate type and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array. * *

    * Note: reads the data as bytes and converts to the Java array. */ public static boolean SDgetdimscale(long dimid, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = SDgetdimscale(dimid, data); theData = theArray.arrayify(data); return rval; } /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param fillValue * OUT: byte[], data * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the fill value in the form of a continuous array of bytes. * *

    * NOTE: to read into a Java variable use the alternative routine below. */ public static native boolean SDgetfillvalue(long sdsid, byte[] fillValue) throws HDFException; /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param theFillValue * OUT: Object[1], one object of appropriate type * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array: theFillValue[0] = fillValue * *

    * Note: the routine calls SDgetinfo to determine the correct type, reads the data as * bytes, and converts to the appropriate Java object. */ public static boolean SDgetfillvalue(long sdsid, Object[] theFillValue) throws HDFException { int[] SDInfo = new int[3]; int NT; String datasetname = new String(" "); String ss[] = new String[1]; ss[0] = datasetname; int dimsize[] = new int[16]; SDgetinfo(sdsid, ss, dimsize, SDInfo); datasetname = ss[0]; byte[] d1 = new byte[8]; boolean rval; rval = SDgetfillvalue(sdsid, d1); if (rval == false) { return (rval); } NT = SDInfo[1]; if ((NT & HDFConstants.DFNT_LITEND) != 0) { NT -= HDFConstants.DFNT_LITEND; } if ((NT == HDFConstants.DFNT_INT8) || (NT == HDFConstants.DFNT_CHAR8) || (NT == HDFConstants.DFNT_CHAR)) { theFillValue[0] = Byte.valueOf(d1[0]); } else if ((NT == HDFConstants.DFNT_UINT8) || (NT == HDFConstants.DFNT_UCHAR8) || (NT == HDFConstants.DFNT_UCHAR8)) { Byte f = Byte.valueOf(d1[0]); if (f.shortValue() < 0) { theFillValue[0] = Short.valueOf((short)(f.intValue() + 256)); } else { theFillValue[0] = Short.valueOf(f.shortValue()); } } else if ((NT == HDFConstants.DFNT_INT16) || (NT == HDFConstants.DFNT_CHAR16)) { short[] fx = HDFNativeData.byteToShort(0, 1, d1); theFillValue[0] = Short.valueOf(fx[0]); } else if ((NT == HDFConstants.DFNT_UINT16) || (NT == HDFConstants.DFNT_UCHAR16)) { short[] fmx = HDFNativeData.byteToShort(0, 1, d1); Short f = Short.valueOf(fmx[0]); if (f.intValue() < 0) { theFillValue[0] = Integer.valueOf(f.intValue() + 65536); } else { theFillValue[0] = Integer.valueOf(f.intValue()); } } else if ((NT == HDFConstants.DFNT_INT32)) { int[] fx = HDFNativeData.byteToInt(0, 1, d1); theFillValue[0] = Integer.valueOf(fx[0]); } else if ((NT == HDFConstants.DFNT_UINT32)) { int[] fmx = HDFNativeData.byteToInt(0, 1, d1); Integer i = Integer.valueOf(fmx[0]); if (i.floatValue() < 0) { theFillValue[0] = Float.valueOf((float)(i.floatValue() + 4294967296.0)); } else { theFillValue[0] = Float.valueOf(i.floatValue()); } } else if (NT == HDFConstants.DFNT_FLOAT32) { float[] fx = HDFNativeData.byteToFloat(0, 1, d1); theFillValue[0] = Float.valueOf(fx[0]); } else if (NT == HDFConstants.DFNT_FLOAT64) { double[] fx = HDFNativeData.byteToDouble(0, 1, d1); theFillValue[0] = Double.valueOf(fx[0]); } else { System.out.println("Error: SDgetfillvalue not converting, type " + NT); } return rval; } /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param max * OUT: byte[], max value, as bytes * @param min * OUT: byte[], min value, as bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the max and min values in the form of a continuous array of bytes. * *

    * NOTE: to read into Java doubles, use the alternative routine below. */ public static native boolean SDgetrange(long sdsid, byte[] max, byte[] min) throws HDFException; /** * @param sdsid * IN: id of the SDS as returned by SDselect * @param maxmin * OUT: double[2], the max and min values converted to doubles * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return the the data in the Java array: maxmin[0] = max, maxmin[1] = min * *

    * Note: the routine calls SDgetinfo to determine the correct type, reads the data as * bytes, and converts to the double. */ public static boolean SDgetrange(long sdsid, double maxmin[]) throws HDFException { int[] SDInfo = new int[3]; int NT; String datasetname = new String(" "); String ss[] = new String[1]; ss[0] = datasetname; int dimsize[] = new int[16]; SDgetinfo(sdsid, ss, dimsize, SDInfo); datasetname = ss[0]; byte[] max = new byte[8]; byte[] min = new byte[8]; boolean rval; rval = SDgetrange(sdsid, max, min); if (rval == false) { return (rval); } NT = SDInfo[1]; if ((NT & HDFConstants.DFNT_LITEND) != 0) { NT -= HDFConstants.DFNT_LITEND; } if ((NT == HDFConstants.DFNT_INT8) || (NT == HDFConstants.DFNT_CHAR8) || (NT == HDFConstants.DFNT_CHAR)) { Byte f = Byte.valueOf(max[0]); maxmin[0] = (f.doubleValue()); f = Byte.valueOf(min[0]); maxmin[1] = (f.doubleValue()); } else if ((NT == HDFConstants.DFNT_UINT8) || (NT == HDFConstants.DFNT_UCHAR8) || (NT == HDFConstants.DFNT_UCHAR8)) { Byte f = Byte.valueOf(max[0]); Short fmx; if (f.shortValue() < 0) { fmx = Short.valueOf((short)(f.intValue() + 256)); } else { fmx = Short.valueOf(f.shortValue()); } maxmin[0] = (fmx.doubleValue()); f = Byte.valueOf(min[0]); fmx = Short.valueOf(f.shortValue()); maxmin[1] = (fmx.doubleValue()); } else if ((NT == HDFConstants.DFNT_INT16) || (NT == HDFConstants.DFNT_CHAR16)) { short[] fmx = HDFNativeData.byteToShort(0, 1, max); short[] fmn = HDFNativeData.byteToShort(0, 1, min); Short f = Short.valueOf(fmx[0]); maxmin[0] = (f.doubleValue()); f = Short.valueOf(fmn[0]); maxmin[1] = (f.doubleValue()); } else if ((NT == HDFConstants.DFNT_UINT16) || (NT == HDFConstants.DFNT_UINT16)) { short[] fmx = HDFNativeData.byteToShort(0, 1, max); Short f = Short.valueOf(fmx[0]); Integer i; if (f.intValue() < 0) { i = Integer.valueOf(f.intValue() + 65536); } else { i = Integer.valueOf(f.intValue()); } maxmin[0] = (i.doubleValue()); fmx = HDFNativeData.byteToShort(0, 1, min); f = Short.valueOf(fmx[0]); if (f.intValue() < 0) { i = Integer.valueOf(f.intValue() + 65536); } else { i = Integer.valueOf(f.intValue()); } maxmin[1] = (i.doubleValue()); } else if ((NT == HDFConstants.DFNT_INT32)) { int[] fmx = HDFNativeData.byteToInt(0, 1, max); int[] fmn = HDFNativeData.byteToInt(0, 1, min); Integer f = Integer.valueOf(fmx[0]); maxmin[0] = (f.doubleValue()); f = Integer.valueOf(fmn[0]); maxmin[1] = (f.doubleValue()); } else if ((NT == HDFConstants.DFNT_UINT32)) { int[] fmx = HDFNativeData.byteToInt(0, 1, max); Integer i = Integer.valueOf(fmx[0]); Float f; if (i.floatValue() < 0) { f = Float.valueOf((float)(i.floatValue() + 4294967296.0)); } else { f = Float.valueOf(i.floatValue()); } maxmin[0] = (f.doubleValue()); fmx = HDFNativeData.byteToInt(0, 1, max); i = Integer.valueOf(fmx[0]); if (i.floatValue() < 0) { f = Float.valueOf((float)(i.floatValue() + 4294967296.0)); } else { f = Float.valueOf(i.floatValue()); } maxmin[1] = (f.doubleValue()); } else if (NT == HDFConstants.DFNT_FLOAT32) { float[] fmx = HDFNativeData.byteToFloat(0, 1, max); float[] fmn = HDFNativeData.byteToFloat(0, 1, min); Float f = Float.valueOf(fmx[0]); maxmin[0] = (f.doubleValue()); f = Float.valueOf(fmn[0]); maxmin[1] = (f.doubleValue()); } else if (NT == HDFConstants.DFNT_FLOAT64) { double[] fmx = HDFNativeData.byteToDouble(0, 1, max); double[] fmn = HDFNativeData.byteToDouble(0, 1, min); Double f = Double.valueOf(fmx[0]); maxmin[0] = (f.doubleValue()); f = Double.valueOf(fmn[0]); maxmin[1] = (f.doubleValue()); } else { System.out.println("Error: SDgetrange not converting, type " + NT); } return rval; } public static native long SDcreate(long sd_id, String name, long number_type, int rank, int[] dimsizes) throws HDFException; public static native boolean SDisrecord(long sdsid) throws HDFException; public static native boolean SDsetattr(long s_id, String attr_name, long num_type, int count, byte[] values) throws HDFException; public static boolean SDsetattr(long s_id, String attr_name, long num_type, int count, Object theValues) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theValues); data = theArray.byteify(); return SDsetattr(s_id, attr_name, num_type, count, data); } public static native boolean SDsetcal(long sds_id, double cal, double cal_err, double offset, double offset_err, int number_type) throws HDFException; public static native boolean SDsetdatastrs(long sds_id, String label, String unit, String format, String coordsys) throws HDFException; public static native boolean SDsetdimname(long dim_id, String dim_name) throws HDFException; /** * @param dim_id * IN: id of a dimension * @param count * IN: number of values * @param number_type * IN: number type of the values * @param data * IN: byte[], the values, in an array of bytes. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: the calling program must assure that the data is correctly formatted * for C. To write an array of Java objects, use the alternative routine below. * * @return true on success */ public static native boolean SDsetdimscale(long dim_id, int count, int number_type, byte[] data) throws HDFException; /** * @param dim_id * IN: id of a dimension * @param count * IN: number of values * @param number_type * IN: number type of the values * @param theData * OUT: Object, a Java array of appropriate type and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts the Java array to an array of bytes, and writes the bytes. * * @return true on success */ public static boolean SDsetdimscale(long dim_id, int count, int number_type, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return SDsetdimscale(dim_id, count, number_type, data); } public static native boolean SDsetdimstrs(long dim_id, String label, String unit, String format) throws HDFException; public static native boolean SDsetexternalfile(long sds_id, String filename, int offset) throws HDFException; /** * @param sds_id * IN: id of a dataset * @param fill_val * IN: byte[], the fill values in an array of bytes. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: the calling program must assure that the data is correctly formatted * for C. To set the fill value with a Java object, use the alternative routine * below. * * @return true on success */ public static native boolean SDsetfillvalue(long sds_id, byte[] fill_val) throws HDFException; /** * @param sds_id * IN: id of a dataset * @param the_fill_val * IN: Object, a Java object of appropriate type * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts the Java array to an array of bytes, and writes the bytes. * * @return true on success */ public static boolean SDsetfillvalue(long sds_id, Object the_fill_val) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(the_fill_val); data = theArray.byteify(); return SDsetfillvalue(sds_id, data); } /** * @param sdsid * IN: id of a dataset * @param max * IN: byte[], the max value in an array of bytes * @param min * IN: byte[], the min value in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: the calling program must assure that the data is correctly formatted * for C. To set the max and min value with Java objects, use the alternative routine * below. * * @return true on success */ public static native boolean SDsetrange(long sdsid, byte[] max, byte[] min) throws HDFException; /** * @param sdsid * IN: id of a dataset * @param max * IN: Object, a Java object of appropriate type * @param min * IN: Object, a Java object of appropriate type * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts the Java array to an array of bytes, and writes the bytes. * * @return true on success */ public static boolean SDsetrange(long sdsid, Object max, Object min) throws HDFException { byte[] d1; byte[] d2; HDFArray theArray1 = new HDFArray(max); d1 = theArray1.byteify(); HDFArray theArray2 = new HDFArray(min); d2 = theArray2.byteify(); return SDgetrange(sdsid, d1, d2); } /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param start * IN: int[], start * @param stride * IN: int[], stride * @param count * IN: int[], count * @param data * IN: byte[], data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean SDwritedata(long sdsid, int[] start, int[] stride, int[] count, byte[] data) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param start * IN: int[], start * @param stride * IN: int[], stride * @param count * IN: int[], count * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts to the Java array to a contiguous array of bytes and then * writes to the file. * * @return true on success */ public static boolean SDwritedata(long sdsid, int[] start, int[] stride, int[] count, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return SDwritedata(sdsid, start, stride, count, data); } public static native boolean SDsetnbitdataset(long id, int start_bit, int bit_len, int sign_ext, int fill_one) throws HDFException; /** * @param id * IN: the SD identifier returned by SDselect * @param type * IN: the type of compression * @param cinfo * IN: HDFCompInfo, the compression info * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:The compression algorithm specific information is passed in an * appropriate sub-class of HDFCompInfo. * * @return true on success */ public static native boolean SDsetcompress(long id, int type, HDFCompInfo cinfo) throws HDFException; /** * @param id * IN: the SD identifier returned by SDselect * @param cinfo * IN: HDFCompInfo, the compression info * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:The compression algorithm specific information is passed in an * appropriate sub-class of HDFCompInfo. * * @return true on success */ public static native boolean SDgetcompinfo(long id, HDFCompInfo cinfo) throws HDFException; public static native boolean SDsetaccesstype(long id, int accesstype) throws HDFException; public static native boolean SDsetblocksize(long sdsid, int block_size) throws HDFException; /** * @param sdsid * IN: the SD id * @param fill_enable * IN: boolean, true calls library with SD_FILL, false calls library with * SD_NOFILL * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return true on success */ public static boolean SDsetfillmode(long sdsid, boolean fill_enable) throws HDFException { int fm; if (fill_enable) { fm = HDFConstants.SD_FILL; } else { fm = HDFConstants.SD_NOFILL; } return SDsetfillmode(sdsid, fm); } public static native boolean SDsetfillmode(long sdsid, int fillmode) throws HDFException; public static native boolean SDsetdimval_comp(long dimid, int comp_mode) throws HDFException; public static native boolean SDisdimval_bwcomp(long dimid) throws HDFException; /** * @param sdsid * IN: the SD identifier returned by SDselect * @param chunk_def * IN: HDFChunkInfo, the chunking info * @param flags * IN: the type of chunking * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE:The chunking algorithm-specific information is passed in an * appropriate sub-class of HDFChunkInfo. * * @return true on success */ public static native boolean SDsetchunk(long sdsid, HDFChunkInfo chunk_def, int flags) throws HDFException; /** * @param sdsid * IN: the SD identifier returned by SDselect * @param chunk_def * OUT: HDFChunkInfo, the chunking info * @param clflags * OUT: int[1], the type of chunking * * @exception hdf.hdflib.HDFException * should be thrown for errors. * * @return c_info contains information about the chunking method, clflags[0] == the chunking flags * *

    * NOTE:The chunking algorithm-specific information is passed in an appropriate * sub-class of HDFChunkInfo. */ public static native boolean SDgetchunkinfo(long sdsid, HDFChunkInfo chunk_def, int[] clflags) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param origin * IN: int[], origin * @param theData * OUT: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return true on success */ public static native boolean SDreadchunk(long sdsid, int[] origin, byte[] theData) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param origin * IN: int[], origin * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return true on success */ public static boolean SDreadchunk(long sdsid, int[] origin, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = SDreadchunk(sdsid, origin, data); theData = theArray.arrayify(data); return rval; } public static native int SDsetchunkcache(long sdsid, int maxcache, int flags) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param origin * IN: int[], origin * @param data * IN: byte[], data to be written, in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean SDwritechunk(long sdsid, int[] origin, byte[] data) throws HDFException; /** * @param sdsid * IN: the SD interface id, returned by SDselect * @param origin * IN: int[], origin * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts to the Java array to a contiguous array of bytes and then * writes to the file. * * @return true on success */ public static boolean SDwritechunk(long sdsid, int[] origin, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return SDwritechunk(sdsid, origin, data); } public static native int VFfieldesize(long vdata_id, int field_index) throws HDFException; public static native int VFfieldisize(long vdata_id, int field_index) throws HDFException; public static native String VFfieldname(long vdata_id, int field_index) throws HDFException; public static native int VFfieldorder(long vdata_id, int field_index) throws HDFException; public static native long VFfieldtype(long vdata_id, int field_index) throws HDFException; public static native int VFnfields(long vkey) throws HDFException; public static native int VHmakegroup(long file_id, int[] tag_array, int[] ref_array, int n_objects, String vgroup_name, String vgroup_class) throws HDFException; /** * @param file_id * IN: the SD interface id, returned by SDselect * @param fieldname * IN: String, the name of the field to be filled * @param buf * IN: byte[], data to be written, in an array of bytes * @param n_records * IN: int, the number of records being written * @param data_type * IN: int, the number type of the data * @param vdata_name * IN: String, the name of the Vdata * @param vdata_class * IN: String, the class of the Vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return negative on failure */ public static native int VHstoredata(long file_id, String fieldname, byte[] buf, int n_records, int data_type, String vdata_name, String vdata_class) throws HDFException; /** * @param file_id * IN: the SD interface id, returned by SDselect * @param fieldname * IN: String, the name of the field to be filled * @param thebuf * IN: Object, data to be written, in a Java array of appropriate type and size * @param n_records * IN: int, the number of records being written * @param data_type * IN: int, the number type of the data * @param vdata_name * IN: String, the name of the Vdata * @param vdata_class * IN: String, the class of the Vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts to the Java array to a contiguous array of bytes and then * writes to the file. * * @return negative on failure */ public static int VHstoredata(long file_id, String fieldname, Object thebuf, int n_records, int data_type, String vdata_name, String vdata_class) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(thebuf); data = theArray.byteify(); return VHstoredata(file_id, fieldname, data, n_records, data_type, vdata_name, vdata_class); } /** * @param file_id * IN: the SD interface id, returned by SDselect * @param fieldname * IN: String, the name of the field to be filled * @param buf * IN: byte[], data to be written, in an array of bytes * @param n_records * IN: int, the number of records being written * @param data_type * IN: int, the number type of the data * @param vdata_name * IN: String, the name of the Vdata * @param vdata_class * IN: String, the class of the Vdata * @param order * IN: int, the number of components per field * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return negative on failure */ public static native int VHstoredatam(long file_id, String fieldname, byte[] buf, int n_records, int data_type, String vdata_name, String vdata_class, int order) throws HDFException; /** * @param file_id * IN: the SD interface id, returned by SDselect * @param fieldname * IN: String, the name of the field to be filled * @param buf * IN: Object, data to be written, in a Java array of appropriate type, dimension, * and size * @param n_records * IN: int, the number of records being written * @param data_type * IN: int, the number type of the data * @param vdata_name * IN: String, the name of the Vdata * @param vdata_class * IN: String, the class of the Vdata * @param order * IN: int, the number of components per field * * @exception hdf.hdflib.HDFException * should be thrown for errors. * *

    * Note: converts to the Java array to a contiguous array of bytes and then * writes to the file. * * @return negative on failure */ public static int VHstoredatam(long file_id, String fieldname, Object buf, int n_records, int data_type, String vdata_name, String vdata_class, int order) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(buf); data = theArray.byteify(); return VHstoredatam(file_id, fieldname, data, n_records, data_type, vdata_name, vdata_class, order); } public static native int VQueryref(long vkey) throws HDFException; public static native int VQuerytag(long vkey) throws HDFException; public static native boolean Vstart(long fid) throws HDFException; public static native int Vattach(long fid, int vgroup_ref, String access) throws HDFException; public static native void Vdetach(long vgroup_id) throws HDFException; public static native void Vend(long file_id) throws HDFException; public static native int Vgetid(long file_id, int vgroup_ref) throws HDFException; /** * @param vgroup_id * IN: the Vgroup id * @param hdfclassname * OUT: String[1], the HDF class of the vgroup. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. */ public static native void Vgetclass(long vgroup_id, String[] hdfclassname) throws HDFException; /** * @param vgroup_id * IN: the Vgroup id * @param hdfname * OUT: String[1], the name of the vgroup. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. */ public static native void Vgetname(long vgroup_id, String[] hdfname) throws HDFException; public static native boolean Visvg(long vgroup_id, int vgroup_ref) throws HDFException; public static native boolean Visvs(long vgroup_id, int vdata_ref) throws HDFException; /** * @param vgroup_id * IN: the Vgroup id * @param tags * OUT: int[arraysize], the tags * @param refs * OUT: int[arraysize], the refs * @param arraysize * IN: int, the number of tags/refs to return * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return tags[] = tags for objects 0 - n, refs[] = refs for objects 0 - n */ public static native int Vgettagrefs(long vgroup_id, int[] tags, int[] refs, int arraysize) throws HDFException; /** * @param vgroup_id * - IN: the Vgroup id * @param index * - IN: the index of the object * @param tagref * - OUT: tagref[0]=tag, tagref[1]=ref * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return tags[0] = tag for object #index, refs[0] = ref for objects #index */ public static native boolean Vgettagref(long vgroup_id, int index, int[] tagref) throws HDFException; public static native int Vntagrefs(long vgroup_id) throws HDFException; public static native boolean Vinqtagref(long vgroup_id, int tag, int ref) throws HDFException; /** * @param fid * IN: the file identifier returned by Hopen * @param ref_array * OUT: int[], the refs for Vdata not part of Vgroups * @param buffersize * IN: the max size of the ref_array * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return ref_array[] = refs 0 - ... */ public static native int Vlone(long fid, int[] ref_array, int buffersize) throws HDFException; public static native int Vaddtagref(long vgroup_id, int tag, int ref) throws HDFException; public static native int Vdeletetagref(long vgroup_id, int tag, int ref) throws HDFException; public static native int Vfind(long file_id, String vgroup_name) throws HDFException; public static native int Vfindclass(long file_id, String vgclassname) throws HDFException; public static native int Vflocate(int key, String vgclassname) throws HDFException; public static native int Vgetnext(int key, int ref) throws HDFException; /** * @param vgroup_id * IN: the Vgroup id * @param n_entries * OUT: int[1], the number of objects in the Vgroup * @param vgroup_name * OUT: String[1], the name of the Vgroup * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return n_entries[0] = number of entries, vgroup_name[0] = the name */ public static native boolean Vinquire(long vgroup_id, int[] n_entries, String[] vgroup_name) throws HDFException; public static native int Vinsert(long vgroup_id, long v_id) throws HDFException; public static native int Vnrefs(int key, int ref) throws HDFException; public static native boolean Vsetclass(long vgroup_id, String vgclassname) throws HDFException; public static native boolean Vsetname(long vgroup_id, String vgname) throws HDFException; /** * @param id * IN: Vgroup identifier returned by Vattach * @param index * IN: the index of the attribute * @param name * OUT: String[1], the name of the attribute * @param argv * OUT: int[5], Data type of the target attribute, Number of values in the target * attribute, Size, in bytes, of the values of the target attribute, , * * * @exception hdf.hdflib.HDFException * thrown for errors in the HDF library call. * * * @return name[0] = name, argv[0] = data_type, argv[1] = count, argv[2] = size, argv[3] = nfields, * argv[4] = refnum */ public static native boolean Vattrinfo(long id, int index, String[] name, int[] argv) throws HDFException; public static native long Vfindattr(long id, String name) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the attribute * @param data * OUT: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return data = the value of the attribute, in an array of bytes */ public static native boolean Vgetattr(long id, int index, byte[] data) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the attribute * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return data = the value of the attribute, in an array of Java objects */ public static boolean Vgetattr(long id, int index, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = Vgetattr(id, index, data); theData = theArray.arrayify(data); return rval; } public static native int Vgetversion(long id) throws HDFException; public static native int Vnattrs(long id) throws HDFException; public static native boolean Vsetattr(long id, String attr_name, long data_type, int count, String values) throws HDFException; /** * @param id * IN: the Vdata id * @param attr_name * IN: String, the name of the attribute * @param data_type * IN: int, the number_type of the attribute * @param count * IN: the number of values * @param data * IN: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write into a Java array use the alternative routine below. * * @return true on success */ public static native boolean Vsetattr(long id, String attr_name, long data_type, int count, byte[] data) throws HDFException; /** * @param id * IN: the Vdata id * @param attr_name * IN: String, the name of the attribute * @param data_type * IN: int, the number_type of the attribute * @param count * IN: the number of values * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data to a contiguous array of bytes and then converts * writes it. * * @return true on success */ public static boolean Vsetattr(long id, String attr_name, long data_type, int count, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return Vsetattr(id, attr_name, data_type, count, data); } /** * @param vdata_id * IN, vdata id as returned by VSattach * @param n_records * OUT, int[1], the number of records in the vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return n_records[0] == the number of records */ public static native boolean VSQuerycount(long vdata_id, int[] n_records) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param fields * OUT, String[1], the names of the fields * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return fields[0] == a comma delimited string with the names of the fields. */ public static native boolean VSQueryfields(long vdata_id, String[] fields) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param interlace * OUT, int[1], the interlace mode, * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return interlace[0] == the number of records, HDFConstants.FULL_INTERLACE or * HDFConstants.NO_INTERLACE */ public static native boolean VSQueryinterlace(long vdata_id, int[] interlace) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param vdata_name * OUT, String[1], the name of the vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return vdata_name[0] == the name */ public static native boolean VSQueryname(long vdata_id, String[] vdata_name) throws HDFException; public static native int VSQueryref(long vdata_id) throws HDFException; public static native int VSQuerytag(long vdata_id) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param vdata_size * OUT, int[1], the size of the vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return vdata_size[0] == Native size, in bytes, of a record in the vdata */ public static native boolean VSQueryvsize(long vdata_id, int[] vdata_size) throws HDFException; public static native int VSattach(long fid, int vdata_ref, String access) throws HDFException; public static native void VSdetach(long vdata_id) throws HDFException; public static native long VSgetid(long file_id, int vdata_ref) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param hdfclassname * OUT, String[1], the class name of the vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. */ public static native void VSgetclass(long vdata_id, String[] hdfclassname) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param hdfname * OUT, String[1], the name of the vdata * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. */ public static native void VSgetname(long vdata_id, String[] hdfname) throws HDFException; public static native int VSelts(long vdata_id) throws HDFException; public static native boolean VSfdefine(long vdata_id, String fieldname, int numbertype, int order) throws HDFException; public static native boolean VSfexist(long vdata_id, String fields) throws HDFException; public static native int VSfind(long file_id, String vdataname) throws HDFException; public static native int VSsetblocksize(long vdata_id, int blocksize) throws HDFException; public static native int VSsetnumblocks(long vdata_id, int numblocks) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param fieldname * OUT, String[1], the names of the fields * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return fieldname[0] == a comma delimited string with the names of the fields. */ public static native int VSgetfields(long vdata_id, String[] fieldname) throws HDFException; public static native int VSgetinterlace(long vdata_id) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param iargs * OUT, int[3], n_records, interlace, vdata_size * @param sargs * OUT, String[2], names the dataset, fields * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return iargs[0] = n_records, iargs[1] = interlace, iargs[2] = vdata_size, sargs[0] = vdata_name, * sargs[1] = comma delimited list of fields * *

    * NOTE: the parameters for the Java interface are not in the same order as the C * interface. */ public static native boolean VSinquire(long vdata_id, int[] iargs, String[] sargs) throws HDFException; /** * @param vdata_id * IN, vdata id as returned by VSattach * @param iargs * OUT, int[2], block_size, num_blocks * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return iargs[0] = blocksize, iargs[1] = num_blocks * *

    * NOTE: the parameters for the Java interface are not in the same order as the C * interface. */ public static native boolean VSinquire(long vdata_id, int[] iargs) throws HDFException; /** * @param fid * IN, File identifier returned by Hopen * @param ref_array * OUT, int[?], the refs * @param buffersize * IN, int, the max number of refs to return. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return ref_array contains refs. The Java API ignores the buffersize argument, returns as many as * possible. */ public static native int VSlone(long fid, int[] ref_array, int buffersize) throws HDFException; /** * @param vdata_id * IN: the Vdata id * @param databuf * OUT: byte[], the data in an array of bytes * @param nrecord * IN: int, number of records * @param interlace * IN: int, interlace * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return the number of elements read (0 or a +ve integer) */ public static native int VSread(long vdata_id, byte[] databuf, int nrecord, int interlace) throws HDFException; /** * @param vdata_id * IN: the Vdata id * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * @param nrecord * IN: int, number of records * @param interlace * IN: int, interlace * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return the number of elements read (0 or a +ve integer) */ public static int VSread(long vdata_id, Object theData, int nrecord, int interlace) throws HDFException { byte[] data; int rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = VSread(vdata_id, data, nrecord, interlace); theData = theArray.arrayify(data); return rval; } public static native int VSseek(long vdata_id, int record) throws HDFException; public static native boolean VSsetfields(long vdata_id, String fields) throws HDFException; public static native boolean VSsetinterlace(long vdata_id, int interlace) throws HDFException; public static native int VSsizeof(long vdata_id, String fields) throws HDFException; public static native boolean VSappendable(int vkey, int block_size) throws HDFException; public static native int VSfindclass(long file_id, String vgclass) throws HDFException; public static native int VSgetversion(int vkey) throws HDFException; public static native void VSsetclass(long vdata_id, String vdata_class) throws HDFException; public static native boolean VSsetexternalfile(int vkey, String filename, int offset) throws HDFException; public static native void VSsetname(long vdata_id, String vdata_name) throws HDFException; /** * @param vdata_id * IN: the Vdata id * @param databuf * IN: byte[], the data in an array of bytes * @param n_records * IN: int, number of records * @param interlace * IN: int, interlace * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write a Java array use the alternative routine below. * * @return the number of elements written (0 or a +ve integer) */ public static native int VSwrite(long vdata_id, byte[] databuf, int n_records, int interlace) throws HDFException; /** * @param vdata_id * IN: the Vdata id * @param databuf * IN: Object, a Java array of appropriate type, dimensions, and size. * @param n_records * IN: int, number of records * @param interlace * IN: int, interlace * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Important Note: This interface only supports records which are all of the * same numeric type, with no character fields. Heterogeneous fields can be written * as bytes (see above), but the calling program must make sure the data is in proper * order to write to the HDF library. * *

    * Note: converts the data into a contiguous array of bytes and then writes it * * @return the number of elements written (0 or a +ve integer) */ public static int VSwrite(long vdata_id, Object databuf, int n_records, int interlace) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(databuf); data = theArray.byteify(); return VSwrite(vdata_id, data, n_records, interlace); } /** * @param id * IN: the Vdata id * @param index * IN: int, the index of the attribute * @param attr_index * IN: int, the index of the attribute * @param name * OUT: String[1], the name of the attribute * @param argv * OUT: int[3], Data type of the target attribute, Number of values in the target * attribute, Size, in bytes, of the values of the target attribute, * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return name[0] = name, argv[0] = data_type, argv[1] = count, argv[2] = size */ public static native boolean VSattrinfo(long id, int index, int attr_index, String[] name, int[] argv) throws HDFException; /** * @param id * IN: the Vdata id * @param name * IN: the name of the attribute * @param findex * IN: int[1], the index of the attribute * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return findex[0] = the index */ public static native int VSfindex(long id, String name, int[] findex) throws HDFException; public static native int VSfindattr(long id, int index, String name) throws HDFException; public static native int VSfnattrs(long id, int fnattrs) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the vdata * @param attr_index * IN: the index of the attribute * @param data * OUT: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return data = the value of the attribute, in an array of bytes */ public static native boolean VSgetattr(long id, int index, int attr_index, byte[] data) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the vdata * @param attr_index * IN: the index of the attribute * @param theData * OUT: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return data = the value of the attribute, in an array of Java objects */ public static boolean VSgetattr(long id, int index, int attr_index, Object theData) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theData); data = theArray.emptyBytes(); rval = VSgetattr(id, index, attr_index, data); theData = theArray.arrayify(data); return rval; } public static native boolean VSisattr(long id) throws HDFException; public static native int VSnattrs(long id) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the vdata * @param attr_name * IN: String, the name of the attribute * @param data_type * IN: int, the number_type of the attribute * @param count * IN: the number of values * @param values * IN: String, the data in an String * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean VSsetattr(long id, int index, String attr_name, long data_type, int count, String values) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the vdata * @param attr_name * IN: String, the name of the attribute * @param data_type * IN: int, the number_type of the attribute * @param count * IN: the number of values * @param values * IN: byte[], the data in an array of bytes * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write into a Java array use the alternative routine below. * * @return true on success */ public static native boolean VSsetattr(long id, int index, String attr_name, long data_type, int count, byte[] values) throws HDFException; /** * @param id * IN: the Vdata id * @param index * IN: the index of the vdata * @param attr_name * IN: String, the name of the attribute * @param data_type * IN: int, the number_type of the attribute * @param count * IN: the number of values * @param theData * IN: Object, a Java array of appropriate type, dimensions, and size. * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data to a contiguous array of bytes and then converts * writes it. * * @return true on success */ public static boolean VSsetattr(long id, int index, String attr_name, long data_type, int count, Object theData) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theData); data = theArray.byteify(); return VSsetattr(id, index, attr_name, data_type, count, data); } /** * @param fileName * IN: String, the file * @param argv * OUT: int[3], the width, height, and interlace mode * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return argv[0] = width, argv[1] = height, argv[2] = interlace */ public static native boolean DF24getdims(String fileName, int[] argv) throws HDFException; public static native boolean DF24reqil(int il) throws HDFException; /** * @param fileName * IN: String, the file * @param imagedata * OUT: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return data = the image in an array of bytes */ public static native boolean DF24getimage(String fileName, byte[] imagedata, int width, int height) throws HDFException; /** * @param fileName * IN: String, the file * @param theImagedata * OUT: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return data = the value of the attribute, in an array of Java objects */ public static boolean DF24getimage(String fileName, Object theImagedata, int width, int height) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theImagedata); data = theArray.emptyBytes(); rval = DF24getimage(fileName, data, width, height); theImagedata = theArray.arrayify(data); return rval; } public static native short DF24lastref() throws HDFException; public static native boolean DF24restart() throws HDFException; public static native boolean DF24readref(String filename, int ref) throws HDFException; public static native int DF24nimages(String fileName) throws HDFException; /** * @param filename * IN: String, the file * @param image * IN: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean DF24addimage(String filename, byte[] image, int width, int height) throws HDFException; /** * @param filename * IN: String, the file * @param theImage * IN: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data into a contiguous array of bytes and then writes it * to the file * * @return true on success */ public static boolean DF24addimage(String filename, Object theImage, int width, int height) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theImage); data = theArray.byteify(); return DF24addimage(filename, data, width, height); } /** * @param filename * IN: String, the file * @param image * IN: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean DF24putimage(String filename, byte[] image, int width, int height) throws HDFException; /** * @param filename * IN: String, the file * @param theImage * IN: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data into a contiguous array of bytes and then writes it * to the file * * @return true on success */ public static boolean DF24putimage(String filename, Object theImage, int width, int height) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theImage); data = theArray.byteify(); return DF24putimage(filename, data, width, height); } /** * @param type * IN: int, the type of compression * @param cinfo * IN: HDFCompInfo, the compression parameters * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * @return true on success */ public static native boolean DF24setcompress(int type, HDFCompInfo cinfo) throws HDFException; public static native boolean DF24setdims(int width, int height) throws HDFException; public static native boolean DF24setil(int il) throws HDFException; /** * @param fileName * IN: String, the file * @param argv * OUT: int[2], the width and height * @param haspalette * OUT: boolean[1], has a palette * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * * @return argv[0] = width, argv[1] = height, haspalette[0] = palette */ public static native boolean DFR8getdims(String fileName, int[] argv, boolean[] haspalette) throws HDFException; /** * @param fileName * IN: String, the file * @param imagedata * OUT: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param palette * OUT: byte[], the color look up table * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to read into a Java array use the alternative routine below. * * @return data = imagedata: the image in an array of bytes, palette: the look up table, in an array * of bytes */ public static native boolean DFR8getimage(String fileName, byte[] imagedata, int width, int height, byte[] palette) throws HDFException; /** * @param fileName * IN: String, the file * @param theImagedata * OUT: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param palette * OUT: byte[], the color look up table * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: reads the data as a contiguous array of bytes and then converts it to * an appropriate Java object. * * @return data = theImagedata: the value of the attribute, in an array of Java objects palette: the * look up table, in an array of bytes */ public static boolean DFR8getimage(String fileName, Object theImagedata, int width, int height, byte[] palette) throws HDFException { byte[] data; boolean rval; HDFArray theArray = new HDFArray(theImagedata); data = theArray.emptyBytes(); rval = DFR8getimage(fileName, data, width, height, palette); theImagedata = theArray.arrayify(data); return rval; } public static native short DFR8lastref() throws HDFException; public static native boolean DFR8restart() throws HDFException; public static native boolean DFR8readref(String filename, int ref) throws HDFException; public static native int DFR8nimages(String fileName) throws HDFException; /** * @param filename * IN: String, the file * @param image * IN: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param compress * IN: short, the type of compression * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean DFR8addimage(String filename, byte[] image, int width, int height, short compress) throws HDFException; /** * @param filename * IN: String, the file * @param theImage * IN: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param compress * IN: short, the type of compression * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data into a contiguous array of bytes and then writes it * to the file * * @return true on success */ public static boolean DFR8addimage(String filename, Object theImage, int width, int height, short compress) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theImage); data = theArray.byteify(); return DFR8addimage(filename, data, width, height, compress); } /** * @param filename * IN: String, the file * @param image * IN: byte[], the image, in an array of bytes * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param compress * IN: short, the type of compression * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * NOTE: to write from a Java array use the alternative routine below. * * @return true on success */ public static native boolean DFR8putimage(String filename, byte[] image, int width, int height, short compress) throws HDFException; /** * @param filename * IN: String, the file * @param theImage * IN: Object, the image, in a java array of appropriate size and type * @param width * IN: int, the width of the image * @param height * IN: int, the height of the image * @param compress * IN: short, the type of compression * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * *

    * Note: converts the data into a contiguous array of bytes and then writes it * to the file * * @return true on success */ public static boolean DFR8putimage(String filename, Object theImage, int width, int height, short compress) throws HDFException { byte[] data; HDFArray theArray = new HDFArray(theImage); data = theArray.byteify(); return DFR8putimage(filename, data, width, height, compress); } /** * DFR8setcompress sets compression scheme for 8-bit image * * @param type * IN: int, the type of compression * @param cinfo * IN: HDFCompInfo, the compression parameters * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * @return true on success */ public static native boolean DFR8setcompress(int type, HDFCompInfo cinfo) throws HDFException; /** * @param palref * OUT: short[1], the HDF ref of the palette * * @exception hdf.hdflib.HDFException * should be thrown for errors in the HDF library call. * * @return palref[0] = the ref of the palette */ public static native boolean DFR8getpalref(short[] palref) throws HDFException; public static native boolean DFR8setpalette(byte[] palette) throws HDFException; public static native boolean DFR8writeref(String filename, short ref) throws HDFException; /** * New API for hdf-42r1 * * @param coder_type * comp_coder_t enum for determining which type of encoding is being done * * @exception hdf.hdflib.HDFException * thrown for errors in the HDF library call. * * * @return the compression config info value */ public static native int HCget_config_info(int coder_type) throws HDFException; } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFLibraryException.java000066400000000000000000000076321503061704500232100ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * The class HDFException returns errors raised by the HDF library. *

    * In principle, this includes any and all errors possible from the HDF library. However, most error * conditions are not yet detected in this version of the Java interface. This will be added in * future releases. * * The only HDF library error currently raised are errors in Hopen, such as ``file not found''. */ public class HDFLibraryException extends HDFException { /** * Constructs an HDFLibraryException with no specified detail * message. */ public HDFLibraryException() { super(); } /** * Constructs an HDFLibraryException with the specified detail * message. * * @param s * the detail message. */ public HDFLibraryException(String s) { super("HDFLibraryException: " + s); } /** * Constructs an HDFLibraryException with the specified detail * error number. * * @param err * the detail error number. */ public HDFLibraryException(int err) { super(err); } /** */ @Override public String getMessage() { if (detailMessage != null) { return detailMessage; } String s; try { s = HDFLibrary.HEstring(HDFerror); } catch (HDFException e) { s = new String("HDF error number: " + HDFerror + ", HEstring failed"); } detailMessage = "HDFLibraryException: " + s; return detailMessage; } /** * Prints this HDFLibraryException, the HDF Library error stack, and and the Java stack * trace to the standard error stream. */ @Override public void printStackTrace() { System.err.println(this); printStackTrace0(null); // the HDF Library error stack super.printStackTrace(); // the Java stack trace } /** * Prints this HDFLibraryException the HDF Library error stack, and and the Java stack * trace to the specified print stream. * * @param f * the file print stream. */ public void printStackTrace(java.io.File f) { if ((f == null) || !f.exists() || f.isDirectory() || !f.canWrite()) { printStackTrace(); } else { try { java.io.FileOutputStream o = new java.io.FileOutputStream(f); java.io.PrintWriter p = new java.io.PrintWriter(o); p.println(this); p.close(); } catch (Exception ex) { System.err.println(this); }; // the HDF Library error stack printStackTrace0(f.getPath()); super.printStackTrace(); // the Java stack trace } } /* * This private method calls the HDF library to extract the error codes and error stack. */ private native void printStackTrace0(String s); } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFNBITChunkInfo.java000066400000000000000000000034321503061704500222600ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF NBIT compressed chunked class. *

    * In this case, the information is the start bit, len, sign extension and fill. */ public class HDFNBITChunkInfo extends HDFChunkInfo { /** */ public int[] chunk_lengths = new int[HDFConstants.MAX_VAR_DIMS]; /** */ public int start_bit = 0; /** */ public int bit_len = 0; /** */ public int sign_ext = 0; /** */ public int fill_one = 0; /** */ public HDFNBITChunkInfo() { ctype = HDFConstants.HDF_NBIT; }; /** */ public HDFNBITChunkInfo(int[] cl, int sb, int bl, int se, int fo) { ctype = HDFConstants.HDF_NBIT; chunk_lengths = cl; start_bit = sb; bit_len = bl; sign_ext = se; fill_one = fo; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFNBITCompInfo.java000066400000000000000000000034761503061704500221160ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF ``NBIT'' compression class. *

    * In this case, the information needed is the number type, the sign extension, the fill bit, the * start bit, and the number of bits to store. */ public class HDFNBITCompInfo extends HDFNewCompInfo { /** number type of the data to encode */ public int nt; /** whether to sign extend or not */ public int sign_ext; /** whether to fill with 1's or 0's */ public int fill_one; /** offset of the start bit in the data */ public int start_bit; /** number of bits to store */ public int bit_len; /** */ public HDFNBITCompInfo() { ctype = HDFConstants.COMP_CODE_NBIT; } /** */ public HDFNBITCompInfo(int Nt, int Sign_ext, int Fill_one, int Start_bit, int Bit_len) { ctype = HDFConstants.COMP_CODE_NBIT; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFNativeData.java000066400000000000000000000401361503061704500217410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF4. The full HDF4 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package hdf.hdflib; import hdf.hdflib.HDFException; import hdf.hdflib.HDFJavaException; /** * This class encapsulates native methods to deal with arrays of numbers, * converting from numbers to bytes and bytes to numbers. *

    * These routines are used by class HDFArray to pass data to and from the * HDF library. *

    * Methods xxxToByte() convert a Java array of primitive numbers (int, short, * ...) to a Java array of bytes. Methods byteToXxx() convert from a Java array * of bytes into a Java array of primitive numbers (int, short, ...) *

    * Variant interfaces convert a section of an array, and also can convert to * sub-classes of Java Number. *

    * See also: hdf.hdflib.HDFArray. */ public class HDFNativeData { /** * Convert an array of bytes into an array of ints * * @param data * The input array of bytes * @return an array of int */ public synchronized static native int[] byteToInt(byte[] data); /** * Convert an array of bytes into an array of floats * * @param data * The input array of bytes * @return an array of float */ public synchronized static native float[] byteToFloat(byte[] data); /** * Convert an array of bytes into an array of shorts * * @param data * The input array of bytes * @return an array of short */ public synchronized static native short[] byteToShort(byte[] data); /** * Convert an array of bytes into an array of long * * @param data * The input array of bytes * @return an array of long */ /* * does this really work? C 'long' is 32 bits, Java 'long' is 64-bits. What * does this routine actually do? */ public synchronized static native long[] byteToLong(byte[] data); /** * Convert an array of bytes into an array of double * * @param data * The input array of bytes * @return an array of double */ public synchronized static native double[] byteToDouble(byte[] data); /** * Convert a range from an array of bytes into an array of int * * @param start * The position in the input array of bytes to start * @param len * The number of 'int' to convert * @param data * The input array of bytes * @return an array of 'len' int */ public synchronized static native int[] byteToInt(int start, int len, byte[] data); /** * Convert 4 bytes from an array of bytes into a single int * * @param start * The position in the input array of bytes to start * @param data * The input array of bytes * @return The integer value of the bytes. */ public synchronized static int byteToInt(byte[] data, int start) { int[] ival = new int[1]; ival = byteToInt(start, 1, data); return (ival[0]); } /** * Convert a range from an array of bytes into an array of short * * @param start * The position in the input array of bytes to start * @param len * The number of 'short' to convert * @param data * The input array of bytes * @return an array of 'len' short */ public synchronized static native short[] byteToShort(int start, int len, byte[] data); /** * Convert 2 bytes from an array of bytes into a single short * * @param start * The position in the input array of bytes to start * @param data * The input array of bytes * @return The short value of the bytes. */ public synchronized static short byteToShort(byte[] data, int start) { short[] sval = new short[1]; sval = byteToShort(start, 1, data); return (sval[0]); } /** * Convert a range from an array of bytes into an array of float * * @param start * The position in the input array of bytes to start * @param len * The number of 'float' to convert * @param data * The input array of bytes * @return an array of 'len' float */ public synchronized static native float[] byteToFloat(int start, int len, byte[] data); /** * Convert 4 bytes from an array of bytes into a single float * * @param start * The position in the input array of bytes to start * @param data * The input array of bytes * @return The float value of the bytes. */ public synchronized static float byteToFloat(byte[] data, int start) { float[] fval = new float[1]; fval = byteToFloat(start, 1, data); return (fval[0]); } /** * Convert a range from an array of bytes into an array of long * * @param start * The position in the input array of bytes to start * @param len * The number of 'long' to convert * @param data * The input array of bytes * @return an array of 'len' long */ public synchronized static native long[] byteToLong(int start, int len, byte[] data); /** * Convert 8 bytes from an array of bytes into a single long * * @param start * The position in the input array of bytes to start * @param data * The input array of bytes * @return The long value of the bytes. */ public synchronized static long byteToLong(byte[] data, int start) { long[] lval = new long[1]; lval = byteToLong(start, 1, data); return (lval[0]); } /** * Convert a range from an array of bytes into an array of double * * @param start * The position in the input array of bytes to start * @param len * The number of 'double' to convert * @param data * The input array of bytes * @return an array of 'len' double */ public synchronized static native double[] byteToDouble(int start, int len, byte[] data); /** * Convert 8 bytes from an array of bytes into a single double * * @param start * The position in the input array of bytes to start * @param data * The input array of bytes * @return The double value of the bytes. */ public synchronized static double byteToDouble(byte[] data, int start) { double[] dval = new double[1]; dval = byteToDouble(start, 1, data); return (dval[0]); } /** * Convert a range from an array of int into an array of bytes. * * @param start * The position in the input array of int to start * @param len * The number of 'int' to convert * @param data * The input array of int * @return an array of bytes */ public synchronized static native byte[] intToByte(int start, int len, int[] data); /** * Convert a range from an array of short into an array of bytes. * * @param start * The position in the input array of int to start * @param len * The number of 'short' to convert * @param data * The input array of short * @return an array of bytes */ public synchronized static native byte[] shortToByte(int start, int len, short[] data); /** * Convert a range from an array of float into an array of bytes. * * @param start * The position in the input array of int to start * @param len * The number of 'float' to convert * @param data * The input array of float * @return an array of bytes */ public synchronized static native byte[] floatToByte(int start, int len, float[] data); /** * Convert a range from an array of long into an array of bytes. * * @param start * The position in the input array of int to start * @param len * The number of 'long' to convert * @param data * The input array of long * @return an array of bytes */ public synchronized static native byte[] longToByte(int start, int len, long[] data); /** * Convert a range from an array of double into an array of bytes. * * @param start * The position in the input array of double to start * @param len * The number of 'double' to convert * @param data * The input array of double * @return an array of bytes */ public synchronized static native byte[] doubleToByte(int start, int len, double[] data); /** * Convert a single byte into an array of one byte. *

    * (This is a trivial method.) * * @param data * The input byte * @return an array of bytes */ public synchronized static native byte[] byteToByte(byte data); /** * Convert a single Byte object into an array of one byte. *

    * (This is an almost trivial method.) * * @param data * The input Byte * @return an array of bytes */ public synchronized static byte[] byteToByte(Byte data) { return byteToByte(data.byteValue()); } /** * Convert a single int into an array of 4 bytes. * * @param data * The input int * @return an array of bytes */ public synchronized static native byte[] intToByte(int data); /** * Convert a single Integer object into an array of 4 bytes. * * @param data * The input Integer * @return an array of bytes */ public synchronized static byte[] intToByte(Integer data) { return intToByte(data.intValue()); } /** * Convert a single short into an array of 2 bytes. * * @param data * The input short * @return an array of bytes */ public synchronized static native byte[] shortToByte(short data); /** * Convert a single Short object into an array of 2 bytes. * * @param data * The input Short * @return an array of bytes */ public synchronized static byte[] shortToByte(Short data) { return shortToByte(data.shortValue()); } /** * Convert a single float into an array of 4 bytes. * * @param data * The input float * @return an array of bytes */ public synchronized static native byte[] floatToByte(float data); /** * Convert a single Float object into an array of 4 bytes. * * @param data * The input Float * @return an array of bytes */ public synchronized static byte[] floatToByte(Float data) { return floatToByte(data.floatValue()); }; /** * Convert a single long into an array of 8 bytes. * * @param data * The input long * @return an array of bytes */ public synchronized static native byte[] longToByte(long data); /** * Convert a single Long object into an array of 8 bytes. * * @param data * The input Long * @return an array of bytes */ public synchronized static byte[] longToByte(Long data) { return longToByte(data.longValue()); } /** * Convert a single double into an array of 8 bytes. * * @param data * The input double * @return an array of bytes */ public synchronized static native byte[] doubleToByte(double data); /** * Convert a single Double object into an array of 8 bytes. * * @param data * The input Double * @return an array of bytes */ public synchronized static byte[] doubleToByte(Double data) { return doubleToByte(data.doubleValue()); } /** * Create a Number object from an array of bytes. * * @param barray * The bytes to be converted * @param obj * Input object of the desired output class. Must be a sub-class * of Number. * @return A Object of the type of obj. * * @exception HDFException * - Error unsupported type. */ public synchronized static Object byteToNumber(byte[] barray, Object obj) throws HDFException { Class theClass = obj.getClass(); String type = theClass.getName(); Object retobj = null; if (type.equals("java.lang.Integer")) { int[] i = hdf.hdflib.HDFNativeData.byteToInt(0, 1, barray); retobj = Integer.valueOf(i[0]); } else if (type.equals("java.lang.Byte")) { retobj = Byte.valueOf(barray[0]); } else if (type.equals("java.lang.Short")) { short[] f = hdf.hdflib.HDFNativeData.byteToShort(0, 1, barray); retobj = Short.valueOf(f[0]); } else if (type.equals("java.lang.Float")) { float[] f = hdf.hdflib.HDFNativeData.byteToFloat(0, 1, barray); retobj = Float.valueOf(f[0]); } else if (type.equals("java.lang.Long")) { long[] f = hdf.hdflib.HDFNativeData.byteToLong(0, 1, barray); retobj = Long.valueOf(f[0]); } else if (type.equals("java.lang.Double")) { double[] f = hdf.hdflib.HDFNativeData.byteToDouble(0, 1, barray); retobj = Double.valueOf(f[0]); } else { /* exception: unsupported type */ HDFException ex = new HDFJavaException("byteToNumber: setfield bad type: " + obj + " " + type); throw(ex); } return (retobj); } /** * Allocate a 1D array large enough to hold a multidimensional array of 'datasize' elements of * 'dataType' numbers. This is called from hdf.hdfobject.HDFGR and hdf.hdfobject.HDFSDS, and * hdf.io.ASCII2HDF * * @param dataType * the type of the image data * @param datasize * the size of the image data array * @return an array of 'datasize' numbers of 'dataType * */ public static Object defineDataObject(int dataType, int datasize) { Object data = null; if ((dataType & HDFConstants.DFNT_LITEND) != 0) { dataType -= HDFConstants.DFNT_LITEND; } switch (dataType) { case HDFConstants.DFNT_INT16: case HDFConstants.DFNT_UINT16: data = new short[datasize]; break; case HDFConstants.DFNT_INT32: case HDFConstants.DFNT_UINT32: data = new int[datasize]; break; case HDFConstants.DFNT_INT64: case HDFConstants.DFNT_UINT64: data = new long[datasize]; break; case HDFConstants.DFNT_FLOAT32: data = new float[datasize]; break; case HDFConstants.DFNT_FLOAT64: data = new double[datasize]; break; default: case HDFConstants.DFNT_CHAR: case HDFConstants.DFNT_UCHAR8: case HDFConstants.DFNT_UINT8: case HDFConstants.DFNT_INT8: data = new byte[datasize]; break; } return data; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFNewCompInfo.java000066400000000000000000000025421503061704500221040ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a generic container for the parameters to the HDF compressed classes, with the * ``new'' encoding. *

    * Compression parameters are expressed as instances of sub-classes of this type. */ public class HDFNewCompInfo extends HDFCompInfo { /** from COMP_CODE_ENUM */ public int ctype; /** */ public HDFNewCompInfo() { ctype = HDFConstants.COMP_CODE_NONE; }; } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFNotImplementedException.java000066400000000000000000000033771503061704500245320ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * HDFNotImplementedException indicates a function that is part of the HDF API, but which cannot or * will not be implemented for Java. *

    * For instance, C routines which take Unix FILE objects as parameters are not appropriate for the * Java interface and will not be implemented. These routines will raise an * HDFNotImplementedException. */ public class HDFNotImplementedException extends HDFJavaException { /** */ public HDFNotImplementedException() { super(); } /** * Constructs an HDFException with the specified unimplemented * message. * * @param s * the additional message detail. */ public HDFNotImplementedException(String s) { super("HDFJavaException: HDF function not implemented (yet): " + s); } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFOldCompInfo.java000066400000000000000000000025401503061704500220670ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a generic container for the parameters to the HDF compressed classes, with the * ``ole'' encoding. *

    * Compression parameters are expressed as instances of sub-classes of this type. */ public class HDFOldCompInfo extends HDFCompInfo { /** from COMP_NONE defines */ public int ctype; /** */ public HDFOldCompInfo() { ctype = HDFConstants.COMP_NONE; }; } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFOldRLECompInfo.java000066400000000000000000000024321503061704500224320ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a generic container for the parameters to the HDF RLE compressed classes, with the * ``old'' type encoding. *

    * In this case, there is no auxiliary information. */ public class HDFOldRLECompInfo extends HDFOldCompInfo { /** */ public HDFOldRLECompInfo() { ctype = HDFConstants.COMP_RLE; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFRLECompInfo.java000066400000000000000000000024301503061704500217710ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a generic container for the parameters to the HDF RLE compressed classes, with the * ``new'' type encoding. *

    * In this case, there is no auxiliary information. */ public class HDFRLECompInfo extends HDFNewCompInfo { /** */ public HDFRLECompInfo() { ctype = HDFConstants.COMP_CODE_RLE; } } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFSKPHUFFCompInfo.java000066400000000000000000000024721503061704500224630ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a generic container for the parameters to the HDF ``Skipping Huffman'' compression * classes. *

    * In this case, the information is the skip size */ public class HDFSKPHUFFCompInfo extends HDFNewCompInfo { /** */ public int skp_size; /** */ public HDFSKPHUFFCompInfo() { ctype = HDFConstants.COMP_CODE_SKPHUFF; }; } hdf4-hdf4.3.1/java/src/hdf/hdflib/HDFSZIPCompInfo.java000066400000000000000000000036771503061704500221520ustar00rootroot00000000000000/**************************************************************************** * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF Java Products. The full HDF Java copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * ****************************************************************************/ package hdf.hdflib; /** *

    * This class is a container for the parameters to the HDF SZIP compression algorithm. *

    * In this case, the only parameter is the ``level'' of deflation. */ public class HDFSZIPCompInfo extends HDFNewCompInfo { /** */ public int bits_per_pixel; /** */ public int options_mask; /** */ public int pixels; /** */ public int pixels_per_block; /** */ public int pixels_per_scanline; /** */ public HDFSZIPCompInfo() { ctype = HDFConstants.COMP_CODE_SZIP; } /** */ public HDFSZIPCompInfo(int bits_per_pixel_in, int options_mask_in, int pixels_in, int pixels_per_block_in, int pixels_per_scanline_in) { ctype = HDFConstants.COMP_CODE_SZIP; bits_per_pixel = bits_per_pixel_in; options_mask = options_mask_in; pixels = pixels_in; pixels_per_block = pixels_per_block_in; pixels_per_scanline = pixels_per_scanline_in; } } hdf4-hdf4.3.1/java/src/hdf/overview.html000066400000000000000000000067541503061704500200500ustar00rootroot00000000000000

    Java HDF Interface (JHI4)

    What it is

    The Java HDF Interface (JHI4) is a Java package (hdf.hdflib) that ``wraps around'' the HDF library.

    There are a large number of functions in the HDF library (version 4.2). Some of the functions are not supported in JHI4.

    Java HDF Interface (JHI4)
    Note: The JHI4 only supports HDF4.

    The JHI4 may be used by any Java application that needs to access HDF files. It is extremely important to emphasize that this package is not a pure Java implementation of the HDF library. The JHI4 calls the same HDF library that is used by C or FORTRAN programs. (Note that this product cannot be used in most network browsers because it accesses the local disk using native code.)

    The Java HDF Interface consists of Java classes and a dynamically linked native library. The Java classes declare native methods, and the library contains C functions which implement the native methods. The C functions call the standard HDF library, which is linked as part of the same library on most platforms.

    The central part of the JHI4 is the Java class hdf.hdflib.HDFLibrary. The HDFLibrary class calls the standard (i.e., `native' code) HDF library, with native methods for most of the HDF4functions.

    How to use it

    The JHI4 is used by Java classes to call the HDF library, in order to create HDF files, and read and write data in existing HDF files.

    For example, the HDF library has the function Hopen to open an HDF file. The Java interface is the class hdf.hdflib.HDFLibrary, which has a method:

    static native int Hopen(String filename, int flags, int access );
    The native method is implemented in C using the Java Native Method Interface (JNI). This is written something like the following:
    JNIEXPORT jint
    JNICALL Java_hdf_hdflib_HDFLibrary_Hopen
    (
     JNIEnv *env,
     jclass class,
     jstring hdfFile,
     jint flags,
     jint access)
     {
    
     /* ...convert Java String to (char *) */
    
     /* call the HDF library */
     retVal = Hopen((char *)file, (unsigned)flags, (hid_t)access );
    
     /* ... */
    }
    This C function calls the HDF library and returns the result appropriately.

    There is one native method for each HDF entry point (several hundred in all), which are compiled with the HDF library into a dynamically loaded library (libhdf_java). Note that this library must be built for each platform.

    To call the HDF `Hopen' function, a Java program would import the package 'hdf.hdflib.*', and invoke the method on the class 'HDFLibrary'. The Java program would look something like this:

    import hdf.hdflib.*;
    
    {
     /* ... */
    
     try {
     file = HDFLibrary.Hopen("myFile.hdf", flags, access );
     } catch (HDFException ex) {
     //...
     }
    
     /* ... */
    }
    The HDFLibrary class automatically loads the native method implementations and the HDF library.

    To Obtain

    The JHI4 is included with the HDF library. hdf4-hdf4.3.1/java/src/jni/000077500000000000000000000000001503061704500153175ustar00rootroot00000000000000hdf4-hdf4.3.1/java/src/jni/CMakeLists.txt000066400000000000000000000054341503061704500200650ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA_JNI C) set (HDF4_JAVA_JNI_CSRCS ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfanImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfdfpalImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfdfuImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfexceptionImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfgrImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfheImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfhxImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfnativeImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfr24Imp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfr8Imp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfsdsImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfstructsutil.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvdataImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvfImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvgroupImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvhImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvqImp.c ${HDF4_JAVA_JNI_SOURCE_DIR}/hdfvsqImp.c ) set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) ########### JNI libraries always must be built shared ############### add_library (${HDF4_JAVA_JNI_LIB_TARGET} SHARED ${HDF4_JAVA_JNI_CSRCS}) target_include_directories(${HDF4_JAVA_JNI_LIB_TARGET} PRIVATE "${HDF4_BINARY_DIR};${HDF4_JAVA_JNI_SOURCE_DIR}" ) target_compile_options(${HDF4_JAVA_JNI_LIB_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") TARGET_C_PROPERTIES (${HDF4_JAVA_JNI_LIB_TARGET} SHARED) target_link_libraries (${HDF4_JAVA_JNI_LIB_TARGET} PUBLIC ${HDF4_MF_LIBSH_TARGET} ${HDF4_SRC_LIBSH_TARGET}) set_target_properties (${HDF4_JAVA_JNI_LIB_TARGET} PROPERTIES FOLDER libraries/jni) SET_GLOBAL_VARIABLE (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_JAVA_JNI_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_JAVA_JNI_LIB_TARGET} ${HDF4_JAVA_JNI_LIB_NAME} SHARED "JAVA") #----------------------------------------------------------------------------- # Add Target to clang-format #----------------------------------------------------------------------------- if (HDF4_ENABLE_FORMATTERS) clang_format (HDF4_JNI_SRC_FORMAT ${HDF4_JAVA_JNI_LIB_TARGET}) endif () #----------------------------------------------------------------------------- # Add Target(s) to CMake Install for import into other projects #----------------------------------------------------------------------------- if (HDF4_EXPORTED_TARGETS) INSTALL_TARGET_PDB (${HDF4_JAVA_JNI_LIB_TARGET} ${HDF4_INSTALL_BIN_DIR} libraries) install ( TARGETS ${HDF4_JAVA_JNI_LIB_TARGET} EXPORT ${HDF4_EXPORTED_TARGETS} LIBRARY DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${HDF4_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${HDF4_INSTALL_FWRK_DIR} COMPONENT libraries INCLUDES DESTINATION include ) endif () hdf4-hdf4.3.1/java/src/jni/Makefile.am000066400000000000000000000023151503061704500173540ustar00rootroot00000000000000# # HDF Java native interface (JNI) Library Makefile(.in) # include $(top_srcdir)/config/commence.am # Mark this directory as part of the JNI API JAVA_API=yes AM_CFLAGS=-fPIC # Include src directory and JNI flags AM_CPPFLAGS=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc \ -I$(top_srcdir)/java/src/jni \ $(JNIFLAGS) # This is our main target lib_LTLIBRARIES=libhdf_java.la # Source files for the library libhdf_java_la_SOURCES=hdfanImp.c hdfdfpalImp.c \ hdfdfuImp.c hdfexceptionImp.c hdfgrImp.c hdfheImp.c hdfhxImp.c hdfImp.c hdfnativeImp.c \ hdfr24Imp.c hdfr8Imp.c hdfsdsImp.c hdfstructsutil.c hdfvdataImp.c hdfvfImp.c hdfvgroupImp.c \ hdfvhImp.c hdfvqImp.c hdfvsqImp.c # HDF Java (JNI) library depends on HDF Library. libhdf_java_la_LIBADD=$(LIBMFHDF) $(LIBHDF) @LIBS@ libhdf_java_la_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) libhdf_java_la_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc \ -I$(top_srcdir)/java/src/jni \ $(JNIFLAGS) include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/java/src/jni/Makefile.in000066400000000000000000001347631503061704500174020ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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@ # # HDF Java native interface (JNI) Library Makefile(.in) # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ TESTS = subdir = java/src/jni ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.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) am_libhdf_java_la_OBJECTS = hdfanImp.lo hdfdfpalImp.lo hdfdfuImp.lo \ hdfexceptionImp.lo hdfgrImp.lo hdfheImp.lo hdfhxImp.lo \ hdfImp.lo hdfnativeImp.lo hdfr24Imp.lo hdfr8Imp.lo \ hdfsdsImp.lo hdfstructsutil.lo hdfvdataImp.lo hdfvfImp.lo \ hdfvgroupImp.lo hdfvhImp.lo hdfvqImp.lo hdfvsqImp.lo libhdf_java_la_OBJECTS = $(am_libhdf_java_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/hdfImp.Plo ./$(DEPDIR)/hdfanImp.Plo \ ./$(DEPDIR)/hdfdfpalImp.Plo ./$(DEPDIR)/hdfdfuImp.Plo \ ./$(DEPDIR)/hdfexceptionImp.Plo ./$(DEPDIR)/hdfgrImp.Plo \ ./$(DEPDIR)/hdfheImp.Plo ./$(DEPDIR)/hdfhxImp.Plo \ ./$(DEPDIR)/hdfnativeImp.Plo ./$(DEPDIR)/hdfr24Imp.Plo \ ./$(DEPDIR)/hdfr8Imp.Plo ./$(DEPDIR)/hdfsdsImp.Plo \ ./$(DEPDIR)/hdfstructsutil.Plo ./$(DEPDIR)/hdfvdataImp.Plo \ ./$(DEPDIR)/hdfvfImp.Plo ./$(DEPDIR)/hdfvgroupImp.Plo \ ./$(DEPDIR)/hdfvhImp.Plo ./$(DEPDIR)/hdfvqImp.Plo \ ./$(DEPDIR)/hdfvsqImp.Plo 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_CC_1 = 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_CCLD_1 = SOURCES = $(libhdf_java_la_SOURCES) DIST_SOURCES = $(libhdf_java_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/depcomp \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog # Mark this directory as part of the JNI API JAVA_API = yes AM_CFLAGS = -fPIC # Include src directory and JNI flags AM_CPPFLAGS = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc \ -I$(top_srcdir)/java/src/jni \ $(JNIFLAGS) # This is our main target lib_LTLIBRARIES = libhdf_java.la # Source files for the library libhdf_java_la_SOURCES = hdfanImp.c hdfdfpalImp.c \ hdfdfuImp.c hdfexceptionImp.c hdfgrImp.c hdfheImp.c hdfhxImp.c hdfImp.c hdfnativeImp.c \ hdfr24Imp.c hdfr8Imp.c hdfsdsImp.c hdfstructsutil.c hdfvdataImp.c hdfvfImp.c hdfvgroupImp.c \ hdfvhImp.c hdfvqImp.c hdfvsqImp.c # HDF Java (JNI) library depends on HDF Library. libhdf_java_la_LIBADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ libhdf_java_la_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) libhdf_java_la_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc \ -I$(top_srcdir)/java/src/jni \ $(JNIFLAGS) # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 java/src/jni/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign java/src/jni/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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}; \ } libhdf_java.la: $(libhdf_java_la_OBJECTS) $(libhdf_java_la_DEPENDENCIES) $(EXTRA_libhdf_java_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(libdir) $(libhdf_java_la_OBJECTS) $(libhdf_java_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfanImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfdfpalImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfdfuImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfexceptionImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfgrImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfheImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfhxImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfnativeImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfr24Imp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfr8Imp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfsdsImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfstructsutil.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvdataImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvfImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvgroupImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvhImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvqImp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfvsqImp.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) all-local installdirs: for dir in "$(DESTDIR)$(libdir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/hdfImp.Plo -rm -f ./$(DEPDIR)/hdfanImp.Plo -rm -f ./$(DEPDIR)/hdfdfpalImp.Plo -rm -f ./$(DEPDIR)/hdfdfuImp.Plo -rm -f ./$(DEPDIR)/hdfexceptionImp.Plo -rm -f ./$(DEPDIR)/hdfgrImp.Plo -rm -f ./$(DEPDIR)/hdfheImp.Plo -rm -f ./$(DEPDIR)/hdfhxImp.Plo -rm -f ./$(DEPDIR)/hdfnativeImp.Plo -rm -f ./$(DEPDIR)/hdfr24Imp.Plo -rm -f ./$(DEPDIR)/hdfr8Imp.Plo -rm -f ./$(DEPDIR)/hdfsdsImp.Plo -rm -f ./$(DEPDIR)/hdfstructsutil.Plo -rm -f ./$(DEPDIR)/hdfvdataImp.Plo -rm -f ./$(DEPDIR)/hdfvfImp.Plo -rm -f ./$(DEPDIR)/hdfvgroupImp.Plo -rm -f ./$(DEPDIR)/hdfvhImp.Plo -rm -f ./$(DEPDIR)/hdfvqImp.Plo -rm -f ./$(DEPDIR)/hdfvsqImp.Plo -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-libLTLIBRARIES 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 ./$(DEPDIR)/hdfImp.Plo -rm -f ./$(DEPDIR)/hdfanImp.Plo -rm -f ./$(DEPDIR)/hdfdfpalImp.Plo -rm -f ./$(DEPDIR)/hdfdfuImp.Plo -rm -f ./$(DEPDIR)/hdfexceptionImp.Plo -rm -f ./$(DEPDIR)/hdfgrImp.Plo -rm -f ./$(DEPDIR)/hdfheImp.Plo -rm -f ./$(DEPDIR)/hdfhxImp.Plo -rm -f ./$(DEPDIR)/hdfnativeImp.Plo -rm -f ./$(DEPDIR)/hdfr24Imp.Plo -rm -f ./$(DEPDIR)/hdfr8Imp.Plo -rm -f ./$(DEPDIR)/hdfsdsImp.Plo -rm -f ./$(DEPDIR)/hdfstructsutil.Plo -rm -f ./$(DEPDIR)/hdfvdataImp.Plo -rm -f ./$(DEPDIR)/hdfvfImp.Plo -rm -f ./$(DEPDIR)/hdfvgroupImp.Plo -rm -f ./$(DEPDIR)/hdfvhImp.Plo -rm -f ./$(DEPDIR)/hdfvqImp.Plo -rm -f ./$(DEPDIR)/hdfvsqImp.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am 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-libLTLIBRARIES 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-libLTLIBRARIES .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/java/src/jni/h4jni.h000066400000000000000000000553301503061704500165120ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * For details of the HDF libraries, see the HDF Documentation at: * https://portal.hdfgroup.org/hdf4/ * */ #include #include #ifndef Included_h4jni #define Included_h4jni #ifdef __cplusplus #define ENVPTR (env) #define ENVONLY #else /* __cplusplus */ #define ENVPTR (*env) #define ENVONLY env #endif /* __cplusplus */ /* * Used to silence compiler when a particular * function parameter is not used. */ #define UNUSED(o) (void)o /* * Macro to check for a JNI exception after a JNI method is called. * If an exception occurred, the value of 'clearException' will determine * whether or not the exception will be cleared in order for the native * method to do its own error handling. * * If the exception does not get cleared, this macro will skip to the * cleanup+return section of the native method, since at that point * cleaning up and returning is the only safe thing that can be done. */ #define CHECK_JNI_EXCEPTION(envptr, clearException) \ do { \ if (JNI_TRUE == (*envptr)->ExceptionCheck(envptr)) { \ if (JNI_TRUE == clearException) \ (*envptr)->ExceptionClear(envptr); \ else \ goto done; \ } \ } while (0) /* Macros for class access */ /* Calling code must define ret_obj as jobject */ #define CALL_CONSTRUCTOR(envptr, classname, classsig, args, ret_obj) \ do { \ jmethodID constructor; \ jclass cls; \ \ if (NULL == (cls = (*envptr)->FindClass(envptr, (classname)))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, "JNI error: GetObjectClass"); \ } \ if (NULL == (constructor = (*envptr)->GetMethodID(envptr, cls, "", (classsig)))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, "JNI error: GetMethodID failed"); \ } \ if (NULL == (ret_obj = (*envptr)->NewObjectA(envptr, cls, constructor, (args)))) { \ printf("FATAL ERROR: %s: Creation failed\n", classname); \ CHECK_JNI_EXCEPTION(envptr, JNI_FALSE); \ } \ } while (0) /* * Macros for pinning/unpinning objects. */ #define PIN_BYTE_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetByteArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_BYTE_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (jbyte *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_BYTE_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseByteArrayElements(envptr, pinnedArray, (jbyte *)bufToRelease, freeMode); \ } while (0) #define PIN_SHORT_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetShortArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_SHORT_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (jshort *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_SHORT_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseShortArrayElements(envptr, pinnedArray, (jshort *)bufToRelease, freeMode); \ } while (0) #define PIN_INT_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetIntArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_INT_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (jint *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_INT_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseIntArrayElements(envptr, pinnedArray, (jint *)bufToRelease, freeMode); \ } while (0) #define PIN_LONG_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetLongArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_LONG_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (jlong *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_LONG_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseLongArrayElements(envptr, pinnedArray, (jlong *)bufToRelease, freeMode); \ } while (0) #define PIN_FLOAT_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetFloatArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_FLOAT_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (jfloat *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_FLOAT_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseFloatArrayElements(envptr, pinnedArray, (jfloat *)bufToRelease, freeMode); \ } while (0) #define PIN_DOUBLE_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetDoubleArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_DOUBLE_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == \ (outBuf = (jdouble *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_DOUBLE_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseDoubleArrayElements(envptr, pinnedArray, (jdouble *)bufToRelease, freeMode); \ } while (0) #define PIN_BOOL_ARRAY(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == (outBuf = (*envptr)->GetBooleanArrayElements(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define PIN_BOOL_ARRAY_CRITICAL(envptr, arrayToPin, outBuf, isCopy, failErrMsg) \ do { \ if (NULL == \ (outBuf = (jboolean *)(*envptr)->GetPrimitiveArrayCritical(envptr, arrayToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_BOOL_ARRAY(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleaseBooleanArrayElements(envptr, pinnedArray, (jboolean *)bufToRelease, freeMode); \ } while (0) #define UNPIN_ARRAY_CRITICAL(envptr, pinnedArray, bufToRelease, freeMode) \ do { \ (*envptr)->ReleasePrimitiveArrayCritical(envptr, pinnedArray, bufToRelease, freeMode); \ } while (0) /* Macros for string access */ #define PIN_JAVA_STRING(envptr, stringToPin, outString, isCopy, failErrMsg) \ do { \ if (NULL == (outString = (*envptr)->GetStringUTFChars(envptr, stringToPin, isCopy))) { \ CHECK_JNI_EXCEPTION(envptr, JNI_TRUE); \ H4_JNI_FATAL_ERROR(envptr, failErrMsg); \ } \ } while (0) #define UNPIN_JAVA_STRING(envptr, pinnedString, stringToRelease) \ do { \ (*envptr)->ReleaseStringUTFChars(envptr, pinnedString, stringToRelease); \ } while (0) #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern jboolean h4JNIFatalError(JNIEnv *, const char *); extern jboolean h4nullArgument(JNIEnv *, const char *); extern jboolean h4badArgument(JNIEnv *, const char *); extern jboolean h4outOfMemory(JNIEnv *, const char *); extern jboolean h4assertion(JNIEnv *env, const char *); extern jboolean h4NotImplemented(JNIEnv *, const char *); extern jboolean h4libraryError(JNIEnv *env); extern jboolean h4raiseException(JNIEnv *, const char *); /* * The following macros are to facilitate immediate cleanup+return * from a native JNI method when an exception is to be thrown. * Since, in general, the "cleanup" methods are the only safe JNI * methods to call once an exception has occurred, we want to immediately * cleanup and return instead of letting the native method continue. * * Note that a native method can clear the exception when one occurs and * then do its own error handling, but we instead opt to immediately return. */ #define H4_JNI_FATAL_ERROR(env, message) \ do { \ h4JNIFatalError(env, message); \ goto done; \ } while (0) #define H4_NULL_ARGUMENT_ERROR(env, message) \ do { \ h4nullArgument(env, message); \ goto done; \ } while (0) #define H4_BAD_ARGUMENT_ERROR(env, message) \ do { \ h4badArgument(env, message); \ goto done; \ } while (0) #define H4_OUT_OF_MEMORY_ERROR(env, message) \ do { \ h4outOfMemory(env, message); \ goto done; \ } while (0) #define H4_ASSERTION_ERROR(env, message) \ do { \ h4assertion(env, message); \ goto done; \ } while (0) #define H4_UNIMPLEMENTED(env, message) \ do { \ h4NotImplemented(env, message); \ goto done; \ } while (0) #define H4_LIBRARY_ERROR(env) \ do { \ h4libraryError(env); \ goto done; \ } while (0) #define H4_RAISE_EXCEPTION(env, message) \ do { \ h4raiseException(env, message); \ goto done; \ } while (0) #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_h4jni */ hdf4-hdf4.3.1/java/src/jni/hdfImp.c000066400000000000000000000247141503061704500167020ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "hfile_priv.h" /* only needed for library version symbols */ #include "h4jni.h" #include "hdfImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Class: hdf_hdflib_HDFLibrary * Method: Hopen * Signature: (Ljava/lang/String;II)J */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Hopen(JNIEnv *env, jclass clss, jstring hdfFile, jint access, jint ndds) { int32 rval = FAIL; const char *file = NULL; UNUSED(clss); if (hdfFile == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Hopen: hdfFile is null"); PIN_JAVA_STRING(ENVONLY, hdfFile, file, NULL, "Hopen: hdfFile is not pinned"); /* open HDF file specified by hdf_HDF_file */ if ((rval = Hopen(file, (intn)access, (int16)ndds)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (file) UNPIN_JAVA_STRING(ENVONLY, hdfFile, file); return (jlong)rval; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hclose * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hclose(JNIEnv *env, jclass clss, jlong fid) { intn status = 0; UNUSED(clss); if (fid < 0) { /* maybe not an exception -- the file is already closed? */ return JNI_FALSE; } /* close the HDF file */ if ((status = Hclose((int32)fid)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: HDdont_atexit * Signature: ()I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HDdont_1atexit(JNIEnv *env, jclass clss) { intn ret_value = SUCCEED; UNUSED(env); UNUSED(clss); ret_value = HDdont_atexit(); return (jint)ret_value; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hishdf * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hishdf(JNIEnv *env, jclass clss, jstring hdfFile) { const char *hfile = NULL; intn rval = FALSE; UNUSED(clss); if (hdfFile == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Hishdf: hdfFile is null"); PIN_JAVA_STRING(ENVONLY, hdfFile, hfile, NULL, "Hishdf: hdfFile is not pinned"); /* open HDF file specified by hdf_HDF_file */ if ((rval = Hishdf(hfile)) == FALSE) H4_LIBRARY_ERROR(ENVONLY); done: if (hfile) UNPIN_JAVA_STRING(ENVONLY, hdfFile, hfile); return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hnumber * Signature: (JI)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Hnumber(JNIEnv *env, jclass clss, jlong fid, jint tagtype) { int32 rval = FAIL; UNUSED(clss); if ((rval = Hnumber((int32)fid, (uint16)tagtype)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } /* * Class: hdf_hdflib_HDFLibrary * Method: DFKNTsize * Signature: (J)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFKNTsize(JNIEnv *env, jclass clss, jlong numbertype) { int rval = FAIL; UNUSED(clss); if ((rval = DFKNTsize((int32)numbertype)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hcache * Signature: (JI)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hcache(JNIEnv *env, jclass clss, jlong file_id, jint cache_switch) { intn rval = FAIL; UNUSED(clss); if ((rval = Hcache((int32)file_id, (intn)cache_switch)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hgetfileversion * Signature: (J[I[Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hgetfileversion(JNIEnv *env, jclass clss, jlong file_id, jintArray vers, jobjectArray fvstring) { intn rval = FAIL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(LIBVSTR_LEN + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Hgetfileversion: failed to allocate data buffer"); if (fvstring == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Hgetfileversion: fvstring is NULL"); PIN_INT_ARRAY(ENVONLY, vers, theArgs, &isCopy, "Hgetfileversion: vers not pinned"); if ((rval = Hgetfileversion((int32)file_id, (uint32 *)&(theArgs[0]), (uint32 *)&(theArgs[1]), (uint32 *)&(theArgs[2]), data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[LIBVSTR_LEN] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, fvstring, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, vers, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hgetlibversion * Signature: ([I[Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hgetlibversion(JNIEnv *env, jclass clss, jintArray vers, jobjectArray lvstring) { intn rval = FAIL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(LIBVSTR_LEN + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Hgetlibversion: failed to allocate data buffer"); if (lvstring == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Hgetlibversion: lvstring is NULL"); if (vers == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Hgetlibversion: vers is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, vers) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Hgetlibversion: vers input array < order 3"); PIN_INT_ARRAY(ENVONLY, vers, theArgs, &isCopy, "Hgetlibversion: vers not pinned"); if ((rval = Hgetlibversion((uint32 *)&(theArgs[0]), (uint32 *)&(theArgs[1]), (uint32 *)&(theArgs[2]), data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); fprintf(stderr, "theArgs= %d:%d:%d\n", theArgs[0], theArgs[1], theArgs[2]); fprintf(stderr, "data= %s\n", data); data[LIBVSTR_LEN] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, lvstring, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, vers, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hsetaccesstype * Signature: (JI)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hsetaccesstype(JNIEnv *env, jclass clss, jlong h_id, jint access_type) { intn rval = FAIL; UNUSED(clss); if ((rval = Hsetaccesstype((int32)h_id, (uintn)access_type)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: Hsync * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hsync(JNIEnv *env, jclass clss, jlong file_id) { intn rval = FAIL; UNUSED(clss); if ((rval = Hsync((int32)file_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: HDFclose * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HDFclose(JNIEnv *env, jclass clss, jlong file_id) { intn rval = FAIL; UNUSED(clss); if ((rval = Hclose((int32)file_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } /* * Class: hdf_hdflib_HDFLibrary * Method: HDFopen * Signature: (Ljava/lang/String;IS)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HDFopen(JNIEnv *env, jclass clss, jstring filename, jint access, jshort n_dds) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "HDFopen: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, str, NULL, "HDFopen: filename is not pinned"); if ((rval = HDFopen((char *)str, (intn)access, (int16)n_dds)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, filename, str); return rval; } #ifdef not_yet_implemented /* * Class: hdf_hdflib_HDFLibrary * Method: HDFflusdd * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HDFflusdd(JNIEnv *env, jclass clss, jlong file_id) { intn rval = FAIL; UNUSED(clss); if ((rval = Hflushdd((int32)file_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } #endif /* * Class: hdf_hdflib_HDFLibrary * Method: HDgetNTdesc * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_HDgetNTdesc(JNIEnv *env, jclass clss, jint nt) { char *rval = NULL; jstring rstring = NULL; UNUSED(clss); if ((rval = HDgetNTdesc((int32)nt)) == NULL) H4_LIBRARY_ERROR(ENVONLY); rstring = ENVPTR->NewStringUTF(ENVONLY, rval); done: free(rval); return rstring; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfImp.h000066400000000000000000000116061503061704500167030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_HDF */ #ifndef Included_hdf_hdflib_HDF #define Included_hdf_hdflib_HDF #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Class: hdf_hdflib_HDFLibrary * Method: Hopen * Signature: (Ljava/lang/String;II)J */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Hopen(JNIEnv *env, jclass clss, jstring hdfFile, jint access, jint ndds); /* * Class: hdf_hdflib_HDFLibrary * Method: Hclose * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hclose(JNIEnv *env, jclass clss, jlong fid); /* * Class: hdf_hdflib_HDFLibrary * Method: HDdont_atexit * Signature: ()I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HDdont_1atexit(JNIEnv *env, jclass clss); /* * Class: hdf_hdflib_HDFLibrary * Method: Hishdf * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hishdf(JNIEnv *env, jclass clss, jstring hdfFile); /* * Class: hdf_hdflib_HDFLibrary * Method: Hnumber * Signature: (JI)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Hnumber(JNIEnv *env, jclass clss, jlong fid, jint tagtype); /* * Class: hdf_hdflib_HDFLibrary * Method: DFKNTsize * Signature: (J)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFKNTsize(JNIEnv *env, jclass clss, jlong numbertype); /* * Class: hdf_hdflib_HDFLibrary * Method: Hcache * Signature: (JI)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hcache(JNIEnv *env, jclass clss, jlong file_id, jint cache_switch); /* * Class: hdf_hdflib_HDFLibrary * Method: Hgetfileversion * Signature: (J[I[Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hgetfileversion(JNIEnv *env, jclass clss, jlong file_id, jintArray vers, jobjectArray fvstring); /* * Class: hdf_hdflib_HDFLibrary * Method: Hgetlibversion * Signature: ([I[Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hgetlibversion(JNIEnv *env, jclass clss, jintArray vers, jobjectArray lvstring); /* * Class: hdf_hdflib_HDFLibrary * Method: Hsetaccesstype * Signature: (JI)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hsetaccesstype(JNIEnv *env, jclass clss, jlong h_id, jint access_type); /* * Class: hdf_hdflib_HDFLibrary * Method: Hsync * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Hsync(JNIEnv *env, jclass clss, jlong file_id); /* * Class: hdf_hdflib_HDFLibrary * Method: HDFclose * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HDFclose(JNIEnv *env, jclass clss, jlong file_id); /* * Class: hdf_hdflib_HDFLibrary * Method: HDFopen * Signature: (Ljava/lang/String;IS)I */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HDFopen(JNIEnv *env, jclass clss, jstring filename, jint access, jshort n_dds); #ifdef not_yet_implemented /* * Class: hdf_hdflib_HDFLibrary * Method: HDFflusdd * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HDFflusdd(JNIEnv *env, jclass clss, jlong file_id); #endif /* * Class: hdf_hdflib_HDFLibrary * Method: HDgetNTdesc * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_HDgetNTdesc(JNIEnv *env, jclass clss, jint nt); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_HDF */ hdf4-hdf4.3.1/java/src/jni/hdfanImp.c000066400000000000000000000225771503061704500172260ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4.2 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include #include "hdf.h" #include "h4jni.h" #include "hdfanImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANstart(JNIEnv *env, jclass clss, jlong file_id) { int32 rval = -1; UNUSED(clss); if ((rval = ANstart((int32)file_id)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANend(JNIEnv *env, jclass clss, jlong anid) { int32 rval = FAIL; UNUSED(clss); if ((rval = ANend((int32)anid)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANfileinfo(JNIEnv *env, jclass clss, jlong anid, jintArray info) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (info == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANfileinfo: info is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, info) < 4) H4_BAD_ARGUMENT_ERROR(ENVONLY, "ANfileinfo: info input array < order 4"); PIN_INT_ARRAY(ENVONLY, info, theArgs, &isCopy, "ANfileinfo: info input array not pinned"); if ((rval = ANfileinfo((int32)anid, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]), (int32 *)&(theArgs[3]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, info, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANselect(JNIEnv *env, jclass clss, jlong anid, jint index, jint anntype) { int32 rval = -1; UNUSED(clss); if ((rval = ANselect((int32)anid, (int32)index, (ann_type)anntype)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANendaccess(JNIEnv *env, jclass clss, jlong ann_id) { intn rval = FAIL; UNUSED(clss); if ((rval = ANendaccess((int32)ann_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANnumann(JNIEnv *env, jclass clss, jlong an_id, jint anntype, jshort tag, jshort ref) { int32 rval = -1; UNUSED(clss); if ((rval = ANnumann((int32)an_id, (ann_type)anntype, (uint16)tag, (uint16)ref)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_ANatype2tag(JNIEnv *env, jclass clss, jint antype) { uint16 rval = -1; UNUSED(clss); if ((rval = ANatype2tag((ann_type)antype)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jshort)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANtag2atype(JNIEnv *env, jclass clss, jint antag) { int32 rval = -1; UNUSED(clss); if ((rval = ANtag2atype((uint16)antag)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANannlist(JNIEnv *env, jclass clss, jlong an_id, jint anntype, jshort tag, jshort ref, jintArray annlist) { intn rval = FAIL; jint *iarr = NULL; jboolean isCopy; UNUSED(clss); if (annlist == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANannlist: annlist is NULL"); PIN_INT_ARRAY(ENVONLY, annlist, iarr, &isCopy, "ANannlist: annlist not pinned"); if ((rval = ANannlist((int32)an_id, (ann_type)anntype, (uint16)tag, (uint16)ref, (int32 *)iarr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (iarr) UNPIN_INT_ARRAY(ENVONLY, annlist, iarr, (rval == FAIL) ? JNI_ABORT : 0); return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANannlen(JNIEnv *env, jclass clss, jlong ann_id) { int32 rval = -1; UNUSED(clss); if ((rval = ANannlen((int32)ann_id)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANreadann(JNIEnv *env, jclass clss, jlong ann_id, jobjectArray annbuf, jint maxlen) { int32 rval = FAIL; char *data = NULL; jstring rstring; UNUSED(clss); if (NULL == (data = (char *)malloc(sizeof(char) * (size_t)maxlen + 1))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "ANreadan: failed to allocate data buffer"); if (annbuf == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANreadan: annbuf is NULL"); /* read annotation from HDF */ if ((rval = ANreadann((int32)ann_id, data, (int32)maxlen)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[maxlen] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, annbuf, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANcreate(JNIEnv *env, jclass clss, jlong an_id, jshort tag, jshort ref, jint type) { int32 rval = -1; UNUSED(clss); if ((rval = ANcreate((int32)an_id, (uint16)tag, (uint16)ref, (ann_type)type)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANcreatef(JNIEnv *env, jclass clss, jlong an_id, jint type) { int32 rval = -1; UNUSED(clss); if ((rval = ANcreatef((int32)an_id, (ann_type)type)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANget_1tagref(JNIEnv *env, jclass clss, jlong an_id, jint index, jint type, jshortArray tagref) { int32 rval = FAIL; short *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (tagref == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANget_tagref: tagref is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, tagref) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "ANget_tagref: tagref input array < order 2"); PIN_SHORT_ARRAY(ENVONLY, tagref, theArgs, &isCopy, "ANget_tagref: tagref not pinned"); if ((rval = ANget_tagref((int32)an_id, (int32)index, (ann_type)type, (uint16 *)&(theArgs[0]), (uint16 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_SHORT_ARRAY(ENVONLY, tagref, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANid2tagref(JNIEnv *env, jclass clss, jlong an_id, jshortArray tagref) { int32 rval = FAIL; short *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (tagref == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANid2tagref: tagref is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, tagref) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "ANid2tagref: tagref input array < order 2"); PIN_SHORT_ARRAY(ENVONLY, tagref, theArgs, &isCopy, "ANid2tagref: tagref not pinned"); if ((rval = ANid2tagref((int32)an_id, (uint16 *)&(theArgs[0]), (uint16 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_SHORT_ARRAY(ENVONLY, tagref, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANtagref2id(JNIEnv *env, jclass clss, jlong an_id, jshort tag, jshort ref) { int32 rval = -1; UNUSED(clss); if ((rval = ANtagref2id((int32)an_id, (uint16)tag, (uint16)ref)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANwriteann(JNIEnv *env, jclass clss, jlong ann_id, jstring label, jint ann_length) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (label == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "ANwriteann: label is NULL"); PIN_JAVA_STRING(ENVONLY, label, str, NULL, "ANwriteann: label not pinned"); if ((rval = ANwriteann((int32)ann_id, str, (int32)ann_length)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, label, str); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfanImp.h000066400000000000000000000077411503061704500172270ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include /* Header for class hdf_hdflib_AN */ #ifndef Included_hdf_hdflib_AN #define Included_hdf_hdflib_AN #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANstart(JNIEnv *env, jclass clss, jlong file_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANend(JNIEnv *env, jclass clss, jlong anid); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANfileinfo(JNIEnv *env, jclass clss, jlong anid, jintArray info); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANselect(JNIEnv *env, jclass clss, jlong anid, jint index, jint anntype); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANendaccess(JNIEnv *env, jclass clss, jlong ann_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANnumann(JNIEnv *env, jclass clss, jlong an_id, jint anntype, jshort tag, jshort ref); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_ANatype2tag(JNIEnv *env, jclass clss, jint antype); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANtag2atype(JNIEnv *env, jclass clss, jint antag); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANannlist(JNIEnv *env, jclass clss, jlong an_id, jint anntype, jshort tag, jshort ref, jintArray annlist); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANannlen(JNIEnv *env, jclass clss, jlong ann_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANreadann(JNIEnv *env, jclass clss, jlong ann_id, jobjectArray annbuf, jint maxlen); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANcreate(JNIEnv *env, jclass clss, jlong an_id, jshort tag, jshort ref, jint type); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANcreatef(JNIEnv *env, jclass clss, jlong an_id, jint type); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_ANget_1tagref(JNIEnv *env, jclass clss, jlong an_id, jint index, jint type, jshortArray tagref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANid2tagref(JNIEnv *env, jclass clss, jlong an_id, jshortArray tagref); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_ANtagref2id(JNIEnv *env, jclass clss, jlong an_id, jshort tag, jshort ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_ANwriteann(JNIEnv *env, jclass clss, jlong ann_id, jstring label, jint ann_length); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_AN */ hdf4-hdf4.3.1/java/src/jni/hdfdfpalImp.c000066400000000000000000000146431503061704500177110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4.2 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include #include "hdf.h" #include "h4jni.h" #include "hdfdfpalImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPaddpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPaddpal: filename is null"); if (palette == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPaddpal: palette is NULL"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPaddpal: filename not pinned"); PIN_BYTE_ARRAY(ENVONLY, palette, dat, &isCopy, "DFPaddpal: palette not pinned"); if ((rval = DFPaddpal(fstr, (void *)dat)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_BYTE_ARRAY(ENVONLY, palette, dat, (rval == FAIL) ? JNI_ABORT : 0); if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPgetpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPgetpal: filename is null"); if (palette == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPgetpal: palette is NULL"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPgetpal: filename not pinned"); PIN_BYTE_ARRAY(ENVONLY, palette, dat, &isCopy, "DFPgetpal: palette not pinned"); if ((rval = DFPgetpal(fstr, (void *)dat)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_BYTE_ARRAY(ENVONLY, palette, dat, (rval == FAIL) ? JNI_ABORT : 0); if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFPlastref(JNIEnv *env, jclass clss) { UNUSED(env); UNUSED(clss); return (DFPlastref()); } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFPnpals(JNIEnv *env, jclass clss, jstring filename) { intn rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPnpals: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPnpals: filename not pinned"); if ((rval = DFPnpals(fstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPputpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette, jint overwrite, jstring filemode) { intn rval = FAIL; const char *fstr = NULL; const char *mstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPputpal: filename is null"); if (filemode == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPputpal: filemode is null"); if (palette == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPputpal: palette is NULL"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPputpal: filename not pinned"); PIN_JAVA_STRING(ENVONLY, filemode, mstr, NULL, "DFPputpal: filemode not pinned"); PIN_BYTE_ARRAY(ENVONLY, palette, dat, &isCopy, "DFPputpal: palette not pinned"); if ((rval = DFPputpal(fstr, (void *)dat, (intn)overwrite, mstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_BYTE_ARRAY(ENVONLY, palette, dat, (rval == FAIL) ? JNI_ABORT : 0); if (mstr) UNPIN_JAVA_STRING(ENVONLY, filemode, mstr); if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPreadref(JNIEnv *env, jclass clss, jstring filename, jshort ref) { intn rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPreadref: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPreadref: filename not pinned"); if ((rval = DFPreadref((char *)fstr, (uint16)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFPrestart(JNIEnv *env, jclass clss) { UNUSED(env); UNUSED(clss); return (DFPrestart()); } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPwriteref(JNIEnv *env, jclass clss, jstring filename, jshort ref) { intn rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPwriteref: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPwriteref: filename not pinned"); if ((rval = DFPwriteref((char *)fstr, (uint16)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfdfpalImp.h000066400000000000000000000053611503061704500177130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4.2 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_DFPAL */ #ifndef Included_hdf_hdflib_DFPAL #define Included_hdf_hdflib_DFPAL #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPaddpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPgetpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFPlastref(JNIEnv *env, jclass clss); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFPnpals(JNIEnv *env, jclass clss, jstring filename); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPputpal(JNIEnv *env, jclass clss, jstring filename, jbyteArray palette, jint overwrite, jstring filemode); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPreadref(JNIEnv *env, jclass clss, jstring filename, jshort ref); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFPrestart(JNIEnv *env, jclass clss); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFPwriteref(JNIEnv *env, jclass clss, jstring filename, jshort ref); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_DFPAL */ hdf4-hdf4.3.1/java/src/jni/hdfdfuImp.c000066400000000000000000000041231503061704500173710ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfdfuImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFUfptoimage(JNIEnv *env, jclass clss, jint hdim, jint vdim, jfloat max, jfloat min, jfloatArray hscale, jfloatArray vscale, jfloatArray data, jbyteArray palette, jstring outfile, jint ct_method, jint hres, jint vres, jint compress) { UNUSED(clss); UNUSED(hdim); UNUSED(vdim); UNUSED(max); UNUSED(min); UNUSED(hscale); UNUSED(vscale); UNUSED(data); UNUSED(palette); UNUSED(outfile); UNUSED(ct_method); UNUSED(hres); UNUSED(vres); UNUSED(compress); H4_UNIMPLEMENTED(ENVONLY, "DFUfptoimage (windows)"); done: return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfdfuImp.h000066400000000000000000000040261503061704500174000ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_DFU */ #ifndef Included_hdf_hdflib_DFU #define Included_hdf_hdflib_DFU #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFUfptoimage(JNIEnv *env, jclass clss, jint hdim, jint vdim, jfloat max, jfloat min, jfloatArray hscale, jfloatArray vscale, jfloatArray data, jbyteArray palette, jstring outfile, jint ct_method, jint hres, jint vres, jint compress); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_DFU */ hdf4-hdf4.3.1/java/src/jni/hdfexceptionImp.c000066400000000000000000000267051503061704500206230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This is a utility program used by the HDF Java-C wrapper layer to * generate exceptions. This may be called from any part of the * Java-C interface. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfexceptionImp.h" /********************/ /* Local Macros */ /********************/ #define THROWEXCEPTION(className, args) \ { \ jmethodID jm; \ jclass jc; \ jobject ex; \ \ if (NULL == (jc = ENVPTR->FindClass(ENVONLY, (className)))) \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ \ if (NULL == (jm = ENVPTR->GetMethodID(ENVONLY, jc, "", "(Ljava/lang/String;)V"))) { \ printf("THROWEXCEPTION FATAL ERROR: GetMethodID failed\n"); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ \ if (NULL == (ex = ENVPTR->NewObjectA(ENVONLY, jc, jm, (jvalue *)(args)))) { \ printf("THROWEXCEPTION FATAL ERROR: Class %s: Creation failed\n", (className)); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ \ if (ENVPTR->Throw(ENVONLY, (jthrowable)ex) < 0) { \ printf("THROWEXCEPTION FATAL ERROR: Class %s: Throw failed\n", (className)); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ } #define THROWINTEXCEPTION(className, args) \ { \ jmethodID jm; \ jclass jcls; \ jobject ex; \ \ if (NULL == (jcls = ENVPTR->FindClass(ENVONLY, (className)))) \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ \ if (NULL == (jm = ENVPTR->GetMethodID(ENVONLY, jcls, "", "(I)V"))) { \ printf("THROWEXCEPTION FATAL ERROR: GetMethodID failed\n"); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ \ if (NULL == (ex = ENVPTR->NewObjectA(ENVONLY, jcls, jm, (jvalue *)(args)))) { \ printf("THROWEXCEPTION FATAL ERROR: Class %s: Creation failed\n", (className)); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ \ if (ENVPTR->Throw(ENVONLY, (jthrowable)ex) < 0) { \ printf("THROWEXCEPTION FATAL ERROR: Class %s: Throw failed\n", (className)); \ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); \ } \ } /********************/ /* Local Prototypes */ /********************/ static jboolean H4JNIErrorClass(JNIEnv *env, const char *message, const char *className); #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Class: hdf_hdflib_HDFLibraryException * Method: printStackTrace0 * Signature: (Ljava/lang/Object;)V * * Call the HDF library to print the HDF error stack to 'file_name'. */ JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibraryException_printStackTrace0(JNIEnv *env, jobject obj, jstring file_name) { FILE *stream = NULL; const char *file = NULL; UNUSED(obj); if (NULL == file_name) { HEprint(stderr, 0); } else { PIN_JAVA_STRING(ENVONLY, file_name, file, NULL, "printStackTrace0: file name not pinned"); if ((stream = fopen(file, "a+"))) { HEprint(stream, 0); fclose(stream); } } done: if (file) UNPIN_JAVA_STRING(ENVONLY, file_name, file); return; } /* end Java_hdf_hdflib_HDFLibraryException_printStackTrace0() */ /* * Routine to raise particular Java exceptions from C. */ static jboolean H4JNIErrorClass(JNIEnv *env, const char *message, const char *className) { jstring str; char *args[2]; jboolean rval = JNI_FALSE; if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, message))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); args[0] = (char *)str; args[1] = 0; THROWEXCEPTION(className, args); rval = JNI_TRUE; done: return rval; } /* end H4JNIErrorClass() */ /* * Create and throw an 'outOfMemoryException' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4outOfMemory(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "java/lang/OutOfMemoryError"); } /* end h4outOfMemory() */ /* * Create and throw an 'AssertionError' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4assertion(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "java/lang/AssertionError"); } /* end h4assertion() */ /* * A fatal error in a JNI call * Create and throw an 'InternalError' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4JNIFatalError(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "java/lang/InternalError"); } /* end h4JNIFatalError() */ /* * A NULL argument in an HDF call * Create and throw an 'NullPointerException' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4nullArgument(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "java/lang/NullPointerException"); } /* end h4nullArgument() */ /* * A bad argument in an HDF call * Create and throw an 'IllegalArgumentException' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4badArgument(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "java/lang/IllegalArgumentException"); } /* end h4badArgument() */ /* * Some feature Not implemented yet * Create and throw an 'UnsupportedOperationException' * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4NotImplemented(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "hdf/hdflib/HDFNotImplementedException"); } /* end h4NotImplemented() */ /* h4raiseException(). This routine is called to generate * an arbitrary Java exception with a particular message. * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4raiseException(JNIEnv *env, const char *message) { return H4JNIErrorClass(env, message, "hdf/hdflib/HDFLibraryException"); } /* end h4raiseException() */ /* for now: use top of exception stack: fix this to do whole stack */ /* * h4libraryError() creates and throws the appropriate sub-class of * HDFLibraryException(). This routine should be called * whenever a call to the HDF library fails, i.e., when * the return is -1. * * Note: This routine never returns from the 'throw', * and the Java native method immediately raises the * exception. */ jboolean h4libraryError(JNIEnv *env) { int16 errval; jclass jc; int args[2]; jboolean rval = JNI_FALSE; const char *exception = "hdf/hdflib/HDFLibraryException"; errval = HEvalue((int32)1); /* * No error detected in error stack. */ if (errval == DFE_NONE) goto done; args[0] = errval; args[1] = 0; THROWINTEXCEPTION(exception, args); jc = ENVPTR->FindClass(ENVONLY, exception); if (jc != NULL) ENVPTR->ThrowNew(ENVONLY, jc, HEstring((hdf_err_code_t)errval)); rval = JNI_TRUE; done: return rval; } /* end h4libraryError() */ #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfexceptionImp.h000066400000000000000000000034301503061704500206160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This is a utility program used by the HDF Java-C wrapper layer to * generate exceptions. This may be called from any part of the * Java-C interface. * */ #include /* Header for class hdf_hdflib_Exception */ #ifndef Included_hdf_hdflib_Exception #define Included_hdf_hdflib_Exception #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Class: hdf_hdflib_HDFLibraryException * Method: printStackTrace0 * Signature: (Ljava/lang/Object;)V * * Call the HDF library to print the HDF error stack to 'file_name'. */ JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibraryException_printStackTrace0(JNIEnv *env, jobject obj, jstring file_name); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_Exception */ hdf4-hdf4.3.1/java/src/jni/hdfgrImp.c000066400000000000000000000652231503061704500172330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "h4jni.h" #include "hdfgrImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern jboolean makeChunkInfo(JNIEnv *env, jobject chunkobj, int32 flgs, HDF_CHUNK_DEF *cinf); extern jboolean getNewCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); extern jboolean setNewCompInfo(JNIEnv *env, jobject ciobj, comp_coder_t coder, comp_info *cinf); extern jboolean getChunkInfo(JNIEnv *env, jobject chunkobj, HDF_CHUNK_DEF *cinf); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRstart(JNIEnv *env, jclass clss, jlong file_id) { intn rval = FAIL; UNUSED(clss); if ((rval = GRstart((int32)file_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRend(JNIEnv *env, jclass clss, jlong gr_id) { intn rval = FAIL; UNUSED(clss); if ((rval = GRend((int32)gr_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRendaccess(JNIEnv *env, jclass clss, jlong gr_id) { intn rval = FAIL; UNUSED(clss); if ((rval = GRendaccess((int32)gr_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRfileinfo(JNIEnv *env, jclass clss, jlong gr_id, jintArray argv) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; /* dummy */ UNUSED(clss); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRfileinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRfileinfo: argv input array < order 2"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "GRfileinfo: argv not pinned"); if ((rval = GRfileinfo((int32)gr_id, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval = FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRselect(JNIEnv *env, jclass clss, jlong gr_id, jint index) { int32 rval = FAIL; UNUSED(clss); if ((rval = GRselect((int32)gr_id, (int32)index)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRnametoindex(JNIEnv *env, jclass clss, jlong gr_id, jstring gr_name) { int32 rval = -1; const char *str = NULL; UNUSED(clss); if (gr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRnametoindex: gr_name is null"); PIN_JAVA_STRING(ENVONLY, gr_name, str, NULL, "GRnametoindex: gr_name not pinned"); if ((rval = GRnametoindex((int32)gr_id, str)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, gr_name, str); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetchunkinfo(JNIEnv *env, jclass clss, jlong grsid, jobject chunk_def, jintArray cflags) { int32 rval = FAIL; HDF_CHUNK_DEF cdef; jboolean stat = JNI_FALSE; jint *flgs = NULL; jboolean isCopy; UNUSED(clss); if (cflags == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetchunkinfo: cflags is NULL"); PIN_INT_ARRAY(ENVONLY, cflags, flgs, &isCopy, "GRgetchunkinfo: cflags not pinned"); if ((rval = GRgetchunkinfo((int32)grsid, &cdef, (int32 *)&(flgs[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); stat = JNI_TRUE; if (*flgs != 0) { /* convert cdef to HDFchunkinfo */ stat = makeChunkInfo(env, chunk_def, *flgs, &cdef); } done: if (flgs) UNPIN_INT_ARRAY(ENVONLY, cflags, flgs, (rval = FAIL) ? JNI_ABORT : 0); return stat /*JNI_TRUE*/; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetiminfo(JNIEnv *env, jclass clss, jlong ri_id, jobjectArray gr_name, jintArray argv, jintArray dim_sizes) { intn rval = FAIL; jint *dims = NULL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(H4_MAX_GR_NAME + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "GRgetiminfo: failed to allocate data buffer"); if (gr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetiminfo: gr_name is NULL"); if (dim_sizes == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetiminfo: dim_sizes is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, dim_sizes) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRgetiminfo: dim_sizes input array < order 2"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetiminfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 4) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRgetiminfo: argv input array < order 4"); PIN_INT_ARRAY(ENVONLY, dim_sizes, dims, &isCopy, "GRgetiminfo: dim_sizes not pinned"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "GRgetiminfo: argv not pinned"); if ((rval = GRgetiminfo((int32)ri_id, (char *)data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]), (int32 *)dims, (int32 *)&(theArgs[3]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[H4_MAX_GR_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, gr_name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval = FAIL) ? JNI_ABORT : 0); if (dims) UNPIN_INT_ARRAY(ENVONLY, dim_sizes, dims, (rval = FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadimage(JNIEnv *env, jclass clss, jlong ri_id, jintArray start, jintArray stride, jintArray edge, jbyteArray data) { intn rval = FAIL; jbyte *arr = NULL; jint *strt = NULL; jint *strd = NULL; jint *edg = NULL; jboolean isCopy; UNUSED(clss); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadimage: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadimage: start is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, start) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRreadimage: start input array < order 2"); if (edge == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadimage: edge is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, edge) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRreadimage: edge input array < order 2"); PIN_BYTE_ARRAY(ENVONLY, data, arr, &isCopy, "GRreadimage: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "GRreadimage: start not pinned"); PIN_INT_ARRAY(ENVONLY, edge, edg, &isCopy, "GRreadimage: edge not pinned"); if (stride == NULL) strd = NULL; else PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "GRreadimage: stride not pinned"); if ((rval = GRreadimage((int32)ri_id, (int32 *)strt, (int32 *)strd, (int32 *)edg, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (edg) UNPIN_INT_ARRAY(ENVONLY, edge, edg, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_BYTE_ARRAY(ENVONLY, data, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_GRidtoref(JNIEnv *env, jclass clss, jlong gr_id) { uint16 rval = -1; UNUSED(clss); if ((rval = GRidtoref((int32)gr_id)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jshort)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRreftoindex(JNIEnv *env, jclass clss, jlong gr_id, jshort ref) { int32 rval = -1; UNUSED(clss); if ((rval = GRreftoindex((int32)gr_id, (uint16)ref)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreqlutil(JNIEnv *env, jclass clss, jlong gr_id, jint interlace_mode) { intn rval = FAIL; UNUSED(clss); if ((rval = GRreqlutil((int32)gr_id, (intn)interlace_mode)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreqimageil(JNIEnv *env, jclass clss, jlong gr_id, jint interlace_mode) { intn rval = FAIL; UNUSED(clss); if ((rval = GRreqimageil((int32)gr_id, (intn)interlace_mode)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRgetlutid(JNIEnv *env, jclass clss, jlong gr_id, jint index) { int32 rval = -1; UNUSED(clss); if ((rval = GRgetlutid((int32)gr_id, (int32)index)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRgetnluts(JNIEnv *env, jclass clss, jlong gr_id) { intn rval = -1; UNUSED(clss); if ((rval = GRgetnluts((int32)gr_id)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetlutinfo(JNIEnv *env, jclass clss, jlong ri_id, jintArray argv) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetlutinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 4) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRgetlutinfo: argv input array < order 4"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "GRgetlutinfo: argv not pinned"); if ((rval = GRgetlutinfo((int32)ri_id, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]), (int32 *)&(theArgs[3]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval = FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadlut(JNIEnv *env, jclass clss, jlong pal_id, jbyteArray pal_data) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; UNUSED(clss); if (pal_data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadlut: pal_data is NULL"); PIN_BYTE_ARRAY(ENVONLY, pal_data, arr, &isCopy, "GRreadlut: pal_data not pinned"); if ((rval = GRreadlut((int32)pal_id, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, pal_data, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRattrinfo(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jobjectArray name, jintArray argv) { int32 rval = FAIL; char *data = NULL; jint *theArgs = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); /* check for out of memory error ... */ if ((data = (char *)malloc(H4_MAX_GR_NAME + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "GRattrinfo: failed to allocate data buffer"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRattrinfo: name is NULL"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRattrinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRattrinfo: argv input array < order 2"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "GRattrinfo: argv not pinned"); if ((rval = GRattrinfo((int32)gr_id, (int32)attr_index, (char *)data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[H4_MAX_GR_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetattr(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; UNUSED(clss); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetattr: values is NULL"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "GRgetattr: values not pinned"); if ((rval = GRgetattr((int32)gr_id, (int32)attr_index, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRfindattr(JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name) { int32 rval = -1; const char *str = NULL; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetattr: attr_name is null"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "GRsetattr: attr_name not pinned"); if ((rval = GRfindattr((int32)gr_id, str)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return (jint)rval; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRcreate(JNIEnv *env, jclass clss, jlong gr_id, jstring name, jint ncomp, jlong data_type, jint interlace_mode, jintArray dim_sizes) { int32 rval = -1; jint *dims = NULL; const char *str = NULL; jboolean isCopy; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRcreate: name is null"); if (dim_sizes == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRcreate: dim_sizes is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, dim_sizes) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRcreate: dim_sizes input array < order 2"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "GRcreate: name not pinned"); PIN_INT_ARRAY(ENVONLY, dim_sizes, dims, &isCopy, "GRcreate: dim_sizes not pinned"); if ((rval = GRcreate((int32)gr_id, str, (int32)ncomp, (int32)data_type, (int32)interlace_mode, (int32 *)dims)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (dims) UNPIN_INT_ARRAY(ENVONLY, dim_sizes, dims, (rval < 0) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); return (jlong)rval; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_GRluttoref(JNIEnv *env, jclass clss, jlong pal_id) { uint16 rval = -1; UNUSED(clss); if ((rval = GRluttoref((int32)pal_id)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jshort)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetattr__JLjava_lang_String_2JILjava_lang_String_2( JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jstring values) { intn rval = FAIL; const char *str = NULL; const char *val = NULL; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetattr: values is null"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "GRsetattr: attr_name not pinned"); PIN_JAVA_STRING(ENVONLY, values, val, NULL, "GRsetattr: values not pinned"); if ((rval = GRsetattr((int32)gr_id, str, (int32)data_type, (int32)count, (void *)val)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (val) UNPIN_JAVA_STRING(ENVONLY, values, val); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetattr__JLjava_lang_String_2JI_3B(JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; const char *str = NULL; jboolean isCopy; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetattr: values is NULL"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "GRsetattr: attr_name not pinned"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "GRsetattr: values not pinned"); if ((rval = GRsetattr((int32)gr_id, str, (int32)data_type, (int32)count, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetcompress(JNIEnv *env, jclass clss, jlong ri_id, jint comp_type, jobject c_info) { intn rval = FAIL; comp_info cinf; UNUSED(clss); if (c_info == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetcompress: c_info is NULL"); if (!getNewCompInfo(env, c_info, &cinf)) H4_JNI_FATAL_ERROR(ENVONLY, "GRsetcompress: c_info not initialized"); if ((rval = GRsetcompress((int32)ri_id, (comp_coder_t)comp_type, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetcompress(JNIEnv *env, jclass clss, jlong ri_id, jobject c_info) { intn rval = FAIL; comp_coder_t coder; comp_info cinf; UNUSED(clss); if (c_info == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetcompress: c_info is NULL"); if ((rval = GRgetcompress((int32)ri_id, (comp_coder_t *)&coder, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (!setNewCompInfo(env, c_info, coder, &cinf)) H4_JNI_FATAL_ERROR(ENVONLY, "GRgetcompress: c_info not created"); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetcompinfo(JNIEnv *env, jclass clss, jlong ri_id, jobject c_info) { intn rval = FAIL; comp_coder_t coder; comp_info cinf; UNUSED(clss); if (c_info == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRgetcompinfo: c_info is NULL"); if ((rval = GRgetcompinfo((int32)ri_id, (comp_coder_t *)&coder, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (!setNewCompInfo(env, c_info, coder, &cinf)) H4_JNI_FATAL_ERROR(ENVONLY, "GRgetcompinfo: c_info not created"); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetchunk(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jint flags) { intn rval = FAIL; HDF_CHUNK_DEF c_def; UNUSED(clss); if (chunk_def == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetchunk: chunk_def is NULL"); if (!getChunkInfo(env, chunk_def, &c_def)) H4_JNI_FATAL_ERROR(ENVONLY, "GRsetchunk: chunk_def not initialized"); if ((rval = GRsetchunk((int32)sdsid, c_def, (int32)flags)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRsetchunkcache(JNIEnv *env, jclass clss, jlong sdsid, jint maxcache, jint flags) { intn rval = FAIL; UNUSED(clss); if ((rval = GRsetchunkcache((int32)sdsid, (int32)maxcache, (int32)flags)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetexternalfile(JNIEnv *env, jclass clss, jlong ri_id, jstring filename, jint offset) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRsetexternalfile: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, str, NULL, "GRsetexternalfile: filename not pinned"); if ((rval = GRsetexternalfile((int32)ri_id, str, (int32)offset)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, filename, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwriteimage(JNIEnv *env, jclass clss, jlong ri_id, jintArray start, jintArray stride, jintArray edge, jbyteArray data) { intn rval = FAIL; jbyte *arr = NULL; jint *strt = NULL; jint *strd = NULL; jint *edg = NULL; jboolean isCopy; UNUSED(clss); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwriteimage: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwriteimage: start is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, start) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRwriteimage: start input array < order 2"); if (edge == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwriteimage: edge is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, edge) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRwriteimage: edge input array < order 2"); PIN_BYTE_ARRAY(ENVONLY, data, arr, &isCopy, "GRwriteimage: dat not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "GRwriteimage: start not pinned"); PIN_INT_ARRAY(ENVONLY, edge, edg, &isCopy, "GRwriteimage: edge not pinned"); if (stride == NULL) strd = NULL; else PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "GRwriteimage: stride not pinned"); if ((rval = GRwriteimage((int32)ri_id, (int32 *)strt, (int32 *)strd, (int32 *)edg, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (edg) UNPIN_INT_ARRAY(ENVONLY, edge, edg, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_BYTE_ARRAY(ENVONLY, data, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwritelut(JNIEnv *env, jclass clss, jlong pal_id, jint ncomp, jint data_type, jint interlace, jint num_entries, jbyteArray pal_data) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; UNUSED(clss); if (pal_data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwritelut: pal_data is NULL"); PIN_BYTE_ARRAY(ENVONLY, pal_data, arr, &isCopy, "GRwritelut: pal_data not pinned"); if ((rval = GRwritelut((int32)pal_id, (int32)ncomp, (int32)data_type, (int32)interlace, (int32)num_entries, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, pal_data, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadchunk(JNIEnv *env, jclass clss, jlong grid, jintArray origin, jbyteArray dat) { int32 rval = FAIL; jbyte *arr = NULL; jint *org = NULL; jboolean isCopy; UNUSED(clss); if (dat == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadchunk: dat is NULL"); if (origin == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRreadchunk: origin is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, origin) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRreadchunk: origin input array < order 2"); PIN_BYTE_ARRAY(ENVONLY, dat, arr, &isCopy, "GRreadchunk: dat not pinned"); PIN_INT_ARRAY(ENVONLY, origin, org, &isCopy, "GRreadchunk: origin not pinned"); if ((rval = GRreadchunk((int32)grid, (int32 *)org, arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (org) UNPIN_INT_ARRAY(ENVONLY, origin, org, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_BYTE_ARRAY(ENVONLY, dat, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwritechunk(JNIEnv *env, jclass clss, jlong grid, jintArray origin, jbyteArray dat) { int32 rval = FAIL; jbyte *arr = NULL; jint *org = NULL; jboolean isCopy; UNUSED(clss); if (dat == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwritechunk: dat is NULL"); if (origin == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "GRwritechunk: origin is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, origin) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "GRwritechunk: origin input array < order 2"); PIN_BYTE_ARRAY(ENVONLY, dat, arr, &isCopy, "GRwritechunk: dat not pinned"); PIN_INT_ARRAY(ENVONLY, origin, org, &isCopy, "GRwritechunk: origin not pinned"); if ((rval = GRwritechunk((int32)grid, (int32 *)org, (char *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (org) UNPIN_INT_ARRAY(ENVONLY, origin, org, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_BYTE_ARRAY(ENVONLY, dat, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfgrImp.h000066400000000000000000000200261503061704500172300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_GR */ #ifndef Included_hdf_hdflib_GR #define Included_hdf_hdflib_GR #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRstart(JNIEnv *env, jclass clss, jlong file_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRend(JNIEnv *env, jclass clss, jlong gr_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRendaccess(JNIEnv *env, jclass clss, jlong gr_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRfileinfo(JNIEnv *env, jclass clss, jlong gr_id, jintArray argv); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRselect(JNIEnv *env, jclass clss, jlong gr_id, jint index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRnametoindex(JNIEnv *env, jclass clss, jlong gr_id, jstring gr_name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetchunkinfo(JNIEnv *env, jclass clss, jlong grsid, jobject chunk_def, jintArray cflags); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetiminfo(JNIEnv *env, jclass clss, jlong ri_id, jobjectArray gr_name, jintArray argv, jintArray dim_sizes); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadimage(JNIEnv *env, jclass clss, jlong ri_id, jintArray start, jintArray stride, jintArray edge, jbyteArray data); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_GRidtoref(JNIEnv *env, jclass clss, jlong gr_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRreftoindex(JNIEnv *env, jclass clss, jlong gr_id, jshort ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreqlutil(JNIEnv *env, jclass clss, jlong gr_id, jint interlace_mode); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreqimageil(JNIEnv *env, jclass clss, jlong gr_id, jint interlace_mode); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRgetlutid(JNIEnv *env, jclass clss, jlong gr_id, jint index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRgetnluts(JNIEnv *env, jclass clss, jlong gr_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetlutinfo(JNIEnv *env, jclass clss, jlong ri_id, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadlut(JNIEnv *env, jclass clss, jlong pal_id, jbyteArray pal_data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRattrinfo(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jobjectArray name, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetattr(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jbyteArray values); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRfindattr(JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_GRcreate(JNIEnv *env, jclass clss, jlong gr_id, jstring name, jint ncomp, jlong data_type, jint interlace_mode, jintArray dim_sizes); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_GRluttoref(JNIEnv *env, jclass clss, jlong pal_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetattr__JLjava_lang_String_2JILjava_lang_String_2( JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jstring values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetattr__JLjava_lang_String_2JI_3B( JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jbyteArray values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetcompress(JNIEnv *env, jclass clss, jlong ri_id, jint comp_type, jobject c_info); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetcompress(JNIEnv *env, jclass clss, jlong ri_id, jobject c_info); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRgetcompinfo(JNIEnv *env, jclass clss, jlong ri_id, jobject c_info); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetchunk(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jint flags); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_GRsetchunkcache(JNIEnv *env, jclass clss, jlong sdsid, jint maxcache, jint flags); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRsetexternalfile(JNIEnv *env, jclass clss, jlong ri_id, jstring filename, jint offset); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwriteimage(JNIEnv *env, jclass clss, jlong ri_id, jintArray start, jintArray stride, jintArray edge, jbyteArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwritelut(JNIEnv *env, jclass clss, jlong pal_id, jint ncomp, jint data_type, jint interlace, jint num_entries, jbyteArray pal_data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRreadchunk(JNIEnv *env, jclass clss, jlong grid, jintArray origin, jbyteArray dat); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_GRwritechunk(JNIEnv *env, jclass clss, jlong grid, jintArray origin, jbyteArray dat); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_GR */ hdf4-hdf4.3.1/java/src/jni/hdfheImp.c000066400000000000000000000037551503061704500172210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfheImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HEvalue(JNIEnv *env, jclass clss, jint level) { UNUSED(env); UNUSED(clss); return HEvalue((int32)level); } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_HEprint(JNIEnv *env, jclass clss, jobject stream, jint level) { UNUSED(env); UNUSED(clss); HEprint((FILE *)stream, (int32)level); } JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_HEstring(JNIEnv *env, jclass clss, jshort error_code) { char *str; jstring rstring; UNUSED(clss); str = (char *)HEstring((hdf_err_code_t)error_code); rstring = ENVPTR->NewStringUTF(ENVONLY, str); return rstring; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfheImp.h000066400000000000000000000034351503061704500172210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_HE */ #ifndef Included_hdf_hdflib_HE #define Included_hdf_hdflib_HE #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HEvalue(JNIEnv *env, jclass clss, jint level); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_HEprint(JNIEnv *env, jclass clss, jobject stream, jint level); JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_HEstring(JNIEnv *env, jclass clss, jshort error_code); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_HE */ hdf4-hdf4.3.1/java/src/jni/hdfhxImp.c000066400000000000000000000046341503061704500172410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfhxImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HXsetcreatedir(JNIEnv *env, jclass clss, jstring dir) { intn rval = FAIL; char *str = NULL; UNUSED(clss); if (dir == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "HXsetcreatedir: dir is null"); PIN_JAVA_STRING(ENVONLY, dir, str, NULL, "HXsetcreatedir: dir is not pinned"); rval = HXsetcreatedir((char *)str); done: if (str) UNPIN_JAVA_STRING(ENVONLY, dir, str); if (rval == FAIL) { return JNI_FALSE; } else { return JNI_TRUE; } } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HXsetdir(JNIEnv *env, jclass clss, jstring dir) { intn rval = FAIL; char *str = NULL; UNUSED(clss); if (dir == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "HXsetdir: dir is null"); PIN_JAVA_STRING(ENVONLY, dir, str, NULL, "HXsetdir: dir is not pinned"); rval = HXsetdir(str); done: if (str) UNPIN_JAVA_STRING(ENVONLY, dir, str); if (rval == FAIL) { return JNI_FALSE; } else { return JNI_TRUE; } } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfhxImp.h000066400000000000000000000031701503061704500172400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_HX */ #ifndef Included_hdf_hdflib_HX #define Included_hdf_hdflib_HX #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HXsetcreatedir(JNIEnv *env, jclass clss, jstring dir); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_HXsetdir(JNIEnv *env, jclass clss, jstring dir); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_HX */ hdf4-hdf4.3.1/java/src/jni/hdfnativeImp.c000066400000000000000000000757401503061704500201160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This module contains the implementation of all the native methods * used for number conversion. This is represented by the Java * class HDFNativeData. * * These routines convert one dimensional arrays of bytes into * one-D arrays of other types (int, float, etc) and vice versa. * * These routines are called from the Java parts of the Java-C * interface. * * ***Important notes: * * 1. These routines are designed to be portable--they use the * C compiler to do the required native data manipulation. * 2. These routines copy the data at least once -- a serious * but unavoidable performance hit. */ #include #include "hdf.h" #include "h4jni.h" #include "hdfnativeImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToInt___3B(JNIEnv *env, jclass clss, jbyteArray bdata) { jintArray rarray = NULL; jboolean bb; jbyte *barr = NULL; jint *iarray = NULL; jint *iap = NULL; char *bp = NULL; int blen; int ii; int len; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToInt: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToInt: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToInt: bdata length < 0"); } len = blen / (int)sizeof(jint); if (NULL == (rarray = ENVPTR->NewIntArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_INT_ARRAY(ENVONLY, rarray, iarray, &bb, "byteToInt: int array not pinned"); bp = (char *)barr; iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jint *)bp; iap++; bp += sizeof(jint); } /* end for */ done: if (iarray) UNPIN_INT_ARRAY(ENVONLY, rarray, iarray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToInt___3B */ /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToFloat___3B(JNIEnv *env, jclass clss, jbyteArray bdata) { jfloatArray rarray = NULL; jboolean bb; jfloat *farray = NULL; jfloat *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; int len; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToFloat: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToFloat: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToFloat: bdata length < 0"); } len = blen / (int)sizeof(jfloat); if (NULL == (rarray = ENVPTR->NewFloatArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_FLOAT_ARRAY(ENVONLY, rarray, farray, &bb, "byteToFloat: float array not pinned"); bp = (char *)barr; iap = farray; for (ii = 0; ii < len; ii++) { *iap = *(jfloat *)bp; iap++; bp += sizeof(jfloat); } /* end for */ done: if (farray) UNPIN_FLOAT_ARRAY(ENVONLY, rarray, farray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToFloat___3B */ /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToShort___3B(JNIEnv *env, jclass clss, jbyteArray bdata) { jshortArray rarray = NULL; jboolean bb; jshort *sarray = NULL; jshort *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; int len; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToShort: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToShort: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToShort: bdata length < 0"); } len = blen / (int)sizeof(jshort); if (NULL == (rarray = ENVPTR->NewShortArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_SHORT_ARRAY(ENVONLY, rarray, sarray, &bb, "byteToShort: short array not pinned"); bp = (char *)barr; iap = sarray; for (ii = 0; ii < len; ii++) { *iap = *(jshort *)bp; iap++; bp += sizeof(jshort); } /* end for */ done: if (sarray) UNPIN_SHORT_ARRAY(ENVONLY, rarray, sarray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToShort___3B */ /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToLong___3B(JNIEnv *env, jclass clss, jbyteArray bdata) { jlongArray rarray = NULL; jboolean bb; jlong *larray = NULL; jlong *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; int len; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToLong: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToLong: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToLong: bdata length < 0"); } len = blen / (int)sizeof(jlong); if (NULL == (rarray = ENVPTR->NewLongArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_LONG_ARRAY(ENVONLY, rarray, larray, &bb, "byteToLong: long array not pinned"); bp = (char *)barr; iap = larray; for (ii = 0; ii < len; ii++) { *iap = *(jlong *)bp; iap++; bp += sizeof(jlong); } /* end for */ done: if (larray) UNPIN_LONG_ARRAY(ENVONLY, rarray, larray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToLong___3B */ /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToDouble___3B(JNIEnv *env, jclass clss, jbyteArray bdata) { jdoubleArray rarray = NULL; jboolean bb; jdouble *darray = NULL; jdouble *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; int len; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToDouble: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToDouble: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToDouble: bdata length < 0"); } len = blen / (int)sizeof(jdouble); if (NULL == (rarray = ENVPTR->NewDoubleArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_DOUBLE_ARRAY(ENVONLY, rarray, darray, &bb, "byteToDouble: double array not pinned"); bp = (char *)barr; iap = darray; for (ii = 0; ii < len; ii++) { *iap = *(jdouble *)bp; iap++; bp += sizeof(jdouble); } /* end for */ done: if (darray) UNPIN_DOUBLE_ARRAY(ENVONLY, rarray, darray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToDouble___3B */ /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToInt__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) { jintArray rarray = NULL; jboolean bb; jint *iarray = NULL; jint *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToInt: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToInt: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToInt: bdata length < 0"); } if ((start < 0) || ((int)(start + (len * (int)sizeof(jint))) > blen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToInt: start < 0 or len exceeded buffer length"); bp = (char *)barr + start; if (NULL == (rarray = ENVPTR->NewIntArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_INT_ARRAY(ENVONLY, rarray, iarray, &bb, "byteToInt: int array not pinned"); iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jint *)bp; iap++; bp += sizeof(jint); } /* end for */ done: if (iarray) UNPIN_INT_ARRAY(ENVONLY, rarray, iarray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToInt__II_3B */ /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToShort__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) { jshortArray rarray = NULL; jboolean bb; jshort *sarray = NULL; jshort *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToShort: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToShort: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToShort: bdata length < 0"); } if ((start < 0) || ((int)(start + (len * (int)sizeof(jshort))) > blen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToShort: start < 0 or len exceeded buffer length"); bp = (char *)barr + start; if (NULL == (rarray = ENVPTR->NewShortArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_SHORT_ARRAY(ENVONLY, rarray, sarray, &bb, "byteToShort: short array not pinned"); iap = sarray; for (ii = 0; ii < len; ii++) { *iap = *(jshort *)bp; iap++; bp += sizeof(jshort); } /* end for */ done: if (sarray) UNPIN_SHORT_ARRAY(ENVONLY, rarray, sarray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToShort__II_3B */ /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToFloat__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) { jfloatArray rarray = NULL; jboolean bb; jfloat *farray = NULL; jfloat *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToFloat: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToFloat: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToFloat: bdata length < 0"); } if ((start < 0) || ((int)(start + (len * (int)sizeof(jfloat))) > blen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToFloat: start < 0 or len exceeded buffer length"); bp = (char *)barr + start; if (NULL == (rarray = ENVPTR->NewFloatArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_FLOAT_ARRAY(ENVONLY, rarray, farray, &bb, "byteToFloat: float array not pinned"); iap = farray; for (ii = 0; ii < len; ii++) { *iap = *(jfloat *)bp; iap++; bp += sizeof(jfloat); } /* end for */ done: if (farray) UNPIN_FLOAT_ARRAY(ENVONLY, rarray, farray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToFloat__II_3B */ /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToLong__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) { jlongArray rarray = NULL; jboolean bb; jlong *larray = NULL; jlong *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToLong: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToLong: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToLong: bdata length < 0"); } if ((start < 0) || ((int)(start + (len * (int)sizeof(jlong))) > blen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToLong: start < 0 or len exceeded buffer length"); bp = (char *)barr + start; if (NULL == (rarray = ENVPTR->NewLongArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_LONG_ARRAY(ENVONLY, rarray, larray, &bb, "byteToLong: long array not pinned"); iap = larray; for (ii = 0; ii < len; ii++) { *iap = *(jlong *)bp; iap++; bp += sizeof(jlong); } /* end for */ done: if (larray) UNPIN_LONG_ARRAY(ENVONLY, rarray, larray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToLong__II_3B */ /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToDouble__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) { jdoubleArray rarray = NULL; jboolean bb; jdouble *darray = NULL; jdouble *iap = NULL; jbyte *barr = NULL; char *bp = NULL; int blen; int ii; UNUSED(clss); if (NULL == bdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "byteToDouble: byte array is NULL"); PIN_BYTE_ARRAY(ENVONLY, bdata, barr, &bb, "byteToDouble: byte array not pinned"); if ((blen = ENVPTR->GetArrayLength(ENVONLY, bdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToDouble: bdata length < 0"); } if ((start < 0) || ((int)(start + (len * (int)sizeof(jdouble))) > blen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "byteToDouble: start < 0 or len exceeded buffer length"); bp = (char *)barr + start; if (NULL == (rarray = ENVPTR->NewDoubleArray(ENVONLY, len))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_DOUBLE_ARRAY(ENVONLY, rarray, darray, &bb, "byteToDouble: double array not pinned"); iap = darray; for (ii = 0; ii < len; ii++) { *iap = *(jdouble *)bp; iap++; bp += sizeof(jdouble); } /* end for */ done: if (darray) UNPIN_DOUBLE_ARRAY(ENVONLY, rarray, darray, rarray ? 0 : JNI_ABORT); if (barr) UNPIN_BYTE_ARRAY(ENVONLY, bdata, barr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToDouble__II_3B */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_intToByte__II_3I(JNIEnv *env, jclass clss, jint start, jint len, jintArray idata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; jint *ip = NULL; jint *iarr = NULL; int ilen; int blen; int ii; int ij; union things { int ival; char bytes[4]; } u; UNUSED(clss); if (NULL == idata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "intToByte: int array is NULL"); PIN_INT_ARRAY(ENVONLY, idata, iarr, &bb, "intToByte: int array not pinned"); if ((ilen = ENVPTR->GetArrayLength(ENVONLY, idata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "intToByte: idata length < 0"); } if ((start < 0) || (((start + len)) > ilen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "intToByte: start < 0 or len exceeded buffer length"); ip = iarr + start; blen = ilen * (int)sizeof(jint); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, blen))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "intToByte: byte array not pinned"); bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; (size_t)ij < sizeof(jint); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, rarray ? 0 : JNI_ABORT); if (iarr) UNPIN_INT_ARRAY(ENVONLY, idata, iarr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_intToByte__II_3I */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_shortToByte__II_3S(JNIEnv *env, jclass clss, jint start, jint len, jshortArray sdata) { jbyteArray rarray = NULL; jboolean bb; jshort *ip = NULL; jshort *sarr = NULL; jbyte *barray = NULL; jbyte *bap = NULL; int ilen; int blen; int ii; int ij; union things { short ival; char bytes[4]; } u; UNUSED(clss); if (NULL == sdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "shortToByte: short array is NULL"); PIN_SHORT_ARRAY(ENVONLY, sdata, sarr, &bb, "shortToByte: short array not pinned"); if ((ilen = ENVPTR->GetArrayLength(ENVONLY, sdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "shortToByte: sdata length < 0"); } if ((start < 0) || (((start + len)) > ilen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "shortToByte: start < 0 or len exceeded buffer length"); ip = sarr + start; blen = ilen * (int)sizeof(jshort); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, blen))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "shortToByte: byte array not pinned"); bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; (size_t)ij < sizeof(jshort); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, rarray ? 0 : JNI_ABORT); if (sarr) UNPIN_SHORT_ARRAY(ENVONLY, sdata, sarr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_shortToByte__II_3S */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_floatToByte__II_3F(JNIEnv *env, jclass clss, jint start, jint len, jfloatArray fdata) { jbyteArray rarray = NULL; jboolean bb; jfloat *ip = NULL; jfloat *farr = NULL; jbyte *barray = NULL; jbyte *bap = NULL; int ilen; int blen; int ii; int ij; union things { float ival; char bytes[4]; } u; UNUSED(clss); if (NULL == fdata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "floatToByte: float array is NULL"); PIN_FLOAT_ARRAY(ENVONLY, fdata, farr, &bb, "floatToByte: float array not pinned"); if ((ilen = ENVPTR->GetArrayLength(ENVONLY, fdata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "floatToByte: fdata length < 0"); } if ((start < 0) || (((start + len)) > ilen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "floatToByte: start < 0 or len exceeded buffer length"); ip = farr + start; blen = ilen * (int)sizeof(jfloat); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, blen))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "floatToByte: byte array not pinned"); bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; (size_t)ij < sizeof(jfloat); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, rarray ? 0 : JNI_ABORT); if (farr) UNPIN_FLOAT_ARRAY(ENVONLY, fdata, farr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_floatToByte__II_3F */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_doubleToByte__II_3D(JNIEnv *env, jclass clss, jint start, jint len, jdoubleArray ddata) { jbyteArray rarray = NULL; jboolean bb; jdouble *ip = NULL; jdouble *darr = NULL; jbyte *barray = NULL; jbyte *bap = NULL; int ilen; int blen; int ii; int ij; union things { double ival; char bytes[8]; } u; UNUSED(clss); if (NULL == ddata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "doubleToByte: double array is NULL"); PIN_DOUBLE_ARRAY(ENVONLY, ddata, darr, &bb, "doubleToByte: double array not pinned"); if ((ilen = ENVPTR->GetArrayLength(ENVONLY, ddata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "doubleToByte: ddata length < 0"); } if ((start < 0) || (((start + len)) > ilen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "doubleToByte: start < 0 or len exceeded buffer length"); ip = darr + start; blen = ilen * (int)sizeof(jdouble); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, blen))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "doubleToByte: byte array not pinned"); bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; (size_t)ij < sizeof(jdouble); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, rarray ? 0 : JNI_ABORT); if (darr) UNPIN_DOUBLE_ARRAY(ENVONLY, ddata, darr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_doubleToByte__II_3D */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_longToByte__II_3J(JNIEnv *env, jclass clss, jint start, jint len, jlongArray ldata) { jbyteArray rarray = NULL; jboolean bb; jlong *ip = NULL; jlong *larr = NULL; jbyte *barray = NULL; jbyte *bap = NULL; int ilen; int blen; int ii; int ij; union things { jlong ival; char bytes[8]; } u; UNUSED(clss); if (NULL == ldata) H4_NULL_ARGUMENT_ERROR(ENVONLY, "longToByte: long array is NULL"); PIN_LONG_ARRAY(ENVONLY, ldata, larr, &bb, "longToByte: long array not pinned"); if ((ilen = ENVPTR->GetArrayLength(ENVONLY, ldata)) < 0) { CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); H4_BAD_ARGUMENT_ERROR(ENVONLY, "longToByte: ldata length < 0"); } if ((start < 0) || (((start + len)) > ilen)) H4_BAD_ARGUMENT_ERROR(ENVONLY, "longToByte: start < 0 or len exceeded buffer length"); ip = larr + start; blen = ilen * (int)sizeof(jlong); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, blen))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "longToByte: byte array not pinned"); bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; (size_t)ij < sizeof(jlong); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, rarray ? 0 : JNI_ABORT); if (larr) UNPIN_LONG_ARRAY(ENVONLY, ldata, larr, JNI_ABORT); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_longToByte__II_3J */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_intToByte__I(JNIEnv *env, jclass clss, jint idata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { int ival; char bytes[sizeof(int)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jint)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "intToByte: byte array not pinned"); bap = barray; u.ival = idata; for (ij = 0; (size_t)ij < sizeof(jint); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_intToByte__I */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_floatToByte__F(JNIEnv *env, jclass clss, jfloat fdata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { float ival; char bytes[sizeof(float)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jfloat)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "floatToByte: byte array not pinned"); bap = barray; u.ival = fdata; for (ij = 0; (size_t)ij < sizeof(jfloat); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_floatToByte__F */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_shortToByte__S(JNIEnv *env, jclass clss, jshort sdata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { short ival; char bytes[sizeof(short)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jshort)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "shortToByte: byte array not pinned"); bap = barray; u.ival = sdata; for (ij = 0; (size_t)ij < sizeof(jshort); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_shortToByte__S */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_doubleToByte__D(JNIEnv *env, jclass clss, jdouble ddata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { double ival; char bytes[sizeof(double)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jdouble)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "doubleToByte: byte array not pinned"); bap = barray; u.ival = ddata; for (ij = 0; (size_t)ij < sizeof(jdouble); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_doubleToByte__D */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_longToByte__J(JNIEnv *env, jclass clss, jlong ldata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { jlong ival; char bytes[sizeof(jlong)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jlong)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "longToByte: byte array not pinned"); bap = barray; u.ival = ldata; for (ij = 0; (size_t)ij < sizeof(jlong); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_longToByte__J */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToByte__B(JNIEnv *env, jclass clss, jbyte bdata) { jbyteArray rarray = NULL; jboolean bb; jbyte *barray = NULL; jbyte *bap = NULL; int ij; union things { jbyte ival; char bytes[sizeof(jbyte)]; } u; UNUSED(clss); if (NULL == (rarray = ENVPTR->NewByteArray(ENVONLY, sizeof(jbyte)))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); PIN_BYTE_ARRAY(ENVONLY, rarray, barray, &bb, "byteToByte: byte array not pinned"); bap = barray; u.ival = bdata; for (ij = 0; (size_t)ij < sizeof(jbyte); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ done: if (barray) UNPIN_BYTE_ARRAY(ENVONLY, rarray, barray, 0); return rarray; } /* end Java_hdf_hdflib_HDFNativeData_byteToByte__B */ #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfnativeImp.h000066400000000000000000000164221503061704500201130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This module contains the implementation of all the native methods * used for number conversion. This is represented by the Java * class HDFNativeData. * * These routines convert one dimensional arrays of bytes into * one-D arrays of other types (int, float, etc) and vice versa. * * These routines are called from the Java parts of the Java-C * interface. * * ***Important notes: * * 1. These routines are designed to be portable--they use the * C compiler to do the required native data manipulation. * 2. These routines copy the data at least once -- a serious * but unavoidable performance hit. */ #include /* Header for class hdf_hdflib_Native */ #ifndef Included_hdf_hdflib_Native #define Included_hdf_hdflib_Native #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToInt___3B(JNIEnv *env, jclass clss, jbyteArray bdata); /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToFloat___3B(JNIEnv *env, jclass clss, jbyteArray bdata); /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToShort___3B(JNIEnv *env, jclass clss, jbyteArray bdata); /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToLong___3B(JNIEnv *env, jclass clss, jbyteArray bdata); /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToDouble___3B(JNIEnv *env, jclass clss, jbyteArray bdata); /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToInt__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata); /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToShort__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata); /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToFloat__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata); /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToLong__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata); /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToDouble__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_intToByte__II_3I(JNIEnv *env, jclass clss, jint start, jint len, jintArray idata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_shortToByte__II_3S(JNIEnv *env, jclass clss, jint start, jint len, jshortArray sdata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_floatToByte__II_3F(JNIEnv *env, jclass clss, jint start, jint len, jfloatArray fdata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_doubleToByte__II_3D(JNIEnv *env, jclass clss, jint start, jint len, jdoubleArray ddata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_longToByte__II_3J(JNIEnv *env, jclass clss, jint start, jint len, jlongArray ldata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_intToByte__I(JNIEnv *env, jclass clss, jint idata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_floatToByte__F(JNIEnv *env, jclass clss, jfloat fdata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_shortToByte__S(JNIEnv *env, jclass clss, jshort sdata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_doubleToByte__D(JNIEnv *env, jclass clss, jdouble ddata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_longToByte__J(JNIEnv *env, jclass clss, jlong ldata); /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdflib_HDFNativeData_byteToByte__B(JNIEnv *env, jclass clss, jbyte bdata); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_Native */ hdf4-hdf4.3.1/java/src/jni/hdfr24Imp.c000066400000000000000000000217551503061704500172340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfr24Imp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern jboolean getOldCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24getdims(JNIEnv *env, jclass clss, jstring filename, jintArray argv) { intn rval = FAIL; const char *fstr = NULL; jint *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24getdims: output array argv is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24getdims: filename is null"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DF24getdims: output array argv < order 3"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "DF24getdims: argv not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DF24getdims: filename not pinned"); /* get image dimension information */ if ((rval = DF24getdims(fstr, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (intn *)&(theArgs[2]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24getimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24getimage: output array image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24getimage: filename is null"); if (ENVPTR->GetArrayLength(ENVONLY, image) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DF24getimage: output array image invalid size"); PIN_BYTE_ARRAY_CRITICAL(ENVONLY, image, dat, &isCopy, "DF24getimage: image not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DF24getimage: filename not pinned"); if ((rval = DF24getimage(fstr, (void *)dat, (int32)width, (int32)height)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (dat) UNPIN_ARRAY_CRITICAL(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DF24lastref(JNIEnv *env, jclass clss) { UNUSED(env); UNUSED(clss); return ((short)DF24lastref()); } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24readref(JNIEnv *env, jclass clss, jstring filename, jshort ref) { int rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24readref: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DF24readref: filename not pinned"); if ((rval = DF24readref(fstr, (short)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24restart(JNIEnv *env, jclass clss) { int rval = FAIL; UNUSED(clss); if ((rval = DF24restart()) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DF24nimages(JNIEnv *env, jclass clss, jstring hdfFile) { intn rval = FAIL; const char *hdf_file = NULL; UNUSED(clss); if (hdfFile == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24nimages: hdfFile is null"); PIN_JAVA_STRING(ENVONLY, hdfFile, hdf_file, NULL, "DF24nimages: hdfFile not pinned"); if ((rval = DF24nimages(hdf_file)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (hdf_file) UNPIN_JAVA_STRING(ENVONLY, hdfFile, hdf_file); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24reqil(JNIEnv *env, jclass clss, jint interlace) { intn rval = FAIL; UNUSED(clss); if ((rval = DF24reqil((intn)interlace)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24addimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24addimage: image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24addimage: filename is null"); if (ENVPTR->GetArrayLength(ENVONLY, image) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DF24addimage: no image data"); PIN_BYTE_ARRAY(ENVONLY, image, dat, &isCopy, "DF24addimage: image not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DF24addimage: filename is not pinned"); if ((rval = DF24addimage((char *)fstr, (void *)dat, (int32)width, (int32)height)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (dat) UNPIN_BYTE_ARRAY(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24putimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24putimage: image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24putimage: filename is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, image) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DF24putimage: no image data"); PIN_BYTE_ARRAY(ENVONLY, image, dat, &isCopy, "DF24putimage: image not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DF24putimage: filename is not pinned"); if ((rval = DF24putimage(fstr, (void *)dat, (int32)width, (int32)height)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (dat) UNPIN_BYTE_ARRAY(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setcompress(JNIEnv *env, jclass clss, jint type, jobject cinfo) { intn rval = FAIL; comp_info cinf; jboolean bval = JNI_FALSE; UNUSED(clss); if (cinfo == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DF24setcompress: cinfo is NULL"); bval = getOldCompInfo(env, cinfo, &cinf); if (bval == JNI_FALSE) { H4_JNI_FATAL_ERROR(ENVONLY, "DF24setcompress: cinfo not pinned"); } /* end if */ else { /* fill in cinf depending on the value of 'type' */ if ((rval = DF24setcompress((int32)type, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); } done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setdims(JNIEnv *env, jclass clss, jint width, jint height) { intn rval = FAIL; UNUSED(clss); if ((rval = DF24setdims((int32)width, (int32)height)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setil(JNIEnv *env, jclass clss, jint il) { intn rval = FAIL; UNUSED(clss); if ((rval = DF24setil((intn)il)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfr24Imp.h000066400000000000000000000064641503061704500172410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_R24 */ #ifndef Included_hdf_hdflib_R24 #define Included_hdf_hdflib_R24 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24getdims(JNIEnv *env, jclass clss, jstring filename, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24getimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DF24lastref(JNIEnv *env, jclass clss); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24readref(JNIEnv *env, jclass clss, jstring filename, jshort ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24restart(JNIEnv *env, jclass clss); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DF24nimages(JNIEnv *env, jclass clss, jstring hdfFile); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24reqil(JNIEnv *env, jclass clss, jint interlace); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24addimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24putimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setcompress(JNIEnv *env, jclass clss, jint type, jobject cinfo); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setdims(JNIEnv *env, jclass clss, jint width, jint height); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DF24setil(JNIEnv *env, jclass clss, jint il); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_R24 */ hdf4-hdf4.3.1/java/src/jni/hdfr8Imp.c000066400000000000000000000252771503061704500171610ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfr8Imp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern jboolean getOldCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getdims(JNIEnv *env, jclass clss, jstring filename, jintArray argv, jbooleanArray isp) { intn rval = FAIL; const char *fstr = NULL; int ispal; jint *theArgs = NULL; jboolean *theB = NULL; jboolean isCopy; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getdims: filename is null"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getdims: output array argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DFR8getdims: argv output array < order 2"); if (isp == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getdims: output array isp is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, isp) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DFR8getdims: output array isp < order 1"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFR8getdims: filename not pinned"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "DFR8getdims: argv not pinned"); PIN_BOOL_ARRAY(ENVONLY, isp, theB, &isCopy, "DFR8getdims: isp not pinned"); theB[0] = JNI_FALSE; /* get image dimension information */ if ((rval = DFR8getdims(fstr, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (intn *)&ispal)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (ispal) theB[0] = JNI_TRUE; else theB[0] = JNI_FALSE; done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (theB) UNPIN_BOOL_ARRAY(ENVONLY, isp, theB, (rval == FAIL) ? JNI_ABORT : 0); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jbyteArray palette) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jbyte *pal = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getimage: output array image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getimage: filename is null"); PIN_BYTE_ARRAY_CRITICAL(ENVONLY, image, dat, &isCopy, "DFR8getimage: palette not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFR8getimage: filename not pinned"); if ((rval = DFR8getimage((char *)fstr, (uint8 *)dat, (int32)width, (int32)height, (uint8 *)NULL)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); PIN_BYTE_ARRAY(ENVONLY, palette, pal, &isCopy, "DFR8getimage: palette not pinned"); if ((rval = DFR8getimage((char *)fstr, (uint8 *)dat, (int32)width, (int32)height, (uint8 *)pal)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (pal) UNPIN_BYTE_ARRAY(ENVONLY, palette, pal, (rval == FAIL) ? JNI_ABORT : 0); if (dat) UNPIN_ARRAY_CRITICAL(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFR8lastref(JNIEnv *env, jclass clss) { UNUSED(env); UNUSED(clss); return ((short)DFR8lastref()); } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8readref(JNIEnv *env, jclass clss, jstring filename, jshort ref) { int rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8readref: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFR8readref: filename not pinned"); if ((rval = DFR8readref(fstr, (short)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8restart(JNIEnv *env, jclass clss) { int rval = FAIL; UNUSED(clss); if ((rval = DFR8restart()) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFR8nimages(JNIEnv *env, jclass clss, jstring hdfFile) { int rval = FAIL; const char *hdf_file = NULL; UNUSED(clss); if (hdfFile == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8nimages: hdfFile is null"); PIN_JAVA_STRING(ENVONLY, hdfFile, hdf_file, NULL, "DFR8nimages: hdfFile not pinned"); if ((rval = DFR8nimages(hdf_file)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (hdf_file) UNPIN_JAVA_STRING(ENVONLY, hdfFile, hdf_file); return rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8addimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jshort compress) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8addimage: image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8addimage: filename is null"); PIN_BYTE_ARRAY(ENVONLY, image, dat, &isCopy, "DFR8addimage: image not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFR8addimage: filename not pinned"); if ((rval = DFR8addimage((char *)fstr, (void *)dat, (int32)width, (int32)height, (uint16)compress)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (dat) UNPIN_BYTE_ARRAY(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8putimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jint compress) { intn rval = FAIL; const char *fstr = NULL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (image == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8putimage: image is NULL"); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8putimage: filename is null"); PIN_BYTE_ARRAY(ENVONLY, image, dat, &isCopy, "DFR8putimage: image not pinned"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFR8putimage: filename not pinned"); if ((rval = DFR8putimage((char *)fstr, (void *)dat, (int32)width, (int32)height, (uint16)compress)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); if (dat) UNPIN_BYTE_ARRAY(ENVONLY, image, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8setcompress(JNIEnv *env, jclass clss, jint type, jobject cinfo) { intn rval = FAIL; comp_info cinf; UNUSED(clss); if (cinfo == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8setcompress: cinfo is NULL"); if (getOldCompInfo(env, cinfo, &cinf) == JNI_FALSE) H4_JNI_FATAL_ERROR(ENVONLY, "DFR8setcompress: cinfo not pinned"); /* fill in cinf depending on the value of 'type' */ if ((rval = DFR8setcompress((int32)type, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getpalref(JNIEnv *env, jclass clss, jshortArray palref) { int rval = FAIL; short *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (palref == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFR8getpalref: output array palref is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, palref) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "DFR8getpalref: output array palref < order 1"); PIN_SHORT_ARRAY(ENVONLY, palref, theArgs, &isCopy, "DFR8getpalref: palref not pinned"); if ((rval = DFR8getpalref((uint16 *)&(theArgs[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_SHORT_ARRAY(ENVONLY, palref, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8setpalette(JNIEnv *env, jclass clss, jbyteArray palette) { int rval = FAIL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (palette == NULL) dat = NULL; else PIN_BYTE_ARRAY(ENVONLY, palette, dat, &isCopy, "DFR8setpalette: palette not pinned"); if ((rval = DFR8setpalette((uint8 *)dat)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_BYTE_ARRAY(ENVONLY, palette, dat, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8writeref(JNIEnv *env, jclass clss, jstring filename, jshort ref) { int rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "DFPwriteref: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "DFPwriteref: filename not pinned"); if ((rval = DFR8writeref(fstr, (short)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfr8Imp.h000066400000000000000000000073501503061704500171560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_R8 */ #ifndef Included_hdf_hdflib_R8 #define Included_hdf_hdflib_R8 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getdims(JNIEnv *env, jclass clss, jstring filename, jintArray argv, jbooleanArray isp); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jbyteArray palette); JNIEXPORT jshort JNICALL Java_hdf_hdflib_HDFLibrary_DFR8lastref(JNIEnv *env, jclass clss); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8readref(JNIEnv *env, jclass clss, jstring filename, jshort ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8restart(JNIEnv *env, jclass clss); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_DFR8nimages(JNIEnv *env, jclass clss, jstring hdfFile); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8addimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jshort compress); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8putimage(JNIEnv *env, jclass clss, jstring filename, jbyteArray image, jint width, jint height, jint compress); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8setcompress(JNIEnv *env, jclass clss, jint type, jobject cinfo); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8getpalref(JNIEnv *env, jclass clss, jshortArray palref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8setpalette(JNIEnv *env, jclass clss, jbyteArray palette); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_DFR8writeref(JNIEnv *env, jclass clss, jstring filename, jshort ref); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_R8 */ hdf4-hdf4.3.1/java/src/jni/hdfsdsImp.c000066400000000000000000001442151503061704500174130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "h4jni.h" #include "hdfsdsImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern jboolean makeChunkInfo(JNIEnv *env, jobject chunkobj, int32 flgs, HDF_CHUNK_DEF *cinf); extern jboolean getNewCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); extern jboolean setNewCompInfo(JNIEnv *env, jobject ciobj, comp_coder_t coder, comp_info *cinf); extern jboolean getChunkInfo(JNIEnv *env, jobject chunkobj, HDF_CHUNK_DEF *cinf); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDstart(JNIEnv *env, jclass clss, jstring filename, jint access) { int32 sdid = -1; const char *fstr = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDstart: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "SDstart: filename not pinned"); if ((sdid = SDstart(fstr, (int32)access)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return (jlong)sdid; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDend(JNIEnv *env, jclass clss, jlong sdid) { intn rval = FAIL; int32 id = (int32)sdid; UNUSED(clss); if ((rval = SDend(id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDfileinfo(JNIEnv *env, jclass clss, jlong sdid, jintArray argv) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; int32 id = (int32)sdid; UNUSED(clss); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDfileinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDfileinfo: argv input array < order 2"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "SDfileinfo: argv not pinned"); if ((rval = SDfileinfo(id, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDselect(JNIEnv *env, jclass clss, jlong sdid, jint index) { int32 rval = -1; int32 id = (int32)sdid; UNUSED(clss); if ((rval = (jlong)SDselect(id, (int32)index)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDnametoindex(JNIEnv *env, jclass clss, jlong sdid, jstring name) { intn rval = -1; const char *str = NULL; int32 id = (int32)sdid; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDnametoindex: name is null"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "SDnametoindex: name not pinned"); if ((rval = SDnametoindex(id, str)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetinfo(JNIEnv *env, jclass clss, jlong sdsid, jobjectArray name, jintArray dimsizes, jintArray argv) { intn rval = FAIL; char *cname = NULL; int32 *dims = NULL; int32 *theArgs = NULL; jstring rstring; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if ((cname = (char *)malloc(H4_MAX_NC_NAME + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetinfo: failed to allocate data buffer"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetinfo: name is NULL"); if (dimsizes == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetinfo: dimsizes is NULL"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDgetinfo: argv input array < order 3"); PIN_INT_ARRAY(ENVONLY, dimsizes, dims, &isCopy, "SDgetinfo: dimsizes not pinned"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "SDgetinfo: argv not pinned"); if ((rval = SDgetinfo(id, cname, &(theArgs[0]), dims, &(theArgs[1]), &(theArgs[2]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); cname[H4_MAX_NC_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, cname))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); done: free(cname); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); if (dims) UNPIN_INT_ARRAY(ENVONLY, dimsizes, dims, (rval == FAIL) ? JNI_ABORT : 0); return JNI_FALSE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jbyteArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jbyte *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_BYTE_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_BYTE_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } /* //////////////////////////////////////////////////////////////////// // // // New APIs for read data from library // // Using SDreaddata(..., Object buf) requires function calls // // theArray.emptyBytes() and theArray.arrayify(buf), which // // triples the actual memory needed by the data set. // // Using the following APIs solves the problem. // // // //////////////////////////////////////////////////////////////////// */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1short(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jshortArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jshort *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); else if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); else if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_SHORT_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_SHORT_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1int(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jintArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jint *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_INT_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_INT_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1long(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jlongArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jlong *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_LONG_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_LONG_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1float(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jfloatArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jfloat *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_FLOAT_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_FLOAT_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1double(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jdoubleArray data) { intn rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *cnt = NULL; jdouble *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: start is NULL"); if (count == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreaddata: count is NULL"); PIN_DOUBLE_ARRAY(ENVONLY, data, d, &isCopy, "SDreaddata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDreaddata: start not pinned"); PIN_INT_ARRAY(ENVONLY, count, cnt, &isCopy, "SDreaddata: count not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDreaddata: stride not pinned"); if ((rval = SDreaddata(id, strt, strd, cnt, d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (cnt) UNPIN_INT_ARRAY(ENVONLY, count, cnt, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_DOUBLE_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDendaccess(JNIEnv *env, jclass clss, jlong sdsid) { intn rval = -1; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDendaccess(id)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimid(JNIEnv *env, jclass clss, jlong sdsid, jint index) { int32 rval = -1; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDgetdimid(id, (intn)index)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDdiminfo(JNIEnv *env, jclass clss, jlong dimid, jobjectArray dimname, jintArray argv) { intn rval = FAIL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(256)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDdiminfo: failed to allocate data buffer"); if (dimname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDdiminfo: dimname is NULL"); else if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDdiminfo: argv is NULL"); else if (ENVPTR->GetArrayLength(ENVONLY, argv) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDdiminfo: argv input array < order 3"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "SDdiminfo: argv not pinned"); if ((rval = SDdiminfo((int32)dimid, (char *)data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[255] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, dimname, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDidtoref(JNIEnv *env, jclass clss, jlong sdsid) { int32 rval = -1; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDidtoref(id)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDreftoindex(JNIEnv *env, jclass clss, jlong sdid, jint ref) { int32 rval = -1; int32 id = (int32)sdid; UNUSED(clss); if ((rval = SDreftoindex(id, (int32)ref)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDattrinfo(JNIEnv *env, jclass clss, jlong sdsid, jint index, jobjectArray name, jintArray argv) { intn rval = FAIL; char *data = NULL; jint *theArgs = NULL; jstring rstring; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if ((data = (char *)malloc(256)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDattrinfo: failed to allocate data buffer"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDattrinfo: name is NULL"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDattrinfo: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDattrinfo: argv input array < order 2"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "SDattrinfo: argv not pinned"); if ((rval = SDattrinfo(id, (int32)index, (char *)data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[255] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreadattr(JNIEnv *env, jclass clss, jlong sdsid, jint index, jbyteArray dat) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (dat == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreadattr: dat is NULL"); PIN_BYTE_ARRAY(ENVONLY, dat, arr, &isCopy, "SDreadattr: dat not pinned"); if ((rval = SDreadattr(id, (int32)index, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, dat, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDfindattr(JNIEnv *env, jclass clss, jlong sdsid, jstring name) { int32 rval = -1; const char *str = NULL; int32 id = (int32)sdsid; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDfindattr: name is null"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "SDfindattr: name not pinned"); if ((rval = SDfindattr(id, str)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDiscoordvar(JNIEnv *env, jclass clss, jlong sdsid) { intn rval = -1; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDiscoordvar(id)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcal(JNIEnv *env, jclass clss, jlong sdsid, jdoubleArray argv, jintArray nt) { intn rval = FAIL; jdouble *theArgs = NULL; jint *theNT = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (nt == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetcal: nt is NULL"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetcal: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 4) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDgetcal: argv input array < order 4"); PIN_INT_ARRAY(ENVONLY, nt, theNT, &isCopy, "SDgetcal: nt not pinned"); PIN_DOUBLE_ARRAY(ENVONLY, argv, theArgs, &isCopy, "SDgetcal: argv not pinned"); if ((rval = SDgetcal(id, (float64 *)&(theArgs[0]), (float64 *)&(theArgs[1]), (float64 *)&(theArgs[2]), (float64 *)&(theArgs[3]), (int32 *)&(theNT[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_DOUBLE_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); if (theNT) UNPIN_INT_ARRAY(ENVONLY, nt, theNT, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdatastrs(JNIEnv *env, jclass clss, jlong sdsid, jobjectArray strings, jint len) { intn rval = FAIL; char *labVal = NULL; char *unitVal = NULL; char *fmtVal = NULL; char *coordsysVal = NULL; jstring str; jstring label, unit, format, coordsys; int32 id = (int32)sdsid; UNUSED(clss); if (strings == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetdatastrs: strings is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, strings) < 4) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDgetdatastrs: strings input array < order 4"); if ((label = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 0)) != NULL) { /* allocate space */ if ((labVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdatastrs"); } ENVPTR->DeleteLocalRef(ENVONLY, label); if ((unit = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 1)) != NULL) { if ((unitVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdatastrs"); } ENVPTR->DeleteLocalRef(ENVONLY, unit); if ((format = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 2)) != NULL) { if ((fmtVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdatastrs"); } ENVPTR->DeleteLocalRef(ENVONLY, format); if ((coordsys = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 3)) != NULL) { if ((coordsysVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdatastrs"); } ENVPTR->DeleteLocalRef(ENVONLY, coordsys); if ((rval = SDgetdatastrs(id, labVal, unitVal, fmtVal, coordsysVal, (int32)len)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (labVal != NULL) { labVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, labVal); if (str != NULL) { ENVPTR->SetObjectArrayElement(ENVONLY, strings, 0, (jobject)str); } } if (unitVal != NULL) { unitVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, unitVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 1, (jobject)str); } if (fmtVal != NULL) { fmtVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, fmtVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 2, (jobject)str); } if (coordsysVal != NULL) { coordsysVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, coordsysVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 3, (jobject)str); } done: free(labVal); free(unitVal); free(fmtVal); free(coordsysVal); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimstrs(JNIEnv *env, jclass clss, jlong dimid, jobjectArray strings, jint len) { intn rval = FAIL; char *labVal = NULL; char *unitVal = NULL; char *fmtVal = NULL; jstring str; jstring label, unit, format; UNUSED(clss); if (strings == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetdimstrs: strings is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, strings) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDgetdimstrs: strings input array < order 3"); if ((label = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 0)) != NULL) { /* allocate space */ if ((labVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdimstrs"); } ENVPTR->DeleteLocalRef(ENVONLY, label); if ((unit = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 1)) != NULL) { if ((unitVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdimstrs"); } ENVPTR->DeleteLocalRef(ENVONLY, unit); if ((format = (jstring)ENVPTR->GetObjectArrayElement(ENVONLY, strings, 2)) != NULL) { if ((fmtVal = (char *)malloc(len + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "SDgetdimstrs"); } ENVPTR->DeleteLocalRef(ENVONLY, format); if ((rval = SDgetdimstrs((int32)dimid, labVal, unitVal, fmtVal, (int32)len)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (labVal != NULL) { labVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, labVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 0, (jobject)str); } if (unitVal != NULL) { unitVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, unitVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 1, (jobject)str); } if (fmtVal != NULL) { fmtVal[len] = '\0'; str = ENVPTR->NewStringUTF(ENVONLY, fmtVal); if (str != NULL) ENVPTR->SetObjectArrayElement(ENVONLY, strings, 2, (jobject)str); } done: free(labVal); free(unitVal); free(fmtVal); return JNI_TRUE; } /*** note this is returning data of many types in an array of bytes.... */ /* not sure how well this will work for java programs .... */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimscale(JNIEnv *env, jclass clss, jlong dimid, jbyteArray data) { intn rval = FAIL; jbyte *datVal = NULL; jboolean isCopy; UNUSED(clss); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetdimscale: data is NULL"); PIN_BYTE_ARRAY(ENVONLY, data, datVal, &isCopy, "SDgetdimscale: data not pinned"); if ((rval = SDgetdimscale((int32)dimid, (char *)datVal)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (datVal) UNPIN_BYTE_ARRAY(ENVONLY, data, datVal, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetfillvalue(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray data) { intn rval = FAIL; jbyte *datVal = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetfillvalue: data is NULL"); PIN_BYTE_ARRAY(ENVONLY, data, datVal, &isCopy, "SDgetfillvalue: data not pinned"); if ((rval = SDgetfillvalue(id, (char *)datVal)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (datVal) UNPIN_BYTE_ARRAY(ENVONLY, data, datVal, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetrange(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray max, jbyteArray min) { intn rval = FAIL; jbyte *minp = NULL; jbyte *maxp = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (max == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetrange: max is NULL"); if (min == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetrange: min is NULL"); PIN_BYTE_ARRAY(ENVONLY, max, maxp, &isCopy, "SDgetrange: max not pinned"); PIN_BYTE_ARRAY(ENVONLY, min, minp, &isCopy, "SDgetrange: min not pinned"); if ((rval = SDgetrange(id, (void *)maxp, (void *)minp)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (minp) UNPIN_BYTE_ARRAY(ENVONLY, min, minp, (rval == FAIL) ? JNI_ABORT : 0); if (maxp) UNPIN_BYTE_ARRAY(ENVONLY, max, maxp, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDcreate(JNIEnv *env, jclass clss, jlong sd_id, jstring name, jlong number_type, jint rank, jintArray dimsizes) { int32 rval = -1; const char *str = NULL; jint *dims = NULL; jboolean isCopy; int32 id = (int32)sd_id; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDcreate: name is null"); if (dimsizes == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDcreate: dimsizes is NULL"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "SDcreate: name not pinned"); PIN_INT_ARRAY(ENVONLY, dimsizes, dims, &isCopy, "SDcreate: dimsizes not pinned"); if ((rval = SDcreate(id, str, (int32)number_type, (int32)rank, (int32 *)dims)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (dims) UNPIN_INT_ARRAY(ENVONLY, dimsizes, dims, (rval == FAIL) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); return (jlong)rval; } // this API call returns false for not record and for failures // maybe failures should return a negative? JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDisrecord(JNIEnv *env, jclass clss, jlong sdsid) { int32 rval = FAIL; int32 id = (int32)sdsid; UNUSED(env); UNUSED(clss); if ((rval = SDisrecord(id)) == TRUE) return JNI_TRUE; return JNI_FALSE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetattr(JNIEnv *env, jclass clss, jlong s_id, jstring attr_name, jlong num_type, jint count, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; const char *str = NULL; jboolean isCopy; int32 id = (int32)s_id; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetattr: values is NULL"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "SDsetattr: attr_name not pinned"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "SDsetattr: values not pinned"); if ((rval = SDsetattr(id, str, (int32)num_type, (int32)count, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetcal(JNIEnv *env, jclass clss, jlong sds_id, jdouble cal, jdouble cal_err, jdouble offset, jdouble offset_err, jint number_type) { intn rval = FAIL; int32 id = (int32)sds_id; UNUSED(clss); if ((rval = SDsetcal(id, (float64)cal, (float64)cal_err, (float64)offset, (float64)offset_err, (int32)number_type)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdatastrs(JNIEnv *env, jclass clss, jlong sds_id, jstring label, jstring unit, jstring format, jstring coordsys) { intn rval = FAIL; const char *labstr = NULL; const char *unstr = NULL; const char *formstr = NULL; const char *csstr = NULL; UNUSED(clss); if (label == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdatastrs: label is null"); if (unit == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdatastrs: unit is null"); if (format == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdatastrs: format is null"); if (coordsys == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdatastrs: coordsys is null"); PIN_JAVA_STRING(ENVONLY, label, labstr, NULL, "SDsetdatastrs: label not pinned"); PIN_JAVA_STRING(ENVONLY, unit, unstr, NULL, "SDsetdatastrs: unit not pinned"); PIN_JAVA_STRING(ENVONLY, format, formstr, NULL, "SDsetdatastrs: format not pinned"); PIN_JAVA_STRING(ENVONLY, coordsys, csstr, NULL, "SDsetdatastrs: coordsys not pinned"); if ((rval = SDsetdatastrs((int32)sds_id, labstr, unstr, formstr, csstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (csstr) UNPIN_JAVA_STRING(ENVONLY, coordsys, csstr); if (formstr) UNPIN_JAVA_STRING(ENVONLY, format, formstr); if (unstr) UNPIN_JAVA_STRING(ENVONLY, unit, unstr); if (labstr) UNPIN_JAVA_STRING(ENVONLY, label, labstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimname(JNIEnv *env, jclass clss, jlong dim_id, jstring dim_name) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (dim_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdimname: dim_name is null"); PIN_JAVA_STRING(ENVONLY, dim_name, str, NULL, "SDsetdimname: dim_name not pinned"); if ((rval = SDsetdimname((int32)dim_id, str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, dim_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimscale(JNIEnv *env, jclass clss, jlong dim_id, jint count, jint number_type, jbyteArray data) { intn rval = FAIL; jbyte *d = NULL; jboolean isCopy; UNUSED(clss); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdimscale: data is NULL"); PIN_BYTE_ARRAY(ENVONLY, data, d, &isCopy, "SDsetdimscale: data not pinned"); if ((rval = SDsetdimscale((int32)dim_id, (int32)count, (int32)number_type, (void *)d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (d) UNPIN_BYTE_ARRAY(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimstrs(JNIEnv *env, jclass clss, jlong dim_id, jstring label, jstring unit, jstring format) { intn rval = FAIL; const char *labstr = NULL; const char *unstr = NULL; const char *formstr = NULL; UNUSED(clss); if (label == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdimstrs: label is null"); if (unit == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdimstrs: unit is null"); if (format == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetdimstrs: format is null"); PIN_JAVA_STRING(ENVONLY, label, labstr, NULL, "SDsetdimstrs: label not pinned"); PIN_JAVA_STRING(ENVONLY, unit, unstr, NULL, "SDsetdimstrs: unit not pinned"); PIN_JAVA_STRING(ENVONLY, format, formstr, NULL, "SDsetdimstrs: format not pinned"); if ((rval = SDsetdimstrs((int32)dim_id, labstr, unstr, formstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (formstr) UNPIN_JAVA_STRING(ENVONLY, format, formstr); if (unstr) UNPIN_JAVA_STRING(ENVONLY, unit, unstr); if (labstr) UNPIN_JAVA_STRING(ENVONLY, label, labstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetexternalfile(JNIEnv *env, jclass clss, jlong sds_id, jstring filename, jint offset) { intn rval = FAIL; const char *fstr = NULL; int32 id = (int32)sds_id; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetexternalfile: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, fstr, NULL, "SDsetexternalfile: filename not pinned"); if ((rval = SDsetexternalfile(id, fstr, (int32)offset)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, filename, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetfillvalue(JNIEnv *env, jclass clss, jlong sds_id, jbyteArray fill_val) { intn rval = FAIL; jboolean isCopy; jbyte *d = NULL; int32 id = (int32)sds_id; UNUSED(clss); if (fill_val == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetfillvalue: fill_val is NULL"); PIN_BYTE_ARRAY(ENVONLY, fill_val, d, &isCopy, "SDsetfillvalue: fill_val not pinned"); if ((rval = SDsetfillvalue(id, (void *)d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (d) UNPIN_BYTE_ARRAY(ENVONLY, fill_val, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetrange(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray max, jbyteArray min) { int32 rval = FAIL; jboolean isCopy; jbyte *minp = NULL; jbyte *maxp = NULL; int32 id = (int32)sdsid; UNUSED(clss); if (max == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetrange: max is NULL"); if (min == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetrange: min is NULL"); PIN_BYTE_ARRAY(ENVONLY, max, maxp, &isCopy, "SDsetrange: max not pinned"); PIN_BYTE_ARRAY(ENVONLY, min, minp, &isCopy, "SDsetrange: min not pinned"); if ((rval = SDsetrange(id, maxp, minp)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (minp) UNPIN_BYTE_ARRAY(ENVONLY, min, minp, (rval == FAIL) ? JNI_ABORT : 0); if (maxp) UNPIN_BYTE_ARRAY(ENVONLY, max, maxp, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDwritedata(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray edge, jbyteArray data) { int32 rval = FAIL; int32 *strt = NULL; int32 *strd = NULL; int32 *e = NULL; jbyte *d = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (id < 0) H4_BAD_ARGUMENT_ERROR(ENVONLY, "SDreaddata: sdsid is invalid"); if (data == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDwritedata: data is NULL"); if (start == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDwritedata: start is NULL"); if (edge == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDwritedata: count is NULL"); PIN_BYTE_ARRAY_CRITICAL(ENVONLY, data, d, &isCopy, "SDwritedata: data not pinned"); PIN_INT_ARRAY(ENVONLY, start, strt, &isCopy, "SDwritedata: start not pinned"); PIN_INT_ARRAY(ENVONLY, edge, e, &isCopy, "SDwritedata: edge not pinned"); if (stride != NULL) PIN_INT_ARRAY(ENVONLY, stride, strd, &isCopy, "SDwritedata: stride not pinned"); if ((rval = SDwritedata(id, strt, strd, e, (void *)d)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (strd) UNPIN_INT_ARRAY(ENVONLY, stride, strd, (rval == FAIL) ? JNI_ABORT : 0); if (e) UNPIN_INT_ARRAY(ENVONLY, edge, e, (rval == FAIL) ? JNI_ABORT : 0); if (strt) UNPIN_INT_ARRAY(ENVONLY, start, strt, (rval == FAIL) ? JNI_ABORT : 0); if (d) UNPIN_ARRAY_CRITICAL(ENVONLY, data, d, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } /* new stuff for chunking */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetnbitdataset(JNIEnv *env, jclass clss, jlong sdsid, jint start_bit, jint bit_len, jint sign_ext, jint fill_one) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetnbitdataset(id, (intn)start_bit, (intn)bit_len, (intn)sign_ext, (intn)fill_one)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetcompress(JNIEnv *env, jclass clss, jlong sdsid, jint type, jobject cinfo) { intn rval = FAIL; comp_info cinf; int32 id = (int32)sdsid; UNUSED(clss); if (cinfo == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetcompress: cinfo is NULL"); if (getNewCompInfo(env, cinfo, &cinf) == JNI_FALSE) H4_RAISE_EXCEPTION(ENVONLY, "SDsetcompress: error creating comp_info struct"); if ((rval = SDsetcompress(id, (comp_coder_t)type, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcompinfo(JNIEnv *env, jclass clss, jlong sdsid, jobject cinfo) { intn rval = FAIL; comp_coder_t coder; comp_info cinf; int32 id = (int32)sdsid; UNUSED(clss); if (cinfo == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetcompinfo: cinfo is NULL"); if ((rval = SDgetcompinfo(id, (comp_coder_t *)&coder, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (setNewCompInfo(env, cinfo, coder, &cinf) == JNI_FALSE) H4_RAISE_EXCEPTION(ENVONLY, "SDgetcompinfo: error creating comp_info struct"); done: return JNI_TRUE; } #ifndef H4_NO_DEPRECATED_SYMBOLS JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcompress(JNIEnv *env, jclass clss, jlong sdsid, jobject cinfo) { intn rval = FAIL; comp_coder_t coder; comp_info cinf; int32 id = (int32)sdsid; UNUSED(clss); if (cinfo == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetcompress: cinfo is NULL"); if ((rval = SDgetcompress(id, (comp_coder_t *)&coder, (comp_info *)&cinf)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); if (setNewCompInfo(env, cinfo, coder, &cinf) == JNI_FALSE) H4_RAISE_EXCEPTION(ENVONLY, "SDgetcompress: error creating comp_info struct"); done: return JNI_TRUE; } #endif /* H4_NO_DEPRECATED_SYMBOLS */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetaccesstype(JNIEnv *env, jclass clss, jlong sdsid, jint accesstype) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetaccesstype(id, (uintn)accesstype)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetblocksize(JNIEnv *env, jclass clss, jlong sdsid, jint block_size) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetblocksize(id, (int32)block_size)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetfillmode(JNIEnv *env, jclass clss, jlong sdsid, jint fillmode) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetfillmode(id, (intn)fillmode)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimval_1comp(JNIEnv *env, jclass clss, jlong sdsid, jint comp_mode) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetdimval_comp(id, (intn)comp_mode)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDisdimval_1bwcomp(JNIEnv *env, jclass clss, jlong dimid) { intn rval = FAIL; UNUSED(clss); if ((rval = SDisdimval_bwcomp((int32)dimid)) == SD_DIMVAL_BW_COMP) return JNI_TRUE; else if (rval == SD_DIMVAL_BW_INCOMP) return JNI_FALSE; else H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetchunk(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jint flags) { intn rval = FAIL; HDF_CHUNK_DEF c_def; int32 id = (int32)sdsid; UNUSED(clss); if (chunk_def == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDsetchunk: chunk_def is NULL"); if (getChunkInfo(env, chunk_def, &c_def) == JNI_FALSE) H4_RAISE_EXCEPTION(ENVONLY, "SDsetchunk: error creating chunk_def struct"); if ((rval = SDsetchunk(id, c_def, (int32)flags)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetchunkinfo(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jintArray cflags) { int32 rval = FAIL; HDF_CHUNK_DEF cdef; jint *flgs = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (chunk_def == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetchunkinfo: chunk_def is NULL"); if (cflags == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDgetchunkinfo: cflags is NULL"); PIN_INT_ARRAY(ENVONLY, cflags, flgs, &isCopy, "SDgetchunkinfo: cflags not pinned"); if ((rval = SDgetchunkinfo(id, &cdef, (int32 *)&(flgs[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); /* convert cdef to HDFchunkinfo */ if (makeChunkInfo(env, chunk_def, (int32)*flgs, &cdef) == JNI_FALSE) H4_RAISE_EXCEPTION(ENVONLY, "SDgetchunkinfo: error creating chunk_def struct"); done: if (flgs) UNPIN_INT_ARRAY(ENVONLY, cflags, flgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreadchunk(JNIEnv *env, jclass clss, jlong sdid, jintArray origin, jbyteArray dat) { int32 rval = FAIL; jbyte *s = NULL; jint *arr = NULL; jboolean isCopy; int32 id = (int32)sdid; UNUSED(clss); if (dat == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreadchunk: data is NULL"); if (origin == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDreadchunk: origin is NULL"); PIN_INT_ARRAY(ENVONLY, origin, arr, &isCopy, "SDreadchunk: origin not pinned"); PIN_BYTE_ARRAY(ENVONLY, dat, s, &isCopy, "SDreadchunk: dat not pinned"); if ((rval = SDreadchunk(id, (int32 *)arr, s)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (s) UNPIN_BYTE_ARRAY(ENVONLY, dat, s, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_INT_ARRAY(ENVONLY, origin, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDsetchunkcache(JNIEnv *env, jclass clss, jlong sdsid, jint maxcache, jint flags) { intn rval = FAIL; int32 id = (int32)sdsid; UNUSED(clss); if ((rval = SDsetchunkcache(id, (int32)maxcache, (int32)flags)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDwritechunk(JNIEnv *env, jclass clss, jlong sdid, jintArray origin, jbyteArray dat) { int32 rval = FAIL; jbyte *s = NULL; jint *arr = NULL; jboolean isCopy; int32 id = (int32)sdid; UNUSED(clss); if (dat == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDwritechunk: dat is NULL"); if (origin == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDwritechunk: origin is NULL"); PIN_INT_ARRAY(ENVONLY, origin, arr, &isCopy, "SDwritechunk: origin not pinned"); PIN_BYTE_ARRAY(ENVONLY, dat, s, &isCopy, "SDwritechunk: dat not pinned"); if ((rval = SDwritechunk(id, (int32 *)arr, s)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (s) UNPIN_BYTE_ARRAY(ENVONLY, dat, s, (rval == FAIL) ? JNI_ABORT : 0); if (arr) UNPIN_INT_ARRAY(ENVONLY, origin, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDcheckempty(JNIEnv *env, jclass clss, jlong sdsid, jintArray emptySDS) { int32 rval = FAIL; intn *isempty = NULL; jboolean isCopy; int32 id = (int32)sdsid; UNUSED(clss); if (emptySDS == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "SDcheckempty: emptySDS is NULL"); PIN_INT_ARRAY(ENVONLY, emptySDS, isempty, &isCopy, "SDcheckempty: emptySDS not pinned"); if ((rval = SDcheckempty(id, isempty)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (isempty) UNPIN_INT_ARRAY(ENVONLY, emptySDS, isempty, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfsdsImp.h000066400000000000000000000341011503061704500174100ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_SDS */ #ifndef Included_hdf_hdflib_SDS #define Included_hdf_hdflib_SDS #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDstart(JNIEnv *env, jclass clss, jstring filename, jint access); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDend(JNIEnv *env, jclass clss, jlong sdid); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDfileinfo(JNIEnv *env, jclass clss, jlong sdid, jintArray argv); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDselect(JNIEnv *env, jclass clss, jlong sdid, jint index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDnametoindex(JNIEnv *env, jclass clss, jlong sdid, jstring name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetinfo(JNIEnv *env, jclass clss, jlong sdsid, jobjectArray name, jintArray dimsizes, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jbyteArray data); /* //////////////////////////////////////////////////////////////////// // // // New APIs for read data from library // // Using SDreaddata(..., Object buf) requires function calls // // theArray.emptyBytes() and theArray.arrayify(buf), which // // triples the actual memory needed by the data set. // // Using the following APIs solves the problem. // // // //////////////////////////////////////////////////////////////////// */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1short(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jshortArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1int(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jintArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1long(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jlongArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1float(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jfloatArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreaddata_1double(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray count, jdoubleArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDendaccess(JNIEnv *env, jclass clss, jlong sdsid); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimid(JNIEnv *env, jclass clss, jlong sdsid, jint index); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDdiminfo(JNIEnv *env, jclass clss, jlong dimid, jobjectArray dimname, jintArray argv); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDidtoref(JNIEnv *env, jclass clss, jlong sdsid); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDreftoindex(JNIEnv *env, jclass clss, jlong sdid, jint ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDattrinfo(JNIEnv *env, jclass clss, jlong sdsid, jint index, jobjectArray name, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreadattr(JNIEnv *env, jclass clss, jlong sdsid, jint index, jbyteArray dat); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDfindattr(JNIEnv *env, jclass clss, jlong sdsid, jstring name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDiscoordvar(JNIEnv *env, jclass clss, jlong sdsid); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcal(JNIEnv *env, jclass clss, jlong sdsid, jdoubleArray argv, jintArray nt); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdatastrs(JNIEnv *env, jclass clss, jlong sdsid, jobjectArray strings, jint len); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimstrs(JNIEnv *env, jclass clss, jlong dimid, jobjectArray strings, jint len); /*** note this is returning data of many types in an array of bytes.... */ /* not sure how well this will work for java programs .... */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetdimscale(JNIEnv *env, jclass clss, jlong dimid, jbyteArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetfillvalue(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetrange(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray max, jbyteArray min); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_SDcreate(JNIEnv *env, jclass clss, jlong sd_id, jstring name, jlong number_type, jint rank, jintArray dimsizes); // this API call returns false for not record and for failures // maybe failures should return a negative? JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDisrecord(JNIEnv *env, jclass clss, jlong sdsid); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetattr(JNIEnv *env, jclass clss, jlong s_id, jstring attr_name, jlong num_type, jint count, jbyteArray values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetcal(JNIEnv *env, jclass clss, jlong sds_id, jdouble cal, jdouble cal_err, jdouble offset, jdouble offset_err, jint number_type); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdatastrs(JNIEnv *env, jclass clss, jlong sds_id, jstring label, jstring unit, jstring format, jstring coordsys); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimname(JNIEnv *env, jclass clss, jlong dim_id, jstring dim_name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimscale(JNIEnv *env, jclass clss, jlong dim_id, jint count, jint number_type, jbyteArray data); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimstrs(JNIEnv *env, jclass clss, jlong dim_id, jstring label, jstring unit, jstring format); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetexternalfile(JNIEnv *env, jclass clss, jlong sds_id, jstring filename, jint offset); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetfillvalue(JNIEnv *env, jclass clss, jlong sds_id, jbyteArray fill_val); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetrange(JNIEnv *env, jclass clss, jlong sdsid, jbyteArray max, jbyteArray min); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDwritedata(JNIEnv *env, jclass clss, jlong sdsid, jintArray start, jintArray stride, jintArray edge, jbyteArray data); /* new stuff for chunking */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetnbitdataset(JNIEnv *env, jclass clss, jlong sdsid, jint start_bit, jint bit_len, jint sign_ext, jint fill_one); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetcompress(JNIEnv *env, jclass clss, jlong sdsid, jint type, jobject cinfo); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcompinfo(JNIEnv *env, jclass clss, jlong sdsid, jobject cinfo); #ifndef H4_NO_DEPRECATED_SYMBOLS JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetcompress(JNIEnv *env, jclass clss, jlong sdsid, jobject cinfo); #endif JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetaccesstype(JNIEnv *env, jclass clss, jlong sdsid, jint accesstype); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetblocksize(JNIEnv *env, jclass clss, jlong sdsid, jint block_size); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetfillmode(JNIEnv *env, jclass clss, jlong sdsid, jint fillmode); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetdimval_1comp(JNIEnv *env, jclass clss, jlong sdsid, jint comp_mode); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDisdimval_1bwcomp(JNIEnv *env, jclass clss, jlong dimid); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDsetchunk(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jint flags); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDgetchunkinfo(JNIEnv *env, jclass clss, jlong sdsid, jobject chunk_def, jintArray cflags); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDreadchunk(JNIEnv *env, jclass clss, jlong sdid, jintArray origin, jbyteArray dat); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_SDsetchunkcache(JNIEnv *env, jclass clss, jlong sdsid, jint maxcache, jint flags); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDwritechunk(JNIEnv *env, jclass clss, jlong sdid, jintArray origin, jbyteArray dat); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_SDcheckempty(JNIEnv *env, jclass clss, jlong sdsid, jintArray emptySDS); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_SDS */ hdf4-hdf4.3.1/java/src/jni/hdfstructsutil.c000066400000000000000000000501441503061704500205560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This module contains code to translate between the HDF C union 'comp_info' * and a subclass of the Java class CompInfo. * * This is nasty and ugly and probably buggy. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfstructsutil.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Get information from a Java HDFNewCompInfo object in to a C comp_info * struct. * * Extract information for the different types of compression. */ jboolean getNewCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf) { jfieldID jf; jclass jc; jint ctype; jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFNewCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ctype = ENVPTR->GetIntField(ENVONLY, ciobj, jf); switch (ctype) { case COMP_CODE_NONE: case COMP_CODE_RLE: default: break; case COMP_CODE_SKPHUFF: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFSKPHUFFCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "skp_size", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->skphuff.skp_size = ENVPTR->GetIntField(ENVONLY, ciobj, jf); break; case COMP_CODE_DEFLATE: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFDeflateCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "level", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->deflate.level = ENVPTR->GetIntField(ENVONLY, ciobj, jf); break; case COMP_CODE_SZIP: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFSZIPCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "bits_per_pixel", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.bits_per_pixel = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "options_mask", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.options_mask = ENVPTR->GetIntField(ENVONLY, ciobj, jf); /* changes from hdf-42r0 to hdf-42r1 jf = ENVPTR->GetFieldID(ENVONLY, jc, "compression_mode", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.compression_mode = ENVPTR->GetIntField(ENVONLY, ciobj, jf); */ jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.pixels = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels_per_block", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.pixels_per_block = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels_per_scanline", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->szip.pixels_per_scanline = ENVPTR->GetIntField(ENVONLY, ciobj, jf); break; case COMP_CODE_NBIT: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFNBITCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "nt", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.nt = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "sign_ext", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.sign_ext = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "fill_one", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.fill_one = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "start_bit", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.start_bit = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "bit_len", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.bit_len = ENVPTR->GetIntField(ENVONLY, ciobj, jf); break; } return JNI_TRUE; } /* * Extract info from C comp_info struct, put in Java HDFCompInfo object. * * Put in the fields for each compression method. */ jboolean setNewCompInfo(JNIEnv *env, jobject ciobj, comp_coder_t coder, comp_info *cinf) { jfieldID jf; jclass jc; jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFCompInfo"); if (jc == NULL) { return JNI_FALSE; } else { jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, coder); } switch (coder) { case COMP_CODE_NONE: case COMP_CODE_RLE: default: break; case COMP_CODE_SKPHUFF: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFSKPHUFFCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, COMP_CODE_SKPHUFF); jf = ENVPTR->GetFieldID(ENVONLY, jc, "skp_size", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->skphuff.skp_size); break; case COMP_CODE_DEFLATE: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFDeflateCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, COMP_CODE_DEFLATE); jf = ENVPTR->GetFieldID(ENVONLY, jc, "level", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->deflate.level); break; case COMP_CODE_SZIP: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFSZIPCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, COMP_CODE_SZIP); jf = ENVPTR->GetFieldID(ENVONLY, jc, "bits_per_pixel", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.bits_per_pixel); jf = ENVPTR->GetFieldID(ENVONLY, jc, "options_mask", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.options_mask); /* changes from hdf-42r0 to hdf-42r1 jf = ENVPTR->GetFieldID(ENVONLY, jc, "compression_mode", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.compression_mode); */ jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.pixels); jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels_per_block", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.pixels_per_block); jf = ENVPTR->GetFieldID(ENVONLY, jc, "pixels_per_scanline", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->szip.pixels_per_scanline); break; case COMP_CODE_NBIT: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFNBITCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, COMP_CODE_NBIT); jf = ENVPTR->GetFieldID(ENVONLY, jc, "nt", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->nbit.nt); jf = ENVPTR->GetFieldID(ENVONLY, jc, "sign_ext", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->nbit.sign_ext); jf = ENVPTR->GetFieldID(ENVONLY, jc, "fill_one", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->nbit.fill_one); jf = ENVPTR->GetFieldID(ENVONLY, jc, "start_bit", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->nbit.start_bit); jf = ENVPTR->GetFieldID(ENVONLY, jc, "bit_len", "I"); if (jf == NULL) { return JNI_FALSE; } ENVPTR->SetIntField(ENVONLY, ciobj, jf, cinf->nbit.bit_len); break; } return JNI_TRUE; } /* * Get info from old style C comp_info struct, put in HDFCompInfo object. */ jboolean getOldCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf) { jfieldID jf; jclass jc; jint ctype; jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFOldCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ctype = ENVPTR->GetIntField(ENVONLY, ciobj, jf); switch (ctype) { case COMP_NONE: case COMP_RLE: case COMP_IMCOMP: default: break; case COMP_JPEG: jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFJPEGCompInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "quality", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->jpeg.quality = ENVPTR->GetIntField(ENVONLY, ciobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "force_baseline", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->jpeg.force_baseline = ENVPTR->GetIntField(ENVONLY, ciobj, jf); break; } return JNI_TRUE; } /* * Get the Chunk info from C HDF_CHUNK_DEF struct, put in * Java HDFChunkInfo object. */ jboolean getChunkInfo(JNIEnv *env, jobject chunkobj, HDF_CHUNK_DEF *cinf) { jfieldID jf; jclass jc; jint ctype; jobject larr; jint *lens; int i; jboolean bb; jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFChunkInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "ctype", "I"); if (jf == NULL) { return JNI_FALSE; } ctype = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "chunk_lengths", "[I"); if (jf == NULL) { return JNI_FALSE; } larr = ENVPTR->GetObjectField(ENVONLY, chunkobj, jf); if (larr == NULL) { return JNI_FALSE; } lens = (jint *)ENVPTR->GetIntArrayElements(ENVONLY, (jintArray)larr, &bb); for (i = 0; i < H4_MAX_VAR_DIMS; i++) { cinf->comp.chunk_lengths[i] = (int32)lens[i]; } ENVPTR->ReleaseIntArrayElements(ENVONLY, (jintArray)larr, (jint *)lens, JNI_ABORT); if (ctype == (HDF_CHUNK | HDF_COMP)) { jf = ENVPTR->GetFieldID(ENVONLY, jc, "comp_type", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->comp.comp_type = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "cinfo", "Lhdf/hdflib/HDFCompInfo;"); if (jf == NULL) { return JNI_FALSE; } larr = ENVPTR->GetObjectField(ENVONLY, chunkobj, jf); if (larr == NULL) { return JNI_FALSE; } /* set compression information */ return getNewCompInfo(env, (jobject)larr, &(cinf->comp.cinfo)); } else if (ctype == (HDF_CHUNK | HDF_NBIT)) { jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFNBITChunkInfo"); if (jc == NULL) { return JNI_FALSE; } jf = ENVPTR->GetFieldID(ENVONLY, jc, "chunk_lengths", "[I"); if (jf == NULL) { return JNI_FALSE; } larr = ENVPTR->GetObjectField(ENVONLY, chunkobj, jf); if (larr == NULL) { return JNI_FALSE; } lens = (jint *)ENVPTR->GetIntArrayElements(ENVONLY, (jintArray)larr, &bb); for (i = 0; i < H4_MAX_VAR_DIMS; i++) { cinf->nbit.chunk_lengths[i] = (int32)lens[i]; } ENVPTR->ReleaseIntArrayElements(ENVONLY, (jintArray)larr, (jint *)lens, JNI_ABORT); jf = ENVPTR->GetFieldID(ENVONLY, jc, "start_bit", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.start_bit = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "bit_len", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.bit_len = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "sign_ext", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.sign_ext = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); jf = ENVPTR->GetFieldID(ENVONLY, jc, "fill_one", "I"); if (jf == NULL) { return JNI_FALSE; } cinf->nbit.fill_one = ENVPTR->GetIntField(ENVONLY, chunkobj, jf); } return JNI_TRUE; } /* * Create C HDF_CHUNK_DEF struct from Java HDFChunkInfo object. * * Determine the compression method, and create an appropriate subclass * of HDFCompInfo. Then call the constructor for HDFChunkInfo. */ jboolean makeChunkInfo(JNIEnv *env, jobject chunkobj, int32 flgs, HDF_CHUNK_DEF *cinf) { jclass jc; jclass jci; jmethodID jmi; jintArray rarray; jobject compinfo; if ((rarray = ENVPTR->NewIntArray(ENVONLY, H4_MAX_VAR_DIMS)) == NULL) return JNI_FALSE; ENVPTR->SetIntArrayRegion(ENVONLY, rarray, 0, H4_MAX_VAR_DIMS, (jint *)cinf->chunk_lengths); /* release rarray? */ if ((jci = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFChunkInfo")) == NULL) return JNI_FALSE; switch (flgs) { case HDF_CHUNK: default: if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFCompInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "()V")) == NULL) return JNI_FALSE; compinfo = ENVPTR->NewObject(ENVONLY, jc, jmi); break; case (HDF_CHUNK | HDF_COMP): switch (cinf->comp.comp_type) { case COMP_CODE_NONE: default: if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFCompInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "()V")) == NULL) return JNI_FALSE; compinfo = ENVPTR->NewObject(ENVONLY, jc, jmi); break; case COMP_CODE_JPEG: /* new HDFJPEGCompInfo() */ if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFJPEGCompInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "(II)V")) == NULL) return JNI_FALSE; compinfo = ENVPTR->NewObject(ENVONLY, jc, jmi, cinf->comp.cinfo.jpeg.quality, cinf->comp.cinfo.jpeg.force_baseline); break; case COMP_CODE_DEFLATE: if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFDeflateCompInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "(I)V")) == NULL) return JNI_FALSE; compinfo = ENVPTR->NewObject(ENVONLY, jc, jmi, cinf->comp.cinfo.deflate.level); break; case COMP_CODE_SZIP: if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFSZIPCompInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "(IIIII)V")) == NULL) return JNI_FALSE; compinfo = ENVPTR->NewObject( ENVONLY, jc, jmi, cinf->comp.cinfo.szip.bits_per_pixel, cinf->comp.cinfo.szip.options_mask, cinf->comp.cinfo.szip.pixels, cinf->comp.cinfo.szip.pixels_per_block, cinf->comp.cinfo.szip.pixels_per_scanline); break; } break; case (HDF_CHUNK | HDF_NBIT): /* new HDFCompInfo() */ if ((jc = ENVPTR->FindClass(ENVONLY, "hdf/hdflib/HDFNBITChunkInfo")) == NULL) return JNI_FALSE; if ((jmi = ENVPTR->GetMethodID(ENVONLY, jc, "", "([IIIII;)V")) == NULL) return JNI_FALSE; ENVPTR->CallVoidMethod(ENVONLY, chunkobj, jmi, rarray, cinf->nbit.start_bit, cinf->nbit.bit_len, cinf->nbit.sign_ext, cinf->nbit.fill_one); return JNI_TRUE; break; } if ((jmi = ENVPTR->GetMethodID(ENVONLY, jci, "", "([IILhdf/hdflib/HDFCompInfo;)V")) == NULL) return JNI_FALSE; ENVPTR->CallVoidMethod(ENVONLY, chunkobj, jmi, rarray, cinf->comp.comp_type, compinfo); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HCget_1config_1info(JNIEnv *env, jclass clss, jint coder_type) { intn rval = FAIL; uint32 compression_config_info = 0; UNUSED(env); UNUSED(clss); /* check for success... */ if ((rval = HCget_config_info((comp_coder_t)coder_type, (uint32 *)&compression_config_info)) == FAIL) return -1; return compression_config_info; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfstructsutil.h000066400000000000000000000052121503061704500205570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This module contains code to translate between the HDF C union 'comp_info' * and a subclass of the Java class CompInfo. * * This is nasty and ugly and probably buggy. * */ #include /* Header for class hdf_hdflib_UTIL */ #ifndef Included_hdf_hdflib_UTIL #define Included_hdf_hdflib_UTIL #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Get information from a Java HDFNewCompInfo object in to a C comp_info * struct. * * Extract information for the different types of compression. */ jboolean getNewCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); /* * Extract info from C comp_info struct, put in Java HDFCompInfo object. * * Put in the fields for each compression method. */ jboolean setNewCompInfo(JNIEnv *env, jobject ciobj, comp_coder_t coder, comp_info *cinf); /* * Get info from old style C comp_info struct, put in HDFCompInfo object. */ jboolean getOldCompInfo(JNIEnv *env, jobject ciobj, comp_info *cinf); /* * Get the Chunk info from C HDF_CHUNK_DEF struct, put in * Java HDFChunkInfo object. */ jboolean getChunkInfo(JNIEnv *env, jobject chunkobj, HDF_CHUNK_DEF *cinf); /* * Create C HDF_CHUNK_DEF struct from Java HDFChunkInfo object. * * Determine the compression method, and create an appropriate subclass * of HDFCompInfo. Then call the constructor for HDFChunkInfo. */ jboolean makeChunkInfo(JNIEnv *env, jobject chunkobj, int32 flgs, HDF_CHUNK_DEF *cinf); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_HCget_1config_1info(JNIEnv *env, jclass clss, jint coder_type); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_UTIL */ hdf4-hdf4.3.1/java/src/jni/hdfvdataImp.c000066400000000000000000000650741503061704500177260ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "h4jni.h" #include "hdfvdataImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VSattach(JNIEnv *env, jclass clss, jlong fid, jint vdata_ref, jstring accessmode) { int32 rval = -1; const char *access = NULL; HFILEID id = (HFILEID)fid; UNUSED(clss); if (accessmode == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSattach: accessmode is null"); PIN_JAVA_STRING(ENVONLY, accessmode, access, NULL, "VSattach: accessmode not pinned"); /* open HDF file specified by hdf_HDF_file */ if ((rval = VSattach(id, (int32)vdata_ref, access)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (access) UNPIN_JAVA_STRING(ENVONLY, accessmode, access); return (jlong)rval; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSdetach(JNIEnv *env, jclass clss, jlong vdata_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSdetach((int32)vdata_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VSgetid(JNIEnv *env, jclass clss, jlong fid, jint vdata_ref) { int32 rval = FAIL; HFILEID id = (HFILEID)fid; UNUSED(clss); if ((rval = VSgetid(id, (int32)vdata_ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSgetclass(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray hdfclass) { int32 rval = -1; char *className = NULL; jstring rstring; UNUSED(clss); if (NULL == (className = (char *)malloc(VSNAMELENMAX + 1))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSgetclass: failed to allocate data buffer"); if (hdfclass == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSgetclass: hdfclass is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, hdfclass) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSgetclass: output array hdfclass < order 1"); /* get the class class of the vgroup */ if ((rval = VSgetclass((int32)vdata_id, className)) < 0) H4_LIBRARY_ERROR(ENVONLY); className[VSNAMELENMAX] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, className))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, hdfclass, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(className); return; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSgetname(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray hdfname) { int32 rval = -1; char *data = NULL; jstring rstring; UNUSED(clss); if (NULL == (data = (char *)malloc(sizeof(char) * (size_t)VSNAMELENMAX + 1))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSgetname: failed to allocate data buffer"); if (hdfname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSgetname: hdfname is NULL"); /* get the name name of the vgroup */ if ((rval = VSgetname((int32)vdata_id, data)) < 0) H4_LIBRARY_ERROR(ENVONLY); data[VSNAMELENMAX] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, hdfname, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSelts(JNIEnv *env, jclass clss, jlong vdata_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSelts((int32)vdata_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfdefine(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname, jint numbertype, jint order) { int32 rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (fieldname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfdefine: fieldname is null"); PIN_JAVA_STRING(ENVONLY, fieldname, fstr, NULL, "VSfdefine: fieldname not pinned"); if ((rval = VSfdefine((int32)vdata_id, (char *)fstr, (int32)numbertype, (int32)order)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, fieldname, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfexist(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname) { int32 rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (fieldname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfexist: fieldname is null"); PIN_JAVA_STRING(ENVONLY, fieldname, fstr, NULL, "VSfexist: fieldname not pinned"); /* Check the fields */ if ((rval = VSfexist((int32)vdata_id, (char *)fstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, fieldname, fstr); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfind(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname) { int32 rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (fieldname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfind: fieldname is null"); PIN_JAVA_STRING(ENVONLY, fieldname, fstr, NULL, "VSfind: fieldname not pinned"); /* Check the fields */ if ((rval = VSfind((int32)vdata_id, (char *)fstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, fieldname, fstr); return (rval); } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsetblocksize(JNIEnv *env, jclass clss, jlong vdata_id, jint blocksize) { int32 rval = FAIL; UNUSED(clss); /* Check the fields */ if ((rval = VSsetblocksize((int32)vdata_id, (int32)blocksize)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (rval); } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsetnumblocks(JNIEnv *env, jclass clss, jlong vdata_id, jint numblocks) { int32 rval = FAIL; UNUSED(clss); /* Check the fields */ if ((rval = VSsetnumblocks((int32)vdata_id, (int32)numblocks)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (rval); } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetfields(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray fields) { int rval = FAIL; char *flds = NULL; jstring rstring; UNUSED(clss); if (NULL == (flds = (char *)malloc(sizeof(char) * (size_t)25600))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSgetfields: failed to allocate data buffer"); if (fields == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSgetfields: fields is NULL"); /* get the fields name in the vdata */ if ((rval = VSgetfields((int32)vdata_id, flds)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); flds[25599] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, flds))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, fields, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(flds); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetinterlace(JNIEnv *env, jclass clss, jlong vdata_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSgetinterlace((int32)vdata_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSinquire(JNIEnv *env, jclass clss, jlong vdata_id, jintArray iargs, jobjectArray sargs) { intn rval = FAIL; char *flds = NULL; char *name = NULL; jint *theArgs = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if (iargs == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSinquire: iargs is NULL"); if (sargs == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSinquire: sargs is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, iargs) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSinquire: output array iargs < order 3"); if (ENVPTR->GetArrayLength(ENVONLY, sargs) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSinquire: output array sargs < order 2"); if (NULL == (flds = (char *)malloc(sizeof(char) * (size_t)MAX_FIELD_SIZE + 1))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSinquire: failed to allocate data buffer"); if (NULL == (name = (char *)malloc(sizeof(char) * (size_t)H4_MAX_NC_NAME + 1))) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSinquire: failed to allocate data buffer"); PIN_INT_ARRAY(ENVONLY, iargs, theArgs, &isCopy, "VSinquire: iargs not pinned"); if ((rval = VSinquire((int32)vdata_id, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), flds, (int32 *)&(theArgs[2]), name)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); flds[MAX_FIELD_SIZE] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, flds))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, sargs, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); name[H4_MAX_NC_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, name))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, sargs, 1, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(name); free(flds); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSgetblockinfo(JNIEnv *env, jclass clss, jlong vdata_id, jintArray iargs) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (iargs == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSgetblockinfo: iargs is NULL"); PIN_INT_ARRAY(ENVONLY, iargs, theArgs, &isCopy, "VSgetblockinfo: iargs not pinned"); if ((rval = VSgetblockinfo((int32)vdata_id, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, iargs, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSlone(JNIEnv *env, jclass clss, jlong fid, jintArray ref_array, jint arraysize) { int rval = FAIL; jint *arr = NULL; jboolean isCopy; UNUSED(clss); if (ref_array == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSlone: ref_array is NULL"); PIN_INT_ARRAY(ENVONLY, ref_array, arr, &isCopy, "VSlone: ref_array not pinned"); /* get the lone vdata reference number in the vdata */ if ((rval = VSlone((int32)fid, (int32 *)arr, (int32)arraysize)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_INT_ARRAY(ENVONLY, ref_array, arr, (rval == FAIL) ? JNI_ABORT : 0); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSread(JNIEnv *env, jclass clss, jlong vdata_id, jbyteArray databuf, jint nrecords, jint interlace) { int32 rval = FAIL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (databuf == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSread: databuf is NULL"); PIN_BYTE_ARRAY_CRITICAL(ENVONLY, databuf, dat, &isCopy, "VSread: databuf not pinned"); /* retrieve the general info. */ if ((rval = VSread((int32)vdata_id, (unsigned char *)dat, nrecords, interlace)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_ARRAY_CRITICAL(ENVONLY, databuf, dat, (rval == FAIL) ? JNI_ABORT : 0); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSseek(JNIEnv *env, jclass clss, jlong vdata_id, jint nrecord) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSseek((int32)vdata_id, (int32)nrecord)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetfields(JNIEnv *env, jclass clss, jlong vdata_id, jstring fields) { int32 rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (fields == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetfields: fields is null"); PIN_JAVA_STRING(ENVONLY, fields, fstr, NULL, "VSsetfields: fields not pinned"); /* set the vdata fields to read */ if ((rval = VSsetfields((int32)vdata_id, (char *)fstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, fields, fstr); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetinterlace(JNIEnv *env, jclass clss, jlong vdata_id, jint interlace) { int32 rval = FAIL; UNUSED(clss); /* set the interlace for Vdata */ if ((rval = VSsetinterlace((int32)vdata_id, (int32)interlace)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsizeof(JNIEnv *env, jclass clss, jlong vdata_id, jstring fields) { int32 rval = FAIL; const char *fstr = NULL; UNUSED(clss); if (fields == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsizeof: fields is null"); PIN_JAVA_STRING(ENVONLY, fields, fstr, NULL, "VSsizeof: fields not pinned"); /* get the size of a Vdata */ if ((rval = VSsizeof((int32)vdata_id, (char *)fstr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (fstr) UNPIN_JAVA_STRING(ENVONLY, fields, fstr); return (rval); } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSappendable(JNIEnv *env, jclass clss, jint vkey, jint block_size) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSappendable((int32)vkey, (int32)block_size)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSdump(JNIEnv *env, jclass clss, jint vkey) { UNUSED(env); UNUSED(clss); VSdump((int32)vkey); } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfindclass(JNIEnv *env, jclass clss, jlong vdata_id, jstring hdfclassname) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (hdfclassname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfindclass: hdfclassname is null"); PIN_JAVA_STRING(ENVONLY, hdfclassname, str, NULL, "VSfindclass: hdfclassname not pinned"); /* get the class name of the vgroup */ if ((rval = VSfindclass((int32)vdata_id, str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, hdfclassname, str); return rval; } /* no idea at all how to deal with 2-D arrays.... */ JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSfpack(JNIEnv *env, jclass clss, jlong vdata_id, jint action, jstring fields_in_buf, jarray buf, jint bufsize, jstring fields, jarray bufptrs) { UNUSED(clss); UNUSED(vdata_id); UNUSED(action); UNUSED(fields_in_buf); UNUSED(buf); UNUSED(bufsize); UNUSED(fields); UNUSED(bufptrs); /* VSfpack((int32) vdata_id, (intn) action, char *fields_in_buf, void * buf, intn buf_size, intn n_records, char *fields, void * bufptrs[]); */ H4_UNIMPLEMENTED(ENVONLY, "VSfpack"); done: return; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetversion(JNIEnv *env, jclass clss, jint key) { int32 rval; UNUSED(clss); if ((rval = VSgetversion((int32)key)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSsetclass(JNIEnv *env, jclass clss, jlong vdata_id, jstring vdata_class) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (vdata_class == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetclass: vdata_class is null"); PIN_JAVA_STRING(ENVONLY, vdata_class, str, NULL, "VSsetclass: vdata_class not pinned"); if ((rval = VSsetclass((int32)vdata_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, vdata_class, str); return; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetexternalfile(JNIEnv *env, jclass clss, jint vkey, jstring filename, jint offset) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetexternalfile: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, str, NULL, "VSsetexternalfile: filename not pinned"); if ((rval = VSsetexternalfile((int32)vkey, (char *)str, (int32)offset)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, filename, str); return JNI_TRUE; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSsetname(JNIEnv *env, jclass clss, jlong vdata_id, jstring vdata_name) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (vdata_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetname: vdata_name is null"); PIN_JAVA_STRING(ENVONLY, vdata_name, str, NULL, "VSsetname: vdata_name not pinned"); if ((rval = VSsetname((int32)vdata_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, vdata_name, str); return; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSwrite(JNIEnv *env, jclass clss, jlong vdata_id, jbyteArray databuf, jint n_records, jint interlace) { int32 rval = FAIL; jbyte *dat = NULL; jboolean isCopy; UNUSED(clss); if (databuf == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSwrite: databuf is NULL"); PIN_BYTE_ARRAY(ENVONLY, databuf, dat, &isCopy, "VSwrite: databuf not pinned"); if ((rval = VSwrite((int32)vdata_id, (unsigned char *)dat, (int32)n_records, (int32)interlace)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (dat) UNPIN_BYTE_ARRAY(ENVONLY, databuf, dat, (rval == FAIL) ? JNI_ABORT : 0); return rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSattrinfo(JNIEnv *env, jclass clss, jlong id, jint index, jint attr_index, jobjectArray name, jintArray argv) { int32 rval = FAIL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(256)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSattrinfo: failed to allocate data buffer"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSattrinfo: name is NULL"); else if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSattrinfo: argv is NULL"); else if (ENVPTR->GetArrayLength(ENVONLY, name) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSattrinfo: output array name < order 1"); else if (ENVPTR->GetArrayLength(ENVONLY, argv) < 3) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSattrinfo: output array argv < order 3"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "VSattrinfo: argv not pinned"); if ((rval = VSattrinfo((int32)id, (int32)index, (int32)attr_index, data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[255] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfindex(JNIEnv *env, jclass clss, jlong id, jstring name, jintArray findex) { intn rval = FAIL; const char *str = NULL; jint *arr = NULL; jboolean isCopy; UNUSED(clss); if (findex == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfindex: findex is NULL"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfindex: name is null"); PIN_INT_ARRAY(ENVONLY, findex, arr, &isCopy, "VSfindex: findex not pinned"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "VSfindex: name not pinned"); if ((rval = VSfindex((int32)id, str, (int32 *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); if (arr) UNPIN_INT_ARRAY(ENVONLY, findex, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfindattr(JNIEnv *env, jclass clss, jlong id, jint index, jstring name) { int32 rval = FAIL; const char *cname = NULL; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSfindattr: name is null"); PIN_JAVA_STRING(ENVONLY, name, cname, NULL, "VSfindattr: name not pinned"); if ((rval = VSfindattr((int32)id, (int32)index, cname)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (cname) UNPIN_JAVA_STRING(ENVONLY, name, cname); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfnattrs(JNIEnv *env, jclass clss, jlong id, jint attr) { intn rval = -1; UNUSED(clss); if ((rval = VSfnattrs((int32)id, (int32)attr)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSgetattr(JNIEnv *env, jclass clss, jlong id, jint field_index, jint attr_index, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; UNUSED(clss); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSgetattr: values is NULL"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "VSgetattr: values not pinned"); if ((rval = VSgetattr((int32)id, (int32)field_index, (int32)attr_index, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSisattr(JNIEnv *env, jclass clss, jlong id) { intn rval = FAIL; UNUSED(clss); if ((rval = VSisattr((int32)id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSnattrs(JNIEnv *env, jclass clss, jlong id) { intn rval = -1; UNUSED(clss); if ((rval = VSnattrs((int32)id)) <= 0) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetattr__JILjava_lang_String_2JILjava_lang_String_2(JNIEnv *env, jclass clss, jlong id, jint index, jstring attr_name, jlong data_type, jint count, jstring values) { intn rval = FAIL; const char *str = NULL; const char *val = NULL; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetattr: values is null"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "VSsetattr: attr_name not pinned"); PIN_JAVA_STRING(ENVONLY, values, val, NULL, "VSsetattr: values not pinned"); if ((rval = VSsetattr((int32)id, (int32)index, (char *)str, (int32)data_type, (int32)count, (void *)val)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (val) UNPIN_JAVA_STRING(ENVONLY, values, val); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetattr__JILjava_lang_String_2JI_3B(JNIEnv *env, jclass clss, jlong id, jint index, jstring attr_name, jlong data_type, jint count, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; const char *str = NULL; jboolean isCopy; UNUSED(clss); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetattr: values is NULL"); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSsetattr: attr_name is null"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "VSsetattr: values not pinned"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "VSsetattr: attr_name not pinned"); if ((rval = VSsetattr((int32)id, (int32)index, (char *)str, (int32)data_type, (int32)count, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvdataImp.h000066400000000000000000000210361503061704500177210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VDATA */ #ifndef Included_hdf_hdflib_VDATA #define Included_hdf_hdflib_VDATA #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VSattach(JNIEnv *env, jclass clss, jlong fid, jint vdata_ref, jstring accessmode); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSdetach(JNIEnv *env, jclass clss, jlong vdata_id); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VSgetid(JNIEnv *env, jclass clss, jlong fid, jint vdata_ref); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSgetclass(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray hdfclass); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSgetname(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray hdfname); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSelts(JNIEnv *env, jclass clss, jlong vdata_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfdefine(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname, jint numbertype, jint order); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfexist(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfind(JNIEnv *env, jclass clss, jlong vdata_id, jstring fieldname); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsetblocksize(JNIEnv *env, jclass clss, jlong vdata_id, jint blocksize); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsetnumblocks(JNIEnv *env, jclass clss, jlong vdata_id, jint numblocks); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetfields(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray fields); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetinterlace(JNIEnv *env, jclass clss, jlong vdata_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSinquire(JNIEnv *env, jclass clss, jlong vdata_id, jintArray iargs, jobjectArray sargs); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSgetblockinfo(JNIEnv *env, jclass clss, jlong vdata_id, jintArray iargs); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSlone(JNIEnv *env, jclass clss, jlong fid, jintArray ref_array, jint arraysize); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSread(JNIEnv *env, jclass clss, jlong vdata_id, jbyteArray databuf, jint nrecords, jint interlace); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSseek(JNIEnv *env, jclass clss, jlong vdata_id, jint nrecord); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetfields(JNIEnv *env, jclass clss, jlong vdata_id, jstring fields); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetinterlace(JNIEnv *env, jclass clss, jlong vdata_id, jint interlace); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSsizeof(JNIEnv *env, jclass clss, jlong vdata_id, jstring fields); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSappendable(JNIEnv *env, jclass clss, jint vkey, jint block_size); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSdump(JNIEnv *env, jclass clss, jint vkey); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfindclass(JNIEnv *env, jclass clss, jlong vdata_id, jstring hdfclassname); /* no idea at all how to deal with 2-D arrays.... */ JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSfpack(JNIEnv *env, jclass clss, jlong vdata_id, jint action, jstring fields_in_buf, jarray buf, jint bufsize, jstring fields, jarray bufptrs); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSgetversion(JNIEnv *env, jclass clss, jint key); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSsetclass(JNIEnv *env, jclass clss, jlong vdata_id, jstring vdata_class); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetexternalfile(JNIEnv *env, jclass clss, jint vkey, jstring filename, jint offset); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_VSsetname(JNIEnv *env, jclass clss, jlong vdata_id, jstring vdata_name); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSwrite(JNIEnv *env, jclass clss, jlong vdata_id, jbyteArray databuf, jint n_records, jint interlace); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSattrinfo(JNIEnv *env, jclass clss, jlong id, jint index, jint attr_index, jobjectArray name, jintArray argv); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSfindex(JNIEnv *env, jclass clss, jlong id, jstring name, jintArray findex); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfindattr(JNIEnv *env, jclass clss, jlong id, jint index, jstring name); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSfnattrs(JNIEnv *env, jclass clss, jlong id, jint attr); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSgetattr(JNIEnv *env, jclass clss, jlong id, jint field_index, jint attr_index, jbyteArray values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSisattr(JNIEnv *env, jclass clss, jlong id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSnattrs(JNIEnv *env, jclass clss, jlong id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetattr__JILjava_lang_String_2JILjava_lang_String_2( JNIEnv *env, jclass clss, jlong id, jint index, jstring attr_name, jlong data_type, jint count, jstring values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSsetattr__JILjava_lang_String_2JI_3B( JNIEnv *env, jclass clss, jlong id, jint index, jstring attr_name, jlong data_type, jint count, jbyteArray values); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VDATA */ hdf4-hdf4.3.1/java/src/jni/hdfvfImp.c000066400000000000000000000063231503061704500172320ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfvfImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldesize(JNIEnv *env, jclass clss, jlong vdata_id, int field_index) { int32 rval = FAIL; UNUSED(clss); if ((rval = VFfieldesize((int32)vdata_id, (int32)field_index)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldisize(JNIEnv *env, jclass clss, jlong vdata_id, int field_index) { int32 rval = FAIL; UNUSED(clss); if ((rval = VFfieldisize((int32)vdata_id, (int32)field_index)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldname(JNIEnv *env, jclass clss, jlong vdata_id, int field_index) { jstring rstring = NULL; char *str; UNUSED(clss); if ((str = VFfieldname((int32)vdata_id, (int32)field_index)) == NULL) H4_LIBRARY_ERROR(ENVONLY); /* convert it to java string */ rstring = ENVPTR->NewStringUTF(ENVONLY, str); done: return rstring; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldorder(JNIEnv *env, jclass clss, jlong vdata_id, int field_index) { int32 rval = FAIL; UNUSED(clss); if ((rval = VFfieldorder((int32)vdata_id, (int32)field_index)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldtype(JNIEnv *env, jclass clss, jlong vdata_id, int field_index) { int32 rval = FAIL; UNUSED(clss); if ((rval = VFfieldtype((int32)vdata_id, (int32)field_index)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFnfields(JNIEnv *env, jclass clss, jlong key) { int32 rval = FAIL; UNUSED(clss); if ((rval = VFnfields((int32)key)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvfImp.h000066400000000000000000000046601503061704500172410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VF */ #ifndef Included_hdf_hdflib_VF #define Included_hdf_hdflib_VF #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldesize(JNIEnv *env, jclass clss, jlong vdata_id, int field_index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldisize(JNIEnv *env, jclass clss, jlong vdata_id, int field_index); JNIEXPORT jstring JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldname(JNIEnv *env, jclass clss, jlong vdata_id, int field_index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldorder(JNIEnv *env, jclass clss, jlong vdata_id, int field_index); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_VFfieldtype(JNIEnv *env, jclass clss, jlong vdata_id, int field_index); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VFnfields(JNIEnv *env, jclass clss, jlong key); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VF */ hdf4-hdf4.3.1/java/src/jni/hdfvgroupImp.c000066400000000000000000000535351503061704500201500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "h4jni.h" #include "hdfvgroupImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vstart(JNIEnv *env, jclass clss, jlong fid) { intn rval = FAIL; UNUSED(clss); if ((rval = Vstart((int32)fid)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Vattach(JNIEnv *env, jclass clss, jlong fid, jint vgroup_ref, jstring accessmode) { int rval = FAIL; const char *access = NULL; HFILEID id = (HFILEID)fid; UNUSED(clss); if (accessmode == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vattach: accessmode is null"); PIN_JAVA_STRING(ENVONLY, accessmode, access, NULL, "Vattach: accessmode not pinned"); /* open HDF file specified by hdf_HDF_file */ if ((rval = Vattach(id, (int32)vgroup_ref, access)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (access) UNPIN_JAVA_STRING(ENVONLY, accessmode, access); return (jlong)rval; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vdetach(JNIEnv *env, jclass clss, jlong vgroup_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vdetach((int32)vgroup_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vend(JNIEnv *env, jclass clss, jlong fid) { intn rval = FAIL; HFILEID id = (HFILEID)fid; UNUSED(clss); if ((rval = Vend(id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return; } JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Vgetid(JNIEnv *env, jclass clss, jlong fid, jint vgroup_ref) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vgetid((int32)fid, (int32)vgroup_ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vgetclass(JNIEnv *env, jclass clss, jlong vgroup_id, jobjectArray hdfclassname) { int32 rval = FAIL; char *data = NULL; jstring rstring; UNUSED(clss); if ((data = (char *)malloc(H4_MAX_NC_CLASS + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Vgetclass: failed to allocate data buffer"); if (hdfclassname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgetclass: hdfclassname is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, hdfclassname) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vgetclass: output array hdfclassname < order 1"); /* get the class name of the vgroup */ if ((rval = Vgetclass((int32)vgroup_id, data)) < 0) H4_LIBRARY_ERROR(ENVONLY); data[H4_MAX_NC_CLASS] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, hdfclassname, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return; } JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vgetname(JNIEnv *env, jclass clss, jlong vgroup_id, jobjectArray hdfname) { int32 rval = FAIL; char *data = NULL; jstring rstring; UNUSED(clss); if ((data = (char *)malloc(H4_MAX_GR_NAME + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Vgetname: failed to allocate data buffer"); if (hdfname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgetname: hdfname is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, hdfname) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vgetname: array hdfname < order 1"); if ((rval = Vgetname((int32)vgroup_id, data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[H4_MAX_GR_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, hdfname, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Visvg(JNIEnv *env, jclass clss, jlong vgroup_id, jint vgroup_ref) { intn rval = FALSE; UNUSED(clss); if ((rval = Visvg((int32)vgroup_id, vgroup_ref)) == FALSE) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Visvs(JNIEnv *env, jclass clss, jlong vgroup_id, jint vdata_ref) { intn rval = FALSE; UNUSED(clss); if ((rval = Visvs((int32)vgroup_id, vdata_ref)) == FALSE) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgettagrefs(JNIEnv *env, jclass clss, jlong vgroup_id, jintArray tags, jintArray refs, jint size) { int32 rval = FAIL; jint *tagVal = NULL; jint *refVal = NULL; jboolean isCopy; UNUSED(clss); if (tags == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgettagrefs: tags is NULL"); if (refs == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgettagrefs: refs is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, tags) < size) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vgettagrefs: output array tags < order 'size'"); if (ENVPTR->GetArrayLength(ENVONLY, refs) < size) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vgettagrefs: output array refs < order 'size'"); PIN_INT_ARRAY(ENVONLY, tags, tagVal, &isCopy, "Vgettagrefs: tags not pinned"); PIN_INT_ARRAY(ENVONLY, refs, refVal, &isCopy, "Vgettagrefs: refs not pinned"); /* get the tag/ref pairs number in the vgroup */ if ((rval = Vgettagrefs((int32)vgroup_id, (int32 *)tagVal, (int32 *)refVal, size)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (refVal) UNPIN_INT_ARRAY(ENVONLY, refs, refVal, (rval == FAIL) ? JNI_ABORT : 0); if (tagVal) UNPIN_INT_ARRAY(ENVONLY, tags, tagVal, (rval == FAIL) ? JNI_ABORT : 0); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vgettagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint index, jintArray tagref) { intn rval = FAIL; jint *theArgs = NULL; jboolean isCopy; UNUSED(clss); if (tagref == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgettagref: tagref is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, tagref) < 2) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vgettagref: output array tagref < order 2"); PIN_INT_ARRAY(ENVONLY, tagref, theArgs, &isCopy, "Vgettagref: tagref not pinned"); /* get the tag/ref pairs number in the vgroup */ if ((rval = Vgettagref((int32)vgroup_id, index, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArgs) UNPIN_INT_ARRAY(ENVONLY, tagref, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vntagrefs(JNIEnv *env, jclass clss, jlong vgroup_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vntagrefs((int32)vgroup_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vinqtagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vinqtagref((int32)vgroup_id, (int32)tag, (int32)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vlone(JNIEnv *env, jclass clss, jlong fid, jintArray ref_array, jint arraysize) { int rval = FAIL; jint *arr = NULL; jboolean isCopy; UNUSED(clss); if (ref_array == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vlone: ref_array is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, ref_array) < arraysize) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vlone: output array ref_array < order 'arraysize'"); PIN_INT_ARRAY(ENVONLY, ref_array, arr, &isCopy, "Vlone: ref_array not pinned"); /* get the lone group reference number in the vgroup */ if ((rval = Vlone((int32)fid, (int32 *)arr, arraysize)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_INT_ARRAY(ENVONLY, ref_array, arr, (rval == FAIL) ? JNI_ABORT : 0); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vaddtagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref) { intn rval = FAIL; UNUSED(clss); if ((rval = Vaddtagref((int32)vgroup_id, (int32)tag, (int32)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vdeletetagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref) { intn rval = FAIL; UNUSED(clss); if ((rval = Vdeletetagref((int32)vgroup_id, (int32)tag, (int32)ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vclose_I(JNIEnv *env, jclass clss, jlong file_id) { intn rval = FAIL; UNUSED(clss); if ((rval = Vclose((int32)file_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfind(JNIEnv *env, jclass clss, jlong file_id, jstring vgname) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (vgname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vfind: vgname is null"); PIN_JAVA_STRING(ENVONLY, vgname, str, NULL, "Vfind: vgname not pinned"); if ((rval = Vfind((int32)file_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, vgname, str); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfindclass(JNIEnv *env, jclass clss, jlong file_id, jstring vgclassname) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (vgclassname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vfindclass: vgclassname is null"); PIN_JAVA_STRING(ENVONLY, vgclassname, str, NULL, "Vfindclass: vgclassname not pinned"); if ((rval = Vfindclass((int32)file_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, vgclassname, str); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vflocate(JNIEnv *env, jclass clss, jint key, jstring field) { int32 rval = FAIL; const char *str = NULL; UNUSED(clss); if (field == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vflocate: field is null"); PIN_JAVA_STRING(ENVONLY, field, str, NULL, "Vflocate: field not pinned"); if ((rval = Vflocate((int32)key, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, field, str); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgetnext(JNIEnv *env, jclass clss, jint vkey, jint elem_ref) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vgetnext((int32)vkey, (int32)elem_ref)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vinquire(JNIEnv *env, jclass clss, jlong vgroup_id, jintArray n_entries, jobjectArray vgroup_name) { intn rval = FAIL; jint *theArg = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(H4_MAX_NC_NAME + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Vinquire: failed to allocate data buffer"); if (n_entries == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vinquire: n_entries is NULL"); if (vgroup_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vinquire: vgroup_name is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, n_entries) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vinquire: output array n_entries < order 1"); if (ENVPTR->GetArrayLength(ENVONLY, vgroup_name) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vinquire: output array vgroup_name < order 1"); PIN_INT_ARRAY(ENVONLY, n_entries, theArg, &isCopy, "Vinquire: n_entries not pinned"); if ((rval = Vinquire((int32)vgroup_id, (int32 *)&(theArg[0]), data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[H4_MAX_NC_NAME] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, vgroup_name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArg) UNPIN_INT_ARRAY(ENVONLY, n_entries, theArg, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vinsert(JNIEnv *env, jclass clss, jlong vgroup_id, jint v_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vinsert((int32)vgroup_id, (int32)v_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vnrefs(JNIEnv *env, jclass clss, jint vkey, jint tag) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vnrefs((int32)vkey, (int32)tag)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vopen(JNIEnv *env, jclass clss, jstring filename, jint access, jshort ndds) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (filename == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vopen: filename is null"); PIN_JAVA_STRING(ENVONLY, filename, str, NULL, "Vopen: filename not pinned"); if ((rval = Vopen((char *)str, (intn)access, (int16)ndds)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, filename, str); return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetclass(JNIEnv *env, jclass clss, jlong vgroup_id, jstring hdfclassname) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (hdfclassname == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetclass: hdfclassname is null"); PIN_JAVA_STRING(ENVONLY, hdfclassname, str, NULL, "Vsetclass: hdfclassname not pinned"); if ((rval = Vsetclass((int32)vgroup_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, hdfclassname, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetname(JNIEnv *env, jclass clss, jlong vgroup_id, jstring name) { intn rval = FAIL; const char *str = NULL; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetname: name is null"); PIN_JAVA_STRING(ENVONLY, name, str, NULL, "Vsetname: name not pinned"); if ((rval = Vsetname((int32)vgroup_id, (char *)str)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (str) UNPIN_JAVA_STRING(ENVONLY, name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vattrinfo(JNIEnv *env, jclass clss, jlong id, jint index, jobjectArray name, jintArray argv) { int32 rval = FAIL; jint *theArgs = NULL; char *data = NULL; jstring rstring; jboolean isCopy; UNUSED(clss); if ((data = (char *)malloc(256)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "Vattrinfo2: failed to allocate data buffer"); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vattrinfo2: name is NULL"); if (argv == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vattrinfo2: argv is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, name) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vattrinfo2: output array name < order 1"); if (ENVPTR->GetArrayLength(ENVONLY, argv) < 5) H4_BAD_ARGUMENT_ERROR(ENVONLY, "Vattrinfo2: output array argv < order 5"); PIN_INT_ARRAY(ENVONLY, argv, theArgs, &isCopy, "Vattrinfo2: argv not pinned"); if ((rval = Vattrinfo2((int32)id, (int32)index, data, (int32 *)&(theArgs[0]), (int32 *)&(theArgs[1]), (int32 *)&(theArgs[2]), (int32 *)&(theArgs[3]), (uint16 *)&(theArgs[4]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[255] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); if (theArgs) UNPIN_INT_ARRAY(ENVONLY, argv, theArgs, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfindattr(JNIEnv *env, jclass clss, jlong id, jstring name) { int32 rval = FAIL; const char *cname = NULL; UNUSED(clss); if (name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vfindattr: name is null"); PIN_JAVA_STRING(ENVONLY, name, cname, NULL, "Vfindattr: name not pinned"); if ((rval = Vfindattr((int32)id, cname)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (cname) UNPIN_JAVA_STRING(ENVONLY, name, cname); return rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vgetattr(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; jboolean isCopy; UNUSED(clss); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vgetattr: values is NULL"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "Vgetattr: values not pinned"); if ((rval = Vgetattr2((int32)gr_id, (int32)attr_index, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgetversion(JNIEnv *env, jclass clss, jlong id) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vgetversion((int32)id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vnattrs(JNIEnv *env, jclass clss, jlong id) { int32 rval = FAIL; UNUSED(clss); if ((rval = Vnattrs2((int32)id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetattr__JLjava_lang_String_2JILjava_lang_String_2(JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jstring values) { intn rval = FAIL; const char *str = NULL; const char *val = NULL; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetattr: values is null"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "Vsetattr: attr_name not pinned"); PIN_JAVA_STRING(ENVONLY, values, val, NULL, "Vsetattr: values not pinned"); if ((rval = Vsetattr((int32)gr_id, (char *)str, (int32)data_type, (int32)count, (void *)val)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (val) UNPIN_JAVA_STRING(ENVONLY, values, val); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetattr__JLjava_lang_String_2JI_3B(JNIEnv *env, jclass clss, jlong id, jstring attr_name, jlong data_type, jint count, jbyteArray values) { intn rval = FAIL; jbyte *arr = NULL; const char *str = NULL; jboolean isCopy; UNUSED(clss); if (attr_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetattr: attr_name is null"); if (values == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "Vsetattr: values is null"); PIN_JAVA_STRING(ENVONLY, attr_name, str, NULL, "Vsetattr: attr_name not pinned"); PIN_BYTE_ARRAY(ENVONLY, values, arr, &isCopy, "Vsetattr: values not pinned"); if ((rval = Vsetattr((int32)id, (char *)str, (int32)data_type, (int32)count, (void *)arr)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (arr) UNPIN_BYTE_ARRAY(ENVONLY, values, arr, (rval == FAIL) ? JNI_ABORT : 0); if (str) UNPIN_JAVA_STRING(ENVONLY, attr_name, str); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvgroupImp.h000066400000000000000000000157551503061704500201570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VGROUP */ #ifndef Included_hdf_hdflib_VGROUP #define Included_hdf_hdflib_VGROUP #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vstart(JNIEnv *env, jclass clss, jlong fid); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Vattach(JNIEnv *env, jclass clss, jlong fid, jint vgroup_ref, jstring accessmode); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vdetach(JNIEnv *env, jclass clss, jlong vgroup_id); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vend(JNIEnv *env, jclass clss, jlong fid); JNIEXPORT jlong JNICALL Java_hdf_hdflib_HDFLibrary_Vgetid(JNIEnv *env, jclass clss, jlong fid, jint vgroup_ref); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vgetclass(JNIEnv *env, jclass clss, jlong vgroup_id, jobjectArray hdfclassname); JNIEXPORT void JNICALL Java_hdf_hdflib_HDFLibrary_Vgetname(JNIEnv *env, jclass clss, jlong vgroup_id, jobjectArray hdfname); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Visvg(JNIEnv *env, jclass clss, jlong vgroup_id, jint vgroup_ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Visvs(JNIEnv *env, jclass clss, jlong vgroup_id, jint vdata_ref); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgettagrefs(JNIEnv *env, jclass clss, jlong vgroup_id, jintArray tags, jintArray refs, jint size); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vgettagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint index, jintArray tagref); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vntagrefs(JNIEnv *env, jclass clss, jlong vgroup_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vinqtagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vlone(JNIEnv *env, jclass clss, jlong fid, jintArray ref_array, jint arraysize); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vaddtagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vdeletetagref(JNIEnv *env, jclass clss, jlong vgroup_id, jint tag, jint ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vclose_I(JNIEnv *env, jclass clss, jlong file_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfind(JNIEnv *env, jclass clss, jlong file_id, jstring vgname); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfindclass(JNIEnv *env, jclass clss, jlong file_id, jstring vgclassname); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vflocate(JNIEnv *env, jclass clss, jint key, jstring field); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgetnext(JNIEnv *env, jclass clss, jint vkey, jint elem_ref); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vinquire(JNIEnv *env, jclass clss, jlong vgroup_id, jintArray n_entries, jobjectArray vgroup_name); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vinsert(JNIEnv *env, jclass clss, jlong vgroup_id, jint v_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vnrefs(JNIEnv *env, jclass clss, jint vkey, jint tag); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vopen(JNIEnv *env, jclass clss, jstring filename, jint access, jshort ndds); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetclass(JNIEnv *env, jclass clss, jlong vgroup_id, jstring hdfclassname); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetname(JNIEnv *env, jclass clss, jlong vgroup_id, jstring name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vattrinfo(JNIEnv *env, jclass clss, jlong id, jint index, jobjectArray name, jintArray argv); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vfindattr(JNIEnv *env, jclass clss, jlong id, jstring name); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vgetattr(JNIEnv *env, jclass clss, jlong gr_id, jint attr_index, jbyteArray values); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vgetversion(JNIEnv *env, jclass clss, jlong id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_Vnattrs(JNIEnv *env, jclass clss, jlong id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetattr__JLjava_lang_String_2JILjava_lang_String_2( JNIEnv *env, jclass clss, jlong gr_id, jstring attr_name, jlong data_type, jint count, jstring values); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_Vsetattr__JLjava_lang_String_2JI_3B( JNIEnv *env, jclass clss, jlong id, jstring attr_name, jlong data_type, jint count, jbyteArray values); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VGROUP */ hdf4-hdf4.3.1/java/src/jni/hdfvhImp.c000066400000000000000000000150571503061704500172400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfvhImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHmakegroup(JNIEnv *env, jclass clss, jlong file_id, jintArray tag_array, jintArray ref_array, jint n_objects, jstring vgroup_name, jstring vgroup_class) { int32 rval = -1; jint *tags = NULL; jint *refs = NULL; const char *vname = NULL; const char *vcls = NULL; jboolean isCopy; UNUSED(clss); if (vgroup_name == NULL) h4nullArgument(env, "VHmakegroup: vgroup_name is NULL"); if (vgroup_class == NULL) h4nullArgument(env, "VHmakegroup: vgroup_class is NULL"); if (tag_array == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VHmakegroup: tag_array is NULL"); if (ref_array == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VHmakegroup: ref_array is NULL"); PIN_JAVA_STRING(ENVONLY, vgroup_name, vname, NULL, "VHmakegroup: vgroup_name not pinned"); PIN_JAVA_STRING(ENVONLY, vgroup_class, vcls, NULL, "VHmakegroup: vgroup_class not pinned"); PIN_INT_ARRAY(ENVONLY, tag_array, tags, &isCopy, "VHmakegroup: tag_array not pinned"); PIN_INT_ARRAY(ENVONLY, ref_array, refs, &isCopy, "VHmakegroup: ref_array not pinned"); if ((rval = VHmakegroup((int32)file_id, (int32 *)tags, (int32 *)refs, (int32)n_objects, vname, vcls)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (refs) UNPIN_INT_ARRAY(ENVONLY, ref_array, refs, (rval == FAIL) ? JNI_ABORT : 0); if (tags) UNPIN_INT_ARRAY(ENVONLY, tag_array, tags, (rval == FAIL) ? JNI_ABORT : 0); if (vcls) UNPIN_JAVA_STRING(ENVONLY, vgroup_class, vcls); if (vname) UNPIN_JAVA_STRING(ENVONLY, vgroup_name, vname); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHstoredata(JNIEnv *env, jclass clss, jlong file_id, jstring fieldname, jbyteArray buf, jint n_records, jint data_type, jstring vdata_name, jstring vdata_class) { int32 rval = -1; jbyte *buffer = NULL; const char *fldname = NULL; const char *vname = NULL; const char *vcls = NULL; jboolean isCopy; UNUSED(clss); if (fieldname == NULL) h4nullArgument(env, "VHstoredatam: fieldname is NULL"); if (vdata_name == NULL) h4nullArgument(env, "VHstoredatam: vdata_name is NULL"); if (vdata_class == NULL) h4nullArgument(env, "VHstoredatam: vdata_class is NULL"); if (buf == NULL) h4nullArgument(env, "VHstoredatam: buf is NULL"); PIN_JAVA_STRING(ENVONLY, fieldname, fldname, NULL, "VHstoredata: fieldname not pinned"); PIN_JAVA_STRING(ENVONLY, vdata_name, vname, NULL, "VHstoredata: vdata_name not pinned"); PIN_JAVA_STRING(ENVONLY, vdata_class, vcls, NULL, "VHstoredata: vdata_class not pinned"); PIN_BYTE_ARRAY(ENVONLY, buf, buffer, &isCopy, "VHstoredata: buf not pinned"); if ((rval = VHstoredata((int32)file_id, fldname, (uint8 *)buffer, (int32)n_records, (int32)data_type, vname, vcls)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (buffer) UNPIN_BYTE_ARRAY(ENVONLY, buf, buffer, (rval == FAIL) ? JNI_ABORT : 0); if (vcls) UNPIN_JAVA_STRING(ENVONLY, vdata_class, vcls); if (vname) UNPIN_JAVA_STRING(ENVONLY, vdata_name, vname); if (fldname) UNPIN_JAVA_STRING(ENVONLY, fieldname, fldname); return rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHstoredatam(JNIEnv *env, jclass clss, jlong file_id, jstring fieldname, jbyteArray buf, jint n_records, jint data_type, jstring vdata_name, jstring vdata_class, jint order) { int32 rval = -1; jbyte *buffer = NULL; const char *fldname = NULL; const char *vname = NULL; const char *vcls = NULL; jboolean isCopy; HFILEID fid = (int32)file_id; UNUSED(clss); if (fieldname == NULL) h4nullArgument(env, "VHstoredatam: fieldname is NULL"); if (vdata_name == NULL) h4nullArgument(env, "VHstoredatam: vdata_name is NULL"); if (vdata_class == NULL) h4nullArgument(env, "VHstoredatam: vdata_class is NULL"); if (buf == NULL) h4nullArgument(env, "VHstoredatam: buf is NULL"); PIN_JAVA_STRING(ENVONLY, fieldname, fldname, NULL, "VHstoredatam: fieldname not pinned"); PIN_JAVA_STRING(ENVONLY, vdata_name, vname, NULL, "VHstoredatam: vdata_name not pinned"); PIN_JAVA_STRING(ENVONLY, vdata_class, vcls, NULL, "VHstoredatam: vdata_class not pinned"); PIN_BYTE_ARRAY(ENVONLY, buf, buffer, &isCopy, "VHstoredatam: buf not pinned"); if ((rval = VHstoredatam(fid, fldname, (const uint8 *)buffer, (int32)n_records, (int32)data_type, vname, vcls, (int32)order)) < 0) H4_LIBRARY_ERROR(ENVONLY); done: if (buffer) UNPIN_BYTE_ARRAY(ENVONLY, buf, buffer, (rval == FAIL) ? JNI_ABORT : 0); if (vcls) UNPIN_JAVA_STRING(ENVONLY, vdata_class, vcls); if (vname) UNPIN_JAVA_STRING(ENVONLY, vdata_name, vname); if (fldname) UNPIN_JAVA_STRING(ENVONLY, fieldname, fldname); return (jint)rval; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvhImp.h000066400000000000000000000052271503061704500172430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VH */ #ifndef Included_hdf_hdflib_VH #define Included_hdf_hdflib_VH #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHmakegroup(JNIEnv *env, jclass clss, jlong file_id, jintArray tag_array, jintArray ref_array, jint n_objects, jstring vgroup_name, jstring vgroup_class); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHstoredata(JNIEnv *env, jclass clss, jlong file_id, jstring fieldname, jbyteArray buf, jint n_records, jint data_type, jstring vdata_name, jstring vdata_class); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VHstoredatam(JNIEnv *env, jclass clss, jlong file_id, jstring fieldname, jbyteArray buf, jint n_records, jint data_type, jstring vdata_name, jstring vdata_class, jint order); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VH */ hdf4-hdf4.3.1/java/src/jni/hdfvqImp.c000066400000000000000000000035341503061704500172460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include "hdf.h" #include "h4jni.h" #include "hdfvqImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VQueryref(JNIEnv *env, jclass clss, jlong vkey) { int32 rval = FAIL; UNUSED(clss); if ((rval = VQueryref((int32)vkey)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VQuerytag(JNIEnv *env, jclass clss, jlong vkey) { int32 rval = FAIL; UNUSED(clss); if ((rval = VQuerytag((int32)vkey)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jint)rval; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvqImp.h000066400000000000000000000031521503061704500172470ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VQ */ #ifndef Included_hdf_hdflib_VQ #define Included_hdf_hdflib_VQ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VQueryref(JNIEnv *env, jclass clss, jlong vkey); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VQuerytag(JNIEnv *env, jclass clss, jlong vkey); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VQ */ hdf4-hdf4.3.1/java/src/jni/hdfvsqImp.c000066400000000000000000000147511503061704500174340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include #include #include "hdf.h" #include "h4jni.h" #include "hdfvsqImp.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQuerycount(JNIEnv *env, jclass clss, jlong vdata_id, jintArray n_records) { intn rval = FAIL; jint *theArg = NULL; jboolean isCopy; UNUSED(clss); if (n_records == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSQuerycount: n_records is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, n_records) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSQuerycount: output array n_records < order 1"); PIN_INT_ARRAY(ENVONLY, n_records, theArg, &isCopy, "VSQuerycount: n_records not pinned"); if ((rval = VSQuerycount((int32)vdata_id, (int32 *)&(theArg[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArg) UNPIN_INT_ARRAY(ENVONLY, n_records, theArg, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryfields(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray fields) { intn rval = FAIL; char *data = NULL; jstring rstring; UNUSED(clss); if ((data = (char *)malloc(4096)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSQueryfields: failed to allocate data buffer"); if (fields == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSQueryfields: fields is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, fields) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSQueryfields: output array fields < order 1"); if ((rval = VSQueryfields((int32)vdata_id, (char *)data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[4095] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, fields, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryinterlace(JNIEnv *env, jclass clss, jlong vdata_id, jintArray interlace) { intn rval = FAIL; jint *theArg = NULL; jboolean isCopy; UNUSED(clss); if (interlace == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSQueryinterlace: interlace is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, interlace) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSQueryinterlace: output array interlace < order 1"); PIN_INT_ARRAY(ENVONLY, interlace, theArg, &isCopy, "VSQueryinterlace: interlace not pinned"); if ((rval = VSQueryinterlace((int32)vdata_id, (int32 *)&(theArg[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArg) UNPIN_INT_ARRAY(ENVONLY, interlace, theArg, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryname(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray vdata_name) { intn rval = FAIL; char *data = NULL; jstring rstring; UNUSED(clss); if ((data = (char *)malloc(VSNAMELENMAX + 1)) == NULL) H4_OUT_OF_MEMORY_ERROR(ENVONLY, "VSQueryname: failed to allocate data buffer"); if (vdata_name == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSQueryname: vdata_name is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, vdata_name) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSQueryname: output array vdata_name < order 1"); if ((rval = VSQueryname((int32)vdata_id, (char *)data)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); data[VSNAMELENMAX] = '\0'; /* convert it to java string */ if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, data))) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->SetObjectArrayElement(ENVONLY, vdata_name, 0, rstring); CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); ENVPTR->DeleteLocalRef(ENVONLY, rstring); done: free(data); return JNI_TRUE; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryref(JNIEnv *env, jclass clss, jlong vdata_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSQueryref((int32)vdata_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSQuerytag(JNIEnv *env, jclass clss, jlong vdata_id) { int32 rval = FAIL; UNUSED(clss); if ((rval = VSQuerytag((int32)vdata_id)) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: return (jlong)rval; } JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryvsize(JNIEnv *env, jclass clss, jlong vdata_id, jintArray vdata_size) { intn rval = FAIL; jint *theArg = NULL; jboolean isCopy; UNUSED(clss); if (vdata_size == NULL) H4_NULL_ARGUMENT_ERROR(ENVONLY, "VSQueryvsize: vdata_size is NULL"); if (ENVPTR->GetArrayLength(ENVONLY, vdata_size) < 1) H4_BAD_ARGUMENT_ERROR(ENVONLY, "VSQueryvsize: output array vdata_size < order 1"); PIN_INT_ARRAY(ENVONLY, vdata_size, theArg, &isCopy, "VSQuerysize: vdata_size not pinned"); if ((rval = VSQueryvsize((int32)vdata_id, (int32 *)&(theArg[0]))) == FAIL) H4_LIBRARY_ERROR(ENVONLY); done: if (theArg) UNPIN_INT_ARRAY(ENVONLY, vdata_size, theArg, (rval == FAIL) ? JNI_ABORT : 0); return JNI_TRUE; } #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ hdf4-hdf4.3.1/java/src/jni/hdfvsqImp.h000066400000000000000000000051501503061704500174320ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This code is the C-interface called by Java programs to access the * HDF 4 library. * * Each routine wraps a single HDF entry point, generally with the * analogous arguments and return codes. * */ #include /* Header for class hdf_hdflib_VSQ */ #ifndef Included_hdf_hdflib_VSQ #define Included_hdf_hdflib_VSQ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQuerycount(JNIEnv *env, jclass clss, jlong vdata_id, jintArray n_records); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryfields(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray fields); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryinterlace(JNIEnv *env, jclass clss, jlong vdata_id, jintArray interlace); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryname(JNIEnv *env, jclass clss, jlong vdata_id, jobjectArray vdata_name); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryref(JNIEnv *env, jclass clss, jlong vdata_id); JNIEXPORT jint JNICALL Java_hdf_hdflib_HDFLibrary_VSQuerytag(JNIEnv *env, jclass clss, jlong vdata_id); JNIEXPORT jboolean JNICALL Java_hdf_hdflib_HDFLibrary_VSQueryvsize(JNIEnv *env, jclass clss, jlong vdata_id, jintArray vdata_size); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ #endif /* Included_hdf_hdflib_VSQ */ hdf4-hdf4.3.1/java/test/000077500000000000000000000000001503061704500147275ustar00rootroot00000000000000hdf4-hdf4.3.1/java/test/CMakeLists.txt000066400000000000000000000075461503061704500175030ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_JAVA_TEST Java) set (CMAKE_VERBOSE_MAKEFILE 1) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF4_JAVA_JNI_BINARY_DIR};${HDF4_JAVA_HDF_LIB_DIR}") set (HDF4_JAVA_TEST_SOURCES TestH4 TestH4ANparams TestH4DFparams TestH4DFPparams TestH4DFRparams TestH4GRparams TestH4HCparams TestH4SDparams TestH4Vparams TestH4VSparams ) set (CMAKE_JAVA_INCLUDE_PATH "${HDF4_JAVA_LIB_DIR}/org.junit.jar;${HDF4_JAVA_LIB_DIR}/org.hamcrest.jar;${HDF4_JAVA_JARS};${HDF4_JAVA_LOGGING_JAR};${HDF4_JAVA_LOGGING_SIMPLE_JAR}") foreach (test_file ${HDF4_JAVA_TEST_SOURCES}) file (WRITE ${PROJECT_BINARY_DIR}/${test_file}Manifest.txt "Main-Class: test.${test_file} " ) add_jar (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} MANIFEST ${PROJECT_BINARY_DIR}/${test_file}Manifest.txt ${test_file}.java) get_target_property (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file}_JAR_FILE ${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} JAR_FILE) #install_jar (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} ${HJAVA_INSTALL_DATA_DIR}/tests tests) #get_target_property (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file}_CLASSPATH ${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} CLASSDIR) add_dependencies (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} ${HDF4_JAVA_HDF_LIB_TARGET}) set_target_properties (${HDF4_JAVA_TEST_LIB_TARGET}_${test_file} PROPERTIES FOLDER test/java) #----------------------------------------------------------------------------- # Add Target to clang-format #----------------------------------------------------------------------------- if (HDF4_ENABLE_FORMATTERS) clang_format (HDF4_JAVA_TEST_${test_file}_SRC_FORMAT ${test_file}.java) endif () endforeach () foreach (h4_file ${HDF4_JAVA_TEST_SOURCES}) HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/JUnit-${h4_file}.txt" "${PROJECT_BINARY_DIR}/JUnit-${h4_file}.txt" "${HDF4_JAVA_TEST_LIB_TARGET}_files") endforeach () add_custom_target(${HDF4_JAVA_TEST_LIB_TARGET}_files ALL COMMENT "Copying files needed by ${HDF4_JAVA_TEST_LIB_TARGET} tests" DEPENDS ${${HDF4_JAVA_TEST_LIB_TARGET}_files_list}) if (WIN32) set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";") else () set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":") endif () get_property (target_name TARGET ${HDF4_JAVA_JNI_LIB_TARGET} PROPERTY OUTPUT_NAME) set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${target_name}$<$:${CMAKE_DEBUG_POSTFIX}>;") foreach (test_file ${HDF4_JAVA_TEST_SOURCES}) set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") endforeach () set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF4_JAVA_TEST_LIB_TARGET}_${test_file}_JAR_FILE}") add_test ( NAME JUnit-${test_file}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove JUnit-${test_file}.out JUnit-${test_file}.out.err ) add_test ( NAME JUnit-${test_file} COMMAND "${CMAKE_COMMAND}" -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}" -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}" -D "TEST_ARGS:STRING=${CMD_ARGS}-ea;org.junit.runner.JUnitCore" -D "TEST_PROGRAM=test.${test_file}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" -D "TEST_FOLDER=${HDF4_BINARY_DIR}/java/test" -D "TEST_OUTPUT=JUnit-${test_file}.out" # -D "TEST_LOG_LEVEL=trace" -D "TEST_EXPECT=0" -D "SKIP_APPEND=1" -D "TEST_MASK_ERROR=TRUE" # -D "TEST_FILTER:STRING=${testfilter}" -D "TEST_REFERENCE=JUnit-${test_file}.txt" -P "${HDF_RESOURCES_DIR}/jrunTest.cmake" ) set_tests_properties (JUnit-${test_file} PROPERTIES DEPENDS "JUnit-${test_file}-clearall-objects" ) endforeach () hdf4-hdf4.3.1/java/test/Makefile.am000066400000000000000000000024161503061704500167660ustar00rootroot00000000000000# # HDF Java native interface (JNI) Library Test Makefile(.in) include $(top_srcdir)/config/commence.am # Mark this directory as part of the JNI API JAVA_API=yes JAVAROOT = .classes classes: test -d $(@D)/$(JAVAROOT) || $(MKDIR_P) $(@D)/$(JAVAROOT) pkgpath = test hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/org.junit.jar:$(top_srcdir)/java/lib/org.hamcrest.jar:$(top_srcdir)/java/lib/slf4j-api-2.0.16.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-2.0.16.jar:$$CLASSPATH jarfile = jar$(PACKAGE_TARNAME)test.jar AM_JAVACFLAGS = $(H4_JAVACFLAGS) -deprecation noinst_JAVA = \ TestH4.java \ TestH4ANparams.java \ TestH4DFparams.java \ TestH4DFPparams.java \ TestH4DFRparams.java \ TestH4GRparams.java \ TestH4HCparams.java \ TestH4SDparams.java \ TestH4Vparams.java \ TestH4VSparams.java $(jarfile): classnoinst.stamp classes $(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath) noinst_DATA = $(jarfile) .PHONY: classes check_SCRIPTS = junit.sh TEST_SCRIPT = $(check_SCRIPTS) CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class junit.sh clean: rm -rf $(JAVAROOT)/* rm -f $(jarfile) rm -f classnoinst.stamp include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/java/test/Makefile.in000066400000000000000000001117551503061704500170060ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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@ # # HDF Java native interface (JNI) Library Test Makefile(.in) VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ TESTS = $(TEST_SCRIPT) subdir = java/test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = junit.sh CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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__java_sources = $(noinst_JAVA) DATA = $(noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/junit.sh.in \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog # Mark this directory as part of the JNI API JAVA_API = yes JAVAROOT = .classes pkgpath = test hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/org.junit.jar:$(top_srcdir)/java/lib/org.hamcrest.jar:$(top_srcdir)/java/lib/slf4j-api-2.0.16.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-2.0.16.jar:$$CLASSPATH jarfile = jar$(PACKAGE_TARNAME)test.jar AM_JAVACFLAGS = $(H4_JAVACFLAGS) -deprecation noinst_JAVA = \ TestH4.java \ TestH4ANparams.java \ TestH4DFparams.java \ TestH4DFPparams.java \ TestH4DFRparams.java \ TestH4GRparams.java \ TestH4HCparams.java \ TestH4SDparams.java \ TestH4Vparams.java \ TestH4VSparams.java noinst_DATA = $(jarfile) check_SCRIPTS = junit.sh TEST_SCRIPT = $(check_SCRIPTS) CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class junit.sh # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .log .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 java/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign java/test/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): junit.sh: $(top_builddir)/config.status $(srcdir)/junit.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs classnoinst.stamp: $(am__java_sources) @list1='$?'; list2=; if test -n "$$list1"; then \ for p in $$list1; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ list2="$$list2 $$d$$p"; \ done; \ echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \ $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \ else :; fi echo timestamp > $@ clean-noinstJAVA: -rm -f *.class classnoinst.stamp tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile classnoinst.stamp $(DATA) all-local 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-am: clean-generic clean-libtool clean-noinstJAVA 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 \ mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am all-local check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstJAVA cscopelist-am \ ctags-am 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 mostlyclean-local pdf pdf-am ps ps-am \ recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile classes: test -d $(@D)/$(JAVAROOT) || $(MKDIR_P) $(@D)/$(JAVAROOT) $(jarfile): classnoinst.stamp classes $(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath) .PHONY: classes clean: rm -rf $(JAVAROOT)/* rm -f $(jarfile) rm -f classnoinst.stamp # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/java/test/TestAll.java000066400000000000000000000023741503061704500171500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({TestH4.class, TestH4ANparams.class, TestH4DFparams.class, TestH4DFPparams.class, TestH4DFRparams.class, TestH4GRparams.class, TestH4HCparams.class, TestH4SDparams.class, TestH4Vparams.class, TestH4VSparams.class}) public class TestAll {} hdf4-hdf4.3.1/java/test/TestH4.java000066400000000000000000000207431503061704500167130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * @author xcao * */ public class TestH4 { @Rule public TestName testname = new TestName(); private static final String H4_FILE = "test.hdf"; long Hfid = -1; private final void _deleteFile(String filename) { File file = new File(filename); if (file.exists()) { try { file.delete(); } catch (SecurityException e) { } } } @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { if (Hfid > 0) try { HDFLibrary.Hclose(Hfid); } catch (Exception ex) { } _deleteFile(H4_FILE); System.out.println(); } /** * Test method for {@link hdf.hdflib.HDFLibrary#J2C(int)}. */ @Test public void testJ2C() { int DFACC_RDONLY = 0x0001; int DFACC_RDWR = 0x0003; int DFACC_CREATE = 0x004; int AN_DATA_LABEL = 0x0000; int AN_DATA_DESC = 0x0001; int AN_FILE_LABEL = 0x0002; int AN_FILE_DESC = 0x0003; int DFREF_NONE = 0x0000; int definedValues[] = {DFACC_RDONLY, DFACC_RDWR, DFACC_CREATE, AN_DATA_LABEL, AN_DATA_DESC, AN_FILE_LABEL, AN_FILE_DESC, DFREF_NONE}; int j2cValues[] = {HDFConstants.DFACC_RDONLY, HDFConstants.DFACC_RDWR, HDFConstants.DFACC_CREATE, HDFConstants.AN_DATA_LABEL, HDFConstants.AN_DATA_DESC, HDFConstants.AN_FILE_LABEL, HDFConstants.AN_FILE_DESC, HDFConstants.DFREF_NONE}; for (int i = 0; i < definedValues.length; i++) { assertEquals(definedValues[i], j2cValues[i]); } assertFalse(DFACC_RDONLY == HDFConstants.DFACC_RDWR); assertFalse(AN_DATA_LABEL == HDFConstants.AN_FILE_DESC); } /** * Test method for {@link hdf.hdflib.HDFLibrary#Hgetlibversion(int[], String[])}. */ @Test public void testHgetlibversion() { int LIB_VERSION[] = {4, 3, 1}; int libversion[] = {0, 0, 0}; String version[] = {""}; try { HDFLibrary.Hgetlibversion(libversion, version); System.err.println("HDFLibrary.Hgetlibversion: " + libversion[0] + ": " + libversion[1] + ": " + libversion[2]); System.err.println("HDFLibrary.Hgetlibversion: " + version[0]); } catch (Throwable err) { fail("HDFLibrary.Hgetlibversion: " + err); } for (int i = 0; i < 3; i++) assertEquals(LIB_VERSION[i], libversion[i]); for (int i = 0; i < 2; i++) assertFalse(libversion[i] == 0); } /** * Test method for {@link hdf.hdflib.HDFLibrary#Hopen()}. */ @Test public void testCreateCloseOpen() { try { Hfid = HDFLibrary.Hopen(H4_FILE, HDFConstants.DFACC_CREATE); } catch (Throwable err) { fail("HDFLibrary.Hopen create failed: " + err); } assertTrue(Hfid > 0); try { HDFLibrary.Hclose(Hfid); } catch (Throwable err) { fail("HDFLibrary.Hclose close failed: " + err); } try { Hfid = HDFLibrary.Hopen(H4_FILE, HDFConstants.DFACC_RDWR); } catch (Throwable err) { fail("HDFLibrary.Hopen open failed: " + err); } assertTrue(Hfid > 0); } /** * Test method for {@link hdf.hdflib.HDFLibrary#Hishdf()}. */ @Test public void testHishdf() { boolean fileIsHDF4 = false; try { Hfid = HDFLibrary.Hopen(H4_FILE, HDFConstants.DFACC_CREATE); } catch (Throwable err) { fail("HDFLibrary.Hopen create failed: " + err); } assertTrue(Hfid > 0); try { HDFLibrary.Hclose(Hfid); } catch (Throwable err) { fail("HDFLibrary.Hclose close failed: " + err); } try { fileIsHDF4 = HDFLibrary.Hishdf(H4_FILE); } catch (Throwable err) { fail("HDFLibrary.Hishdf failed: " + err); } assertTrue(fileIsHDF4); } /** * Test method for {@link hdf.hdflib.HDFLibrary#HDgetNTdesc()}. */ @Test public void testHDgetNTdesc() { String teststr = null; try { teststr = HDFLibrary.HDgetNTdesc(HDFConstants.DFNT_NATIVE); } catch (Throwable err) { fail("HDFLibrary.HDgetNTdesc DFNT_NATIVE failed: " + err); } assertEquals("native format number-type not set", teststr); try { teststr = HDFLibrary.HDgetNTdesc(HDFConstants.DFNT_CUSTOM); } catch (Throwable err) { fail("HDFLibrary.HDgetNTdesc DFNT_CUSTOM failed: " + err); } assertEquals("custom format number-type not set", teststr); try { teststr = HDFLibrary.HDgetNTdesc(HDFConstants.DFNT_FLOAT32); } catch (Throwable err) { fail("HDFLibrary.HDgetNTdesc DFNT_FLOAT32 failed: " + err); } assertEquals("32-bit floating point", teststr); try { teststr = HDFLibrary.HDgetNTdesc(HDFConstants.DFNT_INT8); } catch (Throwable err) { fail("HDFLibrary.HDgetNTdesc DFNT_INT8 failed: " + err); } assertEquals("8-bit signed integer", teststr); try { teststr = HDFLibrary.HDgetNTdesc(HDFConstants.DFNT_CHAR8); } catch (Throwable err) { fail("HDFLibrary.HDgetNTdesc DFNT_CHAR8 failed: " + err); } assertEquals("8-bit signed char", teststr); } /** * Test method for {@link hdf.hdflib.HDFLibrary#Hnumber()}. */ @Test public void testHnumber() { int numberobjs = -1; try { Hfid = HDFLibrary.Hopen(H4_FILE, HDFConstants.DFACC_CREATE); } catch (Throwable err) { fail("HDFLibrary.Hopen create failed: " + err); } assertTrue(Hfid > 0); try { numberobjs = HDFLibrary.Hnumber(Hfid); } catch (Throwable err) { fail("HDFLibrary.Hnumber failed: " + err); } assertTrue(numberobjs > 0); } /** * Test method for {@link hdf.hdflib.HDFLibrary#DFKNTsize()}. */ @Test public void testDFKNTsize() { int testsize = -1; try { testsize = HDFLibrary.DFKNTsize(HDFConstants.DFNT_FLOAT64); } catch (Throwable err) { fail("HDFLibrary.DFKNTsize DFNT_FLOAT64 failed: " + err); } assertEquals(8, testsize); try { testsize = HDFLibrary.DFKNTsize(HDFConstants.DFNT_INT16); } catch (Throwable err) { fail("HDFLibrary.DFKNTsize DFNT_INT16 failed: " + err); } assertEquals(2, testsize); try { testsize = HDFLibrary.DFKNTsize(HDFConstants.DFNT_CHAR); } catch (Throwable err) { fail("HDFLibrary.DFKNTsize DFNT_CHAR failed: " + err); } assertEquals(1, testsize); } } hdf4-hdf4.3.1/java/test/TestH4ANparams.java000066400000000000000000000136651503061704500203430ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * */ public class TestH4ANparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = HDFException.class) public void testANstartIllegalId() throws Throwable { HDFLibrary.ANstart(-1); } @Test(expected = HDFException.class) public void testANendIllegalId() throws Throwable { HDFLibrary.ANend(-1); } @Test public void testANendaccessIllegalId() throws Throwable { // function does nothing assertTrue(HDFLibrary.ANendaccess(-1)); } @Test(expected = HDFException.class) public void testANfileinfoIllegalId() throws Throwable { int[] ids = {0, 0, 0, 0}; HDFLibrary.ANfileinfo(-1, ids); } @Test(expected = NullPointerException.class) public void testANfileinfoNull() throws Throwable { HDFLibrary.ANfileinfo(0, null); } @Test(expected = IllegalArgumentException.class) public void testANfileinfoArgument() throws Throwable { int[] ids = {0, 0}; HDFLibrary.ANfileinfo(0, ids); } @Test(expected = HDFException.class) public void testANselectIllegalId() throws Throwable { HDFLibrary.ANselect(-1, 0, 0); } @Test(expected = HDFException.class) public void testANnumannIllegalId() throws Throwable { short tag = 0; short ref = 0; HDFLibrary.ANnumann(-1, 0, tag, ref); } @Test public void testANatype2tagIllegalId() throws Throwable { assertEquals(HDFLibrary.ANatype2tag(-1), HDFConstants.DFTAG_NULL); } @Test(expected = HDFException.class) public void testANtag2atypeIllegalId() throws Throwable { short anttype = -1; HDFLibrary.ANtag2atype(anttype); } @Test(expected = HDFException.class) public void testANannlistIllegalId() throws Throwable { short tag = 0; short ref = 0; int[] ids = {0, 0, 0, 0}; HDFLibrary.ANannlist(-1, 0, tag, ref, ids); } @Test(expected = NullPointerException.class) public void testANannlistNull() throws Throwable { short tag = 0; short ref = 0; HDFLibrary.ANannlist(0, 0, tag, ref, null); } @Test(expected = HDFException.class) public void testANannlenIllegalId() throws Throwable { HDFLibrary.ANannlen(-1); } @Test(expected = HDFException.class) public void testANreadannIllegalId() throws Throwable { String[] str = {""}; HDFLibrary.ANreadann(-1, str, 0); } @Test(expected = HDFException.class) public void testANcreateIllegalId() throws Throwable { short tag = 0; short ref = 0; HDFLibrary.ANcreate(-1, tag, ref, 0); } @Test(expected = HDFException.class) public void testANcreatefIllegalId() throws Throwable { HDFLibrary.ANcreatef(-1, 0); } @Test(expected = HDFException.class) public void testANget_tagrefIllegalId() throws Throwable { short[] ref = {0, 0}; HDFLibrary.ANget_tagref(-1, 0, 0, ref); } @Test(expected = NullPointerException.class) public void testANget_tagrefNull() throws Throwable { HDFLibrary.ANget_tagref(0, 0, 0, null); } @Test(expected = IllegalArgumentException.class) public void testANget_tagrefArgument() throws Throwable { short[] ref = {0}; HDFLibrary.ANget_tagref(0, 0, 0, ref); } @Test(expected = HDFException.class) public void testANid2tagrefIllegalId() throws Throwable { short[] tag = {0, 0}; HDFLibrary.ANid2tagref(-1, tag); } @Test(expected = NullPointerException.class) public void testANid2tagrefNull() throws Throwable { HDFLibrary.ANid2tagref(0, null); } @Test(expected = IllegalArgumentException.class) public void testANid2tagrefArgument() throws Throwable { short[] tag = {0}; HDFLibrary.ANid2tagref(0, tag); } @Test(expected = HDFException.class) public void testANtagref2idIllegalId() throws Throwable { short tag = 0; short ref = 0; HDFLibrary.ANtagref2id(-1, tag, ref); } @Test(expected = HDFException.class) public void testANwriteannIllegalId() throws Throwable { String str = ""; HDFLibrary.ANwriteann(-1, str, 0); } @Test(expected = NullPointerException.class) public void testANwriteannNull() throws Throwable { HDFLibrary.ANwriteann(0, null, 0); } } hdf4-hdf4.3.1/java/test/TestH4DFPparams.java000066400000000000000000000067671503061704500204630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * */ public class TestH4DFPparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = NullPointerException.class) public void testDFPaddpalNull() throws Throwable { byte[] palette = {0}; HDFLibrary.DFPaddpal(null, palette); } @Test(expected = NullPointerException.class) public void testDFPaddpalNullPalette() throws Throwable { String str = ""; HDFLibrary.DFPaddpal(str, null); } @Test(expected = NullPointerException.class) public void testDFPgetpalNull() throws Throwable { byte[] palette = {0}; HDFLibrary.DFPgetpal(null, palette); } @Test(expected = NullPointerException.class) public void testDFPgetpalNullPalette() throws Throwable { String str = ""; HDFLibrary.DFPgetpal(str, null); } @Test(expected = NullPointerException.class) public void testDFPnpalsNull() throws Throwable { HDFLibrary.DFPnpals(null); } @Test(expected = NullPointerException.class) public void testDFPputpalNull() throws Throwable { byte[] palette = {0}; String arg = "a"; HDFLibrary.DFPputpal(null, palette, 0, arg); } @Test(expected = NullPointerException.class) public void testDFPputpalArgNull() throws Throwable { byte[] palette = {0}; String arg = "a"; HDFLibrary.DFPputpal(arg, palette, 0, null); } @Test(expected = NullPointerException.class) public void testDFPputpalNullPalette() throws Throwable { String arg = "a"; String mode = "a"; HDFLibrary.DFPputpal(arg, null, 0, mode); } @Test(expected = NullPointerException.class) public void testDFPreadrefNull() throws Throwable { short ref = 0; HDFLibrary.DFPreadref(null, ref); } @Test(expected = NullPointerException.class) public void testDFPwriterefNull() throws Throwable { short ref = 0; HDFLibrary.DFPwriteref(null, ref); } } hdf4-hdf4.3.1/java/test/TestH4DFRparams.java000066400000000000000000000115661503061704500204560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; public class TestH4DFRparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = NullPointerException.class) public void testDFR8getdimsNullFilename() throws Throwable { HDFLibrary.DFR8getdims(null, new int[] {0, 0}, new boolean[] {true}); } @Test(expected = NullPointerException.class) public void testDFR8getdimsNullDimensions() throws Throwable { String str = ""; HDFLibrary.DFR8getdims(str, null, new boolean[] {true}); } @Test(expected = NullPointerException.class) public void testDFR8getdimsNullPalette() throws Throwable { String str = ""; HDFLibrary.DFR8getdims(str, new int[] {0, 0}, null); } @Test(expected = IllegalArgumentException.class) public void testDFR8getdimsIllegalArgument() throws Throwable { String str = ""; HDFLibrary.DFR8getdims(str, new int[] {0}, new boolean[] {true}); } @Test(expected = NullPointerException.class) public void testDFR8getimageNullFilename() throws Throwable { HDFLibrary.DFR8getimage(null, new byte[] {(byte)0x0}, 0, 0, new byte[] {(byte)0x0}); } @Test(expected = NullPointerException.class) public void testDFR8getimageNullImageData() throws Throwable { String str = ""; HDFLibrary.DFR8getimage(str, null, 0, 0, new byte[] {(byte)0x0}); } @Test(expected = NullPointerException.class) public void testDFR8readrefNullFilename() throws Throwable { HDFLibrary.DFR8readref(null, 0); } @Test(expected = HDFException.class) public void testDFR8readrefIllegalRef() throws Throwable { String str = ""; HDFLibrary.DFR8readref(str, -1); } @Test(expected = NullPointerException.class) public void testDFR8nimagesNullFilename() throws Throwable { HDFLibrary.DFR8nimages(null); } @Test(expected = NullPointerException.class) public void testDFR8addimageNullFilename() throws Throwable { HDFLibrary.DFR8addimage(null, new byte[] {(byte)0x0}, 0, 0, (short)0); } @Test(expected = NullPointerException.class) public void testDFR8addimageNullImage() throws Throwable { String str = ""; HDFLibrary.DFR8addimage(str, null, 0, 0, (short)0); } @Test(expected = NullPointerException.class) public void testDFR8putimageNullFilename() throws Throwable { HDFLibrary.DFR8putimage(null, new byte[] {(byte)0x0}, 0, 0, (short)0); } @Test(expected = NullPointerException.class) public void testDFR8putimageNullImage() throws Throwable { String str = ""; HDFLibrary.DFR8putimage(str, null, 0, 0, (short)0); } @Test(expected = NullPointerException.class) public void testDFR8setcompressNullCompInfo() throws Throwable { HDFLibrary.DFR8setcompress(0, null); } @Test(expected = NullPointerException.class) public void testDFR8getpalrefNullPalRef() throws Throwable { HDFLibrary.DFR8getpalref(null); } @Test(expected = IllegalArgumentException.class) public void testDFR8getpalrefIllegalArgument() throws Throwable { HDFLibrary.DFR8getpalref(new short[] {}); } @Test(expected = NullPointerException.class) public void testDFR8writerefNullFilename() throws Throwable { HDFLibrary.DFR8writeref(null, (short)0); } } hdf4-hdf4.3.1/java/test/TestH4DFparams.java000066400000000000000000000106161503061704500203270ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; public class TestH4DFparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = NullPointerException.class) public void testDF24getdimsNullFilename() throws Throwable { HDFLibrary.DF24getdims(null, new int[] {0, 0, 0}); } @Test(expected = NullPointerException.class) public void testDF24getdimsNullArguments() throws Throwable { String str = ""; HDFLibrary.DF24getdims(str, null); } @Test(expected = IllegalArgumentException.class) public void testDF24getdimsIllegalArgument() throws Throwable { String str = ""; HDFLibrary.DF24getdims(str, new int[] {0, 0}); } @Test(expected = NullPointerException.class) public void testDF24getimageNullFilename() throws Throwable { HDFLibrary.DF24getimage(null, new byte[] {(byte)0x0}, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24getimageNullImageData() throws Throwable { String str = ""; HDFLibrary.DF24getimage(str, null, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24readrefNullFilename() throws Throwable { HDFLibrary.DF24readref(null, 0); } @Test(expected = HDFException.class) public void testDF24readrefIllegalRef() throws Throwable { String str = ""; HDFLibrary.DF24readref(str, -1); } @Test(expected = NullPointerException.class) public void testDF24nimagesNullFilename() throws Throwable { HDFLibrary.DF24nimages(null); } @Test(expected = NullPointerException.class) public void testDF24addimageNullFilename() throws Throwable { HDFLibrary.DF24addimage(null, new byte[] {(byte)0x0}, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24addimageNullImage() throws Throwable { String str = ""; HDFLibrary.DF24addimage(str, null, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24putimageNullFilename() throws Throwable { byte[] img = {0}; HDFLibrary.DF24putimage(null, img, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24putimageNullImage() throws Throwable { String str = ""; byte[] img = null; HDFLibrary.DF24putimage(str, img, 0, 0); } @Test(expected = IllegalArgumentException.class) public void testDF24putimageIllegalArgument() throws Throwable { String str = ""; HDFLibrary.DF24putimage(str, new byte[] {}, 0, 0); } @Test(expected = NullPointerException.class) public void testDF24setcompressNullCompInfo() throws Throwable { HDFLibrary.DF24setcompress(0, null); } @Test(expected = HDFException.class) public void testDF24setilIllegalIl() throws Throwable { HDFLibrary.DF24setil(-1); } } hdf4-hdf4.3.1/java/test/TestH4GRparams.java000066400000000000000000000427211503061704500203500ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFCompInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * */ public class TestH4GRparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = HDFException.class) public void testGRstartIllegalId() throws Throwable { HDFLibrary.GRstart(-1); } @Test(expected = HDFException.class) public void testGRendIllegalId() throws Throwable { HDFLibrary.GRend(-1); } @Test(expected = HDFException.class) public void testGRfileinfoIllegalId() throws Throwable { int[] args = {0, 0}; HDFLibrary.GRfileinfo(-1, args); } @Test(expected = NullPointerException.class) public void testGRfileinfoNull() throws Throwable { HDFLibrary.GRfileinfo(0, null); } @Test(expected = IllegalArgumentException.class) public void testGRfileinfoArgument() throws Throwable { int[] args = {0}; HDFLibrary.GRfileinfo(0, args); } @Test(expected = HDFException.class) public void testGRgetchunkinfoIllegalId() throws Throwable { int[] args = {0}; HDFChunkInfo chunk_def = new HDFChunkInfo(); HDFLibrary.GRgetchunkinfo(-1, chunk_def, args); } @Test(expected = NullPointerException.class) public void testGRgetchunkinfoNull() throws Throwable { HDFChunkInfo chunk_def = new HDFChunkInfo(); HDFLibrary.GRgetchunkinfo(0, chunk_def, null); } @Test(expected = HDFException.class) public void testGRselectIllegalId() throws Throwable { HDFLibrary.GRselect(-1, 0); } @Test(expected = HDFException.class) public void testGRnametoindexIllegalId() throws Throwable { HDFLibrary.GRnametoindex(-1, ""); } @Test(expected = NullPointerException.class) public void testGRnametoindexNull() throws Throwable { HDFLibrary.GRnametoindex(0, null); } @Test(expected = HDFException.class) public void testGRgetiminfoIllegalId() throws Throwable { String[] gr_name = {""}; int[] args = {0, 0, 0, 0}; int[] dim_sizes = {0, 0}; HDFLibrary.GRgetiminfo(-1, gr_name, args, dim_sizes); } @Test(expected = NullPointerException.class) public void testGRgetiminfoNullName() throws Throwable { int[] args = {0, 0, 0, 0}; int[] dim_sizes = {0, 0}; HDFLibrary.GRgetiminfo(0, null, args, dim_sizes); } @Test(expected = NullPointerException.class) public void testGRgetiminfoNullArgs() throws Throwable { String[] gr_name = {""}; int[] dim_sizes = {0, 0}; HDFLibrary.GRgetiminfo(0, gr_name, null, dim_sizes); } @Test(expected = IllegalArgumentException.class) public void testGRgetiminfoArgumentArgs() throws Throwable { String[] gr_name = {""}; int[] args = {0}; int[] dim_sizes = {0, 0}; HDFLibrary.GRgetiminfo(0, gr_name, args, dim_sizes); } @Test(expected = NullPointerException.class) public void testGRgetiminfoNullDims() throws Throwable { String[] gr_name = {""}; int[] args = {0, 0, 0, 0}; HDFLibrary.GRgetiminfo(0, gr_name, args, null); } @Test(expected = IllegalArgumentException.class) public void testGRgetiminfoArgumentDims() throws Throwable { String[] gr_name = {""}; int[] args = {0, 0, 0, 0}; int[] dim_sizes = {0}; HDFLibrary.GRgetiminfo(0, gr_name, args, dim_sizes); } @Test(expected = HDFException.class) public void testGRreadimageIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.GRreadimage(-1, start, stride, count, data); } @Test(expected = NullPointerException.class) public void testGRreadimageNullData() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; HDFLibrary.GRreadimage(0, start, stride, count, null); } @Test(expected = NullPointerException.class) public void testGRreadimageNullStart() throws Throwable { int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.GRreadimage(0, null, stride, count, data); } @Test(expected = NullPointerException.class) public void testGRreadimageNullCount() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; byte[] data = {0}; HDFLibrary.GRreadimage(0, start, stride, null, data); } @Test(expected = HDFException.class) public void testGRendaccessIllegalId() throws Throwable { HDFLibrary.GRendaccess(-1); } @Test(expected = HDFException.class) public void testGRidtorefIllegalId() throws Throwable { HDFLibrary.GRidtoref(-1); } @Test(expected = HDFException.class) public void testGRreftoindexIllegalId() throws Throwable { short ref = 0; HDFLibrary.GRreftoindex(-1, ref); } @Test(expected = HDFException.class) public void testGRreqlutilIllegalId() throws Throwable { int interlace = 0; HDFLibrary.GRreqlutil(-1, interlace); } @Test(expected = HDFException.class) public void testGRreqimageilIllegalId() throws Throwable { int interlace = 0; HDFLibrary.GRreqimageil(-1, interlace); } @Test(expected = HDFException.class) public void testGRgetlutidIllegalId() throws Throwable { int index = 0; HDFLibrary.GRgetlutid(-1, index); } @Test(expected = HDFException.class) public void testGRgetnlutsIllegalId() throws Throwable { HDFLibrary.GRgetnluts(-1); } @Test(expected = HDFException.class) public void testGRgetlutinfoIllegalId() throws Throwable { int[] args = {0, 0, 0, 0}; HDFLibrary.GRgetlutinfo(-1, args); } @Test(expected = NullPointerException.class) public void testGRgetlutinfoNull() throws Throwable { HDFLibrary.GRgetlutinfo(0, null); } @Test(expected = IllegalArgumentException.class) public void testGRgetlutinfoArgument() throws Throwable { int[] args = {0}; HDFLibrary.GRgetlutinfo(0, args); } @Test(expected = HDFException.class) public void testGRreadlutIllegalId() throws Throwable { byte[] data = {0}; HDFLibrary.GRreadlut(-1, data); } @Test(expected = NullPointerException.class) public void testGRreadlutNull() throws Throwable { HDFLibrary.GRreadlut(0, null); } @Test(expected = HDFException.class) public void testGRattrinfoIllegalId() throws Throwable { String[] name = {""}; int index = 0; int[] argv = {0, 0}; HDFLibrary.GRattrinfo(-1, index, name, argv); } @Test(expected = NullPointerException.class) public void testGRattrinfoNullName() throws Throwable { int index = 0; int[] argv = {0, 0}; HDFLibrary.GRattrinfo(0, index, null, argv); } @Test(expected = NullPointerException.class) public void testGRattrinfoNullArgs() throws Throwable { String[] name = {""}; int index = 0; HDFLibrary.GRattrinfo(0, index, name, null); } @Test(expected = IllegalArgumentException.class) public void testGRattrinfoArgumentArgs() throws Throwable { String[] name = {""}; int index = 0; int[] argv = {0}; HDFLibrary.GRattrinfo(0, index, name, argv); } @Test(expected = HDFException.class) public void testGRgetattrIllegalId() throws Throwable { int index = 0; byte[] data = {0}; HDFLibrary.GRgetattr(-1, index, data); } @Test(expected = NullPointerException.class) public void testGRgetattrNull() throws Throwable { int index = 0; HDFLibrary.GRgetattr(0, index, null); } @Test(expected = HDFException.class) public void testGRfindattrIllegalId() throws Throwable { String str = ""; HDFLibrary.GRfindattr(-1, str); } @Test(expected = NullPointerException.class) public void testGRfindattrNull() throws Throwable { HDFLibrary.GRfindattr(0, null); } @Test(expected = HDFException.class) public void testGRcreateIllegalId() throws Throwable { String name = ""; int ncomp = 0; long data_type = 0; int interlace_mode = 0; int[] dim_sizes = {0, 0}; HDFLibrary.GRcreate(-1, name, ncomp, data_type, interlace_mode, dim_sizes); } @Test(expected = NullPointerException.class) public void testGRcreateNullName() throws Throwable { int ncomp = 0; long data_type = 0; int interlace_mode = 0; int[] dim_sizes = {0, 0}; HDFLibrary.GRcreate(0, null, ncomp, data_type, interlace_mode, dim_sizes); } @Test(expected = NullPointerException.class) public void testGRcreateNullDims() throws Throwable { String name = ""; int ncomp = 0; long data_type = 0; int interlace_mode = 0; HDFLibrary.GRcreate(0, name, ncomp, data_type, interlace_mode, null); } @Test(expected = IllegalArgumentException.class) public void testGRcreateArgumentDims() throws Throwable { String name = ""; int ncomp = 0; long data_type = 0; int interlace_mode = 0; int[] dim_sizes = {0}; HDFLibrary.GRcreate(0, name, ncomp, data_type, interlace_mode, dim_sizes); } @Test(expected = HDFException.class) public void testGRluttorefIllegalId() throws Throwable { HDFLibrary.GRluttoref(-1); } @Test(expected = HDFException.class) public void testGRsetattrStrIllegalId() throws Throwable { String name = ""; long data_type = 0; int count = 0; String val = ""; HDFLibrary.GRsetattr(-1, name, data_type, count, val); } @Test(expected = NullPointerException.class) public void testGRsetattrStrNullName() throws Throwable { long data_type = 0; int count = 0; String val = ""; HDFLibrary.GRsetattr(0, null, data_type, count, val); } @Test(expected = NullPointerException.class) public void testGRsetattrStrNullVals() throws Throwable { String name = ""; long data_type = 0; int count = 0; String val = null; HDFLibrary.GRsetattr(0, name, data_type, count, val); } @Test(expected = HDFException.class) public void testGRsetattrIllegalId() throws Throwable { String name = ""; long data_type = 0; int count = 0; byte[] data = {0}; HDFLibrary.GRsetattr(-1, name, data_type, count, data); } @Test(expected = NullPointerException.class) public void testGRsetattrNullName() throws Throwable { long data_type = 0; int count = 0; byte[] data = {0}; HDFLibrary.GRsetattr(0, null, data_type, count, data); } @Test(expected = NullPointerException.class) public void testGRsetattrNullVals() throws Throwable { String name = ""; long data_type = 0; int count = 0; byte[] data = null; HDFLibrary.GRsetattr(0, name, data_type, count, data); } @Test(expected = HDFException.class) public void testGRsetchunkIllegalId() throws Throwable { int flags = 0; HDFChunkInfo chunk_def = new HDFChunkInfo(); HDFLibrary.GRsetchunk(-1, chunk_def, flags); } @Test(expected = NullPointerException.class) public void testGRsetchunkNull() throws Throwable { int flags = 0; HDFChunkInfo chunk_def = null; HDFLibrary.GRsetchunk(0, null, flags); } @Test(expected = HDFException.class) public void testGRsetchunkcacheIllegalId() throws Throwable { int maxcache = 1; int flags = 0; HDFLibrary.GRsetchunkcache(-1, maxcache, flags); } @Test(expected = HDFException.class) public void testGRsetcompressIllegalId() throws Throwable { int comp_type = 0; HDFCompInfo comp_info = new HDFCompInfo(); HDFLibrary.GRsetcompress(-1, comp_type, comp_info); } @Test(expected = NullPointerException.class) public void testGRsetcompressNull() throws Throwable { int comp_type = 0; HDFLibrary.GRsetcompress(0, comp_type, null); } @Test(expected = HDFException.class) public void testGRgetcompressIllegalId() throws Throwable { HDFCompInfo comp_info = new HDFCompInfo(); HDFLibrary.GRgetcompress(-1, comp_info); } @Test(expected = NullPointerException.class) public void testGRgetcompressNull() throws Throwable { HDFLibrary.GRgetcompress(0, null); } @Test(expected = HDFException.class) public void testGRsetexternalfileIllegalId() throws Throwable { String str = ""; int offset = 0; HDFLibrary.GRsetexternalfile(-1, str, offset); } @Test(expected = NullPointerException.class) public void testGRsetexternalfileNull() throws Throwable { int offset = 0; HDFLibrary.GRsetexternalfile(0, null, offset); } @Test(expected = HDFException.class) public void testGRwriteimageIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.GRwriteimage(-1, start, stride, count, data); } @Test(expected = NullPointerException.class) public void testGRwriteimageNullData() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; HDFLibrary.GRwriteimage(0, start, stride, count, null); } @Test(expected = NullPointerException.class) public void testGRwriteimageNullStart() throws Throwable { int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.GRwriteimage(0, null, stride, count, data); } @Test(expected = NullPointerException.class) public void testGRwriteimageNullCount() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; byte[] data = {0}; HDFLibrary.GRwriteimage(0, start, stride, null, data); } @Test(expected = HDFException.class) public void testGRwritelutIllegalId() throws Throwable { int ncomp = 0; int data_type = 0; int interlace_mode = 0; int num_entries = 0; byte[] data = {0}; HDFLibrary.GRwritelut(-1, ncomp, data_type, interlace_mode, num_entries, data); } @Test(expected = NullPointerException.class) public void testGRwritelutNull() throws Throwable { int ncomp = 0; int data_type = 0; int interlace_mode = 0; int num_entries = 0; HDFLibrary.GRwritelut(0, ncomp, data_type, interlace_mode, num_entries, null); } @Test(expected = HDFException.class) public void testGRreadchunkIllegalId() throws Throwable { int[] args = {0, 0}; byte[] data = {0}; HDFLibrary.GRreadchunk(-1, args, data); } @Test(expected = NullPointerException.class) public void testGRreadchunkNull() throws Throwable { int[] args = {0, 0}; HDFLibrary.GRreadchunk(0, args, null); } @Test(expected = IllegalArgumentException.class) public void testGRreadchunkArgument() throws Throwable { int[] args = {0}; byte[] data = {0}; HDFLibrary.GRreadchunk(0, args, data); } @Test(expected = NullPointerException.class) public void testGRreadchunkNullArgument() throws Throwable { byte[] data = {0}; HDFLibrary.GRreadchunk(0, null, data); } } hdf4-hdf4.3.1/java/test/TestH4HCparams.java000066400000000000000000000034651503061704500203340ustar00rootroot00000000000000 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; public class TestH4HCparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test //(expected = HDFException.class) public void testHCget_config_infoIllegalCoderType() throws Throwable { // HDFLibrary.HCget_config_info(HDFConstants.COMP_CODE_INVALID); } } hdf4-hdf4.3.1/java/test/TestH4SDparams.java000066400000000000000000000600111503061704500203360ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFCompInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * */ public class TestH4SDparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = NullPointerException.class) public void testSDstartNull() throws Throwable { HDFLibrary.SDstart(null, 0); } @Test(expected = HDFException.class) public void testSDendIllegalId() throws Throwable { HDFLibrary.SDend(-1); } @Test(expected = HDFException.class) public void testSDfileinfoIllegalId() throws Throwable { int[] args = {0, 0}; HDFLibrary.SDfileinfo(-1, args); } @Test(expected = NullPointerException.class) public void testSDfileinfoNull() throws Throwable { HDFLibrary.SDfileinfo(0, null); } @Test(expected = IllegalArgumentException.class) public void testSDfileinfoArgument() throws Throwable { int[] args = {0}; HDFLibrary.SDfileinfo(0, args); } @Test(expected = HDFException.class) public void testSDselectIllegalId() throws Throwable { HDFLibrary.SDselect(-1, 0); } @Test(expected = HDFException.class) public void testSDnametoindexIllegalId() throws Throwable { HDFLibrary.SDnametoindex(-1, ""); } @Test(expected = NullPointerException.class) public void testSDnametoindexNull() throws Throwable { HDFLibrary.SDnametoindex(0, null); } @Test(expected = HDFException.class) public void testSDgetinfoIllegalId() throws Throwable { String[] name = {""}; int[] args = {0, 0, 0}; int[] dim_sizes = {0, 0}; HDFLibrary.SDgetinfo(-1, name, dim_sizes, args); } @Test(expected = NullPointerException.class) public void testSDgetinfoNullName() throws Throwable { int[] args = {0, 0, 0}; int[] dim_sizes = {0, 0}; HDFLibrary.SDgetinfo(0, null, dim_sizes, args); } @Test(expected = NullPointerException.class) public void testSDgetinfoNullArgs() throws Throwable { String[] name = {""}; int[] dim_sizes = {0, 0}; HDFLibrary.SDgetinfo(0, name, dim_sizes, null); } @Test(expected = IllegalArgumentException.class) public void testSDgetinfoArgumentArgs() throws Throwable { String[] name = {""}; int[] args = {0}; int[] dim_sizes = {0, 0}; HDFLibrary.SDgetinfo(0, name, dim_sizes, args); } @Test(expected = NullPointerException.class) public void testSDgetinfoNullDims() throws Throwable { String[] name = {""}; int[] args = {0, 0, 0}; HDFLibrary.SDgetinfo(0, name, null, args); } @Test(expected = HDFException.class) public void testSDcheckemptyIllegalId() throws Throwable { int[] emptySDS = {0}; HDFLibrary.SDcheckempty(-1, emptySDS); } @Test(expected = NullPointerException.class) public void testSDcheckemptyNull() throws Throwable { HDFLibrary.SDcheckempty(0, null); } @Test(expected = IllegalArgumentException.class) public void testSDreaddataIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.SDreaddata(-1, start, stride, count, data); } @Test(expected = NullPointerException.class) public void testSDreaddataNullData() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; HDFLibrary.SDreaddata(0, start, stride, count, null); } @Test(expected = NullPointerException.class) public void testSDreaddataNullStart() throws Throwable { int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.SDreaddata(0, null, stride, count, data); } @Test(expected = NullPointerException.class) public void testSDreaddataNullCount() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; byte[] data = {0}; HDFLibrary.SDreaddata(0, start, stride, null, data); } @Test(expected = IllegalArgumentException.class) public void testSDreaddata_shortIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; short[] data = {0}; HDFLibrary.SDreaddata_short(-1, start, stride, count, data); } @Test(expected = IllegalArgumentException.class) public void testSDreaddata_intIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; int[] data = {0}; HDFLibrary.SDreaddata_int(-1, start, stride, count, data); } @Test(expected = IllegalArgumentException.class) public void testSDreaddata_longIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; long[] data = {0}; HDFLibrary.SDreaddata_long(-1, start, stride, count, data); } @Test(expected = IllegalArgumentException.class) public void testSDreaddata_floatIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; float[] data = {0}; HDFLibrary.SDreaddata_float(-1, start, stride, count, data); } @Test(expected = IllegalArgumentException.class) public void testSDreaddata_doubleIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; double[] data = {0}; HDFLibrary.SDreaddata_double(-1, start, stride, count, data); } @Test(expected = HDFException.class) public void testSDendaccessIllegalId() throws Throwable { HDFLibrary.SDendaccess(-1); } @Test(expected = HDFException.class) public void testSDgetdimidIllegalId() throws Throwable { HDFLibrary.SDgetdimid(-1, 0); } @Test(expected = HDFException.class) public void testSDdiminfoIllegalId() throws Throwable { String[] name = {""}; int[] argv = {0, 0, 0}; HDFLibrary.SDdiminfo(-1, name, argv); } @Test(expected = NullPointerException.class) public void testSDdiminfoNullName() throws Throwable { int[] argv = {0, 0, 0}; HDFLibrary.SDdiminfo(0, null, argv); } @Test(expected = NullPointerException.class) public void testSDdiminfoNullArgs() throws Throwable { String[] name = {""}; HDFLibrary.SDdiminfo(0, name, null); } @Test(expected = IllegalArgumentException.class) public void testSDdiminfoArgumentArgs() throws Throwable { String[] name = {""}; int[] argv = {0}; HDFLibrary.SDdiminfo(0, name, argv); } @Test(expected = HDFException.class) public void testSDidtorefIllegalId() throws Throwable { HDFLibrary.SDidtoref(-1); } @Test(expected = HDFException.class) public void testSDreftoindexIllegalId() throws Throwable { short ref = 0; HDFLibrary.SDreftoindex(-1, ref); } @Test(expected = HDFException.class) public void testSDattrinfoIllegalId() throws Throwable { String[] name = {""}; int index = 0; int[] argv = {0, 0}; HDFLibrary.SDattrinfo(-1, index, name, argv); } @Test(expected = NullPointerException.class) public void testSDattrinfoNullName() throws Throwable { int index = 0; int[] argv = {0, 0}; HDFLibrary.SDattrinfo(0, index, null, argv); } @Test(expected = NullPointerException.class) public void testSDattrinfoNullArgs() throws Throwable { String[] name = {""}; int index = 0; HDFLibrary.SDattrinfo(0, index, name, null); } @Test(expected = IllegalArgumentException.class) public void testSDattrinfoArgumentArgs() throws Throwable { String[] name = {""}; int index = 0; int[] argv = {0}; HDFLibrary.SDattrinfo(0, index, name, argv); } @Test(expected = HDFException.class) public void testSDreadattrIllegalId() throws Throwable { int index = 0; byte[] data = {0}; HDFLibrary.SDreadattr(-1, index, data); } @Test(expected = NullPointerException.class) public void testSDreadattrNull() throws Throwable { int index = 0; HDFLibrary.SDreadattr(0, index, null); } @Test(expected = HDFException.class) public void testSDfindattrIllegalId() throws Throwable { String str = ""; HDFLibrary.SDfindattr(-1, str); } @Test(expected = NullPointerException.class) public void testSDfindattrNull() throws Throwable { HDFLibrary.SDfindattr(0, null); } @Test(expected = HDFException.class) public void testSDiscoordvarIllegalId() throws Throwable { HDFLibrary.SDiscoordvar(-1); } @Test(expected = HDFException.class) public void testSDgetcalIllegalId() throws Throwable { double[] args = {0, 0, 0, 0}; int[] NT = {0}; HDFLibrary.SDgetcal(-1, args, NT); } @Test(expected = NullPointerException.class) public void testSDgetcalNull() throws Throwable { double[] args = {0, 0, 0, 0}; HDFLibrary.SDgetcal(0, args, null); } @Test(expected = IllegalArgumentException.class) public void testSSDgetcalArgument() throws Throwable { double[] args = {0}; int[] NT = {0}; HDFLibrary.SDgetcal(0, args, NT); } @Test(expected = NullPointerException.class) public void testSDgetcalNullArgument() throws Throwable { int[] NT = {0}; HDFLibrary.SDgetcal(0, null, NT); } @Test(expected = HDFException.class) public void testSDgetdatastrsIllegalId() throws Throwable { String[] str = {"", "", "", ""}; int len = 0; HDFLibrary.SDgetdatastrs(-1, str, len); } @Test(expected = NullPointerException.class) public void testSDgetdatastrsNull() throws Throwable { int len = 0; HDFLibrary.SDgetdatastrs(0, null, len); } @Test(expected = IllegalArgumentException.class) public void testSDgetdatastrsArgument() throws Throwable { String[] str = {""}; int len = 0; HDFLibrary.SDgetdatastrs(-1, str, len); } @Test(expected = HDFException.class) public void testSDgetdimstrsIllegalId() throws Throwable { String[] str = {"", "", "", ""}; int len = 0; HDFLibrary.SDgetdimstrs(-1, str, len); } @Test(expected = NullPointerException.class) public void testSDgetdimstrsNull() throws Throwable { int len = 0; HDFLibrary.SDgetdimstrs(0, null, len); } @Test(expected = IllegalArgumentException.class) public void testSDgetdimstrsArgument() throws Throwable { String[] str = {""}; int len = 0; HDFLibrary.SDgetdimstrs(-1, str, len); } @Test(expected = HDFException.class) public void testSDgetdimscaleIllegalId() throws Throwable { byte[] data = {0}; HDFLibrary.SDgetdimscale(-1, data); } @Test(expected = NullPointerException.class) public void testSDgetdimscaleNull() throws Throwable { HDFLibrary.SDgetdimscale(0, null); } @Test(expected = HDFException.class) public void testSDgetfillvalueIllegalId() throws Throwable { byte[] data = {0}; HDFLibrary.SDgetfillvalue(-1, data); } @Test(expected = NullPointerException.class) public void testSDgetfillvalueNull() throws Throwable { byte[] data = null; HDFLibrary.SDgetfillvalue(0, data); } @Test(expected = HDFException.class) public void testSDgetrangeIllegalId() throws Throwable { byte[] min = {0}; byte[] max = {0}; HDFLibrary.SDgetrange(-1, max, min); } @Test(expected = NullPointerException.class) public void testSDgetrangeNullMin() throws Throwable { byte[] min = null; byte[] max = {0}; HDFLibrary.SDgetrange(0, max, min); } @Test(expected = NullPointerException.class) public void testSDgetrangeNullMax() throws Throwable { byte[] min = {0}; byte[] max = null; HDFLibrary.SDgetrange(0, max, min); } @Test(expected = HDFException.class) public void testSDcreateIllegalId() throws Throwable { String name = ""; long num_type = 0; int rank = 0; int[] dim_sizes = {0}; HDFLibrary.SDcreate(-1, name, num_type, rank, dim_sizes); } @Test(expected = NullPointerException.class) public void testSDcreateNullName() throws Throwable { long num_type = 0; int rank = 0; int[] dim_sizes = {0, 0}; HDFLibrary.SDcreate(0, null, num_type, rank, dim_sizes); } @Test(expected = NullPointerException.class) public void testSDcreateNullDims() throws Throwable { String name = ""; long num_type = 0; int rank = 0; HDFLibrary.SDcreate(0, name, num_type, rank, null); } // this API call returns false for not record and for failures // maybe failures should return a negative? @Ignore //(expected = HDFException.class) public void testSDisrecordIllegalId() throws Throwable { HDFLibrary.SDisrecord(-1); } @Test(expected = HDFException.class) public void testSDsetattrIllegalId() throws Throwable { String name = ""; long num_type = 0; int count = 0; byte[] data = {0}; HDFLibrary.SDsetattr(-1, name, num_type, count, data); } @Test(expected = NullPointerException.class) public void testSDsetattrNullName() throws Throwable { long num_type = 0; int count = 0; byte[] data = {0}; HDFLibrary.SDsetattr(0, null, num_type, count, data); } @Test(expected = NullPointerException.class) public void testSDsetattrNullVals() throws Throwable { String name = ""; long num_type = 0; int count = 0; byte[] data = null; HDFLibrary.SDsetattr(0, name, num_type, count, data); } @Test(expected = HDFException.class) public void testSDsetcalIllegalId() throws Throwable { double val = 0; int num_type = 0; HDFLibrary.SDsetcal(-1, val, val, val, val, num_type); } @Test(expected = HDFException.class) public void testSDsetdatastrsIllegalId() throws Throwable { String[] str = {"", "", "", ""}; HDFLibrary.SDsetdatastrs(-1, str[0], str[1], str[2], str[3]); } @Test(expected = HDFException.class) public void testSDsetdimnameIllegalId() throws Throwable { String str = ""; HDFLibrary.SDsetdimname(-1, str); } @Test(expected = NullPointerException.class) public void testSDsetdimnameNull() throws Throwable { String str = null; HDFLibrary.SDsetdimname(-1, str); } @Test(expected = HDFException.class) public void testSDsetdimscaleIllegalId() throws Throwable { int num_type = 0; int count = 0; byte[] data = {0}; HDFLibrary.SDsetdimscale(-1, count, num_type, data); } @Test(expected = NullPointerException.class) public void testSDsetdimscaleNull() throws Throwable { int num_type = 0; int count = 0; byte[] data = null; HDFLibrary.SDsetdimscale(0, count, num_type, data); } @Test(expected = HDFException.class) public void testSDsetdimstrsIllegalId() throws Throwable { String[] str = {"", "", ""}; HDFLibrary.SDsetdimstrs(-1, str[0], str[1], str[2]); } @Test(expected = HDFException.class) public void testSDsetexternalfileIllegalId() throws Throwable { String str = ""; int offset = 0; HDFLibrary.SDsetexternalfile(-1, str, offset); } @Test(expected = NullPointerException.class) public void testSDsetexternalfileNull() throws Throwable { String str = null; int offset = 0; HDFLibrary.SDsetexternalfile(-1, str, offset); } @Test(expected = HDFException.class) public void testSDsetfillvalueIllegalId() throws Throwable { byte[] data = {0}; HDFLibrary.SDsetfillvalue(-1, data); } @Test(expected = NullPointerException.class) public void testSDsetfillvalueNull() throws Throwable { byte[] data = null; HDFLibrary.SDsetfillvalue(0, data); } @Test(expected = HDFException.class) public void testSDsetrangeIllegalId() throws Throwable { byte[] min = {0}; byte[] max = {0}; HDFLibrary.SDsetrange(-1, max, min); } @Test(expected = NullPointerException.class) public void testSDsetrangeNullMin() throws Throwable { byte[] min = null; byte[] max = {0}; HDFLibrary.SDsetrange(0, max, min); } @Test(expected = NullPointerException.class) public void testSDsetrangeNullMax() throws Throwable { byte[] min = {0}; byte[] max = null; HDFLibrary.SDsetrange(0, max, min); } @Test(expected = IllegalArgumentException.class) public void testSDwritedataIllegalId() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.SDwritedata(-1, start, stride, count, data); } @Test(expected = NullPointerException.class) public void testSDwritedataNullData() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; int[] count = {0, 0}; HDFLibrary.SDwritedata(0, start, stride, count, null); } @Test(expected = NullPointerException.class) public void testSDwritedataNullStart() throws Throwable { int[] stride = {0, 0}; int[] count = {0, 0}; byte[] data = {0}; HDFLibrary.SDwritedata(0, null, stride, count, data); } @Test(expected = NullPointerException.class) public void testSDwritedataNullCount() throws Throwable { int[] start = {0, 0}; int[] stride = {0, 0}; byte[] data = {0}; HDFLibrary.SDwritedata(0, start, stride, null, data); } @Test(expected = HDFException.class) public void testSDsetnbitdatasetIllegalId() throws Throwable { int start_bit = 0; int bit_len = 0; int sign_ext = 0; int fill_one = 0; HDFLibrary.SDsetnbitdataset(-1, start_bit, bit_len, sign_ext, fill_one); } @Test(expected = HDFException.class) public void testSDsetcompressIllegalId() throws Throwable { int type = 0; HDFCompInfo comp_info = new HDFCompInfo(); HDFLibrary.SDsetcompress(-1, type, comp_info); } @Test(expected = NullPointerException.class) public void testSDsetcompressNull() throws Throwable { int type = 0; HDFCompInfo comp_info = null; HDFLibrary.SDsetcompress(0, type, null); } @Test(expected = HDFException.class) public void testSDgetcompinfoIllegalId() throws Throwable { HDFCompInfo comp_info = new HDFCompInfo(); HDFLibrary.SDgetcompinfo(-1, comp_info); } @Test(expected = NullPointerException.class) public void testSDgetcompinfoNull() throws Throwable { HDFCompInfo comp_info = null; HDFLibrary.SDgetcompinfo(0, null); } @Test(expected = HDFException.class) public void testSDsetaccesstypeIllegalId() throws Throwable { int index = 0; HDFLibrary.SDsetaccesstype(-1, index); } @Test(expected = HDFException.class) public void testSDsetblocksizeIllegalId() throws Throwable { int block_size = 0; HDFLibrary.SDsetblocksize(-1, block_size); } @Test(expected = HDFException.class) public void testSDsetfillmodeIllegalId() throws Throwable { boolean fill_enable = false; HDFLibrary.SDsetfillmode(-1, fill_enable); } @Test(expected = HDFException.class) public void testSDsetdimval_compIllegalId() throws Throwable { int comp_mode = 0; HDFLibrary.SDsetdimval_comp(-1, comp_mode); } @Test(expected = HDFException.class) public void testSDisdimval_bwcompIllegalId() throws Throwable { HDFLibrary.SDisdimval_bwcomp(-1); } @Test(expected = HDFException.class) public void testSDsetchunkIllegalId() throws Throwable { int flags = 0; HDFChunkInfo chunk_def = new HDFChunkInfo(); HDFLibrary.SDsetchunk(-1, chunk_def, flags); } @Test(expected = NullPointerException.class) public void testSDsetchunkNull() throws Throwable { int flags = 0; HDFChunkInfo chunk_def = null; HDFLibrary.SDsetchunk(0, null, flags); } // Library routine check of ID will not fail - it will just crash @Ignore //(expected = HDFException.class) public void testSDreadchunkIllegalId() throws Throwable { int[] args = {0, 0}; byte[] data = {0}; HDFLibrary.SDreadchunk(-1, args, data); } @Test(expected = NullPointerException.class) public void testSDreadchunkNull() throws Throwable { int[] args = {0, 0}; byte[] data = null; HDFLibrary.SDreadchunk(0, args, data); } @Test(expected = NullPointerException.class) public void testSDreadchunkNullArgument() throws Throwable { byte[] data = {0}; HDFLibrary.SDreadchunk(0, null, data); } @Test(expected = HDFException.class) public void testSDsetchunkcacheIllegalId() throws Throwable { int maxcache = 0; int flags = 0; HDFLibrary.SDsetchunkcache(-1, maxcache, flags); } // Library routine check of ID will not fail - it will just crash @Ignore //(expected = HDFException.class) public void testSDwritechunkIllegalId() throws Throwable { int[] args = {0, 0}; byte[] data = {0}; HDFLibrary.SDwritechunk(-1, args, data); } @Test(expected = NullPointerException.class) public void testSDwritechunkNull() throws Throwable { int[] args = {0, 0}; byte[] data = null; HDFLibrary.SDwritechunk(0, args, data); } @Test(expected = NullPointerException.class) public void testSDwritechunkNullArgument() throws Throwable { byte[] data = {0}; HDFLibrary.SDwritechunk(0, null, data); } } hdf4-hdf4.3.1/java/test/TestH4VSparams.java000066400000000000000000000373601503061704500203730ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; public class TestH4VSparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } @Test(expected = NullPointerException.class) public void testVSQuerycountNullNRecords() throws Throwable { HDFLibrary.VSQuerycount(0, null); } @Test(expected = HDFException.class) public void testVSQuerycountIllegalId() throws Throwable { HDFLibrary.VSQuerycount(-1, new int[] {0}); } @Test(expected = IllegalArgumentException.class) public void testVSQuerycountIllegalArgument() throws Throwable { HDFLibrary.VSQuerycount(0, new int[] {}); } @Test(expected = NullPointerException.class) public void testVSQueryfieldsNullFields() throws Throwable { HDFLibrary.VSQueryfields(0, null); } @Test(expected = HDFException.class) public void testVSQueryfieldsIllegalId() throws Throwable { HDFLibrary.VSQueryfields(-1, new String[1]); } @Test(expected = IllegalArgumentException.class) public void testVSQueryfieldsIllegalArgument() throws Throwable { HDFLibrary.VSQueryfields(0, new String[0]); } @Test(expected = NullPointerException.class) public void testVSQueryinterlaceNullInterlace() throws Throwable { HDFLibrary.VSQueryinterlace(0, null); } @Test(expected = HDFException.class) public void testVSQueryinterlaceIllegalId() throws Throwable { HDFLibrary.VSQueryinterlace(-1, new int[1]); } @Test(expected = IllegalArgumentException.class) public void testVSQueryinterlaceIllegalArgument() throws Throwable { HDFLibrary.VSQueryinterlace(0, new int[0]); } @Test(expected = NullPointerException.class) public void testVSQuerynameNullVDataName() throws Throwable { HDFLibrary.VSQueryname(0, null); } @Test(expected = HDFException.class) public void testVSQuerynameIllegalId() throws Throwable { HDFLibrary.VSQueryname(-1, new String[1]); } @Test(expected = IllegalArgumentException.class) public void testVSQuerynameIllegalArgument() throws Throwable { HDFLibrary.VSQueryname(0, new String[0]); } // @Test(expected = HDFException.class) // public void testVSQueryrefIllegalId() throws Throwable { // HDFLibrary.VSQueryref(-1); // } // @Test(expected = HDFException.class) // public void testVSQuerytagIllegalId() throws Throwable { // HDFLibrary.VSQuerytag(-1); // } @Test(expected = NullPointerException.class) public void testVSQueryvsizeNullVDataSize() throws Throwable { HDFLibrary.VSQueryvsize(0, null); } @Test(expected = HDFException.class) public void testVSQueryvsizeIllegalId() throws Throwable { HDFLibrary.VSQueryvsize(-1, new int[1]); } @Test(expected = IllegalArgumentException.class) public void testVSQueryvsizeIllegalArgument() throws Throwable { HDFLibrary.VSQueryvsize(0, new int[0]); } @Test(expected = NullPointerException.class) public void testVSattachNullAccess() throws Throwable { HDFLibrary.VSattach(0, 0, null); } @Test(expected = HDFException.class) public void testVSattachIllegalId() throws Throwable { HDFLibrary.VSattach(-1, 0, "w"); } @Test(expected = HDFException.class) public void testVSattachIllegalReg() throws Throwable { HDFLibrary.VSattach(0, -1, "w"); } // @Test(expected = HDFException.class) // public void testVSdetachIllegalId() throws Throwable { // HDFLibrary.VSdetach(-1); // } // @Test(expected = HDFException.class) // public void testVSgetidIllegalId() throws Throwable { // HDFLibrary.VSgetid(-1, 0); // } // @Test(expected = HDFException.class) // public void testVSgetidIllegalRef() throws Throwable { // HDFLibrary.VSgetid(0, -1); // } @Test(expected = NullPointerException.class) public void testVSgetclassNullClassName() throws Throwable { HDFLibrary.VSgetclass(0, null); } @Test(expected = HDFException.class) public void testVSgetclassIllegalId() throws Throwable { HDFLibrary.VSgetclass(-1, new String[1]); } @Test(expected = NullPointerException.class) public void testVSgetnameNullName() throws Throwable { HDFLibrary.VSgetname(0, null); } @Test(expected = HDFException.class) public void testVSgetnameIllegalId() throws Throwable { HDFLibrary.VSgetname(-1, new String[1]); } // @Test(expected = HDFException.class) // public void testVSeltsIllegalId() throws Throwable { // HDFLibrary.VSelts(-1); // } @Test(expected = NullPointerException.class) public void testVSfdefineNullFieldName() throws Throwable { HDFLibrary.VSfdefine(0, null, 0, 0); } @Test(expected = HDFException.class) public void testVSfdefineIllegalId() throws Throwable { HDFLibrary.VSfdefine(-1, "", 0, 0); } @Test(expected = NullPointerException.class) public void testVSfexistNullFields() throws Throwable { HDFLibrary.VSfexist(0, null); } @Test(expected = HDFException.class) public void testVSfexistIllegalId() throws Throwable { HDFLibrary.VSfexist(-1, ""); } @Test(expected = NullPointerException.class) public void testVSfindNullVDataName() throws Throwable { HDFLibrary.VSfind(0, null); } // @Test(expected = HDFException.class) // public void testVSfindIllegalId() throws Throwable { // HDFLibrary.VSfind(-1, ""); // } @Test(expected = HDFException.class) public void testVSsetblocksizeIllegalId() throws Throwable { HDFLibrary.VSsetblocksize(-1, 0); } @Test(expected = HDFException.class) public void testVSsetnumblocksIllegalId() throws Throwable { HDFLibrary.VSsetnumblocks(-1, 0); } @Test(expected = NullPointerException.class) public void testVSgetfieldsNullFieldName() throws Throwable { HDFLibrary.VSgetfields(0, null); } @Test(expected = HDFException.class) public void testVSgetfieldsIllegalId() throws Throwable { HDFLibrary.VSgetfields(-1, new String[1]); } // @Test(expected = HDFException.class) // public void testVSgetinterlaceIllegalId() throws Throwable { // HDFLibrary.VSgetinterlace(-1); // } @Test(expected = NullPointerException.class) public void testVSinquireNullIArgs() throws Throwable { HDFLibrary.VSinquire(0, null, new String[2]); } @Test(expected = NullPointerException.class) public void testVSinquireNullSArgs() throws Throwable { HDFLibrary.VSinquire(0, new int[3], null); } @Test(expected = HDFException.class) public void testVSinquireIllegalId() throws Throwable { HDFLibrary.VSinquire(-1, new int[3], new String[2]); } @Test(expected = IllegalArgumentException.class) public void testVSinquireIllegalIArgs() throws Throwable { HDFLibrary.VSinquire(0, new int[1], new String[2]); } @Test(expected = IllegalArgumentException.class) public void testVSinquireIllegalSArgs() throws Throwable { HDFLibrary.VSinquire(0, new int[3], new String[1]); } @Test(expected = NullPointerException.class) public void testVSloneNullRefArray() throws Throwable { HDFLibrary.VSlone(0, null, 0); } // @Test(expected = HDFException.class) // public void testVSloneIllegalId() throws Throwable { // HDFLibrary.VSlone(-1, new int[10], 0); // } @Test(expected = NullPointerException.class) public void testVSreadNullDataBuffer() throws Throwable { HDFLibrary.VSread(0, null, 0, 0); } // @Test(expected = HDFException.class) // public void testVSreadIllegalId() throws Throwable { // HDFLibrary.VSread(-1, new byte[] { }, 0, 0); // } // @Test(expected = HDFException.class) // public void testVSseekIllegalId() throws Throwable { // HDFLibrary.VSseek(-1, 0); // } @Test(expected = NullPointerException.class) public void testVSsetfieldsNullFields() throws Throwable { HDFLibrary.VSsetfields(0, null); } @Test(expected = HDFException.class) public void testVSsetfieldsIllegalId() throws Throwable { HDFLibrary.VSsetfields(-1, ""); } @Test(expected = HDFException.class) public void testVSsetinterlaceIllegalId() throws Throwable { HDFLibrary.VSsetinterlace(-1, 0); } @Test(expected = NullPointerException.class) public void testVSsizeofNullFields() throws Throwable { HDFLibrary.VSsizeof(0, null); } @Test(expected = HDFException.class) public void testVSsizeofIllegalId() throws Throwable { HDFLibrary.VSsizeof(-1, ""); } @Test(expected = HDFException.class) public void testVSappendableIllegalVKey() throws Throwable { HDFLibrary.VSappendable(-1, 0); } @Test(expected = NullPointerException.class) public void testVSfindclassNullClass() throws Throwable { HDFLibrary.VSfindclass(0, null); } // @Test(expected = HDFException.class) // public void testVSfindclassIllegalId() throws Throwable { // HDFLibrary.VSfindclass(-1, ""); // } // @Test(expected = HDFException.class) // public void testVSgetversionIllegalVKey() throws Throwable { // HDFLibrary.VSgetversion(-1); // } @Test(expected = NullPointerException.class) public void testVSsetclassNullClass() throws Throwable { HDFLibrary.VSsetclass(0, null); } @Test(expected = HDFException.class) public void testVSsetclassIllegalId() throws Throwable { HDFLibrary.VSsetclass(-1, ""); } @Test(expected = NullPointerException.class) public void testVSsetexternalfileNullFilename() throws Throwable { HDFLibrary.VSsetexternalfile(0, null, 0); } @Test(expected = HDFException.class) public void testVSsetexternalfileIllegalVKey() throws Throwable { HDFLibrary.VSsetexternalfile(-1, "", 0); } @Test(expected = NullPointerException.class) public void testVSsetnameNullVDataName() throws Throwable { HDFLibrary.VSsetname(0, null); } @Test(expected = HDFException.class) public void testVSsetnameIllegalId() throws Throwable { HDFLibrary.VSsetname(-1, ""); } @Test(expected = NullPointerException.class) public void testVSwriteNullDataBuffer() throws Throwable { HDFLibrary.VSwrite(0, null, 0, 0); } @Test(expected = HDFException.class) public void testVSwriteIllegalId() throws Throwable { HDFLibrary.VSwrite(-1, new byte[] {}, 0, 0); } @Test(expected = NullPointerException.class) public void testVSattrinfoNullName() throws Throwable { HDFLibrary.VSattrinfo(0, 0, 0, null, new int[3]); } @Test(expected = NullPointerException.class) public void testVSattrinfoNullArgs() throws Throwable { HDFLibrary.VSattrinfo(0, 0, 0, new String[1], null); } @Test(expected = HDFException.class) public void testVSattrinfoIllegalId() throws Throwable { HDFLibrary.VSattrinfo(-1, 0, 0, new String[1], new int[3]); } @Test(expected = IllegalArgumentException.class) public void testVSattrinfoIllegalNameArgument() throws Throwable { HDFLibrary.VSattrinfo(0, 0, 0, new String[0], new int[3]); } @Test(expected = IllegalArgumentException.class) public void testVSattrinfoIllegalAttributeArgs() throws Throwable { HDFLibrary.VSattrinfo(0, 0, 0, new String[1], new int[1]); } @Test(expected = NullPointerException.class) public void testVSfindexNullName() throws Throwable { HDFLibrary.VSfindex(0, null, new int[1]); } @Test(expected = NullPointerException.class) public void testVSfindexNullIndexArray() throws Throwable { HDFLibrary.VSfindex(0, "", null); } @Test(expected = HDFException.class) public void testVSfindexIllegalId() throws Throwable { HDFLibrary.VSfindex(-1, "", new int[1]); } @Test(expected = NullPointerException.class) public void testVSfindattrNullName() throws Throwable { HDFLibrary.VSfindattr(0, 0, null); } @Test(expected = HDFException.class) public void testVSfindattrIllegalId() throws Throwable { HDFLibrary.VSfindattr(-1, 0, ""); } // @Test(expected = HDFException.class) // public void testVSfnattrsIllegalId() throws Throwable { // HDFLibrary.VSfnattrs(-1, 0); // } @Test(expected = NullPointerException.class) public void testVSgetattrNullData() throws Throwable { HDFLibrary.VSgetattr(0, 0, 0, null); } @Test(expected = HDFException.class) public void testVSgetattrIllegalId() throws Throwable { HDFLibrary.VSgetattr(-1, 0, 0, new byte[] {}); } // @Test(expected = HDFException.class) // public void testVSisattrIllegalId() throws Throwable { // HDFLibrary.VSisattr(-1); // } // @Test(expected = HDFException.class) // public void testVSnattrsIllegalId() throws Throwable { // HDFLibrary.VSnattrs(-1); // } @Test(expected = NullPointerException.class) public void testVSsetattrNullAttributeName() throws Throwable { HDFLibrary.VSsetattr(0, 0, null, 0, 0, new byte[] {}); } @Test(expected = NullPointerException.class) public void testVSsetattrNullAttributeName2() throws Throwable { HDFLibrary.VSsetattr(0, 0, null, 0, 0, ""); } // @Test(expected = NullPointerException.class) // public void testVSsetattrNullValues() throws Throwable { // HDFLibrary.VSsetattr(0, 0, "", 0, 0, null); // } @Test(expected = HDFException.class) public void testVSsetattrIllegalId() throws Throwable { HDFLibrary.VSsetattr(-1, 0, "", 0, 0, new byte[] {}); } @Test(expected = HDFException.class) public void testVSsetattrIllegalId2() throws Throwable { HDFLibrary.VSsetattr(-1, 0, "", 0, 0, ""); } } hdf4-hdf4.3.1/java/test/TestH4Vparams.java000066400000000000000000000325411503061704500202440ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF Products. The full HDF copyright * * notice, including terms governing use, modification, and redistribution, * * is contained in the file, COPYING. COPYING can be found at the root of * * the source code distribution tree. You can also access it online at * * https://www.hdfgroup.org/licenses. If you do not have access to the * * file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import hdf.hdflib.HDFChunkInfo; import hdf.hdflib.HDFConstants; import hdf.hdflib.HDFException; import hdf.hdflib.HDFLibrary; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; public class TestH4Vparams { @Rule public TestName testname = new TestName(); @Before public void showTestName() { System.out.print(testname.getMethodName()); } @After public void nextTestName() { System.out.println(); } // @Test(expected = HDFException.class) // public void testVQueryrefIllegalVKey() throws Throwable { // HDFLibrary.VQueryref(-1); // } // @Test(expected = HDFException.class) // public void testVQuerytagIllegalVKey() throws Throwable { // HDFLibrary.VQuerytag(-1); // } // @Test(expected = HDFException.class) // public void testVstartIllegalId() throws Throwable { // HDFLibrary.Vstart(-1); // } @Test(expected = NullPointerException.class) public void testVattachNullAccess() throws Throwable { HDFLibrary.Vattach(0, 0, null); } @Test(expected = HDFException.class) public void testVattachIllegalId() throws Throwable { String str = ""; HDFLibrary.Vattach(-1, 0, str); } // @Test(expected = HDFException.class) // public void testVdetachIllegalId() throws Throwable { // HDFLibrary.Vdetach(-1); // } // @Test(expected = HDFException.class) // public void testVendIllegalId() throws Throwable { // HDFLibrary.Vend(-1); // } // @Test(expected = HDFException.class) // public void testVgetidIllegalId() throws Throwable { // HDFLibrary.Vgetid(-1, 0); // } @Test(expected = NullPointerException.class) public void testVgetclassNullClassName() throws Throwable { HDFLibrary.Vgetclass(0, null); } @Test(expected = IllegalArgumentException.class) public void testVgetclassIllegalArgument() throws Throwable { HDFLibrary.Vgetclass(0, new String[0]); } @Test(expected = HDFException.class) public void testVgetclassIllegalId() throws Throwable { HDFLibrary.Vgetclass(-1, new String[1]); } @Test(expected = NullPointerException.class) public void testVgetnameNullName() throws Throwable { HDFLibrary.Vgetname(0, null); } @Test(expected = IllegalArgumentException.class) public void testVgetnameIllegalArgument() throws Throwable { HDFLibrary.Vgetname(0, new String[0]); } @Test(expected = HDFException.class) public void testVgetnameIllegalId() throws Throwable { HDFLibrary.Vgetname(-1, new String[1]); } @Test(expected = HDFException.class) public void testVisvgIllegalId() throws Throwable { HDFLibrary.Visvg(-1, 0); } @Test(expected = HDFException.class) public void testVisvsIllegalId() throws Throwable { HDFLibrary.Visvs(-1, 0); } @Test(expected = NullPointerException.class) public void testVgettagrefsNullTags() throws Throwable { int arraySize = 10; HDFLibrary.Vgettagrefs(0, null, new int[arraySize], arraySize); } @Test(expected = NullPointerException.class) public void testVgettagrefsNullRefs() throws Throwable { int arraySize = 10; HDFLibrary.Vgettagrefs(0, new int[arraySize], null, arraySize); } @Test(expected = IllegalArgumentException.class) public void testVgettagrefsIllegalTagsArgument() throws Throwable { int arraySize = 10; HDFLibrary.Vgettagrefs(0, new int[1], new int[arraySize], arraySize); } @Test(expected = IllegalArgumentException.class) public void testVgettagrefsIllegalRefsArgument() throws Throwable { int arraySize = 10; HDFLibrary.Vgettagrefs(0, new int[arraySize], new int[1], arraySize); } @Test(expected = HDFException.class) public void testVgettagrefsIllegalId() throws Throwable { int arraySize = 10; HDFLibrary.Vgettagrefs(-1, new int[arraySize], new int[arraySize], arraySize); } @Test(expected = NullPointerException.class) public void testVgettagrefNullTagRef() throws Throwable { HDFLibrary.Vgettagref(0, 0, null); } @Test(expected = IllegalArgumentException.class) public void testVgettagrefIllegalTagRefArgument() throws Throwable { HDFLibrary.Vgettagref(0, 0, new int[1]); } @Test(expected = HDFException.class) public void testVgettagrefIllegalId() throws Throwable { HDFLibrary.Vgettagref(-1, 0, new int[2]); } // @Test(expected = HDFException.class) // public void testVntagrefsIllegalId() throws Throwable { // HDFLibrary.Vntagrefs(-1); // } // @Test(expected = HDFException.class) // public void testVinqtagrefIllegalId() throws Throwable { // HDFLibrary.Vinqtagref(-1, 0, 0); // } @Test(expected = NullPointerException.class) public void testVloneNullRefArray() throws Throwable { HDFLibrary.Vlone(0, null, 0); } @Test(expected = IllegalArgumentException.class) public void testVloneIllegalSizeRefArray() throws Throwable { int arraySize = 10; HDFLibrary.Vlone(0, new int[arraySize - 1], arraySize); } // @Test(expected = HDFException.class) // public void testVloneIllegalId() throws Throwable { // HDFLibrary.Vlone(-1, new int[10], 10); // } // @Test(expected = HDFException.class) // public void testVaddtagrefIllegalId() throws Throwable { // HDFLibrary.Vaddtagref(-1, 0, 0); // } // @Test(expected = HDFException.class) // public void testVdeletetagrefIllegalId() throws Throwable { // HDFLibrary.Vdeletetagref(-1, 0, 0); // } @Test(expected = NullPointerException.class) public void testVfindNullVGroupName() throws Throwable { HDFLibrary.Vfind(0, null); } // @Test(expected = HDFException.class) // public void testVfindIllegalId() throws Throwable { // String str = ""; // HDFLibrary.Vfind(-1, str); // } @Test(expected = NullPointerException.class) public void testVfindclassNullClassName() throws Throwable { HDFLibrary.Vfindclass(0, null); } // @Test(expected = HDFException.class) // public void testVfindclassIllegalId() throws Throwable { // String str = ""; // HDFLibrary.Vfindclass(-1, str); // } @Test(expected = NullPointerException.class) public void testVflocateNullClassName() throws Throwable { HDFLibrary.Vflocate(0, null); } @Test(expected = HDFException.class) public void testVflocateIllegalKey() throws Throwable { String str = ""; HDFLibrary.Vflocate(-1, str); } // @Test(expected = HDFException.class) // public void testVgetnextIllegalKey() throws Throwable { // HDFLibrary.Vgetnext(-1, 0); // } @Test(expected = NullPointerException.class) public void testVinquireNullNEntries() throws Throwable { HDFLibrary.Vinquire(0, null, new String[1]); } @Test(expected = NullPointerException.class) public void testVinquireNullVGroupName() throws Throwable { HDFLibrary.Vinquire(0, new int[1], null); } @Test(expected = IllegalArgumentException.class) public void testVinquireIllegalNEntriesArgument() throws Throwable { HDFLibrary.Vinquire(0, new int[0], new String[1]); } @Test(expected = IllegalArgumentException.class) public void testVinquireIllegalVGroupNameArgument() throws Throwable { HDFLibrary.Vinquire(0, new int[1], new String[0]); } @Test(expected = HDFException.class) public void testVinquireIllegalId() throws Throwable { HDFLibrary.Vinquire(-1, new int[1], new String[1]); } // @Test(expected = HDFException.class) // public void testVinsertIllegalVGroupId() throws Throwable { // HDFLibrary.Vinsert(-1, 0); // } // @Test(expected = HDFException.class) // public void testVinsertIllegalVId() throws Throwable { // HDFLibrary.Vinsert(0, -1); // } // @Test(expected = HDFException.class) // public void testVnrefsIllegalKey() throws Throwable { // HDFLibrary.Vnrefs(-1, 0); // } @Test(expected = NullPointerException.class) public void testVsetclassNullClassName() throws Throwable { HDFLibrary.Vsetclass(0, null); } @Test(expected = HDFException.class) public void testVsetclassIllegalId() throws Throwable { String str = ""; HDFLibrary.Vsetclass(-1, str); } @Test(expected = NullPointerException.class) public void testVsetnameNullName() throws Throwable { HDFLibrary.Vsetname(0, null); } @Test(expected = HDFException.class) public void testVsetnameIllegalId() throws Throwable { String str = ""; HDFLibrary.Vsetname(-1, str); } @Test(expected = NullPointerException.class) public void testVattrinfoNullName() throws Throwable { HDFLibrary.Vattrinfo(0, 0, null, new int[5]); } @Test(expected = NullPointerException.class) public void testVattrinfoNullArgv() throws Throwable { HDFLibrary.Vattrinfo(0, 0, new String[1], null); } @Test(expected = IllegalArgumentException.class) public void testVattrinfoIllegalNameArgument() throws Throwable { HDFLibrary.Vattrinfo(0, 0, new String[0], new int[5]); } @Test(expected = IllegalArgumentException.class) public void testVattrinfoIllegalArgvArgument() throws Throwable { HDFLibrary.Vattrinfo(0, 0, new String[1], new int[1]); } @Test(expected = HDFException.class) public void testVattrinfoIllegalId() throws Throwable { HDFLibrary.Vattrinfo(-1, 0, new String[1], new int[5]); } @Test(expected = NullPointerException.class) public void testVfindattrNullName() throws Throwable { HDFLibrary.Vfindattr(0, null); } @Test(expected = HDFException.class) public void testVfindattrIllegalId() throws Throwable { String str = ""; HDFLibrary.Vfindattr(-1, str); } @Test(expected = NullPointerException.class) public void testVgetattrNullData() throws Throwable { byte[] byteArray = null; HDFLibrary.Vgetattr(0, 0, byteArray); } @Test(expected = HDFException.class) public void testVgetattrIllegalId() throws Throwable { byte[] byteArray = new byte[10]; HDFLibrary.Vgetattr(-1, 0, byteArray); } // @Test(expected = HDFException.class) // public void testVgetversionIllegalId() throws Throwable { // HDFLibrary.Vgetversion(-1); // } @Test(expected = HDFException.class) public void testVnattrsIllegalId() throws Throwable { HDFLibrary.Vnattrs(-1); } @Test(expected = NullPointerException.class) public void testVsetattrNullName() throws Throwable { String values = ""; HDFLibrary.Vsetattr(0, null, 0, 0, values); } @Test(expected = NullPointerException.class) public void testVsetattrNullName2() throws Throwable { HDFLibrary.Vsetattr(0, null, 0, 0, new byte[10]); } @Test(expected = NullPointerException.class) public void testVsetattrNullValuesString() throws Throwable { String str = ""; String values = null; HDFLibrary.Vsetattr(0, str, 0, 0, values); } @Test(expected = NullPointerException.class) public void testVsetattrNullDataByteArray() throws Throwable { String str = ""; byte[] data = null; HDFLibrary.Vsetattr(0, str, 0, 0, data); } @Test(expected = HDFException.class) public void testVsetattrIllegalId() throws Throwable { String str = ""; String values = ""; HDFLibrary.Vsetattr(-1, str, 0, 0, values); } @Test(expected = HDFException.class) public void testVsetattrIllegalId2() throws Throwable { String str = ""; HDFLibrary.Vsetattr(-1, str, 0, 0, new byte[10]); } } hdf4-hdf4.3.1/java/test/junit.sh.in000066400000000000000000000573631503061704500170370ustar00rootroot00000000000000#! /bin/sh # # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF Java Products. The full HDF Java copyright # notice, including terms governing use, modification, and redistribution, # is contained in the file, COPYING. COPYING can be found at the root of # the source code distribution tree. You can also access it online at # http://www.hdfgroup.org/licenses. If you do not have access to the file, # you may request a copy from help@hdfgroup.org. # top_builddir=@top_builddir@ top_srcdir=@top_srcdir@ srcdir=@srcdir@ TESTNAME=JUnitInterface EXIT_SUCCESS=0 EXIT_FAILURE=1 # Set up default variable values if not supplied by the user. RM='rm -rf' CMP='cmp' DIFF='diff -c' CP='cp' DIRNAME='dirname' LS='ls' AWK='awk' nerrors=0 verbose=yes # setup my machine information. myos=`uname -s` # where the libs exist HDFLIB_HOME="$top_srcdir/java/lib" BLDLIBDIR="$top_builddir/hdf4/lib" BLDDIR="." HDFTEST_HOME="$top_srcdir/java/test" JARFILE=jar@PACKAGE_TARNAME@-@PACKAGE_VERSION@.jar TESTJARFILE=jar@PACKAGE_TARNAME@test.jar test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR ###################################################################### # library files # -------------------------------------------------------------------- # All the library files copy from source directory to test directory # NOTE: Keep this framework to add/remove test files. # This list are also used for checking exist. # Comment '#' without space can be used. # -------------------------------------------------------------------- LIST_LIBRARY_FILES=" $top_builddir/hdf/src/.libs/libdf.* $top_builddir/mfhdf/libsrc/.libs/libmfhdf.* $top_builddir/java/src/jni/.libs/libhdf_java.* " LIST_JAR_TESTFILES=" $HDFLIB_HOME/org.hamcrest.jar $HDFLIB_HOME/org.junit.jar $HDFLIB_HOME/slf4j-api-2.0.16.jar $HDFLIB_HOME/ext/slf4j-simple-2.0.16.jar " LIST_JAR_FILES=" $top_builddir/java/src/$JARFILE " LIST_DATA_FILES=" $HDFTEST_HOME/testfiles/JUnit-TestH4.txt $HDFTEST_HOME/testfiles/JUnit-TestH4ANparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4DFparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4DFPparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4DFRparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4GRparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4HCparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4SDparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4Vparams.txt $HDFTEST_HOME/testfiles/JUnit-TestH4VSparams.txt " # # copy files from source dirs to test dir # COPY_LIBFILES="$LIST_LIBRARY_FILES" COPY_JARTESTFILES="$LIST_JAR_TESTFILES" COPY_JARFILES="$LIST_JAR_FILES" COPY_LIBFILES_TO_BLDLIBDIR() { # copy test files. Used -f to make sure get a new copy for tstfile in $COPY_LIBFILES do # ignore '#' comment echo $tstfile | tr -d ' ' | grep '^#' > /dev/null RET=$? if [ $RET -eq 1 ]; then # skip cp if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=`$DIRNAME $tstfile` INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDLIBDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then $CP -f $tstfile $BLDLIBDIR if [ $? -ne 0 ]; then echo "Error: FAILED to copy $tstfile ." # Comment out this to CREATE expected file exit $EXIT_FAILURE fi fi fi done # copy jar files. Used -f to make sure get a new copy for tstfile in $COPY_JARTESTFILES do # ignore '#' comment echo $tstfile | tr -d ' ' | grep '^#' > /dev/null RET=$? if [ $RET -eq 1 ]; then # skip cp if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=`$DIRNAME $tstfile` INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDLIBDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then $CP -f $tstfile $BLDLIBDIR if [ $? -ne 0 ]; then echo "Error: FAILED to copy $tstfile ." # Comment out this to CREATE expected file exit $EXIT_FAILURE fi fi fi done for tstfile in $COPY_JARFILES do # ignore '#' comment echo $tstfile | tr -d ' ' | grep '^#' > /dev/null RET=$? if [ $RET -eq 1 ]; then # skip cp if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=`$DIRNAME $tstfile` INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDLIBDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then $CP -f $tstfile $BLDLIBDIR if [ $? -ne 0 ]; then echo "Error: FAILED to copy $tstfile ." # Comment out this to CREATE expected file exit $EXIT_FAILURE fi fi fi done } CLEAN_LIBFILES_AND_BLDLIBDIR() { # skip rm if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=$HDFLIB_HOME INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDLIBDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then for tstfile in $COPY_JARTESTFILES do $RM $BLDLIBDIR/tstfile done fi } COPY_DATAFILES="$LIST_DATA_FILES" COPY_DATAFILES_TO_BLDDIR() { # copy test files. Used -f to make sure get a new copy for tstfile in $COPY_DATAFILES do # ignore '#' comment echo $tstfile | tr -d ' ' | grep '^#' > /dev/null RET=$? if [ $RET -eq 1 ]; then # skip cp if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=`$DIRNAME $tstfile` INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then $CP -f $tstfile $BLDDIR if [ $? -ne 0 ]; then echo "Error: FAILED to copy $tstfile ." # Comment out this to CREATE expected file exit $EXIT_FAILURE fi fi fi done } CLEAN_DATAFILES_AND_BLDDIR() { $RM $BLDDIR/JUnit-*.out $RM $BLDDIR/JUnit-*.err $RM $BLDDIR/JUnit-*.ext # skip rm if srcdir is same as destdir # this occurs when build/test performed in source dir and # make cp fail SDIR=`$DIRNAME $tstfile` INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'` INODE_DDIR=`$LS -i -d $BLDDIR | $AWK -F' ' '{print $1}'` if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then $RM $BLDDIR/JUnit-*.ert $RM $BLDDIR/JUnit-*.txt fi } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } # where Java is installed (requires jdk1.7.x) JAVAEXE=@JAVA@ JAVAEXEFLAGS=@H4_JAVAFLAGS@ ############################################################################### # DO NOT MODIFY BELOW THIS LINE ############################################################################### # prepare for test COPY_LIBFILES_TO_BLDLIBDIR COPY_DATAFILES_TO_BLDDIR CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/org.junit.jar:"$BLDLIBDIR"/org.hamcrest.jar:"$BLDLIBDIR"/slf4j-api-2.0.16.jar:"$BLDLIBDIR"/slf4j-simple-2.0.16.jar:"$TESTJARFILE"" TEST=/usr/bin/test if [ ! -x /usr/bin/test ] then TEST=`which test` fi if $TEST -z "$CLASSPATH"; then CLASSPATH="" fi CLASSPATH=$CPATH":"$CLASSPATH export CLASSPATH if $TEST -n "$JAVAPATH" ; then PATH=$JAVAPATH":"$PATH export PATH fi if $TEST -e /bin/uname; then os_name=`/bin/uname -s` elif $TEST -e /usr/bin/uname; then os_name=`/usr/bin/uname -s` else os_name=unknown fi if $TEST -z "$LD_LIBRARY_PATH" ; then LD_LIBRARY_PATH="" fi case $os_name in *) LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH ;; esac export LD_LIBRARY_PATH echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4" TESTING JUnit-TestH4 ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4 > JUnit-TestH4.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4.ext > JUnit-TestH4.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4.txt > JUnit-TestH4.ref if diff JUnit-TestH4.out JUnit-TestH4.ref > /dev/null; then echo " PASSED JUnit-TestH4" else echo "**FAILED** JUnit-TestH4" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4.ref JUnit-TestH4.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4ANparams" TESTING JUnit-TestH4ANparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4ANparams > JUnit-TestH4ANparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4ANparams.ext > JUnit-TestH4ANparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4ANparams.txt > JUnit-TestH4ANparams.ref if diff JUnit-TestH4ANparams.out JUnit-TestH4ANparams.ref > /dev/null; then echo " PASSED JUnit-TestH4ANparams" else echo "**FAILED** JUnit-TestH4ANparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4ANparams.ref JUnit-TestH4ANparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFparams" TESTING JUnit-TestH4DFparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFparams > JUnit-TestH4DFparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFparams.ext > JUnit-TestH4DFparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFparams.txt > JUnit-TestH4DFparams.ref if diff JUnit-TestH4DFparams.out JUnit-TestH4DFparams.ref > /dev/null; then echo " PASSED JUnit-TestH4DFparams" else echo "**FAILED** JUnit-TestH4DFparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4DFparams.ref JUnit-TestH4DFparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFPparams" TESTING JUnit-TestH4DFPparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFPparams > JUnit-TestH4DFPparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFPparams.ext > JUnit-TestH4DFPparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFPparams.txt > JUnit-TestH4DFPparams.ref if diff JUnit-TestH4DFPparams.out JUnit-TestH4DFPparams.ref > /dev/null; then echo " PASSED JUnit-TestH4DFPparams" else echo "**FAILED** JUnit-TestH4DFPparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4DFPparams.ref JUnit-TestH4DFPparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFRparams" TESTING JUnit-TestH4DFRparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4DFRparams > JUnit-TestH4DFRparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFRparams.ext > JUnit-TestH4DFRparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4DFRparams.txt > JUnit-TestH4DFRparams.ref if diff JUnit-TestH4DFRparams.out JUnit-TestH4DFRparams.ref > /dev/null; then echo " PASSED JUnit-TestH4DFRparams" else echo "**FAILED** JUnit-TestH4DFRparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4DFRparams.ref JUnit-TestH4DFRparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4GRparams" TESTING JUnit-TestH4GRparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4GRparams > JUnit-TestH4GRparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4GRparams.ext > JUnit-TestH4GRparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4GRparams.txt > JUnit-TestH4GRparams.ref if diff JUnit-TestH4GRparams.out JUnit-TestH4GRparams.ref > /dev/null; then echo " PASSED JUnit-TestH4GRparams" else echo "**FAILED** JUnit-TestH4GRparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4GRparams.ref JUnit-TestH4GRparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4HCparams" TESTING JUnit-TestH4HCparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4HCparams > JUnit-TestH4HCparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4HCparams.ext > JUnit-TestH4HCparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4HCparams.txt > JUnit-TestH4HCparams.ref if diff JUnit-TestH4HCparams.out JUnit-TestH4HCparams.ref > /dev/null; then echo " PASSED JUnit-TestH4HCparams" else echo "**FAILED** JUnit-TestH4HCparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4HCparams.ref JUnit-TestH4HCparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4SDparams" TESTING JUnit-TestH4SDparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4SDparams > JUnit-TestH4SDparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4SDparams.ext > JUnit-TestH4SDparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4SDparams.txt > JUnit-TestH4SDparams.ref if diff JUnit-TestH4SDparams.out JUnit-TestH4SDparams.ref > /dev/null; then echo " PASSED JUnit-TestH4SDparams" else echo "**FAILED** JUnit-TestH4SDparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4SDparams.ref JUnit-TestH4SDparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4Vparams" TESTING JUnit-TestH4Vparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4Vparams > JUnit-TestH4Vparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4Vparams.ext > JUnit-TestH4Vparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4Vparams.txt > JUnit-TestH4Vparams.ref if diff JUnit-TestH4Vparams.out JUnit-TestH4Vparams.ref > /dev/null; then echo " PASSED JUnit-TestH4Vparams" else echo "**FAILED** JUnit-TestH4Vparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4Vparams.ref JUnit-TestH4Vparams.out |sed 's/^/ /' fi echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4VSparams" TESTING JUnit-TestH4VSparams ($RUNSERIAL $JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestH4VSparams > JUnit-TestH4VSparams.ext) # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4VSparams.ext > JUnit-TestH4VSparams.out sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ -e 's/Time: [0-9]*\.[0-9]*/Time: XXXX/' \ -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \ -e '1d; s/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \ JUnit-TestH4VSparams.txt > JUnit-TestH4VSparams.ref if diff JUnit-TestH4VSparams.out JUnit-TestH4VSparams.ref > /dev/null; then echo " PASSED JUnit-TestH4VSparams" else echo "**FAILED** JUnit-TestH4VSparams" echo " Expected result differs from actual result" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF JUnit-TestH4VSparams.txt JUnit-TestH4VSparams.ref |sed 's/^/ /' fi # Clean up temporary files/directories CLEAN_LIBFILES_AND_BLDLIBDIR CLEAN_DATAFILES_AND_BLDDIR # Report test results and exit if test $nerrors -eq 0 ; then echo "All $TESTNAME tests passed." exit $EXIT_SUCCESS else echo "$TESTNAME tests failed with $nerrors errors." exit $EXIT_FAILURE fi hdf4-hdf4.3.1/java/test/testfiles/000077500000000000000000000000001503061704500167315ustar00rootroot00000000000000hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4.txt000066400000000000000000000002341503061704500216330ustar00rootroot00000000000000JUnit version 4.13.2 .testCreateCloseOpen .testDFKNTsize .testHgetlibversion .testJ2C .testHnumber .testHishdf .testHDgetNTdesc Time: XXXX OK (7 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4ANparams.txt000066400000000000000000000012001503061704500232500ustar00rootroot00000000000000JUnit version 4.13.2 .testANendIllegalId .testANannlistNull .testANfileinfoIllegalId .testANwriteannIllegalId .testANid2tagrefNull .testANfileinfoNull .testANtagref2idIllegalId .testANget_tagrefArgument .testANendaccessIllegalId .testANget_tagrefIllegalId .testANtag2atypeIllegalId .testANwriteannNull .testANatype2tagIllegalId .testANcreatefIllegalId .testANcreateIllegalId .testANnumannIllegalId .testANid2tagrefIllegalId .testANstartIllegalId .testANfileinfoArgument .testANget_tagrefNull .testANannlistIllegalId .testANreadannIllegalId .testANselectIllegalId .testANid2tagrefArgument .testANannlenIllegalId Time: XXXX OK (25 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4DFPparams.txt000066400000000000000000000004121503061704500233670ustar00rootroot00000000000000JUnit version 4.13.2 .testDFPaddpalNullPalette .testDFPputpalNull .testDFPwriterefNull .testDFPgetpalNull .testDFPputpalNullPalette .testDFPgetpalNullPalette .testDFPaddpalNull .testDFPnpalsNull .testDFPreadrefNull .testDFPputpalArgNull Time: XXXX OK (10 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4DFRparams.txt000066400000000000000000000010541503061704500233740ustar00rootroot00000000000000JUnit version 4.13.2 .testDFR8nimagesNullFilename .testDFR8readrefIllegalRef .testDFR8getdimsNullPalette .testDFR8getpalrefNullPalRef .testDFR8setcompressNullCompInfo .testDFR8getdimsNullDimensions .testDFR8putimageNullFilename .testDFR8getimageNullFilename .testDFR8writerefNullFilename .testDFR8addimageNullImage .testDFR8getimageNullImageData .testDFR8getpalrefIllegalArgument .testDFR8getdimsIllegalArgument .testDFR8readrefNullFilename .testDFR8putimageNullImage .testDFR8addimageNullFilename .testDFR8getdimsNullFilename Time: XXXX OK (17 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4DFparams.txt000066400000000000000000000007531503061704500232570ustar00rootroot00000000000000JUnit version 4.13.2 .testDF24putimageIllegalArgument .testDF24putimageNullImage .testDF24getdimsIllegalArgument .testDF24getdimsNullArguments .testDF24readrefIllegalRef .testDF24getimageNullImageData .testDF24putimageNullFilename .testDF24getimageNullFilename .testDF24setilIllegalIl .testDF24readrefNullFilename .testDF24getdimsNullFilename .testDF24addimageNullImage .testDF24nimagesNullFilename .testDF24setcompressNullCompInfo .testDF24addimageNullFilename Time: XXXX OK (15 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4GRparams.txt000066400000000000000000000034001503061704500232660ustar00rootroot00000000000000JUnit version 4.13.2 .testGRsetattrStrNullName .testGRsetattrStrNullVals .testGRidtorefIllegalId .testGRluttorefIllegalId .testGRendIllegalId .testGRattrinfoNullArgs .testGRattrinfoNullName .testGRreadchunkIllegalId .testGRgetcompressIllegalId .testGRreqimageilIllegalId .testGRwritelutIllegalId .testGRwriteimageIllegalId .testGRsetexternalfileNull .testGRselectIllegalId .testGRfileinfoNull .testGRreadimageNullCount .testGRreadimageNullStart .testGRnametoindexIllegalId .testGRattrinfoArgumentArgs .testGRgetcompressNull .testGRstartIllegalId .testGRgetlutidIllegalId .testGRsetattrIllegalId .testGRattrinfoIllegalId .testGRsetchunkcacheIllegalId .testGRreqlutilIllegalId .testGRreadchunkNullArgument .testGRgetchunkinfoIllegalId .testGRgetnlutsIllegalId .testGRgetiminfoNullArgs .testGRgetiminfoNullDims .testGRgetiminfoNullName .testGRsetexternalfileIllegalId .testGRreadchunkNull .testGRfindattrIllegalId .testGRfileinfoArgument .testGRsetcompressNull .testGRcreateNullDims .testGRcreateNullName .testGRfindattrNull .testGRreadimageIllegalId .testGRnametoindexNull .testGRsetchunkIllegalId .testGRgetlutinfoIllegalId .testGRwriteimageNullData .testGRreftoindexIllegalId .testGRgetiminfoArgumentArgs .testGRgetiminfoArgumentDims .testGRwriteimageNullCount .testGRreadlutIllegalId .testGRwriteimageNullStart .testGRgetattrIllegalId .testGRcreateArgumentDims .testGRsetchunkNull .testGRwritelutNull .testGRgetiminfoIllegalId .testGRreadimageNullData .testGRsetattrStrIllegalId .testGRsetattrNullName .testGRsetattrNullVals .testGRreadlutNull .testGRgetlutinfoNull .testGRendaccessIllegalId .testGRgetlutinfoArgument .testGRgetattrNull .testGRgetchunkinfoNull .testGRcreateIllegalId .testGRfileinfoIllegalId .testGRsetcompressIllegalId .testGRreadchunkArgument Time: XXXX OK (70 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4HCparams.txt000066400000000000000000000001271503061704500232530ustar00rootroot00000000000000JUnit version 4.13.2 .testHCget_config_infoIllegalCoderType Time: XXXX OK (1 test) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4SDparams.txt000066400000000000000000000047631503061704500233010ustar00rootroot00000000000000JUnit version 4.13.2 .testSSDgetcalArgument .testSDsetcompressNull .testSDgetcalIllegalId .testSDsetaccesstypeIllegalId .testSDsetrangeNullMax .testSDsetrangeNullMin .testSDsetnbitdatasetIllegalId .testSDcheckemptyNull .testSDnametoindexNull .testSDgetdimscaleNull .testSDsetexternalfileNull .testSDreaddata_longIllegalId .testSDreadattrIllegalId .testSDreaddataIllegalId .testSDwritechunkNull .testSDsetdimstrsIllegalId .testSDsetchunkcacheIllegalId .testSDfindattrNull .testSDgetdatastrsNull .testSDsetattrIllegalId .testSDgetdimstrsArgument .testSDcreateNullDims .testSDcreateNullName .testSDsetcalIllegalId .testSDgetcompinfoIllegalId .testSDgetfillvalueNull .testSDattrinfoIllegalId .testSDgetinfoArgumentArgs .testSDwritedataNullCount .testSDwritedataNullStart .testSDsetrangeIllegalId .testSDsetdimscaleNull .testSDreaddata_floatIllegalId .testSDreaddataNullData .testSDfileinfoArgument .testSDsetattrNullName .testSDsetattrNullVals .testSDisdimval_bwcompIllegalId .testSDsetexternalfileIllegalId .testSDreadchunkNull .testSDsetchunkNull .testSDreaddata_doubleIllegalId .testSDgetdatastrsArgument .testSDsetdimnameNull .testSDfindattrIllegalId .testSDcreateIllegalId .testSDdiminfoIllegalId .testSDgetdimstrsIllegalId .testSDgetrangeIllegalId .testSDsetfillvalueIllegalId .testSDgetcalNullArgument .testSDwritechunkNullArgument .testSDreadchunkNullArgument .testSDendaccessIllegalId .testSDendIllegalId .testSDsetdimval_compIllegalId .testSDsetcompressIllegalId .testSDsetchunkIllegalId .testSDsetdatastrsIllegalId .testSDstartNull .testSDsetdimnameIllegalId .testSDselectIllegalId .testSDreftoindexIllegalId .testSDwritedataIllegalId .testSDreaddataNullCount .testSDreaddataNullStart .testSDgetcalNull .testSDdiminfoArgumentArgs .testSDdiminfoNullArgs .testSDdiminfoNullName .testSDgetdatastrsIllegalId .testSDsetdimscaleIllegalId .testSDfileinfoNull .testSDgetinfoNullArgs .testSDgetinfoNullDims .testSDgetinfoNullName .testSDsetblocksizeIllegalId .testSDcheckemptyIllegalId .testSDreadattrNull .testSDgetdimidIllegalId .testSDwritedataNullData .testSDgetdimstrsNull .testSDidtorefIllegalId .testSDgetrangeNullMax .testSDgetrangeNullMin .testSDsetfillvalueNull .testSDfileinfoIllegalId .testSDgetinfoIllegalId .testSDgetdimscaleIllegalId .testSDattrinfoNullArgs .testSDattrinfoNullName .testSDgetcompinfoNull .testSDnametoindexIllegalId .testSDattrinfoArgumentArgs .testSDsetfillmodeIllegalId .testSDiscoordvarIllegalId .testSDgetfillvalueIllegalId .testSDreaddata_shortIllegalId .testSDreaddata_intIllegalId Time: XXXX OK (99 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4VSparams.txt000066400000000000000000000036121503061704500233130ustar00rootroot00000000000000JUnit version 4.13.2 .testVSsizeofIllegalId .testVSattachNullAccess .testVSreadNullDataBuffer .testVSsetnumblocksIllegalId .testVSfindexNullName .testVSsetfieldsNullFields .testVSattrinfoIllegalNameArgument .testVSQueryfieldsNullFields .testVSQuerycountIllegalId .testVSQueryfieldsIllegalArgument .testVSattrinfoIllegalId .testVSsetclassIllegalId .testVSsetattrIllegalId .testVSfindclassNullClass .testVSinquireNullIArgs .testVSinquireNullSArgs .testVSsizeofNullFields .testVSsetnameIllegalId .testVSgetattrNullData .testVSsetattrNullAttributeName .testVSQueryvsizeIllegalArgument .testVSQueryinterlaceIllegalId .testVSfindattrIllegalId .testVSQuerycountNullNRecords .testVSsetexternalfileNullFilename .testVSgetclassIllegalId .testVSgetnameNullName .testVSfindNullVDataName .testVSsetexternalfileIllegalVKey .testVSfindattrNullName .testVSgetfieldsIllegalId .testVSsetblocksizeIllegalId .testVSsetattrNullAttributeName2 .testVSQueryinterlaceNullInterlace .testVSfindexIllegalId .testVSQuerycountIllegalArgument .testVSfdefineIllegalId .testVSattachIllegalId .testVSinquireIllegalIArgs .testVSinquireIllegalSArgs .testVSfexistNullFields .testVSsetattrIllegalId2 .testVSgetattrIllegalId .testVSinquireIllegalId .testVSsetnameNullVDataName .testVSgetfieldsNullFieldName .testVSQuerynameNullVDataName .testVSwriteIllegalId .testVSsetinterlaceIllegalId .testVSgetnameIllegalId .testVSQuerynameIllegalId .testVSQueryinterlaceIllegalArgument .testVSsetfieldsIllegalId .testVSQueryfieldsIllegalId .testVSsetclassNullClass .testVSQueryvsizeNullVDataSize .testVSgetclassNullClassName .testVSattachIllegalReg .testVSfindexNullIndexArray .testVSfexistIllegalId .testVSattrinfoIllegalAttributeArgs .testVSwriteNullDataBuffer .testVSappendableIllegalVKey .testVSattrinfoNullArgs .testVSattrinfoNullName .testVSQueryvsizeIllegalId .testVSQuerynameIllegalArgument .testVSfdefineNullFieldName .testVSloneNullRefArray Time: XXXX OK (69 tests) hdf4-hdf4.3.1/java/test/testfiles/JUnit-TestH4Vparams.txt000066400000000000000000000024741503061704500231750ustar00rootroot00000000000000JUnit version 4.13.2 .testVgetclassNullClassName .testVisvsIllegalId .testVsetattrNullName2 .testVinquireIllegalNEntriesArgument .testVnattrsIllegalId .testVgetnameIllegalArgument .testVfindclassNullClassName .testVattrinfoNullArgv .testVattrinfoNullName .testVattrinfoIllegalArgvArgument .testVgetattrNullData .testVsetattrNullDataByteArray .testVgettagrefsIllegalTagsArgument .testVloneNullRefArray .testVattrinfoIllegalId .testVsetclassIllegalId .testVattachNullAccess .testVloneIllegalSizeRefArray .testVgettagrefsIllegalId .testVgetnameNullName .testVgettagrefNullTagRef .testVfindNullVGroupName .testVfindattrIllegalId .testVsetattrNullName .testVgetclassIllegalId .testVsetattrIllegalId .testVflocateIllegalKey .testVsetattrNullValuesString .testVattachIllegalId .testVsetnameIllegalId .testVgettagrefsIllegalRefsArgument .testVsetnameNullName .testVsetclassNullClassName .testVattrinfoIllegalNameArgument .testVisvgIllegalId .testVinquireNullNEntries .testVflocateNullClassName .testVsetattrIllegalId2 .testVfindattrNullName .testVinquireIllegalVGroupNameArgument .testVgetclassIllegalArgument .testVinquireNullVGroupName .testVgettagrefIllegalId .testVgetattrIllegalId .testVinquireIllegalId .testVgettagrefIllegalTagRefArgument .testVgettagrefsNullRefs .testVgettagrefsNullTags .testVgetnameIllegalId Time: XXXX OK (49 tests) hdf4-hdf4.3.1/libhdf4.settings.in000066400000000000000000000027531503061704500165410ustar00rootroot00000000000000 SUMMARY OF THE HDF4 CONFIGURATION ================================= General Information: ------------------- HDF4 Version: @H4_VERSION@ Configured on: @CONFIG_DATE@ Configured by: @CONFIG_USER@ Configure mode: @CONFIG_MODE@ Host system: @host_cpu@-@host_vendor@-@host_os@ Uname information: @UNAME_INFO@ Libraries: @STATIC_SHARED@ Installation point: @prefix@ Compiling Options: ------------------ C compiler: @CC_VERSION@ CFLAGS: @CFLAGS@ CPPFLAGS: @CPPFLAGS@ Shared Libraries: @enable_shared@ Static Libraries: @enable_static@ Statically Linked Executables: @STATIC_EXEC@ LDFLAGS: @LDFLAGS@ Extra libraries: @LIBS@ Archiver: @AR@ Ranlib: @RANLIB@ Languages: ---------- Fortran: @BUILD_FORTRAN@ @HDF_BUILD_FORTRAN_TRUE@ Fortran Compiler: @F77_VERSION@ @HDF_BUILD_FORTRAN_TRUE@ FFLAGS: @FFLAGS@ Java: @HDF_JAVA@ @BUILD_JAVA_CONDITIONAL_TRUE@ Java Compiler: @JAVA_VERSION@ Features: --------- SZIP compression: @SZIP_INFO@ Export HDF4-built netCDF-2 API: @BUILD_NETCDF@ (yes: export undecorated netCDF names, no: prefix with 'sd_') HDF4-built ncdump and ncgen: @BUILD_NETCDF_TOOLS@ With deprecated public symbols: @DEPRECATED_SYMBOLS@ hdf4-hdf4.3.1/m4/000077500000000000000000000000001503061704500133475ustar00rootroot00000000000000hdf4-hdf4.3.1/m4/ax_check_class.m4000066400000000000000000000064411503061704500165500ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_class.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_CLASS # # DESCRIPTION # # AX_CHECK_CLASS tests the existence of a given Java class, either in a # jar or in a '.class' file. # # *Warning*: its success or failure can depend on a proper setting of the # CLASSPATH env. variable. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 12 AU_ALIAS([AC_CHECK_CLASS], [AX_CHECK_CLASS]) AC_DEFUN([AX_CHECK_CLASS],[ AC_REQUIRE([AX_PROG_JAVA]) ac_var_name=`echo $1 | sed 's/\./_/g'` dnl Normally I'd use a AC_CACHE_CHECK here but since the variable name is dnl dynamic I need an extra level of extraction AC_MSG_CHECKING([for $1 class]) AC_CACHE_VAL(ax_cv_class_$ac_var_name, [ AX_TRY_COMPILE_JAVA([$1], , [eval "ac_cv_class_$ac_var_name=yes"], [eval "ac_cv_class_$ac_var_name=no"]) eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`" HAVE_LAST_CLASS=$ac_var_val if test x$ac_var_val = xyes; then ifelse([$2], , :, [$2]) else ifelse([$3], , :, [$3]) fi ]) dnl for some reason the above statement didn't fall though here? dnl do scripts have variable scoping? eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" AC_MSG_RESULT($ac_var_val) ]) hdf4-hdf4.3.1/m4/ax_check_classpath.m4000066400000000000000000000050361503061704500174240ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_classpath.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_CLASSPATH # # DESCRIPTION # # AX_CHECK_CLASSPATH just displays the CLASSPATH, for the edification of # the user. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 6 AU_ALIAS([AC_CHECK_CLASSPATH], [AX_CHECK_CLASSPATH]) AC_DEFUN([AX_CHECK_CLASSPATH],[ if test "x$CLASSPATH" = x; then echo "You have no CLASSPATH, I hope it is good" else echo "You have CLASSPATH $CLASSPATH, hope it is correct" fi ]) hdf4-hdf4.3.1/m4/ax_check_java_home.m4000066400000000000000000000060551503061704500173750ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_java_home.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_JAVA_HOME # # DESCRIPTION # # Check for Sun Java (JDK / JRE) installation, where the 'java' VM is in. # If found, set environment variable JAVA_HOME = Java installation home, # else left JAVA_HOME untouch, which in most case means JAVA_HOME is # empty. # # LICENSE # # Copyright (c) 2008 Gleen Salmon # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([AC_CHECK_JAVA_HOME], [AX_CHECK_JAVA_HOME]) AC_DEFUN([AX_CHECK_JAVA_HOME], [AC_MSG_CHECKING([for JAVA_HOME]) # We used a fake loop so that we can use "break" to exit when the result # is found. while true do # If the user defined JAVA_HOME, don't touch it. test "${JAVA_HOME+set}" = set && break # On Mac OS X 10.5 and following, run /usr/libexec/java_home to get # the value of JAVA_HOME to use. # (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html). JAVA_HOME=`/usr/libexec/java_home 2>/dev/null` test x"$JAVA_HOME" != x && break # See if we can find the java executable, and compute from there. TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1` if test x$TRY_JAVA_HOME != x; then PATH=$PATH:$TRY_JAVA_HOME/bin fi AC_PATH_PROG([JAVA_PATH_NAME], [java]) if test "x$JAVA_PATH_NAME" != x; then JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[[/]]bin[[/]]java.*/\1/"` break fi AC_MSG_NOTICE([Could not compute JAVA_HOME]) break done AC_MSG_RESULT([$JAVA_HOME]) ]) hdf4-hdf4.3.1/m4/ax_check_junit.m4000066400000000000000000000042251503061704500165720ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_junit.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_JUNIT # # DESCRIPTION # # AX_CHECK_JUNIT tests the availability of the Junit testing framework, # and set some variables for conditional compilation of the test suite by # automake. # # If available, JUNIT is set to a command launching the text based user # interface of Junit, @JAVA_JUNIT@ is set to $JAVA_JUNIT and @TESTS_JUNIT@ # is set to $TESTS_JUNIT, otherwise they are set to empty values. # # You can use these variables in your Makefile.am file like this : # # # Some of the following classes are built only if junit is available # JAVA_JUNIT = Class1Test.java Class2Test.java AllJunitTests.java # # noinst_JAVA = Example1.java Example2.java @JAVA_JUNIT@ # # EXTRA_JAVA = $(JAVA_JUNIT) # # TESTS_JUNIT = AllJunitTests # # TESTS = StandaloneTest1 StandaloneTest2 @TESTS_JUNIT@ # # EXTRA_TESTS = $(TESTS_JUNIT) # # AllJunitTests : # echo "#! /bin/sh" > $@ # echo "exec @JUNIT@ my.package.name.AllJunitTests" >> $@ # chmod +x $@ # # LICENSE # # Copyright (c) 2008 Luc Maisonobe # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AU_ALIAS([AC_CHECK_JUNIT], [AX_CHECK_JUNIT]) AC_DEFUN([AX_CHECK_JUNIT],[ AC_CACHE_VAL(ac_cv_prog_JUNIT,[ AC_CHECK_CLASS(junit.textui.TestRunner) if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner' fi]) AC_MSG_CHECKING([for junit]) if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then JUNIT="$ac_cv_prog_JUNIT" JAVA_JUNIT='$(JAVA_JUNIT)' TESTS_JUNIT='$(TESTS_JUNIT)' else JUNIT= JAVA_JUNIT= TESTS_JUNIT= fi AC_MSG_RESULT($JAVA_JUNIT) AC_SUBST(JUNIT) AC_SUBST(JAVA_JUNIT) AC_SUBST(TESTS_JUNIT)]) hdf4-hdf4.3.1/m4/ax_check_rqrd_class.m4000066400000000000000000000052531503061704500176000ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_rqrd_class.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_RQRD_CLASS # # DESCRIPTION # # AX_CHECK_RQRD_CLASS tests the existence of a given Java class, either in # a jar or in a '.class' file and fails if it doesn't exist. Its success # or failure can depend on a proper setting of the CLASSPATH env. # variable. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 6 AU_ALIAS([AC_CHECK_RQRD_CLASS], [AX_CHECK_RQRD_CLASS]) AC_DEFUN([AX_CHECK_RQRD_CLASS],[ CLASS=`echo $1|sed 's/\./_/g'` AC_CHECK_CLASS($1) if test "$HAVE_LAST_CLASS" = "no"; then AC_MSG_ERROR([Required class $1 missing, exiting.]) fi ]) hdf4-hdf4.3.1/m4/ax_java_check_class.m4000066400000000000000000000066141503061704500175530ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_java_check_class.html # =========================================================================== # # SYNOPSIS # # AX_JAVA_CHECK_CLASS(,,) # # DESCRIPTION # # Test if a Java class is available. Based on AX_PROG_JAVAC_WORKS. This # version uses a cache variable which is both compiler, options and # classpath dependent (so if you switch from javac to gcj it correctly # notices and redoes the test). # # The macro tries to compile a minimal program importing . Some # newer compilers moan about the failure to use this but fail or produce a # class file anyway. All moaning is sunk to /dev/null since I only wanted # to know if the class could be imported. This is a recommended followup # to AX_CHECK_JAVA_PLUGIN with classpath appropriately adjusted. # # LICENSE # # Copyright (c) 2008 Duncan Simpson # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 12 AU_ALIAS([DPS_JAVA_CHECK_CLASS], [AX_JAVA_CHECK_CLASS]) AC_DEFUN([AX_JAVA_CHECK_CLASS],[ m4_define([cache_val],[m4_translit(ax_cv_have_java_class_$1, " ." ,"__")]) if test "x$CLASSPATH" != "x"; then xtra=" with classpath ${CLASSPATH}" xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'` xopts="-classpath $xopts" else xtra=""; xopts=""; fi cache_var="cache_val"AS_TR_SH([_Jc_${JAVAC}_Cp_${CLASSPATH}]) AC_CACHE_CHECK([if the $1 class is available$xtra], [$cache_var], [ JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* [#]xline __oline__ "configure" */ import $1; public class Test { } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $xopts $JAVA_TEST) >/dev/null 2>&1; then eval "${cache_var}=yes" else eval "${cache_var}=no" echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat $JAVA_TEST >&AS_MESSAGE_LOG_FD fi rm -f $JAVA_TEST $CLASS_TEST ]) if eval 'test "x$'${cache_var}'" = "xyes"'; then $2 true; else $3 false; fi]) hdf4-hdf4.3.1/m4/ax_java_options.m4000066400000000000000000000033411503061704500167760ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_java_options.html # =========================================================================== # # SYNOPSIS # # AX_JAVA_OPTIONS # # DESCRIPTION # # AX_JAVA_OPTIONS adds configure command line options used for Java m4 # macros. This Macro is optional. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Devin Weaver # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 7 AU_ALIAS([AC_JAVA_OPTIONS], [AX_JAVA_OPTIONS]) AC_DEFUN([AX_JAVA_OPTIONS],[ AC_ARG_WITH(java-prefix, [ --with-java-prefix=PFX prefix where Java runtime is installed (optional)]) AC_ARG_WITH(javac-flags, [ --with-javac-flags=FLAGS flags to pass to the Java compiler (optional)]) AC_ARG_WITH(java-flags, [ --with-java-flags=FLAGS flags to pass to the Java VM (optional)]) JAVAPREFIX=$with_java_prefix JAVACFLAGS=$with_javac_flags JAVAFLAGS=$with_java_flags AC_SUBST(JAVAPREFIX)dnl AC_SUBST(JAVACFLAGS)dnl AC_SUBST(JAVAFLAGS)dnl AC_SUBST(JAVA)dnl AC_SUBST(JAVAC)dnl ]) hdf4-hdf4.3.1/m4/ax_jni_include_dir.m4000066400000000000000000000122761503061704500174320ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html # =========================================================================== # # SYNOPSIS # # AX_JNI_INCLUDE_DIR # # DESCRIPTION # # AX_JNI_INCLUDE_DIR finds include directories needed for compiling # programs using the JNI interface. # # JNI include directories are usually in the Java distribution. This is # deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in # that order. When this macro completes, a list of directories is left in # the variable JNI_INCLUDE_DIRS. # # Example usage follows: # # AX_JNI_INCLUDE_DIR # # for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS # do # CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR" # done # # If you want to force a specific compiler: # # - at the configure.in level, set JAVAC=yourcompiler before calling # AX_JNI_INCLUDE_DIR # # - at the configure level, setenv JAVAC # # This macro depends on AC_CANONICAL_HOST which requires that config.guess # and config.sub be distributed along with the source code. See autoconf # manual for details. # # Note: This macro can work with the autoconf M4 macros for Java programs. # This particular macro is not part of the original set of macros. # # LICENSE # # Copyright (c) 2008 Don Anderson # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 15 AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR]) AC_DEFUN([AX_JNI_INCLUDE_DIR],[ AC_REQUIRE([AC_CANONICAL_HOST]) JNI_INCLUDE_DIRS="" if test "x$JAVA_HOME" != x; then _JTOPDIR="$JAVA_HOME" else if test "x$JAVAC" = x; then JAVAC=javac fi AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no]) if test "x$_ACJNI_JAVAC" = xno; then AC_MSG_ERROR([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME]) fi _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC") _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` fi case "$host_os" in darwin*) # Apple Java headers are inside the Xcode bundle. major_macos_version=$(sw_vers -productVersion | sed -n -e 's/^\(@<:@0-9@:>@*\).@<:@0-9@:>@*.@<:@0-9@:>@*/\1/p') if @<:@ "$major_macos_version" -gt "10" @:>@; then _JTOPDIR="$(/usr/libexec/java_home)" _JINC="$_JTOPDIR/include" else macos_version=$(sw_vers -productVersion | sed -n -e 's/^@<:@0-9@:>@*.\(@<:@0-9@:>@*\).@<:@0-9@:>@*/\1/p') if @<:@ "$macos_version" -gt "7" @:>@; then _JTOPDIR="$(xcrun --show-sdk-path)/System/Library/Frameworks/JavaVM.framework" _JINC="$_JTOPDIR/Headers" else _JTOPDIR="/System/Library/Frameworks/JavaVM.framework" _JINC="$_JTOPDIR/Headers" fi fi ;; *) _JINC="$_JTOPDIR/include";; esac _AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR]) _AS_ECHO_LOG([_JINC=$_JINC]) # On Mac OS X 10.6.4, jni.h is a symlink: # /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h # -> ../../CurrentJDK/Headers/jni.h. AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path, [ if test -f "$_JINC/jni.h"; then ac_cv_jni_header_path="$_JINC" JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" else _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` if test -f "$_JTOPDIR/include/jni.h"; then ac_cv_jni_header_path="$_JTOPDIR/include" JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" else ac_cv_jni_header_path=none fi fi ]) # get the likely subdirectories for system specific java includes case "$host_os" in bsdi*) _JNI_INC_SUBDIRS="bsdos";; freebsd*) _JNI_INC_SUBDIRS="freebsd";; darwin*) _JNI_INC_SUBDIRS="darwin";; linux*) _JNI_INC_SUBDIRS="linux genunix";; osf*) _JNI_INC_SUBDIRS="alpha";; solaris*) _JNI_INC_SUBDIRS="solaris";; mingw*) _JNI_INC_SUBDIRS="win32";; cygwin*) _JNI_INC_SUBDIRS="win32";; *) _JNI_INC_SUBDIRS="genunix";; esac if test "x$ac_cv_jni_header_path" != "xnone"; then # add any subdirectories that are present for JINCSUBDIR in $_JNI_INC_SUBDIRS do if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR" fi done fi ]) # _ACJNI_FOLLOW_SYMLINKS # Follows symbolic links on , # finally setting variable _ACJNI_FOLLOWED # ---------------------------------------- AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[ # find the include directory relative to the javac executable _cur="$1" while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do AC_MSG_CHECKING([symlink for $_cur]) _slink=`ls -ld "$_cur" | sed 's/.* -> //'` case "$_slink" in /*) _cur="$_slink";; # 'X' avoids triggering unwanted echo options. *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";; esac AC_MSG_RESULT([$_cur]) done _ACJNI_FOLLOWED="$_cur" ])# _ACJNI hdf4-hdf4.3.1/m4/ax_prog_doxygen.m4000066400000000000000000000500421503061704500170060ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html # =========================================================================== # # SYNOPSIS # # DX_INIT_DOXYGEN(PROJECT-NAME, [DOXYFILE-PATH], [OUTPUT-DIR], ...) # DX_DOXYGEN_FEATURE(ON|OFF) # DX_DOT_FEATURE(ON|OFF) # DX_HTML_FEATURE(ON|OFF) # DX_CHM_FEATURE(ON|OFF) # DX_CHI_FEATURE(ON|OFF) # DX_MAN_FEATURE(ON|OFF) # DX_RTF_FEATURE(ON|OFF) # DX_XML_FEATURE(ON|OFF) # DX_PDF_FEATURE(ON|OFF) # DX_PS_FEATURE(ON|OFF) # # DESCRIPTION # # The DX_*_FEATURE macros control the default setting for the given # Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for # generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML # help (for MS users), 'CHI' for generating a separate .chi file by the # .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate # output formats. The environment variable DOXYGEN_PAPER_SIZE may be # specified to override the default 'a4wide' paper size. # # By default, HTML, PDF and PS documentation is generated as this seems to # be the most popular and portable combination. MAN pages created by # Doxygen are usually problematic, though by picking an appropriate subset # and doing some massaging they might be better than nothing. CHM and RTF # are specific for MS (note that you can't generate both HTML and CHM at # the same time). The XML is rather useless unless you apply specialized # post-processing to it. # # The macros mainly control the default state of the feature. The use can # override the default by specifying --enable or --disable. The macros # ensure that contradictory flags are not given (e.g., # --enable-doxygen-html and --enable-doxygen-chm, # --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each # feature will be automatically disabled (with a warning) if the required # programs are missing. # # Once all the feature defaults have been specified, call DX_INIT_DOXYGEN # with the following parameters: a one-word name for the project for use # as a filename base etc., an optional configuration file name (the # default is '$(srcdir)/Doxyfile', the same as Doxygen's default), and an # optional output directory name (the default is 'doxygen-doc'). To run # doxygen multiple times for different configuration files and output # directories provide more parameters: the second, forth, sixth, etc # parameter are configuration file names and the third, fifth, seventh, # etc parameter are output directories. No checking is done to catch # duplicates. # # Automake Support # # The DX_RULES substitution can be used to add all needed rules to the # Makefile. Note that this is a substitution without being a variable: # only the @DX_RULES@ syntax will work. # # The provided targets are: # # doxygen-doc: Generate all doxygen documentation. # # doxygen-run: Run doxygen, which will generate some of the # documentation (HTML, CHM, CHI, MAN, RTF, XML) # but will not do the post processing required # for the rest of it (PS, PDF). # # doxygen-ps: Generate doxygen PostScript documentation. # # doxygen-pdf: Generate doxygen PDF documentation. # # Note that by default these are not integrated into the automake targets. # If doxygen is used to generate man pages, you can achieve this # integration by setting man3_MANS to the list of man pages generated and # then adding the dependency: # # $(man3_MANS): doxygen-doc # # This will cause make to run doxygen and generate all the documentation. # # The following variable is intended for use in Makefile.am: # # DX_CLEANFILES = everything to clean. # # Then add this variable to MOSTLYCLEANFILES. # # LICENSE # # Copyright (c) 2009 Oren Ben-Kiki # Copyright (c) 2015 Olaf Mandel # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 23 ## ----------## ## Defaults. ## ## ----------## DX_ENV="" AC_DEFUN([DX_FEATURE_doc], ON) AC_DEFUN([DX_FEATURE_dot], OFF) AC_DEFUN([DX_FEATURE_man], OFF) AC_DEFUN([DX_FEATURE_html], ON) AC_DEFUN([DX_FEATURE_chm], OFF) AC_DEFUN([DX_FEATURE_chi], OFF) AC_DEFUN([DX_FEATURE_rtf], OFF) AC_DEFUN([DX_FEATURE_xml], OFF) AC_DEFUN([DX_FEATURE_pdf], ON) AC_DEFUN([DX_FEATURE_ps], ON) ## --------------- ## ## Private macros. ## ## --------------- ## # DX_ENV_APPEND(VARIABLE, VALUE) # ------------------------------ # Append VARIABLE="VALUE" to DX_ENV for invoking doxygen and add it # as a substitution (but not a Makefile variable). The substitution # is skipped if the variable name is VERSION. AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])dnl m4_if([$1], [VERSION], [], [AC_SUBST([$1], [$2])dnl AM_SUBST_NOTMAKE([$1])])dnl ]) # DX_DIRNAME_EXPR # --------------- # Expand into a shell expression prints the directory part of a path. AC_DEFUN([DX_DIRNAME_EXPR], [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) # DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) # ------------------------------------- # Expands according to the M4 (static) status of the feature. AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) # DX_REQUIRE_PROG(VARIABLE, PROGRAM) # ---------------------------------- # Require the specified program to be found for the DX_CURRENT_FEATURE to work. AC_DEFUN([DX_REQUIRE_PROG], [ AC_PATH_TOOL([$1], [$2]) if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) fi ]) # DX_TEST_FEATURE(FEATURE) # ------------------------ # Expand to a shell expression testing whether the feature is active. AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) # DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) # ------------------------------------------------- # Verify that a required features has the right state before trying to turn on # the DX_CURRENT_FEATURE. AC_DEFUN([DX_CHECK_DEPEND], [ test "$DX_FLAG_$1" = "$2" \ || AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, requires, contradicts) doxygen-DX_CURRENT_FEATURE]) ]) # DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) # ---------------------------------------------------------- # Turn off the DX_CURRENT_FEATURE if the required feature is off. AC_DEFUN([DX_CLEAR_DEPEND], [ test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) ]) # DX_FEATURE_ARG(FEATURE, DESCRIPTION, # CHECK_DEPEND, CLEAR_DEPEND, # REQUIRE, DO-IF-ON, DO-IF-OFF) # -------------------------------------------- # Parse the command-line option controlling a feature. CHECK_DEPEND is called # if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), # otherwise CLEAR_DEPEND is called to turn off the default state if a required # feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional # requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and # DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. AC_DEFUN([DX_ARG_ABLE], [ AC_DEFUN([DX_CURRENT_FEATURE], [$1]) AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) AC_ARG_ENABLE(doxygen-$1, [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], [--enable-doxygen-$1]), DX_IF_FEATURE([$1], [don't $2], [$2]))], [ case "$enableval" in #( y|Y|yes|Yes|YES) AC_SUBST([DX_FLAG_$1], 1) $3 ;; #( n|N|no|No|NO) AC_SUBST([DX_FLAG_$1], 0) ;; #( *) AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) ;; esac ], [ AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) $4 ]) if DX_TEST_FEATURE([$1]); then $5 : fi if DX_TEST_FEATURE([$1]); then $6 : else $7 : fi ]) ## -------------- ## ## Public macros. ## ## -------------- ## # DX_XXX_FEATURE(DEFAULT_STATE) # ----------------------------- AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) # DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR], ...) # -------------------------------------------------------------- # PROJECT also serves as the base name for the documentation files. # The default CONFIG-FILE is "$(srcdir)/Doxyfile" and OUTPUT-DOC-DIR is # "doxygen-doc". # More arguments are interpreted as interleaved CONFIG-FILE and # OUTPUT-DOC-DIR values. AC_DEFUN([DX_INIT_DOXYGEN], [ # Files: AC_SUBST([DX_PROJECT], [$1]) AC_SUBST([DX_CONFIG], ['ifelse([$2], [], [$(srcdir)/Doxyfile], [$2])']) AC_SUBST([DX_DOCDIR], ['ifelse([$3], [], [doxygen-doc], [$3])']) m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 4, m4_count($@), 2, [AC_SUBST([DX_CONFIG]m4_eval(DX_i[/2]), 'm4_default_nblank_quoted(m4_argn(DX_i, $@), [$(srcdir)/Doxyfile])')])])dnl m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 5, m4_count($@,), 2, [AC_SUBST([DX_DOCDIR]m4_eval([(]DX_i[-1)/2]), 'm4_default_nblank_quoted(m4_argn(DX_i, $@), [doxygen-doc])')])])dnl m4_define([DX_loop], m4_dquote(m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 4, m4_count($@), 2, [, m4_eval(DX_i[/2])])], [])))dnl # Environment variables used inside doxygen.cfg: DX_ENV_APPEND(SRCDIR, $srcdir) DX_ENV_APPEND(PROJECT, $DX_PROJECT) DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) # Doxygen itself: DX_ARG_ABLE(doc, [generate any doxygen documentation], [], [], [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) DX_REQUIRE_PROG([DX_PERL], perl)], [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) # Dot for graphics: DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_DOT], dot)], [DX_ENV_APPEND(HAVE_DOT, YES) DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], [DX_ENV_APPEND(HAVE_DOT, NO)]) # Man pages generation: DX_ARG_ABLE(man, [generate doxygen manual pages], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_MAN, YES)], [DX_ENV_APPEND(GENERATE_MAN, NO)]) # RTF file generation: DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_RTF, YES)], [DX_ENV_APPEND(GENERATE_RTF, NO)]) # XML file generation: DX_ARG_ABLE(xml, [generate doxygen XML documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_XML, YES)], [DX_ENV_APPEND(GENERATE_XML, NO)]) # (Compressed) HTML help generation: DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_HHC], hhc)], [DX_ENV_APPEND(HHC_PATH, $DX_HHC) DX_ENV_APPEND(GENERATE_HTML, YES) DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) # Separate CHI file generation. DX_ARG_ABLE(chi, [generate doxygen separate compressed HTML help index file], [DX_CHECK_DEPEND(chm, 1)], [DX_CLEAR_DEPEND(chm, 1)], [], [DX_ENV_APPEND(GENERATE_CHI, YES)], [DX_ENV_APPEND(GENERATE_CHI, NO)]) # Plain HTML pages generation: DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], [], [DX_ENV_APPEND(GENERATE_HTML, YES)], [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) # PostScript file generation: DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_LATEX], latex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_DVIPS], dvips) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # PDF file generation: DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # LaTeX generation for PS and/or PDF: if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then DX_ENV_APPEND(GENERATE_LATEX, YES) else DX_ENV_APPEND(GENERATE_LATEX, NO) fi # Paper size for PS and/or PDF: AC_ARG_VAR(DOXYGEN_PAPER_SIZE, [a4wide (default), a4, letter, legal or executive]) case "$DOXYGEN_PAPER_SIZE" in #( "") AC_SUBST(DOXYGEN_PAPER_SIZE, "") ;; #( a4wide|a4|letter|legal|executive) DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) ;; #( *) AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) ;; esac # Rules: AS_IF([[test $DX_FLAG_html -eq 1]], [[DX_SNIPPET_html="## ------------------------------- ## ## Rules specific for HTML output. ## ## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/html]])[ "]], [[DX_SNIPPET_html=""]]) AS_IF([[test $DX_FLAG_chi -eq 1]], [[DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).chi]])["]], [[DX_SNIPPET_chi=""]]) AS_IF([[test $DX_FLAG_chm -eq 1]], [[DX_SNIPPET_chm="## ------------------------------ ## ## Rules specific for CHM output. ## ## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/chm]])[\ ${DX_SNIPPET_chi} "]], [[DX_SNIPPET_chm=""]]) AS_IF([[test $DX_FLAG_man -eq 1]], [[DX_SNIPPET_man="## ------------------------------ ## ## Rules specific for MAN output. ## ## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/man]])[ "]], [[DX_SNIPPET_man=""]]) AS_IF([[test $DX_FLAG_rtf -eq 1]], [[DX_SNIPPET_rtf="## ------------------------------ ## ## Rules specific for RTF output. ## ## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/rtf]])[ "]], [[DX_SNIPPET_rtf=""]]) AS_IF([[test $DX_FLAG_xml -eq 1]], [[DX_SNIPPET_xml="## ------------------------------ ## ## Rules specific for XML output. ## ## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/xml]])[ "]], [[DX_SNIPPET_xml=""]]) AS_IF([[test $DX_FLAG_ps -eq 1]], [[DX_SNIPPET_ps="## ----------------------------- ## ## Rules specific for PS output. ## ## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps]])[ DX_PS_GOAL = doxygen-ps doxygen-ps: \$(DX_CLEAN_PS) ]m4_foreach([DX_i], [DX_loop], [[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ \$(DX_LATEX) refman.tex; \\ \$(DX_MAKEINDEX) refman.idx; \\ \$(DX_LATEX) refman.tex; \\ countdown=5; \\ while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ refman.log > /dev/null 2>&1 \\ && test \$\$countdown -gt 0; do \\ \$(DX_LATEX) refman.tex; \\ countdown=\`expr \$\$countdown - 1\`; \\ done; \\ \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi ]])["]], [[DX_SNIPPET_ps=""]]) AS_IF([[test $DX_FLAG_pdf -eq 1]], [[DX_SNIPPET_pdf="## ------------------------------ ## ## Rules specific for PDF output. ## ## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf]])[ DX_PDF_GOAL = doxygen-pdf doxygen-pdf: \$(DX_CLEAN_PDF) ]m4_foreach([DX_i], [DX_loop], [[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ \$(DX_PDFLATEX) refman.tex; \\ \$(DX_MAKEINDEX) refman.idx; \\ \$(DX_PDFLATEX) refman.tex; \\ countdown=5; \\ while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ refman.log > /dev/null 2>&1 \\ && test \$\$countdown -gt 0; do \\ \$(DX_PDFLATEX) refman.tex; \\ countdown=\`expr \$\$countdown - 1\`; \\ done; \\ mv refman.pdf ../\$(PACKAGE).pdf ]])["]], [[DX_SNIPPET_pdf=""]]) AS_IF([[test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1]], [[DX_SNIPPET_latex="## ------------------------------------------------- ## ## Rules specific for LaTeX (shared for PS and PDF). ## ## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) _DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) _DX_v_LATEX_0 = @echo \" LATEX \" \$][@; DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex]dnl m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ \$(DX_DOCDIR]DX_i[)/latex]])[ "]], [[DX_SNIPPET_latex=""]]) AS_IF([[test $DX_FLAG_doc -eq 1]], [[DX_SNIPPET_doc="## --------------------------------- ## ## Format-independent Doxygen rules. ## ## --------------------------------- ## ${DX_SNIPPET_html}\ ${DX_SNIPPET_chm}\ ${DX_SNIPPET_man}\ ${DX_SNIPPET_rtf}\ ${DX_SNIPPET_xml}\ ${DX_SNIPPET_ps}\ ${DX_SNIPPET_pdf}\ ${DX_SNIPPET_latex}\ DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) _DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) _DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; .PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) .INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) doxygen-run:]m4_foreach([DX_i], [DX_loop], [[ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag]])[ doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) ]m4_foreach([DX_i], [DX_loop], [[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag: \$(DX_CONFIG]DX_i[) \$(pkginclude_HEADERS) \$(A""M_V_at)rm -rf \$(DX_DOCDIR]DX_i[) \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR]DX_i[) \$(DX_DOXYGEN) \$(DX_CONFIG]DX_i[) \$(A""M_V_at)echo Timestamp >\$][@ ]])dnl [DX_CLEANFILES = \\] m4_foreach([DX_i], [DX_loop], [[ \$(DX_DOCDIR]DX_i[)/doxygen_sqlite3.db \\ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag \\ ]])dnl [ -r \\ \$(DX_CLEAN_HTML) \\ \$(DX_CLEAN_CHM) \\ \$(DX_CLEAN_CHI) \\ \$(DX_CLEAN_MAN) \\ \$(DX_CLEAN_RTF) \\ \$(DX_CLEAN_XML) \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)"]], [[DX_SNIPPET_doc=""]]) AC_SUBST([DX_RULES], ["${DX_SNIPPET_doc}"])dnl AM_SUBST_NOTMAKE([DX_RULES]) #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV ]) hdf4-hdf4.3.1/m4/ax_prog_jar.m4000066400000000000000000000033411503061704500161050ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_jar.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAR # # DESCRIPTION # # AX_PROG_JAR tests for an existing jar program. It uses the environment # variable JAR then tests in sequence various common jar programs. # # If you want to force a specific compiler: # # - at the configure.in level, set JAR=yourcompiler before calling # AX_PROG_JAR # # - at the configure level, setenv JAR # # You can use the JAR variable in your Makefile.in, with @JAR@. # # Note: This macro depends on the autoconf M4 macros for Java programs. It # is VERY IMPORTANT that you download that whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. # # The general documentation of those macros, as well as the sample # configure.in, is included in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Egon Willighagen # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 8 AU_ALIAS([AC_PROG_JAR], [AX_PROG_JAR]) AC_DEFUN([AX_PROG_JAR],[ AS_IF([test "x$JAVAPREFIX" = x], [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar])], [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar], [], [$JAVAPREFIX/bin])]) test "x$JAR" = x && AC_MSG_ERROR([no acceptable jar program found in \$PATH]) AC_PROVIDE([$0])dnl ]) hdf4-hdf4.3.1/m4/ax_prog_java.m4000066400000000000000000000104221503061704500162500ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_java.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVA # # DESCRIPTION # # Here is a summary of the main macros: # # AX_PROG_JAVAC: finds a Java compiler. # # AX_PROG_JAVA: finds a Java virtual machine. # # AX_CHECK_CLASS: finds if we have the given class (beware of CLASSPATH!). # # AX_CHECK_RQRD_CLASS: finds if we have the given class and stops # otherwise. # # AX_TRY_COMPILE_JAVA: attempt to compile user given source. # # AX_TRY_RUN_JAVA: attempt to compile and run user given source. # # AX_JAVA_OPTIONS: adds Java configure options. # # AX_PROG_JAVA tests an existing Java virtual machine. It uses the # environment variable JAVA then tests in sequence various common Java # virtual machines. For political reasons, it starts with the free ones. # You *must* call [AX_PROG_JAVAC] before. # # If you want to force a specific VM: # # - at the configure.in level, set JAVA=yourvm before calling AX_PROG_JAVA # # (but after AC_INIT) # # - at the configure level, setenv JAVA # # You can use the JAVA variable in your Makefile.in, with @JAVA@. # # *Warning*: its success or failure can depend on a proper setting of the # CLASSPATH env. variable. # # TODO: allow to exclude virtual machines (rationale: most Java programs # cannot run with some VM like kaffe). # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. # # A Web page, with a link to the latest CVS snapshot is at # . # # This is a sample configure.in Process this file with autoconf to produce # a configure script. # # AC_INIT(UnTag.java) # # dnl Checks for programs. # AC_CHECK_CLASSPATH # AX_PROG_JAVAC # AX_PROG_JAVA # # dnl Checks for classes # AX_CHECK_RQRD_CLASS(org.xml.sax.Parser) # AX_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver) # # AC_OUTPUT(Makefile) # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 10 AU_ALIAS([AC_PROG_JAVA], [AX_PROG_JAVA]) AC_DEFUN([AX_PROG_JAVA],[ m4_define([m4_ax_prog_java_list], [kaffe java])dnl AS_IF([test "x$JAVAPREFIX" = x], [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list])], [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list], [], [$JAVAPREFIX/bin])]) test x$JAVA = x && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH]) m4_undefine([m4_ax_prog_java_list])dnl AX_PROG_JAVA_WORKS AC_PROVIDE([$0])dnl ]) hdf4-hdf4.3.1/m4/ax_prog_java_cc.m4000066400000000000000000000071541503061704500167250ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_java_cc.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVA_CC # # DESCRIPTION # # Finds the appropriate java compiler on your path. By preference the java # compiler is gcj, then jikes then javac. # # The macro can take one argument specifying a space separated list of # java compiler names. # # For example: # # AX_PROG_JAVA_CC(javac, gcj) # # The macro also sets the compiler options variable: JAVA_CC_OPTS to # something sensible: # # - for GCJ it sets it to: @GCJ_OPTS@ # (if GCJ_OPTS is not yet defined then it is set to "-C") # # - no other compiler has applicable options yet # # Here's an example configure.in: # # AC_INIT(Makefile.in) # AX_PROG_JAVA_CC() # AC_OUTPUT(Makefile) # dnl End. # # And here's the start of the Makefile.in: # # PROJECT_ROOT := @srcdir@ # # Tool definitions. # JAVAC := @JAVA_CC@ # JAVAC_OPTS := @JAVA_CC_OPTS@ # JAR_TOOL := @jar_tool@ # # LICENSE # # Copyright (c) 2008 Nic Ferrier # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 # AX_PROG_JAVA_CC([COMPILER ...]) # -------------------------- # COMPILER ... is a space separated list of java compilers to search for. # This just gives the user an opportunity to specify an alternative # search list for the java compiler. AU_ALIAS([AC_PROG_JAVA_CC], [AX_PROG_JAVA_CC]) AC_DEFUN([AX_PROG_JAVA_CC], [AC_ARG_VAR([JAVA_CC], [java compiler command])dnl AC_ARG_VAR([JAVA_CC_FLAGS], [java compiler flags])dnl m4_ifval([$1], [AC_CHECK_TOOLS(JAVA_CC, [$1])], [AC_CHECK_TOOL(JAVA_CC, gcj) if test -z "$JAVA_CC"; then AC_CHECK_TOOL(JAVA_CC, javac) fi if test -z "$JAVA_CC"; then AC_CHECK_TOOL(JAVA_CC, jikes) fi ]) if test "$JAVA_CC" = "gcj"; then if test "$GCJ_OPTS" = ""; then AC_SUBST(GCJ_OPTS,-C) fi AC_SUBST(JAVA_CC_OPTS, @GCJ_OPTS@, [Define the compilation options for GCJ]) fi test -z "$JAVA_CC" && AC_MSG_ERROR([no acceptable java compiler found in \$PATH]) ])# AX_PROG_JAVA_CC hdf4-hdf4.3.1/m4/ax_prog_java_works.m4000066400000000000000000000070121503061704500174760ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_java_works.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVA_WORKS # # DESCRIPTION # # Internal use ONLY. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 11 AU_ALIAS([AC_PROG_JAVA_WORKS], [AX_PROG_JAVA_WORKS]) AC_DEFUN([AX_PROG_JAVA_WORKS], [ if test x$ac_cv_prog_javac_works = xno; then AC_MSG_ERROR([Cannot compile java source. $JAVAC does not work properly]) fi if test x$ac_cv_prog_javac_works = x; then AX_PROG_JAVAC fi AC_CACHE_CHECK(if $JAVA works, ac_cv_prog_java_works, [ JAVA_TEST=Test.java CLASS_TEST=Test.class TEST=Test changequote(, )dnl cat << \EOF > $JAVA_TEST /* [#]line __oline__ "configure" */ public class Test { public static void main (String args[]) { System.exit (0); } } EOF changequote([, ])dnl if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) && test -s $CLASS_TEST; then : else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat $JAVA_TEST >&AS_MESSAGE_LOG_FD AC_MSG_ERROR(The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)) fi if AC_TRY_COMMAND($JAVA -classpath . $JAVAFLAGS $TEST) >/dev/null 2>&1; then ac_cv_prog_java_works=yes else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat $JAVA_TEST >&AS_MESSAGE_LOG_FD AC_MSG_ERROR(The Java VM $JAVA failed (see config.log, check the CLASSPATH?)) fi rm -f $JAVA_TEST $CLASS_TEST ]) AC_PROVIDE([$0])dnl ] ) hdf4-hdf4.3.1/m4/ax_prog_javac.m4000066400000000000000000000065761503061704500164320ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_javac.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVAC # # DESCRIPTION # # AX_PROG_JAVAC tests an existing Java compiler. It uses the environment # variable JAVAC then tests in sequence various common Java compilers. For # political reasons, it starts with the free ones. # # If you want to force a specific compiler: # # - at the configure.in level, set JAVAC=yourcompiler before calling # AX_PROG_JAVAC # # - at the configure level, setenv JAVAC # # You can use the JAVAC variable in your Makefile.in, with @JAVAC@. # # *Warning*: its success or failure can depend on a proper setting of the # CLASSPATH env. variable. # # TODO: allow to exclude compilers (rationale: most Java programs cannot # compile with some compilers like guavac). # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AU_ALIAS([AC_PROG_JAVAC], [AX_PROG_JAVAC]) AC_DEFUN([AX_PROG_JAVAC],[ m4_define([m4_ax_prog_javac_list],["gcj -C" guavac jikes javac])dnl AS_IF([test "x$JAVAPREFIX" = x], [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list])], [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list], [], [$JAVAPREFIX/bin])]) m4_undefine([m4_ax_prog_javac_list])dnl test "x$JAVAC" = x && AC_MSG_ERROR([no acceptable Java compiler found in \$PATH]) AX_PROG_JAVAC_WORKS AC_PROVIDE([$0])dnl ]) hdf4-hdf4.3.1/m4/ax_prog_javac_works.m4000066400000000000000000000055261503061704500176510ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_javac_works.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVAC_WORKS # # DESCRIPTION # # Internal use ONLY. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Stephane Bortzmeyer # # 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. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([AC_PROG_JAVAC_WORKS], [AX_PROG_JAVAC_WORKS]) AC_DEFUN([AX_PROG_JAVAC_WORKS],[ AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [ JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* [#]line __oline__ "configure" */ public class Test { } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else AC_MSG_ERROR([The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)]) echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat $JAVA_TEST >&AS_MESSAGE_LOG_FD fi rm -f $JAVA_TEST $CLASS_TEST ]) AC_PROVIDE([$0])dnl ]) hdf4-hdf4.3.1/m4/ax_prog_javadoc.m4000066400000000000000000000035011503061704500167360ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_javadoc.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVADOC # # DESCRIPTION # # AX_PROG_JAVADOC tests for an existing javadoc generator. It uses the # environment variable JAVADOC then tests in sequence various common # javadoc generator. # # If you want to force a specific compiler: # # - at the configure.in level, set JAVADOC=yourgenerator before calling # AX_PROG_JAVADOC # # - at the configure level, setenv JAVADOC # # You can use the JAVADOC variable in your Makefile.in, with @JAVADOC@. # # Note: This macro depends on the autoconf M4 macros for Java programs. It # is VERY IMPORTANT that you download that whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. # # The general documentation of those macros, as well as the sample # configure.in, is included in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Egon Willighagen # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 9 AU_ALIAS([AC_PROG_JAVADOC], [AX_PROG_JAVADOC]) AC_DEFUN([AX_PROG_JAVADOC],[ AS_IF([test "x$JAVAPREFIX" = x], [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc])], [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc], [], [$JAVAPREFIX/bin])]) test "x$JAVADOC" = x && AC_MSG_ERROR([no acceptable javadoc generator found in \$PATH]) AC_PROVIDE([$0])dnl ]) hdf4-hdf4.3.1/m4/ax_prog_javah.m4000066400000000000000000000044331503061704500164250ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_javah.html # =========================================================================== # # SYNOPSIS # # AX_PROG_JAVAH # # DESCRIPTION # # AX_PROG_JAVAH tests the availability of the javah header generator and # looks for the jni.h header file. If available, JAVAH is set to the full # path of javah and CPPFLAGS is updated accordingly. # # LICENSE # # Copyright (c) 2008 Luc Maisonobe # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 AU_ALIAS([AC_PROG_JAVAH], [AX_PROG_JAVAH]) AC_DEFUN([AX_PROG_JAVAH],[ AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CPP])dnl AC_PATH_PROG(JAVAH,javah) AS_IF([test -n "$ac_cv_path_JAVAH"], [ AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include ]])],[],[ ac_save_CPPFLAGS="$CPPFLAGS" _ACJAVAH_FOLLOW_SYMLINKS("$ac_cv_path_JAVAH") ax_prog_javah_bin_dir=`AS_DIRNAME([$_ACJAVAH_FOLLOWED])` ac_dir="`AS_DIRNAME([$ax_prog_javah_bin_dir])`/include" AS_CASE([$build_os], [cygwin*|mingw*], [ac_machdep=win32], [ac_machdep=`AS_ECHO($build_os) | sed 's,[[-0-9]].*,,'`]) CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep" AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include ]])], [ac_save_CPPFLAGS="$CPPFLAGS"], [AC_MSG_WARN([unable to include ])]) CPPFLAGS="$ac_save_CPPFLAGS"]) ]) ]) AC_DEFUN([_ACJAVAH_FOLLOW_SYMLINKS],[ # find the include directory relative to the javac executable _cur="$1" while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do AC_MSG_CHECKING([symlink for $_cur]) _slink=`ls -ld "$_cur" | sed 's/.* -> //'` case "$_slink" in /*) _cur="$_slink";; # 'X' avoids triggering unwanted echo options. *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";; esac AC_MSG_RESULT([$_cur]) done _ACJAVAH_FOLLOWED="$_cur" ]) hdf4-hdf4.3.1/m4/ax_try_compile_java.m4000066400000000000000000000033731503061704500176360ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_try_compile_java.html # =========================================================================== # # SYNOPSIS # # AX_TRY_COMPILE_JAVA # # DESCRIPTION # # AX_TRY_COMPILE_JAVA attempt to compile user given source. # # *Warning*: its success or failure can depend on a proper setting of the # CLASSPATH env. variable. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Devin Weaver # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 10 AU_ALIAS([AC_TRY_COMPILE_JAVA], [AX_TRY_COMPILE_JAVA]) AC_DEFUN([AX_TRY_COMPILE_JAVA],[ AC_REQUIRE([AX_PROG_JAVAC])dnl cat << \EOF > Test.java /* [#]line __oline__ "configure" */ ifelse([$1], , , [import $1;]) public class Test { [$2] } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class then dnl Don't remove the temporary files here, so they can be examined. ifelse([$3], , :, [$3]) else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat Test.java >&AS_MESSAGE_LOG_FD ifelse([$4], , , [ rm -f Test.java Test.class $4 ])dnl fi rm -f Test.java Test.class]) hdf4-hdf4.3.1/m4/ax_try_run_java.m4000066400000000000000000000034721503061704500170120ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_try_run_java.html # =========================================================================== # # SYNOPSIS # # AX_TRY_RUN_JAVA # # DESCRIPTION # # AX_TRY_RUN_JAVA attempt to compile and run user given source. # # *Warning*: its success or failure can depend on a proper setting of the # CLASSPATH env. variable. # # Note: This is part of the set of autoconf M4 macros for Java programs. # It is VERY IMPORTANT that you download the whole set, some macros depend # on other. Unfortunately, the autoconf archive does not support the # concept of set of macros, so I had to break it for submission. The # general documentation, as well as the sample configure.in, is included # in the AX_PROG_JAVA macro. # # LICENSE # # Copyright (c) 2008 Devin Weaver # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 3 AU_ALIAS([AC_TRY_RUN_JAVA], [AX_TRY_RUN_JAVA]) AC_DEFUN([AX_TRY_RUN_JAVA],[ AC_REQUIRE([AX_PROG_JAVAC])dnl AC_REQUIRE([AX_PROG_JAVA])dnl cat << \EOF > Test.java /* [#]line __oline__ "configure" */ ifelse([$1], , , [include $1;]) public class Test { [$2] } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class && ($JAVA $JAVAFLAGS Test; exit) 2>/dev/null then dnl Don't remove the temporary files here, so they can be examined. ifelse([$3], , :, [$3]) else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat Test.java >&AS_MESSAGE_LOG_FD ifelse([$4], , , [ rm -fr Test.java Test.class $4 ])dnl fi rm -fr Test.java Test.class]) hdf4-hdf4.3.1/m4/libtool.m4000066400000000000000000010574321503061704500152710ustar00rootroot00000000000000# 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 ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # 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], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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="$sys_lib_dlsearch_path_spec $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 ## 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... 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 ## 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... 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 ## 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... 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 hdf4-hdf4.3.1/m4/ltoptions.m4000066400000000000000000000300731503061704500156470ustar00rootroot00000000000000# 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 ## --------------------------------- ## ## Macros to handle LT_INIT 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], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## 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])]) hdf4-hdf4.3.1/m4/ltsugar.m4000066400000000000000000000104241503061704500152730ustar00rootroot00000000000000# 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 ]) hdf4-hdf4.3.1/m4/ltversion.m4000066400000000000000000000012621503061704500156370ustar00rootroot00000000000000# 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) ]) hdf4-hdf4.3.1/m4/lt~obsolete.m4000066400000000000000000000137561503061704500161770ustar00rootroot00000000000000# 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])]) hdf4-hdf4.3.1/mfhdf/000077500000000000000000000000001503061704500141135ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/CMakeLists.txt000066400000000000000000000012121503061704500166470ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF C) set(CMAKE_DIRECTORY_LABELS “MFHDFâ€) #----------------------------------------------------------------------------- # Option to build HDF4 Tools #----------------------------------------------------------------------------- if (HDF4_BUILD_TOOLS) set (NCGEN_UTILITY 0) add_subdirectory (dumper) add_subdirectory (hdfimport) add_subdirectory (hdiff) add_subdirectory (hrepack) if (HDF4_BUILD_NETCDF_TOOLS) set (NCGEN_UTILITY 1) add_subdirectory (ncgen) add_subdirectory (ncdump) endif () if (BUILD_TESTING) add_subdirectory (nctest) endif ( ) endif () hdf4-hdf4.3.1/mfhdf/COPYRIGHT000066400000000000000000000035351503061704500154140ustar00rootroot00000000000000Copyright 1993 University Corporation for Atmospheric Research/Unidata Portions of this software were developed by the Unidata Program at the University Corporation for Atmospheric Research. Access and use of this software shall impose the following obligations and understandings on the user. The user is granted the right, without any fee or cost, to use, copy, modify, alter, enhance and distribute this software, and any derivative works thereof, and its supporting documentation for any purpose whatsoever, provided that this entire notice appears in all copies of the software, derivative works and supporting documentation. Further, UCAR requests that the user credit UCAR/Unidata in any publications that result from the use of this software or in any product that includes this software, although this is not an obligation. The names UCAR and/or Unidata, however, may not be used in any advertising or publicity to endorse or promote any products or commercial entity unless specific written permission is obtained from UCAR/Unidata. The user also understands that UCAR/Unidata is not obligated to provide the user with any support, consulting, training or assistance of any kind with regard to the use, operation and performance of this software nor to provide the user with any updates, revisions, new versions or "bug fixes." THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. hdf4-hdf4.3.1/mfhdf/FAQ000066400000000000000000000717671503061704500144670ustar00rootroot00000000000000From: General Support Subject: netCDF FAQ Frequently Asked Questions About netCDF This article contains answers to some of the most frequently asked netCDF questions on the netcdfgroup mailing list and in the email sent to support@unidata.ucar.edu. The list is archived in pub/netcdf/FAQ on unidata.ucar.edu, and is currently maintained by Russ Rew (russ@unidata.ucar.edu). List of Questions: 1: What Is netCDF? 2: How do I get the netCDF software package? 3: What does netCDF run on? 4: When will the next version be available? What changes are included? 5: What is the connection between netCDF and CDF? 6: What is the connection between netCDF and HDF? 7: Is netCDF available for the Apple Macintosh? 8: What are some references to netCDF? 9: What are the files in pub/netcdf/ on unidata.ucar.edu? 10: Why do I get XDR error messages when trying to write data? 11: What is the best way to represent [some particular data] using netCDF? 12: Are there plans to add facilities for data compression to netCDF? 13: What utilities are available for netCDF? 14: What is the status of implementing additional netCDF operators? 15: Is there a mailing list for netCDF discussions and questions? 16: How do I make a bug report? 17: Is there any WAIS or gopher access to netCDF information? 18: How widely is netCDF used? 1: What Is netCDF? A: NetCDF (network Common Data Form) is an interface for scientific data access and a freely-distributed software library that provides an implementation of the interface. It was developed by Glenn Davis, Russ Rew, and Steve Emmerson at the Unidata Program Center in Boulder, Colorado. The netCDF library also defines a machine-independent format for representing scientific data. Together, the interface, library, and format support the creation, access, and sharing of scientific data. netCDF data is: - Self-Describing. A netCDF file includes information about the data it contains. - Network-transparent. A netCDF file is represented in a form that can be accessed by computers with different ways of storing integers, characters, and floating-point numbers. - Direct-access. A small subset of a large dataset may be accessed efficiently, without first reading through all the preceding data. - Appendable. Data can be appended to a netCDF dataset along one dimension without copying the dataset or redefining its structure. The structure of a netCDF dataset can be changed, though this sometimes causes the dataset to be copied. - Shareable. One writer and multiple readers may simultaneously access the same netCDF file. 2: How do I get the netCDF software package? A: Via anonymous FTP from host: unidata.ucar.edu [128.117.140.3] file: pub/netcdf/netcdf.tar.Z Make sure the file is transmitted in BINARY mode. This is version 2.3.2, last updated in June 1993. 3: What does netCDF run on? A: Version 2.3.2 of netCDF has been tested on the following platforms: CRAY Y-MP UNICOS 6.1.6 DEC Alpha OSF/1 1.2 DEC VAX VMS 5.5-2 DEC VAX Ultrix 4.3 DECstation 3000 Ultrix 4.3 HP-9000/7xx HPUX 9.0 IBM PS/2 MSDOS 5.0 IBM PS/2 OS/2 1.2 IBM RS-6000 AIX 3.2 NeXT NeXTOS 3.0 SGI Iris IRIX 4.0.5F SPARCstation Solaris 2.1 SPARCstation SunOS 4.1.3 The experience of outside developers indicates that netCDF is relatively easy to port to any system that has a C compiler and an XDR library (eXternal Data Representation, used for NFS and usually supplied by vendors). 4: What has changed since the netCDF 2.2 release in December 1991? A: NetCDF 2.3, made available in April 1993, contains bug fixes, portability enhancements, performance enhancements, and a few new capabilities. Some new optimizations for the library result in significant speedups for accessing cross-sections involving non-contiguous data. New capabilities include some additional interfaces that provide a more general form of hyperslab access. This supports sub-sampling along specified dimensions and a mapping between the points of the hyperslab and the memory locations of the corresponding values. In a generalized hyperslab, an index mapping vector is used to define the mapping between points in the generalized hyperslab and the memory locations of the corresponding values, so data values that are written or read need no longer be contiguous in memory. There are also some new interfaces that can be used to write, read, and inquire about records, where a record may contain multiple variables of different types and shapes. Where before you had to access a record's worth of data using multiple calls, now you will be able to use a single call. The ncdump utility supports several new command-line options including the ability to specify for which variables data values will be output, to provide brief annotations in the form of CDL comments to identify data values for large multidimensional variables, or to provide full annotations in the form of trailing CDL comments for every data value. The current release also includes a prototype implementation of a C++ interface for the netCDF data access library. It provides all the functionality of the previous C interface, improves type safety by eliminating use of void* pointers, and is somewhat simpler to use than the C interface. With the C++ interface, no IDs are needed for netCDF components, there is no need to specify types when creating attributes, and less indirection is required for dealing with dimensions. However, since this is a prototype interface and implementation, it may be changed before a supported version is released. 5: What is the connection between netCDF and CDF? A: CDF was developed at the NASA Space Science Data Center at Goddard, and is freely available. It was originally a VMS FORTRAN interface for scientific data access. Unidata reimplemented the library from scratch to use XDR for a machine-independent representation, designed the CDL text representation for netCDF data, wrote a User's Guide and made other additions including aggregate data access, single-file implementation, named dimensions, and variable-specific attributes. NetCDF and CDF have evolved independently. CDF now supports many of the same features as netCDF (aggregate data access, XDR representation, single-file representation, variable-specific attributes), but some differences remain (netCDF doesn't support native-mode representation, CDF doesn't support named dimensions). There is no compatibility between data in CDF and netCDF form, and as yet no translation software exists to convert data in one form to data in the other form. 6: What is the connection between netCDF and HDF? A: The National Center for Supercomputing Applications (NCSA) developed the HDF software and makes it freely available. HDF is an extensible data format for self-describing files that was developed independently of netCDF. Applications and utilities based on HDF are available that support raster-image manipulation and display and browsing through multidimensional scientific data. The HDF software includes a package of routines for accessing each HDF data type, as well as a lower-level interface for building packages to support new types. HDF supports both C and Fortran interfaces, and it has been successfully ported to a wide variety of machine architectures and operating systems. HDF emphasizes a single common format for data, on which many interfaces can be built. NCSA has implemented software that provides a netCDF interface to HDF. With this software, it is possible to use the netCDF calling interface to place data into an HDF file. The netCDF calling interface has not changed and netCDF files stored in XDR format are readable, so existing programs and data will still be usable (although programs will need to be relinked to the new library). There is currently no support for the mixing of HDF and netCDF structures. For example, a raster image can exist in the same file as a netCDF object, but you have to use the Raster Image interface to read the image and the netCDF interface to read the netCDF object. The other HDF interfaces are currently being modified to allow multi-file access, closer integration with the netCDF interface will probably be delayed until the end of that project. Eventually, it may be possible to integrate netCDF objects with the rest of the HDF tool suite. Such an integration will then allow tools written for netCDF and tools written for HDF to both interact intelligently with the new data files. 7: Is netCDF available for the Apple Macintosh? A: Unidata doesn't test or maintain a version of netCDF for Macintoshes, but see the files in the directory pub/netcdf/mac/ on unidata.ucar.edu for notes and Macintosh MPW makefiles for porting netCDF to an Apple Macintosh. These were contributed by Chuck Denham, U.S. Geological Survey. 8: What are some references to netCDF? A: Hard-copies of some of these are available from the Unidata Program Center, P.O. Box 3000, Boulder, CO 80307-3000: Rew, R. K., G. P. Davis, and S. Emmerson, NetCDF User's Guide, An Interface for Data Access, Version 2.3, April 1993. (Available from Unidata or by anonymous FTP from unidata.ucar.edu in the file pub/netcdf/guide.ps.Z) Rew, R. K. and G. P. Davis, "NetCDF: An Interface for Scientific Data Access," IEEE Computer Graphics and Applications, Vol. 10, No. 4, pp. 76-82, July 1990. Rew, R. K. and G. P. Davis, "The Unidata netCDF: Software for Scientific Data Access," Sixth International Conference on Interactive Information and Processing Systems for Meteorology, Oceanography, and Hydrology, Anaheim, California, American Meteorology Society, February 1990. Jenter, H. L. and R. P. Signell, 1992. "NetCDF: A Freely-Available Software-Solution to Data-Access Problems for Numerical Modelers". Proceedings of the American Society of Civil Engineers Conference on Estuarine and Coastal Modeling. Tampa, Florida. (Also available via anonymous FTP from sparky.er.usgs.gov in the file pub/netcdf.asce.ps) Fulker, D. W., "Unidata Strawman for Storing Earth-Referencing Data," Seventh International Conference on Interactive Information and Processing Systems for Meteorology, Oceanography, and Hydrology, New Orleans, La., American Meteorology Society, January 1991. Brown, S. A, M. Folk, G. Goucher, and R. Rew, "Software for Portable Scientific Data Management," Computers in Physics, American Institute of Physics, Vol. 7, No. 3, May/June 1993, pp. 304-308. 9: What are the files in pub/netcdf/ on unidata.ucar.edu? A: File Purpose README general information about netCDF FAQ this file of frequently asked questions utilities.txt a list of software packages currently available or under development for manipulating and displaying netCDF data guide.ps.Z a compressed PostScript file of the NetCDF User's Guide. This is included in the netcdf.tar.Z distribution, so you don't need both. ncprogs.ps a draft PostScript document describing an initial set of netCDF operator and utility programs under development ncprogs.txt an ASCII version of ncprogs.ps conventions.txt a draft document of some proposed netCDF conventions cdl/ a directory containing some examples of CDL files (an ASCII representation for netCDF files). msdos/ a directory containing executables and binaries for netCDF under MSDOS 5.0. These can also be built from the sources in netcdf.tar.Z, if you have the necessary Microsoft compilers. mac/ a directory containing notes and Macintosh MPW makefiles for porting netCDF to an Apple Macintosh. These were contributed by Chuck Denham, U.S. Geological Survey. 10: Why do I get XDR error messages when trying to write data? A: Probably due to a write error, perhaps because of exceeding disk quotas, a full device, or permission problems. The netCDF library is usually built on a vendor-supplied XDR library layer. Sometimes errors occur in the XDR layer rather than the netCDF layer, and in this case the error messages from the XDR layer can be cryptic. For example, if the user is writing data and exceeds a disk space quota, this might be detected first in the XDR layer. Although we try to catch and elaborate on errors that occur in the XDR layer, sometimes there is not enough information passed up to calling routines from the XDR layer to make construction of a meaningful error message possible. 11: What is the best way to represent [some particular data] using netCDF? A: There are many ways to represent the same information in any general-purpose data model. Choices left up to the user in the case of netCDF include which information to represent as variables or as variable attributes; what names to choose for variables, dimensions, and attributes; what order to use for the dimensions of multidimensional variables; what variables to include in the same netCDF file; and how to use variable attributes to capture the structure and meaning of data. We provide some guidelines in the NetCDF User's Guide (e.g Section 2.3.2, ``Differences between Attributes and Variables''), but we've found that a little experience helps. Occasionally we have decided it was useful to change the structure of netCDF files after experience with how the data is used. 12: Are there plans to add facilities for data compression to netCDF? A: We have no plans to add data compression to netCDF (although we do hope to eventually add a form of transparent data packing on write and unpacking on read whenever the reserved attributes "_Nbits", "_Scale", and "_Offset" are defined). Hyperslab access and direct access to individual array values conflict with most simple compression schemes. With netCDF, the elements of an array variable can be filled in any order or as cross-sections in any direction. NetCDF permits writing elements in one order and reading them later in different orders. Some compression methods require that all the data to be compressed are known before starting the compression. Techniques like run-length encoding or anything that depends on exploiting similarities in nearby values can't be used if nearby values aren't all known at the time some of the data are to be written. An alternative that can be implemented above the netCDF library is to adopt a convention for compressed data that uses a "compression" attribute to encode the method of compression, e.g. x:compression = "rle" ; for run-length encoding of the data in a variable x. Then when you write the data, compress them into a bland array of bytes and write all the bytes. Note that it would be difficult to define the size of such a variable in advance, since its compressed size depends on its values. You would also have to give up on hyperslab access for such variables, but instead read the compressed array in all at once and uncompress it before using it. 13: What utilities are available for netCDF? A: The only utilities available in the current netCDF distribution from Unidata are ncdump and ncgen, for converting netCDF files to an ASCII human-readable form and for converting from the ASCII human-readable form back to a binary netCDF file or a C or FORTRAN program for generating the netCDF file. In addition, the first release of the netcdf operators package, containing three general-purpose netCDF operators, is available from unidata.ucar.edu in the file ncopers.tar.Z. See the description of the file utilities.txt in the answer to the question above on important files in /pub/netcdf on unidata.ucar.edu for more information. 14: What is the status of implementing additional netCDF operators? A: Work on additional netCDF operators has been suspended until we can get more programmer resources, due to a higher priority recently placed on development of an event-driven network data distribution system. Volunteers to implement one or more of the netCDF operators are hereby solicited. We will coordinate community efforts to avoid duplication of effort, so before you volunteer to work on one of the planned netCDF operators, please contact support@unidata.ucar.edu to find out if someone else is already working on it. 15: Is there a mailing list for netCDF discussions and questions? A: Yes - there are two. The mailing list netcdfgroup@unidata.ucar.edu has over two hundred readers and gateways; you can subscribe or unsubscribe to the mailing list by sending mail to netcdfgroup-adm@unidata.ucar.edu If you would prefer to get only a single daily digest of the postings to the netcdfgroup mailing list, subscribe instead to the netcdfdigest mailing list by sending a request to netcdfdigest-adm@unidata.ucar.edu All the postings to the netcdfgroup mailing list are archived in the file mail-archives/netcdfgroup available via anonymous FTP from unidata.ucar.edu. 16: How do I make a bug report? A: If you find a bug, send a description to support@unidata.ucar.edu This is also a better address to use for questions or discussions about netCDF that you think are not appropriate for the entire netcdfgroup mailing list. 17: Is there any WAIS or gopher access to netCDF information? A: Yes, `netcdf-group.src' is a WAIS source that provides a full-text search of the netcdfgroup mailing list archive and is registered with think.com for general use. Another WAIS source, `unidata-support-netcdf.src', provides a full-text search of the support questions and answers about netCDF provided by Unidata support staff. Both of these WAIS servers and access to other information about Unidata can be accessed most easily through the Unidata gopher server at gopher.unidata.ucar.edu. 18: How widely is netCDF used? A: The netcdfgroup and netcdfdigest mailing lists have 290 addresses (some of which are aliases to more addresses) in fifteen countries. Several groups have adopted netCDF as a standard way to represent some forms of scientific data. The global ocean modeling effort at Los Alamos National Laboratory (LANL), as part of the DOE CHAMMP effort and one of the DOE Grand Challenges, has selected netCDF as the archival format for its computational data. An effort to bring netCDF up on the parallel disks on the CM-5 is planned to begin shortly. The National Center for Supercomputing Applications has incorporated the netCDF 2.3 interfaces into the latest release of their HDF software, permitting HDF tools that use this interface to be applied to netCDF datasets that are either XDR- or HDF-encoded. The Computer Planning Committee of NOAA's Pacific Marine Environmental Laboratory (PMEL) endorsed netCDF as the preferred data format for the Laboratory in early 1993. PMEL has developed the EPIC system for management, display and analysis of oceanographic time series and hydrographic data. EPIC utilizes netCDF as its primary data format. EPIC toolkits for netCDF include a data file I/O library, which is layered on top of the netCDF library, a netCDF calculator (nccalc) linked with a scientific graphics package (PPLUS), and a suite of display and analysis programs for oceanographic data. Lamont-Doherty Earth Observatory of Columbia University has converted all Marine Geophysics data (gravity, magnetics and bathymetry) acquired in the past 40 years by scientists at L-DEO as well as at other institutions to netCDF. A package of programs to access, maintain and display those files has also been completed. The software package is available via FTP (pub/cdf/MGG_CDF.tar.Z on lamont.ldeo.columbia.edu) The Generic Mapping Tools (GMT), a Unix-based set of tools for data manipulation and display using PostScript, make use of netCDF for storage of 2-D gridded data sets. GMT is used worldwide by about 3000 scientists, according to the developers. The Models-3 Project, being cooperatively pursued by the EPA's Atmospheric Research Laboratory and by North Carolina Supercomputing Center, is using an environmental-modeling-specific applications programming interface on top of UCAR's netCDF as the means for persistent storage of both observational and model-output data, as well as for storing sets of data-file-structure definitions and (prototype, so far) data-dependency graphs for scheduling the sets of programs which constitute their environmental models. A group in the Atmospheric Chemistry Division at NCAR that deals with UARS (Upper Atmospheric Research Satellite) data uses netCDF for their binary data format. Output from NCAR's High Altitude Observatory Division Thermospheric General Circulation Model (TGCM) and related models are converted to netCDF files for post-model visualization and diagnostic codes. NCAR's Research Aviation Facility will use netCDF to distribute all aircraft data, if performance tests on writing high rate data are satisfactory. NCAR's Research Data Program uses netCDF as the primary file format for data archived and used in the "zeb" display and analysis system. Quick look data from various projects is distributed by RDP in netCDF. NetCDF is also the file format used by the (zeb-based) Integrated Sounding System. PolyPaint is an interactive 3D visualization package from NCAR. PolyPaint V 3.4 uses netCDF for data sets, and storage of geometry information. PolyPaint+ alpha-version, being developed jointly by NCAR/MMM and LASP with funding from AISRP/NASA uses netCDF and DataHub from JPL. DataHub from JPL, with funding from AISRP/NASA identifies and converts between a variety of data format, CDF, HDF, MMM/netCDF, FITS, PDS, ... Work is under way to support conversion from a variety of NASA data formats to netCDF used by the PolyPaint+ visualization system from NCAR's MMM division. (JPL Contact for DataHub: Tom Handley, thandley@spacemouse.jpl.nasa.gov) A major component of the US Climate and Global Change program is the TOGA-TAO Array in the tropical Pacific, which proposes to maintain approximately 70 moored ATLAS wind and thermistor chain and current meter buoys, spanning the Pacific ocean from 95W to 137E in the equatorial wave guide. The TAO Project Office, at PMEL, has developed distribution and display software for the real-time data from the TAO buoys, in a point-and-click UNIX workstation environment. This software is distributed nationally and internationally. All data is stored and distributed in netCDF format. All graphics displays and animations are produced with the EPIC tools for working with netCDF data files. The US Geological Survey's Branch of Atlantic Marine Geology uses netCDF to access a variety of scientific data sets, including output from circulation and sediment transport models, sonar imagery, digital elevation models, and environmental sensor data. It is currently investigating the utility of using netCDF for data distribution on CDROM. At the Woods Hole Oceanographic Institution, netCDF is used in several areas. Ships in the UNOLS fleet are recording measurements from the IMET systems in netCDF form. These data include wind, barometer, humidity, air and sea temperature, precipitation, short wave radiation, and GPS navigation. Data sets from these systems taken during the WOCE experiments in the Pacific have been archived recently at NCAR. Also, measurements from a diverse set of instruments deployed on buoys for the Subduction, TOGA/COARE, and several other experiments are translated into netCDF form for processing and archival. Reports that describe the software systems used for these processing activities are available from WHOI. Scripps Institution of Oceanography (SIO) and the University Corporation for Atmospheric Research (UCAR) conducted a multi-platform climate field project during March of this year based in Nadi, Fiji. All data from this experiment will be archived using Unidata's netCDF before release to the scientific community. The Oregon State University Oceanographic research vessel WECOMA uses the netCDF library for primary scientific data logging. This includes navigational, meteorological, and other miscellaneous data. This logging is part of a client/server system for data distribution, display, and management known as XMIDAS. More details of the system are available from oce.orst.edu in the directory /pub/Wecoma, including a sample netCDF created data file from a Wecoma cruise. NOAA's Forecast System Laboratories have adopted netCDF as a data access interface for some of their systems and applications. A researcher at CSIRO Division of Oceanography in Australia is using netCDF for input and output files for a three dimensional coastal and estuarine hydrodynamic model. A general purpose finite element data model (referred to as EXODUS II) utilizing netCDF has been developed at Sandia National Laboratories. It consists of a C and FORTRAN application programming interface (API) to read and write geometry and results (including time varying data) for finite element analyses. For more information, contact Larry Schoof (laschoo@somnet.sandia.gov). NetCDF is the defacto standard for Analytical Data Interchange and Storage Standards (ADISS) for chromatography and mass spectrometry. NetCDF has been adopted by the Analytical Instrument Association (AIA), which includes all major analytical laboratory instrument vendors worldwide. ADISS supplies the Analytical Information Model on which the information content of these standards is based. The main uses of ADISS/netCDF by end users have been data communications and archival. The AIA Standards Committee is currently developing an ADISS Data Dictionary for infrared spectroscopy. The AIA expects to use netCDF for implementing data interchange. Another committee is developing an ADISS Data Dictionary for nuclear magnetic resonance and magnetic resonance imaging spectroscopy. After sufficient performance testing is completed, netCDF may be used for native storage for NMR, as well as data communications. Testing is expected to be completed at the end of summer 1993. Several commercial analysis and data visualization packages have been adapted to access netCDF data, including Spyglass Dicer, IBM Visualization Data Explorer, Research Systems' IDL, and Wavefront's Data Visualizer. SuperComputer Systems Engineering and Services Company (SSESCO) decided that for all future releases of their scientific visualization software, savi3D, netCDF will be the `native' format. SSESCO has implemented a meta-file layer on top of the netCDF library, called MRAF. It handles multiple netCDF files as well as automatic max-min calculations, time-varying gridded, particle, and discrete data, logical groupings for discrete data, and an overall simplified and flexible interface for storing scientific data. MRAF is being used by the DOE at the Hanford-Meterological Site for observational data and will be used for their weather-modelling. SSESCO is also working with meterologists around the US and France who will be moving to netCDF before the end of the year (mostly users of savi3D). The VISAGE visualization system, developed at the General Electric Corporate Research and Development, (Schroeder, WJ et al, "VISAGE: An Object-Oriented Scientific Visualization System", Proceedings of Visualization `92 Conference) uses netCDF as the preferred format. VISAGE is used at GE Corporate R&D, GE Aircraft Engine, GE Canada, GE Power Generation, as well as ETH Zurich, Switzerland, MQS In Chieti, Italy, and Rensselaer Polytechnic Institute in Troy, New York. GE has another application called "Decimate" that does polygon reduction/decimation (Schroeder,WJ et al, "Decimation of Triangle Meshes", Proceedings of SIGGRAPH `92). Again, this application uses netCDF as a preferred format. Decimate is currently licensed to Cyberware, Inc., makers of 3D laser digitizing hardware. Decimate is currently bundled with the scanners, and will soon be available as a commercial product. hdf4-hdf4.3.1/mfhdf/Makefile.am000066400000000000000000000010401503061704500161420ustar00rootroot00000000000000include $(top_srcdir)/config/commence.am if HDF_BUILD_FORTRAN FORTRAN_DIR = fortran else FORTRAN_DIR = endif if HDF_BUILD_NETCDF_TOOLS NETCDF_DIRS = ncdump ncgen nctest else NETCDF_DIRS = nctest endif # src folder in root Makefile, build other folders now SUBDIRS = libsrc $(FORTRAN_DIR) test $(NETCDF_DIRS) dumper hdfimport hdiff hrepack DIST_SUBDIRS = libsrc fortran test $(NETCDF_DIRS) dumper hdfimport hdiff hrepack # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall hdf4-hdf4.3.1/mfhdf/Makefile.in000066400000000000000000000553701503061704500161720ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = mfhdf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/config/commence.am README THANKS 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog @HDF_BUILD_FORTRAN_FALSE@FORTRAN_DIR = @HDF_BUILD_FORTRAN_TRUE@FORTRAN_DIR = fortran @HDF_BUILD_NETCDF_TOOLS_FALSE@NETCDF_DIRS = nctest @HDF_BUILD_NETCDF_TOOLS_TRUE@NETCDF_DIRS = ncdump ncgen nctest # src folder in root Makefile, build other folders now SUBDIRS = libsrc $(FORTRAN_DIR) test $(NETCDF_DIRS) dumper hdfimport hdiff hrepack DIST_SUBDIRS = libsrc fortran test $(NETCDF_DIRS) dumper hdfimport hdiff hrepack all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 mfhdf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-am uninstall uninstall-am .PRECIOUS: Makefile # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall # 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: hdf4-hdf4.3.1/mfhdf/README000066400000000000000000000127251503061704500150020ustar00rootroot00000000000000Unidata netCDF was integrated with HDF early in HDF's history. The COPYRIGHT file in this directory is the Unidata netCDF copyright and license file from Version 2.3.2, in 1993. For those interested, the Unidata netCDF README from the same release appears below. Unidata netCDF Version 2.3.2 is the version integrated with this version of HDF. -------------------------------------------------------------------------- Unidata netCDF README -------------------------------------------------------------------------- Unidata netCDF Version 2.3.2 June 1993 The Unidata network Common Data Form (netCDF) is an interface for scientific data access and a freely-distributed software library that provides an implementation of the interface. The netCDF library also defines a machine-independent format for representing scientific data. Together, the interface, library, and format support the creation, access, and sharing of scientific data. The current netCDF software provides common C and FORTRAN interfaces for applications and data. It has been tested on various common platforms, including several versions of UNIX, VMS, MSDOS, and OS/2. NetCDF files are self-describing, network-transparent, directly accessible, and extendible. `Self-describing' means that a netCDF file includes information about the data it contains. `Network-transparent' means that a netCDF file is represented in a form that can be accessed by computers with different ways of storing integers, characters, and floating-point numbers. `Direct-access' means that a small subset of a large dataset may be accessed efficiently, without first reading through all the preceding data. `Extendible' means that data can be appended to a netCDF dataset without copying it or redefining its structure. NetCDF is useful for supporting access to diverse kinds of scientific data in heterogeneous networking environments and for writing application software that does not depend on application-specific formats. A variety of analysis and display packages have been developed to analyze and display data in netCDF form. You can obtain a copy of the latest version of netCDF software using anonymous FTP from host: unidata.ucar.edu file: pub/netcdf/netcdf.tar.Z Included in this distribution are: the C source for the netCDF data access library, sources for the FORTRAN jacket library for various systems, documentation for the netCDF library and utilities in the form of a netCDF User's Guide, source for the netCDF utilities ncdump and ncgen, and a directory of test programs to verify the correct implementation of the netCDF library in new environments. Other files available for anonymous FTP from the pub/netcdf/ directory of unidata.ucar.edu include README general information about netCDF FAQ Frequently Asked Questions (with answers) about netCDF. utilities.txt a list of software packages currently available or under development for manipulating and displaying netCDF data guide.ps.Z a compressed PostScript file of the NetCDF User's Guide. This is included in the netcdf.tar.Z distribution, so you don't need both. ncprogs.ps a draft PostScript document describing an initial set of netCDF operator and utility programs under development ncprogs.txt an ASCII version of ncprogs.ps conventions.info a draft document of some proposed netCDF conventions cdl/ a directory containing some examples of CDL files (an ASCII representation for netCDF files). msdos/ a directory containing executables and binaries for netCDF under MSDOS 5.0. These can also be built from the sources in netcdf.tar.Z, if you have the necessary Microsoft compilers. mac/ a directory containing notes and Macintosh MPW makefiles for porting netCDF to an Apple Macintosh. These were contributed by Chuck Denham, U.S. Geological Survey. Current netCDF plans include the design and implementation of a C++ interface, implementation of netCDF operator and utility programs, and transparent support for packed netCDF data. A mailing list, netcdfgroup@unidata.ucar.edu, exists for discussion of the netCDF interface and announcements about netCDF bugs, fixes, and enhancements. To subscribe, send a request to netcdfgroup-adm@unidata.ucar.edu An archive of past postings to the netcdfgroup mailing list is available for anonymous FTP from the file mail-archives/netcdfgroup of unidata.ucar.edu. A recent paper that provides a good introduction to the use of netCDF appeared in Jenter, H. L. and R. P. Signell, 1992. "NetCDF: A Freely-Available Software-Solution to Data-Access Problems for Numerical Modelers". Proceedings of the American Society of Civil Engineers Conference on Estuarine and Coastal Modeling. Tampa, Florida. This paper is available via anonymous FTP from host: crusty.er.usgs.gov file: pub/netcdf.asce.ps Specific questions about netCDF that are not of interest to the netcdfgroup mailing list may be sent to support@unidata.ucar.edu. hdf4-hdf4.3.1/mfhdf/THANKS000066400000000000000000000101711503061704500150260ustar00rootroot00000000000000This THANKS file is from Unidata netCDF Version 2.3.2. (No attempt has been made to update contact information.) ------------------------------------------------------------------------ The NASA CDF data model, to which netCDF owes much, was developed by Michael Gough and Lloyd Treinish. Joe Fahle designed a C version for a CDF-like interface and discussions with Joe provided much of the inspiration for the original netCDF C interface. The netCDF C library was written by Glenn Davis. The nctest test suite, ncdump, ncgen, and C++ interface were written by Russ Rew. The XDR library is from Sun Microsystems. The FORTRAN jackets and FORTRAN test code were written by Cathy Cormack. The port library, configure-based installation system, and generalized hyperslab access implementation and test code are by Steve Emmerson. The following people have contributed bug reports, fixes, good suggestions, descriptions of use, and other kinds of useful support: Ethan Alpert ethan@niwot.scd.ucar.EDU Dr. Kenneth P. Bowman bowman@csrp.tamu.edu Bill Boyd boyd@mmm.ucar.edu Mark Bradford mark@typhoon.ofps.ucar.edu Morrell Chance chance@theory.pppl.gov Carlie J. Coats, Jr. coats@ncsc.org Jon Corbet corbet@stout.atd.ucar.EDU Harvey Davies hld@atmos.dar.csiro.au Charles R. Denham cdenham@nobska.er.usgs.gov Steve Diggs sdiggs@ucsd.edu Harry Edmon harry@atmos.washington.edu Joe Fahle jhf@loreto.seaspace.com Gabor Fichtinger gabor@chpc.utexas.edu Glenn Flierl glenn@mead.mit.edu Mike Folk mfolk@ncsa.uiuc.edu David W. Forslund dwf@lanl.gov Ben Foster foster@ncar.ucar.edu Gary Granger granger@stout.atd.ucar.edu Steve Hankin hankin@noaapmel.gov Bill Hart hart@ocean.ml.csiro.au Edward J. Hartnett ejh@khonshu.colorado.edu Donn Hines donn@lanl.gov Tim Holt holtt@oce.orst.edu Chris Houck chouck@ncsa.uiuc.edu Harry Jenter hjenter@stress.er.usgs.gov Susan Jesuroga jesuroga@comet.ucar.edu Tomas Johannesson tj@os.is John Kemp kemp@uiatma.atmos.uiuc.edu Bruce Langdon langdon@laura.llnl.gov Angel Li angel@miami.rsmas.miami.edu Brian Lincoln blincoln@SESSCO.com Jeffery W. Long jwlong@llnl.gov Dave Lucas dave@nwra.com Lawrence Lyjak lvl@acd.ucar.EDU Rich Lysakowski lysakowski@duggan.enet.dec.com Marinna Martini mmartini@nobska.er.usgs.gov Ron Melton rb_melton@pnl.gov Roy Mendelssohn mendelssohn@ssurf.ucsd.edu Barb Mihalas bmihalas@ncsa.uiuc.edu Rakesh Mithal rakesh@lamont.ldgo.columbia.edu Skip Montanaro montanaro@crd.ge.com Peter Neelin neelin@pet.mni.mcgill.ca Dan Packman pack@ncar.ucar.edu Dr. Louise Perkins perkins@pimms.mit.edu Ron Pfaff rtp@woodsy.lanl.gov Ken Prada kegp@isdl.whoi.edu Mark Rivers rivers@bnlx26.nsls.bnl.gov Randolph Roesler rdr@mda.ca Larry A. Schoof laschoo@sass577.endo.sandia.gov Rich Schramm scri@mbari.org William J. Schroeder schroeder@crd.ge.com Keith Searight keith@uiatma.atmos.uiuc.edu Richard P. Signell rsignell@crusty.er.usgs.gov Nancy Soreide nns@noaapmel.gov Lloyd Treinish lloydt@watson.ibm.com Tom Umeda TUmeda@baaqmd.gov Stephen Walker walker@ml.csiro.au Chris Webster chris@chinook.atd.ucar.EDU Paul Wessel wessel@kiawe.soest.hawaii.edu David Wojtowicz davidw@uiatma.atmos.uiuc.edu hdf4-hdf4.3.1/mfhdf/dumper/000077500000000000000000000000001503061704500154075ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/dumper/CMakeLists.txt000066400000000000000000000040701503061704500201500ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_DUMPER C) set (hdp_SRCS ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_dump.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_gr.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_list.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_rig.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_sds.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_util.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_vd.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/hdp_vg.c ${HDF4_MFHDF_DUMPER_SOURCE_DIR}/show.c ) add_executable (hdp ${hdp_SRCS}) target_include_directories(hdp PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdp STATIC) target_link_libraries (hdp PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdp SHARED) target_link_libraries (hdp PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (hdp PROPERTIES COMPILE_DEFINITIONS "HDF") set_global_variable (HDF4_UTILS_TO_EXPORT "${HDF4_UTILS_TO_EXPORT};hdp") set (H4_DEP_EXECUTABLES hdp) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Rules for Installation of tools using make Install target #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} EXPORT ${HDF4_EXPORTED_TARGETS} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/dumper/CMakeTests.cmake000066400000000000000000000340501503061704500204160ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## #-- Copy all the data files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES ctxtr2r.hdf Example6.hdf grtdfi322.hdf grtdfui162.hdf grtdfui82.hdf grtdfui83.hdf grtdfui84.hdf Image_with_Palette.hdf IMCOMP.hdf LongDataset.hdf sds_compressed.hdf sds_empty_many.hdf sds1_dim1_samename.hdf sds2_dim1_samename.hdf SDSlongname.hdf star.hdf swf32_fileattr.hdf swf32.hdf swi16.hdf swi8.hdf Tables.hdf Tables_External_File tdata.hdf tdf24.hdf tdfr8f.hdf test.hdf tvattr.hdf tvset.hdf VGlongname.hdf vslongname.hdf Roy.nc Roy-64.nc var3D_empty.nc ) set (HDF4_REFERENCE_FILES dumpgr-1.out dumpgr-10.out dumpgr-11.out dumpgr-12.out dumpgr-13.out dumpgr-14.out dumpgr-15.out dumpgr-16.out dumpgr-17.out dumpgr-18.out dumpgr-19.out dumpgr-2.out dumpgr-20.out dumpgr-3.out dumpgr-4.out dumpgr-5.out dumpgr-6.out dumpgr-7.out dumpgr-8.out dumpgr-9.out dumprig-1.out dumprig-2.out dumprig-3.out dumprig-4.out dumprig-5.out dumprig-6.out dumpsds-1.out dumpsds-10.out dumpsds-11.out dumpsds-12.out dumpsds-13.out dumpsds-14.out dumpsds-15.out dumpsds-15szip.out dumpsds-16.out dumpsds-17.out dumpsds-18.out dumpsds-19.out dumpsds-20.out dumpsds-2.out dumpsds-3.out dumpsds-4.out dumpsds-5.out dumpsds-6.out dumpsds-7.out dumpsds-8.out dumpsds-9.out dumpvd-1.out dumpvd-10.out dumpvd-11.out dumpvd-12.out dumpvd-13.out dumpvd-14.out dumpvd-2.out dumpvd-3.out dumpvd-4.out dumpvd-5.out dumpvd-6.out dumpvd-7.out dumpvd-8.out dumpvd-9.out dumpvg-1.out dumpvg-10.out dumpvg-11.out dumpvg-12.out dumpvg-13.out dumpvg-14.out dumpvg-15.out dumpvg-16.out dumpvg-17.out dumpvg-2.out dumpvg-3.out dumpvg-4.out dumpvg-5.out dumpvg-6.out dumpvg-7.out dumpvg-8.out dumpvg-9.out list-1.out list-10.out list-2.out list-3.out list-4.out list-5.out list-6.out list-7.out list-8.out list-9.out ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES} ${HDF4_REFERENCE_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_DUMPER_SOURCE_DIR}/testfiles/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "dumper_files") endforeach () add_custom_target(dumper_files ALL COMMENT "Copying files needed by dumper tests" DEPENDS ${dumper_files_list}) ############################################################################## ############################################################################## ### T H E T E S T S M A C R O S ### ############################################################################## ############################################################################## macro (ADD_H4_TEST resultfile resultcode) # Remove any output file left over from previous test run add_test ( NAME HDP-${resultfile}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${resultfile}.tst ${resultfile}.tst.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDP-${resultfile}-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDP-${resultfile}-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) endif () if (HDF4_ENABLE_USING_MEMCHECKER) add_test (NAME HDP-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN}) else () add_test ( NAME HDP-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${ARGN}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${resultfile}.tst" -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=${resultfile}.out" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () set_tests_properties (HDP-${resultfile} PROPERTIES DEPENDS HDP-${resultfile}-clearall-objects LABELS ${PROJECT_NAME}) set (last_test "HDP-${resultfile}") endmacro () ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## ADD_H4_TEST (list-1 0 list tdata.hdf) ADD_H4_TEST (list-2 0 list -l tdata.hdf) ADD_H4_TEST (list-3 0 list -d tdata.hdf) ADD_H4_TEST (list-4 0 list -e tdata.hdf) ADD_H4_TEST (list-5 0 list -t 720 tdata.hdf) ADD_H4_TEST (list-6 0 list -d -t "Numeric Data Group" tdata.hdf) ADD_H4_TEST (list-7 0 list -g tdata.hdf) ADD_H4_TEST (list-8 0 list -a tdata.hdf) ADD_H4_TEST (list-9 0 list -a Example6.hdf) ADD_H4_TEST (list-10 0 list -n Example6.hdf) # Test 1 prints all datasets ADD_H4_TEST (dumpsds-1 0 dumpsds swf32.hdf) # Tests 2 and 3 print datasets given their indices ADD_H4_TEST (dumpsds-2 0 dumpsds -i 2 swf32.hdf) ADD_H4_TEST (dumpsds-3 0 dumpsds -i 1,3 swf32.hdf) # Test 4 should fail with error message: "SD with name Time: not found" ADD_H4_TEST (dumpsds-4 0 dumpsds -n Time swf32.hdf) # Test 5 prints datasets given their names ADD_H4_TEST (dumpsds-5 0 dumpsds -n fakeDim0,Data-Set-2 swf32.hdf) # Test 6 prints datasets given their ref numbers ADD_H4_TEST (dumpsds-6 0 dumpsds -r 3,2 swf32.hdf) # Test 7 prints only data of the datasets selected by their ref numbers ADD_H4_TEST (dumpsds-7 0 dumpsds -r 3,2 -d swf32.hdf) # Test 8 prints only header information ADD_H4_TEST (dumpsds-8 0 dumpsds -h swf32_fileattr.hdf) # Test 9 prints data in clean format, no \digit's ADD_H4_TEST (dumpsds-9 0 dumpsds -c swf32_fileattr.hdf) # Test 10 prints contents of file without file attribute's data ADD_H4_TEST (dumpsds-10 0 dumpsds -g swf32_fileattr.hdf) # Test 11 prints contents of file without local attribute's data ADD_H4_TEST (dumpsds-11 0 dumpsds -l swf32_fileattr.hdf) # Test 12 prints a dataset by name and the name is very long ADD_H4_TEST (dumpsds-12 0 dumpsds -h -n "The name of this dataset is long and it is used to test the new variable length name feature." SDSlongname.hdf) # Test 13 prints contents of file when a dimension has the same name as its SDS ADD_H4_TEST (dumpsds-13 0 dumpsds sds1_dim1_samename.hdf) # Test 14 prints contents of file when a dimension has the same name as # that of another SDS ADD_H4_TEST (dumpsds-14 0 dumpsds sds2_dim1_samename.hdf) # Test 15 prints headers of all data sets with various compression method to # test displaying compression information if (HDF4_ENABLE_SZIP_SUPPORT) ADD_H4_TEST (dumpsds-15szip 0 dumpsds sds_compressed.hdf) else () ADD_H4_TEST (dumpsds-15 0 dumpsds sds_compressed.hdf) endif () # Test 16 prints SDSs in index order, by default ADD_H4_TEST (dumpsds-16 0 dumpsds -h -i 39,36 -n data34,data27 -r 36,37 -i 0,1 -n data6,data9,data4,data3 -r 16,17,15 -i 23,22,21 sds_empty_many.hdf) # Test 17 prints SDSs in the order they were specified, when flag -k is present # as a request to 'k'eep the specified order ADD_H4_TEST (dumpsds-17 0 dumpsds -k -h -i 39,36 -n data34,data27 -r 36,37 -i 0,1 -n data6,data9,data4,data3 -r 16,17,15 -i 23,22,21 sds_empty_many.hdf) # Test 18 reads a few small datasets in a netCDF file ADD_H4_TEST (dumpsds-18 0 dumpsds -i 0,1,2 Roy.nc) # Test 19 displays a message when the file is a netCDF 64-bit file ADD_H4_TEST (dumpsds-19 0 dumpsds Roy-64.nc) # Test 20 detects empty variable in a netCDF file and displays info when a # netCDF variable has rank = 0 ADD_H4_TEST (dumpsds-20 0 dumpsds var3D_empty.nc) ADD_H4_TEST (dumprig-1 0 dumprig tdf24.hdf) ADD_H4_TEST (dumprig-2 0 dumprig -i 1,2 tdf24.hdf) ADD_H4_TEST (dumprig-3 0 dumprig -i 1,3 tdf24.hdf) # '-i 3' is invalid ADD_H4_TEST (dumprig-4 0 dumprig -m 24 tdf24.hdf) ADD_H4_TEST (dumprig-5 0 dumprig -r 3,4 tdf24.hdf) ADD_H4_TEST (dumprig-6 0 dumprig -r 3,4 -d tdf24.hdf) # Test command dumpvd ADD_H4_TEST (dumpvd-1 0 dumpvd tvset.hdf) ADD_H4_TEST (dumpvd-2 0 dumpvd -i 1,3,5 tvset.hdf) ADD_H4_TEST (dumpvd-3 0 dumpvd -r 1238,1239,1251,1252 tvset.hdf) ADD_H4_TEST (dumpvd-4 0 dumpvd -n "Multi-Order Vdata" tvset.hdf) ADD_H4_TEST (dumpvd-5 0 dumpvd -n "Mixed Vdata,Integer Vdata" tvset.hdf) ADD_H4_TEST (dumpvd-6 0 dumpvd -c "Test object,No class specified" tvset.hdf) ADD_H4_TEST (dumpvd-7 0 dumpvd -f B tvset.hdf) ADD_H4_TEST (dumpvd-8 0 dumpvd -f "STATION_NAME,FLOATS" tvset.hdf) ADD_H4_TEST (dumpvd-9 0 dumpvd -f "STATION_NAME,FLOATS" -d tvset.hdf) ADD_H4_TEST (dumpvd-10 0 dumpvd tvattr.hdf) # Tests 11 and 12 print out the vdatas of classes "SDSVar" and "CoordVar" # to test the fix of bugzilla 624 (these are new classes used to distinguish # between SDS and coordinate variables) ADD_H4_TEST (dumpvd-11 0 dumpvd -c "SDSVar" sds1_dim1_samename.hdf) ADD_H4_TEST (dumpvd-12 0 dumpvd -c "CoordVar" sds1_dim1_samename.hdf) # Added test #13 to test long vdata's name and class, HDFFR-1267 - BMR 5/15/11 ADD_H4_TEST (dumpvd-13 0 dumpvd vslongname.hdf) # Added test #14 to test the detection of external file, HDFFR-1266. The # external file is Tables_External_File and when the file is removed from the # current directory, the test will fail with the name of the file displayed in # the error message. - BMR 6/10/11 ADD_H4_TEST (dumpvd-14 0 dumpvd Tables.hdf) # Test command dumpvg ADD_H4_TEST (dumpvg-1 0 dumpvg tvset.hdf) ADD_H4_TEST (dumpvg-2 0 dumpvg -i 0,1 tvset.hdf) ADD_H4_TEST (dumpvg-3 0 dumpvg -r 3 tvset.hdf) ADD_H4_TEST (dumpvg-4 0 dumpvg -n "Simple Vgroup" tvset.hdf) ADD_H4_TEST (dumpvg-5 0 dumpvg -c "Test object" tvset.hdf) ADD_H4_TEST (dumpvg-6 0 dumpvg -i 1,3,5 tdata.hdf) ADD_H4_TEST (dumpvg-7 0 dumpvg -r 32,39 tdata.hdf) ADD_H4_TEST (dumpvg-8 0 dumpvg -n nsamp,tdata.hdf tdata.hdf) ADD_H4_TEST (dumpvg-9 0 dumpvg -c CDF0.0 tdata.hdf) # Added option -h to the following test; this option has always # failed; just fixed it - BMR 8/1/00 ADD_H4_TEST (dumpvg-10 0 dumpvg -h -c Dim0.0,Var0.0 tdata.hdf) # this following test is removed since option -d is removed # ADD_H4_TEST (dumpvg-11 0 dumpvg -c Dim0.0,Var0.0 -d tdata.hdf) # moved test #12 up to #11, consequently - BMR 7/25/00 ADD_H4_TEST (dumpvg-11 0 dumpvg tvattr.hdf) # Added these two tests for the new feature: vgroup has variable length # name - BMR 10/27/06 # Note that the dumpvg-13 test searches for an SDS also ADD_H4_TEST (dumpvg-12 0 dumpvg VGlongname.hdf) ADD_H4_TEST (dumpvg-13 0 dumpvg -n "SD Vgroup - this vgroup has an sds as a member and it is actually meant to test long vgroup name" VGlongname.hdf) # Prints contents of file when a dimension has the same name as its SDS ADD_H4_TEST (dumpvg-14 0 dumpvg sds1_dim1_samename.hdf) # Prints contents of file when a dimension has the same name as that # of another SDS ADD_H4_TEST (dumpvg-15 0 dumpvg sds2_dim1_samename.hdf) # Verify the fix for bug HDFFR-197 and a vgroup with ref=0 (some old RI stuff) ADD_H4_TEST (dumpvg-16 0 dumpvg -h grtdfi322.hdf) ADD_H4_TEST (dumpvg-17 0 dumpvg grtdfi322.hdf) # Test command dumpgr ADD_H4_TEST (dumpgr-1 0 dumpgr grtdfui82.hdf) ADD_H4_TEST (dumpgr-2 0 dumpgr -i 0,1,3 grtdfui82.hdf) ADD_H4_TEST (dumpgr-3 0 dumpgr -i 0 grtdfui82.hdf) ADD_H4_TEST (dumpgr-4 0 dumpgr -n Image_array_5 grtdfui82.hdf) ADD_H4_TEST (dumpgr-5 0 dumpgr -r 6,2,3 grtdfui82.hdf) ADD_H4_TEST (dumpgr-6 0 dumpgr -r 6 -d grtdfui82.hdf) ADD_H4_TEST (dumpgr-7 0 dumpgr -o my.dat grtdfui82.hdf) add_test ( NAME HDP-clear-my.dat COMMAND ${CMAKE_COMMAND} -E remove my.dat ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDP-clear-my.dat PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDP-clear-my.dat PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDP-clear-my.dat") ADD_H4_TEST (dumpgr-8 0 dumpgr -o mybin.dat -b grtdfui82.hdf) add_test ( NAME HDP-clear-mybin.dat COMMAND ${CMAKE_COMMAND} -E remove mybin.dat ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDP-clear-mybin.dat PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDP-clear-mybin.dat PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDP-clear-mybin.dat") ADD_H4_TEST (dumpgr-9 0 dumpgr grtdfui83.hdf) ADD_H4_TEST (dumpgr-10 0 dumpgr grtdfui84.hdf) ADD_H4_TEST (dumpgr-11 0 dumpgr grtdfui162.hdf) # Test 12 shows that file attribute is printed ADD_H4_TEST (dumpgr-12 0 dumpgr grtdfi322.hdf) # Tests 13, 14, and 15 test option -h, which was not included in any # of the previous tests, and the new options -p and -pd, printing palette # with or without palette information ADD_H4_TEST (dumpgr-13 0 dumpgr -p Image_with_Palette.hdf) ADD_H4_TEST (dumpgr-14 0 dumpgr -h Image_with_Palette.hdf) ADD_H4_TEST (dumpgr-15 0 dumpgr -r 2,4 -pd Image_with_Palette.hdf) # Test 16: to test new option -s, printing data as stream ADD_H4_TEST (dumpgr-16 0 dumpgr -r 6 -d -s grtdfui82.hdf) # Test 17: to test new option -m (interlace mode = LINE) ADD_H4_TEST (dumpgr-17 0 dumpgr -r 6 -m 1 grtdfui82.hdf) # Test 18: to test new option -c (printing attribute data in clean format) ADD_H4_TEST (dumpgr-18 0 dumpgr -c grtdfi322.hdf) # Test 19: to test new options -g and -l (suppress all attribute data) ADD_H4_TEST (dumpgr-19 0 dumpgr -g -l grtdfi322.hdf) # Test 20: to test dumpgr successfully detect IMCOMP compression type ADD_H4_TEST (dumpgr-20 0 dumpgr IMCOMP.hdf) hdf4-hdf4.3.1/mfhdf/dumper/Makefile.am000066400000000000000000000025511503061704500174460ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am hdp_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(hdp_INCLUDES) $(DEFINES) ## Add hdp specific linker flags here hdp_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = hdp ## Information for building the "hdp" program hdp_SOURCES = hdp.c hdp_dump.c hdp_gr.c hdp_list.c hdp_rig.c hdp_sds.c \ hdp_util.c hdp_vd.c hdp_vg.c show.c hdp_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdp_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# TEST_SCRIPT = testhdp.sh check_SCRIPTS = testhdp.sh include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/dumper/Makefile.in000066400000000000000000001321551503061704500174630ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = hdp$(EXEEXT) TESTS = $(TEST_SCRIPT) subdir = mfhdf/dumper ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = testhdp.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_hdp_OBJECTS = hdp.$(OBJEXT) hdp_dump.$(OBJEXT) hdp_gr.$(OBJEXT) \ hdp_list.$(OBJEXT) hdp_rig.$(OBJEXT) hdp_sds.$(OBJEXT) \ hdp_util.$(OBJEXT) hdp_vd.$(OBJEXT) hdp_vg.$(OBJEXT) \ show.$(OBJEXT) hdp_OBJECTS = $(am_hdp_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = hdp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdp_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/hdp.Po ./$(DEPDIR)/hdp_dump.Po \ ./$(DEPDIR)/hdp_gr.Po ./$(DEPDIR)/hdp_list.Po \ ./$(DEPDIR)/hdp_rig.Po ./$(DEPDIR)/hdp_sds.Po \ ./$(DEPDIR)/hdp_util.Po ./$(DEPDIR)/hdp_vd.Po \ ./$(DEPDIR)/hdp_vg.Po ./$(DEPDIR)/show.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(hdp_SOURCES) DIST_SOURCES = $(hdp_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/testhdp.sh.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog hdp_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(hdp_INCLUDES) $(DEFINES) hdp_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdp_SOURCES = hdp.c hdp_dump.c hdp_gr.c hdp_list.c hdp_rig.c hdp_sds.c \ hdp_util.c hdp_vd.c hdp_vg.c show.c hdp_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdp_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ############################################################################# TEST_SCRIPT = testhdp.sh check_SCRIPTS = testhdp.sh # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/dumper/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/dumper/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testhdp.sh: $(top_builddir)/config.status $(srcdir)/testhdp.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 hdp$(EXEEXT): $(hdp_OBJECTS) $(hdp_DEPENDENCIES) $(EXTRA_hdp_DEPENDENCIES) @rm -f hdp$(EXEEXT) $(AM_V_CCLD)$(hdp_LINK) $(hdp_OBJECTS) $(hdp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_dump.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_gr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_sds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_vd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdp_vg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/hdp.Po -rm -f ./$(DEPDIR)/hdp_dump.Po -rm -f ./$(DEPDIR)/hdp_gr.Po -rm -f ./$(DEPDIR)/hdp_list.Po -rm -f ./$(DEPDIR)/hdp_rig.Po -rm -f ./$(DEPDIR)/hdp_sds.Po -rm -f ./$(DEPDIR)/hdp_util.Po -rm -f ./$(DEPDIR)/hdp_vd.Po -rm -f ./$(DEPDIR)/hdp_vg.Po -rm -f ./$(DEPDIR)/show.Po -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-binPROGRAMS 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 ./$(DEPDIR)/hdp.Po -rm -f ./$(DEPDIR)/hdp_dump.Po -rm -f ./$(DEPDIR)/hdp_gr.Po -rm -f ./$(DEPDIR)/hdp_list.Po -rm -f ./$(DEPDIR)/hdp_rig.Po -rm -f ./$(DEPDIR)/hdp_sds.Po -rm -f ./$(DEPDIR)/hdp_util.Po -rm -f ./$(DEPDIR)/hdp_vd.Po -rm -f ./$(DEPDIR)/hdp_vg.Po -rm -f ./$(DEPDIR)/show.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/dumper/README000066400000000000000000000013351503061704500162710ustar00rootroot00000000000000 README for the HDF dumper directory This directory contains source and data files for hdp, an HDF dumper. File hdp.txt explains hdp commands and command options. Hdp will be automatically compiled and installed when you run 'make' and 'make install' from the top level. A file named testhdf.sh and a group of .hdf files are included for testing. Run the test with the command "make test". Please send your bug reports, comments and suggestions to hdfhelp@hdfgroup.org ----------------- History of data files ------------------ Below is a list describing how some of the hdf files in this directory were generated. sds_compressed.hdf: by test_various_comps() in mfhdf/libsrc/tcomp.c sds_szipped.hdf: by gen_sds_szipped.c hdf4-hdf4.3.1/mfhdf/dumper/TEST000066400000000000000000000041541503061704500161150ustar00rootroot00000000000000 The following commands can be used for testing. (1) hdp list tdata.hdf hdp list -l tdata.hdf hdp list -d tdata.hdf hdp list -e tdata.hdf hdp list -t 720 tdata.hdf hdp list -d -t "Numeric Data Group" tdata.hdf hdp list -g tdata.hdf hdp list -a tdata.hdf hdp list -a Example6.hdf hdp list -n Example6.hdf (2) hdp dumpsds swf32.hdf hdp dumpsds -i 2 swf32.hdf hdp dumpsds -i 1,3 swf32.hdf hdp dumpsds -n Time swf32.hdf /* This command should fail with error message: "SD with name Time: not found" */ hdp dumpsds -n fakeDim0,Data-Set-2 swf32.hdf hdp dumpsds -r 3,2 swf32.hdf hdp dumpsds -r 3,2 -d swf32.hdf (3) hdp dumprig tdf24.hdf hdp dumprig -i 1,2 tdf24.hdf hdp dumprig -i 1,3 tdf24.hdf /* '-i 3' is invalid */ hdp dumprig -m 24 tdf24.hdf hdp dumprig -r 3,4 tdf24.hdf hdp dumprig -r 3,4 -d tdf24.hdf (4) hdp dumpvd tvset.hdf hdp dumpvd -i 1,3,5 tvset.hdf hdp dumpvd -r 1238,1239,1251,1252 tvset.hdf hdp dumpvd -n "Multi-Order Vdata" tvset.hdf hdp dumpvd -n "Mixed Vdata","Integer Vdata" tvset.hdf hdp dumpvd -c "Test object","No class specified" tvset.hdf hdp dumpvd -f B tvset.hdf hdp dumpvd -f "STATION_NAME","FLOATS" tvset.hdf hdp dumpvd -f "STATION_NAME","FLOATS" -d tvset.hdf (5) hdp dumpvg tvset.hdf hdp dumpvg -i 0,1 tvset.hdf hdp dumpvg -r 3 tvset.hdf hdp dumpvg -n "Simple Vgroup" tvset.hdf hdp dumpvg -c "Test object" tvset.hdf hdp dumpvg -i 1,3,5 tdata.hdf hdp dumpvg -r 32,39 tdata.hdf hdp dumpvg -n nsamp,tdata.hdf tdata.hdf hdp dumpvg -c CDF0.0 tdata.hdf hdp dumpvg -c Dim0.0,Var0.0 tdata.hdf hdp dumpvg -c Dim0.0,Var0.0 -d tdata.hdf (6) hdp dumpgr grtdfui82.hdf hdp dumpgr -i 0,1,3 grtdfui82.hdf hdp dumpgr -i 0 grtdfui82.hdf hdp dumpgr -n Image_array_5 grtdfui82.hdf hdp dumpgr -r 6,2,3 grtdfui82.hdf hdp dumpgr -r 6 -d grtdfui82.hdf hdp dumpgr -o my.dat grtdfui82.hdf hdp dumpgr -o mybin.dat -b grtdfui82.hdf hdp dumpgr grtdfui83.hdf hdp dumpgr grtdfui84.hdf hdp dumpgr grtdfui162.hdf hdp dumpgr grtdfi322.hdf hdf4-hdf4.3.1/mfhdf/dumper/hdp.c000066400000000000000000000404751503061704500163400ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdp.h" #include "nc_priv.h" #include "vg_priv.h" /********************/ /* Global Variables */ /********************/ /* indicates Vsets have been initialized for the current file */ intn vinit_done = FALSE; /********************************/ /* Local variables and typedefs */ /********************************/ /* hdp commands (stored as (value, name) pairs to keep them in sync) */ typedef enum { HELP, LIST, DUMPSDS, DUMPRIG, DUMPVG, DUMPVD, DUMPGR, BAD_COMMAND } command_value_t; typedef struct command_t { const command_value_t value; const char *name; } command_t; static const command_t commands[] = {{HELP, "help"}, {LIST, "list"}, {DUMPSDS, "dumpsds"}, {DUMPRIG, "dumprig"}, {DUMPVG, "dumpvg"}, {DUMPVD, "dumpvd"}, {DUMPGR, "dumpgr"}, {BAD_COMMAND, "BADNESS - not a valid command"}}; /* Print the usage message about this utility */ static void usage(intn argc, char *argv[]) { (void)argc; printf("%s, %s\n\n", argv[0], LIBVER_STRING); printf("Usage: hdp [-H] command [command options] \n"); printf("\t -H Display usage information about the specified command.\n"); printf("\t If no command is specified, -H lists all commands.\n"); printf("\t Commands:\n"); printf("\t list \tlists contents of files in \n"); printf("\t dumpsds\tdisplays data of SDSs in \n"); printf("\t dumpvd\tdisplays data of vdatas in . \n"); printf("\t dumpvg\tdisplays data of vgroups in . \n"); printf("\t dumprig\tdisplays data of RIs (DFR8 and DFR24) in . \n"); printf("\t dumpgr\tdisplays data of RIs in . \n"); printf("\t \tlist of hdf file names, separated by spaces.\n"); } void init_dump_opts(dump_info_t *dump_opts) { dump_opts->filter = DALL; /* default dump all GRs */ dump_opts->by_index.num_list = NULL; /* no index given */ dump_opts->by_index.num_items = 0; dump_opts->by_ref.num_list = NULL; /* no ref# given */ dump_opts->by_ref.num_items = 0; dump_opts->by_name.str_list = NULL; /* no name given */ dump_opts->by_name.num_items = 0; dump_opts->by_class.str_list = NULL; /* no class given */ dump_opts->by_class.num_items = 0; dump_opts->contents = DVERBOSE; /* default dump all information */ dump_opts->dump_to_file = FALSE; /* don't dump to output file */ dump_opts->file_format = DASCII; /* default output is ASCII file */ dump_opts->file_type = HDF_FILE; /* assuming an HDF file is provided */ dump_opts->print_pal = FALSE; /* GR only, don't print palette */ dump_opts->keep_order = FALSE; dump_opts->all_types = NULL; /* no specific dataset requested, default to dump all datasets */ dump_opts->num_chosen = NO_SPECIFIC; /* print output aligned, using carriage returns */ dump_opts->as_stream = FALSE; /* print space characters (LF, FF, CR, space, tabs...) in \digit format */ dump_opts->clean_output = FALSE; /* print data starting at column 16 unless reset otherwise */ dump_opts->firstln_indent = 16; /* print data on a continuous line starting at column 16 unless reset otherwise */ dump_opts->contln_indent = 16; /* GR only, print data using interlace at creation */ dump_opts->interlace = NO_SPECIFIC; /* GR & SD only, print data of global attributes unless -g is given */ dump_opts->no_gattr_data = FALSE; /* GR & SD only, print data of local attributes unless -l is given */ dump_opts->no_lattr_data = FALSE; strcpy(dump_opts->file_name, "\0"); } /* end init_dump_opts() */ int main(int argc, char *argv[]) { command_value_t cmd = BAD_COMMAND; /* command to perform */ intn curr_arg; /* current cmd line argument */ dump_opt_t glob_opts; /* global options for all commands */ intn j; /* local counting variables */ memset(&glob_opts, 0, sizeof(dump_opt_t)); if (argc < 2) { usage(argc, argv); exit(EXIT_FAILURE); } curr_arg = 1; while (curr_arg < argc && (argv[curr_arg][0] == '-')) { switch (argv[curr_arg][1]) { case 'H': /* case 'h': */ /* Print help for a given command */ if (curr_arg < argc - 1) { glob_opts.help = TRUE; /* for displaying options. */ break; } default: usage(argc, argv); /* Display the general usage. */ exit(EXIT_FAILURE); } curr_arg++; } for (j = 0; j < (sizeof(commands) / sizeof(command_t)); j++) { if (strcmp(argv[curr_arg], commands[j].name) == 0) { cmd = commands[j].value; break; } } if (cmd == BAD_COMMAND) { printf("Invalid command: %s\n", argv[curr_arg]); exit(EXIT_FAILURE); } curr_arg++; switch (cmd) { case LIST: if (FAIL == do_list(curr_arg, argc, argv, glob_opts.help)) exit(EXIT_FAILURE); break; case DUMPSDS: if (FAIL == do_dumpsds(curr_arg, argc, argv, glob_opts.help)) exit(EXIT_FAILURE); break; case DUMPRIG: /* BMR: retire dumprig, have dumpgr do the work */ if (FAIL == do_dumprig(curr_arg, argc, argv, glob_opts.help)) /* fprintf( stderr, ">>> Please make a note that dumprig is no longer available.\n"); fprintf( stderr, " The command dumpgr is and should be used in its place.\n" ); if (FAIL == do_dumpgr(curr_arg, argc, argv, glob_opts.help)) */ exit(EXIT_FAILURE); break; case DUMPVG: if (FAIL == do_dumpvg(curr_arg, argc, argv, glob_opts.help)) exit(EXIT_FAILURE); break; case DUMPVD: if (FAIL == do_dumpvd(curr_arg, argc, argv, glob_opts.help)) exit(EXIT_FAILURE); break; case DUMPGR: if (FAIL == do_dumpgr(curr_arg, argc, argv, glob_opts.help)) exit(EXIT_FAILURE); break; case HELP: usage(argc, argv); break; /* Should not get here - invalid commands are handled earlier */ case BAD_COMMAND: default: printf("Invalid command!\n"); exit(EXIT_FAILURE); break; } return EXIT_SUCCESS; } /* ----------------------------------------------------------------- NAME VShdfsize - computes the byte size of the field(s) of a vdata. DESCRIPTION The size is the byte size of the fields of a vdata in a hdf file. This routine is very similar to the HDF API routine VSsizeof except it uses (struct vdata_desc).wlist.isize to compute the field size instead of (struct vdata_desc).wlist.esize as VSsizeof. RETURNS The byte size of the field(s), positive integer, on success; otherwise, returns FAIL. ----------------------------------------------------------------- */ int32 VShdfsize(int32 vkey, /* IN vdata key */ char *fields /* IN: Name(s) of the fields to check size of */) { int32 totalsize; int32 i, j; int32 found; int32 ac; char **av = NULL; vsinstance_t *w = NULL; VDATA *vs = NULL; int32 ret_value = SUCCEED; /* check key is valid vdata */ if (HAatom_group(vkey) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* get vdata instance */ if (NULL == (w = (vsinstance_t *)HAatom_object(vkey))) HGOTO_ERROR(DFE_NOVS, FAIL); /* get vdata itself and check it */ vs = w->vs; if (vs == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); totalsize = 0; if (fields == NULL) /* default case? */ { /* count all field sizes in vdata */ for (j = 0; j < vs->wlist.n; j++) totalsize += vs->wlist.isize[j]; } else if (fields[0] != '\0') /* implies: return 0 for empty 'fields' */ { /* parse field string */ if ((scanattrs(fields, &ac, &av) < 0) || (ac < 1)) HGOTO_ERROR(DFE_ARGS, FAIL); for (i = 0; i < ac; i++) { /* check fields in vs */ for (found = 0, j = 0; j < vs->wlist.n; j++) if (!strcmp(av[i], vs->wlist.name[j])) { totalsize += vs->wlist.isize[j]; found = 1; break; } if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); } /* end for */ } /* end else */ /* return total size of vdata fields specified */ ret_value = totalsize; done: return ret_value; } /* VShdfsize */ /* ------------- VSattrhdfsize -------------------------- NAME VSattrhdfsize -- get hdfsize of a vdata attribute USAGE intn VSattrhdfsize(int32 vsid, int32 findex, intn attrindex, int32 *size); int32 vsid; IN: vdata id int32 findex; IN: field index. _HDF_VDATA (-1) for the vdata intn attrindex; IN: which attr of the field/vdata attrindex is 0-based int32 *size; OUT: size of the attr values in hdf files. RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION size can be NULL if which is not interested. --------------------------------------------------- */ intn VSattrhdfsize(int32 vsid, int32 findex, intn attrindex, int32 *size) { VDATA *vs, *attr_vs; vs_attr_t *vs_alist; vsinstance_t *vs_inst, *attr_inst; int32 attr_vsid; int32 ret_value = SUCCEED; intn i, nattrs, a_index, found; DYN_VWRITELIST *w; HEclear(); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vs' index in vstab */ if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_NOVS, FAIL); if ((findex >= vs->wlist.n || findex < 0) && (findex != _HDF_VDATA)) HGOTO_ERROR(DFE_BADFIELDS, FAIL); nattrs = vs->nattrs; if (attrindex < 0 || attrindex >= nattrs) HGOTO_ERROR(DFE_ARGS, FAIL); vs_alist = vs->alist; if (nattrs == 0 || vs_alist == NULL) /* no attrs or bad attr list */ HGOTO_ERROR(DFE_ARGS, FAIL); found = 0; a_index = -1; for (i = 0; i < nattrs; i++) { if (vs_alist->findex == findex) { a_index++; if (a_index == attrindex) { found = 1; break; } } vs_alist++; } if (!found) HGOTO_ERROR(DFE_ARGS, FAIL); /* found. get attr info */ if (FAIL == (attr_vsid = VSattach(vs->f, (int32)vs_alist->aref, "r"))) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (NULL == (attr_inst = (vsinstance_t *)HAatom_object(attr_vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (attr_vs = attr_inst->vs)) HGOTO_ERROR(DFE_BADATTR, FAIL); /* If this vdata is not storing an attribute, it shouldn't have been passed to this function */ if (strcmp(attr_vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); w = &(attr_vs->wlist); /* This vdata should have only 1 field */ /* if (w->n != 1 || strcmp(w->name[0], ATTR_FIELD_NAME)) <- commented out Note: ATTR_FIELD_NAME cannot be used here because hdfeos sets fieldname to "AttrValues", not ATTR_FIELD_NAME. -BMR, 2014/12/01 */ if (w->n != 1) HGOTO_ERROR(DFE_BADATTR, FAIL); if (size) *size = w->order[0] * (DFKNTsize(w->type[0])); if (FAIL == VSdetach(attr_vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* VSattrhdfsize */ /* ---------- Vattrhdfsize ---------------------- NAME Vattrhdfsize -- get hdfsize of a vgroup attribute USAGE intn Vattrhdfsize(int32 vgid, intn attrindex, int32 *size) int32 vgid; IN: vgroup id intn attrindex; IN: which attr's info we want attrindex is 0-based int32 *size; OUT: size of the attr values in hdf files. RETURNS Returns SUCCEED when successful, FAIL otherwise. DESCRIPTION size can be NULL if which is not interested. --------------------------------------------------- */ intn Vattrhdfsize(int32 vgid, intn attrindex, int32 *size) { VGROUP *vg; VDATA *vs; DYN_VWRITELIST *w; vginstance_t *v; vsinstance_t *vs_inst; vg_attr_t *vg_alist = NULL; intn adjusted_index; int32 fid, vsid; int32 ret_value = SUCCEED; HEclear(); if (HAatom_group(vgid) != VGIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); /* locate vg's index in vgtab */ if (NULL == (v = (vginstance_t *)HAatom_object(vgid))) HGOTO_ERROR(DFE_VTAB, FAIL); vg = v->vg; fid = vg->f; if (vg == NULL) HGOTO_ERROR(DFE_BADPTR, FAIL); if (vg->otag != DFTAG_VG) HGOTO_ERROR(DFE_ARGS, FAIL); /* Validate arguments */ /* Check given index */ if (attrindex < 0) HGOTO_ERROR(DFE_BADATTR, FAIL); /* invalid attribute index given */ /* Check attribute list; it's complicated here to work around the old/new-style attribute issue, see headers of Vnattrs2, Vattrinfo2 in src for details */ adjusted_index = attrindex; if (adjusted_index < vg->noldattrs) /* index of old-style attribute */ vg_alist = vg->old_alist; /* use old-attr list */ else if (adjusted_index >= vg->noldattrs && adjusted_index < (vg->nattrs + vg->noldattrs)) /* index of new-style attributes */ { /* Adjust the index to accommodate for the old-style attributes preceding the new-style attribute list */ adjusted_index = adjusted_index - vg->noldattrs; vg_alist = vg->alist; /* use new-attr list */ } else /* not that many attrs */ HGOTO_ERROR(DFE_BADATTR, FAIL); if (vg_alist == NULL) /* Bad attr list */ HGOTO_ERROR(DFE_BADATTR, FAIL); /* Get access to the vdata storing the attr, and obtain requested info */ if ((vsid = VSattach(fid, (int32)vg_alist[attrindex].aref, "r")) == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); if (HAatom_group(vsid) != VSIDGROUP) HGOTO_ERROR(DFE_ARGS, FAIL); if (NULL == (vs_inst = (vsinstance_t *)HAatom_object(vsid))) HGOTO_ERROR(DFE_NOVS, FAIL); if (NULL == (vs = vs_inst->vs)) HGOTO_ERROR(DFE_BADATTR, FAIL); /* If this vdata is not storing an attribute, it shouldn't have been passed to this function */ if (strcmp(vs->vsclass, _HDF_ATTRIBUTE) != 0) HGOTO_ERROR(DFE_BADATTR, FAIL); w = &(vs->wlist); /* This vdata should have only 1 field */ /* if (w->n != 1 || strcmp(w->name[0], ATTR_FIELD_NAME)) <- commented out Note: ATTR_FIELD_NAME cannot be used here because hdfeos sets fieldname to "AttrValues", not ATTR_FIELD_NAME. -BMR, 2014/12/01 */ if (w->n != 1) HGOTO_ERROR(DFE_BADATTR, FAIL); if (size) *size = w->order[0] * (DFKNTsize(w->type[0])); if (FAIL == VSdetach(vsid)) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: return ret_value; } /* Vattrhdfsize */ hdf4-hdf4.3.1/mfhdf/dumper/hdp.h000066400000000000000000001112151503061704500163340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef DUMPER_HDP_H #define DUMPER_HDP_H #include "hdf.h" #include "hfile_priv.h" /* Global Variables */ extern intn vinit_done; /* Global Definitions */ #define MAXCHOICES 50 #ifndef MAXNAMELEN #define MAXNAMELEN 100 #endif #define MAXCLASSLEN 100 #define MAXPERLINE 65 /* max # of chars per line in the output */ #define MAXRANK 100 #define MAXFNLEN 256 #define CONDENSE 1 #define NO_SPECIFIC -1 /* no specific datasets are requested */ #define ATTR_INDENT 0 /* # of spaces in front of attribute data */ #define ATTR_CONT_INDENT \ 25 /* # of spaces in front of attribute data \ on a continuous line */ #define DATA_INDENT 16 /* # of spaces in front of dataset data */ #define DATA_CONT_INDENT \ 16 /* # of spaces in front of dataset data \ on a continuous line */ /* Free a pointer, then set it to NULL */ #define SAFE_FREE(ptr) \ { \ free(ptr); \ ptr = NULL; \ } /* ERROR_GOTO_n macros are used to facilitate error printing. Each macro prints the given message to the stderr, then uses the HDF library macro HGOTO_DONE to set the variable ret_value to FAIL and jump to label "done" ERROR_GOTO_0 is used for fprintf with no parameters. ERROR_GOTO_1 is used for fprintf with 1 parameter. ERROR_GOTO_2 is used for fprintf with 2 parameters. ERROR_GOTO_3 is used for fprintf with 3 parameters. ERROR_GOTO_4 is used for fprintf with 4 parameters. ERROR_GOTO_5 is used for fprintf with 5 parameters. ERROR_GOTO_6 is used for fprintf with 6 parameters. */ #define ERROR_GOTO_0(txt) \ { \ fprintf(stderr, "\nHDP ERROR>>> %s", txt); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_1(txt, par1) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_2(txt, par1, par2) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_3(txt, par1, par2, par3) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_4(txt, par1, par2, par3, par4) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3, par4); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_5(txt, par1, par2, par3, par4, par5) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3, par4, par5); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } #define ERROR_GOTO_6(txt, par1, par2, par3, par4, par5, par6) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3, par4, par5, par6); \ fprintf(stderr, ".\n"); \ HGOTO_DONE(FAIL); \ } /* ERROR_CONT_n macros are used to facilitate error printing. Each macro prints the given message to the stderr, then "continue"s. Note: at this time, set ret_value to FAIL, but if it turns out that there are cases where ret_value should be SUCCEED, then add another argument 'ret' (=FAIL/SUCCEED) to set ret_value to appropriate value. Note: having extra \n after Continued. separates the following output from the error messages. ERROR_CONT_0 is used for fprintf with no parameters. ERROR_CONT_1 is used for fprintf with 1 parameter. ERROR_CONT_2 is used for fprintf with 2 parameters. ERROR_CONT_3 is used for fprintf with 3 parameters. ERROR_CONT_4 is used for fprintf with 4 parameters. ERROR_CONT_5 is used for fprintf with 5 parameters. ERROR_CONT_6 is used for fprintf with 6 parameters. */ #define ERROR_CONT_0(txt) \ { \ fprintf(stderr, "\nHDP ERROR>>> ", txt); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ continue; \ } #define ERROR_CONT_1(txt, par1) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ continue; \ } #define ERROR_CONT_2(txt, par1, par2) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ continue; \ } #define ERROR_CONT_3(txt, par1, par2, par3) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ continue; \ } #define ERROR_CONT_4(txt, par1, par2, par3, par4) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3, par4); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ continue; \ } /* ERROR_CONT_END is used to facilitate error handling when an error occurs on a vdata. It prints the provided error message to the stderr, end access to the vdata, then continue */ #define ERROR_CONT_END(txt, par1, par2, vd_id) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2); \ fprintf(stderr, ". Continued.\n\n"); \ ret_value = FAIL; \ VSdetach(vd_id); \ vd_id = FAIL; /* reset */ \ continue; \ } /* ERROR_BREAK_n macros are used to facilitate error printing. Each macro prints the given message to the stderr, then sets the variable ret_value to the given value and "break"s. ERROR_BREAK_0 is used for fprintf with no parameters. ERROR_BREAK_1 is used for fprintf with 1 parameter. ERROR_BREAK_2 is used for fprintf with 2 parameters. ERROR_BREAK_3 is used for fprintf with 3 parameters. ERROR_BREAK_4 is used for fprintf with 4 parameters. ERROR_BREAK_5 is used for fprintf with 5 parameters. ERROR_BREAK_6 is used for fprintf with 6 parameters. */ #define ERROR_BREAK_0(txt, ret) \ { \ fprintf(stderr, "\nHDP ERROR>>> %s", txt); \ fprintf(stderr, ".\n"); \ ret_value = ret; \ break; \ } #define ERROR_BREAK_1(txt, par1, ret) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1); \ fprintf(stderr, ".\n"); \ ret_value = ret; \ break; \ } #define ERROR_BREAK_2(txt, par1, par2, ret) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2); \ fprintf(stderr, ".\n"); \ ret_value = ret; \ break; \ } #define ERROR_BREAK_3(txt, par1, par2, par3, ret) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3); \ fprintf(stderr, ".\n"); \ ret_value = ret; \ break; \ } #define ERROR_BREAK_4(txt, par1, par2, par3, par4, ret) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3, par4); \ fprintf(stderr, ".\n"); \ ret_value = ret; \ break; \ } /* ERROR_NOTIFY macros are used to display a failure but does not do anything else except setting ret_value to FAIL so that the failure can be traced back to the caller. */ #define ERROR_NOTIFY_2(txt, par1, par2) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2); \ fprintf(stderr, ".\n"); \ ret_value = FAIL; \ } #define ERROR_NOTIFY_3(txt, par1, par2, par3) \ { \ fprintf(stderr, "\nHDP ERROR>>> "); \ fprintf(stderr, txt, par1, par2, par3); \ fprintf(stderr, ".\n"); \ ret_value = FAIL; \ } /* CHECK_POS makes sure that number is > 0 so we are not going to allocate 0 elements. Macro is used here instead of function call so if we decide to change exit(1) to goto done and return FAIL, it will be possible */ #define CHECK_POS(number, buf_size_name, func_name) \ { \ if (number <= 0) { \ fprintf(stderr, "in %s: Attempting to allocate 0 items using '%s'!\n", func_name, \ buf_size_name); \ exit(1); \ } \ } /* CHECK_ALLOC macro validates that 'buffer' has been successfully allocated; if the allocation fails, exit the application after displaying an appropriate message. Macro is used here to simplify the validation and to facilitate maintenance, i.e., if decide to change from exit(1) to goto "done" and return with FAIL in all allocation failure cases, it will be possible. */ #define CHECK_ALLOC(buffer, buf_name, func_name) \ { \ if (buffer == NULL) { \ fprintf(stderr, "in %s: space allocation for %s failed. Terminated!\n", func_name, buf_name); \ exit(1); \ } \ } /* Global options structure */ typedef struct { intn help; /* Print help on this command */ } dump_opt_t; typedef enum { OTAG, OFILE, OGROUP, ONAME } sort_t; /* The order tag/refs are sorted */ /* 'list' command option structure */ typedef struct { sort_t order; /* The sort order tag/refs are printed in */ enum { VSHORT, VLONG, VDEBUG } verbosity; /* verbosity level of list */ enum { LNONE, LTAGNUM, LTAGNAME, LGROUP } limit; /* How to limit tag/refs */ intn class; /* Whether to dump class information */ intn name; /* Whether to dump name information */ intn desc; /* Whether to dump description information */ intn spec; /* Whether to dump special element information */ intn group; /* Whether to dump group information */ uint16 limit_tag; /* tag # to limit search to */ char *limit_name; /* tag name to limit search to */ } list_info_t; /* Which dataset to dump */ /* BMR: added defined values to fix exclusive problem - 1/23/99 */ typedef enum { DALL = 0, DINDEX = 1, DREFNUM = 2, DNAME = 4, DCLASS = 8, DFIELDS = 16 } filter_t; /* What type of information being stored */ typedef enum { INVALID = 0, IS_INDEX, IS_REFNUM, IS_NAME, IS_CLASS, IS_FIELD } info_type_t; /* Which contents to dump */ typedef enum { DVERBOSE, DHEADER, DDATA } content_t; /* What kind of data to dump to file */ typedef enum { DASCII, DBINARY } file_format_t; /* BMR: numerical filter structure; used to hold a list of indices or reference numbers and the number of indices or reference numbers given - 1/23/99 */ typedef struct { int32 *num_list; int32 num_items; } number_filter_t; /* BMR: character filter structure; used to hold a list of names or class names and the number of names or class names given - 1/23/99 */ typedef struct { char **str_list; int32 num_items; } char_filter_t; typedef struct { int index; int refnum; char *name; char *classname; info_type_t type_of_info; } obj_chosen_t; /* 'dumpsds' command option structure */ /* BMR: added fields to hold indices, reference numbers, names, and classes separately - 1/23/99 */ typedef struct { filter_t filter; /* which data object to dump */ intn *filter_num; /* ref #'s or indices to use as filter */ char **filter_str; /* names or classes to use as filter */ number_filter_t by_index; /* data objects requested by index */ number_filter_t by_ref; /* data objects requested by reference number */ char_filter_t by_name; /* data objects requested by name */ char_filter_t by_class; /* data objects requested by class name */ char_filter_t by_field; /* data objects requested by field - only VD */ obj_chosen_t *all_types; /* list of all datasets chosen and in the order specified by the user */ int32 num_chosen; /* number of items specified at command line, which can be different from the number of objects being printed due to multiple objects of the same name or class name (-1==NO_SPECIFIC) */ content_t contents; /* what contents to dump */ intn keep_order; /* whether to dump the datasets in the same order as specified by the user */ intn dump_to_file; /* whether to dump to a file */ file_format_t file_format; /* Is data written in ASCII or binary */ intn as_stream; /* whether carriage return added to output data lines */ intn clean_output; /* whether to print space characters as they are or to print in \digit format */ intn firstln_indent; /* col# where data starts on the first line*/ intn contln_indent; /* col# where data continues on the next line*/ char file_name[MAXFNLEN]; /* Name of file to dump into */ char ifile_name[MAXFNLEN]; /* Name of input file being processed */ intn print_pal; /* for GR only: TRUE if option -p selected */ gr_interlace_t interlace; /* user's choice of interlace mode to print data in */ intn no_lattr_data; /* GR & SD only: TRUE if option -l selected */ intn no_gattr_data; /* GR & SD only: TRUE if option -g selected */ intn file_type; /* netCDF, HDF, or other, which hdp doesn't process */ } dump_info_t; /* Filename list structure */ typedef struct { intn max_files; /* the number of files in the file list */ intn curr_file; /* the current file */ char **file_arr; /* pointer to the filename information */ } filelist_t; /* Group info structure */ typedef struct { intn max_dds; /* the number of DDs in the group */ intn curr_dd; /* The current DD */ DFdi *dd_arr; /* array to hold the DDs in the group */ } groupinfo_t; /* DD info structure */ typedef struct { uint16 tag, ref; /* tag and ref of object */ int32 offset, length; /* offset and length of object in file */ int32 index; /* index of the object in the file */ uintn is_group : 1, /* flag to indicate item is a group */ is_special : 1, /* flag to indicate item is a special element */ has_label : 1, /* flag to indicate item has a label */ has_desc : 1; /* flag to indicate item has a desc. */ groupinfo_t *group_info; /* pointer to group information */ sp_info_block_t *spec_info; /* pointer to special element information */ } objinfo_t; #define CHECK_SPECIAL 0x0001 /* Look for spec. elem. when building dd list */ #define CHECK_GROUP 0x0002 /* Look for groups when building dd list */ #define CHECK_LABEL 0x0004 /* Look for anno. labels when building dd list */ #define CHECK_DESC 0x0008 /* Look for anno. desc. when building dd list */ /* DD list structure */ typedef struct { intn max_obj; /* the number of dds in the obj list */ intn curr_obj; /* the current obj */ uint32 options; /* storage for options used to build the dd list */ objinfo_t **srt_obj_arr; /* the sorted dd/object information array */ objinfo_t *raw_obj_arr; /* the raw dd/object information array */ } objlist_t; /* hdp_vd.c */ /* Vdata information: used to hold various information of a vdata to facilitate parameter passing */ typedef struct { int32 index; /* vdata index */ int32 nvf; /* number of records in the vdata */ int32 interlace; /* interlace mode of the vdata */ int32 vsize; /* record size of the vdata */ int32 ref; /* vdata ref# */ int32 tag; /* vdata tag */ char clss[VSNAMELENMAX + 1]; /* vdata class */ char name[VSNAMELENMAX + 1]; /* vdata name */ } vd_info_t; /* hdp_vg.c */ #define NUM_VGS 20; typedef struct { int32 index; int32 displayed; int32 treedisplayed; /* BMR: added to do the loop - 01/16/99 */ char *vg_name; /* vgroup name, variable length - 10/26/06 */ int32 n_entries; /* added for convenience - 10/26/06 */ char **children; char **type; } vg_info_t; /* hdp.c */ extern int32 VShdfsize(int32 vkey, char *fields); extern intn VSattrhdfsize(int32 vsid, int32 findex, intn attrindex, int32 *size); extern intn Vattrhdfsize(int32 vsid, intn attrindex, int32 *size); /* hdp_list.c */ /*extern intn print_data_annotations(const char *fname, int32 an_id, ann_type annot_type, uint16 tag, uint16 * ref);*/ extern intn print_all_data_labels(const char *fname, int32 an_id); extern intn print_all_data_descs(const char *fname, int32 an_id); extern intn do_list(intn curr_arg, intn argc, char *argv[], int help); extern intn print_all_file_labels(const char *fname, int32 an_id); extern intn print_file_descs(const char *f_name, int32 an_id); /*intn print_annots_by_object( const char *fname, int32 an_id, ann_type annot_type, uint16 tag, uint16 ref); intn print_annots_in_file( int32 an_id, char* fname, int32 n_annotations, ann_type annot_type ); */ intn print_all_file_descs(const char *fname, list_info_t *list_opts, /* for print_SDattrs */ int32 an_id); intn print_data_labels(const char *fname, int32 an_id, uint16 tag, uint16 ref); intn print_data_descs(const char *fname, int32 an_id, uint16 tag, uint16 ref); /* hdp_sds.c */ void dumpsds_usage(intn argc, char *argv[]); intn parse_dumpsds_opts(dump_info_t *dumpsds_opts, intn *curr_arg, intn argc, char *argv[]); intn do_dumpsds(intn curr_arg, intn argc, char *argv[], intn help); intn dsd(dump_info_t *dumpsds_opts, intn curr_arg, intn argc, char *argv[]); int32 sdsdumpfull(int32 sds_id, dump_info_t *dumpsds_opts, int32 rank, int32 dimsizes[], int32 nt, FILE *fp); intn printSDS_ASCII(int32 sd_id, dump_info_t *dumpsds_opts, int32 sds_index, FILE *fp); intn printSDS_BINARY(int32 sd_id, dump_info_t *dumpsds_opts, int32 sds_index, FILE *fp); intn get_SDSindex_list(int32 sd_id, dump_info_t *dumpsds_opts, int32 **sds_chosen, intn *index_error); char *comp_method_txt(comp_coder_t comp_type); intn option_mask_string(int32 options_mask, char *opt_mask_strg); intn print_comp_info(FILE *fp, int32 sds_id, comp_coder_t *comp_type); void resetSDS(int32 *sds_id, int32 sds_index, char *curr_file_name); /* hdp_rig.c */ extern intn do_dumprig(intn curr_arg, intn argc, char *argv[], intn help); /* hdp_vg.c */ extern intn do_dumpvg(intn curr_arg, intn argc, char *argv[], intn help); extern intn print_data_annots(int32 file_id, const char *file_name, int32 tag, int32 ref); extern intn print_file_annotations(int32 file_id, const char *file_name); void print_fields(char *fields, char *field_title, FILE *fp); /* hdp_vd.c */ intn do_dumpvd(intn curr_arg, intn argc, char *argv[], intn help); intn parse_dumpvd_opts(dump_info_t *dumpvd_opts, intn *curr_arg, intn argc, char *argv[], char *flds_chosen[MAXCHOICES], int *dumpallfields); /* hdp_gr.c */ intn do_dumpgr(intn curr_arg, intn argc, char *argv[], intn help); intn parse_dumpgr_opts(dump_info_t *dumpgr_opts, intn *curr_arg, intn argc, char *argv[]); /* hdp_dump.c */ extern intn fmtchar(void *x, file_format_t ft, FILE *ofp); extern intn fmtuchar8(void *x, file_format_t ft, FILE *ofp); extern intn fmtbyte(unsigned char *x, file_format_t ft, FILE *ofp); extern intn fmtint(void *x, file_format_t ft, FILE *ofp); extern intn fmtshort(void *x, file_format_t ft, FILE *ofp); extern intn fmtint8(void *x, file_format_t ft, FILE *ofp); extern intn fmtuint8(void *x, file_format_t ft, FILE *ofp); extern intn fmtint16(void *x, file_format_t ft, FILE *ofp); extern intn fmtuint16(void *x, file_format_t ft, FILE *ofp); extern intn fmtint32(void *x, file_format_t ft, FILE *ofp); extern intn fmtuint32(void *x, file_format_t ft, FILE *ofp); extern intn fmtfloat32(void *x, file_format_t ft, FILE *ofp); extern intn fmtfloat64(void *x, file_format_t ft, FILE *ofp); extern intn dumpfull(int32 nt, dump_info_t *dump_opts, int32 cnt, void *databuf, FILE *ofp, intn indent, intn cont_indent); extern intn dumpclean(int32 nt, dump_info_t *dump_opts, int32 cnt, void *databuf, FILE *ofp); extern int32 dumpGR_SDattr(int32 nt, dump_info_t *dump_opts, int32 cnt, void *databuf, FILE *ofp); /* show.c */ extern int32 dumpvd(int32 vd, file_format_t ft, int data_only, FILE *fp, char separator[2], int32 flds_indices[VSFIELDMAX], int dumpallfields); extern intn dumpattr(int32 vid, int32 findex, intn isvs, file_format_t ft, FILE *fp); /* hdp_util.c */ /* misc. functions */ void init_dump_opts(dump_info_t *dump_opts); void parse_number_opts(char *argv[], int *curr_arg, number_filter_t *filter); void parse_string_opts(char *argv[], int *curr_arg, char_filter_t *filter); void parse_value_opts(char *argv[], int *curr_arg, dump_info_t **dump_opts, info_type_t info_type); extern char *tagnum_to_name(intn num); extern intn tagname_to_num(const char *name); extern void sort(int32 *chosen, int32 choices); int sort_obj_list_by_tag(const void *, const void *); int int32_compare(const void *, const void *); /* filename list functions */ extern filelist_t *make_file_list(intn curr_arg, intn argc, char *argv[]); extern char *get_next_file(filelist_t *f_list, intn advance); /* memory management functions */ extern int32 *free_num_list(int32 *num_list); extern char **free_str_list(char **str_list, int32 num_items); extern vg_info_t **free_vginfo_list(vg_info_t **list, int32 num_items); extern vg_info_t *free_node_vg_info_t(vg_info_t *aNode); void free_obj_chosen_t_list(obj_chosen_t **nodelist, int32 num_items); extern void free_file_list(filelist_t *f_list); /* group list functions */ extern groupinfo_t *make_group_list(int32 fid, uint16 tag, uint16 ref); extern DFdi *get_next_group(groupinfo_t *g_list, intn advance); extern int32 get_group_max(groupinfo_t *g_list); extern void free_group_list(groupinfo_t *g_list); /* object list functions */ extern objlist_t *make_obj_list(int32 fid, uint32 options); extern objinfo_t *get_next_obj(objlist_t *o_list, intn advance); extern objinfo_t *goto_nth_obj(objlist_t *o_list, intn n); extern void reset_obj_list(objlist_t *o_list); extern void resetBuff(void **buf); extern void free_obj_list(objlist_t *o_list); extern void sort_obj_list(objlist_t *o_list, sort_t sort_type); extern intn print_SDattrs(int32 sd_id, FILE *fp, int32 n_file_attrs, dump_info_t *dumpsds_opts); extern intn print_SDSattrs(int32 sds_id, int32 nattrs, FILE *fp, dump_info_t *dumpsds_opts); extern intn print_GRattrs(int32 gr_id, int32 n_file_attrs, FILE *fp, dump_info_t *dumpgr_opts); extern intn print_RIattrs(int32 ri_id, intn ri_index, int32 nattrs, FILE *fp, dump_info_t *dumpgr_opts); extern void alloc_index_list(int32 **index_list, int32 num_chosen); #define PPSTR(name, str) \ { \ printf(" %s: %s\n", name, str); \ } #define PPNUM(name, num) \ { \ printf(" %s: %d\n", name, num); \ } #define PSTR(name, str) \ { \ fprintf(stderr, " %s: %s\n", name, str); \ } #define PNUM(name, num) \ { \ fprintf(stderr, " %s: %d\n", name, num); \ } /***************** end remove when done ******************/ #endif /* DUMPER_HDP_H */ hdf4-hdf4.3.1/mfhdf/dumper/hdp.txt000066400000000000000000000214741503061704500167330ustar00rootroot00000000000000 hdp -- HDF dumper NAME hdp - HDF dumper SYNOPSIS hdp [hdp options] hdp command [command options] DESCRIPTION hdp is a command line utility designed for quick display of contents and data of HDF3.3 objects. It can list the contents of hdf files at various levels with different details. It can also dump the data of one or more specific objects in the file. HDP OPTIONS Currently, there is only one option. -H Display usage information about the specified command. If no command is specified, -H lists all available commands. HDP COMMANDS hdp currently has two types of commands: list and dump. Other types of commands such as those for editing may be added in the future. hdp list lists contents of files in hdp dumpsds displays data of NDGs and SDGs in the listed files. hdp dumpvd displays data of vdatas in the listed files. hdp dumpvg displays data of objects in vgroups in the listed files. hdp dumprig displays data of RIGs in the listed files. hdp dumpgr displays data of general RIGs in the listed files. HDP COMMAND OPTIONS (Note: options preceded by an * have not yet been implemented.) hdp list [format options] [content ops] [filter ops] [order ops] -------------------------------------------------------------------------- Format options decide how the info of objects will be presented on the screen. -s (short format) under each tag #, all ref's of that tag are listed in one or more lines, same as the output of hdfls. (default) -l (long format) one object per line. Each line contains tag-name, tag/ref and the index of this tag in the file.(e.g., the ith NDG in the file). -d debug format, one object per line. Each line contains tag_name, tag/ref, index, offset, and length, same as the output of hdfls -d. no tagname tag ref index/tag offset length -- ------- --- --- --------- ------ ------ 1 DFTAG_NT 106 2 1 2 DFTAG_SD 701 3 1 ... Content options allow contents be displayed. -n display the name or label of the object, if there is any. -n puts you in -l format automatically. -c display the class of the object, if there is any. -l format. -a display description of the object, if there is any. -l format. Filter options select certain type of objects to display, default is all. -g display groups only. Objects which do not belong to any group will not be displayed. Nested groups will be displayed in tree format. -t display objects with specified tag number . e.g. 720 for NDG. -t display objects with specified tag name. Order options sort the output list in different orders. -ot by tag # (default) -of by the order in file DDlist. -og by group -on by name(label) hdp dumpsds [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which SDS to dump. -i dump SDS's with indices specified in ; indices correspond to the order of the SDS in the file -r dump SDS's with reference numbers specified in -n dump SDS's with names specified in -a dump all SDS's in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref Output options -o specify fn as output file name * -b binary file -t ascii text file (default) Note: any combination of an option from each of the three categories can be used; but no more than one option from one category is allowed. hdp dumpvd [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which vdata to dump. -i dump vdatas with indices in ; indices correspond to the order of the vdatas in the files -r dump vdatas with reference numbers specified in -n dump vdatas with names specified in -c dump vdatas with classes specified in -a dump all vdatas in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref -f dump data of specified fields Output options -o specify fn as output file name * -b binary file -t text ascii file (default) hdp dumpvg [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which vgroups to dump. -i dump vgroups with indices specified in ; indices correspond to the order of the vgroups specified in the files -r dump vgroups with reference numbers specified in -n dump vgroups with names specified in -c dump vgroups with classes specified in -a dump all vgroups in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only Output options -o specify fn as output file name * -b binary file -t text ascii file (default) Note: Unless the "-d" option is specified, a graphical representation of the file will be given after the data has been displayed. hdp dumprig [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which RIG to dump. -i dump RIGs with indices specified in ; indices correspond to the order of the RIGs specified in the files -r dump RIGs with reference numbers specified in -a dump all RIGs in the file. (default) -m 8|24 dump the RIGs of 8-bit or 24-bit. By default all RIGs in the file will be dumped Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only Output options -o specify fn as output file name -b binary file -t text ascii file (default) hdp dumpgr [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which general RIGs to dump. -i dump general RIG's with indices specified in ; indices correspond to the order of the RIG in the file -r dump general RIG's with reference numbers specified in -n dump general RIG's with names specified in -a dump all general RIG's in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref Output options -o specify fn as output file name -b binary file -t ascii text file (default) Note: any combination of an option from each of the three categories can be used; but no more than one option from one category is allowed. hdf4-hdf4.3.1/mfhdf/dumper/hdp_dump.c000066400000000000000000000406441503061704500173630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "hdp.h" #include #include #define CARRIAGE_RETURN 13 #define LINE_FEED 10 #define HORIZONTAL_TAB 9 typedef intn (*fmtfunct_t)(void *, file_format_t, FILE *); fmtfunct_t select_func(int32 nt); /* * printing functions copied from vshow.c and used by sdsdumpfull(). * * Please pay attention to the data types used in the print/output routines. * Make sure the data type being dumped matches arguments in 'fwrite()' .etc. * */ intn fmtbyte(unsigned char *x, /* assumption: byte is the same as unsigned char */ file_format_t ff, FILE *ofp) { unsigned char s; if (ff == DASCII) return (fprintf(ofp, "%02x ", (unsigned)*x)); else { s = (unsigned char)*x; return (fwrite(&s, sizeof(unsigned char), 1, ofp)); } } intn fmtint8(void *x, /* assumption: int8 is same as signed char */ file_format_t ff, FILE *ofp) { int8 s; if (ff == DASCII) return (fprintf(ofp, "%d", (int)*((signed char *)x))); else { s = (int8) * ((signed char *)x); return (fwrite(&s, sizeof(int8), 1, ofp)); } } intn fmtuint8(void *x, /* assumption: uint8 is same as unsigned char */ file_format_t ff, FILE *ofp) { uint8 s; if (ff == DASCII) return (fprintf(ofp, "%u", (unsigned)*((unsigned char *)x))); else { s = (uint8) * ((unsigned char *)x); return (fwrite(&s, sizeof(uint8), 1, ofp)); } } intn fmtint16(void *x, file_format_t ff, FILE *ofp) { int16 s; memcpy(&s, x, sizeof(int16)); if (ff == DASCII) return (fprintf(ofp, "%d", (int)s)); else return (fwrite(&s, sizeof(int16), 1, ofp)); } intn fmtuint16(void *x, file_format_t ff, FILE *ofp) { uint16 s; memcpy(&s, x, sizeof(uint16)); if (ff == DASCII) return (fprintf(ofp, "%u", (unsigned)s)); else return (fwrite(&s, sizeof(uint16), 1, ofp)); } intn fmtchar(void *x, file_format_t ff, FILE *ofp) { (void)ff; if (isprint(*(unsigned char *)x)) { putc(*((char *)x), ofp); return (1); } else { putc('\\', ofp); return (1 + fprintf(ofp, "%03o", *((uchar8 *)x))); } } intn fmtuchar8(void *x, /* assumption: uchar8 is same as unsigned char */ file_format_t ff, FILE *ofp) { uchar8 s; if (ff == DASCII) /* replace %o with %d by Elena's suggestion: it doesn't make sense to print in octal - BMR 06/23/00 */ return (fprintf(ofp, "%d", *((uchar8 *)x))); else { s = (uchar8) * ((unsigned char *)x); return (fwrite(&s, sizeof(uchar8), 1, ofp)); } } intn fmtint(void *x, /* assumption: int is same as 'intn' */ file_format_t ff, FILE *ofp) { intn i; memcpy(&i, x, sizeof(intn)); if (ff == DASCII) return (fprintf(ofp, "%d", (int)i)); else return (fwrite(&i, sizeof(intn), 1, ofp)); } #define FLOAT32_EPSILON ((float32)1.0e-20) intn fmtfloat32(void *x, file_format_t ff, FILE *ofp) { float32 fdata; memcpy(&fdata, x, sizeof(float32)); if (ff == DASCII) { if (fabsf(fdata - FILL_FLOAT) <= FLOAT32_EPSILON) return (fprintf(ofp, "FloatInf")); else return (fprintf(ofp, "%f", (double)fdata)); } else { return (fwrite(&fdata, sizeof(float32), 1, ofp)); } } intn fmtint32(void *x, file_format_t ff, FILE *ofp) { int32 l; memcpy(&l, x, sizeof(int32)); if (ff == DASCII) return (fprintf(ofp, "%ld", (long)l)); else return (fwrite(&l, sizeof(int32), 1, ofp)); } intn fmtuint32(void *x, file_format_t ff, FILE *ofp) { uint32 l; memcpy(&l, x, sizeof(uint32)); if (ff == DASCII) return (fprintf(ofp, "%lu", (unsigned long)l)); else return (fwrite(&l, sizeof(uint32), 1, ofp)); } intn fmtshort(void *x, file_format_t ff, FILE *ofp) { short s; memcpy(&s, x, sizeof(short)); if (ff == DASCII) return (fprintf(ofp, "%d", (int)s)); else return (fwrite(&s, sizeof(short), 1, ofp)); } #define FLOAT64_EPSILON ((float64)1.0e-20) intn fmtfloat64(void *x, file_format_t ff, FILE *ofp) { float64 d; memcpy(&d, x, sizeof(float64)); if (ff == DASCII) { if (fabs(d - FILL_DOUBLE) <= FLOAT64_EPSILON) return (fprintf(ofp, "DoubleInf")); else return (fprintf(ofp, "%f", d)); } else { return (fwrite(&d, sizeof(float64), 1, ofp)); } } fmtfunct_t select_func(int32 nt) { switch (nt & 0xff) { case DFNT_CHAR: return (fmtchar); break; case DFNT_UCHAR: return (fmtuchar8); break; case DFNT_UINT8: return (fmtuint8); break; case DFNT_INT8: return (fmtint8); break; case DFNT_UINT16: return (fmtuint16); break; case DFNT_INT16: return (fmtint16); break; case DFNT_UINT32: return (fmtuint32); break; case DFNT_INT32: return (fmtint32); break; case DFNT_FLOAT32: return (fmtfloat32); break; case DFNT_FLOAT64: return (fmtfloat64); break; default: fprintf(stderr, "HDP does not support type [%d]. Use signed character printing function.\n", (int)nt); return (fmtchar); } /* end switch */ } /* select_func */ intn dumpfull(int32 nt, dump_info_t *dump_opts, int32 cnt, /* number of items in 'databuf' ? */ void *databuf, FILE *ofp, intn indent, /* indentation on the first line */ intn cont_indent) /* indentation on the continuous lines */ { intn i; void *bufptr = NULL; fmtfunct_t fmtfunct = NULL; int32 off; intn cn; file_format_t ff = dump_opts->file_format; intn ret_value = SUCCEED; /* check inputs */ if (NULL == databuf) ERROR_GOTO_1("in %s: Data buffer to be dumped is NULL", "dumpfull"); if (NULL == ofp) ERROR_GOTO_1("in %s: Output file pointer is NULL", "dumpfull"); /* select the appropriate function to print data elements depending on the data number type */ fmtfunct = select_func(nt); /* assign to variables used in loop below (?)*/ bufptr = databuf; off = DFKNTsize(nt | DFNT_NATIVE); /* what is offset for data type */ if (off == FAIL) ERROR_GOTO_2("in %s: Failed to find native size of type [%d]", "dumpfull", (int)nt); cn = cont_indent; /* current column number, cont_indent because that's where the data actually starts */ /* check if we're dumping data in ASCII or Binary mode. */ if (ff == DASCII) { /* print spaces in front of data on the first line */ for (i = 0; i < indent; i++) putc(' ', ofp); if (nt != DFNT_CHAR) { for (i = 0; i < cnt && bufptr != NULL; i++) { cn += fmtfunct(bufptr, ff, ofp); /* dump item to file */ bufptr = (char *)bufptr + off; putc(' ', ofp); cn++; /* temporary fix bad alignment algo in dumpfull by adding i < cnt-1 to remove extra line - BMR 4/10/99 */ if (!dump_opts->as_stream) /* add \n after MAXPERLINE chars */ if (cn > MAXPERLINE && i < cnt - 1) { putc('\n', ofp); /* print spaces in front of data on the continuous line */ for (cn = 0; cn < cont_indent; cn++) putc(' ', ofp); } /* end if */ } /* end for every item in buffer */ } else /* DFNT_CHAR */ { for (i = 0; i < cnt && bufptr != NULL; i++) { cn += fmtfunct(bufptr, ff, ofp); /* dump item to file */ bufptr = (char *)bufptr + off; if (!dump_opts->as_stream) /* add \n after MAXPERLINE chars */ if (cn > MAXPERLINE) { putc('\n', ofp); /* print spaces in front of data on the continuous line */ for (cn = 0; cn < cont_indent; cn++) putc(' ', ofp); } /* end if */ } /* end for every item in buffer */ } /* end else DFNT_CHAR */ putc('\n', ofp); /* newline after a dataset or attribute */ } /* end DASCII */ else /* Binary */ { for (i = 0; i < cnt && bufptr != NULL; i++) { cn += fmtfunct(bufptr, ff, ofp); /* dump item to file */ bufptr = (char *)bufptr + off; /* increment by offset? */ /* cn++; I don't see any reason of this increment being here 9/4/00*/ } /* end for all items in buffer */ } done: return ret_value; } /* dumpfull */ intn dumpclean(int32 nt, dump_info_t *dump_opts, int32 cnt, /* number of items in 'databuf' ? */ void *databuf, FILE *ofp) { intn i; void *bufptr = NULL; int32 off; intn cn; /* # of characters being printed on a line */ intn small_attr = TRUE; /* data buffer of the attribute is small */ intn is_null; /* TRUE if current character is a null */ char *tempptr; /* used in finding CR or LF in data buffer */ intn ret_value = SUCCEED; (void)dump_opts; /* check inputs */ if (NULL == databuf) ERROR_GOTO_1("in %s: Data buffer to be dumped is NULL", "dumpclean"); if (NULL == ofp) ERROR_GOTO_1("in %s: Output file pointer is NULL", "dumpclean"); /* assign to variables used in loop below (?)*/ bufptr = databuf; off = DFKNTsize(nt | DFNT_NATIVE); /* what is offset for data type */ if (off == FAIL) ERROR_GOTO_2("in %s: Failed to find native size of type [%d]", "dumpclean", (int)nt); /* set char counter to the col. #, where the first attr value will be printed in the case it is printed on the same line with "Value =" */ cn = ATTR_CONT_INDENT; /* this is the default */ is_null = FALSE; /* no null character is reached yet */ /*********************************************************************** * Requirement for printing attribute data (BMR - Oct 5, 2000): * if the attribute is large, print all data at the left most column; * otherwise (small attribute), print the first line of the data * next to the title, i.e. "Value = ", and indent the succeeding lines * ATTR_CONT_INDENT spaces. * Large attribute: buffer size is >= MAXPERLINE and the buffer * contains at least one \n (LF) or \r (CR). * Small attribute: buffer size is < MAXPERLINE or the buffer doesn't * contain any \n (LF) or \r (CR) among the data. ***********************************************************************/ /* Setting variables to prepare for the printing */ /* check the size of the buffer first, if it's shorter than MAXPERLINE then set flag small_attr. If the buffer size is larger, then proceed to the next segment which determines whether the attribute is small or large using the space char. criteria. */ if (cnt < MAXPERLINE) small_attr = TRUE; /* if the buffer contains at least one \n (LF) or \r (CR), reset flag small_attr to indicate the attribute is considered large. */ else /* space char. criteria */ { tempptr = strchr((char *)bufptr, '\n'); /* find the first linefeed */ if (tempptr != NULL) /* if an LF is found within the data buffer */ { putc('\n', ofp); /* start first line of data on the next line */ small_attr = FALSE; /* indicate data buffer contains CRs or LFs */ } else /* no LF, maybe CR is there */ { tempptr = strchr((char *)bufptr, '\r'); if (tempptr != NULL) /* if a CR is found within the data buffer */ { putc('\n', ofp); /* start first line of data on the next line */ small_attr = FALSE; /* indicate data buffer contains CRs or LFs */ } } } /* space char. criteria */ /* for each character in the buffer, print it accordingly */ for (i = 0; i < cnt; i++) { /* if number of characters printed on the current line reaches the max defined and the data buffer doesn't contain any LF or CR, print a new line and indent appropriately. Note: this statement is at the top here is to prevent the extra line and indentation when the last line of the attribute data just reached MAXPERLINE */ if (cn >= MAXPERLINE && small_attr) { putc('\n', ofp); for (cn = 0; cn < ATTR_CONT_INDENT; cn++) putc(' ', ofp); } /* end if */ /* if the current character is printable */ if (isprint(*(unsigned char *)bufptr)) { /* if there has been null characters before this non-null char, print "..." */ if (is_null) { cn = cn + fprintf(ofp, " ... "); is_null = FALSE; /* reset flag */ } /* then print the current non-null character */ putc(*((char *)bufptr), ofp); cn++; /* increment character count */ } /* when a \0 is reached, do not print it, set flag for its existence, so when a non-null char is reached, "..." can be printed */ else if (*(unsigned char *)bufptr == '\0') is_null = TRUE; /* when a space character, such as LF, CR, or tab, is reached, print it and increment the character counter accordingly */ else if (isspace(*(unsigned char *)bufptr)) { /* when either LF or CR exists in the data buffer, character counter, cn, is no longer needed since we don't need to keep track of the number of chars being printed on a line anymore. Yet, for logical purpose, reset it here just as a new line of data starts */ if (*(unsigned char *)bufptr == CARRIAGE_RETURN || *(unsigned char *)bufptr == LINE_FEED) { putc('\n', ofp); /* print \n for both CR and LF, otherwise, CR=^M*/ cn = 0; /* indicating that next data element will be printed at column 1 */ } else if (*(unsigned char *)bufptr == HORIZONTAL_TAB) { putc(*((char *)bufptr), ofp); cn = cn + 8; /* compensate for the tab, at most 8 chars */ } /* keep this else here to take care of other isspace cases, fill in more cases as need; if all cases are taken care of, remove else */ else { putc('\\', ofp); cn = cn + fprintf(ofp, "%03o", *((uchar8 *)bufptr)); } } else { /* this should be printed as binary instead of \digits */ putc('\\', ofp); cn = cn + fprintf(ofp, "%03o", *((uchar8 *)bufptr)); } /* advance the buffer pointer */ bufptr = (char *)bufptr + off; /* Move here to avoid internal compiler error on Cray J90 -QAK */ if (bufptr == NULL) break; } /* end for every item in buffer */ putc('\n', ofp); /* newline */ done: return ret_value; } /* dumpclean */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_gr.c000066400000000000000000001507071503061704500170300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "mfgr.h" #include "hdp.h" #include #define N_ENTRIES 256 /* number of elements of each color */ void dumpgr_usage(intn argc, char *argv[]); int32 get_RIindex_list(int32 gr_id, dump_info_t *dumpgr_opts, int32 **gr_chosen, intn *index_error); intn print_PaletteInfo(int32 ri_id, int32 num_pals, FILE *fp); intn print_Palette(int32 ri_id, int32 num_pals, FILE *fp, dump_info_t *dumpgr_opts); intn printGR_ASCII(int32 gr_id, dump_info_t *dumpgr_opts, int32 ndsets, int32 *gr_chosen, int32 num_ri_chosen, FILE *fp); intn printGR_BINARY(int32 gr_id, dump_info_t *dumpgr_opts, int32 num_ri_chosen, int32 ndsets, int32 *gr_chosen, FILE *fp); const char *Il_mode_text(gr_interlace_t interlace_mode); intn grdumpfull(int32 ri_id, dump_info_t *dumpgr_opts, int32 ncomps, int32 dimsizes[], int32 nt, FILE *fp); void closeGR(int32 *file_id, int32 *gr_id, int32 **gr_chosen); intn dgr(dump_info_t *dumpgr_opts, intn curr_arg, intn argc, char *argv[]); void dumpgr_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf("%s dumpgr [-a|-i |-r |-n ] [-m ] [-dhvcs] [-p|-pd] [-o " "] [-bx] \n", argv[0]); printf("\t-a\tDump all RIs in the file (default)\n"); printf("\t-i \tDump the th RIs in the file \n"); printf("\t-r \tDump the RIs with reference number \n"); printf("\t-n \tDump the RIs with name \n"); printf("\t-m \tDump data in interlace mode \n"); printf("\t-d\tDump data only, no tag/ref, formatted to input to hp2hdf\n"); printf("\t-h\tDump header only, no data - exclusive with -p and -pd\n"); printf("\t-v\tDump everything including all annotations (default)\n"); printf("\t-c\tPrint space characters as they are, not \\digit\n"); printf("\t-g\tDo not print data of file (global) attributes\n"); printf("\t-l\tDo not print data of local attributes\n"); printf("\t-s\tDo not add carriage return to a long line - dump it as a stream\n"); printf("\t-p\tDump palette's information and data - exclusive with -h\n"); printf("\t-pd\tDump palette's data only - exclusive with -h\n"); printf("\t-o \tOutput to file \n"); printf("\t-b\tBinary format of output\n"); printf("\t-x\tAscii text format of output (default)\n"); printf("\t\tList of hdf file names, separated by spaces\n"); } /* end list_usage() */ intn parse_dumpgr_opts(dump_info_t *dumpgr_opts, intn *curr_arg, intn argc, char *argv[]) { gr_interlace_t user_interlace; /* temporary store user's interlace mode */ intn ret_value = SUCCEED; /* traverse the command and process each option */ /* Allows '/' for options on Windows */ #ifdef H4_HAVE_WIN32_API while ((*curr_arg < argc) && ((argv[*curr_arg][0] == '-') || (argv[*curr_arg][0] == '/'))) #else while ((*curr_arg < argc) && (argv[*curr_arg][0] == '-')) #endif { switch (argv[*curr_arg][1]) { case 'a': /* dump all, default */ dumpgr_opts->filter = DALL; /* indicate that no specific images requested, will dump all */ dumpgr_opts->num_chosen = NO_SPECIFIC; (*curr_arg)++; break; case 'i': /* dump by index */ dumpgr_opts->filter |= DINDEX; /* set bit DINDEX */ (*curr_arg)++; /* parse and store the given indices in structure by_index */ parse_number_opts(argv, curr_arg, &dumpgr_opts->by_index); (*curr_arg)++; break; case 'r': /* dump by reference */ dumpgr_opts->filter |= DREFNUM; /* set bit DREFNUM */ (*curr_arg)++; /* parse and store the given ref numbers in structure by_ref */ parse_number_opts(argv, curr_arg, &dumpgr_opts->by_ref); (*curr_arg)++; break; case 'n': /* dump by names */ dumpgr_opts->filter |= DNAME; /* set bit DNAME */ (*curr_arg)++; /* parse and store the given names in structure by_name */ parse_string_opts(argv, curr_arg, &dumpgr_opts->by_name); (*curr_arg)++; break; case 'm': /* dump data in different interlace than at creation */ (*curr_arg)++; /* move forward to interlace option input */ user_interlace = atoi(argv[*curr_arg]); if (user_interlace == MFGR_INTERLACE_PIXEL || user_interlace == MFGR_INTERLACE_LINE || user_interlace == MFGR_INTERLACE_COMPONENT) dumpgr_opts->interlace = user_interlace; /* store interlace */ else { printf("Invalid input for interlace option %s\n", argv[*curr_arg]); HGOTO_DONE(FAIL); } (*curr_arg)++; /* move forward to next option */ break; case 'd': /* dump data only */ dumpgr_opts->contents = DDATA; (*curr_arg)++; break; case 'h': /* no annotations nor data */ /* make sure -p is not also given */ if (dumpgr_opts->print_pal) ERROR_GOTO_0("Option -h must not be used together with either -p or -pd"); dumpgr_opts->contents = DHEADER; (*curr_arg)++; break; case 'v': /* dump all info, default */ dumpgr_opts->contents = DVERBOSE; (*curr_arg)++; break; case 's': /* do not add carriage returns to output data lines */ dumpgr_opts->as_stream = TRUE; (*curr_arg)++; break; case 'c': /* print space characters as they are, not \\digit */ dumpgr_opts->clean_output = TRUE; (*curr_arg)++; break; case 'g': /* suppress file (global) attr data, print its header */ dumpgr_opts->no_gattr_data = TRUE; (*curr_arg)++; break; case 'l': /* suppress local attr data, only print its header */ dumpgr_opts->no_lattr_data = TRUE; (*curr_arg)++; break; case 'o': /* specify output file */ dumpgr_opts->dump_to_file = TRUE; /* Get file name */ strcpy(dumpgr_opts->file_name, argv[++(*curr_arg)]); (*curr_arg)++; break; case 'b': /* dump data in binary */ dumpgr_opts->file_format = DBINARY; (*curr_arg)++; break; case 'x': /* dump data in ascii, also default */ dumpgr_opts->file_format = DASCII; (*curr_arg)++; break; case 'p': /* dump palette data */ /* make sure -h is not also given */ if (dumpgr_opts->contents == DHEADER) ERROR_GOTO_0("Option -h must not be used together with either -p or -pd"); dumpgr_opts->print_pal = TRUE; /* if the current option is -pd, then pal data only is requested */ if (argv[*curr_arg][2] == 'd') /* \0 if only -p */ { dumpgr_opts->contents = DDATA; } (*curr_arg)++; break; default: /* invalid dumpgr option */ printf("HDP ERROR>>> Invalid dumpgr option %s\n", argv[*curr_arg]); HGOTO_DONE(FAIL); } /* end switch */ } /* end while */ /* add the number of images requested by index, by ref#, and by name to have a total number of requested images */ dumpgr_opts->num_chosen = dumpgr_opts->by_index.num_items + dumpgr_opts->by_ref.num_items + dumpgr_opts->by_name.num_items; done: if (ret_value == FAIL) { /* Failure cleanup */ /* free the lists for given indices, ref#s, and names if they had been allocated */ free_num_list(dumpgr_opts->by_index.num_list); free_num_list(dumpgr_opts->by_ref.num_list); free_str_list(dumpgr_opts->by_name.str_list, dumpgr_opts->by_name.num_items); } return ret_value; } /* end parse_dumpgr_opts */ intn grdumpfull(int32 ri_id, dump_info_t *dumpgr_opts, int32 ncomps, /* "ncomps" is the number of components in each element of the data set */ int32 dimsizes[], /* size of dimension "i". */ int32 nt, FILE *fp) { void *buf = NULL; int32 numtype, eltsz, read_nelts, *start = NULL, /* starting location to be read */ *edge = NULL, /* # of values to be read in each dim */ *stride = NULL; /* # of values to be skipped b/w readings */ intn status, ret_value = SUCCEED; /* Compute the number of the bytes for each value. */ numtype = nt & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE) * ncomps; read_nelts = dimsizes[0] * dimsizes[1]; /* make sure we are not allocating 0 elements, ie. number of elements is positive */ CHECK_POS(read_nelts, "read_nelts", "grdumpfull"); CHECK_POS(eltsz, "eltsz", "grdumpfull"); CHECK_POS(ncomps, "ncomps", "grdumpfull"); buf = (void *)malloc(read_nelts * eltsz); CHECK_ALLOC(buf, "buf", "grdumpfull"); start = (int32 *)malloc(2 * sizeof(int32)); CHECK_ALLOC(start, "start", "grdumpfull"); edge = (int32 *)malloc(2 * sizeof(int32)); CHECK_ALLOC(edge, "edge", "grdumpfull"); stride = (int32 *)malloc(2 * sizeof(int32)); CHECK_ALLOC(stride, "stride", "grdumpfull"); start[0] = start[1] = 0; edge[0] = dimsizes[0]; edge[1] = dimsizes[1]; stride[0] = 1; stride[1] = 1; /* if the user requests that the data is printed in a different interlace mode from that at the creation of the image, set the interlace mode of the image to be stored in memory when read */ if (dumpgr_opts->interlace != NO_SPECIFIC) { status = GRreqimageil(ri_id, dumpgr_opts->interlace); if (status == FAIL) ERROR_GOTO_2("in %s: GRreqimageil failed for ri_id(%d)", "grdumpfull", (int)ri_id); } status = GRreadimage(ri_id, start, stride, edge, buf); if (status == FAIL) ERROR_GOTO_2("in %s: GRreadimage failed for ri_id(%d)", "grdumpfull", (int)ri_id); /* if printing data only, print with no indentation */ if (dumpgr_opts->contents == DDATA) status = dumpfull(nt, dumpgr_opts, read_nelts * ncomps, buf, fp, 0, 0); else status = dumpfull(nt, dumpgr_opts, read_nelts * ncomps, buf, fp, DATA_INDENT, DATA_CONT_INDENT); if (status == FAIL) ERROR_GOTO_2("in %s: dumpfull failed for ri_id(%d)", "grdumpfull", (int)ri_id); done: free(edge); free(start); free(stride); free(buf); return ret_value; } /* grdumpfull */ /* compose the list of indices of the requested vgroups although some vgroups are requested by ref# or name. The routine returns: - the number of vgroups to be processed, or - NO_SPECIFIC if all vgroups are to be processed, or - 0 if none. If there are any errors, the parameter index_error will return TRUE */ int32 get_RIindex_list(int32 gr_id, dump_info_t *dumpgr_opts, int32 **gr_chosen, /* array of indices of RIs to be processed */ intn *index_error) { int32 index, /* index of an image */ ri_count = 0; /* number of RIs to be processed */ filter_t filter = dumpgr_opts->filter; /* temporary name */ int32 num_ri_chosen = dumpgr_opts->num_chosen; intn i, ret_value = 0; /* if no specific images are requested, return the image count as NO_SPECIFIC (-1) to indicate that all images are to be dumped */ if (filter == DALL) HGOTO_DONE(NO_SPECIFIC); /* if specific images were requested, allocate space for the array of indices */ if (num_ri_chosen > 0) alloc_index_list(gr_chosen, num_ri_chosen); /* else, no chosen images but filter is not DALL, it shouldn't be this combination, return image count as NO_SPECIFIC to dumpall */ else HGOTO_DONE(NO_SPECIFIC); /* if there are some images requested by index, store the indices in the array gr_chosen */ if (filter & DINDEX) for (i = 0; i < dumpgr_opts->by_index.num_items; i++) { /* Note: Don't replace this with memcpy unless you change the sizes of the objects correctly -QAK */ (*gr_chosen)[ri_count] = dumpgr_opts->by_index.num_list[i]; ri_count++; } /* if there are some images requested by ref#, convert the ref#s to indices and store them in the array gr_chosen */ if (filter & DREFNUM) for (i = 0; i < dumpgr_opts->by_ref.num_items; i++) { index = GRreftoindex(gr_id, (uint16)dumpgr_opts->by_ref.num_list[i]); if (index == FAIL) { printf("Image with reference number %d: not found\n", (int)dumpgr_opts->by_ref.num_list[i]); *index_error = TRUE; } else { (*gr_chosen)[ri_count] = index; ri_count++; } } /* if there are some images requested by name, convert the names to indices and store them in the array gr_chosen */ if (filter & DNAME) for (i = 0; i < dumpgr_opts->by_name.num_items; i++) { index = GRnametoindex(gr_id, dumpgr_opts->by_name.str_list[i]); if (index == FAIL) { printf("Image with name '%s': not found\n", dumpgr_opts->by_name.str_list[i]); *index_error = TRUE; } else { (*gr_chosen)[ri_count] = index; ri_count++; } } ret_value = ri_count; done: return ret_value; } /* end of get_RIindex_list */ /* prints all GR file attributes in the current file */ intn print_GRattrs(int32 gr_id, int32 n_file_attrs, FILE *fp, dump_info_t *dumpgr_opts) { int32 attr_index, attr_count, attr_nt, attr_buf_size; char attr_name[MAXNAMELEN], *attr_nt_desc = NULL; void *attr_buf = NULL; intn printed = FALSE; /* whether file attr title has been printed */ intn status, /* status from called routine */ ret_value = SUCCEED; /* for each file attribute, print its info and values */ for (attr_index = 0; attr_index < n_file_attrs; attr_index++) { /* get the current attr's name, number type, and number of values */ status = GRattrinfo(gr_id, attr_index, attr_name, &attr_nt, &attr_count); if (FAIL == status) /* to the next attribute */ ERROR_CONT_2("in %s: GRattrinfo failed for %d'th attribute", "print_GRattrs", (int)attr_index); /* get number type description of the attribute */ attr_nt_desc = HDgetNTdesc(attr_nt); if (NULL == attr_nt_desc) ERROR_CONT_2("in %s: HDgetNTdesc failed for %d'th attribute", "print_GRattr", (int)attr_index); /* print a title line for file attributes if it's not printed yet and set flag so it won't be printed again */ if (!printed) { fprintf(fp, "\n File attributes:\n"); printed = TRUE; } /* display the attribute's information then free buffer */ fprintf(fp, "\t Attr%d: Name = %s\n", (int)attr_index, attr_name); fprintf(fp, "\t\t Type = %s \n\t\t Count= %d\n", attr_nt_desc, (int)attr_count); resetBuff((void **)&attr_nt_desc); /* display the attribute's values unless user chose to suppress them */ if (dumpgr_opts->no_gattr_data == FALSE) { /* to be sure that attr_buf is free before reuse since sometimes we have to break the current loop and continue to the next item */ resetBuff(&attr_buf); /* calculate the buffer size of the attribute using the number of values in the attribute and its value size */ attr_buf_size = DFKNTsize(attr_nt) * attr_count; /* make sure we are not allocating 0 elements */ CHECK_POS(attr_buf_size, "attr_buf_size", "print_GRattrs"); /* allocate space for the attribute's values */ attr_buf = (void *)malloc(attr_buf_size); CHECK_ALLOC(attr_buf, "attr_buf", "print_GRattrs"); /* read the values of the attribute into the buffer */ status = GRgetattr(gr_id, attr_index, attr_buf); if (status == FAIL) ERROR_CONT_2("in %s: GRgetattr failed for %d'th attribute", "print_GRattr", (int)attr_index); /* display the attribute's values */ fprintf(fp, "\t\t Value = "); /* if the user wishes to have clean output, i.e. option -c is selected - Note that this option is only applicable to DFNT_CHAR type, the option will be ignored for other types */ if (dumpgr_opts->clean_output && attr_nt == DFNT_CHAR) { status = dumpclean(attr_nt, dumpgr_opts, attr_count, attr_buf, fp); if (status == FAIL) ERROR_CONT_2("in %s: dumpclean failed for %d'th attribute", "print_GRattr", (int)attr_index); } else /* show tab, lf, null char... in octal as \011, \012, \000... */ { status = dumpfull(attr_nt, dumpgr_opts, attr_count, attr_buf, fp, ATTR_INDENT, ATTR_CONT_INDENT); if (status == FAIL) ERROR_CONT_2("in %s: dumpfull failed for %d'th attribute", "print_GRattr", (int)attr_index); } /* free buffer and reset it to NULL */ free(attr_buf); attr_buf = NULL; } /* end of if no file attributes */ } /* for all attributes of GR */ return ret_value; } /* end of print_GRattrs */ intn print_RIattrs(int32 ri_id, intn ri_index, int32 nattrs, FILE *fp, dump_info_t *dumpgr_opts) { int32 attr_index, attr_count, attr_nt, attr_buf_size; char attr_name[MAXNAMELEN], *attr_nt_desc = NULL; void *attr_buf = NULL; intn status, /* status returned from a called routine */ ret_value = SUCCEED; /* returned value of print_RIattrs */ /* for each attribute, display its info and data */ for (attr_index = 0; attr_index < nattrs; attr_index++) { /* get the current attr's name, number type, and number of values */ status = GRattrinfo(ri_id, attr_index, attr_name, &attr_nt, &attr_count); if (FAIL == status) /* go to next attribute */ ERROR_CONT_3("in %s: GRattrinfo failed for %d'th attribute of %d'th RI", "print_RIattrs", (int)attr_index, (int)ri_index); /* get number type description of the attribute */ attr_nt_desc = HDgetNTdesc(attr_nt); if (NULL == attr_nt_desc) /* go to the next attribute */ ERROR_CONT_3("in %s: HDgetNTdesc failed for %d'th attribute of %d'th RI", "print_RIattrs", (int)attr_index, (int)ri_index); /* display the attribute's information then free buffer */ fprintf(fp, "\t Attr%d: Name = %s\n", (int)attr_index, attr_name); fprintf(fp, "\t\t Type = %s \n\t\t Count= %d\n", attr_nt_desc, (int)attr_count); /* free buffer and reset it to NULL */ resetBuff((void **)&attr_nt_desc); /* display the attribute's values unless user chose to suppress them */ if (dumpgr_opts->no_lattr_data == FALSE) { /* to be sure that attr_buf is free before reuse since sometimes we have to break the current loop and continue to the next item */ resetBuff(&attr_buf); /* calculate the buffer size of the attribute using the number of values in the attribute and its value size */ attr_buf_size = DFKNTsize(attr_nt) * attr_count; /* make sure we are not allocating 0 elements */ CHECK_POS(attr_buf_size, "attr_buf_size", "print_RIattrs"); /* allocate space for attribute's values */ attr_buf = (void *)malloc(attr_buf_size); CHECK_ALLOC(attr_buf, "attr_buf", "print_RIattrs"); /* read the values of the attribute into buffer attr_buf */ status = GRgetattr(ri_id, attr_index, attr_buf); if (status == FAIL) /* go to the next attribute */ ERROR_CONT_3("in %s: GRgetattr failed for %d'th attribute of %d'th RI", "print_RIattrs", (int)attr_index, (int)ri_index); /* display the attribute's values then free buffer */ fprintf(fp, "\t\t Value = "); /* if the user wishes to have clean output, i.e. option -c is selected */ /* Note that this option is only applicable to DFNT_CHAR type, the option will be ignored for other types */ if (dumpgr_opts->clean_output && attr_nt == DFNT_CHAR) { status = dumpclean(attr_nt, dumpgr_opts, attr_count, attr_buf, fp); if (status == FAIL) ERROR_CONT_3("in %s: dumpclean failed for %d'th attribute of %d'th RI", "print_RIattrs", (int)attr_index, (int)ri_index); } else /* show tab, lf, null char... in octal as \011, \012, \000... */ { status = dumpfull(attr_nt, dumpgr_opts, attr_count, attr_buf, fp, ATTR_INDENT, ATTR_CONT_INDENT); if (status == FAIL) ERROR_CONT_3("in %s: dumpfull failed for %d'th attribute of %d'th RI", "print_RIattrs", (int)attr_index, (int)ri_index); } free(attr_buf); attr_buf = NULL; } /* end of if no local attributes */ } /* for all attributes of an RI */ return ret_value; } /* end of print_RIattrs */ /* Displays the palette information only. Note that HDF supports only 256 colors. Each color is defined by its 3 components. Therefore, verifying the value of n_entries and n_comps is not necessary and the buffer to hold the palette data can be static. However, if more values or colors are added to the model, these parameters must be checked to allocate sufficient space when reading a palette and the palette number should be printed */ intn print_PaletteInfo(int32 ri_id, int32 num_pals, /* number of palettes, currently only 1 */ FILE *fp) { int32 pal_id = FAIL, pal_index, data_type, n_comps, n_entries, interlace_mode; intn status, ret_value = SUCCEED; /* Check the number of palettes */ if ((num_pals = GRgetnluts(ri_id)) < 0) ERROR_GOTO_2("in %s: GRgetnluts failed for raster image ID #%d", "print_PaletteInfo", (int)ri_id); /* if there are no palette data, print message for both cases: header-only and verbose (data+header) */ if (num_pals == 0) { fprintf(fp, "\t No palette\n"); } /* end if */ else { /* display each palette of an RI */ for (pal_index = 0; pal_index < num_pals; pal_index++) { /* Get the identifier of the palette attached to the image. */ pal_id = GRgetlutid(ri_id, pal_index); if (pal_id == FAIL) /* continue to the next palette */ ERROR_CONT_2("in %s: GRgetlutid failed for palette #%d", "print_PaletteInfo", (int)pal_index); /* Obtain and display information about the palette. */ status = GRgetlutinfo(pal_id, &n_comps, &data_type, &interlace_mode, &n_entries); if (status == FAIL) /* continue to the next palette */ ERROR_CONT_2("in %s: GRgetlutinfo failed for palette #%d", "print_PaletteInfo", (int)pal_index); /* if there are palette data, print header info */ fprintf(fp, "\t Palette: %d components; %d entries\n", (int)n_comps, (int)n_entries); } /* end of for each palette */ } /* end else */ done: if (ret_value == FAIL) { /* Failure cleanup */ } return (ret_value); } /* end of print_PaletteInfo */ /* Displays the palette data. Note that HDF supports only 256 colors. Each color is defined by its 3 components. Therefore, verifying the value of n_entries and n_comps is not necessary and the buffer to hold the palette data can be static. However, if more values or colors are added to the model, these parameters must be checked to allocate sufficient space when reading a palette */ intn print_Palette(int32 ri_id, int32 num_pals, /* number of palettes, currently only 1 */ FILE *fp, dump_info_t *dumpgr_opts) { int32 pal_id = FAIL, pal_index, data_type, n_comps, n_entries, interlace_mode; uint8 palette_data[N_ENTRIES][3]; /* static because of fixed size */ uint16 ri_ref; intn status, ret_value = SUCCEED; /* Get the ref# of the image, for displaying output */ ri_ref = GRidtoref(ri_id); /* Check the number of palettes */ if ((num_pals = GRgetnluts(ri_id)) < 0) ERROR_GOTO_2("in %s: GRgetnluts failed for raster image with ref#=%d", "print_Palette", (int)ri_ref); /* if there are no palette data, print message for both cases: header-only and verbose (data+header) */ if (num_pals == 0) { if (dumpgr_opts->contents != DDATA) fprintf(fp, "\n\t Raster Image Ref. = %d\n\t No palette data\n", (int)ri_ref); } /* end if */ else { /* display each palette of an RI */ for (pal_index = 0; pal_index < num_pals; pal_index++) { /* Get the identifier of the palette attached to the image. */ pal_id = GRgetlutid(ri_id, pal_index); if (pal_id == FAIL) /* continue to the next palette */ ERROR_CONT_2("in %s: GRgetlutid failed for palette #%d", "print_Palette", (int)pal_index); /* Read the palette data. */ status = GRreadlut(pal_id, (void *)palette_data); if (status == FAIL) { /* continue to the next palette */ ERROR_CONT_2("in %s: GRreadlut failed for palette #%d", "print_Palette", (int)pal_index); } /* Obtain and display information about the palette. */ status = GRgetlutinfo(pal_id, &n_comps, &data_type, &interlace_mode, &n_entries); if (status == FAIL) /* continue to the next palette */ ERROR_CONT_2("in %s: GRgetlutinfo failed for palette #%d", "print_Palette", (int)pal_index); /* if there are palette data, print header info when not data-only and print palette data when not header-only */ switch (dumpgr_opts->contents) { /* Note that case DHEADER is not presented because option -h is not allowed with -p or -pd */ case DVERBOSE: fprintf(fp, "\n\t Raster Image Ref. = %d\n", (int)ri_ref); fprintf(fp, "\t Palette: %d components; %d entries\n", (int)n_comps, (int)n_entries); /* display the palette data with the title line and indent the data with DATA_INDENT and DATA_CONT_INDENT */ fprintf(fp, "\t Palette Data: \n"); status = dumpfull(data_type, dumpgr_opts, n_entries * n_comps, palette_data, fp, DATA_INDENT, DATA_CONT_INDENT); if (status == FAIL) ERROR_GOTO_2("in %s: dumpfull failed for palette #%d", "print_Palette", (int)pal_index); break; case DDATA: /* print palette data with no title and indentation */ status = dumpfull(data_type, dumpgr_opts, n_entries * n_comps, palette_data, fp, 0, 0); if (status == FAIL) ERROR_GOTO_2("in %s: dumpfull failed for palette #%d", "print_Palette", (int)pal_index); break; default: printf("Unknown output type option \n"); } /* end switch */ } /* end for each palette */ } /* end else */ done: return ret_value; } /* end of print_Palette */ const char * Il_mode_text(gr_interlace_t interlace_mode) { switch (interlace_mode) { case MFGR_INTERLACE_PIXEL: return ("PIXEL"); case MFGR_INTERLACE_LINE: return ("LINE"); case MFGR_INTERLACE_COMPONENT: return ("COMPONENT"); default: return ("INVALID"); } /* end switch */ } /* * Prints compression method and compression information of an image. * Once, adding the compression information part, combine this and the SD * version, print_comp_info. * BMR - Jul, 2012 */ intn print_grcomp_info(FILE *fp, int32 ri_id) { comp_info c_info; /* Compression structure */ comp_coder_t comp_type = COMP_CODE_NONE; intn status = FAIL; /* returned status from a called function */ /* Get compression info */ memset(&c_info, 0, sizeof(c_info)); status = GRgetcompinfo(ri_id, &comp_type, &c_info); /* if getting comp info succeeds, proceed to print out appropriate compression information */ if (status != FAIL) { /* print compression method or "NONE" */ fprintf(fp, "\t Compression method = %s\n", comp_method_txt(comp_type)); } else fprintf(fp, "\t Compression method = \n"); return (status); } /* print_grcomp_info */ intn printGR_ASCII(int32 gr_id, dump_info_t *dumpgr_opts, int32 ndsets, /* number of images in the file */ int32 *gr_chosen, /* list of images' indices */ int32 num_ri_chosen, /* number of indices in gr_chosen */ FILE *fp) { int32 ri_id = FAIL, /* image id, always reset to FAIL when not used */ ri_ref, /* ref# of an image */ ri_index, /* index of images in the file */ ri_count, /* count of images being printed */ nt, /* number type of an image */ il, /* interlace mode of an image */ ncomps, /* number of components in an image */ dimsizes[MAXRANK], /* dimension sizes of an image */ nattrs; /* number of attributes assigned to an image */ char name[MAXNAMELEN], /* name of an image */ curr_file_name[MAXFNLEN], /* current input (hdf) file's name */ *nt_desc = NULL; /* ??? */ intn dumpall = FALSE, /* TRUE when no specific images requested */ status, /* status returned from a routine */ ret_value = SUCCEED; /* returned value of printGR_ASCII */ /* temp. name for curr input file name for ease of use */ strcpy(curr_file_name, dumpgr_opts->ifile_name); /* when there are no images specified, dumper dumps all images */ if (num_ri_chosen == NO_SPECIFIC) /* NO_SPECIFIC = -1 */ dumpall = TRUE; else sort(gr_chosen, num_ri_chosen); /* otherwise, sort the list */ /* for each valid index, if the user requests to dump all images or if there are more requested images to be processed, process the indexed image */ ri_count = 0; /* no images has been processed yet */ for (ri_index = 0; ri_index < ndsets /* validate index */ && (dumpall /* either all images are dumped */ || ri_count < num_ri_chosen); /* or more requested images */ ri_index++) { /* if the user neither requests dump all nor the current image */ if ((!dumpall) && (ri_index != gr_chosen[ri_count])) continue; /* go to the next image in the file */ ri_count++; /* count the # of images being processed */ /* Reset variables. */ memset(dimsizes, 0, sizeof(int32) * MAXRANK); /* get access to the current image */ ri_id = GRselect(gr_id, ri_index); if (ri_id == FAIL) /* to the next image */ ERROR_CONT_2("in %s: GRselect failed for %d'th RI", "printGR_ASCII", (int)ri_index); /* get image's information */ status = GRgetiminfo(ri_id, name, &ncomps, &nt, &il, dimsizes, &nattrs); if (FAIL == status) { fprintf(stderr, "in %s: GRgetiminfo failed for %d'th RI", "printGR_ASCII", (int)ri_index); /* end access to the current image before going on to the next */ if (FAIL == GRendaccess(ri_id)) fprintf(stderr, "in %s: GRendaccess failed for %d'th RI", "printGR_ASCII", (int)ri_index); ri_id = FAIL; /* reset image id */ continue; /* to the next image */ } /* print image palette's info and data or data only depending on the content's option (-pd or -p, taken care by print_Palette) */ if (dumpgr_opts->print_pal) /* set when -p or -pd is given */ { /* Note: currently only 1 pal assigned to an image, 2nd arg. */ status = print_Palette(ri_id, 1, fp, dumpgr_opts); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's palette failed for RI #%d", "printGR_ASCII", (int)ri_index, FAIL); } else /* only happen when neither -p nor -pd were given */ { /* print the current image as specified by user's options */ switch (dumpgr_opts->contents) { case DVERBOSE: case DHEADER: nt_desc = HDgetNTdesc(nt); if (NULL == nt_desc) ERROR_BREAK_2("in %s: HDgetNTdesc failed for %d'th RI", "printGR_ASCII", (int)ri_index, FAIL); /* display image's info then free the buffer no longer needed */ fprintf(fp, "\n\t Image Name = %s\n\t Index = ", name); fprintf(fp, "%d\n\t Type= %s\n", (int)ri_index, nt_desc); resetBuff((void **)&nt_desc); /* get the image's ref# from its id */ if ((ri_ref = GRidtoref(ri_id)) == FAIL) ERROR_BREAK_2("in %s: GRidtoref failed for %d'th RI", "printGR_ASCII", (int)ri_index, FAIL); /* print more image's info */ fprintf(fp, "\t width=%d; height=%d\n", (int)dimsizes[0], (int)dimsizes[1]); fprintf(fp, "\t Ref. = %d\n", (int)ri_ref); fprintf(fp, "\t ncomps = %d\n\t Interlace mode= %s\n", (int)ncomps, Il_mode_text((gr_interlace_t)il)); /* print the palette info now so it won't be lost after the image data; currently, only 1 palette per image (2nd arg.) */ status = print_PaletteInfo(ri_id, 1, fp); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's palette information failed for %d'th RI", "printGR_ASCII", (int)ri_index, FAIL); /* Print compression method or "NONE" */ status = print_grcomp_info(fp, ri_id); /* Print image attributes */ fprintf(fp, "\t Number of attributes = %d\n", (int)nattrs); status = print_RIattrs(ri_id, ri_index, nattrs, fp, dumpgr_opts); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's attributes failed for %d'th RI", "printGR_ASCII", (int)ri_index, FAIL); if (dumpgr_opts->contents == DHEADER) break; /* break out for header only */ case DDATA: if (dumpgr_opts->contents != DDATA) fprintf(fp, "\t Data : \n"); if (ncomps > 0 && dimsizes[0] != 0) { /* print the current image's data */ status = grdumpfull(ri_id, dumpgr_opts, ncomps, dimsizes, nt, fp); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's data failed for %d'th RI", "printGR_ASCII", (int)ri_index, FAIL); } else { fprintf(fp, "\t\t No data written.\n"); } break; /* data section */ default: printf("Unknown output type option \n"); } /* switch on contents */ } /* end if when neither -p nor -pd given */ /* end access to the current image */ if (FAIL == GRendaccess(ri_id)) fprintf(stderr, "in %s: GRendaccess failed for %d'th RI", "printGR_ASCII", (int)ri_index); ri_id = FAIL; /* reset image id */ } /* for ndsets */ resetBuff((void **)&nt_desc); return ret_value; /* status of calls */ } /* end of printGR_ASCII */ intn printGR_BINARY(int32 gr_id, dump_info_t *dumpgr_opts, int32 num_ri_chosen, /* # of indices in gr_chosen */ int32 ndsets, /* # of images in the file */ int32 *gr_chosen, /* list of images' indices */ FILE *fp) { intn dumpall = FALSE; /* TRUE when no specific images requested */ int32 ri_index, /* index of images in the file */ ri_count, /* count of images being printed */ nt, /* number type of an image */ il, /* interlace mode of an image */ ncomps, /* number of components in an image */ dimsizes[MAXRANK], /* dimension sizes of an image */ ri_id = FAIL, /* image id, always reset to FAIL when not used */ nattrs; /* number of attributes assigned to an image */ char name[MAXNAMELEN], /* name of an image */ curr_file_name[MAXFNLEN]; /* current input (hdf) file's name */ intn status, /* status returned from a routine */ ret_value = SUCCEED; /* return value of printGR_ASCII */ /* temp. name for curr input file name for ease of use */ strcpy(curr_file_name, dumpgr_opts->ifile_name); /* default content option to DDATA when output is binary because no header info will be printed in binary format */ dumpgr_opts->contents = DDATA; /* when there are no images specified, dumper dumps all images */ if (num_ri_chosen == (NO_SPECIFIC)) dumpall = TRUE; else sort(gr_chosen, num_ri_chosen); /* otherwise, sort the list */ /* for each valid index, display the image's data if the user request to dump all images or if there are more requested images to be processed */ ri_count = 0; /* no requested image has been processed yet */ for (ri_index = 0; ri_index < ndsets /* validate index */ && (dumpall /* either all images are dumped */ || ri_count < num_ri_chosen); /* or more requested images */ ri_index++) { /* if the user neither requests dump all nor the current images */ if ((!dumpall) && (ri_index != gr_chosen[ri_count])) continue; /* go to the next image in the file */ ri_count++; /* count the # of images being processed */ /* Reset variables. */ memset(dimsizes, 0, sizeof(int32) * MAXRANK); /* get access to the current image */ ri_id = GRselect(gr_id, ri_index); if (ri_id == FAIL) /* to the next image */ ERROR_CONT_2("in %s: GRselect failed for %d'th RI", "printGR_BINARY", (int)ri_index); /* get image's information */ status = GRgetiminfo(ri_id, name, &ncomps, &nt, &il, dimsizes, &nattrs); if (status == FAIL) { fprintf(stderr, "in %s: GRgetiminfo failed for %d'th RI", "printGR_BINARY", (int)ri_index); /* end access to the current image before going to the next one */ if (GRendaccess(ri_id) == FAIL) fprintf(stderr, "in %s: GRendaccess failed for %d'th RI", "printGR_BINARY", (int)ri_index); ri_id = FAIL; /* reset image id */ continue; /* to the next image */ } /* print image palette's data */ if (dumpgr_opts->print_pal) { /* Note: currently only 1 pal assigned to an image, 2nd arg. */ status = print_Palette(ri_id, 1, fp, dumpgr_opts); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's palette failed for %d'th RI", "printGR_BINARY", (int)ri_index, FAIL); } /* output data in binary format if palette printing is not requested */ else if (ncomps > 0 && dimsizes[0] != 0) { /* print the current image's data */ status = grdumpfull(ri_id, dumpgr_opts, ncomps, dimsizes, nt, fp); if (status == FAIL) ERROR_BREAK_2("in %s: Printing image's data failed for %d'th RI", "printGR_BINARY", (int)ri_index, FAIL); } /* end access to the current image */ if (FAIL == GRendaccess(ri_id)) fprintf(stderr, "in %s: GRendaccess failed for %d'th RI", "printGR_BINARY", (int)ri_index); ri_id = FAIL; /* reset image id */ } /* for ndsets */ return ret_value; } /* end of printGR_BINARY */ /* closeGR combines the processes of GRend, Hclose, freeing the list of numbers, and resetting all ids after validating the ids first. When either GRend or Hclose fails, closeGR prints an informative message then resetting the ids as normal since these failures are highly unlikely and since the files are opened as read-only, it's safe to go on. */ void closeGR(int32 *file_id, /* will be returned as a FAIL */ int32 *gr_id, /* will be returned as a FAIL */ int32 **gr_chosen) /* will be returned as a NULL */ { if (*gr_id != FAIL) { if (FAIL == GRend(*gr_id)) fprintf(stderr, "in closeGR: GRend failed for the current file\n"); *gr_id = FAIL; /* reset */ } if (*file_id != FAIL) { if (FAIL == Hclose(*file_id)) fprintf(stderr, "in closeGR: Hclose failed for the current file\n"); *file_id = FAIL; /* reset */ } free(*gr_chosen); *gr_chosen = NULL; } /* end of closeGR */ intn dgr(dump_info_t *dumpgr_opts, intn curr_arg, intn argc, char *argv[]) { int32 file_id = FAIL, /* current hdf file id */ gr_id = FAIL, /* interface id */ *gr_chosen = NULL, /* index list of requested images */ num_ri_chosen, /* # of requested images */ nglb_attrs, /* # of file attributes */ ndsets; /* # of images in the file */ FILE *fp = NULL; /* output file pointer */ char file_name[MAXFNLEN]; /* current hdf file name */ intn index_error = FALSE, /* indicate an error in getting index list */ status, /* status returned from a called routine */ ret_value = SUCCEED; /* returned value of dgr */ /* check for missing input file name */ if (curr_arg >= argc) ERROR_GOTO_0("Missing input file name. Please try again"); /* going through each input file, open the file, try to compose the list of indices of the images in the file that are requested, then read and display information and data of each image in the specified manner */ while (curr_arg < argc) { intn isHDF = TRUE; /* FALSE, if current file is not HDF file */ strcpy(file_name, argv[curr_arg]); /* get file name */ strcpy(dumpgr_opts->ifile_name, file_name); /* record file name */ curr_arg++; /* forward the pointer to the current argument */ /* ensure that file_id, gr_id, and gr_chosen are all reset before using because sometimes we have to break out a cycle; this'll help avoiding the chore at every one of those instances */ closeGR(&file_id, &gr_id, &gr_chosen); /* Print an informative message and skip this file if it is not an HDF file */ isHDF = Hishdf(file_name); if (isHDF == FALSE) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dgr: %s is not an HDF file", file_name); } else /* print message, then continue processing the next file */ { ERROR_CONT_1("in dgr: %s is not an HDF file", file_name); } } /* open current hdf file for processing */ file_id = Hopen(file_name, DFACC_RDONLY, 0); if (file_id == FAIL) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dgr: Failure in opening file %s", file_name); } else /* print message, then continue processing the next file */ ERROR_CONT_1("in dgr: Failure in opening file %s", file_name); } /* initiate GR interface, if fail, probably something fatal, returns with FAIL */ gr_id = GRstart(file_id); if (FAIL == gr_id) ERROR_GOTO_1("in dgr: GRstart failed for file %s", file_name); /* BMR: compose the list of indices of RIs to be processed in the current file: gr_chosen is the list and return the number of items in it */ num_ri_chosen = get_RIindex_list(gr_id, dumpgr_opts, &gr_chosen, &index_error); /* if there are errors with the given indices, ref#s, or names of the requested images, and yields no valid images, then close the interface and the input file, and move on to the next file */ if (index_error && num_ri_chosen == 0) continue; /* to the next file */ /* obtain number of images in the file and number of file attributes, ndsets will be used to process the images, nglb_attrs will be used to print file attributes */ status = GRfileinfo(gr_id, &ndsets, &nglb_attrs); if (status == FAIL) /* to the next file */ ERROR_CONT_1("in dgr: GRfileinfo failed for file %s", file_name); fp = stdout; /* assume that output option is not given */ /* display images in requested format for the current file */ switch (dumpgr_opts->file_format) { case DASCII: /* ASCII file */ /* open output file for ASCII or direct to standard output */ if (dumpgr_opts->dump_to_file) { fp = fopen(dumpgr_opts->file_name, "w"); if (fp == NULL) { fprintf(stderr, "Unable to open output file %s\n", dumpgr_opts->file_name); exit(1); /* terminate hdp */ } } /* display the name and global attributes of the current file if data only option is not selected */ if (dumpgr_opts->contents != DDATA) { fprintf(fp, "File name: %s \n", file_name); /* print GR file attributes */ if (nglb_attrs > 0) /* save overhead */ { status = print_GRattrs(gr_id, nglb_attrs, fp, dumpgr_opts); if (status == FAIL) ERROR_BREAK_1("in dgr: print_GRattrs failed for file %s", file_name, FAIL); } } /* print RIs'data and information as requested */ if (ndsets > 0) { status = printGR_ASCII(gr_id, dumpgr_opts, ndsets, gr_chosen, num_ri_chosen, fp); if (status == FAIL) /* to the next file */ ERROR_BREAK_1("in dgr: printGR_ASCII failed for file %s", file_name, FAIL); } else if (dumpgr_opts->contents != DDATA) fprintf(stderr, "File %s has no images\n", file_name); break; /* ASCII */ case DBINARY: /* binary file */ /* open output file for ASCII or print to screen */ if (dumpgr_opts->dump_to_file) { fp = fopen(dumpgr_opts->file_name, "wb"); if (fp == NULL) { fprintf(stderr, "Unable to open output file %s\n", dumpgr_opts->file_name); exit(1); /* terminate hdp */ } } status = printGR_BINARY(gr_id, dumpgr_opts, num_ri_chosen, ndsets, gr_chosen, fp); if (status == FAIL) ERROR_BREAK_1("in dgr: printGR_BINARY failed for file %s", file_name, FAIL); break; /* BINARY */ default: printf("Output file type must be either ascii or binary only\n"); } /* switch for output format */ /* cleaning up before going on to the next file */ closeGR(&file_id, &gr_id, &gr_chosen); } /* while more files to process */ /* close output file only if option -o is given */ if (fp != NULL && dumpgr_opts->dump_to_file) fclose(fp); done: closeGR(&file_id, &gr_id, &gr_chosen); return ret_value; } /* dgr */ intn do_dumpgr(intn curr_arg, intn argc, char *argv[], intn help) { dump_info_t dumpgr_opts; /* dumpgr options */ intn status, ret_value = SUCCEED; /* initialize the structure that holds user's options and inputs */ init_dump_opts(&dumpgr_opts); /* command line: hdp help */ if (help == TRUE) { dumpgr_usage(argc, argv); goto done; } /* end if */ /* incomplete command */ if (curr_arg >= argc) { dumpgr_usage(argc, argv); ERROR_GOTO_0("in do_dumpgr: command is incomplete"); } /* end if */ /* parse the user's command and store the inputs in dumpgr_opts */ status = parse_dumpgr_opts(&dumpgr_opts, &curr_arg, argc, argv); if (status == FAIL) { dumpgr_usage(argc, argv); ERROR_GOTO_0("in do_dumpgr: parse_dumpgr_opts is unable to parse command"); } /* display data and information as specified in dumpgr_opts */ status = dgr(&dumpgr_opts, curr_arg, argc, argv); if (status == FAIL) ERROR_GOTO_0("in do_dumpgr: dgr failed"); done: /* free the lists for given indices, ref#s, and names if they had been allocated */ free_num_list(dumpgr_opts.by_index.num_list); free_num_list(dumpgr_opts.by_ref.num_list); free_str_list(dumpgr_opts.by_name.str_list, dumpgr_opts.by_name.num_items); return ret_value; } /* end do_dumpgr() */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_list.c000066400000000000000000001166161503061704500173740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "mfhdf.h" #include "hdp.h" #include #define NUM_FIELD_WIDTH 5 #define TAGNAME_FIELD_WIDTH 20 #define TAG_FIELD_WIDTH 8 #define REF_FIELD_WIDTH 8 #define INDEX_FIELD_WIDTH 12 #define OFFSET_FIELD_WIDTH 12 #define LENGTH_FIELD_WIDTH 12 #define LABEL_FIELD_WIDTH 15 #define DESC_FIELD_WIDTH 15 static intn parse_list_opts(list_info_t *list_opts, intn curr_arg, intn argc, char *argv[]); intn print_annots_by_object(const char *fname, int32 an_id, ann_type annot_type, uint16 tag, uint16 ref); intn print_annots_in_file(int32 an_id, const char *fname, int32 n_annotations, ann_type annot_type); static void list_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf("%s list [-acensldg] [-o] [-t tag] \n", argv[0]); printf("\t-a\tPrint annotations of items (sets long output)\n"); printf("\t-c\tPrint classes of items (sets long output)\n"); printf("\t-n\tPrint names or labels of items (sets long output)\n"); printf("\t-e\tPrint special element information of items (sets long output)\n"); printf("\t-s\tShort output (default)\n"); printf("\t-l\tLong output\n"); printf("\t-d\tDebugging output\n"); printf("\t-g\tPrint groups only\n"); printf("\t-t \tPrint items of with a given tag number\n"); printf("\t-t \tPrint items of with a given tag name\n"); printf("\t-of\tPrint items in the order found in the file\n"); printf("\t-og\tPrint items in group order\n"); printf("\t-ot\tPrint items in tag order (default)\n"); printf("\t\tList of hdf file names, separated by spaces\n"); } /* end list_usage() */ static void init_list_opts(list_info_t *list_opts) { list_opts->order = OTAG; /* default ordering is by tag */ list_opts->verbosity = VSHORT; /* default verbosity is a short list */ list_opts->limit = LNONE; /* default is all the tag/refs */ list_opts->class = FALSE; /* don't dump class information */ list_opts->name = FALSE; /* don't dump name information */ list_opts->desc = FALSE; /* don't dump annotation information */ list_opts->spec = FALSE; /* don't dump special element information */ list_opts->group = FALSE; /* don't dump group information */ list_opts->limit_name = NULL; /* initialize... */ list_opts->limit_tag = 0; /* initialize... */ } /* end init_list_opts() */ static intn parse_list_opts(list_info_t *list_opts, intn curr_arg, intn argc, char *argv[]) { intn ret = SUCCEED; for (; curr_arg < argc; curr_arg++) { /* Allows '/' for options on Windows */ #ifdef H4_HAVE_WIN32_API if (argv[curr_arg][0] == '-' || argv[curr_arg][0] == '/') #else if (argv[curr_arg][0] == '-') #endif { ret++; switch (argv[curr_arg][1]) { case 'a': /* print annotations */ list_opts->desc = TRUE; /* dump description information */ if (list_opts->verbosity == VSHORT) list_opts->verbosity = VLONG; /* verbosity is a long list */ break; case 'c': /* print classes */ list_opts->class = TRUE; /* dump class information */ if (list_opts->verbosity == VSHORT) list_opts->verbosity = VLONG; /* verbosity is a long list */ break; case 'n': /* print names */ list_opts->name = TRUE; /* dump name/label information */ if (list_opts->verbosity == VSHORT) list_opts->verbosity = VLONG; /* verbosity is a long list */ break; case 'e': /* print special element info */ list_opts->spec = TRUE; /* dump special element information */ if (list_opts->verbosity == VSHORT) list_opts->verbosity = VLONG; /* verbosity is a long list */ break; case 's': /* short output */ list_opts->verbosity = VSHORT; /* verbosity is short */ break; case 'l': /* long output */ list_opts->verbosity = VLONG; /* verbosity is long */ break; case 'd': /* debugging output */ list_opts->verbosity = VDEBUG; /* verbosity is debug */ break; case 'g': /* print only groups */ list_opts->group = TRUE; /* dump group info */ if (list_opts->verbosity == VSHORT) list_opts->verbosity = VLONG; /* verbosity is long */ break; case 't': /* print only items of one tag */ curr_arg++; ret++; if (isdigit(argv[curr_arg][0])) { list_opts->limit = LTAGNUM; /* limit to tag name output */ list_opts->limit_tag = atoi(argv[curr_arg]); list_opts->limit_name = tagnum_to_name(list_opts->limit_tag); } /* end if */ else { /* must be a tag name */ list_opts->limit = LTAGNAME; /* limit to tag name output */ list_opts->limit_name = strdup(argv[curr_arg]); list_opts->limit_tag = tagname_to_num(list_opts->limit_name); if (list_opts->limit_tag == DFTAG_NULL) { printf("ERROR: invalid tag name: %s\n", list_opts->limit_name); return (FAIL); } /* end if */ } /* end else */ break; case 'o': /* order the items in some way */ switch (argv[curr_arg][2]) { case 'g': list_opts->order = OGROUP; /* ordering is by group */ break; case 't': list_opts->order = OTAG; /* ordering is by tag */ break; case 'f': list_opts->order = OFILE; /* ordering is by file */ break; default: printf("ERROR: Invalid list ordering!\n"); return (FAIL); } /* end switch */ break; default: /* invalid list option */ printf("ERROR: Invalid list option!\n"); return (FAIL); } /* end switch */ } /* end if */ } /* end for */ return (ret); } /* end parse_list_opts */ static void print_list_header(list_info_t *list_opts) { switch (list_opts->verbosity) { case VSHORT: /* short output */ /* no header */ break; case VLONG: /* long output */ printf("%*s%*s%*s%*s%*s\n", NUM_FIELD_WIDTH, "no", TAGNAME_FIELD_WIDTH, "tagname", TAG_FIELD_WIDTH, "tag", REF_FIELD_WIDTH, "ref", INDEX_FIELD_WIDTH, " index_by_tag"); break; case VDEBUG: /* debugging output */ printf("%*s%*s%*s%*s%*s%*s%*s\n", NUM_FIELD_WIDTH, "no", TAGNAME_FIELD_WIDTH, "tagname", TAG_FIELD_WIDTH, "tag", REF_FIELD_WIDTH, "ref", INDEX_FIELD_WIDTH, " index_by_tag", OFFSET_FIELD_WIDTH, "offset", LENGTH_FIELD_WIDTH, "length"); break; } /* end switch() */ } /* end print_list_header() */ /* Exported * print all data annotations, which are either data labels or data descriptions, for object with tag/ref This routine is used by print_data_labels and print_data_descs for common code */ intn print_annots_by_object(const char *fname, int32 an_id, ann_type annot_type, uint16 tag, uint16 ref) { intn i; char *buf = NULL; int32 ann_num; int32 ann_length; int32 ann_id = FAIL; int32 *ann_list = NULL; const char *annot_type_text = "invalid"; /* "label" or "description" */ const char *func_name = "print_annots_by_object"; /* used to print error msg */ char error_item[256]; /* holds tag, ref, and fname for error msg */ intn ret_value = SUCCEED; /* stores the current values tag, ref, and file name in error_item, just to simplify the error printing statement */ sprintf(error_item, "object tag=%d, ref=%d, in file %s", tag, ref, fname); /* validate annotation type before processing */ if (annot_type == AN_DATA_LABEL) annot_type_text = "label"; else if (annot_type == AN_DATA_DESC) annot_type_text = "description"; else ERROR_GOTO_2("%s: invalid annotation type for\n %s\n", func_name, error_item); /* find number of labels for object with tag/ref */ ann_num = ANnumann(an_id, annot_type, tag, ref); if (FAIL == ann_num) ERROR_GOTO_2("%s: ANnumann failed for object %s\n", func_name, error_item); if (ann_num > 0) { /* print data annotation */ /* allocate space for all label/description id's for data object */ ann_list = malloc(ann_num * sizeof(int32)); CHECK_ALLOC(ann_list, "ann_list", func_name); /* retrieve all the data objects label/description handles and store them in the buffer ann_list */ if (FAIL == ANannlist(an_id, annot_type, tag, ref, ann_list)) ERROR_GOTO_2("%s: ANannlist failed for %s\n", func_name, error_item); /* for every data label/description */ for (i = 0; i < ann_num; i++) { ann_id = ann_list[i]; /* get next annotation id */ ann_length = ANannlen(ann_id); /* get annotation length */ if (FAIL == ann_length) ERROR_GOTO_4("%s: ANannlen failed for\n %d'th data %s for %s\n", func_name, i, annot_type_text, error_item); /* allocate space for the data annotation */ buf = calloc((ann_length + 1) * sizeof(char), 1); CHECK_ALLOC(buf, "buf", func_name); buf[ann_length] = '\0'; /* read annotation data */ if (FAIL == ANreadann(ann_id, buf, ann_length + 1)) ERROR_GOTO_4("%s: ANreadann failed on the %d'th data %s for\n %s\n", func_name, i, annot_type_text, error_item); /* print the annotation with title depending on annotation type */ if (annot_type == AN_DATA_LABEL) printf("%*s%s\n", LABEL_FIELD_WIDTH, " Name/Label=", buf); else /* annot_type == AN_DATA_DESC -already checked for else */ printf("%*s%s\n", LABEL_FIELD_WIDTH, " Description=", buf); /* end access */ if (FAIL == ANendaccess(ann_id)) ERROR_GOTO_4("%s: ANendaccess failed on the %d'th data %s \n for %s\n", func_name, i, annot_type_text, error_item); /* reset id and free space for data label/description */ ann_id = FAIL; free(buf); buf = NULL; } /* end for every data label/description */ /* cleanup */ free(ann_list); ann_list = NULL; } /* end if num_ann > 0 */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (ann_id != FAIL) ANendaccess(ann_id); free(buf); } return ret_value; } /* print_annots_by_object() */ /* print all data labels for object with tag/ref */ intn print_data_labels(const char *fname, int32 an_id, uint16 tag, uint16 ref) { intn ret_value = SUCCEED; ret_value = print_annots_by_object(fname, an_id, AN_DATA_LABEL, tag, ref); if (ret_value == FAIL) ERROR_GOTO_0("in print_data_labels\n"); done: return ret_value; } /* end print_data_labels */ /* print all data descriptions for object with tag/ref */ intn print_data_descs(const char *fname, int32 an_id, uint16 tag, uint16 ref) { intn ret_value = SUCCEED; ret_value = print_annots_by_object(fname, an_id, AN_DATA_DESC, tag, ref); if (ret_value == FAIL) ERROR_GOTO_0("in print_data_descs\n"); done: return ret_value; } /* end print_data_descs */ /* Prints all annotations in the file. This routine is used by print_all_data_labels, print_all_data_descs, print_all_file_labels, and print_all_file_descs for the common code. */ intn print_annots_in_file(int32 an_id, const char *fname, int32 n_annotations, ann_type annot_type) { intn i; int32 len; char *annotation = NULL; const char *func_name = "print_annots_in_file"; int32 ann_id = FAIL; const char *annot_type_text = "invalid"; /* "label" or "description" */ intn ret_value = SUCCEED; /* validate annotation type before processing */ if (annot_type == AN_DATA_LABEL) annot_type_text = "Data Label"; else if (annot_type == AN_DATA_DESC) annot_type_text = "Data Description"; else if (annot_type == AN_FILE_LABEL) annot_type_text = "File Label"; else if (annot_type == AN_FILE_DESC) annot_type_text = "File Description"; else ERROR_GOTO_2("%s: invalid annotation type for file %s\n", func_name, fname); /* for all annot_type annotations in the file */ for (i = 0; i < n_annotations; i++) { /* select i'th annotation */ ann_id = ANselect(an_id, i, annot_type); if (FAIL == ann_id) ERROR_GOTO_4("%s: ANselect failed on the %d'th %s for file %s\n", func_name, i, annot_type_text, fname); /* get length of i'th annotation */ len = ANannlen(ann_id); if (FAIL == len) ERROR_GOTO_4("%s: ANannlen failed on the %d'th %s for file %s\n", func_name, i, annot_type_text, fname); /* allocate space for an annotation */ annotation = (char *)calloc(len + 1, 1); CHECK_ALLOC(annotation, "annotation", func_name); /* read in annotation and print it */ if (ANreadann(ann_id, annotation, len + 1) != FAIL) printf("%s #%ld: %s\n", annot_type_text, (long)i, annotation); else ERROR_GOTO_4("%s: ANreadann failed on the %d'th %s for file %s\n", func_name, i, annot_type_text, fname); /* end access */ if (FAIL == ANendaccess(ann_id)) ERROR_GOTO_4("%s: ANendaccess failed on the %d'th %s for file %s\n", func_name, i, annot_type_text, fname); /* reset id and free space for annotation */ ann_id = FAIL; free(annotation); annotation = NULL; } /* end for every annotation in file */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (ann_id != FAIL) ANendaccess(ann_id); free(annotation); } return ret_value; } /* end print_annots_in_file */ /* Exported * Prints all data labels in file */ intn print_all_data_labels(const char *fname, int32 an_id) { int32 n_file_label; int32 n_data_label; int32 n_file_desc; int32 n_data_desc; intn ret_value = SUCCEED; /* find out how many file labels/descs and data labels/descs in file */ if (FAIL == ANfileinfo(an_id, &n_file_label, &n_file_desc, &n_data_label, &n_data_desc)) ERROR_GOTO_1("print_all_data_labels: ANfileinfo failed for file %s\n", fname); /* prints all the data labels in the file */ ret_value = print_annots_in_file(an_id, fname, n_data_label, AN_DATA_LABEL); if (ret_value == FAIL) ERROR_GOTO_0("in print_all_data_labels\n"); done: return ret_value; } /* print_all_data_labels() */ /* Exported * Prints all data descriptions in file */ intn print_all_data_descs(const char *fname, int32 an_id) { int32 len; char *desc = NULL; int32 ann_id = FAIL; intn i; int32 n_file_label; int32 n_file_desc; int32 n_data_label; int32 n_data_desc; intn ret_value = SUCCEED; /* find out how many file labels/descs and data labels/descs in file */ if (FAIL == ANfileinfo(an_id, &n_file_label, &n_file_desc, &n_data_label, &n_data_desc)) { fprintf(stderr, "ANfileinfo failed for file %s\n", fname); ret_value = FAIL; goto done; } /* for all data descs */ for (i = 0; i < n_data_desc; i++) { /* select i'th data desc */ ann_id = ANselect(an_id, i, AN_DATA_DESC); if (FAIL == ann_id) { fprintf(stderr, "ANselect failed for %d'th data description in file %s\n", i, fname); ret_value = FAIL; goto done; } /* get length of i'th data desc */ len = ANannlen(ann_id); if (FAIL == len) { fprintf(stderr, "ANannlen failed for %d'th data description in file %s\n", i, fname); ret_value = FAIL; goto done; } /* allocate room for a data desc */ desc = (char *)calloc(len + 1, 1); CHECK_ALLOC(desc, "desc", "print_all_data_descs"); /* read in data desc and print it */ if (ANreadann(ann_id, desc, len + 1) != FAIL) printf("Data ID Annotation #%ld: %s\n", (long)i, desc); else { fprintf(stderr, "ANreadann failed for %d'th data description in file %s\n", i, fname); ret_value = FAIL; goto done; } /* end access */ if (FAIL == ANendaccess(ann_id)) { fprintf(stderr, "ANendaccess failed for %d'th data description in file %s\n", i, fname); ret_value = FAIL; goto done; } /* reset id and free space for desc */ ann_id = FAIL; free(desc); desc = NULL; } /* end for every data desc */ done: if (ann_id != FAIL) ANendaccess(ann_id); free(desc); return ret_value; } /* print_all_data_descs() */ intn print_all_file_labels(const char *fname, int32 an_id) { int32 len; char *label = NULL; intn i; int32 ann_id = FAIL; int32 n_file_label; int32 n_file_desc; int32 n_data_label; int32 n_data_desc; intn ret_value = SUCCEED; /* find out how many file labels/descs and data labels/descs in file */ if (FAIL == ANfileinfo(an_id, &n_file_label, &n_file_desc, &n_data_label, &n_data_desc)) { fprintf(stderr, "ANfileinfo failed for file %s\n", fname); ret_value = FAIL; goto done; } /* for all file labels */ for (i = 0; i < n_file_label; i++) { /* select i'th file label */ ann_id = ANselect(an_id, i, AN_FILE_LABEL); if (FAIL == ann_id) { fprintf(stderr, "ANselect failed for %d'th label for file %s\n", i, fname); ret_value = FAIL; goto done; } /* get length of i'th file label */ len = ANannlen(ann_id); if (FAIL == len) { fprintf(stderr, "ANannlen failed for %d'th label for file %s\n", i, fname); ret_value = FAIL; goto done; } /* allocate room for the file label */ label = (char *)calloc(len + 1, 1); CHECK_ALLOC(label, "label", "print_all_data_labels"); /* read in file label and print it */ if (ANreadann(ann_id, label, len + 1) != FAIL) printf("File Label #%ld: %s\n", (long)i, label); else { fprintf(stderr, "ANreadann failed for %d'th label for file %s\n", i, fname); ret_value = FAIL; goto done; } /* end access */ if (FAIL == ANendaccess(ann_id)) { fprintf(stderr, "ANendaccess failed for %d'th label for file %s\n", i, fname); ret_value = FAIL; goto done; } /* reset id and free space for label */ ann_id = FAIL; free(label); label = NULL; } /* end for every file label */ done: if (ann_id != FAIL) ANendaccess(ann_id); free(label); return ret_value; } /* end print_all_file_labels() */ intn print_all_file_descs(const char *fname, list_info_t *list_opts, /* for print_SDattrs */ int32 an_id) { /* file desc */ int32 len; char *desc = NULL; int32 ann_id = FAIL; intn i; int32 n_file_label; int32 n_file_desc; int32 n_data_label; int32 n_data_desc; /* SDS */ int32 sd_fid = FAIL; int32 ndsets, nattrs; char *attr_nt_desc = NULL; void *attr_buf = NULL; intn ret_value = SUCCEED; (void)list_opts; /* find out how many file labels/descs and data labels/descs in file */ if (FAIL == ANfileinfo(an_id, &n_file_label, &n_file_desc, &n_data_label, &n_data_desc)) { fprintf(stderr, "ANfileinfo failed for file %s \n", fname); ret_value = FAIL; goto done; } /* for all file descs */ for (i = 0; i < n_file_desc; i++) { /* select i'th file desc */ ann_id = ANselect(an_id, i, AN_FILE_DESC); if (FAIL == ann_id) { fprintf(stderr, "ANselect failed for %d'th desc for file %s \n", i, fname); ret_value = FAIL; goto done; } /* get length of i'th file desc */ len = ANannlen(ann_id); if (FAIL == len) { fprintf(stderr, "ANannlen failed for %d'th desc for file %s \n", i, fname); ret_value = FAIL; goto done; } /* allocate room for the file desc */ desc = (char *)calloc(len + 1, 1); CHECK_ALLOC(desc, "desc", "print_all_file_descs"); /* read in file desc and print it */ if (ANreadann(ann_id, desc, len + 1) != FAIL) printf("File description #%ld: %s\n", (long)i, desc); else { fprintf(stderr, "ANreadann failed for %d'th desc for file %s \n", i, fname); ret_value = FAIL; goto done; } /* end access */ if (FAIL == ANendaccess(ann_id)) { fprintf(stderr, "ANendaccess failed for %d'th desc for file %s \n", i, fname); ret_value = FAIL; goto done; } /* reset id and free space for label */ ann_id = FAIL; free(desc); desc = NULL; } /* end for every file desc */ /* all SDS global attributes are considered file descriptions */ if ((sd_fid = SDstart(fname, DFACC_READ)) != FAIL) { /* SD global attributes */ dump_info_t dump_opts; init_dump_opts(&dump_opts); if (SDfileinfo(sd_fid, &ndsets, &nattrs) != FAIL) { /* BMR: installed input file name to opts for dumpfull in print_SDattrs to use - 6/16/2000 */ print_SDattrs(sd_fid, stdout, nattrs, &dump_opts); /* temporary use stdout until fixing hdp_list to print to a FILE *fp */ } else { fprintf(stderr, "Failure in SDfileinfo for file %s\n", fname); ret_value = FAIL; goto done; } if (FAIL == SDend(sd_fid)) fprintf(stderr, "SDend failed for the current file\n"); sd_fid = FAIL; /* reset */ } /* end if SDstart */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (ann_id != FAIL) ANendaccess(ann_id); free(desc); free(attr_nt_desc); free(attr_buf); } return ret_value; } /* end print_all_file_descs() */ /* BMR: use part of print_all_file_descs for this routine to just print the file annotations because print_all_file_descs also prints SD file attributes. Probably will separate SD file attributes when adding GR file attributes */ intn print_file_descs(const char *f_name, int32 an_id) { /* file desc */ int32 len; char *desc = NULL; int32 ann_id = FAIL; intn i; int32 n_file_label; int32 n_file_desc; int32 n_data_label; int32 n_data_desc; intn ret_value = SUCCEED; /* find out how many file labels/descs and data labels/descs in file */ if (FAIL == ANfileinfo(an_id, &n_file_label, &n_file_desc, &n_data_label, &n_data_desc)) { fprintf(stderr, "ANfileinfo failed for file %s \n", f_name); ret_value = FAIL; goto done; } /* for all file descs */ for (i = 0; i < n_file_desc; i++) { /* select i'th file desc */ ann_id = ANselect(an_id, i, AN_FILE_DESC); if (FAIL == ann_id) { fprintf(stderr, "ANselect failed for %d'th desc for file %s \n", i, f_name); ret_value = FAIL; goto done; } /* get length of i'th file desc */ len = ANannlen(ann_id); if (FAIL == len) { fprintf(stderr, "ANannlen failed for %d'th desc for file %s \n", i, f_name); ret_value = FAIL; goto done; } /* allocate room for the file desc */ desc = (char *)calloc(len + 1, 1); CHECK_ALLOC(desc, "desc", "print_file_descs"); /* read in file desc and print it */ if (ANreadann(ann_id, desc, len + 1) != FAIL) printf("File description #%ld: %s\n", (long)i, desc); else { fprintf(stderr, "ANreadann failed for %d'th desc for file %s \n", i, f_name); ret_value = FAIL; goto done; } /* end access */ if (FAIL == ANendaccess(ann_id)) { fprintf(stderr, "ANendaccess failed for %d'th desc for file %s \n", i, f_name); ret_value = FAIL; goto done; } /* reset id and free space for label */ ann_id = FAIL; free(desc); desc = NULL; } /* end for every file desc */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (ann_id != FAIL) ANendaccess(ann_id); free(desc); } return ret_value; } /* end print_all_file_descs() */ /* prints all relevant information that an HDF object can have including annotations */ static intn print_list_obj(const char *fname, list_info_t *l_opts, objinfo_t *o_info, intn o_num, int32 an_id) { int32 i; char *s = NULL; char *buf = NULL; intn ret_value = SUCCEED; switch (l_opts->verbosity) { case VSHORT: /* short output */ /* handled elsewhere */ break; case VLONG: /* long output */ printf("%*d%*s%*d%*d%*ld\n", NUM_FIELD_WIDTH, o_num, TAGNAME_FIELD_WIDTH, ((s = HDgettagsname(o_info->tag)) == NULL ? strdup("Unknown") : s), TAG_FIELD_WIDTH, o_info->tag, REF_FIELD_WIDTH, o_info->ref, INDEX_FIELD_WIDTH, (long)o_info->index); free(s); /* free tagname string */ s = NULL; break; case VDEBUG: /* debugging output */ printf("%*d%*s%*d%*d%*ld%*ld%*ld\n", NUM_FIELD_WIDTH, o_num, TAGNAME_FIELD_WIDTH, ((s = HDgettagsname(o_info->tag)) == NULL ? strdup("Unknown") : s), TAG_FIELD_WIDTH, o_info->tag, REF_FIELD_WIDTH, o_info->ref, INDEX_FIELD_WIDTH, (long)o_info->index, OFFSET_FIELD_WIDTH, (long)o_info->offset, LENGTH_FIELD_WIDTH, (long)o_info->length); free(s); /* free tagname string */ s = NULL; break; } /* end switch */ /* find data labels for object if any */ if (l_opts->name == TRUE) if (FAIL == print_data_labels(fname, an_id, o_info->tag, o_info->ref)) ERROR_GOTO_0("in print_list_obj\n"); if (l_opts->class == TRUE) { } /* end if */ /* find data descs for object if any */ if (l_opts->desc == TRUE) if (FAIL == print_data_descs(fname, an_id, o_info->tag, o_info->ref)) ERROR_GOTO_0("in print_list_obj\n"); if (l_opts->spec == TRUE && o_info->is_special) { switch (o_info->spec_info->key) { case SPECIAL_LINKED: printf("\tLinked Block: first %ld standard %ld per unit %ld\n", (long)o_info->spec_info->first_len, (long)o_info->spec_info->block_len, (long)o_info->spec_info->nblocks); break; case SPECIAL_EXT: printf("\tExternal File: path %s offset %ld\n", o_info->spec_info->path, (long)o_info->spec_info->offset); break; case SPECIAL_COMP: printf("\tCompressed Element: compression type: %s modeling type %s\n", (o_info->spec_info->comp_type == COMP_CODE_NONE ? "None" : (o_info->spec_info->comp_type == COMP_CODE_RLE ? "Run-Length" : (o_info->spec_info->comp_type == COMP_CODE_NBIT ? "N-Bit" : "Unknown"))), (o_info->spec_info->model_type == COMP_MODEL_STDIO ? "Standard" : "Unknown")); break; case SPECIAL_CHUNKED: printf("\tChunked element: chunk size %d, ndims %d, [", (intn)o_info->spec_info->chunk_size, (intn)o_info->spec_info->ndims); for (i = 0; i < o_info->spec_info->ndims; i++) { printf("%d", (intn)o_info->spec_info->cdims[i]); if (i != (o_info->spec_info->ndims - 1)) printf(","); } printf("]\n"); break; default: printf("\t Do not understand special element type %d \n", o_info->spec_info->key); break; } /* end switch */ } /* end if */ if (l_opts->group == TRUE && o_info->is_group) { DFdi *g_obj = NULL; int32 num; if ((num = get_group_max(o_info->group_info)) != FAIL) { printf("\tContents: (%ld objects)\n", (long)num); g_obj = get_next_group(o_info->group_info, 0); while (g_obj != NULL) { printf("\t\t%-30s: (tag=%6d) ref=%d\n", ((s = HDgettagsname(g_obj->tag)) == NULL ? strdup("Unknown") : s), g_obj->tag, g_obj->ref); free(s); /* free tagname string */ s = NULL; g_obj = get_next_group(o_info->group_info, 1); } /* end while */ } /* end if */ } /* end if */ done: if (ret_value == FAIL) { /* Failure cleanup */ free(s); free(buf); } return ret_value; } /* print_list_obj() */ /* print the library version of the file */ static void printfilever(int32 file_id) { uint32 major, minor, release; char string[LIBVSTR_LEN + 1]; if (Hgetfileversion(file_id, &major, &minor, &release, string) == SUCCEED) { string[LIBVSTR_LEN] = '\0'; /* make it a null terminated string */ printf("Last modified with %s\n\n", string); } else printf("(Has no library version information)\n\n"); } /* low level object listing routine for HDF file */ intn do_list(intn curr_arg, intn argc, char *argv[], intn help) { list_info_t list_opts; /* list options */ filelist_t *f_list = NULL; /* list of files to dump */ objlist_t *o_list = NULL; /* list of DD objects in a file */ objinfo_t *o_info = NULL; /* pointer to a DD object */ char *f_name = NULL; /* current file name to list */ int32 fid = FAIL; /* HDF file ID */ intn obj_num; /* number of the object we are displaying */ intn status; /* status from various function calls */ char *s = NULL; /* temporary character pointer */ int32 an_id = FAIL; /* annotation interface handle */ intn ret_value = SUCCEED; /* Do this early, to avoid uninitialized warnings in cleanup code */ init_list_opts(&list_opts); if (help == TRUE) { list_usage(argc, argv); goto done; } /* Incomplete command */ if (curr_arg >= argc) { list_usage(argc, argv); ret_value = FAIL; /* So caller can be traced in debugging */ goto done; } if ((status = parse_list_opts(&list_opts, curr_arg, argc, argv)) == FAIL) { list_usage(argc, argv); ret_value = FAIL; goto done; } curr_arg += status; if (curr_arg >= argc || (f_list = make_file_list(curr_arg, argc, argv)) == NULL) { fprintf(stderr, "ERROR: No files to dump!\n"); list_usage(argc, argv); ret_value = FAIL; goto done; } /* Process each file */ f_name = get_next_file(f_list, 0); while (f_name != NULL) { int label_flag, desc_flag; vinit_done = FALSE; /* Reset global Vset variable */ obj_num = 0; /* Number of the object we are displaying */ fid = FAIL; an_id = FAIL; if ((fid = Hopen(f_name, DFACC_READ, 0)) != FAIL) { an_id = ANstart(fid); if (FAIL == an_id) ERROR_GOTO_1("do_list: ANstart failed for file %s \n", f_name); label_flag = desc_flag = 0; if (list_opts.name == TRUE) label_flag = CHECK_LABEL; if (list_opts.desc == TRUE) desc_flag = CHECK_DESC; /* make list of all objects in file */ o_list = make_obj_list(fid, label_flag | desc_flag | CHECK_GROUP | CHECK_SPECIAL); /* if there are any object in the file, print annotations if requested, then the object information as requested */ if (o_list != NULL) { /* print out filename, etc. */ printf("File: %s\n", f_name); printfilever(fid); /* print file labels if requested */ if (list_opts.name == TRUE) if (FAIL == print_all_file_labels(f_name, an_id)) ERROR_GOTO_0("in do_list\n"); /* print file descriptions if requested */ if (list_opts.desc == TRUE) if (FAIL == print_all_file_descs(f_name, &list_opts, an_id)) ERROR_GOTO_0("in do_list\n"); /* sort list of objects in requested order */ sort_obj_list(o_list, list_opts.order); /* print out list header according to options */ print_list_header(&list_opts); /* Special case for short output */ if (list_opts.verbosity == VSHORT) { uint16 last_tag = 0; o_info = get_next_obj(o_list, 0); /* get first DD object */ while (o_info != NULL) { if ((list_opts.limit == LGROUP || list_opts.limit == LNONE) || list_opts.limit_tag == o_info->tag) { if (o_info->tag != last_tag) { s = HDgettagsname(o_info->tag); if (s == NULL) s = strdup("Unknown"); printf("%s%-*s: (tag %d)\n", (last_tag == 0 ? "" : "\n"), TAGNAME_FIELD_WIDTH, s, o_info->tag); last_tag = o_info->tag; printf("\tRef nos: "); free(s); /* free tagname string */ s = NULL; /* reset */ } /* end if */ printf("%d ", o_info->ref); } /* end if */ /* advance to the next DD object */ o_info = get_next_obj(o_list, 1); } /* end while o_info */ printf("\n"); } /* end if verbosity */ else /* must be verbose output */ { /* Loop through all the objects in the file */ o_info = get_next_obj(o_list, 0); /* get first DD object */ while (o_info != NULL) { switch (list_opts.limit) { default: case LNONE: case LGROUP: if (FAIL == print_list_obj(f_name, &list_opts, o_info, obj_num, an_id)) ERROR_GOTO_0("in do_list\n"); break; case LTAGNUM: case LTAGNAME: if (list_opts.limit_tag == o_info->tag) if (FAIL == print_list_obj(f_name, &list_opts, o_info, obj_num, an_id)) ERROR_GOTO_0("in do_list\n"); break; } /* end switch */ obj_num++; o_info = get_next_obj(o_list, 1); /* advance to next DD object */ } /*end while */ } /* end else */ /* free the object list */ free_obj_list(o_list); o_list = NULL; } /* end if o_list */ /* cleanup section */ if (vinit_done == TRUE) if (FAIL == Vfinish(fid)) ERROR_GOTO_1("do_list: Vfinish failed for file %s\n", f_name); if (FAIL == ANend(an_id)) ERROR_GOTO_1("do_list: ANend failed for file %s\n", f_name); an_id = FAIL; /* reset */ if (Hclose(fid) == FAIL) ERROR_GOTO_1("do_list: Hclose failed for file %s\n", f_name); fid = FAIL; /* reset */ } /* end if */ else ERROR_GOTO_1("in do_list: Hopen failed - possible invalid file name: %s", f_name); /* next file processing */ /* get next file to process */ f_name = get_next_file(f_list, 1); } /* end while processing files*/ done: if (ret_value == FAIL) { /* Failure cleanup */ if (fid != FAIL) /* check if file open still */ { Hclose(fid); fid = FAIL; } if (an_id != FAIL) /* check if annotation handle still open */ { ANend(an_id); an_id = FAIL; } free(s); if (o_list != NULL) free_obj_list(o_list); } free(list_opts.limit_name); if (f_list != NULL) free_file_list(f_list); return ret_value; } /* end do_list() */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_rig.c000066400000000000000000000624571503061704500172050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "hdp.h" #include #define IMAGE 1 static void dumprig_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf("%s dumprig [-a|-i |-m |-r ] [-dhv] [-o [-bx]] \n", argv[0]); printf("\t-a\tDump all RIGs in the file (default)\n"); printf("\t-i \tDump the RIGs at positions listed in \n"); printf("\t-m \tDump the 8- or 24-bit RIGs only, may be 8 or 24 \n"); printf("\t-r \tDump the RIGs with reference number listed in \n"); printf("\t-d\tDump data only, no tag/ref, formatted to input to hp2hdf\n"); printf("\t-h\tDump header only, no annotation for elements nor data\n"); printf("\t-v\tDump everything including all annotations (default)\n"); printf("\t-c\tDo not add a carriage return to a long data line\n"); printf("\t-o \tOutput to file \n"); printf("\t-b\tBinary format of output\n"); printf("\t-x\tAscii text format of output (default)\n"); printf("\t\tList of hdf file names, separated by spaces\n"); } /* end list_usage() */ static void init_dumprig_opts(dump_info_t *dumprig_opts) { dumprig_opts->filter = DALL; /* default dump all RIGs */ dumprig_opts->filter_num = NULL; /* not by reference nor by index */ dumprig_opts->filter_str = NULL; /* no strings */ dumprig_opts->num_chosen = (-1); /* default dump all items */ dumprig_opts->contents = DVERBOSE; /* default dump all information */ dumprig_opts->dump_to_file = FALSE; /* don't dump to output file */ dumprig_opts->file_format = DASCII; /* default output is ASCII file */ dumprig_opts->as_stream = FALSE; /* print output aligned, using carriage returns */ dumprig_opts->print_pal = FALSE; /* GR only, don't print palette */ /* print output aligned, using carriage returns */ dumprig_opts->as_stream = FALSE; /* print space characters (LF, FF, CR, space, tabs...) in \digit format */ dumprig_opts->clean_output = FALSE; /* print data starting at column 5 unless reset otherwise */ dumprig_opts->firstln_indent = 5; /* Note: only for dump_rig, so testfiles won't need to be changed */ /* print data on a continuous line starting at column 5 unless reset otherwise */ dumprig_opts->contln_indent = 5; /* Note: only for dump_rig, so testfiles won't need to be changed */ /* GR only, print data using interlace at creation */ dumprig_opts->interlace = NO_SPECIFIC; /* GR & SD only, print data of global attributes unless -g is given */ dumprig_opts->no_gattr_data = FALSE; /* GR & SD only, print data of local attributes unless -l is given */ dumprig_opts->no_lattr_data = FALSE; strcpy(dumprig_opts->file_name, "\0"); } /* end init_dumprig_opts() */ static intn parse_dumprig_opts(dump_info_t *dumprig_opts, intn *curr_arg, intn argc, char *argv[], int *model) { int32 i; int32 numItems; char *tempPtr = NULL; char *ptr = NULL; if (*curr_arg >= argc) return (FAIL); while ((*curr_arg < argc) && (argv[*curr_arg][0] == '-')) { switch (argv[*curr_arg][1]) { case 'a': /* dump all, default */ dumprig_opts->filter = DALL; (*curr_arg)++; break; case 'm': /* dump the rigs with model specified as 8-bit or 24-bit */ (*curr_arg)++; *model = atoi(argv[*curr_arg]); if (((*model) != 8) && ((*model) != 24)) { printf("%s-bit raster model: not available.\n", argv[*curr_arg]); exit(1); } (*curr_arg)++; break; case 'i': /* dump by index */ case 'r': /* dump by reference */ if ((argv[*curr_arg][1]) == 'i') dumprig_opts->filter = DINDEX; else dumprig_opts->filter = DREFNUM; (*curr_arg)++; ptr = argv[*curr_arg]; /* check if it's the end of the command */ if (ptr == NULL) { printf("Missing values for option\n"); exit(1); } numItems = 0; while ((tempPtr = strchr(ptr, ',')) != NULL) { numItems++; ptr = tempPtr + 1; } /* end while */ if (*ptr != '\0') /* count the last item */ numItems++; dumprig_opts->filter_num = (intn *)malloc(sizeof(intn) * numItems); if (dumprig_opts->filter_num == NULL) { printf("Not enough memory!\n"); exit(-1); } ptr = argv[*curr_arg]; i = 0; while ((tempPtr = strchr(ptr, ',')) != NULL) { *tempPtr = '\0'; dumprig_opts->filter_num[i] = atoi(ptr); ptr = tempPtr + 1; i++; } dumprig_opts->filter_num[i] = atoi(ptr); /* get the last item */ dumprig_opts->num_chosen = numItems; /* save the number of items */ (*curr_arg)++; break; case 'd': /* dump data only */ dumprig_opts->contents = DDATA; (*curr_arg)++; break; case 'h': /* no annotations nor data */ dumprig_opts->contents = DHEADER; (*curr_arg)++; break; case 'v': /* dump all info */ dumprig_opts->contents = DVERBOSE; (*curr_arg)++; break; case 'c': /* do not add carriage returns to output data lines */ dumprig_opts->as_stream = TRUE; (*curr_arg)++; break; case 'o': /* specify output file */ dumprig_opts->dump_to_file = TRUE; /* Get file name */ strcpy(dumprig_opts->file_name, argv[++(*curr_arg)]); (*curr_arg)++; break; case 'b': /* dump data in binary */ dumprig_opts->file_format = DBINARY; (*curr_arg)++; break; case 'x': /* dump data in ascii, also default */ dumprig_opts->file_format = DASCII; (*curr_arg)++; break; default: /* invalid dumprig option */ printf("Warning: Invalid dumprig option %s\n", argv[*curr_arg]); return (FAIL); } /* end switch */ } /* end while */ return (SUCCEED); } /* end parse_dumprig_opts */ static intn drig(dump_info_t *dumprig_opts, intn curr_arg, intn argc, char *argv[], int model) { int32 *rig_chosen = NULL; int32 num_rig_chosen; int32 width, height; int32 ndsets; int32 temp; intn i, k, x; char file_name[MAXFNLEN]; FILE *fp = NULL; void *image = NULL; int dumpall = 0; int ncomps; int il; file_format_t ff; intn ret_value = SUCCEED; while (curr_arg < argc) { /* Examine all files. */ strcpy(file_name, argv[curr_arg]); curr_arg++; num_rig_chosen = dumprig_opts->num_chosen; if (num_rig_chosen > 0) { if ((rig_chosen = (int32 *)malloc(sizeof(int32) * num_rig_chosen)) == NULL) { fprintf(stderr, "Memory allocation error\n"); ret_value = FAIL; goto done; } /* end if */ k = (-1); HDmemfill(rig_chosen, &k, sizeof(int32), num_rig_chosen); } /* end if */ /* Determine which RIGs are to be displayed. */ if (dumprig_opts->filter == DINDEX) { for (i = 0; i < dumprig_opts->num_chosen; i++) rig_chosen[i] = dumprig_opts->filter_num[i]; sort(rig_chosen, num_rig_chosen); /* DREFNUM doesn't need this */ } /* end if */ /* ASCII or Binary? */ ff = dumprig_opts->file_format; switch (ff) { case DASCII: /* ASCII file */ /* Get the name of the output file. */ if (dumprig_opts->dump_to_file) fp = fopen(dumprig_opts->file_name, "w"); else fp = stdout; if (dumprig_opts->contents != DDATA) fprintf(fp, "File name: %s \n\n", file_name); /* Determine the number of images in a file. */ if (model == 8) { /* raster 8 */ if ((ndsets = DFR8nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } } else if (model == 24) { /* raster 24 */ if ((ndsets = DF24nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } } else /* try both 8 and 24 */ { if ((temp = DFR8nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } if ((ndsets = DF24nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } ndsets += temp; } if (num_rig_chosen == -1) /* If all RIGs will be dumped, set the flag. */ dumpall = 1; x = 0; /* Used as the index of the array of "rig_chosen[x]". */ /* can only check index range here */ for (i = 0; i < dumprig_opts->num_chosen && dumprig_opts->filter == DINDEX; i++) { if ((dumprig_opts->filter_num[i] > ndsets) || (dumprig_opts->filter_num[i] < 0)) { fprintf(stderr, "\nThe index number %d is out of range\n", dumprig_opts->filter_num[i]); ret_value = FAIL; goto done; } } for (i = 0; i < ndsets && (dumpall != 0 || x < dumprig_opts->num_chosen); i++) { /* Examine all RIGs. */ int compressed; int has_pal; int32 eltsz; int32 read_nelts; uint16 rig_ref; uint16 compr_type; /* get dimensions of ri */ if (FAIL == DFGRgetimdims(file_name, &width, &height, &ncomps, &il)) { ret_value = FAIL; goto done; } /* Determine the size of each element; "ncomps" is 1 for an 8-bit image or 3 for a 24-bit image. */ eltsz = DFKNTsize(DFNT_UINT8 | DFNT_NATIVE) * ncomps; read_nelts = width * height; /* Number of elements to be read in. */ if ((image = (void *)malloc(read_nelts * eltsz)) == NULL) { fprintf(stderr, "Not enough memory!\n"); ret_value = FAIL; goto done; } /*DFGRreqimil( 1 );*/ if (DFGRIgetimlut((const char *)file_name, image, width, height, IMAGE, 0, &compressed, &compr_type, &has_pal) == -1) { fprintf(stderr, "DFGRIgetimlut: Read error for file %s\n", file_name); ret_value = FAIL; goto done; } rig_ref = DFGRIlastref(); /* Determine the reference of the image just read. */ /* If the user has specified the reference option, then something has to be done. Note: the reason why the following part was not done inside the above "switch" statement is that the reference number of a raster image cannot be appropriately retrieved before actually reading in a raster image. */ if (dumprig_opts->filter == DREFNUM) { int ref_found = 0, m; /* Determine if the image just read has the reference specified by the user. */ for (m = 0; m < dumprig_opts->num_chosen; m++) { if (dumprig_opts->filter_num[m] == rig_ref) ref_found = 1; /* found image */ } if (!ref_found) { /* If no match, then the current image is not what the user wants and so skip it. */ free(image); image = NULL; /* reset */ continue; } } /* If not all images are to be dumped out and the current image is not what the user wants or if the user has specified a model and the model of the current image is not that one, then skip the current image. */ if (((dumprig_opts->filter == DINDEX) && (i != rig_chosen[x])) || (((ncomps * 8) != model) && (model != 0))) { free(image); image = NULL; /* reset */ continue; } /* Determine what to be dumped out. */ switch (dumprig_opts->contents) { case DVERBOSE: case DHEADER: fprintf(fp, "Data model: %d-bit raster image ", ncomps * 8); /* 24-bit images do not have palette */ if ((ncomps != 3) && has_pal) fprintf(fp, "with palette.\n"); else fprintf(fp, "without palette.\n"); fprintf(fp, "\twidth=%d; height=%d\n", (int)width, (int)height); fprintf(fp, "\treference=%d\n", (int)rig_ref); /* check compression if any */ if (compressed) { fprintf(fp, "\t*data is compressed with "); switch (compr_type) { case DFTAG_RLE: fprintf(fp, "RLE compression scheme.\n"); break; case DFTAG_IMCOMP: fprintf(fp, "IMCOMP compression scheme.\n"); break; case DFTAG_JPEG: case DFTAG_JPEG5: fprintf(fp, "JPEG compression scheme (24-bit data.)\n"); break; case DFTAG_GREYJPEG: case DFTAG_GREYJPEG5: fprintf(fp, "JPEG compression scheme (8-bit data.)\n"); break; default: fprintf(fp, "unknown scheme."); break; } /* switch */ fprintf(fp, "\n"); } /* if (compressed) */ else fprintf(fp, "\t*data is not compressed.\n"); if (dumprig_opts->contents == DHEADER) break; case DDATA: if (dumprig_opts->contents != DDATA) fprintf(fp, "\tData : \n"); if (FAIL == dumpfull(DFNT_UINT8, dumprig_opts, read_nelts * eltsz, image, fp, 5, 5)) { fprintf(stderr, "dumpfull: failed to dump %d'th image data for file %s", i, file_name); ret_value = FAIL; goto done; } free(image); image = NULL; break; default: printf("dumping RIG, unknown option \n"); ret_value = FAIL; goto done; } /* switch */ if (dumpall != 1 && i == rig_chosen[x]) x++; } /* for every image in file */ break; /* ASCII */ case DBINARY: /* binary file */ /* Get the name of the output file. */ if (dumprig_opts->dump_to_file) fp = fopen(dumprig_opts->file_name, "wb"); else fp = stdout; /* Determine the number of images in a file. */ if (model == 8) { /* raster 8 */ if ((ndsets = DFR8nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } } else if (model == 24) { /* raster 24 */ if ((ndsets = DF24nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } } else /* try both 8 and 24 */ { if ((temp = DFR8nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } if ((ndsets = DF24nimages(file_name)) == FAIL) { ret_value = FAIL; goto done; } ndsets += temp; } /* If all RIGs will be dumped, set the flag. */ if (num_rig_chosen == -1) dumpall = 1; x = 0; /* Used as the index of the array of "rig_chosen[x]". */ /* can only check index range here */ for (i = 0; i < dumprig_opts->num_chosen && dumprig_opts->filter == DINDEX; i++) { if ((rig_chosen[i] > ndsets) || (rig_chosen[i] < 0)) { fprintf(stderr, "\nThe index %d is out of range\n", (int)rig_chosen[i]); ret_value = FAIL; goto done; } } for (i = 0; i < ndsets && (dumpall != 0 || x < dumprig_opts->num_chosen); i++) { /* Examine all RIGs. */ int compressed; int has_pal; int32 eltsz; int32 read_nelts; uint16 rig_ref; uint16 compr_type; if (FAIL == DFGRgetimdims(file_name, &width, &height, &ncomps, &il)) { ret_value = FAIL; goto done; } /* Determine the size of each element; "ncomps" is 1 for an 8-bit image or 3 for a 24-bit image. */ eltsz = DFKNTsize(DFNT_UINT8 | DFNT_NATIVE) * ncomps; read_nelts = width * height; /* Number of elements to be read in. */ if ((image = (void *)malloc(read_nelts * eltsz)) == NULL) { fprintf(stderr, "Not enough memory!\n"); ret_value = FAIL; goto done; } if (DFGRIgetimlut((const char *)file_name, image, width, height, IMAGE, 0, &compressed, &compr_type, &has_pal) == -1) { fprintf(stderr, "DFGRIgetimlut: Read error for file %s\n", file_name); ret_value = FAIL; goto done; } rig_ref = DFGRIlastref(); /* Determine the reference of the image just read. */ /* If the user has specified the reference option, then something has to be done. Note: the reason why the following part was not done inside the above "switch" statement is that the reference number of a raster image cannot be appropriately retrieved before actually reading in a raster image. */ if (dumprig_opts->filter == DREFNUM) { int ref_found = 0, m; /* Determine if the image just read has the reference specified by the user. */ for (m = 0; m < dumprig_opts->num_chosen; m++) { if (dumprig_opts->filter_num[m] == rig_ref) ref_found = 1; /* found it */ } if (!ref_found) { /* If no match, then the current image is not what the user wants and so skip it. */ free(image); image = NULL; continue; } } /* If not all images are to be dumped out and the current image is not what the user wants or if the user has specified a model and the model of the current image is not that one, then skip the current image. */ if (((dumprig_opts->filter == DINDEX) && (i != rig_chosen[x])) || (((ncomps * 8) != model) && (model != 0))) { free(image); image = NULL; continue; } if (FAIL == dumpfull(DFNT_UINT8, dumprig_opts, read_nelts * ncomps, image, fp, 5, 5)) { fprintf(stderr, "dumpfull: failed to dump %d'th image data for file %s", i, file_name); ret_value = FAIL; goto done; } free(image); image = NULL; /* reset */ if (dumpall != 1 && i == rig_chosen[x]) x++; } /* for every image in file */ break; /* BINARY */ default: printf("dumping RIG, unknown output file option \n"); ret_value = FAIL; goto done; } /* switch for output file */ free(rig_chosen); rig_chosen = NULL; if (dumprig_opts->dump_to_file) fclose(fp); } /* while processing files */ done: if (ret_value == FAIL) { /* Failure cleanup */ free(image); free(rig_chosen); } return ret_value; } /* drig */ intn do_dumprig(intn curr_arg, intn argc, char *argv[], intn help) { dump_info_t dumprig_opts; /* dumprig options */ int model = 0; intn ret_value = SUCCEED; if (help == TRUE) { dumprig_usage(argc, argv); goto done; } /* end if */ /* initialize the structure that holds user's options and inputs */ init_dumprig_opts(&dumprig_opts); if (parse_dumprig_opts(&dumprig_opts, &curr_arg, argc, argv, &model) == FAIL) { dumprig_usage(argc, argv); ret_value = FAIL; goto done; } /* end if */ if (drig(&dumprig_opts, curr_arg, argc, argv, model) == FAIL) { fprintf(stderr, "Failure in drig.\n"); ret_value = FAIL; goto done; } done: free(dumprig_opts.filter_num); return ret_value; } /* end do_dumprig() */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_sds.c000066400000000000000000001566431503061704500172160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "hdp.h" #include #ifdef H4_HAVE_LIBSZ #include "szlib.h" intn have_szip = 1; #else intn have_szip = 0; #endif #include "cszip_priv.h" #include "nc_priv.h" /* to use some definitions */ void dumpsds_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf( "%s dumpsds [-k][-a|-i |-r |-n ] [-cdhvs] [-o ] [-bx] \n", argv[0]); printf("\t-k\tDump SDSs in the given order, must be specified before -i/-r/-n\n"); printf("\t-a\tDump all SDSs in the file (default)\n"); printf("\t-i \tDump the SDSs at positions listed in \n"); printf("\t-r \tDump the SDSs with reference number listed in \n"); printf("\t-n \tDump the SDSs with name listed in \n"); printf("\t-d\tDump data only, no tag/ref, formatted to input to hp2hdf\n"); printf("\t-h\tDump header only, no annotation for elements nor data\n"); printf("\t-v\tDump everything including all annotations (default)\n"); printf("\t-c\tPrint space characters as they are, not \\digit\n"); printf("\t-g\tDo not print data of file (global) attributes\n"); printf("\t-l\tDo not print data of local attributes\n"); printf("\t-s\tDo not add carriage return to a long line - dump it as a stream\n"); printf("\t-o \tOutput to file \n"); printf("\t-b\tBinary format of output\n"); printf("\t-x\tAscii text format of output (default)\n"); printf("\t\tList of hdf file names, separated by spaces\n"); } /* end list_usage() */ intn parse_dumpsds_opts(dump_info_t *dumpsds_opts, intn *curr_arg, intn argc, char *argv[]) { intn ret_value = SUCCEED; /* traverse the command and process each option */ /* Allows '/' for options on Windows */ #ifdef H4_HAVE_WIN32_API while ((*curr_arg < argc) && ((argv[*curr_arg][0] == '-') || (argv[*curr_arg][0] == '/'))) #else while ((*curr_arg < argc) && (argv[*curr_arg][0] == '-')) #endif { switch (argv[*curr_arg][1]) { case 'k': /* dump SDSs in the order they were given */ /* need to document that this option must be provided before any -i, -r, -n */ dumpsds_opts->keep_order = TRUE; (*curr_arg)++; break; case 'a': /* dump all, default */ dumpsds_opts->filter = DALL; /* indicate that no specific SDS requested, will dump all */ dumpsds_opts->num_chosen = NO_SPECIFIC; (*curr_arg)++; break; case 'i': /* dump by index */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given indices in structure all_types */ parse_value_opts(argv, curr_arg, &dumpsds_opts, IS_INDEX); (*curr_arg)++; break; case 'r': /* dump by reference */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given ref numbers in structure all_types */ parse_value_opts(argv, curr_arg, &dumpsds_opts, IS_REFNUM); (*curr_arg)++; break; case 'n': /* dump by names */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given names in structure all_types */ parse_value_opts(argv, curr_arg, &dumpsds_opts, IS_NAME); (*curr_arg)++; break; case 'd': /* dump data only */ dumpsds_opts->contents = DDATA; (*curr_arg)++; break; case 'h': /* no annotations nor data */ dumpsds_opts->contents = DHEADER; (*curr_arg)++; break; case 'v': /* dump all info */ dumpsds_opts->contents = DVERBOSE; (*curr_arg)++; break; case 's': /* do not add carriage returns to output data lines */ dumpsds_opts->as_stream = TRUE; (*curr_arg)++; break; case 'c': /* print space characters as they are, not \digit */ dumpsds_opts->clean_output = TRUE; (*curr_arg)++; break; case 'g': /* suppress file (global) attr data, print its header */ dumpsds_opts->no_gattr_data = TRUE; (*curr_arg)++; break; case 'l': /* suppress local attr data, only print its header */ dumpsds_opts->no_lattr_data = TRUE; (*curr_arg)++; break; case 'o': /* specify output file */ dumpsds_opts->dump_to_file = TRUE; /* Get file name */ strcpy(dumpsds_opts->file_name, argv[++(*curr_arg)]); (*curr_arg)++; break; case 'b': /* dump data in binary */ dumpsds_opts->file_format = DBINARY; (*curr_arg)++; break; case 'x': /* dump data in ascii, also default */ dumpsds_opts->file_format = DASCII; (*curr_arg)++; break; default: /* invalid dumpsds option */ printf("HDP ERROR>>> Invalid dumpsds option %s\n", argv[*curr_arg]); HGOTO_DONE(FAIL); } /* end switch */ } /* end while */ done: if (ret_value == FAIL) { /* Failure cleanup */ /* free the list if it had been allocated */ free_obj_chosen_t_list(&dumpsds_opts->all_types, dumpsds_opts->num_chosen); } return (ret_value); } /* end parse_dumpsds_opts */ /* sdsdumpfull prints a single SDS */ int32 sdsdumpfull(int32 sds_id, dump_info_t *dumpsds_opts, int32 rank, int32 dimsizes[], int32 nt, FILE *fp) { /* "rank" is the number of dimensions and "dimsizes[i]" is size of dimension "i". */ int32 j, i; void *buf = NULL; /* holds one row of data */ int32 numtype; int32 eltsz; int32 read_nelts; /* number of elements in one row */ int32 done; /* number of rows we have done */ int32 *left = NULL; int32 *start = NULL; int32 *edge = NULL; intn emptySDS = TRUE; file_format_t ff; intn status = FAIL; int32 status32 = FAIL; int32 ret_value = SUCCEED; /* temp. names for ease of use */ ff = dumpsds_opts->file_format; /* Compute the number of the bytes for each value. */ numtype = nt & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); read_nelts = dimsizes[rank - 1]; /* make sure we are not allocating 0 elements */ CHECK_POS(read_nelts, "read_nelts", "sdsdumpfull"); CHECK_POS(eltsz, "eltsz", "sdsdumpfull"); CHECK_POS(rank, "rank", "sdsdumpfull"); buf = (void *)malloc(read_nelts * eltsz); CHECK_ALLOC(buf, "buf", "sdsdumpfull"); left = (int32 *)malloc(rank * sizeof(int32)); CHECK_ALLOC(left, "left", "sdsdumpfull"); start = (int32 *)malloc(rank * sizeof(int32)); CHECK_ALLOC(start, "start", "sdsdumpfull"); edge = (int32 *)malloc(rank * sizeof(int32)); CHECK_ALLOC(edge, "edge", "sdsdumpfull"); /* BMR - how come this doesn't have stride as for GR? */ for (i = 0; i < rank; i++) { start[i] = 0; /* Starting location to read the data. */ left[i] = dimsizes[i]; edge[i] = 1; /* Number of values to read in each dimension. */ } /* so that the last edge has many elements as the last dimension??? */ edge[rank - 1] = dimsizes[rank - 1]; /* check if the SDS has data before proceeding if the file is HDF file */ if (dumpsds_opts->file_type == HDF_FILE) { status32 = SDcheckempty(sds_id, &emptySDS); if (status32 == FAIL) ERROR_GOTO_2("in %s: SDcheckempty failed for sds_id(%d)", "sdsdumpfull", (int)sds_id); } /* file is HDF */ else { if (dimsizes[0] > 0) /* some records had been written */ emptySDS = FALSE; } /* file is netCDF or CDF */ /* if the SDS is empty, display a message for ASCII output, nothing for binary */ if (emptySDS) { if (ff == DASCII) fprintf(fp, " No data written.\n"); HGOTO_DONE(SUCCEED); /* successful although empty, go to next SDS */ } if (rank == 1) { /* If there is only one dimension, then dump the data and the job is done. */ if (FAIL == SDreaddata(sds_id, start, NULL, edge, buf)) { /* If the data set has external element, get the external file name to provide information */ intn extfile_namelen = SDgetexternalfile(sds_id, 0, NULL, NULL); if (extfile_namelen > 0) { char *extfile_name = NULL; extfile_name = (char *)malloc(sizeof(char *) * (extfile_namelen + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "sdsdumpfull"); /* Get the external file information, we don't need offset here */ extfile_namelen = SDgetexternalfile(sds_id, extfile_namelen, extfile_name, NULL); ERROR_GOTO_3("in %s: SDreaddata failed for sds_id(%d) with external file %s. Please verify " "the file exists in the same directory.", "sdsdumpfull", (int)sds_id, extfile_name); SAFE_FREE(extfile_name); } else ERROR_GOTO_2("in %s: SDreaddata failed for sds_id(%d)", "sdsdumpfull", (int)sds_id); } /* if printing data only, print with no indentation */ if (dumpsds_opts->contents == DDATA) status = dumpfull(numtype, dumpsds_opts, read_nelts, buf, fp, 0, 0); else status = dumpfull(numtype, dumpsds_opts, read_nelts, buf, fp, DATA_INDENT, DATA_CONT_INDENT); if (FAIL == status) ERROR_GOTO_2("in %s: dumpfull failed for sds_id(%d)", "sdsdumpfull", (int)sds_id); } else if (rank > 1) { done = 0; /* In each iteration, a row is dumped and "left[]" is modified accordingly(?) */ while (!done) { if (FAIL == SDreaddata(sds_id, start, NULL, edge, buf)) { /* If the data set has external element, get the external file name to provide information */ intn extfile_namelen = SDgetexternalfile(sds_id, 0, NULL, NULL); if (extfile_namelen > 0) { char *extfile_name = NULL; extfile_name = (char *)malloc(sizeof(char *) * (extfile_namelen + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "sdsdumpfull"); /* Get the external file information, we don't need offset here */ extfile_namelen = SDgetexternalfile(sds_id, extfile_namelen, extfile_name, NULL); ERROR_GOTO_3("in %s: SDreaddata failed for sds_id(%d) with external file %s. Please " "verify the file exists in the same directory.", "sdsdumpfull", (int)sds_id, extfile_name); SAFE_FREE(extfile_name); } else ERROR_GOTO_2("in %s: SDreaddata failed for sds_id(%d)", "sdsdumpfull", (int)sds_id); } /* if printing data only, print with no indentation */ if (dumpsds_opts->contents == DDATA) status = dumpfull(numtype, dumpsds_opts, read_nelts, buf, fp, 0, 0); else status = dumpfull(numtype, dumpsds_opts, read_nelts, buf, fp, DATA_INDENT, DATA_CONT_INDENT); if (FAIL == status) ERROR_GOTO_2("in %s: dumpfull failed for sds_id(%d)", "sdsdumpfull", (int)sds_id); /* Modify the values for "start[]" and "left[]" that are to be used for dumping the next row. */ /* The following index variable "j" starts from "rank-2" because: (1) the range is from 0 to rank-1 (2) each element in dimension rank-1 is just an element in a row which is read in each time, and so we don't have to compute the "start" of it. */ for (j = rank - 2; j >= 0; j--) { /* Examine each dimension. */ if (--left[j] > 0) { /* Proceed in the same dimension; as long as there are elements in this dimension, this loop breaks here after the last element in the current dimension has been subtracted, we subtract one for the next lower dimension and reset "left[j]" to be the size of dimension j. */ start[j]++; break; } else { /* Nothing left in the current dimension. So, subtract one from the (j-1)th dimension and reset the value of "left[j]". */ left[j] = dimsizes[j]; start[j] = 0; if (j == 0) done = 1; /* someone added an extra line b/w two dims of data for nice format; this causes 1 extra line at the end of the output but I still don't understand the logic here so I left it alone; just removed the spaces attempting to line up the data. BMR 7/13/00 */ /*if( ff==DASCII && !dumpsds_opts->as_stream )*/ if (ff == DASCII) if (j == rank - 2) fprintf(fp, "\n"); } } /* for j */ } /* while */ } /* else */ /* add an extra line between two datasets for pretty format this also causes 1 extra line at the end of the output! */ /*if (ff == DASCII && !dumpsds_opts->as_stream )*/ if (ff == DASCII) fprintf(fp, "\n"); done: SAFE_FREE(edge) SAFE_FREE(start) SAFE_FREE(left) SAFE_FREE(buf) return ret_value; } /* sdsdumpfull */ /* compose the list of indices of the requested SDSs although some SDSs are requested by ref# or name. The routine returns: - the number of SDSs to be processed, or - NO_SPECIFIC if all SDSs are to be processed, or - 0 if none. If any failure occurs, the parameter index_error will be set to TRUE */ intn get_SDSindex_list(int32 sd_id, dump_info_t *dumpsds_opts, int32 **sds_chosen, /* array of indices of SDSs to be processed */ intn *index_error) { intn ii; int32 sds_index, /* index of an SDS */ sds_count = 0, /* number of SDSs to be processed */ num_sds_chosen = dumpsds_opts->num_chosen; intn ret_value = 0; /* assume that no SDS will be processed */ /* if no specific datasets are requested, return the SDS count as NO_SPECIFIC (-1) to indicate that all datasets are to be dumped */ if (dumpsds_opts->num_chosen == NO_SPECIFIC) HGOTO_DONE(NO_SPECIFIC); /* if specific datasets were requested, allocate space for the array of indices */ if (num_sds_chosen > 0) alloc_index_list(sds_chosen, num_sds_chosen); /* else, no chosen SDSs but filter is not DALL, it shouldn't be this combination, return SDS count as NO_SPECIFIC to dump all */ else HGOTO_DONE(NO_SPECIFIC); for (ii = 0; ii < num_sds_chosen; ii++) { /* if the current chosen SDS was requested by its index, store the index in the array sds_chosen */ switch (dumpsds_opts->all_types[ii].type_of_info) { case IS_INDEX: (*sds_chosen)[ii] = dumpsds_opts->all_types[ii].index; sds_count++; break; /* if the current chosen SDS was requested by its ref#, convert the ref# to index and store the index in the array sds_chosen */ case IS_REFNUM: sds_index = SDreftoindex(sd_id, dumpsds_opts->all_types[ii].refnum); if (sds_index == FAIL) { printf("SDS with reference number %d: not found\n", (int)dumpsds_opts->all_types[ii].refnum); *index_error = TRUE; /* error */ } else { (*sds_chosen)[sds_count] = sds_index; sds_count++; } break; /* if the current chosen SDS was requested by its name, convert the name to index and store the index in the array sds_chosen */ case IS_NAME: sds_index = SDnametoindex(sd_id, dumpsds_opts->all_types[ii].name); /* NOTE: should handle the case of more than one var of the same name too */ if (sds_index == FAIL) { printf("SDS with name '%s': not found\n", dumpsds_opts->all_types[ii].name); *index_error = TRUE; /* error */ } else { (*sds_chosen)[sds_count] = sds_index; sds_count++; } break; default: fprintf( stderr, "in get_SDSindex_list: Info should only be an index, ref number, or name of an SDS\n"); *index_error = TRUE; /* error */ } /* end switch */ } /* end for loop */ ret_value = sds_count; done: return ret_value; } /* end of get_SDSindex_list */ /* Displays all SD file attributes */ intn print_SDattrs(int32 sd_id, FILE *fp, int32 n_file_attrs, dump_info_t *dumpsds_opts) { int32 attr_index, attr_count, attr_nt, attr_buf_size; char attr_name[MAXNAMELEN], *attr_nt_desc = NULL; void *attr_buf = NULL; intn printed = FALSE; /* whether file attr title has been printed */ intn status = FAIL, /* status from a called routine */ ret_value = SUCCEED; /* for each file attribute, print its info and values */ for (attr_index = 0; attr_index < n_file_attrs; attr_index++) { /* get the current attr's name, number type, and number of values */ status = SDattrinfo(sd_id, attr_index, attr_name, &attr_nt, &attr_count); if (status == FAIL) ERROR_CONT_2("in %s: SDattrinfo failed for %d'th attribute", "print_SDattrs", (int)attr_index); /* get number type description of the attribute */ attr_nt_desc = HDgetNTdesc(attr_nt); if (attr_nt_desc == NULL) ERROR_CONT_2("in %s: HDgetNTdesc failed for %d'th attribute", "print_SDattrs", (int)attr_index); /* print a title line for file attributes if it's not printed yet and set flag so it won't be printed again */ if (!printed) { fprintf(fp, "\nFile attributes:\n"); printed = TRUE; } /* display the attribute's information */ fprintf(fp, "\t Attr%i: Name = %s\n", (int)attr_index, attr_name); fprintf(fp, "\t\t Type = %s \n\t\t Count= %i\n", attr_nt_desc, (int)attr_count); resetBuff((void *)&attr_nt_desc); /* display the attribute's values unless user chose to suppress them or there are no values stored */ if (dumpsds_opts->no_gattr_data == FALSE && attr_count != 0) { /* to be sure that attr_buf is free before reuse since sometimes we have to break the current loop and continue to the next item */ resetBuff(&attr_buf); /* calculate the buffer size of the attribute using the number of values in the attribute and its value size */ attr_buf_size = DFKNTsize(attr_nt) * attr_count; /* make sure we are not allocating 0 elements */ CHECK_POS(attr_buf_size, "attr_buf_size", "print_SDattrs"); /* allocate space for the attribute's values */ attr_buf = (void *)malloc(attr_buf_size); /* if allocation fails, handle the failure */ CHECK_ALLOC(attr_buf, "attr_buf", "print_SDattrs"); /* read the values of the attribute into the buffer attr_buf */ status = SDreadattr(sd_id, attr_index, attr_buf); if (status == FAIL) ERROR_CONT_2("in %s: SDreadattr failed for %d'th attribute", "print_SDattrs", (int)attr_index); fprintf(fp, "\t\t Value = "); /* if the user wishes to have clean output, i.e. option -c is selected - Note that this option is only applicable to DFNT_CHAR type, the option will be ignored for other types */ if (dumpsds_opts->clean_output && attr_nt == DFNT_CHAR) { status = dumpclean(attr_nt, dumpsds_opts, attr_count, attr_buf, fp); if (status == FAIL) ERROR_CONT_2("in %s: dumpclean failed for %d'th attribute", "print_SDattrs", (int)attr_index); } else /* show tab, lf, null char... in octal as \011, \012, \000... */ { status = dumpfull(attr_nt, dumpsds_opts, attr_count, attr_buf, fp, ATTR_INDENT, ATTR_CONT_INDENT); if (status == FAIL) ERROR_CONT_2("in %s: dumpfull failed for %d'th attribute", "print_SDattrs", (int)attr_index); } SAFE_FREE(attr_buf); } /* end of if no file attributes */ } /* for each file attribute */ return (ret_value); } /* end of print_SDattrs */ intn print_SDSattrs(int32 sds_id, int32 nattrs, FILE *fp, dump_info_t *dumpsds_opts) { int32 attr_index, attr_count, attr_nt, attr_buf_size; char attr_name[MAXNAMELEN], *attr_nt_desc = NULL; void *attr_buf = NULL; intn status = FAIL, /* status returned from a called routine */ ret_value = SUCCEED; /* returned value of print_SDSattrs */ /* for each attribute, display its info and data */ for (attr_index = 0; attr_index < nattrs; attr_index++) { /* get the current attr's name, number type, and number of values */ status = SDattrinfo(sds_id, attr_index, attr_name, &attr_nt, &attr_count); if (status == FAIL) ERROR_CONT_2("in %s: SDattrinfo failed for %d'th attribute", "print_SDSattrs", (int)attr_index); /* calculate the buffer size of the attribute using the number of values in the attribute and its value size */ attr_buf_size = DFKNTsize(attr_nt | DFNT_NATIVE) * attr_count; /* make sure we are not allocating 0 elements */ CHECK_POS(attr_buf_size, "attr_buf_size", "print_SDSattrs"); /* get number type description of the attribute */ attr_nt_desc = HDgetNTdesc(attr_nt); if (attr_nt_desc == NULL) ERROR_CONT_2("in %s: HDgetNTdesc failed for %d'th attribute", "print_SDSattrs", (int)attr_index); /* display the attribute's information */ fprintf(fp, "\t Attr%d: Name = %s\n", (int)attr_index, attr_name); fprintf(fp, "\t\t Type = %s \n\t\t Count= %d\n", attr_nt_desc, (int)attr_count); /* free buffer and reset it to NULL */ resetBuff((void *)&attr_nt_desc); /* display the attribute's values unless user chose to suppress them or there are no values stored */ if (dumpsds_opts->no_lattr_data == FALSE && attr_count != 0) { /* to be sure that attr_buf is free before reuse since sometimes we have to break the current loop and continue to the next item */ resetBuff(&attr_buf); /* allocate space for attribute's values */ attr_buf = (void *)malloc(attr_buf_size); CHECK_ALLOC(attr_buf, "attr_buf", "print_SDSattrs"); /* read the values of the attribute into buffer attr_buf */ status = SDreadattr(sds_id, attr_index, attr_buf); if (status == FAIL) { free(attr_buf); ERROR_CONT_2("in %s: SDreadattr failed for %d'th attribute", "print_SDSattrs", (int)attr_index); } fprintf(fp, "\t\t Value = "); /* if the user wishes to have clean output, i.e. option -c is selected - Note that this option is only applicable to DFNT_CHAR type, the option will be ignored for other types */ if (dumpsds_opts->clean_output && attr_nt == DFNT_CHAR) { status = dumpclean(attr_nt, dumpsds_opts, attr_count, attr_buf, fp); if (status == FAIL) { free(attr_buf); ERROR_CONT_2("in %s: dumpclean failed for %d'th attribute", "print_SDSattrs", (int)attr_index); } } else /* show tab, lf, null char... in octal as \011, \012, \000... */ { status = dumpfull(attr_nt, dumpsds_opts, attr_count, attr_buf, fp, ATTR_INDENT, ATTR_CONT_INDENT); if (status == FAIL) { free(attr_buf); ERROR_CONT_2("in %s: dumpfull failed for %d'th attribute", "print_SDSattrs", (int)attr_index); } } SAFE_FREE(attr_buf); } /* end of if no local attributes */ } /* for each attribute */ return (ret_value); } /* end of print_SDSattrs */ void resetSDS(int32 *sds_id, int32 sds_index, char *curr_file_name) { if (*sds_id != FAIL) { if (FAIL == SDendaccess(*sds_id)) fprintf(stderr, "SDendaccess failed for %d'th SDS in file %s\n", (int)sds_index, curr_file_name); *sds_id = FAIL; } } /* end of resetSDS */ /* * Forms a string containing all the szip encoding schemes and other options * that are set in the parameter options_mask. BMR - bugzilla 1202 - Jul, 2008 */ intn option_mask_string(int32 options_mask, char *opt_mask_strg) { intn ret_value = SUCCEED; char numval[16]; strcpy(opt_mask_strg, ""); /* init string to empty string */ /* just in case options_mask is invalid */ if (options_mask == 0) ret_value = FAIL; /* mask options_mask with each szip encoding schemes and options to form the associate option mask string */ if ((options_mask & H4_SZ_ALLOW_K13_OPTION_MASK) != 0) strcpy(opt_mask_strg, "H4_SZ_ALLOW_K13_OPTION_MASK"); if ((options_mask & H4_SZ_CHIP_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_CHIP_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_CHIP_OPTION_MASK"); } if ((options_mask & H4_SZ_EC_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_EC_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_EC_OPTION_MASK"); } if ((options_mask & H4_SZ_LSB_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_LSB_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_LSB_OPTION_MASK"); } if ((options_mask & H4_SZ_MSB_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_MSB_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_MSB_OPTION_MASK"); } if ((options_mask & H4_SZ_NN_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_NN_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_NN_OPTION_MASK"); } if ((options_mask & H4_SZ_RAW_OPTION_MASK) != 0) { if (strlen(opt_mask_strg) > 0) { strcat(opt_mask_strg, "|"); strcat(opt_mask_strg, "H4_SZ_RAW_OPTION_MASK"); } else strcpy(opt_mask_strg, "H4_SZ_RAW_OPTION_MASK"); } /* also print the numerical value of the options mask */ sprintf(numval, " (%d)", options_mask); strcat(opt_mask_strg, numval); return (ret_value); } /* option_mask_string */ /* * Prints compression method and compression information of a data set. * BMR - bugzilla 1202 - Jul, 2008 */ intn print_comp_info(FILE *fp, int32 sds_id, comp_coder_t *comp_type) { comp_info c_info; /* Compression structure */ int32 comp_size = 0, orig_size = 0; /* compressed and original sizes */ intn status = FAIL; /* returned status from a called function */ /* get compression info */ memset(&c_info, 0, sizeof(c_info)); status = SDgetcompinfo(sds_id, comp_type, &c_info); /* if getting comp info succeeds, proceed to print out appropriate compression information */ if (status != FAIL) { /* print compression method or "NONE" */ fprintf(fp, "\t Compression method = %s\n", comp_method_txt(*comp_type)); switch (*comp_type) { case COMP_CODE_SKPHUFF: fprintf(fp, "\t\t Skipping unit size = %d\n", c_info.skphuff.skp_size); break; case COMP_CODE_DEFLATE: fprintf(fp, "\t\t Deflate level = %d\n", c_info.deflate.level); break; case COMP_CODE_SZIP: { char mask_strg[160]; /* 160 is to cover all options and number val*/ if (option_mask_string(c_info.szip.options_mask, mask_strg) != FAIL) fprintf(fp, "\t\t Option mask = %s\n", mask_strg); else fprintf(fp, "\t\t Option mask might be invalid = %d\n", (int)c_info.szip.options_mask); fprintf(fp, "\t\t Pixels per block = %d\n", (int)c_info.szip.pixels_per_block); fprintf(fp, "\t\t Pixels per scanline = %d\n", (int)c_info.szip.pixels_per_scanline); fprintf(fp, "\t\t Bits per pixel = %d\n", (int)c_info.szip.bits_per_pixel); fprintf(fp, "\t\t Pixels = %d\n", (int)c_info.szip.pixels); break; } default: /* nothing */ break; } /* switch */ } else { /* It's likely that SDgetcompinfo failed because SZIP library is not avail */ /* Only get compression type and if it's SZIP, display appropriate info */ status = SDgetcomptype(sds_id, comp_type); if (status != FAIL && *comp_type == COMP_CODE_SZIP) { fprintf(fp, "\t Compression method = %s\n", comp_method_txt(*comp_type)); fprintf(fp, "\t\t Compression information is unavailable (no SZIP library)\n"); } /* Failed to get compression type, do not proceed */ else { fprintf(fp, "\t Compression method = \n"); return (status); } } /* print compression ratio */ if (*comp_type != COMP_CODE_NONE) { status = SDgetdatasize(sds_id, &comp_size, &orig_size); if (status != FAIL) { /* calculate and print compression ratio */ if (comp_size > 0 && orig_size > 0) { double orig = orig_size, comp = comp_size, ratio = 0.00; ratio = orig / comp; fprintf(fp, "\t Compression ratio (original:compressed) = %.2f:1\n", ratio); } else if (comp_size == 0 && orig_size == 0) { fprintf(fp, "\t Compression ratio = \n"); } return (status); } /* print_comp_info */ /* printSDS_ASCII prints all of the requested SDSs in the file */ intn printSDS_ASCII(int32 sd_id, dump_info_t *dumpsds_opts, int32 sds_index, /* index of the SDS */ FILE *fp) { int32 sds_id = FAIL, /* SDS id, always reset to FAIL when not used */ sds_ref, /* ref# of an SDS */ dim_id = FAIL, /* id of an SDS dimension */ rank, /* number of dimensions of an SDS */ nt, /* number type of an SDS */ nattrs, /* # of attributes assigned to an SDS */ dimsizes[MAXRANK], /* SDS dimensions */ dimNT[MAXRANK], /* number type of dimension */ dimnattr[MAXRANK]; /* # of attributes of a dim */ char dim_nm[MAXNAMELEN], /* dimension name */ *sdsname = NULL, /* SDS name */ *nt_desc = NULL, /* SDS's or dim's num type description */ *attr_nt_desc = NULL, /* attr's nt description */ curr_file_name[MAXFNLEN]; /* curr hdf file name */ uint16 name_len = 0; comp_coder_t comp_type = COMP_CODE_NONE; intn isdimvar, /* TRUE if curr SDS is used for a dim */ j, status = FAIL, /* status returned from a routine */ ret_value = SUCCEED; /* returned value of printSDS_ASCII */ /* Reset variables. */ memset(dimsizes, 0, sizeof(int32) * MAXRANK); memset(dimNT, 0, sizeof(int32) * MAXRANK); memset(dimnattr, 0, sizeof(int32) * MAXRANK); /* get access to the current dataset */ sds_id = SDselect(sd_id, sds_index); if (sds_id == FAIL) ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDselect", (int)sds_index); status = SDgetnamelen(sds_id, &name_len); if (FAIL == status) { ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDgetnamelen", (int)sds_index); } /* allocate space for sds name */ sdsname = (char *)malloc(name_len + 1); CHECK_ALLOC(sdsname, "sdsname", "printSDS_ASCII"); /* get dataset's information */ status = SDgetinfo(sds_id, sdsname, &rank, dimsizes, &nt, &nattrs); if (status == FAIL) { ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDgetinfo", (int)sds_index); } /* BMR: it seems like this whole block of code is to get number type of dim0, all the other info will be discarded */ isdimvar = (SDiscoordvar(sds_id)) ? TRUE : FALSE; if (isdimvar) { /* use dim0 nt instead of dimvar nt, because when no dim values dimvar nt was set to float32 by default */ int32 size, num_attrs; /* get dimension id for accessing */ dim_id = SDgetdimid(sds_id, 0); if (dim_id == FAIL) { ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDgetdimid", (int)sds_index); } /* get information of current dimension */ if (SDdiminfo(dim_id, NULL, &size, &nt, &num_attrs) == FAIL) { ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDdiminfo", (int)sds_index); } } /* print the current SDS's as specified by user's options */ switch (dumpsds_opts->contents) { case DVERBOSE: case DHEADER: nt_desc = HDgetNTdesc(nt); if (nt_desc == NULL) { ERROR_BREAK_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "HDgetNTdesc", (int)sds_index, FAIL); /* did this one fail on allocation and need exit(1)? */ } /* Note: a variable can be used to hold an SDS or a dimension. */ /* display dimension info if the variable is used to contain a dimension */ if (isdimvar) { fprintf(fp, "\nDimension Variable Name = %s\n\t ", sdsname); fprintf(fp, "Index = %d\n\t Scale Type= %s\n", (int)sds_index, nt_desc); } /* display the SDS info, otherwise */ else { fprintf(fp, "\nVariable Name = %s\n\t Index = ", sdsname); fprintf(fp, "%d\n\t Type= %s\n", (int)sds_index, nt_desc); } resetBuff((void *)&nt_desc); /* done with nt_desc */ /* If the current file is not a netCDF, print the SDS' ref# and compression information */ if (dumpsds_opts->file_type == HDF_FILE) { /* get SDS's ref# from its id */ sds_ref = SDidtoref(sds_id); if (sds_ref == FAIL) ERROR_BREAK_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDidtoref", (int)sds_index, FAIL); fprintf(fp, "\t Ref. = %d\n", (int)sds_ref); /* print compression method and info or "NONE" */ status = print_comp_info(fp, sds_id, &comp_type); if (status == FAIL) { ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "print_comp_info", (int)sds_index); } } fprintf(fp, "\t Rank = %d\n\t Number of attributes = %d\n", (int)rank, (int)nattrs); /* if the SDS has rank 0, skip to the next SDS */ if (rank == 0) { break; } /* print each dimension of the current SDS */ for (j = 0; j < rank; j++) { int32 size; /* size of the current dimension */ /* get current dimension id for access */ if (FAIL == (dim_id = SDgetdimid(sds_id, j))) ERROR_BREAK_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "SDgetdimid", (int)sds_index, FAIL); /* get information of current dimension */ ret_value = SDdiminfo(dim_id, dim_nm, &size, &(dimNT[j]), &(dimnattr[j])); if (FAIL == ret_value) ERROR_BREAK_4("in %s: %s failed for %d'th dimension of %d'th SDS", "printSDS_ASCII", "SDdiminfo", j, (int)sds_index, FAIL); fprintf(fp, "\t Dim%d: Name=%s\n", (int)j, dim_nm); /* "size" was provided at creation time, "dimsizes" has actual sizes */ if (size == NC_UNLIMITED) { fprintf(fp, "\t\t Size = UNLIMITED "); fprintf(fp, "(currently %d)\n", (int)dimsizes[j]); } else fprintf(fp, "\t\t Size = %d\n", (int)dimsizes[j]); /* don't print type and # of attrs for dim var */ if (isdimvar == 0) { attr_nt_desc = HDgetNTdesc(dimNT[j]); if (attr_nt_desc == NULL) ERROR_BREAK_4("in %s: %s failed for %d'th dimension of %d'th SDS", "printSDS_ASCII", "HDgetNTdesc", j, (int)sds_index, FAIL); fprintf(fp, "\t\t Scale Type = %s\n", attr_nt_desc); fprintf(fp, "\t\t Number of attributes = %d\n", (int)dimnattr[j]); resetBuff((void *)&attr_nt_desc); } } /* end each for dimension */ /* print dataset's attributes */ status = print_SDSattrs(sds_id, nattrs, fp, dumpsds_opts); if (status == FAIL) ERROR_BREAK_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "print_SDSattrs", (int)sds_index, FAIL); /* header only, don't go into case DDATA */ if (dumpsds_opts->contents == DHEADER) break; /* case DDATA doesn't need this */ fprintf(fp, "\t Data : \n"); case DDATA: if (comp_type == COMP_CODE_SZIP && have_szip == 0) { fprintf(fp, "\t\t \n"); fprintf(fp, "\t\t \n"); } else { if (!isdimvar || nt != 0) { /* no dump if dimvar w/o scale values */ status = sdsdumpfull(sds_id, dumpsds_opts, rank, dimsizes, nt, fp); if (FAIL == status) ERROR_BREAK_3("in %s: %s failed for %d'th SDS", "printSDS_ASCII", "sdsdumpfull", (int)sds_index, FAIL); } } break; default: printf("Output format must be either -d, -h, or -v only.\n"); } /* switch */ resetSDS(&sds_id, sds_index, curr_file_name); /* end access to current SDS */ SAFE_FREE(sdsname); done: if (ret_value == FAIL) { /* Failure cleanup */ if (sds_id != FAIL) SDendaccess(sds_id); SAFE_FREE(sdsname); } return ret_value; } /* end of printSDS_ASCII() */ intn printSDS_BINARY(int32 sd_id, dump_info_t *dumpsds_opts, int32 sds_index, /* index of the SDS */ FILE *fp) { int32 sds_id = FAIL, dimsizes[MAXRANK], rank, nt, nattrs; char curr_file_name[MAXFNLEN]; comp_coder_t comp_type = COMP_CODE_NONE; intn status = FAIL, ret_value = SUCCEED; /* temp. names for file type and curr input file name for ease of use */ strcpy(curr_file_name, dumpsds_opts->ifile_name); /* Reset variable */ memset(dimsizes, 0, sizeof(int32) * MAXRANK); sds_id = SDselect(sd_id, sds_index); if (sds_id == FAIL) ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_BINARY", "SDselect", (int)sds_index); status = SDgetinfo(sds_id, NULL, &rank, dimsizes, &nt, &nattrs); if (FAIL == status) { resetSDS(&sds_id, sds_index, curr_file_name); ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_BINARY", "SDgetinfo", (int)sds_index); } /* get compression method and if szipped compressed data is being read, make sure that szip library is available before reading */ status = SDgetcomptype(sds_id, &comp_type); if (comp_type == COMP_CODE_SZIP && have_szip == 0) { fprintf(fp, "\t\t \n"); fprintf(fp, "\t\t \n"); } else { /* can output data to binary file */ if (rank > 0 && dimsizes[0] != 0) { status = sdsdumpfull(sds_id, dumpsds_opts, rank, dimsizes, nt, fp); if (FAIL == status) ERROR_GOTO_3("in %s: %s failed for %d'th SDS", "printSDS_BINARY", "sdsdumpfull", (int)sds_index); } } /* can output data */ resetSDS(&sds_id, sds_index, curr_file_name); done: if (ret_value == FAIL) { /* Failure cleanup */ if (sds_id != FAIL) SDendaccess(sds_id); } return ret_value; } /* end of printSDS_BINARY */ intn dsd(dump_info_t *dumpsds_opts, intn curr_arg, intn argc, char *argv[]) { int32 sd_id = FAIL, *sds_chosen = NULL, num_sds_chosen, ndsets, n_file_attrs; char file_name[MAXFNLEN]; FILE *fp = NULL; file_format_t ff = dumpsds_opts->file_format; intn index_error = 0, ii, status = FAIL, ret_value = SUCCEED; /* check for missing input file name */ if (curr_arg >= argc) { fprintf(stderr, "Missing input file name. Please try again.\n"); return (FAIL); /* nothing to be cleaned up at this point */ } /* going through each input file, open the file, try to compose the list of indices of the SDSs in the file that are requested, then read and display information and data of each SDS in the specified manner */ while (curr_arg < argc) { strcpy(file_name, argv[curr_arg]); /* get current file name */ strcpy(dumpsds_opts->ifile_name, file_name); /* record file name */ curr_arg++; /* move argument pointer forward */ /* HDF4 doesn't process netCDF 64-bit files */ if (HDisnetcdf64(file_name)) { printf("Invalid input file: hdp cannot read a netCDF 64-bit file, %s\n", file_name); continue; /* to the next file */ } if (HDisnetcdf(file_name)) /* record if file is netCDF */ dumpsds_opts->file_type = netCDF_FILE; else if (Hishdf(file_name)) /* record if file is HDF */ dumpsds_opts->file_type = HDF_FILE; else { /* if there are no more files to be processed, print informative message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dsd: %s is not an HDF or netCDF file", file_name); } else /* print message, then continue processing the next file */ { ERROR_CONT_1("in dsd: %s is not an HDF or netCDF file", file_name); } } /* open current hdf file with error check, if fail, go to next file */ sd_id = SDstart(file_name, DFACC_RDONLY); if (sd_id == FAIL) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dsd: Failure in opening file %s", file_name); } else /* print message, then continue processing the next file */ ERROR_CONT_1("in dsd: Failure in opening file %s", file_name); } /* compose the list of indices of SDSs to be processed in the current file: sds_chosen is the list and return value is the number of items in the list */ num_sds_chosen = get_SDSindex_list(sd_id, dumpsds_opts, &sds_chosen, &index_error); /* if there are errors with the given indices, ref#s, or names of the requested datasets, and so the input yields no valid datasets, then close the interface and the input file, and move on to the next file */ if (index_error && num_sds_chosen == 0) { SAFE_FREE(sds_chosen) if (FAIL == SDend(sd_id)) fprintf(stderr, "in dsd: SDend failed in closing file %s\n", file_name); continue; /* to the next file */ } /* end if */ /* obtain number of datasets in the file and number of file attributes, ndsets will be used to process the datasets, n_file_attrs will be used to print file attributes */ status = SDfileinfo(sd_id, &ndsets, &n_file_attrs); if (status == FAIL) ERROR_GOTO_2("in dsd: %s failed for file %s", "SDfileinfo", file_name); fp = stdout; /* assume no output file given */ /* ASCII or binary dump? */ switch (ff) { case DASCII: /* ASCII file */ /* open output file for ASCII or direct to standard output */ if (dumpsds_opts->dump_to_file) fp = fopen(dumpsds_opts->file_name, "w"); /* display the name and global attributes of the current file if data only option is not selected */ if (dumpsds_opts->contents != DDATA) { fprintf(fp, "File name: %s \n", file_name); /* print SD file attributes */ status = print_SDattrs(sd_id, fp, n_file_attrs, dumpsds_opts); if (status == FAIL) ERROR_CONT_2("in dsd: %s failed for file %s", file_name, "print_SDattrs"); } /* If the user requests to dump the SDSs in the order they were given, -k given */ if (dumpsds_opts->keep_order) { for (ii = 0; ii < num_sds_chosen; ii++) { /* Print the current SDS in ASCII format */ status = printSDS_ASCII(sd_id, dumpsds_opts, sds_chosen[ii], fp); if (status == FAIL) fprintf(stderr, "HDP ERROR>>> in dsd: %s failed for file %s\n", "printSDS_ASCII", file_name); } } /* if: -k given */ else /* no -k */ { int32 sds_count, sds_index; intn dumpall = FALSE; /* if only specific datasets were requested, sort the list to dump them in index order */ if (num_sds_chosen == NO_SPECIFIC) dumpall = TRUE; else sort(sds_chosen, num_sds_chosen); sds_count = 0; /* no SDS has been processed yet */ /* For each index, if the user requests to dump all SDSs or if there are more requested SDSs, process the curr SDS */ for (sds_index = 0; sds_index < ndsets /* validate index */ && (dumpall /* either all datasets are dumped or */ || sds_count < num_sds_chosen); /* or more requested SDSs */ sds_index++) { /* If the user neither requests dump all nor the current SDS */ if ((!dumpall) && (sds_index != sds_chosen[sds_count])) continue; /* skip */ /* Count the # of datasets being processed */ sds_count++; /* Print the current SDS in ASCII format */ status = printSDS_ASCII(sd_id, dumpsds_opts, sds_index, fp); if (status == FAIL) fprintf(stderr, "HDP ERROR>>> in dsd: %s failed for file %s\n", "printSDS_ASCII", file_name); } } /* else: no -k */ /* Close output file only if option -o is given */ if (dumpsds_opts->dump_to_file) fclose(fp); break; case DBINARY: /* binary file */ /* Get output file name */ if (dumpsds_opts->dump_to_file) fp = fopen(dumpsds_opts->file_name, "wb"); /* If the user requests to dump the SDSs in the order they were given, -k given */ if (dumpsds_opts->keep_order) { for (ii = 0; ii < num_sds_chosen; ii++) { /* Print the current SDS in BINARY format */ status = printSDS_BINARY(sd_id, dumpsds_opts, sds_chosen[ii], fp); if (status == FAIL) fprintf(stderr, "HDP ERROR>>> in dsd: %s failed for file %s\n", "printSDS_BINARY", file_name); } } /* if: -k given */ else /* no -k */ { int32 sds_count, sds_index; intn dumpall = FALSE; /* if only specific datasets were requested, sort the list to dump them in index order */ if (num_sds_chosen == NO_SPECIFIC) dumpall = TRUE; else sort(sds_chosen, num_sds_chosen); sds_count = 0; /* no SDS has been processed yet */ /* For each index, if the user requests to dump all SDSs or if there are more requested SDSs, process the curr SDS */ for (sds_index = 0; sds_index < ndsets /* validate index */ && (dumpall /* either all datasets are dumped or */ || sds_count < num_sds_chosen); /* or more requested SDSs */ sds_index++) { /* If the user neither requests dump all nor the current SDS */ if ((!dumpall) && (sds_index != sds_chosen[sds_count])) continue; /* skip */ /* Count the # of datasets being processed */ sds_count++; /* Print the current SDS in BINARY format */ status = printSDS_BINARY(sd_id, dumpsds_opts, sds_index, fp); if (status == FAIL) fprintf(stderr, "HDP ERROR>>> in dsd: %s failed for file %s\n", "printSDS_BINARY", file_name); } } /* else: no -k */ /* Close output file only if option -o is given */ if (dumpsds_opts->dump_to_file) fclose(fp); break; default: printf("Output file type must be either ascii or binary only\n"); } /* switch for output file */ SAFE_FREE(sds_chosen) if (FAIL == SDend(sd_id)) ERROR_CONT_1("in dsd: SDend failed for file %s", file_name); sd_id = FAIL; /* reset */ } /* while processing files */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (sd_id != FAIL) SDend(sd_id); if (fp != NULL && fp != stdout) fclose(fp); SAFE_FREE(sds_chosen); } return ret_value; } /* dsd */ /* Exported */ intn do_dumpsds(intn curr_arg, intn argc, char *argv[], intn help) { dump_info_t dumpsds_opts; /* dumpsds options */ intn status = FAIL, ret_value = SUCCEED; /* initialize the structure that holds user's options and inputs */ init_dump_opts(&dumpsds_opts); /* command line: hdp help */ if (help == TRUE) { dumpsds_usage(argc, argv); goto done; } /* end if */ /* incomplete command */ if (curr_arg >= argc) { dumpsds_usage(argc, argv); ERROR_GOTO_0("in do_dumpsds: command is incomplete"); } /* end if */ /* parse the user's command and store the inputs in dumpsds_opts */ status = parse_dumpsds_opts(&dumpsds_opts, &curr_arg, argc, argv); if (status == FAIL) { dumpsds_usage(argc, argv); ret_value = FAIL; /* so caller can be traced in debugging */ goto done; /* skip dsd */ } /* display data and information as specified in dumpsds_opts */ status = dsd(&dumpsds_opts, curr_arg, argc, argv); if (status == FAIL) ERROR_GOTO_0("in do_dumpsds: dsd failed"); done: /* free the list of structs containing info of selected SDSs */ free_obj_chosen_t_list(&dumpsds_opts.all_types, dumpsds_opts.num_chosen); return ret_value; } /* end do_dumpsds() */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_util.c000066400000000000000000000733531503061704500173760ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* hdp_util.c,v 1.1 1994/04/18 15:49:18 georgev Exp */ #include "hdp.h" const char *unknown_tag = "Unknown Tag"; char * tagnum_to_name(intn num) { char *ret; if (num < 0) ret = NULL; else ret = HDgettagsname((uint16)num); if (ret == NULL) ret = strdup(unknown_tag); return (ret); } /* end tagnum_to_name() */ intn tagname_to_num(const char *name) { return (HDgettagnum(name)); } /* end tagname_to_num() */ /* * Routines to create a list of file names from the command line */ /* assumes that curr_arg is pointing to the first file name */ filelist_t * make_file_list(intn curr_arg, intn argc, char *argv[]) { intn i; filelist_t *ret; if (curr_arg > argc) /* consistency check */ return (NULL); ret = (filelist_t *)malloc(sizeof(filelist_t)); if (ret == NULL) { fprintf(stderr, "make_file_list: space allocation failed\n"); return (NULL); } ret->file_arr = (char **)malloc(sizeof(char *) * ((argc - curr_arg) + 1)); if (ret->file_arr == NULL) { fprintf(stderr, "make_file_list: space allocation failed\n"); free(ret); return (NULL); } ret->max_files = (argc - curr_arg); ret->curr_file = 0; for (i = 0; curr_arg < argc; i++, curr_arg++) ret->file_arr[i] = strdup(argv[curr_arg]); return (ret); } /* end make_file_list() */ char * get_next_file(filelist_t *f_list, intn advance) { if (advance) f_list->curr_file++; if (f_list->curr_file >= f_list->max_files) return (NULL); return (f_list->file_arr[f_list->curr_file]); } /* end get_next_file() */ /* free_node_vg_info_t frees a node of vgroup info */ vg_info_t * free_node_vg_info_t(vg_info_t *aNode) { intn i; if (aNode != NULL) { if (aNode->children != NULL) { for (i = 0; i < aNode->n_entries; i++) if (aNode->children[i] != NULL) { free(aNode->children[i]); aNode->children[i] = NULL; } free(aNode->children); aNode->children = NULL; } if (aNode->type != NULL) { for (i = 0; i < aNode->n_entries; i++) if (aNode->type[i] != NULL) { free(aNode->type[i]); aNode->type[i] = NULL; } free(aNode->type); aNode->type = NULL; } free(aNode->vg_name); aNode->vg_name = NULL; } return (aNode); } /* end of free_node_vg_info_t */ /* free_struct_list use free() to free the list of vgroup info structs */ vg_info_t ** free_vginfo_list(vg_info_t **nodelist, int32 num_items) { intn i; /* if the list is not NULL, free each node then reset the list to NULL */ if (nodelist != NULL) { for (i = 0; i < num_items; i++) if (nodelist[i] != NULL) { nodelist[i] = free_node_vg_info_t(nodelist[i]); free(nodelist[i]); nodelist[i] = NULL; } free(nodelist); } return (NULL); } /* end of free_vginfo_list */ /* free_struct_list use free() to free the list of vgroup info structs */ obj_chosen_t ** free_node_obj_chosen_t(obj_chosen_t *aNode) { if (aNode != NULL) { if (aNode->name != NULL) { fprintf(stderr, " name = %s \n", aNode->name); free(aNode->name); } free(aNode->classname); free(aNode); } return (NULL); } /* end of free_node_obj_chosen_t */ /* free_struct_list use free() to free the list of vgroup info structs */ void free_obj_chosen_t_list(obj_chosen_t **nodelist, int32 num_items) { intn i; /* if the list is not NULL, free each node then reset the list to NULL */ if ((*nodelist) != NULL) { for (i = 0; i < num_items; i++) { free((*nodelist)[i].name); free((*nodelist)[i].classname); } free((*nodelist)); (*nodelist) = NULL; } } /* end of free_obj_chosen_t_list */ /* free_str_list use free() to free the list of strings of characters */ char ** free_str_list(char **str_list, int32 num_items) { intn i; if (str_list != NULL) { for (i = 0; i < num_items; i++) free(str_list[i]); free(str_list); } return (NULL); } /* end of free_str_list */ /* free_num_list use free() to free the list of integers; this routine is short but can be used in many different places and very convenient */ int32 * free_num_list(int32 *num_list) { free(num_list); return (NULL); } /* end of free_num_list */ void free_file_list(filelist_t *f_list) { intn i; for (i = 0; i < f_list->max_files; i++) free(f_list->file_arr[i]); free(f_list->file_arr); free(f_list); } /* end free_file_list() */ /* * Routines to manipulate group lists */ groupinfo_t * make_group_list(int32 fid, uint16 tag, uint16 ref) { intn nobj; intn i; groupinfo_t *ret; int32 gid; if (tag == DFTAG_RIG || tag == DFTAG_SDG || tag == DFTAG_NDG) { if ((gid = DFdiread(fid, tag, ref)) == FAIL) return (NULL); if ((nobj = DFdinobj(gid)) == FAIL) return (NULL); if ((ret = (groupinfo_t *)malloc(sizeof(groupinfo_t))) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); return (NULL); } ret->max_dds = nobj; ret->curr_dd = 0; if (nobj > 0) { if ((ret->dd_arr = (DFdi *)malloc(sizeof(DFdi) * nobj)) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); free(ret); return (NULL); } for (i = 0; i < nobj; i++) { if (DFdiget(gid, &ret->dd_arr[i].tag, &ret->dd_arr[i].ref) == FAIL) { free(ret->dd_arr); free(ret); return (NULL); } } } else { ret->max_dds = ret->curr_dd = 0; ret->dd_arr = NULL; } } else { /* check for Vgroup? */ int32 vkey; /* Yes, I know this wastes time, but at least it allows uniform access */ /* to both types of groups in HDF files... */ if (vinit_done == FALSE) { /* check whether we've already init'ed Vsets */ vinit_done = TRUE; Vinitialize(fid); } /* end if */ if ((vkey = Vattach(fid, ref, "r")) != FAIL) { if ((nobj = Vntagrefs(vkey)) != FAIL) { if (nobj > 0) { /* Albert fixed */ int32 *temp_tag; int32 *temp_ref; if ((temp_tag = (int32 *)malloc(sizeof(int32) * nobj)) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); Vdetach(vkey); return (NULL); } /* end if */ if ((temp_ref = (int32 *)malloc(sizeof(int32) * nobj)) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); Vdetach(vkey); free(temp_tag); return (NULL); } /* end if */ if (Vgettagrefs(vkey, temp_tag, temp_ref, nobj) == FAIL) { Vdetach(vkey); free(temp_tag); free(temp_ref); return (NULL); } /* end if */ if ((ret = (groupinfo_t *)malloc(sizeof(groupinfo_t))) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); Vdetach(vkey); free(temp_tag); free(temp_ref); return (NULL); } /* end if */ ret->max_dds = nobj; ret->curr_dd = 0; if ((ret->dd_arr = (DFdi *)malloc(sizeof(DFdi) * nobj)) == NULL) { fprintf(stderr, "make_group_list: space allocation failed\n"); Vdetach(vkey); free(temp_tag); free(temp_ref); free(ret); return (NULL); } /* end if */ for (i = 0; i < nobj; i++) { ret->dd_arr[i].tag = (uint16)temp_tag[i]; ret->dd_arr[i].ref = (uint16)temp_ref[i]; } /* end for */ free(temp_tag); free(temp_ref); } /* if nobj > 0 */ /* BMR: 7/28/00 must add this one, otherwise, free fails later */ else /* nobj <= 0 */ return (NULL); } /* end if */ else /* bad vkey? */ return (NULL); Vdetach(vkey); /* release the Vgroup */ } /* end if */ else /* failed to attach */ return (NULL); } /* end else */ return (ret); } /* end make_group_list() */ DFdi * get_next_group(groupinfo_t *g_list, intn advance) { if (g_list == NULL) return (NULL); if (advance) g_list->curr_dd++; if (g_list->curr_dd >= g_list->max_dds) return (NULL); return (&g_list->dd_arr[g_list->curr_dd]); } /* end get_next_group() */ int32 get_group_max(groupinfo_t *g_list) { if (g_list != NULL) return (g_list->max_dds); return (FAIL); } /* end get_group_max() */ void free_group_list(groupinfo_t *g_list) { if (g_list != NULL) { free(g_list->dd_arr); free(g_list); } } /* end free_group_list() */ /* * Routines to manipulate tag/ref lists */ objlist_t * make_obj_list(int32 fid, uint32 options) { intn nobj; /* number of DDs in the file */ int32 status; /* status of various HDF calls */ int32 aid; /* temporary AID to use while getting DD info */ int16 tmp_spec; /* temporary storage for special status */ objlist_t *obj_ret; /* pointer to the dd list to return */ objinfo_t *obj_ptr; /* temporary pointer to a working DD object */ sp_info_block_t info; /* temp. storage for special elem. info */ intn n, m; /* local counting variable */ /* get the number of all objects in the file */ nobj = Hnumber(fid, DFTAG_WILDCARD); if (nobj == FAIL || nobj <= 0) /* BMR: added check for nobj<=0 */ return (NULL); /* allocate space for the object list - exit at failure??? */ if ((obj_ret = (objlist_t *)malloc(sizeof(objlist_t))) == NULL) { fprintf(stderr, "make_obj_list: space allocation failed\n"); return (NULL); } obj_ret->max_obj = nobj; /* set the number of objects */ obj_ret->curr_obj = 0; obj_ret->raw_obj_arr = (objinfo_t *)malloc(sizeof(objinfo_t) * nobj); /* should it exit on failure ??? */ if (obj_ret->raw_obj_arr == NULL) { fprintf(stderr, "make_obj_list: space allocation failed\n"); free(obj_ret); return (NULL); } /* Clear array of dd/object information */ memset(obj_ret->raw_obj_arr, 0, sizeof(objinfo_t) * nobj); /* * Read all the tag/ref's in the file into an array */ /* start the reading of an access element */ aid = Hstartread(fid, DFTAG_WILDCARD, DFREF_WILDCARD); if (aid == FAIL) { HEprint(stderr, 0); free(obj_ret->raw_obj_arr); free(obj_ret); return (NULL); } /* end if */ /* for each element */ for (n = 0, status = SUCCEED; (n < nobj) && (status != FAIL); n++) { Hinquire(aid, NULL, &(obj_ret->raw_obj_arr[n].tag), &(obj_ret->raw_obj_arr[n].ref), &(obj_ret->raw_obj_arr[n].length), &(obj_ret->raw_obj_arr[n].offset), NULL, NULL, &tmp_spec); if (options & CHECK_SPECIAL) { /* are we looking for spec. elem. ? */ obj_ret->raw_obj_arr[n].is_special = (tmp_spec != 0); if (obj_ret->raw_obj_arr[n].is_special) { /* get the special info. */ if ((status = HDget_special_info(aid, &info)) == FAIL) { obj_ret->raw_obj_arr[n].is_special = 0; } /* end if */ else { /* copy over special information we found */ obj_ret->raw_obj_arr[n].spec_info = (sp_info_block_t *)malloc(sizeof(sp_info_block_t)); if (obj_ret->raw_obj_arr[n].spec_info == NULL) { fprintf(stderr, "make_obj_list: space allocation failed\n"); obj_ret->raw_obj_arr[n].is_special = 0; } else memcpy(obj_ret->raw_obj_arr[n].spec_info, &info, sizeof(sp_info_block_t)); } /* end else */ } /* end if */ } /* end if */ status = Hnextread(aid, DFTAG_WILDCARD, DFREF_WILDCARD, DF_CURRENT); } /* end for */ if (Hendaccess(aid) == FAIL) { HEprint(stderr, 0); free(obj_ret->raw_obj_arr); free(obj_ret); return (NULL); } /* Post-process the list of dd/objects, adding more information */ /* Also set up the pointers for the sorted list to be manipulated later */ obj_ret->srt_obj_arr = (objinfo_t **)malloc(sizeof(objinfo_t *) * nobj); if (obj_ret->srt_obj_arr == NULL) { fprintf(stderr, "make_obj_list: space allocation failed\n"); free(obj_ret->raw_obj_arr); free(obj_ret); return (NULL); } /* Loop for more information */ for (n = 0; n < nobj; n++) { obj_ptr = obj_ret->srt_obj_arr[n] = &obj_ret->raw_obj_arr[n]; /* set the index value to a flag for later */ obj_ptr->index = (-1); /* check for a group */ if (options & CHECK_GROUP) { /* are we looking for groups ? */ if (obj_ptr->tag == DFTAG_RIG || obj_ptr->tag == DFTAG_SDG || obj_ptr->tag == DFTAG_NDG || obj_ptr->tag == DFTAG_VG) { obj_ptr->is_group = TRUE; obj_ptr->group_info = make_group_list(fid, obj_ptr->tag, obj_ptr->ref); if (obj_ptr->group_info == NULL) { /* do not free these because even this element has no group list, it still can be displayed */ /* free(obj_ret->raw_obj_arr); free(obj_ret); return (NULL); */ } /* end if */ } /* end if */ } /* end if */ } /* end for */ /* Loop once more to figure out the index information */ for (n = 0, obj_ptr = &obj_ret->raw_obj_arr[0]; n < nobj; n++, obj_ptr++) { if (obj_ptr->index == (-1)) { /* first object of this type in the file */ int32 temp_index = 0; objinfo_t *temp_ptr; /* temporary pointer to a working DD object */ /* the object gets index of 0 */ obj_ptr->index = 0; /* look for other objects of this tag */ for (m = n, temp_ptr = obj_ptr + 1; m + 1 < nobj; m++, temp_ptr++) { if (temp_ptr->tag == obj_ptr->tag) temp_ptr->index = ++temp_index; /* set next index */ } /* end for */ } /* end if */ } /* end for */ obj_ret->options = options; return (obj_ret); } /* end make_dd_list() */ objinfo_t * get_next_obj(objlist_t *o_list, intn advance) { if (advance) o_list->curr_obj++; if (o_list->curr_obj >= o_list->max_obj) return (NULL); return (o_list->srt_obj_arr[o_list->curr_obj]); } /* end get_next_obj() */ objinfo_t * goto_nth_obj(objlist_t *o_list, intn n) { if (n >= 0 && n < o_list->max_obj) o_list->curr_obj = n; return (o_list->srt_obj_arr[o_list->curr_obj]); } /* end goto_nth_obj() */ void reset_obj_list(objlist_t *o_list) { if (o_list != NULL) o_list->curr_obj = 0; } /* end reset_obj_list() */ void free_obj_list(objlist_t *o_list) { intn i; /* local counting variable */ objinfo_t *obj_ptr; /* temporary pointer to a working DD object */ if (o_list != NULL) { for (i = 0, obj_ptr = o_list->raw_obj_arr; i < o_list->max_obj; i++, obj_ptr++) { if (obj_ptr->is_group) free_group_list(obj_ptr->group_info); if (obj_ptr->is_special) free(obj_ptr->spec_info); } /* end for */ free(o_list->srt_obj_arr); free(o_list->raw_obj_arr); free(o_list); } else fprintf(stderr, ">>>free_obj_list failed - attempting to free a NULL list \n"); } /* end free_obj_list() */ int sort_obj_list_by_tag(const void *p1, const void *p2) { const objinfo_t *a = (const objinfo_t *)*((const void **)p1); const objinfo_t *b = (const objinfo_t *)*((const void **)p2); if (a->tag > b->tag) return (1); if (a->tag < b->tag) return (-1); if (a->ref > b->ref) return (1); if (a->ref < b->ref) return (-1); return (0); } /* end sort_obj_info_by_tag() */ void sort_obj_list(objlist_t *o_list, sort_t sort_type) { switch (sort_type) { case OGROUP: /* sort by group order */ break; /* not currently implemented */ case OTAG: /* sort by tag order */ qsort(o_list->srt_obj_arr, o_list->max_obj, sizeof(objinfo_t *), sort_obj_list_by_tag); break; case OFILE: /* sort by file order */ default: break; } /* end switch() */ } /* end sort_obj_list() */ /* Misc. utility functions */ int int32_compare(const void *a, const void *b) { if (*(const int32 *)a > *(const int32 *)b) return (1); else if (*(const int32 *)a < *(const int32 *)b) return (-1); else return (0); } /* end int32_compare() */ void sort(int32 *chosen, int32 choices) { qsort((void *)chosen, choices, sizeof(int32), int32_compare); } /* resetBuff frees the passed-in pointer and resets it to NULL, if it is not NULL. Its purpose is to make cleaning up simpler throughout the entire dumper */ void resetBuff(void **ptr) { free(*ptr); *ptr = NULL; } /* parse_number_opts take a list of numbers separated by commas then retrieves the numbers and stores them in the structure provided by the caller. This routine is used by all the routines parse_dumpxx_opts to parse the index or ref list that accompanies option -i or -r */ void parse_number_opts(char *argv[], int *curr_arg, number_filter_t *filter) { int32 numItems = 0, i; char *tempPtr = NULL; char *ptr = NULL; int32 *newlist; /* put a temp ptr at the beginning of the given list of numbers, separated by commas, for example, 1,2,3 */ ptr = argv[*curr_arg]; /* check if it's the end of the command */ if (ptr == NULL) { printf("Missing values for option\n"); exit(1); } /* then traverse the list and count the number of items in it */ while ((tempPtr = strchr(ptr, ',')) != NULL) { numItems++; /* count number of items in the list */ ptr = tempPtr + 1; /* forward pointer to next item, after a comma */ } /* end while */ if (*ptr != '\0') /* count the last item */ numItems++; if (filter->num_list != NULL) { /* Update number of items that will be in the list */ numItems = numItems + filter->num_items; /* Allocate a new list */ newlist = (int32 *)malloc(sizeof(intn) * numItems); CHECK_ALLOC(newlist, "newlist", "parse_number_opts"); /* If filter->num_list is already allocated, transfer pointers over to the new list and deallocate the old list of pointers */ if (filter->num_list != NULL) { for (i = 0; i < filter->num_items; i++) newlist[i] = filter->num_list[i]; free(filter->num_list); } /* Set _cdfs to the new list */ filter->num_list = newlist; newlist = NULL; } else { /* allocate space to hold all the items in the list */ filter->num_list = (int32 *)malloc(sizeof(intn) * numItems); CHECK_ALLOC(filter->num_list, "filter->num_list", "parse_number_opts"); } /* go back to the beginning of the list and read in the numbers */ ptr = argv[*curr_arg]; i = 0; /* index of the list */ while (i < numItems) { tempPtr = strchr(ptr, ','); if (tempPtr != NULL) *tempPtr = '\0'; /* end the string of digits */ filter->num_list[i] = atoi(ptr); /* convert string to digits */ ptr = tempPtr + 1; i++; } filter->num_items = numItems; /* save the number of items */ } /* parse_number_opts */ /* parse_string_opts take a list of strings separated by commas then retrieves the strings and stores them in the structure provided by the caller. This routine is used by all the routines parse_dumpxx_opts to parse the name or class list that accompanies option -n or -c */ void parse_string_opts(char *argv[], int *curr_arg, char_filter_t *filter) { int32 numItems = 0, i; char *tempPtr = NULL; char *ptr = NULL; /* put a temp pointer at the beginning of the list of strings, separated by commas */ ptr = argv[*curr_arg]; /* check if it's the end of the command */ if (ptr == NULL) { printf("Missing values for option\n"); exit(1); } /* then traverse the list and count the number of strings in it */ while ((tempPtr = strchr(ptr, ',')) != NULL) { numItems++; ptr = tempPtr + 1; } /* end while */ if (*ptr != '\0') /* count the last item */ numItems++; /* allocate space to hold pointers that will point to the given strings */ filter->str_list = (char **)malloc(sizeof(char *) * numItems); CHECK_ALLOC(filter->str_list, "filter->str_list", "parse_string_opts"); /* go back to the beginning of the list and read in the given strings */ ptr = argv[*curr_arg]; i = 0; /* init the index of the list */ while (i < numItems) { tempPtr = strchr(ptr, ','); /* find the end of a string */ if (tempPtr != NULL) *tempPtr = '\0'; /* end the string with a NULL char */ /* allocate space for each string */ filter->str_list[i] = (char *)malloc(sizeof(char) * (strlen(ptr) + 1)); CHECK_ALLOC(filter->str_list[i], "filter->str_list[i]", "parse_string_opts"); strcpy(filter->str_list[i], ptr); /* get the current string */ ptr = tempPtr + 1; /* move pointer to next item or end of list */ i++; } /* end while */ filter->num_items = numItems; /* save the number of items */ } /* parse_string_opts */ void init_obj_chosen_node(obj_chosen_t *aNode) { aNode->index = -1; aNode->refnum = -1; aNode->name = NULL; aNode->classname = NULL; aNode->type_of_info = INVALID; } void parse_value_opts(char *argv[], int *curr_arg, dump_info_t **dump_opts, info_type_t info_type) { int32 numItems = 0, i; char *tempPtr = NULL; char *ptr = NULL; obj_chosen_t *newlist = NULL; /* put a temp ptr at the beginning of the given list of numbers, separated by commas, for example, 1,2,3 */ ptr = argv[*curr_arg]; /* check if it's the end of the command */ if (ptr == NULL) { printf("Missing values for option\n"); exit(1); } /* then traverse the list and count the number of items in it */ while ((tempPtr = strchr(ptr, ',')) != NULL) { numItems++; /* count number of items in the list */ ptr = tempPtr + 1; /* forward pointer to next item, after a comma */ } /* end while */ if (*ptr != '\0') /* count the last item */ numItems++; if ((*dump_opts)->all_types != NULL) { /* Update number of chosen SDSs so far */ int32 newItems = numItems + (*dump_opts)->num_chosen; /* Allocate a new list */ newlist = (obj_chosen_t *)malloc(sizeof(obj_chosen_t) * newItems); CHECK_ALLOC(newlist, "newlist", "parse_value_opts"); /* transfer pointers from (*dump_opts)->all_types over to the new list and deallocate the old list of pointers */ for (i = 0; i < (*dump_opts)->num_chosen; i++) newlist[i] = (*dump_opts)->all_types[i]; for (i = (*dump_opts)->num_chosen; i < newItems; i++) init_obj_chosen_node(&newlist[i]); free((*dump_opts)->all_types); /* Set (*dump_opts)->all_types to the new list */ (*dump_opts)->all_types = newlist; numItems = newItems; newlist = NULL; } else { /* allocate space to hold all the items in the list */ (*dump_opts)->all_types = (obj_chosen_t *)malloc(sizeof(obj_chosen_t) * numItems); CHECK_ALLOC((*dump_opts)->all_types, "filter", "parse_value_opts"); /* Initialize all nodes */ for (i = 0; i < numItems; i++) init_obj_chosen_node(&(*dump_opts)->all_types[i]); } /* go back to the beginning of the list and read in the numbers */ ptr = argv[*curr_arg]; /* index of the list, it should start at 0 or at the number of SDSs chosen so far */ i = (*dump_opts)->num_chosen != NO_SPECIFIC ? (*dump_opts)->num_chosen : 0; while (i < numItems) { tempPtr = strchr(ptr, ','); if (tempPtr != NULL) *tempPtr = '\0'; /* end the string of digits */ switch (info_type) { case IS_INDEX: /* convert the string of characters to digits and store for refnum */ (*dump_opts)->all_types[i].index = atoi(ptr); break; case IS_REFNUM: /* convert the string of characters to digits and store for refnum */ (*dump_opts)->all_types[i].refnum = atoi(ptr); break; case IS_NAME: /* get the current string of characters for name */ (*dump_opts)->all_types[i].name = (char *)malloc(sizeof(char) * (strlen(ptr) + 1)); CHECK_ALLOC((*dump_opts)->all_types[i].name, "(*dump_opts)->all_types[i].name", "parse_string_opts"); strcpy((*dump_opts)->all_types[i].name, ptr); break; case IS_CLASS: /* get the current string of characters for class name */ (*dump_opts)->all_types[i].classname = (char *)malloc(sizeof(char) * (strlen(ptr) + 1)); CHECK_ALLOC((*dump_opts)->all_types[i].classname, "(*dump_opts)->all_types[i].classname", "parse_string_opts"); strcpy((*dump_opts)->all_types[i].classname, ptr); break; default: /* shouldn't be anything else */ fprintf(stderr, "Calling function passed in incorrect info_type_t: %d\n", (int)info_type); exit(1); break; } /* end of switch */ (*dump_opts)->all_types[i].type_of_info = info_type; ptr = tempPtr + 1; i++; } (*dump_opts)->num_chosen = numItems; /* save the number of chosen SDSs so far */ } /* parse_value_opts */ /* validate_pos makes sure that number is > 0 so we are not going to allocate 0 elements This routine is replaced by the macro called CHECK_POS just because the error checkings are being done that way! 7/27/00 */ /* if there are any specific datasets requested, alloc_index_list allocates space for the list of indices of these requested items */ void alloc_index_list(int32 **index_list, int32 num_chosen) { int32 i = -1; /* used to pass into HDmemfill as dummmy? */ *index_list = (int32 *)malloc(sizeof(int32) * num_chosen); CHECK_ALLOC(*index_list, "index_list", "alloc_index_list"); i = (-1); HDmemfill(*index_list, &i, sizeof(int32), num_chosen); } /* end of alloc_index_list */ /* Given a compression type code, returns a character string that indicates that compression method. */ char * comp_method_txt(comp_coder_t comp_type) { switch (comp_type) { case COMP_CODE_NONE: return ("NONE"); case COMP_CODE_RLE: return ("RLE"); case COMP_CODE_NBIT: return ("NBIT"); case COMP_CODE_SKPHUFF: return ("SKPHUFF"); case COMP_CODE_DEFLATE: return ("DEFLATE"); case COMP_CODE_SZIP: return ("SZIP"); case COMP_CODE_JPEG: return ("JPEG"); case COMP_CODE_IMCOMP: return ("IMCOMP"); default: return ("INVALID"); } } hdf4-hdf4.3.1/mfhdf/dumper/hdp_vd.c000066400000000000000000001160201503061704500170170ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdp.h" #include void dumpvd_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf("%s dumpvd [-a|-i |-r |-n |-c |-f ] [-dhv] [-o " "] [-bx] \n", argv[0]); printf("\t-a\tDump all VDs in the file (default)\n"); printf("\t-i \tDump the VDs at positions listed in \n"); printf("\t-r \tDump the VDs with reference number listed in \n"); printf("\t-n \tDump the VDs with name listed in \n"); printf("\t-c \tDump the VDs with class listed in \n"); printf("\t-f \tDump based on fields in vdata header\n"); printf("\t-d\tDump data only, no tag/ref, formatted to input to hp2hdf\n"); printf("\t-h\tDump header only, no annotation for elements nor data\n"); printf("\t-v\tDump everything including all annotations (default)\n"); printf("\t-o \tOutput to file \n"); printf("\t-b\tBinary format of output\n"); printf("\t-x\tAscii text format of output (default)\n"); printf("\t\tList of hdf file names, separated by spaces\n"); } /* end dumpvd_usage() */ intn parse_dumpvd_opts(dump_info_t *dumpvd_opts, intn *curr_arg, intn argc, char *argv[], char *flds_chosen[MAXCHOICES], int *dumpallfields) { int32 i, lastItem; char *tempPtr, *ptr; /* traverse the command and process each option */ /* Allows '/' for options on Windows */ #ifdef H4_HAVE_WIN32_API while ((*curr_arg < argc) && ((argv[*curr_arg][0] == '-') || (argv[*curr_arg][0] == '/'))) #else while ((*curr_arg < argc) && (argv[*curr_arg][0] == '-')) #endif { switch (argv[*curr_arg][1]) { case 'a': /* dump all, default */ dumpvd_opts->filter = DALL; /* indicate that no specific vdata requested, will dump all */ dumpvd_opts->num_chosen = NO_SPECIFIC; (*curr_arg)++; break; case 'i': /* dump by index */ dumpvd_opts->filter |= DINDEX; /* set bit DINDEX */ (*curr_arg)++; /* parse and store the given indices in structure by_index */ parse_number_opts(argv, curr_arg, &dumpvd_opts->by_index); (*curr_arg)++; break; case 'r': /* dump by reference */ dumpvd_opts->filter |= DREFNUM; /* set bit DREFNUM */ (*curr_arg)++; /* parse and store the given ref numbers in structure by_ref */ parse_number_opts(argv, curr_arg, &dumpvd_opts->by_ref); (*curr_arg)++; break; case 'n': /* dump by names */ dumpvd_opts->filter |= DNAME; /* set bit DNAME */ (*curr_arg)++; /* parse and store the given names in structure by_name */ parse_string_opts(argv, curr_arg, &dumpvd_opts->by_name); (*curr_arg)++; break; case 'c': /* dump by class */ dumpvd_opts->filter |= DCLASS; /* set bit DCLASS */ (*curr_arg)++; /* parse and store the given classes in structure by_class */ parse_string_opts(argv, curr_arg, &dumpvd_opts->by_class); (*curr_arg)++; break; case 'f': /* dump a subset of the fields */ if (dumpvd_opts->filter == DALL) /* not necessary to set this */ dumpvd_opts->filter = DFIELDS; /* leave it here anyway */ *dumpallfields = 0; /*???*/ (*curr_arg)++; lastItem = 0; ptr = argv[*curr_arg]; for (i = 0; !lastItem; i++) { tempPtr = strchr(ptr, ','); if (tempPtr == NULL) lastItem = 1; else *tempPtr = '\0'; flds_chosen[i] = (char *)malloc(sizeof(char) * (strlen(ptr) + 1)); CHECK_ALLOC(flds_chosen[i], "flds_chosen[i]", "parse_dumpvd_opts"); strcpy(flds_chosen[i], ptr); ptr = tempPtr + 1; } flds_chosen[i] = NULL; (*curr_arg)++; break; case 'd': /* dump data only */ dumpvd_opts->contents = DDATA; (*curr_arg)++; break; case 'h': /* no annotations nor data */ dumpvd_opts->contents = DHEADER; (*curr_arg)++; break; case 'v': /* dump all info */ dumpvd_opts->contents = DVERBOSE; (*curr_arg)++; break; case 'o': /* specify output file */ dumpvd_opts->dump_to_file = TRUE; /* Get file name */ strcpy(dumpvd_opts->file_name, argv[++(*curr_arg)]); (*curr_arg)++; break; case 'b': /* dump data in binary */ dumpvd_opts->file_format = DBINARY; (*curr_arg)++; break; case 'x': /* dump data in ascii, also default */ dumpvd_opts->file_format = DASCII; (*curr_arg)++; break; default: /* invalid dumpvd option */ printf("Warning: Invalid dumpvd option %s\n", argv[*curr_arg]); return (FAIL); } /* end switch */ } /* end while */ /* add the number of vdatas requested by index, by ref#, and by name to have a total number of requested vdatas */ dumpvd_opts->num_chosen = dumpvd_opts->by_index.num_items + dumpvd_opts->by_ref.num_items + dumpvd_opts->by_name.num_items + dumpvd_opts->by_class.num_items; return (SUCCEED); } /* end parse_dumpvd_opts */ /* VSref_index returns the index of a vdata given the vdata's ref# or returns FAIL, if the ref# is not found */ int32 VSref_index(int32 file_id, int32 vd_ref) { int32 find_ref = -1; int index = 0; /* index is zero based? */ int32 ret_value = FAIL; while ((find_ref = VSgetid(file_id, find_ref)) != FAIL) { if (find_ref == vd_ref) { ret_value = index; goto done; /* found, done */ } index++; } done: return ret_value; } /* VSref_index */ /* VSstr_index returns the index of a vdata given the vdata's name or class, if the name is not found, and returns FAIL, otherwise. */ int32 VSstr_index(int32 file_id, char *filter_str, /* searched vd's name or class */ int is_name, /* TRUE if searching for name, FALSE if class */ int32 *find_ref, /* current ref#, will return next found */ int32 *index) /* index of the vdata w/ref# *find_ref */ { int32 vdata_id = FAIL; char vdata_name[MAXNAMELEN]; int32 ret_value = SUCCEED; /* starting from the ref# *find_ref, search for the vdata having a name or class the same as the given string filter_str; when no more vdata to search, return FAIL */ while ((*find_ref = VSgetid(file_id, *find_ref)) != FAIL) { /* printf("VSstr_index: *find_ref = %d\n", *find_ref); */ vdata_id = VSattach(file_id, *find_ref, "r"); if (FAIL == vdata_id) ERROR_GOTO_2("in %s: VSattach failed for vdata with ref#=%d", "VSstr_index", (int)*find_ref); /* if the string searched is a vdata's name */ if (is_name) { if (FAIL == VSgetname(vdata_id, vdata_name)) ERROR_GOTO_2("in %s: VSgetname failed for vdata with ref#=%d", "VSstr_index", (int)*find_ref); } /* or the string searched is a vdata's class */ else { if (FAIL == VSgetclass(vdata_id, vdata_name)) ERROR_GOTO_2("in %s: VSgetclass failed for vdata with ref#=%d", "VSstr_index", (int)*find_ref); } if (FAIL == VSdetach(vdata_id)) ERROR_GOTO_2("in %s: VSdetach failed for vdata with ref#=%d", "VSstr_index", (int)*find_ref); /* if the vd's name or vd's class is the given string, return the index of the vdata found */ if (strcmp(vdata_name, filter_str) == 0) { /* store the current index to return first */ ret_value = (*index); /* then increment index for next vdata - same class vdatas*/ (*index)++; goto done; /* succeeded */ } else ret_value = FAIL; /* Note: in either case, increment the index for the next vdata */ (*index)++; } /* end while getting vdatas */ /* when VSgetid returned FAIL in while above, search should stop */ ret_value = FAIL; done: return ret_value; } /* VSstr_index() */ /* compose the list of indices of the requested vdatas although some vdatas are requested by ref# or name. The routine returns: - the number of vdatas to be processed, or - NO_SPECIFIC if all vdatas are to be processed, or - 0 if none. If there are any errors, the parameter index_error will return TRUE */ int32 choose_vd(dump_info_t *dumpvd_opts, int32 **vd_chosen, int32 file_id, int *index_error) { int32 i, index, find_ref, number, num_vd_chosen = dumpvd_opts->num_chosen, vd_count = 0; filter_t filter = dumpvd_opts->filter; /* temporary name */ intn ret_value = 0; /* if no specific vdatas are requested, return vdata count as NO_SPECIFIC (-1) */ if (filter == DALL) HGOTO_DONE(NO_SPECIFIC); /* if specific vdatas were requested, allocate space for the array of indices */ if (num_vd_chosen > 0) alloc_index_list(vd_chosen, num_vd_chosen); /* else, no chosen vdatas but filter is not DALL, it shouldn't be this combination, return vdata count as NO_SPECIFIC to dump all */ else HGOTO_DONE(NO_SPECIFIC); /* if there are some vdatas requested by index, store the indices in the array provided by the caller */ if (filter & DINDEX) for (i = 0; i < dumpvd_opts->by_index.num_items; i++) { (*vd_chosen)[vd_count] = dumpvd_opts->by_index.num_list[i]; vd_count++; } /* if there are some vdatas requested by ref#, store the indices in the array provided by the caller */ if (filter & DREFNUM) for (i = 0; i < dumpvd_opts->by_ref.num_items; i++) { index = VSref_index(file_id, dumpvd_opts->by_ref.num_list[i]); if (index == FAIL) { printf("Vdata with reference number %d: not found\n", (int)dumpvd_opts->by_ref.num_list[i]); *index_error = TRUE; /* index error */ } else { (*vd_chosen)[vd_count] = index; vd_count++; } } /* for */ /* if there are some vdatas requested by name, store the indices in the array provided by the caller */ if (filter & DNAME) for (i = 0; i < dumpvd_opts->by_name.num_items; i++) { find_ref = -1; number = 0; index = VSstr_index(file_id, dumpvd_opts->by_name.str_list[i], 1, &find_ref, &number); if (index == FAIL) { printf("Vdata with name '%s': not found\n", dumpvd_opts->by_name.str_list[i]); *index_error = TRUE; } else { (*vd_chosen)[vd_count] = index; vd_count++; } } /* for */ /* if there are some vdatas requested by class, store the indices in the array provided by the caller */ if (filter & DCLASS) for (i = 0; i < dumpvd_opts->by_class.num_items; i++) { int32 found = FALSE; find_ref = -1; number = 0; while ((index = VSstr_index(file_id, dumpvd_opts->by_class.str_list[i], 0, &find_ref, &number)) != FAIL) { if (vd_count < num_vd_chosen) (*vd_chosen)[vd_count] = index; else { *vd_chosen = (int32 *)realloc(*vd_chosen, sizeof(int32) * (num_vd_chosen + 1)); if (*vd_chosen == NULL) { fprintf(stderr, "Failure in choose_vd: Memory re-allocation error\n"); exit(1); } /* end if */ (*vd_chosen)[vd_count] = index; num_vd_chosen++; } vd_count++; found = TRUE; } if (!found) { printf("Vdata with class %s: not found\n", dumpvd_opts->by_class.str_list[i]); *index_error = TRUE; /* index error */ } } /* for */ if (filter == DFIELDS) /* Don't have to worry about which chosen fields yet. */ { } ret_value = vd_count; /* actual number of vdatas to be processed; might be different from dumpvd_opts->num_chosen because of the non-unique class name */ done: return ret_value; } /* choose_vd */ void printHeader(FILE *fp, char *fldstring, char *fields, vd_info_t *curr_vd) { (void)fldstring; fprintf(fp, "Vdata: %d\n", (int)curr_vd->index); if (curr_vd->tag == FAIL) /* print vdata tag */ fprintf(fp, " tag = ; "); else fprintf(fp, " tag = %d; ", (int)curr_vd->tag); /* print reference number without checking because it's from VSgetid and has been checked by the calling routine */ fprintf(fp, "reference = %d;\n", (int)curr_vd->ref); if (curr_vd->nvf == FAIL) /* print number of records in the vdata */ fprintf(fp, " number of records = ; "); else fprintf(fp, " number of records = %d;", (int)curr_vd->nvf); if (curr_vd->interlace == FAIL) /* print interlace mode */ fprintf(fp, " interlace = ;\n"); else if (curr_vd->interlace == 0) fprintf(fp, " interlace = FULL_INTERLACE (0);\n"); else if (curr_vd->interlace == 1) fprintf(fp, " interlace = NO_INTERLACE;\n"); else fprintf(fp, " interlace = ;\n", (int)curr_vd->interlace); /* print the list of field names of the vdata if it's available */ /* The list of field names can be very long and would look very messy when being displayed if it were to be dumped out at once. print_fields displays a list in a nice way even if the list is long. The second parameter specifies how the field name list begins; it's needed because dumpvg also uses this routine and has different indentation format than dumpvd */ print_fields(fields, " fields = ", fp); fprintf(fp, " record size (in bytes) = %d;\n", (int)curr_vd->vsize); if (curr_vd->name[0] == '\0') /* print vdata name */ fprintf(fp, " name = ; "); else fprintf(fp, " name = %s;", curr_vd->name); /* print class name - Note that vdclass can be NULL */ if (curr_vd->clss[0] == '\0') fprintf(fp, " class = ;\n"); else fprintf(fp, " class = %s;\n", curr_vd->clss); } /* end of printHeader */ intn getFieldIndices(char *fields, char *flds_chosen[MAXCHOICES], int32 *flds_indices) { int32 lastItem = 0; /* whether the last field in the list 'fields' is reached */ int32 fld_name_idx; /* index for the list of field names */ int32 idx = 0; /* index for the array of field indices */ char *tempPtr = NULL; /* temp ptr to mark the end of a field name in the list */ char *ptr = NULL; /* used to forward to next field name in the field name list */ char fldstring[MAXNAMELEN]; /* holds a field name extracted from field name list */ int32 i; intn flds_match = 0; intn ret_value = SUCCEED; char tempflds[VSFIELDMAX * FIELDNAMELENMAX]; /* make copy of the field name list retrieved by VSinquire to use in processing the field names */ strcpy(tempflds, fields); ptr = tempflds; /* used to forward the field names */ i = (-1); /* dummy? */ HDmemfill(flds_indices, &i, sizeof(int32), MAXCHOICES); /* Extract each field name from the list of fields of the current record. */ for (fld_name_idx = 0; !lastItem; fld_name_idx++) { /* look for a comma in the fields */ tempPtr = strchr(ptr, ','); /* if no comma is found, that means the last field name is reached */ if (tempPtr == NULL) lastItem = 1; /* set flag */ /* otherwise, add null to end the extracted field name */ else *tempPtr = '\0'; /* extract that field into fldstring */ strcpy(fldstring, ptr); /* forward the pointer to the next field name in the list */ ptr = tempPtr + 1; /* Compare the extracted field name with each of the names of the fields having been chosen. */ for (i = 0; flds_chosen[i] != NULL; i++) { if (!strcmp(flds_chosen[i], fldstring)) { flds_indices[idx] = fld_name_idx; idx++; flds_match = 1; } } /* for (i...) */ } /* for (fld_name_idx...) */ /* return the flag indicating whether any given fields exist */ ret_value = flds_match; return ret_value; } /* end of getFieldIndices */ intn dumpvd_ascii(dump_info_t *dumpvd_opts, int32 file_id, const char *file_name, FILE *fp, int32 num_vd_chosen, char *flds_chosen[MAXCHOICES], int32 *vd_chosen, int dumpallfields) { int32 flds_indices[MAXCHOICES]; int32 i; int32 vd_chosen_idx; /* index for vd_chosen array */ int32 nvf; int32 interlace; int32 vsize; int32 vdata_ref = -1; int32 vdata_tag; char vdclass[VSNAMELENMAX + 1]; char vdname[VSNAMELENMAX + 1]; char fldstring[MAXNAMELEN]; intn dumpall = 0; file_format_t ff = DASCII; vd_info_t curr_vd; int32 vd_id = FAIL; int32 an_handle = FAIL; int32 num_fields = 0; intn status = SUCCEED, ret_value = SUCCEED; char fields[VSFIELDMAX * FIELDNAMELENMAX]; if (dumpvd_opts->contents != DDATA) { fprintf(fp, "File name: %s \n\n", file_name); /* print file annotations */ status = print_file_annotations(file_id, file_name); if (status == FAIL) ERROR_GOTO_2("in %s: Failure in printing file annotations for file %s", "dumpvd_ascii", file_name); } vd_chosen_idx = 0; /* start at the beginning of vd_chosen */ /* Determine if all VDs are to be dumped out. */ if (num_vd_chosen <= 0) /* If so, set the corresponding flag. */ dumpall = 1; else /* Otherwise, sort the indices of the chosen VDs in increasing order so that they will be dumped out in such order */ sort(vd_chosen, num_vd_chosen); /* Examine each VD, which is identified by its ref# returned by VSgetid */ for (i = 0; (vdata_ref = VSgetid(file_id, vdata_ref)) != FAIL && (dumpall != 0 || vd_chosen_idx < num_vd_chosen); i++) { intn data_only; /* indicates whether to print data only */ intn flds_match = 0; /* indicates whether any requested fields exist, or if no field requested, set to 1 means dump all fields */ char sep[2]; /* the character that is used to separate 2 fields */ /* Only dump the info of the chosen VDs or all of the VDs if none has been selected. */ if ((!dumpall) && (i != vd_chosen[vd_chosen_idx])) continue; /* skip */ vd_chosen_idx++; /* One vdata has been located; so go to the next one in the array. */ vd_id = VSattach(file_id, vdata_ref, "r"); if (vd_id == FAIL) /* continue to the next vdata */ ERROR_CONT_2("in %s: VSattach failed for vdata_ref#=%d", "dumpvd_ascii", (int)vdata_ref); /* Note: each of the parameters returned by a query routine below must be checked before being used */ /* Retrieves general information about the vdata. Note that NULL is passed in for vdata's record size because it is not needed and attempting to retrieve it causes failure when the vdata doesn't have any fields defined. (bug #626) - BMR Mar 12, 02 */ if (FAIL == VSinquire(vd_id, &nvf, &interlace, fields, NULL, vdname)) ERROR_CONT_END("in %s: VSinquire failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, vd_id); /* Get the number of fields in the vdata, continue to the next vdata if this failed. If succeeded, check for exceeding max allowed */ num_fields = VFnfields(vd_id); if (num_fields == FAIL) ERROR_CONT_END("in %s: VFnfields failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, vd_id); if (num_fields >= VSFIELDMAX) ERROR_CONT_END("in %s: Number of fields exceeded the max allowed for vdata with ref#=%d, i.e., " "possible data corruption", "dumpvd_ascii", (int)vdata_ref, vd_id); /* Get the HDF size of the specified fields of the vdata; VShdfsize returns 0 if there are no fields previously defined */ vsize = VShdfsize(vd_id, fields); if (vsize == FAIL) ERROR_CONT_END("in %s: VShdfsize failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, vd_id); if (FAIL == (vdata_tag = VSQuerytag(vd_id))) ERROR_CONT_END("in %s: VSQuerytag failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, vd_id); if (FAIL == VSgetclass(vd_id, vdclass)) ERROR_CONT_END("in %s: VSgetclass failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, vd_id); /* If one or more fields were specified by the user, then find out what they were, determine their corresponding indices in "fields", and store these indices in the array "flds_indices" so that they can be used to determine whether a field should be dumped later on. */ if (flds_chosen[0] != NULL) flds_match = getFieldIndices(fields, flds_chosen, flds_indices); /* If no fields were chosen, all fields are to be dumped out, and so all fields match. */ else /* if (flds_chosen[0] == NULL) */ flds_match = 1; if (flds_match) { switch (dumpvd_opts->contents) { case DVERBOSE: /* dump all information */ case DHEADER: /* header only, no attributes, annotations or data */ /* store the vdata info into the vd_info_t struct for convenience */ curr_vd.index = i; /* vdata index */ curr_vd.nvf = nvf; /* number of records in the vdata */ curr_vd.interlace = interlace; /* interlace mode of the vdata */ curr_vd.vsize = vsize; /* record size of the vdata */ curr_vd.ref = vdata_ref; /* vdata ref# */ curr_vd.tag = vdata_tag; /* vdata tag */ strcpy(curr_vd.clss, vdclass); /* vdata class */ strcpy(curr_vd.name, vdname); /* vdata name */ printHeader(fp, fldstring, fields, &curr_vd); /* proceed to printing data if not printing header only */ if (dumpvd_opts->contents != DHEADER) { /* dump vdata attributes */ status = dumpattr(vd_id, _HDF_VDATA, 1, ff, fp); if (FAIL == status) ERROR_BREAK_3("in %s: %s failed for attributes of vdata with ref#=%d", "dumpvd_ascii", "dumpattr", (int)vdata_ref, FAIL); /* dump all the annotations for this vdata */ status = print_data_annots(file_id, file_name, vdata_tag, vdata_ref); if (FAIL == status) ERROR_BREAK_3("in %s: %s failed for attributes of vdata with ref#=%d", "dumpvd_ascii", "print_data_annots", (int)vdata_ref, FAIL); /* BMR - 6/30/98 to fix bug #236: if no fields are defined or no data is written, break out and don't fall through */ if (fields[0] == '\0' || nvf == 0) { fprintf(fp, " No data written\n\n"); break; } } else /* only header, no attributes, annotations or data */ break; /* break out and don't fall through */ /* note that we fall through if not printing header only */ case DDATA: /* data only */ if (dumpvd_opts->contents == DDATA) { data_only = 1; strcpy(sep, ""); } else { data_only = 0; strcpy(sep, ";"); } /* Only the chosen or all fields will be dumped out. */ status = dumpvd(vd_id, ff, data_only, fp, sep, flds_indices, dumpallfields); if (FAIL == status) ERROR_BREAK_2("in %s: dumpvd failed for vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref, FAIL); break; /* out of DDATA */ default: printf("dumping vdata in file %s, unknown option %d\n", file_name, dumpvd_opts->contents); } /* switch */ } if (FAIL == VSdetach(vd_id)) fprintf(stderr, "in %s: VSdetach failed on vdata with ref#=%d", "dumpvd_ascii", (int)vdata_ref); /* just simply goes to the next vdata */ vd_id = FAIL; /* reset */ } /* for each vdata */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (an_handle != FAIL) ANend(an_handle); if (vd_id != FAIL) VSdetach(vd_id); } return ret_value; } /* dumpvd_ascii() */ intn dumpvd_binary(dump_info_t *dumpvd_opts, int32 file_id, const char *file_name, FILE *fp, int32 num_vd_chosen, char *flds_chosen[MAXCHOICES], int32 *vd_chosen, int dumpallfields) { int32 flds_indices[MAXCHOICES]; int32 i, vd_chosen_idx; int32 nvf; int32 interlace; int32 vdata_ref = -1; char vdname[VSNAMELENMAX + 1]; intn dumpall = 0; file_format_t ff = DBINARY; int32 vd_id = FAIL; intn status; intn ret_value = SUCCEED; char fields[VSFIELDMAX * FIELDNAMELENMAX]; (void)dumpvd_opts; (void)file_name; vd_chosen_idx = 0; /* "vd_chosen_idx" is used to index the array of "vd_chosen". */ /* Determine if all VDs are to be dumped out. */ if (num_vd_chosen <= 0) /* If so, set the corresponding flag. */ dumpall = 1; else { /* Otherwise, sort the indices of the chosen VDs in increasing order so that they will be dumped out in such order. */ sort(vd_chosen, num_vd_chosen); } /* Examine each VD. */ for (i = 0; (vdata_ref = VSgetid(file_id, vdata_ref)) != -1 && (dumpall != 0 || vd_chosen_idx < num_vd_chosen); i++) { int data_only, flds_match = 0; char sep[2]; /* character used to separate fields */ /* Only dump the info of the chosen VDs or all of the VDs if none has been selected. */ if ((!dumpall) && (i != vd_chosen[vd_chosen_idx])) continue; /* skip */ vd_chosen_idx++; /* One vdata has been located; so go to the next one in the array. ???*/ /* Select the next vdata for processing */ vd_id = VSattach(file_id, vdata_ref, "r"); if (vd_id == FAIL) /* continue to the next vdata */ ERROR_CONT_2("in %s: VSattach failed for vdata with ref#=%d", "dumpvd_binary", (int)vdata_ref); status = VSinquire(vd_id, &nvf, &interlace, fields, NULL, vdname); if (FAIL == status) /* end access to vd_id and cont. to next vdata */ ERROR_CONT_END("in %s: VSinquire failed for vdata with ref#=%d", "dumpvd_binary", (int)vdata_ref, vd_id); /* BMR - 7/1/98 realized while fixing bug #236. Skip binary printing if the vdata is empty */ if (fields[0] == '\0' || nvf == 0) fprintf(stderr, "in %s: Vdata with ref#=%d is empty.\n", "dumpvd_binary", (int)vdata_ref); else /* vdata is not empty */ { /* removed calls to VSQuerytag and VSgetclass - not useful in dumping by binary - BMR 8/23/00) */ /* If one or more fields were specified by the user, then find out what they were, determine their corresponding indices in "fields", and store these indices in the array "flds_indices" so that they can be used to determine whether a field should be dumped later on. */ if (flds_chosen[0] != NULL) flds_match = getFieldIndices(fields, flds_chosen, flds_indices); /* If no fields were chosen, all fields are to be dumped out, and so all fields match. */ else /* if (flds_chosen[0] == NULL) */ flds_match = 1; if (flds_match) { /* BMR: removed the if statement to determine if data_only should be set; set data_only in either case */ data_only = 1; strcpy(sep, ""); /* Only the chosen or all fields will be dumped out. */ if (FAIL == dumpvd(vd_id, ff, data_only, fp, sep, flds_indices, dumpallfields)) ERROR_CONT_END("in %s: Failure in dumping data for vdata with ref#=%d", "dumpvd_binary", (int)vdata_ref, vd_id); } } /* end of if (fields[0] == '\0' || nvf == 0 ) */ if (FAIL == VSdetach(vd_id)) fprintf(stderr, "in %s: VSdetach failed on vdata with ref#=%d", "dumpvd_binary", (int)vdata_ref); vd_id = FAIL; /* reset */ } /* for each vdata */ return (ret_value); } /* dumpvd_binary */ /* closeVD combines the processes of Vend, Hclose, freeing the list of numbers, and resetting all ids, after validating the ids first. When either Vend or Hclose fails, closeVD prints an informative message then resetting the ids as normal since these failures are highly unlikely and since the files are opened as read-only, it's safe to go on. */ void closeVD(int32 *file_id, /* will be returned as a FAIL */ int32 **vd_chosen, /* will be returned as a NULL */ const char *curr_file_name) { if (*file_id != FAIL) { if (FAIL == Vend(*file_id)) fprintf(stderr, "Failure in closeVD: Vend failed for file %s\n", curr_file_name); if (FAIL == Hclose(*file_id)) fprintf(stderr, "Failure in closeVD: Hclose failed for file %s\n", curr_file_name); *file_id = FAIL; /* reset */ } free(*vd_chosen); *vd_chosen = NULL; } /* end of closeVD */ intn dvd(dump_info_t *dumpvd_opts, intn curr_arg, intn argc, char *argv[], char *flds_chosen[MAXCHOICES], int dumpallfields) { int32 file_id = FAIL; char file_name[MAXFNLEN]; int32 *vd_chosen = NULL; FILE *fp = NULL; int32 num_vd_chosen; intn index_error = 0; file_format_t ff; intn status; intn ret_value = SUCCEED; /* check for missing input file name */ if (curr_arg >= argc) /* goto done with FAIL */ ERROR_GOTO_0("Missing input file name. Please try again.\n"); while (curr_arg < argc) { /* Loop until all specified files have been processed */ intn isHDF = TRUE; /* FALSE, if current file is not HDF file */ /* get file name */ strcpy(file_name, argv[curr_arg]); /* record for later use */ strcpy(dumpvd_opts->ifile_name, file_name); curr_arg++; closeVD(&file_id, &vd_chosen, file_name); /* Print an informative message and skip this file if it is not an HDF file */ isHDF = Hishdf(file_name); if (isHDF == FALSE) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dvd: %s is not an HDF file", file_name); } else /* print message, then continue processing the next file */ { ERROR_CONT_1("in dvd: %s is not an HDF file", file_name); } } /* open current hdf file with error check, if fail, go to next file */ file_id = Hopen(file_name, DFACC_READ, 0); if (file_id == FAIL) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dvd: Failure in opening file %s", file_name); } /* otherwise, print message, then continue processing the next file */ else ERROR_CONT_1("in dvd: Failure in opening file %s", file_name); } /* initiate VG interface; if fail, probably something fatal, returns with FAIL */ if (FAIL == Vstart(file_id)) ERROR_GOTO_1("in dvd: Vstart failed for file %s\n", file_name); /* Find out which VDs have been chosen. */ num_vd_chosen = choose_vd(dumpvd_opts, &vd_chosen, file_id, &index_error); /* if there are no valid indices, move on to the next file */ if (index_error && num_vd_chosen == 0) continue; /* to the next file, closeVG before opening next file takes care of Vend, Hclose, and free vg_chosen */ ff = dumpvd_opts->file_format; fp = stdout; /* default file pointer to the standard output */ switch (ff) { case DASCII: /* ASCII file */ /* set output file */ if (dumpvd_opts->dump_to_file) fp = fopen(dumpvd_opts->file_name, "w"); status = dumpvd_ascii(dumpvd_opts, file_id, file_name, fp, num_vd_chosen, flds_chosen, vd_chosen, dumpallfields); if (FAIL == status) ERROR_BREAK_0("in dvd: dumpvd_ascii returned failure", FAIL); break; case DBINARY: /* binary file, not fully tested yet */ /* Get output file name. */ if (dumpvd_opts->dump_to_file) fp = fopen(dumpvd_opts->file_name, "wb"); status = dumpvd_binary(dumpvd_opts, file_id, file_name, fp, num_vd_chosen, flds_chosen, vd_chosen, dumpallfields); if (FAIL == status) ERROR_BREAK_0("in dvd: dumpvd_binary returned failure", FAIL); break; default: printf("dumping vdata, unknown output file option \n"); ret_value = FAIL; } /* switch for output file */ free(vd_chosen); vd_chosen = NULL; if (dumpvd_opts->dump_to_file) fclose(fp); if (FAIL == Vend(file_id)) ERROR_CONT_1("in dvd: Vend failed on file %s\n", file_name); if (FAIL == Hclose(file_id)) ERROR_CONT_1("in dvd: Hclose failed on file %s\n", file_name); file_id = FAIL; /* reset */ } /* while processing files */ done: if (ret_value == FAIL) { /* Failure cleanup */ if (file_id != FAIL) { Vend(file_id); Hclose(file_id); } free(vd_chosen); vd_chosen = NULL; } return ret_value; } /* dvd */ /* exported */ intn do_dumpvd(intn curr_arg, intn argc, char *argv[], intn help) { dump_info_t dumpvd_opts; /* dumpvd options */ char *flds_chosen[MAXCHOICES]; int dumpallfields; intn status, ret_value = SUCCEED; int i; flds_chosen[0] = NULL; dumpallfields = 1; /* initialize the structure that holds user's options and inputs */ init_dump_opts(&dumpvd_opts); if (help == TRUE) { dumpvd_usage(argc, argv); goto done; } /* incomplete command */ if (curr_arg >= argc) { dumpvd_usage(argc, argv); ERROR_GOTO_0("in do_dumpvd: command is incomplete"); } /* end if */ /* parse the user's command and store the inputs in dumpvd_opts */ status = parse_dumpvd_opts(&dumpvd_opts, &curr_arg, argc, argv, flds_chosen, &dumpallfields); if (status == FAIL) { dumpvd_usage(argc, argv); ret_value = FAIL; /* return status to caller */ goto done; /* skip dvd */ } /* display data and information as specified in dumpvd_opts */ status = dvd(&dumpvd_opts, curr_arg, argc, argv, flds_chosen, dumpallfields); if (status == FAIL) ERROR_GOTO_0("in do_dumpvd: dvd failed"); done: /* free the lists for given indices, ref#s, names, and classes if they had been allocated */ free_num_list(dumpvd_opts.by_index.num_list); free_num_list(dumpvd_opts.by_ref.num_list); free_str_list(dumpvd_opts.by_name.str_list, dumpvd_opts.by_name.num_items); free_str_list(dumpvd_opts.by_class.str_list, dumpvd_opts.by_class.num_items); for (i = 0; flds_chosen[i] != NULL; i++) free(flds_chosen[i]); return ret_value; } /* end do_dumpvd() */ hdf4-hdf4.3.1/mfhdf/dumper/hdp_vg.c000066400000000000000000001675571503061704500170470ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdp.h" #include #include "vg.h" #define NONAME_LEN 12 void dumpvg_usage(intn argc, char *argv[]); int32 Vref_index(int32 file_id, int32 vg_ref); int32 Vname_ref(int32 file_id, char *searched_name, int32 *find_ref, int32 *index); int32 Vstr_ref(int32 file_id, char *searched_str, int is_name, int32 *find_ref, int32 *index); int32 Vindex_ref(int32 file_id, int32 sear_index); void resetVG(int32 *vg_id, const char *curr_file_name); void display(vg_info_t *ptr, int32 level, vg_info_t **list, int32 num_nodes, int32 root_index, int32 firstchild, FILE *fp); intn get_VGandInfo(int32 *vg_id, int32 file_id, int32 vg_ref, const char *file_name, int32 *n_entries, char **vgname, char **vgclass); char **alloc_list_of_strings(int32 num_entries); char *alloc_strg_of_chars(char *strg); int32 get_VGindex_list(int32 file_id, dump_info_t *dumpvg_opts, int32 **vg_chosen, intn *index_error); void closeVG(int32 *file_id, int32 **vg_chosen, const char *curr_file_name); intn vgBuildGraph(int32 vg_id, int32 file_id, int32 num_entries, const char *file_name, vg_info_t *aNode, intn *skipfile); intn dvg(dump_info_t *dumpvg_opts, intn curr_arg, intn argc, char *argv[]); intn vgdumpfull(int32 vg_id, dump_info_t *dumpvg_opts, int32 file_id, int32 num_entries, FILE *fp, vg_info_t *aNode, intn *skipfile); /* display the usage of command dumpvg */ void dumpvg_usage(intn argc, char *argv[]) { (void)argc; printf("Usage:\n"); printf("%s dumpvg [-a|-i |-r |-n |-c ] [-hv] [-o ] \n", argv[0]); printf("\t-a\tDump all VGs in the file (default)\n"); printf("\t-i \tDump the VGs at position listed in \n"); printf("\t-r \tDump the VGs with reference number listed in \n"); printf("\t-n \tDump the VGs with name listed in \n"); printf("\t-c \tDump the VGs with class listed in \n"); /* printf("\t-d\tDump data only, no tag/ref, formatted to input to hp2hdf\n"); */ printf("\t-h\tDump header only, no annotation for elements nor data\n"); printf("\t-v\tDump everything including all annotations (default)\n"); printf("\t-o \tOutput to file \n"); /* printf("\t-x\tAscii text format of output (default)\n"); */ printf("\t\tList of hdf file names, separated by spaces\n"); } /* end dumpvg_usage() */ intn parse_dumpvg_opts(dump_info_t *dumpvg_opts, intn *curr_arg, intn argc, char *argv[]) { intn ret_value = SUCCEED; /* traverse the command and process each option */ /* Allows '/' for options on Windows */ #ifdef H4_HAVE_WIN32_API while ((*curr_arg < argc) && ((argv[*curr_arg][0] == '-') || (argv[*curr_arg][0] == '/'))) #else while ((*curr_arg < argc) && (argv[*curr_arg][0] == '-')) #endif { switch (argv[*curr_arg][1]) { case 'a': /* dump all, default */ dumpvg_opts->filter = DALL; /* indicate that no specific images requested, will dump all */ dumpvg_opts->num_chosen = NO_SPECIFIC; (*curr_arg)++; break; case 'i': /* dump by index */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given indices in structure all_types */ parse_value_opts(argv, curr_arg, &dumpvg_opts, IS_INDEX); (*curr_arg)++; break; case 'r': /* dump by reference */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given ref numbers in structure all_types */ parse_value_opts(argv, curr_arg, &dumpvg_opts, IS_REFNUM); (*curr_arg)++; break; case 'n': /* dump by names */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given names in structure all_types */ parse_value_opts(argv, curr_arg, &dumpvg_opts, IS_NAME); (*curr_arg)++; break; case 'c': /* dump by class */ (*curr_arg)++; /* go to the parameters for this flag */ /* Parse and store the given classnames in structure all_types */ parse_value_opts(argv, curr_arg, &dumpvg_opts, IS_CLASS); (*curr_arg)++; break; case 'd': /* dump data only */ dumpvg_opts->contents = DDATA; (*curr_arg)++; printf("Warning>>> option -d is being removed from dumpvg.\n"); printf("Please contact hdfhelp@ncsa.uiuc.edu if you would like to keep it.\n\n"); exit(1); case 'h': /* no annotations nor data */ dumpvg_opts->contents = DHEADER; (*curr_arg)++; break; case 'v': /* dump all info */ dumpvg_opts->contents = DVERBOSE; (*curr_arg)++; break; case 'o': /* specify output file */ dumpvg_opts->dump_to_file = TRUE; /* Get file name */ strcpy(dumpvg_opts->file_name, argv[++(*curr_arg)]); (*curr_arg)++; break; case 'b': /* dump data in binary - should be removed */ printf("Warning>>> option -b has been removed from dumpvg.\n"); printf("Please contact hdfhelp@ncsa.uiuc.edu for further assistance.\n"); exit(1); case 'x': /* dump data in ascii, also default */ dumpvg_opts->file_format = DASCII; (*curr_arg)++; break; default: /* invalid dumpvg option */ printf("HDP ERROR>>> Invalid dumpvg option %s\n", argv[*curr_arg]); HGOTO_DONE(FAIL); } /* end switch */ } /* end while */ done: if (ret_value == FAIL) { /* Failure cleanup */ /* free the list if it had been allocated */ free_obj_chosen_t_list(&dumpvg_opts->all_types, dumpvg_opts->num_chosen); } return (ret_value); } /* end parse_dumpvg_opts */ /* Given an index, Vindex_ref returns the vgroup's reference number or FAIL */ int32 Vindex_ref(int32 file_id, int32 sear_index) { int32 find_ref = -1; int index = 0; intn found = FALSE; int32 ret_value = FAIL; while (!found && index != -1) { find_ref = Vgetid(file_id, find_ref); /* Searched ref# doesn't exist */ if (find_ref == FAIL) index = -1; /* Valid ref# returned and its index is the searched one */ else if (index == sear_index) { /* Make sure the ref# is not invalid */ if (find_ref != -1) { found = TRUE; ret_value = find_ref; } else printf("Warning>>> vgroup at index %d has an invalid ref# %d.\n", sear_index, find_ref); } /* Valid ref# returned but its index is not the searched one, go to next vgroup */ else index++; } return ret_value; } /* Vindex_ref */ /* Given a ref#, Vref_index searches for the vgroup that has this ref# and returns the vgroup's index or FAIL */ int32 Vref_index(int32 file_id, int32 vg_ref) { int32 find_ref = -1; int index = 0; int32 ret_value = FAIL; while ((find_ref = Vgetid(file_id, find_ref)) != FAIL) { if (find_ref == vg_ref) { ret_value = index; goto done; /* found , done */ } index++; } done: return ret_value; } /* Vref_index */ int32 Vstr_ref(int32 file_id, char *searched_str, /* vg's class name */ int is_name, int32 *find_ref, int32 *index) /* index of the vgroup w/ref# *find_ref */ { int32 vg_id = FAIL; char *name = NULL; uint16 name_len = 0; int32 status_32 = FAIL; int32 ret_value = FAIL; /* starting from the ref# *find_ref, search for the vgroup having a name or class the same as the given string searched_name; when no more vgroups to search, return FAIL */ while ((*find_ref = Vgetid(file_id, *find_ref)) != FAIL) { vg_id = Vattach(file_id, *find_ref, "r"); if (FAIL == vg_id) ERROR_GOTO_2("in %s: Vattach failed for vgroup with ref#(%d)", "Vstr_ref", (int)*find_ref); /* get the length of the vgname to allocate enough space */ if (is_name) status_32 = Vgetnamelen(vg_id, &name_len); else status_32 = Vgetclassnamelen(vg_id, &name_len); if (FAIL == status_32) /* go to done and return a FAIL */ { ERROR_GOTO_2("in %s: Vgetclassnamelen failed for vg ref=%d", "Vstr_ref", (int)*find_ref); } name = (char *)malloc(sizeof(char) * (name_len + 1)); /* If allocation fails, Vstr_ref simply terminates hdp. */ CHECK_ALLOC(name, "vgroup classname", "Vstr_ref"); if (name_len > 0) { if (is_name) { if (FAIL == Vgetname(vg_id, name)) ERROR_GOTO_2("in %s: Vgetclass failed for vgroup with ref#(%d)", "Vstr_ref", (int)*find_ref); } else { if (FAIL == Vgetclass(vg_id, name)) ERROR_GOTO_2("in %s: Vgetclass failed for vgroup with ref#(%d)", "Vstr_ref", (int)*find_ref); } if (FAIL == Vdetach(vg_id)) ERROR_GOTO_2("in %s: Vdetach failed for vgroup with ref#(%d)", "Vstr_ref", (int)*find_ref); /* if the vg's name or vg's class is the given string, return the index of the vgroup found */ if (strcmp(name, searched_str) == 0) { /* return the current ref# */ ret_value = *find_ref; /* increment index for next vgroup - same class vgroups*/ (*index)++; goto done; } (*index)++; } /* name_len > 0 */ SAFE_FREE(name); /* free name and set it to NULL */ } /* end while getting vgroups */ /* when VSgetid returned FAIL in while above, search should stop */ ret_value = FAIL; done: SAFE_FREE(name); /* free name and set it to NULL */ return ret_value; } /* Vstr_ref() */ /* resetVG calls Vdetach to end access to a vgroup with error checking and resets the vgroup id to FAIL. If failure occurs, resetVG print an error message in the stderr to help debugging */ void resetVG(int32 *vg_id, const char *curr_file_name) { if (*vg_id != FAIL) { if (FAIL == Vdetach(*vg_id)) fprintf(stderr, "in resetVG: Vdetach failed for vg_id(%d) in file %s\n", (int)*vg_id, curr_file_name); *vg_id = FAIL; } } /* end of resetVG */ /* recursively display a vgroup with subtrees. The parameter root_index is the index of the node of which the initial display is called. The recursion is continued until this node is visited again; this way, infinite loop will be eliminated; or until all of its children are displayed */ void display(vg_info_t *ptr, int32 level, /* level of descendants - for indentation */ vg_info_t **list, int32 num_nodes, int32 root_index, /* index of the node starting the tree */ int32 firstchild, FILE *fp) { char *name = NULL; int i, k, x, z; int num = 1; level++; if (!firstchild) /* take care of the indentations */ { for (k = 0; k < level; k++) { for (z = 0; z < num; z++) fprintf(fp, "\t"); } } else for (z = 0; z < num; z++) fprintf(fp, "\t"); if (level > 0) /* only print -- on subtrees */ fprintf(fp, "-- "); /* every vg is printed here, except the one that indicates a loop */ fprintf(fp, "vg%d ", (int)ptr->index); /* if this vgroup does not have any element, go to next line */ if (ptr->children == NULL) fprintf(fp, "\n"); else { /* if this vgroup has not been displayed before, print it and its subtree */ if (!ptr->displayed) { ptr->displayed = TRUE; /* so this item will not be printed again */ for (i = 0; i < ptr->n_entries && ptr->children[i] != NULL; i++) { if (i == 0) firstchild = TRUE; else firstchild = FALSE; name = ptr->children[i]; if ((strcmp(ptr->type[i], "vd")) && (strcmp(ptr->children[i], "***"))) { x = 0; while (strcmp(name, list[x]->vg_name)) { x++; } /* BMR: stop when the current node is the same as the one that starts this whole graph, i.e, loop starts */ if (list[x]->index != root_index) display(list[x], level, list, num_nodes, root_index, firstchild, fp); /* BMR: if the loop has started, only print the node's name and an '*' to indicate a loop */ else { if (i > 0) { for (k = 0; k < level + 1; k++) { for (z = 0; z < num; z++) fprintf(fp, "\t"); } fprintf(fp, "-- vg%d (*)\n", (int)list[x]->index); } else fprintf(fp, " -- vg%d (*)\n", (int)list[x]->index); } } else /* this node is a vdata */ { if (i > 0) { for (k = 0; k < level + 1; k++) { for (z = 0; z < num; z++) fprintf(fp, "\t"); } } if (firstchild) { for (z = 0; z < num; z++) fprintf(fp, "\t"); } fprintf(fp, "-- "); /* fprintf( fp, "%s%d ", ptr->type[i], i); */ fprintf(fp, "%s \n", ptr->type[i]); } } /* for (i...) */ } /* if (!ptr->displayed) */ else fprintf(fp, "\n"); } /* has subnodes */ /* Reset for the next node in the list - BMR, 01/16/99 */ ptr->displayed = FALSE; } /* display */ /* get_VGandInfo attaches to vgroup with ref# vg_ref, and retrieves the vgroup's id. If attaching successful, the routine reads the vgroup's tag, name, class, and number of entries; otherwise, it will set the vgroup's id to FAIL and returns to the caller with status FAIL. If any other failure occurs, get_VGandInfo will return the status as FAIL after completing its processing. */ intn get_VGandInfo(int32 *vg_id, int32 file_id, int32 vg_ref, const char *file_name, int32 *n_entries, char **vgname, char **vgclass) { intn status, ret_value = SUCCEED; int32 status_32; uint16 name_len = 0; /* detach the current vgroup if it's attached to cover the case where a library routine fails and must continue to the next vgroup without detaching the failed vgroup */ resetVG(vg_id, file_name); *vg_id = Vattach(file_id, vg_ref, "r"); if (*vg_id == FAIL) /* go to done and return a FAIL */ ERROR_GOTO_2("in %s: Vattach failed for vgroup ref=%d", "get_VGandInfo", (int)vg_ref); /* get the length of the vgname to allocate enough space */ status_32 = Vgetnamelen(*vg_id, &name_len); if (FAIL == status_32) /* go to done and return a FAIL */ { ERROR_GOTO_2("in %s: Vgetnamelen failed for vg ref=%d", "get_VGandInfo", (int)vg_ref); } if (name_len > 0) { *vgname = (char *)malloc(sizeof(char) * (name_len + 1)); /* If allocation fails, get_VGandInfo simply terminates hdp. */ CHECK_ALLOC(*vgname, "*vgname", "get_VGandInfo"); status = Vinquire(*vg_id, n_entries, *vgname); if (FAIL == status) /* go to done and return a FAIL */ { *n_entries = -1; ERROR_GOTO_2("in %s: Vinquire failed for vg ref=%d", "get_VGandInfo", (int)vg_ref); } } else { *vgname = (char *)malloc(sizeof(char) * (NONAME_LEN)); strcpy(*vgname, ""); status = Vinquire(*vg_id, n_entries, NULL); if (FAIL == status) /* go to done and return a FAIL */ { *n_entries = -1; ERROR_GOTO_2("in %s: Vinquire failed for vg ref=%d", "get_VGandInfo", (int)vg_ref); } } /* get the length of the vgclass to allocate enough space */ status_32 = Vgetclassnamelen(*vg_id, &name_len); if (FAIL == status_32) /* go to done and return a FAIL */ { ERROR_GOTO_2("in %s: Vgetclassnamelen failed for vg ref=%d", "get_VGandInfo", (int)vg_ref); } if (name_len > 0) { *vgclass = (char *)malloc(sizeof(char) * (name_len + 1)); /* If allocation fails, get_VGandInfo simply terminates hdp. */ CHECK_ALLOC(*vgclass, "*vgclass", "get_VGandInfo"); status_32 = Vgetclass(*vg_id, *vgclass); if (FAIL == status_32) /* go to done and return a FAIL */ { ERROR_GOTO_2("in %s: Vgetclass failed for vgroup ref#=%d", "get_VGandInfo", (int)vg_ref); } } else { *vgclass = (char *)malloc(sizeof(char) * (NONAME_LEN)); strcpy(*vgclass, ""); } done: if (ret_value == FAIL) { free(*vgname); /* free temp memory */ *vgname = NULL; free(*vgclass); /* free temp memory */ *vgclass = NULL; } return (ret_value); } /* end of get_VGandInfo */ intn print_data_annots(int32 file_id, const char *file_name, int32 tag, int32 ref) { int32 an_id = FAIL; intn ret_value = SUCCEED; if ((an_id = ANstart(file_id)) == FAIL) ERROR_GOTO_2("in %s: ANstart failed for file %s\n", "print_data_annots", file_name); /* print labels of vgroup if any */ if (FAIL == print_data_labels(file_name, an_id, (uint16)tag, (uint16)ref)) ERROR_GOTO_3("in %s: print_data_labels failed for vg_ref(%d) in file %s\n", "print_data_annots", (int)ref, file_name); /* print descriptions of vgroup if any */ if (FAIL == print_data_descs(file_name, an_id, (uint16)tag, (uint16)ref)) ERROR_GOTO_3("in %s: print_data_descs failed for vg-ref(%d) in file %s\n", "print_data_annots", (int)ref, file_name); /* close annotation interface */ if (FAIL == ANend(an_id)) ERROR_GOTO_2("in %s: ANend failed for file %s\n", "print_data_annots", file_name); done: if (ret_value == FAIL) { if (an_id != FAIL) ANend(an_id); } return (ret_value); } /* end of print_data_annots */ /* alloc_list_of_strings allocates a list of num_entries char pointers and initializes the pointers to NULL. If allocation fails, alloc_list_of_strings simply terminates hdp. */ char ** alloc_list_of_strings(int32 num_entries) { char **ptr = NULL; intn i; /* I don't know why +1 here and only i;\n", field_title); else { /* there are fields to print */ fprintf(fp, "%s[", field_title); strcpy(tempflds, fields); /* tempflds can be manipulated */ ptr = tempflds; /* traverse tempflds with ptr */ /* traverse the temporary fieldname list to obtain and print each * field name; use ',' to locate individual field names, and each * line should not exceed 50 characters beside the alignment */ for (i = 0; !lastItem; i++) { tempPtr = strchr(ptr, ','); /* locate next separator */ if (tempPtr == NULL) lastItem = 1; /* set flag for end of list */ else *tempPtr = '\0'; /* change ',' to null to obtain field name */ strcpy(fldname, ptr); /* obtain current field name */ count += strlen(fldname); /* increment current # of chars on line */ if (count > 50) { /* print alignment for the subsequent lines */ fprintf(fp, "\n\t "); /* include the skipped field from previous line */ count = strlen(fldname); } fprintf(fp, "%s", fldname); /* print the current field name */ if (!lastItem) fprintf(fp, ", "); /* print a comma if it's not the last field name */ ptr = tempPtr + 1; /* move ptr beyond last field name */ } /* end of for loop */ fprintf(fp, "];\n"); } /* there are fields to print */ } /* end of print_fields */ /* compose the list of indices of the requested vgroups although some vgroups are requested by ref# or name. The routine returns: - the number of vgroups to be processed, or - NO_SPECIFIC if all vgroups are to be processed, or - 0 if none. If there are any errors, the parameter index_error will return TRUE */ int32 get_VGindex_list(int32 file_id, dump_info_t *dumpvg_opts, int32 **vg_chosen, intn *index_error) { intn ii; int32 index, find_ref, vg_count = 0, num_vg_chosen = dumpvg_opts->num_chosen, found = FALSE, ref_num; intn ret_value = 0; /* if no specific vgroups are requested, return vgroup count as NO_SPECIFIC (-1) */ if (num_vg_chosen == NO_SPECIFIC) { HGOTO_DONE(NO_SPECIFIC); } /* if specific vgroups were requested, allocate space for the array of indices */ else alloc_index_list(vg_chosen, num_vg_chosen); /* Go through the list of all info given by flags -i, -r, -n, and -c, and convert the info to reference numbers and store them in vg_chosen */ for (ii = 0; ii < dumpvg_opts->num_chosen; ii++) { switch (dumpvg_opts->all_types[ii].type_of_info) { /* if the current chosen VG was requested by its index, store the index in the array vg_chosen */ case IS_INDEX: ref_num = Vindex_ref(file_id, dumpvg_opts->all_types[ii].index); (*vg_chosen)[ii] = ref_num; /* Vindex_ref verified ref_num */ vg_count++; break; /* if the current chosen VG was requested by its ref#, convert the ref# to index and store the index in the array vg_chosen */ case IS_REFNUM: (*vg_chosen)[ii] = dumpvg_opts->all_types[ii].refnum; vg_count++; break; /* if the current chosen VG was requested by its name, find all vgroups in the file with the same name and store their refs in *vg_chosen */ case IS_NAME: index = 0; /* Find first vgroup of name all_types[ii].name */ find_ref = Vfind(file_id, dumpvg_opts->all_types[ii].name); /* Then find all vgroups of the same name */ while (find_ref != 0 && find_ref != -1) { if (vg_count < num_vg_chosen) (*vg_chosen)[vg_count] = find_ref; else { /* reallocate the array vg_chosen to hold multiple vgroups since name is not unique b/w vgroups */ *vg_chosen = (int32 *)realloc(*vg_chosen, sizeof(int32) * (num_vg_chosen + 1)); if (*vg_chosen == NULL) { fprintf(stderr, "Failure in get_VGindex_list: Not enough memory!\n"); exit(1); } /* end if */ (*vg_chosen)[vg_count] = find_ref; num_vg_chosen++; } found = TRUE; vg_count++; find_ref = Vstr_ref(file_id, dumpvg_opts->all_types[ii].name, 1, &find_ref, &index); } if (!found) { printf("Vgroup with name '%s': not found\n", dumpvg_opts->all_types[ii].name); *index_error = 1; /* error */ goto done; } break; /* if the current chosen VG was requested by its class, convert the class to index and store the index in the array vg_chosen */ case IS_CLASS: index = 0; /* Find the first class with the all_type[ii].classname */ find_ref = Vfindclass(file_id, dumpvg_opts->all_types[ii].classname); /* Then look for all the vgroups of the same class */ while (find_ref != 0 && find_ref != -1) { if (vg_count < num_vg_chosen) (*vg_chosen)[vg_count] = find_ref; else { /* reallocate the array vg_chosen to hold multiple vgroups since class name is not unique b/w vgroups */ *vg_chosen = (int32 *)realloc(*vg_chosen, sizeof(int32) * (num_vg_chosen + 1)); if (*vg_chosen == NULL) { fprintf(stderr, "Failure in get_VGindex_list: Not enough memory!\n"); exit(1); } /* end if */ (*vg_chosen)[vg_count] = find_ref; num_vg_chosen++; } found = TRUE; vg_count++; find_ref = Vstr_ref(file_id, dumpvg_opts->all_types[ii].classname, 0, &find_ref, &index); } if (!found) { printf("Vgroup with class '%s': not found\n", dumpvg_opts->all_types[ii].classname); *index_error = 1; /* error */ goto done; } break; default: fprintf(stderr, "in get_VGindex_list: Info should only be an index, ref number, name, or " "class of a Vgroup\n"); *index_error = TRUE; /* error */ } /* end switch */ } /* end for loop */ ret_value = vg_count; /* actual number of vgroups to be processed; might be different from dumpvg_opts->num_chosen because of the non-unique class name */ done: return ret_value; } /* end of get_VGindex_list */ /* print_file_annotations manage the AN interface and simply calls the two routines print_all_file_labels and print_file_descs defined in hdp_list.c to display the file annotations of the current file */ intn print_file_annotations(int32 file_id, const char *file_name) { int32 an_id = FAIL; intn status = SUCCEED, ret_value = SUCCEED; /* initiate the annotation interface */ an_id = ANstart(file_id); if (FAIL == an_id) ERROR_GOTO_0("in print_file_annotations: ANstart failed"); /* print file labels if any */ status = print_all_file_labels(file_name, an_id); if (status == FAIL) ERROR_GOTO_0("in print_file_annotations: print_all_file_labels failed"); /* print file descriptions if any */ status = print_file_descs(file_name, an_id); if (status == FAIL) ERROR_GOTO_0("in print_file_annotations: print_file_descs failed"); /* close annotation interface */ if (FAIL == ANend(an_id)) ERROR_GOTO_0("in print_file_annotations: ANend failed"); done: if (ret_value == FAIL) { if (an_id != FAIL) if (FAIL == ANend(an_id)) fprintf(stderr, "ANend failed for an_id(%d) for file %s\n", (int)an_id, file_name); } return (ret_value); } /* end of print_file_annotations */ /* closeVG combines the processes of Vend, Hclose, freeing the list of numbers, and resetting all ids, after validating the ids first. When either Vend or Hclose fails, closeVG prints an informative message then resetting the ids as normal since these failures are highly unlikely and since the files are opened as read-only, it's safe to go on. */ void closeVG(int32 *file_id, /* will be returned as a FAIL */ int32 **vg_chosen, /* will be returned as a NULL */ const char *curr_file_name) { if (*file_id != FAIL) { if (FAIL == Vend(*file_id)) fprintf(stderr, "Failure in closeVG: Vend failed for file %s\n", curr_file_name); if (FAIL == Hclose(*file_id)) fprintf(stderr, "Failure in closeVG: Hclose failed for file %s\n", curr_file_name); *file_id = FAIL; /* reset */ } SAFE_FREE(*vg_chosen); /* safely free vg_chosen list and set it to NULL */ } /* end of closeVG */ intn vgBuildGraph(int32 vg_id, int32 file_id, int32 num_entries, const char *file_name, vg_info_t *aNode, intn *skipfile) { int32 vs; char vsname[MAXNAMELEN]; char *vgname = NULL; char *vgclass = NULL; char *name = NULL; int32 vgt = FAIL; int32 entry_num; int32 elem_ref = FAIL; int32 elem_n_entries; int32 elem_tag; int32 vg_ref; intn status, ret_value = SUCCEED; aNode->n_entries = num_entries; if (num_entries != 0) { /* allocate and init memory for storing children's and type's info */ aNode->children = alloc_list_of_strings(num_entries); aNode->type = alloc_list_of_strings(num_entries); /* get the current vgroup's ref# for error message */ vg_ref = VQueryref(vg_id); if (vg_ref == FAIL) ERROR_GOTO_2("in %s: VQueryref failed for vgroup with id=%d", "vgBuildGraph", (int)vg_id); for (entry_num = 0; entry_num < num_entries; entry_num++) { status = Vgettagref(vg_id, entry_num, &elem_tag, &elem_ref); if (FAIL == status) ERROR_CONT_2("in %s: Vgettagref failed for the %d'th entry", "vgBuildGraph", (int)entry_num); if (elem_ref == 0) /* taken care of ref=0 in tdfr8f and tdf24 for now */ { /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars("***"); aNode->type[entry_num] = alloc_strg_of_chars(""); } else if (elem_tag == DFTAG_VG) { /* vgroup */ /* get the current vgroup and its information */ status = get_VGandInfo(&vgt, file_id, elem_ref, file_name, &elem_n_entries, &vgname, &vgclass); if (status == FAIL) ERROR_NOTIFY_3("in %s: %s failed in getting vgroup with ref#=%d", "vgBuildGraph", "get_VGandInfo", (int)vg_ref); /* although get_VGandInfo failed to get a valid id for this vgroup, the node for the vgroup is not affected, so build it anyway */ if (vgt == FAIL) { *skipfile = TRUE; /* severe failure, skip this file */ ERROR_NOTIFY_3("in %s: %s failed to return a valid vgroup id for the %d'th entry", "vgBuildGraph", "get_VGandInfo", (int)entry_num); } /* vgroup has no name */ if (strlen(vgname) == 0 || vgname == NULL) { vgname = (char *)malloc(sizeof(char) * (NONAME_LEN)); strcat(vgname, ""); } resetVG(&vgt, file_name); /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars(vgname); aNode->type[entry_num] = alloc_strg_of_chars("vg"); free(vgname); vgname = NULL; free(vgclass); vgclass = NULL; } /* if current element is vgroup */ else if (elem_tag == VSDESCTAG) { /* vdata */ /* add type of this element to the current graph */ aNode->type[entry_num] = alloc_strg_of_chars("vd"); vs = VSattach(file_id, elem_ref, "r"); if (vs == FAIL) { /* add Invalid for the name of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars(""); ERROR_CONT_2("in %s: VSattach failed for vdata with ref#=%d", "vgBuildGraph", (int)elem_ref); } else /* VSattach didn't fail */ { /* get vdata's name for graphical rep. preparation only */ if (FAIL == VSgetname(vs, vsname)) { ERROR_NOTIFY_2("in %s: VSgetname failed for vdata with ref#=%d", "vgBuildGraph", (int)elem_ref); /* set vdata's name to undefined */ strcpy(vsname, ""); } if (FAIL == VSdetach(vs)) ERROR_NOTIFY_2("in %s: VSdetach failed for vdata with ref#=%d", "vgBuildGraph", (int)elem_ref); } /* if VSattach doesn't fail */ /* vdata has no name */ if (strlen(vsname) == 0) strcat(vsname, ""); /* add the name of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars(vsname); } /* if current element is a vdata */ else /* else something else */ { name = HDgettagsname((uint16)elem_tag); if (!name) name = strdup("Unknown Tag"); /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars("***"); if (!strcmp(name, "Unknown Tag")) { aNode->type[entry_num] = alloc_strg_of_chars("Unknown Object"); } else aNode->type[entry_num] = name; } /* something else */ } /* for */ } done: SAFE_FREE(vgname); /* free vg name and set it to NULL */ SAFE_FREE(vgclass); /* free vg class name and set it to NULL */ return ret_value; } /* vgBuildGraph */ intn vgdumpfull(int32 vg_id, dump_info_t *dumpvg_opts, int32 file_id, int32 num_entries, FILE *fp, vg_info_t *aNode, intn *skipfile) { int32 vgt = FAIL; int32 vg_ref; int32 entry_num; int32 elem_tag; int32 elem_ref = FAIL; int32 elem_n_entries; int found = 0; int32 vs; int32 nv; int32 interlace; int32 vsize; int32 num_fields = 0; char vsname[MAXNAMELEN]; char vsclass[VSNAMELENMAX + 1]; char *vgname = NULL; char *vgclass = NULL; char *name = NULL; char *file_name = dumpvg_opts->ifile_name; intn status, ret_value = SUCCEED; char fields[VSFIELDMAX * FIELDNAMELENMAX]; aNode->n_entries = num_entries; if (num_entries != 0) { /* get the current vgroup's ref# for error message */ vg_ref = VQueryref(vg_id); if (vg_ref == FAIL) ERROR_GOTO_2("in %s: VQueryref failed for vgroup with id=%d", "vgdumpfull", (int)vg_id); /* allocate and init memory for storing children's and type's info */ aNode->children = alloc_list_of_strings(num_entries); aNode->type = alloc_list_of_strings(num_entries); for (entry_num = 0; entry_num < num_entries; entry_num++) { status = Vgettagref(vg_id, entry_num, &elem_tag, &elem_ref); if (FAIL == status) ERROR_CONT_2("in %s: Vgettagref failed for the %d'th entry", "vgdumpfull", (int)entry_num); found = 1; if (elem_ref == 0) /* taken care of ref=0 in tdfr8f and tdf24 for now */ { fprintf(fp, " #%d (Vgroup)\n", (int)entry_num); fprintf(fp, "\ttag = %d;", (int)elem_tag); fprintf(fp, "reference = %d;\n", (int)elem_ref); /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars("***"); aNode->type[entry_num] = alloc_strg_of_chars(""); } else if (elem_tag == DFTAG_VG) { /* vgroup */ /* get the current vgroup and its information */ status = get_VGandInfo(&vgt, file_id, elem_ref, file_name, &elem_n_entries, &vgname, &vgclass); if (status == FAIL) ERROR_GOTO_3("in %s: %s failed in getting vgroup with ref#=%d", "vgdumpfull", "get_VGandInfo", (int)vg_ref); /* since the succeeding processing depends on this vg id, we decided to just skip the current file. Note that elem_n_entries is not checked here since it does not effect the following processing as in the case of the parent's vgroup */ if (vgt == FAIL) { /* return to caller to go to next file */ *skipfile = TRUE; ERROR_GOTO_3("in %s: %s failed to return a valid vgroup id for the %d'th entry", "vgdumpfull", "get_VGandInfo", (int)entry_num); } /* vgroup has no name */ if (strlen(vgname) == 0 || vgname == NULL) { vgname = (char *)malloc(sizeof(char) * (NONAME_LEN)); strcat(vgname, ""); } /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars(vgname); aNode->type[entry_num] = alloc_strg_of_chars("vg"); /* print the entry's info */ fprintf(fp, " #%d (Vgroup)\n", (int)entry_num); fprintf(fp, "\ttag = %d; ", (int)elem_tag); fprintf(fp, "reference = %d;\n", (int)elem_ref); fprintf(fp, "\tnumber of entries = %d;\n", (int)elem_n_entries); fprintf(fp, "\tname = %s; class = %s\n", vgname, vgclass); free(vgname); vgname = NULL; free(vgclass); vgclass = NULL; /* dump attributes for vgroup */ status = dumpattr(vgt, 0, 0, dumpvg_opts->file_format, fp); if (FAIL == status) ERROR_NOTIFY_3("in %s: %s failed to dump attributes for vgroup with ref#=%d", "vgdumpfull", "dumpattr", (int)elem_ref); /* dump all of the annotations for this vgroup */ status = print_data_annots(file_id, file_name, elem_tag, elem_ref); if (FAIL == status) ERROR_NOTIFY_3("in %s: %s failed to dump annotations for vgroup with ref#=%d", "vgdumpfull", "print_data_annots", (int)elem_ref); resetVG(&vgt, file_name); } /* if current element is vgroup */ else if (elem_tag == VSDESCTAG) { /* vdata */ vs = VSattach(file_id, elem_ref, "r"); if (vs == FAIL) ERROR_NOTIFY_2("in %s: VSattach failed for vdata with ref#=%d", "vgdumpfull", (int)elem_ref); /* get and print vdata's information */ status = VSinquire(vs, &nv, &interlace, fields, &vsize, vsname); if (FAIL == status) ERROR_NOTIFY_2("in %s: VSinquire failed for vdata with ref#=%d", "vgdumpfull", (int)elem_ref); /* Get the number of fields in the vdata, continue to the next vdata if this failed. If succeeded, check for exceeding max allowed */ num_fields = VFnfields(vs); if (num_fields == FAIL) ERROR_CONT_END("in %s: VFnfields failed for vdata with ref#=%d", "dumpvd_ascii", (int)elem_ref, vs); if (num_fields >= VSFIELDMAX) ERROR_CONT_END("in %s: Number of fields exceeded the max allowed for vdata with ref#=%d, " "i.e., possible data corruption", "dumpvd_ascii", (int)elem_ref, vs); vsize = VShdfsize(vs, fields); if (vsize == FAIL) ERROR_NOTIFY_2("in %s: VShdfsize failed for vdata with ref#=%d", "vgdumpfull", (int)elem_ref); /* vdata has no name */ if (strlen(vsname) == 0) strcat(vsname, ""); if (FAIL == VSgetclass(vs, vsclass)) ERROR_NOTIFY_2("in %s: VSgetclass failed for vdata with ref#=%d", "vgdumpfull", (int)elem_ref); /* vdata has no class */ if (strlen(vsclass) == 0) strcpy(vsclass, ""); fprintf(fp, " #%d (Vdata)\n", (int)entry_num); fprintf(fp, "\ttag = %d; ", (int)elem_tag); fprintf(fp, "reference = %d; \n", (int)elem_ref); fprintf(fp, "\tnumber of records = %d; ", (int)nv); fprintf(fp, "interlace = %d;\n", (int)interlace); /* The list of field names can be very long and would look very messy when being displayed if it were to be dumped out at once. print_fields displays a list in a nice way even if the list is long. The second parameter specifies how the field name list begins; it's needed because dumpvd also uses this routine and has different indentation format than dumpvg */ print_fields(fields, "\tfields = ", fp); fprintf(fp, "\trecord size (in bytes) = %d;\n", (int)vsize); fprintf(fp, "\tname = %s; class = %s;\n", vsname, vsclass); fprintf(fp, "\ttotal number of attributes = %d.\n", VSnattrs(vs)); if (FAIL == VSdetach(vs)) ERROR_NOTIFY_2("in %s: VSdetach failed for vdata with ref#=%d", "vgdumpfull", (int)elem_ref); /* vdata has no name */ if (strlen(vsname) == 0) strcat(vsname, ""); /* add the name and type of this element to the list node */ aNode->children[entry_num] = alloc_strg_of_chars(vsname); aNode->type[entry_num] = alloc_strg_of_chars("vd"); } /* if current element is a vdata */ else /* else something else */ { name = HDgettagsname((uint16)elem_tag); if (!name) name = strdup("Unknown Tag"); fprintf(fp, " #%d (%s)\n", (int)entry_num, name); fprintf(fp, "\ttag = %d; reference = %d;\n", (int)elem_tag, (int)elem_ref); /* add the name and type of this element to the current graph */ aNode->children[entry_num] = alloc_strg_of_chars("***"); if (!strcmp(name, "Unknown Tag")) { free(name); aNode->type[entry_num] = alloc_strg_of_chars("Unknown Object"); } else aNode->type[entry_num] = name; } /* something else */ } /* for */ } if (!found) printf(" None.\n"); done: SAFE_FREE(vgname); /* free vg name and set it to NULL */ SAFE_FREE(vgclass); /* free vg class name and set it to NULL */ return ret_value; } /* vgdumpfull */ intn dvg(dump_info_t *dumpvg_opts, intn curr_arg, intn argc, char *argv[]) { int32 file_id = FAIL; int32 vg_id = FAIL; int32 *vg_chosen = NULL; int32 vg_count; int32 num_vg_chosen; int32 j; int32 vg_ref = -1; int32 vg_tag; int32 n_entries; int32 level; int32 curr_vg = 0; int32 max_vgs = 0; int32 num_nodes = 0; int index_error = 0; int dumpall = 0; char file_name[MAXFNLEN]; char *vgclass = NULL; char *vgname = NULL; FILE *fp = NULL; vg_info_t **list = NULL; vg_info_t *ptr = NULL; intn status, ret_value = SUCCEED; /* check for missing input file name */ if (curr_arg >= argc) { fprintf(stderr, "Missing input file name. Please try again.\n"); return (FAIL); /* nothing to be cleaned up at this point */ } /* going through each input file, look for the requested vgroups and display them */ while (curr_arg < argc) { intn isHDF = TRUE; /* FALSE, if current file is not HDF file */ intn skipfile = FALSE; /* skip the current file when some severe */ /* failure occurs; otherwise, the list of nodes is not */ /* completely prepared and will cause a crash in display */ strcpy(file_name, argv[curr_arg]); /* get current input file name */ strcpy(dumpvg_opts->ifile_name, file_name); /* record for later use */ curr_arg++; /* forward the current argument pointer */ /* there are times a failure causes continuation without proper cleanup, so closeVG ensures of that */ closeVG(&file_id, &vg_chosen, file_name); /* Print an informative message and skip this file if it is not an HDF file */ isHDF = Hishdf(file_name); if (isHDF == FALSE) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dvg: %s is not an HDF file", file_name); } else /* print message, then continue processing the next file */ { ERROR_CONT_1("in dvg: %s is not an HDF file", file_name); } } /* open current hdf file with error check, if fail, go to next file */ file_id = Hopen(file_name, DFACC_READ, 0); if (file_id == FAIL) { /* if there are no more files to be processed, print error message, then returns with FAIL */ if (curr_arg == argc) { ERROR_GOTO_1("in dvg: Failure in opening file %s", file_name); } /* otherwise, print message, then continue processing the next file */ else ERROR_CONT_1("in dvg: Failure in opening file %s", file_name); } /* initiate VG interface; if fail, probably something fatal, returns with FAIL */ if (FAIL == Vstart(file_id)) ERROR_GOTO_1("in dvg: Vstart failed for file %s\n", file_name); /* compose the list of indices of vgroups to be processed in the current file and return the number of items in the list */ num_vg_chosen = get_VGindex_list(file_id, dumpvg_opts, &vg_chosen, &index_error); /* if there are no valid indices, move on to the next file */ if (index_error && num_vg_chosen == 0) /* to the next file */ { closeVG(&file_id, &vg_chosen, file_name); ERROR_CONT_1("in dvg: Invalid vgroups given for file %s", file_name); } /* open output file for ASCII or direct to standard output */ if (dumpvg_opts->dump_to_file) fp = fopen(dumpvg_opts->file_name, "w"); else fp = stdout; /* print input file name and file annotations */ fprintf(fp, "File name: %s \n", file_name); status = print_file_annotations(file_id, file_name); if (status == FAIL) ERROR_CONT_1("in dvg: print_file_annotations failed for file %s", file_name); /* when no vgroups specified, dump all vgroups */ if (num_vg_chosen == NO_SPECIFIC) dumpall = TRUE; /* otherwise, sort the list of reference numbers */ else sort(vg_chosen, num_vg_chosen); /* allocate space for the list of nodes to be printed in the Graphical Representation part */ max_vgs = NUM_VGS; list = (vg_info_t **)malloc(sizeof(vg_info_t *) * max_vgs); CHECK_ALLOC(list, "list", "dvg"); for (j = 0; j < max_vgs; j++) /* init that list */ list[j] = NULL; /* init number of nodes for the graphical representation of the current file */ num_nodes = 0; vg_count = 0; /* no vgroups processed yet */ vg_ref = Vgetid(file_id, -1); curr_vg = 0; while ((vg_ref != FAIL) && (dumpall || vg_count < num_vg_chosen)) { int32 skipvg = FALSE; intn isvdata; /* TRUE if a vdata being processed, FALSE if vg */ /* if not to dump all vgroups but the current vgroup is not one of the selected ones */ if ((!dumpall) && (vg_ref != vg_chosen[vg_count])) skipvg = TRUE; /* skip printing this vg's info and data but include it in the graphical representation */ /* attaches the current vgroup and gets its tag, name, and class */ status = get_VGandInfo(&vg_id, file_id, vg_ref, file_name, &n_entries, &vgname, &vgclass); if (status == FAIL) ERROR_CONT_2("in dvg: %s failed in getting vgroup with ref#=%d", "get_VGandInfo", (int)vg_ref); /* since the succeeding processing depends heavily on these we decided to just skip the current file */ if (vg_id == FAIL || n_entries == -1) { skipfile = TRUE; /* so Graphical Rep won't be printed */ break; /* to get out of this current file */ } if (!skipvg) vg_count++; num_nodes++; /* one more node to the list */ /* if more vgs to be printed than originally allocated space for, reallocate the list of nodes to the proper amount */ if (num_nodes > max_vgs) { max_vgs += NUM_VGS; list = realloc(list, (uint32)sizeof(vg_info_t *) * max_vgs); CHECK_ALLOC(list, "list", "dvg"); } list[curr_vg] = (vg_info_t *)malloc(sizeof(vg_info_t)); CHECK_ALLOC(list[curr_vg], "list[curr_vg]", "dvg"); list[curr_vg]->children = NULL; list[curr_vg]->type = NULL; /* if this vgroup is to be skipped, do not print the info here; go to the data part to add the vgroup to the node list for the graphical rep. */ if (!skipvg) { if (FAIL == (vg_tag = VQuerytag(vg_id))) ERROR_NOTIFY_3("in dvg: %s failed on vgroup with ref=%d in file %s", "VQuerytag", (int)vg_ref, file_name); fprintf(fp, "\n"); fprintf(fp, "\nVgroup:%d\n", (int)curr_vg); if (vg_tag == DFTAG_VG) /* when have time, change to this one, not now because it takes time to fix the testfiles */ /* fprintf(fp, " tag = DFTAG_VG(%d);", ); */ fprintf(fp, " tag = %d;", (int)vg_tag); else fprintf(fp, " tag = Invalid tag (%d);", (int)vg_tag); fprintf(fp, " reference = %d;\n", (int)vg_ref); fprintf(fp, " name = %s; class = %s;\n", vgname, vgclass); fprintf(fp, " number of entries = %d;\n", (int)n_entries); /* dump attributes of vgroup; the second argument is ignored in this call, it's there as an index when dumping attributes of a vdata field */ isvdata = FALSE; status = dumpattr(vg_id, 0, isvdata, dumpvg_opts->file_format, fp); if (FAIL == status) ERROR_NOTIFY_3("in dvg: %s failed on vgroup with ref=%d in file %s", "dumpattr", (int)vg_ref, file_name); /* Read in all of the annotations. */ /* Re-vamped annotation handling to use new ANxxx interface * -georgev 6/11/97 */ status = print_data_annots(file_id, file_name, vg_tag, vg_ref); if (FAIL == status) ERROR_NOTIFY_3("in dvg: %s failed on vgroup with ref=%d in file %s", "dumpattr", (int)vg_ref, file_name); } /* not skipped */ free(vgclass); vgclass = NULL; if (skipvg || dumpvg_opts->contents == DHEADER) { status = vgBuildGraph(vg_id, file_id, n_entries, file_name, list[curr_vg], &skipfile); if (status == FAIL) ERROR_NOTIFY_3("in dvg: %s failed for vgroup with ref#=%d in file %s", "vgBuildGraph", (int)vg_ref, file_name); } else { fprintf(fp, "Entries:-\n"); status = vgdumpfull(vg_id, dumpvg_opts, file_id, n_entries, fp, list[curr_vg], &skipfile); if (FAIL == status) { ERROR_NOTIFY_3("in dvg: %s failed for vgroup with ref#=%d in file %s", "vgdumpfull", (int)vg_ref, file_name); /* do not continue so list[curr_vg] can be set */ } } /* neither skipped nor header only */ /* if the current file is to be skipped due to some severe error, break out of for loop and the partial list is freed */ if (skipfile) ERROR_BREAK_1("in dvg: Severe failure in file %s. Go to next file", file_name, FAIL); /* done using this vgroup id, reset it */ resetVG(&vg_id, file_name); /* fill the graph. rep. node for this vgroup */ list[curr_vg]->index = Vref_index(file_id, vg_ref); list[curr_vg]->vg_name = (char *)malloc(sizeof(char) * (strlen(vgname) + 1)); strcpy(list[curr_vg]->vg_name, vgname); list[curr_vg]->displayed = FALSE; list[curr_vg]->treedisplayed = FALSE; /* BMR - 01/16/99 */ free(vgname); vgname = NULL; vg_ref = Vgetid(file_id, vg_ref); if (vg_ref != FAIL) curr_vg++; } /* while more vgroups in the file */ /* print the graphical representation part */ if (!skipfile) { int32 node_num; fprintf(fp, "\n\nGraphical representation of the file:-\n"); fprintf(fp, "(vg#: vgroup; vd: vdata)\n\n"); for (node_num = 0; node_num < num_nodes; node_num++) { int32 firstchild = FALSE; level = -1; ptr = list[node_num]; fprintf(fp, " "); /* print tree */ display(ptr, level, list, num_nodes, ptr->index, firstchild, fp); ptr->treedisplayed = TRUE; /* so this tree won't be shown again */ fprintf(fp, "\n"); } /* for */ } /* if the file is not to be skipped */ /* free allocated resources */ list = free_vginfo_list(list, curr_vg + 1); /* free vg_chosen, and terminate access to and close the input file */ closeVG(&file_id, &vg_chosen, file_name); /* close the output file if there is one */ if (dumpvg_opts->dump_to_file) fclose(fp); } /* while (more file to process) */ done: if (ret_value == FAIL) { /* Failure cleanup */ resetVG(&vg_id, file_name); list = free_vginfo_list(list, curr_vg); closeVG(&file_id, &vg_chosen, file_name); SAFE_FREE(vgname); /* free vg name and set it to NULL */ SAFE_FREE(vgclass); /* free vg class name and set it to NULL */ } return ret_value; } /* dvg */ /* main routine in hdp_vg.c; called by hdp.c/main to process the command hdp dumpvg... */ intn do_dumpvg(intn curr_arg, intn argc, char *argv[], intn help) { dump_info_t dumpvg_opts; /* dumpvg options */ intn status, ret_value = SUCCEED; /* initialize the structure that holds user's options and inputs */ init_dump_opts(&dumpvg_opts); if (help == TRUE) { dumpvg_usage(argc, argv); goto done; } /* incomplete command */ if (curr_arg >= argc) { dumpvg_usage(argc, argv); ERROR_GOTO_0("in do_dumpvg: command is incomplete"); } /* end if */ /* parse the user's command and store the inputs in dumpvg_opts */ status = parse_dumpvg_opts(&dumpvg_opts, &curr_arg, argc, argv); if (status == FAIL) { dumpvg_usage(argc, argv); ERROR_GOTO_0("in do_dumpvg: parse_dumpvg_opts is unable to parse command"); } /* display data and information as specified in dumpvg_opts */ status = dvg(&dumpvg_opts, curr_arg, argc, argv); if (status == FAIL) ERROR_GOTO_0("in do_dumpvg: dvg failed"); done: /* free the list of structs containing info of selected Vgroups */ free_obj_chosen_t_list(&dumpvg_opts.all_types, dumpvg_opts.num_chosen); return ret_value; } /* end do_dumpvg() */ hdf4-hdf4.3.1/mfhdf/dumper/show.c000066400000000000000000000503221503061704500165350ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Modified from vshow.c by Eric Tsui, 12/25/1994. */ #include "hdp.h" #include "vg_priv.h" #define BUFFER 1000000 /* ------------------------------------------------ */ int32 dumpvd(int32 vd, file_format_t ff, int data_only, FILE *fp, char separator[2], int32 flds_indices[VSFIELDMAX], int dumpallfields) { char vdname[VSNAMELENMAX + 1]; int32 j, i, t, interlace, nv, vsize; uint8 *bb = NULL; uint8 *b = NULL; DYN_VWRITELIST *w = NULL; intn (*vfmtfn[VSFIELDMAX])(void *, file_format_t ff, FILE *); int32 off[VSFIELDMAX]; int32 order[VSFIELDMAX]; int32 nattrs[VSFIELDMAX]; int32 bufsize; /* size of the buffer we are using */ int32 chunk; /* number of rows that will fit in the buffer */ int32 done; /* number of rows we have done */ int32 count; /* number of rows to do this time through the loop */ int32 nf; /* number of fields in this Vdata */ int32 x, display; int32 temp; int32 addr_width = 0; int32 num_digits; int32 address = 0; int32 nfields; int32 cnt1, cnt2; int32 cn = 0; int32 ret_value = SUCCEED; char fields[VSFIELDMAX * FIELDNAMELENMAX]; char flds[VSFIELDMAX * FIELDNAMELENMAX]; /* inquire about vdata */ if (FAIL == VSinquire(vd, &nv, &interlace, fields, &vsize, vdname)) { ret_value = FAIL; goto done; } if (nv * vsize > BUFFER) /* If the number of records in the vdata is bigger than the buffer size, then divide the records into chunks. */ { bufsize = BUFFER; chunk = BUFFER / vsize; } else /* Otherwise, all the records will be read in at one time. */ { bufsize = nv * vsize; chunk = nv; } done = 0; /* Allocate space for the buffer and terminate hdp if allocation fails. */ bb = (uint8 *)malloc(bufsize); CHECK_ALLOC(bb, "bb", "dumpvd"); if (FAIL == VSsetfields(vd, fields)) { fprintf(stderr, "dumpvd: VSsetfields failed for vd = %d \n", (int)vd); ret_value = FAIL; goto done; } w = vswritelist(vd); nf = w->n; x = 0; /* Used for accessing the array storing the indices of the selected fields. */ for (i = 0; i < nf; i++) /* Read in data of all the fields. */ { order[i] = w->order[i]; /* Set offset for the next element. */ off[i] = DFKNTsize(w->type[i] | DFNT_NATIVE); nattrs[i] = VSfnattrs(vd, i); if (FAIL == nattrs[i]) { fprintf(stderr, "dumpvd: VSfnattrs failed for vd = %d \n", (int)vd); ret_value = FAIL; goto done; } /* Display the header of a vdata if the user didn't specify the data-only option. */ if (!data_only) { if (ff == DASCII) { if ((dumpallfields) || (flds_indices[x] == i)) { fprintf(fp, "- field index %d: [%s], type=%d, order=%d\n", (int)i, w->name[i], w->type[i], w->order[i]); x++; } } /* display attributes - BMR moved this block inside if(!data_only) to keep the attributes from being printed - bug #231*/ if (FAIL == dumpattr(vd, i, 1, ff, fp)) { fprintf(stderr, "dumpvd: dumpattr() failed for vd = %d \n", (int)vd); ret_value = FAIL; goto done; } } /* if !data_only */ /* Choose a function for displaying a piece of data of a particular type. */ switch (w->type[i] & 0xff) { case DFNT_CHAR: case DFNT_UCHAR: vfmtfn[i] = fmtchar; break; case DFNT_UINT8: vfmtfn[i] = fmtuint8; break; case DFNT_INT8: vfmtfn[i] = fmtint8; break; case DFNT_UINT16: vfmtfn[i] = fmtuint16; break; case DFNT_INT16: vfmtfn[i] = fmtint16; break; case DFNT_UINT32: vfmtfn[i] = fmtuint32; break; case DFNT_INT32: vfmtfn[i] = fmtint32; break; case DFNT_FLOAT32: vfmtfn[i] = fmtfloat32; break; case DFNT_FLOAT64: vfmtfn[i] = fmtfloat64; break; default: fprintf(stderr, "sorry, type [%d] not supported\n", (int)w->type[i]); ret_value = FAIL; goto done; } /* switch */ } /* for */ cn = 0; done = count = 0; if (ff == DASCII) { /* If not just the data will be dumped out, then put an address-type column on the left so that the user can recognize which record he/she is looking at. */ if (!data_only) { temp = nv / 10; address = 0; addr_width = num_digits = 1; while (temp != 0) { if (temp != 1) addr_width++; temp = temp / 10; } fprintf(fp, "Loc."); for (j = 0; j < addr_width - 3; j++) fprintf(fp, " "); fprintf(fp, " Data\n"); /* The address of the first record is 0. Also, fill in the extra space on the left with 0's. */ while (num_digits <= addr_width) { fprintf(fp, "0"); num_digits++; cn++; } fprintf(fp, " "); cn += 6; if (addr_width == 2) { fprintf(fp, " "); cn++; } else if (addr_width == 1) { fprintf(fp, " "); cn += 2; } } /* while */ nfields = VSgetfields(vd, flds); if (FAIL == nfields) { fprintf(stderr, "dumpvd: VSgetfields failed for vd = %d \n", (int)vd); ret_value = FAIL; goto done; } cnt1 = 0; cnt2 = 0; while (done != nv) { /* Determine the amount of data to be read this time. */ if ((nv - done) > chunk) count = chunk; else count = nv - done; /* read and update bookkeeping */ if (FAIL == VSread(vd, bb, count, interlace)) { /* If the data set has external element, get the external file name to provide information */ intn extfile_namelen = VSgetexternalfile(vd, 0, NULL, NULL); if (extfile_namelen > 0) { char *extfile_name = NULL; extfile_name = (char *)malloc(sizeof(char *) * (extfile_namelen + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "dumpvd"); /* Get the external file info, we don't need offset here */ extfile_namelen = VSgetexternalfile(vd, extfile_namelen + 1, extfile_name, NULL); ERROR_GOTO_3("in %s: VSread failed for vd(%d) with external file %s. Please verify the " "file exists in the same directory.", "dumpvd", (int)vd, extfile_name); free(extfile_name); } else ERROR_GOTO_2("in %s: VSread failed for vd(%d)", "dumpvd", (int)vd); } done += count; b = bb; /* Display the data. */ for (j = 0; j < count; j++) /* each iteration causes one record to be printed */ { cnt1++; x = 0; for (i = 0; i < nf; i++) /* display all fields in one record */ { if ((!dumpallfields) && (flds_indices[x] != i)) display = 0; else { display = 1; x++; } for (t = 0; t < order[i]; t++) { if (display) cn += (vfmtfn[i])(b, ff, fp); b += off[i]; if (display) { fprintf(fp, " "); cn++; cnt2++; } } if (display) { fprintf(fp, " "); cn++; cnt2++; } } /* for i to nf-1 */ if (cnt2 > 0) { address++; /* "separator" is the symbol used for separating different records. */ fprintf(fp, "%s ", separator); } if (!data_only) { if ((cnt1 * cnt2) > 30) { cnt1 = 0; cnt2 = 0; fprintf(fp, "\n"); cn = 0; /* As long as there is data to be displayed, fill in the extra space with 0's on the left of each address. */ if (j < (count - 1)) { temp = address; num_digits = 1; while ((temp = temp / 10) != 0) num_digits++; while (num_digits < addr_width) { fprintf(fp, "0"); num_digits++; cn++; } fprintf(fp, "%d ", (int)address); cn += 6 + num_digits; if (addr_width == 2) { fprintf(fp, " "); cn++; } else if (addr_width == 1) { fprintf(fp, " "); cn += 2; } } /* if (!data_only) */ } } else fprintf(fp, "\n"); } /* for (j=0; j chunk) count = chunk; else count = nv - done; /* read and update bookkeeping */ if (FAIL == VSread(vd, bb, count, interlace)) { /* If the data set has external element, get the external file name to provide information */ intn extfile_namelen = VSgetexternalfile(vd, 0, NULL, NULL); if (extfile_namelen > 0) { char *extfile_name = NULL; extfile_name = (char *)malloc(sizeof(char *) * (extfile_namelen + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "dumpvd"); /* Get the external file info, we don't need offset here */ extfile_namelen = VSgetexternalfile(vd, extfile_namelen + 1, extfile_name, NULL); ERROR_GOTO_3("in %s: VSread failed for vd(%d) with external file %s. Please verify the " "file exists in the same directory", "dumpvd", (int)vd, extfile_name); free(extfile_name); } else ERROR_GOTO_2("in %s: VSread failed for vd(%d)", "dumpvd", (int)vd); } done += count; b = bb; /* Display the data. */ for (j = 0; j < count; j++) /* each iteration causes one record to be printed */ { cnt1++; x = 0; for (i = 0; i < nf; i++) /* display all fields in one record */ { if ((!dumpallfields) && (flds_indices[x] != i)) display = 0; else { display = 1; x++; } for (t = 0; t < order[i]; t++) { if (display) cn += (vfmtfn[i])(b, ff, fp); b += off[i]; if (display) { cn++; cnt2++; } } if (display) { cn++; cnt2++; } } /* for i to nf-1 */ if (cnt2 > 0) { address++; /* "separator" is the symbol used for separating different records. */ } } /* for (j=0; j>>dumpattr: Failed to get number of attributes for vid %d \n", (int)vid); ret_value = FAIL; goto done; } fprintf(fp, " number of attributes = %d \n", nattrs); /* loop for number of attributes to process */ for (i = 0; i < nattrs; i++) { /* get attribute info of vdata/vgroup */ if (isvs) status = VSattrinfo(vid, findex, i, name, &i_type, &i_count, &e_size); else /* Changed to use updated func of Vattrinfo - BMR, 1/7/2013 */ status = Vattrinfo2(vid, i, name, &i_type, &i_count, &e_size, NULL, NULL); if (status == FAIL) { fprintf(stderr, ">>>dumpattr: failed in getting %d'th attr info.\n", i); ret_value = FAIL; goto done; } /* get attribute hdfsize of vdata/vgroup */ if (isvs) status = VSattrhdfsize(vid, findex, i, &i_size); else status = Vattrhdfsize(vid, i, &i_size); if (status == FAIL) { fprintf(stderr, ">>>dumpattr: failed in getting %d'th attr hdfsize.\n", i); ret_value = FAIL; goto done; } fprintf(fp, " attr%d: name=%s type=%d count=%d size=%d\n", i, name, (int)i_type, (int)i_count, (int)i_size); /* we have two buffer sizes? */ if (e_size > BUFFER) { if (NULL == (buf = malloc(e_size))) { fprintf(stderr, ">>>dumpattr:can't allocate buf for %d'th attribute.\n", i); ret_value = FAIL; goto done; /* do we want exit here? */ } alloc_flag = 1; /* get attribute itself */ if (isvs) status = VSgetattr(vid, findex, i, (void *)buf); else /* Changed to use updated func of Vgetattr - BMR, 1/7/2013 */ status = Vgetattr2(vid, i, (void *)buf); if (status == FAIL) { fprintf(stderr, ">>>dympattr: failed in getting %d'th attr .\n", i); ret_value = FAIL; goto done; } } else { /* get attribute itself */ if (isvs) status = VSgetattr(vid, findex, i, (void *)attrbuf); else /* Changed to use updated func of Vgetattr - BMR, 1/7/2013 */ status = Vgetattr2(vid, i, (void *)attrbuf); if (status == FAIL) { fprintf(stderr, ">>>dympattr: failed in getting %d'th attr.\n", i); ret_value = FAIL; goto done; } } /* format output */ switch (i_type & 0xff) { case DFNT_CHAR: case DFNT_UCHAR: vfmtfn = fmtchar; break; case DFNT_UINT8: vfmtfn = fmtuint8; break; case DFNT_INT8: vfmtfn = fmtint8; break; case DFNT_UINT16: vfmtfn = fmtuint16; break; case DFNT_INT16: vfmtfn = fmtint16; break; case DFNT_UINT32: vfmtfn = fmtuint32; break; case DFNT_INT32: vfmtfn = fmtint32; break; case DFNT_FLOAT32: vfmtfn = fmtfloat32; break; case DFNT_FLOAT64: vfmtfn = fmtfloat64; break; default: fprintf(stderr, ">>>dumpattr: sorry, type [%d] not supported\n", (int)i_type); ret_value = FAIL; goto done; } /* find offset */ off = DFKNTsize(i_type | DFNT_NATIVE); /* which buffer are we using? */ ptr = (alloc_flag) ? buf : attrbuf; putchar('\t'); cn = 0; for (k = 0; k < i_count; k++) { cn += vfmtfn((uint8 *)ptr, ff, fp); ptr += off; putchar(' '); cn++; if (cn > 55) { putchar('\n'); putchar('\t'); cn = 0; } } if (cn) putchar('\n'); /* free allocated space if any */ if (alloc_flag) { free(buf); alloc_flag = 0; buf = NULL; } } /* for i */ done: free(attrbuf); if (ret_value == FAIL) { /* Failure cleanup */ free(buf); } return ret_value; } hdf4-hdf4.3.1/mfhdf/dumper/testfiles/000077500000000000000000000000001503061704500174115ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/dumper/testfiles/Example6.hdf000066400000000000000000000050671503061704500215650ustar00rootroot00000000000000ùÊ\d&eB#« ª  8«BªV8­Ž%«³ª·8«ï(ª8­O%«tªx8«°NCSA HDF Version 4.0 Release 1, Jan. 19, 1996This is a file label for AN This is a file describation for AN ValuesfakeDim0 DimVal0.1ValuesfakeDim0 DimVal0.0ªªfakeDim0Dim0.0 ValuesfakeDim1 DimVal0.1 ValuesfakeDim1 DimVal0.0ªªfakeDim1Dim0.0  j j j j ½ Ñ üªÄ8­ü%hh0"iR)h{#iž)dÇeã#«!ª%8«](ª…8­½%jâ½æ­­j½Ð mysdsVar0.0­­­ Example6.hdfCDF0.0ÐData label for AN ªThis is a data label for VdataªThis is a data describation for Vdata­This is a data label for VgroupThis is a data describation for AN This is a file label for AN This is a file describation for AN ValuesfakeDim0 DimVal0.1ValuesfakeDim0 DimVal0.0ªª fakeDim0Dim0.0 ValuesfakeDim1 DimVal0.1 ValuesfakeDim1 DimVal0.0ªªfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ValuesfakeDim2 DimVal0.0ªªfakeDim2Dim0.0 ValuesfakeDim3 DimVal0.1 ValuesfakeDim3 DimVal0.0ªªfakeDim3Dim0.0  jjjР­Î.jü½ Ð  ­ ".­ P9h ‰h Ÿ"i Á)h ê#i )j½Ñ­­j½ÐmysdsVar0.0  jjjj½Ñ­­j½Ð mysdsVar0.0­­­­­­ Example6.hdfCDF0.0Ð Data label for AN ª This is a data label for Vdataª This is a data describation for Vdata­This is a data label for VgroupThis is a data describation for AN hdf4-hdf4.3.1/mfhdf/dumper/testfiles/IMCOMP.hdf000066400000000000000000000022031503061704500210550ustar00rootroot00000000000000Ê\.&Ê&j6,:ÈN2R/ZÌZ-^É^,^Èr2v ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHDF Version 4.2 Release 7-post0, February 16, 2012  !j,.øÀÏøž*Gû¿˜ÒÅ\Eû¿ÆïÔFû¿˜Ò8øñ·÷Fû¿ðFû¿…¥ÐÆØþñ·‰ûs‡ øñ·…¥Ð·ˆxûñ·‰ûs‡ øñ·ÀÏLûñ·ØDû¿ Eû¿…¥Ð·ˆxûñ·û¿‰ûs‡ øñ·ÀÏLûñ·Eû¿?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ    jj,.3-Image with PaletteRI0.0j, 1j {, ­ Á'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj,.3-Second Image w/palRI0.0j,.Last Image: no palRI0.0­­­RIG0.0RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/LongDataset.hdf000066400000000000000000000067431503061704500223130ustar00rootroot00000000000000È j\¾ ÆX« ª "<­ ^!« ª ƒ<­ ¿!« ઠä<­ !j A½ EÐ c­ s;­ ®4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.1 Release 4 - Pre1  !"#$%&'()*+,-./012  !"#$%&'()*+,-./0123  !"#$%&'()*+,-./01234  !"#$%&'()*+,-./012  !"#$%&'()*+,-./0123  !"#$%&'()*+,-./01234ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.02ValuesfakeDim2 DimVal0.1ªfakeDim2Dim0.02j j j j ¾j ½ Ñ ­­­¾j½Ð   Ex_array_3Var0.0­­­­ LongDataset.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/Roy-64.nc000066400000000000000000000076651503061704500207510ustar00rootroot00000000000000CDF0 lonlatref_time sourceCOADS CMR5 DATASET DATA_TYPE MONTHLY MEANS COORD_SYSTEM GEOGRAPHICALCOMMENTQmonth since 1980-1-1 00:00:00, Latitudes: 32.0, 36.0 Longitudes: -140.0,-136.0Platform_Types All Platforms lon  long_name longitudeFORTRAN_formatf6.1units degrees_eastälat  long_namelatitudeFORTRAN_formatf6.1units degrees_northìref_time  long_namereference timeFORTRAN_formati10unitsmonthsôSST  long_nameMean Sea Surface Temperature _FillValueÆ?öunits degrees CtrimmingALL instrumentunknown bucket implied bucket øSST_obs  long_name1Number of Observations of Sea Surface Temperature _FillValueÆ?öunits number_of_obstrimmingALL instrumentunknown bucket implied bucket SST_var  long_name0Variance of Sea Surface Temperature Observations _FillValueÆ?öunitsvariancetrimmingALL instrumentunknown bucket implied bucket à à BBA„•sA† xADDAu*BB$B@BlB£æBh5xBâ—æCFø?€A¡ÌAÛ$A‰çGAŽS3AÈAÈAèBA×ê²B#7BQ•BQwý@AwSˆApâ[A…òßAˆ(BBBB8B¢´C%éýB‰éjBT‡‚@@Az¾,Az¦ÄAˆHIA‰äÔB(B BBDBºJ¡Bô—BŠ C¢A@€A}Y™A†|ŠAŠ»AŒ’HBBAøB(B—Ó CK´CSBìÏÅ@ A5åA‘|A“¥äAffA˜A AÈB0AŠˆåAeÙBË4 B£ž¼@ÀA•„ A–[ŸAŸwwAœØ~A˜A˜AB B‚úBTÿvAìQíB›Ö}@àAœó3A™çŸAŸPuA¢rÏA€A¨A`BApµÅB(w@ܵWBÊÌ/AA ²`A¢'bA«34A£NÆAøAÐBBPB(8+Bv(Bÿ(úB—áAA¥¸A ÌÌA¦ðÇA£¤B AðBB<Bt¼BÁÌÍBˆC˜¢A A•§÷A—E~AŸ°ßA³¿BdB`B0B<CgäBµœrBµ qC>éŽA0A‘©üA“PuA™¬ÎA–ºnAÈAàBBB¹(#Cþ†BƒÚ·C8Ë[A@AŠ66A†S2A“šA“dBBAÀBBšö]CKw”B«ÅÁBÆÆ¼APAsh¡Aw+A€QíAŽÔA¸AÈAÈBCØšBÖ–C°¸WCßA`Atd7Ax ¡AƒÕ€AƒxB<BLBTBlC êBñR¸Bù§ŸBëbkApA{¤úAt""AóƒA€µLBAÀB$BtCbé…BC—åCD½²C$A€A‚ézA‡ˆA•bûAëNAÈAˆAðB<By«“Aö^BoQC+³AˆAž¤uA—m·AdÂA£ícBA¨AøBB…kfB—I&CÒž¡B¨"lAA èA„ A ÌÌAœ2A¸A˜A˜BBÜVÑBýeOB× CÁC{A˜A¤P#AŸsA¦ÌÍA¦Ž A¸B A AøBLaCƇAm…#Bµ7€A A´ZA­¶ÛA³‘A¨^†AÈA¨AÀAÐB% ÞA–ÄB)[ºCÛlA¨A©JRA¨¢¥Aª»%A«ñAøBAèBBKOCE`.B¹žæBÎÑ‹A°Aš€A˜PõA¡k‡A¢'¶B B,B BDCUŸ·BŒ>ÌBäðŒCiA¸A‡m¶A‰ÈÜA’5äA–=qB BBB Bž2B„æCYBB«›ªAÀAu°\A\ÂAŠRçA‹… AAA¨AÈC®³ÄD.]A´lBÿùAÈAsÂAtNÆAA‰½8A APAˆA¸B4æîADšdB Ž*B@“AÐA}×ðAvffA~A+A…ÌÍA¸AÐA°BB¶$ñBfõÀC€ŒCλAØAmå AffgA€(öA{Z6A˜A¸ApA¨Aó‡CB±=oB(“BEE¹AàA|ÁA½AŒ5æAƒDDBB$A˜AÀC„ºBäl£BÕ'WBK¬bAèAŒÛlA“ ÷A•>“AäpBŒA0AAÐC îA¸ÅZAóà1BÉéŽA0A‘©üA“PuA™¬ÎA–ºnAÈAàBBB¹(#Cþ†BƒÚ·C8Ë[A@AŠ66A†S2A“šA“dBBAÀBBšö]CKw”B«ÅÁBÆÆ¼APAsh¡Aw+A€QíAŽÔA¸AÈAÈBCØšBÖ–C°¸WCßA`Atd7Ax ¡AƒÕ€AƒxB<BLBTBlC êBñR¸Bù§ŸBëbkApA{¤úAt""AóƒA€µLBAÀB$BtCbé…BC—åCD½²C$A€A‚ézA‡ˆA•bûAëNAÈAˆAðB<By«“Aö^BoQC+³AˆAž¤uA—m·AdÂA£ícBA¨AøBB…kfB—I&CÒž¡B¨"lAA èA„ A ÌÌAœ2A¸A˜A˜BBÜVÑBýeOB× CÁC{A˜A¤P#AŸsA¦ÌÍA¦Ž A¸B A AøBLaCƇAm…#Bµ7€A A´ZA­¶ÛA³‘A¨^†AÈA¨AÀAÐB% ÞA–ÄB)[ºCÛlA¨A©JRA¨¢¥Aª»%A«ñAøBAèBBKOCE`.B¹žæBÎÑ‹A°Aš€A˜PõA¡k‡A¢'¶B B,B BDCUŸ·BŒ>ÌBäðŒCiA¸A‡m¶A‰ÈÜA’5äA–=qB BBB Bž2B„æCYBB«›ªAÀAu°\A\ÂAŠRçA‹… AAA¨AÈC®³ÄD.]A´lBÿùAÈAsÂAtNÆAA‰½8A APAˆA¸B4æîADšdB Ž*B@“AÐA}×ðAvffA~A+A…ÌÍA¸AÐA°BB¶$ñBfõÀC€ŒCλAØAmå AffgA€(öA{Z6A˜A¸ApA¨Aó‡CB±=oB(“BEE¹AàA|ÁA½AŒ5æAƒDDBB$A˜AÀC„ºBäl£BÕ'WBK¬bAèAŒÛlA“ ÷A•>“AäpBŒA0AAÐC îA¸ÅZAóà1BÉbCDÂõ<š™™>cDE ×#=ÍÌÌ>dEFÍÌL=?ehdf4-hdf4.3.1/mfhdf/dumper/testfiles/VGlongname.hdf000066400000000000000000000013611503061704500221320ustar00rootroot00000000000000Ê\«&ª*<­f!j‡½‹Ð™ ­¥Ÿ­D+­oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006 ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 jjj½Ñ­j½ÐzSDS belongs to VG_LONGNAME, which has a very long name that is used to test the new feature of variable length vgroup nameVar0.0­­VGlongname.hdfCDF0.0Ð`SD Vgroup - this vgroup has an sds as a member and it is actually meant to test long vgroup nameCommon Vgroupshdf4-hdf4.3.1/mfhdf/dumper/testfiles/ctxtr2r.hdf000066400000000000000000000006621503061704500215100ustar00rootroot00000000000000Ê\¾&0jV½Z¿pÎƖО¼žNCSA HDF Version 4.0 Release 0, ?month? ?year?BBBBBB BBBBBB  jjjA0A@APA¨A¸AÈAØB Bм¾½¿ÃÆhdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-1.out000066400000000000000000000162401503061704500216010ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #2 Index = 2 Type= 8-bit unsigned char width=13; height=15 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 Image Name = Raster Image #3 Index = 3 Type= 8-bit unsigned char width=13; height=15 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-10.out000066400000000000000000000170151503061704500216620ustar00rootroot00000000000000File name: grtdfui84.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 5 ncomps = 4 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9 10 10 10 10 11 11 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15 15 15 16 16 16 16 17 17 17 17 18 18 18 18 19 19 19 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 24 24 25 25 25 25 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 30 30 30 30 31 31 31 31 32 32 32 32 33 33 33 33 34 34 34 34 35 35 35 35 36 36 36 36 37 37 37 37 38 38 38 38 39 39 39 39 40 40 40 40 41 41 41 41 42 42 42 42 43 43 43 43 44 44 44 44 45 45 45 45 46 46 46 46 47 47 47 47 48 48 48 48 49 49 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #2 Index = 2 Type= 8-bit unsigned char width=13; height=15 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 Image Name = Raster Image #3 Index = 3 Type= 8-bit unsigned char width=13; height=15 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-11.out000066400000000000000000000162421503061704500216640ustar00rootroot00000000000000File name: grtdfui162.hdf Image Name = Image_array_5 Index = 0 Type= 16-bit unsigned integer width=10; height=5 Ref. = 5 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #2 Index = 2 Type= 8-bit unsigned char width=13; height=15 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 Image Name = Raster Image #3 Index = 3 Type= 8-bit unsigned char width=13; height=15 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-12.out000066400000000000000000000055671503061704500216750ustar00rootroot00000000000000File name: grtdfi322.hdf File attributes: Attr0: Name = File contents Type = 8-bit signed char Count= 16 Value = image data \000\000\000\000 Image Name = Raster Image #0 Index = 0 Type= 8-bit unsigned char width=5; height=6 Ref. = 7 ncomps = 1 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 1 Attr0: Name = Value range Type = 32-bit signed integer Count= 2 Value = 0 60 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Image Name = Image_array_5 Index = 1 Type= 32-bit signed integer width=10; height=5 Ref. = 5 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 5 0 5 1 6 1 6 2 7 2 7 3 8 3 8 4 9 4 9 10 15 10 15 11 16 11 16 12 17 12 17 13 18 13 18 14 19 14 19 20 25 20 25 21 26 21 26 22 27 22 27 23 28 23 28 24 29 24 29 30 35 30 35 31 36 31 36 32 37 32 37 33 38 33 38 34 39 34 39 40 45 40 45 41 46 41 46 42 47 42 47 43 48 43 48 44 49 44 49 Image Name = Raster Image #3 Index = 2 Type= 8-bit unsigned char width=5; height=6 Ref. = 1 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #4 Index = 3 Type= 8-bit unsigned char width=5; height=6 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #5 Index = 4 Type= 8-bit unsigned char width=5; height=6 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-13.out000066400000000000000000000114441503061704500216650ustar00rootroot00000000000000File name: Image_with_Palette.hdf Raster Image Ref. = 2 Palette: 3 components; 256 entries Palette Data: 0 0 8 1 0 8 2 0 8 3 0 8 4 0 8 5 0 8 6 0 8 7 0 8 8 0 8 9 0 8 10 0 8 11 0 8 12 0 8 13 0 8 14 0 8 15 0 8 16 0 8 17 0 8 18 0 8 19 0 8 20 0 8 21 0 8 22 0 8 23 0 8 24 0 8 25 0 8 26 0 8 27 0 8 28 0 8 29 0 8 30 0 8 31 0 8 32 0 8 33 0 8 34 0 8 35 0 8 36 0 8 37 0 8 38 0 8 39 0 8 40 0 8 41 0 8 42 0 8 43 0 8 44 0 8 45 0 8 46 0 8 47 0 8 48 0 8 49 0 8 50 0 8 51 0 8 52 0 8 53 0 8 54 0 8 55 0 8 56 0 8 57 0 8 58 0 8 59 0 8 60 0 8 61 0 8 62 0 8 63 0 8 64 0 8 65 0 8 66 0 8 67 0 8 68 0 8 69 0 8 70 0 8 71 0 8 72 0 8 73 0 8 74 0 8 75 0 8 76 0 8 77 0 8 78 0 8 79 0 8 80 0 8 81 0 8 82 0 8 83 0 8 84 0 8 85 0 8 86 0 8 87 0 8 88 0 8 89 0 8 90 0 8 91 0 8 92 0 8 93 0 8 94 0 8 95 0 8 96 0 8 97 0 8 98 0 8 99 0 8 100 0 8 101 0 8 102 0 8 103 0 8 104 0 8 105 0 8 106 0 8 107 0 8 108 0 8 109 0 8 110 0 8 111 0 8 112 0 8 113 0 8 114 0 8 115 0 8 116 0 8 117 0 8 118 0 8 119 0 8 120 0 8 121 0 8 122 0 8 123 0 8 124 0 8 125 0 8 126 0 8 127 0 8 128 0 8 129 0 8 130 0 8 131 0 8 132 0 8 133 0 8 134 0 8 135 0 8 136 0 8 137 0 8 138 0 8 139 0 8 140 0 8 141 0 8 142 0 8 143 0 8 144 0 8 145 0 8 146 0 8 147 0 8 148 0 8 149 0 8 150 0 8 151 0 8 152 0 8 153 0 8 154 0 8 155 0 8 156 0 8 157 0 8 158 0 8 159 0 8 160 0 8 161 0 8 162 0 8 163 0 8 164 0 8 165 0 8 166 0 8 167 0 8 168 0 8 169 0 8 170 0 8 171 0 8 172 0 8 173 0 8 174 0 8 175 0 8 176 0 8 177 0 8 178 0 8 179 0 8 180 0 8 181 0 8 182 0 8 183 0 8 184 0 8 185 0 8 186 0 8 187 0 8 188 0 8 189 0 8 190 0 8 191 0 8 192 0 8 193 0 8 194 0 8 195 0 8 196 0 8 197 0 8 198 0 8 199 0 8 200 0 8 201 0 8 202 0 8 203 0 8 204 0 8 205 0 8 206 0 8 207 0 8 208 0 8 209 0 8 210 0 8 211 0 8 212 0 8 213 0 8 214 0 8 215 0 8 216 0 8 217 0 8 218 0 8 219 0 8 220 0 8 221 0 8 222 0 8 223 0 8 224 0 8 225 0 8 226 0 8 227 0 8 228 0 8 229 0 8 230 0 8 231 0 8 232 0 8 233 0 8 234 0 8 235 0 8 236 0 8 237 0 8 238 0 8 239 0 8 240 0 8 241 0 8 242 0 8 243 0 8 244 0 8 245 0 8 246 0 8 247 0 8 248 0 8 249 0 8 250 0 8 251 0 8 252 0 8 253 0 8 254 0 8 255 0 8 Raster Image Ref. = 3 Palette: 3 components; 256 entries Palette Data: 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 Raster Image Ref. = 4 No palette data hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-14.out000066400000000000000000000013301503061704500216570ustar00rootroot00000000000000File name: Image_with_Palette.hdf Image Name = Image with Palette Index = 0 Type= 8-bit unsigned integer width=5; height=5 Ref. = 2 ncomps = 2 Interlace mode= PIXEL Palette: 3 components; 256 entries Compression method = NONE Number of attributes = 0 Image Name = Second Image w/pal Index = 1 Type= 8-bit unsigned integer width=5; height=5 Ref. = 3 ncomps = 2 Interlace mode= PIXEL Palette: 3 components; 256 entries Compression method = NONE Number of attributes = 0 Image Name = Last Image: no pal Index = 2 Type= 8-bit unsigned integer width=5; height=5 Ref. = 4 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-15.out000066400000000000000000000036601503061704500216700ustar00rootroot000000000000000 0 8 1 0 8 2 0 8 3 0 8 4 0 8 5 0 8 6 0 8 7 0 8 8 0 8 9 0 8 10 0 8 11 0 8 12 0 8 13 0 8 14 0 8 15 0 8 16 0 8 17 0 8 18 0 8 19 0 8 20 0 8 21 0 8 22 0 8 23 0 8 24 0 8 25 0 8 26 0 8 27 0 8 28 0 8 29 0 8 30 0 8 31 0 8 32 0 8 33 0 8 34 0 8 35 0 8 36 0 8 37 0 8 38 0 8 39 0 8 40 0 8 41 0 8 42 0 8 43 0 8 44 0 8 45 0 8 46 0 8 47 0 8 48 0 8 49 0 8 50 0 8 51 0 8 52 0 8 53 0 8 54 0 8 55 0 8 56 0 8 57 0 8 58 0 8 59 0 8 60 0 8 61 0 8 62 0 8 63 0 8 64 0 8 65 0 8 66 0 8 67 0 8 68 0 8 69 0 8 70 0 8 71 0 8 72 0 8 73 0 8 74 0 8 75 0 8 76 0 8 77 0 8 78 0 8 79 0 8 80 0 8 81 0 8 82 0 8 83 0 8 84 0 8 85 0 8 86 0 8 87 0 8 88 0 8 89 0 8 90 0 8 91 0 8 92 0 8 93 0 8 94 0 8 95 0 8 96 0 8 97 0 8 98 0 8 99 0 8 100 0 8 101 0 8 102 0 8 103 0 8 104 0 8 105 0 8 106 0 8 107 0 8 108 0 8 109 0 8 110 0 8 111 0 8 112 0 8 113 0 8 114 0 8 115 0 8 116 0 8 117 0 8 118 0 8 119 0 8 120 0 8 121 0 8 122 0 8 123 0 8 124 0 8 125 0 8 126 0 8 127 0 8 128 0 8 129 0 8 130 0 8 131 0 8 132 0 8 133 0 8 134 0 8 135 0 8 136 0 8 137 0 8 138 0 8 139 0 8 140 0 8 141 0 8 142 0 8 143 0 8 144 0 8 145 0 8 146 0 8 147 0 8 148 0 8 149 0 8 150 0 8 151 0 8 152 0 8 153 0 8 154 0 8 155 0 8 156 0 8 157 0 8 158 0 8 159 0 8 160 0 8 161 0 8 162 0 8 163 0 8 164 0 8 165 0 8 166 0 8 167 0 8 168 0 8 169 0 8 170 0 8 171 0 8 172 0 8 173 0 8 174 0 8 175 0 8 176 0 8 177 0 8 178 0 8 179 0 8 180 0 8 181 0 8 182 0 8 183 0 8 184 0 8 185 0 8 186 0 8 187 0 8 188 0 8 189 0 8 190 0 8 191 0 8 192 0 8 193 0 8 194 0 8 195 0 8 196 0 8 197 0 8 198 0 8 199 0 8 200 0 8 201 0 8 202 0 8 203 0 8 204 0 8 205 0 8 206 0 8 207 0 8 208 0 8 209 0 8 210 0 8 211 0 8 212 0 8 213 0 8 214 0 8 215 0 8 216 0 8 217 0 8 218 0 8 219 0 8 220 0 8 221 0 8 222 0 8 223 0 8 224 0 8 225 0 8 226 0 8 227 0 8 228 0 8 229 0 8 230 0 8 231 0 8 232 0 8 233 0 8 234 0 8 235 0 8 236 0 8 237 0 8 238 0 8 239 0 8 240 0 8 241 0 8 242 0 8 243 0 8 244 0 8 245 0 8 246 0 8 247 0 8 248 0 8 249 0 8 250 0 8 251 0 8 252 0 8 253 0 8 254 0 8 255 0 8 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-16.out000066400000000000000000000004311503061704500216620ustar00rootroot000000000000000 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-17.out000066400000000000000000000011651503061704500216700ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 40 41 42 43 44 45 46 47 48 49 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-18.out000066400000000000000000000055471503061704500217010ustar00rootroot00000000000000File name: grtdfi322.hdf File attributes: Attr0: Name = File contents Type = 8-bit signed char Count= 16 Value = image data Image Name = Raster Image #0 Index = 0 Type= 8-bit unsigned char width=5; height=6 Ref. = 7 ncomps = 1 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 1 Attr0: Name = Value range Type = 32-bit signed integer Count= 2 Value = 0 60 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Image Name = Image_array_5 Index = 1 Type= 32-bit signed integer width=10; height=5 Ref. = 5 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 5 0 5 1 6 1 6 2 7 2 7 3 8 3 8 4 9 4 9 10 15 10 15 11 16 11 16 12 17 12 17 13 18 13 18 14 19 14 19 20 25 20 25 21 26 21 26 22 27 22 27 23 28 23 28 24 29 24 29 30 35 30 35 31 36 31 36 32 37 32 37 33 38 33 38 34 39 34 39 40 45 40 45 41 46 41 46 42 47 42 47 43 48 43 48 44 49 44 49 Image Name = Raster Image #3 Index = 2 Type= 8-bit unsigned char width=5; height=6 Ref. = 1 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #4 Index = 3 Type= 8-bit unsigned char width=5; height=6 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #5 Index = 4 Type= 8-bit unsigned char width=5; height=6 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-19.out000066400000000000000000000054761503061704500217030ustar00rootroot00000000000000File name: grtdfi322.hdf File attributes: Attr0: Name = File contents Type = 8-bit signed char Count= 16 Image Name = Raster Image #0 Index = 0 Type= 8-bit unsigned char width=5; height=6 Ref. = 7 ncomps = 1 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 1 Attr0: Name = Value range Type = 32-bit signed integer Count= 2 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Image Name = Image_array_5 Index = 1 Type= 32-bit signed integer width=10; height=5 Ref. = 5 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 5 0 5 1 6 1 6 2 7 2 7 3 8 3 8 4 9 4 9 10 15 10 15 11 16 11 16 12 17 12 17 13 18 13 18 14 19 14 19 20 25 20 25 21 26 21 26 22 27 22 27 23 28 23 28 24 29 24 29 30 35 30 35 31 36 31 36 32 37 32 37 33 38 33 38 34 39 34 39 40 45 40 45 41 46 41 46 42 47 42 47 43 48 43 48 44 49 44 49 Image Name = Raster Image #3 Index = 2 Type= 8-bit unsigned char width=5; height=6 Ref. = 1 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #4 Index = 3 Type= 8-bit unsigned char width=5; height=6 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Image Name = Raster Image #5 Index = 4 Type= 8-bit unsigned char width=5; height=6 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-2.out000066400000000000000000000117171503061704500216060ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #3 Index = 3 Type= 8-bit unsigned char width=13; height=15 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-20.out000066400000000000000000000011251503061704500216560ustar00rootroot00000000000000File name: IMCOMP.hdf Image Name = Raster Image #0 Index = 0 Type= 8-bit unsigned char width=4; height=4 Ref. = 2 ncomps = 1 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=4; height=4 Ref. = 3 ncomps = 1 Interlace mode= PIXEL Palette: 3 components; 256 entries Compression method = IMCOMP Number of attributes = 0 Data : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-3.out000066400000000000000000000011651503061704500216030ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-4.out000066400000000000000000000011651503061704500216040ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-5.out000066400000000000000000000121711503061704500216040ustar00rootroot00000000000000File name: grtdfui82.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 6 ncomps = 2 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #2 Index = 2 Type= 8-bit unsigned char width=13; height=15 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-6.out000066400000000000000000000004351503061704500216050ustar00rootroot000000000000000 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-7.out000066400000000000000000000000001503061704500215720ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-8.out000066400000000000000000000000001503061704500215730ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpgr-9.out000066400000000000000000000165371503061704500216220ustar00rootroot00000000000000File name: grtdfui83.hdf Image Name = Image_array_5 Index = 0 Type= 8-bit unsigned integer width=10; height=5 Ref. = 5 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 36 36 36 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 48 48 48 49 49 49 Image Name = Raster Image #1 Index = 1 Type= 8-bit unsigned char width=13; height=15 Ref. = 2 ncomps = 3 Interlace mode= PIXEL No palette Compression method = NONE Number of attributes = 0 Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Image Name = Raster Image #2 Index = 2 Type= 8-bit unsigned char width=13; height=15 Ref. = 3 ncomps = 3 Interlace mode= LINE No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 1 1 3 3 5 5 7 7 9 9 11 11 13 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 2 3 2 3 6 7 6 7 10 11 10 11 14 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 3 3 3 3 7 7 7 7 11 11 11 11 15 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 4 5 6 7 4 5 6 7 12 13 14 15 12 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 5 5 7 7 5 5 7 7 13 13 15 15 13 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 6 7 6 7 6 7 6 7 14 15 14 15 14 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 15 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 8 9 10 11 12 13 14 15 8 9 10 11 12 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 9 9 11 11 13 13 15 15 9 9 11 11 13 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 10 11 10 11 14 15 14 15 10 11 10 11 14 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 11 11 11 11 15 15 15 15 11 11 11 11 15 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 12 13 14 15 12 13 14 15 12 13 14 15 12 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 13 13 15 15 13 13 15 15 13 13 15 15 13 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 14 15 14 15 14 15 14 15 14 15 14 15 14 Image Name = Raster Image #3 Index = 3 Type= 8-bit unsigned char width=13; height=15 Ref. = 4 ncomps = 3 Interlace mode= COMPONENT No palette Compression method = NONE Number of attributes = 0 Data : 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 0 1 2 3 4 5 6 7 8 9 10 11 12 1 0 3 2 5 4 7 6 9 8 11 10 13 2 3 0 1 6 7 4 5 10 11 8 9 14 3 2 1 0 7 6 5 4 11 10 9 8 15 4 5 6 7 0 1 2 3 12 13 14 15 8 5 4 7 6 1 0 3 2 13 12 15 14 9 6 7 4 5 2 3 0 1 14 15 12 13 10 7 6 5 4 3 2 1 0 15 14 13 12 11 8 9 10 11 12 13 14 15 0 1 2 3 4 9 8 11 10 13 12 15 14 1 0 3 2 5 10 11 8 9 14 15 12 13 2 3 0 1 6 11 10 9 8 15 14 13 12 3 2 1 0 7 12 13 14 15 8 9 10 11 4 5 6 7 0 13 12 15 14 9 8 11 10 5 4 7 6 1 14 15 12 13 10 11 8 9 6 7 4 5 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-1.out000066400000000000000000000123171503061704500217530ustar00rootroot00000000000000File name: tdf24.hdf Data model: 24-bit raster image without palette. width=13; height=15 reference=2 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Data model: 24-bit raster image without palette. width=13; height=15 reference=3 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 Data model: 24-bit raster image without palette. width=13; height=15 reference=4 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 4 4 4 7 7 7 6 6 6 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 7 7 7 4 4 4 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 6 6 6 5 5 5 4 4 4 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 1 1 1 2 2 2 3 3 3 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 0 0 0 3 3 3 2 2 2 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 3 3 3 0 0 0 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 12 12 12 15 15 15 14 14 14 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 15 15 15 12 12 12 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 14 14 14 13 13 13 12 12 12 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 8 8 8 11 11 11 10 10 10 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 11 11 11 8 8 8 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-2.out000066400000000000000000000066061503061704500217600ustar00rootroot00000000000000File name: tdf24.hdf Data model: 24-bit raster image without palette. width=13; height=15 reference=3 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 Data model: 24-bit raster image without palette. width=13; height=15 reference=4 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 4 4 4 7 7 7 6 6 6 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 7 7 7 4 4 4 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 6 6 6 5 5 5 4 4 4 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 1 1 1 2 2 2 3 3 3 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 0 0 0 3 3 3 2 2 2 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 3 3 3 0 0 0 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 12 12 12 15 15 15 14 14 14 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 15 15 15 12 12 12 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 14 14 14 13 13 13 12 12 12 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 8 8 8 11 11 11 10 10 10 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 11 11 11 8 8 8 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-3.out000066400000000000000000000034331503061704500217540ustar00rootroot00000000000000File name: tdf24.hdf Data model: 24-bit raster image without palette. width=13; height=15 reference=3 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-4.out000066400000000000000000000123171503061704500217560ustar00rootroot00000000000000File name: tdf24.hdf Data model: 24-bit raster image without palette. width=13; height=15 reference=2 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 Data model: 24-bit raster image without palette. width=13; height=15 reference=3 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 Data model: 24-bit raster image without palette. width=13; height=15 reference=4 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 4 4 4 7 7 7 6 6 6 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 7 7 7 4 4 4 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 6 6 6 5 5 5 4 4 4 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 1 1 1 2 2 2 3 3 3 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 0 0 0 3 3 3 2 2 2 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 3 3 3 0 0 0 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 12 12 12 15 15 15 14 14 14 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 15 15 15 12 12 12 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 14 14 14 13 13 13 12 12 12 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 8 8 8 11 11 11 10 10 10 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 11 11 11 8 8 8 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-5.out000066400000000000000000000066061503061704500217630ustar00rootroot00000000000000File name: tdf24.hdf Data model: 24-bit raster image without palette. width=13; height=15 reference=3 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 Data model: 24-bit raster image without palette. width=13; height=15 reference=4 *data is not compressed. Data : 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 4 4 4 7 7 7 6 6 6 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 7 7 7 4 4 4 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 6 6 6 5 5 5 4 4 4 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 1 1 1 2 2 2 3 3 3 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 0 0 0 3 3 3 2 2 2 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 3 3 3 0 0 0 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 12 12 12 15 15 15 14 14 14 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 15 15 15 12 12 12 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 14 14 14 13 13 13 12 12 12 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 8 8 8 11 11 11 10 10 10 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 11 11 11 8 8 8 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumprig-6.out000066400000000000000000000062011503061704500217530ustar00rootroot00000000000000 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 2 2 2 3 3 3 2 2 2 3 3 3 6 6 6 7 7 7 6 6 6 7 7 7 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 4 4 4 5 5 5 6 6 6 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 7 7 7 7 7 7 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 6 6 6 7 7 7 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 15 15 15 15 15 15 9 9 9 9 9 9 11 11 11 11 11 11 13 13 13 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 15 15 15 14 14 14 15 15 15 10 10 10 11 11 11 10 10 10 11 11 11 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 14 14 14 15 15 15 12 12 12 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 13 13 13 15 15 15 15 15 15 13 13 13 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 15 15 15 14 14 14 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 4 4 4 7 7 7 6 6 6 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 7 7 7 4 4 4 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 6 6 6 5 5 5 4 4 4 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 1 1 1 2 2 2 3 3 3 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 0 0 0 3 3 3 2 2 2 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 3 3 3 0 0 0 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 9 9 9 8 8 8 11 11 11 10 10 10 13 13 13 12 12 12 15 15 15 14 14 14 1 1 1 0 0 0 3 3 3 2 2 2 5 5 5 10 10 10 11 11 11 8 8 8 9 9 9 14 14 14 15 15 15 12 12 12 13 13 13 2 2 2 3 3 3 0 0 0 1 1 1 6 6 6 11 11 11 10 10 10 9 9 9 8 8 8 15 15 15 14 14 14 13 13 13 12 12 12 3 3 3 2 2 2 1 1 1 0 0 0 7 7 7 12 12 12 13 13 13 14 14 14 15 15 15 8 8 8 9 9 9 10 10 10 11 11 11 4 4 4 5 5 5 6 6 6 7 7 7 0 0 0 13 13 13 12 12 12 15 15 15 14 14 14 9 9 9 8 8 8 11 11 11 10 10 10 5 5 5 4 4 4 7 7 7 6 6 6 1 1 1 14 14 14 15 15 15 12 12 12 13 13 13 10 10 10 11 11 11 8 8 8 9 9 9 6 6 6 7 7 7 4 4 4 5 5 5 2 2 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-1.out000066400000000000000000000047101503061704500217610ustar00rootroot00000000000000File name: swf32.hdf Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 100.000000 Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Line Attr1: Name = units Type = 8-bit signed char Count= 4 Value = Inch Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int16 Data : 0.000000 10.000000 20.000000 Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Value = Column Attr1: Name = units Type = 8-bit signed char Count= 2 Value = Cm Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 1.000000 2.000000 3.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-10.out000066400000000000000000000052761503061704500220510ustar00rootroot00000000000000File name: swf32_fileattr.hdf File attributes: Attr0: Name = File purpose Type = 8-bit signed char Count= 37 Attr1: Name = File contents Type = 8-bit signed char Count= 14 Attr2: Name = Test clean format Type = 8-bit signed char Count= 65 Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 100.000000 Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Line Attr1: Name = units Type = 8-bit signed char Count= 4 Value = Inch Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int16 Data : 0.000000 10.000000 20.000000 Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Value = Column Attr1: Name = units Type = 8-bit signed char Count= 2 Value = Cm Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 1.000000 2.000000 3.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-11.out000066400000000000000000000053431503061704500220450ustar00rootroot00000000000000File name: swf32_fileattr.hdf File attributes: Attr0: Name = File purpose Type = 8-bit signed char Count= 37 Value = For testing dumpsds SD file attribute Attr1: Name = File contents Type = 8-bit signed char Count= 14 Value = Some data sets Attr2: Name = Test clean format Type = 8-bit signed char Count= 65 Value = A tab <\011>, a CR <\012>, several nulls <\000\000\000\000\000\000>, and one more tab <\011> Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Attr1: Name = units Type = 8-bit signed char Count= 6 Attr2: Name = format Type = 8-bit signed char Count= 5 Data : 0.000000 100.000000 Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Attr1: Name = units Type = 8-bit signed char Count= 4 Attr2: Name = format Type = 8-bit signed char Count= 5 Data : 0.000000 10.000000 20.000000 Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Attr1: Name = units Type = 8-bit signed char Count= 2 Attr2: Name = format Type = 8-bit signed char Count= 5 Data : 0.000000 1.000000 2.000000 3.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-12.out000066400000000000000000000007101503061704500220370ustar00rootroot00000000000000File name: SDSlongname.hdf Variable Name = The name of this dataset is long and it is used to test the new variable length name feature. Index = 0 Type= 32-bit signed integer Ref. = 2 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim0 Size = 10 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim1 Size = 10 Scale Type = number-type not set Number of attributes = 0 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-13.out000066400000000000000000000013601503061704500220420ustar00rootroot00000000000000File name: sds1_dim1_samename.hdf Variable Name = Variable 1 Index = 0 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 1 Number of attributes = 1 Dim0: Name=Variable 1 Size = 5 Scale Type = number-type not set Number of attributes = 1 Attr0: Name = Attribute SDS 1 Type = 8-bit signed char Count= 23 Value = This is not a coord var Data : No data written. Dimension Variable Name = Variable 1 Index = 1 Scale Type= number-type not set Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 1 Dim0: Name=Variable 1 Size = 5 Attr0: Name = Attribute Dimension 1 Type = 8-bit signed char Count= 19 Value = This is a coord var Data : hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-14.out000066400000000000000000000017711503061704500220510ustar00rootroot00000000000000File name: sds2_dim1_samename.hdf Variable Name = Variable 1 Index = 0 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 1 Number of attributes = 0 Dim0: Name=Variable 2 Size = 5 Scale Type = 32-bit signed integer Number of attributes = 0 Data : No data written. Variable Name = Variable 2 Index = 1 Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim1 Size = 2 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim2 Size = 3 Scale Type = number-type not set Number of attributes = 0 Data : 0.100000 2.300000 4.500000 4.500000 6.700000 8.900000 Dimension Variable Name = Variable 2 Index = 2 Scale Type= 32-bit signed integer Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 0 Dim0: Name=Variable 2 Size = 5 Data : 101 102 103 104 105 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-15.out000066400000000000000000000045241503061704500220510ustar00rootroot00000000000000File name: sds_compressed.hdf Variable Name = SDSgzip Index = 0 Type= 32-bit signed integer Ref. = 2 Compression method = DEFLATE Deflate level = 6 Compression ratio (original:compressed) = 5.42:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim0 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim1 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 Variable Name = SDSskiphuff Index = 1 Type= 32-bit signed integer Ref. = 4 Compression method = SKPHUFF Skipping unit size = 4 Compression ratio (original:compressed) = 4.16:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim2 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim3 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 Variable Name = SDSszip Index = 2 Type= 32-bit signed integer Ref. = 6 Compression method = SZIP Compression information is unavailable (no SZIP library) Compression ratio (original:compressed) = 2.67:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim4 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim5 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-15szip.out000066400000000000000000000055061503061704500227600ustar00rootroot00000000000000File name: sds_compressed.hdf Variable Name = SDSgzip Index = 0 Type= 32-bit signed integer Ref. = 2 Compression method = DEFLATE Deflate level = 6 Compression ratio (original:compressed) = 5.42:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim0 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim1 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 Variable Name = SDSskiphuff Index = 1 Type= 32-bit signed integer Ref. = 4 Compression method = SKPHUFF Skipping unit size = 4 Compression ratio (original:compressed) = 4.16:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim2 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim3 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 Variable Name = SDSszip Index = 2 Type= 32-bit signed integer Ref. = 6 Compression method = SZIP Option mask = H4_SZ_EC_OPTION_MASK|H4_SZ_RAW_OPTION_MASK (132) Pixels per block = 2 Pixels per scanline = 5 Bits per pixel = 32 Pixels = 80 Compression ratio (original:compressed) = 2.67:1 Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim4 Size = 16 Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim5 Size = 5 Scale Type = number-type not set Number of attributes = 0 Data : 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-16.out000066400000000000000000000153241503061704500220520ustar00rootroot00000000000000File name: sds_empty_many.hdf File attributes: Attr0: Name = file_contents Type = 8-bit signed char Count= 116 Value = This file was generated by the program ma nySDSs.c in hdf4/mfhdf/dumper/testfiles t o test the flag -k in hdp dumpsds\000 Variable Name = data1 Index = 0 Type= 16-bit signed integer Ref. = 2 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim0 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim1 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data2 Index = 1 Type= 16-bit signed integer Ref. = 3 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim2 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim3 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data3 Index = 2 Type= 16-bit signed integer Ref. = 4 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim4 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim5 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data4 Index = 3 Type= 16-bit signed integer Ref. = 5 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim6 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim7 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data6 Index = 5 Type= 16-bit signed integer Ref. = 7 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim10 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim11 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data9 Index = 8 Type= 16-bit signed integer Ref. = 10 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim16 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim17 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data14 Index = 13 Type= 16-bit signed integer Ref. = 15 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim26 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim27 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data15 Index = 14 Type= 16-bit signed integer Ref. = 16 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim28 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim29 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data16 Index = 15 Type= 16-bit signed integer Ref. = 17 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim30 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim31 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data22 Index = 21 Type= 16-bit signed integer Ref. = 23 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim42 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim43 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data23 Index = 22 Type= 16-bit signed integer Ref. = 24 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim44 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim45 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data24 Index = 23 Type= 16-bit signed integer Ref. = 25 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim46 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim47 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data27 Index = 26 Type= 16-bit signed integer Ref. = 28 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim52 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim53 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data34 Index = 33 Type= 16-bit signed integer Ref. = 35 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim66 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim67 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data35 Index = 34 Type= 16-bit signed integer Ref. = 36 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim68 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim69 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data36 Index = 35 Type= 16-bit signed integer Ref. = 37 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim70 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim71 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data37 Index = 36 Type= 16-bit signed integer Ref. = 38 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim72 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim73 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data40 Index = 39 Type= 16-bit signed integer Ref. = 41 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim78 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim79 Size = 10 Scale Type = number-type not set Number of attributes = 0 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-17.out000066400000000000000000000153241503061704500220530ustar00rootroot00000000000000File name: sds_empty_many.hdf File attributes: Attr0: Name = file_contents Type = 8-bit signed char Count= 116 Value = This file was generated by the program ma nySDSs.c in hdf4/mfhdf/dumper/testfiles t o test the flag -k in hdp dumpsds\000 Variable Name = data40 Index = 39 Type= 16-bit signed integer Ref. = 41 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim78 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim79 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data37 Index = 36 Type= 16-bit signed integer Ref. = 38 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim72 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim73 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data34 Index = 33 Type= 16-bit signed integer Ref. = 35 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim66 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim67 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data27 Index = 26 Type= 16-bit signed integer Ref. = 28 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim52 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim53 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data35 Index = 34 Type= 16-bit signed integer Ref. = 36 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim68 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim69 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data36 Index = 35 Type= 16-bit signed integer Ref. = 37 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim70 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim71 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data1 Index = 0 Type= 16-bit signed integer Ref. = 2 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim0 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim1 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data2 Index = 1 Type= 16-bit signed integer Ref. = 3 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim2 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim3 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data6 Index = 5 Type= 16-bit signed integer Ref. = 7 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim10 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim11 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data9 Index = 8 Type= 16-bit signed integer Ref. = 10 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim16 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim17 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data4 Index = 3 Type= 16-bit signed integer Ref. = 5 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim6 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim7 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data3 Index = 2 Type= 16-bit signed integer Ref. = 4 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim4 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim5 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data15 Index = 14 Type= 16-bit signed integer Ref. = 16 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim28 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim29 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data16 Index = 15 Type= 16-bit signed integer Ref. = 17 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim30 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim31 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data14 Index = 13 Type= 16-bit signed integer Ref. = 15 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim26 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim27 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data24 Index = 23 Type= 16-bit signed integer Ref. = 25 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim46 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim47 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data23 Index = 22 Type= 16-bit signed integer Ref. = 24 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim44 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim45 Size = 10 Scale Type = number-type not set Number of attributes = 0 Variable Name = data22 Index = 21 Type= 16-bit signed integer Ref. = 23 Compression method = NONE Rank = 2 Number of attributes = 0 Dim0: Name=fakeDim42 Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=fakeDim43 Size = 10 Scale Type = number-type not set Number of attributes = 0 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-18.out000066400000000000000000000053151503061704500220530ustar00rootroot00000000000000File name: Roy.nc File attributes: Attr0: Name = source Type = 8-bit signed char Count= 18 Value = COADS CMR5 DATASET Attr1: Name = DATA_TYPE Type = 8-bit signed char Count= 13 Value = MONTHLY MEANS Attr2: Name = COORD_SYSTEM Type = 8-bit signed char Count= 12 Value = GEOGRAPHICAL Attr3: Name = COMMENT Type = 8-bit signed char Count= 81 Value = month since 1980-1-1 00:00:00, Latitudes: 32.0, 36.0 Longitudes: -140.0,-136.0 Attr4: Name = Platform_Types Type = 8-bit signed char Count= 13 Value = All Platforms Variable Name = lon Index = 0 Type= 32-bit floating point Rank = 1 Number of attributes = 3 Dim0: Name=lon Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 9 Value = longitude Attr1: Name = FORTRAN_format Type = 8-bit signed char Count= 4 Value = f6.1 Attr2: Name = units Type = 8-bit signed char Count= 12 Value = degrees_east Data : -140.000000 -138.000000 Variable Name = lat Index = 1 Type= 32-bit floating point Rank = 1 Number of attributes = 3 Dim0: Name=lat Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 8 Value = latitude Attr1: Name = FORTRAN_format Type = 8-bit signed char Count= 4 Value = f6.1 Attr2: Name = units Type = 8-bit signed char Count= 13 Value = degrees_north Data : 34.000000 32.000000 Variable Name = ref_time Index = 2 Type= 32-bit floating point Rank = 1 Number of attributes = 3 Dim0: Name=ref_time Size = UNLIMITED (currently 48) Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 14 Value = reference time Attr1: Name = FORTRAN_format Type = 8-bit signed char Count= 3 Value = i10 Attr2: Name = units Type = 8-bit signed char Count= 6 Value = months Data : 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 11.000000 12.000000 13.000000 14.000000 15.000000 16.000000 17.000000 18.000000 19.000000 20.000000 21.000000 22.000000 23.000000 24.000000 25.000000 26.000000 27.000000 28.000000 29.000000 30.000000 31.000000 32.000000 33.000000 34.000000 35.000000 36.000000 37.000000 38.000000 39.000000 40.000000 41.000000 42.000000 43.000000 44.000000 45.000000 46.000000 47.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-19.out000066400000000000000000000001041503061704500220430ustar00rootroot00000000000000Invalid input file: hdp cannot read a netCDF 64-bit file, Roy-64.nc hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-2.out000066400000000000000000000010141503061704500217540ustar00rootroot00000000000000File name: swf32.hdf Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Value = Column Attr1: Name = units Type = 8-bit signed char Count= 2 Value = Cm Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 1.000000 2.000000 3.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-20.out000066400000000000000000000013001503061704500220320ustar00rootroot00000000000000File name: var3D_empty.nc Variable Name = Variable with rank 0 Index = 0 Type= 32-bit floating point Rank = 0 Number of attributes = 0 Variable Name = Variable 1 Index = 1 Type= 32-bit floating point Rank = 3 Number of attributes = 1 Dim0: Name=Record dimension Size = UNLIMITED (currently 0) Scale Type = number-type not set Number of attributes = 0 Dim1: Name=X dimension Size = 2 Scale Type = number-type not set Number of attributes = 0 Dim2: Name=Y dimension Size = 4 Scale Type = number-type not set Number of attributes = 0 Attr0: Name = units Type = 8-bit signed char Count= 3 Value = hPa Data : No data written. hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-3.out000066400000000000000000000027521503061704500217670ustar00rootroot00000000000000File name: swf32.hdf Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Line Attr1: Name = units Type = 8-bit signed char Count= 4 Value = Inch Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int16 Data : 0.000000 10.000000 20.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-4.out000066400000000000000000000000401503061704500217540ustar00rootroot00000000000000SDS with name 'Time': not found hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-5.out000066400000000000000000000027431503061704500217710ustar00rootroot00000000000000File name: swf32.hdf Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 100.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-6.out000066400000000000000000000027431503061704500217720ustar00rootroot00000000000000File name: swf32.hdf Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 100.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-7.out000066400000000000000000000004271503061704500217700ustar00rootroot000000000000000.000000 100.000000 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-8.out000066400000000000000000000046211503061704500217710ustar00rootroot00000000000000File name: swf32_fileattr.hdf File attributes: Attr0: Name = File purpose Type = 8-bit signed char Count= 37 Value = For testing dumpsds SD file attribute Attr1: Name = File contents Type = 8-bit signed char Count= 14 Value = Some data sets Attr2: Name = Test clean format Type = 8-bit signed char Count= 65 Value = A tab <\011>, a CR <\012>, several nulls <\000\000\000\000\000\000>, and one more tab <\011> Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Line Attr1: Name = units Type = 8-bit signed char Count= 4 Value = Inch Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int16 Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Value = Column Attr1: Name = units Type = 8-bit signed char Count= 2 Value = Cm Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpsds-9.out000066400000000000000000000055261503061704500217770ustar00rootroot00000000000000File name: swf32_fileattr.hdf File attributes: Attr0: Name = File purpose Type = 8-bit signed char Count= 37 Value = For testing dumpsds SD file attribute Attr1: Name = File contents Type = 8-bit signed char Count= 14 Value = Some data sets Attr2: Name = Test clean format Type = 8-bit signed char Count= 65 Value = A tab < >, a CR < >, several nulls < ... >, and one more tab < > Dimension Variable Name = fakeDim0 Index = 0 Scale Type= 32-bit floating point Ref. = 3 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim0 Size = 2 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Time Attr1: Name = units Type = 8-bit signed char Count= 6 Value = Second Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 100.000000 Dimension Variable Name = fakeDim1 Index = 1 Scale Type= 32-bit floating point Ref. = 4 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim1 Size = 3 Attr0: Name = long_name Type = 8-bit signed char Count= 4 Value = Line Attr1: Name = units Type = 8-bit signed char Count= 4 Value = Inch Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int16 Data : 0.000000 10.000000 20.000000 Dimension Variable Name = fakeDim2 Index = 2 Scale Type= 32-bit floating point Ref. = 5 Compression method = NONE Rank = 1 Number of attributes = 3 Dim0: Name=fakeDim2 Size = 4 Attr0: Name = long_name Type = 8-bit signed char Count= 6 Value = Column Attr1: Name = units Type = 8-bit signed char Count= 2 Value = Cm Attr2: Name = format Type = 8-bit signed char Count= 5 Value = Int32 Data : 0.000000 1.000000 2.000000 3.000000 Variable Name = Data-Set-2 Index = 3 Type= 32-bit floating point Ref. = 2 Compression method = NONE Rank = 3 Number of attributes = 2 Dim0: Name=fakeDim0 Size = 2 Scale Type = 32-bit floating point Number of attributes = 3 Dim1: Name=fakeDim1 Size = 3 Scale Type = 32-bit floating point Number of attributes = 3 Dim2: Name=fakeDim2 Size = 4 Scale Type = 32-bit floating point Number of attributes = 3 Attr0: Name = valid_max Type = 32-bit floating point Count= 1 Value = 123.000000 Attr1: Name = valid_min Type = 32-bit floating point Count= 1 Value = -1.000000 Data : 0.000000 1.000000 2.000000 3.000000 10.000000 11.000000 12.000000 13.000000 20.000000 21.000000 22.000000 23.000000 100.000000 101.000000 102.000000 103.000000 110.000000 111.000000 112.000000 113.000000 120.000000 121.000000 122.000000 123.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-1.out000066400000000000000000012015541503061704500216070ustar00rootroot00000000000000File name: tvset.hdf Vdata: 0 tag = 1962; reference = 1235; number of records = 100; interlace = FULL_INTERLACE (0); fields = [FIELD_name_HERE]; record size (in bytes) = 4; name = Float Vdata; class = Test object; number of attributes = 0 - field index 0: [FIELD_name_HERE], type=5, order=1 number of attributes = 0 Loc. Data 00 0.000000 ; 1.000000 ; 2.000000 ; 3.000000 ; 04 4.000000 ; 5.000000 ; 6.000000 ; 7.000000 ; 08 8.000000 ; 9.000000 ; 10.000000 ; 11.000000 ; 12 12.000000 ; 13.000000 ; 14.000000 ; 15.000000 ; 16 16.000000 ; 17.000000 ; 18.000000 ; 19.000000 ; 20 20.000000 ; 21.000000 ; 22.000000 ; 23.000000 ; 24 24.000000 ; 25.000000 ; 26.000000 ; 27.000000 ; 28 28.000000 ; 29.000000 ; 30.000000 ; 31.000000 ; 32 32.000000 ; 33.000000 ; 34.000000 ; 35.000000 ; 36 36.000000 ; 37.000000 ; 38.000000 ; 39.000000 ; 40 40.000000 ; 41.000000 ; 42.000000 ; 43.000000 ; 44 44.000000 ; 45.000000 ; 46.000000 ; 47.000000 ; 48 48.000000 ; 49.000000 ; 50.000000 ; 51.000000 ; 52 52.000000 ; 53.000000 ; 54.000000 ; 55.000000 ; 56 56.000000 ; 57.000000 ; 58.000000 ; 59.000000 ; 60 60.000000 ; 61.000000 ; 62.000000 ; 63.000000 ; 64 64.000000 ; 65.000000 ; 66.000000 ; 67.000000 ; 68 68.000000 ; 69.000000 ; 70.000000 ; 71.000000 ; 72 72.000000 ; 73.000000 ; 74.000000 ; 75.000000 ; 76 76.000000 ; 77.000000 ; 78.000000 ; 79.000000 ; 80 80.000000 ; 81.000000 ; 82.000000 ; 83.000000 ; 84 84.000000 ; 85.000000 ; 86.000000 ; 87.000000 ; 88 88.000000 ; 89.000000 ; 90.000000 ; 91.000000 ; 92 92.000000 ; 93.000000 ; 94.000000 ; 95.000000 ; 96 96.000000 ; 97.000000 ; 98.000000 ; 99.000000 ; Vdata: 1 tag = 1962; reference = 1236; number of records = 100; interlace = FULL_INTERLACE (0); fields = [DIFFERENT_FIELD_NAME]; record size (in bytes) = 8; name = Integer Vdata; class = Test object; number of attributes = 0 - field index 0: [DIFFERENT_FIELD_NAME], type=24, order=2 number of attributes = 0 Loc. Data 00 0 1 ; 2 3 ; 4 5 ; 6 7 ; 04 8 9 ; 10 11 ; 12 13 ; 14 15 ; 08 16 17 ; 18 19 ; 20 21 ; 22 23 ; 12 24 25 ; 26 27 ; 28 29 ; 30 31 ; 16 32 33 ; 34 35 ; 36 37 ; 38 39 ; 20 40 41 ; 42 43 ; 44 45 ; 46 47 ; 24 48 49 ; 50 51 ; 52 53 ; 54 55 ; 28 56 57 ; 58 59 ; 60 61 ; 62 63 ; 32 64 65 ; 66 67 ; 68 69 ; 70 71 ; 36 72 73 ; 74 75 ; 76 77 ; 78 79 ; 40 80 81 ; 82 83 ; 84 85 ; 86 87 ; 44 88 89 ; 90 91 ; 92 93 ; 94 95 ; 48 96 97 ; 98 99 ; 100 101 ; 102 103 ; 52 104 105 ; 106 107 ; 108 109 ; 110 111 ; 56 112 113 ; 114 115 ; 116 117 ; 118 119 ; 60 120 121 ; 122 123 ; 124 125 ; 126 127 ; 64 128 129 ; 130 131 ; 132 133 ; 134 135 ; 68 136 137 ; 138 139 ; 140 141 ; 142 143 ; 72 144 145 ; 146 147 ; 148 149 ; 150 151 ; 76 152 153 ; 154 155 ; 156 157 ; 158 159 ; 80 160 161 ; 162 163 ; 164 165 ; 166 167 ; 84 168 169 ; 170 171 ; 172 173 ; 174 175 ; 88 176 177 ; 178 179 ; 180 181 ; 182 183 ; 92 184 185 ; 186 187 ; 188 189 ; 190 191 ; 96 192 193 ; 194 195 ; 196 197 ; 198 199 ; Vdata: 2 tag = 1962; reference = 1237; number of records = 100; interlace = FULL_INTERLACE (0); fields = [A, B]; record size (in bytes) = 8; name = Mixed Vdata; class = No class specified; number of attributes = 0 - field index 0: [A], type=5, order=1 number of attributes = 0 - field index 1: [B], type=24, order=1 number of attributes = 0 Loc. Data 00 0.000000 0 ; 2.000000 1 ; 4.000000 2 ; 03 6.000000 3 ; 8.000000 4 ; 10.000000 5 ; 06 12.000000 6 ; 14.000000 7 ; 16.000000 8 ; 09 18.000000 9 ; 20.000000 10 ; 22.000000 11 ; 12 24.000000 12 ; 26.000000 13 ; 28.000000 14 ; 15 30.000000 15 ; 32.000000 16 ; 34.000000 17 ; 18 36.000000 18 ; 38.000000 19 ; 40.000000 20 ; 21 42.000000 21 ; 44.000000 22 ; 46.000000 23 ; 24 48.000000 24 ; 50.000000 25 ; 52.000000 26 ; 27 54.000000 27 ; 56.000000 28 ; 58.000000 29 ; 30 60.000000 30 ; 62.000000 31 ; 64.000000 32 ; 33 66.000000 33 ; 68.000000 34 ; 70.000000 35 ; 36 72.000000 36 ; 74.000000 37 ; 76.000000 38 ; 39 78.000000 39 ; 80.000000 40 ; 82.000000 41 ; 42 84.000000 42 ; 86.000000 43 ; 88.000000 44 ; 45 90.000000 45 ; 92.000000 46 ; 94.000000 47 ; 48 96.000000 48 ; 98.000000 49 ; 100.000000 50 ; 51 102.000000 51 ; 104.000000 52 ; 106.000000 53 ; 54 108.000000 54 ; 110.000000 55 ; 112.000000 56 ; 57 114.000000 57 ; 116.000000 58 ; 118.000000 59 ; 60 120.000000 60 ; 122.000000 61 ; 124.000000 62 ; 63 126.000000 63 ; 128.000000 64 ; 130.000000 65 ; 66 132.000000 66 ; 134.000000 67 ; 136.000000 68 ; 69 138.000000 69 ; 140.000000 70 ; 142.000000 71 ; 72 144.000000 72 ; 146.000000 73 ; 148.000000 74 ; 75 150.000000 75 ; 152.000000 76 ; 154.000000 77 ; 78 156.000000 78 ; 158.000000 79 ; 160.000000 80 ; 81 162.000000 81 ; 164.000000 82 ; 166.000000 83 ; 84 168.000000 84 ; 170.000000 85 ; 172.000000 86 ; 87 174.000000 87 ; 176.000000 88 ; 178.000000 89 ; 90 180.000000 90 ; 182.000000 91 ; 184.000000 92 ; 93 186.000000 93 ; 188.000000 94 ; 190.000000 95 ; 96 192.000000 96 ; 194.000000 97 ; 196.000000 98 ; 99 198.000000 99 ; Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 - field index 1: [VALUES], type=24, order=3 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 0 1 2 15.500000 ; c d 3 4 5 16.000000 ; 2 e f 6 7 8 16.500000 ; g h 9 10 11 17.000000 ; 4 i j 12 13 14 17.500000 ; k l 15 16 17 18.000000 ; 6 m n 18 19 20 18.500000 ; o p 21 22 23 19.000000 ; 8 q r 24 25 26 19.500000 ; s t 27 28 29 20.000000 ; Vdata: 4 tag = 1962; reference = 1239; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-0; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 5 tag = 1962; reference = 1240; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-1; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 6 tag = 1962; reference = 1241; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-2; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 7 tag = 1962; reference = 1242; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-3; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 8 tag = 1962; reference = 1243; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-4; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 9 tag = 1962; reference = 1244; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-5; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 10 tag = 1962; reference = 1245; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-6; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 11 tag = 1962; reference = 1246; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-7; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 12 tag = 1962; reference = 1247; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-8; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 13 tag = 1962; reference = 1248; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-9; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 14 tag = 1962; reference = 1249; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-10; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 15 tag = 1962; reference = 1250; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-11; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 16 tag = 1962; reference = 1251; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-12; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 17 tag = 1962; reference = 1252; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-13; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 18 tag = 1962; reference = 1253; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-14; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 19 tag = 1962; reference = 1254; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-15; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 20 tag = 1962; reference = 1255; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-16; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 21 tag = 1962; reference = 1256; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-17; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 22 tag = 1962; reference = 1257; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-18; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 23 tag = 1962; reference = 1258; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-19; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 24 tag = 1962; reference = 1259; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-20; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 25 tag = 1962; reference = 1260; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-21; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 26 tag = 1962; reference = 1261; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-22; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 27 tag = 1962; reference = 1262; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-23; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 28 tag = 1962; reference = 1263; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-24; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 29 tag = 1962; reference = 1264; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-25; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 30 tag = 1962; reference = 1265; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-26; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 31 tag = 1962; reference = 1266; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-27; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 32 tag = 1962; reference = 1267; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-28; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 33 tag = 1962; reference = 1268; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-29; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 34 tag = 1962; reference = 1269; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-30; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 35 tag = 1962; reference = 1270; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-31; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 36 tag = 1962; reference = 1271; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-32; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 37 tag = 1962; reference = 1272; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-33; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 38 tag = 1962; reference = 1273; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-34; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 39 tag = 1962; reference = 1274; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-35; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 40 tag = 1962; reference = 1275; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-36; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 41 tag = 1962; reference = 1276; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-37; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 42 tag = 1962; reference = 1277; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-38; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 43 tag = 1962; reference = 1278; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-39; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 44 tag = 1962; reference = 1279; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-40; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 45 tag = 1962; reference = 1280; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-41; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 46 tag = 1962; reference = 1281; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-42; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 47 tag = 1962; reference = 1282; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-43; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 48 tag = 1962; reference = 1283; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-44; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 49 tag = 1962; reference = 1284; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-45; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 50 tag = 1962; reference = 1285; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-46; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 51 tag = 1962; reference = 1286; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-47; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 52 tag = 1962; reference = 1287; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-48; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 53 tag = 1962; reference = 1288; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-49; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 54 tag = 1962; reference = 1289; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-50; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 55 tag = 1962; reference = 1290; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-51; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 56 tag = 1962; reference = 1291; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-52; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 57 tag = 1962; reference = 1292; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-53; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 58 tag = 1962; reference = 1293; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-54; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 59 tag = 1962; reference = 1294; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-55; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 60 tag = 1962; reference = 1295; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-56; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 61 tag = 1962; reference = 1296; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-57; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 62 tag = 1962; reference = 1297; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-58; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 63 tag = 1962; reference = 1298; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-59; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 64 tag = 1962; reference = 1299; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-60; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 65 tag = 1962; reference = 1300; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-61; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 66 tag = 1962; reference = 1301; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-62; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 67 tag = 1962; reference = 1302; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-63; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 68 tag = 1962; reference = 1303; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-64; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 69 tag = 1962; reference = 1304; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-65; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 70 tag = 1962; reference = 1305; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-66; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 71 tag = 1962; reference = 1306; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-67; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 72 tag = 1962; reference = 1307; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-68; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 73 tag = 1962; reference = 1308; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-69; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 74 tag = 1962; reference = 1309; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-70; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 75 tag = 1962; reference = 1310; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-71; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 76 tag = 1962; reference = 1311; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-72; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 77 tag = 1962; reference = 1312; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-73; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 78 tag = 1962; reference = 1313; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-74; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 79 tag = 1962; reference = 1314; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-75; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 80 tag = 1962; reference = 1315; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-76; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 81 tag = 1962; reference = 1316; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-77; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 82 tag = 1962; reference = 1317; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-78; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 83 tag = 1962; reference = 1318; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-79; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 84 tag = 1962; reference = 1319; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-80; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 85 tag = 1962; reference = 1320; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-81; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 86 tag = 1962; reference = 1321; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-82; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 87 tag = 1962; reference = 1322; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-83; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 88 tag = 1962; reference = 1323; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-84; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 89 tag = 1962; reference = 1324; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-85; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 90 tag = 1962; reference = 1325; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-86; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 91 tag = 1962; reference = 1326; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-87; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 92 tag = 1962; reference = 1327; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-88; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 93 tag = 1962; reference = 1328; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-89; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 94 tag = 1962; reference = 1329; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-90; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 95 tag = 1962; reference = 1330; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-91; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 96 tag = 1962; reference = 1331; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-92; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 97 tag = 1962; reference = 1332; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-93; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 98 tag = 1962; reference = 1333; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-94; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 99 tag = 1962; reference = 1334; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-95; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 100 tag = 1962; reference = 1335; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-96; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 101 tag = 1962; reference = 1336; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-97; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 102 tag = 1962; reference = 1337; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-98; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 103 tag = 1962; reference = 1338; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-99; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 104 tag = 1962; reference = 1339; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-100; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 105 tag = 1962; reference = 1340; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-101; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 106 tag = 1962; reference = 1341; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-102; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 107 tag = 1962; reference = 1342; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-103; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 108 tag = 1962; reference = 1343; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-104; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 109 tag = 1962; reference = 1344; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-105; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 110 tag = 1962; reference = 1345; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-106; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 111 tag = 1962; reference = 1346; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-107; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 112 tag = 1962; reference = 1347; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-108; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 113 tag = 1962; reference = 1348; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-109; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 114 tag = 1962; reference = 1349; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-110; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 115 tag = 1962; reference = 1350; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-111; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 116 tag = 1962; reference = 1351; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-112; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 117 tag = 1962; reference = 1352; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-113; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 118 tag = 1962; reference = 1353; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-114; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 119 tag = 1962; reference = 1354; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-115; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 120 tag = 1962; reference = 1355; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-116; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 121 tag = 1962; reference = 1356; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-117; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 122 tag = 1962; reference = 1357; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-118; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 123 tag = 1962; reference = 1358; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-119; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 124 tag = 1962; reference = 1359; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-120; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 125 tag = 1962; reference = 1360; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-121; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 126 tag = 1962; reference = 1361; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-122; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 127 tag = 1962; reference = 1362; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-123; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 128 tag = 1962; reference = 1363; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-124; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 129 tag = 1962; reference = 1364; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-125; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 130 tag = 1962; reference = 1365; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-126; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 131 tag = 1962; reference = 1366; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-127; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 132 tag = 1962; reference = 1367; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-128; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 133 tag = 1962; reference = 1368; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-129; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 134 tag = 1962; reference = 1369; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-130; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 135 tag = 1962; reference = 1370; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-131; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 136 tag = 1962; reference = 1371; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-132; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 137 tag = 1962; reference = 1372; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-133; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 138 tag = 1962; reference = 1373; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-134; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 139 tag = 1962; reference = 1374; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-135; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 140 tag = 1962; reference = 1375; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-136; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 141 tag = 1962; reference = 1376; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-137; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 142 tag = 1962; reference = 1377; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-138; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 143 tag = 1962; reference = 1378; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-139; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 144 tag = 1962; reference = 1379; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-140; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 145 tag = 1962; reference = 1380; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-141; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 146 tag = 1962; reference = 1381; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-142; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 147 tag = 1962; reference = 1382; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-143; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 148 tag = 1962; reference = 1383; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-144; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 149 tag = 1962; reference = 1384; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-145; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 150 tag = 1962; reference = 1385; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-146; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 151 tag = 1962; reference = 1386; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-147; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 152 tag = 1962; reference = 1387; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-148; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 153 tag = 1962; reference = 1388; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-149; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 154 tag = 1962; reference = 1389; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-150; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 155 tag = 1962; reference = 1390; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-151; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 156 tag = 1962; reference = 1391; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-152; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 157 tag = 1962; reference = 1392; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-153; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 158 tag = 1962; reference = 1393; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-154; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 159 tag = 1962; reference = 1394; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-155; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 160 tag = 1962; reference = 1395; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-156; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 161 tag = 1962; reference = 1396; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-157; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 162 tag = 1962; reference = 1397; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-158; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 163 tag = 1962; reference = 1398; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-159; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 164 tag = 1962; reference = 1399; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-160; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 165 tag = 1962; reference = 1400; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-161; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 166 tag = 1962; reference = 1401; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-162; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 167 tag = 1962; reference = 1402; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-163; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 168 tag = 1962; reference = 1403; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-164; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 169 tag = 1962; reference = 1404; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-165; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 170 tag = 1962; reference = 1405; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-166; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 171 tag = 1962; reference = 1406; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-167; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 172 tag = 1962; reference = 1407; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-168; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 173 tag = 1962; reference = 1408; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-169; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 174 tag = 1962; reference = 1409; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-170; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 175 tag = 1962; reference = 1410; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-171; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 176 tag = 1962; reference = 1411; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-172; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 177 tag = 1962; reference = 1412; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-173; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 178 tag = 1962; reference = 1413; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-174; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 179 tag = 1962; reference = 1414; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-175; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 180 tag = 1962; reference = 1415; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-176; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 181 tag = 1962; reference = 1416; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-177; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 182 tag = 1962; reference = 1417; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-178; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 183 tag = 1962; reference = 1418; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-179; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 184 tag = 1962; reference = 1419; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-180; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 185 tag = 1962; reference = 1420; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-181; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 186 tag = 1962; reference = 1421; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-182; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 187 tag = 1962; reference = 1422; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-183; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 188 tag = 1962; reference = 1423; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-184; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 189 tag = 1962; reference = 1424; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-185; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 190 tag = 1962; reference = 1425; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-186; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 191 tag = 1962; reference = 1426; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-187; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 192 tag = 1962; reference = 1427; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-188; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 193 tag = 1962; reference = 1428; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-189; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 194 tag = 1962; reference = 1429; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-190; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 195 tag = 1962; reference = 1430; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-191; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 196 tag = 1962; reference = 1431; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-192; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 197 tag = 1962; reference = 1432; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-193; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 198 tag = 1962; reference = 1433; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-194; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 199 tag = 1962; reference = 1434; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-195; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 200 tag = 1962; reference = 1435; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-196; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 201 tag = 1962; reference = 1436; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-197; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 202 tag = 1962; reference = 1437; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-198; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 203 tag = 1962; reference = 1438; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-199; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 204 tag = 1962; reference = 1439; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-200; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 205 tag = 1962; reference = 1440; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-201; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 206 tag = 1962; reference = 1441; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-202; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 207 tag = 1962; reference = 1442; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-203; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 208 tag = 1962; reference = 1443; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-204; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 209 tag = 1962; reference = 1444; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-205; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 210 tag = 1962; reference = 1445; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-206; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 211 tag = 1962; reference = 1446; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-207; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 212 tag = 1962; reference = 1447; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-208; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 213 tag = 1962; reference = 1448; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-209; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 214 tag = 1962; reference = 1449; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-210; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 215 tag = 1962; reference = 1450; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-211; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 216 tag = 1962; reference = 1451; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-212; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 217 tag = 1962; reference = 1452; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-213; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 218 tag = 1962; reference = 1453; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-214; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 219 tag = 1962; reference = 1454; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-215; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 220 tag = 1962; reference = 1455; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-216; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 221 tag = 1962; reference = 1456; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-217; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 222 tag = 1962; reference = 1457; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-218; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 223 tag = 1962; reference = 1458; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-219; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 224 tag = 1962; reference = 1459; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-220; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 225 tag = 1962; reference = 1460; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-221; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 226 tag = 1962; reference = 1461; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-222; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 227 tag = 1962; reference = 1462; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-223; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 228 tag = 1962; reference = 1463; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-224; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 229 tag = 1962; reference = 1464; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-225; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 230 tag = 1962; reference = 1465; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-226; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 231 tag = 1962; reference = 1466; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-227; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 232 tag = 1962; reference = 1467; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-228; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 233 tag = 1962; reference = 1468; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-229; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 234 tag = 1962; reference = 1469; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-230; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 235 tag = 1962; reference = 1470; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-231; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 236 tag = 1962; reference = 1471; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-232; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 237 tag = 1962; reference = 1472; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-233; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 238 tag = 1962; reference = 1473; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-234; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 239 tag = 1962; reference = 1474; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-235; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 240 tag = 1962; reference = 1475; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-236; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 241 tag = 1962; reference = 1476; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-237; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 242 tag = 1962; reference = 1477; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-238; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 243 tag = 1962; reference = 1478; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-239; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 244 tag = 1962; reference = 1479; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-240; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 245 tag = 1962; reference = 1480; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-241; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 246 tag = 1962; reference = 1481; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-242; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 247 tag = 1962; reference = 1482; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-243; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 248 tag = 1962; reference = 1483; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-244; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 249 tag = 1962; reference = 1484; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-245; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 250 tag = 1962; reference = 1485; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-246; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 251 tag = 1962; reference = 1486; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-247; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 252 tag = 1962; reference = 1487; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-248; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 253 tag = 1962; reference = 1488; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-249; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 254 tag = 1962; reference = 1489; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-250; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 255 tag = 1962; reference = 1490; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-251; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 256 tag = 1962; reference = 1491; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-252; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 257 tag = 1962; reference = 1492; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-253; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 258 tag = 1962; reference = 1493; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-254; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 259 tag = 1962; reference = 1494; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-255; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 260 tag = 1962; reference = 1495; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-256; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 261 tag = 1962; reference = 1496; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-257; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 262 tag = 1962; reference = 1497; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-258; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 263 tag = 1962; reference = 1498; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-259; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 264 tag = 1962; reference = 1499; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-260; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 265 tag = 1962; reference = 1500; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-261; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 266 tag = 1962; reference = 1501; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-262; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 267 tag = 1962; reference = 1502; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-263; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 268 tag = 1962; reference = 1503; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-264; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 269 tag = 1962; reference = 1504; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-265; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 270 tag = 1962; reference = 1505; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-266; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 271 tag = 1962; reference = 1506; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-267; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 272 tag = 1962; reference = 1507; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-268; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 273 tag = 1962; reference = 1508; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-269; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 274 tag = 1962; reference = 1509; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-270; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 275 tag = 1962; reference = 1510; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-271; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 276 tag = 1962; reference = 1511; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-272; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 277 tag = 1962; reference = 1512; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-273; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 278 tag = 1962; reference = 1513; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-274; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 279 tag = 1962; reference = 1514; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-275; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 280 tag = 1962; reference = 1515; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-276; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 281 tag = 1962; reference = 1516; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-277; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 282 tag = 1962; reference = 1517; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-278; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 283 tag = 1962; reference = 1518; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-279; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 284 tag = 1962; reference = 1519; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-280; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 285 tag = 1962; reference = 1520; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-281; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 286 tag = 1962; reference = 1521; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-282; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 287 tag = 1962; reference = 1522; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-283; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 288 tag = 1962; reference = 1523; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-284; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 289 tag = 1962; reference = 1524; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-285; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 290 tag = 1962; reference = 1525; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-286; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 291 tag = 1962; reference = 1526; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-287; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 292 tag = 1962; reference = 1527; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-288; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 293 tag = 1962; reference = 1528; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-289; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 294 tag = 1962; reference = 1529; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-290; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 295 tag = 1962; reference = 1530; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-291; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 296 tag = 1962; reference = 1531; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-292; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 297 tag = 1962; reference = 1532; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-293; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 298 tag = 1962; reference = 1533; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-294; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 299 tag = 1962; reference = 1534; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-295; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 300 tag = 1962; reference = 1535; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-296; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 301 tag = 1962; reference = 1536; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-297; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 302 tag = 1962; reference = 1537; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-298; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 303 tag = 1962; reference = 1538; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-299; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 304 tag = 1962; reference = 1539; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-300; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 305 tag = 1962; reference = 1540; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-301; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 306 tag = 1962; reference = 1541; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-302; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 307 tag = 1962; reference = 1542; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-303; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 308 tag = 1962; reference = 1543; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-304; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 309 tag = 1962; reference = 1544; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-305; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 310 tag = 1962; reference = 1545; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-306; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 311 tag = 1962; reference = 1546; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-307; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 312 tag = 1962; reference = 1547; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-308; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 313 tag = 1962; reference = 1548; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-309; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 314 tag = 1962; reference = 1549; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-310; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 315 tag = 1962; reference = 1550; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-311; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 316 tag = 1962; reference = 1551; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-312; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 317 tag = 1962; reference = 1552; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-313; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 318 tag = 1962; reference = 1553; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-314; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 319 tag = 1962; reference = 1554; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-315; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 320 tag = 1962; reference = 1555; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-316; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 321 tag = 1962; reference = 1556; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-317; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 322 tag = 1962; reference = 1557; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-318; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 323 tag = 1962; reference = 1558; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-319; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 324 tag = 1962; reference = 1559; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-320; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 325 tag = 1962; reference = 1560; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-321; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 326 tag = 1962; reference = 1561; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-322; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 327 tag = 1962; reference = 1562; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-323; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 328 tag = 1962; reference = 1563; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-324; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 329 tag = 1962; reference = 1564; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-325; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 330 tag = 1962; reference = 1565; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-326; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 331 tag = 1962; reference = 1566; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-327; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 332 tag = 1962; reference = 1567; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-328; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 333 tag = 1962; reference = 1568; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-329; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 334 tag = 1962; reference = 1569; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-330; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 335 tag = 1962; reference = 1570; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-331; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 336 tag = 1962; reference = 1571; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-332; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 337 tag = 1962; reference = 1572; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-333; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 338 tag = 1962; reference = 1573; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-334; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 339 tag = 1962; reference = 1574; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-335; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 340 tag = 1962; reference = 1575; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-336; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 341 tag = 1962; reference = 1576; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-337; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 342 tag = 1962; reference = 1577; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-338; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 343 tag = 1962; reference = 1578; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-339; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 344 tag = 1962; reference = 1579; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-340; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 345 tag = 1962; reference = 1580; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-341; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 346 tag = 1962; reference = 1581; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-342; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 347 tag = 1962; reference = 1582; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-343; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 348 tag = 1962; reference = 1583; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-344; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 349 tag = 1962; reference = 1584; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-345; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 350 tag = 1962; reference = 1585; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-346; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 351 tag = 1962; reference = 1586; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-347; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 352 tag = 1962; reference = 1587; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-348; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 353 tag = 1962; reference = 1588; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-349; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 354 tag = 1962; reference = 1589; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-350; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 355 tag = 1962; reference = 1590; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-351; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 356 tag = 1962; reference = 1591; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-352; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 357 tag = 1962; reference = 1592; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-353; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 358 tag = 1962; reference = 1593; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-354; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 359 tag = 1962; reference = 1594; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-355; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 360 tag = 1962; reference = 1595; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-356; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 361 tag = 1962; reference = 1596; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-357; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 362 tag = 1962; reference = 1597; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-358; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 363 tag = 1962; reference = 1598; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-359; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 364 tag = 1962; reference = 1599; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-360; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 365 tag = 1962; reference = 1600; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-361; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 366 tag = 1962; reference = 1601; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-362; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 367 tag = 1962; reference = 1602; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-363; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 368 tag = 1962; reference = 1603; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-364; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 369 tag = 1962; reference = 1604; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-365; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 370 tag = 1962; reference = 1605; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-366; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 371 tag = 1962; reference = 1606; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-367; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 372 tag = 1962; reference = 1607; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-368; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 373 tag = 1962; reference = 1608; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-369; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 374 tag = 1962; reference = 1609; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-370; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 375 tag = 1962; reference = 1610; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-371; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 376 tag = 1962; reference = 1611; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-372; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 377 tag = 1962; reference = 1612; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-373; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 378 tag = 1962; reference = 1613; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-374; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 379 tag = 1962; reference = 1614; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-375; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 380 tag = 1962; reference = 1615; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-376; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 381 tag = 1962; reference = 1616; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-377; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 382 tag = 1962; reference = 1617; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-378; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 383 tag = 1962; reference = 1618; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-379; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 384 tag = 1962; reference = 1619; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-380; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 385 tag = 1962; reference = 1620; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-381; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 386 tag = 1962; reference = 1621; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-382; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 387 tag = 1962; reference = 1622; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-383; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 388 tag = 1962; reference = 1623; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-384; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 389 tag = 1962; reference = 1624; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-385; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 390 tag = 1962; reference = 1625; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-386; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 391 tag = 1962; reference = 1626; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-387; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 392 tag = 1962; reference = 1627; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-388; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 393 tag = 1962; reference = 1628; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-389; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 394 tag = 1962; reference = 1629; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-390; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 395 tag = 1962; reference = 1630; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-391; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 396 tag = 1962; reference = 1631; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-392; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 397 tag = 1962; reference = 1632; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-393; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 398 tag = 1962; reference = 1633; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-394; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 399 tag = 1962; reference = 1634; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-395; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 400 tag = 1962; reference = 1635; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-396; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 401 tag = 1962; reference = 1636; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-397; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 402 tag = 1962; reference = 1637; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-398; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 403 tag = 1962; reference = 1638; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-399; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 404 tag = 1962; reference = 1639; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-400; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 405 tag = 1962; reference = 1640; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-401; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 406 tag = 1962; reference = 1641; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-402; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 407 tag = 1962; reference = 1642; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-403; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 408 tag = 1962; reference = 1643; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-404; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 409 tag = 1962; reference = 1644; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-405; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 410 tag = 1962; reference = 1645; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-406; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 411 tag = 1962; reference = 1646; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-407; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 412 tag = 1962; reference = 1647; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-408; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 413 tag = 1962; reference = 1648; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-409; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 414 tag = 1962; reference = 1649; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-410; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 415 tag = 1962; reference = 1650; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-411; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 416 tag = 1962; reference = 1651; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-412; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 417 tag = 1962; reference = 1652; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-413; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 418 tag = 1962; reference = 1653; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-414; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 419 tag = 1962; reference = 1654; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-415; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 420 tag = 1962; reference = 1655; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-416; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 421 tag = 1962; reference = 1656; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-417; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 422 tag = 1962; reference = 1657; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-418; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 423 tag = 1962; reference = 1658; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-419; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 424 tag = 1962; reference = 1659; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-420; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 425 tag = 1962; reference = 1660; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-421; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 426 tag = 1962; reference = 1661; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-422; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 427 tag = 1962; reference = 1662; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-423; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 428 tag = 1962; reference = 1663; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-424; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 429 tag = 1962; reference = 1664; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-425; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 430 tag = 1962; reference = 1665; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-426; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 431 tag = 1962; reference = 1666; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-427; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 432 tag = 1962; reference = 1667; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-428; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 433 tag = 1962; reference = 1668; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-429; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 434 tag = 1962; reference = 1669; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-430; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 435 tag = 1962; reference = 1670; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-431; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 436 tag = 1962; reference = 1671; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-432; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 437 tag = 1962; reference = 1672; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-433; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 438 tag = 1962; reference = 1673; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-434; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 439 tag = 1962; reference = 1674; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-435; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 440 tag = 1962; reference = 1675; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-436; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 441 tag = 1962; reference = 1676; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-437; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 442 tag = 1962; reference = 1677; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-438; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 443 tag = 1962; reference = 1678; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-439; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 444 tag = 1962; reference = 1679; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-440; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 445 tag = 1962; reference = 1680; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-441; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 446 tag = 1962; reference = 1681; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-442; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 447 tag = 1962; reference = 1682; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-443; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 448 tag = 1962; reference = 1683; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-444; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 449 tag = 1962; reference = 1684; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-445; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 450 tag = 1962; reference = 1685; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-446; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 451 tag = 1962; reference = 1686; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-447; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 452 tag = 1962; reference = 1687; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-448; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 453 tag = 1962; reference = 1688; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-449; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 454 tag = 1962; reference = 1689; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-450; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 455 tag = 1962; reference = 1690; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-451; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 456 tag = 1962; reference = 1691; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-452; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 457 tag = 1962; reference = 1692; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-453; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 458 tag = 1962; reference = 1693; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-454; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 459 tag = 1962; reference = 1694; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-455; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 460 tag = 1962; reference = 1695; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-456; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 461 tag = 1962; reference = 1696; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-457; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 462 tag = 1962; reference = 1697; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-458; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 463 tag = 1962; reference = 1698; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-459; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 464 tag = 1962; reference = 1699; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-460; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 465 tag = 1962; reference = 1700; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-461; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 466 tag = 1962; reference = 1701; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-462; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 467 tag = 1962; reference = 1702; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-463; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 468 tag = 1962; reference = 1703; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-464; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 469 tag = 1962; reference = 1704; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-465; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 470 tag = 1962; reference = 1705; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-466; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 471 tag = 1962; reference = 1706; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-467; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 472 tag = 1962; reference = 1707; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-468; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 473 tag = 1962; reference = 1708; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-469; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 474 tag = 1962; reference = 1709; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-470; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 475 tag = 1962; reference = 1710; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-471; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 476 tag = 1962; reference = 1711; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-472; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 477 tag = 1962; reference = 1712; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-473; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 478 tag = 1962; reference = 1713; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-474; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 479 tag = 1962; reference = 1714; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-475; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 480 tag = 1962; reference = 1715; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-476; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 481 tag = 1962; reference = 1716; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-477; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 482 tag = 1962; reference = 1717; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-478; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 483 tag = 1962; reference = 1718; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-479; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 484 tag = 1962; reference = 1719; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-480; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 485 tag = 1962; reference = 1720; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-481; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 486 tag = 1962; reference = 1721; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-482; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 487 tag = 1962; reference = 1722; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-483; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 488 tag = 1962; reference = 1723; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-484; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 489 tag = 1962; reference = 1724; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-485; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 490 tag = 1962; reference = 1725; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-486; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 491 tag = 1962; reference = 1726; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-487; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 492 tag = 1962; reference = 1727; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-488; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 493 tag = 1962; reference = 1728; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-489; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 494 tag = 1962; reference = 1729; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-490; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 495 tag = 1962; reference = 1730; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-491; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 496 tag = 1962; reference = 1731; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-492; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 497 tag = 1962; reference = 1732; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-493; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 498 tag = 1962; reference = 1733; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-494; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 499 tag = 1962; reference = 1734; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-495; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 500 tag = 1962; reference = 1735; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-496; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 501 tag = 1962; reference = 1736; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-497; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 502 tag = 1962; reference = 1737; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-498; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 503 tag = 1962; reference = 1738; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-499; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 504 tag = 1962; reference = 1739; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-500; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 505 tag = 1962; reference = 1740; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-501; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 506 tag = 1962; reference = 1741; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-502; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 507 tag = 1962; reference = 1742; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-503; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 508 tag = 1962; reference = 1743; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-504; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 509 tag = 1962; reference = 1744; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-505; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 510 tag = 1962; reference = 1745; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-506; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 511 tag = 1962; reference = 1746; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-507; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 512 tag = 1962; reference = 1747; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-508; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 513 tag = 1962; reference = 1748; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-509; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 514 tag = 1962; reference = 1749; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-510; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 515 tag = 1962; reference = 1750; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-511; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 516 tag = 1962; reference = 1751; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-512; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 517 tag = 1962; reference = 1752; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-513; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 518 tag = 1962; reference = 1753; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-514; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 519 tag = 1962; reference = 1754; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-515; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 520 tag = 1962; reference = 1755; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-516; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 521 tag = 1962; reference = 1756; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-517; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 522 tag = 1962; reference = 1757; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-518; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 523 tag = 1962; reference = 1758; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-519; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 524 tag = 1962; reference = 1759; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-520; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 525 tag = 1962; reference = 1760; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-521; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 526 tag = 1962; reference = 1761; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-522; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 527 tag = 1962; reference = 1762; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-523; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 528 tag = 1962; reference = 1763; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-524; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 529 tag = 1962; reference = 1764; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-525; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 530 tag = 1962; reference = 1765; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-526; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 531 tag = 1962; reference = 1766; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-527; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 532 tag = 1962; reference = 1767; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-528; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 533 tag = 1962; reference = 1768; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-529; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 534 tag = 1962; reference = 1769; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-530; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 535 tag = 1962; reference = 1770; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-531; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 536 tag = 1962; reference = 1771; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-532; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 537 tag = 1962; reference = 1772; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-533; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 538 tag = 1962; reference = 1773; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-534; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 539 tag = 1962; reference = 1774; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-535; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 540 tag = 1962; reference = 1775; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-536; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 541 tag = 1962; reference = 1776; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-537; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 542 tag = 1962; reference = 1777; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-538; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 543 tag = 1962; reference = 1778; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-539; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 544 tag = 1962; reference = 1779; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-540; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 545 tag = 1962; reference = 1780; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-541; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 546 tag = 1962; reference = 1781; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-542; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 547 tag = 1962; reference = 1782; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-543; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 548 tag = 1962; reference = 1783; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-544; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 549 tag = 1962; reference = 1784; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-545; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 550 tag = 1962; reference = 1785; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-546; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 551 tag = 1962; reference = 1786; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-547; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 552 tag = 1962; reference = 1787; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-548; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 553 tag = 1962; reference = 1788; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-549; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 554 tag = 1962; reference = 1789; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-550; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 555 tag = 1962; reference = 1790; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-551; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 556 tag = 1962; reference = 1791; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-552; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 557 tag = 1962; reference = 1792; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-553; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 558 tag = 1962; reference = 1793; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-554; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 559 tag = 1962; reference = 1794; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-555; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 560 tag = 1962; reference = 1795; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-556; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 561 tag = 1962; reference = 1796; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-557; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 562 tag = 1962; reference = 1797; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-558; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 563 tag = 1962; reference = 1798; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-559; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 564 tag = 1962; reference = 1799; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-560; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 565 tag = 1962; reference = 1800; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-561; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 566 tag = 1962; reference = 1801; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-562; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 567 tag = 1962; reference = 1802; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-563; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 568 tag = 1962; reference = 1803; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-564; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 569 tag = 1962; reference = 1804; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-565; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 570 tag = 1962; reference = 1805; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-566; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 571 tag = 1962; reference = 1806; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-567; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 572 tag = 1962; reference = 1807; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-568; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 573 tag = 1962; reference = 1808; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-569; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 574 tag = 1962; reference = 1809; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-570; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 575 tag = 1962; reference = 1810; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-571; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 576 tag = 1962; reference = 1811; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-572; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 577 tag = 1962; reference = 1812; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-573; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 578 tag = 1962; reference = 1813; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-574; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 579 tag = 1962; reference = 1814; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-575; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 580 tag = 1962; reference = 1815; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-576; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 581 tag = 1962; reference = 1816; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-577; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 582 tag = 1962; reference = 1817; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-578; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 583 tag = 1962; reference = 1818; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-579; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 584 tag = 1962; reference = 1819; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-580; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 585 tag = 1962; reference = 1820; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-581; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 586 tag = 1962; reference = 1821; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-582; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 587 tag = 1962; reference = 1822; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-583; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 588 tag = 1962; reference = 1823; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-584; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 589 tag = 1962; reference = 1824; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-585; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 590 tag = 1962; reference = 1825; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-586; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 591 tag = 1962; reference = 1826; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-587; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 592 tag = 1962; reference = 1827; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-588; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 593 tag = 1962; reference = 1828; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-589; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 594 tag = 1962; reference = 1829; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-590; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 595 tag = 1962; reference = 1830; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-591; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 596 tag = 1962; reference = 1831; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-592; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 597 tag = 1962; reference = 1832; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-593; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 598 tag = 1962; reference = 1833; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-594; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 599 tag = 1962; reference = 1834; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-595; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 600 tag = 1962; reference = 1835; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-596; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 601 tag = 1962; reference = 1836; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-597; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 602 tag = 1962; reference = 1837; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-598; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 603 tag = 1962; reference = 1838; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-599; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 604 tag = 1962; reference = 1839; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-600; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 605 tag = 1962; reference = 1840; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-601; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 606 tag = 1962; reference = 1841; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-602; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 607 tag = 1962; reference = 1842; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-603; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 608 tag = 1962; reference = 1843; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-604; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 609 tag = 1962; reference = 1844; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-605; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 610 tag = 1962; reference = 1845; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-606; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 611 tag = 1962; reference = 1846; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-607; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 612 tag = 1962; reference = 1847; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-608; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 613 tag = 1962; reference = 1848; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-609; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 614 tag = 1962; reference = 1849; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-610; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 615 tag = 1962; reference = 1850; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-611; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 616 tag = 1962; reference = 1851; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-612; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 617 tag = 1962; reference = 1852; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-613; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 618 tag = 1962; reference = 1853; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-614; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 619 tag = 1962; reference = 1854; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-615; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 620 tag = 1962; reference = 1855; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-616; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 621 tag = 1962; reference = 1856; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-617; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 622 tag = 1962; reference = 1857; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-618; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 623 tag = 1962; reference = 1858; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-619; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 624 tag = 1962; reference = 1859; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-620; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 625 tag = 1962; reference = 1860; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-621; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 626 tag = 1962; reference = 1861; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-622; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 627 tag = 1962; reference = 1862; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-623; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 628 tag = 1962; reference = 1863; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-624; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 629 tag = 1962; reference = 1864; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-625; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 630 tag = 1962; reference = 1865; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-626; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 631 tag = 1962; reference = 1866; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-627; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 632 tag = 1962; reference = 1867; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-628; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 633 tag = 1962; reference = 1868; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-629; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 634 tag = 1962; reference = 1869; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-630; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 635 tag = 1962; reference = 1870; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-631; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 636 tag = 1962; reference = 1871; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-632; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 637 tag = 1962; reference = 1872; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-633; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 638 tag = 1962; reference = 1873; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-634; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 639 tag = 1962; reference = 1874; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-635; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 640 tag = 1962; reference = 1875; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-636; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 641 tag = 1962; reference = 1876; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-637; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 642 tag = 1962; reference = 1877; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-638; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 643 tag = 1962; reference = 1878; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-639; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 644 tag = 1962; reference = 1879; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-640; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 645 tag = 1962; reference = 1880; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-641; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 646 tag = 1962; reference = 1881; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-642; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 647 tag = 1962; reference = 1882; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-643; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 648 tag = 1962; reference = 1883; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-644; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 649 tag = 1962; reference = 1884; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-645; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 650 tag = 1962; reference = 1885; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-646; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 651 tag = 1962; reference = 1886; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-647; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 652 tag = 1962; reference = 1887; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-648; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 653 tag = 1962; reference = 1888; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-649; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 654 tag = 1962; reference = 1889; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-650; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 655 tag = 1962; reference = 1890; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-651; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 656 tag = 1962; reference = 1891; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-652; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 657 tag = 1962; reference = 1892; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-653; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 658 tag = 1962; reference = 1893; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-654; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 659 tag = 1962; reference = 1894; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-655; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 660 tag = 1962; reference = 1895; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-656; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 661 tag = 1962; reference = 1896; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-657; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 662 tag = 1962; reference = 1897; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-658; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 663 tag = 1962; reference = 1898; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-659; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 664 tag = 1962; reference = 1899; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-660; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 665 tag = 1962; reference = 1900; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-661; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 666 tag = 1962; reference = 1901; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-662; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 667 tag = 1962; reference = 1902; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-663; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 668 tag = 1962; reference = 1903; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-664; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 669 tag = 1962; reference = 1904; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-665; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 670 tag = 1962; reference = 1905; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-666; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 671 tag = 1962; reference = 1906; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-667; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 672 tag = 1962; reference = 1907; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-668; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 673 tag = 1962; reference = 1908; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-669; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 674 tag = 1962; reference = 1909; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-670; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 675 tag = 1962; reference = 1910; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-671; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 676 tag = 1962; reference = 1911; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-672; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 677 tag = 1962; reference = 1912; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-673; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 678 tag = 1962; reference = 1913; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-674; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 679 tag = 1962; reference = 1914; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-675; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 680 tag = 1962; reference = 1915; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-676; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 681 tag = 1962; reference = 1916; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-677; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 682 tag = 1962; reference = 1917; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-678; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 683 tag = 1962; reference = 1918; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-679; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 684 tag = 1962; reference = 1919; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-680; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 685 tag = 1962; reference = 1920; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-681; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 686 tag = 1962; reference = 1921; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-682; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 687 tag = 1962; reference = 1922; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-683; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 688 tag = 1962; reference = 1923; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-684; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 689 tag = 1962; reference = 1924; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-685; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 690 tag = 1962; reference = 1925; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-686; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 691 tag = 1962; reference = 1926; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-687; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 692 tag = 1962; reference = 1927; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-688; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 693 tag = 1962; reference = 1928; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-689; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 694 tag = 1962; reference = 1929; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-690; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 695 tag = 1962; reference = 1930; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-691; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 696 tag = 1962; reference = 1931; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-692; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 697 tag = 1962; reference = 1932; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-693; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 698 tag = 1962; reference = 1933; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-694; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 699 tag = 1962; reference = 1934; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-695; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 700 tag = 1962; reference = 1935; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-696; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 701 tag = 1962; reference = 1936; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-697; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 702 tag = 1962; reference = 1937; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-698; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 703 tag = 1962; reference = 1938; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-699; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 704 tag = 1962; reference = 1939; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-700; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 705 tag = 1962; reference = 1940; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-701; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 706 tag = 1962; reference = 1941; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-702; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 707 tag = 1962; reference = 1942; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-703; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 708 tag = 1962; reference = 1943; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-704; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 709 tag = 1962; reference = 1944; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-705; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 710 tag = 1962; reference = 1945; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-706; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 711 tag = 1962; reference = 1946; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-707; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 712 tag = 1962; reference = 1947; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-708; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 713 tag = 1962; reference = 1948; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-709; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 714 tag = 1962; reference = 1949; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-710; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 715 tag = 1962; reference = 1950; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-711; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 716 tag = 1962; reference = 1951; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-712; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 717 tag = 1962; reference = 1952; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-713; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 718 tag = 1962; reference = 1953; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-714; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 719 tag = 1962; reference = 1954; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-715; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 720 tag = 1962; reference = 1955; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-716; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 721 tag = 1962; reference = 1956; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-717; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 722 tag = 1962; reference = 1957; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-718; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 723 tag = 1962; reference = 1958; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-719; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 724 tag = 1962; reference = 1959; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-720; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 725 tag = 1962; reference = 1960; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-721; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 726 tag = 1962; reference = 1961; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-722; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 727 tag = 1962; reference = 1962; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-723; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 728 tag = 1962; reference = 1963; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-724; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 729 tag = 1962; reference = 1964; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-725; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 730 tag = 1962; reference = 1965; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-726; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 731 tag = 1962; reference = 1966; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-727; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 732 tag = 1962; reference = 1967; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-728; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 733 tag = 1962; reference = 1968; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-729; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 734 tag = 1962; reference = 1969; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-730; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 735 tag = 1962; reference = 1970; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-731; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 736 tag = 1962; reference = 1971; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-732; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 737 tag = 1962; reference = 1972; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-733; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 738 tag = 1962; reference = 1973; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-734; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 739 tag = 1962; reference = 1974; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-735; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 740 tag = 1962; reference = 1975; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-736; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 741 tag = 1962; reference = 1976; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-737; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 742 tag = 1962; reference = 1977; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-738; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 743 tag = 1962; reference = 1978; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-739; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 744 tag = 1962; reference = 1979; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-740; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 745 tag = 1962; reference = 1980; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-741; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 746 tag = 1962; reference = 1981; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-742; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 747 tag = 1962; reference = 1982; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-743; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 748 tag = 1962; reference = 1983; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-744; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 749 tag = 1962; reference = 1984; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-745; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 750 tag = 1962; reference = 1985; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-746; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 751 tag = 1962; reference = 1986; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-747; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 752 tag = 1962; reference = 1987; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-748; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 753 tag = 1962; reference = 1988; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-749; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 754 tag = 1962; reference = 1989; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-750; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 755 tag = 1962; reference = 1990; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-751; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 756 tag = 1962; reference = 1991; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-752; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 757 tag = 1962; reference = 1992; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-753; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 758 tag = 1962; reference = 1993; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-754; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 759 tag = 1962; reference = 1994; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-755; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 760 tag = 1962; reference = 1995; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-756; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 761 tag = 1962; reference = 1996; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-757; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 762 tag = 1962; reference = 1997; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-758; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 763 tag = 1962; reference = 1998; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-759; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 764 tag = 1962; reference = 1999; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-760; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 765 tag = 1962; reference = 2000; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-761; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 766 tag = 1962; reference = 2001; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-762; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 767 tag = 1962; reference = 2002; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-763; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 768 tag = 1962; reference = 2003; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-764; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 769 tag = 1962; reference = 2004; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-765; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 770 tag = 1962; reference = 2005; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-766; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 771 tag = 1962; reference = 2006; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-767; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 772 tag = 1962; reference = 2007; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-768; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 773 tag = 1962; reference = 2008; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-769; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 774 tag = 1962; reference = 2009; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-770; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 775 tag = 1962; reference = 2010; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-771; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 776 tag = 1962; reference = 2011; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-772; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 777 tag = 1962; reference = 2012; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-773; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 778 tag = 1962; reference = 2013; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-774; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 779 tag = 1962; reference = 2014; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-775; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 780 tag = 1962; reference = 2015; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-776; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 781 tag = 1962; reference = 2016; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-777; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 782 tag = 1962; reference = 2017; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-778; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 783 tag = 1962; reference = 2018; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-779; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 784 tag = 1962; reference = 2019; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-780; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 785 tag = 1962; reference = 2020; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-781; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 786 tag = 1962; reference = 2021; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-782; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 787 tag = 1962; reference = 2022; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-783; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 788 tag = 1962; reference = 2023; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-784; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 789 tag = 1962; reference = 2024; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-785; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 790 tag = 1962; reference = 2025; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-786; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 791 tag = 1962; reference = 2026; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-787; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 792 tag = 1962; reference = 2027; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-788; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 793 tag = 1962; reference = 2028; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-789; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 794 tag = 1962; reference = 2029; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-790; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 795 tag = 1962; reference = 2030; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-791; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 796 tag = 1962; reference = 2031; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-792; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 797 tag = 1962; reference = 2032; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-793; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 798 tag = 1962; reference = 2033; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-794; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 799 tag = 1962; reference = 2034; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-795; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 800 tag = 1962; reference = 2035; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-796; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 801 tag = 1962; reference = 2036; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-797; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 802 tag = 1962; reference = 2037; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-798; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 803 tag = 1962; reference = 2038; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-799; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 804 tag = 1962; reference = 2039; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-800; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 805 tag = 1962; reference = 2040; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-801; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 806 tag = 1962; reference = 2041; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-802; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 807 tag = 1962; reference = 2042; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-803; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 808 tag = 1962; reference = 2043; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-804; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 809 tag = 1962; reference = 2044; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-805; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 810 tag = 1962; reference = 2045; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-806; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 811 tag = 1962; reference = 2046; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-807; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 812 tag = 1962; reference = 2047; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-808; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 813 tag = 1962; reference = 2048; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-809; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 814 tag = 1962; reference = 2049; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-810; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 815 tag = 1962; reference = 2050; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-811; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 816 tag = 1962; reference = 2051; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-812; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 817 tag = 1962; reference = 2052; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-813; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 818 tag = 1962; reference = 2053; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-814; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 819 tag = 1962; reference = 2054; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-815; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 820 tag = 1962; reference = 2055; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-816; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 821 tag = 1962; reference = 2056; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-817; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 822 tag = 1962; reference = 2057; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-818; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 823 tag = 1962; reference = 2058; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-819; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 824 tag = 1962; reference = 2059; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-820; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 825 tag = 1962; reference = 2060; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-821; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 826 tag = 1962; reference = 2061; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-822; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 827 tag = 1962; reference = 2062; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-823; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 828 tag = 1962; reference = 2063; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-824; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 829 tag = 1962; reference = 2064; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-825; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 830 tag = 1962; reference = 2065; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-826; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 831 tag = 1962; reference = 2066; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-827; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 832 tag = 1962; reference = 2067; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-828; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 833 tag = 1962; reference = 2068; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-829; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 834 tag = 1962; reference = 2069; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-830; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 835 tag = 1962; reference = 2070; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-831; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 836 tag = 1962; reference = 2071; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-832; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 837 tag = 1962; reference = 2072; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-833; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 838 tag = 1962; reference = 2073; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-834; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 839 tag = 1962; reference = 2074; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-835; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 840 tag = 1962; reference = 2075; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-836; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 841 tag = 1962; reference = 2076; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-837; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 842 tag = 1962; reference = 2077; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-838; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 843 tag = 1962; reference = 2078; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-839; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 844 tag = 1962; reference = 2079; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-840; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 845 tag = 1962; reference = 2080; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-841; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 846 tag = 1962; reference = 2081; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-842; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 847 tag = 1962; reference = 2082; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-843; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 848 tag = 1962; reference = 2083; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-844; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 849 tag = 1962; reference = 2084; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-845; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 850 tag = 1962; reference = 2085; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-846; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 851 tag = 1962; reference = 2086; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-847; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 852 tag = 1962; reference = 2087; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-848; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 853 tag = 1962; reference = 2088; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-849; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 854 tag = 1962; reference = 2089; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-850; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 855 tag = 1962; reference = 2090; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-851; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 856 tag = 1962; reference = 2091; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-852; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 857 tag = 1962; reference = 2092; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-853; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 858 tag = 1962; reference = 2093; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-854; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 859 tag = 1962; reference = 2094; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-855; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 860 tag = 1962; reference = 2095; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-856; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 861 tag = 1962; reference = 2096; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-857; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 862 tag = 1962; reference = 2097; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-858; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 863 tag = 1962; reference = 2098; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-859; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 864 tag = 1962; reference = 2099; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-860; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 865 tag = 1962; reference = 2100; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-861; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 866 tag = 1962; reference = 2101; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-862; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 867 tag = 1962; reference = 2102; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-863; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 868 tag = 1962; reference = 2103; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-864; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 869 tag = 1962; reference = 2104; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-865; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 870 tag = 1962; reference = 2105; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-866; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 871 tag = 1962; reference = 2106; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-867; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 872 tag = 1962; reference = 2107; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-868; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 873 tag = 1962; reference = 2108; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-869; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 874 tag = 1962; reference = 2109; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-870; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 875 tag = 1962; reference = 2110; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-871; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 876 tag = 1962; reference = 2111; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-872; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 877 tag = 1962; reference = 2112; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-873; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 878 tag = 1962; reference = 2113; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-874; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 879 tag = 1962; reference = 2114; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-875; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 880 tag = 1962; reference = 2115; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-876; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 881 tag = 1962; reference = 2116; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-877; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 882 tag = 1962; reference = 2117; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-878; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 883 tag = 1962; reference = 2118; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-879; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 884 tag = 1962; reference = 2119; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-880; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 885 tag = 1962; reference = 2120; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-881; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 886 tag = 1962; reference = 2121; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-882; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 887 tag = 1962; reference = 2122; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-883; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 888 tag = 1962; reference = 2123; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-884; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 889 tag = 1962; reference = 2124; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-885; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 890 tag = 1962; reference = 2125; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-886; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 891 tag = 1962; reference = 2126; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-887; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 892 tag = 1962; reference = 2127; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-888; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 893 tag = 1962; reference = 2128; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-889; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 894 tag = 1962; reference = 2129; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-890; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 895 tag = 1962; reference = 2130; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-891; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 896 tag = 1962; reference = 2131; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-892; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 897 tag = 1962; reference = 2132; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-893; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 898 tag = 1962; reference = 2133; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-894; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 899 tag = 1962; reference = 2134; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-895; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 900 tag = 1962; reference = 2135; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-896; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 901 tag = 1962; reference = 2136; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-897; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 902 tag = 1962; reference = 2137; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-898; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 903 tag = 1962; reference = 2138; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-899; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 904 tag = 1962; reference = 2139; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-900; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 905 tag = 1962; reference = 2140; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-901; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 906 tag = 1962; reference = 2141; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-902; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 907 tag = 1962; reference = 2142; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-903; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 908 tag = 1962; reference = 2143; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-904; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 909 tag = 1962; reference = 2144; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-905; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 910 tag = 1962; reference = 2145; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-906; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 911 tag = 1962; reference = 2146; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-907; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 912 tag = 1962; reference = 2147; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-908; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 913 tag = 1962; reference = 2148; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-909; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 914 tag = 1962; reference = 2149; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-910; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 915 tag = 1962; reference = 2150; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-911; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 916 tag = 1962; reference = 2151; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-912; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 917 tag = 1962; reference = 2152; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-913; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 918 tag = 1962; reference = 2153; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-914; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 919 tag = 1962; reference = 2154; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-915; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 920 tag = 1962; reference = 2155; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-916; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 921 tag = 1962; reference = 2156; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-917; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 922 tag = 1962; reference = 2157; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-918; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 923 tag = 1962; reference = 2158; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-919; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 924 tag = 1962; reference = 2159; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-920; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 925 tag = 1962; reference = 2160; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-921; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 926 tag = 1962; reference = 2161; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-922; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 927 tag = 1962; reference = 2162; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-923; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 928 tag = 1962; reference = 2163; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-924; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 929 tag = 1962; reference = 2164; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-925; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 930 tag = 1962; reference = 2165; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-926; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 931 tag = 1962; reference = 2166; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-927; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 932 tag = 1962; reference = 2167; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-928; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 933 tag = 1962; reference = 2168; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-929; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 934 tag = 1962; reference = 2169; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-930; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 935 tag = 1962; reference = 2170; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-931; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 936 tag = 1962; reference = 2171; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-932; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 937 tag = 1962; reference = 2172; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-933; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 938 tag = 1962; reference = 2173; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-934; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 939 tag = 1962; reference = 2174; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-935; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 940 tag = 1962; reference = 2175; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-936; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 941 tag = 1962; reference = 2176; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-937; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 942 tag = 1962; reference = 2177; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-938; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 943 tag = 1962; reference = 2178; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-939; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 944 tag = 1962; reference = 2179; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-940; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 945 tag = 1962; reference = 2180; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-941; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 946 tag = 1962; reference = 2181; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-942; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 947 tag = 1962; reference = 2182; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-943; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 948 tag = 1962; reference = 2183; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-944; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 949 tag = 1962; reference = 2184; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-945; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 950 tag = 1962; reference = 2185; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-946; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 951 tag = 1962; reference = 2186; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-947; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 952 tag = 1962; reference = 2187; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-948; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 953 tag = 1962; reference = 2188; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-949; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 954 tag = 1962; reference = 2189; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-950; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 955 tag = 1962; reference = 2190; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-951; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 956 tag = 1962; reference = 2191; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-952; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 957 tag = 1962; reference = 2192; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-953; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 958 tag = 1962; reference = 2193; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-954; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 959 tag = 1962; reference = 2194; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-955; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 960 tag = 1962; reference = 2195; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-956; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 961 tag = 1962; reference = 2196; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-957; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 962 tag = 1962; reference = 2197; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-958; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 963 tag = 1962; reference = 2198; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-959; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 964 tag = 1962; reference = 2199; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-960; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 965 tag = 1962; reference = 2200; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-961; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 966 tag = 1962; reference = 2201; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-962; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 967 tag = 1962; reference = 2202; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-963; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 968 tag = 1962; reference = 2203; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-964; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 969 tag = 1962; reference = 2204; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-965; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 970 tag = 1962; reference = 2205; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-966; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 971 tag = 1962; reference = 2206; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-967; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 972 tag = 1962; reference = 2207; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-968; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 973 tag = 1962; reference = 2208; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-969; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 974 tag = 1962; reference = 2209; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-970; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 975 tag = 1962; reference = 2210; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-971; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 976 tag = 1962; reference = 2211; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-972; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 977 tag = 1962; reference = 2212; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-973; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 978 tag = 1962; reference = 2213; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-974; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 979 tag = 1962; reference = 2214; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-975; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 980 tag = 1962; reference = 2215; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-976; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 981 tag = 1962; reference = 2216; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-977; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 982 tag = 1962; reference = 2217; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-978; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 983 tag = 1962; reference = 2218; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-979; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 984 tag = 1962; reference = 2219; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-980; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 985 tag = 1962; reference = 2220; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-981; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 986 tag = 1962; reference = 2221; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-982; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 987 tag = 1962; reference = 2222; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-983; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 988 tag = 1962; reference = 2223; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-984; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 989 tag = 1962; reference = 2224; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-985; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 990 tag = 1962; reference = 2225; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-986; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 991 tag = 1962; reference = 2226; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-987; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 992 tag = 1962; reference = 2227; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-988; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 993 tag = 1962; reference = 2228; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-989; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 994 tag = 1962; reference = 2229; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-990; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 995 tag = 1962; reference = 2230; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-991; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 996 tag = 1962; reference = 2231; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-992; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 997 tag = 1962; reference = 2232; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-993; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 998 tag = 1962; reference = 2233; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-994; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 999 tag = 1962; reference = 2234; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-995; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 1000 tag = 1962; reference = 2235; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-996; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 1001 tag = 1962; reference = 2236; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-997; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 1002 tag = 1962; reference = 2237; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-998; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 1003 tag = 1962; reference = 2238; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-999; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-10.out000066400000000000000000000144261503061704500216660ustar00rootroot00000000000000File name: tvattr.hdf Vdata: 0 tag = 1962; reference = 4; number of records = 3; interlace = FULL_INTERLACE (0); fields = [fldname1, fldname2]; record size (in bytes) = 2; name = vsname1; class = ; number of attributes = 2 attr0: name=attname3 type=4 count=3 size=3 m N p attr1: name=attname4 type=5 count=1 size=4 32.000999 - field index 0: [fldname1], type=4, order=1 number of attributes = 3 attr0: name=attname4 type=5 count=1 size=4 32.000999 attr1: name=attname5 type=6 count=1 size=8 -64.123450 attr2: name=vsname1 type=6 count=1 size=8 64.123450 - field index 1: [fldname2], type=4, order=1 number of attributes = 1 attr0: name=attname5 type=5 count=1 size=4 32.000999 Loc. Data 0 A B ; C D ; E F ; Vdata: 1 tag = 1962; reference = 5; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 8; name = attname1; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=25, order=2 number of attributes = 0 Loc. Data 0 10032 10064 ; Vdata: 2 tag = 1962; reference = 6; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname2; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=23, order=2 number of attributes = 0 Loc. Data 0 16 32 ; Vdata: 3 tag = 1962; reference = 7; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 3; name = attname3; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=4, order=3 number of attributes = 0 Loc. Data 0 m N p ; Vdata: 4 tag = 1962; reference = 8; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname4; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 32.000999 ; Vdata: 5 tag = 1962; reference = 9; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname5; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 32.000999 ; Vdata: 6 tag = 1962; reference = 10; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname4; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 32.000999 ; Vdata: 7 tag = 1962; reference = 11; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 8; name = attname5; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=6, order=1 number of attributes = 0 Loc. Data 0 -64.123450 ; Vdata: 8 tag = 1962; reference = 12; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 8; name = vsname1; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=6, order=1 number of attributes = 0 Loc. Data 0 64.123450 ; Vdata: 9 tag = 1962; reference = 13; number of records = 3; interlace = FULL_INTERLACE (0); fields = [fldname0, fldname1]; record size (in bytes) = 8; name = vsname0; class = vsclass0; number of attributes = 1 attr0: name=attname7 type=4 count=3 size=3 m N p - field index 0: [fldname0], type=24, order=1 number of attributes = 3 attr0: name=attname6 type=5 count=1 size=4 32.000999 attr1: name=attname8 type=5 count=1 size=4 32.000999 attr2: name=attname9 type=4 count=5 size=5 m N p S t - field index 1: [fldname1], type=24, order=1 number of attributes = 1 attr0: name=attname8 type=5 count=1 size=4 -34.001999 Loc. Data 0 0 -1 ; 10 11 ; 20 21 ; Vdata: 10 tag = 1962; reference = 14; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname6; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 32.000999 ; Vdata: 11 tag = 1962; reference = 15; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 3; name = attname7; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=4, order=3 number of attributes = 0 Loc. Data 0 m N p ; Vdata: 12 tag = 1962; reference = 16; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname8; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 32.000999 ; Vdata: 13 tag = 1962; reference = 17; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname8; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=5, order=1 number of attributes = 0 Loc. Data 0 -34.001999 ; Vdata: 14 tag = 1962; reference = 18; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 5; name = attname9; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=4, order=5 number of attributes = 0 Loc. Data 0 m N p S t ; Vdata: 15 tag = 1962; reference = 20; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname9; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=25, order=1 number of attributes = 0 Loc. Data 0 100 ; Vdata: 16 tag = 1962; reference = 21; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 4; name = attname10; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=23, order=2 number of attributes = 0 Loc. Data 0 16 32 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-11.out000066400000000000000000000004311503061704500216560ustar00rootroot00000000000000File name: sds1_dim1_samename.hdf Vdata: 2 tag = 1962; reference = 7; number of records = 0; interlace = FULL_INTERLACE (0); fields = [SDS variable]; record size (in bytes) = 4; name = ; class = SDSVar; number of attributes = 0 No data written hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-12.out000066400000000000000000000004431503061704500216620ustar00rootroot00000000000000File name: sds1_dim1_samename.hdf Vdata: 4 tag = 1962; reference = 11; number of records = 0; interlace = FULL_INTERLACE (0); fields = [Coordinate variable]; record size (in bytes) = 4; name = ; class = CoordVar; number of attributes = 0 No data written hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-13.out000066400000000000000000000013301503061704500216570ustar00rootroot00000000000000File name: vslongname.hdf Vdata: 0 tag = 1962; reference = 2; number of records = 0; interlace = FULL_INTERLACE (0); fields = [field 1]; record size (in bytes) = 4; name = Vdata 1 91123456789212345678931234567894123456789512345678961234; class = Long Name Vdatas789212345678931234567894123456789512345678961234; number of attributes = 0 No data written Vdata: 1 tag = 1962; reference = 3; number of records = 0; interlace = FULL_INTERLACE (0); fields = [field 1]; record size (in bytes) = 4; name = Vdata 2 91123456789212345678931234567894123456789512345678961234; class = Long Name Vdatas789212345678931234567894123456789512345678961234; number of attributes = 0 No data written hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-14.out000066400000000000000000000032251503061704500216650ustar00rootroot00000000000000File name: Tables.hdf Vdata: 0 tag = 1962; reference = 2; number of records = 5; interlace = FULL_INTERLACE (0); fields = [Column A, Column B, Column C, Column D]; record size (in bytes) = 13; name = Table AR with Attributes in External File; class = Multi-Type, Multi-Entries per Cell, Store By Row in External Fil; number of attributes = 1 attr0: name=HDF4 Attribute Table Eight type=4 count=2 size=2 h i - field index 0: [Column A], type=4, order=2 number of attributes = 0 - field index 1: [Column B], type=23, order=1 number of attributes = 0 - field index 2: [Column C], type=16389, order=2 number of attributes = 1 attr0: name=HDF4 Attribute Column C type=4 count=3 size=3 b y e - field index 3: [Column D], type=4, order=1 number of attributes = 0 Loc. Data 0 A B 1 0.010000 0.100000 a ; B C 2 0.020000 0.200000 b ; 2 C D 3 0.030000 0.300000 c ; D E 4 0.040000 0.400000 d ; 4 E F 5 0.050000 0.500000 e ; Vdata: 1 tag = 1962; reference = 3; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 2; name = HDF4 Attribute Table Eight; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=4, order=2 number of attributes = 0 Loc. Data 0 h i ; Vdata: 2 tag = 1962; reference = 4; number of records = 1; interlace = FULL_INTERLACE (0); fields = [VALUES]; record size (in bytes) = 3; name = HDF4 Attribute Column C; class = Attr0.0; number of attributes = 0 - field index 0: [VALUES], type=4, order=3 number of attributes = 0 Loc. Data 0 b y e ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-2.out000066400000000000000000000052761503061704500216120ustar00rootroot00000000000000File name: tvset.hdf Vdata: 1 tag = 1962; reference = 1236; number of records = 100; interlace = FULL_INTERLACE (0); fields = [DIFFERENT_FIELD_NAME]; record size (in bytes) = 8; name = Integer Vdata; class = Test object; number of attributes = 0 - field index 0: [DIFFERENT_FIELD_NAME], type=24, order=2 number of attributes = 0 Loc. Data 00 0 1 ; 2 3 ; 4 5 ; 6 7 ; 04 8 9 ; 10 11 ; 12 13 ; 14 15 ; 08 16 17 ; 18 19 ; 20 21 ; 22 23 ; 12 24 25 ; 26 27 ; 28 29 ; 30 31 ; 16 32 33 ; 34 35 ; 36 37 ; 38 39 ; 20 40 41 ; 42 43 ; 44 45 ; 46 47 ; 24 48 49 ; 50 51 ; 52 53 ; 54 55 ; 28 56 57 ; 58 59 ; 60 61 ; 62 63 ; 32 64 65 ; 66 67 ; 68 69 ; 70 71 ; 36 72 73 ; 74 75 ; 76 77 ; 78 79 ; 40 80 81 ; 82 83 ; 84 85 ; 86 87 ; 44 88 89 ; 90 91 ; 92 93 ; 94 95 ; 48 96 97 ; 98 99 ; 100 101 ; 102 103 ; 52 104 105 ; 106 107 ; 108 109 ; 110 111 ; 56 112 113 ; 114 115 ; 116 117 ; 118 119 ; 60 120 121 ; 122 123 ; 124 125 ; 126 127 ; 64 128 129 ; 130 131 ; 132 133 ; 134 135 ; 68 136 137 ; 138 139 ; 140 141 ; 142 143 ; 72 144 145 ; 146 147 ; 148 149 ; 150 151 ; 76 152 153 ; 154 155 ; 156 157 ; 158 159 ; 80 160 161 ; 162 163 ; 164 165 ; 166 167 ; 84 168 169 ; 170 171 ; 172 173 ; 174 175 ; 88 176 177 ; 178 179 ; 180 181 ; 182 183 ; 92 184 185 ; 186 187 ; 188 189 ; 190 191 ; 96 192 193 ; 194 195 ; 196 197 ; 198 199 ; Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 - field index 1: [VALUES], type=24, order=3 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 0 1 2 15.500000 ; c d 3 4 5 16.000000 ; 2 e f 6 7 8 16.500000 ; g h 9 10 11 17.000000 ; 4 i j 12 13 14 17.500000 ; k l 15 16 17 18.000000 ; 6 m n 18 19 20 18.500000 ; o p 21 22 23 19.000000 ; 8 q r 24 25 26 19.500000 ; s t 27 28 29 20.000000 ; Vdata: 5 tag = 1962; reference = 1240; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-1; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-3.out000066400000000000000000000034131503061704500216020ustar00rootroot00000000000000File name: tvset.hdf Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 - field index 1: [VALUES], type=24, order=3 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 0 1 2 15.500000 ; c d 3 4 5 16.000000 ; 2 e f 6 7 8 16.500000 ; g h 9 10 11 17.000000 ; 4 i j 12 13 14 17.500000 ; k l 15 16 17 18.000000 ; 6 m n 18 19 20 18.500000 ; o p 21 22 23 19.000000 ; 8 q r 24 25 26 19.500000 ; s t 27 28 29 20.000000 ; Vdata: 4 tag = 1962; reference = 1239; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-0; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 16 tag = 1962; reference = 1251; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-12; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; Vdata: 17 tag = 1962; reference = 1252; number of records = 1; interlace = FULL_INTERLACE (0); fields = [A]; record size (in bytes) = 1; name = VdataLoop-13; class = ; number of attributes = 0 - field index 0: [A], type=4, order=1 number of attributes = 0 Loc. Data 0 V ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-4.out000066400000000000000000000015151503061704500216040ustar00rootroot00000000000000File name: tvset.hdf Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 - field index 1: [VALUES], type=24, order=3 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 0 1 2 15.500000 ; c d 3 4 5 16.000000 ; 2 e f 6 7 8 16.500000 ; g h 9 10 11 17.000000 ; 4 i j 12 13 14 17.500000 ; k l 15 16 17 18.000000 ; 6 m n 18 19 20 18.500000 ; o p 21 22 23 19.000000 ; 8 q r 24 25 26 19.500000 ; s t 27 28 29 20.000000 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-5.out000066400000000000000000000077441503061704500216170ustar00rootroot00000000000000File name: tvset.hdf Vdata: 1 tag = 1962; reference = 1236; number of records = 100; interlace = FULL_INTERLACE (0); fields = [DIFFERENT_FIELD_NAME]; record size (in bytes) = 8; name = Integer Vdata; class = Test object; number of attributes = 0 - field index 0: [DIFFERENT_FIELD_NAME], type=24, order=2 number of attributes = 0 Loc. Data 00 0 1 ; 2 3 ; 4 5 ; 6 7 ; 04 8 9 ; 10 11 ; 12 13 ; 14 15 ; 08 16 17 ; 18 19 ; 20 21 ; 22 23 ; 12 24 25 ; 26 27 ; 28 29 ; 30 31 ; 16 32 33 ; 34 35 ; 36 37 ; 38 39 ; 20 40 41 ; 42 43 ; 44 45 ; 46 47 ; 24 48 49 ; 50 51 ; 52 53 ; 54 55 ; 28 56 57 ; 58 59 ; 60 61 ; 62 63 ; 32 64 65 ; 66 67 ; 68 69 ; 70 71 ; 36 72 73 ; 74 75 ; 76 77 ; 78 79 ; 40 80 81 ; 82 83 ; 84 85 ; 86 87 ; 44 88 89 ; 90 91 ; 92 93 ; 94 95 ; 48 96 97 ; 98 99 ; 100 101 ; 102 103 ; 52 104 105 ; 106 107 ; 108 109 ; 110 111 ; 56 112 113 ; 114 115 ; 116 117 ; 118 119 ; 60 120 121 ; 122 123 ; 124 125 ; 126 127 ; 64 128 129 ; 130 131 ; 132 133 ; 134 135 ; 68 136 137 ; 138 139 ; 140 141 ; 142 143 ; 72 144 145 ; 146 147 ; 148 149 ; 150 151 ; 76 152 153 ; 154 155 ; 156 157 ; 158 159 ; 80 160 161 ; 162 163 ; 164 165 ; 166 167 ; 84 168 169 ; 170 171 ; 172 173 ; 174 175 ; 88 176 177 ; 178 179 ; 180 181 ; 182 183 ; 92 184 185 ; 186 187 ; 188 189 ; 190 191 ; 96 192 193 ; 194 195 ; 196 197 ; 198 199 ; Vdata: 2 tag = 1962; reference = 1237; number of records = 100; interlace = FULL_INTERLACE (0); fields = [A, B]; record size (in bytes) = 8; name = Mixed Vdata; class = No class specified; number of attributes = 0 - field index 0: [A], type=5, order=1 number of attributes = 0 - field index 1: [B], type=24, order=1 number of attributes = 0 Loc. Data 00 0.000000 0 ; 2.000000 1 ; 4.000000 2 ; 03 6.000000 3 ; 8.000000 4 ; 10.000000 5 ; 06 12.000000 6 ; 14.000000 7 ; 16.000000 8 ; 09 18.000000 9 ; 20.000000 10 ; 22.000000 11 ; 12 24.000000 12 ; 26.000000 13 ; 28.000000 14 ; 15 30.000000 15 ; 32.000000 16 ; 34.000000 17 ; 18 36.000000 18 ; 38.000000 19 ; 40.000000 20 ; 21 42.000000 21 ; 44.000000 22 ; 46.000000 23 ; 24 48.000000 24 ; 50.000000 25 ; 52.000000 26 ; 27 54.000000 27 ; 56.000000 28 ; 58.000000 29 ; 30 60.000000 30 ; 62.000000 31 ; 64.000000 32 ; 33 66.000000 33 ; 68.000000 34 ; 70.000000 35 ; 36 72.000000 36 ; 74.000000 37 ; 76.000000 38 ; 39 78.000000 39 ; 80.000000 40 ; 82.000000 41 ; 42 84.000000 42 ; 86.000000 43 ; 88.000000 44 ; 45 90.000000 45 ; 92.000000 46 ; 94.000000 47 ; 48 96.000000 48 ; 98.000000 49 ; 100.000000 50 ; 51 102.000000 51 ; 104.000000 52 ; 106.000000 53 ; 54 108.000000 54 ; 110.000000 55 ; 112.000000 56 ; 57 114.000000 57 ; 116.000000 58 ; 118.000000 59 ; 60 120.000000 60 ; 122.000000 61 ; 124.000000 62 ; 63 126.000000 63 ; 128.000000 64 ; 130.000000 65 ; 66 132.000000 66 ; 134.000000 67 ; 136.000000 68 ; 69 138.000000 69 ; 140.000000 70 ; 142.000000 71 ; 72 144.000000 72 ; 146.000000 73 ; 148.000000 74 ; 75 150.000000 75 ; 152.000000 76 ; 154.000000 77 ; 78 156.000000 78 ; 158.000000 79 ; 160.000000 80 ; 81 162.000000 81 ; 164.000000 82 ; 166.000000 83 ; 84 168.000000 84 ; 170.000000 85 ; 172.000000 86 ; 87 174.000000 87 ; 176.000000 88 ; 178.000000 89 ; 90 180.000000 90 ; 182.000000 91 ; 184.000000 92 ; 93 186.000000 93 ; 188.000000 94 ; 190.000000 95 ; 96 192.000000 96 ; 194.000000 97 ; 196.000000 98 ; 99 198.000000 99 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-6.out000066400000000000000000000151541503061704500216120ustar00rootroot00000000000000File name: tvset.hdf Vdata: 0 tag = 1962; reference = 1235; number of records = 100; interlace = FULL_INTERLACE (0); fields = [FIELD_name_HERE]; record size (in bytes) = 4; name = Float Vdata; class = Test object; number of attributes = 0 - field index 0: [FIELD_name_HERE], type=5, order=1 number of attributes = 0 Loc. Data 00 0.000000 ; 1.000000 ; 2.000000 ; 3.000000 ; 04 4.000000 ; 5.000000 ; 6.000000 ; 7.000000 ; 08 8.000000 ; 9.000000 ; 10.000000 ; 11.000000 ; 12 12.000000 ; 13.000000 ; 14.000000 ; 15.000000 ; 16 16.000000 ; 17.000000 ; 18.000000 ; 19.000000 ; 20 20.000000 ; 21.000000 ; 22.000000 ; 23.000000 ; 24 24.000000 ; 25.000000 ; 26.000000 ; 27.000000 ; 28 28.000000 ; 29.000000 ; 30.000000 ; 31.000000 ; 32 32.000000 ; 33.000000 ; 34.000000 ; 35.000000 ; 36 36.000000 ; 37.000000 ; 38.000000 ; 39.000000 ; 40 40.000000 ; 41.000000 ; 42.000000 ; 43.000000 ; 44 44.000000 ; 45.000000 ; 46.000000 ; 47.000000 ; 48 48.000000 ; 49.000000 ; 50.000000 ; 51.000000 ; 52 52.000000 ; 53.000000 ; 54.000000 ; 55.000000 ; 56 56.000000 ; 57.000000 ; 58.000000 ; 59.000000 ; 60 60.000000 ; 61.000000 ; 62.000000 ; 63.000000 ; 64 64.000000 ; 65.000000 ; 66.000000 ; 67.000000 ; 68 68.000000 ; 69.000000 ; 70.000000 ; 71.000000 ; 72 72.000000 ; 73.000000 ; 74.000000 ; 75.000000 ; 76 76.000000 ; 77.000000 ; 78.000000 ; 79.000000 ; 80 80.000000 ; 81.000000 ; 82.000000 ; 83.000000 ; 84 84.000000 ; 85.000000 ; 86.000000 ; 87.000000 ; 88 88.000000 ; 89.000000 ; 90.000000 ; 91.000000 ; 92 92.000000 ; 93.000000 ; 94.000000 ; 95.000000 ; 96 96.000000 ; 97.000000 ; 98.000000 ; 99.000000 ; Vdata: 1 tag = 1962; reference = 1236; number of records = 100; interlace = FULL_INTERLACE (0); fields = [DIFFERENT_FIELD_NAME]; record size (in bytes) = 8; name = Integer Vdata; class = Test object; number of attributes = 0 - field index 0: [DIFFERENT_FIELD_NAME], type=24, order=2 number of attributes = 0 Loc. Data 00 0 1 ; 2 3 ; 4 5 ; 6 7 ; 04 8 9 ; 10 11 ; 12 13 ; 14 15 ; 08 16 17 ; 18 19 ; 20 21 ; 22 23 ; 12 24 25 ; 26 27 ; 28 29 ; 30 31 ; 16 32 33 ; 34 35 ; 36 37 ; 38 39 ; 20 40 41 ; 42 43 ; 44 45 ; 46 47 ; 24 48 49 ; 50 51 ; 52 53 ; 54 55 ; 28 56 57 ; 58 59 ; 60 61 ; 62 63 ; 32 64 65 ; 66 67 ; 68 69 ; 70 71 ; 36 72 73 ; 74 75 ; 76 77 ; 78 79 ; 40 80 81 ; 82 83 ; 84 85 ; 86 87 ; 44 88 89 ; 90 91 ; 92 93 ; 94 95 ; 48 96 97 ; 98 99 ; 100 101 ; 102 103 ; 52 104 105 ; 106 107 ; 108 109 ; 110 111 ; 56 112 113 ; 114 115 ; 116 117 ; 118 119 ; 60 120 121 ; 122 123 ; 124 125 ; 126 127 ; 64 128 129 ; 130 131 ; 132 133 ; 134 135 ; 68 136 137 ; 138 139 ; 140 141 ; 142 143 ; 72 144 145 ; 146 147 ; 148 149 ; 150 151 ; 76 152 153 ; 154 155 ; 156 157 ; 158 159 ; 80 160 161 ; 162 163 ; 164 165 ; 166 167 ; 84 168 169 ; 170 171 ; 172 173 ; 174 175 ; 88 176 177 ; 178 179 ; 180 181 ; 182 183 ; 92 184 185 ; 186 187 ; 188 189 ; 190 191 ; 96 192 193 ; 194 195 ; 196 197 ; 198 199 ; Vdata: 2 tag = 1962; reference = 1237; number of records = 100; interlace = FULL_INTERLACE (0); fields = [A, B]; record size (in bytes) = 8; name = Mixed Vdata; class = No class specified; number of attributes = 0 - field index 0: [A], type=5, order=1 number of attributes = 0 - field index 1: [B], type=24, order=1 number of attributes = 0 Loc. Data 00 0.000000 0 ; 2.000000 1 ; 4.000000 2 ; 03 6.000000 3 ; 8.000000 4 ; 10.000000 5 ; 06 12.000000 6 ; 14.000000 7 ; 16.000000 8 ; 09 18.000000 9 ; 20.000000 10 ; 22.000000 11 ; 12 24.000000 12 ; 26.000000 13 ; 28.000000 14 ; 15 30.000000 15 ; 32.000000 16 ; 34.000000 17 ; 18 36.000000 18 ; 38.000000 19 ; 40.000000 20 ; 21 42.000000 21 ; 44.000000 22 ; 46.000000 23 ; 24 48.000000 24 ; 50.000000 25 ; 52.000000 26 ; 27 54.000000 27 ; 56.000000 28 ; 58.000000 29 ; 30 60.000000 30 ; 62.000000 31 ; 64.000000 32 ; 33 66.000000 33 ; 68.000000 34 ; 70.000000 35 ; 36 72.000000 36 ; 74.000000 37 ; 76.000000 38 ; 39 78.000000 39 ; 80.000000 40 ; 82.000000 41 ; 42 84.000000 42 ; 86.000000 43 ; 88.000000 44 ; 45 90.000000 45 ; 92.000000 46 ; 94.000000 47 ; 48 96.000000 48 ; 98.000000 49 ; 100.000000 50 ; 51 102.000000 51 ; 104.000000 52 ; 106.000000 53 ; 54 108.000000 54 ; 110.000000 55 ; 112.000000 56 ; 57 114.000000 57 ; 116.000000 58 ; 118.000000 59 ; 60 120.000000 60 ; 122.000000 61 ; 124.000000 62 ; 63 126.000000 63 ; 128.000000 64 ; 130.000000 65 ; 66 132.000000 66 ; 134.000000 67 ; 136.000000 68 ; 69 138.000000 69 ; 140.000000 70 ; 142.000000 71 ; 72 144.000000 72 ; 146.000000 73 ; 148.000000 74 ; 75 150.000000 75 ; 152.000000 76 ; 154.000000 77 ; 78 156.000000 78 ; 158.000000 79 ; 160.000000 80 ; 81 162.000000 81 ; 164.000000 82 ; 166.000000 83 ; 84 168.000000 84 ; 170.000000 85 ; 172.000000 86 ; 87 174.000000 87 ; 176.000000 88 ; 178.000000 89 ; 90 180.000000 90 ; 182.000000 91 ; 184.000000 92 ; 93 186.000000 93 ; 188.000000 94 ; 190.000000 95 ; 96 192.000000 96 ; 194.000000 97 ; 196.000000 98 ; 99 198.000000 99 ; Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 - field index 1: [VALUES], type=24, order=3 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 0 1 2 15.500000 ; c d 3 4 5 16.000000 ; 2 e f 6 7 8 16.500000 ; g h 9 10 11 17.000000 ; 4 i j 12 13 14 17.500000 ; k l 15 16 17 18.000000 ; 6 m n 18 19 20 18.500000 ; o p 21 22 23 19.000000 ; 8 q r 24 25 26 19.500000 ; s t 27 28 29 20.000000 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-7.out000066400000000000000000000022711503061704500216070ustar00rootroot00000000000000File name: tvset.hdf Vdata: 2 tag = 1962; reference = 1237; number of records = 100; interlace = FULL_INTERLACE (0); fields = [A, B]; record size (in bytes) = 8; name = Mixed Vdata; class = No class specified; number of attributes = 0 number of attributes = 0 - field index 1: [B], type=24, order=1 number of attributes = 0 Loc. Data 00 0 ; 1 ; 2 ; 3 ; 04 4 ; 5 ; 6 ; 7 ; 08 8 ; 9 ; 10 ; 11 ; 12 12 ; 13 ; 14 ; 15 ; 16 16 ; 17 ; 18 ; 19 ; 20 20 ; 21 ; 22 ; 23 ; 24 24 ; 25 ; 26 ; 27 ; 28 28 ; 29 ; 30 ; 31 ; 32 32 ; 33 ; 34 ; 35 ; 36 36 ; 37 ; 38 ; 39 ; 40 40 ; 41 ; 42 ; 43 ; 44 44 ; 45 ; 46 ; 47 ; 48 48 ; 49 ; 50 ; 51 ; 52 52 ; 53 ; 54 ; 55 ; 56 56 ; 57 ; 58 ; 59 ; 60 60 ; 61 ; 62 ; 63 ; 64 64 ; 65 ; 66 ; 67 ; 68 68 ; 69 ; 70 ; 71 ; 72 72 ; 73 ; 74 ; 75 ; 76 76 ; 77 ; 78 ; 79 ; 80 80 ; 81 ; 82 ; 83 ; 84 84 ; 85 ; 86 ; 87 ; 88 88 ; 89 ; 90 ; 91 ; 92 92 ; 93 ; 94 ; 95 ; 96 96 ; 97 ; 98 ; 99 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-8.out000066400000000000000000000012741503061704500216120ustar00rootroot00000000000000File name: tvset.hdf Vdata: 3 tag = 1962; reference = 1238; number of records = 10; interlace = FULL_INTERLACE (0); fields = [STATION_NAME, VALUES, FLOATS]; record size (in bytes) = 18; name = Multi-Order Vdata; class = No class specified; number of attributes = 0 - field index 0: [STATION_NAME], type=4, order=2 number of attributes = 0 number of attributes = 0 - field index 2: [FLOATS], type=5, order=1 number of attributes = 0 Loc. Data 0 a b 15.500000 ; c d 16.000000 ; e f 16.500000 ; 3 g h 17.000000 ; i j 17.500000 ; k l 18.000000 ; 6 m n 18.500000 ; o p 19.000000 ; q r 19.500000 ; 9 s t 20.000000 ; hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvd-9.out000066400000000000000000000002661503061704500216130ustar00rootroot00000000000000a b 15.500000 c d 16.000000 e f 16.500000 g h 17.000000 i j 17.500000 k l 18.000000 m n 18.500000 o p 19.000000 q r 19.500000 s t 20.000000 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-1.out000066400000000000000000000013351503061704500216040ustar00rootroot00000000000000File name: tvset.hdf Vgroup:0 tag = 1965; reference = 2; name = Simple Vgroup; class = Test object; number of entries = 0; number of attributes = 0 Entries:- None. Vgroup:1 tag = 1965; reference = 3; name = Second Vgroup; class = Test object; number of entries = 3; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 0; name = Simple Vgroup; class = Test object number of attributes = 0 #1 (Unknown Tag) tag = 1000; reference = 12345; #2 (Unknown Tag) tag = 123; reference = 1234; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 -- vg0 -- Unknown Object -- Unknown Object hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-10.out000066400000000000000000000023101503061704500216560ustar00rootroot00000000000000File name: tdata.hdf Vgroup:0 tag = 1965; reference = 28; name = nsamp; class = Dim0.0; number of entries = 1; number of attributes = 0 Vgroup:1 tag = 1965; reference = 30; name = bands; class = Dim0.0; number of entries = 1; number of attributes = 0 Vgroup:3 tag = 1965; reference = 34; name = a; class = Var0.0; number of entries = 7; number of attributes = 0 Vgroup:4 tag = 1965; reference = 36; name = b; class = Var0.0; number of entries = 6; number of attributes = 0 Vgroup:5 tag = 1965; reference = 38; name = c; class = Var0.0; number of entries = 5; number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-11.out000066400000000000000000000023531503061704500216660ustar00rootroot00000000000000File name: tvattr.hdf Vgroup:0 tag = 1965; reference = 2; name = vgname0; class = ; number of entries = 0; number of attributes = 2 attr0: name=attname1 type=25 count=2 size=8 10032 10064 attr1: name=attname2 type=23 count=2 size=4 16 32 Entries:- None. Vgroup:1 tag = 1965; reference = 3; name = vgname1; class = ; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 4; number of records = 3; interlace = 0; fields = [fldname1, fldname2]; record size (in bytes) = 2; name = vsname1; class = ; total number of attributes = 6. Vgroup:2 tag = 1965; reference = 19; name = vgname2; class = vgclass2; number of entries = 1; number of attributes = 2 attr0: name=attname9 type=25 count=1 size=4 100 attr1: name=attname10 type=23 count=2 size=4 16 32 Entries:- #0 (Vdata) tag = 1962; reference = 13; number of records = 3; interlace = 0; fields = [fldname0, fldname1]; record size (in bytes) = 8; name = vsname0; class = vsclass0; total number of attributes = 5. Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 -- vd vg2 -- vd hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-12.out000066400000000000000000000041011503061704500216600ustar00rootroot00000000000000File name: VGlongname.hdf Vgroup:0 tag = 1965; reference = 3; name = SD Vgroup - this vgroup has an sds as a member and it is actually meant to test long vgroup name; class = Common Vgroups; number of entries = 1; number of attributes = 0 Entries:- #0 (Numeric Data Group) tag = 720; reference = 2; Vgroup:1 tag = 1965; reference = 5; name = fakeDim0; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 4; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = fakeDim0; class = DimVal0.1; total number of attributes = 0. Vgroup:2 tag = 1965; reference = 7; name = SDS belongs to VG_LONGNAME, which has a very long name that is used to test the new feature of variable length vgroup name; class = Var0.0; number of entries = 4; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = fakeDim0; class = Dim0.0 number of attributes = 0 #1 (Number type) tag = 106; reference = 6; #2 (SciData dimension record) tag = 701; reference = 6; #3 (Numeric Data Group) tag = 720; reference = 2; Vgroup:3 tag = 1965; reference = 8; name = VGlongname.hdf; class = CDF0.0; number of entries = 2; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = fakeDim0; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 7; number of entries = 4; name = SDS belongs to VG_LONGNAME, which has a very long name that is used to test the new feature of variable length vgroup name; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Numeric Data Group vg1 -- vd vg2 -- vg1 -- vd -- Number type -- SciData dimension record -- Numeric Data Group vg3 -- vg1 -- vd -- vg2 -- vg1 -- vd -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-13.out000066400000000000000000000006551503061704500216730ustar00rootroot00000000000000File name: VGlongname.hdf Vgroup:0 tag = 1965; reference = 3; name = SD Vgroup - this vgroup has an sds as a member and it is actually meant to test long vgroup name; class = Common Vgroups; number of entries = 1; number of attributes = 0 Entries:- #0 (Numeric Data Group) tag = 720; reference = 2; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-14.out000066400000000000000000000066541503061704500217010ustar00rootroot00000000000000File name: sds1_dim1_samename.hdf Vgroup:0 tag = 1965; reference = 5; name = Variable 1; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 4; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = Variable 1; class = DimVal0.1; total number of attributes = 0. Vgroup:1 tag = 1965; reference = 9; name = Variable 1; class = Var0.0; number of entries = 6; number of attributes = 1 attr0: name=Attribute SDS 1 type=4 count=23 size=23 T h i s i s n o t a c o o r d v a r Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = Variable 1; class = Dim0.0 number of attributes = 0 #1 (Vdata) tag = 1962; reference = 6; number of records = 1; interlace = 0; fields = [VALUES]; record size (in bytes) = 23; name = Attribute SDS 1; class = Attr0.0; total number of attributes = 0. #2 (Vdata) tag = 1962; reference = 7; number of records = 0; interlace = 0; fields = [SDS variable]; record size (in bytes) = 4; name = ; class = SDSVar; total number of attributes = 0. #3 (Number type) tag = 106; reference = 8; #4 (SciData dimension record) tag = 701; reference = 8; #5 (Numeric Data Group) tag = 720; reference = 2; Vgroup:2 tag = 1965; reference = 13; name = Variable 1; class = Var0.0; number of entries = 6; number of attributes = 1 attr0: name=Attribute Dimension 1 type=4 count=19 size=19 T h i s i s a c o o r d v a r Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = Variable 1; class = Dim0.0 number of attributes = 0 #1 (Vdata) tag = 1962; reference = 10; number of records = 1; interlace = 0; fields = [VALUES]; record size (in bytes) = 19; name = Attribute Dimension 1; class = Attr0.0; total number of attributes = 0. #2 (Vdata) tag = 1962; reference = 11; number of records = 0; interlace = 0; fields = [Coordinate variable]; record size (in bytes) = 4; name = ; class = CoordVar; total number of attributes = 0. #3 (Number type) tag = 106; reference = 12; #4 (SciData dimension record) tag = 701; reference = 12; #5 (Numeric Data Group) tag = 720; reference = 3; Vgroup:3 tag = 1965; reference = 14; name = sds1_dim1_samename.hdf; class = CDF0.0; number of entries = 3; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 5; number of entries = 1; name = Variable 1; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 9; number of entries = 6; name = Variable 1; class = Var0.0 number of attributes = 1 attr0: name=Attribute SDS 1 type=4 count=23 size=23 T h i s i s n o t a c o o r d v a r #2 (Vgroup) tag = 1965; reference = 13; number of entries = 6; name = Variable 1; class = Var0.0 number of attributes = 1 attr0: name=Attribute Dimension 1 type=4 count=19 size=19 T h i s i s a c o o r d v a r Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vg0 -- vd -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group vg2 -- vg0 -- vd -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group vg3 -- vg0 -- vd -- vg0 -- vd -- vg0 -- vd hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-15.out000066400000000000000000000116121503061704500216700ustar00rootroot00000000000000File name: sds2_dim1_samename.hdf Vgroup:0 tag = 1965; reference = 8; name = Variable 2; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 7; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = Variable 2; class = DimVal0.1; total number of attributes = 0. Vgroup:1 tag = 1965; reference = 10; name = fakeDim1; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 9; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = fakeDim1; class = DimVal0.1; total number of attributes = 0. Vgroup:2 tag = 1965; reference = 12; name = fakeDim2; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 11; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = fakeDim2; class = DimVal0.1; total number of attributes = 0. Vgroup:3 tag = 1965; reference = 15; name = Variable 1; class = Var0.0; number of entries = 5; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 8; number of entries = 1; name = Variable 2; class = Dim0.0 number of attributes = 0 #1 (Vdata) tag = 1962; reference = 13; number of records = 0; interlace = 0; fields = [SDS variable]; record size (in bytes) = 4; name = ; class = SDSVar; total number of attributes = 0. #2 (Number type) tag = 106; reference = 14; #3 (SciData dimension record) tag = 701; reference = 14; #4 (Numeric Data Group) tag = 720; reference = 2; Vgroup:4 tag = 1965; reference = 18; name = Variable 2; class = Var0.0; number of entries = 7; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 10; number of entries = 1; name = fakeDim1; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 12; number of entries = 1; name = fakeDim2; class = Dim0.0 number of attributes = 0 #2 (Vdata) tag = 1962; reference = 16; number of records = 0; interlace = 0; fields = [SDS variable]; record size (in bytes) = 4; name = ; class = SDSVar; total number of attributes = 0. #3 (Scientific Data) tag = 702; reference = 4; #4 (Number type) tag = 106; reference = 17; #5 (SciData dimension record) tag = 701; reference = 17; #6 (Numeric Data Group) tag = 720; reference = 3; Vgroup:5 tag = 1965; reference = 21; name = Variable 2; class = Var0.0; number of entries = 6; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 8; number of entries = 1; name = Variable 2; class = Dim0.0 number of attributes = 0 #1 (Vdata) tag = 1962; reference = 19; number of records = 0; interlace = 0; fields = [Coordinate variable]; record size (in bytes) = 4; name = ; class = CoordVar; total number of attributes = 0. #2 (Scientific Data) tag = 702; reference = 6; #3 (Number type) tag = 106; reference = 20; #4 (SciData dimension record) tag = 701; reference = 20; #5 (Numeric Data Group) tag = 720; reference = 5; Vgroup:6 tag = 1965; reference = 22; name = sds2_dim1_samename.hdf; class = CDF0.0; number of entries = 6; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 8; number of entries = 1; name = Variable 2; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 10; number of entries = 1; name = fakeDim1; class = Dim0.0 number of attributes = 0 #2 (Vgroup) tag = 1965; reference = 12; number of entries = 1; name = fakeDim2; class = Dim0.0 number of attributes = 0 #3 (Vgroup) tag = 1965; reference = 15; number of entries = 5; name = Variable 1; class = Var0.0 number of attributes = 0 #4 (Vgroup) tag = 1965; reference = 18; number of entries = 7; name = Variable 2; class = Var0.0 number of attributes = 0 #5 (Vgroup) tag = 1965; reference = 21; number of entries = 6; name = Variable 2; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg0 -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg1 -- vd -- vg2 -- vd -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg0 -- vd -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg6 -- vg0 -- vd -- vg1 -- vd -- vg2 -- vd -- vg3 -- vg0 -- vd -- vd -- Number type -- SciData dimension record -- Numeric Data Group -- vg0 -- vd -- vg0 -- vd hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-16.out000066400000000000000000000014351503061704500216730ustar00rootroot00000000000000File name: grtdfi322.hdf Vgroup:0 tag = 1965; reference = 5; name = Image_array_5; class = RI0.0; number of entries = 2; number of attributes = 0 Vgroup:1 tag = 1965; reference = 6; name = RIG0.0; class = ; number of entries = 4; number of attributes = 0 Vgroup:2 tag = 1965; reference = 7; name = Raster Image #0; class = RI0.0; number of entries = 3; number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Image Dimensions -- Raster Image Data vg1 -- vg2 -- Image Dimensions -- Raster Image Data -- vd -- -- vg0 -- Image Dimensions -- Raster Image Data -- vd vg2 -- Image Dimensions -- Raster Image Data -- vd hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-17.out000066400000000000000000000033721503061704500216760ustar00rootroot00000000000000File name: grtdfi322.hdf Vgroup:0 tag = 1965; reference = 5; name = Image_array_5; class = RI0.0; number of entries = 2; number of attributes = 0 Entries:- #0 (Image Dimensions) tag = 300; reference = 5; #1 (Raster Image Data) tag = 302; reference = 5; Vgroup:1 tag = 1965; reference = 6; name = RIG0.0; class = ; number of entries = 4; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 7; number of entries = 3; name = Raster Image #0; class = RI0.0 number of attributes = 0 #1 (Vgroup) tag = 1965;reference = 0; #2 (Vgroup) tag = 1965; reference = 5; number of entries = 2; name = Image_array_5; class = RI0.0 number of attributes = 0 #3 (Vdata) tag = 1962; reference = 9; number of records = 16; interlace = 0; fields = [File contents]; record size (in bytes) = 1; name = RIATTR0.0N; class = RIATTR0.0C; total number of attributes = 0. Vgroup:2 tag = 1965; reference = 7; name = Raster Image #0; class = RI0.0; number of entries = 3; number of attributes = 0 Entries:- #0 (Image Dimensions) tag = 300; reference = 2; #1 (Raster Image Data) tag = 302; reference = 2; #2 (Vdata) tag = 1962; reference = 8; number of records = 2; interlace = 0; fields = [Value range]; record size (in bytes) = 4; name = RIATTR0.0N; class = RIATTR0.0C; total number of attributes = 0. Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- Image Dimensions -- Raster Image Data vg1 -- vg2 -- Image Dimensions -- Raster Image Data -- vd -- -- vg0 -- Image Dimensions -- Raster Image Data -- vd vg2 -- Image Dimensions -- Raster Image Data -- vd hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-2.out000066400000000000000000000013351503061704500216050ustar00rootroot00000000000000File name: tvset.hdf Vgroup:0 tag = 1965; reference = 2; name = Simple Vgroup; class = Test object; number of entries = 0; number of attributes = 0 Entries:- None. Vgroup:1 tag = 1965; reference = 3; name = Second Vgroup; class = Test object; number of entries = 3; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 0; name = Simple Vgroup; class = Test object number of attributes = 0 #1 (Unknown Tag) tag = 1000; reference = 12345; #2 (Unknown Tag) tag = 123; reference = 1234; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 -- vg0 -- Unknown Object -- Unknown Object hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-3.out000066400000000000000000000010641503061704500216050ustar00rootroot00000000000000File name: tvset.hdf Vgroup:1 tag = 1965; reference = 3; name = Second Vgroup; class = Test object; number of entries = 3; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 0; name = Simple Vgroup; class = Test object number of attributes = 0 #1 (Unknown Tag) tag = 1000; reference = 12345; #2 (Unknown Tag) tag = 123; reference = 1234; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 -- vg0 -- Unknown Object -- Unknown Object hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-4.out000066400000000000000000000004151503061704500216050ustar00rootroot00000000000000File name: tvset.hdf Vgroup:0 tag = 1965; reference = 2; name = Simple Vgroup; class = Test object; number of entries = 0; number of attributes = 0 Entries:- None. Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-5.out000066400000000000000000000013351503061704500216100ustar00rootroot00000000000000File name: tvset.hdf Vgroup:0 tag = 1965; reference = 2; name = Simple Vgroup; class = Test object; number of entries = 0; number of attributes = 0 Entries:- None. Vgroup:1 tag = 1965; reference = 3; name = Second Vgroup; class = Test object; number of entries = 3; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 2; number of entries = 0; name = Simple Vgroup; class = Test object number of attributes = 0 #1 (Unknown Tag) tag = 1000; reference = 12345; #2 (Unknown Tag) tag = 123; reference = 1234; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 vg1 -- vg0 -- Unknown Object -- Unknown Object hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-6.out000066400000000000000000000041431503061704500216110ustar00rootroot00000000000000File name: tdata.hdf Vgroup:1 tag = 1965; reference = 30; name = bands; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 29; number of records = 3; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = bands; class = DimVal0.0; total number of attributes = 0. Vgroup:3 tag = 1965; reference = 34; name = a; class = Var0.0; number of entries = 7; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 32; number of entries = 1; name = rec; class = UDim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 28; number of entries = 1; name = nsamp; class = Dim0.0 number of attributes = 0 #2 (Vgroup) tag = 1965; reference = 30; number of entries = 1; name = bands; class = Dim0.0 number of attributes = 0 #3 (Scientific Data) tag = 702; reference = 18; #4 (Number type) tag = 106; reference = 33; #5 (SciData dimension record) tag = 701; reference = 33; #6 (Numeric Data Group) tag = 720; reference = 2; Vgroup:5 tag = 1965; reference = 38; name = c; class = Var0.0; number of entries = 5; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 32; number of entries = 1; name = rec; class = UDim0.0 number of attributes = 0 #1 (Scientific Data) tag = 702; reference = 24; #2 (Number type) tag = 106; reference = 37; #3 (SciData dimension record) tag = 701; reference = 37; #4 (Numeric Data Group) tag = 720; reference = 4; Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-7.out000066400000000000000000000043731503061704500216170ustar00rootroot00000000000000File name: tdata.hdf Vgroup:2 tag = 1965; reference = 32; name = rec; class = UDim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 31; number of records = 1; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = rec; class = DimVal0.0; total number of attributes = 0. Vgroup:6 tag = 1965; reference = 39; name = tdata.hdf; class = CDF0.0; number of entries = 6; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 28; number of entries = 1; name = nsamp; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 30; number of entries = 1; name = bands; class = Dim0.0 number of attributes = 0 #2 (Vgroup) tag = 1965; reference = 32; number of entries = 1; name = rec; class = UDim0.0 number of attributes = 0 #3 (Vgroup) tag = 1965; reference = 34; number of entries = 7; name = a; class = Var0.0 number of attributes = 0 #4 (Vgroup) tag = 1965; reference = 36; number of entries = 6; name = b; class = Var0.0 number of attributes = 0 #5 (Vgroup) tag = 1965; reference = 38; number of entries = 5; name = c; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg6 -- vg0 -- vd -- vg1 -- vd -- vg2 -- vd -- vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-8.out000066400000000000000000000043761503061704500216230ustar00rootroot00000000000000File name: tdata.hdf Vgroup:0 tag = 1965; reference = 28; name = nsamp; class = Dim0.0; number of entries = 1; number of attributes = 0 Entries:- #0 (Vdata) tag = 1962; reference = 27; number of records = 2; interlace = 0; fields = [Values]; record size (in bytes) = 4; name = nsamp; class = DimVal0.0; total number of attributes = 0. Vgroup:6 tag = 1965; reference = 39; name = tdata.hdf; class = CDF0.0; number of entries = 6; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 28; number of entries = 1; name = nsamp; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 30; number of entries = 1; name = bands; class = Dim0.0 number of attributes = 0 #2 (Vgroup) tag = 1965; reference = 32; number of entries = 1; name = rec; class = UDim0.0 number of attributes = 0 #3 (Vgroup) tag = 1965; reference = 34; number of entries = 7; name = a; class = Var0.0 number of attributes = 0 #4 (Vgroup) tag = 1965; reference = 36; number of entries = 6; name = b; class = Var0.0 number of attributes = 0 #5 (Vgroup) tag = 1965; reference = 38; number of entries = 5; name = c; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg6 -- vg0 -- vd -- vg1 -- vd -- vg2 -- vd -- vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/dumpvg-9.out000066400000000000000000000036431503061704500216200ustar00rootroot00000000000000File name: tdata.hdf Vgroup:6 tag = 1965; reference = 39; name = tdata.hdf; class = CDF0.0; number of entries = 6; number of attributes = 0 Entries:- #0 (Vgroup) tag = 1965; reference = 28; number of entries = 1; name = nsamp; class = Dim0.0 number of attributes = 0 #1 (Vgroup) tag = 1965; reference = 30; number of entries = 1; name = bands; class = Dim0.0 number of attributes = 0 #2 (Vgroup) tag = 1965; reference = 32; number of entries = 1; name = rec; class = UDim0.0 number of attributes = 0 #3 (Vgroup) tag = 1965; reference = 34; number of entries = 7; name = a; class = Var0.0 number of attributes = 0 #4 (Vgroup) tag = 1965; reference = 36; number of entries = 6; name = b; class = Var0.0 number of attributes = 0 #5 (Vgroup) tag = 1965; reference = 38; number of entries = 5; name = c; class = Var0.0 number of attributes = 0 Graphical representation of the file:- (vg#: vgroup; vd: vdata) vg0 -- vd vg1 -- vd vg2 -- vd vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group vg6 -- vg0 -- vd -- vg1 -- vd -- vg2 -- vd -- vg3 -- vg2 -- vd -- vg0 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg4 -- vg2 -- vd -- vg1 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group -- vg5 -- vg2 -- vd -- Scientific Data -- Number type -- SciData dimension record -- Numeric Data Group hdf4-hdf4.3.1/mfhdf/dumper/testfiles/grtdfi322.hdf000066400000000000000000000032161503061704500216040ustar00rootroot00000000000000ÆÊ\.&Ê&jD,HÈ\2`.hZjÂ,Æ2Ú.âZ,<2P.XZ,²NCSA HDF Version 4.0 Release 1, Jan. 19, 1996 j,.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZj,.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZj,.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZj2Œ­í).£­¦/«^ªf@jÕ,Ù« ª &B­h%,.         ##$$ % %!&!&"'"'(-(-).).*/*/+0+0,1,1,.Raster Image #0RI0.0< Value range RIATTR0.0N RIATTR0.0C,.ªRaster Image #0RI0.0 j,. Image_array_5RI0.0 image data  File contents RIATTR0.0N RIATTR0.0C­­­ª RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/grtdfui162.hdf000066400000000000000000000046171503061704500220010ustar00rootroot00000000000000Ê\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q­ H).hÈj 0, 4­ qNCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.  !!""##$$%%&&''(())**++,,--..//0011 j,. Image_array_5RI0.0­­RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/grtdfui82.hdf000066400000000000000000000044341503061704500217170ustar00rootroot00000000000000Ê\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q.Ydj½,Á­Õ)­þNCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.  !!""##$$%%&&''(())**++,,--..//0011 j,. Image_array_5RI0.0­­RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/grtdfui83.hdf000066400000000000000000000050531503061704500217160ustar00rootroot00000000000000 GÊ\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q­ ).h–jþ, 2 NCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111 j,.,. Image_array_5RI0.0­ ­­RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/grtdfui84.hdf000066400000000000000000000046171503061704500217240ustar00rootroot00000000000000Ê\.&Ijo,s2‡.I,Ø2ì.ôI,=2Q­ H).hÈj 0, 4­ qNCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111 j,. Image_array_5RI0.0­­RIG0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-1.out000066400000000000000000000011061503061704500212510ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 Linked Blocks Indicator: (tag 20) Ref nos: 18 19 20 21 22 23 24 25 26 Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 33 35 37 SciData dimension record: (tag 701) Ref nos: 33 35 37 Numeric Data Group : (tag 720) Ref nos: 2 3 4 Vdata : (tag 1962) Ref nos: 27 29 31 Vdata Storage : (tag 1963) Ref nos: 27 29 31 Vgroup : (tag 1965) Ref nos: 28 30 32 34 36 38 39 Special Scientific Data: (tag 17086) Ref nos: 18 21 24 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-10.out000066400000000000000000000053261503061704500213410ustar00rootroot00000000000000File: Example6.hdf Last modified with NCSA HDF Version 4.0 Release 1, Jan. 19, 1996 File Label #0: This is a file label for AN File Label #1: This is a file label for AN no tagname tag ref index_by_tag 0 Version Descriptor 30 1 0 1 File Identifier 100 1 0 2 File Identifier 100 2 1 3 File Description 101 1 0 4 File Description 101 2 1 5 Data Id Label 104 1 0 6 Data Id Label 104 2 1 7 Data Id Label 104 3 2 8 Data Id Label 104 4 3 9 Data Id Label 104 5 4 10 Data Id Label 104 6 5 11 Data Id Annotation 105 1 0 12 Data Id Annotation 105 2 1 13 Data Id Annotation 105 3 2 14 Data Id Annotation 105 4 3 15 Number type 106 25 0 16 Number type 106 27 1 17SciData dimension record 701 25 0 18SciData dimension record 701 27 1 19 Numeric Data Group 720 2 0 Name/Label=Data label for AN 20 Numeric Data Group 720 12 1 Name/Label=Data label for AN 21 Vdata 1962 13 0 Name/Label=This is a data label for Vdata 22 Vdata 1962 14 1 23 Vdata 1962 16 2 24 Vdata 1962 17 3 25 Vdata 1962 19 4 26 Vdata 1962 20 5 27 Vdata 1962 22 6 28 Vdata 1962 23 7 29 Vdata Storage 1963 13 0 30 Vdata Storage 1963 14 1 31 Vdata Storage 1963 16 2 32 Vdata Storage 1963 17 3 33 Vdata Storage 1963 19 4 34 Vdata Storage 1963 20 5 35 Vdata Storage 1963 22 6 36 Vdata Storage 1963 23 7 37 Vgroup 1965 15 0 Name/Label=This is a data label for Vgroup 38 Vgroup 1965 18 1 39 Vgroup 1965 21 2 40 Vgroup 1965 24 3 41 Vgroup 1965 26 4 42 Vgroup 1965 28 5 43 Vgroup 1965 29 6 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-2.out000066400000000000000000000040331503061704500212540ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag 0Linked Blocks Indicator 20 18 0 1Linked Blocks Indicator 20 19 1 2Linked Blocks Indicator 20 20 2 3Linked Blocks Indicator 20 21 3 4Linked Blocks Indicator 20 22 4 5Linked Blocks Indicator 20 23 5 6Linked Blocks Indicator 20 24 6 7Linked Blocks Indicator 20 25 7 8Linked Blocks Indicator 20 26 8 9 Version Descriptor 30 1 0 10 Number type 106 33 0 11 Number type 106 35 1 12 Number type 106 37 2 13SciData dimension record 701 33 0 14SciData dimension record 701 35 1 15SciData dimension record 701 37 2 16 Numeric Data Group 720 2 0 17 Numeric Data Group 720 3 1 18 Numeric Data Group 720 4 2 19 Vdata 1962 27 0 20 Vdata 1962 29 1 21 Vdata 1962 31 2 22 Vdata Storage 1963 27 0 23 Vdata Storage 1963 29 1 24 Vdata Storage 1963 31 2 25 Vgroup 1965 28 0 26 Vgroup 1965 30 1 27 Vgroup 1965 32 2 28 Vgroup 1965 34 3 29 Vgroup 1965 36 4 30 Vgroup 1965 38 5 31 Vgroup 1965 39 6 32Special Scientific Data 17086 18 0 33Special Scientific Data 17086 21 1 34Special Scientific Data 17086 24 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-3.out000066400000000000000000000055731503061704500212670ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag offset length 0Linked Blocks Indicator 20 18 0 3054 24 1Linked Blocks Indicator 20 19 1 3094 258 2Linked Blocks Indicator 20 20 2 3402 1536 3Linked Blocks Indicator 20 21 3 4938 12 4Linked Blocks Indicator 20 22 4 4966 258 5Linked Blocks Indicator 20 23 5 5270 768 6Linked Blocks Indicator 20 24 6 6038 4 7Linked Blocks Indicator 20 25 7 6058 258 8Linked Blocks Indicator 20 26 8 6358 256 9 Version Descriptor 30 1 0 2410 92 10 Number type 106 33 0 6884 4 11 Number type 106 35 1 6980 4 12 Number type 106 37 2 7064 4 13SciData dimension record 701 33 0 6888 30 14SciData dimension record 701 35 1 6984 22 15SciData dimension record 701 37 2 7068 14 16 Numeric Data Group 720 2 0 6918 12 17 Numeric Data Group 720 3 1 7006 12 18 Numeric Data Group 720 4 2 7082 12 19 Vdata 1962 27 0 6622 53 20 Vdata 1962 29 1 6717 53 21 Vdata 1962 31 2 6804 51 22 Vdata Storage 1963 27 0 6614 8 23 Vdata Storage 1963 29 1 6705 12 24 Vdata Storage 1963 31 2 6800 4 25 Vgroup 1965 28 0 6675 30 26 Vgroup 1965 30 1 6770 30 27 Vgroup 1965 32 2 6855 29 28 Vgroup 1965 34 3 6930 50 29 Vgroup 1965 36 4 7018 46 30 Vgroup 1965 38 5 7094 42 31 Vgroup 1965 39 6 7136 54 32Special Scientific Data 17086 18 0 0 120 33Special Scientific Data 17086 21 1 0 60 34Special Scientific Data 17086 24 2 0 20 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-4.out000066400000000000000000000042611503061704500212610ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag 0Linked Blocks Indicator 20 18 0 1Linked Blocks Indicator 20 19 1 2Linked Blocks Indicator 20 20 2 3Linked Blocks Indicator 20 21 3 4Linked Blocks Indicator 20 22 4 5Linked Blocks Indicator 20 23 5 6Linked Blocks Indicator 20 24 6 7Linked Blocks Indicator 20 25 7 8Linked Blocks Indicator 20 26 8 9 Version Descriptor 30 1 0 10 Number type 106 33 0 11 Number type 106 35 1 12 Number type 106 37 2 13SciData dimension record 701 33 0 14SciData dimension record 701 35 1 15SciData dimension record 701 37 2 16 Numeric Data Group 720 2 0 17 Numeric Data Group 720 3 1 18 Numeric Data Group 720 4 2 19 Vdata 1962 27 0 20 Vdata 1962 29 1 21 Vdata 1962 31 2 22 Vdata Storage 1963 27 0 23 Vdata Storage 1963 29 1 24 Vdata Storage 1963 31 2 25 Vgroup 1965 28 0 26 Vgroup 1965 30 1 27 Vgroup 1965 32 2 28 Vgroup 1965 34 3 29 Vgroup 1965 36 4 30 Vgroup 1965 38 5 31 Vgroup 1965 39 6 32Special Scientific Data 17086 18 0 Linked Block: first 24 standard 1536 per unit 128 33Special Scientific Data 17086 21 1 Linked Block: first 12 standard 768 per unit 128 34Special Scientific Data 17086 24 2 Linked Block: first 4 standard 256 per unit 128 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-5.out000066400000000000000000000002021503061704500212510ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 Numeric Data Group : (tag 720) Ref nos: 2 3 4 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-6.out000066400000000000000000000006131503061704500212600ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag offset length 16 Numeric Data Group 720 2 0 6918 12 17 Numeric Data Group 720 3 1 7006 12 18 Numeric Data Group 720 4 2 7082 12 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-7.out000066400000000000000000000102261503061704500212620ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag 0Linked Blocks Indicator 20 18 0 1Linked Blocks Indicator 20 19 1 2Linked Blocks Indicator 20 20 2 3Linked Blocks Indicator 20 21 3 4Linked Blocks Indicator 20 22 4 5Linked Blocks Indicator 20 23 5 6Linked Blocks Indicator 20 24 6 7Linked Blocks Indicator 20 25 7 8Linked Blocks Indicator 20 26 8 9 Version Descriptor 30 1 0 10 Number type 106 33 0 11 Number type 106 35 1 12 Number type 106 37 2 13SciData dimension record 701 33 0 14SciData dimension record 701 35 1 15SciData dimension record 701 37 2 16 Numeric Data Group 720 2 0 Contents: (3 objects) Scientific Data : (tag= 702) ref=18 Number type : (tag= 106) ref=33 SciData dimension record : (tag= 701) ref=33 17 Numeric Data Group 720 3 1 Contents: (3 objects) Scientific Data : (tag= 702) ref=21 Number type : (tag= 106) ref=35 SciData dimension record : (tag= 701) ref=35 18 Numeric Data Group 720 4 2 Contents: (3 objects) Scientific Data : (tag= 702) ref=24 Number type : (tag= 106) ref=37 SciData dimension record : (tag= 701) ref=37 19 Vdata 1962 27 0 20 Vdata 1962 29 1 21 Vdata 1962 31 2 22 Vdata Storage 1963 27 0 23 Vdata Storage 1963 29 1 24 Vdata Storage 1963 31 2 25 Vgroup 1965 28 0 Contents: (1 objects) Vdata : (tag= 1962) ref=27 26 Vgroup 1965 30 1 Contents: (1 objects) Vdata : (tag= 1962) ref=29 27 Vgroup 1965 32 2 Contents: (1 objects) Vdata : (tag= 1962) ref=31 28 Vgroup 1965 34 3 Contents: (7 objects) Vgroup : (tag= 1965) ref=32 Vgroup : (tag= 1965) ref=28 Vgroup : (tag= 1965) ref=30 Scientific Data : (tag= 702) ref=18 Number type : (tag= 106) ref=33 SciData dimension record : (tag= 701) ref=33 Numeric Data Group : (tag= 720) ref=2 29 Vgroup 1965 36 4 Contents: (6 objects) Vgroup : (tag= 1965) ref=32 Vgroup : (tag= 1965) ref=30 Scientific Data : (tag= 702) ref=21 Number type : (tag= 106) ref=35 SciData dimension record : (tag= 701) ref=35 Numeric Data Group : (tag= 720) ref=3 30 Vgroup 1965 38 5 Contents: (5 objects) Vgroup : (tag= 1965) ref=32 Scientific Data : (tag= 702) ref=24 Number type : (tag= 106) ref=37 SciData dimension record : (tag= 701) ref=37 Numeric Data Group : (tag= 720) ref=4 31 Vgroup 1965 39 6 Contents: (6 objects) Vgroup : (tag= 1965) ref=28 Vgroup : (tag= 1965) ref=30 Vgroup : (tag= 1965) ref=32 Vgroup : (tag= 1965) ref=34 Vgroup : (tag= 1965) ref=36 Vgroup : (tag= 1965) ref=38 32Special Scientific Data 17086 18 0 33Special Scientific Data 17086 21 1 34Special Scientific Data 17086 24 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-8.out000066400000000000000000000040331503061704500212620ustar00rootroot00000000000000File: tdata.hdf Last modified with NCSA HDF Version 3.3 Release 4, October 1994 no tagname tag ref index_by_tag 0Linked Blocks Indicator 20 18 0 1Linked Blocks Indicator 20 19 1 2Linked Blocks Indicator 20 20 2 3Linked Blocks Indicator 20 21 3 4Linked Blocks Indicator 20 22 4 5Linked Blocks Indicator 20 23 5 6Linked Blocks Indicator 20 24 6 7Linked Blocks Indicator 20 25 7 8Linked Blocks Indicator 20 26 8 9 Version Descriptor 30 1 0 10 Number type 106 33 0 11 Number type 106 35 1 12 Number type 106 37 2 13SciData dimension record 701 33 0 14SciData dimension record 701 35 1 15SciData dimension record 701 37 2 16 Numeric Data Group 720 2 0 17 Numeric Data Group 720 3 1 18 Numeric Data Group 720 4 2 19 Vdata 1962 27 0 20 Vdata 1962 29 1 21 Vdata 1962 31 2 22 Vdata Storage 1963 27 0 23 Vdata Storage 1963 29 1 24 Vdata Storage 1963 31 2 25 Vgroup 1965 28 0 26 Vgroup 1965 30 1 27 Vgroup 1965 32 2 28 Vgroup 1965 34 3 29 Vgroup 1965 36 4 30 Vgroup 1965 38 5 31 Vgroup 1965 39 6 32Special Scientific Data 17086 18 0 33Special Scientific Data 17086 21 1 34Special Scientific Data 17086 24 2 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/list-9.out000066400000000000000000000052041503061704500212640ustar00rootroot00000000000000File: Example6.hdf Last modified with NCSA HDF Version 4.0 Release 1, Jan. 19, 1996 File description #0: This is a file describation for AN File description #1: This is a file describation for AN no tagname tag ref index_by_tag 0 Version Descriptor 30 1 0 1 File Identifier 100 1 0 2 File Identifier 100 2 1 3 File Description 101 1 0 4 File Description 101 2 1 5 Data Id Label 104 1 0 6 Data Id Label 104 2 1 7 Data Id Label 104 3 2 8 Data Id Label 104 4 3 9 Data Id Label 104 5 4 10 Data Id Label 104 6 5 11 Data Id Annotation 105 1 0 12 Data Id Annotation 105 2 1 13 Data Id Annotation 105 3 2 14 Data Id Annotation 105 4 3 15 Number type 106 25 0 16 Number type 106 27 1 17SciData dimension record 701 25 0 18SciData dimension record 701 27 1 19 Numeric Data Group 720 2 0 20 Numeric Data Group 720 12 1 21 Vdata 1962 13 0 Description=This is a data describation for Vdata 22 Vdata 1962 14 1 23 Vdata 1962 16 2 24 Vdata 1962 17 3 25 Vdata 1962 19 4 26 Vdata 1962 20 5 27 Vdata 1962 22 6 28 Vdata 1962 23 7 29 Vdata Storage 1963 13 0 30 Vdata Storage 1963 14 1 31 Vdata Storage 1963 16 2 32 Vdata Storage 1963 17 3 33 Vdata Storage 1963 19 4 34 Vdata Storage 1963 20 5 35 Vdata Storage 1963 22 6 36 Vdata Storage 1963 23 7 37 Vgroup 1965 15 0 38 Vgroup 1965 18 1 39 Vgroup 1965 21 2 40 Vgroup 1965 24 3 41 Vgroup 1965 26 4 42 Vgroup 1965 28 5 43 Vgroup 1965 29 6 hdf4-hdf4.3.1/mfhdf/dumper/testfiles/manySDSs.c000066400000000000000000000050521503061704500212600ustar00rootroot00000000000000#include "mfhdf.h" #define X_LENGTH 10 #define Y_LENGTH 10 #define NUM_DSETS 40 main() { int32 sd_id, sds_id, istat, sds_idx; int32 sds_list[NUM_DSETS]; int32 dims[2], start[2], edges[2], rank, num_datasets = 0, num_attrs = 0; intn i, j, k, index; intn num_errs = 0; char file_attr[116] = "This file was generated by the program manySDSs.c in hdf4/mfhdf/dumper/testfiles " "to test the flag -k in hdp dumpsds"; char names[NUM_DSETS][8] = { {"data1"}, {"data2"}, {"data3"}, {"data4"}, {"data5"}, {"data6"}, {"data7"}, {"data8"}, {"data9"}, {"data10"}, {"data11"}, {"data12"}, {"data13"}, {"data14"}, {"data15"}, {"data16"}, {"data17"}, {"data18"}, {"data19"}, {"data20"}, {"data21"}, {"data22"}, {"data23"}, {"data24"}, {"data25"}, {"data26"}, {"data27"}, {"data28"}, {"data29"}, {"data30"}, {"data31"}, {"data32"}, {"data33"}, {"data34"}, {"data35"}, {"data36"}, {"data37"}, {"data38"}, {"data39"}, {"data40"}}; /* Create and open the file and initiate the SD interface. */ sd_id = SDstart("sds_empty_many.hdf", DFACC_CREATE); if (sd_id == FAIL) { fprintf(stderr, "manySDSs: SDstart returns sd_id: %d\n", sd_id); exit(-1); } /* Add file attribute to note about the file's history */ istat = SDsetattr(sd_id, "file_contents", DFNT_CHAR8, 116, (void *)file_attr); if (istat == FAIL) { fprintf(stderr, "manySDSs: SDsetattr returns status: %d\n", istat); exit(-1); } /* Define the rank and dimensions of the data set to be created. */ rank = 2; dims[0] = SD_UNLIMITED; dims[1] = X_LENGTH; /* Define the location, pattern, and size of the data set */ for (i = 0; i < rank; i++) start[i] = 0; for (index = 0; index < NUM_DSETS; index++) { /* Create each data set. */ sds_list[index] = SDcreate(sd_id, names[index], DFNT_INT16, rank, dims); if (sds_list[index] == FAIL) { fprintf(stderr, "manySDSs: SDcreate returns sds_list[%d]: %d\n", index, sds_list[index]); exit(-1); } /* Terminate access to each data set. */ istat = SDendaccess(sds_list[index]); if (istat == FAIL) { fprintf(stderr, "manySDSs: SDendaccess returns status: %d\n", istat); exit(-1); } } /* Terminate access to the SD interface and close the file. */ istat = SDend(sd_id); if (istat == FAIL) { fprintf(stderr, "manySDSs: SDend returns: %d\n", istat); exit(-1); } } hdf4-hdf4.3.1/mfhdf/dumper/testfiles/sds1_dim1_samename.hdf000066400000000000000000000060661503061704500235360ustar00rootroot00000000000000È j\« ƪ Ê>­ #« +ª BA«ÿÿÿÿÿÿÿÿª ƒ7j º½ ¾Ð Ì ­ Ø7« ª "G« ÿÿÿÿÿÿÿÿª i@j ©½ ­Ð » ­ Ç7­ þ7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006Values Variable 1 DimVal0.1ª Variable 1Dim0.0This is not a coord varVALUESAttribute SDS 1Attr0.0 SDS variableSDSVar jjj½Ñ­ªªj½Ð Variable 1Var0.0This is a coord varVALUESAttribute Dimension 1Attr0.0Coordinate variableCoordVar j j j ½ Ñ ­ªªj½Ð  Variable 1Var0.0­­­ sds1_dim1_samename.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/sds2_dim1_samename.hdf000066400000000000000000000064321503061704500235340ustar00rootroot00000000000000È j\¾ ƾ Þ« òª ö>­ 4#« Wª [<­ —!« ¸ª ¼<­ ø!« ÿÿÿÿÿÿÿÿª 7j P½ TÐ b ­ n3«ÿÿÿÿÿÿÿÿª ¡7j ؽ ÜÐ ò­ ;«ÿÿÿÿÿÿÿÿª =@j }½ Ð ­ Ÿ7­ ÖCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006=ÌÌÍ@33@@@ÖffAffefghiValues Variable 2 DimVal0.1ª Variable 2Dim0.0ValuesfakeDim1 DimVal0.1ª fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª fakeDim2Dim0.0 SDS variableSDSVar jjj½Ñ­ªj½Ð  Variable 1Var0.0 SDS variableSDSVar jjj¾j½Ñ­­ª¾j½Ð  Variable 2Var0.0Coordinate variableCoordVar jj¾j½Ñ­ª¾j½Ð Variable 2Var0.0­­­­­­ sds2_dim1_samename.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/sds_compressed.hdf000066400000000000000000000075511503061704500231210ustar00rootroot00000000000000È j\B¾ Æ( Ö;B¾ ( 'MB¾ t( x« ª <­ H!« iª m<­ ©!« ʪ Î<­ !« +ª /<­ k!« Œª <­ Ì!« íª ñ<­ -!«ÿÿÿÿÿÿÿÿª N7j …½ ‰Ð Ÿ­ ¯8«ÿÿÿÿÿÿÿÿª ç7j½"Ð8­H<«ÿÿÿÿÿÿÿÿª„7j»½¿ÐÕ­å8­KÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHDF Version 4.2 Release 3-snap0, January 31, 2008@xœmÇÉ€ ÁäTÑüceèG=J’“äM0—‰ðÏð¯ð¿á¼Ã|Âü…oøÿƒ·I@€@ ÿþ¤“þ èüQ„ ` h€á£@8 P‚0ãFã0Ð † "€?† CH€(‰@P„ s @ @ @ @ @ @)I‘ÉTJ†$ÍYD­m5fœAÍm’,á§,Ï"ɶ0d´WÑ“qecˆ®E¹"ËvEº'†EÞ "x„”ÃÈH0”áÀValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª fakeDim2Dim0.0ValuesfakeDim3 DimVal0.1ªfakeDim3Dim0.0ValuesfakeDim4 DimVal0.1ªfakeDim4Dim0.0ValuesfakeDim5 DimVal0.1ªfakeDim5Dim0.0 SDS variableSDSVar jjj¾j½Ñ­­ª¾j½Ð SDSgzipVar0.0 SDS variableSDSVar jjj¾j½Ñ­­ª¾j½Ð  SDSskiphuffVar0.0 SDS variableSDSVar jjj¾j½Ñ­­ª¾j½ÐSDSszipVar0.0 ­­­­­­­­­ sds_compressed.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/sds_empty_many.hdf000066400000000000000000000523141503061704500231340ustar00rootroot00000000000000È#] j\«* ƪ* Ê<­+ "«, (ª, ,<­- h!«. ‰ª. <­/ É"«0 ëª0 ï<­1 +!«2 Lª2 P<­3 Œ"«4 ®ª4 ²<­5 î!«6 ª6 <­7 O"«8 qª8 u<­9 ±!«: Òª: Ö<­; "«< 4ª< 8<­= t!«> •ª> ™=­? Ö#«@ ùª@ ý=­A:"«B\ªB`=­C#«DÀªDÄ=­E"«F#ªF'=­Gd#«H‡ªH‹=­IÈ"«JêªJî=­K+#«LNªLR=­M"«N±ªNµ=­Oò#«PªP=­QV"«RxªR|=­S¹#«TܪTà=­U"«V?ªVC=­W€#«X£ªX§=­Yä"«ZªZ =­[G#«\jª\n=­]«"«^ͪ^Ñ=­_#«`1ª`5=­ar"«b”ªb˜=­cÕ#«døªdü=­e9"«f[ªf_=­gœ#«h¿ªhÃ=­i"«j"ªj&=­kc#«l†ªlŠ=­mÇ"«néªní=­o*#«pMªpQ=­qŽ"«r°ªr´=­sñ#«tªt=­uU"«vwªv{=­w¸#«xÛªxß=­y"«z>ªzB=­{#«|¢ª|¦=­}ã"«~ª~ =­F#«€iª€m=­ª"«‚̪‚Ð=­ƒ #«„0ª„4=­…q"«†“ª†—=­‡Ô#«ˆ÷ªˆû=­‰8"«ŠZªŠ^=­‹›#«Œ¾ªŒÂ=­ÿ"«Ž!ªŽ%=­b#«…ª‰=­‘Æ"«’誒ì=­“)#«”Lª”P=­•"«–¯ª–³=­—ð#«˜ª˜=­™T"«švªšz=­›·#«œÚªœÞ=­ "«ž =ªž A=­Ÿ ~#«  ¡ª  ¥=­¡ â"«¢!ª¢!=­£!E#«¤!hª¤!l=­¥!©"«¦!˪¦!Ï=­§" #«¨"/ª¨"3=­©"p"«ª"’ªª"–=­«"Ó#«¬"öª¬"ú=­­#7"«®#YHDF Version 4.2 Release 4-snap4, October 25, 2009ValuesfakeDim0 DimVal0.1ª*fakeDim0UDim0.0 ValuesfakeDim1 DimVal0.1ª,fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª.fakeDim2UDim0.0 ValuesfakeDim3 DimVal0.1ª0fakeDim3Dim0.0ValuesfakeDim4 DimVal0.1ª2fakeDim4UDim0.0 ValuesfakeDim5 DimVal0.1ª4fakeDim5Dim0.0ValuesfakeDim6 DimVal0.1ª6fakeDim6UDim0.0 ValuesfakeDim7 DimVal0.1ª8fakeDim7Dim0.0ValuesfakeDim8 DimVal0.1ª:fakeDim8UDim0.0 ValuesfakeDim9 DimVal0.1ª<fakeDim9Dim0.0Values fakeDim10 DimVal0.1ª> fakeDim10UDim0.0 Values fakeDim11 DimVal0.1ª@ fakeDim11Dim0.0Values fakeDim12 DimVal0.1ªB fakeDim12UDim0.0 Values fakeDim13 DimVal0.1ªD fakeDim13Dim0.0Values fakeDim14 DimVal0.1ªF fakeDim14UDim0.0 Values fakeDim15 DimVal0.1ªH fakeDim15Dim0.0Values fakeDim16 DimVal0.1ªJ fakeDim16UDim0.0 Values fakeDim17 DimVal0.1ªL fakeDim17Dim0.0Values fakeDim18 DimVal0.1ªN fakeDim18UDim0.0 Values fakeDim19 DimVal0.1ªP fakeDim19Dim0.0Values fakeDim20 DimVal0.1ªR fakeDim20UDim0.0 Values fakeDim21 DimVal0.1ªT fakeDim21Dim0.0Values fakeDim22 DimVal0.1ªV fakeDim22UDim0.0 Values fakeDim23 DimVal0.1ªX fakeDim23Dim0.0Values fakeDim24 DimVal0.1ªZ fakeDim24UDim0.0 Values fakeDim25 DimVal0.1ª\ fakeDim25Dim0.0Values fakeDim26 DimVal0.1ª^ fakeDim26UDim0.0 Values fakeDim27 DimVal0.1ª` fakeDim27Dim0.0Values fakeDim28 DimVal0.1ªb fakeDim28UDim0.0 Values fakeDim29 DimVal0.1ªd fakeDim29Dim0.0Values fakeDim30 DimVal0.1ªf fakeDim30UDim0.0 Values fakeDim31 DimVal0.1ªh fakeDim31Dim0.0Values fakeDim32 DimVal0.1ªj fakeDim32UDim0.0 Values fakeDim33 DimVal0.1ªl fakeDim33Dim0.0Values fakeDim34 DimVal0.1ªn fakeDim34UDim0.0 Values fakeDim35 DimVal0.1ªp fakeDim35Dim0.0Values fakeDim36 DimVal0.1ªr fakeDim36UDim0.0 Values fakeDim37 DimVal0.1ªt fakeDim37Dim0.0Values fakeDim38 DimVal0.1ªv fakeDim38UDim0.0 Values fakeDim39 DimVal0.1ªx fakeDim39Dim0.0Values fakeDim40 DimVal0.1ªz fakeDim40UDim0.0 Values fakeDim41 DimVal0.1ª| fakeDim41Dim0.0Values fakeDim42 DimVal0.1ª~ fakeDim42UDim0.0 Values fakeDim43 DimVal0.1ª€ fakeDim43Dim0.0Values fakeDim44 DimVal0.1ª‚ fakeDim44UDim0.0 Values fakeDim45 DimVal0.1ª„ fakeDim45Dim0.0Values fakeDim46 DimVal0.1ª† fakeDim46UDim0.0 Values fakeDim47 DimVal0.1ªˆ fakeDim47Dim0.0Values fakeDim48 DimVal0.1ªŠ fakeDim48UDim0.0 Values fakeDim49 DimVal0.1ªŒ fakeDim49Dim0.0Values fakeDim50 DimVal0.1ªŽ fakeDim50UDim0.0 Values fakeDim51 DimVal0.1ª fakeDim51Dim0.0Values fakeDim52 DimVal0.1ª’ fakeDim52UDim0.0 Values fakeDim53 DimVal0.1ª” fakeDim53Dim0.0Values fakeDim54 DimVal0.1ª– fakeDim54UDim0.0 Values fakeDim55 DimVal0.1ª˜ fakeDim55Dim0.0Values fakeDim56 DimVal0.1ªš fakeDim56UDim0.0 Values fakeDim57 DimVal0.1ªœ fakeDim57Dim0.0Values fakeDim58 DimVal0.1ªž fakeDim58UDim0.0 Values fakeDim59 DimVal0.1ª  fakeDim59Dim0.0Values fakeDim60 DimVal0.1ª¢ fakeDim60UDim0.0 Values fakeDim61 DimVal0.1ª¤ fakeDim61Dim0.0Values fakeDim62 DimVal0.1ª¦ fakeDim62UDim0.0 Values fakeDim63 DimVal0.1ª¨ fakeDim63Dim0.0Values fakeDim64 DimVal0.1ªª fakeDim64UDim0.0 Values fakeDim65 DimVal0.1ª¬ fakeDim65Dim0.0ÈAª®,Ã=­¯-#«°-#ª°-'=­±-d"«²-†ª²-Š=­³-Ç#«´-ꪴ-î=­µ.+"«¶.Mª¶.Q=­·.Ž#«¸.±ª¸.µ=­¹.ò"«º/ªº/=­»/U#«¼/xª¼/|=­½/¹"«¾/Ûª¾/ß=­¿0#«À0?ªÀ0C=­Á0€"«Â0¢ªÂ0¦=­Ã0ã#«Ä1ªÄ1 =­Å1G"«Æ1iªÆ1m=­Ç1ª#«È1ͪÈ1Ñ=­É2"«ÊÿÿÿÿÿÿÿÿªÊ207jË2g½Ë2kÐ2 ­Ì22«ÍÿÿÿÿÿÿÿÿªÍ2¿7jÎ2ö½Î2úÐ3 ­Ï32«ÐÿÿÿÿÿÿÿÿªÐ3N7jÑ3…½Ñ3‰Ð3Ÿ ­Ò3«2«ÓÿÿÿÿÿÿÿÿªÓ3Ý7jÔ4½Ô4Ð4. ­Õ4:2«ÖÿÿÿÿÿÿÿÿªÖ4l7j×4£½×4§Ð4½ ­Ø4É2«ÙÿÿÿÿÿÿÿÿªÙ4û7jÚ52½Ú56Ð5L ­Û5X2«ÜÿÿÿÿÿÿÿÿªÜ5Š7jÝ5Á½Ý5ÅÐ5Û ­Þ5ç2«ßÿÿÿÿÿÿÿÿªß67jà6P½à6TÐ 6j ­á6v2«âÿÿÿÿÿÿÿÿªâ6¨7jã6ß½ã6ãÐ 6ù ­ä72«åÿÿÿÿÿÿÿÿªå777jæ7n½æ7rÐ 7ˆ ­ç7”3«èÿÿÿÿÿÿÿÿªè7Ç7jé7þ½é8Ð 8 ­ê8$3«ëÿÿÿÿÿÿÿÿªë8W7jì8޽ì8’Ð 8¨ ­í8´3«îÿÿÿÿÿÿÿÿªî8ç7jï9½ï9"Ð98 ­ð9D3«ñÿÿÿÿÿÿÿÿªñ9w7jò9®½ò9²Ð9È ­ó9Ô3«ôÿÿÿÿÿÿÿÿªô:7jõ:>½õ:BÐ:X ­ö:d3«÷ÿÿÿÿÿÿÿÿª÷:—7jø:νø:ÒÐ:è ­ù:ô3«úÿÿÿÿÿÿÿÿªú;'7jû;^½û;bÐ;x ­ü;„3«ýÿÿÿÿÿÿÿÿªý;·7jþ;î½þ;òÐ< ­ÿ<3«ÿÿÿÿÿÿÿÿª.½ >2Ð>H ­ >T3« ÿÿÿÿÿÿÿÿª >‡7j >¾½ >ÂÐ>Ø ­>ä3«ÿÿÿÿÿÿÿÿª?7j?N½?RÐ?h ­?t3«ÿÿÿÿÿÿÿÿª?§7j?Þ½?âÐ?ø ­@3«ÿÿÿÿÿÿÿÿª@77j@n½@rÐ@ˆ ­@”3«ÿÿÿÿÿÿÿÿª@Ç7j@þValues fakeDim66 DimVal0.1ª® fakeDim66UDim0.0 Values fakeDim67 DimVal0.1ª° fakeDim67Dim0.0Values fakeDim68 DimVal0.1ª² fakeDim68UDim0.0 Values fakeDim69 DimVal0.1ª´ fakeDim69Dim0.0Values fakeDim70 DimVal0.1ª¶ fakeDim70UDim0.0 Values fakeDim71 DimVal0.1ª¸ fakeDim71Dim0.0Values fakeDim72 DimVal0.1ªº fakeDim72UDim0.0 Values fakeDim73 DimVal0.1ª¼ fakeDim73Dim0.0Values fakeDim74 DimVal0.1ª¾ fakeDim74UDim0.0 Values fakeDim75 DimVal0.1ªÀ fakeDim75Dim0.0Values fakeDim76 DimVal0.1ªÂ fakeDim76UDim0.0 Values fakeDim77 DimVal0.1ªÄ fakeDim77Dim0.0Values fakeDim78 DimVal0.1ªÆ fakeDim78UDim0.0 Values fakeDim79 DimVal0.1ªÈ fakeDim79Dim0.0 SDS variableSDSVar jËjËjËj˽ËÑË­­ªj½Ð+-ÊËËdata1Var0.0 SDS variableSDSVar jÎjÎjÎjνÎÑέ­ªj½Ð/1ÍÎÎdata2Var0.0 SDS variableSDSVar jÑjÑjÑjѽÑÑÑ­­ªj½Ð35ÐÑÑdata3Var0.0 SDS variableSDSVar jÔjÔjÔjÔ½ÔÑÔ­­ªj½Ð79ÓÔÔdata4Var0.0 SDS variableSDSVar j×j×j×j×½×Ñ×­­ªj½Ð;=Ö××data5Var0.0 SDS variableSDSVar jÚjÚjÚjÚ½ÚÑÚ­­ªj½Ð?AÙÚÚdata6Var0.0 SDS variableSDSVar jÝjÝjÝjݽÝÑÝ­­ªj½ÐCEÜÝÝdata7Var0.0 SDS variableSDSVar jàjàjàjà½àÑà­­ªj½ÐGIßàà data8Var0.0 SDS variableSDSVar jãjãjãjã½ãÑã­­ªj½ÐKMâãã data9Var0.0 SDS variableSDSVar jæjæjæjæ½æÑæ­­ªj½ÐOQåææ data10Var0.0 SDS variableSDSVar jéjéjéjé½éÑé­­ªj½ÐSUèéé data11Var0.0 SDS variableSDSVar jìjìjìjì½ìÑì­­ªj½ÐWYëìì data12Var0.0 SDS variableSDSVar jïjïjïjï½ïÑï­­ªj½Ð[]îïïdata13Var0.0 SDS variableSDSVar jòjòjòjò½òÑò­­ªj½Ð_añòòdata14Var0.0 SDS variableSDSVar jõjõjõjõ½õÑõ­­ªj½Ðceôõõdata15Var0.0 SDS variableSDSVar jøjøjøjø½øÑø­­ªj½Ðgi÷øødata16Var0.0 SDS variableSDSVar jûjûjûjû½ûÑû­­ªj½Ðkmúûûdata17Var0.0 SDS variableSDSVar jþjþjþjþ½þÑþ­­ªj½Ðoqýþþdata18Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Ðsudata19Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Ðwydata20Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Ð{}data21Var0.0 SDS variableSDSVar j j j j ½ Ñ ­­ªj½Ð   data22Var0.0 SDS variableSDSVar j j j j ½ Ñ ­­ªj½Ѓ…   data23Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Ї‰data24Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Ћdata25Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Бdata26Var0.0 SDS variableSDSVarȽJhÐJ~ ­JŠ3«ÿÿÿÿÿÿÿÿªJ½7jJô½JøÐK ­K3«ÿÿÿÿÿÿÿÿªKM7jK„½KˆÐKž ­ Kª3«!ÿÿÿÿÿÿÿÿª!KÝ7j"L½"LÐL. ­#L:3«$ÿÿÿÿÿÿÿÿª$Lm7j%L¤½%L¨Ð L¾ ­&LÊ3«'ÿÿÿÿÿÿÿÿª'Lý7j(M4½(M8Ð!MN ­)MZ3«*ÿÿÿÿÿÿÿÿª*M7j+MĽ+MÈÐ"MÞ ­,Mê3«-ÿÿÿÿÿÿÿÿª-N7j.NT½.NXÐ#Nn ­/Nz3«0ÿÿÿÿÿÿÿÿª0N­7j1Nä½1NèÐ$Nþ ­2O 3«3ÿÿÿÿÿÿÿÿª3O=7j4Ot½4OxÐ%OŽ ­5Oš3«6ÿÿÿÿÿÿÿÿª6OÍ7j7P½7PÐ&P ­8P*3«9ÿÿÿÿÿÿÿÿª9P]7j:P”½:P˜Ð'P® ­;Pº3«<ÿÿÿÿÿÿÿÿª<Pí7j=Q$½=Q(Ð(Q> ­>QJ3«?ÿÿÿÿÿÿÿÿª?Q}7j@Q´½@Q¸Ð)QÎ ­AQÚ3«BR tªBR?­CRÀ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ jjjj½Ñ­­ªj½Г•data27Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½З™data28Var0.0 SDS variableSDSVar jjjj½Ñ­­ªj½Лdata29Var0.0 SDS variableSDSVar j"j"j"j"½"Ñ"­­ªj½П¡!""data30Var0.0 SDS variableSDSVar j%j%j%j%½%Ñ%­­ªj½У¥$%% data31Var0.0 SDS variableSDSVar j(j(j(j(½(Ñ(­­ªj½Ч©'((!data32Var0.0 SDS variableSDSVar j+j+j+j+½+Ñ+­­ªj½Ы­*++"data33Var0.0 SDS variableSDSVar j.j.j.j.½.Ñ.­­ªj½Я±-..#data34Var0.0 SDS variableSDSVar j1j1j1j1½1Ñ1­­ªj½гµ011$data35Var0.0 SDS variableSDSVar j4j4j4j4½4Ñ4­­ªj½з¹344%data36Var0.0 SDS variableSDSVar j7j7j7j7½7Ñ7­­ªj½л½677&data37Var0.0 SDS variableSDSVar j:j:j:j:½:Ñ:­­ªj½пÁ9::'data38Var0.0 SDS variableSDSVar j=j=j=j=½=Ñ=­­ªj½ÐÃÅ<==(data39Var0.0 SDS variableSDSVar j@j@j@j@½@Ñ@­­ªj½ÐÇÉ?@@)data40Var0.0This file was generated by the program manySDSs.c in hdf4/mfhdf/dumper/testfiles to test the flag -k in hdp dumpsdstttVALUES file_contentsAttr0.0y­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ª+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}ƒ…‡‰‹‘“•—™›Ÿ¡£¥§©«­¯±³µ·¹»½¿ÁÃÅÇÉÌÏÒÕØÛÞáäçêíðóöùüÿ  #&),/258;>ABsds_empty_many.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/star.hdf000066400000000000000000005237621503061704500210640ustar00rootroot00000000000000k.dʤÊdʤ-d¤ÊÉd¤Êjd§ÊÈd§Î,d§Ò2d§æ                                                    """!!!!!!"""  """!!!!"""   %%%((((%%%    %%%((((%%%   """(((----((("""  """(((----((("""  ###+++1111+++###  ##%---4444---%##   %%%---4444---%%%   !!!'''0007777000'''!!!  !!!'''0007777000'''!!!  """)))2229999222)))"""  """)))2229999222)))"""  ###+++444::::444+++###  #%%,,,666;;;;666,,,%%#  %%,,,666;;;;666,,,%%   ''000:::????:::000''    ''000:::????:::000''   """,,888BBBEEEEBBB888,,"""  """,6AAAHHHJJJJHHHAAA6,"""   ***666AAHHHJJJJHHHAA666***    444===EEJJJMMMMJJJEE===444   ))444===EEJJJMMMMJJJEE===444))  '22999???GGLLLNNNNLLLGG???99922'  '''22299?AAIINNNQQQQNNNIIAA?99222'''  %%000555::AAAIINNNQQQQNNNIIAAA::555000%%  %%%00555<>FFFNNUUUXXXXUUUNNFFF>>77722...##  !!,,///22777>@@HHQQQWWYYYYWWQQQHH@@>77722///,,!!  !!,,,//33399@@@HHQQQWWYYYYWWQQQHH@@@99333//,,,!!  **...//335;;BBBKKSSSXXZZZZXXSSSKKBBB;;533//...**  **---00555;;BBBKKUUUXXYYYYXXUUUKKBBB;;55500---**  ((-----01666==DDDMMUUUXXYYYYXXUUUMMDDD==66610-----((  ((+++..11166=>EEENNUUUXXUUUUXXUUUNNEEE>=66111..+++((  %%%,,+++//22288>>>EENNUUUXXRRRRXXUUUNNEE>>>88222//+++,,%%%  %++++,,//22299???FFPPUUUVVRRRRVVUUUPPFF???99222//,,++++%  """+++++--///3399???GGPPUUUTTPPPPTTUUUPPGG???9933///--+++++"""  ""*****--//055:::@@GGPPUUUTTPPPPTTUUUPPGG@@:::550//--*****""  ))***++---0055:;;AAGGPPPUUSSPPPPSSUUPPPGGAA;;:5500---++***))  *****++---1166;;;AAGGPPPTTSSQQQQSSTTPPPGGAA;;;6611---++*****  ''*****,,,--1177<<>AAIIIPPSSTTUUUUTTSSPPIIIAA>>99333//,,+++**))**%  ###**))***++--0005599>>AAJJJPPSSTTVVVVTTSSPPJJJAA>>9955000--++***))**###   #)**))***++--00166::>>AAAJJPPRRTTWWWWTTRRPPJJAAA>>::66100--++***))**)#     !!))*******,,...1166::>>BBBJJPPRRTTWWWWTTRRPPJJBBB>>::6611...,,*******))!!    !'+++****++,,.//2266::>>BBBJJPPRRTTXXXXTTRRPPJJBBB>>::6622//.,,++****+++'!    ''++*****++,,,//2377;;;>>BBJJPPRRTTYYYYTTRRPPJJBB>>;;;7732//,,,++*****++''      ,,,*******++--003377;<>AAHHNNRSRRVVVVVVRRSRNNHHAA>><<::7633000.-,,----//00---$  $$$000000..-.---..014477::<<>>CCIIOOSSRRVVVVVVRRSSOOIICC>><<::774410..---.-..000000$$$  ++0111000//..-.//114688;;<<>>EEJJQQSSSSVVTTVVSSSSQQJJEE>><<;;886411//.-..//0001110++   &%%+01112200//..../0336688<<==??EEJJQRTTTTVVRRVVTTTTRQJJEE??==<<8866330/....//00221110+%%&    """ *&&///00222200//.///004477::<<>>@@GGKKRRTTTTVVRRVVTTTTRRKKGG@@>><<::774400///.//00222200///&&* """   ##**&&--**211/633242201000/11222468;;;<>>@BHHLLSSTTUUVVPPVVUUTTSSLLHHB@>><;;;86422211/000102242336/112**--&&**##  $$#+**///22226666777443311111111446688;<==>BBHHLLTTUUVVUUOOUUVVUUTTLLHHBB>==<;88664411111111334477766662222///**+#$$  $$$*++////2224446688796634111122224488::<<=>@@EEINNTTUUVVUUOOUUVVUUTTNNIEE@@>=<<::8844222211114366978866444222////++*$$$  $$$$**+--/022333446688998844222223445588;;==>>@@GGJPPUUVVWWTTMMTTWWVVUUPPJGG@@>>==;;885544322222448899886644333220/--+**$$$$  $$$$)))++-..00224444668:;;;994422333366779;;>>??AAGGJJRVVVVWWSSLLSSWWVVVVRJJGGAA??>>;;977663333224499;;;:86644442200..-++)))$$$$  #$$(((**+,,./00222455588::==99553334556679;;<>>@@CCHHLLRVVVWXXRRLLRRXXWVVVRLLHHCC@@>><;;97665543335599==::88555422200/.,,+**((($$#  ##%&&))*++,-//11123446688<<=?;;553344668899<<==??@CFIIMMSSWWWXXRRLLRRXXWWWSSMMIIFC@??==<<998866443355;;?=<<88664432111//-,++*))&&%##   %%(((**+,--/0012335557999==??<<6655556::;;<???ACCHHKOOUUZZYWWRRNNRRWWYZZUUOOKHHCCA???>==<:88665577<<@@?=::77664422000//,,,,))(''%#    %%'(()+,,../000122446788:;;?AAA=786666::<<=???@AACFIILQQVVZZYWWRRNNRRWWYZZVVQQLIIFCAA@???=<<::666687=AAA?;;:887644221000/..,,+)(('%%    $%%(((++---//0111333557799;=AAAB==88777:;>>???AAABFFIINSSXXZZZWWRROORRWWZZZXXSSNIIFFBAAA???>>;:77788==BAAA=;9977553331110//---++(((%%$   $$$''***,,///0012224455779::=BBBB>>::7999;=@AAAAABDDHJJNNUYY[[ZWWSSQQSSWWZ[[YYUNNJJHDDBAAAAA@=;9997::>>BBBB=::9775544222100///,,***''$$$  !!!''))),,,..000022333566688:;>>DDCC>;;99;;==@@BBBBBDFIKKOOUYY[[ZWWTTSSTTWWZ[[YYUOOKKIFDBBBBB@@==;;99;;>CCDD>>;:886665333220000..,,,)))''!!!   %%%))+++...0002223334557789;;??DDCC>><<::;??BBBDDDDFFIMMQQVVZ\\ZZWTTSSTTWZZ\\ZVVQQMMIFFDDDDBBB??;::<<>>CCDD??;;9877554333222000...+++))%%%    $$%((+++--//0111333444555779:<>AAFFFFFFJJLLNSSXX\]][[YWWWWWWY[[]]\XXSSNLLJJFFFFFFAA>>=<=@@DDEEAA==::876655544422211///---++(''$#   ! ##&''*+---//111223344456667789::>BBEFDD@A>>=@@CCFFHHHHHJMMPPUYY\]][[ZYYYYYYZ[[]]\YYUPPMMJHHHHHFFCC@@=>>A@DDFEBB>::987766654443322111//---+*''&## !  !!###&&**---///1122233444555667899;;>>CCFFDDA@@??@EEHHHKJJJLMMRRW[[]]^\\ZYYYYYYZ\\^]][[WRRMMLJJJKHHHEE@??@@ADDFFCC>>;;9987665554443322211///---**&&###!!    ""##%%%))---//11122333444556667788::>ABFGGFFDDEDDGGJNNPSSQQQSSY]]`aaa``________``aaa`]]YSSQQQSSPNNJGGDDEDDFFGGFBA>>;;:988777666555443332221100,,**(((&&%%##!"   ""$#&&''((***+,.011222333445556677788899::<>>BBGGGGFEEFFFGGLLPSSUSSRUUY]_bccbbaaaaaaaaaabbccb_]YUURSSUSSPLLGGFFFEEFGGGGBB>><::998887776655544333222110.,+***((''&&#$""    !! ##$$&&(())***++..01222334445555666778999::;<<>?CCGGGFGFFFHHILMRRUUSUTTW[[_bbeddccccddccccddebb_[[WTTUSUURRMLIHHFFFGFGGGCC?><<;::99987766655554443322210..++***))((&&$$## !!    !$$#%%&&(())**+++--002233344444556667788899::;;==?DDGHHGGGGHHJJJMRSWWWUTVY]]addeddceeffffeecddedda]]YVTUWWWSRMJJJHHGGGGHHGDD?==;;::998887766655444443332200--+++**))((&&%%#$$!   !"" ""$&&%''(())**+++,,..1133333445556666778899:::<<=>@@EEHHHGGHJJJLLOSSXXXWVVY__bffgfffeeffffeefffgffb__YVVWXXXSSOLLJJJHGGHHHEE@@>=<<:::9988776666555443333311..,,+++**))((''%&&$"" ""!  !!"##"$$&'''(())**++++,-.//223334444556667788899::;;<<>AAEFHHIHHHKKLLNPPTXXYXXX[[adggihhhhhhhhhhhhhhiggda[[XXXYXXTPPNLLKKHHHIHHFEAA><<;;::998887766655444433322//.-,++++**))(('''&$$"##"!!    !!###%%$&&'((())**+++++,../113333444445566778899:::;;<=??BBFIIIIIJJKNNNPQUUXYYYZ]]addijjjjjjjkkjjjjjjjidda]]ZYYYXUUQPNNNKJJIIIIIFBB??=<;;:::998877665544444333311/..,+++++**))((('&&$%%###!!    """"$#$$%&&&''()))**++++++,,..1113333444556667788999::;<<=@@BCGGJJIIKKMMPOOQUUXYYY[^^cffijjmlllmmmmlllmjjiffc^^[YYYXUUQOOPMMKKIIJJGGCB@@=<<;::9998877666554443333111..,,++++++**)))(''&&&%$$#$""""   """"##$$%$%%&&''(())****++++++--//12233334455666778999::;;;==>@@CHHJKJJJLLOPQQRUUXXYY[[`eehkllmlllmmmmlllmllkhee`[[YYXXUURQQPOLLJJJKJHHC@@>==;;;::99987766655443333221//--++++++****))((''&&%%$%$$##""""    """"####$$%%&&&&''(())******++++++--/02233333445566778899:;;<<=>??ADDJJKKKKLNQRRSSSUXXYZ\\`ggkmnnonoooooooononnmkgg`\\ZYXXUSSSRRQNLKKKKJJDDA??>=<<;;:99887766554433333220/--++++++******))((''&&&&%%$$####""""   !!""""###$$%%&&&&''(((())******++++,,..0122333445555677899::;;<==>@@ACFJKLLMMMQTTUSVTUXXYZZ]aggmoppqqqqrqqrqqqqppomgga]ZZYXXUTVSUTTQMMMLLKJFCA@@>==<;;::9987765555443332210..,,++++******))((((''&&&&%%$$###""""!!   !!""""####$$%%%&&''(((())))******++,,,,//222333444556678899:;;<==>>>@@DGGKMMMPPQTWYYVVVVXY[[^ccjmoossssstsstsssssoomjcc^[[YXVVVVYYWTQPPMMMKGGD@@>>>==<;;:998876655444333222//,,,,++******))))((((''&&%%%$$####""""!!    !!"######$$%%%%&&'''((()(())******++,,-/002233344455666788::;<<==>>?@ADDIMMOOORRTW]][VZWYZZ[_eelprrsssuvwuuwvusssrrplee_[ZZYWZV[]]WTRROOOMMIDDA@?>>==<<;::887666554443332200/-,,++******))(()((('''&&%%%%$$######"!!    !!"""####$$$$%%&&&&'''(((((())****++++--00223344444556678899;;===>>?@@ACEJJNOQQRTV[[a``Z[[[\]__gnrruuuuuvwuuwvuuuuurrng__]\[[[Z``a[[VTRQQONJJECA@@?>>===;;99887665544444332200--++++****))(((((('''&&&&%%$$$$####"""!!    !!""""###$$$$%%%&&&'''(((())))**++++,,..223344445555677889:;<====>>?AADGGLLPRSSTXX]aeea[[`_`aagquuwxwwwxyxxyxwwwxwuuqgaa`_`[[aeea]XXTSSRPLLGGDAA?>>====<;:988776555544443322..,,++++**))))(((('''&&&%%%$$$$###""""!!    !!!""""####$$$%%%%&&'''(((())**++++,,..0033445555556667799;;<==>>>??ABDFHLNQRRUVXZ^ddjicc`eddejquxzzyyyz{zz{zyyyzzxuqjedde`ccijdd^ZXVURRQNLHFDBA??>>>==<;;9977666555555443300..,,++++**))(((('''&&%%%%$$$####""""!!!   !!!""""####$$$%%&&&&''((())***+++--..//22446565666677788::<<>>>>>?@@DDFJJNSSTVVXZ``ejoolheljjmttxz|{{{}~||~}{{{|zxttmjjlehlooje``ZXVVTSSNJJFDD@@?>>>>><<::88777666656564422//..--+++***))(((''&&&&%%$$$####""""!!!  !!!!"""####$%%&&&&'''((()**+++,..//001144667676667778899<<==>>>???BBFGGMPPUVVXZ]]cgllrrpploorrw{||{{~€~~€~{{||{wrroolpprrllgc]]ZXVVUPPMGGFBB???>>>==<<998877766676766441100//..,+++**)((('''&&&&%%$####"""!!!!  !!!!"""##$$%%%&&''''(())*,,--,.22333344777997867777899;<==>>>??@@BDFJJMSSUWWX]]`fjjnruuuroovv|~~~~}~€~~€~}~~~~|vvooruuurnjjf`]]XWWUSSMJJFDB@@??>>>==<;99877776879977744333322.,--,,*))((''''&&%%%$$##"""!!!!   !!!!""###$$%%&&'''(())++,//002277777788999::9988888::===>>??@@AABFFHLLOUUVY[[`cfflptuwwusssy€‚€€€‚‚‚‚€€€‚€ysssuwwutplffc`[[YVUUOLLHFFBAA@@??>>===::8888899::999887777772200//,++))(('''&&%%$$###""!!!!    !!"""##$$%%%&&&'(())++--/335577;;;;;;;;<<:;;9999899<<>>??@@@AACDDIJJORUWXY\^dffipssuwwwwvvyƒ…„„‚‚ƒ…„ƒƒ„…ƒ‚‚„„…ƒyvvwwwwusspiffd^\YXWUROJJIDDCAA@@@??>><<9989999;;:<<;;;;;;;;775533/--++))(('&&&%%%$$##"""!!    !!!""##$$$%%&&'((**++--00588::;;>>>>>>??>>?<<::999::==??AA@AABCCGILMSSUYYZ_aadjmpptvwwwyyy|ƒ…„‡…„‡ˆ‡††‡ˆ‡„…‡„…ƒ|yyywwwvtppmjdaa_ZYYUSSMLIGCCBAA@AA??==::999::<>??>>>>>>;;::88500--++**(('&&%%$$$##""!!!    !""####$%%&&''(***+..115::<<:=?>@@@@@@AA?@@<<:::::<?=:<<::511..+***(''&&%%$####""!    !!"""##$$%%&&'))**,+.2266:==>>=?@@AAAABBBBC@@<<;;;;;>>AACCCBCCGGINNOTVZZ\``cillorstvxxyz}~‚‚‰Œ‹ˆˆ‹Œ‹‹Œ‹ˆˆ‹Œ‰‚‚~}zyxxvtsrollic``\ZZVTONNIGGCCBCCCAA>>;;;;;<<@@CBBBBAAAA@@?=>>==:6622.+,**))'&&%%$$##"""!!    !!!""##$%%&&(()**,,..277;;=??@@@@AABBBBCCCCC@@<;;;<=>ACCDDDDCFFKMNRRWWY]]^dgimoqsstuwy{|}~†ŒŽŒŒŽ‹‹ŽŒŒŽŒ†~}|{ywutssqomigd^]]YWWRRNMKFFCDDDDCCA>=<;;;<@@CCCCCBBBBAA@@@@??=;;772..,,**)((&&%%$##""!!!    !!"##$%%%&(()**,,/.337;;==?@@AABABBBBCCEECC@?<<;;>>@CCEEEEEEEJOOQUUVZ\\`bhhkmqrsstvwz||}~‰’’‘’’ŽŽ’’‘’’‰~}||zwvtssrqmkhhb`\\ZVUUQOOJEEEEEEECC@>>;;<><<==BBCGGFFFEHHNNTUUYYZ^_ddelnpqqrsuwyz|}€„‰“––•––•“’’“•––•––“‰„€}|zywusrqqpnledd_^ZYYUUTNNHHEFFFGGCBB==<<>>BCEEEDCCBCBBBAAA@@?==;8844/,,,*))(('%%$$#"""!    !""##$%%''(()**,,/4488;==>>@@@BBBBCCCCCDEFDDAA==<<@@GGGHHGFHKLLRRTX\\]aabgjlpppqrtvxxz|ƒ‡“–™™›š™—••—™š›™™–“‡ƒ|zxxvtrqpppljgbaa]\\XTRRLLKHFGHHGGG@@<<==AADDFEDCCCCCBBBB@@@>>==;8844/,,**)((''%%$##""!   !""##$$%%'(())*,,//448;;===??@AABBCCDCDCDFEEBB??<<>>FFMMKIIIKKKPPVX\\```efkmmopqqssuvz|}ƒ†‹’—™™ž Ÿš™™šŸ ž™™—’‹†ƒ}|zvussqqpommkfe```\\XVPPKKKIIIKMMFF>><>@@@ABBCDDDDDDEEDDAA====CCLLPLJJKKNNOTZZ[__cdijjkopqqqrtvx|}ƒŠŠ–š›œž¤£¡ŸŸ¡£¤žœ›š–ŠŠƒ}|xvtrqqqpokjjidc__[ZZTONNKKJJLPLLCC====AADDEEDDDDDDCBBA@@@>>=<<::844/,,,*))(''%%$##""    !!##$&&''(()**,,/4488:;;===??@@BBCDDEDDDCCDDBB>><<@@KKSRRMOLNNQRXX]]^bchhimnqqqrrsvxz|€€‚„†–›žžŸ¢¤£¡ŸŸ¡£¤¢Ÿžž›–†„‚€€|zxvsrrqqqnmihhcb^]]XXRQNNLOMRRSKK@@<<>>BBDDCCDDDEDDCBB@@??===;;:8844/,,**)((''&&$##!!    !!#$$&&'(())*,,//447::;<<=>>?@ABCCDEEEDCCCCBB@@==>>GGSVVSSOQOQUUV[[_aeefjlooprrrssvzz|~ƒ…‡‹œŸ ¡£§¨§¥££¥§¨§£¡ Ÿœ‹‡…ƒ~|zzvssrrrpooljfeea_[[VUUQOQOSSVVSGG>>==@@BBCCCCDEEEDCCBA@?>>=<<;::744//,,*))(('&&$$#!!    !##$&&''(()*,,,/33799;<<==>>?AABBDDEEECCBBBB@@====CCPPWXXUUTTUUYYY]bbcgillnqqssssuvx|~ƒŠ‘–œ¢£¥¨ª««©§§©««ª¨¥£¢œ–‘Šƒ~|xvussssqqnlligcbb]YYYUUTTUUXXWPPCC====@@BBBBCCEEEDDBBAA?>>==<<;99733/,,,*)((''&&$##!    !!#$$&&'(()++,,.23669::<<<=>??ABBDDEFFEEBBBA@@>>==AALLWZZZZXXXUYY]]aaeefjkopsssuuuxyz€€…ˆ‘•™ ¢§ª¬®®®­««­®®®¬ª§¢ ™•‘ˆ…€€zyxuuussspokjfeeaa]]YYUXXXZZZZWLLAA==>>@@ABBBEEFFEDDBBA??>=<<<::96632.,,++)(('&&$$#!!    !##$&&''(**++,..225889;;<<=??@@BCCEEFFFCCAAA@>>==@@IIUZZ[[\\\]]Z]]aaeeiimmnqruuuwwz{|~ˆŠš ¤¦§®°±±±°¯¯°±±±°®§¦¤ šŠˆ~|{zwwuuurqnmmiieeaa]]Z]]\\\[[ZZUII@@==>>@AAACCFFFEECCB@@??=<<;;988522..,++**(''&&$##!   !!#%%&&'))*++,,.0057799:;<==?@@AABEEFGGFFBBB@??>>??FFORYZ[\\^``aa_bffeimmmqquuuxwwzz{…ˆ”–˜š¤¦§©¬®³´´´´²²´´´´³®¬©§¦¤š˜–”ˆ…{zzwwxuuuqqmmmieffb_aa``^\\[ZYROFF??>>??@BBBFFGGFEEBAA@@?==<;:9977500.,,++*))'&&%%#!!  !##%%&(()**++,--033779::<<=>>@AABDDFFHHHEEBAA?>>??BDLVVZZ[\]^`bbddggjjmmqqttuwxzzz~~‹‹’Ÿ ¢¤«¬­¯±³´··¶µµ¶··´³±¯­¬«¤¢ Ÿ’‹‹~~zzzxwuttqqmmjjggddbb`^]\[ZZVVLDB??>>?AABEEHHHFFDDBAA@>>=<<::977330--,++**)((&%%##!  ""#%%'(())**+,,-//26689:;;=>>@@ABBCFFHIIHHDDD@@???BJJTTYZZ\\]^bbddggkjnmqqttvwyyz}}}‚„‡˜šœ§§©ª°±²´µµ¶··¶¸¸¶··¶µµ´²±°ª©§§œš˜‡„‚}}}zyywvttqqmnjkggddbb^]\\ZZYTTJJB???@@DDDHHIIHFFCBBA@@>>=;;:98662//-,,+**))(('%%#""  ""##%%'((***++,--/2256899;==>@@ABBCEEHHIJJHHHCC@@?BHHRRXXZ[[]]`bdegkkkoqqqtvvvxx{|}€Œ”£¤¥¦­®®°¶¶··¸¹¹¹¹¸¸¹¹¹¹¸··¶¶°®®­¦¥¤£”Œ€}|{xxvvvtqqqokkkgedb`]][[ZXXRRHHB?@@CCHHHJJIHHEECBBA@@>==;9986522/--,++***(('%%##""   ""##%''(**+,+,,-//145779;;<>>@AABCCEGGIKKKKLHHCC@@CHPPWWZZ[]]``chhhlpptruuxwxxyy}}~‡‡‰œŸ¡¬¬­²³³´µ¹¹ºº»»»»ºº»»»»ºº¹¹µ´³³²­¬¬¡Ÿœ‰‡‡~}}yyxxwxuurtpplhhhc``]][ZZWWPPHC@@CCHHLKKKKIGGECCBAA@>><;;977541//-,,+,+**(''%##""   !!"$$&&'))*++,,,--/004469::<>>@@AABCCEGGIKLLLMMIICCEHHPVVYY[\\__chhnnsruuwwyxzyyxz{‚„…•˜œ©ª«±±²··¸¸¹¼¼¼½½½½¼¼½½½½¼¼¼¹¸¸··²±±«ª©œ˜•…„‚{zxyyzxywwuursnnhhc__\\[YYVVPHHECCIIMMLLLKIGGECCBAA@@>><::964400/--,,,++*))'&&$$"!!   !##%$&((*)*++,,,-..033688:<<=>@AABDDEEGIIKMLNONNIIJJJPUUYYZ[\^^bchootswvxyyyzyyzz€€‘¢¤¦®®°´µµ¶¹º»»»¾¾¾¿¿¿¾¾¿¿¿¾¾¾»»»º¹¶µµ´°®®¦¤¢‘€€zzyyzyyyxvwstoohcb^^\[ZYYUUPJJJIINNONLMKIIGEEDDBAA@>=<<:886330..-,,,++*)*((&$%##!    "##%'')**++,,--.-.0035578:;<=??ACCDEEGIIKKMOOQQOOPNNQQVXXZ\\^aaggnovuyyyyyyyzzzzŽŸ¡¢«¬­²³³·¸¹¼¼½½½¾ÀÀÀÁÁÀÀÁÁÀÀÀ¾½½½¼¼¹¸·³³²­¬«¢¡ŸŽzzzzyyyyyyyuvonggaa^\\ZXXVQQNNPOOQQOOMKKIIGEEDCCA??=<;:8755300.-.--,,++**)''%##"   ! ""#%%'))+,+,----.//0224579;;==?AACDDEGGIKKMOOQRRRPSSSSVVYZ\\^^aeemmvv|}zyyyyzzz~~~‹Œž¨©ª¯±µ¶¶ºº»¼¾¾¿¿¿ÂÂÂÂÂÁÁ¿¿¿¾¾¼»ºº¶¶µ±¯ª©¨žŒ‹~~~zzzyyyyz}|vvmmeea^^\\ZYVVSSSSPRRRQOOMKKIGGEDDCAA?==;;9754220//.----,+,+))'%%#"" !  !!"$#%((*++,,----../00124668;;?ACCEGGIJJLLLNPQSUWWXZZZZ\\\\^^`beekuu€‚‡ƒ~{{zz}}‡——¡¢¨¨¯¯µµ··¹»»¾¾ÀÀÀÁÃÃÄÄÄÅÆÆÅÅÆÆÅÄÄÄÃÃÁÀÀÀ¾¾»»¹··µµ¯¯¨¨¢¡——‡}}zz{{~ƒ‡‚€uukeeb`^^\\\\ZZZZXWWUSQPNLLLJJIGGECCA?><::8863110//...---,,+**(&&$%#!!    !!#%%')(*++,---..../00135578:<<>AACEEHILLLNNNPPSSUWYZZ[[\]]]^^`beeiiq||†††|}z~†‡•–Ÿ¡¦¨­®³µ´µ¶²·¶»¿ÁÁÂÂÄÅÅÆÆÆÆÇÆÆÇÆÆÆÆÅÅÄÂÂÁÁ¿»¶·²¶µ´µ³®­¨¦¡Ÿ–•‡†~z}|†††||qiieeb`^^]]]\[[ZZYWUSSPPNNNLLLIHEECAA><<:87553100/....---,++*()'%%#!!    !##%%'))*++,---...//011355799<>>ACEEHJJMNNOOOPRRTWWYZZ[\]]^^_`bbehhnnx„„Šƒƒ€€‡‡“”ž¤¥«¬²²²²°°±±²´´¼ÁÂÃÃÅÅÆÆÇÇÈÈÆÆÈÈÇÇÆÆÅÅÃÃÂÁ¼´´²±±°°²²²²¬«¥¤ž”“‡‡€€ƒƒŠ„„xnnhhebb`_^^]]\[ZZYWWTRRPOOONNMJJHEECA>><997553110//...---,++*))'%%##!    !!#%%'')**+,,---.../001235779<<>AACFEHKJMNNPPRPRSVVYZZ\\]^^^`aabeehllq|€‰Šˆ…‚‚ˆ‡’“£¤©ª°±²²®¯°°²²³´¶¿ÂÄÄÅÇÇÈÈÈÉÉÈÈÉÉÈÈÈÇÇÅÄÄ¿¶´³²²°°¯®²²±°ª©¤£“’‡ˆ‚‚…ˆŠ‰€|qllheebaa`^^^]\\ZZYVVSRPRPPNNMJKHEFCAA><<977532100/...---,,+**)''%%#!!    !!#%%'))*++,---...//011225799<>>ACCFIILMMOPQQRSSSUVXZ\\^___aaaccfillqyy†Š††Š‰’œœ¢¢§©®²²®®®¯¯³²µ´¶¶ºÂÄÅÆÈÈÉÉÊÊÊÉÉÊÊÊÉÉÈÈÆÅĺ¶¶´µ²³¯¯®®®²²®©§¢¢œœ’‰Š††Š†yyqllifccaaa___^\\ZXVUSSSRQQPOMMLIIFCCA>><997522110//...---,++*))'%%#!!   !##%'')**+,,---...//01135779<<>AACGGJLNNOPPQRRSTTUVVX\]__``bbddgjmmqqw‚‚Œ‰‹‹““›¢¢¦¬¬²²¯®­®²³¹¸¼º¶¸º¿ÅÆÇÈÉÊÊËËËÊÊËËËÊÊÉÈÇÆÅ¿º¸¶º¼¸¹³²®­®¯²²¬¬¦¢¢›““‹‹‰Œ‚‚wqqmmjgddbb``__]\XVVUTTSRRQPPONNLJGGCAA><<97753110//...---,,+**)''%##!  !!##%'')**+,,---.../001335779<<>ACCGJJLNNOPQQRSUTUVVWZZ\_aabddeikknrrww‰•“’Œ‘šš¡¡¦««±±±­¬°±¸¹½½¼¾¼»¹ÀÄÇÈÉÊËÌÌÌÌËËÌÌÌÌËÊÉÈÇÄÀ¹»¼¾¼½½¹¸±°¬­±±±««¦¡¡šš‘Œ’“•‰wwrrnkkieddbaa_\ZZWVVUTUSRQQPONNLJJGCCA><<977533100/...---,,+**)''%##!!  "!#%%'))*++,,,--.../0113557::<>>ADCGJLLNOOPQRRSUUVVWWY[^^`bbdgfjmppux~~†““—––ž ¥©ª®³²­­¯¯·¼½½ÀÀÂÀ¾¾»ÆÈÉÊËÌÍÍÍÍÌÌÍÍÍÍÌËÊÉÈÆ»¾¾ÀÂÀÀ½½¼·¯¯­­²³®ª©¥ ž––—““†~~xuppmjfgdbb`^^[YWWVVUUSRRQPOONLLJGCDA>><::7553110/...--,,,++*))'%%#!"  ""#%''))*++,,,-...//0244588:<<>AADGKKMNNOPQQRSSUVWWWYY[\``beehkoosvzz~……Ž˜™›”‘“›¢¢§¨­³³¯®®³µ»¼¿ÀÂÂÄÃÁ¾¿ÉÊËËÍÎÎÎÏÍÍÏÎÎÎÍËËÊÉ¿¾ÂÁÃÄÂÂÀ¿¼»µ³®®¯³³­¨§¢¢›“‘”›™˜Ž……~zzvsookheeb``\[YYWWWVUSSRQQPONNMKKGDAA><<:8854420//...-,,,++*))''%#""  "##%'')**+,,,--.../00246688:<<>ADHHKMMNOOPQQRSTUVWXXYZZ\_addhllptww{ƒ€ˆŽ––›šš”–˜£¥ª°²²±®±²¹¾¾¿ÁÂÄÄÅÅÆÁ¿ÄËÌÍÎÏÏÏÐÎÎÐÏÏÏÎÍÌËÄ¿ÁÆÅÅÄÄÂÁ¿¾¾¹²±®±²²°ª¥£˜–”šš›––Žˆ€ƒ{wwtpllhdda_\ZZYXXWVUTSRQQPOONMMKHHDA><<:88664200/...--,,,+**)''%##"  ""$&&'')*++,,,-../000224778::@ACEHHLPSSVXZZZZZZZZ[Z\]^^^`cgglqxƒƒ…‡ŠŒŽ‹ˆ‡ˆ‹””ž ¡£¦²¶¶¶·¼½½ÂÄÇÉËÌÍÌÌËËÌÍÍÈÉÓÔÖ×ÖÌÌÖ×ÖÔÓÉÈÍÍÌËËÌÌÍÌËÉÇĽ½¼·¶¶¶²¦£¡ ž””‹ˆ‡ˆ‹ŽŒŠ‡…ƒƒxqlggc`^^^]\Z[ZZZZZZZZXVSSPLHHECA@><<;977544211/.--,+++**)''&$$"!! !""$$&'))*++++,-../112445799:<<>@BBEGKLOSVVYZZZZZZZZ\]]^__aacglqvv}ƒ……‡ŠŽŽŽ‹‰Š‹’˜› ¡¢ª®´··»¼¼ÀÄÅÇÊËÍÍÍÌËÊËÌÍÅÈÔÕ××ÓÏÏÓ××ÕÔÈÅÍÌËÊËÌÍÍÍËÊÇÅÄÀ¼¼»··´®ª¢¡ ›˜’‹Š‰‹ŽŽŽŠ‡……ƒ}vvqlgcaa__^]]\ZZZZZZZZYVVSOLKGEBB@><<:997544211/..-,++++*))'&$$""!  ""#%%'))*++,--.///122455789:<>>@BEEGKKNRVYYZ[[[Z[[[]^_^``adihmrvv{‚…ˆˆŠŽŠŠ“–›¡¢¢¤®¶¸¸¹¼½¾ÂÆÉÊÌÎÎÎÍËÉÊÌÌÇÊÔÖ×ÖÑÑÑÑÖ×ÖÔÊÇÌÌÊÉËÍÎÎÎÌÊÉÆÂ¾½¼¹¸¸¶®¤¢¢¡›–“ŠŠŽŠˆˆ…‚{vvrmhida``^_^][[[Z[[[ZYYVRNKKGEEB@>><:987554221///.--,++*))'%%#""    ""#%%'((*++,--./0012245578::<>>@BEGGJMMRVYY[\[[[[\]]_`aaabeiinsv{…ˆ‹ŽŽŽ‹ŠŠŒ“–šŸ ¢£§ªµ¸¹»¼½¿ÄÇÈÊÍÎÏÏÍËÉÉËËÆÍÕ×ÖÓÑÓÓÑÓÖ×ÕÍÆËËÉÉËÍÏÏÎÍÊÈÇÄ¿½¼»¹¸µª§£¢ Ÿš–“ŒŠŠ‹ŽŽŽ‹ˆ…{vsniiebaaa`_]]\[[[[\[YYVRMMJGGEB@>><::8755422100/.--,++*(('%%#""    !!#$$&((*+,,-../0012245668::<>@@BDGGIMQQUY[[\\\\\\^``aaaacgkpttw{„„ˆ‹ŽŽ‹Š‘“–šž£¤¤¦«µºº»¼½ÁÄÆÉËÌÎÏÏÎÉÈÈËÉÇÑÖ×ÔÑÔÔÔÔÑÔ×ÖÑÇÉËÈÈÉÎÏÏÎÌËÉÆÄÁ½¼»ººµ«¦¤¤£žš–“‘Š‹ŽŽ‹ˆ„„{wttpkgcaaaa``^\\\\\\[[YUQQMIGGDB@@><::8665422100/..-,,+*((&$$#!!    !##$&&())+,,-../0112445668:<<>@BBEGIILOQSX[]]]]]\]_accbceiimqtww{~ƒ‡‰‹‹‹ŒŠ‹‹’•–™™ž¢¥¦¨©²¸»¼¾½¿ÃÇÊËÍÏÏÐÏËÇÈÊÈÉÓÖÖÒÔÖÕÕÖÔÒÖÖÓÉÈÊÈÇËÏÐÏÏÍËÊÇÿ½¾¼»¸²©¨¦¥¢ž™™–•’‹‹ŠŒ‹‹‹‰‡ƒ~{wwtqmiiecbcca_]\]]]]][XSQOLIIGEBB@><<:8665442110/..-,,+))(&&$##!    !""$%%())+,,-../0112445688:<<>@BBEGIILNRSX[]]^_]^^_bcddeginnqtwzz}‚…†‰‰ˆ‰Š‹Ž”“–˜™ž£¢¦§©«³º»½¾¿ÀÄÅÈËÎÐÐÐÎÊÆÇÈÉËÕÖÕÒÕ×ÖÖ×ÕÒÕÖÕËÉÈÇÆÊÎÐÐÐÎËÈÅÄÀ¿¾½»º³«©§¦¢£ž™˜–“”ދЉˆ‰‰†…‚}zzwtqnnigeddcb_^^]_^]][XSRNLIIGEBB@><<:8865442110/..-,,+))(%%$""!    !""$%%'((*+--.//0113445688:<>>@CCEHJLLNRRV[^_^___``bdffhjlorrtvx{}}ƒ„‡ˆˆ‰‹•š˜š››£¨ª¨ª«¯·¼¾¿¿ÀÂÆÉÍÎÐÑÑÏÊÆÆÇÈÐÕÔÒÔÖ××××ÖÔÒÔÕÐÈÇÆÆÊÏÑÑÐÎÍÉÆÂÀ¿¿¾¼·¯«ª¨ª¨£››š˜š•‹‰ˆˆ‡„ƒ}}{xvtrroljhffdb``___^_^[VRRNLLJHECC@>><:8865443110//.--+*(('%%$""!    ""#$''(**+--.//011345568::<>>ADGGHJLLNQTTY^__```acbehjllnprttuwz}€€‚„†‡‰‰‹‘—œžœž§«­­¯²´º¿ÀÀÁÃÅÈËÏÑÑÒÏÉÆÆÈËÓÓÑÑÕÖØØØØÖÕÑÑÓÓËÈÆÆÉÏÒÑÑÏËÈÅÃÁÀÀ¿º´²¯­­«§žœžœ—‘‹‰‰‡†„‚€€}zwuttrpnlljhebca```__^YTTQNLLJHGGDA>><::865543110//.--+**(''$#""    "##$&&'))*,,-//013345568::<@DADGJJKMLNPTYY]`aabbaccfhkmooqrtuuwz}ƒ…‡‰Œ‘‘™ž¡¡ŸŸ¡¥ª®¯°²¶½ÀÀÁÂÃÆÉÎÎÑÓÓÏÊÆÇÍÐÓÓÐÓÕÖØØØØÖÕÓÐÓÓÐÍÇÆÊÏÓÓÑÎÎÉÆÃÂÁÀÀ½¶²°¯®ª¥¡ŸŸ¡¡ž™‘‘Œ‰‡…ƒ}zwuutrqoomkhfccabbaa`]YYTPNLMKJJGDAD@<::865543310//-,,*))'&&$##"    !##$%&'))*,,-//023345578::<@DDHLNNOOPNPSWW\`bddbbcffikmppqstuxx{}ƒ„„†‰Œ’š¡ ¢¢¢ £¥ª°°±³µº¿ÂÃÄÃÆÉÍÐÒÔÔÑÌÇÌÍÓÒÐÓÕÖÖרØ×ÖÖÕÓÐÒÓÍÌÇÌÑÔÔÒÐÍÉÆÃÄÿºµ³±°°ª¥£ ¢¢¢ ¡š’Œ‰†„„ƒ}{xxutsqppmkiffcbbddb`\WWSPNPOONNLHDD@<::875543320//-,,*))'&%$##!    !##$%%'((*+--/0023345778::>CIINQRNOOPPQRUYY^bddddeffiknpqqstvx{{}~€‚ƒ……ˆŒ’›¢¤££¢£¤§¨¬±³µµ¸½ÂÄÅÆÈÌÏÒÒÔÕÔÏÎÌÓÓÑÑÖÖÖÕ×ÙÙ×ÕÖÖÖÑÑÓÓÌÎÏÔÕÔÒÒÏÌÈÆÅĽ¸µµ³±¬¨§¤£¢££¤¢›’Œˆ……ƒ‚€~}{{xvtsqqpnkiffeddddb^YYURQPPOONRQNIIC>::8775433200/--+*(('%%$##!    !""#%%'((*+--/0023346779>GPTTVXYYZZ[[\]__`bceegikllnpruwwy{|}{{|}~€‚„‡‰Œ ®³µµ··¸º»½¿ÁÁÃÅÇÊÌÏÑÒÔÖ×ÙÚÚÛÜÚÚÙÝÝÝÝÛÛÛÛÛÛÛÛÝÝÝÝÙÚÚÜÛÚÚÙ×ÖÔÒÑÏÌÊÇÅÃÁÁ¿½»º¸··µµ³® Œ‰‡„‚€~}|{{}|{ywwurpnllkigeecb`__]\[[ZZYYXVTTPG>>9755311/-++)''&%%$##"!!    !!"##$%%&'')++-/1135579>>GPTTVXYYZZ[[\]__`bceegikllnpruwwy{|}€‚ƒ„††‡ˆŠŒž®´¶¶¸º¼¾¿ÁÃÄÆÈÉËÌÎÏÑÓÔÖ×ÙÚÛÛÜÜÝÚÞÞÞßßÞÞßßÞÞßßÞÞÞÚÝÜÜÛÛÚÙ×ÖÔÓÑÏÎÌËÉÈÆÄÃÁ¿¾¼º¸¶¶´®žŒŠˆ‡††„ƒ‚€}|{ywwurpnllkigeecb`__]\[[ZZYYXVTTPG>>9755311/-++)''&%%$##"!!    !!"##$%%&'')++-/1135579>>GPTTVXYYZZ[[\]__`bceegikllnpruwwy{|}€‚ƒ„††‡ˆŠŒž®´¶¶¸º¼¾¿ÁÃÄÆÈÉËÌÎÏÑÓÔÖ×ÙÚÛÛÜÜÝÚÞÞÞßßÞÞßßÞÞßßÞÞÞÚÝÜÜÛÛÚÙ×ÖÔÓÑÏÎÌËÉÈÆÄÃÁ¿¾¼º¸¶¶´®žŒŠˆ‡††„ƒ‚€}|{ywwurpnllkigeecb`__]\[[ZZYYXVTTPG>>9755311/-++)''&%%$##"!!    !!"##$%%&'')++-/1135579>>GPTTVXYYZZ[[\]__`bceegikllnpruwwy{|}{{|}~€‚„‡‰Œ ®³µµ··¸º»½¿ÁÁÃÅÇÊÌÏÑÒÔÖ×ÙÚÚÛÜÚÚÙÝÝÝÝÛÛÛÛÛÛÛÛÝÝÝÝÙÚÚÜÛÚÚÙ×ÖÔÒÑÏÌÊÇÅÃÁÁ¿½»º¸··µµ³® Œ‰‡„‚€~}|{{}|{ywwurpnllkigeecb`__]\[[ZZYYXVTTPG>>9755311/-++)''&%%$##"!!    !!"##$%%&(()++-/1135569==EOTTVWWWVVWWWXZZ[]_bbehjmmoqtvvxz|{{yy{|~€€€‚ƒ†‰Œ“¤¯²°¯¯°³µ¸º½¿ÁÃÅÇÉËÍÐÒÔÖ×ÙÙÚÛØÙÜÝÝÝÝÝÛÛÛÚÚÛÛÛÝÝÝÝÝÜÙØÛÚÙÙ×ÖÔÒÐÍËÉÇÅÃÁ¿½º¸µ³°¯¯°²¯¤“Œ‰†ƒ‚€€€~|{yy{{|zxvvtqommjhebb_][ZZXWWWVVWWWVTTOE==9655311/-++)((&%%$##"!!    !!!"##$%%&(()++-/1135569==EOTTVWWWUUUUVVWWXZ\__beillorsuuxzvuwzz|}~‚ƒ†‰ª­­­­­¯²µ¸º½¿ÁÃÅÇÉËÍÏÒÔÖרÙÚÙÙÜÜÝÝÝÝÝÜÚÙÛÛÙÚÜÝÝÝÝÝÜÜÙÙÚÙØ×ÖÔÒÏÍËÉÇÅÃÁ¿½º¸µ²¯­­­­­ª‰†ƒ‚~}|zzwuvzxuusrollieb__\ZXWWVVUUUUWWWVTTOE==9655311/-++)((&%%$##"!!!    !!!"##$&&'((*,,./1135568<CIINQRNOOPPQRUYY^bddddeffiknpqqstvx{{}~€‚ƒ……ˆŒ’›¢¤££¢£¤§¨¬±³µµ¸½ÂÄÅÆÈÌÏÒÒÔÕÔÏÎÌÓÓÑÑÖÖÖÕ×ÙÙ×ÕÖÖÖÑÑÓÓÌÎÏÔÕÔÒÒÏÌÈÆÅĽ¸µµ³±¬¨§¤£¢££¤¢›’Œˆ……ƒ‚€~}{{xvtsqqpnkiffeddddb^YYURQPPOONRQNIIC>::8775433200/--+*(('%%$##!    !##$%&'))*,,-//023345578::<@DDHLNNOOPNPSWW\`bddbbcffikmppqstuxx{}ƒ„„†‰Œ’š¡ ¢¢¢ £¥ª°°±³µº¿ÂÃÄÃÆÉÍÐÒÔÔÑÌÇÌÍÓÒÐÓÕÖÖרØ×ÖÖÕÓÐÒÓÍÌÇÌÑÔÔÒÐÍÉÆÃÄÿºµ³±°°ª¥£ ¢¢¢ ¡š’Œ‰†„„ƒ}{xxutsqppmkiffcbbddb`\WWSPNPOONNLHDD@<::875543320//-,,*))'&%$##!    "##$&&'))*,,-//013345568::<@DADGJJKMLNPTYY]`aabbaccfhkmooqrtuuwz}ƒ…‡‰Œ‘‘™ž¡¡ŸŸ¡¥ª®¯°²¶½ÀÀÁÂÃÆÉÎÎÑÓÓÏÊÆÇÍÐÓÓÐÓÕÖØØØØÖÕÓÐÓÓÐÍÇÆÊÏÓÓÑÎÎÉÆÃÂÁÀÀ½¶²°¯®ª¥¡ŸŸ¡¡ž™‘‘Œ‰‡…ƒ}zwuutrqoomkhfccabbaa`]YYTPNLMKJJGDAD@<::865543310//-,,*))'&&$##"    ""#$''(**+--.//011345568::<>>ADGGHJLLNQTTY^__```acbehjllnprttuwz}€€‚„†‡‰‰‹‘—œžœž§«­­¯²´º¿ÀÀÁÃÅÈËÏÑÑÒÏÉÆÆÈËÓÓÑÑÕÖØØØØÖÕÑÑÓÓËÈÆÆÉÏÒÑÑÏËÈÅÃÁÀÀ¿º´²¯­­«§žœžœ—‘‹‰‰‡†„‚€€}zwuttrpnlljhebca```__^YTTQNLLJHGGDA>><::865543110//.--+**(''$#""    !""$%%'((*+--.//0113445688:<>>@CCEHJLLNRRV[^_^___``bdffhjlorrtvx{}}ƒ„‡ˆˆ‰‹•š˜š››£¨ª¨ª«¯·¼¾¿¿ÀÂÆÉÍÎÐÑÑÏÊÆÆÇÈÐÕÔÒÔÖ××××ÖÔÒÔÕÐÈÇÆÆÊÏÑÑÐÎÍÉÆÂÀ¿¿¾¼·¯«ª¨ª¨£››š˜š•‹‰ˆˆ‡„ƒ}}{xvtrroljhffdb``___^_^[VRRNLLJHECC@>><:8865443110//.--+*(('%%$""!    !""$%%())+,,-../0112445688:<<>@BBEGIILNRSX[]]^_]^^_bcddeginnqtwzz}‚…†‰‰ˆ‰Š‹Ž”“–˜™ž£¢¦§©«³º»½¾¿ÀÄÅÈËÎÐÐÐÎÊÆÇÈÉËÕÖÕÒÕ×ÖÖ×ÕÒÕÖÕËÉÈÇÆÊÎÐÐÐÎËÈÅÄÀ¿¾½»º³«©§¦¢£ž™˜–“”ދЉˆ‰‰†…‚}zzwtqnnigeddcb_^^]_^]][XSRNLIIGEBB@><<:8865442110/..-,,+))(%%$""!    !##$&&())+,,-../0112445668:<<>@BBEGIILOQSX[]]]]]\]_accbceiimqtww{~ƒ‡‰‹‹‹ŒŠ‹‹’•–™™ž¢¥¦¨©²¸»¼¾½¿ÃÇÊËÍÏÏÐÏËÇÈÊÈÉÓÖÖÒÔÖÕÕÖÔÒÖÖÓÉÈÊÈÇËÏÐÏÏÍËÊÇÿ½¾¼»¸²©¨¦¥¢ž™™–•’‹‹ŠŒ‹‹‹‰‡ƒ~{wwtqmiiecbcca_]\]]]]][XSQOLIIGEBB@><<:8665442110/..-,,+))(&&$##!    !!#$$&((*+,,-../0012245668::<>@@BDGGIMQQUY[[\\\\\\^``aaaacgkpttw{„„ˆ‹ŽŽ‹Š‘“–šž£¤¤¦«µºº»¼½ÁÄÆÉËÌÎÏÏÎÉÈÈËÉÇÑÖ×ÔÑÔÔÔÔÑÔ×ÖÑÇÉËÈÈÉÎÏÏÎÌËÉÆÄÁ½¼»ººµ«¦¤¤£žš–“‘Š‹ŽŽ‹ˆ„„{wttpkgcaaaa``^\\\\\\[[YUQQMIGGDB@@><::8665422100/..-,,+*((&$$#!!    ""#%%'((*++,--./0012245578::<>>@BEGGJMMRVYY[\[[[[\]]_`aaabeiinsv{…ˆ‹ŽŽŽ‹ŠŠŒ“–šŸ ¢£§ªµ¸¹»¼½¿ÄÇÈÊÍÎÏÏÍËÉÉËËÆÍÕ×ÖÓÑÓÓÑÓÖ×ÕÍÆËËÉÉËÍÏÏÎÍÊÈÇÄ¿½¼»¹¸µª§£¢ Ÿš–“ŒŠŠ‹ŽŽŽ‹ˆ…{vsniiebaaa`_]]\[[[[\[YYVRMMJGGEB@>><::8755422100/.--,++*(('%%#""    ""#%%'))*++,--.///122455789:<>>@BEEGKKNRVYYZ[[[Z[[[]^_^``adihmrvv{‚…ˆˆŠŽŠŠ“–›¡¢¢¤®¶¸¸¹¼½¾ÂÆÉÊÌÎÎÎÍËÉÊÌÌÇÊÔÖ×ÖÑÑÑÑÖ×ÖÔÊÇÌÌÊÉËÍÎÎÎÌÊÉÆÂ¾½¼¹¸¸¶®¤¢¢¡›–“ŠŠŽŠˆˆ…‚{vvrmhida``^_^][[[Z[[[ZYYVRNKKGEEB@>><:987554221///.--,++*))'%%#""  !""$$&'))*++++,-../112445799:<<>@BBEGKLOSVVYZZZZZZZZ\]]^__aacglqvv}ƒ……‡ŠŽŽŽ‹‰Š‹’˜› ¡¢ª®´··»¼¼ÀÄÅÇÊËÍÍÍÌËÊËÌÍÅÈÔÕ××ÓÏÏÓ××ÕÔÈÅÍÌËÊËÌÍÍÍËÊÇÅÄÀ¼¼»··´®ª¢¡ ›˜’‹Š‰‹ŽŽŽŠ‡……ƒ}vvqlgcaa__^]]\ZZZZZZZZYVVSOLKGEBB@><<:997544211/..-,++++*))'&$$""! !!"$$&'')**+++,--./112445779;<<>@ACEHHLPSSVXZZZZZZZZ[Z\]^^^`cgglqxƒƒ…‡ŠŒŽ‹ˆ‡ˆ‹””ž ¡£¦²¶¶¶·¼½½ÂÄÇÉËÌÍÌÌËËÌÍÍÈÉÓÔÖ×ÖÌÌÖ×ÖÔÓÉÈÍÍÌËËÌÌÍÌËÉÇĽ½¼·¶¶¶²¦£¡ ž””‹ˆ‡ˆ‹ŽŒŠ‡…ƒƒxqlggc`^^^]\Z[ZZZZZZZZXVSSPLHHECA@><<;977544211/.--,+++**)''&$$"!!   !!"$$&(()**+++,--.//12246779;;=?AACFIIMPPSVXXYYYYYZZZZ\\\]^_cchmssy€ƒ„„‰Œ‰‰‡ˆ‹™   ¡ª´µµ¶¶»½¿ÀÅÆÉËËÌËËÌÌÍÍÍÈËÓÔÕÖÖÍÍÖÖÕÔÓËÈÍÍÍÌÌËËÌËËÉÆÅÀ¿½»¶¶µµ´ª¡   ™‹ˆ‡‰‰Œ‰„„ƒ€yssmhcc_^]\\\ZZZZYYYYYXXVSPPMIIFCAA?=;;97764221//.--,+++**)((&$$"!!    !!""$&&())*+++,--.//122466799;=??ACFFIMPPSVUWXYXYYYYYZ[\[\]``cinsu{ƒƒƒ…ŠŒŒ‹‡‡‰‰‹Ž—  Ÿ ¦²µµ´¶½½½ÁÂÆÇÉËËËËÌÌÍÍÌÆÏÓÓÕÕÕÏÏÕÕÕÓÓÏÆÌÍÍÌÌËËËËÉÇÆÂÁ½½½¶´µµ²¦ Ÿ  —Ž‹‰‰‡‡‹ŒŒŠ…ƒƒƒ{usnic``]\[\[ZYYYYYXYXWUVSPPMIFFCA??=;997664221//.--,+++*))(&&$""!!    !""$&&())*+++,,-../002446799;==?ADDGJKMPRRUVXXXYYYYYZZZZ[[]`djjov}ƒ„ƒ…ЉЇ††‡‰ŒŒ—ŸŸŸž£¯²µ´´´¹¼¾¿ÁÄÇÈÊÊËËÌÌÌÌÊÃÎÒÔÔÔÕÒÒÕÔÔÔÒÎÃÊÌÌÌÌËËÊÊÈÇÄÁ¿¾¼¹´´´µ²¯£žŸŸŸ—ŒŒ‰‡††‡Š‰Š…ƒ„ƒ}vojjd`][[ZZZZYYYYYXXXVURRPMKJGDDA?==;997644200/..-,,+++*))(&&$""!    !""$$&(()*++++,-../002435779;==?AADGKKMPRRTVUWXXXXYYYYZZ[[]aaekpvv}„ƒ„…‡ˆ‡‡‡ˆˆŠ‘  žŸ¢§´´´³³¸½¾¾ÁÂÆÆÈÊÊËËËÌËÇÆÐÑÓÓÔÔÓÓÔÔÓÓÑÐÆÇËÌËËËÊÊÈÆÆÂÁ¾¾½¸³³´´´§¢Ÿž  ‘Šˆˆ‡‡‡ˆ‡…„ƒ„}vvpkeaa][[ZZYYYYXXXXWUVTRRPMKKGDAA?==;977534200/..-,++++*)((&$$""!    !!"$$&(()**+,,,--.//02335579;;=?AADGGKMMORSUUWWXXXXXYXYYZ\^^bfkkqw~}„……††‡‡‡‡‹–ŸŸŸž¥©²´³²´µ»¾¿ÀÃÄÇÇÉÉÊÊÊËÈÆÆÐÑÒÓÓÓÓÓÓÓÓÒÑÐÆÆÈËÊÊÊÉÉÇÇÄÃÀ¿¾»µ´²³´²©¥žŸŸŸ–‹‡‡‡‡††……„}~wqkkfb^^\ZYYXYXXXXXWWUUSROMMKGGDAA?=;;97553320//.--,,,+**)((&$$"!!   !!""$&(()**++,,,-.//022355799;=??ADHHKMMOQPSTVVWVUWWXXXYZ]]_bbglqvv{„††…†‡‡‰’’“ œ¤¤¬¯´²±²¶½½¿ÀÂÃÅÆÈÈÉÉÊÉÆÁÎÐÐÑÒÒÒÒÒÒÒÒÑÐÐÎÁÆÉÊÉÉÈÈÆÅÃÂÀ¿½½¶²±²´¯¬¤¤œ “’’‰‡‡†…††„{vvqlgbb_]]ZYXXXWWUVWVVTSPQOMMKHHDA??=;997553220//.-,,,++**)((&$""!! !""$&&())*++,,,-../011324799;<ADHHKMMNOOPQQRSTUVWXXYZZ\_addhllptww{ƒ€ˆŽ––›šš”–˜£¥ª°²²±®±²¹¾¾¿ÁÂÄÄÅÅÆÁ¿ÄËÌÍÎÏÏÏÐÎÎÐÏÏÏÎÍÌËÄ¿ÁÆÅÅÄÄÂÁ¿¾¾¹²±®±²²°ª¥£˜–”šš›––Žˆ€ƒ{wwtpllhdda_\ZZYXXWVUTSRQQPOONMMKHHDA><<:88664200/...--,,,+**)''%##"  ""#%''))*++,,,-...//0244588:<<>AADGKKMNNOPQQRSSUVWWWYY[\``beehkoosvzz~……Ž˜™›”‘“›¢¢§¨­³³¯®®³µ»¼¿ÀÂÂÄÃÁ¾¿ÉÊËËÍÎÎÎÏÍÍÏÎÎÎÍËËÊÉ¿¾ÂÁÃÄÂÂÀ¿¼»µ³®®¯³³­¨§¢¢›“‘”›™˜Ž……~zzvsookheeb``\[YYWWWVUSSRQQPONNMKKGDAA><<:8854420//...-,,,++*))''%#""  "!#%%'))*++,,,--.../0113557::<>>ADCGJLLNOOPQRRSUUVVWWY[^^`bbdgfjmppux~~†““—––ž ¥©ª®³²­­¯¯·¼½½ÀÀÂÀ¾¾»ÆÈÉÊËÌÍÍÍÍÌÌÍÍÍÍÌËÊÉÈÆ»¾¾ÀÂÀÀ½½¼·¯¯­­²³®ª©¥ ž––—““†~~xuppmjfgdbb`^^[YWWVVUUSRRQPOONLLJGCDA>><::7553110/...--,,,++*))'%%#!"  !!##%'')**+,,---.../001335779<<>ACCGJJLNNOPQQRSUTUVVWZZ\_aabddeikknrrww‰•“’Œ‘šš¡¡¦««±±±­¬°±¸¹½½¼¾¼»¹ÀÄÇÈÉÊËÌÌÌÌËËÌÌÌÌËÊÉÈÇÄÀ¹»¼¾¼½½¹¸±°¬­±±±««¦¡¡šš‘Œ’“•‰wwrrnkkieddbaa_\ZZWVVUTUSRQQPONNLJJGCCA><<977533100/...---,,+**)''%##!!  !##%'')**+,,---...//01135779<<>AACGGJLNNOPPQRRSTTUVVX\]__``bbddgjmmqqw‚‚Œ‰‹‹““›¢¢¦¬¬²²¯®­®²³¹¸¼º¶¸º¿ÅÆÇÈÉÊÊËËËÊÊËËËÊÊÉÈÇÆÅ¿º¸¶º¼¸¹³²®­®¯²²¬¬¦¢¢›““‹‹‰Œ‚‚wqqmmjgddbb``__]\XVVUTTSRRQPPONNLJGGCAA><<97753110//...---,,+**)''%##!   !!#%%'))*++,---...//011225799<>>ACCFIILMMOPQQRSSSUVXZ\\^___aaaccfillqyy†Š††Š‰’œœ¢¢§©®²²®®®¯¯³²µ´¶¶ºÂÄÅÆÈÈÉÉÊÊÊÉÉÊÊÊÉÉÈÈÆÅĺ¶¶´µ²³¯¯®®®²²®©§¢¢œœ’‰Š††Š†yyqllifccaaa___^\\ZXVUSSSRQQPOMMLIIFCCA>><997522110//...---,++*))'%%#!!    !!#%%'')**+,,---.../001235779<<>AACFEHKJMNNPPRPRSVVYZZ\\]^^^`aabeehllq|€‰Šˆ…‚‚ˆ‡’“£¤©ª°±²²®¯°°²²³´¶¿ÂÄÄÅÇÇÈÈÈÉÉÈÈÉÉÈÈÈÇÇÅÄÄ¿¶´³²²°°¯®²²±°ª©¤£“’‡ˆ‚‚…ˆŠ‰€|qllheebaa`^^^]\\ZZYVVSRPRPPNNMJKHEFCAA><<977532100/...---,,+**)''%%#!!    !##%%'))*++,---...//011355799<>>ACEEHJJMNNOOOPRRTWWYZZ[\]]^^_`bbehhnnx„„Šƒƒ€€‡‡“”ž¤¥«¬²²²²°°±±²´´¼ÁÂÃÃÅÅÆÆÇÇÈÈÆÆÈÈÇÇÆÆÅÅÃÃÂÁ¼´´²±±°°²²²²¬«¥¤ž”“‡‡€€ƒƒŠ„„xnnhhebb`_^^]]\[ZZYWWTRRPOOONNMJJHEECA>><997553110//...---,++*))'%%##!    !!#%%')(*++,---..../00135578:<<>AACEEHILLLNNNPPSSUWYZZ[[\]]]^^`beeiiq||†††|}z~†‡•–Ÿ¡¦¨­®³µ´µ¶²·¶»¿ÁÁÂÂÄÅÅÆÆÆÆÇÆÆÇÆÆÆÆÅÅÄÂÂÁÁ¿»¶·²¶µ´µ³®­¨¦¡Ÿ–•‡†~z}|†††||qiieeb`^^]]]\[[ZZYWUSSPPNNNLLLIHEECAA><<:87553100/....---,++*()'%%#!!    !!#%$&&(**+,,---...//0113688::<>?ACCEGGIJJLLLNPQSUWWXZZZZ\\\\^^`beekuu€‚‡ƒ~{{zz}}‡——¡¢¨¨¯¯µµ··¹»»¾¾ÀÀÀÁÃÃÄÄÄÅÆÆÅÅÆÆÅÄÄÄÃÃÁÀÀÀ¾¾»»¹··µµ¯¯¨¨¢¡——‡}}zz{{~ƒ‡‚€uukeeb`^^\\\\ZZZZXWWUSQPNLLLJJIGGECCA?><::8863110//...---,,+**(&&$%#!!    !""$$&((*++,---...//0013368::@AABDDEEGIIKMLNONNIIJJJPUUYYZ[\^^bchootswvxyyyzyyzz€€‘¢¤¦®®°´µµ¶¹º»»»¾¾¾¿¿¿¾¾¿¿¿¾¾¾»»»º¹¶µµ´°®®¦¤¢‘€€zzyyzyyyxvwstoohcb^^\[ZYYUUPJJJIINNONLMKIIGEEDDBAA@>=<<:886330..-,,,++*)*((&$%##!   !!"$$&&'))*++,,,--/004469::<>>@@AABCCEGGIKLLLMMIICCEHHPVVYY[\\__chhnnsruuwwyxzyyxz{‚„…•˜œ©ª«±±²··¸¸¹¼¼¼½½½½¼¼½½½½¼¼¼¹¸¸··²±±«ª©œ˜•…„‚{zxyyzxywwuursnnhhc__\\[YYVVPHHECCIIMMLLLKIGGECCBAA@@>><::964400/--,,,++*))'&&$$"!!   ""##%''(**+,+,,-//145779;;<>>@AABCCEGGIKKKKLHHCC@@CHPPWWZZ[]]``chhhlpptruuxwxxyy}}~‡‡‰œŸ¡¬¬­²³³´µ¹¹ºº»»»»ºº»»»»ºº¹¹µ´³³²­¬¬¡Ÿœ‰‡‡~}}yyxxwxuurtpplhhhc``]][ZZWWPPHC@@CCHHLKKKKIGGECCBAA@>><;;977541//-,,+,+**(''%##""   ""##%%'((***++,--/2256899;==>@@ABBCEEHHIJJHHHCC@@?BHHRRXXZ[[]]`bdegkkkoqqqtvvvxx{|}€Œ”£¤¥¦­®®°¶¶··¸¹¹¹¹¸¸¹¹¹¹¸··¶¶°®®­¦¥¤£”Œ€}|{xxvvvtqqqokkkgedb`]][[ZXXRRHHB?@@CCHHHJJIHHEECBBA@@>==;9986522/--,++***(('%%##""  ""#%%'(())**+,,-//26689:;;=>>@@ABBCFFHIIHHDDD@@???BJJTTYZZ\\]^bbddggkjnmqqttvwyyz}}}‚„‡˜šœ§§©ª°±²´µµ¶··¶¸¸¶··¶µµ´²±°ª©§§œš˜‡„‚}}}zyywvttqqmnjkggddbb^]\\ZZYTTJJB???@@DDDHHIIHFFCBBA@@>>=;;:98662//-,,+**))(('%%#""  !##%%&(()**++,--033779::<<=>>@AABDDFFHHHEEBAA?>>??BDLVVZZ[\]^`bbddggjjmmqqttuwxzzz~~‹‹’Ÿ ¢¤«¬­¯±³´··¶µµ¶··´³±¯­¬«¤¢ Ÿ’‹‹~~zzzxwuttqqmmjjggddbb`^]\[ZZVVLDB??>>?AABEEHHHFFDDBAA@>>=<<::977330--,++**)((&%%##!  !!#%%&&'))*++,,.0057799:;<==?@@AABEEFGGFFBBB@??>>??FFORYZ[\\^``aa_bffeimmmqquuuxwwzz{…ˆ”–˜š¤¦§©¬®³´´´´²²´´´´³®¬©§¦¤š˜–”ˆ…{zzwwxuuuqqmmmieffb_aa``^\\[ZYROFF??>>??@BBBFFGGFEEBAA@@?==<;:9977500.,,++*))'&&%%#!!   !##$&&''(**++,..225889;;<<=??@@BCCEEFFFCCAAA@>>==@@IIUZZ[[\\\]]Z]]aaeeiimmnqruuuwwz{|~ˆŠš ¤¦§®°±±±°¯¯°±±±°®§¦¤ šŠˆ~|{zwwuuurqnmmiieeaa]]Z]]\\\[[ZZUII@@==>>@AAACCFFFEECCB@@??=<<;;988522..,++**(''&&$##!    !!#$$&&'(()++,,.23669::<<<=>??ABBDDEFFEEBBBA@@>>==AALLWZZZZXXXUYY]]aaeefjkopsssuuuxyz€€…ˆ‘•™ ¢§ª¬®®®­««­®®®¬ª§¢ ™•‘ˆ…€€zyxuuussspokjfeeaa]]YYUXXXZZZZWLLAA==>>@@ABBBEEFFEDDBBA??>=<<<::96632.,,++)(('&&$$#!!    !##$&&''(()*,,,/33799;<<==>>?AABBDDEEECCBBBB@@====CCPPWXXUUTTUUYYY]bbcgillnqqssssuvx|~ƒŠ‘–œ¢£¥¨ª««©§§©««ª¨¥£¢œ–‘Šƒ~|xvussssqqnlligcbb]YYYUUTTUUXXWPPCC====@@BBBBCCEEEDDBBAA?>>==<<;99733/,,,*)((''&&$##!    !!#$$&&'(())*,,//447::;<<=>>?@ABCCDEEEDCCCCBB@@==>>GGSVVSSOQOQUUV[[_aeefjlooprrrssvzz|~ƒ…‡‹œŸ ¡£§¨§¥££¥§¨§£¡ Ÿœ‹‡…ƒ~|zzvssrrrpooljfeea_[[VUUQOQOSSVVSGG>>==@@BBCCCCDEEEDCCBA@?>>=<<;::744//,,*))(('&&$$#!!    !!##$&&''(()**,,/4488:;;===??@@BBCDDEDDDCCDDBB>><<@@KKSRRMOLNNQRXX]]^bchhimnqqqrrsvxz|€€‚„†–›žžŸ¢¤£¡ŸŸ¡£¤¢Ÿžž›–†„‚€€|zxvsrrqqqnmihhcb^]]XXRQNNLOMRRSKK@@<<>>BBDDCCDDDEDDCBB@@??===;;:8844/,,**)((''&&$##!!    ""##$%%''())*,,,/448::<<=>>@@@ABBCDDDDDDEEDDAA====CCLLPLJJKKNNOTZZ[__cdijjkopqqqrtvx|}ƒŠŠ–š›œž¤£¡ŸŸ¡£¤žœ›š–ŠŠƒ}|xvtrqqqpokjjidc__[ZZTONNKKJJLPLLCC====AADDEEDDDDDDCBBA@@@>>=<<::844/,,,*))(''%%$##""   !""##$$%%'(())*,,//448;;===??@AABBCCDCDCDFEEBB??<<>>FFMMKIIIKKKPPVX\\```efkmmopqqssuvz|}ƒ†‹’—™™ž Ÿš™™šŸ ž™™—’‹†ƒ}|zvussqqpommkfe```\\XVPPKKKIIIKMMFF>><>@@@BBBBCCCCCDEFDDAA==<<@@GGGHHGFHKLLRRTX\\]aabgjlpppqrtvxxz|ƒ‡“–™™›š™—••—™š›™™–“‡ƒ|zxxvtrqpppljgbaa]\\XTRRLLKHFGHHGGG@@<<==AADDFEDCCCCCBBBB@@@>>==;8844/,,**)((''%%$##""!    !"""#$$%%'(())*,,,/4488;==?@@AAABBBCBCCDEEECB>><<==BBCGGFFFEHHNNTUUYYZ^_ddelnpqqrsuwyz|}€„‰“––•––•“’’“•––•––“‰„€}|zywusrqqpnledd_^ZYYUUTNNHHEFFFGGCBB==<<>>BCEEEDCCBCBBBAAA@@?==;8844/,,,*))(('%%$$#"""!    !!"##$%%%&(()**,,/.337;;==?@@AABABBBBCCEECC@?<<;;>>@CCEEEEEEEJOOQUUVZ\\`bhhkmqrsstvwz||}~‰’’‘’’ŽŽ’’‘’’‰~}||zwvtssrqmkhhb`\\ZVUUQOOJEEEEEEECC@>>;;<ACCDDDDCFFKMNRRWWY]]^dgimoqsstuwy{|}~†ŒŽŒŒŽ‹‹ŽŒŒŽŒ†~}|{ywutssqomigd^]]YWWRRNMKFFCDDDDCCA>=<;;;<@@CCCCCBBBBAA@@@@??=;;772..,,**)((&&%%$##""!!!    !!"""##$$%%&&'))**,+.2266:==>>=?@@AAAABBBBC@@<<;;;;;>>AACCCBCCGGINNOTVZZ\``cillorstvxxyz}~‚‚‰Œ‹ˆˆ‹Œ‹‹Œ‹ˆˆ‹Œ‰‚‚~}zyxxvtsrollic``\ZZVTONNIGGCCBCCCAA>>;;;;;<<@@CBBBBAAAA@@?=>>==:6622.+,**))'&&%%$$##"""!!    !""####$%%&&''(***+..115::<<:=?>@@@@@@AA?@@<<:::::<?=:<<::511..+***(''&&%%$####""!    !!!""##$$$%%&&'((**++--00588::;;>>>>>>??>>?<<::999::==??AA@AABCCGILMSSUYYZ_aadjmpptvwwwyyy|ƒ…„‡…„‡ˆ‡††‡ˆ‡„…‡„…ƒ|yyywwwvtppmjdaa_ZYYUSSMLIGCCBAA@AA??==::999::<>??>>>>>>;;::88500--++**(('&&%%$$$##""!!!    !!"""##$$%%%&&&'(())++--/335577;;;;;;;;<<:;;9999899<<>>??@@@AACDDIJJORUWXY\^dffipssuwwwwvvyƒ…„„‚‚ƒ…„ƒƒ„…ƒ‚‚„„…ƒyvvwwwwusspiffd^\YXWUROJJIDDCAA@@@??>><<9989999;;:<<;;;;;;;;775533/--++))(('&&&%%%$$##"""!!    !!!!""###$$%%&&'''(())++,//002277777788999::9988888::===>>??@@AABFFHLLOUUVY[[`cfflptuwwusssy€‚€€€‚‚‚‚€€€‚€ysssuwwutplffc`[[YVUUOLLHFFBAA@@??>>===::8888899::999887777772200//,++))(('''&&%%$$###""!!!!   !!!!"""##$$%%%&&''''(())*,,--,.22333344777997867777899;<==>>>??@@BDFJJMSSUWWX]]`fjjnruuuroovv|~~~~}~€~~€~}~~~~|vvooruuurnjjf`]]XWWUSSMJJFDB@@??>>>==<;99877776879977744333322.,--,,*))((''''&&%%%$$##"""!!!!  !!!!"""####$%%&&&&'''((()**+++,..//001144667676667778899<<==>>>???BBFGGMPPUVVXZ]]cgllrrpploorrw{||{{~€~~€~{{||{wrroolpprrllgc]]ZXVVUPPMGGFBB???>>>==<<998877766676766441100//..,+++**)((('''&&&&%%$####"""!!!!  !!!""""####$$$%%&&&&''((())***+++--..//22446565666677788::<<>>>>>?@@DDFJJNSSTVVXZ``ejoolheljjmttxz|{{{}~||~}{{{|zxttmjjlehlooje``ZXVVTSSNJJFDD@@?>>>>><<::88777666656564422//..--+++***))(((''&&&&%%$$$####""""!!!   !!!""""####$$$%%%%&&'''(((())**++++,,..0033445555556667799;;<==>>>??ABDFHLNQRRUVXZ^ddjicc`eddejquxzzyyyz{zz{zyyyzzxuqjedde`ccijdd^ZXVURRQNLHFDBA??>>>==<;;9977666555555443300..,,++++**))(((('''&&%%%%$$$####""""!!!    !!""""###$$$$%%%&&&'''(((())))**++++,,..223344445555677889:;<====>>?AADGGLLPRSSTXX]aeea[[`_`aagquuwxwwwxyxxyxwwwxwuuqgaa`_`[[aeea]XXTSSRPLLGGDAA?>>====<;:988776555544443322..,,++++**))))(((('''&&&%%%$$$$###""""!!    !!"""####$$$$%%&&&&'''(((((())****++++--00223344444556678899;;===>>?@@ACEJJNOQQRTV[[a``Z[[[\]__gnrruuuuuvwuuwvuuuuurrng__]\[[[Z``a[[VTRQQONJJECA@@?>>===;;99887665544444332200--++++****))(((((('''&&&&%%$$$$####"""!!    !!"######$$%%%%&&'''((()(())******++,,-/002233344455666788::;<<==>>?@ADDIMMOOORRTW]][VZWYZZ[_eelprrsssuvwuuwvusssrrplee_[ZZYWZV[]]WTRROOOMMIDDA@?>>==<<;::887666554443332200/-,,++******))(()((('''&&%%%%$$######"!!    !!""""####$$%%%&&''(((())))******++,,,,//222333444556678899:;;<==>>>@@DGGKMMMPPQTWYYVVVVXY[[^ccjmoossssstsstsssssoomjcc^[[YXVVVVYYWTQPPMMMKGGD@@>>>==<;;:998876655444333222//,,,,++******))))((((''&&%%%$$####""""!!   !!""""###$$%%&&&&''(((())******++++,,..0122333445555677899::;;<==>@@ACFJKLLMMMQTTUSVTUXXYZZ]aggmoppqqqqrqqrqqqqppomgga]ZZYXXUTVSUTTQMMMLLKJFCA@@>==<;;::9987765555443332210..,,++++******))((((''&&&&%%$$###""""!!   """"####$$%%&&&&''(())******++++++--/02233333445566778899:;;<<=>??ADDJJKKKKLNQRRSSSUXXYZ\\`ggkmnnonoooooooononnmkgg`\\ZYXXUSSSRRQNLKKKKJJDDA??>=<<;;:99887766554433333220/--++++++******))((''&&&&%%$$####""""    """"##$$%$%%&&''(())****++++++--//12233334455666778999::;;;==>@@CHHJKJJJLLOPQQRUUXXYY[[`eehkllmlllmmmmlllmllkhee`[[YYXXUURQQPOLLJJJKJHHC@@>==;;;::99987766655443333221//--++++++****))((''&&%%$%$$##""""   """"$#$$%&&&''()))**++++++,,..1113333444556667788999::;<<=@@BCGGJJIIKKMMPOOQUUXYYY[^^cffijjmlllmmmmlllmjjiffc^^[YYYXUUQOOPMMKKIIJJGGCB@@=<<;::9998877666554443333111..,,++++++**)))(''&&&%$$#$""""    !!###%%$&&'((())**+++++,../113333444445566778899:::;;<=??BBFIIIIIJJKNNNPQUUXYYYZ]]addijjjjjjjkkjjjjjjjidda]]ZYYYXUUQPNNNKJJIIIIIFBB??=<;;:::998877665544444333311/..,+++++**))((('&&$%%###!!    !!"##"$$&'''(())**++++,-.//223334444556667788899::;;<<>AAEFHHIHHHKKLLNPPTXXYXXX[[adggihhhhhhhhhhhhhhiggda[[XXXYXXTPPNLLKKHHHIHHFEAA><<;;::998887766655444433322//.-,++++**))(('''&$$"##"!!  !"" ""$&&%''(())**+++,,..1133333445556666778899:::<<=>@@EEHHHGGHJJJLLOSSXXXWVVY__bffgfffeeffffeefffgffb__YVVWXXXSSOLLJJJHGGHHHEE@@>=<<:::9988776666555443333311..,,+++**))((''%&&$"" ""!   !$$#%%&&(())**+++--002233344444556667788899::;;==?DDGHHGGGGHHJJJMRSWWWUTVY]]addeddceeffffeecddedda]]YVTUWWWSRMJJJHHGGGGHHGDD?==;;::998887766655444443332200--+++**))((&&%%#$$!    !! ##$$&&(())***++..01222334445555666778999::;<<>?CCGGGFGFFFHHILMRRUUSUTTW[[_bbeddccccddccccddebb_[[WTTUSUURRMLIHHFFFGFGGGCC?><<;::99987766655554443322210..++***))((&&$$## !!    ""$#&&''((***+,.011222333445556677788899::<>>BBGGGGFEEFFFGGLLPSSUSSRUUY]_bccbbaaaaaaaaaabbccb_]YUURSSUSSPLLGGFFFEEFGGGGBB>><::998887776655544333222110.,+***((''&&#$""   "!##%%&&(((**,,001122233344555666777889:;;>>ABFGGFFDDEDDGGJNNPSSQQQSSY]]`aaa``________``aaa`]]YSSQQQSSPNNJGGDDEDDFFGGFBA>>;;:988777666555443332221100,,**(((&&%%##!" !!""$$&&(((**../00223333344566666778899;==@AEEFGEEDCCBDFIILNPPPOOOSSW[[^___^^________^^___^[[WSSOOOPPPNLIIFDBCCDEEGFEEA@==;99887766666544333332200/..**(((&&$$""!!  ""$$&&%((,,///002223344455666677888::<<@@EEFFECCAABBDGGLLMMMMOOQQUYY\^__^^]]]]]]]]^^__^\YYUQQOOMMMMLLGGDBBAACCEFFEE@@<<::888776666554443322200///,,((%&&$$""     ""##%%%))---//11122333444556667788::>CCFFDDA@@??@EEHHHKJJJLMMRRW[[]]^\\ZYYYYYYZ\\^]][[WRRMMLJJJKHHHEE@??@@ADDFFCC>>;;9987665554443322211///---**&&###!!  ! ##&''*+---//111223344456667789::>BBEFDD@A>>=@@CCFFHHHHHJMMPPUYY\]][[ZYYYYYYZ[[]]\YYUPPMMJHHHHHFFCC@@=>>A@DDFEBB>::987766654443322111//---+*''&## !   #$''(++---///112224445556678::==AAEEDD@@=<=>>AAFFFFFFJJLLNSSXX\]][[YWWWWWWY[[]]\XXSSNLLJJFFFFFFAA>>=<=@@DDEEAA==::876655544422211///---++(''$#    $$%((+++--//0111333444555779:<><<::;??BBBDDDDFFIMMQQVVZ\\ZZWTTSSTTWZZ\\ZVVQQMMIFFDDDDBBB??;::<<>>CCDD??;;9877554333222000...+++))%%%   !!!''))),,,..000022333566688:;>>DDCC>;;99;;==@@BBBBBDFIKKOOUYY[[ZWWTTSSTTWWZ[[YYUOOKKIFDBBBBB@@==;;99;;>CCDD>>;:886665333220000..,,,)))''!!!  $$$''***,,///0012224455779::=BBBB>>::7999;=@AAAAABDDHJJNNUYY[[ZWWSSQQSSWWZ[[YYUNNJJHDDBAAAAA@=;9997::>>BBBB=::9775544222100///,,***''$$$   $%%(((++---//0111333557799;=AAAB==88777:;>>???AAABFFIINSSXXZZZWWRROORRWWZZZXXSSNIIFFBAAA???>>;:77788==BAAA=;9977553331110//---++(((%%$    %%'(()+,,../000122446788:;;?AAA=786666::<<=???@AACFIILQQVVZZYWWRRNNRRWWYZZVVQQLIIFCAA@???=<<::666687=AAA?;;:887644221000/..,,+)(('%%    #%''()),,,,//00022446677::=?@@<<77556688:<==>???ACCHHKOOUUZZYWWRRNNRRWWYZZUUOOKHHCCA???>==<:88665577<<@@?=::77664422000//,,,,))(''%#    %%(((**+,--/0012335557999==??<<6655556::;;<>@@CCHHLLRVVVWXXRRLLRRXXWVVVRLLHHCC@@>><;;97665543335599==::88555422200/.,,+**((($$#  $$$$)))++-..00224444668:;;;994422333366779;;>>??AAGGJJRVVVVWWSSLLSSWWVVVVRJJGGAA??>>;;977663333224499;;;:86644442200..-++)))$$$$  $$$$**+--/022333446688998844222223445588;;==>>@@GGJPPUUVVWWTTMMTTWWVVUUPPJGG@@>>==;;885544322222448899886644333220/--+**$$$$  $$$*++////2224446688796634111122224488::<<=>@@EEINNTTUUVVUUOOUUVVUUTTNNIEE@@>=<<::8844222211114366978866444222////++*$$$  $$#+**///22226666777443311111111446688;<==>BBHHLLTTUUVVUUOOUUVVUUTTLLHHBB>==<;88664411111111334477766662222///**+#$$  ##**&&--**211/633242201000/11222468;;;<>>@BHHLLSSTTUUVVPPVVUUTTSSLLHHB@>><;;;86422211/000102242336/112**--&&**##   """ *&&///00222200//.///004477::<<>>@@GGKKRRTTTTVVRRVVTTTTRRKKGG@@>><<::774400///.//00222200///&&* """    &%%+01112200//..../0336688<<==??EEJJQRTTTTVVRRVVTTTTRQJJEE??==<<8866330/....//00221110+%%&   ++0111000//..-.//114688;;<<>>EEJJQQSSSSVVTTVVSSSSQQJJEE>><<;;886411//.-..//0001110++  $$$000000..-.---..014477::<<>>CCIIOOSSRRVVVVVVRRSSOOIICC>><<::774410..---.-..000000$$$  $---00//----,,-.0003367::<<>>AAHHNNRSRRVVVVVVRRSRNNHHAA>><<::7633000.-,,----//00---$  ''000//--,,,,--//116699;;==@AAHNNRRRQQVVWWVVQQRRRNNHAA@==;;996611//--,,,,--//000''  !'//./---,,,,,,..115588;;==@@GGLLRRQQUUXXXXUUQQRRLLGG@@==;;885511..,,,,,,---/.//'!  !!!**..--,,+++++..003378;;==@@FFKKQQQQUUXXXXUUQQQQKKFF@@==;;873300..+++++,,--..**!!!  **...,-++++++---//3377::==@@FFKKQQQQUUXXXXUUQQQQKKFF@@==::7733//---++++++-,...**  $$,.,,,++++++,,//2226699==@@EEJJQQQQUUYYYYUUQQQQJJEE@@==9966222//,,++++++,,,.,$$  ,,,,++*****,,..1155699<>BBJJPPRRTTYYYYTTRRPPJJBB>>;;;7732//,,,++*****++''    !'+++****++,,.//2266::>>BBBJJPPRRTTXXXXTTRRPPJJBBB>>::6622//.,,++****+++'!    !!))*******,,...1166::>>BBBJJPPRRTTWWWWTTRRPPJJBBB>>::6611...,,*******))!!     #)**))***++--00166::>>AAAJJPPRRTTWWWWTTRRPPJJAAA>>::66100--++***))**)#   ###**))***++--0005599>>AAJJJPPSSTTVVVVTTSSPPJJJAA>>9955000--++***))**###  %**))**+++,,//33399>>AAIIIPPSSTTUUUUTTSSPPIIIAA>>99333//,,+++**))**%  %%%****+++,,./33888==BBHHPPPSSTTUUUUTTSSPPPHHBB==88833/.,,+++****%%%  ***))**,,,..22777<=BBHHPPPSSTTSSSSTTSSPPPHHBB=<77722..,,,**))***  ''*****,,,--1177<<>>EENNUUUXXRRRRXXUUUNNEE>>>88222//+++,,%%%  ((+++..11166=>EEENNUUUXXUUUUXXUUUNNEEE>=66111..+++((  ((-----01666==DDDMMUUUXXYYYYXXUUUMMDDD==66610-----((  **---00555;;BBBKKUUUXXYYYYXXUUUKKBBB;;55500---**  **...//335;;BBBKKSSSXXZZZZXXSSSKKBBB;;533//...**  !!,,,//33399@@@HHQQQWWYYYYWWQQQHH@@@99333//,,,!!  !!,,///22777>@@HHQQQWWYYYYWWQQQHH@@>77722///,,!!  ##...22777>>FFFNNUUUXXXXUUUNNFFF>>77722...##  ##...22555<VALUESunitsAttr0.0Int32VALUESformatAttr0.0 jj¾j½Ñ­ªªª¾j½Ð fakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jjjj ­­­ªª¾j½Ð  Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0«˜c£ª˜c±?«™cðAª™d1C­šdtOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSome data setsVALUES File contentsAttr0.0 ­­­­­­­ªª  swf32.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª"fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª$fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª&fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j+j+¾j+½+Ñ+­ªªª¾j½Ð#()*++fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 j0j0¾j0½0Ñ0­ªªª¾j½Ð%-./00fakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j5j5¾j5½5Ñ5­ªªª¾j½Ð'23455fakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j9j9j9j9¾j9½9Ñ9 ­­­ªª¾j½Ð#%'7899 Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.Test BBBVALUESTest clean formatAttr0.0 ­­­­­­­ªªª#%',16:;<=swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª?fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªAfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªCfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jHjH¾jH½HÑH­ªªª¾j½Ð@EFGHHfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jMjM¾jM½MÑM­ªªª¾j½ÐBJKLMMfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jRjR¾jR½RÑR­ªªª¾j½ÐDOPQRRfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jVjVjVjV¾jV½VÑV ­­­ªª¾j½Ð@BDTUVV Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.<<<VALUESTest clean formatAttr0.0 ­­­­­­­ªªª@BDINSWXYZswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª\fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª^fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª`fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jeje¾je½eÑe­ªªª¾j½Ð]bcdeefakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jjjj¾jj½jÑj­ªªª¾j½Ð_ghijjfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jojo¾jo½oÑo­ªªª¾j½ÐalmnoofakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jsjsjsjs¾js½sÑs ­­­ªª¾j½Ð]_aqrss Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end<<<VALUESTest clean formatAttr0.0 ­­­­­­­ªªª]_afkptuvwswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ªyfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª{fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª}fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j‚j‚¾j‚½‚Ñ‚­ªªª¾j½Ðz€‚‚fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 j‡j‡¾j‡½‡ч­ªªª¾j½Ð|„…†‡‡fakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jŒjŒ¾jŒ½ŒÑŒ­ªªª¾j½Ð~‰Š‹ŒŒfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jjjj¾j½Ñ ­­­ªª¾j½Ðz|~Ž Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.<<<VALUESTest clean formatAttr0.0 ­­­­­­­ªªªz|~ƒˆ‘’“”swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª–fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª˜fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªšfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jŸjŸ¾jŸ½ŸÑŸ­ªªª¾j½ЗœžŸŸfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 j¤j¤¾j¤½¤Ѥ­ªªª¾j½Й¡¢£¤¤fakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j©j©¾j©½©Ñ©­ªªª¾j½Л¦§¨©©fakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j­j­j­j­¾j­½­Ñ­ ­­­ªª¾j½З™›«¬­­ Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.<<<VALUESTest clean formatAttr0.0 ­­­­­­­ªªª—™› ¥ª®¯°±swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª³fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªµfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª·fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j¼j¼¾j¼½¼Ѽ­ªªª¾j½д¹º»¼¼fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jÁjÁ¾jÁ½ÁÑÁ­ªªª¾j½ж¾¿ÀÁÁfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jÆjƾjƽÆÑÆ­ªªª¾j½иÃÄÅÆÆfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jÊjÊjÊjʾjʽÊÑÊ ­­­ªª¾j½д¶¸ÈÉÊÊ Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.<<<VALUESTest clean formatAttr0.0 ­­­­­­­ªªª´¶¸½ÂÇËÌÍÎswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ªÐfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªÒfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªÔfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jÙjÙ¾jÙ½ÙÑÙ­ªªª¾j½ÐÑÖרÙÙfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jÞjÞ¾jÞ½ÞÑÞ­ªªª¾j½ÐÓÛÜÝÞÞfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jãjã¾jã½ãÑã­ªªª¾j½ÐÕàáâããfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jçjçjçjç¾jç½çÑç ­­­ªª¾j½ÐÑÓÕåæçç Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.>>>VALUESTest clean formatAttr0.0 ­­­­­­­ªªªÑÓÕÚßäèéêëswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ªífakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªïfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªñfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jöjö¾jö½öÑö­ªªª¾j½ÐîóôõööfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jûjû¾jû½ûÑû­ªªª¾j½ÐðøùúûûfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jj¾j½Ñ­ªªª¾j½ÐòýþÿfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jjjj¾j½Ñ ­­­ªª¾j½Ðîðò Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the e666VALUESTest clean formatAttr0.0 ­­­­­­­ªªªîðò÷üswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jj¾j½Ñ­ªªª¾j½Ð fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jj¾j½Ñ­ªªª¾j½Ð fakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jj¾j½Ñ­ªªª¾j½ÐfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j!j!j!j!¾j!½!Ñ! ­­­ªª¾j½Ð   !! Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end888VALUESTest clean formatAttr0.0 ­­­­­­­ªªª  "#$%swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª'fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª)fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª+fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j0j0¾j0½0Ñ0­ªªª¾j½Ð(-./00fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 j5j5¾j5½5Ñ5­ªªª¾j½Ð*23455fakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j:j:¾j:½:Ñ:­ªªª¾j½Ð,789::fakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j>j>j>j>¾j>½>Ñ> ­­­ªª¾j½Ð(*,<=>> Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end.999VALUESTest clean formatAttr0.0 ­­­­­­­ªªª(*,16;?@ABswf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ªDfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªFfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªHfakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jMjM¾jM½MÑM­ªªª¾j½ÐEJKLMMfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jRjR¾jR½RÑR­ªªª¾j½ÐGOPQRRfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jWjW¾jW½WÑW­ªªª¾j½ÐITUVWWfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j[j[j[j[¾j[½[Ñ[ ­­­ªª¾j½ÐEGIYZ[[ Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and the end of this attribute.KKKVALUESTest clean formatAttr0.0 ­­­­­­­ªªªEGINSX\]^_swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ªafakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªcfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªefakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jjjj¾jj½jÑj­ªªª¾j½ÐbghijjfakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jojo¾jo½oÑo­ªªª¾j½ÐdlmnoofakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 jtjt¾jt½tÑt­ªªª¾j½ÐfqrsttfakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 jxjxjxjx¾jx½xÑx ­­­ªª¾j½Ðbdfvwxx Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and another tab < >.TeDDDVALUESTest clean formatAttr0.0 ­­­­­­­ªªªbdfkpuyz{|swf32_fileattr.hdfCDF0.0ValuesfakeDim0 DimVal0.1ª~fakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª€fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª‚fakeDim2Dim0.0TimeVALUES long_nameAttr0.0SecondVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j‡j‡¾j‡½‡Ñ‡­ªªª¾j½Ð„…†‡‡fakeDim0Var0.0LineVALUES long_nameAttr0.0InchVALUESunitsAttr0.0Int16VALUESformatAttr0.0 jŒjŒ¾jŒ½ŒÑŒ­ªªª¾j½Ð‰Š‹ŒŒfakeDim1Var0.0ColumnVALUES long_nameAttr0.0CmVALUESunitsAttr0.0Int32VALUESformatAttr0.0 j‘j‘¾j‘½‘Ñ‘­ªªª¾j½ÐƒŽ‘‘fakeDim2Var0.0BöVALUES valid_maxAttr0.0¿€VALUES valid_minAttr0.0 j•j•j•j•¾j•½•Ñ• ­­­ªª¾j½Ðƒ“”•• Data-Set-2Var0.0For testing dumpsds SD file attribute%%%VALUES File purposeAttr0.0Some data setsVALUES File contentsAttr0.0A tab < >, a CR < >, several nulls <>, and one more tab < >AAAVALUESTest clean formatAttr0.0 ­­­­­­­ªªªƒˆ’–—˜™swf32_fileattr.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/swi16.hdf000066400000000000000000000007501503061704500210470ustar00rootroot00000000000000Ê\¾&0jV½ZÀxÁŠÂš¿­ÃÂÜÆÐÈ NCSA HDF Version 4.0 Release 0, ?month? ?year? defgnopqxyz{jjjjTimeLineColumnSecondInchCmInt32Int16Int32d {ÿÿ¾½ÀÁ¿ÃÜhdf4-hdf4.3.1/mfhdf/dumper/testfiles/swi8.hdf000066400000000000000000000007041503061704500207670ustar00rootroot00000000000000Ê\¾&j>½BÀ`Ár‚¿• áܣФ NCSA HDF Version 4.0 Release 0, ?month? ?year? defgnopqxyz{jjjjTimeLineColumnSecondInchCmInt32Int16Int32d {ÿ¾½ÀÁ¿ÃÜhdf4-hdf4.3.1/mfhdf/dumper/testfiles/tdata.hdf000066400000000000000000000160261503061704500211760ustar00rootroot00000000000000È j\«ÖªÞ5­«1 ª=5­r«ª”3­ Çj!ä½!èÐ ­"2j#D½#HÐ^ ­$j.j%˜½%œÐª ­&¶*­'à6 îB¾   JJ B¾Vf––B¾šªÖNCSA HDF Version 3.3 Release 4, October 1994Valuesnsamp DimVal0.0ªnsampDim0.0Valuesbands DimVal0.0ªbandsDim0.0Valuesrec DimVal0.0ª recUDim0.0 j j j j j ½ ­­­j½Ð  aVar0.0 j j j j ½ ­­j½Ð  bVar0.0 jjj½­j½Ð cVar0.0­­­­­­  tdata.hdfCDF0.0x€­­­j½Ð¾  aVar0.0  !"#$)*+,-.<€­­j½Ð¾  bVar0.0 €­j½Ð¾ cVar0.0Valuesnsamp DimVal0.0ªnsampDim0.0Valuesbands DimVal0.0ªbandsDim0.0Valuesrec DimVal0.0ªrecUDim0.0 j!j!j!j!¾j!½!­­­¾j½Ð !!aVar0.0 j#j#j#¾j#½#­­¾j½Ð ##bVar0.0 j%j%¾j%½%­¾j½Ð %%cVar0.0­­­­­­ "$& tdata.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/dumper/testfiles/tdf24.hdf000066400000000000000000000041311503061704500210160ustar00rootroot00000000000000Ê\.&Ijo,s2‡.I,Ø2ì.ôI,=2QNCSA HDF Version 4.0 Release 0, ?month? ?year?               j,.                                                                j,.                                                                               j,.hdf4-hdf4.3.1/mfhdf/dumper/testfiles/tdfr8f.hdf000066400000000000000000002030471503061704500212770ustar00rootroot00000000000000ÚÉÊ\.&'Ê&'-(6É(6j+6,+:È+N2+R /+^Œ|Ë+^Œ|É(6,·ÚÈ·î2·ò /·þ"ËNCSA HDF Version 4.0 Release 0, ?month? ?year?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œž<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ªHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´RSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹ºXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»YZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿À^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁ_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂ`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄbcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿddj dd,/-y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñOòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@yÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðOñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?yþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvywxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïOðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>yýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuyvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîOïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=yüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstyuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíOîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsytuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìOíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;yúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrystuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëOìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:yùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqyrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêOëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789yøùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopyqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéOêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012345678y÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoypqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèOéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01234567yö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnyopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçOèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456yõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmynopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæOçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012345yôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklymnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåOæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01234yóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkylmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäOåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123yòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijyklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãOäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012yñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiyjklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâOãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01yðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghyijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáOâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0yïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgyhijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàOáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./yîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefyghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßOàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-.yíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeyfghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞOßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-yìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdyefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝOÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,yëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcydefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜOÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+yêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abycdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛOÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*yéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aybcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚOÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()yèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`yabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙOÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'(yçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_y`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרOÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'yæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^y_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×OØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&yåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]y^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖOרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%yäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\y]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕOÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$yãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[y\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔOÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#yâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZy[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓOÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"yáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYyZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒOÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !yàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXyYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑOÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  yßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWyXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐOÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVyWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏOÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUyVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎOÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTyUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍOÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSyTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌOÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRySTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËOÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQyRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊOËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPyQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉOÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOyPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈOÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNyOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇOÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMyNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆOÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLyMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅOÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKyLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄOÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJyKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃOÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIyJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂOÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHyIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁOÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGyHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀOÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFyGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿OÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEyFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾O¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDyEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½O¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCyDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼O½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@AByCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»O¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@AyBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹ºO»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ yÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@yABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹Oº»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?y@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸O¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>y?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·O¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=y>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶O·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µO¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;y<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´Oµ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:y;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³O´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789y:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²O³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿyÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012345678y9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±O²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿy¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01234567y89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°O±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿy¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456y789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯O°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþy½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012345y6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®O¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýy¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01234y56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­O®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüy»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123y456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬O­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûyº»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./012y3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«O¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúy¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./01y23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ªO«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùy¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0y123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©Oª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øy·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./y0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨O©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷y¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-.y/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§O¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöyµ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-y./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦O§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõy´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,y-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥O¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôy³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+y,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤O¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóy²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*y+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£O¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòy±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()y*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢O£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñy°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'(y)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡O¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðy¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'y()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ O¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïy®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&y'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸO ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîy­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%y&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžOŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíy¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$y%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œOžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìy«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#y$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œOžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëyª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"y#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›OœžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêy©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !y"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™šO›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéy¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  y!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™Oš›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèy§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜O™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçy¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—O˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæy¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–O—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåy¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•O–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäy£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”O•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãy¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“O”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáây¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’O“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáy ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘O’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàyŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽO‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßyžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽO‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞyžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽO‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝyœžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒOŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜy›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒOŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛyš›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹OŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚy™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰ŠO‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙy˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰OŠ‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרy—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆO‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×y–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡Oˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖy•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†O‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕy”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…O†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔy“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„O…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓy’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒO„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒAoj Ao,/-Î÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s ssssssssç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s ssssssss(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssss&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s ssssss$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssss"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s ssss 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sss6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s ss5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1ss0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎs -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=Cs ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;s*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:ss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2s3s4s5s6s 7s"8s$9s&:s(;ç1=CÎ÷1÷1sss s s sssssssss s!"s#$s%&s'(Œï)÷1ss*+s,s-s. s/ s0 s1s2s3s4s5s6s7s8s9s:!s;#s<%Îÿ=>Œ?@sABss*s ,s -s.÷1 s0s1s2Ì·þ"Ë-ÛÉÛ,ÞÈÞ£2Þ§ /Þ³'tËÞ³'tøøx((( 008((0@@@888HHP@@HXXXPPP``hXX`ppphhhxx€ppxˆˆˆ€€€˜ˆˆ   ˜˜˜¨¨°  ¨¸¸¸°°°ÀÀȸ¸ÀÐÐÐÈÈÈØØàÐÐØèèèàààððøèèðøøø ( 00088@HHHPPX```hhpxxx€€ˆ˜˜ ¨¨¨°°¸ÀÀÀÈÈÐØØØààèððððøø¨øPPððÈ÷€)@÷~„TÀ`÷€(ÀÀcÐ÷€)@÷q“$÷r\÷€(À÷q“$÷ÿòÐ÷k;˜%&¯Š;P÷~Š€÷k÷r\÷rœ÷ya?ÿÿ7Ð÷t÷ÿóp÷k:Ø÷ÿóL÷€(À÷ÿód÷€)@÷ÿót÷€(À÷€)@ÿÿÿø'H€?ø7àø'H÷rœ ž`÷k:x÷k8, sX÷rœ‚ ž`÷ÿóø÷k8$÷ÿóü÷€`ø7ßXS÷rœ žs÷k9Ð÷w½ ÷rœ ÷rœ÷€8 ž`÷w½$Aoj Ao,/-d  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcded  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghid  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkld  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnod  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstud !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzd !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒd!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„d"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…d#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†d$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡d%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆd&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰d'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Šd()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹d)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œd*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œd+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽd,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽd-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽd./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘d/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’d0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“d123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”d23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•d3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–d456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—d56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜d6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™d789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™šd89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›d9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œd:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œd;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžd<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸd=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ d>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢d@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£dABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤dBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥dCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦dDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§dEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨dFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©dGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ªdHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«dIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬dJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­dKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®dLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯dMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°dNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±dOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²dPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³dQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´dRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µdSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶dTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·dUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸dVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹dWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹ºdXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»dYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼dZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½d[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾d\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿d]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿Àd^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁd_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂd`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃdabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄdbcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅdcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆddefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈhdf4-hdf4.3.1/mfhdf/dumper/testfiles/test.hdf000066400000000000000000000020461503061704500210550ustar00rootroot00000000000000Ê\É&-&NCSA HDF Version 3.3 Release 3, February 1994ÿÿ ÿÿÿÿÿ#ÿ'ÿ+ÿ/ÿ7ÿ;ÿ?ÿCÿGÿKÿOÿSÿ[ÿ_ÿcÿgÿkÿoÿsÿ{ÿÿƒÿ‡ÿ‹ÿÿ“ÿ—ÿŸÿ£ÿ§ÿ«ÿ¯ÿ³ÿ·ÿ¿ÿÃÿÇÿËÿÏÿÓÿ×ÿÛÿãÿçÿëÿïÿóÿ÷ÿûÿÿÿÿûÿ÷ ÿóÿïÿëÿçÿã#ÿÛ'ÿ×+ÿÓ/ÿÏ3ÿË7ÿÇ;ÿÃCÿ»Gÿ·Kÿ³Oÿ¯Sÿ«Wÿ§[ÿ£cÿ›gÿ—kÿ“oÿsÿ‹wÿ‡{ÿƒÿ‡ÿw‹ÿsÿo“ÿk—ÿg›ÿcŸÿ_§ÿW«ÿS¯ÿO³ÿK·ÿG»ÿC¿ÿ?Ãÿ;Ëÿ3Ïÿ/Óÿ+×ÿ'Ûÿ#ßÿãÿëÿïÿóÿ ÷ÿûÿÿÿÿûÿ÷ÿïÿëÿçÿãÿßÿÛÿ×ÿÏÿËÿÇÿÃÿ¿ÿ»ÿ·ÿ³ÿ«ÿ§ÿ£ÿŸÿ›ÿ—ÿ“ÿ‹ÿ‡ÿƒÿÿ{ÿwÿsÿkÿgÿcÿ_ÿ[ÿWÿSÿOÿGÿCÿ?ÿ;ÿ7ÿ3ÿ/ÿ'ÿ#ÿÿÿÿÿÿ ÿÿúöñíéàÛ×ÓÎÊÅÁ¸´¯«§¢ž•‘Œˆƒƒƒƒƒƒ‡‹“—›Ÿ£§«¯·»¿ÃÇËÏ×Ûßãçëïóûÿÿhdf4-hdf4.3.1/mfhdf/dumper/testfiles/tvattr.hdf000066400000000000000000000043201503061704500214170ustar00rootroot00000000000000Ê\­"&«<ªˆ~­ˆ«¢ªª:«äªè:«HªK:«…ª‰:« ê Ç:« NCSA HDF post Version 4.0 Release 2, July 23, 1996vgname0ABCDEFfldname1fldname2vsname1ªvgname1'0'PVALUESattname1Attr0.0 VALUESattname2Attr0.0vgname0ªªmNpVALUESattname3Attr0.0BVALUESattname4Attr0.0BVALUESattname5Attr0.0B€ª Ë:« ª  :« Gª O9« «ª":«\ª_:«™ª:ª €~«=ªA:«{VALUESattname4Attr0.0ÀPæšÔ,=VALUESattname5Attr0.0@PæšÔ,=VALUESvsname1Attr0.0fldname1fldname2vsname1ÿÿÿÿªªª ÿÿÿÿª ª ª ÿÿÿÿ BVALUESattname6Attr0.0mNpVALUESattname7Attr0.0BVALUESattname8Attr0.0fldname0fldname1vsname0ªÿÿÿÿªªÂ VALUESattname8Attr0.0mNpStªF:­2« ª$:«^ªb;VALUESattname9Attr0.0fldname0fldname1vsname0vsclass0ªÿÿÿÿªªªªª vgname2vgclass2dVALUESattname9Attr0.0 VALUES attname10Attr0.0ª vgname2vgclass2ªªhdf4-hdf4.3.1/mfhdf/dumper/testfiles/tvset.hdf000066400000000000000000002242251503061704500212500ustar00rootroot00000000000000dUº\{Ò ­ '­G3«ÓzªÓ F«ÔP ªÔ pM«Õ ½ ªÕ ÝJ«Ö'´ªÖÛp«×Kª×L-«ØyªØz-«Ù§ªÙ¨-«ÚÕªÚÖ-«ÛªÛ-«Ü1ªÜ2-«Ý_ªÝ`-«ÞªÞŽ-«ß»ªß¼-«àéªàê-«áªá.«âFªâG.«ãuªãv.«ä¤ªä¥.«åÓªåÔ.«æªæ.«ç1ªç2.«è`ªèa.«éªé.«ê¾ªê¿.«ëíªëî.«ìªì.«íKªíL.«îzªî{.«ï©ªïª.«ðتðÙ.«ñªñ.«ò6ªò7.«óeªóf.«ô”ªô•.«õêõÄ.«öòªöó.«÷!ª÷".«øPªøQ.«ùªù€.«ú®ªú¯.«ûݪûÞ.«ü ªü .«ý;ªý<.«þjªþk.«ÿ™ªÿš.«ÈªÉ.«÷ªø.«&ª'.NCSA HDF Version 4.0 Release 0, ?month? ?year? Simple Vgroup Test object«­è{09Ò Second Vgroup Test objectz?€@@@@€@ @À@àAAA A0A@APA`ApA€AˆAA˜A A¨A°A¸AÀAÈAÐAØAàAèAðAøBBBB BBBBB B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|B€B‚B„B†BˆBŠBŒBŽBB’B”B–B˜BšBœBžB B¢B¤B¦B¨BªB¬B®B°B²B´B¶B¸BºB¼B¾BÀBÂBÄBÆdFIELD_name_HERE Float Vdata Test objectÞ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇdDIFFERENT_FIELD_NAME Integer Vdata Test object@@€@ÀAA A@A`A€A A  A° AÀ AÐ AàAðBBBBB B(B0B8B@BHBPBXB`BhBpBxB€ B„!Bˆ"BŒ#B$B”%B˜&Bœ'B (B¤)B¨*B¬+B°,B´-B¸.B¼/BÀ0BÄ1BÈ2BÌ3BÐ4BÔ5BØ6BÜ7Bà8Bä9Bè:Bì;BðBü?C@CACBCCCDC EC FCGCHCICJCKCLCMCNCOC PC"QC$RC&SC(TC*UC,VC.WC0XC2YC4ZC6[C8\C:]C<^C>_C@`CBaCDbCFcdAB Mixed VdataNo class specifiedabAxcdA€efA„gh Aˆij AŒklAmnA”opA˜qrAœstA    STATION_NAMEVALUESFLOATSMulti-Order VdataNo class specified¼VA VdataLoop-0NVA VdataLoop-1NVA VdataLoop-2NVA VdataLoop-3NVA VdataLoop-4NVA VdataLoop-5êVA VdataLoop-6VA VdataLoop-7VA VdataLoop-8üVA VdataLoop-9VA VdataLoop-10\VA VdataLoop-11ÂVA VdataLoop-12ËVA VdataLoop-13úVA VdataLoop-14*VA VdataLoop-15YVA VdataLoop-16ˆVA VdataLoop-17·VA VdataLoop-18æVA VdataLoop-19VA VdataLoop-20DVA VdataLoop-21sVA VdataLoop-22…VA VdataLoop-23´VA VdataLoop-24ãVA VdataLoop-25VA VdataLoop-26BVA VdataLoop-27qVA VdataLoop-28 VA VdataLoop-29ÏVA VdataLoop-30þVA VdataLoop-31-VA VdataLoop-32ÚVA VdataLoop-33tVA VdataLoop-34>VA VdataLoop-35¸VA VdataLoop-36bVA VdataLoop-37¼VA VdataLoop-38FVA VdataLoop-39€VA VdataLoop-40êVA VdataLoop-41VA VdataLoop-42NVA VdataLoop-43Hd%9« ª .«:ª;.«iªj.«˜ª™.«ÇªÈ.«öª÷.« %ª &.« Tª U.« ƒª „.« ²ª ³.« ᪠â.«ª.«?ª@.«nªo.«ªž.«ÌªÍ.«ûªü.«*ª+.«YªZ.«ˆª‰.«·ª¸.«æªç.« ª .« Dª E.« sª t.« ¢ª £.« Ѫ Ò.«!ª!.«!/ª!0.« !^ª !_.«!!ª!!Ž.«"!¼ª"!½.«#!ëª#!ì.«$"ª$".«%"Iª%"J.«&"xª&"y.«'"§ª'"¨.«("Öª("×.«)#ª)#.«*#4ª*#5.«+#cª+#d.«,#’ª,#“.«-#Áª-#Â.«.#ðª.#ñ.«/$ª/$ .«0$Nª0$O.«1$}ª1$~.«2$¬ª2$­.«3$Ûª3$Ü.«4% ª4% .VA VdataLoop-44üVA VdataLoop-45ŠVA VdataLoop-46HVA VdataLoop-47rVA VdataLoop-48LVA VdataLoop-49VVA VdataLoop-50VA VdataLoop-51úVA VdataLoop-52”VA VdataLoop-53^VA VdataLoop-54ØVA VdataLoop-55‚VA VdataLoop-56ÜVA VdataLoop-57fVA VdataLoop-58 VA VdataLoop-59 VA VdataLoop-60$VA VdataLoop-61nVA VdataLoop-62hVA VdataLoop-63’VA VdataLoop-64lVA VdataLoop-65vVA VdataLoop-660VA VdataLoop-67VA VdataLoop-68´VA VdataLoop-69~VA VdataLoop-70øVA VdataLoop-71¢VA VdataLoop-72üVA VdataLoop-73†VA VdataLoop-74ÀVA VdataLoop-75*VA VdataLoop-76DVA VdataLoop-77ŽVA VdataLoop-78ˆVA VdataLoop-79²VA VdataLoop-80ŒVA VdataLoop-81–VA VdataLoop-82PVA VdataLoop-83:VA VdataLoop-84ÔVA VdataLoop-85žVA VdataLoop-86VA VdataLoop-87ÂVA VdataLoop-88VA VdataLoop-89¦VA VdataLoop-90àVA VdataLoop-91JVA VdataLoop-92dVA VdataLoop-93®d3I«5)ïª5)ð.«6*ª6*.«7*Mª7*N.«8*|ª8*}.«9*«ª9*¬.«:*Úª:*Û.«;+ ª;+ /«<+9ª<+:/«=+iª=+j/«>+™ª>+š/«?+ɪ?+Ê/«@+ùª@+ú/«A,)ªA,*/«B,YªB,Z/«C,‰ªC,Š/«D,¹ªD,º/«E,éªE,ê/«F-ªF-/«G-IªG-J/«H-yªH-z/«I-©ªI-ª/«J-ÙªJ-Ú/«K. ªK. /«L.9ªL.:/«M.iªM.j/«N.™ªN.š/«O.ɪO.Ê/«P.ùªP.ú/«Q/)ªQ/*/«R/YªR/Z/«S/‰ªS/Š/«T/¹ªT/º/«U/éªU/ê/«V0ªV0/«W0IªW0J/«X0yªX0z/«Y0©ªY0ª/«Z0ÙªZ0Ú/«[1 ª[1 /«\19ª\1:/«]1iª]1j/«^1™ª^1š/«_1ɪ_1Ê/«`1ùª`1ú/«a2)ªa2*/«b2Yªb2Z/«c2‰ªc2Š/«d2¹ªd2º/«e2éªe2ê/«f3ªf3/VA VdataLoop-94VA VdataLoop-95\VA VdataLoop-96æVA VdataLoop-97 VA VdataLoop-98ŠVA VdataLoop-99¤VA VdataLoop-100®VA VdataLoop-101fVA VdataLoop-102}VA VdataLoop-103®VA VdataLoop-104®VA VdataLoop-105®VA VdataLoop-106®VA VdataLoop-107®VA VdataLoop-108®VA VdataLoop-109®VA VdataLoop-110®VA VdataLoop-111®VA VdataLoop-112®VA VdataLoop-113®VA VdataLoop-114®VA VdataLoop-115®VA VdataLoop-116®VA VdataLoop-117®VA VdataLoop-118®VA VdataLoop-119®VA VdataLoop-120®VA VdataLoop-121®VA VdataLoop-122®VA VdataLoop-123®VA VdataLoop-124®VA VdataLoop-125®VA VdataLoop-126®VA VdataLoop-127®VA VdataLoop-128®VA VdataLoop-129®VA VdataLoop-130®VA VdataLoop-131®VA VdataLoop-132®VA VdataLoop-133®VA VdataLoop-134®VA VdataLoop-135®VA VdataLoop-136®VA VdataLoop-137®VA VdataLoop-138®VA VdataLoop-139®VA VdataLoop-140®VA VdataLoop-141®VA VdataLoop-142®VA VdataLoop-143®dA_«g7ÿªg8/«h8/ªh80/«i8_ªi8`/«j8ªj8/«k8¿ªk8À/«l8ïªl8ð/«m9ªm9 /«n9Oªn9P/«o9ªo9€/«p9¯ªp9°/«q9ߪq9à/«r:ªr:/«s:?ªs:@/«t:oªt:p/«u:Ÿªu: /«v:Ϫv:Ð/«w:ÿªw;/«x;/ªx;0/«y;_ªy;`/«z;ªz;/«{;¿ª{;À/«|;ïª|;ð/«}<ª}< /«~/«ˆ>/ªˆ>0/«‰>_ª‰>`/«Š>ªŠ>/«‹>¿ª‹>À/«Œ>戴>ð/«?ª? /«Ž?OªŽ?P/«?ª?€/«?¯ª?°/«‘?ߪ‘?à/«’@ª’@/«“@?ª“@@/«”@oª”@p/«•@Ÿª•@ /«–@Ϫ–@Ð/«—@ÿª—A/«˜A/ª˜A0/VA VdataLoop-144»VA VdataLoop-145®VA VdataLoop-146JVA VdataLoop-147®VA VdataLoop-148|VA VdataLoop-149®VA VdataLoop-150hVA VdataLoop-151®VA VdataLoop-152:VA VdataLoop-153®VA VdataLoop-154¤VA VdataLoop-155®VA VdataLoop-156®VA VdataLoop-157®VA VdataLoop-158mVA VdataLoop-159®VA VdataLoop-160VA VdataLoop-161®VA VdataLoop-162)VA VdataLoop-163®VA VdataLoop-164vVA VdataLoop-165®VA VdataLoop-166ÅVA VdataLoop-167®VA VdataLoop-168 VA VdataLoop-169®VA VdataLoop-170ÌVA VdataLoop-171®VA VdataLoop-172‘VA VdataLoop-173®VA VdataLoop-174RVA VdataLoop-175®VA VdataLoop-176­VA VdataLoop-177®VA VdataLoop-178qVA VdataLoop-179®VA VdataLoop-180VA VdataLoop-181®VA VdataLoop-182VA VdataLoop-183®VA VdataLoop-184÷VA VdataLoop-185®VA VdataLoop-186`VA VdataLoop-187®VA VdataLoop-188VA VdataLoop-189®VA VdataLoop-190„VA VdataLoop-191®VA VdataLoop-192‚VA VdataLoop-193®dOu«™Fª™F/«šFEªšFF/«›Fuª›Fv/«œF¥ªœF¦/«FÕªFÖ/«žGªžG/«ŸG5ªŸG6/« Geª Gf/«¡G•ª¡G–/«¢GŪ¢GÆ/«£Gõª£Gö/«¤H%ª¤H&/«¥HUª¥HV/«¦H…ª¦H†/«§Hµª§H¶/«¨H媨Hæ/«©Iª©I/«ªIEªªIF/««Iuª«Iv/«¬I¥ª¬I¦/«­IÕª­IÖ/«®Jª®J/«¯J5ª¯J6/«°Jeª°Jf/«±J•ª±J–/«²JŪ²JÆ/«³Jõª³Jö/«´K%ª´K&/«µKUªµKV/«¶K…ª¶K†/«·Kµª·K¶/«¸K媸Kæ/«¹Lª¹L/«ºLEªºLF/«»Luª»Lv/«¼L¥ª¼L¦/«½LÕª½LÖ/«¾Mª¾M/«¿M5ª¿M6/«ÀMeªÀMf/«ÁM•ªÁM–/«ÂMŪÂMÆ/«ÃMõªÃMö/«ÄN%ªÄN&/«ÅNUªÅNV/«ÆN…ªÆN†/«ÇNµªÇN¶/«ÈNåªÈNæ/«ÉOªÉO/«ÊOEªÊOF/VA VdataLoop-194®VA VdataLoop-195VA VdataLoop-196®VA VdataLoop-197ÍVA VdataLoop-198®VA VdataLoop-199âVA VdataLoop-200®VA VdataLoop-201mVA VdataLoop-202®VA VdataLoop-203†VA VdataLoop-204®VA VdataLoop-205þVA VdataLoop-206®VA VdataLoop-207ÁVA VdataLoop-208®VA VdataLoop-209¡VA VdataLoop-210®VA VdataLoop-211ÓVA VdataLoop-212®VA VdataLoop-2132VA VdataLoop-214®VA VdataLoop-215|VA VdataLoop-216®VA VdataLoop-217'VA VdataLoop-218®VA VdataLoop-219lVA VdataLoop-220®VA VdataLoop-221~VA VdataLoop-222®VA VdataLoop-223&VA VdataLoop-224®VA VdataLoop-225ÚVA VdataLoop-226®VA VdataLoop-227ÁVA VdataLoop-228®VA VdataLoop-229ÝVA VdataLoop-230®VA VdataLoop-231@VA VdataLoop-232®VA VdataLoop-233VA VdataLoop-234®VA VdataLoop-235‘VA VdataLoop-236®VA VdataLoop-237’VA VdataLoop-238®VA VdataLoop-239ÁVA VdataLoop-240®VA VdataLoop-241‘VA VdataLoop-242®VA VdataLoop-243êd]‹«ËT+ªËT,/«ÌT[ªÌT\/«ÍT‹ªÍTŒ/«ÎT»ªÎT¼/«ÏTëªÏTì/«ÐUªÐU/«ÑUKªÑUL/«ÒU{ªÒU|/«ÓU«ªÓU¬/«ÔUÛªÔUÜ/«ÕV ªÕV /«ÖV;ªÖV</«×Vkª×Vl/«ØV›ªØVœ/«ÙV˪ÙVÌ/«ÚVûªÚVü/«ÛW+ªÛW,/«ÜW[ªÜW\/«ÝW‹ªÝWŒ/«ÞW»ªÞW¼/«ßWëªßWì/«àXªàX/«áXKªáXL/«âX{ªâX|/«ãX«ªãX¬/«äXÛªäXÜ/«åY ªåY /«æY;ªæY</«çYkªçYl/«èY›ªèYœ/«éY˪éYÌ/«êYûªêYü/«ëZ+ªëZ,/«ìZ[ªìZ\/«íZ‹ªíZŒ/«îZ»ªîZ¼/«ïZëªïZì/«ð[ªð[/«ñ[Kªñ[L/«ò[{ªò[|/«ó[«ªó[¬/«ô[Ûªô[Ü/«õ\ ªõ\ /«ö\;ªö\</«÷\kª÷\l/«ø\›ªø\œ/«ù\˪ù\Ì/«ú\ûªú\ü/«û]+ªû],/«ü][ªü]\/VA VdataLoop-244ÖVA VdataLoop-245®VA VdataLoop-246°VA VdataLoop-247®VA VdataLoop-248ßVA VdataLoop-249®VA VdataLoop-250AVA VdataLoop-251®VA VdataLoop-252¸VA VdataLoop-253®VA VdataLoop-2547VA VdataLoop-255®VA VdataLoop-256ÙVA VdataLoop-257®VA VdataLoop-258VA VdataLoop-259®VA VdataLoop-260ªVA VdataLoop-261®VA VdataLoop-262ZVA VdataLoop-263®VA VdataLoop-264DVA VdataLoop-265®VA VdataLoop-266‘VA VdataLoop-267®VA VdataLoop-268VA VdataLoop-269®VA VdataLoop-270“VA VdataLoop-271®VA VdataLoop-272rVA VdataLoop-273®VA VdataLoop-274³VA VdataLoop-275®VA VdataLoop-276wVA VdataLoop-277®VA VdataLoop-278èVA VdataLoop-279®VA VdataLoop-280VA VdataLoop-281®VA VdataLoop-282ZVA VdataLoop-283®VA VdataLoop-284pVA VdataLoop-285®VA VdataLoop-286{VA VdataLoop-287®VA VdataLoop-288õVA VdataLoop-289®VA VdataLoop-290»VA VdataLoop-291®VA VdataLoop-292ÔVA VdataLoop-293®dk¡«ýbAªýbB/«þbqªþbr/«ÿb¡ªÿb¢/«bѪbÒ/«cªc/«c1ªc2/«caªcb/«c‘ªc’/«cÁªcÂ/«cñªcò/«d!ªd"/«dQªdR/« dª d‚/« d±ª d²/« d᪠dâ/« eª e/« eAª eB/«eqªer/«e¡ªe¢/«eѪeÒ/«fªf/«f1ªf2/«faªfb/«f‘ªf’/«fÁªfÂ/«fñªfò/«g!ªg"/«gQªgR/«gªg‚/«g±ªg²/«gáªgâ/«hªh/«hAªhB/«hqªhr/«h¡ªh¢/« hѪ hÒ/«!iª!i/«"i1ª"i2/«#iaª#ib/«$i‘ª$i’/«%iÁª%iÂ/«&iñª&iò/«'j!ª'j"/«(jQª(jR/«)jª)j‚/«*j±ª*j²/«+jáª+jâ/«,kª,k/«-kAª-kB/«.kqª.kr/VA VdataLoop-294®VA VdataLoop-295ÔVA VdataLoop-296®VA VdataLoop-297ÍVA VdataLoop-298®VA VdataLoop-2999VA VdataLoop-300®VA VdataLoop-301VA VdataLoop-302®VA VdataLoop-303üVA VdataLoop-304®VA VdataLoop-305VA VdataLoop-306®VA VdataLoop-307#VA VdataLoop-308®VA VdataLoop-309™VA VdataLoop-310®VA VdataLoop-311DVA VdataLoop-312®VA VdataLoop-313#VA VdataLoop-314®VA VdataLoop-315‰VA VdataLoop-316®VA VdataLoop-317uVA VdataLoop-318®VA VdataLoop-319½VA VdataLoop-320®VA VdataLoop-321VA VdataLoop-322®VA VdataLoop-323ŠVA VdataLoop-324®VA VdataLoop-325«VA VdataLoop-326®VA VdataLoop-327VA VdataLoop-328®VA VdataLoop-329ÓVA VdataLoop-330®VA VdataLoop-331KVA VdataLoop-332®VA VdataLoop-333×VA VdataLoop-334®VA VdataLoop-335×VA VdataLoop-336®VA VdataLoop-337HVA VdataLoop-338®VA VdataLoop-339ÄVA VdataLoop-340®VA VdataLoop-341$VA VdataLoop-342®VA VdataLoop-343¡dy·«/pWª/pX/«0p‡ª0pˆ/«1p·ª1p¸/«2pçª2pè/«3qª3q/«4qGª4qH/«5qwª5qx/«6q§ª6q¨/«7qת7qØ/«8rª8r/«9r7ª9r8/«:rgª:rh/«;r—ª;r˜/«<rǪ<rÈ/«=r÷ª=rø/«>s'ª>s(/«?sWª?sX/«@s‡ª@sˆ/«As·ªAs¸/«BsçªBsè/«CtªCt/«DtGªDtH/«EtwªEtx/«Ft§ªFt¨/«GtתGtØ/«HuªHu/«Iu7ªIu8/«JugªJuh/«Ku—ªKu˜/«LuǪLuÈ/«Mu÷ªMuø/«Nv'ªNv(/«OvWªOvX/«Pv‡ªPvˆ/«Qv·ªQv¸/«RvçªRvè/«SwªSw/«TwGªTwH/«UwwªUwx/«Vw§ªVw¨/«WwתWwØ/«XxªXx/«Yx7ªYx8/«ZxgªZxh/«[x—ª[x˜/«\xǪ\xÈ/«]x÷ª]xø/«^y'ª^y(/«_yWª_yX/«`y‡ª`yˆ/VA VdataLoop-344/«qmªqn/«rªrž/«sͪsÎ/«týªtþ/«u‚-ªu‚./«v‚]ªv‚^/«w‚ªw‚Ž/«x‚½ªx‚¾/«y‚íªy‚î/«zƒªzƒ/«{ƒMª{ƒN/«|ƒ}ª|ƒ~/«}ƒ­ª}ƒ®/«~ƒÝª~ƒÞ/«„ ª„/«€„=ª€„>/«„mª„n/«‚„ª‚„ž/«ƒ„ͪƒ„Î/«„„ýª„„þ/«……-ª……./«†…]ª†…^/«‡…ª‡…Ž/«ˆ…½ªˆ…¾/«‰…íª‰…î/«ІªІ/«‹†Mª‹†N/«Œ†}ªŒ†~/«†­ª†®/«ކݪކÞ/«‡ ª‡/«‡=ª‡>/«‘‡mª‘‡n/«’‡ª’‡ž/VA VdataLoop-394®VA VdataLoop-395¤VA VdataLoop-396®VA VdataLoop-3976VA VdataLoop-398®VA VdataLoop-399ÏVA VdataLoop-400®VA VdataLoop-401DVA VdataLoop-402®VA VdataLoop-403tVA VdataLoop-404®VA VdataLoop-405©VA VdataLoop-406®VA VdataLoop-407VA VdataLoop-408®VA VdataLoop-4095VA VdataLoop-410®VA VdataLoop-411âVA VdataLoop-412®VA VdataLoop-413–VA VdataLoop-414®VA VdataLoop-415‰VA VdataLoop-416®VA VdataLoop-417VA VdataLoop-418®VA VdataLoop-419)VA VdataLoop-420®VA VdataLoop-421áVA VdataLoop-422®VA VdataLoop-423 VA VdataLoop-424®VA VdataLoop-425VA VdataLoop-426®VA VdataLoop-427œVA VdataLoop-428®VA VdataLoop-429WVA VdataLoop-430®VA VdataLoop-431iVA VdataLoop-432®VA VdataLoop-433^VA VdataLoop-434®VA VdataLoop-435sVA VdataLoop-436®VA VdataLoop-437¹VA VdataLoop-438®VA VdataLoop-439ðVA VdataLoop-440®VA VdataLoop-441“VA VdataLoop-442®VA VdataLoop-443d•ã«“Œƒª“Œ„/«”Œ³ª”Œ´/«•Œãª•Œä/«–ª–/«—Cª—D/«˜sª˜t/«™£ª™¤/«šÓªšÔ/«›Žª›Ž/«œŽ3ªœŽ4/«ŽcªŽd/«žŽ“ªžŽ”/«ŸŽÃªŸŽÄ/« Žóª Žô/«¡#ª¡$/«¢Sª¢T/«£ƒª£„/«¤³ª¤´/«¥ãª¥ä/«¦ª¦/«§Cª§D/«¨sª¨t/«©£ª©¤/«ªÓªªÔ/««‘ª«‘/«¬‘3ª¬‘4/«­‘cª­‘d/«®‘“ª®‘”/«¯‘ꯑÄ/«°‘óª°‘ô/«±’#ª±’$/«²’Sª²’T/«³’ƒª³’„/«´’³ª´’´/«µ’㪵’ä/«¶“ª¶“/«·“Cª·“D/«¸“sª¸“t/«¹“£ª¹“¤/«º“Óªº“Ô/«»”ª»”/«¼”3ª¼”4/«½”cª½”d/«¾”“ª¾””/«¿”ê¿”Ä/«À”óªÀ”ô/«Á•#ªÁ•$/«•Sª•T/«ÕƒªÕ„/«Ä•³ªÄ•´/VA VdataLoop-444oVA VdataLoop-445®VA VdataLoop-446ØVA VdataLoop-447®VA VdataLoop-448þVA VdataLoop-449®VA VdataLoop-450VA VdataLoop-451®VA VdataLoop-452rVA VdataLoop-453®VA VdataLoop-454‚VA VdataLoop-455®VA VdataLoop-456\VA VdataLoop-457®VA VdataLoop-458ÂVA VdataLoop-459®VA VdataLoop-460¬VA VdataLoop-461®VA VdataLoop-462•VA VdataLoop-463®VA VdataLoop-464VA VdataLoop-465®VA VdataLoop-466VA VdataLoop-467®VA VdataLoop-468iVA VdataLoop-469®VA VdataLoop-470jVA VdataLoop-471®VA VdataLoop-472‹VA VdataLoop-473®VA VdataLoop-474wVA VdataLoop-475®VA VdataLoop-476tVA VdataLoop-477®VA VdataLoop-4785VA VdataLoop-479®VA VdataLoop-480ÛVA VdataLoop-481®VA VdataLoop-482äVA VdataLoop-483®VA VdataLoop-484ñVA VdataLoop-485®VA VdataLoop-486'VA VdataLoop-487®VA VdataLoop-4888VA VdataLoop-489®VA VdataLoop-490ÂVA VdataLoop-491®VA VdataLoop-492õVA VdataLoop-493®d£ù«Åš™ªÅšš/«ÆšÉªÆšÊ/«ÇšùªÇšú/«È›)ªÈ›*/«É›YªÉ›Z/«Ê›‰ªÊ›Š/«Ë›¹ªË›º/«Ì›éªÌ›ê/«ÍœªÍœ/«ΜIªΜJ/«ÏœyªÏœz/«М©ªМª/«ÑœÙªÑœÚ/«Ò ªÒ /«Ó9ªÓ:/«ÔiªÔj/«Õ™ªÕš/«ÖɪÖÊ/«×ùª×ú/«Øž)ªØž*/«ÙžYªÙžZ/«Úž‰ªÚžŠ/«Ûž¹ªÛžº/«ÜžéªÜžê/«ÝŸªÝŸ/«ÞŸIªÞŸJ/«ߟyªߟz/«àŸ©ªàŸª/«áŸÙªáŸÚ/«â  ªâ  /«ã 9ªã :/«ä iªä j/«å ™ªå š/«æ Éªæ Ê/«ç ùªç ú/«è¡)ªè¡*/«é¡Yªé¡Z/«ꡉªꡊ/«롹ª롺/«ì¡éªì¡ê/«í¢ªí¢/«î¢Iªî¢J/«ï¢yªï¢z/«ð¢©ªð¢ª/«ñ¢Ùªñ¢Ú/«ò£ ªò£ /«ó£9ªó£:/«ô£iªô£j/«õ£™ªõ£š/«ö£Éªö£Ê/VA VdataLoop-494®VA VdataLoop-495AVA VdataLoop-496®VA VdataLoop-497áVA VdataLoop-498®VA VdataLoop-499ÿVA VdataLoop-500®VA VdataLoop-501VA VdataLoop-502®VA VdataLoop-503ÆVA VdataLoop-504®VA VdataLoop-505œVA VdataLoop-506®VA VdataLoop-507VA VdataLoop-508®VA VdataLoop-509ªVA VdataLoop-510®VA VdataLoop-511ñVA VdataLoop-512®VA VdataLoop-513¹VA VdataLoop-514®VA VdataLoop-515VA VdataLoop-516®VA VdataLoop-5170VA VdataLoop-518®VA VdataLoop-519VA VdataLoop-520®VA VdataLoop-521aVA VdataLoop-522®VA VdataLoop-523VA VdataLoop-524®VA VdataLoop-525öVA VdataLoop-526®VA VdataLoop-527VA VdataLoop-528®VA VdataLoop-529sVA VdataLoop-530®VA VdataLoop-531[VA VdataLoop-532®VA VdataLoop-533¡VA VdataLoop-534®VA VdataLoop-535rVA VdataLoop-536®VA VdataLoop-5372VA VdataLoop-538®VA VdataLoop-539ÂVA VdataLoop-540®VA VdataLoop-541ËVA VdataLoop-542®VA VdataLoop-543Gd²«÷¨¯ª÷¨°/«ø¨ßªø¨à/«ù©ªù©/«ú©?ªú©@/«û©oªû©p/«ü©Ÿªü© /«ý©Ïªý©Ð/«þ©ÿªþª/«ÿª/ªÿª0/«ª_ªª`/«ªªª/«ª¿ªªÀ/«ªïªªð/««ª« /««Oª«P/««ª«€/««¯ª«°/««ßª«à/« ¬ª ¬/« ¬?ª ¬@/« ¬oª ¬p/« ¬Ÿª ¬ /« ¬Ïª ¬Ð/«¬ÿª­/«­/ª­0/«­_ª­`/«­ª­/«­¿ª­À/«­ïª­ð/«®ª® /«®Oª®P/«®ª®€/«®¯ª®°/«®ßª®à/«¯ª¯/«¯?ª¯@/«¯oª¯p/«¯Ÿª¯ /«¯Ïª¯Ð/«¯ÿª°/«°/ª°0/« °_ª °`/«!°ª!°/«"°¿ª"°À/«#°ïª#°ð/«$±ª$± /«%±Oª%±P/«&±ª&±€/«'±¯ª'±°/«(±ßª(±à/VA VdataLoop-544³VA VdataLoop-545®VA VdataLoop-546ùVA VdataLoop-547®VA VdataLoop-548ŽVA VdataLoop-549®VA VdataLoop-550LVA VdataLoop-551®VA VdataLoop-552ÒVA VdataLoop-553®VA VdataLoop-554BVA VdataLoop-555®VA VdataLoop-556BVA VdataLoop-557®VA VdataLoop-558oVA VdataLoop-559®VA VdataLoop-560§VA VdataLoop-561®VA VdataLoop-562DVA VdataLoop-563®VA VdataLoop-564¯VA VdataLoop-565®VA VdataLoop-566›VA VdataLoop-567®VA VdataLoop-568÷VA VdataLoop-569®VA VdataLoop-570WVA VdataLoop-571®VA VdataLoop-572 VA VdataLoop-573®VA VdataLoop-574VA VdataLoop-575®VA VdataLoop-576¢VA VdataLoop-577®VA VdataLoop-578dVA VdataLoop-579®VA VdataLoop-580 VA VdataLoop-581®VA VdataLoop-582ÀVA VdataLoop-583®VA VdataLoop-584ÉVA VdataLoop-585®VA VdataLoop-586@VA VdataLoop-587®VA VdataLoop-588ÀVA VdataLoop-589®VA VdataLoop-590°VA VdataLoop-591®VA VdataLoop-592¹VA VdataLoop-593®dÀ%«)¶Åª)¶Æ/«*¶õª*¶ö/«+·%ª+·&/«,·Uª,·V/«-·…ª-·†/«.·µª.·¶/«/·åª/·æ/«0¸ª0¸/«1¸Eª1¸F/«2¸uª2¸v/«3¸¥ª3¸¦/«4¸Õª4¸Ö/«5¹ª5¹/«6¹5ª6¹6/«7¹eª7¹f/«8¹•ª8¹–/«9¹Åª9¹Æ/«:¹õª:¹ö/«;º%ª;º&/«<ºUª<ºV/«=º…ª=º†/«>ºµª>º¶/«?ºåª?ºæ/«@»ª@»/«A»EªA»F/«B»uªB»v/«C»¥ªC»¦/«D»ÕªD»Ö/«E¼ªE¼/«F¼5ªF¼6/«G¼eªG¼f/«H¼•ªH¼–/«I¼ÅªI¼Æ/«J¼õªJ¼ö/«K½%ªK½&/«L½UªL½V/«M½…ªM½†/«N½µªN½¶/«O½åªO½æ/«P¾ªP¾/«Q¾EªQ¾F/«R¾uªR¾v/«S¾¥ªS¾¦/«T¾ÕªT¾Ö/«U¿ªU¿/«V¿5ªV¿6/«W¿eªW¿f/«X¿•ªX¿–/«Y¿ÅªY¿Æ/«Z¿õªZ¿ö/VA VdataLoop-594®VA VdataLoop-595MVA VdataLoop-596®VA VdataLoop-597PVA VdataLoop-598®VA VdataLoop-599VA VdataLoop-600®VA VdataLoop-601>VA VdataLoop-602®VA VdataLoop-603¥VA VdataLoop-604®VA VdataLoop-605nVA VdataLoop-606®VA VdataLoop-607kVA VdataLoop-608®VA VdataLoop-609ûVA VdataLoop-610®VA VdataLoop-611âVA VdataLoop-612®VA VdataLoop-613CVA VdataLoop-614®VA VdataLoop-615”VA VdataLoop-616®VA VdataLoop-617ÌVA VdataLoop-618®VA VdataLoop-619VA VdataLoop-620®VA VdataLoop-621ÓVA VdataLoop-622®VA VdataLoop-623&VA VdataLoop-624®VA VdataLoop-625»VA VdataLoop-626®VA VdataLoop-627™VA VdataLoop-628®VA VdataLoop-629dVA VdataLoop-630®VA VdataLoop-631vVA VdataLoop-632®VA VdataLoop-633µVA VdataLoop-634®VA VdataLoop-635ôVA VdataLoop-636®VA VdataLoop-637 VA VdataLoop-638®VA VdataLoop-639‰VA VdataLoop-640®VA VdataLoop-641ÒVA VdataLoop-642®VA VdataLoop-643ÙdÎ;«[ÄÛª[ÄÜ/«\Å ª\Å /«]Å;ª]Å</«^Åkª^Ål/«_Å›ª_Åœ/«`Å˪`ÅÌ/«aÅûªaÅü/«bÆ+ªbÆ,/«cÆ[ªcÆ\/«dÆ‹ªdÆŒ/«eÆ»ªeƼ/«fÆëªfÆì/«gǪgÇ/«hÇKªhÇL/«iÇ{ªiÇ|/«jÇ«ªjǬ/«kÇÛªkÇÜ/«lÈ ªlÈ /«mÈ;ªmÈ</«nÈkªnÈl/«oÈ›ªoÈœ/«pÈ˪pÈÌ/«qÈûªqÈü/«rÉ+ªrÉ,/«sÉ[ªsÉ\/«tÉ‹ªtÉŒ/«uÉ»ªuɼ/«vÉëªvÉì/«wʪwÊ/«xÊKªxÊL/«yÊ{ªyÊ|/«zÊ«ªzʬ/«{ÊÛª{ÊÜ/«|Ë ª|Ë /«}Ë;ª}Ë</«~Ëkª~Ël/«Ë›ªËœ/«€Ë˪€ËÌ/«ËûªËü/«‚Ì+ª‚Ì,/«ƒÌ[ªƒÌ\/«„Ì‹ª„ÌŒ/«…Ì»ª…̼/«†Ì몆Ìì/«‡Íª‡Í/«ˆÍKªˆÍL/«‰Í{ª‰Í|/«ŠÍ«ªŠÍ¬/«‹ÍÛª‹ÍÜ/«ŒÎ ªŒÎ /VA VdataLoop-644±VA VdataLoop-645®VA VdataLoop-646(VA VdataLoop-647®VA VdataLoop-648ìVA VdataLoop-649®VA VdataLoop-650ÇVA VdataLoop-651®VA VdataLoop-652VA VdataLoop-653®VA VdataLoop-654ƒVA VdataLoop-655®VA VdataLoop-656´VA VdataLoop-657®VA VdataLoop-658VA VdataLoop-659®VA VdataLoop-660éVA VdataLoop-661®VA VdataLoop-662ëVA VdataLoop-663®VA VdataLoop-664¾VA VdataLoop-665®VA VdataLoop-666ýVA VdataLoop-667®VA VdataLoop-668áVA VdataLoop-669®VA VdataLoop-670VA VdataLoop-671®VA VdataLoop-672 VA VdataLoop-673®VA VdataLoop-674OVA VdataLoop-675®VA VdataLoop-676?VA VdataLoop-677®VA VdataLoop-678£VA VdataLoop-679®VA VdataLoop-680}VA VdataLoop-681®VA VdataLoop-682€VA VdataLoop-683®VA VdataLoop-684—VA VdataLoop-685®VA VdataLoop-686ÄVA VdataLoop-687®VA VdataLoop-688ÊVA VdataLoop-689®VA VdataLoop-690µVA VdataLoop-691®VA VdataLoop-692VA VdataLoop-693®dÜQ«ÒñªÒò/«ŽÓ!ªŽÓ"/«ÓQªÓR/«ÓªÓ‚/«‘Ó±ª‘Ó²/«’Ó᪒Óâ/«“Ôª“Ô/«”ÔAª”ÔB/«•Ôqª•Ôr/«–Ô¡ª–Ô¢/«—ÔѪ—ÔÒ/«˜Õª˜Õ/«™Õ1ª™Õ2/«šÕaªšÕb/«›Õ‘ª›Õ’/«œÕÁªœÕÂ/«ÕñªÕò/«žÖ!ªžÖ"/«ŸÖQªŸÖR/« Öª Ö‚/«¡Ö±ª¡Ö²/«¢Ö᪢Öâ/«£×ª£×/«¤×Aª¤×B/«¥×qª¥×r/«¦×¡ª¦×¢/«§×Ѫ§×Ò/«¨Øª¨Ø/«©Ø1ª©Ø2/«ªØaªªØb/««Ø‘ª«Ø’/«¬ØÁª¬ØÂ/«­Øñª­Øò/«®Ù!ª®Ù"/«¯ÙQª¯ÙR/«°Ùª°Ù‚/«±Ù±ª±Ù²/«²Ù᪲Ùâ/«³Úª³Ú/«´ÚAª´ÚB/«µÚqªµÚr/«¶Ú¡ª¶Ú¢/«·ÚѪ·ÚÒ/«¸Ûª¸Û/«¹Û1ª¹Û2/«ºÛaªºÛb/«»Û‘ª»Û’/«¼ÛÁª¼ÛÂ/«½Ûñª½Ûò/«¾Ü!ª¾Ü"/VA VdataLoop-694®VA VdataLoop-695¶VA VdataLoop-696®VA VdataLoop-697VA VdataLoop-698®VA VdataLoop-699²VA VdataLoop-700®VA VdataLoop-701dVA VdataLoop-702®VA VdataLoop-703úVA VdataLoop-704®VA VdataLoop-705•VA VdataLoop-706®VA VdataLoop-707oVA VdataLoop-708®VA VdataLoop-709"VA VdataLoop-710®VA VdataLoop-711ÞVA VdataLoop-712®VA VdataLoop-713eVA VdataLoop-714®VA VdataLoop-715ËVA VdataLoop-716®VA VdataLoop-717oVA VdataLoop-718®VA VdataLoop-719ÇVA VdataLoop-720®VA VdataLoop-721%VA VdataLoop-722®VA VdataLoop-7230VA VdataLoop-724®VA VdataLoop-725>VA VdataLoop-726®VA VdataLoop-727‘VA VdataLoop-728®VA VdataLoop-729hVA VdataLoop-730®VA VdataLoop-731\VA VdataLoop-732®VA VdataLoop-7338VA VdataLoop-734®VA VdataLoop-735ÖVA VdataLoop-736®VA VdataLoop-737âVA VdataLoop-738®VA VdataLoop-739üVA VdataLoop-740®VA VdataLoop-741-VA VdataLoop-742®VA VdataLoop-743Ddêg«¿áª¿á/«Àá7ªÀá8/«ÁágªÁáh/«Âá—ªÂá˜/«ÃáǪÃáÈ/«Äá÷ªÄáø/«Åâ'ªÅâ(/«ÆâWªÆâX/«Ç⇪Çâˆ/«Èâ·ªÈâ¸/«ÉâçªÉâè/«ÊãªÊã/«ËãGªËãH/«ÌãwªÌãx/«Í㧪Íã¨/«ÎãתÎãØ/«ÏäªÏä/«Ðä7ªÐä8/«ÑägªÑäh/«Òä—ªÒä˜/«ÓäǪÓäÈ/«Ôä÷ªÔäø/«Õå'ªÕå(/«ÖåWªÖåX/«×凪×åˆ/«Øå·ªØå¸/«ÙåçªÙåè/«ÚæªÚæ/«ÛæGªÛæH/«ÜæwªÜæx/«Ýæ§ªÝæ¨/«Þæ×ªÞæØ/«ßçªßç/«àç7ªàç8/«áçgªáçh/«âç—ªâç˜/«ãçǪãçÈ/«äç÷ªäçø/«åè'ªåè(/«æèWªæèX/«ç自çèˆ/«èè·ªèè¸/«éèçªéèè/«êéªêé/«ëéGªëéH/«ìéwªìéx/«í駪íé¨/«îéתîéØ/«ïêªïê/«ðê7ªðê8/VA VdataLoop-744’VA VdataLoop-745®VA VdataLoop-746öVA VdataLoop-747®VA VdataLoop-7486VA VdataLoop-749®VA VdataLoop-750nVA VdataLoop-751®VA VdataLoop-752oVA VdataLoop-753®VA VdataLoop-754ÑVA VdataLoop-755®VA VdataLoop-756[VA VdataLoop-757®VA VdataLoop-758OVA VdataLoop-759®VA VdataLoop-760´VA VdataLoop-761®VA VdataLoop-762óVA VdataLoop-763®VA VdataLoop-764:VA VdataLoop-765®VA VdataLoop-766ƒVA VdataLoop-767®VA VdataLoop-768VA VdataLoop-769®VA VdataLoop-770ïVA VdataLoop-771®VA VdataLoop-772±VA VdataLoop-773®VA VdataLoop-774øVA VdataLoop-775®VA VdataLoop-776§VA VdataLoop-777®VA VdataLoop-778ÞVA VdataLoop-779®VA VdataLoop-780MVA VdataLoop-781®VA VdataLoop-782üVA VdataLoop-783®VA VdataLoop-784øVA VdataLoop-785®VA VdataLoop-786ÛVA VdataLoop-787®VA VdataLoop-788&VA VdataLoop-789®VA VdataLoop-790RVA VdataLoop-791®VA VdataLoop-792ìVA VdataLoop-793®dø}«ñïªñï/«òïMªòïN/«óï}ªóï~/«ôï­ªôï®/«õïݪõïÞ/«öð ªöð/«÷ð=ª÷ð>/«øðmªøðn/«ùðªùðž/«úðͪúðÎ/«ûðýªûðþ/«üñ-ªüñ./«ýñ]ªýñ^/«þñªþñŽ/«ÿñ½ªÿñ¾/«ñíªñî/«òªò/«òMªòN/«ò}ªò~/«ò­ªò®/«òݪòÞ/«ó ªó/«ó=ªó>/«ómªón/« óª óž/« óͪ óÎ/« óýª óþ/« ô-ª ô./« ô]ª ô^/«ôªôŽ/«ô½ªô¾/«ôíªôî/«õªõ/«õMªõN/«õ}ªõ~/«õ­ªõ®/«õݪõÞ/«ö ªö/«ö=ªö>/«ömªön/«öªöž/«öͪöÎ/«öýªöþ/«÷-ª÷./«÷]ª÷^/«÷ª÷Ž/«÷½ª÷¾/« ÷íª ÷î/«!øª!ø/«"øMª"øN/VA VdataLoop-794®VA VdataLoop-795“VA VdataLoop-796®VA VdataLoop-797ÊVA VdataLoop-798®VA VdataLoop-799ÉVA VdataLoop-800®VA VdataLoop-801:VA VdataLoop-802®VA VdataLoop-803|VA VdataLoop-804®VA VdataLoop-805¦VA VdataLoop-806®VA VdataLoop-807yVA VdataLoop-808®VA VdataLoop-809cVA VdataLoop-810®VA VdataLoop-811µVA VdataLoop-812®VA VdataLoop-813¡VA VdataLoop-814®VA VdataLoop-815ïVA VdataLoop-816®VA VdataLoop-817.VA VdataLoop-818®VA VdataLoop-819ÑVA VdataLoop-820®VA VdataLoop-821kVA VdataLoop-822®VA VdataLoop-823²VA VdataLoop-824®VA VdataLoop-825ÙVA VdataLoop-826®VA VdataLoop-827LVA VdataLoop-828®VA VdataLoop-8294VA VdataLoop-830®VA VdataLoop-831VA VdataLoop-832®VA VdataLoop-833˜VA VdataLoop-834®VA VdataLoop-835_VA VdataLoop-836®VA VdataLoop-837VA VdataLoop-838®VA VdataLoop-8394VA VdataLoop-840®VA VdataLoop-841{VA VdataLoop-842®VA VdataLoop-843#d“«#ý3ª#ý4/«$ýcª$ýd/«%ý“ª%ý”/«&ýê&ýÄ/«'ýóª'ýô/«(þ#ª(þ$/«)þSª)þT/«*þƒª*þ„/«+þ³ª+þ´/«,þãª,þä/«-ÿª-ÿ/«.ÿCª.ÿD/«/ÿsª/ÿt/«0ÿ£ª0ÿ¤/«1ÿÓª1ÿÔ/«2ª2/«33ª34/«4cª4d/«5“ª5”/«6ê6Ä/«7óª7ô/«8#ª8$/«9Sª9T/«:ƒª:„/«;³ª;´/«<ãª<ä/«=ª=/«>Cª>D/«?sª?t/«@£ª@¤/«AÓªAÔ/«BªB/«C3ªC4/«DcªDd/«E“ªE”/«FêFÄ/«GóªGô/«H#ªH$/«ISªIT/«JƒªJ„/«K³ªK´/«LãªLä/«MªM/«NCªND/«OsªOt/«P£ªP¤/«QÓªQÔ/«RªR/«S3ªS4/«TcªTd/VA VdataLoop-844VA VdataLoop-845®VA VdataLoop-846#VA VdataLoop-847®VA VdataLoop-848”VA VdataLoop-849®VA VdataLoop-850?VA VdataLoop-851®VA VdataLoop-852“VA VdataLoop-853®VA VdataLoop-854VA VdataLoop-855®VA VdataLoop-856ÀVA VdataLoop-857®VA VdataLoop-858ÊVA VdataLoop-859®VA VdataLoop-860DVA VdataLoop-861®VA VdataLoop-862ÛVA VdataLoop-863®VA VdataLoop-864|VA VdataLoop-865®VA VdataLoop-866ÄVA VdataLoop-867®VA VdataLoop-868|VA VdataLoop-869®VA VdataLoop-870ìVA VdataLoop-871®VA VdataLoop-872ÄVA VdataLoop-873®VA VdataLoop-874!VA VdataLoop-875®VA VdataLoop-876ÏVA VdataLoop-877®VA VdataLoop-878ÝVA VdataLoop-879®VA VdataLoop-880aVA VdataLoop-881®VA VdataLoop-882ÜVA VdataLoop-883®VA VdataLoop-884WVA VdataLoop-885®VA VdataLoop-886mVA VdataLoop-887®VA VdataLoop-888çVA VdataLoop-889®VA VdataLoop-890QVA VdataLoop-891®VA VdataLoop-892©VA VdataLoop-893®d©«U IªU J/«V yªV z/«W ©ªW ª/«X ÙªX Ú/«Y ªY /«Z 9ªZ :/«[ iª[ j/«\ ™ª\ š/«] ɪ] Ê/«^ ùª^ ú/«_ )ª_ */«` Yª` Z/«a ‰ªa Š/«b ¹ªb º/«c éªc ê/«dªd/«eIªeJ/«fyªfz/«g©ªgª/«hÙªhÚ/«i ªi /«j9ªj:/«kiªkj/«l™ªlš/«mɪmÊ/«nùªnú/«o)ªo*/«pYªpZ/«q‰ªqŠ/«r¹ªrº/«séªsê/«tªt/«uIªuJ/«vyªvz/«w©ªwª/«xÙªxÚ/«y ªy /«z9ªz:/«{iª{j/«|™ª|š/«}ɪ}Ê/«~ùª~ú/«)ª*/«€Yª€Z/«‰ªŠ/«‚¹ª‚º/«ƒéªƒê/«„ª„/«…Iª…J/«†yª†z/VA VdataLoop-894®VA VdataLoop-895ÜVA VdataLoop-896®VA VdataLoop-897ËVA VdataLoop-898®VA VdataLoop-899ãVA VdataLoop-900®VA VdataLoop-901VA VdataLoop-902®VA VdataLoop-903cVA VdataLoop-904®VA VdataLoop-905œVA VdataLoop-906®VA VdataLoop-907†VA VdataLoop-908®VA VdataLoop-909VA VdataLoop-910®VA VdataLoop-911‡VA VdataLoop-912®VA VdataLoop-913'VA VdataLoop-914®VA VdataLoop-915sVA VdataLoop-916®VA VdataLoop-917ÇVA VdataLoop-918®VA VdataLoop-919±VA VdataLoop-920®VA VdataLoop-921TVA VdataLoop-922®VA VdataLoop-923 VA VdataLoop-924®VA VdataLoop-925ÞVA VdataLoop-926®VA VdataLoop-927NVA VdataLoop-928®VA VdataLoop-929–VA VdataLoop-930®VA VdataLoop-931ÝVA VdataLoop-932®VA VdataLoop-933WVA VdataLoop-934®VA VdataLoop-935÷VA VdataLoop-936®VA VdataLoop-937ÉVA VdataLoop-938®VA VdataLoop-939DVA VdataLoop-940®VA VdataLoop-941€VA VdataLoop-942®VA VdataLoop-943:d"¿«‡_ª‡`/«ˆªˆ/«‰¿ª‰À/«ŠïªŠð/«‹ª‹ /«ŒOªŒP/«ª€/«Ž¯ªŽ°/«ßªà/«ª/«‘?ª‘@/«’oª’p/«“Ÿª“ /«”Ϫ”Ð/«•ÿª•/«–/ª–0/«—_ª—`/«˜ª˜/«™¿ª™À/«šïªšð/«›ª› /«œOªœP/«ª€/«ž¯ªž°/«ŸßªŸà/« ª /«¡?ª¡@/«¢oª¢p/«£Ÿª£ /«¤Ïª¤Ð/«¥ÿª¥/«¦/ª¦0/«§_ª§`/«¨ª¨/«©¿ª©À/«ªïªªð/«« ª« /«¬ Oª¬ P/«­ ª­ €/«® ¯ª® °/«¯ ߪ¯ à/«°!ª°!/«±!?ª±!@/«²!oª²!p/«³!Ÿª³! /«´!Ϫ´!Ð/«µ!ÿªµ"/«¶"/ª¶"0/«·"_ª·"`/«¸"ª¸"/VA VdataLoop-944] [-only ]" echo " -help: display help information" echo " -noclean: do not clean away temporary files" echo " -quit: quit immediately if any test fails" echo " -except: skip one specific command" echo " -only: test one specific command" echo " can be one of {list, dumpsds, dumprig, dumpvd, dumpvg, dumpgr}" } # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Run the test to produce an output file which is then # compared with the expected ($1) output. # Note that this can be used to produce the expected # output files by replace "$output" with "$expected" # in the run-the-test commands. TEST() { # parse the arguments output=tmp.out expected="$srcdir/testfiles/$1" shift # print a id banner MESG 6 "$@" # run the test ( cd $srcdir/testfiles $HDP_BIN "$@" ) > $output $CMP $expected $output if [ $? -ne 0 ]; then echo $DIFF $expected $output $DIFF $expected $output echo " <<< FAILED >>>" nerrors=`expr $nerrors + 1` if [ $quitonerr -gt 0 ]; then FINISH fi fi if [ $noclean -eq 0 ]; then $RM -f $output fi } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All hdp tests passed" else MESG 0 "hdp tests failed: $nerrors" fi exit $nerrors } #=============== # Main Body #=============== # parse arguments while [ $# -gt 0 ] do case "$1" in "-quit") quitonerr=1 ;; "-noclean") noclean=1 ;; "-help") USAGE exit 0 ;; "-only") shift case "$1" in "list"|"dumpsds"|"dumprig"|"dumpvd"|"dumpvg"|"dumpgr") only="$1" ;; *) echo "Unknown command: $1" USAGE exit 1 ;; esac ;; "-except") shift case "$1" in "list"|"dumpsds"|"dumprig"|"dumpvd"|"dumpvg"|"dumpgr") except="$1" ;; *) echo "Unknown command: $1" USAGE exit 1 ;; esac ;; * ) echo "Unknown option: $1" USAGE exit 1 ;; esac shift done # Print a beginning banner MESG 0 "Running hdp tests" # Test command list TestCmd=list TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" TEST list-1.out list tdata.hdf TEST list-2.out list -l tdata.hdf TEST list-3.out list -d tdata.hdf TEST list-4.out list -e tdata.hdf TEST list-5.out list -t 720 tdata.hdf TEST list-6.out list -d -t "Numeric Data Group" tdata.hdf TEST list-7.out list -g tdata.hdf TEST list-8.out list -a tdata.hdf TEST list-9.out list -a Example6.hdf TEST list-10.out list -n Example6.hdf else MESG 3 "$TestName <<>>" fi # Test command dumpsds TestCmd=dumpsds TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" # Test 1 prints all datasets TEST dumpsds-1.out dumpsds swf32.hdf # Tests 2 and 3 print datasets given their indices TEST dumpsds-2.out dumpsds -i 2 swf32.hdf TEST dumpsds-3.out dumpsds -i 1,3 swf32.hdf # Test 4 should fail with error message: "SD with name Time: not found" TEST dumpsds-4.out dumpsds -n Time swf32.hdf # Test 5 prints datasets given their names TEST dumpsds-5.out dumpsds -n fakeDim0,Data-Set-2 swf32.hdf # Test 6 prints datasets given their ref numbers TEST dumpsds-6.out dumpsds -r 3,2 swf32.hdf # Test 7 prints only data of the datasets selected by their ref numbers TEST dumpsds-7.out dumpsds -r 3,2 -d swf32.hdf # Test 8 prints only header information TEST dumpsds-8.out dumpsds -h swf32_fileattr.hdf # Test 9 prints data in clean format, no \digit's TEST dumpsds-9.out dumpsds -c swf32_fileattr.hdf # Test 10 prints contents of file without file attribute's data TEST dumpsds-10.out dumpsds -g swf32_fileattr.hdf # Test 11 prints contents of file without local attribute's data TEST dumpsds-11.out dumpsds -l swf32_fileattr.hdf # Test 12 prints a dataset by name and the name is very long TEST dumpsds-12.out dumpsds -h -n "The name of this dataset is long and it is used to test the new variable length name feature." SDSlongname.hdf # Test 13 prints contents of file when a dimension has the same name as its SDS TEST dumpsds-13.out dumpsds sds1_dim1_samename.hdf # Test 14 prints contents of file when a dimension has the same name as # that of another SDS TEST dumpsds-14.out dumpsds sds2_dim1_samename.hdf # Test 15 prints headers of all data sets with various compression method to # test displaying compression information if test $USE_COMP_SZIP != "yes"; then TEST dumpsds-15.out dumpsds sds_compressed.hdf else TEST dumpsds-15szip.out dumpsds sds_compressed.hdf fi # Test 16 prints SDSs in index order, by default TEST dumpsds-16.out dumpsds -h -i 39,36 -n data34,data27 -r 36,37 -i 0,1 -n data6,data9,data4,data3 -r 16,17,15 -i 23,22,21 sds_empty_many.hdf # Test 17 prints SDSs in the order they were specified, when flag -k is present # as a request to 'k'eep the specified order TEST dumpsds-17.out dumpsds -k -h -i 39,36 -n data34,data27 -r 36,37 -i 0,1 -n data6,data9,data4,data3 -r 16,17,15 -i 23,22,21 sds_empty_many.hdf # Test 18 reads a few small datasets in a netCDF file TEST dumpsds-18.out dumpsds -i 0,1,2 Roy.nc # Test 19 displays a message when the file is a netCDF 64-bit file TEST dumpsds-19.out dumpsds Roy-64.nc # Test 20 detects empty variable in a netCDF file and displays info when a # netCDF variable has rank = 0 TEST dumpsds-20.out dumpsds var3D_empty.nc else MESG 3 "$TestName <<>>" fi # Test command dumprig TestCmd=dumprig TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" TEST dumprig-1.out dumprig tdf24.hdf TEST dumprig-2.out dumprig -i 1,2 tdf24.hdf TEST dumprig-3.out dumprig -i 1,3 tdf24.hdf # '-i 3' is invalid TEST dumprig-4.out dumprig -m 24 tdf24.hdf TEST dumprig-5.out dumprig -r 3,4 tdf24.hdf TEST dumprig-6.out dumprig -r 3,4 -d tdf24.hdf else MESG 3 "$TestName <<>>" fi # Test command dumpvd TestCmd=dumpvd TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" TEST dumpvd-1.out dumpvd tvset.hdf TEST dumpvd-2.out dumpvd -i 1,3,5 tvset.hdf TEST dumpvd-3.out dumpvd -r 1238,1239,1251,1252 tvset.hdf TEST dumpvd-4.out dumpvd -n "Multi-Order Vdata" tvset.hdf TEST dumpvd-5.out dumpvd -n "Mixed Vdata","Integer Vdata" tvset.hdf TEST dumpvd-6.out dumpvd -c "Test object","No class specified" tvset.hdf TEST dumpvd-7.out dumpvd -f B tvset.hdf TEST dumpvd-8.out dumpvd -f "STATION_NAME","FLOATS" tvset.hdf TEST dumpvd-9.out dumpvd -f "STATION_NAME","FLOATS" -d tvset.hdf TEST dumpvd-10.out dumpvd tvattr.hdf # Tests 11 and 12 print out the vdatas of classes "SDSVar" and "CoordVar" # to test the fix of bugzilla 624 (these are new classes used to distinguish # between SDS and coordinate variables) TEST dumpvd-11.out dumpvd -c "SDSVar" sds1_dim1_samename.hdf TEST dumpvd-12.out dumpvd -c "CoordVar" sds1_dim1_samename.hdf # Added test #13 to test long vdata's name and class, HDFFR-1267 - BMR 5/15/11 TEST dumpvd-13.out dumpvd vslongname.hdf # Added test #14 to test the detection of external file, HDFFR-1266. The # external file is Tables_External_File and when the file is removed from the # current directory, the test will fail with the name of the file displayed in # the error message. - BMR 6/10/11 TEST dumpvd-14.out dumpvd Tables.hdf else MESG 3 "$TestName <<>>" fi # Test command dumpvg TestCmd=dumpvg TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" TEST dumpvg-1.out dumpvg tvset.hdf TEST dumpvg-2.out dumpvg -i 0,1 tvset.hdf TEST dumpvg-3.out dumpvg -r 3 tvset.hdf TEST dumpvg-4.out dumpvg -n "Simple Vgroup" tvset.hdf TEST dumpvg-5.out dumpvg -c "Test object" tvset.hdf TEST dumpvg-6.out dumpvg -i 1,3,5 tdata.hdf TEST dumpvg-7.out dumpvg -r 32,39 tdata.hdf TEST dumpvg-8.out dumpvg -n nsamp,tdata.hdf tdata.hdf TEST dumpvg-9.out dumpvg -c CDF0.0 tdata.hdf # Added option -h to the following test; this option has always # failed; just fixed it - BMR 8/1/00 TEST dumpvg-10.out dumpvg -h -c Dim0.0,Var0.0 tdata.hdf # this following test is removed since option -d is removed #TEST dumpvg-11.out dumpvg -c Dim0.0,Var0.0 -d tdata.hdf # moved test #12 up to #11, consequently - BMR 7/25/00 TEST dumpvg-11.out dumpvg tvattr.hdf # Added these two tests for the new feature: vgroup has variable length # name - BMR 10/27/06 # Note that the dumpvg-13 test searches for an SDS also TEST dumpvg-12.out dumpvg VGlongname.hdf TEST dumpvg-13.out dumpvg -n "SD Vgroup - this vgroup has an sds as a member and it is actually meant to test long vgroup name" VGlongname.hdf # Prints contents of file when a dimension has the same name as its SDS TEST dumpvg-14.out dumpvg sds1_dim1_samename.hdf # Prints contents of file when a dimension has the same name as that # of another SDS TEST dumpvg-15.out dumpvg sds2_dim1_samename.hdf # Verify the fix for bug HDFFR-197 and a vgroup with ref=0 (some old RI stuff) TEST dumpvg-16.out dumpvg -h grtdfi322.hdf TEST dumpvg-17.out dumpvg grtdfi322.hdf else MESG 3 "$TestName <<>>" fi # Test command dumpgr TestCmd=dumpgr TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" TEST dumpgr-1.out dumpgr grtdfui82.hdf TEST dumpgr-2.out dumpgr -i 0,1,3 grtdfui82.hdf TEST dumpgr-3.out dumpgr -i 0 grtdfui82.hdf TEST dumpgr-4.out dumpgr -n Image_array_5 grtdfui82.hdf TEST dumpgr-5.out dumpgr -r 6,2,3 grtdfui82.hdf TEST dumpgr-6.out dumpgr -r 6 -d grtdfui82.hdf TEST dumpgr-7.out dumpgr -o $currentdir/my.dat grtdfui82.hdf $RM my.dat TEST dumpgr-8.out dumpgr -o $currentdir/mybin.dat -b grtdfui82.hdf $RM mybin.dat TEST dumpgr-9.out dumpgr grtdfui83.hdf TEST dumpgr-10.out dumpgr grtdfui84.hdf TEST dumpgr-11.out dumpgr grtdfui162.hdf # Test 12 shows that file attribute is printed TEST dumpgr-12.out dumpgr grtdfi322.hdf # Tests 13, 14, and 15 test option -h, which was not included in any # of the previous tests, and the new options -p and -pd, printing palette # with or without palette information TEST dumpgr-13.out dumpgr -p Image_with_Palette.hdf TEST dumpgr-14.out dumpgr -h Image_with_Palette.hdf TEST dumpgr-15.out dumpgr -r 2,4 -pd Image_with_Palette.hdf # Test 16: to test new option -s, printing data as stream TEST dumpgr-16.out dumpgr -r 6 -d -s grtdfui82.hdf # Test 17: to test new option -m (interlace mode = LINE) TEST dumpgr-17.out dumpgr -r 6 -m 1 grtdfui82.hdf # Test 18: to test new option -c (printing attribute data in clean format) TEST dumpgr-18.out dumpgr -c grtdfi322.hdf # Test 19: to test new options -g and -l (suppress all attribute data) TEST dumpgr-19.out dumpgr -g -l grtdfi322.hdf # Test 20: to test dumpgr successfully detect IMCOMP compression type TEST dumpgr-20.out dumpgr IMCOMP.hdf else MESG 3 "$TestName <<>>" fi # End of test FINISH hdf4-hdf4.3.1/mfhdf/fortran/000077500000000000000000000000001503061704500155665ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/fortran/CMakeLists.txt000066400000000000000000000241751503061704500203370ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_FORTRAN C Fortran) if (HDF4_ENABLE_NETCDF) configure_file (${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/ftest.f.in ${HDF4_BINARY_DIR}/ftest.f) configure_file (${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/jackets.c.in ${HDF4_BINARY_DIR}/jackets.c) endif () configure_file (${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/netcdf.inc.in ${HDF4_BINARY_DIR}/netcdf.inc) set (HDF4_MFHDF_FORTRAN_XFHDRS ${HDF4_BINARY_DIR}/netcdf.inc ${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/mffunc.inc) if (HDF4_ENABLE_NETCDF) set (HDF4_MFHDF_LIBSRC_CSTUB_FSRCS ${HDF4_BINARY_DIR}/jackets.c ${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/mfsdf.c) else () set (HDF4_MFHDF_LIBSRC_CSTUB_FSRCS ${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/mfsdf.c) endif () set (HDF4_MFHDF_LIBSRC_CSTUB_FHDRS ${HDF4_MFHDFSOURCE_DIR}/hdf2netcdf.h ${HDF4_MFHDFSOURCE_DIR}/mfhdf.h ) if (HDF4_ENABLE_NETCDF) # set (HDF4_MFHDF_LIBSRC_CSTUB_FSRCS ${HDF4_MFHDF_LIBSRC_CSTUB_FSRCS} ${HDF4_BINARY_DIR}/jackets.c) set (HDF4_MFHDF_LIBSRC_CSTUB_FHDRS ${HDF4_MFHDF_LIBSRC_CSTUB_FHDRS} ${HDF4_BINARY_DIR}/netcdf.h) else () set (HDF4_MFHDF_LIBSRC_CSTUB_FHDRS ${HDF4_MFHDF_LIBSRC_CSTUB_FHDRS} ${HDF4_BINARY_DIR}/hdf4_netcdf.h) endif () set_source_files_properties (${HDF4_MFHDF_LIBSRC_CSTUB_FSRCS} PROPERTIES LANGUAGE C) set (FORTRAN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #----------------------------------------------------------------------------- # Add Main fortran library #----------------------------------------------------------------------------- if (BUILD_STATIC_LIBS) add_library (${HDF4_MF_FCSTUB_LIB_TARGET} STATIC ${HDF4_MFHDF_LIBSRC_CSTUB_FSRCS} ${HDF4_MFHDF_LIBSRC_CSTUB_FHDRS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_HDFSOURCE_DIR}/hproto_fortran.h) target_include_directories(${HDF4_MF_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_options(${HDF4_MF_FCSTUB_LIB_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_MF_FCSTUB_LIB_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_MF_FCSTUB_LIB_TARGET} STATIC) target_link_libraries (${HDF4_MF_FCSTUB_LIB_TARGET} PUBLIC ${HDF4_MF_LIB_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_FCSTUB_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_FCSTUB_LIB_TARGET} ${HDF4_MF_FCSTUB_LIB_NAME} STATIC 0) set_target_properties (${HDF4_MF_FCSTUB_LIB_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE C COMPILE_DEFINITIONS "HDF" INTERFACE_INCLUDE_DIRECTORIES "$/include>" ) set (install_targets ${HDF4_MF_FCSTUB_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_MF_FCSTUB_LIBSH_TARGET} SHARED ${HDF4_MFHDF_LIBSRC_CSTUB_FSRCS} ${HDF4_MFHDF_LIBSRC_CSTUB_FHDRS} ${HDF4_HDF_SRC_CHDRS} ${HDF4_HDFSOURCE_DIR}/hproto_fortran.h) target_include_directories(${HDF4_MF_FCSTUB_LIBSH_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}" INTERFACE "$/include>" ) target_compile_options(${HDF4_MF_FCSTUB_LIBSH_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_MF_FCSTUB_LIBSH_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_MF_FCSTUB_LIBSH_TARGET} SHARED) target_link_libraries (${HDF4_MF_FCSTUB_LIBSH_TARGET} PUBLIC ${HDF4_MF_LIBSH_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_FCSTUB_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_FCSTUB_LIBSH_TARGET} ${HDF4_MF_FCSTUB_LIB_NAME} SHARED "MF_F") set_target_properties (${HDF4_MF_FCSTUB_LIBSH_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE C COMPILE_DEFINITIONS "HDF;H4_BUILT_AS_DYNAMIC_LIB" INTERFACE_INCLUDE_DIRECTORIES "$/include>" INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 ) set (install_targets ${install_targets} ${HDF4_MF_FCSTUB_LIBSH_TARGET}) endif () set (HDF4_MF_FORTRAN_SRCS ${HDF4_MFHDF_FORTRAN_DIR}/mfsdff.f ) set_source_files_properties (${HDF4_MF_FORTRAN_SRCS} PROPERTIES LANGUAGE Fortran) #----------------------------------------------------------------------------- if (BUILD_STATIC_LIBS) add_library (${HDF4_MF_FORTRAN_LIB_TARGET} STATIC ${HDF4_MF_FORTRAN_SRCS}) target_include_directories (${HDF4_MF_FORTRAN_LIB_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" INTERFACE "$/include>" ) target_compile_definitions (${HDF4_MF_FORTRAN_LIB_TARGET} PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) target_link_libraries (${HDF4_MF_FORTRAN_LIB_TARGET} PUBLIC ${HDF4_MF_FCSTUB_LIB_TARGET}) set_target_properties (${HDF4_MF_FORTRAN_LIB_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY} ) if (WIN32) set_property (TARGET ${HDF4_MF_FORTRAN_LIB_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif () set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_FORTRAN_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_FORTRAN_LIB_TARGET} ${HDF4_MF_FORTRAN_LIB_NAME} STATIC 0) set (install_targets ${install_targets} ${HDF4_MF_FORTRAN_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_MF_FORTRAN_LIBSH_TARGET} SHARED ${HDF4_MF_FORTRAN_SRCS}) target_include_directories (${HDF4_MF_FORTRAN_LIBSH_TARGET} PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" INTERFACE "$/include>" ) target_compile_definitions (${HDF4_MF_FORTRAN_LIBSH_TARGET} PUBLIC "H4_BUILT_AS_DYNAMIC_LIB" PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if (WIN32 AND MSVC) set_property (TARGET ${HDF4_MF_FORTRAN_LIBSH_TARGET} PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS} /DLL /DEF:${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/mfhdf_fortrandll.def") endif () target_link_libraries (${HDF4_MF_FORTRAN_LIBSH_TARGET} PUBLIC ${HDF4_MF_FCSTUB_LIBSH_TARGET}) set_target_properties (${HDF4_MF_FORTRAN_LIBSH_TARGET} PROPERTIES FOLDER libraries/fortran LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY} INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 ) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_FORTRAN_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_FORTRAN_LIBSH_TARGET} ${HDF4_MF_FORTRAN_LIB_NAME} SHARED "MF_F") set (install_targets ${install_targets} ${HDF4_MF_FORTRAN_LIBSH_TARGET}) endif () if (BUILD_TESTING) include (CMakeTests.cmake) endif () #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- install ( FILES ${HDF4_MFHDF_FORTRAN_XFHDRS} DESTINATION ${HDF4_INSTALL_INCLUDE_DIR} COMPONENT headers ) #----------------------------------------------------------------------------- # Add library to CMake Install : Installs lib and cmake config info #----------------------------------------------------------------------------- if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF4_MF_FCSTUB_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) #INSTALL_TARGET_PDB (${HDF4_MF_FORTRAN_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) endif (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF4_MF_FCSTUB_LIB_TARGET} ${HDF4_INSTALL_BIN_DIR} fortlibraries) install ( TARGETS ${install_targets} EXPORT ${HDF4_EXPORTED_TARGETS} LIBRARY DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT fortlibraries ARCHIVE DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT fortlibraries RUNTIME DESTINATION ${HDF4_INSTALL_BIN_DIR} COMPONENT fortlibraries FRAMEWORK DESTINATION ${HDF4_INSTALL_FWRK_DIR} COMPONENT fortlibraries INCLUDES DESTINATION include ) #----------------------------------------------------------------------------- # Create pkgconfig files #----------------------------------------------------------------------------- set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX}) set (_PKG_CONFIG_EXEC_PREFIX \${prefix}) set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib) set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include) set (_PKG_CONFIG_LIBNAME "${HDF4_MF_FORTRAN_LIB_CORENAME}") set (_PKG_CONFIG_VERSION "${HDF4_PACKAGE_VERSION}") set (PKG_CONFIG_LIBNAME "${HDF4_MF_FORTRAN_LIB_CORENAME}") if (${HDF_CFG_NAME} MATCHES "Debug") set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}") endif () foreach (libs ${LINK_LIBS} ${LINK_COMP_LIBS}) set (_PKG_CONFIG_LIBS_PRIVATE "${_PKG_CONFIG_LIBS_PRIVATE} -l${libs}") endforeach () set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${PKG_CONFIG_LIBNAME}") if (BUILD_SHARED_LIBS) set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}") endif () set (_PKG_CONFIG_REQUIRES "${HDF4_MF_LIB_CORENAME}-${HDF4_PACKAGE_VERSION}") set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF4_MF_LIB_CORENAME}-${HDF4_PACKAGE_VERSION}") configure_file ( ${HDF_RESOURCES_DIR}/libhdf4.pc.in ${HDF4_BINARY_DIR}/CMakeFiles/${HDF4_MF_FORTRAN_LIB_CORENAME}.pc @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/CMakeFiles/${HDF4_MF_FORTRAN_LIB_CORENAME}.pc DESTINATION ${HDF4_INSTALL_LIB_DIR}/pkgconfig COMPONENT fortlibraries ) if (NOT WIN32) set (_PKG_CONFIG_COMPILER ${CMAKE_Fortran_COMPILER}) configure_file ( ${HDF_RESOURCES_DIR}/libh4cc.in ${HDF4_BINARY_DIR}/CMakeFiles/h4fc @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/CMakeFiles/h4fc DESTINATION ${HDF4_INSTALL_BIN_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE COMPONENT fortlibraries ) endif () hdf4-hdf4.3.1/mfhdf/fortran/CMakeTests.cmake000066400000000000000000000163401503061704500205770ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/testdir) #----------------------------------------------------------------------------- # test programs #----------------------------------------------------------------------------- if (HDF4_ENABLE_NETCDF) #-- Adding test for ftest add_executable (ftest ${HDF4_BINARY_DIR}/ftest.f ${HDF4_HDF_TESTSOURCE_DIR}/forsupff.f ${HDF4_BINARY_DIR}/netcdf.inc) target_include_directories (ftest PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" ) target_compile_options(ftest PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if(MSVC) set_property(TARGET ftest PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (ftest PROPERTIES LINKER_LANGUAGE Fortran) if (NOT BUILD_SHARED_LIBS) target_link_libraries (ftest PRIVATE ${HDF4_MF_FORTRAN_LIB_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_TARGET}) else () target_link_libraries (ftest PRIVATE ${HDF4_MF_FORTRAN_LIBSH_TARGET} ${HDF4_HDF_TEST_FCSTUB_LIB_TARGET}) endif () #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES test_nc.cdl test_nc.nc ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_FORTRAN_SOURCE_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "netcdf_files") endforeach () add_custom_target(netcdf_files ALL COMMENT "Copying files needed by netcdf tests" DEPENDS ${netcdf_files_list}) add_test (NAME ftest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) endif () #-- Adding test for f_hdftest add_executable (f_hdftest hdftest.f) target_include_directories (f_hdftest PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" ) target_compile_options(f_hdftest PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if(MSVC) set_property(TARGET f_hdftest PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (f_hdftest PROPERTIES LINKER_LANGUAGE Fortran) if (NOT BUILD_SHARED_LIBS) target_link_libraries (f_hdftest PRIVATE ${HDF4_MF_FORTRAN_LIB_TARGET} ${HDF4_SRC_FORTRAN_LIB_TARGET}) else () target_link_libraries (f_hdftest PRIVATE ${HDF4_MF_FORTRAN_LIBSH_TARGET} ${HDF4_SRC_FORTRAN_LIBSH_TARGET}) endif () #-- Adding test for f_hdftest1 add_executable (f_hdftest1 hdftest1.f) target_include_directories (f_hdftest1 PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" ) target_compile_options(f_hdftest1 PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if(MSVC) set_property(TARGET f_hdftest1 PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (f_hdftest1 PROPERTIES LINKER_LANGUAGE Fortran) if (NOT BUILD_SHARED_LIBS) target_link_libraries (f_hdftest1 PRIVATE ${HDF4_MF_FORTRAN_LIB_TARGET}) else () target_link_libraries (f_hdftest1 PRIVATE ${HDF4_MF_FORTRAN_LIBSH_TARGET}) endif () #-- Adding test for f_tszip add_executable (f_tszip tszip.f) target_include_directories (f_tszip PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_MFHDF_FORTRAN_BINARY_DIR};${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_HDF_TESTSOURCE_DIR}" ) target_compile_options(f_tszip PRIVATE $<$:${WIN_COMPILE_FLAGS}> ) if(MSVC) set_property(TARGET f_tszip PROPERTY LINK_FLAGS "/SUBSYSTEM:CONSOLE ${WIN_LINK_FLAGS}") endif() set_target_properties (f_tszip PROPERTIES LINKER_LANGUAGE Fortran) if (NOT BUILD_SHARED_LIBS) target_link_libraries (f_tszip PRIVATE ${HDF4_MF_FORTRAN_LIB_TARGET} ${HDF4_SRC_FORTRAN_LIB_TARGET}) else () target_link_libraries (f_tszip PRIVATE ${HDF4_MF_FORTRAN_LIBSH_TARGET} ${HDF4_SRC_FORTRAN_LIBSH_TARGET}) endif () ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME MFHDF_FORTRAN-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove cchunk_gz.hdf cchunk_nb.hdf cchunk_no.hdf cchunk_rl.hdf cchunk_sk.hdf chunk_gz.hdf chunk_nb.hdf chunk_no.hdf chunk_rl.hdf chunk_sk.hdf comp_gz.hdf comp_no.hdf comp_rl.hdf comp_sk.hdf comp_szip.hdf copy.nc test.nc test1.hdf test2.hdf test_empty.hdf test_var.hdf test_file.hdf test_file01.hdf test_file02.hdf test_file03.hdf test_file04.hdf test_file05.hdf test_file06.hdf test_file07.hdf test_file08.hdf test_file09.hdf test_file10.hdf test_file11.hdf test_file12.hdf test_file13.hdf test_file14.hdf test_file15.hdf test_file16.hdf test_file17.hdf test_file18.hdf test_file19.hdf test_file20.hdf test_file21.hdf test_file22.hdf test_file23.hdf test_file24.hdf test_file25.hdf test_file26.hdf test_file27.hdf test_file28.hdf test_file29.hdf test_file30.hdf test_file31.hdf test_file32.hdf test_file33.hdf test_file34.hdf test_file35.hdf ) if (HDF4_ENABLE_NETCDF) set_tests_properties (MFHDF_FORTRAN-clearall-objects PROPERTIES DEPENDS ftest LABELS ${PROJECT_NAME}) endif () add_test (NAME f_hdftest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (passRegex "Total errors : [ ]+0") set_property (TEST f_hdftest PROPERTY PASS_REGULAR_EXPRESSION "${passRegex}") set_tests_properties (f_hdftest PROPERTIES DEPENDS MFHDF_FORTRAN-clearall-objects LABELS ${PROJECT_NAME}) add_test (NAME f_hdftest1 COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (failRegex "failed" "errors") set_property (TEST f_hdftest1 PROPERTY FAIL_REGULAR_EXPRESSION "${failRegex}") set_tests_properties (f_hdftest1 PROPERTIES DEPENDS f_hdftest LABELS ${PROJECT_NAME}) add_test (NAME f_tszip COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (failRegex "failed" "errors") set_property (TEST f_tszip PROPERTY FAIL_REGULAR_EXPRESSION "${failRegex}") set_tests_properties (f_tszip PROPERTIES DEPENDS f_hdftest1 LABELS ${PROJECT_NAME}) hdf4-hdf4.3.1/mfhdf/fortran/Makefile.am000066400000000000000000000047641503061704500176350ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am fort_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/hdf/test \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(fort_INCLUDES) $(DEFINES) DIST_SUBDIRS = ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# if HDF_BUILD_NETCDF include_HEADERS = netcdf.inc netcdf.f90 mffunc.inc mffunc.f90 check_PROGRAMS = ftest hdftest tszip hdftest1 else include_HEADERS = mffunc.inc mffunc.f90 check_PROGRAMS = hdftest tszip hdftest1 endif TEST_SCRIPT = testfortran.sh check_SCRIPTS = testfortran.sh if HDF_BUILD_NETCDF ftest_SOURCES = ftest.f ftest_LDADD = $(top_builddir)/hdf/test/forsupff.o $(top_builddir)/hdf/test/forsupf.o \ $(LIBMFHDF) $(LIBHDF) @LIBS@ ftest_DEPENDENCIES = $(top_builddir)/hdf/test/forsupff.o $(top_builddir)/hdf/test/forsupf.o \ $(LIBMFHDF) $(LIBHDF) endif hdftest_SOURCES = hdftest.f hdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) hdftest1_SOURCES = hdftest1.f hdftest1_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest1_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) tszip_SOURCES = tszip.f tszip_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ tszip_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) testdir: -mkdir testdir SUFFIXES = .inc .f90 .inc.f90: sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $< > $*.f90 # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += test.nc copy.nc *.hdf testdir/testext.hdf # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf testdir DISTCLEANFILES = ftest.f jackets.c netcdf.inc mffunc.f90 netcdf.f90 include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/fortran/Makefile.in000066400000000000000000001403651503061704500176440ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ @HDF_BUILD_NETCDF_FALSE@check_PROGRAMS = hdftest$(EXEEXT) \ @HDF_BUILD_NETCDF_FALSE@ tszip$(EXEEXT) hdftest1$(EXEEXT) @HDF_BUILD_NETCDF_TRUE@check_PROGRAMS = ftest$(EXEEXT) \ @HDF_BUILD_NETCDF_TRUE@ hdftest$(EXEEXT) tszip$(EXEEXT) \ @HDF_BUILD_NETCDF_TRUE@ hdftest1$(EXEEXT) TESTS = $(TEST_SCRIPT) subdir = mfhdf/fortran SUBDIRS = ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__include_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = ftest.f jackets.c netcdf.inc testfortran.sh CONFIG_CLEAN_VPATH_FILES = am__ftest_SOURCES_DIST = ftest.f @HDF_BUILD_NETCDF_TRUE@am_ftest_OBJECTS = ftest.$(OBJEXT) ftest_OBJECTS = $(am_ftest_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_hdftest_OBJECTS = hdftest.$(OBJEXT) hdftest_OBJECTS = $(am_hdftest_OBJECTS) am_hdftest1_OBJECTS = hdftest1.$(OBJEXT) hdftest1_OBJECTS = $(am_hdftest1_OBJECTS) am_tszip_OBJECTS = tszip.$(OBJEXT) tszip_OBJECTS = $(am_tszip_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) AM_V_F77 = $(am__v_F77_@AM_V@) am__v_F77_ = $(am__v_F77_@AM_DEFAULT_V@) am__v_F77_0 = @echo " F77 " $@; am__v_F77_1 = F77LD = $(F77) F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = SOURCES = $(ftest_SOURCES) $(hdftest_SOURCES) $(hdftest1_SOURCES) \ $(tszip_SOURCES) DIST_SOURCES = $(am__ftest_SOURCES_DIST) $(hdftest_SOURCES) \ $(hdftest1_SOURCES) $(tszip_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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__include_HEADERS_DIST = mffunc.inc mffunc.f90 netcdf.inc netcdf.f90 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)$(includedir)" HEADERS = $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ftest.f.in \ $(srcdir)/jackets.c.in $(srcdir)/netcdf.inc.in \ $(srcdir)/testfortran.sh.in $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog test.nc copy.nc *.hdf \ testdir/testext.hdf fort_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/hdf/test \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(fort_INCLUDES) $(DEFINES) DIST_SUBDIRS = @HDF_BUILD_NETCDF_FALSE@include_HEADERS = mffunc.inc mffunc.f90 ############################################################################# ############################################################################# @HDF_BUILD_NETCDF_TRUE@include_HEADERS = netcdf.inc netcdf.f90 mffunc.inc mffunc.f90 TEST_SCRIPT = testfortran.sh check_SCRIPTS = testfortran.sh @HDF_BUILD_NETCDF_TRUE@ftest_SOURCES = ftest.f @HDF_BUILD_NETCDF_TRUE@ftest_LDADD = $(top_builddir)/hdf/test/forsupff.o $(top_builddir)/hdf/test/forsupf.o \ @HDF_BUILD_NETCDF_TRUE@ $(LIBMFHDF) $(LIBHDF) @LIBS@ @HDF_BUILD_NETCDF_TRUE@ftest_DEPENDENCIES = $(top_builddir)/hdf/test/forsupff.o $(top_builddir)/hdf/test/forsupf.o \ @HDF_BUILD_NETCDF_TRUE@ $(LIBMFHDF) $(LIBHDF) hdftest_SOURCES = hdftest.f hdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) hdftest1_SOURCES = hdftest1.f hdftest1_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest1_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) tszip_SOURCES = tszip.f tszip_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ tszip_DEPENDENCIES = testdir $(LIBMFHDF) $(LIBHDF) SUFFIXES = .inc .f90 DISTCLEANFILES = ftest.f jackets.c netcdf.inc mffunc.f90 netcdf.f90 # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-recursive .SUFFIXES: .SUFFIXES: .inc .f90 .f .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/fortran/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/fortran/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): ftest.f: $(top_builddir)/config.status $(srcdir)/ftest.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ jackets.c: $(top_builddir)/config.status $(srcdir)/jackets.c.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ netcdf.inc: $(top_builddir)/config.status $(srcdir)/netcdf.inc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ testfortran.sh: $(top_builddir)/config.status $(srcdir)/testfortran.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: @list='$(check_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 ftest$(EXEEXT): $(ftest_OBJECTS) $(ftest_DEPENDENCIES) $(EXTRA_ftest_DEPENDENCIES) @rm -f ftest$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftest_OBJECTS) $(ftest_LDADD) $(LIBS) hdftest$(EXEEXT): $(hdftest_OBJECTS) $(hdftest_DEPENDENCIES) $(EXTRA_hdftest_DEPENDENCIES) @rm -f hdftest$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(hdftest_OBJECTS) $(hdftest_LDADD) $(LIBS) hdftest1$(EXEEXT): $(hdftest1_OBJECTS) $(hdftest1_DEPENDENCIES) $(EXTRA_hdftest1_DEPENDENCIES) @rm -f hdftest1$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(hdftest1_OBJECTS) $(hdftest1_LDADD) $(LIBS) tszip$(EXEEXT): $(tszip_OBJECTS) $(tszip_DEPENDENCIES) $(EXTRA_tszip_DEPENDENCIES) @rm -f tszip$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tszip_OBJECTS) $(tszip_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .f.o: $(AM_V_F77)$(F77COMPILE) -c -o $@ $< .f.obj: $(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(AM_V_F77)$(LTF77COMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || 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)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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 cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(HEADERS) all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(includedir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS 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-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-TESTS check-am clean clean-checkPROGRAMS \ clean-generic clean-libtool cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-local 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-includeHEADERS 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS .PRECIOUS: Makefile testdir: -mkdir testdir .inc.f90: sed -e 's/^[cC]/!/' -e 's/^ [^ ]/ \&/' < $< > $*.f90 # 'make install-all' install-all: @$(MAKE) $(AM_MAKEFLAGS) install uninstall-all: @$(MAKE) $(AM_MAKEFLAGS) uninstall # Automake's distclean won't remove directories, so we can add an additional # hook target which will do so during 'make distclean'. distclean-local: -rm -rf testdir # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/fortran/ftest.f.in000066400000000000000000001241571503061704500175010ustar00rootroot00000000000000c******************************************************************** c Copyright 1993, UCAR/Unidata c See netcdf/COPYRIGHT file for copying and redistribution conditions. c********************************************************************/ c c program to test the Sun Fortran jacket interface to the netCDF c program ftest include 'netcdf.inc' c name of first test cdf character*31 name c name of second test cdf character*31 name2 c Returned error code. integer iret c netCDF ID integer ncid c ID of dimension lat integer latdim c ID of dimension lon integer londim c ID of dimension level integer leveldim c ID of dimension time integer timedim c ID of dimension len integer lendim c variable used to control error-handling behavior integer ncopts integer dimsiz(MAXNCDIM) C allowable roundoff real epsilon common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz data name/'test.nc'/ data name2/'copy.nc'/ data epsilon /.000001/ 100 format('*** Testing ', a, ' ...') c set error-handling to verbose and non-fatal ncopts = NCVERBOS call ncpopt(ncopts) c create a netCDF named 'test.nc' write(*,100) 'nccre' ncid = nccre(name, NCCLOB, iret) c test ncddef write(*,100) 'ncddef' call tncddef(ncid) c test ncvdef write(*,100) 'ncvdef' call tncvdef(ncid) c test ncapt write(*, 100) 'ncapt, ncaptc' call tncapt(ncid) c close 'test.nc' write(*, 100) 'ncclos' call ncclos(ncid, iret) c test ncvpt1 write(*, 100) 'ncvpt1' call tncvpt1(name) c test ncvgt1 write(*, 100) 'ncvgt1' call tncvgt1(name) c test ncvpt write(*, 100) 'ncvpt' call tncvpt(name) c test ncinq write(*, 100) 'ncopn, ncinq, ncdinq, ncvinq, ncanam, ncainq' call tncinq(name) c test ncvgt write(*, 100) 'ncvgt, ncvgtc' call tncvgt(name) c test ncagt write(*, 100) 'ncagt, ncagtc' call tncagt(name) c test ncredf write(*, 100) 'ncredf, ncdren, ncvren, ncaren, ncendf' call tncredf(name) call tncinq(name) c test ncacpy write(*, 100) 'ncacpy' call tncacpy(name, name2) c test ncadel write(*, 100) 'ncadel' call tncadel(name2) c test reading from NetCDF file write(*, 100) 'NetCDF read' call tread_netcdf() end c c subroutine to test ncacpy c subroutine tncacpy(iname, oname) character*31 iname, oname include 'netcdf.inc' integer ndims, nvars, natts, recdim, iret character*31 vname, attnam integer attype, attlen integer vartyp, nvdims, vdims(MAXVDIMS), nvatts integer lenstr c existing netCDF id integer incdf c netCDF id of the output netCDF file to which the attribute c will be copied integer outcdf integer mattlen parameter (mattlen = 80) character*80 charval double precision doubval(2) real flval(2) integer lngval(2) integer*2 shval(2) integer i, j, k character*31 varnam, attname(2,7), gattnam(2) byte bytval(2) common /atts/attname, gattnam integer*2 svalidrg(2) real rvalidrg(2) integer lvalidrg(2) double precision dvalidrg(2) byte bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/1,110/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ incdf = ncopn(iname, NCNOWRIT, iret) outcdf = nccre(oname, NCCLOB, iret) call tncddef(outcdf) call tncvdef(outcdf) call ncinq (incdf, ndims, nvars, natts, recdim, iret) do 5 j = 1, natts call ncanam (incdf, NCGLOBAL, j, attnam, iret) call ncacpy (incdf, NCGLOBAL, attnam, outcdf, NCGLOBAL, iret) 5 continue do 10 i = 1, nvars call ncvinq (incdf, i, vname, vartyp, nvdims, + vdims, nvatts, iret) do 20 k = 1, nvatts call ncanam (incdf, i, k, attnam, iret) call ncacpy (incdf, i, attnam, outcdf, i, iret) 20 continue 10 continue c c get global attributes first c do 100 i = 1, natts call ncanam (outcdf, NCGLOBAL, i, attnam, iret) call ncainq (outcdf, NCGLOBAL, attnam, attype, attlen, + iret) if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!', attlen, mattlen stop 'Stopped' else if (attype .eq. NCBYTE) then call ncagt (outcdf, NCBYTE, attnam, bytval, iret) else if (attype .eq. NCCHAR) then call ncagtc (outcdf, NCGLOBAL, attnam, charval, + lenstr, iret) if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt G' if (charval .ne. gavalue(i)) + write(*,*) 'error in ncagt G2', lenstr, charval, gavalue(i) charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, NCGLOBAL, attnam, shval, iret) else if (attype .eq. NCLONG) then call ncagt (outcdf, NCGLOBAL, attnam, lngval, iret) else if (attype .eq. NCFLOAT) then call ncagt (outcdf, NCGLOBAL, attnam, flval, iret) else call ncagt (outcdf, NCGLOBAL, attnam, doubval,iret) end if 100 continue c c get variable attributes c do 200 i = 1, nvars call ncvinq (outcdf, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) do 250 j = 1, nvatts call ncanam (outcdf, i, j, attnam, iret) call ncainq (outcdf, i, attnam, attype, attlen, + iret) if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 'Stopped' else if (attype .eq. NCBYTE) then call ncagt (outcdf, i, attnam, bytval, + iret) if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt BYTE N' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (outcdf, i, attnam, charval, + lenstr, iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt CHAR N' if (charval .ne. cavalue(j)) write(*,*) + 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, i, attnam, shval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt SHORT N' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (outcdf, i, attnam, lngval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt LONG N' if (lngval(j) .ne. lvalidrg(j)) write(*,*) + 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (outcdf, i, attnam, flval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt FLOAT N' if (flval(j) .ne. rvalidrg(j)) write(*,*) + 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (outcdf, i, attnam, doubval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt DOUBLE N' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 250 continue 200 continue call ncclos(incdf, iret) call ncclos(outcdf, iret) return end c c subroutine to test ncadel c subroutine tncadel (cdfname) character*31 cdfname include 'netcdf.inc' integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer ncid, iret, i, j integer ndims, nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attnam ncid = ncopn(cdfname, NCWRITE, iret) c put cdf in define mode call ncredf (ncid,iret) c get number of global attributes call ncinq (ncid, ndims, nvars, natts, recdim, iret) do 10 i = natts, 1, -1 c get name of global attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) c delete global attribute call ncadel (ncid, NCGLOBAL, attnam, iret) 10 continue do 100 i = 1, nvars c get number of variable attributes call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) do 200 j = nvatts, 1, -1 call ncanam (ncid, i, j, attnam, iret) call ncadel (ncid, i, attnam, iret) 200 continue 100 continue call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (natts .ne. 0) write(*,*) 'error in ncadel' c put netCDF into data mode call ncendf (ncid, iret) call ncclos (ncid, iret) return end c c subroutine to test ncagt and ncagtc subroutine tncagt(cdfname) include 'netcdf.inc' character*31 cdfname c maximum length of an attribute integer mattlen parameter (mattlen = 80) integer ncid, ndims, nvars, natts, recdim integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer i, j integer attype, attlen, lenstr, iret character*31 attnam character*80 charval double precision doubval(2) real flval(2) integer lngval(2) integer*2 shval(2) byte bytval(2) integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attname(2,7), gattnam(2) common /atts/attname, gattnam integer*2 svalidrg(2) real rvalidrg(2) integer lvalidrg(2) double precision dvalidrg(2) byte bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/1,110/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ ncid = ncopn (cdfname, NCNOWRIT, iret) call ncinq (ncid, ndims, nvars, natts, recdim, iret) c c get global attributes first c do 10 i = 1, natts c get name of attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) c get attribute type and length call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, + iret) if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!' stop 'Stopped' else if (attype .eq. NCBYTE) then call ncagt (ncid, NCBYTE, attnam, bytval, iret) else if (attype .eq. NCCHAR) then call ncagtc (ncid, NCGLOBAL, attnam, charval, + lenstr, iret) if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt' if (charval .ne. gavalue(i)) write(*,*) 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, NCGLOBAL, attnam, shval, iret) else if (attype .eq. NCLONG) then call ncagt (ncid, NCGLOBAL, attnam, lngval, iret) else if (attype .eq. NCFLOAT) then call ncagt (ncid, NCGLOBAL, attnam, flval, iret) else call ncagt (ncid, NCGLOBAL, attnam, doubval,iret) end if 10 continue c c get variable attributes c do 20 i = 1, nvars call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) do 25 j = 1, nvatts call ncanam (ncid, i, j, attnam, iret) call ncainq (ncid, i, attnam, attype, attlen, + iret) if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 'Stopped' else if (attype .eq. NCBYTE) then call ncagt (ncid, i, attnam, bytval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt BYTE name' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (ncid, i, attnam, charval, + lenstr, iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt CHAR name' if (charval .ne. cavalue(j)) write(*,*) + 'error in ncagt CHAR name' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, i, attnam, shval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt SHORT name' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (ncid, i, attnam, lngval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt LONG name' if (lngval(j) .ne. lvalidrg(j)) write(*,*) + 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (ncid, i, attnam, flval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt FLOAT name' if (flval(j) .ne. rvalidrg(j)) write(*,*) + 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (ncid, i, attnam, doubval, + iret) if (attnam .ne. attname(j,i)) write(*,*) + 'error in ncagt DOUBLE name' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 25 continue 20 continue call ncclos(ncid, iret) return end c c subroutine to test ncapt c subroutine tncapt (ncid) include 'netcdf.inc' integer ncid, iret c attribute vectors integer*2 svalidrg(2) real rvalidrg(2) integer lvalidrg(2) double precision dvalidrg(2) byte bvalidrg(2) c variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid c assign attributes c c byte c bvalidrg(1) = 1 bvalidrg(2) = 127 call ncapt (ncid, bid, 'valid range', NCBYTE, 2, +bvalidrg, iret) c c short c svalidrg(1) = -100 svalidrg(2) = 100 call ncapt (ncid, sid, 'valid range', NCSHORT, 2, +svalidrg, iret) c c long c lvalidrg(1) = 0 lvalidrg(2) = 360 call ncapt (ncid, lid, 'valid range', NCLONG, 2, +lvalidrg, iret) c c float c rvalidrg(1) = 0.0 rvalidrg(2) = 5000.0 call ncapt (ncid, fid, 'valid range', NCFLOAT, 2, +rvalidrg, iret) c c double c dvalidrg(1) = 0D0 dvalidrg(2) = 500D0 call ncapt (ncid, did, 'valid range', NCDOUBLE, 2, +dvalidrg, iret) c c global c call ncaptc (ncid, NCGLOBAL, 'source', NCCHAR, 3, +'NWS', iret) call ncaptc (ncid, NCGLOBAL, 'basetime', NCCHAR, 17, +'88/10/25 12:00:00', iret) c c char c call ncaptc (ncid, chid, 'longname', NCCHAR, 11, +'test string', iret) call ncaptc (ncid, chid, 'id', NCCHAR, 1, +'a', iret) return end c c initialize variables in labelled common blocks c block data common /cdims/ dimnam common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam integer latdim, londim, leveldim, timedim, lendim c should include 'netcdf.inc' for MAXNCDIM, but it has EXTERNAL c declaration, which is not permitted in a BLOCK DATA unit. c integer dimsiz(MAXNCDIM) integer dimsiz(32) c character*31 dimnam(MAXNCDIM) character*31 dimnam(32) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) data dimnam /'time', 'lat', 'lon', 'level', + 'length', 27*'0'/ data dimsiz /4, 5, 5, 4, 80, 27*0/ data varnam/'bytev', 'short v', 'longv', 'floatv', 'doublev', + 'chv', 'cv'/ data attname/'valid range', '0', 'valid range', + '0', 'valid range', + '0', 'valid range', '0', 'valid range', '0', 'longname', 'id', + '0', '0'/ data gattnam/'source','basetime'/ end c c subroutine to test ncddef c subroutine tncddef(ncid) include 'netcdf.inc' integer ncid c sizes of dimensions of 'test.nc' and 'copy.nc' integer ndims parameter(ndims=5) c dimension ids integer latdim, londim, leveldim, timedim, lendim integer iret c function to define a netCDF dimension integer dimsiz(MAXNCDIM) character*31 dimnam(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /cdims/ dimnam c define dimensions timedim = ncddef(ncid, dimnam(1), NCUNLIM, iret) latdim = ncddef(ncid, dimnam(2), dimsiz(2), iret) londim = ncddef(ncid, dimnam(3), dimsiz(3), iret) leveldim = ncddef(ncid, dimnam(4), dimsiz(4), iret) lendim = ncddef(ncid, dimnam(5), dimsiz(5), iret) return end c c subroutine to test ncinq, ncdinq, ncdid, ncvinq, ncanam c and ncainq c subroutine tncinq(cdfname) include 'netcdf.inc' character*31 cdfname c netCDF id integer ncid c returned number of dimensions integer ndims c returned number of variables integer nvars c returned number of global attributes integer natts c returned id of the unlimited dimension integer recdim c returned error code integer iret c returned name of record dimension character*31 recnam c returned size of record dimension integer recsiz c loop control variables integer i, j, k c returned size of dimension integer dsize c returned dimension ID integer dimid c returned dimension name character*31 dname c returned variable name character*31 vname c returned attribute name character*31 attnam c returned netCDF datatype of variable integer vartyp c returned number of variable dimensions integer nvdims c returned number of variable attributes integer nvatts c returned vector of nvdims dimension IDS corresponding to the c variable dimensions integer vdims(MAXNCDIM) c returned attribute length integer attlen c returned attribute type integer attype character*31 dimnam(MAXNCDIM) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) integer vdlist(5,7), vtyp(7), vndims(7), vnatts(7) integer attyp(2,7),atlen(2,7),gattyp(2),gatlen(2) integer timedim,latdim,londim,leveldim,lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam common /cdims/ dimnam data vdlist/1,0,0,0,0,1,0,0,0,0,2,0,0,0,0,4,3,2,1,0,4,3,2,1,0, + 5,1,0,0,0,1,0,0,0,0/ data vtyp/NCBYTE, NCSHORT, NCLONG, NCFLOAT, NCDOUBLE, NCCHAR, + NCCHAR/ data vndims/1,1,1,4,4,2,1/ data vnatts/1,1,1,1,1,2,0/ data attyp/NCBYTE, 0, NCSHORT, 0, NCLONG, 0, NCFLOAT, 0, + NCDOUBLE, 0, NCCHAR, NCCHAR, 0, 0/ data atlen/2,0,2,0,2,0,2,0,2,0,11,1, 0, 0/ data gattyp/NCCHAR,NCCHAR/ data gatlen/3,17/ ncid = ncopn (cdfname, NCNOWRIT, iret) call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (ndims .ne. 5) write(*,*) 'error in ncinq or ncddef' if (nvars .ne. 7) write(*,*) 'error in ncinq or ncvdef' if (natts .ne. 2) write(*,*) 'error in ncinq or ncapt' call ncdinq (ncid, recdim, recnam, recsiz, iret) if (recnam .ne. 'time') write(*,*) 'error: bad recdim from ncinq' c c dimensions c do 10 i = 1, ndims call ncdinq (ncid, i, dname, dsize, iret) if (dname .ne. dimnam(i)) write(*,*) + 'error in ncdinq or ncddef, dname=', dname if (dsize .ne. dimsiz(i)) write(*,*) + 'error in ncdinq or ncddef, dsize=',dsize dimid = ncdid (ncid, dname, iret) if (dimid .ne. i) write(*,*) + 'error in ncdinq or ncddef, dimid=', dimid 10 continue c c variables c do 30 i = 1, nvars call ncvinq (ncid, i, vname, vartyp, nvdims, + vdims, nvatts, iret) if (vname .ne. varnam(i)) write(*,*) + 'error: from ncvinq, wrong name returned: ', vname, + ' .ne. ', varnam(i) if (vartyp .ne. vtyp(i)) write(*,*) + 'error: from ncvinq, wrong type returned: ', vartyp, + ' .ne. ', vtyp(i) if (nvdims .ne. vndims(i)) write(*,*) + 'error: from ncvinq, wrong num dims returned: ', vdims, + ' .ne. ', vndims(i) do 35 j = 1, nvdims if (vdims(j) .ne. vdlist(j,i)) write(*,*) + 'error: from ncvinq wrong dimids: ', vdims(j), + ' .ne. ', vdlist(j,i) 35 continue if (nvatts .ne. vnatts(i)) write(*,*) + 'error in ncvinq or ncvdef' c c attributes c do 45 k = 1, nvatts call ncanam (ncid, i, k, attnam, iret) call ncainq (ncid, i, attnam, attype, attlen, iret) if (attnam .ne. attname(k,i)) write(*,*) + 'error in ncanam or ncapt' if (attype .ne. attyp(k,i)) write(*,*) + 'error in ncainq or ncapt' if (attlen .ne. atlen(k,i)) write(*,*) + 'error in ncainq or ncapt' 45 continue 30 continue do 40 i = 1, natts call ncanam (ncid, NCGLOBAL, i, attnam, iret) call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, iret) if (attnam .ne. gattnam(i)) write(*,*) + 'error in ncanam or ncapt' if (attype .ne. gattyp(i)) write(*,*) + 'error in ncainq or ncapt' if (attlen .ne. gatlen(i)) write(*,*) + 'error in ncainq or ncapt' 40 continue call ncclos(ncid, iret) return end c subroutine to test ncredf, ncdren, ncvren, ncaren, and c ncendf subroutine tncredf(cdfname) include 'netcdf.inc' character*31 cdfname character*31 attname(2,7) character*31 gattnam(2) common /atts/attname, gattnam common /cdims/ dimnam character*31 dimnam(MAXNCDIM) character*31 varnam(7) common /varn/varnam integer ncid, iret, latid, varid dimnam(2) = 'latitude' varnam(4) = 'realv' attname(1,6) = 'stringname' gattnam(1) = 'agency' ncid = ncopn(cdfname, NCWRITE, iret) call ncredf(ncid, iret) latid = ncdid(ncid, 'lat', iret) call ncdren(ncid, latid, 'latitude', iret) varid = ncvid(ncid, 'floatv', iret) call ncvren(ncid, varid, 'realv', iret) varid = ncvid(ncid, 'chv', iret) call ncaren(ncid, varid, 'longname', 'stringname', iret) call ncaren(ncid, NCGLOBAL, 'source', 'agency', iret) call ncendf(ncid, iret) call ncclos(ncid, iret) return end c c subroutine to test ncvdef c subroutine tncvdef(ncid) include 'netcdf.inc' integer ncid c function to define a netCDF variable integer dimsiz(MAXNCDIM) integer latdim, londim, leveldim, timedim, lendim common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz c variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid c variable shapes integer bdims(1), fdims(4), ddims(4), ldims(1), sdims(1) integer chdims(2), cdims(1) integer iret c c define variables c c byte c bdims(1) = timedim bid = ncvdef(ncid, 'bytev', NCBYTE, 1, bdims, iret) c c short c sdims(1) = timedim sid = ncvdef (ncid, 'short v', NCSHORT, 1, sdims, iret) c c long c ldims(1) = latdim lid = ncvdef (ncid, 'longv', NCLONG, 1, ldims, iret) c c float c fdims(4) = timedim fdims(1) = leveldim fdims(2) = londim fdims(3) = latdim fid = ncvdef (ncid, 'floatv', NCFLOAT, 4, fdims, iret) c c double c ddims(4) = timedim ddims(1) = leveldim ddims(2) = londim ddims(3) = latdim did = ncvdef (ncid, 'doublev', NCDOUBLE, 4, ddims, iret) c c char c chdims(2) = timedim chdims(1) = lendim chid = ncvdef (ncid, 'chv', NCCHAR, 2, chdims, iret) cdims(1) = timedim cid = ncvdef (ncid, 'cv', NCCHAR, 1, cdims, iret) return end c c subroutine to test ncvgt and ncvgtc c subroutine tncvgt(cdfname) include 'netcdf.inc' character*31 cdfname integer ndims, times, lats, lons, levels, lenstr parameter (times=4, lats=5, lons=5, levels=4) integer start(MAXNCDIM), count(MAXNCDIM) integer ncid, iret, i, m integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer itime, ilev, ilat, ilon c arrays of data values to be read byte barray(times), byval(times) integer*2 sarray(times), shval(times) integer larray(lats) real farray(levels, lats, lons, times) double precision darray(levels, lats, lons, times) c character array of data values to be read character*31 string character*31 varnam integer nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts data start/1,1,1,1, 28*0/, count/levels, lats, lons, times, 28*0/ data byval /97, 98, 99, 100/ data shval /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) c get number of variables in netCDF call ncinq (ncid, ndims, nvars, natts, recdim, iret) do 5 m = 1, nvars-1 c get variable name, datatype, number of dimensions c vector of dimension ids, and number of variable attributes call ncvinq (ncid, m, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (vartyp .eq. NCBYTE) then c c byte c count(1) = times call ncvgt (ncid, m, start, count, barray, iret) do 10 i = 1, times if (barray(i) .ne. byval(i)) then write(*,*) 'ncvgt of bytes, got ', barray(i), ' .ne. ' + , byval(i) end if 10 continue else if (vartyp .eq. NCSHORT) then c c short c count(1) = times call ncvgt (ncid, m, start, count, sarray, iret) do 20 i = 1, times if (sarray(i) .ne. shval(i)) then write(*,*) 'ncvgt of short, got ', sarray(i), ' .ne. ' + , shval(i) end if 20 continue else if (vartyp .eq. NCLONG) then c c long c count(1) = lats call ncvgt (ncid, m, start, count, larray, iret) do 30 i = 1, lats if (larray(i) .ne. 1000) then write(*,*) 'long error in ncvgt' end if 30 continue else if (vartyp .eq. NCFLOAT) then c c float c count(1) = levels call ncvgt (ncid, m, start, count, farray, iret) i = 0 do 40 itime = 1,times do 40 ilon = 1, lons do 40 ilat = 1, lats do 40 ilev = 1, levels i = i + 1 if (farray(ilev, ilat, ilon, itime) .ne. + real(i)) then write (*,*) 'float error in ncvgt' end if 40 continue else if (vartyp .eq. NCDOUBLE) then c c double c count(1) = levels call ncvgt (ncid, m, start, count, darray, iret) i = 0 do 50 itime = 1, times do 50 ilon = 1, lons do 50 ilat = 1, lats do 50 ilev = 1, levels i = i + 1 if (darray(ilev, ilat, ilon, itime) .ne. + real(i)) then write(*,*) 'double error in ncvgt:', i, + darray(ilev, ilat, ilon, itime), '.ne.', real(i) end if 50 continue else c c char c count(1) = 3 count(2) = 4 lenstr = 31 call ncvgtc (ncid, m, start, count, string, lenstr, iret) if (string .ne. 'testhikin of') then write(*,*) 'error in ncvgt, returned string =', string end if end if 5 continue call ncclos(ncid, iret) return end subroutine tncvgt1(cdfname) include 'netcdf.inc' character*31 cdfname integer ncid, iret integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx, sindx, lindx, findx(4), dindx(4), cindx integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid byte bvalue integer*2 svalue integer lvalue real fvalue double precision dvalue character*1 c real epsilon double precision onethird data epsilon /.000001/ data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data onethird/0.3333333333D0/ ncid = ncopn (cdfname, NCNOWRIT, iret) c c test ncvgt1 for byte c call ncvgt1 (ncid, bid, bindx, bvalue, iret) if (bvalue .ne. ichar('z')) write(*,*) 'error in ncvgt1 byte:', + bvalue, ' .ne.', ichar('z') c c test ncvgt1 for short c call ncvgt1 (ncid, sid, sindx, svalue, iret) if (svalue .ne. 10) write(*,*) 'error in ncvgt1 short:', + svalue, ' .ne.', 10 c c test ncvgt1 for long c call ncvgt1 (ncid, lid, lindx, lvalue, iret) if (lvalue .ne. 1000) write(*,*) 'error in ncvgt1 long:', + lvalue, ' .ne.', 1000 c c test ncvgt1 for float c call ncvgt1 (ncid, fid, findx, fvalue, iret) if (abs(fvalue - 3.14159) .gt. epsilon) write(*,*) + 'error in ncvgt1 float:', fvalue, ' not close to', 3.14159 c c test ncvgt1 for double c call ncvgt1 (ncid, did, dindx, dvalue, iret) if (abs(dvalue - onethird) .gt. epsilon) write(*,*) + 'error in ncvgt1 double:', dvalue, ' not close to', + onethird c c test ncvg1c for char c call ncvg1c (ncid, cid, cindx, c, iret) if (c .ne. 'a') write(*,*) 'error in ncvg1c' call ncclos(ncid, iret) return end c c subroutine to test ncvpt and ncvptc c subroutine tncvpt(cdfname) include 'netcdf.inc' character*31 cdfname c size of dimensions integer times, lats, lons, levels parameter (times=4, lats=5, lons=5, levels=4) integer ncid, iret c loop control variables integer itime, ilev, ilon, ilat, i integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer lenstr integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid c vector of integers specifying the corner of the hypercube c where the first of the data values will be written integer start(MAXNCDIM) c vector of integers specifying the edge lengths from the c corner of the hypercube where the first of the data values c will be written integer count(MAXNCDIM) c arrays of data values to be written byte barray(times) integer*2 sarray(times) integer larray(lats) real farray(levels, lats, lons, times) double precision darray(levels, lats, lons, times) character*31 string data start/1,1,1,1, 28*0/, count/levels, lats, lons, times, 28*0/ data barray /97, 98, 99, 100/ data sarray /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) c c byte c count(1) = times call ncvpt (ncid, bid, start, count, barray, iret) c c short c count(1) = times call ncvpt (ncid, sid, start, count, sarray, iret) c c long c do 30 i = 1,lats larray(i) = 1000 30 continue count(1) = lats call ncvpt (ncid, lid, start, count, larray, iret) c c float c i = 0 do 40 itime = 1,times do 40 ilon = 1, lons do 40 ilat = 1, lats do 40 ilev = 1, levels i = i + 1 farray(ilev, ilat, ilon, itime) = real(i) 40 continue count(1) = levels call ncvpt (ncid, fid, start, count, farray, iret) c c double c i = 0 do 50 itime = 1, times do 50 ilon = 1, lons do 50 ilat = 1, lats do 50 ilev = 1, levels i = i + 1 darray(ilev, ilat, ilon, itime) = real(i) 50 continue count(1) = levels call ncvpt (ncid, did, start, count, darray, iret) c c char c start(1) = 1 start(2) = 1 count(1) = 4 count(2) = 4 lenstr = 31 string = 'testthiskind of ' call ncvptc (ncid, chid,start, count, string, lenstr, iret) call ncclos(ncid, iret) return end subroutine tncvpt1(cdfname) include 'netcdf.inc' character*31 cdfname integer iret, ncid integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx, sindx, lindx, findx(4), dindx(4), cindx integer lvalue integer*2 svalue byte bvalue double precision onethird integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data lvalue /1000/ data svalue/10/ data onethird/0.3333333333D0/ bvalue = ichar('z') ncid = ncopn (cdfname, NCWRITE, iret) c c test ncvpt1 for byte c call ncvpt1 (ncid, bid, bindx, bvalue, iret) c c test ncvpt1 for short c call ncvpt1 (ncid, sid, sindx, svalue, iret) c c test ncvpt1 for long c call ncvpt1 (ncid, lid, lindx, lvalue, iret) c c test ncvpt1 for float c call ncvpt1 (ncid, fid, findx, 3.14159, iret) c c test ncvpt1 for double c call ncvpt1 (ncid, did, dindx, onethird, iret) c c test ncvp1c for char c call ncvp1c (ncid, cid, cindx, 'a', iret) call ncclos (ncid, iret) return end C This routine reads varaibales and global attributes from C the REAL NetCDF file test_nc.nc. The file was created by NetCDF v3.5 C from the file test_nc.cdl that can be found in the mfhdf/fortran C directory. Please do not generate test_nc.nc file from the test_nc.cdl C using HDF4 ncgen. HDF4 ncgen generated HDF4 file! subroutine tread_netcdf() include 'netcdf.inc' C Variables declarations character*10 FILENAME character*1024 new_filename integer filename_len integer status, ncid, var_id integer time(12), date(12), start(3), count(3), int_attr(5) real a(3,2), float_attr(3) double precision c(3), double_attr(3) integer*2 b(2,3,12), short_attr(2) integer i, j, k, dlen character*10 description C Arrays to read data to. integer time_val(12), date_val(12), int_attr_val(5) integer*2 b_val(2,3,12), short_attr_val(2) real a_val(3,2), float_attr_val(3) double precision c_val(3), double_attr_val(3) real epsilon double precision depsilon C Arrays initialization DATA time_val /1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12/ DATA date_val /840116, 840214, 840316, 840415, 840516, 840615, + 840716, 840816, 840915, 841016, 841115, 841216/ DATA a_val /1.0, 2.0, 3.0, 4.0, 5.0, 6.0/ DATA b_val /1, 1, 2, 2, 3, 3, + 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, + 10, 10, 11, 11, 12, 12, + 13, 13, 14, 14, 15, 15, + 16, 16, 17, 17, 18, 18, + 19, 19, 20, 20, 21, 22, + 23, 23, 24, 24, 25, 25, + 26, 26, 27, 27, 28, 28, + 29, 29, 30, 30, 31, 31, + 32, 32, 33, 33, 34, 34, + 35, 35, 36, 36, 37, 37/ DATA c_val /2.0, 3.0, 100/ DATA int_attr_val /-100, 200, -300, 400, -500/ DATA float_attr_val /1.0, 2.0, 3.0/ DATA short_attr_val /0, 1/ DATA double_attr_val /-1.0, 2.0, -7.0/ DATA epsilon /1.E-6/ DATA depsilon /1.E-12/ C Modify filename to accommodate SRCDIR configure option FILENAME = 'test_nc.nc' filename_len = len(new_filename) call fixname(FILENAME, new_filename, filename_len) dlen = 10 ncid = ncopn(new_filename(1:filename_len), NCNOWRIT, status) if (status .ne.0) then write(*,*) 'ncopn failed' goto 1000 endif var_id = ncvid(ncid, 'time', status) start(1) = 1 count(1) = 12 call ncvgt(ncid, var_id, start, count, time, status) if (status .ne. 0) write(*,*) + 'ncvgt failed for 32-bit integer variable time' do i = 1, 12 if( time(i) .ne. time_val(i) ) + write(*,*) 'Wrong time value at index ', i enddo var_id = ncvid(ncid, 'c', status) start(1) = 1 count(1) = 3 call ncvgt(ncid, var_id, start, count, c, status) if (status .ne. 0) write(*,*) + 'ncvgt failed for 64-bit float variable c' do i = 1, 3 if( abs(c(i) - c_val(i)) .gt. depsilon ) + write(*,*) 'Wrong c value at index ', i enddo var_id = ncvid(ncid, 'date', status) start(1) = 1 count(1) = 12 call ncvgt(ncid, var_id, start, count, date, status) if (status .ne. 0) write(*,*) + 'ncvgt failed for 32-bit integer variable date' do i = 1, 12 if( date(i) .ne. date_val(i) ) + write(*,*) 'Wrong date value at index ', i enddo var_id = ncvid(ncid, 'a', status) start(1) = 1 start(2) = 1 count(1) = 3 count(2) = 2 call ncvgt(ncid, var_id, start, count, a, status) if (status .ne. 0) write(*,*) + 'ncvgt failed for 32-bit real variable a' do i = 1, 2 do j = 1, 3 if( abs(a(j,i) - a_val(j,i)) .gt. epsilon ) + write(*,*) 'Wrong a value at indices ', j, ',', i enddo enddo var_id = ncvid(ncid, 'b', status) start(1) = 1 start(2) = 1 start(3) = 1 count(1) = 2 count(2) = 3 count(3) = 12 call ncvgt(ncid, var_id, start, count, b, status) if (status .ne. 0) write(*,*) + 'ncvgt failed for 16-bit integer variable b' do i = 1, 12 do j = 1, 3 do k = 1, 2 if( b(k,j,i) .ne. b_val(k,j,i)) + write(*,*) + 'Wrong b value at indices ', k, ',', j, ',', i enddo enddo enddo C read global attributes call ncagt(ncid, NCGLOBAL, 'int_attr', int_attr, status) if (status .ne. 0) + write(*,*) 'ncagt failed for 32-bit integer attribute int_attr' do i = 1, 5 if( int_attr(i) .ne. int_attr_val(i) ) + write(*,*) 'Wrong int_attr value at index ', i enddo call ncagt(ncid, NCGLOBAL, 'float_attr', float_attr, status) if (status .ne. 0) + write(*,*) 'ncagt failed for 32-bit float attribute float_attr' do i = 1, 3 if( abs(float_attr(i) - float_attr_val(i)) .gt. epsilon ) + write(*,*) 'Wrong float_attr value at index ', i enddo call ncagt(ncid, NCGLOBAL, 'double_attr', double_attr, status) if (status .ne. 0) + write(*,*) + 'ncagt failed for 64-bit float attribute double_attr' do i = 1, 3 if( abs(double_attr(i) - double_attr_val(i)) .gt. depsilon ) + write(*,*) 'Wrong double_attr value at index ', i enddo call ncagt(ncid, NCGLOBAL, 'short_attr', short_attr, status) if (status .ne. 0) + write(*,*) + 'ncagt failed for 16-bit integer attribute double_attr' do i = 1, 2 if( short_attr(i) .ne. short_attr_val(i) ) + write(*,*) 'Wrong short_attr value at index ', i enddo call ncagtc(ncid, NCGLOBAL, 'Description', description, + dlen, status) if (status .ne. 0) + write(*,*) + 'ncagt failed for character attribute Description' if (description .ne. 'Attributes') + write(*,*) 'Wrong values of the character attribute' 1000 continue return end hdf4-hdf4.3.1/mfhdf/fortran/hdftest.f000066400000000000000000002240641503061704500174060ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Testing the Fortran interface for the multiple SD routines C program hdftest implicit none include 'mffunc.inc' integer hxsdir, hxscdir external hxsdir, hxscdir integer fid1, fid2 integer fid_empty integer sds1, sds2, sds3, sds4 integer sds_empty, index_empty, flag_empty integer dim1, dim2 integer access, nt, rank, stat, i, err integer err_chunk, err_char_chunk, err_compress integer*4 ival, ivals(1000) integer dims(10), start(10), end(10), stride(10), count, nattr integer idims(10) integer num, ref, j real*4 fval real*8 cal, cale, ioff, ioffe real*8 eps character*50 name, l, u, f, c character cdata(6,4), icdata(6,4), cfill, icfill character catt(2), icatt(2) integer*4 i32(2), ii32(2), max32, min32 integer*4 natt(2), inatt(2) integer SD_UNLIMITED, SD_DIMVAL_BW_INCOMP, DFNT_INT32 integer DFNT_FLOAT32, DFNT_CHAR8 integer SD_DIMVAL_BW_COMP, SD_FILL, SD_NOFILL parameter (SD_UNLIMITED = 0, + SD_DIMVAL_BW_INCOMP = 0, + SD_DIMVAL_BW_COMP = 1, + DFNT_INT32 = 24, + DFNT_FLOAT32 = 5, + DFNT_CHAR8 = 4, + SD_FILL = 0, + SD_NOFILL = 256) DATA cfill/'@'/, icfill/' '/ DATA catt/'U','S'/, icatt/' ',' '/ DATA natt/10,20/, inatt/0,0/ DATA i32/15,25/, ii32/0,0/ err=0 C C--- Create a file with an empty SDS C fid_empty = sfstart('test_empty.hdf', 4) if(fid_empty.eq.-1) then print *, 'sfstart returned bad ID' err = err + 1 endif C C--- Create an empty SDS C dims(1) = 4 dims(2) = 9 nt = DFNT_INT32 rank = 2 sds_empty = sfcreate(fid_empty, 'Empty_SDS', nt, rank, dims) if(sds_empty.eq.-1) then print *, 'SDcreate Empty returned bad ID', sds_empty err = err + 1 endif stat = sfendacc(sds_empty) if(stat.ne.0) then print *, 'SDendaccess returned', stat err = err + 1 endif stat = sfend(fid_empty) if(stat.ne.0) then print *, 'SDend returned', stat err = err + 1 endif C create a new file err = 0 eps = 0.0001 access = 4 fid1 = sfstart('test1.hdf', access) if(fid1.eq.-1) then print *, 'sfstart returned bad ID' err = err + 1 endif dims(1) = 4 dims(2) = 9 nt = DFNT_INT32 rank = 2 sds1 = sfcreate(fid1, 'Alpha', nt, rank, dims) if(sds1.eq.-1) then print *, 'SDcreate #1 returned bad ID', sds1 err = err + 1 endif dims(1) = 2 dims(2) = 5 dims(3) = 15 nt = DFNT_FLOAT32 rank = 3 sds2 = sfcreate(fid1, 'Beta[float32]', nt, rank, dims) if(sds2.eq.-1) then print *, 'SDcreate #2 returned bad ID', sds2 err = err + 1 endif ival = 14 stat = sfsfill(sds1, ival) if(stat.ne.0) then print *, 'Set fill returned', stat err = err + 1 endif max32 = 10 min32 = 1 stat = sfsrange(sds1, max32, min32) if(stat.ne.0) then print *, 'Set range returned', stat err = err + 1 endif max32 = 0 min32 = 0 do 100 i = 1, 10 ivals(i) = i 100 continue start(1) = 0 start(2) = 0 stride(1) = 1 stride(2) = 1 end(1) = 3 end(2) = 3 stat = sfwdata(sds1, start, stride, end, ivals) if(stat.ne.0) then print *, 'Write data returned', stat err = err + 1 endif fval = -14.25 stat = sfsfill(sds2, fval) if(stat.ne.0) then print *, 'Set fill returned', stat err = err + 1 endif start(1) = 1 start(2) = 1 stride(1) = 1 stride(2) = 1 end(1) = 3 end(2) = 3 stat = sfrdata(sds1, start, stride, end, ivals) if(stat.ne.0) then print *, 'Read data returned', stat err = err + 1 endif if (ivals(1).ne.5) then err = err + 1 print *, 'was expecting 5 got', ivals(1) endif if(err.ne.0) print *, 'Before ReadVerify err = ', err if (ivals(2).ne.6) then err = err + 1 print *, 'was expecting 6 got', ivals(2) endif if (ivals(3).ne.14) then err = err + 1 print *, 'was expecting 14 got', ivals(3) endif if (ivals(4).ne.8) then err = err + 1 print *, 'was expecting 8 got', ivals(4) endif if (ivals(5).ne.9) then err = err + 1 print *, 'was expecting 9 got', ivals(5) endif if (ivals(6).ne.14) then err = err + 1 print *, 'was expecting 14 got', ivals(6) endif if (ivals(7).ne.14) then err = err + 1 print *, 'was expecting 14 got', ivals(7) endif if (ivals(8).ne.14) then err = err + 1 print *, 'was expecting 14 got', ivals(8) endif if (ivals(9).ne.14) then err = err + 1 print *, 'was expecting 14 got', ivals(9) endif if(err.ne.0) print *, 'After ReadVerify err = ', err nt = DFNT_INT32 stat = sfsnatt(sds2, 'TestAttr', nt, 3, ivals) if(stat.ne.0) then print *, 'Set numeric attr returned', stat err = err + 1 endif dim1 = sfdimid(sds2, 1) if(dim1.ne.327683) then print *, 'Dim id returned', dim1 err = err + 1 endif stat = sfsdmname(dim1, 'TestDim') if(stat.ne.0) then print *, 'Set dim name returned', stat err = err + 1 endif stat = sfsdmstr(dim1, 'dA', 'dBB', 'dCCC') if(stat.ne.0) then print *, 'Set dim strs returned', stat err = err + 1 endif do 110 i = 1, 10 ivals(i) = 10 * i + i 110 continue nt = DFNT_INT32 count = 5 stat = sfsdscale(dim1, count, nt, ivals) if(stat.ne.0) then print *, 'Set dims scales returned', stat err = err + 1 endif stat = sfsdtstr(sds1, 'lxxx', 'uyyy', 'fzzz', 'caaa') if(stat.ne.0) then print *, 'Set data strings returned', stat err = err + 1 endif stat = sffinfo(fid1, num, nattr) if(stat.ne.0.or.num.ne.3) then print *, 'File info returned wrong values', stat, num err = err + 1 endif cal = 10.1 cale = 20.1 ioff = 40.1 ioffe = 50.1 C why 16? 16 is not a legal HDF NType value. nt = 16 stat = sfscal(sds2, cal, cale, ioff, ioffe, nt) if(stat.ne.0) then print *, 'Set calibration returned', stat err = err + 1 endif stat = sfn2index(fid1, 'Alpha') if(stat.ne.0) then print *, 'Index of Alpha data set is wrong', stat err = err + 1 endif ref = sfid2ref(sds1) if(ref.eq.0) then print *, 'sfidtoref failed' err = err + 1 endif stat = sfref2index(fid1, ref) if(stat.ne.0) then print *, 'mapping from ref to index failed', stat err = err + 1 endif stat = sfn2index(fid1, 'Bogus') if(stat.ne.(-1)) then print *, 'Found a bogus data set with index', stat err = err + 1 endif nt = DFNT_CHAR8 stat = sfscatt(fid1, 'Globulator', nt, 12, 'Howdy Sailor') if(stat.ne.0) then print *, 'Set attr returned', stat err = err + 1 endif nt = DFNT_INT32 stat = sfsnatt(fid1, 'Numeric', nt, 2, i32) if(stat.ne.0) then print *, 'Set attr returned', stat err = err + 1 endif stat = sfendacc(sds1) if(stat.ne.0) then print *, 'SDendaccess returned', stat err = err + 1 endif stat = sfend(fid1) if(stat.ne.0) then print *, 'SDend returned', stat err = err + 1 endif C C OK, let's open it back up and take a look at what we've done C fid_empty = sfstart('test_empty.hdf', 3) if(fid_empty.eq.-1) then print *, 'Reopen returned', fid_empty err = err + 1 endif index_empty = sfn2index(fid_empty,'Empty_SDS') sds_empty= sfselect(fid_empty, index_empty) if(sds_empty.eq. -1) then print *, 'Select returned', sds_empty err = err + 1 endif stat = sfchempty(sds_empty, flag_empty) if(stat.ne. 0 .or. flag_empty. ne. 1) then print*, 'sfchempty returned wrong flag, should be 1)' err = err +1 endif stat = sfendacc(sds_empty) if(stat.ne.0) then print *, 'SDendaccess returned', stat err = err + 1 endif stat = sfend(fid_empty) if(stat.ne.0) then print *, 'SDend returned', stat err = err + 1 endif fid2 = sfstart('test1.hdf', 3) if(fid2.eq.-1) then print *, 'Reopen returned', fid2 err = err + 1 endif sds3 = sfselect(fid2, 0) if(sds3.eq. -1) then print *, 'Select returned', sds3 err = err + 1 endif stat = sfchempty(sds3, flag_empty) if(stat.ne. 0 .or. flag_empty. ne. 0) then print*, 'sfchempty returned wrong flag, should be 0)' err = err +1 endif stat = sfginfo(sds3, name, rank, idims, nt, nattr) if(stat.ne.0) then print *, 'Get info returned ', stat err = err + 1 endif if(nt.ne.DFNT_INT32) then print *, 'Incorrect number type ', nt err = err + 1 endif if(rank.ne.2) then print *, 'Incorrect rank ', rank err = err + 1 endif if(idims(1).ne.4) then print *, 'Incorrect Dim(1) = ', idims(1) err = err + 1 endif if(idims(2).ne.9) then print *, 'Incorrect Dim(2) = ', idims(2) err = err + 1 endif if(nattr.ne.6) then print *, 'Wrong number of attributes returned', nattr err = err + 1 endif print *, 'name = ', name stat = sfgrange(sds3, max32, min32) if(stat.ne.0) then print *, 'Get range returned', stat err = err + 1 endif if(max32.ne.10) then print *, 'Max from GetRange ', max32 err = err + 1 endif if(min32.ne.1) then print *, 'Min from GetRange ', min32 err = err + 1 endif if(err.ne.0) print *, 'Current error count ', err stat = sfgfill(sds3, max32) if(stat.ne.0) then print *, 'Get fillvalue returned', stat err = err + 1 endif if(max32.ne.14) then print *, 'Incorrect FillValue ', max32 err = err + 1 endif sds4 = sfselect(fid2, 1) if(sds4.eq. -1) then print *, 'Select #4 returned', sds4 err = err + 1 endif dim2 = sfdimid(sds4, 1) if(dim2.eq. -1) then print *, 'Get dim id #2 returned', dim2 err = err + 1 endif stat = sfgdinfo(dim2, name, rank, nt, nattr) if(stat.ne.0) then print *, 'Get dim info returned', stat err = err + 1 endif if(nt.ne.DFNT_INT32) err = err + 1 if(rank.ne.5) err = err + 1 print *, 'name = ', name stat = sfgainfo(fid2, 0, name, nt, rank) if(stat.ne.0) then print *, 'Attr info returned', stat err = err + 1 endif if(nt.ne.4) err = err + 1 if(rank.ne.12) err = err + 1 print *, 'name = ', name cal = 0 cale = 0 ioff = 0 ioffe = 0 nt = 0 stat = sfgcal(sds4, cal, cale, ioff, ioffe, nt) if(stat.ne.0) then print *, 'Get cal returned', stat err = err + 1 endif if(abs(cal - 10.1) .gt. eps) err = err + 1 if(abs(cale - 20.1) .gt. eps) err = err + 1 if(abs(ioff - 40.1) .gt. eps) err = err + 1 if(abs(ioffe - 50.1) .gt. eps) err = err + 1 if(nt.ne.16) err = err + 1 do 120 i = 1, 10 ivals(i) = 0 120 continue stat = sfgdscale(dim2, ivals) if(stat.ne.0) then print *, 'Get scales returned', stat err = err + 1 endif if (ivals(1).ne.11) err = err + 1 if (ivals(2).ne.22) err = err + 1 if (ivals(3).ne.33) err = err + 1 if (ivals(4).ne.44) err = err + 1 if (ivals(5).ne.55) err = err + 1 stat = sfgdtstr(sds3, l, u, f, c, 50) if(stat.ne.0) then print *, 'Get data strs returned', stat err = err + 1 endif print *, 'label = ', l print *, 'unit = ', u print *, 'format = ', f print *, 'coordsys = ', c stat = sfgdmstr(dim2, l, u, f, 50) if(stat.ne.0) then print *, 'Get dim strs returned', stat err = err + 1 endif print *, 'label = ', l print *, 'unit = ', u print *, 'format = ', f stat = sfrcatt(fid2, 0, name) if(stat.ne.0) then print *, 'Attr read returned', stat err = err + 1 endif print *, 'values = ', name stat = sfrnatt(fid2, 1, ii32) if(stat.ne.0) then print *, 'Attr read returned', stat err = err + 1 endif if ((ii32(1) .ne. 15) .or. (ii32(2) .ne. 25)) then print *, 'Numeric attr read error: ' print *, ' should be 15 25, get ',ii32(1), ii32(2) err = err + 1 endif C C Testing External Element functions: sfsextf, hxsdir, hxscdir. C First set the external create directory to "testdir". C Set dataset sds3 to store in external file. C Try read it back (should fail the first time). C Set locating directory to "nosuch:testdir". C Read again. Should succeed this time. C stat = hxscdir('testdir') if(stat.ne.0) then print *, 'HX set create dir (hxscdir) returned', stat err = err + 1 endif stat = sfsextf(sds3, 'testext.hdf', 0) if(stat.ne.0) then print *, 'set external file (sfsextf) returned', stat err = err + 1 endif C C Close and reopen sds3 so that data is flushed to the ext. file C stat = sfendacc(sds3) if(stat.ne.0) then print *, 'sfendacc returned', stat err = err + 1 endif sds3 = sfselect(fid2, 0) if(sds3.eq.-1) then print *, 'Select returned', sds3 err = err + 1 endif start(1) = 1 start(2) = 1 stride(1) = 1 stride(2) = 1 end(1) = 3 end(2) = 3 stat = sfrdata(sds3, start, stride, end, ivals) C C Should fail first time. C if(stat.ne.-1) then print *, 'Read data (sfrdata) returned', stat err = err + 1 endif stat = hxsdir('nosuch|testdir') if(stat.ne.0) then print *, 'HX set dir (hxscdir) returned', stat err = err + 1 endif stat = sfrdata(sds3, start, stride, end, ivals) C C Should succeed this time. C if(stat.ne.0) then print *, 'Read data (sfrdata) returned', stat err = err + 1 endif if (ivals(1).ne.5) then err = err + 1 print *, 'was expecting 5 got', ivals(1) endif stat = sfendacc(sds3) if(stat.ne.0) then print *, 'sfendacc returned', stat err = err + 1 endif stat = sfendacc(sds4) if(stat.ne.0) then print *, 'sfendacc returned', stat err = err + 1 endif stat = sfend(fid2) if(stat.ne.0) then print *, 'SDend returned', stat err = err + 1 endif C test sfsdmvc and sfisdmvc -- dimval backward compatible fid1 = sfstart('test2.hdf', 4) if(fid1 .lt. 1) then print *, 'sfstart returned', fid1 err = err + 1 endif dims(1) = 6 dims(2) = 0 nt = DFNT_INT32 rank = 2 sds1 = sfcreate(fid1, 'ncomp', nt, rank, dims) if (sds1 .eq. -1) then print *, 'sfcreate returned', sds1 err = err + 1 endif dim1 = sfdimid(sds1, 0) if (dim1 .eq. -1) then print *, 'sfdimid returned', dim1 err = err + 1 endif stat = sfsdmvc(dim1, 0) if(stat .ne. 0) then print *, 'sfsdmvc returned', stat err = err + 1 endif dim2 = sfdimid(sds1, 1) stat = sfsdmvc(dim2, 0) if(stat .ne. 0) then print *, 'sfsdmvc returned', stat err = err + 1 endif do 140 i=1, 6 ivals(i) = i*5 140 continue stat = sfsdscale(dim1, 6, DFNT_INT32, ivals) if(stat .ne. 0) then print *, 'sfsdscale returned', stat err = err + 1 endif start(1)=0 start(2)=0 stride(1) = 1 stride(2) = 1 end(1)=6 end(2)=4 do 160 i=1, 24 ivals(i) = i 160 continue stat = sfwdata(sds1, start, stride, end, ivals) if (stat .ne. 0) then print *, 'sfwdata returned', stat err = err + 1 endif stat = sfendacc(sds1) if(stat .ne. 0) then print *, 'sfendacc returned', stat err = err + 1 endif stat = sfend(fid1) if(stat .ne. 0) then print *, 'SDend returned', stat err = err + 1 endif C let's open it back up and take a look at what we've done C fid2 = sfstart('test2.hdf', 3) if(fid2 .lt. 0) then print *, 'Reopen returned', fid2 err = err + 1 endif stat = sfn2index(fid2, 'ncomp') if (stat .lt. 0) then print *, 'sfn2index returned', stat err = err + 1 endif sds3 = sfselect(fid2, stat) if (sds3 .eq. -1) then print *, 'sfselect returned', sds3 err = err + 1 endif stat = sfginfo(sds3, name, rank, idims, nt, nattr) if (stat .ne. 0) then print *, 'sfginfo returned', stat err = err + 1 endif if ((rank .ne. 2) .or. (idims(1) .ne. 6) .or. + (idims(2) .ne. 4) .or. (nt .ne. DFNT_INT32)) then print *, 'error in sfginfo' err = err + 1 endif dim2=sfdimid(sds3,1) stat = sfgdinfo(dim2, name, dims(2), nt, nattr) if ((dims(2) .ne. SD_UNLIMITED) .or. (nt .ne. 0 )) then print *, '1st sfgdinfo error', stat, dims(2), nt err = err + 1 endif dim1=sfdimid(sds3,0) stat = sfgdinfo(dim1, name, dims(1), nt, nattr) if ((dims(1) .ne. 6) .or. (nt .ne. DFNT_INT32 )) then print *, '2nd sfgdinfo error', stat, dims(1), nt err = err + 1 endif stat = sfrdata(sds3, start, stride, end, ivals) if (stat .ne. 0) then print *, 'sfrdata returned', stat err = err + 1 endif do 180 i=1, 24 if (ivals(i) .ne. i) then print *, 'wrong value: should be ',i,' got ',ivals(i) err = err + 1 endif 180 continue stat = sfisdmvc(dim1) if (stat .ne. 0) then print *, 'sfisdmvc returned', stat err = err + 1 endif stat = sfsdmvc(dim1, 1) stat = sfendacc(sds3) if (stat .ne. 0) then print *, 'sfendacc returned', stat err = err + 1 endif stat = sfend(fid2) if (stat .ne. 0) then print *, 'sfend returned', stat err = err + 1 endif C open one last time to check that NDG ref has been constant C check SDsetdimval_compat fid1 = sfstart('test2.hdf', 3) if (fid1 .eq. -1) then print *, 'sfstart returned', stat err = err + 1 endif C read back dimval_non_compat stat = sfn2index(fid1, 'ncomp') if (stat .lt. 0) then print *, 'sfn2index returned', stat err = err + 1 endif sds2 = sfselect(fid1, stat) if (sds2 .eq. -1) then print *, 'sfselect returned', sds2 err = err + 1 endif stat = sfginfo(sds2, name, rank, idims, nt, nattr) if (stat .ne. 0) then print *, 'sfginfo returned', stat err = err + 1 endif if ((rank .ne. 2) .or. (idims(2) .ne. 4) .or. + (idims(1) .ne. 6) .or. (nt .ne. DFNT_INT32)) then print *, 'error in sfginfo' err = err + 1 endif dim1=sfdimid(sds2,0) stat = sfgdinfo(dim1, name, dims(1), nt, nattr) if ((dims(1) .ne. 6) .or. (nt .ne. DFNT_INT32 )) then print *, '3rd sfgdinfo error', stat, dims(1), nt err = err + 1 endif stat = sfisdmvc(dim1) if (stat .ne. 1) then print *, 'sfisdmvc returned', stat err = err + 1 endif stat = sfendacc(sds2) if (stat .lt. 0) then print *, 'sfendacc returned', stat err = err + 1 endif stat = sfend(fid1) if (stat .lt. 0) then print *, 'sfend returned', stat err = err + 1 endif C Test char attr, char fill value and char data routines C sfscatt,sfrnatt,sfsnatt, sfrnatt,sfwcdata,sfrcdata C sfscfill, sfgcfill fid1 = sfstart('test2.hdf', 4) if(fid1 .lt. 1) then print *, 'sfstart returned', fid1 err = err + 1 endif dims(1) = 6 dims(2) = 0 nt = DFNT_CHAR8 rank = 2 sds1 = sfcreate(fid1, 'char_type', nt, rank, dims) if (sds1 .eq. -1) then print *, 'sfcreate returned', sds1 err = err + 1 endif C Set char fill value stat = sfscfill(sds1, cfill) if (stat .ne. 0) then print *, 'sfscfill returned', stat err = err + 1 endif start(1) = 0 start(2) = 1 stride(1) = 1 stride(2) = 1 end(1) = 6 end(2) = 2 C create the char data do 195 i=1,4 do 190 j=1,6 cdata(j,i) = 'C' icdata(j,i) = ' ' 190 continue 195 continue C Write a slab of char data stat = sfwcdata(sds1, start, stride, end, cdata) if (stat .ne. 0) then print *, 'sfwdata returned', stat err = err + 1 endif C Set char attr stat = sfscatt(sds1, 'CharAttr',nt, 2, catt) if(stat.ne.0) then print *, 'sfscatt returned', stat err = err + 1 endif C Set numeric attr nt = DFNT_INT32 stat = sfsnatt(sds1, 'NumericAttr',nt, 2, natt) if(stat.ne.0) then print *, 'sfsnatt returned', stat err = err + 1 endif stat = sfendacc(sds1) if(stat .ne. 0) then print *, 'sfendacc returned', stat err = err + 1 endif C Close file stat = sfend(fid1) if(stat .ne. 0) then print *, 'SDend returned', stat err = err + 1 endif C read back fid1 = sfstart('test2.hdf', 3) if(fid1 .lt. 1) then print *, 'sfstart returned', fid1 err = err + 1 endif stat = sfn2index(fid1, 'char_type') if (stat .lt. 0) then print *, 'sfn2index returned', stat err = err + 1 endif sds2 = sfselect(fid1, stat) if (sds2 .eq. -1) then print *, 'sfselect returned', sds2 err = err + 1 endif stat = sfginfo(sds2, name, rank, idims, nt, nattr) if (stat .ne. 0) then print *, 'sfginfo returned', stat err = err + 1 endif start(1) = 0 start(2) = 0 stride(1) = 1 stride(2) = 1 end(1) = 6 end(2) = 3 C read char data and char fill stat = sfrcdata(sds2, start, stride, end, icdata) do 200 i=1,6 if (icdata(i,1) .ne. cfill) then print *, 'error in read c_fill' err = err + 1 endif 200 continue do 250 i=2,3 do 230 j=1,6 if (icdata(j,i) .ne. 'C') then print *, 'error in sfrcdata' err = err + 1 endif 230 continue 250 continue C read char fillvalue stat = sfgcfill(sds2, icfill) if ((stat .eq. -1) .or. (icfill .ne. cfill)) then print *, 'sfgcfill returned', sds2 err = err + 1 endif C read char attr stat = sffattr(sds2, 'CharAttr') if (stat .eq. -1) then print *, 'sffattr returned', sds2 err = err + 1 endif stat = sfrcatt(sds2, stat, icatt) if ((icatt(1) .ne. catt(1)) .or. (icatt(2) .ne. catt(2))) then print *, 'sfrcatt returned', sds2 err = err + 1 endif C read numeric attr stat = sffattr(sds2, 'NumericAttr') if (stat .eq. -1) then print *, 'sffattr returned', sds2 err = err + 1 endif stat = sfrnatt(sds2, stat, inatt) if ((inatt(1) .ne. natt(1)) .or. (inatt(2) .ne. natt(2))) then print *, 'sfrnatt returned', inatt(1), inatt(2) err = err + 1 endif stat = sfendacc(sds2) if(stat .ne. 0) then print *, 'sfendacc returned', stat err = err + 1 endif C Close file stat = sfend(fid1) if(stat .ne. 0) then print *, 'SDend returned', stat err = err + 1 endif C Test set fill mode fid1 = sfstart('test1.hdf', 3) nt = DFNT_INT32 rank = 2 dims(1) = 6 dims(2) = 5 sds1 = sfcreate(fid1, 'FIXED1', nt,rank,dims) ival = -300 do 400 i = 1, 30 ivals(i) = i + 100 400 continue stat = sfsfill(sds1, ival) if(stat .ne. 0) then print *, 'sfsnatt returned', stat err = err + 1 endif stat = sfsflmd(fid1, SD_NOFILL) if(stat .ne. SD_FILL) then print *, 'sfsflmd returned', stat err = err + 1 endif stat = sfendacc(sds1) if(stat .ne. 0) then print *, 'sfendacc returned', stat err = err + 1 endif i = sfn2index(fid1,'FIXED1') sds1 = sfselect(fid1, i) if(sds1 .lt. 0) then print *, 'sfselect returned', sds1 err = err + 1 endif start(1) = 0 start(2) = 2 stride(1) = 1 stride(2) = 1 end(1) = 6 end(2) = 1 stat = sfsflmd(fid1, SD_FILL) if (stat .ne. SD_NOFILL) then print *, 'sfsflmd returned', stat err = err + 1 endif stat = sfwdata(sds1,start, stride, end, ivals) if (stat .eq. -1) then print *, 'sfwdata returned', stat err = err + 1 endif stat = sfendacc(sds1) C create a new fixed size SDS, srite the 3rd rec NOFILL. C then set to SD_FILL and write the 5th rec. sds1 = sfcreate(fid1, 'FIXED_SDS', nt,rank,dims) stat = sfsfill(sds1, ival) stat = sfsflmd(fid1, SD_NOFILL) if(stat .ne. SD_FILL) then print *, 'sfsflmd returned', stat err = err + 1 endif stat = sfwdata(sds1,start, stride, end, ivals) if (stat .eq. -1) then print *, 'sfwdata returned', stat err = err + 1 endif stat = sfendacc(sds1) stat = sfend(fid1) C open again, change fillmode and write the 5th rec fid1 = sfstart('test1.hdf', 3) i = sfn2index(fid1, 'FIXED_SDS') sds1 = sfselect(fid1, i) stat = sfsflmd(fid1, SD_FILL) start(2) = 4 stat = sfwdata(sds1,start,stride,end,ivals) stat = sfendacc(sds1) stat = sfend(fid1) C read back FIXED_SDS fid1 = sfstart('test1.hdf', 3) i = sfn2index(fid1, 'FIXED_SDS') sds1 = sfselect(fid1, i) start(1) = 0 start(2) = 0 end(1) = 6 end(2) = 5 stat = sfrdata(sds1,start,stride,end,ivals) stat = sfendacc(sds1) do 450 i=13,18 if (ivals(i) .ne. (100+(i-12))) then print *,'wrong value: should be ', 100+(i-12) print *,' get ', ivals(i) err = err+1 endif if (ivals(i+12) .ne. (100+(i-12))) then print *,'wrong value: should be ', 100+(i-12) print *,' get ', ivals(i+12) err = err+1 endif 450 continue do 500 i=19,24 if (ivals(i) .eq. ival) then print *,'Should not be ',ival, ' got ', ivals(i) err = err+1 endif 500 continue C read FIXED1 i = sfn2index(fid1, 'FIXED1') sds1 = sfselect(fid1, i) stat = sfrdata(sds1,start,stride,end,ivals) stat = sfendacc(sds1) do 510 i=13,18 if (ivals(i) .ne. (100+(i-12))) then print *,'wrong value: should be ', 100+(i-12) print *,' get ', ivals(i) err = err+1 endif 510 continue do 520 i=19,24 if (ivals(i) .ne. ival) then print *,'Should be ',ival, ' got ', ivals(i) err = err+1 endif 520 continue stat = sfend(fid1) C test unlimited sds fid1 = sfstart('test1.hdf', 3) if (fid1 .eq. -1) then print *,'Open test1.hdf failed.' err = err+1 endif dims(1) = 6 dims(2) = SD_UNLIMITED sds1=sfcreate(fid1,'UNLIMITED_SDS',DFNT_INT32,rank,dims) if (sds1 .eq. -1) then print *,'create UNLIMITED_SDS failed. ' err = err+1 endif ival = -300 do 550 i=1,24 ivals(i) = i 550 continue stat = sfsfill(sds1, ival) stat = sfsflmd(fid1, SD_NOFILL) if (stat .ne. SD_FILL) then print *,'Should be ',SD_FILL, ' got ', stat err = err+1 endif start(1) = 0 start(2) = 2 end(1) = 6 end(2) = 1 stat = sfwdata(sds1,start, stride, end, ivals) if (stat .eq. -1) then print *,'write UNLIMITED_SDS failed. ' err = err+1 endif stat = sfendacc(sds1) stat = sfend(fid1) C open again, write the 5th rec fid1 = sfstart('test1.hdf', 3) i = sfn2index(fid1, 'UNLIMITED_SDS') sds1 = sfselect(fid1, i) stat = sfsflmd(fid1, SD_FILL) start(2) = 4 stat = sfwdata(sds1,start,stride,end, ivals) stat = sfendacc(sds1) stat = sfend(fid1) C read back fid1 = sfstart('test1.hdf', 3) i = sfn2index(fid1, 'UNLIMITED_SDS') sds1 = sfselect(fid1, i) start(1) = 0 start(2) = 0 end(1) = 6 end(2) = 5 stat = sfrdata(sds1,start,stride,end,ivals) stat = sfendacc(sds1) do 600 i=13,18 if (ivals(i) .ne. (i-12)) then print *,'wrong value: should be ', (i-12) print *,' get ', ivals(i) err = err+1 endif if (ivals(i+12) .ne. (i-12)) then print *,'wrong value: should be ', (i-12) print *,' get ', ivals(i+12) err = err+1 endif 600 continue do 650 i=19,24 if (ivals(i) .ne. ival) then print *,'Should be ',ival, ' got ', ivals(i) err = err+1 endif 650 continue stat = sfend(fid1) C C C Call three subroutines: C C test_chunk (err_chunk) - tests fortran chunking functions C test_char_chunk (err_char_chunk) - tests fortran char chunking C functions C test_compress(err_compress) - tests compression function with C different compression types C C EIP 1/6/98 C C err_chunk = 0 call test_chunk ( err_chunk ) err = err + err_chunk C err_char_chunk = 0 call test_char_chunk( err_char_chunk ) err = err + err_char_chunk C err_compress = 0 call test_compress( err_compress ) C err = err + err_compress print *, 'Total errors : ', err end subroutine test_chunk( err_chunk ) implicit none C C------- Begin Variables declarations ----------------------------------- C integer N_COMP_TYPES, N_COMP_ARG parameter (N_COMP_TYPES = 5, N_COMP_ARG = 4) integer sd_id(N_COMP_TYPES), . sds_id(N_COMP_TYPES), . sds_index(N_COMP_TYPES) integer RANK, comp_type, c_out integer comp_arg(N_COMP_ARG) integer comp_prm_out(N_COMP_ARG) integer comp_type_out(N_COMP_TYPES) integer comp_typesd integer d_dims(2) integer ch_dims(2),ch_dims_out(2), start_dims(2) integer start(2), stride(2), edges(2) integer status, fill_value integer maxcache, flags integer err_chunk integer n,m, n_part, m_part integer n_start, m_start, n_stride, m_stride integer nc, mc, n_nc, n_mc integer i, j, k, l, lb, kb, kl, kj integer i_comp integer mod1, mod2 character*12 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) C C SDS functions declarations C C integer sfstart, sfcreate, sfendacc, sfend, C . sfn2index, sfselect, sfgcompress, C . sfsfill, sfschnk, sfscchnk, sfwchnk, C . sfgichnk, sfrchnk, sfwdata, sfrdata include 'mffunc.inc' C C Initial data declarations( change if you which to test larger arrays ) C C Data array dimensions n and m and RANK C parameter (n = 9, m = 4, RANK = 2) C C Part data dimensions n_part, m_part C parameter (n_part = 5, m_part = 2) C C Start coordinates of part_data C parameter (n_start = 2, m_start = 1) C C Stride in each dimension C parameter (n_stride = 1, m_stride = 1) C C Chunk dimensions nc and mc C parameter (nc = 3, mc = 2) C C Dimensions of "chunk matrix" n_nc and n_mc. C Note if n is multiple of nc or m is multiple C of mc we need smaller dimensions ( by one) parameter (n_nc = n/nc + 1, n_mc = m/mc + 1) C C Actual size of chunk matrix ( will be calculated latera ) C integer n_nc_a, n_mc_a C C Data declaration C integer*4 data(n,m), . chunk(nc,mc), . chunk_out(nc,mc), . chunk_data(nc,mc,n_nc,n_mc) C C Buffers to hold part of the data when we read data back C integer*4 part_data(n_part,m_part) C C HDF parameters initialization C C C Read/Write parameters C integer DFACC_CREATE, . DFACC_WRITE, . DFACC_READ parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) C C Data type parameters C C integer DATA_TYPE integer DFNT_CHAR, . DFNT_INT16, . DFNT_INT32, . DFNT_FLOAT32, . DFNT_FLOAT64 parameter (DFNT_CHAR = 4, . DFNT_INT16 = 22, . DFNT_INT32 = 24, . DFNT_FLOAT32 = 5, . DFNT_FLOAT64 = 6) C C Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_NBIT, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE parameter (COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_NBIT = 2, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) C C Compression arguments ( defined for clarity, actual values C will be passed to SFSCHUNK function via comp_arg parameter) C integer deflate_level, . skphuff_skp_size, . nbit_sign_ext, . nbit_fill_one, . nbit_start_bit, . nbit_bit_len parameter ( deflate_level = 6, . skphuff_skp_size = 2, . nbit_sign_ext = 0, . nbit_fill_one = 0, . nbit_start_bit = 6, . nbit_bit_len = 7 ) C C--------------------End of declarations------------------------------ C C C We will write to five different files corresponding to the C different compression types C C NO compression C file(1) = 'chunk_no.hdf' name(1) = 'Nocomp_data' comp_type_out(1) = 0 C C RLE compression C file(2) = 'chunk_rl.hdf' name(2) = 'Rlcomp_data' comp_type_out(2) = 1 C C Nbit compression C file(3) = 'chunk_nb.hdf' name(3) = 'Nbcomp_data' comp_type_out(3) = 2 C C Adaptive Huffman compression C file(4) = 'chunk_sk.hdf' name(4) = 'Hucomp_data' comp_type_out(4) = 1 C C Gzip compression C file(5) = 'chunk_gz.hdf' name(5) = 'Gzcomp_data' comp_type_out(5) = 1 C C Dimension sizes array initialization C d_dims(1) = n d_dims(2) = m C C Chunk dimension sizes array initialization C ch_dims(1) = nc ch_dims(2) = mc C C Find actual size of chunk matrix C mod1 = mod (n,nc) mod2 = mod (m,mc) if (mod1 .eq. 0) n_nc_a = n_nc - 1 if (mod2 .eq. 0) n_mc_a = n_mc - 1 C C Initialize original array C do 20 j = 1, m do 10 i = 1, n data(i,j) = 10*j + i 10 continue 20 continue C C Initialize chunks C lb = mc kb = nc do 60 j = 1, n_mc_a do 50 i = 1, n_nc_a do 40 l = 1, lb do 30 k = 1, kb chunk_data(k,l,i,j) = 0. 30 continue 40 continue 50 continue 60 continue C C Assign actual data to the chunks C do 100 j = 1, n_mc_a do 90 i = 1, n_nc_a if (j .eq. n_mc_a .and. mod2 .ne. 0 ) lb = mod(m, mc) if (i .eq. n_nc_a .and. mod1 .ne. 0 ) kb = mod(n, nc) do 80 l = 1, lb do 70 k = 1, kb chunk_data(k,l,i,j) = data ((i-1)*nc +k, (j-1)*mc +l) 70 continue 80 continue 90 continue 100 continue C C Initialize SD interfaces C do 101 i = 1, N_COMP_TYPES sd_id(i) = sfstart (file(i), DFACC_CREATE) 101 continue C C Main loop through different compression types C do 1000 i_comp = 1, N_COMP_TYPES C C Create the data set C sds_id(i_comp) = sfcreate(sd_id(i_comp), name(i_comp), . DFNT_INT32, RANK, d_dims) if( sds_id(i_comp) .eq. -1 ) then print *, 'sfcreate failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif C C Fill the data set with fill_value C fill_value = 0 status = sfsfill (sds_id(i_comp), fill_value) if( status .ne. 0 ) then print *, 'sfsfill failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif C C Set compression type and compression arguments C comp_type = i_comp - 1 C C Initialize compression arguments array C do 1 i = 1, n_comp_arg comp_arg(i) = 0 1 continue if( comp_type .eq. COMP_CODE_NBIT) then comp_arg(1) = nbit_sign_ext comp_arg(2) = nbit_fill_one comp_arg(3) = nbit_start_bit comp_arg(4) = nbit_bit_len endif if( comp_type .eq. COMP_CODE_SKPHUFF ) then comp_arg(1) = skphuff_skp_size endif if (comp_type .eq. COMP_CODE_DEFLATE ) then comp_arg(1) = deflate_level endif C C Create chunked SDS C status = sfschnk (sds_id(i_comp), ch_dims, comp_type, . comp_arg) if( status .ne. 0 ) then print *, 'sfschnk failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif C C Set chunk cache to hold maximum of nc chunks C maxcache = n_nc_a flags = 0 status = sfscchnk (sds_id(i_comp), maxcache, flags) if( status .ne. maxcache ) then print *, 'sfscchnk failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif C C Write the data chunks. First chunk is written by sfwdata function C do 150 j = 1, n_mc_a do 140 i = 1, n_nc_a start_dims(1) = i start_dims(2) = j do 130 l = 1, mc do 120 k = 1, nc chunk(k,l) = chunk_data(k,l,i,j) 120 continue 130 continue if (i .eq. 1 .and. j .eq. 1) then start(1) = 0 start(2) = 0 stride(1) = 1 stride(2) = 1 edges(1) = nc edges(2) = mc status = sfwdata(sds_id(i_comp), start, stride, . edges, chunk) if( status .ne. 0 ) then print *, 'sfwdata failed for', i_comp, ' -th dataset' print *, ' first chunk' err_chunk = err_chunk + 1 endif else status = sfwchnk(sds_id(i_comp), start_dims, chunk) if( status .ne. 0 ) then print *, 'sfwchnk failed for', i_comp, ' -th dataset' print *, i,'-th',j,'-th', 'chunk' err_chunk = err_chunk + 1 endif endif 140 continue 150 continue status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif status = sfend (sd_id(i_comp)) if( status .ne. 0 ) then print *, 'sfend failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif 1000 continue C C Let's check what we have written C We will skip NBIT until things are clarified with QAK. C C Open files and restart SD interfaces C do 200 i = 1, N_COMP_TYPES C sd_id(i) = sfstart (file(i), DFACC_READ) if( sd_id(i) .eq. -1 ) then print *, 'sfstart failed for', i, ' -th dataset' err_chunk = err_chunk + 1 endif 200 continue C C Find written dataset in each file using its name and index C do 201 i = 1, N_COMP_TYPES C sds_index(i) = sfn2index (sd_id(i), name(i)) if( sds_index(i) .eq. -1 ) then print *, 'sfn2index failed for', i, ' -th dataset' err_chunk = err_chunk + 1 endif sds_id(i) = sfselect (sd_id(i), sds_index(i)) if( sds_id(i) .eq. -1 ) then print *, 'sfselect failed for', i, ' -th dataset' err_chunk = err_chunk + 1 endif C C Find out type of compression used and compression parameters. C status = sfgcompress(sds_id(i), comp_typesd, comp_prm_out) if (status .eq. -1) then print *, 'sfgcompress failed for', i, ' -th dataset' err_chunk = err_chunk + 1 endif if (name(i) .eq. 'Nocomp_data') then if (comp_typesd .ne. COMP_CODE_NONE) then print *, 'wrong compression type for Nocomp_data dataset' err_chunk = err_chunk + 1 endif endif if (name(i) .eq. 'Rlcomp_data') then if (comp_typesd .ne. COMP_CODE_RLE) then print *, 'wrong compression type for Rlcomp_data dataset' err_chunk = err_chunk + 1 endif endif if (name(i) .eq. 'Hucomp_data') then if (comp_typesd .ne. COMP_CODE_SKPHUFF) then print *, 'wrong compression type for Hucomp_data dataset' err_chunk = err_chunk + 1 endif if (comp_prm_out(1). ne. skphuff_skp_size) then print *, 'wrong compression parameter for Hucomp_data dataset' err_chunk = err_chunk + 1 endif endif if (name(i) .eq. 'Gzcomp_data') then if (comp_typesd .ne. COMP_CODE_DEFLATE) then print *, 'wrong compression type for Gzcomp_data dataset' endif if (comp_prm_out(1). ne. deflate_level) then print *, 'wrong compression parameter for Gzcomp_data dataset' err_chunk = err_chunk + 1 endif endif if (name(i) .eq. 'Nbcomp_data') then if (comp_typesd .ne. COMP_CODE_NBIT) then print *, 'wrong compression type for Nbcomp_data dataset' endif if ((comp_prm_out(1) .ne. nbit_sign_ext) .or. . (comp_prm_out(2) .ne. nbit_fill_one) .or. . (comp_prm_out(3) .ne. nbit_start_bit) .or. . (comp_prm_out(4) .ne. nbit_bit_len)) then print *, 'wrong compression parameter for Nbcomp_data dataset' err_chunk = err_chunk + 1 endif endif 201 continue C C Get and check chunking and compression information about each dataset C do 202 i = 1, N_COMP_TYPES C status = sfgichnk(sds_id(i),ch_dims_out,c_out) if( status .ne. 0 ) then print *, 'sfgichnk failed for', i, ' -th dataset' err_chunk = err_chunk + 1 endif if( c_out .ne. comp_type_out(i)) then print *, 'sfgichnk returned incorrect comptype info' err_chunk = err_chunk + 1 endif if ( (ch_dims(1) .ne. ch_dims_out(1)) .or. . (ch_dims(2) .ne. ch_dims_out(2)) ) then print *, 'sfgichnk returned incorrect chunk dimensions' err_chunk = err_chunk + 1 endif 202 continue C C Read part of the data back using sfrdata function C start(1) = n_start start(2) = m_start edges(1) = n_part edges(2) = m_part stride(1) = n_stride stride(2) = m_stride do 205 i = 1, N_COMP_TYPES C C Skip NBIT until we know how to read nbit data back C if (i .eq. 3) goto 205 status = sfrdata (sds_id(i), start, stride, edges, . part_data) if (status .ne. 0) then print *, 'sfrdata failed for reading part data for ', . i, '-th dataset' err_chunk = err_chunk + 1 endif C C Compare output with aqtual data C do 204 j = 1, m_part do 203 l = 1, n_part kl = n_start + 1 + (l-1)*n_stride kj = m_start + 1 + (j-1)*m_stride if (data(kl, kj) .ne. part_data(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_chunk = err_chunk +1 endif 203 continue 204 continue 205 continue C C Read chunks back and compare with the actual data for each compression C type C do 2000 i_comp = 1, N_COMP_TYPES C C Skip NBIT C if(i_comp. eq. 3) goto 2000 comp_type = i_comp - 1 do 250 j = 1, n_mc_a do 240 i = 1, n_nc_a start_dims(1) = i start_dims(2) = j status = sfrchnk(sds_id(i_comp), start_dims, chunk_out) if (status .ne. 0) then print *, 'sfrchnk failed for ', i, ',', j, . '-th chunk, compression type is ', comp_type err_chunk = err_chunk + 1 endif C C Compare with actual data C lb = mc kb = nc if (j .eq. n_mc_a .and. mod2 .ne. 0 ) lb = mod(m, mc) if (i .eq. n_nc_a .and. mod1 .ne. 0 ) kb = mod(n, nc) do 280 l = 1, lb do 270 k = 1, kb if(chunk_out(k,l) .ne. data ((i-1)*nc +k, (j-1)*mc +l)) . then print *, 'Data is incorrest' err_chunk = err_chunk + 1 endif 270 continue 280 continue 240 continue 250 continue C C Terminate access to SDS, shutdown interfaces and close the files C status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif status = sfend(sd_id(i_comp)) if( status .ne. 0 ) then print *, 'sfend failed for', i_comp, ' -th dataset' err_chunk = err_chunk + 1 endif 2000 continue return end subroutine test_char_chunk( err_char_chunk ) implicit none C C------- Begin Variables declarations ----------------------------------- C integer N_COMP_TYPES, N_COMP_ARG parameter (N_COMP_TYPES = 5, N_COMP_ARG = 4) integer sd_id(N_COMP_TYPES), . sds_id(N_COMP_TYPES), . sds_index(N_COMP_TYPES) integer RANK, comp_type, c_out integer comp_arg(N_COMP_ARG) integer comp_type_out(N_COMP_TYPES) integer d_dims(2) integer ch_dims(2),ch_dims_out(2), start_dims(2) integer start(2), stride(2), edges(2) integer status, fill_value integer maxcache, flags integer err_char_chunk integer n,m, n_part, m_part integer n_start, m_start, n_stride, m_stride integer nc, mc, n_nc, n_mc integer i, j, k, l, lb, kb, kl, kj integer i_comp integer mod1, mod2 character*13 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) C C SDS functions declarations C C integer sfstart, sfcreate, sfendacc, sfend, C . sfn2index, sfselect, C . sfsfill, sfschnk, sfscchnk, sfwcchnk, C . sfgichnk, sfrcchnk, sfwcdata, sfrcdata include 'mffunc.inc' C C Initial data declarations( change if you which to test larger arrays ) C C Data array dimensions n and m and RANK C parameter (n = 9, m = 4, RANK = 2) C C Part data dimensions n_part, m_part C parameter (n_part = 5, m_part = 2) C C Start coordinates of part_data C parameter (n_start = 2, m_start = 1) C C Stride in each dimension C parameter (n_stride = 1, m_stride = 1) C C Chunk dimensions nc and mc C parameter (nc = 3, mc = 2) C C Dimensions of "chunk matrix" n_nc and n_mc. C Note if n is multiple of nc or m is multiple C of mc we need smaller dimensions ( by one) parameter (n_nc = n/nc + 1, n_mc = m/mc + 1) C C Actual size of chunk matrix ( will be calculated latera ) C integer n_nc_a, n_mc_a C C Data declaration C character data(n,m), . chunk(nc,mc), . chunk_out(nc,mc), . chunk_data(nc,mc,n_nc,n_mc) C C Buffers to hold part of the data when we read data back C character part_data(n_part,m_part) C C HDF parameters initialization C C C Read/Write parameters C integer DFACC_CREATE, . DFACC_WRITE, . DFACC_READ parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) C C Data type parameters C C integer DATA_TYPE integer DFNT_CHAR, . DFNT_INT16, . DFNT_INT32, . DFNT_FLOAT32, . DFNT_FLOAT64 parameter (DFNT_CHAR = 4, . DFNT_INT16 = 22, . DFNT_INT32 = 24, . DFNT_FLOAT32 = 5, . DFNT_FLOAT64 = 6) C C Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_NBIT, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE parameter (COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_NBIT = 2, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) C C Compression arguments ( defined for clarity, actual values C will be passed to SFSCHUNK function via comp_arg parameter) C integer deflate_level, . skphuff_skp_size, . nbit_sign_ext, . nbit_fill_one, . nbit_start_bit, . nbit_bit_len parameter ( deflate_level = 6, . skphuff_skp_size = 2, . nbit_sign_ext = 0, . nbit_fill_one = 0, . nbit_start_bit = 6, . nbit_bit_len = 7 ) C C--------------------End of declarations------------------------------ C C C We will write to five different files corresponding to the C different compression types C C NO compression C file(1) = 'cchunk_no.hdf' name(1) = 'Nocomp_data' comp_type_out(1) = 0 C C RLE compression C file(2) = 'cchunk_rl.hdf' name(2) = 'Rlcomp_data' comp_type_out(2) = 1 C C Nbit compression C file(3) = 'cchunk_nb.hdf' name(3) = 'Nbcomp_data' comp_type_out(3) = 2 C C Adaptive Huffman compression C file(4) = 'cchunk_sk.hdf' name(4) = 'Hucomp_data' comp_type_out(4) = 1 C C Gzip compression C file(5) = 'cchunk_gz.hdf' name(5) = 'Gzcomp_data' comp_type_out(5) = 1 C C Dimension sizes array initialization C d_dims(1) = n d_dims(2) = m C C Chunk dimension sizes array initialization C ch_dims(1) = nc ch_dims(2) = mc C C Find actual size of chunk matrix C mod1 = mod (n,nc) mod2 = mod (m,mc) if (mod1 .eq. 0) n_nc_a = n_nc - 1 if (mod2 .eq. 0) n_mc_a = n_mc - 1 C C Initialize original array C do 20 j = 1, m do 10 i = 1, n data(i,j) = char(10*j + i) 10 continue 20 continue C C Initialize chunks C lb = mc kb = nc do 60 j = 1, n_mc_a do 50 i = 1, n_nc_a do 40 l = 1, lb do 30 k = 1, kb chunk_data(k,l,i,j) = char(32) 30 continue 40 continue 50 continue 60 continue C C Assign actual data to the chunks C do 100 j = 1, n_mc_a do 90 i = 1, n_nc_a if (j .eq. n_mc_a .and. mod2 .ne. 0 ) lb = mod(m, mc) if (i .eq. n_nc_a .and. mod1 .ne. 0 ) kb = mod(n, nc) do 80 l = 1, lb do 70 k = 1, kb chunk_data(k,l,i,j) = data ((i-1)*nc +k, (j-1)*mc +l) 70 continue 80 continue 90 continue 100 continue C C Initialize SD interfaces C do 101 i = 1, N_COMP_TYPES sd_id(i) = sfstart (file(i), DFACC_CREATE) 101 continue C C Main loop through different compression types C do 1000 i_comp = 1, N_COMP_TYPES C C Create the data set C sds_id(i_comp) = sfcreate(sd_id(i_comp), name(i_comp), . DFNT_CHAR, RANK, d_dims) if( sds_id(i_comp) .eq. -1 ) then print *, 'sfcreate failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif C C Fill the data set with fill_value C fill_value = 0 status = sfsfill (sds_id(i_comp), fill_value) if( status .ne. 0 ) then print *, 'sfsfill failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif C C Set compression type and compression arguments C comp_type = i_comp - 1 C C Initialize compression arguments array C do 1 i = 1, n_comp_arg comp_arg(i) = 0 1 continue if( comp_type .eq. COMP_CODE_NBIT) then comp_arg(1) = nbit_sign_ext comp_arg(2) = nbit_fill_one comp_arg(3) = nbit_start_bit comp_arg(4) = nbit_bit_len endif if( comp_type .eq. COMP_CODE_SKPHUFF ) then comp_arg(1) = skphuff_skp_size endif if (comp_type .eq. COMP_CODE_DEFLATE ) then comp_arg(1) = deflate_level endif C C Create chunked SDS C status = sfschnk (sds_id(i_comp), ch_dims, comp_type, . comp_arg) if( status .ne. 0 ) then print *, 'sfschnk failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif C C Set chunk cache to hold maximum of nc chunks C maxcache = n_nc_a flags = 0 status = sfscchnk (sds_id(i_comp), maxcache, flags) if( status .ne. maxcache ) then print *, 'sfscchnk failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif C C Write the data chunks. First chunk is written by sfwdata function C do 150 j = 1, n_mc_a do 140 i = 1, n_nc_a start_dims(1) = i start_dims(2) = j do 130 l = 1, mc do 120 k = 1, nc chunk(k,l) = chunk_data(k,l,i,j) 120 continue 130 continue if (i .eq. 1 .and. j .eq. 1) then start(1) = 0 start(2) = 0 stride(1) = 1 stride(2) = 1 edges(1) = nc edges(2) = mc status = sfwcdata(sds_id(i_comp), start, stride, . edges, chunk) if( status .ne. 0 ) then print *, 'sfwdata failed for', i_comp, ' -th dataset' print *, ' first chunk' err_char_chunk = err_char_chunk + 1 endif else status = sfwcchnk(sds_id(i_comp), start_dims, chunk) if( status .ne. 0 ) then print *, 'sfwcchnk failed for', i_comp, ' -th dataset' print *, i,'-th',j,'-th', 'chunk' err_char_chunk = err_char_chunk + 1 endif endif 140 continue 150 continue status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif status = sfend (sd_id(i_comp)) if( status .ne. 0 ) then print *, 'sfend failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif 1000 continue C C Let's check what we have written C We will skip NBIT until things are clarified with QAK. C C Open files and restart SD interfaces C do 200 i = 1, N_COMP_TYPES C sd_id(i) = sfstart (file(i), DFACC_READ) if( sd_id(i) .eq. -1 ) then print *, 'sfstart failed for', i, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif 200 continue C C Find written dataset in each file using its name and index C do 201 i = 1, N_COMP_TYPES C sds_index(i) = sfn2index (sd_id(i), name(i)) if( sds_index(i) .eq. -1 ) then print *, 'sfn2index failed for', i, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif sds_id(i) = sfselect (sd_id(i), sds_index(i)) if( sds_id(i) .eq. -1 ) then print *, 'sfselect failed for', i, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif 201 continue C C Get and check chunking and compression information about each dataset C do 202 i = 1, N_COMP_TYPES C status = sfgichnk(sds_id(i),ch_dims_out,c_out) if( status .ne. 0 ) then print *, 'sfgichnk failed for', i, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif if( c_out .ne. comp_type_out(i)) then print *, 'sfgichnk returned incorrect comptype info' err_char_chunk = err_char_chunk + 1 endif if ( (ch_dims(1) .ne. ch_dims_out(1)) .or. . (ch_dims(2) .ne. ch_dims_out(2)) ) then print *, 'sfgichnk returned incorrect chunk dimensions' err_char_chunk = err_char_chunk + 1 endif 202 continue C C Read part of the data back using sfrdata function C start(1) = n_start start(2) = m_start edges(1) = n_part edges(2) = m_part stride(1) = n_stride stride(2) = m_stride do 205 i = 1, N_COMP_TYPES C C Skip NBIT C if (i .eq. 3) goto 205 status = sfrcdata (sds_id(i), start, stride, edges, . part_data) if (status .ne. 0) then print *, 'sfrdata failed for reading part data for ', . i, '-th dataset' err_char_chunk = err_char_chunk + 1 endif C C Compare output with aqtual data C do 204 j = 1, m_part do 203 l = 1, n_part kl = n_start + 1 + (l-1)*n_stride kj = m_start + 1 + (j-1)*m_stride if (data(kl, kj) .ne. part_data(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_char_chunk = err_char_chunk +1 endif 203 continue 204 continue 205 continue C C Read chunks back and compare with the actual data for each compression C type C do 2000 i_comp = 1, N_COMP_TYPES C C Skip NBIT C if(i_comp .eq. 3) goto 2000 comp_type = i_comp - 1 do 250 j = 1, n_mc_a do 240 i = 1, n_nc_a start_dims(1) = i start_dims(2) = j status = sfrcchnk(sds_id(i_comp), start_dims, chunk_out) if (status .ne. 0) then print *, 'sfrcchnk failed for ', i, ',', j, . '-th chunk, compression type is ', comp_type err_char_chunk = err_char_chunk + 1 endif C C Compare with actual data C lb = mc kb = nc if (j .eq. n_mc_a .and. mod2 .ne. 0 ) lb = mod(m, mc) if (i .eq. n_nc_a .and. mod1 .ne. 0 ) kb = mod(n, nc) do 280 l = 1, lb do 270 k = 1, kb if(chunk_out(k,l) .ne. data ((i-1)*nc +k, (j-1)*mc +l)) . then print *, 'Data is incorrest' err_char_chunk = err_char_chunk + 1 endif 270 continue 280 continue 240 continue 250 continue C C Terminate access to SDS, shutdown interfaces and close the files C status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif status = sfend(sd_id(i_comp)) if( status .ne. 0 ) then print *, 'sfend failed for', i_comp, ' -th dataset' err_char_chunk = err_char_chunk + 1 endif 2000 continue return end subroutine test_compress( err_compress ) implicit none C C------- Begin Variables declarations ----------------------------------- C integer N_COMP_TYPES, N_COMP_ARG parameter (N_COMP_TYPES = 4, N_COMP_ARG = 1) integer sd_id(N_COMP_TYPES), . sds_id(N_COMP_TYPES), . sds_index(N_COMP_TYPES) integer RANK, comp_type, comp_type_out integer comp_arg(N_COMP_ARG), comp_prm_out(N_COMP_ARG) integer d_dims(2) integer start(2), stride(2), edges(2) integer status, fill_value integer err_compress character*12 file(N_COMP_TYPES) character*12 name(N_COMP_TYPES) integer n, m, n_part, m_part integer n_part_stride, m_part_stride integer n_part_start, m_part_start integer n_stride, m_stride integer n_start, m_start integer n_edges, m_edges integer i, j, l, kl, kj, i_comp C C SDS functions declarations C C integer sfstart, sfcreate, sfendacc, sfend, C . sfn2index, sfselect, C . sfsfill, sfrdata, C . sfwdata, sfscompress, sfgcompress include 'mffunc.inc' C C Initial data declarations( change if you which to test larger arrays ) C C Data array dimensions n and m and RANK C parameter (n = 9, m = 4, RANK = 2) C C Part data dimensions n_part, m_part C parameter (n_part = 5, m_part = 2) C C Stride and start coordinates of part_data C parameter (n_part_stride = 1, m_part_stride = 1) parameter (n_part_start = 2, m_part_start = 1) C C Start, stride and edges parameters in each dimension C parameter (n_start = 0, m_start = 0) parameter (n_stride = 1, m_stride = 1) parameter (n_edges = n, m_edges = m) C C Data declaration C integer*4 data(n,m) C C Buffer to hold part of the data when we read data back C integer*4 part_data(n_part,m_part) C C HDF parameters initialization C C C Read/Write parameters C integer DFACC_CREATE, . DFACC_WRITE, . DFACC_READ parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) C C Data type parameters C C integer DATA_TYPE integer DFNT_CHAR, . DFNT_INT16, . DFNT_INT32, . DFNT_FLOAT32, . DFNT_FLOAT64 parameter (DFNT_CHAR = 4, . DFNT_INT16 = 22, . DFNT_INT32 = 24, . DFNT_FLOAT32 = 5, . DFNT_FLOAT64 = 6) C C Compression parameters C integer COMP_CODE_NONE, . COMP_CODE_RLE, . COMP_CODE_SKPHUFF, . COMP_CODE_DEFLATE parameter (COMP_CODE_NONE = 0, . COMP_CODE_RLE = 1, . COMP_CODE_SKPHUFF = 3, . COMP_CODE_DEFLATE = 4) C C Compression arguments ( defined for clarity, actual values C will be passed to SFSCHUNK function via comp_arg parameter) C integer deflate_level, . skphuff_skp_size parameter ( deflate_level = 6, . skphuff_skp_size = 2 ) C C--------------------End of declarations------------------------------ C C C We will write to five different files corresponding to the C different compression types C C NO compression C file(1) = 'comp_no.hdf' name(1) = 'Nocomp_data' C C RLE compression C file(2) = 'comp_rl.hdf' name(2) = 'Rlcomp_data' C C Adaptive Huffman compression C file(3) = 'comp_sk.hdf' name(3) = 'Hucomp_data' C C Gzip compression C file(4) = 'comp_gz.hdf' name(4) = 'Gzcomp_data' C C Dimension sizes array initialization C d_dims(1) = n d_dims(2) = m C C Initialize original array C do 20 j = 1, m do 10 i = 1, n data(i,j) = 10*j + i 10 continue 20 continue C C Initialize SD interfaces C do 101 i = 1, N_COMP_TYPES sd_id(i) = sfstart (file(i), DFACC_CREATE) 101 continue C C Main loop through different compression types C do 1000 i_comp = 1, N_COMP_TYPES C C Create the data set C sds_id(i_comp) = sfcreate(sd_id(i_comp), name(i_comp), . DFNT_INT32, RANK, d_dims) if( sds_id(i_comp) .eq. -1 ) then print *, 'sfcreate failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif C C Fill the data set with fill_value C fill_value = 0 status = sfsfill (sds_id(i_comp), fill_value) if( status .ne. 0 ) then print *, 'sfsfill failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif C C Set compression type and compression arguments C C C Initialize compression arguments array C do 1 i = 1, n_comp_arg comp_arg(i) = 0 1 continue if( i_comp .eq. 1 ) then comp_type = COMP_CODE_ NONE endif if( i_comp .eq. 2 ) then comp_type = COMP_CODE_ RLE endif if( i_comp .eq. 3 ) then comp_type = COMP_CODE_SKPHUFF comp_arg(1) = skphuff_skp_size endif if( i_comp .eq. 4 ) then comp_type = COMP_CODE_DEFLATE comp_arg(1) = deflate_level endif status = sfscompress(sds_id(i_comp), comp_type, comp_arg) if( status .ne. 0 ) then print *, 'sfscompress failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif C C Write data to the file C start(1) = n_start start(2) = m_start stride(1) = n_stride stride(2) = m_stride edges(1) = n_edges edges(2) = m_edges status = sfwdata(sds_id(i_comp), start, stride, . edges, data) if( status .ne. 0 ) then print *, 'sfwdata failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif status = sfend (sd_id(i_comp)) if( status .ne. 0 ) then print *, 'sfend failed for', i_comp, ' -th dataset' err_compress = err_compress + 1 endif 1000 continue C C Let's check what we have written C C Open files and restart SD interfaces C do 2000 i = 1, N_COMP_TYPES C sd_id(i) = sfstart (file(i), DFACC_READ) if( sd_id(i) .eq. -1 ) then print *, 'sfstart failed for', i, ' -th dataset' err_compress = err_compress + 1 endif C C Find written dataset in each file using its name and index C sds_index(i) = sfn2index (sd_id(i), name(i)) if( sds_index(i) .eq. -1 ) then print *, 'sfn2index failed for', i, ' -th dataset' err_compress = err_compress + 1 endif sds_id(i) = sfselect (sd_id(i), sds_index(i)) if( sds_id(i) .eq. -1 ) then print *, 'sfselect failed for', i, ' -th dataset' err_compress = err_compress + 1 endif C C Find out type of compression used and compression parameters. C status = sfgcompress(sds_id(i), comp_type_out, comp_prm_out) if (status .eq. -1) then print *, 'sfgcompress failed for', i, ' -th dataset' err_compress = err_compress + 1 endif if (name(i) .eq. 'Nocomp_data') then if (comp_type_out .ne. COMP_CODE_NONE) then print *, 'wrong compression type for Nocomp_data dataset' err_compress = err_compress + 1 endif endif if (name(i) .eq. 'Rlcomp_data') then if (comp_type_out .ne. COMP_CODE_RLE) then print *, 'wrong compression type for Rlcomp_data dataset' err_compress = err_compress + 1 endif endif if (name(i) .eq. 'Hucomp_data') then if (comp_type_out .ne. COMP_CODE_SKPHUFF) then print *, 'wrong compression type for Hucomp_data dataset' err_compress = err_compress + 1 endif if (comp_prm_out(1). ne. skphuff_skp_size) then print *, 'wrong compression parameter for Hucomp_data dataset' err_compress = err_compress + 1 endif endif if (name(i) .eq. 'Gzcomp_data') then if (comp_type_out .ne. COMP_CODE_DEFLATE) then print *, 'wrong compression type for Gzcomp_data dataset' endif if (comp_prm_out(1). ne. deflate_level) then print *, 'wrong compression parameter for Gzcomp_data dataset' err_compress = err_compress + 1 endif endif C C Read part of the data back using sfrdata function C start(1) = n_part_start start(2) = m_part_start edges(1) = n_part edges(2) = m_part stride(1) = n_part_stride stride(2) = m_part_stride status = sfrdata (sds_id(i), start, stride, edges, . part_data) if (status .ne. 0) then print *, 'sfrdata failed for reading part data for ', . i, '-th dataset' err_compress = err_compress + 1 endif C C Compare output with aqtual data C do 204 j = 1, m_part do 203 l = 1, n_part kl = n_part_start + 1 + (l-1)*n_part_stride kj = m_part_start + 1 + (j-1)*m_part_stride if (data(kl, kj) .ne. part_data(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_compress = err_compress +1 endif 203 continue 204 continue C C Terminate access to SDS, shutdown interfaces and close the files C status = sfendacc(sds_id(i)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i, ' -th dataset' err_compress = err_compress + 1 endif status = sfend(sd_id(i)) if( status .ne. 0 ) then print *, 'sfend failed for', i, ' -th dataset' err_compress = err_compress + 1 endif 2000 continue return end hdf4-hdf4.3.1/mfhdf/fortran/hdftest1.f000066400000000000000000000314431503061704500174640ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C This is a test driver for new SD Fortran functions C program test_new_functions implicit none integer err1, err2 err1=0 err2=0 call test_file(err1) if (err1 .ne. 0) then print*, 'test_file failed with ', err1, ' errors' endif if (err1 .eq. 0) then print*, 'test_file.................. PASSED' endif call test_vars(err2) if (err2 .ne. 0) then print*, 'test_vars failed with ', err2, ' errors' endif if (err2 .eq. 0) then print*, 'test_vars.................. PASSED' print*,' ' endif end C============================================================= C C This new subroutine tests the following SD Fortran functions C sfgetname C sfgetnamelen C sfgmaxopenf C sfgnumopenf C sfrmaxopenf C C============================================================= subroutine test_file(err) implicit none include 'mffunc.inc' integer DFACC_CREATE parameter (DFACC_CREATE = 4) integer err,status integer sd_id character*20 file character*20 file_out integer flen integer curr_max, sys_limit integer NUM_FILES_LOW parameter (NUM_FILES_LOW=35) integer fids(NUM_FILES_LOW) integer H4_MAX_NC_OPEN parameter (H4_MAX_NC_OPEN=32) integer flen_out character*2 ichr2 integer i, curr_opened C--------------------End of declarations------------------------------ file = 'test_file.hdf' C Get the current max and system limit status = sfgmaxopenf(curr_max, sys_limit) if( status .ne. 0 ) then print*,'sfgmaxopenf failed' err = err + 1 endif if(curr_max .ne. H4_MAX_NC_OPEN)THEN print*,'sfgmaxopenf failed: Incorrect max number of open files' err = err + 1 endif C Reset current max to an arbitrary number and check curr_max = sfrmaxopenf(40) if( status .ne. 0 ) then print*,'sfrmaxopenf failed' err = err + 1 endif if( curr_max .ne. 40 ) then print*,'sfrmaxopenf failed: Current max number of open files' err = err + 1 endif C Try to create more files than the default max (currently, 32) and C all should succeed do i = 1, NUM_FILES_LOW write(ichr2,'(I2.2)') i fids(i) = sfstart ('test_file'//ichr2//'.hdf', DFACC_CREATE) if( fids(i) .le. 0 ) then print*, 'sfstart failed' err = err + 1 endif enddo C verify that NUM_FILES_LOW files are opened status = sfgnumopenf(curr_opened) if( curr_opened .ne. NUM_FILES_LOW ) then print*, 'sfgnumopenf failed: Incorrect number of open files' err = err + 1 endif C Close all the files do i = 1, NUM_FILES_LOW status = sfend(fids(i)) if( status .ne. 0 ) then print*, 'sfend failed' err = err + 1 endif enddo C C Initialize SD interfaces C sd_id = sfstart (file, DFACC_CREATE) if( sd_id .le. 0 ) then print*, 'sfstart failed' err = err + 1 goto 1000 endif status = sfgetnamelen(sd_id, flen) if( status .ne. 0 .or. flen .ne. 13) then print*, 'sfgetnamelen failed' err = err + 1 endif flen_out = sfgetfname(sd_id, file_out) if( flen_out .ne. 13 ) then print*, 'sfgetfname failed: wrong length' err = err + 1 endif if( file_out(1:13) .ne. file(1:13) ) then print*, 'sfgetfname failed: wrong name' err = err + 1 endif status = sfend(sd_id) if( status .ne. 0 ) then print*, 'sfend failed' err = err + 1 endif 1000 return end C============================================================= C This new subroutine tests the following SD Fortran functions C sfidtype C sfgnvars_byname C sfn2indices C C============================================================= subroutine test_vars(err) implicit none include 'mffunc.inc' integer dset1, dset2, dim_id integer err,status integer sd_id, id_type character*12 file integer DFACC_CREATE parameter (DFACC_CREATE = 4) integer DFACC_READ parameter (DFACC_READ = 1) integer RANK parameter (RANK=2) integer X_LENGTH,Y_LENGTH parameter (X_LENGTH=5) parameter (Y_LENGTH=5) integer dimsize(RANK) character*9 VAR1_NAME integer var_list(3), type_list(3) character*21 ATTR1_NAME character*15 ATTR2_NAME character*19 ATTR1_VAL character*23 ATTR2_VAL integer ATTR1_LEN integer ATTR2_LEN real sds1_data(X_LENGTH,Y_LENGTH) integer start(2) integer stride(2) C C Data type parameters C C integer DFNT_CHAR, . DFNT_INT16, . DFNT_INT32, . DFNT_FLOAT32, . DFNT_FLOAT64 parameter (DFNT_CHAR = 4, . DFNT_INT16 = 22, . DFNT_INT32 = 24, . DFNT_FLOAT32 = 5, . DFNT_FLOAT64 = 6) integer i,j integer n_vars C--------------------End of declarations------------------------------ file = 'test_var.hdf' VAR1_NAME = "DataSet_1" ATTR1_NAME = "Attribute Dimension 1" ATTR2_NAME = "Attribute SDS 1" ATTR1_VAL = "This is a coord var" ATTR2_VAL = "This is not a coord var" ATTR1_LEN = 21 ATTR2_LEN = 15 start(1) = 0 start(2) = 0 stride(1) = 1 stride(2) = 1 do i = 1, X_LENGTH do j = 1, Y_LENGTH sds1_data(j,i) = j*i enddo enddo C C Initialize SD interfaces C sd_id = sfstart (file, DFACC_CREATE) if( sd_id .le. 0 ) then print*, 'sfstart failed' err = err + 1 goto 1000 endif C Create an X_LENGTH by Y_LENGTH dataset, called DataSet_1 dimsize(1) = X_LENGTH dimsize(2) = Y_LENGTH dset1 = sfcreate(sd_id,VAR1_NAME,DFNT_FLOAT64,RANK,dimsize) if(dset1.eq.-1) then print*, 'sfcreate returned bad ID', dset1 err = err + 1 endif C Set the dimension name to be the same as its dataset. dim_id = sfdimid(dset1, 0) if(dim_id.eq.-1)then print*,'sfgetdimid returned error code', status err = err + 1 endif status = sfsdmname(dim_id, VAR1_NAME) if(status.eq.-1)then print*,'sfsdmname returned error code', status err = err + 1 endif C Set an attribute to dimension VAR1_NAME. status=sfsnatt(dim_id,ATTR1_NAME,DFNT_CHAR,ATTR1_LEN,ATTR1_VAL) if(status.eq.-1)then print*,'sfsnatt returned error code', status err = err + 1 endif C Set an attribute to dataset VAR1_NAME. status=sfsnatt(sd_id,ATTR2_NAME,DFNT_CHAR,ATTR2_LEN,ATTR2_VAL) if(status.eq.-1)then print*,'sfsnatt returned error code', status err = err + 1 endif C Create another X_LENGTH by Y_LENGTH dataset, called DataSet_2 dset2 = sfcreate(sd_id,VAR1_NAME,DFNT_FLOAT64,RANK,dimsize) if(dset2.eq.-1) then print*, 'sfcreate returned bad ID', dset2 err = err + 1 endif C Test SDidtype on the second dataset */ status = sfidtype(dset2,id_type) if(status.eq.-1)then print*, 'sfidtype returned error code', status err = err + 1 else if(id_type.ne.1) then print*, 'sfidtype returned bad object type', id_type err = err + 1 endif C Write data to the SDS status = sfwdata(dset1, start, stride, dimsize, sds1_data) if( status .ne. 0 ) then print*, 'sfwdata failed for', 1, ' -th dataset' err = err + 1 endif C Close the datasets status = sfendacc(dset1) if(status.eq.-1)then print*, 'sfendacc returned error code', status err = err + 1 end if status = sfendacc(dset2) if(status.eq.-1)then print*, 'sfendacc returned error code', status err = err + 1 end if C Close the file status = sfend(sd_id) if( status .ne. 0 ) then print*, 'sfend failed ', status err = err + 1 endif C Re-open the file to test SDidtype more */ sd_id = sfstart (file, DFACC_READ) if( sd_id .le. 0 ) then print*, 'sfstart failed' err = err + 1 goto 1000 endif C Check variable type and attributes of each element in the file C Get the number of variables of name VAR1_NAME status = sfgnvars_byname(sd_id, VAR1_NAME, n_vars) if( status .eq. -1)then print*, 'sfgnvars_byname failed' err = err + 1 endif if(n_vars.eq. 1)then C Get index of dataset VAR1_NAME status = sfn2index(sd_id, VAR1_NAME) if( status .lt. 0)then print*, 'sfn2index failed' err = err + 1 endif else C Get the list of all variables of named VAR1_NAME status=sfn2indices(sd_id,VAR1_NAME,var_list,type_list, + n_vars) if( status .lt. 0)then print*, 'sfn2indices failed' err = err + 1 endif C In this case, the first and third variable is a dataset do i = 1, n_vars if (type_list(i) .eq. 0)then if( var_list(i) .ne. i-1)then print*, 'sfn2indices failed in indices' err = err + 1 endif endif enddo endif C Test SDidtype on the SD id status = sfidtype(sd_id,id_type) if(status.eq.-1)then print*, 'sfidtype returned error code', status err = err + 1 else if(id_type.ne.0) then print*, 'sfidtype returned bad object type', id_type err = err + 1 endif C Get access to the first dataset and test SDidtype on the SDS id dset1 = sfselect(sd_id, 0); if( dset1 .eq. -1 ) then print*, 'sfselect failed for', 0, ' -th dataset' err = err + 1 endif status = sfidtype(dset1,id_type) if(status.eq.-1)then print*, 'sfidtype returned error code', status err = err + 1 else if(id_type.ne.1) then print*, 'sfidtype returned bad object type', id_type err = err + 1 endif C Get access to the second dataset and test SDidtype on the SDS id dset2 = sfselect(sd_id, 1); if( dset2 .eq. -1 ) then print*, 'sfselect failed for', 1, ' -th dataset' err = err + 1 endif status = sfidtype(dset2,id_type) if(status.eq.-1)then print*,'sfidtype returned error code', status err = err + 1 else if(id_type.ne.1) then print*,'sfidtype returned bad object type', id_type err = err + 1 endif C Get dimension handle for first dimension of DataSet_1 and test C SDidtype on the dimension id dim_id = sfdimid(dset1, 0) if(dim_id.eq.-1)then print*,'sfgetdimid returned error code', status err = err + 1 endif status = sfidtype(dim_id,id_type) if(status.eq.-1)then print*,'sfidtype returned error code', status err = err + 1 else if(id_type.ne.2) then print*,'sfidtype returned bad object type', id_type err = err + 1 endif C Close the datasets status = sfendacc(dset1) if(status.eq.-1)then print*, 'sfendacc returned error code', status err = err + 1 end if status = sfendacc(dset2) if(status.eq.-1)then print*, 'sfendacc returned error code', status err = err + 1 end if C Close the file status = sfend(sd_id) if( status .ne. 0 ) then print*, 'sfend failed' err = err + 1 endif 1000 return end hdf4-hdf4.3.1/mfhdf/fortran/hdftst.sav000066400000000000000000000013041503061704500175730ustar00rootroot00000000000000 name = Alpha name = TestDim name = Globulator label = lxxx unit = uyyy format = fzzz coordsys = caaa label = dA unit = dBB format = dCCC values = Howdy Sailor Total errors : 0 hdf4-hdf4.3.1/mfhdf/fortran/jackets.c.in000066400000000000000000001470121503061704500177700ustar00rootroot00000000000000/* * Copyright 1990, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. */ /* * OVERVIEW * * This file contains jacket routines written in C for interfacing Fortran * netCDF function calls to the actual C binding for the NetCDF. This code * is written explicitly for Sun. In general, these functions handle * character-string parameter conventions, convert between * column-major-order arrays and row-major-order arrays, and map between * array indices beginning at one and array indices beginning at zero. * */ #include #include #include #include #include "nc_priv.h" #if !NC_OLD_FILLVALUES struct ncfils { /* This will be a common block from Fortran */ double dd; #ifdef H4_HAVE_LP64 int ll; #else long ll; #endif float ff; short ss; char cc; char bb; } ncfils_ = { FILL_DOUBLE, FILL_LONG, FILL_FLOAT, FILL_SHORT, FILL_CHAR, FILL_BYTE }; #else /* NC_OLD_FILLVALUES below */ /* * This section is provided for backward compatibility only. Using * XDR infinities for floating-point fill values has caused more problems * than it has solved. We encourage you to define your own data-specific * fill values rather than use default ones. * If, however, you *must* use default fill values, then you should use * the above fill values rather than the ones in this section. */ struct ncfils { /* This will be a common block from Fortran */ double dd; #ifdef H4_HAVE_LP64 int ll; #else long ll; #endif float ff; short ss; char cc; char bb; } ncfils_ = { XDR_D_INFINITY, /* You may have to insert a constant here */ FILL_LONG, XDR_F_INFINITY, /* You may have to insert a constant here */ FILL_SHORT, FILL_CHAR, FILL_BYTE }; #endif /* NC_OLD_FILLVALUES above */ /* blank fill C string to make FORTRAN string */ static void fcdcpy (fstring, fslen, sstring) char *fstring; /* output string to be blank-filled */ int fslen; /* length of output string */ char *sstring; /* input string, null-terminated */ { int i, len = strlen(sstring); for (i = 0; i < len; i++) *(fstring + i) = *(sstring + i); for (i = len; i < fslen; i++) *(fstring + i) = ' '; } static void reverse (array, length) int array[]; /* array to be reversed */ int length; /* length of array */ { int temp, i, j; for (i = 0, j = length - 1; i < j; i++, j--) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } static void revlongs (array, length) long array[]; /* array to be reversed */ int length; /* length of array */ { int i, j; long temp; for (i = 0, j = length - 1; i < j; i++, j--) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } /* error handling function */ static void handle_err (pname, rcode) char *pname; /* procedure name */ int rcode; /* error return */ { cdf_routine_name = pname; NCadvise(rcode, "string won't fit in CHARACTER variable provided"); } /* copy function used to copy strings with embedded blanks */ static void fstrncpy (target, source, maxlen) char *target; /* space to be copied into */ char *source; /* string to be copied */ int maxlen; /* maximum length of *source */ { while (maxlen-- && *source != '\0') *target++ = *source++; *target = '\0'; } #ifdef WE_COULDNT_READ_NAMES_WITH_SPACES /* copy function used to copy strings terminated with blanks */ static void nstrncpy (target, source, maxlen) char *target; /* space to be copied into */ char *source; /* string to be copied */ int maxlen; /* maximum length of *source */ { while (maxlen-- && *source != ' ') *target++ = *source++; *target = '\0'; } #endif /* copy function used to copy strings with embedded blanks and terminated with blanks */ static void nstrncpy (target, source, maxlen) char *target; /* space to be copied into */ char *source; /* string to be copied */ int maxlen; /* maximum length of *source */ { /* Copy all string */ while (maxlen--) *target++ = *source++; *target -- = '\0'; /* Disregard all trailing spaces */ while (*target == ' ') *target-- = '\0'; } /* * Compute product of dimensions. */ static long dimprod (dims, ndims) long *dims; /* list of dimensions */ int ndims; /* number of dimensions in list */ { long *ip; long prod = 1; for (ip = dims; ip < &dims[ndims]; ip++) prod *= *ip; return prod; } #ifdef FORTRAN_HAS_NO_BYTE /* * Convert multi-dimensional array of bytes stored in ints to packed array of * bytes, in malloc'ed space. Returns pointer to bytes or NULL if malloc * failed. */ static char * itob(ints, dims, ndims) int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); /* product of dimensions */ char *bytes = (char *) malloc (iocount * sizeof (char)); int *ip; char *bp = bytes; if (bytes != NULL) for (ip = ints; iocount > 0; iocount--) *bp++ = (char) *ip++; return bytes; } /* * Convert a generalized multi-dimensional array of bytes stored in ints to * packed array of bytes, in malloc'ed space. Returns pointer to bytes or * NULL if malloc failed. */ static char * itobg(ints, dims, basis, ndims) int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *basis; /* memory access basis vector */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); /* product of dimensions */ char *bytes = (char *) malloc (iocount * sizeof (char)); if (bytes != NULL && iocount > 0) { int idim; char *bp = bytes; char *ip = (char*)ints; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*basis[idim]; coords[idim] = 0; } for (;;) { *bp++ = (char)*(int*)ip; idim = ndims - 1; carry: ip += basis[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } return bytes; } /* * Convert a packed array of bytes into a generalized multi-dimensional array * of ints. */ static void btoig(bytes, ints, dims, basis, ndims) char *bytes; /* packed array of bytes */ int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *basis; /* memory access basis vector */ int ndims; /* number of dimensions in list */ { if (dimprod (dims, ndims) > 0) { int idim; char *bp = bytes; char *ip = (char*)ints; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*basis[idim]; coords[idim] = 0; } for (;;) { *(int*)ip = *bp++; idim = ndims - 1; carry: ip += basis[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } } #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT /* * Convert multi-dimensional array of shorts stored in ints to packed array of * shorts, in malloc'ed space. Returns pointer to shorts or NULL if malloc * failed. */ static short * itos(ints, dims, ndims) int *ints; /* multi-dimensional array of ints */ long *dims; /* list of dimensions */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); /* product of dimensions */ short *shorts = (short *) malloc (iocount * sizeof (short)); int *ip; short *sp = shorts; if (shorts != NULL) for (ip = ints; iocount > 0; iocount--) *sp++ = (short) *ip++; return shorts; } /* * Convert a generalized multi-dimensional array of shorts stored in ints to * packed array of shorts, in malloc'ed space. Returns pointer to shorts or * NULL if malloc failed. */ static short * itosg(ints, dims, basis, ndims) int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *basis; /* memory access basis vector */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); /* product of dimensions */ short *shorts = (short *) malloc (iocount * sizeof (short)); if (shorts != NULL && iocount > 0) { int idim; char *ip = (char*)ints; short *sp = shorts; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*basis[idim]; coords[idim] = 0; } for (;;) { *sp++ = (short)*(int*)ip; idim = ndims - 1; carry: ip += basis[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } return shorts; } /* * Convert a packed array of shorts into a generalized multi-dimensional array * of ints. */ static void stoig(shorts, ints, dims, basis, ndims) short *shorts; /* packed array of shorts */ int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *basis; /* memory access basis vector */ int ndims; /* number of dimensions in list */ { if (dimprod (dims, ndims) > 0) { int idim; short *sp = shorts; char *ip = (char*)ints; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*basis[idim]; coords[idim] = 0; } for (;;) { *(int*)ip = *sp++; idim = ndims - 1; carry: ip += basis[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } } #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 /* * Convert multi-dimensional array of NCLONGs stored in ints to packed * array of longs, in malloc'ed space. Returns pointer to longs or NULL * if malloc failed. */ static long * itol(ints, dims, ndims) int *ints; /* multi-dimensional array of ints */ long *dims; /* list of dimensions */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); long *longs = (long *) malloc (iocount * sizeof (long)); int *ip; long *lp = longs; if (longs != NULL) for (ip = ints; iocount > 0; iocount--) *lp++ = (long) *ip++; return longs; } /* * Convert a generalized multi-dimensional array of longs stored in ints to * packed array of longs, in malloc'ed space. Returns pointer to longs or * NULL if malloc failed. */ static long * itolg(ints, dims, imap, ndims) int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *imap; /* memory access index mapping vector */ int ndims; /* number of dimensions in list */ { long iocount = dimprod (dims, ndims); long *longs = (long *) malloc (iocount * sizeof (long)); if (longs != NULL && iocount > 0) { int idim; char *ip = (char*)ints; long *lp = longs; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*imap[idim]; coords[idim] = 0; } for (;;) { *lp++ = (long)*(int*)ip; idim = ndims - 1; carry: ip += imap[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } return longs; } /* * Convert a packed array of longs into a generalized multi-dimensional array * of ints. */ static void ltoig(longs, ints, dims, imap, ndims) long *longs; /* packed array of longs */ int *ints; /* multi-dimensional array of integers */ long *dims; /* list of dimensions */ long *imap; /* memory access index mapping vector */ int ndims; /* number of dimensions in list */ { if (dimprod (dims, ndims) > 0) { int idim; long *lp = longs; char *ip = (char*)ints; long length[MAX_NC_DIMS]; long coords[MAX_NC_DIMS]; for (idim = 0; idim < ndims; ++idim) { length[idim] = dims[idim]*imap[idim]; coords[idim] = 0; } for (;;) { *(int*)ip = *lp++; idim = ndims - 1; carry: ip += imap[idim]; if (++coords[idim] >= dims[idim]) { coords[idim] = 0; ip -= length[idim]; if (--idim < 0) break; goto carry; } } } } #endif /* Alpha platform above */ /* ------------ Linux FORTRAN jackets for netCDF Functions ------------ */ /* used to set the C global variable ncopts from Fortran */ void nncpopt(val) int *val; { ncopts = *val; } /* used to get the C global variable ncopts from Fortran */ void nncgopt(val) int *val; { *val = ncopts; } /* * creates a new netCDF file, returning a netCDF ID. New netCDF * file is placed in define mode. */ int nnccre(pathname, clobmode, rcode, pathnamelen) char *pathname; int pathnamelen; int *clobmode; int *rcode; { char name[MAX_NC_NAME + 1]; int cdfid; nstrncpy (name, pathname, pathnamelen); if ((cdfid = nccreate (name, *clobmode)) != -1) { *rcode = 0; return (cdfid); } *rcode = ncerr; return (-1); } /* opens an existing netCDF file for access */ int nncopn(pathname, rwmode, rcode, pathnamelen) char *pathname; int pathnamelen; int *rwmode; int *rcode; { char name[MAX_NC_NAME + 1]; int cdfid; nstrncpy (name, pathname, pathnamelen); if ((cdfid = ncopen (name, *rwmode)) != -1) { *rcode = 0; return (cdfid); } *rcode = ncerr; return (-1); } /* adds a new dimension to an open netCDF file in define mode */ int nncddef(cdfid, dimname, dimlen, rcode, dimnamelen) int *cdfid; char *dimname; int dimnamelen; int *dimlen; int *rcode; { char name[MAX_NC_NAME + 1]; int dimid; nstrncpy (name, dimname, dimnamelen); if ((dimid = ncdimdef (*cdfid, name, (long)*dimlen)) != -1) { *rcode = 0; return (dimid + 1); } *rcode = ncerr; return (-1); } /* * returns the ID of a netCDF dimension, given the name of the * dimension */ int nncdid(cdfid, dimname, rcode, dimnamelen) int *cdfid; char *dimname; int dimnamelen; int *rcode; { char name[MAX_NC_NAME + 1]; int dimid; nstrncpy (name, dimname, dimnamelen); if ((dimid = ncdimid (*cdfid, name)) != -1) { *rcode = 0; return (dimid + 1); } *rcode = ncerr; return (-1); } /* adds a new variable to an open netCDF file in define mode */ int nncvdef(cdfid, varname, datatype, ndims, dimarray, rcode, varnamelen) int *cdfid; char *varname; int varnamelen; int *datatype; int *ndims; int *dimarray; int *rcode; { int varid, i, dimid[MAX_VAR_DIMS]; char name[MAX_NC_NAME + 1]; nstrncpy (name, varname, varnamelen); for (i = 0; i < *ndims; i++) dimid[i] = dimarray[i] - 1; reverse (dimid, *ndims); if ((varid = ncvardef (*cdfid, name, (nc_type) *datatype, *ndims, dimid)) != -1) { *rcode = 0; return (varid + 1); } *rcode = ncerr; return (-1); } /* returns the ID of a netCDF variable given its name */ int nncvid(cdfid, varname, rcode, varnamelen) int *cdfid; char *varname; int varnamelen; int *rcode; { int varid; char name[MAX_NC_NAME + 1]; nstrncpy (name, varname, varnamelen); if ((varid = ncvarid (*cdfid, name)) != -1) { *rcode = 0; return (varid + 1); } *rcode = ncerr; return (-1); } /* returns number of bytes per netCDF data type */ int nnctlen(datatype, rcode) int *datatype; int *rcode; { int itype; if ((itype = nctypelen ((nc_type) *datatype)) != -1) { *rcode = 0; return (itype); } *rcode = ncerr; return (-1); } /* closes an open netCDF file */ void nncclos(cdfid, rcode) int *cdfid; int *rcode; { *rcode = 0; if (ncclose (*cdfid) == -1) *rcode = ncerr; } /* puts an open netCDF into define mode */ void nncredf(cdfid, rcode) int *cdfid; int *rcode; { *rcode = 0; if (ncredef (*cdfid) == -1) *rcode = ncerr; } /* takes an open netCDF out of define mode */ void nncendf(cdfid, rcode) int *cdfid; int *rcode; { *rcode = 0; if (ncendef (*cdfid) == -1) *rcode = ncerr; } /* returns information about an open netCDF file given its netCDF ID */ void nncinq(cdfid, ndims, nvars, natts, recdim, rcode) int *cdfid; int *ndims; int *nvars; int *natts; int *recdim; int *rcode; { *rcode = 0; if (ncinquire (*cdfid, ndims, nvars, natts, recdim) == -1) { *rcode = ncerr; return; } if (*recdim != -1) (*recdim)++; } /* * makes sure that the disk copy of a netCDF file open for writing * is current */ void nncsnc(cdfid, rcode) int *cdfid; int *rcode; { *rcode = 0; if (ncsync (*cdfid) == -1) *rcode = ncerr; } /* * restores the netCDF to a known consistent state in case anything * goes wrong during the definition of new dimensions, variables * or attributes */ void nncabor(cdfid, rcode) int *cdfid; int *rcode; { *rcode = 0; if (ncabort (*cdfid) == -1) *rcode = ncerr; } /* returns the name and size of a dimension, given its ID */ void nncdinq(cdfid, dimid, dimname, size, rcode, dimnamelen) int *cdfid; int *dimid; char *dimname; int dimnamelen; int *size; int *rcode; { long siz; char name[MAX_NC_NAME + 1]; *rcode = 0; if (ncdiminq (*cdfid, *dimid - 1, name, &siz) == -1) { *rcode = ncerr; return; } *size = siz; if (strlen (name) > dimnamelen) { *rcode = NC_ESTS; handle_err ("NCDINQ", *rcode); return; } /* blank fill the input character string */ fcdcpy (dimname, dimnamelen, name); } /* renames an existing dimension in a netCDF open for writing */ void nncdren(cdfid, dimid, dimname, rcode, dimnamelen) int *cdfid; int *dimid; char *dimname; int dimnamelen; int *rcode; { char name[MAX_NC_NAME + 1]; nstrncpy (name, dimname, dimnamelen); *rcode = 0; if (ncdimrename (*cdfid, *dimid - 1, name) == -1) *rcode = ncerr; } /* returns information about a netCDF variable, given its ID */ void nncvinq(cdfid, varid, varname, datatype, ndims, dimarray, natts, rcode, varnamelen) int *cdfid; int *varid; char *varname; int varnamelen; int *datatype; int *ndims; int *dimarray; int *natts; int *rcode; { char name[MAX_NC_NAME + 1]; int dimid[MAX_VAR_DIMS], i; *rcode = 0; if (ncvarinq (*cdfid, *varid - 1, name, (nc_type *) datatype, ndims, dimid, natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < *ndims; i++) dimarray[i] = dimid[i] + 1; reverse (dimarray, *ndims); if (strlen (name) > varnamelen) { *rcode = NC_ESTS; handle_err ("NCVINQ", *rcode); return; } fcdcpy (varname, varnamelen, name); } /* puts a single numeric data value into a variable of an open netCDF */ void nncvpt1(cdfid, varid, indices, value, rcode) int *cdfid; int *varid; int *indices; void *value; int *rcode; { int datatype, ndims, natts, i; long nindices[MAX_VAR_DIMS]; int dimid[MAX_VAR_DIMS]; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimid, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) nindices[i] = indices[i] - 1; revlongs (nindices, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { /* pack ints into bytes */ char bytes = *(int *) value; if (ncvarput1(*cdfid, *varid - 1, nindices, (ncvoid *) &bytes) == -1) { *rcode = ncerr; } return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { /* pack ints into shorts */ short shorts = *(int *)value; if (ncvarput1(*cdfid, *varid - 1, nindices, (ncvoid *) &shorts) == -1) { *rcode = ncerr; } return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long longs = *(int *)value; if (ncvarput1(*cdfid, *varid - 1, nindices, (ncvoid *) &longs) == -1) { *rcode = ncerr; } return; } /* else */ #endif if (ncvarput1 (*cdfid, *varid - 1, nindices, value) == -1) { *rcode = ncerr; } } /* puts a single character into an open netCDF file */ void nncvp1c(cdfid, varid, indices, chval, rcode, chvallen) int *cdfid; int *varid; int *indices; char *chval; int chvallen; int *rcode; { int datatype, ndims, natts, i; long nindices[MAX_VAR_DIMS]; int dimid[MAX_VAR_DIMS]; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimid, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) nindices[i] = indices[i] - 1; revlongs (nindices, ndims); *rcode = 0; if (ncvarput1 (*cdfid, *varid - 1, nindices, (ncvoid *) chval) == -1) { *rcode = ncerr; } } /* * writes a hypercube of numeric values into a netCDF variable of an open * netCDF file */ void nncvpt(cdfid, varid, start, count, value, rcode) int *cdfid; int *varid; int *start; int *count; void *value; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS], i; int ndims, datatype, dimarray[MAX_VAR_DIMS], natts; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; } revlongs (ncount, ndims); revlongs (nstart, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { /* pack ints into bytes */ char *bytes = itob (value, ncount, ndims); if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncvarput (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) bytes) == -1) { *rcode = ncerr; } free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { /* pack ints into shorts */ short *shorts = itos (value, ncount, ndims); if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncvarput (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) shorts) == -1) { *rcode = ncerr; } free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long *longs = itol (value, ncount, ndims); if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncvarput (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) longs) == -1) { *rcode = ncerr; } free (longs); return; } /* else */ #endif if (ncvarput (*cdfid, *varid - 1, nstart, ncount, value) == -1) { *rcode = ncerr; } } /* writes a hypercube of character values into an open netCDF file */ void nncvptc(cdfid, varid, start, count, string, lenstr, rcode, stringlen) int *cdfid; int *varid; int *start; int *count; char *string; int stringlen; int *lenstr; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS], i; int ndims, datatype, dimarray[MAX_VAR_DIMS], natts; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; } revlongs (ncount, ndims); revlongs (nstart, ndims); if (dimprod(ncount,ndims) > *lenstr) { *rcode = NC_ESTS; handle_err ("NCVPTC", *rcode); return; } *rcode = 0; if (ncvarput (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) string) == -1) { *rcode = ncerr; } } /* * writes a generalized hypercube of numeric values into a netCDF variable of * an open netCDF file */ void nncvptg(cdfid, varid, start, count, stride, basis, value, rcode) int *cdfid; int *varid; int *start; int *count; int *stride; int *basis; void *value; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS], i; long nstride[MAX_VAR_DIMS], nbasis[MAX_VAR_DIMS]; long tmpbasis; int ndims, datatype, dimarray[MAX_VAR_DIMS], natts; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } #ifdef FORTRAN_HAS_NO_BYTE if (datatype == NC_CHAR || datatype == NC_BYTE) tmpbasis = nctypelen(NC_LONG); else #endif #ifdef FORTRAN_HAS_NO_SHORT if (datatype == NC_SHORT) tmpbasis = nctypelen(NC_LONG); else #endif #ifdef H4_HAVE_LP64 if (datatype == NC_LONG) tmpbasis = sizeof(int); else #endif tmpbasis = nctypelen(datatype); for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; nstride[i] = stride[0] == 0 ? 1 : stride[i]; nbasis[i] = basis[0] == 0 ? tmpbasis : basis[i]; tmpbasis *= count[i]; } revlongs (ncount, ndims); revlongs (nstart, ndims); revlongs (nstride, ndims); revlongs (nbasis, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { /* pack ints into bytes */ /* * Release 2.3.1 had a bug in the following line: it used count * rather than ncount. */ char *bytes = itobg (value, ncount, nbasis, ndims); if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncvarputg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) bytes) == -1) { *rcode = ncerr; } free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { /* pack ints into shorts */ /* * Release 2.3.1 had a bug in the following line: it used count * rather than ncount. */ short *shorts = itosg (value, ncount, nbasis, ndims); if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncvarputg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) shorts) == -1) { *rcode = ncerr; } free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long *longs = itolg (value, ncount, nbasis, ndims); if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncvarputg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) longs) == -1) { *rcode = ncerr; } free (longs); return; } /* else */ #endif if (ncvarputg (*cdfid, *varid - 1, nstart, ncount, nstride, nbasis, value) == -1) { *rcode = ncerr; } } /* * writes a generalized hypercube of character values into a netCDF variable of * an open netCDF file */ void nncvpgc(cdfid, varid, start, count, stride, basis, string, rcode, stringlen) int *cdfid; int *varid; int *start; int *count; int *stride; int *basis; char *string; int stringlen; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS], i; long nstride[MAX_VAR_DIMS], nbasis[MAX_VAR_DIMS]; long tmpbasis; int ndims, datatype, dimarray[MAX_VAR_DIMS], natts; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } tmpbasis = nctypelen(datatype); for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; nstride[i] = stride[0] == 0 ? 1 : stride[i]; nbasis[i] = basis[0] == 0 ? tmpbasis : basis[i]; tmpbasis *= count[i]; } revlongs (ncount, ndims); revlongs (nstart, ndims); revlongs (nstride, ndims); revlongs (nbasis, ndims); *rcode = 0; if (ncvarputg (*cdfid, *varid - 1, nstart, ncount, nstride, nbasis, (ncvoid*)string) == -1) { *rcode = ncerr; } } /* gets a single numeric value from a variable of an open netCDF file */ void nncvgt1(cdfid, varid, indices, value, rcode) int *cdfid; int *varid; int *indices; void *value; int *rcode; { long nindices[MAX_VAR_DIMS], i; int datatype, ndims, dimarray[MAX_VAR_DIMS], natts; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { nindices[i] = indices[i] - 1; } revlongs (nindices, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { char bytes; int *ip = (int *) value; char *bp = &bytes; if (ncvarget1(*cdfid, *varid - 1, nindices, (ncvoid *) &bytes) == -1) { *rcode = ncerr; return; } *ip = *bp; return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { short shorts; int *ip = (int *) value; short *sp = &shorts; if (ncvarget1(*cdfid, *varid - 1, nindices, (ncvoid *) &shorts) == -1) { *rcode = ncerr; return; } *ip = *sp; return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long longs; int *ip = (int *) value; if (ncvarget1(*cdfid, *varid - 1, nindices, (ncvoid *) &longs) == -1) { *rcode = ncerr; return; } *ip = longs; return; } /* else */ #endif if (ncvarget1 (*cdfid, *varid - 1, nindices, value) == -1) { *rcode = ncerr; } } /* * gets a single character data value from a variable of an open * netCDF file */ void nncvg1c(cdfid, varid, indices, chval, rcode, chvallen) int *cdfid; int *varid; int *indices; char *chval; int chvallen; int *rcode; { long nindices[MAX_VAR_DIMS]; int i, datatype, ndims, dimarray[MAX_VAR_DIMS], natts; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { nindices[i] = indices[i] - 1; } revlongs (nindices, ndims); *rcode = 0; if (ncvarget1 (*cdfid, *varid - 1, nindices, (ncvoid *) chval) == -1) { *rcode = ncerr; } } /* * reads a hypercube of numeric values from a netCDF variable of an open * netCDF file */ void nncvgt(cdfid, varid, start, count, value, rcode) int *cdfid; int *varid; int *start; int *count; void *value; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS]; int i, ndims, datatype, dimarray[MAX_VAR_DIMS], natts; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; } revlongs (ncount, ndims); revlongs (nstart, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ char *bytes = (char *) malloc (iocount * sizeof (char)); int *ip; char *bp = bytes; if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncvarget (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) bytes) == -1) { *rcode = ncerr; free (bytes); return; } for (ip = (int *) value; iocount > 0; iocount--) *ip++ = *bp++; free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ short *shorts = (short *) malloc (iocount * sizeof (short)); int *ip; short *sp = shorts; if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncvarget (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) shorts) == -1) { *rcode = ncerr; free (shorts); return; } for (ip = (int *) value; iocount > 0; iocount--) *ip++ = *sp++; free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ /* EIP We need int buffer to read data in on the platforms where long is 8 bytes long *longs = (long *) malloc (iocount * sizeof (long)); int *ip; long *lp = longs; */ int *longs = (int *) malloc (iocount * sizeof (int)); int *ip; int *lp = longs; if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncvarget (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) longs) == -1) { *rcode = ncerr; free (longs); return; } for (ip = (int *) value; iocount > 0; iocount--) *ip++ = *lp++; free (longs); return; } /* else */ #endif if (ncvarget (*cdfid, *varid - 1, nstart, ncount, value) == -1) { *rcode = ncerr; } } /* reads a hypercube of character values from a netCDF variable */ void nncvgtc(cdfid, varid, start, count, string, lenstr, rcode, stringlen) int *cdfid; int *varid; int *start; int *count; char *string; int stringlen; int *lenstr; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS]; int i, ndims, datatype, dimarray[MAX_VAR_DIMS], natts; int prod = 1; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; prod *= count[i]; } if (prod > *lenstr) { *rcode = NC_ESTS; handle_err ("NCVGTC", *rcode); return; } revlongs (ncount, ndims); revlongs (nstart, ndims); *rcode = 0; if (ncvarget (*cdfid, *varid - 1, nstart, ncount, (ncvoid *) string) == -1) { *rcode = ncerr; return; } for (i = prod; i < *lenstr; i++) string[i] = ' '; } /* * reads a generalized hypercube of numeric values from a netCDF variable of an * open netCDF file */ void nncvgtg(cdfid, varid, start, count, stride, basis, value, rcode) int *cdfid; int *varid; int *start; int *count; int *stride; int *basis; void *value; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS]; long nstride[MAX_VAR_DIMS], nbasis[MAX_VAR_DIMS]; long tmpbasis; int i, ndims, datatype, dimarray[MAX_VAR_DIMS], natts; NC *handle=NC_check_id(*cdfid); if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } #ifdef FORTRAN_HAS_NO_BYTE if (datatype == NC_CHAR || datatype == NC_BYTE) tmpbasis = nctypelen(NC_LONG); else #endif #ifdef FORTRAN_HAS_NO_SHORT if (datatype == NC_SHORT) tmpbasis = nctypelen(NC_LONG); else #endif #ifdef H4_HAVE_LP64 if (datatype == NC_LONG) tmpbasis = sizeof(int); else #endif tmpbasis = nctypelen(datatype); for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; nstride[i] = stride[0] == 0 ? 1 : stride[i]; nbasis[i] = basis[0] == 0 ? tmpbasis : basis[i]; tmpbasis *= count[i]; } revlongs (ncount, ndims); revlongs (nstart, ndims); revlongs (nstride, ndims); revlongs (nbasis, ndims); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ char *bytes = (char *) malloc (iocount * sizeof (char)); int *ip; char *bp = bytes; if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncvargetg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) bytes) == -1) { *rcode = ncerr; free (bytes); return; } /* * Release 2.3.1 had a bug in the following line: it used basis * rather than nbasis. */ btoig(bytes, (int*)value, ncount, nbasis, ndims); free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ short *shorts = (short *) malloc (iocount * sizeof (short)); int *ip; short *sp = shorts; if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncvargetg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) shorts) == -1) { *rcode = ncerr; free (shorts); return; } /* * Release 2.3.1 had a bug in the following line: it used basis * rather than nbasis. */ stoig(shorts, (int*)value, ncount, nbasis, ndims); free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { long iocount = dimprod (ncount, ndims); /* product of dimensions */ long *longs = (long *) malloc (iocount * sizeof (long)); if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncvargetg (*cdfid, *varid - 1, nstart, ncount, nstride, (long*)NULL, (ncvoid *) longs) == -1) { *rcode = ncerr; free (longs); return; } ltoig(longs, (int*)value, ncount, nbasis, ndims); free (longs); return; } /* else */ #endif if (ncvargetg (*cdfid, *varid - 1, nstart, ncount, nstride, nbasis, value) == -1) { *rcode = ncerr; } } /* * reads a generalized hypercube of character values from a netCDF variable * of an open netCDF file */ void nncvggc(cdfid, varid, start, count, stride, basis, string, rcode, stringlen) int *cdfid; int *varid; int *start; int *count; int *stride; int *basis; char *string; int stringlen; int *rcode; { long ncount[MAX_VAR_DIMS], nstart[MAX_VAR_DIMS]; long nstride[MAX_VAR_DIMS], nbasis[MAX_VAR_DIMS]; long tmpbasis; int i, ndims, datatype, dimarray[MAX_VAR_DIMS], natts; if (ncvarinq (*cdfid, *varid - 1, (char *) 0, (nc_type *) & datatype, &ndims, dimarray, &natts) == -1) { *rcode = ncerr; return; } tmpbasis = nctypelen(datatype); for (i = 0; i < ndims; i++) { ncount[i] = count[i]; nstart[i] = start[i] - 1; nstride[i] = stride[0] == 0 ? 1 : stride[i]; nbasis[i] = basis[0] == 0 ? tmpbasis : basis[i]; tmpbasis *= count[i]; } revlongs (ncount, ndims); revlongs (nstart, ndims); revlongs (nstride, ndims); revlongs (nbasis, ndims); *rcode = 0; if (ncvargetg (*cdfid, *varid - 1, nstart, ncount, nstride, nbasis, (ncvoid*)string) == -1) { *rcode = ncerr; } } /* changes the name of a netCDF variable in an open netCDF file */ void nncvren(cdfid, varid, varname, rcode, varnamelen) int *cdfid; int *varid; char *varname; int varnamelen; int *rcode; { char name[MAX_NC_NAME + 1]; nstrncpy (name, varname, varnamelen); *rcode = 0; if (ncvarrename (*cdfid, *varid - 1, name) == -1) { *rcode = ncerr; } } /* * adds or changes a numeric variable or global attribute of an open * netCDF file */ void nncapt(cdfid, varid, attname, datatype, attlen, value, rcode, attnamelen) int *cdfid; int *varid; char *attname; int attnamelen; int *datatype; int *attlen; void *value; int *rcode; { char name[MAX_NC_NAME + 1]; NC *handle=NC_check_id(*cdfid); nstrncpy (name, attname, attnamelen); *rcode = 0; #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) *datatype == NC_BYTE) { /* pack ints into bytes */ char *bytes = itob (value, attlen, 1); if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncattput (*cdfid, *varid - 1, name, (nc_type) *datatype, *attlen, (ncvoid *) bytes) == -1) { *rcode = ncerr; } free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) *datatype == NC_SHORT) { /* pack ints into shorts */ short *shorts = itos (value, attlen, 1); if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncattput (*cdfid, *varid - 1, name, (nc_type) *datatype, *attlen, (ncvoid *) shorts) == -1) { *rcode = ncerr; } free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) *datatype == NC_LONG && handle->file_type!=HDF_FILE) { long *longs = itol (value, attlen, 1); if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncattput (*cdfid, *varid - 1, name, (nc_type) *datatype, *attlen, (ncvoid *) longs) == -1) { *rcode = ncerr; } free (longs); return; } /* else */ #endif if (ncattput (*cdfid, *varid - 1, name, (nc_type) *datatype, *attlen, value) == -1) { *rcode = ncerr; } } /* * adds or changes a character variable or global attribute * of an open netCDF file */ void nncaptc(cdfid, varid, attname, datatype, lenstr, string, rcode, attnamelen, stringlen) int *cdfid; int *varid; char *attname; int attnamelen; int *datatype; int *lenstr; char *string; int stringlen; int *rcode; { char name[MAX_NC_NAME + 1]; char *value; nstrncpy (name, attname, attnamelen); if (((value = malloc ((unsigned) *lenstr + 1)) == NULL) || (*lenstr == 0)) { *rcode = NC_ESTS; handle_err ("NCAPTC", *rcode); return; } (void) fstrncpy (value, string, *lenstr); *rcode = 0; if (ncattput (*cdfid, *varid - 1, name, (nc_type) *datatype, *lenstr, (ncvoid *) value) == -1) { *rcode = ncerr; } free (value); } /* * returns information about a netCDF attribute given its variable * ID and name */ void nncainq(cdfid, varid, attname, datatype, attlen, rcode, attnamelen) int *cdfid; int *varid; char *attname; int attnamelen; int *datatype; int *attlen; int *rcode; { char name[MAX_NC_NAME + 1]; nstrncpy (name, attname, attnamelen); *rcode = 0; if (ncattinq (*cdfid, *varid - 1, name, (nc_type *) datatype, attlen) == -1) { *rcode = ncerr; } } /* * gets the value of a netCDF attribute given its variable ID * and name */ void nncagt(cdfid, varid, attname, value, rcode, attnamelen) int *cdfid; int *varid; char *attname; int attnamelen; void *value; int *rcode; { char name[MAX_NC_NAME + 1]; int datatype; int attlen; NC *handle=NC_check_id(*cdfid); nstrncpy (name, attname, attnamelen); *rcode = 0; if (ncattinq (*cdfid, *varid - 1, name, (nc_type *) &datatype, &attlen) == -1) { *rcode = ncerr; return; } #ifdef FORTRAN_HAS_NO_BYTE if ((nc_type) datatype == NC_BYTE) { char *bytes = (char *) malloc (attlen); int *ip; char *bp = bytes; if (bytes == NULL) { *rcode = NC_SYSERR; return; } if (ncattget (*cdfid, *varid - 1, name, (ncvoid *) bytes) == -1) { *rcode = ncerr; free (bytes); return; } for (ip = (int *) value; attlen > 0; attlen--) *ip++ = *bp++; free (bytes); return; } /* else */ #endif /* FORTRAN_HAS_NO_BYTE */ #ifdef FORTRAN_HAS_NO_SHORT if ((nc_type) datatype == NC_SHORT) { short *shorts = (short *) malloc (attlen * sizeof (short)); int *ip; short *sp = shorts; if (shorts == NULL) { *rcode = NC_SYSERR; return; } if (ncattget (*cdfid, *varid - 1, name, (ncvoid *) shorts) == -1) { *rcode = ncerr; free (shorts); return; } for (ip = (int *) value; attlen > 0; attlen--) *ip++ = *sp++; free (shorts); return; } /* else */ #endif /* FORTRAN_HAS_NO_SHORT */ #ifdef H4_HAVE_LP64 if ((nc_type) datatype == NC_LONG && handle->file_type!=HDF_FILE) { /* EIP We need to use int buffer to read data in on the platforms where long is 8 bytes long *longs = (long *) malloc (attlen * sizeof (long)); int *ip; long *lp = longs; */ int *longs = (int *) malloc (attlen * sizeof (int)); int *ip; int *lp = longs; if (longs == NULL) { *rcode = NC_SYSERR; return; } if (ncattget (*cdfid, *varid - 1, name, (ncvoid *) longs) == -1) { *rcode = ncerr; free (longs); return; } for (ip = (int *) value; attlen > 0; attlen--) *ip++ = *lp++; free (longs); return; } /* else */ #endif if (ncattget (*cdfid, *varid - 1, name, value) == -1) { *rcode = ncerr; } } /* * gets the value of a netCDF character attribute given its variable * ID and name */ void nncagtc(cdfid, varid, attname, string, lenstr, rcode, attnamelen, stringlen) int *cdfid; int *varid; char *attname; int attnamelen; char *string; int stringlen; int *lenstr; int *rcode; { char name[MAX_NC_NAME + 1]; int datatype; int attlen; int i; nstrncpy (name, attname, attnamelen); *rcode = 0; if (ncattinq (*cdfid, *varid - 1, name, (nc_type *) &datatype, &attlen) == -1) { *rcode = ncerr; return; } if (attlen > *lenstr) { *rcode = NC_ESTS; handle_err ("NCAGTC", *rcode); return; } if (ncattget (*cdfid, *varid - 1, name, (ncvoid *) string) == -1) { *rcode = ncerr; return; } for (i = attlen; i < *lenstr; i++) string[i] = ' '; } /* copies an attribute from one open netCDF file to another */ void nncacpy(incdfid, invarid, attname, outcdfid, outvarid, rcode, attnamelen) int *incdfid; int *invarid; char *attname; int attnamelen; int *outcdfid; int *outvarid; int *rcode; { char name[MAX_NC_NAME + 1]; nstrncpy (name, attname, attnamelen); *rcode = 0; if (ncattcopy (*incdfid, *invarid - 1, name, *outcdfid, *outvarid - 1) == -1) { *rcode = ncerr; } } /* * gets the name of an attribute given its variable ID and number * as an attribute of that variable */ void nncanam(cdfid, varid, attnum, attname, rcode, attnamelen) int *cdfid; int *varid; int *attnum; char *attname; int attnamelen; int *rcode; { char name[MAX_NC_NAME + 1]; *rcode = 0; if (ncattname (*cdfid, *varid - 1, *attnum - 1, name) == -1) { *rcode = ncerr; return; } if (strlen (name) > attnamelen) { *rcode = NC_ESTS; handle_err ("NCANAM", *rcode); return; } fcdcpy (attname, attnamelen, name); } /* renames an attribute in an open netCDF file */ void nncaren(cdfid, varid, attname, newname, rcode, attnamelen, newnamelen) int *cdfid; int *varid; char *attname; int attnamelen; char *newname; int newnamelen; int *rcode; { char name[MAX_NC_NAME + 1], nname[MAX_NC_NAME + 1]; nstrncpy (name, attname, attnamelen); nstrncpy (nname, newname, newnamelen); *rcode = 0; if (ncattrename (*cdfid, *varid - 1, name, nname) == -1) { *rcode = ncerr; } } /* * deletes an attribute from an open netCDF file given the attribute * name */ void nncadel(cdfid, varid, attname, rcode, attnamelen) int *cdfid; int *varid; char *attname; int attnamelen; int *rcode; { char name[MAX_NC_NAME + 1]; nstrncpy (name, attname, attnamelen); *rcode = 0; if (ncattdel (*cdfid, *varid - 1, name) == -1) { *rcode = ncerr; } } /* * sets the fill mode of a netCDF file open for writing */ int nncsfil(cdfid, fillmode, rcode) int *cdfid; int *fillmode; int *rcode; { int retval; if ((retval = ncsetfill (*cdfid, *fillmode)) != -1) { *rcode = 0; return retval; } *rcode = ncerr; return (-1); } hdf4-hdf4.3.1/mfhdf/fortran/mffunc.inc000066400000000000000000000062171503061704500175450ustar00rootroot00000000000000C C Decls of SFxxx functions for Fortran multi-file interface C integer sfstart external sfstart integer sfn2index external sfn2index integer sfcreate external sfcreate integer sfsdmstr external sfsdmstr integer sfsdmname external sfsdmname integer sfsdtstr external sfsdtstr integer sfgdtstr external sfgdtstr integer sfgdmstr external sfgdmstr integer sfginfo external sfginfo integer sfgainfo external sfgainfo integer sfgdinfo external sfgdinfo integer sfsattr external sfsattr integer sfsnatt external sfscatt integer sfscatt integer sffattr external sffattr integer sfend external sfend integer sfendacc external sfendacc integer sffinfo external sffinfo integer sfselect external sfselect integer sfdimid external sfdimid integer sfgcal external sfgcal integer sfscal external sfscal integer sfsdscale external sfsdscale integer sfgdscale external sfgdscale integer sfsfill external sfsfill integer sfgfill external sfgfill integer sfgrange external sfgrange integer sfsrange external sfsrange integer sfrattr external sfrattr integer sfrnatt external sfrcatt integer sfrcatt integer sfrdata external sfrdata integer sfwdata external sfwdata integer sfsextf external sfsextf integer sfsnbit external sfsnbit integer sfsacct external sfsacct integer sfid2ref external sfid2ref integer sfiscvar external sfiscvar integer sfref2index external sfref2index integer sfsdmvc external sfsdmvc integer sfisdmvc external sfisdmvc integer sfgichnk external sfgichnk integer sfrcchnk external sfrcchnk integer sfrchnk external sfrchnk integer sfwcchnk external sfwcchnk integer sfwchnk external sfwchnk integer sfscchnk external sfscchnk integer sfschnk external sfschnk integer sfscompress external sfscompress integer sfgcompress external sfgcompress integer sfisrcrd external sfisrcrd integer sfsblsz external sfsblsz integer sfchempty external sfchempty integer sfwcdata external sfwcdata integer sfrcdata external sfrcdata integer sfgcfill external sfgcfill integer sfscfill external sfscfill integer sfsflmd external sfsflmd integer sfgetfname external sfgetfname integer sfgetnamelen external sfgetnamelen integer sfidtype external sfidtype integer sfgnvars_byname external sfgnvars_byname integer sfn2indices external sfn2indices integer sfgmaxopenf external sfgmaxopenf integer sfgnumopenf external sfgnumopenf integer sfrmaxopenf external sfrmaxopenf hdf4-hdf4.3.1/mfhdf/fortran/mfhdf_fortrandll.def000066400000000000000000000012551503061704500215640ustar00rootroot00000000000000EXPORTS ; MFSDFF SFRMAXOPENF SFGNUMOPENF SFGMAXOPENF SFN2INDICES SFGNVARS_BYNAME SFIDTYPE SFGETNAMELEN SFGETFNAME SFCHEMPTY SFGCOMPRESS SFSCOMPRESS SFWCHNK SFWCCHNK SFSCHNK SFSCCHNK SFRCHNK SFRCCHNK SFGICHNK SFSEXTF SFFATTR SFSATTR SFSNATT SFSCATT SFGDINFO SFGAINFO SFGINFO SFGDMSTR SFGDTSTR SFSDTSTR SFSDMNAME SFSDMSTR SFCREATE SFN2INDEX SFSTART SCRMAXOPENF SCGNUMOPENF SCGMAXOPENF SCN2INDICES SCGNVARS_BYNAME SCIDTYPE SCGETNAMELEN SCGETFNAME SCCHEMPTY SCGCOMPRESS SCSCOMPRESS SCWCHNK SCWCCHNK SCSCHNK SCSCCHNK SCRCHNK SCRCCHNK SCGICHNK SCSEXTF SCFATTR SCSATTR SCSNATT SCSCATT SCGDINFO SCGAINFO SCGINFO SCGDIMSTRS SCGDATSTRS SCSDATSTR SCSDIMNAME SCSDIMSTR SCCREATE SCN2INDEX SCSTART hdf4-hdf4.3.1/mfhdf/fortran/mfsdf.c000066400000000000000000002254551503061704500170460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* This file contains the HDF-style C stubs for the multi-file SDS interface. The basic routines called by fortran will be of the form sfxxxx */ #include #include "mfsdf.h" intf nsfscfill(intf *id, _fcd val); intf nsfsfill(intf *id, void *val); intf nsfgfill(intf *id, void *val); intf nsfrnatt(intf *id, intf *index, void *buf); intf nscsnatt(intf *id, _fcd name, intf *nt, intf *count, void *data, intf *len); intf nsfsflmd(intf *id, intf *fillmode); #if defined H4_HAVE_WIN32_API && !defined CMAKE_INTDIR /*----------------------------------------------------------------------------- * Name: scend * Purpose: Call SDend close to close HDF file * Inputs: file_id: handle to HDF file to close * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscend(intf *file_id) { return (SDend(*file_id)); } /*----------------------------------------------------------------------------- * Name: scendacc * Purpose: Call SDendaccess close to end access on a dataset * Inputs: id: id of the data set * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscendacc(intf *id) { return (SDendaccess(*id)); } /*----------------------------------------------------------------------------- * Name: scfinfo * Purpose: Call SDfileinfo to get number of datasets and global attrs in the file * Inputs: file_id: handle to HDF file * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscfinfo(intf *file_id, intf *datasets, intf *gattr) { int32 dset, nattr, status; status = SDfileinfo((int32)*file_id, &dset, &nattr); *datasets = (intf)dset; *gattr = (intf)nattr; return (status); } /*----------------------------------------------------------------------------- * Name: scselct * Purpose: Call SDselect to return a handle to a data set in the given file * Inputs: file_id: handle to HDF file * index: number of data set to chose * Returns: sdsid on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscselct(intf *file_id, intf *index) { return (SDselect(*file_id, *index)); } /*----------------------------------------------------------------------------- * Name: scdimid * Purpose: Get an id for a dimension of a given data set * Inputs: id: handle to a data set * index: number of dimension to chose * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscdimid(intf *id, intf *index) { int32 rank, nt, dims[100], status, cdim, nattrs; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; cdim = rank - (*index) - 1; return (SDgetdimid(*id, cdim)); } /*----------------------------------------------------------------------------- * Name: scgcal * Purpose: Call SDgetcal to get the calibration information * Inputs: id: handle to a data set * Outputs: cal, cale, ioff, ioffe : calibration factors and error * nt: number type of data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgcal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt) { int32 nt32, status; status = SDgetcal((int32)*id, cal, cale, ioff, ioffe, &nt32); *nt = (intf)nt32; return (status); } /*----------------------------------------------------------------------------- * Name: scscal * Purpose: Call SDsetcal to set the calibration information * Inputs: id: handle to a data set * cal, cale, ioff, ioffe : calibration factors and error * nt: number type of data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscscal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt) { return (SDsetcal(*id, *cal, *cale, *ioff, *ioffe, *nt)); } /*----------------------------------------------------------------------------- * Name: scsdscale * Purpose: Call SDsetdimscale to set the values for a dimension * Inputs: id: handle to a dimension * count: size of the dimension * nt: number type of data * values: data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscsdscale(intf *id, intf *count, intf *nt, void *values) { return (SDsetdimscale(*id, *count, *nt, values)); } /*----------------------------------------------------------------------------- * Name: scgdscale * Purpose: Call SDgetdimscale to get the values for a dimension * Inputs: id: handle to a dimension * Output values: data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgdscale(intf *id, void *values) { return (SDgetdimscale(*id, values)); } /*---------------------------------------------------------- * Name: scscfill * Purpose: Call nsfsnfill to set the char fill value * Inputs: id: handle to a dimension * val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *----------------------------------------------------------*/ intf nscscfill(intf *id, _fcd val) { return (nscsfill(id, (void *)_fcdtocp(val))); } /*------------------------------------------------------------ * Name: scgcfill * Purpose: Call sfgfill to get the char fill value * Inputs: id: handle to a dimension * Output: val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *-----------------------------------------------------------*/ intf nscgcfill(intf *id, _fcd val) { return (nscgfill(id, (void *)_fcdtocp(val))); } /*--------------------------------------------------------- * Name: scsfill * Purpose: Call SDsetfillvalue to set the numeric fill value * Inputs: id: handle to a dimension * val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *------------------------------------------------------------*/ intf nscsfill(intf *id, void *val) { return (SDsetfillvalue(*id, val)); } /*---------------------------------------------------------- * Name: scgfill * Purpose: Call SDgetfillvalue to get the fill value. * Inputs: id: handle to a dimension * Output: val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *------------------------------------------------------*/ intf nscgfill(intf *id, void *val) { return (SDgetfillvalue(*id, val)); } /*------------------------------------------------------------ * Name: scgrange * Purpose: Call SDgetrange to get the valid range info * Inputs: id: handle to a dataset * Output: min: the min * max: the max * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgrange(intf *id, void *max, void *min) { return (SDgetrange(*id, max, min)); } /*----------------------------------------------------------------------------- * Name: scsrange * Purpose: Call SDsetrange to set the valid range info * Inputs: id: handle to a dataset * min: the min * max: the max * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscsrange(intf *id, void *max, void *min) { return (SDsetrange(*id, max, min)); } /*----------------------------------------------------------------------------- * Name: scrcatt * Purpose: Call sfrnatt to get the contents of a char attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscrcatt(intf *id, intf *index, _fcd buf) { return (nscrnatt(id, index, (void *)_fcdtocp(buf))); } /*----------------------------------------------------------------------------- * Name: scrnatt * Purpose: Call SDreadattr to get the contents of a numeric attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscrnatt(intf *id, intf *index, void *buf) { return (SDreadattr(*id, *index, buf)); } /*----------------------------------------------------------------------------- * Name: scrattr * Purpose: Call SDreadattr to get the contents of an attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscrattr(intf *id, intf *index, void *buf) { return (nscrnatt(id, index, buf)); } /*------------------------------------------------------------ * Name: scrdata * Purpose: read a section of numeric data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------*/ intf nscrdata(intf *id, intf *start, intf *stride, intf *end, void *values) { intf ret; int32 i, rank, dims[100], nt, nattrs, status; int32 cstart[100], cstride[100], cend[100]; int nostride; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; nostride = TRUE; for (i = 0; i < rank; i++) { cstart[i] = start[rank - i - 1]; cend[i] = end[rank - i - 1]; if ((cstride[i] = stride[rank - i - 1]) != 1) nostride = FALSE; } ret = (intf)SDreaddata(*id, cstart, (nostride ? NULL : cstride), cend, values); return (ret); } /*----------------------------------------------------------------------------- * Name: scwdata * Purpose: write a section of data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to write * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscwdata(intf *id, intf *start, intf *stride, intf *end, void *values) { intf ret; int32 i, rank, dims[100], nt, nattrs, status; int32 cstart[100], cstride[100], cend[100]; intn nostride; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; nostride = TRUE; for (i = 0; i < rank; i++) { cstart[i] = start[rank - i - 1]; cend[i] = end[rank - i - 1]; if ((cstride[i] = stride[rank - i - 1]) != 1) nostride = FALSE; } ret = (intf)SDwritedata(*id, cstart, (nostride ? NULL : cstride), cend, values); return (ret); } /*-------------------------------------------------------- * Name: scrcdata * Purpose: read a section of char data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscrcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values) { return (nscrdata(id, start, stride, end, (void *)_fcdtocp(values))); } /*-------------------------------------------------------- * Name: scwcdata * Purpose: write a section of char data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscwcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values) { return (nscwdata(id, start, stride, end, (void *)_fcdtocp(values))); } /*----------------------------------------------------------------------------- * Name: scid2ref * Purpose: call SDidtoref to map an id to ref * Inputs: id: variable id * Returns: reference number of a NDG representing this dataset *---------------------------------------------------------------------------*/ intf nscid2ref(intf *id) { return ((intf)SDidtoref(*id)); } /*----------------------------------------------------------------------------- * Name: scfr2idx * Purpose: call SDreftoindex to map a reference number to an index of a * dataset * Inputs: id: file id * ref: reference number to look up * Returns: index of a NDG representing this dataset *---------------------------------------------------------------------------*/ intf nscr2idx(intf *id, intf *ref) { return ((intf)SDreftoindex(*id, (int32)*ref)); } /*----------------------------------------------------------------------------- * Name: sciscvar * Purpose: call SDiscoordvar to see if a dataset is a coordinate variable * dataset * Inputs: id: sds id * Returns: TRUE/FALSE *---------------------------------------------------------------------------*/ intf nsciscvar(intf *id) { return ((intf)SDiscoordvar(*id)); } /*----------------------------------------------------------------------------- * Name: scsnbit * Purpose: store data in n-bit data element * Inputs: id: sds id * start_bit: starting bit offset * bit_len: # of bits to write * sign_ext: whether to use the top bit as a sign extender * fill_one: whether to fill the "background bits" with ones * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscsnbit(intf *id, intf *start_bit, intf *bit_len, intf *sign_ext, intf *fill_one) { return ((intf)SDsetnbitdataset((int32)*id, (intn)*start_bit, (intn)*bit_len, (intn)*sign_ext, (intn)*fill_one)); } /*----------------------------------------------------------------------------- * Name: scsacct * Purpose: Call SDsetaccesstype to set the access type * Inputs: id: sds id * type: the access type * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscsacct(intf *id, intf *type) { return ((intf)SDsetaccesstype(*id, *type)); } /*----------------------------------------------------------------------------- * Name: scsdmvc * Purpose: Call SDsetdimval_comp to set the dim value backward * compatibility type * Inputs: id: dim id * compmode: backward compatibility: * SD_DIMVAL_BW_COMP -- compatible (in mfhdf.h) * SD_DIMVAL_BW_INCOMP -- incompatible. * * Returns: SUCCESS on success, FAIL on failure * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscsdmvc(intf *id, intf *compmode) { return ((intf)SDsetdimval_comp(*id, *compmode)); } /*----------------------------------------------------------------------------- * Name: scisdmvc * Purpose: Call SDisdimval_bwcomp to get the dim value backward * compatibility * Inputs: id: dim id * * Returns: SD_DIMVAL_BW_COMP (1) if dimval is backward compatible; SD_DIMVAL_BW_INCOMP (0) for not compatible; (in mfhdf.h) FAIL (-1) for error. * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscisdmvc(intf *id) { return ((intf)SDisdimval_bwcomp(*id)); } /*----------------------------------------------------------------------------- * Name: scsflmd * Purpose: Call SDsetfillmode to set for the file fill mode * as fill or nofill * Inputs: id: file id * fillmode: Desired fill mode for the file, * either SD_FILL or SD_NOFILL. * SD_FILL is the default mode. * * Returns: The current (before the new mode is set) fill mode; * FAIL (-1) for error. * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscsflmd(intf *id, intf *fillmode) { return ((intf)SDsetfillmode(*id, *fillmode)); } /*----------------------------------------------------------------------------- * Name: scisrcrd * Purpose: call SDisrecord to see if a dataset is a record variable * Inputs: id: sds id * Returns: TRUE/FALSE (1/0)) *---------------------------------------------------------------------------*/ intf nsfisrcrd(intf *id) { return ((intf)SDisrecord(*id)); } /*----------------------------------------------------------------------------- * Name: scsblsz * Purpose: call SDsetblocksize * Inputs: id: sd id block_size: block size in bytes * Returns: SUCCEED/FAIL (0/-1) *---------------------------------------------------------------------------*/ intf nscsblsz(intf *id, intf *block_size) { return ((intf)SDsetblocksize(*id, *block_size)); } #endif /* H4_HAVE_WIN32_API && !CMAKE_INTDIR */ /*----------------------------------------------------------------------------- * Name: scstart * Purpose: call SDstart to open HDF file * Inputs: name: name of file to open * access: access mode - integer with value DFACC_READ etc. * namelen: length of name * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscstart(_fcd name, intf *access, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, *namelen); ret = (intf)SDstart(fn, *access); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: sdfend * Purpose: Call SDend close to close HDF file * Inputs: file_id: handle to HDF file to close * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfend(intf *file_id) { return (SDend(*file_id)); } /*----------------------------------------------------------------------------- * Name: sdfendacc * Purpose: Call SDendaccess close to end access on a dataset * Inputs: id: id of the data set * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfendacc(intf *id) { return (SDendaccess(*id)); } /*----------------------------------------------------------------------------- * Name: sdffinfo * Purpose: Call SDfileinfo to get number of datasets and global attrs in the file * Inputs: file_id: handle to HDF file * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsffinfo(intf *file_id, intf *datasets, intf *gattr) { int32 dset, nattr, status; status = SDfileinfo((int32)*file_id, &dset, &nattr); *datasets = (intf)dset; *gattr = (intf)nattr; return (status); } /*----------------------------------------------------------------------------- * Name: sfselect * Purpose: Call SDselect to return a handle to a data set in the given file * Inputs: file_id: handle to HDF file * index: number of data set to chose * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfselect(intf *file_id, intf *index) { return (SDselect(*file_id, *index)); } /*----------------------------------------------------------------------------- * Name: sdfdimid * Purpose: Get an id for a dimension of a given data set * Inputs: id: handle to a data set * index: number of dimension to chose * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfdimid(intf *id, intf *index) { int32 rank, nt, dims[100], status, cdim, nattrs; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; cdim = rank - (*index) - 1; return (SDgetdimid(*id, cdim)); } /*----------------------------------------------------------------------------- * Name: sdcginfo * Purpose: Call SDgetinfo to get the basic information about a data set * Inputs: id: handle to a data set * Outputs: name: the name of the data set * rank: the rank * dimsizes: sizes of the dimensions * nt: number type * nattr: number of attributes for this data set * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscginfo(intf *id, _fcd name, intf *rank, intf *dimsizes, intf *nt, intf *nattr, intf *len) { char *iname; int32 status; int32 cdims[100], i; int32 rank32, nt32, nattr32; iname = NULL; if (*len) iname = (char *)malloc((uint32)*len + 1); status = SDgetinfo((int32)*id, iname, &rank32, cdims, &nt32, &nattr32); for (i = 0; i < rank32; i++) dimsizes[i] = cdims[rank32 - i - 1]; HDpackFstring(iname, _fcdtocp(name), *len); free(iname); *rank = (intf)rank32; *nt = (intf)nt32; *nattr = (intf)nattr32; return (status); } /*----------------------------------------------------------------------------- * Name: sdfgcal * Purpose: Call SDgetcal to get the calibration information * Inputs: id: handle to a data set * Outputs: cal, cale, ioff, ioffe : calibration factors and error * nt: number type of data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfgcal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt) { int32 nt32, status; status = SDgetcal((int32)*id, cal, cale, ioff, ioffe, &nt32); *nt = (intf)nt32; return (status); } /*----------------------------------------------------------------------------- * Name: sdfscal * Purpose: Call SDsetcal to set the calibration information * Inputs: id: handle to a data set * cal, cale, ioff, ioffe : calibration factors and error * nt: number type of data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfscal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt) { return (SDsetcal(*id, *cal, *cale, *ioff, *ioffe, *nt)); } /*----------------------------------------------------------------------------- * Name: sdfsdscale * Purpose: Call SDsetdimscale to set the values for a dimension * Inputs: id: handle to a dimension * count: size of the dimension * nt: number type of data * values: data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfsdscale(intf *id, intf *count, intf *nt, void *values) { return (SDsetdimscale(*id, *count, *nt, values)); } /*----------------------------------------------------------------------------- * Name: sdfgdscale * Purpose: Call SDgetdimscale to get the values for a dimension * Inputs: id: handle to a dimension * Output values: data * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfgdscale(intf *id, void *values) { return (SDgetdimscale(*id, values)); } /*---------------------------------------------------------- * Name: sdfscfill * Purpose: Call nsfsnfill to set the char fill value * Inputs: id: handle to a dimension * val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *----------------------------------------------------------*/ intf nsfscfill(intf *id, _fcd val) { return (nsfsfill(id, (void *)_fcdtocp(val))); } /*------------------------------------------------------------ * Name: sdfgcfill * Purpose: Call sfgfill to get the char fill value * Inputs: id: handle to a dimension * Output: val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *-----------------------------------------------------------*/ intf nsfgcfill(intf *id, _fcd val) { return (nsfgfill(id, (void *)_fcdtocp(val))); } /*--------------------------------------------------------- * Name: sdfsfill * Purpose: Call SDsetfillvalue to set the numeric fill value * Inputs: id: handle to a dimension * val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *------------------------------------------------------------*/ intf nsfsfill(intf *id, void *val) { return (SDsetfillvalue(*id, val)); } /*---------------------------------------------------------- * Name: sdfgfill * Purpose: Call SDgetfillvalue to get the fill value. * Inputs: id: handle to a dimension * Output: val: the fill value * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *------------------------------------------------------*/ intf nsfgfill(intf *id, void *val) { return (SDgetfillvalue(*id, val)); } /*------------------------------------------------------------ * Name: sdfgrange * Purpose: Call SDgetrange to get the valid range info * Inputs: id: handle to a dimension * Output: min: the min * max: the max * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfgrange(intf *id, void *max, void *min) { return (SDgetrange(*id, max, min)); } /*----------------------------------------------------------------------------- * Name: sdfsrange * Purpose: Call SDsetrange to set the valid range info * Inputs: id: handle to a dimension * min: the min * max: the max * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfsrange(intf *id, void *max, void *min) { return (SDsetrange(*id, max, min)); } /*----------------------------------------------------------------------------- * Name: sdcn2index * Purpose: return the index of a data set with the given name * Inputs: id: file id * name: name to look for * namelen: length of name * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscn2index(intf *id, _fcd name, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, *namelen); ret = (intf)SDnametoindex(*id, fn); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: sdccreate * Purpose: create a new data set and return its id * Inputs: id: file id * name: name of data set * nt: number type * rank: rank * dims: dimension sizes * namelen: length of name * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nsccreate(intf *id, _fcd name, intf *nt, intf *rank, intf *dims, intf *namelen) { char *fn; intf ret; int32 *cdims, i; fn = HDf2cstring(name, *namelen); cdims = (int32 *)malloc(sizeof(int32) * (*rank)); if (!cdims) return FAIL; for (i = 0; i < *rank; i++) cdims[i] = dims[*rank - i - 1]; ret = (intf)SDcreate(*id, fn, *nt, *rank, cdims); free(fn); free(cdims); return (ret); } /*----------------------------------------------------------------------------- * Name: scsdimstr * Purpose: set the strings for this dimension * Inputs: id: dim id * label, unit and format strings and their lengths * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscsdimstr(intf *id, _fcd l, _fcd u, _fcd f, intf *ll, intf *ul, intf *fl) { char *lstr; char *ustr; char *fstr; intf ret; if (ll) lstr = HDf2cstring(l, *ll); else lstr = NULL; if (ul) ustr = HDf2cstring(u, *ul); else ustr = NULL; if (fl) fstr = HDf2cstring(f, *fl); else fstr = NULL; ret = (intf)SDsetdimstrs(*id, lstr, ustr, fstr); if (ll) free(lstr); if (ul) free(ustr); if (fl) free(fstr); return (ret); } /*----------------------------------------------------------------------------- * Name: scsdimname * Purpose: set the name of this dimension * Inputs: id: dim id * name and its length * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscsdimname(intf *id, _fcd name, intf *len) { char *nstr; intf ret; if (len) nstr = HDf2cstring(name, *len); else nstr = NULL; ret = (intf)SDsetdimname(*id, nstr); if (len) free(nstr); return (ret); } /*----------------------------------------------------------------------------- * Name: scsdatstr * Purpose: set the strings for this dimension * Inputs: id: dim id * label, unit and format strings and their lengths * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscsdatstr(intf *id, _fcd l, _fcd u, _fcd f, _fcd c, intf *ll, intf *ul, intf *fl, intf *cl) { char *lstr; char *ustr; char *fstr; char *cstr; intf ret; if (ll) lstr = HDf2cstring(l, *ll); else lstr = NULL; if (ul) ustr = HDf2cstring(u, *ul); else ustr = NULL; if (fl) fstr = HDf2cstring(f, *fl); else fstr = NULL; if (cl) cstr = HDf2cstring(c, *cl); else cstr = NULL; ret = (intf)SDsetdatastrs(*id, lstr, ustr, fstr, cstr); if (ll) free(lstr); if (ul) free(ustr); if (fl) free(fstr); if (cl) free(cstr); return (ret); } /*----------------------------------------------------------------------------- * Name: sfrcatt * Purpose: Call sfrnatt to get the contents of a char attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfrcatt(intf *id, intf *index, _fcd buf) { return (nsfrnatt(id, index, (void *)_fcdtocp(buf))); } /*----------------------------------------------------------------------------- * Name: sfrnatt * Purpose: Call SDreadattr to get the contents of a numeric attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfrnatt(intf *id, intf *index, void *buf) { return (SDreadattr(*id, *index, buf)); } /*----------------------------------------------------------------------------- * Name: sfrattr * Purpose: Call SDreadattr to get the contents of an attribute * Inputs: id: handle to a dataset * index: index of the attribute to read * buf: space to hold info * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfrattr(intf *id, intf *index, void *buf) { return (nsfrnatt(id, index, buf)); } /*------------------------------------------------------------ * Name: sfrdata * Purpose: read a section of numeric data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------*/ intf nsfrdata(intf *id, intf *start, intf *stride, intf *end, void *values) { intf ret; int32 i, rank, dims[100], nt, nattrs, status; int32 cstart[100], cstride[100], cend[100]; int nostride; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; nostride = TRUE; for (i = 0; i < rank; i++) { cstart[i] = start[rank - i - 1]; cend[i] = end[rank - i - 1]; if ((cstride[i] = stride[rank - i - 1]) != 1) nostride = FALSE; } ret = (intf)SDreaddata(*id, cstart, (nostride ? NULL : cstride), cend, values); return (ret); } /*----------------------------------------------------------------------------- * Name: sfwdata * Purpose: write a section of data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to write * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nsfwdata(intf *id, intf *start, intf *stride, intf *end, void *values) { intf ret; int32 i, rank, dims[100], nt, nattrs, status; int32 cstart[100], cstride[100], cend[100]; intn nostride; status = SDgetinfo(*id, NULL, &rank, dims, &nt, &nattrs); if (status == FAIL) return FAIL; nostride = TRUE; for (i = 0; i < rank; i++) { cstart[i] = start[rank - i - 1]; cend[i] = end[rank - i - 1]; if ((cstride[i] = stride[rank - i - 1]) != 1) nostride = FALSE; } ret = (intf)SDwritedata(*id, cstart, (nostride ? NULL : cstride), cend, values); return (ret); } /*----------------------------------------------------------------------------- * Name: scgdmstrs * Purpose: Return the "dimension strings" * Inputs: label, unit, format: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgdimstrs(intf *dim, _fcd label, _fcd unit, _fcd format, intf *llabel, intf *lunit, intf *lformat, intf *mlen) { char *ilabel, *iunit, *iformat; intf ret; iunit = ilabel = iformat = NULL; if (*llabel) ilabel = (char *)malloc((uint32)*llabel + 1); if (*lunit) iunit = (char *)malloc((uint32)*lunit + 1); if (*lformat) iformat = (char *)malloc((uint32)*lformat + 1); ret = (intf)SDgetdimstrs(*dim, ilabel, iunit, iformat, *mlen); HDpackFstring(ilabel, _fcdtocp(label), *llabel); HDpackFstring(iunit, _fcdtocp(unit), *lunit); HDpackFstring(iformat, _fcdtocp(format), *lformat); free(ilabel); free(iunit); free(iformat); return ret; } /*-------------------------------------------------------- * Name: sfrcdata * Purpose: read a section of char data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nsfrcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values) { return (nsfrdata(id, start, stride, end, (void *)_fcdtocp(values))); } /*-------------------------------------------------------- * Name: sfwcdata * Purpose: write a section of char data * Inputs: id: dataset id * start: start location * stride: stride along each dimension * end: number of values along each dim to read * values: data * Remarks: need to flip the dimensions to account for array ordering * differences * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nsfwcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values) { return (nsfwdata(id, start, stride, end, (void *)_fcdtocp(values))); } /*----------------------------------------------------------------------------- * Name: scgdtstrs * Purpose: Return the "data strings" * Inputs: label, unit, format coord: strings to return attributes in * Returns: 0 on success, -1 on failure with DFerror set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgdatstrs(intf *id, _fcd label, _fcd unit, _fcd format, _fcd coord, intf *llabel, intf *lunit, intf *lformat, intf *lcoord, intf *len) { char *ilabel, *iunit, *iformat, *icoord = NULL; intf ret; iunit = ilabel = iformat = NULL; if (*llabel) ilabel = (char *)malloc((uint32)*llabel + 1); if (*lunit) iunit = (char *)malloc((uint32)*lunit + 1); if (*lformat) iformat = (char *)malloc((uint32)*lformat + 1); if (*lcoord) icoord = (char *)malloc((uint32)*lcoord + 1); ret = (intf)SDgetdatastrs(*id, ilabel, iunit, iformat, icoord, *len); HDpackFstring(ilabel, _fcdtocp(label), *llabel); HDpackFstring(iunit, _fcdtocp(unit), *lunit); HDpackFstring(iformat, _fcdtocp(format), *lformat); HDpackFstring(icoord, _fcdtocp(coord), *lcoord); free(ilabel); free(iunit); free(iformat); free(icoord); return ret; } /*----------------------------------------------------------------------------- * Name: sfgainfo * Purpose: Call SDattrinfo to get the basic information about an attribute * Inputs: id: handle to a data set * Outputs: name: the name of the data set * count: the size * nt: number type * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgainfo(intf *id, intf *number, _fcd name, intf *nt, intf *count, intf *len) { char *iname; intn status; int32 nt32; int32 cnt32; iname = NULL; if (*len) iname = (char *)malloc((uint32)*len + 1); status = SDattrinfo(*id, *number, iname, &nt32, &cnt32); HDpackFstring(iname, _fcdtocp(name), *len); free(iname); *nt = (intf)nt32; *count = (intf)cnt32; return ((intf)status); } /*----------------------------------------------------------------------------- * Name: scgdinfo * Purpose: Call SDdiminfo to get the basic information about a dimension * Inputs: id: handle to a dimension * Outputs: name: the name of the dimension * count: the size * nt: number type * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nscgdinfo(intf *id, _fcd name, intf *sz, intf *nt, intf *nattr, intf *len) { char *iname; int32 status; int32 sz32, nt32, nattr32; iname = NULL; if (*len) iname = (char *)malloc((uint32)*len + 1); status = SDdiminfo(*id, iname, &sz32, &nt32, &nattr32); HDpackFstring(iname, _fcdtocp(name), *len); free(iname); *nt = (intf)nt32; *sz = (intf)sz32; *nattr = (intf)nattr32; return (status); } /*----------------------------------------------------------------------------- * Name: scscatt * Purpose: calls scsnatt to create a new char attribute (or modify an existing one) * Inputs: id: id (file or data set) * name: name of attribute * nt: number type * count: number of values * data: where the values are * len: length of name * Remarks: * Returns: 0 on success, -1 on failure with error set *--------------------------------------------------------------------*/ intf nscscatt(intf *id, _fcd name, intf *nt, intf *count, _fcd data, intf *len) { return (nscsnatt(id, name, nt, count, (void *)_fcdtocp(data), len)); } /*------------------------------------------------------------- * Name: scsnatt * Purpose: create a new numeric attribute (or modify an existing one) * Inputs: id: id (file or data set) * name: name of attribute * nt: number type * count: number of values * data: where the values are * len: length of name * Remarks: This routine and scscattr are used to replace scsattr * Returns: 0 on success, -1 on failure with error set *--------------------------------------------------------------------*/ intf nscsnatt(intf *id, _fcd name, intf *nt, intf *count, void *data, intf *len) { char *an; intf ret; an = HDf2cstring(name, *len); ret = (intf)SDsetattr(*id, an, *nt, *count, data); free(an); return (ret); } /*----------------------------------------------------------------------------- * Name: scsattr * Purpose: for backward compatibility. Calls SDsetattr to create * or modify an existing attribute * Inputs: id: id (file or data set) * name: name of attribute * nt: number type * count: number of values * data: where the values are * namelen: length of name * Returns: 0 on success, -1 on failure with error set * Remarks: This routine and sfsattr should be phased out. * sfsattr declairs data as char *, scscatt assumes * data as void *. *--------------------------------------------------------------------*/ intf nscsattr(intf *id, _fcd name, intf *nt, intf *count, void *data, intf *len) { char *an; intf ret; an = HDf2cstring(name, *len); ret = (intf)SDsetattr(*id, an, *nt, *count, data); free(an); return (ret); } /*--------------------------------------------------------------------- * Name: scfattr * Purpose: call SDfindattr to find an attribute * Inputs: id: object to look at * name: name of attribute to find * Returns: attribute id on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscfattr(intf *id, _fcd name, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, *namelen); ret = (intf)SDfindattr(*id, fn); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: sfid2ref * Purpose: call SDidtoref to map an idfindattr to find an attribute * Inputs: id: variable id * Returns: reference number of a NDG representing this dataset *---------------------------------------------------------------------------*/ intf nsfid2ref(intf *id) { return ((intf)SDidtoref(*id)); } /*----------------------------------------------------------------------------- * Name: sfref2index * Purpose: call SDreftoindex to map a reference number to an index of a * dataset * Inputs: id: file id * ref: reference number to look up * Returns: reference number of a NDG representing this dataset *---------------------------------------------------------------------------*/ intf nsfref2index(intf *id, intf *ref) { return ((intf)SDreftoindex(*id, (int32)*ref)); } /*----------------------------------------------------------------------------- * Name: sfiscvar * Purpose: call SDiscoordvar to see if a dataset is a coordinate variable * dataset * Inputs: id: sds id * Returns: TRUE/FALSE *---------------------------------------------------------------------------*/ intf nsfiscvar(intf *id) { return ((intf)SDiscoordvar(*id)); } /*----------------------------------------------------------------------------- * Name: scsextf * Purpose: store data in an external file * Inputs: id: sds id * name: name of external file * offset: Number of bytes from the beginning of the * external file to where the data starts * namelen: length of name * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nscsextf(intf *id, _fcd name, intf *offset, intf *namelen) { char *fn; intf ret; fn = HDf2cstring(name, *namelen); if (!fn) return (FAIL); ret = (intf)SDsetexternalfile(*id, fn, *offset); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: sfsnbit * Purpose: store data in n-bit data element * Inputs: id: sds id * start_bit: starting bit offset * bit_len: # of bits to write * sign_ext: whether to use the top bit as a sign extender * fill_one: whether to fill the "background bits" with ones * Returns: 0 on success, -1 on failure with error set *---------------------------------------------------------------------------*/ intf nsfsnbit(intf *id, intf *start_bit, intf *bit_len, intf *sign_ext, intf *fill_one) { return ((intf)SDsetnbitdataset((int32)*id, (intn)*start_bit, (intn)*bit_len, (intn)*sign_ext, (intn)*fill_one)); } /*----------------------------------------------------------------------------- * Name: sdfsacct * Purpose: Call SDsetaccesstype to set the access type * Inputs: id: sds id * type: the access type * Returns: 0 on success, FAIL on failure with error set * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfsacct(intf *id, intf *type) { return ((intf)SDsetaccesstype(*id, *type)); } /*----------------------------------------------------------------------------- * Name: sfsdmvc * Purpose: Call SDsetdimval_comp to set the dim value backward * compatibility type * Inputs: id: dim id * compmode: backward compatibility: * SD_DIMVAL_BW_COMP -- compatible (in mfhdf.h) * SD_DIMVAL_BW_INCOMP -- incompatible. * * Returns: SUCCESS on success, FAIL on failure * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfsdmvc(intf *id, intf *compmode) { return ((intf)SDsetdimval_comp(*id, *compmode)); } /*----------------------------------------------------------------------------- * Name: sfisdmvc * Purpose: Call SDisdimval_bwcomp to get the dim value backward * compatibility * Inputs: id: dim id * * Returns: SD_DIMVAL_BW_COMP (1) if dimval is backward compatible; SD_DIMVAL_BW_INCOMP (0) for not compatible; (in mfhdf.h) FAIL (-1) for error. * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfisdmvc(intf *id) { return ((intf)SDisdimval_bwcomp(*id)); } /*----------------------------------------------------------------------------- * Name: sfsflmd * Purpose: Call SDsetfillmode to set for the file fill mode * as fill or nofill * Inputs: id: file id * fillmode: Desired fill mode for the file, * either SD_FILL or SD_NOFILL. * SD_FILL is the default mode. * * Returns: The current (before the new mode is set) fill mode; * FAIL (-1) for error. * Users: HDF Fortran programmers *---------------------------------------------------------------------------*/ intf nsfsflmd(intf *id, intf *fillmode) { return ((intf)SDsetfillmode(*id, *fillmode)); } /*------------------------------------------------------------------------- * Name: scgichnk * Purpose: Call SDgetchunkinfo * Inputs: id: SDS access id * Outputs: dim_length: chunk dimensions * flags: -1 - SDS is nonchunked * 0 - SDS is chunked, no compression * 1 - SDS is chunked and compressed * with RLE, SKPHUFF and GZIP * 2 - SDS is chunked and compressed with NBIT * Actual parameters are not returned. Will be fixed after HDF41r.2 * comp_prm[0] = nbit_sign_ext, * comp_prm[1] = nbit_fill_one, * comp_prm[2] = nbit_start_bit, * comp_prm[3] = nbit_bit_len: NBIT compression parameters * * comp_prm[0] = skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0] = deflate_level: GZIP compression parameter * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nscgichnk(intf *id, intf *dim_length, intf *flags) { HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 sdsid; /* SDS id */ int i; int32 rank, status, cflags; intf ret; int32 cdims[100], nt32, nattr32; sdsid = *id; /* Get SDS rank */ status = SDgetinfo(sdsid, NULL, &rank, cdims, &nt32, &nattr32); if (status == FAIL) return FAIL; /* Get SDS info */ status = SDgetchunkinfo(sdsid, &chunk_def, &cflags); if (status == FAIL) return FAIL; switch (cflags) { case HDF_NONE: /* Non-chunked SDS */ *flags = -1; ret = 0; return (ret); case HDF_CHUNK: /* Chunked, noncompressed SDS */ *flags = 0; for (i = 0; i < rank; i++) dim_length[rank - i - 1] = chunk_def.chunk_lengths[i]; ret = 0; return (ret); case (HDF_CHUNK | HDF_COMP): /* Chunked and compressed SDS RLE, SKPHUFF or GZIP only */ *flags = 1; for (i = 0; i < rank; i++) dim_length[rank - i - 1] = chunk_def.comp.chunk_lengths[i]; ret = 0; return (ret); case (HDF_CHUNK | HDF_NBIT): /* Chunked and NBIT compressed SDS */ *flags = 2; for (i = 0; i < rank; i++) dim_length[rank - i - 1] = chunk_def.nbit.chunk_lengths[i]; ret = 0; return (ret); default: return FAIL; } } /*----------------------------------------------------------------------------- * Name: scrchnk * Purpose: read the specified chunk of NUMERIC data to the buffer * Inputs: id - data set ID * start - origin of chunk to read * Outputs: num_data - buffer the data will be read into * Calls: SDreadchunk * Remarks: need to flip the dimensions to account for array ordering * differences (start --> cstart) * If performance becomes an issue, use static cstart * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nscrchnk(intf *id, intf *start, void *num_data) { intf ret; int32 rank, status, i; int32 *cstart; int32 cdims[100], nt32, nattr32; /* Get rank of SDS */ status = SDgetinfo(*id, NULL, &rank, cdims, &nt32, &nattr32); if (status == FAIL) return FAIL; /* Allocate memory for cstart array; use static array, if performance becomes an issue */ cstart = (int32 *)malloc(sizeof(int32) * rank); if (!cstart) return FAIL; /* Flip an array to account for array ordering in Fortran and C */ for (i = 0; i < rank; i++) cstart[i] = start[rank - i - 1] - 1; /* Call SDreadChunk function to read the data */ ret = SDreadchunk(*id, cstart, num_data); /* Free memory */ free(cstart); return (ret); } /*----------------------------------------------------------------------------- * Name: scrcchnk * Purpose: read the specified chunk of CHARACTER data to the buffer * Inputs: id - data set ID * start - origin of chunk to read * Outputs: char_data - buffer the data will be read into * Calls: scrchnk * Reamrks: dimensions will be flipped in scrchnk function * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nscrcchnk(intf *id, intf *start, _fcd char_data) { intf ret; ret = nscrchnk(id, start, (void *)_fcdtocp(char_data)); return (ret); } /*----------------------------------------------------------------------------- * Name: scscchnk * Purpose: set the maximum number of chunks to cache * Inputs: id - data set ID * maxcache - max number of chunks to cache * flags - flags= 0, HDF_CACHEALL * Currently only 0 can be passed * Calls: SDsetchunkcache * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nscscchnk(intf *id, intf *maxcache, intf *flags) { intf ret; ret = SDsetchunkcache(*id, *maxcache, *flags); return (ret); } /*------------------------------------------------------------------------- * Name: scschnk * Purpose: Call SDsetchunk * Inputs: id: SDS access id * dim_length: chunk dimensions * comp_type: type of compression * COMP_CODE_NONE (0) * COMP_CODE_RLE (1) * COMP_CODE_NBIT (2) * COMP_CODE_SKPHUFF (3) * COMP_CODE_DEFLATE (4) * COMP_CODE_INVALID (5) * comp_prm[0] = nbit_sign_ext, * comp_prm[1] = nbit_fill_one, * comp_prm[2] = nbit_start_bit, * comp_prm[3] = nbit_bit_len: NBIT compression parameters * * comp_prm[0] = skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0] = deflate_level: GZIP compression parameter * comp_prm[0] = option_mask: SZIP option mask parameter * comp_prm[1] = pixels_per_block SZIP parameter * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nscschnk(intf *id, intf *dim_length, intf *comp_type, intf *comp_prm) { HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ int32 sdsid; /* SDS id */ int32 cflags; /* chunk flags */ int i, CASE; int32 rank, status; intf ret; int32 cdims[100], nt32, nattr32; /* Get rank of SDS */ status = SDgetinfo((int32)*id, NULL, &rank, cdims, &nt32, &nattr32); if (status == FAIL) return FAIL; CASE = *comp_type; sdsid = *id; cflags = HDF_CHUNK | HDF_COMP; switch (CASE) { case 0: /* No compression */ cflags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def.chunk_lengths[i] = dim_length[rank - i - 1]; break; case 1: /* RLE compression */ cflags = HDF_CHUNK | HDF_COMP; for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_RLE; break; case 2: /* N-bit encoding */ cflags = HDF_CHUNK | HDF_NBIT; for (i = 0; i < rank; i++) chunk_def.nbit.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.nbit.sign_ext = comp_prm[0]; chunk_def.nbit.fill_one = comp_prm[1]; chunk_def.nbit.start_bit = comp_prm[2]; chunk_def.nbit.bit_len = comp_prm[3]; break; case 3: /* Skipping Huffman encoding */ cflags = HDF_CHUNK | HDF_COMP; for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff.skp_size = comp_prm[0]; break; case 4: /* GZIP compression */ cflags = HDF_CHUNK | HDF_COMP; for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = comp_prm[0]; break; case 5: /* SZIP compression */ cflags = HDF_CHUNK | HDF_COMP; for (i = 0; i < rank; i++) chunk_def.comp.chunk_lengths[i] = dim_length[rank - i - 1]; chunk_def.comp.comp_type = COMP_CODE_SZIP; chunk_def.comp.cinfo.szip.options_mask = comp_prm[0]; chunk_def.comp.cinfo.szip.pixels_per_block = comp_prm[1]; break; default: return FAIL; } ret = SDsetchunk(sdsid, chunk_def, cflags); return (ret); } /*----------------------------------------------------------------------------- * Name: scwchnk * Purpose: write the specified chunk of NUMERIC data to the SDS * Inputs: id - data set ID * start - origin of chunk to write * num_data - buffer for data * Calls: SDwritechunk * Remarks: need to flip the dimensions to account for array ordering * differences (start --> cstart) * If performance becomes an issue, use static cstart * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nscwchnk(intf *id, intf *start, void *num_data) { intf ret; int32 rank, status, i; int32 *cstart; int32 cdims[100], nt32, nattr32; /* Get rank of SDS */ status = SDgetinfo(*id, NULL, &rank, cdims, &nt32, &nattr32); if (status == FAIL) return FAIL; /* Allocate memory for cstart array; use static array, if performance becomes an issue */ cstart = (int32 *)malloc(sizeof(int32) * rank); if (!cstart) return FAIL; /* Flip an array */ for (i = 0; i < rank; i++) cstart[i] = start[rank - i - 1] - 1; /* Call SDwriteChunk function to write the data */ ret = SDwritechunk(*id, cstart, num_data); /* Free memory */ free(cstart); return (ret); } /*----------------------------------------------------------------------------- * Name: scwcchnk * Purpose: write the specified chunk of CHARACTER data to the SDS * Inputs: id - data set ID * start - origin of chunk to read * Outputs: char_data - buffer the data will be read into * Calls: scwchnk * Reamrks: dimensions will be flipped in scrchnk function * Returns: 0 on success, -1 on failure with error set *----------------------------------------------------------------------------*/ intf nscwcchnk(intf *id, intf *start, _fcd char_data) { intf ret; ret = nscwchnk(id, start, (void *)_fcdtocp(char_data)); return (ret); } /*------------------------------------------------------------------------- * Name: scscompress * Purpose: Call SDsetcompress * Inputs: id: SDS access id * comp_type: type of compression * COMP_CODE_NONE = 0 * COMP_CODE_RLE = 1 * COMP_CODE_SKPHUFF = 3 * COMP_CODE_DEFLATE = 4 * COMP_CODE_SZIP = 5 * comp_prm[0] = skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * comp_prm[0] = deflate_level: GZIP compression parameter * SZIP: * comp_prm[0] = options_mask * comp_prm[1] = pixels_per_block * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nscscompress(intf *id, intf *comp_type, intf *comp_prm) { int32 sdsid; /* SDS id */ comp_info c_info; /* compression info */ comp_coder_t c_type; /* compression type definition */ int CASE; intf ret; CASE = *comp_type; sdsid = *id; switch (CASE) { case COMP_CODE_NONE: /* No compression */ c_type = COMP_CODE_NONE; break; case COMP_CODE_RLE: /* RLE compression */ c_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ c_type = COMP_CODE_SKPHUFF; c_info.skphuff.skp_size = comp_prm[0]; break; case COMP_CODE_DEFLATE: /* GZIP compression */ c_type = COMP_CODE_DEFLATE; c_info.deflate.level = comp_prm[0]; break; case COMP_CODE_SZIP: /* SZIP compression */ c_type = COMP_CODE_SZIP; c_info.szip.options_mask = comp_prm[0]; c_info.szip.pixels_per_block = comp_prm[1]; break; default: return FAIL; } ret = SDsetcompress(sdsid, c_type, &c_info); return (ret); } /*------------------------------------------------------------------------- * Name: scgcompress * Purpose: Call SDgetcompinfo * Inputs: id: SDS access id * Outputs: comp_type: type of compression * COMP_CODE_NONE = 0 * COMP_CODE_RLE = 1 * COMP_CODE_NBIT = 2 * COMP_CODE_SKPHUFF = 3 * COMP_CODE_DEFLATE = 4 * COMP_CODE_SZIP = 5 * SKPHUFF: * comp_prm[0] = skphuff_skp_size: size of individual elements for * Adaptive Huffman compression algorithm * GZIP: * comp_prm[0] = deflate_level: GZIP compression parameter * NBIT: * comp_prm[0] = nbit_sign_ext * comp_prm[1] = nbit_fill_one * comp_prm[2] = nbit_start_bit * comp_prm[3] = nbit_bit_len * SZIP: * comp_prm[0] = options_mask IN * comp_prm[1] = pixels_per_block IN * comp_prm[2] = pixels_per_scanline OUT * comp_prm[3] = bits_per_pixel OUT * comp_prm[4] = pixels OUT * Returns: 0 on success, -1 on failure with error set * Users: HDF Fortran programmers *-------------------------------------------------------------------------*/ intf nscgcompress(intf *id, intf *comp_type, intf *comp_prm) { comp_info c_info; /* compression info */ comp_coder_t c_type; /* compression type definition */ int CASE; intn c_ret; intf ret = -1; c_ret = SDgetcompinfo(*id, &c_type, &c_info); if (c_ret == 0) { CASE = (int)c_type; switch (CASE) { case COMP_CODE_NONE: /* No compression */ *comp_type = 0; ret = 0; break; case COMP_CODE_RLE: /* RLE compression */ *comp_type = 1; ret = 0; break; case COMP_CODE_NBIT: /* NBIT encoding */ *comp_type = 2; comp_prm[0] = (intf)c_info.nbit.sign_ext; comp_prm[1] = (intf)c_info.nbit.fill_one; comp_prm[2] = (intf)c_info.nbit.start_bit; comp_prm[3] = (intf)c_info.nbit.bit_len; ret = 0; break; case COMP_CODE_SKPHUFF: /* Skipping Huffman encoding */ *comp_type = 3; comp_prm[0] = (intf)c_info.skphuff.skp_size; ret = 0; break; case COMP_CODE_DEFLATE: /* GZIP compression */ *comp_type = 4; comp_prm[0] = (intf)c_info.deflate.level; ret = 0; break; case COMP_CODE_SZIP: /* SZIP encoding */ *comp_type = 5; comp_prm[0] = (intf)c_info.szip.options_mask; comp_prm[1] = (intf)c_info.szip.pixels_per_block; comp_prm[2] = (intf)c_info.szip.pixels_per_scanline; comp_prm[3] = (intf)c_info.szip.bits_per_pixel; comp_prm[4] = (intf)c_info.szip.pixels; ret = 0; break; default: return FAIL; } /*end CASE */ } /* end if */ return (ret); } /*----------------------------------------------------------------------------- * Name: sfisrcrd * Purpose: call SDisrecord to see if a dataset is a record variable * Inputs: id: sds id * Returns: TRUE/FALSE (1/0)) *---------------------------------------------------------------------------*/ intf nsfisrcrd(intf *id) { return ((intf)SDisrecord(*id)); } /*----------------------------------------------------------------------------- * Name: sfsblsz * Purpose: call SDsetblocksize * Inputs: id: sd id block_size: block size in bytes * Returns: SUCCEED/FAIL (0/-1) *---------------------------------------------------------------------------*/ intf nsfsblsz(intf *id, intf *block_size) { return ((intf)SDsetblocksize(*id, *block_size)); } /*----------------------------------------------------------------------------- * Name: scchempty * Purpose: call SDcheckempty * Inputs: id: sd id flag: TRUE/FALSE flag * Returns: SUCCEED/FAIL (0/-1) *---------------------------------------------------------------------------*/ intf nscchempty(intf *id, intf *flag) { intn flag_c; intf status; status = SDcheckempty(*id, &flag_c); *flag = flag_c; return (status); } /*----------------------------------------------------------------------------- * Name: scgetfname * Purpose: Retrieves the name of the file given file identifier * Inputs: file_id: file identifier * Outputs: file_name: file name * namelen: length of file name * Returns: real length on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscgetfname(intf *file_id, _fcd name, intf *namelen) { char *fn; intn ret; fn = NULL; if (*namelen) fn = (char *)malloc((uint32)*namelen + 1); ret = (intn)SDgetfilename(*file_id, fn); HDpackFstring(fn, _fcdtocp(name), *namelen); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: scgetnamelen * Purpose: Retrieves the length of the object name * Inputs: obj_id: object identifier * Outputs: namelen: name length * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscgetnamelen(intf *obj_id, intf *namelen) { intn ret; uint16 c_namelen; ret = (intn)SDgetnamelen(*obj_id, &c_namelen); *namelen = (intf)c_namelen; return (ret); } /*----------------------------------------------------------------------------- * Name: scidtype * Purpose: Retrieves type pf the object give an identifier * Inputs: obj_id: object identifier * Outputs: obj_type: object type -1 for invalid * 0 for file * 1 for data set * 2 for dimension scale * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscidtype(intf *obj_id, intf *obj_type) { intn ret = -1; hdf_idtype_t c_obj_type; ; c_obj_type = SDidtype(*obj_id); *obj_type = (intf)c_obj_type; if (c_obj_type >= 0) ret = 0; return (ret); } /*----------------------------------------------------------------------------- * Name: scrmaxopenf * Purpose: Resets the max number of files can be opened at the same time * Inputs: req_max: requested max number of files * Returns: current max number of opened files on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscrmaxopenf(intf *req_max) { intf cur_max; cur_max = (intf)SDreset_maxopenfiles(*req_max); return (cur_max); } /*----------------------------------------------------------------------------- * Name: scgmaxopenf * Purpose: Retrieves current and maximum number of open files. * Outputs: cat_max: current max of opened files * sys_limit: system limit on open files * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscgmaxopenf(intf *cur_max, intf *sys_limit) { intf ret = 0; intn c_cur_max, c_sys_limit; ret = (intf)SDget_maxopenfiles(&c_cur_max, &c_sys_limit); if (ret < 0) return (FAIL); *cur_max = (intf)c_cur_max; *sys_limit = (intf)c_sys_limit; return (ret); } /*----------------------------------------------------------------------------- * Name: scgnumopenf * Purpose: Returns the number of files currently being opened * Outputs: cur_num: number of files currently being opened * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscgnumopenf(intf *cur_num) { intf ret = 0; intn c_cur_num; c_cur_num = SDget_numopenfiles(); if (c_cur_num < 1) ret = -1; *cur_num = (intf)c_cur_num; return (ret); } /*----------------------------------------------------------------------------- * Name: scn2indices * Purpose: Retrieves indices of all variables with the same name. * Inputs: sd_id: SD interface identifier * sds_name: data set name * namelen: length of the name * n_vars: number of variables (sizes of var_list and type_list * arrays) * Outputs: var_list: list of indices * type_list: list of types * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscn2indices(intf *sd_id, _fcd name, intf *namelen, intf *var_list, intf *type_list, intf *n_vars) { char *fn; intn ret; hdf_varlist_t *c_var_list; int idx; fn = HDf2cstring(name, *namelen); if (!fn) return (FAIL); c_var_list = (hdf_varlist_t *)malloc(*n_vars * sizeof(hdf_varlist_t)); if (!c_var_list) return (FAIL); ret = (intn)SDnametoindices(*sd_id, fn, c_var_list); if (ret == 0) { for (idx = 0; idx < *n_vars; idx++) { var_list[idx] = (intf)c_var_list[idx].var_index; type_list[idx] = (intf)c_var_list[idx].var_type; } } /*endif*/ free(c_var_list); free(fn); return (ret); } /*----------------------------------------------------------------------------- * Name: scgnvars_byname * Purpose: Gets the number of data sets having the same name * Inputs: sd_id: SD interface identifier * sds_name: data set name * namelen: length of the name * Outputs: n_vars: number of data sets * Returns: 0 on success, -1 on failure *---------------------------------------------------------------------------*/ intf nscgnvars_byname(intf *sd_id, _fcd name, intf *namelen, intf *n_vars) { char *fn; int32 c_n_vars; intn ret; fn = HDf2cstring(name, *namelen); if (!fn) return (FAIL); ret = (intn)SDgetnumvars_byname(*sd_id, fn, &c_n_vars); free(fn); if (ret == FAIL) return FAIL; *n_vars = (intf)c_n_vars; return (ret); } hdf4-hdf4.3.1/mfhdf/fortran/mfsdf.h000066400000000000000000000230221503061704500170350ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef H4_MFSDF_H #define H4_MFSDF_H #include "H4api_adpt.h" #include "mfhdf.h" #ifdef __cplusplus extern "C" { #endif /* Define the FORTRAN names */ #define nscstart H4_F77_FUNC(scstart, SCSTART) #define nsfend H4_F77_FUNC(sfend, SFEND) #define nsfendacc H4_F77_FUNC(sfendacc, SFENDACC) #define nsffinfo H4_F77_FUNC(sffinfo, SFFINFO) #define nsfselect H4_F77_FUNC(sfselect, SFSELECT) #define nscginfo H4_F77_FUNC(scginfo, SCGINFO) #define nscgainfo H4_F77_FUNC(scgainfo, SCGAINFO) #define nscgdinfo H4_F77_FUNC(scgdinfo, SCGDINFO) #define nsfgcal H4_F77_FUNC(sfgcal, SFGCAL) #define nsfscal H4_F77_FUNC(sfscal, SFSCAL) #define nsfgdscale H4_F77_FUNC(sfgdscale, SFGDSCALE) #define nsfsdscale H4_F77_FUNC(sfsdscale, SFSDSCALE) #define nsfgcfill H4_F77_FUNC(sfgcfill, SFGCFILL) #define nsfgfill H4_F77_FUNC(sfgfill, SFGFILL) #define nsfscfill H4_F77_FUNC(sfscfill, SFSCFILL) #define nsfsfill H4_F77_FUNC(sfsfill, SFSFILL) #define nsfsflmd H4_F77_FUNC(sfsflmd, SFSFLMD) #define nsfgrange H4_F77_FUNC(sfgrange, SFGRANGE) #define nsfsrange H4_F77_FUNC(sfsrange, SFSRANGE) #define nscn2index H4_F77_FUNC(scn2index, SCN2INDEX) #define nsccreate H4_F77_FUNC(sccreate, SCCREATE) #define nscsdimstr H4_F77_FUNC(scsdimstr, SCSDIMSTR) #define nscsdimname H4_F77_FUNC(scsdimname, SCSDIMNAME) #define nscsdatstr H4_F77_FUNC(scsdatstr, SCSDATSTR) #define nsfdimid H4_F77_FUNC(sfdimid, SFDIMID) #define nsfrcatt H4_F77_FUNC(sfrcatt, SFRCATT) #define nsfrnatt H4_F77_FUNC(sfrnatt, SFRNATT) #define nsfrattr H4_F77_FUNC(sfrattr, SFRATTR) #define nsfrcdata H4_F77_FUNC(sfrcdata, SFRCDATA) #define nsfrdata H4_F77_FUNC(sfrdata, SFRDATA) #define nsfwcdata H4_F77_FUNC(sfwcdata, SFWCDATA) #define nsfwdata H4_F77_FUNC(sfwdata, SFWDATA) #define nscgdatstrs H4_F77_FUNC(scgdatstrs, SCGDATSTRS) #define nscgdimstrs H4_F77_FUNC(scgdimstrs, SCGDIMSTRS) #define nscscatt H4_F77_FUNC(scscatt, SCSCATT) #define nscsnatt H4_F77_FUNC(scsnatt, SCSNATT) #define nscsattr H4_F77_FUNC(scsattr, SCSATTR) #define nscfattr H4_F77_FUNC(scfattr, SCFATTR) #define nsfid2ref H4_F77_FUNC(sfid2ref, SFID2REF) #define nsfref2index H4_F77_FUNC(sfref2index, SFREF2INDEX) #define nsfiscvar H4_F77_FUNC(sfiscvar, SFISCVAR) #define nscsextf H4_F77_FUNC(scsextf, SCSEXTF) #define nsfsacct H4_F77_FUNC(sfsacct, SFSACCT) #define nsfsdmvc H4_F77_FUNC(sfsdmvc, SFSDMVC) #define nsfisdmvc H4_F77_FUNC(sfisdmvc, SFISDMVC) #define nsfisrcrd H4_F77_FUNC(sfisrcrd, SFISRCRD) #define nscgichnk H4_F77_FUNC(scgichnk, SCGICHNK) #define nscrcchnk H4_F77_FUNC(scrcchnk, SCRCCHNK) #define nscrchnk H4_F77_FUNC(scrchnk, SCRCHNK) #define nscscchnk H4_F77_FUNC(scscchnk, SCSCCHNK) #define nscschnk H4_F77_FUNC(scschnk, SCSCHNK) #define nscwcchnk H4_F77_FUNC(scwcchnk, SCWCCHNK) #define nscwchnk H4_F77_FUNC(scwchnk, SCWCHNK) #define nscscompress H4_F77_FUNC(scscompress, SCSCOMPRESS) #define nscgcompress H4_F77_FUNC(scgcompress, SCGCOMPRESS) #define nsfsnbit H4_F77_FUNC(sfsnbit, SFSNBIT) #define nsfsblsz H4_F77_FUNC(sfsblsz, SFSBLSZ) #define nscchempty H4_F77_FUNC(scchempty, SCCHEMPTY) #define nscgetfname H4_F77_FUNC(scgetfname, SCGETFNAME) #define nscgetnamelen H4_F77_FUNC(scgetnamelen, SCGETNAMELEN) #define nscidtype H4_F77_FUNC(scidtype, SCIDTYPE) #define nscgnvars_byname H4_F77_FUNC(scgnvars_byname, SCGNVARS_BYNAME) #define nscn2indices H4_F77_FUNC(scn2indices, SCN2INDICES) #define nscgmaxopenf H4_F77_FUNC(scgmaxopenf, SCGMAXOPENF) #define nscgnumopenf H4_F77_FUNC(scgnumopenf, SCGNUMOPENF) #define nscrmaxopenf H4_F77_FUNC(scrmaxopenf, SCRMAXOPENF) HDFFCLIBAPI intf nscstart(_fcd name, intf *access, intf *namelen); HDFFCLIBAPI intf nscginfo(intf *id, _fcd name, intf *rank, intf *dimsizes, intf *nt, intf *nattr, intf *len); HDFFCLIBAPI intf nscn2index(intf *id, _fcd name, intf *namelen); HDFFCLIBAPI intf nsccreate(intf *id, _fcd name, intf *nt, intf *rank, intf *dims, intf *namelen); HDFFCLIBAPI intf nscsdimstr(intf *id, _fcd l, _fcd u, _fcd f, intf *ll, intf *ul, intf *fl); HDFFCLIBAPI intf nscsdimname(intf *id, _fcd name, intf *len); HDFFCLIBAPI intf nscsdatstr(intf *id, _fcd l, _fcd u, _fcd f, _fcd c, intf *ll, intf *ul, intf *fl, intf *cl); HDFFCLIBAPI intf nscgdimstrs(intf *dim, _fcd label, _fcd unit, _fcd format, intf *llabel, intf *lunit, intf *lformat, intf *mlen); HDFFCLIBAPI intf nscgdatstrs(intf *id, _fcd label, _fcd unit, _fcd format, _fcd coord, intf *llabel, intf *lunit, intf *lformat, intf *lcoord, intf *len); HDFFCLIBAPI intf nscgainfo(intf *id, intf *number, _fcd name, intf *nt, intf *count, intf *len); HDFFCLIBAPI intf nscgdinfo(intf *id, _fcd name, intf *sz, intf *nt, intf *nattr, intf *len); HDFFCLIBAPI intf nscscatt(intf *id, _fcd name, intf *nt, intf *count, _fcd data, intf *len); HDFFCLIBAPI intf nscsnatt(intf *id, _fcd name, intf *nt, intf *count, void *data, intf *len); HDFFCLIBAPI intf nscsattr(intf *id, _fcd name, intf *nt, intf *count, void *data, intf *len); HDFFCLIBAPI intf nscsextf(intf *id, _fcd name, intf *offset, intf *namelen); HDFFCLIBAPI intf nscgichnk(intf *id, intf *dim_length, intf *flags); HDFFCLIBAPI intf nscrcchnk(intf *id, intf *start, _fcd char_data); HDFFCLIBAPI intf nscrchnk(intf *id, intf *start, void *num_data); HDFFCLIBAPI intf nscscchnk(intf *id, intf *maxcache, intf *flags); HDFFCLIBAPI intf nscschnk(intf *id, intf *dim_length, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nscwcchnk(intf *id, intf *start, _fcd char_data); HDFFCLIBAPI intf nscwchnk(intf *id, intf *start, void *num_data); HDFFCLIBAPI intf nscscompress(intf *id, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nscgcompress(intf *id, intf *comp_type, intf *comp_prm); HDFFCLIBAPI intf nscfattr(intf *id, _fcd name, intf *namelen); HDFFCLIBAPI intf nscchempty(intf *id, intf *flag); HDFFCLIBAPI intf nscgnvars_byname(intf *sd_id, _fcd name, intf *namelen, intf *n_vars); HDFFCLIBAPI intf nscn2indices(intf *sd_id, _fcd name, intf *namelen, intf *var_list, intf *type_list, intf *n_vars); HDFFCLIBAPI intf nscgnumopenf(intf *cur_num); HDFFCLIBAPI intf nscgmaxopenf(intf *cur_max, intf *sys_limit); HDFFCLIBAPI intf nscrmaxopenf(intf *req_max); HDFFCLIBAPI intf nscidtype(intf *obj_id, intf *obj_type); HDFFCLIBAPI intf nscgetnamelen(intf *obj_id, intf *namelen); HDFFCLIBAPI intf nscgetfname(intf *file_id, _fcd name, intf *namelen); HDFFCLIBAPI intf nsfend(intf *file_id); HDFFCLIBAPI intf nsfendacc(intf *id); HDFFCLIBAPI intf nsffinfo(intf *file_id, intf *datasets, intf *gattr); HDFFCLIBAPI intf nsfselect(intf *file_id, intf *index); HDFFCLIBAPI intf nsfdimid(intf *id, intf *index); HDFFCLIBAPI intf nsfgcal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt); HDFFCLIBAPI intf nsfscal(intf *id, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, intf *nt); HDFFCLIBAPI intf nsfsdscale(intf *id, intf *count, intf *nt, void *values); HDFFCLIBAPI intf nsfgdscale(intf *id, void *values); HDFFCLIBAPI intf nsfscfill(intf *id, _fcd val); HDFFCLIBAPI intf nsfgcfill(intf *id, _fcd val); HDFFCLIBAPI intf nsfsfill(intf *id, void *val); HDFFCLIBAPI intf nsfgfill(intf *id, void *val); HDFFCLIBAPI intf nsfgrange(intf *id, void *max, void *min); HDFFCLIBAPI intf nsfsrange(intf *id, void *max, void *min); HDFFCLIBAPI intf nsfrcatt(intf *id, intf *index, _fcd buf); HDFFCLIBAPI intf nsfrnatt(intf *id, intf *index, void *buf); HDFFCLIBAPI intf nsfrattr(intf *id, intf *index, void *buf); HDFFCLIBAPI intf nsfrdata(intf *id, intf *start, intf *stride, intf *end, void *values); HDFFCLIBAPI intf nsfwdata(intf *id, intf *start, intf *stride, intf *end, void *values); HDFFCLIBAPI intf nsfrcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values); HDFFCLIBAPI intf nsfwcdata(intf *id, intf *start, intf *stride, intf *end, _fcd values); HDFFCLIBAPI intf nsfid2ref(intf *id); HDFFCLIBAPI intf nsfref2index(intf *id, intf *ref); HDFFCLIBAPI intf nsfiscvar(intf *id); HDFFCLIBAPI intf nsfsnbit(intf *id, intf *start_bit, intf *bit_len, intf *sign_ext, intf *fill_one); HDFFCLIBAPI intf nsfsacct(intf *id, intf *type); HDFFCLIBAPI intf nsfsdmvc(intf *id, intf *compmode); HDFFCLIBAPI intf nsfisdmvc(intf *id); HDFFCLIBAPI intf nsfsflmd(intf *id, intf *fillmode); HDFFCLIBAPI intf nsfisrcrd(intf *id); HDFFCLIBAPI intf nsfsblsz(intf *id, intf *block_size); #ifdef __cplusplus } #endif #endif /* H4_MFSDF_H */ hdf4-hdf4.3.1/mfhdf/fortran/mfsdff.f000066400000000000000000000671221503061704500172120ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C C C---------------------------------------------------------------------- C Name: sdfstart C Purpose: call scstart, open file C Inputs: path: Name of file to be opened C access: DFACC_READ, DFACC_WRITE, DFACC_CREATE, C or any bitwise-or of the above. C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfstart(filename, access) character*(*) filename integer access, scstart sfstart = scstart(filename, access, len(filename)) return end C---------------------------------------------------------------------- C Name: sdfn2index C Purpose: call scn2index to return an index C Inputs: id: file C name: name of data set C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfn2index(id, name) character*(*) name integer id, scn2index sfn2index = scn2index(id, name, len(name)) return end C---------------------------------------------------------------------- C Name: sfcreate C Purpose: call sccreate to create a new dataset C Inputs: id: file C name: name of data set C nt: number type C rank: rank C dims: sizes of dimensions C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfcreate(id, name, nt, rank, dims) character*(*) name integer id, nt, rank, sccreate integer dims(*) sfcreate = sccreate(id, name, nt, rank, dims, len(name)) return end C---------------------------------------------------------------------- C Name: sfsdmstr C Purpose: set strings for this dimension C Inputs: id: dimension id C label,unit,format: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfsdmstr(id, label, unit, format) character*(*) label, unit, format integer len, id integer scsdimstr sfsdmstr = scsdimstr(id, label, unit, format, + len(label), len(unit), len(format)) return end C---------------------------------------------------------------------- C Name: sfsdmname C Purpose: set name of this dimension C Inputs: id: dimension id C name: the name C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfsdmname(id, name) character*(*) name integer len, id integer scsdimname sfsdmname = scsdimname(id, name, len(name)) return end C---------------------------------------------------------------------- C Name: sfsdtstr C Purpose: set strings for this data set C Inputs: id: dimension id C label,unit,format,coordsys: strings to be set C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfsdtstr(id, l, u, f, c) character*(*) l, u, f, c integer len, id integer scsdatstr sfsdtstr = scsdatstr(id, l, u, f, c, + len(l), len(u), len(f), len(c)) return end C---------------------------------------------------------------------- C Name: sfgdtstr C Purpose: get strings for this data set C Inputs: id: dimension id C Outputs: label,unit,format,coordsys: strings to be gotten C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfgdtstr(id, label, unit, format, coord, mlen) character*(*) label, unit, format, coord integer len, id, mlen integer scgdatstrs sfgdtstr = scgdatstrs(id, label, unit, format, coord, + len(label), len(unit), len(format), len(coord), mlen) return end C---------------------------------------------------------------------- C Name: sfgdmstr C Purpose: get strings for this dimension C Inputs: id: dimension id C Outputs: label,unit,format: strings to be gotten C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfgdmstr(id, label, unit, format, mlen) character*(*) label, unit, format integer len, id integer scgdimstrs sfgdmstr = scgdimstrs(id, label, unit, format, + len(label), len(unit), len(format), mlen) return end C---------------------------------------------------------------------- C Name: sfginfo C Purpose: get basic info about this data set C Inputs: id: dataset id C Outputs: name, rank, nt, dims, nattrs C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfginfo(id, name, rank, dims, nt, nattr) character*(*) name integer rank, nt, nattr integer dims(*) integer scginfo, len sfginfo = scginfo(id, name, rank, dims, nt, nattr, len(name)) return end C---------------------------------------------------------------------- C Name: sfgainfo C Purpose: get basic info about an attribute C Inputs: id: dataset id C number: attribute number C Outputs: name, nt, count C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfgainfo(id, number, name, nt, count) character*(*) name integer nt, number integer scgainfo, len sfgainfo = scgainfo(id, number, name, nt, count, len(name)) return end C---------------------------------------------------------------------- C Name: sfgdinfo C Purpose: get basic info about a dimension C Inputs: id: dim id C Outputs: name, nt, sz, nattr C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfgdinfo(id, name, sz, nt, nattr) character*(*) name integer sz, nt, nattr integer scgdinfo, len sfgdinfo = scgdinfo(id, name, sz, nt, nattr, len(name)) return end C---------------------------------------------------------------------- C Name: sfscatt C Purpose: create (or modify an existing) char attribute C Inputs: id: id of object to attribute-ize C Outputs: name, nt, count, data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfscatt(id,name,nt,count,data) character*(*) name, data integer nt integer scscatt, len sfscatt = scscatt(id,name,nt,count,data,len(name)) return end C---------------------------------------------------------------------- C Name: sfsnatt C Purpose: create (or modify an existing) numeric attribute C Inputs: id: id of object to attribute-ize C Outputs: name, nt, count, data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C---------------------------------------------------------------------- integer function sfsnatt(id, name, nt, count, data) character*(*) name integer nt, data integer scsnatt, len sfsnatt = scsnatt(id, name, nt, count, data, len(name)) return end C---------------------------------------------------------------------- C Name: sfsattr C Purpose: for backward compatibility. Calls scsattr to C create (or modify an existing) attribute C Inputs: id: id of object to attribute-ize C Outputs: name, nt, count, data C Returns: 0 on success, -1 on failure with DFerror set C Users: HDF Fortran programmers C Remarks: This function should be phased out in the future. C---------------------------------------------------------------------- integer function sfsattr(id, name, nt, count, data) character*(*) name, data integer nt integer scsattr, len sfsattr = scsattr(id, name, nt, count, data, len(name)) return end C---------------------------------------------------------------------- C Name: sffattr C Purpose: call scfattr, find an attribute C Inputs: id: Object to look at C name: name of attribute C Returns: attribute number on success, FAIL on failure with error set C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sffattr(id, name) character*(*) name integer id, scfattr sffattr = scfattr(id, name, len(name)) return end C---------------------------------------------------------------------- C Name: sfsextf C Purpose: call scsextf to store data in an external file C Inputs: id: sds id C fname: name of external file C offset: Number of bytes from the beginning of the C external file to where the data starts C Returns: 0 on success, FAIL on failure with error set C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfsextf(id, fname, offset) character*(*) fname integer id, offset, scsextf sfsextf = scsextf(id, fname, offset, len(fname)) return end C------------------------------------------------------------------------- C Name: sfgichnk C Purpose: get Info on SDS C Inputs: id - data set ID C Outputs: dim_length - chunk dimensions (if any) C comp_flag: C -1 - SDS is non-chunked C 0 - SDS is chunked without compression C 1 - SDS is chunked and compressed with C RLE, GZIP, SZIP or SKPHUFF C 2 - SDS is chunked and compressed with C NBIT C Returns: 0 on success, -1 on failure C Calls: scgichnk (C stub for SDgetchunkinfo function) C------------------------------------------------------------------------- integer function sfgichnk(id, dim_length, comp_flag) integer id, dim_length(*), comp_flag integer scgichnk sfgichnk = scgichnk(id, dim_length, comp_flag) return end C------------------------------------------------------------------------- C Name: sfrcchnk C Purpose: read the specified chunk of CHARACTER data to the SDS C Inputs: id - data set ID C start - chunk coordinates C char_data - buffer the data will be read into C Returns: 0 on success, -1 on failure C Calls: scrcchnk (C stub for SDreadchunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfrcchnk(id, start, char_data) C integer id, start(*) character*(*) char_data(*) integer scrcchnk C sfrcchnk = scrcchnk(id, start, char_data) C return end C------------------------------------------------------------------------- C Name: sfrchnk C Purpose: read the specified chunk of NUMERIC data to the SDS C Inputs: id - data set ID C start - chunk coordinates C num_data - buffer the numeric data will be read into C Returns: 0 on success, -1 on failure C Calls: scrchnk (C stub for SDreadchunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfrchnk(id, start, num_data) C integer id, start(*), num_data(*) integer scrchnk C sfrchnk = scrchnk(id, start, num_data) C return end C------------------------------------------------------------------------- C Name: sfscchnk C Purpose: set the maximum number of chunks to cache C Inputs: id - data set ID C maxcache - max number of chunks to cache C flags - flags =0, HDF_CACHEALL C Currently only 0 can be passed. C Returns: 0 on success, -1 on failure C Calls: scscchnk (C stub for SDsetchunkcache function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfscchnk(id, maxcache, flags) C integer id, maxcache, flags integer scscchnk C sfscchnk = scscchnk(id, maxcache, flags) C return end C------------------------------------------------------------------------- C Name: sfschnk C Purpose: make the SDS a chunked SDS C Inputs: id - data set ID C dim_length - chunk dimensions C comp_type - type of compression C supports the following compression types: C ( see hcomp.h file) C COMP_CODE_NONE = 0 C COMP_CODE_RLE = 1 C COMP_CODE_NBIT = 2 C COMP_CODE_SKPHUFF = 3 C COMP_CODE_DEFLATE = 4 C COMP_CODE_SZIP = 5 C comp_prm - compression parameters array C For C Adaptive Huffman C comp_prm(1) = skphuff_skp_size C GZIP C comp_prm(1) = deflate_level C NBIT C comp_prm(1) = nbit_sign_ext C comp_prm(2) = nbit_fill_one C comp_prm(3) = nbit_start_bit C comp_prm(4) = nbit_bit_len C C SZIP C comp_prm(1) = options_mask C comp_prm(2) = pixels_per_block C NOTE: IT IS USER's responsibility to pass correct compression C parameters for each type of compression C C C Returns: 0 on success, -1 on failure C Calls: scschnk (C stub for SDsetchunk function) C------------------------------------------------------------------------- integer function sfschnk(id, dim_length, comp_type,comp_prm) integer id, dim_length(*), comp_type, comp_prm(*) integer scschnk sfschnk = scschnk(id, dim_length, comp_type, comp_prm) return end C------------------------------------------------------------------------- C Name: sfwcchnk C Purpose: write the specified chunk of CHARACTER data to the SDS C Inputs: id - data set ID C start - chunk coordinates C char_data - buffer containing data to be written C Returns: 0 on success, -1 on failure C Calls: scwcchnk (C stub for SDwritechunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfwcchnk(id, start, char_data) C integer id, start(*) character*(*) char_data(*) integer scwcchnk C sfwcchnk = scwcchnk(id, start, char_data) C return end C------------------------------------------------------------------------- C Name: sfwchnk C Purpose: write the specified chunk of NUMERIC data to the SDS C Inputs: id - data set ID C start - chunk coordinates C num_data - buffer containing data to be written C Returns: 0 on success, -1 on failure C Calls: scwchnk (C stub for SDwritechunk function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfwchnk(id, start, num_data) C integer id, start(*), num_data(*) integer scwchnk C sfwchnk = scwchnk(id, start, num_data) C return end C------------------------------------------------------------------------- C Name: sfscompress C Purpose: compress SDS C Inputs: id - data set ID C comp_type - type of compression C supports the following compression types: C ( see hcomp.h file) C COMP_CODE_NONE = 0 C COMP_CODE_RLE =1 C COMP_CODE_SKPHUFF = 3 C COMP_CODE_DEFLATE = 4 C COMP_CODE_SZIP = 5 C comp_prm - compression parameter array: C comp_prm(1) = deflate_level for GZIP C comp_prm(1) = skphuff_skp_size for ADAPTIVE HUFFMAN C comp_prm(1) = options_mask for SZIP C comp_prm(2) = bits_per_block for SZIP C NOTE: IT IS USER's responsibility to pass correct compression C parameters for each type of compression C C Returns: 0 on success, -1 on failure C Calls: scscompress (C stub for SDsetcompress function) C------------------------------------------------------------------------- integer function sfscompress(id, comp_type,comp_prm) integer id, comp_type, comp_prm(*) integer scscompress sfscompress = scscompress(id, comp_type, comp_prm) return end C------------------------------------------------------------------------- C Name: sfgcompress C Purpose: get compression information about SDS C Inputs: id - data set ID C Output: comp_type - type of compression C supports the following compression types: C ( see hcomp.h file) C COMP_CODE_NONE = 0 C COMP_CODE_RLE =1 C COMP_CODE_SKPHUFF = 3 C COMP_CODE_DEFLATE = 4 C COMP_CODE_SZIP = 5 C comp_prm - compression parameter array: C comp_prm(1) = deflate_level for GZIP C comp_prm(1) = skphuff_skp_size for ADAPTIVE HUFFMAN C comp_prm(1) = options_mask for SZIP C comp_prm(2) = bits_per_block for SZIP C comp_prm(3) = pixels_per_scanline for SZIP C comp_prm(4) = bits_per_pixel for SZIP C comp_prm(5) = pixels for SZIP C NOTE: IT IS USER's responsibility to pass correct compression C parameters for each type of compression C C Returns: 0 on success, -1 on failure C Calls: scgcompress (C stub for SDsetcompress function) C------------------------------------------------------------------------- integer function sfgcompress(id, comp_type,comp_prm) integer id, comp_type, comp_prm(*) integer scgcompress sfgcompress = scgcompress(id, comp_type, comp_prm) return end C------------------------------------------------------------------------- C Name: sfchempty C Purpose: checks whether an SDS is empty ( data has not been written) C Inputs: id - data set ID C Outputs: flag - 1 if SDS is empty, 0 otherwise C Returns: 0 on success, -1 on failure C Calls: scchempty (C stub for SDcheckempty function) C Users: HDF Fortran programmers C------------------------------------------------------------------------- integer function sfchempty(id, flag) C integer id, flag integer scchempty C sfchempty = scchempty(id, flag) C return end C---------------------------------------------------------------------- C Name: sfgetfname C Purpose: Retrieves the name of the file given file identifier C Inputs: file_id: file identifier C Input/Outputs: filename: character variable to hold C the name of the file C Returns: the length of the name if successful, -1 if fails C Calls: scgetfname C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfgetfname(file_id, filename) character*(*) filename integer file_id integer scgetfname sfgetfname = scgetfname(file_id, filename, len(filename)) return end C------------------------------------------------------------------------- C Name: sfgetnamelen C Purpose: Retrieves the length of the name of C a file, a dataset, or a dimension. C Inputs: obj_id - object identifier C Outputs: length - length of the object's name C Returns: 0 on success, -1 on failure C Calls: scgetnamelen C Users: Fortran stub routine C------------------------------------------------------------------------- integer function sfgetnamelen(obj_id, length) C integer obj_id, length integer scgetnamelen C sfgetnamelen = scgetnamelen(obj_id, length) C return end C------------------------------------------------------------------------- C Name: sfidtype C Purpose: Returns the type of object C Inputs: obj_id - object identifier C Outputs: obj_type - type of the object C Can be one of the following C -1 - if obj_id is not valid SD type C 0 - SD (file) C 1 - SDS (data set) C 2 - DIM_ID (dimension scale) C see mfhdf.h file for definition of hdf_idtype_t C Returns: 0 on success, -1 on failure C Calls: scidtype C Users: Fortran stub routine C------------------------------------------------------------------------- integer function sfidtype(obj_id, obj_type) C integer obj_id, obj_type integer scidtype C sfidtype = scidtype(obj_id, obj_type) C return end C---------------------------------------------------------------------- C Name: sfgnvars_byname C Purpose: Gets the number of data sets having the same name C Inputs: sd_id: SD interface identifier C sds_name: name of a data set C Output: n_vars: number of data sets with name "name" C Returns: 0 on success, -1 on failure C Calls: scgnvars_byname C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfgnvars_byname(sd_id, sds_name, n_vars) character*(*) sds_name integer sd_id, n_vars integer scgnvars_byname sfgnvars_byname = scgnvars_byname(sd_id, sds_name, + len(sds_name), + n_vars) return end C---------------------------------------------------------------------- C Name: sfn2indices C Purpose: Retrieves indices and types of all variables with C the same name C Inputs: sd_id: SD interface identifier C sds_name: name of a data set C Input/Output: var_list: array to store indices C type_list: array to store variable type C elements may have values C 0 - for data set, C 1 - for dimension scale C 2 - unknown type C Returns: 0 on success, -1 on failure C Calls: scn2indices C Users: Fortran stub routine C---------------------------------------------------------------------- integer function sfn2indices(sd_id, sds_name, var_list, + type_list, n_vars) character*(*) sds_name integer sd_id integer var_list(*), type_list(*) integer n_vars integer scn2indices sfn2indices = scn2indices(sd_id, sds_name, len(sds_name), + var_list, type_list, n_vars) return end C------------------------------------------------------------------------- C Name: sfgmaxopenf C Purpose: Retrieves current and maximum number of open files C Outputs: cur_max: current number of open files C sys_limit: maximum number of open files C Returns: 0 on success, -1 on failure C Calls: scgmaxopenf C Users: Fortran stub routine C------------------------------------------------------------------------- integer function sfgmaxopenf(cur_max, sys_limit) C integer cur_max, sys_limit integer scgmaxopenf C sfgmaxopenf = scgmaxopenf(cur_max, sys_limit) C return end C------------------------------------------------------------------------- C Name: sfgnumopenf C Purpose: Returns the number of files currently being opened C Outputs: cur_num: current number of open files C Returns: 0 on success, -1 on failure C Calls: scgnumopenf C Users: Fortran stub routine C------------------------------------------------------------------------- integer function sfgnumopenf(cur_num) C integer cur_num integer scgnumopenf C sfgnumopenf = scgnumopenf(cur_num) C return end C------------------------------------------------------------------------- C Name: sfrmaxopenf C Purpose: Resets the maximum number of files can be opened C at the same time C Outputs: req_max: requested maximum number of opened files allowed C Returns: 0 on success, -1 on failure C Calls: scrmaxopenf C Users: Fortran stub routine C------------------------------------------------------------------------- integer function sfrmaxopenf(req_max) C integer req_max integer scrmaxopenf C sfrmaxopenf = scrmaxopenf(req_max) C return end hdf4-hdf4.3.1/mfhdf/fortran/netcdf.inc.in000066400000000000000000000103341503061704500201320ustar00rootroot00000000000000c c Functions in the FORTRAN interface integer nccre, ncopn, ncddef, ncdid, ncvdef, ncvid, nctlen integer ncsfil external nccre, ncopn, ncddef, ncdid, ncvdef, ncvid, nctlen external ncsfil integer NCRDWR,NCCREAT,NCEXCL,NCINDEF,NCNSYNC,NCHSYNC integer NCNDIRTY,NCHDIRTY,NCLINK,NCNOWRIT,NCWRITE integer NCCLOB,NCNOCLOB,NCGLOBAL,NCFILL,NCNOFILL integer MAXNCOP,MAXNCDIM,MAXNCATT,MAXNCVAR integer MAXNCNAM,MAXVDIMS,NCNOERR,NCEBADID integer NCENFILE,NCEEXIST,NCEINVAL,NCEPERM,NCENOTIN integer NCEINDEF,NCECOORD,NCEMAXDS,NCENAME integer NCENOATT,NCEMAXAT,NCEBADTY,NCEBADD, NCESTS integer NCEUNLIM,NCEMAXVS,NCENOTVR,NCEGLOB,NCENOTNC integer NCFOOBAR,NCSYSERR,NCFATAL,NCVERBOS, NCENTOOL integer NCBYTE,NCCHAR,NCSHORT,NCLONG,NCFLOAT,NCDOUBLE parameter(NCBYTE = 1) parameter(NCCHAR = 2) parameter(NCSHORT = 3) parameter(NCLONG = 4) parameter(NCFLOAT = 5) parameter(NCDOUBLE = 6) c c masks for the struct NC flag field; passed in as 'mode' arg to c nccreate and ncopen. c c read/write, 0 => readonly parameter(NCRDWR = 1) c in create phase, cleared by ncendef parameter(NCCREAT = 2) c on create destroy existing file parameter(NCEXCL = 4) c in define mode, cleared by ncendef parameter(NCINDEF = 8) c synchronise numrecs on change (X'10') parameter(NCNSYNC = 16) c synchronise whole header on change (X'20') parameter(NCHSYNC = 32) c numrecs has changed (X'40') parameter(NCNDIRTY = 64) c header info has changed (X'80') parameter(NCHDIRTY = 128) c prefill vars on endef and increase of record, the default behavior parameter(NCFILL = 0) c don't fill vars on endef and increase of record (X'100') parameter(NCNOFILL = 256) c isa link (X'8000') parameter(NCLINK = 32768) c c 'mode' arguments for nccreate and ncopen c parameter(NCNOWRIT = 0) parameter(NCWRITE = NCRDWR) parameter(NCCLOB = 11) parameter(NCNOCLOB = 15) c c 'size' argument to ncdimdef for an unlimited dimension c integer NCUNLIM parameter(NCUNLIM = 0) c c attribute id to put/get a global attribute c parameter(NCGLOBAL = 0) c c Advisory Maximums c parameter(MAXNCOP = 32) parameter(MAXNCDIM = 32) parameter(MAXNCATT = 512) parameter(MAXNCVAR = 512) c Not enforced parameter(MAXNCNAM = 128) parameter(MAXVDIMS = MAXNCDIM) c c The netcdf data types c c c Global netcdf error status variable c Initialized in error.c c c No Error parameter(NCNOERR = 0) c Not a netcdf id parameter(NCEBADID = 1) c Too many netcdfs open parameter(NCENFILE = 2) c netcdf file exists && NCNOCLOB parameter(NCEEXIST = 3) c Invalid Argument parameter(NCEINVAL = 4) c Write to read only parameter(NCEPERM = 5) c Operation not allowed in data mode parameter(NCENOTIN = 6) c Operation not allowed in define mode parameter(NCEINDEF = 7) c Coordinates out of Domain parameter(NCECOORD = 8) c MAXNCDIMS exceeded parameter(NCEMAXDS = 9) c String match to name in use parameter(NCENAME = 10) c Attribute not found parameter(NCENOATT = 11) c MAXNCATTRS exceeded parameter(NCEMAXAT = 12) c Not a netcdf data type parameter(NCEBADTY = 13) c Invalid dimension id parameter(NCEBADD = 14) c NCUNLIMITED in the wrong index parameter(NCEUNLIM = 15) c MAXNCVARS exceeded parameter(NCEMAXVS = 16) c Variable not found parameter(NCENOTVR = 17) c Action prohibited on NCGLOBAL varid parameter(NCEGLOB = 18) c Not a netcdf file parameter(NCENOTNC = 19) parameter(NCESTS = 20) parameter (NCENTOOL = 21) parameter(NCFOOBAR = 32) parameter(NCSYSERR = -1) c c Global options variable. Used to determine behavior of error handler. c Initialized in lerror.c c parameter(NCFATAL = 1) parameter(NCVERBOS = 2) hdf4-hdf4.3.1/mfhdf/fortran/test_nc.cdl000066400000000000000000000016701503061704500177150ustar00rootroot00000000000000netcdf new { dimensions: x = 2; y = 3; time = UNLIMITED ; // (12 currently) variables: float a(x,y); int date(time) ; int time(time) ; short b(time, y, x); double c(y); // global attributes: :Description = "Attributes"; :int_attr = -100, 200, -300, 400, -500; :float_attr = 1.f, 2.f, 3.f; :short_attr = 0s, 1s; :double_attr = -1.d, 2.d, -7.d; data: a = 1.0, 2.0, 3.0, 4.0, 5.0, 6.0; date = 840116, 840214, 840316, 840415, 840516, 840615, 840716, 840816, 840915, 841016, 841115, 841216 ; time = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; b = 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 ; c = 2.d, 3.d, 100.d; } hdf4-hdf4.3.1/mfhdf/fortran/test_nc.nc000066400000000000000000000013401503061704500175450ustar00rootroot00000000000000CDF xytime  Description Attributesint_attrÿÿÿœÈÿÿþÔÿÿþ float_attr?€@@@ short_attr double_attr¿ð@À aÀdateðtimeôb øcØ?€@@@@€@ @À@@@Y Ñ´ Ò Ò| Òß ÓD  Ó§ Ô  Ôp ÔÓ  Õ8  Õ› !!"" Ö ##$$%%hdf4-hdf4.3.1/mfhdf/fortran/testfortran.sh.in000066400000000000000000000046421503061704500211100ustar00rootroot00000000000000#! /bin/sh # Tests for the Fortran interfaces srcdir=@srcdir@ TEST_FORTRAN_NETCDF="@TEST_FORTRAN_NETCDF@" CMP='cmp -s' DIFF='diff -c' nerrors=0 verbose=yes # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All Fortran interfaces tests passed" else MESG 0 "Fortran interfaces tests failed: $nerrors" fi exit $nerrors } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable # RUN() { # Run test. MESG 0 "HDF-SD Fortran interfaces tests" ${TESTS_ENVIRONMENT} ./hdftest RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi ${TESTS_ENVIRONMENT} ./hdftest1 RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi if test $TEST_FORTRAN_NETCDF = "yes"; then MESG 0 "HDF-NetCDF Fortran interfaces tests" ${TESTS_ENVIRONMENT} ./ftest RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi else MESG 0 "HDF-NetCDF Fortran interfaces are disabled when library is built with --disable-netcdf" fi MESG 0 "SZIP Fortran interfaces tests" ${TESTS_ENVIRONMENT} ./tszip RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi } ############################################################################## ### T H E T E S T S ### ############################################################################## # Print a beginning banner MESG 0 "Running Fortran interfaces tests" # compare output RUN # End of test, return exit code FINISH hdf4-hdf4.3.1/mfhdf/fortran/tszip.f000066400000000000000000000316051503061704500171130ustar00rootroot00000000000000C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ C Copyright by The HDF Group. * C Copyright by the Board of Trustees of the University of Illinois. * C All rights reserved. * C * C This file is part of HDF. The full HDF copyright notice, including * C terms governing use, modification, and redistribution, is contained in * C the COPYING file, which can be found at the root of the source code * C distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * C If you do not have access to either file, you may request a copy from * C help@hdfgroup.org. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ program test_szip implicit none C C------- Begin Variables declarations ----------------------------------- C integer N_COMP_ARG, N_TYPES parameter (N_COMP_ARG = 5, N_TYPES = 4) integer sd_id, sds_id(N_TYPES), sds_index(N_TYPES) integer type(N_TYPES) integer RANK, comp_type, comp_type_out integer comp_arg(N_COMP_ARG), comp_prm_out(5) integer d_dims(2) integer start(2), stride(2), edges(2) integer status integer err_szip character*14 file character*17 name(4) integer n, m, n_part, m_part integer n_part_stride, m_part_stride integer n_part_start, m_part_start integer n_stride, m_stride integer n_start, m_start integer n_edges, m_edges integer i, j, l, kl, kj, i_comp C C SDS functions declarations include 'mffunc.inc' external hconfinf integer hconfinf C C Initial data declarations( change if you which to test larger arrays ) C C Data array dimensions n and m and RANK C parameter (n = 12, m = 4, RANK = 2) C C Part data dimensions n_part, m_part C parameter (n_part = 5, m_part = 2) C C Stride and start coordinates of part_data C parameter (n_part_stride = 1, m_part_stride = 1) parameter (n_part_start = 2, m_part_start = 1) C C Start, stride and edges parameters in each dimension C parameter (n_start = 0, m_start = 0) parameter (n_stride = 1, m_stride = 1) parameter (n_edges = n, m_edges = m) C C Data declaration C integer*2 data2(n,m), data2_out(n_part,m_part) integer*4 data4(n,m), data4_out(n_part,m_part) real*4 rdata4(n,m), rdata4_out(n_part,m_part) real*8 rdata8(n,m), rdata8_out(n_part,m_part) C C HDF parameters initialization C C C Read/Write parameters C integer DFACC_CREATE, . DFACC_WRITE, . DFACC_READ parameter (DFACC_CREATE = 4, . DFACC_READ = 1, . DFACC_WRITE = 2) C C Data type parameters C integer DFNT_INT16, . DFNT_INT32, . DFNT_FLOAT32, . DFNT_FLOAT64 parameter (DFNT_INT16 = 22, . DFNT_INT32 = 24, . DFNT_FLOAT32 = 5, . DFNT_FLOAT64 = 6) C C Compression parameters C integer COMP_CODE_SZIP, . SZ_EC_OPTION_MASK, . SZ_NN_OPTION_MASK parameter (COMP_CODE_SZIP = 5, . SZ_EC_OPTION_MASK = 4, . SZ_NN_OPTION_MASK = 32) C C Compression arguments ( defined for clarity, actual values C will be passed to SFSCHUNK function via comp_arg parameter) C integer pixels_per_block parameter (pixels_per_block = 12) C--------------------End of declarations------------------------------ C C-------------------IS SZIP compression present with encoder?-------- integer info err_szip = 0 comp_type = COMP_CODE_SZIP status = hconfinf(comp_type, info) if(status .LT. 0) then err_szip = err_szip + 1 goto 1111 endif if(info .EQ. 0 ) then print *,'Skipping test_szip: compression is not available' print *,' ' goto 3333 endif if(info .EQ. 1) then print *,'Skipping test_szip: szip encoding is not available' print *,' ' goto 3333 endif C C C We will write to five different files corresponding to the C different compression types C C NO compression C file = 'comp_szip.hdf' name(1) = 'szip_data_int16' name(2) = 'szip_data_int32' name(3) = 'szip_data_float32' name(4) = 'szip_data_float64' type(1) = DFNT_INT16 type(2) = DFNT_INT32 type(3) = DFNT_FLOAT32 type(4) = DFNT_FLOAT64 C C Dimension sizes array initialization C d_dims(1) = n d_dims(2) = m C C Initialize original array C do 20 j = 1, m do 10 i = 1, n data2(i,j) = 10*j + i data4(i,j) = 10*j + i rdata4(i,j) = 10*j + i rdata8(i,j) = 10*j + i 10 continue 20 continue C C Initialize SD interfaces C sd_id = sfstart (file, DFACC_CREATE) C C Set compression type and compression arguments C C C Initialize compression arguments array C comp_type = COMP_CODE_SZIP comp_arg(1) = SZ_NN_OPTION_MASK comp_arg(2) = pixels_per_block C C Main loop through different compression types C do 1000 i_comp = 1, N_TYPES C C Create the data set C sds_id(i_comp) = sfcreate(sd_id, name(i_comp), . type(i_comp), RANK, d_dims) if( sds_id(i_comp) .eq. -1 ) then print *, 'sfcreate failed for', i_comp, ' -th dataset' err_szip = err_szip + 1 endif status = sfscompress(sds_id(i_comp), comp_type, comp_arg) if( status .ne. 0 ) then print *, 'sfscompress failed for', i_comp, ' -th dataset' err_szip = err_szip + 1 endif C C Write data to the file C start(1) = n_start start(2) = m_start stride(1) = n_stride stride(2) = m_stride edges(1) = n_edges edges(2) = m_edges if (i_comp .eq. 1) then status = sfwdata(sds_id(i_comp), start, stride, . edges, data2) endif if (i_comp .eq. 2) then status = sfwdata(sds_id(i_comp), start, stride, . edges, data4) endif if (i_comp .eq. 3) then status = sfwdata(sds_id(i_comp), start, stride, . edges, rdata4) endif if (i_comp .eq. 4) then status = sfwdata(sds_id(i_comp), start, stride, . edges, rdata8) endif if( status .ne. 0 ) then print *, 'sfwdata failed for', i_comp, ' -th dataset' err_szip = err_szip + 1 endif status = sfendacc(sds_id(i_comp)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i_comp, ' -th dataset' err_szip = err_szip + 1 endif 1000 continue status = sfend (sd_id) if( status .ne. 0 ) then print *, 'sfend failed' err_szip = err_szip + 1 endif C C Let's check what we have written C C Open files and restart SD interfaces C sd_id = sfstart (file, DFACC_READ) if( sd_id .eq. -1 ) then print *, 'sfstart failed' err_szip = err_szip + 1 endif do 2000 i = 1, N_TYPES C C Find written dataset in each file using its name and index C sds_index(i) = sfn2index (sd_id, name(i)) if( sds_index(i) .eq. -1 ) then print *, 'sfn2index failed for', i, ' -th dataset' err_szip = err_szip + 1 endif sds_id(i) = sfselect (sd_id, sds_index(i)) if( sds_id(i) .eq. -1 ) then print *, 'sfselect failed for', i, ' -th dataset' err_szip = err_szip + 1 endif C C Find out type of compression used and compression parameters. C status = sfgcompress(sds_id(i), comp_type_out, comp_prm_out) if (status .eq. -1) then print *, 'sfgcompress failed for', i, ' -th dataset' err_szip = err_szip + 1 endif if (comp_type_out .ne. COMP_CODE_SZIP) then print *, 'wrong compression type for szip . compressed dataset' err_szip = err_szip + 1 endif if ((comp_arg(1) .ne. comp_prm_out(1)) .or. . (comp_arg(2) .ne. comp_prm_out(2))) then print *, 'wrong compression parameter' err_szip = err_szip + 1 endif C C Read part of the data back using sfrdata function C start(1) = n_part_start start(2) = m_part_start edges(1) = n_part edges(2) = m_part stride(1) = n_part_stride stride(2) = m_part_stride if (i .eq. 1) then status = sfrdata(sds_id(i), start, stride, . edges, data2_out) endif if (i .eq. 2) then status = sfrdata(sds_id(i), start, stride, . edges, data4_out) endif if (i .eq. 3) then status = sfrdata(sds_id(i), start, stride, . edges, rdata4_out) endif if (i .eq. 4) then status = sfrdata(sds_id(i), start, stride, . edges, rdata8_out) endif if (status .ne. 0) then print *, 'sfrdata failed for reading part data for ', . i, '-th dataset' err_szip = err_szip + 1 endif C C Compare output with actual data C if (i .eq. 1) then do 204 j = 1, m_part do 203 l = 1, n_part kl = n_part_start + 1 + (l-1)*n_part_stride kj = m_part_start + 1 + (j-1)*m_part_stride if (data2(kl, kj) .ne. data2_out(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_szip = err_szip +1 endif 203 continue 204 continue endif if (i .eq. 2) then do 206 j = 1, m_part do 205 l = 1, n_part kl = n_part_start + 1 + (l-1)*n_part_stride kj = m_part_start + 1 + (j-1)*m_part_stride if (data4(kl, kj) .ne. data4_out(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_szip = err_szip +1 endif 205 continue 206 continue endif if (i .eq. 3) then do 208 j = 1, m_part do 207 l = 1, n_part kl = n_part_start + 1 + (l-1)*n_part_stride kj = m_part_start + 1 + (j-1)*m_part_stride if (rdata4(kl, kj) .ne. rdata4_out(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_szip = err_szip +1 endif 207 continue 208 continue endif if (i .eq. 4) then do 210 j = 1, m_part do 209 l = 1, n_part kl = n_part_start + 1 + (l-1)*n_part_stride kj = m_part_start + 1 + (j-1)*m_part_stride if (rdata8(kl, kj) .ne. rdata8_out(l,j)) then print *, 'sfrdata read wrong data for ', . i ,'-th dataset' err_szip = err_szip +1 endif 209 continue 210 continue endif C C Terminate access to SDS, shutdown interfaces and close the files C status = sfendacc(sds_id(i)) if( status .ne. 0 ) then print *, 'sfendacc failed for', i, '-th dataset' err_szip = err_szip + 1 endif 2000 continue status = sfend(sd_id) if( status .ne. 0 ) then print *, 'sfend failed' err_szip = err_szip + 1 endif 1111 continue if (err_szip .ne. 0) then print *, 'test_szip failed with ', err_szip, ' errors' print *,' ' endif if (err_szip .eq. 0) then print *, 'test_szip.................. PASSED' print *,' ' endif 3333 continue end hdf4-hdf4.3.1/mfhdf/hdfimport/000077500000000000000000000000001503061704500161075ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/hdfimport/CMakeLists.txt000066400000000000000000000034731503061704500206560ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_HDFIMPORT C) if (WIN32) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:LIBCMT") endif () set (hdfimport_SRCS ${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/hdfimport.c ) add_executable (hdfimport ${hdfimport_SRCS}) target_include_directories(hdfimport PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfimport STATIC) target_link_libraries (hdfimport PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfimport SHARED) target_link_libraries (hdfimport PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (hdfimport PROPERTIES COMPILE_DEFINITIONS "HDF") set_global_variable (HDF4_UTILS_TO_EXPORT "${HDF4_UTILS_TO_EXPORT};hdfimport") set (H4_DEP_EXECUTABLES hdfimport) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Rules for Installation of tools using make Install target #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} EXPORT ${HDF4_EXPORTED_TARGETS} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/hdfimport/CMakeTests.cmake000066400000000000000000000260741503061704500211250ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES hdfimport.input1 hdfimport.out1 # hdfimport.out2 hdfimport.out3 SDSfloat2.hdf SDSfloat3.hdf ) #-- Copy all the hdfls tst files from the test directory into the source directory set (HDF4_LS_TEST_FILES ctxtr2.tst ctxtr3.tst cb32i2.tst cb32i3.tst cb16i2.tst cb16i3.tst cb32r2.tst cb32r3.tst cb64r2.tst cb64r3.tst cb64r2-n.tst cb64r3-n.tst ctxtr2_ris.tst cb64r2_ris.tst SDSfloat2.tst SDSfloat3.tst ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hdfimport_files") endforeach () foreach (h4_file ${HDF4_LS_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/testfiles/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hdfimport_files") endforeach () if (WIN32 AND MSVC_VERSION LESS 1900) HDFTEST_COPY_FILE("${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/hdfimport-w.out2" "${PROJECT_BINARY_DIR}/hdfimport.out2" "hdfimport_files") else () HDFTEST_COPY_FILE("${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/hdfimport.out2" "${PROJECT_BINARY_DIR}/hdfimport.out2" "hdfimport_files") endif () add_custom_target(hdfimport_files ALL COMMENT "Copying files needed by hdfimport tests" DEPENDS ${hdfimport_files_list}) #-- hdfimporttest set (hdfimporttest_SRCS ${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/hdfimporttest.c ) add_executable (hdfimporttest ${hdfimporttest_SRCS}) target_include_directories(hdfimporttest PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdfimporttest STATIC) target_link_libraries (hdfimporttest PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfimporttest SHARED) target_link_libraries (hdfimporttest PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () #-- gen_sds_floats set (gen_sds_floats_SRCS ${HDF4_MFHDF_HDFIMPORT_SOURCE_DIR}/gen_sds_floats.c ) add_executable (gen_sds_floats ${gen_sds_floats_SRCS}) target_include_directories(gen_sds_floats PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (gen_sds_floats STATIC) target_link_libraries (gen_sds_floats PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (gen_sds_floats SHARED) target_link_libraries (gen_sds_floats PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () ############################################################################## ############################################################################## ### T H E T E S T S M A C R O S ### ############################################################################## ############################################################################## macro (ADD_H4_TEST resultfile resultcode testtfile testtype) if (NOT ${testtype} STREQUAL "") if (${testtype} STREQUAL "N") add_test (NAME HIMPORT-${testtfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${resultfile} -n -o ${testtfile}.hdf) endif () if (${testtype} STREQUAL "R") add_test (NAME HIMPORT-${testtfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${resultfile} -o ${testtfile}.hdf -raster ${ARGN}) endif () else () add_test (NAME HIMPORT-${testtfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${resultfile} -o ${testtfile}.hdf) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HIMPORT-${testtfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HIMPORT-${testtfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () if (HDF4_ENABLE_USING_MEMCHECKER) add_test (NAME HIMPORTLS-${testtfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -l ${testtfile}.hdf) else () add_test ( NAME HIMPORTLS-${testtfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-l;${testtfile}.hdf" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${testtfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n" -D "TEST_REFERENCE=${testtfile}.tst" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () set_tests_properties (HIMPORTLS-${testtfile} PROPERTIES DEPENDS HIMPORT-${testtfile} LABELS ${PROJECT_NAME}) set (last_test "HIMPORTLS-${testtfile}") endmacro () macro (ADD_H4_TEST_OUT resultfile resultcode) add_test (NAME HIMPORT-OUT-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${resultfile}.hdf -o ${resultfile}.out) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HIMPORT-OUT-${resultfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HIMPORT-OUT-${resultfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () if (HDF4_ENABLE_USING_MEMCHECKER) add_test (NAME HIMPORTLS-OUT-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${resultfile}.out) else () add_test ( NAME HIMPORTLS-OUT-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${resultfile}.out" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=${resultfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n" -D "TEST_REFERENCE=${resultfile}.tst" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () set_tests_properties (HIMPORTLS-OUT-${resultfile} PROPERTIES DEPENDS HIMPORT-OUT-${resultfile} LABELS ${PROJECT_NAME}) set (last_test "HIMPORTLS-OUT-${resultfile}") endmacro () macro (ADD_H4_TEST_ED testfile resultfile resultcode) if (HDF4_ENABLE_USING_MEMCHECKER) add_test (NAME HIMPORT-EDIT COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -batch) else () add_test ( NAME HIMPORT-EDIT COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-batch" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_INPUT=${testfile}" -D "TEST_OUTPUT=${testfile}.tmp" -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=${resultfile}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HIMPORT-EDIT PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HIMPORT-EDIT PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HIMPORT-EDIT") endmacro () ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME hdfimport-clear-refs COMMAND ${CMAKE_COMMAND} -E remove ctxtr2 ctxtr3 cb32i2 cb32i3 cb16i2 cb16i3 cb32r2 cb32r3 cb64r2 cb64r3 cb64r2-n cb64r3-n ctxtr2_ris cb64r2_ris ctxtr2.hdf ctxtr3.hdf cb32i2.hdf cb32i3.hdf cb16i2.hdf cb16i3.hdf cb32r2.hdf cb32r3.hdf cb64r2.hdf cb64r3.hdf cb64r2-n.hdf cb64r3-n.hdf ctxtr2_ris.hdf cb64r2_ris.hdf ctxtr2.tmp ctxtr3.tmp cb32i2.tmp cb32i3.tmp cb16i2.tmp cb16i3.tmp cb32r2.tmp cb32r3.tmp cb64r2.tmp cb64r3.tmp cb64r2-n.tmp cb64r3-n.tmp ctxtr2_ris.tmp cb64r2_ris.tmp SDSfloat2.tmp SDSfloat3.tmp ctxtr2.tmp.err ctxtr3.tmp.err cb32i2.tmp.err cb32i3.tmp.err cb16i2.tmp.err cb16i3.tmp.err cb32r2.tmp.err cb32r3.tmp.err cb64r2.tmp.err cb64r3.tmp.err cb64r2-n.tmp.err cb64r3-n.tmp.err ctxtr2_ris.tmp.err cb64r2_ris.tmp.err SDSfloat2.tmp.err SDSfloat3.tmp.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (hdfimport-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (hdfimport-clear-refs PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "hdfimport-clear-refs") add_test (NAME HIMPORTtest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HIMPORTtest PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HIMPORTtest PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HIMPORTtest") # "Testing for 32-bit floating point ASCII (2D data)" ADD_H4_TEST (ctxtr2 0 ctxtr2 "") # "Testing for 32-bit floating point ASCII (3D data)" ADD_H4_TEST (ctxtr3 0 ctxtr3 "") # "Testing for 32-bit integer binary (2D data)" ADD_H4_TEST (cb32i2 0 cb32i2 "") # "Testing for 32-bit integer binary (3D data)" ADD_H4_TEST (cb32i3 0 cb32i3 "") # "Testing for 16-bit integer binary (2D data)" ADD_H4_TEST (cb16i2 0 cb16i2 "") # "Testing for 16-bit integer (3D data)" ADD_H4_TEST (cb16i3 0 cb16i3 "") # "Testing for 32-bit floating point binary (2D data)" ADD_H4_TEST (cb32r2 0 cb32r2 "") # "Testing for 32-bit floating point binary (3D data)" ADD_H4_TEST (cb32r3 0 cb32r3 "") # "Testing for 64-bit floating point binary (2D data) - Default Behaviour (Conversion to 32 bit FP SDS)" ADD_H4_TEST (cb64r2 0 cb64r2 "") # "Testing for 64-bit floating point binary (3D data) - Default Behaviour (Conversion to 32-bit FP SDS)" ADD_H4_TEST (cb64r3 0 cb64r3 "") # "Testing for 64-bit floating point binary (2D data) - Conversion to 64-bit FP SDS" ADD_H4_TEST (cb64r2 0 cb64r2-n "N") # "Testing for 64-bit floating point binary (3D data) - Conversion to 64-bit FP SDS" ADD_H4_TEST (cb64r3 0 cb64r3-n "N") # "Testing for raster options" ADD_H4_TEST (ctxtr2 0 ctxtr2_ris "R" -e 50 50) ADD_H4_TEST (cb64r2 0 cb64r2_ris "R" -i 50 50 -f) # # test with hdf files # "Testing for reading from hdf files" ADD_H4_TEST_OUT (SDSfloat2 0) ADD_H4_TEST_OUT (SDSfloat3 0) ADD_H4_TEST_ED (hdfimport.input1 hdfimport.out2 0) hdf4-hdf4.3.1/mfhdf/hdfimport/Makefile.am000066400000000000000000000030441503061704500201440ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. hdfimport_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(hdfimport_INCLUDES) $(DEFINES) ## Add hdfimport specific linker flags here hdfimport_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Libraries to link against ## ############################################################################# LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = hdfimport ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# TEST_PROG = hdfimporttest TEST_SCRIPT = testutil.sh check_PROGRAMS = hdfimporttest gen_sds_floats check_SCRIPTS = testutil.sh include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/hdfimport/Makefile.in000066400000000000000000001333301503061704500201570ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = hdfimport$(EXEEXT) check_PROGRAMS = hdfimporttest$(EXEEXT) gen_sds_floats$(EXEEXT) TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT) subdir = mfhdf/hdfimport ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = testutil.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) gen_sds_floats_SOURCES = gen_sds_floats.c gen_sds_floats_OBJECTS = gen_sds_floats.$(OBJEXT) gen_sds_floats_LDADD = $(LDADD) gen_sds_floats_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = hdfimport_SOURCES = hdfimport.c hdfimport_OBJECTS = hdfimport.$(OBJEXT) hdfimport_LDADD = $(LDADD) hdfimport_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) hdfimport_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdfimport_LDFLAGS) $(LDFLAGS) -o $@ hdfimporttest_SOURCES = hdfimporttest.c hdfimporttest_OBJECTS = hdfimporttest.$(OBJEXT) hdfimporttest_LDADD = $(LDADD) hdfimporttest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/gen_sds_floats.Po \ ./$(DEPDIR)/hdfimport.Po ./$(DEPDIR)/hdfimporttest.Po 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_CC_1 = 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_CCLD_1 = SOURCES = gen_sds_floats.c hdfimport.c hdfimporttest.c DIST_SOURCES = gen_sds_floats.c hdfimport.c hdfimporttest.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = hdfimporttest$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/testutil.sh.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog hdfimport_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(hdfimport_INCLUDES) $(DEFINES) hdfimport_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ############################################################################# LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ ############################################################################# ############################################################################# TEST_PROG = hdfimporttest TEST_SCRIPT = testutil.sh check_SCRIPTS = testutil.sh # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/hdfimport/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/hdfimport/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testutil.sh: $(top_builddir)/config.status $(srcdir)/testutil.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 clean-checkPROGRAMS: @list='$(check_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 gen_sds_floats$(EXEEXT): $(gen_sds_floats_OBJECTS) $(gen_sds_floats_DEPENDENCIES) $(EXTRA_gen_sds_floats_DEPENDENCIES) @rm -f gen_sds_floats$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gen_sds_floats_OBJECTS) $(gen_sds_floats_LDADD) $(LIBS) hdfimport$(EXEEXT): $(hdfimport_OBJECTS) $(hdfimport_DEPENDENCIES) $(EXTRA_hdfimport_DEPENDENCIES) @rm -f hdfimport$(EXEEXT) $(AM_V_CCLD)$(hdfimport_LINK) $(hdfimport_OBJECTS) $(hdfimport_LDADD) $(LIBS) hdfimporttest$(EXEEXT): $(hdfimporttest_OBJECTS) $(hdfimporttest_DEPENDENCIES) $(EXTRA_hdfimporttest_DEPENDENCIES) @rm -f hdfimporttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hdfimporttest_OBJECTS) $(hdfimporttest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_sds_floats.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfimport.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfimporttest.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? hdfimporttest.log: hdfimporttest$(EXEEXT) @p='hdfimporttest$(EXEEXT)'; \ b='hdfimporttest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/gen_sds_floats.Po -rm -f ./$(DEPDIR)/hdfimport.Po -rm -f ./$(DEPDIR)/hdfimporttest.Po -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-binPROGRAMS 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 ./$(DEPDIR)/gen_sds_floats.Po -rm -f ./$(DEPDIR)/hdfimport.Po -rm -f ./$(DEPDIR)/hdfimporttest.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/hdfimport/SDSfloat2.hdf000066400000000000000000000060541503061704500203400ustar00rootroot00000000000000È j\¾ ÆØ« žª ¢<­ Þ!« ÿª <­ ?!«ÿÿÿÿÿÿÿÿª `7j —½ ›Ð ±­ Á<­ ý.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006BÈBÈCHCHC–CÈBÈBÈCHCHC–CÈBÈBÈCHCHC–CÈC–C–CÈC–CÈC–C–CÈC–CÈC–C–CÈC–CÈDDC–CÈCúCúDDC–CÈDDC–CÈ ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0 SDS variableSDSVar  j j j ¾j ½ Ñ ­­ª¾j½Ð  SDStemplateVar0.0­­­ SDSfloat2.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/hdfimport/SDSfloat3.hdf000066400000000000000000000065731503061704500203470ustar00rootroot00000000000000È j\¾ ư« vª z<­ ¶!« ת Û<­ !« 8ª <<­ x!« ÿÿÿÿÿÿÿÿª ™7j н ÔÐ ò­ F­ H2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006BÈBÈCHCHC–CÈBÈBÈCHCHC–CÈBÈBÈCHCHC–CÈC–C–CÈC–CÈC–C–CÈC–CÈC–C–CÈC–CÈDDC–CÈCúCúDDC–CÈDDC–CÈ?€?€@@@@@€?€?€@@@@@€?€?€@@@@@€@@@@@€@@@€@@@@@€@@@€@@@@@€@@@€@À@À@@@€@ @ @À@À@@@€@À@À@@@€ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0 ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ªfakeDim2Dim0.0 SDS variableSDSVar  j j j j ¾j ½ Ñ ­­­ª¾j½Ð  SDStemplate againVar0.0­­­­ SDSfloat3.hdfCDF0.0hdf4-hdf4.3.1/mfhdf/hdfimport/crtSDSfloats.c000066400000000000000000000107321503061704500206310ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "mfhdf.h" #define FILE2_NAME "SDSfloat2.hdf" #define FILE3_NAME "SDSfloat3.hdf" #define SDS1_NAME "SDStemplate" #define SDS2_NAME "SDStemplate again" #define X_LENGTH 6 #define Y_LENGTH 9 #define Z_LENGTH 2 #define RANK2 2 /* Number of dimensions of the SDS */ #define RANK3 3 /* Number of dimensions of the SDS */ main() { /************************* Variable declaration ************************/ int32 sd2_id, sd3_id, sds1_id, sds2_id; int32 dim2_sizes[2]; /* sizes of the 2-dim SDS dimensions */ int32 dim3_sizes[3]; /* sizes of the 3-dim SDS dimensions */ int32 start2[2], start3[3]; /* start arrays for both SDSs */ intn status; int32 dim_id, dim_index, /* dimension id and index */ size, data_type, /* dimension's size and data type */ nattrs; /* number of attributes */ char dim_name[20]; float32 in2_data[X_LENGTH][Y_LENGTH] = { /* input for 2-dim SDS */ 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 0.0, 0.0, 600.0, 600.0, 300.0, 400.0, 500.0, 500.0, 600.0, 600.0, 300.0, 400.0, 0.0, 0.0, 600.0, 600.0, 300.0, 400.0}; float32 in3_data[X_LENGTH][Y_LENGTH][Z_LENGTH] = { /* input for 3-dim SDS */ 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 0.0, 0.0, 600.0, 600.0, 300.0, 400.0, 500.0, 500.0, 600.0, 600.0, 300.0, 400.0, 0.0, 0.0, 600.0, 600.0, 300.0, 400.0, 1.0, 1.0, 2.0, 2.0, 3.0, 4.0, 1.0, 1.0, 2.0, 2.0, 3.0, 4.0, 1.0, 1.0, 2.0, 2.0, 3.0, 4.0, 3.0, 3.0, 0.0, 4.0, 3.0, 4.0, 3.0, 3.0, 0.0, 4.0, 3.0, 4.0, 3.0, 3.0, 0.0, 4.0, 3.0, 4.0, 0.0, 0.0, 6.0, 6.0, 3.0, 4.0, 5.0, 5.0, 6.0, 6.0, 3.0, 4.0, 0.0, 0.0, 6.0, 6.0, 3.0, 4.0, }; /********************* End of variable declaration ***********************/ /* * Create the files and initialize the SD interface. */ sd2_id = SDstart(FILE2_NAME, DFACC_CREATE); sd3_id = SDstart(FILE3_NAME, DFACC_CREATE); /* * Define the dimensions/origins of the two SDSs to be created. */ dim2_sizes[0] = Y_LENGTH; dim2_sizes[1] = X_LENGTH; dim3_sizes[0] = Z_LENGTH; dim3_sizes[1] = Y_LENGTH; dim3_sizes[2] = X_LENGTH; start2[0] = start2[1] = 0; start3[0] = start3[1] = start3[2] = 0; /* * Create two data sets, SDS1_NAME and SDS2_NAME, with type DFNT_FLOAT32 * in the two files, FILE2_NAME and FILE3_NAME. */ sds1_id = SDcreate(sd2_id, SDS1_NAME, DFNT_FLOAT32, RANK2, dim2_sizes); sds2_id = SDcreate(sd3_id, SDS2_NAME, DFNT_FLOAT32, RANK3, dim3_sizes); /* Write data to the SDSs */ status = SDwritedata(sds1_id, start2, NULL, dim2_sizes, (void *)in2_data); status = SDwritedata(sds2_id, start3, NULL, dim3_sizes, (void *)in3_data); /* * Terminate access to the data sets. */ status = SDendaccess(sds1_id); status = SDendaccess(sds2_id); /* * Terminate access to the SD interface and close the files. */ status = SDend(sd2_id); status = SDend(sd3_id); } hdf4-hdf4.3.1/mfhdf/hdfimport/gen_sds_floats.c000066400000000000000000000165571503061704500212630ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #define FILE2_NAME "SDSfloat2.hdf" #define FILE3_NAME "SDSfloat3.hdf" #define SDS1_NAME "SDStemplate" #define SDS2_NAME "SDStemplate again" #define X_LENGTH 6 #define Y_LENGTH 9 #define Z_LENGTH 2 #define RANK2 2 /* Number of dimensions of the SDS */ #define RANK3 3 /* Number of dimensions of the SDS */ int main() { /************************* Variable declaration ************************/ int32 sd2_id, sd3_id, sds1_id, sds2_id; int32 dim2_sizes[2]; /* sizes of the 2-dim SDS dimensions */ int32 dim3_sizes[3]; /* sizes of the 3-dim SDS dimensions */ int32 start2[2], start3[3]; /* start arrays for both SDSs */ float32 in2_data[X_LENGTH][Y_LENGTH] = {/* input for 2-dim SDS */ {100.0, 100.0, 200.0, 200.0, 300.0, 400.0, 100.0, 100.0, 200.0}, {200.0, 300.0, 400.0, 100.0, 100.0, 200.0, 200.0, 300.0, 400.0}, {300.0, 300.0, 0.0, 400.0, 300.0, 400.0, 300.0, 300.0, 0.0}, {400.0, 300.0, 400.0, 300.0, 300.0, 0.0, 400.0, 300.0, 400.0}, {0.0, 0.0, 600.0, 600.0, 300.0, 400.0, 500.0, 500.0, 600.0}, {600.0, 300.0, 400.0, 0.0, 0.0, 600.0, 600.0, 300.0, 400.0}}; float32 in3_data[X_LENGTH][Y_LENGTH][Z_LENGTH] = {/* input for 3-dim SDS */ {{100.0, 100.0}, {200.0, 200.0}, {300.0, 400.0}, {100.0, 100.0}, {200.0, 200.0}, {300.0, 400.0}, {100.0, 100.0}, {200.0, 200.0}, {300.0, 400.0}}, {{300.0, 300.0}, {0.0, 400.0}, {300.0, 400.0}, {300.0, 300.0}, {0.0, 400.0}, {300.0, 400.0}, {300.0, 300.0}, {0.0, 400.0}, {300.0, 400.0}}, {{0.0, 0.0}, {600.0, 600.0}, {300.0, 400.0}, {500.0, 500.0}, {600.0, 600.0}, {300.0, 400.0}, {0.0, 0.0}, {600.0, 600.0}, {300.0, 400.0}}, {{1.0, 1.0}, {2.0, 2.0}, {3.0, 4.0}, {1.0, 1.0}, {2.0, 2.0}, {3.0, 4.0}, {1.0, 1.0}, {2.0, 2.0}, {3.0, 4.0}}, {{3.0, 3.0}, {0.0, 4.0}, {3.0, 4.0}, {3.0, 3.0}, {0.0, 4.0}, {3.0, 4.0}, {3.0, 3.0}, {0.0, 4.0}, {3.0, 4.0}}, {{0.0, 0.0}, {6.0, 6.0}, {3.0, 4.0}, {5.0, 5.0}, {6.0, 6.0}, {3.0, 4.0}, {0.0, 0.0}, {6.0, 6.0}, {3.0, 4.0}}}; /********************* End of variable declaration ***********************/ /* * Create the files and initialize the SD interface. */ sd2_id = SDstart(FILE2_NAME, DFACC_CREATE); sd3_id = SDstart(FILE3_NAME, DFACC_CREATE); /* * Define the dimensions/origins of the two SDSs to be created. */ dim2_sizes[0] = Y_LENGTH; dim2_sizes[1] = X_LENGTH; dim3_sizes[0] = Z_LENGTH; dim3_sizes[1] = Y_LENGTH; dim3_sizes[2] = X_LENGTH; start2[0] = start2[1] = 0; start3[0] = start3[1] = start3[2] = 0; /* * Create two data sets, SDS1_NAME and SDS2_NAME, with type DFNT_FLOAT32 * in the two files, FILE2_NAME and FILE3_NAME. */ sds1_id = SDcreate(sd2_id, SDS1_NAME, DFNT_FLOAT32, RANK2, dim2_sizes); sds2_id = SDcreate(sd3_id, SDS2_NAME, DFNT_FLOAT32, RANK3, dim3_sizes); /* Write data to the SDSs */ SDwritedata(sds1_id, start2, NULL, dim2_sizes, (void *)in2_data); SDwritedata(sds2_id, start3, NULL, dim3_sizes, (void *)in3_data); /* * Terminate access to the data sets. */ SDendaccess(sds1_id); SDendaccess(sds2_id); /* * Terminate access to the SD interface and close the files. */ SDend(sd2_id); SDend(sd3_id); return EXIT_SUCCESS; } hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport-w.out2000066400000000000000000000103241503061704500211620ustar00rootroot00000000000000 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+001 1.200000e+001 1.300000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+001 5.600000e+001 6.100000e+001 6.600000e+001 16: 7.100000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+001 1.200000e+001 1.300000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+001 5.600000e+001 6.100000e+001 6.600000e+001 16: 7.100000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+001 1.200000e+001 1.300000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+001 5.600000e+001 6.100000e+001 6.600000e+001 16: 7.100000e+001 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+001 1.200000e+001 1.300000e+001 (2) Compressed Image : (Tag 303) Ref 2 0: 137 1 144 60 144 120 137 179 8: 137 1 144 60 144 120 137 179 16: 137 1 144 60 144 120 137 179 24: 137 1 144 60 144 120 137 179 32: 137 1 144 60 144 120 137 179 40: 137 1 144 60 144 120 137 179 48: 137 1 144 60 144 120 137 179 56: 137 1 144 60 144 120 137 179 64: 137 1 144 60 144 120 137 179 72: 137 1 144 60 144 120 137 179 80: 137 1 144 60 144 120 137 179 88: 137 1 144 60 144 120 137 179 96: 137 1 144 60 144 120 137 179 104: 137 31 144 90 144 150 137 209 112: 137 31 144 90 144 150 137 209 120: 137 31 144 90 144 150 137 209 128: 137 31 144 90 144 150 137 209 136: 137 31 144 90 144 150 137 209 144: 137 31 144 90 144 150 137 209 152: 137 31 144 90 144 150 137 209 160: 137 31 144 90 144 150 137 209 168: 137 31 144 90 144 150 137 209 176: 137 31 144 90 144 150 137 209 184: 137 31 144 90 144 150 137 209 192: 137 31 144 90 144 150 137 209 200: 137 31 144 90 144 150 137 209 208: 137 31 144 90 144 150 137 209 216: 137 31 144 90 144 150 137 209 224: 137 31 144 90 144 150 137 209 232: 137 31 144 90 144 150 137 209 240: 137 31 144 90 144 150 137 209 248: 137 31 144 90 144 150 137 209 256: 137 31 144 90 144 150 137 209 264: 137 31 144 90 144 150 137 209 272: 137 31 144 90 144 150 137 209 280: 137 31 144 90 144 150 137 209 288: 137 31 144 90 144 150 137 209 296: 137 60 144 120 144 179 137 239 304: 137 60 144 120 144 179 137 239 312: 137 60 144 120 144 179 137 239 320: 137 60 144 120 144 179 137 239 328: 137 60 144 120 144 179 137 239 336: 137 60 144 120 144 179 137 239 344: 137 60 144 120 144 179 137 239 352: 137 60 144 120 144 179 137 239 360: 137 60 144 120 144 179 137 239 368: 137 60 144 120 144 179 137 239 376: 137 60 144 120 144 179 137 239 384: 137 60 144 120 144 179 137 239 392: 137 60 144 120 144 179 137 239 400: hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport.c000066400000000000000000003326001503061704500202530ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Name: * hdfimport (previously fp2hdf) * * Purpose: * To convert floating point and/or integer data to HDF Scientific Data Set (SDS) * and/or 8-bit Raster Image Set (RIS8) format, storing the results * in an HDF file. The image data can be scaled about the mean value. * * ------------- * floating point data | | ----------> RIS8 * (SDS, ASCII text, or ---> | hdfimport | and/or * native floating point) | | ----------> SDS * ------------- * AND / OR * --------------- * integer data | | * (ASCII text, or ---> | hdfimport | ----------> SDS * binary integer) | | * -------------- * Synopsis: * hdfimport -h[elp], OR * hdfimport [ [-t[ype] | -n] [ [-t[ype] | -n ]]...] * -o[utfile] [-r[aster] [ras_opts ...]] [-f[loat]] * * -h[elp]: * Print this summary of usage, and exit. * * : * Name of the input file(s), containing a single * two-dimensional or three-dimensional floating point array * in either ASCII text, native floating point, native integer * or HDF SDS format. If an HDF file is used for input, it * must contain an SDS. The SDS need only contain a dimension * record and the data, but if it also contains maximum and * minimum values and/or scales for each axis, these will * be used. If the input format is ASCII text or native * floating point or native integer, see "Notes" below on * how it must be organized. * * -t[ype] : * Optionally used for every input ASCII file to specify the * data type of the data-set to be written. If not specified * default data type is 32-bit floating point. * can be any of the following: FP32 (default), FP64, INT32 * INT16, INT8. It can be used only with ASCII files. * * -n: * This option is to be used only if the binary input file * contains 64-bit floating point data and the default * behaviour (default behaviour is to write it to a 32-bit * floating point data-set) should be overridden to write * it to a 64-bit floating point data-set. * * -o[utfile] : * Data from one or more input files are stored as one or * more data sets and/or images in one HDF output file, * "outfile". * * -r[aster]: * Store output as a raster image set in the output file. * * -f[loat]: * Store output as a scientific data set in the output file. * This is the default if the "-r" option is not specified. * * ras_opts ... * * -e[xpand] []: * Expand float data via pixel replication to produce the * image(s). "horiz" and "vert" give the horizontal and * vertical resolution of the image(s) to be produced; and * optionally, "depth" gives the number of images or depth * planes (for 3D input data). * * -i[nterp] []: * Apply bilinear, or trilinear, interpolation to the float * data to produce the image(s). "horiz", "vert", and "depth" * must be greater than or equal to the dimensions of the * original dataset. * If max and min are supplied in input file, this option clips * values that are greater than max or less then min, setting * them to the max and min, respectively. * * -p[alfile] : * Store the palette with the image. Get the palette from * "palfile"; which may be an HDF file containing a palette, * or a file containing a raw palette. * * -m[ean] : * If a floating point mean value is given, the image will be * scaled about the mean. The new extremes (newmax and newmin), * as given by: * * newmax = mean + max(abs(max-mean), abs(mean-min)) * newmin = mean - max(abs(max-mean), abs(mean-min)) * * will be equidistant from the mean value. If no mean value * is given, then the mean will be: 0.5 * (max + min) * * Notes: * If the input file format is ASCII text or native floating point or native integer(32-bit, * 16-bit, 8-bit), it * must have the following input fields: * * format * nplanes * nrows * ncols * max_value * min_value * [plane1 plane2 plane3 ...] * row1 row2 row3 ... * col1 col2 col3 ... * data1 data2 data3 ... * ... * * Where: * format: * Format designator ("TEXT", "FP32", "FP64", "IN32", "IN16", "IN08"). * nplanes, nrows, ncols: * Dimensions are specified in the order slowest changing dimension first. * ncols is dimension of the fastest changing dimension. (horizontal axis * or X-axis in a 3D scale) * nrows corresponds to dimension of the vertical axis or Y-axis in a 3D * scale. * nplanes corresponds to the slowest changing dimension i.e. dimension of * the depth axis or the Z-axis in a 3D scale ("1" for 2D input). * max_value: * Maximum data value. * min_value: * Minimum data value. * plane1, plane2, plane3, ...: * Scales for depth axis. * row1, row2, row3, ...: * Scales for the vertical axis. * col1, col2, col3, ...: * Scales for the horizontal axis. * data1, data2, data3, ...: * The data ordered by rows, left to right and top * to bottom; then optionally, ordered by planes, * front to back. * * For FP32 and FP64 input format, "format", "nplanes", "nrows", "ncols", * and "nplanes" are native integers; where "format" is the integer * representation of the appropriate 4-character string (0x46503332 for * "FP32" and 0x46503634 for "FP64"). The remaining input fields are * composed of native 32-bit floating point values for FP32 input format, * or native 64-bit floating point values for FP64 input format. * * For IN32, IN16 and IN08 input format, "format", "nplanes", "nrows", "ncols", * and "nplanes" are native integers; where "format" is the integer * representation of the appropriate 4-character string. The remaining input * fields are composed of native 32-bit integer values for IN32 input format, * or native 16-bit integer values for IN16 input format or native 8-bit * integer values for IN08 input format. * */ #include #include #include #include #include #include "hdf.h" #include "hfile_priv.h" #include "mfhdf.h" #ifdef H4_HAVE_SYS_STAT_H #include #endif #ifdef H4_HAVE_FCNTL_H #include #endif /* * global macros */ #define EXPAND 1 /* -e: expand image with pixel replication */ #define INTERP 2 /* -i: expand image with interpolation */ #define NAME_LEN 255 /* * structure definition to associate input files with the output data types */ struct infilesformat { char filename[NAME_LEN]; int outtype; /* if the value is "" output type will be FP32. Applicable only to TEXT Files*/ int32 handle; /* added to facilitate the use of SD interface -BMR 2006/08/18 */ }; /* * structure definition for command line options */ struct Options { struct infilesformat infiles[30]; /* structure to hold the list of input file names. Limited to 30*/ char outfile[32]; /* output file name */ char palfile[32]; /* palette file name, if any */ int fcount; /* number of input files */ int to_float; /* float output is desired */ int to_image; /* image output is desired */ int to_int; int pal; /* output palette with image */ int ctm; /* color transform method: EXPAND or INTERP */ int exh; /* horizontal expansion factor */ int exv; /* vertical expansion factor */ int exd; /* depth expansion factor */ int hres; /* horizontal resolution of output image */ int vres; /* vertical resolution of output image */ int dres; /* depth resolution of output image */ int mean; /* scale image around a mean */ float32 meanval; /* mean value to scale the image around */ }; /* Additional Structures to handle different data types */ struct int16set /* variables for an INT 16 data set */ { int16 max; int16 min; int16 *hscale; int16 *vscale; int16 *dscale; }; struct int32set /* variables for an INT 32 data set */ { int32 max; int32 min; int32 *hscale; int32 *vscale; int32 *dscale; }; struct fp64set /* variables for a FLOAT 64 data set */ { float64 max; float64 min; float64 *hscale; float64 *vscale; float64 *dscale; }; struct int8set /* variables for an INT 8 data set */ { int8 max; int8 min; int8 *hscale; int8 *vscale; int8 *dscale; }; /* * structure definition for the input data */ struct Input { int is_hdf; /* HDF file format flag */ int is_text; /* ASCII text format flag */ int is_fp32; /* 32-bit native floating point format flag */ int is_fp64; /* 64-bit native floating point format flag */ int is_int32; /* 32-bit int */ int is_int16; /* 16-bit int */ int32 rank; /* number of input data dimensions */ int32 dims[3]; /* input dimensions - ncols, nrows, nplanes */ int is_vscale; /* vertical axis scales in the input */ int is_hscale; /* horizontal axis scales in the input */ int is_dscale; /* depth axis scales in the input */ float32 max; /* maximum value of the data */ float32 min; /* minimum value of the data */ float32 *hscale; /* horizontal scales for fp32*/ float32 *vscale; /* vertical scales for fp32*/ float32 *dscale; /* depth scales for fp32*/ struct int32set in32s; struct int16set in16s; struct int8set in8s; struct fp64set fp64s; void *data; /* input data */ int outtype; }; /* * structure definition for the output raster images */ struct Raster { int hres; /* horizontal resolution of the image */ int vres; /* vertical resolution of the image */ int dres; /* depth resolution of the image */ unsigned char *image; }; /* * constants to represent data types */ #define FP_32 0 #define FP_64 1 #define INT_32 2 #define INT_16 3 #define INT_8 4 #define NO_NE 5 /* * state table tokens */ #define FILENAME 0 /* filename */ #define OPT_o 1 /* output filename */ #define OPT_r 2 /* convert to image */ #define OPT_e 3 /* expand image via pixel replication */ #define OPT_i 4 /* make interpolated image */ #define OPT_num 5 /* resolution of enlarged image */ #define OPT_p 6 /* palette filename */ #define OPT_f 7 /* convert to float (default) */ #define OPT_h 8 /* request for explanation */ #define OPT_m 9 /* mean to scale around */ #define OPT_t 10 /* datatype of the SDS to be written */ #define OPT_n \ 11 /* for a FLOAT 64 binary input file to be accepted as FLOAT 64 SDS (default behaviour is writing it \ as FLOAT 32 SDS */ #define ERR 20 /* invalid token */ /* * state table for parsing the command line. */ static int state_table[19][12] = { /* token ordering: FILENAME OPT_o OPT_r OPT_e OPT_i OPT_num OPT_p OPT_f OPT_h OPT_m OPT_z */ /* state 0: start */ {1, ERR, ERR, ERR, ERR, ERR, ERR, ERR, 14, ERR, ERR, ERR}, /* state 1: input files */ {1, 2, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, 17, 18}, /* state 2: -o[utfile] */ {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 3: outfile */ {ERR, ERR, 4, ERR, ERR, ERR, ERR, 13, ERR, ERR, ERR, ERR}, /* state 4: -r[aster] */ {ERR, ERR, ERR, 5, 9, ERR, 10, 12, ERR, 15, ERR, ERR}, /* state 5: -e[xpand] */ {ERR, ERR, ERR, ERR, ERR, 6, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 6: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, 7, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 7: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, 8, 10, 12, ERR, 15, ERR, ERR}, /* state 8: -e[xpand] or -i[nterp] option argument */ {ERR, ERR, ERR, ERR, ERR, ERR, 10, 12, ERR, 15, ERR, ERR}, /* state 9: -i[nterp] */ {ERR, ERR, ERR, ERR, ERR, 6, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 10: -p[alfile] */ {11, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 11: palfile */ {ERR, ERR, ERR, 5, 9, ERR, ERR, 12, ERR, 15, ERR, ERR}, /* state 12: -f[loat] (after -r[aster]) */ {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 13: -f[loat] */ {ERR, ERR, 4, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 14: -h[elp] */ {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 15: -m[ean] */ {ERR, ERR, ERR, ERR, ERR, 16, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 16: mean */ {ERR, ERR, ERR, 5, 9, ERR, 10, 12, ERR, ERR, ERR, ERR}, /* state 17: output type for data set */ {1, 2, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, /* state 18: override default behaviour for FP 64 */ {1, 2, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR} }; /* static local functions */ static int gtoken(char *s); static int process(struct Options *opt); static int gfloat(char *infile, FILE *strm, float32 *fp32, struct Input *in); static int gint(char *infile, FILE *strm, int32 *ival, struct Input *in); static int isnum(char *s); static int gdata(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_maxmin); static int gdimen(struct infilesformat infile_info, struct Input *in, FILE *strm); static int gmaxmin(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_maxmin); static int gscale(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_scale); static int gtype(char *infile, struct Input *in, FILE **strm); static int indexes(float32 *scale, int dim, int *idx, int res); static int interp(struct Input *in, struct Raster *im); static int palette(char *palfile); static int pixrep(struct Input *in, struct Raster *im); /* * functions with non-integer return types */ void help(char *); void mean(struct Input *, struct Options *); void usage(char *); /* * Additional functions defined to incorporate the revisions (pkamat) */ static int gfloat64(char *infile, FILE *strm, float64 *fp64, struct Input *in); static int gint32(char *infile, FILE *strm, int32 *ival, struct Input *in); static int gint16(char *infile, FILE *strm, int16 *ival, struct Input *in); static int gint8(char *infile, FILE *strm, int8 *ival, struct Input *in); static int init_scales(struct Input *in); void fpdeallocate(struct Input *in, struct Raster *im, struct Options *opt); /* * Name: * main * * Purpose: * The driver for "hdfimport". * * Revision (pkamat): * Changes to the state table to handle -t option and the -n option. * Also, a different structure used for holding input files. */ int main(int argc, char *argv[]) { struct Options *opt = NULL; int i, k; int outfile_named = FALSE; int token; int state = 0; int flag = 0; char types[5][6] = {"FP32", "FP64", "INT32", "INT16", "INT8"}; const char *err1 = "Invalid number of arguments: %d.\n"; const char *err2 = "Error in state table.\n"; const char *err3 = "No output file given.\n"; const char *err4 = "Program aborted.\n"; const char *err5 = "Cannot allooacte memory.\n"; if (NULL == (opt = (struct Options *)calloc(1, sizeof(struct Options)))) { fprintf(stderr, "%s", err5); goto err; } /* set 'stdout' and 'stderr' to line-buffering mode */ (void)HDsetvbuf(stderr, (char *)NULL, _IOLBF, 0); (void)HDsetvbuf(stdout, (char *)NULL, _IOLBF, 0); /* * validate the number of command line arguments */ if (argc < 2) { fprintf(stderr, err1, argc); usage(argv[0]); goto err; } opt->to_image = FALSE; /* default: no image */ opt->to_float = FALSE; /* default: make float if no image */ /* Set FALSE here. Will be set TRUE */ /* after confirming image option is not set. */ opt->ctm = EXPAND; /* default: pixel replication */ opt->hres = 0; /* default: no expansion values */ opt->vres = 0; opt->dres = 0; opt->pal = FALSE; /* default: no palette */ opt->mean = FALSE; /* default: no mean given */ opt->fcount = 0; /* to count number of input files */ /* * parse the command line */ for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-V") == 0) { printf("%s, %s\n\n", argv[0], LIBVER_STRING); exit(0); } if ((token = gtoken(argv[i])) == ERR) { usage(argv[0]); goto err; } state = state_table[state][token]; switch (state) { case 1: /* counting input files */ (void)strcpy(opt->infiles[opt->fcount].filename, argv[i]); opt->infiles[opt->fcount].outtype = NO_NE; opt->fcount++; break; case 2: /* -o found; look for outfile */ break; case 3: /* get outfile name */ (void)strcpy(opt->outfile, argv[i]); outfile_named = TRUE; break; case 4: /* -r found */ opt->to_image = TRUE; break; case 5: /* -e found */ opt->ctm = EXPAND; break; case 6: /* horizontal resolution */ opt->hres = atoi(argv[i]); break; case 7: /* vertical resolution */ opt->vres = atoi(argv[i]); break; case 8: /* depth resolution */ opt->dres = atoi(argv[i]); break; case 9: /* -i found */ opt->ctm = INTERP; break; case 10: /* -p found */ opt->pal = TRUE; break; case 11: /* get pal filename */ (void)strcpy(opt->palfile, argv[i]); break; case 12: /* -f found (after a -r) */ case 13: /* -f found (no -r yet) */ opt->to_float = TRUE; break; case 14: /* -h found; help, then exit */ help(argv[0]); exit(0); case 15: /* -m found */ opt->mean = TRUE; break; case 16: /* mean value */ opt->meanval = (float32)atof(argv[i]); break; case 17: /* -t found */ i++; flag = 0; for (k = 0; ((k <= 4) && (!flag)); k++) if (!strcmp(argv[i], types[k])) flag = 1; if (flag) opt->infiles[opt->fcount - 1].outtype = k - 1; else { usage(argv[0]); goto err; } break; case 18: /* -n found */ opt->infiles[opt->fcount - 1].outtype = FP_64; break; case ERR: /* command syntax error */ default: fprintf(stderr, "%s", err2); usage(argv[0]); goto err; } } /* * make sure an output file was specified */ if (!outfile_named) { fprintf(stderr, "%s", err3); usage(argv[0]); goto err; } if (!opt->to_image) opt->to_float = TRUE; /* * process the input files */ if (process(opt)) goto err; free(opt); return EXIT_SUCCESS; err: free(opt); fprintf(stderr, "%s", err4); return EXIT_FAILURE; } /* * Name: * gdata * * Purpose: * Get the input data. * * Revision(pkamat): * Modified to read in data of type INT 32, INT 16, INT 8 * in addition to FP 32 and FP 64. * Revision: (bmribler - 2006/8/18) * Replaced first parameter with 'struct infilesformat' to use both * the file name and the SD identifier (handle.) */ static int gdata(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_maxmin) { int32 i, j, k; float32 *fp32; int32 *in32; int16 *in16; float64 *fp64; int8 *in8; int32 hdfdims[3], start[3]; /* order: ZYX or YX */ int32 sd_id, sds_id, sd_index; int32 len = in->dims[0] * in->dims[1] * in->dims[2]; char infile[NAME_LEN]; intn status; const char *err1 = "Unable to get input data from file: %s.\n"; /* * extract the input data from the input file */ if (in->is_hdf == TRUE) { sd_id = infile_info.handle; strcpy(infile, infile_info.filename); sd_index = 0; sds_id = SDselect(sd_id, sd_index); /* * hdfdims is ordered: ZYX or YX * in->dims is ordered: XYZ */ if (in->rank == 2) { hdfdims[0] = in->dims[1]; hdfdims[1] = in->dims[0]; start[0] = start[1] = 0; } else { hdfdims[0] = in->dims[2]; hdfdims[1] = in->dims[1]; hdfdims[2] = in->dims[0]; start[0] = start[1] = start[2] = 0; } status = SDreaddata(sds_id, start, NULL, hdfdims, in->data); if (status == FAIL) { fprintf(stderr, err1, infile); goto err; } } else { if (in->outtype == FP_32) { for (k = 0, fp32 = (float32 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, fp32++) { if (gfloat(infile, strm, fp32, in)) { fprintf(stderr, err1, infile); goto err; } } } } if (*is_maxmin == FALSE) { in->min = in->max = *(float32 *)in->data; for (i = 1; i < len; i++) { if (((float32 *)in->data)[i] > in->max) in->max = ((float32 *)in->data)[i]; if (((float32 *)in->data)[i] < in->min) in->min = ((float32 *)in->data)[i]; } *is_maxmin = TRUE; } } if (in->outtype == INT_32) { for (k = 0, in32 = (int32 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, in32++) { if (gint32(infile, strm, in32, in)) { fprintf(stderr, err1, infile); goto err; } } } } if (*is_maxmin == FALSE) { in->in32s.min = in->in32s.max = *(int32 *)in->data; for (i = 1; i < len; i++) { if (((int32 *)in->data)[i] > in->in32s.max) in->in32s.max = ((int32 *)in->data)[i]; if (((int32 *)in->data)[i] < in->in32s.min) in->in32s.min = ((int32 *)in->data)[i]; } *is_maxmin = TRUE; } } if (in->outtype == INT_16) { for (k = 0, in16 = (int16 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, in16++) { if (gint16(infile, strm, in16, in)) { fprintf(stderr, err1, infile); goto err; } } } } if (*is_maxmin == FALSE) { in->in16s.min = in->in16s.max = *(int16 *)in->data; for (i = 1; i < len; i++) { if (((int16 *)in->data)[i] > in->in16s.max) in->in16s.max = ((int16 *)in->data)[i]; if (((int16 *)in->data)[i] < in->in16s.min) in->in16s.min = ((int16 *)in->data)[i]; } *is_maxmin = TRUE; } } if (in->outtype == INT_8) { for (k = 0, in8 = (int8 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, in8++) { if (gint8(infile, strm, in8, in)) { fprintf(stderr, err1, infile); goto err; } } } } if (*is_maxmin == FALSE) { in->in8s.min = in->in8s.max = *(int8 *)in->data; for (i = 1; i < len; i++) { if (((int8 *)in->data)[i] > in->in8s.max) in->in8s.max = ((int8 *)in->data)[i]; if (((int8 *)in->data)[i] < in->in8s.min) in->in8s.min = ((int8 *)in->data)[i]; } *is_maxmin = TRUE; } } if (in->outtype == FP_64) { for (k = 0, fp64 = (float64 *)in->data; k < in->dims[2]; k++) { for (j = 0; j < in->dims[1]; j++) { for (i = 0; i < in->dims[0]; i++, fp64++) { if (gfloat64(infile, strm, fp64, in)) { fprintf(stderr, err1, infile); goto err; } } } } if (*is_maxmin == FALSE) { in->fp64s.min = in->fp64s.max = *(float64 *)in->data; for (i = 1; i < len; i++) { if (((float64 *)in->data)[i] > in->fp64s.max) in->fp64s.max = ((float64 *)in->data)[i]; if (((float64 *)in->data)[i] < in->fp64s.min) in->fp64s.min = ((float64 *)in->data)[i]; } *is_maxmin = TRUE; } } /* } */ (void)fclose(strm); } #ifdef DEBUG printf("\tdata:"); for (k = 0, fp32 = in->data; k < in->dims[2]; k++) { printf("\n"); for (j = 0; j < in->dims[1]; j++) { printf("\n\t"); for (i = 0; i < in->dims[0]; i++, fp32++) printf("%E ", *fp32); } } printf("\n\n\n"); #endif /* DEBUG */ return (0); err: return (1); } /* * Name: * gdimen * * Purpose: * Determine the input data dimensions. * Revision: (bmribler - 2006/8/18) * Used the SD interface instead of DFSD. * Replaced first parameter with 'struct infilesformat' to use both * the file name and the SD identifier (handle.) */ static int gdimen(struct infilesformat infile_info, struct Input *in, FILE *strm) { int32 hdfdims[3]; /* order: ZYX or YX */ char *infile = infile_info.filename; /* shortcut for input filename */ char *sds_name = NULL; int32 rank, nattrs, dtype; /* rank, num of attrs, data type */ const char *err1 = "Unable to get data dimensions from file: %s.\n"; const char *err2 = "Invalid data rank of %d in file: %s.\n"; const char *err3 = "Dimension(s) is less than '2' in file: %s.\n"; const char *err4 = "Unexpected number type from file: %s.\n"; const char *err5 = "Unable to get the length of the SDS' name: index %d.\n"; const char *err6 = "Unable to allocate dynamic memory.\n"; const char *err7 = "Failed to open the SDS.\n"; /* * extract the rank and dimensions of the HDF input file */ if (in->is_hdf == TRUE) { int32 sds_id, sd_index; int32 sd_id = infile_info.handle; /* shortcut for handle from SDstart */ uint16 name_len = 0; intn status = FAIL; /* get the dimension information of the only SDS in the file */ sd_index = 0; sds_id = SDselect(sd_id, sd_index); if (sds_id == FAIL) { fprintf(stderr, "%s", err7); goto err; } /* get the SDS name's length and allocate sufficient space for the name's buffer */ status = SDgetnamelen(sds_id, &name_len); if (status == FAIL) { fprintf(stderr, err5, sd_index); goto err; } sds_name = (char *)malloc(name_len + 1); if (sds_name == NULL) { fprintf(stderr, "%s", err6); goto err; } /* obtain the SDS' information */ status = SDgetinfo(sds_id, sds_name, &rank, hdfdims, &dtype, &nattrs); if (status == FAIL) { fprintf(stderr, err1, infile); goto err; } in->rank = (int)rank; /* don't know how to deal with other numbers yet */ if (dtype != DFNT_FLOAT32) { fprintf(stderr, err4, infile); goto err; } /* * hdfdims is ordered: ZYX or YX * in->dims is ordered: XYZ */ if (in->rank == 2) { in->dims[0] = hdfdims[1]; in->dims[1] = hdfdims[0]; in->dims[2] = 1; } else if (in->rank == 3) { in->dims[0] = hdfdims[2]; in->dims[1] = hdfdims[1]; in->dims[2] = hdfdims[0]; } else { fprintf(stderr, err2, in->rank, infile); goto err; } /* * get the rank and dimensions from files of other input formats * */ } else { if (gint(infile, strm, &in->dims[2], in)) { fprintf(stderr, err1, infile); goto err; } if (in->dims[2] > 1) in->rank = 3; else in->rank = 2; if (gint(infile, strm, &in->dims[1], in)) { fprintf(stderr, err1, infile); goto err; } if (gint(infile, strm, &in->dims[0], in)) { fprintf(stderr, err1, infile); goto err; } } /* * validate dimension sizes */ if ((in->dims[0] < 2) || (in->dims[1] < 2)) { fprintf(stderr, err3, infile); goto err; } #ifdef DEBUG printf("\nInput Information ...\n\n"); printf("\trank:\n\n\t%d\n\n", in->rank); printf("\tdimensions (nplanes,nrows,ncols):\n\n"); printf("\t%d %d %d\n\n", in->dims[2], in->dims[1], in->dims[0]); #endif /* DEBUG */ free(sds_name); return (0); err: free(sds_name); return (1); } /* * Name: * gfloat * * Purpose: * Read in a single floating point value from the input stream. The * input format may either be ASCII text , 32-bit native floating point, * or 64-bit native floating point. */ static int gfloat(char *infile, FILE *strm, float32 *fp32, struct Input *in) { float64 fp64 = 0.0; const char *err1 = "Unable to get 'float' value from file: %s.\n"; if (in->is_text == TRUE) { if (fscanf(strm, "%e", fp32) != 1) { fprintf(stderr, err1, infile); goto err; } } else if (in->is_fp32 == TRUE) { if (fread((char *)fp32, sizeof(float32), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } else { if (fread((char *)&fp64, sizeof(float64), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } *fp32 = (float32)fp64; } return (0); err: return (1); } /* * Name: (pkamat - New function) * gfloat64 * * Purpose: * Read in a double floating point value from the input stream. The * input format may either be ASCII text , * or 64-bit native floating point. */ static int gfloat64(char *infile, FILE *strm, float64 *fp64, struct Input *in) { const char *err1 = "Unable to get 'float' value from file: %s.\n"; if (in->is_text == TRUE) { if (fscanf(strm, "%le", fp64) != 1) { fprintf(stderr, err1, infile); goto err; } } else { if (fread((char *)fp64, sizeof(float64), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: * gint * * Purpose: * Read in a single integer value from the input stream. The input * format may either be ASCII text or a native BCD of type integer. */ static int gint(char *infile, FILE *strm, int32 *ival, struct Input *in) { const char *err1 = "Unable to get 'int' value from file: %s.\n"; /* * process TEXT-formatted input */ if (in->is_text == TRUE) { if (fscanf(strm, "%d", ival) != 1) { fprintf(stderr, err1, infile); goto err; } /* * process BCD-formatted input */ } else { if (fread((char *)ival, sizeof(int), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: (pkamat - New function) * gint32 * * Purpose: * Read in a single 32-bit integer value from the input stream. The input * format may either be ASCII text or a native BCD of type integer. */ static int gint32(char *infile, FILE *strm, int32 *ival, struct Input *in) { const char *err1 = "Unable to get 'int32' value from file: %s.\n"; /* * process TEXT-formatted input */ if (in->is_text == TRUE) { if (fscanf(strm, "%d", ival) != 1) { fprintf(stderr, err1, infile); goto err; } /* * process BCD-formatted input */ } else { if (fread((char *)ival, sizeof(int32), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: (pkamat - New function) * gint16 * * Purpose: * Read in a single 16-bit integer value from the input stream. The input * format may either be ASCII text or a native BCD of type 16-bit integer. */ static int gint16(char *infile, FILE *strm, int16 *ival, struct Input *in) { const char *err1 = "Unable to get 'int16' value from file: %s.\n"; if (in->is_text == TRUE) { if (fscanf(strm, "%hd", ival) != 1) { fprintf(stderr, err1, infile); goto err; } } else { if (fread((char *)ival, sizeof(int16), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: (pkamat - New function) * gint8 * * Purpose: * Read in a single 8-bit integer value from the input stream. The input * format may either be ASCII text or a native BCD of type 8-bit integer. */ static int gint8(char *infile, FILE *strm, int8 *ival, struct Input *in) { const char *err1 = "Unable to get 'int8' value from file: %s.\n"; int16 temp; if (in->is_text == TRUE) { if (fscanf(strm, "%hd", &temp) != 1) { fprintf(stderr, err1, infile); goto err; } *ival = (int8)temp; } else { if (fread((char *)ival, sizeof(int8), 1, strm) != 1) { fprintf(stderr, err1, infile); goto err; } } return (0); err: return (1); } /* * Name: * gmaxmin * * Purpose: * Extract the maximum and minimum data values from the input file. * Supports 32-bit integer, 16-bit integer, 8-bit integer, 32-bit float, 64-bit float * Revision: (pvn) March 14, 2006 * Used the SD interface instead of DFSD * Revision: (bmribler - 2006/8/18) * Removed SDstart call here, used passed-in SD id from process() instead. * Replaced first parameter with 'struct infilesformat' to use both * the file name and the SD identifier (handle.) */ static int gmaxmin(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_maxmin) { const char *err1 = "Unable to get max/min values from file: %s.\n"; /* * extract the max/min values from the input file */ if (in->is_hdf == TRUE) { int32 sds_id, sd_index = 0; intn status; sds_id = SDselect(infile_info.handle, sd_index); status = SDgetrange(sds_id, &in->max, &in->min); if (status != FAIL) { if (in->max > in->min) *is_maxmin = TRUE; } /* terminate access to the array. */ if (SDendaccess(sds_id) == FAIL) goto err; } else /* input file is not an HDF file */ { char *infile = infile_info.filename; if (in->outtype == FP_32) { if (gfloat(infile, strm, &in->max, in)) { fprintf(stderr, err1, infile); goto err; } if (gfloat(infile, strm, &in->min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->max > in->min) *is_maxmin = TRUE; } if (in->outtype == FP_64) { if (gfloat64(infile, strm, &in->fp64s.max, in)) { fprintf(stderr, err1, infile); goto err; } if (gfloat64(infile, strm, &in->fp64s.min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->fp64s.max > in->fp64s.min) *is_maxmin = TRUE; } if (in->outtype == INT_32) { if (gint32(infile, strm, &in->in32s.max, in)) { fprintf(stderr, err1, infile); goto err; } if (gint32(infile, strm, &in->in32s.min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->in32s.max > in->in32s.min) *is_maxmin = TRUE; } if (in->outtype == INT_16) { if (gint16(infile, strm, &in->in16s.max, in)) { fprintf(stderr, err1, infile); goto err; } if (gint16(infile, strm, &in->in16s.min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->in16s.max > in->in16s.min) *is_maxmin = TRUE; } if (in->outtype == INT_8) { if (gint8(infile, strm, &in->in8s.max, in)) { fprintf(stderr, err1, infile); goto err; } if (gint8(infile, strm, &in->in8s.min, in)) { fprintf(stderr, err1, infile); goto err; } if (in->in8s.max > in->in8s.min) *is_maxmin = TRUE; } } #ifdef DEBUG printf("\tinput maximum/minimum values:\n\n"); printf("\t%E %E\n\n", in->max, in->min); #endif /* DEBUG */ return (0); err: return (1); } /* * Name: * gscale * * Purpose: * Determine the scale for each axis. * * Revision: (pkamat) * Modified to support 32-bit integer, 16-bit integer, 8-bit integer in * addition to 32-bit float and 64-bit float * Revision: (pvn) March 14, 2006 * Used the SD interface instead of DFSD * Revision: (bmribler - 2006/8/18) * Removed SDstart call here, used passed-in SD id from process() instead. * Replaced first parameter with 'struct infilesformat' to use both * the file name and the SD identifier (handle.) */ static int gscale(struct infilesformat infile_info, struct Input *in, FILE *strm, int *is_scale) { int i; int32 hdfdims[3]; /* order: ZYX or YX */ const char *err1 = "Unable to get axis scale from file: %s.\n"; *is_scale = TRUE; /* * hdfdims is ordered: ZYX or YX * in->dims is ordered: XYZ */ if (in->rank == 2) { hdfdims[0] = in->dims[1]; hdfdims[1] = in->dims[0]; } else { hdfdims[0] = in->dims[2]; hdfdims[1] = in->dims[1]; hdfdims[2] = in->dims[0]; } /* * extract the scale values from the input file */ if (in->is_hdf == TRUE) { int32 sds_id, dim_id, sd_index = 0; int32 sd_id = infile_info.handle; /* shortcut for handle from SDstart */ /* select the SDS */ sds_id = SDselect(sd_id, sd_index); /* if the SDS is two-dimensional... */ if (in->rank == 2) { /* select the dimension */ dim_id = SDgetdimid(sds_id, 0); if (SDgetdimscale(dim_id, in->vscale) == FAIL) goto err; dim_id = SDgetdimid(sds_id, 1); if (SDgetdimscale(dim_id, in->hscale) == FAIL) goto err; } else /* ...three-dimensional... */ { dim_id = SDgetdimid(sds_id, 0); if (SDgetdimscale(dim_id, in->dscale) == FAIL) goto err; dim_id = SDgetdimid(sds_id, 1); if (SDgetdimscale(dim_id, in->vscale) == FAIL) goto err; dim_id = SDgetdimid(sds_id, 2); if (SDgetdimscale(dim_id, in->hscale) == FAIL) goto err; } /* terminate access to the array. */ if (SDendaccess(sds_id) == FAIL) goto err; } else /* input file is not an HDF file */ { char infile[NAME_LEN]; strcpy(infile, infile_info.filename); switch (in->outtype) { case 0: /* 32-bit float */ if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gfloat(infile, strm, &in->vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->vscale[i] = in->vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat(infile, strm, &in->hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->hscale[i] = in->hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gfloat(infile, strm, &in->dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->dscale[i] = in->dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat(infile, strm, &in->vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->vscale[i] = in->vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gfloat(infile, strm, &in->hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->hscale[i] = in->hscale[i - 1]; } break; case 1: /* 64-bit float */ if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gfloat64(infile, strm, &in->fp64s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->fp64s.vscale[i] = in->fp64s.vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat64(infile, strm, &in->fp64s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->fp64s.hscale[i] = in->fp64s.hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gfloat64(infile, strm, &in->fp64s.dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->fp64s.dscale[i] = in->fp64s.dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gfloat64(infile, strm, &in->fp64s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->fp64s.vscale[i] = in->fp64s.vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gfloat64(infile, strm, &in->fp64s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->fp64s.hscale[i] = in->fp64s.hscale[i - 1]; } break; case 2: /* 32-bit integer */ if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gint32(infile, strm, &in->in32s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in32s.vscale[i] = in->in32s.vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint32(infile, strm, &in->in32s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in32s.hscale[i] = in->in32s.hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gint32(infile, strm, &in->in32s.dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in32s.dscale[i] = in->in32s.dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint32(infile, strm, &in->in32s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in32s.vscale[i] = in->in32s.vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gint32(infile, strm, &in->in32s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in32s.hscale[i] = in->in32s.hscale[i - 1]; } break; case 3: /* 16-bit integer */ if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gint16(infile, strm, &in->in16s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in16s.vscale[i] = in->in16s.vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint16(infile, strm, &in->in16s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in16s.hscale[i] = in->in16s.hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gint16(infile, strm, &in->in16s.dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in16s.dscale[i] = in->in16s.dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint16(infile, strm, &in->in16s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in16s.vscale[i] = in->in16s.vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gint16(infile, strm, &in->in16s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in16s.hscale[i] = in->in16s.hscale[i - 1]; } break; case 4: /* 8-bit integer */ if (in->rank == 2) { for (i = 0; i < hdfdims[0]; i++) { if (gint8(infile, strm, &in->in8s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in8s.vscale[i] = in->in8s.vscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint8(infile, strm, &in->in8s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in8s.hscale[i] = in->in8s.hscale[i - 1]; } else { for (i = 0; i < hdfdims[0]; i++) { if (gint8(infile, strm, &in->in8s.dscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in8s.dscale[i] = in->in8s.dscale[i - 1]; for (i = 0; i < hdfdims[1]; i++) { if (gint8(infile, strm, &in->in8s.vscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in8s.vscale[i] = in->in8s.vscale[i - 1]; for (i = 0; i < hdfdims[2]; i++) { if (gint8(infile, strm, &in->in8s.hscale[i], in)) { fprintf(stderr, err1, infile); goto err; } } in->in8s.hscale[i] = in->in8s.hscale[i - 1]; } break; } } #ifdef DEBUG if (in->rank == 2) { printf("\tscales of the axes (vert,horiz):\n\n\t"); for (i = 0; i < hdfdims[0]; i++) printf("%E ", in->vscale[i]); printf("\n\t"); for (i = 0; i < hdfdims[1]; i++) printf("%E ", in->hscale[i]); } else { printf("\tscales of the axes (depth,vert,horiz):\n\n\t"); for (i = 0; i < hdfdims[0]; i++) printf("%E ", in->dscale[i]); printf("\n\t"); for (i = 0; i < hdfdims[1]; i++) printf("%E ", in->vscale[i]); printf("\n\t"); for (i = 0; i < hdfdims[2]; i++) printf("%E ", in->hscale[i]); } printf("\n\n\n"); #endif /* DEBUG */ return (0); err: return (1); } /* * Name: * gtoken * * Purpose: * Return the token identifier associated with the command line * argument. */ static int gtoken(char *s) { size_t len; int token; const char *err1 = "Illegal argument: %s.\n"; /* * identify the token type */ if (s[0] == '-') { /* option name (or negative number) */ token = ERR; len = strlen(&s[1]); switch (s[1]) { case 'o': if (!strncmp("outfile", &s[1], len)) token = OPT_o; break; case 'r': if (!strncmp("raster", &s[1], len)) token = OPT_r; break; case 'e': if (!strncmp("expand", &s[1], len)) token = OPT_e; break; case 'i': if (!strncmp("interp", &s[1], len)) token = OPT_i; break; case 'p': if (!strncmp("palfile", &s[1], len)) token = OPT_p; break; case 'f': if (!strncmp("float", &s[1], len)) token = OPT_f; break; case 'h': if (!strncmp("help", &s[1], len)) token = OPT_h; break; case 'm': if (!strncmp("mean", &s[1], len)) token = OPT_m; break; case 'n': token = OPT_n; break; case 't': token = OPT_t; break; default: if (isnum(s)) /* negative number? */ token = OPT_num; } if (token == ERR) fprintf(stderr, err1, s); } else if (isnum(s)) /* positive number */ token = OPT_num; else /* filename */ token = FILENAME; return (token); } /* * Name: * gtype * * Purpose: * Determine the type of the input file (HDF, TEXT, FP32, FP64) * * Revision: (pkamat) * Modified to support INT32, INT16, INT8 formats. * Also determines and validates the outtype type of the data-set */ static int gtype(char *infile, struct Input *in, FILE **strm) { char buf[8]; const char *err1 = "Unable to open file: %s.\n"; const char *err2 = "Unable to get format tag from file: %s.\n"; const char *err3 = "Invalid file format in file: %s.\n"; const char *err4 = "Invalid use of -t or -n options. Can be used only for TEXT files or for FP64 binary files\n"; /* * determine the input file format */ if (Hishdf(infile)) in->is_hdf = TRUE; else { if ((*strm = fopen(infile, "r")) == NULL) { fprintf(stderr, err1, infile); goto err; } if (fread(buf, 4, 1, *strm) != 1) { fprintf(stderr, err2, infile); goto err; } if (!memcmp("TEXT", buf, 4) || !memcmp("text", buf, 4)) { in->is_text = TRUE; if (in->outtype == NO_NE) in->outtype = FP_32; } else { if (!memcmp("FP64", buf, 4) || !memcmp("fp64", buf, 4)) { in->is_fp64 = TRUE; if (in->outtype != FP_64) { if (in->outtype != NO_NE) { fprintf(stderr, err4, infile); goto err; } else { in->outtype = FP_32; } } } else { if (in->outtype != NO_NE) { fprintf(stderr, err4, infile); goto err; } if (!memcmp("FP32", buf, 4) || !memcmp("fp32", buf, 4)) { in->is_fp32 = TRUE; in->outtype = FP_32; } else if (!memcmp("IN32", buf, 4) || !memcmp("in32", buf, 4)) in->outtype = INT_32; else if (!memcmp("IN16", buf, 4) || !memcmp("in16", buf, 4)) in->outtype = INT_16; else if (!memcmp("IN08", buf, 4) || !memcmp("in08", buf, 4)) in->outtype = INT_8; else { fprintf(stderr, err3, infile); goto err; } if (in->outtype == NO_NE) { fprintf(stderr, err4, infile); goto err; } } } } return (0); err: return (1); } /* * Name: * help * * Purpose: * Print a helpful summary of command usage and features. */ void help(char *name) { printf("Name:\n"); printf("\t%s (previously fp2hdf)\n\n", name); printf("Purpose:\n"); printf("\tTo convert floating point data to HDF Scientific "); printf("Data Set (SDS)\n"); printf("\tand/or 8-bit Raster Image Set (RIS8) format, "); printf("storing the results\n"); printf("\tin an HDF file. The image data can be scaled "); printf("about a mean value.\n\n"); fprintf(stderr, "Synopsis:"); fprintf(stderr, "\n\t%s -h[elp]", name); fprintf(stderr, "\n\t\t Print this summary of usage and exit."); fprintf(stderr, "\n\t\t "); fprintf(stderr, "\n\t%s -V", name); fprintf(stderr, "\n\t\t Print version of the HDF4 library and exit."); fprintf(stderr, "\n\t\t "); fprintf(stderr, "\n\t%s [ [-t[ype] | -n] [ [-t[ype] | -n]...]", name); fprintf(stderr, "\n\t\t\t\t\t-o[utfile] [-r[aster] [ras_opts ...]] [-f[loat]]"); fprintf(stderr, "\n\n\t :"); fprintf(stderr, "\n\t\t Name of the input file(s), containing a single "); fprintf(stderr, "\n\t\t two-dimensional or three-dimensional floating point array "); fprintf(stderr, "\n\t\t in either ASCII text, native floating point, native integer "); fprintf(stderr, "\n\t\t or HDF SDS format. If an HDF file is used for input, it "); fprintf(stderr, "\n\t\t must contain an SDS. The SDS need only contain a dimension "); fprintf(stderr, "\n\t\t record and the data, but if it also contains maximum and "); fprintf(stderr, "\n\t\t minimum values and/or scales for each axis, these will "); fprintf(stderr, "\n\t\t be used. If the input format is ASCII text or native "); fprintf(stderr, "\n\t\t floating point or native integer, see \"Notes\" below on "); fprintf(stderr, "\n\t\t how it must be organized."); fprintf(stderr, "\n\n\t -t[ype] : "); fprintf(stderr, "\n\t\t Optionally used for every input ASCII file to specify the "); fprintf(stderr, "\n\t\t data type of the data-set to be written. If not specified "); fprintf(stderr, "\n\t\t default data type is 32-bit floating point. "); fprintf(stderr, "\n\t\t can be any of the following: FP32 (default), FP64, INT32"); fprintf(stderr, "\n\t\t INT16, INT8. It can be used only with ASCII files."); fprintf(stderr, "\n\n\t -n: "); fprintf(stderr, "\n\t\t This option is to be used only if the binary input file "); fprintf(stderr, "\n\t\t contains 64-bit floating point data and the default"); fprintf(stderr, "\n\t\t behaviour (default behaviour is to write it to a 32-bit"); fprintf(stderr, "\n\t\t floating point data-set) should be overridden to write "); fprintf(stderr, "\n\t\t it to a 64-bit floating point data-set."); fprintf(stderr, "\n\n\t -o[utfile] :"); fprintf(stderr, "\n\t\t Data from one or more input files are stored as one or"); fprintf(stderr, "\n\t\t more data sets and/or images in one HDF output file,"); fprintf(stderr, "\n\t\t \"outfile\"."); fprintf(stderr, "\n\n\t -r[aster]:"); fprintf(stderr, "\n\t\t Store output as a raster image set in the output file."); fprintf(stderr, "\n\n\t -f[loat]:"); fprintf(stderr, "\n\t Store output as a scientific data set in the output file."); fprintf(stderr, "\n\t This is the default if the \"-r\" option is not specified."); fprintf(stderr, "\n\n\t ras_opts ..."); fprintf(stderr, "\n\n\t -e[xpand] []:"); fprintf(stderr, "\n\t Expand float data via pixel replication to produce the"); fprintf(stderr, "\n\t image(s). \"horiz\" and \"vert\" give the horizontal and"); fprintf(stderr, "\n\t vertical resolution of the image(s) to be produced; and"); fprintf(stderr, "\n\t optionally, \"depth\" gives the number of images or depth"); fprintf(stderr, "\n\t planes (for 3D input data)."); fprintf(stderr, "\n\n\t -i[nterp] []:"); fprintf(stderr, "\n\t\t Apply bilinear, or trilinear, interpolation to the float"); fprintf(stderr, "\n\t\t data to produce the image(s). \"horiz\", \"vert\", and \"depth\""); fprintf(stderr, "\n\t\t must be greater than or equal to the dimensions of the"); fprintf(stderr, "\n\t\t original dataset."); fprintf(stderr, "\n\t\t If max and min are supplied in input file, this option clips"); fprintf(stderr, "\n\t\t values that are greater than max or less then min, setting"); fprintf(stderr, "\n\t\t them to the max and min, respectively."); fprintf(stderr, "\n\n\t -p[alfile] :"); fprintf(stderr, "\n\t\t Store the palette with the image. Get the palette from"); fprintf(stderr, "\n\t\t \"palfile\"; which may be an HDF file containing a palette,"); fprintf(stderr, "\n\t\t or a file containing a raw palette."); fprintf(stderr, "\n\n\t -m[ean] :"); fprintf(stderr, "\n\t\t If a floating point mean value is given, the image will be"); fprintf(stderr, "\n\t\t scaled about the mean. The new extremes (newmax and newmin),"); fprintf(stderr, "\n\t\t as given by:"); fprintf(stderr, "\n\n\t\t\t newmax = mean + max(abs(max-mean), abs(mean-min))"); fprintf(stderr, "\n\t\t\t newmin = mean - max(abs(max-mean), abs(mean-min))"); fprintf(stderr, "\n\n\t\t will be equidistant from the mean value. If no mean value"); fprintf(stderr, "\n\t\t is given, then the mean will be: 0.5 (max + min)"); fprintf(stderr, "\n\n\t Notes:"); fprintf( stderr, "\n\t\t If the input file format is ASCII text or native floating point or native integer(32-bit,"); fprintf(stderr, "\n\t\t 16-bit, 8-bit), it"); fprintf(stderr, "\n\t\t must have the following input fields:"); fprintf(stderr, "\n\t\t format"); fprintf(stderr, "\n\t\t nplanes"); fprintf(stderr, "\n\t\t nrows"); fprintf(stderr, "\n\t\t cols"); fprintf(stderr, "\n\t\t max_value"); fprintf(stderr, "\n\t\t min_value"); fprintf(stderr, "\n\t\t [plane1 plane2 plane3 ...]"); fprintf(stderr, "\n\t\t row1 row2 row3 ..."); fprintf(stderr, "\n\t\t col1 col2 col3 ..."); fprintf(stderr, "\n\t\t data1 data2 data3 ..."); fprintf(stderr, "\n\n\t\t Where:"); fprintf(stderr, "\n\n\t\t format:"); fprintf(stderr, "\n\t\t\t Format designator (\"TEXT\", \"FP32\", \"FP64\", \"IN32\", \"IN16\", \"IN08\")."); fprintf(stderr, "\n\t\t\t nplanes, nrows, ncols:"); fprintf(stderr, "\n\t\t\t Dimensions are specified in the order slowest changing dimension first."); fprintf(stderr, "\n\t\t\t ncols is dimension of the fastest changing dimension. (horizontal axis"); fprintf(stderr, "\n\t\t\t or X-axis in a 3D scale)"); fprintf(stderr, "\n\t\t\t nrows corresponds to dimension of the vertical axis or Y-axis in a 3D "); fprintf(stderr, "\n\t\t\t scale."); fprintf(stderr, "\n\t\t\t nplanes corresponds to the slowest changing dimension i.e. dimension of "); fprintf(stderr, "\n\t\t\t the depth axis or the Z-axis in a 3D scale (\"1\" for 2D input)."); fprintf(stderr, "\n\t\t max_value:"); fprintf(stderr, "\n\t\t\t Maximum data value."); fprintf(stderr, "\n\t\t min_value:"); fprintf(stderr, "\n\t\t\t Minimum data value."); fprintf(stderr, "\n\t\t plane1, plane2, plane3, ...:"); fprintf(stderr, "\n\t\t\t Scales for depth axis."); fprintf(stderr, "\n\t\t row1, row2, row3, ...:"); fprintf(stderr, "\n\t\t\t Scales for the vertical axis."); fprintf(stderr, "\n\t\t col1, col2, col3, ...:"); fprintf(stderr, "\n\t\t\t Scales for the horizontal axis."); fprintf(stderr, "\n\t\t data1, data2, data3, ...:"); fprintf(stderr, "\n\t\t\t The data ordered by rows, left to right and top"); fprintf(stderr, "\n\t\t\t to bottom; then optionally, ordered by planes,"); fprintf(stderr, "\n\t\t\t front to back."); fprintf(stderr, "\n\n\t\t For FP32 and FP64 input format, \"format\", \"nplanes\", \"nrows\", \"ncols\","); fprintf(stderr, "\n\t\t and \"nplanes\" are native integers; where \"format\" is the integer"); fprintf(stderr, "\n\t\t representation of the appropriate 4-character string (0x46503332 for"); fprintf(stderr, "\n\t\t \"FP32\" and 0x46503634 for \"FP64\"). The remaining input fields are"); fprintf(stderr, "\n\t\t composed of native 32-bit floating point values for FP32 input format,"); fprintf(stderr, "\n\t\t or native 64-bit floating point values for FP64 input format."); fprintf(stderr, "\n\n\t For IN32, IN16 and IN08 input format, \"format\", \"nplanes\", \"nrows\", \"ncols\","); fprintf(stderr, "\n\t\t and \"nplanes\" are native integers; where \"format\" is the integer"); fprintf(stderr, "\n\t\t representation of the appropriate 4-character string. The remaining input "); fprintf(stderr, "\n\t\t fields are composed of native 32-bit integer values for IN32 input format,"); fprintf(stderr, "\n\t\t or native 16-bit integer values for IN16 input format or native 8-bit "); fprintf(stderr, "\n\t\t integer values for IN08 input format."); printf("\nExamples:\n"); printf("\tConvert floating point data in \"f1.txt\" to SDS "); printf("format, and store it\n"); printf("\tas an SDS in HDF file \"o1\":\n\n"); printf("\t\t%s f1.txt -o o1\n\n", name); printf("\tConvert floating point data in \"f2.hdf\" to "); printf("8-bit raster format, and\n"); printf("\tstore it as an RIS8 in HDF file \"o2\":\n\n"); printf("\t\t%s f2.hdf -o o2 -r\n\n", name); printf("\tConvert floating point data in \"f3.bin\" to "); printf("8-bit raster format and\n"); printf("\tSDS format, and store both the RIS8 and the SDS "); printf("in HDF file \"o3\":\n\n"); printf("\t\t%s f3.bin -o o3 -r -f\n\n", name); printf("\tConvert floating point data in \"f4\" to a "); printf("500x600 raster image, and\n"); printf("\tstore the RIS8 in HDF file \"o4\". Also store a "); printf("palette from \"palfile\"\n"); printf("\twith the image:\n\n"); printf("\t\t%s f4 -o o4 -r -e 500 600 -p palfile\n\n", name); printf("\tConvert floating point data in \"f5\" to 200 "); printf("planes of 500x600 raster\n"); printf("\timages, and store the RIS8 in HDF file \"o5\". "); printf("Also scale the image\n"); printf("\tdata so that it is centered about a mean value "); printf("of 10.0:\n\n"); printf("\t\t%s f5 -o o5 -r -i 500 600 200 -m 10.0\n", name); return; } /* * Name: * indexes * * Purpose: * For each pixel location along an axis, determine the nearest * scale value neighbor. Return a list of indexes into the scale * array. */ static int indexes(float32 *scale, int dim, int *idx, int res) { int i, j; float32 *midpt; float32 loc; float32 delta; const char *err1 = "Unable to allocate dynamic memory.\n"; /* * determine the midpoints between scale values */ if ((midpt = (float32 *)malloc((size_t)dim * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } for (i = 0; i < dim - 1; i++) midpt[i] = (scale[i] + scale[i + 1]) * (float32)0.5; midpt[dim - 1] = scale[dim - 1] + (scale[dim - 1] - midpt[dim - 2]); /* * determine the distance between pixel locations */ delta = (scale[dim - 1] - scale[0]) / (float32)(res - 1); /* * compute indexes, keeping the index the same until the location * extends beyond the midpoint */ for (i = 1, j = 0, idx[0] = 0, loc = scale[0]; i < res; i++) { loc += delta; idx[i] = idx[i - 1]; while (loc >= midpt[j]) { idx[i] += 1; j += 1; } } /* * free dynamically allocated memory */ free(midpt); return (0); err: return (1); } /* * Name: * interp * * Purpose: * Use a bilinear, or trilinear, interpolation scheme to construct * the raster image(s). * * Bug revision: the line that previously read: * * hratio[i] = ((hrange > 0) ? 1.0 : -1.0) * (in->hscale[j+1] - * loc) / (in->hscale[j+1] - in->hscale[j]); * has been changed to read: * hratio[i] = (in->hscale[j+1] - loc) / (in->hscale[j+1] - in->hscale[j]); * * Similar changes were made to the corresponding lines for * computing vratio and dratio. * * Bug revision: If values occur that are outside the ranges of the * max and min values provided, these values are now "clipped" to * be the same as the max and min, respectively. */ static int interp(struct Input *in, struct Raster *im) { int i, j, k, m; int *hinc, *voff, *doff = NULL; float32 pix; float32 loc; float32 range; float32 ratio; float32 hrange, vrange, drange = (float32)0.0; float32 hdelta, vdelta, ddelta = (float32)0.0; float32 t1, t2, t3, t4, t5, t6; float32 *hratio, *vratio, *dratio = NULL; float32 *pt[8]; unsigned char *ip = im->image; const char *err1 = "Unable to allocate dynamic memory.\n"; /* * determine the range of pixel locations */ range = in->max - in->min; ratio = (float32)237.9 / range; hrange = in->hscale[in->dims[0] - 1] - in->hscale[0]; vrange = in->vscale[in->dims[1] - 1] - in->vscale[0]; if (in->rank == 3) drange = in->dscale[in->dims[2] - 1] - in->dscale[0]; /* * determine the distance between pixel locations */ hdelta = hrange / (float32)(im->hres - 1); vdelta = vrange / (float32)(im->vres - 1); if (in->rank == 3) ddelta = drange / (float32)(im->dres - 1); /* * allocate dynamic memory for the interpolation ratio buffers */ if ((hratio = (float32 *)malloc((size_t)im->hres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((vratio = (float32 *)malloc((unsigned int)im->vres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((dratio = (float32 *)malloc((unsigned int)im->dres * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } /* * allocate dynamic memory for the pixel location offset/increment * buffers */ if ((hinc = (int *)malloc((unsigned int)im->hres * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((voff = (int *)malloc((unsigned int)(im->vres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((doff = (int *)malloc((unsigned int)(im->dres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } /* * compute the interpolation ratios and pixel location * offsets/increments for each axis */ for (i = 0, j = 0; i < im->hres; i++) { loc = hdelta * (float)i + in->hscale[0]; hinc[i] = 0; while ((j < (in->dims[0] - 2)) && ((hrange > (float32)0.0) ? (in->hscale[j + 1] < loc) : (in->hscale[j + 1] > loc))) { hinc[i] += 1; j += 1; } hratio[i] = (in->hscale[j + 1] - loc) / (in->hscale[j + 1] - in->hscale[j]); } for (i = 0, j = 0, voff[0] = 0; i < im->vres; i++) { loc = vdelta * (float)i + in->vscale[0]; while ((j < (in->dims[1] - 2)) && ((vrange > (float32)0.0) ? (in->vscale[j + 1] < loc) : (in->vscale[j + 1] > loc))) { voff[i] += 1; j += 1; } vratio[i] = (in->vscale[j + 1] - loc) / (in->vscale[j + 1] - in->vscale[j]); voff[i + 1] = voff[i]; } if (in->rank == 3) { for (i = 0, j = 0, doff[0] = 0; i < im->dres; i++) { loc = ddelta * (float)i + in->dscale[0]; while ((j < (in->dims[2] - 2)) && ((drange > (float32)0.0) ? (in->dscale[j + 1] < loc) : (in->dscale[j + 1] > loc))) { doff[i] += 1; j += 1; } dratio[i] = (in->dscale[j + 1] - loc) / (in->dscale[j + 1] - in->dscale[j]); doff[i + 1] = doff[i]; } } /* * do the interpolation for each point in the target image, taking * advantage of the fact that the target is evenly spaced along each * axis */ if (in->rank == 2) { for (i = 0; i < im->vres; i++) { pt[0] = (float32 *)in->data + (in->dims[0] * voff[i]); pt[1] = pt[0] + 1; pt[2] = pt[0] + in->dims[0]; pt[3] = pt[2] + 1; for (j = 0; j < im->hres; j++) { for (m = 0; m < 4; m++) pt[m] += hinc[j]; t1 = *pt[2] - ((*pt[2] - *pt[0]) * vratio[i]); t2 = *pt[3] - ((*pt[3] - *pt[1]) * vratio[i]); pix = t2 - ((t2 - t1) * hratio[j]); if (pix > in->max) pix = in->max; /* clip (bug fix) */ if (pix < in->min) pix = in->min; /* ditto */ *ip++ = (unsigned char)((ratio * (pix - in->min)) + (float32)1.5); } } } else { /* rank == 3 */ for (i = 0; i < im->dres; i++) { for (j = 0; j < im->vres; j++) { pt[0] = (float32 *)in->data + (in->dims[0] * voff[j]) + (in->dims[0] * in->dims[1] * doff[i]); pt[1] = pt[0] + 1; pt[2] = pt[0] + in->dims[0]; pt[3] = pt[2] + 1; pt[4] = pt[0] + (in->dims[0] * in->dims[1]); pt[5] = pt[4] + 1; pt[6] = pt[4] + in->dims[0]; pt[7] = pt[6] + 1; for (k = 0; k < im->hres; k++) { for (m = 0; m < 8; m++) pt[m] += hinc[k]; t1 = *pt[4] - ((*pt[4] - *pt[0]) * dratio[i]); t2 = *pt[6] - ((*pt[6] - *pt[2]) * dratio[i]); t3 = *pt[5] - ((*pt[5] - *pt[1]) * dratio[i]); t4 = *pt[7] - ((*pt[7] - *pt[3]) * dratio[i]); t5 = t2 - ((t2 - t1) * vratio[j]); t6 = t4 - ((t4 - t3) * vratio[j]); pix = t6 - ((t6 - t5) * hratio[k]); if (pix > in->max) pix = in->max; /* clip (bug fix) */ if (pix < in->min) pix = in->min; /* ditto */ *ip++ = (unsigned char)((ratio * (pix - in->min)) + (float32)1.5); } } } } /* * free dynamically allocated memory */ free(hratio); free(vratio); if (in->rank == 3) free(dratio); free(hinc); free(voff); if (in->rank == 3) free(doff); return (0); err: return (1); } /* * Name: * isnum * * Purpose: * Determine whether or not the string is representative of an * integer or floating point number. If it is, a non-zero value * is returned. A leading (-) to denote sign is acceptable. */ static int isnum(char *s) { char *cp; int rval = FALSE; /* * check to see if its a floating point number */ cp = s; (void)strtod(s, &cp); if ((*cp == '\0') && (cp != s)) rval = TRUE; /* * check to see if its an integer number (radix 8, 10, or 16) */ else { cp = s; (void)strtol(s, &cp, 0); if ((*cp == '\0') && (cp != s)) rval = TRUE; } return (rval); } /* * Name: * mean * * Purpose: * Reset the maximum and minimum data values to be symmetric about * the user-specified mean value. */ void mean(struct Input *in, struct Options *opt) { float32 delta, delta_max, delta_min; delta_max = (float32)fabs((double)(in->max - opt->meanval)); delta_min = (float32)fabs((double)(opt->meanval - in->min)); delta = (delta_max > delta_min) ? delta_max : delta_min; in->max = opt->meanval + delta; in->min = opt->meanval - delta; return; } /* * Name: * palette * * Purpose: * Process the (user specified) palette input file. */ static int palette(char *palfile) { unsigned char *color; unsigned char pal[1024], red[256], green[256], blue[256]; FILE *strm; int i; const char *err1 = "Unable to get palette from file: %s.\n"; const char *err2 = "Unable to open palette file: %s.\n"; const char *err3 = "Unable to set default palette.\n"; /* * extract a palette from an HDF file */ if (Hishdf(palfile)) { if (DFPgetpal(palfile, pal)) { fprintf(stderr, err1, palfile); goto err; } /* * read in a raw palette file */ } else { if ((strm = fopen(palfile, "r")) == NULL) { fprintf(stderr, err2, palfile); goto err; } if (fread((char *)red, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } else if (fread((char *)green, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } else if (fread((char *)blue, 1, 256, strm) != 256) { fprintf(stderr, err1, palfile); goto err; } (void)fclose(strm); /* * interleave the R,G,B values */ color = pal; for (i = 0; i < 256; i++) { *color++ = red[i]; *color++ = green[i]; *color++ = blue[i]; } } /* * set up the palette as the default for subsequent images */ if (DFR8setpalette(pal)) { fprintf(stderr, "%s", err3); goto err; } return (0); err: return (1); } /* * Name: * pixrep * * Purpose: * Expand the image(s) to the desired resolution using pixel * replication. */ static int pixrep(struct Input *in, struct Raster *im) { int *hidx, *vidx, *didx; int ovidx, odidx; int dummy; int32 i, j, k; float32 *dp; float32 range; float32 ratio; unsigned char *ip, *plane, *row, *pix; const char *err1 = "Unable to dynamically allocate memory.\n"; dp = (float32 *)in->data; ip = im->image; range = in->max - in->min; ratio = (float32)237.9 / range; /* * determine the scale indexes of the horizontal pixel locations */ if ((hidx = (int *)malloc((unsigned int)(im->hres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->hscale, in->dims[0], hidx, im->hres)) goto err; /* * determine the scale indexes of the vertical pixel locations */ if ((vidx = (int *)malloc((unsigned int)(im->vres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->vscale, in->dims[1], vidx, im->vres)) goto err; /* * determine the scale indexes of the depth plane locations */ dummy = 0; didx = &dummy; if (in->rank == 3) { if ((didx = (int *)malloc((unsigned int)(im->dres + 1) * sizeof(int))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (indexes(in->dscale, in->dims[2], didx, im->dres)) goto err; } /* * compute the expanded image */ if ((pix = (unsigned char *)malloc((unsigned int)(in->dims[0] + 1))) == NULL) { fprintf(stderr, "%s", err1); goto err; } for (k = 0, odidx = didx[0] - 1; k < im->dres; k++) { /* * construct a new depth plane */ if (didx[k] > odidx) { for (j = 0, ovidx = vidx[0] - 1; j < im->vres; j++) { /* * construct a new row */ if (vidx[j] > ovidx) { for (i = 0; i < in->dims[0]; i++) pix[i] = (unsigned char)((ratio * (*dp++ - in->min)) + (float32)1.5); for (i = 0; i < im->hres; i++) *ip++ = pix[hidx[i]]; /* * repeat the previous row */ } else { row = ip - im->hres; for (i = 0; i < im->hres; i++) *ip++ = *row++; } ovidx = vidx[j]; } /* * repeat the previous depth plane */ } else { plane = ip - (im->hres * im->vres); for (j = 0; j < im->vres; j++) for (i = 0; i < im->hres; i++) *ip++ = plane[(j * im->hres) + i]; } odidx = didx[k]; } /* * free dynamically allocated space */ free(hidx); free(vidx); if (in->rank == 3) free(didx); free(pix); return (0); err: return (1); } /* * Name: * create_SDS * * Purpose: * This function contains common code that creates a two- or * three-dimensional dataset, used in function 'process.' It * was factored out to reduce the length of 'process.' * Returns the new SDS identifier, if success, and FAIL, * otherwise. (bmribler - 2006/8/18) */ static int32 create_SDS(int32 sd_id, int32 nt, struct Input *in) { int32 sds_id = FAIL; if (in->rank == 2) { int32 edges[2]; edges[0] = in->dims[1]; edges[1] = in->dims[0]; sds_id = SDcreate(sd_id, NULL, nt, in->rank, edges); } else { int32 edges[3]; edges[0] = in->dims[2]; edges[1] = in->dims[1]; edges[2] = in->dims[0]; sds_id = SDcreate(sd_id, NULL, nt, in->rank, edges); } return (sds_id); } /* * Name: * alloc_data * * Purpose: * This function contains common code that allocates memory for * the data buffer to hold different types of data. It * was factored out to reduce the length of 'process.' * Returns SUCCEED or FAIL. (bmribler - 2006/8/18) */ static intn alloc_data(void **data, int32 len, int outtype) { const char *alloc_err = "Unable to dynamically allocate memory.\n"; switch (outtype) { case 0: /* 32-bit float */ case 5: /* NO_NE */ if ((*data = (void *)malloc((size_t)len * sizeof(float32))) == NULL) { fprintf(stderr, "%s", alloc_err); return FAIL; } break; case 1: /* 64-bit float */ if ((*data = (void *)malloc((size_t)len * sizeof(float64))) == NULL) { fprintf(stderr, "%s", alloc_err); return FAIL; } break; case 2: /* 32-bit integer */ if ((*data = (void *)malloc((size_t)len * sizeof(int32))) == NULL) { fprintf(stderr, "%s", alloc_err); return FAIL; } break; case 3: /* 16-bit integer */ if ((*data = (void *)malloc((size_t)len * sizeof(int16))) == NULL) { fprintf(stderr, "%s", alloc_err); return FAIL; } break; case 4: /* 8-bit integer */ if ((*data = (void *)malloc((size_t)len * sizeof(int8))) == NULL) { fprintf(stderr, "%s", alloc_err); return FAIL; } break; } /* end switch */ return SUCCEED; } /* alloc_data */ /* * Name: * write_SDS * * Purpose: * This function contains common code, that writes a two- or * three-dimensional dataset, used in function 'process.' It * was factored out to reduce the length of 'process.' * Returns SUCCEED or FAIL. (bmribler - 2006/8/18) */ static intn write_SDS(int32 sds_id, struct Input *in) { const char *write_err = "Unable to write an SDS to the HDF output file\n"; if (in->rank == 2) { int32 edges[2], start[2]; edges[0] = in->dims[1]; edges[1] = in->dims[0]; start[0] = 0; start[1] = 0; if (SDwritedata(sds_id, start, NULL, edges, (void *)in->data) != 0) { fprintf(stderr, "%s", write_err); return FAIL; } } else { int32 edges[3], start[3]; edges[0] = in->dims[2]; edges[1] = in->dims[1]; edges[2] = in->dims[0]; start[0] = 0; start[1] = 0; start[2] = 0; if (SDwritedata(sds_id, start, NULL, edges, (void *)in->data) != 0) { fprintf(stderr, "%s", write_err); return FAIL; } } return SUCCEED; } /* write_SDS */ /* * Name: * set_dimensions * * Purpose: * This function contains the common code, that sets dimension scale * for a two- or three-dimensional dataset, used in function 'process.' * It was factored out to reduce the length of 'process.' * Returns SUCCEED or FAIL. (bmribler - 2006/8/18) */ static intn set_dimensions(int32 sds_id, struct Input *in, int32 nt, void *dscale, void *vscale, void *hscale) { int32 dim_id, dim_index; const char *dim_err = "Unable to set dimension scales\n"; if (in->rank == 2) { int32 edges[2]; edges[0] = in->dims[1]; edges[1] = in->dims[0]; dim_index = 0; dim_id = SDgetdimid(sds_id, dim_index); if (SDsetdimscale(dim_id, edges[0], nt, (void *)vscale) == FAIL) { fprintf(stderr, "%s, dim index %d\n", dim_err, dim_index); return FAIL; } dim_index = 1; dim_id = SDgetdimid(sds_id, dim_index); if (SDsetdimscale(dim_id, edges[1], nt, hscale) != 0) { fprintf(stderr, "%s, dim index %d\n", dim_err, dim_index); return FAIL; } } else { int32 edges[3]; edges[0] = in->dims[2]; edges[1] = in->dims[1]; edges[2] = in->dims[0]; dim_index = 0; dim_id = SDgetdimid(sds_id, dim_index); if (SDsetdimscale(dim_id, edges[0], nt, dscale) != 0) { fprintf(stderr, "%s, dim index %d\n", dim_err, dim_index); return FAIL; } dim_index = 1; dim_id = SDgetdimid(sds_id, dim_index); if (SDsetdimscale(dim_id, edges[1], nt, vscale) != 0) { fprintf(stderr, "%s, dim index %d\n", dim_err, dim_index); return FAIL; } dim_index = 2; dim_id = SDgetdimid(sds_id, dim_index); if (SDsetdimscale(dim_id, edges[2], nt, hscale) != 0) { fprintf(stderr, "%s, dim index %d\n", dim_err, dim_index); return FAIL; } } return SUCCEED; } /* set_dimensions */ /* * Name: * process * * Purpose: * Process each input file. * * Revision: (pkamat) * Modified to support the writing of the data set in any of the * following types: INT32, INT16, INT8 and FP64 * Modification: pvn: March, 3, 2006 * handled the case of in->outtype == 5 (NO_NE), for hdf input type * current version assumes that datum is DFNT_FLOAT32 for this case * Revision: (bmribler - 2006/8/18) * - Modified to store the input SD identifier in 'struct infilesformat' * so the id can be passed into various functions, instead of * repeatedly calling SDstart in these functions. * - Factored out common codes to make this ~900-line function become * more readable and maintainable. */ static int process(struct Options *opt) { struct Input in; struct Raster im; unsigned char *ip; int i, j; int is_maxmin; int is_scale; int32 len; FILE *strm = NULL; int32 hdf; int32 sd_id = FAIL; int32 sds_id = FAIL; #ifdef DEBUG int h, v, d; #endif /* DEBUG */ const char *err1 = "Error creating HDF output file: %s.\n"; const char *err1a = "Error opening the created HDF output file for writing, file %s.\n"; const char *err2 = "Unable to dynamically allocate memory.\n"; const char *err3a = "Warning: cannot make image smaller using -e "; const char *err3b = "option.\n\t %s resolution will be made the "; const char *err3c = "same as %s dimension of the\n\t dataset, "; const char *err3d = "which is: %d.\n\n"; const char *err4 = "Unable to write an RIS8 to the HDF output file\n"; const char *err5a = "Unable to set range to an SDS\n"; const char *err6a = "Unable to close the SDS\n"; const char *err6 = "Unable to close the HDF output file\n"; /* * process the palette file (if one was specified) */ if (opt->pal == TRUE) if (palette(opt->palfile)) goto err; /* * create the HDF output file */ if ((hdf = Hopen(opt->outfile, DFACC_CREATE, 0)) == FAIL) { fprintf(stderr, err1, opt->outfile); goto err; } (void)Hclose(hdf); /* new interface */ if ((sd_id = SDstart(opt->outfile, DFACC_WRITE)) == FAIL) { fprintf(stderr, err1a, opt->outfile); goto err; } /* * main loop: process input files, one per pass */ for (i = 0; i < opt->fcount; i++) { /* * initialize key parameters */ in.is_hdf = FALSE; in.is_text = FALSE; in.is_fp32 = FALSE; in.is_fp64 = FALSE; is_maxmin = FALSE; is_scale = FALSE; in.outtype = opt->infiles[i].outtype; if (Hishdf(opt->infiles[i].filename)) { in.is_hdf = TRUE; opt->infiles[i].handle = SDstart(opt->infiles[i].filename, DFACC_RDONLY); if (opt->infiles[i].handle == FAIL) { fprintf(stderr, err1a, opt->infiles[i].filename); goto err; } } /* * get the file type, input data dimensions, and input data * max/min values */ if (gtype(opt->infiles[i].filename, &in, &strm)) goto err; if (gdimen(opt->infiles[i], &in, strm)) goto err; if (gmaxmin(opt->infiles[i], &in, strm, &is_maxmin)) goto err; /* * Initialize the scale variables according to the output type * of data set */ if (init_scales(&in)) goto err; /* * get the scale for each axis */ if (gscale(opt->infiles[i], &in, strm, &is_scale)) goto err; /* * get the input data */ len = in.dims[0] * in.dims[1] * in.dims[2]; /* allocate memory for in.data depending on in.outtype value */ if (alloc_data(&(in.data), len, in.outtype) == FAIL) goto err; if (gdata(opt->infiles[i], &in, strm, &is_maxmin)) goto err; /* * put the input data in the HDF output file, in SDS format */ if (opt->to_float == TRUE) { intn status; switch (in.outtype) { case 0: /* 32-bit float */ case 5: /* NO_NE */ /* create data-set */ sds_id = create_SDS(sd_id, DFNT_FLOAT32, &in); if (sds_id == FAIL) goto err; if (is_scale == TRUE) { /* set range */ if (SDsetrange(sds_id, &in.max, &in.min) != 0) { fprintf(stderr, "%s", err5a); goto err; } /* set dimension scale */ status = set_dimensions(sds_id, &in, DFNT_FLOAT32, (void *)in.dscale, (void *)in.vscale, (void *)in.hscale); if (status == FAIL) goto err; } /* write data to the data set */ if (write_SDS(sds_id, &in) == FAIL) goto err; break; case 1: /* 64-bit float */ /* create data-set */ sds_id = create_SDS(sd_id, DFNT_FLOAT64, &in); if (sds_id == FAIL) goto err; if (is_scale == TRUE) { /* set range */ if (SDsetrange(sds_id, &in.fp64s.max, &in.fp64s.min) != 0) { fprintf(stderr, "%s", err5a); goto err; } /* set dimension scale */ status = set_dimensions(sds_id, &in, DFNT_FLOAT64, (void *)in.fp64s.dscale, (void *)in.fp64s.vscale, (void *)in.fp64s.hscale); if (status == FAIL) goto err; } /* write data to the data set */ if (write_SDS(sds_id, &in) == FAIL) goto err; break; case 2: /* 32-bit integer */ /* create data-set */ sds_id = create_SDS(sd_id, DFNT_INT32, &in); if (sds_id == FAIL) goto err; if (is_scale == TRUE) { /* set range */ if (SDsetrange(sds_id, &in.in32s.max, &in.in32s.min) != 0) { fprintf(stderr, "%s", err5a); goto err; } /* set dimension scale */ status = set_dimensions(sds_id, &in, DFNT_INT32, (void *)in.in32s.dscale, (void *)in.in32s.vscale, (void *)in.in32s.hscale); if (status == FAIL) goto err; } /* write data to the data set */ if (write_SDS(sds_id, &in) == FAIL) goto err; break; case 3: /* 16-bit integer */ /* create data-set */ sds_id = create_SDS(sd_id, DFNT_INT16, &in); if (sds_id == FAIL) goto err; if (is_scale == TRUE) { /* set range */ if (SDsetrange(sds_id, &in.in16s.max, &in.in16s.min) != 0) { fprintf(stderr, "%s", err5a); goto err; } /* set dimension scale */ status = set_dimensions(sds_id, &in, DFNT_INT16, (void *)in.in16s.dscale, (void *)in.in16s.vscale, (void *)in.in16s.hscale); if (status == FAIL) goto err; } /* write data to the data set */ if (write_SDS(sds_id, &in) == FAIL) goto err; break; case 4: /* 8-bit integer */ /* create data-set */ sds_id = create_SDS(sd_id, DFNT_INT8, &in); if (sds_id == FAIL) goto err; if (is_scale == TRUE) { /* set range */ if (SDsetrange(sds_id, &in.in8s.max, &in.in8s.min) != 0) { fprintf(stderr, "%s", err5a); goto err; } /* set dimension scale */ status = set_dimensions(sds_id, &in, DFNT_INT8, (void *)in.in8s.dscale, (void *)in.in8s.vscale, (void *)in.in8s.hscale); if (status == FAIL) goto err; } /* write data to the data set */ if (write_SDS(sds_id, &in) == FAIL) goto err; break; } /* close data set */ if (SDendaccess(sds_id) == FAIL) { fprintf(stderr, "%s", err6a); goto err; } /* close the input file */ if (in.is_hdf == TRUE) { if (SDend(opt->infiles[i].handle) == FAIL) { fprintf(stderr, "SDend failed"); goto err; } } } /* if opt->to_float == TRUE */ /* * put the input data in the HDF output file, in RIS8 format */ if (opt->to_image == TRUE) { /* * allocate a buffer for the output image */ im.hres = (opt->hres == 0) ? in.dims[0] : opt->hres; if ((im.hres < in.dims[0]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Horiz."); fprintf(stderr, err3c, "horiz."); fprintf(stderr, err3d, in.dims[0]); im.hres = in.dims[0]; opt->hres = in.dims[0]; } im.vres = (opt->vres == 0) ? in.dims[1] : opt->vres; if ((im.vres < in.dims[1]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Vert."); fprintf(stderr, err3c, "vert."); fprintf(stderr, err3d, in.dims[1]); im.vres = in.dims[1]; opt->vres = in.dims[1]; } im.dres = 1; if (in.rank == 3) { im.dres = (opt->dres == 0) ? in.dims[2] : opt->dres; if ((im.dres < in.dims[2]) && (opt->ctm == EXPAND)) { fprintf(stderr, "%s", err3a); fprintf(stderr, err3b, "Depth"); fprintf(stderr, err3c, "depth"); fprintf(stderr, err3d, in.dims[2]); im.dres = in.dims[2]; opt->dres = in.dims[2]; } } len = im.hres * im.vres * im.dres; if ((im.image = (unsigned char *)malloc((unsigned int)len)) == NULL) { fprintf(stderr, "%s", err2); goto err; } /* * reset max/min symmetrically about the mean value */ if (opt->mean == TRUE) mean(&in, opt); /* * perform pixel replication or interpolation */ if (opt->ctm == EXPAND) { if (pixrep(&in, &im)) goto err; } else { /* INTERP */ if (interp(&in, &im)) goto err; } len = im.hres * im.vres; for (j = 0, ip = im.image; j < im.dres; j++, ip += len) { if (DFR8addimage(opt->outfile, ip, im.hres, im.vres, DFTAG_RLE)) { fprintf(stderr, "%s", err4); goto err; } } #ifdef DEBUG printf("Output Raster Information ...\n\n"); printf("\tresolution (horiz,vert,[depth]):\n\n"); if (in.rank == 2) printf("\t%d %d\n\n", im.hres, im.vres); else printf("\t%d %d %d\n\n", im.hres, im.vres, im.dres); if (opt->mean == TRUE) { printf("\tadjusted max/min values:\n\n"); printf("\t%f %f\n\n", in.max, in.min); } printf("\tcolor index values:"); for (d = 0, ip = im.image; d < im.dres; d++) { printf("\n"); for (v = 0; v < im.vres; v++) { printf("\n"); for (h = 0; h < im.hres; h++, ip++) printf("\t%d", *ip); } } printf("\n"); #endif /* DEBUG */ } /* * free dynamically allocated space */ fpdeallocate(&in, &im, opt); } /* end of for loop */ /* close the output file */ if (SDend(sd_id) != 0) { fprintf(stderr, "%s", err6); goto err; } return (0); err: return (1); } /* * Name: (pkamat - New function) * fpdeallocate * * Purpose: * Deallocate memory of all data structures */ void fpdeallocate(struct Input *in, struct Raster *im, struct Options *opt) { switch (in->outtype) { case 0: /* 32-bit float */ case 5: /* NO_NE */ free(in->hscale); free(in->vscale); if (in->rank == 3) free(in->dscale); if (opt->to_image == TRUE) free(im->image); break; case 1: /* 64-bit float */ free(in->fp64s.hscale); free(in->fp64s.vscale); if (in->rank == 3) free(in->fp64s.dscale); if (opt->to_image == TRUE) free(im->image); break; case 2: /* 32-bit integer */ free(in->in32s.hscale); free(in->in32s.vscale); if (in->rank == 3) free(in->in32s.dscale); break; case 3: /* 16-bit integer */ free(in->in16s.hscale); free(in->in16s.vscale); if (in->rank == 3) free(in->in16s.dscale); break; case 4: /* 8-bit integer */ free(in->in8s.hscale); free(in->in8s.vscale); if (in->rank == 3) free(in->in8s.dscale); break; } free(in->data); } /* * Name: (pkamat - New function) * init_scales * * Purpose: * Initialise the data-structures to hold scale information * Modification: pvn: March, 3, 2006 * handled the case of in->outtype == 5 (NO_NE), for hdf input type * current version assumes that datum is DFNT_FLOAT32 for this case */ static int init_scales(struct Input *in) { const char *err1 = "Unable to dynamically allocate memory.\n"; switch (in->outtype) { case 0: /* 32-bit float */ case 5: /* NO_NE */ if ((in->hscale = (float32 *)malloc((size_t)(in->dims[0] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((in->vscale = (float32 *)malloc((size_t)(in->dims[1] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((in->dscale = (float32 *)malloc((size_t)(in->dims[2] + 1) * sizeof(float32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } break; case 1: /* 64-bit float */ if ((in->fp64s.hscale = (float64 *)malloc((size_t)(in->dims[0] + 1) * sizeof(float64))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((in->fp64s.vscale = (float64 *)malloc((size_t)(in->dims[1] + 1) * sizeof(float64))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((in->fp64s.dscale = (float64 *)malloc((size_t)(in->dims[2] + 1) * sizeof(float64))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } break; case 2: /* 32-bit integer */ if ((in->in32s.hscale = (int32 *)malloc((size_t)(in->dims[0] + 1) * sizeof(int32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((in->in32s.vscale = (int32 *)malloc((size_t)(in->dims[1] + 1) * sizeof(int32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((in->in32s.dscale = (int32 *)malloc((size_t)(in->dims[2] + 1) * sizeof(int32))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } break; case 3: /* 16-bit integer */ if ((in->in16s.hscale = (int16 *)malloc((size_t)(in->dims[0] + 1) * sizeof(int16))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((in->in16s.vscale = (int16 *)malloc((size_t)(in->dims[1] + 1) * sizeof(int16))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((in->in16s.dscale = (int16 *)malloc((size_t)(in->dims[2] + 1) * sizeof(int16))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } break; case 4: /* 8-bit integer */ if ((in->in8s.hscale = (int8 *)malloc((size_t)(in->dims[0] + 1) * sizeof(int8))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if ((in->in8s.vscale = (int8 *)malloc((size_t)(in->dims[1] + 1) * sizeof(int8))) == NULL) { fprintf(stderr, "%s", err1); goto err; } if (in->rank == 3) { if ((in->in8s.dscale = (int8 *)malloc((size_t)(in->dims[2] + 1) * sizeof(int8))) == NULL) { fprintf(stderr, "%s", err1); goto err; } } break; } return (0); err: return (1); } /* * Name: * usage * * Purpose: * Print a summary of command usage. */ void usage(char *name) { fprintf(stderr, "\nUsage:\t%s -h[elp], OR\n", name); fprintf(stderr, "\t%s -V, OR\n", name); fprintf(stderr, "\t%s [ [-t[ype] | -n] ", name); fprintf(stderr, "[ [-t[ype] | -n ]]...]\n"); fprintf(stderr, "\t\t\t\t\t-o[utfile] [options..]\n"); fprintf(stderr, "\n\t-t[ype] "); fprintf(stderr, "\n\t\tOptionally used for every input ASCII file to specify the"); fprintf(stderr, "\n\t\tdata type of the data-set to be written. If not specified"); fprintf(stderr, "\n\t\tdefault data type is 32-bit floating point. "); fprintf(stderr, "\n\t\tcan be any of the following: FP32 (default), FP64, INT32"); fprintf(stderr, "\n\t\tINT16, INT8. It can be used only with ASCII files."); fprintf(stderr, "\n\t-n"); fprintf(stderr, "\n\t\tThis option is to be used only if the binary input file "); fprintf(stderr, "\n\t\tcontains 64-bit floating point data and the default"); fprintf(stderr, "\n\t\tbehaviour (default behaviour is to write it to a 32-bit"); fprintf(stderr, "\n\t\tfloating point data-set) should be overridden to write "); fprintf(stderr, "\n\t\tit to a 64-bit floating point data-set."); fprintf(stderr, "\n\n\toptions...\n"); fprintf(stderr, "\n\t-r[aster]:\n"); fprintf(stderr, "\t\tproduce an image. Could be "); fprintf(stderr, "followed by:\n"); fprintf(stderr, "\t\t-e[xpand] "); fprintf(stderr, "[]:\n"); fprintf(stderr, "\t\t\t resolution with pixel "); fprintf(stderr, "replication\n"); fprintf(stderr, "\t\t-i[nterp] "); fprintf(stderr, "[]:\n"); fprintf(stderr, "\t\t\tresolution with interpolation\n"); fprintf(stderr, "\t\t-p[alfile] :\n"); fprintf(stderr, "\t\t\tinclude palette from palfile\n"); fprintf(stderr, "\t\t-m[ean] :\n"); fprintf(stderr, "\t\t\tmean value to scale image "); fprintf(stderr, "around\n"); fprintf(stderr, "\t-f[loat]:\n"); fprintf(stderr, "\t\tproduce floating point data\n\n"); } hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport.input1000066400000000000000000000010541503061704500212450ustar00rootroot00000000000000open cb32r2.hdf prev tag = 30 next tag = 702 info dump -float close open cb32r3.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r2.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r3.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr3.hdf prev tag = 30 next tag = 702 info dump -float close open cb64r2_ris.hdf prev tag = 30 next tag = 702 info dump -float close open ctxtr2_ris.hdf prev tag = 30 next tag = 303 info dump -byte close quit hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport.out1000066400000000000000000000460371503061704500207270ustar00rootroot00000000000000ctxtr2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes ctxtr3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes cb32i2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes cb32i3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes cb16i2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 6 bytes Ref no 6 8 bytes Ref no 7 24 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 4 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes cb16i3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 10 bytes Ref no 6 6 bytes Ref no 8 8 bytes Ref no 9 120 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 4 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes cb32r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes cb32r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes cb64r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes cb64r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes cb64r2-n.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 24 bytes Ref no 6 32 bytes Ref no 7 96 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 16 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 53 bytes cb64r3-n.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 40 bytes Ref no 6 24 bytes Ref no 8 32 bytes Ref no 9 480 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 16 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 61 bytes ctxtr2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 400 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Compressed Image : (tag 303) Ref no 2 400 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes cb64r2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 8 4 bytes Ref no 15 4 bytes Ref no 18 4 bytes Ref no 21 4 bytes Image Dimensions-8 : (tag 200) Ref no 8 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 8 2550 bytes Image Dimensions : (tag 300) Ref no 8 20 bytes Compressed Image : (tag 303) Ref no 8 2550 bytes Raster Image Group : (tag 306) Ref no 8 8 bytes SciData dimension record : (tag 701) Ref no 15 22 bytes Ref no 18 14 bytes Ref no 21 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 9 60 bytes Ref no 11 60 bytes Ref no 13 61 bytes Ref no 14 55 bytes Ref no 17 64 bytes Ref no 20 64 bytes Vdata Storage : (tag 1963) Ref no 9 4 bytes Ref no 11 4 bytes Ref no 13 8 bytes Ref no 14 -1 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Vgroup : (tag 1965) Ref no 10 33 bytes Ref no 12 33 bytes Ref no 16 60 bytes Ref no 19 53 bytes Ref no 22 53 bytes Ref no 23 55 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport.out2000066400000000000000000000103241503061704500207160ustar00rootroot00000000000000 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+01 1.200000e+01 1.300000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+01 5.600000e+01 6.100000e+01 6.600000e+01 16: 7.100000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+01 1.200000e+01 1.300000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+01 5.600000e+01 6.100000e+01 6.600000e+01 16: 7.100000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+01 1.200000e+01 1.300000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 5.100000e+01 5.600000e+01 6.100000e+01 6.600000e+01 16: 7.100000e+01 (2) Scientific Data : (Tag 702) Ref 4 0: 1.100000e+01 1.200000e+01 1.300000e+01 (2) Compressed Image : (Tag 303) Ref 2 0: 137 1 144 60 144 120 137 179 8: 137 1 144 60 144 120 137 179 16: 137 1 144 60 144 120 137 179 24: 137 1 144 60 144 120 137 179 32: 137 1 144 60 144 120 137 179 40: 137 1 144 60 144 120 137 179 48: 137 1 144 60 144 120 137 179 56: 137 1 144 60 144 120 137 179 64: 137 1 144 60 144 120 137 179 72: 137 1 144 60 144 120 137 179 80: 137 1 144 60 144 120 137 179 88: 137 1 144 60 144 120 137 179 96: 137 1 144 60 144 120 137 179 104: 137 31 144 90 144 150 137 209 112: 137 31 144 90 144 150 137 209 120: 137 31 144 90 144 150 137 209 128: 137 31 144 90 144 150 137 209 136: 137 31 144 90 144 150 137 209 144: 137 31 144 90 144 150 137 209 152: 137 31 144 90 144 150 137 209 160: 137 31 144 90 144 150 137 209 168: 137 31 144 90 144 150 137 209 176: 137 31 144 90 144 150 137 209 184: 137 31 144 90 144 150 137 209 192: 137 31 144 90 144 150 137 209 200: 137 31 144 90 144 150 137 209 208: 137 31 144 90 144 150 137 209 216: 137 31 144 90 144 150 137 209 224: 137 31 144 90 144 150 137 209 232: 137 31 144 90 144 150 137 209 240: 137 31 144 90 144 150 137 209 248: 137 31 144 90 144 150 137 209 256: 137 31 144 90 144 150 137 209 264: 137 31 144 90 144 150 137 209 272: 137 31 144 90 144 150 137 209 280: 137 31 144 90 144 150 137 209 288: 137 31 144 90 144 150 137 209 296: 137 60 144 120 144 179 137 239 304: 137 60 144 120 144 179 137 239 312: 137 60 144 120 144 179 137 239 320: 137 60 144 120 144 179 137 239 328: 137 60 144 120 144 179 137 239 336: 137 60 144 120 144 179 137 239 344: 137 60 144 120 144 179 137 239 352: 137 60 144 120 144 179 137 239 360: 137 60 144 120 144 179 137 239 368: 137 60 144 120 144 179 137 239 376: 137 60 144 120 144 179 137 239 384: 137 60 144 120 144 179 137 239 392: 137 60 144 120 144 179 137 239 400: hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimport.out3000066400000000000000000000020511503061704500207150ustar00rootroot00000000000000SDSfloat2.out: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 14 17 20 SciData dimension record : (tag 701) Ref nos: 14 17 20 Scientific Data : (tag 702) Ref nos: 4 6 7 Numeric Data Group : (tag 720) Ref nos: 2 3 5 Vdata : (tag 1962) Ref nos: 8 10 12 13 16 19 Vdata Storage : (tag 1963) Ref nos: 8 10 12 13 16 19 Vgroup : (tag 1965) Ref nos: 9 11 15 18 21 22 SDSfloat3.out: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 18 21 24 27 SciData dimension record : (tag 701) Ref nos: 18 21 24 27 Scientific Data : (tag 702) Ref nos: 4 6 8 9 Numeric Data Group : (tag 720) Ref nos: 2 3 5 7 Vdata : (tag 1962) Ref nos: 10 12 14 16 17 20 23 26 Vdata Storage : (tag 1963) Ref nos: 10 12 14 16 17 20 23 26 Vgroup : (tag 1965) Ref nos: 11 13 15 19 22 25 28 29 hdf4-hdf4.3.1/mfhdf/hdfimport/hdfimporttest.c000066400000000000000000000377711503061704500211660ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf.h" /* * Name: * hdfimporttest * * Description: * This program creates binary and text input files that can be * used to test the hdfimport program. * * June 1, 1990 * Bob Weaver, baw@inel.gov * * Last Revision: December 10, 2001 * Pankaj Kamat, pkamat@uiuc.edu * * row values start at 11 and increment by 1 => 11, 12, 13 * column values start at 21 and increment by 2 => 21, 23, 25, 27 * plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71 * * data element value = row value + column value [+ plane value, if rank=3] */ int main(void) { int nrow = 3, ncol = 4, npln = 5, ione = 1; int i, j, k; FILE *sp; float32 b32r2[3][4], b32r3[5][3][4]; float32 row4[3], col4[4], pln4[5]; float32 rowo4 = (float32)11.0e0, colo4 = (float32)21.0e0, plno4 = (float32)51.0e0; float32 rowi4 = (float32)1.0e0, coli4 = (float32)2.0e0, plni4 = (float32)5.0e0; float32 ezero = (float32)0.0e0; int32 b32i2[3][4], b32i3[5][3][4]; int32 row4i[3], col4i[4], pln4i[5]; int32 rowo4i = (int32)11, colo4i = (int32)21, plno4i = (int32)51; int32 rowi4i = (int32)1, coli4i = (int32)2, plni4i = (int32)5; int32 ezeroi = (int32)0; int16 b16i2[3][4], b16i3[5][3][4]; int16 row4i16[3], col4i16[4], pln4i16[5]; int16 rowo4i16 = (int16)11, colo4i16 = (int16)21, plno4i16 = (int16)51; int16 rowi4i16 = (int16)1, coli4i16 = (int16)2, plni4i16 = (int16)5; int16 ezeroi16 = (int16)0; int8 b8i2[3][4], b8i3[5][3][4]; int8 row4i8[3], col4i8[4], pln4i8[5]; int8 rowo4i8 = (int8)11, colo4i8 = (int8)21, plno4i8 = (int8)51; int8 rowi4i8 = (int8)1, coli4i8 = (int8)2, plni4i8 = (int8)5; int8 ezeroi8 = (int8)0; float64 b64r2[3][4], b64r3[5][3][4]; float64 row8[3], col8[4], pln8[5]; float64 rowo8 = 11.0e0, colo8 = 21.0e0, plno8 = 51.0e0; float64 rowi8 = 1.0e0, coli8 = 2.0e0, plni8 = 5.0e0; float64 dzero = 0.0e0; const char *text = "TEXT"; const char *fp32 = "FP32"; const char *fp64 = "FP64"; const char *in32 = "IN32"; const char *in16 = "IN16"; const char *in8 = "IN08"; /* * initialize the row, column, and plane vectors * * row values start at 11 and increment by 1 => 11, 12, 13 * column values start at 21 and increment by 2 => 21, 23, 25, 27 * plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71 */ row4[0] = rowo4; col4[0] = colo4; pln4[0] = plno4; row8[0] = rowo8; col8[0] = colo8; pln8[0] = plno8; row4i[0] = rowo4i; col4i[0] = colo4i; pln4i[0] = plno4i; row4i16[0] = rowo4i16; col4i16[0] = colo4i16; pln4i16[0] = plno4i16; row4i8[0] = rowo4i8; col4i8[0] = colo4i8; pln4i8[0] = plno4i8; for (i = 1; i < nrow; i++) { row4[i] = row4[i - 1] + rowi4; row8[i] = row8[i - 1] + rowi8; row4i[i] = row4i[i - 1] + rowi4i; row4i16[i] = row4i16[i - 1] + rowi4i16; row4i8[i] = row4i8[i - 1] + rowi4i8; } for (j = 1; j < ncol; j++) { col4[j] = col4[j - 1] + coli4; col8[j] = col8[j - 1] + coli8; col4i[j] = col4i[j - 1] + coli4i; col4i16[j] = col4i16[j - 1] + coli4i16; col4i8[j] = col4i8[j - 1] + coli4i8; } for (k = 1; k < npln; k++) { pln4[k] = pln4[k - 1] + plni4; pln8[k] = pln8[k - 1] + plni8; pln4i[k] = pln4i[k - 1] + plni4i; pln4i16[k] = pln4i16[k - 1] + plni4i16; pln4i8[k] = pln4i8[k - 1] + plni4i8; } /* * build array elements - rank 2 * * element value = sum of row value and col values */ for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) { b32r2[i][j] = row4[i] + col4[j]; b64r2[i][j] = row8[i] + col8[j]; b32i2[i][j] = row4i[i] + col4i[j]; b16i2[i][j] = row4i16[i] + col4i16[j]; b8i2[i][j] = row4i8[i] + col4i8[j]; } } /* * build array elements - rank 3 * * element value = sum of row value, col, and plane values */ for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) { for (k = 0; k < npln; k++) { b32r3[k][i][j] = row4[i] + col4[j] + pln4[k]; b64r3[k][i][j] = row8[i] + col8[j] + pln8[k]; b32i3[k][i][j] = row4i[i] + col4i[j] + pln4i[k]; b16i3[k][i][j] = row4i16[i] + col4i16[j] + pln4i16[k]; b8i3[k][i][j] = row4i8[i] + col4i8[j] + pln4i8[k]; } } } /* * text file - rank 2 & 3 */ sp = fopen("ctxtr2", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", ione, nrow, ncol); fprintf(sp, "%14.6E%14.6E\n", (double)ezero, (double)ezero); for (i = 0; i < nrow; i++) fprintf(sp, "%14.6E", (double)row4[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", (double)col4[j]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", (double)b32r2[i][j]); fprintf(sp, "\n"); } (void)fclose(sp); sp = fopen("ctxti2", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", ione, nrow, ncol); fprintf(sp, "%10d%10d\n", ezeroi, ezeroi); for (i = 0; i < nrow; i++) fprintf(sp, "%10d", row4i[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%10d", col4i[j]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%10d", b32i2[i][j]); fprintf(sp, "\n"); } (void)fclose(sp); sp = fopen("ctxti162", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", ione, nrow, ncol); fprintf(sp, "%10u%10u\n", ezeroi16, ezeroi16); for (i = 0; i < nrow; i++) fprintf(sp, "%10u", row4i16[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%10u", col4i16[j]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%10u", b16i2[i][j]); fprintf(sp, "\n"); } (void)fclose(sp); sp = fopen("ctxti82", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", ione, nrow, ncol); fprintf(sp, "%10c%10c\n", ezeroi8, ezeroi8); for (i = 0; i < nrow; i++) fprintf(sp, "%10c", row4i8[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%10c", col4i8[j]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%10c", b8i2[i][j]); fprintf(sp, "\n"); } (void)fclose(sp); sp = fopen("ctxtr3", "w"); fprintf(sp, "%s\n", text); fprintf(sp, "%10d%10d%10d\n", npln, nrow, ncol); fprintf(sp, "%14.6E%14.6E\n", (double)ezero, (double)ezero); for (k = 0; k < npln; k++) fprintf(sp, "%14.6E", (double)pln4[k]); fprintf(sp, "\n"); for (i = 0; i < nrow; i++) fprintf(sp, "%14.6E", (double)row4[i]); fprintf(sp, "\n"); for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", (double)col4[j]); fprintf(sp, "\n"); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) { for (j = 0; j < ncol; j++) fprintf(sp, "%14.6E", (double)b32r3[k][i][j]); fprintf(sp, "\n"); } (void)fclose(sp); /* * binary 32-bit file - rank 2 & 3 */ sp = fopen("cb32r2", "w"); (void)fwrite(fp32, strlen(fp32), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4[i], sizeof(float32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4[j], sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32r2[i][j], sizeof(float32), 1, sp); (void)fclose(sp); sp = fopen("cb32i2", "w"); (void)fwrite(in32, strlen(in32), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi, sizeof(int32), 1, sp); (void)fwrite((char *)&ezeroi, sizeof(int32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i[i], sizeof(int32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i[j], sizeof(int32), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32i2[i][j], sizeof(int32), 1, sp); (void)fclose(sp); sp = fopen("cb16i2", "w"); (void)fwrite(in16, strlen(in16), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi16, sizeof(int16), 1, sp); (void)fwrite((char *)&ezeroi, sizeof(int16), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i16[i], sizeof(int16), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i16[j], sizeof(int16), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b16i2[i][j], sizeof(int16), 1, sp); (void)fclose(sp); sp = fopen("cb8i2", "w"); (void)fwrite(in8, strlen(in8), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi8, sizeof(int8), 1, sp); (void)fwrite((char *)&ezeroi8, sizeof(int8), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i8[i], sizeof(int8), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i8[j], sizeof(int8), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b8i2[i][j], sizeof(int8), 1, sp); (void)fclose(sp); sp = fopen("cb32r3", "w"); (void)fwrite(fp32, strlen(fp32), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); (void)fwrite((char *)&ezero, sizeof(float32), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln4[k], sizeof(float32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4[i], sizeof(float32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4[j], sizeof(float32), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32r3[k][i][j], sizeof(float32), 1, sp); (void)fclose(sp); sp = fopen("cb32i3", "w"); (void)fwrite(in32, strlen(in32), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi, sizeof(int32), 1, sp); (void)fwrite((char *)&ezeroi, sizeof(int32), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln4i[k], sizeof(int32), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i[i], sizeof(int32), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i[j], sizeof(int32), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b32i3[k][i][j], sizeof(int32), 1, sp); (void)fclose(sp); sp = fopen("cb16i3", "w"); (void)fwrite(in16, strlen(in16), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi16, sizeof(int16), 1, sp); (void)fwrite((char *)&ezeroi16, sizeof(int16), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln4i16[k], sizeof(int16), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i16[i], sizeof(int16), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i16[j], sizeof(int16), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b16i3[k][i][j], sizeof(int16), 1, sp); (void)fclose(sp); sp = fopen("cb8i3", "w"); (void)fwrite(in8, strlen(in8), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&ezeroi8, sizeof(int8), 1, sp); (void)fwrite((char *)&ezeroi8, sizeof(int8), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln4i8[k], sizeof(int8), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row4i8[i], sizeof(int8), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col4i8[j], sizeof(int8), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b8i3[k][i][j], sizeof(int8), 1, sp); (void)fclose(sp); /* * binary 64-bit file - rank 2 & 3 */ sp = fopen("cb64r2", "w"); (void)fwrite(fp64, strlen(fp64), 1, sp); (void)fwrite((char *)&ione, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row8[i], sizeof(float64), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col8[j], sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b64r2[i][j], sizeof(float64), 1, sp); (void)fclose(sp); sp = fopen("cb64r3", "w"); (void)fwrite(fp64, strlen(fp64), 1, sp); (void)fwrite((char *)&npln, sizeof(int), 1, sp); (void)fwrite((char *)&nrow, sizeof(int), 1, sp); (void)fwrite((char *)&ncol, sizeof(int), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); (void)fwrite((char *)&dzero, sizeof(float64), 1, sp); for (k = 0; k < npln; k++) (void)fwrite((char *)&pln8[k], sizeof(float64), 1, sp); for (i = 0; i < nrow; i++) (void)fwrite((char *)&row8[i], sizeof(float64), 1, sp); for (j = 0; j < ncol; j++) (void)fwrite((char *)&col8[j], sizeof(float64), 1, sp); for (k = 0; k < npln; k++) for (i = 0; i < nrow; i++) for (j = 0; j < ncol; j++) (void)fwrite((char *)&b64r3[k][i][j], sizeof(float64), 1, sp); (void)fclose(sp); return EXIT_SUCCESS; } hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/000077500000000000000000000000001503061704500201115ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/SDSfloat2.tst000066400000000000000000000010051503061704500224020ustar00rootroot00000000000000SDSfloat2.out: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 14 17 20 SciData dimension record : (tag 701) Ref nos: 14 17 20 Scientific Data : (tag 702) Ref nos: 4 6 7 Numeric Data Group : (tag 720) Ref nos: 2 3 5 Vdata : (tag 1962) Ref nos: 8 10 12 13 16 19 Vdata Storage : (tag 1963) Ref nos: 8 10 12 13 16 19 Vgroup : (tag 1965) Ref nos: 9 11 15 18 21 22 hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/SDSfloat3.tst000066400000000000000000000010441503061704500224060ustar00rootroot00000000000000SDSfloat3.out: Version Descriptor : (tag 30) Ref nos: 1 Number type : (tag 106) Ref nos: 18 21 24 27 SciData dimension record : (tag 701) Ref nos: 18 21 24 27 Scientific Data : (tag 702) Ref nos: 4 6 8 9 Numeric Data Group : (tag 720) Ref nos: 2 3 5 7 Vdata : (tag 1962) Ref nos: 10 12 14 16 17 20 23 26 Vdata Storage : (tag 1963) Ref nos: 10 12 14 16 17 20 23 26 Vgroup : (tag 1965) Ref nos: 11 13 15 19 22 25 28 29 hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb16i2.tst000066400000000000000000000024111503061704500216310ustar00rootroot00000000000000cb16i2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 6 bytes Ref no 6 8 bytes Ref no 7 24 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 4 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb16i3.tst000066400000000000000000000030651503061704500216400ustar00rootroot00000000000000cb16i3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 10 bytes Ref no 6 6 bytes Ref no 8 8 bytes Ref no 9 120 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 4 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb32i2.tst000066400000000000000000000024111503061704500216270ustar00rootroot00000000000000cb32i2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb32i3.tst000066400000000000000000000030651503061704500216360ustar00rootroot00000000000000cb32i3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb32r2.tst000066400000000000000000000024111503061704500216400ustar00rootroot00000000000000cb32r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb32r3.tst000066400000000000000000000030651503061704500216470ustar00rootroot00000000000000cb32r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb64r2-n.tst000066400000000000000000000024131503061704500221020ustar00rootroot00000000000000cb64r2-n.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 24 bytes Ref no 6 32 bytes Ref no 7 96 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 16 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 53 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb64r2.tst000066400000000000000000000024111503061704500216450ustar00rootroot00000000000000cb64r2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb64r2_ris.tst000066400000000000000000000032301503061704500225220ustar00rootroot00000000000000cb64r2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 8 4 bytes Ref no 15 4 bytes Ref no 18 4 bytes Ref no 21 4 bytes Image Dimensions-8 : (tag 200) Ref no 8 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 8 2550 bytes Image Dimensions : (tag 300) Ref no 8 20 bytes Compressed Image : (tag 303) Ref no 8 2550 bytes Raster Image Group : (tag 306) Ref no 8 8 bytes SciData dimension record : (tag 701) Ref no 15 22 bytes Ref no 18 14 bytes Ref no 21 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 9 60 bytes Ref no 11 60 bytes Ref no 13 61 bytes Ref no 14 55 bytes Ref no 17 64 bytes Ref no 20 64 bytes Vdata Storage : (tag 1963) Ref no 9 4 bytes Ref no 11 4 bytes Ref no 13 8 bytes Ref no 14 -1 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Vgroup : (tag 1965) Ref no 10 33 bytes Ref no 12 33 bytes Ref no 16 60 bytes Ref no 19 53 bytes Ref no 22 53 bytes Ref no 23 55 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb64r3-n.tst000066400000000000000000000030671503061704500221110ustar00rootroot00000000000000cb64r3-n.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 40 bytes Ref no 6 24 bytes Ref no 8 32 bytes Ref no 9 480 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 16 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 61 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/cb64r3.tst000066400000000000000000000030651503061704500216540ustar00rootroot00000000000000cb64r3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/ctxtr2.tst000066400000000000000000000024111503061704500220710ustar00rootroot00000000000000ctxtr2.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 14 4 bytes Ref no 17 4 bytes Ref no 20 4 bytes SciData dimension record : (tag 701) Ref no 14 22 bytes Ref no 17 14 bytes Ref no 20 14 bytes Scientific Data : (tag 702) Ref no 4 12 bytes Ref no 6 16 bytes Ref no 7 48 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Vdata : (tag 1962) Ref no 8 60 bytes Ref no 10 60 bytes Ref no 12 61 bytes Ref no 13 55 bytes Ref no 16 64 bytes Ref no 19 64 bytes Vdata Storage : (tag 1963) Ref no 8 4 bytes Ref no 10 4 bytes Ref no 12 8 bytes Ref no 13 -1 bytes Ref no 16 -1 bytes Ref no 19 -1 bytes Vgroup : (tag 1965) Ref no 9 33 bytes Ref no 11 33 bytes Ref no 15 60 bytes Ref no 18 53 bytes Ref no 21 53 bytes Ref no 22 51 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/ctxtr2_ris.tst000066400000000000000000000010171503061704500227470ustar00rootroot00000000000000ctxtr2_ris.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 2 4 bytes Image Dimensions-8 : (tag 200) Ref no 2 4 bytes RLE Compressed Image-8 : (tag 203) Ref no 2 400 bytes Image Dimensions : (tag 300) Ref no 2 20 bytes Compressed Image : (tag 303) Ref no 2 400 bytes Raster Image Group : (tag 306) Ref no 2 8 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testfiles/ctxtr3.tst000066400000000000000000000030651503061704500221000ustar00rootroot00000000000000ctxtr3.hdf: Version Descriptor : (tag 30) Ref no 1 92 bytes Number type : (tag 106) Ref no 18 4 bytes Ref no 21 4 bytes Ref no 24 4 bytes Ref no 27 4 bytes SciData dimension record : (tag 701) Ref no 18 30 bytes Ref no 21 14 bytes Ref no 24 14 bytes Ref no 27 14 bytes Scientific Data : (tag 702) Ref no 4 20 bytes Ref no 6 12 bytes Ref no 8 16 bytes Ref no 9 240 bytes Numeric Data Group : (tag 720) Ref no 2 16 bytes Ref no 3 16 bytes Ref no 5 16 bytes Ref no 7 16 bytes Vdata : (tag 1962) Ref no 10 60 bytes Ref no 12 60 bytes Ref no 14 60 bytes Ref no 16 61 bytes Ref no 17 55 bytes Ref no 20 64 bytes Ref no 23 64 bytes Ref no 26 64 bytes Vdata Storage : (tag 1963) Ref no 10 4 bytes Ref no 12 4 bytes Ref no 14 4 bytes Ref no 16 8 bytes Ref no 17 -1 bytes Ref no 20 -1 bytes Ref no 23 -1 bytes Ref no 26 -1 bytes Vgroup : (tag 1965) Ref no 11 33 bytes Ref no 13 33 bytes Ref no 15 33 bytes Ref no 19 64 bytes Ref no 22 53 bytes Ref no 25 53 bytes Ref no 28 53 bytes Ref no 29 59 bytes hdf4-hdf4.3.1/mfhdf/hdfimport/testutil.sh.in000066400000000000000000000154571503061704500207410ustar00rootroot00000000000000#!/bin/sh # HDF Utilities Test script # Usage: testutil.sh [machine-type] srcdir=@srcdir@ machinetype="$1" # Check if target machine supports 32 bits datatype. # "true" is TRUE; "" means FALSE. case $machinetype in *unicos*) has32="";; *) has32="true";; esac # initialize errors variable errors=0 haserr=0 # setup hdfed command which is used often HDFED='../../hdf/util/hdfed' HDFLS="${TESTS_ENVIRONMENT} ../../hdf/util/hdfls" HDFEDCMD="${TESTS_ENVIRONMENT} $HDFED -batch" # use -batch mode for no prompt SED="sed -e /library/,/String/d" # filter out the library version TESTCMD="${TESTS_ENVIRONMENT} ./hdfimport" # The test command echo "" echo "==============================" echo "HDFIMPORT tests started" echo "==============================" if [ -f hdfimport -a -f hdfimporttest ]; then echo "** Testing hdfimport ***" # use [!S] to prevent SDSfloat2.hdf and SDSfloat3.hdf from being deleted; # please replace with better solution, one is if available. - BMR (2006/9/23) /bin/rm -f ctxt* cb* [!S]*.hdf *.out hdfls.tmp5 hdfed.tmp6 hdffiles.tmp ${TESTS_ENVIRONMENT} ./hdfimporttest echo "Testing for 32-bit floating point ASCII (2D data)" $TESTCMD ctxtr2 -o ctxtr2.hdf echo "Testing for 32-bit floating point ASCII (3D data)" $TESTCMD ctxtr3 -o ctxtr3.hdf echo "Testing for 32-bit integer binary (2D data)" $TESTCMD cb32i2 -o cb32i2.hdf echo "Testing for 32-bit integer binary (3D data)" $TESTCMD cb32i3 -o cb32i3.hdf echo "Testing for 16-bit integer binary (2D data)" $TESTCMD cb16i2 -o cb16i2.hdf echo "Testing for 16-bit integer (3D data)" $TESTCMD cb16i3 -o cb16i3.hdf echo "Testing for 32-bit floating point binary (2D data)" $TESTCMD cb32r2 -o cb32r2.hdf echo "Testing for 32-bit floating point binary (3D data)" $TESTCMD cb32r3 -o cb32r3.hdf echo "Testing for 64-bit floating point binary (2D data) - Default Behaviour (Conversion to 32 bit FP SDS)" $TESTCMD cb64r2 -o cb64r2.hdf echo "Testing for 64-bit floating point binary (3D data) - Default Behaviour (Conversion to 32-bit FP SDS)" $TESTCMD cb64r3 -o cb64r3.hdf echo "Testing for 64-bit floating point binary (2D data) - Conversion to 64-bit FP SDS" $TESTCMD cb64r2 -n -o cb64r2-n.hdf echo "Testing for 64-bit floating point binary (3D data) - Conversion to 64-bit FP SDS" $TESTCMD cb64r3 -n -o cb64r3-n.hdf echo "Testing for raster options" $TESTCMD ctxtr2 -o ctxtr2_ris.hdf -raster -e 50 50 $TESTCMD cb64r2 -o cb64r2_ris.hdf -raster -i 50 50 -f # test with hdf files echo "Testing for reading from hdf files" $TESTCMD $srcdir/SDSfloat2.hdf -o SDSfloat2.out $TESTCMD $srcdir/SDSfloat3.hdf -o SDSfloat3.out ($HDFLS -l ctxtr2.hdf | $SED) > hdfls.tmp5 2>&1 ($HDFLS -l ctxtr3.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb32i2.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb32i3.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb16i2.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb16i3.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb32r2.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb32r3.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb64r2.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb64r3.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb64r2-n.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb64r3-n.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l ctxtr2_ris.hdf | $SED) >> hdfls.tmp5 2>&1 ($HDFLS -l cb64r2_ris.hdf | $SED) >> hdfls.tmp5 2>&1 # run hdfls on SDSfloat*.out, and remove the library version from the # output for later checking against original output - BMR (2006/9/7) ($HDFLS SDSfloat2.out | $SED) >> hdffiles.tmp 2>&1 ($HDFLS SDSfloat3.out | $SED) >> hdffiles.tmp 2>&1 diff -b hdfls.tmp5 $srcdir/hdfimport.out1 || errors=1 $HDFEDCMD < $srcdir/hdfimport.input1 > hdfed.tmp6 2>&1 diff -b hdfed.tmp6 $srcdir/hdfimport.out2 || errors=1 # hdfimport.out3 contains output that hdfls previously generated # from SDSfloat*.out with the library version removed - BMR (2006/9/7) diff -b hdffiles.tmp $srcdir/hdfimport.out3 || errors=1 # use [!S] to prevent SDSfloat2.hdf and SDSfloat3.hdf from being deleted; # please replace with a better solution, if one is available. - BMR (2006/9/23) /bin/rm -f ctxt* cb* [!S]*.hdf *.out hdfls.tmp5 hdfed.tmp6 hdffiles.tmp #/bin/rm -f ctxt* cb* *.hdf else haserr=1 echo "** hdfimport or hdfimporttest not available ***" fi if [ $errors -eq 1 ]; then haserr=1 echo " ********* NOTE ***************" echo " hdfimport might have failed ***" echo " The above errors could be formatting " echo " problems which can be ignored " echo " please run the following by hand to verify " echo " " echo " /bin/rm -f ctxtr* cb* *.hdf hdfls.tmp5 hdfed.tmp6" echo " ${TESTS_ENVIRONMENT} ./hdfimporttest " echo " $TESTCMD ctxtr2 -o ctxtr2.hdf " echo " $TESTCMD ctxtr3 -o ctxtr3.hdf " echo " $TESTCMD cb32i2 -o cb32i2.hdf " echo " $TESTCMD cb32i3 -o cb32i3.hdf " echo " $TESTCMD cb16i2 -o cb16i2.hdf " echo " $TESTCMD cb16i3 -o cb16i3.hdf " echo " $TESTCMD cb32r2 -o cb32r2.hdf " echo " $TESTCMD cb32r3 -o cb32r3.hdf " echo " $TESTCMD cb64r2 -o cb64r2.hdf " echo " $TESTCMD cb64r3 -o cb64r3.hdf " echo " $TESTCMD cb64r2 -n -o cb64r2-n.hdf " echo " $TESTCMD cb64r3 -n -o cb64r3-n.hdf " echo " $TESTCMD ctxtr2 -o ctxtr2_ris.hdf -raster -e 50 50 " echo " $TESTCMD cb64r2 -o cb64r2_ris.hdf -raster -i 50 50 -f " echo " $TESTCMD SDSfloat2.hdf -o SDSfloat2.out " echo " $TESTCMD SDSfloat3.hdf -o SDSfloat3.out " echo "($HDFLS -l ctxtr2.hdf | $SED) >& hdfls.tmp5 " echo "($HDFLS -l ctxtr3.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb32i2.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l cb32i3.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l cb16i2.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l cb16i3.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l cb32r2.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb32r3.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb64r2.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb64r3.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb64r2-n.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l cb64r3-n.hdf | $SED) >> hdfls.tmp5 2>&1 " echo "($HDFLS -l ctxtr2_ris.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS -l cb64r2_ris.hdf | $SED) >>& hdfls.tmp5 " echo "($HDFLS SDSfloat2.out | $SED) >> hdffiles.tmp 2>&1 " echo "($HDFLS SDSfloat3.out | $SED) >> hdffiles.tmp 2>&1 " echo " diff hdfls.tmp5 hdfimport.out1 " echo " $HDFEDCMD < hdfimport.input1 >& hdfed.tmp6 " echo " diff hdfed.tmp6 hdfimport.out2 " echo " diff hdffiles.tmp hdfimport.out3 || errors=1 " echo " ******* END NOTE *************" echo "" errors=0 fi # # Check errors result if [ $haserr -eq 0 ]; then echo "=================================" echo "HDFIMPORT Utilities tests passed." echo "=================================" else echo "*********************************************" echo "HDFIMPORT Utilities tests encountered errors" echo "*********************************************" fi echo "" exit $haserr hdf4-hdf4.3.1/mfhdf/hdiff/000077500000000000000000000000001503061704500151735ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/hdiff/CMakeLists.txt000066400000000000000000000045231503061704500177370ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_HDIFF C) if (WIN32) set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:LIBCMT") endif () set (hdiff_SRCS ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_array.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_gr.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_list.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_main.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_mattbl.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_gattr.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_misc.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_sds.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_table.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_vs.c ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdiff_dim.c ${HDF4_MFHDF_UTIL_DIR}/h4getopt.c ) add_executable(hdiff ${hdiff_SRCS}) target_include_directories(hdiff PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR};${HDF4_MFHDF_UTIL_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hdiff STATIC) target_link_libraries(hdiff PRIVATE ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS}) else () TARGET_C_PROPERTIES (hdiff SHARED) target_link_libraries(hdiff PRIVATE ${HDF4_MF_LIBSH_TARGET} ${HDF4_SRC_LIBSH_TARGET} ${LINK_LIBS}) endif () set_global_variable (HDF4_UTILS_TO_EXPORT "${HDF4_UTILS_TO_EXPORT};hdiff") set (H4_DEP_EXECUTABLES hdiff) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Rules for Installation of tools using make Install target #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} EXPORT ${HDF4_EXPORTED_TARGETS} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/hdiff/CMakeTests.cmake000066400000000000000000000155201503061704500202030ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## # -------------------------------------------------------------------- # This executable is used to generate test files for the hdiff tests. # It should only be run during development when new test files are needed # -------------------------------------------------------------------- if (HDF4_BUILD_GENERATORS AND NOT ONLY_SHARED_LIBS) set (hdifftst_SRCS ${HDF4_MFHDF_HDIFF_SOURCE_DIR}/hdifftst.c ) add_executable (hdifftst ${hdifftst_SRCS}) target_include_directories(hdifftst PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR}") if (BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (hdifftst STATIC) target_link_libraries (hdifftst PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdifftst SHARED) target_link_libraries (hdifftst PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () # Remove any output file left over from previous test run add_test ( NAME HDIFF-GEN-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove hdifftst1.hdf hdifftst2.hdf hdifftst3.hdf hdifftst4.hdf hdifftst5.hdf hdifftst6.hdf hdifftst7.hdf ) set (last_test "HDIFF-GEN-clearall-objects") add_test (NAME hdifftst COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set_tests_properties (hdifftst PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) set (last_test "hdifftst") endif () macro (ADD_H4_TEST resultfile resultcode) if (HDF4_ENABLE_USING_MEMCHECKER) add_test (NAME HDIFF-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN}) if (NOT ${resultcode} STREQUAL "0") set_tests_properties (HDIFF-${resultfile} PROPERTIES LABELS ${PROJECT_NAME} WILL_FAIL "true") else () set_tests_properties (HDIFF-${resultfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () else () add_test ( NAME HDIFF-${resultfile} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${ARGN}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles" -D "TEST_OUTPUT=${resultfile}.out" -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=${resultfile}.txt" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) endif () if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDIFF-${resultfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDIFF-${resultfile} PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDIFF-${resultfile}") endmacro () #-- Copy all the data files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES hdifftst1.hdf hdifftst2.hdf hdifftst3.hdf hdifftst4.hdf hdifftst5.hdf hdifftst6.hdf hdifftst7.hdf ) set (HDF4_REFERENCE_FILES hdiff_01.txt hdiff_02.txt hdiff_03.txt hdiff_04.txt hdiff_05.txt # hdiff_06.txt hdiff_07.txt hdiff_08.txt hdiff_09.txt hdiff_10.txt hdiff_11.txt hdiff_12.txt hdiff_13.txt hdiff_14.txt hdiff_15.txt ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES} ${HDF4_REFERENCE_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_HDIFF_SOURCE_DIR}/testfiles/${h4_file}" "${PROJECT_BINARY_DIR}/testfiles/${h4_file}" "hdiff_files") endforeach () if (WIN32 AND MSVC_VERSION LESS 1900) HDFTEST_COPY_FILE("${HDF4_MFHDF_HDIFF_SOURCE_DIR}/testfiles/hdiff_06w.txt" "${PROJECT_BINARY_DIR}/testfiles/hdiff_06.txt" "hdiff_files") else () HDFTEST_COPY_FILE("${HDF4_MFHDF_HDIFF_SOURCE_DIR}/testfiles/hdiff_06.txt" "${PROJECT_BINARY_DIR}/testfiles/hdiff_06.txt" "hdiff_files") endif () add_custom_target(hdiff_files ALL COMMENT "Copying files needed by hdiff tests" DEPENDS ${hdiff_files_list}) ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME HDIFF-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove hdiff_01.out hdiff_02.out hdiff_03.out hdiff_04.out hdiff_05.out hdiff_06.out hdiff_07.out hdiff_08.out hdiff_09.out hdiff_10.out hdiff_11.out hdiff_12.out hdiff_13.out hdiff_14.out hdiff_15.out hdiff_01.out.err hdiff_02.out.err hdiff_03.out.err hdiff_04.out.err hdiff_05.out.err hdiff_06.out.err hdiff_07.out.err hdiff_08.out.err hdiff_09.out.err hdiff_10.out.err hdiff_11.out.err hdiff_12.out.err hdiff_13.out.err hdiff_14.out.err hdiff_15.out.err ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (HDIFF-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (HDIFF-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "HDIFF-clearall-objects") # help message ADD_H4_TEST (hdiff_01 1) # Compare global attributes only ADD_H4_TEST (hdiff_02 1 -g hdifftst1.hdf hdifftst2.hdf) # Compare SD local attributes only ADD_H4_TEST (hdiff_03 1 -s hdifftst1.hdf hdifftst2.hdf) # Compare SD data only ADD_H4_TEST (hdiff_04 1 -d hdifftst1.hdf hdifftst2.hdf) # Compare Vdata data only ADD_H4_TEST (hdiff_05 1 -D hdifftst1.hdf hdifftst2.hdf) # Print statistics ADD_H4_TEST (hdiff_06 1 -d -S hdifftst1.hdf hdifftst2.hdf) # Compare SD data on variable(s) ADD_H4_TEST (hdiff_07 1 -d -v dset1 hdifftst1.hdf hdifftst2.hdf) # Compare vdata on variable(s) ADD_H4_TEST (hdiff_08 1 -D -u vdata1 hdifftst1.hdf hdifftst2.hdf) # Print difference up to count number ADD_H4_TEST (hdiff_09 1 -d -e 2 hdifftst1.hdf hdifftst2.hdf) # Print difference when it is greater than limit ADD_H4_TEST (hdiff_10 1 -d -t 2 hdifftst1.hdf hdifftst2.hdf) # no options ADD_H4_TEST (hdiff_11 1 hdifftst1.hdf hdifftst2.hdf) # percent (relative) ADD_H4_TEST (hdiff_12 1 -d -p 0.05 -v dset3 hdifftst1.hdf hdifftst2.hdf) # hyperslab reading ADD_H4_TEST (hdiff_13 0 hdifftst3.hdf hdifftst4.hdf) # lone dim ADD_H4_TEST (hdiff_14 1 hdifftst5.hdf hdifftst6.hdf) # group loop ADD_H4_TEST (hdiff_15 0 -b hdifftst7.hdf hdifftst7.hdf) hdf4-hdf4.3.1/mfhdf/hdiff/Makefile.am000066400000000000000000000041621503061704500172320ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. hdiff_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(hdiff_INCLUDES) $(DEFINES) ## Add hdiff specific linker flags here hdiff_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = hdiff ## Information for building the "hdiff" program hdiff_SOURCES = hdiff.c hdiff_array.c hdiff_gr.c hdiff_list.c hdiff_main.c \ hdiff_mattbl.c hdiff_gattr.c hdiff_misc.c hdiff_sds.c \ hdiff_table.c hdiff_vs.c hdiff_dim.c $(top_srcdir)/mfhdf/util/h4getopt.c hdiff_LDADD = $(LIBMFHDF) $(LIBHDF) -lm hdiff_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## Testing ## ############################################################################# TEST_PROG = hdifftst TEST_SCRIPT = testhdiff.sh check_SCRIPTS = testhdiff.sh noinst_PROGRAMS = hdifftst hdifftst_SOURCES = hdifftst.c hdifftst_LDADD = $(LIBMFHDF) $(LIBHDF) hdifftst_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += hdifftst1.hdf hdifftst2.hdf hdifftst3.hdf hdifftst4.hdf hdifftst5.hdf hdifftst6.hdf hdifftst7.hdf DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/hdiff/Makefile.in000066400000000000000000001434361503061704500172530ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = hdiff$(EXEEXT) noinst_PROGRAMS = hdifftst$(EXEEXT) TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT) subdir = mfhdf/hdiff ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = testhdiff.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_hdiff_OBJECTS = hdiff.$(OBJEXT) hdiff_array.$(OBJEXT) \ hdiff_gr.$(OBJEXT) hdiff_list.$(OBJEXT) hdiff_main.$(OBJEXT) \ hdiff_mattbl.$(OBJEXT) hdiff_gattr.$(OBJEXT) \ hdiff_misc.$(OBJEXT) hdiff_sds.$(OBJEXT) hdiff_table.$(OBJEXT) \ hdiff_vs.$(OBJEXT) hdiff_dim.$(OBJEXT) h4getopt.$(OBJEXT) hdiff_OBJECTS = $(am_hdiff_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = hdiff_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hdiff_LDFLAGS) $(LDFLAGS) -o $@ am_hdifftst_OBJECTS = hdifftst.$(OBJEXT) hdifftst_OBJECTS = $(am_hdifftst_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/h4getopt.Po ./$(DEPDIR)/hdiff.Po \ ./$(DEPDIR)/hdiff_array.Po ./$(DEPDIR)/hdiff_dim.Po \ ./$(DEPDIR)/hdiff_gattr.Po ./$(DEPDIR)/hdiff_gr.Po \ ./$(DEPDIR)/hdiff_list.Po ./$(DEPDIR)/hdiff_main.Po \ ./$(DEPDIR)/hdiff_mattbl.Po ./$(DEPDIR)/hdiff_misc.Po \ ./$(DEPDIR)/hdiff_sds.Po ./$(DEPDIR)/hdiff_table.Po \ ./$(DEPDIR)/hdiff_vs.Po ./$(DEPDIR)/hdifftst.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(hdiff_SOURCES) $(hdifftst_SOURCES) DIST_SOURCES = $(hdiff_SOURCES) $(hdifftst_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = hdifftst$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/testhdiff.sh.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog hdifftst1.hdf hdifftst2.hdf \ hdifftst3.hdf hdifftst4.hdf hdifftst5.hdf hdifftst6.hdf \ hdifftst7.hdf hdiff_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(hdiff_INCLUDES) $(DEFINES) hdiff_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hdiff_SOURCES = hdiff.c hdiff_array.c hdiff_gr.c hdiff_list.c hdiff_main.c \ hdiff_mattbl.c hdiff_gattr.c hdiff_misc.c hdiff_sds.c \ hdiff_table.c hdiff_vs.c hdiff_dim.c $(top_srcdir)/mfhdf/util/h4getopt.c hdiff_LDADD = $(LIBMFHDF) $(LIBHDF) -lm hdiff_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ############################################################################# TEST_PROG = hdifftst TEST_SCRIPT = testhdiff.sh check_SCRIPTS = testhdiff.sh hdifftst_SOURCES = hdifftst.c hdifftst_LDADD = $(LIBMFHDF) $(LIBHDF) hdifftst_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/hdiff/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/hdiff/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testhdiff.sh: $(top_builddir)/config.status $(srcdir)/testhdiff.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 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 hdiff$(EXEEXT): $(hdiff_OBJECTS) $(hdiff_DEPENDENCIES) $(EXTRA_hdiff_DEPENDENCIES) @rm -f hdiff$(EXEEXT) $(AM_V_CCLD)$(hdiff_LINK) $(hdiff_OBJECTS) $(hdiff_LDADD) $(LIBS) hdifftst$(EXEEXT): $(hdifftst_OBJECTS) $(hdifftst_DEPENDENCIES) $(EXTRA_hdifftst_DEPENDENCIES) @rm -f hdifftst$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hdifftst_OBJECTS) $(hdifftst_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h4getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_array.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_dim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_gattr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_gr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_mattbl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_sds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdiff_vs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdifftst.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< h4getopt.o: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.o -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c h4getopt.obj: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.obj -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? hdifftst.log: hdifftst$(EXEEXT) @p='hdifftst$(EXEEXT)'; \ b='hdifftst'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/hdiff.Po -rm -f ./$(DEPDIR)/hdiff_array.Po -rm -f ./$(DEPDIR)/hdiff_dim.Po -rm -f ./$(DEPDIR)/hdiff_gattr.Po -rm -f ./$(DEPDIR)/hdiff_gr.Po -rm -f ./$(DEPDIR)/hdiff_list.Po -rm -f ./$(DEPDIR)/hdiff_main.Po -rm -f ./$(DEPDIR)/hdiff_mattbl.Po -rm -f ./$(DEPDIR)/hdiff_misc.Po -rm -f ./$(DEPDIR)/hdiff_sds.Po -rm -f ./$(DEPDIR)/hdiff_table.Po -rm -f ./$(DEPDIR)/hdiff_vs.Po -rm -f ./$(DEPDIR)/hdifftst.Po -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-binPROGRAMS 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 ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/hdiff.Po -rm -f ./$(DEPDIR)/hdiff_array.Po -rm -f ./$(DEPDIR)/hdiff_dim.Po -rm -f ./$(DEPDIR)/hdiff_gattr.Po -rm -f ./$(DEPDIR)/hdiff_gr.Po -rm -f ./$(DEPDIR)/hdiff_list.Po -rm -f ./$(DEPDIR)/hdiff_main.Po -rm -f ./$(DEPDIR)/hdiff_mattbl.Po -rm -f ./$(DEPDIR)/hdiff_misc.Po -rm -f ./$(DEPDIR)/hdiff_sds.Po -rm -f ./$(DEPDIR)/hdiff_table.Po -rm -f ./$(DEPDIR)/hdiff_vs.Po -rm -f ./$(DEPDIR)/hdifftst.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/hdiff/hdiff.c000066400000000000000000000300321503061704500164150ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "hdiff.h" #include "hdiff_list.h" #include "hdiff_mattbl.h" /*------------------------------------------------------------------------- * Function: hdiff * * Purpose: find differences between two HDF files * * Return: number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 22, 2003 * *------------------------------------------------------------------------- */ uint32 hdiff(const char *fname1, const char *fname2, diff_opt_t *opt) { int32 sd1_id = -1, sd2_id = -1, gr1_id = -1, gr2_id = -1, file1_id = -1, file2_id = -1; uint32 nobjects1; uint32 nobjects2; uint32 nfound = 0; int err; dtable_t *list1 = NULL; dtable_t *list2 = NULL; /* file 1 */ diff_dim_table_t *td1_1 = NULL; diff_dim_table_t *td1_2 = NULL; /* file 2 */ diff_dim_table_t *td2_1 = NULL; diff_dim_table_t *td2_2 = NULL; /* initialize tables */ dtable_init(&list1); dtable_init(&list2); diff_dim_table_init(&td1_1); diff_dim_table_init(&td1_2); diff_dim_table_init(&td2_1); diff_dim_table_init(&td2_2); /*------------------------------------------------------------------------- * get a list of objects for both files *------------------------------------------------------------------------- */ nobjects1 = hdiff_list(fname1, list1, td1_1, td1_2, &err); if (err) goto out; nobjects2 = hdiff_list(fname2, list2, td2_1, td2_2, &err); if (err) goto out; if (opt->verbose) { dtable_print(list1, "file 1"); dtable_print(list2, "file 2"); } /*------------------------------------------------------------------------- * open file IDs *------------------------------------------------------------------------- */ if ((file1_id = Hopen(fname1, DFACC_READ, (int16)0)) == FAIL) { printf("Exiting: Hopen failed on <%s>", fname1); goto out; } if ((file2_id = Hopen(fname2, DFACC_READ, (int16)0)) == FAIL) { printf("Exiting: Hopen failed on <%s>", fname2); goto out; } /*------------------------------------------------------------------------- * SD interface *------------------------------------------------------------------------- */ if ((sd1_id = SDstart(fname1, DFACC_RDONLY)) == FAIL) { printf("SDstart failed on <%s>", fname1); goto out; } if ((sd2_id = SDstart(fname2, DFACC_RDONLY)) == FAIL) { printf("SDstart failed on <%s>", fname2); goto out; } /*------------------------------------------------------------------------- * GR interface *------------------------------------------------------------------------- */ if ((gr1_id = GRstart(file1_id)) == FAIL) { printf("GRstart failed on <%s>", fname1); goto out; } if ((gr2_id = GRstart(file2_id)) == FAIL) { printf("GRstart failed on <%s>", fname2); goto out; } /*------------------------------------------------------------------------- * find common objects *------------------------------------------------------------------------- */ nfound = match(nobjects1, list1, nobjects2, list2, sd1_id, gr1_id, file1_id, sd2_id, gr2_id, file2_id, opt); nfound += diff_match_dim(sd1_id, sd2_id, td1_1, td1_2, td2_1, td2_2, opt); /*------------------------------------------------------------------------- * global attributes *------------------------------------------------------------------------- */ if (opt->ga == 1) nfound += gattr_diff(sd1_id, sd2_id, opt); /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ if (SDend(sd1_id) == FAIL) { printf("Error: SDend failed on <%s>", fname1); goto out; } if (SDend(sd2_id) == FAIL) { printf("Error: SDend failed on <%s>", fname2); goto out; } if (GRend(gr1_id) == FAIL) { printf("Error: GRend failed on <%s>", fname1); goto out; } if (GRend(gr2_id) == FAIL) { printf("Error: GRend failed on <%s>", fname2); goto out; } if (Hclose(file1_id) == FAIL) { printf("Error: Hclose failed on <%s>", fname1); goto out; } if (Hclose(file2_id) == FAIL) { printf("Error: Hclose failed on <%s>", fname2); goto out; } /* free tables */ dtable_free(list1); dtable_free(list2); diff_dim_table_free(td1_1); diff_dim_table_free(td1_2); diff_dim_table_free(td2_1); diff_dim_table_free(td2_2); return nfound; out: opt->err_stat = 1; /* free tables */ dtable_free(list1); dtable_free(list2); diff_dim_table_free(td1_1); diff_dim_table_free(td1_2); diff_dim_table_free(td2_1); diff_dim_table_free(td2_2); if (sd1_id != -1) SDend(sd1_id); if (sd2_id != -1) SDend(sd2_id); if (gr1_id != -1) GRend(gr1_id); if (gr2_id != -1) GRend(gr2_id); if (file1_id != -1) Hclose(file1_id); if (file2_id != -1) Hclose(file2_id); return 0; } /*------------------------------------------------------------------------- * Function: match * * Purpose: Find common objects; the algorithm used for this search is the * cosequential match algorithm and is described in * Folk, Michael; Zoellick, Bill. (1992). File Structures. Addison-Wesley. * * Return: Number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 22, 2003 * *------------------------------------------------------------------------- */ uint32 match(uint32 nobjects1, dtable_t *list1, uint32 nobjects2, dtable_t *list2, int32 sd1_id, int32 gr1_id, int32 file1_id, int32 sd2_id, int32 gr2_id, int32 file2_id, diff_opt_t *opt) { int cmp; int more_names_exist = (nobjects1 > 0 && nobjects2 > 0) ? 1 : 0; uint32 curr1 = 0; uint32 curr2 = 0; uint32 nfound = 0; match_table_t *mattbl = NULL; unsigned infile[2]; char c1, c2; uint32 i; /*------------------------------------------------------------------------- * build the list *------------------------------------------------------------------------- */ match_table_init(&mattbl); while (more_names_exist) { cmp = strcmp(list1->objs[curr1].obj_name, list2->objs[curr2].obj_name); if (cmp == 0) { infile[0] = 1; infile[1] = 1; match_table_add(mattbl, infile, list1->objs[curr1].obj_name, list1->objs[curr1].tag, list1->objs[curr1].ref, list2->objs[curr2].tag, list2->objs[curr2].ref); curr1++; curr2++; } else if (cmp < 0) { infile[0] = 1; infile[1] = 0; match_table_add(mattbl, infile, list1->objs[curr1].obj_name, list1->objs[curr1].tag, list1->objs[curr1].ref, -1, -1); curr1++; } else { infile[0] = 0; infile[1] = 1; match_table_add(mattbl, infile, list2->objs[curr2].obj_name, -1, -1, list2->objs[curr2].tag, list2->objs[curr2].ref); curr2++; } more_names_exist = (curr1 < nobjects1 && curr2 < nobjects2) ? 1 : 0; } /* end while */ /* list1 did not end */ if (curr1 < nobjects1) { while (curr1 < nobjects1) { infile[0] = 1; infile[1] = 0; match_table_add(mattbl, infile, list1->objs[curr1].obj_name, list1->objs[curr1].tag, list1->objs[curr1].ref, -1, -1); curr1++; } } /* list2 did not end */ if (curr2 < nobjects2) { while (curr2 < nobjects2) { infile[0] = 0; infile[1] = 1; match_table_add(mattbl, infile, list2->objs[curr2].obj_name, -1, -1, list2->objs[curr2].tag, list2->objs[curr2].ref); curr2++; } } /*------------------------------------------------------------------------- * print the list *------------------------------------------------------------------------- */ if (opt->verbose) { printf("---------------------------------------\n"); printf("file1 file2\n"); printf("---------------------------------------\n"); for (i = 0; i < mattbl->nobjs; i++) { c1 = (char)((mattbl->objs[i].flags[0]) ? 'x' : ' '); c2 = (char)((mattbl->objs[i].flags[1]) ? 'x' : ' '); printf("%5c %6c %-15s\n", c1, c2, mattbl->objs[i].obj_name); } printf("\n"); } /*------------------------------------------------------------------------- * do the diff for objects *------------------------------------------------------------------------- */ for (i = 0; i < mattbl->nobjs; i++) { if (mattbl->objs[i].flags[0] && mattbl->objs[i].flags[1]) { nfound += diff(file1_id, file2_id, sd1_id, sd2_id, gr1_id, gr2_id, mattbl->objs[i].obj_name, mattbl->objs[i].obj_name, mattbl->objs[i].tag1, mattbl->objs[i].ref1, mattbl->objs[i].tag2, mattbl->objs[i].ref2, opt); } } /* free table */ match_table_free(mattbl); return nfound; } /*------------------------------------------------------------------------- * Function: diff * * Purpose: switch between types and choose the diff function * * Return: Number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 25, 2003 * *------------------------------------------------------------------------- */ uint32 diff(int32 file1_id, int32 file2_id, int32 sd1_id, int32 sd2_id, int32 gr1_id, int32 gr2_id, char *obj1_name, char *obj2_name, int32 tag1, int32 ref1, int32 tag2, int32 ref2, diff_opt_t *opt) { uint32 nfound = 0; switch (tag1) { case DFTAG_SD: /* Scientific Data */ case DFTAG_SDG: /* Scientific Data Group */ case DFTAG_NDG: /* Numeric Data Group */ nfound = diff_sds(sd1_id, sd2_id, ref1, ref2, opt); break; case DFTAG_VG: break; case DFTAG_RI: /* Raster Image */ case DFTAG_CI: /* Compressed Image */ case DFTAG_RIG: /* Raster Image Group */ case DFTAG_RI8: /* Raster-8 image */ case DFTAG_CI8: /* RLE compressed 8-bit image */ case DFTAG_II8: /* IMCOMP compressed 8-bit image */ if (opt->gr == 1) nfound = diff_gr(gr1_id, gr2_id, ref1, ref2, opt); break; case DFTAG_VH: if (opt->vd == 1) nfound = diff_vs(file1_id, file2_id, ref1, ref2, opt); break; default: printf("Tag <%d> and Tag <%d>: Comparison not supported for <%s> and <%s> \n", tag1, tag2, obj1_name, obj2_name); break; } return nfound; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff.h000066400000000000000000000106231503061704500164260ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. * /hdf/src/master/mfhdf/ncdump/ncdump.h,v 1.1 1993/04/21 21:51:19 chouck Exp *********************************************************************/ #ifndef HDIFF_H #define HDIFF_H #include "hdf.h" #include "mfhdf.h" #include "hdiff_table.h" /* Maximum value for max_err_cnt */ #define MAX_DIFF 0x7FFFFFFF struct ncdim { /* dimension */ char name[H4_MAX_NC_NAME]; int32 size; }; struct ncvar { /* variable */ char name[H4_MAX_NC_NAME]; int32 type; int32 ndims; int32 dims[H4_MAX_VAR_DIMS]; int32 natts; }; struct ncatt { /* attribute */ int32 var; char name[H4_MAX_NC_NAME]; int32 type; int32 len; void *val; }; typedef enum { LANG_NONE, LANG_C, LANG_F } Nclang; typedef struct { /* selection for comparison */ int verbose; /* * if true, print current interface comparison */ int ga; /* * if true, compare global attributes only */ int sa; /* * if true, compare SD local attributes only */ int sd; /* * if true, compare SD data only */ int gr; /* * if true, compare GR data only */ int vd; /* * if true, compare Vdata only */ uint32 max_err_cnt; /* * max. no of difference to be printed */ float32 err_limit; /* * limit of difference for the comparison */ int nlvars; /* * Number of variables specified with -v option * on command line */ char **lvars; /* * list of variable names specified with -v * option on command line */ int nuvars; /* * Number of variables specified with -u option * on command line */ char **uvars; /* * list of variable names specified with -u * option on command line */ int statistics; float32 err_rel; /* * relative diff for the comparison */ int err_stat; /* an error occurred (1, error, 0, no error) */ } diff_opt_t; /*------------------------------------------------------------------------- * public functions *------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif uint32 hdiff(const char *fname1, const char *fname2, diff_opt_t *opt); void make_vars(char *optarg, diff_opt_t *opt, int option); #ifdef __cplusplus } #endif /*------------------------------------------------------------------------- * private functions *------------------------------------------------------------------------- */ uint32 gattr_diff(int32 sdid1, int32 sdid2, diff_opt_t *opt); void pr_att_vals(nc_type type, int len, void *vals); uint32 array_diff(void *buf1, void *buf2, uint32 tot_cnt, const char *name1, const char *name2, int rank, int32 *dims, int32 type, float32 err_limit, float32 err_rel, uint32 max_err_cnt, int32 statistics, void *fill1, void *fill2); uint32 match(uint32 nobjects1, dtable_t *list1, uint32 nobjects2, dtable_t *list2, int32 sd1_id, int32 gr1_id, int32 file1_id, int32 sd2_id, int32 gr2_id, int32 file2_id, diff_opt_t *opt); uint32 diff(int32 file1_id, int32 file2_id, int32 sd1_id, int32 sd2_id, int32 gr1_id, int32 gr2_id, char *obj1_name, char *obj2_name, int32 tag1, int32 ref1, int32 tag2, int32 ref2, diff_opt_t *opt); void print_dims(int r, int32 *d); uint32 diff_vs(int32 file1_id, int32 file2_id, int32 ref1, int32 ref2, diff_opt_t *opt); uint32 diff_gr(int32 gr1_id, int32 gr2_id, int32 ref1, int32 ref2, diff_opt_t *opt); uint32 diff_sds(int32 sd1_id, int32 sd2_id, int32 ref1, int32 ref2, diff_opt_t *opt); #endif /* HDIFF_H */ hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_array.c000066400000000000000000000640221503061704500176210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include #include #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hdiff.h" #include "vg_priv.h" #ifndef ABS #define ABS(a) (((a) >= 0) ? (a) : -(a)) #endif #define MYMAX(A, B) (((A) > (B)) ? (A) : (B)) #define MYMIN(A, B) (((A) < (B)) ? (A) : (B)) #define PRINT_FSTATS(T) \ { \ printf("Type: %s Npts: %u Ndiff: %u (%f%%)\n", T, tot_cnt, n_diff, \ 100. * (float64)n_diff / (float64)tot_cnt); \ printf("Avg Diff: %.3e Max Diff: %.3e\n", d_avg_diff / n_stats, d_max_diff); \ printf("Range File1: %f/%f File2: %f/%f\n", d_min_val1, d_max_val1, d_min_val2, d_max_val2); \ } #define PRINT_ISTATS(T) \ { \ printf("Type: %s Npts: %u Ndiff: %u (%f%%)\n", T, tot_cnt, n_diff, \ 100. * (float64)n_diff / (float64)tot_cnt); \ printf("Avg Diff: %e Max. Diff: %d\n", (d_avg_diff / n_stats), i4_max_diff); \ printf("Range File1: %d/%d File2: %d/%d\n", i4_min_val1, i4_max_val1, i4_min_val2, i4_max_val2); \ } /*------------------------------------------------------------------------- * printf formatting *------------------------------------------------------------------------- */ #define SPACES " " #define FFORMAT "%-15f %-15f %-15f\n" #define FFORMATP "%-15f %-15f %.0f%%\n" #define I8FORMAT "%-15d %-15d %-15d\n" #define I8FORMATP "%-15d %-15d %.0f%%\n" #define I16FORMAT "%-15d %-15d %-15d\n" #define I16FORMATP "%-15d %-15d %.0f%%\n" #define IFORMAT "%-15d %-15d %-15d\n" #define IFORMATP "%-15d %-15d %.0f%%\n" #define CFORMAT "%-16c %-17c\n" #define SFORMAT "%-16s %-17s\n" #define UIFORMAT "%-15u %-15u %-15u\n" #define LIFORMAT "%-15ld %-15ld %-15ld\n" #define ULIFORMAT "%-15lu %-15lu %-15lu\n" #define I16FORMATP_NOTCOMP "%-15d %-15d not comparable\n" #define I8FORMATP_NOTCOMP "%-15d %-15d not comparable\n" #define IFORMATP_NOTCOMP "%-15d %-15d not comparable\n" #define FFORMATP_NOTCOMP "%-15f %-15f not comparable\n" /*------------------------------------------------------------------------- * relative error *------------------------------------------------------------------------- */ #define PER(A, B) \ { \ per = -1.0; \ not_comparable = 0; \ both_zero = 0; \ if (A == 0 && B == 0) \ both_zero = 1; \ if (A != 0) \ per = (double)ABS((double)(B - A) / (double)A); \ else \ not_comparable = 1; \ } /*------------------------------------------------------------------------- * local prototypes *------------------------------------------------------------------------- */ static void print_pos(int *ph, uint32 curr_pos, int32 *acc, int32 *pos, int rank, const char *obj1, const char *obj2); /*------------------------------------------------------------------------- * Function: array_diff * * Purpose: compare the 2 buffers BUF1 and BUF2 * *------------------------------------------------------------------------- */ uint32 array_diff(void *buf1, void *buf2, uint32 tot_cnt, const char *name1, const char *name2, int rank, int32 *dims, int32 type, float32 err_limit, float32 err_rel, uint32 max_err_cnt, int32 statistics, void *fill1, void *fill2) { uint32 i; int8 *i1ptr1, *i1ptr2; int16 *i2ptr1, *i2ptr2; int32 *i4ptr1, *i4ptr2; float32 *fptr1, *fptr2; float64 *dptr1, *dptr2; float64 d_diff, d_avg_diff = 0., d_max_diff = 0.; float64 d_max_val1 = 0, d_min_val1 = 0, d_max_val2 = 0, d_min_val2 = 0; float64 d_val1, d_val2; float64 d_sumx = 0., d_sumy = 0., d_sumx2 = 0., d_sumy2 = 0., d_sumxy = 0.; float64 slope, intercept, correlation; float32 f_diff; int32 i4_diff, i4_max_diff = 0; int32 i4_max_val1 = 0, i4_min_val1 = 0, i4_max_val2 = 0, i4_min_val2 = 0; int16 i2_diff; int8 c_diff; int is_fill1, is_fill2; int n_stats = 0; char *debug; FILE *fp = NULL; int32 acc[H4_MAX_VAR_DIMS]; /* accumulator position */ int32 pos[H4_MAX_VAR_DIMS]; /* matrix position */ int ph = 1; /* print header */ int j; double per; int both_zero; int not_comparable; uint32 n_diff = 0; acc[rank - 1] = 1; for (j = (rank - 2); j >= 0; j--) { acc[j] = acc[j + 1] * (int)dims[j + 1]; } for (j = 0; j < rank; j++) pos[j] = 0; debug = getenv("DEBUG"); if (debug) { fp = fopen("hdiff.debug", "w"); } switch (type) { case DFNT_INT8: case DFNT_CHAR8: i4_max_val1 = SCHAR_MIN; i4_min_val1 = SCHAR_MAX; i4_max_val2 = SCHAR_MIN; i4_min_val2 = SCHAR_MAX; break; case DFNT_UINT8: case DFNT_UCHAR8: i4_max_val1 = -UCHAR_MAX - 1; i4_min_val1 = UCHAR_MAX; i4_max_val2 = -UCHAR_MAX - 1; i4_min_val2 = UCHAR_MAX; break; case DFNT_INT16: i4_max_val1 = SHRT_MIN; i4_min_val1 = SHRT_MAX; i4_max_val2 = SHRT_MIN; i4_min_val2 = SHRT_MAX; break; case DFNT_UINT16: i4_max_val1 = -USHRT_MAX - 1; i4_min_val1 = USHRT_MAX; i4_max_val2 = -USHRT_MAX - 1; i4_min_val2 = USHRT_MAX; break; case DFNT_INT32: i4_max_val1 = INT_MIN; i4_min_val1 = INT_MAX; i4_max_val2 = INT_MIN; i4_min_val2 = INT_MAX; break; case DFNT_UINT32: i4_max_val1 = INT_MIN; i4_min_val1 = INT_MAX; i4_max_val2 = INT_MIN; i4_min_val2 = INT_MAX; break; case DFNT_FLOAT: d_max_val1 = -FLT_MAX; d_min_val1 = FLT_MAX; d_max_val2 = -FLT_MAX; d_min_val2 = FLT_MAX; break; case DFNT_DOUBLE: d_max_val1 = -DBL_MAX; d_min_val1 = DBL_MAX; d_max_val2 = -DBL_MAX; d_min_val2 = DBL_MAX; break; default: printf(" bad type - %d\n", type); } switch (type) { /*------------------------------------------------------------------------- * DFNT_INT8, DFNT_UINT8, DFNT_UCHAR8, DFNT_CHAR8 *------------------------------------------------------------------------- */ case DFNT_INT8: case DFNT_UINT8: case DFNT_UCHAR8: case DFNT_CHAR8: i1ptr1 = (int8 *)buf1; i1ptr2 = (int8 *)buf2; for (i = 0; i < tot_cnt; i++) { c_diff = (int8)abs(*i1ptr1 - *i1ptr2); is_fill1 = fill1 && (*i1ptr1 == *((int8 *)fill1)); is_fill2 = fill2 && (*i1ptr2 == *((int8 *)fill2)); if (!is_fill1 && !is_fill2) { d_avg_diff += (float64)c_diff; i4_max_diff = MYMAX(i4_max_diff, c_diff); d_val2 = (float64)(*i1ptr2); d_val1 = (float64)(*i1ptr1); d_sumx += d_val1; d_sumy += d_val2; d_sumx2 += d_val1 * d_val1; d_sumy2 += d_val2 * d_val2; d_sumxy += d_val1 * d_val2; n_stats++; } if (!is_fill1) { i4_max_val1 = MYMAX(i4_max_val1, (int32)(*i1ptr1)); i4_min_val1 = MYMIN(i4_min_val1, (int32)(*i1ptr1)); } if (!is_fill2) { i4_max_val2 = MYMAX(i4_max_val2, (int32)(*i1ptr2)); i4_min_val2 = MYMIN(i4_min_val2, (int32)(*i1ptr2)); } /*------------------------------------------------------------------------- * relative *------------------------------------------------------------------------- */ if (err_rel) { PER(*i1ptr1, *i1ptr2); if (not_comparable && !both_zero) /* not comparable */ { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I8FORMATP_NOTCOMP, *i1ptr1, *i1ptr2); n_diff++; } else if ((float)per > err_rel) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I8FORMATP, *i1ptr1, *i1ptr2, per * 100); } } } else if (c_diff > (int32)err_limit) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I8FORMAT, *i1ptr1, *i1ptr2, abs(*i1ptr1 - *i1ptr2)); } } i1ptr1++; i1ptr2++; } if (statistics) { PRINT_ISTATS("Byte"); } break; /*------------------------------------------------------------------------- * DFNT_INT16, DFNT_UINT16 *------------------------------------------------------------------------- */ case DFNT_INT16: case DFNT_UINT16: i2ptr1 = (int16 *)buf1; i2ptr2 = (int16 *)buf2; for (i = 0; i < tot_cnt; i++) { i2_diff = (int16)abs(*i2ptr1 - *i2ptr2); is_fill1 = fill1 && (*i2ptr1 == *((int16 *)fill1)); is_fill2 = fill2 && (*i2ptr2 == *((int16 *)fill2)); if (debug) { fprintf(fp, "%d %d %d %d\n", is_fill1, is_fill2, (int32)(*i2ptr1), (int32)(*i2ptr2)); } if (!is_fill1 && !is_fill2) { d_val1 = (float64)(*i2ptr1); d_val2 = (float64)(*i2ptr2); d_sumx += d_val1; d_sumy += d_val2; d_sumx2 += d_val1 * d_val1; d_sumy2 += d_val2 * d_val2; d_sumxy += d_val1 * d_val2; d_avg_diff += (float64)i2_diff; i4_max_diff = MYMAX(i4_max_diff, i2_diff); n_stats++; } if (!is_fill1) { i4_max_val1 = MYMAX(i4_max_val1, (int32)(*i2ptr1)); i4_min_val1 = MYMIN(i4_min_val1, (int32)(*i2ptr1)); } if (!is_fill2) { i4_max_val2 = MYMAX(i4_max_val2, (int32)(*i2ptr2)); i4_min_val2 = MYMIN(i4_min_val2, (int32)(*i2ptr2)); } /*------------------------------------------------------------------------- * relative *------------------------------------------------------------------------- */ if (err_rel) { PER(*i2ptr1, *i2ptr2); if (not_comparable && !both_zero) /* not comparable */ { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I16FORMATP_NOTCOMP, *i2ptr1, *i2ptr2); n_diff++; } else if ((float)per > err_rel) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I16FORMATP, *i2ptr1, *i2ptr2, per * 100); } } } else if (i2_diff > (int)err_limit) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(I16FORMAT, *i2ptr1, *i2ptr2, abs(*i2ptr1 - *i2ptr2)); } } i2ptr1++; i2ptr2++; } if (statistics) { PRINT_ISTATS("Integer2"); } break; /*------------------------------------------------------------------------- * DFNT_INT32, DFNT_UINT32 *------------------------------------------------------------------------- */ case DFNT_INT32: case DFNT_UINT32: i4ptr1 = (int32 *)buf1; i4ptr2 = (int32 *)buf2; for (i = 0; i < tot_cnt; i++) { i4_diff = labs(*i4ptr1 - *i4ptr2); is_fill1 = fill1 && (*i4ptr1 == *((int32 *)fill1)); is_fill2 = fill2 && (*i4ptr2 == *((int32 *)fill2)); if (!is_fill1 && !is_fill2) { d_avg_diff += (float64)i4_diff; d_val1 = (float64)(*i4ptr1); d_val2 = (float64)(*i4ptr2); d_sumx += d_val1; d_sumy += d_val2; d_sumx2 += d_val1 * d_val1; d_sumy2 += d_val2 * d_val2; d_sumxy += d_val1 * d_val2; i4_max_diff = (int32)MYMAX(i4_max_diff, (float64)(i4_diff)); n_stats++; } if (!is_fill1) { i4_max_val1 = MYMAX(i4_max_val1, *i4ptr1); i4_min_val1 = MYMIN(i4_min_val1, *i4ptr1); } if (!is_fill2) { i4_max_val2 = MYMAX(i4_max_val2, *i4ptr2); i4_min_val2 = MYMIN(i4_min_val2, *i4ptr2); } /*------------------------------------------------------------------------- * relative *------------------------------------------------------------------------- */ if (err_rel) { PER(*i4ptr1, *i4ptr2); if (not_comparable && !both_zero) /* not comparable */ { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(IFORMATP_NOTCOMP, *i4ptr1, *i4ptr2); n_diff++; } else if ((float)per > err_rel) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(IFORMATP, *i4ptr1, *i4ptr2, per * 100); } } } else if (i4_diff > (int32)err_limit) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(IFORMAT, *i4ptr1, *i4ptr2, i4_diff); } } i4ptr1++; i4ptr2++; } if (statistics) { PRINT_ISTATS("Integer4"); } break; /*------------------------------------------------------------------------- * DFNT_FLOAT *------------------------------------------------------------------------- */ case DFNT_FLOAT: fptr1 = (float32 *)buf1; fptr2 = (float32 *)buf2; for (i = 0; i < tot_cnt; i++) { f_diff = (float32)fabs(*fptr1 - *fptr2); is_fill1 = fill1 && (*fptr1 == *((float32 *)fill1)); is_fill2 = fill2 && (*fptr2 == *((float32 *)fill2)); if (debug) { fprintf(fp, "%d %d %f %f\n", is_fill1, is_fill2, (double)*fptr1, (double)*fptr2); } if (!is_fill1 && !is_fill2) { d_avg_diff += (float64)f_diff; d_val1 = (float64)(*fptr1); d_val2 = (float64)(*fptr2); d_sumx += d_val1; d_sumy += d_val2; d_sumx2 += d_val1 * d_val1; d_sumy2 += d_val2 * d_val2; d_sumxy += d_val1 * d_val2; d_max_diff = MYMAX(d_max_diff, (float64)(f_diff)); n_stats++; } if (!is_fill1) { d_max_val1 = MYMAX(d_max_val1, (float64)(*fptr1)); d_min_val1 = MYMIN(d_min_val1, (float64)(*fptr1)); } if (!is_fill2) { d_max_val2 = MYMAX(d_max_val2, (float64)(*fptr2)); d_min_val2 = MYMIN(d_min_val2, (float64)(*fptr2)); } /*------------------------------------------------------------------------- * relative *------------------------------------------------------------------------- */ if (err_rel) { PER(*fptr1, *fptr2); if (not_comparable && !both_zero) /* not comparable */ { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMATP_NOTCOMP, (double)*fptr1, (double)*fptr2); n_diff++; } else if ((float)per > err_rel) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMATP, (double)*fptr1, (double)*fptr2, per * 100); } } } else if (f_diff > err_limit) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMAT, (double)*fptr1, (double)*fptr2, fabs(*fptr1 - *fptr2)); } } fptr1++; fptr2++; } if (statistics) { PRINT_FSTATS("Float"); } break; /*------------------------------------------------------------------------- * DFNT_DOUBLE *------------------------------------------------------------------------- */ case DFNT_DOUBLE: dptr1 = (float64 *)buf1; dptr2 = (float64 *)buf2; for (i = 0; i < tot_cnt; i++) { d_diff = fabs(*dptr1 - *dptr2); is_fill1 = fill1 && (*dptr1 == *((float64 *)fill1)); is_fill2 = fill2 && (*dptr2 == *((float64 *)fill2)); if (!is_fill1 && !is_fill2) { d_avg_diff += d_diff; d_val1 = (float64)(*dptr1); d_val2 = (float64)(*dptr2); d_sumx += d_val1; d_sumy += d_val2; d_sumx2 += d_val1 * d_val1; d_sumy2 += d_val2 * d_val2; d_sumxy += d_val1 * d_val2; d_max_diff = MYMAX(d_max_diff, (d_diff)); n_stats++; } if (!is_fill1) { d_max_val1 = MYMAX(d_max_val1, (*dptr1)); d_min_val1 = MYMIN(d_min_val1, (*dptr1)); } if (!is_fill2) { d_max_val2 = MYMAX(d_max_val2, (*dptr2)); d_min_val2 = MYMIN(d_min_val2, (*dptr2)); } /*------------------------------------------------------------------------- * relative *------------------------------------------------------------------------- */ if (err_rel) { PER(*dptr1, *dptr2); if (not_comparable && !both_zero) /* not comparable */ { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMATP_NOTCOMP, *dptr1, *dptr2); n_diff++; } else if ((float)per > err_rel) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMATP, *dptr1, *dptr2, per * 100); } } } else if (d_diff > (float64)err_limit) { n_diff++; if (n_diff <= max_err_cnt) { print_pos(&ph, i, acc, pos, rank, name1, name2); printf(SPACES); printf(FFORMAT, *dptr1, *dptr2, fabs(*dptr1 - *dptr2)); } } dptr1++; dptr2++; } if (statistics) { PRINT_FSTATS("Double"); } break; default: printf(" bad type - %d\n", type); } if (statistics) { float64 sqrt_arg; if ((float64)n_stats * d_sumx2 - d_sumx * d_sumx != 0.0) { slope = ((float64)n_stats * d_sumxy - d_sumx * d_sumy) / ((float64)n_stats * d_sumx2 - d_sumx * d_sumx); intercept = (d_sumy - slope * d_sumx) / (float64)n_stats; sqrt_arg = ((float64)n_stats * d_sumx2 - d_sumx * d_sumx) / ((float64)n_stats * d_sumy2 - d_sumy * d_sumy); correlation = slope * sqrt(sqrt_arg); printf("Regression N: %d Slope: %e Intercept: %e R: %e\n", n_stats, slope, intercept, correlation); } else { printf("Regression Slope: NaN Intercept: NaN R: NaN\n"); } } if (debug) { fclose(fp); } return n_diff; } /*------------------------------------------------------------------------- * Function: print_pos * * Purpose: convert an array index position to matrix notation * * Return: pos matrix array * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: May 9, 2003 * *------------------------------------------------------------------------- */ static void print_pos(int *ph, uint32 curr_pos, int32 *acc, int32 *pos, int rank, const char *obj1, const char *obj2) { int i; /* print header */ if (*ph == 1) { *ph = 0; printf("%-15s %-15s %-15s %-20s\n", "position", (obj1 != NULL) ? obj1 : " ", (obj2 != NULL) ? obj2 : " ", "difference"); printf("------------------------------------------------------------\n"); } for (i = 0; i < rank; i++) { pos[i] = curr_pos / acc[i]; curr_pos -= acc[i] * pos[i]; } assert(curr_pos == 0); printf("[ "); for (i = 0; i < rank; i++) { fprintf(stdout, "%d ", pos[i]); } printf("]"); } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_dim.c000066400000000000000000000350431503061704500172550ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hdiff_dim.h" /* match name between 2 diff_dim_table_t type lists */ typedef struct diff_match_dim_name_t { int32 ref; /* reference */ char dim_name[H4_MAX_NC_NAME]; /* name */ int flags[2]; /* name exists 1, no 0 */ } diff_match_dim_name_t; /* table for diff_match_dim_name_t */ typedef struct diff_match_dim_table_t { int size; int nobjs; diff_match_dim_name_t *objs; } diff_match_dim_table_t; /*------------------------------------------------------------------------- * local prototypes *------------------------------------------------------------------------- */ /* methods for diff_match_dim_table_t */ static void diff_match_dim_table_free(diff_match_dim_table_t *table); static void diff_match_dim_table_init(diff_match_dim_table_t **tbl); static void diff_match_dim_table_add(diff_match_dim_table_t *table, unsigned *flags, char *dim_name, int32 ref); /*------------------------------------------------------------------------- * Function: diff_match_dim * * Purpose: diff "lone" dimensions. * Find common dimension names; the algorithm used for this search is the * cosequential match algorithm and is described in * Folk, Michael; Zoellick, Bill. (1992). File Structures. Addison-Wesley. * * Return: void * * Programmer: Pedro Vicente Nunes, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ uint32 diff_match_dim(int32 sd1_id, int32 sd2_id, diff_dim_table_t *td1_1, diff_dim_table_t *td1_2, diff_dim_table_t *td2_1, diff_dim_table_t *td2_2, diff_opt_t *opt) { int cmp; int more_names_exist; int curr1; int curr2; diff_match_dim_table_t *mattbl_file1 = NULL; diff_match_dim_table_t *mattbl_file2 = NULL; unsigned inlist[2]; int i; uint32 nfound = 0; #if defined(HDIFF_DEBUG) for (i = 0; i < td1_1->nobjs; i++) { printf("%s\n", td1_1->objs[i].dim_name); } for (i = 0; i < td1_2->nobjs; i++) { printf("%s\n", td1_2->objs[i].dim_name); } #endif /*------------------------------------------------------------------------- * build the list for file 1 *------------------------------------------------------------------------- */ more_names_exist = (td1_1->nobjs > 0 && td1_2->nobjs > 0) ? 1 : 0; curr1 = 0; curr2 = 0; diff_match_dim_table_init(&mattbl_file1); while (more_names_exist) { cmp = strcmp(td1_1->objs[curr1].dim_name, td1_2->objs[curr2].dim_name); if (cmp == 0) { inlist[0] = 1; inlist[1] = 1; diff_match_dim_table_add(mattbl_file1, inlist, td1_1->objs[curr1].dim_name, td1_1->objs[curr1].ref); curr1++; curr2++; } else if (cmp < 0) { inlist[0] = 1; inlist[1] = 0; diff_match_dim_table_add(mattbl_file1, inlist, td1_1->objs[curr1].dim_name, td1_1->objs[curr1].ref); curr1++; } else { inlist[0] = 0; inlist[1] = 1; diff_match_dim_table_add(mattbl_file1, inlist, td1_2->objs[curr2].dim_name, td1_2->objs[curr2].ref); curr2++; } more_names_exist = (curr1 < td1_1->nobjs && curr2 < td1_1->nobjs) ? 1 : 0; } /* end while */ /* td1_1 did not end */ if (curr1 < td1_1->nobjs) { while (curr1 < td1_1->nobjs) { inlist[0] = 1; inlist[1] = 0; diff_match_dim_table_add(mattbl_file1, inlist, td1_1->objs[curr1].dim_name, td1_1->objs[curr1].ref); curr1++; } } /* td1_2 did not end */ if (curr2 < td1_2->nobjs) { while (curr2 < td1_2->nobjs) { inlist[0] = 0; inlist[1] = 1; diff_match_dim_table_add(mattbl_file1, inlist, td1_2->objs[curr2].dim_name, td1_2->objs[curr2].ref); curr2++; } } /*------------------------------------------------------------------------- * print the list *------------------------------------------------------------------------- */ #if defined(HDIFF_DEBUG) { char c1, c2; printf("---------------------------------------\n"); printf("list1 list2\n"); printf("---------------------------------------\n"); for (i = 0; i < mattbl_file1->nobjs; i++) { c1 = (char)((mattbl_file1->objs[i].flags[0]) ? 'x' : ' '); c2 = (char)((mattbl_file1->objs[i].flags[1]) ? 'x' : ' '); printf("%5c %6c %-15s\n", c1, c2, mattbl_file1->objs[i].dim_name); } printf("\n"); } #endif /*------------------------------------------------------------------------- * build the list for file 2 *------------------------------------------------------------------------- */ more_names_exist = (td2_1->nobjs > 0 && td2_2->nobjs > 0) ? 1 : 0; curr1 = 0; curr2 = 0; diff_match_dim_table_init(&mattbl_file2); while (more_names_exist) { cmp = strcmp(td2_1->objs[curr1].dim_name, td2_2->objs[curr2].dim_name); if (cmp == 0) { inlist[0] = 1; inlist[1] = 1; diff_match_dim_table_add(mattbl_file2, inlist, td2_1->objs[curr1].dim_name, td2_1->objs[curr1].ref); curr1++; curr2++; } else if (cmp < 0) { inlist[0] = 1; inlist[1] = 0; diff_match_dim_table_add(mattbl_file2, inlist, td2_1->objs[curr1].dim_name, td2_1->objs[curr1].ref); curr1++; } else { inlist[0] = 0; inlist[1] = 1; diff_match_dim_table_add(mattbl_file2, inlist, td2_2->objs[curr2].dim_name, td2_2->objs[curr2].ref); curr2++; } more_names_exist = (curr1 < td2_1->nobjs && curr2 < td2_1->nobjs) ? 1 : 0; } /* end while */ /* td2_1 did not end */ if (curr1 < td2_1->nobjs) { while (curr1 < td2_1->nobjs) { inlist[0] = 1; inlist[1] = 0; diff_match_dim_table_add(mattbl_file2, inlist, td2_1->objs[curr1].dim_name, td2_1->objs[curr1].ref); curr1++; } } /* td2_2 did not end */ if (curr2 < td2_2->nobjs) { while (curr2 < td2_2->nobjs) { inlist[0] = 0; inlist[1] = 1; diff_match_dim_table_add(mattbl_file2, inlist, td2_2->objs[curr2].dim_name, td2_2->objs[curr2].ref); curr2++; } } /*------------------------------------------------------------------------- * print the list *------------------------------------------------------------------------- */ #if defined(HDIFF_DEBUG) { char c1, c2; printf("---------------------------------------\n"); printf("list1 list2\n"); printf("---------------------------------------\n"); for (i = 0; i < mattbl_file2->nobjs; i++) { c1 = (char)((mattbl_file2->objs[i].flags[0]) ? 'x' : ' '); c2 = (char)((mattbl_file2->objs[i].flags[1]) ? 'x' : ' '); printf("%5c %6c %-15s\n", c1, c2, mattbl_file2->objs[i].dim_name); } printf("\n"); } #endif /*------------------------------------------------------------------------- * get objects from list1 not in list2 *------------------------------------------------------------------------- */ for (i = 0; i < mattbl_file1->nobjs; i++) { if (mattbl_file1->objs[i].flags[0] && (!mattbl_file1->objs[i].flags[1])) { int j; /* search in file 2 for this dimension */ for (j = 0; j < mattbl_file2->nobjs; j++) { /* same name */ if (strcmp(mattbl_file1->objs[i].dim_name, mattbl_file2->objs[j].dim_name) == 0) { /* and also a lone dim in file 2 */ if (mattbl_file2->objs[j].flags[0] && (!mattbl_file2->objs[j].flags[1])) { int32 ref1 = mattbl_file1->objs[i].ref; int32 ref2 = mattbl_file2->objs[j].ref; nfound += diff_sds(sd1_id, sd2_id, ref1, ref2, opt); } } } } } /* free tables */ diff_match_dim_table_free(mattbl_file1); diff_match_dim_table_free(mattbl_file2); return nfound; } /*------------------------------------------------------------------------- * Function: diff_match_dim_table_add * * Purpose: add an entry from a list of dimension names into the match table * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ static void diff_match_dim_table_add(diff_match_dim_table_t *table, unsigned *flags, char *dim_name, int32 ref) { int i; /* check if name already on match table */ for (i = 0; i < table->nobjs; i++) { /* insert information at position i */ if (strcmp(dim_name, table->objs[i].dim_name) == 0) { if (table->objs[i].flags[0] == 0) table->objs[i].flags[0] = flags[0]; if (table->objs[i].flags[1] == 0) table->objs[i].flags[1] = flags[1]; return; } } if (table->nobjs == table->size) { table->size *= 2; table->objs = (diff_match_dim_name_t *)realloc(table->objs, table->size * sizeof(diff_match_dim_name_t)); for (i = table->nobjs; i < table->size; i++) { table->objs[i].ref = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } } i = table->nobjs++; table->objs[i].ref = ref; strcpy(table->objs[i].dim_name, dim_name); table->objs[i].flags[0] = flags[0]; table->objs[i].flags[1] = flags[1]; } /*------------------------------------------------------------------------- * Function: diff_match_dim_table_init * * Purpose: initialize match table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ static void diff_match_dim_table_init(diff_match_dim_table_t **tbl) { int i; diff_match_dim_table_t *table = (diff_match_dim_table_t *)malloc(sizeof(diff_match_dim_table_t)); table->size = 20; table->nobjs = 0; table->objs = (diff_match_dim_name_t *)malloc(table->size * sizeof(diff_match_dim_name_t)); for (i = 0; i < table->size; i++) { table->objs[i].ref = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } *tbl = table; } /*------------------------------------------------------------------------- * Function: diff_match_dim_table_free * * Purpose: free match table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ static void diff_match_dim_table_free(diff_match_dim_table_t *table) { free(table->objs); free(table); } /*------------------------------------------------------------------------- * Function: diff_dim_table_add * * Purpose: add an entry of pair REF/NAME into a dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ void diff_dim_table_add(diff_dim_table_t *table, int ref, char *name) { int i; assert(table); if (table->nobjs == table->size) { table->size *= 2; table->objs = (diff_dim_name_t *)realloc(table->objs, table->size * sizeof(diff_dim_name_t)); for (i = table->nobjs; i < table->size; i++) { table->objs[i].ref = -1; } } i = table->nobjs++; table->objs[i].ref = ref; strcpy(table->objs[i].dim_name, name); } /*------------------------------------------------------------------------- * Function: diff_dim_table_init * * Purpose: initialize dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ void diff_dim_table_init(diff_dim_table_t **tbl) { int i; diff_dim_table_t *table = (diff_dim_table_t *)malloc(sizeof(diff_dim_table_t)); table->size = 20; table->nobjs = 0; table->objs = (diff_dim_name_t *)malloc(table->size * sizeof(diff_dim_name_t)); for (i = 0; i < table->size; i++) { table->objs[i].ref = -1; } *tbl = table; } /*------------------------------------------------------------------------- * Function: diff_dim_table_free * * Purpose: free dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: July 16, 2007 * *------------------------------------------------------------------------- */ void diff_dim_table_free(diff_dim_table_t *table) { free(table->objs); free(table); } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_dim.h000066400000000000000000000034231503061704500172570ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HDIFF_DIM_H #define HDIFF_DIM_H #include "hdiff.h" /* dimension SDS */ typedef struct diff_dim_name_t { int32 ref; /* reference */ char dim_name[H4_MAX_NC_NAME]; /* name */ } diff_dim_name_t; /* table for diff_dim_name_t */ typedef struct diff_dim_table_t { int size; int nobjs; diff_dim_name_t *objs; } diff_dim_table_t; #ifdef __cplusplus extern "C" { #endif void diff_dim_table_add(diff_dim_table_t *table, int ref, char *name); void diff_dim_table_init(diff_dim_table_t **tbl); void diff_dim_table_free(diff_dim_table_t *table); uint32 diff_match_dim(int32 sd1_id, int32 sd2_id, diff_dim_table_t *td1_1, diff_dim_table_t *td1_2, diff_dim_table_t *td2_1, diff_dim_table_t *td2_2, diff_opt_t *opt); #ifdef __cplusplus } #endif #endif /* HDIFF_DIM_H */ hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_gattr.c000066400000000000000000000077771503061704500176420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include #include "hdf.h" #include "mfhdf.h" #include "vg.h" #include "hdiff.h" /*------------------------------------------------------------------------- * Function: gattr_diff * * Purpose: compare global SDS attributes * *------------------------------------------------------------------------- */ uint32 gattr_diff(int32 sdid1, int32 sdid2, diff_opt_t *opt) { int32 nvars1, nvars2; /* number of variables */ int32 ngatts1, ngatts2; /* number of global attributes */ struct ncatt att1, att2; /* attribute */ int ia, ib; /* attribute number */ int iret2; uint32 nfound = 0; SDfileinfo(sdid1, &nvars1, &ngatts1); /* get global attributes */ for (ia = 0; ia < ngatts1; ia++) { SDattrinfo(sdid1, ia, att1.name, &att1.type, &att1.len); ib = SDfindattr(sdid2, att1.name); if (ib == -1) /* attribute doesn't exist in file2 */ { printf("\n---------------------------\n"); printf("< %s\n", att1.name); printf("> '%s' does not exist in file2\n", att1.name); nfound++; continue; } iret2 = SDattrinfo(sdid2, ib, att2.name, &att2.type, &att2.len); att1.val = (void *)malloc((unsigned)(att1.len * DFKNTsize(att1.type | DFNT_NATIVE))); if (!att1.val) { fprintf(stderr, "Out of memory!\n"); goto out; } att2.val = (void *)malloc((unsigned)(att2.len * DFKNTsize(att2.type | DFNT_NATIVE))); if (!att2.val) { fprintf(stderr, "Out of memory!\n"); goto out; } SDreadattr(sdid1, ia, att1.val); iret2 = SDreadattr(sdid2, ib, att2.val); iret2 = 0; if (att1.type != att2.type || att1.len != att2.len) iret2 = 1; if (iret2 == 0) /* compare the data */ iret2 = memcmp((void *)att1.val, att2.val, att1.len * DFKNTsize(att1.type | DFNT_NATIVE)); if (iret2 != 0) { printf("\n---------------------------\n"); printf("Attr Name: %s\n", att1.name); printf("< "); pr_att_vals((nc_type)att1.type, att1.len, att1.val); printf("\n> "); pr_att_vals((nc_type)att2.type, att2.len, att2.val); printf("\n"); nfound++; } free((char *)att1.val); free((char *)att2.val); } /* check any global attributes in file2 but not in file1 */ iret2 = SDfileinfo(sdid2, &nvars2, &ngatts2); for (ib = 0; ib < ngatts2; ib++) { iret2 = SDattrinfo(sdid2, ib, att2.name, &att2.type, &att2.len); ia = SDfindattr(sdid1, att2.name); if (ia == -1) /* attribute doesn't exist in file2 */ { printf("\n---------------------------\n"); printf("< '%s' does not exist in file1\n", att2.name); printf("> %s\n", att2.name); nfound++; } } return nfound; out: opt->err_stat = 1; return 0; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_gr.c000066400000000000000000000230561503061704500171150ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdiff.h" #include "hdiff_list.h" #include "hdiff_mattbl.h" /*------------------------------------------------------------------------- * Function: diff_gr * * Purpose: diff for GR * * Return: Number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 27, 2003 * *------------------------------------------------------------------------- */ uint32 diff_gr(int32 gr1_id, int32 gr2_id, int32 ref1, int32 ref2, diff_opt_t *opt) { int32 ri1_id = -1, /* data set identifier */ ri1_index, /* index number of the data set */ dtype1, /* GR data type */ dimsizes1[H4_MAX_VAR_DIMS], /* dimensional size */ nattrs1, /* number of attributes */ ncomps1, /* number of components */ interlace_mode1, /* interlace mode of an image */ ri2_id = -1, /* data set identifier */ ri2_index, /* index number of the data set */ dtype2, /* GR data type */ dimsizes2[H4_MAX_VAR_DIMS], /* dimensional size */ nattrs2, /* number of attributes */ ncomps2, /* number of components */ interlace_mode2, /* interlace mode of an image */ start[H4_MAX_VAR_DIMS], /* read start */ edges[H4_MAX_VAR_DIMS], /* read edges */ numtype, /* number type */ eltsz, /* element size */ data_size; uint32 nelms; /* number of elements */ char gr1_name[H4_MAX_NC_NAME]; char gr2_name[H4_MAX_NC_NAME]; int dim_diff = 0; /* dimensions are different */ void *buf1 = NULL; void *buf2 = NULL; uint32 max_err_cnt; int i, cmp; uint32 nfound = 0; int compare = 1; /*------------------------------------------------------------------------- * object 1 *------------------------------------------------------------------------- */ ri1_index = GRreftoindex(gr1_id, (uint16)ref1); ri1_id = GRselect(gr1_id, ri1_index); /*obtain name,rank,dimsizes,datatype and num of attributes of gr */ if (GRgetiminfo(ri1_id, gr1_name, &ncomps1, &dtype1, &interlace_mode1, dimsizes1, &nattrs1) == FAIL) { printf("Failed to get info for SDS ref <%d>\n", ref1); goto out; } /*------------------------------------------------------------------------- * object 2 *------------------------------------------------------------------------- */ ri2_index = GRreftoindex(gr2_id, (uint16)ref2); ri2_id = GRselect(gr2_id, ri2_index); /*obtain name,rank,dimsizes,datatype and num of attributes of gr */ if (GRgetiminfo(ri2_id, gr2_name, &ncomps2, &dtype2, &interlace_mode2, dimsizes2, &nattrs2) == FAIL) { printf("Failed to get info for SDS ref <%d>\n", ref2); goto out; } if (opt->verbose) printf("Comparing <%s>\n", gr1_name); /*------------------------------------------------------------------------- * check for different type *------------------------------------------------------------------------- */ if (dtype1 != dtype2) { printf("Comparison not supported\n"); printf("<%s> has datatype %d, <%s> has datatype %d ", gr1_name, dtype1, gr2_name, dtype2); compare = 0; } /*------------------------------------------------------------------------- * check for the same rank *------------------------------------------------------------------------- */ if (ncomps1 != ncomps2) { printf("Comparison not supported\n"); printf("<%s> has %d components\n", gr1_name, ncomps1); printf("\n"); printf("<%s> has %d components\n", gr2_name, ncomps2); compare = 0; } /*------------------------------------------------------------------------- * check for different dimensions *------------------------------------------------------------------------- */ for (i = 0; i < 2; i++) { if (dimsizes1[i] != dimsizes2[i]) dim_diff = 1; } /*------------------------------------------------------------------------- * dimensions *------------------------------------------------------------------------- */ if (dim_diff == 1) { printf("Comparison not supported\n"); printf("<%s> has dimensions ", gr1_name); print_dims(2, dimsizes1); printf("\n"); printf("<%s> has dimensions ", gr2_name); print_dims(2, dimsizes2); compare = 0; } /*------------------------------------------------------------------------- * match interlace * NOTE: GR images are always stored as pixel_interlace (0) on disk * that does not happen with images saved with the * DF24 - Single-file 24-Bit Raster Image Interface, * where the interlace mode on disk can be 0, 1 or 2 *------------------------------------------------------------------------- */ if (interlace_mode1 != interlace_mode2) { if (opt->verbose) printf("Warning: different interlace mode: <%d> and <%d>\n", interlace_mode1, interlace_mode2); interlace_mode1 = interlace_mode2; } /*------------------------------------------------------------------------- * get size *------------------------------------------------------------------------- */ /* compute the number of the bytes for each value. */ numtype = dtype1 & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); /* set edges of SDS */ nelms = 1; for (i = 0; i < 2; i++) { nelms *= dimsizes1[i]; edges[i] = dimsizes1[i]; start[i] = 0; } data_size = dimsizes1[0] * dimsizes1[1] * ncomps1 * eltsz; if (compare) { /*------------------------------------------------------------------------- * read image 1 *------------------------------------------------------------------------- */ /* alloc */ if ((buf1 = (void *)malloc(data_size)) == NULL) { printf("Failed to allocate %u elements of size %d\n", nelms, eltsz); goto out; } /* set the interlace for reading */ if (GRreqimageil(ri1_id, interlace_mode1) == FAIL) { printf("Could not set interlace for GR <%s>\n", gr1_name); goto out; } /* read data */ if (GRreadimage(ri1_id, start, NULL, edges, buf1) == FAIL) { printf("Could not read GR <%s>\n", gr1_name); goto out; } /*------------------------------------------------------------------------- * read image 2 *------------------------------------------------------------------------- */ /* alloc */ if ((buf2 = (void *)malloc(data_size)) == NULL) { printf("Failed to allocate %u elements of size %d\n", nelms, eltsz); goto out; } /* set the interlace for reading */ if (GRreqimageil(ri2_id, interlace_mode2) == FAIL) { printf("Could not set interlace for GR <%s>\n", gr2_name); goto out; } /* read data */ if (GRreadimage(ri2_id, start, NULL, edges, buf2) == FAIL) { printf("Could not read GR <%s>\n", gr2_name); goto out; } /*------------------------------------------------------------------------- * comparing *------------------------------------------------------------------------- */ cmp = memcmp(buf1, buf2, data_size); if (cmp != 0) { /* if the given max_err_cnt is set (i.e. not its default MAX_DIFF), use it, otherwise, use the total number of elements in the dataset */ max_err_cnt = (opt->max_err_cnt != MAX_DIFF) ? opt->max_err_cnt : nelms; nfound = array_diff(buf1, buf2, nelms, gr1_name, gr2_name, 2, dimsizes1, dtype1, opt->err_limit, opt->err_rel, max_err_cnt, opt->statistics, 0, 0); } } /* compare */ /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ GRendaccess(ri1_id); GRendaccess(ri2_id); free(buf1); free(buf2); return nfound; out: opt->err_stat = 1; if (ri1_id != -1) GRendaccess(ri1_id); if (ri2_id != -1) GRendaccess(ri2_id); free(buf1); free(buf2); return 0; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_list.c000066400000000000000000001244051503061704500174600ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hdiff_list.h" static int is_reserved(char *vg_class); static char *get_path(char *path_name, char *obj_name); static int insert_an_data(int32 file_id, int32 ref_in, int32 tag_in, ann_type type, char *path); /*------------------------------------------------------------------------- * Function: hdiff_list * * Purpose: locate all HDF objects in the file and return a list of them * * Return: number of objects in the file * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 21, 2003 * * Description: * * A main loop is used to locate all the objects in the file. This loop preserves the * hierarchy of the file. The algorithm used is * 1) Obtain the number of lone VGroups in the HDF file. * 2) Do a loop for each one of these groups. In each iteration a table is updated * with the tag/reference pair of an object. * 2.1) Obtain the pairs of tag/references for the group * 2.2) Switch between the tag of the current object. Four cases are possible: * 1) Object is a group: recursively repeat the process (obtain the pairs of * tag/references for this group and do another tag switch). * Add the object to the table. * 2) Object is a dataset: Add the object to the table. * 3) Object is an image: Add the object to the table. * 4) Object is a vdata: Add the object to the table. * 3) Read all the HDF interfaces (SDS, GR and VS), checking for objects that are * already in the table (meaning they belong to a previous inspected group, * and should not be added). These objects belong to a root group. * 4) Read all global attributes and annotations. * *------------------------------------------------------------------------- */ uint32 hdiff_list(const char *fname, dtable_t *table, diff_dim_table_t *td1, diff_dim_table_t *td2, int *err) { int32 file_id = -1, sd_id = -1, gr_id = -1; /* open the file for read */ if ((file_id = Hopen(fname, DFACC_READ, (int16)0)) == FAIL) { printf("Cannot open file <%s>\n", fname); goto out; } /* initialize the SD interface */ if ((sd_id = SDstart(fname, DFACC_READ)) == FAIL) { printf("Could not start SD for <%s>\n", fname); goto out; } /* initialize the GR interface */ if ((gr_id = GRstart(file_id)) == FAIL) { printf("Could not start GR for <%s>\n", fname); goto out; } /* iterate through HDF interfaces */ if (hdiff_list_vg(fname, file_id, sd_id, gr_id, table, td1, td2) < 0) goto out; if (hdiff_list_gr(file_id, gr_id, table) < 0) goto out; if (hdiff_list_sds(file_id, sd_id, table, td1, td2) < 0) goto out; if (hdiff_list_vs(file_id, table) < 0) goto out; if (hdiff_list_glb(sd_id, gr_id) < 0) goto out; if (hdiff_list_an(file_id) < 0) goto out; /* close */ if (GRend(gr_id) == FAIL) { printf("Failed to close GR interface <%s>\n", fname); goto out; } if (SDend(sd_id) == FAIL) { printf("Failed to close SD interface <%s>\n", fname); goto out; } if (Hclose(file_id) == FAIL) { printf("Failed to close file <%s>\n", fname); goto out; } *err = 0; return table->nobjs; out: if (sd_id != -1) SDend(sd_id); if (gr_id != -1) GRend(gr_id); if (file_id != -1) Hclose(file_id); *err = 1; return 0; } /*------------------------------------------------------------------------- * Function: hdiff_list_vg * * Purpose: locate all lone Vgroups in the file * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int hdiff_list_vg(const char *fname, int32 file_id, int32 sd_id, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */ { int32 vg_id; /* vgroup identifier */ int32 nlones = 0; /* number of lone vgroups */ int32 ntagrefs; /* number of tag/ref pairs in a vgroup */ int32 *ref_array = NULL; /* buffer to hold the ref numbers of lone vgroups */ int32 *tags = NULL; /* buffer to hold the tag numbers of vgroups */ int32 *refs = NULL; /* buffer to hold the ref numbers of vgroups */ int32 tag_vg; int32 ref_vg; char *vg_name = NULL; char *vg_class = NULL; uint16 name_len; int32 i; /* initialize the V interface */ if (Vstart(file_id) == FAIL) { printf("Error: Could not start group interface in <%s>\n", fname); return FAIL; } /* * get the names and class names of all the lone vgroups. * first, call Vlone with nlones set to 0 to get the number of * lone vgroups in the file, but not to get their reference numbers. */ nlones = Vlone(file_id, NULL, nlones); if (nlones > 0) { /* * use the nlones returned to allocate sufficient space for the * buffer ref_array to hold the reference numbers of all lone vgroups, */ ref_array = (int32 *)malloc(sizeof(int32) * nlones); /* * and call Vlone again to retrieve the reference numbers into * the buffer ref_array. */ nlones = Vlone(file_id, ref_array, nlones); /* * iterate through each lone vgroup. */ for (i = 0; i < nlones; i++) { int32 ref = ref_array[i]; /* * attach to the current vgroup then get its * name and class. note: the current vgroup must be detached before * moving to the next. */ if ((vg_id = Vattach(file_id, ref, "r")) == FAIL) { printf("Error: Could not attach group with ref <%d>\n", ref); goto out; } if (Vgetnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); goto out; } free(vg_name); vg_name = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetname(vg_id, vg_name) == FAIL) { printf("Error: Could not get name for group with ref <%d>\n", ref); goto out; } if (Vgetclassnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get classname length for group with ref <%d>\n", ref); goto out; } free(vg_class); vg_class = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetclass(vg_id, vg_class) == FAIL) { printf("Error: Could not get class for group with ref <%d>\n", ref); goto out; } /* ignore reserved HDF groups/vdatas */ if (is_reserved(vg_class)) { if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_class); goto out; } continue; } if (strcmp(vg_name, GR_NAME) == 0) { if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_class); goto out; } continue; } /* get ref and tag */ if ((ref_vg = VQueryref(vg_id)) == FAIL) { printf("Failed to get ref for <%s>\n", vg_name); goto out; } if ((tag_vg = VQuerytag(vg_id)) == FAIL) { printf("Failed to get tag for <%s>\n", vg_name); goto out; } assert(tag_vg == DFTAG_VG); /* add object to table */ dtable_add(table, tag_vg, ref_vg, vg_name); insert_vg_attrs(vg_id, vg_name); insert_vg_an(file_id, vg_id, vg_name); /* insert objects for this group */ ntagrefs = Vntagrefs(vg_id); if (ntagrefs > 0) { tags = (int32 *)malloc(sizeof(int32) * ntagrefs); refs = (int32 *)malloc(sizeof(int32) * ntagrefs); Vgettagrefs(vg_id, tags, refs, ntagrefs); insert_vg(fname, file_id, sd_id, gr_id, vg_name, tags, refs, ntagrefs, table, td1, td2); free(tags); free(refs); } if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); goto out; } free(vg_name); vg_name = NULL; free(vg_class); vg_class = NULL; } /* for */ /* free the space allocated */ free(ref_array); } /* if */ free(vg_name); free(vg_class); /* terminate access to the V interface */ if (Vend(file_id) == FAIL) { printf("Error: Could not end group interface\n"); } return 0; out: free(vg_name); free(vg_class); free(tags); free(refs); free(ref_array); Vend(file_id); return FAIL; } /*------------------------------------------------------------------------- * Function: insert_vg * * Purpose: recursive function to locate objects in Vgroups * *------------------------------------------------------------------------- */ int insert_vg(const char *fname, int32 file_id, int32 sd_id, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ char *path_name, /* absolute path for input group name */ int32 *in_tags, /* tag list for parent group */ int32 *in_refs, /* ref list for parent group */ int npairs, /* number tag/ref pairs for parent group */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */ { int32 vg_id, /* vgroup identifier */ ntagrefs, /* number of tag/ref pairs in a vgroup */ tag, /* temporary tag */ ref; /* temporary ref */ int32 *tags = NULL; /* buffer to hold the tag numbers of vgroups */ int32 *refs = NULL; /* buffer to hold the ref numbers of vgroups */ char *vg_name = NULL; char *vg_class = NULL; char *path = NULL; int i; uint16 name_len; for (i = 0; i < npairs; i++) { tag = in_tags[i]; ref = in_refs[i]; switch (tag) { /*------------------------------------------------------------------------- * VG *------------------------------------------------------------------------- */ case DFTAG_VG: /* check if already inserted */ if (dtable_search(table, DFTAG_VG, ref) >= 0) { break; } vg_id = Vattach(file_id, ref, "r"); if (Vgetnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); break; } free(vg_name); vg_name = (char *)malloc(sizeof(char) * (name_len + 1)); Vgetname(vg_id, vg_name); if (Vgetclassnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get classname length for group with ref <%d>\n", ref); break; } free(vg_class); vg_class = (char *)malloc(sizeof(char) * (name_len + 1)); Vgetclass(vg_id, vg_class); /* ignore reserved HDF groups/vdatas */ if (is_reserved(vg_class)) { Vdetach(vg_id); break; } if (strcmp(vg_name, GR_NAME) == 0) { Vdetach(vg_id); break; } /* initialize path */ path = get_path(path_name, vg_name); /* add object to table */ dtable_add(table, tag, ref, path); insert_vg_attrs(vg_id, path); insert_vg_an(file_id, vg_id, path); /* get objects for this group */ ntagrefs = Vntagrefs(vg_id); if (ntagrefs > 0) { tags = (int32 *)malloc(sizeof(int32) * ntagrefs); refs = (int32 *)malloc(sizeof(int32) * ntagrefs); Vgettagrefs(vg_id, tags, refs, ntagrefs); /* recurse */ insert_vg(fname, file_id, sd_id, gr_id, path, tags, refs, ntagrefs, table, td1, td2); free(tags); free(refs); } if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); } free(path); break; /*------------------------------------------------------------------------- * SDS *------------------------------------------------------------------------- */ case DFTAG_SD: /* Scientific Data */ case DFTAG_SDG: /* Scientific Data Group */ case DFTAG_NDG: /* Numeric Data Group */ insert_sds(file_id, sd_id, tag, ref, path_name, table, td1, td2); break; /*------------------------------------------------------------------------- * Image *------------------------------------------------------------------------- */ case DFTAG_RI: /* Raster Image */ case DFTAG_CI: /* Compressed Image */ case DFTAG_RIG: /* Raster Image Group */ case DFTAG_RI8: /* Raster-8 image */ case DFTAG_CI8: /* RLE compressed 8-bit image */ case DFTAG_II8: /* IMCOMP compressed 8-bit image */ insert_gr(file_id, gr_id, tag, ref, path_name, table); break; /*------------------------------------------------------------------------- * Vdata *------------------------------------------------------------------------- */ case DFTAG_VH: /* Vdata Header */ insert_vs(file_id, ref, path_name, table, 0); break; } } free(vg_name); free(vg_class); return 0; } /*------------------------------------------------------------------------- * Function: hdiff_list_gr * * Purpose: get top level GR images * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int hdiff_list_gr(int32 file_id, int32 gr_id, /* GR interface identifier */ dtable_t *table) { int32 ri_id, /* raster image identifier */ n_rimages, /* number of raster images in the file */ n_file_attrs, /* number of file attributes */ ri_index, /* index of a image */ gr_ref, /* reference number of the GR image */ dim_sizes[2], /* dimensions of an image */ n_comps, /* number of components an image contains */ interlace_mode, /* interlace mode of an image */ data_type, /* number type of an image */ n_attrs; /* number of attributes belong to an image */ char name[H4_MAX_GR_NAME]; /* name of an image */ /* determine the contents of the file */ if (GRfileinfo(gr_id, &n_rimages, &n_file_attrs) < 0) { return FAIL; } for (ri_index = 0; ri_index < n_rimages; ri_index++) { ri_id = GRselect(gr_id, ri_index); GRgetiminfo(ri_id, name, &n_comps, &data_type, &interlace_mode, dim_sizes, &n_attrs); gr_ref = GRidtoref(ri_id); /* check if already inserted in Vgroup; search all image tags */ if (dtable_search(table, DFTAG_RI, gr_ref) >= 0 || dtable_search(table, DFTAG_CI, gr_ref) >= 0 || dtable_search(table, DFTAG_RIG, gr_ref) >= 0 || dtable_search(table, DFTAG_RI8, gr_ref) >= 0 || dtable_search(table, DFTAG_CI8, gr_ref) >= 0 || dtable_search(table, DFTAG_II8, gr_ref) >= 0) { GRendaccess(ri_id); continue; } /* insert GR */ insert_gr(file_id, gr_id, DFTAG_RI, gr_ref, 0, table); /* terminate access to the current raster image */ GRendaccess(ri_id); } return SUCCEED; } /*------------------------------------------------------------------------- * Function: hdiff_list_sds * * Purpose: get top level SDS * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int hdiff_list_sds(int32 file_id, int32 sd_id, /* SD interface identifier */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */ { int32 sds_id, /* dataset identifier */ n_datasets, /* number of datasets in the file */ n_file_attrs, /* number of file attributes */ index, /* index of a dataset */ sds_ref, /* reference number */ dim_sizes[H4_MAX_VAR_DIMS], /* dimensions of an image */ data_type, /* number type */ rank, /* rank */ n_attrs; /* number of attributes */ char name[H4_MAX_GR_NAME]; /* name of dataset */ /* determine the number of data sets in the file and the number of file attributes */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attrs) < 0) { return FAIL; } for (index = 0; index < n_datasets; index++) { sds_id = SDselect(sd_id, index); SDgetinfo(sds_id, name, &rank, dim_sizes, &data_type, &n_attrs); sds_ref = SDidtoref(sds_id); /* check if already inserted in Vgroup; search all SDS tags */ if (dtable_search(table, DFTAG_SD, sds_ref) >= 0 || dtable_search(table, DFTAG_SDG, sds_ref) >= 0 || dtable_search(table, DFTAG_NDG, sds_ref) >= 0) { SDendaccess(sds_id); continue; } /* insert SDS */ insert_sds(file_id, sd_id, DFTAG_NDG, sds_ref, 0, table, td1, td2); /* terminate access to the current dataset */ SDendaccess(sds_id); } return 0; } /*------------------------------------------------------------------------- * Function: hdiff_list_vs * * Purpose: get top level VS * *------------------------------------------------------------------------- */ int hdiff_list_vs(int32 file_id, dtable_t *table) { int32 nlones = 0, /* number of lone vdatas */ *ref_array, /* buffer to hold the ref numbers of lone vdatas */ ref; /* temporary ref number */ int i; /* initialize the VS interface */ Vstart(file_id); /* * get and print the names and class names of all the lone vdatas. * first, call Vlone with nlones set to 0 to get the number of * lone vdatas in the file, but not to get their reference numbers. */ nlones = VSlone(file_id, NULL, nlones); if (nlones > 0) { /* * use the nlones returned to allocate sufficient space for the * buffer ref_array to hold the reference numbers of all lone vgroups, */ ref_array = (int32 *)malloc(sizeof(int32) * nlones); /* * and call VSlone again to retrieve the reference numbers into * the buffer ref_array. */ nlones = VSlone(file_id, ref_array, nlones); /* * iterate through each lone vdata. */ for (i = 0; i < nlones; i++) { /* * attach to the current vdata then get its * name and class. note: the current vdata must be detached before * moving to the next. */ ref = ref_array[i]; /* check if already inserted in Vgroup*/ if (dtable_search(table, DFTAG_VH, ref) >= 0) { continue; } /* insert VS */ insert_vs(file_id, ref, 0, table, 1); } /* for */ /* free the space allocated */ free(ref_array); } /* if */ /* terminate access to the VS interface */ Vend(file_id); return 0; } /*------------------------------------------------------------------------- * Function: insert_vg_attrs * * Purpose: insert VG attributes * *------------------------------------------------------------------------- */ int insert_vg_attrs(int32 vg_in, char *path) { int n_attrs; int32 data_type, size, n_values; char attr_name[H4_MAX_NC_NAME]; int i; /* Get the number of attributes attached to this vgroup. */ if ((n_attrs = Vnattrs2(vg_in)) == FAIL) { printf("Failed to get attributes for <%s>\n", path); return -1; } for (i = 0; i < n_attrs; i++) { if ((Vattrinfo2(vg_in, i, attr_name, &data_type, &n_values, &size, NULL, NULL)) == FAIL) { printf("Failed to get attribute %d of <%s>\n", i, path); continue; } } return 0; } /*------------------------------------------------------------------------- * Function: hdiff_list_glb * * Purpose: list/insert global SDS attributes, global GR attributes * *------------------------------------------------------------------------- */ int hdiff_list_glb(int32 sd_id, /* SD interface identifier */ int32 gr_id) /* GR interface identifier */ { int32 n_datasets, /* number of datasets in the file */ n_file_attrs; /* number of file attributes */ /*------------------------------------------------------------------------- * insert SDS global attributes *------------------------------------------------------------------------- */ /* determine the number of data sets in the file and the number of file attributes */ SDfileinfo(sd_id, &n_datasets, &n_file_attrs); insert_sds_attrs(sd_id, n_file_attrs); /*------------------------------------------------------------------------- * insert GR global attributes *------------------------------------------------------------------------- */ /* determine the number of data sets in the file and the number of file attributes */ GRfileinfo(gr_id, &n_datasets, &n_file_attrs); insert_gr_attrs(gr_id, n_file_attrs); return 0; } /*------------------------------------------------------------------------- * Function: hdiff_list_an * * Purpose: list/insert AN FILE objects * *------------------------------------------------------------------------- */ int hdiff_list_an(int32 file_id) { int32 an_id, /* AN interface identifier */ ann_id, /* an annotation identifier */ i, /* position of an annotation in all of the same type*/ n_file_labels, n_file_descs, n_data_labels, n_data_descs; /* Initialize the AN interface */ an_id = ANstart(file_id); /* * Get the annotation information, e.g., the numbers of file labels, file * descriptions, data labels, and data descriptions. */ ANfileinfo(an_id, &n_file_labels, &n_file_descs, &n_data_labels, &n_data_descs); /*------------------------------------------------------------------------- * AN_FILE_LABEL *------------------------------------------------------------------------- */ for (i = 0; i < n_file_labels; i++) { /* Get the identifier of the current data label */ ann_id = ANselect(an_id, i, AN_FILE_LABEL); /* Terminate access to the current data label */ ANendaccess(ann_id); } /*------------------------------------------------------------------------- * AN_FILE_DESC *------------------------------------------------------------------------- */ for (i = 0; i < n_file_descs; i++) { /* Get the identifier of the current data label */ ann_id = ANselect(an_id, i, AN_FILE_DESC); /* Terminate access to the current data label */ ANendaccess(ann_id); } /* Terminate access to the AN interface */ ANend(an_id); return 0; } /*------------------------------------------------------------------------- * Function: insert_vg_an * * Purpose: insert Vgroup ANs * *------------------------------------------------------------------------- */ int insert_vg_an(int32 file_id, int32 vg_id, char *path) { int32 ref_in, tag_in; if ((ref_in = VQueryref(vg_id)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_in = VQuerytag(vg_id)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } insert_an(file_id, ref_in, tag_in, path); return 0; } /*------------------------------------------------------------------------- * Function: insert_vs_an * * Purpose: insert Vdata ANs * *------------------------------------------------------------------------- */ int insert_vs_an(int32 file_id, int32 vdata_id, char *path) { int32 ref_in, tag_in; if ((ref_in = VSQueryref(vdata_id)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_in = VSQuerytag(vdata_id)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } insert_an(file_id, ref_in, tag_in, path); return 1; } /*------------------------------------------------------------------------- * Function: insert_an_data * * Purpose: insert DATA ANs * *------------------------------------------------------------------------- */ static int insert_an_data(int32 file_id, int32 ref_in, int32 tag_in, ann_type type, char *path) { int32 an_id, /* AN interface identifier */ ann_id, /* an annotation identifier */ i, /* position of an annotation */ n_anno; /* Initialize the AN interface */ an_id = ANstart(file_id); /* Get the number of ANs in this object */ if ((n_anno = ANnumann(an_id, type, (uint16)tag_in, (uint16)ref_in)) == FAIL) { printf("Failed to get annotations for <%s>\n", path); return -1; } for (i = 0; i < n_anno; i++) { if ((ann_id = ANselect(an_id, i, type)) == FAIL) { printf("Failed to select AN %d of <%s>\n", i, path); continue; } if (ANendaccess(ann_id) == FAIL) { printf("Failed to end AN %d of <%s>\n", i, path); continue; } } /* Terminate access to the AN interface */ ANend(an_id); return 0; } /*------------------------------------------------------------------------- * Function: insert_an * * Purpose: insert DATA ANs (AN_DATA_LABEL and AN_DATA_DESC) * *------------------------------------------------------------------------- */ int insert_an(int32 file_id, int32 ref_in, int32 tag_in, char *path) { insert_an_data(file_id, ref_in, tag_in, AN_DATA_LABEL, path); insert_an_data(file_id, ref_in, tag_in, AN_DATA_DESC, path); return 0; } /*------------------------------------------------------------------------- * Function: insert_sds * * Purpose: insert an SDS into file object list * * Return: 0, -1 for error * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 22, 2003 * * Modifications: pvn. July the 13 (Friday), 2007 * Add support for lone dimensions * *------------------------------------------------------------------------- */ int insert_sds(int32 file_id, int32 sd_id, int32 tag, /* tag of input SDS */ int32 ref, /* ref of input SDS */ char *path_name, /* absolute path for input group name */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */ { int32 sds_id, /* data set identifier */ sds_index, /* index number of the data set */ dtype, /* SDS data type */ dimsizes[H4_MAX_VAR_DIMS], /* dimensional size of SDS */ nattrs, /* number of SDS attributes */ rank, /* rank of SDS */ dim_size, /* dimension size */ dim_id; /* dimension ID */ char sds_name[H4_MAX_NC_NAME]; char dim_name[H4_MAX_NC_NAME]; char *path = NULL; int i; sds_index = SDreftoindex(sd_id, ref); sds_id = SDselect(sd_id, sds_index); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ SDgetinfo(sds_id, sds_name, &rank, dimsizes, &dtype, &nattrs); /* check if the given SDS is a dimension scale, return 0 for no table add */ if (SDiscoordvar(sds_id)) { /* add SDS coordinate variable to dimension table 1 */ diff_dim_table_add(td1, ref, sds_name); SDendaccess(sds_id); return 0; } /* initialize path */ path = get_path(path_name, sds_name); /* add object to table */ dtable_add(table, tag, ref, path); /*------------------------------------------------------------------------- * insert attributes *------------------------------------------------------------------------- */ insert_sds_attrs(sds_id, nattrs); /*------------------------------------------------------------------------- * dimension scales *------------------------------------------------------------------------- */ /* loop through each dimension up to rank of SDS */ for (i = 0; i < rank; i++) { /* get dimension handle for input dimension */ if ((dim_id = SDgetdimid(sds_id, i)) == FAIL) { printf("Failed to get dimension %d of SDS <%s>\n", i, path); continue; } /* get dimension information for input dimension */ if (SDdiminfo(dim_id, dim_name, &dim_size, &dtype, &nattrs) == FAIL) { printf("Failed to get info for dimension %d of SDS <%s>\n", i, path); continue; } /* attributes */ if (nattrs && insert_sds_attrs(dim_id, nattrs) == FAIL) { printf("Failed to copy attributes for dimension %d of of SDS <%s>\n", i, path); continue; } /* add dimension name to dimension scales table 2 */ diff_dim_table_add(td2, -1, dim_name); } /*------------------------------------------------------------------------- * insert ANs *------------------------------------------------------------------------- */ insert_an(file_id, ref, tag, path); /*------------------------------------------------------------------------- * terminate access to the SDSs *------------------------------------------------------------------------- */ SDendaccess(sds_id); free(path); return 0; } /*------------------------------------------------------------------------- * Function: insert_sds_attrs * * Purpose: insert SDS attributes * used for global, dataset and dimension attributes * *------------------------------------------------------------------------- */ int insert_sds_attrs(int32 id_in, int32 nattrs) { int32 dtype, /* SDS data type */ nelms; /* number of elements */ char attr_name[H4_MAX_NC_NAME]; int i; /* loop through attributes in input SDS */ for (i = 0; i < nattrs; i++) { if (SDattrinfo(id_in, i, attr_name, &dtype, &nelms) == FAIL) { printf("Cannot get info for attribute number %d\n", i); continue; } } return 0; } /*------------------------------------------------------------------------- * Function: insert_gr_attrs * * Purpose: insert GR attributes * *------------------------------------------------------------------------- */ int insert_gr_attrs(int32 ri_id, int32 nattrs) { int32 dtype, /* SDS data type */ nelms; /* number of elements */ char attr_name[H4_MAX_NC_NAME]; int i; /* loop through attributes in input GR */ for (i = 0; i < nattrs; i++) { if (GRattrinfo(ri_id, i, attr_name, &dtype, &nelms) == FAIL) { printf("Cannot get info for attribute number %d\n", i); continue; } } return 0; } /*------------------------------------------------------------------------- * Function: insert_vs_attrs * * Purpose: insert VS attributes * *------------------------------------------------------------------------- */ int insert_vs_attrs(int32 in, int32 findex, intn attrindex) { char attr_name[H4_MAX_NC_NAME]; int32 n_values, attr_size, attr_type; /* Get attribute information */ VSattrinfo(in, findex, attrindex, attr_name, &attr_type, &n_values, &attr_size); return 0; } /*------------------------------------------------------------------------- * Function: insert_gr * * Purpose: insert a GR * *------------------------------------------------------------------------- */ int insert_gr(int32 file_id, int32 gr_in, int32 tag, /* tag of input GR */ int32 ref, /* ref of input GR */ char *path_name, /* absolute path for input group name */ dtable_t *table) { int32 ri_id, /* raster image identifier */ ri_index, /* index of a image */ dimsizes[2], /* dimensions of an image */ n_comps, /* number of components an image contains */ interlace_mode, /* interlace mode of an image */ dtype, /* number type of an image */ n_attrs; /* number of attributes belong to an image */ int32 pal_id, /* palette identifier */ r_num_entries, r_data_type, r_ncomp, r_interlace_mode; char gr_name[H4_MAX_GR_NAME]; char *path = NULL; int has_pal = 0; ri_index = GRreftoindex(gr_in, (uint16)ref); ri_id = GRselect(gr_in, ri_index); GRgetiminfo(ri_id, gr_name, &n_comps, &dtype, &interlace_mode, dimsizes, &n_attrs); /* initialize path */ path = get_path(path_name, gr_name); /* add object to table */ dtable_add(table, tag, ref, path); /*------------------------------------------------------------------------- * insert attributes *------------------------------------------------------------------------- */ insert_gr_attrs(ri_id, n_attrs); /*------------------------------------------------------------------------- * check for palette *------------------------------------------------------------------------- */ pal_id = GRgetlutid(ri_id, 0); GRgetlutinfo(pal_id, &r_ncomp, &r_data_type, &r_interlace_mode, &r_num_entries); /*check if there is palette data */ has_pal = ((r_ncomp == 0) || (r_interlace_mode < 0) || (r_num_entries == 0)) ? 0 : 1; if (has_pal == 1) { } /* has_pal==1 */ /*------------------------------------------------------------------------- * insert ANs *------------------------------------------------------------------------- */ insert_an(file_id, ref, DFTAG_RIG, path); insert_an(file_id, ref, DFTAG_RI, path); /*------------------------------------------------------------------------- * terminate access to the GR *------------------------------------------------------------------------- */ /* terminate access to the GRs */ GRendaccess(ri_id); free(path); return 0; } /*------------------------------------------------------------------------- * Function: insert_vs * * Purpose: insert a VS * *------------------------------------------------------------------------- */ int insert_vs(int32 file_id, int32 ref, /* ref of input VS */ char *path_name, /* absolute path for input group name */ dtable_t *table, int is_lone) { int32 vdata_id, /* vdata identifier */ tag_vs, ref_vs; int n_fields, n_attrs; char vdata_name[VSNAMELENMAX], vdata_class[VSNAMELENMAX]; char *path = NULL; int i, j, ret = 1; /*------------------------------------------------------------------------- * attach the vdata, gets its name and class *------------------------------------------------------------------------- */ if ((vdata_id = VSattach(file_id, ref, "r")) == FAIL) { printf("Failed to attach vdata ref %d\n", ref); return -1; } if (VSgetname(vdata_id, vdata_name) == FAIL) { printf("Failed to name for vdata ref %d\n", ref); return -1; } if (VSgetclass(vdata_id, vdata_class) == FAIL) { printf("Failed to name for vdata ref %d\n", ref); return -1; } /* ignore reserved HDF groups/vdatas; they are lone ones */ if (is_lone == 1 && vdata_class[0] == '\0') { if (is_reserved(vdata_class)) { if (VSdetach(vdata_id) == FAIL) printf("Failed to detach vdata <%s>\n", path_name); return 0; } } if ((ref_vs = VSQueryref(vdata_id)) == FAIL) { printf("Failed to get ref for <%s>\n", vdata_name); } if ((tag_vs = VSQuerytag(vdata_id)) == FAIL) { printf("Failed to get tag for <%s>\n", vdata_name); } /* initialize path */ path = get_path(path_name, vdata_name); /* add object to table */ dtable_add(table, tag_vs, ref_vs, path); /*------------------------------------------------------------------------- * fields *------------------------------------------------------------------------- */ if ((n_fields = VFnfields(vdata_id)) == FAIL) { printf("Failed getting fields for VS <%s>\n", path); ret = -1; goto out; } /*------------------------------------------------------------------------- * insert attributes *------------------------------------------------------------------------- */ if ((n_attrs = VSfnattrs(vdata_id, -1)) == FAIL) { printf("Failed getting attributes for VS <%s>\n", path); ret = -1; goto out; } for (i = 0; i < n_attrs; i++) { insert_vs_attrs(vdata_id, -1, i); } /*------------------------------------------------------------------------- * insert field attributes *------------------------------------------------------------------------- */ for (i = 0; i < n_fields; i++) { if ((n_attrs = VSfnattrs(vdata_id, i)) == FAIL) { printf("Failed getting fields for VS <%s>\n", path); ret = -1; goto out; } for (j = 0; j < n_attrs; j++) { insert_vs_attrs(vdata_id, i, j); } } /*------------------------------------------------------------------------- * insert ANs *------------------------------------------------------------------------- */ insert_vs_an(file_id, vdata_id, path); /*------------------------------------------------------------------------- * terminate access to the VSs *------------------------------------------------------------------------- */ out: VSdetach(vdata_id); free(path); return ret; } /*------------------------------------------------------------------------- * Function: is_reserved * * Purpose: check for reserved Vgroup/Vdata class/names * * Return: 1 if reserved, 0 if not * *------------------------------------------------------------------------- */ static int is_reserved(char *vg_class) { int ret = 0; /* ignore reserved HDF groups/vdatas */ if (vg_class != NULL) { if ((strcmp(vg_class, _HDF_ATTRIBUTE) == 0) || (strcmp(vg_class, _HDF_VARIABLE) == 0) || (strcmp(vg_class, _HDF_DIMENSION) == 0) || (strcmp(vg_class, _HDF_UDIMENSION) == 0) || (strcmp(vg_class, DIM_VALS) == 0) || (strcmp(vg_class, DIM_VALS01) == 0) || (strcmp(vg_class, _HDF_CDF) == 0) || (strcmp(vg_class, GR_NAME) == 0) || (strcmp(vg_class, RI_NAME) == 0) || (strcmp(vg_class, RIGATTRNAME) == 0) || (strcmp(vg_class, RIGATTRCLASS) == 0)) { ret = 1; } /* class and name(partial) for chunk table i.e. Vdata */ if ((strncmp(vg_class, "_HDF_CHK_TBL_", 13) == 0)) { ret = 1; } } return ret; } /*------------------------------------------------------------------------- * Function: get_path * * Purpose: return absolute path for an object * * Return: path * *------------------------------------------------------------------------- */ static char * get_path(char *path_name, char *obj_name) { char *path = NULL; /* initialize path */ if (path_name != NULL) { path = (char *)malloc(strlen(path_name) + strlen(obj_name) + 2); strcpy(path, path_name); strcat(path, "/"); strcat(path, obj_name); } else { path = (char *)malloc(strlen(obj_name) + 1); strcpy(path, obj_name); } return path; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_list.h000066400000000000000000000104161503061704500174610ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HDIFF_LIST_H #define HDIFF_LIST_H #ifdef __cplusplus extern "C" { #endif #include "hdiff_table.h" #include "hdiff_dim.h" /* get the list of HDF objects in the file */ uint32 hdiff_list(const char *fname, dtable_t *table, diff_dim_table_t *td1, diff_dim_table_t *td2, int *err); int hdiff_list_vg(const char *fname, int32 file_id, int32 sd_id, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */; int hdiff_list_gr(int32 file_id, int32 gr_id, dtable_t *table); int hdiff_list_sds(int32 file_id, int32 sd_id, /* SD interface identifier */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */; int hdiff_list_vs(int32 file_id, dtable_t *table); int hdiff_list_glb(int32 sd_id, int32 gr_id); int hdiff_list_an(int32 file_id); int insert_vg_attrs(int32 vgroup_id, char *path); int insert_vg_an(int32 file_id, int32 vgroup_id, char *path); int insert_vg(const char *fname, int32 file_id, int32 sd_id, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ char *path_name, /* absolute path for input group name */ int32 *in_tags, /* tag list for parent group */ int32 *in_refs, /* ref list for parent group */ int npairs, /* number tag/ref pairs for parent group */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */; int insert_sds(int32 file_id, int32 sd_id, int32 tag, /* tag of input SDS */ int32 ref, /* ref of input SDS */ char *path_name, /* absolute path for input group name */ dtable_t *table, /* all objects table */ diff_dim_table_t *td1, /* dimension table 1 */ diff_dim_table_t *td2) /* dimension table 2 */; int insert_gr(int32 file_id, int32 gr_in, int32 tag, /* tag of input GR */ int32 ref, /* ref of input GR */ char *path_name, /* absolute path for input group name */ dtable_t *table); int insert_vs(int32 file_id, int32 ref, /* ref of input VS */ char *path_name, /* absolute path for input group name */ dtable_t *table, int is_lone); int insert_sds_attrs(int32 sds_id, int32 nattrs); int insert_gr_attrs(int32 ri_id, int32 nattrs); int insert_an(int32 file_id, int32 ref_in, int32 tag_in, char *path); int insert_vs_an(int32 file_id, int32 vdata_id, char *path); int insert_vs_attrs(int32 in, int32 findex, intn attrindex); #ifdef __cplusplus } #endif #endif /* HDIFF_LIST_H */ hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_main.c000066400000000000000000000150331503061704500174250ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include #include "h4getopt.h" #include "hdf.h" #include "hfile_priv.h" #include "mfhdf.h" #include "hdiff.h" /*------------------------------------------------------------------------- * Function: main * * Purpose: hdiff main program * * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu * * Date: August 27, 2003 * Modifications: * March 8, 2006. Added percent (relative) option * * Comments: * *------------------------------------------------------------------------- */ char *progname; static void usage() { fprintf(stdout, "hdiff [-V] [-b] [-g] [-s] [-d] [-D] [-S] [-v var1[,...]] [-u var1[,...]] [-e " "count] [-t limit] [-p relative] file1 file2\n"); fprintf(stdout, " [-V] Display version of the HDF4 library and exit\n"); fprintf(stdout, " [-b] Verbose mode\n"); fprintf(stdout, " [-g] Compare global attributes only\n"); fprintf(stdout, " [-s] Compare SD local attributes only\n"); fprintf(stdout, " [-d] Compare SD data only\n"); fprintf(stdout, " [-D] Compare Vdata data only\n"); fprintf(stdout, " [-S] Print statistics\n"); fprintf(stdout, " [-v var1[,...]] Compare SD data on variable(s) ,... only\n"); fprintf(stdout, " [-u var1[,...]] Compare vdata on variable(s) ,... only\n"); fprintf(stdout, " [-e count] Print difference up to count number for each variable\n"); fprintf(stdout, " [-t limit] Print difference when it is greater than limit\n"); fprintf(stdout, " [-p relative] Print difference when it is greater than a relative limit\n"); fprintf(stdout, " file1 File name of the first HDF file\n"); fprintf(stdout, " file2 File name of the second HDF file\n"); fprintf(stdout, "\n"); fprintf(stdout, "The 'count' value must be a positive integer\n"); fprintf(stdout, "The 'limit' and 'relative' values must be positive numbers\n"); fprintf(stdout, "The -t compare criteria is |a - b| > limit\n"); fprintf(stdout, "The -p compare criteria is |(b-a)/a| > relative\n"); fprintf(stdout, "Return codes: 0 (no differences found), 1 (differences found)\n"); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { static diff_opt_t opt = /* defaults, overridden on command line */ { 0, /* verbose mode */ 1, /* compare global attributes */ 1, /* compare SD local attributes */ 1, /* compare SD data */ 1, /* compare GR data */ 1, /* compare Vdata */ MAX_DIFF, /* no limit on the difference to be printed */ 0.0, /* exact equal */ 0, /* if -v specified, number of variables */ 0, /* if -v specified, list of variable names */ 0, /* if -u specified, number of variables */ 0, /* if -u specified, list of variable names */ 0, /* if -S specified print statistics */ 0, /* -p err_rel */ 0, /* error status */ }; int c; uint32 nfound; int ret; h4opterr = 1; progname = argv[0]; if (argc < 2) usage(); while ((c = h4getopt(argc, argv, "VbgsdSDe:t:v:u:p:")) != EOF) { switch (c) { case 'V': /* display version of the library */ printf("%s, %s\n\n", argv[0], LIBVER_STRING); exit(0); case 'b': /* verbose mode */ opt.verbose = 1; break; case 'g': /* global attributes only */ opt.ga = 1; opt.sa = 0; opt.sd = 0; opt.vd = 0; break; case 's': /* SD local attributes only */ opt.ga = 0; opt.sa = 1; opt.sd = 0; opt.vd = 0; break; case 'd': /* SD data only */ opt.ga = 0; opt.sa = 0; opt.sd = 1; opt.vd = 0; break; case 'D': /* SD data only */ opt.ga = 0; opt.sa = 0; opt.sd = 0; opt.vd = 1; break; case 'e': /* max no. of difference to be printed */ opt.max_err_cnt = atoi(h4optarg); break; case 't': /* range of difference to be printed */ opt.err_limit = (float32)atof(h4optarg); break; case 'v': /* variable names */ /* make list of names of variables specified */ make_vars(h4optarg, &opt, 1); break; case 'u': /* variable names */ /* make list of names of variables specified */ make_vars(h4optarg, &opt, 2); break; case 'S': opt.statistics = 1; break; case 'p': opt.err_rel = (float32)atof(h4optarg); break; } } argv = argv + h4optind; nfound = hdiff(argv[0], argv[1], &opt); /*------------------------------------------------------------------------- * exit code * >0 if differences, 0 if no differences, <0 if error *------------------------------------------------------------------------- */ ret = (nfound == 0 ? 0 : 1); if (opt.err_stat) ret = -1; return ret; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_mattbl.c000066400000000000000000000070371503061704500177710ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdiff_mattbl.h" /*------------------------------------------------------------------------- * Function: match_table_add * * Purpose: mark object is in file; * flag[0] = file1 * flag[1] = file2 * object exists in file = flag = 1 * does not exist = flag = 0 * the key is * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 25, 2003 * *------------------------------------------------------------------------- */ void match_table_add(match_table_t *table, unsigned *flags, char *path, int32 tag1, int32 ref1, int32 tag2, int32 ref2) { uint32 i; if (table->nobjs == table->size) { table->size *= 2; table->objs = (match_info_t *)realloc(table->objs, table->size * sizeof(match_info_t)); for (i = table->nobjs; i < table->size; i++) { table->objs[i].tag1 = table->objs[i].ref1 = -1; table->objs[i].tag2 = table->objs[i].ref2 = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } } i = table->nobjs++; table->objs[i].tag1 = tag1; table->objs[i].ref1 = ref1; table->objs[i].tag2 = tag2; table->objs[i].ref2 = ref2; strcpy(table->objs[i].obj_name, path); table->objs[i].flags[0] = flags[0]; table->objs[i].flags[1] = flags[1]; } /*------------------------------------------------------------------------- * Function: match_table_init * * Purpose: initialize table * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void match_table_init(match_table_t **tbl) { uint32 i; match_table_t *table = (match_table_t *)malloc(sizeof(match_table_t)); table->size = 20; table->nobjs = 0; table->objs = (match_info_t *)malloc(table->size * sizeof(match_info_t)); for (i = 0; i < table->size; i++) { table->objs[i].tag1 = table->objs[i].ref1 = -1; table->objs[i].tag2 = table->objs[i].ref2 = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } *tbl = table; } /*------------------------------------------------------------------------- * Function: match_table_free * * Purpose: free table memory * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void match_table_free(match_table_t *table) { free(table->objs); free(table); } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_mattbl.h000066400000000000000000000034451503061704500177750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HDIFF_MATTBL_H #define HDIFF_MATTBL_H #include "hdf.h" #include "mfhdf.h" #ifdef __cplusplus extern "C" { #endif /* match objects in 2 HDF files */ typedef struct match_info_t { int32 tag1; int32 ref1; int32 tag2; int32 ref2; char obj_name[H4_MAX_NC_NAME]; /* same name for file1 and 2 */ int flags[2]; /* object exists in file=1, no=0 */ } match_info_t; /* table to store the match info */ typedef struct match_table_t { uint32 size; uint32 nobjs; match_info_t *objs; } match_table_t; /* table methods */ void match_table_init(match_table_t **table); void match_table_free(match_table_t *table); void match_table_add(match_table_t *table, unsigned *flags, char *path, int32 tag1, int32 ref1, int32 tag2, int32 ref2); #ifdef __cplusplus } #endif #endif /* HDIFF_MATTBL_H */ hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_misc.c000066400000000000000000000172711503061704500174420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hdiff.h" /* * convert pathname of netcdf file into name for cdl unit, by taking * last component of path and stripping off any extension. */ char * name_path(char *path) { char *cp, *newc; #ifdef MSDOS #define FILE_DELIMITER '\\' #endif #ifndef FILE_DELIMITER /* default to unix */ #define FILE_DELIMITER '/' #endif cp = strrchr(path, FILE_DELIMITER); if (cp == 0) /* no delimiter */ cp = path; else /* skip delimiter */ cp++; newc = (char *)malloc((unsigned)(strlen(cp) + 1)); if (newc == 0) { fprintf(stderr, "Out of memory!\n"); exit(EXIT_FAILURE); } (void)strcpy(newc, cp); /* copy last component of path */ if ((cp = strrchr(newc, '.')) != NULL) *cp = '\0'; /* strip off any extension */ return newc; } const char * type_name(nc_type type) { switch (type) { case DFNT_INT8: return "byte"; case DFNT_CHAR: return "char"; case DFNT_INT16: return "short"; case DFNT_INT32: return "long"; case DFNT_FLOAT: return "float"; case DFNT_DOUBLE: return "double"; default: fprintf(stderr, "type_name: bad type %d", type); return "bogus"; } } /* * Remove trailing zeros (after decimal point) but not trailing decimal * point from ss, a string representation of a floating-point number that * might include an exponent part. */ void tztrim(char *ss) /* returned string representing dd */ { char *cp, *ep; cp = ss; if (*cp == '-') cp++; while (isdigit((int)*cp) || *cp == '.') cp++; if (*--cp == '.') return; ep = cp + 1; while (*cp == '0') cp--; cp++; if (cp == ep) return; while (*ep) *cp++ = *ep++; *cp = '\0'; return; } /* * Print list of attribute values. Attribute values must be printed with * explicit type tags, because their types are not declared. */ void pr_att_vals(nc_type type, int len, void *vals) { int iel; union { char *cp; int16 *sp; int32 *lp; float32 *fp; float64 *dp; } gp; char *sp; unsigned char uc; char gps[30]; /* for ascii of a float or double precision */ const char *f_fmt = "%#.8g"; const char *d_fmt = "%#.16g"; switch (type) { case DFNT_INT8: gp.cp = (char *)vals; for (iel = 0; iel < len; iel++) if (isprint(uc = *gp.cp++ & 0377)) printf("'%c'%s", uc, iel < len - 1 ? ", " : ""); else printf("'\\%o'%s", uc, iel < len - 1 ? ", " : ""); break; case DFNT_CHAR: gp.cp = (char *)vals; printf("\""); /* adjust len so trailing nulls don't get printed */ sp = gp.cp + len - 1; while (*sp-- == '\0' && len > 0) len--; for (iel = 0; iel < len; iel++) switch (uc = *gp.cp++ & 0377) { case '\b': printf("\\b"); break; case '\f': printf("\\f"); break; case '\n': /* generate linebreaks after new-lines */ printf("\\n\",\n \""); break; case '\r': printf("\\r"); break; case '\t': printf("\\t"); break; case '\v': printf("\\v"); break; case '\\': printf("\\\\"); break; case '\'': printf("\\'"); break; case '\"': printf("\\\""); break; default: printf("%c", uc); break; } printf("\""); break; case DFNT_INT16: gp.sp = (int16 *)vals; for (iel = 0; iel < len; iel++) printf("%ds%s", *gp.sp++, iel < len - 1 ? ", " : ""); break; case DFNT_INT32: gp.lp = (int32 *)vals; for (iel = 0; iel < len; iel++) printf("%d%s", *gp.lp++, iel < len - 1 ? ", " : ""); break; case DFNT_FLOAT: gp.fp = (float32 *)vals; for (iel = 0; iel < len; iel++) { int ll; (void)sprintf(gps, f_fmt, (double)*gp.fp++); /* append a trailing "f" for floating-point attributes */ ll = strlen(gps); gps[ll + 1] = '\0'; gps[ll] = 'f'; tztrim(gps); /* trim trailing 0's after '.' */ printf("%s%s", gps, iel < len - 1 ? ", " : ""); } break; case DFNT_DOUBLE: gp.dp = (float64 *)vals; for (iel = 0; iel < len; iel++) { (void)sprintf(gps, d_fmt, *gp.dp++); tztrim(gps); /* trim trailing 0's after '.' */ printf("%s%s", gps, iel < len - 1 ? ", " : ""); } break; default: fprintf(stderr, "pr_att_vals: bad type - %d", type); } } void make_vars(char *optarg, diff_opt_t *opt, int option) { char *cp = optarg; int nvars = 1; char **cpp; /* compute number of variable names in comma-delimited list */ if (option == 1) opt->nlvars = 1; else opt->nuvars = 1; while (*cp++) if (*cp == ',') nvars++; if (option == 1) { opt->lvars = (char **)malloc(nvars * sizeof(char *)); if (!opt->lvars) { fprintf(stderr, "Out of memory!\n"); exit(EXIT_FAILURE); } cpp = opt->lvars; } else { opt->uvars = (char **)malloc(nvars * sizeof(char *)); if (!opt->uvars) { fprintf(stderr, "Out of memory!\n"); exit(EXIT_FAILURE); } cpp = opt->uvars; } /* copy variable names into list */ for (cp = strtok(optarg, ","); cp != NULL; cp = strtok((char *)NULL, ",")) { *cpp = (char *)malloc(strlen(cp) + 1); if (!*cpp) { fprintf(stderr, "Out of memory!\n"); exit(EXIT_FAILURE); } strcpy(*cpp, cp); cpp++; } if (option == 1) opt->nlvars = nvars; else opt->nuvars = nvars; } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_sds.c000066400000000000000000000444361503061704500173030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdiff.h" #include "hdiff_list.h" #include "hdiff_mattbl.h" #define H4TOOLS_BUFSIZE (1024 * 1024) #define H4TOOLS_MALLOCSIZE (1024 * 1024) static uint32 diff_sds_attrs(int32 sds1_id, int32 nattrs1, int32 sds2_id, int32 nattrs2, char *sds1_name, diff_opt_t *opt); /*------------------------------------------------------------------------- * Function: diff_sds * * Purpose: diff for SDS * * Return: Number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 25, 2003 * *------------------------------------------------------------------------- */ uint32 diff_sds(int32 sd1_id, int32 sd2_id, int32 ref1, int32 ref2, diff_opt_t *opt) { int32 sds1_id = -1, /* data set identifier */ sds1_index, /* index number of the data set */ dtype1, /* SDS data type */ dimsizes1[H4_MAX_VAR_DIMS], /* dimensional size of SDS */ nattrs1, /* number of SDS attributes */ rank1, /* rank of SDS */ sds2_id = -1, /* data set identifier */ sds2_index, /* index number of the data set */ dtype2, /* SDS data type */ dimsizes2[H4_MAX_VAR_DIMS], /* dimensional size of SDS */ nattrs2, /* number of SDS attributes */ rank2, /* rank of SDS */ start[H4_MAX_VAR_DIMS], /* read start */ edges[H4_MAX_VAR_DIMS], /* read edges */ numtype, /* number type */ eltsz; /* element size */ uint32 nelms; /* number of elements */ size_t need; /* read size needed */ char sds1_name[H4_MAX_NC_NAME]; char sds2_name[H4_MAX_NC_NAME]; int dim_diff = 0; /* dimensions are different */ intn empty1_sds; intn empty2_sds; void *buf1 = NULL; void *buf2 = NULL; uint32 max_err_cnt; int i; void *fill1 = NULL; void *fill2 = NULL; uint32 nfound = 0; void *sm_buf1 = NULL; void *sm_buf2 = NULL; /*------------------------------------------------------------------------- * object 1 *------------------------------------------------------------------------- */ sds1_index = SDreftoindex(sd1_id, ref1); sds1_id = SDselect(sd1_id, sds1_index); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ if (SDgetinfo(sds1_id, sds1_name, &rank1, dimsizes1, &dtype1, &nattrs1) == FAIL) { printf("Failed to get info for SDS ref <%d>\n", ref1); goto out; } /*------------------------------------------------------------------------- * object 2 *------------------------------------------------------------------------- */ sds2_index = SDreftoindex(sd2_id, ref2); sds2_id = SDselect(sd2_id, sds2_index); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ if (SDgetinfo(sds2_id, sds2_name, &rank2, dimsizes2, &dtype2, &nattrs2) == FAIL) { printf("Failed to get info for SDS ref <%d>\n", ref2); goto out; } /* flag to compare SDSs */ if (opt->sd == 1) { /*------------------------------------------------------------------------- * check for input SDs *------------------------------------------------------------------------- */ if (opt->nlvars > 0) /* if specified vdata is selected */ { int imatch = 0, j; for (j = 0; j < opt->nlvars; j++) { if (strcmp(sds1_name, opt->lvars[j]) == 0) { imatch = 1; break; } } if (imatch == 0) { goto do_nothing; } } /*------------------------------------------------------------------------- * check for different type *------------------------------------------------------------------------- */ if (dtype1 != dtype2) { printf("Comparison not supported\n"); printf("<%s> has datatype %d, <%s> has datatype %d ", sds1_name, dtype1, sds2_name, dtype2); goto do_nothing; } /*------------------------------------------------------------------------- * check for the same rank *------------------------------------------------------------------------- */ if (rank1 != rank2) { printf("Comparison not supported\n"); printf("<%s> has rank %d, dimensions ", sds1_name, rank1); print_dims(rank1, dimsizes1); printf("\n"); printf("<%s> has rank %d, dimensions ", sds2_name, rank2); print_dims(rank2, dimsizes2); goto do_nothing; } /*------------------------------------------------------------------------- * check for different dimensions *------------------------------------------------------------------------- */ for (i = 0; i < rank1; i++) { if (dimsizes1[i] != dimsizes2[i]) dim_diff = 1; } /*------------------------------------------------------------------------- * dimensions *------------------------------------------------------------------------- */ if (dim_diff == 1) { printf("Comparison not supported\n"); printf("<%s> has rank %d, dimensions ", sds1_name, rank1); print_dims(rank1, dimsizes1); printf("\n"); printf("<%s> has rank %d, dimensions ", sds2_name, rank2); print_dims(rank2, dimsizes2); goto do_nothing; } /*------------------------------------------------------------------------- * check if the input SDSs are empty. if so , return *------------------------------------------------------------------------- */ if (SDcheckempty(sds1_id, &empty1_sds) == FAIL) { printf("Failed to check empty SDS <%s>\n", sds1_name); goto out; } if (empty1_sds == 1) { if (opt->verbose) printf("Empty SDS <%s>\n", sds1_name); goto do_nothing; } if (SDcheckempty(sds2_id, &empty2_sds) == FAIL) { printf("Failed to check empty SDS <%s>\n", sds2_name); goto out; } if (empty2_sds == 1) { if (opt->verbose) printf("Empty SDS <%s>\n", sds2_name); goto do_nothing; } /*------------------------------------------------------------------------- * get size *------------------------------------------------------------------------- */ /* compute the number of the bytes for each value. */ numtype = dtype1 & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); /*------------------------------------------------------------------------- * get fill values *------------------------------------------------------------------------- */ fill1 = (void *)malloc(eltsz); fill2 = (void *)malloc(eltsz); if (fill1 != NULL && SDgetfillvalue(sds1_id, fill1) < 0) { free(fill1); fill1 = NULL; } if (fill2 != NULL && SDgetfillvalue(sds2_id, fill2) < 0) { free(fill2); fill2 = NULL; } /*------------------------------------------------------------------------- * read *------------------------------------------------------------------------- */ nelms = 1; for (i = 0; i < rank1; i++) { nelms *= dimsizes1[i]; } need = (size_t)(nelms * eltsz); /* bytes needed */ if (need < H4TOOLS_MALLOCSIZE) { buf1 = (void *)malloc(need); buf2 = (void *)malloc(need); } /*------------------------------------------------------------------------- * read all *------------------------------------------------------------------------- */ if (buf1 != NULL && buf2 != NULL) { /* select all */ for (i = 0; i < rank1; i++) { edges[i] = dimsizes1[i]; start[i] = 0; } /* read */ if (SDreaddata(sds1_id, start, NULL, edges, buf1) == FAIL) { printf("Could not read SDS <%s>\n", sds1_name); goto out; } /* read */ if (SDreaddata(sds2_id, start, NULL, edges, buf2) == FAIL) { printf("Could not read SDS <%s>\n", sds2_name); goto out; } /*------------------------------------------------------------------------- * comparing *------------------------------------------------------------------------- */ if (opt->verbose) printf("Comparing <%s>\n", sds1_name); /* if the given max_err_cnt is set (i.e. not its default MAX_DIFF), use it, otherwise, use the total number of elements in the dataset */ max_err_cnt = (opt->max_err_cnt != MAX_DIFF) ? opt->max_err_cnt : nelms; nfound = array_diff(buf1, buf2, nelms, sds1_name, sds2_name, rank1, dimsizes1, dtype1, opt->err_limit, opt->err_rel, max_err_cnt, opt->statistics, fill1, fill2); } else /* possibly not enough memory, read/compare by hyperslabs */ { size_t p_type_nbytes = eltsz; /*size of type */ uint32 p_nelmts = nelms; /*total selected elmts */ uint32 elmtno; /*counter */ int carry; /*counter carry value */ /* stripmine info */ int32 sm_size[H4_MAX_VAR_DIMS]; /*stripmine size */ int32 sm_nbytes; /*bytes per stripmine */ /* hyperslab info */ int32 hs_offset[H4_MAX_VAR_DIMS]; /*starting offset */ int32 hs_size[H4_MAX_VAR_DIMS]; /*size this pass */ int32 hs_nelmts; /*elements in request */ /* * determine the strip mine size and allocate a buffer. The strip mine is * a hyperslab whose size is manageable. */ sm_nbytes = p_type_nbytes; for (i = rank1; i > 0; --i) { sm_size[i - 1] = MIN(dimsizes1[i - 1], H4TOOLS_BUFSIZE / sm_nbytes); sm_nbytes *= sm_size[i - 1]; assert(sm_nbytes > 0); } sm_buf1 = malloc((size_t)sm_nbytes); sm_buf2 = malloc((size_t)sm_nbytes); /* the stripmine loop */ memset(hs_offset, 0, sizeof hs_offset); for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) { /* calculate the hyperslab size */ if (rank1 > 0) { for (i = 0, hs_nelmts = 1; i < rank1; i++) { hs_size[i] = MIN(dimsizes1[i] - hs_offset[i], sm_size[i]); hs_nelmts *= hs_size[i]; } } else { hs_nelmts = 1; } /* rank */ /* read */ if (SDreaddata(sds1_id, hs_offset, NULL, hs_size, sm_buf1) == FAIL) { printf("Could not read SDS <%s>\n", sds1_name); goto out; } /* read */ if (SDreaddata(sds2_id, hs_offset, NULL, hs_size, sm_buf2) == FAIL) { printf("Could not read SDS <%s>\n", sds2_name); goto out; } /*------------------------------------------------------------------------- * comparing *------------------------------------------------------------------------- */ if (opt->verbose) printf("Comparing <%s>\n", sds1_name); /* if the given max_err_cnt is set (i.e. not its default MAX_DIFF), use it, otherwise, use the total number of elements in the dataset */ max_err_cnt = (opt->max_err_cnt != MAX_DIFF) ? opt->max_err_cnt : nelms; /* get array differences. in the case of hyperslab read, increment the number of differences found in each hyperslab and pass the position at the beginning for printing */ nfound = array_diff(sm_buf1, sm_buf2, hs_nelmts, sds1_name, sds2_name, rank1, dimsizes1, dtype1, opt->err_limit, opt->err_rel, max_err_cnt, opt->statistics, fill1, fill2); /* calculate the next hyperslab offset */ for (i = rank1, carry = 1; i > 0 && carry; --i) { hs_offset[i - 1] += hs_size[i - 1]; if (hs_offset[i - 1] == dimsizes1[i - 1]) hs_offset[i - 1] = 0; else carry = 0; } /* i */ } /* elmtno */ /* free */ free(sm_buf1); sm_buf1 = NULL; free(sm_buf2); sm_buf2 = NULL; } /* hyperslab read */ } /* flag to compare SDSs */ /* flag to compare SDSs local attributes */ if (opt->sa == 1) { nfound += diff_sds_attrs(sds1_id, nattrs1, sds2_id, nattrs2, sds1_name, opt); } /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ do_nothing: SDendaccess(sds1_id); SDendaccess(sds2_id); free(buf1); free(buf2); free(fill1); free(fill2); return nfound; out: opt->err_stat = 1; if (sds1_id != -1) SDendaccess(sds1_id); if (sds2_id != -1) SDendaccess(sds2_id); free(buf1); free(buf2); free(fill1); free(fill2); return 0; } /*------------------------------------------------------------------------- * Function: diff_sds_attrs * * Purpose: compare SDS attributes * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: September 2, 2003 * *------------------------------------------------------------------------- */ static uint32 diff_sds_attrs(int32 sds1_id, int32 nattrs1, int32 sds2_id, int32 nattrs2, char *sds1_name, diff_opt_t *opt) { int32 dtype1, /* SDS data type */ nelms1, /* number of elements */ dtype2, /* SDS data type */ nelms2; /* number of elements */ char attr1_name[H4_MAX_NC_NAME]; char attr2_name[H4_MAX_NC_NAME]; void *attr1_buf = NULL; void *attr2_buf = NULL; int i, cmp; uint32 nfound = 0; if (nattrs1 != nattrs2) { printf("Different number of attributes\n"); return 0; } /* loop through attributes */ for (i = 0; i < nattrs1; i++) { if (SDattrinfo(sds1_id, i, attr1_name, &dtype1, &nelms1) == FAIL) { printf("Cannot get info for attribute number %d\n", i); goto out; } if (SDattrinfo(sds2_id, i, attr2_name, &dtype2, &nelms2) == FAIL) { printf("Cannot get info for attribute number %d\n", i); goto out; } if (dtype1 != dtype2 || nelms1 != nelms2 || (strcmp(attr1_name, attr2_name) != 0)) { printf("Different information for attribute <%d>\n", i); continue; } attr1_buf = (void *)malloc((unsigned)nelms1 * DFKNTsize(dtype1 | DFNT_NATIVE)); if (!attr1_buf) { printf("Out of memory!"); goto out; ; } attr2_buf = (void *)malloc((unsigned)nelms2 * DFKNTsize(dtype2 | DFNT_NATIVE)); if (!attr2_buf) { printf("Out of memory!"); goto out; } if (SDreadattr(sds1_id, i, attr1_buf) == FAIL) { printf("Could not read attribute number %d\n", i); goto out; } if (SDreadattr(sds2_id, i, attr2_buf) == FAIL) { printf("Could not read attribute number %d\n", i); goto out; } cmp = memcmp(attr1_buf, attr2_buf, nelms1 * DFKNTsize(dtype1 | DFNT_NATIVE)); if (cmp != 0) { printf("\n---------------------------\n"); printf("%s:%s = \n", sds1_name, attr1_name); printf("<<<<\n"); pr_att_vals((nc_type)dtype1, nelms1, attr1_buf); printf(" ;\n"); printf(">>>>\n"); pr_att_vals((nc_type)dtype2, nelms2, attr2_buf); printf(" ;\n"); nfound++; } free(attr1_buf); free(attr2_buf); } return nfound; out: free(attr1_buf); free(attr2_buf); opt->err_stat = 1; return 0; } /*------------------------------------------------------------------------- * Function: print_dims * * Purpose: print dimensions * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: May 9, 2003 * * Comments: * *------------------------------------------------------------------------- */ void print_dims(int r, int32 *d) { int i; printf("[ "); for (i = 0; i < r; i++) printf("%d ", (int)d[i]); printf("] "); } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_table.c000066400000000000000000000106361503061704500175740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdiff_table.h" /*------------------------------------------------------------------------- * Function: dtable_search * * Purpose: search the table for tag and ref * * Return: index on success, -1 on failure * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ int dtable_search(dtable_t *table, int32 tag, int32 ref) { uint32 i; for (i = 0; i < table->nobjs; i++) if (table->objs[i].tag == tag && table->objs[i].ref == ref) return i; return -1; } /*------------------------------------------------------------------------- * Function: dtable_add * * Purpose: add pair tag/ref and object path to table * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void dtable_add(dtable_t *table, int32 tag, int32 ref, char *path) { uint32 i; if (table->nobjs == table->size) { table->size *= 2; table->objs = (dobj_info_t *)realloc(table->objs, table->size * sizeof(dobj_info_t)); for (i = table->nobjs; i < table->size; i++) { table->objs[i].tag = table->objs[i].ref = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } } i = table->nobjs++; table->objs[i].tag = tag; table->objs[i].ref = ref; strcpy(table->objs[i].obj_name, path); table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } /*------------------------------------------------------------------------- * Function: dtable_init * * Purpose: initialize table * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void dtable_init(dtable_t **tbl) { uint32 i; dtable_t *table = (dtable_t *)malloc(sizeof(dtable_t)); table->size = 20; table->nobjs = 0; table->objs = (dobj_info_t *)malloc(table->size * sizeof(dobj_info_t)); for (i = 0; i < table->size; i++) { table->objs[i].tag = table->objs[i].ref = -1; table->objs[i].flags[0] = table->objs[i].flags[1] = -1; } *tbl = table; } /*------------------------------------------------------------------------- * Function: dtable_free * * Purpose: free table memory * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void dtable_free(dtable_t *table) { free(table->objs); free(table); } /*------------------------------------------------------------------------- * Function: dtable_print * * Purpose: print object list * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 25, 2003 * *------------------------------------------------------------------------- */ void dtable_print(dtable_t *table, char *header) { uint32 i; if (!table->nobjs) /* nothing to do */ return; printf("---------------------------------------\n"); printf("%s %5s %6s %-15s\n", header, "Tag", "Ref", "Name"); printf("---------------------------------------\n"); for (i = 0; i < table->nobjs; i++) { printf(" %5d %6d %-15s\n", table->objs[i].tag, table->objs[i].ref, table->objs[i].obj_name); } } hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_table.h000066400000000000000000000036141503061704500175770ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HDIFF_TABLE_H #define HDIFF_TABLE_H #include "hdf.h" #include "mfhdf.h" #ifdef __cplusplus extern "C" { #endif /*struct to store the tag/ref and path of an object the pair tag/ref uniquely identifies an HDF object */ typedef struct dobj_info_t { int32 tag; int32 ref; char obj_name[H4_MAX_NC_NAME]; int flags[2]; /*flags that store matching object information between the 2 files object exists in file = 1 does not exist = 0 */ } dobj_info_t; /*struct that stores all objects */ typedef struct dtable_t { uint32 size; uint32 nobjs; dobj_info_t *objs; } dtable_t; /* table methods */ void dtable_init(dtable_t **table); void dtable_free(dtable_t *table); int dtable_search(dtable_t *table, int32 tag, int32 ref); void dtable_add(dtable_t *table, int32 tag, int32 ref, char *obj_name); void dtable_print(dtable_t *table, char *header); #ifdef __cplusplus } #endif #endif /* HDIFF_TABLE_H */ hdf4-hdf4.3.1/mfhdf/hdiff/hdiff_vs.c000066400000000000000000000311631503061704500171330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdiff.h" #include "hdiff_list.h" #include "hdiff_mattbl.h" #include "vg_priv.h" static void fmt_print(uint8 *x, int32 type); static uint32 vdata_cmp(int32 vs1, int32 vs2, char *gname, char *cname, diff_opt_t *opt); /*------------------------------------------------------------------------- * Function: diff_vs * * Purpose: diff for VS * * Return: Number of differences found * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 26, 2003 * *------------------------------------------------------------------------- */ uint32 diff_vs(int32 file1_id, int32 file2_id, int32 ref1, int32 ref2, diff_opt_t *opt) { int32 vdata1_id, /* vdata identifier */ n_records1, /* number of records */ vdata1_size, interlace1_mode, vdata2_id = -1, /* vdata identifier */ n_records2, /* number of records */ vdata2_size, interlace2_mode; char vdata1_name[VSNAMELENMAX]; char vdata1_class[VSNAMELENMAX]; char *fieldname1_list = NULL; char vdata2_name[VSNAMELENMAX]; char vdata2_class[VSNAMELENMAX]; char *fieldname2_list = NULL; uint32 nfound = 0; if (NULL == (fieldname1_list = (char *)calloc(VSFIELDMAX * FIELDNAMELENMAX, sizeof(char)))) { printf("Error: Could not allocate memory\n"); goto out; } if (NULL == (fieldname2_list = (char *)calloc(VSFIELDMAX * FIELDNAMELENMAX, sizeof(char)))) { printf("Error: Could not allocate memory\n"); goto out; } /*------------------------------------------------------------------------- * object 1 *------------------------------------------------------------------------- */ if (Vstart(file1_id) == FAIL) { printf("Error: Could not start VS interface in VS ref %d\n", ref1); goto out; } if ((vdata1_id = VSattach(file1_id, ref1, "r")) == FAIL) { printf("Failed to attach VS ref %d\n", ref1); goto out; } if (VSgetname(vdata1_id, vdata1_name) == FAIL) { printf("Failed to name for VS ref %d\n", ref1); goto out; } if (VSgetclass(vdata1_id, vdata1_class) == FAIL) { printf("Failed to name for VS ref %d\n", ref1); goto out; } if (VSinquire(vdata1_id, &n_records1, &interlace1_mode, fieldname1_list, &vdata1_size, vdata1_name) == FAIL) { printf("Failed to get info for VS ref %d\n", ref1); goto out; } if (VFnfields(vdata1_id) == FAIL) { printf("Failed getting fields forVS ref %d\n", ref1); goto out; } /*------------------------------------------------------------------------- * object 2 *------------------------------------------------------------------------- */ if (Vstart(file2_id) == FAIL) { printf("Error: Could not start VS interface in VS ref %d\n", ref1); goto out; } if ((vdata2_id = VSattach(file2_id, ref2, "r")) == FAIL) { printf("Failed to attach VS ref %d\n", ref2); goto out; } if (VSgetname(vdata2_id, vdata2_name) == FAIL) { printf("Failed to name for VS ref %d\n", ref2); goto out; } if (VSgetclass(vdata2_id, vdata2_class) == FAIL) { printf("Failed to name for VS ref %d\n", ref2); goto out; } if (VSinquire(vdata2_id, &n_records2, &interlace2_mode, fieldname2_list, &vdata2_size, vdata2_name) == FAIL) { printf("Failed to get info for VS ref %d\n", ref2); goto out; } if (VFnfields(vdata2_id) == FAIL) { printf("Failed getting fields forVS ref %d\n", ref2); goto out; } /*------------------------------------------------------------------------- * check for input VSs *------------------------------------------------------------------------- */ if (opt->nuvars > 0) /* if specified vdata is selected */ { int imatch = 0, j; for (j = 0; j < opt->nuvars; j++) { if (strcmp(vdata1_name, opt->uvars[j]) == 0) { imatch = 1; break; } } if (imatch == 0) { goto do_nothing; } } /*------------------------------------------------------------------------- * Comparing *------------------------------------------------------------------------- */ if (opt->verbose) printf("Comparing <%s>\n", vdata1_name); nfound = vdata_cmp(vdata1_id, vdata2_id, vdata1_name, vdata1_class, opt); do_nothing: /* terminate access to the VSs */ if (VSdetach(vdata1_id) == FAIL) { printf("Failed to detach VS ref %d\n", ref1); goto out; } if (vdata2_id != -1) { if (VSdetach(vdata2_id) == FAIL) { printf("Failed to detach VS ref %d\n", ref2); goto out; } } free(fieldname1_list); free(fieldname2_list); return nfound; out: free(fieldname1_list); free(fieldname2_list); opt->err_stat = 1; return 0; } /*------------------------------------------------------------------------- * Function: vdata_cmp * * Purpose: compare vdata * *------------------------------------------------------------------------- */ static uint32 vdata_cmp(int32 vs1, int32 vs2, char *gname, char *cname, diff_opt_t *opt) { int32 i, j, k, iflag; uint32 err_cnt; int32 nv1, interlace1, vsize1; int32 vsotag1; char vsclass1[VSNAMELENMAX], vsname1[VSNAMELENMAX]; int32 nv2, interlace2, vsize2; int32 vsotag2; char vsclass2[VSNAMELENMAX], vsname2[VSNAMELENMAX]; uint8 *b1, *b2; int32 off1[60], off2[60]; DYN_VWRITELIST *w1, *w2; uint32 nfound = 0; uint32 max_err_cnt = opt->max_err_cnt; uint8 *buf1 = NULL; uint8 *buf2 = NULL; char *fields1 = NULL; char *fields2 = NULL; fields1 = (char *)calloc((VSFIELDMAX * FIELDNAMELENMAX), sizeof(char)); fields2 = (char *)calloc((VSFIELDMAX * FIELDNAMELENMAX), sizeof(char)); if (fields1 == NULL || fields2 == NULL) { printf("Out of memory!"); opt->err_stat = 1; goto out; } VSinquire(vs1, &nv1, &interlace1, fields1, &vsize1, vsname1); VSinquire(vs2, &nv2, &interlace2, fields2, &vsize2, vsname2); vsotag1 = VSQuerytag(vs1); VSgetclass(vs1, vsclass1); vsotag2 = VSQuerytag(vs2); VSgetclass(vs2, vsclass2); if (vsotag1 != vsotag2 || nv1 != nv2 || interlace1 != interlace2 || strcmp(fields1, fields2) != 0 || strcmp(vsclass1, vsclass2) != 0 || (strcmp(vsclass1, "Attr0.0") != 0 && vsize1 != vsize2)) { printf("\n---------------------------\n"); printf("Vdata Name: %s <%s/%s> (Different attributes)\n", vsname1, gname, cname); printf("> <%d> nrec=%d interlace=%d fld=[%s] vsize=%d class={%s})\n", vsotag1, nv1, interlace1, fields1, vsize1, vsclass1); printf("< <%d> nrec=%d interlace=%d fld=[%s] vsize=%d class={%s})\n", vsotag2, nv2, interlace2, fields2, vsize2, vsclass2); goto out; } /* compare the data */ buf1 = (uint8 *)malloc((unsigned)(nv1 * vsize1)); buf2 = (uint8 *)malloc((unsigned)(nv2 * vsize2)); if (buf1 == NULL || buf2 == NULL) { printf("Out of memory!"); opt->err_stat = 1; goto out; } VSsetfields(vs1, fields1); VSread(vs1, buf1, nv1, interlace1); w1 = (DYN_VWRITELIST *)vswritelist(vs1); VSsetfields(vs2, fields2); VSread(vs2, buf2, nv2, interlace2); w2 = (DYN_VWRITELIST *)vswritelist(vs2); b1 = buf1; b2 = buf2; for (j = 0; j < w1->n; j++) off1[j] = DFKNTsize(w1->type[j] | DFNT_NATIVE); for (j = 0; j < w2->n; j++) off2[j] = DFKNTsize(w2->type[j] | DFNT_NATIVE); iflag = 0; err_cnt = 0; if (vsize1 == vsize2) { for (i = 0; i < nv1; i++) { if (memcmp(b1, b2, (size_t)vsize1) == 0) { b1 += vsize1; b2 += vsize2; continue; } if (iflag == 0) { iflag = 1; /* there is a difference */ printf("\n---------------------------\n"); printf("Vdata Name: %s (Data record comparison)\n", vsname1); nfound++; } printf("> %d: ", i); for (j = 0; j < w1->n; j++) { for (k = 0; k < w1->order[j]; k++) { fmt_print(b1, w1->type[j]); b1 += off1[j]; if (w1->type[j] != DFNT_CHAR) putchar(' '); } } putchar('\n'); printf("< %d: ", i); for (j = 0; j < w2->n; j++) { for (k = 0; k < w2->order[j]; k++) { fmt_print(b2, w2->type[j]); b2 += off2[j]; if (w2->type[j] != DFNT_CHAR) putchar(' '); } } putchar('\n'); if (max_err_cnt > 0) { err_cnt++; if (err_cnt >= max_err_cnt) break; } } } else { printf("****....\n"); for (i = 0; i < nv1; i++) { if (iflag == 0) { iflag = 1; /* there is a difference */ printf("\n---------------------------\n"); printf("Vdata Name: %s (Data record comparison)\n", vsname1); nfound++; } printf("> %d: ", i); for (j = 0; j < w1->n; j++) { for (k = 0; k < w1->order[j]; k++) { fmt_print(b1, w1->type[j]); b1 += off1[j]; if (w1->type[j] != DFNT_CHAR) putchar(' '); } } putchar('\n'); printf("< %d: ", i); for (j = 0; j < w2->n; j++) { for (k = 0; k < w2->order[j]; k++) { fmt_print(b2, w2->type[j]); b1 += off2[j]; if (w2->type[j] != DFNT_CHAR) putchar(' '); } } putchar('\n'); if (max_err_cnt > 0) { err_cnt++; if (err_cnt >= max_err_cnt) break; } } } out: free(buf1); free(buf2); free(fields1); free(fields2); return nfound; } /*------------------------------------------------------------------------- * Function: fmt_print * * Purpose: print HDF types * *------------------------------------------------------------------------- */ void fmt_print(uint8 *x, int32 type) { int16 s = 0; int32 l = 0; float32 f = 0; float64 d = 0; switch (type) { case DFNT_CHAR: putchar(*x); break; case DFNT_UINT8: case DFNT_INT8: printf("%02x ", *x); break; case DFNT_UINT16: case DFNT_INT16: memcpy(&s, x, sizeof(int16)); printf("%d", s); break; case DFNT_UINT32: memcpy(&l, x, sizeof(int32)); printf("%u", l); break; case DFNT_INT32: memcpy(&l, x, sizeof(int32)); printf("%d", l); break; case DFNT_FLOAT32: memcpy(&f, x, sizeof(float32)); printf("%f", (double)f); break; case DFNT_FLOAT64: memcpy(&d, x, sizeof(float64)); printf("%f", d); break; default: fprintf(stderr, "sorry, type [%d] not supported\n", type); break; } } hdf4-hdf4.3.1/mfhdf/hdiff/hdifftst.c000066400000000000000000000513371503061704500171630ustar00rootroot00000000000000#include #include "mfhdf.h" #define FILE1_NAME "hdifftst1.hdf" #define FILE2_NAME "hdifftst2.hdf" /* big file for hyperslab I/O */ #define FILE3_NAME "hdifftst3.hdf" #define FILE4_NAME "hdifftst4.hdf" /* lones */ #define FILE5_NAME "hdifftst5.hdf" #define FILE6_NAME "hdifftst6.hdf" /* groups */ #define FILE7_NAME "hdifftst7.hdf" #define X_LENGTH 2 #define Y_LENGTH 3 #define RANK 2 #define FILE_ATTR_NAME "File_contents" #define SDS_ATTR_NAME "Valid_range" #define CLASS1_NAME "5x1 Array" #define CLASS2_NAME "6x4 Array" #define VDATA1_NAME "vdata1" #define VDATA2_NAME "vdata2" #define FIELD1_NAME "Single-component Field" #define FIELD2_NAME "Multi-component Field" #define N_RECORDS_1 5 /* number of records the first vdata contains */ #define N_RECORDS_2 2 /* number of records the second vdata contains */ #define ORDER_2 4 /* order of the field in the second vdata */ #define CLASS3_NAME "Particle Data" #define VDATA3_NAME "vdata3" #define FIELD3_NAME1 "Position" #define FIELD3_NAME2 "Mass" #define FIELD3_NAME3 "Temperature" #define FIELDNAME3_LIST "Position,Mass,Temperature" /* No spaces b/w names */ #define ORDER3_1 3 /* order of first field */ #define ORDER3_2 1 /* order of second field */ #define ORDER3_3 2 /* order of third field */ #define N_VALS_PER_REC (ORDER3_1 + ORDER3_2 + ORDER3_3) /* number of values per record */ /*------------------------------------------------------------------------- * local prototypes *------------------------------------------------------------------------- */ static int do_big_file(void); static int do_groups(void); /*------------------------------------------------------------------------- * main *------------------------------------------------------------------------- */ int main(void) { int32 sd1_id; /* SD interface identifier */ int32 sd2_id; /* SD interface identifier */ int32 sds1_id; /* SDS identifier */ int32 sds2_id; /* SDS identifier */ int32 dim_sizes[2]; /* sizes of the SDS dimensions */ int32 start[2]; /* start location to write */ int32 edges[2]; /* number of elements to write */ int32 n_values; int32 buf1a[Y_LENGTH][X_LENGTH] = {{1, 1}, {1, 1}, {5, 6}}; int32 buf1b[Y_LENGTH][X_LENGTH] = {{1, 2}, {3, 4}, {5, 6}}; /* percent test: compare divide by zero, both zero */ int32 buf2a[Y_LENGTH][X_LENGTH] = {{100, 100}, {100, 0}, {0, 100}}; int32 buf2b[Y_LENGTH][X_LENGTH] = {{120, 80}, {0, 100}, {0, 50}}; /* global attributes */ char8 bufga1[] = "Storm_track_data1"; char8 bufga2[] = "Storm_track_data2"; float32 bufa1[2] = {1., 1.}; float32 bufa2[2] = {1., 2.}; /*vdata*/ int32 file1_id; int32 file2_id; int32 vdata1_id; int32 vdata2_id; char8 vdata1_buf1[N_RECORDS_1] = {'V', 'D', 'A', 'T', 'A'}; char8 vdata1_buf2[N_RECORDS_1] = {'X', 'D', 'A', 'T', 'A'}; int32 vdata2_buf1[N_RECORDS_2][ORDER_2] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; int32 vdata2_buf2[N_RECORDS_2][ORDER_2] = {{1, 1, 1, 1}, {5, 6, 7, 8}}; float32 vdata3_buf1[N_RECORDS_2][N_VALS_PER_REC] = {{1, 2, 3, 4, 5, 6}, {7, 8, 9, 10, 11, 12}}; float32 vdata3_buf2[N_RECORDS_2][N_VALS_PER_REC] = {{1, 1, 1, 1, 1, 1}, {7, 8, 9, 10, 11, 12}}; /* Define the location and size of the data to be written to the data set*/ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Define the dimensions of the array to be created */ dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /*------------------------------------------------------------------------- * SD data *------------------------------------------------------------------------- */ /* Create the files and initialize the SD interface */ if ((sd1_id = SDstart(FILE1_NAME, DFACC_CREATE)) == FAIL) goto error; if ((sd2_id = SDstart(FILE2_NAME, DFACC_CREATE)) == FAIL) goto error; /* Set a global attribute */ n_values = sizeof(bufga1); if (SDsetattr(sd1_id, FILE_ATTR_NAME, DFNT_CHAR8, n_values, (void *)bufga1) == FAIL) goto error; if (SDsetattr(sd2_id, FILE_ATTR_NAME, DFNT_CHAR8, n_values, (void *)bufga2) == FAIL) goto error; /* Create the data sets */ if ((sds1_id = SDcreate(sd1_id, "dset1", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; if ((sds2_id = SDcreate(sd2_id, "dset1", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; /* Assign attribute */ n_values = 2; if (SDsetattr(sds1_id, SDS_ATTR_NAME, DFNT_FLOAT32, n_values, (void *)bufa1) == FAIL) goto error; if (SDsetattr(sds2_id, SDS_ATTR_NAME, DFNT_FLOAT32, n_values, (void *)bufa2) == FAIL) goto error; /* Write the stored data to the data set */ if (SDwritedata(sds1_id, start, NULL, edges, (void *)buf1a) == FAIL) goto error; if (SDwritedata(sds2_id, start, NULL, edges, (void *)buf1b) == FAIL) goto error; /* Terminate access to the data set */ if (SDendaccess(sds1_id) == FAIL) goto error; if (SDendaccess(sds2_id) == FAIL) goto error; /* Create another data set */ if ((sds1_id = SDcreate(sd1_id, "dset2", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; if ((sds2_id = SDcreate(sd2_id, "dset2", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; if (SDwritedata(sds1_id, start, NULL, edges, (void *)buf1a) == FAIL) goto error; if (SDwritedata(sds2_id, start, NULL, edges, (void *)buf1b) == FAIL) goto error; if (SDendaccess(sds1_id) == FAIL) goto error; if (SDendaccess(sds2_id) == FAIL) goto error; /* data sets for -p test */ if ((sds1_id = SDcreate(sd1_id, "dset3", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; if ((sds2_id = SDcreate(sd2_id, "dset3", DFNT_INT32, RANK, dim_sizes)) == FAIL) goto error; if (SDwritedata(sds1_id, start, NULL, edges, (void *)buf2a) == FAIL) goto error; if (SDwritedata(sds2_id, start, NULL, edges, (void *)buf2b) == FAIL) goto error; if (SDendaccess(sds1_id) == FAIL) goto error; if (SDendaccess(sds2_id) == FAIL) goto error; /*------------------------------------------------------------------------- * end SD *------------------------------------------------------------------------- */ /* Terminate access to the SD interface and close the file */ if (SDend(sd1_id) == FAIL) goto error; if (SDend(sd2_id) == FAIL) goto error; /*------------------------------------------------------------------------- * VD data *------------------------------------------------------------------------- */ /* Open the HDF file for writing */ if ((file1_id = Hopen(FILE1_NAME, DFACC_WRITE, 0)) == FAIL) goto error; if ((file2_id = Hopen(FILE2_NAME, DFACC_WRITE, 0)) == FAIL) goto error; /* Initialize the VS interface */ if (Vstart(file1_id) == FAIL) goto error; if (Vstart(file2_id) == FAIL) goto error; /*------------------------------------------------------------------------- * VD data one field *------------------------------------------------------------------------- */ /* Create the first vdata and populate it with data from vdata1_buf */ if (VHstoredata(file1_id, FIELD1_NAME, (uint8 *)vdata1_buf1, N_RECORDS_1, DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME) == FAIL) goto error; if (VHstoredata(file2_id, FIELD1_NAME, (uint8 *)vdata1_buf2, N_RECORDS_1, DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME) == FAIL) goto error; /*------------------------------------------------------------------------- * VD data one field, order 4 *------------------------------------------------------------------------- */ /* Create the second vdata and populate it with data from vdata2_buf */ if (VHstoredatam(file1_id, FIELD2_NAME, (uint8 *)vdata2_buf1, N_RECORDS_2, DFNT_INT32, VDATA2_NAME, CLASS2_NAME, ORDER_2) == FAIL) goto error; if (VHstoredatam(file2_id, FIELD2_NAME, (uint8 *)vdata2_buf2, N_RECORDS_2, DFNT_INT32, VDATA2_NAME, CLASS2_NAME, ORDER_2) == FAIL) goto error; /*------------------------------------------------------------------------- * VD data several fields *------------------------------------------------------------------------- */ /* Create a new vdata */ if ((vdata1_id = VSattach(file1_id, -1, "w")) == FAIL) goto error; if ((vdata2_id = VSattach(file2_id, -1, "w")) == FAIL) goto error; /* Set name and class name of the vdata */ if (VSsetname(vdata1_id, VDATA3_NAME) == FAIL) goto error; if (VSsetclass(vdata1_id, CLASS3_NAME) == FAIL) goto error; if (VSsetname(vdata2_id, VDATA3_NAME) == FAIL) goto error; if (VSsetclass(vdata2_id, CLASS3_NAME) == FAIL) goto error; /* Define fields */ if (VSfdefine(vdata1_id, FIELD3_NAME1, DFNT_FLOAT32, ORDER3_1) == FAIL) goto error; if (VSfdefine(vdata1_id, FIELD3_NAME2, DFNT_FLOAT32, ORDER3_2) == FAIL) goto error; if (VSfdefine(vdata1_id, FIELD3_NAME3, DFNT_FLOAT32, ORDER3_3) == FAIL) goto error; if (VSsetfields(vdata1_id, FIELDNAME3_LIST) == FAIL) goto error; if (VSfdefine(vdata2_id, FIELD3_NAME1, DFNT_FLOAT32, ORDER3_1) == FAIL) goto error; if (VSfdefine(vdata2_id, FIELD3_NAME2, DFNT_FLOAT32, ORDER3_2) == FAIL) goto error; if (VSfdefine(vdata2_id, FIELD3_NAME3, DFNT_FLOAT32, ORDER3_3) == FAIL) goto error; if (VSsetfields(vdata2_id, FIELDNAME3_LIST) == FAIL) goto error; /* Write the data with full interlacing mode */ if (VSwrite(vdata1_id, (uint8 *)vdata3_buf1, N_RECORDS_2, FULL_INTERLACE) == FAIL) goto error; if (VSwrite(vdata2_id, (uint8 *)vdata3_buf2, N_RECORDS_2, FULL_INTERLACE) == FAIL) goto error; if (VSdetach(vdata1_id) == FAIL) goto error; if (VSdetach(vdata2_id) == FAIL) goto error; /*------------------------------------------------------------------------- * end VD data *------------------------------------------------------------------------- */ /* Terminate access to the VS interface and close the HDF file */ if (Vend(file1_id) == FAIL) goto error; if (Vend(file2_id) == FAIL) goto error; if (Hclose(file1_id) == FAIL) goto error; if (Hclose(file2_id) == FAIL) goto error; /*------------------------------------------------------------------------- * write 2 big files for hyperslab reading *------------------------------------------------------------------------- */ if (do_big_file() == FAIL) goto error; /*------------------------------------------------------------------------- * groups *------------------------------------------------------------------------- */ if (do_groups() == FAIL) goto error; return 0; error: printf("Error...Exiting...\n"); return 1; } #define DIM0 10 #define DIM1 10 #define ADD_ROWS (1024 * 1024 - 10) / 10 /*------------------------------------------------------------------------- * write 2 big files for hyperslab reading *------------------------------------------------------------------------- */ static int do_big_file(void) { int32 sd1_id; /* SD interface identifier */ int32 sd2_id; /* SD interface identifier */ int32 sds1_id; /* SDS identifier */ int32 sds2_id; /* SDS identifier */ int32 dims[2]; /* sizes of the SDS dimensions */ int32 start[2]; /* start location to write */ int32 edges[2]; /* number of elements to write */ int32 sds1_idx; int32 sds2_idx; int32 rank; uint8 array_data[DIM0][DIM1]; uint8 append_data1[DIM1]; uint8 append_data2[DIM1]; intn i, j, n; /* Create 2 files and initiate the SD interface. */ if ((sd1_id = SDstart(FILE3_NAME, DFACC_CREATE)) == FAIL) goto error; if ((sd2_id = SDstart(FILE4_NAME, DFACC_CREATE)) == FAIL) goto error; /* Define the rank and dimensions of the data set to be created. */ rank = 2; dims[0] = SD_UNLIMITED; dims[1] = DIM1; /* Create 2 data sets */ if ((sds1_id = SDcreate(sd1_id, "data1", DFNT_UINT8, rank, dims)) == FAIL) goto error; if ((sds2_id = SDcreate(sd2_id, "data1", DFNT_UINT8, rank, dims)) == FAIL) goto error; /* initial values */ for (j = 0; j < DIM0; j++) { for (i = 0; i < DIM1; i++) array_data[j][i] = (i + j) + 1; } /* define the location, pattern, and size of the data set */ for (i = 0; i < rank; i++) { start[i] = 0; } edges[0] = DIM0; /* 10 */ edges[1] = DIM1; /* 5 */ if (SDwritedata(sds1_id, start, NULL, edges, (void *)array_data) == FAIL) goto error; if (SDwritedata(sds2_id, start, NULL, edges, (void *)array_data) == FAIL) goto error; /* terminate access to the datasets and SD interface */ if (SDendaccess(sds1_id) == FAIL) goto error; if (SDendaccess(sds2_id) == FAIL) goto error; if (SDend(sd1_id) == FAIL) goto error; if (SDend(sd2_id) == FAIL) goto error; /* append data */ if ((sd1_id = SDstart(FILE3_NAME, DFACC_WRITE)) == FAIL) goto error; if ((sd2_id = SDstart(FILE4_NAME, DFACC_WRITE)) == FAIL) goto error; if ((sds1_idx = SDnametoindex(sd1_id, "data1")) == FAIL) goto error; if ((sds2_idx = SDnametoindex(sd2_id, "data1")) == FAIL) goto error; if ((sds1_id = SDselect(sd1_id, sds1_idx)) == FAIL) goto error; if ((sds2_id = SDselect(sd2_id, sds2_idx)) == FAIL) goto error; /* define the location of the append */ for (n = 0; n < ADD_ROWS; n++) { start[0] = DIM0 + n; /* 10 */ start[1] = 0; edges[0] = 1; /* 1 row at a time */ edges[1] = DIM1; /* 5 elements */ /* store array values to be appended */ for (i = 0; i < DIM1; i++) append_data1[i] = i + 1; for (i = 0; i < DIM1; i++) append_data2[i] = i + 1; if (n == 20 || n == ADD_ROWS / 2 || n == ADD_ROWS - 10) { /* change a few values at 3 places evenly divided */ for (i = 0; i < DIM1; i++) append_data2[i] = 100; /* append data to file */ if (SDwritedata(sds1_id, start, NULL, edges, (void *)append_data1) == FAIL) goto error; if (SDwritedata(sds2_id, start, NULL, edges, (void *)append_data2) == FAIL) goto error; } } /* terminate access */ if (SDendaccess(sds1_id) == FAIL) goto error; if (SDendaccess(sds2_id) == FAIL) goto error; if (SDend(sd1_id) == FAIL) goto error; if (SDend(sd2_id) == FAIL) goto error; return SUCCEED; error: printf("Error...Exiting...\n"); return FAIL; } #define FILE_LABEL_TXT "created with HDF 4.2 Release 1" /*------------------------------------------------------------------------- * do_lone *------------------------------------------------------------------------- */ int do_lone(char *file_name, int do_diffs) { char sds_name[] = "lone"; int32 rank = 1; int32 dim_sds[1] = {5}; /* dimension of the data set */ int32 data[5] = {1, 2, 3, 4, 5}; int32 start[1]; /* start position to write for each dimension */ int32 edges[1]; /* number of elements to be written along each dimension */ int32 sds_id; int32 dim_id; int32 sd_id; if (do_diffs) { data[1] = data[2] = 0; } sd_id = SDstart(file_name, DFACC_CREATE); /* create the SDS */ if ((sds_id = SDcreate(sd_id, sds_name, DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%s>\n", sds_name); goto fail; } dim_id = SDgetdimid(sds_id, 0); SDsetdimname(dim_id, sds_name); /* define the location and size of the data to be written to the data set */ start[0] = 0; edges[0] = 5; /* write the stored data to the data set */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) { printf("Failed to set write for SDS <%s>\n", sds_name); goto fail; } SDendaccess(sds_id); /* create the SDS */ if ((sds_id = SDcreate(sd_id, "sds", DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%d>\n", sds_id); goto fail; } if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) { printf("Failed to set write for SDS <%s>\n", sds_name); goto fail; } SDendaccess(sds_id); SDend(sd_id); { int32 file1_id; /* HDF file identifier */ int32 an_id; /* AN interface identifier */ int32 file_label_id; /* file label identifier */ /* open file */ if ((file1_id = Hopen(file_name, DFACC_WRITE, (int16)0)) < 0) { printf("Error: Could not open file <%s>\n", file_name); return FAIL; } /* Initialize the AN interface */ an_id = ANstart(file1_id); /* Create the file label */ file_label_id = ANcreatef(an_id, AN_FILE_LABEL); /* Write the annotations to the file label */ if (ANwriteann(file_label_id, FILE_LABEL_TXT, strlen(FILE_LABEL_TXT)) == FAIL) { printf("Could not write AN\n"); return FAIL; } /* Terminate access to annotation */ if (ANendaccess(file_label_id) == FAIL) { printf("Could not end AN\n"); return FAIL; } /* Terminate access to the AN interface */ if (ANend(an_id) == FAIL) { printf("Could not end AN\n"); return FAIL; } /* close the HDF file */ if (Hclose(file1_id) == FAIL) { printf("Could not close file\n"); return FAIL; } } return SUCCEED; fail: SDend(sd_id); return FAIL; } /*------------------------------------------------------------------------- * write groups * a circular reference * * g0 -----> g1 * | | ^ * | | | * | \/ | * |-----> g1.1 * *------------------------------------------------------------------------- */ static int do_groups(void) { int32 vg0_id, /* vgroup identifier */ vg1_id, /* vgroup identifier */ vg2_id, /* vgroup identifier */ file1_id; /* HDF file identifier */ /* create a HDF file */ if ((file1_id = Hopen(FILE7_NAME, DFACC_CREATE, (int16)0)) < 0) { printf("Error: Could not create file <%s>\n", FILE7_NAME); return FAIL; } /* initialize the V interface */ if (Vstart(file1_id) == FAIL) { printf("Could not start VG\n"); return FAIL; } /* create a vgroup */ vg0_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg0_id, "g0") == FAIL) { printf("Could not name group\n"); goto out; } /* create the second vgroup */ vg1_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg1_id, "g1") == FAIL) { printf("Could not name group\n"); goto out; } /* create the third vgroup */ vg2_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg2_id, "g1.1") == FAIL) { printf("Could not name group\n"); goto out; } if (Vinsert(vg0_id, vg1_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg0_id, vg2_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg1_id, vg2_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg2_id, vg1_id) == FAIL) { printf("Could not insert VG\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg0_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg1_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg2_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the V interface */ if (Vend(file1_id) == FAIL) { printf("Could not end VG\n"); goto out; } /* close the HDF file */ if (Hclose(file1_id) == FAIL) { printf("Could not close file\n"); return FAIL; } return SUCCEED; out: printf("Error...Exiting...\n"); return FAIL; } hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/000077500000000000000000000000001503061704500171755ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_01.txt000066400000000000000000000022071503061704500213170ustar00rootroot00000000000000hdiff [-V] [-b] [-g] [-s] [-d] [-D] [-S] [-v var1[,...]] [-u var1[,...]] [-e count] [-t limit] [-p relative] file1 file2 [-V] Display version of the HDF4 library and exit [-b] Verbose mode [-g] Compare global attributes only [-s] Compare SD local attributes only [-d] Compare SD data only [-D] Compare Vdata data only [-S] Print statistics [-v var1[,...]] Compare SD data on variable(s) ,... only [-u var1[,...]] Compare vdata on variable(s) ,... only [-e count] Print difference up to count number for each variable [-t limit] Print difference when it is greater than limit [-p relative] Print difference when it is greater than a relative limit file1 File name of the first HDF file file2 File name of the second HDF file The 'count' value must be a positive integer The 'limit' and 'relative' values must be positive numbers The -t compare criteria is |a - b| > limit The -p compare criteria is |(b-a)/a| > relative Return codes: 0 (no differences found), 1 (differences found) hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_02.txt000066400000000000000000000001421503061704500213140ustar00rootroot00000000000000 --------------------------- Attr Name: File_contents < "Storm_track_data1" > "Storm_track_data2" hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_03.txt000066400000000000000000000001221503061704500213130ustar00rootroot00000000000000 --------------------------- dset1:Valid_range = <<<< 1.f, 1.f ; >>>> 1.f, 2.f ; hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_04.txt000066400000000000000000000021211503061704500213150ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 position dset2 dset2 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 [ 1 0 ] 100 0 100 [ 1 1 ] 0 100 100 [ 2 1 ] 100 50 50 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_05.txt000066400000000000000000000005751503061704500213310ustar00rootroot00000000000000 --------------------------- Vdata Name: vdata1 (Data record comparison) > 0: V < 0: X --------------------------- Vdata Name: vdata2 (Data record comparison) > 0: 1 2 3 4 < 0: 1 1 1 1 --------------------------- Vdata Name: vdata3 (Data record comparison) > 0: 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 < 0: 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_06.txt000066400000000000000000000032351503061704500213260ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 Type: Integer4 Npts: 6 Ndiff: 3 (50.000000%) Avg Diff: 1.000000e+00 Max. Diff: 3 Range File1: 1/6 File2: 1/6 Regression N: 6 Slope: 6.727273e-01 Intercept: 1.818182e+00 R: 8.433083e-01 position dset2 dset2 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 Type: Integer4 Npts: 6 Ndiff: 3 (50.000000%) Avg Diff: 1.000000e+00 Max. Diff: 3 Range File1: 1/6 File2: 1/6 Regression N: 6 Slope: 6.727273e-01 Intercept: 1.818182e+00 R: 8.433083e-01 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 [ 1 0 ] 100 0 100 [ 1 1 ] 0 100 100 [ 2 1 ] 100 50 50 Type: Integer4 Npts: 6 Ndiff: 5 (83.333333%) Avg Diff: 4.833333e+01 Max. Diff: 100 Range File1: 0/100 File2: 0/120 Regression N: 6 Slope: 1.250000e-01 Intercept: 5.000000e+01 R: 1.271643e-01 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_06w.txt000066400000000000000000000032511503061704500215130ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 Type: Integer4 Npts: 6 Ndiff: 3 (50.000000%) Avg Diff: 1.000000e+000 Max. Diff: 3 Range File1: 1/6 File2: 1/6 Regression N: 6 Slope: 6.727273e-001 Intercept: 1.818182e+000 R: 8.433083e-001 position dset2 dset2 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 Type: Integer4 Npts: 6 Ndiff: 3 (50.000000%) Avg Diff: 1.000000e+000 Max. Diff: 3 Range File1: 1/6 File2: 1/6 Regression N: 6 Slope: 6.727273e-001 Intercept: 1.818182e+000 R: 8.433083e-001 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 [ 1 0 ] 100 0 100 [ 1 1 ] 0 100 100 [ 2 1 ] 100 50 50 Type: Integer4 Npts: 6 Ndiff: 5 (83.333333%) Avg Diff: 4.833333e+001 Max. Diff: 100 Range File1: 0/100 File2: 0/120 Regression N: 6 Slope: 1.250000e-001 Intercept: 5.000000e+001 R: 1.271643e-001 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_07.txt000066400000000000000000000005051503061704500213240ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_08.txt000066400000000000000000000001271503061704500213250ustar00rootroot00000000000000 --------------------------- Vdata Name: vdata1 (Data record comparison) > 0: V < 0: X hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_09.txt000066400000000000000000000014141503061704500213260ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 position dset2 dset2 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_10.txt000066400000000000000000000015151503061704500213200ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 1 1 ] 1 4 3 position dset2 dset2 difference ------------------------------------------------------------ [ 1 1 ] 1 4 3 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 [ 1 0 ] 100 0 100 [ 1 1 ] 0 100 100 [ 2 1 ] 100 50 50 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_11.txt000066400000000000000000000032021503061704500213140ustar00rootroot00000000000000position dset1 dset1 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 --------------------------- dset1:Valid_range = <<<< 1.f, 1.f ; >>>> 1.f, 2.f ; position dset2 dset2 difference ------------------------------------------------------------ [ 0 1 ] 1 2 1 [ 1 0 ] 1 3 2 [ 1 1 ] 1 4 3 position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20 [ 0 1 ] 100 80 20 [ 1 0 ] 100 0 100 [ 1 1 ] 0 100 100 [ 2 1 ] 100 50 50 --------------------------- Vdata Name: vdata1 (Data record comparison) > 0: V < 0: X --------------------------- Vdata Name: vdata2 (Data record comparison) > 0: 1 2 3 4 < 0: 1 1 1 1 --------------------------- Vdata Name: vdata3 (Data record comparison) > 0: 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 < 0: 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 --------------------------- Attr Name: File_contents < "Storm_track_data1" > "Storm_track_data2" hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_12.txt000066400000000000000000000006271503061704500213250ustar00rootroot00000000000000position dset3 dset3 difference ------------------------------------------------------------ [ 0 0 ] 100 120 20% [ 0 1 ] 100 80 20% [ 1 0 ] 100 0 100% [ 1 1 ] 0 100 not comparable [ 2 1 ] 100 50 50% hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_13.txt000066400000000000000000000042041503061704500213210ustar00rootroot00000000000000position data1 data1 difference ------------------------------------------------------------ [ 30 0 ] 1 0 1 [ 30 1 ] 2 0 2 [ 30 2 ] 3 0 3 [ 30 3 ] 4 0 4 [ 30 4 ] 5 0 5 [ 30 5 ] 6 0 6 [ 30 6 ] 7 0 7 [ 30 7 ] 8 0 8 [ 30 8 ] 9 0 9 [ 30 9 ] 10 0 10 [ 52438 0 ] 1 0 1 [ 52438 1 ] 2 0 2 [ 52438 2 ] 3 0 3 [ 52438 3 ] 4 0 4 [ 52438 4 ] 5 0 5 [ 52438 5 ] 6 0 6 [ 52438 6 ] 7 0 7 [ 52438 7 ] 8 0 8 [ 52438 8 ] 9 0 9 [ 52438 9 ] 10 0 10 [ 104856 0 ] 1 0 1 [ 104856 1 ] 2 0 2 [ 104856 2 ] 3 0 3 [ 104856 3 ] 4 0 4 [ 104856 4 ] 5 0 5 [ 104856 5 ] 6 0 6 [ 104856 6 ] 7 0 7 [ 104856 7 ] 8 0 8 [ 104856 8 ] 9 0 9 [ 104856 9 ] 10 0 10 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_14.txt000066400000000000000000000010001503061704500213110ustar00rootroot00000000000000position sds sds difference ------------------------------------------------------------ [ 1 ] 2 0 2 [ 2 ] 3 0 3 position lone lone difference ------------------------------------------------------------ [ 1 ] 2 0 2 [ 2 ] 3 0 3 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdiff_15.txt000066400000000000000000000012311503061704500213200ustar00rootroot00000000000000--------------------------------------- file 1 Tag Ref Name --------------------------------------- 1965 2 g0 1965 3 g0/g1 1965 4 g0/g1/g1.1 --------------------------------------- file 2 Tag Ref Name --------------------------------------- 1965 2 g0 1965 3 g0/g1 1965 4 g0/g1/g1.1 --------------------------------------- file1 file2 --------------------------------------- x x g0 x x g0/g1 x x g0/g1/g1.1 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst1.hdf000066400000000000000000000076301503061704500215620ustar00rootroot00000000000000È j\¾ ƾ Þ¾ ö« ª <­ N!« oª s<­ ¯!« Ъ Ô<­ !« 1ª 5<­ q!« ’ª –<­ Ò!« óª ÷<­ 3!« Tª \=j ™½ Ð ³­ Ã6j ù½ ýÐ ­ #2j U½ YÐ o­ 2« ±ª Ã?­J«LªQJ«› ª»I«0ª4cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006ddddValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª fakeDim2Dim0.0ValuesfakeDim3 DimVal0.1ªfakeDim3Dim0.0ValuesfakeDim4 DimVal0.1ªfakeDim4Dim0.0ValuesfakeDim5 DimVal0.1ªfakeDim5Dim0.0?€?€VALUES Valid_rangeAttr0.0 jjj¾j½Ñ­­ª¾j½Ð dset1Var0.0 jjj¾j½Ñ­­¾j½Ð dset2Var0.0 jjj¾j½Ñ­­¾j½Ðdset3Var0.0Storm_track_data1VALUES File_contentsAttr0.0 ­­­­­­­­­ª  hdifftst1.hdfCDF0.0VDATASingle-component Fieldvdata1 5x1 ArrayMulti-component Fieldvdata2 6x4 Array?€@@@@€@ @À@àAAA A0A@  PositionMass Temperaturevdata3 Particle Datahdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst2.hdf000066400000000000000000000076301503061704500215630ustar00rootroot00000000000000È j\¾ ƾ Þ¾ ö« ª <­ N!« oª s<­ ¯!« Ъ Ô<­ !« 1ª 5<­ q!« ’ª –<­ Ò!« óª ÷<­ 3!« Tª \=j ™½ Ð ³­ Ã6j ù½ ýÐ ­ #2j U½ YÐ o­ 2« ±ª Ã?­J«LªQJ«› ª»I«0ª4cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006xPd2ValuesfakeDim0 DimVal0.1ªfakeDim0Dim0.0ValuesfakeDim1 DimVal0.1ª fakeDim1Dim0.0ValuesfakeDim2 DimVal0.1ª fakeDim2Dim0.0ValuesfakeDim3 DimVal0.1ªfakeDim3Dim0.0ValuesfakeDim4 DimVal0.1ªfakeDim4Dim0.0ValuesfakeDim5 DimVal0.1ªfakeDim5Dim0.0?€@VALUES Valid_rangeAttr0.0 jjj¾j½Ñ­­ª¾j½Ð dset1Var0.0 jjj¾j½Ñ­­¾j½Ð dset2Var0.0 jjj¾j½Ñ­­¾j½Ðdset3Var0.0Storm_track_data2VALUES File_contentsAttr0.0 ­­­­­­­­­ª  hdifftst2.hdfCDF0.0XDATASingle-component Fieldvdata1 5x1 ArrayMulti-component Fieldvdata2 6x4 Array?€?€?€?€?€?€@àAAA A0A@  PositionMass Temperaturevdata3 Particle Datahdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst3.hdf000066400000000000000000040623561503061704500215760ustar00rootroot00000000000000ÈÛ§ j\B¾ Æ Ö Ø€« Xª \<­ ˜"« ºª ¾<­ ú!j½Ð5­ E2­ w.¥€%€¥€%€¥€%€ ¥€ %€ "¥€ %%€ '¥€*%€,¥€/%€1¥€4%€6¥€9%€;¥€>%€@¥€C%€E¥€H%€J¥€M%€O¥€R%€T¥€ W%€!Y¥€"\%€#^¥€$a%€%c¥€&f%€'h¥€(k%€)m¥€*p%€+r¥€,u%€-w¥€.z%€/|¥€0%€1¥€2„%€3†¥€4‰%€5‹¥€6Ž%€7¥€8“%€9•¥€:˜%€;š¥€<%€=Ÿ¥€>¢%€?¤¥€@§%€A©¥€B¬%€C®¥€D±%€E³¥€F¶%€G¸¥€H»%€I½¥€JÀ%€KÂ¥€LÅ%€MÇ¥€NÊ%€OÌ¥€PÏ%€QÑ¥€RÔ%€SÖ¥€TÙ%€UÛ¥€VÞ%€WीXã%€Y奀Zè%€[ꥀ\í%€]鹿^ò%€_ô¥€`÷%€aù¥€bü%€cþ¥€d%€e¥€f%€g¥€h %€i ¥€j%€k¥€l%€m¥€n%€o¥€p%€q!¥€r$%€s&¥€t)%€u+¥€v.%€w0¥€x3%€y5¥€z8%€{:¥€|=%€}?¥€~B%€D¥€€G%€I¥€‚L%ƒM'€„O§€…R'€†T§€‡W'€ˆY§€‰\'€Š^§€‹a'€Œc§€f'€Žh§€k'€m§€‘p'€’r§€“u'€”w§€•z'€–|§€—'€˜§€™„'€š†§€›‰'€œ‹§€Ž'€ž§€Ÿ“'€ •§€¡˜'€¢š§€£'€¤Ÿ§€¥¢'€¦¤§€§§'€¨©§€©¬'€ª®§€«±'€¬³§€­¶'€®¸§€¯»'€°½§€±À'€²§€³Å'€´ǧ€µÊ'€¶̧€·Ï'€¸ѧ€¹Ô'€ºÖ§€»Ù'€NCSA HDF Version 4.2 Release 1-post3, January 27, 2006T€€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€                                                                ™¢ValuesfakeDim0 DimVal0.1ªfakeDim0UDim0.0 ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0 jjj¾j½Ñ­­¾j½Ðdata1Var0.0­­­ hdifftst3.hdfCDF0.0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È×¼å €½ç€¾ê €¿ì€Àï €Áñ€Âô €Ãö€Äù €Åû€Æþ €Ç€È €É€Ê €Ë €Ì €Í€Î €Ï€Ð €Ñ€Ò €Ó€Ô! €Õ#€Ö& €×(€Ø+ €Ù-€Ú0 €Û2€Ü5 €Ý7€Þ: €ß<€à? €áA€âD €ãF€äI €åK€æN €çP€èS €éU€êX €ëZ€ì] €í_€îb €ïd€ðg €ñi€òl €ón€ôq €õs€öv €÷x€ø{ €ù}€ú€ €û‚€ü… €ý‡€þŠ €ÿŒ€ €‘€” €–—€š€œ€Ÿ€¡€ ¤€ ¦€ ©€ «€ ®€°€³€µ€¸€º€½€¿€Â€Ä€Ç€É€Ì€Î€Ñ€Ó€Ö€Ø€Û€ Ý€!à€"â€#å€$ç€%ê€&ì€'ï€(ñ€)ô€*ö€+ù€,û€-þ€.€/€0€1€2 €3 €4€5€6€7€8€9€:€;!€<#€=&€>(€?+€@-€A0€B2€C5€D7€E:€F<€G?€HA€ID€JF€KI€LK€MN€NP€OS€PU€QX€RZ€S]€T_€Ub€Vd€Wg€Xi€Yl€Zn€[q€\s€]v€^x€_{€`}€a€€b‚€c…€d‡€eŠ€fŒ€g€h‘€i”€j–€k™€l›€mž€n €o£€p¥€q¨€rª€s­€t¯€u²€v´€w·€x¹€y¼€z¾€{Á€|À}Æ€~Ȁˀ€Í€Ð€‚Ò€ƒÕ€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                „      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ÈÑù„àõ…á÷€†äw€‡æ÷€ˆéw€‰ë÷€Šîw€‹ð÷€Œów€õ÷€Žøw€ú÷€ýw€‘ÿ÷€’w€“÷€”w€• ÷€– w€—÷€˜w€™÷€šw€›÷€œw€÷€ž w€Ÿ"÷€ %w€¡'÷€¢*w€£,÷€¤/w€¥1÷€¦4w€§6÷€¨9w€©;÷€ª>w€«@÷€¬Cw€­E÷€®Hw€¯J÷€°Mw€±O÷€²Rw€³T÷€´Ww€µY÷€¶\w€·^÷€¸aw€¹c÷€ºfw€»h÷€¼kw€½m÷€¾pw€¿r÷€Àuw€Áw÷€Âzw€Ã|÷€Äw€Å÷€Æ„w€Ç†÷€È‰w€É‹÷€ÊŽw€Ë÷€Ì“w€Í•÷€Î˜w€Ïš÷€Ðw€ÑŸ÷€Ò¢w€Ó¤÷€Ô§w€Õ©÷€Ö¬w€×®÷€Ø±w€Ù³÷€Ú¶w€Û¸÷€Ü»w€Ý½÷€ÞÀw€ßÂ÷€àÅw€áÇ÷€âÊw€ãÌ÷€äÏw€åÑ÷€æÔw€çÖ÷€èÙw€éÛ÷€êÞw€ëà÷€ìãw€íå÷€îèw€ïê÷€ðíw€ñï÷€òòw€óô÷€ô÷w€õù÷€öüw€÷þ÷€øw€ù÷€úw€û÷€ü w€ý ÷€þw€ÿ÷€w€÷€w€÷€w€!÷"ù€%y€'ù€ *y€ ,ù€ /y€ 1ù€ 4y€6ù€9y€;ù€>y€@ù€Cy€Eù€Hy€Jù€My€Où€Ry€Tù€Wy€Yù€\y€^ù€ay€ cù€!fy€"hù€#ky€$mù€%py€&rù€'uy€(wù€)zy€*|ù€+y€,ù€-„y€.†ù€/‰y€0‹ù€1Žy€2ù€3“y€4•ù€5˜y€6šù€7y€8Ÿù€9¢y€:¤ù€;§y€<©ù€=¬y€>®ù€?±y€@³ù€A¶y€B¸ù€C»y€D½ù€EÀy€FÂù€GÅy€HÇù€IÊy€JÌù€KÏy€…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                †      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ÈÌcLÛ_€MÝ߀Nà_€Oâ߀På_€Qç߀Rê_€Sì߀Tï_€Uñ߀Vô_€Wö߀Xù_€Yû߀Zþ_€[߀\_€]߀^_€_ ߀` _€a߀b_€c߀d_€e߀f_€g߀h!_€i#߀j&_€k(߀l+_€m-߀n0_€o2߀p5_€q7߀r:_€s<߀t?_€uA߀vD_€wF߀xI_€yK߀zN_€{P߀|S_€}U߀~X_€Z߀€]_€_߀‚b_€ƒd߀„g_€…i߀†l_‡ma€ˆoဉra€Štဋwa€Œyá€|a€Ž~á€a€ƒá€‘†a€’ˆá€“‹a€”ပa€–’ဗ•a€˜—မša€šœá€›Ÿa€œ¡á€¤a€ž¦á€Ÿ©a€ «á€¡®a€¢°á€£³a€¤µá€¥¸a€¦ºá€§½a€¨¿á€©Âa€ªÄါÇa€¬ÉိÌa€®ÎုÑa€°ÓေÖa€²Øá€³Ûa€´Ýဵàa€¶â့åa€¸ç္êa€ºìျïa€¼ñွôa€¾öဿùa€Àûá€Áþa€Âá€Ãa€Äá€Åa€Æ á€Ç a€Èá€Éa€Êá€Ëa€Ìá€Ía€Îá€Ï!a€Ð#á€Ñ&a€Ò(á€Ó+a€Ô-á€Õ0a€Ö2á€×5a€Ø7á€Ù:a€Ú<á€Û?a€ÜAá€ÝDa€ÞFá€ßIa€àKá€áNa€âPá€ãSa€äUá€åXa€æZá€ç]a€è_á€éba€êdá€ëga€ìiá€íla€îná€ïqa€ðsá€ñva€òxá€ó{a€ô}á€õ€a€ö‚á€÷…a€ø‡á€ùŠa€úŒá€ûa€ü‘á€ý”a€þ–á€ÿ™a€›á€ža€ á€£a€¥á€¨a€ªá€­a®c€ °ã€ ³c€ µã€ ¸c€ ºã€½c€¿ã€Âc€Äã€Çc€É〠                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ˆ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È ÈKÕÉ€ØI€ÚÉ€ÝI€ßÉ€âI€äÉ€çI€éÉ€ìI€îÉ€ñI€ óÉ€!öI€"øÉ€#ûI€$ýÉ€%I€&É€'I€(É€) I€* É€+I€,É€-I€.É€/I€0É€1I€2 É€3#I€4%É€5(I€6*É€7-I€8/É€92I€:4É€;7I€<9É€=>É€?AI€@CÉ€AFI€BHÉ€CKI€DMÉ€EPI€FRÉ€GUI€HWÉ€IZI€J\É€K_I€LaÉ€MdI€NfÉ€OiI€PkÉ€QnI€RpÉ€SsI€TuÉ€UxI€VzÉ€W}I€XÉ€Y‚I€Z„É€[‡I€\‰É€]ŒI€^ŽÉ€_‘I€`“É€a–I€b˜É€c›I€dÉ€e I€f¢É€g¥I€h§É€iªI€j¬É€k¯I€l±É€m´I€n¶É€o¹I€p»É€q¾I€rÀÉ€sÃI€tÅÉ€uÈI€vÊÉ€wÍI€xÏÉ€yÒI€zÔÉ€{×I€|ÙÉ€}ÜI€~ÞÉ€áI€€ãÉ€æI€‚èÉ€ƒëI€„íÉ€…ðI€†òÉ€‡õI€ˆ÷ɉøË€ŠûK€‹ýË€Œ K€ Ë€Ž K€ Ë€ K€‘ Ë€’ K€“ Ë€” K€• Ë€– K€— Ë€˜ K€™ Ë€š #K€› %Ë€œ (K€ *Ë€ž -K€Ÿ /Ë€  2K€¡ 4Ë€¢ 7K€£ 9Ë€¤ Ë€¦ AK€§ CË€¨ FK€© HË€ª KK€« MË€¬ PK€­ RË€® UK€¯ WË€° ZK€± \Ë€² _K€³ aË€´ dK€µ fË€¶ iK€· kË€¸ nK€¹ pË€º sK€» uË€¼ xK€½ zË€¾ }K€¿ Ë€À ‚K€Á „Ë€ ‡K€à ‰Ë€Ä ŒK€Å ŽË€Æ ‘K€Ç “Ë€È –K€É ˜Ë€Ê ›K€Ë Ë€Ì  K€Í ¢Ë€Î ¥K€Ï §Ë€Ð ªK€Ñ ¬Ë€Ò ¯K€Ó ±Ë€Ô ´K€Õ ¶Ë€Ö ¹K€× »Ë€Ø ¾K€Ù ÀË€Ú ÃK€Û ÅË€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È ÂµÜ Ñ±€Ý Ô1€Þ Ö±€ß Ù1€à Û±€á Þ1€â à±€ã ã1€ä å±€å è1€æ ê±€ç í1€è ï±€é ò1€ê ô±€ë ÷1€ì ù±€í ü1€î þ±€ï 1€ð ±€ñ 1€ò ±€ó 1€ô ±€õ 1€ö ±€÷ 1€ø ±€ù 1€ú ±€û 1€ü !±€ý $1€þ &±€ÿ )1€ +±€ .1€ 0±€ 31€ 5±€ 81€ :±€ =1€ ?±€ B1 C3€ E³€ H3€ J³€ M3€ O³€ R3€ T³€ W3€ Y³€ \3€ ^³€ a3€ c³€ f3€ h³€ k3€ m³€ p3€ r³€ u3€ w³€ z3€! |³€" 3€# ³€$ „3€% †³€& ‰3€' ‹³€( Ž3€) ³€* “3€+ •³€, ˜3€- š³€. 3€/ Ÿ³€0 ¢3€1 ¤³€2 §3€3 ©³€4 ¬3€5 ®³€6 ±3€7 ³³€8 ¶3€9 ¸³€: »3€; ½³€< À3€= ³€> Å3€? dz€@ Ê3€A ̳€B Ï3€C ѳ€D Ô3€E Ö³€F Ù3€G Û³€H Þ3€I à³€J ã3€K å³€L è3€M ê³€N í3€O ï³€P ò3€Q ô³€R ÷3€S ù³€T ü3€U þ³€V 3€W ³€X 3€Y ³€Z 3€[ ³€\ 3€] ³€^ 3€_ ³€` 3€a ³€b 3€c !³€d $3€e &³€f )3€g +³€h .3€i 0³€j 33€k 5³€l 83€m :³€n =3€o ?³€p B3€q D³€r G3€s I³€t L3€u N³€v Q3€w S³€x V3€y X³€z [3€{ ]³€| `3€} b³€~ e3€ g³€€ j3€ l³€‚ o3€ƒ q³€„ t3€… v³€† y3€‡ {³€ˆ ~3€‰ €³€Š ƒ3‹ „5€Œ †µ€ ‰5€Ž ‹µ€ Ž5€ µ€‘ “5€’ •µ€“ ˜5€” 𵀕 5€– Ÿµ€— ¢5€˜ ¤µ€™ §5€š ©µ€› ¬5€œ ®µ€ ±5€ž ³µ€Ÿ ¶5€  ¸µ€¡ »5€¢ ½µ€£ À5€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Š     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  È ¾¤ Ì€¥ Λ€¦ Ñ€§ Ó›€¨ Ö€© Ø›€ª Û€« Ý›€¬ à€­ ⛀® 倯 盀° ꀱ 움²  ñ›€´ ô€µ ö›€¶ ù€· û›€¸ þ€¹ ›€º €» ›€¼ €½ ›€¾ €¿ ›€À €Á ›€ €à ›€Ä €Å ›€Æ !€Ç #›€È &€É (›€Ê +€Ë -›€Ì 0€Í 2›€Î 5€Ï 7›€Ð :€Ñ <›€Ò ?€Ó A›€Ô D€Õ F›€Ö I€× K›€Ø N€Ù P›€Ú S€Û U›€Ü X€Ý Z›€Þ ]€ß _›€à b€á d›€â g€ã i›€ä l€å n›€æ q€ç s›€è v€é x›€ê {€ë }›€ì €€í ‚›€î …€ï ‡›€ð Š€ñ Œ›€ò €ó ‘›€ô ”€õ –›€ö ™€÷ ››€ø ž€ù  ›€ú £€û ¥›€ü ¨€ý ª›€þ ­€ÿ ¯›€ ²€ ´›€ ·€ ¹›€ ¼€ ¾›€ Á€ Û€ Æ€ È›€ Ë€ Í› ΀ Ñ€ Ó€ Ö€ Ø€ Û€ Ý€ à€ â€ å€ ç€ ê€ ì€ ï€ ñ€ ô€ ö€ ù€ û€ þ€ €! €" €# €$ €% €& €' €( €) €* €+ €, €- !€. #€/ &€0 (€1 +€2 -€3 0€4 2€5 5€6 7€7 :€8 <€9 ?€: A€; D€< F€= I€> K€? N€@ P€A S€B U€C X€D Z€E ]€F _€G b€H d€I g€J i€K l€L n€M q€N s€O v€P x€Q {€R }€S €€T ‚€U …€V ‡€W Š€X Œ€Y €Z ‘€[ ”€\ –€] ™€^ ›€_ ž€`  €a £€b ¥€c ¨€d ª€e ­€f ¯€g ²€h ´€i ·€j ¹€k ¼€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Œ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ȹl È€m ʃ€n Í€o σ€p Ò€q Ôƒ€r ×€s Ùƒ€t Ü€u Þƒ€v á€w ダx æ€y 胀z ë€{ 타| ð€} òƒ€~ õ€ ÷ƒ€€ ú€ üƒ€‚ ÿ€ƒƒ€„€…ƒ€† €‡ ƒ€ˆ€‰ƒ€Š€‹ƒ€Œ€Ž…€€ …€‘#€’%…€“(€”*…€•-€–/…€—2€˜4…€™7€š9…€›<€œ>…€A€žC…€ŸF€ H…€¡K€¢M…€£P€¤R…€¥U€¦W…€§Z€¨\…€©_€ªa…€«d€¬f…€­i€®k…€¯n€°p…€±s€²u…€³x€´z…€µ}€¶…€·‚€¸„…€¹‡€º‰…€»Œ€¼Ž…€½‘€¾“…€¿–€À˜…€Á›€Â…€Ã €Ä¢…€Å¥€Æ§…€Çª€È¬…€É¯€Ê±…€Ë´€Ì¶…€Í¹€Î»…€Ï¾€ÐÀ…€ÑÀÒÅ…€ÓÈ€ÔÊ…€ÕÍ€ÖÏ…€×Ò€ØÔ…€Ù×€ÚÙ…€ÛÜ€ÜÞ…€Ýá€Þã…€ßæ€àè…€áë€âí…€ãð€äò…€åõ€æ÷…€çú€èü…€éÿ€ê…€ë€ì…€í €î …€ï€ð…€ñ€ò…€ó€ô…€õ€ö…€÷"€ø$…€ù'€ú)…€û,€ü.…€ý1€þ3…€ÿ6€8…€;€=…€@€B…€E€G…€J€L…€ O€ Q…€ T€ V…€ YZ€\‡€_€a‡€d€f‡€i€k‡€n€p‡€s€u‡€x€z‡€}€‡€‚€„‡€ ‡€!‰‡€"Œ€#އ€$‘€%“‡€&–€'˜‡€(›€)‡€* €+¢‡€,¥€-§‡€.ª€/¬‡€0¯€1±‡€2´€3¶‡€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ž‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È4Âm€5Äí€6Çm€7Éí€8Ìm€9Îí€:Ñm€;Óí€<Öm€=Øí€>Ûm€?Ýí€@àm€Aâí€Båm€Cçí€Dêm€Eìí€Fïm€Gñí€Hôm€Iöí€Jùm€Kûí€Lþm€Mí€Nm€Oí€Pm€Q í€R m€Sí€Tm€Uí€Vm€Wí€Xm€Yí€Z!m€[#í€\&m€](í€^+m€_-í€`0m€a2í€b5m€c7í€d:m€e<í€f?m€gAí€hDm€iFí€jIm€kKí€lNm€mPí€nSm€oUí€pXm€qZí€r]m€s_í€tbm€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst4.hdf000066400000000000000000040623561503061704500215770ustar00rootroot00000000000000ÈÛ§ j\B¾ Æ Ö Ø€« Xª \<­ ˜"« ºª ¾<­ ú!j½Ð5­ E2­ w.¥€%€¥€%€¥€%€ ¥€ %€ "¥€ %%€ '¥€*%€,¥€/%€1¥€4%€6¥€9%€;¥€>%€@¥€C%€E¥€H%€J¥€M%€O¥€R%€T¥€ W%€!Y¥€"\%€#^¥€$a%€%c¥€&f%€'h¥€(k%€)m¥€*p%€+r¥€,u%€-w¥€.z%€/|¥€0%€1¥€2„%€3†¥€4‰%€5‹¥€6Ž%€7¥€8“%€9•¥€:˜%€;š¥€<%€=Ÿ¥€>¢%€?¤¥€@§%€A©¥€B¬%€C®¥€D±%€E³¥€F¶%€G¸¥€H»%€I½¥€JÀ%€KÂ¥€LÅ%€MÇ¥€NÊ%€OÌ¥€PÏ%€QÑ¥€RÔ%€SÖ¥€TÙ%€UÛ¥€VÞ%€WीXã%€Y奀Zè%€[ꥀ\í%€]鹿^ò%€_ô¥€`÷%€aù¥€bü%€cþ¥€d%€e¥€f%€g¥€h %€i ¥€j%€k¥€l%€m¥€n%€o¥€p%€q!¥€r$%€s&¥€t)%€u+¥€v.%€w0¥€x3%€y5¥€z8%€{:¥€|=%€}?¥€~B%€D¥€€G%€I¥€‚L%ƒM'€„O§€…R'€†T§€‡W'€ˆY§€‰\'€Š^§€‹a'€Œc§€f'€Žh§€k'€m§€‘p'€’r§€“u'€”w§€•z'€–|§€—'€˜§€™„'€š†§€›‰'€œ‹§€Ž'€ž§€Ÿ“'€ •§€¡˜'€¢š§€£'€¤Ÿ§€¥¢'€¦¤§€§§'€¨©§€©¬'€ª®§€«±'€¬³§€­¶'€®¸§€¯»'€°½§€±À'€²§€³Å'€´ǧ€µÊ'€¶̧€·Ï'€¸ѧ€¹Ô'€ºÖ§€»Ù'€NCSA HDF Version 4.2 Release 1-post3, January 27, 2006T€€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€                                                               ™¢ValuesfakeDim0 DimVal0.1ªfakeDim0UDim0.0 ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0 jjj¾j½Ñ­­¾j½Ðdata1Var0.0­­­ hdifftst4.hdfCDF0.0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È×¼å €½ç€¾ê €¿ì€Àï €Áñ€Âô €Ãö€Äù €Åû€Æþ €Ç€È €É€Ê €Ë €Ì €Í€Î €Ï€Ð €Ñ€Ò €Ó€Ô! €Õ#€Ö& €×(€Ø+ €Ù-€Ú0 €Û2€Ü5 €Ý7€Þ: €ß<€à? €áA€âD €ãF€äI €åK€æN €çP€èS €éU€êX €ëZ€ì] €í_€îb €ïd€ðg €ñi€òl €ón€ôq €õs€öv €÷x€ø{ €ù}€ú€ €û‚€ü… €ý‡€þŠ €ÿŒ€ €‘€” €–—€š€œ€Ÿ€¡€ ¤€ ¦€ ©€ «€ ®€°€³€µ€¸€º€½€¿€Â€Ä€Ç€É€Ì€Î€Ñ€Ó€Ö€Ø€Û€ Ý€!à€"â€#å€$ç€%ê€&ì€'ï€(ñ€)ô€*ö€+ù€,û€-þ€.€/€0€1€2 €3 €4€5€6€7€8€9€:€;!€<#€=&€>(€?+€@-€A0€B2€C5€D7€E:€F<€G?€HA€ID€JF€KI€LK€MN€NP€OS€PU€QX€RZ€S]€T_€Ub€Vd€Wg€Xi€Yl€Zn€[q€\s€]v€^x€_{€`}€a€€b‚€c…€d‡€eŠ€fŒ€g€h‘€i”€j–€k™€l›€mž€n €o£€p¥€q¨€rª€s­€t¯€u²€v´€w·€x¹€y¼€z¾€{Á€|À}Æ€~Ȁˀ€Í€Ð€‚Ò€ƒÕ€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                „      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ÈÑù„àõ…á÷€†äw€‡æ÷€ˆéw€‰ë÷€Šîw€‹ð÷€Œów€õ÷€Žøw€ú÷€ýw€‘ÿ÷€’w€“÷€”w€• ÷€– w€—÷€˜w€™÷€šw€›÷€œw€÷€ž w€Ÿ"÷€ %w€¡'÷€¢*w€£,÷€¤/w€¥1÷€¦4w€§6÷€¨9w€©;÷€ª>w€«@÷€¬Cw€­E÷€®Hw€¯J÷€°Mw€±O÷€²Rw€³T÷€´Ww€µY÷€¶\w€·^÷€¸aw€¹c÷€ºfw€»h÷€¼kw€½m÷€¾pw€¿r÷€Àuw€Áw÷€Âzw€Ã|÷€Äw€Å÷€Æ„w€Ç†÷€È‰w€É‹÷€ÊŽw€Ë÷€Ì“w€Í•÷€Î˜w€Ïš÷€Ðw€ÑŸ÷€Ò¢w€Ó¤÷€Ô§w€Õ©÷€Ö¬w€×®÷€Ø±w€Ù³÷€Ú¶w€Û¸÷€Ü»w€Ý½÷€ÞÀw€ßÂ÷€àÅw€áÇ÷€âÊw€ãÌ÷€äÏw€åÑ÷€æÔw€çÖ÷€èÙw€éÛ÷€êÞw€ëà÷€ìãw€íå÷€îèw€ïê÷€ðíw€ñï÷€òòw€óô÷€ô÷w€õù÷€öüw€÷þ÷€øw€ù÷€úw€û÷€ü w€ý ÷€þw€ÿ÷€w€÷€w€÷€w€!÷"ù€%y€'ù€ *y€ ,ù€ /y€ 1ù€ 4y€6ù€9y€;ù€>y€@ù€Cy€Eù€Hy€Jù€My€Où€Ry€Tù€Wy€Yù€\y€^ù€ay€ cù€!fy€"hù€#ky€$mù€%py€&rù€'uy€(wù€)zy€*|ù€+y€,ù€-„y€.†ù€/‰y€0‹ù€1Žy€2ù€3“y€4•ù€5˜y€6šù€7y€8Ÿù€9¢y€:¤ù€;§y€<©ù€=¬y€>®ù€?±y€@³ù€A¶y€B¸ù€C»y€D½ù€EÀy€FÂù€GÅy€HÇù€IÊy€JÌù€KÏy€…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                †      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ÈÌcLÛ_€MÝ߀Nà_€Oâ߀På_€Qç߀Rê_€Sì߀Tï_€Uñ߀Vô_€Wö߀Xù_€Yû߀Zþ_€[߀\_€]߀^_€_ ߀` _€a߀b_€c߀d_€e߀f_€g߀h!_€i#߀j&_€k(߀l+_€m-߀n0_€o2߀p5_€q7߀r:_€s<߀t?_€uA߀vD_€wF߀xI_€yK߀zN_€{P߀|S_€}U߀~X_€Z߀€]_€_߀‚b_€ƒd߀„g_€…i߀†l_‡ma€ˆoဉra€Štဋwa€Œyá€|a€Ž~á€a€ƒá€‘†a€’ˆá€“‹a€”ပa€–’ဗ•a€˜—မša€šœá€›Ÿa€œ¡á€¤a€ž¦á€Ÿ©a€ «á€¡®a€¢°á€£³a€¤µá€¥¸a€¦ºá€§½a€¨¿á€©Âa€ªÄါÇa€¬ÉိÌa€®ÎုÑa€°ÓေÖa€²Øá€³Ûa€´Ýဵàa€¶â့åa€¸ç္êa€ºìျïa€¼ñွôa€¾öဿùa€Àûá€Áþa€Âá€Ãa€Äá€Åa€Æ á€Ç a€Èá€Éa€Êá€Ëa€Ìá€Ía€Îá€Ï!a€Ð#á€Ñ&a€Ò(á€Ó+a€Ô-á€Õ0a€Ö2á€×5a€Ø7á€Ù:a€Ú<á€Û?a€ÜAá€ÝDa€ÞFá€ßIa€àKá€áNa€âPá€ãSa€äUá€åXa€æZá€ç]a€è_á€éba€êdá€ëga€ìiá€íla€îná€ïqa€ðsá€ñva€òxá€ó{a€ô}á€õ€a€ö‚á€÷…a€ø‡á€ùŠa€úŒá€ûa€ü‘á€ý”a€þ–á€ÿ™a€›á€ža€ á€£a€¥á€¨a€ªá€­a®c€ °ã€ ³c€ µã€ ¸c€ ºã€½c€¿ã€Âc€Äã€Çc€É〠                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ˆ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È ÈKÕÉ€ØI€ÚÉ€ÝI€ßÉ€âI€äÉ€çI€éÉ€ìI€îÉ€ñI€ óÉ€!öI€"øÉ€#ûI€$ýÉ€%I€&É€'I€(É€) I€* É€+I€,É€-I€.É€/I€0É€1I€2 É€3#I€4%É€5(I€6*É€7-I€8/É€92I€:4É€;7I€<9É€=>É€?AI€@CÉ€AFI€BHÉ€CKI€DMÉ€EPI€FRÉ€GUI€HWÉ€IZI€J\É€K_I€LaÉ€MdI€NfÉ€OiI€PkÉ€QnI€RpÉ€SsI€TuÉ€UxI€VzÉ€W}I€XÉ€Y‚I€Z„É€[‡I€\‰É€]ŒI€^ŽÉ€_‘I€`“É€a–I€b˜É€c›I€dÉ€e I€f¢É€g¥I€h§É€iªI€j¬É€k¯I€l±É€m´I€n¶É€o¹I€p»É€q¾I€rÀÉ€sÃI€tÅÉ€uÈI€vÊÉ€wÍI€xÏÉ€yÒI€zÔÉ€{×I€|ÙÉ€}ÜI€~ÞÉ€áI€€ãÉ€æI€‚èÉ€ƒëI€„íÉ€…ðI€†òÉ€‡õI€ˆ÷ɉøË€ŠûK€‹ýË€Œ K€ Ë€Ž K€ Ë€ K€‘ Ë€’ K€“ Ë€” K€• Ë€– K€— Ë€˜ K€™ Ë€š #K€› %Ë€œ (K€ *Ë€ž -K€Ÿ /Ë€  2K€¡ 4Ë€¢ 7K€£ 9Ë€¤ Ë€¦ AK€§ CË€¨ FK€© HË€ª KK€« MË€¬ PK€­ RË€® UK€¯ WË€° ZK€± \Ë€² _K€³ aË€´ dK€µ fË€¶ iK€· kË€¸ nK€¹ pË€º sK€» uË€¼ xK€½ zË€¾ }K€¿ Ë€À ‚K€Á „Ë€ ‡K€à ‰Ë€Ä ŒK€Å ŽË€Æ ‘K€Ç “Ë€È –K€É ˜Ë€Ê ›K€Ë Ë€Ì  K€Í ¢Ë€Î ¥K€Ï §Ë€Ð ªK€Ñ ¬Ë€Ò ¯K€Ó ±Ë€Ô ´K€Õ ¶Ë€Ö ¹K€× »Ë€Ø ¾K€Ù ÀË€Ú ÃK€Û ÅË€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È ÂµÜ Ñ±€Ý Ô1€Þ Ö±€ß Ù1€à Û±€á Þ1€â à±€ã ã1€ä å±€å è1€æ ê±€ç í1€è ï±€é ò1€ê ô±€ë ÷1€ì ù±€í ü1€î þ±€ï 1€ð ±€ñ 1€ò ±€ó 1€ô ±€õ 1€ö ±€÷ 1€ø ±€ù 1€ú ±€û 1€ü !±€ý $1€þ &±€ÿ )1€ +±€ .1€ 0±€ 31€ 5±€ 81€ :±€ =1€ ?±€ B1 C3€ E³€ H3€ J³€ M3€ O³€ R3€ T³€ W3€ Y³€ \3€ ^³€ a3€ c³€ f3€ h³€ k3€ m³€ p3€ r³€ u3€ w³€ z3€! |³€" 3€# ³€$ „3€% †³€& ‰3€' ‹³€( Ž3€) ³€* “3€+ •³€, ˜3€- š³€. 3€/ Ÿ³€0 ¢3€1 ¤³€2 §3€3 ©³€4 ¬3€5 ®³€6 ±3€7 ³³€8 ¶3€9 ¸³€: »3€; ½³€< À3€= ³€> Å3€? dz€@ Ê3€A ̳€B Ï3€C ѳ€D Ô3€E Ö³€F Ù3€G Û³€H Þ3€I à³€J ã3€K å³€L è3€M ê³€N í3€O ï³€P ò3€Q ô³€R ÷3€S ù³€T ü3€U þ³€V 3€W ³€X 3€Y ³€Z 3€[ ³€\ 3€] ³€^ 3€_ ³€` 3€a ³€b 3€c !³€d $3€e &³€f )3€g +³€h .3€i 0³€j 33€k 5³€l 83€m :³€n =3€o ?³€p B3€q D³€r G3€s I³€t L3€u N³€v Q3€w S³€x V3€y X³€z [3€{ ]³€| `3€} b³€~ e3€ g³€€ j3€ l³€‚ o3€ƒ q³€„ t3€… v³€† y3€‡ {³€ˆ ~3€‰ €³€Š ƒ3‹ „5€Œ †µ€ ‰5€Ž ‹µ€ Ž5€ µ€‘ “5€’ •µ€“ ˜5€” 𵀕 5€– Ÿµ€— ¢5€˜ ¤µ€™ §5€š ©µ€› ¬5€œ ®µ€ ±5€ž ³µ€Ÿ ¶5€  ¸µ€¡ »5€¢ ½µ€£ À5€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Š     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  È ¾¤ Ì€¥ Λ€¦ Ñ€§ Ó›€¨ Ö€© Ø›€ª Û€« Ý›€¬ à€­ ⛀® 倯 盀° ꀱ 움²  ñ›€´ ô€µ ö›€¶ ù€· û›€¸ þ€¹ ›€º €» ›€¼ €½ ›€¾ €¿ ›€À €Á ›€ €à ›€Ä €Å ›€Æ !€Ç #›€È &€É (›€Ê +€Ë -›€Ì 0€Í 2›€Î 5€Ï 7›€Ð :€Ñ <›€Ò ?€Ó A›€Ô D€Õ F›€Ö I€× K›€Ø N€Ù P›€Ú S€Û U›€Ü X€Ý Z›€Þ ]€ß _›€à b€á d›€â g€ã i›€ä l€å n›€æ q€ç s›€è v€é x›€ê {€ë }›€ì €€í ‚›€î …€ï ‡›€ð Š€ñ Œ›€ò €ó ‘›€ô ”€õ –›€ö ™€÷ ››€ø ž€ù  ›€ú £€û ¥›€ü ¨€ý ª›€þ ­€ÿ ¯›€ ²€ ´›€ ·€ ¹›€ ¼€ ¾›€ Á€ Û€ Æ€ È›€ Ë€ Í› ΀ Ñ€ Ó€ Ö€ Ø€ Û€ Ý€ à€ â€ å€ ç€ ê€ ì€ ï€ ñ€ ô€ ö€ ù€ û€ þ€ €! €" €# €$ €% €& €' €( €) €* €+ €, €- !€. #€/ &€0 (€1 +€2 -€3 0€4 2€5 5€6 7€7 :€8 <€9 ?€: A€; D€< F€= I€> K€? N€@ P€A S€B U€C X€D Z€E ]€F _€G b€H d€I g€J i€K l€L n€M q€N s€O v€P x€Q {€R }€S €€T ‚€U …€V ‡€W Š€X Œ€Y €Z ‘€[ ”€\ –€] ™€^ ›€_ ž€`  €a £€b ¥€c ¨€d ª€e ­€f ¯€g ²€h ´€i ·€j ¹€k ¼€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Œ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ȹl È€m ʃ€n Í€o σ€p Ò€q Ôƒ€r ×€s Ùƒ€t Ü€u Þƒ€v á€w ダx æ€y 胀z ë€{ 타| ð€} òƒ€~ õ€ ÷ƒ€€ ú€ üƒ€‚ ÿ€ƒƒ€„€…ƒ€† €‡ ƒ€ˆ€‰ƒ€Š€‹ƒ€Œ€Ž…€€ …€‘#€’%…€“(€”*…€•-€–/…€—2€˜4…€™7€š9…€›<€œ>…€A€žC…€ŸF€ H…€¡K€¢M…€£P€¤R…€¥U€¦W…€§Z€¨\…€©_€ªa…€«d€¬f…€­i€®k…€¯n€°p…€±s€²u…€³x€´z…€µ}€¶…€·‚€¸„…€¹‡€º‰…€»Œ€¼Ž…€½‘€¾“…€¿–€À˜…€Á›€Â…€Ã €Ä¢…€Å¥€Æ§…€Çª€È¬…€É¯€Ê±…€Ë´€Ì¶…€Í¹€Î»…€Ï¾€ÐÀ…€ÑÀÒÅ…€ÓÈ€ÔÊ…€ÕÍ€ÖÏ…€×Ò€ØÔ…€Ù×€ÚÙ…€ÛÜ€ÜÞ…€Ýá€Þã…€ßæ€àè…€áë€âí…€ãð€äò…€åõ€æ÷…€çú€èü…€éÿ€ê…€ë€ì…€í €î …€ï€ð…€ñ€ò…€ó€ô…€õ€ö…€÷"€ø$…€ù'€ú)…€û,€ü.…€ý1€þ3…€ÿ6€8…€;€=…€@€B…€E€G…€J€L…€ O€ Q…€ T€ V…€ YZ€\‡€_€a‡€d€f‡€i€k‡€n€p‡€s€u‡€x€z‡€}€‡€‚€„‡€ ‡€!‰‡€"Œ€#އ€$‘€%“‡€&–€'˜‡€(›€)‡€* €+¢‡€,¥€-§‡€.ª€/¬‡€0¯€1±‡€2´€3¶‡€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ž‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                È4Âm€5Äí€6Çm€7Éí€8Ìm€9Îí€:Ñm€;Óí€<Öm€=Øí€>Ûm€?Ýí€@àm€Aâí€Båm€Cçí€Dêm€Eìí€Fïm€Gñí€Hôm€Iöí€Jùm€Kûí€Lþm€Mí€Nm€Oí€Pm€Q í€R m€Sí€Tm€Uí€Vm€Wí€Xm€Yí€Z!m€[#í€\&m€](í€^+m€_-í€`0m€a2í€b5m€c7í€d:m€e<í€f?m€gAí€hDm€iFí€jIm€kKí€lNm€mPí€nSm€oUí€pXm€qZí€r]m€s_í€tbm€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst5.hdf000066400000000000000000000056261503061704500215710ustar00rootroot00000000000000È j\¾ ƾ Ú« îª ò8­ *« Gª K<­ ‡!j ¨½ ¬Ð º­ Ê-j ÷½ ûÐ ­ ,­ E2d wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1, February 17, 2005Valueslone DimVal0.1ªloneDim0.0ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0 j j ¾j ½ Ñ ­¾j½Ð loneVar0.0 j j ¾j ½ Ñ ­¾j½Ð  sdsVar0.0­­­­ hdifftst5.hdfCDF0.0created with HDF 4.2 Release 1hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst6.hdf000066400000000000000000000056261503061704500215720ustar00rootroot00000000000000È j\¾ ƾ Ú« îª ò8­ *« Gª K<­ ‡!j ¨½ ¬Ð º­ Ê-j ÷½ ûÐ ­ ,­ E2d wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1, February 17, 2005Valueslone DimVal0.1ªloneDim0.0ValuesfakeDim1 DimVal0.1ªfakeDim1Dim0.0 j j ¾j ½ Ñ ­¾j½Ð loneVar0.0 j j ¾j ½ Ñ ­¾j½Ð  sdsVar0.0­­­­ hdifftst6.hdfCDF0.0created with HDF 4.2 Release 1hdf4-hdf4.3.1/mfhdf/hdiff/testfiles/hdifftst7.hdf000066400000000000000000000005541503061704500215660ustar00rootroot00000000000000Ê\­&­?­TÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNCSA HDF Version 4.2 Release 1-post3, January 27, 2006­­g0­g1­g1.1hdf4-hdf4.3.1/mfhdf/hdiff/testhdiff.sh.in000066400000000000000000000103521503061704500201150ustar00rootroot00000000000000#! /bin/sh # Tests for the hdiff tool srcdir=@srcdir@ HDIFF=hdiff # The tool name HDIFF_BIN=`pwd`/$HDIFF # The path of the tool binary CMP='cmp -s' DIFF='diff -b -c' nerrors=0 verbose=yes test -d testfiles || mkdir testfiles # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All hdiff tests passed" else MESG 0 "hdiff tests failed: $nerrors" fi exit $nerrors } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable and (if $verbose is set) display the # difference between the actual output and the expected output. The # expected output is given as the first argument to this function and # the actual output file is calculated by replacing the `.ddl' with # `.out'. The actual output is not removed if $HDF4_NOCLEANUP has a # non-zero value. # TOOLTEST() { expect="$srcdir/testfiles/$1" actual="testfiles/`basename $1 .txt`.out" actual_err="testfiles/`basename $1 .txt`.err" shift # Run test. # Tflops interprets "$@" as "" when no parameter is given (e.g., the # case of missing file name). Changed it to use $@ till Tflops fixes it. TESTING $HDIFF $@ ( cd $srcdir/testfiles if [ "`uname -s`" = "TFLOPS O/S" ]; then ${TESTS_ENVIRONMENT} $HDIFF_BIN $@ else ${TESTS_ENVIRONMENT} $HDIFF_BIN "$@" fi ) >$actual 2>$actual_err cat $actual_err >> $actual # Used only to create the output file; uncomment to create if [ ! -f $expect ]; then # Create the expected file if it doesn't yet exist. echo " CREATED" cp $actual $expect # elif elif $DIFF $expect $actual; then echo " PASSED" else echo "*FAILED*" echo " Expected result (*.txt) differs from actual result (*.out)" nerrors="`expr $nerrors + 1`" test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/ /' fi # Clean up output file if test -z "$HDF4_NOCLEANUP"; then rm -f $actual $actual_err fi } RUN() { # help message TOOLTEST hdiff_01.txt # Compare global attributes only TOOLTEST hdiff_02.txt -g hdifftst1.hdf hdifftst2.hdf # Compare SD local attributes only TOOLTEST hdiff_03.txt -s hdifftst1.hdf hdifftst2.hdf # Compare SD data only TOOLTEST hdiff_04.txt -d hdifftst1.hdf hdifftst2.hdf # Compare Vdata data only TOOLTEST hdiff_05.txt -D hdifftst1.hdf hdifftst2.hdf # Print statistics TOOLTEST hdiff_06.txt -d -S hdifftst1.hdf hdifftst2.hdf # Compare SD data on variable(s) TOOLTEST hdiff_07.txt -d -v dset1 hdifftst1.hdf hdifftst2.hdf # Compare vdata on variable(s) TOOLTEST hdiff_08.txt -D -u vdata1 hdifftst1.hdf hdifftst2.hdf # Print difference up to count number TOOLTEST hdiff_09.txt -d -e 2 hdifftst1.hdf hdifftst2.hdf # Print difference when it is greater than limit TOOLTEST hdiff_10.txt -d -t 2 hdifftst1.hdf hdifftst2.hdf # no options TOOLTEST hdiff_11.txt hdifftst1.hdf hdifftst2.hdf # percent (relative) TOOLTEST hdiff_12.txt -d -p 0.05 -v dset3 hdifftst1.hdf hdifftst2.hdf # hyperslab reading TOOLTEST hdiff_13.txt hdifftst3.hdf hdifftst4.hdf # lone dim TOOLTEST hdiff_14.txt hdifftst5.hdf hdifftst6.hdf # group loop TOOLTEST hdiff_15.txt -b hdifftst7.hdf hdifftst7.hdf } ############################################################################## ### T H E T E S T S ### ############################################################################## # Print a beginning banner MESG 0 "Running hdiff tests" # compare output RUN # End of test, return exit code FINISH hdf4-hdf4.3.1/mfhdf/hrepack/000077500000000000000000000000001503061704500155305ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/hrepack/CMakeLists.txt000066400000000000000000000057421503061704500203000ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_HREPACK C) #INCLUDE_DIRECTORIES (${HDF4_SOURCE_DIR}/mfhdf/hdiff) set (hrepack_SRCS ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_an.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_gr.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_list.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_lsttable.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_main.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_opttable.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_parse.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_sds.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_utils.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_vg.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_vs.c ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_dim.c ) add_executable (hrepack ${hrepack_SRCS}) target_include_directories(hrepack PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hrepack STATIC) target_link_libraries (hrepack PRIVATE ${HDF4_MF_LIB_TARGET} ${LINK_COMP_LIBS}) else () TARGET_C_PROPERTIES (hrepack SHARED) target_link_libraries (hrepack PRIVATE ${HDF4_MF_LIBSH_TARGET} ${LINK_COMP_LIBS}) endif () set_target_properties (hrepack PROPERTIES COMPILE_DEFINITIONS "HDF") set_global_variable (HDF4_UTILS_TO_EXPORT "${HDF4_UTILS_TO_EXPORT};hrepack") add_executable (hrepack_check ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepack_check.c) target_include_directories(hrepack_check PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (hrepack_check STATIC) target_link_libraries (hrepack_check PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hrepack_check SHARED) target_link_libraries (hrepack_check PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (hrepack_check PROPERTIES COMPILE_DEFINITIONS "HDF") set (H4_DEP_EXECUTABLES hrepack) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Rules for Installation of tools using make Install target #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} EXPORT ${HDF4_EXPORTED_TARGETS} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/hrepack/CMakeTests.cmake000066400000000000000000000270321503061704500205410ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## #-- Copy all the dat files from the test directory into the source directory set (HDF4_REPACK_TEST_FILES hrepack_help.txt hrepack_check_help.txt image24pixel.txt image24plane.txt image8.txt info.txt ) foreach (h4_file ${HDF4_REPACK_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_HREPACK_SOURCE_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "hrepack_files") endforeach () add_custom_target(hrepack_files ALL COMMENT "Copying files needed by hrepack tests" DEPENDS ${hrepack_files_list}) #-- Adding test for test_hrepack for generating testfiles add_executable (test_hrepack ${HDF4_MFHDF_HREPACK_SOURCE_DIR}/hrepacktst.c) target_include_directories(test_hrepack PRIVATE "${HDF4_HDF_BINARY_DIR};${HDF4_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (test_hrepack STATIC) target_link_libraries (test_hrepack PRIVATE ${HDF4_MF_LIB_TARGET} ${LINK_COMP_LIBS}) else () TARGET_C_PROPERTIES (test_hrepack SHARED) target_link_libraries (test_hrepack PRIVATE ${HDF4_MF_LIBSH_TARGET} ${LINK_COMP_LIBS}) endif () macro (ADD_H4_TEST testname testtype testfile) if ("${testtype}" STREQUAL "SKIP") if (NOT HDF4_ENABLE_USING_MEMCHECKER) add_test ( NAME HREPACK-${testname}-SKIPPED COMMAND ${CMAKE_COMMAND} -E echo "SKIP -v -i ${PROJECT_BINARY_DIR}/${testfile} -o ${PROJECT_BINARY_DIR}/out-${testname}.${testfile} ${ARGN}" ) endif (NOT HDF4_ENABLE_USING_MEMCHECKER) else () add_test ( NAME HREPACK-${testname}-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove out-${testname}.${testfile} ) set_tests_properties (HREPACK-${testname}-clearall-objects PROPERTIES DEPENDS HREPACK-test_hrepack LABELS ${PROJECT_NAME}) add_test ( NAME HREPACK-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v -i ${PROJECT_BINARY_DIR}/${testfile} -o ${PROJECT_BINARY_DIR}/out-${testname}.${testfile} ${ARGN} ) set_tests_properties (HREPACK-${testname} PROPERTIES DEPENDS HREPACK-${testname}-clearall-objects LABELS ${PROJECT_NAME}) add_test ( NAME HREPACK-${testname}_DFF COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${PROJECT_BINARY_DIR}/${testfile} ${PROJECT_BINARY_DIR}/out-${testname}.${testfile} ) set_tests_properties (HREPACK-${testname}_DFF PROPERTIES DEPENDS HREPACK-${testname} LABELS ${PROJECT_NAME}) endif () endmacro () ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME HREPACK-hrepack-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove hrepack_help.out hrepack_check_help.out hrepacktst1.hdf hrepacktst2.hdf hrepacktst3.hdf ) if (NOT HDF4_ENABLE_USING_MEMCHECKER) add_test ( NAME HREPACK-hrepack_check COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${ARGN}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=hrepack_check_help.out" -D "TEST_EXPECT=1" -D "TEST_REFERENCE=hrepack_check_help.txt" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (HREPACK-hrepack_check PROPERTIES DEPENDS HREPACK-hrepack-clearall-objects LABELS ${PROJECT_NAME}) endif () if (NOT HDF4_ENABLE_USING_MEMCHECKER) add_test ( NAME HREPACK-hrepack_help COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=${ARGN}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=hrepack_help.out" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=hrepack_help.txt" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (HREPACK-hrepack_help PROPERTIES DEPENDS HREPACK-hrepack-clearall-objects LABELS ${PROJECT_NAME}) endif () add_test (NAME HREPACK-test_hrepack COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set_tests_properties (HREPACK-test_hrepack PROPERTIES DEPENDS HREPACK-hrepack-clearall-objects LABELS ${PROJECT_NAME}) set (HREPACK_FILE1 hrepacktst1.hdf) set (HREPACK_FILE2 hrepacktst2.hdf) set (HREPACK_FILE3 hrepacktst3.hdf) #------------------------------------------------------------------------- # test1: # HUFF #------------------------------------------------------------------------- # ADD_H4_TEST (HUFF "TEST" ${HREPACK_FILE1} -t "dset7:HUFF 1" -c dset7:10x8x6) # if ( sds_verifiy_comp("dset7",COMP_CODE_SKPHUFF, 1) == -1) # goto out; # if ( sds_verifiy_chunk("dset7",HDF_CHUNK|HDF_COMP,3,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test2: # RLE #------------------------------------------------------------------------- # ADD_H4_TEST(RLE "TEST" ${HREPACK_FILE1} -t dset4:RLE -c dset4:10x8) # if ( sds_verifiy_comp("dset4",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test3: # SDS SELECTED with GZIP, chunking SELECTED #------------------------------------------------------------------------- # ADD_H4_TEST(SDSGZIP_CHUNK "TEST" ${HREPACK_FILE1} -t "dset4:GZIP 6" -c dset4:10x8) # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 6) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test4: # SDS SELECTED with SZIP, chunking SELECTED #------------------------------------------------------------------------- # if (H4_HAVE_SZIP_ENCODER) ADD_H4_TEST(SDSSZIP_CHUNK "TEST" ${HREPACK_FILE1} -t "dset4:SZIP 8,EC" -c dset4:10x8) else () ADD_H4_TEST(SDSSZIP_CHUNK "SKIP" ${HREPACK_FILE1} -c dset4:10x8) endif () #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) # { # # if ( sds_verifiy_comp("dset4",COMP_CODE_SZIP, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test4: # SDS SELECTED with NONE, chunking SELECTED NONE #------------------------------------------------------------------------- # ADD_H4_TEST(SDSNONE_CHUNKNONE "TEST" ${HREPACK_FILE1} -t dset_chunk_comp:NONE -t dset_chunk:NONE -c dset_chunk_comp:NONE -c dset_chunk:NONE) # if ( sds_verifiy_comp("dset_chunk_comp",COMP_CODE_NONE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset_chunk",COMP_CODE_NONE, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk_comp",HDF_NONE,0,0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk",HDF_NONE,0,0) == -1) # goto out; #------------------------------------------------------------------------- # test5: # SDS SELECTED with all types, chunking SELECTED #------------------------------------------------------------------------- # if (H4_HAVE_SZIP_ENCODER) ADD_H4_TEST(SDS_CHUNK "TEST" ${HREPACK_FILE1} -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -t "dset7:SZIP 8,EC" -c dset4:10x8 -c dset5:10x8 -c dset6:10x8) else () ADD_H4_TEST(SDS_CHUNK "TEST" ${HREPACK_FILE1} -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -c dset4:10x8 -c dset5:10x8 -c dset6:10x8) endif () # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 9) == -1) # goto out; # if ( sds_verifiy_comp("dset5",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset6",COMP_CODE_SKPHUFF, 2) == -1) # goto out; #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) { # if ( sds_verifiy_comp("dset7",COMP_CODE_SZIP, 0) == -1) # goto out; # } #endif # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; # if ( sds_verifiy_chunk("dset5",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; # if ( sds_verifiy_chunk("dset6",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test6: # SDS SELECTED with all types, no chunking #------------------------------------------------------------------------- # if (H4_HAVE_SZIP_ENCODER) ADD_H4_TEST(SEL_NOCHUNK "TEST" ${HREPACK_FILE1} -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -t "dset7:SZIP 4,EC") else () ADD_H4_TEST(SEL_NOCHUNK "TEST" ${HREPACK_FILE1} -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2") endif () # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 9) == -1) # goto out; # if ( sds_verifiy_comp("dset5",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset6",COMP_CODE_SKPHUFF, 2) == -1) # goto out; #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) { # if ( sds_verifiy_comp("dset7",COMP_CODE_SZIP, 0) == -1) # goto out; # } #endif #------------------------------------------------------------------------- # test7: # compressing SDS ALL, chunking SELECTED NONE #------------------------------------------------------------------------- # ADD_H4_TEST(COMPALL_CHUNKNONE "TEST" ${HREPACK_FILE1} -t "*:GZIP 1" -c dset_chunk_comp:NONE -c dset_chunk:NONE) # if ( sds_verifiy_comp_all(COMP_CODE_DEFLATE, 1) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk_comp",HDF_NONE,0,0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk",HDF_NONE,0,0) == -1) # goto out; #------------------------------------------------------------------------- # test8: # no compressing, chunking ALL #------------------------------------------------------------------------- # ADD_H4_TEST(NOCOMP_CHUNKALL "TEST" ${HREPACK_FILE1} -c *:10x8) # if ( sds_verifiy_chunk_all(HDF_CHUNK,2,in_chunk_lengths,"dset7") == -1) # goto out; #------------------------------------------------------------------------- # test9: # compressing SDS ALL with GZIP #------------------------------------------------------------------------- # ADD_H4_TEST(GZIP "TEST" ${HREPACK_FILE1} -t "*:GZIP 1") # if ( sds_verifiy_comp_all(COMP_CODE_DEFLATE, 1) == -1) # goto out; #------------------------------------------------------------------------- # test10: # repack a big file using hyperslab reading/writing #------------------------------------------------------------------------- # ADD_H4_TEST(HYPERSLAB "TEST" ${HREPACK_FILE2}) #------------------------------------------------------------------------- # test11: # repack a file with vgroups #------------------------------------------------------------------------- # ADD_H4_TEST(VGROUP "TEST" ${HREPACK_FILE3}) # if (vg_verifygrpdep(HREPACK_FILE3,HREPACK_FILE3_OUT) != 0 ) # goto out; hdf4-hdf4.3.1/mfhdf/hrepack/Makefile.am000066400000000000000000000046031503061704500175670ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. hrepack_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/hdiff \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(hrepack_INCLUDES) $(DEFINES) ## Add hrepack specific linker flags here hrepack_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = hrepack hrepack_SOURCES = hrepack.c hrepack_an.c hrepack_gr.c \ hrepack_list.c hrepack_lsttable.c hrepack_main.c \ hrepack_opttable.c hrepack_parse.c \ hrepack_sds.c hrepack_utils.c \ hrepack_vg.c hrepack_vs.c hrepack_dim.c hrepack_LDADD = $(LIBMFHDF) $(LIBHDF) hrepack_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# TEST_SCRIPT=hrepack.sh TEST_PROG=test_hrepack check_SCRIPTS=hrepack.sh check_PROGRAMS = hrepack_check test_hrepack test_hrepack_SOURCES = hrepacktst.c test_hrepack_LDADD = $(LIBMFHDF) $(LIBHDF) -lm test_hrepack_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) hrepack_check_SOURCES = hrepack_check.c hrepack_check_LDADD = $(LIBMFHDF) $(LIBHDF) hrepack_check_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) # The hrepack.sh script needs test_hrepack to run first. hrepack.sh.chkexe_: test_hrepack.chkexe_ ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += *.hdf DISTCLEANFILES = hrepack.sh include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/hrepack/Makefile.in000066400000000000000000001422351503061704500176040ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = hrepack$(EXEEXT) check_PROGRAMS = hrepack_check$(EXEEXT) test_hrepack$(EXEEXT) TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT) subdir = mfhdf/hrepack ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = hrepack.sh hrepack_all.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_hrepack_OBJECTS = hrepack.$(OBJEXT) hrepack_an.$(OBJEXT) \ hrepack_gr.$(OBJEXT) hrepack_list.$(OBJEXT) \ hrepack_lsttable.$(OBJEXT) hrepack_main.$(OBJEXT) \ hrepack_opttable.$(OBJEXT) hrepack_parse.$(OBJEXT) \ hrepack_sds.$(OBJEXT) hrepack_utils.$(OBJEXT) \ hrepack_vg.$(OBJEXT) hrepack_vs.$(OBJEXT) \ hrepack_dim.$(OBJEXT) hrepack_OBJECTS = $(am_hrepack_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = hrepack_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(hrepack_LDFLAGS) $(LDFLAGS) -o $@ am_hrepack_check_OBJECTS = hrepack_check.$(OBJEXT) hrepack_check_OBJECTS = $(am_hrepack_check_OBJECTS) am_test_hrepack_OBJECTS = hrepacktst.$(OBJEXT) test_hrepack_OBJECTS = $(am_test_hrepack_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/hrepack.Po ./$(DEPDIR)/hrepack_an.Po \ ./$(DEPDIR)/hrepack_check.Po ./$(DEPDIR)/hrepack_dim.Po \ ./$(DEPDIR)/hrepack_gr.Po ./$(DEPDIR)/hrepack_list.Po \ ./$(DEPDIR)/hrepack_lsttable.Po ./$(DEPDIR)/hrepack_main.Po \ ./$(DEPDIR)/hrepack_opttable.Po ./$(DEPDIR)/hrepack_parse.Po \ ./$(DEPDIR)/hrepack_sds.Po ./$(DEPDIR)/hrepack_utils.Po \ ./$(DEPDIR)/hrepack_vg.Po ./$(DEPDIR)/hrepack_vs.Po \ ./$(DEPDIR)/hrepacktst.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(hrepack_SOURCES) $(hrepack_check_SOURCES) \ $(test_hrepack_SOURCES) DIST_SOURCES = $(hrepack_SOURCES) $(hrepack_check_SOURCES) \ $(test_hrepack_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = test_hrepack$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/hrepack.sh.in \ $(srcdir)/hrepack_all.sh.in $(top_srcdir)/bin/depcomp \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog *.hdf hrepack_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/hdiff \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(hrepack_INCLUDES) $(DEFINES) hrepack_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) hrepack_SOURCES = hrepack.c hrepack_an.c hrepack_gr.c \ hrepack_list.c hrepack_lsttable.c hrepack_main.c \ hrepack_opttable.c hrepack_parse.c \ hrepack_sds.c hrepack_utils.c \ hrepack_vg.c hrepack_vs.c hrepack_dim.c hrepack_LDADD = $(LIBMFHDF) $(LIBHDF) hrepack_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ############################################################################# TEST_SCRIPT = hrepack.sh TEST_PROG = test_hrepack check_SCRIPTS = hrepack.sh test_hrepack_SOURCES = hrepacktst.c test_hrepack_LDADD = $(LIBMFHDF) $(LIBHDF) -lm test_hrepack_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) hrepack_check_SOURCES = hrepack_check.c hrepack_check_LDADD = $(LIBMFHDF) $(LIBHDF) hrepack_check_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) DISTCLEANFILES = hrepack.sh # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/hrepack/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/hrepack/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): hrepack.sh: $(top_builddir)/config.status $(srcdir)/hrepack.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ hrepack_all.sh: $(top_builddir)/config.status $(srcdir)/hrepack_all.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 clean-checkPROGRAMS: @list='$(check_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 hrepack$(EXEEXT): $(hrepack_OBJECTS) $(hrepack_DEPENDENCIES) $(EXTRA_hrepack_DEPENDENCIES) @rm -f hrepack$(EXEEXT) $(AM_V_CCLD)$(hrepack_LINK) $(hrepack_OBJECTS) $(hrepack_LDADD) $(LIBS) hrepack_check$(EXEEXT): $(hrepack_check_OBJECTS) $(hrepack_check_DEPENDENCIES) $(EXTRA_hrepack_check_DEPENDENCIES) @rm -f hrepack_check$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hrepack_check_OBJECTS) $(hrepack_check_LDADD) $(LIBS) test_hrepack$(EXEEXT): $(test_hrepack_OBJECTS) $(test_hrepack_DEPENDENCIES) $(EXTRA_test_hrepack_DEPENDENCIES) @rm -f test_hrepack$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_hrepack_OBJECTS) $(test_hrepack_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_an.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_check.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_dim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_gr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_lsttable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_opttable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_sds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_vg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepack_vs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hrepacktst.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_hrepack.log: test_hrepack$(EXEEXT) @p='test_hrepack$(EXEEXT)'; \ b='test_hrepack'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/hrepack.Po -rm -f ./$(DEPDIR)/hrepack_an.Po -rm -f ./$(DEPDIR)/hrepack_check.Po -rm -f ./$(DEPDIR)/hrepack_dim.Po -rm -f ./$(DEPDIR)/hrepack_gr.Po -rm -f ./$(DEPDIR)/hrepack_list.Po -rm -f ./$(DEPDIR)/hrepack_lsttable.Po -rm -f ./$(DEPDIR)/hrepack_main.Po -rm -f ./$(DEPDIR)/hrepack_opttable.Po -rm -f ./$(DEPDIR)/hrepack_parse.Po -rm -f ./$(DEPDIR)/hrepack_sds.Po -rm -f ./$(DEPDIR)/hrepack_utils.Po -rm -f ./$(DEPDIR)/hrepack_vg.Po -rm -f ./$(DEPDIR)/hrepack_vs.Po -rm -f ./$(DEPDIR)/hrepacktst.Po -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-binPROGRAMS 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 ./$(DEPDIR)/hrepack.Po -rm -f ./$(DEPDIR)/hrepack_an.Po -rm -f ./$(DEPDIR)/hrepack_check.Po -rm -f ./$(DEPDIR)/hrepack_dim.Po -rm -f ./$(DEPDIR)/hrepack_gr.Po -rm -f ./$(DEPDIR)/hrepack_list.Po -rm -f ./$(DEPDIR)/hrepack_lsttable.Po -rm -f ./$(DEPDIR)/hrepack_main.Po -rm -f ./$(DEPDIR)/hrepack_opttable.Po -rm -f ./$(DEPDIR)/hrepack_parse.Po -rm -f ./$(DEPDIR)/hrepack_sds.Po -rm -f ./$(DEPDIR)/hrepack_utils.Po -rm -f ./$(DEPDIR)/hrepack_vg.Po -rm -f ./$(DEPDIR)/hrepack_vs.Po -rm -f ./$(DEPDIR)/hrepacktst.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # The hrepack.sh script needs test_hrepack to run first. hrepack.sh.chkexe_: test_hrepack.chkexe_ # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/hrepack/hrepack.c000066400000000000000000000315661503061704500173240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_parse.h" #include "hrepack_opttable.h" int print_options(options_t *options); int list_main(const char *infname, const char *outfname, options_t *options); /*------------------------------------------------------------------------- * Function: hrepack * * Purpose: locate all high-level HDF objects in the file * and compress/chunk them using options * * Algorithm: 2 traversals are made to the file; the 1st builds a list of * the high-level objects, the 2nd makes a copy of them, using the options; * the reason for the 1st traversal is to check for invalid object name requests * * Return: FAIL, SUCCEED * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 10, 2003 * *------------------------------------------------------------------------- */ int hrepack_main(const char *infile, const char *outfile, options_t *options) { options->trip = 0; /* also checks input */ if (print_options(options) < 0) return FAIL; /* first check for objects in input that are in the file */ if (list_main(infile, outfile, options) < 0) return FAIL; /* the real deal now */ options->trip = 1; if (options->verbose) printf("Making new file %s...\n", outfile); /* this can fail for different reasons */ if (list_main(infile, outfile, options) < 0) return FAIL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: hrepack_addcomp * * Purpose: add a compression -t option to table * Example: -t "*:GZIP 6" * * Return: FAIL, SUCCEED * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 23, 2003 * *------------------------------------------------------------------------- */ int hrepack_addcomp(const char *str, options_t *options) { obj_list_t *obj_list = NULL; /*one object list for the -t and -c option entry */ comp_info_t comp; /*compression info for the current -t option entry */ int n_objs; /*number of objects in the current -t or -c option entry */ int i; if (options->all_comp == 1) { printf("Error: Invalid compression input: '*' is present with other objects <%s>\n", str); return FAIL; } /* initialize parse struct to FAIL */ memset(&comp, FAIL, sizeof(comp_info_t)); /* parse the -t option */ if ((obj_list = parse_comp(str, &n_objs, &comp)) == NULL) return FAIL; /* search for the "*" all objects character */ for (i = 0; i < n_objs; i++) { if (strcmp("*", obj_list[i].obj) == 0) { /* if we are compressing all set the global comp type */ options->all_comp = 1; options->comp_g = comp; } } if (i > 1 && options->all_comp == 1) { printf("\nError: '*' cannot be with other objects, <%s>. Exiting...\n", str); goto out; } if (options->all_comp == 0) { if (options_add_comp(obj_list, n_objs, comp, options->op_tbl) < 0) goto out; } free(obj_list); return SUCCEED; out: free(obj_list); return FAIL; } /*------------------------------------------------------------------------- * Function: hrepack_addchunk * * Purpose: add a chunk -c option to table * Example: -c "*:2x2" , STR = "*:2x2" * * Return: FAIL, SUCCEED * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 23, 2003 * *------------------------------------------------------------------------- */ int hrepack_addchunk(const char *str, options_t *options) { obj_list_t *obj_list = NULL; /*one object list for the -t and -c option entry */ int n_objs; /*number of objects in the current -t or -c option entry */ int32 chunk_lengths[H4_MAX_VAR_DIMS]; /* chunk lengths along each dimension */ int chunk_rank; /*global rank for chunks */ int i, j; if (options->all_chunk == 1) { printf("Error: Invalid chunking input: '*' is present with other objects <%s>\n", str); return FAIL; } /* parse the -c option */ if ((obj_list = parse_chunk(str, &n_objs, chunk_lengths, &chunk_rank)) == NULL) return FAIL; /* search for the "*" all objects character */ for (i = 0; i < n_objs; i++) { if (strcmp("*", obj_list[i].obj) == 0) { /* if we are chunking all set the global chunking type */ options->all_chunk = 1; options->chunk_g.rank = chunk_rank; for (j = 0; j < chunk_rank; j++) options->chunk_g.chunk_lengths[j] = chunk_lengths[j]; } } if (i > 1) { printf("\nError: '*' cannot be with other objects, <%s>. Exiting...\n", str); goto out; } if (options->all_chunk == 0) { if (options_add_chunk(obj_list, n_objs, chunk_lengths, chunk_rank, options->op_tbl) < 0) goto out; } free(obj_list); return SUCCEED; out: free(obj_list); return FAIL; } /*------------------------------------------------------------------------- * Function: hrepack_init * * Purpose: initialize options * *------------------------------------------------------------------------- */ void hrepack_init(options_t *options, int verbose) { memset(options, 0, sizeof(options_t)); options->threshold = 1024; options->verbose = verbose; options_table_init(&(options->op_tbl)); } /*------------------------------------------------------------------------- * Function: hrepack_end * * Purpose: free options table * *------------------------------------------------------------------------- */ void hrepack_end(options_t *options) { options_table_free(options->op_tbl); } /*------------------------------------------------------------------------- * Function: print_options * * Purpose: print and check options * * Return: FAIL, SUCCEED * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 25, 2003 * *------------------------------------------------------------------------- */ int print_options(options_t *options) { int i, k, j, has_cp = 0, has_ck = 0; /*------------------------------------------------------------------------- * objects to chunk *------------------------------------------------------------------------- */ if (options->verbose) { printf("Objects to chunk are...\n"); if (options->all_chunk == 1) { printf("\tChunk all with dimension ["); for (j = 0; j < options->chunk_g.rank; j++) printf("%d ", options->chunk_g.chunk_lengths[j]); printf("]\n"); } } /* verbose */ for (i = 0; i < options->op_tbl->nelems; i++) { char *obj_name = options->op_tbl->objs[i].objpath; if (options->op_tbl->objs[i].chunk.rank > 0) { if (options->verbose) { printf("\t%s [", obj_name); for (k = 0; k < options->op_tbl->objs[i].chunk.rank; k++) printf("%d ", options->op_tbl->objs[i].chunk.chunk_lengths[k]); printf("]\n"); } has_ck = 1; } else if (options->op_tbl->objs[i].chunk.rank == -2) { if (options->verbose) printf("\t%s %s\n", obj_name, "NONE"); has_ck = 1; } } if (options->all_chunk == 1 && has_ck) { printf("Error: Invalid chunking input: '*' is present with other objects\n"); return FAIL; } /*------------------------------------------------------------------------- * objects to compress/uncompress *------------------------------------------------------------------------- */ if (options->verbose) { printf("Objects to compress are...\n"); if (options->all_comp == 1) { switch (options->comp_g.type) { default: break; case COMP_CODE_RLE: case COMP_CODE_SZIP: printf("\tCompress all with %s compression\n", get_scomp(options->comp_g.type)); break; case COMP_CODE_SKPHUFF: case COMP_CODE_DEFLATE: case COMP_CODE_JPEG: printf("\tCompress all with %s compression, parameter %d\n", get_scomp(options->comp_g.type), options->comp_g.info); break; }; } } /* verbose */ for (i = 0; i < options->op_tbl->nelems; i++) { pack_info_t obj = options->op_tbl->objs[i]; if (obj.comp.type > 0) { char *obj_name = obj.objpath; if (options->verbose) { printf("\t%s %s compression, parameter %d\n", obj_name, get_scomp(obj.comp.type), obj.comp.info); } has_cp = 1; } } if (options->all_comp == 1 && has_cp) { printf("Error: Invalid compression input: * is present with other objects\n"); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: read_info * * Purpose: read comp and chunk options from file * * Return: FAIL, SUCCEED * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 30, 2003 * *------------------------------------------------------------------------- */ int read_info(const char *filename, options_t *options) { char stype[10]; char info[1024]; /* compression info */ FILE *fp = NULL; char c; int i; int count; if ((fp = fopen(filename, "r")) == (FILE *)NULL) { printf("Cannot open options file %s", filename); return FAIL; } /* cycle until end of file reached */ while (1) { count = fscanf(fp, "%s", stype); if (count != 1) break; /*------------------------------------------------------------------------- * comp *------------------------------------------------------------------------- */ if (strcmp(stype, "-t") == 0) { /* find beginning of info */ i = 0; c = '0'; while (c != '"') { count = fscanf(fp, "%c", &c); if (count != 1) goto out; } c = '0'; /* go until end */ while (c != '"') { count = fscanf(fp, "%c", &c); if (count != 1) goto out; info[i] = c; i++; } info[i - 1] = '\0'; /*cut the last " */ if (hrepack_addcomp(info, options) < 0) goto out; } /*------------------------------------------------------------------------- * chunk *------------------------------------------------------------------------- */ else if (strcmp(stype, "-c") == 0) { /* find beginning of info */ i = 0; c = '0'; while (c != '"') { count = fscanf(fp, "%c", &c); if (count != 1) goto out; } c = '0'; /* go until end */ while (c != '"') { count = fscanf(fp, "%c", &c); if (count != 1) goto out; info[i] = c; i++; } info[i - 1] = '\0'; /*cut the last " */ if (hrepack_addchunk(info, options) < 0) goto out; } /*------------------------------------------------------------------------- * not valid *------------------------------------------------------------------------- */ else { printf("Bad file format for %s", filename); goto out; } } fclose(fp); return SUCCEED; out: if (fp != NULL) fclose(fp); return FAIL; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack.h000066400000000000000000000064231503061704500173230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_H #define HREPACK_H #include "hrepack_lsttable.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif #define NN_MODE 0 #define EC_MODE 1 #define TAG_GRP_IMAGE DFTAG_RIG #define TAG_GRP_DSET DFTAG_NDG /* a list of names */ typedef struct { char obj[H4_MAX_NC_NAME]; } obj_list_t; /* the type of compression and additional parameter */ typedef struct { comp_coder_t type; /* compression enum type */ int info; /* numerical parameter for several types of compression */ int szip_mode; /* NN_MODE or EC_MODE */ } comp_info_t; /* chunk lengths along each dimension and rank */ typedef struct { int32 chunk_lengths[H4_MAX_VAR_DIMS]; int rank; } chunk_info_t; /* information for one object, contains PATH, CHUNK info and COMP info */ typedef struct { char objpath[H4_MAX_NC_NAME]; /* name of object */ comp_info_t comp; /* compression information */ chunk_info_t chunk; /* chunk information */ } pack_info_t; /* store a list of all objects */ typedef struct { int size; int nelems; pack_info_t *objs; } options_table_t; /* all the above, ready to go to the hrepack call */ typedef struct { options_table_t *op_tbl; /*table with all -c and -t options */ int all_chunk; /*chunk all objects, input of "*" */ int all_comp; /*comp all objects, input of "*" */ comp_info_t comp_g; /*global compress INFO for the ALL case */ chunk_info_t chunk_g; /*global chunk INFO for the ALL case */ int verbose; /*verbose mode */ int trip; /*which cycle are we in */ int threshold; /*minimum size to compress, in bytes */ } options_t; #ifdef __cplusplus extern "C" { #endif int hrepack(const char *infname, const char *outfname, options_t *options); int hrepack_addcomp(const char *str, options_t *options); int hrepack_addchunk(const char *str, options_t *options); void hrepack_init(options_t *options, int verbose); void hrepack_end(options_t *options); int hrepack_main(const char *infile, const char *outfile, options_t *options); int list(const char *infname, const char *outfname, options_t *options); int read_info(const char *filename, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack.sh.in000066400000000000000000000251551503061704500201160ustar00rootroot00000000000000#! /bin/sh # srcdir=@srcdir@ # Determine whether the szip library is available USE_COMP_SZIP="@USE_COMP_SZIP@" SZIP_HAS_ENCODER="@SZIP_HAS_ENCODER@" TESTNAME=hrepack EXIT_SUCCESS=0 EXIT_FAILURE=1 HREPACK='./hrepack' # The tool name HREPACK_BIN="${TESTS_ENVIRONMENT} "`pwd`/$HREPACK # The path of the tool binary HDIFF='../hdiff/hdiff' # The hdiff tool name HDIFF_BIN="${TESTS_ENVIRONMENT} "`pwd`/$HDIFF # The path of the hdiff tool binary HDP='../dumper/hdp' # The dumper tool name HDP_BIN="${TESTS_ENVIRONMENT} "`pwd`/$HDP # The path of the tool binary RM='rm -f' DIFF=diff CMP='cmp -s' nerrors=0 # number of errors (0) quitonerr=0 # quit on error (not) noclean=0 # no cleaning temp. files (yes) only="" # dumper sub-command to test only except="" # dumper sub-command to test not # Print a $* message left justified in a field of 70 characters # MESSAGE() { SPACES=" " echo "$* $SPACES" | cut -c1-70 | tr -d '\012' } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { MESSAGE "Testing $*" } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Verifying". # VERIFY() { MESSAGE "Verifying $*" } # Print a message that a test has been skipped (because a required filter # was unavailable) SKIP() { TESTING $HREPACK $@ echo " -SKIP-" } # Call the hdiff tool # DIFFTEST() { VERIFY hdiff output $@ ( $RUNSERIAL $HDIFF_BIN "$@" ) RET=$? if [ $RET != 0 ] ; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" else echo " PASSED" fi } # Call hrepack # # call TOOLTEST_MAIN and delete $output file TOOLTEST() { infile=$2 outfile=out-$1.$2 shift shift # Run test. TESTING $HREPACK $@ ( $RUNSERIAL $HREPACK_BIN -v -i $infile -o $outfile "$@" ) RET=$? if [ $RET != 0 ] ; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" else echo " PASSED" DIFFTEST $infile $outfile fi rm -f $outfile } # ADD_HELP_TEST TOOLTEST_HELP() { expect="$1" actual="`basename $1 .txt`.out" actual_err="`basename $1 .txt`.err" shift # Run test. TESTING $HREPACK $@ ( $RUNSERIAL $HREPACK_BIN "$@" ) >$actual 2>$actual_err cat $actual_err >> $actual if [ ! -f $expect ]; then # Create the expect data file if it doesn't yet exist. echo " CREATED" cp $actual $expect-CREATED elif cmp -s $expect $actual; then echo " PASSED" else echo "*FAILED*" echo " Expected output (*.txt) differs from actual output (*.out)" nerrors="`expr $nerrors + 1`" fi # Clean up output file if test -z "$HDF_NOCLEANUP"; then rm -f $actual $actual_err fi } # This is different from $srcdir/../../bin/output_filter.sh STDOUT_FILTER() { result_file=$1 tmp_file=/tmp/htest_tmp_$$ # Filter name of files. cp $result_file $tmp_file sed -e '/^Opening file/d' -e '/^Making file/d' \ < $tmp_file > $result_file # cleanup rm -f $tmp_file } # # The tests # We use the files generated by test_hrepack # Each run generates ".out.hdf" and the tool hdiff is used to # compare the input and output files # # the tests are the same as the program hrepacktst, but run from the CLI # ############################################################################## ### T H E T E S T S ############################################################################## # prepare for test #TOOLTEST_HELP hrepack-help.txt -h #------------------------------------------------------------------------- # test1: # HUFF #------------------------------------------------------------------------- # TOOLTEST HUFF hrepacktst1.hdf -t "dset7:HUFF 1" -c dset7:10x8x6 # if ( sds_verifiy_comp("dset7",COMP_CODE_SKPHUFF, 1) == -1) # goto out; # if ( sds_verifiy_chunk("dset7",HDF_CHUNK|HDF_COMP,3,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test2: # RLE #------------------------------------------------------------------------- # TOOLTEST RLE hrepacktst1.hdf -t dset4:RLE -c dset4:10x8 # if ( sds_verifiy_comp("dset4",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test3: # SDS SELECTED with GZIP, chunking SELECTED #------------------------------------------------------------------------- # TOOLTEST SDSGZIP_CHUNK hrepacktst1.hdf -t "dset4:GZIP 6" -c dset4:10x8 # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 6) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test4: # SDS SELECTED with SZIP, chunking SELECTED #------------------------------------------------------------------------- # if test $SZIP_HAS_ENCODER != "yes"; then SKIP SDSSZIP_CHUNK hrepacktst1.hdf -c dset4:10x8 else TOOLTEST SDSSZIP_CHUNK hrepacktst1.hdf -t "dset4:SZIP 8,EC" -c dset4:10x8 fi #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) # { # # if ( sds_verifiy_comp("dset4",COMP_CODE_SZIP, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test4: # SDS SELECTED with NONE, chunking SELECTED NONE #------------------------------------------------------------------------- # TOOLTEST SDSNONE_CHUNKNONE hrepacktst1.hdf -t dset_chunk_comp:NONE -t dset_chunk:NONE -c dset_chunk_comp:NONE -c dset_chunk:NONE # if ( sds_verifiy_comp("dset_chunk_comp",COMP_CODE_NONE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset_chunk",COMP_CODE_NONE, 0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk_comp",HDF_NONE,0,0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk",HDF_NONE,0,0) == -1) # goto out; #------------------------------------------------------------------------- # test5: # SDS SELECTED with all types, chunking SELECTED #------------------------------------------------------------------------- # if test $SZIP_HAS_ENCODER != "yes"; then TOOLTEST SDS_CHUNK hrepacktst1.hdf -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -c dset4:10x8 -c dset5:10x8 -c dset6:10x8 else TOOLTEST SDS_CHUNK hrepacktst1.hdf -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -t "dset7:SZIP 8,EC" -c dset4:10x8 -c dset5:10x8 -c dset6:10x8 fi # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 9) == -1) # goto out; # if ( sds_verifiy_comp("dset5",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset6",COMP_CODE_SKPHUFF, 2) == -1) # goto out; #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) { # if ( sds_verifiy_comp("dset7",COMP_CODE_SZIP, 0) == -1) # goto out; # } #endif # if ( sds_verifiy_chunk("dset4",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; # if ( sds_verifiy_chunk("dset5",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; # if ( sds_verifiy_chunk("dset6",HDF_CHUNK|HDF_COMP,2,in_chunk_lengths) == -1) # goto out; #------------------------------------------------------------------------- # test6: # SDS SELECTED with all types, no chunking #------------------------------------------------------------------------- # if test $SZIP_HAS_ENCODER != "yes"; then TOOLTEST SEL_NOCHUNK hrepacktst1.hdf -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" else TOOLTEST SEL_NOCHUNK hrepacktst1.hdf -t "dset4:GZIP 9" -t dset5:RLE -t "dset6:HUFF 2" -t "dset7:SZIP 4,EC" fi # if ( sds_verifiy_comp("dset4",COMP_CODE_DEFLATE, 9) == -1) # goto out; # if ( sds_verifiy_comp("dset5",COMP_CODE_RLE, 0) == -1) # goto out; # if ( sds_verifiy_comp("dset6",COMP_CODE_SKPHUFF, 2) == -1) # goto out; #if defined (H4_HAVE_LIBSZ) # if (SZ_encoder_enabled()) { # if ( sds_verifiy_comp("dset7",COMP_CODE_SZIP, 0) == -1) # goto out; # } #endif #------------------------------------------------------------------------- # test7: # compressing SDS ALL, chunking SELECTED NONE #------------------------------------------------------------------------- # TOOLTEST COMPALL_CHUNKNONE hrepacktst1.hdf -t "*:GZIP 1" -c dset_chunk_comp:NONE -c dset_chunk:NONE # if ( sds_verifiy_comp_all(COMP_CODE_DEFLATE, 1) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk_comp",HDF_NONE,0,0) == -1) # goto out; # if ( sds_verifiy_chunk("dset_chunk",HDF_NONE,0,0) == -1) # goto out; #------------------------------------------------------------------------- # test8: # no compressing, chunking ALL #------------------------------------------------------------------------- # TOOLTEST NOCOMP_CHUNKALL hrepacktst1.hdf -c *:10x8 # if ( sds_verifiy_chunk_all(HDF_CHUNK,2,in_chunk_lengths,"dset7") == -1) # goto out; #------------------------------------------------------------------------- # test9: # compressing SDS ALL with GZIP #------------------------------------------------------------------------- # TOOLTEST GZIP hrepacktst1.hdf -t "*:GZIP 1" # if ( sds_verifiy_comp_all(COMP_CODE_DEFLATE, 1) == -1) # goto out; #------------------------------------------------------------------------- # test10: # repack a big file using hyperslab reading/writing #------------------------------------------------------------------------- # TOOLTEST HYPERSLAB hrepacktst2.hdf #------------------------------------------------------------------------- # test11: # repack a file with vgroups #------------------------------------------------------------------------- # TOOLTEST VGROUP hrepacktst3.hdf if test $nerrors -eq 0 ; then echo "All $TESTNAME tests passed." exit $EXIT_SUCCESS else echo "$TESTNAME tests failed with $nerrors errors." exit $EXIT_FAILURE fi hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_all.sh.in000066400000000000000000000004051503061704500207350ustar00rootroot00000000000000#!/bin/sh srcdir=@srcdir@ for i in ./*.hdf do echo "--------------------------------------------------" echo $i echo "--------------------------------------------------" ${TESTS_ENVIRONMENT} ../hrepack -v -i $i -o ${i}.output.hdf -t "*:GZIP 1" done ls -l hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_an.c000066400000000000000000000173541503061704500200010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "hdf.h" #include "mfhdf.h" #include "hrepack_an.h" /*------------------------------------------------------------------------- * Function: copy_vg_an * * Purpose: copy Vgroup ANs * * Return: ok, 1, -1 not ok * *------------------------------------------------------------------------- */ int copy_vg_an(int32 infile_id, int32 outfile_id, int32 vgroup_id, int32 vgroup_id_out, char *path, options_t *options) { int32 ref_in, tag_in, ref_out, tag_out; if (options->trip == 0) { return 1; } if ((ref_in = VQueryref(vgroup_id)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_in = VQuerytag(vgroup_id)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } if ((ref_out = VQueryref(vgroup_id_out)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_out = VQuerytag(vgroup_id_out)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } if (copy_an(infile_id, outfile_id, ref_in, tag_in, ref_out, tag_out, path, options) < 0) return FAIL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: copy_vs_an * * Purpose: copy Vdata ANs * * Return: ok, 1, -1 not ok * *------------------------------------------------------------------------- */ int copy_vs_an(int32 infile_id, int32 outfile_id, int32 vdata_id, int32 vdata_id_out, char *path, options_t *options) { int32 ref_in, tag_in, ref_out, tag_out; if (options->trip == 0) { return 1; } if ((ref_in = VSQueryref(vdata_id)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_in = VSQuerytag(vdata_id)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } if ((ref_out = VSQueryref(vdata_id_out)) == FAIL) { printf("Failed to get ref for <%s>\n", path); return -1; } if ((tag_out = VSQuerytag(vdata_id_out)) == FAIL) { printf("Failed to get tag for <%s>\n", path); return -1; } if (copy_an(infile_id, outfile_id, ref_in, tag_in, ref_out, tag_out, path, options) < 0) return FAIL; return 1; } /*------------------------------------------------------------------------- * Function: copy_an_data * * Purpose: copy DATA ANs * * Return: ok, 1, -1 not ok * *------------------------------------------------------------------------- */ int copy_an_data(int32 infile_id, int32 outfile_id, int32 ref_in, int32 tag_in, int32 ref_out, int32 tag_out, ann_type type, char *path, options_t *options) { int32 an_id, /* AN interface identifier */ an_out, /* AN interface identifier */ ann_id, /* an annotation identifier */ ann_out, /* an annotation identifier */ ann_length, /* length of the text in an annotation */ n_anno; int i; /* position of an annotation */ char *buf; /* buffer to hold the read annotation */ int is_label = (type == AN_DATA_LABEL) ? 1 : 0; int ret = 0; if (options->trip == 0) { return 1; } /* Initialize the AN interface */ an_id = ANstart(infile_id); an_out = ANstart(outfile_id); /* Get the number of ANs in this object */ if ((n_anno = ANnumann(an_id, type, (uint16)tag_in, (uint16)ref_in)) == FAIL) { printf("Failed to get annotations for <%s>\n", path); return -1; } for (i = 0; i < n_anno; i++) { /*------------------------------------------------------------------------- * read *------------------------------------------------------------------------- */ if ((ann_id = ANselect(an_id, i, type)) == FAIL) { printf("Failed to select AN %d of <%s>\n", i, path); continue; } if ((ann_length = ANannlen(ann_id)) == FAIL) { printf("Failed to get AN %d length of <%s>\n", i, path); continue; } /* * Read the data label. Note that the size of the buffer, * i.e., the third parameter, is 1 character more than the length of * the data label; that is for the null character. It is not the case * when a description is retrieved because the description does not * necessarily end with a null character. * */ if (is_label) ann_length++; if ((buf = (char *)malloc((ann_length) * sizeof(int8))) == NULL) { printf("Failed to get memory for AN %d of <%s>\n", i, path); continue; } if (ANreadann(ann_id, buf, ann_length) == FAIL) { printf("Failed to read AN %d of <%s>\n", i, path); free(buf); continue; } if (ANendaccess(ann_id) == FAIL) { printf("Failed to end AN %d of <%s>\n", i, path); free(buf); continue; } /*------------------------------------------------------------------------- * write *------------------------------------------------------------------------- */ /* Create the data label for the vgroup identified by its tag and ref number */ if ((ann_out = ANcreate(an_out, (uint16)tag_out, (uint16)ref_out, type)) == FAIL) { printf("Failed to create AN %d of <%s>\n", i, path); continue; } /* Write the annotation */ if (ANwriteann(ann_out, buf, ann_length) == FAIL) { printf("Failed to write AN %d of <%s>\n", i, path); } if (ANendaccess(ann_out) == FAIL) { printf("Failed to end AN %d of <%s>\n", i, path); free(buf); continue; } free(buf); } /* Terminate access to the AN interface */ if (ANend(an_id) == FAIL) { printf("Failed close AN for <%s>\n", path); ret = -1; } if (ANend(an_out) == FAIL) { printf("Failed close AN for <%s>\n", path); ret = -1; } return ret; } /*------------------------------------------------------------------------- * Function: copy_an * * Purpose: copy DATA ANs (AN_DATA_LABEL and AN_DATA_DESC) * * Return: ok, 1, -1 not ok * *------------------------------------------------------------------------- */ int copy_an(int32 infile_id, int32 outfile_id, int32 ref_in, int32 tag_in, int32 ref_out, int32 tag_out, char *path, options_t *options) { if (copy_an_data(infile_id, outfile_id, ref_in, tag_in, ref_out, tag_out, AN_DATA_LABEL, path, options) < 0) return FAIL; if (copy_an_data(infile_id, outfile_id, ref_in, tag_in, ref_out, tag_out, AN_DATA_DESC, path, options) < 0) return FAIL; return SUCCEED; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_an.h000066400000000000000000000032551503061704500200010ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_AN_H #define HREPACK_AN_H #include "hrepack.h" #ifdef __cplusplus extern "C" { #endif int copy_an(int32 infile_id, int32 outfile_id, int32 ref_in, int32 tag_in, int32 ref_out, int32 tag_out, char *path, options_t *options); int copy_vg_an(int32 infile_id, int32 outfile_id, int32 vgroup_id, int32 vgroup_id_out, char *path, options_t *options); int copy_vs_an(int32 infile_id, int32 outfile_id, int32 vdata_id, int32 vdata_id_out, char *path, options_t *options); int copy_an_data(int32 infile_id, int32 outfile_id, int32 ref_in, int32 tag_in, int32 ref_out, int32 tag_out, ann_type type, char *path, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_AN_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_check.c000066400000000000000000000214531503061704500204530ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" static void usage(void); static int sds_get_compck(char *fname, char *sds_name); static int sds_get_all(char *fname); static const char *get_schunk(int32 flags); static const char *get_scomp(comp_coder_t code); int main(int argc, char **argv) { if (argc == 3) sds_get_compck(argv[1], argv[2]); else if (argc == 2) sds_get_all(argv[1]); else { usage(); return 1; } return 0; } /*------------------------------------------------------------------------- * Function: sds_get_compck * * Purpose: utility function to verify chunking and compressing for SDS_NAME * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 3, 2003 * *------------------------------------------------------------------------- */ static int sds_get_compck(char *fname, char *sds_name) { HDF_CHUNK_DEF chunk_def; /* chunk definition read */ comp_coder_t comp_type; /* to retrieve compression type into */ comp_info cinfo; /* compression structure */ int32 chunk_flags; /* chunking flag */ int32 sd_id, sds_id, sds_index, dimsizes[H4_MAX_VAR_DIMS], /* dimensional size of SDS */ nattrs, /* number of SDS attributes */ dtype, /* SDS data type */ rank; /* rank of SDS */ int i; if ((sd_id = SDstart(fname, DFACC_RDONLY)) == FAIL) { printf("Error: cannot open file <%s>\n", fname); return -1; } sds_index = SDnametoindex(sd_id, sds_name); if ((sds_id = SDselect(sd_id, sds_index)) == FAIL) { printf("Error: cannot open sds <%s>\n", sds_name); SDend(sd_id); return -1; } SDgetchunkinfo(sds_id, &chunk_def, &chunk_flags); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ SDgetinfo(sds_id, sds_name, &rank, dimsizes, &dtype, &nattrs); /*------------------------------------------------------------------------- * print the dimensions *------------------------------------------------------------------------- */ printf("dimensions: ["); for (i = 0; i < rank; i++) { printf("%d ", dimsizes[i]); } printf("]\n"); /*------------------------------------------------------------------------- * print the chunk info *------------------------------------------------------------------------- */ printf("chunk flags: %s \n", get_schunk(chunk_flags)); if (HDF_NONE != chunk_flags) { printf("chunk dimension: ["); for (i = 0; i < rank; i++) { printf("%d ", chunk_def.chunk_lengths[i]); } printf("]\n"); } /*------------------------------------------------------------------------- * retrieve the compression info *------------------------------------------------------------------------- */ comp_type = COMP_CODE_NONE; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(comp_info)); SDgetcompinfo(sds_id, &comp_type, &cinfo); printf("compression type: %s \n", get_scomp(comp_type)); if (COMP_CODE_NONE != comp_type) { switch (comp_type) { default: break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: printf("skipping factor: %d \n", cinfo.skphuff.skp_size); break; case COMP_CODE_DEFLATE: printf("level: %d \n", cinfo.deflate.level); break; case COMP_CODE_JPEG: printf("quality factor: %d \n", cinfo.jpeg.quality); break; case COMP_CODE_SZIP: printf("pixels per block: %d \n", cinfo.szip.pixels_per_block); break; }; } /* terminate access to the sds */ SDendaccess(sds_id); /* terminate access to the sd interface */ SDend(sd_id); return 0; } /*------------------------------------------------------------------------- * Function: sds_get_all * * Purpose: utility function to ptint all SDSs names * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 3, 2003 * *------------------------------------------------------------------------- */ static int sds_get_all(char *fname) { int32 sd_id, sds_id, sds_index, n_datasets, /* number of datasets in the file */ n_file_attrs, /* number of file attributes */ data_type, /* number type */ rrank, /* read rank */ n_attrs, /* number of attributes */ dim_sizes[H4_MAX_VAR_DIMS]; /* dimensions of an image */ char name[H4_MAX_GR_NAME]; /* name of dataset */ /* initialize the sd interface */ if ((sd_id = SDstart(fname, DFACC_RDONLY)) == FAIL) { printf("Error: cannot open file <%s>\n", fname); return -1; } /* determine the number of data sets in the file */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attrs) == FAIL) { printf("Error: Cannot get file information\n"); SDend(sd_id); return -1; } printf("List of sds:\n"); for (sds_index = 0; sds_index < n_datasets; sds_index++) { sds_id = SDselect(sd_id, sds_index); /* skip dimension scales */ if (SDiscoordvar(sds_id)) { SDendaccess(sds_id); continue; } SDgetinfo(sds_id, name, &rrank, dim_sizes, &data_type, &n_attrs); printf(" %s\n", name); /* terminate access to the current dataset */ SDendaccess(sds_id); } /* terminate access to the sd interface */ SDend(sd_id); return 0; } /*------------------------------------------------------------------------- * Function: get_scomp * * Purpose: return the compression type as a string * *------------------------------------------------------------------------- */ static const char * get_scomp(comp_coder_t code) { if (code == COMP_CODE_RLE) return "RLE"; else if (code == COMP_CODE_SKPHUFF) return "HUFF"; else if (code == COMP_CODE_DEFLATE) return "GZIP"; else if (code == COMP_CODE_JPEG) return "JPEG"; if (code == COMP_CODE_SZIP) return "SZIP"; else if (code == COMP_CODE_NONE) return "NONE"; else { printf("Input Error in compression type\n"); exit(1); } /* not reached */ return NULL; } /*------------------------------------------------------------------------- * Function: get_schunk * * Purpose: return the chunking flags as a string * * Return: void * *------------------------------------------------------------------------- */ static const char * get_schunk(int32 flags) { if ((flags & HDF_CHUNK) && (flags & HDF_COMP)) return "HDF_CHUNK & HDF_COMP"; else if (flags == HDF_CHUNK) return "HDF_CHUNK"; else if (flags == HDF_COMP) return "HDF_COMP"; else if (flags == HDF_NONE) return "HDF_NONE"; else return "Invalid chunk flags"; } /*------------------------------------------------------------------------- * Function: usage * * Purpose: print usage * * Return: void * *------------------------------------------------------------------------- */ static void usage(void) { printf("hrepack_check file_name \n"); printf(" file_name HDF File\n"); printf(" sds_name SDS name (if no name, a list of all names is printed)\n"); } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_check_help.txt000066400000000000000000000002021503061704500220450ustar00rootroot00000000000000hrepack_check file_name file_name HDF File sds_name SDS name (if no name, a list of all names is printed) hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_dim.c000066400000000000000000000731361503061704500201540ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_utils.h" #include "hrepack_sds.h" #include "hrepack_dim.h" /* match name between 2 dim_table_t type lists */ typedef struct match_dim_name_t { int32 ref; /* reference */ char dim_name[H4_MAX_NC_NAME]; /* name */ int flags[2]; /* name exists 1, no 0 */ } match_dim_name_t; /* table for match_dim_name_t */ typedef struct match_dim_table_t { int size; int nobjs; match_dim_name_t *objs; } match_dim_table_t; /*------------------------------------------------------------------------- * local prototypes *------------------------------------------------------------------------- */ /* methods for match_dim_table_t */ static void match_dim_table_free(match_dim_table_t *mdim_tbl); static void match_dim_table_init(match_dim_table_t **tbl); static void match_dim_table_add(match_dim_table_t *mdim_tbl, unsigned *flags, char *dim_name, int32 ref); /* generate the SDS */ static int gen_dim(char *name, int32 ref, int32 sd_in, int32 sd_out, options_t *options); /*------------------------------------------------------------------------- * Function: match_dim * * Purpose: generate "lone" dimensions. * Find common dimension names; the algorithm used for this search is the * cosequential match algorithm and is described in * Folk, Michael; Zoellick, Bill. (1992). File Structures. Addison-Wesley. * * Return: void * * Programmer: Pedro Vicente Nunes, pvn@hdfgroup.org * * Date: May 10, 2006 * *------------------------------------------------------------------------- */ void match_dim(int32 sd_in, int32 sd_out, dim_table_t *dt1, dim_table_t *dt2, options_t *options) { int cmp; int more_names_exist = (dt1->nobjs > 0 && dt2->nobjs > 0) ? 1 : 0; int curr1 = 0; int curr2 = 0; /*build a common list */ match_dim_table_t *mattbl = NULL; unsigned inlist[2]; int i; #if defined(HREPACK_DEBUG) for (i = 0; i < dt1->nobjs; i++) { printf("%s\n", dt1->objs[i].dim_name); } for (i = 0; i < dt2->nobjs; i++) { printf("%s\n", dt2->objs[i].dim_name); } #endif /*------------------------------------------------------------------------- * build the list *------------------------------------------------------------------------- */ match_dim_table_init(&mattbl); while (more_names_exist) { cmp = strcmp(dt1->objs[curr1].dim_name, dt2->objs[curr2].dim_name); if (cmp == 0) { inlist[0] = 1; inlist[1] = 1; match_dim_table_add(mattbl, inlist, dt1->objs[curr1].dim_name, dt1->objs[curr1].ref); curr1++; curr2++; } else if (cmp < 0) { inlist[0] = 1; inlist[1] = 0; match_dim_table_add(mattbl, inlist, dt1->objs[curr1].dim_name, dt1->objs[curr1].ref); curr1++; } else { inlist[0] = 0; inlist[1] = 1; match_dim_table_add(mattbl, inlist, dt2->objs[curr2].dim_name, dt2->objs[curr2].ref); curr2++; } more_names_exist = (curr1 < dt1->nobjs && curr2 < dt1->nobjs) ? 1 : 0; } /* end while */ /* dt1 did not end */ if (curr1 < dt1->nobjs) { while (curr1 < dt1->nobjs) { inlist[0] = 1; inlist[1] = 0; match_dim_table_add(mattbl, inlist, dt1->objs[curr1].dim_name, dt1->objs[curr1].ref); curr1++; } } /* dt2 did not end */ if (curr2 < dt2->nobjs) { while (curr2 < dt2->nobjs) { inlist[0] = 0; inlist[1] = 1; match_dim_table_add(mattbl, inlist, dt2->objs[curr2].dim_name, dt2->objs[curr2].ref); curr2++; } } /*------------------------------------------------------------------------- * print the list *------------------------------------------------------------------------- */ #if defined(HREPACK_DEBUG) { char c1, c2; if (options->verbose) { printf("---------------------------------------\n"); printf("list1 list2\n"); printf("---------------------------------------\n"); for (i = 0; i < mattbl->nobjs; i++) { c1 = (char)((mattbl->objs[i].flags[0]) ? 'x' : ' '); c2 = (char)((mattbl->objs[i].flags[1]) ? 'x' : ' '); printf("%5c %6c %-15s\n", c1, c2, mattbl->objs[i].dim_name); } printf("\n"); } } #endif /*------------------------------------------------------------------------- * get objects from list1 not in list2 *------------------------------------------------------------------------- */ for (i = 0; i < mattbl->nobjs; i++) { if (mattbl->objs[i].flags[0] && (!mattbl->objs[i].flags[1])) { gen_dim(mattbl->objs[i].dim_name, mattbl->objs[i].ref, sd_in, sd_out, options); } } /* free table */ match_dim_table_free(mattbl); } /*------------------------------------------------------------------------- * Function: gen_dim * * Purpose: generate "lone" dimensions. * * Return: -1 error, 1 ok * * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu * * Date: May 10, 2006 * *------------------------------------------------------------------------- */ static int gen_dim(char *name, /* name of SDS */ int32 ref, /* ref of SDS */ int32 sd_in, int32 sd_out, options_t *options) { int32 sds_id, /* data set identifier */ sds_out = FAIL, /* data set identifier */ dim_id, /* dimension identifier */ sds_index, /* index number of the data set */ dtype, /* SDS data type */ dimsizes[H4_MAX_VAR_DIMS], /* dimensions of SDS */ start[H4_MAX_VAR_DIMS], /* read start */ edges[H4_MAX_VAR_DIMS], /* read edges */ nattrs, /* number of SDS attributes */ rank, /* rank of SDS */ numtype, /* number type */ eltsz, /* element size */ nelms; /* number of elements */ char sds_name[H4_MAX_NC_NAME]; void *buf = NULL; int i, j, ret = 1; int info; /* temporary int compression information */ comp_coder_t comp_type; /* compression type requested */ comp_coder_t comp_type_in; /* compression type original */ comp_info c_info; /* compression information requested */ comp_info c_info_in; /* compression information original */ HDF_CHUNK_DEF chunk_def; /* chunk definition */ HDF_CHUNK_DEF chunk_def_in; /* chunk definition original */ int32 chunk_flags; /* chunk flags */ int32 chunk_flags_in; /* chunk flags original*/ int szip_mode; /* szip mode, EC, NN */ intn empty_sds; int have_info = 0; sds_index = SDreftoindex(sd_in, ref); sds_id = SDselect(sd_in, sds_index); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ if (SDgetinfo(sds_id, sds_name, &rank, dimsizes, &dtype, &nattrs) == FAIL) { printf("Could not get information for SDS\n"); SDendaccess(sds_id); return -1; } /*------------------------------------------------------------------------- * check if the input SDS is empty. if so , avoid some operations (mainly read, write) *------------------------------------------------------------------------- */ if (SDcheckempty(sds_id, &empty_sds) == FAIL) { printf("Failed to check empty SDS <%s>\n", sds_name); ret = -1; goto out; } /*------------------------------------------------------------------------- * element size and number of elements *------------------------------------------------------------------------- */ /* compute the number of the bytes for each value */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); /* set edges of SDS */ nelms = 1; for (j = 0; j < rank; j++) { nelms *= dimsizes[j]; edges[j] = dimsizes[j]; start[j] = 0; } /*------------------------------------------------------------------------- * get the original compression/chunk information from the object *------------------------------------------------------------------------- */ if (empty_sds == 0) { comp_type_in = COMP_CODE_NONE; /* reset variables before retrieving information */ memset(&c_info_in, 0, sizeof(comp_info)); if (SDgetcompinfo(sds_id, &comp_type_in, &c_info_in) == FAIL) { printf("Could not get compression information for SDS <%s>\n", sds_name); SDendaccess(sds_id); return -1; } /* get chunk lengths */ if (SDgetchunkinfo(sds_id, &chunk_def_in, &chunk_flags_in) == FAIL) { printf("Could not get chunking information for SDS <%s>\n", sds_name); SDendaccess(sds_id); return -1; } /* retrieve the compress information if so */ if ((HDF_CHUNK | HDF_COMP) == chunk_flags_in) { chunk_def_in.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_RLE: chunk_def_in.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def_in.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def_in.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def_in.comp.comp_type = COMP_CODE_DEFLATE; chunk_def_in.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ chunk_def_in.comp.comp_type = COMP_CODE_SZIP; chunk_def_in.comp.cinfo.szip = c_info_in.szip; #else printf("Error: SZIP compression is not available <%s>\n", sds_name); SDendaccess(sds_id); return -1; #endif break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type_in, sds_name); }; } /*------------------------------------------------------------------------- * set the default values to the ones read from the object *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * compression *------------------------------------------------------------------------- */ comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_NBIT: printf("Nbit compression not supported in this version <%s>\n", sds_name); break; case COMP_CODE_NONE: break; case COMP_CODE_RLE: break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ info = c_info_in.szip.pixels_per_block; if (c_info_in.szip.options_mask & SZ_EC_OPTION_MASK) { szip_mode = EC_MODE; } else if (c_info_in.szip.options_mask & SZ_NN_OPTION_MASK) { szip_mode = NN_MODE; } #else printf("SZIP compression not supported in this version <%s>\n", sds_name); #endif break; case COMP_CODE_SKPHUFF: info = c_info_in.skphuff.skp_size; break; case COMP_CODE_DEFLATE: info = c_info_in.deflate.level; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type, sds_name); break; }; /*------------------------------------------------------------------------- * chunking *------------------------------------------------------------------------- */ chunk_flags = chunk_flags_in; if ((HDF_CHUNK) == chunk_flags) { for (i = 0; i < rank; i++) chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } else if ((HDF_CHUNK | HDF_COMP) == chunk_flags) { for (i = 0; i < rank; i++) { chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; chunk_def.comp.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } chunk_def.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_RLE: chunk_def.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ chunk_def.comp.comp_type = COMP_CODE_SZIP; chunk_def.comp.cinfo.szip = c_info_in.szip; #else printf("Error: SZIP compression not available in %d <%s>\n", comp_type_in, sds_name); #endif break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type_in, sds_name); }; } /*------------------------------------------------------------------------- * get the compression/chunk information of this object from the table * translate to usable information * this is done ONLY for the second trip inspection *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip > 0) { have_info = options_get_info(options, /* global options */ &chunk_flags, /* chunk flags OUT */ &chunk_def, /* chunk definition OUT */ &info, /* compression information OUT */ &szip_mode, /* compression information OUT */ &comp_type, /* compression type OUT */ rank, /* rank of object IN */ sds_name, /* path of object IN */ 1, /* number of GR image planes (for SZIP), IN */ dimsizes, /* dimensions (for SZIP), IN */ dtype /* numeric type ( for SZIP), IN */ ); if (have_info == FAIL) goto out; } /* check inspection mode */ /*------------------------------------------------------------------------- * check for maximum number of chunks threshold *------------------------------------------------------------------------- */ if (options->trip > 0) { int count = 1, nchunks; int maxchunk = INT_MAX; if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { for (j = 0; j < rank; j++) { count *= chunk_def.chunk_lengths[j]; } nchunks = nelms / count; if (nchunks > maxchunk) { printf("Warning: number of chunks is %d (greater than %d). Not chunking <%s>\n", nchunks, maxchunk, sds_name); chunk_flags = HDF_NONE; } } } /*------------------------------------------------------------------------- * check for objects too small *------------------------------------------------------------------------- */ if (have_info == 1 && options->trip > 0 && nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ chunk_flags = chunk_flags_in; comp_type = comp_type_in; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, sds_name); } } } /* empty_sds */ /*------------------------------------------------------------------------- * print the PATH, COMP and CHUNK information *------------------------------------------------------------------------- */ if (options->verbose) { int pr_comp_type = 0; int pr_chunk_flags; if (options->trip == 0) pr_chunk_flags = chunk_flags_in; else pr_chunk_flags = chunk_flags; if (comp_type > 0) { pr_comp_type = comp_type; } else { if (pr_chunk_flags == (HDF_CHUNK | HDF_COMP)) { pr_comp_type = chunk_def.comp.comp_type; } } printf(PFORMAT, (pr_chunk_flags > 0) ? "chunk" : "", /*chunk information */ (pr_comp_type > 0) ? get_scomp(pr_comp_type) : "", /*compression information */ "", /*compression ratio */ name); /*name*/ } /*------------------------------------------------------------------------- * check if the requested compression is valid * SDSs do not support JPEG *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip > 0 && empty_sds == 0) { switch (comp_type) { case COMP_CODE_NONE: case COMP_CODE_RLE: case COMP_CODE_SKPHUFF: case COMP_CODE_DEFLATE: case COMP_CODE_SZIP: case COMP_CODE_NBIT: break; case COMP_CODE_JPEG: printf("Error: JPEG compression is not available for <%s>\n", sds_name); ret = FAIL; goto out; break; default: printf("Error: Unrecognized compression code %d in <%s>\n", comp_type_in, sds_name); ret = FAIL; goto out; } } /* check inspection mode */ /*------------------------------------------------------------------------- * create new SDS *------------------------------------------------------------------------- */ if ((sds_out = SDcreate(sd_out, sds_name, dtype, rank, dimsizes)) == FAIL) { printf("Failed to create new SDS <%s>\n", sds_name); ret = -1; goto out; } /*------------------------------------------------------------------------- * make it a "dimension" *------------------------------------------------------------------------- */ if ((dim_id = SDgetdimid(sds_out, 0)) == FAIL) { printf("Failed to get dimension ID for SDS <%s>\n", sds_name); ret = -1; goto out; } if (SDsetdimname(dim_id, sds_name) == FAIL) { printf("Failed to set dimension name for SDS <%s>\n", sds_name); ret = -1; goto out; } /*------------------------------------------------------------------------- * set chunk * * Chunked -> flags = HDF_CHUNK * Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP * Non-chunked -> flags = HDF_NONE *------------------------------------------------------------------------- */ if (empty_sds == 0) { /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { if (SDsetchunk(sds_out, chunk_def, chunk_flags) == FAIL) { printf("Error: Failed to set chunk dimensions for <%s>\n", sds_name); ret = -1; goto out; } } /*------------------------------------------------------------------------- * set compression * * COMP_CODE_RLE -> simple RLE encoding * COMP_CODE_SKPHUFF -> Skipping huffman encoding * COMP_CODE_DEFLATE -> gzip 'deflate' encoding *------------------------------------------------------------------------- */ /* use compress without chunk-in */ else if (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE) { if (nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ comp_type = COMP_CODE_NONE; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, sds_name); } } else { /* setup compression factors */ switch (comp_type) { case COMP_CODE_SZIP: if (set_szip(info, szip_mode, &c_info) == FAIL) { comp_type = COMP_CODE_NONE; } break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: c_info.skphuff.skp_size = info; break; case COMP_CODE_DEFLATE: c_info.deflate.level = info; break; case COMP_CODE_NBIT: comp_type = COMP_CODE_NONE; /* not supported in this version */ break; default: printf("Error: Unrecognized compression code %d\n", comp_type); } if (SDsetcompress(sds_out, comp_type, &c_info) == FAIL) { printf("Error: Failed to set compression for <%s>\n", sds_name); ret = -1; goto out; } } } /*------------------------------------------------------------------------- * read sds and write new one *------------------------------------------------------------------------- */ /* alloc */ if ((buf = (void *)malloc(nelms * eltsz)) == NULL) { printf("Failed to allocate %d elements of size %d\n", nelms, eltsz); ret = -1; goto out; } /* read data */ if (SDreaddata(sds_id, start, NULL, edges, buf) == FAIL) { printf("Could not read SDS <%s>\n", sds_name); ret = -1; goto out; } /* write the data */ if (SDwritedata(sds_out, start, NULL, edges, buf) == FAIL) { printf("Failed to write to new SDS <%s>\n", sds_name); ret = -1; goto out; } } /* empty_sds */ /*------------------------------------------------------------------------- * copy attributes *------------------------------------------------------------------------- */ if (copy_sds_attrs(sds_id, sds_out, nattrs, options) == FAIL) { ret = -1; goto out; } out: /* terminate access to the SDSs */ if (SDendaccess(sds_id) == FAIL) printf("Failed to close SDS <%s>\n", sds_name); if (sds_out != FAIL) { if (SDendaccess(sds_out) == FAIL) printf("Failed to close SDS <%s>\n", sds_name); } free(buf); return ret; } /*------------------------------------------------------------------------- * Function: match_dim_table_add * * Purpose: add an entry from a list of dimension names into the match table * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ static void match_dim_table_add(match_dim_table_t *mdim_tbl, unsigned *flags, char *dim_name, int32 ref) { int i; /* check if name already on match table */ for (i = 0; i < mdim_tbl->nobjs; i++) { /* insert information at position i */ if (strcmp(dim_name, mdim_tbl->objs[i].dim_name) == 0) { if (mdim_tbl->objs[i].flags[0] == 0) mdim_tbl->objs[i].flags[0] = flags[0]; if (mdim_tbl->objs[i].flags[1] == 0) mdim_tbl->objs[i].flags[1] = flags[1]; return; } } if (mdim_tbl->nobjs == mdim_tbl->size) { mdim_tbl->size *= 2; mdim_tbl->objs = (match_dim_name_t *)realloc(mdim_tbl->objs, mdim_tbl->size * sizeof(match_dim_name_t)); for (i = mdim_tbl->nobjs; i < mdim_tbl->size; i++) { mdim_tbl->objs[i].ref = -1; mdim_tbl->objs[i].flags[0] = mdim_tbl->objs[i].flags[1] = -1; } } i = mdim_tbl->nobjs++; mdim_tbl->objs[i].ref = ref; strcpy(mdim_tbl->objs[i].dim_name, dim_name); mdim_tbl->objs[i].flags[0] = flags[0]; mdim_tbl->objs[i].flags[1] = flags[1]; } /*------------------------------------------------------------------------- * Function: match_dim_table_init * * Purpose: initialize match table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ static void match_dim_table_init(match_dim_table_t **tbl) { int i; match_dim_table_t *mdim_tbl = (match_dim_table_t *)malloc(sizeof(match_dim_table_t)); mdim_tbl->size = 20; mdim_tbl->nobjs = 0; mdim_tbl->objs = (match_dim_name_t *)malloc(mdim_tbl->size * sizeof(match_dim_name_t)); for (i = 0; i < mdim_tbl->size; i++) { mdim_tbl->objs[i].ref = -1; mdim_tbl->objs[i].flags[0] = mdim_tbl->objs[i].flags[1] = -1; } *tbl = mdim_tbl; } /*------------------------------------------------------------------------- * Function: match_dim_table_free * * Purpose: free match table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ static void match_dim_table_free(match_dim_table_t *mdim_tbl) { free(mdim_tbl->objs); free(mdim_tbl); } /*------------------------------------------------------------------------- * Function: dim_table_add * * Purpose: add an entry of pair REF/NAME into a dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ void dim_table_add(dim_table_t *dim_tbl, int ref, char *name) { int i; if (dim_tbl->nobjs == dim_tbl->size) { dim_tbl->size *= 2; dim_tbl->objs = (dim_name_t *)realloc(dim_tbl->objs, dim_tbl->size * sizeof(dim_name_t)); for (i = dim_tbl->nobjs; i < dim_tbl->size; i++) { dim_tbl->objs[i].ref = -1; } } i = dim_tbl->nobjs++; dim_tbl->objs[i].ref = ref; strcpy(dim_tbl->objs[i].dim_name, name); } /*------------------------------------------------------------------------- * Function: dim_table_init * * Purpose: initialize dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ void dim_table_init(dim_table_t **tbl) { int i; dim_table_t *dim_tbl = (dim_table_t *)malloc(sizeof(dim_table_t)); dim_tbl->size = 20; dim_tbl->nobjs = 0; dim_tbl->objs = (dim_name_t *)malloc(dim_tbl->size * sizeof(dim_name_t)); for (i = 0; i < dim_tbl->size; i++) { dim_tbl->objs[i].ref = -1; } *tbl = dim_tbl; } /*------------------------------------------------------------------------- * Function: dim_table_free * * Purpose: free dimension table * * Return: void * * Programmer: Pedro Vicente, pvn@hdfgroup.org * * Date: January 17, 2007 * *------------------------------------------------------------------------- */ void dim_table_free(dim_table_t *dim_tbl) { free(dim_tbl->objs); free(dim_tbl); } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_dim.h000066400000000000000000000031761503061704500201560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_DIM_H #define HREPACK_DIM_H #include "hrepack.h" /* dimension SDS */ typedef struct dim_name_t { int32 ref; /* reference */ char dim_name[H4_MAX_NC_NAME]; /* name */ } dim_name_t; /* table for dim_name_t */ typedef struct dim_table_t { int size; int nobjs; dim_name_t *objs; } dim_table_t; #ifdef __cplusplus extern "C" { #endif void dim_table_add(dim_table_t *dim_tbl, int ref, char *name); void dim_table_init(dim_table_t **tbl); void dim_table_free(dim_table_t *dim_tbl); void match_dim(int32 sd_in, int32 sd_out, dim_table_t *dt1, dim_table_t *dt2, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_DIM_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_gr.c000066400000000000000000000563331503061704500200130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_gr.h" #include "hrepack_utils.h" #include "hrepack_an.h" #include "hrepack_parse.h" #include "hrepack_opttable.h" /*------------------------------------------------------------------------- * Function: copy_gr * * Purpose: copy a GR from input file to output file and compress it * using options * * Return: 0 ok, -1 not ok * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 11, 2003 * *------------------------------------------------------------------------- */ int copy_gr(int32 infile_id, int32 outfile_id, int32 gr_in, int32 gr_out, int32 tag, /* tag of input GR */ int32 ref, /* ref of input GR */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ options_t *options, list_table_t *list_tbl) { int32 ri_id; /* raster image identifier */ int32 ri_out = FAIL; /* raster image identifier */ int32 ri_index; /* index of a image */ int32 dimsizes[2]; /* dimensions of an image */ int32 n_comps; /* number of components an image contains */ int32 interlace_mode; /* interlace mode of an image */ int32 dtype; /* number type of an image */ int32 n_attrs; /* number of attributes belong to an image */ int32 gr_ref; /* reference number of the output data set */ int32 pal_id; /* palette identifier */ int32 pal_out; /* palette identifier */ int32 pal_ref; int32 r_num_entries; int32 r_data_type; int32 r_ncomp; int32 r_interlace_mode; char gr_name[H4_MAX_GR_NAME]; char *path = NULL; int info; /* temporary int compression information */ int szip_mode; /* szip mode, EC, NN */ comp_coder_t comp_type; /* compression type requested */ comp_coder_t comp_type_in; /* compression type original */ comp_info c_info; /* compression information requested */ comp_info c_info_in; /* compression information original */ HDF_CHUNK_DEF chunk_def; /* chunk definition */ HDF_CHUNK_DEF chunk_def_in; /* chunk definition original */ int32 chunk_flags; /* chunk flags */ int32 chunk_flags_in; /* chunk flags original*/ int i, j, ret = 0, rank = 2, have_info, stat; int has_pal = 0; int32 start[2], /* read start */ edges[2], /* read edges */ numtype, /* number type */ eltsz, /* element size */ nelms, /* number of elements */ data_size; void *buf = NULL; uint8 pal_data[256 * 3]; int can_compress = 1; /* flag to tell if a compression is supported */ const char *pal_path = "palette"; ri_index = GRreftoindex(gr_in, (uint16)ref); ri_id = GRselect(gr_in, ri_index); if (GRgetiminfo(ri_id, gr_name, &n_comps, &dtype, &interlace_mode, dimsizes, &n_attrs) == FAIL) { printf("Could not information for GR\n"); GRendaccess(ri_id); return -1; } /* initialize path */ path = get_path(path_name, gr_name); /* add object to table */ list_table_add(list_tbl, tag, ref, path); /*------------------------------------------------------------------------- * get the original compression/chunk information from the object *------------------------------------------------------------------------- */ comp_type_in = COMP_CODE_NONE; /* reset variables before retrieving information */ memset(&c_info_in, 0, sizeof(comp_info)); stat = GRgetcompinfo(ri_id, &comp_type_in, &c_info_in); if (stat == FAIL && comp_type_in > 0) { printf("Could not get compress information for GR <%s>\n", path); GRendaccess(ri_id); return -1; } /* get chunk lengths */ if (GRgetchunkinfo(ri_id, &chunk_def_in, &chunk_flags_in) == FAIL) { printf("Could not get chunk information for GR <%s>\n", path); GRendaccess(ri_id); return -1; } /* retrieve the compress information if so */ if ((HDF_CHUNK | HDF_COMP) == chunk_flags_in) { chunk_def_in.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: #ifdef H4_GR_SZIP chunk_def_in.comp.comp_type = COMP_CODE_SZIP; chunk_def_in.comp.cinfo.szip = c_info_in.szip; #endif chunk_def_in.comp.comp_type = COMP_CODE_NONE; printf("Warning: SZIP compression not supported for GR\n"); break; case COMP_CODE_RLE: chunk_def_in.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def_in.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def_in.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def_in.comp.comp_type = COMP_CODE_DEFLATE; chunk_def_in.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_JPEG: chunk_def_in.comp.comp_type = COMP_CODE_JPEG; chunk_def_in.comp.cinfo.jpeg = c_info_in.jpeg; break; default: printf("Error: Unrecognized compression code <%d> in <%s>\n", comp_type_in, path); break; }; } /*------------------------------------------------------------------------- * set the default values to the ones read from the object *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * compression *------------------------------------------------------------------------- */ comp_type = comp_type_in; switch (comp_type_in) { default: break; case COMP_CODE_SZIP: #ifdef H4_GR_SZIP info = c_info_in.szip.pixels_per_block; #ifdef H4_HAVE_LIBSZ if (c_info_in.szip.options_mask & SZ_EC_OPTION_MASK) { szip_mode = EC_MODE; } else if (c_info_in.szip.options_mask & SZ_NN_OPTION_MASK) { szip_mode = NN_MODE; } #else szip_mode = 0; /* irrelevant */ #endif #endif szip_mode = 0; /* irrelevant */ break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: info = c_info_in.skphuff.skp_size; break; case COMP_CODE_DEFLATE: info = c_info_in.deflate.level; break; case COMP_CODE_JPEG: /* JPEG's quality factor was not saved to the file and 75 is recommended by http://www.faqs.org/faqs/jpeg-faq/part1 - BMR 1/2009*/ info = 75; /* a constant should be defined somewhere in the library */ c_info_in.jpeg.quality = 75; break; }; /*------------------------------------------------------------------------- * chunking *------------------------------------------------------------------------- */ chunk_flags = chunk_flags_in; if ((HDF_CHUNK) == chunk_flags) { for (i = 0; i < rank; i++) chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } else if ((HDF_CHUNK | HDF_COMP) == chunk_flags) { for (i = 0; i < rank; i++) { chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; chunk_def.comp.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } chunk_def.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: #ifdef H4_GR_SZIP chunk_def.comp.comp_type = COMP_CODE_SZIP; chunk_def.comp.cinfo.szip = c_info_in.szip; #endif chunk_def.comp.comp_type = COMP_CODE_NONE; printf("Warning: SZIP not supported for GR\n"); break; case COMP_CODE_RLE: chunk_def.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_JPEG: chunk_def.comp.comp_type = COMP_CODE_JPEG; chunk_def.comp.cinfo.jpeg = c_info_in.jpeg; break; default: printf("Error: Unrecognized compression code <%d> in <%s>\n", comp_type_in, path); break; }; } /*------------------------------------------------------------------------- * get the compression/chunk information of this object from the table * translate to usable information * this is done ONLY for the second trip inspection *------------------------------------------------------------------------- */ /* check inspection mode */ have_info = 0; if (options->trip > 0) { have_info = options_get_info(options, /* global options */ &chunk_flags, /* chunk flags OUT */ &chunk_def, /* chunk definition OUT */ &info, /* compression information OUT */ &szip_mode, /* compression information OUT */ &comp_type, /* compression type OUT */ rank, /* rank of object IN */ path, /* path of object IN */ n_comps, /* number of GR image planes (for SZIP), IN */ dimsizes, /* dimensions (for SZIP), IN */ dtype /* numeric type ( for SZIP), IN */ ); if (have_info == FAIL) goto out; } /* check inspection mode */ /*------------------------------------------------------------------------- * check for data size before printing *------------------------------------------------------------------------- */ /* compute the number of the bytes for each value. */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); /* set edges of GR */ nelms = 1; for (j = 0; j < rank; j++) { nelms *= dimsizes[j]; edges[j] = dimsizes[j]; start[j] = 0; } data_size = dimsizes[0] * dimsizes[1] * n_comps * eltsz; /*------------------------------------------------------------------------- * check for objects too small *------------------------------------------------------------------------- */ if (have_info && options->trip > 0 && nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ chunk_flags = chunk_flags_in; comp_type = comp_type_in; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, path); } } /*------------------------------------------------------------------------- * print the PATH, COMP and CHUNK information *------------------------------------------------------------------------- */ if (options->verbose) { int pr_comp_type = 0; int pr_chunk_flags; if (options->trip == 0) pr_chunk_flags = chunk_flags_in; else pr_chunk_flags = chunk_flags; if (comp_type > 0) { pr_comp_type = comp_type; } else { if (pr_chunk_flags == (HDF_CHUNK | HDF_COMP)) { pr_comp_type = chunk_def.comp.comp_type; } } printf(PFORMAT, (pr_chunk_flags > 0) ? "chunk" : "", /*chunk information*/ (pr_comp_type > 0) ? get_scomp(pr_comp_type) : "", /*compression information*/ "", /*compression ratio */ path); /*name*/ } /*------------------------------------------------------------------------- * if we are in first trip inspection mode, exit, after printing the information *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip == 0) { free(path); if (GRendaccess(ri_id) == FAIL) { printf("Could not close GR <%s>\n", path); return -1; } return 0; } /*------------------------------------------------------------------------- * read gr and create new one *------------------------------------------------------------------------- */ /* alloc */ if ((buf = (void *)malloc(data_size)) == NULL) { printf("Failed to allocate %d elements of size %d\n", nelms, eltsz); GRendaccess(ri_id); free(path); return -1; } /* set the interlace for reading */ if (GRreqimageil(ri_id, interlace_mode) == FAIL) { printf("Could not set interlace for GR <%s>\n", path); GRendaccess(ri_id); free(path); return -1; } /* read data */ if (GRreadimage(ri_id, start, NULL, edges, buf) == FAIL) { printf("Could not read GR <%s>\n", path); GRendaccess(ri_id); free(path); return -1; } /* create output GR */ if ((ri_out = GRcreate(gr_out, gr_name, n_comps, dtype, interlace_mode, dimsizes)) == FAIL) { printf("Failed to create new GR <%s>\n", path); ret = -1; goto out; } /*------------------------------------------------------------------------- * set chunk * * Chunked -> flags = HDF_CHUNK * Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP * Non-chunked -> flags = HDF_NONE *------------------------------------------------------------------------- */ /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { if (GRsetchunk(ri_out, chunk_def, chunk_flags) == FAIL) { printf("Error: Failed to set chunk dimensions for <%s>\n", path); ret = -1; goto out; } } /*------------------------------------------------------------------------- * set compression * * COMP_CODE_RLE -> simple RLE encoding * COMP_CODE_SKPHUFF -> Skipping huffman encoding * COMP_CODE_DEFLATE -> gzip 'deflate' encoding *------------------------------------------------------------------------- */ /* use compress without chunk-in */ else if (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE) { if (have_info && options->trip > 0 && nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ comp_type = COMP_CODE_NONE; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, path); } } else { /* setup compression factors */ switch (comp_type) { case COMP_CODE_SZIP: #ifdef H4_GR_SZIP /* not supported */ if (set_szip(info, szip_mode, &c_info) == FAIL) { comp_type = COMP_CODE_NONE; } #endif printf("Warning: SZIP not supported for GR\n"); can_compress = 0; break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: c_info.skphuff.skp_size = info; break; case COMP_CODE_DEFLATE: c_info.deflate.level = info; break; case COMP_CODE_JPEG: c_info.jpeg.quality = info; c_info.jpeg.force_baseline = 1; break; default: printf("Error: Unrecognized compression code %d\n", comp_type); can_compress = 0; } if (can_compress) { if (GRsetcompress(ri_out, comp_type, &c_info) == FAIL) { printf("Error: Failed to set compression for <%s>\n", path); ret = -1; goto out; } } /* can_compress */ } } /* write the data */ if (GRwriteimage(ri_out, start, NULL, edges, buf) == FAIL) { printf("Failed to write to new GR <%s>\n", path); ret = -1; goto out; } /*------------------------------------------------------------------------- * copy attributes *------------------------------------------------------------------------- */ if (copy_gr_attrs(ri_id, ri_out, n_attrs, options) == FAIL) { ret = -1; goto out; } /*------------------------------------------------------------------------- * check for palette *------------------------------------------------------------------------- */ pal_id = GRgetlutid(ri_id, 0); GRgetlutinfo(pal_id, &r_ncomp, &r_data_type, &r_interlace_mode, &r_num_entries); /*check if there is palette data */ has_pal = ((r_ncomp == 0) || (r_interlace_mode < 0) || (r_num_entries == 0)) ? 0 : 1; if (has_pal == 1) { GRreqlutil(ri_id, r_interlace_mode); if (GRreadlut(pal_id, pal_data) == FAIL) { printf("Failed to get palette data for <%s>\n", path); } if ((pal_ref = GRluttoref(pal_id)) == FAIL) { printf("Failed to get palette ref for <%s>\n", path); } /* add palette to table; we want to later check for lone palettes */ list_table_add(list_tbl, DFTAG_IP8, pal_ref, pal_path); /* Get the id for the new palette */ if ((pal_out = GRgetlutid(ri_out, 0)) == FAIL) { printf("Failed to get palette ID for <%s>\n", path); } /* Write the palette to file. */ if (GRwritelut(pal_out, r_ncomp, r_data_type, r_interlace_mode, r_num_entries, (void *)pal_data) == FAIL) { printf("Failed to write palette for <%s>\n", path); } } /* has_pal==1 */ /* obtain the reference number of the new SDS using its identifier */ if ((gr_ref = GRidtoref(ri_out)) == FAIL) { printf("Failed to get new GR reference in <%s>\n", path); } /*------------------------------------------------------------------------- * add GR to group, if needed *------------------------------------------------------------------------- */ if (vgroup_id_out_par) { /* add the GR to the vgroup. the tag DFTAG_RIG is used */ if (Vaddtagref(vgroup_id_out_par, TAG_GRP_IMAGE, gr_ref) == FAIL) { printf("Failed to add new GR to group <%s>\n", path); } } /*------------------------------------------------------------------------- * copy ANs *------------------------------------------------------------------------- */ if (copy_an(infile_id, outfile_id, ref, DFTAG_RIG, gr_ref, DFTAG_RIG, path, options) < 0) { ret = -1; goto out; } if (copy_an(infile_id, outfile_id, ref, DFTAG_RI, gr_ref, DFTAG_RI, path, options) < 0) { ret = -1; goto out; } out: /* terminate access to the GRs */ if (GRendaccess(ri_id) == FAIL) { if (path) printf("Failed to close SDS <%s>\n", path); else printf("Failed to close SDS\n"); } if (GRendaccess(ri_out) == FAIL) { if (path) printf("Failed to close SDS <%s>\n", path); else printf("Failed to close SDS\n"); } free(path); free(buf); return ret; } /*------------------------------------------------------------------------- * Function: copy_gr_attrs * * Purpose: copy GR attributes from input file to output file * * Return: 1, for success, -1 for error * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 28, 2003 * *------------------------------------------------------------------------- */ int copy_gr_attrs(int32 ri_id, int32 ri_out, int32 nattrs, options_t *options) { int32 dtype, /* SDS data type */ numtype, /* number type */ eltsz, /* element size */ nelms; /* number of elements */ char attr_name[H4_MAX_NC_NAME]; void *attr_buf = NULL; int i; (void)options; /* loop through attributes in input GR */ for (i = 0; i < nattrs; i++) { if (GRattrinfo(ri_id, i, attr_name, &dtype, &nelms) == FAIL) { printf("Cannot get information for attribute number %d\n", i); return -1; } /* compute the number of the bytes for each value. */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); if ((attr_buf = (void *)malloc(nelms * eltsz)) == NULL) { printf("Error allocating %d values of size %d for attribute %s", nelms, numtype, attr_name); return -1; } /* read attributes from input GR */ if (GRgetattr(ri_id, i, attr_buf) == FAIL) { printf("Cannot read attribute %s\n", attr_name); return -1; } /* put attributes into output GR */ if (GRsetattr(ri_out, attr_name, dtype, nelms, attr_buf) == FAIL) { printf("Cannot write attribute %s\n", attr_name); return -1; } free(attr_buf); } return 1; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_gr.h000066400000000000000000000031571503061704500200140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_GR_H #define HREPACK_GR_H #include "hrepack.h" #include "hrepack_lsttable.h" #ifdef __cplusplus extern "C" { #endif int copy_gr(int32 infile_id, int32 outfile_id, int32 gr_in, int32 gr_out, int32 tag, /* tag of input GR */ int32 ref, /* ref of input GR */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ options_t *options, list_table_t *list_tbl); int copy_gr_attrs(int32 ri_id, int32 ri_out, int32 nattrs, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_GR_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_help.txt000066400000000000000000000045271503061704500207260ustar00rootroot00000000000000usage: hrepack -i input -o output [-V] [-h] [-v] [-t 'comp_info'] [-c 'chunk_info'] [-f cfile] [-m size] -i input input HDF File -o output output HDF File [-V] prints version of the HDF4 library and exits [-h] prints this usage [-v] verbose mode [-t 'comp_info'] compression type: 'comp_info' is a string with the format : is a comma separated list of object names meaning apply compression only to those objects '*' means all objects can be: RLE, for RLE compression HUFF, for Huffman GZIP, for gzip JPEG, for JPEG (for images only) SZIP, for szip NONE, to uncompress is optional compression info RLE, no parameter HUFF, the skip-size GZIP, the deflation level JPEG, the quality factor SZIP, pixels per block, compression mode (NN or EC) [-c 'chunk_info'] apply chunking. 'chunk_info' is a string with the format : is a comma separated list of object names meaning apply chunking only to those objects '*' means all objects is the chunk size of each dimension: or NONE, to unchunk a previous chunked object [-f cfile] file with compression information -t and -c [-m size] do not compress objects smaller than size (bytes) Examples: 1) hrepack -v -i file1.hdf -o file2.hdf -t '*:RLE' compresses all objects in the file file1.hdf, using RLE compression 2) hrepack -v -i file1.hdf -o file2.hdf -t '/group1/A,/group2/B,C:HUFF 1' applies Skipping Huffman compression with skip factor of 1, for objects /group1/A, /group2/B and C 2) hrepack -v -i file1.hdf -o file2.hdf -t '/group1/D:RLE' -c 'D,E:10x10' applies RLE compression for object /group1/D applies chunking to objects D and E using a chunk size of 10 for the 2 dimensions 3) hrepack -v -i file1.hdf -o file2.hdf -t 'A:NONE' uncompresses object A 4) hrepack -v -i file1.hdf -o file2.hdf -t 'A:SZIP 8,NN' applies SZIP compression to object A, with parameters 8 and NN Note: the use of the verbose option -v is recommended hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_list.c000066400000000000000000001343631503061704500203560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_utils.h" #include "hrepack_parse.h" #include "hrepack_opttable.h" #include "hrepack_sds.h" #include "hrepack_gr.h" #include "hrepack_vs.h" #include "hrepack_an.h" #include "hrepack_vg.h" #include "hrepack_dim.h" int list_vg(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, int32 gr_id, int32 gr_out, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options); int list_gr(int32 infile_id, int32 outfile_id, int32 gr_id, int32 gr_out, list_table_t *list_tbl, options_t *options); int list_sds(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options); int list_vs(int32 infile_id, int32 outfile_id, list_table_t *list_tbl, options_t *options); int list_glb(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, int32 gr_id, int32 gr_out, list_table_t *list_tbl, options_t *options); int list_pal(const char *infname, const char *outfname, list_table_t *list_tbl, options_t *options); int list_an(int32 infile_id, int32 outfile_id, options_t *options); /*------------------------------------------------------------------------- * Function: list * * Purpose: locate all HDF objects in the file and compress them using options * * Return: SUCCEED, FAIL * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 10, 2003 * * Modifications: September 9, 2007 * Check for duplicate Vgroup insertions * * Description: * * A main loop is used to locate all the objects in the file. The algorithm used is: * 1) Obtain the number of lone vgroups in the HDF file, i.e., vgroups that are at * the top of the grouping hierarchy, in a file. * 2) Do a loop for each one of these groups. In each iteration a table is updated * with the tag/reference pair of an object. * 2.1) Obtain the pairs of tag/references for the group * 2.2) Switch between the tag of the current object. Four cases are possible: * 1) Object is a group: recursively repeat the process (obtain the pairs of * tag/references for this group and do another tag switch). * If the Vgroup has not been visited * Add the object to the table and continue recursion * else * Open it, create the insertion into its parent and exit the recursion. * 2) Object is a dataset: Add the object to the table. * 3) Object is an image: Add the object to the table. * 4) Object is a vdata: Add the object to the table. * 3) Read all the HDF interfaces (SDS, GR and VS), checking for objects that are * already in the table (meaning they belong to a previous inspected group, * and should not be added). These objects belong to a root group. * 4) Read all global attributes and annotations. * * Modification: January 15, 2015 - JIRA issue HDFFR-1428 * The output file contains a vgroup of class RIG0.0 even though the input * file does not contain any GR elements, such as raster images or GR file * attribute. That is because GRstart is called on the output file * regardless of whether there are any GR items in the input file. Hrepack * will be reviewed and revised for correctness and efficiency (JIRA issue * HDFFR-1395.) However, in this release, 4.2.11, an immediate solution is * applied to eliminate the unnecessary RIG0.0 vgroup. The input file is * checked for GR elements, before any GR activity is invoked on the * output file. -BMR * *------------------------------------------------------------------------- */ int list_main(const char *infname, const char *outfname, options_t *options) { list_table_t *list_tbl = NULL; /* list of objects */ dim_table_t *td1 = NULL; /* dimensions */ dim_table_t *td2 = NULL; /* dimensions */ int32 sd_id = FAIL, /* SD interface identifier */ sd_out = FAIL, /* SD interface identifier */ gr_id = FAIL, /* GR interface identifier */ gr_out = FAIL, /* GR interface identifier */ infile_id = FAIL, outfile_id = FAIL, n_rimages, /* number of raster images in the file */ n_file_attrs; /* number of file attributes */ intn has_GRelems = 0; /* set to 1 when there are GR images or */ /* attributes in the file (HDFFR-1428) */ int i; const char *err; /*------------------------------------------------------------------------- * initialize tables *------------------------------------------------------------------------- */ list_table_init(&list_tbl); dim_table_init(&td1); dim_table_init(&td2); /*------------------------------------------------------------------------- * open the input file for read and initialize interfaces *------------------------------------------------------------------------- */ if ((infile_id = Hopen(infname, DFACC_READ, (int16)0)) == FAIL) { printf("Cannot open file <%s>\n", infname); goto out; } if ((sd_id = SDstart(infname, DFACC_READ)) == FAIL) { printf("Could not start SD for <%s>\n", infname); goto out; } if ((gr_id = GRstart(infile_id)) == FAIL) { printf("Could not start GR for <%s>\n", infname); goto out; } /*------------------------------------------------------------------------- * set flag to indicate whether the input file contains any GR elements *------------------------------------------------------------------------- */ if (GRfileinfo(gr_id, &n_rimages, &n_file_attrs) == FAIL) { printf("Could not get info for GR\n"); goto out; } if (n_rimages > 0 || n_file_attrs > 0) has_GRelems = 1; /*------------------------------------------------------------------------- * create the output file and initialize interfaces *------------------------------------------------------------------------- */ if (options->trip == 1) { if ((outfile_id = Hopen(outfname, DFACC_CREATE, (int16)0)) == FAIL) { printf("Cannot create file <%s>\n", outfname); goto out; } if ((sd_out = SDstart(outfname, DFACC_WRITE)) == FAIL) { printf("Could not start GR for <%s>\n", outfname); goto out; } if (has_GRelems) if ((gr_out = GRstart(outfile_id)) == FAIL) { printf("Could not start GR for <%s>\n", outfname); goto out; } } /* options->trip==1 */ if (options->verbose && options->trip == 0) printf("Building list of objects in %s...\n", infname); /*------------------------------------------------------------------------- * iterate thru HDF interfaces *------------------------------------------------------------------------- */ if (options->verbose) { printf("-----------------------------------------------\n"); printf(" Chunk Filter(compression) Name\n"); printf("-----------------------------------------------\n"); } if (list_vg(infile_id, outfile_id, sd_id, sd_out, gr_id, gr_out, list_tbl, td1, td2, options) < 0) goto out; /* Only process GR interface if there is any GR elements in the file */ /* Design note: consider using the same approach for the SD API during the improvement of hrepack, HDFFR-1395 */ if (has_GRelems) if (list_gr(infile_id, outfile_id, gr_id, gr_out, list_tbl, options) < 0) goto out; if (list_sds(infile_id, outfile_id, sd_id, sd_out, list_tbl, td1, td2, options) < 0) goto out; if (list_vs(infile_id, outfile_id, list_tbl, options) < 0) goto out; if (list_glb(infile_id, outfile_id, sd_id, sd_out, gr_id, gr_out, list_tbl, options) < 0) goto out; if (list_pal(infname, outfname, list_tbl, options) < 0) goto out; if (list_an(infile_id, outfile_id, options) < 0) goto out; if (options->trip == 1) { match_dim(sd_id, sd_out, td1, td2, options); } /*------------------------------------------------------------------------- * check for objects in the file table: * 1) the input object names are present in the file * 2) they are valid objects (SDS or GR) * check only if selected objects are given (all==0) *------------------------------------------------------------------------- */ if (options->trip == 0) { if (options->verbose) printf("Searching for objects to modify...\n"); for (i = 0; i < options->op_tbl->nelems; i++) { char *obj_name = options->op_tbl->objs[i].objpath; if (options->verbose) printf(PFORMAT1, "", "", obj_name); /* the input object names are present in the file and are valid */ err = list_table_check(list_tbl, obj_name); if (err != NULL) { printf("\nError: <%s> %s in file <%s>. Exiting...\n", obj_name, err, infname); goto out; } if (options->verbose) printf("...Found\n"); } } /*------------------------------------------------------------------------- * close interfaces *------------------------------------------------------------------------- */ if (GRend(gr_id) == FAIL) printf("Failed to close GR interface <%s>\n", infname); if (SDend(sd_id) == FAIL) printf("Failed to close file <%s>\n", infname); if (Hclose(infile_id) == FAIL) printf("Failed to close file <%s>\n", infname); if (options->trip == 1) { if (has_GRelems) if (GRend(gr_out) == FAIL) printf("Failed to close GR interface <%s>\n", outfname); if (SDend(sd_out) == FAIL) printf("Failed to close file <%s>\n", outfname); if (Hclose(outfile_id) == FAIL) printf("Failed to close file <%s>\n", outfname); } /*------------------------------------------------------------------------- * free tables *------------------------------------------------------------------------- */ list_table_free(list_tbl); dim_table_free(td1); dim_table_free(td2); return SUCCEED; out: if (list_tbl != NULL) list_table_free(list_tbl); if (td1 != NULL) dim_table_free(td1); if (td2 != NULL) dim_table_free(td2); if (gr_id != FAIL) { if (GRend(gr_id) == FAIL) printf("Failed to close GR interface <%s>\n", infname); } if (gr_out != FAIL) { if (GRend(gr_out) == FAIL) printf("Failed to close GR interface <%s>\n", outfname); } if (sd_id != FAIL) { if (SDend(sd_id) == FAIL) printf("Failed to close SD interface for <%s>\n", infname); } if (sd_out != FAIL) { if (SDend(sd_out) == FAIL) printf("Failed to close SD interface for <%s>\n", outfname); } if (infile_id != FAIL) { if (Hclose(infile_id) == FAIL) printf("Failed to close file <%s>\n", infname); } if (outfile_id != FAIL) { if (Hclose(outfile_id) == FAIL) printf("Failed to close file <%s>\n", outfname); } return FAIL; } /*------------------------------------------------------------------------- * Function: list_vg * * Purpose: locate all objects in the file under a group hierarchy * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_vg(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, int32 gr_id, int32 gr_out, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options) { int32 vg_id; /* vgroup identifier */ int32 nlones = 0; /* number of lone vgroups */ int32 ntagrefs; /* number of tag/ref pairs in a vgroup */ int32 *ref_array = NULL; /* buffer to hold the ref numbers of lone vgroups */ int32 *tags = NULL; /* buffer to hold the tag numbers of vgroups */ int32 *refs = NULL; /* buffer to hold the ref numbers of vgroups */ int32 vgroup_id_out = 0; /* vgroup identifier */ int32 tag_vg; int32 ref_vg; char *vg_name = NULL; char *vg_class = NULL; int32 i; /*------------------------------------------------------------------------- * initialize the V interface *------------------------------------------------------------------------- */ if (Vstart(infile_id) == FAIL) { return FAIL; } if (options->trip == 1) { if (Vstart(outfile_id) == FAIL) { return FAIL; } } /*------------------------------------------------------------------------- * get and print the names and class names of all the lone vgroups. * first, call Vlone with nlones set to 0 to get the number of * lone vgroups in the file, but not to get their reference numbers. *------------------------------------------------------------------------- */ nlones = Vlone(infile_id, NULL, nlones); if (nlones > 0) { /* * use the nlones returned to allocate sufficient space for the * buffer ref_array to hold the reference numbers of all lone vgroups, */ ref_array = (int32 *)malloc(sizeof(int32) * nlones); /* * and call Vlone again to retrieve the reference numbers into * the buffer ref_array. */ nlones = Vlone(infile_id, ref_array, nlones); /* * iterate through each lone vgroup. */ for (i = 0; i < nlones; i++) { int32 ref = ref_array[i]; uint16 name_len; /* * attach to the current vgroup then get its * name and class. note: the current vgroup must be detached before * moving to the next. */ if ((vg_id = Vattach(infile_id, ref, "r")) == FAIL) { printf("Error: Could not attach group with ref <%d>\n", ref); goto out; } /* Get vgroup's name */ if (Vgetnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); goto out; } free(vg_name); vg_name = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetname(vg_id, vg_name) == FAIL) { printf("Could not get name for group\n"); goto out; } /* Get vgroup's class name */ if (Vgetclassnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); goto out; } free(vg_class); vg_class = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetclass(vg_id, vg_class) == FAIL) { printf("Could not get class for group\n"); goto out; } /* ignore reserved HDF groups/vdatas */ if (is_reserved(vg_class)) { if (Vdetach(vg_id) == FAIL) { printf("Could not detach group\n"); goto out; } continue; } if (strcmp(vg_name, GR_NAME) == 0) { if (Vdetach(vg_id) == FAIL) { printf("Could not detach group\n"); goto out; } continue; } /* get ref, tag */ if ((ref_vg = VQueryref(vg_id)) == FAIL) { printf("Failed to get ref for <%s>\n", vg_name); goto out; } if ((tag_vg = VQuerytag(vg_id)) == FAIL) { printf("Failed to get tag for <%s>\n", vg_name); goto out; } /*------------------------------------------------------------------------- * add object to table *------------------------------------------------------------------------- */ list_table_add(list_tbl, tag_vg, ref_vg, vg_name); if (options->verbose) printf(PFORMAT, "", "", "", vg_name); if (options->trip == 1) { /* * create the group in the output file. the vgroup reference number is set * to -1 for creating and the access mode is "w" for writing */ vgroup_id_out = Vattach(outfile_id, -1, "w"); if (Vsetname(vgroup_id_out, vg_name) == FAIL) { printf("Error: Could not create group <%s>\n", vg_name); goto out; } if (Vsetclass(vgroup_id_out, vg_class) == FAIL) { printf("Error: Could not create group <%s>\n", vg_name); goto out; } if (copy_vgroup_attrs(vg_id, vgroup_id_out, vg_name, options) < 0) goto out; if (copy_vg_an(infile_id, outfile_id, vg_id, vgroup_id_out, vg_name, options) < 0) goto out; } /* insert objects for this group */ ntagrefs = Vntagrefs(vg_id); if (ntagrefs > 0) { tags = (int32 *)malloc(sizeof(int32) * ntagrefs); refs = (int32 *)malloc(sizeof(int32) * ntagrefs); if (Vgettagrefs(vg_id, tags, refs, ntagrefs) < 0) goto out; if (vgroup_insert(infile_id, outfile_id, sd_id, sd_out, gr_id, gr_out, vgroup_id_out, vg_name, tags, refs, ntagrefs, list_tbl, td1, td2, options) < 0) { goto out; } free(tags); tags = NULL; free(refs); refs = NULL; } if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); goto out; } if (options->trip == 1) { if (Vdetach(vgroup_id_out) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); goto out; } } free(vg_class); vg_class = NULL; free(vg_name); vg_name = NULL; } /* for nlones */ /* free the space allocated */ free(ref_array); } /* if nlones */ /*------------------------------------------------------------------------- * terminate access to the V interface *------------------------------------------------------------------------- */ if (Vend(infile_id) == FAIL) { printf("Error: Could not end infile group interface\n"); return FAIL; } if (options->trip == 1) { if (Vend(outfile_id) == FAIL) { printf("Error: Could not end outfile group interface\n"); return FAIL; } } free(vg_class); free(vg_name); return SUCCEED; out: Vend(infile_id); if (options->trip == 1) Vend(outfile_id); /* free the space allocated */ free(vg_class); free(vg_name); free(ref_array); free(tags); free(refs); return FAIL; } /*------------------------------------------------------------------------- * Function: vgroup_insert * * Purpose: recursive function to locate objects in vgroups * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int vgroup_insert(int32 infile_id, int32 outfile_id, int32 sd_id, /* SD interface identifier */ int32 sd_out, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ int32 gr_out, /* GR interface identifier */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ int32 *in_tags, /* tag list for parent group */ int32 *in_refs, /* ref list for parent group */ int npairs, /* number tag/ref pairs for parent group */ list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options) { int32 vg_id; /* vgroup identifier for opened group in input */ int32 ntagrefs; /* number of tag/ref pairs in a vgroup */ int32 *tags = NULL; /* buffer to hold the tag numbers of vgroups */ int32 *refs = NULL; /* buffer to hold the ref numbers of vgroups */ int32 vgroup_id_out = -1; /* vgroup identifier for the created group in output */ char *vg_name = NULL; char *vg_class = NULL; char *path = NULL; uint16 name_len; int visited; int32 tag; int32 ref; int i; for (i = 0; i < npairs; i++) { tag = in_tags[i]; ref = in_refs[i]; switch (tag) { /*------------------------------------------------------------------------- * DFTAG_VG *------------------------------------------------------------------------- */ case DFTAG_VG: visited = list_table_search(list_tbl, DFTAG_VG, ref); /*------------------------------------------------------------------------- * open input *------------------------------------------------------------------------- */ vg_id = Vattach(infile_id, ref, "r"); /* Get vgroup's name */ if (Vgetnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); goto out; } free(vg_name); vg_name = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetname(vg_id, vg_name) == FAIL) { printf("Could not get name for group\n"); goto out; } /* Get vgroup's class name */ if (Vgetclassnamelen(vg_id, &name_len) == FAIL) { printf("Error: Could not get name length for group with ref <%d>\n", ref); goto out; } free(vg_class); vg_class = (char *)malloc(sizeof(char) * (name_len + 1)); if (Vgetclass(vg_id, vg_class) == FAIL) { printf("Could not get class for group\n"); goto out; } /* ignore reserved HDF groups/vdatas */ if (is_reserved(vg_class)) { if (Vdetach(vg_id) == FAIL) { printf("Could not detach group\n"); goto out; } continue; } if (strcmp(vg_name, GR_NAME) == 0) { if (Vdetach(vg_id) == FAIL) { printf("Could not detach group\n"); goto out; } continue; } /*------------------------------------------------------------------------- * create the group in output or create the link *------------------------------------------------------------------------- */ if (options->trip == 1) { if (visited < 0) { /* * create the group in the output file. the vgroup reference number * is set to -1 for creating and the access mode is "w" for writing */ vgroup_id_out = Vattach(outfile_id, -1, "w"); if (Vsetname(vgroup_id_out, vg_name) == FAIL) { printf("Error: Could not create group <%s>\n", vg_name); goto out; } if (Vsetclass(vgroup_id_out, vg_class) == FAIL) { printf("Error: Could not create group <%s>\n", vg_name); goto out; } if (copy_vgroup_attrs(vg_id, vgroup_id_out, path, options) < 0) goto out; if (copy_vg_an(infile_id, outfile_id, vg_id, vgroup_id_out, path, options) < 0) goto out; } else { /* open previously visited group */ vgroup_id_out = Vattach(outfile_id, ref, "r"); } /* insert the created (or opened) vgroup into its parent */ if (Vinsert(vgroup_id_out_par, vgroup_id_out) == FAIL) { printf("Could not insert group <%s>\n", vg_name); goto out; } } /* create the group in output or create the link */ /*------------------------------------------------------------------------- * if group not visited, add to table and check for more tag/ref pairs *------------------------------------------------------------------------- */ /* check if already visited */ if (visited < 0) { /* initialize path */ path = get_path(path_name, vg_name); /* add object to table */ list_table_add(list_tbl, tag, ref, path); if (options->verbose) printf(PFORMAT, "", "", "", path); if (options->trip == 0) { /*we must go to other groups always */ } /* insert objects for this group */ ntagrefs = Vntagrefs(vg_id); if (ntagrefs > 0) { tags = (int32 *)malloc(sizeof(int32) * ntagrefs); refs = (int32 *)malloc(sizeof(int32) * ntagrefs); if (Vgettagrefs(vg_id, tags, refs, ntagrefs) < 0) goto out; /* recurse */ if (vgroup_insert(infile_id, outfile_id, sd_id, sd_out, gr_id, gr_out, vgroup_id_out, path, tags, refs, ntagrefs, list_tbl, td1, td2, options) < 0) { goto out; } free(tags); tags = NULL; free(refs); refs = NULL; } /* ntagrefs > 0 */ free(path); path = NULL; } /* check if already visited */ if (Vdetach(vg_id) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); goto out; } if (options->trip == 1) { if (Vdetach(vgroup_id_out) == FAIL) { printf("Error: Could not detach group <%s>\n", vg_name); goto out; } } break; /*------------------------------------------------------------------------- * SDS *------------------------------------------------------------------------- */ case DFTAG_SD: /* Scientific Data */ case DFTAG_SDG: /* Scientific Data Group */ case DFTAG_NDG: /* Numeric Data Group */ /* copy dataset */ if (copy_sds(sd_id, sd_out, tag, ref, vgroup_id_out_par, path_name, options, list_tbl, td1, td2, infile_id, outfile_id) < 0) { goto out; } break; /*------------------------------------------------------------------------- * Image *------------------------------------------------------------------------- */ case DFTAG_RI: /* Raster Image */ case DFTAG_CI: /* Compressed Image */ case DFTAG_RIG: /* Raster Image Group */ case DFTAG_RI8: /* Raster-8 image */ case DFTAG_CI8: /* RLE compressed 8-bit image */ case DFTAG_II8: /* IMCOMP compressed 8-bit image */ /* copy GR */ if (copy_gr(infile_id, outfile_id, gr_id, gr_out, tag, ref, vgroup_id_out_par, path_name, options, list_tbl) < 0) { goto out; } break; /*------------------------------------------------------------------------- * Vdata *------------------------------------------------------------------------- */ case DFTAG_VH: /* Vdata Header */ if (copy_vs(infile_id, outfile_id, tag, ref, vgroup_id_out_par, path_name, options, list_tbl, 0) < 0) { goto out; } break; } /* switch */ free(vg_name); vg_name = NULL; } /* i */ free(vg_class); free(vg_name); return SUCCEED; out: free(vg_class); free(vg_name); free(tags); free(refs); free(path); return FAIL; } /*------------------------------------------------------------------------- * Function: list_gr * * Purpose: get top level GR image list * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_gr(int32 infile_id, int32 outfile_id, int32 gr_id, /* GR interface identifier */ int32 gr_out, /* GR interface identifier */ list_table_t *list_tbl, options_t *options) { int32 ri_id, /* raster image identifier */ n_rimages, /* number of raster images in the file */ n_file_attrs, /* number of file attributes */ ri_index, /* index of a image */ gr_ref, /* reference number of the GR image */ dim_sizes[2], /* dimensions of an image */ n_comps, /* number of components an image contains */ interlace_mode, /* interlace mode of an image */ data_type, /* number type of an image */ n_attrs; /* number of attributes belong to an image */ char name[H4_MAX_GR_NAME]; /* name of an image */ /* determine the contents of the file */ if (GRfileinfo(gr_id, &n_rimages, &n_file_attrs) == FAIL) { printf("Could not get info for GR\n"); return FAIL; } for (ri_index = 0; ri_index < n_rimages; ri_index++) { ri_id = GRselect(gr_id, ri_index); if (GRgetiminfo(ri_id, name, &n_comps, &data_type, &interlace_mode, dim_sizes, &n_attrs) == FAIL) { printf("Could not get GR info\n"); goto out; } gr_ref = GRidtoref(ri_id); /* check if already inserted in Vgroup; search all image tags */ if (list_table_search(list_tbl, DFTAG_RI, gr_ref) >= 0 || list_table_search(list_tbl, DFTAG_CI, gr_ref) >= 0 || list_table_search(list_tbl, DFTAG_RIG, gr_ref) >= 0 || list_table_search(list_tbl, DFTAG_RI8, gr_ref) >= 0 || list_table_search(list_tbl, DFTAG_CI8, gr_ref) >= 0 || list_table_search(list_tbl, DFTAG_II8, gr_ref) >= 0) { if (GRendaccess(ri_id) == FAIL) { printf("Could not close GR\n"); return FAIL; } continue; } /* copy GR */ if (copy_gr(infile_id, outfile_id, gr_id, gr_out, DFTAG_RI, gr_ref, 0, NULL, options, list_tbl) < 0) goto out; /* terminate access to the current raster image */ if (GRendaccess(ri_id) == FAIL) { printf("Could not end GR\n"); return FAIL; } } return SUCCEED; out: GRendaccess(ri_id); return FAIL; } /*------------------------------------------------------------------------- * Function: list_sds * * Purpose: get top level SDS * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_sds(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options) { int32 sds_id, /* dataset identifier */ n_datasets, /* number of datasets in the file */ n_file_attrs, /* number of file attributes */ index, /* index of a dataset */ sds_ref, /* reference number */ dim_sizes[H4_MAX_VAR_DIMS], /* dimensions of an image */ data_type, /* number type */ rank, /* rank */ n_attrs; /* number of attributes */ char name[H4_MAX_GR_NAME]; /* name of dataset */ /* determine the number of data sets in the file and the number of file attributes */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attrs) == FAIL) { printf("Could not get SDS info\n"); return FAIL; } for (index = 0; index < n_datasets; index++) { sds_id = SDselect(sd_id, index); SDgetinfo(sds_id, name, &rank, dim_sizes, &data_type, &n_attrs); sds_ref = SDidtoref(sds_id); /* check if already inserted in Vgroup; search all SDS tags */ if (list_table_search(list_tbl, DFTAG_SD, sds_ref) >= 0 || list_table_search(list_tbl, DFTAG_SDG, sds_ref) >= 0 || list_table_search(list_tbl, DFTAG_NDG, sds_ref) >= 0) { SDendaccess(sds_id); continue; } /* copy SDS */ if (copy_sds(sd_id, sd_out, TAG_GRP_DSET, sds_ref, 0, NULL, options, list_tbl, td1, td2, infile_id, outfile_id) < 0) goto out; /* terminate access to the current dataset */ SDendaccess(sds_id); } return SUCCEED; out: SDendaccess(sds_id); return FAIL; } /*------------------------------------------------------------------------- * Function: list_vs * * Purpose: get top level VS * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_vs(int32 infile_id, int32 outfile_id, list_table_t *list_tbl, options_t *options) { int32 nlones = 0, /* number of lone vdatas */ *ref_array = NULL, /* buffer to hold the ref numbers of lone vdatas */ ref; /* temporary ref number */ int i; /*------------------------------------------------------------------------- * initialize the V interface *------------------------------------------------------------------------- */ if (Vstart(infile_id) == FAIL) { return FAIL; } if (options->trip == 1) { if (Vstart(outfile_id) == FAIL) { return FAIL; } } /*------------------------------------------------------------------------- * get the names and class names of all the lone vdatas * first, call Vlone with nlones set to 0 to get the number of lone vdatas * in the file * *------------------------------------------------------------------------- */ nlones = VSlone(infile_id, NULL, nlones); if (nlones > 0) { /* * use the nlones returned to allocate sufficient space for the * buffer ref_array to hold the reference numbers of all lone vgroups, */ ref_array = (int32 *)malloc(sizeof(int32) * nlones); /* * and call VSlone again to retrieve the reference numbers into * the buffer ref_array. */ nlones = VSlone(infile_id, ref_array, nlones); /* * iterate through each lone vdata. */ for (i = 0; i < nlones; i++) { /* * attach to the current vdata then get its * name and class. note: the current vdata must be detached before * moving to the next. */ ref = ref_array[i]; /* check if already inserted in Vgroup, search with VS tag */ if (list_table_search(list_tbl, DFTAG_VH, ref) >= 0) { continue; } /* copy VS */ if (copy_vs(infile_id, outfile_id, DFTAG_VH, ref, 0, NULL, options, list_tbl, 1) < 0) { goto out; } } /* for */ /* free the space allocated */ free(ref_array); ref_array = NULL; } /* if */ /*------------------------------------------------------------------------- * terminate access to the V interface *------------------------------------------------------------------------- */ if (Vend(infile_id) == FAIL) { printf("Error: Could not end Vdata interface\n"); return FAIL; } if (options->trip == 1) { if (Vend(outfile_id) == FAIL) { printf("Error: Could not end Vdata interface\n"); return FAIL; } } return SUCCEED; out: Vend(infile_id); if (options->trip == 1) Vend(outfile_id); /* free the space allocated */ free(ref_array); return FAIL; } /*------------------------------------------------------------------------- * Function: list_glb * * Purpose: list/copy global SDS attributes, global GR attributes * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_glb(int32 infile_id, int32 outfile_id, int32 sd_id, int32 sd_out, int32 gr_id, int32 gr_out, list_table_t *list_tbl, options_t *options) { int32 n_datasets, /* number of datasets in the file */ n_file_attrs; /* number of file attributes */ (void)infile_id; (void)outfile_id; (void)list_tbl; if (options->trip == 0) { return SUCCEED; } /*------------------------------------------------------------------------- * copy SDS global attributes *------------------------------------------------------------------------- */ /* determine the number of data sets in the file and the number of file attributes */ if (SDfileinfo(sd_id, &n_datasets, &n_file_attrs) == FAIL) { printf("Could not get SDS info\n"); return FAIL; } if (copy_sds_attrs(sd_id, sd_out, n_file_attrs, options) < 0) return FAIL; /*------------------------------------------------------------------------- * copy GR global attributes *------------------------------------------------------------------------- */ /* determine the number of data sets in the file and the number of file attributes */ if (GRfileinfo(gr_id, &n_datasets, &n_file_attrs) == FAIL) { printf("Could not get GR info\n"); return FAIL; } if (copy_gr_attrs(gr_id, gr_out, n_file_attrs, options) < 0) return FAIL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: list_an * * Purpose: list/copy AN FILE objects * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_an(int32 infile_id, int32 outfile_id, options_t *options) { int32 an_id, /* AN interface identifier */ ann_id, /* an annotation identifier */ ann_length, /* length of the text in an annotation */ an_out, /* AN interface identifier */ file_label_id, /* file label identifier */ file_desc_id, /* file description identifier */ n_file_labels, n_file_descs, n_data_labels, n_data_descs; char *ann_buf = NULL; /* buffer to hold the read annotation */ int i; /* position of an annotation in all of the same type*/ if (options->trip == 0) { return SUCCEED; } /* Initialize the AN interface */ an_id = ANstart(infile_id); an_out = ANstart(outfile_id); /* * Get the annotation information, e.g., the numbers of file labels, file * descriptions, data labels, and data descriptions. */ if (ANfileinfo(an_id, &n_file_labels, &n_file_descs, &n_data_labels, &n_data_descs) == FAIL) { printf("Could not get AN info\n"); goto out; } /*------------------------------------------------------------------------- * AN_FILE_LABEL *------------------------------------------------------------------------- */ for (i = 0; i < n_file_labels; i++) { /* Get the identifier of the current data label */ ann_id = ANselect(an_id, i, AN_FILE_LABEL); /* Get the length of the data label */ ann_length = ANannlen(ann_id); /* Allocate space for the buffer to hold the data label text */ ann_buf = malloc((ann_length + 1) * sizeof(char)); /* * Read and display the file label. Note that the size of the buffer, * i.e., the third parameter, is 1 character more than the length of * the data label; that is for the null character. It is not the case * when a description is retrieved because the description does not * necessarily end with a null character. * */ if (ANreadann(ann_id, ann_buf, ann_length + 1) == FAIL) { printf("Could not read AN\n"); goto out; } /* Create the file label */ file_label_id = ANcreatef(an_out, AN_FILE_LABEL); /* Write the annotations */ if (ANwriteann(file_label_id, ann_buf, ann_length) == FAIL) { printf("Failed to write file label %d\n", i); goto out; } /* Terminate access to the current data label */ if (ANendaccess(ann_id) == FAIL || ANendaccess(file_label_id) == FAIL) { printf("Could not end AN\n"); goto out; } /* Free the space allocated for the annotation buffer */ free(ann_buf); } /*------------------------------------------------------------------------- * AN_FILE_DESC *------------------------------------------------------------------------- */ for (i = 0; i < n_file_descs; i++) { /* Get the identifier of the current data label */ ann_id = ANselect(an_id, i, AN_FILE_DESC); /* Get the length of the data label */ ann_length = ANannlen(ann_id); /* Allocate space for the buffer to hold the data label text */ ann_buf = malloc((ann_length + 1) * sizeof(char)); if (ANreadann(ann_id, ann_buf, ann_length + 1) == FAIL) { printf("Could not read AN\n"); goto out; } /* Create the label */ file_desc_id = ANcreatef(an_out, AN_FILE_DESC); /* Write the annotations */ if (ANwriteann(file_desc_id, ann_buf, ann_length) == FAIL) { printf("Failed to write file description %d\n", i); goto out; } /* Terminate access to the current data label */ if (ANendaccess(ann_id) == FAIL || ANendaccess(file_desc_id) == FAIL) { printf("Could not read AN\n"); goto out; } /* Free the space allocated for the annotation buffer */ free(ann_buf); ann_buf = NULL; } /* Terminate access to the AN interface */ if (ANend(an_id) == FAIL || ANend(an_out) == FAIL) { printf("Could not end AN\n"); goto out; } return SUCCEED; out: if (ANend(an_id) == FAIL || ANend(an_out) == FAIL) { printf("Could not end AN\n"); } free(ann_buf); return FAIL; } /*------------------------------------------------------------------------- * Function: list_pal * * Purpose: list/copy lone palettes * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int list_pal(const char *infname, const char *outfname, list_table_t *list_tbl, options_t *options) { uint8 palette_data[256 * 3]; intn nPals, j; uint16 ref; if (options->trip == 0) { return SUCCEED; } DFPrestart(); if ((nPals = DFPnpals(infname)) == FAIL) { printf("Failed to get palettes in <%s>\n", infname); return FAIL; } for (j = 0; j < nPals; j++) { if (DFPgetpal(infname, (void *)palette_data) == FAIL) { printf("Failed to read palette <%d> in <%s>\n", j, infname); return FAIL; } ref = DFPlastref(); /* check if already inserted in image */ if (list_table_search(list_tbl, DFTAG_IP8, ref) >= 0) { continue; } if (DFPaddpal(outfname, palette_data) == FAIL) { printf("Failed to write palette in <%s>\n", outfname); return FAIL; } } return SUCCEED; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_lsttable.c000066400000000000000000000133301503061704500212030ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include "hrepack_lsttable.h" /*------------------------------------------------------------------------- * Function: list_table_search * * Purpose: linear search the table for tag and ref * * Return: index on success, -1 on failure * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ int list_table_search(list_table_t *list_tbl, int tag, int ref) { int i; for (i = 0; i < list_tbl->nobjs; i++) { if (list_tbl->objs[i].tag == tag && list_tbl->objs[i].ref == ref) return i; } return -1; } /*------------------------------------------------------------------------- * Function: list_table_add * * Purpose: add pair tag/ref and object path to table * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void list_table_add(list_table_t *list_tbl, int tag, int ref, char *path) { int path_len; int i; if (list_tbl->nobjs == list_tbl->size) { list_tbl->size *= 2; list_tbl->objs = (obj_info_t *)realloc(list_tbl->objs, list_tbl->size * sizeof(obj_info_t)); for (i = list_tbl->nobjs; i < list_tbl->size; i++) { list_tbl->objs[i].tag = -1; list_tbl->objs[i].ref = -1; list_tbl->objs[i].path = NULL; } } i = list_tbl->nobjs++; list_tbl->objs[i].tag = tag; list_tbl->objs[i].ref = ref; /* copy the path over */ path_len = strlen(path); list_tbl->objs[i].path = (char *)malloc(path_len + 1); HIstrncpy(list_tbl->objs[i].path, path, path_len + 1); } /*------------------------------------------------------------------------- * Function: list_table_init * * Purpose: initialize table * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void list_table_init(list_table_t **tbl) { int i; list_table_t *list_tbl = (list_table_t *)malloc(sizeof(list_table_t)); list_tbl->size = 20; list_tbl->nobjs = 0; list_tbl->objs = (obj_info_t *)malloc(list_tbl->size * sizeof(obj_info_t)); for (i = 0; i < list_tbl->size; i++) { list_tbl->objs[i].tag = -1; list_tbl->objs[i].ref = -1; } *tbl = list_tbl; } /*------------------------------------------------------------------------- * Function: list_table_free * * Purpose: free table memory * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ void list_table_free(list_table_t *list_tbl) { int i; for (i = 0; i < list_tbl->nobjs; i++) { assert(list_tbl->objs[i].path); free(list_tbl->objs[i].path); } free(list_tbl->objs); free(list_tbl); } /*------------------------------------------------------------------------- * Function: list_table_check * * Purpose: search the table for valid objects * * Return: error string or NULL for success * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 3, 2003 * *------------------------------------------------------------------------- */ const char * list_table_check(list_table_t *list_tbl, char *obj_name) { int i; int32 tag; for (i = 0; i < list_tbl->nobjs; i++) { if (strcmp(list_tbl->objs[i].path, obj_name) == 0) { /* found the name; check if it is an SDS or Image */ tag = list_tbl->objs[i].tag; if (tag == DFTAG_SD || tag == DFTAG_SDG || tag == DFTAG_NDG || tag == DFTAG_RI || tag == DFTAG_CI || tag == DFTAG_RIG || tag == DFTAG_RI8 || tag == DFTAG_CI8 || tag == DFTAG_II8) return NULL; else return "not compressible/chunk object"; } } return "not found"; } /*------------------------------------------------------------------------- * Function: list_table_print * * Purpose: print object list * * Return: void * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 25, 2003 * *------------------------------------------------------------------------- */ void list_table_print(list_table_t *list_tbl) { int i; printf("---------------------------------------\n"); printf("%5s %6s %-15s\n", "Tag", "Ref", "Name"); printf("---------------------------------------\n"); for (i = 0; i < list_tbl->nobjs; i++) { printf("%5d %6d %-15s\n", list_tbl->objs[i].tag, list_tbl->objs[i].ref, list_tbl->objs[i].path); } } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_lsttable.h000066400000000000000000000052651503061704500212200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_LSTTABLE_H #define HREPACK_LSTTABLE_H #include "hdf.h" #include "mfhdf.h" #define PFORMAT " %-7s %-4s %-10s %-7s\n" /*chunk info, compression info, ratio, name*/ #define PFORMAT1 " %-7s %-7s %-7s" /*chunk info, compression info, name*/ #ifdef __cplusplus extern "C" { #endif /* structure to store the tag/ref and path of an object the pair tag/ref uniquely identifies an HDF object the path field is used for information purposes */ typedef struct obj_info_t { int tag; int ref; char *path; /* build a path for each object using the vgroup separation symbol "/" * along the vgroup hierarchy traversal, e.g., the vgroup hierarchy * * vg0 -----> vg1 -----> vg2 -----> sds1 * -----> vg3 -----> sds2 * * would built 6 objects with the paths * * vg0 * vg0/vg1 * vg0/vg1/vg2 * vg0/vg1/vg2/sds1 * vg0/vg1/vg3 * vg0/vg1/vg3/sds2 */ } obj_info_t; /*struct that stores all objects */ typedef struct list_table_t { int size; int nobjs; obj_info_t *objs; } list_table_t; /* table methods */ void list_table_init(list_table_t **list_tbl); void list_table_free(list_table_t *list_tbl); int list_table_search(list_table_t *list_tbl, int tag, int ref); void list_table_add(list_table_t *list_tbl, int tag, int ref, char *obj_name); const char *list_table_check(list_table_t *list_tbl, char *obj_name); void list_table_print(list_table_t *list_tbl); #ifdef __cplusplus } #endif #endif /* HREPACK_LSTTABLE_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_main.c000066400000000000000000000157451503061704500203310ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf.h" #include "hfile_priv.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_parse.h" #include "hrepack_opttable.h" static void usage(void); /*------------------------------------------------------------------------- * Function: main * * Purpose: hrepack main program * * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu * * Date: July 10, 2003 * *------------------------------------------------------------------------- */ int main(int argc, char **argv) { char *infile = NULL; char *outfile = NULL; options_t options; /*the global options */ int i; int ret; /* initialize options */ hrepack_init(&options, 0); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-i") == 0) { infile = argv[++i]; } else if (strcmp(argv[i], "-o") == 0) { outfile = argv[++i]; } else if (strcmp(argv[i], "-h") == 0) { goto out; } else if (strcmp(argv[i], "-v") == 0) { options.verbose = 1; } else if (strcmp(argv[i], "-V") == 0) { printf("%s, %s\n\n", argv[0], LIBVER_STRING); exit(0); } else if (strcmp(argv[i], "-t") == 0) { /* add the -t option */ if (hrepack_addcomp(argv[i + 1], &options) < 0) goto out; /* jump to next */ ++i; } else if (strcmp(argv[i], "-c") == 0) { /* parse the -c option */ if (hrepack_addchunk(argv[i + 1], &options) < 0) goto out; /* jump to next */ ++i; } else if (strcmp(argv[i], "-m") == 0) { options.threshold = parse_number(argv[i + 1]); if (options.threshold == -1) { printf("Error: Invalid threshold size <%s>\n", argv[i + 1]); goto out; } ++i; } else if (strcmp(argv[i], "-f") == 0) { if (read_info(argv[++i], &options) < 0) goto out; } else if (argv[i][0] == '-') { goto out; } } if (infile == NULL || outfile == NULL) goto out; /* zip it */ ret = hrepack_main(infile, outfile, &options); /* free tables */ hrepack_end(&options); /* unix error return code */ if (ret == -1) return 1; else return 0; out: usage(); /* free tables */ hrepack_end(&options); return 0; } /*------------------------------------------------------------------------- * Function: usage * * Purpose: print usage * * Return: void * *------------------------------------------------------------------------- */ static void usage(void) { printf("usage: hrepack -i input -o output [-V] [-h] [-v] [-t 'comp_info'] [-c 'chunk_info'] [-f cfile] " "[-m size]\n"); printf(" -i input input HDF File\n"); printf(" -o output output HDF File\n"); printf(" [-V] prints version of the HDF4 library and exits\n"); printf(" [-h] prints this usage\n"); printf(" [-v] verbose mode\n"); printf(" [-t 'comp_info'] compression type: 'comp_info' is a string with the format\n"); printf("\t\t :\n"); printf("\t\t is a comma separated list of object names\n"); printf("\t\t meaning apply compression only to those objects\n"); printf("\t\t '*' means all objects\n"); printf("\t\t can be:\n"); printf("\t\t RLE, for RLE compression\n"); printf("\t\t HUFF, for Huffman\n"); printf("\t\t GZIP, for gzip\n"); printf("\t\t JPEG, for JPEG (for images only)\n"); printf("\t\t SZIP, for szip\n"); printf("\t\t NONE, to uncompress\n"); printf("\t\t is optional compression info\n"); printf("\t\t RLE, no parameter\n"); printf("\t\t HUFF, the skip-size\n"); printf("\t\t GZIP, the deflation level\n"); printf("\t\t JPEG, the quality factor\n"); printf("\t\t SZIP, pixels per block, compression mode (NN or EC)\n"); printf(" [-c 'chunk_info'] apply chunking. 'chunk_info' is a string with the format\n"); printf("\t\t :\n"); printf("\t\t is a comma separated list of object names\n"); printf("\t\t meaning apply chunking only to those objects\n"); printf("\t\t '*' means all objects\n"); printf("\t\t is the chunk size of each dimension:\n"); printf("\t\t or\n"); printf("\t\t NONE, to unchunk a previous chunked object\n"); printf(" [-f cfile] file with compression information -t and -c\n"); printf(" [-m size] do not compress objects smaller than size (bytes)\n"); printf("\n"); printf("Examples:\n"); printf("\n"); printf("1) hrepack -v -i file1.hdf -o file2.hdf -t '*:RLE'\n"); printf(" compresses all objects in the file file1.hdf, using RLE compression\n"); printf("\n"); printf("2) hrepack -v -i file1.hdf -o file2.hdf -t '/group1/A,/group2/B,C:HUFF 1'\n"); printf(" applies Skipping Huffman compression with skip factor of 1,\n"); printf(" for objects /group1/A, /group2/B and C\n"); printf("\n"); printf("2) hrepack -v -i file1.hdf -o file2.hdf -t '/group1/D:RLE' -c 'D,E:10x10'\n"); printf(" applies RLE compression for object /group1/D\n"); printf(" applies chunking to objects D and E using a chunk size of 10 for the 2 dimensions\n"); printf("\n"); printf("3) hrepack -v -i file1.hdf -o file2.hdf -t 'A:NONE'\n"); printf(" uncompresses object A\n"); printf("\n"); printf("4) hrepack -v -i file1.hdf -o file2.hdf -t 'A:SZIP 8,NN'\n"); printf(" applies SZIP compression to object A, with parameters 8 and NN\n"); printf("\n"); printf("Note: the use of the verbose option -v is recommended\n"); } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_opttable.c000066400000000000000000000201731503061704500212060ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include "hrepack_opttable.h" /*------------------------------------------------------------------------- * Function: options_table_init * * Purpose: init options table * * Return: void * *------------------------------------------------------------------------- */ void options_table_init(options_table_t **tbl) { int i; options_table_t *op_tbl = (options_table_t *)malloc(sizeof(options_table_t)); op_tbl->size = 3; op_tbl->nelems = 0; op_tbl->objs = (pack_info_t *)malloc(op_tbl->size * sizeof(pack_info_t)); for (i = 0; i < op_tbl->size; i++) { strcpy(op_tbl->objs[i].objpath, "\0"); op_tbl->objs[i].comp.info = -1; op_tbl->objs[i].comp.type = COMP_CODE_NONE; op_tbl->objs[i].chunk.rank = -1; } *tbl = op_tbl; } /*------------------------------------------------------------------------- * Function: options_table_free * * Purpose: free table memory * * Return: void * *------------------------------------------------------------------------- */ void options_table_free(options_table_t *op_tbl) { free(op_tbl->objs); free(op_tbl); } /*------------------------------------------------------------------------- * Function: options_add_chunk * * Purpose: add a chunking -c option to the option list * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int options_add_chunk(obj_list_t *obj_list, int n_objs, int32 *chunk_lengths, int chunk_rank, options_table_t *op_tbl) { int i, j, k, I, added = 0, found = 0; if (op_tbl->nelems + n_objs >= op_tbl->size) { op_tbl->size += n_objs; op_tbl->objs = (pack_info_t *)realloc(op_tbl->objs, op_tbl->size * sizeof(pack_info_t)); for (i = op_tbl->nelems; i < op_tbl->size; i++) { strcpy(op_tbl->objs[i].objpath, "\0"); op_tbl->objs[i].comp.info = -1; op_tbl->objs[i].comp.type = COMP_CODE_NONE; op_tbl->objs[i].chunk.rank = -1; } } /* search if this object is already in the table; "path" is the key */ if (op_tbl->nelems > 0) { /* go through the supplied list of names */ for (j = 0; j < n_objs; j++) { /* linear table search */ for (i = 0; i < op_tbl->nelems; i++) { /*already on the table */ if (strcmp(obj_list[j].obj, op_tbl->objs[i].objpath) == 0) { /* already chunk info inserted for this one; exit */ if (op_tbl->objs[i].chunk.rank > 0) { printf("Input Error: chunk information already inserted for <%s>\n", obj_list[j].obj); return FAIL; } /* insert the chunk info */ else { op_tbl->objs[i].chunk.rank = chunk_rank; for (k = 0; k < chunk_rank; k++) op_tbl->objs[i].chunk.chunk_lengths[k] = chunk_lengths[k]; found = 1; break; } } /* if */ } /* i */ if (found == 0) { /* keep the grow in a temp var */ I = op_tbl->nelems + added; added++; strcpy(op_tbl->objs[I].objpath, obj_list[j].obj); op_tbl->objs[I].chunk.rank = chunk_rank; for (k = 0; k < chunk_rank; k++) op_tbl->objs[I].chunk.chunk_lengths[k] = chunk_lengths[k]; } } /* j */ } /* first time insertion */ else { /* go through the supplied list of names */ for (j = 0; j < n_objs; j++) { I = op_tbl->nelems + added; added++; strcpy(op_tbl->objs[I].objpath, obj_list[j].obj); op_tbl->objs[I].chunk.rank = chunk_rank; for (k = 0; k < chunk_rank; k++) op_tbl->objs[I].chunk.chunk_lengths[k] = chunk_lengths[k]; } } op_tbl->nelems += added; return SUCCEED; } /*------------------------------------------------------------------------- * Function: options_add_comp * * Purpose: add a compression -t option to the option list * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ int options_add_comp(obj_list_t *obj_list, int n_objs, comp_info_t comp, options_table_t *op_tbl) { int i, j, I, added = 0, found = 0; if (op_tbl->nelems + n_objs >= op_tbl->size) { op_tbl->size += n_objs; op_tbl->objs = (pack_info_t *)realloc(op_tbl->objs, op_tbl->size * sizeof(pack_info_t)); for (i = op_tbl->nelems; i < op_tbl->size; i++) { strcpy(op_tbl->objs[i].objpath, "\0"); op_tbl->objs[i].comp.info = -1; op_tbl->objs[i].comp.type = COMP_CODE_NONE; op_tbl->objs[i].chunk.rank = -1; } } /* search if this object is already in the table; "path" is the key */ if (op_tbl->nelems > 0) { /* go through the supplied list of names */ for (j = 0; j < n_objs; j++) { /* linear table search */ for (i = 0; i < op_tbl->nelems; i++) { /*already on the table */ if (strcmp(obj_list[j].obj, op_tbl->objs[i].objpath) == 0) { /* already COMP info inserted for this one; exit */ if (op_tbl->objs[i].comp.type > 0) { printf("Input Error: compression information already inserted for <%s>\n", obj_list[j].obj); return FAIL; } /* insert the comp info */ else { op_tbl->objs[i].comp = comp; found = 1; break; } } /* if */ } /* i */ if (found == 0) { /* keep the grow in a temp var */ I = op_tbl->nelems + added; added++; strcpy(op_tbl->objs[I].objpath, obj_list[j].obj); op_tbl->objs[I].comp = comp; } } /* j */ } /* first time insertion */ else { /* go through the supplied list of names */ for (j = 0; j < n_objs; j++) { I = op_tbl->nelems + added; added++; strcpy(op_tbl->objs[I].objpath, obj_list[j].obj); op_tbl->objs[I].comp = comp; } } op_tbl->nelems += added; return 0; } /*------------------------------------------------------------------------- * Function: options_get_object * * Purpose: get object from table; "path" is the key * * Return: information for one object, contains PATH, CHUNK info and COMP info * *------------------------------------------------------------------------- */ pack_info_t * options_get_object(char *path, options_table_t *op_tbl) { int i; for (i = 0; i < op_tbl->nelems; i++) { /* found it */ if (strcmp(op_tbl->objs[i].objpath, path) == 0) { return (&op_tbl->objs[i]); } } return NULL; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_opttable.h000066400000000000000000000031161503061704500212110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_OPTTABLE_H #define HREPACK_OPTTABLE_H #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #ifdef __cplusplus extern "C" { #endif void options_table_init(options_table_t **tbl); void options_table_free(options_table_t *table); int options_add_chunk(obj_list_t *obj_list, int n_objs, int32 *chunk_lengths, int chunk_rank, options_table_t *table); int options_add_comp(obj_list_t *obj_list, int n_objs, comp_info_t comp, options_table_t *table); pack_info_t *options_get_object(char *path, options_table_t *table); #ifdef __cplusplus } #endif #endif /* HREPACK_OPTTABLE_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_parse.c000066400000000000000000000357261503061704500205200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include "hrepack.h" #include "hrepack_parse.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif /*------------------------------------------------------------------------- * Function: parse_comp * * Purpose: read compression info * * Return: a list of names, the number of names and its compression type * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 15, 2003 * *------------------------------------------------------------------------- */ obj_list_t * parse_comp(const char *str, int *n_objs, comp_info_t *comp) { unsigned i, u; char c; size_t len = strlen(str); int j, m, n, k, end_obj = -1, no_param = 0, l; char obj[H4_MAX_NC_NAME]; char scomp[10]; char stype[5]; char smask[3]; obj_list_t *obj_list = NULL; /* check for the end of object list and number of objects */ for (i = 0, n = 0; i < len; i++) { c = str[i]; if (c == ':') { end_obj = i; } if (c == ',') { n++; } } if (end_obj == -1) { /* missing : */ printf("Input Error: Invalid compression input in <%s>\n", str); return NULL; } /*------------------------------------------------------------------------- * allocate the object list of names *------------------------------------------------------------------------- */ n++; obj_list = malloc(n * sizeof(obj_list_t)); *n_objs = n; /* get object list */ for (j = 0, k = 0, n = 0; j < end_obj; j++, k++) { c = str[j]; obj[k] = c; if (c == ',' || j == end_obj - 1) { if (c == ',') obj[k] = '\0'; else obj[k + 1] = '\0'; strcpy(obj_list[n].obj, obj); memset(obj, 0, sizeof(obj)); n++; k = -1; } } /* nothing after : */ if (end_obj + 1 == (int)len) { printf("Input Error: Invalid compression type in <%s>\n", str); goto out; } /*------------------------------------------------------------------------- * get compression type *------------------------------------------------------------------------- */ m = 0; for (i = end_obj + 1, k = 0; i < len; i++, k++) { c = str[i]; scomp[k] = c; if (c == ' ' || i == len - 1) { if (c == ' ') /*one more parameter */ { scomp[k] = '\0'; /*cut space */ /* SZIP is a special case , it can be SZIP=8,EC SZIP=8,NN */ if (strcmp(scomp, "SZIP") == 0) { l = -1; /* mask index check */ for (m = 0, u = i + 1; u < len; u++, m++) { if (str[u] == ',') { stype[m] = '\0'; /* end digit of szip */ l = 0; /* start EC or NN search */ u++; /* skip ',' */ } c = str[u]; if (!isdigit(c) && l == -1) { printf("Input Error: Compression parameter not digit in <%s>\n", str); goto out; } if (l == -1) stype[m] = c; else { smask[l] = c; l++; if (l == 2) { smask[l] = '\0'; i = len - 1; /* end */ (*n_objs)--; /* we counted an extra ',' */ if (strcmp(smask, "NN") == 0) comp->szip_mode = NN_MODE; else if (strcmp(smask, "EC") == 0) comp->szip_mode = EC_MODE; else { printf("Input Error: szip mask must be 'NN' or 'EC' \n"); goto out; } } } } /* u */ } /* SZIP */ else { /* here we could have 1, 2 or 3 digits (2 and 3 in the JPEG case) */ for (m = 0, u = i + 1; u < len; u++, m++) { c = str[u]; if (!isdigit(c)) { printf("Input Error: Compression parameter not digit in <%s>\n", str); goto out; } stype[m] = c; } /* m */ } /* else , no SZIP */ /* set return value of the compression parameter */ stype[m] = '\0'; comp->info = atoi(stype); i += m; /* jump */ } /* if c==' ' */ else if (i == len - 1) { /*no more parameters */ scomp[k + 1] = '\0'; no_param = 1; } if (strcmp(scomp, "NONE") == 0) comp->type = COMP_CODE_NONE; else if (strcmp(scomp, "RLE") == 0) { comp->type = COMP_CODE_RLE; if (m > 0) { /*RLE does not have parameter */ printf("Input Error: Extra compression parameter in RLE <%s>\n", str); goto out; } } else if (strcmp(scomp, "HUFF") == 0) { comp->type = COMP_CODE_SKPHUFF; if (no_param) { /*no more parameters, HUFF must have parameter */ printf("Input Error: Missing compression parameter in <%s>\n", str); goto out; } } else if (strcmp(scomp, "GZIP") == 0) { comp->type = COMP_CODE_DEFLATE; if (no_param) { /*no more parameters, GZIP must have parameter */ printf("Input Error: Missing compression parameter in <%s>\n", str); goto out; } } else if (strcmp(scomp, "JPEG") == 0) { comp->type = COMP_CODE_JPEG; if (no_param) { /*no more parameters, JPEG must have parameter */ printf("Input Error: Missing compression parameter in <%s>\n", str); goto out; } } else if (strcmp(scomp, "SZIP") == 0) { #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { comp->type = COMP_CODE_SZIP; if (no_param) { /*no more parameters, SZIP must have parameter */ printf("Input Error: Missing compression parameter in <%s>\n", str); goto out; } if (comp->szip_mode == FAIL) { printf("Input Error: SZIP compression mode must be NN_MODE or EC_MODE"); goto out; } } else { printf("Input Error: SZIP encoder is not available\n"); goto out; } #else printf("Input Error: SZIP compression is not available\n"); goto out; #endif } else { printf("Input Error: Invalid compression type in <%s>\n", str); goto out; } } } /*i*/ /*------------------------------------------------------------------------- * check valid parameters *------------------------------------------------------------------------- */ switch (comp->type) { default: break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: if (comp->info <= 0) { printf("Input Error: Invalid compression parameter in <%s>\n", str); goto out; } break; case COMP_CODE_DEFLATE: if (comp->info < 0 || comp->info > 9) { printf("Input Error: Invalid compression parameter in <%s>\n", str); goto out; } break; case COMP_CODE_JPEG: if (comp->info < 0 || comp->info > 100) { printf("Input Error: Invalid compression parameter in <%s>\n", str); goto out; } break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ if ((comp->info <= 1 || comp->info > SZ_MAX_PIXELS_PER_BLOCK) || (comp->info % 2 != 0)) { printf("Input Error: Invalid compression parameter in <%s>. \ Pixels per block must be an even number < %d\n", str, SZ_MAX_PIXELS_PER_BLOCK); goto out; } #else printf("Input Error: Invalid compression method in <%s>. SZIP is not available\n", str); goto out; #endif break; }; return obj_list; out: free(obj_list); return NULL; } /*------------------------------------------------------------------------- * Function: parse_chunk * * Purpose: read chunk info * * Return: a list of names, the number of names and its chunking info * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 17, 2003 * *------------------------------------------------------------------------- */ obj_list_t * parse_chunk(const char *str, int *n_objs, int32 *chunk_lengths, int *chunk_rank) { obj_list_t *obj_list = NULL; unsigned i; char c; size_t len = strlen(str); int j, n, k, end_obj = -1, c_index; char obj[H4_MAX_NC_NAME]; char sdim[10]; /* check for the end of object list and number of objects */ for (i = 0, n = 0; i < len; i++) { c = str[i]; if (c == ':') { end_obj = i; } if (c == ',') { n++; } } if (end_obj == -1) { /* missing : */ printf("Input Error: Invalid chunking input in <%s>\n", str); return NULL; } /*------------------------------------------------------------------------- * allocate the object list of names *------------------------------------------------------------------------- */ n++; obj_list = malloc(n * sizeof(obj_list_t)); *n_objs = n; /* get object list */ for (j = 0, k = 0, n = 0; j < end_obj; j++, k++) { c = str[j]; obj[k] = c; if (c == ',' || j == end_obj - 1) { if (c == ',') obj[k] = '\0'; else obj[k + 1] = '\0'; strcpy(obj_list[n].obj, obj); memset(obj, 0, sizeof(obj)); n++; k = -1; } } /* nothing after : */ if (end_obj + 1 == (int)len) { printf("Input Error: Invalid chunking in <%s>\n", str); goto out; } /* get chunk info */ k = 0; for (i = end_obj + 1, c_index = 0; i < len; i++) { c = str[i]; sdim[k] = c; k++; /*increment sdim index */ if (!isdigit(c) && c != 'x' && c != 'N' && c != 'O' && c != 'N' && c != 'E') { printf("Input Error: Invalid chunking in <%s>\n", str); goto out; } if (c == 'x' || i == len - 1) { if (c == 'x') { sdim[k - 1] = '\0'; k = 0; chunk_lengths[c_index] = atoi(sdim); if (chunk_lengths[c_index] == 0) { printf("Input Error: Invalid chunking in <%s>\n", str); goto out; } c_index++; } else if (i == len - 1) { /*no more parameters */ sdim[k] = '\0'; k = 0; if (strcmp(sdim, "NONE") == 0) { *chunk_rank = -2; } else { chunk_lengths[c_index] = atoi(sdim); if (chunk_lengths[c_index] == 0) { printf("Input Error: Invalid chunking in <%s>\n", str); goto out; } *chunk_rank = c_index + 1; } } /*if */ } /*if c=='x' || i==len-1 */ } /*i*/ return obj_list; out: free(obj_list); return NULL; } /*------------------------------------------------------------------------- * Function: parse_number * * Purpose: read a number from command line argument * * Return: number, -1 for FAIL * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 31, 2003 * *------------------------------------------------------------------------- */ int parse_number(char *str) { unsigned i; int n; char c; size_t len = strlen(str); for (i = 0; i < len; i++) { c = str[i]; if (!isdigit(c)) { return -1; } } str[i] = '\0'; n = atoi(str); return n; } /*------------------------------------------------------------------------- * Function: get_scomp * * Purpose: return the compression type as a string * *------------------------------------------------------------------------- */ const char * get_scomp(comp_coder_t code) { if (code == COMP_CODE_RLE) return "RLE"; else if (code == COMP_CODE_NBIT) return "COMP_CODE_NBIT"; else if (code == COMP_CODE_SKPHUFF) return "HUFF"; else if (code == COMP_CODE_DEFLATE) return "GZIP"; else if (code == COMP_CODE_JPEG) return "JPEG"; else if (code == COMP_CODE_SZIP) return "SZIP"; else if (code == COMP_CODE_NONE) return "NONE"; else if (code == COMP_CODE_INVALID) return "COMP_CODE_INVALID"; else { printf("Input Error in compression type\n"); return NULL; } return NULL; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_parse.h000066400000000000000000000026271503061704500205170ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_PARSE_H #define HREPACK_PARSE_H #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #ifdef __cplusplus extern "C" { #endif int parse_number(char *str); /* compression */ obj_list_t *parse_comp(const char *str, int *n_objs, comp_info_t *comp); const char *get_scomp(comp_coder_t code); /* chunking */ obj_list_t *parse_chunk(const char *str, int *n_objs, int32 *chunk_lengths, int *chunk_rank); #ifdef __cplusplus } #endif #endif /* HREPACK_PARSE_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_sds.c000066400000000000000000001025551503061704500201720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack.h" #include "hrepack_sds.h" #include "hrepack_an.h" #include "hrepack_utils.h" #include "hrepack_parse.h" #include "hrepack_opttable.h" #include "hrepack_dim.h" #define H4TOOLS_BUFSIZE (1024 * 1024) #define H4TOOLS_MALLOCSIZE (1024 * 1024) void print_info(int chunk_flags, HDF_CHUNK_DEF *chunk_def, int comp_type, char *path, char *ratio); int get_print_info(int chunk_flags, HDF_CHUNK_DEF *chunk_def, int comp_type, char *path, char *sds_name, int32 sd_id); /*------------------------------------------------------------------------- * Function: copy_sds * * Purpose: copy an SDS from input file to output file and compress it * using options * * Return: SUCCEED, FAIL * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 10, 2003 * *------------------------------------------------------------------------- */ int copy_sds(int32 sd_in, int32 sd_out, int32 tag, /* tag of input SDS */ int32 ref, /* ref of input SDS */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ options_t *options, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, int32 infile_id, int32 outfile_id) { int32 sds_id, /* data set identifier */ sds_out = FAIL, /* data set identifier */ sds_index, /* index number of the data set */ dtype, /* SDS data type */ dimsizes[H4_MAX_VAR_DIMS], /* dimensions of SDS */ start[H4_MAX_VAR_DIMS], /* read start */ edges[H4_MAX_VAR_DIMS], /* read edges */ nattrs, /* number of SDS attributes */ rank, /* rank of SDS */ sds_ref, /* reference number of the output data set */ numtype, /* number type */ eltsz, /* element size */ nelms, /* number of elements */ dim_id, /* dimension ID */ dim_out; /* dimension ID */ char sds_name[H4_MAX_NC_NAME]; char dim_name[H4_MAX_NC_NAME]; char *path = NULL; void *buf = NULL; void *dim_buf = NULL; int i, j; int info; /* temporary int compression information */ comp_coder_t comp_type; /* compression type requested */ comp_coder_t comp_type_in; /* compression type original */ comp_info c_info; /* compression information requested */ comp_info c_info_in; /* compression information original */ HDF_CHUNK_DEF chunk_def; /* chunk definition */ HDF_CHUNK_DEF chunk_def_in; /* chunk definition original */ int32 chunk_flags; /* chunk flags */ int32 chunk_flags_in; /* chunk flags original*/ int szip_mode; /* szip mode, EC, NN */ intn empty_sds; int have_info = 0; size_t need; /* read size needed */ void *sm_buf = NULL; int is_record = 0; sds_index = SDreftoindex(sd_in, ref); sds_id = SDselect(sd_in, sds_index); /*obtain name,rank,dimsizes,datatype and num of attributes of sds */ if (SDgetinfo(sds_id, sds_name, &rank, dimsizes, &dtype, &nattrs) == FAIL) { printf("Could not get information for SDS\n"); SDendaccess(sds_id); return FAIL; } /* check if the given SDS is a dimension scale, return 0 for no table add */ if (SDiscoordvar(sds_id)) { /* add SDS coordinate variable to dimension table 1 */ dim_table_add(td1, ref, sds_name); SDendaccess(sds_id); return SUCCEED; } /* initialize path */ path = get_path(path_name, sds_name); /* add object to table */ list_table_add(list_tbl, tag, ref, path); /*------------------------------------------------------------------------- * check if the input SDS is empty. if so , avoid some operations (mainly read, write) *------------------------------------------------------------------------- */ if (SDcheckempty(sds_id, &empty_sds) == FAIL) { printf("Failed to check empty SDS <%s>\n", path); goto out; } /*------------------------------------------------------------------------- * element size and number of elements *------------------------------------------------------------------------- */ /* compute the number of the bytes for each value */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); /* get number of elements */ nelms = 1; for (j = 0; j < rank; j++) { nelms *= dimsizes[j]; } /*------------------------------------------------------------------------- * get the original compression/chunk information from the object *------------------------------------------------------------------------- */ /* reset variables before retrieving information */ comp_type = comp_type_in = COMP_CODE_NONE; chunk_flags = chunk_flags_in = HDF_NONE; if (empty_sds == 0) { memset(&c_info_in, 0, sizeof(comp_info)); if (SDgetcompinfo(sds_id, &comp_type_in, &c_info_in) == FAIL) { printf("Could not get compression information for SDS <%s>\n", path); goto out; } /* get chunk lengths */ if (SDgetchunkinfo(sds_id, &chunk_def_in, &chunk_flags_in) == FAIL) { printf("Could not get chunking information for SDS <%s>\n", path); goto out; } /* retrieve the compress information if so */ if ((HDF_CHUNK | HDF_COMP) == chunk_flags_in) { chunk_def_in.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_RLE: chunk_def_in.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def_in.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def_in.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def_in.comp.comp_type = COMP_CODE_DEFLATE; chunk_def_in.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ chunk_def_in.comp.comp_type = COMP_CODE_SZIP; chunk_def_in.comp.cinfo.szip = c_info_in.szip; #else printf("Error: SZIP compression is not available <%s>\n", path); goto out; #endif break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type_in, path); goto out; }; } /*------------------------------------------------------------------------- * set the default values to the ones read from the object *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * compression *------------------------------------------------------------------------- */ comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_NBIT: printf("Nbit compression not supported in this version <%s>\n", path); break; case COMP_CODE_NONE: break; case COMP_CODE_RLE: break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ info = c_info_in.szip.pixels_per_block; if (c_info_in.szip.options_mask & SZ_EC_OPTION_MASK) { szip_mode = EC_MODE; } else if (c_info_in.szip.options_mask & SZ_NN_OPTION_MASK) { szip_mode = NN_MODE; } #else printf("SZIP compression not supported in this version <%s>\n", path); #endif break; case COMP_CODE_SKPHUFF: info = c_info_in.skphuff.skp_size; break; case COMP_CODE_DEFLATE: info = c_info_in.deflate.level; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type, path); goto out; break; }; /*------------------------------------------------------------------------- * chunking *------------------------------------------------------------------------- */ chunk_flags = chunk_flags_in; if ((HDF_CHUNK) == chunk_flags) { for (i = 0; i < rank; i++) chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } else if ((HDF_CHUNK | HDF_COMP) == chunk_flags) { for (i = 0; i < rank; i++) { chunk_def.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; chunk_def.comp.chunk_lengths[i] = chunk_def_in.chunk_lengths[i]; } chunk_def.comp.comp_type = comp_type_in; switch (comp_type_in) { case COMP_CODE_RLE: chunk_def.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff = c_info_in.skphuff; break; case COMP_CODE_DEFLATE: chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate = c_info_in.deflate; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ chunk_def.comp.comp_type = COMP_CODE_SZIP; chunk_def.comp.cinfo.szip = c_info_in.szip; #else printf("Error: SZIP compression not available in %d <%s>\n", comp_type_in, path); #endif break; default: printf("Error: Unrecognized compression code in %d <%s>\n", comp_type_in, path); goto out; }; } /*------------------------------------------------------------------------- * get the compression/chunk information of this object from the table * translate to usable information * this is done ONLY for the second trip inspection *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip > 0) { have_info = options_get_info(options, /* global options */ &chunk_flags, /* chunk flags OUT */ &chunk_def, /* chunk definition OUT */ &info, /* compression information OUT */ &szip_mode, /* compression information OUT */ &comp_type, /* compression type OUT */ rank, /* rank of object IN */ path, /* path of object IN */ 1, /* number of GR image planes (for SZIP), IN */ dimsizes, /* dimensions (for SZIP), IN */ dtype /* numeric type ( for SZIP), IN */ ); if (have_info == FAIL) goto out; } /* check inspection mode */ /*------------------------------------------------------------------------- * check for maximum number of chunks threshold *------------------------------------------------------------------------- */ if (options->trip > 0) { int count = 1, nchunks; int maxchunk = INT_MAX; if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { for (j = 0; j < rank; j++) { count *= chunk_def.chunk_lengths[j]; } nchunks = nelms / count; if (nchunks > maxchunk) { printf("Warning: number of chunks is %d (greater than %d). Not chunking <%s>\n", nchunks, maxchunk, path); chunk_flags = HDF_NONE; } } } /*------------------------------------------------------------------------- * check for objects too small *------------------------------------------------------------------------- */ if (have_info == 1 && options->trip > 0 && nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ chunk_flags = chunk_flags_in; comp_type = comp_type_in; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, path); } } } /* empty_sds */ /*------------------------------------------------------------------------- * check if the requested compression is valid * SDSs do not support JPEG *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip > 0 && empty_sds == 0) { switch (comp_type) { case COMP_CODE_NONE: case COMP_CODE_RLE: case COMP_CODE_SKPHUFF: case COMP_CODE_DEFLATE: case COMP_CODE_SZIP: case COMP_CODE_NBIT: break; case COMP_CODE_JPEG: printf("Error: JPEG compression is not available for <%s>\n", path); goto out; break; default: printf("Error: Unrecognized compression code %d in <%s>\n", comp_type_in, path); goto out; } } /* check inspection mode */ /*------------------------------------------------------------------------- * if we are in first trip inspection mode, exit, after printing the information *------------------------------------------------------------------------- */ /* check inspection mode */ if (options->trip == 0) { /* close sds before get info */ SDendaccess(sds_id); if (options->verbose) { if (get_print_info(chunk_flags_in, &chunk_def, comp_type, path, sds_name, sd_in) == FAIL) goto out; } free(path); return SUCCEED; } /*------------------------------------------------------------------------- * create new SDS * check for unlimited dimension * SDisrecord determines whether the data set identified by the parameter sds_id * is appendable, which means that the slowest-changing dimension of the SDS array * is declared unlimited when the data set is created. *------------------------------------------------------------------------- */ /* do not use unlimited if compression is needed since combination of unlimited and compression is not allowed. */ if (SDisrecord(sds_id) && comp_type <= COMP_CODE_NONE) { int32 dimsizes_cre[H4_MAX_VAR_DIMS]; is_record = 1; for (j = 0; j < rank; j++) { dimsizes_cre[j] = dimsizes[j]; } dimsizes_cre[0] = SD_UNLIMITED; if ((sds_out = SDcreate(sd_out, sds_name, dtype, rank, dimsizes_cre)) == FAIL) { printf("Failed to create new SDS <%s>\n", path); goto out; } } else { if ((sds_out = SDcreate(sd_out, sds_name, dtype, rank, dimsizes)) == FAIL) { printf("Failed to create new SDS <%s>\n", path); goto out; } } /*------------------------------------------------------------------------- * set chunk * * Chunked -> flags = HDF_CHUNK * Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP * Non-chunked -> flags = HDF_NONE *------------------------------------------------------------------------- */ if (empty_sds == 0) { /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { /* unlimited dimensions don't work with chunking */ if (!is_record) { if (SDsetchunk(sds_out, chunk_def, chunk_flags) == FAIL) { printf("Error: Failed to set chunk dimensions for <%s>\n", path); goto out; } } } /*------------------------------------------------------------------------- * set compression * * COMP_CODE_RLE -> simple RLE encoding * COMP_CODE_SKPHUFF -> Skipping huffman encoding * COMP_CODE_DEFLATE -> gzip 'deflate' encoding *------------------------------------------------------------------------- */ /* use compress without chunk-in */ else if (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE) { if (nelms * eltsz < options->threshold) { /* reset to the original values . we don't want to uncompress if it was */ comp_type = COMP_CODE_NONE; if (options->verbose) { printf("Warning: object size smaller than %d bytes. Not compressing <%s>\n", options->threshold, path); } } else { /* setup compression factors */ switch (comp_type) { case COMP_CODE_SZIP: if (set_szip(info, szip_mode, &c_info) == FAIL) { comp_type = COMP_CODE_NONE; } break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: c_info.skphuff.skp_size = info; break; case COMP_CODE_DEFLATE: c_info.deflate.level = info; break; case COMP_CODE_NBIT: comp_type = COMP_CODE_NONE; /* not supported in this version */ break; default: printf("Error: Unrecognized compression code %d\n", comp_type); goto out; } /* HDF4 2.6 does not allow the combination of unlimited dimensions and compression. See bug HDFFR-1280 The fix: for the case of the combination of unlimited dimensions and compression, compressed will be applied but dimension is changed to limited size in hrepack. */ if (SDsetcompress(sds_out, comp_type, &c_info) == FAIL) { printf("Error: Failed to set compression for <%s>\n", path); goto out; } } } need = (size_t)(nelms * eltsz); /* bytes needed */ if (need < H4TOOLS_MALLOCSIZE || /* for compressed datasets do one operation I/O, but allow hyperslab for chunked */ (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE)) { buf = (void *)malloc(need); } /*------------------------------------------------------------------------- * read all *------------------------------------------------------------------------- */ if (buf != NULL) { /* set edges of SDS, select all */ for (i = 0; i < rank; i++) { edges[i] = dimsizes[i]; start[i] = 0; } /* read */ if (SDreaddata(sds_id, start, NULL, edges, buf) == FAIL) { printf("Could not read SDS <%s>\n", path); goto out; } /* write */ if (SDwritedata(sds_out, start, NULL, edges, buf) == FAIL) { printf("Failed to write to new SDS <%s>\n", path); goto out; } } else /* possibly not enough memory, read/write by hyperslabs */ { size_t p_type_nbytes = eltsz; /*size of type */ uint32 p_nelmts = nelms; /*total selected elmts */ uint32 elmtno; /*counter */ int carry; /*counter carry value */ /* stripmine info */ int32 sm_size[H4_MAX_VAR_DIMS]; /*stripmine size */ int32 sm_nbytes; /*bytes per stripmine */ /* hyperslab info */ int32 hs_offset[H4_MAX_VAR_DIMS]; /*starting offset */ int32 hs_size[H4_MAX_VAR_DIMS]; /*size this pass */ int32 hs_nelmts; /*elements in request */ /* * determine the strip mine size and allocate a buffer. The strip mine is * a hyperslab whose size is manageable. */ sm_nbytes = p_type_nbytes; for (i = rank; i > 0; --i) { sm_size[i - 1] = MIN(dimsizes[i - 1], H4TOOLS_BUFSIZE / sm_nbytes); sm_nbytes *= sm_size[i - 1]; assert(sm_nbytes > 0); } sm_buf = malloc((size_t)sm_nbytes); /* the stripmine loop */ memset(hs_offset, 0, sizeof hs_offset); for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) { /* calculate the hyperslab size */ if (rank > 0) { for (i = 0, hs_nelmts = 1; i < rank; i++) { hs_size[i] = MIN(dimsizes[i] - hs_offset[i], sm_size[i]); hs_nelmts *= hs_size[i]; } } else { hs_nelmts = 1; } /* rank */ /* read */ if (SDreaddata(sds_id, hs_offset, NULL, hs_size, sm_buf) == FAIL) { printf("Could not read SDS <%s>\n", sds_name); goto out; } /* write */ if (SDwritedata(sds_out, hs_offset, NULL, hs_size, sm_buf) == FAIL) { printf("Failed to write to new SDS <%s>\n", path); goto out; } /* calculate the next hyperslab offset */ for (i = rank, carry = 1; i > 0 && carry; --i) { hs_offset[i - 1] += hs_size[i - 1]; if (hs_offset[i - 1] == dimsizes[i - 1]) hs_offset[i - 1] = 0; else carry = 0; } /* i */ } /* elmtno */ /* free */ free(sm_buf); sm_buf = NULL; } /* hyperslab read */ } /* empty_sds */ /*------------------------------------------------------------------------- * copy attributes *------------------------------------------------------------------------- */ if (copy_sds_attrs(sds_id, sds_out, nattrs, options) == FAIL) { goto out; } /*------------------------------------------------------------------------- * copy dimension scales *------------------------------------------------------------------------- */ /* loop through each dimension up to rank of SDS */ for (i = 0; i < rank; i++) { int32 dim_size; /* get dimension handle for input dimension */ if ((dim_id = SDgetdimid(sds_id, i)) == FAIL) { printf("Failed to get dimension %d of SDS <%s>\n", i, path); goto out; } /* get dimension handle for output dimension */ if ((dim_out = SDgetdimid(sds_out, i)) == FAIL) { printf("Failed to get dim_id for dimension %d of SDS <%s>\n", i, path); goto out; } /* get dimension information for input dimension */ if (SDdiminfo(dim_id, dim_name, &dim_size, &dtype, &nattrs) == FAIL) { printf("Failed to get information for dimension %d of SDS <%s>\n", i, path); goto out; } /* add dimension name to dimension scales table */ dim_table_add(td2, -1, dim_name); /* set output dimension name */ if (SDsetdimname(dim_out, dim_name) == FAIL) { printf("Failed to set dimension name %d of SDS <%s>\n", i, path); goto out; } /* copy attributes */ if (nattrs && copy_sds_attrs(dim_id, dim_out, nattrs, options) == FAIL) { printf("Failed to copy attributes for dimension %d of of SDS <%s>\n", i, path); goto out; } /* copy scale information over */ if (dtype != 0) { intn okdim; /* compute the number of the bytes for each value. */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); if ((dim_buf = (void *)malloc(dimsizes[i] * eltsz)) == NULL) { printf("Failed to alloc %d for dimension scale\n", dimsizes[i]); goto out; } if ((okdim = SDgetdimscale(dim_id, dim_buf)) == FAIL) { printf("Warning: Failed to get scale information for %s\n", dim_name); } if (okdim != FAIL) { /* use dimsizes returned by SDgetinfo */ if (SDsetdimscale(dim_out, dimsizes[i], dtype, dim_buf) == FAIL) { printf("Failed to set scale information for %s\n", dim_name); goto out; } } free(dim_buf); } } /* obtain the reference number of the new SDS using its identifier */ if ((sds_ref = SDidtoref(sds_out)) == FAIL) { printf("Failed to get new SDS reference in <%s>\n", path); goto out; } /*------------------------------------------------------------------------- * add SDS to group *------------------------------------------------------------------------- */ /* add it to group, if present */ if (vgroup_id_out_par) { /* add the SDS to the vgroup. the tag DFTAG_NDG is used */ if (Vaddtagref(vgroup_id_out_par, TAG_GRP_DSET, sds_ref) == FAIL) { printf("Failed to add new SDS to group <%s>\n", path); goto out; } } /*------------------------------------------------------------------------- * copy ANs *------------------------------------------------------------------------- */ if (copy_an(infile_id, outfile_id, ref, tag, sds_ref, tag, path, options) < 0) { goto out; } /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ if (SDendaccess(sds_id) == FAIL) printf("Failed to close SDS <%s>\n", path); if (sds_out != FAIL) { if (SDendaccess(sds_out) == FAIL) printf("Failed to close SDS <%s>\n", path); } /*------------------------------------------------------------------------- * print compression *------------------------------------------------------------------------- */ assert(options->trip == 1); if (options->verbose) { if (get_print_info(chunk_flags_in, &chunk_def, comp_type, path, sds_name, sd_out) == FAIL) goto out; } free(path); free(buf); return SUCCEED; out: if (SDendaccess(sds_id) == FAIL) printf("Failed to close SDS <%s>\n", path); if (sds_out != FAIL) { if (SDendaccess(sds_out) == FAIL) printf("Failed to close SDS <%s>\n", path); } free(path); free(buf); return FAIL; } /*------------------------------------------------------------------------- * Function: copy_sds_attrs * * Purpose: copy SD attributes from input file to output file * used for global, dataset and dimension attributes * * Return: SUCCEED, FAIL * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 30, 2003 * *------------------------------------------------------------------------- */ int copy_sds_attrs(int32 id_in, int32 id_out, int32 nattrs, options_t *options) { int32 dtype, /* SDS data type */ numtype, /* number type */ eltsz, /* element size */ nelms; /* number of elements */ char attr_name[H4_MAX_NC_NAME]; void *attr_buf = NULL; int i; (void)options; /* loop through attributes in input SDS */ for (i = 0; i < nattrs; i++) { if (SDattrinfo(id_in, i, attr_name, &dtype, &nelms) == FAIL) { printf("Cannot get information for attribute number %d\n", i); goto out; } /* compute the number of the bytes for each value. */ numtype = dtype & DFNT_MASK; eltsz = DFKNTsize(numtype | DFNT_NATIVE); if ((attr_buf = (void *)malloc(nelms * eltsz)) == NULL) { printf("Error allocating %d values of size %d for attribute %s", nelms, numtype, attr_name); goto out; } /* read attributes from input SDS */ if (SDreadattr(id_in, i, attr_buf) == FAIL) { printf("Cannot read attribute %s\n", attr_name); goto out; } /* put attributes into output SDS */ if (SDsetattr(id_out, attr_name, dtype, nelms, attr_buf) == FAIL) { printf("Cannot write attribute %s\n", attr_name); goto out; } free(attr_buf); } return SUCCEED; out: free(attr_buf); return FAIL; } /*------------------------------------------------------------------------- * get_print_info *------------------------------------------------------------------------- */ int get_print_info(int chunk_flags, HDF_CHUNK_DEF *chunk_def, /* chunk definition */ int comp_type, char *path, char *sds_name, int32 sd_id) { int32 comp_size; int32 uncomp_size; int32 sds_idx; int32 sds_id; double a, b, r = 0; char *comp_str = NULL; int is_record = 0; if ((sds_idx = SDnametoindex(sd_id, sds_name)) == FAIL) goto out; if ((sds_id = SDselect(sd_id, sds_idx)) == FAIL) goto out; if (SDisrecord(sds_id)) is_record = 1; if (SDgetdatasize(sds_id, &comp_size, &uncomp_size) == FAIL) { printf("Could not get data sizes for <%s>\n", sds_name); goto out; } if (SDendaccess(sds_id) == FAIL) goto out; /* Has to hold a double, which can have a LOT of digits. Even if that * isn't realistic in practice, the compiler will complain. */ if (NULL == (comp_str = calloc(1, 512))) goto out; /* unlimited dimensions don't work with compression */ if (is_record) { comp_type = COMP_CODE_NONE; chunk_flags = HDF_NONE; } if (comp_type > COMP_CODE_NONE) { /* compression ratio = uncompressed size / compressed size */ a = uncomp_size; b = comp_size; if (b != 0) r = a / b; sprintf(comp_str, "(%.2f:1)", r); } print_info(chunk_flags, chunk_def, comp_type, path, comp_str); free(comp_str); return SUCCEED; out: free(comp_str); return FAIL; } /*------------------------------------------------------------------------- * print_info *------------------------------------------------------------------------- */ void print_info(int chunk_flags, HDF_CHUNK_DEF *chunk_def, /* chunk definition */ int comp_type, char *path, char *ratio) { int pr_comp_type = 0; int pr_chunk_flags; pr_chunk_flags = chunk_flags; if (comp_type > 0) { pr_comp_type = comp_type; } else { if (pr_chunk_flags == (HDF_CHUNK | HDF_COMP)) { pr_comp_type = chunk_def->comp.comp_type; } } printf(PFORMAT, (pr_chunk_flags > 0) ? "chunk" : "", /*chunk information*/ (pr_comp_type > 0) ? get_scomp(pr_comp_type) : "", /*compression information*/ ratio, /*ratio */ path); /*name*/ } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_sds.h000066400000000000000000000027341503061704500201750ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_SDS_H #define HREPACK_SDS_H #include "hrepack.h" #include "hrepack_lsttable.h" #include "hrepack_dim.h" #ifdef __cplusplus extern "C" { #endif int copy_sds(int32 sd_in, int32 sd_out, int32 tag, int32 ref, int32 vgroup_id_out_par, char *group_name, options_t *options, list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, int32 infile_id, int32 outfile_id); int copy_sds_attrs(int32 sds_id, int32 sds_out, int32 nattrs, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_SDS_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_utils.c000066400000000000000000000437661503061704500205510ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack_utils.h" #include "hrepack_opttable.h" /*------------------------------------------------------------------------- * Function: is_reserved * * Purpose: check for reserved Vgroup/Vdata class/names * * Return: 1 if reserved, 0 if not * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 22, 2003 * *------------------------------------------------------------------------- */ int is_reserved(char *vgroup_class) { int ret = 0; /* ignore reserved HDF groups/vdatas */ if (vgroup_class != NULL) { if ((strcmp(vgroup_class, _HDF_ATTRIBUTE) == 0) || (strcmp(vgroup_class, _HDF_VARIABLE) == 0) || (strcmp(vgroup_class, _HDF_DIMENSION) == 0) || (strcmp(vgroup_class, _HDF_UDIMENSION) == 0) || (strcmp(vgroup_class, DIM_VALS) == 0) || (strcmp(vgroup_class, DIM_VALS01) == 0) || (strcmp(vgroup_class, _HDF_CDF) == 0) || (strcmp(vgroup_class, GR_NAME) == 0) || (strcmp(vgroup_class, RI_NAME) == 0) || (strcmp(vgroup_class, RIGATTRNAME) == 0) || (strcmp(vgroup_class, RIGATTRCLASS) == 0)) { ret = 1; } /* class and name(partial) for chunk table i.e. Vdata */ if ((strncmp(vgroup_class, "_HDF_CHK_TBL_", 13) == 0)) { ret = 1; } } return ret; } /*------------------------------------------------------------------------- * Function: get_path * * Purpose: return absolute path for an object * * Return: path * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 11, 2003 * *------------------------------------------------------------------------- */ char * get_path(char *path_name, char *obj_name) { char *path = NULL; /* initialize path */ if (path_name != NULL) { path = (char *)malloc(strlen(path_name) + strlen(obj_name) + 2); strcpy(path, path_name); strcat(path, "/"); strcat(path, obj_name); } else { path = (char *)malloc(strlen(obj_name) + 1); strcpy(path, obj_name); } return path; } /*------------------------------------------------------------------------- * Function: options_get_info * * Purpose: get COMP and CHUNK information from options * * Return: 0 if no information for this PATH, 1 otherwise * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 28, 2003 * *------------------------------------------------------------------------- */ int options_get_info(options_t *options, /* global options */ int32 *chunk_flags, /* chunk flags OUT */ HDF_CHUNK_DEF *chunk_def, /* chunk definition OUT */ int *info, /* compression information OUT */ int *szip_mode, /* compression information OUT */ comp_coder_t *comp_type, /* compression type OUT */ int rank, /* rank of object IN */ char *path, /* path of object IN */ int ncomps, /* number of GR image planes (for SZIP), IN */ int32 *dimsizes, /* dimensions (for SZIP), IN */ int32 dtype /* numeric type (for SZIP), IN */ ) { (void)dtype; (void)dimsizes; (void)ncomps; pack_info_t *obj = NULL; /* check if we have information for this object */ int i; comp_info c_info; /* for SZIP default values */ /*------------------------------------------------------------------------- * CASE 1: chunk==ALL comp==SELECTED *------------------------------------------------------------------------- */ if (options->all_chunk == 1 && options->all_comp == 0) { /* NONE option */ if (options->chunk_g.rank == -2) { chunk_flags = HDF_NONE; } /*check if the input rank is correct (warn this one cannot be chunked) */ else if (options->chunk_g.rank != rank) { if (options->verbose) printf("Warning: chunk rank does not apply to <%s>\n", path); } else { *chunk_flags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def->chunk_lengths[i] = options->chunk_g.chunk_lengths[i]; } obj = options_get_object(path, options->op_tbl); if (obj != NULL) { /* 0 is the NONE option */ *comp_type = obj->comp.type; *info = obj->comp.info; *szip_mode = obj->comp.szip_mode; /* chunk and compress */ if (*chunk_flags == HDF_CHUNK && *comp_type > 0) { /* assign the object CHUNK information */ *chunk_flags = HDF_CHUNK | HDF_COMP; chunk_def->comp.comp_type = obj->comp.type; switch (obj->comp.type) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: if (set_szip(obj->comp.info, obj->comp.szip_mode, &c_info) == FAIL) { return FAIL; } chunk_def->comp.cinfo = c_info; break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: chunk_def->comp.cinfo.skphuff.skp_size = obj->comp.info; break; case COMP_CODE_DEFLATE: chunk_def->comp.cinfo.deflate.level = obj->comp.info; break; case COMP_CODE_JPEG: chunk_def->comp.cinfo.jpeg.quality = obj->comp.info; chunk_def->comp.cinfo.jpeg.force_baseline = 1; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", obj->comp.type, path); break; }; /*switch */ for (i = 0; i < rank; i++) { /* To use chunking with RLE, Skipping Huffman, and GZIP compression */ chunk_def->comp.chunk_lengths[i] = options->chunk_g.chunk_lengths[i]; } } /* chunk_flags */ } /* obj */ } /*------------------------------------------------------------------------- * CASE 2: chunk==SELECTED comp==SELECTED *------------------------------------------------------------------------- */ else if (options->all_chunk == 0 && options->all_comp == 0) { obj = options_get_object(path, options->op_tbl); if (obj != NULL) { /* NONE option */ if (obj->chunk.rank == -2) { *chunk_flags = HDF_NONE; } /* check if we have CHUNK information inserted for this one */ else if (obj->chunk.rank > 0) { /*check if the input rank is correct (just here, better later than never) */ if (obj->chunk.rank != rank) { printf("Error: chunk rank does not match for <%s>\n", path); return FAIL; } *chunk_flags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def->chunk_lengths[i] = obj->chunk.chunk_lengths[i]; } /* check if we have COMP information; 0 is the NONE option */ if (obj->comp.type >= 0) { *comp_type = obj->comp.type; *info = obj->comp.info; *szip_mode = obj->comp.szip_mode; /* check if we have also CHUNK info */ if (obj->chunk.rank > 0) { *chunk_flags = HDF_CHUNK | HDF_COMP; chunk_def->comp.comp_type = *comp_type; switch (*comp_type) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: if (set_szip(obj->comp.info, obj->comp.szip_mode, &c_info) == FAIL) { return FAIL; } chunk_def->comp.cinfo = c_info; break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: chunk_def->comp.cinfo.skphuff.skp_size = obj->comp.info; break; case COMP_CODE_DEFLATE: chunk_def->comp.cinfo.deflate.level = obj->comp.info; break; case COMP_CODE_JPEG: chunk_def->comp.cinfo.jpeg.quality = obj->comp.info; chunk_def->comp.cinfo.jpeg.force_baseline = 1; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", *comp_type, path); return FAIL; break; }; } } /* comp.type */ } /* obj */ } /* else if */ /*------------------------------------------------------------------------- * CASE 3: chunk==SELECTED comp==ALL *------------------------------------------------------------------------- */ else if (options->all_chunk == 0 && options->all_comp == 1) { obj = options_get_object(path, options->op_tbl); if (obj != NULL) { /* NONE option */ if (obj->chunk.rank == -2) { *chunk_flags = HDF_NONE; } /* check if we have CHUNK information inserted for this one */ else if (obj->chunk.rank > 0) { /*check if the input rank is correct (just here, better later than never) */ if (obj->chunk.rank != rank) { printf("Error: chunk rank does not match for <%s>\n", path); return FAIL; } *chunk_flags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def->chunk_lengths[i] = obj->chunk.chunk_lengths[i]; } } /* obj */ /* we must have COMP information */ *comp_type = options->comp_g.type; *info = options->comp_g.info; *szip_mode = options->comp_g.szip_mode; /* check if we have also CHUNK information */ if ((*chunk_flags == HDF_CHUNK) || (*chunk_flags == (HDF_CHUNK | HDF_COMP))) { *chunk_flags = HDF_CHUNK | HDF_COMP; chunk_def->comp.comp_type = *comp_type; switch (*comp_type) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: if (set_szip(options->comp_g.info, options->comp_g.szip_mode, &c_info) == FAIL) { return FAIL; } chunk_def->comp.cinfo = c_info; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: chunk_def->comp.cinfo.skphuff.skp_size = *info; break; case COMP_CODE_DEFLATE: chunk_def->comp.cinfo.deflate.level = *info; break; case COMP_CODE_JPEG: chunk_def->comp.cinfo.jpeg.quality = *info; ; chunk_def->comp.cinfo.jpeg.force_baseline = 1; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", *comp_type, path); return FAIL; break; }; } } /* else if */ /*------------------------------------------------------------------------- * CASE 4: chunk==ALL comp==ALL *------------------------------------------------------------------------- */ else if (options->all_chunk == 1 && options->all_comp == 1) { /* NONE option */ if (options->chunk_g.rank == -2) { *chunk_flags = HDF_NONE; } /*check if this object rank is the same as input (warn this one cannot be chunked) */ else if (options->chunk_g.rank != rank) { if (options->verbose) printf("Warning: chunk rank does not apply to <%s>\n", path); } else { *chunk_flags = HDF_CHUNK; for (i = 0; i < rank; i++) chunk_def->chunk_lengths[i] = options->chunk_g.chunk_lengths[i]; } /* we must have COMP information */ *comp_type = options->comp_g.type; *info = options->comp_g.info; *szip_mode = options->comp_g.szip_mode; /* check if we can apply CHUNK */ if (options->chunk_g.rank == rank) { *chunk_flags = HDF_CHUNK | HDF_COMP; chunk_def->comp.comp_type = *comp_type; switch (*comp_type) { case COMP_CODE_NONE: break; case COMP_CODE_SZIP: if (set_szip(options->comp_g.info, options->comp_g.szip_mode, &c_info) == FAIL) { return FAIL; } chunk_def->comp.cinfo = c_info; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: chunk_def->comp.cinfo.skphuff.skp_size = *info; break; case COMP_CODE_DEFLATE: chunk_def->comp.cinfo.deflate.level = *info; break; case COMP_CODE_JPEG: chunk_def->comp.cinfo.jpeg.quality = *info; ; chunk_def->comp.cinfo.jpeg.force_baseline = 1; break; default: printf("Error: Unrecognized compression code in %d <%s>\n", *comp_type, path); return FAIL; break; }; } } /* else if */ return (obj == NULL) ? 0 : 1; } /*------------------------------------------------------------------------- * Function: set_szip * * Purpose: utility to set SZIP parameters * * SZIP compresses data block by block, with a user-tunable block size. * This block size is passed in the parameter pixels_per_block and must be even, * with typical values being 8, 10, 16, and 32. The more pixel values vary, * the smaller this number should be. For optimal performance, the number of * pixels per scan line (i.e., the size of the fastest-changing dimension in the chunk) * should be an even multiple of the number of pixels per block. * * Return: 0 for OK, -1 otherwise * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: August 11, 2003 * *------------------------------------------------------------------------- */ int set_szip(int pixels_per_block, /*in */ int compression_mode, /* in */ comp_info *c_info /*out*/) { #ifdef H4_HAVE_LIBSZ int ppb = pixels_per_block; if (SZ_encoder_enabled() == 0) { printf("Warning: SZIP encoder is not enabled\n"); return -1; } if ((compression_mode != NN_MODE) && (compression_mode != EC_MODE)) { printf("SZIP compression mode must be NN_MODE or EC_MODE"); return -1; } /* pixels_per_block must be an even number, and <= pixels_per_scanline and <= SZ_MAX_PIXELS_PER_BLOCK */ if (pixels_per_block & 1) { printf("Pixels per block must be even.\n"); return -1; } if (ppb < 2 || ppb > 32) { printf("Pixels per block must be 2-32.\n"); return -1; } c_info->szip.pixels_per_block = ppb; /* set according to input value */ c_info->szip.options_mask = SZ_EC_OPTION_MASK; if (compression_mode == EC_MODE) { c_info->szip.options_mask = SZ_EC_OPTION_MASK; } else if (compression_mode == NN_MODE) { c_info->szip.options_mask = SZ_NN_OPTION_MASK; } c_info->szip.options_mask |= SZ_RAW_OPTION_MASK; return 0; #else printf("Warning: SZIP compression is not available\n"); return -1; #endif } /*------------------------------------------------------------------------- * Function: cache * * Purpose: Checks chunk size * *------------------------------------------------------------------------- */ int cache(HDF_CHUNK_DEF chunk_def, int32 eltsz, int32 rank, int32 *dimsize) { int32 targetbytes; int32 chunkrow; int32 chunkcnt; int32 chunksizes[32]; int i; int32 cntr; for (i = 0; i < rank; i++) { chunkcnt = 1; targetbytes = dimsize[i] * eltsz; chunkrow = eltsz * chunk_def.chunk_lengths[i]; cntr = chunkrow; while (cntr < targetbytes) { cntr += chunkrow; chunkcnt++; } chunksizes[i] = chunkcnt; } chunkcnt = 1; for (i = 0; i < rank; i++) { chunkcnt *= chunksizes[i]; } printf("total chunks is %d\n", chunkcnt); return 0; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_utils.h000066400000000000000000000043011503061704500205340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_UTILS_H #define HREPACK_UTILS_H #include "hrepack.h" #include "hrepack_parse.h" #ifdef __cplusplus extern "C" { #endif int is_reserved(char *vgroup_class); char *get_path(char *path_name, char *obj_name); int options_get_info(options_t *options, /* global options */ int32 *chunk_flags, /* chunk flags OUT */ HDF_CHUNK_DEF *chunk_def, /* chunk definition OUT */ int *info, /* compression info OUT */ int *szip_mode, /* compression information OUT */ comp_coder_t *comp_type, /* compression type OUT */ int rank, /* rank of object IN */ char *path, /* path of object IN */ int ncomps, /* number of GR image planes (for SZIP), IN */ int32 *dimsizes, /* dimensions (for SZIP), IN */ int32 dtype /* numeric type (for SZIP), IN */ ); int set_szip(int pixels_per_block, /*in */ int compression_mode, /* in */ comp_info *c_info /*out*/); #ifdef __cplusplus } #endif #endif /* HREPACK_UTILS_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_vg.c000066400000000000000000000050711503061704500200100ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack_vg.h" #include "hrepack_utils.h" #include "hrepack_an.h" /*------------------------------------------------------------------------- * Function: copy_vgroup_attrs * * Purpose: copy VG attributes * * Return: FAIL, SUCCEED * *------------------------------------------------------------------------- */ int copy_vgroup_attrs(int32 vg_in, int32 vg_out, char *path, options_t *options) { int n_attrs; int32 data_type, size, n_values; char attr_name[H4_MAX_NC_NAME]; int i; char *buf = NULL; if (options->trip == 0) { return 1; } /* Get the number of attributes attached to this vgroup. */ if ((n_attrs = Vnattrs2(vg_in)) == FAIL) { printf("Failed to get attributes for <%s>\n", path); return -1; } for (i = 0; i < n_attrs; i++) { if ((Vattrinfo2(vg_in, i, attr_name, &data_type, &n_values, &size, NULL, NULL)) == FAIL) { printf("Failed to get attribute %d of <%s>\n", i, path); continue; } if ((buf = (char *)malloc((size_t)(size * n_values))) == NULL) { printf("Failed to get memory for attribute %d of <%s>\n", i, path); continue; } if ((Vgetattr2(vg_in, i, buf)) == FAIL) { printf("Failed to get attribute %d of <%s>\n", i, path); free(buf); continue; } if ((Vsetattr(vg_out, attr_name, data_type, n_values, buf)) == FAIL) { printf("Failed to set attribute %d of <%s>\n", i, path); } free(buf); } return 1; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_vg.h000066400000000000000000000043001503061704500200070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HREPACK_VG_H #define HREPACK_VG_H #include "hrepack.h" #include "hrepack_lsttable.h" #include "hrepack_dim.h" #ifdef __cplusplus extern "C" { #endif int copy_vgroup_attrs(int32 vg_in, int32 vg_out, char *path, options_t *options); int vgroup_insert(int32 infile_id, int32 outfile_id, int32 sd_id, /* SD interface identifier */ int32 sd_out, /* SD interface identifier */ int32 gr_id, /* GR interface identifier */ int32 gr_out, /* GR interface identifier */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ int32 *in_tags, /* tag list for parent group */ int32 *in_refs, /* ref list for parent group */ int npairs, /* number tag/ref pairs for parent group */ list_table_t *list_tbl, dim_table_t *td1, dim_table_t *td2, options_t *options); #ifdef __cplusplus } #endif #endif /* HREPACK_VG_H */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_vs.c000066400000000000000000000261401503061704500200240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hrepack_vs.h" #include "hrepack_utils.h" #include "hrepack_an.h" /*------------------------------------------------------------------------- * Function: copy_vs * * Purpose: copy a VS from input file to output file * * Return: 0, -1 for error * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 11, 2003 * *------------------------------------------------------------------------- */ int copy_vs(int32 infile_id, int32 outfile_id, int32 tag, /* tag of input VS */ int32 ref, /* ref of input VS */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ options_t *options, list_table_t *list_tbl, int is_lone) { int32 vdata_id = FAIL; /* vdata identifier */ int32 vdata_out = FAIL; /* vdata identifier */ int32 vdata_ref, /* reference number of the vdata */ n_records, /* number of records */ vdata_size, interlace_mode, field_type, field_order; int n_fields, n_attrs; char *vdata_name = NULL; char *vdata_class = NULL; char *fieldname_list = NULL; char *path = NULL; char *field_name; uint8 *buf = NULL; int ret = 0; if (NULL == (vdata_name = calloc(1, VSNAMELENMAX))) { ret = -1; goto out; } if (NULL == (vdata_class = calloc(1, VSNAMELENMAX))) { ret = -1; goto out; } if (NULL == (fieldname_list = calloc(1, VSFIELDMAX * FIELDNAMELENMAX))) { ret = -1; goto out; } /*------------------------------------------------------------------------- * attach the vdata, gets its name and class *------------------------------------------------------------------------- */ if ((vdata_id = VSattach(infile_id, ref, "r")) == FAIL) { printf("Failed to attach vdata ref %d\n", ref); ret = -1; goto out; } if (VSgetname(vdata_id, vdata_name) == FAIL) { printf("Failed to name for vdata ref %d\n", ref); ret = -1; goto out; } if (VSgetclass(vdata_id, vdata_class) == FAIL) { printf("Failed to name for vdata ref %d\n", ref); ret = -1; goto out; } /* ignore reserved HDF groups/vdatas; they are lone ones */ if (is_lone == 1 && vdata_class[0] == '\0') { if (is_reserved(vdata_class)) { if (VSdetach(vdata_id) == FAIL) printf("Failed to detach vdata <%s>\n", path_name); ret = 0; goto out; } } /* initialize path */ path = get_path(path_name, vdata_name); /* add object to table */ list_table_add(list_tbl, tag, ref, path); if (options->verbose) { printf(PFORMAT, "", "", "", path); } /* check inspection mode */ if (options->trip == 0) { if (VSdetach(vdata_id) == FAIL) { printf("Failed to detach vdata <%s>\n", path_name); ret = -1; goto out; } vdata_id = FAIL; ret = 0; goto out; } /*------------------------------------------------------------------------- * get vdata info *------------------------------------------------------------------------- */ if (VSinquire(vdata_id, &n_records, &interlace_mode, fieldname_list, &vdata_size, vdata_name) == FAIL) { printf("Failed to get info for vdata ref %d\n", ref); ret = -1; goto out; } /*------------------------------------------------------------------------- * create the VS in the output file. the vdata reference number is set * to -1 for creating and the access mode is "w" for writing *------------------------------------------------------------------------- */ if ((vdata_out = VSattach(outfile_id, -1, "w")) == FAIL) { printf("Failed to create new VS <%s>\n", path); VSdetach(vdata_id); ret = -1; goto out; } if (VSsetname(vdata_out, vdata_name) == FAIL) { printf("Failed to set name for new VS <%s>\n", path); ret = -1; goto out; } if (VSsetclass(vdata_out, vdata_class) == FAIL) { printf("Failed to set class for new VS <%s>\n", path); ret = -1; goto out; } if (VSsetinterlace(vdata_out, interlace_mode) == FAIL) { printf("Failed to set interlace mode for output vdata\n"); ret = -1; goto out; } /*------------------------------------------------------------------------- * define the fields for vdata_out *------------------------------------------------------------------------- */ if ((n_fields = VFnfields(vdata_id)) == FAIL) { printf("Failed getting fields for VS <%s>\n", path); ret = -1; goto out; } for (int i = 0; i < n_fields; i++) { field_name = VFfieldname(vdata_id, i); field_type = VFfieldtype(vdata_id, i); field_order = VFfieldorder(vdata_id, i); if (VSfdefine(vdata_out, field_name, field_type, field_order) == FAIL) { printf("Error: cannot define fields for VS <%s>\n", path); ret = -1; goto out; } } /* Set fields */ if (VSsetfields(vdata_out, fieldname_list) == FAIL) { printf("Error: cannot define fields for VS <%s>\n", path); ret = -1; goto out; } /*------------------------------------------------------------------------- * read, write vdata *------------------------------------------------------------------------- */ /* Set fields for reading */ if (VSsetfields(vdata_id, fieldname_list) == FAIL) { printf("Error: cannot define fields for VS <%s>\n", path); ret = -1; goto out; } if (n_records > 0) { if ((buf = (uint8 *)malloc((size_t)(n_records * vdata_size))) == NULL) { printf("Failed to get memory for new VS <%s>\n", path); ret = -1; goto out; } if (VSread(vdata_id, buf, n_records, interlace_mode) == FAIL) { printf("Error reading vdata <%s>\n", path); ret = -1; goto out; } if (VSwrite(vdata_out, buf, n_records, interlace_mode) == FAIL) { printf("Error writing vdata <%s>\n", path); ret = -1; goto out; } } /*------------------------------------------------------------------------- * read, write attributes *------------------------------------------------------------------------- */ if ((n_attrs = VSfnattrs(vdata_id, -1)) == FAIL) { printf("Failed getting attributes for VS <%s>\n", path); ret = -1; goto out; } for (int i = 0; i < n_attrs; i++) { copy_vdata_attribute(vdata_id, vdata_out, -1, i); } /*------------------------------------------------------------------------- * read, write field attributes *------------------------------------------------------------------------- */ for (int i = 0; i < n_fields; i++) { if ((n_attrs = VSfnattrs(vdata_id, i)) == FAIL) { printf("Failed getting fields for VS <%s>\n", path); ret = -1; goto out; } for (int j = 0; j < n_attrs; j++) { copy_vdata_attribute(vdata_id, vdata_out, i, j); } } /*------------------------------------------------------------------------- * add VS to group, if needed *------------------------------------------------------------------------- */ if (vgroup_id_out_par) { /* obtain the reference number of the new VS */ if ((vdata_ref = VSQueryref(vdata_out)) == 0) { printf("Failed to get new VS reference in <%s>\n", path); } /* add the VS to the vgroup. the INPUT TAG is used */ if (Vaddtagref(vgroup_id_out_par, tag, vdata_ref) == FAIL) { printf("Failed to add new VS to group <%s>\n", path); } } /*------------------------------------------------------------------------- * copy ANs *------------------------------------------------------------------------- */ if (copy_vs_an(infile_id, outfile_id, vdata_id, vdata_out, path, options) < 0) { ret = -1; goto out; } out: /* terminate access to the VSs */ if (FAIL != vdata_id && VSdetach(vdata_id)) { printf("Could not detach VG in <%s>\n", path); ret = -1; } if (FAIL != vdata_out && VSdetach(vdata_out) == FAIL) { printf("Could not detach VG in <%s>\n", path); ret = -1; } free(vdata_name); free(vdata_class); free(fieldname_list); free(path); free(buf); return ret; } /*------------------------------------------------------------------------- * Function: copy_vdata_attribute * * Purpose: copy VS attributes from input file to output file * * Return: 1, for success, -1 for error * * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu * * Date: July 28, 2003 * *------------------------------------------------------------------------- */ int copy_vdata_attribute(int32 in, int32 out, int32 findex, intn attrindex) { char attr_name[H4_MAX_NC_NAME]; int32 n_values, attr_size, attr_type; void **values = NULL; /* Get attribute information */ VSattrinfo(in, findex, attrindex, attr_name, &attr_type, &n_values, &attr_size); /* Allocate space for attribute values */ if ((values = (void *)malloc((size_t)(attr_size * n_values))) == NULL) { printf("Cannot allocate %d values of size %d for attribute %s", n_values, attr_size, attr_name); return -1; } /* Read attribute from input object */ if (VSgetattr(in, findex, attrindex, values) == FAIL) { printf("Cannot read attribute %s\n", attr_name); free(values); return -1; } /* Write attribute to output object */ if (VSsetattr(out, findex, attr_name, attr_type, n_values, values) == FAIL) { printf("Cannot write attribute %s\n", attr_name); free(values); return -1; } free(values); return 1; } hdf4-hdf4.3.1/mfhdf/hrepack/hrepack_vs.h000066400000000000000000000032071503061704500200300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef REPACK_VS_H_ #define REPACK_VS_H_ #include "hrepack.h" #include "hrepack_lsttable.h" #ifdef __cplusplus extern "C" { #endif int copy_vdata_attribute(int32 in, int32 out, int32 findex, intn attrindex); int copy_vs(int32 infile_id, int32 outfile_id, int32 tag, int32 ref, /* ref of input VS */ int32 vgroup_id_out_par, /* output parent group ID */ char *path_name, /* absolute path for input group name */ options_t *options, list_table_t *list_tbl, int is_lone); int copy_vgroup_attrs(int32 vg_in, int32 vg_out, char *path, options_t *options); #ifdef __cplusplus } #endif #endif /* REPACK_VS_H_ */ hdf4-hdf4.3.1/mfhdf/hrepack/hrepacktst.c000066400000000000000000002212751503061704500200550ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "hdf.h" #include "mfhdf.h" #include "hcomp.h" #include "pal_rgb.h" #if defined(H4_HAVE_LIBSZ) #include "szlib.h" #endif #define HREPACK_FILE1 "hrepacktst1.hdf" #define HREPACK_FILE1_OUT "hrepacktst1_out.hdf" #define HREPACK_FILE2 "hrepacktst2.hdf" #define HREPACK_FILE2_OUT "hrepacktst2_out.hdf" #define HREPACK_FILE3 "hrepacktst3.hdf" #define HREPACK_FILE3_OUT "hrepacktst3_out.hdf" #define DATA_FILE1 "image8.txt" #define DATA_FILE2 "image24pixel.txt" #define DATA_FILE3 "image24plane.txt" #define TAG_GRP_IMAGE DFTAG_RIG #define TAG_GRP_DSET DFTAG_NDG #define TESTING(WHAT) \ { \ printf("%-70s", "Testing " WHAT); \ fflush(stdout); \ } #define PASSED() \ { \ puts(" PASSED"); \ fflush(stdout); \ } #define SKIPPED() \ { \ puts(" SKIPPED"); \ fflush(stdout); \ } #define H4_FAILED() \ { \ puts("*FAILED*"); \ fflush(stdout); \ } /* AN labels */ #define FILE_LABEL_TXT "This is a file label" #define FILE_DESC_TXT "This is a file description" #define DATA_LABEL_TXT "This is a data label" #define DATA_DESC_TXT "This is a data annotation" /* dimensions of image */ #define X_DIM_GR 60 #define Y_DIM_GR 400 /* dimensions of dataset */ #define X_DIM 20 #define Y_DIM 800 #define Z_DIM 2 /* dimensions */ #define XD1 60 #define YD1 40 /* dimensions for hyperslab sds */ #define DIM0 10 #define DIM1 10 #define ADD_ROWS (1024 * 1024 - 10) / 10 /* Vdata */ #define N_RECORDS 3 /* number of records the vdata contains */ #define ORDER_1 3 /* order of first field */ #define ORDER_2 1 /* order of second field */ #define ORDER_3 2 /* order of third field */ #define CLASS_NAME "Particle" #define FIELD1_NAME "Position" /* contains x, y, z values */ #define FIELD2_NAME "Mass" /* contains weight values */ #define FIELD3_NAME "Temperature" /* contains min and max values */ #define FIELDNAME_LIST "Position,Mass,Temperature" /* No spaces b/w names */ #define N_VALS_PER_REC (ORDER_1 + ORDER_2 + ORDER_3) /* number of values per record */ /*------------------------------------------------------------------------- * global variables for read image data, used in gr, r8 and r24 add *------------------------------------------------------------------------- */ static int g_length_x; static int g_length_y; static int g_ncomps; static unsigned char *g_image_data = NULL; /*------------------------------------------------------------------------- * read_data * utility function to read ASCII image data * the files have a header of the type * * components * n * height * n * width * n * * followed by the image data * *------------------------------------------------------------------------- */ static int read_data(const char *fname) { int i, n; int count; int color_planes; char str[20]; FILE *f = NULL; int w, h; f = fopen(fname, "r"); if (f == NULL) { printf("Could not open file <%s>\n", fname); goto error; } count = fscanf(f, "%s", str); if (count != 1) goto error; count = fscanf(f, "%d", &color_planes); if (count != 1) goto error; count = fscanf(f, "%s", str); if (count != 1) goto error; count = fscanf(f, "%d", &h); if (count != 1) goto error; count = fscanf(f, "%s", str); if (count != 1) goto error; count = fscanf(f, "%d", &w); if (count != 1) goto error; /* globals */ g_ncomps = color_planes; g_length_y = h; g_length_x = w; free(g_image_data); g_image_data = NULL; g_image_data = (unsigned char *)malloc((size_t)(w * h * color_planes) * sizeof(unsigned char)); for (i = 0; i < h * w * color_planes; i++) { count = fscanf(f, "%d", &n); if (count != 1) goto error; g_image_data[i] = (unsigned char)n; } fclose(f); return 1; error: if (NULL != f) fclose(f); return -1; } /*------------------------------------------------------------------------- * Function: set_chunk_def * * Purpose: set chunk parameters. used by GR and SDS * * Return: void * *------------------------------------------------------------------------- */ static void set_chunk_def(comp_coder_t comp_type, int32 *dim, int32 ncomps, int32 bits_per_pixel, /* for szip */ HDF_CHUNK_DEF *chunk_def) { (void)ncomps; (void)bits_per_pixel; /* Define chunk's dimensions */ chunk_def->chunk_lengths[0] = dim[0] / 2; chunk_def->chunk_lengths[1] = dim[1] / 2; /* To use chunking with RLE, Skipping Huffman, GZIP, SZIP compression */ chunk_def->comp.chunk_lengths[0] = dim[0] / 2; chunk_def->comp.chunk_lengths[1] = dim[1] / 2; /*define some compression specific parameters */ switch (comp_type) { default: break; case COMP_CODE_RLE: chunk_def->comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def->comp.comp_type = COMP_CODE_SKPHUFF; chunk_def->comp.cinfo.skphuff.skp_size = 1; break; case COMP_CODE_DEFLATE: /* GZIP compression, set compression type, flag and deflate level*/ chunk_def->comp.comp_type = COMP_CODE_DEFLATE; chunk_def->comp.cinfo.deflate.level = 6; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { chunk_def->comp.cinfo.szip.pixels_per_block = 2; chunk_def->comp.cinfo.szip.options_mask = SZ_EC_OPTION_MASK; chunk_def->comp.cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; chunk_def->comp.cinfo.szip.pixels = 0; chunk_def->comp.cinfo.szip.pixels_per_scanline = 0; chunk_def->comp.cinfo.szip.bits_per_pixel = 0; } else { printf("Warning: SZIP encoding not available\n"); } #else printf("Warning: SZIP compression not available\n"); #endif break; } } /*------------------------------------------------------------------------- * add functions *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * Function: add_an * * Purpose: utility function to write a AN * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_an(int32 file_id, int32 tag, int32 ref) { int32 an_id, /* AN interface identifier */ data_label_id, /* data label identifier */ data_desc_id; /* data description identifier */ /* Initialize the AN interface */ an_id = ANstart(file_id); /*------------------------------------------------------------------------- * data labels and annotations *------------------------------------------------------------------------- */ /* Create the data label for the object identified by its tag and ref number */ data_label_id = ANcreate(an_id, (uint16)tag, (uint16)ref, AN_DATA_LABEL); /* Write the annotation text to the data label */ if (ANwriteann(data_label_id, DATA_LABEL_TXT, strlen(DATA_LABEL_TXT)) == FAIL) { printf("Error: writing data label in tag %d ref %d\n", tag, ref); return FAIL; } /* Create the data description for the object identified by its tag and ref number */ data_desc_id = ANcreate(an_id, (uint16)tag, (uint16)ref, AN_DATA_DESC); /* Write the annotation text to the data description */ if (ANwriteann(data_desc_id, DATA_DESC_TXT, strlen(DATA_DESC_TXT)) == FAIL) { printf("Error: writing data label in tag %d ref %d\n", tag, ref); return FAIL; } /* Terminate access to each annotation explicitly */ if (ANendaccess(data_label_id) == FAIL || ANendaccess(data_desc_id) == FAIL) { printf("Failed to close AN\n"); return FAIL; } /* Terminate access to the AN interface */ if (ANend(an_id) == FAIL) { printf("Failed to close AN\n"); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_gr_ffile * * Purpose: utility function to read an image data file and save the image with the * GR - Multifile General Raster Image Interface, * optionally inserting the image into the group VGROUP_ID * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_gr_ffile(const char *name_file, int32 gr_id, const char *gr_name, int32 interlace_mode, int32 file_id, int32 vgroup_id) { int32 ri_id, /* raster image identifier */ gr_ref, /* reference number of the GR image */ start[2], /* start position to write for each dimension */ edges[2], /* number of elements to be written along each dimension */ dim_gr[2], /* dimension sizes of the image array */ data_type; /* data type of the image data */ char *srcdir = getenv("srcdir"); /* the source directory */ char data_file[512] = ""; /* buffer to hold name of existing data file */ uint8 attr_values[2] = {1, 2}; int n_values; /* compose the name of the file to open, using the srcdir, if appropriate */ if (srcdir) { strcpy(data_file, srcdir); strcat(data_file, "/"); } strcat(data_file, name_file); if (read_data(data_file) > 0) { /* set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_UINT8; dim_gr[0] = g_length_x; dim_gr[1] = g_length_y; /* create the raster image array */ if ((ri_id = GRcreate(gr_id, gr_name, g_ncomps, data_type, interlace_mode, dim_gr)) == FAIL) { printf("Error: Could not create GR <%s>\n", gr_name); return FAIL; } /* define the size of the data to be written */ start[0] = start[1] = 0; edges[0] = g_length_x; edges[1] = g_length_y; /* write the data in the buffer into the image array */ if (GRwriteimage(ri_id, start, NULL, edges, (void *)g_image_data) == FAIL) { printf("Error: Could not write GR <%s>\n", gr_name); } /* assign an attribute to the SDS */ n_values = 2; if (GRsetattr(ri_id, "Myattr", DFNT_UINT8, n_values, (void *)attr_values) == FAIL) { printf("Error: Could not write attributes for GR <%s>\n", gr_name); return FAIL; } /* obtain the reference number of the GR using its identifier */ gr_ref = GRidtoref(ri_id); /* add the GR to the vgroup. the tag DFTAG_RIG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_IMAGE, gr_ref) == FAIL) { printf("Error: Could not add GR <%s> to group\n", gr_name); return FAIL; } } /* terminate access to the raster image */ if (GRendaccess(ri_id) == FAIL) { printf("Error: Could not close GR <%s>\n", gr_name); return FAIL; } /* add an annotation and label to the object */ if (add_an(file_id, DFTAG_RI, gr_ref) < 0) return FAIL; } /* read data */ free(g_image_data); g_image_data = NULL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_gr * * Purpose: utility function to write images with the * GR - Multifile General Raster Image Interface, * optionally inserting the image into the group VGROUP_ID * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_gr(const char *gr_name, /* gr name */ int32 file_id, /* file ID */ int32 gr_id, /* GR ID */ int32 vgroup_id, /* group ID */ int32 chunk_flags, /* chunk flags */ comp_coder_t comp_type, /* compression flag */ comp_info *c_info /* compression structure */) { int32 ri_id, /* raster image identifier */ gr_ref, /* reference number of the GR image */ start[2], /* start position to write for each dimension */ edges[2], /* number of elements to be written along each dimension */ dim_gr[2], /* dimension sizes of the image array */ interlace_mode, /* interlace mode of the image */ data_type; /* data type of the image data */ int32 *data = NULL; /* [Y_DIM_GR][X_DIM_GR] */ int n = 0; int ncomps = 1; HDF_CHUNK_DEF chunk_def; /* Chunking definitions */ /* set the data type, interlace mode, and dimensions of the image */ data_type = DFNT_UINT32; interlace_mode = MFGR_INTERLACE_PIXEL; dim_gr[0] = Y_DIM_GR; dim_gr[1] = X_DIM_GR; /* data set data initialization */ if (NULL == (data = (int32 *)malloc(Y_DIM_GR * X_DIM_GR * sizeof(int32)))) goto fail; for (int j = 0; j < Y_DIM_GR; j++) { for (int i = 0; i < X_DIM_GR; i++) data[(j * X_DIM_GR) + i] = n++; } /*define some compression specific parameters */ switch (comp_type) { default: break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: c_info->skphuff.skp_size = 1; break; case COMP_CODE_DEFLATE: c_info->deflate.level = 6; break; case COMP_CODE_SZIP: #ifdef H4_GR_SZIP /* not supported for GR */ #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { c_info->szip.pixels_per_block = 2; c_info->szip.options_mask = SZ_EC_OPTION_MASK; c_info->szip.options_mask |= SZ_RAW_OPTION_MASK; c_info->szip.pixels = 0; c_info->szip.pixels_per_scanline = 0; c_info->szip.bits_per_pixel = 0; } else { printf("Warning: SZIP encoding not available\n"); } #else printf("Warning: SZIP compression not available\n"); #endif #endif printf("Warning: SZIP compression not available for GR\n"); break; } /* create the raster image array */ if ((ri_id = GRcreate(gr_id, gr_name, ncomps, data_type, interlace_mode, dim_gr)) == FAIL) { printf("Error: Could not create GR <%s>\n", gr_name); goto fail; } /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { /* Define chunk's dimensions */ chunk_def.chunk_lengths[0] = Y_DIM_GR / 2; chunk_def.chunk_lengths[1] = X_DIM_GR / 2; /* To use chunking with RLE, Skipping Huffman, and GZIP compression */ chunk_def.comp.chunk_lengths[0] = Y_DIM_GR / 2; chunk_def.comp.chunk_lengths[1] = X_DIM_GR / 2; /*define some compression specific parameters */ switch (comp_type) { default: break; case COMP_CODE_RLE: chunk_def.comp.comp_type = COMP_CODE_RLE; break; case COMP_CODE_SKPHUFF: chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; chunk_def.comp.cinfo.skphuff.skp_size = 1; break; case COMP_CODE_DEFLATE: /* GZIP compression, set compression type, flag and deflate level*/ chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; break; case COMP_CODE_SZIP: #ifdef H4_GR_SZIP #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { chunk_def.comp.cinfo.szip.pixels_per_block = 2; chunk_def.comp.cinfo.szip.options_mask = SZ_EC_OPTION_MASK; chunk_def.comp.cinfo.szip.options_mask |= SZ_RAW_OPTION_MASK; chunk_def.comp.cinfo.szip.pixels = 0; chunk_def.comp.cinfo.szip.pixels_per_scanline = 0; chunk_def.comp.cinfo.szip.bits_per_pixel = 0; } else { printf("Warning: SZIP encoding not available\n"); } #else printf("Warning: SZIP compression not available\n"); #endif #endif printf("Warning: SZIP compression not available for GR\n"); break; } if (GRsetchunk(ri_id, chunk_def, chunk_flags) == FAIL) { printf("Error: Could not set chunk for GR <%s>\n", gr_name); goto fail; } } /* use compress without chunk-in */ else if ((chunk_flags == HDF_NONE || chunk_flags == HDF_CHUNK) && comp_type > COMP_CODE_NONE && comp_type < COMP_CODE_INVALID) { if (GRsetcompress(ri_id, comp_type, c_info) == FAIL) { printf("Error: Could not set compress for GR <%s>\n", gr_name); goto fail; } } /* define the size of the data to be written */ start[0] = start[1] = 0; edges[0] = Y_DIM_GR; edges[1] = X_DIM_GR; /* write the data in the buffer into the image array */ if (GRwriteimage(ri_id, start, NULL, edges, (void *)data) == FAIL) { printf("Error: Could not set write GR <%s>\n", gr_name); goto fail; } /* obtain the reference number of the GR using its identifier */ gr_ref = GRidtoref(ri_id); /* add the GR to the vgroup. the tag DFTAG_RIG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_IMAGE, gr_ref) == FAIL) { printf("Error: Could not add GR <%s> to group\n", gr_name); goto fail; } } /* terminate access to the raster image */ if (GRendaccess(ri_id) == FAIL) { printf("Error: Could not close GR <%s>\n", gr_name); goto fail; } /* add an annotation and label to the object */ if (add_an(file_id, DFTAG_RI, gr_ref) < 0) goto fail; free(data); return SUCCEED; fail: free(data); return FAIL; } /*------------------------------------------------------------------------- * Function: add_glb_attrs * * Purpose: utility function to write global attributes * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_glb_attrs(const char *fname, int32 file_id, int32 sd_id, int32 gr_id) { uint8 attr_values[2] = {1, 2}; int n_values = 2; (void)fname; (void)file_id; /*------------------------------------------------------------------------- * make SDS global attributes *------------------------------------------------------------------------- */ /* assign an attribute to the SD */ if (SDsetattr(sd_id, "MySDgattr", DFNT_UINT8, n_values, (void *)attr_values) == FAIL) { printf("Could not set SDS attr\n"); return FAIL; } /*------------------------------------------------------------------------- * make GR global attributes *------------------------------------------------------------------------- */ /* assign an attribute to the GR */ if (GRsetattr(gr_id, "MyGRgattr", DFNT_UINT8, n_values, (void *)attr_values) == FAIL) { printf("Could not set GR attr\n"); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_r8 * * Purpose: utility function to read an image data file and save the image with the * DFR8 - Single-file 8-Bit Raster Image Interface, * optionally inserting the image into the group VGROUP_ID * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_r8(const char *image_file, const char *fname, int32 file_id, int32 vgroup_id) { int32 ri_ref; /* reference number of the GR image */ char *srcdir = getenv("srcdir"); /* the source directory */ char data_file[512] = ""; /* buffer to hold name of existing data file */ /* compose the name of the file to open, using the srcdir, if appropriate */ if (srcdir) { strcpy(data_file, srcdir); strcat(data_file, "/"); } strcat(data_file, image_file); if (read_data(data_file) > 0) { /* add a palette */ if (DFR8setpalette(pal_rgb) == FAIL) { printf("Could not set palette for image\n"); return FAIL; } /* write the image */ if (DFR8addimage(fname, g_image_data, g_length_x, g_length_y, (uint16)0) == FAIL) { printf("Could not write palette for image\n"); return FAIL; } /* obtain the reference number of the RIS8 */ ri_ref = DFR8lastref(); /* add the image to the vgroup. the tag DFTAG_RIG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_IMAGE, ri_ref) == FAIL) { printf("Could not add image to group\n"); return FAIL; } } /* add an annotation and label to the object */ if (add_an(file_id, TAG_GRP_IMAGE, ri_ref) < 0) return FAIL; } free(g_image_data); g_image_data = NULL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_r24 * * Purpose: utility function to read an image data file and save the image with the * DF24 - Single-file 24-Bit Raster Image Interface, * optionally inserting the image into the group VGROUP_ID * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_r24(const char *image_file, const char *fname, int32 file_id, intn il, int32 vgroup_id) { int32 ri_ref; /* reference number of the GR image */ char *srcdir = getenv("srcdir"); /* the source directory */ char data_file[512] = ""; /* buffer to hold name of existing data file */ /* compose the name of the file to open, using the srcdir, if appropriate */ if (srcdir) { strcpy(data_file, srcdir); strcat(data_file, "/"); } strcat(data_file, image_file); if (read_data(data_file) > 0) { /* set interlace */ if (DF24setil(il) == FAIL) { printf("Could not set interlace for image\n"); return FAIL; } /* write the image */ if (DF24addimage(fname, g_image_data, g_length_x, g_length_y) == FAIL) { printf("Could not write image\n"); return FAIL; } /* obtain the reference number of the RIS24 */ ri_ref = DF24lastref(); /* add the image to the vgroup. the tag DFTAG_RIG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_IMAGE, ri_ref) == FAIL) { printf("Could not set group for image\n"); return FAIL; } } /* add an annotation and label to the object */ if (add_an(file_id, TAG_GRP_IMAGE, ri_ref) < 0) return FAIL; } /* read_data */ free(g_image_data); g_image_data = NULL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_sd * * Purpose: utility function to write with * SD - Multifile Scientific Data Interface, * optionally : * 1)inserting the SD into the group VGROUP_ID * 2)making the dataset chunked and/or compressed * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_sd(int32 file_id, /* file ID */ int32 sd_id, /* SD id */ const char *sds_name, /* sds name */ int32 vgroup_id, /* group ID */ int32 chunk_flags, /* chunk flags */ comp_coder_t comp_type, /* compression flag */ comp_info *c_info /* compression structure */) { int32 sds_id = FAIL; /* data set identifier */ int32 sds_ref, /* reference number of the data set */ dim_sds[2], /* dimension of the data set */ rank = 2, /* rank of the data set array */ n_values, /* number of values of attribute */ dim_index, /* dimension index */ dim_id, /* dimension ID */ start[2], /* write start */ edges[2], /* write edges */ fill_value = 2; /* fill value */ int32 *data = NULL; /* [Y_DIM][X_DIM] */ int32 bits_per_pixel = 32; float32 sds_values[2] = {2., 10.}; /* values of the SDS attribute */ int16 *data_X = NULL; /* X dimension dimension scale */ float64 *data_Y = NULL; /* Y dimension dimension scale */ HDF_CHUNK_DEF chunk_def; /* Chunking definitions */ /* set the size of the SDS's dimension */ dim_sds[0] = Y_DIM; dim_sds[1] = X_DIM; /*define some compression specific parameters */ switch (comp_type) { default: break; case COMP_CODE_RLE: break; case COMP_CODE_SKPHUFF: c_info->skphuff.skp_size = 1; break; case COMP_CODE_DEFLATE: c_info->deflate.level = 6; break; case COMP_CODE_SZIP: #ifdef H4_HAVE_LIBSZ if (SZ_encoder_enabled()) { c_info->szip.pixels_per_block = 2; c_info->szip.options_mask = SZ_EC_OPTION_MASK; c_info->szip.options_mask |= SZ_RAW_OPTION_MASK; c_info->szip.pixels = 0; c_info->szip.pixels_per_scanline = 0; c_info->szip.bits_per_pixel = 0; } else { printf("Warning: SZIP encoding not available\n"); } #else printf("Warning: SZIP compression not available\n"); #endif break; } /* data set data initialization */ if (NULL == (data = (int32 *)malloc(Y_DIM * X_DIM * sizeof(int32)))) goto fail; for (int j = 0; j < Y_DIM; j++) { for (int i = 0; i < X_DIM; i++) data[(j * X_DIM) + i] = (i + j) + 1; } /* initialize dimension scales */ if (NULL == (data_X = (int16 *)malloc(X_DIM * sizeof(int16)))) goto fail; for (int16 i = 0; i < X_DIM; i++) data_X[i] = i; if (NULL == (data_Y = (float64 *)malloc(Y_DIM * sizeof(float64)))) goto fail; for (int i = 0; i < Y_DIM; i++) data_Y[i] = 0.1 * i; /* create the SDS */ if ((sds_id = SDcreate(sd_id, sds_name, DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%s>\n", sds_name); goto fail; } /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { set_chunk_def(comp_type, dim_sds, 1, bits_per_pixel, &chunk_def); if (SDsetchunk(sds_id, chunk_def, chunk_flags) == FAIL) { printf("Failed to set chunk for SDS <%s>\n", sds_name); goto fail; } } /* use compress without chunk-in */ else if (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE && comp_type < COMP_CODE_INVALID) { if (SDsetcompress(sds_id, comp_type, c_info) == FAIL) { printf("Failed to set compress for SDS <%s>\n", sds_name); goto fail; } } /* set a fill value */ if (SDsetfillvalue(sds_id, (void *)&fill_value) == FAIL) { printf("Failed to set fillvaclue for SDS <%s>\n", sds_name); goto fail; } /* define the location and size of the data to be written to the data set */ start[0] = 0; start[1] = 0; edges[0] = Y_DIM; edges[1] = X_DIM; /* write the stored data to the data set */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) { printf("Failed to set write for SDS <%s>\n", sds_name); goto fail; } /* assign an attribute to the SDS */ n_values = 2; if (SDsetattr(sds_id, "Valid_range", DFNT_FLOAT32, n_values, (void *)sds_values) == FAIL) { printf("Failed to set attr for SDS <%s>\n", sds_name); goto fail; } /* For each dimension of the data set specified in SDS_NAME, * get its dimension identifier and set dimension name * and dimension scale. Note that data type of dimension scale * can be different between dimensions and can be different from * SDS data type. */ for (dim_index = 0; dim_index < rank; dim_index++) { /* select the dimension at position dim_index */ dim_id = SDgetdimid(sds_id, dim_index); /* assign name and dimension scale to selected dimension */ switch (dim_index) { case 0: n_values = Y_DIM; if (SDsetdimname(dim_id, "Y_Axis") == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } if (SDsetdimscale(dim_id, n_values, DFNT_FLOAT64, (void *)data_Y) == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } if (SDsetattr(dim_id, "info", DFNT_CHAR8, 7, "meters") == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } break; case 1: n_values = X_DIM; if (SDsetdimname(dim_id, "X_Axis") == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } if (SDsetdimscale(dim_id, n_values, DFNT_INT16, (void *)data_X) == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } if (SDsetattr(dim_id, "info", DFNT_CHAR8, 5, "feet") == FAIL) { printf("Failed to set dims for SDS <%s>\n", sds_name); goto fail; } break; default: break; } } /* obtain the reference number of the SDS using its identifier */ sds_ref = SDidtoref(sds_id); /* add the SDS to the vgroup. the tag DFTAG_NDG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_DSET, sds_ref) == FAIL) { printf("Failed to add ref for SDS <%s>\n", sds_name); goto fail; } } /* add an annotation and label to the object */ add_an(file_id, TAG_GRP_DSET, sds_ref); /* terminate access to the SDS */ if (SDendaccess(sds_id) == FAIL) { printf("Failed to end SDS <%s>\n", sds_name); goto fail; } free(data); free(data_X); free(data_Y); return SUCCEED; fail: free(data); free(data_X); free(data_Y); SDendaccess(sds_id); return FAIL; } /*------------------------------------------------------------------------- * Function: add_sd3d * * Purpose: utility function to write with * SD - Multifile Scientific Data Interface, * optionally : * 1)inserting the SD into the group VGROUP_ID * 2)making the dataset chunked and/or compressed * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_sd3d(int32 file_id, /* file ID */ int32 sd_id, /* SD interface identifier */ const char *sds_name, /* sds name */ int32 vgroup_id, /* group ID */ int32 chunk_flags, /* chunk flags */ comp_coder_t comp_type, /* compression flag */ comp_info *c_info /* compression structure */) { int32 sds_id = FAIL; /* data set identifier */ int32 sds_ref, /* reference number of the data set */ dim_sds[3], /* dimension of the data set */ rank = 3, /* rank of the data set array */ start[3], /* write start */ fill_value = 2; /* fill value */ int32 *data = NULL; /* [Z_DIM][Y_DIM][X_DIM] */ HDF_CHUNK_DEF chunk_def; /* Chunking definitions */ /* Define chunk's dimensions */ chunk_def.chunk_lengths[0] = Z_DIM / 2; chunk_def.chunk_lengths[1] = Y_DIM / 2; chunk_def.chunk_lengths[2] = X_DIM / 2; /* To use chunking with RLE, Skipping Huffman, and GZIP compression */ chunk_def.comp.chunk_lengths[0] = Y_DIM / 2; chunk_def.comp.chunk_lengths[1] = Y_DIM / 2; chunk_def.comp.chunk_lengths[2] = X_DIM / 2; /* GZIP compression, set compression type, flag and deflate level*/ chunk_def.comp.comp_type = COMP_CODE_DEFLATE; chunk_def.comp.cinfo.deflate.level = 6; /* data set data initialization */ if (NULL == (data = (int32 *)malloc(Z_DIM * Y_DIM * X_DIM * sizeof(int32)))) goto fail; for (int k = 0; k < Z_DIM; k++) { for (int j = 0; j < Y_DIM; j++) for (int i = 0; i < X_DIM; i++) { int32 idx = (k * Y_DIM * X_DIM) + (j * X_DIM) + i; data[idx] = (i + j) + 1; } } /* set the size of the SDS's dimension */ dim_sds[0] = Z_DIM; dim_sds[1] = Y_DIM; dim_sds[2] = X_DIM; /* create the SDS */ if ((sds_id = SDcreate(sd_id, sds_name, DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%s>\n", sds_name); goto fail; } /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { if (SDsetchunk(sds_id, chunk_def, chunk_flags) == FAIL) { printf("Failed to set chunk for SDS <%s>\n", sds_name); goto fail; } } /* use compress without chunk-in */ else if ((chunk_flags == HDF_NONE) && comp_type > COMP_CODE_NONE && comp_type < COMP_CODE_INVALID) { if (SDsetcompress(sds_id, comp_type, c_info) == FAIL) { printf("Failed to set compress for SDS <%s>\n", sds_name); goto fail; } } /* set a fill value */ if (SDsetfillvalue(sds_id, (void *)&fill_value) == FAIL) { printf("Failed to set fill for SDS <%s>\n", sds_name); goto fail; } /* define the location and size of the data to be written to the data set */ start[0] = 0; start[1] = 0; start[2] = 0; /* write the stored data to the data set */ if (SDwritedata(sds_id, start, NULL, dim_sds, (void *)data) == FAIL) { printf("Failed to write SDS <%s>\n", sds_name); goto fail; } /* obtain the reference number of the SDS using its identifier */ sds_ref = SDidtoref(sds_id); /* add the SDS to the vgroup. the tag DFTAG_NDG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_DSET, sds_ref) == FAIL) { printf("Failed to set ref for SDS <%s>\n", sds_name); goto fail; } } /* add an annotation and label to the object */ add_an(file_id, TAG_GRP_DSET, sds_ref); /* terminate access to the SDS */ if (SDendaccess(sds_id) == FAIL) { printf("Failed to end SDS <%s>\n", sds_name); goto fail; } free(data); return SUCCEED; fail: SDendaccess(sds_id); free(data); return FAIL; } /*------------------------------------------------------------------------- * Function: add_empty_sd * * Purpose: utility function to write an empty sds * *------------------------------------------------------------------------- */ static int add_empty_sd(int32 sd_id, /* SD id */ const char *sds_name /* sds name */ ) { int32 sds_id, /* data set identifier */ dim_sds[2], /* dimension of the data set */ rank = 2; /* rank of the data set array */ /* set the size of the SDS's dimension */ dim_sds[0] = Y_DIM; dim_sds[1] = X_DIM; /* create the SDS */ if ((sds_id = SDcreate(sd_id, sds_name, DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%s>\n", sds_name); return FAIL; } /* terminate access to the SDS */ if (SDendaccess(sds_id) == FAIL) { printf("Failed to end SDS <%s>\n", sds_name); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_unl_sd * * Purpose: utility function to create a sds with unlimited dimension * *------------------------------------------------------------------------- */ static int add_unl_sd(int32 sd_id, /* SD id */ const char *sds_name, /* sds name */ int do_write) { int32 sds_id, /* data set identifier */ dim_sds[2], /* dimension of the data set */ rank = 2; /* rank of the data set array */ /* set the size of the SDS's dimension */ dim_sds[0] = SD_UNLIMITED; dim_sds[1] = X_DIM; /* create the SDS */ if ((sds_id = SDcreate(sd_id, sds_name, DFNT_INT32, rank, dim_sds)) < 0) { printf("Could not create SDS <%s>\n", sds_name); return FAIL; } if (do_write) { int32 start[2]; /* write start */ int32 edges[2]; /* write edges */ int32 *buf = NULL; if (NULL == (buf = calloc(1, Y_DIM * X_DIM * sizeof(int32)))) goto fail; /* data set data initialization */ for (int j = 0; j < Y_DIM; j++) { for (int i = 0; i < X_DIM; i++) { buf[(j * X_DIM) + i] = (i + j) + 1; } } /* define the location and size of the data to be written to the data set */ start[0] = 0; start[1] = 0; edges[0] = Y_DIM; edges[1] = X_DIM; /* write the stored data to the data set */ if (SDwritedata(sds_id, start, NULL, edges, (void *)buf) == FAIL) { printf("Failed to set write for SDS <%s>\n", sds_name); free(buf); goto fail; } free(buf); } /* terminate access to the SDS */ if (SDendaccess(sds_id) == FAIL) { printf("Failed to end SDS <%s>\n", sds_name); return FAIL; } return SUCCEED; fail: SDendaccess(sds_id); return FAIL; } /*------------------------------------------------------------------------- * Function: add_vs * * Purpose: utility function to write with * VS - Vdata Interface, * optionally inserting the VS into the group VGROUP_ID * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_vs(const char *vs_name, int32 file_id, int32 vgroup_id) { int32 vdata_ref, /* reference number of the vdata */ vdata_tag, /* tag number of the vdata */ vdata_id; /* vdata id */ int32 attr_n_values = 3; /* number of values in the vdata attribute */ int32 field_n_values = 4; /* number of values in the field attribute */ char vd_attr[3] = {'A', 'B', 'C'}; /* vdata attribute values*/ int32 fld_attr[4] = {2, 4, 6, 8}; /* field attribute values*/ float32 data_buf[N_RECORDS][N_VALS_PER_REC]; /* buffer for vdata values */ int i; /* Initialize the VS interface */ Vstart(file_id); /* Create a new vdata, set to -1 to create */ vdata_ref = -1, vdata_id = VSattach(file_id, vdata_ref, "w"); /* Set name and class name of the vdata */ if (VSsetname(vdata_id, vs_name) == FAIL) { printf("Could not set name for VS\n"); return FAIL; } if (VSsetclass(vdata_id, CLASS_NAME) == FAIL) { printf("Could not set class for VS\n"); return FAIL; } /* Introduce each field's name, data type, and order */ VSfdefine(vdata_id, FIELD1_NAME, DFNT_FLOAT32, ORDER_1); VSfdefine(vdata_id, FIELD2_NAME, DFNT_FLOAT32, ORDER_2); VSfdefine(vdata_id, FIELD3_NAME, DFNT_FLOAT32, ORDER_3); /* Finalize the definition of the fields */ if (VSsetfields(vdata_id, FIELDNAME_LIST) == FAIL) { printf("Could not set fields for VS\n"); return FAIL; } /* * Buffer the data by the record for fully interlaced mode. Note that the * first three elements contain the three values of the first field, the * fourth element contains the value of the second field, and the last two * elements contain the two values of the third field. */ for (i = 0; i < N_RECORDS; i++) { data_buf[i][0] = 1.0F * (float)i; data_buf[i][1] = 2.0F * (float)i; data_buf[i][2] = 3.0F * (float)i; data_buf[i][3] = 0.1F + (float)i; data_buf[i][4] = 0.0F; data_buf[i][5] = 65.0F; } /* Write the data from data_buf to the vdata with full interlacing mode */ if (VSwrite(vdata_id, (uint8 *)data_buf, N_RECORDS, FULL_INTERLACE) == FAIL) { printf("Could not write VS\n"); return FAIL; } /* Attach an attribute to the vdata, i.e., indicated by the second parameter */ if (VSsetattr(vdata_id, _HDF_VDATA, "Myattr", DFNT_CHAR, attr_n_values, vd_attr) == FAIL) { printf("Could not set attr for VS\n"); return FAIL; } /* Attach an attribute to the field 0 */ if (VSsetattr(vdata_id, 0, "Myfattr", DFNT_INT32, field_n_values, fld_attr) == FAIL) { printf("Could not set attr for VS\n"); return FAIL; } /* Obtain the tag and ref number of the vdata */ vdata_tag = VSQuerytag(vdata_id); vdata_ref = VSQueryref(vdata_id); /* add the VS to the vgroup*/ if (vgroup_id) { if (Vaddtagref(vgroup_id, vdata_tag, vdata_ref) == FAIL) { printf("Could not set group for VS\n"); return FAIL; } } /* terminate access to the VSs */ if (VSdetach(vdata_id) == FAIL) { printf("Could not detach VS\n"); return FAIL; } /* Terminate access to the VS interface */ if (Vend(file_id) == FAIL) { printf("Could not end VS\n"); return FAIL; } /* add an annotation and label to the vdata */ if (add_an(file_id, vdata_tag, vdata_ref) < 0) return FAIL; return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_file_an * * Purpose: utility function to write a file AN * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_file_an(int32 file_id) { int32 an_id, /* AN interface identifier */ file_label_id, /* file label identifier */ file_desc_id, /* file description identifier */ data_label_id, /* data label identifier */ data_desc_id, /* data description identifier */ vgroup_id; uint16 vgroup_tag, vgroup_ref; /* Initialize the AN interface */ an_id = ANstart(file_id); /*------------------------------------------------------------------------- * file labels and annotations *------------------------------------------------------------------------- */ /* Create the file label */ file_label_id = ANcreatef(an_id, AN_FILE_LABEL); /* Write the annotations to the file label */ if (ANwriteann(file_label_id, FILE_LABEL_TXT, strlen(FILE_LABEL_TXT)) == FAIL) { printf("Could not write AN\n"); return FAIL; } /* Create file description */ file_desc_id = ANcreatef(an_id, AN_FILE_DESC); /* Write the annotation to the file description */ if (ANwriteann(file_desc_id, FILE_DESC_TXT, strlen(FILE_DESC_TXT)) == FAIL) { printf("Could not write AN\n"); return FAIL; } /*------------------------------------------------------------------------- * data labels and annotations *------------------------------------------------------------------------- */ /* Create a vgroup in the V interface*/ Vstart(file_id); vgroup_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup_id, "an_group") == FAIL) { printf("Could not set name for VG\n"); return FAIL; } /* Obtain the tag and ref number of the vgroup */ vgroup_tag = (uint16)VQuerytag(vgroup_id); vgroup_ref = (uint16)VQueryref(vgroup_id); /* Create the data label for the vgroup identified by its tag and ref number */ data_label_id = ANcreate(an_id, vgroup_tag, vgroup_ref, AN_DATA_LABEL); /* Write the annotation text to the data label */ if (ANwriteann(data_label_id, DATA_LABEL_TXT, strlen(DATA_LABEL_TXT)) == FAIL) { printf("Could not write AN\n"); return FAIL; } /* Create the data description for the vgroup identified by its tag and ref number */ data_desc_id = ANcreate(an_id, (uint16)vgroup_tag, (uint16)vgroup_ref, AN_DATA_DESC); /* Write the annotation text to the data description */ if (ANwriteann(data_desc_id, DATA_DESC_TXT, strlen(DATA_DESC_TXT)) == FAIL) { printf("Could not write AN\n"); return FAIL; } /* Terminate access to the vgroup and to the V interface */ if (Vdetach(vgroup_id) == FAIL) { printf("Could not detach VG\n"); return FAIL; } if (Vend(file_id) == FAIL) { printf("Could not end VG\n"); return FAIL; } /* Terminate access to each annotation explicitly */ if (ANendaccess(file_label_id) == FAIL || ANendaccess(file_desc_id) == FAIL || ANendaccess(data_label_id) == FAIL || ANendaccess(data_desc_id) == FAIL) { printf("Could not end AN\n"); return FAIL; } /* Terminate access to the AN interface */ if (ANend(an_id) == FAIL) { printf("Could not end AN\n"); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_pal * * Purpose: utility function to write a palette * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int add_pal(const char *fname) { uint8 pal[256 * 3]; int i, n; /*------------------------------------------------------------------------- * define a palette, blue to red tones *------------------------------------------------------------------------- */ for (i = 0, n = 0; i < 256 * 3; i += 3, n++) { pal[i] = (uint8)n; /* red */ pal[i + 1] = 0; /* green */ pal[i + 2] = (uint8)(255 - n); /* blue */ } if (DFPaddpal(fname, pal) == FAIL) { printf("Failed to write palette in <%s>\n", fname); return FAIL; } return SUCCEED; } /*------------------------------------------------------------------------- * Function: add_sd_szip * * Purpose: utility function to write with SZIPed SDSs * SD - Multifile Scientific Data Interface, * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ #ifdef H4_HAVE_LIBSZ static int add_sd_szip(int32 file_id, /* file ID */ int32 sd_id, /* SD interface identifier */ const char *sds_name, /* sds name */ int32 vgroup_id, /* group ID */ int32 chunk_flags, /* chunk flags */ int32 nt, /* number type */ int32 bits_per_pixel, /* szip parameter */ int32 *dim, /* dimension of the data set */ void *data) { int32 sds_id, /* data set identifier */ sds_ref, /* reference number of the data set */ rank = 2; /* rank of the data set array */ comp_coder_t comp_type = COMP_CODE_NONE; /* compression flag */ comp_info c_info; /* compression structure */ HDF_CHUNK_DEF chunk_def; /* chunking definitions */ int32 edges[2], /* write edges */ start[2] = {0, 0}; /* write start */ (void)file_id; edges[0] = dim[0]; edges[1] = dim[1]; if (SZ_encoder_enabled()) { comp_type = COMP_CODE_SZIP; c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; c_info.szip.bits_per_pixel = 0; } else { printf("Warning: SZIP encoding not available\n"); } /* create the SDS */ sds_id = SDcreate(sd_id, sds_name, nt, rank, dim); if (sds_id < 0) { printf("SDcreate failed for file <%s>\n", sds_name); return FAIL; } /* set chunk */ if ((chunk_flags == HDF_CHUNK) || (chunk_flags == (HDF_CHUNK | HDF_COMP))) { set_chunk_def(comp_type, dim, 1, bits_per_pixel, &chunk_def); if (SDsetchunk(sds_id, chunk_def, chunk_flags) == FAIL) { printf("Failed to set chunk for SDS <%s>\n", sds_name); goto fail; } } /* use compress without chunk-in */ else if (chunk_flags == HDF_NONE && comp_type > COMP_CODE_NONE && comp_type < COMP_CODE_INVALID) { if (SDsetcompress(sds_id, comp_type, &c_info) == FAIL) { printf("Failed to set compress for SDS <%s>\n", sds_name); goto fail; } } /* write the stored data to the data set */ if (SDwritedata(sds_id, start, NULL, edges, (void *)data) == FAIL) { printf("Failed to writer SDS <%s>\n", sds_name); goto fail; } /* obtain the reference number of the SDS using its identifier */ sds_ref = SDidtoref(sds_id); /* add the SDS to the vgroup. the tag DFTAG_NDG is used */ if (vgroup_id) { if (Vaddtagref(vgroup_id, TAG_GRP_DSET, sds_ref) == FAIL) { printf("Failed to set ref for SDS <%s>\n", sds_name); goto fail; } } /* terminate access to the SDS */ if (SDendaccess(sds_id) == FAIL) { printf("Failed to end SDS <%s>\n", sds_name); goto fail; } return SUCCEED; fail: SDendaccess(sds_id); return FAIL; } #endif /* H4_HAVE_LIBSZ */ /*------------------------------------------------------------------------- * Function: do_file_all * * Purpose: writes all types of HDF objects * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int do_file_all(const char *fname) { int32 vgroup1_id, /* vgroup identifier */ vgroup2_id, /* vgroup identifier */ vgroup3_id, /* vgroup identifier */ vgroup_img_id, /* vgroup identifier */ file_id, /* HDF file identifier, same for V interface */ gr_id, /* GR interface identifier */ sd_id; /* SD interface identifier */ int32 attr_n_values = 3; /* number of values in the vg attribute */ char vg_attr[3] = {'A', 'B', 'C'}; /* vg attribute values*/ comp_coder_t comp_type; /* to retrieve compression type into */ int32 chunk_flags; /* Chunking flag */ comp_info c_info; /* Compression structure */ /*------------------------------------------------------------------------- * create a file with SDSs, images , groups and vdatas *------------------------------------------------------------------------- */ /* create a HDF file */ if ((file_id = Hopen(fname, DFACC_CREATE, (int16)0)) < 0) { printf("Error: Could not create file <%s>\n", fname); return FAIL; } /* initialize the SD interface */ if ((sd_id = SDstart(fname, DFACC_RDWR)) == FAIL) { printf("Error: Could not start SD interface\n"); return FAIL; } /* initialize the GR interface */ if ((gr_id = GRstart(file_id)) == FAIL) { printf("Error: Could not start GR interface\n"); return FAIL; } /* initialize the V interface */ if (Vstart(file_id) == FAIL) { printf("Could not start VG\n"); return FAIL; } /*------------------------------------------------------------------------- * create groups *------------------------------------------------------------------------- */ vgroup1_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup1_id, "g1") == FAIL) { printf("Could not name group\n"); goto out; } /* attach an attribute to the vgroup */ if (Vsetattr(vgroup1_id, "Myattr", DFNT_CHAR, attr_n_values, vg_attr) == FAIL) { printf("Could set group attributes\n"); goto out; } /* create the second vgroup */ vgroup2_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup2_id, "g2") == FAIL) { printf("Could not name group\n"); goto out; } /* create the 3rd vgroup */ vgroup3_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup3_id, "g3") == FAIL) { printf("Could not name group\n"); goto out; } /* insert the second vgroup into the first vgroup using its identifier */ if (Vinsert(vgroup1_id, vgroup2_id) == FAIL) { printf("Could not insert VG\n"); goto out; } /* insert the 3rd vgroup into the 2nd vgroup using its identifier */ if (Vinsert(vgroup2_id, vgroup3_id) == FAIL) { printf("Could not insert VG\n"); goto out; } /* create the 4th vgroup, for images */ vgroup_img_id = Vattach(file_id, -1, "w"); if (Vsetname(vgroup_img_id, "images") == FAIL) { printf("Could not name group\n"); goto out; } /*------------------------------------------------------------------------- * add some SDSs to the file * duplicates are inserted in the groups "g1", "g2", "g3" and root *------------------------------------------------------------------------- */ /* add non chunked, non compressed sds */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_NONE; if (add_sd(file_id, sd_id, "dset1", vgroup1_id, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd(file_id, sd_id, "dset2", vgroup2_id, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd(file_id, sd_id, "dset3", vgroup3_id, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd(file_id, sd_id, "dset4", 0, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd(file_id, sd_id, "dset5", 0, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd(file_id, sd_id, "dset6", 0, chunk_flags, comp_type, NULL) < 0) goto out; if (add_sd3d(file_id, sd_id, "dset7", 0, chunk_flags, comp_type, NULL) < 0) goto out; /*------------------------------------------------------------------------- * add some chunked/compressd SDS to the file * Chunked -> flags = HDF_CHUNK * Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP * Non-chunked -> flags = HDF_NONE *------------------------------------------------------------------------- */ /* add a chunked, non compressed sds */ chunk_flags = HDF_CHUNK; comp_type = COMP_CODE_NONE; if (add_sd(file_id, sd_id, "dset_chunk", 0, chunk_flags, comp_type, NULL) < 0) goto out; /* add a chunked-compressed sds with SDsetchunk */ chunk_flags = HDF_CHUNK | HDF_COMP; comp_type = COMP_CODE_DEFLATE; if (add_sd(file_id, sd_id, "dset_chunk_comp", 0, chunk_flags, comp_type, &c_info) < 0) goto out; /*------------------------------------------------------------------------- * GZIP *------------------------------------------------------------------------- */ /* add some non chunked, compressed sds */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_DEFLATE; if (add_sd(file_id, sd_id, "dset_gzip", 0, chunk_flags, comp_type, &c_info) < 0) goto out; /*------------------------------------------------------------------------- * add an empty sds *------------------------------------------------------------------------- */ if (add_empty_sd(sd_id, "dset_empty") < 0) goto out; /*------------------------------------------------------------------------- * add 2 SDSs with unlimited dimensions, one written *------------------------------------------------------------------------- */ if (add_unl_sd(sd_id, "dset_unl", 0) < 0) goto out; if (add_unl_sd(sd_id, "dset_unlw", 1) < 0) goto out; /*------------------------------------------------------------------------- * RLE *------------------------------------------------------------------------- */ /* add some non chunked, compressed sds */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_RLE; if (add_sd(file_id, sd_id, "dset_rle", 0, chunk_flags, comp_type, &c_info) < 0) goto out; /*------------------------------------------------------------------------- * HUFF *------------------------------------------------------------------------- */ /* add some non chunked, compressed sds */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_SKPHUFF; if (add_sd(file_id, sd_id, "dset_huff", 0, chunk_flags, comp_type, &c_info) < 0) goto out; #if defined(H4_HAVE_LIBSZ) /*------------------------------------------------------------------------- * SZIP *------------------------------------------------------------------------- */ if (SZ_encoder_enabled()) { chunk_flags = HDF_NONE; comp_type = COMP_CODE_SZIP; if (add_sd(file_id, sd_id, "dset_szip", 0, chunk_flags, comp_type, &c_info) < 0) goto out; { int i, j; { int32 buf[YD1][XD1]; int32 dim[2] = {YD1, XD1}; int32 bpp = 32; for (j = 0; j < YD1; j++) { for (i = 0; i < XD1; i++) buf[j][i] = (int32)(i + j) + 1; } if (add_sd_szip(file_id, sd_id, "dset32szip", 0, HDF_NONE, DFNT_INT32, bpp, dim, buf) < 0) return FAIL; } } } #endif /*------------------------------------------------------------------------- * add some RIS24 images to the file *------------------------------------------------------------------------- */ /* Pixel Interlacing */ if (add_r24(DATA_FILE2, fname, file_id, DFIL_PIXEL, vgroup_img_id) < 0) goto out; /* Scan Plane Interlacing */ if (add_r24(DATA_FILE3, fname, file_id, DFIL_PLANE, vgroup_img_id) < 0) goto out; /*------------------------------------------------------------------------- * add some RIS8 images to the file *------------------------------------------------------------------------- */ if (add_r8(DATA_FILE1, fname, file_id, vgroup_img_id) < 0) goto out; /*------------------------------------------------------------------------- * add some GR images to the file with compression/chunking *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * no compression *------------------------------------------------------------------------- */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_NONE; if (add_gr("gr_none", file_id, gr_id, 0, chunk_flags, comp_type, &c_info) < 0) goto out; /*------------------------------------------------------------------------- * GZIP *------------------------------------------------------------------------- */ chunk_flags = HDF_NONE; comp_type = COMP_CODE_DEFLATE; if (add_gr("gr_gzip", file_id, gr_id, 0, chunk_flags, comp_type, &c_info) < 0) goto out; #if defined(H4_GR_SZIP) /* not supported for GR */ /*------------------------------------------------------------------------- * SZIP *------------------------------------------------------------------------- */ #if defined(H4_HAVE_LIBSZ) if (SZ_encoder_enabled()) { chunk_flags = HDF_NONE; comp_type = COMP_CODE_SZIP; if (add_gr("gr_szip", file_id, gr_id, 0, chunk_flags, comp_type, &c_info) < 0) goto out; } #endif #endif /*------------------------------------------------------------------------- * add some GR realistic images to the file * realistic data is read from ASCII files *------------------------------------------------------------------------- */ if (add_gr_ffile(DATA_FILE1, gr_id, "gr_8bit", 0, file_id, 0) < 0) goto out; if (add_gr_ffile(DATA_FILE2, gr_id, "gr_24bit", 0, file_id, 0) < 0) goto out; /*------------------------------------------------------------------------- * add some VS to the file * duplicates are inserted in the groups "g1", "g2", "g3" and root *------------------------------------------------------------------------- */ if (add_vs("vdata1", file_id, vgroup1_id) < 0) goto out; if (add_vs("vdata2", file_id, vgroup2_id) < 0) goto out; if (add_vs("vdata3", file_id, vgroup3_id) < 0) goto out; if (add_vs("vdata4", file_id, 0) < 0) goto out; /*------------------------------------------------------------------------- * add some global attributes to the file *------------------------------------------------------------------------- */ if (add_glb_attrs(fname, file_id, sd_id, gr_id) < 0) goto out; /*------------------------------------------------------------------------- * add annotations to the file *------------------------------------------------------------------------- */ if (add_file_an(file_id) < 0) goto out; /*------------------------------------------------------------------------- * add a palette to the file *------------------------------------------------------------------------- */ if (add_pal(fname) < 0) goto out; /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ /* terminate access to the vgroups */ if (Vdetach(vgroup1_id) == FAIL || Vdetach(vgroup2_id) == FAIL || Vdetach(vgroup3_id) == FAIL || Vdetach(vgroup_img_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the V interface */ if (Vend(file_id) == FAIL) { printf("Could not end VG\n"); goto out; } /* terminate access to the GR interface */ if (GRend(gr_id) == FAIL) { printf("Error: Could not close GR interface\n"); goto out; } /* terminate access to the SD interface */ if (SDend(sd_id) == FAIL) { printf("Error: Could not close SD interface\n"); goto out; } /* close the HDF file */ if (Hclose(file_id) == FAIL) { printf("Could not close file\n"); return FAIL; } return SUCCEED; out: /* close interfaces */ Vend(file_id); GRend(gr_id); SDend(sd_id); Hclose(file_id); return FAIL; } /*------------------------------------------------------------------------- * write a big file for hyperslab reading *------------------------------------------------------------------------- */ static int do_file_hyperslab(const char *fname) { int32 sd_id; /* SD interface identifier */ int32 sds_id; /* SDS identifier */ int32 dims[2]; /* sizes of the SDS dimensions */ int32 start[2]; /* start location to write */ int32 edges[2]; /* number of elements to write */ int32 sds_idx; int32 rank; uint8 array_data[DIM0][DIM1]; uint8 append_data[DIM1]; intn i, j, n; /* Create a file and initiate the SD interface. */ if ((sd_id = SDstart(fname, DFACC_CREATE)) == FAIL) goto error; /* Define the rank and dimensions of the data set to be created. */ rank = 2; dims[0] = SD_UNLIMITED; dims[1] = DIM1; /* Create 2 data sets */ if ((sds_id = SDcreate(sd_id, "data1", DFNT_UINT8, rank, dims)) == FAIL) goto error; /* initial values */ for (j = 0; j < DIM0; j++) { for (i = 0; i < DIM1; i++) array_data[j][i] = (uint8)(i + j + 1); } /* define the location, pattern, and size of the data set */ for (i = 0; i < rank; i++) { start[i] = 0; } edges[0] = DIM0; /* 10 */ edges[1] = DIM1; /* 5 */ if (SDwritedata(sds_id, start, NULL, edges, (void *)array_data) == FAIL) goto error; /* terminate access to the datasets and SD interface */ if (SDendaccess(sds_id) == FAIL) goto error; if (SDend(sd_id) == FAIL) goto error; /* append data */ if ((sd_id = SDstart(fname, DFACC_WRITE)) == FAIL) goto error; if ((sds_idx = SDnametoindex(sd_id, "data1")) == FAIL) goto error; if ((sds_id = SDselect(sd_id, sds_idx)) == FAIL) goto error; /* store array values to be appended */ for (i = 0; i < DIM1; i++) append_data[i] = (uint8)(i + 1); /* define the location of the append */ for (n = 0; n < ADD_ROWS; n++) { start[0] = DIM0 + n; /* 10 */ start[1] = 0; edges[0] = 1; /* 1 row at a time */ edges[1] = DIM1; /* 5 elements */ /* append data to file */ if (SDwritedata(sds_id, start, NULL, edges, (void *)append_data) == FAIL) goto error; } /* terminate access */ if (SDendaccess(sds_id) == FAIL) goto error; if (SDend(sd_id) == FAIL) goto error; return SUCCEED; error: printf("Error...Exiting...\n"); return FAIL; } /*------------------------------------------------------------------------- * write groups * a circular reference * * g0 -----> g1 * | | ^ * | | | * | \/ | * |-----> g1.1 * *------------------------------------------------------------------------- */ static int do_file_groups(const char *name) { int32 vg0_id, /* vgroup identifier */ vg1_id, /* vgroup identifier */ vg2_id, /* vgroup identifier */ file1_id; /* HDF file identifier */ /* create a HDF file */ if ((file1_id = Hopen(name, DFACC_CREATE, (int16)0)) < 0) { printf("Error: Could not create file <%s>\n", name); return FAIL; } /* initialize the V interface */ if (Vstart(file1_id) == FAIL) { printf("Could not start VG\n"); return FAIL; } /* create a vgroup */ vg0_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg0_id, "g0") == FAIL) { printf("Could not name group\n"); goto out; } /* create the second vgroup */ vg1_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg1_id, "g1") == FAIL) { printf("Could not name group\n"); goto out; } /* create the third vgroup */ vg2_id = Vattach(file1_id, -1, "w"); if (Vsetname(vg2_id, "g1.1") == FAIL) { printf("Could not name group\n"); goto out; } if (Vinsert(vg0_id, vg1_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg0_id, vg2_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg1_id, vg2_id) == FAIL) { printf("Could not insert VG\n"); goto out; } if (Vinsert(vg2_id, vg1_id) == FAIL) { printf("Could not insert VG\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg0_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg1_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the vgroup */ if (Vdetach(vg2_id) == FAIL) { printf("Could not close group\n"); goto out; } /* terminate access to the V interface */ if (Vend(file1_id) == FAIL) { printf("Could not end VG\n"); goto out; } /* close the HDF file */ if (Hclose(file1_id) == FAIL) { printf("Could not close file\n"); return FAIL; } return SUCCEED; out: printf("Error...Exiting...\n"); return FAIL; } /*------------------------------------------------------------------------- * Function: generate_files * * Purpose: writes several HDF objects to the files * HREPACK_FILE1 * HREPACK_FILE2 * HREPACK_FILE3 * * Return: SUCCEED, FAIL * *------------------------------------------------------------------------- */ static int generate_files(void) { TESTING("generating files"); if (do_file_all(HREPACK_FILE1) < 0) return FAIL; if (do_file_hyperslab(HREPACK_FILE2) < 0) return FAIL; if (do_file_groups(HREPACK_FILE3) < 0) return FAIL; PASSED(); return SUCCEED; } /*------------------------------------------------------------------------- * Function: main * * Purpose: test program for hrepack * * A)This program writes several HDF objects to the file HREPACK_FILE1 * The image data consists of realistic data read from the files DATA_FILE1 * (8bit image) , DATA_FILE2 (24bit image, pixel interlace) and * DATA_FILE3 (24bit image, plane interlace) * The objects written are * 1) groups * 2) images * 3) datasets * 4) vdatas with attributes and field attributes * 5) global and local attributes * 6) labels and annotations * * B) Then several calls are made to hrepack, in each call the HREPACK_FILE1_OUT is * generated * * C) In each test the hdiff utility is called to compare the files * HREPACK_FILE1 and HREPACK_FILE1_OUT * * D) In each test the verifiy_comp_chunk function is called to compare * the input and output compression and chunking parameters * *------------------------------------------------------------------------- */ int main(void) { if (generate_files() < 0) return 1; return 0; } hdf4-hdf4.3.1/mfhdf/hrepack/image24pixel.txt000066400000000000000000012376031503061704500205770ustar00rootroot00000000000000components 3 height 149 width 227 48 47 45 48 47 45 49 48 46 50 49 47 53 49 46 53 49 46 54 50 47 54 50 47 56 51 47 56 51 47 58 51 45 58 51 45 58 51 45 58 51 45 58 51 45 58 51 45 58 50 47 57 49 46 57 49 46 56 48 45 56 48 45 57 49 46 57 49 46 58 50 47 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 54 46 43 54 46 43 54 46 43 53 45 42 53 45 42 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 52 44 41 50 45 41 47 42 36 47 44 37 47 44 37 48 45 38 49 46 39 50 47 40 51 48 41 51 48 41 54 51 44 54 51 44 55 52 45 56 53 46 56 53 46 57 54 47 58 55 48 58 55 46 65 58 48 66 60 48 68 62 50 70 64 52 73 65 52 74 66 53 75 67 54 75 67 54 77 68 53 77 68 53 79 67 51 78 66 50 79 67 51 79 67 51 80 68 52 82 69 53 82 63 49 89 63 50 98 64 52 110 66 53 125 69 54 139 72 56 153 71 57 163 70 55 175 71 58 184 71 57 190 69 58 197 71 59 199 71 62 202 71 63 203 72 64 208 69 64 231 70 76 237 67 76 235 68 75 235 69 73 238 67 73 239 66 68 241 62 66 244 61 65 248 59 65 247 58 64 244 58 63 240 60 63 233 63 64 226 64 62 215 63 60 203 65 55 187 61 47 181 64 46 181 64 46 180 63 45 180 63 45 179 64 45 178 63 45 175 64 45 173 64 44 170 65 44 166 65 45 162 66 44 159 64 42 155 65 41 152 64 42 150 65 44 148 62 45 146 63 47 146 63 47 145 62 46 145 62 44 144 61 43 146 60 43 146 60 43 148 63 43 148 63 43 148 61 42 148 61 42 148 61 42 149 62 43 150 63 44 150 64 47 150 63 54 149 62 53 151 61 50 159 63 49 169 66 51 179 68 51 188 68 52 191 68 52 185 63 48 181 65 50 172 70 56 158 72 59 135 72 57 111 65 50 84 56 42 67 51 38 61 53 50 57 53 52 57 53 52 55 51 50 55 49 49 54 48 48 53 48 45 53 48 45 55 50 47 55 50 47 55 50 47 54 49 46 54 49 45 53 48 44 53 48 44 52 49 44 47 47 45 46 48 45 47 47 45 47 47 45 48 47 45 48 47 45 50 46 45 50 46 45 53 44 45 52 43 44 52 42 43 51 41 42 55 40 43 61 46 49 69 54 57 80 58 60 106 66 67 124 73 72 141 77 77 149 79 79 159 87 91 170 100 110 170 111 131 159 116 144 148 123 163 135 127 174 128 134 186 126 136 189 115 121 173 96 97 145 84 75 118 80 68 104 83 74 103 79 71 94 77 72 94 84 81 98 102 100 111 124 125 130 141 145 144 153 158 152 163 169 159 162 168 154 158 160 147 143 146 129 123 124 108 102 103 85 88 87 69 81 78 69 85 82 91 85 81 98 85 81 98 48 47 45 48 47 45 49 48 46 49 48 46 52 48 45 53 49 46 54 50 47 54 50 47 56 51 47 56 51 47 58 51 45 58 51 45 58 51 45 58 51 45 58 51 45 58 51 45 57 49 46 57 49 46 56 48 45 56 48 45 56 48 45 56 48 45 57 49 46 57 49 46 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 56 48 45 54 46 43 54 46 43 53 45 42 53 45 42 53 45 42 52 44 41 52 44 41 52 44 41 53 45 42 53 45 42 53 45 42 53 45 42 53 45 42 53 45 42 53 45 42 51 46 42 48 43 37 48 45 38 48 45 38 49 46 39 50 47 40 51 48 41 52 49 42 52 49 42 54 51 44 54 51 44 55 52 45 55 52 45 56 53 46 57 54 47 58 55 48 58 55 46 64 57 47 65 59 47 67 61 49 69 63 51 72 64 51 73 65 52 74 66 53 74 66 53 76 67 52 76 67 52 77 65 49 77 65 49 77 65 49 78 66 50 79 67 51 81 68 52 80 62 48 85 63 49 94 65 51 106 67 52 120 68 54 132 69 52 146 69 53 156 67 51 167 67 52 175 65 52 181 65 52 188 66 55 192 68 58 196 69 60 197 70 61 205 67 64 225 69 73 231 66 73 232 67 73 234 68 72 237 68 71 239 66 68 243 64 67 246 63 67 248 59 65 247 58 64 244 58 63 240 60 63 233 63 64 224 65 62 213 64 60 202 64 54 185 62 47 181 64 46 180 63 45 180 63 45 180 63 45 178 63 44 176 63 45 175 64 45 173 64 44 169 64 43 166 65 45 161 65 43 159 64 42 155 65 41 152 64 42 150 65 44 148 62 45 146 63 47 145 62 46 145 62 46 145 62 44 144 61 43 146 60 43 146 60 43 148 63 43 147 62 42 148 61 42 148 61 42 148 61 42 149 62 43 150 63 44 150 64 47 148 64 53 149 62 53 152 62 51 160 62 49 171 65 51 181 68 52 189 67 52 191 68 53 187 65 50 183 67 54 172 70 56 156 73 59 133 71 58 108 64 51 83 57 42 66 52 41 62 54 51 58 54 53 57 53 52 56 52 51 56 50 50 55 49 49 54 49 46 54 49 46 55 50 47 55 50 47 55 50 47 54 49 46 54 49 45 53 48 44 53 48 44 52 49 44 47 47 45 46 48 45 47 47 45 47 47 45 48 47 45 48 47 45 50 46 45 50 46 45 51 45 45 53 44 45 52 42 43 51 41 42 53 41 43 60 45 48 67 52 55 78 56 58 100 62 61 118 69 65 134 74 73 143 78 76 154 84 86 164 97 106 165 108 125 157 114 142 145 123 162 134 128 174 127 133 185 123 132 187 111 117 169 91 91 141 81 72 117 79 67 105 79 70 101 79 71 95 80 72 95 82 78 95 91 89 102 110 111 116 131 135 136 148 153 149 153 158 151 154 160 148 153 157 143 143 145 131 126 127 111 106 107 89 93 91 76 86 83 74 88 83 90 86 82 97 88 81 97 47 46 44 47 46 44 48 47 45 49 48 46 52 48 45 52 48 45 53 49 46 53 49 46 55 50 46 55 50 46 55 50 46 55 50 46 57 50 44 57 50 44 57 50 44 57 50 44 57 49 46 56 48 46 55 47 45 55 47 45 55 47 45 55 47 45 56 48 46 57 49 47 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 54 46 44 53 45 43 53 45 43 53 45 43 52 44 42 52 44 42 52 44 42 52 44 42 53 45 43 53 45 43 53 45 43 53 45 43 53 45 43 53 45 43 53 45 43 51 46 42 50 45 39 49 46 39 50 47 40 51 48 41 51 48 41 52 49 42 52 49 42 53 50 43 54 51 44 54 51 44 54 51 44 55 52 45 56 53 46 57 54 47 57 54 47 58 55 46 63 56 46 64 58 46 66 60 48 68 62 50 71 63 52 72 64 53 72 64 51 72 64 51 73 64 49 73 64 49 75 63 49 75 63 49 75 63 47 76 64 48 77 65 49 78 66 50 77 65 49 81 65 49 89 66 50 100 67 50 113 67 51 124 67 50 135 66 50 146 65 48 152 60 45 160 58 43 167 59 46 175 61 50 181 64 54 186 68 58 191 70 61 197 68 62 217 67 69 225 64 70 227 66 71 231 66 70 234 68 70 240 67 69 244 65 68 248 63 68 250 59 64 249 58 63 245 59 64 240 61 64 232 64 64 220 65 61 209 64 59 198 64 53 183 61 46 179 64 45 179 64 45 178 63 44 178 63 45 176 63 45 175 62 44 173 64 44 170 63 45 167 64 45 165 64 44 161 65 43 157 65 44 154 63 42 152 64 42 149 64 43 148 62 45 145 62 46 145 62 46 145 62 46 144 61 43 144 61 43 144 61 43 144 61 43 145 62 44 145 62 44 146 60 43 146 60 43 147 61 44 147 61 44 148 63 43 149 63 46 149 65 54 150 63 53 154 62 51 163 62 50 175 65 52 185 67 53 191 68 53 193 67 53 192 68 56 184 70 59 174 73 61 153 74 61 129 71 59 104 64 52 81 58 44 66 53 44 63 55 52 61 55 55 60 54 54 58 52 52 57 52 49 56 51 48 55 50 47 55 50 47 54 50 47 54 50 47 54 50 47 53 49 46 53 50 45 52 49 44 52 49 44 50 49 44 46 48 45 44 49 45 46 48 45 46 48 45 47 47 45 47 47 45 48 47 45 50 46 45 53 47 47 52 46 46 53 44 45 52 42 43 52 42 43 57 45 47 62 50 52 73 53 54 91 57 55 108 63 57 124 69 64 134 73 68 144 79 77 152 91 96 155 102 118 148 109 136 140 119 158 131 125 173 125 130 185 117 126 183 102 109 164 84 86 137 77 69 118 76 65 107 77 65 101 79 70 99 81 72 99 77 72 94 78 75 92 91 91 101 113 116 121 133 137 136 135 140 134 138 143 136 141 144 133 134 138 124 120 122 108 102 105 88 90 91 77 86 83 76 90 85 91 90 84 96 91 83 96 46 45 43 47 46 44 47 46 44 48 47 45 51 47 44 52 48 45 52 48 45 52 48 45 54 49 45 54 49 45 54 49 45 54 49 45 56 49 43 56 49 43 56 49 43 56 49 43 55 47 45 55 47 45 54 46 44 54 46 44 54 46 44 54 46 44 55 47 45 55 47 45 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 56 48 46 53 45 43 53 45 43 53 45 43 52 44 42 52 44 42 52 44 42 51 43 41 51 43 41 54 46 44 54 46 44 54 46 44 54 46 44 54 46 44 54 46 44 54 46 44 52 47 44 51 48 43 51 48 41 51 48 41 52 49 42 52 49 42 53 50 43 53 50 43 53 50 43 53 50 43 53 50 43 54 51 44 55 52 45 56 53 46 56 53 46 57 54 47 57 54 45 62 55 45 63 57 45 64 58 46 66 60 48 69 61 50 69 61 50 70 62 49 70 62 49 71 61 49 71 62 47 72 60 46 73 61 47 73 61 47 74 62 46 76 64 48 74 65 48 75 68 50 78 69 52 85 68 52 94 68 51 105 68 50 115 66 49 126 65 47 134 63 45 140 57 41 148 57 39 157 57 42 163 60 45 172 64 51 179 69 56 184 72 60 193 70 62 210 68 67 218 65 67 222 66 67 226 68 67 231 67 68 236 66 67 243 64 67 247 63 65 250 59 64 249 58 63 245 59 64 238 62 64 229 65 64 218 66 61 205 64 57 194 64 51 181 61 45 176 64 44 176 64 44 176 64 44 175 62 44 174 63 44 174 63 44 172 63 43 169 64 45 166 63 44 163 64 43 160 64 42 156 64 43 152 64 42 150 64 41 148 63 42 145 62 44 145 62 46 145 62 46 144 61 45 144 61 43 144 61 43 143 60 42 143 60 42 144 61 43 144 61 43 143 60 42 143 60 42 146 60 43 145 62 44 148 62 45 146 63 45 149 65 54 150 63 53 156 62 50 166 64 52 178 66 54 188 67 56 193 67 55 194 66 55 194 70 60 186 74 63 172 76 64 151 75 62 124 70 58 98 64 52 76 58 46 65 55 45 64 56 53 62 57 54 61 55 55 60 55 52 58 53 50 57 52 49 56 51 48 56 51 48 54 50 47 54 50 47 54 50 47 51 50 46 53 50 45 50 49 44 50 49 44 49 50 45 45 50 46 45 50 46 47 49 46 47 49 46 48 48 46 48 48 46 49 48 46 49 48 46 53 49 48 54 48 48 53 47 47 53 44 45 52 43 44 54 44 45 58 48 49 68 50 50 84 55 49 99 59 51 113 65 55 123 69 59 130 72 68 137 82 85 141 95 108 139 105 130 131 115 152 125 121 171 120 125 181 111 119 181 96 102 162 81 82 139 76 69 121 76 64 112 76 64 104 80 69 103 81 70 102 76 67 94 71 66 86 77 76 90 94 94 102 106 110 113 117 121 120 120 125 119 122 128 118 119 122 111 107 111 97 96 98 84 87 89 76 84 84 76 93 87 89 93 86 93 93 86 94 45 45 45 45 45 45 46 45 43 47 46 44 48 47 45 49 48 46 51 47 44 52 48 45 51 47 44 51 47 44 52 47 43 52 47 43 52 47 43 52 47 43 54 47 41 54 47 41 52 47 44 52 47 44 51 46 43 51 46 43 51 46 43 51 46 43 52 47 44 52 47 44 53 48 45 53 48 45 53 48 45 53 48 45 53 48 45 53 48 45 53 48 45 53 48 45 51 46 43 51 46 43 50 45 42 50 45 42 50 45 42 49 44 41 49 44 41 49 44 41 52 47 44 52 47 44 52 47 44 52 47 44 52 47 44 52 47 44 52 47 44 52 47 44 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 53 50 45 53 50 45 53 50 45 53 50 45 53 50 45 54 51 46 54 51 46 55 52 47 56 53 48 57 54 49 57 54 47 60 53 45 61 54 44 63 56 46 64 57 47 66 58 47 67 59 48 67 59 48 67 59 46 68 58 46 68 58 46 70 58 46 71 59 45 72 60 46 73 61 47 74 62 48 73 64 49 74 71 54 77 72 53 82 71 53 89 70 53 98 69 51 106 68 49 117 66 47 125 62 44 130 59 41 139 58 41 147 58 42 154 61 44 163 66 50 172 70 56 178 74 61 187 73 63 204 71 66 212 68 67 216 68 66 221 69 66 226 66 66 233 65 65 240 61 64 244 60 62 249 58 63 248 58 60 244 60 62 237 63 62 225 66 62 211 67 58 197 65 53 185 63 48 178 63 45 174 63 44 174 63 44 174 63 44 173 62 45 172 62 45 172 62 45 170 63 45 168 62 46 164 63 45 160 63 44 158 63 43 154 63 44 151 63 43 149 62 42 147 62 42 145 62 44 144 63 46 143 62 45 143 62 45 143 62 45 142 61 44 142 61 44 142 61 44 142 61 44 142 61 44 142 61 44 142 61 44 143 60 44 143 62 45 145 62 46 144 63 46 148 66 52 151 65 52 157 64 49 168 64 51 182 65 55 191 67 57 197 66 56 196 65 55 190 67 59 183 72 63 166 76 67 144 74 64 116 69 59 90 62 50 69 57 45 60 53 43 64 57 51 64 56 53 63 55 53 62 54 51 61 53 50 60 52 49 57 52 48 56 51 47 54 50 47 52 51 47 52 51 47 50 51 46 51 50 46 49 50 45 49 50 45 48 50 45 45 50 46 44 50 46 45 50 46 45 50 46 47 49 46 47 49 46 48 48 46 49 48 46 51 50 48 53 49 48 53 49 48 52 46 46 50 44 44 52 43 44 55 46 47 61 47 46 78 53 46 89 57 46 101 61 49 110 64 51 115 66 59 121 75 75 128 90 101 131 103 128 127 112 151 122 120 170 117 123 183 107 115 180 95 100 166 84 84 148 79 71 131 76 66 119 78 65 109 78 66 104 77 65 101 74 65 96 71 66 89 71 70 88 75 75 87 77 80 85 93 99 99 96 102 98 98 105 97 96 102 92 90 96 84 87 91 77 85 88 77 88 88 80 94 89 86 96 87 88 96 87 90 44 44 44 44 44 44 46 45 43 46 45 43 47 46 44 48 47 45 51 47 44 51 47 44 50 46 43 50 46 43 51 46 42 51 46 42 51 46 42 51 46 42 53 46 40 53 45 42 51 46 43 51 46 43 50 45 42 49 44 41 49 44 41 50 45 42 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 50 45 42 50 45 42 50 45 42 50 45 42 49 44 41 49 44 41 49 44 41 48 43 40 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 51 46 43 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 52 49 44 53 50 45 53 50 45 54 51 46 55 52 47 56 53 48 56 53 48 56 53 46 59 52 44 60 53 43 61 54 44 62 55 45 64 55 46 65 57 46 65 57 46 65 57 46 67 57 47 67 57 45 69 57 45 70 58 46 71 59 47 72 60 46 74 62 48 72 65 49 74 71 54 73 72 54 78 71 53 86 70 54 92 69 51 100 67 50 110 64 48 118 62 45 123 60 43 130 59 41 140 59 42 148 61 44 156 64 49 163 70 53 170 74 58 180 74 61 196 72 64 204 69 65 209 70 65 214 69 64 222 67 65 228 64 62 236 62 63 241 58 60 247 59 60 244 58 59 240 60 61 233 64 61 220 67 61 205 67 56 190 64 50 177 62 44 174 63 44 171 64 44 170 63 43 170 63 43 170 63 45 169 62 44 169 62 44 168 63 44 165 62 45 162 63 44 160 63 44 155 62 44 151 63 43 149 62 42 147 62 41 145 63 42 143 62 43 143 62 45 143 62 45 143 62 45 142 61 44 142 61 44 142 61 44 141 60 43 142 61 44 139 60 43 141 60 43 139 60 43 139 60 45 140 61 44 141 62 47 142 63 46 148 66 52 151 65 50 160 64 50 172 66 53 185 67 57 194 67 58 197 66 58 194 65 59 186 65 57 177 73 64 163 78 71 141 78 69 111 71 61 83 63 52 65 59 47 57 54 45 64 57 51 65 55 53 63 55 52 62 54 51 60 52 49 57 52 48 56 51 47 55 52 47 52 51 47 52 51 47 51 52 47 50 51 46 50 51 46 48 50 45 48 50 45 46 51 45 45 51 47 45 51 47 46 51 47 46 51 47 48 50 47 48 50 47 49 49 47 49 49 47 50 49 47 51 50 48 51 50 48 52 48 47 50 46 45 49 45 44 52 46 46 56 46 44 71 52 45 79 52 41 88 56 43 96 60 48 101 63 54 109 71 70 121 89 100 130 107 133 128 117 159 124 124 178 119 124 188 110 117 187 100 104 175 91 91 161 82 77 143 76 66 126 79 65 114 76 64 104 73 61 99 72 62 96 72 66 94 69 67 88 64 66 79 59 64 70 66 71 74 68 77 74 74 81 74 74 81 73 73 81 70 75 81 69 79 85 73 86 87 79 94 89 83 96 89 83 96 88 85 43 43 43 43 43 43 44 44 44 45 45 45 47 46 44 47 46 44 48 47 45 48 47 45 49 45 42 49 45 42 49 45 42 49 45 42 50 45 41 50 45 41 50 45 41 50 45 41 50 45 42 50 44 44 49 43 43 49 43 43 49 43 43 49 43 43 50 44 44 50 44 44 49 43 43 49 43 43 49 43 43 49 43 43 49 43 43 49 43 43 49 43 43 49 43 43 50 44 44 50 44 44 50 44 44 49 43 43 49 43 43 49 43 43 48 42 42 48 42 42 51 45 45 51 45 45 51 45 45 51 45 45 51 45 45 51 45 45 51 45 45 51 46 43 52 49 44 52 49 44 52 49 44 51 48 43 51 48 43 51 48 43 51 48 43 51 48 43 52 49 44 52 49 44 53 50 45 54 51 46 55 52 47 55 52 47 56 53 48 56 53 46 58 51 43 59 52 44 60 53 45 61 54 46 63 54 47 63 54 45 63 54 45 63 55 44 66 56 46 66 56 46 69 56 47 69 57 45 71 59 47 72 60 48 74 62 50 72 64 51 72 69 54 71 70 52 75 69 53 81 68 52 88 67 50 95 66 50 102 63 46 110 61 44 118 61 44 124 58 42 133 57 41 140 59 42 147 61 46 155 66 50 162 70 55 172 70 56 187 70 60 194 70 62 201 70 62 208 69 62 217 68 64 226 67 63 234 64 64 240 62 62 242 58 58 241 59 58 236 60 60 228 65 60 214 67 59 198 68 54 181 64 47 170 61 41 170 63 45 169 64 45 169 64 45 168 63 44 168 62 46 168 62 46 167 61 45 165 62 45 163 61 46 160 63 46 158 63 45 154 63 45 150 63 44 147 62 42 145 63 42 143 62 41 143 62 43 141 62 45 141 62 45 140 61 44 140 61 46 140 61 46 139 60 45 139 60 45 139 60 45 138 61 45 138 59 44 137 60 44 138 60 47 139 62 46 139 61 48 140 63 47 146 67 50 152 66 49 161 65 49 174 66 54 188 67 58 194 67 60 196 67 61 192 67 61 185 70 65 178 81 74 165 88 82 143 88 81 115 82 73 87 73 62 67 67 55 60 63 54 62 57 51 64 55 50 62 55 49 61 54 48 58 53 47 57 52 46 56 51 47 54 51 46 52 51 46 52 51 46 51 52 47 49 51 46 49 51 46 46 51 45 46 51 45 46 51 45 45 51 47 45 51 47 45 51 47 45 51 47 46 51 47 46 51 47 48 50 47 48 50 47 48 48 46 49 49 47 50 50 48 50 49 47 48 47 45 47 46 44 50 46 45 52 47 44 63 48 43 68 48 41 75 51 41 84 56 45 90 60 52 100 70 70 117 93 106 131 115 141 137 128 171 133 132 190 126 131 199 116 122 198 109 112 189 99 101 175 86 83 154 76 67 130 75 63 113 73 60 103 71 59 99 69 62 95 70 66 93 68 66 87 63 65 78 59 63 72 58 66 69 62 72 71 68 77 72 71 81 73 71 81 72 74 82 71 78 86 75 85 88 77 94 90 79 97 89 78 97 88 79 43 43 43 43 43 43 44 44 44 44 44 44 46 44 45 47 46 44 48 47 45 48 47 45 49 45 42 49 45 42 49 45 42 49 45 42 50 45 41 50 45 41 50 45 41 50 45 42 50 44 44 49 43 43 49 43 43 48 42 42 48 42 42 49 43 43 49 43 43 50 44 44 48 42 42 48 42 42 48 42 42 48 42 42 48 42 42 48 42 42 48 42 42 48 42 42 50 44 44 50 44 44 50 44 44 49 43 43 49 43 43 48 42 42 48 42 42 48 42 42 50 44 44 50 44 44 50 44 44 50 44 44 50 44 44 50 44 44 50 44 44 50 44 44 51 47 44 51 48 43 51 48 43 51 48 43 51 48 43 51 48 43 51 48 43 51 48 43 52 49 44 52 49 44 53 50 45 54 51 46 54 51 46 55 52 47 56 53 48 56 53 48 57 50 44 58 51 43 59 52 44 60 53 45 62 53 46 62 53 46 62 53 46 62 53 44 66 56 47 66 56 46 69 56 47 69 56 47 71 58 49 73 61 49 74 62 50 73 63 51 70 67 52 70 67 52 74 66 53 79 65 52 84 65 50 92 64 50 98 62 48 106 60 45 113 60 46 119 57 42 125 56 41 133 56 40 140 58 44 149 61 47 155 66 52 164 66 53 178 70 58 186 69 59 193 70 62 202 71 63 212 71 64 222 70 65 231 67 65 238 66 64 237 59 59 235 59 59 231 62 59 223 66 59 209 68 58 191 68 52 175 64 45 164 62 40 166 65 45 166 65 45 165 64 44 165 64 46 165 64 46 164 63 45 164 63 45 164 62 47 162 62 46 159 64 46 156 63 46 152 63 45 149 62 43 145 63 42 143 62 41 143 62 43 141 62 45 141 62 45 141 62 45 140 61 44 140 61 46 139 60 45 139 60 45 138 61 45 138 61 45 136 60 46 136 60 46 136 60 46 136 60 47 135 62 47 136 62 49 139 63 49 145 68 50 150 67 49 162 66 52 173 67 54 186 67 59 193 68 62 193 68 62 187 69 65 185 80 76 178 91 84 165 101 92 145 102 93 117 95 84 91 85 73 71 77 65 67 73 63 60 57 50 63 56 50 62 55 49 59 54 48 57 52 46 55 52 45 54 51 46 52 51 46 52 51 46 51 52 46 50 52 47 49 51 46 47 52 46 46 51 45 46 51 45 46 51 45 45 51 47 45 51 47 45 51 47 45 51 47 46 51 47 46 51 47 48 50 47 48 50 47 47 47 45 48 48 46 50 50 48 50 50 48 49 48 46 48 47 45 48 47 45 51 47 44 56 44 44 59 44 41 67 48 42 75 55 48 83 60 54 94 73 72 116 98 110 135 122 148 144 138 182 140 141 198 132 136 207 122 128 204 114 120 198 105 107 182 87 87 159 73 68 132 69 61 110 71 60 100 68 60 97 67 62 94 67 65 89 64 67 86 64 68 80 62 69 75 71 81 82 75 87 85 81 94 87 85 96 88 83 95 85 82 94 84 84 94 83 89 95 83 94 91 76 97 90 74 97 90 74 44 45 47 44 45 47 44 45 47 44 46 45 45 45 45 45 45 45 46 45 43 46 45 43 47 46 44 47 46 44 49 45 42 48 44 41 48 44 41 48 44 41 47 43 40 47 43 40 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 48 44 43 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 48 44 43 48 44 43 49 45 44 49 45 44 50 46 45 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 48 44 41 49 45 42 50 46 43 51 47 44 51 47 44 51 47 44 51 47 44 51 47 44 51 47 44 51 47 44 51 47 44 51 47 44 52 48 45 53 49 46 54 50 47 55 52 47 56 48 45 57 50 44 58 51 45 59 52 46 61 52 47 62 53 46 62 53 46 62 53 46 63 52 46 63 53 44 66 53 45 67 54 46 68 55 47 70 57 48 71 58 49 70 60 50 71 63 52 72 64 53 74 64 54 80 63 53 84 62 51 88 60 49 94 57 48 98 54 43 109 57 46 116 56 45 124 56 43 131 57 44 141 59 47 147 61 48 152 63 49 158 62 48 167 65 51 173 65 52 181 67 56 190 69 58 202 71 61 212 71 62 222 69 63 229 67 64 232 64 63 234 66 65 230 68 65 218 69 62 200 68 56 183 66 49 170 65 46 162 66 44 162 65 46 161 64 45 162 63 44 162 62 46 161 61 45 161 61 45 162 62 46 160 63 47 156 60 44 154 61 44 152 60 45 149 62 45 147 61 44 144 61 43 142 61 42 140 62 42 139 60 43 139 60 43 138 61 45 137 60 44 137 60 44 137 60 44 136 58 45 135 59 45 137 61 47 134 60 47 134 60 47 135 61 48 136 62 51 136 64 50 137 65 53 139 65 52 145 69 53 151 68 52 163 69 57 177 73 62 186 71 64 187 68 62 187 69 65 184 77 71 180 90 82 175 102 95 163 113 102 145 115 104 126 114 100 106 106 94 86 94 83 73 81 70 76 76 66 74 70 61 66 62 53 60 56 47 57 53 44 55 52 43 54 51 44 51 51 43 52 51 46 51 52 46 49 52 45 49 52 45 48 50 45 47 49 44 44 49 43 44 49 43 45 50 46 45 50 46 45 50 46 45 50 46 47 49 46 47 49 46 47 49 46 47 49 46 48 50 47 48 50 47 49 49 47 49 49 47 49 49 47 49 49 47 49 49 47 52 48 47 52 43 48 59 47 51 65 51 50 67 52 47 74 59 54 93 79 79 121 109 121 139 133 159 147 144 187 148 150 207 144 149 217 131 137 211 116 122 198 106 110 183 95 98 167 90 91 148 76 73 116 72 66 100 65 62 93 62 62 88 63 66 85 65 73 86 76 85 92 85 96 98 98 113 110 110 125 120 118 134 124 114 127 117 108 121 111 103 117 104 95 107 95 87 95 80 91 90 70 96 90 68 99 93 71 44 45 47 44 45 47 44 45 47 44 45 47 45 45 45 45 45 45 46 44 45 46 45 43 47 46 44 46 45 43 48 44 41 48 44 41 47 43 40 47 43 40 47 43 40 47 43 40 46 42 41 46 42 41 46 42 41 46 42 41 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 48 44 43 48 44 43 48 44 43 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 48 44 43 48 44 41 49 45 42 50 46 43 51 47 44 51 47 44 50 46 43 50 46 43 50 46 43 50 46 43 50 46 43 50 46 43 51 47 44 52 48 45 53 49 46 54 50 47 56 48 46 57 49 46 58 50 47 59 52 46 61 52 47 62 53 48 62 53 48 61 52 45 63 52 46 63 52 46 65 52 46 66 53 45 67 54 46 69 56 48 71 58 50 72 59 51 72 62 53 72 62 53 76 61 54 79 62 54 81 61 52 86 59 50 90 57 48 95 55 47 104 55 48 112 55 46 119 55 45 129 57 45 137 57 46 144 60 49 150 60 49 155 61 49 162 64 51 167 65 51 172 66 53 180 68 56 190 69 58 201 70 60 212 69 61 219 68 61 223 68 64 224 69 64 222 70 65 212 71 62 196 70 56 178 67 50 165 66 45 158 66 45 159 67 46 158 66 45 159 64 46 158 63 45 158 63 45 158 63 45 158 62 46 158 62 46 154 61 44 153 62 44 150 61 45 148 61 44 144 61 43 143 62 43 140 62 42 140 61 44 139 60 43 138 61 43 137 60 44 137 60 44 137 60 44 135 59 43 135 59 45 133 60 45 134 60 47 133 61 47 133 61 49 131 61 49 132 62 50 134 64 54 135 65 55 136 66 54 147 71 57 151 69 55 163 71 60 175 74 64 184 73 66 184 71 65 183 76 70 179 84 78 177 100 92 170 113 102 159 126 111 144 127 111 127 124 109 109 115 101 90 102 90 78 88 77 76 78 65 75 73 61 69 67 55 64 61 52 61 58 49 56 56 46 52 52 44 49 49 41 50 51 45 50 51 45 48 51 44 47 50 43 47 49 44 46 48 43 46 48 43 46 48 43 47 49 46 45 50 46 47 49 46 47 49 46 47 49 46 47 49 46 47 49 46 47 49 46 48 50 47 48 50 47 49 49 47 49 49 47 49 49 47 49 49 47 49 49 47 50 48 49 53 43 52 57 45 55 60 50 51 63 53 51 72 63 58 94 86 84 120 114 124 138 136 158 147 147 185 148 151 202 144 150 212 132 139 207 121 129 194 113 121 184 107 116 173 104 110 158 92 95 128 88 90 113 83 85 106 82 87 106 84 94 104 90 103 109 102 118 118 114 130 127 116 136 127 126 146 135 131 149 137 126 142 129 118 134 121 114 128 113 102 116 101 90 101 84 89 88 67 94 88 62 97 91 67 44 45 47 44 45 47 44 45 47 44 45 47 44 45 47 44 46 45 45 45 45 45 45 45 46 45 43 46 45 43 46 45 43 45 44 42 47 43 40 46 42 39 46 42 39 46 42 39 44 43 41 44 42 43 44 42 43 44 42 43 43 41 42 43 41 42 43 41 42 43 41 42 45 43 44 45 43 44 45 43 44 45 43 44 45 43 44 45 43 44 45 43 44 45 43 44 44 42 43 44 42 43 45 43 44 45 43 44 45 43 44 46 44 45 46 44 45 46 44 45 46 44 45 46 44 45 46 44 45 47 45 46 47 45 46 47 45 46 47 45 46 47 46 44 48 44 43 48 44 43 49 45 44 50 46 45 50 46 45 50 46 45 50 46 45 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 50 46 45 51 47 46 52 48 47 53 49 46 56 48 46 57 49 46 58 50 47 59 51 48 61 51 49 61 52 47 61 52 47 61 52 47 63 52 48 63 52 46 65 52 46 65 52 46 67 54 48 68 55 49 70 57 51 71 58 52 72 59 53 74 59 54 75 60 55 78 61 54 80 59 54 83 58 53 86 55 50 91 54 46 99 54 48 107 54 46 116 53 44 125 55 47 135 57 47 141 59 48 148 60 48 150 60 49 157 63 51 160 64 52 162 64 51 168 64 51 177 67 54 186 68 56 197 69 58 205 68 58 213 70 64 215 72 64 212 73 66 204 73 63 190 69 58 174 67 51 161 66 46 156 65 46 157 66 47 156 65 46 156 63 46 155 62 45 155 62 45 155 62 45 155 62 47 155 63 48 152 60 45 150 61 45 148 60 46 147 61 46 143 62 45 140 61 44 139 60 43 138 61 43 137 60 42 137 60 42 137 60 44 135 59 43 135 59 45 133 60 45 132 58 45 131 59 45 132 60 48 130 60 48 130 60 50 130 62 51 131 63 52 133 65 56 135 67 58 136 68 57 148 74 61 151 72 59 160 72 62 172 75 68 178 75 70 179 76 71 178 83 77 174 96 86 173 115 103 166 129 113 157 140 122 145 142 123 130 137 119 115 128 111 99 113 98 88 99 85 78 82 68 77 78 64 72 73 59 68 68 56 64 64 52 57 59 46 52 54 43 47 49 38 48 49 41 48 49 41 47 48 42 47 48 42 46 47 42 46 47 42 47 47 45 47 47 45 47 47 45 46 48 45 47 47 45 47 47 45 47 47 45 47 47 45 47 47 45 47 47 45 48 48 46 48 48 46 48 48 46 48 48 46 48 48 46 48 48 46 48 48 46 49 47 50 54 43 57 55 43 57 56 47 52 59 54 51 72 69 62 95 94 89 122 122 124 139 141 154 144 148 177 146 151 191 143 149 199 132 142 195 125 137 187 123 137 182 124 139 178 125 140 171 125 136 154 119 131 143 113 126 135 110 125 130 110 126 126 111 130 126 121 142 133 131 153 141 139 161 148 145 168 152 144 165 148 136 157 138 131 150 131 124 141 123 106 123 105 92 104 84 86 86 62 91 87 58 93 89 62 45 46 48 45 46 48 45 46 48 45 46 48 45 46 48 45 46 48 46 46 46 46 46 46 46 45 43 46 45 43 45 44 42 45 44 42 46 42 39 46 42 39 46 42 39 46 42 41 44 42 43 43 41 42 43 41 42 43 41 42 43 41 42 42 40 41 42 40 41 42 40 41 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 45 43 44 45 43 44 45 43 44 45 43 44 46 44 45 46 44 45 46 44 45 46 44 45 47 45 46 47 45 46 47 45 46 47 43 42 48 44 43 49 45 44 49 45 44 49 45 44 49 45 44 48 44 43 48 44 43 48 44 43 48 44 43 48 44 43 48 44 43 49 45 44 50 46 45 51 47 46 52 48 47 57 49 47 58 50 48 59 51 49 60 52 49 61 51 49 61 51 49 61 51 49 61 52 47 62 51 47 62 51 47 64 50 47 64 51 45 65 52 46 67 54 48 68 55 49 69 56 50 70 57 51 72 57 52 73 58 53 74 59 54 76 58 54 78 57 52 81 56 51 84 53 48 94 55 50 101 54 48 111 54 47 120 56 47 130 57 48 138 58 47 144 60 49 148 62 49 153 63 52 155 63 52 155 63 50 159 63 49 165 65 50 174 66 53 184 68 55 191 69 58 199 71 62 203 72 64 202 74 65 195 73 62 182 70 58 170 66 53 158 65 48 153 64 46 153 65 45 153 65 45 152 63 45 151 62 44 151 62 44 153 62 44 153 61 46 151 62 46 149 60 44 148 61 44 147 61 46 144 61 45 142 61 44 138 61 43 138 61 45 137 60 44 136 59 41 136 59 41 135 59 43 135 59 43 132 59 44 132 59 44 131 59 45 128 59 44 129 59 47 128 60 49 128 60 49 129 62 53 131 64 55 131 67 58 135 68 60 136 69 60 148 76 64 150 72 60 158 71 62 167 74 67 174 76 73 174 81 76 173 93 86 170 106 94 167 128 111 161 143 121 154 154 130 143 155 131 134 149 128 122 139 120 109 123 106 98 109 93 83 90 74 81 85 70 75 79 64 69 73 58 64 68 54 59 61 48 53 55 44 49 51 40 48 49 41 47 48 40 46 47 41 46 45 40 46 45 41 46 45 41 47 46 44 48 47 45 47 46 44 47 46 44 47 46 44 47 46 44 47 46 44 46 46 44 47 46 44 46 46 44 48 47 45 47 47 45 48 47 45 47 47 45 47 47 45 47 47 45 47 47 45 50 45 49 55 44 58 54 42 56 51 45 49 57 54 49 72 74 63 98 102 88 123 128 122 139 144 147 141 147 163 143 150 176 140 149 182 131 144 178 129 144 175 133 153 178 141 164 182 146 168 179 147 168 171 144 164 163 140 160 158 135 158 152 130 153 143 125 152 137 129 156 139 136 163 144 148 176 154 152 177 155 148 173 151 139 163 141 133 155 132 127 146 124 107 124 105 88 102 79 83 86 59 89 85 56 90 86 57 43 47 50 43 47 50 43 47 50 43 47 50 45 46 48 45 46 48 46 46 46 46 46 46 45 45 45 45 45 45 46 45 43 45 44 42 45 44 42 44 43 41 44 43 41 44 43 41 44 42 43 44 42 43 44 42 43 43 41 42 43 41 42 42 40 41 42 40 41 42 40 41 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 44 42 43 43 41 42 43 41 42 43 41 42 44 42 43 45 43 44 45 43 44 46 44 45 46 44 45 47 45 46 47 45 46 47 45 46 47 43 42 48 44 43 48 44 43 48 44 43 48 44 43 48 44 43 47 43 42 46 42 41 47 43 42 47 43 42 47 43 42 47 43 42 48 44 43 49 45 44 51 47 46 52 48 47 57 48 49 58 50 48 59 51 49 60 52 50 61 51 50 61 51 49 60 50 48 60 50 48 61 50 48 61 50 46 63 49 46 63 49 46 64 50 47 65 51 48 66 53 47 67 54 48 68 54 51 67 56 52 68 57 53 69 58 54 71 57 54 72 57 52 75 56 52 78 53 48 88 55 50 95 54 48 105 55 48 114 55 47 125 58 49 134 60 49 140 62 50 144 62 50 151 64 54 151 63 53 151 63 53 151 63 51 156 64 51 163 67 53 171 67 54 179 69 56 186 69 59 189 71 61 190 72 62 185 71 61 176 68 56 166 65 53 155 63 48 151 64 47 151 64 45 151 64 45 150 63 46 149 62 45 148 61 44 149 60 44 150 61 47 150 61 47 149 60 46 147 59 45 146 60 47 142 60 46 139 60 45 137 60 44 137 60 44 136 60 44 135 59 43 134 58 42 134 58 42 134 58 42 131 58 43 131 58 43 130 58 44 128 58 46 128 58 48 128 60 49 128 61 52 127 63 54 130 66 57 131 68 61 135 70 64 136 72 63 145 75 65 146 72 61 154 71 63 163 76 69 168 80 76 168 88 81 169 102 93 166 118 104 162 140 119 155 153 128 149 164 135 140 163 135 134 157 131 126 145 125 116 130 113 106 117 101 92 101 82 86 95 76 78 85 67 69 76 58 63 70 54 60 64 50 55 58 47 54 56 45 48 49 41 48 48 40 46 45 40 47 44 39 47 43 40 47 43 42 49 45 44 50 46 45 49 45 44 49 45 44 49 45 44 49 45 44 49 45 44 47 46 44 49 45 44 47 46 44 50 46 45 48 47 45 50 46 45 48 47 45 48 47 45 48 47 45 48 47 45 50 45 49 56 44 58 53 41 53 49 43 43 54 54 44 71 76 56 96 104 81 122 131 112 136 146 135 141 151 150 143 154 160 141 153 165 134 150 163 135 155 162 144 170 169 155 185 177 160 192 179 152 183 168 154 182 167 155 183 168 152 183 165 145 177 156 137 171 146 137 171 144 144 177 148 146 179 150 149 180 149 144 173 143 136 162 133 132 155 129 123 146 120 103 122 100 84 98 73 81 84 57 85 84 56 86 85 57 44 48 51 44 48 51 44 48 51 44 48 51 46 47 49 46 47 49 47 47 47 47 47 47 46 46 46 46 46 46 47 46 44 46 45 43 46 45 43 46 45 43 45 44 42 45 44 42 45 43 44 45 43 44 45 43 44 44 42 43 43 41 42 42 40 41 42 40 41 42 40 41 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 44 42 43 44 42 43 43 41 42 43 41 42 43 41 42 42 40 41 42 40 41 42 40 41 44 42 43 44 42 43 44 42 43 45 43 44 46 44 45 46 44 45 47 45 46 47 45 46 47 43 42 47 43 42 48 44 43 48 44 43 47 43 42 47 43 42 46 42 41 45 41 40 48 44 43 48 44 43 47 43 42 48 44 43 49 45 44 50 46 45 51 47 46 52 48 47 58 49 50 58 49 50 59 51 49 60 52 50 61 51 50 60 50 49 60 50 48 59 49 47 61 50 48 60 49 47 62 48 45 62 48 45 63 49 46 64 50 47 65 52 46 63 52 46 64 53 49 64 55 50 64 57 51 65 58 52 66 57 52 67 56 52 70 55 52 72 53 47 81 53 49 88 53 47 97 54 47 108 56 45 117 57 46 128 60 47 134 62 48 139 61 49 147 63 53 149 62 53 147 63 53 147 63 52 149 66 52 154 66 52 160 67 52 165 68 52 172 66 53 176 68 56 180 69 58 177 69 59 170 66 55 161 63 52 154 62 49 150 62 48 149 63 46 148 63 43 147 61 44 147 61 44 147 60 43 147 60 43 148 60 46 148 60 46 147 59 45 146 60 45 143 60 46 141 59 45 138 59 44 137 60 44 135 59 43 135 59 43 134 58 42 134 58 42 133 57 41 131 58 41 131 58 43 129 57 42 127 57 45 127 57 45 128 60 49 127 60 51 127 63 54 128 65 56 130 67 60 133 70 63 136 73 66 138 73 67 142 74 65 144 71 62 151 72 67 159 78 74 167 86 82 167 96 90 169 112 101 164 131 114 156 148 125 150 161 131 143 168 138 136 167 136 131 160 132 126 150 126 121 136 117 112 123 106 100 112 92 93 105 83 82 94 74 74 83 64 66 75 58 62 69 53 58 64 50 57 60 49 51 52 44 50 50 42 49 46 41 47 44 39 47 41 41 48 42 42 49 43 43 50 44 44 49 43 43 49 43 43 49 43 43 49 43 43 49 43 43 48 44 43 48 44 43 48 44 43 49 45 44 49 45 44 49 45 44 49 45 44 47 46 44 47 46 44 47 46 44 50 44 46 56 42 55 53 40 49 51 43 40 53 54 38 69 75 49 92 103 71 117 130 100 134 147 121 142 155 138 145 158 148 144 159 154 139 158 152 141 165 151 151 180 158 162 197 165 169 206 173 165 201 173 166 202 176 167 203 177 164 200 172 151 190 159 139 179 145 136 176 141 141 178 144 142 178 142 144 178 143 141 172 138 132 161 130 128 153 123 119 142 114 100 120 93 81 95 69 77 81 54 81 81 53 82 81 53 44 48 51 44 48 51 44 48 51 44 48 51 46 47 49 46 47 49 46 47 49 46 47 49 47 47 47 47 47 47 47 47 47 47 47 47 47 46 44 47 46 44 46 45 43 46 45 43 47 45 46 46 44 45 46 44 45 45 43 44 44 42 43 43 41 42 43 41 42 42 40 41 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 42 40 41 42 40 41 42 40 41 41 39 40 41 39 40 43 41 42 43 41 42 44 42 43 45 43 44 46 44 45 46 44 45 47 45 46 47 45 46 47 43 42 47 43 42 47 43 42 47 43 42 47 43 42 46 42 41 45 41 40 44 40 39 48 44 43 48 44 43 48 44 43 48 44 43 49 45 44 50 46 45 52 48 47 52 48 47 58 49 50 59 50 51 59 50 51 60 51 52 61 51 50 60 50 49 60 50 49 59 49 48 60 49 47 60 49 47 62 48 47 61 47 46 62 48 45 62 48 45 63 49 46 62 51 47 61 54 48 59 54 48 59 56 51 60 57 52 61 58 53 62 57 51 64 55 50 67 54 48 71 52 46 79 52 43 89 52 43 100 53 43 110 56 44 120 58 45 127 59 46 133 59 46 143 60 52 145 60 53 144 62 51 143 64 51 144 65 50 147 66 49 151 65 50 153 64 48 160 62 49 166 64 52 170 66 55 170 66 57 165 64 54 159 62 53 151 61 50 149 63 50 146 63 45 146 63 45 145 62 44 144 61 43 145 59 42 145 59 42 146 60 45 146 60 45 145 59 46 145 59 46 142 59 45 141 59 45 138 59 46 136 58 45 134 58 44 132 59 44 133 57 41 133 57 41 131 58 41 130 57 40 130 57 42 129 57 42 126 56 44 126 56 44 128 60 49 128 61 52 128 64 55 129 66 57 132 69 62 133 73 65 136 75 70 140 77 70 140 73 65 142 72 64 152 74 70 161 83 79 168 93 88 169 104 98 169 123 110 164 142 121 153 156 129 146 167 134 137 172 139 130 170 136 128 161 132 127 153 128 126 139 119 120 129 110 106 120 97 100 114 91 90 104 81 81 93 73 73 84 67 67 76 59 62 68 54 60 63 52 54 55 47 52 52 44 51 48 43 48 43 39 49 40 41 49 40 41 50 41 42 52 43 44 50 41 42 50 41 42 50 41 42 50 41 42 50 41 42 48 42 42 48 42 42 48 42 42 49 43 43 49 43 43 48 44 43 48 44 43 48 44 43 48 44 43 48 44 43 49 43 45 54 41 50 53 41 45 52 45 37 52 54 33 65 72 38 87 99 59 113 128 87 130 146 109 141 156 125 144 160 134 144 162 140 139 161 138 141 168 137 149 184 142 160 200 148 164 208 157 169 211 171 168 210 174 167 209 173 161 203 165 147 189 151 133 175 135 130 172 132 135 176 134 136 174 133 140 177 136 139 171 134 129 159 123 123 148 116 113 136 107 95 115 87 77 93 66 73 79 51 74 77 48 76 76 48 46 47 49 44 48 49 46 47 49 46 47 49 46 48 47 46 48 47 46 48 47 47 47 47 48 48 46 48 48 46 48 48 46 48 47 45 48 47 45 48 47 43 47 46 44 49 45 44 50 46 45 49 45 44 49 45 44 48 44 43 47 43 44 44 42 43 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 44 43 41 42 43 41 44 43 41 42 45 40 44 42 40 41 44 40 41 41 39 40 41 39 40 40 38 39 42 40 41 43 41 42 44 42 43 44 43 41 45 43 44 46 45 43 47 46 44 47 46 44 45 44 42 45 44 42 47 43 42 47 43 42 46 42 41 45 41 40 44 40 39 44 40 39 49 45 44 50 45 42 50 45 42 50 45 42 51 46 43 52 47 44 53 48 45 54 49 46 59 51 49 59 51 49 60 52 50 60 52 50 61 51 49 60 50 48 59 49 47 59 49 47 60 49 47 60 49 47 61 47 46 61 47 46 61 47 44 62 48 45 63 49 46 61 50 46 62 51 45 61 54 46 60 55 49 57 57 49 57 58 50 58 58 50 59 56 49 63 54 47 67 50 43 74 49 44 84 50 41 94 51 42 104 54 43 111 57 45 118 60 46 123 59 47 135 61 50 139 61 51 139 63 50 140 64 50 142 64 51 143 64 49 146 63 49 149 61 47 152 60 47 156 62 50 162 66 54 161 67 55 158 66 55 153 63 52 150 62 50 148 62 49 148 62 47 147 61 46 144 61 45 142 61 44 142 61 44 140 61 44 140 61 46 141 62 47 142 60 46 142 60 46 139 60 47 138 59 46 136 58 45 135 59 45 132 59 44 132 59 44 130 58 43 128 59 43 127 58 42 126 59 42 126 59 43 124 58 42 124 58 44 124 58 46 128 62 50 129 62 53 128 64 54 130 67 58 133 70 61 133 74 66 136 77 69 139 79 71 140 73 67 142 73 68 147 80 74 152 92 84 157 104 96 157 117 105 158 135 117 157 153 128 147 162 133 143 170 137 137 172 139 129 169 135 127 162 132 125 155 127 122 144 121 116 136 111 103 126 98 98 121 93 92 112 85 85 103 79 78 93 72 71 82 65 64 73 56 61 65 51 56 56 46 56 53 46 53 48 44 51 43 41 50 40 41 50 40 41 51 41 42 52 42 43 50 41 44 48 42 42 48 42 44 50 41 42 50 41 44 50 41 44 50 41 44 50 41 44 51 42 45 51 42 45 49 43 45 49 43 45 48 44 45 48 44 45 48 44 45 49 43 47 52 41 47 52 42 43 52 45 37 52 54 33 63 70 37 84 96 56 109 124 81 129 144 103 137 153 116 141 158 122 141 161 126 136 161 122 138 167 123 145 182 130 155 196 136 159 203 144 159 201 153 158 199 157 157 198 154 152 193 149 140 183 138 130 173 128 133 174 130 140 181 137 132 171 127 137 174 133 137 169 130 126 156 120 118 143 111 108 131 102 90 110 83 74 90 63 70 76 50 70 74 47 70 72 48 47 48 43 46 48 43 47 48 43 48 49 44 48 49 44 48 49 44 49 50 45 50 49 45 51 50 46 52 51 47 52 51 47 54 50 47 53 49 46 52 49 44 51 47 44 52 47 44 53 48 45 53 48 45 52 47 44 51 46 43 50 44 44 49 45 44 48 44 43 48 44 43 46 44 45 46 44 45 45 45 47 45 45 47 44 44 46 43 43 45 42 41 46 41 41 43 46 41 47 46 41 45 47 40 47 46 41 45 47 41 45 46 41 45 46 42 43 46 42 43 47 43 42 47 43 42 45 44 42 46 45 41 45 45 43 45 46 41 46 47 42 46 47 42 45 45 45 45 45 45 46 44 45 47 45 46 47 46 44 48 47 45 50 46 43 50 46 43 50 45 42 52 44 41 53 45 42 54 46 43 56 47 42 58 49 44 58 49 42 59 50 43 61 52 45 61 52 45 62 53 48 62 53 48 62 53 48 61 52 47 60 51 46 59 50 45 61 50 46 60 49 45 60 49 47 59 48 46 61 47 46 62 48 47 62 48 47 64 49 46 66 47 41 66 49 41 60 51 42 57 54 45 53 56 45 52 55 46 54 54 46 59 50 45 64 45 41 71 41 39 79 39 39 86 41 38 91 46 40 97 53 44 102 60 48 109 63 48 121 65 48 127 64 47 134 65 49 139 66 51 143 64 51 147 61 48 147 59 47 146 56 45 147 59 47 147 61 46 148 65 49 149 66 50 148 67 50 146 65 48 145 62 46 145 59 44 151 59 48 151 58 50 146 59 49 140 61 48 136 63 48 132 63 47 130 63 46 130 63 46 136 64 49 136 63 48 138 62 49 137 61 48 136 60 47 135 59 46 132 58 45 131 59 45 123 57 43 126 64 51 118 60 46 112 56 41 118 62 45 118 62 45 118 59 45 125 63 50 125 59 47 131 63 52 136 68 57 139 72 63 138 76 65 135 77 66 133 79 67 135 78 69 144 76 73 149 84 80 147 99 89 142 113 97 138 125 106 134 138 113 135 151 124 136 159 130 139 166 135 138 167 137 139 168 138 138 168 140 132 165 136 124 161 130 114 155 123 110 151 117 104 142 105 97 133 95 91 122 88 89 116 85 90 110 83 86 101 78 79 88 69 73 75 61 66 63 54 64 57 51 58 48 46 53 43 42 51 39 41 51 39 43 51 39 43 49 38 42 47 41 45 45 41 42 45 40 44 45 39 41 47 38 43 49 38 44 51 38 45 51 38 45 52 39 46 52 39 46 51 40 48 50 40 48 48 41 49 47 42 49 47 42 49 47 42 48 47 41 45 49 43 43 48 45 40 47 47 35 60 63 42 86 92 64 112 122 88 127 139 103 141 156 117 139 157 115 140 161 118 140 166 119 138 168 118 137 170 117 142 180 123 153 191 134 159 193 143 157 190 143 150 186 138 143 179 131 136 174 125 133 171 124 131 170 123 133 170 126 131 168 125 131 166 126 128 158 124 121 148 117 114 137 109 104 124 99 89 107 85 77 90 70 74 82 61 68 73 51 62 65 46 47 48 42 48 49 43 48 49 43 48 49 43 49 50 44 49 50 44 50 49 44 51 50 45 52 51 46 52 51 46 55 52 47 55 52 47 54 51 46 53 50 45 53 48 44 53 48 44 55 47 44 55 47 44 54 46 44 54 46 44 51 46 43 50 45 42 48 44 43 48 44 43 48 44 45 47 45 46 47 45 48 45 45 47 45 44 49 43 42 47 41 42 46 41 40 45 46 41 47 47 40 47 47 40 47 47 40 47 47 41 45 47 41 45 46 42 43 46 42 43 47 43 42 47 43 42 46 45 41 46 45 41 46 47 42 46 47 42 46 47 41 46 47 42 46 46 46 46 46 48 46 46 46 46 46 46 47 46 44 47 46 44 49 45 42 51 46 43 53 45 42 53 46 40 55 46 41 56 47 40 58 47 41 59 48 42 60 50 41 61 51 42 62 53 44 62 53 44 62 53 46 62 53 46 62 53 46 61 52 45 60 51 46 60 51 46 61 50 46 60 49 45 59 48 46 59 48 46 61 47 46 61 47 46 62 48 47 64 49 46 68 47 42 70 47 41 67 50 43 64 51 43 61 52 45 60 51 44 59 50 45 62 48 45 65 44 43 70 42 41 75 41 40 80 42 39 86 45 41 92 51 45 97 57 49 103 61 47 112 65 47 120 65 45 128 65 48 136 64 50 143 63 52 145 61 51 147 58 50 147 59 49 141 57 46 139 60 47 139 62 46 140 64 48 141 65 49 141 65 49 142 65 47 145 63 49 149 59 50 149 59 50 144 60 50 139 61 48 134 62 48 131 64 47 129 63 47 129 64 46 133 64 49 134 62 47 135 61 48 136 60 46 133 59 46 132 59 44 130 58 44 127 60 44 119 57 44 119 61 49 112 59 45 109 57 43 114 63 46 114 63 46 113 57 42 117 58 44 127 61 49 132 64 53 138 68 58 140 72 61 138 74 64 135 77 65 133 79 67 136 77 69 144 74 72 149 84 82 145 102 93 138 119 102 131 135 112 127 147 119 128 159 127 131 166 134 134 167 136 139 168 138 143 167 141 143 167 141 136 165 137 127 160 131 117 156 125 109 153 118 100 147 105 94 139 96 89 130 90 89 123 88 90 119 88 88 111 83 82 97 74 77 86 67 69 73 59 65 65 55 59 56 51 53 48 45 51 42 43 50 41 42 49 40 43 46 40 42 49 40 43 48 39 44 48 39 44 48 39 44 49 38 44 51 38 45 52 39 48 52 39 48 52 39 48 51 40 48 50 40 49 48 41 49 47 42 49 45 42 51 44 43 51 44 43 49 50 45 49 50 46 45 48 44 41 45 45 37 56 58 44 83 88 66 111 120 93 128 139 105 135 150 111 134 153 108 134 158 110 136 163 112 134 164 112 132 165 112 138 173 119 147 182 128 153 185 135 150 182 132 147 179 129 140 174 123 134 171 120 130 168 119 130 168 121 131 168 124 131 166 124 130 164 127 127 157 123 120 146 117 113 136 110 104 123 101 89 106 87 77 90 72 70 77 59 64 68 51 59 62 45 49 50 44 49 50 44 49 50 44 49 50 44 50 51 45 50 51 45 52 51 46 52 51 46 53 52 47 53 52 47 56 53 48 56 53 48 56 53 48 55 52 47 55 50 46 54 49 45 56 48 45 56 48 45 55 47 44 54 46 43 52 47 44 51 46 43 50 44 44 49 45 44 49 45 46 47 45 46 48 46 49 47 45 48 45 45 47 44 44 46 43 42 47 43 41 46 47 40 47 49 39 47 47 41 45 47 41 45 47 41 45 47 41 45 46 42 43 46 42 43 48 44 43 48 44 43 47 46 42 47 46 42 47 46 41 48 47 42 48 47 42 48 47 43 47 47 45 47 47 47 48 46 47 48 46 47 48 47 45 47 46 44 49 45 42 50 45 42 54 46 43 55 48 42 57 48 43 58 49 42 60 49 43 61 51 42 62 52 43 63 53 44 63 54 45 63 54 45 64 55 46 64 55 46 63 54 47 62 53 46 61 52 45 61 52 45 61 50 46 60 49 45 59 48 46 59 48 46 59 48 46 59 48 46 60 49 47 63 49 46 68 49 43 71 47 43 74 46 43 76 44 45 79 43 47 78 42 46 74 42 47 71 42 46 68 44 44 65 46 42 66 45 40 70 45 40 79 46 41 89 48 42 99 50 45 105 52 44 107 58 44 111 59 45 119 59 48 129 61 52 135 60 54 140 60 53 141 58 52 141 58 52 138 60 50 135 61 50 134 62 50 133 63 51 134 65 50 137 65 51 140 66 53 143 67 53 142 63 50 143 61 47 140 62 49 138 62 46 135 62 47 133 62 44 134 61 46 134 61 44 137 59 46 137 60 44 136 58 45 134 58 42 132 59 44 128 60 41 126 61 43 122 61 43 124 62 49 120 60 49 117 59 47 116 60 47 118 65 49 118 65 49 117 61 46 118 59 45 127 63 53 132 65 56 138 70 61 140 72 63 138 74 65 137 74 65 136 78 67 140 77 70 147 73 72 153 83 81 151 101 92 146 117 101 138 132 110 131 144 116 129 156 123 130 164 131 134 168 135 138 169 137 143 169 140 145 168 140 144 164 137 138 158 131 130 153 125 122 151 120 107 149 109 97 146 101 92 139 97 92 134 96 93 130 96 91 124 93 85 114 86 80 104 80 70 89 69 66 80 63 58 68 57 51 58 50 46 51 44 42 47 41 40 45 41 43 42 40 50 38 40 53 36 42 53 36 42 53 36 42 52 37 42 53 38 43 51 40 46 51 42 47 48 42 46 47 42 46 44 43 48 43 44 48 41 45 48 40 45 49 38 46 49 40 45 48 49 47 50 51 47 46 46 42 39 42 42 34 53 55 42 80 85 65 109 118 91 124 138 105 128 144 107 126 147 106 127 153 106 131 159 110 128 160 110 126 160 109 128 165 113 135 172 120 141 175 124 139 173 122 136 170 120 132 169 118 129 167 118 127 167 117 127 166 119 127 166 121 127 164 121 128 162 125 125 155 121 119 145 116 112 135 109 104 124 99 89 107 85 77 90 70 69 73 58 62 64 50 57 58 44 50 51 45 50 51 45 51 52 46 51 52 46 51 52 46 52 53 47 53 52 47 53 52 47 54 53 48 55 54 49 57 54 49 58 55 50 58 55 50 57 54 49 57 52 48 57 52 48 58 50 47 57 49 46 57 49 46 56 48 45 53 48 45 52 47 44 52 46 46 52 46 46 51 47 48 51 47 48 49 47 48 49 47 50 48 46 49 46 46 48 45 45 47 45 43 46 48 41 48 50 41 46 48 42 46 48 42 46 48 42 46 48 42 44 47 43 44 47 43 42 49 45 44 49 45 44 48 47 43 48 47 43 49 48 43 49 48 43 49 48 43 49 48 44 49 49 47 49 49 49 49 47 48 49 48 46 49 48 46 50 46 43 51 46 43 51 46 42 57 50 44 57 50 44 59 50 43 60 51 44 62 52 43 64 54 45 64 54 45 65 55 46 66 56 47 65 56 47 66 57 48 65 56 47 65 56 49 64 55 48 62 53 46 62 53 46 61 50 46 61 50 46 60 49 47 59 48 46 59 48 46 60 49 47 61 50 48 63 49 46 66 51 46 70 49 46 77 45 46 84 41 48 88 38 47 87 37 46 81 38 47 75 40 46 68 47 46 62 49 43 60 50 41 64 50 41 72 47 40 84 47 41 96 45 42 101 46 41 105 57 47 107 59 47 117 60 51 125 60 54 133 59 56 137 59 57 138 59 55 136 58 54 137 62 56 134 64 56 134 66 57 133 66 57 133 67 55 134 66 55 135 65 55 137 65 53 137 64 49 137 64 47 136 63 46 136 63 46 135 62 45 136 60 44 136 59 43 137 58 43 138 56 42 138 56 42 136 57 42 133 57 41 130 59 41 125 60 40 122 61 40 120 62 42 127 64 49 122 55 46 120 56 46 120 60 49 117 59 45 118 62 47 123 65 51 123 64 50 128 66 55 132 68 58 135 71 61 137 73 63 136 73 64 138 75 66 138 78 68 140 80 72 144 81 74 147 90 81 148 101 91 143 114 98 137 125 103 132 136 109 131 147 118 131 156 124 135 165 131 136 167 135 139 168 137 143 168 138 143 163 135 139 158 130 136 152 126 127 150 121 114 148 111 108 146 105 104 142 103 102 140 101 103 139 103 100 134 101 96 125 95 92 118 91 81 103 80 76 93 74 66 80 63 57 68 54 50 58 47 46 52 42 44 47 40 45 42 37 53 37 38 56 35 40 56 35 40 55 36 40 52 37 40 51 39 43 50 41 44 48 44 45 44 42 43 43 43 45 42 43 45 40 44 45 39 44 47 39 44 47 37 45 47 40 44 45 46 42 43 49 43 43 48 43 39 46 43 34 56 56 44 80 85 65 105 113 89 118 132 99 123 140 104 121 143 104 124 150 105 127 156 108 125 159 109 121 158 107 122 160 109 127 165 114 130 167 116 128 165 113 125 163 112 125 163 112 125 165 115 126 165 118 126 165 120 125 164 120 124 161 120 125 159 122 122 153 119 117 144 113 110 135 106 101 124 98 87 107 82 78 91 71 69 71 57 63 61 48 57 55 42 52 53 47 52 53 47 52 53 47 53 54 48 53 54 48 53 54 48 55 54 49 55 54 49 56 55 50 56 55 50 59 56 51 60 57 52 60 57 52 60 57 52 60 55 51 60 55 51 60 52 49 60 52 49 59 51 48 59 51 48 56 51 48 55 50 47 54 49 46 54 49 46 53 49 48 54 50 49 54 50 49 51 49 50 50 48 49 49 47 48 48 46 47 49 45 46 50 44 48 52 43 46 52 43 46 52 43 46 50 44 46 50 44 44 50 44 44 50 44 44 51 47 46 51 47 44 51 47 44 51 47 44 50 49 44 50 49 44 51 50 45 51 50 46 51 50 48 51 50 48 51 50 48 51 50 48 53 49 48 53 49 46 54 49 46 54 49 45 59 52 46 60 53 47 61 52 45 63 54 45 65 55 46 66 56 47 69 56 47 67 57 47 68 58 49 68 58 49 69 59 50 68 58 49 67 57 48 66 56 47 64 53 47 64 53 47 62 51 47 62 51 47 61 50 46 61 50 46 61 50 48 61 50 48 62 51 49 62 51 49 66 52 49 70 50 49 78 48 50 85 44 52 90 40 51 89 39 50 83 40 49 76 44 49 68 50 48 60 53 45 57 55 43 60 54 42 68 51 41 78 49 41 90 47 41 94 47 41 102 58 49 106 59 51 115 60 55 122 61 58 130 60 58 134 60 59 135 59 59 134 58 58 130 59 55 129 62 56 129 65 56 129 66 57 131 67 58 131 67 58 133 64 57 132 64 55 132 66 50 132 67 49 133 64 48 134 62 47 136 60 46 137 59 46 139 57 45 140 56 45 138 54 43 137 55 43 135 56 43 131 58 43 127 60 43 122 61 42 119 62 42 120 62 42 127 57 45 122 48 39 129 56 47 131 63 52 117 53 43 113 53 42 124 66 54 125 67 55 127 69 58 129 71 60 131 73 62 132 74 63 133 74 66 135 76 68 138 79 71 137 85 74 130 94 78 129 102 81 134 109 89 135 114 93 136 121 98 137 131 105 141 144 117 141 154 124 138 159 126 136 163 130 136 167 133 137 168 134 135 166 132 132 162 128 129 156 125 127 151 119 125 144 112 125 142 108 123 140 108 120 139 107 120 139 109 117 136 108 112 131 103 108 126 100 99 113 88 92 104 82 83 90 72 73 75 61 66 64 52 61 54 44 57 47 38 55 42 36 57 39 39 57 37 39 54 38 39 52 38 38 49 39 38 46 40 40 44 43 41 44 44 42 41 43 40 41 43 42 41 43 42 41 43 42 42 42 44 42 42 44 43 41 44 45 41 42 44 35 36 50 42 39 53 48 42 56 54 42 66 67 53 85 90 70 102 112 87 110 125 94 116 136 101 113 138 98 117 144 101 120 152 105 119 155 107 115 153 104 116 154 105 119 159 107 122 162 110 120 160 108 119 159 109 120 160 110 121 163 115 123 165 117 123 165 119 124 163 119 121 158 117 122 156 119 119 150 116 115 142 111 109 134 104 100 123 95 87 107 80 78 92 69 68 69 55 62 58 47 56 52 41 53 54 48 53 54 48 54 55 49 54 55 49 55 56 50 55 56 50 56 55 50 56 55 50 57 56 51 58 57 52 61 58 53 62 59 54 62 59 54 62 59 54 62 57 53 62 57 53 63 55 52 63 55 52 62 54 51 61 53 50 59 54 51 58 53 50 57 52 49 57 52 49 56 52 49 56 52 51 57 53 52 56 52 51 55 51 50 52 51 49 53 49 50 52 48 47 54 45 48 54 45 46 54 45 48 54 45 46 52 46 46 52 46 46 52 46 46 52 47 44 52 48 45 52 48 45 52 48 45 53 49 46 51 50 45 51 50 45 52 51 46 52 51 46 52 51 47 52 51 49 53 52 50 53 52 48 56 52 49 56 53 48 57 52 48 58 53 47 61 54 48 62 55 47 64 55 46 65 56 47 67 57 48 68 58 48 71 58 49 72 59 50 70 60 51 70 60 51 70 60 51 70 60 51 69 59 50 67 57 48 66 55 49 65 54 48 64 53 49 64 53 49 63 52 48 62 51 47 62 51 49 63 52 50 64 53 51 64 53 51 65 54 50 68 53 50 75 50 53 81 49 54 86 46 54 85 45 53 82 47 53 75 49 50 68 53 50 63 56 48 61 57 45 63 57 43 67 55 41 73 54 40 83 50 41 88 50 41 93 50 43 100 51 44 108 53 48 118 54 52 125 55 55 130 56 55 131 55 55 130 54 54 126 55 53 125 58 52 125 60 54 125 62 53 128 63 57 131 64 56 134 63 57 133 65 56 131 65 51 131 65 49 132 65 49 132 63 48 136 60 47 136 58 46 137 57 46 138 56 45 135 55 44 134 56 44 131 57 44 128 59 44 126 60 44 124 61 44 121 62 44 126 60 44 133 53 42 138 51 44 160 77 69 166 89 81 138 65 56 124 57 48 130 70 59 128 75 61 123 71 58 122 74 60 124 76 62 125 77 63 127 77 66 130 80 69 137 85 74 134 92 76 119 105 79 117 112 82 130 114 88 141 117 93 150 117 98 159 124 105 166 135 115 167 145 122 157 147 122 150 153 124 146 160 127 143 165 129 139 165 130 134 161 126 130 156 121 131 150 118 134 143 112 136 141 111 134 140 112 131 142 112 129 142 112 126 141 112 122 138 109 118 134 107 109 125 98 104 116 92 96 104 83 87 90 71 80 77 62 72 64 51 66 54 42 64 47 39 61 43 39 60 42 40 56 42 39 53 42 40 50 42 39 47 44 39 44 45 39 43 45 40 43 45 40 44 45 40 45 44 42 47 43 42 51 41 42 52 40 42 54 39 42 54 40 40 51 40 36 60 51 44 69 62 52 73 71 56 81 82 64 93 98 75 103 113 86 106 121 90 110 130 93 107 132 92 108 137 93 112 145 98 113 149 101 111 149 100 111 151 101 114 154 102 117 159 109 114 156 106 113 155 105 116 158 110 120 162 114 122 164 118 121 162 118 121 159 118 118 154 116 119 153 118 117 148 114 111 141 107 106 133 102 99 124 94 85 108 79 78 92 69 67 68 54 64 57 47 58 51 41 54 55 49 55 56 50 55 56 50 55 56 50 56 57 51 56 57 51 57 56 51 58 57 52 58 57 52 59 58 53 62 59 54 63 60 55 63 60 55 63 60 55 64 59 55 64 59 55 66 58 55 66 58 55 65 57 54 64 56 53 61 56 52 61 56 52 60 55 51 60 55 51 60 55 51 60 55 52 60 55 52 60 55 52 59 54 51 57 53 50 57 51 51 56 51 48 56 47 48 57 47 46 56 47 48 56 48 46 56 48 46 56 48 46 54 49 46 54 49 45 54 49 45 54 49 45 53 50 45 53 50 45 54 51 46 54 51 46 55 52 47 55 52 47 53 52 48 53 52 48 56 52 49 57 53 50 58 54 51 60 57 52 61 56 52 64 57 51 64 55 48 65 56 47 67 57 48 68 58 48 71 58 49 72 60 48 73 61 49 73 61 49 74 61 52 74 61 52 74 61 52 73 60 51 70 60 51 68 58 49 66 56 47 65 55 46 65 56 49 64 55 48 64 55 50 63 54 49 63 54 49 64 55 50 64 55 50 65 56 51 64 54 52 65 55 53 67 56 54 70 56 55 72 57 54 74 56 54 74 56 54 72 57 52 69 56 48 69 56 47 69 57 45 70 56 43 73 57 44 73 57 42 76 57 43 82 54 42 90 47 38 100 47 39 110 51 45 122 54 51 131 57 56 137 59 57 139 59 58 139 61 59 139 65 62 135 64 58 130 61 54 127 60 51 127 58 51 130 60 52 136 61 55 138 64 55 133 63 53 132 64 51 132 62 50 134 62 50 134 60 49 133 59 48 132 58 47 131 59 47 128 58 46 127 59 46 126 60 46 127 61 47 127 61 47 128 60 47 129 59 47 135 57 47 144 49 43 160 61 56 203 108 102 216 127 121 171 91 84 138 68 60 136 76 65 127 78 64 117 73 60 114 77 61 113 80 63 114 81 64 118 83 64 124 85 68 132 90 74 128 100 79 113 113 79 116 120 85 138 118 91 156 115 95 173 109 99 186 107 102 194 111 107 195 116 111 191 128 119 183 137 122 173 148 126 163 156 128 154 159 129 145 159 126 139 154 121 137 151 118 140 143 114 142 142 114 139 144 114 135 146 114 132 147 114 128 147 115 122 146 112 119 144 112 112 137 105 107 130 101 103 119 92 94 107 81 88 93 71 80 79 59 72 67 48 67 58 43 65 50 43 64 49 44 59 48 42 56 47 42 52 47 41 50 47 40 46 47 39 46 47 41 48 47 42 51 46 42 54 44 43 58 42 43 62 40 43 65 38 43 69 36 43 67 38 40 70 53 45 76 67 52 86 81 62 91 89 68 96 98 74 103 109 81 105 119 86 106 123 87 108 130 91 103 130 87 102 134 87 108 142 92 111 148 97 110 148 97 110 150 98 114 154 102 115 157 107 111 155 106 111 153 105 114 156 110 119 160 116 121 162 120 120 158 119 117 155 118 115 151 115 117 151 118 115 146 114 110 139 108 105 132 99 98 123 91 84 109 77 77 93 67 72 73 59 69 60 51 63 54 45 55 56 50 55 56 50 56 57 51 56 57 51 56 57 51 57 58 52 58 57 52 58 57 52 59 58 53 60 59 54 63 60 55 64 61 56 64 61 56 64 61 56 65 60 56 65 60 56 67 59 56 67 59 56 67 59 56 66 58 55 63 58 54 62 57 53 62 57 53 61 56 52 62 57 53 62 57 53 62 57 53 62 57 53 61 56 53 60 55 51 58 53 49 59 51 48 58 48 46 58 48 46 57 49 46 57 49 46 57 49 47 57 49 46 57 49 46 55 50 46 54 49 45 54 49 45 54 51 46 54 51 46 54 51 46 55 52 47 55 52 47 55 52 47 53 52 48 54 53 49 57 53 50 59 56 51 60 57 52 63 58 52 66 59 53 66 59 51 65 56 47 66 58 47 67 57 47 69 59 47 72 60 48 73 61 49 74 62 50 74 62 50 75 62 53 75 62 53 74 61 52 74 61 52 70 60 51 69 59 50 67 57 48 66 56 47 66 57 50 66 57 50 65 56 51 64 55 50 64 55 50 65 56 51 66 57 52 66 57 52 63 56 50 64 57 51 66 59 53 69 60 55 71 60 54 73 60 54 77 60 53 78 59 52 77 54 46 78 54 44 81 54 43 81 54 43 81 55 42 82 56 43 80 57 41 86 54 39 103 53 42 114 54 44 126 59 51 137 64 57 149 68 64 155 72 68 159 74 71 159 76 70 160 81 74 153 76 68 142 68 59 133 59 48 132 55 45 133 55 45 140 57 49 143 60 52 139 60 53 138 61 55 137 60 54 136 59 53 136 59 53 132 59 52 128 60 51 125 61 51 122 62 51 122 62 51 122 62 51 125 61 51 129 59 51 134 57 51 139 54 51 146 51 49 150 41 38 176 63 59 234 125 122 252 150 146 195 104 99 149 72 64 137 75 64 120 72 58 112 76 60 106 81 61 104 83 62 106 86 62 111 86 64 118 90 69 128 95 76 130 102 80 124 113 81 134 118 85 160 115 92 183 107 94 203 95 95 214 84 92 218 81 91 218 82 92 230 111 117 219 121 120 207 133 124 195 142 126 184 147 128 174 148 125 165 145 120 162 142 118 159 137 114 159 137 116 156 140 117 152 142 117 148 144 117 141 144 115 137 143 115 133 144 114 127 137 110 124 133 106 119 121 97 112 110 87 105 97 78 98 82 66 87 68 53 83 59 47 79 52 45 77 49 45 73 48 44 68 47 42 64 47 40 59 46 38 55 46 39 54 47 39 57 48 41 58 47 41 61 46 43 65 44 43 70 41 43 72 40 43 75 39 43 72 41 39 84 66 52 89 81 60 100 94 70 103 101 76 105 108 79 110 117 86 109 123 88 108 126 88 107 132 90 103 132 86 103 135 86 109 143 93 112 149 98 113 150 98 114 153 100 117 157 105 116 155 108 111 153 107 111 150 106 114 153 109 119 157 118 121 159 120 119 154 121 116 150 117 115 148 117 117 148 117 115 144 113 111 138 107 105 132 101 97 124 91 84 109 77 77 93 66 78 79 63 76 67 58 69 60 51 57 58 52 57 58 52 57 58 52 57 58 52 57 58 52 58 59 53 61 60 55 61 60 55 61 60 55 61 60 55 64 61 56 64 61 56 65 62 57 66 63 58 68 63 59 68 63 59 69 64 60 69 64 60 69 64 58 68 63 57 68 63 57 67 62 56 69 62 56 68 61 55 66 59 53 66 59 53 66 59 53 66 59 53 66 58 55 66 59 53 65 58 52 65 58 52 65 56 51 65 56 51 65 56 51 64 55 50 64 54 52 62 55 49 62 55 49 62 55 49 60 55 49 60 55 49 59 54 48 58 53 47 56 53 46 56 53 46 55 52 47 55 52 47 57 54 49 57 54 49 57 54 49 58 55 48 60 55 49 61 56 50 65 58 50 66 59 49 67 58 49 68 60 49 70 60 50 74 62 50 75 63 51 76 64 50 78 64 51 78 64 53 78 64 55 78 64 55 76 63 54 75 62 53 73 60 51 72 59 50 69 59 50 69 59 50 66 57 48 65 56 47 64 57 49 63 56 48 63 56 48 63 56 48 64 57 51 64 57 51 60 53 47 77 68 61 77 64 58 75 58 51 84 64 57 82 54 50 81 48 43 95 60 54 91 52 45 94 54 46 95 52 43 92 48 39 94 47 37 101 54 44 109 61 49 114 60 48 137 73 61 143 71 59 151 73 63 159 75 65 159 70 62 155 62 55 154 61 54 158 68 59 166 78 68 164 80 69 168 86 74 171 89 75 165 79 66 153 65 53 151 59 48 156 62 54 148 57 56 146 56 56 143 53 53 137 51 50 136 55 52 135 62 56 127 63 54 117 60 49 117 65 52 115 63 50 116 59 48 121 57 48 133 54 50 142 50 51 149 44 49 155 38 44 198 72 73 229 99 97 194 70 68 202 89 85 224 122 118 171 86 79 134 70 60 132 86 70 109 82 61 105 91 65 105 98 70 107 100 72 107 95 69 111 94 68 125 99 76 141 106 84 145 99 76 177 110 93 208 111 104 218 89 93 222 59 76 229 45 69 241 44 72 243 49 76 243 65 89 233 74 92 227 91 101 226 111 114 224 124 124 218 129 125 216 133 127 215 138 130 196 126 118 192 128 119 189 131 120 185 133 120 181 135 120 175 136 119 171 138 121 167 138 120 157 128 112 157 125 110 154 121 106 150 110 98 145 98 90 135 85 78 127 72 67 123 65 63 117 58 60 103 47 50 100 48 50 97 49 49 79 39 39 71 37 35 76 48 45 77 53 49 72 51 46 69 50 44 68 49 45 70 49 46 70 46 44 71 43 42 75 45 45 81 54 47 89 72 52 96 87 58 102 95 66 103 100 69 107 111 78 117 124 90 117 132 93 111 129 89 108 131 87 108 135 90 112 141 93 114 146 97 115 149 98 117 151 100 119 153 102 118 155 104 114 150 106 115 152 111 115 151 113 113 149 111 115 149 116 119 153 120 122 152 124 121 150 122 120 149 121 115 141 114 109 135 106 107 132 102 105 130 100 97 122 90 84 109 77 79 95 68 79 80 64 84 75 66 82 73 64 57 58 52 57 58 52 57 58 52 57 58 52 58 59 53 59 60 54 62 61 56 63 62 57 62 61 56 62 61 56 65 62 57 65 62 57 66 63 58 67 64 59 68 63 59 68 63 59 70 65 61 69 64 60 69 64 58 69 64 58 68 63 57 68 63 57 69 62 56 69 62 56 69 62 56 69 62 56 69 62 56 68 61 53 67 60 54 67 60 52 68 59 52 67 58 49 66 57 50 66 57 50 66 57 50 66 57 50 65 56 51 65 56 51 64 57 51 64 57 51 62 55 49 60 55 49 59 54 48 59 54 48 57 54 47 56 53 46 55 52 47 55 52 47 57 54 49 57 54 47 57 54 47 58 55 48 60 55 49 62 58 49 65 58 48 66 60 48 67 59 48 69 59 47 73 61 49 74 62 48 76 64 50 76 64 50 78 64 51 78 64 51 78 64 53 78 64 55 77 63 54 74 61 52 73 60 51 72 59 50 69 59 50 69 59 50 67 58 49 66 57 48 64 57 49 64 57 49 64 57 49 64 57 49 65 58 52 65 58 50 67 58 51 73 56 49 75 47 43 86 46 44 106 55 54 116 58 57 123 59 59 133 69 67 129 68 63 131 72 64 132 73 65 132 72 62 141 74 66 152 79 72 161 80 76 162 79 71 147 68 55 148 66 52 154 66 54 159 67 56 160 62 51 156 55 45 156 55 45 159 61 48 163 67 53 155 63 48 153 64 48 160 69 51 164 71 54 167 70 54 174 72 58 182 78 69 181 75 77 176 71 76 167 64 68 155 56 59 147 55 56 142 61 58 133 62 56 121 61 51 114 60 48 124 72 59 135 75 65 133 62 56 133 43 43 149 40 46 181 57 68 211 75 87 219 76 78 221 79 77 199 64 61 190 65 63 208 96 92 179 89 81 132 64 53 130 84 68 121 97 73 101 91 64 96 92 63 107 104 73 117 108 79 119 102 74 127 99 75 150 99 78 185 102 88 210 97 91 224 88 90 231 67 78 238 46 69 249 39 68 255 40 72 255 42 73 255 48 78 243 53 78 236 63 82 234 76 90 230 82 94 224 84 93 222 85 93 221 90 98 219 98 105 216 101 108 214 105 110 213 108 113 208 112 114 206 116 116 204 118 119 201 120 119 204 124 125 203 121 123 203 118 121 202 113 117 202 107 115 201 101 111 199 97 108 197 95 108 195 97 110 177 84 95 163 76 85 153 72 81 141 68 75 132 70 73 107 55 57 72 28 27 84 49 45 77 48 42 72 49 43 74 54 47 75 56 49 75 58 50 79 62 54 85 69 56 91 79 53 99 90 57 103 97 65 105 102 69 110 114 79 122 130 93 122 137 98 116 134 94 114 137 95 112 137 95 112 139 96 113 142 96 117 146 100 119 148 100 119 148 100 119 148 102 115 146 105 120 150 114 122 151 120 121 150 120 126 152 125 131 157 132 133 157 135 131 155 133 129 153 131 122 146 122 114 137 111 109 132 104 104 129 100 96 121 91 84 109 77 78 97 69 82 83 67 86 80 68 86 79 69 56 57 51 56 57 51 56 57 51 57 58 52 59 60 54 60 61 55 63 62 57 64 63 58 64 63 58 64 63 58 67 64 59 67 64 59 67 64 59 67 64 59 68 63 59 68 63 59 70 65 59 70 65 59 70 65 59 69 64 58 69 64 58 69 64 58 71 64 56 70 63 55 74 65 58 73 64 57 72 63 56 71 62 53 70 61 54 69 60 51 70 60 51 69 59 49 68 58 49 68 58 49 68 58 49 68 58 49 68 59 52 68 59 52 68 59 52 67 60 52 63 56 48 63 56 48 60 55 49 59 54 48 58 53 47 58 53 47 57 52 46 57 52 46 57 54 47 57 54 47 58 53 47 59 55 46 62 55 47 64 57 47 66 57 48 67 59 48 69 59 49 70 60 48 73 61 49 75 63 49 77 63 50 77 64 48 78 65 49 77 64 48 80 63 53 77 63 52 76 62 51 75 61 50 73 60 51 72 59 50 69 59 49 68 58 48 67 58 49 67 58 49 65 58 48 65 58 48 63 59 50 64 60 51 64 60 51 68 59 52 83 69 60 82 51 46 105 51 51 142 65 71 173 76 87 193 86 96 203 93 102 196 96 98 154 66 62 150 73 63 149 77 65 155 79 66 171 82 74 190 85 82 203 80 83 196 76 75 163 65 52 157 66 48 160 64 48 165 63 49 165 59 46 163 55 43 164 56 43 167 61 47 171 69 54 161 62 43 152 55 36 157 58 39 165 62 45 172 65 47 178 67 50 184 67 58 167 48 50 177 57 66 185 68 76 190 75 82 186 77 82 173 75 76 150 65 62 130 55 49 123 56 47 118 54 44 122 49 42 133 48 45 156 51 55 186 60 71 215 70 87 232 77 91 225 71 73 206 54 51 205 60 57 187 52 49 198 79 75 198 99 93 148 74 63 140 91 74 125 99 76 106 95 67 104 99 69 117 111 79 128 111 81 130 103 74 143 103 78 177 104 89 224 100 98 239 84 90 238 71 81 239 58 73 248 52 74 255 52 78 255 50 77 254 46 72 255 53 79 245 51 75 240 53 74 239 56 76 237 55 77 233 54 75 236 54 76 239 57 80 241 65 88 239 67 91 239 70 93 237 73 97 236 77 99 234 81 101 233 84 104 232 86 107 228 84 107 229 83 106 228 80 106 228 78 105 233 78 109 238 81 112 242 83 115 244 87 118 252 105 133 237 99 124 225 93 116 210 87 108 203 90 108 199 101 114 166 83 93 114 45 50 93 39 39 88 49 44 87 58 52 81 63 53 66 58 45 58 56 41 63 66 49 76 78 57 86 79 51 97 86 54 101 95 63 104 101 68 113 117 84 127 134 101 126 140 105 119 136 100 120 140 105 117 139 101 114 139 100 114 139 99 118 140 101 121 143 104 122 144 105 122 144 106 128 149 118 132 155 126 138 158 133 141 160 138 146 163 144 151 168 150 152 169 153 150 166 153 145 162 146 135 152 134 122 141 121 112 131 109 103 126 98 94 119 89 84 109 77 80 99 71 82 87 67 88 85 70 89 85 73 55 56 50 55 56 50 56 57 51 57 58 52 59 60 54 61 62 56 64 63 58 65 64 59 66 65 60 66 65 60 68 65 60 68 65 60 68 65 60 68 65 60 69 64 60 69 64 60 71 66 60 71 66 60 71 66 60 70 65 59 70 65 59 70 66 57 72 65 57 72 65 57 76 67 60 75 66 57 74 65 56 73 64 55 72 62 53 71 61 51 70 60 50 69 59 49 68 58 48 68 58 48 69 59 49 69 59 50 68 59 50 69 60 51 69 60 53 69 60 53 64 57 49 63 56 48 61 56 50 60 55 49 59 54 48 58 53 47 58 53 47 58 53 47 57 54 47 57 54 45 59 55 46 59 55 44 63 56 46 64 58 46 67 59 48 68 60 47 70 60 48 70 61 46 74 62 48 75 63 47 77 64 48 77 64 48 77 64 47 77 64 48 79 63 50 79 62 52 76 62 51 75 61 50 74 60 51 71 58 49 69 59 49 68 58 48 68 59 50 68 59 50 66 59 49 64 60 49 64 60 51 65 61 52 66 62 53 70 60 51 81 56 49 88 43 38 135 59 63 189 85 96 216 85 101 228 86 102 226 86 99 201 75 79 157 52 48 148 58 47 144 62 48 152 66 51 173 70 61 196 74 71 212 67 72 203 63 64 177 66 55 167 70 53 169 66 51 172 64 51 175 63 51 176 62 51 179 66 52 180 68 54 178 71 53 169 66 47 163 60 41 164 59 40 169 60 40 171 58 40 174 54 38 173 51 40 182 57 55 186 57 61 187 56 62 186 55 60 190 61 66 197 74 76 196 84 83 190 88 83 153 63 55 139 52 42 135 45 37 157 54 49 195 72 75 219 80 87 224 66 81 218 52 64 221 59 57 204 47 42 209 57 52 198 56 52 197 70 64 200 93 85 167 88 75 144 87 70 119 87 64 120 100 73 126 112 83 130 111 81 133 102 74 145 99 75 172 109 91 213 117 105 234 85 87 246 70 80 242 62 74 242 60 73 249 64 78 253 67 81 249 61 76 243 55 72 253 66 83 248 60 77 244 55 75 246 54 75 248 52 74 249 50 73 255 51 78 255 56 83 255 51 84 252 53 86 252 54 87 249 56 87 247 58 90 248 61 92 246 63 94 245 64 97 247 67 102 245 67 103 244 64 101 245 63 103 247 65 105 252 67 109 255 71 115 255 74 115 255 81 117 253 84 117 250 87 118 239 85 113 228 86 110 226 99 120 213 102 118 180 89 98 124 49 53 104 48 47 88 49 42 80 56 44 71 62 47 63 64 46 59 68 47 65 70 47 81 74 46 95 84 56 103 96 67 111 107 78 124 124 96 136 142 114 135 145 118 125 139 113 122 141 113 124 143 115 124 143 115 122 141 111 122 138 109 125 140 111 131 146 117 136 151 122 149 163 138 156 169 149 163 174 157 166 177 161 172 180 167 177 185 174 176 183 176 171 181 173 161 171 162 148 160 148 131 145 130 115 132 113 104 124 99 93 116 88 83 108 78 80 100 72 80 88 67 86 87 69 87 88 72 54 55 49 54 55 49 55 56 50 56 57 51 58 59 53 60 61 55 63 62 57 64 63 58 66 65 60 66 65 60 68 65 60 68 65 60 68 65 60 69 66 61 70 65 61 70 65 61 70 67 60 70 67 60 71 66 60 72 67 61 72 68 59 72 68 59 74 67 59 74 67 57 76 67 58 75 66 57 75 65 56 74 64 54 74 61 52 73 61 49 72 60 48 71 59 47 69 59 47 69 59 47 69 59 47 69 59 49 69 59 49 69 59 49 68 59 50 68 59 50 64 57 47 64 57 47 64 57 49 63 56 48 60 55 49 59 54 48 59 54 48 58 53 47 59 55 46 59 55 46 59 55 46 60 56 45 63 56 46 65 59 47 67 59 48 68 60 47 71 61 49 71 62 47 75 63 49 77 64 48 77 64 48 78 65 48 79 63 47 79 63 48 79 63 50 78 61 51 78 61 51 74 60 49 73 59 48 71 59 47 68 58 48 68 58 48 68 60 49 68 60 49 66 59 49 64 60 49 65 61 50 65 63 51 66 63 54 75 61 52 91 54 46 116 52 50 172 77 83 218 94 105 229 78 95 226 65 81 213 55 69 182 39 43 167 50 41 156 56 40 145 58 38 149 61 41 171 65 51 193 69 61 211 63 63 204 60 59 177 63 53 168 66 52 170 64 50 173 63 50 178 64 53 184 67 57 188 72 59 187 74 60 172 62 47 170 63 47 168 61 43 166 59 41 170 57 41 176 58 44 183 59 47 187 61 49 200 71 65 204 69 65 206 64 63 205 57 57 211 56 60 220 67 69 223 77 78 218 83 79 193 68 62 195 77 67 203 84 76 209 85 77 215 75 74 218 64 66 223 53 62 224 51 55 217 52 46 215 57 46 205 51 43 206 59 52 190 57 52 178 65 57 181 91 80 150 85 67 123 78 57 130 98 73 136 106 80 133 96 70 147 90 70 176 100 84 206 112 100 232 109 104 231 70 75 237 60 68 230 59 67 227 62 68 227 68 72 227 73 75 228 74 76 229 73 77 240 76 83 239 68 77 239 58 73 242 55 72 245 52 71 248 49 70 254 52 76 255 58 82 255 57 86 253 58 88 252 59 88 250 59 90 251 60 93 252 63 95 253 65 98 252 67 101 253 69 105 251 69 107 250 68 108 250 68 109 250 67 111 249 68 111 249 68 113 250 67 111 255 72 112 255 66 104 255 74 109 253 79 112 238 75 104 230 80 107 226 93 114 216 99 115 186 91 99 140 64 68 96 38 36 81 43 34 86 64 51 86 79 61 74 76 55 65 67 45 82 74 51 101 89 67 117 106 86 128 123 103 142 141 121 153 156 139 149 156 140 136 147 131 130 142 128 137 151 136 143 155 141 140 153 136 135 146 130 138 147 130 151 158 142 164 168 153 178 182 167 184 188 174 191 193 182 192 193 185 194 195 189 197 198 193 195 195 195 190 190 190 176 181 177 162 169 162 141 151 140 121 135 118 105 123 101 92 115 89 84 109 79 82 102 74 80 90 66 84 89 67 86 91 71 53 54 48 53 54 48 54 55 49 55 56 50 56 57 51 58 59 53 61 60 55 62 61 56 64 63 58 64 63 58 67 64 59 68 65 60 69 66 61 69 66 61 71 66 62 71 66 62 71 68 61 71 68 61 72 67 61 73 68 62 73 69 60 73 69 60 75 68 58 76 69 59 76 67 58 75 67 56 76 66 56 75 65 53 76 64 52 75 63 51 74 62 50 73 61 49 71 61 49 71 61 49 70 60 48 70 60 48 69 59 49 69 59 49 68 59 50 67 58 49 65 58 48 65 58 48 64 57 49 64 57 49 61 56 50 60 55 49 59 54 48 59 54 48 59 55 46 59 55 46 59 55 44 60 56 45 63 57 45 65 59 47 68 60 47 69 61 48 72 63 48 74 62 48 76 63 47 77 64 48 78 65 48 78 65 48 79 63 47 79 63 47 79 63 50 78 61 51 77 60 50 76 59 49 73 59 48 71 59 47 70 57 48 67 57 47 67 59 48 66 60 48 66 59 49 64 60 49 64 62 50 65 63 51 66 63 54 78 59 52 106 57 52 149 71 69 195 90 95 218 88 98 220 68 81 219 57 70 209 52 59 188 44 43 172 50 39 159 56 37 150 58 33 148 58 32 161 61 38 179 64 46 193 59 50 189 56 49 167 55 44 162 58 45 165 57 45 167 55 44 175 58 49 184 66 56 186 69 59 183 69 58 174 62 50 173 63 48 167 60 44 164 54 39 170 54 41 182 62 48 195 68 59 202 71 61 188 58 45 203 65 54 221 70 63 232 68 66 239 63 65 239 59 62 231 52 55 218 48 48 216 57 53 222 73 66 229 85 76 224 80 71 216 63 57 214 50 48 224 48 50 231 55 55 216 49 40 221 61 47 202 46 34 205 56 49 189 52 44 174 55 47 200 104 92 184 108 92 142 87 67 135 90 67 132 86 63 139 81 61 170 91 76 209 106 97 226 103 98 229 83 84 240 69 75 239 62 70 226 60 64 216 62 62 209 66 62 209 72 66 219 80 77 233 87 87 235 79 82 238 68 77 239 59 71 245 54 70 246 50 70 246 47 68 249 50 71 253 55 78 251 57 83 248 58 84 248 58 86 249 59 87 254 61 92 255 63 97 255 67 101 255 68 107 251 60 101 251 62 104 250 63 106 247 64 108 247 64 110 244 62 110 241 61 108 241 60 105 255 74 114 251 61 97 251 66 100 255 78 110 251 77 110 243 80 109 236 86 111 224 91 110 231 114 130 194 97 106 150 74 76 116 58 56 93 53 45 82 56 43 82 66 50 87 76 58 94 81 65 114 101 85 136 124 110 149 141 130 159 157 145 166 167 159 161 166 159 150 156 152 149 158 155 158 167 164 166 175 172 166 172 168 162 167 163 166 168 163 181 180 176 194 193 188 204 201 192 209 206 197 213 208 204 213 208 205 212 206 206 213 207 209 209 203 207 203 198 202 191 189 192 176 178 175 152 159 152 128 140 126 109 126 107 96 116 91 87 110 82 86 106 78 83 95 71 86 96 72 87 95 72 53 54 48 53 54 48 53 54 48 53 54 48 54 55 49 56 57 51 58 57 52 59 58 53 61 60 55 62 61 56 65 62 57 67 64 59 68 65 60 70 67 62 72 67 63 72 67 63 71 68 61 72 69 62 73 68 62 73 68 62 74 70 61 74 70 61 77 70 60 77 70 60 77 69 58 76 68 57 77 67 57 77 67 55 78 66 54 77 65 51 78 64 51 77 65 51 74 65 50 74 65 50 73 64 49 72 63 48 71 61 49 70 60 48 68 60 49 68 60 49 67 58 49 67 58 49 65 58 50 64 57 49 63 56 50 63 56 50 60 55 49 60 55 49 60 56 47 60 56 45 60 56 45 60 56 45 64 58 46 65 59 47 68 60 47 69 61 48 72 63 48 75 63 49 77 64 48 78 65 48 80 64 48 80 64 48 79 64 45 79 63 47 79 61 49 79 61 49 77 61 48 76 60 47 73 59 48 70 58 46 69 56 47 67 57 47 66 58 47 65 59 47 65 58 48 63 59 48 63 61 49 64 62 50 64 64 52 78 58 49 111 50 47 165 75 75 190 84 86 186 63 68 188 49 54 193 48 51 191 49 47 183 50 41 167 50 33 162 57 35 155 61 33 150 61 31 152 61 32 158 63 35 164 59 37 162 55 37 158 54 41 160 56 45 162 54 44 165 52 44 173 56 49 183 64 58 184 67 60 178 64 54 177 66 55 173 65 52 168 60 47 166 56 43 175 58 48 188 67 56 195 68 61 196 65 55 193 64 45 203 64 45 213 55 43 221 44 38 232 36 37 245 39 43 253 44 49 252 49 52 233 44 42 227 48 43 220 53 44 217 55 44 220 53 44 223 52 44 229 50 45 228 51 43 215 52 37 212 55 38 207 51 38 206 55 44 196 55 46 187 63 55 199 97 85 210 127 113 166 101 83 143 86 66 139 76 58 164 86 73 203 100 91 224 99 95 232 82 84 233 66 73 246 69 77 238 63 68 225 62 63 213 64 60 202 63 56 200 63 55 211 69 65 229 77 76 240 74 78 245 63 75 251 56 72 255 54 72 254 53 72 249 50 69 249 54 71 250 59 77 247 58 80 246 58 82 246 56 82 249 56 85 251 56 88 254 59 93 255 61 97 255 63 103 255 64 106 255 64 108 255 65 112 255 67 115 251 68 116 249 67 116 247 67 115 244 67 111 251 73 109 245 68 97 249 72 101 252 77 106 250 77 107 255 88 116 255 97 122 242 94 116 240 107 126 229 113 126 211 111 119 175 93 97 132 67 65 104 54 47 105 65 55 115 85 74 121 101 92 140 125 118 163 150 144 173 163 161 178 174 171 182 182 182 178 182 185 170 175 179 176 183 189 182 189 197 189 193 202 192 195 202 195 194 202 201 198 205 213 206 214 221 215 219 226 218 216 231 221 219 233 221 221 230 218 220 229 216 223 228 215 224 224 212 222 217 207 216 202 197 203 186 186 186 162 167 163 136 146 135 116 130 113 101 120 98 92 115 87 91 111 83 92 106 80 92 105 79 94 104 79 53 54 49 53 54 49 53 54 49 53 54 48 53 54 49 54 55 49 56 55 50 57 56 51 60 59 54 61 60 55 64 61 56 66 63 58 68 65 60 70 67 60 71 68 61 72 69 62 72 69 62 72 69 62 72 69 60 74 70 61 74 70 59 75 71 59 75 71 59 78 72 58 77 71 59 77 71 59 77 69 58 77 68 59 77 68 59 77 68 61 78 67 63 78 67 61 77 67 55 77 68 53 75 66 51 74 65 50 72 62 50 71 61 49 69 61 50 68 59 50 67 58 49 67 58 51 65 58 50 65 58 52 64 57 51 63 55 52 60 55 51 60 55 49 62 55 47 62 55 47 60 56 47 61 57 48 62 58 49 65 58 50 67 60 50 68 61 51 72 64 53 73 63 51 76 64 50 77 65 49 78 65 48 80 64 48 79 64 45 79 63 47 76 62 49 76 62 51 75 61 50 76 59 51 74 57 49 73 56 49 70 55 48 67 56 50 65 56 47 62 58 47 61 59 47 60 61 47 63 61 48 64 62 47 66 63 48 83 57 44 134 61 55 193 93 91 200 90 89 174 56 54 170 47 42 177 50 43 171 47 37 171 51 35 170 58 38 171 67 42 169 71 44 163 70 39 160 66 38 161 66 38 161 61 35 158 58 35 160 57 42 163 59 48 166 58 48 166 55 46 173 60 52 182 67 60 183 69 59 176 64 53 171 61 48 168 60 47 169 59 46 172 60 48 187 69 57 198 76 65 197 69 60 188 56 44 188 55 36 201 60 40 218 61 46 227 53 44 238 44 42 246 42 43 249 40 43 247 39 39 246 44 42 241 48 43 236 52 44 232 54 44 227 53 42 226 52 41 225 51 40 222 52 37 222 59 42 207 50 31 219 63 48 205 55 41 199 57 45 194 63 53 179 65 54 209 108 96 191 103 89 165 82 66 170 78 65 205 98 90 232 103 98 231 81 82 235 64 70 246 65 74 237 60 68 227 58 61 215 59 60 207 62 57 195 61 52 185 54 44 187 52 46 199 56 52 229 71 72 234 63 69 242 58 68 249 57 72 252 57 73 250 55 71 250 58 73 251 63 78 252 67 85 251 65 86 250 63 84 249 59 84 251 58 85 253 58 90 255 59 94 255 60 99 255 64 104 255 63 107 255 63 110 251 63 111 247 64 112 245 65 113 245 64 115 243 66 112 244 68 106 252 79 109 255 86 115 243 76 104 231 66 96 249 86 115 255 105 133 255 102 130 246 94 119 238 96 120 231 104 123 220 112 125 199 112 120 170 102 103 143 92 88 126 89 81 153 126 119 171 152 146 190 176 173 197 187 186 198 194 195 200 199 204 199 199 207 195 195 207 203 202 216 204 202 216 209 202 218 215 206 223 221 213 228 230 219 233 232 224 235 237 227 235 239 229 230 242 232 230 244 232 232 240 228 230 238 225 232 237 224 233 234 221 231 228 216 226 209 202 209 193 191 194 171 171 169 145 150 143 122 134 120 108 123 104 98 117 95 96 114 90 100 114 89 100 112 88 100 110 86 50 49 47 51 50 48 52 51 49 54 53 49 56 55 53 57 56 52 57 56 52 57 56 52 59 58 53 60 59 54 61 61 53 63 63 55 65 65 57 67 67 57 69 69 59 69 69 59 72 72 64 72 72 62 72 72 60 74 72 59 75 74 56 76 75 55 77 76 56 78 75 56 77 74 57 74 70 58 71 68 59 74 70 67 78 73 77 78 73 80 71 68 79 68 63 69 78 69 62 76 67 52 74 64 52 75 65 53 77 67 57 76 66 56 70 61 52 66 57 48 69 60 53 67 58 53 64 57 51 63 55 52 64 56 53 63 55 53 60 55 52 60 52 50 67 58 53 66 57 52 65 57 54 62 57 53 63 58 55 62 58 55 63 59 56 64 60 57 66 63 58 68 64 55 71 64 54 74 64 52 76 64 48 79 64 45 79 64 43 76 63 44 70 64 50 69 62 52 72 59 51 74 56 52 75 54 53 77 52 55 75 55 57 72 58 58 67 62 58 55 56 48 55 59 45 62 66 49 62 64 43 58 56 35 67 59 36 101 66 46 189 106 92 183 75 65 166 55 44 164 54 41 167 55 43 164 54 39 163 56 38 168 61 43 162 57 36 165 60 38 169 64 42 171 65 41 172 61 41 172 57 38 174 54 37 170 55 37 164 54 39 161 55 41 162 56 42 166 60 46 170 64 50 172 66 52 172 66 50 172 65 49 169 62 44 171 61 44 173 60 44 179 61 47 189 67 52 196 70 56 192 62 49 184 50 38 199 57 43 203 57 42 207 57 43 213 57 45 219 55 45 225 54 46 231 52 47 237 50 45 240 46 44 242 47 45 242 49 44 239 50 44 234 53 42 227 55 41 221 58 41 218 59 40 219 58 38 212 51 31 207 52 32 206 56 39 197 56 39 190 54 40 194 66 53 207 83 73 200 78 67 207 83 75 225 92 87 238 93 90 240 80 82 237 62 67 243 56 63 248 63 71 235 64 70 225 67 68 214 64 65 201 62 57 187 60 51 179 58 47 177 59 47 180 59 48 202 76 64 212 75 67 222 70 67 226 62 63 235 60 65 248 63 71 254 62 73 249 59 71 253 69 81 250 68 81 253 68 82 255 68 85 253 64 86 250 60 85 254 61 90 255 66 100 255 70 107 255 65 106 249 59 103 245 58 103 244 61 109 248 68 115 253 73 121 255 75 122 255 78 121 255 78 117 249 81 116 239 82 113 229 79 106 229 79 106 247 90 119 255 103 135 255 93 128 240 69 105 245 86 118 232 94 120 198 91 109 194 117 125 140 92 92 145 114 109 171 143 132 189 167 156 212 195 187 222 213 208 221 220 218 220 219 224 222 220 231 226 219 235 231 216 237 235 216 238 241 217 241 244 220 242 245 227 243 245 231 244 243 236 244 244 239 243 248 243 240 248 243 239 248 240 238 245 236 237 242 231 235 237 226 232 232 221 227 229 220 225 214 208 212 205 201 202 187 186 184 163 165 160 139 144 137 121 131 120 114 125 111 112 123 107 123 132 115 119 128 109 118 125 107 48 46 47 49 47 48 51 50 48 53 52 50 54 53 51 55 54 50 56 55 51 56 55 50 58 57 52 59 58 53 61 61 53 63 63 55 65 65 55 67 67 57 68 68 56 69 69 59 72 72 62 72 72 62 72 72 60 74 72 57 75 74 54 76 75 54 77 77 53 78 77 56 75 74 56 75 73 61 75 74 69 80 80 82 87 85 96 89 88 106 86 84 106 82 79 96 79 73 75 77 68 63 72 63 58 70 61 56 71 62 57 72 63 58 70 61 56 66 59 53 68 58 56 65 57 54 63 55 52 63 55 52 64 56 53 64 56 53 61 56 53 59 54 50 61 52 47 61 52 47 61 53 50 60 55 52 61 57 54 62 58 57 61 60 58 62 61 57 66 63 58 68 63 57 71 64 54 74 64 52 77 64 48 79 64 45 80 63 43 76 63 44 65 64 46 63 64 50 69 60 53 72 57 54 74 54 55 74 52 55 70 51 55 67 52 55 65 60 57 60 59 54 61 61 49 69 63 49 74 58 42 80 54 37 100 65 46 133 74 58 176 80 66 171 59 45 160 50 35 161 54 38 163 58 39 158 55 36 158 57 37 163 62 42 161 59 37 167 60 40 174 63 43 179 64 45 182 61 44 183 57 42 184 54 40 181 55 41 170 57 41 165 58 42 164 57 41 165 59 43 168 62 46 171 65 49 171 66 47 171 64 46 174 63 44 171 58 40 177 60 43 191 69 54 198 72 57 193 63 49 188 56 43 192 54 41 203 55 43 207 55 44 208 57 46 209 59 45 212 60 47 216 58 46 224 56 47 231 52 45 238 49 45 244 46 43 244 46 43 241 48 43 234 52 41 225 55 40 215 58 39 213 58 36 222 60 39 217 54 35 213 56 37 212 61 42 204 59 42 193 53 38 196 58 47 207 70 60 209 70 63 218 73 68 233 79 77 243 80 81 244 71 73 240 59 64 245 58 65 248 67 72 229 66 69 218 68 67 210 66 65 197 62 56 183 59 49 174 58 45 170 60 45 171 61 46 182 69 53 198 76 63 212 78 69 220 71 67 227 63 62 239 63 66 250 63 70 254 64 74 248 67 74 247 67 76 250 68 80 255 70 84 253 66 83 249 62 83 252 62 88 255 66 97 255 70 104 255 67 105 252 63 105 249 64 106 249 66 112 252 70 118 254 74 122 255 75 123 255 72 120 255 71 115 244 74 111 242 82 116 243 93 122 246 96 123 247 88 118 247 79 112 250 70 107 248 68 107 238 68 104 220 73 102 203 92 111 182 106 116 115 71 72 150 121 115 180 148 137 206 176 165 229 209 200 239 226 220 235 231 230 233 232 237 236 230 242 237 226 243 246 227 249 251 225 250 255 227 253 255 230 253 255 236 254 255 242 253 254 247 254 252 250 251 253 249 246 252 249 244 251 246 243 249 244 241 247 238 239 243 234 237 240 231 236 238 229 234 230 221 224 220 214 216 202 198 197 179 178 174 158 161 154 142 147 140 137 143 133 136 144 131 142 148 134 137 144 128 134 140 126 47 46 44 48 47 45 49 48 46 50 49 47 52 51 47 53 52 48 55 54 50 55 54 49 58 57 52 58 58 50 60 60 52 62 62 54 64 64 54 66 66 56 67 67 57 68 68 58 73 70 61 73 71 59 74 72 59 76 73 56 77 74 55 78 76 55 78 76 55 79 76 57 75 73 58 78 75 66 84 82 83 95 94 102 105 104 120 109 109 133 108 107 138 107 104 131 96 89 105 89 81 92 79 71 82 72 64 75 72 62 71 71 61 69 69 60 65 64 58 60 67 58 59 63 58 55 60 55 52 60 55 51 61 56 50 62 57 51 62 58 49 61 57 48 56 51 45 57 52 46 59 54 48 60 57 50 61 58 51 62 59 52 63 60 53 64 60 51 69 62 52 71 63 52 73 63 51 76 64 48 79 63 48 80 63 47 80 63 45 76 63 44 60 59 39 58 61 42 62 60 47 65 58 48 66 55 51 67 53 52 63 52 50 60 50 49 63 55 52 68 57 53 75 56 50 82 49 44 92 43 39 111 46 44 139 58 57 164 69 67 165 58 48 162 50 36 159 49 32 164 57 39 165 60 41 158 55 36 158 56 34 162 60 38 164 59 38 170 61 41 177 65 45 182 65 47 185 62 46 187 60 45 190 58 45 190 60 47 178 60 46 172 60 46 169 57 43 169 57 43 171 60 43 173 62 45 173 62 45 173 60 44 178 63 45 176 56 40 185 62 46 203 76 61 203 71 58 188 54 42 186 50 38 201 57 46 208 54 44 212 54 43 212 56 44 214 58 46 216 58 47 220 56 46 227 54 47 232 51 44 240 48 45 244 46 43 244 46 43 240 49 41 231 50 39 221 54 38 212 56 34 210 55 33 221 56 36 220 53 35 218 57 39 218 62 47 211 61 46 200 54 41 197 57 44 203 65 55 201 60 53 205 62 56 217 69 65 229 75 73 234 74 74 233 67 67 236 63 65 235 67 67 222 67 65 213 68 63 205 66 61 194 61 52 182 58 46 174 56 42 171 58 42 172 59 43 172 56 41 192 68 56 212 78 69 221 73 69 224 64 64 232 62 65 247 66 73 255 72 80 244 65 71 244 64 73 249 67 79 253 71 84 254 69 85 250 64 85 251 63 88 254 65 95 255 68 102 255 67 105 255 67 107 255 70 112 255 73 119 255 75 123 255 76 124 255 74 122 255 66 116 255 68 116 254 72 113 250 78 116 252 91 124 255 98 128 250 87 118 236 69 99 248 77 109 254 86 119 218 64 92 203 71 94 218 121 132 187 121 123 103 64 59 151 123 112 178 140 129 215 177 166 245 216 208 253 234 228 250 240 239 250 245 249 249 243 253 244 236 251 251 233 255 255 233 255 255 234 255 255 237 255 255 242 255 255 246 255 255 251 255 255 254 252 255 253 250 255 252 248 255 249 247 255 247 245 254 244 245 252 242 243 250 239 243 248 239 242 240 231 234 229 223 225 211 207 206 190 189 185 173 174 168 162 165 158 157 163 153 157 163 151 163 171 158 157 165 150 153 161 148 47 46 44 47 46 44 48 47 45 49 48 44 50 49 45 51 50 46 53 52 47 54 53 48 56 56 48 57 57 49 59 59 51 61 61 53 63 63 53 65 65 55 66 66 56 67 67 57 72 69 60 74 70 59 75 72 57 77 74 57 80 75 56 79 77 56 81 76 56 79 76 59 76 74 62 81 80 76 94 93 98 109 108 122 122 122 146 129 130 161 128 130 168 128 128 166 123 117 151 114 107 138 101 95 123 89 83 109 84 76 100 77 69 90 71 64 80 66 60 72 68 63 70 64 59 63 60 56 55 59 54 51 59 54 48 60 56 47 61 57 46 59 56 47 58 55 48 57 57 49 59 59 51 62 59 50 63 61 49 64 60 49 63 59 47 65 59 45 70 63 47 72 63 46 75 63 47 77 64 47 79 63 48 79 63 47 80 62 48 76 63 47 66 61 42 63 62 44 64 61 46 65 58 48 65 58 50 64 57 51 62 57 53 60 57 52 61 56 52 70 56 53 80 52 49 88 44 43 107 41 43 135 48 54 161 55 65 174 61 65 167 54 46 165 55 40 165 58 40 170 63 45 168 63 44 160 57 38 161 56 35 164 59 38 165 58 38 171 60 41 179 62 44 185 64 47 189 62 47 193 61 48 197 61 49 196 62 50 189 63 51 182 61 50 178 57 46 174 56 42 175 57 43 176 58 44 178 58 44 179 57 42 182 59 44 185 59 45 196 66 52 203 69 57 200 62 51 190 49 39 192 50 40 205 57 47 214 53 43 216 52 42 218 54 45 219 55 45 222 55 46 225 54 44 230 51 44 236 49 42 243 48 44 244 46 43 244 47 41 239 48 40 228 50 38 219 52 36 210 54 32 208 53 31 215 50 30 218 48 31 218 52 36 220 60 46 214 61 47 208 57 46 205 61 50 210 68 58 196 53 45 197 54 48 202 59 53 216 68 64 226 77 73 229 75 73 222 67 63 214 61 56 211 64 57 206 65 56 199 62 52 190 60 47 181 58 43 176 56 42 175 57 43 177 59 45 172 52 38 189 63 51 209 72 64 217 72 67 221 66 64 229 64 68 243 70 76 253 78 85 240 63 69 240 63 69 246 66 77 254 72 85 254 72 87 252 66 87 250 64 88 252 65 94 255 65 99 255 67 102 255 70 109 255 73 114 255 77 121 255 79 124 255 76 123 255 72 121 255 63 113 255 74 122 255 79 122 252 73 112 246 77 110 252 87 117 252 87 117 243 79 106 239 75 102 236 78 103 206 62 85 220 98 113 251 156 164 211 141 141 104 57 51 113 75 64 166 119 109 210 163 155 247 210 202 255 231 226 255 242 241 255 251 254 255 250 255 249 241 254 250 237 255 252 237 255 255 237 255 255 240 255 255 242 253 255 246 254 254 250 251 255 251 250 255 252 249 255 251 247 255 249 247 255 248 246 255 245 246 254 244 245 254 243 247 253 242 246 246 235 239 236 227 228 218 213 210 201 198 193 186 185 180 179 180 172 177 180 169 176 182 170 183 191 180 175 183 172 169 177 166 49 48 44 49 48 44 48 47 43 48 47 43 49 48 44 50 49 44 52 51 46 53 52 47 55 55 47 56 56 48 57 57 49 59 59 51 61 61 51 63 63 53 65 65 55 68 65 56 73 69 58 76 70 58 78 72 58 80 74 58 82 75 57 82 77 58 83 76 58 81 75 61 79 74 68 86 84 85 102 100 113 119 120 141 134 134 168 141 144 185 143 147 195 143 144 198 142 139 192 135 131 182 123 119 169 112 109 154 105 100 141 95 91 126 85 80 110 78 74 97 75 71 88 69 66 77 63 61 66 59 55 56 57 53 50 57 54 47 56 53 44 56 53 44 54 55 49 55 56 51 56 57 49 59 59 49 62 60 47 63 60 43 66 61 42 67 60 41 71 63 44 74 63 43 75 64 44 76 65 47 77 64 48 77 63 50 76 64 52 76 62 51 77 63 52 76 62 53 73 58 51 67 56 50 63 56 50 60 57 52 56 59 52 55 60 53 57 60 51 64 57 49 72 51 46 90 49 47 119 55 56 149 62 68 167 61 71 169 56 60 170 59 48 170 60 43 171 64 46 172 65 47 169 64 45 165 60 41 166 59 39 171 62 42 167 56 36 173 58 39 181 60 43 188 61 46 193 60 45 197 59 46 202 60 48 202 61 51 197 63 54 190 62 51 186 58 47 183 55 44 183 55 44 184 56 43 186 56 43 186 56 43 187 55 43 199 65 53 205 67 56 197 56 46 193 49 38 198 51 41 203 55 45 207 53 43 219 52 43 223 51 41 225 52 45 226 54 44 227 53 44 231 53 43 236 49 42 240 47 42 245 47 44 246 47 42 242 47 41 236 48 39 226 50 35 217 52 33 208 53 31 207 52 30 214 49 30 217 47 30 216 50 34 216 54 41 215 57 45 212 58 48 214 63 54 216 69 61 214 70 62 205 64 55 201 60 53 203 64 57 214 75 68 217 78 71 210 69 62 197 59 49 197 61 49 194 60 48 192 60 47 186 59 44 183 57 42 180 58 43 182 60 45 185 63 48 181 57 45 191 60 50 201 64 58 210 67 63 219 67 66 227 68 72 237 74 79 246 79 86 236 63 69 237 62 67 242 66 76 251 73 85 255 74 89 253 70 88 250 67 89 251 67 93 251 64 95 251 66 100 255 69 108 255 74 115 255 78 122 255 79 124 255 76 121 255 72 118 255 68 114 255 78 124 255 80 122 251 72 111 245 74 108 253 86 116 254 87 115 243 81 105 231 71 95 224 72 93 226 88 104 255 147 158 255 178 184 239 155 155 140 72 69 108 47 42 166 106 98 206 149 142 243 198 192 255 225 220 255 240 239 255 251 253 255 253 255 251 246 253 252 246 255 253 245 255 255 245 255 255 246 255 255 248 255 255 250 254 255 252 251 255 252 249 255 251 247 255 250 247 255 248 247 255 247 246 255 245 247 255 244 246 255 243 247 255 243 247 253 241 243 243 233 234 228 220 218 214 209 205 205 202 195 201 201 191 202 202 192 202 205 194 201 208 200 190 200 191 182 192 183 54 53 49 52 51 46 51 50 46 49 48 43 49 48 43 50 49 44 51 50 45 52 51 46 54 54 46 55 55 47 56 56 48 58 58 50 60 60 50 62 62 52 64 64 54 66 64 52 74 68 56 77 69 56 79 72 56 82 75 59 84 75 58 84 77 59 83 76 60 82 75 65 81 76 73 90 87 94 108 105 124 127 126 157 140 143 184 150 153 204 153 158 216 154 158 222 153 152 218 148 145 212 140 138 201 134 133 191 129 126 181 120 118 167 110 107 150 102 101 135 93 90 119 86 84 105 77 75 89 68 65 74 62 60 63 59 58 56 59 55 52 55 54 50 53 53 53 52 53 55 54 54 52 56 55 50 60 58 46 63 60 43 67 62 42 70 64 42 71 63 42 72 64 43 73 65 44 73 66 48 73 65 52 72 66 54 72 65 57 72 63 58 76 61 58 76 58 58 71 55 55 64 54 53 58 54 53 53 55 52 49 56 49 47 57 48 55 60 53 55 52 43 67 48 41 93 56 50 126 66 65 149 71 71 157 63 64 158 52 52 167 59 47 170 60 43 170 63 45 170 63 45 169 62 44 169 62 42 172 63 43 176 63 45 171 56 37 178 57 40 185 58 43 191 57 45 195 57 44 200 58 46 205 58 48 207 60 52 203 62 53 198 59 52 194 57 49 193 56 46 193 56 46 194 57 47 194 56 46 195 54 44 197 55 45 209 67 57 208 64 55 195 48 38 195 44 35 208 55 47 214 60 52 211 50 42 224 51 44 228 50 40 231 50 43 232 51 42 234 51 43 237 50 43 240 47 42 243 45 42 246 47 42 245 46 41 241 48 41 236 49 40 225 52 36 218 53 34 209 54 32 208 53 31 216 55 35 217 51 35 214 51 36 213 51 38 213 53 41 212 56 44 212 60 49 214 63 54 236 89 81 225 82 74 211 72 65 204 67 59 202 69 60 204 73 63 200 69 59 192 62 49 188 58 42 188 59 40 188 58 42 185 58 41 183 58 40 184 58 43 188 62 48 191 65 51 193 65 54 193 60 51 197 60 54 207 65 61 215 69 69 221 71 72 228 73 77 235 76 80 232 66 70 234 64 67 240 67 73 249 75 84 254 78 89 252 74 90 252 70 92 252 70 95 248 65 95 249 66 97 253 69 105 255 74 112 255 78 119 255 79 122 255 78 120 255 76 118 254 77 119 255 79 118 252 77 116 250 79 115 255 87 121 255 95 123 252 85 111 233 71 94 243 86 107 231 83 99 240 100 113 255 144 154 254 137 145 236 130 134 194 95 98 165 77 76 179 104 101 206 141 137 240 187 183 255 219 215 255 238 237 255 247 247 255 250 253 251 249 254 253 250 255 252 251 255 253 250 255 255 250 255 255 250 254 255 251 252 253 252 250 255 251 248 255 251 247 255 251 248 255 250 249 255 250 249 255 247 249 255 245 247 254 242 246 252 240 242 249 237 239 242 230 230 231 221 219 223 216 210 219 215 206 221 219 207 224 222 210 223 225 214 221 228 220 207 216 211 197 206 201 60 57 52 59 56 49 56 53 48 53 50 43 52 49 42 52 49 42 53 50 43 54 51 44 55 52 45 56 53 46 57 54 47 59 56 49 61 58 49 63 60 51 65 62 53 67 63 52 74 66 55 77 67 55 80 71 56 83 74 59 87 75 59 85 76 61 85 75 63 83 74 67 83 74 75 93 87 99 110 108 130 130 130 166 145 149 197 154 160 218 159 166 234 162 169 241 161 165 239 158 160 235 153 155 229 149 152 221 148 149 214 144 145 202 137 137 189 130 131 177 122 121 161 114 113 145 102 99 126 88 86 107 80 78 92 73 71 82 70 67 76 67 66 74 63 63 75 61 61 71 59 58 64 59 57 58 60 57 52 63 59 47 67 61 45 69 64 44 70 64 42 70 65 43 69 66 47 69 67 52 67 67 55 66 67 59 65 67 62 65 65 65 69 59 67 71 61 70 71 64 72 71 68 75 70 71 76 67 72 75 63 72 71 62 71 66 67 72 65 65 61 52 75 58 48 102 70 59 128 80 70 138 74 64 140 63 53 146 56 45 164 62 47 169 62 44 171 62 42 172 63 43 173 64 44 175 64 45 176 63 45 177 60 42 177 56 39 182 56 41 189 57 42 195 57 44 200 56 45 204 56 46 210 57 49 212 59 53 207 58 52 205 58 51 203 56 49 203 56 49 204 57 50 205 58 50 204 55 48 203 54 47 211 60 53 213 62 53 210 57 49 204 50 40 206 52 42 216 59 50 218 60 51 215 51 42 228 49 42 233 49 39 236 49 42 238 50 41 240 49 41 242 47 41 244 45 40 246 44 40 247 45 41 244 47 41 240 49 41 233 51 40 226 53 39 217 54 37 210 55 33 207 55 32 212 57 37 213 56 37 211 54 37 209 52 37 210 52 40 211 55 43 210 56 46 208 55 47 227 78 71 232 88 80 231 90 83 218 81 73 204 71 62 196 68 57 191 64 55 185 62 47 185 60 42 185 60 38 185 60 40 185 58 39 184 57 40 186 59 42 192 62 48 195 65 52 201 68 59 198 64 55 201 64 58 209 70 67 213 73 72 214 72 71 216 71 74 223 73 75 230 70 72 232 66 68 237 68 73 245 76 83 252 81 90 251 79 93 251 76 93 251 75 96 246 68 94 247 68 97 249 70 102 253 73 108 255 78 117 255 79 120 255 79 120 255 80 119 246 85 119 242 84 117 244 84 118 250 89 120 255 93 123 255 92 119 247 83 107 236 74 95 246 89 106 239 87 102 227 79 93 239 94 107 218 78 89 223 86 96 222 86 96 210 89 96 191 99 100 199 128 124 230 169 166 255 208 207 255 233 231 255 241 240 255 246 247 254 252 253 251 252 255 249 253 255 248 252 255 250 251 253 250 250 252 249 249 249 250 249 247 252 248 245 255 250 246 255 250 247 255 251 250 255 250 249 255 247 247 254 242 242 252 237 240 249 234 237 240 225 228 233 221 221 228 217 213 226 217 210 230 223 213 235 231 219 241 237 225 241 241 229 236 243 236 220 231 227 208 219 215 64 61 54 61 58 51 58 55 48 55 52 45 53 50 43 53 50 43 53 50 43 54 51 44 55 52 45 55 52 45 57 54 47 59 56 49 61 58 49 63 60 51 64 61 52 66 62 51 74 66 55 77 67 55 82 70 56 86 74 58 87 75 59 88 76 60 87 75 63 84 73 67 83 74 77 94 88 102 112 109 136 130 132 171 145 151 203 156 164 227 163 173 245 167 176 253 170 177 255 166 172 250 161 167 243 160 164 238 159 163 234 157 161 225 153 155 214 149 150 204 146 146 196 137 136 180 121 121 159 106 105 139 96 93 124 88 85 112 82 80 104 79 77 101 78 74 99 75 71 94 70 66 83 64 61 72 63 58 62 63 58 54 64 60 49 65 62 47 67 64 47 67 66 48 66 67 51 66 68 55 63 68 61 62 68 64 60 69 68 59 66 72 65 67 82 71 72 92 80 81 99 89 91 106 95 97 110 99 99 109 99 98 104 101 95 97 102 88 87 95 74 69 106 72 63 130 83 73 146 88 76 143 76 60 142 65 49 150 63 46 167 66 48 174 64 47 174 65 45 175 64 45 176 65 46 180 65 47 178 61 43 176 55 38 181 55 40 188 56 43 194 56 43 200 56 45 205 54 45 209 55 47 213 56 49 216 59 52 210 55 50 208 55 50 208 55 50 209 56 50 212 57 52 212 57 52 211 56 51 211 54 47 222 65 58 213 56 47 209 51 42 214 56 47 222 61 53 222 61 53 218 57 49 220 53 44 231 50 41 235 48 39 239 48 40 241 48 41 244 47 41 247 45 41 247 44 40 247 44 40 247 45 41 244 47 41 238 50 41 233 52 41 225 53 39 218 55 38 212 55 36 207 56 35 206 55 34 207 56 37 206 55 36 207 54 38 208 55 41 210 57 43 209 55 43 206 52 42 203 52 43 227 78 71 243 100 92 235 96 89 213 79 70 196 65 55 186 59 50 181 57 45 184 62 41 184 62 39 185 60 38 185 59 37 186 57 38 189 57 42 192 60 47 196 62 50 202 68 57 202 65 57 206 69 63 213 75 72 211 76 73 206 71 68 205 69 69 214 72 71 227 73 73 230 67 68 232 69 72 242 77 83 248 83 90 249 82 92 247 79 94 250 79 97 244 72 94 245 71 96 248 71 100 251 73 105 255 78 114 255 81 120 255 82 121 255 84 122 239 84 116 239 90 119 249 96 126 253 96 125 249 86 113 242 78 103 245 81 105 253 90 109 251 93 108 255 102 116 235 80 94 243 88 102 238 83 97 246 90 104 237 79 94 223 83 94 190 92 93 188 114 111 216 152 150 249 198 195 255 226 225 255 235 233 254 242 242 255 255 253 252 255 255 251 255 255 248 255 255 249 255 253 249 253 252 250 252 249 252 251 247 253 249 246 253 248 244 255 248 245 255 249 248 255 249 248 255 245 245 251 239 239 247 232 235 243 229 229 235 221 221 232 218 217 228 217 211 232 222 213 240 232 221 249 243 229 255 250 236 254 254 242 244 250 246 227 237 236 214 224 223 66 62 53 65 61 52 64 60 51 62 58 49 60 56 47 58 54 45 56 52 43 55 51 42 54 50 41 54 50 41 55 51 42 56 52 43 59 54 48 62 57 51 65 60 54 69 62 54 73 64 55 77 67 55 82 70 56 85 73 57 87 74 58 88 75 59 90 76 65 91 78 72 84 73 77 88 82 96 103 100 129 124 126 167 141 146 202 151 160 227 158 170 246 165 176 255 170 179 255 171 178 255 172 180 255 172 178 252 170 177 249 170 175 243 168 172 236 169 171 232 159 161 218 153 154 210 141 141 193 129 127 177 116 114 161 104 101 146 93 90 135 88 82 126 88 81 122 89 81 118 86 79 110 77 72 95 67 63 77 63 58 64 63 59 58 66 63 56 62 62 52 64 66 53 66 69 58 63 68 61 60 66 62 58 67 66 62 70 72 65 75 84 70 85 106 85 101 126 101 113 137 108 114 136 119 117 139 131 119 139 132 111 126 128 95 106 137 91 101 144 88 91 157 87 87 164 87 81 162 78 68 154 65 51 151 58 40 158 59 40 167 60 42 172 61 42 174 63 44 177 64 46 179 64 45 180 63 45 182 61 44 185 59 44 186 54 39 190 54 40 196 54 42 203 55 45 209 55 45 214 56 47 218 57 49 218 56 51 215 56 52 216 57 53 217 58 54 216 57 51 216 54 49 216 54 49 218 56 51 221 58 51 230 67 60 224 61 54 218 55 48 227 64 55 254 91 82 255 108 99 255 93 84 231 63 54 229 51 41 237 50 41 241 50 42 244 47 41 244 42 38 245 40 37 248 40 38 248 43 40 247 45 43 243 48 44 237 50 43 227 49 39 218 48 35 212 49 34 212 52 36 211 58 40 204 59 38 202 60 40 205 60 41 207 60 42 210 58 44 210 57 43 210 56 44 209 55 45 218 64 56 207 56 49 220 71 65 244 99 94 229 88 81 203 66 60 197 64 59 183 52 42 183 58 38 182 60 36 185 60 38 186 60 38 189 58 40 191 58 43 196 60 48 198 62 50 199 62 52 204 67 59 217 80 74 223 88 82 212 79 74 195 63 58 192 63 58 207 72 68 222 72 71 226 71 69 230 74 75 239 80 84 241 82 87 239 78 86 237 75 88 241 76 92 249 82 102 248 79 102 247 75 101 247 74 102 252 77 108 255 81 115 255 82 118 253 82 118 245 88 119 239 89 118 243 89 117 251 92 120 255 93 120 255 91 115 254 88 110 252 86 106 255 101 117 247 89 103 253 95 109 252 94 108 234 73 88 235 73 88 251 84 101 233 88 101 198 102 103 173 103 101 203 142 139 232 181 178 249 209 207 255 234 231 254 238 238 252 248 247 246 250 249 247 255 253 247 255 254 246 255 252 248 254 252 253 255 252 253 252 248 251 247 244 255 250 246 255 250 246 255 247 244 253 243 241 255 244 244 255 243 243 246 232 232 231 217 217 228 214 213 223 209 206 225 214 208 241 231 222 252 244 231 253 247 231 255 251 232 255 255 243 249 254 248 231 240 239 218 227 226 67 63 54 66 62 51 65 61 52 63 59 50 61 57 48 59 55 46 58 54 45 57 53 44 55 51 42 55 51 42 55 51 42 56 52 43 58 53 47 61 56 50 64 59 53 68 61 53 72 63 54 76 66 54 81 69 55 84 72 56 86 73 56 87 74 57 89 75 62 90 77 69 85 74 78 87 81 95 101 98 127 121 123 164 138 143 201 148 157 226 155 166 245 163 174 254 171 180 255 172 181 255 174 182 255 175 183 255 176 183 255 175 182 252 175 180 248 175 178 245 169 170 235 162 163 227 152 152 216 140 138 201 128 127 187 117 113 174 105 101 160 99 94 152 96 87 142 96 86 136 93 84 127 86 80 116 77 73 98 70 67 84 66 65 73 65 65 67 60 60 58 65 66 61 70 69 65 67 68 63 65 63 64 68 66 69 79 77 82 88 86 99 102 103 131 116 116 150 130 125 157 138 125 155 149 124 154 160 124 150 165 113 136 164 96 117 172 89 107 180 87 98 185 81 88 181 73 71 173 64 57 168 60 47 168 61 41 169 63 41 167 56 37 168 55 37 171 56 38 174 57 40 176 56 39 178 57 40 181 55 40 184 54 40 187 51 37 194 52 40 202 55 45 211 58 50 217 60 51 222 61 53 223 60 53 223 60 53 225 62 57 223 60 55 223 60 55 225 62 57 229 66 61 232 67 61 231 66 60 230 65 59 229 64 58 230 66 57 228 64 55 220 56 47 213 49 40 216 54 43 235 73 62 255 91 79 241 64 54 238 54 44 234 43 35 238 41 35 248 45 41 255 47 45 254 44 43 246 40 40 250 48 46 245 52 47 239 54 49 231 54 46 222 51 41 214 50 38 212 50 37 207 54 38 203 58 39 200 59 39 202 60 40 205 58 40 207 57 42 208 55 41 209 53 41 208 52 40 211 57 47 207 53 45 212 61 54 229 80 74 229 84 81 219 76 72 205 66 63 183 49 40 188 59 40 187 61 38 189 60 39 190 59 39 190 57 40 192 56 40 194 58 44 196 58 47 200 62 52 203 66 56 213 79 70 220 87 80 210 82 73 195 68 61 191 67 59 204 72 67 219 76 72 223 74 70 229 77 76 235 83 82 237 84 87 235 80 86 233 78 86 236 79 90 247 86 102 248 85 104 249 83 105 250 82 107 252 82 109 255 83 113 255 83 116 254 83 117 241 76 108 245 84 115 255 92 121 255 96 123 255 91 117 253 85 110 250 82 105 249 84 101 249 87 102 242 84 98 249 93 104 249 93 104 236 82 94 241 87 99 247 93 105 217 86 94 182 96 95 153 92 87 185 127 125 218 169 165 239 199 197 254 224 222 251 233 233 253 248 245 248 250 247 247 255 253 247 255 254 245 255 252 248 254 252 253 255 252 254 253 251 252 248 245 253 250 245 254 249 245 252 247 243 252 244 241 255 245 244 255 244 244 245 233 233 234 220 219 229 215 212 222 209 203 223 213 204 239 229 219 252 245 229 255 249 231 255 252 232 255 255 239 248 253 246 232 241 238 221 227 225 69 65 54 69 65 53 67 63 52 65 61 50 63 59 48 61 57 46 60 56 45 59 55 44 56 52 43 56 52 43 55 51 42 56 52 43 58 53 47 61 56 50 63 58 52 67 60 52 71 62 53 74 66 55 78 68 56 82 70 54 84 71 54 87 71 55 89 73 60 89 74 67 87 75 75 88 80 93 98 94 121 115 117 156 133 138 194 144 153 220 152 164 240 160 171 250 170 179 254 173 181 254 175 183 255 177 185 255 179 186 255 180 187 255 181 185 255 181 185 255 175 178 249 172 172 244 163 163 235 153 151 224 142 141 211 131 128 199 120 117 188 115 109 179 107 96 162 105 93 155 99 90 145 93 87 133 86 82 119 78 75 104 69 68 86 64 64 76 56 53 60 65 60 64 75 65 66 76 64 66 81 62 66 90 69 74 112 87 93 130 99 115 152 115 149 165 122 165 175 127 167 178 123 162 184 118 154 192 112 147 194 99 131 192 84 110 193 71 94 207 76 92 207 73 82 195 61 62 183 54 48 180 58 43 178 61 41 173 61 39 175 60 41 176 59 41 178 58 41 180 59 42 183 60 44 187 60 45 192 60 45 196 60 46 196 54 42 203 56 46 211 60 49 217 63 53 223 65 56 225 62 55 224 60 51 223 58 52 220 55 49 217 52 46 216 51 45 222 57 51 230 65 59 236 69 63 233 66 60 228 61 53 227 60 52 219 52 44 216 52 43 219 55 45 212 50 39 204 44 32 214 54 42 233 71 58 245 75 62 242 64 54 239 52 45 240 45 41 246 44 42 250 44 44 252 44 44 248 42 44 240 42 41 236 47 43 232 50 46 227 53 46 220 52 43 216 49 40 213 49 39 209 51 39 205 55 40 203 58 41 205 58 40 208 58 41 210 59 42 211 58 42 212 56 43 212 56 44 209 52 43 214 60 52 213 58 53 213 60 55 229 79 78 237 89 87 217 69 69 194 51 47 192 59 44 191 60 40 192 59 42 191 58 41 193 57 41 192 56 40 192 56 42 192 56 44 198 61 51 199 65 54 207 74 65 216 85 75 210 82 71 198 71 62 192 68 58 199 71 62 214 75 68 216 73 67 221 76 73 228 83 80 229 83 84 226 80 83 226 77 83 229 78 87 242 88 100 246 90 104 253 91 112 254 90 114 252 86 110 250 82 108 251 81 108 255 81 112 248 70 106 255 79 116 255 89 123 255 90 121 255 86 113 252 84 107 254 87 107 255 92 109 250 89 104 247 91 104 248 98 109 242 98 107 231 96 103 234 105 110 229 106 109 197 94 95 160 93 87 126 77 70 155 108 102 195 151 148 223 185 182 241 211 209 244 224 223 255 245 244 249 249 247 249 255 253 247 255 255 245 255 252 248 254 252 253 255 254 255 252 253 252 248 247 252 249 244 252 249 242 250 247 242 251 246 242 255 247 244 255 246 244 249 238 236 239 228 226 230 219 215 220 209 203 221 211 201 238 228 216 253 246 228 255 251 232 255 253 231 255 255 236 248 251 242 233 239 235 224 229 225 73 69 57 72 68 56 70 66 54 68 64 52 66 62 51 64 60 49 63 59 48 62 58 47 58 54 45 57 53 44 57 53 44 57 53 44 58 53 47 60 55 49 62 57 51 64 59 53 69 62 54 73 64 55 76 68 55 79 70 53 82 69 52 85 69 53 87 71 56 87 73 62 88 77 75 88 78 87 94 90 113 112 112 150 128 134 186 140 150 212 149 161 233 157 169 245 168 176 249 169 177 249 173 179 253 176 183 255 177 183 255 178 185 255 180 184 255 180 184 255 175 177 252 171 173 248 165 167 242 159 158 234 151 150 226 140 139 215 130 129 205 125 121 197 117 109 182 112 103 170 102 96 158 95 90 144 89 88 132 81 81 117 71 71 99 65 62 81 61 53 68 72 56 66 84 61 67 96 64 69 110 67 74 128 79 85 150 93 100 170 103 120 189 108 141 201 110 153 203 111 152 201 105 143 198 97 131 199 88 120 198 73 103 196 59 85 197 51 72 216 65 80 223 69 79 208 60 60 195 56 49 194 64 50 186 65 44 175 59 36 173 54 34 173 53 36 174 53 36 179 53 38 182 55 40 188 56 43 195 59 45 200 60 47 211 64 54 215 64 55 218 64 54 220 63 54 222 61 53 222 57 51 221 54 46 219 52 44 211 46 40 210 45 39 211 46 40 216 51 45 225 58 52 227 60 52 225 56 49 220 53 45 220 53 45 208 44 34 205 41 31 217 55 44 226 66 54 220 63 48 208 52 37 203 46 31 233 70 55 243 73 60 253 72 63 252 60 55 244 45 42 241 35 37 245 39 41 251 47 50 241 45 46 235 47 46 228 50 46 222 51 44 218 49 42 215 48 42 214 47 41 211 48 39 211 55 42 210 57 43 214 58 43 216 60 45 218 62 47 219 63 48 220 64 51 220 64 51 210 54 42 230 76 66 229 74 69 206 53 48 223 71 70 243 90 92 223 73 75 213 65 63 200 60 47 196 59 43 195 58 42 195 58 42 194 58 42 194 58 42 193 57 43 190 57 42 194 60 48 194 62 50 200 70 57 207 79 66 206 80 68 198 72 60 191 67 55 193 67 55 206 72 63 209 70 63 213 74 69 219 80 75 221 82 79 217 77 76 218 75 77 220 75 80 235 88 96 243 91 103 252 97 113 255 97 117 250 88 109 245 79 103 245 77 103 253 78 107 255 76 112 255 79 116 255 83 115 255 82 110 250 84 108 252 90 111 255 99 117 255 105 120 255 102 117 250 98 111 244 98 109 236 101 108 224 103 108 212 106 106 200 106 104 177 104 97 141 94 84 104 70 60 130 93 85 172 135 129 206 171 169 229 199 197 239 218 217 255 243 243 251 247 246 249 253 252 248 255 255 245 255 254 248 254 254 255 255 255 255 251 255 254 248 248 251 250 245 250 250 242 249 248 243 253 250 245 255 251 247 255 250 247 253 243 241 247 236 232 235 224 218 223 213 204 222 212 202 237 230 214 254 247 228 255 254 232 255 254 229 255 254 233 247 249 238 234 239 232 228 231 224 78 72 58 77 71 57 76 70 56 74 68 54 72 66 54 70 64 52 68 61 51 67 60 50 63 56 48 62 55 47 61 54 46 61 54 46 61 54 48 62 55 49 64 57 51 63 58 52 67 62 56 69 65 56 75 67 56 78 69 54 81 68 51 82 69 50 86 70 54 86 72 59 90 77 71 86 77 82 91 87 104 108 107 139 126 130 177 138 147 206 146 159 227 154 166 238 166 174 247 169 175 249 173 176 253 175 179 253 176 179 255 176 180 254 176 179 255 175 179 253 171 174 251 168 171 248 164 167 244 160 162 239 154 156 233 147 149 226 138 140 217 134 133 209 131 127 201 123 117 187 109 107 172 100 101 158 95 97 146 89 91 132 82 81 115 78 72 98 87 70 89 95 67 81 109 66 76 129 69 77 152 77 84 172 85 93 188 91 98 202 90 104 214 84 112 223 83 118 222 84 117 215 80 110 208 74 99 203 67 89 198 57 74 194 47 63 211 57 69 225 68 77 228 72 75 215 63 60 205 62 54 203 71 58 194 73 52 182 63 41 183 62 43 184 61 45 186 60 45 189 62 47 195 63 48 202 66 52 208 68 55 213 69 58 217 69 57 218 66 55 219 62 53 217 59 50 217 54 45 217 53 44 218 51 43 215 51 42 212 49 42 215 52 45 218 55 46 221 57 48 223 56 48 222 55 47 221 54 46 220 53 44 214 47 38 217 53 43 215 55 43 207 50 35 205 49 34 210 57 41 213 62 45 212 59 41 216 60 45 230 68 55 248 74 65 253 68 63 249 54 52 245 42 45 246 42 45 247 47 50 247 54 55 237 53 53 226 51 48 218 49 44 215 48 42 215 47 44 217 48 45 217 48 43 227 56 49 228 57 49 226 58 49 226 59 50 224 60 48 223 61 48 220 63 48 218 62 49 209 55 43 239 87 76 248 97 90 211 59 54 209 59 58 230 80 81 220 70 72 230 80 81 207 60 52 202 58 47 198 56 44 197 57 44 196 58 45 196 60 46 195 59 45 192 59 44 190 58 45 190 60 46 195 65 51 199 72 57 199 73 59 194 68 54 190 64 50 188 62 48 201 70 60 202 69 60 206 73 66 213 80 73 215 82 77 213 78 75 211 75 75 215 76 79 233 90 96 240 94 104 252 102 114 255 104 120 252 93 113 242 80 101 243 77 101 252 79 107 255 83 117 255 82 116 254 81 111 244 82 106 243 92 111 250 103 119 253 105 119 249 101 115 253 101 116 245 94 109 239 94 107 236 106 114 221 115 117 192 107 102 168 101 92 156 110 97 127 101 86 89 71 57 110 86 74 150 123 114 190 159 156 223 193 193 238 214 214 254 238 239 254 245 246 252 252 252 249 255 255 246 255 254 249 253 254 255 255 255 255 251 255 254 248 250 253 254 248 250 253 244 250 251 245 254 253 248 255 255 250 255 253 249 255 250 244 255 246 241 242 233 226 229 221 210 225 217 204 240 233 215 255 250 228 255 255 230 255 254 229 255 254 233 246 248 234 237 240 231 232 233 225 81 75 61 80 74 60 79 73 59 77 71 57 75 69 57 73 67 55 71 64 54 71 64 54 66 59 51 65 58 50 64 57 49 63 56 48 63 56 50 63 56 50 65 58 52 64 59 53 66 63 56 69 66 57 75 69 57 77 70 54 80 69 51 82 69 50 85 70 51 85 72 55 89 76 67 85 75 76 90 83 99 105 105 133 124 129 171 137 147 200 147 158 222 154 164 235 166 172 248 169 172 251 172 173 253 173 176 255 174 177 255 174 177 254 173 176 253 173 176 253 169 172 249 167 170 247 164 168 242 162 166 240 159 163 237 154 158 232 149 153 227 146 148 222 146 146 218 137 138 205 124 128 192 115 120 178 111 117 169 109 112 157 105 103 142 106 95 125 121 95 120 130 87 106 142 80 95 163 79 92 187 83 92 205 84 93 214 80 87 218 72 83 224 65 83 228 65 84 224 69 85 217 69 81 210 69 77 204 65 70 199 59 60 198 54 54 227 74 76 229 73 74 224 66 65 211 56 52 206 57 50 206 65 55 200 68 53 190 63 46 195 69 54 195 69 54 197 70 55 201 69 56 206 70 56 209 71 58 215 71 60 218 71 61 214 62 51 213 59 49 214 56 47 213 52 44 214 51 42 216 52 43 219 52 44 218 54 45 219 56 49 221 60 52 224 61 52 223 60 51 221 57 48 220 53 45 220 53 44 219 55 45 210 46 36 221 59 48 218 61 46 205 49 34 198 45 29 206 55 38 210 61 41 205 58 38 204 57 39 212 56 41 226 58 47 243 61 57 255 64 64 255 60 62 254 51 55 243 44 47 234 44 46 225 43 42 216 42 41 212 43 40 215 47 44 222 52 52 228 56 56 233 57 57 239 55 53 240 55 52 238 55 51 232 55 49 227 55 45 220 54 42 215 53 40 209 53 38 205 53 40 231 80 69 255 109 99 219 72 65 200 52 50 215 67 67 211 62 66 234 86 86 217 65 60 210 62 52 203 56 46 198 54 43 198 58 45 198 60 47 195 62 47 193 61 46 187 57 43 187 60 45 190 63 48 192 65 50 191 65 50 189 64 46 188 61 46 187 60 45 195 67 54 196 68 57 200 72 63 208 80 71 211 82 76 208 79 73 210 78 76 213 79 78 233 94 99 238 97 103 251 105 116 255 110 122 255 100 117 245 86 106 245 81 105 254 86 111 255 86 115 255 86 113 245 87 110 238 93 110 241 109 120 247 117 127 240 106 115 227 87 98 243 95 109 245 94 109 241 96 111 241 114 125 238 135 138 206 128 124 169 117 104 151 122 106 117 106 88 82 77 58 97 85 71 132 112 103 177 149 146 221 191 191 239 213 216 253 233 235 254 244 245 252 250 251 250 254 255 248 254 254 252 253 255 255 254 255 255 250 255 255 249 253 255 255 251 248 254 244 250 253 246 255 255 250 255 255 250 255 255 248 255 252 246 255 253 245 250 241 232 238 230 219 234 226 213 245 240 221 255 251 229 255 254 229 255 254 226 255 255 231 249 250 234 242 244 231 238 240 229 83 77 61 82 76 60 81 75 61 79 73 59 77 71 57 75 69 55 74 68 56 73 67 55 69 62 52 68 61 51 66 59 51 65 58 50 64 57 51 65 58 52 65 57 54 64 59 55 65 64 59 67 67 59 73 69 57 77 71 55 79 71 50 82 70 48 85 70 49 85 72 53 87 75 63 82 72 70 88 82 94 106 103 130 125 129 167 137 147 196 146 158 218 152 162 231 164 167 246 166 167 250 171 169 252 171 172 254 172 173 255 173 174 254 172 174 251 172 174 251 168 172 246 166 170 244 164 168 241 163 167 240 161 168 238 160 167 237 157 164 232 155 162 230 153 158 226 146 154 219 139 147 210 134 143 202 131 141 194 132 136 183 131 129 168 136 121 154 143 109 136 154 99 122 169 88 105 187 81 95 207 77 89 224 73 82 232 65 73 232 62 65 228 62 62 222 65 60 216 69 61 210 74 60 202 75 60 194 71 53 191 68 50 195 65 49 226 86 73 223 72 63 217 60 55 216 54 51 218 56 53 216 59 54 210 57 52 200 56 48 192 58 46 190 60 46 191 59 46 192 58 46 194 56 43 195 55 42 198 52 39 198 50 38 206 52 42 208 51 42 209 51 40 212 51 41 214 51 42 217 53 44 221 54 46 220 56 47 222 61 51 219 61 50 220 59 49 219 56 47 219 55 45 218 54 44 216 52 42 215 51 41 213 51 38 211 51 37 208 52 37 207 54 38 210 61 41 209 62 42 202 57 36 192 50 28 200 58 38 202 52 37 213 49 39 231 53 49 250 60 60 255 61 64 255 55 61 247 51 55 234 45 49 225 45 46 217 45 45 215 47 46 220 52 51 227 57 58 233 59 61 240 57 61 246 50 54 248 48 51 244 48 49 237 49 47 228 49 42 222 50 40 213 49 37 207 51 36 201 49 36 209 61 49 250 106 95 228 84 76 200 57 53 208 64 63 203 58 61 228 82 83 228 74 72 220 67 61 209 58 51 201 54 46 198 56 46 197 59 48 194 60 48 191 61 47 186 59 42 188 63 45 189 64 46 188 63 45 186 59 42 186 59 40 189 59 43 190 60 44 188 62 48 188 62 50 192 68 56 200 76 66 204 80 72 202 78 70 204 76 73 208 78 76 232 97 101 236 97 102 248 104 114 255 111 123 255 104 120 247 90 107 247 85 106 253 91 114 249 91 114 244 95 115 233 98 113 227 107 116 234 125 128 242 133 136 234 118 121 222 92 100 246 101 116 255 107 124 247 98 117 238 106 119 249 144 149 239 161 159 196 148 138 163 140 124 106 105 85 73 81 60 88 85 70 117 103 92 165 140 136 220 190 190 242 213 217 249 227 230 255 242 245 255 249 251 252 253 255 249 253 255 252 253 255 255 253 255 255 251 255 255 248 253 254 255 251 247 253 243 247 253 243 253 255 247 255 255 248 255 253 246 255 251 245 255 255 246 255 250 240 246 240 226 242 236 220 251 246 226 255 252 230 254 252 227 254 253 225 255 255 230 253 254 236 248 249 235 246 246 234 86 79 63 84 78 62 83 75 62 80 74 60 79 71 58 76 70 56 76 68 55 74 68 56 72 64 53 70 64 52 69 60 51 66 59 49 66 57 50 65 58 50 67 58 51 65 60 54 67 64 57 68 68 58 74 70 58 77 71 55 79 71 50 81 70 48 84 72 50 85 72 53 85 73 61 81 71 69 87 81 93 106 104 128 126 130 168 140 148 197 147 157 216 153 162 231 159 160 242 164 160 247 166 163 250 169 166 253 169 169 255 169 171 254 169 172 253 169 172 251 165 171 245 163 170 242 163 167 238 162 167 235 164 169 237 165 170 238 165 168 237 163 167 238 152 161 230 150 161 227 148 159 221 148 159 213 149 155 203 152 150 190 158 141 175 168 132 160 164 102 127 178 93 114 193 82 99 206 74 88 218 66 78 228 62 72 235 60 67 235 61 62 231 64 58 223 67 55 216 70 55 209 74 55 199 74 52 191 71 47 189 67 44 193 64 45 225 83 69 221 68 60 221 57 55 230 62 61 236 68 67 230 64 64 219 56 57 207 53 51 205 67 57 200 68 56 201 67 56 199 65 53 198 62 50 195 57 44 194 54 41 194 50 39 198 50 40 203 51 40 206 52 42 211 53 44 216 53 46 217 52 46 219 52 46 219 52 44 228 66 55 222 60 49 218 54 44 218 54 44 223 57 45 223 57 45 219 53 41 213 49 37 216 56 40 206 49 32 202 49 33 208 57 40 206 56 39 199 52 34 202 55 37 212 67 48 200 55 38 206 56 42 215 54 44 222 53 46 230 51 47 238 53 51 246 58 57 251 63 62 255 76 75 250 72 70 242 66 66 236 62 61 234 60 61 231 55 58 229 50 54 230 44 49 244 43 49 248 41 47 244 44 46 239 47 46 232 49 43 224 52 42 217 53 41 211 55 40 198 48 33 192 46 31 244 100 89 235 93 83 207 64 58 212 68 67 203 59 59 223 77 77 234 82 81 224 72 69 211 59 54 201 54 47 198 56 46 198 57 47 195 59 45 190 58 43 190 60 44 193 64 45 192 65 46 187 60 41 183 56 37 184 57 38 189 60 41 190 63 46 181 55 41 179 55 43 184 62 49 193 71 58 197 75 64 197 73 65 200 73 66 203 74 69 229 97 95 230 94 96 241 100 106 254 110 119 254 107 117 243 93 105 240 88 101 246 94 109 248 97 116 241 100 116 229 104 112 223 110 114 233 127 127 249 141 139 247 131 132 239 110 115 253 112 121 255 120 134 245 97 113 223 88 102 246 136 145 255 180 180 211 173 162 164 153 135 96 104 80 69 81 57 82 84 63 107 97 85 156 136 129 220 192 191 244 215 217 246 224 227 255 241 244 255 248 251 253 253 255 251 252 255 252 253 255 255 253 255 255 252 255 254 249 253 250 255 249 242 254 240 242 252 241 249 255 244 253 255 247 250 252 241 254 251 242 255 255 244 255 255 243 252 246 232 248 242 226 254 249 229 255 253 231 253 251 226 253 252 224 255 255 233 255 255 241 252 252 240 251 251 239 88 79 64 87 80 64 87 78 63 85 78 62 84 75 60 82 75 59 82 73 58 80 72 59 77 67 55 75 67 54 75 65 53 72 64 51 72 62 50 71 63 50 72 62 50 70 64 52 71 67 58 71 69 57 74 71 56 78 73 54 82 74 53 85 74 52 85 74 52 86 75 57 88 78 68 85 76 77 90 84 98 107 104 131 123 126 167 137 143 195 145 153 215 152 159 231 166 162 246 167 161 249 165 160 252 164 161 252 162 163 255 163 167 255 164 170 255 164 173 252 161 170 245 161 169 241 161 168 236 164 169 237 167 170 239 172 170 243 174 170 246 171 170 246 161 168 246 156 166 238 149 160 222 152 159 211 166 164 203 180 160 188 180 135 155 179 105 120 186 78 93 205 70 84 219 65 77 227 61 73 228 61 71 227 62 69 223 64 69 223 64 68 226 61 65 221 61 61 219 70 66 200 59 52 202 68 59 202 69 60 186 49 41 219 74 69 230 75 73 233 67 69 235 62 66 232 59 63 230 60 63 225 61 62 219 59 59 212 60 57 207 66 59 200 63 55 202 68 59 209 77 65 205 75 62 191 61 48 184 54 41 189 57 44 191 55 43 195 54 44 200 53 45 203 50 42 209 47 42 212 47 43 219 50 47 224 53 46 231 65 53 224 56 43 219 49 36 222 50 38 230 57 43 231 59 45 225 55 38 215 50 31 209 50 31 206 51 31 203 52 33 201 51 34 201 51 34 203 51 37 206 53 39 207 53 41 202 48 38 207 50 41 209 53 41 210 54 42 210 52 40 213 51 38 215 51 39 220 52 41 224 50 41 230 51 46 235 53 50 235 51 51 233 47 50 231 45 50 232 45 52 237 46 53 246 45 51 246 43 47 239 43 44 236 47 45 234 53 46 227 57 44 217 55 40 208 52 37 195 45 28 196 51 34 231 88 72 233 89 78 203 59 51 223 78 73 197 52 49 218 72 72 225 79 80 220 74 74 212 67 64 204 59 54 200 56 48 198 56 44 199 57 43 200 60 43 197 60 42 194 59 40 190 57 38 188 59 40 187 60 41 186 61 41 186 61 43 183 60 44 180 56 44 181 59 48 185 61 49 187 63 51 187 63 51 190 64 52 192 64 53 196 65 55 239 106 97 245 112 105 234 99 95 244 109 106 251 113 113 236 97 100 244 103 109 255 112 121 255 107 122 251 104 120 234 103 111 226 101 105 229 103 106 237 109 110 243 110 111 245 109 111 255 119 123 255 126 133 241 95 108 241 105 119 214 103 112 248 174 175 189 167 154 133 141 117 97 112 81 74 89 58 77 81 56 115 110 90 165 149 136 205 182 176 237 213 211 255 238 240 255 244 245 255 245 249 252 247 251 251 251 253 253 254 255 254 255 255 255 254 255 251 255 254 239 255 243 229 252 232 231 249 233 240 254 237 248 255 245 252 255 244 253 255 242 255 253 240 255 253 241 255 251 238 255 250 234 255 250 230 254 249 227 252 250 225 252 250 225 251 250 229 253 253 241 255 255 250 255 255 250 89 80 65 88 79 64 88 79 64 86 77 62 85 76 61 84 75 60 83 74 59 82 73 58 78 69 54 77 68 53 76 67 52 75 66 51 74 65 50 74 65 50 74 65 50 73 65 52 71 67 56 72 68 57 76 70 56 79 72 54 82 74 53 83 75 52 86 75 55 84 75 58 88 78 69 85 76 77 89 85 99 107 104 131 123 125 166 134 140 192 141 149 211 150 154 225 161 156 236 163 155 241 161 157 244 161 158 249 160 161 253 160 165 255 162 170 255 161 172 251 160 172 244 160 171 237 158 167 232 161 166 232 164 164 234 166 164 237 166 162 238 163 160 237 163 166 243 160 164 235 160 160 220 165 155 205 177 153 189 188 143 166 189 115 130 191 87 98 204 70 77 220 63 70 230 59 67 233 58 65 230 59 67 225 62 67 219 64 68 218 65 70 224 60 67 218 57 63 218 65 68 203 59 59 204 66 63 202 64 61 193 51 49 229 79 80 230 67 70 232 63 68 234 59 66 231 56 63 226 56 59 219 56 57 213 58 56 207 59 55 212 69 63 198 61 53 197 60 52 204 71 62 204 76 65 193 67 53 184 58 44 183 57 43 185 55 42 191 55 43 198 54 45 203 52 45 209 50 46 216 51 47 225 53 51 228 56 52 229 61 50 226 58 45 225 53 41 225 52 38 228 52 39 226 53 39 221 51 34 213 50 31 211 56 36 205 56 34 201 56 37 200 58 38 204 58 43 206 58 44 207 55 44 208 51 42 213 51 46 214 53 45 211 55 43 207 55 41 201 54 38 199 52 34 203 52 33 207 52 34 216 50 36 222 50 38 227 48 43 230 46 44 230 44 45 230 44 47 230 45 50 232 46 51 236 43 46 237 44 45 236 48 46 232 50 46 224 52 42 219 53 39 213 56 39 210 57 39 213 63 46 187 42 25 214 68 53 208 62 49 217 70 62 235 86 80 218 66 63 216 66 65 231 85 86 226 82 82 220 75 72 212 67 62 205 61 53 201 57 46 200 57 43 199 56 40 200 59 42 196 59 40 191 58 39 189 60 41 189 62 43 186 63 45 185 64 47 182 62 46 178 58 44 180 59 48 183 61 48 184 62 49 186 63 48 189 63 49 193 66 51 197 67 53 235 105 92 242 109 100 231 98 91 240 107 102 245 111 108 232 98 97 241 107 108 254 115 120 255 111 126 255 110 124 242 107 114 228 97 102 228 92 96 239 99 102 253 110 112 255 119 120 253 117 119 255 121 126 235 89 100 237 99 112 215 99 110 242 168 169 178 162 147 118 134 107 94 114 79 78 95 59 83 90 59 117 115 92 169 157 141 214 196 184 246 225 220 255 245 241 255 248 248 255 248 249 253 249 250 251 251 251 250 254 253 251 255 254 250 254 255 246 255 250 237 255 242 227 255 232 227 251 229 235 254 234 244 255 240 249 255 241 252 255 241 255 255 240 255 253 239 255 253 237 255 251 233 254 247 229 249 244 224 248 243 221 250 245 223 250 247 228 249 249 239 251 252 246 254 253 249 92 80 66 91 79 65 91 79 65 89 77 63 88 76 62 87 75 61 86 74 60 86 74 60 83 71 57 82 70 56 81 69 55 79 67 53 79 67 53 79 67 53 79 67 53 77 67 55 74 67 57 74 70 59 77 71 57 80 73 55 83 75 54 86 75 53 86 75 55 84 75 58 87 77 67 86 77 78 90 87 98 107 105 129 121 123 161 133 137 185 139 145 203 146 150 214 153 152 222 155 151 227 155 152 233 155 156 238 157 159 244 158 163 247 160 167 248 160 169 244 160 170 239 157 168 232 155 165 227 156 162 224 156 160 224 157 158 225 156 154 227 155 153 226 153 154 221 158 152 214 168 147 204 178 140 189 191 131 169 198 115 145 197 91 111 194 70 81 209 68 76 218 65 68 223 63 65 225 62 63 225 62 65 225 62 67 223 62 68 223 62 70 224 60 67 215 56 61 213 63 65 207 65 64 202 67 63 195 60 56 196 57 54 233 87 87 224 66 67 228 62 66 232 59 63 227 57 60 220 54 56 214 54 54 209 57 54 204 59 54 213 72 65 196 59 49 190 53 43 197 65 53 205 75 62 198 72 58 187 61 47 183 56 41 186 54 41 191 55 41 199 55 44 207 54 46 215 53 48 222 55 49 230 57 53 233 61 57 217 50 42 218 51 42 221 53 42 223 52 42 223 52 42 222 54 41 220 57 42 217 62 44 198 51 33 192 51 31 187 52 33 186 53 34 191 55 41 191 55 41 191 50 40 193 44 37 227 64 59 229 62 56 222 61 51 213 60 46 204 57 41 200 55 36 200 55 34 204 55 35 210 55 37 213 51 36 215 47 38 217 46 39 219 46 42 220 46 45 219 47 47 220 46 47 219 44 41 223 48 43 224 53 45 220 53 44 213 51 38 208 52 37 208 57 38 209 62 42 212 65 47 194 49 32 231 83 69 210 59 48 218 65 59 222 67 63 232 74 73 240 84 85 237 85 84 231 83 81 227 79 77 221 74 67 214 67 59 207 60 50 202 56 43 197 54 38 196 55 38 192 55 37 188 55 38 185 58 39 185 60 42 183 62 45 181 61 44 178 61 44 176 58 44 177 59 47 180 60 46 181 61 47 183 61 46 185 63 48 190 67 52 195 69 55 220 92 81 234 103 93 228 97 89 240 108 103 246 112 109 231 97 96 236 102 103 245 106 113 228 80 94 240 94 107 240 106 113 235 104 109 235 99 103 242 102 105 254 111 113 255 117 119 253 114 117 252 111 117 231 81 93 232 90 104 217 97 109 237 158 161 170 152 138 108 122 96 89 109 72 79 100 61 87 96 65 119 119 93 173 165 146 225 209 194 255 238 230 255 248 241 255 251 247 255 252 248 252 253 248 250 255 251 251 255 253 251 255 253 249 255 251 244 255 246 233 255 237 222 252 226 220 246 221 225 247 224 233 251 229 239 251 231 245 252 234 252 255 236 253 250 233 255 250 234 255 248 230 249 242 224 241 234 216 239 232 213 243 236 217 247 242 223 251 248 239 252 252 244 255 254 249 92 80 66 92 80 66 91 79 65 90 78 64 89 77 63 89 77 63 88 76 62 88 76 62 85 73 59 84 72 58 83 71 57 82 70 56 82 70 56 82 70 56 82 70 56 80 70 58 76 69 59 75 71 60 79 73 59 82 75 57 84 76 55 87 76 54 87 76 56 87 75 59 86 76 66 85 77 75 92 86 96 106 104 126 121 121 155 130 133 178 138 141 194 143 148 206 148 148 210 149 148 214 149 149 219 150 152 227 152 155 232 152 158 236 155 161 237 155 163 235 156 165 232 152 162 223 150 159 218 149 155 213 147 153 213 147 151 214 146 147 214 145 144 210 136 131 189 148 130 182 168 124 175 184 115 162 199 102 143 207 88 120 210 72 97 208 62 75 217 68 74 218 68 67 218 69 65 220 68 65 222 66 67 225 64 69 229 62 70 229 62 70 227 63 70 214 58 62 209 63 64 209 69 68 198 65 60 186 54 49 197 62 58 234 90 89 221 65 66 227 64 67 230 61 64 227 58 61 219 56 57 211 57 55 208 60 56 206 65 56 207 69 59 194 58 46 187 50 40 192 60 47 199 69 55 196 69 54 189 62 47 184 57 40 189 56 41 194 57 41 203 56 46 210 58 47 217 56 48 224 57 49 232 59 55 235 62 56 217 48 43 218 49 42 222 51 44 224 51 44 225 52 45 225 54 46 220 56 46 217 59 47 202 54 40 199 58 41 195 59 43 192 59 44 192 58 46 195 58 48 198 59 54 208 56 53 236 67 64 237 64 60 228 64 55 217 61 49 207 57 42 199 57 37 200 58 38 201 59 37 207 60 40 208 55 39 207 49 37 209 49 37 212 49 40 214 51 44 212 49 44 209 47 42 211 50 42 211 53 44 211 55 43 208 55 41 205 53 39 202 55 37 204 59 40 204 62 42 204 59 40 207 60 44 244 94 80 224 70 60 210 51 47 210 46 44 230 64 64 251 87 88 255 117 115 255 114 111 255 106 103 246 94 89 231 80 71 213 65 55 199 53 40 189 46 32 196 56 39 192 56 40 187 56 38 184 59 41 183 60 44 181 61 45 178 61 44 176 60 45 175 59 46 173 60 46 176 60 47 176 60 45 177 59 45 182 62 46 188 66 51 192 70 55 203 77 65 223 96 87 226 97 91 244 112 108 248 116 114 230 96 97 228 93 97 232 93 100 218 70 84 234 88 101 239 105 114 236 107 111 240 104 108 249 109 112 255 113 118 255 115 118 254 111 115 248 103 110 229 74 88 229 82 98 218 93 107 230 148 150 168 145 131 106 116 89 85 106 67 83 104 63 92 103 69 121 124 95 176 170 148 231 220 202 255 245 232 255 249 240 255 249 239 252 252 242 251 254 245 250 255 249 249 255 250 246 255 248 242 252 243 234 251 235 219 247 222 208 241 210 205 234 204 209 235 206 217 237 210 223 239 213 233 243 219 242 247 225 244 246 225 249 246 227 251 246 227 244 237 219 234 227 209 231 222 205 235 226 209 240 233 217 251 244 234 251 246 240 254 249 243 92 80 66 92 80 66 91 79 65 91 79 65 90 78 64 89 77 63 89 77 63 89 77 63 87 75 61 86 74 60 85 73 59 85 73 59 84 72 58 85 73 59 85 73 59 83 73 61 79 71 60 79 73 61 81 73 60 83 76 58 85 77 56 88 77 55 89 76 57 88 76 60 85 75 65 85 75 73 92 85 93 104 101 120 117 116 147 124 126 165 133 135 183 140 143 194 141 144 195 142 145 200 142 146 207 144 148 212 146 149 220 147 151 224 148 152 223 147 154 222 149 157 220 146 155 214 142 148 206 137 144 199 133 139 197 129 135 195 126 130 193 129 125 184 128 115 159 145 110 150 170 102 143 193 92 134 214 78 118 225 65 101 229 59 85 230 59 75 226 67 71 220 71 67 216 73 65 216 73 65 220 71 67 227 66 71 236 62 72 237 61 72 230 66 73 215 62 64 208 64 63 208 73 69 191 62 56 179 50 44 200 67 60 224 85 80 220 68 67 225 65 67 227 63 64 225 62 63 218 63 61 212 64 60 209 68 59 207 70 60 199 61 50 192 56 42 189 53 41 189 57 42 191 61 45 191 61 45 189 59 43 189 60 41 194 58 42 199 59 42 207 59 47 213 59 47 219 56 47 224 56 47 231 56 51 235 57 53 231 56 53 230 52 50 229 49 48 232 50 49 233 51 50 231 52 48 222 49 43 214 47 39 205 48 39 205 54 45 201 57 48 197 54 46 194 51 45 196 51 48 206 57 59 222 62 64 235 56 59 237 55 54 228 55 49 216 53 44 204 52 38 198 53 34 196 55 35 197 58 37 203 61 41 203 56 38 204 52 38 206 53 39 212 56 44 212 58 48 211 57 47 208 56 45 208 62 49 202 59 45 197 56 39 196 55 37 198 57 39 199 60 41 199 60 41 199 58 40 205 62 45 205 58 42 216 62 50 225 67 58 212 47 45 228 58 58 224 50 52 223 53 54 215 53 51 214 59 54 222 67 62 229 75 67 234 81 73 234 83 72 232 84 72 228 85 71 203 63 48 196 63 46 190 60 44 184 61 45 183 62 45 180 63 46 176 63 47 174 62 48 172 60 46 172 60 46 172 60 46 172 61 44 173 60 44 177 61 46 183 65 51 186 68 54 198 76 65 222 98 88 226 99 93 240 110 108 244 114 114 229 96 99 229 96 101 232 95 103 251 105 118 254 109 122 241 110 118 229 100 104 234 98 102 252 109 113 255 117 123 255 118 124 254 107 115 245 95 106 232 71 87 228 75 93 221 90 104 226 137 141 172 142 131 115 121 93 93 114 73 94 117 73 104 119 80 129 136 102 179 178 150 232 226 204 255 250 233 255 253 237 254 252 237 251 255 240 249 255 242 247 255 243 244 255 241 237 251 234 227 241 224 218 237 215 201 232 200 191 227 189 187 221 186 192 222 188 200 224 192 207 226 196 217 230 204 227 235 211 235 239 216 243 242 222 247 242 223 242 235 217 234 225 210 231 219 205 233 221 207 238 226 214 241 231 222 240 231 224 242 233 226 91 79 65 91 79 65 91 79 65 90 78 64 90 78 64 89 77 63 89 77 63 89 77 63 88 76 62 88 76 62 87 75 61 86 74 60 86 74 60 87 75 61 87 75 61 88 76 62 81 73 62 81 73 62 83 75 62 85 76 59 88 77 57 88 77 55 89 76 57 88 77 59 87 75 63 85 76 71 89 83 87 101 94 110 110 106 131 117 116 150 126 125 165 131 134 177 133 138 180 132 139 185 135 141 193 137 142 200 139 143 207 140 143 212 141 144 213 141 144 211 144 148 211 139 144 202 131 136 192 126 129 184 120 123 178 114 116 173 108 110 171 111 104 156 131 105 140 148 98 123 175 88 120 203 79 113 227 65 102 239 56 87 243 53 78 244 58 72 235 66 69 225 72 66 217 76 66 215 77 66 222 73 69 229 69 71 240 63 73 240 62 74 228 67 72 215 67 67 204 65 62 206 73 68 186 59 52 176 52 44 201 73 64 213 76 70 216 66 65 218 63 61 219 59 59 218 60 59 216 64 61 212 69 63 205 71 60 203 71 58 192 56 42 193 56 40 192 56 42 190 57 40 188 57 39 187 56 38 189 58 40 192 59 40 196 59 41 202 61 44 210 60 46 215 59 46 220 56 46 225 54 46 228 54 47 232 53 48 234 50 50 234 46 47 234 43 48 240 47 50 246 51 55 247 54 55 240 52 53 230 50 49 219 46 42 216 51 47 215 53 50 210 50 50 209 46 49 211 46 52 220 53 61 235 58 68 237 48 54 238 48 50 230 51 47 220 51 44 209 53 41 202 55 39 200 57 40 201 60 40 198 56 36 201 54 36 206 54 40 211 58 44 218 62 50 221 65 53 221 65 53 216 65 54 211 71 56 201 65 49 194 59 40 192 57 38 195 60 41 198 61 42 197 60 42 197 56 38 204 58 43 205 55 41 205 48 39 230 67 60 219 50 47 239 63 65 227 47 50 218 42 44 213 49 47 210 53 46 213 56 49 214 57 48 210 56 46 204 53 42 198 50 38 192 49 35 206 69 53 198 65 50 188 61 46 181 58 42 177 57 41 175 57 43 171 58 44 170 58 44 171 59 47 171 61 48 172 62 47 172 60 46 171 60 43 173 60 44 178 62 47 181 65 50 201 83 71 224 103 94 224 99 95 234 106 105 238 110 111 230 99 104 240 106 113 246 110 120 255 110 123 255 114 126 241 112 117 231 102 107 240 103 110 255 116 122 255 117 126 255 110 117 253 103 112 244 90 102 237 72 89 229 72 91 222 87 102 220 128 131 180 146 134 133 136 107 113 134 93 111 137 90 121 138 96 141 151 114 182 183 152 223 222 194 249 244 222 252 250 229 255 255 239 250 255 238 244 255 238 238 255 234 230 249 227 220 239 217 208 227 205 197 222 193 178 213 173 172 211 167 172 209 168 178 210 171 185 213 175 190 214 178 201 218 186 210 223 193 224 230 204 232 234 212 240 237 218 241 234 216 236 227 212 233 221 209 232 218 207 234 220 211 232 219 211 230 217 211 229 216 210 91 78 62 91 78 62 91 78 62 91 78 62 90 77 61 90 77 61 90 77 61 90 77 61 89 76 60 89 76 60 88 75 59 88 75 59 88 75 59 89 76 60 89 76 60 89 77 63 83 73 63 84 74 62 85 76 61 88 76 60 89 78 58 90 77 58 90 77 58 89 78 60 89 77 63 85 76 69 88 79 82 95 87 98 100 95 115 106 102 129 115 111 144 121 121 157 122 128 164 122 130 169 127 131 178 130 133 188 133 134 198 135 136 203 136 137 204 136 137 202 136 136 200 131 131 191 125 124 181 121 118 173 115 112 167 110 107 164 105 101 160 111 95 142 132 94 117 151 85 97 179 78 96 210 74 98 236 64 90 246 54 79 251 52 71 252 58 69 240 64 64 231 70 62 222 74 64 219 75 66 224 72 69 231 68 71 240 63 73 239 63 74 221 65 68 212 70 68 200 65 61 201 72 66 180 58 47 177 55 44 206 79 70 201 66 60 206 61 56 208 54 52 207 49 48 208 53 49 211 62 56 207 69 59 200 70 57 195 68 53 190 57 40 195 58 40 194 58 42 191 58 39 189 56 37 190 57 38 191 58 39 193 58 38 196 57 38 203 58 41 211 58 44 217 57 43 221 55 43 225 53 43 228 51 43 234 51 45 235 42 43 241 42 45 248 45 51 253 46 52 255 49 55 255 50 55 255 51 56 253 53 56 250 55 59 246 55 60 243 57 62 243 56 65 246 56 68 247 55 70 252 53 72 254 53 69 246 42 53 244 45 50 237 49 50 227 52 47 217 54 45 208 56 42 206 59 43 206 61 44 203 53 38 209 56 42 217 59 47 223 61 50 226 62 52 228 61 52 229 62 53 223 65 54 217 74 60 207 71 55 201 65 49 196 60 44 194 57 41 194 57 39 198 56 42 200 57 41 201 50 39 211 57 47 225 64 56 235 68 62 222 48 47 224 46 46 235 52 54 232 54 54 216 51 45 213 55 46 215 57 48 215 58 49 213 59 49 210 59 48 205 58 48 201 59 47 214 76 63 204 70 58 191 64 49 180 57 42 176 54 41 172 54 40 171 55 42 169 56 42 172 59 45 173 61 47 174 62 48 173 61 47 171 60 43 171 60 43 173 60 46 177 61 48 192 75 65 218 100 90 222 99 94 232 107 105 240 111 115 234 105 110 245 114 122 253 117 127 241 101 112 248 111 121 245 116 121 237 111 115 248 111 118 255 120 127 255 116 125 255 101 111 252 98 110 242 84 98 241 72 91 231 68 89 222 81 97 217 118 123 189 149 137 152 153 122 129 150 107 123 151 102 130 149 104 145 157 117 172 178 142 203 204 173 224 224 196 233 236 209 236 244 220 227 241 215 215 235 207 205 228 199 196 221 191 187 212 182 180 203 174 172 199 164 156 193 149 152 194 144 156 195 148 163 201 154 170 203 158 175 203 162 184 206 168 194 211 177 206 217 187 216 222 196 228 227 206 235 229 213 236 226 214 233 219 210 229 212 205 226 209 202 223 205 201 218 203 198 213 198 193 91 78 62 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 89 76 60 89 76 60 90 77 61 89 76 60 89 76 60 88 75 59 88 75 59 89 76 60 90 77 61 90 76 63 86 74 62 86 74 62 88 76 62 89 78 60 90 77 60 90 77 58 90 77 58 90 77 60 91 79 65 87 77 68 87 77 76 92 82 90 94 88 102 98 93 113 106 102 127 113 113 141 116 119 150 116 122 156 120 125 167 125 128 181 129 129 191 132 131 197 133 132 200 135 132 199 130 125 191 127 121 183 125 116 173 122 111 167 122 109 165 120 105 162 116 101 160 124 95 141 133 79 93 152 72 75 178 69 75 211 71 82 237 66 82 246 58 73 252 54 67 253 58 64 244 62 61 235 66 59 228 69 63 225 70 65 227 69 66 230 67 70 237 63 72 234 64 73 214 64 65 209 71 68 197 65 60 195 71 63 178 57 46 179 58 47 209 85 75 195 62 53 201 56 51 199 47 44 197 42 38 200 47 42 205 58 51 204 67 57 195 67 54 188 62 47 192 59 42 196 59 41 195 60 41 193 58 39 194 59 40 195 60 41 194 59 39 195 56 37 196 53 36 202 55 37 212 56 41 217 55 42 221 53 42 225 51 42 229 51 41 234 50 42 245 51 51 254 54 56 255 56 60 255 52 58 255 45 50 255 40 45 255 40 45 254 43 49 254 45 51 246 41 48 242 38 49 247 41 54 255 44 63 255 42 65 252 32 57 244 25 47 246 34 48 243 40 46 237 44 49 230 48 47 218 49 44 212 51 43 209 53 41 208 54 42 212 54 43 221 57 48 230 61 54 235 62 55 235 58 52 232 55 49 232 53 48 226 57 50 223 72 61 215 75 60 211 69 55 203 61 47 196 54 40 194 51 37 200 54 41 207 56 45 206 52 42 212 54 45 230 67 60 223 56 50 224 50 49 210 32 32 236 56 57 229 54 51 213 49 40 210 52 41 210 52 41 207 53 41 206 54 43 202 54 42 200 53 43 197 55 43 227 89 78 216 82 70 202 72 59 190 64 50 183 59 47 181 59 46 181 60 49 181 60 49 175 57 45 177 59 47 177 61 48 177 61 46 175 59 44 173 57 42 173 57 44 174 58 45 177 60 50 208 89 81 220 98 93 236 112 112 244 118 121 238 109 114 245 113 124 248 114 125 255 121 131 255 127 137 250 124 128 235 109 113 241 104 112 255 114 124 255 115 127 255 105 116 250 92 106 243 80 97 245 71 94 232 64 87 220 78 94 215 112 116 196 152 139 164 163 132 134 156 110 126 154 103 129 151 104 141 156 113 161 169 130 180 186 150 200 205 173 213 220 189 202 215 185 191 210 178 176 202 167 166 193 158 157 187 151 154 182 144 150 178 140 145 176 134 140 180 130 138 181 127 143 186 133 152 192 140 158 195 144 162 196 146 170 197 154 179 201 162 190 206 170 201 210 181 216 218 196 227 224 205 232 222 210 230 216 207 223 205 201 218 199 195 211 193 189 206 188 184 200 182 180 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 88 75 59 88 75 59 88 75 59 89 76 60 89 76 60 90 77 61 90 77 61 90 77 61 90 76 63 90 76 63 90 77 61 91 78 61 93 77 61 94 79 60 92 79 60 92 79 62 89 77 61 87 77 67 87 76 72 88 78 79 90 80 88 93 85 98 96 89 105 96 93 114 103 103 129 106 109 142 112 114 155 114 116 167 120 119 179 129 126 193 137 131 201 138 131 199 137 126 192 140 126 188 138 120 178 135 112 168 139 112 167 145 114 171 139 106 163 137 90 132 143 71 82 161 66 60 179 65 64 202 68 67 220 64 67 231 58 62 243 60 62 254 68 69 246 62 60 241 62 58 236 62 61 233 65 64 233 67 67 233 68 72 233 66 73 226 67 72 207 63 62 197 64 57 190 63 54 183 62 51 176 60 47 178 60 48 192 68 56 210 77 68 199 54 49 212 59 54 205 50 46 204 51 46 214 67 59 199 63 51 181 54 39 187 62 44 186 55 37 193 58 39 195 60 41 194 59 40 192 57 37 194 57 38 197 58 39 199 58 40 203 58 39 208 57 40 214 54 40 216 50 36 218 46 34 224 47 37 236 55 46 245 61 53 246 57 51 247 54 49 248 49 46 249 43 43 250 40 41 252 38 40 252 38 40 252 38 40 251 38 42 247 33 41 248 34 46 255 39 55 255 41 62 255 33 59 255 24 54 255 23 49 254 37 54 238 34 43 229 34 42 227 43 45 221 45 45 211 42 39 209 44 40 218 50 47 226 54 50 232 54 52 238 54 54 242 54 53 242 49 50 239 46 47 238 44 44 229 47 44 220 57 50 209 58 49 210 57 49 236 83 75 187 34 26 196 43 35 223 70 62 200 46 38 205 46 40 222 60 55 232 69 64 226 58 55 216 47 42 218 46 42 226 53 49 229 60 55 223 62 52 213 60 46 207 53 41 203 51 38 204 53 42 205 59 46 203 59 48 197 56 46 236 98 88 224 90 79 200 67 58 185 54 44 186 58 47 184 56 45 177 51 39 180 54 42 176 48 37 176 50 38 174 50 38 175 52 37 176 54 39 178 58 42 180 60 46 179 61 49 176 58 48 186 67 59 214 92 87 236 112 112 241 115 118 246 120 124 251 121 131 245 113 124 255 122 132 253 119 128 242 117 123 244 118 122 253 116 124 255 114 124 255 107 120 255 100 115 255 94 110 241 74 92 245 69 92 239 70 91 217 70 86 208 103 107 190 144 128 158 155 122 134 156 109 125 153 102 126 148 99 135 151 106 148 159 119 158 166 129 160 168 131 156 168 132 146 163 127 138 163 124 128 159 118 122 154 113 121 154 111 124 157 114 129 160 118 131 164 117 132 172 119 134 177 121 140 183 127 147 188 132 149 190 134 152 189 135 157 189 140 162 189 144 167 188 147 175 189 154 189 195 167 206 205 185 220 212 199 224 211 202 218 200 196 211 192 188 203 185 183 192 177 174 184 168 168 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 90 77 61 88 75 59 88 75 59 88 75 59 89 76 60 89 76 60 90 77 61 90 77 61 90 77 61 90 76 63 90 77 61 92 76 61 93 77 61 93 78 59 94 79 60 92 79 60 92 79 62 93 80 64 91 79 67 91 78 70 89 78 74 90 80 81 92 83 88 95 85 94 94 88 102 97 93 116 101 100 131 107 105 145 110 108 157 117 113 172 127 122 188 135 128 196 139 128 196 143 128 193 145 125 186 143 116 171 143 108 162 154 111 164 165 115 168 158 103 158 154 86 125 156 61 69 166 55 46 175 54 46 192 61 53 208 65 59 218 63 58 231 64 58 243 65 61 245 61 61 245 59 60 244 60 62 241 62 65 236 66 69 231 66 70 225 66 70 216 66 67 199 60 55 189 61 52 182 60 49 177 59 47 171 58 44 174 58 43 189 65 53 208 74 65 218 71 64 220 65 61 212 54 51 208 53 49 213 64 57 205 67 56 187 57 43 178 53 35 189 56 39 194 59 40 196 61 42 196 61 42 196 59 40 198 59 40 199 58 40 202 57 40 207 57 40 207 54 38 212 50 37 218 50 37 227 53 42 234 56 46 239 56 48 240 57 49 231 50 39 231 49 38 235 47 38 240 45 39 246 44 40 250 45 42 254 46 44 255 46 47 251 42 45 248 37 43 250 36 46 255 39 55 255 37 59 255 29 55 255 20 51 252 19 48 244 29 47 245 45 56 244 50 59 228 41 48 218 39 43 219 45 47 221 47 49 218 42 45 241 58 62 244 55 61 247 52 58 246 50 54 246 47 52 248 48 51 249 50 53 244 56 55 219 50 45 218 59 53 215 56 50 228 69 63 228 69 63 206 47 43 209 50 46 193 34 30 212 53 49 225 63 58 232 69 64 224 61 56 216 51 45 217 50 44 221 54 48 221 58 49 212 58 46 207 57 42 201 53 39 199 53 40 200 57 43 202 60 48 202 60 50 198 57 47 237 99 89 225 88 78 201 64 56 186 52 43 194 57 49 195 58 48 191 54 44 194 57 47 191 53 43 190 52 42 189 52 42 187 53 41 184 54 41 181 53 40 180 54 40 176 54 41 180 59 48 187 66 57 211 89 84 232 108 106 239 113 116 246 120 124 254 124 132 249 117 128 255 122 132 253 119 128 244 119 125 245 118 125 254 117 125 255 111 123 255 104 118 255 97 113 255 93 110 242 75 93 246 68 92 242 70 92 221 73 89 208 102 104 183 138 119 149 146 111 127 147 98 117 146 92 120 142 93 127 144 99 138 149 107 141 152 112 139 149 112 133 148 109 112 135 93 108 137 93 104 137 92 103 141 94 107 143 95 113 149 101 121 155 105 124 158 107 132 171 116 133 177 118 139 183 124 142 186 125 146 187 127 148 187 130 151 188 134 155 187 137 155 181 134 161 179 139 172 183 151 188 190 168 205 199 183 213 200 191 212 195 188 206 188 186 197 181 181 186 172 172 177 163 163 92 76 60 92 76 60 92 76 60 92 76 60 92 76 60 92 76 60 92 76 60 92 76 60 90 74 58 90 74 58 90 74 58 91 75 59 91 75 59 92 76 60 92 76 60 92 76 60 92 76 61 92 76 61 93 75 61 93 77 61 93 78 59 94 79 60 94 79 60 92 79 60 95 82 65 93 81 65 92 80 68 91 78 70 90 79 75 91 80 78 93 81 83 92 82 90 93 84 103 98 89 118 101 95 133 105 99 145 113 108 164 125 119 181 132 126 190 137 125 189 152 132 193 155 128 183 156 118 169 160 111 158 177 115 162 189 117 165 183 104 152 177 81 118 181 61 70 186 54 49 182 54 45 189 61 50 200 68 56 210 69 59 219 66 58 228 63 57 241 61 62 247 58 62 249 58 63 247 61 66 239 64 69 229 66 69 215 65 66 205 66 63 192 59 52 184 57 48 177 57 43 173 57 42 169 56 40 173 57 42 187 63 51 207 70 60 217 68 62 215 57 54 217 55 52 218 59 55 220 67 61 221 79 69 206 72 60 181 51 35 190 57 40 193 58 39 196 59 41 198 61 43 201 61 44 200 60 43 201 58 41 204 57 41 207 55 41 207 50 35 211 47 35 223 52 42 238 61 51 244 63 54 241 57 49 233 52 43 224 54 39 221 54 38 226 50 37 230 48 37 234 46 37 238 45 38 239 44 40 242 44 41 242 44 45 239 40 43 240 39 47 247 41 54 253 37 58 252 30 55 251 22 51 248 24 51 244 37 55 241 47 58 242 52 64 239 53 64 238 57 66 238 58 67 233 53 62 229 45 55 240 50 60 243 47 59 246 46 57 246 45 55 245 46 51 245 46 49 243 47 49 237 52 50 220 48 44 226 61 57 218 54 52 223 59 57 255 109 106 229 67 65 209 47 45 206 47 44 217 58 55 223 64 60 224 65 59 219 60 54 213 55 46 214 53 45 214 53 43 210 54 42 200 54 39 195 54 37 194 54 39 196 56 41 197 59 46 198 60 49 198 60 49 197 59 49 235 96 89 225 84 77 201 60 51 191 48 40 203 59 51 209 62 54 206 59 51 210 61 54 216 61 56 215 60 55 212 61 54 207 60 50 201 59 49 195 57 46 188 54 42 182 54 41 185 59 47 188 64 54 207 84 77 227 103 101 237 111 114 248 122 126 255 129 136 253 123 131 255 122 131 252 121 129 245 122 127 246 121 127 254 117 127 255 110 124 255 99 117 255 92 111 255 89 109 242 73 94 245 65 90 242 70 92 224 76 90 203 97 97 167 122 101 130 128 90 110 130 81 104 133 79 109 131 82 116 133 88 123 136 93 125 136 94 120 132 92 113 130 88 96 122 77 95 127 80 97 133 85 101 141 89 110 149 96 117 156 103 125 160 106 128 163 109 132 171 114 135 176 116 139 180 120 142 184 121 140 184 121 143 185 122 146 186 126 148 186 129 147 177 127 149 172 128 154 170 134 168 174 146 184 181 162 196 186 174 200 185 178 198 183 180 183 171 173 169 160 165 159 150 155 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 90 74 58 90 74 58 90 74 58 91 75 59 91 75 59 92 76 60 92 76 60 92 76 60 93 75 61 93 75 61 93 76 60 94 77 61 94 77 59 94 79 60 94 79 60 94 79 60 94 81 64 94 81 64 93 79 66 91 79 67 92 78 69 91 78 70 92 79 73 91 79 79 94 80 95 98 84 109 100 89 123 103 94 137 111 104 156 122 117 173 132 124 183 136 123 179 155 132 186 166 133 180 175 128 170 184 122 161 200 120 159 211 116 156 204 99 140 198 77 108 216 72 82 217 67 66 209 67 63 203 70 61 201 73 60 204 72 59 211 69 59 222 65 60 238 64 65 245 60 65 251 60 68 249 62 69 240 65 72 226 66 68 209 65 64 197 64 59 191 63 54 182 60 49 175 57 43 171 58 42 170 57 41 174 56 42 188 62 48 206 68 58 213 60 55 213 51 49 224 59 57 229 65 63 225 68 63 232 83 76 223 85 74 191 58 43 193 57 41 190 55 36 192 55 37 196 59 41 201 61 44 202 61 44 203 57 42 206 56 41 205 52 38 210 50 38 217 50 41 229 57 47 241 62 55 245 62 54 240 53 46 228 47 38 222 54 41 221 55 41 224 52 42 228 50 40 231 46 41 233 46 41 236 44 41 236 44 43 232 42 44 230 39 44 234 40 49 240 42 57 245 39 60 246 34 59 250 31 61 251 37 65 253 56 74 228 40 54 229 44 58 255 77 89 255 93 105 255 78 90 242 60 73 244 58 72 232 41 56 237 42 56 241 45 57 244 48 58 241 50 55 234 48 49 225 43 42 215 40 37 216 48 45 218 55 50 212 50 47 229 67 64 255 115 112 245 86 83 221 62 59 229 71 68 219 61 58 218 60 57 213 58 53 210 56 48 209 55 45 208 54 42 205 52 38 198 51 35 190 53 35 185 54 36 187 56 38 191 59 44 192 60 47 191 57 45 192 58 47 197 60 50 229 88 81 220 77 71 202 55 48 199 48 41 215 60 55 222 65 58 218 59 53 223 60 53 231 62 57 233 61 57 230 63 57 225 64 56 217 63 53 208 60 50 200 58 46 193 57 45 187 57 44 187 61 49 203 78 72 224 99 95 236 110 111 250 124 127 255 132 136 255 125 133 252 118 127 250 119 127 245 122 127 247 122 128 255 118 128 255 109 123 255 98 116 254 91 110 250 84 104 240 71 92 241 61 86 240 68 90 225 79 92 195 91 90 146 104 82 111 109 71 95 115 66 92 121 67 100 122 73 108 125 80 116 129 86 118 131 88 114 129 88 111 129 87 109 135 90 108 142 92 111 149 98 117 157 104 123 164 108 129 168 111 132 170 113 135 170 112 134 172 113 136 176 116 139 179 117 140 182 118 138 183 118 138 183 118 139 184 119 144 184 122 145 180 124 143 171 123 144 165 124 154 165 133 170 172 150 187 180 164 197 184 175 198 184 181 177 171 175 161 158 165 151 146 153 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 91 75 59 90 74 58 90 74 58 90 74 58 91 75 59 91 75 59 92 76 60 92 76 60 92 76 60 93 76 60 94 75 60 94 75 60 94 77 61 94 77 59 95 78 60 94 79 60 94 79 60 94 79 60 94 78 62 94 78 62 92 79 63 94 78 65 93 79 66 94 80 69 94 79 74 98 78 89 99 80 100 99 84 113 101 89 125 108 101 145 120 114 162 127 119 168 131 118 164 148 125 167 172 134 171 194 137 169 206 130 158 218 119 148 223 108 137 218 89 119 216 69 95 236 70 84 242 73 78 233 77 78 219 76 72 205 71 62 202 69 60 210 69 62 219 67 62 234 66 66 242 63 67 248 63 71 246 65 74 237 68 73 222 68 70 205 66 63 192 63 57 189 65 55 181 61 47 174 58 43 171 58 42 170 57 41 174 56 42 187 59 46 204 63 54 225 70 65 226 61 59 238 66 66 235 65 65 222 59 54 227 74 66 230 88 76 213 75 62 200 64 50 192 56 40 188 51 35 193 56 40 200 60 45 201 58 42 203 55 41 208 56 43 206 48 37 215 51 41 224 56 47 233 59 52 237 58 53 237 54 48 235 48 43 229 44 39 223 48 43 223 50 44 229 49 48 235 50 48 241 51 53 244 51 54 246 53 56 244 53 58 235 46 53 232 45 54 235 47 61 240 49 67 242 46 70 245 42 71 252 44 78 255 52 82 245 58 77 229 51 63 238 62 75 255 92 105 255 104 118 255 85 100 245 67 83 247 64 82 238 51 68 237 51 65 237 51 62 233 54 60 227 57 57 219 56 51 206 52 42 199 47 36 203 50 42 199 46 40 208 55 50 242 89 84 246 92 90 242 88 86 219 65 63 226 72 70 220 66 64 212 60 55 206 55 48 205 54 45 207 56 45 207 57 43 202 55 39 194 53 35 185 56 35 179 57 36 181 58 40 184 61 45 185 59 44 182 54 41 188 55 46 198 61 53 219 78 71 217 69 65 206 53 48 208 49 45 225 62 57 231 64 58 227 56 49 231 53 49 235 50 48 238 50 49 235 53 50 231 56 51 225 58 50 216 58 47 208 57 46 200 58 46 190 54 42 186 56 43 200 73 66 220 95 89 235 110 108 251 125 128 255 133 137 255 126 131 247 116 124 248 118 126 245 122 127 248 123 129 254 116 129 255 108 124 255 97 117 255 90 112 247 81 101 241 72 93 240 62 86 238 69 90 227 83 93 188 86 82 131 91 66 98 98 60 92 112 63 91 118 67 102 121 75 110 126 81 116 129 86 120 133 90 121 136 95 119 140 97 121 149 101 120 154 104 122 160 109 124 167 113 129 170 114 132 171 114 133 171 112 134 169 111 137 172 114 139 174 116 138 178 116 138 180 116 136 181 116 135 182 114 137 184 116 139 184 119 143 183 123 140 173 120 141 164 120 151 165 130 170 174 149 191 186 167 203 193 181 207 198 193 188 186 191 168 170 182 156 156 168 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 90 74 58 91 75 59 91 75 59 92 76 60 92 76 60 93 76 60 94 75 60 94 75 60 94 75 60 95 76 61 94 77 59 95 78 60 94 79 60 94 79 60 93 78 59 93 78 59 94 79 60 95 79 63 95 79 63 96 80 64 97 81 65 98 80 70 101 76 80 101 77 93 97 79 101 98 85 115 104 96 133 116 111 151 123 116 157 125 113 151 143 118 150 174 131 159 203 140 161 218 131 150 227 116 133 232 101 117 230 81 100 228 63 80 242 55 72 252 64 78 244 73 81 227 71 74 209 65 64 203 66 60 209 67 63 217 67 66 230 67 70 235 64 70 239 64 71 239 66 72 231 68 73 218 68 69 201 66 62 190 63 54 186 64 53 177 59 45 169 56 40 168 57 40 170 57 41 176 56 42 188 58 45 202 59 51 232 73 69 233 63 63 235 61 62 229 55 56 218 50 47 222 65 58 238 90 80 244 104 91 218 80 67 201 65 51 190 53 37 194 54 39 199 57 43 200 57 43 203 55 43 210 56 44 209 48 38 218 54 45 230 59 52 233 59 52 234 52 48 232 47 44 234 45 43 235 45 45 241 52 56 243 52 59 247 51 61 250 50 60 251 49 61 253 49 61 250 48 60 247 49 62 244 49 65 241 50 66 242 53 75 243 53 78 242 49 78 244 46 79 254 49 88 255 62 95 230 51 72 248 78 91 255 95 108 255 92 107 252 84 99 250 79 95 244 68 88 233 56 74 243 65 81 234 58 71 221 50 58 210 47 50 202 50 45 194 56 45 189 59 43 188 58 42 196 58 47 192 50 40 217 74 66 250 107 99 221 76 71 225 80 75 207 59 57 207 59 57 224 76 74 212 64 60 202 55 48 202 55 45 206 60 47 205 60 43 203 58 41 196 59 40 180 59 38 173 58 37 175 60 41 179 62 45 177 57 41 175 51 39 186 58 47 202 68 59 214 71 65 216 67 61 212 55 50 215 50 46 231 59 55 236 58 54 232 50 46 237 50 45 242 44 45 244 44 44 242 46 47 239 51 49 232 55 49 226 58 49 218 60 49 210 62 50 194 54 41 186 52 41 197 66 58 215 88 82 231 106 104 250 124 125 255 134 137 255 127 132 248 117 125 249 119 127 246 123 128 247 122 128 252 114 127 253 105 121 255 94 115 255 89 111 245 79 99 244 75 96 242 64 88 239 70 91 229 85 95 182 83 78 121 84 58 94 96 56 96 115 69 97 124 73 110 129 83 118 134 89 123 136 93 126 139 96 129 144 103 130 151 108 128 156 108 125 159 109 124 164 111 125 168 112 128 169 111 130 170 110 131 169 108 133 169 108 137 170 113 139 173 113 137 175 114 136 178 114 133 178 111 133 180 112 135 182 114 137 184 116 139 181 118 135 173 116 140 166 119 153 169 132 175 181 153 198 196 175 213 206 190 217 210 204 194 194 202 172 178 192 155 161 175 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 90 75 56 91 76 57 91 76 57 92 77 58 92 77 58 93 76 58 94 75 60 96 74 60 94 75 60 95 76 61 94 77 59 95 78 60 94 79 60 94 79 60 94 79 58 95 80 59 96 79 59 97 80 62 97 80 62 97 80 62 97 80 60 100 78 65 104 75 77 103 75 87 99 78 95 98 84 109 106 97 128 118 112 146 124 118 152 128 115 145 143 117 142 173 128 148 205 134 148 222 127 135 237 113 121 246 101 108 246 82 91 244 62 75 248 47 66 255 55 75 251 65 79 235 64 73 219 63 67 214 66 66 213 67 67 215 65 66 224 65 69 227 64 69 230 63 70 228 65 70 223 67 70 212 66 66 199 64 60 189 62 53 184 62 51 175 57 43 168 55 39 169 58 41 173 60 42 180 60 44 193 61 49 207 63 55 223 61 58 229 57 57 227 48 51 226 47 50 224 52 50 219 57 52 230 77 69 252 108 97 242 104 91 217 81 67 198 60 47 198 58 45 200 58 46 201 55 42 205 54 43 213 56 47 213 52 44 222 55 47 230 57 51 232 54 50 233 49 47 232 47 44 238 49 47 245 49 53 255 50 66 255 48 68 255 45 69 255 43 65 255 38 63 255 35 60 250 32 56 244 32 55 246 39 65 243 43 69 242 47 77 242 49 80 240 44 80 243 42 84 254 51 96 255 66 104 240 67 87 255 95 108 255 103 116 247 85 100 236 74 89 239 74 90 234 65 84 217 49 66 235 64 82 221 55 67 201 45 49 186 40 40 177 46 36 171 56 38 165 63 38 168 64 39 184 63 46 188 58 44 221 89 77 225 93 81 205 71 62 205 68 62 193 54 51 201 59 55 228 85 81 213 70 64 201 57 49 200 56 45 201 58 44 200 57 40 200 57 40 196 61 41 177 63 39 166 60 38 168 59 38 172 61 42 171 55 40 172 51 40 188 61 52 211 76 70 214 71 65 221 69 64 219 57 54 220 51 48 233 55 51 236 53 49 235 48 43 244 49 45 253 44 47 255 43 45 250 46 47 244 49 47 237 52 47 230 56 49 223 59 49 216 62 50 201 57 46 189 51 40 192 59 50 207 78 72 225 97 94 247 121 122 255 136 138 255 131 135 252 121 129 252 122 130 248 124 132 247 122 130 249 111 124 249 101 117 252 90 111 252 86 108 238 75 96 242 74 97 240 64 87 236 69 89 225 84 93 174 77 71 112 77 49 92 94 54 95 114 68 102 126 78 117 136 91 127 142 99 132 144 104 134 146 106 136 151 110 137 158 115 136 164 116 132 166 116 127 167 114 125 168 112 127 168 110 129 169 109 131 169 108 134 168 108 136 167 110 138 169 110 136 172 111 134 174 111 130 175 108 130 177 107 131 181 110 133 183 114 135 179 116 134 173 116 140 168 119 155 173 133 176 185 154 199 199 175 214 207 189 215 210 204 188 192 201 165 174 189 147 156 171 91 74 56 90 75 56 91 74 56 90 75 56 91 74 56 90 75 56 91 74 56 90 75 56 91 74 56 90 75 56 91 74 56 91 76 57 92 75 57 92 77 58 93 76 58 93 76 58 94 75 60 94 75 60 94 75 60 94 77 61 94 77 61 94 79 60 94 79 60 92 79 60 96 81 62 97 82 61 97 82 63 98 81 63 98 81 63 97 80 62 97 79 59 98 76 63 107 77 75 106 76 84 101 79 92 100 87 107 107 101 127 120 117 148 125 124 156 127 120 151 145 122 148 171 129 149 198 132 144 217 126 133 238 117 122 252 109 111 253 90 91 249 70 76 247 52 69 255 58 78 251 64 81 238 63 76 229 65 74 225 69 73 221 66 70 215 60 64 222 63 68 223 62 67 225 62 67 222 64 65 218 66 65 208 65 61 197 62 56 188 61 52 181 63 49 172 59 43 169 56 40 173 60 44 180 63 46 187 64 49 202 65 55 216 67 61 217 55 52 225 56 53 222 46 46 226 51 48 230 58 54 211 48 39 207 53 41 235 85 71 255 119 106 235 91 80 209 67 55 202 60 48 203 59 48 201 55 42 205 54 43 212 58 48 218 55 48 223 56 50 229 54 51 231 51 50 234 48 49 237 49 50 244 51 54 252 53 60 252 37 53 255 35 56 255 34 56 255 33 56 255 32 55 255 31 53 251 29 52 246 30 53 237 28 50 236 32 57 237 39 66 238 41 71 237 39 74 239 41 77 253 53 92 255 70 104 255 96 115 254 94 106 247 85 98 242 80 93 242 80 93 240 75 89 227 62 76 210 48 59 218 61 70 205 54 59 187 47 46 175 46 40 168 52 39 162 59 40 155 63 38 157 61 37 170 57 39 178 56 43 210 86 74 187 59 50 196 63 56 190 52 49 189 50 47 206 67 64 229 87 83 213 72 65 200 57 49 196 54 42 197 54 40 196 53 37 198 53 36 195 58 40 177 60 40 167 58 38 168 55 37 173 57 42 172 52 38 175 49 37 194 63 53 219 82 74 217 73 65 225 72 66 222 59 54 222 50 46 234 52 49 237 49 47 239 45 43 252 50 50 254 44 47 253 43 46 249 43 45 243 43 43 237 45 42 230 49 42 223 52 44 214 56 44 209 61 49 191 50 40 188 55 46 200 73 66 217 92 88 243 119 119 255 137 139 255 134 138 253 126 133 255 125 133 252 125 134 253 119 130 252 107 122 249 96 114 249 87 108 249 83 105 234 68 92 240 71 94 236 59 85 228 65 86 215 81 90 162 73 67 102 70 45 88 93 53 90 109 63 98 125 74 116 140 92 128 150 103 135 152 108 136 155 110 138 160 114 139 165 118 140 172 122 134 171 119 129 170 114 126 167 109 124 165 105 125 165 103 129 165 103 131 165 105 131 164 107 133 166 109 132 170 109 130 172 108 128 173 104 128 175 105 129 179 106 132 182 111 137 182 115 136 176 114 140 173 120 153 176 132 172 188 152 189 198 169 201 203 181 203 205 194 182 191 196 159 171 183 140 152 164 93 75 55 92 75 55 93 75 55 92 75 55 93 75 55 92 75 55 93 75 55 92 75 55 94 76 56 93 76 56 94 76 56 93 76 56 94 76 56 93 76 56 94 76 56 93 76 58 93 74 60 93 75 61 94 76 62 92 76 60 92 76 60 91 78 61 93 80 63 94 83 65 96 83 66 95 82 63 96 80 64 98 81 65 99 82 66 100 81 66 100 78 65 100 76 66 107 75 76 104 75 80 101 79 91 102 91 108 110 107 134 120 123 156 129 133 170 137 137 173 143 132 166 165 136 166 190 136 159 208 130 144 225 121 128 240 114 115 249 106 102 255 97 96 244 77 87 237 65 79 231 61 74 233 66 76 235 69 79 231 65 75 228 61 69 229 62 70 226 59 66 224 59 63 221 58 61 217 59 58 212 60 57 204 59 54 196 58 48 185 57 44 167 54 38 175 65 48 173 60 44 172 54 40 191 65 53 204 70 61 204 61 53 208 55 50 218 56 53 220 55 49 222 53 46 222 54 45 222 56 42 221 60 42 215 58 39 211 54 37 217 59 48 240 83 76 242 90 79 217 69 57 199 56 42 205 62 46 212 66 51 210 58 45 211 50 42 240 71 66 225 47 47 239 54 59 244 55 62 239 45 56 255 66 77 240 40 51 250 38 50 255 41 50 255 41 50 249 29 39 253 34 42 255 39 47 254 39 47 240 29 38 238 31 41 248 44 55 233 33 46 235 38 55 240 44 64 227 33 57 255 86 112 229 43 66 255 92 108 255 94 105 255 89 99 251 84 92 246 79 87 236 71 77 222 62 64 208 54 52 204 61 55 197 64 55 184 62 49 167 54 38 156 49 33 154 53 35 157 58 39 160 59 41 167 56 45 174 55 47 194 69 63 191 59 55 189 51 49 196 54 52 197 53 52 212 68 67 219 76 72 218 75 69 209 68 59 200 58 48 196 52 41 199 53 40 203 52 41 197 53 42 188 60 47 179 57 44 173 47 35 171 40 30 179 45 36 195 57 47 210 67 59 216 72 63 228 80 70 223 69 61 218 55 48 221 48 42 231 48 44 242 50 49 249 49 51 253 49 52 247 47 49 246 48 49 246 48 49 243 48 46 242 48 46 237 50 45 230 53 45 221 57 47 213 61 48 190 50 37 192 62 49 185 61 51 214 95 89 233 115 113 255 143 143 251 132 134 255 135 140 255 132 141 255 120 135 253 104 123 252 95 116 254 92 115 250 86 110 243 77 101 242 72 99 235 60 89 237 62 91 224 66 89 216 94 105 141 63 59 92 67 45 83 91 54 92 116 66 103 134 77 119 150 93 125 156 99 127 157 103 128 161 106 131 166 110 130 168 111 128 167 110 127 166 109 126 165 108 125 165 105 124 164 104 125 163 102 127 163 101 127 163 102 127 165 108 127 166 109 129 171 108 127 172 107 126 173 103 127 174 102 129 177 103 131 179 105 135 181 109 139 180 114 139 177 118 142 174 124 153 180 137 167 189 153 175 194 164 178 193 174 163 175 173 141 152 158 124 135 141 93 75 55 93 75 55 93 75 55 93 75 55 93 75 55 93 75 55 93 75 55 93 75 55 94 76 56 94 76 56 94 76 56 94 76 56 94 76 56 94 76 56 94 76 56 94 75 58 92 75 59 94 76 62 95 77 63 94 78 62 91 78 61 91 78 61 92 81 63 94 82 66 95 83 67 93 81 65 93 79 66 95 79 66 96 78 68 98 80 70 99 79 72 101 77 73 105 76 78 103 78 84 101 83 97 103 95 116 110 111 142 121 126 166 128 136 183 135 139 187 158 150 199 163 140 182 171 127 160 185 120 142 211 121 133 234 124 125 244 117 111 244 105 100 245 94 99 238 81 90 233 71 82 238 74 83 243 76 86 242 71 80 238 64 74 234 60 69 228 57 63 224 58 60 220 57 58 215 60 56 210 61 55 203 60 52 196 58 47 186 59 44 171 60 43 170 63 45 169 56 40 178 58 44 193 65 54 197 60 52 199 54 49 212 60 55 210 53 48 214 53 45 215 53 42 216 52 40 217 56 38 219 58 38 219 59 37 218 57 39 221 54 46 230 65 59 235 77 68 225 73 60 208 62 47 199 56 40 202 56 41 211 59 46 221 58 51 245 73 69 228 48 49 241 55 60 246 54 65 241 46 60 255 63 77 237 37 50 243 36 44 247 37 40 251 41 44 253 43 44 252 42 43 248 40 40 246 40 40 247 43 44 239 36 39 237 37 40 234 37 44 253 59 68 216 26 38 238 50 65 250 63 80 213 35 51 255 104 117 255 97 106 255 90 97 253 86 93 247 78 83 231 65 67 218 59 56 210 61 54 193 55 44 194 66 53 188 71 54 172 61 44 154 47 31 147 39 26 146 38 25 147 39 27 158 45 37 176 58 54 209 84 80 206 72 71 195 53 52 198 52 53 209 61 61 235 87 85 216 71 66 214 71 63 208 65 57 199 57 47 198 51 41 202 54 44 208 55 47 206 55 48 199 61 51 194 57 49 194 53 46 195 50 45 201 52 46 209 56 51 216 63 57 222 69 61 228 74 64 222 65 56 218 54 45 221 48 42 231 48 44 242 50 49 251 48 51 251 48 51 244 48 50 243 49 50 244 48 49 243 47 48 243 48 46 238 49 45 231 52 45 223 57 45 215 61 49 191 51 36 190 60 47 183 61 50 211 94 87 233 118 115 255 144 144 249 133 136 253 134 140 255 128 138 255 115 132 255 100 121 255 92 116 255 89 114 252 84 110 246 76 103 243 68 97 236 61 90 236 66 95 223 74 96 194 83 92 128 61 55 88 67 46 82 92 57 91 118 67 101 135 75 115 149 89 120 156 95 119 157 98 123 161 102 125 165 105 125 166 106 124 165 105 124 165 105 124 164 104 123 163 101 123 161 100 123 161 100 125 161 99 126 162 101 124 163 106 125 166 108 125 169 108 125 170 105 124 171 101 125 173 99 127 175 99 130 177 99 133 176 104 135 178 107 136 175 112 136 171 115 139 171 124 144 172 132 144 170 135 140 162 139 118 133 126 99 111 111 83 95 95 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 93 76 56 94 75 58 95 78 62 97 80 64 96 80 64 93 80 63 92 79 62 91 79 63 91 82 67 91 81 69 91 81 71 92 79 71 92 79 73 95 80 77 99 81 79 102 84 84 103 84 86 103 84 88 103 86 96 104 92 112 108 105 134 115 118 161 124 131 185 130 138 201 138 142 206 152 146 210 160 139 196 170 131 178 185 125 159 207 128 147 228 131 138 238 126 122 242 115 109 248 102 105 242 85 92 234 73 81 237 72 79 243 73 82 245 71 81 242 65 75 238 61 69 228 55 61 224 55 58 219 56 57 213 60 55 207 63 55 201 63 52 193 61 48 184 61 45 174 61 45 170 60 43 171 58 44 184 66 54 199 72 63 192 59 50 187 48 41 202 58 50 205 54 47 208 54 46 213 55 44 216 56 44 217 55 40 217 56 38 220 57 38 224 58 42 221 52 45 219 52 46 226 65 57 233 79 67 222 72 58 200 53 37 200 50 35 217 64 50 226 62 53 245 72 68 231 48 50 242 53 59 248 54 63 245 49 61 255 66 80 244 46 59 240 41 48 235 35 38 236 36 39 249 49 51 245 45 47 239 39 39 236 38 37 245 49 50 234 40 41 245 55 57 231 42 48 225 40 48 234 50 60 255 81 93 237 59 73 255 89 101 255 94 102 242 85 92 239 78 84 241 76 82 235 69 73 222 58 59 214 55 52 214 62 57 194 53 44 194 62 50 189 65 53 181 60 49 173 55 45 168 49 41 162 43 35 157 38 32 155 36 30 169 47 42 199 69 67 194 58 58 188 44 44 200 51 53 215 65 66 244 94 93 208 63 58 210 67 59 208 65 57 203 61 51 204 57 47 212 61 52 218 64 56 219 64 59 219 64 60 216 61 59 221 62 59 227 65 63 228 62 62 224 58 58 227 63 61 235 73 68 224 66 57 221 60 52 217 53 44 221 50 43 231 49 45 240 51 49 245 49 50 248 48 50 244 48 50 244 48 50 244 48 49 243 47 48 243 48 46 238 49 45 231 52 45 223 57 45 216 62 50 192 52 37 186 56 43 181 59 48 208 91 84 237 122 119 255 147 146 251 135 138 253 129 137 255 124 137 255 113 129 253 100 120 254 90 114 255 85 111 252 79 107 250 73 102 244 65 95 238 63 92 234 71 98 223 84 103 165 64 72 117 56 51 88 70 50 85 95 60 95 119 69 102 135 78 114 147 90 117 152 94 116 154 95 120 158 99 123 163 103 123 163 103 121 162 102 121 162 102 121 161 99 120 160 98 121 159 98 121 160 97 124 160 98 122 160 99 122 162 102 123 164 104 123 167 104 123 168 101 123 169 97 123 169 96 125 171 96 127 174 96 135 178 106 138 181 110 139 178 115 137 172 116 134 166 119 130 158 117 121 147 110 111 134 108 81 99 87 64 79 76 50 65 62 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 77 57 94 76 56 96 78 58 97 80 60 96 81 62 93 80 63 90 78 62 89 79 67 88 80 69 88 79 72 91 81 79 95 85 84 98 88 89 101 88 95 105 89 99 108 92 102 107 94 104 108 96 108 108 99 116 111 107 134 114 116 155 121 126 181 127 135 200 133 141 214 140 143 220 142 135 212 159 139 208 173 138 194 179 129 167 189 121 144 204 123 130 222 129 124 241 130 123 254 116 116 253 100 103 244 88 92 242 79 84 242 73 80 242 68 77 240 63 71 239 60 66 229 54 59 225 55 56 219 57 55 213 60 55 206 64 54 198 64 52 191 64 49 184 63 46 173 57 42 173 62 45 177 61 48 188 70 58 204 82 71 199 72 63 186 53 46 186 49 41 200 57 49 205 56 49 211 59 48 217 61 49 219 59 45 217 54 39 220 54 38 224 56 43 224 53 45 219 50 43 224 61 52 236 78 66 227 75 61 210 58 44 209 56 42 224 66 54 222 54 45 240 62 58 233 47 48 239 48 53 245 50 58 248 52 62 255 74 86 255 70 79 253 62 69 242 51 56 226 36 38 237 47 49 234 44 44 240 50 50 232 42 42 235 47 46 241 57 57 209 26 28 229 50 54 220 43 49 231 56 63 239 68 76 255 87 98 241 75 85 217 60 67 219 64 68 225 66 70 225 62 65 222 57 61 220 56 57 218 55 56 212 57 55 201 56 51 195 56 49 190 57 50 193 64 58 206 77 72 215 85 83 210 77 78 196 66 64 178 55 50 182 57 53 207 75 73 217 77 76 227 81 82 239 89 90 234 82 81 241 89 86 201 53 49 206 62 54 210 66 57 208 64 55 211 63 53 217 66 57 224 67 60 226 64 59 233 63 64 231 56 61 236 57 61 242 63 67 239 58 63 232 53 56 236 62 61 246 77 74 222 57 51 219 54 48 218 51 43 222 51 44 229 52 46 236 51 48 242 50 49 244 48 49 244 48 50 246 47 50 246 48 49 245 47 48 245 47 46 240 48 45 233 52 45 224 56 45 217 63 51 194 54 39 183 53 40 179 57 46 203 86 79 239 124 121 255 147 146 254 135 139 255 128 137 255 121 135 252 110 126 250 99 118 250 88 111 252 80 106 251 72 102 250 67 98 242 61 92 239 66 94 229 77 100 215 90 104 136 50 53 107 57 48 92 77 56 91 101 67 99 123 75 106 137 80 115 146 89 116 149 92 117 152 94 119 157 98 121 161 101 122 162 102 119 160 100 118 160 97 119 159 97 118 158 96 120 159 96 120 159 96 123 159 97 122 160 99 122 162 102 122 163 103 122 167 102 122 167 98 122 168 96 122 168 93 124 171 93 126 173 95 134 178 103 139 180 110 140 179 116 138 173 115 134 166 117 128 157 113 116 142 105 105 128 100 80 98 84 67 82 75 56 71 64 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 59 94 77 57 93 75 53 95 77 53 96 80 57 95 80 59 92 79 62 90 78 64 88 79 70 88 81 75 89 80 81 96 87 92 103 96 104 110 102 115 115 104 121 115 103 123 115 103 125 113 103 127 111 108 129 112 112 138 114 118 153 118 124 172 122 130 193 127 135 208 132 139 220 138 140 225 147 142 224 157 141 214 160 132 190 158 117 159 160 108 130 172 110 115 188 117 111 210 118 107 240 115 109 253 109 108 254 104 105 251 95 96 249 83 87 244 71 77 237 60 66 234 55 61 232 53 59 227 54 56 221 57 56 215 60 55 208 64 55 199 65 53 192 65 48 185 64 47 173 55 41 180 64 51 175 58 48 176 59 49 200 82 72 213 92 81 201 77 67 187 59 48 190 57 48 193 55 45 204 57 47 214 62 51 219 61 49 218 54 42 220 52 39 226 54 42 224 51 44 226 55 48 228 61 53 229 69 57 226 70 57 222 66 51 222 65 50 226 62 50 219 48 38 234 55 50 236 48 47 238 45 48 239 44 50 246 51 59 255 76 84 255 87 94 255 90 95 255 79 83 225 46 49 227 48 51 224 44 45 247 69 69 232 54 54 220 44 44 218 44 45 234 61 63 219 49 52 216 50 54 255 98 104 224 61 66 202 41 49 202 45 52 193 38 42 213 59 61 224 65 69 218 55 58 217 51 55 223 57 61 220 55 59 205 47 48 204 52 51 205 59 59 211 71 70 221 83 83 235 96 99 245 105 108 244 101 107 234 94 97 196 64 62 198 69 64 229 94 91 248 104 103 255 111 112 255 106 106 229 75 75 215 61 59 201 52 48 209 62 55 215 68 60 214 67 59 213 62 53 213 60 52 216 58 49 220 52 49 238 53 59 241 45 55 240 44 54 242 46 56 239 44 52 235 44 51 243 57 60 254 74 75 223 51 47 220 51 46 218 51 43 220 51 44 227 53 46 234 52 48 239 52 47 242 50 49 244 48 50 246 47 50 247 47 49 246 46 48 245 47 46 240 48 45 234 51 45 226 55 45 217 63 51 198 56 42 180 50 37 178 56 45 195 78 71 239 124 121 255 146 145 255 135 140 255 126 137 255 117 132 249 108 124 246 97 116 245 85 109 247 74 102 249 64 96 249 59 93 243 58 92 237 68 97 219 80 101 193 87 97 114 46 43 98 62 48 96 84 62 99 106 73 102 124 77 107 137 83 116 146 92 117 150 95 118 153 95 120 158 99 121 161 99 120 160 98 117 159 96 117 159 96 117 157 95 118 158 95 119 158 95 120 159 96 123 159 97 122 161 98 122 162 100 123 165 101 124 166 100 124 167 96 121 167 94 121 168 90 123 170 92 125 172 94 128 172 97 133 175 103 135 174 109 135 170 112 133 165 115 131 160 114 123 149 110 114 138 106 100 119 100 91 107 94 81 97 84 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 60 95 78 58 94 76 52 95 78 52 96 78 56 94 79 58 91 78 62 89 79 69 90 83 77 90 84 84 95 90 97 104 98 112 114 109 129 122 117 140 123 117 145 123 113 147 122 112 147 118 112 148 113 116 149 114 119 157 116 124 170 119 128 183 122 131 196 126 134 207 132 138 216 139 141 218 150 144 218 153 139 201 155 133 180 162 131 162 170 132 145 171 126 123 159 107 93 153 82 64 186 78 66 210 82 73 225 88 82 233 88 85 239 84 82 241 75 77 236 63 67 229 52 58 235 56 60 231 57 59 226 58 57 218 61 56 211 64 56 203 65 54 195 63 48 188 62 47 179 57 44 186 65 54 171 53 43 163 46 36 190 73 63 217 103 92 217 100 90 203 85 73 184 60 50 184 54 41 192 51 41 206 58 48 217 59 48 218 54 44 222 51 41 228 54 45 223 49 42 228 55 49 227 59 50 221 57 47 222 62 48 227 70 53 228 66 51 223 57 43 222 48 39 233 52 45 240 51 49 239 45 46 236 41 45 242 47 53 255 66 71 255 82 87 255 93 98 255 92 97 226 57 60 227 57 60 213 43 44 244 74 75 226 56 57 215 47 47 217 51 53 203 39 40 202 37 41 247 87 89 220 61 65 213 57 61 209 54 58 186 31 35 196 40 43 219 61 62 229 66 69 219 53 57 215 44 50 220 49 55 217 48 53 204 41 46 208 52 55 226 76 78 244 98 101 250 105 110 247 100 108 246 96 105 248 96 108 248 98 107 214 76 76 213 78 74 234 92 90 234 86 84 231 77 77 227 72 70 207 52 50 206 51 47 217 65 60 224 75 68 228 79 72 223 74 67 217 64 56 215 58 51 215 54 46 220 46 45 245 50 58 251 45 58 248 42 55 245 39 52 245 41 52 248 48 58 255 62 67 255 74 74 224 49 46 222 51 44 220 51 44 221 53 44 225 52 45 231 52 47 237 52 47 240 51 47 244 48 50 247 47 50 249 46 49 248 45 48 246 46 46 241 47 45 235 50 45 226 55 45 217 61 49 201 59 45 179 49 36 177 55 44 186 67 61 236 121 118 255 141 141 255 136 141 255 123 135 255 113 129 246 104 120 243 96 114 243 83 107 244 69 98 249 58 92 249 55 90 243 58 92 235 72 99 205 80 96 160 74 77 102 52 43 89 66 48 95 87 64 99 106 73 102 124 78 107 136 82 116 145 91 119 149 95 120 153 96 123 158 100 122 160 99 118 158 96 115 155 93 114 156 92 115 155 92 116 156 93 118 157 94 119 158 95 123 159 97 122 161 98 121 161 98 122 164 98 124 167 98 123 166 95 120 166 91 120 167 89 122 169 89 123 170 90 126 170 95 131 173 101 133 172 107 135 169 109 137 167 115 137 165 117 132 157 115 124 148 114 117 137 112 111 128 109 103 120 102 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 95 78 58 97 80 54 97 80 54 97 79 57 94 79 60 91 79 65 91 82 75 92 86 86 95 90 97 107 103 118 115 111 134 125 122 151 130 126 161 129 124 165 125 119 163 123 117 165 120 118 167 115 121 171 115 125 178 120 129 184 123 132 191 126 134 196 132 138 200 141 142 206 148 147 205 154 147 198 160 150 187 171 156 179 188 167 176 201 173 169 197 166 148 170 136 109 154 103 76 155 70 50 173 65 52 181 65 52 194 66 57 214 72 68 232 78 78 238 74 75 236 63 67 235 61 63 233 59 61 229 59 59 224 60 58 217 64 56 210 63 53 202 62 49 194 60 48 189 58 48 190 63 54 175 52 44 167 49 39 187 73 63 209 99 86 214 104 91 213 101 87 195 79 66 186 62 50 186 52 41 199 55 44 214 57 48 217 53 44 223 50 43 231 54 48 226 48 44 227 52 47 226 55 47 222 55 46 224 62 49 229 67 52 228 62 48 222 52 37 229 51 41 232 47 42 240 51 47 240 46 46 239 45 46 241 48 51 242 54 55 244 64 67 246 77 82 252 89 94 233 70 75 246 81 87 216 51 55 235 70 74 221 56 60 230 65 69 216 53 56 204 44 46 207 46 51 226 70 73 210 55 59 208 55 58 185 35 37 213 59 61 217 57 59 226 60 62 232 62 65 230 55 60 223 46 54 219 42 50 224 50 59 228 61 68 238 77 83 250 95 101 255 109 115 255 106 115 248 97 106 245 91 103 246 90 104 246 92 102 244 100 100 232 90 86 232 87 84 216 64 61 207 49 48 212 52 52 211 51 51 225 67 64 227 74 69 233 82 75 234 83 76 225 74 65 217 63 55 216 57 51 219 56 49 227 51 51 243 46 55 255 48 62 255 48 61 250 42 55 252 46 58 255 59 69 255 67 72 251 65 66 227 49 47 223 52 45 221 52 45 221 53 44 226 52 45 230 51 44 237 52 47 241 52 48 244 48 50 247 47 50 249 46 49 248 45 48 246 46 46 241 47 45 235 50 45 227 55 45 216 58 47 205 62 48 181 49 37 177 55 44 178 59 53 233 115 113 255 138 138 255 135 141 255 116 132 253 104 124 243 97 116 241 92 112 244 82 106 245 68 97 251 55 93 252 56 94 245 61 95 232 78 102 188 81 91 125 57 54 94 60 48 81 68 49 91 86 64 93 100 69 101 119 77 106 133 82 114 142 91 118 148 94 121 154 97 123 158 100 120 158 97 115 155 93 112 152 89 112 153 87 113 154 88 113 154 88 116 155 92 117 156 93 121 157 95 120 159 96 120 161 95 121 162 94 122 165 94 121 164 92 120 164 89 120 164 87 121 165 86 123 167 88 127 169 95 130 172 100 132 171 104 134 168 108 135 165 111 134 162 113 128 154 109 120 145 106 112 132 104 108 128 101 101 121 96 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 95 80 61 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 94 79 60 95 78 58 99 81 57 99 81 57 97 80 60 93 80 64 90 80 71 92 84 82 95 90 97 97 95 109 116 114 138 121 120 152 129 128 168 131 129 176 126 126 176 121 121 175 121 117 176 119 119 181 119 124 190 120 127 195 125 133 196 130 136 196 133 138 193 141 143 191 151 150 190 160 157 188 172 167 187 182 172 180 190 179 175 200 184 169 208 190 166 214 193 162 209 187 150 208 172 136 175 111 84 174 92 71 164 71 53 168 62 48 194 71 63 224 87 81 239 87 86 241 78 79 233 64 67 234 61 63 230 60 61 226 61 59 223 61 58 215 61 53 207 59 49 201 57 48 193 56 48 193 60 53 185 58 51 184 61 53 193 79 69 199 88 77 199 93 79 209 101 88 211 99 85 194 76 62 188 58 45 197 56 46 210 57 49 215 52 45 223 50 44 231 54 48 230 52 48 225 50 45 224 53 46 227 60 51 231 67 55 230 67 52 226 58 45 223 51 37 233 52 43 229 45 37 240 48 45 240 48 45 241 52 50 242 54 53 232 46 47 226 50 52 231 66 70 247 88 93 246 87 92 255 111 117 229 68 74 235 72 77 224 60 67 254 91 96 255 109 115 220 59 64 255 123 128 255 108 112 234 81 84 211 61 63 198 48 50 215 59 62 241 72 75 235 59 62 237 56 63 246 62 70 240 56 66 230 46 56 241 64 74 255 95 103 255 110 119 255 107 114 254 100 110 245 94 103 247 95 107 253 99 111 253 95 110 246 90 101 241 93 93 227 80 73 226 74 71 213 55 52 210 47 48 217 53 52 210 48 46 216 57 53 223 68 63 227 74 68 226 73 65 217 64 56 211 54 47 214 52 47 220 55 49 232 54 54 234 39 47 252 48 60 254 50 61 247 43 54 249 48 58 255 62 69 253 63 65 236 52 52 226 51 46 224 53 46 222 54 45 223 52 44 225 51 42 232 51 44 239 52 47 244 52 49 246 48 49 247 47 50 249 46 49 248 45 48 248 46 46 242 47 45 235 50 45 227 55 45 215 57 46 209 63 50 182 48 37 178 54 44 176 54 49 232 112 111 255 135 136 255 134 142 255 110 128 252 99 120 241 94 113 242 90 111 245 81 106 246 67 97 253 57 95 253 59 96 242 67 98 225 84 103 174 82 87 98 48 39 89 68 51 74 69 47 85 83 60 88 93 63 99 115 76 105 129 81 113 139 91 118 146 95 122 152 98 124 157 100 120 156 95 114 153 90 110 151 85 110 151 85 110 151 85 111 152 86 114 153 90 116 155 92 119 155 93 119 158 93 119 158 91 120 161 91 121 163 91 119 163 88 118 162 87 118 162 85 119 163 84 121 165 88 122 164 90 126 166 95 129 166 99 127 161 100 126 156 102 123 151 102 114 140 93 105 130 88 95 117 81 92 113 82 86 107 76 92 76 60 94 78 62 96 80 64 96 80 64 95 79 63 95 79 63 95 79 63 97 81 65 98 82 66 95 79 63 93 77 61 93 77 61 97 81 65 99 83 67 98 82 66 96 81 62 100 83 63 97 80 62 93 80 64 94 81 73 91 81 80 90 83 90 101 97 112 115 113 137 121 120 154 122 124 165 126 128 177 128 129 185 125 127 186 120 122 183 114 115 180 108 111 182 116 119 198 118 124 202 128 131 202 139 141 198 150 151 195 164 164 190 178 176 187 188 185 180 203 197 181 211 204 176 217 207 172 219 207 165 220 207 163 221 209 161 217 203 156 217 194 152 209 168 136 184 128 103 161 93 70 203 122 103 216 116 101 189 72 63 216 81 78 247 99 99 233 75 76 229 63 65 225 57 57 227 59 58 226 58 57 219 55 53 216 54 49 214 59 54 203 56 49 192 53 46 199 66 59 187 60 51 191 73 63 198 88 75 185 79 65 206 100 86 209 99 84 204 88 73 197 71 57 196 58 47 205 54 45 216 55 47 225 54 47 227 52 47 223 48 45 223 50 44 224 55 48 228 61 52 224 60 48 221 55 41 223 53 40 229 55 44 228 47 36 234 47 38 236 47 41 238 49 45 238 50 48 235 52 48 232 53 49 226 54 52 215 55 57 230 74 78 245 89 93 237 78 83 215 56 61 215 54 60 249 88 96 255 126 132 255 120 128 255 107 113 255 99 107 255 102 109 255 101 107 245 92 97 242 89 92 252 91 96 255 87 90 255 70 75 249 58 66 248 57 65 243 51 62 235 45 57 234 50 62 238 62 72 252 85 95 255 97 105 255 104 114 254 103 112 251 100 109 254 100 110 255 97 111 251 94 103 237 83 83 223 70 64 214 56 53 214 52 49 215 49 49 215 47 46 216 51 49 219 57 52 225 68 61 220 66 58 217 63 55 214 60 52 215 57 48 219 56 49 224 57 51 230 54 54 240 55 60 243 52 59 243 52 59 246 52 60 245 54 59 242 53 57 235 51 51 227 49 47 222 51 44 222 53 46 223 55 46 224 53 43 228 51 43 233 50 44 239 50 44 245 50 48 247 49 50 248 48 51 250 47 50 249 46 49 249 47 47 243 48 46 236 51 46 229 55 46 224 63 53 204 56 44 191 54 44 175 47 38 184 59 55 210 88 87 255 152 154 254 123 131 255 109 128 255 102 124 246 93 114 239 81 104 241 72 101 249 68 101 253 61 100 245 59 96 242 79 108 209 84 100 137 61 63 80 44 32 69 58 38 68 70 46 77 77 53 90 94 67 91 105 69 99 120 77 113 136 90 120 146 98 120 150 96 116 149 92 114 150 89 113 152 89 108 149 83 109 150 82 110 151 83 111 152 84 114 153 88 116 155 90 117 156 93 117 156 91 116 155 88 116 157 87 118 160 88 119 161 87 118 162 87 118 162 85 117 161 84 116 160 83 123 165 91 123 163 93 122 158 94 117 151 91 109 139 85 98 126 77 88 114 67 83 106 62 63 85 46 63 85 47 62 84 46 91 75 59 94 78 62 96 80 64 96 80 64 96 80 64 95 79 63 96 80 64 97 81 65 98 82 66 96 80 64 95 79 63 96 80 64 98 82 66 99 83 67 98 82 66 96 80 64 102 86 71 95 81 70 92 79 71 94 84 83 97 90 97 100 96 111 109 107 131 118 119 150 119 121 162 123 125 174 125 127 184 120 124 185 113 117 181 107 112 180 108 111 182 110 113 190 117 119 206 124 126 211 137 137 209 152 152 206 168 167 199 184 182 193 201 197 186 211 206 177 219 214 172 226 219 167 231 222 167 230 221 164 228 219 164 226 216 163 219 209 158 212 199 154 212 188 154 189 155 128 170 124 100 199 138 119 202 125 109 182 86 74 211 96 91 246 114 112 236 90 91 231 75 76 226 63 64 228 62 62 233 63 64 229 59 59 224 54 54 219 54 52 214 61 56 201 56 51 202 63 56 185 54 46 184 62 51 189 75 64 182 72 59 200 93 77 221 111 96 212 96 81 198 72 58 189 53 41 196 48 38 212 54 45 220 53 45 219 48 41 226 53 49 229 57 53 228 61 55 224 60 51 220 56 46 219 53 41 223 52 42 227 53 42 236 55 46 237 53 43 237 50 43 235 48 43 231 48 44 227 50 44 225 52 46 221 53 50 214 56 55 216 62 64 228 74 76 243 87 91 250 94 98 252 92 100 254 93 101 255 97 105 240 79 87 235 74 82 238 78 86 252 92 100 255 104 111 255 101 107 244 89 95 242 79 84 236 53 58 239 45 53 241 44 54 244 47 57 238 40 53 228 34 45 227 41 54 234 57 67 251 81 90 253 92 100 255 100 108 255 101 109 255 102 110 255 101 109 252 92 104 242 82 90 229 69 69 222 60 55 219 54 52 222 54 51 223 53 53 220 51 48 218 50 47 219 54 50 224 62 57 219 62 55 216 59 52 215 58 51 219 56 49 223 56 50 229 57 53 231 58 54 233 57 59 234 55 58 235 55 58 238 55 57 238 55 57 236 54 53 229 51 49 223 50 44 220 51 44 221 54 45 223 55 44 226 54 44 229 50 43 234 49 44 242 49 44 245 50 48 247 49 50 247 48 51 250 47 50 249 46 49 247 47 47 243 48 46 236 51 46 229 55 46 223 60 51 212 61 50 194 56 46 182 49 42 183 55 52 216 90 91 255 144 147 251 115 125 254 103 122 254 94 118 247 87 111 244 80 105 246 71 102 246 65 98 250 61 99 241 66 99 227 81 104 183 76 86 119 60 56 76 50 35 62 57 35 61 65 40 71 71 47 80 83 56 88 99 65 96 114 74 110 131 88 117 143 95 118 147 93 116 147 88 113 147 86 112 148 84 107 146 79 107 148 80 108 149 81 109 150 82 112 151 86 114 153 88 115 154 91 115 154 89 116 155 88 117 157 87 117 159 87 117 159 87 116 158 84 114 158 81 113 157 82 112 156 81 110 152 80 108 148 78 104 140 76 98 129 70 88 117 63 78 105 54 70 93 47 64 87 43 64 87 45 64 87 45 64 87 45 89 76 60 91 78 62 94 81 65 94 81 65 94 81 65 94 81 65 95 82 66 96 83 67 97 84 68 96 83 67 95 82 66 96 83 67 97 84 68 97 84 68 96 83 67 94 80 67 98 85 77 92 81 77 91 81 82 99 89 98 107 100 116 113 109 132 118 117 149 121 123 164 121 123 172 121 126 182 120 124 187 110 115 181 101 105 176 96 103 175 106 110 184 114 117 196 125 125 213 135 133 217 151 148 217 169 167 216 187 185 209 203 201 202 220 215 193 229 224 184 233 228 173 237 231 169 240 232 167 237 229 166 231 225 167 226 219 165 215 207 160 203 196 154 185 174 144 170 154 129 156 130 107 171 130 112 168 110 96 158 81 71 187 93 85 222 109 105 247 117 117 238 96 95 227 74 76 226 66 68 234 65 68 235 62 64 231 57 58 224 54 54 223 61 58 212 59 54 212 65 58 194 55 48 183 55 44 183 62 51 174 61 47 182 70 56 219 106 92 223 105 91 217 91 77 202 66 54 197 50 40 209 52 43 217 54 45 217 50 44 222 53 50 233 65 62 236 71 67 224 61 54 213 50 41 213 49 39 218 50 39 222 48 37 230 52 42 232 49 41 231 46 41 230 47 41 227 50 44 226 55 47 225 61 52 224 66 57 198 45 40 202 52 51 220 68 67 240 86 88 250 94 98 247 90 97 243 83 91 241 81 91 231 69 80 232 70 81 237 77 87 251 91 101 255 107 116 255 109 115 242 87 93 225 60 66 232 47 53 242 45 52 250 50 60 251 51 62 244 44 57 236 40 52 243 55 69 255 76 87 245 74 83 244 80 87 247 87 95 252 95 102 255 100 107 255 97 105 246 82 89 232 67 73 222 57 55 222 55 49 227 55 53 233 60 56 235 59 59 230 57 53 225 53 49 221 54 48 221 58 51 217 59 50 215 57 48 215 57 48 220 55 49 225 56 51 231 58 54 233 60 56 227 57 57 227 57 57 229 57 55 231 57 56 232 56 56 230 55 52 225 52 48 219 50 43 218 54 45 219 55 45 222 56 44 226 54 44 231 50 41 235 48 41 243 48 44 247 49 48 245 49 50 245 49 51 248 48 50 247 47 49 247 47 47 242 48 46 238 51 46 231 54 46 221 57 48 220 68 57 199 56 48 187 52 46 181 47 46 228 95 98 255 131 136 248 108 119 252 99 120 251 88 115 248 81 109 251 78 108 250 69 102 243 59 93 239 61 95 233 74 102 210 85 103 155 68 74 107 60 52 79 62 44 62 60 39 59 63 40 70 68 47 72 72 48 81 92 60 89 107 69 103 124 81 114 137 91 116 143 90 113 144 85 109 143 82 107 143 79 105 144 77 105 145 75 105 146 76 107 148 80 109 150 84 110 151 85 112 151 88 113 152 87 117 156 89 117 157 87 116 156 85 114 156 84 112 154 82 109 151 77 107 149 77 106 148 76 101 141 71 97 136 69 91 127 65 85 116 59 76 105 51 69 96 45 65 88 42 62 85 39 67 93 48 68 94 49 69 95 50 87 74 58 90 77 61 92 79 63 94 81 65 93 80 64 94 81 65 95 82 66 97 84 68 96 83 67 96 83 67 96 83 67 97 84 68 97 84 68 96 83 67 95 82 66 92 80 68 90 79 77 90 81 86 98 88 99 106 99 115 113 109 134 118 117 149 120 122 163 122 124 173 119 124 180 115 121 183 109 114 180 98 105 175 93 100 172 97 103 177 108 114 190 120 123 202 137 138 221 149 146 225 164 162 225 182 181 225 199 196 217 213 209 208 225 220 198 231 227 189 235 229 179 238 233 175 238 232 174 233 226 171 227 219 170 218 211 167 203 195 158 188 182 150 166 164 139 157 152 132 150 134 118 155 127 113 155 113 99 156 98 87 181 104 96 208 113 109 251 139 137 243 118 116 232 92 93 229 76 78 229 69 71 234 65 68 234 61 63 232 60 60 223 58 56 219 60 56 222 69 63 211 67 59 195 58 48 186 58 47 176 54 41 167 49 35 191 73 59 219 97 82 234 107 92 219 83 69 201 58 44 204 52 39 212 54 43 215 52 45 217 52 50 241 77 75 254 90 88 237 75 70 217 56 48 214 51 42 219 52 43 222 50 40 223 46 38 225 44 37 225 44 37 222 45 37 220 49 41 218 54 44 217 59 48 215 63 52 194 47 39 196 52 44 206 58 54 217 67 66 223 70 72 224 69 73 228 71 78 234 77 86 241 81 93 246 86 98 247 87 97 248 91 100 255 102 111 255 107 115 241 86 94 219 56 61 233 50 55 240 47 52 241 46 54 240 43 52 235 37 50 235 41 52 249 62 73 255 83 95 237 63 73 232 65 73 234 71 76 242 81 86 255 90 96 255 88 93 244 71 77 227 54 56 225 53 51 228 55 51 234 59 56 242 64 62 244 64 63 239 61 59 230 57 53 224 55 50 221 56 50 218 57 49 217 56 48 217 56 48 220 55 49 227 55 51 232 57 54 233 58 55 226 58 55 224 59 57 227 58 55 230 58 56 231 58 54 229 56 52 224 53 46 218 51 43 218 54 44 219 55 45 222 56 44 226 54 44 231 50 41 235 48 41 242 47 43 246 48 47 244 50 50 244 50 51 247 49 50 246 48 49 246 48 47 242 48 46 238 51 46 231 54 46 220 56 47 224 70 60 201 57 49 190 51 46 182 44 44 238 102 106 255 121 128 248 103 116 253 100 121 250 86 113 251 76 107 255 72 106 252 64 99 239 55 89 232 63 94 224 82 104 195 89 101 135 67 66 101 67 55 90 79 59 72 70 49 65 67 45 76 71 51 70 68 45 76 85 54 83 99 62 98 116 76 108 131 85 112 139 88 110 141 82 107 141 80 105 142 75 103 143 73 104 144 74 104 145 75 106 147 77 107 148 80 109 150 84 111 150 87 112 151 86 116 155 88 115 155 85 113 153 83 111 151 80 106 147 77 103 144 74 101 142 72 100 141 71 96 135 68 93 129 65 87 121 61 82 113 56 77 105 54 76 102 54 78 101 55 79 102 56 77 103 56 78 104 56 79 105 58 85 72 56 87 74 58 91 78 62 92 79 63 93 80 64 93 80 64 95 82 66 97 84 68 95 82 66 96 83 67 97 84 68 97 84 68 96 83 67 95 82 66 95 82 66 94 81 73 86 77 82 95 88 104 110 102 123 116 112 137 120 116 151 120 119 161 120 122 171 121 123 180 115 121 183 106 114 179 96 103 173 91 99 171 95 103 176 106 114 187 118 124 198 128 132 206 147 149 223 158 159 224 173 174 228 187 189 228 203 201 225 212 211 217 221 218 209 225 223 202 229 224 194 230 226 191 228 222 188 224 215 182 218 208 181 206 198 175 190 182 163 174 167 151 155 153 140 143 141 128 140 132 121 141 123 113 147 117 107 157 114 105 169 109 101 188 111 105 230 137 132 237 129 126 240 116 114 240 102 100 238 88 89 237 79 78 235 69 69 233 65 64 227 58 55 224 59 55 228 66 61 222 69 63 204 60 51 198 61 51 196 66 53 175 49 35 174 48 34 199 73 59 220 88 75 214 78 64 204 61 47 206 56 42 208 54 42 209 51 42 214 52 50 245 85 85 255 107 104 250 93 88 227 68 62 220 59 51 223 59 50 227 56 48 226 52 45 227 50 44 226 49 43 221 48 41 212 48 39 205 47 36 198 47 36 194 48 35 197 57 44 192 52 39 193 51 41 203 58 53 215 67 65 219 69 71 219 66 71 218 64 72 225 69 80 236 80 91 242 86 97 242 86 97 249 93 104 255 101 109 241 87 95 222 63 68 233 59 60 237 53 55 237 51 56 239 50 56 242 50 61 247 57 67 255 72 83 255 86 95 229 53 63 222 51 59 223 54 59 234 65 68 249 74 79 253 72 77 244 59 65 233 49 51 232 53 49 235 57 53 239 60 56 242 60 57 243 59 57 240 58 55 233 55 51 226 55 48 223 59 50 220 59 49 219 58 48 220 57 48 223 56 50 228 55 51 232 54 52 233 55 53 230 58 56 228 59 56 230 58 56 232 58 57 232 59 55 230 57 53 225 54 47 220 51 44 219 55 45 220 56 46 223 57 45 225 55 42 229 51 41 233 49 41 241 48 41 244 49 45 243 51 50 241 51 51 244 50 50 244 48 49 244 49 47 242 48 46 238 51 46 231 54 46 222 55 47 224 67 58 202 55 48 192 49 45 192 49 51 247 106 112 255 113 122 249 103 116 248 95 116 246 82 109 252 68 102 255 63 100 255 59 99 242 58 94 228 71 100 216 91 109 171 86 91 119 69 62 100 74 61 97 89 70 84 79 59 75 73 52 80 73 54 71 69 46 71 80 51 76 92 56 90 108 70 102 124 78 109 133 83 109 138 82 108 140 77 104 141 74 102 142 72 103 143 72 103 145 73 105 146 76 106 147 79 108 149 83 110 149 86 111 150 85 116 153 86 115 152 85 110 149 82 106 146 76 102 143 75 99 140 72 97 138 70 95 136 70 90 129 66 88 124 63 83 116 59 80 110 56 79 107 58 82 108 61 87 110 64 90 113 67 85 111 63 85 112 61 85 111 63 82 69 53 85 72 56 88 75 59 90 77 61 91 78 62 92 79 63 94 81 65 96 83 67 96 83 67 97 84 68 97 84 68 97 84 68 96 83 67 96 83 67 98 85 69 97 86 80 94 86 99 106 101 124 121 117 144 125 121 154 122 121 161 120 121 169 118 121 176 115 119 180 106 114 179 99 106 176 91 99 171 93 101 174 104 112 185 118 126 199 129 135 209 136 141 209 153 157 220 163 166 221 175 179 226 187 191 228 198 199 227 207 206 224 212 211 219 215 213 214 217 214 209 217 213 204 215 208 198 210 201 192 204 195 190 197 186 184 180 168 168 163 155 153 141 137 134 124 121 116 124 116 113 120 107 101 130 107 101 143 110 103 144 97 91 157 96 91 192 115 109 215 122 117 237 128 123 249 126 121 253 115 112 250 100 99 243 85 84 237 73 71 237 68 63 234 62 58 225 60 54 224 65 59 209 58 49 211 67 58 221 84 74 194 62 50 184 54 41 189 57 44 194 61 46 200 63 47 207 66 49 215 67 53 214 64 49 209 55 45 208 50 47 234 76 77 250 95 93 242 87 83 223 68 63 217 58 52 219 56 49 224 55 48 230 57 51 231 57 50 231 57 50 226 58 49 218 57 47 209 57 44 202 56 43 196 56 41 176 40 24 184 51 34 200 64 50 211 73 62 210 68 64 203 59 58 204 55 59 207 58 64 211 57 67 227 73 83 237 86 95 240 89 98 244 93 102 246 95 104 232 83 89 218 63 67 229 64 62 236 63 59 243 64 67 253 70 74 255 76 84 255 81 89 255 84 93 255 85 94 226 51 58 221 46 53 221 46 51 231 55 58 245 60 65 249 58 63 248 52 56 244 48 50 237 52 50 239 57 53 240 56 54 237 52 50 235 50 48 234 50 48 231 52 48 225 52 46 227 60 52 224 61 52 223 60 51 222 59 50 225 56 51 228 55 51 232 52 51 232 52 51 232 56 56 231 57 56 232 56 56 235 57 57 235 57 55 233 55 53 226 53 47 222 51 44 219 55 45 220 56 44 221 58 43 223 55 42 227 50 40 231 48 40 239 48 40 242 49 44 241 52 50 240 52 51 243 51 50 243 49 49 243 49 47 241 49 46 236 51 46 231 54 46 224 57 49 217 60 51 204 55 49 193 48 45 209 64 67 255 110 117 253 107 117 247 99 113 237 84 105 241 74 102 250 62 97 255 55 94 255 55 98 248 64 100 227 79 105 200 92 105 139 71 70 106 70 58 93 76 60 93 86 67 88 81 62 81 74 55 79 71 52 73 68 46 68 74 46 71 85 50 83 99 62 94 115 72 103 127 77 106 135 79 106 138 75 103 140 71 103 140 70 102 142 71 102 144 72 103 144 74 105 146 78 107 148 82 109 148 85 109 148 85 113 149 85 111 148 81 106 145 78 103 142 75 99 140 72 96 137 69 95 136 70 94 134 71 92 130 69 91 126 68 87 120 65 86 114 63 85 111 64 89 112 66 93 114 71 94 117 71 90 114 66 88 115 64 88 115 64 78 66 50 81 69 53 85 73 57 87 75 59 88 76 60 90 78 62 92 80 64 94 82 66 97 85 69 98 86 70 98 86 70 97 85 69 95 83 67 97 85 69 102 90 74 104 93 89 110 103 119 117 112 142 124 120 153 123 121 160 119 120 166 118 119 173 112 117 175 106 111 175 97 104 172 94 102 174 95 103 176 101 109 182 112 120 192 125 133 205 137 144 216 143 151 214 153 161 210 161 168 210 170 178 217 180 186 222 186 191 223 192 193 224 195 195 223 199 197 221 198 194 217 197 192 212 193 186 204 188 179 196 187 176 193 181 168 186 166 153 170 150 139 153 139 132 139 117 111 113 119 110 111 115 101 101 122 102 101 137 109 106 133 94 89 150 99 95 155 90 84 183 103 96 214 117 110 237 124 118 252 125 119 255 120 115 254 106 102 249 92 87 252 83 78 245 72 66 230 61 54 231 68 61 216 59 52 219 71 61 234 92 82 197 59 48 196 60 48 189 55 43 190 54 40 199 62 46 209 68 51 212 66 51 212 65 49 215 65 51 210 56 54 216 62 62 221 67 67 220 66 64 214 61 55 213 56 49 216 55 47 222 55 47 229 58 51 230 57 51 229 58 51 226 59 51 219 62 53 213 65 53 209 69 56 204 71 54 174 45 24 188 59 37 205 74 56 209 76 61 198 61 53 187 48 43 192 48 48 202 57 62 215 65 74 226 76 85 236 86 97 240 90 101 239 92 100 236 89 97 223 76 82 212 62 64 209 52 47 218 53 47 227 57 57 237 63 64 245 66 72 247 68 74 244 64 73 239 62 70 228 51 59 225 48 54 230 49 54 240 55 60 247 54 57 249 49 52 254 45 50 253 49 52 239 50 48 240 57 53 240 55 52 236 48 46 232 44 42 231 48 44 230 51 46 224 51 44 228 61 53 224 61 52 224 61 52 224 60 51 227 58 53 230 57 53 234 54 53 236 54 53 236 53 55 236 53 55 237 53 55 238 54 56 238 54 54 235 53 52 228 50 46 222 49 43 222 55 46 221 57 45 221 58 43 223 55 42 225 52 38 230 49 38 237 49 40 241 49 44 240 52 50 238 53 51 241 52 50 242 50 49 243 49 47 241 49 46 236 51 46 231 54 46 226 59 51 210 52 43 210 58 53 198 50 48 231 85 88 255 112 120 249 99 110 241 90 105 227 75 96 239 72 102 253 58 98 255 49 93 255 54 98 253 67 104 219 77 101 177 80 89 106 53 47 94 71 55 88 75 58 85 78 59 89 81 62 85 74 56 76 64 48 73 68 48 64 70 44 65 79 46 75 91 54 88 106 64 98 120 71 102 129 74 104 136 73 102 139 70 101 138 68 99 139 66 99 141 69 101 142 72 103 144 76 104 145 79 105 145 82 107 146 83 110 146 82 108 144 80 104 143 78 100 139 74 97 138 72 95 136 70 95 135 72 95 135 72 95 133 72 95 130 72 93 126 71 93 121 70 93 119 72 96 119 75 99 120 79 99 122 78 92 116 66 90 117 64 90 117 64 74 67 51 77 70 54 81 72 57 84 75 60 87 75 61 89 77 63 92 79 63 94 81 65 100 87 70 101 88 71 100 88 72 98 86 70 95 85 73 97 87 77 103 94 85 108 99 102 119 114 137 121 117 154 120 118 158 116 115 159 114 114 164 116 117 173 108 112 175 98 103 169 90 97 169 95 101 175 102 108 184 109 115 191 118 124 200 129 135 211 143 147 221 151 156 222 155 161 211 160 167 209 169 174 216 174 179 221 177 180 223 178 179 223 180 179 223 182 179 222 181 176 217 179 172 213 174 166 203 171 161 196 170 159 193 164 153 185 153 140 170 136 126 150 126 120 132 102 97 103 108 99 102 100 88 90 108 90 88 124 99 95 123 86 80 147 98 93 140 77 70 162 85 77 187 97 88 212 108 99 238 121 114 255 129 122 255 124 119 255 112 106 254 97 92 247 84 79 233 71 66 238 79 73 221 66 61 222 71 64 234 87 79 186 44 34 190 49 39 190 52 39 199 62 46 209 69 54 203 62 45 193 50 34 202 55 39 219 69 55 222 69 63 211 57 55 204 51 46 205 53 48 212 59 53 215 61 53 221 60 52 225 61 52 228 59 52 228 57 50 222 53 46 215 52 43 207 53 41 202 56 43 197 60 44 194 63 45 212 83 62 200 71 50 189 60 41 190 58 45 195 61 50 196 59 53 194 55 52 194 52 51 220 75 78 221 76 81 225 80 85 229 84 89 232 89 93 229 86 88 220 77 79 212 67 64 203 52 43 212 54 43 218 53 47 224 52 50 228 49 52 232 49 54 233 48 56 231 46 54 238 51 62 237 50 59 244 52 63 253 56 66 255 51 62 253 41 53 255 40 51 255 46 57 248 45 51 249 53 55 249 53 57 240 46 47 235 42 43 233 48 46 232 53 49 226 53 47 227 60 52 224 61 52 224 61 52 225 61 52 228 59 54 231 58 54 235 55 54 238 54 54 236 52 54 235 51 53 236 50 53 237 51 52 237 53 53 234 52 49 227 49 45 219 48 40 222 56 44 221 58 43 221 58 43 222 56 40 224 52 38 227 51 36 233 51 38 236 52 42 238 53 48 238 53 50 240 52 50 240 51 47 242 50 47 239 50 44 235 52 44 231 54 46 228 61 52 205 47 38 215 62 57 202 52 53 249 98 103 255 112 121 246 91 105 237 80 99 228 70 93 243 72 104 255 61 101 255 50 93 255 55 97 245 71 104 201 74 93 148 66 70 83 43 35 88 72 56 84 75 58 79 72 54 89 80 63 83 74 57 69 64 45 71 70 49 61 67 39 64 74 40 73 85 49 83 100 58 95 114 69 101 125 73 103 132 74 101 136 72 99 136 67 97 137 66 98 138 67 99 141 69 101 142 72 102 143 77 104 143 80 105 144 81 108 144 80 107 144 77 102 141 74 99 138 73 97 136 71 96 135 70 96 135 72 96 134 73 94 129 71 94 127 70 95 125 71 96 124 73 97 123 75 100 123 77 102 124 78 102 126 78 93 120 67 92 121 63 93 122 66 68 66 54 70 68 56 74 70 59 80 71 62 82 72 62 87 73 62 93 77 62 95 79 63 96 81 62 97 82 63 96 83 66 95 86 71 98 89 82 103 98 95 111 106 110 115 111 126 119 113 147 122 116 160 124 121 168 121 119 169 112 112 166 103 103 163 96 97 162 92 95 164 96 98 173 102 104 181 111 112 192 121 122 204 132 130 214 141 139 223 150 146 231 156 153 232 160 158 223 161 160 218 163 162 219 164 163 220 166 163 220 165 162 219 165 160 216 164 159 213 165 158 210 163 156 207 162 154 201 162 153 198 159 150 193 153 142 184 142 131 171 131 124 155 113 111 124 104 103 108 99 95 96 102 90 90 108 89 85 115 86 80 128 85 78 143 86 79 150 82 73 169 89 80 181 88 80 192 91 83 216 107 100 235 122 114 246 131 124 255 139 134 249 117 113 255 117 115 237 95 93 223 80 76 217 69 65 239 90 84 204 55 49 197 50 42 196 54 42 195 55 40 192 55 39 195 55 38 198 57 40 202 59 43 208 60 46 213 63 49 210 56 46 214 60 50 215 63 52 211 59 48 205 53 40 205 51 39 216 58 47 226 64 53 224 57 48 225 57 48 222 55 46 215 55 43 207 55 41 201 58 42 198 63 44 196 65 47 194 61 46 198 64 52 203 69 58 205 71 60 204 67 59 197 60 52 187 50 44 182 43 38 199 60 55 208 69 66 217 79 76 224 86 83 227 89 86 225 88 82 216 79 73 208 67 58 205 58 42 213 58 40 220 56 44 227 53 46 232 46 47 237 42 50 240 40 51 244 39 54 251 44 62 250 43 63 251 42 63 253 41 63 255 39 63 255 38 63 255 36 60 255 35 60 255 35 55 255 38 56 255 42 59 254 44 57 244 44 54 237 46 53 233 53 54 232 60 58 221 56 52 221 58 51 222 59 52 224 59 53 227 58 53 230 57 53 233 55 51 235 53 52 235 51 53 236 52 54 235 53 52 233 53 52 231 53 51 226 53 47 221 53 44 219 53 41 220 56 44 219 57 42 220 57 40 222 57 38 223 56 38 226 55 37 227 54 37 230 52 38 236 53 45 237 52 47 240 53 48 241 52 46 241 53 44 237 53 43 232 54 42 228 56 44 222 58 48 212 55 46 211 58 53 215 62 64 255 109 117 255 98 113 248 85 106 241 75 99 247 79 105 236 58 90 249 57 94 255 63 103 245 64 99 230 80 107 178 73 87 97 36 35 71 43 32 65 56 39 75 68 52 82 76 60 79 73 57 66 67 49 59 68 47 60 73 47 65 72 38 69 75 37 75 83 46 83 93 56 91 107 68 97 118 75 100 126 78 100 131 74 98 134 70 96 136 66 97 137 64 99 139 66 101 141 70 104 144 74 108 144 80 109 145 81 108 145 76 105 142 72 103 140 71 102 139 72 102 138 74 101 137 73 99 133 72 97 131 71 100 131 74 100 129 73 98 127 71 99 126 71 100 127 74 100 127 72 101 126 71 97 125 67 91 123 60 92 127 61 95 130 66 61 63 52 63 65 54 70 67 60 74 69 63 80 69 63 84 71 62 91 75 62 93 77 61 96 79 59 96 81 60 94 83 65 94 86 73 99 91 88 104 99 105 110 108 121 115 111 134 116 112 149 118 112 158 116 112 162 112 109 162 103 102 159 97 97 159 93 94 161 92 92 164 101 100 176 107 106 186 116 114 197 125 123 207 134 130 217 141 137 224 148 142 230 152 147 229 155 149 221 156 151 217 157 152 218 158 153 219 158 151 218 157 150 217 156 150 214 155 149 211 158 150 210 156 148 205 156 147 200 155 147 198 154 145 192 147 138 183 136 127 170 128 121 154 115 109 123 107 101 105 100 94 94 101 91 89 107 90 83 113 86 77 124 84 74 141 84 75 157 84 75 178 91 82 187 88 82 195 88 82 211 102 97 221 114 106 224 120 111 235 126 119 251 136 133 255 135 133 247 117 115 238 103 100 227 85 83 235 90 85 199 50 44 194 47 37 197 55 41 195 55 38 192 55 37 193 56 38 196 56 39 200 59 42 207 59 45 211 61 47 213 57 44 213 57 44 211 58 44 210 58 44 209 57 43 209 57 43 212 56 43 216 56 44 223 59 49 224 57 48 220 56 46 214 56 44 207 57 42 200 57 40 193 58 38 190 57 38 190 54 42 193 56 48 198 61 53 201 64 56 202 65 57 200 63 55 197 60 52 194 57 49 191 52 45 199 62 54 209 72 64 216 79 71 218 81 73 215 78 70 204 67 59 195 55 42 202 55 37 211 56 36 221 55 41 229 52 44 237 47 47 244 43 51 249 41 55 253 40 58 255 43 64 255 42 65 255 41 65 255 38 65 255 35 64 255 33 60 255 30 61 255 29 58 255 30 57 255 31 56 255 36 58 255 41 59 247 45 57 241 50 58 234 55 58 230 60 60 220 57 52 220 58 53 222 59 52 224 59 53 227 58 53 230 57 53 233 55 51 235 53 50 235 51 53 236 52 54 235 53 52 232 54 52 228 55 49 223 54 47 220 53 44 217 53 41 219 57 42 219 57 42 220 57 40 220 57 38 222 57 38 223 56 37 225 56 37 227 54 37 231 53 43 234 51 43 235 52 44 235 53 42 235 53 42 232 54 40 228 55 41 223 55 42 221 61 49 209 52 43 207 53 51 239 84 88 255 102 114 255 91 111 241 73 98 249 76 104 248 69 99 247 64 95 244 56 91 243 62 97 239 78 109 205 76 98 139 56 64 89 41 37 69 51 39 60 54 40 62 59 44 67 64 49 67 66 48 61 64 45 56 68 46 58 73 44 60 68 29 75 80 39 92 98 60 101 111 74 104 118 82 101 122 81 100 126 79 100 130 76 97 131 70 97 134 65 97 137 64 99 140 64 103 141 68 105 142 72 107 144 77 108 145 78 108 145 75 106 144 71 104 141 72 102 139 70 103 138 74 102 137 73 102 133 74 100 131 72 102 131 75 100 129 73 100 127 72 100 128 70 101 129 71 101 129 71 102 127 69 98 126 65 93 128 62 95 132 63 98 135 66 54 57 46 58 60 49 63 63 55 68 65 58 75 66 59 79 69 60 86 72 61 89 76 60 94 79 60 92 79 60 92 83 66 94 87 77 99 93 93 104 101 108 111 109 123 115 113 137 115 111 148 113 107 153 106 102 152 99 96 149 92 91 148 90 90 152 92 93 160 92 95 166 104 106 181 110 111 191 119 120 202 127 128 210 134 132 216 138 136 220 143 139 224 145 142 221 147 144 215 147 144 211 147 144 211 147 144 211 148 142 212 147 141 211 147 140 208 146 139 206 149 140 205 147 139 199 148 139 194 148 140 191 147 139 186 140 133 175 131 123 162 126 115 145 121 103 119 115 96 102 103 91 91 100 91 86 100 91 82 104 88 75 117 85 72 135 83 72 166 89 81 190 95 89 203 91 89 208 88 87 218 100 98 222 109 105 220 113 107 226 119 113 251 138 132 255 138 134 255 133 129 255 125 121 247 110 104 238 97 88 196 52 43 192 50 38 196 56 41 193 58 39 192 57 38 192 57 37 194 57 38 198 59 40 204 58 43 208 58 44 214 58 45 211 53 41 206 53 39 208 56 42 212 62 47 212 62 47 206 54 40 203 47 34 218 58 46 218 56 45 217 55 44 214 56 44 208 58 43 201 58 41 194 57 38 190 55 36 189 53 41 192 54 44 194 56 46 196 58 48 199 61 51 202 64 54 203 65 55 204 66 56 199 58 49 202 64 54 207 69 59 208 70 60 210 72 62 209 71 61 202 64 54 197 55 43 204 54 37 214 54 38 223 55 44 231 52 47 241 48 51 246 45 53 251 43 57 255 42 60 252 39 59 252 39 61 251 37 61 249 35 59 251 33 58 250 30 55 252 28 55 254 27 54 255 29 55 255 30 53 254 35 55 253 42 59 247 50 60 242 55 62 236 57 60 229 59 59 220 57 52 220 58 53 222 59 52 224 59 53 229 57 53 231 56 53 233 55 51 235 53 50 237 51 54 238 52 55 237 53 53 234 54 53 229 54 49 225 54 47 220 53 44 216 52 40 218 56 41 217 57 41 218 57 39 219 56 37 221 56 37 222 55 36 224 55 36 225 54 37 225 53 39 226 52 41 227 53 42 227 54 40 227 54 40 225 55 40 221 55 41 218 56 43 219 61 50 204 50 42 211 56 54 255 108 112 255 93 108 249 81 104 237 62 91 255 75 108 247 59 92 255 66 100 240 56 90 233 65 98 227 87 113 171 64 82 101 34 41 81 46 42 65 52 43 52 53 39 53 54 38 58 59 41 63 62 42 62 61 40 60 64 41 62 69 38 62 70 29 88 97 52 115 126 84 128 140 100 119 135 96 104 127 83 97 125 76 97 128 71 96 131 67 96 133 63 97 137 64 99 140 64 104 142 69 106 143 74 107 144 77 108 145 78 110 147 77 107 145 72 104 141 72 103 140 71 104 139 75 104 139 75 102 136 76 100 134 74 101 132 75 100 131 74 99 128 70 100 129 71 102 130 72 102 130 71 101 129 70 98 128 66 99 134 68 101 138 69 104 141 72 50 53 42 53 56 45 59 60 52 65 62 55 71 64 58 75 66 59 82 69 60 86 74 60 88 76 60 89 77 61 89 81 68 94 87 79 99 94 98 105 103 114 111 110 128 114 111 140 114 109 149 106 103 148 96 94 143 87 87 139 84 85 142 87 88 152 92 95 162 97 99 173 108 110 187 114 115 195 123 124 206 130 131 213 136 134 217 138 136 219 140 136 220 141 138 217 143 142 212 143 140 209 143 140 209 142 139 210 143 137 211 142 136 210 142 134 209 141 133 206 143 133 202 142 133 196 143 134 191 144 136 187 143 136 180 137 131 169 128 121 154 126 112 137 127 96 112 121 90 96 107 89 89 99 92 84 96 94 81 98 91 73 109 86 70 128 82 69 161 84 76 193 91 89 209 89 91 217 88 92 228 99 103 228 108 107 224 112 108 228 121 115 236 125 118 237 122 115 254 131 126 255 134 129 255 129 123 245 107 97 201 60 50 196 56 41 194 59 40 191 58 39 191 59 38 190 58 37 193 58 38 197 58 39 200 57 41 206 56 42 216 58 46 212 54 42 206 53 39 206 56 41 209 62 46 209 62 46 203 56 40 199 47 33 210 54 41 211 53 41 210 52 40 210 54 41 209 57 43 205 60 43 200 61 42 196 59 41 196 58 45 196 58 47 198 57 48 198 57 47 199 58 49 200 59 49 201 60 51 203 61 51 211 68 60 211 69 59 208 65 57 203 61 51 203 60 52 207 65 55 207 64 56 206 59 49 206 53 39 217 53 41 226 53 46 235 51 49 242 47 53 247 43 54 249 41 55 252 41 58 249 38 57 247 38 59 247 38 59 248 39 60 251 38 60 253 37 58 255 36 58 255 35 58 255 33 54 253 34 54 250 37 55 249 44 59 247 53 62 242 57 63 233 57 59 225 57 56 220 57 52 220 58 53 222 59 52 224 59 53 229 57 53 231 56 53 233 55 51 235 53 52 238 52 55 238 52 55 238 54 54 234 54 53 230 55 50 225 54 47 220 53 44 215 53 42 216 56 42 216 56 40 216 56 40 217 56 38 218 55 38 220 55 36 221 54 36 221 54 36 219 53 37 220 54 40 221 55 39 220 57 40 220 57 40 218 59 40 215 58 41 214 58 43 213 59 49 206 51 46 231 73 74 255 111 119 254 85 104 243 69 94 243 62 95 255 67 102 251 55 91 252 60 97 240 66 99 228 79 108 196 80 101 129 47 61 78 29 33 72 48 46 54 47 39 50 52 39 56 58 44 62 65 46 65 64 43 63 61 36 65 64 36 69 70 36 84 93 48 112 126 77 143 159 114 151 168 124 131 152 109 106 132 87 95 123 74 93 126 69 95 131 67 97 134 64 98 138 65 102 143 67 107 144 74 108 145 76 109 146 79 109 146 79 111 148 78 108 146 73 105 142 73 104 141 72 105 140 76 105 140 76 104 138 78 103 137 77 102 133 76 100 131 74 100 129 71 101 130 72 103 131 72 104 132 73 102 130 71 100 130 68 103 138 72 105 142 73 108 145 76 45 51 39 51 54 43 56 57 49 60 59 54 66 61 57 71 64 58 77 68 61 81 71 61 83 73 61 83 75 62 85 78 68 90 85 81 97 94 101 105 103 117 109 107 129 108 107 138 106 104 144 98 96 143 88 86 136 80 80 134 81 81 141 88 89 154 96 99 170 102 106 180 111 114 193 117 120 201 124 127 208 130 133 214 134 135 217 135 136 216 138 137 217 139 138 214 139 139 209 139 138 206 138 136 209 137 135 210 137 133 210 136 131 211 138 131 211 137 130 207 140 132 205 139 132 199 141 133 192 141 134 185 141 134 175 135 130 162 126 120 146 127 110 129 131 90 104 125 84 90 108 87 84 99 92 82 92 96 79 91 95 72 102 90 68 122 83 66 149 74 68 187 83 82 209 83 87 219 82 89 230 93 100 231 102 106 224 108 108 227 118 113 228 117 110 226 111 104 247 126 118 255 130 123 255 135 126 244 108 96 201 63 50 193 56 40 192 59 40 191 61 39 191 61 39 192 60 39 194 59 39 197 58 39 199 56 40 205 55 41 216 58 47 217 56 46 210 56 44 207 57 43 204 58 43 201 58 42 200 57 41 201 55 40 207 57 43 209 55 43 210 56 44 209 55 43 207 55 42 204 56 42 203 60 44 203 62 45 202 60 48 201 61 48 202 60 50 201 59 47 200 58 48 198 56 44 197 55 45 197 53 42 208 64 55 208 64 53 205 61 52 201 57 46 203 56 48 206 59 49 205 58 50 204 53 44 208 47 37 217 48 41 228 50 48 236 50 53 244 47 56 249 45 57 251 43 59 252 44 60 252 45 63 251 46 63 252 47 64 252 47 64 254 47 65 255 47 63 255 45 63 255 46 64 255 40 56 251 40 55 247 43 55 245 48 58 241 54 61 237 56 61 228 56 56 221 53 52 220 57 52 220 58 53 222 59 54 226 58 55 229 57 53 231 56 53 234 54 53 236 52 52 241 52 56 241 52 56 239 53 54 237 55 54 230 55 50 225 54 47 218 54 44 215 53 42 216 56 42 214 57 40 214 57 40 216 57 38 216 57 38 217 56 38 218 55 38 217 56 38 213 56 37 213 58 38 214 59 39 213 61 40 212 61 40 211 62 42 211 61 44 211 61 46 208 55 47 215 60 56 255 93 100 255 96 111 255 80 103 240 60 89 255 66 104 250 55 95 255 55 95 242 52 88 237 78 108 215 92 113 148 64 79 91 38 46 71 40 45 63 49 48 49 46 41 52 54 43 58 62 47 60 65 43 58 61 34 62 61 30 80 74 40 94 92 53 121 133 83 144 163 108 170 190 139 168 190 141 142 165 119 111 139 91 97 127 75 94 127 70 96 132 68 99 136 66 101 141 68 106 147 71 111 148 78 112 149 80 111 147 83 111 147 83 111 148 78 108 146 73 105 142 73 103 140 71 105 140 76 105 140 76 105 139 79 104 138 78 102 133 74 101 132 73 100 131 72 101 132 73 103 133 73 104 134 72 103 133 71 101 133 68 105 142 73 105 145 75 108 148 78 43 49 37 46 52 42 52 55 48 56 57 51 62 58 55 66 61 58 72 65 59 75 68 60 78 72 60 78 71 61 79 74 68 87 83 82 95 94 102 102 101 117 103 103 127 103 102 134 98 97 137 91 89 138 81 81 133 78 79 135 82 83 147 91 94 163 101 105 179 108 111 190 117 119 202 122 124 209 127 129 214 131 133 216 134 135 217 134 135 215 136 135 213 137 136 212 135 135 205 134 134 204 134 132 205 133 130 207 133 128 210 133 128 210 135 127 212 135 128 208 141 133 210 140 133 201 141 133 192 140 134 182 139 133 169 132 128 155 123 118 138 124 106 120 129 87 97 126 81 86 109 85 81 100 94 80 92 100 77 89 97 73 99 93 69 118 87 67 146 78 69 183 85 82 209 84 90 219 82 90 231 92 99 231 98 103 228 104 106 231 113 111 236 121 114 230 113 104 247 124 116 243 115 106 254 120 109 230 92 81 196 59 43 190 53 35 194 59 39 193 61 40 193 61 40 195 60 40 196 59 40 200 59 41 203 57 42 207 55 42 214 53 43 216 55 45 212 58 46 206 58 44 199 58 41 196 56 39 198 58 41 202 61 44 207 61 46 214 64 50 217 65 52 214 62 49 206 56 42 200 52 38 202 56 41 203 60 44 201 58 44 200 58 44 201 59 47 201 59 45 202 58 47 200 57 43 200 53 43 199 53 40 202 54 44 207 59 47 210 62 52 211 63 51 214 63 54 213 62 51 206 55 46 201 44 35 210 43 37 220 45 42 231 48 50 240 51 57 246 49 59 250 48 60 253 48 63 253 48 63 249 48 64 247 49 64 247 49 64 246 48 61 247 47 60 247 45 57 250 44 57 250 42 55 252 46 59 248 46 58 245 48 58 240 51 58 237 54 59 231 55 58 224 54 54 218 53 51 220 57 52 221 58 53 223 58 54 226 58 55 229 57 53 231 56 53 234 54 53 236 52 52 242 53 57 242 53 57 240 54 55 237 55 54 230 55 52 223 54 47 218 54 45 214 54 42 213 55 43 212 56 41 212 56 41 212 57 39 213 56 39 213 56 37 215 55 39 212 57 37 208 57 36 206 60 37 207 61 38 207 63 39 206 64 40 206 64 42 206 63 46 208 60 48 208 55 49 232 72 72 255 103 113 254 78 98 255 72 100 246 56 90 255 66 108 246 49 92 255 57 96 234 55 87 221 83 106 185 87 102 107 50 57 71 41 43 71 55 58 59 50 51 56 51 48 58 55 48 57 59 45 53 58 35 51 56 24 66 68 29 102 99 58 129 131 84 159 174 119 169 193 135 181 206 151 175 199 147 146 174 125 118 148 98 101 134 81 96 130 70 96 133 66 99 136 66 103 143 70 109 150 74 114 152 79 114 151 82 113 149 85 112 148 84 111 148 78 108 145 75 104 141 72 102 139 70 104 139 75 105 140 76 105 139 78 105 139 79 103 134 75 102 133 74 101 132 73 102 133 73 104 136 73 105 137 72 105 135 71 102 134 67 106 143 74 107 147 77 110 150 80 40 48 35 43 49 39 47 52 45 51 53 48 55 54 52 60 56 53 64 61 56 67 62 56 73 69 60 72 69 60 75 72 67 82 80 81 91 91 101 97 98 116 98 98 124 96 96 130 95 94 136 90 88 138 84 84 138 84 84 144 92 93 160 103 105 179 112 115 196 118 120 205 123 127 216 126 130 219 131 132 222 132 134 221 132 133 216 131 132 214 133 132 212 134 133 209 131 134 203 130 133 202 131 131 205 130 129 207 131 127 211 133 128 212 136 128 214 136 128 211 141 133 210 139 132 200 139 131 188 139 132 176 137 130 163 129 124 146 119 113 127 117 102 109 125 86 91 121 81 81 107 87 78 101 95 79 93 101 77 91 100 73 100 96 71 116 91 69 140 82 70 176 91 84 202 89 91 214 85 90 226 91 97 230 93 100 231 98 101 237 109 108 245 122 115 237 114 106 247 120 111 222 89 80 229 91 80 210 68 56 195 53 39 199 58 41 197 58 39 196 60 38 197 61 39 200 61 40 202 59 42 205 58 42 208 56 42 212 54 42 211 48 39 212 51 41 210 56 44 205 59 44 199 59 42 194 59 40 192 59 40 195 60 41 200 59 42 213 67 52 225 75 61 222 72 58 211 61 47 202 52 38 201 53 39 205 59 44 200 57 41 200 57 41 200 57 43 200 57 41 202 56 43 202 56 41 203 55 43 203 55 41 205 54 43 210 60 46 215 63 52 216 64 51 218 64 54 219 65 53 215 58 49 210 49 41 220 48 46 229 49 52 238 52 57 245 54 62 249 52 62 249 49 62 250 48 64 248 47 63 242 46 60 239 47 60 237 47 57 237 48 55 239 45 53 239 44 50 242 43 50 241 42 49 244 49 57 244 50 58 242 53 59 236 53 57 229 53 55 225 53 53 223 55 54 221 56 54 220 56 54 221 57 55 223 58 54 227 58 55 230 56 55 233 55 55 234 54 55 236 52 54 244 53 58 244 53 58 241 55 58 238 56 55 230 55 52 224 55 48 218 54 45 212 54 42 211 55 42 209 56 42 208 56 42 208 57 40 208 57 40 208 57 38 209 56 40 208 57 38 203 57 34 200 58 34 200 62 36 199 63 37 200 64 40 200 64 42 203 62 45 206 59 49 213 58 54 250 85 91 255 94 111 255 71 97 253 62 95 254 58 96 255 56 102 250 53 98 244 58 95 230 71 99 192 80 96 135 64 72 84 50 51 67 53 52 68 57 61 62 51 55 66 51 54 64 53 49 58 56 43 54 60 34 57 67 30 80 92 46 125 132 80 159 168 113 176 197 138 175 203 142 176 204 146 166 195 141 146 174 125 123 153 101 103 136 81 95 129 69 94 131 64 99 137 64 105 143 68 111 149 74 115 153 80 115 152 83 113 149 85 111 147 83 110 147 78 107 144 74 103 140 71 101 138 69 103 138 74 104 139 75 105 139 78 105 139 78 102 136 75 100 134 73 100 134 73 101 136 72 103 138 74 104 139 73 105 137 72 102 137 69 106 146 76 108 150 78 111 153 81 38 46 33 40 48 37 45 50 43 49 51 46 51 51 49 55 54 52 58 57 53 60 59 54 71 68 61 68 68 60 71 70 66 79 79 81 90 90 100 95 97 112 94 96 121 92 92 126 96 95 137 92 90 140 89 88 145 92 92 154 103 103 173 113 115 192 122 124 209 127 128 220 129 132 225 130 133 228 133 134 227 132 133 225 131 131 219 129 130 213 131 130 210 131 130 206 132 135 204 131 134 201 132 132 204 131 130 206 133 130 211 135 130 214 138 130 215 140 131 212 141 133 208 140 131 196 139 130 183 138 130 171 133 127 155 127 120 136 115 110 117 111 99 99 117 87 85 114 84 76 105 87 75 102 95 77 99 101 77 97 100 73 102 96 70 115 93 70 125 79 63 159 89 77 184 89 83 197 83 82 215 86 90 226 87 92 233 90 96 240 100 101 247 114 109 241 110 102 247 113 104 209 68 59 212 65 55 197 49 37 200 52 38 212 67 50 199 57 37 199 58 38 201 59 39 205 60 41 208 58 43 211 58 44 216 56 44 217 55 44 207 44 35 206 48 37 206 54 41 203 60 44 199 64 45 193 62 42 190 59 39 188 55 36 192 52 35 209 66 50 227 79 65 228 78 64 216 66 52 203 55 41 203 55 41 208 62 47 202 59 43 201 58 42 199 56 40 198 55 39 200 54 39 202 54 40 206 56 42 208 56 43 211 59 46 213 59 47 213 57 45 210 54 42 213 55 44 218 60 49 221 60 50 220 55 49 232 56 56 241 56 61 247 58 65 251 57 66 250 52 65 245 47 60 242 44 59 239 44 58 237 47 59 234 49 57 234 51 56 235 52 56 237 53 55 241 53 54 244 51 54 243 53 55 239 50 54 238 53 58 236 56 59 233 54 57 226 52 53 222 52 52 223 55 54 225 60 58 221 56 54 222 57 55 225 57 54 227 58 55 230 56 55 233 55 55 234 54 55 236 52 54 244 53 58 244 53 58 241 55 58 236 56 57 230 57 53 223 56 50 216 55 47 211 55 43 208 56 43 205 58 42 205 57 43 204 59 42 205 58 42 205 58 40 205 58 42 204 59 40 197 57 34 194 58 34 195 61 36 194 62 37 195 63 40 198 63 43 201 61 46 205 56 49 220 60 62 255 93 102 255 81 103 255 72 100 250 56 91 255 63 103 246 46 92 251 62 104 228 61 91 224 93 111 162 76 85 91 45 45 71 56 51 70 66 63 64 55 58 67 52 57 71 48 54 70 50 49 64 57 41 63 68 38 69 86 42 96 116 63 139 157 97 170 190 127 177 203 140 171 201 139 166 195 139 157 186 132 142 172 122 123 153 101 102 135 80 90 124 64 94 129 63 97 135 62 104 142 67 111 149 74 114 152 79 114 151 82 112 148 84 110 146 82 110 147 78 106 143 73 102 139 70 100 137 68 102 137 73 104 139 75 105 139 78 105 139 78 102 136 75 101 135 74 100 135 71 101 136 70 103 138 72 104 139 71 104 139 71 101 138 68 107 147 76 109 151 79 112 154 82 40 48 33 39 47 34 40 45 38 41 46 40 46 48 45 51 51 49 55 56 51 57 58 52 61 61 53 63 64 56 68 69 64 74 76 75 79 82 89 86 88 101 90 92 115 93 94 125 89 88 130 91 89 139 94 93 150 101 101 163 110 110 182 119 120 200 127 129 216 132 133 226 140 140 238 140 140 240 138 138 236 134 135 228 130 130 220 128 128 214 130 128 211 131 130 206 128 131 198 129 133 197 131 131 201 132 132 206 134 131 208 136 131 211 139 132 210 140 132 207 138 128 197 138 128 188 137 128 175 135 125 160 128 120 143 119 111 122 107 101 103 102 93 88 106 92 81 108 92 77 104 92 76 102 94 75 101 95 73 102 96 72 106 96 71 114 94 70 114 79 59 135 84 65 166 92 79 193 96 89 209 89 88 220 81 84 237 83 91 247 92 96 249 104 101 230 89 80 212 68 60 206 55 48 209 55 47 215 58 49 214 61 47 212 59 43 207 57 40 205 58 38 207 57 40 209 58 41 212 56 41 216 56 42 220 53 44 220 53 44 208 47 37 205 51 41 204 56 44 202 62 47 197 64 47 193 64 45 190 61 42 188 57 39 194 57 41 190 48 34 233 87 74 223 75 63 195 47 35 209 61 49 206 60 47 199 56 40 202 59 43 201 58 41 200 57 40 199 56 39 200 55 38 201 54 38 203 53 38 204 52 38 208 55 41 215 59 46 220 62 50 220 60 48 217 55 44 218 56 45 226 62 52 236 67 60 245 66 69 242 57 63 240 50 60 246 52 63 246 50 64 241 45 59 237 45 58 237 50 61 236 55 62 230 53 59 228 54 56 229 55 56 235 57 57 240 58 57 241 55 56 239 55 55 242 59 61 238 60 60 234 58 58 230 56 55 225 56 53 223 55 52 220 55 53 220 55 53 222 57 55 225 57 56 227 57 57 230 58 58 233 57 59 236 57 60 237 57 60 239 56 60 244 55 59 243 54 58 240 56 58 237 57 58 231 59 57 224 59 53 215 57 48 207 55 44 202 56 43 200 57 41 199 57 43 198 58 41 199 58 41 199 58 40 200 59 42 199 60 41 193 57 35 196 61 39 190 58 35 182 52 30 188 57 37 201 68 51 206 64 54 201 49 44 255 95 101 255 87 103 255 75 98 252 61 92 245 51 88 242 50 89 247 56 99 240 69 105 228 91 111 171 71 81 110 52 51 78 51 44 67 63 54 65 66 60 66 54 56 66 43 49 77 46 51 77 49 46 67 56 38 68 74 40 88 110 61 125 155 95 155 186 119 167 198 130 171 203 140 159 190 130 152 182 128 148 178 126 130 160 110 102 132 82 88 118 66 89 123 63 93 128 62 99 135 65 105 143 68 110 148 73 109 149 76 108 148 78 107 146 79 108 145 78 105 142 73 102 138 68 99 134 66 99 134 66 102 137 73 104 139 75 102 138 76 100 136 74 103 139 77 104 140 78 103 139 75 102 139 72 101 138 69 102 139 69 106 143 73 107 147 74 113 155 81 113 157 82 114 158 83 42 48 34 41 47 35 41 46 39 41 46 40 45 47 44 49 51 48 53 54 49 55 56 50 59 60 52 62 63 55 65 68 61 72 74 71 79 80 84 83 85 97 88 89 107 90 92 117 92 90 127 94 93 137 100 98 148 107 106 164 117 116 186 127 126 206 135 135 223 139 140 233 141 141 239 140 140 240 137 137 235 133 132 226 128 128 216 128 126 210 128 127 207 130 130 204 133 134 199 134 135 199 135 136 201 137 136 204 139 136 207 140 134 206 141 134 204 142 133 200 138 128 188 137 127 177 134 124 161 130 120 147 123 115 130 116 107 112 108 98 96 100 93 83 99 96 79 98 96 75 101 94 75 102 94 75 105 92 73 108 93 72 110 94 71 113 93 69 121 93 71 130 89 67 149 88 70 173 90 76 199 86 80 221 83 83 243 82 88 254 89 95 240 85 83 227 76 69 217 62 57 213 54 48 217 54 47 220 57 48 219 57 44 214 57 40 211 56 38 209 56 38 209 56 40 212 56 41 215 55 41 220 54 42 223 52 44 221 53 44 206 48 39 201 53 41 200 57 43 198 61 45 196 65 47 193 64 45 191 60 42 190 57 40 196 56 41 203 60 46 228 82 69 220 72 60 200 52 40 204 58 45 200 58 44 194 52 38 202 61 44 203 60 43 202 59 42 202 59 42 203 58 41 204 57 41 206 56 41 207 54 40 211 55 42 214 56 44 217 55 44 215 51 41 213 49 39 216 49 40 222 55 46 231 60 53 248 68 71 241 56 62 237 47 57 239 47 58 240 48 61 238 46 59 235 49 60 235 54 63 228 53 58 220 51 54 216 50 50 223 58 56 238 69 66 248 73 70 248 68 67 243 63 62 233 58 55 231 57 56 229 57 55 226 57 54 225 56 53 224 56 53 225 57 56 225 57 56 224 56 55 226 56 56 229 57 57 231 57 58 233 57 59 236 57 60 237 57 60 238 55 59 243 54 58 242 53 57 238 54 56 234 56 56 228 59 56 220 58 53 211 57 47 203 55 43 198 56 42 195 58 42 194 58 42 192 59 42 192 59 42 193 60 41 193 60 43 193 60 41 189 57 36 193 63 41 187 58 37 179 53 31 185 58 39 192 60 47 201 58 50 215 61 61 255 95 103 255 81 100 253 67 91 246 57 87 242 57 91 242 61 96 240 64 100 224 74 101 170 64 76 131 63 62 95 58 50 72 58 47 59 61 48 59 61 50 73 59 58 85 61 61 81 47 46 84 55 47 87 75 53 100 104 69 119 143 91 140 176 112 154 195 125 159 199 129 152 186 125 154 185 128 154 182 131 141 169 120 114 142 94 89 117 69 84 112 61 92 123 66 95 127 64 98 134 64 105 141 67 109 147 72 108 148 75 107 147 76 105 144 77 105 144 77 103 140 71 101 137 67 99 134 66 99 134 68 103 138 74 105 140 76 104 140 78 103 139 77 105 141 79 105 141 77 105 142 75 103 140 71 103 140 70 102 142 69 108 146 73 109 149 76 112 156 81 111 157 82 114 158 83 45 49 34 45 49 35 44 47 38 44 46 41 47 47 45 49 49 47 51 52 47 52 53 45 57 59 48 60 62 49 64 66 55 69 72 65 75 77 76 81 82 87 85 85 97 86 87 105 92 89 116 94 93 127 102 100 140 112 110 160 122 120 183 133 131 206 141 139 223 144 144 234 144 142 239 142 140 237 138 137 231 135 132 223 129 127 211 127 124 203 127 125 200 128 127 195 134 134 196 136 136 196 138 138 198 140 139 199 140 138 201 140 136 197 140 132 191 139 130 183 137 128 175 134 124 161 128 118 145 123 112 129 117 106 114 110 100 99 105 94 88 99 93 81 93 98 76 93 98 75 97 95 74 103 92 74 109 90 73 112 91 72 114 92 71 114 92 69 122 96 73 123 87 63 137 82 61 164 85 68 199 88 79 224 86 83 245 80 84 252 79 83 226 62 60 222 60 55 221 56 52 222 55 49 225 54 47 225 54 46 221 55 43 218 55 40 212 55 38 211 56 36 211 56 38 213 56 39 216 54 41 221 53 42 224 51 44 221 53 44 203 51 40 196 54 40 194 57 41 193 60 43 194 63 45 194 63 45 193 60 43 192 56 40 195 53 39 220 74 61 218 70 58 213 65 53 206 60 47 196 54 40 196 59 43 190 54 38 198 58 41 199 58 41 199 58 41 201 58 42 202 56 41 203 55 41 204 54 40 205 51 39 213 57 45 213 55 44 214 51 42 215 51 42 218 51 43 223 54 47 229 58 51 233 60 56 240 60 61 237 52 57 235 48 55 236 49 56 238 51 60 237 52 60 235 55 64 234 61 67 221 55 59 225 65 65 236 78 75 248 89 85 253 90 85 250 81 76 239 66 62 229 56 52 226 54 50 224 55 50 224 55 50 224 55 50 225 56 53 226 57 54 228 59 56 228 59 56 225 55 55 228 56 56 230 56 58 232 56 59 235 56 60 235 56 60 235 56 60 236 56 59 239 53 56 238 52 55 236 53 55 231 55 55 226 58 55 217 58 52 207 56 47 199 55 44 194 56 43 191 58 43 189 59 43 187 60 43 187 60 43 187 60 41 187 60 43 187 60 41 184 57 38 189 64 42 179 57 36 177 54 36 182 59 43 180 49 39 194 52 48 235 80 84 255 92 105 254 75 96 243 59 85 237 57 86 238 65 93 236 73 102 227 75 100 202 79 97 130 56 57 102 62 54 85 63 50 71 64 48 59 60 44 56 54 41 65 52 43 78 55 47 72 43 35 83 60 44 103 93 66 129 136 95 146 171 116 149 188 123 148 194 122 149 192 123 146 180 120 156 184 133 154 180 133 128 154 109 92 117 75 72 98 53 78 104 56 91 120 66 95 125 63 99 131 64 104 140 68 108 146 71 106 146 73 104 146 74 103 144 76 102 143 75 100 137 68 100 135 67 99 134 68 101 136 70 104 139 75 107 142 78 107 143 79 106 142 78 105 144 79 105 144 79 105 144 77 104 144 74 103 143 72 104 146 72 108 148 75 111 153 77 115 161 86 115 163 87 117 163 88 50 52 38 48 52 38 48 49 41 48 49 43 49 50 45 50 51 46 51 52 46 52 54 43 57 59 45 59 62 45 63 65 51 68 70 57 73 74 68 77 79 78 82 81 87 83 83 93 88 86 100 92 90 111 100 97 126 110 108 148 122 119 172 132 130 195 140 137 214 145 143 227 148 145 234 147 144 235 142 139 226 137 133 217 130 127 204 127 124 195 127 124 191 128 126 189 132 131 189 134 133 190 137 136 193 141 138 193 139 136 189 137 133 183 135 127 174 133 125 166 133 123 157 128 118 143 121 110 127 114 102 112 109 97 99 107 93 90 105 90 83 99 91 78 92 97 75 90 98 74 97 95 74 103 92 74 111 89 75 115 89 74 117 90 73 119 91 70 118 86 65 123 81 59 139 81 61 171 88 70 205 91 80 226 84 80 237 71 73 239 63 65 219 50 47 220 53 47 225 53 49 227 54 48 227 53 46 225 53 43 224 54 41 219 56 41 214 55 36 211 56 36 209 56 38 212 57 39 216 54 41 220 54 42 224 51 44 218 54 45 200 54 41 189 56 39 188 55 38 189 58 40 191 62 43 194 63 45 195 59 43 196 56 41 198 52 39 233 85 73 211 60 49 204 56 44 209 66 52 190 53 37 192 61 43 192 61 43 192 56 40 196 56 39 197 57 40 199 58 41 200 57 41 203 55 41 204 54 40 205 51 39 210 54 42 212 51 41 213 50 41 219 52 44 227 58 51 233 62 55 236 63 57 236 61 58 232 52 53 236 53 57 239 54 59 238 53 59 234 50 58 230 51 57 228 55 61 226 60 64 243 85 86 252 98 98 255 109 106 255 105 100 243 86 81 228 65 60 223 54 51 221 52 47 223 54 49 222 55 49 222 55 49 223 56 50 225 56 53 226 57 54 229 57 55 230 58 56 229 55 56 230 56 57 232 56 59 233 57 60 235 56 60 235 56 60 235 56 60 236 55 60 238 53 58 238 54 56 234 54 55 229 57 55 223 60 55 214 60 52 204 57 47 197 57 44 190 57 42 186 59 42 182 59 41 181 60 41 181 60 43 180 61 41 179 59 42 179 60 40 179 58 39 183 64 44 173 56 38 173 56 39 179 59 45 171 43 34 193 53 52 252 97 103 253 85 100 249 72 92 238 62 85 232 62 88 229 73 95 220 81 100 206 81 95 177 85 90 119 70 65 92 70 57 79 66 50 74 67 49 70 67 48 64 61 42 61 54 35 61 50 30 65 50 29 81 70 42 110 107 72 138 147 102 149 172 116 145 180 116 141 184 115 144 186 120 157 187 133 161 184 138 144 167 125 108 130 91 75 95 58 65 87 48 76 99 55 87 114 63 95 123 64 100 131 64 105 138 67 107 145 70 105 145 72 103 145 71 100 143 72 101 142 74 98 135 66 99 134 66 100 135 69 103 138 72 106 141 77 108 143 79 109 145 81 110 146 82 106 145 80 106 145 78 106 146 76 104 146 74 103 145 71 105 147 71 109 151 75 112 156 79 119 166 88 118 166 90 118 166 90 55 56 40 54 56 42 54 54 44 53 54 46 53 54 48 53 54 48 54 55 47 54 56 43 59 62 45 61 64 45 64 67 46 68 71 52 73 75 62 77 78 70 81 80 78 82 82 82 86 85 83 89 88 93 97 95 108 107 105 129 117 115 155 128 125 178 136 134 199 140 138 211 149 146 225 148 145 226 144 141 220 139 135 211 132 129 196 129 125 186 127 124 181 127 124 179 129 126 181 132 129 182 135 133 183 137 134 181 138 132 176 134 128 166 129 122 155 128 119 146 127 115 135 122 110 124 114 101 108 109 95 95 106 91 88 105 90 83 106 89 79 102 90 76 97 96 76 95 97 76 100 95 76 105 92 75 110 91 76 116 90 75 122 90 75 125 90 71 127 84 65 136 81 61 157 81 65 182 86 70 205 83 72 216 72 64 223 58 56 226 52 51 221 49 45 223 51 47 226 53 47 227 53 46 225 51 44 223 51 41 221 53 40 220 57 40 211 56 36 208 57 36 207 58 38 209 58 39 212 56 41 217 55 42 221 53 44 216 55 45 196 59 43 185 58 41 181 54 37 183 56 39 189 59 43 194 61 46 199 59 46 199 55 44 208 57 48 245 92 84 214 61 53 201 53 43 207 65 53 184 51 36 183 58 40 188 63 43 191 58 41 195 58 42 198 58 43 200 58 44 202 59 45 204 58 45 207 56 45 209 55 45 208 51 42 210 49 41 214 49 43 222 55 49 229 60 55 234 62 58 232 59 55 230 55 52 233 55 53 239 59 60 240 60 63 234 54 57 228 49 53 228 53 58 232 66 70 237 77 79 255 120 119 255 113 110 241 96 91 221 74 67 209 56 51 209 50 46 220 55 51 231 64 58 224 57 51 224 57 49 224 55 50 224 55 50 226 54 50 227 55 51 229 55 54 229 55 54 230 54 56 231 55 57 234 55 59 235 56 60 235 56 62 235 56 62 232 55 61 234 55 59 238 55 59 238 55 57 234 55 58 228 58 58 223 61 58 214 61 55 203 59 50 195 59 47 186 56 42 181 58 42 179 59 42 175 60 41 175 60 42 172 60 40 172 59 41 172 59 41 170 59 40 172 61 42 166 56 39 167 57 42 170 56 45 171 48 41 203 64 67 255 105 114 243 78 94 241 72 91 235 69 89 226 73 91 215 80 94 199 85 93 178 86 87 153 90 85 103 75 63 83 74 57 80 68 52 78 67 49 73 67 45 66 64 39 63 66 35 65 71 35 77 85 46 94 103 60 120 129 84 139 153 102 145 164 109 141 169 110 143 178 114 151 185 125 157 183 136 146 167 128 117 134 100 82 99 67 63 80 48 66 83 49 79 97 57 86 108 61 98 123 66 101 130 66 105 138 67 106 144 69 105 146 70 101 145 70 98 144 72 99 142 71 98 135 66 102 134 67 103 138 72 105 140 74 107 142 78 109 144 80 110 146 82 111 147 83 106 145 78 107 146 79 106 147 77 105 147 75 105 147 73 106 150 73 110 154 75 114 158 79 120 167 89 118 167 88 118 167 88 63 61 46 61 62 46 61 61 49 61 61 51 61 61 53 59 60 52 59 61 50 59 61 47 63 66 47 64 68 45 67 71 46 70 74 51 75 76 58 78 79 65 81 81 73 82 82 72 89 87 74 90 90 78 95 94 92 103 101 114 113 110 137 123 121 161 131 128 183 135 133 196 143 140 209 143 140 211 141 138 207 138 133 199 131 127 186 126 121 175 122 119 166 121 118 165 123 119 169 124 122 171 128 125 170 131 126 166 131 125 161 127 121 149 124 116 137 122 114 129 118 107 115 114 102 104 109 95 94 106 91 86 107 90 82 108 90 80 108 90 78 107 91 78 103 94 77 102 95 77 103 94 77 106 93 77 110 93 77 118 92 77 124 92 77 131 89 73 150 94 79 157 85 71 169 77 64 185 73 61 197 64 55 204 56 46 213 50 43 221 50 43 225 53 49 225 54 47 226 53 46 226 52 45 224 50 41 222 52 39 220 54 38 218 59 40 209 57 36 205 59 36 204 59 38 206 59 39 209 58 41 213 57 42 217 55 44 211 57 45 193 62 44 180 59 40 176 53 35 178 53 35 187 57 41 196 60 46 201 59 47 203 55 45 217 63 55 248 91 84 227 73 65 206 58 48 204 64 51 184 54 38 172 51 32 181 60 41 188 57 39 191 55 39 192 55 39 195 55 40 197 55 41 201 55 42 206 55 44 209 55 45 217 60 51 219 58 50 222 57 51 229 60 55 234 62 58 234 61 57 231 56 53 227 52 49 232 57 54 235 60 57 236 58 58 232 56 58 236 62 64 248 80 80 255 98 99 255 112 112 249 104 101 226 84 80 202 61 54 192 49 43 201 52 48 214 59 55 223 61 58 224 59 55 226 59 53 225 58 50 226 57 52 225 56 51 227 55 51 228 55 51 229 53 53 230 54 54 233 54 57 233 54 57 234 55 59 235 56 60 235 56 62 234 55 61 232 55 61 233 54 58 239 56 60 236 56 57 232 56 58 227 59 58 221 62 58 211 62 55 201 60 50 192 60 47 182 56 41 178 58 41 174 59 41 170 59 40 169 60 40 168 59 39 165 58 38 165 58 40 165 60 41 160 57 40 160 59 41 160 57 42 162 54 42 181 62 56 219 84 88 249 102 112 237 76 92 237 74 93 231 76 92 216 78 91 198 83 90 177 87 86 156 92 82 136 97 82 84 71 55 77 74 57 83 70 53 77 62 43 63 51 27 57 54 23 65 77 37 78 102 54 108 138 84 119 148 92 132 155 101 137 154 100 141 155 102 144 163 107 148 173 116 152 176 124 131 149 109 110 125 92 81 96 67 60 74 48 57 70 44 65 80 49 79 95 59 87 106 61 99 122 68 101 130 66 106 139 68 107 145 70 105 146 70 101 145 70 97 143 70 99 142 71 99 136 67 105 137 70 106 141 75 108 143 77 108 143 79 108 143 79 109 145 81 110 146 82 109 148 81 109 149 79 109 150 80 108 150 76 107 151 74 109 153 74 114 159 78 115 162 81 124 173 94 123 172 93 122 171 92 68 65 48 68 66 51 68 66 54 67 67 57 67 67 59 67 67 59 66 66 54 66 67 51 68 70 48 69 72 45 71 74 45 74 77 50 79 78 57 82 81 63 84 82 69 85 83 68 92 90 67 92 92 68 92 93 79 97 97 97 105 104 120 114 113 144 123 122 166 129 126 181 134 130 191 136 131 195 136 132 193 132 129 186 127 123 174 121 115 161 116 111 151 111 109 148 112 109 154 114 111 158 118 113 154 119 115 150 119 115 142 116 111 131 115 107 120 114 105 110 109 97 97 108 95 89 106 92 83 107 90 80 109 91 79 111 91 80 111 92 78 111 92 78 110 92 78 109 93 78 107 94 78 108 95 79 111 95 79 117 96 79 125 93 78 137 89 77 161 95 83 167 79 69 174 66 56 186 59 50 197 55 45 204 50 40 212 51 41 220 53 44 224 55 48 225 54 47 225 52 45 224 51 44 224 52 42 221 53 40 216 55 37 212 57 37 207 58 34 202 61 34 201 61 36 202 62 39 205 60 41 210 59 42 213 57 44 207 59 45 191 64 45 177 60 40 172 53 33 174 51 33 186 56 40 196 60 46 202 58 47 206 53 45 216 57 51 240 78 73 241 84 77 217 66 57 204 66 53 190 63 46 166 49 29 179 60 40 190 60 44 193 57 43 193 55 42 194 54 41 197 55 43 201 57 46 207 59 49 212 59 51 225 68 61 227 65 60 228 63 59 231 62 59 233 61 59 233 59 58 232 56 56 231 56 53 231 56 53 230 57 53 230 55 52 233 59 58 244 74 74 255 92 91 255 100 99 248 99 95 204 61 57 193 56 50 189 52 46 195 56 49 213 65 61 222 69 64 223 61 59 217 52 50 226 59 53 226 59 51 226 57 52 226 57 52 228 56 52 229 56 52 231 55 55 233 55 55 234 54 57 235 55 58 235 54 59 235 56 60 235 56 62 232 55 61 232 55 61 233 54 58 235 55 58 233 54 57 230 56 57 224 59 57 219 62 57 209 62 54 198 60 49 190 60 46 179 56 41 174 59 41 170 59 40 166 59 39 164 59 40 163 58 39 163 58 39 160 57 38 161 62 43 150 55 37 156 61 43 154 57 41 154 50 39 195 80 75 237 107 109 237 93 102 235 80 94 232 75 92 220 74 87 202 77 83 182 84 83 161 93 82 142 101 81 127 106 85 78 75 56 75 72 55 80 63 47 76 55 36 69 53 27 71 71 35 87 111 61 105 146 86 127 178 111 130 179 113 131 165 104 125 146 89 131 141 89 142 150 99 137 151 100 124 140 95 88 102 67 71 84 56 57 69 45 54 66 42 58 68 44 61 74 48 74 88 55 87 104 62 101 124 70 104 130 67 108 139 69 108 144 70 105 147 71 99 145 70 97 145 71 97 143 71 102 139 70 108 140 73 109 144 78 110 145 79 108 143 79 107 142 78 107 143 79 109 145 81 112 151 84 113 153 83 112 153 83 112 154 80 111 155 78 113 157 78 116 163 82 119 166 85 126 175 96 123 174 95 121 172 93 73 67 51 74 68 54 73 69 57 73 69 58 73 71 59 73 71 59 72 70 57 72 71 53 73 72 51 74 74 50 76 76 50 78 78 52 82 80 59 84 81 62 88 82 68 89 84 65 93 89 62 91 90 62 92 89 72 94 91 84 100 97 104 110 107 126 120 115 147 125 120 160 129 123 167 131 125 171 133 127 173 131 124 166 125 119 157 117 110 143 111 105 133 107 103 130 105 102 133 106 103 134 109 104 134 109 105 128 109 105 120 108 103 110 107 98 101 106 96 94 103 93 84 104 92 80 104 90 77 107 91 76 110 93 77 113 94 79 113 94 79 112 93 78 112 93 79 111 93 79 112 93 78 115 93 79 119 93 78 126 93 78 137 91 76 147 87 76 162 84 72 166 69 60 171 57 47 186 55 45 200 56 47 211 54 45 217 54 45 221 54 45 223 54 47 223 52 45 223 52 44 223 52 44 223 55 44 221 55 41 216 54 39 209 54 36 207 58 36 204 60 36 202 60 38 203 61 39 206 59 41 209 59 42 211 58 44 206 60 45 190 65 47 175 60 39 168 51 33 172 51 32 182 57 39 193 61 46 201 59 47 204 56 46 204 50 42 224 65 59 248 91 84 224 73 64 208 68 55 202 70 55 171 50 31 184 63 44 202 70 55 204 66 53 202 64 51 203 63 50 205 63 51 210 66 55 220 69 60 225 71 63 226 64 59 226 61 57 227 58 55 226 54 52 226 54 52 227 55 53 229 57 55 229 60 57 228 63 57 224 61 54 221 58 53 225 63 58 234 77 72 234 81 76 211 64 57 184 41 35 184 45 38 190 53 45 201 62 55 208 65 59 214 62 57 217 59 56 225 59 59 231 61 61 226 57 54 226 57 54 226 57 54 228 56 54 229 57 53 231 58 54 233 57 57 234 58 58 234 56 56 234 56 56 235 56 59 235 56 59 233 57 60 232 56 59 231 55 58 231 55 58 233 54 58 230 54 56 226 56 56 222 58 56 214 61 56 204 61 53 194 60 49 185 59 45 174 57 40 170 59 42 166 59 41 162 59 40 160 59 39 158 59 38 159 58 40 155 58 39 152 63 45 140 53 34 153 61 46 152 56 42 151 47 38 205 92 88 246 122 124 222 88 95 229 89 100 217 81 91 200 77 82 183 77 79 167 87 80 155 97 85 141 104 85 128 110 86 84 84 56 67 72 42 66 57 28 72 59 27 88 80 43 110 116 68 132 162 102 148 193 126 135 188 118 134 184 115 124 158 97 110 130 77 117 126 81 130 135 94 117 125 86 91 98 64 59 68 41 52 60 37 53 61 40 61 68 50 60 69 50 57 67 43 67 80 50 85 101 62 103 123 72 105 131 70 108 139 71 109 145 71 106 147 71 102 146 71 98 144 71 99 142 71 104 141 74 108 143 77 111 146 80 110 147 80 108 143 77 105 142 75 106 143 74 106 146 76 115 155 84 115 157 85 115 157 83 114 158 81 114 158 79 115 162 82 119 166 85 122 171 90 119 167 91 117 165 91 116 164 90 82 75 59 82 75 59 82 74 61 82 74 61 82 74 61 82 74 61 82 74 61 82 75 59 85 78 60 86 79 61 87 80 62 88 81 63 89 82 64 91 84 68 92 85 69 92 85 69 98 91 72 97 90 72 97 89 76 98 89 82 101 93 91 107 97 105 113 102 116 117 106 123 122 110 132 124 112 136 127 115 139 127 115 137 124 112 132 117 106 123 109 98 114 101 93 106 99 96 105 96 95 101 95 93 98 95 90 94 94 90 89 94 89 85 97 90 82 98 90 79 101 91 79 103 91 75 105 92 75 107 92 73 107 92 71 109 92 72 109 93 70 106 94 72 106 98 79 114 101 84 113 90 74 117 79 66 139 87 74 156 92 80 162 90 76 170 91 76 164 78 61 165 70 52 166 60 44 176 56 40 194 56 45 210 56 48 221 52 49 222 49 45 223 54 47 222 55 46 222 55 46 222 55 46 222 55 46 219 55 43 216 54 41 215 55 41 213 56 41 212 56 41 210 57 41 210 57 41 210 57 43 210 57 43 212 56 43 205 59 44 189 59 43 182 62 45 174 57 40 169 49 32 171 50 33 183 57 42 192 60 47 195 57 46 200 53 43 206 53 45 212 58 48 219 67 56 221 75 62 212 72 57 194 61 44 183 50 35 221 80 70 216 74 64 212 70 60 211 69 59 215 73 63 219 72 64 221 68 62 223 61 58 223 55 52 230 56 55 234 58 58 234 58 58 229 57 55 224 55 52 222 57 51 220 61 55 220 69 62 209 65 57 199 57 47 191 50 40 185 48 38 186 52 41 191 59 47 195 63 51 195 58 48 199 61 51 208 64 55 217 64 58 224 62 59 229 60 57 233 57 57 236 58 58 230 56 58 229 56 58 229 56 58 229 57 57 229 57 55 229 57 55 229 57 53 229 57 53 224 52 48 225 53 49 228 54 53 229 55 54 230 56 57 231 57 58 231 57 58 231 57 59 235 59 62 230 57 59 223 57 57 220 61 58 214 65 61 205 66 59 193 65 54 183 63 49 169 58 41 163 60 43 160 61 42 155 60 40 153 58 38 150 58 37 151 56 38 145 56 38 144 65 48 139 60 45 135 47 35 145 47 38 188 76 74 228 109 111 229 109 111 205 86 90 189 76 78 181 78 79 170 81 77 162 85 79 155 88 79 150 93 82 149 97 84 138 106 83 88 89 47 61 75 22 56 69 15 86 97 41 127 141 80 155 176 111 161 188 121 156 189 120 146 181 115 126 157 97 104 128 76 92 109 67 89 100 66 84 93 66 72 80 57 63 68 48 58 61 44 64 67 50 60 64 49 58 62 48 60 67 51 58 67 48 65 78 50 82 100 62 93 115 66 103 131 72 112 143 75 111 147 75 108 146 71 106 146 73 105 147 75 103 144 74 108 144 80 109 145 83 111 147 83 108 147 80 109 146 77 107 147 74 109 150 74 109 152 73 113 156 76 113 158 77 114 159 78 114 161 80 116 163 82 118 167 85 121 170 89 122 170 94 123 168 101 111 155 92 101 145 82 87 78 63 87 78 63 87 78 63 87 78 63 87 78 63 87 78 63 87 78 63 87 78 63 88 79 64 89 80 65 89 80 65 91 82 67 92 83 68 93 84 69 94 85 70 95 86 71 100 91 74 99 90 73 99 89 77 99 89 79 102 91 85 106 95 93 110 98 100 112 100 104 114 101 108 116 103 112 118 105 114 118 105 114 115 102 109 109 96 103 103 91 95 98 88 89 94 91 86 90 90 82 89 86 79 87 84 75 88 84 73 88 84 72 92 86 72 94 87 71 99 90 75 99 90 73 102 91 73 103 92 72 105 93 71 106 94 70 107 95 71 106 95 73 102 97 77 111 103 84 119 91 77 129 83 70 153 86 77 168 88 79 175 82 74 180 82 69 173 73 57 170 67 48 171 61 44 177 57 41 190 56 44 204 55 48 216 52 50 220 51 48 221 54 46 220 56 46 220 56 46 220 56 46 219 55 45 218 56 45 217 55 44 215 55 43 215 55 43 213 55 43 213 55 43 213 55 43 212 56 43 212 56 43 212 56 43 206 58 44 190 60 46 182 62 46 174 57 40 166 49 32 167 50 32 178 58 41 185 62 46 190 60 46 198 58 45 199 52 42 203 52 41 210 59 48 220 69 58 225 79 66 223 81 67 221 79 67 219 70 63 214 65 59 209 60 53 208 59 52 211 62 55 215 62 56 217 58 54 218 53 51 230 56 55 234 56 56 236 56 57 234 56 56 230 56 55 226 58 55 225 62 57 219 66 58 205 64 55 194 61 52 187 57 44 180 52 39 178 52 38 181 55 41 186 60 45 191 64 49 198 64 52 205 64 54 213 65 55 220 63 56 226 58 55 230 56 55 235 55 54 239 56 58 233 54 58 231 54 60 231 55 58 230 56 57 230 56 55 229 57 53 229 57 53 227 58 53 226 57 50 227 58 51 227 58 53 228 59 54 228 59 56 228 59 56 229 57 57 229 57 57 228 58 59 227 59 59 223 60 61 217 63 61 208 65 59 196 63 54 183 61 50 172 59 45 165 59 43 160 61 42 156 61 43 151 60 41 150 59 40 146 58 38 147 56 37 140 58 37 128 57 39 128 56 41 137 53 42 157 60 53 191 81 80 215 101 101 209 94 97 183 77 77 172 78 76 164 84 77 157 89 80 152 92 81 151 94 83 151 94 83 152 95 86 140 102 81 96 95 47 83 103 42 94 114 51 122 144 79 153 175 110 165 190 124 153 178 112 136 160 98 106 130 72 97 117 66 84 101 59 74 88 55 70 80 55 63 72 53 57 63 49 53 56 45 58 60 47 65 66 52 61 63 52 58 61 50 61 65 51 58 67 48 64 77 51 82 100 62 94 116 69 103 131 72 113 144 77 112 148 76 110 146 72 107 148 72 107 147 76 104 145 75 109 145 81 110 146 84 109 148 83 109 148 81 107 147 76 107 148 72 108 151 72 109 152 72 112 157 74 112 157 74 112 160 76 115 162 81 117 166 84 120 169 88 120 169 88 120 168 94 110 152 89 100 141 83 90 131 73 93 84 69 93 84 69 93 84 69 93 84 69 93 84 69 93 84 69 93 84 69 93 84 69 91 82 67 92 83 68 93 84 69 94 85 70 95 86 71 96 87 72 97 88 73 97 88 71 101 93 74 101 93 72 100 91 74 100 91 76 101 91 81 102 91 85 104 93 89 104 93 91 105 93 93 106 94 94 107 95 95 107 95 95 105 94 92 102 91 89 98 87 83 95 86 81 90 86 77 87 84 75 85 81 72 82 78 67 81 77 66 83 79 67 87 81 67 88 82 66 94 87 71 94 87 69 97 89 70 99 91 70 103 92 72 105 94 72 107 96 74 105 97 76 101 96 77 113 101 85 123 94 80 136 88 78 162 91 85 175 88 81 177 74 69 182 71 64 182 65 55 183 63 49 182 60 47 184 56 43 189 55 43 197 57 44 204 57 47 211 57 47 217 56 46 219 55 45 219 55 45 219 57 46 218 56 45 217 55 44 217 55 44 215 55 43 215 55 43 213 55 43 213 55 43 212 56 43 212 56 43 212 56 43 210 57 43 205 59 44 192 62 48 182 62 46 173 58 40 163 50 32 163 51 31 170 58 38 179 62 44 185 62 46 196 63 48 196 56 43 197 50 40 200 52 42 208 60 48 216 70 57 220 77 63 225 78 68 216 59 54 215 53 51 210 51 48 211 53 50 216 58 55 222 63 60 227 62 60 232 60 60 236 57 60 237 54 58 234 51 55 231 51 54 230 54 56 227 57 57 224 60 58 217 64 58 193 55 45 184 56 43 179 53 39 175 52 37 175 52 37 178 55 40 182 59 43 187 61 46 200 68 53 205 67 54 213 66 56 217 63 55 223 58 52 229 56 52 234 54 53 238 55 57 234 54 57 233 54 57 233 54 57 231 55 55 231 55 55 230 57 53 229 57 53 229 58 51 227 58 51 228 59 52 228 59 54 227 60 54 227 59 56 226 58 57 225 57 57 222 56 56 221 57 58 220 60 60 218 64 62 211 66 61 200 63 57 185 58 49 173 55 43 165 55 40 161 59 44 157 60 43 153 60 43 148 59 41 147 58 40 144 57 38 144 55 37 138 57 38 122 54 35 121 54 37 136 57 44 160 70 61 185 83 79 192 87 84 184 80 79 171 73 70 162 77 72 156 83 76 153 89 80 151 94 83 151 97 87 151 97 87 152 95 86 139 101 80 115 114 70 122 141 86 147 166 110 164 185 128 171 192 135 158 179 123 124 144 91 91 111 60 63 82 36 65 83 43 65 80 47 63 76 50 58 67 48 54 60 46 54 57 48 53 56 47 57 59 46 64 65 51 61 63 52 57 60 49 61 65 51 57 66 47 64 77 51 81 99 61 96 118 71 105 133 74 115 146 79 114 150 78 112 148 74 109 150 74 109 149 78 107 148 78 112 148 84 113 149 85 111 150 83 110 150 80 108 148 75 108 149 73 108 151 72 110 153 73 112 157 76 112 157 76 112 159 78 117 164 83 120 169 88 121 170 91 117 166 87 113 160 88 95 137 74 86 127 69 79 120 62 97 88 73 97 88 73 97 88 73 97 88 73 97 88 73 97 88 73 97 88 73 97 88 73 95 86 71 96 87 72 96 87 72 97 88 73 98 89 74 99 90 75 100 91 76 100 91 74 101 93 72 102 94 71 102 94 73 103 95 76 103 94 79 102 92 80 102 92 82 102 92 83 104 93 87 104 93 87 104 93 87 104 94 85 103 93 84 101 91 81 100 90 80 99 91 78 93 89 77 90 86 74 86 82 70 82 78 66 80 76 64 80 77 62 84 78 64 85 79 63 87 81 65 89 84 65 91 86 67 93 88 68 97 90 71 100 93 74 102 95 76 102 97 77 103 97 81 111 99 85 119 91 79 138 91 81 169 98 92 182 91 88 180 71 68 183 61 58 193 61 56 195 60 54 195 58 48 193 57 45 189 56 41 189 57 42 193 61 46 202 62 47 213 57 45 217 55 44 218 56 45 217 57 45 218 56 45 216 56 44 216 56 44 213 55 43 213 55 43 212 56 43 212 56 43 212 56 43 212 56 43 212 56 43 210 57 43 205 59 44 193 63 49 182 62 46 172 57 39 162 51 32 157 51 29 162 56 34 172 61 41 181 64 46 188 63 45 191 58 43 195 55 42 197 53 42 203 55 43 206 58 46 206 60 47 211 58 50 220 55 53 223 50 52 218 50 50 218 52 52 222 56 56 226 60 60 232 62 63 235 61 62 235 56 60 235 52 56 232 49 54 229 50 53 228 54 56 224 56 55 217 55 53 204 55 49 185 51 40 177 54 39 175 53 38 174 54 38 174 54 38 176 56 40 179 58 41 181 58 42 195 65 49 202 66 52 210 66 55 217 64 56 223 60 53 227 58 53 234 56 54 236 56 55 237 54 56 235 55 56 235 55 56 234 56 54 234 56 54 232 57 52 231 58 52 230 59 52 226 57 50 225 58 50 223 58 52 224 59 55 222 58 56 220 58 56 219 57 55 217 57 57 214 60 58 213 64 60 210 67 61 202 65 59 187 59 50 175 54 43 164 54 39 158 55 40 156 59 42 152 59 41 148 59 41 146 59 40 143 58 38 141 56 36 140 55 35 135 57 37 128 61 42 118 53 35 129 53 39 153 69 58 170 80 72 172 77 71 169 76 71 166 81 76 157 80 74 152 85 76 148 90 79 148 94 82 149 97 86 149 97 86 151 97 87 141 103 84 137 133 95 153 169 120 173 189 142 166 184 136 144 161 116 115 134 89 78 96 56 47 65 27 45 62 28 51 66 37 58 70 46 61 70 51 59 65 51 58 61 50 58 61 52 60 61 53 57 57 45 63 64 50 60 62 51 57 60 49 60 64 50 57 66 47 63 76 50 80 98 60 97 119 72 106 134 75 116 147 80 115 151 79 114 150 76 111 152 76 111 151 80 109 151 79 112 151 84 115 152 85 112 152 82 111 151 80 109 150 74 109 150 72 110 153 74 112 155 75 113 158 77 114 159 78 116 163 83 121 168 88 123 172 93 119 167 91 109 157 83 101 146 77 90 132 69 82 123 65 77 118 60 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 99 90 75 100 91 76 100 91 76 101 92 77 102 93 78 102 93 78 102 93 76 102 94 71 103 95 72 104 96 73 105 97 76 105 97 78 105 96 79 104 95 80 103 94 79 106 96 84 105 96 81 105 96 81 104 95 78 104 95 78 104 96 77 104 96 77 104 97 78 100 94 78 96 90 76 91 85 71 86 80 66 80 77 62 78 75 58 78 75 58 78 75 58 80 77 60 82 79 62 84 81 64 86 83 64 88 87 67 91 90 70 93 92 72 95 92 75 99 96 81 105 93 81 112 85 74 134 91 82 172 105 99 189 100 96 191 79 77 197 67 67 205 61 61 210 58 57 209 57 52 203 56 48 194 56 43 187 60 41 184 65 43 190 65 43 208 58 43 215 55 41 216 56 42 215 58 43 217 57 43 214 57 42 214 57 42 212 56 41 212 56 41 212 56 41 212 56 41 210 57 41 210 57 41 210 57 41 210 57 41 205 59 44 193 63 49 182 62 48 171 58 40 161 54 34 154 52 30 155 55 32 163 61 38 175 66 45 179 59 42 186 59 44 194 58 44 199 57 45 203 56 46 206 58 48 208 60 48 216 59 52 232 58 60 234 53 60 228 51 57 226 51 56 223 53 56 223 53 56 225 52 56 225 51 53 233 54 60 232 53 57 231 52 58 230 56 58 226 57 60 218 56 54 206 51 49 191 48 40 181 53 40 174 57 40 174 57 40 173 58 40 173 58 40 173 58 40 173 56 38 175 55 38 184 58 43 193 59 47 205 63 51 215 64 55 221 62 56 225 60 56 231 58 54 235 57 55 237 55 54 238 54 54 238 54 54 237 55 52 234 56 52 232 58 51 231 58 51 228 60 51 225 58 50 223 59 50 223 60 53 220 61 55 219 61 58 217 62 60 215 61 59 212 62 61 207 64 60 203 66 60 197 66 58 185 61 53 173 55 45 163 53 40 158 55 40 154 58 42 150 59 41 147 60 41 145 59 42 141 58 40 138 57 38 137 56 37 136 55 36 131 56 37 131 64 45 117 52 34 123 51 37 147 71 58 164 81 73 161 78 70 158 78 71 161 87 78 152 85 76 146 88 76 144 90 78 141 92 78 143 93 82 148 96 85 151 97 87 143 104 87 141 137 102 152 165 122 157 169 129 128 142 106 93 107 72 68 83 52 50 64 38 36 50 25 45 58 38 48 59 42 53 61 46 57 63 51 60 63 52 61 63 52 58 59 51 58 58 48 57 57 45 62 63 49 59 61 50 56 59 48 59 63 49 56 65 46 62 75 49 80 98 60 98 120 73 107 135 76 117 148 81 116 152 80 115 151 77 113 154 78 113 153 82 111 153 81 114 154 83 114 154 83 114 154 81 112 153 77 109 151 75 109 152 73 112 155 76 115 158 79 116 160 81 118 162 83 120 167 89 123 169 94 122 168 95 113 159 86 100 146 74 89 134 67 92 133 73 85 124 69 81 120 65 101 92 77 101 92 77 101 92 77 101 92 77 101 92 77 101 92 77 101 92 77 101 92 77 101 92 77 102 93 78 102 93 78 102 93 78 103 94 79 103 94 79 104 95 80 104 95 78 103 95 74 104 96 73 105 97 76 106 98 77 106 98 79 106 98 79 106 97 80 106 97 80 106 97 80 105 97 78 104 96 77 104 96 75 104 96 75 104 96 73 105 97 74 106 98 75 102 95 77 98 93 74 94 88 72 88 82 66 83 77 61 77 74 57 75 72 55 73 72 54 75 74 56 76 75 57 76 77 59 78 79 61 80 81 63 81 84 65 83 86 69 84 85 69 92 88 76 95 85 73 100 80 69 124 87 78 161 104 97 181 102 97 193 88 85 211 83 82 214 65 67 220 60 62 219 57 55 210 56 48 200 58 46 189 62 43 178 66 42 183 64 40 204 59 42 212 55 40 213 56 41 213 57 42 214 57 42 213 57 42 213 57 42 212 56 41 212 56 41 210 57 41 210 57 41 210 57 41 210 57 41 210 57 41 210 57 41 205 59 44 193 63 49 181 61 47 171 60 41 162 57 36 153 54 31 149 53 29 155 59 34 167 65 42 178 66 46 185 64 47 191 59 44 195 55 42 197 50 40 203 52 43 210 59 48 223 61 56 233 54 58 237 52 60 234 55 61 232 57 62 229 59 62 228 59 62 225 59 61 224 58 60 223 53 56 224 55 58 226 57 62 224 61 62 217 61 62 207 58 54 194 51 47 181 48 39 177 57 43 172 61 42 172 61 42 171 62 42 170 61 41 169 60 40 169 58 39 171 56 37 175 54 37 183 56 41 197 59 48 206 62 51 214 61 53 222 60 55 227 59 56 232 59 55 236 56 55 239 55 53 239 55 53 238 56 53 235 58 52 233 59 52 231 60 52 228 61 52 226 62 53 224 63 55 222 65 58 218 65 59 217 65 62 213 65 63 209 64 61 205 66 63 195 63 58 187 64 56 179 61 51 170 56 45 161 53 40 155 53 39 152 56 40 149 60 42 145 60 40 141 60 41 138 60 40 136 58 38 134 57 39 132 55 37 131 54 36 127 54 37 125 58 41 116 51 33 126 57 42 151 79 65 163 89 78 156 82 71 149 79 69 152 86 74 149 89 78 144 91 77 142 90 77 140 91 77 142 92 81 147 95 84 153 96 87 145 103 87 126 120 88 121 131 94 114 124 90 85 96 66 59 69 44 47 59 37 48 59 42 48 60 46 51 61 50 52 60 49 54 60 50 60 63 54 64 65 57 63 65 54 60 60 48 55 55 43 56 57 43 62 63 49 58 60 49 55 58 47 58 62 48 55 64 45 61 74 48 79 97 59 98 120 73 107 135 76 117 148 81 117 153 81 116 152 78 113 154 78 114 154 83 112 154 82 114 154 81 115 156 80 114 155 79 112 153 75 110 153 74 112 155 76 115 158 79 118 161 82 121 165 88 123 167 90 122 168 93 120 166 93 113 159 87 103 148 79 93 138 69 88 130 66 95 134 77 87 126 71 82 121 66 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 103 94 79 104 95 80 104 95 80 104 95 80 104 95 80 105 96 79 106 97 80 106 98 79 106 98 79 106 98 79 105 96 79 105 96 79 105 97 78 105 97 78 105 97 78 104 96 75 104 96 75 104 96 73 104 96 73 104 97 71 104 97 71 104 97 71 102 95 76 101 94 75 98 91 73 92 87 68 87 82 63 80 77 58 76 73 56 73 72 54 73 72 54 71 72 54 71 74 57 71 75 58 72 76 59 73 77 60 72 79 63 74 78 63 82 80 67 89 81 70 92 78 67 105 82 68 129 89 77 149 87 76 174 84 76 209 91 89 217 75 74 223 65 66 223 57 57 217 55 50 207 59 49 195 62 45 183 64 42 180 60 36 201 58 41 211 55 40 212 56 41 211 58 42 213 57 42 211 58 42 211 58 42 211 58 42 210 57 41 209 58 41 209 58 41 209 58 41 209 58 41 209 58 41 209 58 41 205 59 44 193 61 48 181 61 47 172 61 44 163 60 41 152 56 32 144 52 27 149 57 32 161 65 41 173 67 45 182 65 47 191 61 47 192 54 43 194 47 37 199 48 39 208 54 46 222 58 56 232 53 57 238 54 62 236 59 65 233 64 67 229 66 69 224 66 67 220 64 65 217 63 63 204 50 50 207 55 54 211 58 60 207 62 59 199 60 57 189 56 49 180 53 46 171 53 41 170 60 45 167 62 43 167 62 43 166 63 44 165 62 43 166 61 40 166 59 39 169 58 39 170 55 37 177 56 39 188 56 43 195 57 46 203 56 48 211 58 52 220 61 57 228 63 59 233 58 55 236 57 53 236 57 53 235 58 52 233 59 52 232 59 52 229 61 52 226 62 52 224 66 55 221 67 57 218 67 60 213 66 59 207 65 61 202 63 60 199 61 59 191 62 57 177 60 51 169 58 47 162 56 43 156 54 40 152 55 39 148 56 41 145 58 41 141 58 40 139 61 41 137 60 42 135 60 41 131 58 39 130 57 40 128 55 38 127 54 37 125 54 36 120 51 35 120 53 37 133 66 50 152 85 69 157 87 75 148 80 67 144 80 68 149 90 76 147 89 77 144 90 78 144 92 81 144 92 81 146 91 84 149 92 85 152 91 86 142 98 85 107 98 69 86 96 61 74 83 52 61 71 44 54 63 42 50 61 44 52 62 51 53 63 54 54 61 54 56 63 56 61 66 59 67 70 61 69 71 60 67 68 54 64 62 47 59 57 42 55 56 42 61 62 48 58 60 49 55 58 47 58 62 48 54 63 44 61 74 48 78 96 58 97 119 72 107 135 76 117 148 81 117 153 81 116 152 78 114 155 79 114 154 83 112 154 80 113 155 79 114 157 78 113 156 77 112 155 76 111 154 75 114 157 78 117 161 84 121 165 88 127 171 96 126 169 97 122 165 93 113 156 85 102 145 76 95 137 71 93 135 69 94 136 73 97 136 79 89 128 73 82 121 66 104 95 80 104 95 80 104 95 80 104 95 80 104 95 80 104 95 80 104 95 80 104 95 80 103 94 79 104 95 80 104 95 80 104 95 80 104 95 80 104 95 80 105 96 81 105 96 81 109 100 85 108 99 84 106 97 82 105 96 81 104 95 80 103 94 79 103 94 77 104 96 77 105 97 78 105 97 76 105 97 76 105 97 76 104 96 73 104 96 73 104 97 71 104 96 73 103 97 75 102 95 76 101 94 75 98 91 72 92 87 68 85 82 63 80 77 60 77 76 58 69 70 52 68 71 52 68 72 55 68 72 55 66 73 57 66 75 58 66 75 58 67 74 58 74 74 62 84 80 68 85 79 65 89 76 60 101 75 58 115 69 53 146 74 62 192 91 83 215 83 79 222 70 69 223 59 58 220 55 53 213 59 51 204 61 47 189 60 41 184 55 34 203 58 41 207 56 39 208 57 40 210 59 42 210 59 42 210 59 42 210 59 42 210 59 42 209 58 41 209 58 41 209 58 41 209 58 41 209 58 41 209 58 41 209 58 41 205 59 44 193 59 48 182 58 46 173 60 44 167 62 43 153 57 35 143 51 26 147 55 30 159 63 39 163 57 35 176 59 41 192 62 48 198 60 49 204 56 46 208 55 47 217 60 53 227 63 61 236 61 66 238 63 68 233 67 69 226 68 67 214 64 63 202 59 55 192 53 48 187 49 46 183 48 44 187 54 49 190 58 54 187 60 54 179 58 50 169 57 46 164 56 44 160 58 43 161 61 45 159 62 43 160 63 44 161 64 45 161 64 45 163 64 43 163 62 42 164 61 42 169 59 42 173 58 40 178 55 40 184 54 41 191 53 43 201 57 48 212 63 57 224 67 62 229 60 55 232 59 53 232 59 53 231 60 52 229 60 53 228 61 52 225 62 53 222 64 53 220 68 57 216 68 58 210 67 59 202 65 57 196 63 58 188 59 54 184 56 53 176 57 51 162 55 45 153 56 40 149 53 39 147 54 39 145 58 41 143 60 42 139 58 41 133 56 38 136 61 42 133 60 43 131 60 42 128 60 41 126 58 39 124 56 37 123 54 38 123 54 38 121 49 35 128 56 42 140 71 56 150 83 67 146 80 66 139 76 61 144 82 69 153 95 83 145 87 76 146 89 78 148 91 82 150 93 84 150 93 86 151 92 86 150 89 84 140 94 81 97 88 59 69 77 40 54 64 30 56 65 38 62 71 50 60 69 52 51 61 50 45 55 46 49 56 49 55 62 54 66 69 60 71 74 63 72 73 59 66 67 49 63 62 42 59 58 38 55 56 40 61 62 48 57 59 48 54 57 46 58 62 48 54 63 44 60 73 47 78 96 58 97 119 72 106 134 75 117 148 81 116 152 80 116 152 78 114 155 79 114 154 83 112 154 80 113 156 77 113 156 76 113 156 76 112 155 75 112 155 76 115 158 79 119 163 86 123 167 92 130 173 101 128 171 100 120 163 92 106 149 80 93 135 69 89 131 65 94 136 72 101 143 80 99 138 81 90 129 74 83 122 67 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 95 83 106 96 87 106 96 87 106 96 87 106 96 87 106 96 86 106 96 86 106 96 84 106 97 82 106 97 82 106 97 80 106 97 80 106 98 79 106 98 79 106 98 79 106 98 77 106 98 77 103 95 74 103 95 74 102 94 73 101 95 73 98 93 73 90 88 67 83 80 61 77 76 58 72 73 55 69 72 55 65 69 54 64 68 53 63 69 55 63 71 56 63 71 56 63 69 55 72 74 61 74 75 61 67 68 52 75 74 54 92 81 59 96 70 47 128 75 57 189 107 93 217 104 96 224 86 83 226 71 69 229 65 64 226 64 61 215 61 53 203 59 48 201 59 45 199 51 37 203 53 38 204 54 39 205 55 40 205 55 40 206 56 41 209 59 44 211 61 46 210 60 45 210 60 45 210 60 45 210 60 45 209 59 44 209 59 44 209 59 44 206 60 45 187 50 40 182 55 46 177 59 47 168 58 41 154 55 34 148 53 31 149 55 30 156 57 34 174 65 45 179 59 43 186 54 41 193 52 42 205 54 47 215 60 55 226 67 63 234 72 69 232 68 69 232 69 72 221 67 67 201 58 54 187 54 49 180 56 48 176 55 46 169 52 43 171 57 47 169 57 46 164 56 46 160 56 45 155 57 44 150 58 43 147 60 43 146 60 43 150 61 43 152 61 42 153 62 43 154 63 44 155 64 45 156 65 44 158 66 45 161 64 45 162 59 42 165 58 40 171 55 40 176 54 41 182 54 43 190 56 45 197 58 51 204 60 52 218 61 54 224 61 54 226 63 56 226 65 55 226 65 57 222 66 54 218 64 54 215 64 53 216 72 61 210 69 59 199 65 56 187 59 50 178 53 47 170 51 45 166 49 42 159 50 43 153 57 45 146 59 42 145 57 43 141 58 42 139 58 41 136 59 41 135 59 43 133 60 43 128 57 39 125 56 40 124 57 40 124 57 40 124 57 40 123 56 39 121 54 38 120 51 36 119 45 32 139 65 52 151 79 67 147 77 65 142 76 64 145 81 69 147 85 74 142 82 71 152 92 82 152 92 82 145 85 77 144 84 76 151 90 85 149 88 83 148 87 84 147 103 90 93 84 53 73 81 42 65 75 40 66 75 44 62 72 47 55 64 43 50 61 45 52 63 49 52 60 49 72 80 67 90 94 80 87 91 74 77 79 58 68 70 46 65 65 39 61 61 37 58 59 41 62 63 49 59 61 50 58 61 50 59 63 49 52 61 42 59 72 46 80 98 60 99 121 74 108 136 77 117 148 81 115 151 79 114 150 76 112 153 77 114 154 83 113 155 81 112 157 76 113 158 75 114 159 78 114 159 78 115 159 80 118 162 85 123 167 92 127 170 98 130 173 102 120 163 94 106 147 79 96 137 71 94 135 69 97 137 74 102 142 80 104 144 84 100 137 83 91 128 76 84 121 69 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 95 83 106 95 89 106 95 91 106 95 91 106 95 89 106 95 89 106 96 87 106 96 86 106 96 84 106 96 84 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 80 106 97 80 104 96 77 104 96 75 103 95 74 103 95 74 100 93 74 94 89 69 85 82 63 79 78 58 73 74 58 69 72 55 66 68 54 64 68 53 63 69 55 62 70 55 62 70 55 61 69 54 66 70 56 65 67 53 64 69 49 72 76 53 77 73 48 82 65 39 124 82 58 185 117 98 201 100 88 221 96 90 234 86 84 230 72 71 226 64 62 226 64 61 219 62 57 209 56 48 205 57 43 206 61 44 207 61 46 207 62 45 207 59 45 206 59 43 205 57 43 205 58 42 206 58 44 208 58 43 208 58 44 208 58 43 208 58 44 208 58 43 208 58 44 205 59 46 201 63 53 197 66 58 188 66 55 174 61 47 159 54 35 150 49 29 150 49 29 155 50 29 168 53 35 180 54 40 195 59 47 209 65 56 222 69 63 230 73 68 233 74 70 234 75 72 224 66 65 219 69 68 208 66 62 190 59 51 175 57 47 171 61 48 165 63 49 159 61 48 159 63 49 156 62 50 151 62 48 149 61 47 143 61 47 139 62 46 135 64 46 136 63 44 142 61 42 143 60 42 146 60 43 145 62 44 148 63 43 148 63 43 150 63 44 153 62 44 159 64 46 161 61 45 164 58 44 168 56 44 173 55 43 178 56 45 184 57 48 189 56 47 202 60 50 208 60 50 211 63 53 213 65 55 215 67 57 214 67 57 212 68 57 209 69 56 202 66 54 195 65 52 185 61 51 176 58 48 169 54 47 164 53 46 159 52 44 153 55 44 146 58 46 140 61 44 138 59 44 136 59 43 134 58 42 132 59 42 131 60 42 129 60 44 126 59 42 124 59 41 123 57 41 121 58 41 120 57 40 119 56 39 117 54 39 119 52 36 128 52 39 144 68 55 152 78 67 145 75 63 140 74 62 143 81 68 146 84 73 144 82 71 147 83 74 152 88 79 152 85 79 151 86 80 156 93 88 148 87 82 142 83 79 138 99 84 93 87 53 88 99 57 95 106 66 90 102 66 73 84 54 54 67 41 52 64 42 60 72 52 79 88 71 89 98 81 95 102 84 87 92 70 74 78 55 66 69 42 63 63 35 60 60 34 57 58 40 61 62 48 58 60 49 57 60 49 60 64 50 53 62 43 59 72 46 80 98 60 100 122 75 108 136 77 117 148 81 116 152 80 114 150 76 113 154 78 114 154 83 113 155 81 115 160 79 114 159 76 112 157 76 113 158 77 116 160 81 120 164 87 124 167 95 127 170 99 123 166 97 111 154 85 99 140 74 93 134 68 97 137 74 101 141 78 101 141 78 99 139 79 100 137 83 91 128 76 84 121 69 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 95 85 106 95 91 106 94 94 106 94 94 106 95 93 106 95 89 106 96 87 106 96 86 106 96 84 106 96 84 106 96 84 106 96 84 106 96 84 106 96 84 106 96 84 106 96 86 106 96 84 108 97 79 107 96 76 105 97 78 105 97 78 102 95 76 97 92 72 89 86 67 83 82 62 77 75 60 72 73 57 68 70 56 65 69 54 65 69 54 63 70 54 62 68 54 61 67 53 62 69 53 58 62 45 66 71 49 73 75 51 69 63 37 84 64 39 132 92 67 181 116 96 179 87 74 214 100 90 239 101 98 236 84 83 230 70 72 235 71 72 232 66 68 219 57 54 203 55 43 201 58 42 201 58 44 201 58 42 203 57 44 202 56 41 200 54 41 200 54 39 202 56 43 203 55 41 203 55 43 203 55 41 203 55 43 204 56 42 204 56 44 203 56 46 194 51 45 190 53 47 182 54 45 173 51 40 161 48 34 158 47 30 160 49 32 167 51 36 188 65 50 199 67 55 214 71 63 225 76 70 231 76 71 233 74 70 229 70 66 223 68 64 216 66 65 209 67 65 195 63 58 177 59 49 166 60 47 161 65 49 156 69 52 152 69 51 149 68 51 146 67 52 143 66 50 138 65 48 133 64 48 130 65 47 126 65 46 129 64 46 132 59 42 136 59 43 137 58 41 137 60 42 139 60 43 139 60 43 142 61 42 143 60 42 150 63 46 152 60 45 155 59 43 158 56 42 162 56 43 167 56 45 170 58 46 175 57 47 185 57 46 190 57 48 193 59 48 196 62 51 197 63 51 197 65 52 195 65 51 193 65 52 182 59 44 178 58 44 170 56 45 163 55 43 158 54 43 155 54 44 152 55 46 148 58 47 141 59 47 136 60 44 135 59 45 132 59 44 130 58 43 128 59 43 128 59 43 127 60 44 125 59 43 122 59 42 122 59 44 119 57 42 118 56 41 117 55 40 116 54 41 118 52 38 136 59 49 148 70 60 150 78 66 142 74 61 136 72 60 141 79 66 145 83 72 146 82 73 146 79 73 153 84 79 153 83 81 154 86 83 154 93 90 147 89 85 141 91 84 141 108 91 129 125 88 126 137 94 128 139 97 108 120 82 76 88 52 54 68 35 61 74 46 76 90 64 101 113 89 101 111 87 93 101 77 80 85 62 69 73 48 63 67 40 61 64 35 58 60 36 56 57 39 59 60 46 56 58 47 57 60 49 61 65 51 54 63 44 60 73 47 80 98 60 100 122 75 109 137 78 118 149 82 116 152 80 115 151 77 113 154 78 114 154 83 112 154 80 117 162 81 112 160 76 110 157 76 112 159 79 117 164 86 121 167 92 125 168 96 124 167 96 112 153 85 102 143 77 92 132 69 92 132 69 101 140 77 105 144 81 102 141 78 95 133 72 99 136 82 90 127 76 83 120 69 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 96 86 107 96 92 107 95 95 107 96 94 107 96 92 107 96 90 107 97 88 107 97 87 107 97 85 107 97 85 107 97 85 107 97 85 107 97 85 107 97 87 107 97 87 107 97 88 107 97 87 110 98 82 109 98 80 106 98 79 106 98 79 104 97 78 101 94 75 95 90 71 89 86 69 82 79 62 77 75 60 71 72 58 68 70 56 67 69 55 66 68 54 64 68 53 62 66 51 63 70 52 60 65 45 71 73 51 76 70 48 77 59 37 110 78 57 152 100 79 167 96 78 158 66 53 197 84 76 229 100 95 239 95 94 237 83 85 237 74 79 234 68 72 227 64 65 205 56 49 199 57 45 197 55 43 197 55 43 200 56 45 202 58 47 203 59 48 205 58 48 209 62 52 209 62 52 210 62 52 210 62 52 211 63 53 211 63 53 211 63 53 211 62 55 211 63 59 209 66 62 203 68 62 198 70 61 194 70 60 195 73 62 199 77 64 206 80 68 217 83 72 221 80 71 226 77 71 228 73 69 228 71 66 226 67 63 224 65 61 220 65 61 214 69 66 202 67 63 189 62 55 173 59 48 161 61 46 155 66 48 151 70 51 148 73 54 142 69 52 140 69 51 138 66 51 133 66 49 130 64 48 125 64 46 123 64 46 124 63 45 128 59 44 131 57 44 131 58 43 132 59 44 132 59 44 133 60 45 135 59 43 136 59 43 137 58 43 140 57 41 143 55 41 147 55 42 150 56 44 156 58 47 160 59 47 163 59 48 170 58 47 173 56 46 175 57 47 176 58 46 176 58 46 176 58 44 175 57 43 174 56 42 168 55 41 165 55 40 158 54 41 155 54 42 149 55 43 146 56 45 145 57 47 142 60 48 136 60 46 133 60 45 131 59 44 129 57 42 127 58 42 126 57 42 125 58 42 125 59 43 124 58 44 122 59 44 121 59 44 119 57 42 115 56 42 113 54 40 114 55 41 117 53 41 140 68 56 146 72 61 145 75 63 138 72 58 135 73 60 139 79 68 147 84 75 151 84 76 150 81 76 155 84 80 152 81 79 148 83 79 150 92 88 144 95 88 144 104 94 151 126 106 148 148 112 133 146 102 117 130 87 89 104 63 67 82 43 63 79 42 80 96 60 99 114 81 101 116 85 92 105 75 78 88 61 67 76 49 63 69 43 62 66 41 61 65 40 59 61 39 55 56 40 58 59 45 55 57 46 57 60 49 61 65 51 55 64 45 60 73 47 79 97 59 98 120 73 108 136 77 118 149 82 117 153 81 116 152 78 114 155 79 114 154 83 111 155 80 113 160 79 111 158 77 111 158 77 115 162 82 122 168 93 124 170 97 122 165 94 117 160 91 99 140 74 94 135 69 91 131 68 95 135 72 103 142 79 106 145 80 102 141 76 96 135 72 98 135 81 89 126 75 82 119 68 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 96 84 107 96 90 107 96 92 107 96 90 107 97 88 107 97 87 107 97 85 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 97 85 107 97 87 107 97 87 107 97 88 107 97 87 111 99 85 110 98 82 107 98 81 107 98 81 107 98 81 104 97 79 100 93 77 96 90 74 88 82 66 82 79 62 78 75 60 73 71 56 71 69 54 68 69 53 66 67 51 63 66 49 64 72 49 65 70 47 77 71 49 83 62 43 101 62 45 148 90 76 170 96 83 153 63 52 155 52 43 179 64 57 214 89 85 241 106 103 245 101 101 235 82 85 232 73 78 233 77 80 217 73 65 211 70 60 205 64 54 203 62 52 206 64 54 210 68 58 213 71 61 215 71 62 218 74 65 218 74 65 221 74 66 221 74 66 222 75 67 222 75 67 224 75 68 224 75 69 235 83 82 232 84 84 227 83 82 220 82 79 216 83 76 216 83 76 219 85 76 224 85 78 224 76 72 225 73 70 227 69 66 226 67 64 228 66 64 226 67 64 228 69 66 224 70 68 218 73 70 203 68 64 188 61 55 174 60 50 163 62 50 153 66 49 147 68 51 146 71 52 141 68 51 138 66 51 137 65 51 132 63 48 130 62 49 128 62 48 125 62 47 125 62 47 127 59 46 128 58 46 128 58 46 128 58 46 128 61 45 129 60 45 129 60 45 131 59 45 130 57 42 132 56 42 134 56 43 138 56 42 140 57 43 144 58 45 146 58 46 148 58 47 155 59 47 158 57 45 159 57 45 160 58 44 161 57 44 162 56 43 162 56 42 162 56 42 159 56 41 156 56 41 152 56 40 148 56 41 143 57 42 140 58 44 137 58 45 135 59 45 132 58 45 130 58 44 129 57 43 128 56 42 125 56 41 125 55 43 124 56 43 123 57 43 122 56 44 121 57 45 120 58 45 118 56 43 113 53 42 111 53 41 113 55 43 116 57 43 140 72 59 141 73 60 137 73 61 132 73 59 133 75 63 140 82 70 147 87 77 152 88 79 152 81 77 156 85 81 152 82 80 147 86 81 146 96 89 136 98 87 131 103 91 134 122 100 110 114 81 90 105 64 74 89 48 65 82 40 73 90 48 87 105 63 100 118 78 106 124 86 88 105 69 76 91 58 63 76 46 58 68 41 60 68 44 62 67 45 60 65 45 58 61 44 56 57 43 58 59 45 54 56 45 56 59 48 62 66 52 55 64 45 59 72 46 76 94 56 95 117 70 105 133 74 116 147 80 116 152 80 116 152 78 114 155 79 115 155 84 112 156 81 110 157 77 109 158 76 112 161 80 119 168 89 124 170 97 122 168 96 114 157 88 105 147 81 90 131 65 92 132 69 97 136 73 101 140 77 103 142 77 103 142 75 104 141 74 102 138 76 99 134 80 89 123 73 82 116 66 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 97 85 108 98 89 108 98 89 108 98 89 108 98 86 108 98 86 108 99 82 108 99 82 108 100 81 108 100 81 108 100 81 108 99 82 108 99 84 108 98 86 108 98 88 108 98 88 108 98 88 111 99 85 110 98 82 107 98 81 108 99 82 108 99 82 107 98 81 103 96 80 100 93 77 94 87 71 89 83 67 83 77 63 77 74 59 75 72 57 71 69 54 69 66 51 64 65 47 61 71 46 66 70 45 81 66 45 98 61 45 129 69 58 169 89 82 178 79 74 155 46 43 175 60 57 184 62 59 208 84 82 242 112 110 254 118 118 243 100 104 237 88 94 242 93 95 227 85 81 218 80 70 212 71 64 208 67 58 209 68 61 212 71 62 214 71 65 214 71 63 217 72 67 218 74 66 220 72 68 221 74 67 222 74 70 222 75 68 224 75 71 224 75 71 226 72 72 225 71 73 220 72 72 217 71 71 214 72 68 215 72 68 216 71 66 219 70 66 224 66 65 228 65 66 230 66 65 232 66 66 231 67 66 228 66 64 223 65 62 219 65 63 221 73 71 205 66 63 188 59 54 175 61 51 165 63 51 153 64 48 146 65 48 144 67 51 140 64 50 137 64 49 136 62 49 134 60 49 132 60 48 129 59 49 129 59 49 128 60 49 128 60 49 127 61 49 127 60 51 127 61 49 127 61 49 127 61 47 127 61 49 127 61 47 128 60 47 129 60 45 131 59 45 131 57 44 133 57 44 132 56 42 133 55 43 133 54 41 141 57 46 143 56 46 145 57 45 148 58 47 151 59 46 154 61 46 158 60 47 159 62 46 153 57 41 150 57 40 147 58 42 144 58 43 138 59 44 135 59 43 132 59 44 130 58 43 130 58 44 129 57 43 127 55 41 126 54 40 123 53 41 123 53 41 123 53 41 122 54 41 120 54 42 120 56 44 119 57 44 115 56 42 112 52 41 111 53 41 114 58 45 118 60 48 139 77 64 137 75 60 132 74 60 130 77 61 133 81 67 139 86 72 146 88 77 151 87 78 147 78 73 153 84 79 151 86 82 149 92 85 144 101 92 123 94 80 102 86 70 96 94 71 69 79 45 62 78 41 63 79 40 74 92 50 95 114 69 107 126 81 101 120 75 88 106 64 77 95 55 64 81 45 54 69 38 55 68 42 61 70 49 61 68 52 58 62 48 55 59 45 56 58 44 58 59 45 54 56 45 56 59 48 62 66 52 55 64 45 57 70 44 73 91 53 91 113 66 101 129 70 114 145 78 115 151 79 115 151 77 114 155 79 115 155 84 112 156 81 109 156 76 111 160 79 115 164 85 120 168 92 122 168 96 115 160 91 105 147 81 96 138 72 89 129 66 94 134 71 101 140 77 103 142 77 102 141 74 101 141 71 103 140 71 104 140 76 97 132 78 88 122 72 81 115 65 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 98 88 108 98 86 108 98 86 108 99 82 108 99 82 108 100 79 108 100 79 108 100 77 108 100 77 108 100 77 108 100 79 108 100 81 108 99 82 108 99 84 108 98 86 108 98 86 111 99 85 109 97 83 107 98 83 108 99 84 109 100 85 108 99 84 105 96 81 102 95 79 98 91 75 94 87 71 88 81 65 82 76 60 79 73 57 74 71 54 73 67 51 65 67 46 60 70 43 66 69 42 86 64 43 122 70 57 163 80 76 178 72 72 180 57 60 183 52 57 197 67 69 193 65 64 200 75 73 222 98 96 241 113 112 242 109 112 233 97 101 228 89 92 219 81 78 213 76 68 207 68 63 205 66 59 207 68 63 208 69 62 208 66 62 205 64 57 210 67 63 210 67 61 212 67 64 213 68 63 215 67 65 216 68 64 217 69 67 218 68 67 221 65 68 221 65 68 222 68 70 221 71 72 223 73 72 224 74 73 227 73 73 229 71 72 231 65 67 234 65 68 236 66 69 236 66 69 231 65 65 226 64 62 219 61 58 214 60 58 219 69 70 204 60 60 188 54 51 177 58 50 169 62 52 155 61 49 147 61 48 145 63 49 139 60 47 139 59 48 138 58 49 137 57 48 136 56 49 135 56 51 136 57 52 133 58 52 128 60 51 125 61 51 125 61 52 125 61 51 125 61 51 125 61 49 125 61 51 124 60 48 124 60 48 124 61 46 126 60 46 126 58 45 125 57 44 125 56 41 126 54 42 126 54 42 131 57 46 131 57 46 135 57 45 137 57 46 141 57 46 145 59 46 149 60 46 150 61 45 146 57 41 145 58 41 141 58 42 138 59 42 135 59 43 131 60 42 128 59 43 126 59 42 128 56 42 128 56 44 126 54 42 125 53 41 124 52 40 122 52 40 122 52 42 121 53 42 117 50 41 118 54 44 118 56 45 114 54 43 111 51 41 111 53 42 115 58 47 120 64 51 138 80 66 134 78 63 129 78 61 130 81 64 133 86 70 137 88 73 142 85 74 145 82 73 146 79 73 151 84 78 147 84 79 145 92 86 138 102 90 110 91 74 80 75 55 69 75 49 65 78 48 75 90 57 87 103 67 96 114 74 103 121 79 100 122 76 86 108 62 71 93 47 65 86 45 55 72 36 49 64 33 54 66 42 61 70 53 60 68 57 56 61 54 55 58 51 57 59 46 59 60 46 54 56 45 57 60 49 63 67 53 55 64 45 55 68 42 70 88 50 86 108 61 97 125 66 111 142 75 113 149 77 115 151 77 114 155 79 116 156 85 113 157 82 111 158 80 113 162 81 117 166 87 118 166 90 115 161 89 106 151 82 98 140 74 91 133 69 94 134 72 96 136 73 99 138 75 101 140 75 102 141 74 102 142 72 102 139 70 101 137 73 96 131 77 87 121 71 80 114 64 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 105 96 81 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 98 86 108 99 84 108 99 84 108 99 82 108 100 81 108 100 79 108 100 79 108 100 77 108 100 77 108 100 79 108 100 79 108 100 81 108 99 82 108 99 84 108 99 84 108 99 84 110 98 84 109 97 83 109 97 83 109 97 83 109 100 85 108 99 84 106 97 82 103 96 80 100 93 77 96 89 73 90 83 67 85 78 62 80 75 56 77 72 53 73 68 49 69 67 46 65 69 42 71 67 40 92 65 44 137 83 71 175 92 88 169 63 65 169 49 51 203 74 78 195 64 69 189 61 62 185 59 60 195 71 71 216 90 91 229 101 102 221 88 91 205 71 72 209 74 71 207 69 66 205 66 63 206 67 62 210 71 66 210 71 66 206 67 62 201 62 55 207 68 61 209 68 61 210 68 64 212 69 65 214 69 66 217 69 67 220 67 69 222 68 70 222 63 67 223 64 68 222 66 69 223 69 69 225 71 71 224 70 70 224 66 67 225 62 63 232 66 68 234 64 67 232 62 65 231 61 62 228 62 62 228 64 63 226 67 64 223 69 67 215 65 66 200 56 56 184 52 48 177 58 52 169 62 54 155 61 51 146 60 47 142 63 50 137 59 47 136 58 48 136 58 48 136 56 49 136 55 51 138 55 51 137 56 52 136 59 53 128 58 50 126 59 50 126 59 50 124 60 50 124 60 48 124 60 48 124 60 48 124 60 48 120 56 44 121 57 45 124 58 46 124 58 46 125 59 45 125 59 45 125 57 44 125 57 44 126 58 47 127 57 47 128 55 46 129 55 44 132 54 42 133 53 42 134 55 42 134 55 40 138 56 42 136 57 42 136 59 43 133 60 45 132 60 45 128 61 44 126 60 44 125 59 43 125 57 44 125 55 45 124 54 44 121 53 42 122 52 42 120 52 41 120 52 41 120 53 44 114 50 40 117 53 43 118 56 45 114 54 43 110 52 41 110 53 42 116 59 48 120 66 54 138 85 71 132 80 66 128 79 64 132 83 68 136 87 73 140 86 74 140 82 71 141 78 71 149 84 78 148 85 78 139 82 75 132 88 77 127 100 83 101 90 68 71 75 50 61 74 44 73 88 57 90 107 73 103 120 84 99 120 81 89 110 69 83 104 61 78 99 56 74 95 52 58 76 38 48 63 30 44 57 29 53 62 41 61 67 53 60 66 56 58 60 55 57 60 53 59 61 50 59 61 48 55 57 46 57 60 49 63 67 53 56 63 45 56 66 41 69 85 49 85 104 59 97 122 67 110 138 77 114 147 78 114 150 78 114 154 81 115 157 83 113 157 82 114 160 85 117 163 88 118 164 91 116 162 90 111 154 85 102 144 78 94 136 72 91 131 68 100 140 78 97 137 75 96 135 72 99 138 73 102 141 74 103 142 75 101 138 69 97 133 69 96 131 77 87 121 71 80 114 64 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 81 107 98 81 107 98 81 107 98 81 108 99 82 108 99 82 108 99 82 108 99 82 108 99 84 108 99 84 108 99 84 110 98 84 107 93 80 112 96 81 116 100 87 114 100 87 110 98 86 106 96 84 104 96 83 104 98 84 103 97 83 103 97 81 99 93 77 91 86 67 86 81 61 83 78 56 78 72 50 71 65 41 76 70 44 74 62 36 98 73 51 145 103 87 182 120 109 187 108 101 183 89 87 185 79 79 182 66 69 189 66 69 194 68 71 200 70 72 205 72 75 208 74 75 211 75 77 211 75 77 205 69 69 205 69 69 208 70 68 211 72 69 212 70 66 207 68 61 206 67 60 207 70 60 200 68 56 201 69 57 203 69 60 207 68 63 212 67 64 216 66 67 222 63 68 222 61 67 225 66 70 223 67 68 223 67 68 224 68 69 224 68 69 225 70 68 225 70 68 227 69 68 227 67 67 228 66 64 228 64 63 227 63 62 227 63 62 227 63 61 227 63 61 224 66 63 211 66 63 197 62 58 184 57 51 170 55 48 160 57 48 151 61 50 142 62 51 134 62 50 131 63 50 129 63 51 129 61 50 129 59 51 132 57 51 135 56 51 136 56 49 136 57 50 133 59 48 132 60 46 132 60 46 129 60 45 129 59 47 128 58 46 128 58 46 128 58 46 126 58 45 126 58 45 126 58 45 126 58 45 126 58 47 126 58 47 126 58 47 126 58 47 125 57 48 125 57 48 126 56 48 126 56 46 128 55 46 128 55 46 128 55 46 126 56 44 128 56 44 126 56 44 125 57 44 124 56 45 123 57 45 122 56 44 120 56 44 120 56 44 120 56 46 120 56 46 119 55 45 118 56 45 118 54 44 116 54 43 115 53 42 113 53 43 109 49 39 114 54 44 110 52 41 109 51 40 111 54 43 109 52 41 113 56 45 127 73 61 133 83 72 133 83 74 134 82 71 136 82 72 139 80 72 144 81 74 148 81 75 149 82 76 147 84 77 141 84 75 137 91 78 130 99 81 111 95 72 89 85 58 77 86 55 79 95 59 106 126 89 98 120 81 89 111 72 85 106 67 82 103 64 77 98 59 73 89 53 67 82 49 55 68 38 52 62 35 50 58 35 54 59 39 60 62 48 64 66 53 64 64 54 60 62 51 53 56 45 51 57 45 52 58 46 55 58 47 57 61 47 59 63 46 61 66 44 60 69 40 83 95 59 97 114 70 110 134 82 115 145 85 114 149 81 114 154 83 115 157 83 114 157 85 117 158 90 126 167 101 126 167 101 112 152 89 98 138 75 94 134 71 94 134 72 94 132 71 96 134 73 98 136 75 100 138 77 102 141 78 101 140 77 99 138 75 96 135 72 94 132 71 95 130 76 84 118 68 75 109 59 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 110 98 84 114 98 83 113 97 82 114 98 85 113 99 86 114 102 90 111 103 90 109 101 88 106 100 86 103 99 87 107 104 89 111 105 89 108 103 84 104 99 79 99 94 72 91 85 61 82 76 52 80 74 48 72 62 37 81 63 41 107 80 61 127 88 71 132 78 66 136 69 61 147 68 63 177 87 86 184 84 84 187 81 81 192 80 79 192 78 77 193 77 77 194 76 74 194 76 74 205 85 84 197 73 71 192 62 62 195 61 58 205 67 64 209 70 65 205 66 59 199 62 52 202 68 57 202 68 57 204 70 61 208 69 62 214 69 66 219 66 68 223 64 69 224 63 69 223 67 70 223 67 68 223 67 68 223 69 69 224 69 67 224 70 68 225 70 68 225 70 68 224 69 65 225 67 64 224 66 63 224 65 62 226 64 61 226 64 61 226 64 61 224 66 63 213 68 63 200 67 60 186 62 54 172 58 48 160 57 48 148 58 47 138 60 48 130 60 48 128 65 50 126 64 51 126 62 52 127 60 51 131 58 51 134 57 49 136 56 49 137 57 48 135 59 46 133 60 45 132 59 44 132 59 44 131 59 45 130 58 44 130 58 44 130 58 44 127 57 45 127 57 45 127 57 45 127 57 45 126 58 47 126 58 47 126 58 47 126 58 47 125 57 48 125 57 48 125 57 48 125 57 48 125 57 48 125 57 48 124 57 48 124 57 48 124 57 48 122 58 48 122 58 48 121 57 47 121 57 47 121 57 47 119 57 46 119 57 46 119 56 47 119 56 47 116 56 46 115 55 45 114 54 44 114 54 44 112 54 43 112 54 43 107 49 38 113 55 44 109 52 41 108 51 40 111 54 43 108 51 40 112 55 44 126 72 62 132 82 73 133 83 76 136 81 74 139 80 74 144 81 76 148 80 77 149 81 78 148 83 79 138 79 71 133 83 72 128 91 75 123 101 80 115 105 80 104 107 76 102 113 81 103 120 84 94 116 77 88 110 71 80 102 63 76 97 58 75 95 58 75 92 58 71 86 55 67 80 52 60 70 45 56 64 41 54 59 39 55 58 41 60 61 47 63 64 50 62 62 50 59 61 48 52 58 48 51 59 48 53 59 49 54 60 48 58 60 47 60 63 46 62 65 44 62 68 42 81 91 57 94 109 68 107 129 82 112 140 82 112 147 83 113 153 82 115 157 83 115 158 86 120 159 94 124 162 101 120 158 97 107 145 84 96 134 73 93 131 70 93 131 70 92 130 69 96 134 73 97 135 74 99 137 76 101 139 78 100 138 77 98 136 75 96 134 73 94 132 73 93 127 76 82 116 66 73 107 57 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 110 98 84 113 100 84 111 95 80 109 93 80 109 95 82 113 101 89 111 103 92 108 100 89 104 98 86 102 98 87 112 108 96 123 120 105 126 123 106 127 121 105 122 117 98 112 105 86 101 96 74 84 84 60 70 70 46 67 62 40 77 66 46 83 64 47 85 56 40 93 55 42 108 61 51 110 55 48 117 57 49 126 59 53 135 64 58 146 73 66 155 80 74 165 88 80 171 91 82 185 94 89 183 84 78 181 72 69 186 67 63 198 68 66 206 71 67 210 68 64 207 64 58 208 65 59 209 66 60 211 68 62 213 70 64 215 70 67 219 69 70 222 68 70 222 68 70 222 68 68 222 68 68 222 68 68 221 69 68 223 69 69 222 70 69 223 69 67 223 69 67 222 68 66 222 68 66 221 68 63 220 67 62 221 66 61 221 66 61 221 66 61 220 67 62 214 69 64 206 69 63 195 66 60 179 62 53 162 58 49 148 56 45 136 57 44 131 59 45 130 64 50 127 64 49 126 62 50 127 61 49 131 58 49 134 57 49 135 56 49 136 58 48 135 59 46 132 59 44 132 59 44 132 59 44 130 58 44 130 58 44 128 58 46 128 58 46 127 57 45 127 57 45 126 58 47 126 58 47 126 58 47 126 58 47 126 58 47 126 58 47 125 57 48 125 57 48 125 57 48 125 57 48 124 57 48 123 56 47 123 56 47 123 56 47 123 59 49 123 59 49 122 58 48 121 59 48 120 58 47 120 58 47 120 58 47 120 58 47 116 56 46 116 56 46 115 55 45 115 55 45 114 54 44 113 53 43 111 53 42 111 53 42 106 49 38 111 54 43 109 52 41 107 50 39 108 54 42 105 51 39 109 55 43 125 71 61 135 80 73 135 80 73 139 80 74 142 81 76 145 82 77 146 83 78 148 85 80 145 86 80 140 87 79 135 91 80 126 94 79 116 98 78 111 105 81 111 114 85 108 119 89 102 119 85 81 101 66 75 95 58 69 89 54 68 85 51 69 86 54 71 86 57 71 84 56 69 82 56 63 73 48 60 68 45 57 62 42 55 59 42 58 60 46 60 62 48 59 61 47 57 59 46 54 60 50 53 61 50 54 60 50 54 60 48 58 60 47 60 62 48 61 64 45 61 67 41 77 87 53 90 105 64 102 124 77 108 136 78 110 145 81 113 153 82 117 159 85 116 159 87 122 161 96 119 157 96 110 148 87 99 137 76 92 130 69 92 130 69 92 130 69 90 128 67 95 133 72 97 135 74 98 136 75 100 138 77 99 137 76 97 135 74 95 133 72 93 131 72 91 125 74 80 113 66 70 103 56 105 96 81 105 96 81 105 96 81 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 106 97 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 110 98 84 114 100 87 111 97 84 109 95 82 107 95 83 107 97 87 108 99 90 108 101 91 106 102 93 106 102 93 120 116 105 136 132 120 145 141 129 149 143 129 146 140 126 137 130 114 125 122 103 96 99 78 79 84 62 68 71 50 70 69 49 72 67 48 70 61 44 76 60 44 86 67 52 80 57 43 82 54 42 86 52 42 89 53 41 92 54 43 97 57 47 101 61 49 109 61 49 136 76 66 157 83 74 173 86 79 181 79 75 188 70 68 196 66 66 208 68 67 216 70 70 212 64 62 213 65 63 214 66 62 216 68 64 217 69 67 219 69 68 219 69 68 221 69 68 222 68 68 221 69 68 221 69 68 221 69 68 221 69 68 221 69 68 221 69 66 220 71 67 219 70 66 218 69 65 217 68 62 217 68 62 218 67 60 218 67 60 219 68 61 217 68 62 214 67 60 211 70 63 201 70 62 186 65 56 167 59 49 152 56 44 140 57 43 133 60 45 131 64 48 127 64 49 126 63 48 127 61 47 131 58 49 132 58 47 135 57 47 136 58 46 132 58 45 132 59 44 132 59 44 131 58 43 130 58 44 130 58 44 127 57 45 127 57 45 127 57 45 127 57 45 126 58 47 126 58 47 126 58 47 126 58 47 126 58 47 126 58 47 125 57 48 124 57 48 125 57 48 123 56 47 123 56 47 123 56 47 123 56 47 120 56 46 123 59 49 121 59 48 121 59 48 121 59 48 120 58 47 120 58 47 120 58 47 118 58 47 115 55 45 115 55 45 115 55 45 114 54 44 113 53 43 111 53 42 111 53 42 109 52 41 106 49 38 111 54 43 108 51 40 104 50 38 107 53 41 104 50 38 108 54 42 124 70 60 138 79 71 140 79 74 141 80 75 143 82 77 144 83 78 145 86 80 144 87 80 140 90 81 137 93 82 133 97 85 121 95 80 105 90 71 100 95 73 100 104 79 92 102 75 78 93 64 69 85 56 65 81 52 61 77 48 60 75 46 63 77 51 67 81 55 70 82 58 71 83 59 66 76 52 62 71 50 58 65 47 57 61 44 57 61 46 57 61 46 56 60 45 55 59 45 55 61 51 54 61 53 54 59 52 54 60 50 58 60 49 59 61 47 60 63 44 60 65 42 74 83 52 86 101 62 98 120 73 106 134 76 110 145 81 115 155 84 119 161 87 120 162 90 123 162 97 114 152 91 101 139 78 92 130 69 90 128 67 92 130 69 92 130 69 90 128 67 95 133 72 96 134 73 97 135 74 98 136 75 97 135 74 96 134 73 94 132 71 93 131 74 90 124 74 78 111 64 69 102 55 104 97 81 104 97 81 104 97 81 105 98 82 105 98 82 106 99 83 106 99 83 106 99 83 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 114 102 88 116 104 92 115 103 91 109 99 89 106 97 88 108 101 93 115 110 104 122 119 112 129 126 119 144 141 134 160 157 148 168 165 156 171 167 156 168 164 153 163 157 145 153 150 135 122 123 107 99 102 83 79 82 63 71 74 55 69 72 53 66 69 50 66 69 50 69 72 53 75 76 60 74 72 57 71 68 53 68 62 48 65 57 44 65 55 43 64 54 42 70 52 40 85 53 42 113 66 56 142 79 72 160 79 75 175 73 71 191 71 73 204 69 73 211 66 69 213 64 66 215 65 66 216 66 65 217 67 66 218 69 65 218 69 65 218 69 65 218 69 65 221 69 68 221 68 70 221 68 70 219 69 70 219 69 68 219 69 68 219 69 68 217 69 67 218 70 66 217 69 65 214 70 62 213 69 61 213 69 61 213 69 61 213 69 61 214 70 62 212 65 58 211 67 59 206 69 61 193 66 57 174 62 51 158 57 45 145 59 46 138 60 47 132 63 48 129 63 47 128 62 46 128 61 45 129 59 47 132 58 45 134 58 45 135 59 46 132 58 45 131 59 45 130 58 44 130 58 44 130 58 44 129 57 43 127 57 45 127 57 45 126 58 47 126 58 47 126 58 47 126 58 47 125 58 49 125 58 49 125 58 49 125 58 49 124 57 49 122 58 49 124 57 49 121 57 48 121 57 48 120 56 47 120 56 47 118 55 46 121 58 49 121 58 49 120 57 48 118 58 48 118 58 48 117 57 47 117 57 47 116 58 47 114 55 47 113 54 46 113 54 46 112 53 45 111 52 44 110 51 43 110 51 43 109 52 43 106 49 40 109 55 45 106 52 42 104 50 40 106 52 42 102 50 39 106 54 43 125 68 59 141 78 71 143 78 72 144 81 74 144 84 76 144 85 79 142 87 80 138 89 82 131 91 81 123 89 77 118 92 79 107 90 74 93 85 66 89 88 68 89 94 72 79 89 65 63 75 51 58 72 47 55 69 46 52 66 43 53 65 43 56 68 46 61 73 51 67 76 55 69 78 57 66 75 54 63 72 53 60 69 50 58 65 47 56 63 47 55 62 46 53 60 44 52 58 44 53 60 52 53 60 53 54 59 53 54 59 52 57 59 48 58 60 47 59 62 45 59 64 41 71 80 49 82 97 58 96 118 71 105 133 75 111 146 82 117 157 86 121 163 89 121 163 91 120 159 96 110 145 87 96 131 73 90 125 67 91 126 68 94 129 71 94 129 71 93 128 70 96 131 73 97 132 74 98 133 75 98 133 75 97 132 74 96 131 73 95 130 72 94 129 73 87 124 73 76 112 66 66 102 56 104 97 81 104 97 81 104 97 81 105 98 82 105 98 82 106 99 83 106 99 83 106 99 83 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 107 97 85 110 100 90 112 102 92 108 99 90 107 100 92 114 109 103 132 129 124 145 144 140 167 163 160 181 177 174 196 193 188 201 198 193 201 196 190 197 192 186 192 185 177 185 178 168 164 156 143 136 130 114 102 99 84 80 81 63 70 73 56 62 69 51 59 68 49 58 70 50 56 69 51 56 69 51 56 67 50 58 66 51 60 66 52 64 67 56 67 69 58 71 69 57 64 52 40 83 56 47 104 61 54 129 68 65 163 79 79 192 87 91 204 81 86 202 67 73 211 71 74 214 70 70 216 70 70 218 70 68 219 70 66 219 70 66 220 68 63 220 68 65 221 69 68 221 68 70 219 69 70 219 69 70 218 68 67 218 68 67 218 68 67 217 69 67 217 69 65 215 70 65 214 69 64 212 69 61 211 68 60 210 69 60 211 70 61 212 69 61 212 63 56 213 64 57 208 67 58 198 67 57 182 65 55 165 61 48 150 61 47 140 61 46 134 62 47 130 63 47 129 62 46 128 61 45 129 60 45 131 59 45 132 58 45 133 59 46 130 58 44 130 58 44 130 58 44 130 58 44 129 57 43 127 58 43 127 57 45 126 56 44 126 58 47 126 58 47 126 58 47 126 58 47 125 58 49 125 58 49 125 58 49 125 58 49 122 58 49 122 58 49 121 57 48 121 57 48 120 56 47 118 55 46 118 55 46 116 56 46 119 56 47 117 57 47 117 57 47 115 57 46 116 56 46 115 57 46 114 56 45 114 56 45 113 54 46 113 54 46 112 53 45 111 52 44 110 51 43 109 52 43 108 51 42 106 52 42 104 50 40 108 54 44 105 51 41 102 50 39 104 52 41 101 49 38 105 53 42 123 66 57 142 77 71 146 77 72 145 80 74 143 84 76 141 86 79 135 88 78 129 89 79 124 92 81 115 92 78 107 91 76 96 87 70 86 83 66 80 83 66 74 81 63 64 73 54 52 64 44 51 60 43 50 59 42 48 57 40 48 57 40 50 59 42 53 62 45 57 66 49 60 69 52 63 72 55 63 72 53 62 71 52 58 70 50 58 67 50 53 64 47 51 62 45 49 60 44 51 58 51 51 57 53 52 57 53 52 57 50 56 57 49 57 59 46 59 62 45 59 64 42 67 76 47 79 94 55 93 115 68 105 132 77 112 147 83 119 159 89 121 163 89 119 161 89 113 152 89 102 137 79 90 125 67 88 123 65 92 127 69 93 128 70 93 128 70 94 129 71 96 131 73 96 131 73 96 131 73 96 131 73 96 131 73 95 130 72 94 129 71 93 128 74 85 121 73 74 110 64 65 101 57 104 97 81 104 97 81 104 97 81 105 98 82 105 98 82 106 99 83 106 99 83 106 99 83 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 98 86 106 96 86 106 97 88 107 100 90 107 103 94 117 112 106 136 133 128 159 158 154 176 176 174 195 194 192 211 210 208 226 225 223 231 230 228 231 227 224 227 222 218 222 214 211 217 206 200 206 188 178 184 165 151 151 135 122 121 109 93 95 89 73 75 76 58 64 69 49 59 68 47 62 74 54 61 72 55 61 70 53 59 67 52 59 62 53 58 59 51 57 56 51 58 55 48 63 60 51 69 59 50 81 53 49 99 55 52 137 71 72 177 92 95 199 96 100 202 87 90 205 81 83 209 79 79 213 78 75 216 77 74 219 74 71 221 72 68 224 69 65 223 68 66 222 68 68 221 68 70 221 68 70 220 67 69 220 67 69 219 66 68 219 67 66 217 67 66 218 68 67 216 68 64 213 68 63 212 69 63 211 68 60 210 69 60 211 70 61 212 69 61 217 64 58 217 64 58 209 66 58 200 67 58 188 67 58 172 64 52 153 59 47 140 57 43 137 61 47 131 62 46 129 62 45 128 61 44 129 60 44 131 59 44 131 59 44 132 60 45 130 58 44 130 58 44 130 58 44 129 57 43 127 57 45 127 57 45 126 56 46 125 57 46 126 58 47 126 58 47 125 58 49 125 58 49 125 58 49 125 58 49 125 58 49 125 58 49 122 58 49 121 58 49 120 57 48 120 57 48 119 56 47 116 56 46 115 55 45 114 56 45 116 56 46 115 57 46 114 56 45 113 56 45 114 56 45 112 55 44 112 55 44 112 55 44 111 54 45 111 54 45 110 53 44 110 53 44 109 52 43 108 51 42 107 50 41 105 51 41 103 49 39 107 55 44 104 52 41 101 49 38 104 52 41 98 48 37 102 52 41 122 65 56 144 77 71 146 77 72 145 80 74 142 85 76 136 88 78 129 89 79 120 90 79 114 92 78 107 94 78 94 87 71 82 80 65 75 78 61 67 74 58 57 66 49 50 58 43 48 56 41 49 55 43 49 55 45 48 54 44 47 53 43 47 53 41 48 56 43 50 58 43 52 60 45 57 68 52 59 70 53 61 72 55 60 73 55 59 70 53 54 67 49 51 64 44 49 62 45 46 56 48 48 54 50 49 54 50 50 55 49 55 56 50 57 59 48 58 60 46 58 63 41 63 72 43 75 89 53 91 113 67 104 131 76 113 147 86 119 158 91 119 161 89 115 156 86 103 141 80 94 129 73 85 120 64 87 122 66 91 126 70 91 126 70 91 126 70 93 128 72 95 130 74 95 130 74 95 130 74 95 130 74 94 129 73 94 129 73 93 128 72 93 128 74 85 118 73 74 107 64 64 96 55 104 97 81 104 97 81 104 97 81 105 98 82 105 98 82 106 99 83 106 99 83 106 99 83 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 105 98 82 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 99 84 108 98 86 112 103 94 110 103 95 108 103 97 116 113 106 135 132 127 161 160 156 188 188 186 206 208 207 207 207 207 224 224 224 242 242 242 250 248 249 251 247 246 247 243 240 241 236 233 240 226 223 232 208 198 221 193 181 193 171 157 162 145 129 125 117 98 94 92 71 75 77 55 67 72 50 65 73 50 65 73 52 64 71 53 66 68 55 65 65 55 66 61 57 67 57 55 65 57 54 59 58 53 66 61 55 71 53 49 76 45 43 102 54 54 145 81 82 181 102 105 199 109 109 192 92 92 199 90 87 206 87 83 211 84 78 216 78 75 222 74 72 225 70 68 226 68 67 221 68 70 219 69 70 219 69 70 220 67 69 220 67 69 219 66 68 219 67 66 219 67 66 220 68 67 217 67 66 215 67 63 212 67 62 212 67 62 211 68 60 210 69 60 213 69 61 221 66 61 219 65 57 210 66 58 202 68 59 191 69 58 176 65 54 156 58 45 139 53 38 138 60 47 133 61 46 130 61 45 128 61 44 129 60 44 129 60 44 131 60 42 132 60 45 130 58 44 130 58 44 130 58 44 127 58 43 127 57 45 126 56 44 125 57 46 125 57 46 126 58 47 126 58 47 125 58 49 125 58 49 125 58 49 125 58 49 125 58 49 123 59 49 121 58 49 119 59 49 120 57 48 117 57 47 116 56 46 115 57 46 114 56 45 113 55 44 114 56 45 113 56 45 112 55 44 110 56 44 112 55 44 109 55 43 111 54 43 111 54 43 111 54 45 111 54 45 110 53 44 109 52 43 108 51 42 106 52 42 105 51 41 104 52 41 102 50 39 107 55 44 104 52 41 99 49 38 101 51 40 98 48 37 101 51 40 120 66 56 142 77 71 146 79 73 142 82 74 138 85 77 131 88 79 122 90 79 113 91 77 104 92 76 90 84 68 73 74 58 63 67 52 62 68 54 57 65 50 48 56 43 47 55 42 54 60 50 52 55 48 53 56 49 53 55 50 52 55 48 50 53 46 48 54 44 48 56 45 49 57 44 54 65 51 58 69 53 61 74 57 62 75 57 60 73 55 55 70 51 50 65 44 49 62 45 44 54 46 46 52 48 48 53 49 49 54 48 54 55 49 56 58 47 58 60 46 58 63 43 60 69 42 73 87 52 89 111 65 103 130 77 112 146 86 118 157 92 117 158 88 112 153 85 96 134 73 88 123 67 83 118 62 87 122 66 91 126 70 89 124 68 89 124 68 92 127 71 95 130 74 95 130 74 94 129 73 94 129 73 94 129 73 93 128 72 93 128 72 93 127 76 83 116 73 72 104 65 63 93 55 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 106 99 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 108 100 87 105 98 90 103 100 93 118 115 110 147 146 142 175 175 173 196 198 197 218 220 219 234 238 239 243 244 246 246 247 249 252 252 254 255 255 255 255 255 253 255 251 250 252 247 244 253 242 236 247 225 212 242 216 199 224 202 181 198 182 159 170 160 135 136 132 105 98 98 70 69 72 45 68 72 47 67 71 48 70 69 49 71 68 53 70 60 51 67 54 48 70 52 50 73 57 57 65 60 57 66 61 58 70 56 55 75 54 53 101 69 70 147 105 106 198 147 146 233 172 169 211 140 136 199 119 112 191 96 90 195 86 81 210 82 79 219 77 76 225 71 73 225 69 72 220 70 71 220 74 75 217 68 70 210 60 62 215 62 64 225 72 74 225 71 73 216 62 64 218 64 64 218 64 64 217 65 64 215 66 62 215 66 62 212 64 60 209 64 59 211 64 57 222 67 62 219 65 57 211 64 57 202 65 57 190 66 56 176 64 53 159 58 46 144 56 42 140 61 48 135 62 47 131 62 46 129 62 45 128 61 44 127 60 43 129 61 42 129 60 44 127 58 43 127 57 45 127 57 45 126 56 44 126 56 46 124 56 45 124 56 45 124 56 45 124 57 48 124 57 48 124 57 48 124 57 48 122 58 49 122 58 49 122 58 49 122 58 49 121 61 53 119 60 52 119 59 51 117 58 50 116 57 49 113 56 47 112 55 46 112 55 46 111 54 45 109 55 45 109 55 45 108 56 45 109 55 45 108 56 45 109 55 45 109 55 45 105 50 43 109 54 47 112 57 50 111 56 49 107 52 45 103 50 42 103 50 42 104 51 43 101 48 40 105 55 46 100 50 41 93 45 35 96 48 38 95 47 37 98 50 40 115 62 54 140 79 74 143 80 75 136 81 74 129 82 74 125 89 77 118 95 81 102 89 73 84 78 62 68 69 53 62 69 53 58 67 50 53 64 48 52 60 47 51 59 48 52 58 48 52 58 48 54 56 51 55 56 51 54 54 52 52 54 49 51 53 48 49 54 47 47 54 46 46 54 43 46 57 43 50 61 45 54 67 50 58 71 54 58 73 54 56 71 52 52 67 46 49 63 46 42 52 43 44 50 46 45 50 46 46 51 45 52 53 47 55 57 46 58 60 47 58 63 43 54 62 38 68 82 49 87 108 67 104 130 82 115 148 93 119 158 95 114 155 87 107 148 82 91 126 68 88 121 68 84 117 64 84 117 64 87 120 67 90 123 70 91 124 71 90 123 70 94 127 74 98 131 78 98 131 78 94 127 74 92 125 72 95 128 75 96 129 76 94 126 77 83 113 75 70 100 66 61 88 55 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 108 100 89 103 100 93 111 110 106 134 133 131 164 164 162 193 195 194 214 218 219 234 238 239 247 251 252 247 251 254 248 252 255 252 253 255 254 254 254 255 255 253 255 254 250 255 252 249 255 250 243 255 240 224 251 235 212 237 223 197 215 205 178 192 187 157 164 163 132 130 131 99 103 106 75 76 81 51 71 74 47 69 67 46 71 66 47 72 62 50 73 58 51 76 57 53 75 60 57 66 56 55 71 62 63 81 69 69 96 80 80 124 104 103 166 140 139 207 178 174 232 197 191 255 213 207 234 177 168 201 131 123 188 99 93 199 87 85 213 83 83 219 74 77 216 67 69 213 71 70 210 70 69 215 73 72 219 75 75 218 70 70 212 62 63 214 61 63 221 67 69 217 63 63 217 63 63 218 64 64 218 64 64 217 65 62 214 65 61 212 64 60 212 63 57 220 65 60 219 64 59 211 64 57 203 66 58 191 67 59 177 65 54 160 59 49 146 56 45 140 61 48 135 62 47 131 62 46 129 62 45 128 61 44 127 60 43 129 60 44 129 60 44 127 58 43 127 57 45 127 57 45 126 56 44 125 57 46 124 56 45 124 56 45 124 56 45 124 57 48 124 57 48 124 57 48 124 57 48 122 58 49 123 59 50 123 59 50 122 59 50 119 60 52 117 60 51 117 58 50 115 58 49 114 57 48 110 56 46 111 54 45 109 55 45 109 55 45 108 56 45 108 56 45 108 56 45 108 56 45 106 56 45 108 56 45 108 56 45 107 54 46 110 55 48 111 56 49 110 57 49 108 55 47 105 52 44 103 50 42 101 51 42 99 49 40 100 52 42 95 47 37 94 46 36 98 50 40 94 46 36 96 48 38 112 62 53 129 74 69 135 82 76 135 88 82 126 88 79 114 86 75 100 82 68 81 74 58 62 63 47 58 65 49 54 65 48 53 64 48 51 62 48 52 60 49 52 60 49 53 59 49 55 58 51 55 57 52 55 55 53 55 55 53 53 55 50 52 54 49 49 54 47 47 54 46 47 55 44 46 57 43 49 60 46 52 65 48 56 69 52 57 72 53 56 71 52 52 69 50 52 66 49 46 56 47 46 53 46 46 51 45 45 50 43 50 51 43 52 54 43 56 58 45 57 61 44 55 63 40 68 81 51 87 108 69 104 130 85 116 149 96 119 157 98 112 152 89 103 143 80 89 124 68 87 120 67 84 117 64 84 117 64 86 119 66 89 122 69 89 122 69 89 122 69 91 124 71 95 128 75 95 128 75 92 125 72 91 124 71 94 127 74 94 127 74 94 123 77 82 109 74 70 95 66 59 84 55 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 107 98 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 110 101 86 110 101 86 108 102 90 101 100 95 121 123 120 151 153 152 178 182 183 205 209 210 228 233 236 244 249 252 250 255 255 251 255 255 252 255 255 253 254 255 254 254 254 255 254 252 255 255 251 255 255 250 255 255 244 254 252 231 250 249 221 239 240 209 225 229 196 210 216 180 188 196 159 160 168 131 135 145 108 96 103 69 81 88 55 68 71 44 68 67 46 74 68 52 76 68 55 75 65 56 73 62 58 68 58 57 84 74 75 107 95 95 130 118 118 157 146 144 192 178 175 219 206 200 234 220 211 248 228 217 255 240 229 255 224 214 234 167 159 190 101 97 177 67 68 198 72 75 219 86 89 216 88 85 207 79 76 202 70 66 204 69 66 210 70 69 214 70 70 216 68 68 217 67 68 214 61 63 216 62 64 217 63 63 217 63 63 217 65 64 214 64 63 213 65 61 213 64 58 217 64 58 217 64 58 210 66 58 203 69 60 192 68 60 178 66 55 161 60 50 147 57 46 142 60 48 137 61 48 131 62 47 129 62 46 127 61 45 126 60 44 128 61 45 128 61 45 127 57 45 127 57 45 126 58 47 125 57 46 125 57 46 124 56 45 123 56 47 123 56 47 125 58 49 125 58 49 123 59 50 123 59 50 123 59 50 123 59 50 122 59 52 120 60 52 116 59 50 113 59 49 114 57 48 111 57 47 110 56 46 108 56 45 108 54 44 107 55 44 108 56 45 106 56 45 106 56 45 106 56 45 106 56 45 105 57 45 106 56 45 106 56 45 110 57 49 109 56 48 109 56 48 109 56 48 109 56 48 105 55 46 102 52 43 99 49 40 100 50 41 97 49 39 93 45 35 95 48 38 99 52 42 92 45 35 95 48 38 115 68 60 125 80 74 129 86 80 126 89 81 112 84 73 94 74 63 79 67 55 63 60 45 52 54 40 50 59 42 48 59 43 49 60 46 50 61 47 52 60 49 52 60 49 53 59 49 55 58 51 55 57 52 55 57 54 54 56 51 53 55 50 53 55 50 50 55 48 48 55 47 48 56 45 46 57 43 48 59 45 50 63 46 54 67 50 55 69 52 56 71 52 56 71 52 57 70 53 52 62 51 51 58 50 47 52 45 44 50 40 47 48 40 49 51 40 53 55 42 54 58 41 54 62 39 68 81 53 89 109 74 107 132 90 119 151 102 119 156 102 108 147 90 95 135 75 87 120 67 87 117 67 84 114 64 84 114 64 86 116 66 88 118 68 89 119 69 89 119 69 90 120 70 93 123 73 95 125 75 93 123 73 93 123 73 95 125 75 94 124 74 90 119 75 78 101 72 65 87 64 54 76 53 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 105 99 83 106 99 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 110 101 86 110 101 86 110 101 86 110 101 86 109 103 91 106 107 102 131 135 136 163 167 168 185 190 193 208 213 216 229 237 239 243 251 253 245 253 255 251 255 255 251 255 255 252 255 255 252 254 251 253 254 249 254 253 248 255 254 247 255 255 243 248 253 230 244 253 222 238 247 216 230 242 206 221 233 195 206 218 180 182 193 153 161 171 134 128 135 101 102 109 76 77 81 54 70 72 48 72 74 53 75 73 58 72 68 57 68 64 55 80 70 68 106 96 95 139 129 128 164 154 153 183 175 172 203 198 194 223 218 212 234 230 221 247 238 229 255 249 239 255 246 235 255 215 207 245 178 172 227 141 140 200 100 100 176 68 66 194 83 76 200 85 78 199 82 73 195 72 65 199 72 66 211 77 74 213 74 71 207 63 62 210 62 62 212 62 63 213 63 62 216 64 63 214 64 63 214 64 63 213 65 61 213 65 61 214 62 57 213 64 58 210 67 61 204 69 63 192 69 62 178 65 57 162 61 53 149 59 50 142 60 49 137 61 48 131 62 47 129 62 46 127 61 47 126 60 44 128 61 45 128 61 45 127 57 45 127 57 45 126 58 47 125 57 46 125 57 46 124 56 45 123 56 47 123 56 47 126 59 50 126 59 50 124 60 51 123 59 50 123 59 50 123 59 50 122 59 52 120 60 52 114 57 48 111 57 47 111 57 47 109 57 46 108 56 45 107 55 44 106 54 43 104 54 43 105 55 44 105 55 44 105 55 44 104 56 44 104 56 44 104 56 44 104 56 44 104 56 44 109 59 50 108 55 47 106 53 45 105 55 46 106 56 47 106 56 47 102 52 43 97 49 39 101 53 43 97 50 40 93 46 36 97 50 40 98 51 41 89 42 32 97 50 40 121 78 69 129 92 86 118 87 82 105 78 71 87 67 58 73 60 51 64 58 46 58 59 45 56 60 46 48 56 41 47 58 42 51 59 46 52 60 47 53 61 50 53 59 49 54 57 48 54 57 48 55 57 52 54 56 51 54 56 51 52 57 50 51 56 49 51 57 47 49 57 46 49 57 46 46 57 43 47 58 44 48 61 44 50 63 46 53 66 49 55 69 52 59 72 54 60 73 56 57 67 56 55 63 52 50 56 46 45 51 39 46 48 37 47 49 36 50 52 38 52 56 39 52 60 39 69 82 56 93 112 80 114 139 100 123 154 110 119 156 105 102 141 88 85 124 69 83 115 65 84 114 64 83 113 63 83 113 63 84 114 64 85 115 65 86 116 66 86 116 66 87 117 67 91 121 71 93 123 73 92 122 72 94 124 74 95 125 75 92 122 72 87 114 73 73 93 68 61 78 60 49 66 48 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 105 99 83 106 99 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 110 101 86 110 101 86 111 102 87 111 102 87 110 103 93 113 113 111 135 140 143 164 169 172 183 191 194 205 213 216 227 237 239 242 252 254 244 254 255 248 255 255 250 255 255 251 255 252 253 255 250 252 253 245 250 252 241 249 249 237 246 248 234 246 255 232 243 255 228 240 253 225 238 249 217 233 244 210 222 232 197 202 210 173 182 190 153 157 163 129 125 130 98 89 93 66 71 76 53 70 75 55 70 74 57 67 71 57 65 67 56 98 95 88 133 125 122 170 162 159 192 184 181 203 195 193 213 208 205 230 225 221 241 238 233 249 246 239 250 243 233 251 237 226 255 236 227 255 242 234 255 224 219 233 165 162 182 105 99 164 76 64 178 82 68 192 90 78 199 92 82 197 83 73 190 69 61 193 64 59 202 67 64 203 64 61 206 64 62 209 63 63 210 64 64 211 66 63 211 66 63 211 66 63 211 66 61 211 63 59 210 65 60 208 69 64 201 69 64 189 67 62 175 64 57 160 62 53 149 61 51 142 60 49 137 60 50 131 61 49 129 61 48 127 61 49 126 60 46 127 61 47 127 61 47 126 58 47 126 58 47 126 58 47 125 57 46 124 57 48 123 56 47 123 56 47 123 56 47 124 60 51 124 60 51 124 60 51 123 59 50 122 59 52 121 58 51 121 58 51 119 59 51 110 55 48 109 56 48 108 55 47 108 55 47 107 54 46 104 54 45 104 54 45 104 54 45 105 55 46 104 56 46 104 56 46 103 56 46 103 56 46 103 56 46 103 56 46 104 56 46 107 57 50 104 54 47 102 52 45 103 53 46 105 55 48 104 55 48 101 52 45 98 49 42 99 50 43 98 51 43 95 48 40 93 49 40 93 49 40 86 42 33 98 54 45 123 85 76 116 89 82 97 78 72 78 63 56 65 55 46 61 54 44 59 57 45 57 59 46 57 60 49 51 57 45 51 59 46 53 59 47 54 60 48 54 60 48 55 58 47 53 56 45 52 55 46 54 57 48 52 57 50 51 56 49 51 57 47 51 57 47 50 58 47 49 57 46 49 57 44 46 57 43 46 57 43 47 58 44 48 59 45 51 62 46 54 67 50 58 69 53 60 71 55 61 69 56 58 66 53 53 59 47 48 54 40 48 50 37 47 49 36 49 51 37 49 53 36 50 58 37 71 83 59 98 117 87 119 143 107 124 155 114 113 149 103 92 130 81 74 112 61 79 111 62 81 110 62 81 110 62 81 110 62 81 110 62 81 110 62 83 112 64 83 112 64 87 116 68 91 120 72 93 122 74 93 122 74 95 124 76 95 124 76 90 119 71 82 108 69 65 82 63 54 67 57 43 56 46 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 105 99 83 106 99 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 110 101 86 110 101 86 111 102 87 112 103 88 112 103 88 110 103 93 108 110 109 122 130 133 147 154 160 171 181 183 196 206 208 220 230 232 237 247 249 244 254 255 245 254 253 246 255 252 250 255 250 251 255 249 251 254 243 248 250 237 245 246 232 241 244 227 244 253 234 244 253 232 244 252 229 243 249 223 242 246 219 233 236 205 216 215 185 197 196 165 177 176 146 143 142 114 101 103 79 77 80 59 71 75 58 70 77 61 71 79 66 74 82 71 122 123 115 158 155 148 195 190 184 215 207 204 222 212 211 230 220 219 243 235 233 252 247 244 243 240 235 254 251 244 255 255 246 255 251 241 255 243 234 255 237 229 255 226 218 255 210 199 212 143 127 181 100 81 162 75 58 178 85 70 190 88 74 182 71 60 182 63 55 199 74 68 199 67 62 202 67 63 205 66 63 208 66 64 208 66 62 208 66 62 208 66 62 208 65 61 210 65 60 210 67 63 206 68 65 197 68 63 184 65 61 170 61 56 158 59 53 149 60 52 142 59 51 137 60 50 131 61 51 129 61 50 127 61 49 126 60 48 127 61 49 127 61 47 126 58 47 126 58 47 126 58 47 125 57 46 124 57 48 123 56 47 123 56 47 123 56 47 124 60 51 123 59 50 123 59 50 122 58 49 121 58 51 120 57 50 119 56 49 117 57 49 110 55 48 108 55 47 108 55 47 106 56 47 105 55 46 105 55 46 104 54 45 103 55 45 103 55 45 103 55 45 102 55 45 102 55 45 102 55 45 102 55 45 102 55 45 102 55 45 104 55 48 104 54 47 103 53 46 103 53 46 103 54 47 104 55 48 103 54 47 102 53 46 97 50 42 101 54 46 94 50 41 92 48 39 96 52 43 97 53 44 105 61 52 117 83 74 88 71 64 69 62 54 60 53 47 57 53 44 59 56 47 56 58 47 53 55 44 51 54 43 54 57 46 53 59 47 55 58 47 54 57 46 54 57 46 53 56 45 53 55 44 51 54 43 50 56 44 49 57 44 50 56 46 49 57 44 49 57 46 49 57 44 49 57 44 49 57 44 46 57 43 46 57 43 46 57 43 47 58 44 48 59 43 51 62 46 54 65 49 55 66 50 60 68 53 58 67 50 56 63 47 53 59 45 52 54 41 50 52 39 49 51 37 48 52 37 48 55 37 72 84 62 101 120 92 117 141 109 116 146 108 102 137 95 82 119 75 66 104 57 75 107 60 78 107 59 80 109 61 80 109 61 78 107 59 78 107 59 79 108 60 81 110 62 86 115 67 90 119 71 93 122 74 94 123 75 95 124 76 95 124 76 86 115 67 78 102 66 59 73 56 48 59 51 38 47 42 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 105 99 83 106 99 83 107 98 83 107 98 83 108 99 84 108 99 84 109 100 85 109 100 85 109 100 85 109 100 85 109 100 85 110 101 86 110 101 86 111 102 87 112 103 88 113 104 89 111 104 94 104 105 107 109 116 122 133 140 148 163 172 177 191 200 205 211 222 226 229 240 242 240 252 252 242 252 251 245 254 249 248 255 247 250 255 246 252 255 242 250 253 236 248 249 231 246 247 231 246 246 234 247 247 235 250 247 232 252 246 230 253 245 226 247 236 214 231 216 195 213 198 175 192 177 154 158 147 125 117 110 91 90 87 70 80 81 67 83 86 75 91 98 90 99 109 100 146 154 141 176 179 168 210 207 198 230 223 217 242 228 227 249 235 235 255 241 244 255 248 249 255 253 251 255 251 248 249 248 243 247 247 237 251 249 237 255 252 240 255 253 241 255 249 234 255 224 203 234 168 144 183 111 89 168 87 68 174 85 69 183 82 70 185 77 65 191 74 65 195 71 63 198 69 63 202 69 64 203 68 64 205 68 62 204 67 61 203 66 60 204 65 60 209 67 63 208 69 64 204 69 65 194 67 61 179 61 57 166 59 53 156 59 53 149 60 54 140 60 51 135 61 52 133 60 53 129 61 52 127 60 51 126 60 48 127 61 49 127 61 49 126 58 47 126 58 47 126 58 47 125 57 46 124 57 48 123 56 47 123 56 47 123 56 47 123 59 50 123 59 50 121 58 51 120 57 50 119 56 49 118 55 48 118 55 48 115 55 47 110 55 48 106 56 47 106 56 47 106 56 47 106 56 47 104 56 46 104 56 46 104 56 46 103 55 45 102 55 45 102 55 45 102 55 45 100 56 45 100 56 45 100 56 45 102 55 45 103 54 47 104 55 48 105 56 49 105 56 49 104 55 48 105 56 49 106 59 51 108 61 53 103 56 48 107 60 52 98 54 45 97 53 44 111 67 58 120 76 67 116 73 64 110 77 68 67 57 48 53 54 46 52 53 47 56 57 49 56 59 50 52 55 46 49 52 43 50 53 44 53 56 45 53 56 45 53 55 44 52 54 43 52 54 43 52 54 43 52 54 41 51 55 41 47 55 40 46 57 41 48 56 43 46 57 41 46 57 43 46 57 41 48 56 41 48 56 41 49 57 42 48 56 41 48 56 43 47 55 42 48 56 43 49 57 44 51 59 46 52 60 45 57 66 49 58 67 48 59 66 48 58 65 49 58 60 46 54 56 42 50 52 38 47 51 36 50 57 39 73 85 63 99 117 91 109 132 103 102 132 98 87 121 84 73 110 69 63 100 56 72 103 59 76 105 59 78 107 61 78 107 61 76 105 59 76 105 59 77 106 60 79 108 62 85 114 68 89 118 72 91 120 74 93 122 76 94 123 77 92 121 75 81 110 64 71 95 59 54 66 52 43 52 47 34 40 38 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 103 100 83 105 99 83 106 99 83 106 99 83 106 98 85 108 98 86 108 98 86 109 99 87 109 100 85 109 100 85 109 100 85 108 101 85 109 102 86 110 103 87 111 103 90 110 104 92 111 104 94 109 106 101 107 111 114 109 116 122 131 138 144 165 174 179 195 204 209 213 223 225 230 238 241 244 252 254 244 253 250 247 253 249 249 254 247 250 255 244 252 255 242 252 255 241 252 255 238 253 254 240 251 248 239 254 250 241 255 249 239 255 250 237 255 249 233 255 242 223 239 224 203 221 206 183 193 178 155 162 151 129 124 117 98 98 95 78 88 90 76 93 99 87 109 119 110 124 134 125 165 173 162 187 193 181 215 215 207 235 230 226 250 238 238 255 244 244 255 245 247 254 244 245 253 247 247 250 249 247 250 252 247 251 255 249 250 253 244 244 247 238 247 249 238 255 252 239 255 242 225 255 242 224 250 201 184 188 129 113 157 85 71 171 85 72 183 85 74 177 69 59 192 74 64 198 71 64 201 70 62 202 69 62 202 67 61 201 66 60 199 66 59 200 65 59 207 70 62 205 71 62 199 71 62 188 67 59 173 62 53 159 58 50 149 59 51 145 62 54 138 61 53 132 62 52 130 62 53 129 61 52 127 60 51 126 60 48 128 60 49 128 60 49 126 58 47 126 58 47 126 58 49 125 57 48 124 57 48 123 56 47 123 56 47 123 56 47 122 58 49 122 58 49 120 57 50 119 56 49 118 55 48 117 54 47 117 54 47 113 54 46 109 56 48 107 57 48 106 56 47 106 56 47 105 57 47 105 57 47 105 57 47 104 56 46 103 55 45 102 55 45 103 55 45 102 55 45 102 55 45 102 55 45 102 55 45 102 55 45 102 53 46 106 56 49 109 59 52 107 58 51 106 57 50 106 58 48 109 62 52 111 67 56 108 64 53 111 68 59 100 60 50 99 61 50 122 86 74 134 100 90 121 87 77 98 76 65 62 58 49 51 56 49 52 57 50 55 60 53 52 58 48 47 53 43 50 53 44 57 60 51 51 54 43 50 53 42 50 52 41 48 51 40 49 51 40 50 53 42 52 54 43 52 55 44 46 54 41 44 55 41 47 55 42 45 56 42 47 55 42 47 55 42 47 55 42 47 55 42 49 57 44 48 56 43 48 56 45 47 55 44 47 55 44 47 55 44 48 56 45 48 56 43 55 63 48 57 66 49 60 69 52 61 68 52 59 65 51 56 60 46 50 54 39 45 52 36 50 59 42 74 86 66 99 114 91 104 124 97 93 118 88 79 109 75 70 102 65 65 97 58 72 100 59 75 104 60 78 107 63 78 107 63 75 104 60 74 103 57 76 105 61 78 107 61 84 113 69 87 116 72 90 119 75 91 120 76 93 122 78 90 118 77 78 106 65 67 91 59 50 62 52 41 47 47 31 37 37 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 100 86 106 100 86 106 100 88 108 100 89 108 99 90 109 101 90 109 101 88 109 102 86 103 96 78 106 101 82 110 107 88 111 108 93 104 101 92 102 101 97 115 113 114 129 130 134 137 142 146 149 157 160 170 178 181 194 199 202 215 220 223 233 237 238 245 246 248 248 250 249 252 254 253 254 254 252 255 255 250 253 254 246 250 253 242 249 252 241 250 253 242 251 254 243 249 250 242 250 250 242 249 249 237 252 250 235 254 252 231 249 247 222 233 229 202 213 212 182 186 185 155 152 152 124 113 116 89 95 100 77 98 107 88 114 125 108 132 144 130 145 155 144 180 185 178 202 204 199 226 227 222 240 239 235 247 243 242 251 247 246 253 249 248 252 248 247 255 254 252 254 254 252 254 254 252 253 255 250 254 255 250 254 255 250 254 255 250 254 255 250 251 253 248 255 253 248 255 251 246 255 229 223 215 166 159 163 96 88 155 68 61 178 75 66 193 79 69 195 71 61 198 67 57 201 68 59 205 72 63 206 73 64 203 72 64 202 71 61 198 71 56 195 72 56 190 73 56 181 71 56 166 69 53 154 66 52 144 66 53 139 67 53 133 67 53 129 67 54 127 65 52 127 63 51 128 62 50 128 60 49 129 59 49 129 59 49 127 57 49 126 58 49 124 57 49 123 56 48 122 55 47 122 55 47 119 55 46 118 54 45 119 55 46 119 55 46 119 56 47 119 56 47 118 55 46 117 54 45 113 53 43 110 51 43 108 55 47 105 56 49 105 56 49 104 55 48 104 55 48 103 54 47 103 54 47 103 54 47 102 53 46 103 54 47 105 55 48 105 56 49 104 55 48 103 54 47 101 52 45 101 51 44 104 51 45 106 53 47 109 56 48 107 57 48 106 58 48 105 59 46 105 61 48 107 65 51 103 66 50 106 73 58 100 72 58 118 95 79 126 107 92 138 120 106 140 127 111 82 74 61 55 57 46 52 58 48 52 58 48 51 57 47 51 57 47 51 57 47 50 56 46 50 56 46 49 55 45 49 55 45 51 54 45 48 54 44 50 53 44 47 53 43 49 52 43 47 53 43 47 52 45 46 53 45 47 52 45 46 53 45 47 52 45 47 52 45 47 52 45 47 52 45 48 53 46 47 52 45 47 52 45 46 51 44 46 51 44 47 52 45 47 52 45 47 54 46 49 59 50 51 61 50 54 64 53 56 66 55 57 68 54 55 66 52 53 64 48 51 62 45 52 63 46 68 81 61 87 101 78 91 107 81 80 98 72 69 88 60 64 84 56 66 87 54 73 99 62 75 101 62 75 102 61 75 102 61 74 101 60 74 101 58 76 103 62 79 106 63 85 112 71 89 116 75 92 118 79 93 119 80 93 119 82 87 113 78 72 98 63 59 79 54 37 48 42 38 43 46 36 41 44 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 99 89 107 100 90 108 99 92 109 100 91 109 101 90 109 102 86 105 100 81 106 104 83 109 106 87 106 107 91 103 103 95 108 108 108 126 127 132 144 147 154 167 174 180 183 193 195 208 213 216 225 230 233 241 242 244 250 251 253 255 254 255 255 254 255 254 253 251 255 254 250 255 255 250 254 255 249 251 252 244 248 251 242 246 252 242 247 253 243 247 250 241 248 250 239 248 250 237 247 250 233 249 251 229 242 245 218 223 226 195 204 208 175 180 184 151 145 150 118 107 113 85 89 97 73 95 107 85 116 129 111 140 152 138 157 167 156 191 193 188 211 211 209 231 231 229 243 243 241 247 247 245 251 251 249 252 252 250 251 251 249 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 251 255 254 241 255 255 237 251 252 247 249 248 255 248 247 255 233 230 239 190 185 196 128 119 164 80 70 176 78 65 186 76 63 193 75 63 196 74 61 194 68 56 188 61 52 190 63 54 196 70 58 196 70 55 195 74 55 191 76 58 180 73 55 166 70 54 153 67 50 144 68 54 138 71 55 130 68 55 127 67 56 126 66 55 124 64 53 126 62 52 127 60 51 128 60 49 128 60 51 125 58 50 125 58 50 122 58 49 122 58 49 121 57 48 120 56 47 118 55 46 118 55 46 117 54 45 118 55 46 116 56 46 116 56 46 116 56 46 114 54 44 111 53 42 109 52 43 108 55 47 105 56 49 106 56 49 104 55 48 105 55 48 104 55 48 103 54 47 103 54 47 101 51 44 101 51 44 103 53 46 104 54 47 106 56 49 106 56 49 106 56 49 107 57 50 107 54 48 108 55 49 107 57 48 107 59 49 107 59 47 106 62 49 106 64 48 105 68 50 103 72 54 107 80 61 103 82 65 117 102 83 129 117 101 140 133 115 134 131 114 75 76 60 54 57 46 51 57 47 51 57 47 51 57 47 50 56 46 50 56 46 50 56 46 49 55 45 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 48 53 47 47 52 46 46 51 45 46 51 45 46 51 45 46 51 45 47 52 46 47 54 47 46 56 48 47 58 50 49 61 51 52 64 54 54 66 54 54 66 54 54 66 52 53 66 49 54 67 49 67 80 62 80 93 73 82 96 73 73 87 64 65 79 54 66 80 55 69 85 58 74 98 64 74 100 63 75 101 64 75 101 62 73 99 60 72 99 58 73 100 59 74 101 60 83 110 69 88 114 75 92 118 81 93 119 84 91 116 84 84 109 79 67 92 62 54 73 53 38 49 45 39 44 48 37 42 46 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 99 89 107 100 90 108 99 92 109 100 91 109 101 90 109 102 86 109 104 85 107 105 84 109 106 87 106 107 91 107 107 99 119 119 119 145 146 151 167 172 178 190 197 203 209 219 221 235 240 243 246 251 254 253 254 255 254 255 255 255 254 255 255 253 254 254 253 251 255 254 250 255 255 250 253 254 248 250 251 243 245 248 239 241 247 235 241 247 235 244 247 236 245 249 235 246 248 234 245 248 229 245 247 225 238 238 212 219 219 191 201 202 171 176 177 146 147 150 121 117 121 96 107 112 90 116 123 105 136 144 129 159 167 156 174 181 173 205 207 202 222 222 220 239 239 237 248 248 246 251 251 249 254 254 252 254 254 252 253 253 251 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 253 255 254 245 250 253 251 255 255 254 254 254 255 248 246 255 250 244 255 245 235 248 204 193 215 157 143 147 75 60 164 81 65 168 75 58 167 64 49 183 71 59 207 89 77 206 84 73 189 63 51 196 68 55 198 72 58 195 75 61 185 73 59 170 66 55 157 63 51 149 65 55 144 70 59 134 66 57 129 66 57 126 66 56 123 65 54 122 64 53 122 62 52 122 62 52 122 62 52 120 60 52 120 60 52 119 59 51 119 59 51 117 58 50 116 57 49 116 57 49 116 57 49 114 57 48 114 57 48 114 57 48 114 57 48 111 57 47 110 56 46 108 54 44 107 53 43 108 55 47 106 56 49 108 55 49 106 56 49 107 54 48 105 55 48 105 55 48 104 54 47 103 53 46 103 53 46 102 53 46 103 54 47 104 55 48 105 56 49 107 58 51 107 58 51 108 59 52 106 59 51 105 58 48 104 60 49 107 63 50 106 67 52 105 68 50 102 69 50 102 73 55 108 86 65 106 89 71 117 106 86 134 127 109 145 142 123 128 127 109 69 70 54 53 56 45 50 56 46 50 56 46 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 47 52 46 46 51 45 45 50 44 45 50 44 46 51 45 47 52 46 46 53 46 43 53 45 43 54 46 45 57 47 47 59 49 50 62 50 52 64 52 54 66 52 55 68 51 56 69 51 63 76 58 69 82 62 67 81 58 59 73 50 56 70 45 62 76 51 68 84 57 74 95 64 74 98 64 76 100 66 75 99 63 73 97 61 71 96 57 70 95 56 71 96 57 82 107 68 88 112 76 93 117 83 94 118 86 90 113 84 80 103 75 61 84 56 46 65 46 38 49 45 39 44 48 37 42 46 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 99 89 107 100 90 108 99 92 109 100 91 109 101 90 109 102 86 110 105 86 108 106 85 108 107 87 108 109 93 112 113 105 128 130 129 158 161 166 185 190 196 195 202 208 218 228 230 244 249 252 250 255 255 251 252 254 251 252 254 253 251 252 251 250 248 255 254 252 255 255 251 255 254 249 251 252 244 245 246 238 238 241 230 233 239 227 231 237 223 237 241 226 240 244 229 241 244 227 241 244 223 242 241 220 234 234 208 216 216 188 199 199 171 178 177 149 161 161 137 145 147 125 144 147 128 156 158 145 170 173 162 182 187 180 192 197 191 220 220 218 233 233 231 246 246 244 251 251 249 253 253 251 255 255 253 255 255 253 253 253 251 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 254 251 251 253 255 254 255 255 254 255 245 240 237 246 237 230 255 249 240 255 250 236 255 238 222 232 191 173 183 127 110 148 79 63 163 80 64 185 89 75 184 78 64 180 68 56 190 69 58 193 65 54 198 70 59 197 73 63 188 71 61 173 64 57 161 60 52 152 62 54 149 66 60 139 64 59 133 66 60 128 65 58 124 65 59 121 64 57 119 64 57 117 64 56 118 63 56 118 61 52 118 61 52 118 61 52 117 60 51 115 61 51 114 60 50 114 60 50 113 59 49 111 59 48 111 59 48 111 59 48 110 58 47 107 57 46 106 56 45 106 56 45 105 55 46 109 56 50 110 55 50 109 54 49 108 55 49 108 55 49 107 54 48 105 55 48 105 55 48 108 58 51 106 57 50 104 55 48 102 55 47 102 55 47 102 55 47 104 57 49 102 58 49 106 63 54 102 62 52 101 61 49 102 62 50 104 67 51 105 69 53 102 71 51 99 71 50 99 74 54 104 86 64 105 92 73 115 107 86 133 130 111 143 142 122 112 113 95 57 61 44 52 55 44 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 48 54 44 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 45 50 44 45 50 44 45 50 44 45 50 44 46 51 45 45 52 45 42 52 44 41 52 44 42 54 44 43 55 45 46 58 46 49 61 49 52 64 50 53 65 51 54 67 50 58 71 53 60 73 55 56 69 49 50 63 43 50 64 41 56 70 47 62 78 52 68 88 60 69 93 61 75 96 65 74 98 64 75 96 63 71 95 59 72 94 58 70 94 58 83 105 69 88 112 78 96 117 86 94 117 88 90 110 83 76 99 73 57 77 52 41 58 40 38 47 44 37 42 46 35 40 44 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 99 89 107 100 90 108 99 92 109 100 91 109 101 90 109 102 86 108 103 84 107 105 84 110 109 89 111 112 96 116 117 109 133 135 134 164 167 172 191 196 202 205 212 218 229 239 241 251 255 255 251 255 255 250 251 253 252 253 255 255 253 254 253 252 250 255 255 253 255 255 251 254 253 248 247 248 240 239 240 232 231 234 223 224 230 218 222 229 213 231 235 218 234 239 219 237 240 219 236 240 217 238 238 214 232 232 208 218 216 191 204 202 177 194 189 167 183 181 160 177 174 157 182 180 167 193 190 181 201 200 195 210 211 206 217 217 215 232 232 230 242 242 240 250 250 248 252 252 250 253 253 251 255 255 253 255 255 253 252 252 250 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 255 254 252 255 251 254 255 247 250 250 246 245 248 247 243 252 255 248 254 255 248 254 255 244 253 252 234 255 254 236 245 220 200 196 155 137 157 98 80 151 75 59 165 76 60 180 80 64 186 74 60 189 65 55 196 68 59 195 71 63 188 69 61 176 63 59 166 58 55 157 59 56 152 63 59 143 62 59 137 63 60 130 65 61 124 65 61 119 66 60 115 66 59 114 67 59 115 66 59 113 63 54 115 62 54 115 62 54 114 61 53 114 61 53 114 61 53 112 62 53 111 61 52 110 62 52 109 61 51 108 60 50 107 59 49 106 59 49 105 58 48 105 58 48 106 58 48 110 55 50 112 54 50 112 54 50 109 54 49 109 54 49 108 55 49 105 55 48 105 55 48 108 59 52 107 58 51 104 57 49 101 57 48 101 57 48 101 57 48 101 58 49 100 60 50 102 66 54 99 65 53 99 67 52 100 68 53 100 71 53 100 73 54 98 73 51 95 73 50 94 76 54 101 86 63 106 98 77 114 109 87 132 131 111 132 135 114 91 96 76 51 58 40 50 56 44 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 48 54 44 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 46 51 45 45 50 44 45 50 44 44 49 43 44 49 43 44 49 43 44 49 43 45 50 44 44 51 44 44 54 46 43 53 45 42 52 43 42 52 43 43 53 44 46 56 45 48 59 45 50 61 47 50 61 45 53 64 47 54 65 48 53 65 45 49 61 41 49 61 41 53 65 45 56 70 47 61 79 53 64 84 56 70 89 61 72 92 64 74 93 63 73 94 61 75 94 62 75 96 63 84 103 71 91 112 81 99 118 90 97 117 90 89 107 83 74 93 71 54 71 52 38 52 37 36 45 42 36 41 44 34 39 42 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 99 89 107 100 90 108 99 92 109 100 91 109 101 90 108 102 86 106 103 84 107 106 85 108 110 89 111 114 97 115 118 109 129 133 132 159 164 168 184 191 199 213 222 227 236 246 248 251 255 255 251 255 255 250 251 255 253 254 255 255 254 255 253 252 250 255 255 251 255 255 250 252 252 244 243 245 234 235 237 226 227 231 217 221 227 213 220 227 209 228 233 211 231 236 213 233 237 214 234 236 212 235 235 211 232 230 207 223 218 196 211 206 184 211 206 186 204 198 182 203 195 184 208 201 193 215 210 206 224 219 216 234 230 229 240 239 237 243 242 240 249 249 247 253 253 251 253 253 251 253 253 251 255 255 253 254 254 252 252 252 250 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 255 253 252 255 252 253 255 246 247 253 249 248 254 255 253 249 255 253 246 255 250 237 255 243 240 254 239 235 242 226 255 255 237 255 236 217 204 166 147 163 106 87 161 90 70 170 87 69 173 76 59 182 70 58 188 70 60 189 70 62 185 70 63 178 66 62 169 61 58 161 59 57 153 59 57 149 61 60 142 62 61 133 63 61 125 64 59 120 65 60 115 66 59 112 68 59 112 68 59 112 63 56 113 63 54 113 63 54 113 63 54 113 63 54 112 62 53 111 63 53 111 63 53 111 64 54 110 63 53 109 62 52 107 60 50 104 60 49 104 60 49 104 60 49 108 60 50 111 56 51 113 54 50 112 54 50 112 54 50 109 54 49 108 55 49 106 56 49 105 56 49 104 55 48 103 56 48 101 57 48 101 58 49 100 60 50 101 63 52 102 64 53 100 66 54 94 66 52 97 71 56 99 76 58 100 77 59 99 77 56 96 75 54 93 75 51 93 77 52 93 81 57 98 88 63 109 104 82 115 115 91 128 131 110 118 123 101 70 79 58 52 61 42 51 57 45 50 56 46 50 56 46 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 44 49 43 43 48 42 43 48 42 43 48 42 43 48 42 44 49 43 44 51 44 46 53 46 44 54 46 42 52 43 42 52 43 42 52 43 43 53 44 45 55 44 46 57 43 45 56 42 48 59 43 52 63 47 53 64 47 52 63 46 51 63 43 51 62 45 51 64 44 55 70 47 57 75 51 64 79 56 66 84 58 71 87 60 72 91 63 77 93 66 77 96 68 85 101 74 92 111 83 100 116 90 96 114 90 88 103 82 71 88 69 52 66 49 36 50 37 36 45 42 36 41 44 34 39 42 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 100 86 106 100 86 106 99 89 107 100 90 108 99 92 109 100 91 108 102 90 108 102 86 108 105 86 108 107 86 107 109 88 107 110 93 108 114 104 121 127 125 149 157 160 174 183 190 209 218 223 233 242 247 251 255 255 248 253 255 248 249 253 254 255 255 255 254 255 249 248 246 255 255 251 254 253 248 249 249 241 241 243 232 233 235 222 227 231 216 223 230 214 224 232 211 228 233 210 231 237 211 232 236 211 231 233 209 232 232 208 231 229 206 224 219 199 215 208 190 218 211 195 217 209 198 222 212 203 230 221 216 238 228 227 243 233 234 250 241 244 255 249 251 250 249 247 254 254 252 255 255 253 253 253 251 253 253 251 255 255 253 255 255 253 252 252 250 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 255 253 252 255 250 249 255 251 250 255 254 253 252 255 253 245 255 252 234 251 245 234 255 248 242 255 253 245 255 250 239 245 231 255 250 234 255 250 232 242 204 185 171 119 98 143 81 58 170 93 73 175 80 62 179 76 61 179 75 62 179 75 64 177 73 64 172 69 62 162 63 58 154 59 55 150 61 57 143 62 58 136 63 57 129 64 58 122 65 58 117 67 58 113 69 58 113 69 60 112 63 56 113 63 56 113 63 56 113 63 56 113 63 56 113 63 56 112 63 56 112 63 56 113 66 58 112 65 57 110 63 55 108 61 53 105 61 52 106 62 53 106 62 53 110 61 54 111 56 51 114 55 51 112 54 50 112 54 50 110 55 50 108 55 49 106 56 49 105 56 49 100 56 47 100 57 48 99 59 49 100 62 51 100 64 52 99 65 53 99 65 53 95 67 53 90 69 52 95 78 60 103 86 66 104 87 67 99 83 60 94 79 56 91 79 53 92 82 55 93 86 60 93 89 62 110 108 85 116 118 94 124 129 107 99 109 85 50 62 40 54 66 46 51 59 46 51 57 47 51 57 47 51 57 47 50 56 46 50 56 46 50 56 46 49 55 45 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 44 49 43 44 49 43 43 48 42 42 47 41 42 47 41 43 48 42 44 49 43 43 50 43 45 52 45 43 53 45 42 52 44 42 52 44 43 53 44 43 53 44 44 54 43 45 55 44 44 54 43 47 58 44 50 61 47 54 65 49 55 66 50 55 66 49 53 64 48 52 63 46 50 63 45 52 67 46 58 71 51 61 76 53 65 79 56 68 84 58 74 88 63 76 92 66 84 98 73 92 107 84 99 113 90 94 109 88 85 98 80 68 82 65 50 62 48 35 47 37 38 47 44 38 44 44 36 42 42 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 106 100 86 106 100 86 106 99 89 107 100 90 108 99 92 109 100 91 108 102 90 108 102 86 111 108 89 109 108 87 106 108 87 103 107 90 102 108 98 114 123 120 142 152 154 168 177 184 201 210 215 226 235 240 247 252 255 246 251 254 249 250 254 254 255 255 255 254 255 249 248 244 255 255 250 253 253 245 248 248 238 240 242 229 233 235 221 229 233 216 227 234 216 229 237 214 230 236 210 233 237 210 234 237 210 232 232 206 232 230 207 232 227 207 225 218 200 216 208 195 216 206 196 221 210 204 234 223 219 248 237 235 255 244 246 255 245 249 255 245 251 255 249 252 254 252 253 255 255 253 255 255 253 254 254 252 254 254 252 255 255 253 255 255 253 253 253 251 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 255 254 250 255 249 247 255 249 247 251 250 248 247 251 250 245 255 254 243 255 255 240 255 255 237 253 250 240 252 248 251 255 250 255 253 241 255 242 226 255 239 219 255 225 203 216 174 150 170 114 91 164 89 68 169 84 64 168 81 62 169 82 65 173 81 66 169 77 64 161 68 60 151 61 53 149 62 55 143 63 54 137 62 56 131 64 55 125 65 55 119 67 54 116 68 56 115 69 56 113 63 56 113 63 56 115 62 56 113 63 56 113 63 56 113 63 56 113 63 56 112 63 56 115 66 59 113 66 58 111 64 56 109 62 54 108 61 53 106 62 53 109 62 54 111 62 55 111 56 51 113 55 51 111 56 51 109 56 50 109 56 50 105 56 49 104 57 49 102 58 49 102 59 50 100 62 51 100 64 52 98 66 53 96 67 53 93 65 51 92 64 50 87 66 49 84 71 52 91 83 62 102 94 71 105 94 72 98 88 63 90 83 57 90 83 55 92 87 58 90 86 59 88 87 59 107 109 85 115 119 94 117 125 102 85 97 73 38 50 28 56 68 48 51 59 46 52 58 48 52 58 48 51 57 47 51 57 47 51 57 47 50 56 46 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 48 54 44 47 53 43 47 53 43 47 53 43 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 45 50 44 44 49 43 43 48 42 43 48 42 42 47 41 42 47 41 43 48 42 43 48 42 44 49 43 43 50 43 41 51 43 42 52 44 43 53 45 43 53 44 44 54 45 45 55 46 45 55 44 44 54 43 46 56 45 50 60 49 54 65 51 57 68 54 57 68 52 55 66 52 54 65 49 48 59 43 50 63 45 53 66 48 57 70 50 60 73 53 64 78 55 70 84 61 74 88 63 82 96 73 91 104 84 97 110 90 92 105 87 81 94 77 66 78 64 47 59 47 34 44 35 42 48 44 40 46 44 38 44 44 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 107 101 87 107 100 90 108 101 91 109 100 93 110 101 92 109 103 91 109 103 87 113 110 91 107 109 87 107 110 89 107 114 96 106 114 103 112 121 118 135 145 147 159 170 176 187 196 201 208 217 222 234 239 243 246 251 254 252 253 255 254 255 255 255 254 255 254 253 249 255 255 250 254 254 246 250 250 240 246 248 235 244 246 232 240 244 227 234 241 223 231 239 216 240 246 218 237 242 212 235 238 209 236 236 210 232 230 209 225 220 201 221 213 200 222 212 202 224 211 205 231 217 216 241 227 227 249 234 237 253 241 243 255 246 250 255 248 255 255 252 255 255 253 254 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 255 250 255 254 250 255 255 251 255 255 253 254 255 255 252 255 255 250 255 255 249 254 255 249 253 255 254 255 255 254 253 251 254 249 243 255 248 238 255 249 233 255 248 226 255 241 217 255 232 207 182 132 105 162 100 75 147 83 58 155 87 64 165 93 71 160 83 65 154 75 58 155 76 61 142 63 50 141 63 50 135 63 51 128 60 47 121 59 46 116 60 45 115 63 49 115 66 52 114 61 53 114 61 55 116 61 56 115 62 56 117 64 58 117 64 58 116 63 57 113 63 56 115 65 58 113 64 57 113 64 57 113 64 57 112 63 56 110 63 55 111 62 55 111 62 55 107 57 50 109 56 50 108 58 51 108 59 52 108 59 52 104 60 51 103 60 51 99 61 50 99 63 51 94 62 49 100 71 57 99 71 57 84 61 45 78 57 40 77 56 39 64 49 30 87 81 59 80 78 55 75 73 48 79 75 50 93 89 62 105 101 74 101 97 68 86 85 55 88 88 60 93 96 67 111 115 90 122 128 102 100 108 85 61 73 49 45 57 35 50 62 42 52 60 47 53 59 49 52 58 48 52 58 48 52 58 48 51 57 47 51 57 47 51 57 47 51 57 47 51 57 47 51 57 47 50 56 46 49 55 45 49 55 45 49 55 45 48 54 44 49 54 48 49 54 48 48 53 47 48 53 47 47 52 46 47 52 46 47 52 46 47 52 46 44 49 43 44 49 43 44 49 43 44 49 43 44 49 43 44 49 43 43 48 42 43 48 42 46 53 46 45 52 45 45 52 45 44 51 44 45 52 45 45 52 44 46 53 45 46 53 45 43 50 42 45 52 44 48 55 47 53 61 50 57 65 54 61 69 56 63 71 60 63 74 60 55 66 50 53 64 47 51 62 45 49 61 41 50 62 42 57 69 47 66 78 56 73 85 63 79 91 71 86 98 78 93 104 87 89 100 84 76 87 73 60 70 59 47 57 46 41 51 42 42 48 44 41 47 43 40 46 44 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 107 101 87 107 100 90 108 101 91 109 100 93 110 101 92 109 103 91 107 104 87 111 110 90 106 108 86 107 110 89 107 114 96 106 116 105 113 124 120 137 148 150 163 174 180 190 199 204 210 219 224 235 240 244 247 252 255 253 254 255 254 255 255 255 254 252 254 253 249 255 255 250 254 254 244 251 251 239 247 249 235 244 247 230 240 245 225 234 242 221 232 237 214 234 239 209 230 235 203 228 231 202 230 230 204 227 225 204 223 217 201 222 212 202 223 212 206 230 216 215 236 222 222 245 230 233 250 238 242 255 243 247 255 246 250 255 249 253 255 251 254 255 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 253 255 252 250 255 249 250 255 249 253 255 252 253 254 255 253 252 255 253 250 255 255 250 255 255 248 255 255 252 255 255 250 253 255 248 246 255 249 242 255 252 239 255 252 234 254 248 226 255 241 215 255 234 206 217 178 149 163 117 91 142 92 67 146 92 66 152 92 68 152 87 67 150 83 64 138 70 51 137 68 52 135 68 51 131 68 51 126 67 51 122 66 49 118 65 49 115 63 49 117 64 56 115 62 56 117 62 57 117 64 58 116 63 57 111 61 54 112 62 55 115 65 58 113 63 56 112 63 56 112 63 56 110 63 55 111 62 55 109 62 54 110 61 54 109 62 54 107 60 52 108 61 53 109 62 54 107 63 54 106 63 54 103 65 54 101 65 53 98 66 53 100 71 57 91 65 50 94 71 55 94 73 56 78 61 43 70 55 36 71 56 37 62 54 33 76 76 52 71 75 50 68 71 44 68 68 42 77 77 49 92 91 63 98 97 67 96 97 66 89 89 61 100 103 74 115 119 94 115 121 95 88 96 73 58 68 44 47 59 37 55 67 47 54 62 49 54 60 50 54 60 50 54 60 50 53 59 49 53 59 49 53 59 49 53 59 49 53 59 49 53 59 49 53 59 49 52 58 48 52 58 48 51 57 47 51 57 47 51 57 47 50 55 49 50 55 49 50 55 49 49 54 48 49 54 48 49 54 48 48 53 47 48 53 47 46 51 45 46 51 45 45 50 44 45 50 44 44 49 43 44 49 43 43 48 42 43 48 42 42 49 42 42 49 42 41 48 41 41 48 41 41 48 41 42 49 42 43 50 42 44 51 43 46 53 45 45 52 44 46 53 45 48 55 47 52 59 51 57 65 54 63 70 62 66 74 63 59 70 56 58 69 53 55 66 49 52 63 46 51 63 43 54 66 46 60 72 50 64 76 54 76 88 68 83 95 75 89 100 84 87 98 82 76 86 75 61 71 60 49 59 50 43 53 44 44 51 44 43 49 45 42 48 44 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 104 101 86 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 107 101 87 108 99 90 109 100 91 109 100 93 110 101 92 109 103 91 107 104 87 109 108 88 105 109 86 106 111 89 107 116 97 105 117 105 113 125 121 138 152 153 165 178 184 191 202 208 212 221 226 237 242 246 247 252 255 252 253 255 253 255 254 255 254 252 254 253 248 255 255 247 253 253 243 250 251 237 247 250 233 244 247 228 239 244 222 231 239 216 229 235 209 226 231 201 222 225 194 221 221 193 222 222 198 222 219 200 221 215 203 224 213 207 228 217 215 237 225 225 242 230 234 249 237 241 254 243 247 255 246 250 255 248 251 255 249 252 255 252 252 255 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 253 255 252 246 255 250 246 255 250 250 254 253 253 253 253 255 250 254 255 248 255 255 246 255 255 244 254 255 249 255 255 247 252 255 247 247 255 250 245 255 255 246 255 255 242 250 253 236 250 248 227 254 240 214 255 246 219 255 235 208 223 191 166 168 131 105 132 90 66 131 83 60 145 93 71 148 93 72 139 82 62 127 70 50 118 63 42 117 62 42 118 66 45 121 70 51 120 71 54 113 63 52 110 60 51 113 60 52 116 66 57 115 65 56 111 63 53 113 65 55 120 72 62 110 62 52 109 62 52 109 62 52 107 63 52 108 61 51 106 62 51 108 61 51 106 62 51 103 63 53 103 65 54 103 65 54 103 67 55 101 67 55 99 67 54 96 67 53 94 68 53 98 75 59 85 66 49 90 73 55 96 83 64 82 71 51 67 59 38 69 61 40 70 65 43 65 69 44 66 72 46 65 69 42 60 64 37 63 66 37 78 78 50 95 96 65 105 106 75 97 97 69 110 113 84 118 122 97 103 109 83 74 79 57 52 60 37 52 61 40 61 70 51 56 62 50 56 62 52 56 62 52 56 62 52 55 61 51 55 61 51 55 61 51 54 60 50 56 62 52 56 62 52 55 61 51 55 61 51 55 61 51 54 60 50 54 60 50 54 60 50 53 58 52 52 57 51 52 57 51 52 57 51 51 56 50 51 56 50 51 56 50 50 55 49 48 53 47 48 53 47 47 52 46 46 51 45 45 50 44 44 49 43 43 48 42 43 48 42 41 46 40 41 46 40 41 46 40 41 46 40 41 46 40 42 47 41 43 48 42 44 49 43 49 54 48 47 52 46 44 49 43 44 49 43 47 52 46 54 59 52 61 66 60 65 72 64 64 75 61 62 75 58 60 73 55 56 69 51 52 65 45 50 63 43 51 65 42 53 67 44 68 81 61 75 88 68 81 94 77 81 94 77 72 84 72 60 72 60 50 62 52 46 56 47 46 53 46 46 53 46 45 52 45 103 100 85 103 100 85 104 101 86 104 101 86 104 101 86 104 101 86 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 107 101 87 108 99 90 109 100 91 109 100 93 109 102 92 109 103 91 106 105 87 107 109 88 105 109 86 106 111 89 106 115 96 104 116 104 109 124 119 136 152 152 166 179 185 191 202 208 211 220 227 235 240 246 246 251 255 252 253 255 253 255 254 255 255 253 255 254 249 254 254 246 253 253 241 250 251 237 247 250 231 244 247 226 238 243 220 229 237 213 226 232 206 219 224 192 215 218 187 214 214 188 217 215 194 221 215 199 222 215 205 229 219 217 236 224 224 247 235 239 250 239 245 255 244 250 255 248 253 255 249 252 255 250 250 255 250 250 255 252 251 255 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 253 255 252 247 255 253 247 255 253 250 254 253 253 253 253 255 251 253 255 248 254 255 246 253 255 244 250 255 248 251 255 247 250 255 248 248 255 252 249 255 255 248 255 255 248 250 255 244 250 252 238 255 255 237 255 248 228 253 238 219 255 239 219 255 239 217 238 210 188 176 144 121 118 82 60 117 76 54 117 75 53 119 74 53 123 78 57 125 80 59 120 75 54 107 64 45 98 55 38 123 77 64 115 68 58 113 66 56 115 68 58 111 67 56 103 59 48 100 56 45 103 61 49 105 63 51 105 63 51 105 63 51 103 63 51 102 62 50 102 62 50 102 62 50 101 63 50 98 64 52 98 66 53 96 67 53 95 67 53 95 67 53 91 68 52 90 69 52 87 68 51 88 73 54 79 66 47 92 84 63 111 105 83 99 94 72 77 75 52 73 71 48 73 75 51 62 68 42 63 72 45 64 70 42 60 66 38 60 65 35 70 73 44 88 89 58 100 101 70 109 109 81 120 120 92 116 118 94 91 95 70 64 67 46 54 59 37 56 64 43 60 67 49 57 63 51 57 63 53 57 63 53 56 62 52 56 62 52 55 61 51 55 61 51 55 61 51 57 63 53 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 55 60 54 55 60 54 55 60 54 54 59 53 54 59 53 54 59 53 53 58 52 53 58 52 51 56 50 51 56 50 49 54 48 48 53 47 47 52 46 45 50 44 44 49 43 44 49 43 43 48 42 43 48 42 42 47 41 42 47 41 43 48 42 44 49 43 45 50 44 45 50 44 48 53 47 46 51 45 43 48 42 43 48 42 45 50 46 50 55 49 56 61 57 59 66 58 64 75 61 64 77 59 64 77 59 61 74 54 56 69 49 51 64 44 49 63 40 48 62 39 60 73 53 66 79 59 72 85 67 73 86 69 68 80 66 59 71 59 50 62 52 46 58 48 45 55 47 47 54 47 46 53 46 103 100 85 103 100 85 103 100 85 104 101 86 104 101 86 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 108 100 87 108 99 90 109 100 91 109 100 93 109 102 92 109 103 91 106 105 87 107 109 88 105 110 87 105 113 90 103 115 95 100 114 101 106 121 116 133 149 149 163 178 183 189 200 206 210 219 226 234 239 245 244 249 253 251 252 255 253 255 254 255 255 253 255 255 250 255 255 248 255 255 243 254 255 241 251 254 235 247 250 229 240 245 222 230 238 214 226 232 204 217 220 191 213 213 185 210 208 185 212 209 190 218 212 200 224 217 209 234 224 223 244 233 237 253 242 248 255 246 251 255 250 255 255 252 255 255 253 254 254 253 251 254 253 249 254 253 249 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 253 255 254 250 255 255 250 255 255 252 255 255 255 255 255 255 253 254 255 251 251 255 249 250 255 249 248 255 248 246 255 249 247 255 250 247 255 254 249 255 255 251 255 255 251 253 255 250 252 253 248 244 241 234 255 251 243 255 253 244 255 251 241 255 248 235 255 244 228 246 227 210 228 207 188 208 183 163 183 156 135 146 118 97 118 87 67 104 73 53 104 73 53 109 76 57 112 79 60 108 71 55 105 66 51 103 66 50 106 69 53 110 73 57 110 74 58 111 75 59 111 75 59 101 65 49 99 66 49 99 66 49 99 66 49 99 66 49 99 66 49 98 67 49 96 67 51 93 70 54 92 71 54 92 71 54 90 71 54 90 71 54 87 72 53 84 71 52 82 71 51 80 72 51 78 72 50 102 100 77 126 126 102 114 114 90 86 88 64 74 76 52 71 77 51 60 69 42 60 70 43 63 72 43 65 71 43 65 70 40 68 71 42 77 78 47 84 85 54 120 119 91 123 122 94 110 110 86 85 85 61 67 66 46 63 65 44 62 65 46 58 62 45 59 62 51 57 63 53 57 63 53 56 62 52 56 62 52 55 61 51 55 61 51 55 61 51 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 56 62 52 57 62 56 57 62 56 57 62 56 56 61 55 56 61 55 56 61 55 55 60 54 55 60 54 54 59 53 53 58 52 52 57 51 51 56 50 50 55 49 48 53 47 47 52 46 47 52 46 45 50 46 45 50 46 44 49 45 43 48 44 43 48 44 44 49 45 45 50 46 45 50 46 44 49 45 44 49 45 44 49 45 44 49 45 46 50 49 48 53 49 51 55 54 52 59 52 59 71 57 61 76 57 64 79 60 64 79 58 60 75 54 55 70 47 52 67 44 50 65 42 54 69 46 58 73 52 64 79 60 66 80 63 63 77 62 56 70 55 49 63 50 45 57 45 45 55 46 46 53 45 45 52 44 102 99 84 102 99 84 103 100 85 104 101 86 104 101 86 105 102 87 106 103 88 106 103 88 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 108 100 87 108 100 87 108 99 90 109 100 91 109 100 93 109 102 92 109 103 91 106 105 87 107 109 88 105 110 87 105 113 90 103 115 95 98 112 99 103 120 114 130 148 148 163 178 183 192 203 209 212 221 228 235 240 246 245 250 254 251 252 255 253 255 254 255 255 253 255 255 250 255 255 248 255 255 244 255 255 243 255 255 239 250 253 232 242 247 224 231 240 213 226 232 204 215 218 189 209 209 181 205 203 180 206 203 186 214 207 197 222 215 209 236 226 227 247 238 243 255 245 253 255 249 255 255 252 255 255 254 255 255 254 252 253 254 249 253 254 248 253 255 249 254 255 250 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 254 253 254 255 254 255 255 254 255 255 254 255 255 254 255 253 254 255 250 253 254 248 253 253 245 251 251 241 252 252 244 254 253 248 255 254 250 255 255 253 254 254 254 254 252 255 254 252 255 251 246 252 255 250 254 254 248 250 249 244 241 253 246 240 255 254 244 255 254 241 255 254 237 255 248 230 252 239 220 242 227 208 226 209 189 205 187 167 179 161 141 155 134 115 140 117 99 122 93 75 125 94 76 116 85 67 97 68 50 87 58 40 89 60 42 91 62 44 88 61 42 96 69 50 96 69 50 96 69 50 95 70 50 96 71 51 96 71 51 96 71 51 93 72 51 92 75 55 92 77 58 92 77 58 89 76 57 88 77 57 85 77 56 82 76 54 81 76 54 78 76 53 81 81 57 105 107 83 124 128 103 109 113 88 83 89 63 70 76 50 62 71 44 60 70 43 60 70 43 63 72 43 68 74 46 69 74 44 68 71 42 72 73 42 76 77 46 121 120 92 116 115 87 102 100 77 84 82 59 76 73 54 75 74 54 70 69 51 60 61 45 60 63 52 57 63 53 57 63 53 57 63 53 56 62 52 56 62 52 56 62 52 56 62 52 55 61 51 55 61 51 56 62 52 56 62 52 56 62 52 56 62 52 57 63 53 57 63 53 58 63 57 58 63 57 58 63 57 58 63 57 57 62 56 57 62 56 57 62 56 56 61 55 56 61 55 56 61 55 55 60 54 54 59 53 53 58 52 52 57 51 51 56 50 51 56 50 47 52 48 46 51 47 45 50 46 44 49 45 43 48 44 43 48 44 43 48 44 43 48 44 43 48 44 44 49 45 45 49 48 46 50 49 47 51 50 47 51 50 47 51 50 45 52 45 51 63 49 55 70 51 61 76 55 64 79 58 63 78 55 60 75 52 57 72 49 56 71 48 53 68 45 56 71 48 60 75 54 62 77 58 60 74 57 55 69 54 49 63 50 45 57 45 44 54 45 46 53 45 45 52 44 102 99 84 102 99 84 103 100 85 104 101 86 104 101 86 105 102 87 106 103 88 106 103 88 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 108 100 87 108 100 87 108 99 90 109 100 91 109 100 93 109 102 92 109 103 91 106 105 87 106 108 87 104 109 86 104 114 90 102 115 95 99 113 100 104 121 115 133 151 151 165 183 187 199 210 216 218 227 234 240 245 251 248 253 255 252 253 255 253 255 254 255 255 253 255 254 249 255 255 245 255 255 242 255 255 240 252 255 236 248 251 230 239 244 221 226 235 208 221 227 199 213 213 185 206 204 179 201 196 176 202 196 180 208 201 191 218 210 207 233 224 227 246 237 242 255 246 254 255 249 255 255 252 255 255 254 255 254 254 252 252 254 249 251 255 247 252 255 248 253 255 250 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 254 254 251 255 255 252 255 254 253 255 253 255 254 250 255 250 247 255 248 246 255 243 245 255 240 243 254 238 245 255 242 250 255 246 253 255 250 255 253 254 255 251 255 255 249 255 255 248 255 252 241 255 254 245 255 255 250 255 255 253 255 255 252 255 252 251 249 248 248 240 245 245 233 255 255 241 255 255 239 255 255 237 255 255 237 255 252 234 255 246 229 251 239 223 248 235 218 249 228 209 255 230 208 227 202 180 165 143 120 116 94 71 101 79 56 98 76 53 92 72 48 94 74 50 92 74 50 92 74 50 93 75 51 93 75 51 94 76 52 94 76 52 92 77 54 89 78 56 87 79 58 87 79 58 86 80 58 85 79 57 83 78 56 80 78 55 78 78 54 77 79 55 80 84 59 96 102 76 102 111 84 85 94 67 69 79 52 65 75 48 60 70 43 63 73 46 63 73 46 67 76 47 72 78 50 72 77 47 70 73 44 79 80 49 89 88 58 113 109 82 106 102 75 97 92 70 91 86 64 89 84 65 84 81 62 77 74 57 66 67 51 61 64 53 59 65 55 59 65 55 59 65 55 58 64 54 58 64 54 58 64 54 57 63 53 56 62 52 56 62 52 56 62 52 57 63 53 57 63 53 58 64 54 58 64 54 58 64 54 59 64 58 59 64 58 59 64 58 58 63 57 58 63 57 57 62 56 57 62 56 57 62 56 58 63 57 58 63 57 57 62 56 57 62 56 56 61 55 56 61 55 55 60 54 55 60 54 52 57 53 50 55 51 49 54 50 47 52 48 45 50 46 44 49 45 43 47 46 43 47 46 44 48 47 44 48 47 45 49 48 46 50 49 46 50 51 46 50 51 45 49 50 43 49 45 43 57 42 47 64 45 54 72 50 59 77 55 61 79 55 60 78 52 58 76 50 58 76 50 53 71 47 55 73 49 58 76 54 60 77 58 58 75 57 54 71 55 48 64 51 45 59 46 45 55 46 46 53 45 45 52 44 99 100 82 99 100 82 100 101 83 101 102 84 101 102 86 104 102 87 105 103 88 105 103 88 104 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 105 102 87 107 101 87 107 101 87 107 101 87 108 100 89 108 101 91 109 100 93 109 102 92 107 103 91 106 105 87 105 107 86 104 109 87 104 114 90 103 116 96 100 113 103 106 123 117 137 155 157 170 187 194 205 216 222 223 232 239 242 249 255 250 255 255 251 255 255 253 255 254 254 255 250 254 254 246 250 250 238 250 251 237 250 251 233 248 250 229 244 246 225 234 238 215 223 227 202 217 219 195 211 209 184 204 199 177 197 190 172 198 190 177 204 195 188 214 206 204 230 221 224 244 234 242 253 246 254 254 249 255 255 253 255 254 254 255 253 253 251 252 254 249 251 255 249 252 255 250 253 255 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 255 254 252 255 254 252 255 254 252 255 253 254 255 250 255 255 251 255 254 252 255 252 254 253 249 255 251 246 255 247 244 255 244 243 255 241 242 254 240 245 255 242 250 255 246 254 255 250 255 252 251 255 249 252 255 247 255 255 246 255 255 248 255 255 247 255 255 249 255 255 252 255 253 252 255 251 253 252 250 255 251 252 255 250 244 250 240 244 250 238 247 249 236 247 248 234 248 246 231 251 248 231 255 250 234 255 253 234 253 241 219 255 251 228 236 220 197 158 142 119 96 80 55 82 66 41 88 72 47 88 72 47 91 77 51 91 77 51 90 78 52 90 78 52 91 79 53 91 79 53 92 80 54 91 81 56 85 79 55 84 79 57 84 79 57 81 79 56 80 78 55 78 78 54 75 77 53 73 77 52 74 78 53 76 82 56 83 92 65 80 89 60 64 73 44 59 70 40 65 76 46 63 74 42 67 78 46 68 79 47 72 81 50 76 83 50 73 78 48 74 77 46 89 90 59 107 106 78 102 101 73 98 94 69 94 89 67 95 90 70 96 91 71 90 85 66 83 78 59 76 73 56 65 66 52 64 66 53 64 66 53 62 65 54 62 65 54 62 65 54 61 64 55 61 64 55 57 63 53 57 63 53 57 63 53 58 64 54 58 64 54 58 66 55 58 66 55 58 66 55 59 64 57 59 64 57 59 64 58 58 63 56 58 63 57 57 62 55 57 62 56 57 62 55 59 64 58 59 64 57 59 64 58 59 64 57 58 63 57 58 63 56 58 63 57 58 63 57 56 63 56 55 61 57 52 59 52 51 56 50 49 54 48 47 52 46 46 51 47 46 51 47 46 50 49 46 50 49 44 50 46 44 50 46 43 50 43 43 50 42 44 52 41 41 54 37 36 54 30 41 61 33 50 70 43 56 76 49 59 79 54 59 77 53 59 77 53 59 77 53 56 74 50 57 75 51 59 77 53 60 78 54 60 78 56 55 72 53 49 66 48 46 60 45 46 56 45 47 54 46 46 53 45 92 102 78 93 103 79 95 103 80 96 104 81 98 106 85 101 106 86 103 106 87 104 107 88 102 103 85 104 103 85 104 101 86 104 101 86 106 100 86 107 101 87 107 101 89 108 102 88 107 101 87 106 103 88 109 103 91 108 104 93 109 102 94 106 102 91 104 100 88 102 100 85 102 103 85 103 108 86 102 111 90 98 111 93 99 112 103 114 130 127 150 168 172 185 199 208 209 219 228 224 233 240 240 247 253 247 252 255 247 253 251 250 255 251 252 255 248 252 254 243 248 249 235 250 251 235 249 248 230 243 240 221 239 236 217 236 233 214 224 222 201 214 209 189 216 208 189 203 191 175 188 179 164 188 178 169 195 184 180 205 195 196 219 210 215 233 223 231 250 243 251 253 248 255 254 251 255 255 254 255 254 254 255 252 254 253 251 253 250 252 254 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 252 255 254 252 255 255 253 255 255 253 255 255 251 255 254 250 255 253 250 255 252 249 255 252 249 255 252 249 255 254 255 255 253 254 253 253 253 253 253 253 254 255 255 254 255 253 251 255 252 249 254 248 253 255 250 251 252 246 253 252 247 255 255 250 255 254 248 255 249 244 255 247 243 255 250 249 255 251 255 255 252 255 254 253 255 254 255 255 254 255 255 251 255 252 251 255 252 250 254 253 252 255 255 252 255 255 255 255 253 255 254 249 255 254 242 255 254 237 255 254 234 255 254 232 251 245 223 255 252 230 233 225 202 145 137 114 86 79 53 88 78 51 85 76 47 83 74 45 87 78 49 87 78 49 85 78 49 85 78 49 84 79 50 84 79 50 84 78 52 83 79 52 81 77 50 82 78 53 80 78 53 80 80 54 77 79 55 75 79 54 72 77 54 71 76 53 74 80 54 70 79 52 65 74 45 61 70 39 62 72 38 68 75 42 70 77 43 68 78 41 77 88 48 75 87 47 70 81 41 67 77 40 79 86 52 94 99 67 96 99 68 90 90 62 89 89 63 91 89 66 95 90 68 95 90 70 95 88 69 92 85 66 88 81 62 85 78 59 75 70 51 71 68 49 68 65 48 65 63 48 64 62 49 62 62 50 63 63 53 63 65 54 60 63 54 58 64 54 58 64 54 57 65 54 57 65 52 55 66 52 55 66 52 55 66 52 58 66 55 57 65 54 57 64 56 56 64 53 56 63 55 57 65 54 57 64 56 58 66 55 58 65 57 58 66 55 57 64 56 58 66 55 59 66 58 60 68 57 61 68 60 62 69 61 56 66 58 55 65 57 55 65 56 55 63 52 53 61 48 51 59 46 50 56 46 49 54 48 46 52 48 47 53 49 45 55 47 45 57 45 46 59 41 48 64 38 54 71 39 55 77 39 59 86 43 59 88 44 60 86 49 59 84 52 59 82 56 60 79 57 61 78 59 61 79 57 58 76 54 63 81 55 68 86 60 68 87 59 67 87 60 64 84 59 55 74 52 46 63 44 45 55 44 44 51 43 41 48 40 89 103 77 90 104 78 92 104 80 93 105 81 97 107 83 98 108 84 103 108 88 103 108 88 103 104 86 103 104 86 105 102 87 105 102 87 107 101 87 108 102 88 109 101 90 109 103 89 108 102 88 106 103 88 107 103 91 108 104 93 107 103 94 106 102 91 104 102 90 101 102 86 104 105 87 103 108 86 103 112 93 102 115 98 106 119 110 121 137 136 156 171 178 186 200 209 208 218 227 224 233 238 240 247 253 246 254 255 249 255 253 249 255 249 251 254 245 249 253 239 249 250 236 248 249 231 246 243 226 238 235 216 235 230 211 230 225 206 221 214 196 210 201 184 203 191 175 193 179 166 184 172 160 187 174 166 194 183 181 205 195 196 219 208 214 228 221 228 251 243 254 253 247 255 254 251 255 255 254 255 254 253 255 252 253 255 252 254 253 252 254 253 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 252 255 254 252 255 255 253 255 255 253 255 253 250 255 253 250 255 253 250 255 252 249 255 252 248 255 253 248 255 254 253 255 254 252 253 253 253 253 253 253 255 255 255 255 255 255 254 254 254 253 253 253 255 255 253 255 255 251 255 252 249 254 247 241 245 236 229 238 228 219 244 231 222 250 241 234 255 252 253 254 254 255 253 255 254 254 255 253 252 255 251 251 255 250 251 255 254 250 254 255 252 255 255 252 255 255 255 254 255 254 254 252 255 253 244 255 254 236 255 253 231 255 254 229 248 246 223 254 252 231 229 224 202 141 137 112 83 77 51 84 79 50 82 75 46 81 74 45 85 79 47 85 79 47 84 79 49 84 79 49 83 79 50 83 79 50 81 80 52 81 80 52 81 77 50 79 78 50 80 78 53 78 81 54 77 79 55 74 80 54 72 77 54 69 77 53 71 80 53 69 78 49 65 74 45 63 73 39 66 73 40 70 77 43 74 80 44 74 82 43 75 86 43 75 88 42 82 93 51 89 100 60 93 101 64 87 94 60 83 88 58 83 86 57 85 85 61 86 86 62 90 85 65 91 86 66 92 85 66 92 84 65 90 82 61 89 81 60 82 76 54 80 74 52 75 70 51 72 67 48 67 64 49 65 63 50 66 64 52 63 65 54 61 62 54 58 64 54 58 64 54 57 65 54 55 66 52 55 66 52 54 67 50 54 67 50 58 66 55 57 65 54 57 65 54 56 64 53 56 64 53 57 65 54 57 65 54 58 66 55 58 66 55 58 66 55 58 66 55 58 66 55 59 67 56 60 68 57 61 69 58 60 70 59 61 71 63 60 72 62 60 70 59 60 71 55 60 68 53 58 66 51 57 63 51 56 61 54 55 62 55 52 62 54 51 61 52 48 62 45 51 67 41 57 77 42 66 89 47 71 97 49 79 112 59 76 110 59 76 105 61 70 97 62 66 89 63 60 82 61 59 76 58 58 75 56 61 79 57 68 86 60 74 93 65 76 95 65 75 95 67 72 92 64 60 83 57 51 70 48 43 53 42 43 50 42 40 47 39 89 103 77 90 104 78 92 104 80 94 106 82 97 107 83 99 109 85 103 108 88 104 109 89 105 106 88 105 106 88 107 104 89 107 104 89 108 102 88 109 103 89 110 102 91 110 104 90 108 102 88 107 104 89 107 103 91 107 103 92 107 103 94 106 102 91 104 102 90 101 102 86 104 105 87 101 106 84 100 109 90 103 116 99 111 124 115 127 143 142 157 172 179 182 196 205 204 214 223 221 230 235 239 246 252 246 254 255 249 255 253 248 255 248 248 251 242 245 249 235 244 245 231 241 242 224 236 233 216 226 223 204 222 217 198 216 211 192 208 201 183 199 190 173 192 180 164 188 174 161 187 175 163 194 181 173 204 193 191 215 205 206 227 216 222 234 227 234 251 243 254 253 247 255 254 251 255 254 253 255 253 252 255 252 253 255 252 254 253 253 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 252 255 254 252 255 255 253 255 254 252 255 253 250 255 253 250 255 252 249 255 252 249 255 252 248 255 253 248 255 254 253 254 253 251 252 252 252 253 253 253 254 254 254 255 255 255 254 254 254 253 253 253 255 255 253 255 255 251 255 253 250 249 242 236 232 223 216 223 213 204 234 221 212 246 237 230 255 252 253 254 254 255 253 255 254 254 255 253 252 255 251 251 255 250 251 255 254 250 254 255 252 255 255 252 255 255 255 254 255 254 254 252 255 253 244 255 254 236 255 253 231 255 254 229 249 247 224 254 252 231 228 223 201 138 134 109 80 74 48 82 77 48 82 75 46 82 75 46 84 78 46 85 79 47 84 79 49 85 80 50 84 80 51 83 79 50 81 80 52 80 79 51 81 77 50 79 78 50 80 78 53 77 80 53 77 79 55 74 80 54 73 78 55 70 78 54 72 81 54 69 78 49 67 76 47 66 76 42 70 77 44 73 80 46 79 85 49 81 89 50 80 91 48 85 98 52 103 116 73 119 130 90 112 120 83 88 95 61 76 81 51 78 81 52 80 80 56 81 81 57 84 79 59 85 80 60 87 80 61 88 81 62 91 83 62 92 84 63 89 83 61 86 80 58 81 76 57 77 72 53 71 68 53 68 66 53 67 65 53 63 65 54 61 62 54 58 64 54 58 64 54 57 65 54 55 66 52 55 66 52 54 67 50 54 67 50 58 66 55 58 66 55 57 65 54 57 65 54 57 65 54 57 65 54 58 66 55 58 66 55 58 66 55 58 66 55 58 66 55 58 66 55 59 67 56 60 68 57 62 70 59 60 70 59 64 74 66 63 75 65 64 74 63 64 75 59 65 73 58 63 71 56 63 69 57 62 67 60 62 69 62 57 67 59 54 64 55 52 66 49 57 73 47 66 86 51 80 103 61 88 114 66 94 127 74 91 125 74 87 116 72 77 104 69 67 90 64 57 79 58 54 71 53 52 69 50 60 78 56 69 87 61 77 96 68 82 101 71 82 102 74 78 98 70 65 88 62 56 75 53 47 57 46 47 54 46 44 51 43 89 103 77 90 104 78 92 104 80 94 106 82 98 108 84 100 110 86 104 109 89 105 110 90 107 108 90 107 108 90 109 106 91 108 105 90 110 104 90 110 104 90 111 103 92 111 105 91 109 103 89 107 104 89 107 103 91 107 103 92 106 102 93 106 102 91 104 102 90 102 103 87 102 103 85 97 102 80 95 104 85 100 113 96 112 125 116 127 143 142 151 166 173 171 185 194 199 209 218 217 226 231 237 244 250 245 253 255 248 254 252 245 252 245 243 246 237 238 242 228 234 235 221 228 229 211 221 218 201 212 209 190 208 203 184 202 197 178 195 188 170 189 180 163 196 184 168 198 184 171 203 191 179 213 200 192 224 213 211 234 224 225 244 233 239 248 241 248 252 244 255 253 247 255 254 251 255 254 253 255 253 252 255 251 252 254 252 254 253 253 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 252 255 254 252 255 254 252 255 254 252 255 253 250 255 252 249 255 252 249 255 252 249 255 251 247 255 252 247 255 253 252 253 252 250 251 251 251 252 252 252 254 254 254 255 255 255 254 254 254 253 253 253 254 253 251 255 255 251 255 253 250 250 243 237 234 225 218 227 217 208 239 226 217 251 242 235 255 252 253 254 254 255 253 255 254 254 255 253 252 255 251 251 255 250 251 255 254 250 254 255 252 255 255 252 255 255 255 254 255 254 254 252 255 253 244 255 254 236 255 252 230 255 253 228 252 250 227 255 254 233 228 223 201 137 133 108 80 74 48 82 77 48 84 77 48 84 77 48 84 78 46 85 79 47 85 80 50 85 80 50 84 80 51 83 79 50 80 79 51 79 78 50 81 77 50 79 78 50 79 77 52 76 79 52 76 78 54 74 80 54 74 79 56 71 79 55 74 83 56 71 80 51 70 79 50 72 82 48 76 83 50 78 85 51 85 91 55 91 99 60 103 114 71 115 128 82 135 148 105 144 156 116 133 143 106 110 117 83 90 95 65 82 87 57 79 79 55 78 78 54 80 75 55 79 74 54 82 75 56 85 78 59 89 81 60 91 83 62 90 84 62 88 82 60 84 79 60 80 75 56 74 71 56 71 69 56 69 67 55 65 67 56 61 62 54 58 64 54 58 64 54 57 65 54 55 66 52 55 66 52 54 67 50 54 67 50 59 67 56 58 66 55 57 65 54 57 65 54 57 65 54 57 65 54 58 66 55 59 67 56 59 67 56 58 66 55 58 66 55 59 67 56 59 67 56 61 69 58 62 70 59 61 71 60 61 71 63 60 72 62 62 72 61 62 73 57 64 72 57 63 71 56 63 69 57 63 68 61 61 68 61 57 67 59 54 64 55 52 66 49 57 73 47 68 88 53 82 105 63 91 117 69 89 122 69 87 121 70 84 113 69 73 100 65 62 85 59 51 73 52 48 65 47 46 63 44 54 72 50 64 82 56 75 94 66 82 101 71 83 103 75 79 99 71 65 88 62 54 73 51 49 59 48 48 55 47 45 52 44 89 103 77 90 104 78 92 104 80 94 106 82 98 108 84 100 110 86 105 110 90 106 111 91 109 110 92 108 109 91 110 107 92 109 106 91 110 104 90 110 104 90 112 104 93 111 105 91 109 103 89 107 104 89 106 102 90 106 102 91 105 101 92 105 101 90 104 102 90 102 103 87 103 104 86 97 102 80 94 103 84 100 113 96 112 125 116 125 141 140 145 160 167 161 175 184 194 204 213 214 223 228 234 241 247 243 251 253 245 251 249 242 249 242 239 242 233 233 237 223 227 228 214 218 219 201 211 208 191 204 201 182 201 196 177 195 190 171 190 183 165 187 178 161 202 190 174 209 195 182 218 206 194 229 216 208 238 227 225 248 238 239 255 245 251 255 249 255 252 244 255 253 247 255 253 250 255 253 252 255 252 251 255 251 252 254 252 254 253 254 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 252 255 254 252 255 254 252 255 254 252 255 252 249 255 252 249 255 252 249 255 251 248 255 251 247 255 252 247 255 252 251 252 251 249 251 251 251 252 252 252 254 254 254 255 255 255 254 254 254 253 253 253 254 253 251 254 253 249 255 252 249 254 247 241 245 236 229 239 229 220 247 234 225 254 245 238 255 252 253 254 254 255 253 255 254 254 255 253 252 255 251 251 255 250 251 255 254 250 254 255 251 255 255 251 255 255 254 253 255 254 254 252 255 254 245 255 254 236 255 252 230 255 252 227 254 252 229 255 255 235 229 224 202 138 134 109 81 75 49 84 79 50 86 79 50 87 80 51 84 78 46 85 79 47 86 81 51 86 81 51 85 81 52 83 79 50 79 78 50 78 77 49 81 77 50 79 78 50 79 77 52 76 79 52 76 78 54 74 80 54 74 79 56 73 81 57 76 85 58 73 82 53 74 83 54 78 88 54 81 88 55 82 89 55 91 97 61 99 107 68 129 142 98 146 162 115 161 174 131 157 169 129 148 158 121 138 145 111 115 120 90 90 95 65 80 80 56 78 78 54 78 73 53 76 71 51 78 71 52 81 74 55 86 78 57 88 80 59 88 82 60 86 80 58 83 78 59 80 75 56 76 73 58 73 71 58 71 69 57 67 69 58 61 62 54 58 64 54 58 64 54 57 65 54 55 66 52 55 66 52 54 67 50 54 67 50 59 67 56 59 67 56 58 66 55 57 65 54 57 65 54 58 66 55 59 67 56 59 67 56 59 67 56 59 67 56 59 67 56 59 67 56 60 68 57 61 69 58 62 70 59 61 71 60 59 69 61 58 70 60 60 70 59 60 71 55 62 70 55 61 69 54 62 68 56 61 66 59 58 65 58 55 65 57 53 63 54 52 66 49 57 73 47 66 86 51 78 101 59 85 111 63 83 116 63 81 115 64 79 108 64 69 96 61 57 80 54 46 68 47 44 61 43 44 61 42 49 67 45 60 78 52 73 92 64 80 99 69 82 102 74 78 98 70 63 86 60 52 71 49 43 53 42 43 50 42 40 47 39 hdf4-hdf4.3.1/mfhdf/hrepack/image24plane.txt000066400000000000000000012376031503061704500205550ustar00rootroot00000000000000components 3 height 149 width 227 48 48 49 50 53 53 54 54 56 56 58 58 58 58 58 58 58 57 57 56 56 57 57 58 56 56 56 56 56 56 56 56 54 54 54 53 53 52 52 52 52 52 52 52 52 52 52 50 47 47 47 48 49 50 51 51 54 54 55 56 56 57 58 58 65 66 68 70 73 74 75 75 77 77 79 78 79 79 80 82 82 89 98 110 125 139 153 163 175 184 190 197 199 202 203 208 231 237 235 235 238 239 241 244 248 247 244 240 233 226 215 203 187 181 181 180 180 179 178 175 173 170 166 162 159 155 152 150 148 146 146 145 145 144 146 146 148 148 148 148 148 149 150 150 150 149 151 159 169 179 188 191 185 181 172 158 135 111 84 67 61 57 57 55 55 54 53 53 55 55 55 54 54 53 53 52 47 46 47 47 48 48 50 50 53 52 52 51 55 61 69 80 106 124 141 149 159 170 170 159 148 135 128 126 115 96 84 80 83 79 77 84 102 124 141 153 163 162 158 143 123 102 88 81 85 85 85 48 48 49 49 52 53 54 54 56 56 58 58 58 58 58 58 57 57 56 56 56 56 57 57 56 56 56 56 56 56 56 56 54 54 53 53 53 52 52 52 53 53 53 53 53 53 53 51 48 48 48 49 50 51 52 52 54 54 55 55 56 57 58 58 64 65 67 69 72 73 74 74 76 76 77 77 77 78 79 81 80 85 94 106 120 132 146 156 167 175 181 188 192 196 197 205 225 231 232 234 237 239 243 246 248 247 244 240 233 224 213 202 185 181 180 180 180 178 176 175 173 169 166 161 159 155 152 150 148 146 145 145 145 144 146 146 148 147 148 148 148 149 150 150 148 149 152 160 171 181 189 191 187 183 172 156 133 108 83 66 62 58 57 56 56 55 54 54 55 55 55 54 54 53 53 52 47 46 47 47 48 48 50 50 51 53 52 51 53 60 67 78 100 118 134 143 154 164 165 157 145 134 127 123 111 91 81 79 79 79 80 82 91 110 131 148 153 154 153 143 126 106 93 86 88 86 88 47 47 48 49 52 52 53 53 55 55 55 55 57 57 57 57 57 56 55 55 55 55 56 57 56 56 56 56 56 56 56 56 54 53 53 53 52 52 52 52 53 53 53 53 53 53 53 51 50 49 50 51 51 52 52 53 54 54 54 55 56 57 57 58 63 64 66 68 71 72 72 72 73 73 75 75 75 76 77 78 77 81 89 100 113 124 135 146 152 160 167 175 181 186 191 197 217 225 227 231 234 240 244 248 250 249 245 240 232 220 209 198 183 179 179 178 178 176 175 173 170 167 165 161 157 154 152 149 148 145 145 145 144 144 144 144 145 145 146 146 147 147 148 149 149 150 154 163 175 185 191 193 192 184 174 153 129 104 81 66 63 61 60 58 57 56 55 55 54 54 54 53 53 52 52 50 46 44 46 46 47 47 48 50 53 52 53 52 52 57 62 73 91 108 124 134 144 152 155 148 140 131 125 117 102 84 77 76 77 79 81 77 78 91 113 133 135 138 141 134 120 102 90 86 90 90 91 46 47 47 48 51 52 52 52 54 54 54 54 56 56 56 56 55 55 54 54 54 54 55 55 56 56 56 56 56 56 56 56 53 53 53 52 52 52 51 51 54 54 54 54 54 54 54 52 51 51 51 52 52 53 53 53 53 53 54 55 56 56 57 57 62 63 64 66 69 69 70 70 71 71 72 73 73 74 76 74 75 78 85 94 105 115 126 134 140 148 157 163 172 179 184 193 210 218 222 226 231 236 243 247 250 249 245 238 229 218 205 194 181 176 176 176 175 174 174 172 169 166 163 160 156 152 150 148 145 145 145 144 144 144 143 143 144 144 143 143 146 145 148 146 149 150 156 166 178 188 193 194 194 186 172 151 124 98 76 65 64 62 61 60 58 57 56 56 54 54 54 51 53 50 50 49 45 45 47 47 48 48 49 49 53 54 53 53 52 54 58 68 84 99 113 123 130 137 141 139 131 125 120 111 96 81 76 76 76 80 81 76 71 77 94 106 117 120 122 119 107 96 87 84 93 93 93 45 45 46 47 48 49 51 52 51 51 52 52 52 52 54 54 52 52 51 51 51 51 52 52 53 53 53 53 53 53 53 53 51 51 50 50 50 49 49 49 52 52 52 52 52 52 52 52 52 52 52 52 52 53 53 53 53 53 54 54 55 56 57 57 60 61 63 64 66 67 67 67 68 68 70 71 72 73 74 73 74 77 82 89 98 106 117 125 130 139 147 154 163 172 178 187 204 212 216 221 226 233 240 244 249 248 244 237 225 211 197 185 178 174 174 174 173 172 172 170 168 164 160 158 154 151 149 147 145 144 143 143 143 142 142 142 142 142 142 142 143 143 145 144 148 151 157 168 182 191 197 196 190 183 166 144 116 90 69 60 64 64 63 62 61 60 57 56 54 52 52 50 51 49 49 48 45 44 45 45 47 47 48 49 51 53 53 52 50 52 55 61 78 89 101 110 115 121 128 131 127 122 117 107 95 84 79 76 78 78 77 74 71 71 75 77 93 96 98 96 90 87 85 88 94 96 96 44 44 46 46 47 48 51 51 50 50 51 51 51 51 53 53 51 51 50 49 49 50 51 51 51 51 51 51 51 51 51 51 50 50 50 50 49 49 49 48 51 51 51 51 51 51 51 51 52 52 52 52 52 52 52 52 52 53 53 54 55 56 56 56 59 60 61 62 64 65 65 65 67 67 69 70 71 72 74 72 74 73 78 86 92 100 110 118 123 130 140 148 156 163 170 180 196 204 209 214 222 228 236 241 247 244 240 233 220 205 190 177 174 171 170 170 170 169 169 168 165 162 160 155 151 149 147 145 143 143 143 143 142 142 142 141 142 139 141 139 139 140 141 142 148 151 160 172 185 194 197 194 186 177 163 141 111 83 65 57 64 65 63 62 60 57 56 55 52 52 51 50 50 48 48 46 45 45 46 46 48 48 49 49 50 51 51 52 50 49 52 56 71 79 88 96 101 109 121 130 128 124 119 110 100 91 82 76 79 76 73 72 72 69 64 59 66 68 74 74 73 75 79 86 94 96 96 43 43 44 45 47 47 48 48 49 49 49 49 50 50 50 50 50 50 49 49 49 49 50 50 49 49 49 49 49 49 49 49 50 50 50 49 49 49 48 48 51 51 51 51 51 51 51 51 52 52 52 51 51 51 51 51 52 52 53 54 55 55 56 56 58 59 60 61 63 63 63 63 66 66 69 69 71 72 74 72 72 71 75 81 88 95 102 110 118 124 133 140 147 155 162 172 187 194 201 208 217 226 234 240 242 241 236 228 214 198 181 170 170 169 169 168 168 168 167 165 163 160 158 154 150 147 145 143 143 141 141 140 140 140 139 139 139 138 138 137 138 139 139 140 146 152 161 174 188 194 196 192 185 178 165 143 115 87 67 60 62 64 62 61 58 57 56 54 52 52 51 49 49 46 46 46 45 45 45 45 46 46 48 48 48 49 50 50 48 47 50 52 63 68 75 84 90 100 117 131 137 133 126 116 109 99 86 76 75 73 71 69 70 68 63 59 58 62 68 71 71 74 78 85 94 97 97 43 43 44 44 46 47 48 48 49 49 49 49 50 50 50 50 50 49 49 48 48 49 49 50 48 48 48 48 48 48 48 48 50 50 50 49 49 48 48 48 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 52 52 53 54 54 55 56 56 57 58 59 60 62 62 62 62 66 66 69 69 71 73 74 73 70 70 74 79 84 92 98 106 113 119 125 133 140 149 155 164 178 186 193 202 212 222 231 238 237 235 231 223 209 191 175 164 166 166 165 165 165 164 164 164 162 159 156 152 149 145 143 143 141 141 141 140 140 139 139 138 138 136 136 136 136 135 136 139 145 150 162 173 186 193 193 187 185 178 165 145 117 91 71 67 60 63 62 59 57 55 54 52 52 51 50 49 47 46 46 46 45 45 45 45 46 46 48 48 47 48 50 50 49 48 48 51 56 59 67 75 83 94 116 135 144 140 132 122 114 105 87 73 69 71 68 67 67 64 64 62 71 75 81 85 83 82 84 89 94 97 97 44 44 44 44 45 45 46 46 47 47 49 48 48 48 47 47 47 47 47 47 47 47 47 48 47 47 47 47 47 47 47 47 47 47 47 48 48 49 49 50 49 49 49 49 49 49 49 49 48 49 50 51 51 51 51 51 51 51 51 51 52 53 54 55 56 57 58 59 61 62 62 62 63 63 66 67 68 70 71 70 71 72 74 80 84 88 94 98 109 116 124 131 141 147 152 158 167 173 181 190 202 212 222 229 232 234 230 218 200 183 170 162 162 161 162 162 161 161 162 160 156 154 152 149 147 144 142 140 139 139 138 137 137 137 136 135 137 134 134 135 136 136 137 139 145 151 163 177 186 187 187 184 180 175 163 145 126 106 86 73 76 74 66 60 57 55 54 51 52 51 49 49 48 47 44 44 45 45 45 45 47 47 47 47 48 48 49 49 49 49 49 52 52 59 65 67 74 93 121 139 147 148 144 131 116 106 95 90 76 72 65 62 63 65 76 85 98 110 118 114 108 103 95 87 91 96 99 44 44 44 44 45 45 46 46 47 46 48 48 47 47 47 47 46 46 46 46 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 48 48 48 49 49 49 49 49 49 49 49 49 49 48 48 49 50 51 51 50 50 50 50 50 50 51 52 53 54 56 57 58 59 61 62 62 61 63 63 65 66 67 69 71 72 72 72 76 79 81 86 90 95 104 112 119 129 137 144 150 155 162 167 172 180 190 201 212 219 223 224 222 212 196 178 165 158 159 158 159 158 158 158 158 158 154 153 150 148 144 143 140 140 139 138 137 137 137 135 135 133 134 133 133 131 132 134 135 136 147 151 163 175 184 184 183 179 177 170 159 144 127 109 90 78 76 75 69 64 61 56 52 49 50 50 48 47 47 46 46 46 47 45 47 47 47 47 47 47 48 48 49 49 49 49 49 50 53 57 60 63 72 94 120 138 147 148 144 132 121 113 107 104 92 88 83 82 84 90 102 114 116 126 131 126 118 114 102 90 89 94 97 44 44 44 44 44 44 45 45 46 46 46 45 47 46 46 46 44 44 44 44 43 43 43 43 45 45 45 45 45 45 45 45 44 44 45 45 45 46 46 46 46 46 46 47 47 47 47 47 48 48 49 50 50 50 50 49 49 49 49 49 50 51 52 53 56 57 58 59 61 61 61 61 63 63 65 65 67 68 70 71 72 74 75 78 80 83 86 91 99 107 116 125 135 141 148 150 157 160 162 168 177 186 197 205 213 215 212 204 190 174 161 156 157 156 156 155 155 155 155 155 152 150 148 147 143 140 139 138 137 137 137 135 135 133 132 131 132 130 130 130 131 133 135 136 148 151 160 172 178 179 178 174 173 166 157 145 130 115 99 88 78 77 72 68 64 57 52 47 48 48 47 47 46 46 47 47 47 46 47 47 47 47 47 47 48 48 48 48 48 48 48 49 54 55 56 59 72 95 122 139 144 146 143 132 125 123 124 125 125 119 113 110 110 111 121 131 139 145 144 136 131 124 106 92 86 91 93 45 45 45 45 45 45 46 46 46 46 45 45 46 46 46 46 44 43 43 43 43 42 42 42 44 44 44 44 44 44 44 44 44 44 44 44 44 45 45 45 45 46 46 46 46 47 47 47 47 48 49 49 49 49 48 48 48 48 48 48 49 50 51 52 57 58 59 60 61 61 61 61 62 62 64 64 65 67 68 69 70 72 73 74 76 78 81 84 94 101 111 120 130 138 144 148 153 155 155 159 165 174 184 191 199 203 202 195 182 170 158 153 153 153 152 151 151 153 153 151 149 148 147 144 142 138 138 137 136 136 135 135 132 132 131 128 129 128 128 129 131 131 135 136 148 150 158 167 174 174 173 170 167 161 154 143 134 122 109 98 83 81 75 69 64 59 53 49 48 47 46 46 46 46 47 48 47 47 47 47 47 46 47 46 48 47 48 47 47 47 47 50 55 54 51 57 72 98 123 139 141 143 140 131 129 133 141 146 147 144 140 135 130 125 129 136 148 152 148 139 133 127 107 88 83 89 90 43 43 43 43 45 45 46 46 45 45 46 45 45 44 44 44 44 44 44 43 43 42 42 42 44 44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 44 45 45 46 46 47 47 47 47 48 48 48 48 48 47 46 47 47 47 47 48 49 51 52 57 58 59 60 61 61 60 60 61 61 63 63 64 65 66 67 68 67 68 69 71 72 75 78 88 95 105 114 125 134 140 144 151 151 151 151 156 163 171 179 186 189 190 185 176 166 155 151 151 151 150 149 148 149 150 150 149 147 146 142 139 137 137 136 135 134 134 134 131 131 130 128 128 128 128 127 130 131 135 136 145 146 154 163 168 168 169 166 162 155 149 140 134 126 116 106 92 86 78 69 63 60 55 54 48 48 46 47 47 47 49 50 49 49 49 49 49 47 49 47 50 48 50 48 48 48 48 50 56 53 49 54 71 96 122 136 141 143 141 134 135 144 155 160 152 154 155 152 145 137 137 144 146 149 144 136 132 123 103 84 81 85 86 44 44 44 44 46 46 47 47 46 46 47 46 46 46 45 45 45 45 45 44 43 42 42 42 43 43 43 43 43 43 43 43 44 44 43 43 43 42 42 42 44 44 44 45 46 46 47 47 47 47 48 48 47 47 46 45 48 48 47 48 49 50 51 52 58 58 59 60 61 60 60 59 61 60 62 62 63 64 65 63 64 64 64 65 66 67 70 72 81 88 97 108 117 128 134 139 147 149 147 147 149 154 160 165 172 176 180 177 170 161 154 150 149 148 147 147 147 147 148 148 147 146 143 141 138 137 135 135 134 134 133 131 131 129 127 127 128 127 127 128 130 133 136 138 142 144 151 159 167 167 169 164 156 150 143 136 131 126 121 112 100 93 82 74 66 62 58 57 51 50 49 47 47 48 49 50 49 49 49 49 49 48 48 48 49 49 49 49 47 47 47 50 56 53 51 53 69 92 117 134 142 145 144 139 141 151 162 169 165 166 167 164 151 139 136 141 142 144 141 132 128 119 100 81 77 81 82 44 44 44 44 46 46 46 46 47 47 47 47 47 47 46 46 47 46 46 45 44 43 43 42 43 43 43 43 43 43 43 43 43 43 43 42 42 42 41 41 43 43 44 45 46 46 47 47 47 47 47 47 47 46 45 44 48 48 48 48 49 50 52 52 58 59 59 60 61 60 60 59 60 60 62 61 62 62 63 62 61 59 59 60 61 62 64 67 71 79 89 100 110 120 127 133 143 145 144 143 144 147 151 153 160 166 170 170 165 159 151 149 146 146 145 144 145 145 146 146 145 145 142 141 138 136 134 132 133 133 131 130 130 129 126 126 128 128 128 129 132 133 136 140 140 142 152 161 168 169 169 164 153 146 137 130 128 127 126 120 106 100 90 81 73 67 62 60 54 52 51 48 49 49 50 52 50 50 50 50 50 48 48 48 49 49 48 48 48 48 48 49 54 53 52 52 65 87 113 130 141 144 144 139 141 149 160 164 169 168 167 161 147 133 130 135 136 140 139 129 123 113 95 77 73 74 76 46 44 46 46 46 46 46 47 48 48 48 48 48 48 47 49 50 49 49 48 47 44 43 43 43 43 43 43 43 43 43 43 43 43 45 42 44 41 41 40 42 43 44 44 45 46 47 47 45 45 47 47 46 45 44 44 49 50 50 50 51 52 53 54 59 59 60 60 61 60 59 59 60 60 61 61 61 62 63 61 62 61 60 57 57 58 59 63 67 74 84 94 104 111 118 123 135 139 139 140 142 143 146 149 152 156 162 161 158 153 150 148 148 147 144 142 142 140 140 141 142 142 139 138 136 135 132 132 130 128 127 126 126 124 124 124 128 129 128 130 133 133 136 139 140 142 147 152 157 157 158 157 147 143 137 129 127 125 122 116 103 98 92 85 78 71 64 61 56 56 53 51 50 50 51 52 50 48 48 50 50 50 50 50 51 51 49 49 48 48 48 49 52 52 52 52 63 84 109 129 137 141 141 136 138 145 155 159 159 158 157 152 140 130 133 140 132 137 137 126 118 108 90 74 70 70 70 47 46 47 48 48 48 49 50 51 52 52 54 53 52 51 52 53 53 52 51 50 49 48 48 46 46 45 45 44 43 42 41 46 46 47 46 47 46 46 46 47 47 45 46 45 45 46 46 45 45 46 47 47 48 50 50 50 52 53 54 56 58 58 59 61 61 62 62 62 61 60 59 61 60 60 59 61 62 62 64 66 66 60 57 53 52 54 59 64 71 79 86 91 97 102 109 121 127 134 139 143 147 147 146 147 147 148 149 148 146 145 145 151 151 146 140 136 132 130 130 136 136 138 137 136 135 132 131 123 126 118 112 118 118 118 125 125 131 136 139 138 135 133 135 144 149 147 142 138 134 135 136 139 138 139 138 132 124 114 110 104 97 91 89 90 86 79 73 66 64 58 53 51 51 51 49 47 45 45 45 47 49 51 51 52 52 51 50 48 47 47 47 47 49 48 47 60 86 112 127 141 139 140 140 138 137 142 153 159 157 150 143 136 133 131 133 131 131 128 121 114 104 89 77 74 68 62 47 48 48 48 49 49 50 51 52 52 55 55 54 53 53 53 55 55 54 54 51 50 48 48 48 47 47 45 45 43 41 41 46 47 47 47 47 47 46 46 47 47 46 46 46 46 46 46 46 46 46 46 47 47 49 51 53 53 55 56 58 59 60 61 62 62 62 62 62 61 60 60 61 60 59 59 61 61 62 64 68 70 67 64 61 60 59 62 65 70 75 80 86 92 97 103 112 120 128 136 143 145 147 147 141 139 139 140 141 141 142 145 149 149 144 139 134 131 129 129 133 134 135 136 133 132 130 127 119 119 112 109 114 114 113 117 127 132 138 140 138 135 133 136 144 149 145 138 131 127 128 131 134 139 143 143 136 127 117 109 100 94 89 89 90 88 82 77 69 65 59 53 51 50 49 46 49 48 48 48 49 51 52 52 52 51 50 48 47 45 44 44 50 50 48 45 56 83 111 128 135 134 134 136 134 132 138 147 153 150 147 140 134 130 130 131 131 130 127 120 113 104 89 77 70 64 59 49 49 49 49 50 50 52 52 53 53 56 56 56 55 55 54 56 56 55 54 52 51 50 49 49 47 48 47 45 44 43 43 47 49 47 47 47 47 46 46 48 48 47 47 47 48 48 48 47 47 48 48 48 47 49 50 54 55 57 58 60 61 62 63 63 63 64 64 63 62 61 61 61 60 59 59 59 59 60 63 68 71 74 76 79 78 74 71 68 65 66 70 79 89 99 105 107 111 119 129 135 140 141 141 138 135 134 133 134 137 140 143 142 143 140 138 135 133 134 134 137 137 136 134 132 128 126 122 124 120 117 116 118 118 117 118 127 132 138 140 138 137 136 140 147 153 151 146 138 131 129 130 134 138 143 145 144 138 130 122 107 97 92 92 93 91 85 80 70 66 58 51 46 42 40 43 50 53 53 53 52 53 51 51 48 47 44 43 41 40 38 40 49 51 46 42 53 80 109 124 128 126 127 131 128 126 128 135 141 139 136 132 129 127 127 127 127 128 125 119 112 104 89 77 69 62 57 50 50 51 51 51 52 53 53 54 55 57 58 58 57 57 57 58 57 57 56 53 52 52 52 51 51 49 49 48 46 45 45 48 50 48 48 48 48 47 47 49 49 48 48 49 49 49 49 49 49 49 49 49 50 51 51 57 57 59 60 62 64 64 65 66 65 66 65 65 64 62 62 61 61 60 59 59 60 61 63 66 70 77 84 88 87 81 75 68 62 60 64 72 84 96 101 105 107 117 125 133 137 138 136 137 134 134 133 133 134 135 137 137 137 136 136 135 136 136 137 138 138 136 133 130 125 122 120 127 122 120 120 117 118 123 123 128 132 135 137 136 138 138 140 144 147 148 143 137 132 131 131 135 136 139 143 143 139 136 127 114 108 104 102 103 100 96 92 81 76 66 57 50 46 44 45 53 56 56 55 52 51 50 48 44 43 42 40 39 39 37 40 46 49 48 46 56 80 105 118 123 121 124 127 125 121 122 127 130 128 125 125 125 126 126 125 124 125 122 117 110 101 87 78 69 63 57 52 52 52 53 53 53 55 55 56 56 59 60 60 60 60 60 60 60 59 59 56 55 54 54 53 54 54 51 50 49 48 49 50 52 52 52 50 50 50 50 51 51 51 51 50 50 51 51 51 51 51 51 53 53 54 54 59 60 61 63 65 66 69 67 68 68 69 68 67 66 64 64 62 62 61 61 61 61 62 62 66 70 78 85 90 89 83 76 68 60 57 60 68 78 90 94 102 106 115 122 130 134 135 134 130 129 129 129 131 131 133 132 132 132 133 134 136 137 139 140 138 137 135 131 127 122 119 120 127 122 129 131 117 113 124 125 127 129 131 132 133 135 138 137 130 129 134 135 136 137 141 141 138 136 136 137 135 132 129 127 125 125 123 120 120 117 112 108 99 92 83 73 66 61 57 55 57 57 54 52 49 46 44 44 41 41 41 41 42 42 43 45 44 50 53 56 66 85 102 110 116 113 117 120 119 115 116 119 122 120 119 120 121 123 123 124 121 122 119 115 109 100 87 78 68 62 56 53 53 54 54 55 55 56 56 57 58 61 62 62 62 62 62 63 63 62 61 59 58 57 57 56 56 57 56 55 52 53 52 54 54 54 54 52 52 52 52 52 52 52 53 51 51 52 52 52 52 53 53 56 56 57 58 61 62 64 65 67 68 71 72 70 70 70 70 69 67 66 65 64 64 63 62 62 63 64 64 65 68 75 81 86 85 82 75 68 63 61 63 67 73 83 88 93 100 108 118 125 130 131 130 126 125 125 125 128 131 134 133 131 131 132 132 136 136 137 138 135 134 131 128 126 124 121 126 133 138 160 166 138 124 130 128 123 122 124 125 127 130 137 134 119 117 130 141 150 159 166 167 157 150 146 143 139 134 130 131 134 136 134 131 129 126 122 118 109 104 96 87 80 72 66 64 61 60 56 53 50 47 44 43 43 44 45 47 51 52 54 54 51 60 69 73 81 93 103 106 110 107 108 112 113 111 111 114 117 114 113 116 120 122 121 121 118 119 117 111 106 99 85 78 67 64 58 54 55 55 55 56 56 57 58 58 59 62 63 63 63 64 64 66 66 65 64 61 61 60 60 60 60 60 60 59 57 57 56 56 57 56 56 56 56 54 54 54 54 53 53 54 54 55 55 53 53 56 57 58 60 61 64 64 65 67 68 71 72 73 73 74 74 74 73 70 68 66 65 65 64 64 63 63 64 64 65 64 65 67 70 72 74 74 72 69 69 69 70 73 73 76 82 90 100 110 122 131 137 139 139 139 135 130 127 127 130 136 138 133 132 132 134 134 133 132 131 128 127 126 127 127 128 129 135 144 160 203 216 171 138 136 127 117 114 113 114 118 124 132 128 113 116 138 156 173 186 194 195 191 183 173 163 154 145 139 137 140 142 139 135 132 128 122 119 112 107 103 94 88 80 72 67 65 64 59 56 52 50 46 46 48 51 54 58 62 65 69 67 70 76 86 91 96 103 105 106 108 103 102 108 111 110 110 114 115 111 111 114 119 121 120 117 115 117 115 110 105 98 84 77 72 69 63 55 55 56 56 56 57 58 58 59 60 63 64 64 64 65 65 67 67 67 66 63 62 62 61 62 62 62 62 61 60 58 59 58 58 57 57 57 57 57 55 54 54 54 54 54 55 55 55 53 54 57 59 60 63 66 66 65 66 67 69 72 73 74 74 75 75 74 74 70 69 67 66 66 66 65 64 64 65 66 66 63 64 66 69 71 73 77 78 77 78 81 81 81 82 80 86 103 114 126 137 149 155 159 159 160 153 142 133 132 133 140 143 139 138 137 136 136 132 128 125 122 122 122 125 129 134 139 146 150 176 234 252 195 149 137 120 112 106 104 106 111 118 128 130 124 134 160 183 203 214 218 218 230 219 207 195 184 174 165 162 159 159 156 152 148 141 137 133 127 124 119 112 105 98 87 83 79 77 73 68 64 59 55 54 57 58 61 65 70 72 75 72 84 89 100 103 105 110 109 108 107 103 103 109 112 113 114 117 116 111 111 114 119 121 119 116 115 117 115 111 105 97 84 77 78 76 69 57 57 57 57 57 58 61 61 61 61 64 64 65 66 68 68 69 69 69 68 68 67 69 68 66 66 66 66 66 66 65 65 65 65 65 64 64 62 62 62 60 60 59 58 56 56 55 55 57 57 57 58 60 61 65 66 67 68 70 74 75 76 78 78 78 78 76 75 73 72 69 69 66 65 64 63 63 63 64 64 60 77 77 75 84 82 81 95 91 94 95 92 94 101 109 114 137 143 151 159 159 155 154 158 166 164 168 171 165 153 151 156 148 146 143 137 136 135 127 117 117 115 116 121 133 142 149 155 198 229 194 202 224 171 134 132 109 105 105 107 107 111 125 141 145 177 208 218 222 229 241 243 243 233 227 226 224 218 216 215 196 192 189 185 181 175 171 167 157 157 154 150 145 135 127 123 117 103 100 97 79 71 76 77 72 69 68 70 70 71 75 81 89 96 102 103 107 117 117 111 108 108 112 114 115 117 119 118 114 115 115 113 115 119 122 121 120 115 109 107 105 97 84 79 79 84 82 57 57 57 57 58 59 62 63 62 62 65 65 66 67 68 68 70 69 69 69 68 68 69 69 69 69 69 68 67 67 68 67 66 66 66 66 65 65 64 64 62 60 59 59 57 56 55 55 57 57 57 58 60 62 65 66 67 69 73 74 76 76 78 78 78 78 77 74 73 72 69 69 67 66 64 64 64 64 65 65 67 73 75 86 106 116 123 133 129 131 132 132 141 152 161 162 147 148 154 159 160 156 156 159 163 155 153 160 164 167 174 182 181 176 167 155 147 142 133 121 114 124 135 133 133 149 181 211 219 221 199 190 208 179 132 130 121 101 96 107 117 119 127 150 185 210 224 231 238 249 255 255 255 243 236 234 230 224 222 221 219 216 214 213 208 206 204 201 204 203 203 202 202 201 199 197 195 177 163 153 141 132 107 72 84 77 72 74 75 75 79 85 91 99 103 105 110 122 122 116 114 112 112 113 117 119 119 119 115 120 122 121 126 131 133 131 129 122 114 109 104 96 84 78 82 86 86 56 56 56 57 59 60 63 64 64 64 67 67 67 67 68 68 70 70 70 69 69 69 71 70 74 73 72 71 70 69 70 69 68 68 68 68 68 68 68 67 63 63 60 59 58 58 57 57 57 57 58 59 62 64 66 67 69 70 73 75 77 77 78 77 80 77 76 75 73 72 69 68 67 67 65 65 63 64 64 68 83 82 105 142 173 193 203 196 154 150 149 155 171 190 203 196 163 157 160 165 165 163 164 167 171 161 152 157 165 172 178 184 167 177 185 190 186 173 150 130 123 118 122 133 156 186 215 232 225 206 205 187 198 198 148 140 125 106 104 117 128 130 143 177 224 239 238 239 248 255 255 254 255 245 240 239 237 233 236 239 241 239 239 237 236 234 233 232 228 229 228 228 233 238 242 244 252 237 225 210 203 199 166 114 93 88 87 81 66 58 63 76 86 97 101 104 113 127 126 119 120 117 114 114 118 121 122 122 128 132 138 141 146 151 152 150 145 135 122 112 103 94 84 80 82 88 89 55 55 56 57 59 61 64 65 66 66 68 68 68 68 69 69 71 71 71 70 70 70 72 72 76 75 74 73 72 71 70 69 68 68 69 69 68 69 69 69 64 63 61 60 59 58 58 58 57 57 59 59 63 64 67 68 70 70 74 75 77 77 77 77 79 79 76 75 74 71 69 68 68 68 66 64 64 65 66 70 81 88 135 189 216 228 226 201 157 148 144 152 173 196 212 203 177 167 169 172 175 176 179 180 178 169 163 164 169 171 174 173 182 186 187 186 190 197 196 190 153 139 135 157 195 219 224 218 221 204 209 198 197 200 167 144 119 120 126 130 133 145 172 213 234 246 242 242 249 253 249 243 253 248 244 246 248 249 255 255 255 252 252 249 247 248 246 245 247 245 244 245 247 252 255 255 255 253 250 239 228 226 213 180 124 104 88 80 71 63 59 65 81 95 103 111 124 136 135 125 122 124 124 122 122 125 131 136 149 156 163 166 172 177 176 171 161 148 131 115 104 93 83 80 80 86 87 54 54 55 56 58 60 63 64 66 66 68 68 68 69 70 70 70 70 71 72 72 72 74 74 76 75 75 74 74 73 72 71 69 69 69 69 69 69 68 68 64 64 64 63 60 59 59 58 59 59 59 60 63 65 67 68 71 71 75 77 77 78 79 79 79 78 78 74 73 71 68 68 68 68 66 64 65 65 66 75 91 116 172 218 229 226 213 182 167 156 145 149 171 193 211 204 177 168 170 173 178 184 188 187 172 170 168 166 170 176 183 187 200 204 206 205 211 220 223 218 193 195 203 209 215 218 223 224 217 215 205 206 190 178 181 150 123 130 136 133 147 176 206 232 231 237 230 227 227 227 228 229 240 239 239 242 245 248 254 255 255 253 252 250 251 252 253 252 253 251 250 250 250 249 249 250 255 255 255 253 238 230 226 216 186 140 96 81 86 86 74 65 82 101 117 128 142 153 149 136 130 137 143 140 135 138 151 164 178 184 191 192 194 197 195 190 176 162 141 121 105 92 84 82 80 84 86 53 53 54 55 56 58 61 62 64 64 67 68 69 69 71 71 71 71 72 73 73 73 75 76 76 75 76 75 76 75 74 73 71 71 70 70 69 69 68 67 65 65 64 64 61 60 59 59 59 59 59 60 63 65 68 69 72 74 76 77 78 78 79 79 79 78 77 76 73 71 70 67 67 66 66 64 64 65 66 78 106 149 195 218 220 219 209 188 172 159 150 148 161 179 193 189 167 162 165 167 175 184 186 183 174 173 167 164 170 182 195 202 188 203 221 232 239 239 231 218 216 222 229 224 216 214 224 231 216 221 202 205 189 174 200 184 142 135 132 139 170 209 226 229 240 239 226 216 209 209 219 233 235 238 239 245 246 246 249 253 251 248 248 249 254 255 255 255 251 251 250 247 247 244 241 241 255 251 251 255 251 243 236 224 231 194 150 116 93 82 82 87 94 114 136 149 159 166 161 150 149 158 166 166 162 166 181 194 204 209 213 213 212 213 209 203 191 176 152 128 109 96 87 86 83 86 87 53 53 53 53 54 56 58 59 61 62 65 67 68 70 72 72 71 72 73 73 74 74 77 77 77 76 77 77 78 77 78 77 74 74 73 72 71 70 68 68 67 67 65 64 63 63 60 60 60 60 60 60 64 65 68 69 72 75 77 78 80 80 79 79 79 79 77 76 73 70 69 67 66 65 65 63 63 64 64 78 111 165 190 186 188 193 191 183 167 162 155 150 152 158 164 162 158 160 162 165 173 183 184 178 177 173 168 166 175 188 195 196 193 203 213 221 232 245 253 252 233 227 220 217 220 223 229 228 215 212 207 206 196 187 199 210 166 143 139 164 203 224 232 233 246 238 225 213 202 200 211 229 240 245 251 255 254 249 249 250 247 246 246 249 251 254 255 255 255 255 255 255 251 249 247 244 251 245 249 252 250 255 255 242 240 229 211 175 132 104 105 115 121 140 163 173 178 182 178 170 176 182 189 192 195 201 213 221 226 231 233 230 229 228 224 217 202 186 162 136 116 101 92 91 92 92 94 53 53 53 53 53 54 56 57 60 61 64 66 68 70 71 72 72 72 72 74 74 75 75 78 77 77 77 77 77 77 78 78 77 77 75 74 72 71 69 68 67 67 65 65 64 63 60 60 62 62 60 61 62 65 67 68 72 73 76 77 78 80 79 79 76 76 75 76 74 73 70 67 65 62 61 60 63 64 66 83 134 193 200 174 170 177 171 171 170 171 169 163 160 161 161 158 160 163 166 166 173 182 183 176 171 168 169 172 187 198 197 188 188 201 218 227 238 246 249 247 246 241 236 232 227 226 225 222 222 207 219 205 199 194 179 209 191 165 170 205 232 231 235 246 237 227 215 207 195 185 187 199 229 234 242 249 252 250 250 251 252 251 250 249 251 253 255 255 255 255 255 251 247 245 245 243 244 252 255 243 231 249 255 255 246 238 231 220 199 170 143 126 153 171 190 197 198 200 199 195 203 204 209 215 221 230 232 237 239 242 244 240 238 237 234 228 209 193 171 145 122 108 98 96 100 100 100 50 51 52 54 56 57 57 57 59 60 61 63 65 67 69 69 72 72 72 74 75 76 77 78 77 74 71 74 78 78 71 68 78 76 74 75 77 76 70 66 69 67 64 63 64 63 60 60 67 66 65 62 63 62 63 64 66 68 71 74 76 79 79 76 70 69 72 74 75 77 75 72 67 55 55 62 62 58 67 101 189 183 166 164 167 164 163 168 162 165 169 171 172 172 174 170 164 161 162 166 170 172 172 172 169 171 173 179 189 196 192 184 199 203 207 213 219 225 231 237 240 242 242 239 234 227 221 218 219 212 207 206 197 190 194 207 200 207 225 238 240 237 243 248 235 225 214 201 187 179 177 180 202 212 222 226 235 248 254 249 253 250 253 255 253 250 254 255 255 255 249 245 244 248 253 255 255 255 249 239 229 229 247 255 255 240 245 232 198 194 140 145 171 189 212 222 221 220 222 226 231 235 241 244 245 245 243 244 248 248 248 245 242 237 232 229 214 205 187 163 139 121 114 112 123 119 118 48 49 51 53 54 55 56 56 58 59 61 63 65 67 68 69 72 72 72 74 75 76 77 78 75 75 75 80 87 89 86 82 79 77 72 70 71 72 70 66 68 65 63 63 64 64 61 59 61 61 61 60 61 62 61 62 66 68 71 74 77 79 80 76 65 63 69 72 74 74 70 67 65 60 61 69 74 80 100 133 176 171 160 161 163 158 158 163 161 167 174 179 182 183 184 181 170 165 164 165 168 171 171 171 174 171 177 191 198 193 188 192 203 207 208 209 212 216 224 231 238 244 244 241 234 225 215 213 222 217 213 212 204 193 196 207 209 218 233 243 244 240 245 248 229 218 210 197 183 174 170 171 182 198 212 220 227 239 250 254 248 247 250 255 253 249 252 255 255 255 252 249 249 252 254 255 255 255 244 242 243 246 247 247 250 248 238 220 203 182 115 150 180 206 229 239 235 233 236 237 246 251 255 255 255 255 254 252 253 252 251 249 247 243 240 238 230 220 202 179 158 142 137 136 142 137 134 47 48 49 50 52 53 55 55 58 58 60 62 64 66 67 68 73 73 74 76 77 78 78 79 75 78 84 95 105 109 108 107 96 89 79 72 72 71 69 64 67 63 60 60 61 62 62 61 56 57 59 60 61 62 63 64 69 71 73 76 79 80 80 76 60 58 62 65 66 67 63 60 63 68 75 82 92 111 139 164 165 162 159 164 165 158 158 162 164 170 177 182 185 187 190 190 178 172 169 169 171 173 173 173 178 176 185 203 203 188 186 201 208 212 212 214 216 220 227 232 240 244 244 240 231 221 212 210 221 220 218 218 211 200 197 203 201 205 217 229 234 233 236 235 222 213 205 194 182 174 171 172 172 192 212 221 224 232 247 255 244 244 249 253 254 250 251 254 255 255 255 255 255 255 255 255 255 255 254 250 252 255 250 236 248 254 218 203 218 187 103 151 178 215 245 253 250 250 249 244 251 255 255 255 255 255 255 255 255 255 255 255 254 252 250 248 240 229 211 190 173 162 157 157 163 157 153 47 47 48 49 50 51 53 54 56 57 59 61 63 65 66 67 72 74 75 77 80 79 81 79 76 81 94 109 122 129 128 128 123 114 101 89 84 77 71 66 68 64 60 59 59 60 61 59 58 57 59 62 63 64 63 65 70 72 75 77 79 79 80 76 66 63 64 65 65 64 62 60 61 70 80 88 107 135 161 174 167 165 165 170 168 160 161 164 165 171 179 185 189 193 197 196 189 182 178 174 175 176 178 179 182 185 196 203 200 190 192 205 214 216 218 219 222 225 230 236 243 244 244 239 228 219 210 208 215 218 218 220 214 208 205 210 196 197 202 216 226 229 222 214 211 206 199 190 181 176 175 177 172 189 209 217 221 229 243 253 240 240 246 254 254 252 250 252 255 255 255 255 255 255 255 255 255 255 255 252 246 252 252 243 239 236 206 220 251 211 104 113 166 210 247 255 255 255 255 249 250 252 255 255 255 255 254 255 255 255 255 255 255 254 254 253 246 236 218 201 186 179 177 176 183 175 169 49 49 48 48 49 50 52 53 55 56 57 59 61 63 65 68 73 76 78 80 82 82 83 81 79 86 102 119 134 141 143 143 142 135 123 112 105 95 85 78 75 69 63 59 57 57 56 56 54 55 56 59 62 63 66 67 71 74 75 76 77 77 76 76 77 76 73 67 63 60 56 55 57 64 72 90 119 149 167 169 170 170 171 172 169 165 166 171 167 173 181 188 193 197 202 202 197 190 186 183 183 184 186 186 187 199 205 197 193 198 203 207 219 223 225 226 227 231 236 240 245 246 242 236 226 217 208 207 214 217 216 216 215 212 214 216 214 205 201 203 214 217 210 197 197 194 192 186 183 180 182 185 181 191 201 210 219 227 237 246 236 237 242 251 255 253 250 251 251 251 255 255 255 255 255 255 255 255 255 251 245 253 254 243 231 224 226 255 255 239 140 108 166 206 243 255 255 255 255 251 252 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 253 243 228 214 205 201 202 202 201 190 182 54 52 51 49 49 50 51 52 54 55 56 58 60 62 64 66 74 77 79 82 84 84 83 82 81 90 108 127 140 150 153 154 153 148 140 134 129 120 110 102 93 86 77 68 62 59 59 55 53 52 54 56 60 63 67 70 71 72 73 73 73 72 72 72 76 76 71 64 58 53 49 47 55 55 67 93 126 149 157 158 167 170 170 170 169 169 172 176 171 178 185 191 195 200 205 207 203 198 194 193 193 194 194 195 197 209 208 195 195 208 214 211 224 228 231 232 234 237 240 243 246 245 241 236 225 218 209 208 216 217 214 213 213 212 212 214 236 225 211 204 202 204 200 192 188 188 188 185 183 184 188 191 193 193 197 207 215 221 228 235 232 234 240 249 254 252 252 252 248 249 253 255 255 255 255 255 254 255 252 250 255 255 252 233 243 231 240 255 254 236 194 165 179 206 240 255 255 255 255 251 253 252 253 255 255 255 253 255 255 255 255 255 255 255 254 252 249 242 231 223 219 221 224 223 221 207 197 60 59 56 53 52 52 53 54 55 56 57 59 61 63 65 67 74 77 80 83 87 85 85 83 83 93 110 130 145 154 159 162 161 158 153 149 148 144 137 130 122 114 102 88 80 73 70 67 63 61 59 59 60 63 67 69 70 70 69 69 67 66 65 65 69 71 71 71 70 67 63 62 67 65 75 102 128 138 140 146 164 169 171 172 173 175 176 177 177 182 189 195 200 204 210 212 207 205 203 203 204 205 204 203 211 213 210 204 206 216 218 215 228 233 236 238 240 242 244 246 247 244 240 233 226 217 210 207 212 213 211 209 210 211 210 208 227 232 231 218 204 196 191 185 185 185 185 185 184 186 192 195 201 198 201 209 213 214 216 223 230 232 237 245 252 251 251 251 246 247 249 253 255 255 255 255 246 242 244 250 255 255 247 236 246 239 227 239 218 223 222 210 191 199 230 255 255 255 255 254 251 249 248 250 250 249 250 252 255 255 255 255 255 254 252 249 240 233 228 226 230 235 241 241 236 220 208 64 61 58 55 53 53 53 54 55 55 57 59 61 63 64 66 74 77 82 86 87 88 87 84 83 94 112 130 145 156 163 167 170 166 161 160 159 157 153 149 146 137 121 106 96 88 82 79 78 75 70 64 63 63 64 65 67 67 66 66 63 62 60 59 65 71 80 89 95 99 99 101 102 95 106 130 146 143 142 150 167 174 174 175 176 180 178 176 181 188 194 200 205 209 213 216 210 208 208 209 212 212 211 211 222 213 209 214 222 222 218 220 231 235 239 241 244 247 247 247 247 244 238 233 225 218 212 207 206 207 206 207 208 210 209 206 203 227 243 235 213 196 186 181 184 184 185 185 186 189 192 196 202 202 206 213 211 206 205 214 227 230 232 242 248 249 247 250 244 245 248 251 255 255 255 255 239 239 249 253 249 242 245 253 251 255 235 243 238 246 237 223 190 188 216 249 255 255 254 255 252 251 248 249 249 250 252 253 253 255 255 255 255 251 247 243 235 232 228 232 240 249 255 254 244 227 214 66 65 64 62 60 58 56 55 54 54 55 56 59 62 65 69 73 77 82 85 87 88 90 91 84 88 103 124 141 151 158 165 170 171 172 172 170 170 168 169 159 153 141 129 116 104 93 88 88 89 86 77 67 63 63 66 62 64 66 63 60 58 62 65 70 85 101 108 119 131 132 128 137 144 157 164 162 154 151 158 167 172 174 177 179 180 182 185 186 190 196 203 209 214 218 218 215 216 217 216 216 216 218 221 230 224 218 227 254 255 255 231 229 237 241 244 244 245 248 248 247 243 237 227 218 212 212 211 204 202 205 207 210 210 210 209 218 207 220 244 229 203 197 183 183 182 185 186 189 191 196 198 199 204 217 223 212 195 192 207 222 226 230 239 241 239 237 241 249 248 247 247 252 255 255 253 245 239 243 251 255 255 254 252 255 247 253 252 234 235 251 233 198 173 203 232 249 255 254 252 246 247 247 246 248 253 253 251 255 255 255 253 255 255 246 231 228 223 225 241 252 253 255 255 249 231 218 67 66 65 63 61 59 58 57 55 55 55 56 58 61 64 68 72 76 81 84 86 87 89 90 85 87 101 121 138 148 155 163 171 172 174 175 176 175 175 175 169 162 152 140 128 117 105 99 96 96 93 86 77 70 66 65 60 65 70 67 65 68 79 88 102 116 130 138 149 160 165 164 172 180 185 181 173 168 168 169 167 168 171 174 176 178 181 184 187 194 202 211 217 222 223 223 225 223 223 225 229 232 231 230 229 230 228 220 213 216 235 255 241 238 234 238 248 255 254 246 250 245 239 231 222 214 212 207 203 200 202 205 207 208 209 208 211 207 212 229 229 219 205 183 188 187 189 190 190 192 194 196 200 203 213 220 210 195 191 204 219 223 229 235 237 235 233 236 247 248 249 250 252 255 255 254 241 245 255 255 255 253 250 249 249 242 249 249 236 241 247 217 182 153 185 218 239 254 251 253 248 247 247 245 248 253 254 252 253 254 252 252 255 255 245 234 229 222 223 239 252 255 255 255 248 232 221 69 69 67 65 63 61 60 59 56 56 55 56 58 61 63 67 71 74 78 82 84 87 89 89 87 88 98 115 133 144 152 160 170 173 175 177 179 180 181 181 175 172 163 153 142 131 120 115 107 105 99 93 86 78 69 64 56 65 75 76 81 90 112 130 152 165 175 178 184 192 194 192 193 207 207 195 183 180 178 173 175 176 178 180 183 187 192 196 196 203 211 217 223 225 224 223 220 217 216 222 230 236 233 228 227 219 216 219 212 204 214 233 245 242 239 240 246 250 252 248 240 236 232 227 220 216 213 209 205 203 205 208 210 211 212 212 209 214 213 213 229 237 217 194 192 191 192 191 193 192 192 192 198 199 207 216 210 198 192 199 214 216 221 228 229 226 226 229 242 246 253 254 252 250 251 255 248 255 255 255 255 252 254 255 250 247 248 242 231 234 229 197 160 126 155 195 223 241 244 255 249 249 247 245 248 253 255 252 252 252 250 251 255 255 249 239 230 220 221 238 253 255 255 255 248 233 224 73 72 70 68 66 64 63 62 58 57 57 57 58 60 62 64 69 73 76 79 82 85 87 87 88 88 94 112 128 140 149 157 168 169 173 176 177 178 180 180 175 171 165 159 151 140 130 125 117 112 102 95 89 81 71 65 61 72 84 96 110 128 150 170 189 201 203 201 198 199 198 196 197 216 223 208 195 194 186 175 173 173 174 179 182 188 195 200 211 215 218 220 222 222 221 219 211 210 211 216 225 227 225 220 220 208 205 217 226 220 208 203 233 243 253 252 244 241 245 251 241 235 228 222 218 215 214 211 211 210 214 216 218 219 220 220 210 230 229 206 223 243 223 213 200 196 195 195 194 194 193 190 194 194 200 207 206 198 191 193 206 209 213 219 221 217 218 220 235 243 252 255 250 245 245 253 255 255 255 255 250 252 255 255 255 250 244 236 224 212 200 177 141 104 130 172 206 229 239 255 251 249 248 245 248 255 255 254 251 250 249 253 255 255 253 247 235 223 222 237 254 255 255 255 247 234 228 78 77 76 74 72 70 68 67 63 62 61 61 61 62 64 63 67 69 75 78 81 82 86 86 90 86 91 108 126 138 146 154 166 169 173 175 176 176 176 175 171 168 164 160 154 147 138 134 131 123 109 100 95 89 82 78 87 95 109 129 152 172 188 202 214 223 222 215 208 203 198 194 211 225 228 215 205 203 194 182 183 184 186 189 195 202 208 213 217 218 219 217 217 217 218 215 212 215 218 221 223 222 221 220 214 217 215 207 205 210 213 212 216 230 248 253 249 245 246 247 247 237 226 218 215 215 217 217 227 228 226 226 224 223 220 218 209 239 248 211 209 230 220 230 207 202 198 197 196 196 195 192 190 190 195 199 199 194 190 188 201 202 206 213 215 213 211 215 233 240 252 255 252 242 243 252 255 255 254 244 243 250 253 249 253 245 239 236 221 192 168 156 127 89 110 150 190 223 238 254 254 252 249 246 249 255 255 254 253 250 250 254 255 255 255 255 242 229 225 240 255 255 255 255 246 237 232 81 80 79 77 75 73 71 71 66 65 64 63 63 63 65 64 66 69 75 77 80 82 85 85 89 85 90 105 124 137 147 154 166 169 172 173 174 174 173 173 169 167 164 162 159 154 149 146 146 137 124 115 111 109 105 106 121 130 142 163 187 205 214 218 224 228 224 217 210 204 199 198 227 229 224 211 206 206 200 190 195 195 197 201 206 209 215 218 214 213 214 213 214 216 219 218 219 221 224 223 221 220 220 219 210 221 218 205 198 206 210 205 204 212 226 243 255 255 254 243 234 225 216 212 215 222 228 233 239 240 238 232 227 220 215 209 205 231 255 219 200 215 211 234 217 210 203 198 198 198 195 193 187 187 190 192 191 189 188 187 195 196 200 208 211 208 210 213 233 238 251 255 255 245 245 254 255 255 245 238 241 247 240 227 243 245 241 241 238 206 169 151 117 82 97 132 177 221 239 253 254 252 250 248 252 255 255 255 255 248 250 255 255 255 255 255 250 238 234 245 255 255 255 255 249 242 238 83 82 81 79 77 75 74 73 69 68 66 65 64 65 65 64 65 67 73 77 79 82 85 85 87 82 88 106 125 137 146 152 164 166 171 171 172 173 172 172 168 166 164 163 161 160 157 155 153 146 139 134 131 132 131 136 143 154 169 187 207 224 232 232 228 222 216 210 202 194 191 195 226 223 217 216 218 216 210 200 192 190 191 192 194 195 198 198 206 208 209 212 214 217 221 220 222 219 220 219 219 218 216 215 213 211 208 207 210 209 202 192 200 202 213 231 250 255 255 247 234 225 217 215 220 227 233 240 246 248 244 237 228 222 213 207 201 209 250 228 200 208 203 228 228 220 209 201 198 197 194 191 186 188 189 188 186 186 189 190 188 188 192 200 204 202 204 208 232 236 248 255 255 247 247 253 249 244 233 227 234 242 234 222 246 255 247 238 249 239 196 163 106 73 88 117 165 220 242 249 255 255 252 249 252 255 255 255 254 247 247 253 255 255 255 255 255 246 242 251 255 254 254 255 253 248 246 86 84 83 80 79 76 76 74 72 70 69 66 66 65 67 65 67 68 74 77 79 81 84 85 85 81 87 106 126 140 147 153 159 164 166 169 169 169 169 169 165 163 163 162 164 165 165 163 152 150 148 148 149 152 158 168 164 178 193 206 218 228 235 235 231 223 216 209 199 191 189 193 225 221 221 230 236 230 219 207 205 200 201 199 198 195 194 194 198 203 206 211 216 217 219 219 228 222 218 218 223 223 219 213 216 206 202 208 206 199 202 212 200 206 215 222 230 238 246 251 255 250 242 236 234 231 229 230 244 248 244 239 232 224 217 211 198 192 244 235 207 212 203 223 234 224 211 201 198 198 195 190 190 193 192 187 183 184 189 190 181 179 184 193 197 197 200 203 229 230 241 254 254 243 240 246 248 241 229 223 233 249 247 239 253 255 245 223 246 255 211 164 96 69 82 107 156 220 244 246 255 255 253 251 252 255 255 254 250 242 242 249 253 250 254 255 255 252 248 254 255 253 253 255 255 252 251 88 87 87 85 84 82 82 80 77 75 75 72 72 71 72 70 71 71 74 78 82 85 85 86 88 85 90 107 123 137 145 152 166 167 165 164 162 163 164 164 161 161 161 164 167 172 174 171 161 156 149 152 166 180 180 179 186 205 219 227 228 227 223 223 226 221 219 200 202 202 186 219 230 233 235 232 230 225 219 212 207 200 202 209 205 191 184 189 191 195 200 203 209 212 219 224 231 224 219 222 230 231 225 215 209 206 203 201 201 203 206 207 202 207 209 210 210 213 215 220 224 230 235 235 233 231 232 237 246 246 239 236 234 227 217 208 195 196 231 233 203 223 197 218 225 220 212 204 200 198 199 200 197 194 190 188 187 186 186 183 180 181 185 187 187 190 192 196 239 245 234 244 251 236 244 255 255 251 234 226 229 237 243 245 255 255 241 241 214 248 189 133 97 74 77 115 165 205 237 255 255 255 252 251 253 254 255 251 239 229 231 240 248 252 253 255 255 255 255 255 254 252 252 251 253 255 255 89 88 88 86 85 84 83 82 78 77 76 75 74 74 74 73 71 72 76 79 82 83 86 84 88 85 89 107 123 134 141 150 161 163 161 161 160 160 162 161 160 160 158 161 164 166 166 163 163 160 160 165 177 188 189 191 204 220 230 233 230 225 219 218 224 218 218 203 204 202 193 229 230 232 234 231 226 219 213 207 212 198 197 204 204 193 184 183 185 191 198 203 209 216 225 228 229 226 225 225 228 226 221 213 211 205 201 200 204 206 207 208 213 214 211 207 201 199 203 207 216 222 227 230 230 230 230 232 236 237 236 232 224 219 213 210 213 187 214 208 217 235 218 216 231 226 220 212 205 201 200 199 200 196 191 189 189 186 185 182 178 180 183 184 186 189 193 197 235 242 231 240 245 232 241 254 255 255 242 228 228 239 253 255 253 255 235 237 215 242 178 118 94 78 83 117 169 214 246 255 255 255 253 251 250 251 250 246 237 227 227 235 244 249 252 255 255 255 255 254 249 248 250 250 249 251 254 92 91 91 89 88 87 86 86 83 82 81 79 79 79 79 77 74 74 77 80 83 86 86 84 87 86 90 107 121 133 139 146 153 155 155 155 157 158 160 160 160 157 155 156 156 157 156 155 153 158 168 178 191 198 197 194 209 218 223 225 225 225 223 223 224 215 213 207 202 195 196 233 224 228 232 227 220 214 209 204 213 196 190 197 205 198 187 183 186 191 199 207 215 222 230 233 217 218 221 223 223 222 220 217 198 192 187 186 191 191 191 193 227 229 222 213 204 200 200 204 210 213 215 217 219 220 219 220 219 223 224 220 213 208 208 209 212 194 231 210 218 222 232 240 237 231 227 221 214 207 202 197 196 192 188 185 185 183 181 178 176 177 180 181 183 185 190 195 220 234 228 240 246 231 236 245 228 240 240 235 235 242 254 255 253 252 231 232 217 237 170 108 89 79 87 119 173 225 255 255 255 255 252 250 251 251 249 244 233 222 220 225 233 239 245 252 253 255 255 249 241 239 243 247 251 252 255 92 92 91 90 89 89 88 88 85 84 83 82 82 82 82 80 76 75 79 82 84 87 87 87 86 85 92 106 121 130 138 143 148 149 149 150 152 152 155 155 156 152 150 149 147 147 146 145 136 148 168 184 199 207 210 208 217 218 218 220 222 225 229 229 227 214 209 209 198 186 197 234 221 227 230 227 219 211 208 206 207 194 187 192 199 196 189 184 189 194 203 210 217 224 232 235 217 218 222 224 225 225 220 217 202 199 195 192 192 195 198 208 236 237 228 217 207 199 200 201 207 208 207 209 212 214 212 209 211 211 211 208 205 202 204 204 204 207 244 224 210 210 230 251 255 255 255 246 231 213 199 189 196 192 187 184 183 181 178 176 175 173 176 176 177 182 188 192 203 223 226 244 248 230 228 232 218 234 239 236 240 249 255 255 254 248 229 229 218 230 168 106 85 83 92 121 176 231 255 255 255 252 251 250 249 246 242 234 219 208 205 209 217 223 233 242 244 249 251 244 234 231 235 240 251 251 254 92 92 91 91 90 89 89 89 87 86 85 85 84 85 85 83 79 79 81 83 85 88 89 88 85 85 92 104 117 124 133 140 141 142 142 144 146 147 148 147 149 146 142 137 133 129 126 129 128 145 170 193 214 225 229 230 226 220 216 216 220 227 236 237 230 215 208 208 191 179 200 224 220 225 227 225 218 212 209 207 199 192 189 189 191 191 189 189 194 199 207 213 219 224 231 235 231 230 229 232 233 231 222 214 205 205 201 197 194 196 206 222 235 237 228 216 204 198 196 197 203 203 204 206 212 212 211 208 208 202 197 196 198 199 199 199 205 205 216 225 212 228 224 223 215 214 222 229 234 234 232 228 203 196 190 184 183 180 176 174 172 172 172 172 173 177 183 186 198 222 226 240 244 229 229 232 251 254 241 229 234 252 255 255 254 245 232 228 221 226 172 115 93 94 104 129 179 232 255 255 254 251 249 247 244 237 227 218 201 191 187 192 200 207 217 227 235 243 247 242 234 231 233 238 241 240 242 91 91 91 90 90 89 89 89 88 88 87 86 86 87 87 88 81 81 83 85 88 88 89 88 87 85 89 101 110 117 126 131 133 132 135 137 139 140 141 141 144 139 131 126 120 114 108 111 131 148 175 203 227 239 243 244 235 225 217 215 222 229 240 240 228 215 204 206 186 176 201 213 216 218 219 218 216 212 205 203 192 193 192 190 188 187 189 192 196 202 210 215 220 225 228 232 234 234 234 240 246 247 240 230 219 216 215 210 209 211 220 235 237 238 230 220 209 202 200 201 198 201 206 211 218 221 221 216 211 201 194 192 195 198 197 197 204 205 205 230 219 239 227 218 213 210 213 214 210 204 198 192 206 198 188 181 177 175 171 170 171 171 172 172 171 173 178 181 201 224 224 234 238 230 240 246 255 255 241 231 240 255 255 255 253 244 237 229 222 220 180 133 113 111 121 141 182 223 249 252 255 250 244 238 230 220 208 197 178 172 172 178 185 190 201 210 224 232 240 241 236 233 232 234 232 230 229 91 91 91 91 90 90 90 90 89 89 88 88 88 89 89 89 83 84 85 88 89 90 90 89 89 85 88 95 100 106 115 121 122 122 127 130 133 135 136 136 136 131 125 121 115 110 105 111 132 151 179 210 236 246 251 252 240 231 222 219 224 231 240 239 221 212 200 201 180 177 206 201 206 208 207 208 211 207 200 195 190 195 194 191 189 190 191 193 196 203 211 217 221 225 228 234 235 241 248 253 255 255 255 253 250 246 243 243 246 247 252 254 246 244 237 227 217 208 206 206 203 209 217 223 226 228 229 223 217 207 201 196 194 194 198 200 201 211 225 235 222 224 235 232 216 213 215 215 213 210 205 201 214 204 191 180 176 172 171 169 172 173 174 173 171 171 173 177 192 218 222 232 240 234 245 253 241 248 245 237 248 255 255 255 252 242 241 231 222 217 189 152 129 123 130 145 172 203 224 233 236 227 215 205 196 187 180 172 156 152 156 163 170 175 184 194 206 216 228 235 236 233 229 226 223 218 213 91 90 90 90 90 90 89 89 90 89 89 88 88 89 90 90 86 86 88 89 90 90 90 90 91 87 87 92 94 98 106 113 116 116 120 125 129 132 133 135 130 127 125 122 122 120 116 124 133 152 178 211 237 246 252 253 244 235 228 225 227 230 237 234 214 209 197 195 178 179 209 195 201 199 197 200 205 204 195 188 192 196 195 193 194 195 194 195 196 202 212 217 221 225 229 234 245 254 255 255 255 255 255 254 254 246 242 247 255 255 252 244 246 243 237 230 218 212 209 208 212 221 230 235 235 232 232 226 223 215 211 203 196 194 200 207 206 212 230 223 224 210 236 229 213 210 210 207 206 202 200 197 227 216 202 190 183 181 181 181 175 177 177 177 175 173 173 174 177 208 220 236 244 238 245 248 255 255 250 235 241 255 255 255 250 243 245 232 220 215 196 164 134 126 129 141 161 180 200 213 202 191 176 166 157 154 150 145 140 138 143 152 158 162 170 179 190 201 216 227 232 230 223 218 211 206 200 90 90 90 90 90 90 90 90 88 88 88 89 89 90 90 90 90 90 90 91 93 94 92 92 89 87 87 88 90 93 96 96 103 106 112 114 120 129 137 138 137 140 138 135 139 145 139 137 143 161 179 202 220 231 243 254 246 241 236 233 233 233 233 226 207 197 190 183 176 178 192 210 199 212 205 204 214 199 181 187 186 193 195 194 192 194 197 199 203 208 214 216 218 224 236 245 246 247 248 249 250 252 252 252 251 247 248 255 255 255 255 255 254 238 229 227 221 211 209 218 226 232 238 242 242 239 238 229 220 209 210 236 187 196 223 200 205 222 232 226 216 218 226 229 223 213 207 203 204 205 203 197 236 224 200 185 186 184 177 180 176 176 174 175 176 178 180 179 176 186 214 236 241 246 251 245 255 253 242 244 253 255 255 255 255 241 245 239 217 208 190 158 134 125 126 135 148 158 160 156 146 138 128 122 121 124 129 131 132 134 140 147 149 152 157 162 167 175 189 206 220 224 218 211 203 192 184 90 90 90 90 90 90 90 90 88 88 88 89 89 90 90 90 90 90 92 93 93 94 92 92 93 91 91 89 90 92 95 94 97 101 107 110 117 127 135 139 143 145 143 143 154 165 158 154 156 166 175 192 208 218 231 243 245 245 244 241 236 231 225 216 199 189 182 177 171 174 189 208 218 220 212 208 213 205 187 178 189 194 196 196 196 198 199 202 207 207 212 218 227 234 239 240 231 231 235 240 246 250 254 255 251 248 250 255 255 255 255 252 244 245 244 228 218 219 221 218 241 244 247 246 246 248 249 244 219 218 215 228 228 206 209 193 212 225 232 224 216 217 221 221 212 207 201 199 200 202 202 198 237 225 201 186 194 195 191 194 191 190 189 187 184 181 180 176 180 187 211 232 239 246 254 249 255 253 244 245 254 255 255 255 255 242 246 242 221 208 183 149 127 117 120 127 138 141 139 133 112 108 104 103 107 113 121 124 132 133 139 142 146 148 151 155 155 161 172 188 205 213 212 206 197 186 177 92 92 92 92 92 92 92 92 90 90 90 91 91 92 92 92 92 92 93 93 93 94 94 92 95 93 92 91 90 91 93 92 93 98 101 105 113 125 132 137 152 155 156 160 177 189 183 177 181 186 182 189 200 210 219 228 241 247 249 247 239 229 215 205 192 184 177 173 169 173 187 207 217 215 217 218 220 221 206 181 190 193 196 198 201 200 201 204 207 207 211 223 238 244 241 233 224 221 226 230 234 238 239 242 242 239 240 247 253 252 251 248 244 241 242 239 238 238 233 229 240 243 246 246 245 245 243 237 220 226 218 223 255 229 209 206 217 223 224 219 213 214 214 210 200 195 194 196 197 198 198 197 235 225 201 191 203 209 206 210 216 215 212 207 201 195 188 182 185 188 207 227 237 248 255 253 255 252 245 246 254 255 255 255 255 242 245 242 224 203 167 130 110 104 109 116 123 125 120 113 96 95 97 101 110 117 125 128 132 135 139 142 140 143 146 148 147 149 154 168 184 196 200 198 183 169 159 91 91 91 91 91 91 91 91 90 90 90 91 91 92 92 92 93 93 93 94 94 94 94 94 94 94 93 91 92 91 92 91 94 98 100 103 111 122 132 136 155 166 175 184 200 211 204 198 216 217 209 203 201 204 211 222 238 245 251 249 240 226 209 197 191 182 175 171 170 174 188 206 213 213 224 229 225 232 223 191 193 190 192 196 201 202 203 206 205 210 217 229 241 245 240 228 222 221 224 228 231 233 236 236 232 230 234 240 245 246 250 251 253 228 229 255 255 255 242 244 232 237 241 244 241 234 225 215 216 218 212 229 255 245 221 229 219 218 213 210 209 208 205 198 190 185 187 191 192 191 192 197 229 220 202 199 215 222 218 223 231 233 230 225 217 208 200 193 187 187 203 224 236 250 255 255 252 250 245 247 255 255 255 254 250 240 241 240 225 195 146 111 95 92 100 108 116 118 114 111 109 108 111 117 123 129 132 135 134 136 139 140 138 138 139 144 145 143 144 154 170 187 197 198 177 161 151 91 91 91 91 91 91 91 91 90 90 90 91 91 92 92 92 93 94 94 94 94 95 94 94 94 94 94 92 94 93 94 94 98 99 99 101 108 120 127 131 148 172 194 206 218 223 218 216 236 242 233 219 205 202 210 219 234 242 248 246 237 222 205 192 189 181 174 171 170 174 187 204 225 226 238 235 222 227 230 213 200 192 188 193 200 201 203 208 206 215 224 233 237 237 235 229 223 223 229 235 241 244 246 244 235 232 235 240 242 245 252 255 245 229 238 255 255 255 245 247 238 237 237 233 227 219 206 199 203 199 208 242 246 242 219 226 220 212 206 205 207 207 202 194 185 179 181 184 185 182 188 198 219 217 206 208 225 231 227 231 235 238 235 231 225 216 208 200 190 186 200 220 235 251 255 255 247 248 245 248 254 255 255 255 247 241 240 238 227 188 131 98 92 91 102 110 116 120 121 119 121 120 122 124 129 132 133 134 137 139 138 138 136 135 137 139 143 140 141 151 170 191 203 207 188 168 156 90 90 90 90 90 90 90 90 90 90 90 91 91 92 92 93 94 94 94 95 94 95 94 94 93 93 94 95 95 96 97 98 101 101 97 98 104 116 123 125 143 174 203 218 227 232 230 228 242 252 244 227 209 203 209 217 230 235 239 239 231 218 201 190 186 177 169 168 170 176 188 202 232 233 235 229 218 222 238 244 218 201 190 194 199 200 203 210 209 218 230 233 234 232 234 235 241 243 247 250 251 253 250 247 244 241 242 243 242 244 254 255 230 248 255 255 252 250 244 233 243 234 221 210 202 194 189 188 196 192 217 250 221 225 207 207 224 212 202 202 206 205 203 196 180 173 175 179 177 175 186 202 214 216 212 215 231 236 232 237 242 244 242 239 232 226 218 210 194 186 197 215 231 250 255 255 248 249 246 247 252 253 255 255 245 244 242 239 229 182 121 94 96 97 110 118 123 126 129 130 128 125 124 125 128 130 131 133 137 139 137 136 133 133 135 137 139 135 140 153 175 198 213 217 194 172 155 90 90 90 90 90 90 90 90 90 90 90 91 91 92 92 93 94 96 94 95 94 95 94 94 94 95 96 97 97 97 97 100 104 103 99 98 106 118 124 128 143 173 205 222 237 246 246 244 248 255 251 235 219 214 213 215 224 227 230 228 223 212 199 189 184 175 168 169 173 180 193 207 223 229 227 226 224 219 230 252 242 217 198 198 200 201 205 213 213 222 230 232 233 232 238 245 255 255 255 255 255 255 250 244 246 243 242 242 240 243 254 255 240 255 255 247 236 239 234 217 235 221 201 186 177 171 165 168 184 188 221 225 205 205 193 201 228 213 201 200 201 200 200 196 177 166 168 172 171 172 188 211 214 221 219 220 233 236 235 244 253 255 250 244 237 230 223 216 201 189 192 207 225 247 255 255 252 252 248 247 249 249 252 252 238 242 240 236 225 174 112 92 95 102 117 127 132 134 136 137 136 132 127 125 127 129 131 134 136 138 136 134 130 130 131 133 135 134 140 155 176 199 214 215 188 165 147 91 90 91 90 91 90 91 90 91 90 91 91 92 92 93 93 94 94 94 94 94 94 94 92 96 97 97 98 98 97 97 98 107 106 101 100 107 120 125 127 145 171 198 217 238 252 253 249 247 255 251 238 229 225 221 215 222 223 225 222 218 208 197 188 181 172 169 173 180 187 202 216 217 225 222 226 230 211 207 235 255 235 209 202 203 201 205 212 218 223 229 231 234 237 244 252 252 255 255 255 255 255 251 246 237 236 237 238 237 239 253 255 255 254 247 242 242 240 227 210 218 205 187 175 168 162 155 157 170 178 210 187 196 190 189 206 229 213 200 196 197 196 198 195 177 167 168 173 172 175 194 219 217 225 222 222 234 237 239 252 254 253 249 243 237 230 223 214 209 191 188 200 217 243 255 255 253 255 252 253 252 249 249 249 234 240 236 228 215 162 102 88 90 98 116 128 135 136 138 139 140 134 129 126 124 125 129 131 131 133 132 130 128 128 129 132 137 136 140 153 172 189 201 203 182 159 140 93 92 93 92 93 92 93 92 94 93 94 93 94 93 94 93 93 93 94 92 92 91 93 94 96 95 96 98 99 100 100 100 107 104 101 102 110 120 129 137 143 165 190 208 225 240 249 255 244 237 231 233 235 231 228 229 226 224 221 217 212 204 196 185 167 175 173 172 191 204 204 208 218 220 222 222 222 221 215 211 217 240 242 217 199 205 212 210 211 240 225 239 244 239 255 240 250 255 255 249 253 255 254 240 238 248 233 235 240 227 255 229 255 255 255 251 246 236 222 208 204 197 184 167 156 154 157 160 167 174 194 191 189 196 197 212 219 218 209 200 196 199 203 197 188 179 173 171 179 195 210 216 228 223 218 221 231 242 249 253 247 246 246 243 242 237 230 221 213 190 192 185 214 233 255 251 255 255 255 253 252 254 250 243 242 235 237 224 216 141 92 83 92 103 119 125 127 128 131 130 128 127 126 125 124 125 127 127 127 127 129 127 126 127 129 131 135 139 139 142 153 167 175 178 163 141 124 93 93 93 93 93 93 93 93 94 94 94 94 94 94 94 94 92 94 95 94 91 91 92 94 95 93 93 95 96 98 99 101 105 103 101 103 110 121 128 135 158 163 171 185 211 234 244 244 245 238 233 238 243 242 238 234 228 224 220 215 210 203 196 186 171 170 169 178 193 197 199 212 210 214 215 216 217 219 219 218 221 230 235 225 208 199 202 211 221 245 228 241 246 241 255 237 243 247 251 253 252 248 246 247 239 237 234 253 216 238 250 213 255 255 255 253 247 231 218 210 193 194 188 172 154 147 146 147 158 176 209 206 195 198 209 235 216 214 208 199 198 202 208 206 199 194 194 195 201 209 216 222 228 222 218 221 231 242 251 251 244 243 244 243 243 238 231 223 215 191 190 183 211 233 255 249 253 255 255 255 255 255 252 246 243 236 236 223 194 128 88 82 91 101 115 120 119 123 125 125 124 124 124 123 123 123 125 126 124 125 125 125 124 125 127 130 133 135 136 136 139 144 144 140 118 99 83 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 94 95 97 96 93 92 91 91 91 91 92 92 95 99 102 103 103 103 104 108 115 124 130 138 152 160 170 185 207 228 238 242 248 242 234 237 243 245 242 238 228 224 219 213 207 201 193 184 174 170 171 184 199 192 187 202 205 208 213 216 217 217 220 224 221 219 226 233 222 200 200 217 226 245 231 242 248 245 255 244 240 235 236 249 245 239 236 245 234 245 231 225 234 255 237 255 255 242 239 241 235 222 214 214 194 194 189 181 173 168 162 157 155 169 199 194 188 200 215 244 208 210 208 203 204 212 218 219 219 216 221 227 228 224 227 235 224 221 217 221 231 240 245 248 244 244 244 243 243 238 231 223 216 192 186 181 208 237 255 251 253 255 255 253 254 255 252 250 244 238 234 223 165 117 88 85 95 102 114 117 116 120 123 123 121 121 121 120 121 121 124 122 122 123 123 123 123 123 125 127 135 138 139 137 134 130 121 111 81 64 50 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 96 97 96 93 90 89 88 88 91 95 98 101 105 108 107 108 108 111 114 121 127 133 140 142 159 173 179 189 204 222 241 254 253 244 242 242 242 240 239 229 225 219 213 206 198 191 184 173 173 177 188 204 199 186 186 200 205 211 217 219 217 220 224 224 219 224 236 227 210 209 224 222 240 233 239 245 248 255 255 253 242 226 237 234 240 232 235 241 209 229 220 231 239 255 241 217 219 225 225 222 220 218 212 201 195 190 193 206 215 210 196 178 182 207 217 227 239 234 241 201 206 210 208 211 217 224 226 233 231 236 242 239 232 236 246 222 219 218 222 229 236 242 244 244 246 246 245 245 240 233 224 217 194 183 179 203 239 255 254 255 255 252 250 250 252 251 250 242 239 229 215 136 107 92 91 99 106 115 116 117 119 121 122 119 118 119 118 120 120 123 122 122 122 122 122 122 122 124 126 134 139 140 138 134 128 116 105 80 67 56 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 93 95 96 95 92 90 88 88 89 96 103 110 115 115 115 113 111 112 114 118 122 127 132 138 147 157 160 158 160 172 188 210 240 253 254 251 249 244 237 234 232 227 221 215 208 199 192 185 173 180 175 176 200 213 201 187 190 193 204 214 219 218 220 226 224 226 228 229 226 222 222 226 219 234 236 238 239 246 255 255 255 255 225 227 224 247 232 220 218 234 219 216 255 224 202 202 193 213 224 218 217 223 220 205 204 205 211 221 235 245 244 234 196 198 229 248 255 255 229 215 201 209 215 214 213 213 216 220 238 241 240 242 239 235 243 254 223 220 218 220 227 234 239 242 244 246 247 246 245 240 234 226 217 198 180 178 195 239 255 255 255 255 249 246 245 247 249 249 243 237 219 193 114 98 96 99 102 107 116 117 118 120 121 120 117 117 117 118 119 120 123 122 122 123 124 124 121 121 123 125 128 133 135 135 133 131 123 114 100 91 81 95 95 95 95 95 95 95 95 95 95 95 95 95 95 95 95 94 95 96 94 91 89 90 90 95 104 114 122 123 123 122 118 113 114 116 119 122 126 132 139 150 153 155 162 170 171 159 153 186 210 225 233 239 241 236 229 235 231 226 218 211 203 195 188 179 186 171 163 190 217 217 203 184 184 192 206 217 218 222 228 223 228 227 221 222 227 228 223 222 233 240 239 236 242 255 255 255 255 226 227 213 244 226 215 217 203 202 247 220 213 209 186 196 219 229 219 215 220 217 204 208 226 244 250 247 246 248 248 214 213 234 234 231 227 207 206 217 224 228 223 217 215 215 220 245 251 248 245 245 248 255 255 224 222 220 221 225 231 237 240 244 247 249 248 246 241 235 226 217 201 179 177 186 236 255 255 255 255 246 243 243 244 249 249 243 235 205 160 102 89 95 99 102 107 116 119 120 123 122 118 115 114 115 116 118 119 123 122 121 122 124 123 120 120 122 123 126 131 133 135 137 137 132 124 117 111 103 95 95 95 95 95 95 95 95 94 94 94 94 94 94 94 95 97 97 97 94 91 91 92 95 107 115 125 130 129 125 123 120 115 115 120 123 126 132 141 148 154 160 171 188 201 197 170 154 155 173 181 194 214 232 238 236 235 233 229 224 217 210 202 194 189 190 175 167 187 209 214 213 195 186 186 199 214 217 223 231 226 227 226 222 224 229 228 222 229 232 240 240 239 241 242 244 246 252 233 246 216 235 221 230 216 204 207 226 210 208 185 213 217 226 232 230 223 219 224 228 238 250 255 255 248 245 246 246 244 232 232 216 207 212 211 225 227 233 234 225 217 216 219 227 243 255 255 250 252 255 255 251 227 223 221 221 226 230 237 241 244 247 249 248 246 241 235 227 216 205 181 177 178 233 255 255 255 253 243 241 244 245 251 252 245 232 188 125 94 81 91 93 101 106 114 118 121 123 120 115 112 112 113 113 116 117 121 120 120 121 122 121 120 120 121 123 127 130 132 134 135 134 128 120 112 108 101 95 95 95 95 95 95 95 95 94 94 94 94 94 94 94 95 99 99 97 93 90 92 95 97 116 121 129 131 126 121 121 119 119 120 125 130 133 141 151 160 172 182 190 200 208 214 209 208 175 174 164 168 194 224 239 241 233 234 230 226 223 215 207 201 193 193 185 184 193 199 199 209 211 194 188 197 210 215 223 231 230 225 224 227 231 230 226 223 233 229 240 240 241 242 232 226 231 247 246 255 229 235 224 254 255 220 255 255 234 211 198 215 241 235 237 246 240 230 241 255 255 255 254 245 247 253 253 246 241 227 226 213 210 217 210 216 223 227 226 217 211 214 220 232 234 252 254 247 249 255 253 236 226 224 222 223 225 232 239 244 246 247 249 248 248 242 235 227 215 209 182 178 176 232 255 255 255 252 241 242 245 246 253 253 242 225 174 98 89 74 85 88 99 105 113 118 122 124 120 114 110 110 110 111 114 116 119 119 119 120 121 119 118 118 119 121 122 126 129 127 126 123 114 105 95 92 86 92 94 96 96 95 95 95 97 98 95 93 93 97 99 98 96 100 97 93 94 91 90 101 115 121 122 126 128 125 120 114 108 116 118 128 139 150 164 178 188 203 211 217 219 220 221 217 217 209 184 161 203 216 189 216 247 233 229 225 227 226 219 216 214 203 192 199 187 191 198 185 206 209 204 197 196 205 216 225 227 223 223 224 228 224 221 223 229 228 234 236 238 238 235 232 226 215 230 245 237 215 215 249 255 255 255 255 255 255 245 242 252 255 255 249 248 243 235 234 238 252 255 255 254 251 254 255 251 237 223 214 214 215 215 216 219 225 220 217 214 215 219 224 230 240 243 243 246 245 242 235 227 222 222 223 224 228 233 239 245 247 248 250 249 249 243 236 229 224 204 191 175 184 210 255 254 255 255 246 239 241 249 253 245 242 209 137 80 69 68 77 90 91 99 113 120 120 116 114 113 108 109 110 111 114 116 117 117 116 116 118 119 118 118 117 116 123 123 122 117 109 98 88 83 63 63 62 91 94 96 96 96 95 96 97 98 96 95 96 98 99 98 96 102 95 92 94 97 100 109 118 119 123 125 120 113 107 108 110 117 124 137 152 168 184 201 211 219 226 231 230 228 226 219 212 212 189 170 199 202 182 211 246 236 231 226 228 233 229 224 219 214 201 202 185 184 189 182 200 221 212 198 189 196 212 220 219 226 229 228 224 220 219 223 227 236 237 237 235 231 227 225 221 214 216 228 243 250 252 254 255 240 235 238 252 255 255 244 242 236 239 241 244 238 228 227 234 251 253 255 255 255 255 252 242 229 222 219 222 223 220 218 219 224 219 216 215 219 223 229 231 233 234 235 238 238 236 229 223 220 221 223 226 229 234 242 245 247 247 250 249 247 243 236 229 223 212 194 182 183 216 255 251 254 254 247 244 246 246 250 241 227 183 119 76 62 61 71 80 88 96 110 117 118 116 113 112 107 107 108 109 112 114 115 115 116 117 117 117 116 114 113 112 110 108 104 98 88 78 70 64 64 64 64 89 91 94 94 94 94 95 96 97 96 95 96 97 97 96 94 98 92 91 99 107 113 118 121 121 121 120 110 101 96 106 114 125 135 151 169 187 203 220 229 233 237 240 237 231 226 215 203 185 170 156 171 168 158 187 222 247 238 227 226 234 235 231 224 223 212 212 194 183 183 174 182 219 223 217 202 197 209 217 217 222 233 236 224 213 213 218 222 230 232 231 230 227 226 225 224 198 202 220 240 250 247 243 241 231 232 237 251 255 255 242 225 232 242 250 251 244 236 243 255 245 244 247 252 255 255 246 232 222 222 227 233 235 230 225 221 221 217 215 215 220 225 231 233 227 227 229 231 232 230 225 219 218 219 222 226 231 235 243 247 245 245 248 247 247 242 238 231 221 220 199 187 181 228 255 248 252 251 248 251 250 243 239 233 210 155 107 79 62 59 70 72 81 89 103 114 116 113 109 107 105 105 105 107 109 110 112 113 117 117 116 114 112 109 107 106 101 97 91 85 76 69 65 62 67 68 69 87 90 92 94 93 94 95 97 96 96 96 97 97 96 95 92 90 90 98 106 113 118 120 122 119 115 109 98 93 97 108 120 137 149 164 182 199 213 225 231 235 238 238 233 227 218 203 188 166 157 150 155 155 156 181 208 251 243 232 229 229 234 234 232 223 219 222 211 195 186 176 167 191 219 234 219 201 204 212 215 217 241 254 237 217 214 219 222 223 225 225 222 220 218 217 215 194 196 206 217 223 224 228 234 241 246 247 248 255 255 241 219 233 240 241 240 235 235 249 255 237 232 234 242 255 255 244 227 225 228 234 242 244 239 230 224 221 218 217 217 220 227 232 233 226 224 227 230 231 229 224 218 218 219 222 226 231 235 242 246 244 244 247 246 246 242 238 231 220 224 201 190 182 238 255 248 253 250 251 255 252 239 232 224 195 135 101 90 72 65 76 70 76 83 98 108 112 110 107 105 103 104 104 106 107 109 111 112 116 115 113 111 106 103 101 100 96 93 87 82 77 76 78 79 77 78 79 85 87 91 92 93 93 95 97 95 96 97 97 96 95 95 94 86 95 110 116 120 120 120 121 115 106 96 91 95 106 118 128 147 158 173 187 203 212 221 225 229 230 228 224 218 206 190 174 155 143 140 141 147 157 169 188 230 237 240 240 238 237 235 233 227 224 228 222 204 198 196 175 174 199 220 214 204 206 208 209 214 245 255 250 227 220 223 227 226 227 226 221 212 205 198 194 197 192 193 203 215 219 219 218 225 236 242 242 249 255 241 222 233 237 237 239 242 247 255 255 229 222 223 234 249 253 244 233 232 235 239 242 243 240 233 226 223 220 219 220 223 228 232 233 230 228 230 232 232 230 225 220 219 220 223 225 229 233 241 244 243 241 244 244 244 242 238 231 222 224 202 192 192 247 255 249 248 246 252 255 255 242 228 216 171 119 100 97 84 75 80 71 71 76 90 102 109 109 108 104 102 103 103 105 106 108 110 111 116 115 110 106 102 99 97 95 90 88 83 80 79 82 87 90 85 85 85 82 85 88 90 91 92 94 96 96 97 97 97 96 96 98 97 94 106 121 125 122 120 118 115 106 99 91 93 104 118 129 136 153 163 175 187 198 207 212 215 217 217 215 210 204 197 180 163 141 124 124 120 130 143 144 157 192 215 237 249 253 250 243 237 237 234 225 224 209 211 221 194 184 189 194 200 207 215 214 209 208 234 250 242 223 217 219 224 230 231 231 226 218 209 202 196 176 184 200 211 210 203 204 207 211 227 237 240 244 246 232 218 229 236 243 253 255 255 255 255 226 221 221 231 245 249 248 244 237 239 240 237 235 234 231 225 227 224 223 222 225 228 232 232 232 231 232 235 235 233 226 222 219 220 221 223 227 231 239 242 241 240 243 243 243 241 236 231 224 217 204 193 209 255 253 247 237 241 250 255 255 248 227 200 139 106 93 93 88 81 79 73 68 71 83 94 103 106 106 103 103 102 102 103 105 107 109 109 113 111 106 103 99 96 95 94 92 91 87 86 85 89 93 94 90 88 88 78 81 85 87 88 90 92 94 97 98 98 97 95 97 102 104 110 117 124 123 119 118 112 106 97 94 95 101 112 125 137 143 153 161 170 180 186 192 195 199 198 197 193 188 187 181 166 150 139 117 119 115 122 137 133 150 155 183 214 237 252 255 254 249 252 245 230 231 216 219 234 197 196 189 190 199 209 212 212 215 210 216 221 220 214 213 216 222 229 230 229 226 219 213 209 204 174 188 205 209 198 187 192 202 215 226 236 240 239 236 223 212 209 218 227 237 245 247 244 239 228 225 230 240 247 249 254 253 239 240 240 236 232 231 230 224 228 224 224 224 227 230 234 236 236 236 237 238 238 235 228 222 222 221 221 223 225 230 237 241 240 238 241 242 243 241 236 231 226 210 210 198 231 255 249 241 227 239 253 255 255 253 219 177 106 94 88 85 89 85 76 73 64 65 75 88 98 102 104 102 101 99 99 101 103 104 105 107 110 108 104 100 97 95 95 95 95 95 93 93 93 96 99 99 92 90 90 74 77 81 84 87 89 92 94 100 101 100 98 95 97 103 108 119 121 120 116 114 116 108 98 90 95 102 109 118 129 143 151 155 160 169 174 177 178 180 182 181 179 174 171 170 164 153 136 126 102 108 100 108 124 123 147 140 162 187 212 238 255 255 255 254 247 233 238 221 222 234 186 190 190 199 209 203 193 202 219 222 211 204 205 212 215 221 225 228 228 222 215 207 202 197 194 212 200 189 190 195 196 194 194 220 221 225 229 232 229 220 212 203 212 218 224 228 232 233 231 238 237 244 253 255 253 255 255 248 249 249 240 235 233 232 226 227 224 224 225 228 231 235 238 236 235 236 237 237 234 227 219 222 221 221 222 224 227 233 236 238 238 240 240 242 239 235 231 228 205 215 202 249 255 246 237 228 243 255 255 255 245 201 148 83 88 84 79 89 83 69 71 61 64 73 83 95 101 103 101 99 97 98 99 101 102 104 105 108 107 102 99 97 96 96 96 94 94 95 96 97 100 102 102 93 92 93 68 70 74 80 82 87 93 95 96 97 96 95 98 103 111 115 119 122 124 121 112 103 96 92 96 102 111 121 132 141 150 156 160 161 163 164 166 165 165 164 165 163 162 162 159 153 142 131 113 104 99 102 108 115 128 143 150 169 181 192 216 235 246 255 249 255 237 223 217 239 204 197 196 195 192 195 198 202 208 213 210 214 215 211 205 205 216 226 224 225 222 215 207 201 198 196 194 198 203 205 204 197 187 182 199 208 217 224 227 225 216 208 205 213 220 227 232 237 240 244 251 250 251 253 255 255 255 255 255 255 255 254 244 237 233 232 221 221 222 224 227 230 233 235 235 236 235 233 231 226 221 219 220 219 220 222 223 226 227 230 236 237 240 241 241 237 232 228 222 212 211 215 255 255 248 241 247 236 249 255 245 230 178 97 71 65 75 82 79 66 59 60 65 69 75 83 91 97 100 100 98 96 97 99 101 104 108 109 108 105 103 102 102 101 99 97 100 100 98 99 100 100 101 97 91 92 95 61 63 70 74 80 84 91 93 96 96 94 94 99 104 110 115 116 118 116 112 103 97 93 92 101 107 116 125 134 141 148 152 155 156 157 158 158 157 156 155 158 156 156 155 154 147 136 128 115 107 100 101 107 113 124 141 157 178 187 195 211 221 224 235 251 255 247 238 227 235 199 194 197 195 192 193 196 200 207 211 213 213 211 210 209 209 212 216 223 224 220 214 207 200 193 190 190 193 198 201 202 200 197 194 191 199 209 216 218 215 204 195 202 211 221 229 237 244 249 253 255 255 255 255 255 255 255 255 255 255 255 255 247 241 234 230 220 220 222 224 227 230 233 235 235 236 235 232 228 223 220 217 219 219 220 220 222 223 225 227 231 234 235 235 235 232 228 223 221 209 207 239 255 255 241 249 248 247 244 243 239 205 139 89 69 60 62 67 67 61 56 58 60 75 92 101 104 101 100 100 97 97 97 99 103 105 107 108 108 106 104 102 103 102 102 100 102 100 100 100 101 101 102 98 93 95 98 54 58 63 68 75 79 86 89 94 92 92 94 99 104 111 115 115 113 106 99 92 90 92 92 104 110 119 127 134 138 143 145 147 147 147 147 148 147 147 146 149 147 148 148 147 140 131 126 121 115 103 100 100 104 117 135 166 190 203 208 218 222 220 226 251 255 255 255 247 238 196 192 196 193 192 192 194 198 204 208 214 211 206 208 212 212 206 203 218 218 217 214 208 201 194 190 189 192 194 196 199 202 203 204 199 202 207 208 210 209 202 197 204 214 223 231 241 246 251 255 252 252 251 249 251 250 252 254 255 255 254 253 247 242 236 229 220 220 222 224 229 231 233 235 237 238 237 234 229 225 220 216 218 217 218 219 221 222 224 225 225 226 227 227 227 225 221 218 219 204 211 255 255 249 237 255 247 255 240 233 227 171 101 81 65 52 53 58 63 62 60 62 62 88 115 128 119 104 97 97 96 96 97 99 104 106 107 108 110 107 104 103 104 104 102 100 101 100 99 100 102 102 101 98 99 101 104 50 53 59 65 71 75 82 86 88 89 89 94 99 105 111 114 114 106 96 87 84 87 92 97 108 114 123 130 136 138 140 141 143 143 143 142 143 142 142 141 143 142 143 144 143 137 128 126 127 121 107 99 96 98 109 128 161 193 209 217 228 228 224 228 236 237 254 255 255 245 201 196 194 191 191 190 193 197 200 206 216 212 206 206 209 209 203 199 210 211 210 210 209 205 200 196 196 196 198 198 199 200 201 203 211 211 208 203 203 207 207 206 206 217 226 235 242 247 249 252 249 247 247 248 251 253 255 255 255 253 250 249 247 242 233 225 220 220 222 224 229 231 233 235 238 238 238 234 230 225 220 215 216 216 216 217 218 220 221 221 219 220 221 220 220 218 215 214 213 206 231 255 254 243 243 255 251 252 240 228 196 129 78 72 54 50 56 62 65 63 65 69 84 112 143 151 131 106 95 93 95 97 98 102 107 108 109 109 111 108 105 104 105 105 104 103 102 100 100 101 103 104 102 100 103 105 108 45 51 56 60 66 71 77 81 83 83 85 90 97 105 109 108 106 98 88 80 81 88 96 102 111 117 124 130 134 135 138 139 139 139 138 137 137 136 138 137 140 139 141 141 141 135 126 127 131 125 108 99 92 91 102 122 149 187 209 219 230 231 224 227 228 226 247 255 255 244 201 193 192 191 191 192 194 197 199 205 216 217 210 207 204 201 200 201 207 209 210 209 207 204 203 203 202 201 202 201 200 198 197 197 208 208 205 201 203 206 205 204 208 217 228 236 244 249 251 252 252 251 252 252 254 255 255 255 255 251 247 245 241 237 228 221 220 220 222 226 229 231 234 236 241 241 239 237 230 225 218 215 216 214 214 216 216 217 218 217 213 213 214 213 212 211 211 211 208 215 255 255 255 240 255 250 255 242 237 215 148 91 71 63 49 52 58 60 58 62 80 94 121 144 170 168 142 111 97 94 96 99 101 106 111 112 111 111 111 108 105 103 105 105 105 104 102 101 100 101 103 104 103 101 105 105 108 43 46 52 56 62 66 72 75 78 78 79 87 95 102 103 103 98 91 81 78 82 91 101 108 117 122 127 131 134 134 136 137 135 134 134 133 133 133 135 135 141 140 141 140 139 132 123 124 129 126 109 100 92 89 99 118 146 183 209 219 231 231 228 231 236 230 247 243 254 230 196 190 194 193 193 195 196 200 203 207 214 216 212 206 199 196 198 202 207 214 217 214 206 200 202 203 201 200 201 201 202 200 200 199 202 207 210 211 214 213 206 201 210 220 231 240 246 250 253 253 249 247 247 246 247 247 250 250 252 248 245 240 237 231 224 218 220 221 223 226 229 231 234 236 242 242 240 237 230 223 218 214 213 212 212 212 213 213 215 212 208 206 207 207 206 206 206 208 208 232 255 254 255 246 255 246 255 234 221 185 107 71 71 59 56 58 57 53 51 66 102 129 159 169 181 175 146 118 101 96 96 99 103 109 114 114 113 112 111 108 104 102 104 105 105 105 103 102 101 102 104 105 105 102 106 107 110 40 43 47 51 55 60 64 67 73 72 75 82 91 97 98 96 95 90 84 84 92 103 112 118 123 126 131 132 132 131 133 134 131 130 131 130 131 133 136 136 141 139 139 139 137 129 119 117 125 121 107 101 93 91 100 116 140 176 202 214 226 230 231 237 245 237 247 222 229 210 195 199 197 196 197 200 202 205 208 212 211 212 210 205 199 194 192 195 200 213 225 222 211 202 201 205 200 200 200 200 202 202 203 203 205 210 215 216 218 219 215 210 220 229 238 245 249 249 250 248 242 239 237 237 239 239 242 241 244 244 242 236 229 225 223 221 220 221 223 227 230 233 234 236 244 244 241 238 230 224 218 212 211 209 208 208 208 208 209 208 203 200 200 199 200 200 203 206 213 250 255 255 253 254 255 250 244 230 192 135 84 67 68 62 66 64 58 54 57 80 125 159 176 175 176 166 146 123 103 95 94 99 105 111 115 115 113 111 110 107 103 101 103 104 105 105 102 100 100 101 103 104 105 102 106 108 111 38 40 45 49 51 55 58 60 71 68 71 79 90 95 94 92 96 92 89 92 103 113 122 127 129 130 133 132 131 129 131 131 132 131 132 131 133 135 138 140 141 140 139 138 133 127 115 111 117 114 105 102 99 97 102 115 125 159 184 197 215 226 233 240 247 241 247 209 212 197 200 212 199 199 201 205 208 211 216 217 207 206 206 203 199 193 190 188 192 209 227 228 216 203 203 208 202 201 199 198 200 202 206 208 211 213 213 210 213 218 221 220 232 241 247 251 250 245 242 239 237 234 234 235 237 241 244 243 239 238 236 233 226 222 223 225 221 222 225 227 230 233 234 236 244 244 241 236 230 223 216 211 208 205 205 204 205 205 205 204 197 194 195 194 195 198 201 205 220 255 255 255 250 255 246 251 228 224 162 91 71 70 64 67 71 70 64 63 69 96 139 170 177 171 166 157 142 123 102 90 94 97 104 111 114 114 112 110 110 106 102 100 102 104 105 105 102 101 100 101 103 104 104 101 107 109 112 40 39 40 41 46 51 55 57 61 63 68 74 79 86 90 93 89 91 94 101 110 119 127 132 140 140 138 134 130 128 130 131 128 129 131 132 134 136 139 140 138 138 137 135 128 119 107 102 106 108 104 102 101 102 106 114 114 135 166 193 209 220 237 247 249 230 212 206 209 215 214 212 207 205 207 209 212 216 220 220 208 205 204 202 197 193 190 188 194 190 233 223 195 209 206 199 202 201 200 199 200 201 203 204 208 215 220 220 217 218 226 236 245 242 240 246 246 241 237 237 236 230 228 229 235 240 241 239 242 238 234 230 225 223 220 220 222 225 227 230 233 236 237 239 244 243 240 237 231 224 215 207 202 200 199 198 199 199 200 199 193 196 190 182 188 201 206 201 255 255 255 252 245 242 247 240 228 171 110 78 67 65 66 66 77 77 67 68 88 125 155 167 171 159 152 148 130 102 88 89 93 99 105 110 109 108 107 108 105 102 99 99 102 104 102 100 103 104 103 102 101 102 106 107 113 113 114 42 41 41 41 45 49 53 55 59 62 65 72 79 83 88 90 92 94 100 107 117 127 135 139 141 140 137 133 128 128 128 130 133 134 135 137 139 140 141 142 138 137 134 130 123 116 108 100 99 98 101 102 105 108 110 113 121 130 149 173 199 221 243 254 240 227 217 213 217 220 219 214 211 209 209 212 215 220 223 221 206 201 200 198 196 193 191 190 196 203 228 220 200 204 200 194 202 203 202 202 203 204 206 207 211 214 217 215 213 216 222 231 248 241 237 239 240 238 235 235 228 220 216 223 238 248 248 243 233 231 229 226 225 224 225 225 224 226 229 231 233 236 237 238 243 242 238 234 228 220 211 203 198 195 194 192 192 193 193 193 189 193 187 179 185 192 201 215 255 255 253 246 242 242 240 224 170 131 95 72 59 59 73 85 81 84 87 100 119 140 154 159 152 154 154 141 114 89 84 92 95 98 105 109 108 107 105 105 103 101 99 99 103 105 104 103 105 105 105 103 103 102 108 109 112 111 114 45 45 44 44 47 49 51 52 57 60 64 69 75 81 85 86 92 94 102 112 122 133 141 144 144 142 138 135 129 127 127 128 134 136 138 140 140 140 140 139 137 134 128 123 117 110 105 99 93 93 97 103 109 112 114 114 122 123 137 164 199 224 245 252 226 222 221 222 225 225 221 218 212 211 211 213 216 221 224 221 203 196 194 193 194 194 193 192 195 220 218 213 206 196 196 190 198 199 199 201 202 203 204 205 213 213 214 215 218 223 229 233 240 237 235 236 238 237 235 234 221 225 236 248 253 250 239 229 226 224 224 224 225 226 228 228 225 228 230 232 235 235 235 236 239 238 236 231 226 217 207 199 194 191 189 187 187 187 187 187 184 189 179 177 182 180 194 235 255 254 243 237 238 236 227 202 130 102 85 71 59 56 65 78 72 83 103 129 146 149 148 149 146 156 154 128 92 72 78 91 95 99 104 108 106 104 103 102 100 100 99 101 104 107 107 106 105 105 105 104 103 104 108 111 115 115 117 50 48 48 48 49 50 51 52 57 59 63 68 73 77 82 83 88 92 100 110 122 132 140 145 148 147 142 137 130 127 127 128 132 134 137 141 139 137 135 133 133 128 121 114 109 107 105 99 92 90 97 103 111 115 117 119 118 123 139 171 205 226 237 239 219 220 225 227 227 225 224 219 214 211 209 212 216 220 224 218 200 189 188 189 191 194 195 196 198 233 211 204 209 190 192 192 192 196 197 199 200 203 204 205 210 212 213 219 227 233 236 236 232 236 239 238 234 230 228 226 243 252 255 255 243 228 223 221 223 222 222 223 225 226 229 230 229 230 232 233 235 235 235 236 238 238 234 229 223 214 204 197 190 186 182 181 181 180 179 179 179 183 173 173 179 171 193 252 253 249 238 232 229 220 206 177 119 92 79 74 70 64 61 61 65 81 110 138 149 145 141 144 157 161 144 108 75 65 76 87 95 100 105 107 105 103 100 101 98 99 100 103 106 108 109 110 106 106 106 104 103 105 109 112 119 118 118 55 54 54 53 53 53 54 54 59 61 64 68 73 77 81 82 86 89 97 107 117 128 136 140 149 148 144 139 132 129 127 127 129 132 135 137 138 134 129 128 127 122 114 109 106 105 106 102 97 95 100 105 110 116 122 125 127 136 157 182 205 216 223 226 221 223 226 227 225 223 221 220 211 208 207 209 212 217 221 216 196 185 181 183 189 194 199 199 208 245 214 201 207 184 183 188 191 195 198 200 202 204 207 209 208 210 214 222 229 234 232 230 233 239 240 234 228 228 232 237 255 255 241 221 209 209 220 231 224 224 224 224 226 227 229 229 230 231 234 235 235 235 232 234 238 238 234 228 223 214 203 195 186 181 179 175 175 172 172 172 170 172 166 167 170 171 203 255 243 241 235 226 215 199 178 153 103 83 80 78 73 66 63 65 77 94 120 139 145 141 143 151 157 146 117 82 63 66 79 86 98 101 105 106 105 101 98 99 98 102 103 105 107 109 110 111 106 107 106 105 105 106 110 114 120 118 118 63 61 61 61 61 59 59 59 63 64 67 70 75 78 81 82 89 90 95 103 113 123 131 135 143 143 141 138 131 126 122 121 123 124 128 131 131 127 124 122 118 114 109 106 107 108 108 107 103 102 103 106 110 118 124 131 150 157 169 185 197 204 213 221 225 225 226 226 224 222 220 218 209 205 204 206 209 213 217 211 193 180 176 178 187 196 201 203 217 248 227 206 204 184 172 181 188 191 192 195 197 201 206 209 217 219 222 229 234 234 231 227 232 235 236 232 236 248 255 255 249 226 202 192 201 214 223 224 226 225 226 225 227 228 229 230 233 233 234 235 235 234 232 233 239 236 232 227 221 211 201 192 182 178 174 170 169 168 165 165 165 160 160 160 162 181 219 249 237 237 231 216 198 177 156 136 84 77 83 77 63 57 65 78 108 119 132 137 141 144 148 152 131 110 81 60 57 65 79 87 99 101 106 107 105 101 97 99 99 105 106 108 108 108 109 110 109 109 109 108 107 109 114 115 124 123 122 68 68 68 67 67 67 66 66 68 69 71 74 79 82 84 85 92 92 92 97 105 114 123 129 134 136 136 132 127 121 116 111 112 114 118 119 119 116 115 114 109 108 106 107 109 111 111 111 110 109 107 108 111 117 125 137 161 167 174 186 197 204 212 220 224 225 225 224 224 221 216 212 207 202 201 202 205 210 213 207 191 177 172 174 186 196 202 206 216 240 241 217 204 190 166 179 190 193 193 194 197 201 207 212 225 227 228 231 233 233 232 231 231 230 230 233 244 255 255 248 204 193 189 195 213 222 223 217 226 226 226 226 228 229 231 233 234 235 235 235 235 232 232 233 235 233 230 224 219 209 198 190 179 174 170 166 164 163 163 160 161 150 156 154 154 195 237 237 235 232 220 202 182 161 142 127 78 75 80 76 69 71 87 105 127 130 131 125 131 142 137 124 88 71 57 54 58 61 74 87 101 104 108 108 105 99 97 97 102 108 109 110 108 107 107 109 112 113 112 112 111 113 116 119 126 123 121 73 74 73 73 73 73 72 72 73 74 76 78 82 84 88 89 93 91 92 94 100 110 120 125 129 131 133 131 125 117 111 107 105 106 109 109 109 108 107 106 103 104 104 107 110 113 113 112 112 111 112 115 119 126 137 147 162 166 171 186 200 211 217 221 223 223 223 223 223 221 216 209 207 204 202 203 206 209 211 206 190 175 168 172 182 193 201 204 204 224 248 224 208 202 171 184 202 204 202 203 205 210 220 225 226 226 227 226 226 227 229 229 228 224 221 225 234 234 211 184 184 190 201 208 214 217 225 231 226 226 226 228 229 231 233 234 234 234 235 235 233 232 231 231 233 230 226 222 214 204 194 185 174 170 166 162 160 158 159 155 152 140 153 152 151 205 246 222 229 217 200 183 167 155 141 128 84 67 66 72 88 110 132 148 135 134 124 110 117 130 117 91 59 52 53 61 60 57 67 85 103 105 108 109 106 102 98 99 104 108 111 110 108 105 106 106 115 115 115 114 114 115 119 122 119 117 116 82 82 82 82 82 82 82 82 85 86 87 88 89 91 92 92 98 97 97 98 101 107 113 117 122 124 127 127 124 117 109 101 99 96 95 95 94 94 97 98 101 103 105 107 107 109 109 106 106 114 113 117 139 156 162 170 164 165 166 176 194 210 221 222 223 222 222 222 222 219 216 215 213 212 210 210 210 210 212 205 189 182 174 169 171 183 192 195 200 206 212 219 221 212 194 183 221 216 212 211 215 219 221 223 223 230 234 234 229 224 222 220 220 209 199 191 185 186 191 195 195 199 208 217 224 229 233 236 230 229 229 229 229 229 229 229 224 225 228 229 230 231 231 231 235 230 223 220 214 205 193 183 169 163 160 155 153 150 151 145 144 139 135 145 188 228 229 205 189 181 170 162 155 150 149 138 88 61 56 86 127 155 161 156 146 126 104 92 89 84 72 63 58 64 60 58 60 58 65 82 93 103 112 111 108 106 105 103 108 109 111 108 109 107 109 109 113 113 114 114 116 118 121 122 123 111 101 87 87 87 87 87 87 87 87 88 89 89 91 92 93 94 95 100 99 99 99 102 106 110 112 114 116 118 118 115 109 103 98 94 90 89 87 88 88 92 94 99 99 102 103 105 106 107 106 102 111 119 129 153 168 175 180 173 170 171 177 190 204 216 220 221 220 220 220 219 218 217 215 215 213 213 213 212 212 212 206 190 182 174 166 167 178 185 190 198 199 203 210 220 225 223 221 219 214 209 208 211 215 217 218 230 234 236 234 230 226 225 219 205 194 187 180 178 181 186 191 198 205 213 220 226 230 235 239 233 231 231 230 230 229 229 227 226 227 227 228 228 228 229 229 228 227 223 217 208 196 183 172 165 160 156 151 150 146 147 140 128 128 137 157 191 215 209 183 172 164 157 152 151 151 152 140 96 83 94 122 153 165 153 136 106 97 84 74 70 63 57 53 58 65 61 58 61 58 64 82 94 103 113 112 110 107 107 104 109 110 109 109 107 107 108 109 112 112 112 115 117 120 120 120 110 100 90 93 93 93 93 93 93 93 93 91 92 93 94 95 96 97 97 101 101 100 100 101 102 104 104 105 106 107 107 105 102 98 95 90 87 85 82 81 83 87 88 94 94 97 99 103 105 107 105 101 113 123 136 162 175 177 182 182 183 182 184 189 197 204 211 217 219 219 219 218 217 217 215 215 213 213 212 212 212 210 205 192 182 173 163 163 170 179 185 196 196 197 200 208 216 220 225 216 215 210 211 216 222 227 232 236 237 234 231 230 227 224 217 193 184 179 175 175 178 182 187 200 205 213 217 223 229 234 238 234 233 233 231 231 230 229 229 227 228 228 227 227 226 225 222 221 220 218 211 200 185 173 165 161 157 153 148 147 144 144 138 122 121 136 160 185 192 184 171 162 156 153 151 151 151 152 139 115 122 147 164 171 158 124 91 63 65 65 63 58 54 54 53 57 64 61 57 61 57 64 81 96 105 115 114 112 109 109 107 112 113 111 110 108 108 108 110 112 112 112 117 120 121 117 113 95 86 79 97 97 97 97 97 97 97 97 95 96 96 97 98 99 100 100 101 102 102 103 103 102 102 102 104 104 104 104 103 101 100 99 93 90 86 82 80 80 84 85 87 89 91 93 97 100 102 102 103 111 119 138 169 182 180 183 193 195 195 193 189 189 193 202 213 217 218 217 218 216 216 213 213 212 212 212 212 212 210 205 193 182 172 162 157 162 172 181 188 191 195 197 203 206 206 211 220 223 218 218 222 226 232 235 235 235 232 229 228 224 217 204 185 177 175 174 174 176 179 181 195 202 210 217 223 227 234 236 237 235 235 234 234 232 231 230 226 225 223 224 222 220 219 217 214 213 210 202 187 175 164 158 156 152 148 146 143 141 140 135 128 118 129 153 170 172 169 166 157 152 148 148 149 149 151 141 137 153 173 166 144 115 78 47 45 51 58 61 59 58 58 60 57 63 60 57 60 57 63 80 97 106 116 115 114 111 111 109 112 115 112 111 109 109 110 112 113 114 116 121 123 119 109 101 90 82 77 99 99 99 99 99 99 99 99 99 99 100 100 101 102 102 102 102 103 104 105 105 105 104 103 106 105 105 104 104 104 104 104 100 96 91 86 80 78 78 78 80 82 84 86 88 91 93 95 99 105 112 134 172 189 191 197 205 210 209 203 194 187 184 190 208 215 216 215 217 214 214 212 212 212 212 210 210 210 210 205 193 182 171 161 154 155 163 175 179 186 194 199 203 206 208 216 232 234 228 226 223 223 225 225 233 232 231 230 226 218 206 191 181 174 174 173 173 173 173 175 184 193 205 215 221 225 231 235 237 238 238 237 234 232 231 228 225 223 223 220 219 217 215 212 207 203 197 185 173 163 158 154 150 147 145 141 138 137 136 131 131 117 123 147 164 161 158 161 152 146 144 141 143 148 151 143 141 152 157 128 93 68 50 36 45 48 53 57 60 61 58 58 57 62 59 56 59 56 62 80 98 107 117 116 115 113 113 111 114 114 114 112 109 109 112 115 116 118 120 123 122 113 100 89 92 85 81 101 101 101 101 101 101 101 101 101 102 102 102 103 103 104 104 103 104 105 106 106 106 106 106 106 105 104 104 104 104 105 106 102 98 94 88 83 77 75 73 75 76 76 78 80 81 83 84 92 95 100 124 161 181 193 211 214 220 219 210 200 189 178 183 204 212 213 213 214 213 213 212 212 210 210 210 210 210 210 205 193 181 171 162 153 149 155 167 178 185 191 195 197 203 210 223 233 237 234 232 229 228 225 224 223 224 226 224 217 207 194 181 177 172 172 171 170 169 169 171 175 183 197 206 214 222 227 232 236 239 239 238 235 233 231 228 226 224 222 218 217 213 209 205 195 187 179 170 161 155 152 149 145 141 138 136 134 132 131 127 125 116 126 151 163 156 149 152 149 144 142 140 142 147 153 145 126 121 114 85 59 47 48 48 51 52 54 60 64 63 60 55 56 62 58 55 58 55 61 79 98 107 117 117 116 113 114 112 114 115 114 112 110 112 115 118 121 123 122 120 113 103 93 88 95 87 82 103 103 103 103 103 103 103 103 103 103 103 104 104 104 104 105 106 106 106 106 105 105 105 105 105 104 104 104 104 104 104 104 102 101 98 92 87 80 76 73 73 71 71 71 72 73 72 74 82 89 92 105 129 149 174 209 217 223 223 217 207 195 183 180 201 211 212 211 213 211 211 211 210 209 209 209 209 209 209 205 193 181 172 163 152 144 149 161 173 182 191 192 194 199 208 222 232 238 236 233 229 224 220 217 204 207 211 207 199 189 180 171 170 167 167 166 165 166 166 169 170 177 188 195 203 211 220 228 233 236 236 235 233 232 229 226 224 221 218 213 207 202 199 191 177 169 162 156 152 148 145 141 139 137 135 131 130 128 127 125 120 120 133 152 157 148 144 149 147 144 144 144 146 149 152 142 107 86 74 61 54 50 52 53 54 56 61 67 69 67 64 59 55 61 58 55 58 54 61 78 97 107 117 117 116 114 114 112 113 114 113 112 111 114 117 121 127 126 122 113 102 95 93 94 97 89 82 104 104 104 104 104 104 104 104 103 104 104 104 104 104 105 105 109 108 106 105 104 103 103 104 105 105 105 105 104 104 104 104 103 102 101 98 92 85 80 77 69 68 68 68 66 66 66 67 74 84 85 89 101 115 146 192 215 222 223 220 213 204 189 184 203 207 208 210 210 210 210 210 209 209 209 209 209 209 209 205 193 182 173 167 153 143 147 159 163 176 192 198 204 208 217 227 236 238 233 226 214 202 192 187 183 187 190 187 179 169 164 160 161 159 160 161 161 163 163 164 169 173 178 184 191 201 212 224 229 232 232 231 229 228 225 222 220 216 210 202 196 188 184 176 162 153 149 147 145 143 139 133 136 133 131 128 126 124 123 123 121 128 140 150 146 139 144 153 145 146 148 150 150 151 150 140 97 69 54 56 62 60 51 45 49 55 66 71 72 66 63 59 55 61 57 54 58 54 60 78 97 106 117 116 116 114 114 112 113 113 113 112 112 115 119 123 130 128 120 106 93 89 94 101 99 90 83 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 103 103 102 101 98 90 83 77 72 69 65 64 63 63 63 63 72 74 67 75 92 96 128 189 217 224 226 229 226 215 203 201 199 203 204 205 205 206 209 211 210 210 210 210 209 209 209 206 187 182 177 168 154 148 149 156 174 179 186 193 205 215 226 234 232 232 221 201 187 180 176 169 171 169 164 160 155 150 147 146 150 152 153 154 155 156 158 161 162 165 171 176 182 190 197 204 218 224 226 226 226 222 218 215 216 210 199 187 178 170 166 159 153 146 145 141 139 136 135 133 128 125 124 124 124 123 121 120 119 139 151 147 142 145 147 142 152 152 145 144 151 149 148 147 93 73 65 66 62 55 50 52 52 72 90 87 77 68 65 61 58 62 59 58 59 52 59 80 99 108 117 115 114 112 114 113 112 113 114 114 115 118 123 127 130 120 106 96 94 97 102 104 100 91 84 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 104 104 103 103 100 94 85 79 73 69 66 64 63 62 62 61 66 65 64 72 77 82 124 185 201 221 234 230 226 226 219 209 205 206 207 207 207 206 205 205 206 208 208 208 208 208 208 205 201 197 188 174 159 150 150 155 168 180 195 209 222 230 233 234 224 219 208 190 175 171 165 159 159 156 151 149 143 139 135 136 142 143 146 145 148 148 150 153 159 161 164 168 173 178 184 189 202 208 211 213 215 214 212 209 202 195 185 176 169 164 159 153 146 140 138 136 134 132 131 129 126 124 123 121 120 119 117 119 128 144 152 145 140 143 146 144 147 152 152 151 156 148 142 138 93 88 95 90 73 54 52 60 79 89 95 87 74 66 63 60 57 61 58 57 60 53 59 80 100 108 117 116 114 113 114 113 115 114 112 113 116 120 124 127 123 111 99 93 97 101 101 99 100 91 84 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106 108 107 105 105 102 97 89 83 77 72 68 65 65 63 62 61 62 58 66 73 69 84 132 181 179 214 239 236 230 235 232 219 203 201 201 201 203 202 200 200 202 203 203 203 203 204 204 203 194 190 182 173 161 158 160 167 188 199 214 225 231 233 229 223 216 209 195 177 166 161 156 152 149 146 143 138 133 130 126 129 132 136 137 137 139 139 142 143 150 152 155 158 162 167 170 175 185 190 193 196 197 197 195 193 182 178 170 163 158 155 152 148 141 136 135 132 130 128 128 127 125 122 122 119 118 117 116 118 136 148 150 142 136 141 145 146 146 153 153 154 154 147 141 141 129 126 128 108 76 54 61 76 101 101 93 80 69 63 61 58 56 59 56 57 61 54 60 80 100 109 118 116 115 113 114 112 117 112 110 112 117 121 125 124 112 102 92 92 101 105 102 95 99 90 83 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 107 107 107 107 107 107 107 107 110 109 106 106 104 101 95 89 82 77 71 68 67 66 64 62 63 60 71 76 77 110 152 167 158 197 229 239 237 237 234 227 205 199 197 197 200 202 203 205 209 209 210 210 211 211 211 211 211 209 203 198 194 195 199 206 217 221 226 228 228 226 224 220 214 202 189 173 161 155 151 148 142 140 138 133 130 125 123 124 128 131 131 132 132 133 135 136 137 140 143 147 150 156 160 163 170 173 175 176 176 176 175 174 168 165 158 155 149 146 145 142 136 133 131 129 127 126 125 125 124 122 121 119 115 113 114 117 140 146 145 138 135 139 147 151 150 155 152 148 150 144 144 151 148 133 117 89 67 63 80 99 101 92 78 67 63 62 61 59 55 58 55 57 61 55 60 79 98 108 118 117 116 114 114 111 113 111 111 115 122 124 122 117 99 94 91 95 103 106 102 96 98 89 82 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 107 107 107 107 107 107 107 107 111 110 107 107 107 104 100 96 88 82 78 73 71 68 66 63 64 65 77 83 101 148 170 153 155 179 214 241 245 235 232 233 217 211 205 203 206 210 213 215 218 218 221 221 222 222 224 224 235 232 227 220 216 216 219 224 224 225 227 226 228 226 228 224 218 203 188 174 163 153 147 146 141 138 137 132 130 128 125 125 127 128 128 128 128 129 129 131 130 132 134 138 140 144 146 148 155 158 159 160 161 162 162 162 159 156 152 148 143 140 137 135 132 130 129 128 125 125 124 123 122 121 120 118 113 111 113 116 140 141 137 132 133 140 147 152 152 156 152 147 146 136 131 134 110 90 74 65 73 87 100 106 88 76 63 58 60 62 60 58 56 58 54 56 62 55 59 76 95 105 116 116 116 114 115 112 110 109 112 119 124 122 114 105 90 92 97 101 103 103 104 102 99 89 82 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 111 110 107 108 108 107 103 100 94 89 83 77 75 71 69 64 61 66 81 98 129 169 178 155 175 184 208 242 254 243 237 242 227 218 212 208 209 212 214 214 217 218 220 221 222 222 224 224 226 225 220 217 214 215 216 219 224 228 230 232 231 228 223 219 221 205 188 175 165 153 146 144 140 137 136 134 132 129 129 128 128 127 127 127 127 127 127 127 128 129 131 131 133 132 133 133 141 143 145 148 151 154 158 159 153 150 147 144 138 135 132 130 130 129 127 126 123 123 123 122 120 120 119 115 112 111 114 118 139 137 132 130 133 139 146 151 147 153 151 149 144 123 102 96 69 62 63 74 95 107 101 88 77 64 54 55 61 61 58 55 56 58 54 56 62 55 57 73 91 101 114 115 115 114 115 112 109 111 115 120 122 115 105 96 89 94 101 103 102 101 103 104 97 88 81 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 111 109 107 108 109 108 105 102 98 94 88 82 79 74 73 65 60 66 86 122 163 178 180 183 197 193 200 222 241 242 233 228 219 213 207 205 207 208 208 205 210 210 212 213 215 216 217 218 221 221 222 221 223 224 227 229 231 234 236 236 231 226 219 214 219 204 188 177 169 155 147 145 139 139 138 137 136 135 136 133 128 125 125 125 125 125 125 124 124 124 126 126 125 125 126 126 131 131 135 137 141 145 149 150 146 145 141 138 135 131 128 126 128 128 126 125 124 122 122 121 117 118 118 114 111 111 115 120 138 134 129 130 133 137 142 145 146 151 147 145 138 110 80 69 65 75 87 96 103 100 86 71 65 55 49 54 61 60 56 55 57 59 54 57 63 55 55 70 86 97 111 113 115 114 116 113 111 113 117 118 115 106 98 91 94 96 99 101 102 102 102 101 96 87 80 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 108 110 109 109 109 109 108 106 103 100 96 90 85 80 77 73 69 65 71 92 137 175 169 169 203 195 189 185 195 216 229 221 205 209 207 205 206 210 210 206 201 207 209 210 212 214 217 220 222 222 223 222 223 225 224 224 225 232 234 232 231 228 228 226 223 215 200 184 177 169 155 146 142 137 136 136 136 136 138 137 136 128 126 126 124 124 124 124 124 120 121 124 124 125 125 125 125 126 127 128 129 132 133 134 134 138 136 136 133 132 128 126 125 125 125 124 121 122 120 120 120 114 117 118 114 110 110 116 120 138 132 128 132 136 140 140 141 149 148 139 132 127 101 71 61 73 90 103 99 89 83 78 74 58 48 44 53 61 60 58 57 59 59 55 57 63 56 56 69 85 97 110 114 114 114 115 113 114 117 118 116 111 102 94 91 100 97 96 99 102 103 101 97 96 87 80 105 105 105 106 106 107 107 107 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 110 107 112 116 114 110 106 104 104 103 103 99 91 86 83 78 71 76 74 98 145 182 187 183 185 182 189 194 200 205 208 211 211 205 205 208 211 212 207 206 207 200 201 203 207 212 216 222 222 225 223 223 224 224 225 225 227 227 228 228 227 227 227 227 224 211 197 184 170 160 151 142 134 131 129 129 129 132 135 136 136 133 132 132 129 129 128 128 128 126 126 126 126 126 126 126 126 125 125 126 126 128 128 128 126 128 126 125 124 123 122 120 120 120 120 119 118 118 116 115 113 109 114 110 109 111 109 113 127 133 133 134 136 139 144 148 149 147 141 137 130 111 89 77 79 106 98 89 85 82 77 73 67 55 52 50 54 60 64 64 60 53 51 52 55 57 59 61 60 83 97 110 115 114 114 115 114 117 126 126 112 98 94 94 94 96 98 100 102 101 99 96 94 95 84 75 105 105 105 106 106 107 107 107 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 110 114 113 114 113 114 111 109 106 103 107 111 108 104 99 91 82 80 72 81 107 127 132 136 147 177 184 187 192 192 193 194 194 205 197 192 195 205 209 205 199 202 202 204 208 214 219 223 224 223 223 223 223 224 224 225 225 224 225 224 224 226 226 226 224 213 200 186 172 160 148 138 130 128 126 126 127 131 134 136 137 135 133 132 132 131 130 130 130 127 127 127 127 126 126 126 126 125 125 125 125 125 125 124 124 124 122 122 121 121 121 119 119 119 119 116 115 114 114 112 112 107 113 109 108 111 108 112 126 132 133 136 139 144 148 149 148 138 133 128 123 115 104 102 103 94 88 80 76 75 75 71 67 60 56 54 55 60 63 62 59 52 51 53 54 58 60 62 62 81 94 107 112 112 113 115 115 120 124 120 107 96 93 93 92 96 97 99 101 100 98 96 94 93 82 73 105 105 105 106 106 107 107 107 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 110 113 111 109 109 113 111 108 104 102 112 123 126 127 122 112 101 84 70 67 77 83 85 93 108 110 117 126 135 146 155 165 171 185 183 181 186 198 206 210 207 208 209 211 213 215 219 222 222 222 222 222 221 223 222 223 223 222 222 221 220 221 221 221 220 214 206 195 179 162 148 136 131 130 127 126 127 131 134 135 136 135 132 132 132 130 130 128 128 127 127 126 126 126 126 126 126 125 125 125 125 124 123 123 123 123 123 122 121 120 120 120 120 116 116 115 115 114 113 111 111 106 111 109 107 108 105 109 125 135 135 139 142 145 146 148 145 140 135 126 116 111 111 108 102 81 75 69 68 69 71 71 69 63 60 57 55 58 60 59 57 54 53 54 54 58 60 61 61 77 90 102 108 110 113 117 116 122 119 110 99 92 92 92 90 95 97 98 100 99 97 95 93 91 80 70 105 105 105 106 106 107 107 107 106 106 106 106 106 106 106 106 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 110 114 111 109 107 107 108 108 106 106 120 136 145 149 146 137 125 96 79 68 70 72 70 76 86 80 82 86 89 92 97 101 109 136 157 173 181 188 196 208 216 212 213 214 216 217 219 219 221 222 221 221 221 221 221 221 220 219 218 217 217 218 218 219 217 214 211 201 186 167 152 140 133 131 127 126 127 131 132 135 136 132 132 132 131 130 130 127 127 127 127 126 126 126 126 126 126 125 124 125 123 123 123 123 120 123 121 121 121 120 120 120 118 115 115 115 114 113 111 111 109 106 111 108 104 107 104 108 124 138 140 141 143 144 145 144 140 137 133 121 105 100 100 92 78 69 65 61 60 63 67 70 71 66 62 58 57 57 57 56 55 55 54 54 54 58 59 60 60 74 86 98 106 110 115 119 120 123 114 101 92 90 92 92 90 95 96 97 98 97 96 94 93 90 78 69 104 104 104 105 105 106 106 106 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 114 116 115 109 106 108 115 122 129 144 160 168 171 168 163 153 122 99 79 71 69 66 66 69 75 74 71 68 65 65 64 70 85 113 142 160 175 191 204 211 213 215 216 217 218 218 218 218 221 221 221 219 219 219 219 217 218 217 214 213 213 213 213 214 212 211 206 193 174 158 145 138 132 129 128 128 129 132 134 135 132 131 130 130 130 129 127 127 126 126 126 126 125 125 125 125 124 122 124 121 121 120 120 118 121 121 120 118 118 117 117 116 114 113 113 112 111 110 110 109 106 109 106 104 106 102 106 125 141 143 144 144 144 142 138 131 123 118 107 93 89 89 79 63 58 55 52 53 56 61 67 69 66 63 60 58 56 55 53 52 53 53 54 54 57 58 59 59 71 82 96 105 111 117 121 121 120 110 96 90 91 94 94 93 96 97 98 98 97 96 95 94 87 76 66 104 104 104 105 105 106 106 106 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 107 110 112 108 107 114 132 145 167 181 196 201 201 197 192 185 164 136 102 80 70 62 59 58 56 56 56 58 60 64 67 71 64 83 104 129 163 192 204 202 211 214 216 218 219 219 220 220 221 221 219 219 218 218 218 217 217 215 214 212 211 210 211 212 212 213 208 198 182 165 150 140 134 130 129 128 129 131 132 133 130 130 130 130 129 127 127 126 126 126 126 126 125 125 125 125 122 122 121 121 120 118 118 116 119 117 117 115 116 115 114 114 113 113 112 111 110 109 108 106 104 108 105 102 104 101 105 123 142 146 145 143 141 135 129 124 115 107 96 86 80 74 64 52 51 50 48 48 50 53 57 60 63 63 62 58 58 53 51 49 51 51 52 52 56 57 59 59 67 79 93 105 112 119 121 119 113 102 90 88 92 93 93 94 96 96 96 96 96 95 94 93 85 74 65 104 104 104 105 105 106 106 106 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 106 106 107 107 117 136 159 176 195 211 226 231 231 227 222 217 206 184 151 121 95 75 64 59 62 61 61 59 59 58 57 58 63 69 81 99 137 177 199 202 205 209 213 216 219 221 224 223 222 221 221 220 220 219 219 217 218 216 213 212 211 210 211 212 217 217 209 200 188 172 153 140 137 131 129 128 129 131 131 132 130 130 130 129 127 127 126 125 126 126 125 125 125 125 125 125 122 121 120 120 119 116 115 114 116 115 114 113 114 112 112 112 111 111 110 110 109 108 107 105 103 107 104 101 104 98 102 122 144 146 145 142 136 129 120 114 107 94 82 75 67 57 50 48 49 49 48 47 47 48 50 52 57 59 61 60 59 54 51 49 46 48 49 50 55 57 58 58 63 75 91 104 113 119 119 115 103 94 85 87 91 91 91 93 95 95 95 95 94 94 93 93 85 74 64 104 104 104 105 105 106 106 106 105 105 105 105 105 105 105 105 107 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 112 110 108 116 135 161 188 206 207 224 242 250 251 247 241 240 232 221 193 162 125 94 75 67 65 65 64 66 65 66 67 65 59 66 71 76 102 145 181 199 192 199 206 211 216 222 225 226 221 219 219 220 220 219 219 219 220 217 215 212 212 211 210 213 221 219 210 202 191 176 156 139 138 133 130 128 129 129 131 132 130 130 130 127 127 126 125 125 126 126 125 125 125 125 125 123 121 119 120 117 116 115 114 113 114 113 112 110 112 109 111 111 111 111 110 109 108 106 105 104 102 107 104 99 101 98 101 120 142 146 142 138 131 122 113 104 90 73 63 62 57 48 47 54 52 53 53 52 50 48 48 49 54 58 61 62 60 55 50 49 44 46 48 49 54 56 58 58 60 73 89 103 112 118 117 112 96 88 83 87 91 89 89 92 95 95 94 94 94 93 93 93 83 72 63 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 106 107 107 107 108 108 109 109 109 109 109 109 109 109 109 109 108 105 103 118 147 175 196 218 234 243 246 252 255 255 255 252 253 247 242 224 198 170 136 98 69 68 67 70 71 70 67 70 73 65 66 70 75 101 147 198 233 211 199 191 195 210 219 225 225 220 220 217 210 215 225 225 216 218 218 217 215 215 212 209 211 222 219 211 202 190 176 159 144 140 135 131 129 128 127 129 129 127 127 127 126 126 124 124 124 124 124 124 124 122 122 122 122 121 119 119 117 116 113 112 112 111 109 109 108 109 108 109 109 105 109 112 111 107 103 103 104 101 105 100 93 96 95 98 115 140 143 136 129 125 118 102 84 68 62 58 53 52 51 52 52 54 55 54 52 51 49 47 46 46 50 54 58 58 56 52 49 42 44 45 46 52 55 58 58 54 68 87 104 115 119 114 107 91 88 84 84 87 90 91 90 94 98 98 94 92 95 96 94 83 70 61 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 107 107 107 108 108 109 109 109 109 109 109 109 109 109 109 108 103 111 134 164 193 214 234 247 247 248 252 254 255 255 255 255 255 251 237 215 192 164 130 103 76 71 69 71 72 73 76 75 66 71 81 96 124 166 207 232 255 234 201 188 199 213 219 216 213 210 215 219 218 212 214 221 217 217 218 218 217 214 212 212 220 219 211 203 191 177 160 146 140 135 131 129 128 127 129 129 127 127 127 126 125 124 124 124 124 124 124 124 122 123 123 122 119 117 117 115 114 110 111 109 109 108 108 108 108 106 108 108 107 110 111 110 108 105 103 101 99 100 95 94 98 94 96 112 129 135 135 126 114 100 81 62 58 54 53 51 52 52 53 55 55 55 55 53 52 49 47 47 46 49 52 56 57 56 52 52 46 46 46 45 50 52 56 57 55 68 87 104 116 119 112 103 89 87 84 84 86 89 89 89 91 95 95 92 91 94 94 94 82 70 59 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 107 107 107 108 108 109 109 109 109 109 109 109 109 110 110 108 101 121 151 178 205 228 244 250 251 252 253 254 255 255 255 255 254 250 239 225 210 188 160 135 96 81 68 68 74 76 75 73 68 84 107 130 157 192 219 234 248 255 255 234 190 177 198 219 216 207 202 204 210 214 216 217 214 216 217 217 217 214 213 213 217 217 210 203 192 178 161 147 142 137 131 129 127 126 128 128 127 127 126 125 125 124 123 123 125 125 123 123 123 123 122 120 116 113 114 111 110 108 108 107 108 106 106 106 106 105 106 106 110 109 109 109 109 105 102 99 100 97 93 95 99 92 95 115 125 129 126 112 94 79 63 52 50 48 49 50 52 52 53 55 55 55 54 53 53 50 48 48 46 48 50 54 55 56 56 57 52 51 47 44 47 49 53 54 54 68 89 107 119 119 108 95 87 87 84 84 86 88 89 89 90 93 95 93 93 95 94 90 78 65 54 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 106 107 107 108 108 109 109 109 109 109 109 110 110 110 110 109 106 131 163 185 208 229 243 245 251 251 252 252 253 254 255 255 248 244 238 230 221 206 182 161 128 102 77 70 72 75 72 68 80 106 139 164 183 203 223 234 247 255 255 255 245 227 200 176 194 200 199 195 199 211 213 207 210 212 213 216 214 214 213 213 214 213 210 204 192 178 162 149 142 137 131 129 127 126 128 128 127 127 126 125 125 124 123 123 126 126 124 123 123 123 122 120 114 111 111 109 108 107 106 104 105 105 105 104 104 104 104 104 109 108 106 105 106 106 102 97 101 97 93 97 98 89 97 121 129 118 105 87 73 64 58 56 48 47 51 52 53 53 54 54 55 54 54 52 51 51 49 49 46 47 48 50 53 55 59 60 57 55 50 45 46 47 50 52 52 69 93 114 123 119 102 85 83 84 83 83 84 85 86 86 87 91 93 92 94 95 92 87 73 61 49 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 105 106 107 107 108 108 109 109 109 109 109 109 110 110 111 111 110 113 135 164 183 205 227 242 244 248 250 251 253 252 250 249 246 246 243 240 238 233 222 202 182 157 125 89 71 70 70 67 65 98 133 170 192 203 213 230 241 249 250 251 255 255 255 233 182 164 178 192 199 197 190 193 202 203 206 209 210 211 211 211 211 211 210 208 201 189 175 160 149 142 137 131 129 127 126 127 127 126 126 126 125 124 123 123 123 124 124 124 123 122 121 121 119 110 109 108 108 107 104 104 104 105 104 104 103 103 103 103 104 107 104 102 103 105 104 101 98 99 98 95 93 93 86 98 123 116 97 78 65 61 59 57 57 51 51 53 54 54 55 53 52 54 52 51 51 51 50 49 49 46 46 47 48 51 54 58 60 61 58 53 48 48 47 49 49 50 71 98 119 124 113 92 74 79 81 81 81 81 81 83 83 87 91 93 93 95 95 90 82 65 54 43 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 105 106 107 107 108 108 109 109 109 109 109 110 110 111 112 112 110 108 122 147 171 196 220 237 244 245 246 250 251 251 248 245 241 244 244 244 243 242 233 216 197 177 143 101 77 71 70 71 74 122 158 195 215 222 230 243 252 243 254 255 255 255 255 255 255 212 181 162 178 190 182 182 199 199 202 205 208 208 208 208 208 210 210 206 197 184 170 158 149 142 137 131 129 127 126 127 127 126 126 126 125 124 123 123 123 124 123 123 122 121 120 119 117 110 108 108 106 105 105 104 103 103 103 102 102 102 102 102 102 104 104 103 103 103 104 103 102 97 101 94 92 96 97 105 117 88 69 60 57 59 56 53 51 54 53 55 54 54 53 53 51 50 49 50 49 49 49 49 49 46 46 46 47 48 51 54 55 60 58 56 53 52 50 49 48 48 72 101 117 116 102 82 66 75 78 80 80 78 78 79 81 86 90 93 94 95 95 86 78 59 48 38 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 105 106 107 107 108 108 109 109 109 109 109 110 110 111 112 113 111 104 109 133 163 191 211 229 240 242 245 248 250 252 250 248 246 246 247 250 252 253 247 231 213 192 158 117 90 80 83 91 99 146 176 210 230 242 249 255 255 255 255 249 247 251 255 255 255 255 234 183 168 174 183 185 191 195 198 202 203 205 204 203 204 209 208 204 194 179 166 156 149 140 135 133 129 127 126 127 127 126 126 126 125 124 123 123 123 123 123 121 120 119 118 118 115 110 106 106 106 106 104 104 104 103 102 102 102 100 100 100 102 103 104 105 105 104 105 106 108 103 107 98 97 111 120 116 110 67 53 52 56 56 52 49 50 53 53 53 52 52 52 52 51 47 46 48 46 46 46 48 48 49 48 48 47 48 49 51 52 57 58 59 58 58 54 50 47 50 73 99 109 102 87 73 63 72 76 78 78 76 76 77 79 85 89 91 93 94 92 81 71 54 43 34 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 105 106 106 106 108 108 109 109 109 109 108 109 110 111 110 111 109 107 109 131 165 195 213 230 244 244 247 249 250 252 252 252 253 251 254 255 255 255 255 239 221 193 162 124 98 88 93 109 124 165 187 215 235 250 255 255 254 253 250 250 251 250 244 247 255 255 255 250 188 157 171 183 177 192 198 201 202 202 201 199 200 207 205 199 188 173 159 149 145 138 132 130 129 127 126 128 128 126 126 126 125 124 123 123 123 122 122 120 119 118 117 117 113 109 107 106 106 105 105 105 104 103 102 103 102 102 102 102 102 102 106 109 107 106 106 109 111 108 111 100 99 122 134 121 98 62 51 52 55 52 47 50 57 51 50 50 48 49 50 52 52 46 44 47 45 47 47 47 47 49 48 48 47 47 47 48 48 55 57 60 61 59 56 50 45 50 74 99 104 93 79 70 65 72 75 78 78 75 74 76 78 84 87 90 91 93 90 78 67 50 41 31 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 106 106 108 108 109 109 109 103 106 110 111 104 102 115 129 137 149 170 194 215 233 245 248 252 254 255 253 250 249 250 251 249 250 249 252 254 249 233 213 186 152 113 95 98 114 132 145 180 202 226 240 247 251 253 252 255 254 254 253 254 254 254 254 251 255 255 255 215 163 155 178 193 195 198 201 205 206 203 202 198 195 190 181 166 154 144 139 133 129 127 127 128 128 129 129 127 126 124 123 122 122 119 118 119 119 119 119 118 117 113 110 108 105 105 104 104 103 103 103 102 103 105 105 104 103 101 101 104 106 109 107 106 105 105 107 103 106 100 118 126 138 140 82 55 52 52 51 51 51 50 50 49 49 51 48 50 47 49 47 47 46 47 46 47 47 47 47 48 47 47 46 46 47 47 47 49 51 54 56 57 55 53 51 52 68 87 91 80 69 64 66 73 75 75 75 74 74 76 79 85 89 92 93 93 87 72 59 37 38 36 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 107 108 109 109 109 105 106 109 106 103 108 126 144 167 183 208 225 241 250 255 255 254 255 255 254 251 248 246 247 247 248 248 247 249 242 223 204 180 145 107 89 95 116 140 157 191 211 231 243 247 251 252 251 254 254 254 254 254 254 254 251 241 237 247 255 255 239 196 164 176 186 193 196 194 188 190 196 196 195 191 180 166 153 144 138 130 127 126 124 126 127 128 128 125 125 122 122 121 120 118 118 117 118 116 116 116 114 111 109 108 105 106 104 105 104 103 103 101 101 103 104 106 106 106 107 107 108 107 107 107 106 106 105 103 107 103 117 129 140 134 75 54 51 51 51 50 50 50 49 49 49 49 48 48 47 47 47 47 47 47 47 47 47 47 47 48 47 46 46 46 46 47 47 46 47 49 52 54 54 54 53 54 67 80 82 73 65 66 69 74 74 75 75 73 72 73 74 83 88 92 93 91 84 67 54 38 39 37 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 107 108 109 109 109 109 107 109 106 107 119 145 167 190 209 235 246 253 254 255 255 254 255 255 253 250 245 241 241 244 245 246 245 245 238 219 201 176 147 117 107 116 136 159 174 205 222 239 248 251 254 254 253 254 254 254 254 254 254 254 253 245 251 254 255 255 255 248 215 147 164 168 167 183 207 206 189 196 198 195 185 170 157 149 144 134 129 126 123 122 122 122 122 120 120 119 119 117 116 116 116 114 114 114 114 111 110 108 107 108 106 108 106 107 105 105 104 103 103 102 103 104 105 107 107 108 106 105 104 107 106 105 102 102 108 106 117 134 145 128 69 53 50 50 50 49 49 49 48 49 49 49 48 48 47 47 47 47 47 47 47 47 47 47 47 47 47 46 45 45 46 47 46 43 43 45 47 50 52 54 55 56 63 69 67 59 56 62 68 74 74 76 75 73 71 70 71 82 88 93 94 90 80 61 46 38 39 37 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 107 108 109 109 109 110 108 108 108 112 128 158 185 195 218 244 250 251 251 253 251 255 255 255 251 245 238 233 231 237 240 241 241 242 234 216 199 178 161 145 144 156 170 182 192 220 233 246 251 253 255 255 253 254 254 254 254 254 254 254 254 251 255 255 245 246 255 255 255 232 183 148 163 185 184 180 190 193 198 197 188 173 161 152 149 139 133 128 124 121 119 117 118 118 118 118 117 115 114 114 113 111 111 111 110 107 106 106 105 109 110 109 108 108 107 105 105 108 106 104 102 102 102 104 102 106 102 101 102 104 105 102 99 99 104 105 115 133 143 112 57 52 50 49 49 49 48 48 48 49 49 49 48 48 47 47 47 46 46 46 46 46 46 46 46 46 46 45 45 45 45 46 45 42 41 42 43 46 49 52 53 54 58 60 56 50 50 56 62 68 69 75 74 75 71 72 70 83 88 96 94 90 76 57 41 38 37 35 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 107 108 109 109 109 108 107 110 111 116 133 164 191 205 229 251 251 250 252 255 253 255 255 254 247 239 231 224 222 231 234 237 236 238 232 218 204 194 183 177 182 193 201 210 217 232 242 250 252 253 255 255 252 254 254 254 254 254 254 254 255 255 255 250 248 252 254 254 253 255 245 196 157 151 165 180 186 189 196 195 188 176 166 157 152 143 137 130 124 119 115 114 115 113 115 115 114 114 114 112 111 110 109 108 107 106 105 105 106 110 112 112 109 109 108 105 105 108 107 104 101 101 101 101 100 102 99 99 100 100 100 98 95 94 101 106 114 132 132 91 51 50 50 49 49 49 48 48 48 49 49 49 48 48 47 47 47 46 46 46 46 46 46 46 46 45 45 44 44 44 44 45 44 44 43 42 42 43 46 48 50 50 53 54 53 49 49 53 56 61 64 70 72 74 73 75 75 84 91 99 97 89 74 54 38 36 36 34 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 107 108 109 109 108 106 107 108 111 115 129 159 184 213 236 251 251 250 253 255 253 255 255 252 243 235 227 221 220 228 231 233 234 235 232 223 211 211 204 203 208 215 224 234 240 243 249 253 253 253 255 254 252 254 254 254 254 254 254 254 255 255 255 253 254 249 246 237 240 235 255 255 204 163 161 170 173 182 188 189 185 178 169 161 153 149 142 133 125 120 115 112 112 112 113 113 113 113 112 111 111 111 110 109 107 104 104 104 108 111 113 112 112 109 108 106 105 104 103 101 101 100 101 102 100 94 97 99 100 99 96 93 93 93 98 109 115 128 118 70 52 51 50 50 50 49 49 49 48 49 49 49 48 48 47 47 47 45 45 45 45 45 45 45 45 45 44 43 43 43 43 44 44 46 44 42 42 42 43 45 46 45 48 52 53 52 51 51 51 55 57 64 66 71 72 77 77 85 92 100 96 88 71 52 36 36 36 34 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 106 106 107 108 109 108 108 108 108 107 107 108 121 149 174 209 233 251 248 248 254 255 249 255 254 249 241 233 227 223 224 228 231 232 231 232 231 224 215 218 217 222 230 238 243 250 255 250 254 255 253 253 255 255 252 254 254 254 254 254 254 254 255 255 255 255 252 245 234 234 242 245 239 255 255 242 171 143 170 175 179 179 179 177 172 162 154 150 143 136 129 122 117 113 113 112 113 113 113 113 113 112 112 113 112 110 108 105 106 106 110 111 114 112 112 110 108 106 105 100 100 99 100 100 99 99 95 90 95 103 104 99 94 91 92 93 93 110 116 124 99 50 54 51 51 51 51 50 50 50 49 49 49 49 48 48 47 47 47 45 45 45 45 45 45 45 45 44 44 43 42 42 43 44 43 45 43 42 42 43 43 44 45 44 47 50 54 55 55 53 52 50 52 58 61 65 68 74 76 84 92 99 94 85 68 50 35 38 38 36 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 106 106 106 107 108 109 108 108 111 109 106 103 102 114 142 168 201 226 247 246 249 254 255 249 255 253 248 240 233 229 227 229 230 233 234 232 232 232 225 216 216 221 234 248 255 255 255 255 254 255 255 254 254 255 255 253 254 254 254 254 254 254 254 255 255 255 251 247 245 243 240 237 240 251 255 255 255 255 216 170 164 169 168 169 173 169 161 151 149 143 137 131 125 119 116 115 113 113 115 113 113 113 113 112 115 113 111 109 108 106 109 111 111 113 111 109 109 105 104 102 102 100 100 98 96 93 92 87 84 91 102 105 98 90 90 92 90 88 107 115 117 85 38 56 51 52 52 51 51 51 50 50 49 49 49 48 48 47 47 47 45 45 45 45 45 45 45 45 44 43 43 42 42 43 43 44 43 41 42 43 43 44 45 45 44 46 50 54 57 57 55 54 48 50 53 57 60 64 70 74 82 91 97 92 81 66 47 34 42 40 38 104 104 104 104 104 104 104 104 105 105 105 105 105 105 105 105 107 107 107 108 109 110 109 109 113 107 107 107 106 112 135 159 187 208 234 246 252 254 255 254 255 254 250 246 244 240 234 231 240 237 235 236 232 225 221 222 224 231 241 249 253 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 254 252 250 249 249 254 254 254 255 255 255 255 255 182 162 147 155 165 160 154 155 142 141 135 128 121 116 115 115 114 114 116 115 117 117 116 113 115 113 113 113 112 110 111 111 107 109 108 108 108 104 103 99 99 94 100 99 84 78 77 64 87 80 75 79 93 105 101 86 88 93 111 122 100 61 45 50 52 53 52 52 52 51 51 51 51 51 51 50 49 49 49 48 49 49 48 48 47 47 47 47 44 44 44 44 44 44 43 43 46 45 45 44 45 45 46 46 43 45 48 53 57 61 63 63 55 53 51 49 50 57 66 73 79 86 93 89 76 60 47 41 42 41 40 104 104 104 104 104 104 104 104 105 105 105 105 105 105 105 105 107 107 107 108 109 110 109 107 111 106 107 107 106 113 137 163 190 210 235 247 253 254 255 254 255 254 251 247 244 240 234 232 234 230 228 230 227 223 222 223 230 236 245 250 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 250 250 253 253 253 253 255 255 255 255 255 255 255 255 254 255 255 217 163 142 146 152 152 150 138 137 135 131 126 122 118 115 117 115 117 117 116 111 112 115 113 112 112 110 111 109 110 109 107 108 109 107 106 103 101 98 100 91 94 94 78 70 71 62 76 71 68 68 77 92 98 96 89 100 115 115 88 58 47 55 54 54 54 54 53 53 53 53 53 53 53 52 52 51 51 51 50 50 50 49 49 49 48 48 46 46 45 45 44 44 43 43 42 42 41 41 41 42 43 44 46 45 46 48 52 57 63 66 59 58 55 52 51 54 60 64 76 83 89 87 76 61 49 43 44 43 42 104 104 104 104 104 104 104 104 105 105 105 105 105 105 105 105 107 107 108 109 109 110 109 107 109 105 106 107 105 113 138 165 191 212 237 247 252 253 255 254 255 253 250 247 244 239 231 229 226 222 221 222 222 221 224 228 237 242 249 254 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 246 246 250 253 255 255 255 255 255 255 255 255 255 255 250 250 254 255 255 223 168 132 131 145 148 139 127 118 117 118 121 120 113 110 113 116 115 111 113 120 110 109 109 107 108 106 108 106 103 103 103 103 101 99 96 94 98 85 90 96 82 67 69 70 65 66 65 60 63 78 95 105 97 110 118 103 74 52 52 61 56 56 56 56 55 55 55 54 56 56 55 55 55 54 54 54 53 52 52 52 51 51 51 50 48 48 47 46 45 44 43 43 41 41 41 41 41 42 43 44 49 47 44 44 47 54 61 65 64 62 60 56 52 50 51 53 68 75 81 81 72 60 50 46 46 46 45 103 103 104 104 104 104 105 105 105 105 105 105 105 105 105 105 107 107 108 109 109 109 109 106 107 105 106 106 104 109 136 166 191 211 235 246 252 253 255 255 254 253 250 247 244 238 229 226 219 215 214 217 221 222 229 236 247 250 255 255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 247 247 250 253 255 255 255 255 255 255 255 255 255 255 250 250 255 255 253 255 255 238 176 118 117 117 119 123 125 120 107 98 123 115 113 115 111 103 100 103 105 105 105 103 102 102 102 101 98 98 96 95 95 91 90 87 88 79 92 111 99 77 73 73 62 63 64 60 60 70 88 100 109 120 116 91 64 54 56 60 57 57 57 56 56 55 55 55 57 56 56 56 56 56 56 56 55 55 55 54 54 54 53 53 51 51 49 48 47 45 44 44 43 43 42 42 43 44 45 45 48 46 43 43 45 50 56 59 64 64 64 61 56 51 49 48 60 66 72 73 68 59 50 46 45 47 46 103 103 103 104 104 105 105 105 105 105 105 105 105 105 105 105 107 108 108 109 109 109 109 106 107 105 105 103 100 106 133 163 189 210 234 244 251 253 255 255 255 255 254 251 247 240 230 226 217 213 210 212 218 224 234 244 253 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 250 250 252 255 255 255 255 255 255 255 255 255 255 255 253 252 244 255 255 255 255 255 246 228 208 183 146 118 104 104 109 112 108 105 103 106 110 110 111 111 101 99 99 99 99 99 98 96 93 92 92 90 90 87 84 82 80 78 102 126 114 86 74 71 60 60 63 65 65 68 77 84 120 123 110 85 67 63 62 58 59 57 57 56 56 55 55 55 56 56 56 56 56 56 56 56 57 57 57 56 56 56 55 55 54 53 52 51 50 48 47 47 45 45 44 43 43 44 45 45 44 44 44 44 46 48 51 52 59 61 64 64 60 55 52 50 54 58 64 66 63 56 49 45 45 46 45 102 102 103 104 104 105 106 106 105 105 105 105 105 105 105 105 108 108 108 109 109 109 109 106 107 105 105 103 98 103 130 163 192 212 235 245 251 253 255 255 255 255 255 255 250 242 231 226 215 209 205 206 214 222 236 247 255 255 255 255 255 253 253 253 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 254 254 254 254 254 253 253 251 252 254 255 255 254 254 254 251 255 254 249 253 255 255 255 255 252 242 226 205 179 155 140 122 125 116 97 87 89 91 88 96 96 96 95 96 96 96 93 92 92 92 89 88 85 82 81 78 81 105 124 109 83 70 62 60 60 63 68 69 68 72 76 121 116 102 84 76 75 70 60 60 57 57 57 56 56 56 56 55 55 56 56 56 56 57 57 58 58 58 58 57 57 57 56 56 56 55 54 53 52 51 51 47 46 45 44 43 43 43 43 43 44 45 46 47 47 47 45 51 55 61 64 63 60 57 56 53 56 60 62 60 55 49 45 44 46 45 102 102 103 104 104 105 106 106 105 105 105 105 105 105 105 105 108 108 108 109 109 109 109 106 106 104 104 102 99 104 133 165 199 218 240 248 252 253 255 255 255 255 255 252 248 239 226 221 213 206 201 202 208 218 233 246 255 255 255 255 254 252 251 252 253 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 253 250 247 246 245 243 245 250 253 255 255 255 255 252 254 255 255 255 252 248 245 255 255 255 255 255 255 251 248 249 255 227 165 116 101 98 92 94 92 92 93 93 94 94 92 89 87 87 86 85 83 80 78 77 80 96 102 85 69 65 60 63 63 67 72 72 70 79 89 113 106 97 91 89 84 77 66 61 59 59 59 58 58 58 57 56 56 56 57 57 58 58 58 59 59 59 58 58 57 57 57 58 58 57 57 56 56 55 55 52 50 49 47 45 44 43 43 44 44 45 46 46 46 45 43 43 47 54 59 61 60 58 58 53 55 58 60 58 54 48 45 45 46 45 99 99 100 101 101 104 105 105 104 105 105 105 105 105 105 107 107 107 108 108 109 109 107 106 105 104 104 103 100 106 137 170 205 223 242 250 251 253 254 254 250 250 250 248 244 234 223 217 211 204 197 198 204 214 230 244 253 254 255 254 253 252 251 252 253 254 254 254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 254 252 249 246 244 243 242 245 250 254 255 255 255 255 255 255 255 255 253 251 250 252 244 244 247 247 248 251 255 255 253 255 236 158 96 82 88 88 91 91 90 90 91 91 92 91 85 84 84 81 80 78 75 73 74 76 83 80 64 59 65 63 67 68 72 76 73 74 89 107 102 98 94 95 96 90 83 76 65 64 64 62 62 62 61 61 57 57 57 58 58 58 58 58 59 59 59 58 58 57 57 57 59 59 59 59 58 58 58 58 56 55 52 51 49 47 46 46 46 46 44 44 43 43 44 41 36 41 50 56 59 59 59 59 56 57 59 60 60 55 49 46 46 47 46 92 93 95 96 98 101 103 104 102 104 104 104 106 107 107 108 107 106 109 108 109 106 104 102 102 103 102 98 99 114 150 185 209 224 240 247 247 250 252 252 248 250 249 243 239 236 224 214 216 203 188 188 195 205 219 233 250 253 254 255 254 252 251 252 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 253 253 254 254 251 249 253 251 253 255 255 255 255 255 255 255 254 254 254 251 251 250 252 252 255 255 255 255 255 255 251 255 233 145 86 88 85 83 87 87 85 85 84 84 84 83 81 82 80 80 77 75 72 71 74 70 65 61 62 68 70 68 77 75 70 67 79 94 96 90 89 91 95 95 95 92 88 85 75 71 68 65 64 62 63 63 60 58 58 57 57 55 55 55 58 57 57 56 56 57 57 58 58 58 57 58 59 60 61 62 56 55 55 55 53 51 50 49 46 47 45 45 46 48 54 55 59 59 60 59 59 60 61 61 58 63 68 68 67 64 55 46 45 44 41 89 90 92 93 97 98 103 103 103 103 105 105 107 108 109 109 108 106 107 108 107 106 104 101 104 103 103 102 106 121 156 186 208 224 240 246 249 249 251 249 249 248 246 238 235 230 221 210 203 193 184 187 194 205 219 228 251 253 254 255 254 252 252 252 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 253 253 255 255 254 253 255 255 255 254 245 238 244 250 255 254 253 254 252 251 251 250 252 252 255 254 255 255 255 255 248 254 229 141 83 84 82 81 85 85 84 84 83 83 81 81 81 79 80 78 77 74 72 69 71 69 65 63 66 70 74 74 75 75 82 89 93 87 83 83 85 86 90 91 92 92 90 89 82 80 75 72 67 65 66 63 61 58 58 57 55 55 54 54 58 57 57 56 56 57 57 58 58 58 58 58 59 60 61 60 61 60 60 60 60 58 57 56 55 52 51 48 51 57 66 71 79 76 76 70 66 60 59 58 61 68 74 76 75 72 60 51 43 43 40 89 90 92 94 97 99 103 104 105 105 107 107 108 109 110 110 108 107 107 107 107 106 104 101 104 101 100 103 111 127 157 182 204 221 239 246 249 248 248 245 244 241 236 226 222 216 208 199 192 188 187 194 204 215 227 234 251 253 254 254 253 252 252 253 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 254 252 253 254 255 254 253 255 255 255 249 232 223 234 246 255 254 253 254 252 251 251 250 252 252 255 254 255 255 255 255 249 254 228 138 80 82 82 82 84 85 84 85 84 83 81 80 81 79 80 77 77 74 73 70 72 69 67 66 70 73 79 81 80 85 103 119 112 88 76 78 80 81 84 85 87 88 91 92 89 86 81 77 71 68 67 63 61 58 58 57 55 55 54 54 58 58 57 57 57 57 58 58 58 58 58 58 59 60 62 60 64 63 64 64 65 63 63 62 62 57 54 52 57 66 80 88 94 91 87 77 67 57 54 52 60 69 77 82 82 78 65 56 47 47 44 89 90 92 94 98 100 104 105 107 107 109 108 110 110 111 111 109 107 107 107 106 106 104 102 102 97 95 100 112 127 151 171 199 217 237 245 248 245 243 238 234 228 221 212 208 202 195 189 196 198 203 213 224 234 244 248 252 253 254 254 253 251 252 253 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 253 251 252 254 255 254 253 254 255 255 250 234 227 239 251 255 254 253 254 252 251 251 250 252 252 255 254 255 255 255 255 252 255 228 137 80 82 84 84 84 85 85 85 84 83 80 79 81 79 79 76 76 74 74 71 74 71 70 72 76 78 85 91 103 115 135 144 133 110 90 82 79 78 80 79 82 85 89 91 90 88 84 80 74 71 69 65 61 58 58 57 55 55 54 54 59 58 57 57 57 57 58 59 59 58 58 59 59 61 62 61 61 60 62 62 64 63 63 63 61 57 54 52 57 68 82 91 89 87 84 73 62 51 48 46 54 64 75 82 83 79 65 54 49 48 45 89 90 92 94 98 100 105 106 109 108 110 109 110 110 112 111 109 107 106 106 105 105 104 102 103 97 94 100 112 125 145 161 194 214 234 243 245 242 239 233 227 218 211 204 201 195 190 187 202 209 218 229 238 248 255 255 252 253 253 253 252 251 252 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 252 251 252 254 255 254 253 254 254 255 254 245 239 247 254 255 254 253 254 252 251 251 250 251 251 254 254 255 255 255 255 254 255 229 138 81 84 86 87 84 85 86 86 85 83 79 78 81 79 79 76 76 74 74 73 76 73 74 78 81 82 91 99 129 146 161 157 148 138 115 90 80 78 78 76 78 81 86 88 88 86 83 80 76 73 71 67 61 58 58 57 55 55 54 54 59 59 58 57 57 58 59 59 59 59 59 59 60 61 62 61 59 58 60 60 62 61 62 61 58 55 53 52 57 66 78 85 83 81 79 69 57 46 44 44 49 60 73 80 82 78 63 52 43 43 40 47 47 48 49 49 49 50 50 51 51 51 51 51 51 51 51 50 49 49 48 48 49 49 50 48 48 48 48 48 48 48 48 46 46 46 45 45 44 44 44 44 44 44 44 44 44 44 45 42 44 44 45 46 47 48 48 51 51 52 53 53 54 55 55 58 60 62 64 65 66 67 67 68 68 67 66 67 67 68 69 63 63 64 66 69 72 71 70 71 71 69 71 71 71 72 69 70 67 68 69 67 66 62 61 59 58 58 60 63 64 63 65 61 64 64 63 63 64 63 64 64 65 65 66 64 65 64 65 62 63 63 62 62 61 60 60 63 63 61 61 61 62 63 64 63 62 61 63 66 68 68 68 63 65 70 72 72 65 56 51 53 53 53 51 49 48 48 48 50 50 50 49 49 48 48 49 47 48 47 47 47 47 46 46 44 43 42 41 40 46 54 58 66 73 77 79 87 100 111 116 123 127 134 136 121 97 75 68 74 71 72 81 100 125 145 158 169 168 160 146 124 103 87 78 82 81 81 47 47 48 48 48 49 50 50 51 51 51 51 51 51 51 51 49 49 48 48 48 48 49 49 48 48 48 48 48 48 48 48 46 46 45 45 45 44 44 44 45 45 45 45 45 45 45 46 43 45 45 46 47 48 49 49 51 51 52 52 53 54 55 55 57 59 61 63 64 65 66 66 67 67 65 65 65 66 67 68 62 63 65 67 68 69 69 67 67 65 65 66 68 69 70 67 69 66 67 68 68 66 64 63 59 58 58 60 63 65 64 64 62 64 63 63 63 63 63 64 64 64 65 65 64 65 64 65 62 63 62 62 62 61 60 60 63 62 61 61 61 62 63 64 64 62 62 62 65 68 67 68 65 67 70 73 71 64 57 52 54 54 53 52 50 49 49 49 50 50 50 49 49 48 48 49 47 48 47 47 47 47 46 46 45 44 42 41 41 45 52 56 62 69 74 78 84 97 108 114 123 128 133 132 117 91 72 67 70 71 72 78 89 111 135 153 158 160 157 145 127 107 91 83 83 82 81 46 46 47 48 48 48 49 49 50 50 50 50 50 50 50 50 49 48 47 47 47 47 48 49 48 48 48 48 48 48 48 48 46 45 45 45 44 44 44 44 45 45 45 45 45 45 45 46 45 46 47 48 48 49 49 50 51 51 51 52 53 54 54 55 56 58 60 62 63 64 64 64 64 64 63 63 63 64 65 66 65 65 66 67 67 67 66 65 60 58 59 61 64 68 70 68 67 64 66 66 68 67 65 63 59 58 59 61 64 65 64 64 61 64 64 63 63 63 62 64 63 64 64 65 65 63 64 64 62 62 62 62 61 61 61 61 62 62 60 60 61 61 63 63 65 63 62 62 65 67 68 67 68 70 73 74 71 64 58 53 55 55 54 52 52 51 50 50 50 50 50 49 50 49 49 49 48 49 48 48 47 47 47 46 47 46 44 42 42 45 50 53 57 63 69 73 79 91 102 109 119 125 130 126 109 86 69 65 65 70 72 72 75 91 116 137 140 143 144 138 122 105 91 83 85 84 83 45 46 46 47 47 48 48 48 49 49 49 49 49 49 49 49 47 47 46 46 46 46 47 47 48 48 48 48 48 48 48 48 45 45 45 44 44 44 43 43 46 46 46 46 46 46 46 47 48 48 48 49 49 50 50 50 50 50 51 52 53 53 54 54 55 57 58 60 61 61 62 62 61 62 60 61 61 62 64 65 68 69 68 68 68 66 65 63 57 57 57 60 64 69 72 70 68 65 66 68 67 66 64 63 59 58 59 62 65 66 64 64 61 64 64 64 62 63 63 63 64 63 64 64 64 64 64 63 62 62 62 61 61 61 60 60 61 61 60 60 60 62 62 63 65 63 62 64 66 67 67 66 70 74 76 75 70 64 58 55 56 57 55 55 53 52 51 51 50 50 50 50 50 49 49 50 50 50 49 49 48 48 48 48 49 48 47 44 43 44 48 50 55 59 65 69 72 82 95 105 115 121 125 119 102 82 69 64 64 69 70 67 66 76 94 110 121 125 128 122 111 98 89 84 87 86 86 45 45 45 46 47 48 47 48 47 47 47 47 47 47 47 47 47 47 46 46 46 46 47 47 48 48 48 48 48 48 48 48 46 46 45 45 45 44 44 44 47 47 47 47 47 47 47 47 49 49 49 49 49 50 50 50 50 50 51 51 52 53 54 54 53 54 56 57 58 59 59 59 58 58 58 59 60 61 62 64 71 72 71 70 69 68 66 62 59 58 58 61 66 70 74 73 71 68 68 69 66 65 61 60 58 58 60 63 66 67 65 63 63 63 63 63 62 62 62 63 62 63 63 63 63 63 62 62 62 63 62 62 62 61 61 61 61 61 61 61 60 62 62 63 66 65 64 64 65 67 66 65 67 72 76 74 69 62 57 53 57 56 55 54 53 52 52 51 50 51 51 51 50 50 50 50 50 50 50 50 49 49 48 48 50 49 49 46 44 43 46 47 53 57 61 64 66 75 90 103 112 120 123 115 100 84 71 66 65 66 65 65 66 70 75 80 99 102 105 102 96 91 88 88 89 87 87 44 44 45 45 46 47 47 47 46 46 46 46 46 46 46 45 46 46 45 44 44 45 46 46 46 46 46 46 46 46 46 46 45 45 45 45 44 44 44 43 46 46 46 46 46 46 46 46 49 49 49 49 49 49 49 49 49 50 50 51 52 53 53 53 52 53 54 55 55 57 57 57 57 57 57 58 59 60 62 65 71 72 71 70 69 67 64 62 60 59 59 61 64 70 74 74 72 69 70 69 67 64 62 58 59 58 60 64 67 67 64 62 63 64 63 63 63 62 62 63 62 63 63 62 63 62 62 63 62 62 62 62 61 61 61 60 61 60 60 60 60 61 62 63 66 65 64 66 67 67 66 65 65 73 78 78 71 63 59 54 57 55 55 54 52 52 51 52 51 51 52 51 51 50 50 51 51 51 51 51 50 50 49 49 49 50 50 48 46 45 46 46 52 52 56 60 63 71 89 107 117 124 124 117 104 91 77 66 65 64 61 62 66 67 66 64 71 77 81 81 81 81 85 87 89 89 88 43 43 44 45 46 46 47 47 45 45 45 45 45 45 45 45 45 44 43 43 43 43 44 44 43 43 43 43 43 43 43 43 44 44 44 43 43 43 42 42 45 45 45 45 45 45 45 46 49 49 49 48 48 48 48 48 49 49 50 51 52 52 53 53 51 52 53 54 54 54 54 55 56 56 56 57 59 60 62 64 69 70 69 68 67 66 63 61 61 58 57 59 61 66 70 70 70 70 70 69 68 67 64 62 58 59 60 65 67 68 64 61 63 64 64 63 62 62 61 62 61 63 63 63 63 62 63 62 62 62 62 61 61 61 60 60 60 61 59 60 60 62 61 63 67 66 65 66 67 67 67 67 70 81 88 88 82 73 67 63 57 55 55 54 53 52 51 51 51 51 52 51 51 51 51 51 51 51 51 51 51 51 50 50 48 49 50 49 47 46 46 47 48 48 51 56 60 70 93 115 128 132 131 122 112 101 83 67 63 60 59 62 66 66 65 63 66 72 77 81 81 82 86 88 90 89 88 43 43 44 44 44 46 47 47 45 45 45 45 45 45 45 45 44 43 43 42 42 43 43 44 42 42 42 42 42 42 42 42 44 44 44 43 43 42 42 42 44 44 44 44 44 44 44 44 47 48 48 48 48 48 48 48 49 49 50 51 51 52 53 53 50 51 52 53 53 53 53 53 56 56 56 56 58 61 62 63 67 67 66 65 65 64 62 60 60 57 56 56 58 61 66 66 70 69 70 71 71 70 67 66 59 59 62 66 68 68 64 62 65 65 64 64 64 63 63 62 62 64 63 63 62 63 62 62 62 62 62 61 61 60 60 61 61 60 60 60 60 62 62 63 68 67 66 67 67 68 68 69 80 91 101 102 95 85 77 73 57 56 55 54 52 52 51 51 51 52 52 51 52 51 51 51 51 51 51 51 51 51 50 50 47 48 50 50 48 47 47 47 44 44 48 55 60 73 98 122 138 141 136 128 120 107 87 68 61 60 60 62 65 67 68 69 81 87 94 96 95 94 94 95 91 90 90 45 45 45 46 45 45 45 45 46 46 45 44 44 44 43 43 43 43 43 43 43 43 43 44 43 43 43 43 43 43 43 43 43 43 43 44 44 45 45 46 45 45 45 45 45 45 45 45 44 45 46 47 47 47 47 47 47 47 47 47 48 49 50 52 48 50 51 52 52 53 53 53 52 53 53 54 55 57 58 60 63 64 64 63 62 60 57 54 57 56 56 57 59 61 63 62 65 65 67 69 71 71 69 67 64 66 68 69 68 66 65 66 65 64 63 62 61 61 62 63 60 61 60 62 61 61 61 62 60 60 61 60 60 60 58 59 61 60 60 61 62 64 65 65 69 68 69 73 71 68 69 77 90 102 113 115 114 106 94 81 76 70 62 56 53 52 51 51 51 52 52 52 50 49 49 49 50 50 50 50 49 49 49 49 50 50 49 49 49 49 49 48 43 47 51 52 59 79 109 133 144 150 149 137 122 110 98 91 73 66 62 62 66 73 85 96 113 125 134 127 121 117 107 95 90 90 93 45 45 45 45 45 45 44 45 46 45 44 44 43 43 43 43 42 42 42 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 45 45 45 45 45 45 45 45 45 45 44 44 45 46 47 47 46 46 46 46 46 46 47 48 49 50 48 49 50 52 52 53 53 52 52 52 52 53 54 56 58 59 62 62 61 62 61 59 57 55 55 55 55 57 57 60 60 61 64 65 66 68 69 70 69 68 68 69 70 71 70 67 66 66 67 66 64 63 63 63 62 62 61 62 61 61 61 62 62 61 60 61 60 60 60 59 59 60 60 61 61 61 62 64 65 66 71 69 71 74 73 71 76 84 100 113 126 127 124 115 102 88 78 73 67 61 58 56 52 49 51 51 51 50 49 48 48 48 49 50 49 49 49 49 49 49 50 50 49 49 49 49 49 48 43 45 50 53 63 86 114 136 147 151 150 139 129 121 116 110 95 90 85 87 94 103 118 130 136 146 149 142 134 128 116 101 88 88 91 45 45 45 45 45 46 45 45 45 45 45 44 43 42 42 42 43 42 42 42 41 41 41 41 43 43 43 43 43 43 43 43 42 42 43 43 43 44 44 44 44 44 44 45 45 45 45 46 44 44 45 46 46 46 46 45 45 45 45 45 46 47 48 49 48 49 50 51 51 52 52 52 52 52 52 52 54 55 57 58 59 59 60 61 59 58 55 54 54 54 53 55 57 59 60 60 63 64 64 64 67 68 69 68 70 72 73 73 69 67 66 65 66 65 63 62 62 62 62 63 60 61 60 61 62 61 60 61 60 60 60 59 59 60 58 59 60 60 60 62 63 65 67 68 74 72 72 75 75 76 83 96 115 129 140 142 137 128 113 99 82 78 73 68 64 59 54 49 49 49 48 48 47 47 47 47 47 48 47 47 47 47 47 47 48 48 48 48 48 48 48 47 43 43 47 54 69 94 122 141 148 151 149 142 137 137 139 140 136 131 126 125 126 130 142 153 161 168 165 157 150 141 123 104 86 87 89 46 46 46 46 46 46 46 46 45 45 44 44 42 42 42 42 42 41 41 41 41 40 40 40 42 42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 43 44 44 44 44 45 45 45 43 44 45 45 45 45 44 44 44 44 44 44 45 46 47 48 49 50 51 52 51 51 51 52 51 51 50 51 52 54 55 56 57 57 58 59 58 57 56 53 55 54 54 56 57 58 60 62 63 63 63 63 65 66 68 69 71 72 74 73 70 66 65 64 65 65 63 62 62 62 61 62 60 61 61 61 61 61 61 60 59 59 59 59 59 59 59 59 59 60 60 62 64 67 68 69 76 72 71 74 76 81 93 106 128 143 154 155 149 139 123 109 90 85 79 73 68 61 55 51 49 48 47 45 45 45 46 47 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 45 44 42 45 54 74 102 128 144 147 150 149 144 144 153 164 168 168 164 160 158 153 152 156 163 176 177 173 163 155 146 124 102 86 85 86 47 47 47 47 46 46 46 46 45 45 45 44 44 43 43 43 42 42 42 41 41 40 40 40 42 42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 42 43 43 44 44 45 45 45 43 44 44 44 44 44 43 42 43 43 43 43 44 45 47 48 48 50 51 52 51 51 50 50 50 50 49 49 50 51 53 54 54 56 57 58 57 57 56 53 55 54 55 55 58 60 62 62 64 63 63 63 64 67 67 69 69 71 72 71 68 65 63 64 64 64 63 62 61 60 61 61 60 59 60 60 60 60 60 60 59 58 58 58 58 58 58 58 58 60 61 63 66 68 70 72 75 72 71 76 80 88 102 118 140 153 164 163 157 145 130 117 101 95 85 76 70 64 58 56 49 48 45 44 43 43 45 46 45 45 45 45 45 46 45 46 46 47 46 47 47 47 47 45 44 41 43 54 76 104 131 146 151 154 153 150 155 170 185 192 183 182 183 183 177 171 171 177 179 180 173 162 155 146 122 98 84 84 85 48 48 48 48 47 47 47 47 46 46 46 45 45 45 44 44 43 43 43 42 41 40 40 40 41 41 41 41 41 41 41 41 42 42 41 41 41 40 40 40 42 42 42 43 44 44 45 45 43 43 44 44 43 43 42 41 44 44 43 44 45 46 47 48 49 49 51 52 51 50 50 49 50 49 48 48 49 50 52 52 53 55 57 58 57 56 55 53 53 53 54 56 57 60 62 61 63 62 63 63 66 66 67 68 66 68 69 69 66 63 62 62 63 63 61 61 60 60 60 60 59 60 60 59 59 60 59 59 58 58 57 58 58 57 57 57 60 60 63 65 67 70 73 73 74 71 72 78 86 96 112 131 148 161 168 167 160 150 136 123 112 105 94 83 75 69 64 60 52 50 46 44 41 42 43 44 43 43 43 43 43 44 44 44 45 45 45 45 46 46 46 44 42 40 43 54 75 103 130 147 155 158 159 158 165 180 197 206 201 202 203 200 190 179 176 178 178 178 172 161 153 142 120 95 81 81 81 48 48 48 48 47 47 47 47 47 47 47 47 46 46 45 45 45 44 44 43 42 41 41 40 41 41 41 41 41 41 41 41 41 41 41 40 40 40 39 39 41 41 42 43 44 44 45 45 43 43 43 43 43 42 41 40 44 44 44 44 45 46 48 48 49 50 50 51 51 50 50 49 49 49 48 47 48 48 49 51 54 54 56 57 58 57 55 54 52 52 52 53 56 58 59 59 60 60 62 64 65 66 65 64 62 64 66 66 64 62 61 63 63 63 62 61 59 59 60 60 59 59 59 59 59 58 58 59 57 57 58 57 57 57 56 56 60 61 64 66 69 73 75 77 73 72 74 83 93 104 123 142 156 167 172 170 161 153 139 129 120 114 104 93 84 76 68 63 55 52 48 43 40 40 41 43 41 41 41 41 41 42 42 42 43 43 44 44 44 44 44 43 41 41 45 54 72 99 128 146 156 160 162 161 168 184 200 208 211 210 209 203 189 175 172 176 174 177 171 159 148 136 115 93 79 77 76 47 48 47 47 48 48 48 47 48 48 48 47 47 47 46 45 46 45 45 44 43 42 41 41 41 41 41 41 41 41 41 41 41 41 40 40 40 39 39 38 40 41 42 43 43 45 46 46 44 44 43 43 42 41 40 40 45 45 45 45 46 47 48 49 51 51 52 52 51 50 49 49 49 49 47 47 47 48 49 50 51 54 55 57 58 58 56 54 50 49 50 51 54 57 60 59 61 61 63 64 64 64 63 61 60 62 66 67 66 63 62 62 62 61 61 61 61 61 61 62 60 60 60 59 58 59 59 59 58 59 58 59 59 58 58 58 62 62 64 67 70 74 77 79 73 73 80 92 104 117 135 153 162 170 172 169 162 155 144 136 126 121 112 103 93 82 73 65 56 53 48 43 40 40 41 42 41 42 42 41 41 41 41 41 42 42 43 43 44 44 44 43 41 42 45 54 70 96 124 144 153 158 161 161 167 182 196 203 201 199 198 193 183 173 174 181 171 174 169 156 143 131 110 90 76 74 72 48 48 48 49 49 49 50 49 50 51 51 50 49 49 47 47 48 48 47 46 44 45 44 44 44 44 45 45 44 43 41 41 41 41 40 41 41 41 42 42 43 43 44 45 45 46 47 47 45 45 44 45 46 47 46 46 45 44 45 46 47 49 49 50 52 52 53 53 53 52 51 50 50 49 49 48 47 48 48 49 47 49 51 54 56 55 54 50 45 41 39 41 46 53 60 63 65 64 65 66 64 61 59 56 59 61 65 66 67 65 62 59 59 58 59 61 63 63 63 63 64 63 62 61 60 59 58 59 57 64 60 56 62 62 59 63 59 63 68 72 76 77 79 78 76 84 99 113 125 138 151 159 166 167 168 168 165 161 155 151 142 133 122 116 110 101 88 75 63 57 48 43 39 39 39 38 41 41 40 39 38 38 38 38 39 39 40 40 41 42 42 42 41 43 45 47 63 92 122 139 156 157 161 166 168 170 180 191 193 190 186 179 174 171 170 170 168 166 158 148 137 124 107 90 82 73 65 48 49 49 49 50 50 49 50 51 51 52 52 51 50 48 48 47 47 46 46 46 45 44 44 44 45 45 45 44 42 42 40 41 40 40 40 41 41 42 42 43 43 45 45 47 47 47 47 46 46 46 46 46 46 45 46 45 46 46 47 47 48 50 51 53 53 53 53 53 52 51 51 50 49 48 48 47 47 48 49 47 47 50 51 52 51 50 48 44 42 41 42 45 51 57 61 65 65 65 64 63 61 58 59 57 60 62 64 65 65 65 63 59 59 60 61 62 64 63 64 64 62 61 60 59 59 58 60 57 61 59 57 63 63 57 58 61 64 68 72 74 77 79 77 74 84 102 119 135 147 159 166 167 168 167 167 165 160 156 153 147 139 130 123 119 111 97 86 73 65 56 48 42 41 40 40 40 39 39 39 38 38 39 39 39 40 40 41 42 42 43 43 45 46 44 45 58 88 120 139 150 153 158 163 164 165 173 182 185 182 179 174 171 168 168 168 166 164 157 146 136 123 106 90 77 68 62 50 50 50 50 51 51 51 51 52 52 53 53 53 52 50 49 48 48 47 46 47 46 44 45 45 45 46 45 45 44 42 41 40 39 41 41 41 41 42 42 44 44 46 46 46 47 47 47 47 47 46 46 47 46 45 45 46 48 48 49 49 51 52 53 54 54 55 55 54 53 52 52 50 49 48 48 48 48 49 49 49 47 46 44 43 42 42 42 44 46 45 45 46 48 50 52 58 59 59 61 60 60 58 58 60 61 62 63 65 65 66 67 63 61 62 62 62 62 61 61 59 60 58 58 59 60 61 61 62 60 59 60 65 65 61 59 63 65 70 72 74 74 78 77 73 83 101 117 132 144 156 164 168 169 169 168 164 158 153 151 149 146 139 134 130 124 114 104 89 80 68 58 51 47 45 42 38 36 36 36 37 38 40 42 42 42 43 44 45 45 46 45 47 47 42 42 55 85 118 138 144 147 153 159 160 160 165 172 175 173 170 169 167 167 166 166 164 162 155 145 135 124 107 90 73 64 58 51 51 52 52 52 53 52 52 53 54 54 55 55 54 52 52 50 49 49 48 48 47 46 46 47 47 47 47 46 46 45 43 41 41 42 42 42 42 43 43 45 45 47 47 48 48 48 48 49 49 47 48 48 46 46 46 50 50 50 51 52 54 54 55 56 56 57 56 56 55 53 53 50 50 49 48 48 49 50 49 51 49 45 41 38 37 38 40 47 49 50 50 47 47 45 46 57 59 60 60 59 59 59 58 62 64 66 66 67 66 65 65 64 64 63 63 62 60 59 58 56 56 57 57 59 60 61 62 64 55 56 60 59 62 65 64 66 68 71 73 73 75 78 80 81 90 101 114 125 136 147 156 165 167 168 168 163 158 152 150 148 146 142 140 139 134 125 118 103 93 80 68 58 52 47 42 37 35 35 36 37 39 41 44 42 43 43 44 44 44 45 44 42 43 43 43 56 85 113 132 140 143 150 156 159 158 160 165 167 165 163 163 165 165 165 164 161 159 153 144 135 124 107 91 71 61 55 53 53 53 54 54 54 54 54 55 55 56 57 57 57 55 55 52 52 51 51 51 50 49 49 49 50 50 49 48 47 46 45 44 43 43 43 44 44 44 44 47 47 47 47 49 49 50 50 50 50 50 50 49 49 49 49 52 53 52 54 55 56 56 57 58 58 59 58 57 56 53 53 51 51 50 50 50 50 51 51 52 50 48 44 40 39 40 44 50 53 55 54 51 49 47 47 58 59 60 61 60 60 59 58 59 62 65 66 67 67 64 64 66 67 64 62 60 59 57 56 54 55 56 58 60 61 62 62 57 48 56 63 53 53 66 67 69 71 73 74 74 76 79 85 94 102 109 114 121 131 144 154 159 163 167 168 166 162 156 151 144 142 140 139 139 136 131 126 113 104 90 75 64 54 47 42 39 37 38 38 39 40 43 44 43 43 43 43 42 42 41 41 35 42 48 54 67 90 112 125 136 138 144 152 155 153 154 159 162 160 159 160 163 165 165 163 158 156 150 142 134 123 107 92 69 58 52 54 54 55 55 56 56 55 55 56 57 58 59 59 59 57 57 55 55 54 53 54 53 52 52 52 52 53 52 51 51 49 48 45 45 45 45 46 46 46 47 48 48 48 49 50 50 51 51 51 51 52 52 52 53 52 53 54 55 55 56 57 58 58 59 60 60 60 60 59 57 55 54 53 53 52 51 51 52 53 53 54 53 50 49 46 45 47 49 53 56 57 57 55 54 50 50 50 51 53 54 55 56 55 54 55 58 60 62 63 64 63 65 65 65 65 63 60 58 57 56 55 56 57 59 60 61 62 60 53 51 77 89 65 57 70 75 71 74 76 77 77 80 85 92 105 112 114 117 117 124 135 145 147 153 160 165 165 161 156 150 143 141 140 142 142 141 138 134 125 116 104 90 77 64 54 47 43 42 42 42 42 44 45 45 45 45 44 43 41 40 39 40 40 51 62 71 82 98 113 121 130 132 137 145 149 149 151 154 159 156 155 158 162 164 162 159 154 153 148 141 133 124 108 92 68 57 51 55 56 56 56 57 57 56 57 57 58 59 60 60 60 59 59 58 58 57 56 56 56 55 55 55 55 55 55 54 53 51 51 47 47 47 48 48 48 49 49 49 49 50 50 51 51 52 52 52 52 52 53 54 57 56 57 55 56 57 58 58 60 61 61 61 61 61 60 60 58 56 55 56 55 55 54 54 55 55 56 54 55 56 56 57 56 56 57 56 56 57 56 57 57 57 54 47 47 51 54 57 59 59 61 65 64 61 60 58 60 61 64 63 64 62 62 60 59 58 59 58 59 60 61 61 60 59 57 49 61 108 127 91 68 76 78 73 77 80 81 83 85 90 100 113 120 118 115 109 107 111 116 128 137 148 156 159 159 154 151 143 142 144 146 147 147 146 144 137 130 119 107 93 79 67 58 50 49 48 47 47 47 47 47 47 46 44 42 40 38 36 38 53 67 81 89 98 109 119 123 130 130 134 142 148 148 150 154 157 155 153 156 160 162 158 155 151 151 146 139 132 123 109 93 73 60 54 56 56 57 57 57 58 57 57 58 59 60 61 61 61 60 60 59 59 59 58 58 57 57 56 57 57 57 57 56 55 53 51 48 48 49 49 49 49 49 50 49 49 51 51 51 52 52 52 52 53 53 56 57 58 59 59 56 58 57 59 60 61 62 62 62 62 61 61 60 59 57 56 57 57 56 55 55 56 57 57 56 57 59 60 60 60 60 59 54 54 54 54 55 56 57 54 53 54 59 64 68 72 74 76 81 76 68 59 55 55 57 60 60 61 60 59 59 59 60 61 62 62 62 61 59 57 54 51 41 63 125 150 104 72 75 72 76 81 83 86 86 90 95 102 113 118 115 107 95 84 81 82 111 121 133 142 147 148 145 142 137 137 140 142 144 144 143 144 137 133 121 110 97 82 68 59 52 49 48 47 47 46 46 47 48 47 46 44 41 40 39 41 66 81 94 101 108 117 123 126 132 132 135 143 149 150 153 157 155 153 150 153 157 159 154 150 148 148 144 138 132 124 109 93 79 67 60 58 58 58 58 58 59 60 60 60 60 61 61 62 63 63 63 64 64 64 63 63 62 62 61 59 59 59 59 58 59 58 58 56 56 56 55 54 55 55 55 55 55 54 53 53 53 52 52 54 54 54 55 55 56 58 59 58 60 60 62 63 64 64 64 64 64 63 62 60 59 59 59 57 56 57 56 56 56 57 57 53 68 64 58 64 54 48 60 52 54 52 48 47 54 61 60 73 71 73 75 70 62 61 68 78 80 86 89 79 65 59 62 57 56 53 51 55 62 63 60 65 63 59 57 54 50 44 38 72 99 70 89 122 86 70 86 82 91 98 100 95 94 99 106 99 110 111 89 59 45 44 49 65 74 91 111 124 129 133 138 126 128 131 133 135 136 138 138 128 125 121 110 98 85 72 65 58 47 48 49 39 37 48 53 51 50 49 49 46 43 45 54 72 87 95 100 111 124 132 129 131 135 141 146 149 151 153 155 150 152 151 149 149 153 152 150 149 141 135 132 130 122 109 95 80 75 73 58 58 58 58 59 60 61 62 61 61 62 62 63 64 63 63 65 64 64 64 63 63 62 62 62 62 62 61 60 60 59 58 57 57 57 57 56 56 57 57 55 55 54 54 54 53 52 52 54 54 54 55 55 58 58 60 59 59 61 62 64 64 64 64 64 64 63 61 60 59 59 59 58 57 57 57 57 57 58 58 58 56 47 46 55 58 59 69 68 72 73 72 74 79 80 79 68 66 66 67 62 55 55 61 67 63 64 69 71 70 72 78 75 71 64 56 55 61 62 61 60 72 75 62 43 40 57 75 76 79 64 65 96 89 64 84 97 91 92 104 108 102 99 99 102 97 88 67 46 39 40 42 48 53 63 76 82 84 85 90 98 101 105 108 112 116 118 120 124 121 118 113 107 101 97 95 97 84 76 72 68 70 55 28 49 48 49 54 56 58 62 69 79 90 97 102 114 130 137 134 137 137 139 142 146 148 148 148 146 150 151 150 152 157 157 155 153 146 137 132 129 121 109 97 83 80 79 57 57 57 58 60 61 62 63 63 63 64 64 64 64 63 63 65 65 65 64 64 64 64 63 65 64 63 62 61 60 60 59 58 58 58 58 59 59 59 60 56 56 55 54 53 53 52 52 54 54 53 55 55 57 57 59 59 60 61 63 63 64 65 64 63 63 62 61 60 59 59 58 58 58 58 58 59 60 60 59 69 51 51 65 76 86 93 96 66 73 77 79 82 85 80 76 65 66 64 63 59 55 56 61 69 62 55 58 62 65 67 67 48 57 68 75 77 75 65 55 56 54 49 48 51 60 70 77 71 54 60 52 79 99 74 91 99 95 99 111 111 103 103 104 100 84 71 58 52 52 50 46 53 51 53 56 55 54 54 57 65 67 70 73 77 81 84 86 84 83 80 78 78 81 83 87 105 99 93 87 90 101 83 45 39 49 58 63 58 56 66 78 79 86 95 101 117 134 140 136 140 139 139 139 140 143 144 144 149 155 158 160 163 168 169 166 162 152 141 131 126 119 109 99 87 85 85 56 56 57 58 60 62 63 64 65 65 65 65 65 65 64 64 66 66 66 65 65 66 65 65 67 66 65 64 62 61 60 59 58 58 59 59 59 60 60 60 57 56 56 55 54 53 53 53 54 54 55 55 56 58 59 60 60 61 62 63 64 64 64 64 63 62 62 61 60 58 59 58 59 59 59 60 60 61 62 60 56 43 59 85 85 86 86 75 52 58 62 66 70 74 67 63 66 70 66 64 63 62 66 68 71 66 60 59 60 58 54 51 57 57 56 55 61 74 84 88 63 52 45 54 72 80 66 52 59 47 57 56 70 93 88 87 87 100 112 111 102 99 109 117 85 70 62 60 64 67 61 55 66 60 55 54 52 50 51 56 51 53 54 56 58 61 63 64 67 67 64 63 65 67 71 74 81 84 87 85 86 99 102 89 49 48 49 56 62 64 68 70 74 84 96 107 124 142 145 139 141 143 143 141 138 140 146 151 163 169 174 177 180 185 183 181 171 160 145 132 124 116 108 100 88 87 88 55 55 56 57 59 61 62 63 65 65 65 65 65 66 65 65 67 67 66 67 68 68 67 67 67 66 65 64 61 61 60 59 59 59 59 59 59 59 59 59 57 57 57 56 55 54 54 53 55 55 55 56 56 59 59 60 61 62 63 64 64 65 63 63 63 61 61 60 59 59 58 58 60 60 59 60 61 63 63 61 54 52 77 94 78 65 55 39 50 56 58 61 65 69 63 60 63 66 64 63 64 67 72 74 62 63 61 59 57 58 59 61 71 69 64 57 56 67 77 83 68 77 84 85 75 64 53 51 52 57 51 59 57 65 91 85 78 98 106 96 90 100 112 109 70 60 59 62 68 73 74 73 76 68 58 55 52 49 52 58 57 58 59 59 60 63 65 67 69 69 68 68 67 68 68 67 72 66 74 79 75 80 93 99 91 64 38 43 64 79 76 67 74 89 106 123 141 156 156 147 142 151 155 153 146 147 158 168 182 188 193 193 195 198 195 190 181 169 151 135 123 115 109 102 90 89 91 54 54 55 56 57 59 60 61 63 63 64 65 66 66 66 66 68 68 67 68 69 69 68 69 67 67 66 65 64 63 62 61 61 61 60 60 59 59 59 58 58 58 57 57 56 55 54 54 55 55 55 56 57 59 60 61 63 62 63 64 65 65 63 63 63 61 60 59 59 59 57 57 59 60 59 60 62 63 63 59 57 71 90 88 68 57 52 44 50 56 58 58 61 64 59 56 55 58 57 55 58 66 69 69 62 63 60 54 54 62 68 71 58 65 70 68 63 59 52 48 57 73 85 80 63 50 48 55 49 61 46 56 52 55 104 108 87 90 86 81 91 106 103 83 69 62 60 62 66 72 80 87 79 68 59 54 50 47 50 55 57 58 58 59 61 63 67 68 60 62 63 64 64 62 61 60 74 61 66 78 77 80 86 91 114 97 74 58 53 56 66 76 81 101 124 141 157 167 166 156 158 167 175 172 167 168 180 193 201 206 208 208 206 207 203 198 189 178 159 140 126 116 110 106 95 96 95 54 54 54 54 55 57 57 58 60 61 62 64 65 67 67 67 68 69 68 68 70 70 70 70 69 68 67 67 66 65 64 65 65 65 64 63 61 60 60 60 58 58 58 57 56 56 55 55 56 56 56 56 58 59 60 61 63 63 64 65 64 64 64 63 61 61 61 60 59 58 56 57 58 59 58 59 61 62 64 58 50 75 84 63 49 48 49 50 50 57 61 61 61 63 59 55 54 56 54 52 56 64 67 64 66 65 60 56 58 67 68 65 64 64 55 44 36 39 44 49 44 48 53 55 53 52 50 51 52 55 51 55 55 63 97 127 101 86 76 86 100 99 82 66 69 63 62 64 63 63 69 77 74 63 56 54 53 50 54 59 58 58 56 56 56 59 61 63 64 64 65 67 68 67 67 67 73 68 72 77 77 88 97 94 107 113 111 93 67 54 65 85 101 125 150 163 174 182 182 175 183 189 193 195 194 198 206 215 218 221 221 218 216 215 212 207 197 186 167 146 130 120 115 111 106 105 104 54 54 54 54 54 55 55 56 59 60 61 63 65 67 68 69 69 69 69 70 70 71 71 72 71 71 69 68 68 68 67 67 67 68 66 65 62 61 61 59 58 58 58 58 57 55 55 55 55 55 56 57 58 58 60 61 64 63 64 65 65 64 64 63 62 62 61 59 57 56 55 56 56 58 59 61 61 62 63 57 61 93 90 56 47 50 47 51 58 67 71 70 66 66 61 58 57 59 58 55 60 67 69 64 61 60 59 60 69 76 69 56 55 60 61 53 44 42 40 39 44 48 52 54 53 52 51 52 59 50 63 55 57 63 65 108 103 82 78 98 103 81 64 65 60 58 59 62 61 54 52 56 71 63 58 57 57 55 58 63 67 65 63 59 58 58 59 60 64 63 63 63 64 65 64 66 68 79 86 76 66 86 105 102 94 96 104 112 112 102 92 89 126 152 176 187 194 199 199 195 202 202 202 206 213 219 224 227 229 232 232 228 225 224 221 216 202 191 171 150 134 123 117 114 114 112 110 49 50 51 53 55 56 56 56 58 59 61 63 65 67 69 69 72 72 72 72 74 75 76 75 74 70 68 70 73 73 68 63 69 67 64 65 67 66 61 57 60 58 57 55 56 55 55 52 58 57 57 57 58 58 59 60 63 64 64 64 64 64 64 63 64 62 59 56 54 52 55 58 62 56 59 66 64 56 59 66 106 75 55 54 55 54 56 61 57 60 64 65 61 57 54 55 54 55 56 60 64 66 66 65 62 61 60 61 67 70 62 50 57 57 57 57 55 54 52 50 46 47 49 50 53 55 58 59 58 51 52 56 56 54 66 83 78 83 92 93 80 62 56 63 64 67 64 62 60 58 59 59 76 75 70 62 60 63 62 59 69 68 68 68 64 60 61 66 70 65 59 58 61 68 73 75 78 78 81 82 79 79 90 103 93 69 86 94 91 117 92 114 143 167 195 213 220 219 220 219 216 216 217 220 227 231 236 239 243 243 240 236 231 226 221 220 208 201 186 165 144 131 125 123 132 128 125 46 47 50 52 53 54 55 55 57 58 61 63 65 67 68 69 72 72 72 72 74 75 77 77 74 73 74 80 85 88 84 79 73 68 63 61 62 63 61 59 58 57 55 55 56 56 56 54 52 52 53 55 57 58 60 61 63 63 64 64 64 64 63 63 64 64 60 57 54 52 51 52 60 59 61 63 58 54 65 74 80 59 50 54 58 55 57 62 59 60 63 64 61 57 54 55 57 58 57 59 62 65 66 64 63 58 60 69 72 63 56 54 55 55 57 59 60 58 56 52 49 46 46 48 52 55 58 58 60 54 56 61 59 53 58 70 70 73 79 80 71 59 58 67 66 68 66 62 59 58 60 61 69 76 78 71 63 63 63 64 67 67 68 70 66 62 62 66 70 67 63 64 66 70 74 75 72 71 74 82 93 96 88 79 70 68 68 73 92 106 71 121 148 176 209 226 231 232 230 226 227 225 227 230 236 242 247 250 249 249 246 244 238 234 231 229 221 214 198 178 161 147 143 144 148 144 140 46 47 48 49 51 52 54 54 57 58 60 62 64 66 67 68 70 71 72 73 74 76 76 76 73 75 82 94 104 109 107 104 89 81 71 64 62 61 60 58 58 58 55 55 56 57 58 57 51 52 54 57 58 59 60 60 62 63 63 64 63 63 63 63 59 61 60 58 55 53 52 50 55 57 56 49 43 46 58 69 58 50 49 57 60 55 56 60 59 61 65 65 62 60 58 60 60 60 57 57 60 62 62 60 63 56 62 76 71 54 50 57 54 54 56 58 58 56 54 51 48 46 46 49 50 54 56 55 56 53 57 62 61 54 57 65 60 62 69 75 74 67 63 67 67 68 66 61 58 56 58 59 56 68 78 73 64 62 66 72 65 64 67 71 69 64 63 65 68 67 67 70 73 75 76 74 66 68 72 78 91 98 87 69 77 86 64 71 121 121 64 123 140 177 216 234 240 245 243 236 233 233 234 237 242 246 251 254 253 252 249 247 244 242 239 239 231 223 207 189 174 165 163 163 171 165 161 46 46 47 48 49 50 52 53 56 57 59 61 63 65 66 67 69 70 72 74 75 77 76 76 74 80 93 108 122 130 130 128 117 107 95 83 76 69 64 60 63 59 56 54 54 56 57 56 55 57 59 59 61 60 59 59 63 63 63 64 63 63 62 63 61 62 61 58 58 57 57 57 56 56 52 44 41 48 55 61 54 55 58 63 63 57 56 59 58 60 62 64 62 61 61 62 63 61 57 56 57 58 58 57 59 59 66 69 62 49 50 57 53 52 54 55 55 54 51 49 48 46 47 48 50 52 54 53 50 48 52 60 61 57 61 68 53 54 59 68 77 75 67 61 64 65 62 60 58 56 57 59 52 63 72 72 66 64 70 78 63 63 66 72 72 66 64 65 65 67 70 73 77 79 76 72 63 74 79 73 77 87 87 79 75 78 62 98 156 141 57 75 119 163 210 231 242 251 250 241 237 237 237 240 242 246 250 251 252 251 249 248 245 244 243 242 235 227 213 198 185 180 180 182 191 183 177 48 48 47 47 48 49 51 52 55 56 57 59 61 63 65 65 69 70 72 74 75 77 76 75 74 84 100 120 134 144 147 144 139 131 119 109 100 91 80 74 71 66 61 55 53 54 53 53 55 56 57 59 60 60 61 60 63 63 64 65 64 63 64 62 63 62 58 56 56 57 59 60 60 57 51 49 55 62 61 56 59 60 64 65 64 60 59 62 56 58 60 61 60 59 60 61 63 62 58 55 55 56 56 56 55 65 67 56 49 51 55 53 52 51 52 54 53 53 49 47 47 47 47 48 50 52 53 52 49 47 50 54 57 58 63 69 70 64 60 64 75 78 69 59 61 60 60 59 57 58 60 63 57 60 64 67 67 68 74 79 63 62 66 73 74 70 67 67 64 66 69 74 78 79 76 72 68 78 80 72 74 86 87 81 71 72 88 147 178 155 72 47 106 149 198 225 240 251 253 246 246 245 245 246 248 250 252 252 251 250 248 247 245 244 243 243 241 233 220 209 202 201 202 205 208 200 192 53 51 50 48 48 49 50 51 54 55 56 58 60 62 64 64 68 69 72 75 75 77 76 75 76 87 105 126 143 153 158 158 152 145 138 133 126 118 107 101 90 84 75 65 60 58 55 54 53 53 54 55 58 60 62 64 63 64 65 66 65 66 65 63 61 58 55 54 54 55 56 57 60 52 48 56 66 71 63 52 59 60 63 63 62 62 63 63 56 57 58 57 57 58 58 60 62 59 57 56 56 57 56 54 55 67 64 48 44 55 60 50 51 50 50 51 51 50 47 45 47 46 48 49 52 53 54 53 55 51 51 51 53 56 60 63 89 82 72 67 69 73 69 62 58 59 58 58 58 58 62 65 65 60 60 65 69 71 73 76 66 64 67 75 78 74 70 70 65 66 69 74 78 79 78 76 77 79 77 79 87 95 85 71 86 83 100 144 137 130 95 77 104 141 187 219 238 247 250 249 250 251 250 250 250 251 252 251 251 251 250 250 247 245 242 240 237 230 221 216 215 219 222 225 228 216 206 57 56 53 50 49 49 50 51 52 53 54 56 58 60 62 63 66 67 71 74 75 76 75 74 74 87 108 130 149 160 166 169 165 160 155 152 149 145 137 131 121 113 99 86 78 71 67 66 63 61 58 57 57 59 61 64 64 65 66 67 67 67 67 65 59 61 64 68 71 72 72 71 72 61 58 70 80 74 63 56 62 62 62 63 64 64 63 60 56 56 57 57 56 56 57 59 58 58 56 56 57 58 55 54 60 62 57 50 52 59 60 51 49 49 49 50 49 47 45 44 45 47 49 51 53 54 55 55 57 56 54 52 52 55 56 55 78 88 90 81 71 68 64 62 60 60 60 58 57 59 62 65 68 64 64 70 73 72 71 73 70 66 68 76 81 79 76 75 68 68 70 73 78 79 79 80 85 84 84 89 93 92 83 74 89 87 79 94 78 86 86 89 99 128 169 208 233 241 246 252 252 253 252 251 250 249 249 248 250 250 251 250 247 242 237 234 225 221 217 217 223 231 237 241 243 231 219 61 58 55 52 50 50 50 51 52 52 54 56 58 60 61 62 66 67 70 74 75 76 75 73 74 88 109 132 151 164 173 176 177 172 167 164 163 161 155 150 146 136 121 105 93 85 80 77 74 71 66 61 58 58 60 62 64 66 67 68 68 68 69 66 67 72 81 91 97 99 98 95 88 74 72 83 88 76 65 63 66 64 65 64 65 65 61 55 55 56 56 56 54 55 56 59 55 55 55 56 57 57 56 54 65 56 51 56 61 61 57 53 50 48 48 48 47 45 44 44 45 47 50 52 53 55 55 56 55 56 55 54 55 57 55 52 52 78 100 96 79 65 59 57 62 62 60 59 57 57 60 62 68 65 69 75 76 71 69 72 73 67 69 77 83 82 79 79 72 71 71 73 78 81 82 84 84 90 96 96 86 78 81 90 93 102 80 88 83 90 79 83 92 114 152 198 226 235 242 255 255 255 255 255 253 252 251 249 248 248 249 249 245 239 232 229 221 218 217 222 232 243 250 254 250 237 224 62 61 60 58 56 54 52 51 50 50 51 52 54 57 60 62 64 67 70 73 74 75 76 78 73 82 100 126 146 160 170 176 179 178 180 178 177 175 172 171 161 154 141 127 114 101 90 82 81 81 79 72 63 58 59 63 62 66 69 68 66 67 70 75 85 101 113 114 117 119 111 95 91 88 87 87 78 65 58 59 60 61 63 64 64 63 61 59 54 54 54 55 55 56 57 56 56 57 58 57 54 54 56 58 67 61 55 64 91 108 93 63 51 50 50 47 42 40 40 43 45 48 50 49 48 49 52 58 59 60 60 60 58 57 56 55 64 56 71 99 88 66 64 52 58 60 60 60 58 58 60 62 62 67 80 88 79 63 63 72 72 71 74 80 82 78 75 76 82 79 75 74 77 81 82 82 88 89 89 92 93 91 88 86 101 89 95 94 73 73 84 88 102 103 142 181 209 234 238 248 250 255 255 255 254 255 252 247 250 250 247 243 244 243 232 217 214 209 214 231 244 247 251 255 254 240 227 63 62 61 59 57 55 54 53 51 51 51 52 53 56 59 61 63 66 69 72 73 74 75 77 74 81 98 123 143 157 166 174 180 181 182 183 183 182 180 178 170 163 152 138 127 113 101 94 87 86 84 80 73 67 65 65 60 66 69 68 63 66 77 86 103 116 125 125 124 124 113 96 89 87 81 73 64 60 61 63 56 55 56 57 56 57 55 54 51 52 55 58 60 61 60 60 62 60 60 62 66 67 66 65 64 66 64 56 49 54 73 91 64 54 43 41 45 47 44 40 48 52 54 54 51 50 50 54 58 59 60 58 57 55 53 52 57 53 61 80 84 76 66 49 59 61 60 59 57 56 58 58 62 66 79 87 82 68 67 72 76 74 77 83 84 80 78 79 86 85 83 82 82 83 83 83 76 84 92 96 91 85 82 84 87 84 93 93 82 87 93 86 96 92 127 169 199 224 233 248 250 255 255 255 254 255 253 248 250 249 247 244 245 244 233 220 215 209 213 229 245 249 252 255 253 241 227 65 65 63 61 59 57 56 55 52 52 51 52 53 56 58 60 62 66 68 70 71 71 73 74 75 80 94 117 138 153 164 171 179 181 183 185 186 187 185 185 178 172 163 151 141 128 117 109 96 93 90 87 82 75 68 64 53 60 65 64 62 69 87 99 115 122 127 123 118 112 99 84 71 76 73 61 54 58 61 61 60 59 58 59 60 60 60 60 54 56 60 63 65 62 60 58 55 52 51 57 65 69 66 61 60 52 52 55 50 44 54 71 75 64 52 45 44 44 44 42 42 47 50 53 52 49 49 51 55 58 58 58 59 58 56 56 52 60 58 60 79 89 69 51 59 60 59 58 57 56 56 56 61 65 74 85 82 71 68 71 75 73 76 83 83 80 77 78 88 90 91 90 86 82 81 81 70 79 89 90 86 84 87 92 89 91 98 98 96 105 106 94 93 77 108 151 185 211 224 245 249 255 255 255 254 255 252 248 249 249 247 246 247 246 238 228 219 209 211 228 246 251 253 255 251 239 229 69 68 66 64 62 60 59 58 54 53 53 53 53 55 57 59 62 64 68 70 69 69 71 73 77 78 90 112 134 150 161 169 176 177 179 183 183 185 184 184 177 173 167 158 150 139 129 121 109 103 96 90 88 81 71 62 53 56 61 64 67 79 93 103 108 110 111 105 97 88 73 59 51 65 69 60 56 64 65 59 54 53 53 53 55 56 59 60 64 64 64 63 61 57 54 52 46 45 46 51 58 60 56 53 53 44 41 55 66 63 52 46 70 73 72 60 45 35 39 47 45 47 50 51 49 48 47 48 55 57 58 60 62 63 64 64 54 76 74 53 71 90 73 65 60 59 58 58 58 58 57 57 60 62 70 79 80 72 67 67 72 70 74 80 82 77 75 75 88 91 97 97 88 79 77 78 76 79 83 82 84 90 99 105 102 98 98 101 103 106 106 104 94 70 93 135 171 199 218 243 247 253 255 255 254 255 251 248 250 250 248 250 251 250 243 236 224 213 212 230 247 254 254 254 249 239 231 72 71 70 68 66 64 61 60 56 55 54 54 54 55 57 58 62 65 67 69 68 69 70 72 77 77 87 107 130 147 159 166 174 175 176 179 179 180 179 179 174 171 167 162 156 149 140 133 127 117 107 101 97 91 81 72 70 67 66 69 77 85 91 90 84 83 84 80 74 67 57 47 57 68 72 63 62 71 73 63 62 61 60 62 63 66 68 69 69 66 62 59 54 53 51 51 49 52 55 57 56 55 54 53 47 53 55 50 49 57 62 59 60 68 74 68 54 42 42 47 54 53 51 49 48 47 48 48 56 57 58 59 60 61 63 62 55 87 97 59 59 80 70 80 60 58 56 57 58 60 59 59 58 60 65 72 73 68 64 62 70 69 73 80 82 78 75 76 90 94 102 104 93 80 77 79 83 82 81 82 92 103 105 101 101 94 94 106 115 107 101 110 101 71 86 123 159 193 214 238 245 252 255 255 253 255 251 248 254 253 251 253 255 253 250 246 233 221 217 233 250 255 254 254 248 240 233 75 74 73 71 69 67 64 64 59 58 57 56 56 56 58 59 63 66 69 70 69 69 70 72 76 75 83 105 129 147 158 164 172 172 173 176 177 177 176 176 172 170 168 166 163 158 153 148 146 138 128 120 117 112 103 95 95 87 80 79 83 84 80 72 65 65 69 69 69 65 59 54 74 73 66 56 57 65 68 63 69 69 70 69 70 71 71 71 62 59 56 52 51 52 52 54 56 60 61 60 57 53 53 55 46 59 61 49 45 55 61 58 57 56 58 61 64 60 51 44 44 43 42 43 47 52 56 57 55 55 55 55 55 54 53 53 53 80 109 72 52 67 62 86 65 62 56 54 58 60 62 61 57 60 63 65 65 64 61 60 67 68 72 80 82 79 78 79 94 97 105 110 100 86 81 86 86 86 87 93 109 117 106 87 95 94 96 114 135 128 117 122 106 77 85 112 149 191 213 233 244 250 254 254 253 254 250 249 255 254 253 255 255 255 252 253 241 230 226 240 251 254 254 255 250 244 240 77 76 75 73 71 69 68 67 62 61 59 58 57 58 57 59 64 67 69 71 71 70 70 72 75 72 82 103 129 147 158 162 167 167 169 172 173 174 174 174 172 170 168 167 168 167 164 162 158 154 147 143 141 136 129 121 109 99 88 81 77 73 65 62 62 65 69 74 75 71 68 65 86 72 60 54 56 59 57 56 58 60 59 58 56 55 52 50 52 51 51 51 51 53 54 56 61 61 59 56 55 54 52 51 51 51 52 54 61 62 57 50 58 52 49 53 60 61 55 51 45 45 45 47 52 57 59 57 50 48 48 49 49 50 49 51 49 61 106 84 57 64 58 82 74 67 58 54 56 59 60 61 59 63 64 63 59 59 59 60 62 62 68 76 80 78 76 78 97 97 104 111 104 90 85 91 91 95 98 107 125 133 118 92 101 107 98 106 144 161 148 140 105 81 85 103 140 190 213 227 242 249 253 253 253 253 251 248 255 253 253 255 255 253 251 255 250 240 236 246 252 252 253 255 254 249 246 79 78 75 74 71 70 68 68 64 64 60 59 57 58 58 60 64 68 70 71 71 70 72 72 73 71 81 104 130 148 157 162 160 160 163 166 169 171 172 172 171 170 167 167 169 170 168 167 161 161 159 159 155 150 141 132 102 93 82 74 66 62 60 61 64 67 70 74 74 71 67 64 83 68 57 62 68 64 56 53 67 68 67 65 62 57 54 50 50 51 52 53 53 52 52 52 66 60 54 54 57 57 53 49 56 49 49 57 56 52 55 67 55 56 54 53 51 53 58 63 76 72 66 62 60 55 50 44 43 41 44 47 49 52 53 55 48 46 100 93 64 68 59 77 82 72 59 54 56 57 59 58 60 64 65 60 56 57 60 63 55 55 62 71 75 73 73 74 97 94 100 110 107 93 88 94 97 100 104 110 127 141 131 110 112 120 97 88 136 180 173 153 104 81 84 97 136 192 215 224 241 248 253 252 253 253 252 249 255 254 252 255 255 252 251 255 255 246 242 249 253 251 252 255 255 252 251 79 80 78 78 75 75 73 72 67 67 65 64 62 63 62 64 67 69 71 73 74 74 74 75 78 76 84 104 126 143 153 159 162 161 160 161 163 167 170 173 170 169 168 169 170 170 170 170 168 166 160 159 164 160 135 105 78 70 65 61 61 62 64 64 61 61 70 59 68 69 49 74 75 67 62 59 60 61 59 60 66 63 68 77 75 61 54 57 55 54 53 50 47 47 50 53 65 56 49 50 57 59 55 50 50 51 52 51 51 51 53 53 48 50 53 54 52 51 51 52 50 51 53 51 47 45 45 46 45 43 43 47 53 57 55 52 45 51 88 89 59 78 52 72 79 74 67 59 56 56 57 60 60 59 57 59 60 61 61 60 56 59 61 63 63 64 64 65 106 112 99 109 113 97 103 112 107 104 103 101 103 109 110 109 119 126 95 105 103 174 167 141 112 89 81 110 149 182 213 238 244 245 247 251 254 255 254 255 255 252 249 254 255 255 255 253 253 251 250 250 249 250 250 250 253 255 255 80 79 79 77 76 75 74 73 69 68 67 66 65 65 65 65 67 68 70 72 74 75 75 75 78 76 85 104 125 140 149 154 156 155 157 158 161 165 170 172 172 171 167 166 164 164 162 160 166 164 160 155 153 143 115 87 70 63 59 58 59 62 64 65 60 57 65 59 66 64 51 79 67 63 59 56 56 56 58 59 69 61 60 71 76 67 58 57 55 55 54 52 50 51 53 56 61 58 53 52 52 53 51 50 56 56 56 58 58 58 55 51 51 53 55 55 54 52 52 52 50 50 48 46 44 44 45 46 43 44 48 50 52 53 56 57 63 42 68 62 70 86 66 66 85 82 75 67 61 57 57 56 59 59 58 60 62 63 64 62 58 59 61 62 63 63 66 67 105 109 98 107 111 98 107 115 111 110 107 97 92 99 110 119 117 121 89 99 99 168 162 134 114 95 90 115 157 196 225 245 248 248 249 251 254 255 254 255 255 255 251 254 255 255 255 255 253 253 251 247 244 243 245 247 249 252 253 80 79 79 77 76 75 74 74 71 70 69 67 67 67 67 67 67 70 71 73 75 75 75 75 77 77 87 105 123 137 145 150 152 151 152 156 159 163 167 169 170 168 165 162 160 158 154 153 154 152 147 140 131 115 91 70 68 65 63 62 62 62 62 62 60 56 63 65 67 60 57 87 66 62 59 57 54 54 57 59 72 59 53 65 75 72 61 56 54 55 55 54 53 55 57 61 50 51 53 52 52 54 57 62 51 51 52 53 55 55 50 44 64 62 61 60 57 55 55 55 55 51 47 46 46 46 47 46 44 48 53 53 51 52 57 62 65 49 83 59 65 67 74 84 85 83 79 74 67 60 56 54 55 55 55 58 60 62 61 61 58 59 60 61 61 63 67 69 92 103 97 108 112 97 102 106 80 94 106 104 99 102 111 117 114 111 81 90 97 158 152 122 109 100 96 119 165 209 238 248 251 252 253 255 255 255 255 255 255 252 246 247 251 251 252 255 250 250 248 242 234 232 236 242 248 252 254 80 80 79 78 77 77 76 76 73 72 71 70 70 70 70 70 69 71 73 75 76 76 76 75 76 77 86 104 121 133 141 148 148 148 149 152 155 158 161 163 165 162 159 155 153 151 147 144 131 130 124 115 102 88 72 62 68 68 69 68 66 64 62 62 63 58 63 69 65 54 62 90 65 64 61 58 56 57 60 65 69 58 50 60 69 69 62 57 56 57 56 58 56 57 59 62 48 49 51 51 52 54 56 59 54 58 59 59 58 58 59 56 67 64 64 61 57 57 58 59 60 55 49 49 49 51 49 47 50 53 55 55 53 55 59 62 59 60 94 70 51 46 64 87 117 114 106 94 80 65 53 46 56 56 56 59 60 61 61 60 59 60 60 60 59 62 66 70 77 96 97 112 116 96 93 93 70 88 105 107 104 109 113 115 111 103 74 82 93 148 145 116 106 104 103 124 170 220 245 249 249 252 254 255 255 255 252 251 247 241 234 235 237 239 243 247 246 246 246 237 227 222 226 233 244 246 249 80 80 79 79 78 77 77 77 75 74 73 73 72 73 73 73 71 73 73 76 77 77 76 76 75 75 85 101 116 126 135 143 144 145 146 148 149 151 152 154 157 155 148 144 139 135 130 125 115 110 102 92 78 65 59 59 67 71 73 73 71 66 62 61 66 62 64 73 62 50 67 85 68 65 63 62 63 64 68 70 61 56 53 57 61 61 59 60 58 59 59 59 56 56 56 57 56 52 49 50 51 52 49 47 48 54 57 54 51 51 57 62 56 55 55 53 52 53 55 58 61 56 52 53 56 58 57 56 62 59 56 55 57 60 60 58 62 58 62 67 47 58 50 53 53 59 67 75 81 83 84 85 63 63 60 61 62 63 63 62 60 60 60 61 60 61 65 68 76 98 99 110 114 96 96 95 105 109 110 100 98 109 117 118 107 95 71 75 90 137 142 121 114 117 119 136 178 226 250 253 252 255 255 255 255 251 241 237 232 227 221 222 224 226 230 235 239 242 242 235 225 219 221 226 231 231 233 79 79 79 78 78 77 77 77 76 76 75 74 74 75 75 76 73 73 75 76 77 77 76 77 75 76 83 94 106 116 125 134 138 139 141 142 143 143 144 144 148 144 136 129 123 116 110 104 105 98 88 79 65 56 53 58 66 72 76 77 73 69 63 62 67 67 65 73 59 52 73 76 66 63 59 60 64 69 71 71 56 56 56 57 57 56 58 59 59 61 60 59 56 54 54 53 50 46 43 47 51 54 52 50 46 51 53 50 46 46 53 58 48 48 51 51 53 55 57 60 56 54 54 58 62 65 65 65 71 65 59 57 60 61 60 56 58 55 48 67 50 63 47 42 49 53 56 57 56 53 50 49 69 65 61 58 57 57 58 58 59 61 62 60 60 60 62 65 83 103 99 106 110 99 106 110 110 114 112 102 103 116 117 110 103 90 72 72 87 128 146 136 134 137 138 151 183 222 244 250 255 255 255 255 249 239 227 222 213 211 209 210 213 214 218 223 230 234 237 234 227 221 218 220 219 217 216 78 78 78 78 77 77 77 77 76 76 75 75 75 76 76 77 73 74 76 76 78 77 77 78 77 76 79 87 95 102 111 121 128 130 131 133 134 136 137 137 136 131 124 118 112 107 101 95 94 85 78 74 64 54 52 58 64 70 74 75 72 68 63 63 65 70 65 72 58 55 79 66 61 54 49 53 62 69 70 68 57 58 58 58 56 57 58 58 57 58 58 57 55 53 51 51 42 42 45 46 49 50 51 53 55 55 57 56 56 55 53 53 42 45 49 52 54 56 59 61 53 56 59 61 62 61 62 65 74 71 65 60 57 57 56 57 50 57 64 68 48 46 52 54 51 55 57 58 59 59 58 59 76 70 64 57 54 54 55 56 59 61 62 61 60 60 60 61 75 100 99 107 111 105 114 117 101 111 116 111 111 120 116 101 98 84 72 68 81 118 149 153 150 151 149 157 178 204 224 236 244 241 235 228 221 212 203 199 193 194 195 201 203 203 206 211 217 222 227 229 226 219 212 209 205 203 198 78 77 77 77 77 77 76 76 77 76 76 75 75 76 77 76 74 74 76 78 77 77 77 77 79 77 77 82 88 93 102 113 119 122 125 128 129 131 132 132 125 121 116 111 109 105 101 95 79 72 69 71 66 58 54 58 62 66 69 70 69 67 63 64 64 71 65 71 57 58 85 62 56 47 42 47 58 67 67 62 59 59 60 58 59 60 59 56 53 55 56 55 53 51 51 50 51 54 56 52 45 40 40 43 45 41 38 41 44 42 32 25 34 40 44 48 49 51 53 54 54 57 61 62 58 55 53 57 72 75 69 61 54 51 54 56 52 54 67 56 50 32 56 54 49 52 52 53 54 54 53 55 89 82 72 64 59 59 60 60 57 59 61 61 59 57 57 58 60 89 98 112 118 109 113 114 121 127 124 109 104 114 115 105 92 80 71 64 78 112 152 163 156 154 151 156 169 186 205 220 215 210 202 193 187 182 178 176 180 181 186 192 195 196 197 201 206 210 218 224 222 216 205 199 193 188 182 77 77 77 77 77 77 77 77 75 75 75 76 76 77 77 77 76 76 77 78 77 79 79 79 77 77 76 78 80 85 89 93 103 109 114 116 119 126 131 131 126 126 120 112 112 114 106 90 71 66 65 68 64 58 60 68 62 62 62 65 67 68 66 67 63 64 63 62 60 60 68 77 54 59 50 51 67 63 54 62 55 58 60 59 57 57 58 58 58 57 54 50 46 47 55 61 57 54 49 43 40 38 38 38 38 33 34 39 41 33 24 23 37 34 34 43 45 42 44 50 54 54 54 54 49 46 44 47 57 58 57 83 34 43 70 46 46 60 69 58 47 46 53 60 62 60 53 51 53 59 59 56 98 90 67 54 58 56 51 54 48 50 50 52 54 58 60 61 58 67 92 112 115 120 121 113 122 119 117 118 116 114 107 100 94 74 69 70 70 103 144 155 156 153 148 151 159 166 168 168 163 163 159 154 154 157 160 164 172 177 183 188 190 189 189 189 188 189 195 205 212 211 200 192 185 177 168 77 77 77 77 77 77 77 77 75 75 75 76 76 77 77 77 76 77 76 77 78 79 79 79 80 79 78 78 80 83 85 88 93 100 105 108 113 122 128 128 128 125 116 108 111 115 103 86 61 55 54 61 65 63 64 65 61 59 60 62 66 66 66 66 60 61 60 59 58 58 65 74 71 65 54 53 64 67 57 53 56 59 61 61 59 59 58 57 57 54 50 50 53 56 56 57 50 49 47 45 44 45 46 46 42 37 36 39 37 29 20 19 29 45 50 41 39 45 47 42 58 55 52 50 47 48 50 56 50 59 56 69 69 47 50 34 53 63 69 61 51 50 54 58 58 57 53 53 57 60 60 57 99 88 64 52 57 58 54 57 53 52 52 53 54 53 54 54 59 66 89 108 113 120 124 117 122 119 119 118 117 111 104 97 93 75 68 70 73 102 138 146 147 146 142 144 149 152 149 148 135 137 137 141 143 149 155 158 171 177 183 186 187 187 188 187 181 179 183 190 199 200 195 188 181 172 163 76 76 76 76 76 76 76 76 74 74 74 75 75 76 76 76 76 76 75 77 78 79 79 79 82 81 80 78 79 80 81 82 84 89 95 99 108 119 126 125 132 128 118 111 115 117 104 81 61 54 54 61 68 69 66 63 61 58 58 61 64 66 65 66 59 57 57 57 56 57 63 70 68 57 55 59 67 79 72 51 57 58 59 61 61 60 58 57 55 50 47 52 61 63 57 52 54 54 50 48 46 45 44 44 44 40 39 41 37 30 22 24 37 47 52 53 57 58 53 45 50 47 46 45 46 46 47 52 48 61 54 59 109 67 47 47 58 64 65 60 55 53 53 54 54 54 54 56 59 60 60 59 96 84 60 48 59 62 59 61 61 60 61 60 59 57 54 54 59 64 84 103 111 122 129 123 122 121 122 121 117 110 99 92 89 73 65 70 76 97 122 128 130 133 131 133 136 136 132 130 122 127 133 141 149 156 160 163 171 176 180 184 184 185 186 186 177 172 170 174 181 186 185 183 171 160 150 75 75 75 75 75 75 75 75 74 74 74 75 75 76 76 76 75 75 76 77 77 79 79 79 81 81 79 79 78 78 79 79 80 84 89 94 104 117 124 123 132 133 128 122 120 116 99 77 72 67 67 70 73 72 69 65 64 60 60 62 65 66 65 64 63 60 57 58 57 56 62 68 60 51 59 65 68 83 85 58 57 55 55 59 61 61 57 56 52 50 50 57 62 62 53 47 54 55 52 50 46 46 44 44 42 39 40 42 39 34 31 37 56 40 44 77 93 78 60 58 41 42 45 48 50 48 43 40 48 55 50 67 115 86 62 71 61 60 58 56 55 54 52 51 53 54 56 59 60 57 58 60 88 77 55 48 60 65 59 60 62 61 63 64 63 60 58 57 57 61 78 99 110 124 132 125 118 119 122 122 118 109 98 91 84 71 61 68 79 91 104 109 115 121 122 125 129 131 129 129 135 142 149 157 164 168 170 170 172 176 179 182 183 183 184 184 180 171 165 165 172 180 184 184 171 158 146 75 75 75 75 75 75 75 75 74 74 74 75 75 76 76 76 76 75 75 77 77 78 79 79 79 78 78 79 78 79 80 79 78 80 84 89 101 114 119 118 125 134 137 130 119 108 89 69 70 73 77 76 71 69 69 67 66 63 63 65 68 68 66 63 65 61 58 58 57 56 59 63 70 61 66 65 59 74 88 75 64 56 51 56 60 58 55 56 48 51 56 59 58 54 48 44 48 50 49 50 51 51 53 53 46 45 47 49 46 42 44 52 58 51 62 92 104 85 67 64 51 51 51 54 57 56 52 47 50 46 55 89 92 88 65 72 66 60 55 54 56 57 55 53 56 57 58 61 59 54 55 61 78 69 53 49 62 64 56 53 50 50 53 56 58 58 57 58 54 56 73 95 110 125 133 126 116 118 122 123 116 108 97 90 81 72 62 69 83 86 91 98 112 118 121 126 129 133 136 140 149 154 160 167 170 171 171 169 172 174 178 180 181 182 184 184 183 173 164 165 174 186 193 198 186 170 156 74 74 74 74 74 74 74 74 74 74 74 75 75 76 76 76 75 75 75 76 77 78 79 79 78 78 79 79 79 80 81 80 76 77 79 85 96 111 116 113 118 131 140 131 116 101 81 63 55 64 73 71 65 66 67 67 67 64 64 66 68 68 66 63 64 59 56 57 57 56 58 59 73 63 61 55 50 65 90 104 80 65 53 54 57 57 55 56 48 54 59 59 52 47 45 45 52 52 51 50 49 49 48 49 49 50 53 53 49 46 49 62 51 78 95 92 84 79 68 56 65 58 50 47 50 56 59 58 58 50 74 107 76 80 59 59 76 64 55 55 60 60 58 59 59 58 60 62 57 51 58 68 71 67 55 50 59 58 50 50 44 44 46 51 55 58 60 62 54 52 66 88 106 124 134 127 117 119 123 122 114 105 94 89 79 75 64 70 85 83 84 96 115 124 129 134 136 139 144 151 156 159 164 168 169 170 169 169 170 173 175 178 178 180 182 184 181 173 166 169 181 196 206 210 194 178 161 75 75 75 75 75 75 75 75 75 75 75 76 76 77 77 76 75 74 75 76 77 78 79 79 79 80 79 80 80 80 80 78 75 75 78 84 97 112 118 115 117 128 134 127 113 101 82 62 47 55 65 64 63 66 67 65 65 64 63 65 67 66 64 62 62 57 55 58 60 60 61 63 61 57 48 47 52 57 77 108 104 81 60 58 58 55 54 56 52 55 57 54 49 47 49 49 50 48 45 43 38 35 32 32 39 43 47 49 44 42 51 66 67 95 103 85 74 74 65 49 64 55 45 40 46 56 63 64 63 58 89 93 71 68 54 59 85 70 57 56 58 57 57 61 63 60 59 61 55 51 61 76 71 69 57 51 55 53 48 49 44 43 46 49 52 56 59 62 57 51 59 78 97 121 136 131 121 122 124 122 111 101 90 86 75 74 64 69 84 77 77 94 114 126 136 142 144 146 151 158 164 166 167 168 168 169 169 168 167 169 172 174 175 177 181 183 179 173 168 173 185 199 207 210 192 174 156 74 75 74 75 74 75 74 75 74 75 74 76 75 77 76 76 75 75 75 77 77 79 79 79 81 82 82 81 81 80 79 76 77 76 79 87 101 117 124 120 122 129 132 126 117 109 90 70 52 58 64 63 65 69 66 60 63 62 62 64 66 65 62 61 63 59 56 60 63 64 65 67 55 56 46 51 58 48 53 85 119 91 67 60 59 55 54 58 55 56 54 51 48 49 51 53 37 35 34 33 32 31 29 30 28 32 39 41 39 41 53 70 96 94 85 80 80 75 62 48 61 54 47 46 52 59 63 61 57 56 86 59 63 52 50 67 87 72 57 54 54 53 53 58 60 58 55 57 52 49 63 82 73 72 59 50 52 49 45 50 44 43 43 43 45 49 52 56 61 50 55 73 92 119 137 134 126 125 125 119 107 96 87 83 68 71 59 65 81 73 70 93 109 125 140 150 152 155 160 165 172 171 170 167 165 165 165 165 164 166 170 172 173 175 179 182 182 176 173 176 188 198 203 205 191 171 152 75 75 75 75 75 75 75 75 76 76 76 76 76 76 76 76 74 75 76 76 76 78 80 83 83 82 80 81 82 81 78 76 75 75 79 91 107 123 133 137 132 136 136 130 121 114 106 97 77 65 61 66 69 65 61 62 59 59 58 59 60 59 58 57 54 65 60 54 65 70 61 55 56 55 53 54 56 60 58 54 59 83 90 69 56 62 66 58 50 71 47 54 55 45 66 40 38 41 41 29 34 39 39 29 31 44 33 38 44 33 86 43 92 94 89 84 79 71 62 54 61 64 62 54 49 53 58 59 56 55 69 59 51 54 53 68 76 75 68 58 52 53 52 53 60 57 47 40 45 57 67 72 80 69 55 48 48 50 49 49 47 48 48 48 48 50 53 57 61 50 62 61 95 115 143 132 135 132 120 104 95 92 86 77 72 60 62 66 94 63 67 91 116 134 150 156 157 161 166 168 167 166 165 165 164 163 163 163 165 166 171 172 173 174 177 179 181 180 177 174 180 189 194 193 175 152 135 75 75 75 75 75 75 75 75 76 76 76 76 76 76 76 75 75 76 77 78 78 78 81 82 83 81 79 79 78 80 79 77 76 78 83 95 111 126 136 139 150 140 127 120 121 124 117 105 94 81 71 74 76 71 64 60 57 58 57 60 61 60 58 59 60 63 56 58 65 60 54 60 53 53 53 52 56 58 59 57 54 65 77 73 62 56 56 59 58 73 48 55 54 46 63 37 36 37 41 43 42 40 40 43 36 37 37 59 26 50 63 35 104 97 90 86 78 65 59 61 55 66 71 61 47 39 38 39 45 58 84 72 53 52 61 87 71 71 65 57 51 54 55 55 61 57 53 50 52 56 63 69 74 65 54 48 48 50 48 48 48 49 48 47 48 49 52 57 61 51 60 61 94 118 144 133 134 128 115 100 92 89 84 76 68 61 66 74 83 61 67 92 118 135 149 156 157 161 165 166 165 165 164 163 161 161 161 162 163 166 169 170 171 173 175 177 176 178 175 171 171 172 170 162 133 111 95 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 75 78 80 80 80 79 79 82 81 81 79 79 80 81 84 84 84 86 92 105 118 131 138 142 146 139 131 125 128 131 126 115 102 85 73 72 73 71 65 61 55 55 56 60 63 63 61 61 61 60 58 66 72 59 48 58 54 54 55 56 55 56 57 58 52 52 65 79 72 53 50 64 62 72 48 53 54 49 66 46 41 35 36 49 45 39 38 49 40 55 42 40 50 81 59 89 94 85 78 76 69 58 55 62 53 62 65 60 55 49 43 38 36 47 69 58 44 51 65 94 63 67 65 61 57 61 64 64 64 61 62 65 62 58 63 73 66 60 53 50 49 51 49 48 48 48 48 47 48 49 52 57 62 52 56 59 91 122 147 135 129 124 113 100 90 85 79 73 65 63 71 84 64 56 70 95 119 135 147 152 154 158 163 163 162 162 161 160 159 160 160 160 162 164 167 168 169 169 171 174 178 181 178 172 166 158 147 134 99 79 65 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 76 78 80 81 80 78 79 80 79 81 85 88 88 89 92 94 96 99 107 116 126 135 141 143 135 139 138 129 121 123 129 130 116 100 88 79 73 68 63 60 54 55 57 60 64 64 64 63 57 62 61 70 82 72 53 49 57 56 59 61 59 54 54 56 53 50 61 78 75 58 56 66 54 62 47 48 50 52 74 70 62 51 36 47 44 50 42 47 57 26 50 43 56 68 87 75 60 64 66 62 57 56 55 57 56 56 57 64 77 85 77 66 55 57 75 77 81 89 82 89 53 62 66 64 63 66 67 64 63 56 57 63 58 53 62 77 57 54 51 51 52 51 50 48 48 47 48 47 47 48 52 56 63 54 53 57 86 124 147 135 128 121 110 99 88 80 72 67 61 66 77 90 50 57 77 101 123 137 146 149 152 157 161 162 160 160 159 158 159 159 159 160 162 163 167 167 168 168 171 173 178 180 179 173 166 157 142 128 98 82 71 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 75 77 80 80 79 78 79 81 80 87 96 102 104 103 103 103 108 112 118 124 130 135 139 140 142 141 132 117 108 110 117 118 115 109 104 95 83 71 60 55 53 54 57 60 64 65 65 64 55 64 58 59 82 92 77 59 57 55 57 62 61 54 52 54 51 55 61 69 70 66 65 62 48 55 48 45 44 51 76 87 90 79 46 48 44 69 54 44 44 61 49 50 98 61 41 45 38 59 65 55 51 57 55 47 52 59 71 83 96 105 101 94 64 69 94 104 111 106 75 61 52 62 68 67 62 60 58 52 53 45 44 46 44 44 57 74 51 51 51 51 53 52 52 50 48 47 47 46 47 48 51 55 63 56 50 56 78 124 146 135 126 117 108 97 85 74 64 59 58 68 80 87 46 62 84 106 124 137 146 150 153 158 161 160 159 159 157 158 158 159 159 161 162 165 166 167 167 168 170 172 172 175 174 170 165 160 149 138 119 107 97 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 76 78 78 79 78 79 83 84 90 98 109 117 117 113 112 112 116 119 124 128 131 134 138 141 144 139 133 131 132 126 107 82 78 82 88 88 84 75 63 52 56 57 58 61 64 65 63 62 57 65 53 46 73 103 100 85 60 54 51 58 59 54 51 54 49 55 59 57 62 70 66 57 48 52 51 45 41 47 66 82 93 92 57 57 43 74 56 47 51 39 37 87 61 57 54 31 40 61 66 53 44 49 48 41 52 76 98 105 100 96 96 98 76 78 92 86 77 72 52 51 65 75 79 74 64 58 54 46 50 45 42 39 41 48 62 74 49 51 51 53 52 52 52 51 48 47 46 45 46 47 50 55 61 59 49 55 67 121 141 136 123 113 104 96 83 69 58 55 58 72 80 74 52 66 87 106 124 136 145 149 153 158 160 158 155 156 155 156 157 158 159 161 161 164 167 166 166 167 169 170 170 173 172 169 167 165 157 148 137 128 120 80 80 80 80 80 80 80 80 79 79 79 79 79 79 79 78 80 80 79 79 79 82 86 90 103 111 122 126 124 119 117 118 121 125 129 132 134 138 142 147 147 150 156 167 173 166 136 103 70 65 65 66 72 78 74 63 61 59 59 60 64 63 62 60 58 63 52 49 73 99 104 101 79 62 52 55 57 53 50 54 48 52 55 55 62 67 62 52 51 47 51 46 45 48 54 64 77 89 70 81 51 70 56 65 53 44 46 70 55 55 35 59 57 60 62 55 46 42 50 61 77 95 109 106 97 91 90 92 100 90 87 64 49 52 51 67 74 82 83 74 63 57 56 51 46 48 48 42 46 59 67 65 49 52 52 53 52 51 52 52 48 47 46 45 46 47 50 55 58 62 49 55 59 115 138 135 116 104 97 92 82 68 55 56 61 78 81 57 60 68 86 100 119 133 142 148 154 158 158 155 152 153 154 154 155 156 157 159 161 162 165 164 164 164 165 167 169 172 171 168 165 162 154 145 132 128 121 80 80 80 80 80 80 80 80 79 79 79 79 79 79 79 78 81 81 80 80 80 84 90 95 114 120 128 129 126 121 117 119 124 127 133 136 138 143 150 157 167 172 179 184 190 193 187 172 111 92 71 62 71 87 87 78 64 61 60 61 61 61 59 57 56 60 58 61 79 88 93 101 99 76 58 56 57 52 50 54 52 50 53 60 67 67 58 51 52 45 48 48 52 54 46 50 66 88 87 111 68 72 60 91 109 59 123 108 81 61 48 59 72 59 56 62 56 46 64 95 110 107 100 94 95 99 95 90 93 80 74 55 47 53 48 57 68 74 73 64 54 52 55 54 39 48 50 43 48 62 63 52 51 53 54 52 51 51 52 52 48 47 46 45 46 47 50 55 57 63 48 54 54 112 135 134 110 99 94 90 81 67 57 59 67 84 82 48 68 69 83 93 115 129 139 146 152 157 156 153 151 151 151 152 153 155 155 158 158 161 163 163 162 162 163 165 164 166 166 161 156 151 140 130 117 113 107 76 78 80 80 79 79 79 81 82 79 77 77 81 83 82 81 83 80 80 81 81 83 97 113 120 124 128 129 127 122 115 111 119 124 131 141 151 164 176 185 197 204 207 207 207 209 203 194 168 128 93 122 116 72 81 99 75 63 57 59 58 55 54 59 56 53 66 60 73 88 79 100 99 88 71 58 54 55 54 52 48 50 55 61 60 55 53 55 47 47 47 49 50 52 53 54 55 74 89 78 56 54 88 126 120 107 99 102 101 92 89 91 87 70 58 57 51 45 50 62 85 97 104 103 100 100 97 94 83 70 56 52 49 47 51 57 68 66 63 60 57 56 57 54 55 52 52 52 54 53 51 49 51 53 55 53 51 50 50 50 49 48 47 46 47 48 51 55 63 56 54 47 59 88 152 123 109 102 93 81 72 68 61 59 79 84 61 44 58 70 77 94 105 120 136 146 150 149 150 152 149 150 151 152 153 155 156 156 155 157 160 161 162 162 161 160 165 163 158 151 139 126 114 106 85 85 84 75 78 80 80 80 79 80 81 82 80 79 80 82 83 82 80 86 81 79 84 90 96 107 119 121 125 127 124 117 112 111 113 119 126 137 152 167 182 197 206 214 219 222 221 219 216 209 199 188 155 124 138 125 86 96 114 90 75 63 62 63 59 54 54 61 56 63 54 62 75 72 93 111 96 72 53 48 54 53 48 53 57 61 60 56 53 52 53 55 53 50 48 48 50 52 53 56 62 74 87 94 92 93 97 79 74 78 92 104 101 89 79 53 45 44 47 40 34 41 57 81 92 100 101 102 101 92 82 69 60 54 54 53 51 50 54 62 62 59 58 56 56 57 58 57 55 55 55 55 54 51 50 51 54 55 54 50 49 49 50 49 48 47 46 47 48 51 55 60 61 56 49 55 90 144 115 103 94 87 80 71 65 61 66 81 76 60 50 57 65 71 83 99 114 131 143 147 147 147 148 146 148 149 150 151 153 154 154 155 157 159 159 158 158 157 156 152 148 140 129 117 105 93 87 87 87 87 76 78 81 81 81 81 82 83 84 83 82 83 84 84 83 80 85 81 81 89 100 109 117 123 123 126 124 115 105 103 110 117 125 133 148 167 185 201 215 224 228 231 232 229 225 219 207 196 174 154 130 130 110 81 93 109 117 96 74 66 65 62 57 54 61 59 65 55 55 62 61 70 106 105 91 66 50 52 54 50 53 65 71 61 50 49 50 48 52 49 46 47 50 55 61 66 45 52 68 86 94 90 83 81 69 70 77 91 107 109 87 60 47 45 50 51 44 40 55 76 74 80 87 95 100 97 82 67 57 55 55 60 59 57 53 54 58 59 57 57 55 56 58 60 57 57 57 57 56 55 52 50 54 55 56 54 50 48 48 49 49 49 48 47 47 48 51 54 57 68 56 52 47 95 131 108 99 88 81 78 69 59 61 74 85 68 60 62 60 63 68 72 92 107 124 137 143 144 143 143 144 145 146 148 150 151 151 152 156 157 156 156 154 151 149 148 141 136 127 116 105 96 88 85 93 94 95 74 77 79 81 80 81 82 84 83 83 83 84 84 83 82 80 79 81 88 99 109 117 122 124 124 121 114 105 100 103 114 123 138 146 162 181 196 209 220 227 229 233 232 226 219 211 195 182 164 152 134 127 113 98 104 113 139 118 92 76 69 65 61 60 58 60 69 67 58 58 54 49 73 97 107 83 58 52 54 52 52 77 90 75 56 51 52 50 46 44 44 45 49 54 59 63 47 52 58 67 70 69 71 77 81 86 87 91 102 107 86 56 50 47 46 43 37 41 62 83 63 65 71 81 90 88 71 54 53 55 59 64 64 61 57 55 56 57 56 56 55 55 57 58 58 59 58 58 58 56 53 51 54 55 56 54 50 48 47 48 50 50 49 48 48 48 51 54 56 70 57 51 44 102 121 103 100 86 76 72 64 55 63 82 89 67 67 79 70 67 71 68 85 99 116 131 139 141 141 142 143 144 145 147 148 150 150 151 155 155 153 151 147 144 142 141 135 129 121 113 105 102 101 102 103 104 105 72 74 78 79 80 80 82 84 82 83 84 84 83 82 82 81 77 88 102 112 116 119 122 123 121 114 103 99 103 114 124 132 149 159 174 189 201 211 218 223 224 226 222 215 208 198 182 167 153 141 132 123 117 114 109 111 137 129 116 102 88 79 69 65 58 59 66 69 60 61 66 49 48 73 88 78 61 56 54 51 52 85 107 93 68 59 59 56 52 50 49 48 48 47 47 48 57 52 51 58 67 69 66 64 69 80 86 86 93 101 87 63 59 53 51 50 50 57 72 86 53 51 54 65 74 72 59 49 53 57 60 60 59 58 55 55 59 59 58 57 56 55 54 55 58 59 58 58 59 57 54 51 55 56 57 55 51 49 48 49 51 51 50 48 49 48 51 54 55 67 55 49 49 106 113 103 95 82 68 63 59 58 71 91 86 69 74 89 79 73 73 69 80 92 108 124 133 138 140 141 142 143 145 146 147 149 149 150 153 152 149 146 143 140 138 136 129 124 116 110 107 108 110 113 111 112 111 69 72 75 77 78 79 81 83 83 84 84 84 83 83 85 86 86 101 117 121 121 121 121 119 114 106 99 101 112 126 135 141 157 166 179 191 199 206 211 213 214 213 208 201 195 186 168 155 137 121 116 107 107 110 97 96 115 122 128 126 115 100 85 73 68 62 60 65 58 67 84 62 54 57 61 63 66 67 64 55 50 76 95 87 68 58 56 55 57 57 57 58 57 57 56 56 40 51 64 73 68 59 55 58 57 73 86 89 93 95 83 63 64 63 64 70 76 81 84 85 51 46 46 55 60 58 52 48 52 57 56 52 50 50 52 52 60 61 60 59 56 55 52 52 56 57 56 57 57 55 53 51 55 56 58 55 50 48 48 49 52 52 51 49 49 49 51 54 57 60 55 48 64 110 107 99 84 74 62 55 55 64 79 92 71 70 76 86 81 74 71 68 74 85 99 115 127 135 138 140 140 142 144 144 146 148 148 148 149 148 145 142 140 137 136 134 130 126 120 114 111 112 114 117 114 115 115 66 69 73 75 76 78 80 82 85 86 86 85 83 85 90 93 103 112 120 121 120 119 117 111 104 102 103 109 120 133 144 151 161 168 178 186 191 193 195 197 194 192 186 179 176 168 153 139 132 111 110 101 102 109 94 99 90 103 117 124 125 120 106 92 83 72 61 68 59 71 92 59 60 55 54 62 68 66 65 65 56 62 67 66 61 56 55 55 58 57 58 59 62 65 69 71 45 59 74 76 61 48 48 57 65 76 86 90 92 89 76 62 52 53 57 63 66 68 64 62 51 48 49 55 54 49 45 49 50 57 55 48 44 48 51 51 61 61 61 60 58 57 54 54 53 53 53 54 54 53 50 49 55 57 58 55 52 49 49 49 52 53 52 50 49 49 51 54 59 52 58 50 85 112 99 90 75 72 58 49 54 67 77 80 53 71 75 78 81 74 64 68 70 79 91 106 120 129 136 139 138 139 141 142 144 145 145 146 146 144 143 139 138 136 135 135 133 130 126 121 119 119 120 122 116 117 117 67 70 72 75 75 77 79 81 87 88 88 86 85 87 94 99 114 117 118 115 114 117 112 103 97 101 108 115 124 135 147 156 161 167 174 179 180 179 179 179 176 172 166 161 159 153 140 126 120 97 99 88 90 99 86 98 77 85 97 108 121 129 124 112 97 84 71 79 66 71 87 44 49 52 62 69 62 50 55 69 69 57 51 53 59 61 60 61 59 57 53 52 53 56 60 63 83 71 60 58 61 59 55 52 75 76 80 84 89 86 77 67 52 54 53 52 49 49 48 46 51 50 52 56 51 41 40 46 45 53 53 46 42 48 53 53 60 61 61 61 59 58 55 54 52 51 50 51 53 52 49 48 56 58 58 56 52 51 51 52 53 53 52 51 50 50 52 54 61 47 62 52 98 112 91 80 70 72 61 50 55 71 74 66 43 72 75 72 80 74 64 70 67 74 85 100 114 125 132 136 136 137 138 141 142 143 143 144 144 144 141 138 136 135 135 134 129 127 125 124 123 123 124 126 120 121 122 66 68 70 71 72 73 77 79 81 82 83 86 89 98 106 111 113 116 121 119 112 103 97 95 98 104 112 122 130 139 146 153 158 160 162 163 163 162 160 159 158 156 154 153 150 142 131 124 111 103 95 90 89 86 85 86 82 89 88 91 107 122 131 139 117 117 95 80 69 90 55 50 54 55 55 55 57 59 60 63 56 60 63 59 53 51 58 64 57 57 55 55 55 58 63 65 61 64 69 71 67 60 50 43 60 69 79 86 89 88 79 67 58 58 56 53 46 42 40 39 44 43 42 41 39 38 36 35 35 38 42 44 44 46 53 60 56 58 59 59 58 57 55 53 51 52 53 53 53 53 53 53 56 57 57 57 56 55 54 52 53 52 53 52 53 53 54 56 58 55 58 62 109 98 85 75 79 58 57 63 64 80 73 36 43 56 68 76 73 67 68 73 72 75 83 93 107 118 126 131 134 136 137 139 141 144 144 145 145 142 140 139 138 137 133 131 131 129 127 126 127 127 126 125 123 127 130 63 65 67 69 69 71 75 77 79 81 83 86 91 99 108 111 112 112 112 109 102 97 94 92 100 106 114 123 130 137 142 147 149 151 152 153 151 150 150 149 150 148 147 147 145 138 127 121 109 101 94 91 90 86 84 84 84 91 88 88 102 114 120 126 136 135 117 103 85 90 50 47 55 55 55 56 56 59 59 61 57 57 58 58 57 57 56 56 59 57 56 56 57 57 58 57 54 56 61 64 65 63 60 57 52 62 72 79 81 78 67 55 55 56 55 52 47 43 41 40 43 42 41 38 35 33 30 29 30 31 36 41 45 50 55 60 57 58 59 59 58 57 55 53 51 52 53 54 55 54 53 53 57 57 57 57 57 56 56 54 53 51 52 53 53 54 55 55 61 52 53 84 102 91 73 76 69 64 56 62 78 76 56 41 51 54 59 64 66 64 68 73 68 80 98 111 118 122 126 130 131 134 137 140 141 142 144 145 145 144 141 139 138 137 133 131 131 129 127 128 129 129 127 126 128 132 135 57 60 63 65 66 69 72 76 79 79 83 87 93 101 109 113 111 107 102 96 91 90 93 95 106 111 120 128 132 136 139 142 144 144 144 144 142 141 140 139 140 139 139 140 139 133 123 115 103 96 91 91 91 88 85 83 89 95 91 88 100 109 113 119 138 138 133 125 110 97 52 50 56 58 57 57 57 59 58 58 58 53 53 56 62 62 54 47 58 56 55 56 58 58 57 55 53 54 56 58 61 64 65 66 58 64 69 70 72 71 64 55 54 54 55 52 48 45 43 42 39 39 37 35 33 30 28 27 29 30 35 42 50 55 57 59 57 58 59 59 57 56 55 53 51 52 53 54 54 54 53 52 56 57 57 56 56 55 55 54 53 52 53 54 54 55 55 56 61 50 56 108 93 81 62 75 59 66 56 65 87 64 34 46 52 53 54 59 62 61 64 69 70 97 126 140 135 127 125 128 131 133 137 140 142 143 144 145 147 145 141 140 139 139 136 134 132 131 128 129 130 130 129 128 134 138 141 53 56 60 62 64 66 69 74 76 77 81 87 94 103 110 111 109 103 94 87 85 88 95 99 110 115 124 131 134 136 136 138 142 140 140 139 137 136 134 133 133 133 134 136 136 131 121 112 96 90 89 92 94 91 86 82 84 91 89 88 99 108 112 121 125 122 131 134 129 107 60 56 59 58 59 58 58 58 57 56 58 54 53 56 62 62 56 47 54 53 52 54 57 60 61 59 58 58 57 57 58 59 60 61 68 69 65 61 60 65 64 59 53 53 53 51 47 43 41 41 38 38 38 39 38 37 36 35 33 34 37 44 53 57 57 57 57 58 59 59 57 56 55 53 52 52 54 54 55 54 53 53 56 56 56 56 55 55 54 54 53 54 55 57 57 59 58 58 59 51 73 111 85 69 62 67 55 60 66 79 80 47 29 48 47 52 58 65 64 61 64 70 93 126 159 168 152 132 123 126 131 134 138 143 144 145 146 146 148 146 142 141 140 140 138 137 133 131 129 130 131 132 130 130 138 142 145 51 54 57 59 61 64 68 71 73 75 78 85 94 103 107 107 104 96 86 80 81 89 99 106 114 120 127 133 135 136 137 138 139 138 136 135 133 131 131 130 132 132 133 134 134 130 120 110 90 84 87 92 96 95 90 83 74 83 83 82 93 102 108 118 117 111 126 130 135 108 63 56 59 61 61 60 59 58 56 55 58 56 56 57 58 58 57 55 57 55 56 55 55 56 60 62 60 61 60 59 58 56 55 53 64 64 61 57 56 59 58 53 47 48 50 50 47 45 43 44 45 46 47 47 47 47 45 46 40 40 43 48 54 56 56 53 57 58 59 58 57 56 54 52 52 52 53 55 55 54 54 53 56 57 57 57 57 56 55 56 56 58 59 61 61 62 61 61 55 60 93 96 80 60 66 55 55 52 78 92 64 38 40 49 46 54 62 65 61 61 74 92 133 163 190 190 165 139 127 127 132 136 141 147 148 149 147 147 148 146 142 140 140 140 139 138 133 132 131 132 133 134 133 133 142 145 148 49 52 55 57 58 61 65 68 72 71 74 83 94 101 103 102 97 89 81 79 83 94 105 111 119 124 129 133 135 135 135 136 135 134 132 130 128 128 127 128 133 133 133 134 133 128 118 106 87 81 85 94 100 97 93 87 78 85 84 82 92 98 104 113 121 113 124 115 120 92 59 53 59 61 61 60 59 59 57 55 53 55 58 58 58 56 58 61 61 64 65 62 56 52 56 60 58 58 59 59 58 57 53 53 54 59 62 63 63 62 55 44 43 45 48 51 49 48 48 48 48 49 49 48 47 45 44 42 46 46 48 51 54 55 54 53 57 58 58 58 57 56 54 52 53 53 54 55 55 54 54 54 55 56 56 57 56 56 55 57 57 60 61 63 64 64 63 60 55 72 103 78 72 56 66 49 57 55 83 87 50 41 55 50 51 55 59 58 56 68 99 131 174 193 206 199 174 148 134 130 133 136 143 150 152 151 149 148 148 145 141 139 139 140 139 139 134 133 132 133 136 137 135 134 143 147 150 48 49 52 53 54 56 61 62 69 69 72 80 91 98 98 96 94 88 84 84 93 105 115 120 127 130 132 134 133 132 132 133 134 133 131 129 127 128 128 128 133 132 131 132 130 124 113 102 86 81 87 95 101 100 96 91 82 91 89 85 91 93 98 109 122 114 120 89 91 68 53 58 58 60 61 61 59 58 56 54 48 51 56 59 59 59 59 60 59 67 75 72 61 52 53 59 57 57 57 57 56 56 55 55 54 60 63 64 64 65 58 49 48 49 52 54 52 49 48 47 46 47 47 48 45 44 43 42 49 50 53 53 53 53 55 56 56 57 58 58 56 55 54 52 53 53 55 56 55 55 54 54 55 56 56 57 57 57 56 57 57 58 62 63 64 64 62 59 58 85 94 71 62 58 56 53 58 71 80 64 50 53 57 51 51 53 56 60 67 92 132 168 197 203 204 195 174 153 136 129 131 137 143 149 153 152 149 147 147 144 140 138 138 139 139 139 136 134 134 136 138 139 137 137 146 150 153 46 48 50 51 51 54 57 59 68 68 70 79 90 97 96 92 95 90 88 92 103 115 124 128 132 133 134 133 131 130 130 130 135 134 132 130 130 130 130 131 133 131 130 130 127 120 110 99 87 84 87 95 101 100 96 93 79 89 89 83 86 87 90 100 114 110 113 68 65 49 52 67 57 58 59 60 58 58 56 55 44 48 54 60 64 62 59 55 52 66 79 78 66 55 55 62 59 58 56 55 54 54 56 56 59 59 57 54 55 60 60 55 56 56 58 57 52 47 44 44 47 49 51 52 53 53 51 53 50 53 56 54 52 52 55 60 56 57 57 58 56 55 54 52 53 53 55 56 57 56 55 55 56 58 57 59 58 58 58 59 57 58 61 62 63 63 61 56 60 93 81 72 56 63 46 62 61 93 76 45 56 66 55 52 48 50 57 68 86 116 157 190 203 201 195 186 172 153 135 124 129 135 142 149 152 151 148 146 147 143 139 137 137 139 139 139 136 135 135 136 138 139 139 138 147 151 154 48 47 45 46 48 51 56 58 61 64 69 76 82 88 92 94 88 89 93 101 110 120 129 133 140 140 138 135 130 128 128 130 131 133 131 132 131 131 132 132 128 128 128 125 120 111 101 93 92 92 92 94 95 96 96 94 79 84 92 96 89 81 83 92 104 89 68 55 55 58 61 59 57 58 57 58 56 56 53 53 47 51 56 62 64 64 61 57 57 48 87 75 47 61 60 56 59 58 57 56 55 54 53 52 55 59 62 60 55 56 62 67 66 57 50 52 50 45 45 50 55 53 54 55 57 58 55 55 59 60 58 56 56 55 55 55 57 57 57 58 57 57 57 56 55 54 56 57 59 59 57 55 56 57 57 58 58 58 59 60 57 61 58 52 57 68 64 49 95 87 75 61 51 50 56 69 91 71 52 51 63 66 54 43 46 49 56 74 110 155 186 198 203 190 182 178 160 132 118 123 128 135 143 148 149 148 146 145 142 138 134 134 137 139 138 136 139 140 139 139 138 139 143 147 155 157 158 48 47 46 46 47 51 54 56 60 63 68 74 80 85 89 92 90 93 98 106 116 126 135 140 141 140 137 132 128 126 127 130 134 135 136 136 136 134 134 133 128 127 124 120 115 107 98 93 96 96 94 94 92 93 94 93 93 89 88 90 86 83 82 89 85 76 62 54 54 57 57 57 56 56 56 56 55 54 52 53 48 53 57 61 65 64 60 57 56 60 82 72 52 58 58 52 61 60 59 59 58 57 56 54 55 56 55 51 49 49 55 60 68 56 47 47 48 46 49 54 53 51 50 58 69 73 68 63 58 57 57 57 56 56 57 57 56 56 57 57 57 57 57 55 54 53 54 56 59 58 57 55 56 58 58 59 59 60 60 60 57 63 58 53 58 60 58 61 95 81 67 57 57 61 64 74 64 63 58 58 61 61 59 61 47 55 75 104 143 176 195 199 186 185 182 169 142 117 112 123 127 134 141 147 148 147 144 144 140 137 134 134 138 140 140 139 141 141 142 140 140 142 146 149 156 157 158 49 49 47 46 47 49 52 53 59 62 66 72 77 82 85 87 89 93 100 110 120 131 139 144 142 140 137 132 127 124 125 127 134 136 138 139 138 136 132 130 128 124 118 112 106 100 94 93 98 98 95 92 90 91 92 92 96 87 82 85 88 86 80 79 62 60 56 55 54 54 55 55 55 56 56 56 54 53 51 53 51 54 57 60 63 63 60 56 53 74 70 65 60 54 59 54 58 58 58 58 56 55 54 51 57 55 51 51 51 54 58 60 60 52 48 49 51 52 55 61 55 65 78 89 90 81 66 56 54 55 55 55 56 57 59 59 55 56 56 56 56 56 56 56 53 52 53 55 58 58 56 55 56 58 59 60 60 60 60 60 57 64 57 54 59 49 52 80 92 75 59 57 65 73 75 79 56 62 63 64 60 54 52 55 43 60 93 136 171 188 194 192 180 184 180 154 117 98 104 120 125 131 140 146 146 146 144 143 137 135 134 136 139 142 143 142 144 144 144 144 143 146 148 153 161 163 163 52 52 49 49 50 51 52 54 59 62 65 70 74 79 81 83 86 90 97 108 119 130 137 143 145 144 139 133 127 124 124 126 131 133 136 138 136 133 127 125 123 118 110 102 97 93 90 91 97 98 95 92 89 89 90 91 86 81 81 88 91 84 71 63 50 53 53 54 53 53 54 56 55 56 56 57 54 54 51 54 54 56 55 58 62 63 59 56 52 85 60 56 66 53 61 61 56 56 57 58 57 55 54 51 54 51 50 52 58 62 63 61 52 53 54 53 50 51 55 60 85 98 109 105 86 65 54 52 54 55 55 56 56 57 57 58 55 56 56 57 56 56 56 55 53 54 54 57 60 60 57 57 57 59 59 60 60 61 59 60 58 64 56 56 59 43 53 97 85 72 62 62 73 81 81 85 70 70 66 67 67 61 54 50 50 70 107 147 172 180 184 186 187 184 167 130 95 87 99 114 123 131 138 145 145 145 143 142 135 134 135 138 141 143 145 146 145 145 146 146 145 147 151 156 166 166 166 56 56 54 54 54 54 55 56 62 64 67 71 75 78 80 82 85 88 95 105 115 125 134 138 146 145 141 135 129 125 124 124 126 129 133 134 132 128 122 119 115 110 101 95 91 90 89 90 96 97 95 92 91 90 90 90 84 81 81 86 83 72 58 52 49 51 53 53 51 51 53 57 56 57 58 58 56 55 53 55 59 58 54 56 59 61 59 55 57 92 61 53 65 51 58 63 58 58 58 58 59 58 56 55 51 49 49 55 60 62 59 55 55 59 60 54 49 53 66 77 120 113 96 74 56 50 55 64 57 57 55 55 54 55 55 55 54 55 55 56 56 56 55 55 55 55 55 58 61 61 59 59 56 58 59 60 60 60 59 59 59 61 56 57 56 48 64 105 78 72 69 73 80 85 86 90 75 74 68 67 67 64 66 71 85 103 129 153 164 169 178 185 183 167 134 99 80 83 97 108 123 130 138 144 146 145 144 142 135 134 138 140 142 144 146 147 145 146 147 147 147 150 154 158 167 167 167 61 62 61 61 61 60 61 61 66 68 71 74 76 79 81 82 87 90 94 101 110 121 128 133 140 140 138 133 127 121 119 118 119 122 125 126 125 121 116 114 107 102 95 91 90 90 90 91 94 95 94 93 93 92 92 89 94 85 77 73 64 56 50 50 53 54 53 52 50 52 54 59 57 59 59 59 58 57 55 57 62 59 53 53 57 60 59 55 63 91 73 58 64 54 51 60 57 55 55 55 55 55 55 55 60 58 57 60 62 61 56 52 57 60 58 56 62 80 98 112 104 84 61 49 52 59 61 59 59 58 57 56 55 55 53 54 54 54 55 56 56 55 55 54 56 56 56 59 62 62 60 60 56 58 59 59 60 59 58 58 60 57 59 57 54 62 84 102 76 74 76 78 83 87 92 97 71 74 70 62 51 54 77 102 138 148 155 154 155 163 173 176 149 125 96 74 70 80 95 106 122 130 139 145 146 145 143 142 136 137 141 143 143 143 145 146 148 149 150 150 151 153 159 162 173 172 171 65 66 66 67 67 67 66 67 70 72 74 77 78 81 82 83 90 92 93 97 104 113 122 126 130 131 132 129 123 115 111 109 109 111 113 115 115 111 107 105 97 95 92 90 91 91 92 92 92 93 94 95 95 96 93 89 95 79 66 59 55 50 51 53 55 54 52 51 52 53 55 57 58 61 61 62 60 59 57 59 64 60 53 51 56 60 58 53 57 78 84 66 66 63 49 60 60 57 55 54 55 57 59 59 68 65 63 62 61 59 56 56 56 57 55 59 74 92 100 99 61 56 52 56 65 69 61 52 59 59 57 57 56 56 55 55 54 55 54 56 56 55 55 54 55 54 56 59 62 62 60 60 56 59 59 59 59 58 58 57 62 55 61 57 50 80 107 93 80 75 74 77 84 93 101 106 75 72 63 55 53 71 111 146 178 179 165 146 141 150 151 140 102 84 69 66 68 74 88 104 124 130 139 144 147 145 145 143 139 140 144 145 143 142 143 145 151 153 153 154 155 157 163 166 175 174 172 67 68 69 69 71 71 70 71 72 74 76 78 80 81 82 84 89 90 89 91 97 107 115 120 123 125 127 124 119 110 105 103 102 103 104 105 105 103 98 96 93 92 90 91 93 94 94 93 93 93 93 93 93 93 91 87 84 69 57 55 56 54 54 54 54 52 52 52 55 55 54 54 58 60 60 61 59 59 58 60 65 60 51 51 57 61 59 56 50 65 91 73 68 70 50 63 70 66 64 63 63 66 69 71 64 61 58 54 54 55 57 60 63 61 58 63 77 81 64 41 45 53 62 65 62 59 59 61 57 57 57 56 57 58 57 58 56 56 56 56 57 56 55 55 54 54 56 58 61 61 60 59 57 59 59 59 59 59 58 58 63 53 61 56 47 92 122 88 89 81 77 77 87 97 104 110 84 72 57 59 80 116 162 193 188 184 158 130 126 135 125 98 68 60 61 68 69 67 80 101 123 131 139 145 147 146 144 142 141 143 146 147 143 142 143 146 155 157 157 158 158 162 166 171 167 165 164 75 75 74 74 74 74 74 75 78 79 80 81 82 84 85 85 91 90 89 89 93 97 102 106 110 112 115 115 112 106 98 93 96 95 93 90 90 89 90 90 91 91 92 92 92 92 93 94 98 101 90 79 87 92 90 91 78 70 60 56 56 56 52 49 54 55 55 55 55 55 54 55 56 56 57 57 57 57 56 59 59 62 57 49 50 57 60 57 53 53 58 67 75 72 61 50 80 74 70 69 73 72 68 61 55 56 58 58 57 55 57 61 69 65 57 50 48 52 59 63 58 61 64 64 62 60 57 58 56 56 56 57 57 57 57 57 52 53 54 55 56 57 57 57 59 57 57 61 65 66 65 63 58 60 61 60 58 58 56 56 65 60 47 47 76 109 109 86 76 78 81 85 88 93 97 106 89 75 69 97 141 176 188 189 181 157 128 109 100 93 80 68 61 67 64 62 67 67 78 100 115 131 143 147 146 146 147 144 144 145 147 147 146 147 150 152 156 158 159 161 163 167 170 170 168 155 145 78 78 78 78 78 78 78 78 79 80 80 82 83 84 85 86 91 90 89 89 91 95 98 100 101 103 105 105 102 96 91 88 91 90 86 84 84 84 86 87 90 90 91 92 93 94 95 95 97 103 91 83 86 88 82 82 73 67 61 57 56 55 52 51 54 56 56 56 55 56 55 55 55 55 55 55 56 56 56 58 60 62 57 49 50 58 62 60 58 52 52 59 69 79 81 79 70 65 60 59 62 62 58 53 56 56 56 56 56 58 62 66 64 61 57 52 52 55 60 64 64 64 65 63 58 56 55 56 54 54 55 56 56 57 57 58 57 58 58 59 59 59 57 57 58 59 60 63 65 63 61 59 59 61 61 60 59 58 56 58 57 56 53 60 81 101 94 77 78 84 89 92 94 94 95 102 95 103 114 144 175 190 178 160 130 117 101 88 80 72 63 56 60 66 63 61 65 67 77 100 116 131 144 148 146 148 147 145 145 146 148 148 147 148 151 152 157 157 160 162 166 169 169 168 152 141 131 84 84 84 84 84 84 84 84 82 83 84 85 86 87 88 88 93 93 91 91 91 91 93 93 93 94 95 95 94 91 87 86 86 84 81 78 77 79 81 82 87 87 89 91 92 94 96 97 96 101 94 88 91 88 74 71 65 63 60 56 55 57 57 57 56 55 55 57 56 55 55 55 55 55 55 56 56 56 57 59 62 62 58 50 51 58 62 62 63 56 50 52 60 70 77 78 59 53 51 53 58 63 62 60 57 54 51 51 54 57 60 64 55 56 53 52 52 55 59 61 68 67 66 63 58 56 54 55 54 54 54 55 55 57 57 58 58 59 59 60 59 58 57 56 57 60 64 66 63 58 55 55 59 60 60 59 58 57 55 57 54 54 57 70 83 87 80 73 77 83 89 94 97 97 95 101 114 141 166 185 192 179 144 111 82 83 80 76 67 60 57 56 59 65 63 60 65 66 77 99 118 133 146 150 148 150 149 148 148 149 150 150 148 149 151 153 157 157 159 164 169 170 166 160 137 127 120 88 88 88 88 88 88 88 88 86 87 87 88 89 90 91 91 93 94 94 95 94 92 92 92 93 93 93 94 93 91 90 91 89 86 82 78 76 77 78 79 81 84 86 88 90 93 95 97 97 99 91 91 98 91 71 61 61 60 58 57 56 57 61 62 57 55 56 57 56 56 56 55 55 56 56 56 56 56 57 59 63 62 57 51 51 56 61 64 63 58 55 53 55 58 60 58 55 50 50 52 56 60 62 61 56 52 49 50 54 56 55 55 51 54 53 54 54 56 58 58 65 66 66 64 60 58 56 56 54 55 55 56 56 57 58 59 57 58 58 59 58 58 57 57 60 64 67 65 59 54 54 55 59 59 59 59 58 56 55 57 61 53 53 69 80 77 76 81 80 85 90 94 97 97 97 103 133 169 189 184 161 134 96 65 62 66 70 70 65 61 61 61 57 64 62 60 64 66 76 98 119 134 147 151 150 152 151 151 151 152 152 151 150 150 153 155 158 159 163 168 172 167 157 146 132 123 118 90 90 90 90 90 90 90 90 90 90 91 91 92 93 93 93 94 95 96 97 97 96 95 94 96 96 96 95 95 96 96 97 94 90 85 80 77 75 75 75 77 79 81 83 87 90 92 92 96 93 85 91 105 100 79 67 61 58 57 56 56 60 65 65 58 55 56 58 57 57 57 56 56 56 56 57 57 57 57 59 63 62 58 54 52 55 61 66 59 59 58 57 56 58 60 59 58 53 51 51 53 53 52 51 54 53 52 56 57 56 51 48 53 57 57 58 58 58 56 55 58 59 63 64 62 60 58 57 55 54 54 55 56 58 58 60 58 59 60 61 61 62 61 62 64 66 66 61 55 53 55 58 59 60 59 58 57 56 55 56 64 52 51 71 81 78 78 87 85 88 90 92 93 96 97 104 137 165 169 142 107 83 64 50 58 59 61 63 63 63 59 58 57 63 61 59 63 65 75 98 120 135 148 152 151 154 153 153 154 154 154 153 151 152 155 158 160 162 167 169 168 159 146 134 133 124 120 92 92 92 92 92 92 92 92 92 93 93 93 94 94 95 95 95 96 97 98 98 98 97 97 97 97 96 96 96 96 97 98 95 93 88 82 77 74 72 72 74 75 77 79 81 84 86 85 88 85 80 87 104 102 88 83 65 60 57 56 58 62 66 64 59 55 56 57 57 57 57 56 56 57 57 57 57 57 57 59 63 61 60 57 54 53 59 65 66 64 59 55 50 52 59 61 54 52 55 57 59 59 59 58 53 55 57 61 61 58 51 48 57 61 61 62 61 60 58 56 54 56 59 62 61 60 59 59 56 55 55 56 58 59 60 61 62 63 65 65 65 65 64 66 63 64 61 56 53 53 56 60 60 60 60 58 57 55 54 54 58 51 57 79 89 82 79 86 89 91 90 91 92 95 96 103 120 131 124 96 69 59 59 60 61 60 60 63 65 65 60 55 57 63 60 58 62 64 74 97 120 135 148 153 152 154 154 154 154 156 155 153 153 155 158 161 165 167 168 166 159 148 138 130 134 126 121 94 94 94 94 94 94 94 94 94 94 94 95 95 95 95 96 97 98 98 98 96 96 97 97 97 96 96 96 96 97 97 97 95 94 91 87 82 77 73 72 72 72 74 75 76 77 79 78 80 81 78 82 89 87 84 91 75 65 57 55 59 62 64 60 58 55 56 58 57 58 58 58 57 58 58 58 58 58 58 59 61 61 61 60 56 52 57 65 67 65 61 54 47 48 54 58 53 54 59 64 66 66 64 63 50 55 58 62 60 56 53 53 60 62 62 63 62 61 59 58 55 56 56 57 56 58 61 63 58 57 57 58 59 59 61 62 66 67 67 66 65 63 61 62 60 58 56 54 55 56 58 58 61 60 60 58 57 55 54 54 51 53 66 85 87 80 80 90 89 90 92 92 91 92 91 98 98 96 83 71 63 61 62 63 61 63 66 70 71 68 62 57 56 62 60 58 62 63 74 96 119 135 148 153 152 155 154 154 155 157 156 155 154 157 161 165 171 169 165 156 145 137 135 136 136 128 121 95 95 95 95 95 95 95 95 94 95 95 95 95 95 96 96 100 99 97 96 95 94 94 96 97 97 97 97 96 96 97 96 97 95 94 91 87 82 77 76 70 71 72 72 73 75 75 74 74 80 79 76 75 69 74 91 83 70 59 55 59 61 60 55 58 56 57 59 59 59 59 59 58 58 58 58 58 58 58 59 59 58 60 62 57 51 55 63 57 59 62 60 56 55 60 63 61 63 67 68 64 59 53 49 48 54 58 60 58 57 56 58 61 62 63 64 64 64 62 61 59 58 55 54 53 57 63 67 60 59 59 60 60 61 62 64 68 68 67 65 63 59 56 57 55 56 53 54 58 60 58 56 61 60 60 60 58 56 54 54 49 56 71 83 80 76 82 95 87 89 91 93 93 92 89 94 88 77 64 65 71 69 61 55 56 62 69 74 73 67 62 58 56 62 59 57 62 63 73 96 119 134 148 152 152 155 154 154 156 156 156 155 155 158 163 167 173 171 163 149 135 131 136 143 138 129 122 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 95 96 96 96 96 96 96 96 97 97 97 97 98 98 98 98 98 95 95 94 95 93 88 80 76 73 72 69 68 69 71 71 69 74 75 68 74 81 70 75 107 104 86 71 65 64 61 59 59 51 53 54 55 55 56 59 61 60 60 60 60 59 59 59 60 50 55 59 58 55 53 55 57 65 59 54 52 54 60 67 72 68 69 67 58 54 56 55 52 57 57 56 56 57 58 60 60 61 61 62 63 64 65 66 64 59 58 55 54 54 56 58 60 61 61 63 65 65 66 64 64 72 69 65 59 53 51 49 50 57 59 57 58 58 59 59 60 57 56 57 57 57 56 54 51 45 65 79 77 76 81 85 82 92 92 85 84 90 88 87 103 84 81 75 75 72 64 61 63 60 80 94 91 79 70 65 61 59 63 61 61 63 61 72 98 121 136 148 151 150 153 154 155 157 158 159 159 159 162 167 170 173 163 147 137 135 137 142 144 137 128 121 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 95 95 95 95 95 95 96 96 96 96 97 97 97 97 97 97 97 96 96 95 95 93 89 82 78 74 72 68 68 69 70 70 69 70 67 69 76 73 65 82 117 100 96 86 72 64 64 62 56 57 61 61 62 59 59 57 58 58 58 58 58 58 58 58 59 63 66 66 61 54 49 49 50 53 54 59 65 69 73 74 75 66 69 66 59 57 61 63 61 63 62 62 61 61 62 64 63 61 60 60 62 63 63 63 62 64 61 58 56 55 56 57 56 60 60 63 65 67 67 68 69 66 65 61 58 54 53 52 55 58 61 59 59 58 59 60 60 59 59 57 58 57 56 54 52 52 68 78 75 74 81 84 82 83 88 85 86 93 87 83 99 87 99 106 102 84 67 64 72 88 98 102 92 78 69 63 60 58 62 60 60 64 62 72 98 122 136 148 152 150 154 154 155 160 159 157 158 160 164 167 170 166 154 140 134 137 141 141 139 137 128 121 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 95 95 94 94 95 95 96 96 96 96 96 96 96 96 96 96 96 97 96 97 97 95 92 86 82 75 73 70 69 69 70 68 67 69 62 71 75 63 64 92 116 87 100 101 84 70 71 66 57 55 58 58 58 57 56 54 54 56 55 55 55 55 56 56 56 51 53 54 51 48 47 49 51 65 67 71 76 76 74 70 68 66 67 63 59 60 65 69 69 68 67 66 65 64 65 65 64 59 59 58 60 60 60 61 60 63 60 59 56 56 56 58 57 57 57 59 62 63 65 65 65 59 58 56 55 54 54 55 58 59 60 59 59 58 59 59 60 59 59 59 57 56 55 54 52 59 70 78 74 72 79 83 82 79 84 83 86 93 89 91 108 125 137 139 120 88 68 74 90 113 111 101 85 73 67 64 60 57 60 58 60 65 63 73 98 122 137 149 152 151 154 154 154 162 160 157 159 164 167 168 167 153 143 132 132 140 144 141 133 136 127 120 96 96 96 96 96 96 96 96 97 97 97 97 97 97 97 96 96 95 96 96 96 97 97 97 97 97 97 97 97 97 97 97 98 98 98 98 97 94 90 86 79 75 72 70 69 68 68 66 70 65 73 70 59 78 100 96 66 84 100 95 83 74 68 64 56 57 55 55 56 58 59 58 62 62 62 62 63 63 63 62 63 66 68 70 70 73 77 80 83 80 77 73 71 67 65 65 69 67 62 59 61 66 70 73 69 69 66 66 64 64 64 63 59 57 58 59 59 60 59 59 58 57 55 55 56 58 59 59 58 56 57 58 58 58 57 56 55 55 54 54 55 56 57 60 60 60 59 57 58 57 58 59 58 59 59 57 56 54 55 53 68 72 75 72 73 79 84 84 81 84 81 83 92 95 104 126 148 146 130 104 82 79 96 114 116 105 88 76 69 66 65 61 56 59 57 60 65 64 73 97 120 136 149 153 152 155 154 155 160 158 158 162 168 170 165 160 140 135 131 135 142 145 141 135 135 126 119 96 96 96 96 96 96 96 96 97 97 97 97 97 97 97 96 96 96 96 97 97 97 98 98 98 98 98 97 97 97 97 97 99 98 98 98 98 97 93 90 82 79 75 71 69 69 67 66 72 70 71 62 62 90 96 63 52 64 89 106 101 82 73 77 73 70 64 62 64 68 71 71 74 74 74 74 75 75 75 75 83 84 83 82 83 83 85 85 76 73 69 67 66 67 69 70 73 68 61 60 62 66 68 71 68 66 65 63 62 62 62 62 59 58 58 58 61 60 60 59 57 56 56 56 57 58 58 58 59 57 57 58 57 56 56 56 56 56 56 56 57 58 58 59 58 58 57 56 56 55 56 57 56 57 58 56 53 53 55 57 72 73 73 73 75 82 87 88 81 85 82 86 96 98 103 122 114 105 89 82 90 105 118 124 105 91 76 68 68 67 65 61 57 59 56 59 66 64 72 94 117 133 147 152 152 155 155 156 157 158 161 168 170 168 157 147 131 132 136 140 142 142 141 138 134 123 116 96 96 96 96 96 96 96 96 98 98 98 98 98 98 98 97 98 98 98 98 98 99 99 100 100 100 99 99 98 98 98 98 99 98 98 99 99 98 96 93 87 83 77 74 72 69 66 65 71 70 66 61 69 89 79 46 60 62 84 112 118 100 88 93 85 80 71 67 68 71 71 71 72 74 72 74 74 75 75 75 72 71 72 71 72 72 71 70 66 65 66 66 67 66 65 65 73 66 59 61 63 64 65 67 64 64 62 60 60 59 59 60 60 61 60 61 61 61 61 61 60 60 59 57 57 56 55 54 57 56 57 58 59 61 60 62 57 57 58 58 59 59 59 58 58 57 55 54 53 53 53 54 54 56 57 56 52 53 58 60 77 75 74 77 81 86 88 87 78 84 86 92 101 94 86 94 79 78 79 92 114 126 120 106 95 81 69 68 70 68 62 59 58 59 56 59 66 64 70 91 113 129 145 151 151 155 155 156 156 160 164 168 168 160 147 138 129 134 140 142 141 141 140 140 132 122 115 96 96 96 96 96 96 96 96 98 98 98 98 98 98 98 98 98 98 98 99 99 100 100 100 100 100 100 100 99 99 98 98 99 97 98 99 100 99 96 95 91 87 81 76 73 71 67 67 70 69 64 70 80 72 57 52 67 65 75 98 113 109 97 89 81 76 68 66 68 69 66 64 67 67 67 68 67 68 69 68 65 65 68 71 73 74 73 71 65 65 66 66 65 64 61 60 69 60 54 58 62 61 61 63 60 59 58 57 56 56 57 58 60 61 61 61 61 61 61 60 60 61 60 58 57 56 54 54 57 57 57 57 57 59 60 61 57 58 58 59 59 60 59 59 56 56 54 53 52 52 52 53 50 54 56 54 51 53 58 64 80 78 78 81 86 88 85 82 79 84 84 92 102 91 75 75 78 90 103 114 121 122 108 93 86 72 64 66 70 68 61 58 59 60 56 60 67 64 68 88 108 125 142 149 151 155 156 157 158 162 166 166 161 151 140 133 134 136 138 140 141 142 139 137 131 121 114 96 96 96 96 96 96 96 96 98 98 98 98 98 98 98 98 98 99 99 99 100 100 100 100 100 100 100 100 99 99 99 99 98 97 97 97 100 99 97 96 93 89 83 78 75 72 68 67 69 67 65 83 92 63 49 74 64 61 59 71 90 101 88 71 74 69 66 67 71 71 67 62 68 68 68 69 69 69 67 68 63 64 66 69 71 70 66 62 66 64 62 61 62 64 67 69 65 56 52 58 62 61 60 63 59 58 58 56 55 55 56 59 58 59 59 60 60 60 60 60 56 57 58 58 59 59 57 57 58 57 55 55 54 53 55 55 56 57 59 60 60 61 60 59 57 55 54 53 52 52 52 53 50 53 56 54 52 53 59 66 85 80 79 83 87 86 82 78 84 85 82 88 100 90 75 74 88 107 120 120 110 104 99 95 76 63 57 62 67 66 60 60 61 61 57 60 67 63 66 85 104 122 138 147 150 154 157 157 160 163 164 162 154 144 136 131 140 137 135 138 141 142 138 133 131 121 114 96 96 96 97 97 98 98 98 97 97 97 97 97 97 97 97 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 93 96 100 100 98 96 96 98 97 97 93 86 81 78 72 65 70 62 73 103 120 108 89 79 66 66 68 70 72 74 75 75 69 69 70 72 70 68 67 70 68 69 69 68 67 66 63 61 66 67 67 68 68 70 70 69 67 66 64 63 63 63 63 66 66 62 57 55 57 61 62 62 63 63 61 59 57 56 56 57 59 60 60 60 59 58 58 58 58 58 58 58 58 58 58 58 57 57 56 56 55 55 55 56 56 56 57 56 57 56 56 56 56 56 55 56 54 54 53 53 49 54 52 51 54 52 56 73 83 83 82 82 80 81 81 82 84 84 91 99 95 85 86 95 126 120 111 106 103 98 89 82 68 62 58 59 62 66 64 62 56 57 58 58 61 63 66 69 95 114 134 145 149 154 157 157 158 167 167 152 138 134 134 132 134 136 138 141 140 138 135 132 130 118 109 96 96 96 97 97 98 98 98 97 97 97 97 97 97 97 97 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 98 97 98 99 102 103 101 100 99 104 105 103 99 94 85 76 74 62 63 80 88 78 69 68 87 84 81 80 78 77 76 76 85 73 62 61 67 70 66 62 68 68 70 69 69 66 64 63 67 67 67 69 69 70 70 70 69 67 66 65 64 64 64 66 68 67 62 58 57 58 60 60 65 64 62 60 58 57 56 57 59 60 59 59 59 58 58 58 57 57 57 57 58 58 58 58 57 57 57 57 57 57 57 57 57 58 58 57 57 57 57 57 56 56 56 55 54 54 54 54 49 55 52 51 54 51 55 72 82 83 81 80 81 80 81 83 79 83 91 101 105 107 113 120 116 110 102 97 95 92 86 80 70 64 59 58 61 64 62 61 58 59 59 60 60 63 65 68 91 109 129 140 147 153 157 158 159 162 158 145 134 131 131 130 134 135 137 139 138 136 134 132 127 116 107 96 96 96 97 97 98 98 98 97 97 97 97 97 97 97 97 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 100 95 93 95 101 103 100 98 98 108 120 123 121 117 105 96 84 70 62 66 64 56 55 61 55 57 59 64 73 80 88 91 94 84 72 67 68 71 68 64 65 66 68 70 70 69 68 68 68 68 68 69 69 70 69 69 68 68 68 67 66 66 66 67 69 69 66 62 58 56 57 59 64 64 62 61 58 57 56 58 59 59 59 59 58 58 58 58 57 57 58 58 58 58 58 58 57 57 57 57 57 56 56 56 59 59 58 59 58 58 58 58 56 56 55 55 54 53 53 53 49 54 52 50 54 51 55 71 80 80 80 81 82 83 85 86 87 91 94 98 105 114 119 119 101 95 89 85 86 86 84 82 73 68 62 59 60 62 61 59 60 61 60 60 60 62 64 67 87 105 124 136 145 153 159 159 161 157 148 137 130 130 130 128 133 135 136 138 137 135 133 131 125 113 103 96 96 96 97 97 98 98 98 97 97 97 97 97 97 97 97 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 100 97 95 95 97 99 101 102 102 116 132 141 143 140 130 122 99 84 71 69 67 61 60 67 57 54 52 53 54 57 61 61 76 83 86 79 70 66 68 70 64 65 66 68 69 69 69 69 68 69 69 69 69 69 69 71 70 69 68 68 67 67 68 68 67 70 70 65 59 56 57 60 64 64 63 61 58 58 57 58 58 59 59 58 58 58 57 57 57 57 58 58 58 58 58 58 57 57 57 56 56 56 56 56 59 59 59 59 58 58 58 58 55 55 55 54 53 53 53 52 49 54 51 50 53 50 54 70 79 79 80 82 83 86 87 90 93 97 95 90 95 104 102 93 85 81 77 75 77 81 82 83 76 71 65 61 61 61 60 59 61 61 59 60 60 61 63 65 83 101 120 134 145 155 161 162 162 152 139 130 128 130 130 128 133 134 135 136 135 134 132 131 124 111 102 97 97 97 98 98 99 99 99 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 99 102 104 103 99 97 101 110 119 126 141 157 165 167 164 157 150 123 102 82 74 72 69 69 72 76 72 68 62 57 55 54 52 53 66 79 79 73 71 69 66 64 65 66 67 69 69 69 69 69 68 68 69 69 69 69 69 70 69 70 69 69 69 69 70 65 67 69 66 62 57 59 60 63 63 62 61 59 58 58 59 58 59 58 58 58 57 57 57 58 58 58 58 58 58 58 58 57 58 57 57 57 56 56 55 58 58 57 58 58 57 57 58 55 54 54 53 52 51 51 52 49 55 52 50 52 50 54 68 78 78 81 84 85 87 89 91 89 92 90 85 88 94 89 75 72 69 66 65 68 73 76 78 75 72 69 65 63 62 60 58 60 60 59 59 59 60 62 64 80 97 118 133 146 157 163 163 159 145 131 125 126 129 129 128 131 132 133 133 132 131 130 129 124 112 102 97 97 97 98 98 99 99 99 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 99 97 100 102 99 100 109 129 144 163 177 193 198 196 192 185 178 156 130 99 81 73 69 68 70 69 69 67 66 66 67 69 69 52 56 61 68 79 87 81 67 71 70 70 70 70 70 68 68 69 68 69 69 68 68 68 69 69 70 69 69 68 69 70 69 63 64 67 67 65 61 61 61 62 63 62 61 60 59 58 59 58 58 58 58 57 58 57 56 58 58 58 58 58 58 58 58 58 58 57 57 56 55 55 56 56 57 57 57 56 57 56 56 54 54 53 52 51 52 51 52 50 54 51 50 52 49 53 66 77 77 80 84 86 88 89 92 92 91 87 83 83 81 73 64 60 59 57 57 59 62 66 69 72 72 71 70 67 64 62 60 58 57 57 57 57 59 62 64 76 94 115 132 147 159 163 161 152 137 125 123 127 128 128 129 131 131 131 131 131 130 129 128 121 110 101 97 97 97 98 98 99 99 99 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 96 97 100 103 112 133 158 176 194 210 225 230 227 222 214 206 188 165 135 109 89 76 69 68 74 72 70 67 62 59 56 55 60 59 53 55 71 92 96 87 81 79 78 77 74 72 69 68 68 68 68 67 67 66 67 67 68 68 68 69 68 69 70 69 64 64 66 67 67 64 59 57 61 62 62 61 60 59 59 60 58 58 58 57 57 57 56 57 58 58 58 58 58 58 58 58 58 58 57 57 56 56 55 56 56 57 56 56 56 55 55 55 54 54 53 53 52 51 50 51 49 55 52 49 52 48 52 65 77 77 80 85 88 89 90 92 94 87 80 78 74 66 58 56 55 55 54 53 53 56 58 60 68 70 72 73 70 67 64 62 56 54 54 55 56 59 60 63 72 89 113 131 147 158 161 156 141 129 120 122 126 126 126 128 130 130 130 130 129 129 128 128 118 107 96 97 97 97 98 98 99 99 99 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 99 99 99 99 99 99 99 98 103 103 103 113 132 160 188 208 207 224 242 248 247 243 236 226 208 193 171 145 117 92 77 72 73 73 71 68 65 61 57 57 58 61 53 45 54 81 102 109 92 90 87 84 78 74 70 68 68 69 69 67 67 66 67 67 68 67 67 67 67 68 69 69 66 65 66 68 69 65 58 53 60 61 61 61 60 60 60 60 58 58 58 58 57 56 57 57 58 58 58 58 58 58 58 59 58 59 57 57 56 57 56 55 56 56 55 56 55 55 54 54 54 54 53 52 51 52 51 52 50 55 52 49 51 48 51 66 77 79 82 85 88 90 91 92 84 74 67 68 65 56 55 60 55 56 55 55 53 54 56 57 65 69 74 75 73 70 65 62 54 52 53 54 55 58 60 63 69 87 111 130 146 157 158 153 134 123 118 122 126 124 124 127 130 130 129 129 129 128 128 127 116 104 93 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 98 98 99 99 100 100 100 100 100 100 100 100 100 100 100 98 100 115 146 175 198 220 238 244 247 252 255 255 251 247 242 225 216 202 182 160 132 98 72 72 71 69 68 60 54 52 57 60 61 56 54 69 105 147 172 140 119 96 86 82 77 71 69 70 74 68 60 62 72 71 62 64 64 65 66 66 64 64 64 67 65 64 65 66 64 58 56 61 62 62 62 61 60 61 60 58 57 57 56 56 56 56 56 57 57 57 57 58 58 58 58 61 60 59 58 57 56 55 55 54 55 55 56 55 56 55 55 50 54 57 56 52 50 50 51 48 55 50 45 48 47 50 62 79 80 81 82 89 95 89 78 69 69 67 64 60 59 58 58 56 56 54 54 53 54 54 54 57 61 67 71 73 71 67 63 52 50 50 51 53 57 60 63 62 82 108 130 148 158 155 148 126 121 117 117 120 123 124 123 127 131 131 127 125 128 129 126 113 100 88 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 98 98 99 99 100 100 100 100 100 100 100 100 100 100 100 100 110 133 164 195 218 238 251 251 252 253 254 255 254 252 250 240 235 223 205 187 163 131 106 81 74 67 66 62 58 57 60 56 62 69 80 104 140 178 197 213 177 131 99 87 83 74 67 71 70 73 75 70 62 61 67 63 63 64 64 65 65 64 63 65 64 64 66 67 65 59 56 61 62 62 62 61 60 60 60 58 57 57 56 57 56 56 56 57 57 57 57 58 59 59 59 60 60 58 58 57 56 54 55 55 56 56 56 56 56 56 56 54 55 56 57 55 52 50 51 49 52 47 46 50 46 48 62 74 82 88 88 86 82 74 63 65 65 64 62 60 60 59 58 57 55 55 55 54 54 54 55 57 60 65 69 72 71 69 66 56 53 51 50 51 54 58 61 63 81 108 130 149 157 152 143 124 120 117 117 119 122 122 122 124 128 128 125 124 127 127 123 109 95 84 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 98 98 99 99 100 100 100 100 100 100 100 100 101 101 102 100 123 153 182 209 233 249 255 255 255 254 254 254 255 255 255 252 249 240 229 216 196 168 145 103 88 71 67 68 68 65 62 58 74 95 118 146 178 206 220 228 240 224 167 101 67 72 86 88 79 70 69 70 70 68 67 61 62 63 63 65 64 65 64 64 64 66 69 68 66 60 57 60 61 62 62 61 60 61 61 57 57 58 57 57 56 56 56 58 58 59 59 59 59 59 60 59 59 57 57 56 56 54 55 56 56 56 56 56 57 56 56 57 56 56 56 56 55 52 49 50 49 45 48 52 45 48 68 80 86 89 84 74 67 60 54 59 59 60 61 60 60 59 58 57 57 56 55 55 55 55 56 57 59 63 67 69 71 71 70 62 58 52 50 48 51 55 58 62 81 109 132 151 156 147 135 120 117 114 114 116 118 119 119 120 123 125 123 123 125 124 119 101 87 76 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 98 99 99 100 100 100 100 100 100 101 101 101 101 103 107 135 167 190 213 237 251 253 255 255 255 254 254 253 254 255 253 253 247 242 233 218 193 171 135 109 81 72 74 73 68 64 70 96 129 154 175 198 218 230 238 249 246 215 178 141 100 68 83 85 82 72 72 77 74 63 62 62 63 64 64 64 65 65 62 64 67 69 69 65 61 59 60 61 62 62 61 60 61 61 57 57 58 57 57 56 56 56 59 59 60 59 59 59 59 60 57 57 57 57 56 55 54 54 55 55 55 56 56 56 56 56 59 55 53 55 56 56 52 49 53 50 46 50 51 42 50 78 92 87 78 67 60 58 59 60 56 58 59 60 61 59 57 57 57 56 56 57 56 57 57 57 57 58 61 63 66 69 72 73 67 63 56 51 48 49 52 56 60 82 112 139 154 156 141 124 115 114 113 113 114 115 116 116 117 121 123 122 124 125 122 114 93 78 66 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 99 99 98 98 99 99 100 100 100 100 100 100 101 101 102 102 103 113 140 169 191 213 237 252 254 255 255 255 255 253 252 249 248 255 255 253 249 244 232 210 190 163 130 93 76 75 74 71 67 95 125 162 184 195 208 225 238 246 243 237 236 242 224 165 105 76 82 90 92 83 69 64 67 64 64 63 64 66 66 66 66 63 65 69 69 67 64 62 61 60 60 61 61 61 60 61 61 58 58 58 57 57 56 56 56 60 60 60 59 59 58 58 59 55 56 55 55 54 54 54 54 55 56 56 56 56 56 56 56 57 54 52 53 55 55 52 49 50 51 48 49 49 42 54 85 89 78 63 55 54 57 59 60 57 59 59 60 60 58 56 55 57 57 56 57 57 58 57 57 57 57 58 59 62 67 69 71 69 66 59 54 50 49 51 53 58 83 117 143 155 149 130 112 111 110 110 110 110 110 112 112 116 120 122 122 124 124 119 108 82 67 56 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 99 99 98 98 99 99 100 100 100 100 100 101 101 102 103 103 103 110 130 154 181 206 230 247 254 254 255 255 255 254 250 246 244 253 253 252 249 246 236 215 196 176 142 103 80 75 77 79 82 123 155 190 207 212 220 235 247 240 251 255 251 243 237 226 210 143 100 75 85 88 71 63 74 67 67 66 66 66 66 66 65 65 67 68 68 65 61 59 60 59 60 61 61 61 60 61 61 58 58 58 57 57 56 56 56 60 59 59 58 58 57 56 57 55 55 55 56 55 55 54 55 55 55 55 55 55 55 55 55 55 54 53 53 54 55 54 53 50 54 50 48 52 53 61 83 71 62 53 53 56 58 55 54 57 59 58 57 57 56 55 54 56 57 56 57 57 57 57 57 57 57 57 58 59 62 65 66 68 67 63 59 54 52 51 52 55 84 120 141 146 137 119 104 107 107 109 109 107 107 108 110 115 119 122 123 124 124 115 102 73 59 47 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 99 99 98 98 99 99 100 100 100 100 100 101 101 102 103 104 104 105 116 140 172 200 222 240 252 252 254 255 255 255 253 249 247 246 247 247 246 245 236 216 198 177 147 110 87 81 86 98 109 154 179 207 223 228 235 241 248 253 251 248 247 249 252 253 249 224 168 111 87 85 82 77 74 71 69 69 68 68 67 66 65 67 69 69 67 61 59 59 60 60 61 60 61 60 60 61 61 58 58 58 57 57 56 56 56 59 59 58 57 56 55 55 55 55 56 56 56 56 56 56 56 55 55 55 55 56 56 56 55 54 55 56 56 55 56 59 61 56 60 54 53 67 76 73 77 57 54 53 57 59 55 52 53 56 56 55 54 54 54 54 55 55 57 56 57 57 57 56 56 57 56 56 55 56 57 59 60 66 67 66 65 60 56 52 51 57 85 117 132 132 121 110 100 103 105 107 107 105 105 106 108 114 118 120 122 123 121 110 95 66 52 40 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 99 99 99 98 98 98 99 100 100 100 101 102 103 103 104 104 106 111 116 138 174 204 223 238 252 253 253 254 255 255 255 255 254 248 250 249 250 249 242 224 206 178 151 117 95 90 99 119 134 173 193 215 230 238 244 245 244 247 249 252 255 253 247 249 252 242 242 201 129 85 85 85 69 74 71 70 69 67 66 66 65 70 71 71 67 62 58 59 62 61 62 62 61 60 60 60 60 58 58 58 57 57 56 56 56 58 58 57 56 55 54 54 54 56 57 56 56 57 57 57 56 55 55 55 55 55 55 55 55 53 56 59 58 57 58 62 67 64 68 60 61 86 100 87 76 58 56 57 60 58 53 53 60 54 53 52 51 51 53 54 55 54 55 55 56 55 55 55 55 57 56 56 55 55 55 56 56 63 66 69 68 65 60 54 52 59 86 114 124 118 109 102 97 100 104 107 107 104 103 105 107 113 116 119 120 122 118 106 91 62 47 37 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 100 100 100 100 99 101 101 102 96 101 107 108 101 101 113 130 142 157 178 199 220 237 246 250 254 254 255 254 253 252 253 254 250 250 249 250 252 247 229 212 185 152 116 100 107 125 144 155 185 204 227 239 243 247 249 248 254 254 254 255 255 255 255 255 253 253 251 229 166 96 68 75 79 71 67 68 72 73 72 71 71 72 73 71 69 66 66 67 67 67 65 63 62 60 59 59 57 58 57 56 55 55 55 54 55 55 56 56 55 54 53 51 55 56 56 55 55 54 54 54 53 54 55 56 55 54 52 51 51 53 56 57 58 59 61 65 66 73 72 95 107 120 127 74 57 58 58 57 57 57 56 56 55 55 54 54 53 53 52 53 52 53 52 53 52 52 52 52 53 52 52 51 51 52 52 54 59 61 64 66 68 66 64 62 63 81 101 107 98 88 84 87 99 101 102 102 101 101 103 106 112 116 118 119 119 113 98 79 48 43 41 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 99 100 99 100 101 102 100 104 106 107 103 108 127 147 174 193 213 230 242 251 254 254 253 254 255 255 252 251 252 253 250 250 250 250 251 245 226 208 184 150 113 97 107 129 152 167 193 211 231 243 247 251 252 251 254 254 254 254 254 254 254 255 255 251 249 248 233 190 128 80 78 76 75 74 68 61 63 70 70 74 76 73 70 67 68 71 68 67 66 64 62 60 60 60 58 58 58 58 57 56 55 55 54 55 56 56 56 54 53 52 55 56 56 55 55 55 54 54 51 51 53 54 56 56 56 57 54 55 57 59 59 62 64 68 72 80 82 102 117 133 131 76 57 57 57 57 56 56 56 55 55 55 55 54 54 53 53 53 52 52 52 52 52 52 52 52 53 52 51 51 51 51 52 54 56 58 61 64 66 66 66 66 67 80 93 96 87 79 80 85 98 100 101 101 99 99 100 101 110 114 118 119 116 109 92 73 49 44 42 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 99 100 99 100 101 102 104 105 106 107 107 119 146 172 197 219 240 251 254 255 254 253 253 254 255 254 251 248 247 247 247 249 248 248 247 238 219 202 177 150 121 112 123 144 167 181 207 222 239 248 251 254 254 253 254 254 254 254 254 254 254 255 250 255 254 248 250 245 204 157 75 81 75 64 71 89 84 63 68 72 75 73 66 63 65 70 66 66 66 65 64 62 62 62 60 60 59 59 58 57 57 57 57 57 57 57 57 56 54 53 55 56 55 56 54 55 55 54 53 53 53 54 55 56 58 58 59 59 58 60 63 67 68 69 73 86 89 106 127 142 127 70 56 56 56 56 55 55 55 54 55 55 55 54 54 53 53 53 52 52 52 52 52 52 52 52 52 52 51 50 50 51 52 53 53 54 57 59 62 64 66 68 69 76 82 81 73 70 76 84 95 98 100 99 97 96 95 96 107 112 117 118 113 103 84 65 49 44 42 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 99 100 99 100 101 102 105 106 107 109 113 130 161 190 202 228 249 255 252 252 251 250 254 255 254 252 246 241 239 237 241 244 244 244 241 234 216 199 177 161 147 147 158 173 187 197 220 233 246 251 253 255 255 253 254 254 254 254 254 254 254 254 251 254 254 240 237 249 250 238 191 127 79 80 89 78 68 69 65 70 73 71 64 60 62 66 64 66 65 65 64 64 64 63 61 61 61 60 61 60 60 59 59 59 59 58 57 56 56 55 56 55 54 55 55 54 55 55 58 57 55 55 55 55 57 58 63 62 61 62 67 69 71 71 74 86 92 107 130 142 113 61 55 56 55 55 55 54 54 54 55 55 55 54 54 53 53 53 51 51 51 51 51 51 51 51 51 51 50 50 50 50 51 52 52 52 54 55 58 61 64 65 67 71 73 69 63 64 70 78 88 93 96 98 96 95 94 94 105 112 117 117 110 99 77 58 47 42 40 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 99 100 99 100 101 102 103 105 109 112 117 135 167 196 212 239 255 255 251 253 253 252 255 255 253 248 240 234 230 229 235 239 240 240 238 232 216 202 189 181 174 180 190 200 211 217 232 242 250 252 253 255 255 252 254 254 254 254 254 254 254 254 251 247 246 247 255 255 255 252 254 220 155 98 75 76 80 74 65 68 71 69 63 58 59 63 62 63 65 65 66 66 67 66 63 62 62 61 61 61 62 61 62 61 60 59 59 58 58 58 55 54 54 54 54 55 55 55 59 58 57 57 57 57 58 60 66 65 67 68 71 73 73 73 76 86 98 109 131 135 96 58 56 56 55 55 55 54 54 54 55 55 55 54 54 53 53 53 51 51 51 51 51 51 51 51 50 50 49 49 49 49 50 51 54 53 52 52 53 56 59 61 61 64 65 65 61 61 65 70 79 84 89 92 93 94 94 96 103 112 118 117 107 93 71 52 45 41 39 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 99 100 99 100 101 102 103 106 110 114 118 133 164 191 222 246 255 255 251 254 254 252 255 255 252 245 237 231 227 227 233 236 237 236 235 230 218 206 206 198 195 201 210 219 230 239 242 249 253 253 253 255 254 252 254 254 254 254 254 254 254 253 252 246 249 255 255 255 255 254 242 255 236 166 106 90 87 76 70 70 70 70 66 61 59 59 61 62 63 64 65 66 68 68 63 63 63 63 63 62 63 63 64 63 62 60 60 60 60 60 56 54 54 54 54 55 56 56 55 56 57 58 60 63 64 66 66 71 76 77 77 75 75 77 81 88 104 115 131 123 79 61 57 56 56 56 55 55 55 54 55 55 55 54 54 53 53 53 50 50 50 50 50 50 50 50 50 49 48 48 48 48 49 51 53 54 52 52 52 53 55 57 56 59 63 64 63 63 62 64 70 75 79 84 87 91 93 96 101 111 116 114 103 88 66 50 45 41 39 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 100 100 99 100 99 100 102 102 105 107 109 110 114 127 157 183 218 242 255 253 249 255 254 248 255 253 249 243 235 231 230 232 233 237 236 233 232 229 219 208 211 209 212 221 228 233 241 249 249 254 255 253 253 255 255 252 254 254 254 254 254 254 254 253 250 251 254 255 255 251 255 255 255 245 250 250 204 119 81 93 80 76 75 75 73 69 63 59 61 62 63 64 65 67 69 69 63 63 63 63 63 63 63 63 66 65 63 61 61 62 62 61 56 55 54 54 55 55 56 56 56 57 59 62 64 65 65 67 69 78 86 87 83 79 79 82 86 89 108 118 129 109 62 66 59 57 57 57 56 56 56 55 55 55 55 54 54 53 53 53 50 50 50 50 50 50 50 50 49 49 48 47 47 48 49 50 52 53 52 52 53 53 54 55 54 58 61 65 66 66 64 63 63 67 71 76 79 84 88 92 98 107 113 109 98 82 62 47 47 44 42 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 100 100 99 100 99 100 102 102 108 108 108 107 108 123 152 177 210 235 252 251 250 255 254 248 255 253 248 242 235 233 234 237 236 237 237 232 230 227 218 208 206 210 223 237 244 245 245 249 252 255 255 254 254 255 255 253 254 254 254 254 254 254 254 254 249 249 250 251 255 255 255 253 252 255 253 242 239 225 174 114 89 84 81 82 81 77 68 61 62 63 62 64 65 67 68 69 63 63 62 63 63 63 63 63 66 66 64 62 61 62 62 62 56 55 56 56 56 56 57 58 59 62 64 66 67 65 64 66 71 83 94 94 88 83 83 87 86 87 109 119 125 97 50 68 59 58 58 57 57 57 56 56 55 55 55 54 54 53 53 53 50 50 50 50 50 50 50 50 49 48 48 47 47 48 48 49 50 51 52 53 53 54 55 55 54 56 60 65 68 68 66 65 59 63 66 70 73 78 84 88 96 104 110 105 94 78 59 44 48 46 44 101 101 101 101 101 101 101 101 102 102 102 102 102 102 102 102 101 101 100 101 100 101 103 103 110 109 110 114 114 121 145 170 196 217 239 251 253 255 254 253 255 254 250 248 246 244 241 239 246 242 238 236 230 220 213 212 211 217 227 234 241 246 248 252 253 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 254 255 255 255 255 255 254 253 255 253 249 248 249 248 241 232 132 100 83 87 93 83 75 76 63 63 63 60 59 60 63 66 61 61 61 62 64 64 63 63 65 64 64 64 63 63 62 62 57 56 58 59 59 60 60 61 63 62 71 71 61 57 56 49 81 78 73 75 89 101 97 85 88 96 115 128 108 73 57 62 60 59 58 58 58 57 57 57 57 57 57 56 55 55 55 54 54 54 53 53 52 52 52 52 49 49 49 49 49 49 48 48 53 52 52 51 52 52 53 53 50 52 55 61 65 69 71 74 66 64 62 61 62 69 78 85 91 98 104 100 87 70 57 51 48 47 46 101 101 101 101 101 101 101 101 102 102 102 102 102 102 102 102 101 101 100 101 100 101 103 104 110 108 110 114 116 124 148 174 199 219 240 252 254 255 254 253 255 254 251 249 247 245 242 237 239 235 231 230 225 217 212 212 216 222 230 238 243 246 249 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 255 254 252 250 250 248 252 250 248 249 252 252 248 241 234 178 117 92 92 92 87 83 70 68 68 68 67 66 65 63 64 62 62 64 63 61 62 65 63 63 63 63 62 62 61 62 60 61 62 63 63 65 65 66 71 65 71 73 61 55 56 54 76 75 71 68 77 91 97 97 89 103 119 121 96 68 59 67 62 60 60 60 59 59 59 59 59 59 59 58 58 57 57 57 55 55 55 54 54 54 53 53 51 51 50 50 49 49 48 48 49 49 48 48 48 49 50 51 53 52 53 55 59 65 70 74 70 69 66 63 63 66 72 76 88 95 100 98 86 71 59 53 51 49 48 101 101 101 101 101 101 101 101 102 102 102 102 102 102 102 102 101 101 99 100 100 101 103 104 108 109 111 116 117 125 152 178 202 221 242 252 253 255 254 253 255 253 251 250 247 244 239 235 231 225 221 222 219 215 213 217 225 230 237 243 246 248 249 252 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 254 253 250 248 246 244 249 247 247 250 255 255 253 248 240 246 235 191 131 90 83 93 93 82 70 63 62 66 70 71 63 60 60 66 65 63 65 72 62 62 62 63 61 62 61 62 63 65 65 67 67 67 67 68 75 66 73 83 71 59 61 65 69 72 69 64 66 78 96 106 97 113 122 109 79 60 61 70 62 62 62 62 61 61 61 60 62 62 61 61 61 60 60 60 58 57 57 57 56 56 56 55 53 53 52 51 50 49 48 48 46 46 46 46 46 47 48 49 54 52 49 49 52 59 66 72 75 75 73 69 65 63 65 67 81 88 94 94 84 72 62 56 53 53 52 100 100 101 101 101 101 102 102 102 102 102 102 102 102 102 102 101 101 99 100 100 102 103 105 109 109 111 115 116 124 152 179 202 220 240 251 253 255 255 254 254 253 251 250 247 243 237 232 224 218 214 215 215 215 219 224 235 239 244 248 249 250 250 252 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 254 253 251 248 246 244 248 247 248 252 255 255 255 252 255 248 238 239 239 210 144 82 76 75 74 78 80 75 64 55 77 68 66 68 67 59 56 61 63 63 63 63 62 62 62 63 64 66 67 67 67 68 69 68 73 66 84 105 94 75 71 75 68 72 70 66 65 73 89 101 109 120 118 95 67 59 64 67 63 63 63 62 62 61 61 61 63 62 62 62 62 62 62 62 60 60 60 59 59 59 58 58 56 56 54 53 52 50 49 49 48 48 47 47 48 49 50 50 53 51 48 48 50 55 61 66 75 77 77 74 69 64 63 62 73 79 85 86 80 71 62 58 55 54 53 100 100 100 101 101 102 102 102 102 102 102 102 102 102 102 102 101 100 99 100 100 102 103 105 109 110 113 115 114 121 149 178 200 219 239 249 252 255 255 255 255 255 255 254 250 245 238 232 220 213 208 209 212 217 224 233 242 246 250 252 253 253 253 253 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 255 255 253 251 249 249 248 249 250 254 255 255 255 253 241 251 253 251 248 244 227 207 183 156 118 87 73 73 76 79 71 66 66 69 73 74 75 75 65 66 66 66 66 66 67 67 70 71 71 71 71 72 71 71 72 72 100 126 114 88 76 77 69 70 72 71 70 71 78 85 119 122 110 85 66 65 65 62 62 63 63 62 62 61 61 61 62 62 62 62 62 62 62 62 62 62 62 61 61 61 60 60 59 58 57 56 55 53 52 52 50 50 49 48 48 49 50 50 49 49 49 49 50 53 55 59 71 76 79 79 75 70 67 65 69 73 79 80 77 70 63 57 55 53 52 99 99 100 101 101 102 103 103 102 102 102 102 102 102 102 102 100 100 99 100 100 102 103 105 109 110 113 115 112 120 148 178 203 221 240 250 252 255 255 255 255 255 255 255 253 247 240 232 218 209 203 203 207 215 226 238 245 249 252 254 254 254 254 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 255 255 255 255 255 254 253 251 252 253 254 255 254 252 252 246 250 248 244 246 254 254 254 248 239 227 209 187 161 134 117 93 94 85 68 58 60 62 61 69 69 69 70 71 71 71 72 75 77 77 76 77 77 76 76 76 81 107 128 113 89 76 71 70 70 72 74 74 71 73 77 120 115 100 82 73 74 69 61 63 63 63 63 62 62 62 62 61 61 62 62 62 62 63 63 63 63 63 63 62 62 62 61 61 61 60 59 58 57 56 56 52 51 50 49 48 48 48 48 48 49 49 50 51 51 51 52 63 70 76 79 78 75 72 71 68 71 75 77 74 69 63 57 54 53 52 99 99 100 101 101 102 103 103 102 102 102 102 102 102 102 102 100 100 99 100 100 102 103 105 108 109 114 115 113 121 151 183 210 227 245 253 253 255 255 254 255 255 255 255 251 244 235 227 213 204 196 196 201 210 224 237 246 249 252 254 254 254 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 251 252 253 255 255 255 255 255 254 255 255 255 253 251 249 248 241 245 250 253 252 251 248 245 255 255 255 255 252 246 239 235 228 230 202 143 94 79 76 72 74 74 74 75 75 76 76 77 78 79 79 80 79 78 78 78 79 84 102 111 94 79 75 70 73 73 76 78 77 73 80 88 109 102 92 86 84 81 74 67 64 65 65 65 64 64 64 63 62 62 62 63 63 64 64 64 64 64 64 63 63 62 62 62 63 63 62 62 61 61 60 60 57 55 54 52 50 49 47 47 48 48 49 50 50 50 49 49 57 64 72 77 79 78 76 76 71 73 76 77 75 71 64 59 55 53 52 100 100 101 102 102 102 103 103 102 102 102 102 102 102 102 101 101 101 100 101 100 102 103 105 107 109 114 116 113 123 155 187 216 232 249 255 255 255 255 254 250 251 251 250 246 238 227 219 209 199 190 190 195 206 221 234 246 249 253 254 253 254 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 250 251 252 254 255 255 255 255 254 255 255 255 252 249 247 246 248 247 249 252 252 253 255 255 250 250 249 248 246 248 250 253 241 251 220 142 80 66 72 72 77 77 78 78 79 79 80 81 79 79 79 79 78 78 77 77 78 82 92 89 73 70 76 74 78 79 81 83 78 77 90 106 101 94 89 90 91 85 78 73 66 66 66 65 65 65 64 64 63 63 63 64 64 66 66 66 64 64 64 63 63 62 62 62 64 64 64 64 63 63 63 63 63 61 59 56 54 52 51 51 50 50 50 50 50 50 52 54 54 61 70 76 79 77 77 77 74 75 77 78 78 72 66 60 56 54 53 102 103 103 104 106 106 106 107 103 103 101 101 100 101 101 102 101 103 103 104 102 102 100 100 103 108 111 111 112 130 168 199 219 233 247 252 253 255 255 254 249 251 248 240 236 233 222 209 208 191 179 178 184 195 210 223 243 248 251 254 254 254 253 254 254 254 254 254 254 254 254 254 255 255 255 254 253 252 252 252 254 253 253 253 255 255 255 254 255 252 252 255 254 249 247 250 251 252 253 255 255 255 255 254 255 255 255 254 254 254 254 254 245 252 225 137 79 78 76 74 78 78 78 78 79 79 78 79 77 78 78 80 79 79 77 76 80 79 74 70 72 75 77 78 88 87 81 77 86 99 99 90 89 89 90 90 88 85 81 78 70 68 65 63 62 62 63 65 63 64 64 65 65 66 66 66 66 65 64 64 63 65 64 66 65 66 64 66 66 68 68 69 66 65 65 63 61 59 56 54 52 53 55 57 59 64 71 77 86 88 86 84 82 79 78 79 76 81 86 87 87 84 74 63 55 51 48 103 104 104 105 107 108 108 108 104 104 102 102 101 102 101 103 102 103 103 104 103 102 102 102 105 108 112 115 119 137 171 200 218 233 247 254 255 255 254 253 250 249 243 235 230 225 214 201 191 179 172 174 183 195 208 221 243 247 251 254 253 253 254 254 254 254 254 254 254 254 254 254 255 255 253 253 253 252 252 253 254 254 253 253 255 255 254 253 255 255 252 247 236 228 231 241 252 254 255 255 255 255 255 254 255 255 254 254 253 254 253 254 246 252 224 137 77 79 75 74 79 79 79 79 79 79 80 80 77 78 78 81 79 80 77 77 80 78 74 73 73 77 80 82 86 88 93 100 101 94 88 86 85 86 85 86 85 84 82 81 76 74 70 67 64 63 64 65 62 64 64 65 66 66 67 67 66 65 65 64 64 65 65 66 66 66 66 66 67 68 69 70 71 72 70 71 68 66 63 61 62 62 61 62 67 77 89 97 112 110 105 97 89 82 76 75 79 86 93 95 95 92 83 70 53 50 47 103 104 104 106 107 109 108 109 106 106 104 104 102 103 102 104 102 104 103 103 103 102 102 102 105 106 109 116 124 143 172 196 214 230 246 254 255 255 251 249 245 242 233 223 217 211 201 190 180 174 175 181 193 205 216 227 243 247 251 253 252 253 254 255 254 254 254 254 254 254 254 254 255 254 253 253 252 252 252 253 254 253 252 253 254 255 254 253 255 255 253 242 223 213 221 237 252 254 255 255 255 255 255 254 255 255 254 254 253 254 253 254 247 252 223 134 74 77 75 75 78 79 79 80 80 79 80 79 77 78 78 80 79 80 78 78 81 78 76 76 77 80 85 89 91 98 116 130 120 95 81 81 80 81 79 80 80 81 83 84 83 80 76 72 68 66 65 65 62 64 64 65 66 66 67 67 66 66 65 65 65 65 66 66 66 66 66 66 67 68 70 70 74 75 74 75 73 71 69 67 69 67 64 66 73 86 103 114 127 125 116 104 90 79 71 69 78 87 96 101 102 98 88 75 57 54 51 103 104 104 106 108 110 109 110 108 108 106 105 104 104 103 105 103 104 103 103 102 102 102 103 103 102 104 113 125 143 166 185 209 226 244 253 254 252 246 242 235 229 218 209 203 197 188 180 184 184 191 200 213 224 233 241 244 247 251 253 252 252 254 255 254 254 254 254 254 254 254 254 254 254 253 252 252 252 251 252 253 252 251 252 254 255 254 253 253 255 253 243 225 217 226 242 252 254 255 255 255 255 255 254 255 255 254 254 253 254 252 253 250 254 223 133 74 77 77 77 78 79 80 80 80 79 79 78 77 78 77 79 78 80 79 79 83 80 79 82 83 85 91 99 114 128 148 156 143 117 95 87 79 78 75 74 75 78 81 83 84 82 79 75 71 69 67 67 62 64 64 65 66 66 67 67 67 66 65 65 65 65 66 67 67 66 66 67 67 69 70 71 71 72 72 73 72 71 69 68 68 67 64 66 73 88 105 117 122 121 113 100 85 73 65 63 72 82 94 101 103 99 88 73 59 55 52 103 104 104 106 108 110 110 111 110 109 107 106 104 104 104 105 103 104 102 102 101 101 102 103 104 102 103 113 125 141 160 175 204 223 241 251 251 249 242 237 228 219 208 201 196 190 183 178 190 195 206 216 227 238 245 249 244 247 250 252 251 252 254 255 254 254 254 254 254 254 254 254 254 254 252 252 252 251 251 252 252 251 251 252 254 255 254 253 253 253 252 247 236 229 234 245 252 254 255 255 255 255 255 254 255 255 253 254 254 254 252 252 252 255 224 134 75 79 79 80 78 79 81 81 81 79 78 77 77 78 77 79 78 80 79 81 85 82 83 88 88 89 97 107 142 162 174 169 158 145 120 95 80 78 73 71 71 74 78 80 82 80 78 75 73 71 69 69 62 64 64 65 66 66 67 67 67 67 66 65 65 66 67 67 67 67 67 67 68 69 70 71 69 70 70 71 70 69 68 66 65 65 63 66 73 86 101 111 116 115 108 96 80 68 61 61 67 78 92 99 102 98 86 71 53 50 47 45 45 46 47 46 46 47 47 47 47 45 45 45 45 45 45 47 46 46 45 45 46 46 47 45 45 45 45 45 45 45 45 43 43 43 42 42 41 41 41 41 41 41 41 41 41 41 41 36 37 37 38 39 40 41 41 44 44 45 46 46 47 48 46 48 48 50 52 52 53 54 54 53 53 51 50 51 51 52 53 49 50 52 53 54 56 57 55 58 57 58 59 62 63 64 64 76 76 75 73 73 68 66 65 65 64 63 63 64 62 60 55 47 46 46 45 45 45 45 45 44 44 45 44 42 41 42 44 45 47 47 46 44 43 43 43 43 43 42 42 42 43 44 47 54 53 50 49 51 51 52 52 48 50 56 59 57 50 42 38 50 52 52 50 49 48 45 45 47 47 47 46 45 44 44 44 45 45 45 45 45 45 45 45 45 44 43 42 43 49 57 60 67 72 77 79 91 110 131 144 163 174 186 189 173 145 118 104 103 94 94 98 111 130 144 152 159 154 147 129 108 85 69 69 91 98 98 45 45 46 46 45 46 47 47 47 47 45 45 45 45 45 45 46 46 45 45 45 45 46 46 45 45 45 45 45 45 45 45 43 43 42 42 42 41 41 41 42 42 42 42 42 42 42 42 37 38 38 39 40 41 42 42 44 44 45 45 46 47 48 46 47 47 49 51 51 52 53 53 52 52 49 49 49 50 51 52 48 49 51 52 54 52 53 51 52 52 52 55 58 60 61 64 73 73 73 72 71 68 67 67 65 64 63 63 64 62 60 54 47 46 45 45 45 44 45 45 44 43 45 43 42 41 42 44 45 47 46 46 44 43 43 43 43 42 42 42 42 43 44 47 53 53 51 49 51 52 52 53 50 54 56 59 58 51 42 41 51 53 52 51 50 49 46 46 47 47 47 46 45 44 44 44 45 45 45 45 45 45 45 45 45 45 43 42 43 48 55 58 61 65 73 76 86 106 125 142 162 174 185 187 169 141 117 105 101 95 95 95 102 116 136 149 151 148 143 131 111 89 76 74 90 97 97 44 44 45 46 45 45 46 46 46 46 46 46 44 44 44 44 46 46 45 45 45 45 46 47 46 46 46 46 46 46 46 46 44 43 43 43 42 42 42 42 43 43 43 43 43 43 43 42 39 39 40 41 41 42 42 43 44 44 44 45 46 47 47 46 46 46 48 50 52 53 51 51 49 49 49 49 47 48 49 50 49 49 50 50 51 50 50 48 45 43 46 50 54 58 61 62 69 70 71 70 70 69 68 68 64 63 64 64 64 61 59 53 46 45 45 44 45 45 44 44 45 45 44 43 44 42 42 43 45 46 46 46 43 43 43 43 44 44 43 43 44 44 43 46 54 53 51 50 52 53 53 53 56 59 61 61 59 52 44 44 52 55 54 52 49 48 47 47 47 47 47 46 45 44 44 44 45 45 45 45 45 45 45 45 47 46 45 43 43 47 52 54 55 57 64 68 77 96 118 136 158 173 185 183 164 137 118 107 101 99 99 94 92 101 121 136 134 136 133 124 108 88 77 76 91 96 96 43 44 44 45 44 45 45 45 45 45 45 45 43 43 43 43 45 45 44 44 44 44 45 45 46 46 46 46 46 46 46 46 43 43 43 42 42 42 41 41 44 44 44 44 44 44 44 44 43 41 41 42 42 43 43 43 43 43 44 45 46 46 47 45 45 45 46 48 50 50 49 49 49 47 46 47 47 46 48 48 50 52 52 51 50 49 47 45 41 39 42 45 51 56 60 62 67 67 67 67 68 67 67 65 64 63 64 64 64 61 57 51 45 44 44 44 44 44 44 43 45 44 43 42 43 42 41 42 44 46 46 45 43 43 42 42 43 43 42 42 43 44 45 45 54 53 50 52 54 56 55 55 60 63 64 62 58 52 46 45 53 54 55 52 50 49 48 48 47 47 47 46 45 44 44 45 46 46 46 46 46 46 46 46 48 48 47 45 44 45 49 50 49 51 55 59 68 85 108 130 152 171 181 181 162 139 121 112 104 103 102 94 86 90 102 113 120 119 118 111 97 84 76 76 89 93 94 45 45 43 44 45 46 44 45 44 44 43 43 43 43 41 41 44 44 43 43 43 43 44 44 45 45 45 45 45 45 45 45 43 43 42 42 42 41 41 41 44 44 44 44 44 44 44 44 44 44 44 44 44 45 45 45 45 45 46 46 47 48 49 47 45 44 46 47 47 48 48 46 46 46 46 45 46 47 48 49 54 53 53 53 51 49 47 44 41 41 42 44 50 56 61 63 66 67 66 66 66 65 64 62 63 60 62 62 62 58 53 48 45 44 44 44 45 45 45 45 46 45 44 43 44 43 42 42 44 46 45 45 45 44 44 44 44 44 44 44 44 45 46 46 52 52 49 51 55 57 56 55 59 63 67 64 59 50 45 43 51 53 53 51 50 49 48 47 47 47 47 46 46 45 45 45 46 46 46 46 46 46 46 46 48 48 48 46 44 44 47 46 46 46 49 51 59 75 101 128 151 170 183 180 166 148 131 119 109 104 101 96 89 88 87 85 99 98 97 92 84 77 77 80 86 88 90 44 44 43 43 44 45 44 44 43 43 42 42 42 42 40 42 43 43 42 41 41 42 43 43 43 43 43 43 43 43 43 43 42 42 42 42 41 41 41 40 43 43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 44 45 45 46 47 48 48 46 44 43 44 45 46 46 46 46 47 45 45 46 47 46 48 49 54 54 53 54 51 50 48 45 43 41 42 44 49 53 58 61 64 65 65 64 65 62 63 60 60 59 61 61 61 56 50 44 44 44 43 43 45 44 44 44 45 44 44 44 43 42 41 42 43 45 45 45 44 44 44 43 44 43 43 43 45 44 47 46 52 50 50 53 57 58 58 59 57 64 71 69 61 52 47 45 51 53 52 51 49 48 47 47 47 47 47 46 46 45 45 45 47 47 47 47 47 47 47 47 47 48 48 47 45 44 46 44 45 41 43 48 54 70 100 133 159 178 188 187 175 161 143 126 114 104 99 96 94 88 79 70 74 74 74 73 70 69 73 79 83 83 85 43 43 44 45 44 44 45 45 42 42 42 42 41 41 41 41 42 44 43 43 43 43 44 44 43 43 43 43 43 43 43 43 44 44 44 43 43 43 42 42 45 45 45 45 45 45 45 43 44 44 44 43 43 43 43 43 44 44 45 46 47 47 48 46 43 44 45 46 47 45 45 44 46 46 47 45 47 48 50 51 54 52 53 52 50 50 46 44 44 42 41 42 46 50 55 56 60 62 62 62 64 63 64 62 58 58 60 60 59 54 47 41 45 45 45 44 46 46 45 45 46 46 45 45 44 42 42 41 43 45 45 44 46 46 45 45 45 45 44 44 47 46 48 47 50 49 49 54 58 60 61 61 65 74 82 81 73 62 55 54 51 50 49 48 47 46 47 46 46 46 47 46 46 45 45 45 47 47 47 47 47 47 47 47 46 47 48 47 45 44 45 44 43 41 41 45 52 70 106 141 171 190 199 198 189 175 154 130 113 103 99 95 93 87 78 72 69 71 72 73 72 71 75 77 79 78 79 43 43 44 44 45 44 45 45 42 42 42 42 41 41 41 42 44 43 43 42 42 43 43 44 42 42 42 42 42 42 42 42 44 44 44 43 43 42 42 42 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 43 44 44 45 46 46 47 48 48 44 43 44 45 46 46 46 44 47 46 47 47 49 49 50 51 52 52 53 52 50 50 48 45 46 42 41 40 44 47 52 53 58 59 62 63 64 65 65 64 59 59 59 59 58 52 45 40 45 45 44 46 46 45 45 47 46 46 46 45 43 42 41 43 45 45 45 44 46 45 45 45 45 46 46 46 47 47 49 49 50 49 52 54 59 62 62 65 76 84 92 93 84 73 65 63 50 50 49 48 46 45 46 46 46 46 47 46 46 45 45 45 47 47 47 47 47 47 47 47 45 46 48 48 46 45 45 44 44 41 42 48 54 72 110 148 182 198 207 204 198 182 159 132 110 100 97 94 89 86 80 75 82 85 87 88 85 84 83 83 76 74 74 47 47 47 45 45 45 43 43 44 44 42 41 41 41 40 40 42 42 42 42 42 42 42 43 42 42 42 42 42 42 42 42 42 42 42 43 43 44 44 45 44 44 44 44 44 44 44 44 41 42 43 44 44 44 44 44 44 44 44 44 45 46 47 47 45 44 45 46 47 46 46 46 46 44 45 46 47 48 49 50 52 53 54 53 51 49 48 43 46 45 43 44 47 48 49 48 51 52 56 58 61 62 63 64 63 65 65 62 56 49 46 44 46 45 44 46 45 45 46 47 44 44 45 45 44 43 42 42 43 43 45 44 44 44 45 45 47 47 47 48 51 50 53 52 53 52 57 62 64 62 65 71 82 95 102 104 100 94 83 70 66 61 53 47 44 43 44 43 46 46 45 45 45 44 43 43 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 48 51 50 47 54 79 121 159 187 207 217 211 198 183 167 148 116 100 93 88 85 86 92 98 110 120 124 117 111 104 95 80 70 68 71 47 47 47 47 45 45 45 43 44 43 41 41 40 40 40 40 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 44 44 44 44 44 44 44 44 44 44 43 41 42 43 44 44 43 43 43 43 43 43 44 45 46 47 46 46 47 46 47 48 48 45 46 46 46 45 46 48 50 51 53 53 54 54 52 50 48 47 48 46 45 45 46 49 49 49 51 51 53 56 58 60 61 61 64 64 65 62 56 50 45 45 46 45 46 45 45 45 46 46 44 44 45 44 43 43 42 44 43 43 44 44 44 43 45 45 47 47 49 49 50 54 55 54 57 55 60 64 66 65 70 78 92 102 111 111 109 101 90 77 65 61 55 52 49 46 44 41 45 45 44 43 44 43 43 43 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 49 52 55 51 51 58 84 124 158 185 202 212 207 194 184 173 158 128 113 106 106 104 109 118 127 127 135 137 129 121 113 101 84 67 62 67 47 47 47 47 47 45 45 45 43 43 43 42 40 39 39 39 41 43 43 43 42 42 42 42 44 44 44 44 44 44 44 44 43 43 44 44 44 45 45 45 45 45 45 46 46 46 46 44 43 43 44 45 45 45 45 44 44 44 44 44 45 46 47 46 46 46 47 48 49 47 47 47 48 46 46 46 48 49 51 52 53 54 55 54 54 53 50 46 48 46 44 47 47 48 48 49 51 52 51 51 54 56 58 58 64 64 66 63 58 51 46 46 47 46 46 45 45 45 47 48 45 45 46 46 45 44 43 43 42 42 44 43 45 45 45 45 48 48 50 51 52 56 58 57 61 59 62 68 70 71 77 86 103 113 122 123 119 111 98 85 68 64 59 56 52 46 43 38 41 41 42 42 42 42 45 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 46 50 57 57 52 51 62 89 124 154 177 191 199 195 187 182 178 171 154 143 135 130 126 126 133 141 148 152 148 138 131 123 105 84 62 58 62 48 48 48 48 48 48 46 46 43 43 42 42 39 39 39 41 43 42 42 42 42 41 41 41 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 45 45 45 45 46 46 46 42 43 44 44 44 44 43 43 43 43 43 43 44 45 46 47 47 48 49 49 49 49 49 47 47 47 47 45 46 48 49 50 51 52 53 54 54 52 51 48 50 48 47 47 48 47 49 49 52 52 50 49 50 53 55 58 62 64 65 62 58 53 48 46 45 45 45 44 44 44 46 46 44 44 46 45 44 43 45 44 41 41 43 43 44 44 45 44 47 49 49 53 55 58 60 60 64 60 62 67 73 76 86 94 111 121 130 131 128 120 106 93 74 70 64 58 54 48 44 40 41 40 41 40 41 41 44 45 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 49 58 56 49 49 63 88 122 147 163 176 182 178 175 178 182 179 171 163 158 152 143 137 139 144 154 155 151 141 132 124 105 79 59 56 57 50 50 50 50 48 48 46 46 45 45 43 42 42 41 41 41 43 43 43 42 42 41 41 41 43 43 43 43 43 43 43 43 43 43 43 43 43 42 42 42 43 44 44 45 45 46 46 46 42 43 43 43 43 43 42 41 42 42 42 42 43 44 46 47 49 48 49 50 50 49 48 48 48 46 46 46 47 48 47 48 51 52 53 54 54 52 52 48 50 48 48 47 49 49 50 50 54 53 53 51 51 53 54 56 59 61 62 61 56 53 48 47 45 45 46 45 44 44 47 47 46 45 47 46 45 44 44 44 43 42 42 42 43 43 44 46 48 49 52 54 57 61 64 63 65 61 63 69 76 81 93 104 119 128 135 135 131 125 113 101 82 76 67 58 54 50 47 45 41 40 40 39 40 42 44 45 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 49 58 53 43 44 56 81 112 135 150 160 165 163 162 169 177 179 168 167 168 165 156 146 144 148 150 149 143 133 129 120 100 73 57 56 57 51 51 51 51 49 49 47 47 46 46 44 43 43 43 42 42 44 44 44 43 42 41 41 41 42 42 42 42 42 42 42 42 43 43 42 42 42 41 41 41 43 43 43 44 45 45 46 46 42 42 43 43 42 42 41 40 43 43 42 43 44 45 46 47 50 50 49 50 50 49 48 47 48 47 45 45 46 47 46 46 49 50 51 52 52 52 52 47 49 47 47 45 46 47 48 49 53 53 53 52 52 52 52 52 53 56 58 59 55 52 49 48 46 43 44 44 43 43 46 46 45 45 46 45 44 44 43 43 42 42 41 41 43 42 45 45 49 51 54 56 60 63 66 67 65 62 67 74 82 90 101 114 125 131 138 136 132 126 117 106 92 83 74 64 58 53 50 49 44 42 41 39 41 42 43 44 43 43 43 43 43 43 43 43 44 44 44 44 44 44 44 46 55 49 40 38 49 71 100 121 138 148 154 152 151 158 165 173 173 176 177 172 159 145 141 144 142 143 138 130 123 114 93 69 54 53 53 51 51 51 51 49 49 49 49 47 47 47 47 44 44 43 43 46 45 45 44 43 42 42 41 42 42 42 42 42 42 42 42 42 42 42 41 41 41 40 40 42 42 43 44 45 45 46 46 42 42 42 42 42 41 40 39 43 43 43 43 44 45 47 47 50 51 51 52 50 49 49 48 47 47 47 46 45 45 46 47 48 48 51 52 53 51 50 48 46 43 43 43 44 45 46 46 52 53 51 51 50 49 50 48 49 52 55 57 54 53 50 50 45 45 44 43 42 42 45 45 46 46 45 45 46 45 44 44 41 41 41 40 42 42 44 44 49 52 55 57 62 65 70 70 65 64 70 79 88 98 110 121 129 134 139 136 132 128 119 110 97 91 81 73 67 59 54 52 47 44 43 39 41 41 42 44 42 42 42 42 42 42 42 42 43 43 43 43 43 43 43 45 50 45 37 33 38 59 87 109 125 134 140 138 137 142 148 157 171 174 173 165 151 135 132 134 133 136 134 123 116 107 87 66 51 48 48 49 49 49 49 47 47 47 47 46 46 46 45 45 43 44 44 45 44 44 43 44 43 42 42 42 42 42 42 42 42 44 42 44 42 44 41 41 40 40 39 41 42 43 41 44 43 44 44 42 42 42 42 41 40 39 39 44 42 42 42 43 44 45 46 49 49 50 50 49 48 47 47 47 47 46 46 44 45 46 46 45 46 49 49 50 50 49 47 43 44 41 42 43 45 46 47 50 51 50 50 51 49 49 47 47 50 54 55 55 52 50 49 47 46 45 44 44 44 46 47 46 46 47 46 45 45 44 44 43 43 42 42 43 42 44 46 50 53 54 58 61 66 69 71 67 68 74 84 96 105 117 128 133 137 139 135 132 127 121 111 98 93 85 79 72 65 56 51 46 46 44 41 41 41 42 43 44 42 44 42 44 44 44 44 45 45 45 45 45 45 45 47 47 43 37 33 37 56 81 103 116 122 126 122 123 130 136 144 153 157 154 149 138 128 130 137 127 133 130 120 111 102 83 63 50 47 48 43 43 43 44 44 44 45 45 46 47 47 47 46 44 44 44 45 45 44 43 44 44 43 43 45 45 47 47 46 45 46 43 47 45 47 45 45 45 43 43 42 42 42 41 43 41 42 42 45 45 45 46 44 45 43 43 42 41 42 43 42 44 42 43 45 45 48 48 48 47 46 45 46 45 47 46 46 47 47 46 41 41 42 45 45 46 46 45 41 39 39 38 40 44 48 48 48 47 49 51 51 48 47 45 47 46 49 50 50 48 46 44 48 50 49 48 48 47 46 46 49 48 49 48 47 46 45 45 43 51 46 41 45 45 45 50 47 52 57 63 65 66 67 69 73 80 89 97 106 113 124 130 135 137 138 140 136 130 123 117 105 95 88 85 83 78 69 61 54 51 46 42 41 43 43 42 45 42 44 41 43 44 45 45 46 46 48 48 49 49 49 48 45 43 40 35 42 64 88 103 117 115 118 119 118 117 123 134 143 143 138 131 125 124 123 126 125 126 124 117 109 99 85 70 61 51 46 42 43 43 43 44 44 44 45 46 46 47 47 46 45 44 44 44 44 44 44 43 42 43 43 45 46 48 47 49 47 46 45 47 47 47 47 45 45 43 43 42 42 41 41 42 42 41 42 46 48 46 46 44 44 42 43 42 40 41 40 41 42 41 42 44 44 46 46 46 45 46 46 46 45 46 46 46 46 47 46 42 41 43 43 45 44 45 45 43 41 40 39 41 45 49 47 47 45 48 50 52 51 50 49 46 47 46 48 49 49 47 49 50 50 50 48 48 47 47 46 49 47 48 46 46 44 44 44 44 49 45 43 46 46 42 44 49 53 58 61 64 65 67 69 72 82 93 102 112 119 127 134 136 138 141 141 137 131 125 118 105 96 90 88 88 83 74 67 59 55 51 45 43 42 43 42 43 44 44 44 44 45 48 48 48 48 49 49 49 51 51 49 49 45 41 37 44 66 93 105 111 108 110 112 112 112 119 128 135 132 129 123 120 119 121 124 124 127 123 117 110 101 87 72 59 51 45 44 44 44 44 45 45 46 46 47 47 48 48 48 47 46 45 45 45 44 43 44 43 44 44 46 46 49 48 47 46 47 46 47 47 45 45 45 45 43 43 43 43 42 42 41 42 42 43 45 47 47 47 45 44 42 42 43 42 43 42 43 42 43 44 45 45 46 46 47 46 45 45 46 45 46 46 46 46 47 46 43 43 43 45 47 46 47 46 44 42 40 40 41 42 45 44 44 45 48 52 54 53 52 52 50 50 50 51 50 51 53 53 50 47 49 46 47 44 46 44 46 44 45 42 44 41 43 43 49 49 47 47 49 49 46 45 53 56 61 63 65 65 67 70 72 81 92 101 110 116 123 131 135 137 140 140 137 131 125 120 109 101 97 96 96 93 86 80 69 63 57 50 44 41 41 40 40 42 42 42 42 43 46 47 46 46 48 48 48 49 49 48 50 46 39 34 42 65 91 105 107 106 106 110 110 109 113 120 124 122 120 118 118 117 119 121 121 125 121 116 109 99 85 70 58 50 44 45 45 46 46 46 47 47 47 48 49 49 50 50 49 48 48 47 46 46 45 45 44 46 46 48 48 48 50 49 48 47 46 48 46 46 46 46 44 44 42 44 44 43 43 43 43 43 44 47 49 48 46 46 43 43 42 44 44 43 44 43 45 45 46 47 47 48 47 49 48 46 46 46 46 47 46 46 47 48 46 46 46 46 48 47 46 47 46 46 43 41 41 40 41 42 41 47 47 51 54 56 57 55 54 56 56 57 57 55 55 55 53 49 47 46 46 45 44 43 43 42 42 42 41 41 40 40 42 49 46 46 49 45 47 51 50 55 58 61 63 64 66 68 72 74 81 91 98 103 109 118 124 131 135 137 138 135 130 126 121 111 105 103 101 103 101 95 91 80 74 63 54 47 42 40 37 38 40 40 40 40 43 44 45 43 45 45 45 47 47 47 45 43 43 39 34 44 65 89 99 104 104 105 108 109 107 109 114 116 113 112 112 115 118 120 120 120 122 119 113 106 98 82 71 57 48 42 47 47 47 48 48 48 49 49 50 50 51 52 52 52 51 51 49 49 48 48 48 47 46 46 48 49 49 50 49 48 47 46 48 46 46 46 46 44 44 44 46 44 44 44 44 44 45 46 48 48 48 48 48 46 46 45 46 47 45 45 46 47 47 47 49 49 50 49 48 47 47 47 47 47 46 46 48 48 49 49 49 49 50 52 51 50 49 49 48 45 43 42 41 41 41 41 49 51 55 58 58 59 59 58 55 56 56 57 58 58 57 55 50 49 48 47 46 46 45 45 43 43 43 43 43 42 42 42 45 39 47 52 43 42 54 55 58 60 62 63 66 68 71 74 78 81 89 93 98 105 117 124 126 130 133 134 132 128 125 119 112 108 108 107 109 108 103 100 88 82 72 61 52 44 38 36 39 39 39 38 38 40 41 42 40 42 42 42 44 44 44 42 36 39 42 42 53 70 87 94 101 98 101 105 107 104 105 107 110 108 109 110 115 117 119 119 117 119 116 111 104 95 80 69 55 47 41 48 48 49 49 50 50 50 50 51 52 53 54 54 54 53 53 52 52 51 50 51 50 49 49 49 51 52 51 50 49 50 47 48 46 48 46 46 46 46 44 45 45 45 46 45 45 46 46 47 49 50 48 49 48 48 47 48 47 46 47 48 48 49 50 51 51 51 51 50 48 49 48 49 49 48 47 49 50 51 51 50 50 53 54 54 53 53 50 50 48 45 43 41 40 41 41 43 44 48 52 55 55 55 54 53 52 54 53 57 56 57 56 51 49 49 48 47 46 46 45 44 44 44 44 44 44 44 44 42 44 69 81 56 48 59 61 58 60 62 63 66 69 74 76 79 82 88 93 98 105 115 122 122 124 127 129 130 126 121 118 112 111 112 112 112 112 109 107 98 92 83 71 62 51 42 39 39 40 39 40 39 39 39 40 40 40 42 42 42 42 42 40 36 44 52 56 64 75 86 90 93 92 93 98 101 100 101 102 109 106 105 110 114 118 118 118 116 118 114 107 102 94 79 69 54 47 41 49 50 50 50 51 51 51 52 52 53 54 55 55 55 55 55 55 55 54 53 52 52 51 51 51 52 52 52 51 50 51 48 48 46 48 46 46 46 46 45 45 45 45 45 46 46 47 47 48 48 49 50 51 52 52 51 48 47 48 48 49 48 49 49 52 52 52 51 51 49 47 46 49 48 50 49 49 50 50 51 52 53 54 55 54 54 54 52 48 47 45 43 44 42 43 42 38 39 45 51 56 57 58 59 62 58 54 51 51 52 55 55 53 51 50 50 49 48 47 47 46 46 46 47 47 47 47 47 43 56 102 121 84 60 65 64 60 61 63 64 64 68 74 79 79 85 91 95 99 102 107 111 119 122 126 128 129 126 121 118 114 114 114 114 114 115 112 112 105 101 92 81 71 59 48 43 43 44 42 42 41 40 39 41 42 42 43 43 43 43 43 40 45 52 62 68 74 81 86 87 91 87 87 92 97 97 98 102 107 106 105 110 116 120 119 118 115 118 114 108 99 91 77 67 59 51 45 50 50 51 51 51 52 52 52 53 54 55 56 56 56 56 56 56 56 56 55 54 53 53 52 53 53 53 53 53 51 49 48 46 46 46 46 47 46 46 46 45 45 46 46 46 47 47 47 48 49 50 51 52 52 53 51 47 47 47 47 48 49 50 50 53 53 52 52 51 50 48 47 50 50 51 50 50 51 52 52 50 51 53 55 54 54 53 52 46 44 43 43 42 43 41 39 42 44 51 57 64 68 71 70 74 68 59 48 45 45 49 52 53 55 54 53 53 52 51 51 51 51 51 51 51 51 51 49 38 59 122 146 99 64 64 58 60 61 62 62 64 69 76 80 81 85 92 94 95 92 91 92 117 120 124 126 128 125 120 118 114 116 117 117 117 115 115 114 110 106 97 87 78 66 53 47 45 45 44 42 40 38 39 39 41 41 43 43 43 43 43 39 52 60 70 76 79 86 88 88 90 86 86 93 98 98 100 105 108 107 106 109 118 120 121 117 117 117 113 107 101 91 77 66 63 58 51 52 52 52 52 52 53 55 55 55 55 56 56 57 58 59 59 60 60 58 57 57 56 56 55 53 53 53 53 55 53 52 52 51 51 51 50 52 49 49 49 49 49 48 47 46 46 47 47 49 49 49 48 49 50 50 49 49 49 50 50 51 50 51 53 55 55 54 53 51 50 50 50 48 47 49 48 48 48 51 51 47 61 58 51 57 50 43 54 45 46 43 39 37 44 49 48 61 59 63 65 62 55 54 59 68 69 74 75 66 53 48 54 56 56 53 50 52 56 54 49 52 50 48 48 50 51 49 44 73 97 68 85 118 79 60 70 61 65 70 72 69 68 76 84 76 93 104 93 76 69 72 76 89 92 101 114 124 125 127 130 118 119 120 120 120 119 121 120 112 110 106 98 90 78 67 63 60 50 50 49 39 35 45 49 46 44 45 46 44 42 45 47 52 58 66 69 78 90 93 89 87 90 93 97 98 100 102 104 106 111 113 111 116 120 124 122 121 114 106 102 100 90 77 68 64 66 64 52 52 52 52 53 54 56 57 56 56 57 57 58 59 59 59 61 60 58 58 57 57 56 56 56 56 56 53 54 52 52 49 50 50 50 50 51 51 51 51 49 49 48 48 47 46 47 47 49 47 47 48 49 49 48 48 48 47 49 48 50 50 51 51 53 55 54 52 51 50 50 50 49 48 49 49 49 49 52 50 51 49 43 44 54 57 59 67 63 64 65 62 66 72 76 71 55 52 54 56 51 45 45 48 53 48 48 51 54 54 58 69 77 76 68 59 56 58 56 51 48 59 65 56 43 46 68 87 78 77 61 63 92 81 53 68 73 64 63 73 79 74 75 78 88 91 90 78 69 68 72 73 78 78 82 90 94 93 93 98 105 108 110 113 114 116 119 119 125 123 121 117 115 111 108 108 110 95 85 81 75 73 57 27 45 42 43 47 49 50 54 56 53 57 65 69 79 93 98 94 95 95 96 96 100 100 100 102 105 114 120 120 125 132 135 133 131 122 111 104 100 91 77 69 67 68 69 51 51 51 52 54 55 57 58 58 58 59 59 59 59 59 59 59 59 59 58 58 58 56 55 58 57 56 53 54 51 51 49 49 49 49 49 52 52 52 52 48 48 49 48 47 47 46 46 47 47 47 46 47 47 48 48 49 48 49 49 50 48 49 48 53 52 51 50 51 50 49 48 49 49 48 48 50 51 51 52 60 46 51 71 87 96 102 98 62 63 65 66 74 82 83 75 52 48 48 49 46 43 43 47 54 43 36 39 45 47 50 58 50 66 76 82 82 76 62 49 47 44 42 45 55 71 87 91 73 51 57 49 75 93 63 74 76 67 69 79 81 74 78 89 98 90 81 73 74 78 77 72 79 75 74 76 77 75 76 80 88 91 93 97 99 101 104 107 107 106 106 105 109 112 115 118 133 124 116 108 108 114 93 50 39 44 52 53 45 41 49 57 51 54 63 68 84 101 105 100 105 101 100 99 101 104 105 106 118 126 133 138 144 150 153 153 146 134 121 109 98 89 77 71 67 70 73 50 50 51 52 54 56 58 59 60 60 60 60 60 60 60 60 60 60 60 59 59 57 57 57 60 57 56 55 53 51 50 49 48 48 49 50 50 51 53 53 49 48 50 49 48 47 47 47 47 45 46 44 46 46 48 47 48 46 48 47 48 48 47 48 50 52 51 50 51 49 49 48 50 50 49 49 51 52 53 51 49 38 63 96 101 102 99 79 48 47 48 51 61 71 72 64 55 53 51 51 51 51 52 54 53 47 41 40 40 40 38 40 55 61 62 60 66 76 83 83 55 42 37 49 75 87 81 64 57 42 52 52 64 85 75 70 64 73 83 81 74 75 91 105 87 80 74 73 78 81 76 72 83 77 75 75 74 73 78 83 84 86 87 87 90 92 94 97 102 103 101 103 105 109 115 115 117 117 118 113 110 120 118 98 53 47 42 44 47 46 47 47 46 56 67 78 96 114 118 113 113 115 115 111 109 111 117 122 138 149 157 161 167 174 176 173 162 148 130 113 99 88 78 72 67 69 72 49 49 50 51 53 55 57 58 60 60 60 60 60 61 61 61 60 60 60 61 59 59 59 57 58 57 56 54 52 49 48 47 47 47 47 49 49 49 50 50 47 47 49 48 49 48 48 47 46 46 46 45 46 47 48 47 49 47 49 48 48 48 47 48 50 51 51 49 48 47 48 48 49 49 49 49 50 51 54 52 46 50 83 105 95 81 69 43 41 40 38 41 51 61 63 59 53 52 50 50 53 57 59 60 47 47 43 41 41 44 47 49 65 65 63 57 60 69 78 79 62 67 76 77 74 66 62 55 46 46 43 52 52 57 80 67 57 73 80 70 70 84 100 104 75 68 67 68 72 75 76 77 83 77 73 72 71 70 76 82 86 88 88 90 93 95 98 101 105 107 108 109 111 111 113 111 112 104 109 112 104 107 114 115 99 68 36 34 51 61 55 45 51 67 86 103 121 139 140 131 128 136 141 136 130 130 142 153 167 174 182 185 189 193 195 190 177 162 140 118 101 89 79 74 66 67 71 48 48 49 50 51 53 55 56 58 58 59 60 61 61 62 62 61 61 61 62 60 60 58 59 58 56 56 53 52 51 50 49 49 49 48 48 49 49 50 49 48 48 49 49 50 49 48 48 46 46 44 45 45 47 47 48 48 48 47 48 48 48 47 47 50 51 50 49 48 47 48 47 48 48 49 49 50 51 54 52 52 69 95 98 81 70 59 43 39 37 33 32 38 46 50 49 44 45 45 44 49 56 59 58 50 48 44 39 41 48 59 61 45 54 63 66 65 62 55 48 53 66 76 71 57 48 50 55 40 47 34 49 44 47 92 92 67 67 63 61 76 97 98 84 75 70 64 62 62 66 77 87 82 77 71 70 70 68 71 78 83 84 86 87 92 97 101 107 101 104 106 108 110 110 108 105 114 97 100 110 110 109 111 110 130 106 76 56 45 43 50 58 65 85 110 130 145 159 159 152 155 164 172 168 163 163 176 188 192 197 204 205 206 209 207 202 192 175 152 126 107 91 82 78 71 72 72 48 48 48 48 49 51 52 53 55 56 57 59 60 62 63 63 61 62 62 62 61 61 60 60 58 57 57 55 54 51 51 51 50 50 49 48 49 48 49 49 49 49 50 49 50 50 49 49 47 45 45 45 46 47 47 48 48 49 48 48 48 48 45 47 49 49 48 47 48 46 47 47 47 47 48 48 49 50 52 49 47 75 86 68 54 51 47 41 33 35 33 31 32 35 37 37 41 45 44 44 49 58 60 54 55 52 47 43 48 56 61 55 45 45 43 38 37 43 49 52 42 43 44 44 44 44 45 43 37 38 38 44 46 55 85 113 83 66 58 73 91 95 84 73 77 68 63 60 56 55 65 76 78 75 72 72 72 69 71 77 80 82 82 85 88 93 97 103 106 108 112 115 116 116 115 111 109 97 101 106 107 116 122 116 126 126 119 97 65 47 55 74 92 118 144 161 171 182 185 179 189 197 202 202 202 205 214 219 216 219 221 220 223 224 222 216 203 186 163 135 113 98 87 83 80 79 79 49 49 49 48 49 49 50 51 54 55 56 58 60 60 61 62 62 62 60 61 59 59 59 58 59 59 58 59 59 61 63 61 55 53 51 50 50 49 50 50 49 51 50 52 51 52 51 49 47 47 47 48 49 50 50 51 53 51 50 49 48 48 45 47 49 51 50 51 49 49 48 50 47 47 47 47 48 47 48 44 55 91 89 54 42 43 37 35 38 42 44 39 38 38 35 35 42 48 48 46 52 60 59 53 48 47 46 48 57 65 60 44 36 40 46 44 42 43 43 39 42 43 44 44 42 41 40 37 42 31 48 41 45 53 54 96 89 66 65 90 98 82 70 74 68 61 60 57 52 44 46 52 72 69 68 72 73 71 73 78 85 86 84 84 85 90 94 99 104 107 110 111 112 113 115 112 106 109 115 104 96 115 133 130 119 120 123 125 120 103 88 81 119 146 173 186 195 204 207 207 216 216 218 223 228 233 235 235 230 230 232 230 232 233 231 226 209 194 169 143 120 104 95 90 89 88 86 47 48 49 49 53 52 52 52 53 54 53 55 57 57 59 59 64 62 60 59 56 55 56 56 57 58 59 67 77 80 79 69 62 52 52 53 57 56 52 48 53 53 51 52 53 53 52 50 53 52 54 53 55 55 56 57 58 55 54 52 48 45 43 44 50 52 51 52 53 55 57 58 58 48 45 49 43 35 36 46 92 65 44 41 43 39 38 43 36 38 42 41 41 38 37 37 39 41 42 46 50 52 50 49 44 44 44 47 52 56 49 38 43 42 43 45 45 46 47 45 44 45 44 44 42 41 41 40 38 31 32 39 39 40 53 73 67 75 87 90 82 67 63 71 70 68 65 57 51 47 47 48 64 67 67 63 65 71 73 71 81 81 82 85 86 85 90 100 107 106 103 103 109 115 121 122 121 117 116 113 106 106 119 135 128 105 118 120 109 125 92 109 132 156 187 208 218 224 231 235 237 238 241 242 243 244 244 243 240 239 238 237 235 232 227 225 212 202 184 160 137 120 111 107 115 109 107 47 48 48 50 51 50 51 50 52 53 53 55 55 57 56 59 62 62 60 57 54 54 53 56 56 61 69 82 96 106 106 96 75 63 58 56 57 58 56 53 56 54 52 52 53 53 53 50 47 47 50 52 54 57 58 57 58 57 54 52 48 45 43 44 46 50 53 54 55 55 55 55 57 54 49 49 42 37 46 58 66 45 35 38 39 36 37 42 37 40 43 45 44 42 40 41 41 42 41 43 46 49 47 46 44 40 43 54 57 49 43 41 43 44 46 45 47 46 47 45 45 43 43 43 41 40 39 36 39 35 37 42 42 38 47 60 63 68 77 81 73 64 65 72 69 67 65 56 49 45 45 46 53 63 69 67 62 66 70 74 74 76 80 84 83 83 88 97 104 105 105 106 112 118 122 123 120 115 111 116 122 123 118 112 107 107 104 102 111 116 72 115 137 165 200 220 230 237 242 243 249 250 253 253 254 253 254 251 246 244 243 241 239 237 236 234 224 216 197 174 154 140 133 131 134 128 126 44 45 46 47 47 48 50 49 52 50 52 54 54 56 57 58 61 59 59 56 55 55 55 57 58 66 83 102 120 133 138 131 105 92 82 75 71 69 65 60 59 55 52 51 50 51 49 48 45 46 48 50 51 52 53 51 52 52 51 48 48 47 45 44 39 42 47 48 51 52 50 49 52 53 50 44 39 44 57 67 48 36 32 39 41 36 34 38 38 41 45 47 46 45 45 47 46 46 43 43 43 45 45 44 45 40 46 61 58 42 38 46 44 43 44 46 47 46 47 44 45 43 43 41 39 38 34 33 36 35 39 47 46 41 44 55 53 56 65 73 74 67 65 67 65 63 61 52 46 42 42 43 41 56 69 69 64 65 73 80 71 73 79 84 85 85 88 95 102 105 107 112 119 123 124 122 116 116 113 116 124 128 118 99 109 119 92 94 132 123 59 112 129 166 208 228 239 249 253 251 255 255 255 255 255 255 255 252 250 248 247 245 245 243 243 242 234 225 206 185 168 158 153 151 158 150 148 44 44 45 44 45 46 47 48 48 49 51 53 53 55 56 57 60 59 57 57 56 56 56 59 62 76 98 122 146 161 168 166 151 138 123 109 100 90 80 72 70 63 55 51 48 47 46 47 48 49 51 50 49 49 47 45 47 46 47 47 48 47 48 47 42 44 46 48 50 51 53 52 52 53 49 43 43 54 65 65 46 40 40 45 44 38 35 38 38 41 44 47 47 48 49 50 51 50 46 42 43 44 44 42 44 45 52 57 51 39 40 47 43 42 45 45 46 44 44 42 44 43 41 40 38 36 32 31 30 31 36 46 47 46 50 58 45 48 53 64 73 73 63 56 57 56 52 47 43 42 43 45 38 51 64 67 64 68 76 85 69 69 77 85 87 87 88 94 99 102 109 114 121 124 123 121 113 122 122 112 110 117 117 106 102 103 85 113 164 141 51 64 109 155 202 226 241 254 255 254 255 255 255 255 253 254 251 250 249 247 247 246 246 245 247 246 239 228 210 193 180 172 169 170 180 172 166 44 44 43 43 44 44 46 47 47 48 49 51 51 53 55 56 58 58 58 58 57 58 58 61 68 85 113 141 168 185 195 198 192 182 169 154 141 126 110 97 88 77 66 56 50 47 44 44 49 51 49 49 47 43 42 41 44 43 44 47 48 50 52 51 52 53 51 50 50 52 52 53 51 49 46 47 56 68 71 60 48 43 46 47 45 41 39 42 36 39 43 46 45 46 48 51 54 51 47 44 44 43 43 43 43 53 56 46 38 41 45 43 43 41 45 44 44 43 42 42 44 42 41 39 35 33 31 30 30 30 34 41 45 48 54 61 62 55 53 57 68 71 62 49 49 48 47 44 42 43 45 48 45 50 58 63 66 72 79 86 69 67 76 85 89 88 89 93 95 100 108 115 122 124 121 118 114 124 122 111 108 116 115 105 95 93 104 158 184 155 69 42 98 142 192 220 239 253 255 253 255 255 255 255 255 254 251 249 247 247 247 246 247 246 247 247 243 234 218 205 195 191 192 194 200 191 183 49 46 46 43 43 44 45 46 46 47 48 50 50 52 54 52 56 56 56 59 58 59 60 65 73 94 124 157 184 204 216 222 218 212 201 191 181 167 150 135 119 105 89 74 63 56 52 50 53 55 52 50 46 43 42 42 42 43 44 48 52 54 57 58 58 58 55 53 53 52 49 48 53 43 41 50 65 71 64 52 47 43 45 45 44 42 43 45 37 40 43 45 44 46 48 52 53 52 49 46 46 47 46 44 45 57 55 38 35 47 52 42 44 40 43 42 43 43 42 42 42 41 41 40 36 34 32 31 35 35 36 38 41 44 49 54 81 74 65 59 60 63 59 49 42 40 42 41 40 43 48 51 54 51 54 61 69 72 77 80 70 67 73 84 89 90 92 95 95 97 105 112 119 122 120 118 119 118 116 115 121 123 111 94 107 99 113 154 145 134 98 76 101 137 183 215 237 247 253 254 255 255 255 255 254 252 250 248 247 248 249 249 249 247 246 242 239 230 219 210 206 207 210 214 220 211 201 52 49 48 43 42 42 43 44 45 46 47 49 49 51 53 52 55 55 56 59 59 61 63 67 75 99 130 166 197 218 234 241 239 235 229 221 214 202 189 177 161 145 126 107 92 82 76 74 75 71 64 58 52 47 45 44 42 43 47 52 55 59 62 65 67 70 72 75 76 75 71 66 65 52 48 59 70 64 53 45 47 44 42 43 44 45 45 42 39 41 42 44 45 46 49 53 52 51 49 49 50 50 48 47 53 53 49 40 42 50 51 42 42 39 42 41 41 41 40 40 41 41 41 40 39 37 33 32 37 37 37 37 40 43 46 47 71 80 83 73 62 57 55 47 42 38 40 39 40 42 48 52 59 55 58 67 72 71 74 75 72 68 73 83 90 93 93 96 94 97 102 108 117 120 120 119 119 117 118 120 123 119 107 95 106 102 93 107 89 96 96 96 100 124 166 207 231 240 247 253 255 255 255 253 252 249 247 245 246 247 250 249 247 242 240 237 228 221 213 210 213 219 225 229 236 227 215 54 51 48 45 43 43 43 44 45 45 47 49 49 51 52 51 55 55 56 58 59 60 63 67 77 102 136 171 203 227 245 253 255 250 243 238 234 225 214 204 196 180 159 139 124 112 104 101 99 94 83 72 62 54 49 47 47 48 51 55 61 64 68 72 82 92 99 106 110 109 104 97 87 69 63 73 76 60 49 46 48 47 45 45 46 47 43 38 40 43 43 45 45 47 49 52 50 50 50 50 52 52 51 47 58 47 42 47 53 53 49 44 41 39 40 41 41 41 40 40 41 41 41 41 39 38 36 35 34 37 36 38 41 43 43 42 43 71 92 89 70 55 50 45 41 39 38 37 38 42 47 50 57 57 63 72 73 68 69 71 73 68 72 83 90 92 94 97 94 96 100 105 114 120 121 122 116 119 126 125 113 103 105 109 108 116 94 102 97 104 94 94 93 111 150 195 225 233 242 253 255 255 255 253 252 249 247 246 244 245 248 248 245 239 235 229 221 217 211 213 221 229 236 242 246 236 223 53 52 51 49 47 45 43 42 41 41 42 43 48 51 54 54 55 55 56 57 58 59 65 72 77 96 129 167 202 227 246 255 255 255 255 252 249 243 236 232 218 210 193 177 161 146 135 126 122 118 110 95 77 64 58 56 52 53 58 61 62 66 72 84 106 126 137 136 139 139 126 106 101 91 87 81 68 51 40 40 42 42 44 46 45 45 44 44 39 40 42 45 45 47 49 51 52 53 54 51 49 49 51 51 60 54 48 55 82 99 84 54 41 41 42 41 38 37 38 40 43 44 43 39 35 34 36 40 38 40 41 42 44 43 44 45 56 49 65 94 81 60 59 42 38 36 38 38 40 43 48 50 52 59 74 82 74 58 58 68 71 69 75 84 87 86 88 92 102 102 101 102 108 115 118 118 119 118 117 120 120 115 110 106 117 103 109 108 88 88 101 101 103 101 139 178 207 231 238 247 249 253 254 252 252 252 248 244 246 246 244 241 244 243 232 217 213 206 208 222 231 231 232 243 248 239 226 54 51 52 50 48 46 45 44 42 42 42 43 47 50 53 53 54 54 55 56 56 57 62 69 78 95 127 164 201 226 245 254 255 255 255 255 255 252 248 245 235 227 216 201 187 174 160 152 142 136 127 116 98 84 73 67 58 61 65 63 64 69 82 99 131 150 157 155 154 150 136 117 107 98 88 71 57 47 41 41 37 37 38 40 39 40 40 40 37 40 45 50 51 53 53 53 57 55 55 57 61 61 60 59 58 57 55 47 40 43 62 79 54 44 35 35 41 45 43 40 46 47 49 46 41 38 37 38 39 39 40 40 42 41 41 40 47 45 54 74 81 72 63 40 40 38 39 39 40 40 44 47 52 56 70 80 73 61 59 67 72 70 76 82 87 86 86 90 102 104 105 107 109 113 116 117 108 115 121 123 117 110 105 101 102 98 104 104 94 99 105 94 95 87 125 165 197 222 233 245 247 253 254 252 252 252 251 245 245 245 243 241 244 244 233 219 212 203 204 219 229 231 232 239 246 238 225 54 53 52 50 48 46 45 44 43 43 42 43 47 50 52 52 53 55 56 54 54 55 60 67 75 93 121 156 194 220 240 250 254 254 255 255 255 255 255 255 249 244 235 224 211 199 188 179 162 155 145 133 119 104 86 76 60 64 66 66 66 74 93 115 149 165 167 162 154 147 131 110 94 92 82 62 48 43 41 39 41 41 41 42 44 45 45 46 42 46 49 53 56 55 51 52 49 46 45 51 59 63 60 53 52 44 43 45 39 32 42 58 62 54 45 41 42 44 44 44 41 43 46 46 43 40 39 39 40 41 40 41 42 42 43 44 43 52 53 55 78 87 69 47 44 40 42 41 41 40 42 44 51 54 65 75 71 62 58 62 68 67 73 80 84 83 83 87 100 104 112 114 110 108 108 112 106 116 123 121 113 107 107 109 104 104 109 107 103 110 109 95 87 70 102 148 182 209 223 244 247 253 255 252 252 254 253 247 244 242 242 242 244 244 236 226 215 203 201 216 228 232 231 236 242 235 225 57 56 54 52 51 49 48 47 45 44 44 44 47 49 51 53 54 55 55 53 52 53 56 62 75 87 113 150 186 212 233 245 249 249 253 255 255 255 255 255 252 248 242 234 226 215 205 197 182 170 158 144 132 117 99 81 68 66 67 69 74 85 100 120 141 153 152 143 131 120 103 85 72 80 79 60 49 50 44 36 34 36 36 38 40 43 45 47 54 55 54 54 53 51 46 44 40 39 40 45 52 52 49 45 45 34 31 44 54 48 37 31 55 60 63 55 42 37 41 50 46 46 46 44 42 42 41 39 42 43 43 45 47 48 51 51 42 66 69 48 70 92 75 63 47 43 42 42 42 42 43 42 48 50 57 66 68 60 55 55 63 63 69 75 79 76 77 80 96 103 113 117 109 103 103 107 112 116 115 110 108 111 117 120 117 111 109 108 108 106 104 97 84 60 85 129 169 197 217 243 246 252 255 254 254 255 255 248 245 242 243 245 247 247 241 232 218 204 202 214 228 232 229 233 238 232 224 58 57 56 54 54 52 51 50 48 47 46 46 48 49 51 52 56 56 56 54 51 50 54 59 71 82 104 139 177 206 227 238 247 249 253 253 255 254 255 253 251 248 244 239 233 226 217 209 201 187 172 158 146 132 115 98 89 81 76 77 84 93 98 104 112 118 117 110 99 89 74 63 69 77 75 60 54 58 52 41 43 45 45 47 48 52 55 58 57 55 53 50 45 44 43 42 42 45 46 48 48 47 46 44 38 43 43 35 34 41 45 41 45 55 65 63 52 45 45 50 55 53 48 44 42 44 45 43 49 49 49 50 48 48 48 49 43 76 90 54 58 81 72 81 52 47 44 44 45 46 45 44 45 46 51 57 59 54 50 48 60 60 66 73 77 75 75 79 96 104 114 120 113 101 101 107 117 116 111 106 111 119 119 115 116 109 107 114 117 102 92 97 86 57 74 114 156 193 214 239 246 252 255 254 254 255 255 250 248 244 245 248 250 249 244 241 226 210 204 215 228 230 229 233 234 231 225 61 60 59 57 57 55 54 54 51 50 49 48 50 50 52 53 56 57 57 54 51 50 51 55 67 76 99 133 171 200 222 235 248 251 253 255 255 254 253 253 249 247 242 240 237 232 227 222 218 205 192 178 169 157 142 125 120 106 95 92 92 93 87 83 83 84 85 81 77 70 60 54 76 74 65 52 50 55 53 46 54 54 55 56 56 58 60 61 51 49 47 44 42 43 44 45 49 52 52 51 48 45 44 45 36 48 46 34 29 38 41 38 39 41 47 57 64 62 55 47 46 42 41 40 44 52 56 57 53 52 51 49 45 42 40 38 40 69 99 65 50 67 66 86 60 52 46 43 45 47 47 46 43 45 48 50 50 46 46 45 54 57 63 71 76 73 76 78 99 103 116 122 117 106 105 111 115 113 110 110 120 127 115 98 109 109 111 125 138 124 104 106 88 58 71 103 146 191 216 235 245 251 255 254 255 255 255 253 251 244 246 250 250 248 246 245 232 219 213 221 229 229 226 231 234 231 229 61 60 61 59 57 55 56 55 52 51 51 50 51 52 54 55 59 59 57 55 50 48 49 53 63 70 94 130 167 196 218 231 246 250 252 254 255 254 251 251 246 244 241 240 238 237 232 230 226 219 210 202 194 183 168 154 136 122 105 95 89 82 73 65 62 60 61 60 60 53 50 49 73 63 55 51 53 54 52 48 46 46 46 46 43 42 39 38 42 42 40 41 42 44 46 47 51 50 49 47 45 44 42 41 38 37 37 38 41 42 36 28 38 37 39 49 60 64 61 55 49 46 45 46 51 58 61 61 54 51 49 47 42 40 37 36 36 49 95 76 53 63 61 83 72 61 51 46 46 48 48 47 42 45 46 45 42 40 43 44 48 50 56 66 72 70 73 76 101 102 114 123 120 107 106 114 114 115 113 116 128 136 121 100 116 124 117 119 149 159 138 124 85 60 70 92 136 190 217 230 245 251 255 255 255 255 255 253 251 243 243 247 248 246 245 246 240 226 220 226 230 227 225 230 236 235 234 63 62 62 60 58 56 55 56 53 52 51 49 50 50 51 54 57 58 58 55 50 48 50 53 61 69 93 128 168 197 216 231 242 247 250 253 255 254 253 251 245 242 238 235 237 238 237 238 230 227 221 213 203 190 175 160 127 114 99 88 78 72 67 62 58 55 55 55 52 47 44 45 69 60 55 61 67 64 57 51 57 56 56 53 50 44 41 39 40 40 42 44 46 46 46 44 55 49 44 44 45 45 41 37 40 32 33 40 39 34 37 48 38 42 44 46 47 51 57 62 75 70 66 61 61 58 54 49 49 47 46 46 43 42 41 40 33 31 89 83 58 67 59 77 81 69 54 47 46 47 45 43 44 45 46 41 37 38 41 46 41 43 49 58 64 65 66 69 95 96 106 119 117 105 101 109 116 116 112 114 127 139 132 115 121 134 113 102 145 180 162 135 80 57 63 85 129 191 217 227 244 251 255 255 255 255 255 253 249 240 241 244 247 241 242 244 243 232 226 229 231 226 224 233 241 240 239 64 64 63 62 60 59 58 59 55 54 53 51 50 50 50 52 58 57 56 54 53 52 52 57 68 77 98 131 167 195 215 231 246 249 252 252 255 255 255 252 245 241 236 237 239 243 246 246 246 238 222 211 203 188 155 120 93 84 77 73 71 69 69 68 65 61 66 52 59 60 41 69 73 69 66 63 63 62 59 57 59 55 59 65 62 48 41 44 43 44 45 42 42 43 47 46 53 43 36 38 43 45 38 31 31 31 33 34 34 37 39 41 38 41 41 42 40 38 39 41 41 46 50 51 50 50 52 53 51 47 44 45 46 44 40 37 28 34 72 78 51 73 49 72 80 74 64 54 48 44 43 43 42 40 38 40 41 41 43 44 44 48 49 51 51 52 53 55 97 105 95 106 113 100 109 121 122 120 111 105 106 110 111 111 123 133 108 119 112 175 154 117 81 58 56 90 136 176 211 240 245 249 251 253 255 255 255 254 243 232 233 237 245 244 242 240 241 238 234 230 227 225 225 229 241 250 250 65 64 64 62 61 60 59 58 54 53 52 51 50 50 50 52 56 57 56 54 53 52 55 58 69 77 99 131 166 192 211 225 236 241 244 249 253 255 255 251 244 237 232 232 234 237 238 237 243 235 220 205 189 166 130 98 77 70 67 65 67 67 68 70 67 63 68 59 63 61 49 80 70 68 66 63 59 57 56 55 63 53 52 62 65 53 44 43 42 43 45 45 46 47 51 52 50 45 41 38 39 39 34 31 36 34 37 38 43 44 44 42 46 45 43 41 38 34 33 34 36 38 43 44 45 47 50 51 46 45 46 46 42 39 39 39 46 25 53 49 62 80 63 65 86 82 72 62 53 46 43 40 42 40 39 41 43 45 47 46 44 48 48 49 48 49 51 53 92 100 91 102 108 97 108 120 126 124 114 102 96 102 112 120 119 126 100 112 110 169 147 107 79 59 59 92 141 184 220 241 248 249 250 251 253 254 255 250 242 232 229 234 240 241 241 240 239 237 233 229 224 221 223 228 239 246 249 66 65 65 63 62 61 60 60 57 56 55 53 53 53 53 55 57 59 57 55 54 53 55 58 67 78 98 129 161 185 203 214 222 227 233 238 244 247 248 244 239 232 227 224 224 225 227 226 221 214 204 189 169 145 111 81 76 68 65 63 65 67 68 70 67 61 65 64 63 56 54 87 67 66 63 60 56 54 54 54 65 49 43 53 62 58 47 41 41 41 44 46 48 49 53 57 42 42 42 42 42 41 42 44 33 31 33 34 41 41 40 37 59 56 51 46 41 36 34 35 37 36 38 39 42 45 47 47 41 43 45 44 38 37 38 42 47 32 69 48 59 63 73 85 84 81 77 67 59 50 43 38 38 37 38 39 42 45 44 44 44 47 46 47 46 48 52 55 81 93 89 103 109 96 103 113 94 107 113 109 103 105 113 119 117 117 93 104 109 161 138 96 72 61 65 93 146 194 230 241 247 248 248 251 253 253 251 246 237 226 221 224 229 231 234 236 233 234 230 224 216 213 217 223 239 244 249 66 66 65 64 63 63 62 62 59 58 57 56 56 56 56 58 59 60 59 57 55 54 56 59 66 75 96 126 155 178 194 206 210 214 219 227 232 236 237 235 232 223 218 213 213 214 214 210 189 182 175 162 143 120 97 75 74 67 65 65 67 69 70 70 70 62 64 68 60 49 58 89 66 67 64 61 57 55 56 56 59 46 40 47 55 54 47 40 41 41 46 47 48 49 55 56 43 42 44 44 45 46 46 47 40 41 43 44 46 48 54 53 64 60 55 49 42 37 38 37 40 39 37 37 40 44 44 42 42 44 43 41 39 37 40 42 40 44 80 60 47 44 64 88 115 111 103 89 71 55 40 32 39 40 38 41 44 45 44 45 46 46 47 45 45 46 51 55 65 87 91 108 114 97 97 100 84 101 114 111 108 112 118 118 115 110 88 98 107 150 131 89 67 63 69 95 148 202 232 240 239 242 245 249 250 248 243 235 222 210 204 206 210 213 219 225 225 227 227 219 209 205 209 217 234 240 243 66 66 65 65 64 63 63 63 61 60 59 59 58 59 59 61 60 61 60 58 56 55 57 60 65 73 93 120 147 165 183 194 195 200 207 212 220 224 223 222 220 214 206 199 197 195 193 184 159 150 143 134 118 101 85 75 71 67 65 65 67 71 72 72 73 64 63 69 56 44 60 80 67 67 64 63 61 60 59 60 50 42 41 42 45 45 43 41 42 42 47 47 47 47 51 53 53 50 48 49 50 48 43 39 39 45 48 46 45 48 59 64 59 54 49 44 38 34 35 37 41 38 38 39 44 48 47 45 49 45 39 37 39 41 41 40 45 42 50 58 45 58 52 54 51 54 62 67 73 72 72 71 48 46 44 45 45 46 47 48 46 46 46 44 44 46 51 54 65 88 93 108 114 99 101 103 118 122 118 104 102 113 123 124 115 106 87 93 104 141 131 93 73 73 80 102 150 204 233 237 237 240 242 243 241 234 224 215 200 189 186 188 192 196 204 211 216 222 223 217 210 205 207 214 222 224 226 65 65 65 64 64 63 63 63 62 62 61 60 60 61 61 62 62 62 62 59 57 55 57 59 63 71 87 110 131 150 165 177 180 185 193 200 207 212 213 211 211 202 192 184 178 173 171 156 140 123 120 113 102 87 78 72 69 66 66 66 69 71 73 74 72 67 62 68 52 44 64 70 65 61 59 59 61 63 60 58 42 40 42 40 39 38 40 40 41 44 46 46 46 46 47 48 50 47 48 50 55 55 53 49 42 47 50 50 49 52 61 68 54 50 47 44 41 39 40 40 36 36 40 44 50 53 53 54 56 49 40 38 41 42 42 38 43 41 39 60 47 65 50 44 47 46 49 48 46 42 38 35 53 50 46 42 41 43 44 44 47 48 47 46 43 44 47 50 71 94 95 105 111 104 113 120 123 126 117 107 110 122 126 117 112 102 89 91 102 131 134 107 93 90 96 114 152 194 222 229 239 238 238 234 227 217 205 193 173 167 168 171 175 178 186 193 204 212 218 216 212 209 207 211 211 211 210 62 62 62 62 61 61 61 61 60 60 59 59 59 60 60 63 63 62 61 60 58 58 58 60 63 69 82 98 115 129 144 157 164 169 178 188 198 203 204 202 200 191 181 173 167 164 160 142 117 97 96 98 90 79 71 69 64 62 64 66 69 71 73 74 68 68 61 66 47 44 70 60 56 52 48 49 56 59 57 53 40 40 42 39 37 38 39 38 38 41 44 43 43 43 43 45 43 45 51 52 55 55 56 56 59 60 62 65 68 70 72 69 53 50 50 47 45 42 43 44 38 42 47 50 52 52 53 54 60 55 49 44 41 39 42 41 39 47 56 62 47 46 54 54 45 46 48 49 49 48 48 47 63 58 49 42 41 40 42 42 45 47 48 47 43 43 46 48 65 90 94 105 115 110 122 127 112 121 121 115 118 127 125 111 110 98 91 89 97 123 137 122 107 102 104 117 142 173 196 209 220 215 207 199 191 182 174 164 149 144 148 154 158 162 168 177 187 196 206 213 214 210 205 202 201 198 193 62 61 61 61 61 61 60 60 61 60 60 59 59 60 61 63 62 62 62 60 60 58 58 60 65 68 76 90 102 113 127 141 150 156 167 181 191 197 200 199 191 183 173 167 165 162 160 141 93 75 75 82 82 73 67 64 61 59 63 65 66 70 72 73 65 68 60 63 46 47 75 53 51 44 38 42 51 57 54 47 42 41 41 39 40 41 39 37 36 37 41 42 42 42 41 42 51 56 60 58 50 45 45 49 51 48 49 54 63 65 57 47 48 46 49 47 44 43 41 42 43 48 54 55 52 49 48 50 61 60 55 47 40 37 41 45 42 45 60 50 49 32 57 51 40 41 41 41 43 42 43 43 78 70 59 50 47 46 49 49 45 47 48 46 44 42 44 45 50 81 93 112 121 114 124 125 131 137 128 113 112 124 127 116 106 97 94 87 94 116 139 132 110 103 104 113 130 150 173 189 185 178 167 158 151 144 140 134 130 127 133 140 144 146 154 162 170 181 196 205 210 207 201 195 189 184 180 61 61 61 61 61 61 61 61 59 59 59 60 60 61 61 61 63 63 61 61 61 60 60 62 61 67 72 79 88 98 105 114 129 142 155 167 179 193 201 199 192 188 178 168 167 171 163 132 82 60 64 67 67 62 62 69 60 58 61 64 67 72 73 72 62 57 54 51 47 48 56 68 49 54 46 46 59 51 39 44 37 39 41 40 37 38 39 40 39 40 40 36 34 37 46 53 51 49 46 43 41 40 40 40 42 41 46 55 62 59 54 49 54 43 42 45 45 39 40 47 50 52 54 53 50 47 44 44 50 49 49 75 26 35 62 38 40 55 64 55 42 42 49 55 52 46 41 38 42 46 48 46 88 79 58 44 47 45 39 42 37 38 38 37 39 42 46 49 48 59 87 112 118 124 131 124 132 128 123 122 124 124 120 115 110 92 92 91 86 107 128 122 109 102 99 106 119 129 131 132 127 124 118 113 111 114 118 117 119 121 127 132 134 135 140 144 147 154 167 185 199 202 196 188 183 174 168 61 61 61 61 61 61 61 61 59 59 59 60 60 61 61 61 63 61 61 61 59 60 60 62 64 67 70 74 81 88 94 102 116 131 145 157 172 188 196 196 193 186 171 162 164 168 158 125 69 46 46 53 59 58 58 61 61 60 62 65 69 70 70 67 55 52 49 47 44 43 53 65 64 61 51 49 57 56 43 35 39 40 42 42 40 40 40 40 40 38 37 37 42 46 48 49 39 38 38 39 40 42 44 47 45 43 46 55 59 55 51 48 47 56 59 48 43 47 49 45 62 61 58 54 52 51 53 55 45 53 50 63 63 43 46 30 49 58 64 56 45 44 48 49 46 42 39 40 43 48 50 47 89 78 56 43 49 48 44 47 43 42 42 41 41 40 40 41 48 57 84 106 116 124 132 128 132 128 125 125 125 123 118 113 110 93 92 92 89 104 119 111 98 92 93 99 107 112 112 109 93 93 92 94 95 101 105 107 116 118 124 125 127 130 134 137 134 139 151 168 183 191 188 186 181 172 163 60 60 60 60 60 60 60 60 58 58 58 59 59 60 60 60 61 61 61 61 59 60 60 60 65 65 68 70 75 78 83 90 103 118 133 145 164 181 190 189 193 183 169 158 162 165 152 118 70 49 45 50 56 59 58 57 62 62 63 66 69 69 66 63 52 48 43 42 40 42 51 60 62 54 52 55 61 69 60 35 40 39 41 43 44 43 41 41 41 35 35 42 51 54 49 43 39 38 37 37 37 38 40 41 45 43 47 54 58 55 51 51 55 58 64 64 66 67 62 55 60 59 57 55 51 49 49 50 44 57 52 57 106 65 45 44 55 60 59 54 46 45 43 42 39 37 39 41 46 49 49 49 89 77 51 40 51 54 51 54 56 55 54 50 49 46 42 41 47 54 77 101 114 126 136 131 131 129 127 127 127 124 117 111 109 94 90 92 90 97 101 90 81 79 82 88 93 94 92 88 77 80 85 89 96 103 106 109 114 116 120 121 121 122 126 129 127 128 134 146 162 174 178 180 173 165 155 59 59 59 59 59 59 59 59 58 58 58 59 59 60 60 60 61 61 60 61 59 60 60 60 64 64 66 67 69 70 73 79 95 109 123 137 156 173 183 179 186 180 170 161 159 156 140 108 82 66 63 61 60 59 59 60 65 65 68 69 72 68 64 59 54 49 43 42 41 42 48 58 55 49 57 63 63 76 74 43 41 36 37 41 44 44 42 41 38 38 41 47 55 54 46 38 41 41 42 40 41 41 41 43 44 44 49 57 60 59 61 65 74 54 58 89 105 90 73 72 56 56 57 58 55 49 42 37 45 50 47 64 112 83 59 68 58 57 53 48 45 42 38 35 35 36 38 44 47 45 47 50 81 71 48 41 55 58 53 53 57 57 57 56 53 50 46 45 44 49 72 95 111 127 136 133 127 127 127 128 128 123 116 110 104 92 86 90 92 90 82 71 66 67 73 80 86 88 88 87 90 92 98 104 108 111 113 112 113 116 117 118 118 118 119 122 124 123 124 133 150 164 175 181 175 165 153 59 59 59 59 59 59 59 59 58 58 58 59 59 60 60 60 60 60 60 61 59 60 60 60 60 62 62 63 65 66 69 74 89 100 113 125 145 162 168 164 167 171 169 158 148 137 119 95 84 78 78 72 62 60 62 62 66 67 71 74 73 70 63 57 55 47 43 42 41 42 46 54 65 59 66 65 54 66 76 62 50 40 35 40 45 42 41 43 37 41 47 52 53 48 43 39 43 44 48 48 53 54 56 58 53 54 61 67 70 71 78 82 77 63 75 105 118 100 83 82 68 65 62 60 57 51 42 36 42 40 50 84 90 86 63 70 64 55 48 45 45 43 39 35 35 36 40 45 44 41 46 53 71 65 48 45 57 58 49 49 48 49 50 51 50 47 46 46 42 43 66 89 108 128 137 131 124 126 127 129 129 124 117 112 101 93 86 90 93 82 66 60 63 67 75 81 86 90 95 97 101 104 109 113 114 114 112 111 114 116 116 116 116 114 116 119 123 120 120 130 149 167 181 193 191 182 168 58 58 58 58 58 58 58 58 58 58 58 59 59 60 60 60 60 60 60 61 59 60 60 60 59 59 60 63 63 64 65 70 80 93 101 115 133 151 157 151 150 159 161 150 133 117 100 80 72 78 81 74 64 60 63 66 70 70 71 72 73 69 62 54 53 45 40 40 41 42 45 51 69 63 62 56 47 58 80 91 67 51 37 39 43 43 43 44 38 45 52 52 48 44 43 45 56 59 61 60 61 61 60 62 65 66 75 78 78 79 88 95 72 91 108 107 99 95 88 74 81 71 58 50 45 45 43 42 47 40 66 99 71 75 57 57 74 60 48 45 47 43 41 40 38 37 41 45 41 39 47 59 65 61 50 46 55 54 46 45 45 44 47 49 49 49 49 50 41 41 58 82 104 125 137 132 125 127 128 128 127 121 115 111 99 96 88 91 95 78 58 56 69 73 83 89 93 96 103 108 108 109 111 112 111 110 108 108 113 113 114 114 111 112 114 116 118 116 119 132 153 175 190 204 202 192 175 56 56 56 56 56 56 56 56 56 56 56 57 57 58 58 58 60 60 60 61 59 60 60 60 58 59 59 62 62 62 60 65 77 87 95 109 128 146 152 145 142 148 148 135 121 108 91 75 66 75 79 73 67 66 67 66 69 69 70 70 70 66 60 53 51 43 39 41 42 44 49 55 58 57 51 50 50 52 69 97 91 67 47 45 46 42 43 47 44 47 51 50 47 44 47 53 66 68 69 65 63 60 56 55 65 69 77 80 80 84 96 104 87 108 116 100 89 90 84 66 82 67 49 40 36 38 38 39 46 44 77 81 62 62 51 55 81 64 49 45 44 40 40 41 39 38 38 42 40 40 52 70 65 64 54 48 51 49 43 45 47 45 47 47 47 49 49 50 46 40 50 72 94 122 138 135 129 130 132 130 124 117 111 108 96 97 87 89 93 71 49 54 68 78 91 99 104 106 110 115 116 116 114 112 110 109 108 108 110 110 111 111 108 107 110 114 116 116 119 133 154 175 189 204 201 189 171 56 56 56 56 56 56 56 56 56 56 56 57 57 58 58 58 60 60 60 61 61 60 60 60 62 61 63 63 63 62 59 63 75 84 92 107 127 148 156 151 148 149 144 133 122 111 91 76 69 78 81 76 74 73 70 64 68 67 67 65 65 61 56 52 49 43 40 44 46 49 55 61 52 53 46 48 54 39 41 71 106 80 55 48 48 42 43 48 48 50 51 50 49 50 54 60 53 56 56 56 55 53 52 53 50 57 66 71 74 77 92 104 115 106 98 93 93 89 76 59 70 59 46 40 39 40 38 37 39 43 74 50 56 49 47 64 83 65 49 42 40 37 36 40 40 38 37 42 38 37 53 74 65 66 54 46 49 47 43 50 47 46 45 43 42 42 44 44 49 40 46 66 88 119 139 138 133 133 134 130 122 114 108 105 92 94 85 86 90 67 45 53 63 74 92 103 108 110 114 118 122 119 114 109 105 103 103 105 107 109 109 108 104 105 106 111 115 114 120 132 152 169 181 194 196 183 164 55 55 55 55 55 55 55 55 56 56 56 56 56 56 56 58 60 61 62 60 60 61 63 65 66 63 64 65 66 66 65 66 76 80 91 108 134 156 170 173 166 166 159 144 128 115 102 96 87 79 74 76 79 75 69 70 66 63 61 58 57 54 48 44 38 48 44 40 53 61 53 50 53 49 46 45 42 42 39 37 48 76 79 57 42 46 51 45 42 66 47 59 62 56 77 51 50 50 50 39 42 47 47 38 41 55 46 55 64 57 112 66 108 105 99 92 87 77 64 52 55 55 49 38 33 35 39 41 45 47 63 55 49 52 52 67 72 69 59 48 41 40 41 42 47 44 35 30 36 47 59 63 70 61 48 42 44 49 51 52 49 49 49 46 46 45 45 47 48 37 49 51 89 113 143 134 140 141 135 123 116 115 110 101 99 89 91 89 105 59 45 54 66 77 93 99 103 106 110 111 110 109 108 105 104 102 101 102 108 109 108 107 103 102 103 105 109 114 118 124 137 153 164 174 173 158 141 55 55 55 55 55 55 55 55 56 56 56 56 56 56 56 58 59 62 63 62 61 61 63 66 67 65 66 66 68 70 72 73 78 84 97 116 142 166 183 187 199 182 160 142 133 125 111 100 99 90 82 83 86 80 74 69 63 60 58 56 55 52 47 44 43 45 40 44 54 52 49 55 48 45 42 40 38 38 37 39 46 59 68 60 47 40 41 46 51 69 49 60 65 60 77 50 44 40 44 44 43 40 40 44 39 40 44 68 38 65 80 51 117 106 97 93 83 67 56 54 44 53 54 44 31 26 25 27 37 54 80 71 52 53 61 85 66 63 57 47 41 44 47 48 51 49 46 45 46 51 57 61 64 56 45 42 44 49 51 51 50 50 49 48 46 45 45 45 49 36 47 50 87 115 144 136 140 138 132 121 116 114 110 103 97 90 95 96 92 55 46 57 67 75 89 95 98 102 105 106 105 105 104 101 100 100 99 101 106 108 108 105 101 99 99 99 104 107 112 115 124 132 135 139 126 111 95 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 58 62 64 64 63 62 63 67 69 71 71 73 77 79 84 86 88 96 112 134 161 185 201 206 210 196 178 159 147 138 122 109 105 92 81 79 82 81 75 69 61 58 57 55 55 52 48 45 45 43 44 54 63 50 41 50 47 46 44 44 40 38 38 42 45 46 57 67 58 37 35 50 53 68 50 59 63 61 80 59 48 38 39 51 47 39 37 50 41 57 48 48 60 93 73 101 102 92 84 82 73 59 52 57 44 50 53 49 45 41 35 32 30 42 67 58 44 53 66 93 58 59 57 51 47 52 56 59 60 59 59 63 62 58 61 68 57 52 44 43 45 49 50 50 50 50 49 48 46 45 45 45 50 37 43 48 84 119 146 138 137 137 129 120 114 111 107 102 95 92 98 103 72 51 50 60 69 78 90 94 95 99 103 103 102 102 99 98 98 97 98 99 102 104 104 101 97 96 96 96 106 110 115 116 119 117 110 108 87 76 62 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 56 58 60 62 63 62 67 69 72 79 84 89 95 99 102 104 108 116 134 155 181 200 214 220 212 208 194 167 144 130 124 123 116 103 92 84 80 77 71 66 59 56 55 55 54 52 49 46 42 45 48 58 71 63 46 41 49 49 48 49 45 39 38 43 45 43 52 66 61 44 42 54 45 58 48 53 58 62 86 79 69 56 38 49 44 50 42 46 57 28 54 49 63 76 98 85 67 68 70 65 61 57 56 55 51 49 50 58 72 83 78 64 50 53 73 76 82 90 81 86 49 54 57 55 53 57 60 59 64 61 61 67 63 56 61 74 51 48 43 44 46 48 49 49 50 50 49 48 46 45 45 45 51 39 40 46 79 121 146 139 137 135 126 118 111 106 102 98 92 94 100 104 53 48 56 67 75 80 89 92 94 98 101 102 100 97 97 96 96 96 97 99 102 103 102 98 96 93 93 95 103 110 116 115 117 113 105 100 84 75 64 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 57 53 53 57 59 62 64 70 75 81 92 104 115 121 123 125 127 129 138 153 172 193 208 220 225 224 214 190 159 130 115 111 107 109 108 105 96 87 77 66 61 59 56 56 55 55 53 48 47 41 51 48 49 72 81 67 48 48 45 47 51 49 42 39 42 44 48 53 57 57 51 50 50 38 50 47 48 50 59 84 94 95 83 49 51 45 69 54 44 45 63 52 54 104 66 49 52 42 61 69 58 55 61 59 48 51 59 70 83 99 108 107 97 62 64 91 103 112 106 75 59 48 55 60 59 53 52 49 49 59 55 54 56 52 51 60 75 47 46 43 44 46 48 47 49 50 50 49 48 46 45 45 45 51 42 37 45 71 121 145 140 137 132 124 116 109 102 96 93 92 97 101 97 43 48 62 73 77 83 92 95 95 99 99 98 96 96 95 95 95 96 97 98 100 101 100 96 94 90 92 94 97 103 109 112 115 114 110 106 100 94 84 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 58 52 52 56 58 62 69 77 84 97 112 129 140 145 147 147 148 149 157 170 183 196 207 216 218 218 201 180 162 145 123 93 64 66 73 82 85 82 77 67 58 60 59 57 56 56 54 48 47 44 54 43 36 63 92 90 73 50 41 41 48 48 44 41 45 42 49 50 47 48 53 51 43 39 45 49 46 45 53 71 87 98 97 60 60 44 75 57 47 53 40 41 89 65 61 58 35 43 62 69 57 50 55 53 46 55 78 101 110 108 105 108 107 76 74 90 84 77 70 50 47 60 68 72 67 56 51 46 45 58 58 55 52 52 58 67 74 46 44 44 44 45 47 47 47 50 50 49 48 46 45 45 45 49 45 36 44 61 118 141 141 135 129 120 114 107 98 92 90 92 99 96 77 43 48 64 73 78 82 91 95 96 100 99 96 93 92 92 93 94 95 97 98 98 98 98 95 91 89 89 90 95 101 107 109 115 117 115 114 112 109 102 61 61 61 61 61 61 61 61 60 60 60 60 60 60 60 58 54 54 57 60 65 75 86 97 118 134 151 161 165 163 165 167 171 178 184 191 196 200 206 205 198 187 179 176 169 148 109 76 50 52 52 57 68 78 75 67 63 61 59 58 56 53 49 48 48 54 44 39 63 86 91 87 66 50 41 44 48 44 43 48 44 47 47 46 49 52 48 37 41 42 47 46 46 51 55 67 82 94 75 87 55 74 60 69 56 46 51 73 59 58 37 61 59 62 65 60 54 50 59 68 83 101 115 115 106 103 104 102 100 86 84 61 48 52 51 64 69 75 76 65 55 51 49 51 55 62 61 55 58 69 72 66 47 45 45 44 45 44 47 48 50 50 49 48 46 45 45 45 47 48 37 44 53 113 138 141 132 124 116 112 106 97 93 94 95 102 91 54 48 49 64 69 77 82 91 94 97 100 97 93 89 87 88 88 92 93 95 96 95 94 94 92 89 87 86 88 95 100 104 108 111 113 109 106 104 101 96 61 61 61 61 61 61 61 61 60 60 60 60 60 60 60 58 57 57 60 64 71 82 97 109 138 152 168 176 176 175 176 181 190 195 196 196 193 191 190 188 187 180 175 169 166 162 150 136 84 71 53 48 63 81 86 79 67 63 61 59 58 53 49 48 48 53 51 53 69 77 79 88 85 62 45 46 49 45 44 48 48 45 46 51 55 52 45 37 43 37 45 45 50 53 47 52 70 93 92 117 74 77 67 96 115 64 128 112 84 63 50 62 75 62 63 70 66 56 74 103 119 114 110 103 107 111 110 101 93 73 71 52 48 52 46 53 63 68 65 56 47 47 49 54 47 60 61 54 58 69 65 52 46 46 45 44 42 44 47 49 49 50 49 48 46 45 45 45 46 50 37 44 49 111 136 142 128 120 113 111 106 97 95 96 98 103 87 39 51 47 60 63 76 81 91 95 98 100 95 90 85 85 85 86 90 92 93 93 91 91 91 88 87 85 84 88 90 95 99 100 102 102 93 88 81 82 76 60 62 64 64 63 63 63 65 66 63 61 61 65 67 66 62 63 62 64 73 80 90 112 137 154 165 177 185 186 183 180 182 198 202 202 198 195 190 187 180 181 176 172 165 163 161 156 152 136 103 70 103 101 63 78 99 76 65 57 58 57 53 49 54 49 46 59 51 63 75 65 86 84 73 57 47 45 47 47 47 45 44 48 52 48 41 40 44 36 38 41 45 48 48 49 52 57 78 93 83 61 60 96 132 128 113 107 109 107 97 92 96 90 75 66 65 62 57 62 72 95 105 114 112 109 110 111 103 83 64 53 49 49 46 49 52 61 58 55 52 48 49 51 54 60 59 59 60 59 57 51 47 44 46 46 43 43 44 44 48 50 51 50 49 47 46 46 46 53 44 44 38 55 87 154 131 128 124 114 104 101 101 100 96 108 100 63 32 38 46 53 67 69 77 90 98 96 92 89 89 83 82 83 84 88 90 93 91 88 87 88 87 87 85 84 83 91 93 94 91 85 77 67 62 46 47 46 59 62 64 64 64 63 64 65 66 64 63 64 66 67 66 64 71 70 71 83 97 111 131 150 162 174 184 185 181 180 182 190 206 211 209 206 199 193 186 177 172 167 167 164 164 163 158 154 154 128 100 119 109 74 91 112 91 76 64 62 64 59 54 52 56 51 56 46 51 64 59 77 96 81 58 41 38 45 45 41 49 53 55 51 46 41 42 42 46 43 43 43 44 44 46 50 55 64 76 91 98 100 101 105 87 82 86 100 111 107 95 84 58 53 54 57 53 45 54 67 90 100 108 109 110 109 104 90 69 55 52 51 53 48 47 50 57 55 52 51 49 50 53 54 59 58 58 57 57 53 49 44 44 45 44 44 43 44 44 48 50 51 50 49 47 46 46 46 51 50 46 42 52 91 147 125 122 118 111 105 102 98 99 99 104 86 56 35 35 40 47 56 65 74 88 95 93 88 86 84 79 80 81 82 86 88 91 89 88 87 87 87 84 81 82 81 80 78 76 70 63 54 47 43 45 45 45 60 62 65 65 65 65 66 67 68 67 66 67 68 68 67 67 77 77 82 98 116 132 149 164 172 182 187 181 176 175 184 196 213 217 217 216 209 202 193 184 173 169 167 166 167 165 160 154 144 129 107 112 96 71 85 105 117 95 76 68 68 64 58 54 58 54 58 48 44 51 47 56 92 91 77 54 40 43 45 44 50 62 67 54 41 39 39 37 42 41 41 41 44 47 52 57 40 51 67 88 98 97 91 91 80 81 87 101 116 115 93 66 53 52 60 62 57 52 69 87 83 87 95 102 107 105 89 73 55 49 53 56 59 53 49 48 51 50 48 48 49 51 54 56 57 57 55 56 56 52 48 43 45 45 44 44 41 41 44 48 50 51 50 49 47 46 46 46 48 57 48 46 46 98 136 119 120 115 109 108 102 93 95 102 103 74 52 44 39 40 47 48 60 69 81 91 90 85 82 79 77 75 76 80 84 85 88 87 89 87 85 84 82 77 77 76 71 69 65 59 51 45 42 39 48 49 50 58 61 63 65 64 65 66 68 67 67 67 68 68 67 66 68 77 86 99 115 134 149 163 173 180 183 180 175 172 177 190 202 221 225 225 225 217 208 198 189 179 175 174 171 170 167 158 150 139 132 118 113 99 87 96 109 137 116 93 78 71 68 63 60 56 56 63 59 48 47 41 35 59 82 92 69 44 39 43 45 50 75 88 70 48 42 43 40 38 37 37 37 41 44 48 52 39 44 54 66 72 73 78 86 93 98 97 100 111 115 94 61 55 52 54 52 50 52 73 95 73 73 76 86 96 93 77 56 51 51 56 62 63 59 53 50 50 49 48 48 49 51 54 55 55 57 55 56 54 52 46 43 44 45 44 44 41 41 43 47 50 51 50 49 47 46 46 46 47 60 49 46 44 106 128 116 121 113 107 106 99 89 94 104 101 66 55 59 49 45 51 45 54 62 76 85 88 82 80 75 73 74 75 77 80 84 87 86 88 85 83 80 77 74 72 71 68 65 61 56 54 54 55 56 56 56 58 56 58 62 63 64 64 66 68 66 67 68 68 67 66 66 73 82 104 123 137 151 161 171 180 183 179 173 171 176 187 198 206 223 224 228 228 225 217 209 202 194 191 188 182 181 175 163 151 140 128 121 113 107 105 101 105 132 126 114 100 89 78 69 64 55 55 61 63 51 51 53 35 34 59 75 64 47 42 42 42 50 85 104 88 62 51 50 48 45 44 43 41 39 36 36 35 44 39 41 53 65 71 71 72 80 91 97 97 104 109 95 68 60 55 56 56 61 67 83 95 63 59 59 68 79 77 65 51 49 53 56 57 57 55 51 48 50 49 48 48 50 51 52 53 56 56 56 57 55 53 47 44 45 46 45 42 41 41 41 45 50 51 50 49 47 46 46 46 47 58 48 45 51 112 122 116 116 109 102 100 99 94 100 109 91 62 61 70 59 52 54 46 51 56 70 78 83 82 77 74 72 72 73 76 79 83 86 85 86 85 82 76 75 72 70 70 66 63 59 56 58 61 64 67 63 61 63 53 56 59 61 62 63 65 67 67 68 68 68 67 67 69 80 99 124 144 154 161 169 176 180 179 176 171 174 185 199 209 209 220 221 226 228 227 224 219 214 209 204 198 192 190 184 168 153 134 116 113 101 101 103 91 91 109 117 123 121 112 99 84 71 63 58 54 59 49 58 74 50 41 44 46 47 49 53 49 45 47 77 93 83 63 52 49 48 51 50 50 49 47 44 43 41 24 34 50 62 64 58 59 64 67 83 95 98 102 104 89 67 62 59 67 74 84 89 93 94 58 53 51 58 65 63 56 50 50 53 54 50 48 48 48 46 52 52 51 50 51 51 51 51 56 56 56 57 55 53 47 44 45 44 43 42 40 40 40 44 50 51 50 49 47 46 46 46 49 51 49 45 67 117 117 113 105 102 97 94 98 100 105 105 70 58 60 67 62 55 52 46 46 50 62 72 77 79 75 71 70 71 72 74 78 82 85 85 85 81 78 75 72 69 70 71 69 68 65 63 64 66 71 71 66 64 64 50 53 57 59 60 62 64 66 69 70 70 69 67 69 74 89 119 142 153 160 166 173 175 175 172 174 176 182 192 205 216 214 210 210 217 222 223 224 223 221 217 212 204 196 193 186 170 153 139 113 111 101 101 106 89 95 84 96 110 118 119 115 102 87 78 66 54 61 52 61 82 48 48 43 40 46 51 51 49 51 54 62 67 64 55 49 47 47 51 51 51 51 53 53 56 54 24 37 56 61 53 43 48 62 74 85 97 101 100 97 82 64 47 47 57 64 72 74 73 70 59 54 54 60 57 52 50 52 48 53 52 46 42 44 46 44 53 52 52 51 53 53 53 53 55 55 55 56 54 52 46 43 46 45 43 42 38 38 40 44 50 51 50 49 47 46 46 46 51 43 53 48 88 120 110 105 96 102 98 93 98 104 101 89 47 55 58 59 62 56 48 48 44 46 54 64 71 74 73 70 68 66 69 72 76 79 82 83 82 80 78 74 72 70 72 72 72 72 71 70 72 75 79 78 66 64 64 51 54 57 60 61 63 63 65 70 71 72 70 73 77 85 102 137 154 158 159 164 173 175 169 169 175 184 191 200 211 221 222 211 209 216 221 223 223 223 222 217 213 203 196 193 185 170 150 132 103 102 90 88 95 80 93 70 77 88 99 114 122 119 106 92 79 66 73 61 64 79 34 39 39 46 54 45 34 39 55 63 55 46 48 53 53 52 52 52 50 46 43 41 43 44 45 62 50 41 45 50 53 52 51 78 81 85 89 93 88 79 64 43 43 47 50 52 54 56 54 62 59 63 66 62 53 51 57 51 55 57 47 43 46 49 47 52 52 52 52 54 54 54 54 54 53 53 52 53 49 45 40 44 43 43 40 38 36 38 42 48 50 50 47 47 44 44 46 52 38 57 53 103 121 105 99 93 104 101 93 97 104 93 70 35 56 58 54 63 57 45 49 39 40 49 58 69 73 74 72 67 66 67 69 72 77 80 81 80 77 74 73 71 70 72 73 71 70 71 73 75 77 78 78 67 63 66 54 56 59 62 62 62 62 63 62 63 66 71 82 95 110 126 147 160 168 169 166 163 162 164 173 181 192 204 214 223 231 232 223 218 219 220 220 219 216 213 210 207 201 198 193 184 171 155 124 108 96 90 85 80 78 79 73 80 80 83 100 114 124 134 113 115 93 76 65 84 49 42 42 40 39 38 40 43 46 49 46 50 52 48 40 39 47 53 48 48 46 43 41 42 44 47 46 52 58 60 59 52 44 38 55 66 76 83 86 82 73 58 42 40 44 46 47 50 51 54 62 63 63 63 63 63 60 60 55 56 59 57 54 53 54 58 52 51 52 53 53 53 51 52 53 54 52 52 51 47 44 41 44 42 40 38 38 37 37 38 45 47 48 46 44 43 42 44 48 46 53 64 117 113 106 99 105 90 94 103 99 107 87 35 32 39 52 60 57 49 47 47 38 37 46 56 68 75 78 74 70 66 64 66 70 74 80 81 76 72 71 72 74 73 72 71 74 73 71 71 74 72 71 67 60 61 66 52 54 60 63 63 62 62 61 59 60 65 73 88 105 121 134 149 158 162 162 159 159 161 164 176 186 197 207 217 224 230 229 221 217 218 219 218 217 214 211 210 205 200 198 192 183 170 154 123 105 94 89 83 77 74 75 75 82 82 82 97 106 111 119 133 133 115 100 83 85 44 37 41 38 37 38 39 42 45 47 44 44 44 44 43 43 43 44 49 48 46 44 42 40 38 38 42 48 53 56 57 55 52 49 45 54 64 71 73 70 59 42 37 36 41 44 47 51 55 58 64 65 65 65 64 60 61 58 57 56 58 59 57 58 58 60 52 53 52 53 53 53 51 50 53 54 52 52 49 47 44 41 42 42 40 38 38 37 37 37 43 43 44 42 42 40 41 42 49 43 51 88 114 111 98 104 99 95 91 97 109 98 64 37 39 40 44 49 48 45 46 44 29 39 60 74 82 81 79 76 70 65 64 64 68 72 77 78 75 71 72 70 74 73 74 72 75 73 72 70 71 71 69 65 62 63 66 46 49 55 58 59 60 61 60 60 60 66 77 93 108 123 137 148 153 152 149 148 152 160 166 181 191 202 210 216 220 224 221 215 211 211 211 212 211 208 206 205 199 194 191 186 175 162 145 119 102 91 86 82 75 72 72 81 89 89 87 98 105 107 113 132 134 129 121 104 88 43 38 41 39 38 37 38 40 43 44 45 41 39 42 47 47 40 34 46 45 44 44 43 41 38 36 41 44 46 48 51 54 55 56 49 54 59 60 62 61 54 43 37 38 44 47 51 53 57 60 59 61 61 59 58 55 55 54 55 53 55 59 60 62 60 59 52 53 52 53 53 53 51 50 54 55 53 53 49 47 44 40 41 41 39 37 37 36 36 37 39 41 42 40 40 40 41 43 50 42 54 112 108 104 91 108 92 100 90 98 113 82 41 42 43 39 38 41 42 40 41 38 29 52 84 100 96 83 76 71 67 63 64 64 69 74 77 78 77 72 72 71 75 75 76 74 75 74 70 71 72 71 70 66 68 69 72 42 45 52 55 58 59 60 60 60 61 68 79 98 114 128 140 149 148 143 139 142 152 162 173 187 195 206 213 217 219 220 217 212 209 209 210 211 210 209 206 202 196 191 187 180 169 154 137 112 96 89 84 81 73 70 69 76 89 91 92 103 107 108 115 118 115 126 129 123 97 50 41 40 39 38 37 38 39 41 42 46 42 39 41 46 46 40 33 41 41 40 41 43 43 42 41 45 47 48 47 49 49 51 51 60 59 57 51 52 55 56 49 39 41 46 49 53 54 55 58 57 59 59 60 60 58 58 58 54 54 55 59 62 63 59 56 52 53 52 53 53 53 51 52 55 55 54 53 50 47 44 42 42 40 40 38 38 36 36 36 37 40 39 40 40 40 41 43 49 46 74 119 104 94 95 102 91 97 99 108 101 61 33 46 39 39 44 46 43 36 36 36 48 77 114 124 109 87 74 69 67 64 65 67 74 76 79 79 78 73 73 72 76 76 78 77 76 74 71 72 72 73 71 68 72 73 76 39 43 49 54 57 58 61 61 61 62 68 81 101 117 129 138 144 143 136 134 141 154 170 180 193 201 208 214 217 216 217 214 209 206 209 210 210 211 211 207 205 199 192 185 175 162 146 129 104 90 84 82 79 72 68 66 68 82 87 89 100 106 108 113 110 104 118 123 126 96 50 40 40 39 39 39 39 39 40 41 47 46 44 43 43 42 41 40 43 43 44 43 42 42 44 45 48 48 50 47 48 44 45 42 55 53 52 46 48 49 50 44 37 41 48 53 56 57 59 60 63 63 64 64 65 63 63 64 56 55 55 58 61 61 56 52 52 53 54 55 53 53 53 52 56 56 54 54 50 47 44 42 42 40 40 38 38 38 38 38 37 38 39 40 40 42 44 46 47 56 100 111 103 89 104 95 95 88 108 113 79 46 45 48 41 43 47 43 34 30 40 53 83 108 139 141 119 91 75 70 68 66 68 71 78 80 83 83 78 73 73 71 76 76 79 78 74 73 72 73 73 72 71 68 73 75 78 37 42 48 51 55 58 59 60 60 61 68 82 102 117 127 134 137 138 133 135 147 163 179 190 202 209 214 216 217 215 213 212 205 204 205 207 210 210 212 208 210 201 192 182 169 155 138 120 97 86 81 80 77 73 69 67 69 82 90 90 99 103 106 111 114 104 116 106 109 81 43 35 39 40 40 40 40 41 42 42 43 45 46 44 41 39 41 44 46 50 52 49 42 38 41 44 44 44 47 45 47 43 43 40 44 47 52 51 54 51 46 35 37 42 50 57 59 60 63 63 64 64 64 61 60 57 57 55 59 58 58 58 59 58 54 51 52 53 54 55 53 53 53 52 57 57 55 54 52 47 45 42 43 41 41 39 39 37 39 37 36 37 38 39 40 42 46 48 49 72 113 98 100 90 108 92 96 87 106 102 57 43 58 51 48 48 45 35 24 29 58 84 119 135 151 147 125 98 81 70 66 66 70 74 79 82 85 84 78 75 72 70 75 76 78 79 75 74 73 73 73 72 71 67 74 77 80 35 39 45 48 52 53 56 56 60 60 67 81 101 116 124 130 136 138 138 144 160 179 196 205 216 219 222 221 216 214 212 209 203 202 205 207 211 212 214 211 210 200 188 176 163 146 127 109 91 81 78 79 77 73 71 69 70 84 91 90 97 100 101 108 115 106 111 80 80 56 39 41 39 38 39 40 42 42 42 42 39 41 44 44 42 40 40 41 42 52 61 58 47 38 39 44 41 41 43 41 43 41 43 41 43 46 52 51 54 53 49 41 46 52 57 62 62 62 64 63 60 60 57 55 53 50 50 49 57 58 59 57 55 53 54 54 54 55 54 55 55 55 55 54 58 58 58 55 52 48 45 42 42 42 42 40 40 38 40 38 34 34 36 37 40 42 45 49 54 91 111 97 95 96 102 98 95 99 96 72 51 52 61 55 54 49 43 34 30 46 80 113 138 142 146 141 125 101 81 69 64 64 68 74 80 83 85 83 78 74 71 69 74 75 78 78 75 73 73 72 74 73 72 69 76 78 81 33 37 43 46 49 52 53 54 61 60 66 81 100 112 121 126 137 140 145 154 173 192 209 220 225 228 227 225 219 213 210 206 204 201 204 206 211 214 215 212 208 196 183 171 155 136 117 99 85 76 75 77 77 73 70 70 63 77 83 82 90 92 96 101 109 102 104 59 55 37 38 50 37 38 39 41 43 44 44 44 35 37 41 44 45 42 39 36 35 50 65 64 52 41 41 47 43 42 40 39 39 40 42 43 46 47 45 42 44 49 50 49 56 61 65 66 65 60 59 58 59 57 56 56 55 54 54 55 54 58 59 57 53 52 54 58 54 55 54 55 55 55 55 54 58 58 58 57 53 50 47 43 43 42 43 42 42 40 42 40 34 34 36 37 40 43 46 49 62 102 103 100 91 103 92 104 91 111 85 45 51 63 58 57 54 49 41 38 42 63 97 127 140 139 139 132 122 101 80 64 63 62 67 74 79 82 84 82 78 73 70 68 73 75 78 78 75 74 71 70 72 71 71 68 76 79 82 33 34 38 40 45 49 51 52 53 56 64 75 89 101 115 125 130 139 150 163 182 200 216 226 238 240 236 228 220 214 211 206 198 197 201 206 208 211 210 207 197 188 175 160 143 122 103 88 81 77 76 75 73 72 71 70 59 65 79 89 88 84 91 96 101 80 60 48 47 49 47 43 40 38 40 41 41 42 44 44 37 41 44 47 47 45 42 39 41 34 74 63 35 49 47 40 43 41 40 39 38 38 38 38 41 46 50 48 44 45 52 60 69 63 60 63 64 59 58 61 62 59 56 56 57 57 56 55 61 60 58 55 53 52 53 53 55 56 57 58 59 60 60 60 59 58 58 58 57 53 48 44 43 41 43 41 41 40 42 41 35 39 35 30 37 51 54 44 101 103 98 92 88 89 99 105 111 81 51 44 54 60 56 49 51 46 38 40 61 95 119 130 140 130 128 126 110 82 66 63 62 65 68 73 76 78 79 78 73 68 66 66 73 75 76 74 77 78 75 72 69 69 73 74 81 82 83 34 35 39 40 44 48 49 50 52 55 61 71 84 97 107 117 127 137 148 164 186 206 223 233 239 240 235 226 216 210 207 204 199 199 201 204 207 206 204 200 188 177 161 147 130 112 96 83 79 75 75 75 73 72 71 69 71 67 70 76 80 83 88 95 83 69 57 48 47 48 44 40 38 38 40 41 41 42 44 44 39 41 43 45 47 45 42 40 41 46 69 60 40 45 44 38 44 43 42 42 41 41 41 40 42 44 44 41 39 40 46 53 71 62 57 58 61 59 60 63 58 54 50 56 66 70 67 62 55 56 55 54 53 53 56 56 55 56 57 58 59 60 60 59 58 57 56 56 56 53 47 43 42 42 42 42 42 41 43 41 36 41 37 31 39 47 50 61 103 100 91 87 91 96 100 101 76 62 50 47 48 50 58 61 46 47 53 69 91 112 125 129 125 128 131 120 94 69 61 66 64 64 67 72 75 76 77 77 71 67 66 68 74 76 78 77 79 77 75 71 70 69 73 76 81 82 83 34 35 38 41 45 47 47 45 48 49 55 65 76 87 97 105 116 127 140 160 183 206 223 234 239 237 231 223 211 203 200 195 196 196 198 199 201 197 191 183 175 161 145 129 114 99 88 81 76 75 74 74 73 72 71 69 73 63 61 68 79 83 84 83 60 55 52 49 47 46 43 40 38 36 38 39 41 42 44 44 40 40 41 43 45 45 43 40 39 61 58 53 47 40 43 38 41 41 41 42 41 41 40 39 45 44 42 42 43 47 51 56 61 57 55 56 60 60 64 67 59 65 75 85 85 76 62 52 50 50 50 50 53 54 56 56 55 56 58 59 60 60 60 59 56 55 55 55 55 52 47 44 43 43 43 43 43 41 43 41 38 42 36 36 43 39 48 84 105 96 85 86 93 102 100 97 57 54 50 48 44 41 43 47 35 44 66 95 116 123 122 123 120 133 133 109 75 53 56 66 63 64 68 71 73 74 76 75 68 67 68 70 75 78 79 78 79 79 77 74 72 72 75 77 86 87 88 38 38 41 43 45 46 46 43 45 45 51 57 68 78 87 93 100 111 126 148 172 195 214 227 234 235 226 217 204 195 191 189 189 190 193 193 189 183 174 166 157 143 127 112 99 90 83 78 75 74 74 74 75 74 73 70 65 59 61 70 80 80 73 65 47 47 49 48 46 43 41 41 36 36 38 39 41 42 44 45 41 39 38 40 43 45 43 41 39 73 49 44 52 37 43 43 40 39 40 41 41 41 40 39 42 41 41 44 51 55 57 58 53 57 59 59 58 57 61 64 86 98 106 100 81 60 51 47 49 49 49 50 53 54 55 56 56 57 59 60 60 60 60 60 58 56 55 55 55 52 47 44 42 42 41 41 43 41 42 40 39 44 38 39 45 34 52 103 100 92 85 88 95 100 95 90 65 57 50 49 48 42 35 30 29 42 72 102 116 116 115 120 133 138 125 91 58 48 55 63 64 64 67 70 72 71 72 74 66 66 69 72 77 79 81 82 80 78 76 74 71 71 75 79 88 90 90 40 42 44 46 48 48 47 43 45 45 46 52 62 70 78 82 83 93 108 129 155 178 199 211 225 226 220 211 196 186 181 179 181 182 183 181 176 166 155 146 135 124 108 95 88 83 79 76 76 76 76 75 76 75 75 71 65 61 65 70 72 64 56 51 45 47 47 46 44 41 40 40 36 36 38 39 41 42 44 45 43 41 37 39 43 46 46 44 48 84 53 43 53 36 40 43 41 42 43 44 45 45 45 45 42 41 43 49 55 58 55 52 53 60 63 57 53 58 70 79 119 110 91 67 51 46 51 58 51 49 50 50 50 51 54 54 56 57 59 60 62 62 61 59 59 57 58 58 58 55 50 47 42 42 42 41 42 40 41 41 40 42 39 42 45 41 67 114 94 91 89 91 94 93 87 85 63 57 52 49 45 39 35 35 46 60 84 102 109 110 114 125 136 128 100 67 48 49 57 61 66 66 67 69 70 70 72 71 66 67 72 74 78 80 82 83 78 79 77 75 73 73 75 79 89 88 88 46 46 49 51 53 52 50 47 47 45 46 51 58 65 73 72 74 78 92 114 137 161 183 196 209 211 207 199 186 175 166 165 169 171 170 166 161 149 137 129 115 104 94 86 82 80 78 78 77 77 77 77 77 77 77 73 79 71 64 61 55 46 43 43 49 47 46 45 41 39 38 40 36 36 38 39 41 42 44 45 44 40 35 35 41 46 47 45 55 84 65 48 51 38 32 41 39 39 39 40 41 42 44 45 51 50 51 55 58 57 53 49 54 57 58 58 64 80 99 112 101 80 54 43 48 55 58 55 53 50 52 51 51 51 53 54 57 57 59 60 62 61 61 58 60 57 58 58 58 55 50 47 41 41 41 40 40 39 38 40 41 40 41 42 42 56 88 112 92 93 92 91 90 86 82 82 55 57 53 43 27 23 37 54 84 92 101 100 102 107 116 124 109 92 67 48 44 49 59 61 68 66 68 70 70 70 70 71 67 70 75 77 79 79 81 82 81 79 80 76 74 74 78 81 94 93 92 48 51 54 57 59 59 54 51 48 45 45 50 57 63 69 68 67 68 79 97 120 144 166 181 191 195 193 186 174 161 151 148 154 158 154 150 142 131 120 110 97 89 83 80 79 80 78 78 78 78 78 79 79 79 78 77 83 69 56 50 45 40 41 44 48 47 45 44 42 40 37 37 34 34 36 39 41 42 44 45 45 40 33 33 40 46 47 45 51 73 77 57 53 46 29 40 44 43 42 41 43 46 49 51 61 60 59 59 59 58 56 53 53 53 52 58 74 91 99 95 57 50 46 49 61 64 59 50 53 51 52 52 52 52 55 55 57 58 59 60 62 61 61 58 58 57 57 57 57 54 49 46 41 41 40 39 40 39 39 38 43 37 43 41 39 75 109 102 94 92 87 83 83 82 81 85 56 55 47 36 27 35 61 86 111 113 104 89 89 99 100 95 67 56 45 42 44 48 55 62 70 67 69 70 71 70 71 71 70 73 78 79 79 78 79 81 84 83 83 80 78 78 82 85 96 95 93 51 54 57 58 59 59 57 53 51 50 50 52 59 62 68 65 62 62 72 84 104 126 147 160 167 171 173 166 157 143 133 130 133 134 134 128 120 110 101 94 84 80 77 76 77 79 79 78 79 79 78 79 78 78 76 76 72 60 47 45 47 45 45 45 47 45 44 44 44 41 39 36 36 36 38 39 41 42 44 45 47 39 33 32 39 46 47 46 42 59 84 64 55 55 31 44 55 53 51 50 51 55 60 63 59 57 55 52 52 53 55 57 57 54 53 58 72 76 57 35 38 45 55 59 57 56 59 61 54 54 54 54 53 54 57 58 56 56 59 59 60 59 58 58 58 56 56 56 56 53 49 45 40 42 41 40 39 38 40 39 45 34 46 42 38 88 124 95 100 91 82 79 80 85 85 86 56 42 28 27 43 68 102 126 118 115 97 77 81 94 86 64 41 37 40 50 50 43 50 62 72 70 71 71 71 71 71 71 74 77 80 80 77 75 74 76 84 85 83 81 79 82 85 90 91 91 90 59 59 61 61 61 61 61 59 60 61 62 63 64 68 69 69 72 72 76 82 91 105 116 123 132 136 139 137 132 123 114 106 105 101 98 94 89 85 82 79 79 75 75 73 71 72 70 72 79 84 74 66 74 80 76 76 61 52 44 40 45 48 49 45 47 46 46 46 46 43 41 41 41 41 41 41 43 43 43 44 43 45 40 32 33 42 47 46 43 45 48 56 62 57 44 35 70 64 60 59 63 64 62 58 52 55 58 58 55 52 51 55 62 57 47 40 38 41 47 51 48 51 55 58 59 57 57 58 58 58 58 57 55 55 53 53 48 49 53 54 57 58 58 59 62 59 57 58 61 59 54 49 41 43 42 40 38 37 38 38 48 45 35 38 74 111 111 90 78 79 77 79 79 82 84 83 47 22 15 41 80 111 121 120 115 97 76 67 66 66 57 48 44 50 49 48 51 48 50 62 66 72 75 75 71 73 75 74 80 83 83 80 77 74 74 73 76 77 78 80 82 85 89 94 101 92 82 63 63 63 63 63 63 63 63 64 65 65 67 68 69 70 71 74 73 77 79 85 93 100 104 108 112 114 114 109 103 95 89 86 82 79 75 73 72 72 71 75 73 73 72 71 70 71 73 77 84 77 70 77 79 74 69 57 48 44 41 44 48 50 48 46 46 46 46 45 45 44 43 43 43 43 43 43 43 43 44 46 46 40 32 32 41 46 46 45 42 41 48 58 66 67 67 63 59 53 52 55 56 54 51 55 56 57 56 55 55 57 58 55 52 44 39 38 41 45 49 52 54 55 56 55 55 54 58 58 60 58 57 55 53 53 53 50 51 53 54 56 56 57 57 59 59 61 61 59 54 50 45 43 42 43 41 40 38 37 37 39 41 42 53 80 101 97 77 76 77 80 81 83 83 86 81 47 42 51 79 110 124 112 98 72 66 59 55 55 53 49 45 47 52 52 50 51 48 51 62 69 72 77 76 72 72 76 75 81 84 83 81 76 72 72 72 74 74 76 81 84 88 88 94 89 83 73 69 69 69 69 69 69 69 69 67 68 69 70 71 72 73 71 74 72 74 76 81 85 89 91 93 94 95 95 92 89 83 81 77 75 72 67 66 67 67 66 71 69 70 70 72 72 74 76 77 85 80 78 85 81 69 64 55 49 47 43 43 44 47 47 46 45 45 46 45 44 44 43 43 43 43 43 43 43 43 44 48 46 40 32 31 38 44 46 48 43 40 42 48 57 63 68 54 51 48 50 55 60 60 60 60 58 55 54 56 57 58 58 45 43 39 37 37 40 43 46 53 54 56 55 52 52 53 57 57 57 57 55 55 53 53 51 51 52 54 54 56 57 57 56 58 60 62 61 57 49 43 40 44 43 43 41 40 38 37 38 35 37 44 61 79 84 79 70 72 76 80 83 87 87 86 80 70 86 110 128 135 123 91 60 36 43 47 50 48 46 48 47 46 51 52 49 51 47 51 61 71 74 79 78 74 74 78 78 84 85 83 80 75 73 72 73 76 76 78 83 88 91 87 88 74 69 62 73 73 73 73 73 73 73 73 71 72 72 73 74 75 76 74 72 71 73 76 79 80 82 83 87 87 87 85 84 81 80 78 77 74 70 66 64 62 64 63 65 65 67 68 71 74 76 77 81 85 79 81 92 88 68 58 56 54 48 45 41 42 46 47 45 44 45 45 45 44 44 43 43 43 43 43 43 43 43 44 49 46 39 32 29 34 41 46 45 43 42 42 43 46 47 50 53 52 50 52 56 60 63 62 60 56 54 53 56 55 53 49 40 39 38 38 38 40 41 42 49 52 55 56 53 53 54 55 56 56 56 54 54 52 52 52 50 50 52 55 56 56 55 57 58 60 61 59 50 43 39 40 42 41 41 40 38 36 35 37 42 35 39 58 72 71 71 76 74 76 79 82 86 86 87 84 95 120 142 136 116 89 56 27 28 37 46 51 51 50 52 53 45 50 51 49 50 47 50 60 72 75 80 79 76 76 80 79 84 85 82 80 74 72 74 75 77 78 83 88 93 91 83 77 69 65 60 75 75 75 75 75 75 75 75 75 75 76 76 77 78 78 76 71 72 73 76 78 79 80 79 84 81 81 78 78 77 77 78 78 76 71 66 62 58 58 58 60 62 64 64 67 70 72 75 81 81 74 82 99 96 77 67 61 57 52 48 43 41 43 43 43 41 42 43 43 42 42 41 41 41 41 41 41 41 41 44 49 48 40 34 30 32 38 45 42 44 44 45 46 48 48 52 60 60 57 56 56 56 56 53 60 57 58 58 60 54 49 40 40 40 40 40 40 40 38 38 43 47 51 55 56 56 54 55 54 54 54 52 52 51 51 51 50 50 53 55 58 60 59 61 60 60 58 53 45 40 40 42 41 41 42 40 38 37 36 37 45 34 37 58 73 70 71 78 76 76 78 78 82 85 87 87 102 122 129 106 72 52 38 25 38 42 46 51 52 52 51 48 45 49 50 48 49 46 49 60 73 76 81 80 77 78 82 81 83 83 81 77 75 73 76 79 81 83 89 94 95 86 74 67 73 69 65 77 77 77 77 77 77 77 77 77 78 78 78 79 79 80 78 74 73 76 77 79 79 80 80 80 78 77 75 75 73 74 75 77 74 72 66 61 57 55 54 56 57 59 61 63 65 69 69 76 73 69 78 97 97 85 82 67 62 55 48 46 43 42 40 42 40 41 42 42 42 42 41 41 41 41 41 41 41 41 44 49 47 41 36 31 29 34 42 46 47 44 42 40 43 48 56 58 60 61 62 62 62 61 60 56 58 62 62 62 54 47 39 43 42 42 42 41 40 39 37 37 41 48 51 53 55 56 55 55 53 53 53 52 52 52 52 53 55 58 59 62 63 61 63 58 56 51 45 40 39 40 42 40 41 40 38 39 37 36 37 41 33 42 65 78 71 69 74 78 77 77 77 81 84 87 87 88 94 90 66 44 37 42 46 50 49 50 54 57 54 48 43 43 49 49 47 48 45 48 59 73 76 81 81 78 78 83 82 81 80 79 75 74 76 79 82 88 90 93 93 87 79 69 66 77 71 66 79 79 79 79 79 79 79 79 79 79 79 80 80 80 80 79 80 79 79 79 79 79 78 78 78 75 75 73 73 71 71 71 76 75 73 68 63 58 56 54 54 54 57 58 59 60 63 63 67 70 67 68 77 76 76 89 74 66 57 50 49 45 42 36 41 40 41 42 42 42 42 42 41 41 41 41 41 41 41 44 48 47 44 41 32 27 32 41 45 47 47 43 37 39 46 56 57 62 65 67 69 67 65 63 50 54 60 59 57 49 46 41 45 43 43 44 43 40 39 39 37 39 43 46 48 52 57 59 55 53 53 52 52 52 52 52 55 57 60 59 61 60 59 57 51 47 43 40 39 41 41 40 41 42 41 39 40 38 37 36 35 37 50 69 75 67 68 76 77 78 81 81 84 85 86 85 69 61 52 44 42 44 51 54 54 56 59 61 60 54 47 42 42 48 49 47 48 44 48 58 72 76 81 81 78 79 83 80 79 78 77 76 75 78 84 88 96 97 93 85 76 71 69 73 79 73 66 80 80 80 80 80 80 80 80 79 80 80 80 80 80 81 81 85 84 82 81 80 79 77 77 78 76 76 76 73 73 71 73 75 76 75 72 68 63 60 58 52 52 55 55 57 58 58 58 62 68 65 60 58 53 62 83 79 69 58 53 51 47 41 34 41 39 40 42 42 42 42 42 41 41 41 41 41 41 41 44 48 46 44 43 35 26 30 39 35 41 48 49 46 47 53 61 66 68 69 67 63 55 48 46 44 49 54 54 50 46 44 43 45 43 44 45 45 43 42 42 42 40 40 41 43 48 57 62 55 53 53 52 53 52 53 53 57 58 59 57 58 54 53 51 45 40 39 39 41 42 41 38 42 43 42 41 39 37 38 38 35 42 56 67 66 61 69 83 76 78 82 84 86 86 84 81 59 40 30 38 50 52 50 46 49 54 60 63 59 49 42 38 40 48 48 46 48 44 47 58 72 75 81 80 78 79 83 80 77 76 76 75 76 79 86 92 101 100 92 80 69 65 72 80 81 74 67 81 81 81 81 81 81 81 81 81 81 81 81 81 81 81 83 87 87 87 87 86 86 84 82 82 80 80 79 79 79 77 77 74 74 73 73 73 67 61 58 55 55 54 53 55 56 56 55 61 61 52 54 59 47 57 93 96 83 69 64 61 53 48 45 37 38 39 40 40 41 44 46 45 45 45 45 44 44 44 45 40 46 47 41 34 31 30 34 45 43 41 42 47 55 63 69 69 72 67 54 49 48 46 43 47 46 46 45 44 43 43 43 43 42 43 44 45 44 45 45 42 40 40 41 43 45 51 52 54 54 56 55 57 54 54 53 61 59 56 50 47 45 42 43 45 42 43 42 41 41 43 43 39 40 40 40 40 39 38 36 32 52 67 65 64 69 74 71 82 82 77 76 85 83 84 90 53 42 40 44 47 43 45 49 49 67 80 74 58 46 39 37 41 49 50 50 49 42 46 60 74 77 81 79 76 77 83 81 76 75 78 78 80 85 92 98 102 94 79 71 69 74 80 84 83 76 69 81 81 81 81 81 81 81 81 81 81 81 81 81 81 81 83 89 91 91 89 89 87 86 84 84 82 82 82 82 82 80 80 77 75 74 74 74 69 63 58 58 55 54 53 55 55 55 54 56 53 49 53 48 39 58 98 88 90 84 71 62 61 57 48 43 44 46 45 45 43 43 42 44 43 44 43 44 43 44 46 53 58 55 47 35 29 29 29 35 40 47 56 63 68 70 72 65 68 62 51 47 48 49 48 49 50 48 47 47 46 46 44 42 42 43 44 43 43 44 44 46 45 44 44 43 45 48 47 50 50 53 55 57 57 57 56 54 52 51 48 47 46 44 44 46 44 44 43 42 42 42 44 42 41 41 41 40 39 39 36 39 55 67 63 62 68 73 71 74 79 79 80 88 82 79 84 53 57 66 66 54 41 42 52 71 81 84 70 55 42 35 34 40 48 49 49 50 43 46 60 75 77 81 80 76 78 83 81 79 76 76 77 81 87 95 99 97 85 74 68 74 78 78 79 83 76 69 81 81 81 81 81 81 81 81 81 81 81 81 81 81 81 85 91 94 94 93 89 87 86 84 84 84 84 84 84 84 86 84 79 76 78 78 76 72 67 62 60 57 56 54 54 54 54 53 53 45 49 51 37 39 67 96 74 90 98 83 72 72 68 54 43 42 44 42 44 41 41 39 43 41 43 41 43 42 44 46 45 47 45 40 34 30 32 36 50 55 63 70 71 70 66 64 65 65 58 49 47 49 52 51 51 52 50 48 48 47 46 46 42 43 41 42 43 43 42 42 46 45 43 42 43 45 46 47 46 48 48 51 51 52 51 52 44 44 45 43 43 44 46 47 47 44 45 44 43 43 43 44 43 42 44 42 41 40 41 38 49 60 66 61 60 66 72 73 73 79 81 83 90 85 84 91 88 94 97 82 52 35 46 64 89 87 77 62 48 40 35 36 39 46 47 49 51 44 47 60 75 78 82 80 77 78 83 80 81 76 76 79 86 92 96 96 85 77 69 69 77 81 78 72 82 76 69 81 81 81 81 81 81 81 81 82 82 82 82 82 82 82 86 92 95 94 92 90 88 87 85 85 85 85 85 87 87 88 87 82 80 79 79 78 75 71 69 62 60 58 56 55 54 53 51 52 45 51 48 37 57 79 78 53 76 95 94 85 79 72 65 49 45 43 43 45 47 48 48 52 52 52 52 53 53 53 55 59 62 62 61 60 62 64 68 72 71 71 69 66 63 61 61 66 63 55 48 46 48 51 54 52 51 51 49 48 46 46 45 44 44 43 44 44 45 43 43 43 41 41 42 44 47 47 48 47 46 47 46 46 44 43 42 41 40 41 42 43 45 47 48 46 45 44 42 42 42 42 43 44 44 44 42 42 40 41 41 56 61 63 58 60 68 75 76 76 80 79 79 88 88 94 106 112 102 87 63 43 42 60 81 85 75 61 49 43 41 40 39 40 45 46 49 51 45 47 59 73 77 82 81 78 79 83 80 79 77 77 82 93 97 94 91 74 69 68 72 79 80 76 72 81 75 68 81 81 81 81 81 81 81 81 82 82 82 82 82 82 82 84 90 92 90 88 87 85 83 83 83 83 83 85 87 87 88 87 85 82 81 81 81 79 77 74 66 62 60 56 54 53 51 49 49 47 49 43 45 76 83 52 43 57 85 103 101 85 78 80 65 60 54 52 54 58 61 62 65 65 66 66 67 67 68 69 82 84 82 79 76 76 76 78 72 70 66 64 64 64 66 68 70 64 55 50 50 49 51 52 51 51 51 48 49 48 47 47 46 46 46 46 45 45 45 45 42 42 43 42 43 45 46 47 47 45 45 44 44 43 42 42 41 41 40 41 42 44 45 45 45 44 43 42 41 43 43 43 44 45 45 43 42 41 43 43 59 60 61 59 63 70 77 79 77 81 80 81 89 87 91 100 81 64 48 40 48 63 78 86 69 58 46 41 44 45 45 44 43 45 45 48 52 45 46 56 70 74 80 80 78 79 84 81 77 76 80 89 97 96 88 81 65 69 73 77 77 75 74 76 80 73 66 81 81 81 81 81 81 81 81 83 83 83 83 83 83 83 85 89 89 89 86 86 82 82 81 81 81 82 84 86 88 88 88 85 82 81 82 82 81 80 77 71 67 63 59 57 54 51 47 46 45 45 45 58 82 74 43 57 59 82 110 118 104 94 95 81 70 64 58 61 62 65 63 67 66 68 67 70 68 71 71 72 73 72 71 68 68 66 66 65 66 65 66 66 64 62 63 71 63 54 51 51 48 48 51 50 49 49 49 48 49 49 49 49 49 51 49 49 47 49 47 47 45 45 44 44 42 43 41 46 46 45 47 46 46 47 46 41 40 42 43 44 43 44 43 44 43 41 40 41 41 41 41 42 44 44 42 41 41 45 48 64 60 60 61 67 72 77 78 73 79 82 85 92 80 70 71 45 41 40 50 69 81 75 64 55 45 38 42 49 52 48 45 44 45 45 48 52 45 44 53 66 70 78 79 77 79 84 81 76 79 85 92 96 91 81 72 66 71 77 77 74 71 71 76 78 72 65 81 81 81 81 81 81 81 81 83 83 83 83 83 83 83 83 88 86 86 82 82 79 79 77 77 77 79 81 82 84 86 86 85 83 83 84 85 84 81 79 75 71 65 60 57 54 51 46 43 42 43 57 76 72 60 57 69 64 73 96 112 112 101 92 78 68 63 59 63 62 62 57 63 61 64 63 65 64 67 67 68 68 70 72 72 73 73 72 67 68 69 69 65 62 58 58 70 60 51 50 52 49 48 49 47 48 49 48 49 51 52 52 51 51 52 51 51 49 51 48 48 46 46 45 44 41 42 42 46 46 45 46 46 46 46 45 41 41 42 42 43 42 43 42 42 44 42 41 40 40 42 42 41 44 45 43 41 42 47 51 66 63 61 64 70 73 74 73 73 78 79 86 90 74 55 49 48 57 67 74 79 76 62 47 45 36 33 42 53 57 54 51 46 46 45 49 53 45 42 50 61 66 75 77 77 79 85 82 80 81 87 90 89 82 74 69 72 73 75 75 74 72 70 73 77 71 64 81 81 81 81 81 81 81 81 83 83 83 83 83 83 83 83 86 84 84 82 81 79 79 77 77 79 79 81 82 84 84 84 84 83 83 83 85 84 82 80 77 73 67 62 56 53 49 46 42 40 44 71 88 65 51 78 69 62 60 71 91 102 91 72 71 66 63 62 66 66 62 55 61 61 64 65 66 67 69 70 67 68 69 69 71 70 67 63 68 67 65 62 62 63 64 67 66 56 48 52 54 51 47 50 47 48 48 49 51 51 52 53 50 50 50 50 48 48 48 48 44 45 46 46 45 45 44 44 47 47 46 44 42 42 42 40 42 42 43 45 45 44 44 43 44 45 44 42 42 41 41 44 40 43 45 43 41 42 48 54 71 66 64 68 73 74 71 71 78 78 75 77 83 68 50 44 57 73 84 81 69 61 56 52 38 30 29 41 53 56 55 53 50 48 46 49 53 45 41 49 59 67 77 78 78 81 83 82 85 88 91 90 85 78 72 68 78 75 72 73 74 75 69 69 77 71 64 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 81 81 81 81 82 82 82 82 84 84 84 84 80 81 87 87 86 84 83 84 83 81 77 67 61 56 50 41 44 36 51 87 109 101 87 79 69 69 71 72 75 75 77 77 69 69 68 69 66 61 60 60 56 57 60 63 64 67 68 67 70 68 68 69 69 68 68 68 67 64 63 62 62 61 61 63 63 58 51 48 48 50 51 50 50 51 50 51 51 51 49 50 48 46 46 45 47 46 46 46 45 45 45 45 47 47 47 47 48 48 48 46 46 46 46 44 44 44 44 45 45 44 44 44 46 46 45 45 44 43 42 43 39 44 41 40 43 41 45 61 72 74 71 72 72 74 75 76 77 75 78 81 72 58 55 59 89 81 72 67 64 59 53 49 38 35 35 39 48 53 54 51 45 45 46 47 47 46 44 40 59 70 82 85 81 83 83 85 90 101 101 89 75 71 72 71 73 75 77 78 77 75 72 71 76 68 59 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 84 83 82 85 86 90 90 88 86 87 89 89 84 79 72 61 52 48 37 41 61 71 66 61 63 86 84 81 79 77 77 74 74 84 71 62 58 64 65 59 52 57 57 61 62 66 68 69 69 70 68 68 69 67 68 68 68 65 64 63 62 61 61 61 63 63 60 54 48 48 47 48 48 50 51 52 51 51 49 49 48 46 45 44 44 45 44 44 44 45 45 45 45 47 47 47 47 48 48 48 48 48 48 48 48 48 48 48 47 47 47 46 46 47 47 46 45 44 44 43 43 38 44 41 40 43 40 44 62 73 76 74 74 76 77 78 79 71 72 75 80 80 76 81 84 77 71 63 58 58 58 55 52 45 41 39 41 47 50 50 48 48 48 49 48 47 46 44 42 57 68 82 82 83 82 83 86 94 101 97 84 73 70 70 69 73 74 76 78 77 75 73 73 76 66 57 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 84 84 80 80 82 89 92 89 86 87 96 105 106 105 98 86 74 60 46 40 46 47 40 42 51 48 49 53 58 66 74 80 82 89 78 69 63 66 67 64 58 59 60 62 64 67 70 70 70 68 68 68 68 69 69 67 67 66 66 63 62 61 61 61 62 64 63 60 53 49 45 44 45 50 49 50 49 49 49 49 48 46 44 44 44 44 44 46 46 45 45 47 47 47 47 47 47 48 48 48 48 48 47 47 47 49 49 48 48 47 47 47 47 46 46 45 45 44 43 42 42 38 43 41 39 42 39 43 61 73 73 74 76 77 78 80 80 79 80 79 78 81 85 89 85 66 58 54 51 54 57 56 56 48 45 42 42 46 48 47 46 50 50 50 48 47 48 45 41 53 64 77 78 81 82 85 87 96 96 87 76 69 69 69 67 72 74 75 77 76 74 72 72 74 66 56 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 84 87 84 82 83 87 90 91 93 93 105 120 129 129 126 114 103 78 62 50 49 48 44 44 52 43 42 42 41 43 47 49 49 66 74 79 75 68 66 67 70 62 63 62 64 67 68 68 68 68 68 68 68 68 68 66 67 66 65 62 62 60 60 61 62 60 63 62 56 49 44 43 45 48 49 48 47 49 47 47 46 45 44 44 43 44 44 45 45 45 45 47 47 47 47 47 47 48 48 48 47 47 47 47 46 49 48 48 48 47 47 47 47 45 45 45 44 43 42 42 41 38 43 40 38 41 38 42 60 71 74 75 77 78 80 80 81 82 85 80 71 73 79 75 64 56 52 48 46 51 55 58 59 52 50 47 44 46 46 45 45 51 53 52 50 49 47 44 42 52 62 73 76 81 84 87 90 97 91 78 69 67 69 69 67 72 73 74 75 74 73 71 74 74 64 55 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 84 88 92 91 89 88 93 104 112 119 134 148 156 156 153 145 135 107 83 63 55 53 50 50 53 60 57 53 48 44 43 42 40 42 56 72 75 71 73 73 69 66 66 65 66 65 65 65 65 68 70 70 70 68 68 68 67 66 65 62 61 61 61 61 62 58 59 61 57 51 45 46 47 48 47 46 45 47 45 45 46 45 45 44 44 44 43 45 45 47 47 47 47 49 49 49 49 49 49 49 48 48 47 47 46 49 49 48 48 48 47 47 47 47 46 46 45 44 43 43 43 40 45 42 40 42 39 43 59 71 72 74 76 79 80 82 81 77 79 74 66 68 72 65 51 47 46 43 43 46 51 55 57 54 53 50 47 47 46 44 44 52 53 53 52 48 47 45 41 49 58 71 75 82 86 89 91 96 87 73 67 68 71 71 70 73 74 75 75 74 73 72 73 73 66 56 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 84 85 90 92 90 92 103 124 140 160 174 188 193 190 186 177 168 143 114 84 63 56 51 49 50 51 51 50 51 52 56 58 57 40 47 54 65 79 91 86 73 74 70 70 68 66 66 63 65 68 70 70 70 67 67 67 67 65 65 64 61 60 60 61 61 56 57 58 57 55 48 47 46 47 47 46 45 45 45 45 46 44 44 44 44 43 43 45 44 47 47 47 47 49 49 49 49 49 49 48 48 47 46 46 46 47 47 47 46 46 46 45 45 46 46 45 44 43 43 42 42 40 44 41 39 41 38 42 57 71 72 74 76 79 78 79 81 78 76 70 66 66 63 54 44 43 42 40 40 42 45 49 52 55 53 52 50 50 47 45 44 51 53 53 50 49 46 45 42 47 55 68 77 83 89 89 89 89 79 67 65 69 70 70 71 73 73 73 73 73 72 71 74 73 64 57 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 86 86 88 90 94 106 128 154 174 192 208 223 228 224 218 211 200 178 151 122 93 73 58 49 47 54 55 53 52 53 51 51 48 51 50 49 52 72 95 100 90 83 79 75 74 71 68 65 66 68 70 70 69 69 68 66 66 67 64 63 63 60 60 61 61 58 58 58 58 58 52 47 43 47 46 45 44 44 44 44 45 44 44 44 43 45 45 46 46 47 47 49 49 49 49 49 49 49 49 48 48 47 46 45 45 46 46 45 45 45 44 44 44 45 45 44 44 43 42 41 41 39 44 41 38 41 37 41 56 71 72 74 76 78 79 79 78 78 71 65 61 58 49 43 41 43 45 44 43 41 43 43 45 52 53 55 55 53 49 44 45 48 50 50 49 50 48 46 41 43 53 67 76 86 91 89 86 80 73 64 66 70 70 70 72 74 74 74 74 73 73 72 74 73 64 55 81 81 81 82 82 83 83 83 82 82 82 82 82 82 82 82 83 83 83 83 83 83 83 83 84 84 84 84 84 84 84 86 94 95 97 106 127 156 186 207 207 224 242 249 246 240 233 223 198 181 157 129 98 71 55 50 50 52 53 55 55 57 55 54 53 55 49 43 54 82 105 109 92 87 83 78 75 72 68 67 70 70 70 69 69 68 66 66 67 66 63 62 62 60 60 61 61 57 58 59 58 54 45 38 47 46 45 44 44 44 42 45 44 44 44 43 45 44 46 46 47 47 49 49 49 49 49 49 49 49 48 47 46 46 45 44 45 45 44 44 44 43 43 43 45 45 44 43 42 42 41 41 39 44 41 38 40 37 40 56 71 73 74 77 79 79 77 76 68 58 52 54 50 43 42 50 48 49 50 48 46 44 45 44 51 53 57 57 55 51 44 45 46 48 49 48 49 47 46 43 42 52 65 77 86 92 88 85 73 67 62 66 70 68 68 71 74 74 73 73 73 72 72 76 73 65 55 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 85 85 85 85 85 87 90 93 110 142 173 197 219 239 246 249 254 255 253 250 244 236 212 199 181 159 135 105 70 45 47 48 49 53 51 48 50 57 57 58 55 53 70 106 146 169 136 112 90 81 79 76 73 72 71 75 70 62 64 74 73 64 64 64 64 62 62 60 59 57 62 57 57 57 56 53 46 42 48 47 46 45 44 43 42 44 43 45 45 44 46 45 45 45 48 48 48 48 49 49 49 49 53 52 51 50 49 47 46 46 45 45 45 45 45 45 45 45 43 47 50 49 45 42 42 43 40 46 41 35 38 37 40 54 74 75 74 74 77 81 73 62 53 53 50 48 47 48 48 48 51 51 52 49 48 47 46 43 43 45 50 54 54 52 46 46 43 46 46 45 47 46 47 43 38 49 67 82 93 95 87 82 68 68 64 64 67 70 71 70 74 78 78 74 72 75 76 77 75 66 55 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 85 85 85 85 85 89 93 106 131 162 194 219 239 252 254 255 255 254 253 250 249 243 224 212 197 178 157 132 99 75 51 47 46 47 50 51 53 57 55 63 69 80 103 139 174 191 207 168 123 93 85 83 77 69 70 69 72 75 70 63 63 69 63 63 64 64 62 61 60 57 60 59 57 58 59 54 49 45 48 47 46 45 44 43 44 44 43 45 45 44 46 45 45 45 48 48 48 48 49 50 50 50 52 51 50 49 48 46 45 45 45 45 45 45 45 45 45 45 46 48 49 49 47 44 42 42 40 42 37 36 40 36 38 53 69 76 82 79 75 68 58 47 49 48 48 48 49 49 49 51 52 53 53 50 49 47 46 44 43 46 48 52 53 52 50 49 47 46 45 43 43 43 45 44 40 51 69 85 96 98 89 80 68 67 64 64 66 69 69 69 71 75 75 72 71 74 74 77 74 66 55 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 85 85 85 86 86 90 95 120 152 183 210 236 252 255 255 255 255 254 252 251 250 244 231 221 209 196 180 159 131 108 69 55 44 46 52 55 56 58 57 75 95 118 144 175 200 211 217 229 214 159 97 68 75 89 85 76 66 66 69 70 68 68 63 64 63 63 64 63 61 58 58 58 58 60 60 55 50 46 48 48 47 46 45 44 45 45 45 45 47 46 46 45 47 47 49 49 50 50 50 50 52 52 50 49 48 47 46 45 44 44 45 45 45 45 45 45 45 45 49 48 48 48 48 46 43 40 41 39 35 38 42 35 38 60 74 80 81 73 63 55 45 40 42 43 46 47 49 49 49 51 52 54 51 50 50 48 47 45 43 45 46 50 52 52 52 53 51 50 45 40 40 40 42 41 39 53 74 90 102 102 90 75 67 67 64 64 66 68 69 69 70 73 75 73 73 75 74 75 72 64 53 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 85 86 86 86 86 91 102 136 168 193 216 239 253 255 255 255 255 251 249 248 247 243 230 222 216 206 195 180 153 134 101 76 54 48 53 58 57 55 68 95 128 153 172 194 212 221 229 239 235 207 172 140 100 66 76 78 73 65 66 74 71 62 62 63 62 63 63 63 61 61 57 58 61 63 62 57 53 50 49 48 47 46 47 44 45 45 45 45 47 46 46 45 47 47 50 50 51 50 50 50 52 52 48 47 47 46 45 44 43 43 44 44 44 44 44 44 44 44 50 47 45 46 47 47 43 39 43 40 36 40 41 32 40 69 86 82 71 58 51 46 45 46 41 42 46 47 50 49 48 48 52 51 51 50 49 47 46 46 43 44 44 46 49 52 54 56 56 52 46 39 37 36 38 39 39 56 80 100 110 105 88 69 65 64 63 63 64 65 66 66 67 71 73 72 74 75 72 73 68 60 48 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 85 86 86 87 87 93 111 143 172 194 216 239 254 255 255 255 252 250 245 241 237 234 232 228 225 217 210 197 173 153 129 98 66 53 55 57 57 56 88 122 159 181 193 205 221 233 239 233 226 227 234 219 162 99 64 68 78 82 73 61 59 64 61 62 63 64 63 63 63 61 59 60 64 64 62 57 53 51 49 50 49 48 49 46 47 47 47 47 47 46 48 47 47 47 51 51 51 50 52 51 51 51 48 48 47 47 46 45 45 45 46 46 46 46 46 46 46 46 50 47 45 46 48 48 45 42 43 43 40 40 40 33 45 76 82 72 56 46 44 45 46 49 45 46 47 48 48 47 45 46 48 50 49 47 47 47 46 44 43 43 44 45 46 50 53 55 56 53 47 40 37 36 37 36 37 59 87 107 114 103 81 61 62 62 62 62 62 62 64 64 68 72 74 74 76 76 71 69 63 57 46 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 86 86 87 88 88 93 109 133 160 183 208 232 249 255 253 252 250 249 243 237 232 227 234 232 229 223 219 205 185 165 146 114 79 59 58 61 66 71 115 148 184 204 211 219 233 244 235 244 246 241 234 229 218 199 127 81 58 70 74 60 55 68 62 63 63 64 62 62 62 61 60 63 65 63 61 56 53 52 51 50 51 50 49 48 49 47 47 47 47 46 48 47 47 47 51 50 50 49 51 50 49 49 48 47 47 47 46 46 45 45 45 45 45 45 45 45 45 45 48 47 46 46 47 48 47 46 42 46 41 39 43 44 52 74 64 54 47 44 47 47 44 43 46 47 47 46 46 45 44 43 44 44 46 44 46 44 44 44 43 43 43 44 43 46 49 50 53 50 47 45 41 39 37 37 37 62 92 109 108 95 75 57 60 59 61 61 59 59 60 62 67 71 74 75 76 76 67 66 56 51 42 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 84 84 85 85 85 85 85 86 86 87 88 89 94 107 122 148 177 205 226 242 252 251 249 247 246 242 236 231 231 234 235 232 230 226 214 195 175 154 125 91 70 67 75 90 100 141 168 198 217 227 235 244 249 251 248 243 237 237 240 241 234 203 144 89 68 69 70 65 65 63 63 64 64 62 61 60 60 63 64 65 61 57 53 53 54 51 52 53 52 51 48 49 49 47 47 47 46 48 47 47 47 50 50 51 50 49 48 48 47 48 47 47 47 47 46 46 46 45 45 45 45 45 45 45 45 47 48 49 49 48 49 51 53 48 52 45 44 58 67 64 68 48 46 47 49 50 46 43 44 45 45 44 43 43 43 41 41 40 41 43 41 43 41 41 41 42 41 43 42 43 44 46 45 49 48 48 49 46 42 38 36 39 63 91 103 98 84 69 56 59 59 61 61 59 59 60 62 68 72 74 76 77 75 64 59 52 47 38 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 85 86 86 87 85 85 85 85 86 87 90 92 94 101 114 122 144 179 209 225 241 254 250 249 247 244 242 241 238 240 239 241 239 237 233 223 203 183 155 129 98 78 76 87 110 125 162 181 207 226 238 244 247 245 247 247 247 249 244 238 238 239 225 224 184 113 71 72 74 59 64 64 62 62 61 60 59 59 62 62 62 59 53 50 51 54 53 52 53 52 51 48 49 49 47 47 49 48 48 47 47 47 49 49 50 49 48 47 47 46 48 48 47 47 47 47 47 46 45 45 45 45 45 45 45 45 46 49 52 51 50 48 52 56 53 59 50 50 74 90 77 65 49 49 50 53 48 43 44 51 43 42 41 40 40 42 43 44 41 41 42 42 42 42 42 42 44 43 45 44 44 44 45 43 48 49 52 52 51 46 39 36 42 66 91 97 88 75 65 58 59 60 63 63 60 57 61 61 69 72 75 76 78 77 65 59 52 47 37 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 88 89 90 90 88 86 78 82 88 93 92 97 114 134 146 160 181 202 223 238 248 249 253 252 250 246 242 241 242 243 242 242 237 235 231 222 202 182 155 124 89 77 88 108 130 144 178 199 222 235 242 246 248 247 252 252 252 250 250 250 250 250 248 248 246 223 159 88 61 66 69 61 57 59 63 64 64 61 56 56 56 56 53 52 53 53 53 54 52 51 50 49 49 49 49 49 49 48 47 47 46 45 46 46 47 47 46 45 43 43 47 49 49 48 48 47 47 47 46 47 48 49 48 47 45 44 45 47 48 48 48 46 48 51 50 58 58 79 92 106 111 61 46 48 48 47 47 47 46 46 45 45 45 44 44 43 43 43 45 45 45 45 45 45 45 45 46 45 45 44 44 45 45 46 50 50 53 55 54 52 48 45 46 61 78 81 72 60 56 54 62 62 61 61 60 58 62 63 71 75 79 80 82 78 63 54 42 46 44 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 81 83 87 91 95 108 132 154 180 195 216 233 244 253 255 255 251 250 250 249 244 242 242 243 241 239 237 233 229 218 195 175 151 118 85 73 85 111 138 156 188 209 229 241 245 249 250 249 252 252 252 252 252 252 252 254 255 252 248 247 230 185 119 70 65 63 63 61 56 52 54 58 55 55 58 55 54 50 54 55 55 56 55 53 52 51 49 51 50 50 49 49 48 47 46 46 45 46 46 46 46 44 42 43 47 49 49 48 48 48 47 47 44 44 46 47 49 49 49 50 48 49 48 49 47 49 48 50 54 61 65 83 101 115 114 60 46 47 47 47 46 46 46 45 45 45 45 44 44 43 43 43 46 46 46 46 46 46 46 46 47 46 45 45 45 45 46 47 48 50 51 54 54 54 52 49 49 62 73 73 64 54 55 58 64 63 64 62 60 58 59 60 69 75 81 84 84 79 62 53 45 48 46 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 85 84 87 91 99 119 151 178 203 221 243 254 255 255 255 254 251 250 250 248 243 239 235 235 236 235 234 229 225 212 191 171 146 121 96 90 105 129 156 173 202 220 237 246 249 252 252 251 252 252 252 252 252 252 252 254 253 255 254 246 244 235 193 143 60 65 58 49 59 77 73 51 55 58 61 59 55 51 55 59 57 57 56 54 53 52 52 52 52 52 51 51 50 49 49 49 48 48 48 48 47 46 44 43 47 49 49 49 48 48 48 47 46 46 46 47 48 49 51 51 52 51 48 49 50 52 50 50 55 65 71 86 109 123 109 54 45 46 46 46 45 45 45 44 45 45 45 44 44 43 43 43 46 46 46 46 46 46 46 46 46 46 45 44 44 45 46 46 45 46 47 49 50 52 52 51 51 58 62 58 50 45 51 57 64 64 66 63 61 57 56 57 68 76 83 86 84 75 56 46 45 48 46 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 86 85 87 93 105 129 166 196 208 230 252 255 254 254 252 248 252 251 249 244 238 230 227 223 226 229 227 223 220 208 188 171 149 137 125 128 145 162 180 191 218 231 244 249 251 253 253 251 252 252 252 252 252 252 252 254 253 255 255 237 230 240 236 222 173 110 63 64 75 64 56 58 54 59 63 61 57 52 54 60 59 60 58 59 57 57 56 56 52 52 52 51 51 50 50 49 48 48 48 47 46 45 45 46 50 50 49 49 49 48 48 48 51 50 48 47 47 47 49 49 54 52 49 50 51 53 51 50 54 64 73 86 111 122 95 44 44 46 45 45 45 44 44 44 45 45 45 44 44 43 43 43 45 45 45 45 45 45 45 45 45 45 44 44 44 44 45 45 44 44 44 45 46 49 50 51 50 53 55 49 43 41 47 52 60 61 65 64 63 59 58 58 69 78 86 88 83 73 52 40 44 46 44 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 84 84 89 96 109 134 172 202 218 241 255 255 253 255 254 250 253 251 248 240 232 223 218 213 218 219 219 217 214 208 191 177 167 160 157 167 181 195 206 215 230 240 248 250 251 253 253 250 252 252 252 252 252 252 252 252 254 250 245 243 248 248 244 234 236 200 137 80 59 60 64 60 55 59 63 61 59 55 56 59 59 60 61 61 60 59 59 59 54 54 54 53 53 53 53 52 52 51 50 49 49 48 48 48 50 50 50 49 49 49 48 48 52 51 49 48 48 48 49 50 54 53 52 53 53 54 51 50 54 63 77 87 111 114 76 40 44 46 45 45 45 44 44 44 45 45 45 44 44 43 43 43 45 45 45 45 45 45 45 45 44 44 43 43 43 43 44 44 46 45 43 43 44 45 45 47 45 47 48 45 41 41 45 47 53 56 61 64 63 61 62 63 71 81 90 90 83 71 52 37 42 44 42 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 84 85 89 97 109 132 168 199 227 248 255 255 255 255 255 250 251 250 244 234 226 217 213 209 211 213 214 212 211 207 196 184 186 182 184 193 206 216 229 237 240 247 251 251 251 253 252 250 252 252 252 252 252 252 252 252 253 247 248 253 253 250 243 239 226 237 217 147 87 70 69 59 58 60 62 63 62 58 57 57 60 61 61 59 60 59 59 59 56 54 54 54 54 53 53 53 54 53 52 50 49 49 49 50 51 50 50 50 49 49 49 49 48 48 48 49 50 52 53 54 52 56 58 59 56 54 51 52 57 63 82 91 110 101 58 42 45 46 46 46 45 45 45 44 45 45 45 44 44 43 43 43 44 44 44 44 44 44 44 44 44 43 42 42 42 42 43 44 46 46 43 43 43 44 44 43 42 43 47 47 46 43 45 44 47 51 56 58 60 63 66 68 74 83 90 90 82 69 49 37 42 44 42 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 86 86 88 93 104 125 160 190 223 247 255 255 253 255 255 246 251 248 241 232 222 216 214 211 210 211 211 209 208 206 199 190 195 198 203 216 227 234 244 251 247 252 253 251 251 253 253 250 252 252 252 252 252 252 252 252 249 250 253 253 252 245 248 253 250 231 234 232 185 98 58 73 62 61 62 64 64 62 58 55 57 58 57 58 58 58 58 60 56 56 56 56 56 56 56 56 58 57 55 53 52 53 53 54 51 51 50 50 50 49 49 49 47 48 49 51 52 53 53 53 52 60 66 67 60 56 53 55 60 62 85 94 107 85 40 46 46 47 47 47 46 46 46 45 45 45 45 44 44 43 43 43 44 44 44 44 44 44 44 44 43 43 42 41 41 42 43 43 45 45 44 44 44 44 43 44 43 44 47 49 50 49 48 46 45 46 51 53 56 58 63 66 73 84 90 88 80 65 48 37 44 44 42 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 89 90 92 91 90 86 89 87 87 90 98 120 154 184 215 240 255 254 254 255 255 244 250 245 238 229 221 216 216 214 210 210 210 206 207 207 200 195 196 204 219 235 246 249 251 252 253 253 253 252 252 253 253 251 252 252 252 252 252 252 252 250 247 247 248 250 254 255 255 250 248 250 241 226 219 203 150 91 68 64 62 65 66 64 60 53 55 54 56 55 55 54 56 56 56 56 56 56 56 56 56 56 59 58 56 54 53 53 54 55 51 51 51 50 50 49 49 49 50 51 52 53 53 51 50 49 52 62 71 72 63 57 55 58 59 59 85 94 102 73 28 48 46 48 48 47 47 47 46 46 45 45 45 44 44 43 43 43 44 44 44 44 44 44 44 44 43 42 42 41 41 42 42 43 43 43 44 45 44 45 46 44 43 45 49 51 54 52 52 49 43 45 48 50 53 55 61 63 73 84 90 87 77 64 47 35 44 44 44 86 86 86 86 86 86 86 86 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 91 87 89 96 103 118 147 176 201 222 243 254 255 255 255 249 250 246 240 235 232 227 223 216 218 212 209 210 209 201 200 202 205 216 227 237 243 250 255 255 254 252 252 252 252 252 252 252 252 252 252 252 252 252 252 250 250 251 253 255 255 255 255 255 255 251 243 238 233 226 217 207 105 75 58 64 71 65 58 61 50 50 51 47 46 45 49 52 53 55 56 56 58 58 57 56 58 57 57 57 56 55 55 55 50 50 51 52 52 51 51 50 51 49 57 57 45 40 39 30 59 55 48 50 62 74 68 55 60 67 90 102 85 49 35 42 47 49 48 48 48 47 47 47 47 47 47 46 45 45 45 44 48 48 47 47 46 46 46 46 43 43 43 43 43 43 42 42 46 45 45 44 45 44 45 45 42 44 47 50 54 56 60 60 50 47 45 41 42 47 56 63 71 78 87 84 73 59 46 42 44 43 44 86 86 86 86 86 86 86 86 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 90 86 89 96 105 120 150 180 204 224 244 255 255 255 252 249 250 244 239 235 230 225 221 214 209 203 202 204 204 201 202 206 215 222 233 242 247 250 253 254 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 249 249 252 255 255 255 255 255 255 253 246 242 239 234 226 215 206 149 91 67 66 68 67 64 51 52 51 51 51 49 49 49 56 56 57 58 57 54 55 58 56 56 56 55 55 54 54 54 52 53 54 54 54 54 53 53 57 50 55 56 43 36 37 33 52 50 44 42 49 63 67 66 61 74 94 95 73 44 37 47 49 50 50 50 49 49 49 49 49 49 49 48 48 47 47 47 49 49 49 48 48 48 47 47 45 45 44 44 43 43 42 42 42 42 41 41 41 42 42 43 45 44 45 47 51 54 62 63 56 53 49 46 43 46 50 54 68 75 84 82 75 60 50 44 44 45 44 86 86 86 86 86 86 86 86 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 88 86 89 97 105 121 153 184 208 226 246 255 255 254 252 248 247 243 237 233 228 222 216 209 201 194 193 198 200 203 207 215 225 234 241 247 250 251 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 250 250 253 253 254 255 255 254 255 252 247 245 246 242 236 227 214 219 208 166 105 66 60 71 72 62 50 42 42 45 51 54 52 51 52 57 56 53 55 62 52 52 52 52 51 51 51 51 53 54 54 55 55 54 53 53 59 49 55 64 51 38 40 43 44 46 42 37 37 50 65 75 69 84 97 83 57 37 40 51 50 52 52 52 51 51 51 50 52 52 51 51 51 50 50 50 52 51 51 51 50 50 50 49 47 47 46 45 44 43 42 42 40 40 40 40 40 41 42 43 48 46 43 43 46 52 60 64 61 58 55 51 45 43 42 44 61 68 77 77 72 60 52 47 46 46 45 85 85 86 86 86 86 87 87 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 88 86 89 96 104 119 152 185 208 227 246 255 255 254 253 249 246 241 237 231 226 220 213 206 192 187 188 194 199 205 217 224 239 245 250 253 252 250 250 251 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 253 253 253 253 253 254 253 250 251 250 248 249 248 248 244 238 237 228 219 219 217 188 121 60 54 53 53 57 59 54 45 38 64 58 56 58 56 48 45 49 51 51 51 51 50 50 50 50 52 53 53 53 53 52 52 51 54 47 63 83 72 52 48 51 42 45 42 38 35 44 58 70 81 92 94 70 46 37 43 49 51 53 53 52 52 51 51 51 53 52 52 52 52 52 52 52 54 54 54 53 53 53 52 52 50 50 48 47 46 44 43 43 42 42 41 41 42 43 44 44 47 45 42 42 46 49 57 58 61 59 59 54 49 44 40 39 53 59 67 69 66 59 52 48 47 47 46 85 85 85 86 86 87 87 87 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 88 87 90 95 101 116 149 183 206 226 245 253 255 254 253 250 248 243 241 235 229 222 214 204 191 185 185 190 200 209 223 237 248 251 255 255 254 251 249 249 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 254 255 255 255 255 254 251 250 248 246 247 247 249 251 251 250 248 234 243 244 241 235 228 210 188 163 135 97 67 53 53 57 60 55 51 50 53 57 58 59 59 49 49 49 49 49 49 49 51 54 54 54 54 54 53 52 51 51 50 77 102 90 64 52 51 42 43 43 43 40 42 47 54 91 94 86 61 46 44 46 45 51 53 53 52 52 51 51 51 52 52 52 52 52 52 52 52 56 56 56 55 55 55 54 54 53 52 51 50 49 47 46 46 46 46 45 44 44 45 46 46 45 45 45 45 49 49 54 52 57 57 60 58 54 47 44 42 46 52 60 63 62 55 50 45 46 45 44 84 84 85 86 86 87 88 88 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 88 87 90 95 99 114 148 183 209 228 246 254 255 254 253 250 248 244 243 239 232 224 213 204 189 181 180 186 197 209 227 243 253 255 255 255 252 249 248 249 250 252 252 252 252 252 252 252 252 252 252 252 252 252 252 254 255 255 255 255 253 250 248 245 241 244 248 250 253 254 255 255 252 254 250 241 240 244 241 237 230 220 208 189 167 141 115 99 75 76 67 50 40 42 44 42 50 50 50 50 51 51 51 51 55 58 58 57 57 56 54 54 53 57 83 103 88 63 50 44 43 43 43 46 44 42 42 46 92 87 77 59 54 54 51 45 52 53 53 53 52 52 52 52 51 51 52 52 52 52 53 53 57 57 57 57 56 56 56 55 55 55 54 53 52 51 50 50 48 47 46 45 44 44 44 44 44 45 48 49 50 50 50 45 49 51 55 58 55 52 49 48 45 48 54 58 57 54 50 45 45 45 44 84 84 85 86 86 87 88 88 87 87 87 87 87 87 87 87 87 87 90 91 93 92 91 87 87 86 90 95 100 115 151 187 216 234 251 255 255 254 253 249 245 242 240 236 230 221 208 199 185 179 176 180 191 207 227 242 254 255 255 255 252 249 247 248 250 252 252 252 252 252 252 252 252 252 252 252 252 252 252 254 255 255 255 254 250 248 243 240 238 242 246 250 254 255 255 255 255 255 255 255 255 249 240 233 241 239 237 237 234 229 223 218 209 208 180 120 71 56 53 48 50 50 50 51 51 52 52 54 56 58 58 58 57 56 55 54 55 59 76 84 67 52 48 43 46 46 47 50 47 44 49 58 82 75 70 64 65 62 57 51 53 55 55 55 54 54 54 53 52 52 52 53 53 54 54 54 58 58 58 57 57 56 56 56 57 57 56 56 55 55 54 54 53 51 50 48 46 45 46 46 47 47 48 49 51 51 50 45 42 45 50 55 55 52 50 50 47 49 54 58 57 55 51 46 46 45 44 82 82 83 84 86 87 88 88 87 87 87 87 87 87 87 87 87 87 89 91 93 92 91 87 86 87 90 96 103 117 157 194 222 239 255 255 255 254 250 246 238 237 233 229 225 215 202 195 184 177 172 177 188 204 224 242 254 255 255 255 251 249 249 250 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 254 255 255 255 253 251 247 244 241 240 242 246 250 251 252 255 255 255 255 255 255 255 252 251 250 240 238 236 234 231 231 234 234 219 228 197 119 55 41 47 47 51 51 52 52 53 53 54 56 55 57 57 56 55 54 53 52 53 56 65 60 44 40 46 42 46 47 50 50 48 46 59 78 73 69 67 70 71 66 59 56 52 53 53 54 54 54 55 55 53 53 53 54 54 55 55 55 57 57 58 56 57 55 56 55 58 57 58 57 57 56 57 57 56 57 52 50 48 46 47 47 49 49 46 46 43 42 41 37 30 33 43 49 54 53 53 53 50 51 53 54 56 53 48 45 45 46 45 78 79 80 81 85 86 87 88 85 85 86 86 86 87 89 88 87 88 91 93 94 91 88 85 85 86 90 93 103 127 172 208 228 240 253 255 251 251 248 243 235 235 230 221 217 214 201 189 189 175 164 169 180 196 215 231 251 255 255 255 255 253 250 251 254 254 254 254 254 254 252 252 253 253 251 250 250 249 249 249 255 254 253 253 255 253 252 248 250 246 247 250 248 244 243 249 255 255 255 255 255 252 252 253 255 255 253 249 242 237 234 232 223 230 202 114 53 51 47 45 49 49 49 49 50 50 52 52 50 53 53 54 55 54 54 53 54 52 45 39 38 42 43 41 48 47 41 40 52 67 68 62 63 66 68 70 69 66 62 59 51 49 48 48 49 50 53 54 54 54 54 54 52 52 52 52 55 54 56 53 55 54 56 55 57 55 56 55 58 57 60 61 58 57 56 52 48 46 46 48 48 49 47 45 41 38 39 39 43 44 49 52 56 57 59 57 54 55 60 59 60 59 52 44 44 43 40 77 78 80 81 83 84 88 88 86 86 87 87 87 88 90 89 88 88 91 93 94 91 90 86 87 86 93 98 110 136 178 209 227 238 253 255 253 249 245 239 236 231 226 216 211 206 196 184 175 166 160 166 181 196 214 228 254 255 255 255 255 255 253 253 254 254 254 254 254 254 252 252 253 253 250 250 250 249 248 248 253 252 253 253 255 255 254 253 253 251 249 241 229 219 222 234 253 255 254 253 251 250 254 255 255 255 255 252 244 236 231 229 223 231 202 112 51 50 46 45 47 47 49 49 50 50 52 52 50 50 53 54 55 54 54 53 53 49 45 39 40 43 44 43 43 42 51 60 64 60 58 57 61 62 65 66 66 65 61 60 54 52 51 48 49 50 52 54 54 54 54 54 52 52 50 50 55 54 54 53 53 54 54 55 55 55 55 55 56 57 58 59 63 62 59 55 53 51 51 54 55 54 52 45 41 42 47 49 59 59 61 62 63 61 58 56 57 60 65 65 67 64 57 48 42 42 39 77 78 80 82 83 85 88 89 88 88 89 89 88 89 91 90 88 89 91 92 94 91 90 86 87 84 90 99 115 142 179 205 223 235 252 255 253 248 242 235 231 224 216 204 198 192 183 173 164 161 163 173 191 206 222 234 254 255 255 255 255 255 253 254 254 254 254 254 254 254 252 252 253 252 250 250 249 249 248 248 253 251 252 253 254 255 254 253 253 251 250 236 216 204 212 230 253 255 254 253 251 250 254 255 255 255 255 252 244 236 231 229 224 231 201 109 48 48 46 46 46 47 49 50 51 50 52 51 50 50 53 53 55 54 55 54 54 49 47 42 44 46 49 50 48 52 73 90 83 61 51 52 56 57 59 60 61 62 62 63 61 58 57 53 53 53 53 54 54 54 54 54 52 52 50 50 55 55 54 54 54 54 55 55 55 55 55 55 56 57 59 59 66 65 63 59 58 56 57 60 62 59 55 49 47 51 61 66 74 74 72 69 64 58 53 50 56 61 68 71 74 70 62 53 46 46 43 77 78 80 82 84 86 89 90 90 90 91 90 90 90 92 91 89 89 91 92 93 91 90 87 85 80 85 96 116 142 173 194 218 231 250 255 252 245 237 228 221 211 201 190 184 178 170 163 168 171 179 192 211 225 239 248 255 255 255 255 255 254 253 254 254 254 254 254 254 254 252 252 252 252 250 249 249 249 247 247 252 250 251 252 254 255 254 253 251 251 250 237 218 208 217 235 253 255 254 253 251 250 254 255 255 255 255 252 244 236 230 228 227 233 201 108 48 48 48 48 46 47 50 50 51 50 51 50 50 50 52 52 54 54 56 55 56 51 50 48 50 51 55 60 71 82 105 116 106 83 65 57 55 54 55 54 56 59 60 62 62 60 60 56 56 56 55 56 54 54 54 54 52 52 50 50 56 55 54 54 54 54 55 56 56 55 55 56 56 58 59 60 63 62 61 57 57 56 57 61 61 59 55 49 47 53 63 69 69 70 69 65 59 52 47 44 50 56 66 71 75 71 62 51 48 47 44 77 78 80 82 84 86 90 91 92 91 92 91 90 90 93 91 89 89 90 91 92 90 90 87 86 80 84 96 116 140 167 184 213 228 247 253 249 242 233 223 214 201 191 182 177 171 165 161 174 182 194 208 225 239 251 255 255 255 255 255 255 254 253 255 254 254 254 254 254 254 252 252 252 252 249 249 249 248 247 247 251 249 251 252 254 255 254 253 251 249 249 241 229 220 225 238 253 255 254 253 251 250 254 255 255 255 255 252 245 236 230 227 229 235 202 109 49 50 50 51 46 47 51 51 52 50 50 49 50 50 52 52 54 54 56 57 58 53 54 54 55 55 61 68 98 115 131 129 121 111 90 65 56 54 53 51 52 55 57 59 60 58 59 56 58 58 57 58 54 54 54 54 52 52 50 50 56 56 55 54 54 55 56 56 56 56 56 56 57 58 59 60 61 60 59 55 55 54 56 59 58 57 54 49 47 51 59 63 63 64 64 61 54 47 43 42 45 52 64 69 74 70 60 49 42 42 39 hdf4-hdf4.3.1/mfhdf/hrepack/image8.txt000066400000000000000000011255521503061704500174560ustar00rootroot00000000000000components 1 height 400 width 300 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 8 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 61 52 39 25 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 86 77 65 48 16 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 108 106 104 99 88 48 23 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 109 107 106 106 105 98 60 26 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 107 105 104 104 105 105 100 73 37 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 108 105 104 104 105 105 104 93 69 29 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 109 105 103 103 104 106 106 103 89 59 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 111 105 103 103 104 106 107 106 100 86 29 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 113 105 102 101 102 105 107 108 106 100 55 20 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 115 107 102 101 100 101 104 107 108 107 88 42 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 118 109 103 100 99 100 102 105 108 108 99 63 30 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 119 111 104 100 97 100 101 103 106 109 105 82 48 17 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 3 4 5 6 7 7 8 9 9 9 9 9 8 7 7 6 4 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 119 113 106 100 97 100 101 102 104 108 108 95 65 30 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 6 7 9 11 13 16 18 20 22 24 26 27 27 28 28 27 25 24 22 20 16 13 11 8 6 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 119 115 109 102 97 100 103 104 104 106 108 103 79 46 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 4 6 9 12 17 21 25 30 34 40 44 48 52 55 58 60 61 62 62 60 58 56 52 48 41 35 29 23 18 11 7 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 115 114 111 106 99 97 104 106 106 106 107 106 91 65 30 7 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 6 9 13 20 26 33 41 49 59 66 74 80 87 94 98 102 106 109 112 113 114 115 115 115 114 112 109 105 98 91 82 72 61 46 36 26 18 12 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 109 111 110 107 103 97 104 107 108 107 107 107 97 77 44 16 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 6 11 17 24 31 40 52 62 71 79 87 95 100 104 107 110 113 115 117 119 120 121 122 123 124 124 125 125 124 124 123 120 118 113 108 101 87 75 62 49 36 21 13 7 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 104 106 107 106 98 101 106 109 108 108 107 101 85 56 27 14 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 6 10 15 22 33 43 53 64 74 85 93 99 104 109 113 115 117 119 120 121 122 123 124 124 125 126 126 127 128 128 129 129 129 129 129 129 127 125 122 115 106 96 84 70 50 37 25 16 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 95 97 101 104 106 100 99 104 109 110 108 108 104 92 67 38 23 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 6 12 18 27 36 48 63 75 85 95 103 110 113 116 117 118 119 120 120 121 121 122 122 122 123 123 124 124 125 126 126 127 128 129 129 130 130 130 131 131 130 129 127 122 114 104 85 69 53 38 25 11 6 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 90 92 95 99 105 105 98 102 108 111 110 109 106 98 79 48 33 19 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 10 17 29 41 55 69 83 99 107 112 115 116 117 118 118 119 119 120 120 120 120 120 119 119 119 119 119 119 119 120 121 122 123 124 126 127 128 129 130 131 131 131 131 131 131 129 128 120 108 91 73 53 31 18 10 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 89 90 93 96 99 105 100 98 101 110 111 110 108 101 85 68 54 37 21 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 9 16 26 38 52 74 88 100 109 114 115 116 117 117 118 118 117 117 115 113 111 110 109 108 108 108 109 109 110 110 111 112 113 114 115 116 117 118 119 121 123 124 126 128 129 131 131 131 131 132 131 130 127 120 108 83 62 43 26 14 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 88 89 91 95 98 104 103 99 98 106 110 110 108 102 90 71 62 50 36 18 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 8 15 29 42 58 73 88 102 108 111 114 116 116 116 116 115 113 110 108 107 106 105 105 105 106 106 107 107 108 109 109 110 111 112 113 114 115 116 117 118 119 120 121 123 124 125 126 128 129 130 131 132 132 132 131 129 126 115 101 83 63 44 21 11 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 88 90 93 99 103 104 101 97 99 107 109 108 103 92 74 65 57 47 31 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 8 15 25 38 59 74 88 99 107 114 115 115 115 115 113 111 109 107 105 103 102 102 102 102 103 104 105 106 108 109 111 112 113 114 116 117 118 118 119 119 120 120 120 121 122 122 123 124 125 126 128 129 130 131 132 132 133 133 133 130 124 113 99 81 53 34 20 10 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 87 88 92 100 103 104 103 99 93 101 104 105 101 93 75 66 60 54 44 18 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 11 22 35 51 68 90 102 110 114 115 115 115 113 111 110 106 103 100 99 98 99 100 101 102 104 106 108 110 113 115 118 120 123 124 126 128 129 130 130 130 130 129 129 128 127 126 126 126 126 126 126 127 128 129 130 131 132 133 133 134 134 133 131 125 115 90 68 46 27 13 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 87 88 92 102 105 105 104 102 95 90 97 99 97 93 76 66 61 57 54 32 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 6 12 28 46 66 86 104 113 114 115 115 115 114 112 107 102 98 95 95 96 96 98 99 101 103 106 109 114 119 124 129 133 138 142 145 148 150 152 153 153 153 152 150 149 147 144 142 138 136 133 131 129 128 128 128 129 129 130 131 132 133 134 134 135 135 134 133 125 108 84 58 33 11 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 90 90 91 95 104 108 107 106 104 102 91 86 86 89 89 83 71 63 60 58 48 25 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 13 26 44 74 94 107 113 114 115 115 114 112 108 100 96 94 93 93 95 96 97 100 103 110 117 125 133 141 151 158 164 169 174 178 181 183 185 186 187 187 187 187 186 185 183 182 179 176 172 168 164 159 154 148 143 139 136 133 132 132 132 133 133 134 135 135 135 135 134 132 125 110 87 49 25 11 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 93 96 102 107 108 107 106 105 104 96 88 83 81 82 80 75 69 64 61 55 35 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 9 20 38 59 81 101 108 112 114 114 113 110 105 100 96 93 92 92 93 94 98 102 109 117 127 139 149 157 164 171 178 182 185 187 189 191 192 193 193 194 194 194 193 193 193 192 191 189 188 186 184 181 179 176 173 169 164 160 155 150 143 140 137 135 134 134 135 135 135 135 135 134 132 127 117 89 61 36 17 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 97 101 106 109 109 107 106 105 105 101 95 87 80 77 76 75 71 67 63 59 43 23 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 9 27 47 69 88 103 112 113 113 113 111 105 100 96 92 90 91 92 94 98 103 114 123 134 145 155 167 174 179 184 188 192 193 195 195 196 196 196 196 196 195 195 194 194 193 193 192 192 191 190 189 188 186 185 183 182 179 177 174 170 166 160 155 150 145 141 138 136 136 135 135 135 135 135 134 131 117 96 71 44 22 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 99 100 104 109 110 108 106 105 105 105 104 101 95 86 76 72 72 71 69 66 62 50 30 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 13 26 55 78 96 108 112 113 112 111 108 103 95 91 89 89 89 93 97 103 112 122 139 152 163 172 180 187 190 193 195 196 196 196 196 196 196 195 194 193 192 191 189 188 187 186 186 185 185 185 185 185 185 184 184 183 183 182 181 181 179 178 174 170 165 159 153 146 142 139 137 136 136 135 135 135 135 132 123 105 80 51 19 8 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 103 107 110 110 104 103 103 104 105 105 105 101 94 81 70 69 69 68 67 64 56 36 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 14 30 55 93 104 110 113 114 112 110 104 97 90 87 87 87 89 91 99 110 124 140 155 171 180 186 190 193 195 196 197 197 197 197 196 195 193 192 189 186 184 181 179 175 173 172 170 169 169 169 170 171 173 175 177 178 179 180 181 181 181 180 179 178 178 176 173 170 162 155 149 143 139 137 136 136 135 135 135 134 129 116 92 47 23 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 103 105 108 110 110 103 101 102 103 105 105 105 103 98 87 70 68 67 67 66 65 60 42 20 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 23 47 75 100 109 112 113 113 111 104 95 89 86 84 86 88 92 100 111 135 151 165 177 185 191 194 195 196 197 197 196 195 194 192 189 185 181 177 172 165 159 154 149 144 138 134 130 127 125 123 123 124 125 127 132 136 141 146 151 158 164 169 173 176 177 177 177 176 175 174 172 168 163 156 146 141 138 136 136 135 135 135 132 128 104 68 37 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 104 105 107 109 110 103 101 101 102 104 104 104 101 95 86 70 67 66 66 66 65 61 44 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 27 54 79 97 107 112 112 111 108 101 92 87 85 85 86 90 99 112 128 144 164 175 183 188 193 195 196 196 196 195 194 192 189 185 180 173 167 160 153 145 135 128 122 115 110 103 99 95 92 89 87 87 87 87 88 91 94 98 103 108 117 125 133 141 149 159 165 170 173 174 174 173 172 170 167 161 154 148 142 138 136 136 135 134 133 124 104 76 45 18 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 103 105 107 109 110 105 102 101 102 104 104 102 97 91 84 71 66 65 65 65 65 62 46 24 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 10 24 58 82 98 107 111 112 110 105 98 91 84 83 84 87 92 106 122 138 155 170 182 188 192 195 196 196 196 195 193 191 186 182 176 169 162 151 142 133 124 115 104 97 91 85 80 76 73 71 69 67 66 66 66 66 66 68 69 72 74 78 84 89 96 103 112 125 135 145 153 161 168 171 172 172 171 168 164 159 154 147 141 138 136 135 135 133 124 107 81 48 15 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 103 104 106 108 109 106 103 102 103 104 103 99 92 85 82 74 67 64 64 65 65 62 46 24 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 10 26 51 88 101 108 111 112 109 103 96 88 84 81 84 88 95 107 130 150 165 177 187 192 195 196 196 196 195 193 190 187 182 174 166 157 148 137 123 112 103 93 85 76 71 67 63 61 59 58 57 57 57 57 57 57 57 57 57 58 58 59 60 62 64 67 72 78 88 98 110 121 134 150 158 164 168 170 171 170 168 165 159 150 144 140 137 136 135 133 127 112 85 39 18 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 103 105 106 107 107 105 104 104 105 104 93 85 80 80 78 69 65 64 65 65 62 45 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 25 52 86 106 109 110 111 111 103 92 85 81 80 82 87 98 114 135 161 175 185 191 195 197 197 197 196 194 191 187 182 176 169 156 144 132 120 107 91 81 73 66 61 57 56 55 55 54 54 54 54 54 55 55 55 55 55 55 56 56 56 56 57 57 57 58 59 60 62 66 72 80 92 112 129 143 156 165 170 171 171 170 169 163 155 147 141 137 136 135 134 130 122 79 42 17 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 101 102 103 104 107 106 106 107 108 97 85 80 80 81 80 73 67 64 65 65 61 42 19 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 33 64 92 106 109 110 110 107 101 87 82 79 79 82 93 110 131 153 171 186 191 195 197 197 197 195 193 190 187 180 172 162 151 138 119 104 91 80 70 61 58 55 54 53 53 53 53 53 53 54 54 54 54 54 54 54 55 55 55 55 55 55 56 56 56 56 56 57 57 57 58 59 60 62 68 76 89 105 123 145 159 166 170 170 169 167 164 157 148 140 137 136 135 133 124 94 58 26 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 99 99 99 100 102 103 105 106 107 109 91 82 80 81 82 80 72 67 65 65 65 57 36 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 6 31 64 88 103 108 109 109 105 98 89 81 79 79 84 93 116 138 157 174 185 194 196 197 197 196 193 191 187 182 176 164 151 138 123 108 90 78 69 63 58 55 54 53 53 53 53 53 53 53 53 53 53 54 54 54 54 54 54 54 54 55 55 55 55 55 55 56 56 56 56 57 57 58 58 59 61 64 69 76 86 106 124 139 153 164 168 168 168 165 160 150 144 139 136 135 131 119 94 62 26 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 98 98 97 97 99 100 103 105 107 109 88 81 80 81 81 78 70 66 65 65 64 52 30 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 21 61 87 101 107 109 109 105 98 89 81 77 79 85 96 113 142 162 177 187 194 197 197 196 195 193 189 184 178 169 159 141 125 110 96 82 69 62 58 55 53 52 52 52 52 52 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 54 54 54 54 54 54 55 55 55 56 56 56 57 57 57 58 59 60 62 66 78 90 105 122 139 156 164 168 168 166 160 154 147 142 137 135 131 118 95 61 19 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 98 97 96 95 96 98 100 103 106 109 90 82 81 81 78 74 68 66 65 66 63 44 22 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 19 45 88 101 107 108 108 106 98 88 81 77 78 84 97 115 138 167 181 190 195 198 198 196 194 191 188 182 174 164 151 137 114 98 84 73 64 57 54 53 52 52 52 52 52 52 52 52 52 52 52 53 53 53 53 53 53 52 52 52 52 52 52 52 53 53 53 53 53 54 54 54 55 55 56 56 56 57 57 58 58 59 62 66 75 89 106 132 148 159 165 167 166 163 157 150 143 137 135 131 120 98 47 21 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 98 97 96 95 95 96 96 99 104 109 98 83 80 80 73 70 67 66 66 66 60 33 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 15 39 75 103 106 108 108 107 99 87 80 76 75 82 96 117 141 165 185 192 196 198 198 196 193 190 187 182 172 160 144 127 109 87 74 65 58 54 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 51 51 51 51 51 51 51 51 52 52 52 52 53 53 54 54 55 55 56 57 57 57 58 58 59 61 65 71 94 116 136 153 164 167 168 166 162 153 141 138 135 132 126 88 46 18 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 97 97 96 95 95 95 95 96 100 107 107 79 76 80 73 70 68 67 66 64 40 17 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 14 41 73 100 107 108 107 105 99 85 78 75 76 80 101 126 150 172 188 196 198 199 198 195 191 188 183 176 167 147 129 110 92 77 63 58 54 52 52 51 51 51 51 51 51 52 52 52 52 52 52 52 52 52 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 52 52 53 53 54 55 56 56 57 58 58 59 60 64 72 87 108 132 158 165 167 166 164 157 148 141 137 134 125 96 58 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 97 97 96 95 95 95 95 96 98 102 108 78 75 80 75 71 69 67 63 54 23 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 32 64 91 104 107 107 105 99 90 77 75 76 82 94 125 150 171 186 194 198 199 197 195 191 186 181 173 162 147 122 104 87 74 63 56 54 52 51 51 51 51 51 51 51 51 52 52 52 52 52 52 52 51 51 51 51 51 51 51 51 51 51 51 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 52 52 53 54 54 56 56 57 58 59 60 63 70 80 96 125 144 157 164 165 164 159 151 143 138 132 120 93 58 21 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 97 97 96 96 96 96 95 95 96 99 108 80 75 78 76 72 69 64 55 38 11 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 21 55 83 101 106 107 105 99 91 81 74 75 81 94 114 149 171 185 194 198 199 197 194 191 187 180 171 158 143 124 99 83 71 62 56 53 52 51 51 51 51 51 51 51 51 51 52 52 52 52 52 51 51 51 51 50 50 50 50 50 50 50 50 50 50 50 50 50 49 49 49 49 49 49 50 50 50 50 50 50 51 51 51 52 52 54 54 55 56 57 58 60 62 66 73 92 113 132 149 160 166 164 159 153 145 137 132 117 92 54 14 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 97 96 96 96 97 96 95 95 96 107 87 77 74 77 72 67 58 43 22 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 8 41 76 96 105 107 105 100 92 83 74 73 78 91 111 138 171 186 194 198 199 198 194 190 186 181 171 157 140 121 101 78 67 59 55 52 51 51 51 50 50 50 51 51 51 51 52 52 52 52 52 51 51 51 50 50 50 50 50 50 50 50 50 49 49 49 49 49 48 48 48 48 48 48 48 48 48 49 49 49 50 50 50 50 51 51 52 52 53 54 56 57 58 59 60 62 69 83 102 123 145 161 164 164 161 154 144 138 132 119 92 38 15 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 96 96 96 96 97 98 97 95 95 103 101 83 69 75 69 61 47 29 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 17 65 91 103 106 106 102 95 84 76 72 74 86 107 133 161 188 195 198 199 198 195 190 186 181 174 158 139 118 98 79 63 57 54 52 51 51 50 50 50 50 50 51 51 51 52 52 52 52 52 51 51 50 50 50 50 50 49 49 49 49 49 49 48 48 48 47 47 47 47 47 46 46 46 46 46 46 47 47 47 48 49 49 50 50 50 51 51 51 52 53 55 56 57 58 59 61 65 75 91 114 147 159 164 164 163 155 145 139 133 125 79 36 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 96 96 96 96 97 99 99 98 95 96 103 90 72 66 65 53 36 19 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 16 42 92 101 105 106 103 94 83 75 71 72 85 108 135 162 185 198 199 198 197 195 189 184 178 170 157 132 110 90 74 62 54 53 52 51 51 50 50 50 50 50 51 51 52 52 52 52 52 51 51 50 49 49 49 49 49 49 49 49 49 48 48 48 48 47 47 47 47 47 46 46 46 46 46 45 45 45 45 45 45 45 46 46 47 48 49 50 50 51 51 51 52 53 54 56 57 59 60 62 66 74 101 126 146 160 165 164 159 150 142 136 124 88 48 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 96 96 95 95 97 99 101 101 97 96 102 98 86 65 57 49 34 18 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 30 64 99 104 105 103 99 87 77 72 72 76 101 129 156 179 194 199 199 197 195 191 184 178 169 157 139 111 91 75 63 56 53 52 51 51 50 50 50 50 50 51 52 52 52 52 52 52 51 50 50 49 49 49 49 49 49 49 49 49 48 48 48 48 47 47 47 47 47 47 47 47 46 46 46 46 46 45 45 45 45 45 45 45 45 46 46 48 49 50 50 51 51 52 52 53 54 57 58 60 62 65 77 95 117 138 156 164 163 159 152 143 133 117 85 47 13 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 95 95 95 95 95 97 99 101 103 101 96 99 101 94 72 50 41 29 16 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 19 45 82 103 105 104 100 94 80 73 72 75 86 120 149 173 190 199 199 198 195 191 186 179 170 158 141 120 91 75 64 56 53 52 51 50 50 50 50 50 50 51 51 52 52 52 52 52 51 50 50 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 47 47 47 47 46 46 45 45 44 44 44 44 45 45 46 47 49 50 51 51 51 52 53 54 56 58 59 61 66 75 91 111 134 156 162 162 159 152 141 132 113 83 42 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 95 95 95 95 95 97 99 101 104 104 98 98 100 98 84 48 34 22 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 30 60 95 105 105 102 96 88 74 71 73 82 100 139 167 186 197 200 198 196 192 187 181 172 160 143 123 100 75 63 56 53 52 51 50 50 50 49 50 50 51 52 52 53 53 52 52 51 50 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 48 48 47 47 46 45 45 44 44 44 44 44 45 46 48 49 50 51 51 51 52 53 55 57 59 61 64 72 85 105 137 153 161 162 160 149 141 132 114 80 25 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 95 95 94 95 95 97 99 102 104 106 103 98 99 101 98 57 33 17 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 15 43 76 101 106 103 98 91 81 70 70 77 92 117 159 183 195 200 200 196 193 188 183 176 164 147 126 104 82 63 56 53 52 51 50 50 49 49 49 50 51 52 52 53 53 53 52 51 50 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 50 50 50 50 51 51 50 50 49 47 46 45 44 44 44 44 44 44 45 47 48 50 51 51 51 52 53 54 56 59 61 63 68 77 106 134 152 162 163 160 150 140 131 119 59 22 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 94 94 95 95 99 102 104 105 107 107 102 100 100 103 89 47 20 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 27 61 92 104 105 100 93 83 73 68 74 88 111 142 182 194 200 200 198 193 188 182 175 167 147 125 102 82 65 55 53 52 51 50 49 49 49 49 50 51 52 53 53 53 53 52 51 50 49 49 49 49 49 49 49 49 49 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50 51 51 51 52 52 52 51 50 48 46 44 44 43 43 43 44 45 47 48 50 51 51 52 52 52 55 58 60 62 64 73 93 119 143 160 163 161 153 143 133 115 66 28 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 94 94 95 96 101 103 105 107 107 108 105 102 100 102 97 67 34 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 39 72 97 104 104 96 87 78 70 69 79 99 127 160 191 198 200 198 195 190 183 177 168 157 131 108 87 70 58 53 52 51 50 49 49 49 49 50 51 52 53 53 53 53 52 51 50 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 47 47 46 46 46 46 46 47 47 48 48 49 50 51 51 52 52 53 53 52 52 50 48 46 45 44 43 43 44 44 46 47 50 51 51 52 52 53 54 57 59 62 66 75 91 114 140 159 161 159 153 142 127 101 61 23 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 94 94 95 97 102 104 106 107 108 109 108 104 101 102 101 84 51 18 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 16 51 81 100 103 102 92 82 74 69 72 87 113 144 176 198 200 199 196 192 186 179 171 160 145 115 92 74 62 55 52 51 50 50 49 49 49 50 50 52 53 53 53 53 53 51 50 50 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 47 46 46 45 44 44 44 44 44 45 45 46 47 48 48 50 50 51 52 52 53 53 54 53 53 51 50 48 46 44 43 43 43 44 45 47 49 50 51 52 52 53 54 56 59 62 66 74 89 112 145 156 160 159 152 136 122 92 53 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 94 94 96 98 103 105 107 107 108 109 109 106 103 101 102 96 68 32 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 25 63 88 102 103 99 88 78 72 69 75 97 127 160 188 202 200 198 194 189 181 174 164 150 131 99 79 65 56 53 51 51 50 49 49 49 49 50 51 53 53 54 53 53 52 51 50 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 48 46 45 44 43 43 43 43 43 43 44 44 45 46 46 47 48 49 50 51 52 52 53 54 54 54 54 54 53 51 49 47 44 44 43 43 44 45 47 49 50 51 52 52 52 54 56 60 62 66 72 85 120 143 156 161 160 146 135 116 86 38 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 93 94 96 100 105 106 107 108 108 109 109 108 106 101 102 101 83 52 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 33 74 95 102 103 95 83 75 70 69 80 109 143 174 197 203 199 195 191 185 177 168 155 138 116 84 68 58 54 52 51 50 49 49 49 49 50 51 52 53 54 54 53 52 51 50 49 49 49 49 49 49 49 49 49 49 49 50 50 50 49 48 47 45 43 42 42 42 42 42 43 43 43 44 44 45 46 47 47 48 49 50 51 52 52 53 54 54 54 55 55 55 54 53 51 47 45 44 43 43 43 44 46 48 50 52 52 52 52 53 56 60 62 65 69 88 119 143 158 162 158 144 132 112 77 15 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 93 95 97 102 106 107 107 107 108 108 109 109 108 103 102 102 96 77 35 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 8 49 83 98 101 101 90 79 73 70 71 91 128 162 188 201 202 196 192 187 180 170 158 142 121 96 69 59 54 52 51 50 49 48 48 48 49 51 52 53 54 54 53 53 52 50 49 49 49 49 49 49 49 49 49 49 50 50 50 50 49 47 44 43 42 41 42 42 42 43 43 44 45 46 47 47 48 49 49 49 50 50 51 51 52 52 53 54 54 54 55 55 55 55 55 54 52 50 47 45 43 43 43 44 45 47 50 51 52 52 52 53 55 58 62 64 69 83 109 137 157 161 157 145 131 118 57 20 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 94 96 99 103 107 107 107 107 107 107 108 109 108 106 102 102 100 86 54 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 13 60 88 99 101 100 85 76 71 70 73 102 142 174 195 202 201 194 189 183 175 164 150 130 107 83 62 56 53 52 51 49 48 48 48 49 50 52 53 54 54 54 53 52 51 50 49 49 49 49 49 49 49 49 49 50 50 50 49 48 46 43 42 41 41 41 42 43 44 45 46 47 48 48 49 49 50 50 50 50 50 51 51 52 52 53 53 54 54 55 55 55 55 55 55 55 54 52 50 48 46 44 43 43 44 45 48 50 51 52 52 53 54 55 58 62 66 72 86 108 138 159 159 154 143 127 94 46 16 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 94 96 100 104 107 107 107 107 106 106 107 108 109 108 103 103 102 94 73 17 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 19 69 91 100 100 98 82 74 70 71 77 115 155 183 199 202 199 191 186 180 171 157 140 118 94 73 57 54 52 51 50 49 48 48 48 49 51 52 53 54 54 54 53 52 51 50 49 49 49 49 49 49 49 49 50 50 50 49 48 46 43 41 41 41 41 42 44 45 46 47 48 49 49 50 50 50 50 50 50 50 50 51 51 51 52 52 53 54 54 55 55 55 55 55 55 55 55 54 52 50 48 45 44 43 43 44 45 48 50 51 52 53 53 54 56 58 63 66 73 87 111 146 157 158 152 140 116 75 37 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 94 97 101 105 107 107 107 107 106 105 106 107 109 109 104 103 102 99 88 29 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 8 25 77 94 100 99 95 78 72 69 72 82 128 167 190 201 202 196 188 182 176 166 150 129 106 83 64 54 53 51 50 49 48 48 48 49 50 51 53 53 54 54 53 52 51 50 50 49 49 49 49 49 49 49 50 50 50 50 48 46 43 41 40 41 42 43 44 46 48 48 49 49 50 50 50 50 50 50 50 50 50 50 50 50 51 51 51 52 53 54 54 55 55 55 55 55 55 55 55 54 53 51 47 45 44 43 43 44 46 48 50 52 53 53 53 54 56 60 63 67 73 85 124 147 157 158 152 130 103 62 24 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 95 98 102 106 107 107 107 106 105 104 105 106 108 109 105 103 103 101 97 46 16 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 11 32 84 96 100 98 93 75 70 68 73 89 141 177 196 202 201 193 186 179 172 162 141 118 94 73 59 53 52 51 50 48 48 48 48 49 50 52 53 53 54 54 53 52 51 50 50 50 49 49 49 49 49 50 50 50 50 49 46 43 41 40 40 41 43 45 47 48 49 49 49 50 50 50 50 50 50 51 51 51 50 50 50 50 49 49 49 50 51 53 53 54 55 55 55 55 55 55 55 55 54 53 50 47 45 44 43 43 44 46 48 50 52 53 53 54 54 57 61 64 67 71 93 127 149 160 160 142 126 90 47 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 95 98 103 107 107 107 106 106 105 103 104 105 106 109 107 104 103 102 101 65 27 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 15 42 90 97 100 97 88 72 69 69 78 100 157 186 199 202 201 189 182 175 166 154 128 103 81 64 55 52 51 50 49 48 48 48 49 49 51 53 53 53 53 53 53 51 50 50 50 50 50 49 49 50 50 50 50 50 50 46 42 40 40 40 42 44 46 48 48 49 49 49 50 50 51 52 53 54 55 56 56 55 54 53 51 50 49 49 48 47 47 48 50 51 53 54 54 55 55 55 55 55 55 54 52 50 48 46 44 43 44 44 46 48 51 52 53 53 54 55 58 61 64 67 73 92 122 149 161 159 140 120 88 35 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 95 99 103 107 107 107 106 105 104 103 103 104 105 108 107 104 103 102 102 78 34 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 19 49 93 98 99 95 85 70 68 70 82 109 167 190 200 201 199 186 179 171 161 147 118 93 73 59 54 52 51 50 48 48 48 48 49 50 51 53 53 53 53 53 52 51 50 50 50 50 50 50 50 50 50 50 50 50 48 42 40 40 40 41 44 46 47 48 48 49 49 50 51 53 58 62 67 71 74 77 77 76 74 71 65 60 56 52 49 47 47 47 47 48 50 51 53 54 54 55 55 55 55 54 53 52 50 47 45 44 44 44 45 46 49 51 52 53 54 55 57 59 62 65 69 78 99 126 154 161 153 136 108 68 15 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 95 99 103 107 107 107 106 105 103 103 103 103 105 108 108 104 103 103 102 87 42 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 23 55 94 98 98 94 83 69 68 72 87 118 175 194 201 201 197 183 176 168 156 139 108 85 67 56 53 51 50 49 48 48 48 48 49 50 51 53 53 53 53 53 52 51 50 50 50 50 50 50 50 50 50 50 50 49 45 40 39 39 40 42 46 47 48 48 48 49 51 53 58 64 73 80 86 91 96 100 101 101 100 97 91 84 76 69 61 54 50 48 46 47 48 49 51 52 53 54 54 54 54 54 54 53 51 49 47 45 44 44 44 45 48 50 52 53 53 54 56 58 60 63 67 71 82 103 134 160 159 147 127 99 34 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 96 99 104 107 107 107 106 104 103 102 102 103 104 108 108 104 103 103 102 93 50 20 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 5 6 7 7 6 5 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 8 26 61 95 98 98 93 81 69 68 73 91 126 183 196 201 200 195 181 173 164 151 131 99 77 62 55 53 51 50 49 48 48 48 49 49 50 51 52 53 53 53 53 51 50 50 50 50 50 50 50 50 50 50 50 49 47 42 39 39 40 41 44 47 47 48 48 48 50 54 60 68 77 88 96 102 108 112 117 119 121 121 121 117 111 103 94 83 69 61 54 50 47 47 48 49 50 52 53 53 54 54 54 54 53 52 50 48 46 44 44 44 44 46 49 51 52 53 54 55 57 59 62 66 68 72 84 108 150 159 155 142 122 61 25 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 96 99 104 107 107 107 106 104 103 102 102 102 104 108 108 105 103 103 103 97 58 25 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 6 6 6 5 5 4 4 4 6 8 14 18 21 21 19 14 9 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 10 29 67 96 98 97 91 79 68 68 75 95 134 189 198 202 199 192 179 170 160 145 123 90 70 59 54 52 51 49 48 48 48 48 49 50 50 51 52 52 53 53 52 51 50 50 50 50 50 50 50 50 50 50 50 48 45 40 39 39 40 43 46 47 47 47 48 49 54 62 71 82 90 98 103 108 112 116 120 123 125 127 129 131 131 129 124 114 96 82 69 58 50 47 47 47 48 50 52 52 53 53 54 54 53 53 51 50 47 45 44 44 44 45 47 50 52 53 54 54 56 58 61 65 68 70 74 82 127 153 161 154 134 93 44 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 96 99 103 107 107 107 106 104 102 102 102 102 104 108 108 105 103 103 103 100 65 30 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 9 14 23 30 36 41 44 45 44 41 37 33 28 27 28 32 41 57 69 76 79 79 71 57 41 25 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 12 34 74 97 98 96 90 77 68 68 76 99 143 193 200 202 198 189 176 167 154 137 113 80 64 56 53 52 50 49 48 48 48 48 49 50 51 51 52 52 52 52 52 51 50 50 50 50 50 50 50 50 50 51 49 46 42 39 38 39 42 45 46 47 47 47 49 53 63 73 81 87 92 99 103 107 109 112 115 118 121 125 128 132 133 134 134 134 130 119 104 88 71 56 50 48 47 48 50 51 52 53 53 53 53 53 52 51 49 47 45 44 43 44 46 48 50 53 54 54 55 57 59 65 67 69 70 73 90 129 152 160 156 125 77 37 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 95 99 103 107 107 107 106 105 103 102 102 103 105 108 108 104 102 102 103 101 69 33 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 10 20 32 44 55 65 70 74 77 79 80 79 78 76 73 69 65 64 67 73 85 91 95 97 98 96 90 82 70 53 25 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 14 38 78 97 98 96 89 76 67 68 77 102 149 195 200 202 197 187 174 164 150 131 106 74 61 54 52 52 50 48 48 48 48 48 49 50 50 51 51 52 52 52 52 51 50 50 50 50 50 50 50 50 51 50 48 44 40 38 38 40 43 46 46 46 47 48 51 57 68 75 81 87 90 92 91 89 87 86 86 89 93 98 105 116 123 129 133 135 135 132 126 116 100 76 63 54 49 47 48 50 51 52 52 53 53 53 52 52 50 48 46 45 44 44 45 47 49 52 54 54 55 56 58 63 67 69 70 72 79 105 135 158 161 138 104 61 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 95 98 103 107 107 107 107 105 103 103 102 104 106 109 108 103 102 102 104 102 72 35 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 12 23 41 53 64 73 80 86 88 90 92 93 94 94 93 93 92 90 88 88 89 92 98 101 103 105 105 105 104 101 95 85 64 43 23 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 16 42 81 97 98 96 88 75 67 68 78 104 152 196 201 202 197 185 172 162 146 125 99 69 59 54 52 51 49 48 48 48 48 49 49 50 50 51 51 51 52 51 51 51 50 50 50 50 50 50 50 51 51 50 47 43 39 38 38 41 44 46 46 46 46 49 53 60 70 75 79 81 80 75 70 67 64 62 62 64 66 70 75 86 96 106 117 127 135 137 136 132 124 103 84 68 57 50 48 49 50 51 52 53 53 53 52 52 50 49 47 45 44 44 44 46 48 51 53 54 54 55 57 61 67 70 71 72 74 87 115 145 162 152 125 85 42 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 95 98 102 107 107 107 107 106 104 103 103 105 107 109 108 103 101 102 104 103 74 37 7 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 11 22 36 53 74 83 88 90 91 91 91 91 92 93 94 95 96 96 97 99 99 99 100 101 103 104 105 105 106 106 106 105 105 104 97 79 54 29 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 19 45 84 98 98 95 88 74 67 68 79 106 155 197 202 202 196 183 170 159 142 120 93 65 57 53 52 51 49 48 48 48 48 49 49 50 50 51 51 51 51 51 51 51 50 50 50 50 50 50 50 51 51 50 46 41 38 37 39 42 45 46 46 46 47 49 55 61 69 73 73 71 65 56 52 49 47 47 47 47 48 49 51 57 65 76 90 105 123 131 136 139 139 128 110 90 71 57 49 49 49 50 51 52 52 53 52 52 51 49 48 46 45 44 44 45 47 50 53 54 54 55 56 60 66 70 73 73 73 76 95 125 157 162 142 107 66 23 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 95 97 101 106 107 107 108 107 105 104 105 107 109 109 106 101 101 102 105 103 75 38 8 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 13 34 57 77 87 90 91 92 91 90 86 84 84 83 84 87 90 93 95 98 100 101 102 103 103 104 105 105 105 105 105 105 106 106 106 105 103 93 69 28 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 21 48 85 98 98 95 88 74 67 67 79 107 156 198 202 201 195 182 168 157 138 115 88 62 56 53 52 51 49 48 48 48 48 49 49 50 50 50 51 51 51 51 51 51 50 50 50 50 50 50 51 51 51 49 44 40 38 37 39 43 45 46 46 46 47 50 55 61 67 67 64 57 48 45 44 44 43 43 44 44 44 44 45 45 47 50 55 66 92 114 129 139 142 142 135 118 95 71 53 50 49 49 50 52 52 52 52 52 51 50 49 47 45 44 44 45 46 49 53 54 54 55 56 59 64 70 74 76 74 74 80 101 144 164 152 128 92 41 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 95 97 100 106 107 107 108 108 108 107 108 108 109 109 103 100 100 102 105 102 73 37 9 6 7 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 13 31 68 82 88 90 91 88 82 75 70 65 62 61 61 62 64 68 73 79 86 93 100 102 103 104 104 104 103 103 103 102 102 102 102 103 104 105 105 104 100 90 30 10 2 1 1 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 5 23 51 85 98 98 95 88 75 67 67 79 107 156 198 202 201 195 181 165 153 134 109 83 59 55 52 51 50 48 48 48 48 48 49 50 50 50 50 50 51 51 51 51 51 51 50 50 50 50 51 51 51 51 49 43 39 37 37 40 44 45 45 45 45 46 50 54 59 59 57 51 46 44 43 43 43 43 43 43 43 43 44 44 44 44 44 45 46 51 64 85 110 133 143 145 142 131 108 73 59 52 49 50 51 52 52 52 52 52 51 49 48 46 45 44 44 45 47 51 53 54 55 55 58 62 69 75 80 79 76 76 83 103 158 163 151 121 75 20 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 94 96 99 106 107 107 108 108 108 109 109 109 109 108 101 100 100 102 105 101 69 36 12 9 9 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 11 29 50 69 82 87 88 86 82 74 69 65 62 60 58 57 58 59 61 65 70 77 85 93 100 101 102 102 102 103 102 102 102 102 101 100 99 99 99 101 102 103 103 100 73 34 12 2 1 2 7 9 8 5 2 1 1 1 1 1 1 1 1 1 1 5 24 52 85 98 98 95 88 75 67 68 78 106 156 198 202 201 194 180 164 151 131 105 79 58 54 52 51 50 48 48 48 48 49 49 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 51 51 51 48 42 38 37 37 41 44 45 45 45 45 46 49 53 55 55 51 47 44 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 46 50 59 74 97 130 141 145 142 133 101 76 61 52 50 50 51 52 52 52 52 51 50 49 47 45 44 44 45 46 51 53 54 55 55 57 61 67 73 81 83 80 77 78 85 140 159 156 136 103 38 14 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 91 94 96 98 105 107 107 107 108 109 109 109 109 108 106 100 99 100 102 104 99 65 35 15 13 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 20 39 57 73 84 86 85 82 78 73 66 63 60 58 57 56 56 57 58 60 64 70 77 85 94 100 101 101 102 102 102 102 101 100 98 97 96 95 95 95 96 97 99 101 103 95 66 36 11 3 3 8 15 20 19 12 5 2 1 1 1 1 1 1 1 1 5 24 52 85 98 98 95 88 76 67 68 77 103 154 198 202 201 194 180 164 150 128 103 76 57 54 52 51 50 48 48 48 48 49 49 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 51 51 48 41 38 37 37 41 44 45 45 45 45 45 48 50 51 51 47 45 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 47 54 67 101 125 139 146 145 126 99 76 59 52 50 51 51 52 52 52 52 51 49 48 45 45 44 45 46 50 53 54 55 55 56 60 65 72 81 86 84 81 78 77 113 148 159 150 127 61 26 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 89 93 95 97 104 106 106 107 108 109 109 109 108 106 103 99 98 100 103 104 96 60 33 18 17 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 8 19 47 69 79 82 83 82 79 74 70 67 63 61 59 58 57 56 56 56 58 60 65 71 78 87 95 101 101 102 102 103 102 100 97 95 93 91 90 90 91 92 93 93 95 97 101 102 93 66 34 11 5 7 17 29 36 29 17 8 3 1 1 1 1 1 1 1 5 23 52 85 98 98 95 89 76 67 68 76 100 151 198 202 202 194 180 163 149 126 100 74 56 53 52 51 50 48 48 48 49 49 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 51 48 41 38 37 37 41 43 44 44 44 44 45 47 48 49 48 45 44 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 45 48 68 99 124 141 148 144 123 97 72 56 51 51 51 52 52 52 52 51 50 48 46 45 45 45 45 49 52 54 55 55 56 59 65 72 81 88 88 85 81 76 88 132 156 161 145 86 42 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 88 93 95 97 102 106 106 106 106 108 108 108 107 104 99 97 97 100 103 104 93 55 32 22 20 11 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 24 56 77 81 82 81 78 72 70 68 66 64 63 61 59 58 57 56 56 57 59 62 67 72 79 88 96 103 105 105 104 103 99 94 90 87 85 84 84 85 87 90 92 92 93 93 95 101 102 97 76 32 10 11 15 26 50 53 40 22 7 2 1 1 1 1 1 1 4 22 50 83 98 98 96 89 77 67 67 74 97 146 198 203 202 195 180 163 148 125 99 73 56 53 52 51 50 48 48 48 49 49 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 48 41 38 36 37 41 43 44 44 44 44 44 45 47 47 46 44 44 43 43 43 43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 42 42 43 43 47 67 97 127 145 149 142 120 92 65 52 51 51 51 52 52 52 51 50 49 46 45 45 45 45 48 51 54 55 55 56 58 64 71 79 90 91 89 85 79 77 115 148 165 157 113 61 26 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 85 92 94 96 100 106 106 106 105 105 106 106 104 100 96 96 97 100 103 103 84 50 32 25 22 8 3 1 1 1 1 1 1 1 1 1 1 1 1 1 2 18 46 72 80 79 75 73 72 71 69 68 67 66 65 64 63 61 59 57 56 56 59 62 66 70 78 89 99 106 107 106 104 100 95 86 83 81 80 80 80 81 83 86 89 91 92 92 92 93 94 100 102 101 96 53 30 23 26 32 64 66 58 39 12 2 1 1 1 1 1 3 18 44 79 97 98 96 91 79 67 67 72 91 136 195 202 202 196 182 164 147 124 98 71 55 53 52 51 49 49 48 49 49 49 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 48 42 38 36 36 40 42 44 44 44 44 44 44 45 45 45 44 44 44 44 44 44 44 44 43 43 43 42 42 42 42 42 41 40 40 39 40 40 41 42 43 46 63 91 128 147 148 141 123 90 59 53 51 51 52 52 52 52 51 49 47 46 45 45 45 47 51 53 55 55 56 57 63 70 77 90 93 94 92 85 76 87 123 157 164 142 92 48 16 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 92 94 95 98 106 106 106 104 103 103 103 100 97 96 95 98 101 103 102 76 46 32 26 21 5 2 1 1 1 1 1 1 1 1 1 1 1 1 3 24 52 69 76 76 74 73 72 72 73 71 69 68 67 67 66 64 61 59 57 57 58 62 66 70 80 92 100 105 107 106 103 97 91 85 80 78 76 75 74 75 77 80 83 87 91 92 92 92 93 94 96 99 101 101 89 71 51 36 37 51 65 67 59 40 9 3 1 1 1 1 2 15 39 75 97 98 97 92 81 68 67 70 87 127 191 202 203 197 183 165 148 125 98 71 55 53 52 51 49 49 48 49 49 50 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 49 42 38 36 36 39 42 43 44 43 43 43 44 44 45 45 45 44 44 44 44 44 44 44 43 43 42 42 42 41 41 41 40 39 38 37 37 38 39 41 42 44 51 68 101 139 146 146 136 113 72 59 53 52 52 52 52 52 51 50 48 46 45 45 45 47 50 53 55 55 56 57 62 70 77 89 94 97 95 91 79 80 108 142 165 155 115 69 28 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 91 94 95 97 105 106 106 105 102 101 100 98 96 95 96 99 101 102 99 67 44 32 26 17 3 1 1 1 1 1 1 1 1 1 1 1 1 6 18 52 70 75 75 73 74 77 77 76 75 73 70 69 69 68 66 64 61 59 58 59 62 67 72 78 90 100 105 107 106 102 96 89 83 78 73 71 69 68 68 70 72 76 80 84 90 91 92 92 93 94 95 96 99 101 101 93 79 64 51 50 61 68 68 60 28 11 3 1 1 1 2 11 32 69 95 97 97 93 83 68 67 69 83 117 186 200 204 198 185 166 149 126 99 72 55 53 51 51 49 49 49 49 49 50 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 51 50 43 39 36 36 38 41 42 43 43 43 43 43 44 44 45 44 44 44 44 44 44 44 43 43 42 42 41 40 40 40 40 39 38 37 36 35 35 36 38 41 42 45 54 75 124 141 147 143 131 89 67 56 52 52 52 52 52 52 51 48 47 45 45 45 46 50 53 55 56 56 57 62 69 77 87 95 98 98 96 84 79 94 123 161 161 135 90 44 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 79 90 94 94 95 104 105 106 105 102 99 98 97 96 96 97 100 101 100 93 59 41 31 24 12 1 1 1 1 1 1 1 1 1 1 1 1 6 18 42 74 75 74 72 75 80 84 85 82 76 73 71 70 69 68 66 64 61 60 60 63 67 72 78 86 99 104 106 105 103 95 87 81 75 71 66 63 62 62 63 65 68 72 76 81 88 90 92 92 93 95 95 95 96 98 100 100 98 90 71 60 60 66 71 72 51 25 9 3 1 1 1 8 26 61 94 97 97 94 86 70 67 68 79 107 179 198 204 199 187 167 150 127 100 73 55 53 51 51 49 49 49 49 49 50 50 50 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 50 45 40 37 36 37 39 41 42 43 43 43 43 43 44 44 44 44 44 44 44 44 43 43 42 41 40 40 40 39 39 39 38 38 37 34 33 33 33 35 40 41 43 46 55 103 132 144 147 143 108 78 61 53 52 52 52 52 52 51 49 47 46 45 45 46 49 53 55 56 56 57 61 68 77 86 94 99 100 100 90 81 84 106 153 164 150 111 64 21 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 77 90 94 94 94 102 105 106 105 102 99 97 96 96 96 98 100 101 97 86 50 37 29 20 7 1 1 1 1 1 1 1 1 1 1 1 2 16 39 71 76 72 70 74 84 92 92 90 86 77 73 71 70 70 68 66 64 63 62 62 66 70 77 85 94 104 105 105 103 96 84 78 72 67 61 58 58 59 60 61 62 64 67 72 77 85 89 91 92 93 95 96 96 95 94 94 95 95 94 93 77 69 67 71 76 73 46 22 6 2 1 1 5 19 52 91 96 97 95 89 72 67 67 75 96 170 196 205 201 190 170 152 129 102 75 55 53 51 51 49 49 49 49 49 50 50 50 50 50 50 50 49 49 50 50 50 51 51 51 51 51 51 51 51 51 51 46 41 37 36 37 38 40 41 42 43 43 43 43 43 43 44 44 44 44 44 43 42 41 40 40 40 39 39 39 39 38 38 37 36 33 32 31 31 32 37 40 42 44 46 78 119 140 147 147 126 91 68 55 52 52 52 52 52 52 49 47 46 45 45 46 49 52 55 56 56 57 61 67 77 86 93 99 102 102 96 84 81 95 138 164 159 130 86 34 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 75 89 93 93 94 99 103 105 106 105 100 98 97 97 97 100 100 99 92 74 43 30 22 14 3 1 1 1 1 1 1 1 1 1 1 2 15 43 68 75 71 70 77 87 98 101 100 95 88 81 74 73 73 72 71 67 65 64 64 66 74 85 95 103 107 106 101 95 87 79 71 65 59 56 55 56 56 56 56 55 56 57 60 64 69 77 84 88 90 92 94 97 98 98 98 97 95 93 92 91 90 83 77 74 75 79 75 54 28 7 1 1 3 12 36 84 94 97 96 92 75 69 67 71 83 155 190 204 203 193 173 156 133 106 78 56 53 51 51 50 49 49 49 49 50 50 50 50 50 50 50 49 49 50 50 50 51 51 52 52 51 51 51 51 52 51 49 44 39 37 37 38 38 39 39 41 42 42 43 43 43 43 43 43 42 41 40 40 40 40 40 40 40 40 39 39 39 38 37 36 33 31 29 29 29 33 38 41 43 44 56 96 127 145 147 140 109 81 60 53 52 52 52 52 52 50 48 47 46 46 46 49 52 55 56 56 57 60 67 76 86 91 98 102 103 102 90 83 87 109 160 161 147 114 58 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 73 88 93 93 93 97 101 104 106 106 102 101 100 99 99 100 100 96 85 65 35 25 17 9 1 1 1 1 1 1 1 1 1 1 1 9 37 59 72 73 70 74 85 96 104 106 104 99 93 87 81 79 77 75 72 68 67 69 74 84 93 99 101 102 102 95 88 83 77 70 59 56 53 52 51 51 50 51 51 53 54 55 57 59 63 70 77 82 86 89 92 95 97 98 99 99 99 98 97 95 93 90 84 78 76 78 77 69 51 23 3 1 2 8 24 74 91 96 96 94 79 70 67 69 77 139 182 202 204 196 177 160 137 110 81 57 53 51 51 50 49 49 49 49 50 50 51 50 50 50 50 49 49 49 50 50 51 51 52 52 52 51 51 51 52 52 50 46 41 38 37 38 38 38 38 39 40 40 41 41 42 42 41 41 40 39 39 39 40 40 40 41 41 42 42 42 42 41 40 38 34 31 29 28 28 31 36 40 42 44 51 82 116 141 147 143 120 91 66 54 53 53 53 52 52 51 49 47 46 46 46 49 52 55 56 57 57 60 66 76 85 90 96 101 104 103 95 86 84 94 151 159 154 130 80 21 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 72 87 93 93 92 95 98 103 106 106 104 102 101 101 101 101 99 91 75 53 27 20 12 5 1 1 1 1 1 1 1 1 1 1 3 24 53 68 73 71 70 80 92 102 107 108 105 101 97 91 86 83 81 77 74 72 77 82 89 96 101 101 98 95 92 85 78 70 63 57 51 48 47 45 44 44 44 46 48 50 52 53 54 55 57 63 69 75 81 84 87 90 93 95 98 100 101 101 100 99 97 96 92 88 83 80 79 76 67 45 11 4 2 5 15 62 86 95 96 95 82 72 67 68 73 122 173 198 205 199 180 164 141 115 85 59 54 52 51 50 49 49 49 49 50 51 51 51 50 50 50 50 49 50 50 50 51 51 52 52 52 51 51 51 52 52 51 49 44 39 38 38 38 38 38 38 38 39 39 39 40 39 39 39 39 39 39 40 40 41 43 44 44 45 45 46 46 45 44 42 37 32 29 28 28 29 34 39 42 43 48 71 105 136 147 145 128 101 73 56 53 53 53 53 52 51 49 47 46 46 47 49 52 55 56 57 57 60 66 76 85 89 94 99 104 104 99 90 83 86 138 156 158 142 102 33 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 71 87 92 92 92 93 96 101 105 106 105 103 102 102 102 101 96 83 64 40 20 14 8 3 1 1 1 1 1 1 1 1 1 3 8 44 65 73 72 69 73 87 98 106 109 108 106 103 100 95 90 87 84 82 80 81 89 95 100 101 100 96 90 85 79 72 65 57 51 46 44 42 40 38 37 37 39 41 43 46 48 50 51 52 53 56 61 67 73 78 82 85 87 91 94 98 100 101 102 101 101 100 99 97 92 84 82 80 76 66 26 10 3 4 8 48 79 93 96 96 86 74 68 67 70 107 161 192 205 202 185 168 146 120 90 61 55 52 51 50 49 49 49 49 50 51 51 51 51 50 50 50 50 50 50 50 51 51 52 52 52 52 51 51 51 52 52 51 48 42 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 40 41 42 44 45 46 47 47 48 49 49 49 49 47 41 34 30 28 28 29 33 38 41 43 46 63 96 130 146 146 134 108 79 58 53 53 53 53 53 51 49 48 47 47 47 50 53 55 57 57 58 60 66 75 85 88 93 97 103 104 102 93 85 84 122 151 160 150 123 48 18 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 70 86 92 92 91 91 92 98 104 106 105 104 103 103 102 101 88 71 50 28 13 9 5 1 1 1 1 1 1 1 1 1 1 6 19 63 72 73 71 69 76 92 103 108 110 108 107 105 102 99 95 92 91 90 91 96 98 99 99 98 93 89 83 75 65 52 46 43 42 40 37 35 35 34 34 34 35 36 38 40 44 46 48 48 49 50 53 58 65 71 78 80 82 84 87 94 98 101 102 102 101 101 100 99 98 91 86 83 81 78 51 20 7 4 5 32 69 88 96 96 89 77 70 67 68 92 147 185 204 204 189 173 152 126 96 64 56 52 51 50 49 49 49 49 50 51 51 51 51 51 50 50 50 50 50 50 51 51 52 52 52 52 51 51 51 52 52 52 50 47 40 39 39 39 39 38 38 38 38 38 38 38 38 38 39 41 43 44 46 47 47 48 48 48 48 49 51 52 52 51 46 38 32 28 28 29 33 38 41 43 45 58 89 124 145 146 138 114 85 61 54 53 53 53 53 52 50 48 47 47 47 50 53 56 57 57 58 61 66 75 85 88 91 95 101 104 103 96 87 83 107 145 159 156 140 66 27 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 69 86 91 91 91 89 88 92 98 105 106 105 105 103 101 89 71 50 30 14 7 5 3 1 1 1 1 1 1 1 1 1 4 16 42 73 75 72 68 68 79 95 104 109 109 109 108 107 106 105 103 102 101 100 100 99 98 97 93 86 72 63 55 48 43 40 38 37 36 35 35 34 34 34 34 34 34 34 35 37 40 42 44 45 45 45 45 47 51 56 66 72 77 80 81 84 90 95 99 101 101 101 101 101 102 101 97 92 87 85 76 46 21 6 6 16 52 79 94 95 93 81 72 67 67 78 124 169 201 207 195 180 160 136 105 69 58 53 51 50 49 49 49 49 49 51 51 51 51 51 51 50 50 50 50 50 50 51 52 52 52 52 52 51 51 51 52 52 52 51 46 42 40 40 40 40 40 39 39 39 39 40 41 42 44 46 46 47 47 47 48 48 48 48 48 49 51 53 53 53 50 41 34 30 29 30 33 38 41 43 45 55 84 118 144 146 140 119 91 64 54 54 53 53 53 52 50 49 48 48 48 51 54 56 57 57 58 61 67 75 84 87 89 92 97 103 103 99 91 84 93 135 155 159 153 92 42 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 68 85 91 91 90 88 85 85 90 100 103 103 101 97 91 74 53 33 17 9 6 3 1 1 1 1 1 1 1 1 1 1 9 27 59 75 74 70 67 67 80 95 104 108 109 109 108 108 107 106 104 102 101 100 99 96 91 82 72 62 51 46 43 40 38 37 37 37 38 38 38 38 38 38 37 36 35 35 35 36 38 40 41 43 43 43 43 43 44 46 52 58 64 71 75 80 83 89 94 98 99 100 100 100 100 101 99 96 93 89 84 66 39 15 7 12 38 67 89 95 94 85 75 68 67 72 107 153 193 207 199 185 167 143 114 75 61 54 51 50 49 49 49 49 49 50 51 51 51 51 51 51 50 50 50 50 50 51 52 53 53 52 52 52 51 51 52 52 52 52 50 46 43 42 41 41 42 42 42 42 43 43 44 45 46 47 47 47 47 48 48 48 48 49 49 50 52 54 55 55 51 42 35 31 30 31 35 39 42 43 45 54 83 117 143 146 141 121 93 66 55 54 53 53 53 52 51 49 48 48 49 51 54 57 57 58 58 61 67 76 83 85 87 89 94 102 103 100 94 84 89 126 150 161 157 110 55 21 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 67 84 90 91 90 89 82 79 81 89 94 95 91 84 75 51 33 20 11 7 4 2 1 1 1 1 1 1 1 1 1 3 17 40 70 77 72 68 66 67 80 94 103 108 109 108 108 108 107 105 103 101 99 95 90 79 70 61 53 46 41 40 39 39 40 41 42 43 44 44 45 45 44 43 42 40 38 37 36 35 37 38 40 41 42 42 42 42 42 42 44 48 52 57 63 69 74 80 87 94 98 99 99 99 99 100 100 99 96 93 90 80 56 30 11 11 27 55 82 94 94 88 79 70 66 69 92 137 181 205 203 191 174 152 123 82 65 55 52 50 49 49 49 49 49 50 51 52 52 52 52 52 51 51 50 50 50 51 52 53 53 53 52 52 51 51 52 52 52 52 52 50 47 45 43 42 43 43 43 44 44 45 45 46 46 47 47 47 47 48 48 48 49 49 50 51 54 55 56 56 51 42 35 31 31 32 36 39 42 43 45 55 83 117 143 145 141 121 94 66 55 54 53 53 53 52 51 50 49 49 49 52 55 57 58 58 58 62 68 76 82 84 85 87 91 100 102 101 96 85 87 117 144 161 160 126 69 29 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 67 84 90 90 90 89 81 74 71 75 80 80 74 65 53 28 17 11 8 6 2 1 1 1 1 1 1 1 1 1 1 7 27 53 75 77 70 66 65 66 80 93 101 106 107 107 107 106 104 102 98 94 89 82 72 58 50 44 41 40 40 41 42 43 44 47 48 49 49 50 50 50 50 49 48 45 43 40 38 36 36 37 38 39 41 41 41 41 41 41 41 42 43 45 49 57 62 69 76 85 94 97 98 99 99 99 100 100 99 96 93 89 73 48 18 12 19 44 72 92 93 91 82 72 66 67 81 119 166 202 205 195 181 160 132 90 69 58 52 50 49 49 49 49 49 50 51 52 52 53 53 53 52 51 51 51 51 51 52 53 53 53 53 52 52 51 51 52 52 52 52 52 51 49 47 45 44 44 44 45 45 46 46 46 47 47 47 48 48 48 49 49 50 50 51 54 56 57 57 57 51 41 35 32 32 33 37 40 43 44 46 58 86 119 143 145 140 120 93 66 55 54 54 53 53 52 51 50 49 49 50 53 56 58 58 58 59 62 68 77 81 82 83 84 87 98 101 101 97 87 86 109 138 160 161 139 83 39 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 66 83 89 90 90 89 81 71 64 62 63 58 50 39 26 17 14 10 7 4 1 1 1 1 1 1 1 1 1 1 2 12 37 63 78 77 68 65 64 65 78 90 98 103 105 105 103 102 99 95 86 76 66 56 48 43 42 41 41 41 45 46 48 49 49 49 50 50 50 51 51 52 52 52 52 50 48 45 42 39 36 36 37 38 40 40 41 41 41 41 41 41 41 41 42 44 47 53 60 69 84 92 96 98 98 99 99 100 99 99 96 94 87 68 32 15 17 33 59 87 93 92 85 76 67 66 73 103 146 195 205 200 188 169 143 99 75 61 53 51 50 49 49 49 49 50 51 52 53 54 54 54 53 52 51 51 51 51 52 53 53 53 53 53 52 51 51 51 52 52 53 53 52 52 50 48 47 46 46 46 46 46 46 47 47 48 48 48 48 49 50 50 51 52 53 56 58 58 58 57 48 39 34 32 32 34 38 41 43 44 47 61 91 122 143 144 138 118 91 66 55 54 54 53 53 53 51 50 50 50 51 54 57 58 58 58 59 62 69 77 80 80 81 82 84 95 100 101 98 89 86 102 132 158 162 149 97 49 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 66 82 88 89 89 90 87 74 60 53 49 41 35 30 24 17 14 9 4 2 1 1 1 1 1 1 1 1 1 1 4 22 50 74 80 75 67 63 63 63 71 79 84 87 88 87 81 76 70 62 53 48 45 44 43 43 44 45 47 49 49 49 49 49 49 49 49 50 50 51 52 52 53 54 54 54 54 52 49 46 41 38 36 36 37 39 39 40 40 40 40 40 40 40 41 41 42 43 45 48 60 75 87 95 98 99 99 99 100 99 98 97 95 85 64 23 20 25 42 74 92 92 89 82 70 66 68 85 119 175 206 204 195 180 158 114 86 67 56 51 50 49 49 49 48 49 51 52 53 54 55 55 55 54 53 52 52 52 52 53 54 54 54 53 53 52 51 51 51 51 52 52 53 53 53 53 52 51 50 49 49 48 48 48 48 49 49 49 50 51 52 52 53 54 56 59 59 59 57 53 43 37 34 34 34 37 41 43 45 45 50 70 101 129 144 144 134 112 85 63 55 54 54 54 54 53 52 51 51 51 52 56 58 58 59 59 59 63 70 77 78 78 78 78 80 91 98 100 98 91 85 95 124 154 162 156 114 65 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 65 81 87 88 88 90 88 79 66 54 49 42 37 32 27 19 15 9 3 1 1 1 1 1 1 1 1 1 1 1 9 33 59 78 81 74 66 62 61 61 65 69 72 72 71 68 62 58 54 50 47 45 44 44 45 46 47 48 48 49 49 48 48 48 48 48 48 48 49 50 51 52 53 55 56 57 57 55 53 50 46 42 39 37 36 37 38 38 39 39 40 40 40 40 40 41 41 41 42 43 48 56 68 82 93 98 99 99 100 100 99 98 97 92 82 39 27 25 35 59 88 91 90 85 74 66 67 76 102 154 200 204 200 188 169 127 96 74 59 52 50 49 49 49 48 49 50 52 53 55 56 56 56 56 55 53 53 53 53 53 54 54 54 54 53 52 51 51 51 51 51 52 52 53 53 53 53 53 52 52 51 51 51 51 51 51 51 52 52 53 53 54 55 56 58 59 59 58 55 49 39 36 35 35 36 40 43 44 45 46 54 80 110 135 144 143 129 105 80 61 55 54 54 54 54 53 52 52 52 52 54 57 58 59 59 59 59 64 70 77 77 76 75 76 77 88 96 99 98 92 85 92 120 150 163 159 125 76 31 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 65 80 86 87 87 89 89 84 73 59 52 47 41 36 32 22 16 8 2 1 1 1 1 1 1 1 1 1 1 2 15 43 67 81 82 73 65 61 60 59 60 61 61 60 58 55 51 49 47 45 45 45 45 46 47 48 48 49 49 48 48 48 48 48 47 47 47 48 48 49 51 52 54 55 57 58 59 59 57 55 50 46 43 40 37 37 37 38 38 39 39 39 39 40 40 40 40 40 41 41 43 46 54 65 80 93 97 99 99 100 99 98 98 96 92 59 36 28 32 46 82 88 90 87 79 67 66 70 88 129 191 202 202 195 179 141 108 82 64 54 50 50 49 49 48 49 50 51 53 55 57 57 57 57 57 55 54 54 54 54 54 54 54 54 54 53 52 51 51 51 51 51 52 52 53 53 53 53 53 53 53 53 53 53 53 53 53 53 54 54 55 56 57 58 59 60 58 55 50 44 37 36 36 36 38 42 44 45 46 48 63 92 119 139 144 141 122 97 74 59 55 54 54 54 54 53 52 52 52 53 56 58 59 59 59 59 60 65 71 76 76 74 74 73 74 85 94 98 97 93 85 90 115 145 163 161 135 88 39 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 64 79 85 86 86 89 89 87 80 66 57 53 48 43 39 27 17 8 2 1 1 1 1 1 1 1 1 1 1 3 22 53 74 83 83 72 65 61 59 57 56 55 54 52 50 48 46 46 45 45 45 46 47 48 48 49 49 49 49 49 49 48 48 47 47 47 47 48 48 49 52 54 55 57 58 60 61 61 61 59 54 50 47 43 40 37 37 37 38 38 39 39 39 39 39 39 39 39 40 40 41 42 44 50 62 82 92 97 99 99 99 99 98 98 96 78 49 35 32 38 72 85 89 88 83 69 66 67 78 105 176 197 204 200 189 155 122 93 70 57 51 50 49 49 48 48 49 51 53 55 58 58 59 58 58 57 56 55 55 55 55 55 55 55 55 54 52 51 51 51 50 51 51 51 52 53 53 53 53 53 54 54 54 54 54 54 54 55 55 55 56 58 59 59 60 59 56 51 45 40 36 36 37 38 41 44 45 46 48 52 75 105 128 142 144 137 113 88 68 57 55 54 54 54 54 53 53 53 53 54 58 59 60 60 59 59 60 65 71 76 76 73 72 71 72 82 93 97 97 93 85 88 111 141 163 162 143 98 48 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 62 78 83 84 85 87 89 89 85 76 64 60 56 52 45 33 19 9 2 1 1 1 1 1 1 1 1 1 2 5 30 62 79 85 84 71 65 61 59 56 52 51 49 47 46 46 45 45 45 45 47 48 48 49 49 50 51 51 51 51 49 49 48 47 47 47 47 48 49 50 54 57 59 60 61 62 62 63 63 62 60 55 50 46 44 40 38 38 38 38 39 39 38 38 37 37 37 38 38 39 40 41 42 43 45 63 81 92 97 99 99 99 99 98 98 91 63 44 34 35 60 80 88 89 87 73 67 66 71 85 156 190 203 203 197 169 136 105 79 61 52 50 49 49 48 48 49 50 52 54 58 59 60 60 59 58 57 57 56 56 55 55 55 55 55 54 53 52 51 51 50 50 50 50 51 52 52 53 53 53 54 54 54 55 55 55 55 55 56 57 58 59 59 59 59 56 51 45 41 38 37 37 39 41 44 46 46 47 51 59 90 119 136 144 143 130 102 79 62 55 55 54 54 54 54 54 54 54 54 56 59 60 60 60 59 59 61 66 72 75 75 72 70 70 70 80 91 96 97 94 85 87 108 136 163 163 150 108 57 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 60 75 81 82 82 85 88 89 88 83 72 66 62 58 52 39 21 9 2 1 1 1 1 1 1 1 1 1 3 9 43 72 84 86 85 71 65 62 59 56 50 48 47 46 46 46 46 46 46 47 49 49 50 51 51 52 52 52 52 51 48 47 47 47 47 48 50 52 55 58 60 61 61 62 62 63 63 64 64 64 63 61 57 51 47 44 42 41 41 40 39 39 38 38 37 37 37 37 38 38 39 40 41 42 42 44 55 72 88 97 98 98 99 98 98 96 82 59 41 38 47 71 84 88 88 80 70 66 67 72 120 169 196 206 204 186 157 125 95 71 55 52 50 49 49 48 48 49 51 53 57 59 60 61 61 60 60 59 58 57 57 57 57 56 56 55 54 53 52 51 50 50 49 49 49 49 50 50 51 52 52 53 53 53 54 55 55 56 57 57 58 58 58 57 53 47 43 40 39 38 39 41 43 45 46 47 48 51 61 78 112 133 142 143 139 112 86 68 57 55 55 55 55 54 54 54 55 55 56 59 61 61 61 60 60 60 62 67 73 75 74 70 69 68 69 77 89 95 96 94 85 86 104 131 162 164 156 119 69 21 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 57 73 79 80 80 82 86 88 88 86 78 73 69 65 59 45 25 10 2 1 1 1 1 1 1 1 1 1 5 14 52 77 86 87 85 71 65 62 60 56 50 48 46 46 45 46 46 47 48 49 50 50 51 51 52 52 51 51 49 48 47 46 47 48 49 53 55 57 58 59 60 61 61 62 62 63 63 63 63 63 63 63 60 57 52 46 44 43 42 41 40 40 39 38 37 37 37 38 38 38 39 40 41 41 42 42 46 55 69 88 97 98 98 98 98 97 90 70 50 40 44 63 78 87 88 83 73 67 66 68 98 149 184 202 206 196 172 142 110 82 60 54 51 49 49 48 48 49 50 52 56 58 60 61 62 62 61 60 60 59 58 58 58 58 57 57 55 54 52 51 50 49 49 49 48 48 49 49 50 50 51 51 52 52 53 54 54 55 56 56 56 55 52 49 46 43 41 40 40 40 42 44 45 46 47 48 51 60 76 97 127 138 142 138 129 96 75 62 56 55 55 55 55 55 55 55 56 57 58 60 62 62 61 60 60 60 62 68 73 74 73 70 68 68 68 76 88 94 95 93 84 86 102 128 161 165 159 126 79 27 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 55 71 77 78 77 78 85 88 88 87 81 77 74 70 65 48 26 11 2 1 1 1 1 1 1 1 1 2 7 18 60 80 88 89 86 72 66 63 61 58 51 48 46 45 45 46 46 47 48 50 50 51 51 51 51 51 50 49 47 46 46 48 49 51 54 56 58 59 59 60 60 60 60 60 60 60 60 60 61 61 62 62 61 59 55 50 47 45 43 42 41 40 39 38 38 38 38 39 40 40 40 40 41 41 42 42 43 46 55 70 90 96 98 98 98 98 94 79 60 43 44 56 72 85 87 85 77 69 65 65 82 127 167 196 206 203 185 159 128 96 68 58 52 50 49 48 48 48 49 50 54 57 59 61 62 63 62 62 61 60 59 59 59 59 59 58 57 55 54 52 50 49 49 48 47 47 47 47 48 48 49 49 50 51 51 52 52 53 52 52 50 49 46 44 43 41 41 41 42 43 44 46 46 47 48 50 59 75 94 115 136 140 138 130 113 81 66 58 55 55 55 55 55 55 56 56 57 59 60 62 62 62 61 60 60 60 63 69 73 74 72 69 68 68 68 75 87 93 94 93 84 85 100 125 160 166 161 133 88 33 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 52 68 74 75 74 75 82 87 88 88 84 81 77 73 68 48 25 10 2 1 1 1 1 1 1 1 1 3 9 23 66 83 90 90 87 73 66 63 62 60 53 48 46 46 45 46 46 47 48 49 50 50 51 50 50 49 47 47 46 47 48 51 53 56 57 58 58 58 58 58 57 56 55 55 54 54 54 55 55 56 58 59 59 59 57 53 49 46 44 43 42 41 40 39 39 39 40 41 42 42 42 42 42 42 43 43 42 43 45 52 77 90 96 98 98 98 97 86 69 48 45 52 67 81 87 86 80 72 66 64 71 104 147 185 204 207 196 175 146 113 78 64 55 51 50 49 48 48 48 49 52 55 58 61 62 63 63 63 62 62 61 60 60 60 60 59 58 57 55 54 51 50 49 48 47 46 46 45 45 46 46 47 47 48 48 48 48 48 47 46 45 43 42 42 42 41 42 43 44 45 46 47 47 48 50 58 75 94 113 130 140 138 131 117 95 68 59 56 55 55 55 56 56 56 57 58 59 61 62 63 63 62 61 60 60 60 64 69 73 73 71 69 68 68 68 75 86 92 94 92 84 84 98 123 159 167 163 138 96 40 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 49 64 70 71 71 72 79 85 88 88 85 82 79 74 67 45 22 8 2 1 1 1 1 1 1 1 1 3 10 26 72 86 91 91 88 74 67 64 63 61 55 50 47 46 45 46 46 47 48 49 50 49 49 48 47 46 46 46 47 50 54 56 57 58 58 58 57 55 54 52 49 48 47 47 46 46 46 47 47 48 51 52 54 56 56 55 51 48 46 44 43 42 41 40 40 40 42 43 44 44 44 44 45 45 45 44 43 43 43 44 57 78 91 97 98 98 97 91 77 54 46 49 62 77 86 86 83 75 67 63 66 84 123 167 200 208 203 189 165 133 92 72 60 53 50 49 49 48 48 48 50 53 56 60 62 63 64 64 63 63 62 61 61 61 60 60 59 58 57 55 53 51 49 48 47 45 44 44 43 42 42 42 42 42 42 42 42 41 41 41 41 41 41 41 42 43 44 45 46 47 47 48 48 50 54 75 97 115 129 138 139 132 118 99 76 59 56 55 55 56 56 56 57 58 59 60 61 63 63 63 63 63 61 60 60 61 66 70 73 73 70 68 68 68 68 74 85 91 93 91 83 84 96 121 158 168 165 143 104 47 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 46 58 64 65 65 66 74 81 86 87 85 81 77 69 58 35 16 5 1 1 1 1 1 1 1 1 1 4 14 33 76 87 92 92 90 76 68 64 63 63 59 54 49 46 45 45 45 46 46 46 46 46 46 46 46 47 50 53 55 57 58 57 57 55 52 49 47 45 44 43 43 42 42 42 43 43 43 43 43 43 44 45 46 47 47 48 48 48 46 45 43 43 42 42 42 43 43 44 44 44 44 45 46 48 52 51 49 46 43 43 44 57 75 90 97 98 98 94 83 60 47 48 58 71 85 86 85 79 71 64 63 70 96 134 178 207 208 202 187 161 118 91 71 59 52 49 49 49 48 48 48 50 53 56 59 63 64 64 64 64 64 63 63 63 62 62 61 60 58 56 54 52 50 49 47 45 44 43 42 42 41 40 40 40 40 40 40 40 40 41 42 42 44 45 46 47 47 47 47 48 49 50 54 64 82 110 124 133 137 138 128 112 93 75 60 56 55 56 56 56 57 58 59 60 61 63 64 64 64 64 64 62 61 60 60 62 67 71 73 73 69 68 68 68 68 74 84 90 91 90 83 83 95 119 157 169 166 149 113 56 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 43 53 58 60 60 60 66 75 81 83 82 78 71 61 48 25 11 3 1 1 1 1 1 1 1 1 2 6 16 37 79 88 92 92 91 79 69 64 63 63 61 58 54 49 47 46 46 46 46 46 46 46 47 48 51 54 56 57 57 57 54 51 49 47 45 44 43 42 42 42 42 42 42 42 42 42 43 43 43 43 44 44 45 45 46 46 46 45 45 44 43 43 43 43 43 44 44 44 45 45 45 45 46 49 55 58 57 53 48 44 43 48 62 80 94 98 97 94 84 63 47 48 56 68 83 86 85 81 74 66 62 66 81 110 155 195 205 207 198 180 140 110 86 68 57 51 50 49 48 48 48 48 50 52 55 59 62 63 64 65 64 64 64 64 64 64 63 62 61 59 56 54 52 50 48 46 45 44 43 42 41 41 41 41 41 41 42 43 44 45 46 46 47 47 47 48 48 48 48 49 52 60 73 90 109 128 133 136 136 130 109 91 75 63 57 55 56 56 57 58 59 60 61 62 63 64 65 65 64 64 63 62 61 61 61 63 69 72 73 72 69 68 68 68 69 74 84 89 91 89 82 82 94 118 156 169 167 152 118 62 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 41 48 52 53 53 51 56 63 70 73 72 67 59 48 35 14 6 2 1 1 1 1 1 1 1 1 2 7 18 39 81 89 93 93 91 81 70 65 63 63 63 61 58 55 52 49 48 48 48 49 50 51 53 54 56 57 56 55 53 50 47 46 44 43 42 42 41 41 41 41 42 42 42 42 42 42 43 43 43 43 43 44 44 45 45 45 45 45 44 44 44 44 44 44 44 44 45 45 45 45 46 47 49 52 58 65 65 63 57 49 44 45 53 67 87 96 96 94 85 64 47 48 54 66 81 86 86 83 77 69 63 63 71 91 129 178 198 207 206 196 163 132 104 81 64 54 51 50 49 48 48 48 48 50 52 56 59 61 63 64 64 64 64 64 64 64 64 64 63 62 59 58 56 54 52 50 48 47 46 45 45 44 44 44 45 45 46 46 47 47 48 48 48 48 48 48 48 49 51 56 67 83 99 114 127 136 136 133 125 112 89 74 64 57 55 56 57 57 58 59 61 62 63 64 65 65 65 65 64 64 63 62 61 61 61 65 70 72 73 72 68 68 68 68 69 73 83 88 89 88 81 82 93 118 156 170 168 155 124 68 14 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 40 43 45 46 46 42 43 47 51 53 53 48 40 30 20 5 3 1 1 1 1 1 1 1 1 1 2 7 19 42 83 90 93 93 91 83 72 65 62 62 63 63 62 60 58 54 53 53 53 53 55 57 58 58 57 55 52 49 46 44 42 42 41 41 41 41 41 41 41 41 42 42 42 42 43 43 43 43 43 43 44 44 44 44 45 45 45 45 45 44 44 44 44 45 45 45 45 46 47 48 49 53 56 60 65 73 73 72 68 59 46 45 47 56 74 92 93 92 83 63 47 47 53 64 80 86 86 84 79 72 64 62 65 77 103 156 184 202 209 206 184 156 126 99 76 59 54 51 50 49 48 48 48 48 49 52 55 57 60 62 63 64 64 64 64 64 64 64 64 63 62 60 59 57 56 54 52 51 50 50 49 49 49 49 49 50 49 49 49 49 49 49 48 49 49 49 52 55 62 72 92 109 122 132 136 137 132 122 107 90 70 62 58 56 56 57 58 59 60 61 63 64 65 66 66 66 65 65 64 64 63 61 61 61 61 67 71 72 72 71 68 68 68 69 69 73 82 87 88 87 81 81 93 117 156 170 169 157 128 74 17 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 38 39 39 39 39 31 29 27 26 24 22 17 12 7 4 1 1 1 1 1 1 1 1 1 1 2 3 8 21 46 84 91 93 93 91 85 75 67 61 61 61 62 62 62 61 60 60 59 59 59 59 59 58 55 50 45 43 42 42 41 41 41 41 41 41 41 41 41 42 42 42 43 43 44 44 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 47 47 48 50 52 56 62 68 75 79 82 83 82 80 74 52 47 46 49 57 82 87 86 78 59 45 46 52 63 79 86 86 85 81 75 67 63 63 68 81 129 165 191 206 212 202 179 151 121 93 68 59 54 51 50 49 48 48 48 48 49 50 52 55 58 61 62 63 64 64 64 64 64 64 63 62 61 61 60 59 57 56 56 55 54 53 53 52 52 51 51 50 50 49 49 49 49 49 49 50 52 59 70 84 101 123 131 135 136 137 133 119 102 84 68 59 57 56 57 57 59 60 61 62 63 65 66 67 67 67 66 65 65 64 64 62 61 61 61 62 69 72 73 72 70 68 68 68 69 70 73 81 86 87 86 80 81 93 117 156 171 169 160 132 79 20 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 36 34 32 30 25 22 18 15 13 8 7 5 3 3 2 2 1 1 1 1 1 2 2 3 3 5 11 24 47 85 91 93 93 92 86 77 68 61 57 58 59 61 61 61 61 60 59 58 56 49 44 42 42 42 41 41 41 41 40 40 41 41 41 41 42 43 45 46 48 50 52 54 55 56 58 58 58 58 58 58 57 56 55 53 52 51 51 50 50 50 50 51 52 53 56 59 62 66 71 80 86 92 98 105 106 103 99 95 92 73 56 48 47 49 59 66 67 63 52 44 44 51 63 79 87 87 85 82 78 70 65 62 62 65 94 131 165 191 207 212 202 184 158 129 93 74 61 54 51 49 49 48 48 48 48 48 48 49 50 52 54 56 57 59 60 61 61 62 62 61 61 60 59 58 57 56 56 55 54 53 52 52 51 50 50 49 49 49 49 49 50 52 57 64 81 97 112 125 133 135 136 136 132 124 101 83 71 63 59 57 57 58 59 60 61 63 64 65 67 68 68 68 67 67 66 65 65 64 63 62 61 61 62 65 71 72 72 72 70 68 68 69 70 71 73 80 84 86 85 80 80 92 117 156 171 170 162 137 86 23 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 35 33 30 28 24 21 18 14 12 9 8 7 6 5 4 3 3 2 2 2 2 2 3 3 4 5 11 24 47 84 90 93 93 92 87 78 69 61 56 54 55 56 57 57 55 54 51 49 47 45 44 43 43 42 40 40 40 40 40 42 43 45 47 49 53 55 58 60 62 65 67 69 70 72 73 74 75 75 76 76 75 75 75 74 73 72 71 71 70 71 71 73 74 77 80 84 89 94 99 107 112 117 121 124 125 123 118 111 105 91 69 55 48 48 51 53 52 49 43 41 42 51 65 80 87 87 86 83 79 72 68 64 61 61 74 104 138 170 195 210 208 199 182 158 121 96 77 64 56 52 51 50 49 49 48 48 48 48 49 50 50 51 52 53 55 55 56 56 56 56 56 56 55 54 54 53 52 52 51 50 50 50 49 49 49 49 50 51 52 58 65 74 86 100 116 124 130 133 136 135 130 121 109 93 76 68 63 59 58 58 59 60 61 62 64 66 67 68 68 69 68 68 67 67 66 65 64 64 63 62 62 62 64 67 72 72 72 71 69 69 69 70 71 71 73 79 83 85 84 79 80 92 117 157 172 171 163 140 91 26 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 35 32 29 27 23 21 19 17 16 14 13 12 11 10 7 6 5 4 3 3 3 3 3 3 4 6 13 26 49 83 90 93 93 92 88 80 71 62 55 52 51 51 52 52 52 51 51 50 49 47 44 41 40 39 39 40 41 43 46 49 53 56 59 61 65 67 70 72 74 77 78 80 82 83 85 86 87 88 89 90 90 91 92 92 92 93 93 93 94 95 97 99 101 104 109 113 117 122 127 133 136 139 141 143 142 141 136 129 121 109 86 66 52 49 48 47 44 40 38 38 41 52 67 81 87 88 86 84 80 74 70 66 63 59 64 82 110 143 175 202 208 207 198 183 150 124 101 82 67 56 53 52 51 50 49 49 49 49 49 49 49 49 50 50 51 51 51 51 52 52 51 51 51 51 51 50 50 50 50 49 49 49 50 51 53 56 60 66 73 86 96 106 116 125 133 135 135 134 130 120 109 96 84 73 64 61 59 59 59 60 61 62 64 65 67 68 69 69 69 69 68 68 67 66 65 65 64 63 63 62 62 64 66 70 72 72 72 71 69 69 70 71 72 72 74 78 82 83 83 79 80 92 118 158 172 171 164 142 95 29 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 36 34 31 28 27 24 23 22 21 21 20 20 19 17 16 14 11 9 7 5 4 3 3 4 4 5 8 15 29 52 83 90 93 93 93 90 83 73 63 55 50 49 48 48 49 50 51 51 51 49 46 41 37 36 37 39 42 45 49 54 60 64 67 70 73 75 77 79 81 82 84 86 88 89 91 93 94 96 97 99 100 102 103 105 106 108 110 111 113 115 117 120 123 126 130 135 139 143 146 150 153 156 157 159 159 158 156 153 147 137 126 105 81 60 50 48 45 40 36 35 36 41 55 70 83 88 88 87 85 82 77 72 69 65 60 60 66 85 114 148 186 201 208 208 201 178 155 130 106 85 66 59 55 52 51 50 50 49 49 49 49 49 49 49 49 49 48 48 48 48 49 49 49 49 49 49 49 50 50 51 52 54 56 59 63 70 77 85 94 105 119 127 134 137 138 136 133 128 122 113 95 82 72 66 62 60 60 59 60 61 62 64 65 67 68 70 70 70 70 70 69 68 68 67 66 65 65 64 63 63 63 64 66 68 71 72 72 71 70 69 69 71 73 73 74 74 78 81 82 81 79 80 92 119 160 172 172 165 144 100 31 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 36 34 31 28 27 25 25 24 24 24 24 24 24 24 23 22 20 17 13 8 5 4 4 4 5 7 10 18 33 56 83 89 92 93 93 91 86 77 65 56 51 49 48 48 50 52 52 48 41 34 32 33 34 36 38 43 49 54 60 64 69 72 74 76 78 80 82 83 85 86 89 91 92 94 96 98 100 102 103 105 107 109 111 112 114 117 119 121 124 126 131 135 139 143 147 152 155 158 161 164 167 168 169 170 171 171 169 167 163 154 141 126 100 73 52 49 45 40 36 35 36 44 58 73 84 88 88 87 86 83 79 74 71 67 62 60 59 66 84 115 162 188 204 211 212 201 184 162 137 112 84 69 60 55 53 51 51 50 50 49 49 49 48 48 48 48 48 48 48 48 48 49 49 49 50 50 51 52 53 55 60 66 74 84 95 110 121 130 136 140 141 142 141 140 137 131 120 106 92 78 67 64 62 61 60 60 60 61 62 63 66 68 69 70 71 71 71 71 70 70 69 68 68 67 66 65 65 64 64 64 64 66 68 71 72 72 72 71 70 70 70 73 74 75 75 75 77 79 81 80 78 79 93 120 161 173 172 166 146 103 34 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 36 33 30 27 27 25 25 25 25 25 25 26 25 25 25 24 24 24 24 23 17 12 9 8 12 20 27 35 44 58 79 87 91 91 91 91 89 84 75 63 54 53 53 54 54 51 43 36 31 31 33 35 36 37 40 46 52 58 64 69 74 77 80 82 85 88 91 93 96 99 102 105 107 110 112 115 117 119 121 123 125 127 129 131 133 136 139 142 145 149 155 159 162 165 168 171 172 174 175 176 177 178 178 179 179 179 178 178 176 173 161 150 130 102 68 52 48 42 37 35 37 47 61 75 85 89 90 89 87 84 80 77 74 71 67 62 60 59 62 72 113 148 178 200 210 212 207 198 184 164 134 112 92 75 64 57 55 53 52 51 51 50 50 50 50 50 51 51 52 53 55 58 61 65 71 80 89 98 107 117 129 135 140 142 144 145 146 146 145 143 139 133 123 111 98 81 73 68 64 63 62 61 61 61 61 62 63 65 67 69 71 72 72 72 72 72 71 71 70 70 69 68 68 67 66 65 65 65 65 65 67 69 71 72 72 72 71 71 70 70 72 76 77 78 77 76 77 78 79 79 78 79 93 121 163 174 173 167 148 107 37 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 33 30 27 26 25 25 26 26 26 27 27 28 27 27 25 24 24 24 24 23 22 21 20 22 35 45 52 57 63 77 84 89 90 90 90 89 86 81 72 63 60 58 57 54 44 36 32 32 33 35 36 37 38 40 48 55 63 69 75 81 84 88 91 94 98 101 104 107 110 114 116 119 121 124 127 129 131 134 136 139 142 145 148 152 157 161 165 168 171 174 175 176 177 177 178 179 179 179 180 180 180 180 180 180 180 180 180 180 179 173 164 150 126 92 59 51 45 41 38 39 47 61 75 86 91 91 91 89 86 81 77 75 73 70 66 62 60 59 62 80 109 140 170 195 209 210 207 201 193 175 157 139 121 104 87 78 71 67 64 62 62 63 64 66 70 74 79 85 91 99 106 112 118 123 128 131 135 138 141 143 144 144 144 143 139 134 127 120 112 100 92 85 79 74 68 65 63 62 62 61 61 62 63 64 66 68 70 71 72 73 73 73 73 73 72 72 71 71 70 69 68 68 67 67 66 66 67 67 68 70 71 72 72 72 72 71 71 71 71 74 79 80 80 79 77 77 78 78 78 77 79 94 123 165 174 173 168 150 110 39 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 38 34 30 27 26 25 25 26 26 27 27 27 28 29 29 27 25 24 24 24 24 25 27 31 35 46 57 66 72 75 81 85 87 88 89 89 89 88 85 79 70 66 62 56 49 36 32 31 32 34 36 37 38 39 41 50 59 67 75 81 87 90 94 98 101 105 109 112 115 118 121 124 126 129 131 135 137 140 143 146 150 154 158 163 167 172 175 178 179 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 181 179 174 165 148 118 75 59 49 43 41 41 48 60 74 85 92 93 92 90 87 82 78 76 74 72 69 65 62 59 58 64 80 103 131 162 191 202 207 207 205 196 187 175 163 149 132 122 114 108 104 101 101 103 104 107 112 116 120 124 128 133 136 139 141 143 144 144 144 142 140 135 130 126 121 116 108 102 96 90 84 76 71 68 66 64 63 62 62 62 62 63 64 65 67 69 71 72 73 74 74 74 74 74 74 74 73 72 72 71 71 70 69 69 68 68 68 68 69 69 70 71 72 72 72 72 72 71 71 71 72 77 82 84 84 82 77 77 77 77 77 77 78 95 125 166 175 174 168 151 113 41 15 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 40 36 32 28 26 25 25 25 26 26 26 26 27 29 30 29 26 24 23 23 23 24 28 34 39 47 59 71 81 85 86 86 87 87 88 88 88 87 86 83 76 69 62 53 42 32 31 31 32 35 37 38 39 40 43 54 64 72 79 85 91 95 99 103 107 112 115 118 121 124 128 131 133 136 139 143 146 149 152 155 161 166 171 175 178 182 183 183 183 183 182 182 182 181 181 181 181 182 182 182 182 182 182 182 182 181 181 181 181 181 181 180 176 165 145 98 72 55 47 44 44 49 59 73 85 93 94 94 92 89 84 80 77 75 73 71 69 65 61 58 59 63 75 94 120 158 181 195 203 205 204 201 197 191 184 173 165 158 153 148 145 145 145 147 148 150 151 152 151 151 149 146 144 140 137 133 130 126 121 116 108 102 96 89 83 76 72 69 67 65 64 64 63 63 63 63 63 64 64 65 67 69 70 72 73 75 75 76 76 76 75 75 75 75 74 74 73 72 72 72 71 70 70 70 70 70 70 71 71 72 72 72 72 72 72 72 71 71 72 73 81 86 88 87 86 78 77 76 76 76 76 78 96 127 168 176 174 169 152 115 43 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 45 42 36 30 26 24 24 24 24 25 24 24 26 28 29 29 26 24 23 23 24 24 23 23 24 32 48 64 77 85 89 89 89 88 88 87 86 86 85 83 77 69 59 48 36 31 31 31 33 36 39 40 41 42 44 57 67 76 83 89 95 100 105 109 113 118 122 125 128 132 136 139 142 145 148 153 157 160 165 169 177 181 184 186 186 185 184 184 183 182 181 181 181 181 181 182 182 183 183 184 185 185 184 184 183 182 181 181 181 181 182 182 181 178 168 127 91 66 51 46 46 49 58 71 84 93 95 95 94 91 86 82 79 76 73 72 71 68 65 60 59 59 62 68 81 112 141 167 188 199 203 201 199 197 194 190 187 183 180 176 173 170 167 165 162 159 157 154 151 148 142 135 127 119 110 98 90 83 78 73 69 68 66 65 65 64 64 64 64 63 63 63 63 63 64 65 66 68 69 71 73 74 75 76 77 77 77 77 77 77 76 76 75 75 75 74 73 73 73 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 73 75 86 90 92 92 90 80 77 76 76 76 76 78 97 129 170 176 174 169 152 117 45 17 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 33 36 37 36 34 32 30 30 30 32 32 32 30 29 23 22 22 22 23 26 28 28 28 26 25 27 33 44 59 77 83 87 89 89 88 87 86 84 82 77 69 59 48 37 32 32 33 36 41 42 42 42 44 49 65 76 85 92 98 106 111 116 120 125 130 134 137 141 144 149 153 156 160 163 169 173 179 184 189 191 190 190 188 187 183 181 180 180 180 180 181 182 184 186 189 191 194 196 198 199 199 199 198 196 192 188 184 182 181 181 181 182 182 181 166 131 95 66 50 47 48 54 65 80 93 96 97 97 94 89 85 81 78 75 72 72 71 69 66 61 60 59 60 61 68 84 105 128 151 175 185 191 192 192 189 186 183 179 176 171 167 163 158 152 141 131 120 108 97 84 78 73 70 67 66 65 65 64 64 64 64 64 64 65 65 65 65 66 66 67 69 70 71 73 74 75 76 77 77 78 79 79 79 79 79 78 78 77 77 76 76 75 75 75 74 74 74 74 74 73 73 73 73 73 72 72 72 72 72 72 72 72 72 72 72 73 74 77 81 92 97 99 98 96 84 78 76 75 75 75 78 99 132 172 177 175 169 153 119 47 18 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 18 19 20 21 21 21 21 22 22 22 22 22 22 21 21 21 23 25 29 34 36 36 36 35 30 29 29 33 37 46 53 61 70 79 86 87 86 85 83 78 72 63 52 41 37 38 41 44 45 43 42 43 47 56 73 83 91 98 104 112 117 121 126 130 136 140 144 148 151 156 160 163 168 172 179 184 188 191 192 192 189 186 183 180 179 179 179 180 182 185 188 190 193 196 200 203 205 207 209 210 211 211 210 209 206 202 197 192 186 182 181 182 182 182 177 157 126 92 62 49 49 52 60 74 90 96 99 99 98 92 87 83 79 76 73 72 72 71 69 65 63 61 59 59 61 67 76 89 104 125 138 149 158 164 166 166 163 159 154 145 136 127 117 107 96 89 83 79 75 71 70 68 68 67 67 68 69 69 70 71 72 72 73 74 74 75 75 76 77 77 78 78 79 79 80 80 80 80 81 80 80 80 80 79 79 78 78 77 77 76 76 75 75 75 75 74 74 74 74 74 73 73 73 73 73 73 73 73 73 73 72 72 72 73 73 75 78 81 86 97 103 104 104 101 87 80 76 75 74 75 78 100 134 173 178 175 170 154 120 48 18 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 19 19 19 19 19 20 20 20 20 20 20 20 21 22 23 25 27 30 34 37 41 42 43 42 42 38 35 33 32 31 34 37 42 49 57 65 72 78 82 82 80 76 70 63 53 50 51 52 51 47 43 42 46 53 66 81 89 97 104 110 117 122 127 132 136 143 147 151 155 159 164 167 172 178 183 189 192 193 194 192 187 182 179 178 176 178 180 183 185 188 191 194 197 200 203 207 210 212 214 215 217 217 217 217 216 215 212 208 203 197 188 184 182 182 182 181 173 153 122 86 56 51 50 55 65 85 93 98 100 100 96 90 85 81 77 74 73 72 71 70 68 66 64 61 59 58 60 63 68 75 87 97 106 115 122 127 127 125 121 116 107 99 92 86 80 74 72 70 70 70 71 72 73 74 75 76 77 77 78 79 79 80 80 81 81 81 82 82 82 82 83 83 83 83 83 82 82 82 82 82 81 81 80 80 79 78 78 78 77 77 76 76 76 75 75 75 75 75 74 74 74 74 73 73 73 73 73 73 73 73 73 73 73 73 74 75 78 82 87 92 103 108 110 110 107 91 82 77 75 74 74 78 101 136 175 179 175 170 154 121 49 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 29 28 28 27 26 26 25 25 25 25 25 26 27 28 30 33 37 40 42 45 46 47 47 47 47 46 43 40 38 35 34 34 33 34 37 42 51 62 70 73 75 76 74 70 64 61 59 57 52 46 42 45 52 63 76 89 96 103 110 116 123 129 134 139 144 150 154 159 163 167 172 177 183 189 193 196 196 194 191 186 179 175 174 175 177 181 184 188 191 193 196 199 202 205 209 213 215 216 218 219 219 220 220 220 220 220 219 216 213 209 199 190 185 183 182 182 181 171 151 118 72 58 51 52 57 76 88 96 101 102 100 95 89 83 78 75 74 73 72 71 70 69 67 64 61 59 59 59 60 61 64 68 73 78 84 88 88 86 84 80 74 71 70 69 69 70 71 72 73 75 77 79 81 82 83 84 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 84 84 84 83 83 82 82 81 81 80 80 79 79 78 78 77 77 77 76 76 76 76 75 75 75 75 75 75 74 74 74 74 73 73 73 73 73 73 74 74 74 75 76 78 82 87 93 98 109 114 116 116 113 96 84 78 75 74 74 78 103 139 176 179 175 170 154 122 50 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 38 38 38 37 37 36 36 35 35 35 35 36 37 39 40 43 45 46 47 48 50 50 50 50 50 49 48 46 44 42 39 37 35 34 34 34 35 37 42 48 59 65 66 65 63 58 52 46 42 40 42 51 64 76 86 96 103 110 117 123 130 136 141 147 152 158 163 167 171 175 182 188 194 198 199 198 195 189 182 173 172 172 174 177 183 189 190 192 193 194 198 201 205 210 213 217 219 220 220 221 221 221 221 221 221 221 222 221 219 216 210 202 193 185 183 183 182 181 172 153 101 72 56 50 51 63 80 92 99 103 103 100 94 87 80 76 74 73 72 71 71 71 70 68 65 61 59 59 59 60 60 61 62 63 64 65 65 65 65 65 65 66 67 69 71 74 77 79 81 83 84 85 85 86 86 86 86 86 86 86 86 86 86 86 86 85 85 85 85 85 85 85 84 84 84 83 82 82 81 80 80 79 79 78 78 78 77 77 77 77 76 76 76 76 76 76 76 76 76 75 75 75 75 75 75 75 75 75 75 75 75 76 77 78 79 83 88 94 100 105 114 120 122 122 120 101 87 79 75 73 74 78 104 141 177 180 176 170 155 122 50 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 51 51 50 50 50 49 49 49 49 49 49 49 50 51 52 54 55 56 57 58 60 60 60 60 60 59 57 56 54 52 50 48 46 44 42 39 38 37 37 37 38 39 39 39 39 39 39 40 42 46 61 72 81 89 95 106 113 120 126 131 139 145 150 155 161 167 171 176 180 186 195 200 201 201 199 190 177 170 167 168 172 179 184 188 190 191 191 192 193 196 203 209 213 216 218 219 219 219 218 216 213 213 213 214 216 219 221 222 223 223 219 215 207 198 188 183 183 183 181 177 147 110 79 58 50 51 62 77 91 100 104 104 102 97 90 80 76 74 72 72 71 71 71 70 69 67 64 63 61 61 61 60 60 60 61 61 62 63 64 65 68 71 73 75 76 77 76 75 73 70 67 66 66 67 68 69 71 74 77 79 81 81 82 82 83 83 83 83 83 83 82 82 82 82 81 81 80 80 80 79 79 79 78 78 78 78 78 78 78 79 79 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 79 80 80 80 81 82 83 84 87 92 97 103 109 113 121 127 129 130 128 110 93 82 76 73 74 79 106 144 178 180 176 170 155 123 51 20 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 60 60 60 60 59 59 59 59 58 58 59 59 59 60 61 62 63 64 65 65 66 67 67 67 66 65 64 63 61 60 58 56 55 53 51 49 48 46 45 43 43 43 43 43 44 46 48 52 58 65 76 83 90 97 104 114 121 127 132 138 146 152 157 162 168 174 179 184 190 197 201 202 201 196 186 171 168 167 168 173 183 186 188 189 190 189 189 191 194 200 207 211 214 216 217 215 212 208 203 199 196 194 195 196 198 203 209 215 219 222 222 220 216 208 199 187 184 183 182 181 169 141 109 80 58 50 54 63 76 92 102 103 103 101 97 88 82 77 74 72 71 71 71 70 70 69 68 66 65 64 62 61 61 61 61 62 63 65 67 70 73 74 74 73 70 65 61 57 54 52 50 49 48 47 47 49 50 52 54 56 62 66 71 74 77 79 80 81 81 81 81 81 81 81 81 80 80 80 80 79 79 79 80 80 81 82 82 83 84 85 86 86 86 87 87 87 87 88 88 87 87 87 87 86 86 86 86 86 86 86 87 88 89 91 95 99 105 110 115 118 124 131 134 135 134 117 98 84 77 73 74 79 108 145 179 180 176 170 155 123 51 20 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 70 70 69 69 69 69 68 68 68 68 68 68 69 69 70 71 71 72 72 73 73 73 73 73 73 72 71 70 69 67 65 64 63 61 60 58 57 56 55 53 52 52 52 53 55 58 62 66 72 78 86 92 99 106 113 122 128 134 139 145 153 159 164 170 174 181 187 193 198 203 203 200 191 181 171 163 165 170 176 182 188 189 189 188 186 186 187 191 196 202 209 211 213 213 211 206 200 195 190 186 184 184 185 186 189 194 198 204 210 216 222 223 221 217 209 196 188 185 183 183 179 163 138 107 77 55 52 54 63 77 95 100 102 102 100 95 89 84 79 75 72 72 71 71 70 70 69 68 67 66 64 63 62 62 63 65 67 69 71 73 74 72 69 65 61 57 55 53 53 52 52 53 53 52 51 49 47 45 44 44 47 50 54 57 61 67 70 74 76 78 79 80 80 80 80 80 80 80 80 81 81 82 83 84 86 88 89 90 91 92 93 94 94 94 95 95 95 95 95 95 95 95 94 94 94 93 93 93 93 93 94 95 97 99 102 106 111 115 119 122 127 134 138 140 139 125 103 88 78 74 74 80 109 147 180 181 176 170 154 123 51 20 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 79 79 79 79 79 78 78 78 78 78 78 78 78 78 79 79 79 80 80 80 81 81 80 80 80 79 78 77 76 75 73 72 71 70 69 68 67 66 65 64 64 64 65 66 68 72 75 80 84 89 95 102 109 115 122 129 135 141 146 152 160 166 171 177 181 189 195 201 205 205 200 190 177 165 160 163 170 178 185 189 189 188 186 184 183 183 186 191 198 204 208 210 210 208 203 195 189 184 180 178 178 180 181 183 186 189 192 195 200 207 218 222 223 222 218 206 195 188 185 184 183 178 162 137 105 69 57 51 53 61 83 94 99 101 101 99 95 91 86 81 76 74 73 72 71 71 70 70 69 68 66 66 66 66 67 70 72 74 74 74 71 66 61 57 54 53 54 55 57 59 62 64 66 67 66 62 58 53 48 44 41 40 40 42 45 51 56 61 65 69 72 74 76 77 78 79 80 80 81 82 83 85 87 89 91 94 95 97 98 99 100 101 101 102 102 103 103 103 103 103 102 102 102 102 101 101 101 100 101 101 101 102 104 106 109 113 116 120 123 125 129 137 142 144 144 133 110 92 79 74 74 80 110 149 180 181 176 169 154 123 50 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 89 89 88 88 88 88 88 87 87 87 87 87 87 87 87 88 88 88 88 88 88 88 88 87 87 86 85 84 83 82 81 80 79 78 77 76 76 75 75 75 75 75 76 78 80 83 86 90 94 99 107 113 119 124 129 137 142 148 153 159 167 173 178 183 188 198 204 206 206 204 188 168 159 157 159 171 182 188 190 189 187 183 181 180 180 181 185 192 198 204 206 206 205 201 196 187 182 178 176 176 177 179 181 183 186 189 192 195 198 200 209 217 222 224 223 216 205 195 187 184 184 183 177 163 137 93 70 55 49 51 64 82 94 99 99 98 96 94 92 88 83 80 76 74 73 72 71 71 71 70 70 71 72 73 75 76 76 75 74 71 62 56 53 52 52 53 53 55 56 59 63 67 72 76 80 82 80 75 68 59 48 42 39 37 37 38 39 42 45 50 57 62 66 70 73 76 78 80 81 82 84 87 89 92 95 98 99 101 102 103 104 105 106 107 108 108 109 109 109 109 109 109 108 108 108 108 107 107 107 108 108 109 110 112 114 117 119 122 125 128 131 139 145 149 149 141 117 97 81 75 75 81 111 150 181 181 176 170 154 122 50 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 101 101 101 101 101 101 100 100 100 100 100 99 99 99 99 99 99 99 99 99 98 98 98 97 97 96 95 94 93 92 91 90 90 89 88 88 87 87 87 87 88 89 90 92 94 98 101 105 109 113 119 124 129 134 140 147 152 157 163 169 177 182 187 193 200 207 208 206 198 182 154 153 155 161 176 189 190 190 188 183 178 178 179 179 179 181 186 192 199 202 203 203 200 195 187 178 174 172 172 174 178 182 187 192 195 198 199 199 200 201 204 209 216 222 224 223 217 207 197 187 184 184 183 179 170 135 104 78 59 49 50 59 74 88 96 95 94 94 92 91 89 87 85 83 81 79 78 78 77 77 77 78 78 78 78 77 75 71 65 57 52 51 51 52 52 52 53 53 53 53 57 63 71 78 85 91 92 91 87 81 71 63 56 49 44 39 38 38 38 39 40 42 45 49 53 60 66 71 75 79 83 86 89 92 95 99 100 102 103 104 106 107 108 109 110 111 112 112 112 113 113 113 113 113 113 112 112 113 113 113 114 115 115 116 118 120 121 124 127 130 133 141 148 153 154 149 128 105 85 76 75 82 113 152 182 182 176 170 154 121 48 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 111 111 111 110 110 110 110 110 109 109 109 109 108 108 108 108 107 107 107 107 106 106 105 105 104 103 103 102 101 100 99 98 98 97 96 96 96 96 96 97 98 99 100 102 104 108 111 114 118 122 128 133 138 143 147 154 159 164 170 176 183 188 194 201 207 208 206 193 176 157 150 154 165 178 187 190 189 186 181 178 177 177 177 178 178 180 187 193 198 201 202 201 196 189 180 173 171 171 174 178 188 196 202 207 211 213 213 212 210 207 206 209 213 218 223 225 222 215 206 195 186 185 184 183 179 160 133 105 80 61 49 52 59 71 84 92 92 91 90 88 88 87 86 85 83 82 81 81 80 80 80 80 79 79 78 74 69 63 57 52 51 51 51 52 52 52 52 53 53 53 56 61 68 77 87 96 100 100 98 93 84 76 68 61 54 48 45 42 41 39 40 41 43 46 49 55 61 66 71 76 81 85 89 92 95 99 101 102 104 105 107 108 110 111 112 113 113 114 114 114 114 114 114 114 114 114 114 114 114 115 115 116 117 118 119 121 122 125 129 132 136 142 150 156 158 155 136 112 89 77 76 82 114 153 182 182 176 170 153 119 47 18 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 120 120 120 120 120 120 119 119 119 119 118 118 118 117 117 116 116 116 115 115 114 114 113 112 112 111 110 109 108 108 107 106 105 105 105 104 104 105 105 106 107 108 110 112 114 117 121 124 128 132 137 141 146 150 155 161 166 171 177 182 189 196 202 207 209 206 191 173 157 147 153 166 178 187 191 189 185 180 177 176 176 176 177 178 178 181 188 194 198 200 200 197 191 183 175 171 171 173 179 187 200 208 214 219 222 223 223 221 220 217 212 211 213 216 221 225 224 220 214 204 191 187 185 184 183 175 157 133 106 81 58 52 52 58 69 82 87 87 86 85 84 84 84 84 84 83 82 82 81 81 81 80 78 77 74 67 61 56 52 50 50 50 51 51 51 51 51 52 53 53 55 60 67 77 87 100 105 107 106 103 94 86 78 70 63 56 52 48 46 44 43 43 43 45 48 54 59 64 69 74 80 85 89 92 96 99 102 104 106 107 110 111 113 114 115 116 117 117 117 117 117 117 116 116 116 116 116 116 116 116 117 118 118 119 120 123 124 127 131 135 139 144 152 159 162 159 145 120 94 78 77 83 115 153 182 182 177 170 153 118 46 17 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 130 130 130 129 129 129 129 129 128 128 127 127 127 126 126 125 125 124 123 123 122 121 121 120 119 118 117 117 116 115 114 114 113 113 113 113 113 113 114 114 116 117 119 121 123 127 130 133 137 140 145 149 153 157 162 168 173 178 184 188 196 203 208 210 208 194 169 153 145 149 164 180 188 190 189 184 179 176 175 175 176 177 177 178 179 182 188 194 197 198 197 193 186 178 171 170 172 178 187 199 212 219 224 226 228 228 228 228 227 225 220 216 215 216 219 224 225 224 220 212 198 190 187 185 185 183 174 157 134 107 76 60 53 52 55 69 77 81 82 81 79 79 79 80 80 81 81 81 81 80 79 77 75 71 67 58 53 51 49 49 50 50 49 49 48 49 50 52 53 53 55 59 67 77 88 102 109 113 113 111 102 94 86 78 71 63 58 55 52 50 48 47 47 48 50 55 60 65 69 74 80 85 89 93 97 101 103 106 108 110 113 115 116 118 119 120 121 121 121 121 120 120 120 119 119 118 118 118 118 118 119 120 120 121 123 126 127 130 133 138 143 147 154 161 165 164 152 128 100 80 78 84 115 154 183 182 177 170 152 116 44 17 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 139 139 139 139 139 139 138 138 138 137 137 136 136 135 135 134 133 132 132 131 130 129 128 128 127 126 125 124 123 123 122 122 121 121 121 121 121 121 122 123 125 126 128 130 132 136 139 142 145 149 153 157 161 165 168 174 180 185 190 194 205 210 211 209 204 164 147 142 146 158 185 190 191 189 185 177 175 175 175 175 176 178 179 180 181 183 188 193 196 196 195 190 182 174 169 170 174 184 197 210 222 226 228 229 229 230 230 229 229 229 228 223 220 218 219 223 225 225 224 219 206 196 189 186 185 185 183 175 159 136 101 78 62 53 50 55 62 70 75 75 73 71 70 70 72 75 77 78 78 78 75 72 67 62 56 50 49 48 48 49 49 48 47 46 46 46 49 51 52 53 55 59 67 78 90 105 113 118 119 117 109 102 94 86 78 69 64 60 57 55 54 54 55 56 57 60 63 67 71 75 81 86 90 94 98 103 105 108 111 113 116 118 120 121 123 124 125 125 125 125 125 125 124 124 123 123 122 122 122 122 122 123 124 125 126 129 131 134 137 142 147 150 156 163 167 167 160 136 106 82 80 85 116 155 183 182 177 170 152 114 43 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 152 152 152 152 151 151 151 151 150 150 149 149 148 147 147 145 145 144 143 142 141 140 139 138 137 136 135 134 133 133 132 132 131 131 131 131 132 132 133 134 136 138 140 142 144 147 150 153 156 159 163 167 170 173 177 184 188 193 198 206 212 212 208 194 162 138 138 148 165 186 191 190 187 182 176 174 174 175 176 179 182 183 183 183 183 184 188 192 194 195 193 185 176 170 169 171 182 197 211 223 229 229 229 230 230 230 230 230 230 230 229 228 226 223 221 223 225 226 226 224 216 206 196 189 186 186 186 184 179 168 141 116 92 72 57 49 50 53 57 64 68 67 65 62 60 57 58 59 60 60 59 58 55 52 49 47 47 47 47 47 46 44 43 43 43 45 48 51 53 53 55 61 70 81 93 109 117 123 125 124 117 109 101 93 85 76 70 66 63 62 61 62 63 64 66 69 71 73 76 79 84 89 94 98 102 106 109 112 114 117 120 122 123 125 126 127 128 128 129 129 130 130 130 130 129 129 129 129 129 129 130 130 131 132 134 137 139 142 144 149 154 156 160 165 170 170 166 146 116 86 82 88 118 155 183 182 177 169 150 111 40 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 161 161 161 161 161 161 160 160 160 159 159 158 157 156 156 154 153 152 151 150 149 148 147 146 144 143 142 141 141 140 139 139 139 139 139 139 139 140 141 142 144 146 148 150 152 156 158 161 164 166 170 173 176 180 184 190 194 199 206 212 213 209 191 165 141 136 148 165 181 190 190 186 181 177 175 174 175 178 182 186 187 187 185 184 183 184 188 191 193 193 191 181 173 169 168 174 190 206 219 226 229 229 229 229 229 229 229 229 229 230 229 229 228 226 224 224 225 226 226 225 220 212 203 194 188 186 186 186 184 180 163 144 122 100 79 60 54 52 53 56 59 60 60 59 58 55 53 52 50 49 48 48 47 46 45 45 46 46 46 45 43 42 41 41 42 46 49 51 53 54 56 63 73 85 97 113 121 127 130 129 121 113 105 96 87 78 73 69 67 66 66 67 68 70 71 73 74 76 79 82 88 93 97 101 105 109 112 114 117 120 122 124 126 127 128 130 130 131 131 131 132 132 132 132 132 133 133 134 134 135 135 137 138 139 140 143 146 149 151 155 160 162 164 168 172 172 170 152 124 91 85 90 119 156 183 182 177 169 149 108 38 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 171 171 171 171 170 170 170 170 169 169 168 167 166 166 165 163 162 161 160 158 157 156 154 153 152 151 150 149 148 148 147 147 146 146 146 147 147 148 149 150 152 154 156 158 161 164 166 169 171 173 177 180 183 186 191 195 200 206 212 214 211 193 167 144 133 144 164 180 189 190 186 181 177 175 174 175 179 185 190 193 193 192 188 185 184 184 188 190 192 192 189 178 171 168 168 178 198 213 224 228 229 229 229 229 229 229 229 229 229 229 229 229 229 228 226 225 226 226 226 226 223 218 209 200 192 187 187 187 186 185 178 165 148 128 107 82 68 59 54 53 54 56 56 57 56 54 52 49 47 46 44 43 43 42 42 43 43 43 43 42 41 41 41 41 43 47 50 52 53 54 58 67 77 89 102 117 127 133 135 134 125 116 107 98 89 80 75 72 70 70 70 71 72 74 75 76 77 79 82 86 92 97 101 104 107 112 115 117 120 123 125 127 129 130 132 133 133 134 134 134 135 135 135 135 135 136 137 138 138 139 141 142 143 145 147 150 153 155 158 161 166 167 169 171 174 174 172 158 132 96 87 92 121 157 183 182 177 169 147 105 36 13 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 180 180 180 180 180 180 180 179 179 178 177 177 176 175 174 172 171 169 168 167 165 163 162 161 159 158 157 156 155 155 154 154 154 154 154 154 155 155 157 158 160 162 164 166 168 171 174 176 178 180 184 186 189 193 196 201 207 212 215 214 201 169 145 133 136 161 180 189 190 188 180 177 175 174 175 179 186 193 199 200 200 197 191 185 183 184 187 190 191 191 186 175 169 167 168 184 205 219 227 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 228 227 227 227 227 227 225 221 215 207 198 189 188 187 187 187 186 180 169 155 136 109 91 75 64 57 54 53 54 54 54 54 52 50 48 46 44 42 41 40 40 40 41 41 41 41 40 41 41 42 45 49 52 53 54 55 61 72 83 94 106 123 133 139 141 138 129 118 108 98 89 80 76 74 73 73 73 74 75 76 77 78 80 83 86 91 96 100 104 107 110 115 118 121 123 126 129 131 132 134 135 136 137 137 138 138 138 138 138 138 139 140 140 141 142 144 145 147 149 150 152 156 159 161 164 167 171 173 174 175 176 176 175 163 140 102 91 95 123 158 183 182 177 168 146 101 33 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 190 190 190 190 190 189 189 189 188 188 187 186 185 184 183 181 180 178 177 175 173 171 169 168 166 164 163 162 161 161 160 160 160 160 160 160 161 162 163 165 167 170 172 174 176 179 181 183 185 187 189 192 195 199 201 208 214 216 215 213 174 142 131 135 149 184 189 190 188 182 176 174 173 174 177 187 196 203 207 208 207 201 193 185 183 183 187 189 190 189 184 173 167 167 169 191 212 223 228 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 228 228 228 227 227 226 224 219 213 204 192 189 187 187 187 188 187 183 175 163 140 121 102 85 70 59 53 51 51 52 52 52 51 50 48 45 43 42 41 40 40 40 40 40 40 41 41 43 45 48 51 53 54 55 56 66 78 89 100 112 130 141 146 146 143 131 119 108 97 88 80 77 76 75 75 76 76 77 77 78 80 83 87 91 96 101 104 107 111 114 118 121 124 127 129 132 134 135 137 138 139 140 140 141 141 142 142 143 143 144 145 145 146 147 148 150 151 153 155 157 160 163 166 169 172 176 178 178 178 178 178 177 168 146 108 94 99 126 160 184 182 177 167 144 97 30 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 202 202 202 202 202 202 202 202 201 201 200 199 198 196 195 193 191 189 188 186 184 182 180 179 177 176 175 174 173 172 172 171 171 171 171 172 173 174 175 177 179 181 183 185 186 189 190 192 193 195 197 200 203 206 210 217 217 216 208 185 133 129 136 154 183 191 190 186 181 175 172 172 175 181 190 202 208 212 215 215 214 205 194 185 182 183 185 187 188 188 181 171 166 166 170 199 217 226 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 228 228 228 227 225 223 219 213 201 193 189 188 188 188 188 188 187 183 172 158 143 126 108 87 75 64 57 53 53 52 52 51 51 50 48 47 46 44 43 43 43 43 43 45 46 48 50 51 53 54 55 57 61 77 89 99 109 122 143 153 156 154 147 131 117 104 93 85 79 77 76 76 77 77 78 78 80 82 87 91 95 98 102 106 109 112 116 119 124 127 129 132 134 137 138 140 141 142 143 143 144 145 146 147 148 149 150 151 153 154 155 156 157 159 160 161 163 164 167 169 171 173 176 181 182 182 182 181 180 179 173 154 117 100 104 130 162 184 181 177 166 140 91 26 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 212 212 212 212 212 212 212 212 211 211 210 209 207 206 205 202 200 198 196 194 191 188 186 184 182 180 179 178 177 177 177 176 176 176 177 177 178 179 181 182 185 187 189 190 192 194 196 198 199 201 204 207 209 212 215 218 218 209 189 149 128 134 153 175 189 190 187 181 176 171 171 175 182 190 199 208 212 215 216 217 215 206 195 186 182 182 184 186 187 186 180 169 165 166 171 203 220 227 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 227 226 224 221 217 207 199 193 189 188 188 188 189 189 188 184 176 166 154 139 118 104 90 78 68 59 56 54 53 52 51 50 50 49 48 47 47 47 47 48 48 49 50 52 53 54 54 56 62 71 87 97 106 118 133 156 162 163 158 147 127 112 100 90 83 78 77 77 77 78 79 80 83 85 88 93 96 99 102 106 110 113 117 120 124 128 131 134 136 138 140 142 143 144 145 146 147 148 149 151 152 154 155 156 158 159 160 162 163 164 165 167 168 169 170 172 174 175 176 178 182 184 184 184 183 182 181 175 159 123 105 109 134 164 184 181 176 164 137 86 24 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 221 221 221 222 222 222 222 222 221 221 220 218 217 215 214 211 209 207 205 203 200 197 195 192 190 187 186 184 183 183 182 182 182 182 182 183 185 186 188 190 193 195 197 199 200 202 204 205 207 208 211 213 215 216 218 219 214 192 162 132 130 150 171 187 191 188 182 176 171 169 173 181 190 199 206 212 215 216 217 217 216 207 196 186 182 182 184 185 186 185 179 168 164 165 172 206 221 228 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 228 226 224 223 220 213 205 198 192 189 188 188 189 190 190 190 187 182 174 164 147 133 119 105 92 77 70 64 59 56 53 52 51 51 50 50 50 50 50 50 51 51 52 53 54 55 57 62 71 83 97 105 116 130 148 168 171 168 159 144 121 106 95 86 81 78 78 78 79 81 83 86 88 91 94 98 101 104 107 110 115 119 122 126 129 133 135 138 140 142 144 145 146 148 149 151 152 153 155 157 159 160 162 163 165 166 168 169 170 171 172 173 174 175 176 177 178 179 180 181 184 185 186 186 185 183 182 178 162 129 110 114 137 166 184 181 176 163 133 81 21 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 231 231 231 231 232 232 232 232 231 231 230 229 227 225 223 220 218 215 213 210 207 205 203 200 198 195 193 192 190 189 189 188 188 188 189 191 192 194 197 199 202 204 205 207 208 210 211 212 213 214 216 217 218 219 219 217 201 169 138 127 143 170 185 190 189 184 176 171 168 170 179 189 198 205 210 214 216 217 218 218 216 208 197 187 182 181 183 184 184 184 178 168 163 165 172 208 222 228 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 230 230 230 230 229 228 226 225 223 222 217 211 204 197 191 188 188 189 189 190 192 192 190 188 183 171 160 147 134 120 103 91 81 73 66 60 57 55 53 52 52 52 51 52 52 52 53 54 54 55 58 64 73 83 94 105 114 128 145 165 179 178 170 157 138 114 100 89 83 79 78 79 81 83 85 89 92 95 97 100 103 106 109 112 116 121 124 128 131 134 137 140 142 144 145 148 149 151 152 154 156 158 160 162 164 166 168 169 171 172 174 175 175 176 177 178 179 179 180 181 182 182 183 183 183 185 186 187 187 186 185 184 180 166 135 115 119 141 168 183 181 176 161 129 75 18 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 240 241 241 241 242 242 241 241 241 241 241 240 239 237 235 231 227 223 219 215 212 209 207 206 204 202 200 199 198 197 196 196 196 197 197 199 201 203 205 207 209 210 211 212 213 214 214 215 216 217 218 219 219 220 219 213 173 142 127 130 170 186 191 189 186 179 170 167 168 173 189 196 203 208 212 216 217 218 218 218 216 209 198 187 181 181 182 183 183 183 178 167 163 164 171 208 222 228 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 230 230 230 230 230 229 227 225 224 223 221 216 209 202 195 190 188 188 188 189 191 193 194 194 193 188 181 171 161 148 131 118 106 95 85 74 68 63 59 56 54 54 53 54 54 55 55 55 56 57 66 77 87 97 104 114 127 144 163 182 187 182 169 151 129 105 93 85 80 79 80 82 85 88 91 95 98 100 102 105 108 111 115 118 122 127 130 134 137 139 142 144 146 148 150 152 154 155 157 160 163 165 168 170 172 174 176 177 178 179 180 181 182 182 183 183 184 184 184 185 185 185 186 186 186 187 187 188 188 187 186 185 181 169 141 121 124 145 170 183 181 176 159 125 70 16 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 252 251 249 246 244 241 240 239 239 240 241 241 242 243 243 242 241 240 237 233 226 221 216 212 210 207 206 205 204 204 203 203 203 204 204 206 208 210 212 214 215 215 216 216 217 217 218 219 220 221 221 221 221 219 214 162 133 125 136 166 192 191 189 185 181 166 164 166 172 185 195 201 207 212 216 218 219 219 219 219 217 209 199 189 182 181 181 182 182 182 178 168 163 163 168 206 222 228 229 229 228 229 229 229 229 229 229 229 229 229 229 229 229 229 230 230 230 230 230 230 229 227 226 224 223 222 220 216 210 202 194 191 189 188 188 189 191 193 195 197 197 195 191 185 177 163 152 140 128 117 104 95 87 81 75 69 66 64 62 61 61 62 65 70 78 90 97 103 110 118 135 153 172 187 196 192 177 157 134 112 91 84 82 81 82 87 91 95 98 100 103 105 107 110 113 117 120 124 128 131 135 138 141 143 146 148 150 152 154 157 160 162 165 168 171 174 176 178 180 182 183 185 186 186 187 187 187 187 187 187 187 187 187 187 187 187 187 187 187 188 188 188 188 189 188 187 186 183 172 147 127 131 150 172 183 180 175 155 118 62 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 180 181 182 185 190 194 199 200 200 198 196 198 201 205 211 220 227 233 236 235 233 230 226 221 217 213 210 209 208 207 207 207 207 208 209 213 215 216 216 216 215 215 215 215 215 217 218 219 219 216 203 192 178 161 143 124 124 141 165 186 192 189 186 181 173 162 162 168 177 188 198 205 211 215 218 219 219 219 219 219 217 211 201 191 184 180 181 181 181 181 178 169 163 161 165 200 220 227 228 228 228 228 229 229 229 229 229 229 229 229 229 229 229 230 230 230 230 230 230 230 229 227 226 224 223 222 222 219 214 208 199 194 191 189 188 188 190 191 194 196 198 199 198 195 190 180 170 160 149 139 125 115 107 99 92 85 81 78 76 76 78 81 85 90 96 102 107 114 125 138 158 175 189 198 200 187 165 140 117 99 86 84 83 85 89 94 98 100 103 105 108 110 113 116 119 124 128 131 135 138 142 144 147 149 151 154 157 159 162 164 168 171 174 177 179 182 184 186 187 188 188 189 189 189 189 189 189 189 189 189 188 188 188 188 188 188 188 188 188 188 188 189 189 189 189 188 187 184 174 150 132 136 154 175 183 180 174 151 112 56 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 148 162 177 189 197 202 206 207 207 205 204 204 204 204 204 208 214 220 226 232 235 234 232 228 224 219 216 213 212 211 210 211 212 214 216 219 218 217 212 202 197 198 201 203 203 198 187 175 160 145 132 128 125 121 115 121 140 164 184 193 190 186 182 176 164 159 162 170 180 190 202 209 214 217 219 219 219 219 219 219 218 212 204 194 186 181 180 180 181 180 178 170 163 160 162 193 216 226 228 228 228 228 228 229 229 229 229 230 230 230 230 230 230 230 230 230 230 230 230 230 229 227 226 224 223 223 222 221 218 212 203 197 193 190 189 188 189 190 192 194 198 200 201 201 198 192 185 176 167 157 144 134 126 118 111 103 99 97 95 95 96 99 102 105 108 114 122 133 146 160 179 192 201 203 198 173 146 122 103 90 85 86 88 92 97 101 104 106 108 110 114 117 120 124 127 132 136 139 142 145 148 151 153 155 158 161 164 167 170 173 177 180 183 185 187 189 189 190 191 191 192 192 192 192 192 191 191 191 191 191 190 190 190 190 190 189 189 189 189 189 189 189 189 189 189 188 188 185 176 153 137 140 158 177 183 180 173 147 105 49 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 152 178 200 216 224 226 226 226 226 226 226 225 222 217 211 207 206 209 214 223 232 234 234 232 230 225 222 219 216 215 215 216 218 220 222 217 205 194 182 165 154 155 156 157 153 140 123 105 86 71 71 80 94 108 119 141 168 185 194 193 186 184 178 169 157 157 163 172 183 193 206 213 216 218 219 219 219 219 219 219 219 214 207 197 189 182 180 180 180 180 178 171 164 160 160 184 211 224 228 228 228 228 228 228 228 229 229 230 230 230 230 230 230 230 230 230 230 230 230 230 228 227 225 224 223 223 223 222 220 215 207 200 195 192 190 189 188 189 190 193 197 200 203 204 204 200 195 188 181 172 160 151 143 136 129 122 118 116 114 113 113 114 115 118 121 131 143 156 170 182 197 204 206 201 188 151 124 105 92 87 88 91 95 100 104 108 110 112 114 117 121 125 128 132 136 141 144 147 149 152 155 157 160 163 166 170 173 177 180 183 186 188 190 192 193 193 194 194 194 194 195 195 195 195 195 194 194 194 194 194 193 193 192 192 192 192 191 191 191 191 191 190 190 190 190 189 188 186 177 156 141 145 162 179 183 180 171 143 98 43 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 186 210 221 226 227 227 226 226 225 225 225 225 225 225 224 217 210 207 207 210 225 231 234 234 234 230 228 225 222 220 221 223 224 224 222 202 160 129 109 98 83 72 62 50 36 23 23 28 39 54 80 99 114 128 143 177 190 195 193 189 184 181 172 161 153 154 162 173 184 196 210 215 217 218 218 219 219 219 219 219 219 217 210 202 192 184 181 180 179 179 178 172 165 160 158 174 205 222 228 228 228 228 227 227 228 228 229 229 230 230 230 230 230 230 230 230 230 230 230 229 228 226 225 224 223 223 223 223 221 218 209 203 198 194 191 189 189 189 190 192 197 200 203 205 206 205 201 196 190 184 174 166 159 152 145 139 134 131 127 125 123 123 126 132 141 159 171 181 190 199 208 210 205 192 165 123 103 92 88 88 93 98 103 107 109 112 114 117 120 124 129 133 137 141 145 149 151 154 156 159 163 166 169 173 176 181 184 187 190 192 194 195 195 196 196 197 198 198 199 199 199 199 199 199 199 199 199 199 198 198 197 197 196 196 196 195 195 194 193 193 192 192 191 191 190 189 189 187 178 159 145 150 165 180 183 179 170 138 91 37 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 197 216 224 226 226 224 223 223 223 224 224 224 224 225 225 224 218 212 207 207 211 220 228 233 234 233 232 229 227 227 230 230 218 184 115 59 41 27 18 11 8 5 4 6 10 28 49 73 97 118 135 141 152 166 185 196 196 193 189 184 182 174 162 152 150 152 160 172 186 201 214 216 217 217 217 218 219 219 219 220 220 219 215 208 199 188 183 180 179 179 178 174 167 161 158 162 190 212 226 228 228 227 227 227 227 227 228 228 229 229 229 229 230 230 230 230 229 229 229 228 226 225 224 224 224 223 223 223 222 218 210 203 198 194 191 189 189 189 190 193 198 201 204 207 209 209 207 204 199 192 183 176 169 163 157 149 145 143 141 141 146 153 162 171 180 188 194 200 206 211 211 204 182 151 117 95 92 92 94 99 107 111 114 116 118 122 125 129 133 138 143 147 151 154 157 160 163 166 169 173 178 181 185 188 191 194 196 197 198 199 200 200 201 202 203 204 204 204 205 205 205 206 206 206 206 206 206 205 205 204 204 203 202 202 201 200 200 199 198 197 196 195 194 193 192 190 189 187 179 161 151 156 170 182 183 179 166 130 80 29 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 205 219 225 226 225 223 223 223 223 224 224 224 224 224 225 225 222 216 210 207 211 219 227 232 234 234 233 232 231 231 226 189 138 87 47 24 17 12 8 6 4 5 13 27 50 83 103 120 133 141 152 162 175 186 194 197 194 189 185 183 181 167 156 149 148 150 158 172 188 205 216 216 216 216 216 217 219 219 219 220 220 220 218 214 206 193 186 182 179 179 177 175 169 163 158 159 177 200 220 227 228 227 227 227 227 227 227 227 227 228 228 228 228 228 228 228 228 227 227 226 225 225 224 224 224 224 224 223 220 216 207 201 196 193 190 189 190 191 194 197 202 206 209 211 212 212 210 207 204 198 190 184 178 173 168 164 163 163 164 167 172 177 183 188 192 199 204 209 211 212 199 171 142 116 101 94 95 98 103 108 114 116 119 122 125 131 135 140 144 148 154 157 161 164 168 173 176 180 184 187 191 193 196 197 199 200 201 202 203 203 204 205 205 205 206 206 206 207 207 207 207 207 208 208 208 208 208 208 207 207 207 207 206 205 205 204 203 202 201 200 199 197 196 195 193 191 190 187 180 162 154 160 172 183 183 178 162 123 72 24 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 207 220 225 226 225 222 222 223 224 225 224 224 224 224 225 225 223 217 211 209 211 219 227 233 234 234 234 233 230 222 171 117 70 34 16 8 6 5 4 3 6 19 39 65 92 120 134 145 153 159 171 181 190 196 197 195 190 186 184 183 176 160 151 147 147 149 157 172 191 209 217 216 215 213 213 216 218 219 220 220 220 221 220 217 212 200 191 185 180 179 177 176 172 166 159 157 166 187 210 225 228 227 227 227 227 226 226 226 226 227 227 227 227 227 227 227 226 226 226 225 225 224 224 224 224 224 223 221 217 211 203 197 194 191 191 192 194 197 200 204 208 210 212 214 214 213 211 209 206 202 197 192 188 184 181 180 179 180 182 184 189 192 195 199 203 207 210 211 206 194 161 134 114 101 97 99 104 108 113 117 121 124 128 132 136 143 148 152 156 160 165 170 174 178 182 186 190 192 195 197 199 200 201 202 203 204 204 204 205 205 206 206 206 207 207 207 207 207 207 208 208 208 208 208 209 209 209 209 209 209 209 209 209 208 208 207 206 205 204 204 202 200 199 197 194 191 190 188 180 164 158 164 175 183 183 177 158 115 64 19 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 206 220 225 225 225 222 221 222 224 225 224 224 224 224 225 224 222 217 212 210 214 222 229 233 235 234 233 227 210 180 95 48 22 11 6 4 4 4 4 5 18 45 75 104 126 143 151 159 166 175 187 194 198 198 196 193 187 185 184 183 170 155 148 147 147 148 156 173 194 213 216 215 212 211 211 215 217 219 219 220 220 221 221 220 217 207 197 189 183 179 177 176 173 169 161 157 159 173 195 218 226 227 227 227 227 226 226 226 226 226 226 226 226 226 226 225 225 225 225 225 224 224 224 224 224 223 221 217 211 205 197 193 191 190 191 195 199 202 206 209 212 213 214 215 214 213 211 209 206 204 201 198 196 194 193 192 192 193 194 196 199 201 203 206 209 211 208 199 183 159 121 106 100 100 102 108 114 118 122 125 130 134 139 145 150 157 161 166 170 174 179 183 187 191 194 198 200 201 202 203 203 203 203 204 204 204 204 204 204 204 204 204 205 205 205 206 206 207 207 207 208 208 208 208 209 209 209 209 210 210 210 210 210 210 210 209 209 208 207 206 205 203 201 199 196 192 191 188 180 165 161 168 177 184 182 176 152 106 55 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 205 219 225 225 225 222 221 221 222 224 225 225 225 225 225 222 218 215 213 212 219 228 233 235 235 234 230 207 161 88 28 15 7 4 3 3 3 3 5 10 44 81 110 130 144 157 166 174 183 191 198 199 199 197 194 188 185 184 184 183 162 151 147 147 147 148 156 174 197 214 216 213 210 207 208 213 216 217 219 220 220 221 221 221 221 215 205 195 187 180 177 176 174 171 165 157 156 161 176 203 224 226 227 227 227 226 226 226 226 226 226 225 225 225 225 225 225 225 225 225 224 224 224 224 224 222 216 209 202 196 190 188 188 190 192 197 200 204 207 210 212 213 214 214 213 212 210 208 205 203 201 200 199 198 197 197 198 199 201 203 206 208 210 211 212 208 193 166 136 111 102 102 104 108 114 119 122 125 128 133 140 146 152 158 163 170 176 181 187 191 196 199 200 201 202 202 203 203 204 204 204 203 203 202 202 201 201 201 200 200 199 199 199 200 201 202 203 204 205 206 207 207 208 208 208 209 209 209 210 210 210 210 211 211 211 211 211 210 209 209 207 206 204 201 198 193 192 188 180 166 164 172 180 184 182 175 145 97 47 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 198 216 224 225 226 222 221 221 221 221 221 221 221 220 219 217 217 217 220 225 232 234 234 234 232 216 166 106 52 21 8 4 3 2 2 3 3 5 15 39 91 117 137 152 166 180 187 193 197 199 200 199 197 193 191 186 185 185 184 180 155 149 147 147 147 148 155 176 200 216 216 210 205 202 203 208 211 214 216 218 219 220 221 221 222 220 215 207 197 187 179 177 175 173 171 161 157 156 160 171 205 219 225 227 227 226 226 226 226 226 226 225 225 225 225 225 225 225 224 224 224 223 222 220 216 207 200 194 190 187 186 186 187 189 191 195 197 199 201 202 204 204 204 204 204 203 203 202 202 202 201 201 201 201 202 204 206 207 208 208 209 209 207 201 186 149 125 111 105 104 106 111 116 121 125 132 137 144 150 157 165 171 177 182 188 194 197 199 200 201 201 202 202 202 201 199 198 196 194 192 188 184 181 177 174 171 170 169 168 168 168 169 171 173 176 180 184 187 191 195 200 202 205 206 208 209 209 209 210 210 210 210 211 212 212 212 212 212 211 211 210 208 207 204 200 194 192 188 180 168 167 176 182 184 182 171 134 84 36 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 189 211 221 224 226 224 223 222 221 221 221 221 221 221 221 221 223 226 228 230 233 232 227 215 191 127 80 45 21 9 4 2 2 2 2 2 4 14 36 73 117 139 157 171 182 191 194 197 199 200 199 197 195 193 190 186 186 186 183 176 152 150 149 149 148 149 156 178 203 216 215 208 202 198 198 202 206 209 211 214 216 218 220 220 221 221 219 214 207 196 184 179 176 174 172 166 160 157 157 160 178 201 215 223 226 226 226 225 225 225 225 225 225 225 224 224 224 223 223 222 219 216 212 208 202 196 192 189 187 186 186 186 188 189 191 193 195 196 198 199 200 201 201 202 202 202 202 203 203 203 204 205 206 206 207 207 207 207 207 206 200 187 171 153 136 120 114 111 112 116 121 126 130 134 139 146 152 159 166 174 183 188 191 194 196 199 200 200 199 198 196 192 188 184 179 172 167 162 158 154 151 149 147 145 143 141 140 139 139 139 141 142 144 146 149 154 158 163 169 175 184 189 195 199 203 206 208 209 210 210 210 210 211 211 212 213 213 212 212 212 211 210 208 206 201 195 193 187 179 169 170 179 183 184 181 168 124 73 29 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 175 202 215 221 225 224 224 223 223 222 222 222 223 223 224 225 226 228 229 228 222 205 181 149 111 56 30 14 6 3 2 1 2 2 2 3 8 30 64 104 141 160 174 185 192 196 198 199 200 199 198 196 194 192 190 186 187 187 183 173 152 152 152 151 149 149 157 180 205 216 214 205 198 194 192 195 199 202 205 208 212 215 217 218 220 221 220 218 214 206 193 185 180 176 173 170 164 159 156 155 162 178 196 211 221 225 225 225 225 224 224 223 223 222 221 220 219 218 216 214 210 207 203 199 195 191 189 188 187 186 187 188 189 191 192 195 196 198 199 200 202 202 203 204 205 206 206 206 207 207 208 208 208 208 207 205 202 197 189 180 164 151 138 126 117 113 115 117 120 125 132 138 144 150 157 167 173 179 184 189 194 196 197 198 197 193 190 185 180 175 168 163 158 154 149 144 140 137 134 132 130 129 128 128 127 126 125 125 125 125 125 126 127 129 131 134 138 142 148 154 164 172 180 188 194 201 204 207 209 210 210 210 211 211 212 213 213 213 213 213 212 211 210 207 202 195 193 187 179 171 173 181 184 184 180 163 113 63 23 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 157 188 204 212 220 222 223 223 223 223 223 223 224 224 224 223 221 217 210 199 176 145 108 69 34 11 6 3 1 1 1 1 1 1 1 4 19 54 95 131 161 177 187 194 197 198 199 200 199 199 197 195 194 193 190 188 188 188 183 170 154 155 155 154 150 149 158 183 207 216 213 203 195 190 186 187 191 193 196 200 204 209 212 215 217 220 220 220 219 215 204 194 186 180 175 172 168 163 158 155 153 160 173 190 207 220 222 223 224 223 222 221 220 219 218 216 214 212 210 207 203 200 197 195 193 191 191 190 190 191 192 193 195 197 198 201 202 203 205 206 207 207 208 208 209 209 210 210 209 209 207 206 203 200 196 188 181 171 159 145 129 122 118 116 117 120 124 129 134 139 148 154 162 170 178 187 191 195 196 197 195 193 190 186 181 173 166 159 152 145 138 133 130 127 125 124 123 123 122 122 121 121 121 121 121 121 121 121 121 120 119 119 119 119 120 122 124 127 130 135 145 154 163 173 182 192 198 203 206 209 209 210 210 211 212 213 213 214 214 214 213 212 211 208 202 196 193 186 178 173 175 183 185 183 179 155 102 53 17 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 138 167 185 197 209 215 218 220 220 221 221 221 221 220 218 212 202 183 157 123 72 42 22 10 3 2 1 1 1 1 1 1 1 1 1 8 40 83 125 154 179 190 195 197 197 199 199 199 199 198 197 196 195 194 191 189 190 189 183 168 157 158 159 157 151 150 160 185 209 215 211 201 192 186 180 179 181 182 185 189 194 200 204 208 212 217 218 220 220 219 215 206 196 187 179 174 172 168 163 156 153 152 154 162 179 206 215 221 224 223 223 221 220 219 217 214 212 210 208 206 202 200 198 196 195 195 195 197 199 201 205 207 209 211 212 213 214 214 214 214 213 213 213 212 211 210 210 209 207 205 201 195 186 176 163 146 135 127 122 119 117 117 118 120 124 133 140 148 157 165 176 183 189 193 195 197 197 197 196 193 184 174 163 152 142 133 128 126 124 123 122 122 122 121 121 121 122 122 122 123 123 123 123 123 123 123 122 122 121 121 120 119 118 118 117 117 117 118 120 122 128 136 145 156 166 180 189 196 202 206 209 209 210 211 212 213 213 214 214 214 214 213 212 209 203 197 193 186 178 174 179 185 185 182 177 146 89 43 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 114 131 144 154 166 173 177 180 180 178 172 165 154 139 121 92 70 50 34 21 10 6 3 1 1 1 1 1 1 1 1 1 1 1 3 23 78 122 155 176 193 195 196 197 197 199 199 199 199 198 198 198 197 195 192 191 192 191 184 169 163 164 164 160 151 150 164 188 210 215 209 198 189 182 173 169 167 166 167 170 175 181 187 193 199 207 211 215 218 219 219 216 211 203 193 181 176 173 170 167 158 154 151 150 150 158 174 191 206 217 220 221 221 220 219 218 216 215 214 213 212 211 211 212 213 214 214 215 215 216 216 216 215 215 215 214 213 213 212 210 208 205 202 198 193 185 177 169 161 153 141 135 130 127 125 124 124 125 126 128 133 138 144 149 154 159 165 171 178 185 191 194 197 197 196 188 177 164 151 139 129 125 123 122 121 121 121 121 121 122 124 126 128 130 132 136 138 141 143 146 148 148 148 148 146 144 141 139 135 132 127 124 122 120 118 116 115 115 115 115 117 121 127 135 145 161 172 183 192 200 205 207 209 210 211 212 213 214 214 215 214 214 213 210 203 197 193 185 178 176 182 186 185 181 174 130 72 31 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 110 115 119 123 125 122 120 115 109 100 94 86 77 67 54 44 34 25 17 9 5 3 1 1 1 1 1 1 1 1 1 1 3 7 48 105 144 170 186 195 195 196 196 197 199 199 199 199 199 200 200 198 196 193 193 194 192 186 172 168 168 167 161 150 150 166 191 211 214 208 197 188 180 170 163 159 156 155 156 158 163 169 175 182 192 199 205 211 215 218 217 215 211 206 195 186 179 174 171 166 161 157 153 150 150 155 160 167 179 194 203 210 214 215 216 216 215 215 214 214 213 213 213 213 213 213 213 212 212 210 208 205 202 198 192 187 183 178 173 167 163 158 154 150 146 143 140 137 134 131 130 128 128 127 128 130 132 136 140 146 153 161 169 177 187 191 195 197 198 194 186 175 164 153 142 136 131 127 124 122 121 121 122 123 126 129 134 139 144 152 157 162 167 171 175 178 179 180 181 182 182 181 180 179 176 173 169 164 159 151 145 138 131 125 120 117 114 113 113 113 115 119 124 133 147 159 171 182 192 201 204 207 208 210 212 213 214 215 215 215 214 213 210 203 198 191 184 178 178 185 186 184 179 170 115 59 23 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 97 98 97 95 92 88 84 80 75 69 65 61 56 51 47 42 35 28 21 12 6 3 1 1 1 1 1 1 1 1 1 1 5 13 76 130 162 180 192 195 195 195 196 197 199 199 199 199 200 201 201 199 197 194 195 195 194 189 177 172 172 169 161 150 150 169 193 211 214 208 196 187 178 168 159 154 148 145 144 144 147 151 157 163 174 181 190 198 205 213 215 216 215 213 206 198 190 182 176 171 168 164 159 155 151 149 148 149 154 165 171 178 183 187 193 195 197 198 199 200 199 199 198 196 194 192 190 187 184 180 176 172 169 165 160 157 153 150 146 142 140 137 135 133 132 131 130 130 130 131 132 133 135 137 142 148 154 161 167 176 182 187 192 196 197 193 187 179 171 161 152 144 135 128 123 121 120 120 121 124 128 132 138 144 152 159 165 171 176 182 186 190 193 196 198 199 200 200 201 201 201 200 200 199 197 195 192 188 184 177 169 161 152 142 131 124 118 114 112 111 111 113 117 123 135 147 159 172 184 195 200 204 207 209 211 213 214 215 215 215 215 213 209 203 198 190 183 179 180 187 186 183 176 163 99 47 17 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 89 89 89 87 83 75 71 68 66 65 64 64 63 62 61 58 54 47 39 30 16 8 3 1 1 1 1 1 1 1 1 1 2 8 22 104 151 175 187 195 195 194 194 195 198 200 199 199 200 201 203 202 200 197 196 197 197 196 191 181 176 175 169 160 149 150 172 195 212 214 208 196 186 178 168 157 151 144 138 135 132 133 136 139 144 153 161 169 179 189 201 208 212 214 214 213 209 203 195 186 178 174 170 167 163 157 153 150 147 145 145 146 148 151 156 163 167 170 172 173 174 174 173 171 169 166 163 160 156 152 147 144 141 139 137 135 134 133 133 132 132 132 132 132 133 133 134 135 136 137 141 144 148 153 159 167 174 182 189 196 201 201 199 195 191 181 170 158 145 133 124 120 118 118 118 120 122 125 129 134 142 149 158 166 174 184 191 196 199 202 205 206 207 207 208 208 209 209 209 209 209 209 209 209 209 208 207 206 204 202 197 191 184 175 164 149 137 127 119 114 110 109 110 112 115 125 135 148 161 174 188 196 201 205 207 210 212 214 215 215 215 215 213 209 203 197 188 182 180 182 188 186 182 173 154 82 36 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 85 86 86 85 83 74 70 67 65 65 69 73 77 80 82 78 72 64 54 41 22 11 4 1 1 1 1 1 1 1 1 1 3 12 36 129 164 182 190 196 194 192 193 195 198 200 199 199 200 202 204 203 200 198 198 199 199 197 193 185 179 176 168 158 149 150 174 197 212 213 208 196 187 178 168 157 150 142 135 131 126 124 124 125 127 132 138 146 155 165 182 194 204 212 214 215 214 213 210 204 190 181 175 171 168 166 163 160 157 152 147 145 143 142 142 141 142 142 142 142 142 142 141 141 140 139 138 137 136 136 136 135 135 135 134 134 134 134 134 134 135 135 136 137 138 141 144 147 151 155 163 171 179 187 195 203 207 210 212 211 201 185 169 153 140 128 123 119 116 115 115 115 116 117 119 125 133 143 155 167 182 191 197 201 204 206 207 208 208 209 209 209 209 209 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 208 206 201 195 186 171 157 142 129 119 111 108 108 108 110 116 126 137 150 164 181 190 198 202 206 209 212 214 215 215 215 215 213 208 203 195 187 182 182 184 189 185 180 168 142 66 26 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 84 85 85 84 77 73 71 71 74 94 102 106 106 105 95 86 74 60 45 25 12 5 1 1 1 1 1 1 1 1 1 4 19 55 150 175 187 192 196 193 191 192 194 198 198 198 199 201 204 205 203 201 201 201 202 202 199 194 187 178 173 164 155 148 150 176 198 212 213 209 200 190 180 172 160 152 144 137 131 126 122 120 119 118 119 120 122 126 131 143 155 170 184 199 210 213 214 214 214 212 206 198 188 179 172 169 166 165 163 160 158 156 153 151 149 147 146 145 144 143 142 142 141 140 140 140 140 140 140 140 140 141 142 143 143 144 145 147 149 152 154 157 161 167 175 182 189 195 201 208 211 213 214 213 199 180 162 146 136 129 124 121 118 116 114 113 113 113 114 117 124 134 146 161 180 190 197 202 205 207 207 208 208 209 209 209 209 209 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 211 211 211 211 211 211 211 210 210 208 204 194 182 167 150 134 117 110 107 106 106 109 116 126 138 151 170 183 192 199 204 208 211 213 215 216 216 215 212 207 202 192 185 183 183 187 189 184 177 159 121 45 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 85 86 87 86 82 79 78 81 91 112 116 117 116 111 99 87 72 57 40 23 11 4 1 1 1 1 1 1 1 1 1 5 23 64 157 177 187 192 196 193 191 191 192 195 196 197 200 203 206 206 204 203 203 204 204 202 198 191 182 172 167 160 153 148 150 175 197 211 213 210 203 196 188 179 167 158 150 143 137 130 126 123 121 119 118 118 118 119 121 125 130 138 149 163 183 195 205 211 214 214 212 209 205 200 191 184 177 172 168 164 162 160 159 157 155 153 152 151 150 149 149 149 149 148 148 148 148 148 148 149 149 150 151 153 156 159 163 168 173 180 185 190 195 199 203 205 207 208 206 188 171 159 152 149 144 139 133 128 123 119 115 112 111 111 111 113 119 128 139 157 169 179 187 193 200 203 205 207 208 208 209 209 209 210 210 211 211 211 212 212 212 213 213 213 213 213 213 213 212 212 212 212 211 211 211 211 211 211 211 211 211 210 210 208 203 195 182 167 149 126 115 108 105 104 106 111 119 130 142 163 177 188 196 202 207 211 213 215 216 216 215 211 206 201 190 185 183 185 189 188 182 172 148 101 31 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 86 89 90 90 87 85 85 91 107 124 126 126 122 114 99 83 66 50 35 18 9 3 1 1 1 1 1 1 1 1 1 5 24 68 158 177 187 192 196 194 192 191 191 193 196 198 202 206 207 207 205 205 206 206 204 199 191 181 170 164 161 156 151 147 149 173 194 209 211 210 206 201 195 189 178 170 162 155 148 139 134 130 126 123 120 118 117 117 117 117 119 122 127 135 150 163 177 190 201 209 212 213 213 211 205 200 195 190 185 178 174 171 169 166 164 162 161 160 159 158 157 157 156 157 157 158 159 161 162 166 169 172 175 178 183 186 190 193 197 201 204 205 202 193 173 167 165 164 163 153 142 135 129 126 123 120 116 113 110 109 107 108 112 118 131 142 154 164 175 188 195 201 204 206 208 208 209 209 210 210 211 211 212 213 213 214 214 214 215 215 215 215 215 216 216 216 215 215 215 215 214 214 213 213 212 212 212 211 211 211 211 211 211 210 208 203 194 181 164 137 121 111 105 103 104 108 114 123 135 155 171 184 194 201 207 210 213 215 216 216 215 210 205 199 188 185 184 186 190 186 180 165 135 82 20 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 89 93 95 96 93 92 94 103 122 132 133 131 124 113 93 74 56 41 28 14 6 2 1 1 1 1 1 1 1 1 1 5 23 66 156 175 185 191 196 196 193 192 192 194 197 201 205 208 208 208 208 208 207 206 199 188 175 163 154 154 155 154 150 146 147 168 190 206 209 209 208 205 202 199 191 185 178 171 165 154 148 142 137 132 126 123 120 118 117 116 116 116 117 118 123 132 144 159 174 191 200 206 210 212 213 213 211 208 203 197 192 188 184 182 178 177 175 174 173 172 171 171 172 172 174 176 178 180 183 187 192 196 200 204 207 206 203 199 194 189 186 183 176 162 132 125 122 122 122 124 124 123 121 117 113 109 106 103 103 108 114 122 133 145 165 180 191 199 203 206 207 208 208 209 210 210 211 211 212 213 214 214 215 216 216 217 217 217 217 218 218 218 218 218 218 218 217 217 217 217 217 216 216 215 214 214 213 212 212 211 211 211 211 210 210 208 203 193 177 149 129 115 106 102 102 105 110 118 128 149 166 181 192 200 206 210 213 215 216 217 214 209 203 196 186 185 185 188 191 184 177 156 119 62 12 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 84 93 99 102 102 99 98 105 117 134 139 138 132 121 107 80 60 44 31 18 10 4 1 1 1 1 1 1 1 1 1 1 4 20 58 150 171 182 189 197 198 197 195 195 196 202 206 209 210 210 210 210 209 207 203 185 165 149 138 132 144 150 151 149 145 145 162 184 203 207 208 208 207 206 206 203 201 197 192 186 176 168 160 153 146 138 132 128 124 120 117 116 115 115 115 115 116 118 123 132 152 169 184 197 206 212 214 214 214 214 214 213 211 208 204 200 198 196 195 195 197 198 200 201 202 205 207 209 210 211 212 213 213 212 212 208 198 181 160 138 117 110 108 111 119 129 136 138 138 133 126 118 109 100 96 93 94 95 99 106 127 149 169 186 197 203 205 207 207 208 208 209 209 210 211 212 213 214 215 216 217 217 217 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 218 217 217 216 215 214 213 212 211 211 211 211 210 210 207 201 189 162 139 121 108 102 100 103 107 113 122 143 163 179 191 199 206 211 214 215 216 217 213 207 201 193 186 185 187 189 191 182 173 145 101 43 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 85 99 106 109 109 108 110 120 133 143 144 138 128 111 87 55 42 29 19 10 4 2 1 1 1 1 1 1 1 1 1 1 3 14 43 133 160 173 181 192 199 200 201 202 204 209 210 211 211 211 211 209 205 194 176 141 120 108 103 103 128 142 148 148 144 142 150 172 193 201 204 206 207 207 207 207 207 207 207 206 202 197 190 183 175 165 157 150 143 136 130 125 121 119 116 115 114 114 114 114 117 120 127 136 149 167 180 192 201 208 213 216 218 220 221 221 220 219 218 217 215 215 215 215 215 214 213 212 209 205 193 175 156 137 122 106 105 108 116 129 144 148 149 149 145 137 124 111 99 92 90 89 89 90 93 102 118 139 162 183 197 202 205 206 207 208 208 209 209 210 211 213 214 215 216 217 217 217 218 218 218 218 218 218 218 219 219 219 219 219 219 219 219 219 219 219 219 219 219 219 219 219 219 218 218 218 218 217 216 215 214 212 212 211 211 210 210 210 207 200 176 151 130 113 102 99 101 104 108 116 139 160 177 190 199 207 211 214 216 217 216 211 205 197 190 186 186 189 190 189 178 163 124 73 23 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 86 102 110 113 114 115 121 131 141 147 145 134 116 94 72 53 39 25 15 8 3 2 1 1 1 1 1 1 1 1 1 1 2 9 29 114 148 163 169 177 196 202 204 206 209 211 212 212 212 211 209 202 187 166 140 116 105 98 95 95 110 132 142 145 144 140 142 159 179 191 196 201 204 205 205 207 207 208 208 208 207 205 202 198 192 183 176 169 161 154 145 140 135 130 127 122 119 117 115 114 114 115 117 119 123 129 135 142 150 159 169 176 183 188 193 196 199 200 202 202 201 198 192 184 174 160 152 144 137 130 125 124 127 131 136 142 144 145 146 149 149 141 131 120 109 101 97 93 90 89 89 94 102 114 131 158 172 184 193 200 204 206 207 208 208 209 210 212 213 214 215 216 216 217 217 218 218 218 218 218 219 219 219 220 221 222 222 223 223 224 224 224 224 224 224 223 222 221 221 220 220 219 219 219 219 219 218 218 218 217 215 214 213 212 211 210 210 210 208 205 185 160 137 118 104 99 101 102 106 113 137 159 177 191 200 208 212 215 216 217 215 209 202 195 188 186 187 190 190 185 174 150 104 53 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 105 114 117 118 122 131 141 147 150 143 126 106 87 71 57 44 30 17 9 3 2 1 1 1 1 1 1 1 1 1 1 1 5 16 89 134 152 156 160 180 196 203 207 210 211 212 212 211 209 198 182 160 138 121 106 99 95 92 91 98 117 133 143 144 138 137 147 162 176 182 189 194 197 198 202 204 206 207 208 208 209 208 206 203 196 191 184 176 169 159 153 147 142 139 134 130 126 123 120 117 116 114 114 113 114 116 119 123 128 134 139 143 146 149 151 153 154 154 152 149 146 143 138 132 127 127 128 128 127 129 133 139 146 152 157 157 154 148 139 125 115 107 98 91 87 87 88 91 96 107 122 138 155 171 190 198 202 205 206 207 208 209 210 211 213 214 215 216 216 217 217 218 218 218 218 218 219 220 220 221 222 223 224 225 227 227 228 229 229 230 229 229 229 229 228 227 226 225 224 223 222 221 220 219 219 219 219 219 218 217 216 214 212 211 210 210 210 209 207 192 168 144 122 106 99 100 101 104 110 137 160 179 192 201 209 213 215 216 216 213 206 199 192 187 187 189 191 189 181 169 133 83 36 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 88 109 118 121 122 130 141 148 151 151 138 118 102 90 83 73 60 45 31 18 7 3 2 1 1 1 1 1 1 1 1 1 1 2 7 59 115 140 146 145 157 180 194 202 207 209 209 208 205 199 178 155 135 120 114 108 104 101 98 93 93 104 122 138 143 137 133 135 143 156 163 170 176 180 182 189 193 196 200 203 205 207 209 209 208 205 201 196 190 182 173 166 159 153 149 145 142 138 135 131 126 123 120 118 117 115 114 114 114 114 114 114 115 115 115 114 114 114 113 112 111 111 112 113 115 123 132 140 148 153 159 161 163 163 162 156 149 140 129 114 96 90 87 86 86 88 91 96 105 117 140 160 177 192 200 205 206 207 208 208 209 210 212 213 214 216 217 217 217 217 218 218 218 218 219 219 220 221 222 223 225 226 227 229 230 231 232 232 233 233 233 233 233 233 233 232 231 231 230 228 227 225 224 222 221 220 219 219 219 219 218 217 215 213 212 211 210 210 210 209 197 175 150 127 107 99 99 100 103 109 138 162 180 194 203 210 214 216 216 216 211 203 196 190 187 187 190 191 187 177 160 112 62 22 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 90 112 121 124 126 138 148 153 153 150 130 113 106 105 106 105 89 76 60 39 16 6 2 2 1 1 1 1 1 1 1 1 1 1 3 25 92 127 139 137 132 149 172 192 198 204 204 200 192 178 148 130 122 118 116 117 121 121 114 100 93 95 109 126 139 140 132 128 128 133 140 144 148 153 154 160 167 174 181 189 196 202 206 209 210 211 210 208 203 196 187 178 169 161 155 151 149 147 146 144 141 138 135 132 130 126 123 120 118 116 115 114 114 113 113 114 115 117 121 126 135 141 145 148 151 155 159 161 163 165 166 166 165 163 159 143 124 108 96 89 86 85 85 86 87 95 102 116 133 154 184 195 202 205 206 207 207 208 209 210 213 215 216 217 217 217 217 218 218 218 218 218 219 220 221 222 223 224 225 226 228 229 230 230 231 232 233 233 234 234 234 234 234 234 233 233 233 232 232 231 230 229 228 226 224 221 220 220 219 219 219 218 217 215 212 211 210 210 210 209 201 180 156 131 109 99 99 100 103 109 141 165 183 196 204 212 215 216 216 216 208 200 193 189 187 188 192 190 184 173 146 89 42 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 116 126 128 131 145 153 156 154 146 124 120 121 124 125 119 110 103 92 73 49 27 12 3 1 1 1 1 1 1 1 1 1 1 1 4 38 90 133 139 119 117 124 137 152 159 162 159 151 136 126 124 123 125 134 147 150 152 150 144 114 100 98 108 132 140 137 130 122 121 119 118 118 118 117 117 119 122 127 134 149 164 180 194 204 211 214 216 216 213 208 202 193 183 172 161 156 152 150 149 148 147 146 145 145 144 144 143 143 143 143 143 143 144 144 145 147 149 151 153 155 155 157 159 163 167 170 173 174 174 170 165 155 142 125 105 97 91 88 86 85 87 89 94 103 118 139 161 182 197 204 206 207 207 208 209 210 212 214 216 217 217 217 217 217 218 218 218 218 219 220 221 222 223 224 224 225 226 226 227 228 229 230 231 232 232 233 233 233 233 233 232 232 232 232 232 232 232 232 231 231 230 229 229 228 225 223 221 220 220 219 219 218 216 214 211 210 210 210 210 204 186 161 135 112 100 99 99 103 112 148 171 187 199 207 213 216 217 216 214 203 195 191 188 188 191 192 185 175 166 115 58 22 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 118 129 131 133 148 155 157 153 142 128 129 132 136 137 131 123 115 105 91 72 52 32 15 3 1 1 1 1 1 1 1 1 1 1 2 14 51 97 135 130 117 113 117 126 138 140 138 134 129 126 126 130 137 144 150 152 154 154 154 142 122 106 101 112 137 138 132 124 120 117 114 113 112 112 110 110 110 110 111 114 122 134 149 166 188 200 207 212 214 213 211 207 201 194 179 171 164 158 154 152 150 149 148 148 147 147 146 146 146 146 147 147 148 149 150 152 154 157 159 163 166 169 172 174 176 177 177 175 171 161 149 137 124 112 99 93 89 87 86 88 93 100 110 124 152 173 188 198 204 206 207 208 208 210 212 214 215 216 217 217 217 217 217 218 218 218 219 220 221 222 222 223 223 224 224 225 225 225 226 227 228 229 229 230 230 230 230 229 229 229 229 228 228 229 229 229 230 230 230 230 230 230 229 228 227 225 223 221 220 220 219 219 217 214 212 211 210 210 210 205 188 164 137 113 100 99 99 104 117 155 176 191 202 209 214 216 216 215 210 199 193 189 188 189 192 192 182 168 153 85 38 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 120 131 133 135 149 156 158 153 141 133 136 140 144 144 141 135 128 118 105 85 70 52 32 12 1 1 1 1 1 1 1 1 1 1 1 3 22 56 105 134 125 115 110 112 120 126 128 129 128 128 132 137 143 148 150 152 154 156 157 155 142 123 106 101 122 134 135 129 121 117 114 112 111 110 108 106 105 103 102 100 101 105 112 122 145 167 184 198 207 213 214 213 211 207 197 188 179 171 165 160 157 156 154 153 152 151 151 151 151 151 152 153 154 155 158 160 163 165 168 171 174 177 179 180 181 179 176 172 165 151 139 127 115 104 94 90 88 88 89 95 103 116 132 152 180 194 201 205 206 207 208 210 211 213 215 216 217 217 217 217 217 217 218 218 219 220 220 221 222 223 223 223 223 223 223 223 223 224 225 226 227 228 228 228 228 228 228 227 227 227 227 227 227 227 227 227 228 228 229 229 229 229 229 228 228 226 225 223 221 220 220 219 218 215 212 211 210 210 210 206 189 165 138 114 101 99 100 107 123 163 182 195 204 211 216 216 216 213 207 195 191 189 189 190 193 188 177 159 132 58 23 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 93 121 132 135 137 149 156 158 153 141 137 142 147 149 150 149 145 139 130 117 95 81 67 50 27 4 2 1 1 1 1 1 1 1 1 1 1 4 20 58 117 128 123 114 109 108 117 123 128 130 131 137 142 145 147 149 151 153 155 157 158 156 142 121 100 103 124 135 136 126 119 116 113 112 110 109 108 106 104 102 97 94 91 89 88 101 125 149 171 189 207 212 213 214 214 209 203 195 187 178 170 166 164 161 160 158 157 156 156 156 156 157 158 160 162 166 168 171 173 176 179 180 182 183 183 182 179 174 167 158 143 132 120 109 99 90 89 89 90 94 105 119 137 158 180 199 204 206 207 207 209 210 212 214 216 217 217 217 217 217 217 217 218 218 219 220 221 221 222 222 222 222 222 221 221 221 221 222 223 224 226 226 227 227 227 227 227 227 227 227 226 226 226 226 226 226 226 226 226 227 228 228 229 229 228 228 227 226 224 222 220 220 219 218 215 212 211 210 210 210 206 190 165 138 115 101 99 101 110 133 171 187 199 207 212 216 216 215 210 202 192 190 189 190 191 192 181 169 146 106 34 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 91 121 133 137 138 149 156 157 153 142 141 148 152 154 154 153 152 148 141 129 104 88 75 63 50 11 4 1 1 1 1 1 1 1 1 1 1 1 2 7 65 114 131 128 117 106 107 115 125 132 137 140 142 144 145 146 148 150 154 157 159 158 155 142 111 93 107 127 140 137 123 120 117 114 113 113 112 112 110 108 100 95 90 85 81 77 85 105 130 157 191 205 211 213 215 213 211 207 201 192 182 176 171 169 167 164 163 162 161 161 161 162 163 165 167 169 171 174 177 179 183 185 186 187 186 183 178 172 163 153 138 125 112 101 94 90 90 92 96 102 119 140 162 183 200 205 206 207 208 209 211 214 216 217 217 217 217 217 217 217 217 218 219 219 220 221 221 221 222 221 221 220 219 219 219 220 221 222 223 225 226 226 227 227 227 227 227 227 227 227 227 227 226 226 226 226 226 226 226 226 226 227 227 228 228 228 227 226 225 223 221 220 220 218 215 212 211 210 210 210 206 189 165 138 115 101 100 103 116 144 179 193 203 209 215 216 216 213 207 197 190 189 189 191 193 191 174 157 129 74 16 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 118 133 137 139 148 156 157 153 146 146 152 155 155 155 154 154 153 152 150 127 101 82 68 61 35 12 2 1 1 1 1 1 1 1 1 1 1 1 1 4 34 81 121 133 127 115 111 113 118 127 134 138 139 139 139 141 145 151 157 160 160 159 156 149 99 91 100 119 141 139 130 125 122 120 122 125 127 129 129 124 117 106 93 82 74 69 67 73 91 137 167 190 204 212 215 213 213 211 207 198 189 182 176 172 169 167 165 164 163 164 165 166 169 171 176 179 182 184 186 188 188 188 188 187 182 176 169 159 148 131 118 107 98 93 91 93 97 105 118 147 170 189 202 206 207 207 209 210 212 216 216 217 217 217 217 217 217 217 217 218 219 219 220 220 220 220 220 219 218 217 218 218 219 219 220 222 223 225 225 226 226 226 227 227 227 227 227 227 227 227 227 227 227 227 227 226 226 226 226 226 226 226 227 227 227 227 226 225 224 222 221 220 218 215 212 211 210 210 210 206 187 161 135 114 101 102 109 128 162 189 199 207 213 216 216 215 208 200 192 189 189 190 192 192 182 165 136 94 37 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 84 113 130 137 140 147 155 157 154 148 149 154 155 155 154 154 154 154 155 154 146 120 93 71 62 47 21 7 1 1 1 1 1 1 1 1 1 1 1 1 1 10 28 56 94 119 122 123 123 123 124 126 128 128 128 130 136 142 148 155 161 161 160 159 156 132 102 91 97 114 139 137 134 130 127 128 130 132 133 133 132 131 126 117 103 81 71 64 62 63 83 114 146 177 202 213 213 213 212 210 206 202 195 188 181 176 173 171 169 168 168 168 170 172 174 179 181 184 186 188 189 189 190 189 187 182 175 167 157 145 127 114 104 97 93 93 97 105 119 138 168 187 199 205 207 208 209 211 213 215 216 217 217 217 217 217 217 217 217 218 219 219 219 220 220 219 218 217 217 217 217 217 218 219 220 222 224 225 226 226 226 226 227 227 227 227 227 227 227 227 227 227 227 227 227 227 227 227 226 226 226 226 226 226 227 227 226 226 225 224 222 222 220 218 215 211 211 210 210 210 204 184 158 132 112 102 103 118 142 175 195 203 210 215 216 216 211 204 196 191 190 190 191 192 191 169 152 113 64 19 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 82 107 126 137 140 147 155 157 154 149 152 155 155 155 154 154 154 155 157 158 156 138 108 77 60 52 33 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 5 18 42 70 94 109 118 123 128 130 131 131 132 134 139 144 149 154 160 161 162 161 159 150 123 100 87 92 117 132 137 137 134 133 133 134 135 135 136 136 136 132 124 103 84 69 58 52 54 71 98 133 171 204 210 213 213 212 210 208 203 198 191 183 179 176 174 172 170 171 171 173 176 180 184 186 188 190 190 191 190 190 188 181 174 165 154 142 123 111 102 96 93 95 103 116 134 156 184 198 204 207 208 209 211 213 215 216 217 217 217 217 217 217 217 217 218 218 219 219 219 219 218 217 216 216 216 216 217 218 219 221 223 225 225 226 226 226 226 226 226 226 226 226 226 226 226 227 227 227 227 227 227 227 227 227 227 226 226 226 226 226 226 226 226 226 225 224 223 222 220 217 214 211 211 210 210 209 201 179 154 129 109 104 107 129 159 185 199 207 213 216 216 214 207 199 193 190 190 191 192 190 184 160 133 87 39 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 102 121 135 141 147 154 157 155 151 154 155 155 154 153 153 154 156 159 161 161 153 125 89 58 51 42 22 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 19 48 70 87 101 117 125 130 135 139 143 147 150 153 155 159 161 162 162 160 158 145 120 94 80 89 113 129 138 140 137 137 136 136 136 136 137 139 139 139 128 106 83 64 51 43 44 58 85 124 180 199 210 214 214 212 210 208 205 200 191 186 181 178 175 173 172 173 174 177 182 185 188 191 191 191 191 191 190 188 181 173 163 152 139 120 109 100 96 94 100 111 128 149 172 196 204 207 208 209 210 213 215 216 217 217 217 217 217 217 217 217 218 218 218 219 218 218 217 216 215 215 215 215 216 218 219 221 223 225 226 226 226 226 226 226 226 226 226 225 225 225 225 226 226 226 226 226 227 227 227 227 227 227 227 226 226 226 226 226 226 226 225 225 223 223 222 219 216 213 211 210 210 210 209 197 173 148 126 108 106 115 144 175 193 203 211 215 216 216 211 201 195 191 190 190 192 191 186 173 151 107 59 20 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 80 96 115 132 142 147 154 157 155 152 155 156 155 153 153 153 154 158 162 165 166 162 143 108 57 43 43 26 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 18 39 72 91 109 124 138 151 155 157 157 157 159 160 162 162 162 160 157 144 120 82 72 79 103 128 141 142 140 139 137 136 136 138 139 141 142 142 133 110 82 54 41 37 37 44 65 133 177 202 213 215 214 211 210 208 206 199 192 187 182 178 175 174 175 176 178 183 187 190 191 192 192 192 191 190 187 180 172 162 150 136 117 106 99 96 96 105 122 142 164 186 205 207 208 209 210 212 214 216 216 217 217 217 217 217 217 217 217 218 218 218 218 217 216 215 215 214 214 215 215 217 220 223 225 226 226 226 226 226 226 225 225 224 224 224 224 224 224 224 224 225 225 225 226 226 226 227 227 227 227 227 226 226 226 225 225 225 225 225 224 223 223 222 219 215 212 210 210 210 210 209 192 167 142 120 108 108 131 162 188 198 208 214 216 216 215 205 196 192 190 190 192 192 190 181 161 135 77 33 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 91 109 129 143 149 155 157 156 154 155 155 154 153 153 153 155 161 168 174 175 171 161 135 85 37 39 29 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 7 15 29 48 72 106 127 141 151 155 157 159 160 161 162 161 160 158 150 130 77 67 66 80 113 141 142 143 142 140 138 139 140 142 144 145 143 135 117 85 44 36 32 30 31 52 103 156 197 215 216 214 212 210 209 206 202 196 191 185 180 177 176 177 178 184 187 190 192 192 193 192 192 190 187 180 171 160 147 133 114 104 98 97 100 117 137 158 180 199 207 208 209 210 211 214 216 216 217 217 217 217 217 217 217 217 217 218 217 217 216 215 214 214 213 214 214 216 219 222 225 226 226 226 226 226 225 224 224 223 223 223 223 223 223 223 222 222 222 222 222 223 223 224 225 226 227 227 227 227 227 226 225 225 225 225 225 224 224 223 223 220 217 213 211 210 210 210 208 205 181 159 133 113 109 118 159 184 198 203 214 216 216 214 210 196 192 191 191 191 192 190 179 164 151 89 38 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 89 107 128 144 150 155 157 157 155 156 155 154 153 153 153 155 162 169 177 179 177 169 148 110 34 27 22 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 10 18 31 59 85 108 127 140 149 153 156 158 160 161 160 159 156 149 113 79 62 59 71 115 135 143 144 143 142 142 143 144 146 147 146 140 128 107 63 41 30 27 26 33 55 98 149 196 216 216 215 213 210 207 204 200 195 189 183 180 178 178 179 184 188 191 192 193 193 193 192 190 187 179 170 159 145 130 111 102 98 99 106 126 147 169 189 203 208 209 210 211 213 215 216 216 217 217 217 217 217 217 217 217 217 217 217 216 215 214 213 213 213 214 216 219 222 225 226 226 226 226 225 224 223 223 223 223 223 223 223 222 222 221 221 220 220 220 221 221 222 223 224 225 226 227 227 227 227 226 225 225 224 224 224 224 223 223 222 219 215 212 210 210 210 209 206 199 175 145 124 113 112 146 177 193 202 209 215 216 215 211 202 193 191 191 191 192 191 183 170 151 127 52 19 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 87 106 129 145 151 156 157 157 155 156 155 154 153 153 154 155 161 169 179 182 180 175 160 129 38 22 17 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 10 25 46 68 91 112 129 138 145 150 154 157 158 159 158 157 139 105 74 51 45 76 112 133 144 145 145 145 146 147 149 150 149 145 136 122 81 49 31 23 22 25 32 57 97 152 205 213 216 215 212 210 206 203 199 194 187 183 181 181 181 184 189 191 192 193 193 193 192 190 187 179 169 157 144 128 109 101 99 102 111 135 157 178 195 206 209 209 210 212 214 216 216 216 216 216 216 217 217 217 217 217 217 217 216 215 214 213 212 213 213 216 219 222 224 226 226 226 225 224 223 222 222 223 223 223 223 223 222 221 220 220 220 220 220 220 220 220 221 222 223 225 226 227 227 227 226 225 225 224 224 224 224 223 223 222 220 217 213 211 210 210 209 208 203 194 161 133 119 117 126 171 190 200 206 213 216 216 212 205 196 191 191 191 191 192 187 173 158 134 91 25 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 81 86 106 130 146 152 156 158 157 155 156 154 154 154 154 154 155 160 167 178 183 182 180 169 144 49 22 13 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 6 16 32 52 75 99 114 126 135 142 149 153 155 157 158 154 132 97 60 34 39 77 111 136 145 147 148 149 150 152 153 152 149 142 131 98 61 35 20 17 20 22 31 54 98 177 203 214 217 215 212 209 206 203 199 192 187 184 183 183 184 189 191 193 193 193 193 192 190 187 179 169 156 142 126 108 101 100 106 117 143 165 185 200 208 209 210 211 213 215 216 216 216 216 216 216 216 217 217 217 217 216 216 215 214 212 212 212 213 214 218 221 224 225 226 225 224 223 222 221 221 222 223 223 223 223 222 221 220 220 220 220 220 220 220 220 220 221 221 223 225 226 227 227 227 226 225 224 224 224 223 223 223 222 221 218 214 212 210 210 209 209 206 199 184 143 125 119 126 149 189 198 205 210 215 216 213 206 198 192 191 191 191 191 190 178 162 142 108 52 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 82 87 108 132 147 153 157 158 157 156 156 155 155 155 155 155 155 157 162 173 181 182 181 174 159 69 25 8 5 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 7 16 31 58 78 94 108 120 133 142 149 154 156 156 151 126 86 35 18 34 73 116 143 147 149 151 152 154 156 155 153 148 140 114 78 44 19 12 13 18 23 31 48 130 182 208 217 216 215 212 209 205 201 196 191 187 186 186 187 190 191 193 193 193 193 192 190 187 178 168 155 140 124 106 101 102 110 124 150 172 191 204 209 210 211 212 214 215 216 216 216 216 216 216 216 216 216 216 216 216 215 214 213 212 212 212 213 216 220 223 225 226 226 224 223 221 221 220 221 222 223 224 224 223 221 220 220 220 220 220 220 220 220 220 220 221 222 223 225 226 227 227 227 226 225 224 223 223 223 222 222 221 220 216 212 210 210 209 209 208 204 192 167 125 121 125 143 179 199 204 209 214 216 215 208 200 193 191 191 191 191 190 185 164 152 118 70 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 83 90 113 136 147 154 157 158 157 156 156 155 156 157 157 155 155 155 157 162 178 182 182 178 165 86 31 8 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 12 23 38 54 72 95 114 130 143 151 155 154 148 124 71 14 10 22 54 106 142 147 151 153 155 156 155 153 151 147 126 99 64 32 11 7 9 14 21 28 56 122 175 208 217 216 215 213 210 206 201 198 194 191 190 190 191 192 193 193 193 193 192 190 187 178 167 153 138 121 105 102 105 115 131 158 179 196 206 210 211 211 213 214 215 216 216 216 216 216 216 216 216 216 216 216 215 214 213 212 211 212 213 215 218 222 224 225 225 224 222 220 219 219 220 222 223 224 224 224 222 221 220 220 220 220 220 220 220 220 220 220 221 222 224 226 226 227 227 226 225 223 223 222 222 222 221 221 220 216 212 210 209 209 209 208 205 191 167 134 125 127 150 179 198 205 211 214 215 215 208 198 193 192 191 191 191 189 181 167 153 119 69 23 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 84 95 117 139 148 155 158 158 157 156 156 156 157 158 159 157 156 155 155 158 172 180 182 179 171 98 37 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 8 14 23 36 60 83 106 127 141 151 153 150 134 97 22 9 9 23 52 108 133 145 151 154 155 154 152 150 146 129 103 71 38 13 6 6 9 13 22 40 79 136 187 212 216 216 215 213 210 204 201 198 195 193 193 193 193 194 194 194 193 192 190 187 178 166 153 137 120 105 103 108 119 135 162 183 198 208 210 211 212 213 214 215 216 216 216 216 216 216 216 216 216 216 216 215 214 213 211 211 212 213 215 219 223 224 224 224 223 220 219 218 219 220 223 224 224 224 224 222 221 221 220 220 220 220 220 220 220 220 221 222 224 225 226 226 226 226 225 223 222 222 221 221 221 221 219 216 212 210 209 209 208 208 206 193 169 146 132 129 151 174 194 204 210 213 215 214 211 199 194 192 192 191 191 188 180 169 159 128 76 35 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 85 99 122 142 149 157 159 159 157 156 156 157 158 159 159 159 157 155 155 156 166 177 182 180 174 106 42 12 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 8 14 30 51 77 103 127 144 148 148 137 109 28 10 3 7 19 61 97 124 141 149 152 152 150 146 142 127 105 75 42 14 6 5 6 8 13 27 52 98 151 199 214 216 215 214 213 208 204 201 199 197 195 195 195 194 194 194 194 193 190 187 177 166 152 136 119 105 104 110 122 138 165 185 200 208 211 211 212 213 214 215 216 216 216 216 216 216 216 216 216 216 215 214 213 212 211 211 212 213 216 219 223 223 223 223 221 218 217 217 218 220 224 224 224 224 224 223 222 222 221 220 220 220 220 220 221 222 223 224 225 226 226 226 225 224 223 221 221 221 221 221 220 218 215 212 210 208 208 208 208 206 194 172 152 138 133 148 174 192 203 208 213 214 213 210 203 194 192 192 192 192 189 181 171 158 141 86 40 13 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 104 126 144 150 158 159 159 157 156 156 157 159 160 160 159 159 157 155 155 161 174 181 181 175 111 46 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 10 24 45 71 100 126 135 137 129 107 31 10 2 2 3 20 54 87 116 136 143 145 144 141 137 122 104 75 44 14 5 5 4 5 6 17 34 65 112 175 210 214 216 215 214 212 207 205 202 200 197 197 196 195 195 194 194 193 191 187 178 166 151 135 117 106 106 112 124 141 167 187 200 209 211 212 212 213 214 215 215 216 216 216 216 216 216 216 216 216 215 214 213 212 211 211 212 213 216 219 222 222 222 221 219 216 216 216 217 220 224 225 225 225 225 224 223 223 222 222 221 221 221 222 222 224 225 225 226 226 226 225 224 222 221 220 220 220 220 219 217 214 211 209 208 208 208 207 204 198 174 152 142 140 144 174 193 203 209 212 214 213 210 204 196 192 192 192 191 190 182 171 159 140 109 41 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 87 110 131 147 151 158 160 159 157 156 156 158 159 160 160 160 159 158 156 155 158 171 179 181 177 115 48 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 14 30 54 94 107 111 105 92 29 10 2 1 1 3 13 37 71 108 126 133 134 132 129 116 98 73 43 13 4 4 4 4 4 7 21 45 81 134 201 211 215 216 215 214 211 207 204 203 199 198 198 197 196 195 194 193 191 187 178 166 151 134 117 107 108 114 126 143 169 187 201 209 211 212 213 213 214 215 215 216 216 216 216 216 216 216 216 216 215 214 213 212 211 211 212 213 216 219 221 221 221 220 218 215 215 215 216 220 224 225 225 225 225 225 225 224 224 224 224 224 224 225 225 225 226 226 226 226 225 223 222 221 220 220 220 219 217 216 212 210 208 208 208 208 207 205 196 178 149 144 142 148 168 197 205 209 212 214 214 210 203 196 192 192 192 191 189 184 171 162 144 111 58 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 89 118 138 149 152 159 161 159 157 157 157 158 159 160 160 160 160 159 157 155 157 169 178 181 177 117 48 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 4 7 24 36 39 37 30 10 4 2 1 1 1 2 6 16 39 80 97 106 108 106 95 80 55 29 7 2 2 3 3 3 4 7 21 47 88 169 200 213 216 216 215 214 210 207 205 203 201 199 198 197 195 194 193 191 188 178 166 151 134 117 108 109 116 127 143 168 186 200 209 211 212 213 213 214 214 215 215 215 216 216 216 216 216 216 216 215 214 213 211 211 211 211 213 215 218 220 220 219 218 216 214 213 213 215 219 224 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 226 225 225 224 222 220 220 219 218 217 215 214 212 210 208 208 208 208 207 205 198 183 166 152 147 148 161 180 199 209 211 213 213 213 208 200 195 192 192 192 191 186 180 172 160 136 94 48 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 91 124 143 151 153 160 161 159 157 157 157 158 159 160 160 160 160 159 157 155 157 169 178 181 177 114 46 13 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 8 12 13 12 10 4 2 1 1 1 1 1 3 6 14 37 59 74 81 82 74 61 41 20 5 2 2 2 3 3 3 5 13 30 61 133 182 206 214 216 216 215 213 210 206 204 202 201 200 199 196 195 193 191 188 179 167 152 135 118 109 110 117 128 143 166 184 198 208 211 212 213 213 214 214 215 215 215 215 216 216 216 216 216 216 215 214 213 212 211 211 211 212 214 217 218 218 218 217 215 212 212 212 213 216 223 224 225 225 225 225 225 225 225 225 225 225 225 225 225 224 224 222 221 220 218 217 216 215 214 213 212 210 210 209 208 208 207 205 203 190 176 165 157 152 155 168 184 199 208 211 212 213 212 208 199 195 193 192 192 189 185 179 172 163 133 90 50 19 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 94 129 147 153 154 160 161 160 158 157 157 158 159 159 160 160 160 159 157 156 157 169 178 181 176 108 43 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 1 1 1 1 1 1 1 1 2 4 13 28 41 51 56 51 41 27 13 4 1 1 1 2 3 3 4 7 18 39 101 158 194 212 215 216 216 215 212 209 206 204 203 201 200 197 195 194 192 188 180 168 153 136 119 110 111 117 127 141 163 181 196 206 211 212 213 213 214 214 215 215 215 215 215 216 216 216 216 216 215 214 213 212 211 211 211 212 213 215 217 217 217 216 215 212 211 211 211 213 220 223 224 225 225 225 225 225 224 224 224 224 223 223 222 221 220 218 217 216 215 214 213 212 212 210 210 209 208 208 207 205 201 195 187 174 165 159 157 159 174 189 201 208 211 212 212 210 206 201 195 193 192 191 189 184 179 171 159 139 89 48 21 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 98 133 150 155 156 161 161 160 158 157 157 158 158 159 160 160 160 159 157 156 157 170 179 181 174 100 38 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 7 16 24 30 28 23 15 8 3 1 1 1 1 2 2 3 4 9 22 72 128 175 206 214 215 216 216 215 212 208 207 205 203 201 198 196 194 192 189 181 170 155 138 120 111 112 117 127 139 160 177 192 204 210 212 213 213 214 214 214 214 215 215 215 215 216 216 216 216 215 214 213 212 211 211 211 211 212 214 216 216 216 215 214 211 210 209 209 210 216 221 223 224 225 225 224 224 223 223 222 222 221 220 219 217 216 215 214 213 212 211 211 210 210 209 208 208 207 206 202 197 190 181 171 163 161 162 166 175 195 205 210 212 212 212 209 205 200 195 193 192 191 188 185 178 171 157 134 99 42 17 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 136 151 156 157 161 161 160 158 157 157 157 158 159 159 159 159 159 157 156 158 172 180 180 171 87 32 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 5 8 9 7 5 3 2 1 1 1 1 1 2 2 3 4 7 44 98 154 197 212 215 216 216 216 216 211 209 207 205 202 200 196 194 192 190 182 171 157 140 122 113 113 117 125 137 156 172 188 200 208 211 213 213 214 214 214 214 214 215 215 215 215 215 215 215 215 215 214 213 212 211 211 211 212 213 214 215 215 214 214 211 209 208 208 208 210 216 220 223 224 224 224 223 222 222 220 219 218 217 216 214 213 212 212 211 211 210 210 209 209 208 207 206 204 200 190 181 174 168 164 163 164 172 184 200 210 211 212 212 212 209 203 198 195 193 192 190 187 183 179 172 159 130 91 45 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 108 137 152 157 158 162 162 161 159 157 157 157 158 158 159 159 159 158 157 156 160 175 181 177 162 65 22 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 5 19 58 113 168 206 214 215 216 217 217 215 212 210 208 205 201 198 195 193 191 184 174 160 144 126 114 114 117 124 133 149 164 180 193 203 209 211 213 213 214 214 214 214 214 214 215 215 215 215 215 215 215 214 214 213 212 211 211 211 212 213 213 213 213 213 211 209 208 206 206 205 207 211 215 218 221 222 221 221 220 219 218 217 215 214 213 212 211 211 210 210 209 208 207 206 202 197 192 185 179 173 170 169 168 167 176 189 200 207 211 212 212 211 209 206 199 196 194 193 192 188 184 180 176 170 145 105 63 28 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 111 138 152 158 159 162 162 161 159 158 157 158 158 158 159 159 159 158 157 157 164 178 182 173 146 47 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 12 38 83 138 194 212 214 215 216 217 216 214 212 210 206 202 198 196 193 192 185 176 163 148 130 116 115 117 123 131 144 157 172 186 197 205 209 212 213 213 214 214 214 214 214 214 215 215 215 215 215 215 215 214 213 212 212 211 211 212 212 212 212 212 212 211 209 208 206 205 204 204 205 207 209 212 214 216 216 217 216 215 215 214 213 211 210 209 208 207 205 203 200 197 194 188 184 181 178 175 172 172 174 179 185 196 203 208 210 211 211 209 207 204 200 196 194 192 189 187 183 180 173 161 140 92 54 27 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 115 139 152 159 160 163 163 161 160 158 158 158 158 158 158 159 158 158 157 157 169 180 181 165 124 31 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 6 23 57 107 171 208 212 214 215 217 217 216 214 211 208 203 199 196 194 192 186 178 166 152 134 118 116 118 122 128 139 151 164 178 190 200 206 209 212 213 213 214 214 214 214 214 214 214 215 215 215 215 215 214 214 213 212 212 212 212 212 212 212 212 212 211 209 208 207 205 203 203 202 203 203 205 206 207 208 209 209 208 208 207 206 205 204 202 200 199 196 193 191 188 185 181 179 177 176 176 178 181 187 193 200 207 210 211 211 210 208 205 202 199 196 193 190 188 185 182 178 169 152 127 93 45 22 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 118 139 152 159 161 163 163 162 160 158 158 158 158 158 158 159 158 158 157 159 175 181 178 154 96 17 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 12 36 77 139 200 209 213 214 216 217 216 215 213 209 204 200 197 195 193 188 180 170 156 139 121 118 118 121 126 135 144 156 168 181 194 200 205 209 212 213 213 213 213 214 214 214 214 214 214 215 215 215 215 214 214 213 213 212 212 212 212 212 212 211 211 210 209 207 206 204 203 202 201 200 200 200 200 200 200 200 200 200 199 198 197 195 194 192 190 187 185 183 182 181 179 179 179 181 183 189 195 201 206 210 212 211 210 209 207 204 200 197 195 193 189 186 184 180 177 165 145 116 81 45 13 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 120 140 152 159 161 164 164 163 161 158 158 158 158 158 158 159 158 157 158 161 181 182 173 138 64 8 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 19 49 102 187 204 212 214 214 216 216 215 213 211 205 201 198 196 194 189 182 173 161 145 124 120 119 121 125 132 138 147 158 171 185 193 200 205 209 212 213 213 213 213 213 213 214 214 214 214 214 214 214 214 214 214 213 213 212 212 212 212 211 211 211 210 209 208 207 204 203 202 201 200 198 198 197 196 195 194 194 193 192 191 190 189 188 187 186 184 184 183 182 181 182 184 187 192 198 205 209 211 211 212 211 209 207 205 202 199 196 193 190 187 184 182 180 175 167 138 101 63 31 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 123 140 152 159 162 164 164 164 162 160 158 158 158 158 159 159 158 158 161 170 183 181 152 100 29 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 9 25 59 145 188 207 213 214 215 215 215 214 211 207 203 200 197 195 191 186 178 167 154 132 124 121 121 124 129 133 138 146 156 170 180 188 195 201 207 210 211 212 213 213 213 213 213 213 213 214 214 214 214 214 214 214 213 213 213 212 212 212 211 211 210 210 209 208 207 205 204 202 200 199 198 197 196 195 194 193 192 192 191 190 189 188 187 187 186 187 188 191 194 199 203 207 209 210 211 211 211 210 208 206 204 202 199 197 193 190 186 184 182 179 174 164 145 114 65 34 14 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 124 139 151 159 162 165 165 164 163 161 159 159 159 159 159 159 158 159 164 177 181 171 124 64 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 15 36 103 165 198 211 213 214 215 215 214 212 208 205 201 199 196 192 188 181 173 162 141 129 124 122 124 128 131 134 139 146 158 167 176 184 192 200 204 207 210 211 212 212 212 212 213 213 213 213 213 214 214 214 214 213 213 213 213 213 212 212 212 211 211 210 210 209 208 206 205 204 202 201 200 198 197 196 195 195 194 194 193 194 194 195 195 197 199 201 203 205 207 209 209 210 210 210 209 208 206 205 202 200 197 194 190 186 184 182 180 177 168 150 124 93 60 26 13 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 125 139 150 158 162 165 165 165 164 162 160 159 159 160 160 158 158 162 170 180 179 148 91 35 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 18 68 134 180 207 213 214 214 214 214 213 209 206 203 200 197 194 190 185 178 169 150 137 128 124 124 127 129 132 135 139 148 156 164 172 180 190 196 201 205 208 210 211 212 212 212 212 212 212 212 213 213 213 213 213 213 213 213 213 213 213 212 212 212 212 211 210 210 209 208 207 206 205 204 203 203 202 201 201 201 201 201 202 202 203 204 206 207 208 209 210 210 210 209 209 209 207 206 204 203 200 197 194 191 187 184 181 179 176 170 161 135 107 77 48 25 7 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 126 139 149 157 162 165 165 165 164 163 161 161 161 161 160 158 160 167 175 181 170 115 57 14 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 7 39 98 155 197 211 213 214 214 214 213 210 207 204 201 199 195 192 188 182 175 160 146 135 128 126 126 129 131 133 135 140 146 152 160 167 178 185 191 197 201 206 208 210 211 211 211 211 212 212 212 212 212 213 213 213 213 213 213 213 213 213 213 212 212 212 212 211 211 211 211 210 209 209 209 208 208 208 208 208 208 208 209 209 209 210 210 210 210 210 210 209 209 208 207 206 204 202 200 198 195 190 187 184 181 179 176 172 163 149 128 89 59 34 16 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 138 148 156 161 164 165 165 165 164 163 163 162 161 159 159 163 172 179 178 149 72 25 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 14 61 122 177 208 213 213 214 214 214 211 209 206 203 200 196 194 190 185 180 168 156 144 134 128 128 129 130 132 133 135 138 143 148 154 164 171 179 185 192 199 203 206 208 210 210 211 211 211 211 211 211 211 212 212 212 212 212 213 213 213 213 212 212 212 212 212 212 212 212 212 212 212 211 211 211 211 211 211 211 211 211 210 210 210 210 210 209 209 208 207 206 206 204 203 201 198 194 191 187 182 180 178 177 175 169 157 136 109 76 39 18 7 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 138 147 155 160 163 164 165 165 164 164 163 161 159 159 161 170 174 172 160 76 28 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 7 24 70 130 191 211 213 213 214 214 212 210 208 205 202 199 196 193 189 185 178 169 158 148 138 132 131 131 132 133 135 135 137 139 142 148 154 160 167 173 182 188 193 198 202 206 208 209 209 210 210 210 210 210 210 210 211 211 211 211 211 212 212 212 212 212 212 212 212 212 212 211 211 211 211 211 211 211 210 210 210 209 209 209 208 207 207 207 206 206 204 203 200 197 194 189 185 182 179 177 176 174 171 166 156 128 100 70 42 23 5 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 138 147 153 158 163 164 164 165 164 164 162 161 160 161 167 173 171 154 111 39 15 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 13 43 89 153 204 211 213 213 213 213 211 209 207 204 201 198 195 192 188 183 176 168 159 150 140 137 135 134 134 135 136 137 138 140 143 146 150 154 160 167 173 179 184 190 196 200 203 205 207 208 209 209 209 209 209 209 209 209 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 209 209 209 209 209 208 208 208 207 207 206 205 204 202 200 197 194 190 187 183 179 177 175 174 172 169 162 150 133 111 77 51 31 18 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 139 147 152 157 161 163 164 164 164 162 161 160 161 162 170 171 156 123 73 23 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 23 56 111 185 204 212 213 213 213 212 210 208 206 203 200 197 194 191 186 182 177 170 162 152 146 143 140 138 137 138 138 139 139 141 143 145 148 151 156 161 165 170 176 183 188 192 196 199 202 204 206 207 207 208 208 208 208 208 208 208 209 209 209 209 209 209 209 209 209 209 209 208 208 208 208 207 207 207 206 206 205 204 203 200 198 196 193 190 186 183 180 177 175 173 171 169 166 161 147 131 111 89 65 36 20 11 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 129 140 147 152 155 160 162 163 164 163 161 160 161 162 164 171 162 132 91 49 19 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 31 69 153 190 207 212 213 213 213 211 210 208 205 202 199 197 194 190 187 183 178 173 164 158 153 149 145 142 141 141 140 141 141 142 143 145 146 149 152 155 159 163 169 174 178 183 187 193 196 199 201 203 204 205 206 206 207 207 207 207 207 207 207 207 207 207 207 207 207 207 206 206 206 205 205 204 203 202 200 199 197 195 191 188 185 182 179 176 173 172 170 169 166 163 157 148 136 111 88 66 45 28 9 5 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 130 141 147 151 154 159 162 163 162 160 160 161 161 163 167 169 144 107 70 44 23 11 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 12 32 108 166 198 211 213 213 213 212 211 209 207 204 201 199 196 192 190 187 185 182 175 170 166 162 158 153 150 147 145 143 142 142 143 144 145 146 149 150 152 154 158 161 165 169 172 178 182 186 190 193 197 199 201 203 204 204 205 205 205 205 205 205 205 204 204 204 204 203 203 202 201 200 199 197 196 193 190 188 185 182 178 175 173 171 169 168 167 166 165 163 157 147 132 114 91 61 41 26 15 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 131 142 148 151 153 159 160 159 159 160 161 159 159 162 170 155 117 90 70 52 25 12 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 10 48 109 163 200 211 212 213 213 212 211 209 207 204 202 199 196 193 191 190 188 185 182 179 177 175 172 169 166 163 159 154 151 148 146 146 146 148 149 150 152 154 155 157 158 160 162 165 167 169 172 175 178 181 184 186 189 191 192 194 194 195 195 195 195 194 194 192 191 190 188 186 184 182 180 178 175 173 171 169 167 166 165 164 164 163 161 158 153 144 131 107 87 68 49 31 13 9 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 131 143 149 151 153 158 158 159 160 161 159 157 161 167 168 131 108 95 83 65 32 16 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 24 68 121 170 203 211 212 212 212 212 210 209 206 204 202 198 196 194 192 191 190 188 186 184 183 181 180 178 176 174 171 168 164 161 157 152 151 150 150 151 153 154 155 156 158 160 161 162 164 165 167 168 169 170 172 173 174 175 177 177 178 179 179 180 180 179 179 178 177 176 174 173 171 170 168 166 165 164 163 163 162 161 159 156 152 141 129 115 100 83 60 45 32 20 10 5 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 133 144 149 151 153 157 158 159 160 160 156 156 164 168 158 120 113 110 105 92 52 27 11 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 35 79 130 180 207 210 212 212 212 211 210 208 206 204 201 199 196 194 193 192 191 191 190 188 188 187 186 186 185 183 181 178 176 172 167 163 160 157 155 155 155 155 156 157 158 159 160 161 162 163 163 164 164 165 165 166 166 166 167 167 167 168 168 167 167 167 166 166 165 164 163 163 162 161 160 159 159 158 157 153 148 142 134 123 105 90 73 57 43 27 19 12 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 134 145 149 151 153 157 159 161 161 157 154 160 168 166 144 121 127 130 130 123 84 49 23 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 12 41 85 143 194 206 211 212 212 212 211 210 208 207 204 202 199 197 195 194 193 193 193 192 192 192 192 191 191 191 190 189 188 186 183 179 175 171 166 162 161 159 159 158 159 159 160 161 161 162 162 163 163 163 163 163 162 162 162 162 161 161 161 160 160 159 159 159 158 158 158 157 157 157 156 155 154 151 148 138 128 116 102 86 65 49 35 24 15 7 5 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 136 146 150 151 153 157 163 163 159 153 154 169 172 160 131 135 145 150 150 148 127 82 43 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13 42 92 166 195 208 211 212 212 212 211 210 209 207 204 202 200 197 195 195 194 194 194 195 195 195 195 195 195 195 194 194 193 193 192 191 189 186 181 177 172 168 165 162 161 161 161 162 162 163 163 163 163 163 163 163 162 162 162 161 161 160 160 159 159 158 158 158 157 156 156 155 154 153 151 147 141 133 114 99 83 66 49 29 18 11 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 137 146 150 151 154 162 164 161 156 155 168 177 163 144 135 153 155 155 153 151 146 127 86 41 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 10 30 96 151 187 207 211 211 212 212 211 210 209 208 206 204 202 199 197 196 195 195 195 196 196 196 196 196 196 197 197 197 197 197 197 197 196 195 193 192 190 187 184 181 179 176 174 172 171 171 170 170 170 169 169 169 168 167 167 166 166 165 164 163 163 162 161 160 159 157 156 154 150 144 134 120 102 77 60 44 30 18 8 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 138 146 150 153 158 167 164 160 158 162 179 179 159 140 144 157 157 156 153 150 147 139 110 69 22 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 12 49 97 145 185 206 211 211 212 212 212 210 209 208 207 205 203 201 199 198 197 196 196 196 196 196 196 197 197 197 198 198 198 198 198 198 198 197 197 196 196 194 193 191 190 189 187 185 184 183 183 182 181 181 180 180 179 178 178 177 177 175 174 172 170 169 165 162 159 156 152 144 132 115 96 76 52 37 24 14 7 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 139 147 150 154 162 169 163 161 164 174 184 174 154 140 151 160 160 157 153 149 146 143 125 91 38 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 20 53 97 143 183 207 210 211 212 212 211 211 210 209 208 206 205 203 201 200 199 199 198 198 197 197 197 198 198 198 199 199 199 199 199 199 199 199 199 200 199 199 198 198 198 197 196 195 194 193 192 191 191 190 189 188 187 186 185 184 181 179 177 174 171 167 162 157 150 141 123 105 86 67 50 31 20 11 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 141 147 151 156 166 170 163 164 171 185 186 166 149 142 156 163 162 157 152 147 145 143 134 107 54 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 21 51 92 141 189 202 209 211 211 212 211 211 210 210 209 207 206 205 204 203 202 201 200 200 199 199 199 199 200 200 200 201 201 201 200 200 201 201 201 201 201 202 202 202 202 202 202 201 201 200 199 198 197 196 194 193 191 189 186 182 179 176 172 167 159 151 142 131 116 91 72 54 39 26 15 9 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 143 148 152 158 170 169 164 168 177 188 186 157 145 147 159 164 163 157 151 145 143 142 137 117 70 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 19 44 82 147 184 203 210 210 211 212 211 211 211 210 210 209 208 207 206 205 204 203 202 202 202 202 202 202 203 203 203 203 202 202 202 202 202 201 201 202 202 203 203 204 204 204 204 204 204 203 201 200 198 195 193 190 187 184 179 175 169 162 154 137 123 107 90 73 52 37 25 15 8 5 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 144 148 155 163 173 166 165 173 184 189 181 150 141 147 160 161 155 149 144 143 143 142 138 122 83 19 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 10 26 68 110 150 183 204 210 211 212 212 212 212 212 211 211 211 211 211 210 210 210 209 209 208 208 208 207 207 207 206 206 205 204 203 203 202 202 202 202 203 203 203 204 204 205 205 203 201 198 195 191 185 180 172 164 154 140 128 115 102 88 71 58 44 32 23 14 10 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 144 149 157 166 173 164 165 176 187 190 173 147 141 146 155 151 147 144 143 142 141 140 137 123 88 21 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 9 32 60 93 127 159 189 200 206 209 211 211 212 212 212 212 212 211 211 211 211 211 211 210 210 210 209 209 208 208 207 206 205 205 204 203 202 202 202 202 203 203 202 202 201 198 191 185 178 170 161 148 138 127 116 105 89 78 67 56 45 35 26 19 13 8 5 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 146 150 159 167 170 162 167 179 189 189 164 144 139 143 146 144 142 142 141 141 139 139 136 123 90 23 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 11 27 48 74 104 140 161 177 189 198 204 206 208 209 209 210 210 210 210 210 210 210 210 210 209 209 209 208 208 207 206 205 204 203 202 201 201 201 201 200 199 196 192 186 178 164 154 143 131 119 103 91 80 70 60 48 39 31 24 19 13 8 6 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 147 151 159 166 166 160 170 181 190 188 156 141 138 139 139 140 141 141 140 139 138 137 135 122 90 23 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 18 33 52 83 106 128 147 163 176 183 188 192 195 197 199 200 201 201 202 202 202 203 203 203 203 203 203 203 202 201 201 200 199 197 196 195 193 190 184 177 168 157 144 126 112 99 86 74 59 49 40 32 25 19 14 9 6 5 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 147 152 160 165 162 159 174 184 189 184 148 139 136 136 137 141 141 140 139 137 137 136 133 120 87 22 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 8 17 34 50 66 81 96 115 128 139 149 157 165 169 172 175 178 180 182 184 186 188 189 190 191 192 192 192 192 191 190 189 187 184 179 174 166 153 140 126 112 98 80 67 55 43 33 24 18 12 8 5 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 147 152 157 159 155 159 180 187 183 172 142 137 136 138 141 141 141 140 138 137 136 136 132 115 77 17 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 6 11 18 24 31 37 41 45 50 54 60 64 67 71 74 78 81 85 89 93 100 104 108 112 115 119 121 122 122 121 117 112 106 99 91 79 70 60 50 41 30 23 17 11 6 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 145 151 154 154 152 168 183 184 176 163 141 139 139 141 142 142 141 140 140 138 137 136 130 110 67 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 6 9 11 14 15 17 18 20 22 23 25 26 28 30 31 33 35 38 41 44 47 50 53 56 58 60 61 61 59 56 53 49 45 38 33 27 22 17 11 8 6 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 142 148 150 150 153 177 183 178 167 154 141 141 142 143 142 142 142 142 142 141 139 137 128 103 55 9 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 3 4 4 4 4 5 5 6 6 7 8 8 9 10 11 12 14 15 17 18 20 21 22 23 23 23 22 20 19 17 14 11 9 7 5 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 138 144 147 150 158 182 179 169 157 148 143 144 143 143 143 143 145 145 145 143 141 137 123 93 43 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 4 4 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 138 142 145 153 171 181 171 159 150 145 145 144 143 143 143 146 148 149 148 146 143 138 117 81 31 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 139 143 151 162 175 168 157 150 146 145 145 143 144 146 150 156 157 155 153 149 145 136 104 62 18 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 142 148 158 167 170 157 150 147 146 145 143 144 148 153 157 159 158 156 153 150 146 130 92 47 12 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 145 153 161 165 159 149 147 146 145 144 143 149 154 158 160 160 159 157 154 152 146 120 78 35 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 148 157 160 158 148 145 145 145 145 144 146 155 158 159 159 159 158 157 155 153 143 108 64 24 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 148 157 154 147 143 144 145 145 145 144 155 158 157 156 155 157 157 157 156 153 139 93 49 15 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 148 148 143 138 143 144 145 144 145 148 159 153 151 150 151 153 155 156 155 151 118 68 30 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 143 139 137 138 143 144 145 145 147 153 155 151 149 149 150 151 152 152 149 141 92 47 18 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 138 134 135 138 143 145 145 145 148 154 152 150 149 149 149 149 149 147 138 121 65 29 10 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 134 131 134 138 143 145 145 145 148 153 151 150 149 149 148 147 145 138 123 94 40 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 130 130 134 139 143 145 144 145 148 151 150 150 149 149 148 146 140 126 101 64 19 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 139 144 145 144 146 149 150 151 150 150 149 148 144 129 101 67 31 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 139 144 145 144 146 149 150 151 151 150 148 147 141 115 81 46 17 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 139 144 145 144 146 148 150 151 150 149 148 146 135 99 61 29 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 139 145 145 144 146 148 150 151 150 148 147 145 126 82 44 16 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 140 145 145 145 146 148 150 150 149 148 146 143 112 64 28 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 130 134 139 145 145 145 146 147 149 149 148 146 143 137 87 39 13 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 129 133 139 145 145 145 146 147 149 148 146 144 140 129 62 25 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 129 133 139 145 146 146 147 148 148 147 145 143 134 112 39 14 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 128 132 138 145 146 147 147 148 147 145 144 140 124 88 21 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 128 131 137 145 146 147 147 147 145 143 142 135 111 58 7 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 127 130 136 143 146 146 145 144 142 142 139 118 78 22 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 127 130 134 139 144 143 142 142 142 141 130 93 46 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 127 127 130 133 137 140 140 141 141 141 137 108 64 22 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 128 129 132 135 138 139 140 140 139 123 76 35 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 128 128 129 132 135 136 139 140 139 136 94 39 11 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 129 130 131 132 134 138 139 138 129 107 29 9 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 130 131 132 133 136 139 138 127 101 52 10 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 132 133 134 136 138 137 126 97 59 18 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 135 135 136 137 137 125 97 57 20 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 137 137 137 137 134 94 44 16 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 136 134 125 104 66 18 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 105 88 67 45 22 6 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 55 41 26 13 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13 7 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 hdf4-hdf4.3.1/mfhdf/hrepack/info.txt000066400000000000000000000000411503061704500172170ustar00rootroot00000000000000-t "dset4:GZIP 6" -c "dset4:2x2" hdf4-hdf4.3.1/mfhdf/hrepack/pal_rgb.h000066400000000000000000000116021503061704500173070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #if !defined(_PAL_RGB_H) #define _PAL_RGB_H unsigned char pal_rgb[256 * 3] = { 0, 0, 0, 0, 0, 131, 0, 0, 135, 0, 0, 139, 0, 0, 143, 0, 0, 147, 0, 0, 151, 0, 0, 155, 0, 0, 159, 0, 0, 163, 0, 0, 167, 0, 0, 171, 0, 0, 175, 0, 0, 179, 0, 0, 183, 0, 0, 187, 0, 0, 191, 0, 0, 195, 0, 0, 199, 0, 0, 203, 0, 0, 207, 0, 0, 211, 0, 0, 215, 0, 0, 219, 0, 0, 223, 0, 0, 227, 0, 0, 231, 0, 0, 235, 0, 0, 239, 0, 0, 243, 0, 0, 247, 0, 0, 251, 0, 0, 255, 0, 0, 255, 0, 3, 255, 0, 7, 255, 0, 11, 255, 0, 15, 255, 0, 19, 255, 0, 23, 255, 0, 27, 255, 0, 31, 255, 0, 35, 255, 0, 39, 255, 0, 43, 255, 0, 47, 255, 0, 51, 255, 0, 55, 255, 0, 59, 255, 0, 63, 255, 0, 67, 255, 0, 71, 255, 0, 75, 255, 0, 79, 255, 0, 83, 255, 0, 87, 255, 0, 91, 255, 0, 95, 255, 0, 99, 255, 0, 103, 255, 0, 107, 255, 0, 111, 255, 0, 115, 255, 0, 119, 255, 0, 123, 255, 0, 127, 255, 0, 131, 255, 0, 135, 255, 0, 139, 255, 0, 143, 255, 0, 147, 255, 0, 151, 255, 0, 155, 255, 0, 159, 255, 0, 163, 255, 0, 167, 255, 0, 171, 255, 0, 175, 255, 0, 179, 255, 0, 183, 255, 0, 187, 255, 0, 191, 255, 0, 195, 255, 0, 199, 255, 0, 203, 255, 0, 207, 255, 0, 211, 255, 0, 215, 255, 0, 219, 255, 0, 223, 255, 0, 227, 255, 0, 231, 255, 0, 235, 255, 0, 239, 255, 0, 243, 255, 0, 247, 255, 0, 251, 255, 0, 255, 255, 0, 255, 255, 3, 255, 251, 7, 255, 247, 11, 255, 243, 15, 255, 239, 19, 255, 235, 23, 255, 231, 27, 255, 227, 31, 255, 223, 35, 255, 219, 39, 255, 215, 43, 255, 211, 47, 255, 207, 51, 255, 203, 55, 255, 199, 59, 255, 195, 63, 255, 191, 67, 255, 187, 71, 255, 183, 75, 255, 179, 79, 255, 175, 83, 255, 171, 87, 255, 167, 91, 255, 163, 95, 255, 159, 99, 255, 155, 103, 255, 151, 107, 255, 147, 111, 255, 143, 115, 255, 139, 119, 255, 135, 123, 255, 131, 127, 255, 127, 131, 255, 123, 135, 255, 119, 139, 255, 115, 143, 255, 111, 147, 255, 107, 151, 255, 103, 155, 255, 99, 159, 255, 95, 163, 255, 91, 167, 255, 87, 171, 255, 83, 175, 255, 79, 179, 255, 75, 183, 255, 71, 187, 255, 67, 191, 255, 63, 195, 255, 59, 199, 255, 55, 203, 255, 51, 207, 255, 47, 211, 255, 43, 215, 255, 39, 219, 255, 35, 223, 255, 31, 227, 255, 27, 231, 255, 23, 235, 255, 19, 239, 255, 15, 243, 255, 11, 247, 255, 7, 251, 255, 3, 255, 255, 0, 255, 251, 0, 255, 247, 0, 255, 243, 0, 255, 239, 0, 255, 235, 0, 255, 231, 0, 255, 227, 0, 255, 223, 0, 255, 219, 0, 255, 215, 0, 255, 211, 0, 255, 207, 0, 255, 203, 0, 255, 199, 0, 255, 195, 0, 255, 191, 0, 255, 187, 0, 255, 183, 0, 255, 179, 0, 255, 175, 0, 255, 171, 0, 255, 167, 0, 255, 163, 0, 255, 159, 0, 255, 155, 0, 255, 151, 0, 255, 147, 0, 255, 143, 0, 255, 139, 0, 255, 135, 0, 255, 131, 0, 255, 127, 0, 255, 123, 0, 255, 119, 0, 255, 115, 0, 255, 111, 0, 255, 107, 0, 255, 103, 0, 255, 99, 0, 255, 95, 0, 255, 91, 0, 255, 87, 0, 255, 83, 0, 255, 79, 0, 255, 75, 0, 255, 71, 0, 255, 67, 0, 255, 63, 0, 255, 59, 0, 255, 55, 0, 255, 51, 0, 255, 47, 0, 255, 43, 0, 255, 39, 0, 255, 35, 0, 255, 31, 0, 255, 27, 0, 255, 23, 0, 255, 19, 0, 255, 15, 0, 255, 11, 0, 255, 7, 0, 255, 3, 0, 255, 0, 0, 250, 0, 0, 246, 0, 0, 241, 0, 0, 237, 0, 0, 233, 0, 0, 228, 0, 0, 224, 0, 0, 219, 0, 0, 215, 0, 0, 211, 0, 0, 206, 0, 0, 202, 0, 0, 197, 0, 0, 193, 0, 0, 189, 0, 0, 184, 0, 0, 180, 0, 0, 175, 0, 0, 171, 0, 0, 167, 0, 0, 162, 0, 0, 158, 0, 0, 153, 0, 0, 149, 0, 0, 145, 0, 0, 140, 0, 0, 136, 0, 0, 131, 0, 0, 127, 0, 0}; #endif hdf4-hdf4.3.1/mfhdf/libsrc/000077500000000000000000000000001503061704500153715ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/libsrc/CMakeLists.txt000066400000000000000000000212731503061704500201360ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_LIBSRC C) #----------------------------------------------------------------------------- # Generate the netcdf.h file containing user settings needed by compilation #----------------------------------------------------------------------------- if (WIN32) set (H4_WINDOWS_INCLUDE_FILE "#include ") set (NETCDF_EXTERN HDFLIBAPI) else () set (NETCDF_EXTERN extern) endif () set (NC_OLD_FILLVALUES 0) set (HDF4_MFHDF_LIBSRC_CSRCS ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/array.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/attr.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/cdf.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/dim.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/file.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/hdfsds.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/iarray.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/error.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/globdef.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/mfdatainfo.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/mfsd.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/nssdc.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/putget.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/putgetg.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/sharray.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/string.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/var.c ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/h4_xdr.c ) set (HDF4_MFHDF_LIBSRC_INSTALL_CHDRS ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/hdf2netcdf.h ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/mfdatainfo.h ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/mfhdf.h ) set (HDF4_MFHDF_LIBSRC_CHDRS ${HDF4_MFHDF_LIBSRC_INSTALL_CHDRS} ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/error_priv.h ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/h4_xdr_priv.h ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/mf_priv.h ${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/nc_priv.h ) if (HDF4_ENABLE_NETCDF) configure_file (${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/netcdf.h.in ${HDF4_BINARY_DIR}/netcdf.h) set (HDF4_MFHDF_LIBSRC_XCHDRS ${HDF4_BINARY_DIR}/netcdf.h) else () configure_file (${HDF4_MFHDF_LIBSRC_SOURCE_DIR}/netcdf.h.in ${HDF4_BINARY_DIR}/hdf4_netcdf.h) set (HDF4_MFHDF_LIBSRC_XCHDRS ${HDF4_BINARY_DIR}/hdf4_netcdf.h) endif () if (BUILD_STATIC_LIBS) add_library (${HDF4_MF_LIB_TARGET} STATIC ${HDF4_MFHDF_LIBSRC_CSRCS} ${HDF4_MFHDF_LIBSRC_CHDRS}) target_include_directories (${HDF4_MF_LIB_TARGET} PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES}" INTERFACE "$/include>" ) target_compile_options(${HDF4_MF_LIB_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_MF_LIB_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_MF_LIB_TARGET} STATIC) target_link_libraries (${HDF4_MF_LIB_TARGET} PUBLIC "$<$,$>:ws2_32.lib>") target_link_libraries (${HDF4_MF_LIB_TARGET} PUBLIC ${HDF4_SRC_LIB_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_LIB_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_LIB_TARGET} ${HDF4_MF_LIB_NAME} STATIC 0) set_target_properties (${HDF4_MF_LIB_TARGET} PROPERTIES FOLDER libraries COMPILE_DEFINITIONS "HDF" INTERFACE_INCLUDE_DIRECTORIES "$/include>" ) set (install_targets ${HDF4_MF_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF4_MF_LIBSH_TARGET} SHARED ${HDF4_MFHDF_LIBSRC_CSRCS} ${HDF4_MFHDF_LIBSRC_CHDRS}) target_include_directories (${HDF4_MF_LIBSH_TARGET} PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES}" INTERFACE "$/include>" ) target_compile_options(${HDF4_MF_LIBSH_TARGET} PRIVATE "${HDF4_CMAKE_C_FLAGS}") target_compile_definitions(${HDF4_MF_LIBSH_TARGET} PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS} ) TARGET_C_PROPERTIES (${HDF4_MF_LIBSH_TARGET} SHARED) target_link_libraries (${HDF4_MF_LIBSH_TARGET} PUBLIC "$<$,$>:ws2_32.lib>") target_link_libraries (${HDF4_MF_LIBSH_TARGET} PUBLIC ${HDF4_SRC_LIBSH_TARGET}) set_global_variable (HDF4_LIBRARIES_TO_EXPORT "${HDF4_LIBRARIES_TO_EXPORT};${HDF4_MF_LIBSH_TARGET}") H4_SET_LIB_OPTIONS (${HDF4_MF_LIBSH_TARGET} ${HDF4_MF_LIB_NAME} SHARED "MF") set_target_properties (${HDF4_MF_LIBSH_TARGET} PROPERTIES FOLDER libraries COMPILE_DEFINITIONS "HDF;H4_BUILT_AS_DYNAMIC_LIB" INTERFACE_INCLUDE_DIRECTORIES "$/include>" INTERFACE_COMPILE_DEFINITIONS H4_BUILT_AS_DYNAMIC_LIB=1 ) set (install_targets ${install_targets} ${HDF4_MF_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- install ( FILES ${HDF4_MFHDF_LIBSRC_INSTALL_CHDRS} ${HDF4_MFHDF_LIBSRC_XCHDRS} DESTINATION ${HDF4_INSTALL_INCLUDE_DIR} COMPONENT headers ) #----------------------------------------------------------------------------- # Add library to CMake Install : Installs lib and cmake config info #----------------------------------------------------------------------------- if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF4_MF_LIBSH_TARGET} ${HDF4_INSTALL_BIN_DIR} libraries) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF4_MF_LIB_TARGET} ${HDF4_INSTALL_LIB_DIR} libraries) endif () install ( TARGETS ${install_targets} EXPORT ${HDF4_EXPORTED_TARGETS} LIBRARY DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${HDF4_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${HDF4_INSTALL_BIN_DIR} COMPONENT libraries FRAMEWORK DESTINATION ${HDF4_INSTALL_FWRK_DIR} COMPONENT libraries INCLUDES DESTINATION include ) #----------------------------------------------------------------------------- # Create pkgconfig files #----------------------------------------------------------------------------- set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX}) set (_PKG_CONFIG_EXEC_PREFIX \${prefix}) set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib) set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include) set (_PKG_CONFIG_LIBNAME "${HDF4_SRC_LIB_CORENAME}") set (_PKG_CONFIG_VERSION "${HDF4_PACKAGE_VERSION}") set (PKGCONFIG_LIBNAME "${HDF4_SRC_LIB_CORENAME}") if (${HDF_CFG_NAME} MATCHES "Debug") set (PKGCONFIG_LIBNAME "${PKGCONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}") endif () set (MFPKGCONFIG_LIBNAME "${HDF4_MF_LIB_CORENAME}") if (${HDF_CFG_NAME} MATCHES "Debug") set (MFPKGCONFIG_LIBNAME "${MFPKGCONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}") endif () foreach (libs ${LINK_LIBS}) set (_PKG_CONFIG_LIBS_PRIVATE "${_PKG_CONFIG_LIBS_PRIVATE} -l${libs}") endforeach () # The settings for the compression libs depends on if they have pkconfig support # Assuming they don't foreach (libs ${LINK_COMP_LIBS}) # set (_PKG_CONFIG_REQUIRES_PRIVATE "${_PKG_CONFIG_REQUIRES_PRIVATE} -l${libs}") set (_PKG_CONFIG_LIBS_PRIVATE "${_PKG_CONFIG_LIBS_PRIVATE} -l${libs}") endforeach () set (_PKG_CONFIG_REQUIRES_PRIVATE) set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${PKGCONFIG_LIBNAME} -l${MFPKGCONFIG_LIBNAME}") if (BUILD_SHARED_LIBS) set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKGCONFIG_LIBNAME} -l${MFPKGCONFIG_LIBNAME}") endif () set (_PKG_CONFIG_REQUIRES) configure_file ( ${HDF_RESOURCES_DIR}/libhdf4.pc.in ${HDF4_BINARY_DIR}/CMakeFiles/${HDF4_SRC_LIB_CORENAME}.pc @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/CMakeFiles/${HDF4_SRC_LIB_CORENAME}.pc DESTINATION ${HDF4_INSTALL_LIB_DIR}/pkgconfig COMPONENT libraries ) if (NOT WIN32) set (_PKG_CONFIG_COMPILER ${CMAKE_C_COMPILER}) configure_file ( ${HDF_RESOURCES_DIR}/libh4cc.in ${HDF4_BINARY_DIR}/CMakeFiles/h4cc @ONLY ) install ( FILES ${HDF4_BINARY_DIR}/CMakeFiles/h4cc DESTINATION ${HDF4_INSTALL_BIN_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE COMPONENT libraries ) endif () #----------------------------------------------------------------------------- # Option to build documentation #----------------------------------------------------------------------------- if (DOXYGEN_FOUND) # This custom target and doxygen/configure work together # Replace variables inside @@ with the current values add_custom_target (hdf4mflib_doc ALL COMMAND ${DOXYGEN_EXECUTABLE} ${HDF4_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${HDF4_MFHDFSOURCE_DIR} COMMENT "Generating HDF4 library Source API documentation with Doxygen" VERBATIM ) if (NOT TARGET doxygen) add_custom_target (doxygen) endif () add_dependencies (doxygen hdf4mflib_doc) endif () hdf4-hdf4.3.1/mfhdf/libsrc/Makefile.am000066400000000000000000000043741503061704500174350ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. lib_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(lib_INCLUDES) $(DEFINES) ############################################################################# ## Library to build ## ############################################################################# lib_LTLIBRARIES = libmfhdf.la ## Information for building the "libmfhdf.la" library CSOURCES = array.c attr.c cdf.c dim.c file.c hdfsds.c iarray.c error.c \ globdef.c mfsd.c mfdatainfo.c nssdc.c putget.c putgetg.c \ sharray.c string.c var.c h4_xdr.c if HDF_BUILD_NETCDF FSOURCES = $(top_builddir)/mfhdf/fortran/jackets.c $(top_srcdir)/mfhdf/fortran/mfsdf.c $(top_srcdir)/mfhdf/fortran/mfsdff.f else FSOURCES = $(top_srcdir)/mfhdf/fortran/mfsdf.c $(top_srcdir)/mfhdf/fortran/mfsdff.f endif if HDF_BUILD_FORTRAN libmfhdf_la_SOURCES = $(CSOURCES) $(FSOURCES) else libmfhdf_la_SOURCES = $(CSOURCES) endif libmfhdf_la_LIBADD = $(top_builddir)/hdf/src/libdf.la if HDF_BUILD_NETCDF include_HEADERS = hdf2netcdf.h mfhdf.h netcdf.h mfdatainfo.h else include_HEADERS = hdf2netcdf.h mfhdf.h hdf4_netcdf.h mfdatainfo.h endif # The following is a workaround. Since Fortran is included in this # Makefile.am, automake will always try to use the Fortran linker, even when # fortran has been disabled in configure. The Fortran linker gets confused # when shared libraries are enabled, so when Fortran is not enabled, # this replaces the Fortran link macro with the C link macro. if HDF_BUILD_FORTRAN # do nothing else F77LINK = $(LINK) endif ############################################################################# ## And the cleanup ## ############################################################################# DISTCLEANFILES = *.new *.hdf *.cdf *.cdl netcdf.h hdf4_netcdf.h This* hdf4-hdf4.3.1/mfhdf/libsrc/Makefile.in000066400000000000000000001045411503061704500174430ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ subdir = mfhdf/libsrc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__include_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = netcdf.h 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)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libmfhdf_la_DEPENDENCIES = $(top_builddir)/hdf/src/libdf.la am__libmfhdf_la_SOURCES_DIST = array.c attr.c cdf.c dim.c file.c \ hdfsds.c iarray.c error.c globdef.c mfsd.c mfdatainfo.c \ nssdc.c putget.c putgetg.c sharray.c string.c var.c h4_xdr.c \ $(top_srcdir)/mfhdf/fortran/mfsdf.c \ $(top_srcdir)/mfhdf/fortran/mfsdff.f \ $(top_builddir)/mfhdf/fortran/jackets.c am__objects_1 = array.lo attr.lo cdf.lo dim.lo file.lo hdfsds.lo \ iarray.lo error.lo globdef.lo mfsd.lo mfdatainfo.lo nssdc.lo \ putget.lo putgetg.lo sharray.lo string.lo var.lo h4_xdr.lo @HDF_BUILD_NETCDF_FALSE@am__objects_2 = mfsdf.lo mfsdff.lo @HDF_BUILD_NETCDF_TRUE@am__objects_2 = jackets.lo mfsdf.lo mfsdff.lo @HDF_BUILD_FORTRAN_FALSE@am_libmfhdf_la_OBJECTS = $(am__objects_1) @HDF_BUILD_FORTRAN_TRUE@am_libmfhdf_la_OBJECTS = $(am__objects_1) \ @HDF_BUILD_FORTRAN_TRUE@ $(am__objects_2) libmfhdf_la_OBJECTS = $(am_libmfhdf_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/array.Plo ./$(DEPDIR)/attr.Plo \ ./$(DEPDIR)/cdf.Plo ./$(DEPDIR)/dim.Plo ./$(DEPDIR)/error.Plo \ ./$(DEPDIR)/file.Plo ./$(DEPDIR)/globdef.Plo \ ./$(DEPDIR)/h4_xdr.Plo ./$(DEPDIR)/hdfsds.Plo \ ./$(DEPDIR)/iarray.Plo ./$(DEPDIR)/jackets.Plo \ ./$(DEPDIR)/mfdatainfo.Plo ./$(DEPDIR)/mfsd.Plo \ ./$(DEPDIR)/mfsdf.Plo ./$(DEPDIR)/nssdc.Plo \ ./$(DEPDIR)/putget.Plo ./$(DEPDIR)/putgetg.Plo \ ./$(DEPDIR)/sharray.Plo ./$(DEPDIR)/string.Plo \ ./$(DEPDIR)/var.Plo 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_CC_1 = 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_CCLD_1 = F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) AM_V_F77 = $(am__v_F77_@AM_V@) am__v_F77_ = $(am__v_F77_@AM_DEFAULT_V@) am__v_F77_0 = @echo " F77 " $@; am__v_F77_1 = F77LD = $(F77) AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = SOURCES = $(libmfhdf_la_SOURCES) DIST_SOURCES = $(am__libmfhdf_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__include_HEADERS_DIST = hdf2netcdf.h mfhdf.h hdf4_netcdf.h \ mfdatainfo.h netcdf.h HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/netcdf.h.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/config/commence.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. CHECK_CLEANFILES = *.chkexe *.chklog lib_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(lib_INCLUDES) $(DEFINES) ############################################################################# ############################################################################# lib_LTLIBRARIES = libmfhdf.la CSOURCES = array.c attr.c cdf.c dim.c file.c hdfsds.c iarray.c error.c \ globdef.c mfsd.c mfdatainfo.c nssdc.c putget.c putgetg.c \ sharray.c string.c var.c h4_xdr.c @HDF_BUILD_NETCDF_FALSE@FSOURCES = $(top_srcdir)/mfhdf/fortran/mfsdf.c $(top_srcdir)/mfhdf/fortran/mfsdff.f @HDF_BUILD_NETCDF_TRUE@FSOURCES = $(top_builddir)/mfhdf/fortran/jackets.c $(top_srcdir)/mfhdf/fortran/mfsdf.c $(top_srcdir)/mfhdf/fortran/mfsdff.f @HDF_BUILD_FORTRAN_FALSE@libmfhdf_la_SOURCES = $(CSOURCES) @HDF_BUILD_FORTRAN_TRUE@libmfhdf_la_SOURCES = $(CSOURCES) $(FSOURCES) libmfhdf_la_LIBADD = $(top_builddir)/hdf/src/libdf.la @HDF_BUILD_NETCDF_FALSE@include_HEADERS = hdf2netcdf.h mfhdf.h hdf4_netcdf.h mfdatainfo.h @HDF_BUILD_NETCDF_TRUE@include_HEADERS = hdf2netcdf.h mfhdf.h netcdf.h mfdatainfo.h @HDF_BUILD_FORTRAN_FALSE@F77LINK = $(LINK) ############################################################################# ############################################################################# DISTCLEANFILES = *.new *.hdf *.cdf *.cdl netcdf.h hdf4_netcdf.h This* all: all-am .SUFFIXES: .SUFFIXES: .c .f .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.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 mfhdf/libsrc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/libsrc/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): netcdf.h: $(top_builddir)/config.status $(srcdir)/netcdf.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 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}; \ } libmfhdf.la: $(libmfhdf_la_OBJECTS) $(libmfhdf_la_DEPENDENCIES) $(EXTRA_libmfhdf_la_DEPENDENCIES) $(AM_V_F77LD)$(F77LINK) -rpath $(libdir) $(libmfhdf_la_OBJECTS) $(libmfhdf_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dim.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globdef.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h4_xdr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfsds.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iarray.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackets.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfdatainfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfsd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mfsdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nssdc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putget.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putgetg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sharray.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/var.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< mfsdf.lo: $(top_srcdir)/mfhdf/fortran/mfsdf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mfsdf.lo -MD -MP -MF $(DEPDIR)/mfsdf.Tpo -c -o mfsdf.lo `test -f '$(top_srcdir)/mfhdf/fortran/mfsdf.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/fortran/mfsdf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mfsdf.Tpo $(DEPDIR)/mfsdf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/fortran/mfsdf.c' object='mfsdf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mfsdf.lo `test -f '$(top_srcdir)/mfhdf/fortran/mfsdf.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/fortran/mfsdf.c jackets.lo: $(top_builddir)/mfhdf/fortran/jackets.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jackets.lo -MD -MP -MF $(DEPDIR)/jackets.Tpo -c -o jackets.lo `test -f '$(top_builddir)/mfhdf/fortran/jackets.c' || echo '$(srcdir)/'`$(top_builddir)/mfhdf/fortran/jackets.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jackets.Tpo $(DEPDIR)/jackets.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/mfhdf/fortran/jackets.c' object='jackets.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jackets.lo `test -f '$(top_builddir)/mfhdf/fortran/jackets.c' || echo '$(srcdir)/'`$(top_builddir)/mfhdf/fortran/jackets.c .f.o: $(AM_V_F77)$(F77COMPILE) -c -o $@ $< .f.obj: $(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(AM_V_F77)$(LTF77COMPILE) -c -o $@ $< mfsdff.lo: $(top_srcdir)/mfhdf/fortran/mfsdff.f $(AM_V_F77)$(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o mfsdff.lo `test -f '$(top_srcdir)/mfhdf/fortran/mfsdff.f' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/fortran/mfsdff.f mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || 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)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/array.Plo -rm -f ./$(DEPDIR)/attr.Plo -rm -f ./$(DEPDIR)/cdf.Plo -rm -f ./$(DEPDIR)/dim.Plo -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/globdef.Plo -rm -f ./$(DEPDIR)/h4_xdr.Plo -rm -f ./$(DEPDIR)/hdfsds.Plo -rm -f ./$(DEPDIR)/iarray.Plo -rm -f ./$(DEPDIR)/jackets.Plo -rm -f ./$(DEPDIR)/mfdatainfo.Plo -rm -f ./$(DEPDIR)/mfsd.Plo -rm -f ./$(DEPDIR)/mfsdf.Plo -rm -f ./$(DEPDIR)/nssdc.Plo -rm -f ./$(DEPDIR)/putget.Plo -rm -f ./$(DEPDIR)/putgetg.Plo -rm -f ./$(DEPDIR)/sharray.Plo -rm -f ./$(DEPDIR)/string.Plo -rm -f ./$(DEPDIR)/var.Plo -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-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES 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 ./$(DEPDIR)/array.Plo -rm -f ./$(DEPDIR)/attr.Plo -rm -f ./$(DEPDIR)/cdf.Plo -rm -f ./$(DEPDIR)/dim.Plo -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/globdef.Plo -rm -f ./$(DEPDIR)/h4_xdr.Plo -rm -f ./$(DEPDIR)/hdfsds.Plo -rm -f ./$(DEPDIR)/iarray.Plo -rm -f ./$(DEPDIR)/jackets.Plo -rm -f ./$(DEPDIR)/mfdatainfo.Plo -rm -f ./$(DEPDIR)/mfsd.Plo -rm -f ./$(DEPDIR)/mfsdf.Plo -rm -f ./$(DEPDIR)/nssdc.Plo -rm -f ./$(DEPDIR)/putget.Plo -rm -f ./$(DEPDIR)/putgetg.Plo -rm -f ./$(DEPDIR)/sharray.Plo -rm -f ./$(DEPDIR)/string.Plo -rm -f ./$(DEPDIR)/var.Plo -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: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am 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-includeHEADERS 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .PRECIOUS: Makefile # The following is a workaround. Since Fortran is included in this # Makefile.am, automake will always try to use the Fortran linker, even when # fortran has been disabled in configure. The Fortran linker gets confused # when shared libraries are enabled, so when Fortran is not enabled, # this replaces the Fortran link macro with the C link macro. @HDF_BUILD_FORTRAN_TRUE@ # do nothing # 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: hdf4-hdf4.3.1/mfhdf/libsrc/array.c000066400000000000000000000357221503061704500166640ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" /* * for a netcdf type * return the size of the on-disk representation */ int NC_xtypelen(nc_type type) { char *nada = NULL; switch (type) { case NC_BYTE: case NC_CHAR: return (NC_CHAR_SIZE); case NC_SHORT: return (NC_SHORT_SIZE); case NC_LONG: case NC_FLOAT: return (NC_LONG_SIZE); case NC_DOUBLE: return (NC_DOUBLE_SIZE); /* private types */ case NC_UNSPECIFIED: return (NC_UNSPECIFIED_SIZE); case NC_STRING: return (NC_xlen_string((NC_string *)NULL)); case NC_DIMENSION: return (NC_xlen_dim((NC_dim **)&nada)); case NC_VARIABLE: return (NC_xlen_var((NC_var **)&nada)); case NC_ATTRIBUTE: return (NC_xlen_attr((NC_attr **)&nada)); default: NCadvise(NC_EBADTYPE, "NC_xtypelen: Unknown type %d", type); return (-1); } } /* * private version of nctypelen */ size_t NC_typelen(nc_type type) { switch (type) { case NC_BYTE: case NC_CHAR: return (sizeof(char)); case NC_SHORT: return (sizeof(short)); case NC_LONG: return (sizeof(nclong)); case NC_FLOAT: return (sizeof(float)); case NC_DOUBLE: return (sizeof(double)); /* private types */ case NC_STRING: return (sizeof(NC_string *)); case NC_DIMENSION: return (sizeof(NC_dim *)); case NC_VARIABLE: return (sizeof(NC_var *)); case NC_ATTRIBUTE: return (sizeof(NC_attr *)); default: return (0); } } /* * external interface function * this is how much space is required by the user, as in * * vals = malloc(nel * nctypelen(var.type)); * ncvarget (cdfid, varid, cor, edg, vals); * */ int nctypelen(nc_type type) { switch (type) { case NC_BYTE: case NC_CHAR: return (sizeof(char)); case NC_SHORT: return (sizeof(short)); case NC_LONG: return (sizeof(nclong)); case NC_FLOAT: return (sizeof(float)); case NC_DOUBLE: return (sizeof(double)); default: NCadvise(NC_EBADTYPE, "Unknown type %d", type); return (-1); } } /* See netcdf.h for explanation of these initializations */ /* assert( !(USE_F_UNION && USE_F_LONG_PUN) ) ; */ /* assert( !(USE_D_UNION && USE_D_LONG_PUN) ) ; */ #ifdef USE_F_UNION #ifdef H4_WORDS_BIGENDIAN union xdr_f_union xdr_f_infs = {0x7f, 0x80, 0x00, 0x00}; #else union xdr_f_union xdr_f_infs = {0x00, 0x00, 0x80, 0x7f}; #endif /* H4_WORDS_BIGENDIAN */ #endif /* USE_F_UNION */ #ifdef USE_D_UNION #ifdef H4_WORDS_BIGENDIAN union xdr_d_union xdr_d_infs = {0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #else union xdr_d_union xdr_d_infs = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f}; #endif /* H4_WORDS_BIGENDIAN */ #endif /* USE_D_UNION */ #ifdef USE_F_LONG_PUN nclong xdr_f_infinity = 0x7f800000; #endif #ifdef USE_D_LONG_PUN #ifdef H4_WORDS_BIGENDIAN nclong xdr_d_infinity[2] = {0x7ff00000, 0x00000000}; #else nclong xdr_d_infinity[2] = {0x00000000, 0x7ff00000}; #endif /* H4_WORDS_BIGENDIAN */ #endif /* USE_D_LONG_PUN */ /* * Fill an array region with an appropriate special value */ void NC_arrayfill(void *low, size_t len, nc_type type) /* low - lower bound of area to be filled */ /* len how many bytes */ { char *hi, *lo; /* local low and hi ptr */ lo = low; hi = lo + len; switch (type) { case NC_BYTE: memset(lo, FILL_BYTE, len); break; case NC_CHAR: memset(lo, FILL_CHAR, len); break; case NC_SHORT: while (lo < hi) { *((short *)lo) = FILL_SHORT; lo += sizeof(short); } break; case NC_LONG: while (lo < hi) { *((nclong *)lo) = FILL_LONG; lo += sizeof(nclong); } break; case NC_FLOAT: while (lo < hi) { *((float *)lo) = FILL_FLOAT; lo += sizeof(float); } break; case NC_DOUBLE: while (lo < hi) { /*SUPPRESS 450*/ *((double *)lo) = FILL_DOUBLE; lo += sizeof(double); } break; default: memset(lo, 0xff, len); break; } } /* * Allocate a new array, returning a handle to it, NULL on error. * If count is no-zero, allocate private space for the values, and, * if values is non-NULL, copy them in. * Else, just hook up the values passed in. */ NC_array * NC_new_array(nc_type type, unsigned count, const void *values) { NC_array *ret; size_t memlen; ret = malloc(sizeof(NC_array)); if (ret == NULL) goto alloc_err; ret->type = type; ret->szof = NC_typelen(type); ret->count = count; memlen = count * ret->szof; ret->len = count * NC_xtypelen(type); if (count != 0) { ret->values = malloc(memlen); if (ret->values == NULL) goto alloc_err; if (values == NULL) { NC_arrayfill(ret->values, memlen, type); } else { /* can be dangerous */ (void)memcpy(ret->values, values, memlen); } } else { ret->values = NULL; } return (ret); alloc_err: nc_serror("NC_new_array"); return (NULL); } /* * Recycle a NC_array, if possible. * EG, if there is enough space, use it, else return NULL * If values is non-NULL, copy them in. */ NC_array * NC_re_array(NC_array *old, nc_type type, unsigned count, const void *values) { size_t memlen; size_t szof; szof = NC_typelen(type); memlen = count * szof; if (memlen > old->count * old->szof) return (NULL); /* punt */ old->count = count; old->type = type; old->szof = szof; if (count != 0) { if (values == NULL) { NC_arrayfill(old->values, memlen, type); } else { /* can be dangerous */ (void)memcpy(old->values, values, memlen); } } return (old); } /* * Free array, and, if needed, its values. * * NOTE: Changed return value to return 'int' * If successful returns SUCCEED else FAIL -GV 9/19/97 */ int NC_free_array(NC_array *array) { int ret_value = SUCCEED; if (array != NULL) { if (array->values != NULL) { switch (array->type) { case NC_UNSPECIFIED: case NC_BYTE: case NC_CHAR: case NC_SHORT: case NC_LONG: case NC_FLOAT: case NC_DOUBLE: break; case NC_STRING: { NC_string **sp; sp = (NC_string **)array->values; for (sp += array->count - 1; array->count > 0; array->count--) { if (FAIL == NC_free_string(*sp--)) { ret_value = FAIL; goto done; } } } break; case NC_DIMENSION: { NC_dim **dp; dp = (NC_dim **)array->values; for (dp += array->count - 1; array->count > 0; array->count--) { if (FAIL == NC_free_dim(*dp--)) { ret_value = FAIL; goto done; } } } break; case NC_VARIABLE: { NC_var **dp; dp = (NC_var **)array->values; for (dp += array->count - 1; array->count > 0; array->count--) { if (FAIL == NC_free_var(*dp--)) { ret_value = FAIL; goto done; } } } break; case NC_ATTRIBUTE: { NC_attr **dp; dp = (NC_attr **)array->values; for (dp += array->count - 1; array->count > 0; array->count--) { if (FAIL == NC_free_attr(*dp--)) { ret_value = FAIL; goto done; } } } break; default: NCadvise(NC_EBADTYPE, "Unknown type %d", array->type); break; } free(array->values); } free(array); } done: return ret_value; } /* * How much space will the xdr'd array take. */ int NC_xlen_array(NC_array *array) { int len = 8; int rem; int (*xlen_funct)() = NULL; Void *vp; unsigned ii; if (array != NULL) { switch (array->type) { case NC_BYTE: case NC_CHAR: len += array->count * NC_CHAR_SIZE; if ((rem = len % 4) != 0) len += 4 - rem; return (len); case NC_SHORT: len += array->count * NC_SHORT_SIZE; if ((rem = len % 4) != 0) len += 4 - rem; return (len); case NC_LONG: case NC_FLOAT: len += array->count * NC_LONG_SIZE; return (len); case NC_DOUBLE: len += array->count * NC_DOUBLE_SIZE; return (len); case NC_STRING: xlen_funct = NC_xlen_string; break; case NC_DIMENSION: xlen_funct = NC_xlen_dim; break; case NC_VARIABLE: xlen_funct = NC_xlen_var; break; case NC_ATTRIBUTE: xlen_funct = NC_xlen_attr; break; default: break; } vp = array->values; for (ii = 0; ii < array->count; ii++) { len += (*xlen_funct)(vp); vp += array->szof; } } return (len); } /* * Add a new handle on the end of and array of handles */ Void * NC_incr_array(NC_array *array, Void *tail) { char *ap; if (array == NULL) { NCadvise(NC_EINVAL, "increment: NULL array"); return (NULL); } array->values = realloc(array->values, (array->count + 1) * array->szof); if (array->values == NULL) { nc_serror("extend_array"); return (NULL); } ap = array->values + array->szof * array->count; (void)memcpy(ap, tail, array->szof); array->count++; return (array->values); } /* * Definitely NOT Bomb proof. */ void NC_copy_arrayvals(char *target, NC_array *array) { size_t memlen; memlen = array->szof * array->count; (void)memcpy(target, array->values, memlen); } bool_t xdr_NC_array(XDR *xdrs, NC_array **app) { bool_t (*xdr_NC_fnct)(); unsigned count = 0; unsigned *countp = NULL; unsigned temp_count = 0; nc_type type = NC_UNSPECIFIED; bool_t stat; Void *vp = NULL; switch (xdrs->x_op) { case XDR_FREE: NC_free_array((*app)); return (TRUE); case XDR_ENCODE: if (*app == NULL) { (*app) = NC_new_array(NC_UNSPECIFIED, (unsigned)0, (Void *)NULL); if (*app == NULL) { NCadvise(NC_EXDR, "xdr_NC_array:NC_new_array"); return (FALSE); } } count = (*app)->count; type = (*app)->type; countp = &count; break; case XDR_DECODE: countp = &count; break; } if (!h4_xdr_int(xdrs, &type)) { NCadvise(NC_EXDR, "xdr_NC_array:h4_xdr_int (enum)"); return (FALSE); } if (!h4_xdr_u_int(xdrs, &temp_count)) { NCadvise(NC_EXDR, "xdr_NC_array:h4_xdr_u_int"); return (FALSE); } *countp = temp_count; if (xdrs->x_op == XDR_DECODE) { if (type == NC_UNSPECIFIED && *countp == 0) { *app = NULL; return (TRUE); } (*app) = NC_new_array(type, (unsigned)*countp, (Void *)NULL); if ((*app) == NULL) { NCadvise(NC_EXDR, "xdr_NC_array:NC_new_array (second call)"); return (FALSE); } } vp = (*app)->values; switch (type) { case NC_UNSPECIFIED: case NC_BYTE: case NC_CHAR: xdr_NC_fnct = h4_xdr_opaque; goto func; case NC_SHORT: xdr_NC_fnct = xdr_shorts; goto func; case NC_LONG: xdr_NC_fnct = h4_xdr_int; goto loop; case NC_FLOAT: xdr_NC_fnct = h4_xdr_float; goto loop; case NC_DOUBLE: xdr_NC_fnct = h4_xdr_double; goto loop; /* private types */ case NC_STRING: xdr_NC_fnct = xdr_NC_string; goto loop; case NC_DIMENSION: xdr_NC_fnct = xdr_NC_dim; goto loop; case NC_VARIABLE: xdr_NC_fnct = xdr_NC_var; goto loop; case NC_ATTRIBUTE: xdr_NC_fnct = xdr_NC_attr; goto loop; default: { NCadvise(NC_EBADTYPE, "xdr_NC_array: unknown type %d", type); return (FALSE); } } loop: for (stat = TRUE; stat && (count > 0); count--) { stat = (*xdr_NC_fnct)(xdrs, vp); vp += (*app)->szof; } if (!stat) NCadvise(NC_EXDR, "xdr_NC_array: loop"); return (stat); func: stat = (*xdr_NC_fnct)(xdrs, vp, *countp); if (!stat) NCadvise(NC_EXDR, "xdr_NC_array: func"); return (stat); } hdf4-hdf4.3.1/mfhdf/libsrc/attr.c000066400000000000000000000270671503061704500165230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" NC_attr * NC_new_attr(const char *name, nc_type type, unsigned count, const void *values) { NC_attr *ret; ret = malloc(sizeof(NC_attr)); if (ret == NULL) goto alloc_err; ret->name = NC_new_string((unsigned)strlen(name), name); if (ret->name == NULL) goto alloc_err; ret->data = NC_new_array(type, count, values); if (ret->data == NULL) goto alloc_err; ret->HDFtype = hdf_map_type(type); return (ret); alloc_err: nc_serror("NC_new_attr"); return (NULL); } /* * Free attr * * NOTE: Changed return value to return 'int' * If successful returns SUCCEED else FAIL -GV 9/19/97 */ int NC_free_attr(NC_attr *attr) { int ret_value = SUCCEED; if (attr != NULL) { if (NC_free_string(attr->name) == FAIL) { ret_value = FAIL; goto done; } if (NC_free_array(attr->data) == FAIL) { ret_value = FAIL; goto done; } free(attr); } done: return ret_value; } /* * Verify that this is a user nc_type */ bool_t NCcktype(nc_type datatype) { switch (datatype) { case NC_BYTE: case NC_CHAR: case NC_SHORT: case NC_LONG: case NC_FLOAT: case NC_DOUBLE: return (TRUE); default: break; } NCadvise(NC_EBADTYPE, "Unknown type %d", datatype); return (FALSE); } /* * Given cdfid and varid, return handle to array of attributes * else NULL on error */ static NC_array ** NC_attrarray(int cdfid, int varid) { NC *handle; NC_array **ap; handle = NC_check_id(cdfid); if (handle == NULL) return (NULL); if (varid == NC_GLOBAL) /* Global attribute, attach to cdf */ { ap = &(handle->attrs); } else if (handle->vars != NULL && varid >= 0 && (unsigned)varid < handle->vars->count) { ap = (NC_array **)handle->vars->values; ap += varid; ap = &(((NC_var *)(*ap))->attrs); /* Whew! */ } else { NCadvise(NC_EINVAL, "%d is not a valid variable id", varid); ap = NULL; } return (ap); } /* * Step thru NC_ATTRIBUTE array, seeking match on name. * return match or NULL if Not Found. */ NC_attr ** NC_findattr(NC_array **ap, const char *name) { NC_attr **attr; unsigned attrid; size_t len; if (*ap == NULL) return (NULL); attr = (NC_attr **)(*ap)->values; len = strlen(name); for (attrid = 0; attrid < (*ap)->count; attrid++, attr++) { if (len == (*attr)->name->len && strncmp(name, (*attr)->name->values, len) == 0) { return (attr); /* Normal return */ } } return (NULL); } /* * Look up by cdfid, varid and name, return NULL if not found */ static NC_attr ** NC_lookupattr(int cdfid, int varid, const char *name, bool_t verbose) /* name - attribute name */ { NC_array **ap; NC_attr **attr; ap = NC_attrarray(cdfid, varid); if (ap == NULL) return (NULL); attr = NC_findattr(ap, name); if (verbose && attr == NULL) NCadvise(NC_ENOTATT, "attribute \"%s\" not found", name); return (attr); } /* * Common code for attput and attcopy */ static int NC_aput(int cdfid, NC_array **ap, const char *name, nc_type datatype, unsigned count, const void *values) { NC *handle; NC_attr *attr[1]; NC_attr **atp, *old; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) return (-1); if (*ap == NULL) /* first time */ { if (!NC_indefine(cdfid, TRUE)) return (-1); attr[0] = NC_new_attr(name, datatype, count, values); if (attr[0] == NULL) return (-1); *ap = NC_new_array(NC_ATTRIBUTE, (unsigned)1, (Void *)attr); if (*ap == NULL) return (-1); return ((*ap)->count - 1); } /* else */ if ((atp = NC_findattr(ap, name)) != NULL) /* name in use */ { if (NC_indefine(cdfid, FALSE)) { old = *atp; *atp = NC_new_attr(name, datatype, count, values); if (*atp == NULL) { *atp = old; return (-1); } NC_free_attr(old); return ((*ap)->count - 1); } /* else */ if (NC_re_array((*atp)->data, datatype, count, values) == NULL) { NCadvise(NC_ENOTINDEFINE, "Can't increase size unless in define mode"); return (-1); } /* else */ (*atp)->HDFtype = hdf_map_type(datatype); if (handle->flags & NC_HSYNC) { handle->xdrs->x_op = XDR_ENCODE; if (!xdr_cdf(handle->xdrs, &handle)) return (-1); handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else handle->flags |= NC_HDIRTY; return ((*ap)->count - 1); } /* else */ if ((*ap)->count >= H4_MAX_NC_ATTRS) { NCadvise(NC_EMAXATTS, "maximum number of attributes %d exceeded", (*ap)->count); return (-1); } /* else */ if (NC_indefine(cdfid, TRUE)) { attr[0] = NC_new_attr(name, datatype, count, values); if (attr[0] == NULL) return (-1); if (NC_incr_array((*ap), (Void *)attr) == NULL) return (-1); return ((*ap)->count - 1); } /* else */ return (-1); } int ncattput(int cdfid, int varid, const char *name, nc_type datatype, int count, const ncvoid *values) { NC_array **ap; cdf_routine_name = "ncattput"; ap = NC_attrarray(cdfid, varid); if (ap == NULL) return (-1); if (count < 0) { NCadvise(NC_EINVAL, "Invalid length %d", count); return (-1); } if (!NCcktype(datatype)) return (-1); return (NC_aput(cdfid, ap, name, datatype, (unsigned)count, values)); } int ncattname(int cdfid, int varid, int attnum, char *name) { NC_array **ap; NC_attr **attr; cdf_routine_name = "ncattname"; ap = NC_attrarray(cdfid, varid); if (ap == NULL || *ap == NULL) return (-1); if (attnum < 0 || attnum >= (*ap)->count) { NCadvise(NC_ENOTATT, "%d is not a valid attribute id", attnum); return (-1); } attr = (NC_attr **)(*ap)->values; attr += attnum; (void)memcpy(name, (*attr)->name->values, (*attr)->name->len); name[(*attr)->name->len] = 0; return (attnum); } int ncattinq(int cdfid, int varid, const char *name, nc_type *datatypep, int *countp) /* name - input, attribute name */ { NC_attr **attr; cdf_routine_name = "ncattinq"; attr = NC_lookupattr(cdfid, varid, name, TRUE); if (attr == NULL) return (-1); if (datatypep != 0) *datatypep = (*attr)->data->type; if (countp != 0) *countp = (*attr)->data->count; return (1); } int ncattrename(int cdfid, int varid, const char *name, const char *newname) { NC *handle; NC_attr **attr; NC_string *new, *old; cdf_routine_name = "cdfattrrename"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) return (-1); attr = NC_lookupattr(cdfid, varid, name, TRUE); if (attr == NULL) return (-1); if (NC_lookupattr(cdfid, varid, newname, FALSE) != NULL) /* name in use */ return (-1); old = (*attr)->name; if (NC_indefine(cdfid, FALSE)) { new = NC_new_string((unsigned)strlen(newname), newname); if (new == NULL) return (-1); (*attr)->name = new; NC_free_string(old); return (1); } /* else */ new = NC_re_string(old, (unsigned)strlen(newname), newname); if (new == NULL) return (-1); (*attr)->name = new; if (handle->flags & NC_HSYNC) { handle->xdrs->x_op = XDR_ENCODE; if (!xdr_cdf(handle->xdrs, &handle)) return (-1); handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else handle->flags |= NC_HDIRTY; return (1); } int ncattcopy(int incdf, int invar, const char *name, int outcdf, int outname) { NC_attr **attr; NC_array **ap; cdf_routine_name = "ncattcopy"; attr = NC_lookupattr(incdf, invar, name, TRUE); if (attr == NULL) return (-1); ap = NC_attrarray(outcdf, outname); if (ap == NULL) return (-1); return (NC_aput(outcdf, ap, name, (*attr)->data->type, (*attr)->data->count, (*attr)->data->values)); } int ncattdel(int cdfid, int varid, const char *name) { NC_array **ap; NC_attr **attr; NC_attr *old = NULL; unsigned attrid; size_t len; cdf_routine_name = "ncattdel"; if (!NC_indefine(cdfid, TRUE)) return (-1); ap = NC_attrarray(cdfid, varid); if (ap == NULL || *ap == NULL) return (-1); attr = (NC_attr **)(*ap)->values; len = strlen(name); for (attrid = 0; attrid < (*ap)->count; attrid++, attr++) { if (len == (*attr)->name->len && strncmp(name, (*attr)->name->values, len) == 0) { old = *attr; break; } } if (attrid == (*ap)->count) { NCadvise(NC_ENOTATT, "attribute \"%s\" not found", name); return (-1); } /* shuffle down */ for (attrid++; attrid < (*ap)->count; attrid++) { *attr = *(attr + 1); attr++; } /* decrement count */ (*ap)->count--; NC_free_attr(old); return (1); } int ncattget(int cdfid, int varid, const char *name, ncvoid *values) { NC_attr **attr; cdf_routine_name = "ncattget"; attr = NC_lookupattr(cdfid, varid, name, TRUE); if (attr == NULL) return (-1); NC_copy_arrayvals((char *)values, (*attr)->data); return (1); } bool_t xdr_NC_attr(XDR *xdrs, NC_attr **app) { bool_t ret_value; if (xdrs->x_op == XDR_FREE) { NC_free_attr((*app)); return (TRUE); } if (xdrs->x_op == XDR_DECODE) { *app = malloc(sizeof(NC_attr)); if (*app == NULL) { nc_serror("xdr_NC_attr"); return (FALSE); } } if (!xdr_NC_string(xdrs, &((*app)->name))) return (FALSE); ret_value = xdr_NC_array(xdrs, &((*app)->data)); (*app)->HDFtype = hdf_map_type(((*app)->data)->type); return ret_value; } /* * How much space will the xdr'd attr take. */ int NC_xlen_attr(NC_attr **app) { int len; if (*app == NULL) return (4); len = NC_xlen_string((*app)->name); len += NC_xlen_array((*app)->data); return (len); } hdf4-hdf4.3.1/mfhdf/libsrc/cdf.c000066400000000000000000002217661503061704500163070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" #include "herr_priv.h" #include "hfile_priv.h" int32 hdf_get_magicnum(const char *filename); static intn hdf_num_attrs(NC *handle, /* IN: handle to SDS */ int32 vg /* IN: ref of top Vgroup */); static bool_t NC_xdr_cdf(XDR *xdrs, NC **handlep); static int NC_free_xcdf(NC *); /* hmm we write the NDG out always for now */ #define WRITE_NDG 1 /* * Free the resources that xdr_cdf allocates */ static int NC_free_xcdf(NC *handle) { int ret_value = SUCCEED; if (handle != NULL) { if (NC_free_array(handle->dims) == FAIL) HGOTO_FAIL(FAIL); if (NC_free_array(handle->attrs) == FAIL) HGOTO_FAIL(FAIL); if (NC_free_array(handle->vars) == FAIL) HGOTO_FAIL(FAIL); } done: return ret_value; } int NC_free_cdf(NC *handle) { int ret_value = SUCCEED; if (handle != NULL) { if (NC_free_xcdf(handle) == FAIL) HGOTO_FAIL(FAIL); /* destroy xdr struct */ h4_xdr_destroy(handle->xdrs); free(handle->xdrs); handle->xdrs = NULL; if (handle->file_type == HDF_FILE) { if (Vend(handle->hdf_file) == FAIL) HGOTO_FAIL(FAIL); if (Hclose(handle->hdf_file) == FAIL) HGOTO_FAIL(FAIL); } free(handle); handle = NULL; } done: return ret_value; } /* --------------------------- hdf_get_magicnum ---------------------------- */ /* Return the file's format version number, i.e., magic number. This number can be used to determine the format type of a file, such as HDF, CDF, or netCDF/64-bit. */ int32 hdf_get_magicnum(const char *filename) { hdf_file_t fp; uint8 buf[4]; uint8 *pbuf = NULL; int32 magic_num; int32 ret_value = 0; fp = (hdf_file_t)HI_OPEN(filename, DFACC_READ); if (OPENERR(fp)) { HGOTO_ERROR(DFE_BADNAME, FAIL); } /* Make sure it is at the beginning of the file */ if (HI_SEEK(fp, MAGICOFFSET) == FAIL) { HGOTO_ERROR(DFE_SEEKERROR, FAIL); } /* Read the first 4 bytes in the file, where the format version number is stored. */ if (HI_READ(fp, buf, MAGICLEN) == FAIL) { HI_CLOSE(fp); HGOTO_ERROR(DFE_READERROR, FAIL); } /* Obtain the file format version number then close the file*/ pbuf = &buf[0]; INT32DECODE(pbuf, magic_num); HI_CLOSE(fp); /* If magic_num is a valid file format version number, then return it */ if (magic_num == HDFXMAGIC || magic_num == CDFMAGIC || magic_num == NCMAGIC || magic_num == NCMAGIC64) ret_value = magic_num; else HGOTO_ERROR(DFE_INVFILE, FAIL); done: return ret_value; } /* hdf_get_magicnum */ /* -------------------------------- HDiscdf -------------------------------- */ /* Return TRUE/FALSE depending on if the given file is a NASA CDF file */ intn HDiscdf(const char *filename) { int32 magic_num = 0; intn ret_value = FALSE; /* Use internal function to open the file and get a magic number if the file has one */ magic_num = hdf_get_magicnum(filename); /* A CDF file would have CDFMAGIC at the beginning */ if (magic_num == CDFMAGIC) ret_value = TRUE; else ret_value = FALSE; return ret_value; } /* -------------------------------- HDisnetcdf -------------------------------- Return TRUE if the given file is a netCDF file, FALSE otherwise. */ intn HDisnetcdf(const char *filename) { int32 magic_num = 0; intn ret_value = FALSE; /* Use internal function to open the file and get a magic number if the file has one */ magic_num = hdf_get_magicnum(filename); /* A classic netCDF file would have NCMAGIC at the beginning */ if (magic_num == NCMAGIC) ret_value = TRUE; else ret_value = FALSE; return ret_value; } /* HDisnetcdf */ /* ------------------------------ HDisnetcdf64 -------------------------------- Return TRUE if the given file is a netCDF 64-bit file, FALSE otherwise. */ intn HDisnetcdf64(const char *filename) { int32 magic_num = 0; intn ret_value = FALSE; /* Use internal function to open the file and get a magic number if the file has one */ magic_num = hdf_get_magicnum(filename); /* A 64-bit netCDF file would have NCMAGIC64 at the beginning */ if (magic_num == NCMAGIC64) ret_value = TRUE; else ret_value = FALSE; return ret_value; } /* HDisnetcdf64 */ /******************************************************************************/ NC * NC_new_cdf(const char *name, int mode) { int32 hdf_mode = DFACC_RDWR; /* default */ NC *cdf = NULL; NC *ret_value = NULL; /* allocate an NC struct */ cdf = calloc(1, sizeof(NC)); if (cdf == NULL) { nc_serror("NC_new_cdf"); HGOTO_FAIL(NULL); } cdf->flags = mode; /* * See what type of file we are looking at. * If we are creating a new file it will be an HDF file */ if (mode & NC_CREAT) { cdf->file_type = HDF_FILE; } else { if (Hishdf(name)) cdf->file_type = HDF_FILE; else if (HDiscdf(name)) cdf->file_type = CDF_FILE; else if (HDisnetcdf(name)) cdf->file_type = netCDF_FILE; else HGOTO_FAIL(NULL); } /* Delay allocating xdr struct until it is needed */ cdf->xdrs = calloc(1, sizeof(XDR)); if (cdf->xdrs == NULL) { nc_serror("NC_new_cdf: xdrs"); HGOTO_FAIL(NULL); } /* * Set up the XDR functions that some of the netCDF old code uses */ switch (cdf->file_type) { case HDF_FILE: h4_xdr_setup_nofile(cdf->xdrs, mode); /* return type is 'void' */ break; case netCDF_FILE: if (NCxdrfile_create(cdf->xdrs, name, mode) < 0) HGOTO_FAIL(NULL); break; case CDF_FILE: /* CDF_xdrfile_create(); */ /* try this, I bet it will be sufficient */ h4_xdr_setup_nofile(cdf->xdrs, mode); break; } cdf->dims = NULL; cdf->attrs = NULL; cdf->vars = NULL; cdf->begin_rec = 0; cdf->recsize = 0; cdf->numrecs = 0; cdf->redefid = -1; /* * determine the HDF access mode */ switch (mode) { case NC_CLOBBER: hdf_mode = DFACC_CLOBBER; break; case NC_NOCLOBBER: /* will handle below */ break; case NC_WRITE: hdf_mode = DFACC_RDWR; break; case NC_NOWRITE: hdf_mode = DFACC_RDONLY; break; default: hdf_mode = DFACC_RDWR; } /* * Do file type specific setup */ switch (cdf->file_type) { case HDF_FILE: /* HDF stuff */ /* see if the file exists */ if (mode == NC_NOCLOBBER) { if ((int)Hishdf(name)) { /* Need to free allocated structures. This will happen on failure cleanup. */ HGOTO_FAIL(NULL); } hdf_mode = DFACC_RDWR; } /* open the file */ cdf->hdf_file = (int32)Hopen(name, hdf_mode, 200); if (cdf->hdf_file == FAIL) HGOTO_FAIL(NULL); /* start Vxx access */ if (Vstart(cdf->hdf_file) == FAIL) HGOTO_FAIL(NULL); cdf->hdf_mode = hdf_mode; cdf->vgid = 0; /* invalid ref */ /* copy filename only up to its length instead of FILENAME_MAX as used to be */ strncpy(cdf->path, name, strlen(name) + 1); cdf->path[strlen(name)] = '\0'; break; case netCDF_FILE: /* Nothing */ strncpy(cdf->path, name, strlen(name) + 1); cdf->path[strlen(name)] = '\0'; break; case CDF_FILE: cdf->cdf_fp = (hdf_file_t)HI_OPEN(name, hdf_mode); if (OPENERR(cdf->cdf_fp)) HRETURN_ERROR(DFE_DENIED, NULL); break; } /* * Read in the contents */ if (cdf->xdrs->x_op == XDR_DECODE) /* Not NC_CREAT */ { if (!xdr_cdf(cdf->xdrs, &cdf)) { /* free cdf struct. This cleanup is different than NC_free_xcdf(). */ NC_free_cdf(cdf); /* free memory, close structures,files etc*/ cdf = NULL; HGOTO_FAIL(NULL); } if (NC_computeshapes(cdf) == -1) HGOTO_FAIL(NULL); } ret_value = cdf; done: if (ret_value == NULL) { /* Failure cleanup */ if (cdf != NULL) { /* handles case other than one for NC_free_cdf(). These routines only free up allocated memory. */ NC_free_xcdf(cdf); /* no point in catching error here */ if (cdf->xdrs != NULL) { h4_xdr_destroy(cdf->xdrs); free(cdf->xdrs); } free(cdf); } } return ret_value; } /* NC_new_cdf */ /* * Duplicate a description structure. * Can only be called for 'old' extant on disk, eg, old in DATA mode. */ NC * NC_dup_cdf(const char *name, int mode, NC *old) { NC *cdf = NULL; NC *ret_value = NULL; cdf = malloc(sizeof(NC)); if (cdf == NULL) { nc_serror("NC_dup_cdf"); HGOTO_FAIL(NULL); } cdf->flags = old->flags | NC_INDEF; cdf->xdrs = malloc(sizeof(XDR)); if (cdf->xdrs == NULL) { nc_serror("NC_dup_cdf: xdrs"); HGOTO_FAIL(NULL); } cdf->dims = NULL; cdf->attrs = NULL; cdf->vars = NULL; cdf->begin_rec = 0; cdf->recsize = 0; cdf->numrecs = 0; cdf->file_type = old->file_type; if (NCxdrfile_create(cdf->xdrs, name, mode) < 0) HGOTO_FAIL(NULL); old->xdrs->x_op = XDR_DECODE; if (!xdr_cdf(old->xdrs, &cdf)) HGOTO_FAIL(NULL); if (NC_computeshapes(cdf) == -1) HGOTO_FAIL(NULL); ret_value = cdf; done: if (ret_value == NULL) { /* Failure cleanup */ if (cdf != NULL) { /* free up allocated structures */ free(cdf->xdrs); NC_free_xcdf(cdf); /* don't catch error here */ free(cdf); } } return ret_value; } int ncinquire(int cdfid, int *ndimsp, int *nvarsp, int *nattrsp, int *xtendimp) { NC *handle; cdf_routine_name = "ncinquire"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (nvarsp != NULL) *nvarsp = (handle->vars != NULL) ? handle->vars->count : 0; if (nattrsp != NULL) *nattrsp = (handle->attrs != NULL) ? handle->attrs->count : 0; if (handle->dims != NULL) { NC_dim **dp; unsigned ii; if (ndimsp != NULL) *ndimsp = handle->dims->count; if (xtendimp != NULL) { *xtendimp = -1; dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if ((*dp)->size == NC_UNLIMITED) { *xtendimp = ii; } } } } else { if (ndimsp != NULL) *ndimsp = 0; if (xtendimp != NULL) *xtendimp = -1; } return (cdfid); } bool_t xdr_cdf(XDR *xdrs, NC **handlep) { bool_t ret_value = TRUE; switch ((*handlep)->file_type) { case HDF_FILE: if (hdf_xdr_cdf(xdrs, handlep) == FAIL) ret_value = FALSE; break; case netCDF_FILE: ret_value = NC_xdr_cdf(xdrs, handlep); break; case CDF_FILE: ret_value = nssdc_xdr_cdf(xdrs, handlep); break; default: ret_value = FALSE; break; } return ret_value; } static bool_t NC_xdr_cdf(XDR *xdrs, NC **handlep) { unsigned magic; if (xdrs->x_op == XDR_FREE) { NC_free_xcdf(*handlep); return (TRUE); } if (h4_xdr_getpos(xdrs) != 0) { if (!h4_xdr_setpos(xdrs, 0)) { nc_serror("Can't set position to begin"); return (FALSE); } } /* magic number */ if (!h4_xdr_u_int(xdrs, &magic)) { if (xdrs->x_op == XDR_DECODE) { NCadvise(NC_ENOTNC, "Not a netcdf file (Can't read magic number)"); } else { /* write error */ nc_serror("xdr_cdf: h4_xdr_u_int"); } return (FALSE); } if (xdrs->x_op == XDR_DECODE && magic != NCMAGIC) { if (magic == NCLINKMAGIC) { NCadvise(NC_NOERR, "link file not handled yet"); return (FALSE); } /* else */ NCadvise(NC_ENOTNC, "Not a netcdf file"); return (FALSE); } if (!xdr_numrecs(xdrs, *handlep)) { NCadvise(NC_EXDR, "xdr_numrecs"); return (FALSE); } if (!xdr_NC_array(xdrs, &((*handlep)->dims))) { NCadvise(NC_EXDR, "xdr_cdf:dims"); return (FALSE); } if (!xdr_NC_array(xdrs, &((*handlep)->attrs))) { NCadvise(NC_EXDR, "xdr_cdf:attrs"); return (FALSE); } if (!xdr_NC_array(xdrs, &((*handlep)->vars))) { NCadvise(NC_EXDR, "xdr_cdf:vars"); return (FALSE); } return (TRUE); } /***************************************************************************** * * NCSA HDF / netCDF Project * May, 1993 * * NCSA HDF / netCDF source code and documentation are in the public domain. * Specifically, we give to the public domain all rights for future * licensing of the source code, all resale rights, and all publishing rights. * * We ask, but do not require, that the following message be included in all * derived works: * * Portions developed at the National Center for Supercomputing Applications at * the University of Illinois at Urbana-Champaign. Funding for this project * has come primarily from the National Science Foundation. * * THE UNIVERSITY OF ILLINOIS GIVES NO WARRANTY, EXPRESSED OR IMPLIED, FOR THE * SOFTWARE AND/OR DOCUMENTATION PROVIDED, INCLUDING, WITHOUT LIMITATION, * WARRANTY OF MERCHANTABILITY AND WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE * ****************************************************************************** * * Please report all bugs / comments to help@hdfgroup.org * *****************************************************************************/ /* ---------------------------------------------------------------- ** Map an NC_ to an HDF type */ int hdf_map_type(nc_type type) { switch (type) { case NC_UNSPECIFIED: /* be like netCDF */ case NC_CHAR: return DFNT_CHAR; case NC_BYTE: return DFNT_INT8; case NC_SHORT: return DFNT_INT16; case NC_LONG: return DFNT_INT32; case NC_FLOAT: return DFNT_FLOAT32; case NC_DOUBLE: return DFNT_FLOAT64; default: return DFNT_NONE; } } /* hdf_map_type */ /* ---------------------------------------------------------------- ** UnMap a data type. I.e. go from an HDF type to an NC_ ** The HDF type may be in DFNT_NATIVE mode, so only look at the ** bottom bits */ nc_type hdf_unmap_type(int type) { switch (type & 0xff) { case DFNT_CHAR: case DFNT_UCHAR: return NC_CHAR; case DFNT_INT8: case DFNT_UINT8: return NC_BYTE; case DFNT_INT16: case DFNT_UINT16: return NC_SHORT; case DFNT_INT32: case DFNT_UINT32: return NC_LONG; case DFNT_FLOAT32: return NC_FLOAT; case DFNT_FLOAT64: return NC_DOUBLE; default: return (nc_type)FAIL; /* need a better legal nc_type value */ } } /* hdf_unmap_type */ /* ----------------------------------------------------------------- ** Given a dimension id number return its hdf_ref number (Vgroup id) */ int hdf_get_ref(NC *handle, int i) { NC_array *tmp = NULL; NC_dim **d = NULL; Void *dims = NULL; tmp = handle->dims; dims = handle->dims->values; dims += i * tmp->szof; d = (NC_dim **)dims; return (*d)->vgid; /* return ref of vgroup */ } /* get_hdf_ref */ /* ---------------------------------------------------------------- ** Given a dimension pointer return the ref of a Vdata which was ** newly created to represent the values the dimension takes on ** If there is a variable with the same name as our dimension then ** the values the variable takes on are the values for the ** 'steps' in the dimension. ** Otherwise, the dimension takes on the values 0..(size -1) ** ** NOTE: This may cause conflicts cuz we may get called before ** the variable's values are set??? ** ** NOTE2: Someone should update the comments here. They no longer ** seem valid -GV 9/19/97 */ int hdf_create_dim_vdata(XDR *xdrs, NC *handle, NC_dim *dim) { int ref; int32 val; long dsize; int ret_value = FAIL; (void)xdrs; dsize = 1; val = (dim->size != NC_UNLIMITED) ? dim->size : (int32)handle->numrecs; ref = VHstoredata(handle->hdf_file, "Values", (const uint8 *)&val, dsize, DFNT_INT32, dim->name->values, DIM_VALS01); if (ref == FAIL) { HGOTO_FAIL(FAIL); } ret_value = ref; done: return ret_value; } /* hdf_create_dim_vdata */ /* ---------------------------------------------------------------- ** Given a dimension pointer return the ref of an older version ** dim Vdata which was newly created to represent the values ** the dimension takes on, for backward compatibility. ** ** For DIM_VALS, the values the variable takes on are the values ** for the 'steps' in the dimension. ** */ int hdf_create_compat_dim_vdata(XDR *xdrs, NC *handle, NC_dim *dim, int32 dimval_ver) { int i; int ref; long dsize; int32 *val = NULL; int ret_value = FAIL; (void)xdrs; if (dimval_ver != DIMVAL_VERSION00) HGOTO_FAIL(FAIL); dsize = (dim->size == NC_UNLIMITED) ? 1 : dim->size; if (dsize < 0) HGOTO_FAIL(FAIL); /* create a fake one */ /* allocate space */ val = malloc(dsize * sizeof(int32)); if (!val) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Shouldn't a check for netCDF file be here before using handle->numrecs? If the file is an HDF file, vp->numrecs should be used, right? -BMR (2013-6/24) */ if (dim->size == NC_UNLIMITED) { *val = handle->numrecs; } else { for (i = 0; i < dsize; i++) val[i] = i; } ref = VHstoredata(handle->hdf_file, "Values", (const uint8 *)val, dsize, DFNT_INT32, dim->name->values, DIM_VALS); if (ref == FAIL) { HGOTO_FAIL(FAIL); } ret_value = ref; done: free(val); return ret_value; } /* hdf_create_compat_dim_vdata */ /* ---------------------------------------------------------------- ** Write out a vdata representing an attribute */ int hdf_write_attr(XDR *xdrs, NC *handle, NC_attr **attr) { char *name = NULL; Void *values = NULL; int size; int type; int order; int ret_value = SUCCEED; (void)xdrs; name = (*attr)->name->values; values = (*attr)->data->values; size = (*attr)->data->count; type = (*attr)->HDFtype; if (type == DFNT_CHAR) { order = size; size = 1; } else { order = 1; } ret_value = VHstoredatam(handle->hdf_file, ATTR_FIELD_NAME, (unsigned char *)values, size, type, name, _HDF_ATTRIBUTE, order); return ret_value; } /* hdf_write_attr */ /* ---------------------------------------------------------------- ** Write out a group representing a dimension */ int32 hdf_write_dim(XDR *xdrs, NC *handle, NC_dim **dim, int32 cnt) { int32 tags[100]; int32 refs[100]; int32 count; const char *class = NULL; char name[H4_MAX_NC_NAME] = ""; int32 ret_value = SUCCEED; /* * Look up to see if there is a variable of the same name * giving values */ count = 0; tags[count] = DFTAG_VH; refs[count] = hdf_create_dim_vdata(xdrs, handle, (*dim)); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); count++; /* do we need to create compatible dimension? */ if ((*dim)->dim00_compat) { tags[count] = DFTAG_VH; refs[count] = hdf_create_compat_dim_vdata(xdrs, handle, (*dim), DIMVAL_VERSION00); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); count++; } /* check if UNLIMITED dimension */ if ((*dim)->size == NC_UNLIMITED) class = _HDF_UDIMENSION; else class = _HDF_DIMENSION; if (strncmp((*dim)->name->values, "fakeDim", 7) == 0) sprintf(name, "fakeDim%d", (int)cnt); else strcpy(name, (*dim)->name->values); /* write out the dimension group? */ (*dim)->vgid = VHmakegroup(handle->hdf_file, tags, refs, count, name, class); ret_value = (*dim)->vgid; /* ref of vgroup of dimension */ done: return ret_value; } /* hdf_write_dim */ /* ---------------------------------------------------------------- ** Write out a group representing a variable ** If successful, return the id of the created Vgroup else ** return NULL */ int32 hdf_write_var(XDR *xdrs, NC *handle, NC_var **var) { NC_array *attrs = NULL; NC_iarray *assoc = NULL; uint8 ntstring[4]; uint16 ref; int8 outNT; uint8 tbuf[2 + ((H4_MAX_VAR_DIMS + 1) * 8)]; /* temporary buffer */ int32 tags[H4_MAX_NC_ATTRS + H4_MAX_VAR_DIMS + 2]; int32 refs[H4_MAX_NC_ATTRS + H4_MAX_VAR_DIMS + 10]; uint16 nt_ref, rank; int32 GroupID, val, vs_id; uint8 *bufp = NULL; int32 ret_value = SUCCEED; unsigned i, count; Void *attribute = NULL; count = 0; assoc = (*var)->assoc; attrs = (*var)->attrs; /* * Get the dimension information */ for (i = 0; i < assoc->count; i++) { tags[count] = DIM_TAG; refs[count] = hdf_get_ref(handle, assoc->values[i]); count++; } /* * Add info for the attributes */ if (attrs) { attribute = attrs->values; for (i = 0; i < attrs->count; i++) { tags[count] = ATTR_TAG; refs[count] = hdf_write_attr(xdrs, handle, (NC_attr **)attribute); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); attribute += attrs->szof; count++; } } /* * Add info about the type of this variable */ if ((*var)->var_type == IS_SDSVAR || (*var)->var_type == IS_CRDVAR) { char fields[FIELDNAMELENMAX]; char vsclass[H4_MAX_NC_NAME]; if ((*var)->var_type == IS_SDSVAR) { strncpy(fields, "SDS variable", 13); strncpy(vsclass, _HDF_SDSVAR, 7); } else if ((*var)->var_type == IS_CRDVAR) { strncpy(fields, "Coordinate variable", 20); strncpy(vsclass, _HDF_CRDVAR, 9); } if ((vs_id = VSattach(handle->hdf_file, -1, "w")) == FAIL) HGOTO_FAIL(FAIL); if (VSsetclass(vs_id, vsclass) == FAIL) HGOTO_FAIL(FAIL); if (VSfdefine(vs_id, fields, DFNT_FLOAT32, 1) == FAIL) HGOTO_FAIL(FAIL); if (VSsetfields(vs_id, fields) == FAIL) HGOTO_FAIL(FAIL); ref = VSQueryref(vs_id); if (VSdetach(vs_id) == FAIL) HGOTO_FAIL(FAIL); tags[count] = DFTAG_VH; refs[count] = ref; count++; } /* * If we already have data written out include that too * (this might happen after a redef() cuz we will leave * the data sitting on the disk but clear out all the * meta-data) */ if ((*var)->data_ref) { tags[count] = (int32)DFTAG_SD; refs[count] = (*var)->data_ref; count++; } /* * Write out a number type tag so that we can recover this * variable's type later on * * by default numbers are converted to IEEE otherwise we need to save the * machine type in the NT object */ /* someone unwrap this statement....*/ outNT = ((*var)->HDFtype & DFNT_NATIVE) ? DFKgetPNSC((*var)->HDFtype, DF_MT) : ((*var)->HDFtype & DFNT_LITEND) ? DFNTF_PC : DFNTF_IEEE; ref = Hnewref(handle->hdf_file); ntstring[0] = DFNT_VERSION; /* version */ ntstring[1] = (uint8)((*var)->HDFtype & 0xff); /* type */ ntstring[2] = (uint8)((*var)->HDFsize * 8); /* width (in bits) */ ntstring[3] = outNT; /* class: IEEE or machine class */ if (Hputelement(handle->hdf_file, DFTAG_NT, ref, ntstring, (int32)4) == FAIL) HGOTO_FAIL(FAIL); tags[count] = DFTAG_NT; refs[count] = ref; nt_ref = (uint16)ref; count++; #ifdef WRITE_NDG /* prepare to start writing ndg */ if ((GroupID = DFdisetup(10)) < 0) HGOTO_FAIL(FAIL); /* write SD record */ if ((*var)->data_ref) { if (DFdiput(GroupID, DFTAG_SD, (uint16)(*var)->data_ref) == FAIL) HGOTO_FAIL(FAIL); } /* write NT tag/ref */ if (DFdiput(GroupID, DFTAG_NT, (uint16)ref) == FAIL) HGOTO_FAIL(FAIL); /* put rank & dimensions in buffer */ bufp = tbuf; rank = assoc->count; UINT16ENCODE(bufp, rank); for (i = 0; i < (int)rank; i++) { val = (int32)(*var)->shape[i]; /* need to fake the size of the record dimension */ if (val == NC_UNLIMITED) { if (handle->file_type == HDF_FILE) val = (*var)->numrecs; else val = handle->numrecs; } INT32ENCODE(bufp, val); } /* "<=" used to put 1 data NT + rank scale NTs in buffer */ for (i = 0; i <= (int)rank; i++) { /* scale NTs written even if no scale!*/ UINT16ENCODE(bufp, DFTAG_NT); UINT16ENCODE(bufp, nt_ref); } /* write out SDD record */ if (Hputelement(handle->hdf_file, DFTAG_SDD, ref, tbuf, (int32)(bufp - tbuf)) == FAIL) HGOTO_FAIL(FAIL); /* write dimension record tag/ref */ if (DFdiput(GroupID, DFTAG_SDD, (uint16)ref) == FAIL) HGOTO_FAIL(FAIL); tags[count] = DFTAG_SDD; refs[count] = ref; count++; /* Add a bogus tag so we know this NDG is really a variable */ if (DFdiput(GroupID, BOGUS_TAG, (uint16)ref) == FAIL) HGOTO_FAIL(FAIL); /* write out NDG */ if (DFdiwrite(handle->hdf_file, GroupID, DFTAG_NDG, (*var)->ndg_ref) < 0) HGOTO_FAIL(FAIL); tags[count] = DFTAG_NDG; refs[count] = (*var)->ndg_ref; count++; #endif /* WRITE_NDG */ /* write the vgroup for the coordinate variable */ (*var)->vgid = VHmakegroup(handle->hdf_file, tags, refs, count, (*var)->name->values, _HDF_VARIABLE); ret_value = (*var)->vgid; /* ref of vgroup of variable */ done: return ret_value; } /* hdf_write_var */ /* ---------------------------------------------------------------- ** Write out a cdf structure */ intn hdf_write_xdr_cdf(XDR *xdrs, NC **handlep) { int32 count; int status, done; unsigned sz, i, j; int32 *tags = NULL; int32 *refs = NULL; NC_dim **dims = NULL; NC_dim **dims1 = NULL; NC_array *tmp = NULL; long *dim_size_array = NULL; long *tsizeptr = NULL; long tsize; uint32 *dim_hash_array = NULL; uint32 *thashptr = NULL; uint32 thash; Void *vars = NULL; Void *attrs = NULL; intn ret_value = SUCCEED; /* Convert old scales into coordinate var values before writing out any header info */ status = hdf_conv_scales(handlep); if (status == FAIL) HGOTO_FAIL(FAIL); /* count size of tag / ref arrays */ sz = 0; if ((*handlep)->dims) sz += (*handlep)->dims->count; if ((*handlep)->vars) sz += (*handlep)->vars->count; if ((*handlep)->attrs) sz += (*handlep)->attrs->count; /* allocate tag / ref arrays */ tags = malloc(sz * sizeof(int32) + 1); refs = malloc(sz * sizeof(int32) + 1); if (NULL == tags || NULL == refs) { HGOTO_FAIL(FAIL); } /* ** write out dimension arrays */ count = 0; if ((*handlep)->dims) { tmp = (*handlep)->dims; dims = (NC_dim **)(*handlep)->dims->values; tsizeptr = dim_size_array = malloc(sizeof(long) * (size_t)tmp->count); thashptr = dim_hash_array = malloc(sizeof(uint32) * (size_t)tmp->count); if (NULL == dim_size_array || NULL == dim_hash_array) { HGOTO_FAIL(FAIL); } for (i = 0; i < tmp->count; i++, dims++) { *tsizeptr++ = (*dims)->size; *thashptr++ = (*dims)->name->hash; } /* end for */ dims = (NC_dim **)(*handlep)->dims->values; for (i = 0; i < tmp->count; i++) { /* this is really ugly and should be handled another way */ /* make sure we don't duplicate dimensions */ done = FALSE; dims1 = (NC_dim **)(*handlep)->dims->values; tsize = dim_size_array[i]; thash = dim_hash_array[i]; tsizeptr = dim_size_array; thashptr = dim_hash_array; for (j = 0; j < i; j++) { /* this order on the test is faster -QAK */ if (thash == *thashptr && tsize == *tsizeptr && NC_compare_string((*dims)->name, (*dims1)->name) == 0) { done = TRUE; break; } tsizeptr++; thashptr++; dims1++; } if (!done) { tags[count] = (int32)DIM_TAG; refs[count] = (int32)hdf_write_dim(xdrs, (*handlep), dims, count); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); count++; } dims++; } } /* end if handle->dims */ /* ** write out variable info */ if ((*handlep)->vars) { tmp = (*handlep)->vars; vars = (*handlep)->vars->values; for (i = 0; i < tmp->count; i++) { tags[count] = (int32)VAR_TAG; refs[count] = (int32)hdf_write_var(xdrs, (*handlep), (NC_var **)vars); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); vars += tmp->szof; count++; } } /* * write global attribute information */ if ((*handlep)->attrs) { tmp = (*handlep)->attrs; attrs = (*handlep)->attrs->values; for (i = 0; i < tmp->count; i++) { tags[count] = (int32)ATTR_TAG; refs[count] = (int32)hdf_write_attr(xdrs, (*handlep), (NC_attr **)attrs); if (refs[count] == FAIL) HGOTO_FAIL(FAIL); attrs += tmp->szof; count++; } } /* write out final VGroup thang */ /* set the top level CDF VGroup pointer */ (*handlep)->vgid = VHmakegroup((*handlep)->hdf_file, tags, refs, count, (*handlep)->path, _HDF_CDF); ret_value = (*handlep)->vgid; /* ref of final vgroup */ done: free(dim_size_array); free(dim_hash_array); free(tags); free(refs); return ret_value; } /* hdf_write_xdr_cdf */ /* -------------------------------------------------------------- ** hdf_conv_scales converts old scale values into coord var values. ** Searches through var list for DFTAG_SDS, reads in the scale data, ** change the ref to ndg_ref and the tag to DATA_TAG, writes the ** data out. */ intn hdf_conv_scales(NC **handlep) { int status, scaleref, scaletag, scalelen; unsigned i; NC_var **vars = NULL; NC_array *tmp = NULL; uint8 *scalebuf = NULL; uint8 *datap = NULL; intn ret_value = SUCCEED; if ((*handlep)->vars) { tmp = (*handlep)->vars; vars = (NC_var **)tmp->values; for (i = 0; i < tmp->count; i++) { if (((*vars)->data_tag == DFTAG_SDS) && ((*vars)->data_ref != (*vars)->ndg_ref)) { /* read in scale values */ scaleref = (*vars)->data_ref; scaletag = (*vars)->data_tag; scalelen = Hlength((*handlep)->hdf_file, scaletag, scaleref); if (scalelen == FAIL) HGOTO_FAIL(FAIL); if ((*vars)->data_offset == -1) { /* this dim has no scale values */ (*vars)->data_ref = 0; (*vars)->data_tag = DATA_TAG; } else { /* has scale values */ scalebuf = malloc((uint32)scalelen); if (scalebuf == NULL) HGOTO_FAIL(FAIL); status = Hgetelement((*handlep)->hdf_file, scaletag, scaleref, scalebuf); if (status == FAIL) HGOTO_FAIL(FAIL); (*vars)->data_tag = DATA_TAG; (*vars)->data_ref = (*vars)->ndg_ref; /* Try to stick with the current way. If this ref conflicts with existing SDS, call Hnewref to get a new one. 3/25/97 */ datap = scalebuf + (*vars)->data_offset; status = Hputelement((*handlep)->hdf_file, DATA_TAG, (*vars)->data_ref, datap, (*vars)->len); if (status == FAIL) { (*vars)->data_tag = scaletag; (*vars)->data_ref = scaleref; HGOTO_FAIL(FAIL); } } /* has scale values */ } /* DFTAG_SDS */ vars++; } } done: free(scalebuf); return ret_value; } /* ---------------------------------------------------------------- ** Read in the dimensions out of a cdf structure ** Return FAIL if something goes wrong */ intn hdf_read_dims(XDR *xdrs, NC *handle, int32 vg) { char vgname[H4_MAX_NC_NAME] = ""; char vsclass[H4_MAX_NC_CLASS] = ""; char vgclass[H4_MAX_NC_CLASS] = ""; int id, count, i, found; int sub_id; int32 dim_size; NC_dim **dimension = NULL; int32 dim, entries; int32 vs; intn ret_value = SUCCEED; (void)xdrs; found = FALSE; count = 0; id = -1; /* * Allocate enough space in case everything is a dimension */ count = 0; dimension = malloc(sizeof(NC_dim *) * Vntagrefs(vg) + 1); if (NULL == dimension) { /* replace it with NCadvice or HERROR?? */ HGOTO_FAIL(FAIL); } /* * Look through for a Vgroup of class _HDF_DIMENSION */ while ((id = Vgetnext(vg, id)) != FAIL) { if (Visvg(vg, id)) { dim = Vattach(handle->hdf_file, id, "r"); if (dim == FAIL) continue; /* why do we continue? does this failure here not matter? -GV */ if (Vgetclass(dim, vgclass) == FAIL) HGOTO_FAIL(FAIL); if (!strcmp(vgclass, _HDF_DIMENSION) || !strcmp(vgclass, _HDF_UDIMENSION)) { int is_dimval, is_dimval01; /* init both flags to FALSE */ is_dimval = FALSE; is_dimval01 = FALSE; if (Vinquire(dim, &entries, vgname) == FAIL) HGOTO_FAIL(FAIL); /* * look through for a Vdata of class DIM_VALS01 and/or DIM_VALS * to get size */ sub_id = -1; while (((sub_id = Vgetnext(dim, sub_id)) != FAIL)) { if (Visvs(dim, sub_id)) { vs = VSattach(handle->hdf_file, sub_id, "r"); if (vs == FAIL) HGOTO_FAIL(FAIL); if (VSgetclass(vs, vsclass) == FAIL) HGOTO_FAIL(FAIL); if (!strcmp(vsclass, DIM_VALS)) { is_dimval = TRUE; if (strcmp(vgclass, _HDF_UDIMENSION)) /* not unlimited dim */ { if (VSQuerycount(vs, &dim_size) == FAIL) HGOTO_FAIL(FAIL); } } if ((!strcmp(vsclass, DIM_VALS01)) || (!strcmp(vgclass, _HDF_UDIMENSION))) { /* DIM_VALS && _HDF_UDIMENSION */ int32 val; /* needs a temp var since handle->numrecs */ /* may not be an int32 */ /* The call to VSsetfields fails for the files created with the library version 3.3r1. This call is not necessary since handle vs is obtained by specifying class name. Elena Pourmal 2/17/99 if (VSsetfields(vs, "Values") == FAIL) { ret_value = FAIL; goto done; } */ if (VSseek(vs, 0) == FAIL) HGOTO_FAIL(FAIL); /* * This is highly dangerous since there might be multiple * unlimited dimensions */ if (VSread(vs, (uint8 *)&val, 1, FULL_INTERLACE) != 1) HGOTO_FAIL(FAIL); if (!strcmp(vgclass, _HDF_UDIMENSION)) { dim_size = NC_UNLIMITED; handle->numrecs = val; } else dim_size = val; } /* DIM_VALS && _HDF_UDIMENSION */ if (!strcmp(vsclass, DIM_VALS01)) /* dimval01 */ is_dimval01 = TRUE; if (VSdetach(vs) == FAIL) HGOTO_FAIL(FAIL); /* Is it the second dim vs of a compatible dim? */ found = FALSE; for (i = count - 1; ((i >= 0) && (!found)); i--) { if (!strcmp(vgname, dimension[i]->name->values) && (dim_size == dimension[i]->size)) { /* vgname is the dim name and may be diff from vsname */ if (is_dimval01 == TRUE && is_dimval == TRUE) dimension[i]->dim00_compat = 1; found = TRUE; /* the second vs */ } } /* for */ if (!found) { dimension[count] = NC_new_dim(vgname, dim_size); if (NULL == dimension[count]) { HGOTO_FAIL(FAIL); } /* dimension[count] */ if (!strcmp(vsclass, DIM_VALS01)) /* dimvals01 only */ dimension[count]->dim00_compat = 0; /* record vgroup id here so we can use later */ /* Note: this is only for later file -BMR */ dimension[count]->vgid = id; count++; } /* found */ } /* is vs */ } /* while in dimension vg */ } /* is vg */ if (Vdetach(dim) == FAIL) HGOTO_FAIL(FAIL); } /* while */ } if (count) { handle->dims = NC_new_array(NC_DIMENSION, count, (Void *)dimension); if (handle->dims == NULL) HGOTO_FAIL(FAIL); } else handle->dims = NULL; done: if (ret_value == FAIL) { /* Failure cleanup */ if (handle->dims != NULL) { NC_free_array(handle->dims); handle->dims = NULL; } } free(dimension); return ret_value; } /* hdf_read_dims */ /****************************************************************************** NAME hdf_num_attrs DESCRIPTION Determine number of attributes in vgroup i.e. of the SDS RETURNS returns number of attributes in vgroup if successful and FAIL otherwise. *******************************************************************************/ static intn hdf_num_attrs(NC *handle, /* IN: handle to SDS */ int32 vg /* IN: ref of top Vgroup */) { int count = 0; int t, n; int32 vs, tag; int32 id = -1; char class[H4_MAX_NC_CLASS] = ""; intn ret_value = FAIL; n = Vntagrefs(vg); if (n == FAIL) { HGOTO_FAIL(FAIL); } /* * look through for a Vdata of class _HDF_ATTRIBUTE */ for (t = 0; t < n; t++) { if (Vgettagref(vg, t, &tag, &id) == FAIL) HGOTO_FAIL(FAIL); if (tag == DFTAG_VH) { vs = VSattach(handle->hdf_file, id, "r"); if (vs == FAIL) HGOTO_FAIL(FAIL); if (VSgetclass(vs, class) == FAIL) HGOTO_FAIL(FAIL); if (!strcmp(class, _HDF_ATTRIBUTE)) count++; if (VSdetach(vs) == FAIL) HGOTO_FAIL(FAIL); } } ret_value = count; done: return ret_value; } /* hdf_num_attrs */ /* ---------------------------------------------------------------- ** Read in all attributes of the current vg ** Return NULL if something goes wrong ** Return a pointer to the array of attributes if all goes well */ NC_array * hdf_read_attrs(XDR *xdrs, NC *handle, int32 vg) { int count, t, n; int32 vs, tag, id, vsize, attr_size, nt; nc_type type; char vsname[H4_MAX_NC_NAME] = ""; char fields[100] = ""; char class[H4_MAX_NC_CLASS] = ""; char *values = NULL; NC_attr **attributes = NULL; NC_array *Array = NULL; NC_array *ret_value = NULL; (void)xdrs; count = 0; id = -1; n = Vntagrefs(vg); if (n == FAIL) { HGOTO_FAIL(NULL); } /* * Allocate enough space in case everything is an attribute */ count = 0; attributes = malloc(sizeof(NC_attr *) * n + 1); if (NULL == attributes) { /* replace it with NCAdvice or HERROR? */ HGOTO_FAIL(NULL); } /* * look through for a Vdata of class _HDF_ATTRIBUTE */ for (t = 0; t < n; t++) { if (Vgettagref(vg, t, &tag, &id) == FAIL) HGOTO_FAIL(NULL); if (tag == DFTAG_VH) { vs = VSattach(handle->hdf_file, id, "r"); if (vs == FAIL) HGOTO_FAIL(NULL); if (VSgetclass(vs, class) == FAIL) HGOTO_FAIL(NULL); if (!strcmp(class, _HDF_ATTRIBUTE)) { if (VSinquire(vs, &attr_size, NULL, fields, &vsize, vsname) == FAIL) HGOTO_FAIL(NULL); if ((nt = VFfieldtype(vs, 0)) == FAIL) HGOTO_FAIL(NULL); if ((type = hdf_unmap_type(nt)) == FAIL) HGOTO_FAIL(NULL); values = malloc(vsize * attr_size + 1); if (NULL == values) HGOTO_FAIL(NULL); if (VSsetfields(vs, fields) == FAIL) HGOTO_FAIL(NULL); if (VSread(vs, (uint8 *)values, attr_size, FULL_INTERLACE) == FAIL) HGOTO_FAIL(NULL); if (type == NC_CHAR) { if ((attr_size = VFfieldorder(vs, 0)) == FAIL) HGOTO_FAIL(NULL); ((char *)values)[attr_size] = '\0'; } attributes[count] = (NC_attr *)NC_new_attr(vsname, type, attr_size, values); if (NULL == attributes[count]) { /* replace it with NCadvice or HERROR? */ HGOTO_FAIL(NULL); } attributes[count]->HDFtype = nt; /* free values and reset to NULL */ free(values); values = NULL; count++; } /* end if attribute ? */ if (VSdetach(vs) == FAIL) HGOTO_FAIL(NULL); } /* end if DFTAG_VH */ } /* end for */ /* create array of attributes */ if (count) Array = NC_new_array(NC_ATTRIBUTE, count, (Void *)attributes); ret_value = Array; /* return array of attributes */ done: if (ret_value == NULL) { /* Failure cleanup */ if (Array != NULL) NC_free_array(Array); } free(values); free(attributes); return ret_value; } /* hdf_read_attrs */ /* ---------------------------------------------------------------- ** Read in the variables out of a cdf structure ** Return FAIL if something goes wrong ** ** Important: We must already assume that handle->dims is set ** so that we can do a call to NC_var_shape() so that we can ** set the numrecs fields of variables (so we can fill record ** variables intelligently) */ intn hdf_read_vars(XDR *xdrs, NC *handle, int32 vg) { char vgname[H4_MAX_NC_NAME] = ""; char subname[H4_MAX_NC_NAME] = ""; char class[H4_MAX_NC_CLASS] = ""; NC_var **variables = NULL; NC_var *vp = NULL; int ndims, *dims = NULL; uint8 ntstring[4]; int data_ref, is_rec_var, vg_size, count; int32 data_count; int32 HDFtype = FAIL; int32 tag; int32 id; int32 n; int32 sub_id; int32 entries; int32 ndg_ref = 0; int32 rag_ref = 0; intn nattrs; hdf_vartype_t var_type = UNKNOWN; int t, i; nc_type type; int32 var, sub; intn ret_value = SUCCEED; count = 0; id = -1; /* * Allocate enough space in case everything is a variable */ count = 0; variables = malloc(sizeof(NC_var *) * Vntagrefs(vg) + 1); if (NULL == variables) { HGOTO_FAIL(FAIL); } /* * Allocate enough space in case lots of dimensions */ dims = malloc(sizeof(int) * Vntagrefs(vg) + 1); if (NULL == dims) { HGOTO_FAIL(FAIL); } /* * Look through for a Vgroup of class _HDF_VARIABLE */ if ((vg_size = Vntagrefs(vg)) == FAIL) HGOTO_FAIL(FAIL); for (i = 0; i < vg_size; i++) { if (Vgettagref(vg, i, &tag, &id) == FAIL) { HGOTO_FAIL(FAIL); } if (tag == DFTAG_VG) { var = Vattach(handle->hdf_file, id, "r"); if (var == FAIL) continue; /* isn't this bad? -GV */ if (Vgetclass(var, class) == FAIL) { HGOTO_FAIL(FAIL); } /* Process as below if this VGroup represents a Variable or a Coordinate Variable */ if (!strcmp(class, _HDF_VARIABLE)) { /* * We have found a VGroup representing a Variable or a * a Coordinate Variable */ ndims = 0; type = NC_UNSPECIFIED; data_ref = 0; data_count = 0; rag_ref = 0; is_rec_var = FALSE; if (Vinquire(var, &n, vgname) == FAIL) { HGOTO_FAIL(FAIL); } /* * Loop through contents looking for dimensions */ for (t = 0; t < n; t++) { char dimclass[H4_MAX_NC_CLASS] = ""; char vsclass[H4_MAX_NC_CLASS] = ""; if (Vgettagref(var, t, &tag, &sub_id) == FAIL) { HGOTO_FAIL(FAIL); } switch (tag) { case DFTAG_VG: /* ------ V G R O U P ---------- */ sub = Vattach(handle->hdf_file, sub_id, "r"); if (FAIL == sub) { HGOTO_FAIL(FAIL); } if (FAIL == Vgetclass(sub, dimclass)) { HGOTO_FAIL(FAIL); } if (!strcmp(dimclass, _HDF_DIMENSION) || !strcmp(dimclass, _HDF_UDIMENSION)) { if (!strcmp(dimclass, _HDF_UDIMENSION)) is_rec_var = TRUE; if (FAIL == Vinquire(sub, &entries, subname)) { HGOTO_FAIL(FAIL); } dims[ndims] = (int)NC_dimid(handle, subname); if (-1 == dims[ndims]) /* should change to FAIL */ { HGOTO_FAIL(FAIL); } ndims++; } if (FAIL == Vdetach(sub)) { HGOTO_FAIL(FAIL); } break; case DFTAG_VH: /* ----- V D A T A ----- */ sub = VSattach(handle->hdf_file, sub_id, "r"); if (FAIL == sub) HGOTO_FAIL(FAIL); if (FAIL == VSgetclass(sub, vsclass)) HGOTO_FAIL(FAIL); if (!strcmp(vsclass, _HDF_SDSVAR)) var_type = IS_SDSVAR; else if (!strcmp(vsclass, _HDF_CRDVAR)) var_type = IS_CRDVAR; else var_type = UNKNOWN; if (FAIL == VSdetach(sub)) HGOTO_FAIL(FAIL); break; case DFTAG_NDG: /* ----- NDG Tag for HDF 3.2 ----- */ ndg_ref = sub_id; break; case DFTAG_SD: /* ------- Data Storage ------ */ data_ref = sub_id; /* Note: apparently Hlength will fail in certain cases, but but this okay since I believe this is because the data does not exist yet in the file? So we can't catch this error -GV*/ data_count = Hlength(handle->hdf_file, DATA_TAG, sub_id); break; case DFTAG_SDRAG: /* ----- Ragged Array index ----- */ rag_ref = sub_id; break; case DFTAG_NT: /* ------- Number type ------- */ if (Hgetelement(handle->hdf_file, tag, sub_id, ntstring) == FAIL) { HGOTO_FAIL(FAIL); } HDFtype = ntstring[1]; if ((type = hdf_unmap_type(HDFtype)) == FAIL) { HGOTO_FAIL(FAIL); } /* * Check if data was stored in native format * And make sure the numbertype version numbers are the same */ if ((ntstring[0] != DFNT_VERSION) || ((ntstring[3] != DFNTF_NONE) && (ntstring[3] != DFNTF_IEEE))) { /* check if in native mode for a different type of machine or external data * file is LITEND */ if (ntstring[3] == DFNTF_PC) HDFtype |= DFNT_LITEND; else { if (ntstring[3] != (uint8)DFKgetPNSC(HDFtype, DF_MT)) { /* * OK, we have a problem here --- is in native mode * for a different machine. PUNT */ goto bad_number_type; /* GOTO */ } else { /* * Is in native mode but its OK --- same machine type */ HDFtype |= DFNT_NATIVE; } } } break; default: /* Do nothing */ break; } } variables[count] = NC_new_var(vgname, type, ndims, dims); /* BMR: put back hdf type that was set wrong by NC_new_var; please refer to the cvs history of bug #172 for reason on this statement - 4/17/2001 */ variables[count]->HDFtype = HDFtype; vp = variables[count]; if (NULL == vp) { HGOTO_FAIL(FAIL); } /* Read in the attributes if any */ if ((nattrs = hdf_num_attrs(handle, var)) > 0) vp->attrs = hdf_read_attrs(xdrs, handle, var); else vp->attrs = NULL; /* set up for easy access later */ vp->vgid = id; vp->data_ref = data_ref; vp->data_tag = DATA_TAG; vp->HDFtype = HDFtype; vp->ndg_ref = (uint16)ndg_ref; vp->cdf = handle; /* for NC_var_shape */ vp->var_type = var_type; /* need to process the ragged array info here */ /* QUESTION: Load the whole rag_fill list in now??????? */ if (rag_ref) { vp->is_ragged = TRUE; } if (vp->data_ref) { /* * We have already seen data for this variable so now * we need to worry about its numrecs field */ if (is_rec_var) { /* * Call NC_var_shape() so we can figure out how many * records have been written. This is horribly * inefficient, but the separation-of-powers gets * really mucked up if we wait till later... */ if (NC_var_shape(vp, handle->dims) == -1) { HGOTO_FAIL(FAIL); } /* * Now figure out how many recs have been written * For a while there was a -1 at the end of this * equation. I don't remember why its there * (4-Nov-93) */ vp->numrecs = data_count / vp->dsizes[0]; /* * Deallocate the shape info as it will be recomputed * at a higher level later */ free(vp->shape); free(vp->dsizes); /* Reset these two pointers to NULL after freeing. BMR 4/11/01 */ vp->shape = NULL; vp->dsizes = NULL; } else { /* Not a rec var, don't worry about it */ vp->numrecs = 1; } } /* end vp->data_ref */ count++; } /* end if vgroup class is variable */ bad_number_type: /* ? */ if (FAIL == Vdetach(var)) HGOTO_FAIL(FAIL); } /* end if DTAG_VG */ } /* end for vg_size */ /* create array of variables */ if (count) { handle->vars = NC_new_array(NC_VARIABLE, count, (Void *)variables); if (NULL == handle->vars) HGOTO_FAIL(FAIL); } else handle->vars = NULL; done: if (ret_value == FAIL) { /* Failure cleanup */ if (handle->vars != NULL) NC_free_array(handle->vars); } free(variables); free(dims); return ret_value; } /* hdf_read_vars */ /* ---------------------------------------------------------------- ** Read in a cdf structure */ intn hdf_read_xdr_cdf(XDR *xdrs, NC **handlep) { int32 cdf_vg = FAIL; int vgid = 0; int status; intn ret_value = SUCCEED; if ((vgid = Vfindclass((*handlep)->hdf_file, _HDF_CDF)) != FAIL) { cdf_vg = Vattach((*handlep)->hdf_file, vgid, "r"); if (cdf_vg == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); } /* end if */ else HGOTO_FAIL(FAIL); (*handlep)->vgid = vgid; /* ref of vgroup */ /* read in dimensions */ status = hdf_read_dims(xdrs, (*handlep), cdf_vg); if (status == FAIL) HGOTO_FAIL(FAIL); /* read in variables */ status = hdf_read_vars(xdrs, (*handlep), cdf_vg); if (status == FAIL) HGOTO_FAIL(FAIL); /* read in attributes */ if (hdf_num_attrs((*handlep), cdf_vg) > 0) (*handlep)->attrs = hdf_read_attrs(xdrs, (*handlep), cdf_vg); else (*handlep)->attrs = NULL; /* detach from cdf vgroup */ if (FAIL == Vdetach(cdf_vg)) HGOTO_FAIL(FAIL); done: if (ret_value == FAIL) { /* Failure cleanup */ if (cdf_vg != FAIL) Vdetach(cdf_vg); } return ret_value; } /* hdf_read_xdr_cdf */ /* ------------------------------------------------------------------- ** Read or write a CDF structure ** ** If we are reading, first try to read the information out of netCDF ** object stored explicitly in HDF files as netCDF objects. If ** that fails try to read SDSs out of the HDF file and interpret ** them as netCDF information. */ intn hdf_xdr_cdf(XDR *xdrs, NC **handlep) { intn status; intn ret_value = SUCCEED; switch (xdrs->x_op) { case XDR_ENCODE: if ((*handlep)->vgid) { if (FAIL == hdf_cdf_clobber((*handlep))) HGOTO_FAIL(FAIL); } status = hdf_write_xdr_cdf(xdrs, handlep); if (FAIL == status) { HGOTO_FAIL(FAIL); } break; case XDR_DECODE: if (FAIL == (status = hdf_read_xdr_cdf(xdrs, handlep))) { status = hdf_read_sds_cdf(xdrs, handlep); if (FAIL == status) { HGOTO_ERROR(DFE_BADNDG, FAIL); } } /* end if */ break; case XDR_FREE: if (FAIL == NC_free_cdf((*handlep))) ret_value = FAIL; else ret_value = SUCCEED; break; default: ret_value = FAIL; } done: return ret_value; } /* hdf_xdr_cdf */ /* ---------------------- hdf_vg_clobber --------------- */ /* Delete a VGroup that is on the disk. Basically, we will want to just trash everything inside of it, making sure that any VDatas with class == DATA are saved */ intn hdf_vg_clobber(NC *handle, int id) { int t, n; int32 vg, tag, ref; int32 status; intn ret_value = SUCCEED; /* loop through and Clobber all top level VGroups */ /* attach to top level vgroup with read access */ vg = Vattach(handle->hdf_file, id, "r"); if (FAIL == vg) { HGOTO_FAIL(FAIL); } /* get number of members in vgroup */ n = Vntagrefs(vg); if (FAIL == n) { HGOTO_FAIL(FAIL); } /* Loop though and kill stuff */ for (t = 0; t < n; t++) { /* get tag/ref of element in vgroup */ if (FAIL == Vgettagref(vg, t, &tag, &ref)) { HGOTO_FAIL(FAIL); } /* switch on the type of element: vgroup, vdata, data, everything else */ switch (tag) { case DFTAG_VG: /* recursive call */ /* check if vgroup exists in file before trying to delete it's members */ if (vexistvg(handle->hdf_file, ref) != FAIL) { if (FAIL == hdf_vg_clobber(handle, ref)) { HGOTO_FAIL(FAIL); } } break; case DFTAG_VH: /* check if vdata exists in file before trying to delete it */ if (vexistvs(handle->hdf_file, ref) != FAIL) { status = VSdelete(handle->hdf_file, (int32)ref); if (FAIL == status) { HGOTO_FAIL(FAIL); } } break; case DFTAG_SD: /* * Don't delete actual numeric data * I guess this means we save it? -GV */ break; default: /* delete other objects given tag/ref in file */ if (FAIL == Hdeldd(handle->hdf_file, (uint16)tag, (uint16)ref)) { HGOTO_FAIL(FAIL); } break; } } ret_value = Vdetach(vg); done: return ret_value; } /* hdf_vg_clobber */ /* --------------------------- hdf_cdf_clobber ---------------------------- */ /* Delete a netCDF structure that has been already written to disk */ intn hdf_cdf_clobber(NC *handle) { int32 vg, tag, ref; int n, t, status; intn ret_value = SUCCEED; if (!handle->vgid) { /* okay right? */ ret_value = SUCCEED; /* hmm...since ref of vgroup is zero? */ goto done; } /* Close open VData pointers */ if (FAIL == hdf_close(handle)) { HGOTO_FAIL(FAIL); } /* loop through and Clobber all top level VGroups */ vg = Vattach(handle->hdf_file, handle->vgid, "r"); if (vg == FAIL) { HGOTO_FAIL(FAIL); } /* get number of members of Vgroup */ n = Vntagrefs(vg); if (FAIL == n) { HGOTO_FAIL(FAIL); } /* Loop though and just kill everyone */ for (t = 0; t < n; t++) { if (FAIL == Vgettagref(vg, t, &tag, &ref)) { HGOTO_FAIL(FAIL); } /* if this member is a vgroup destroy everything in it */ if (tag == DFTAG_VG) { /* check if vgroup exists in file */ if (vexistvg(handle->hdf_file, ref) != FAIL) { hdf_vg_clobber(handle, ref); } } switch (tag) { case DFTAG_VG: status = Vdelete(handle->hdf_file, (int32)ref); if (FAIL == status) { HGOTO_FAIL(FAIL); } break; case DFTAG_VH: status = VSdelete(handle->hdf_file, (int32)ref); if (FAIL == status) { HGOTO_FAIL(FAIL); } break; default: status = Hdeldd(handle->hdf_file, (uint16)tag, (uint16)ref); if (FAIL == status) { HGOTO_FAIL(FAIL); } break; } /* end switch tag */ } /* end for every member in vgroup */ if (FAIL == Vdetach(vg)) { HGOTO_FAIL(FAIL); } status = Vdelete(handle->hdf_file, (int32)handle->vgid); if (FAIL == status) { HGOTO_FAIL(FAIL); } handle->vgid = 0; /* reset ref of SDS vgroup to invalid ref */ done: return ret_value; } /* hdf_cdf_clobber */ /* -------------------------- hdf_close --------------------- */ /* We're about to close the file, do last minute HDF cleanup Also dump the number of records currently instantiated into the unlimited dimensions. BUG: All unlimited dimensions will have the same size BMR: handle->numrecs is used to write out the dim value for all unlimited dimensions without checking for netCDF file as in other places where vp->numrecs is used for HDF file and handle->numrecs is used for netCDF file. I believe this is what the "BUG:" comment above means. 6/24/2013 */ intn hdf_close(NC *handle) { NC_array *tmp = NULL; NC_var **vp = NULL; Void *vars = NULL; int i; int id, sub_id; int32 vg, dim; int32 vs; char class[H4_MAX_NC_CLASS] = ""; intn ret_value = SUCCEED; /* loop through and detach from variable data VDatas */ if (handle->vars) { tmp = handle->vars; vars = handle->vars->values; for (i = 0; i < tmp->count; i++) { vp = (NC_var **)vars; if ((*vp)->aid != FAIL) { if (FAIL == Hendaccess((*vp)->aid)) { HGOTO_FAIL(FAIL); } } (*vp)->aid = FAIL; /* reset access id */ vars += tmp->szof; } /* end for each variable */ } /* loop through top level looking for unlimited dimensions. we write them out? -GV */ if (handle->flags & NC_NDIRTY) { id = -1; vg = Vattach(handle->hdf_file, handle->vgid, "r"); if (FAIL == vg) { HGOTO_FAIL(FAIL); } /* go through vgroup hierarchy */ while ((id = Vgetnext(vg, id)) != FAIL) { if (Visvg(vg, id)) { dim = Vattach(handle->hdf_file, id, "r"); if (FAIL == dim) { HGOTO_FAIL(FAIL); } if (FAIL == Vgetclass(dim, class)) { HGOTO_FAIL(FAIL); } /* look for proper vgroup */ if (!strcmp(class, _HDF_UDIMENSION)) { sub_id = -1; /* look for vdata in vgroup */ while ((sub_id = Vgetnext(dim, sub_id)) != FAIL) { if (Visvs(dim, sub_id)) { /* yes, attach to vdata */ vs = VSattach(handle->hdf_file, sub_id, "w"); if (vs == FAIL) { HGOTO_FAIL(FAIL); /* HEprint(stdout, 0); */ } /* get class of vdata */ if (FAIL == VSgetclass(vs, class)) { HGOTO_FAIL(FAIL); } /* are these dimension vdatas? */ if (!strcmp(class, DIM_VALS) || !strcmp(class, DIM_VALS01)) { /* yes */ int32 val = handle->numrecs; if (FAIL == VSsetfields(vs, "Values")) { HGOTO_FAIL(FAIL); } if (FAIL == VSseek(vs, 0)) { HGOTO_FAIL(FAIL); } /* write out dimension vdatas? */ if (VSwrite(vs, (uint8 *)&val, 1, FULL_INTERLACE) != 1) { HGOTO_FAIL(FAIL); } } /* detach from vdata */ if (FAIL == VSdetach(vs)) { HGOTO_FAIL(FAIL); } } /* end if vdata */ } /* end while looking for vdata in vgroup */ } /* end if UNLIMITED dimension vgroup */ if (FAIL == Vdetach(dim)) { fprintf(stderr, "hdf_close: Vdetach failed for vgroup ref %d\n", id); HGOTO_FAIL(FAIL); } } /* end if vgroup */ } /* end if looking through toplevel vgroup hierarchy */ if (FAIL == Vdetach(vg)) { HGOTO_FAIL(FAIL); } } /* end if we need to flush out unlimited dimensions? */ done: return ret_value; } /* hdf_close */ /*******************************************************************************/ /* * How much space will the xdr'd NC description take. * */ int NC_xlen_cdf(NC *cdf) { int len = 8; if (cdf == NULL) return (0); len += NC_xlen_array(cdf->dims); len += NC_xlen_array(cdf->attrs); len += NC_xlen_array(cdf->vars); return (len); } #define RECPOS 4L /* seek index of numrecs value */ bool_t xdr_numrecs(XDR *xdrs, NC *handle) { if (handle->file_type == HDF_FILE) return TRUE; /* hmm...why? */ if ((handle->flags & NC_NOFILL) && xdrs->x_op == XDR_ENCODE && handle->begin_rec > 0) { /* * we need to write something just beyond the last * record so we can successfully read back the * entire last record. */ if (!h4_xdr_setpos(xdrs, handle->begin_rec + handle->numrecs * handle->recsize)) { nc_serror("Can't set position to EOF"); return FALSE; } if (!h4_xdr_u_int(xdrs, &(handle->numrecs))) return FALSE; } if (!h4_xdr_setpos(xdrs, RECPOS)) { nc_serror("Can't set position to RECPOS"); return FALSE; } return h4_xdr_u_int(xdrs, &(handle->numrecs)); } static bool_t xdr_2shorts(XDR *xdrs, short *sp) /* sp - at least 2 valid shorts */ { return xdr_shorts(xdrs, sp, 2); } bool_t xdr_NC_fill(XDR *xdrs, NC_var *vp) { char fillp[2 * sizeof(double)]; bool_t stat; bool_t (*xdr_NC_fnct)(); unsigned long alen = vp->len; NC_attr **attr = NULL; /* * set up fill value */ /* start with the default */ NC_arrayfill((Void *)fillp, (size_t)2 * sizeof(double), vp->type); /* * if there is a valid user defined value, use it instead */ attr = NC_findattr(&vp->attrs, _FillValue); if (attr != NULL) { if ((*attr)->data->type != vp->type || (*attr)->data->count != 1) NCadvise(NC_EBADTYPE, "var %s: _FillValue type mismatch", vp->name->values); else { int len = NC_typelen(vp->type); char *cp = fillp; while (cp < &fillp[sizeof(fillp) - 1]) { NC_copy_arrayvals(cp, (*attr)->data); cp += len; } } } switch (vp->type) { case NC_BYTE: case NC_CHAR: alen /= 4; xdr_NC_fnct = h4_xdr_bytes; break; case NC_SHORT: alen /= 4; xdr_NC_fnct = xdr_2shorts; break; case NC_LONG: alen /= 4; xdr_NC_fnct = h4_xdr_int; break; case NC_FLOAT: alen /= 4; xdr_NC_fnct = h4_xdr_float; break; case NC_DOUBLE: alen /= 8; xdr_NC_fnct = h4_xdr_double; break; default: NCadvise(NC_EBADTYPE, "bad type %d", vp->type); return (FALSE); } /* write out fill values */ for (stat = TRUE; stat && (alen > 0); alen--) { stat = (*xdr_NC_fnct)(xdrs, fillp); } if (!stat) { NCadvise(NC_EXDR, "xdr_NC_fill"); return (FALSE); } return (TRUE); } hdf4-hdf4.3.1/mfhdf/libsrc/dim.c000066400000000000000000000176461503061704500163240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" NC_dim * NC_new_dim(const char *name, long size) { NC_dim *ret; ret = malloc(sizeof(NC_dim)); if (ret == NULL) goto alloc_err; ret->name = NC_new_string((unsigned)strlen(name), name); if (ret->name == NULL) goto alloc_err; ret->size = size; ret->vgid = 0; /* no vgroup representing this dimension yet -BMR 2010/12/29 */ ret->count = 1; /* ret->dim00_compat = (size == NC_UNLIMITED)? 0 : 1; */ ret->dim00_compat = 0; return (ret); alloc_err: nc_serror("NC_new_dim"); return (NULL); } /* * Free dim * * NOTE: Changed return value to return 'int' * If successful returns SUCCEED else FAIL -GV 9/19/97 */ int NC_free_dim(NC_dim *dim) { int ret_value = SUCCEED; if (dim != NULL) { if (dim->count > 1) { dim->count -= 1; ret_value = SUCCEED; goto done; } if (NC_free_string(dim->name) == FAIL) { ret_value = FAIL; goto done; } free(dim); } done: return ret_value; } int ncdimdef(int cdfid, const char *name, long size) { NC *handle; NC_dim *dim[1]; NC_dim **dp; unsigned ii; size_t len; cdf_routine_name = "ncdimdef"; if (!NC_indefine(cdfid, TRUE)) return (-1); handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (size < 0) /* NC_UNLIMITED #define'd as 0 */ { NCadvise(NC_EINVAL, "Invalid size %d", size); return (-1); } if (handle->dims == NULL) /* first time */ { dim[0] = NC_new_dim(name, size); if (dim[0] == NULL) return (-1); handle->dims = NC_new_array(NC_DIMENSION, (unsigned)1, (Void *)dim); if (handle->dims == NULL) return (-1); } else if (handle->dims->count >= H4_MAX_NC_DIMS) { NCadvise(NC_EMAXDIMS, "maximum number of dimensions %d exceeded", handle->dims->count); return (-1); } else { /* check for name in use */ len = strlen(name); dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, len) == 0) { NCadvise(NC_ENAMEINUSE, "dimension \"%s\" in use with index %d", (*dp)->name->values, ii); return (-1); } if ((*dp)->size == NC_UNLIMITED && size == NC_UNLIMITED) { NCadvise(NC_EUNLIMIT, "NC_UNLIMITED size already in use: dimension \"%s\" (index %d)", (*dp)->name->values, ii); return (-1); } } dim[0] = NC_new_dim(name, size); if (dim[0] == NULL) return (-1); if (NC_incr_array(handle->dims, (Void *)dim) == NULL) return (-1); } return (handle->dims->count - 1); } int NC_dimid(NC *handle, char *name) { unsigned ii; size_t len; NC_dim **dp; len = strlen(name); dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, len) == 0) return (ii); } NCadvise(NC_EBADDIM, "dim \"%s\" not found", name); return (-1); } int ncdimid(int cdfid, const char *name) { NC *handle; NC_dim **dp; unsigned ii; size_t len; cdf_routine_name = "ncdimid"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (handle->dims == NULL) return (-1); len = strlen(name); dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, len) == 0) return (ii); } NCadvise(NC_EBADDIM, "dim \"%s\" not found", name); return (-1); } int ncdiminq(int cdfid, int dimid, char *name, long *sizep) { NC *handle; NC_dim **dp; cdf_routine_name = "ncdiminq"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (handle->dims == NULL) return (-1); if (dimid >= handle->dims->count) return (-1); dp = (NC_dim **)handle->dims->values; dp += dimid; if (name != NULL) { (void)memcpy(name, (*dp)->name->values, (size_t)(*dp)->name->len); name[(*dp)->name->len] = 0; } if (sizep != 0) { if ((*dp)->size == NC_UNLIMITED) *sizep = handle->numrecs; else *sizep = (*dp)->size; } return (dimid); } int ncdimrename(int cdfid, int dimid, const char *newname) { NC *handle; NC_dim **dp; NC_string *old, *new; unsigned ii; size_t len; cdf_routine_name = "ncdimrename"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) return (-1); if (handle->dims == NULL) return (-1); /* check for name in use */ len = strlen(newname); dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(newname, (*dp)->name->values, len) == 0) { NCadvise(NC_ENAMEINUSE, "dimension \"%s\" in use with index %d", (*dp)->name->values, ii); return (-1); } } dp = (NC_dim **)handle->dims->values; dp += dimid; old = (*dp)->name; if (NC_indefine(cdfid, FALSE)) { new = NC_new_string((unsigned)strlen(newname), newname); if (new == NULL) return (-1); (*dp)->name = new; NC_free_string(old); return (dimid); } /* else */ new = NC_re_string(old, (unsigned)strlen(newname), newname); if (new == NULL) return (-1); (*dp)->name = new; if (handle->flags & NC_HSYNC) { handle->xdrs->x_op = XDR_ENCODE; if (!xdr_cdf(handle->xdrs, &handle)) return (-1); handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else handle->flags |= NC_HDIRTY; return (dimid); } bool_t xdr_NC_dim(XDR *xdrs, NC_dim **dpp) { if (xdrs->x_op == XDR_FREE) { NC_free_dim((*dpp)); return TRUE; } if (xdrs->x_op == XDR_DECODE) { *dpp = malloc(sizeof(NC_dim)); if (*dpp == NULL) { nc_serror("xdr_NC_dim"); return FALSE; } } /* hmm...what does this do? */ if (xdrs->x_op == XDR_DECODE) (*dpp)->count = 0; if (!xdr_NC_string(xdrs, &((*dpp)->name))) return FALSE; return h4_xdr_int(xdrs, &((*dpp)->size)); } /* * How much space will the xdr'd dim take. */ int NC_xlen_dim(NC_dim **dpp) { int len = 4; if (*dpp != NULL) { len += NC_xlen_string((*dpp)->name); } return (len); } hdf4-hdf4.3.1/mfhdf/libsrc/error.c000066400000000000000000000064571503061704500167020ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Utility Functions to implement consistent error logging * mechanisms for netcdf */ #include #include #include "nc_priv.h" /* * Log SYSTEM errors * Use where you would want to call perror(3). * Calling sequence is * nc_serror(format, arg1, arg2,...) * with zero or more args of types compatible with the associated format * specifiers. For example: * nc_serror("shutting down"); * nc_serror("can't open %s", file_name); * nc_serror("process %d in state %s",pid,state); */ void nc_serror(const char *fmt, ...) { if (ncopts & NC_VERBOSE) { va_list args; static const char unknown[] = "Unknown Error"; int errnum = errno; /* save real errno in case we wipe it out */ const char *cp; va_start(args, fmt); fprintf(stderr, "%s: ", cdf_routine_name); vfprintf(stderr, fmt, args); va_end(args); switch (errnum) { case 0: ncerr = NC_NOERR; fputc('\n', stderr); break; default: ncerr = NC_SYSERR; fprintf(stderr, ": %s\n", (cp = strerror(errnum)) == NULL ? unknown : cp); break; } errno = 0; /* ??? */ } /* NC_VERBOSE */ if (ncopts & NC_FATAL) { exit(ncopts); } } /* * Like nc_serror above, but doesn't check for system error. * Use for logging error conditions which are not system errors. * Calling sequence is * NCadvise(ncerr, format, arg1, arg2,...) * with zero or more args of types compatible with the associated format * specifiers. For example: * NCadvise(NC_NOERR, "just advice"); * NCadvise(NC_EBADID, "%d is not a valid cdf id", cdfid); */ void NCadvise(int err, const char *fmt, ...) { va_list args; ncerr = err; if (ncopts & NC_VERBOSE) { fprintf(stderr, "%s: ", cdf_routine_name); va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fputc('\n', stderr); } if ((ncopts & NC_FATAL) && ncerr != NC_NOERR) { exit(ncopts); } } hdf4-hdf4.3.1/mfhdf/libsrc/error_priv.h000066400000000000000000000025431503061704500177370ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef MFH4_ERROR_H #define MFH4_ERROR_H #include "hdf.h" HDFLIBAPI void nc_serror(const char *fmt, ...); HDFLIBAPI void NCadvise(int err, const char *fmt, ...); #endif /* MFH4_ERROR_H */ hdf4-hdf4.3.1/mfhdf/libsrc/file.c000066400000000000000000000700011503061704500164520ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "nc_priv.h" #include "herr_priv.h" #if defined H4_HAVE_WIN32_API && !defined __MINGW32__ typedef int pid_t; #endif /* obtain the maximum number of open files allowed, at the same time, on the current system */ #if defined H4_HAVE_WIN32_API #define MAX_SYS_OPENFILES _getmaxstdio() #else #include struct rlimit rlim; #define MAX_SYS_OPENFILES (getrlimit((RLIMIT_NOFILE), (&rlim)), rlim.rlim_cur) #endif /* Maximum number of files can be opened at one time; subtract 3 from the system allowed to account for stdin, stdout, and stderr */ /* On AIX 6.1 system the limit is 2GB-1; it caused our library to choke. For now we will use a cap H4_MAX_AVAIL_OPENFILES on the maximum number of files can be open at one time. This limit should probably be in hlimits.h file in the future. EIP 2010-02-01*/ #define H4_MAX_AVAIL_OPENFILES 20000 #define MAX_AVAIL_OPENFILES \ (((MAX_SYS_OPENFILES - 3) > H4_MAX_AVAIL_OPENFILES) ? H4_MAX_AVAIL_OPENFILES : (MAX_SYS_OPENFILES - 3)) static int _curr_opened = 0; /* the number of files currently opened */ /* NOTE: _ncdf might have been the number of files currently opened, yet it is not decremented when ANY file is closed but only when the file that has the same index as _ncdf-1 is closed. Thus, it indicates the last index in _cdfs instead of the number of files currently opened. So, I added _curr_opened to keep track of the number of files currently opened. QAK suggested to use atom as in other interfaces and that would eliminate similar issues. - BMR - 11/03/07 */ static int _ncdf = 0; /* high water mark on open cdf's */ static NC **_cdfs; #define HNDLE(id) (((id) >= 0 && (id) < _ncdf) ? _cdfs[(id)] : NULL) #define STASH(id) (((id) >= 0 && (id) < _ncdf) ? HNDLE(_cdfs[(id)]->redefid) : NULL) #ifdef H4_HAVE_WIN32_API #define SEP '\\' /* this separates path components on Windows */ #endif #ifndef SEP #define SEP '/' /* default, unix */ #endif static intn max_NC_open = H4_MAX_NC_OPEN; /* current netCDF default */ /* * Resets _cdfs */ static void ncreset_cdflist(void) { if (_cdfs != NULL) { free(_cdfs); _cdfs = NULL; } } /* * Allocates _cdfs and returns the allocated size if succeeds; * otherwise return FAIL(-1). */ /* req_max - requested max to allocate */ intn NC_reset_maxopenfiles(intn req_max) { intn sys_limit = MAX_AVAIL_OPENFILES; intn alloc_size; NC **newlist; intn cdfi; int ret_value = SUCCEED; /* Verify arguments */ if (req_max < 0) { NCadvise(NC_EINVAL, "Invalid request: %d for maximum files", req_max); HGOTO_DONE(-1); } /* If requested max is 0, allocate _cdfs with the default, max_NC_open, if _cdfs is not yet allocated, otherwise, keep _cdfs as is and return the current max */ if (req_max == 0) { if (!_cdfs) { _cdfs = malloc(sizeof(NC *) * (max_NC_open)); /* If allocation fails, return failed status, otherwise, initialize each NC pointer to NULL, and return the default max */ if (_cdfs == NULL) { /* NC_EINVAL is Invalid Argument, but must decide if we just want to return 0 without error or not */ NCadvise(NC_EINVAL, "Unable to allocate a cdf list of %d elements", max_NC_open); HGOTO_DONE(-1); } else { for (cdfi = 0; cdfi < max_NC_open; cdfi++) _cdfs[cdfi] = NULL; HGOTO_DONE(max_NC_open); } } else /* return the current limit */ HGOTO_DONE(max_NC_open); } /* if req_max == 0 */ /* If the requested max is less than the current max but there are more than the requested max number of files opened, do not reset the current max, since this will cause information lost. */ if (req_max < max_NC_open && req_max <= _ncdf) HGOTO_DONE(max_NC_open); /* If the requested max exceeds system limit, only allocate up to system limit */ if (req_max > sys_limit) alloc_size = sys_limit; else alloc_size = req_max; /* Allocate a new list */ newlist = malloc(sizeof(NC *) * alloc_size); /* If allocation fails, return 0 for no allocation */ /* If allocation fails, return failed status, otherwise, initialize each NC pointer to NULL, and return the default max */ if (newlist == NULL) { /* NC_EINVAL is Invalid Argument, but must decide if we just want to return 0 without error or not */ NCadvise(NC_EINVAL, "Unable to allocate a cdf list of %d elements", alloc_size); HGOTO_DONE(-1); } for (cdfi = 0; cdfi < alloc_size; cdfi++) newlist[cdfi] = NULL; /* If _cdfs is already allocated, transfer pointers over to the new list and deallocate the old list of pointers */ if (_cdfs != NULL) { for (cdfi = 0; cdfi < _ncdf; cdfi++) newlist[cdfi] = _cdfs[cdfi]; free(_cdfs); } /* Set _cdfs to the new list */ _cdfs = newlist; newlist = NULL; /* Reset current max files opened allowed in HDF to the new max */ max_NC_open = alloc_size; HGOTO_DONE(max_NC_open); done: return ret_value; } /* NC_reset_maxopenfiles */ /* * Returns the current # of open files allowed */ intn NC_get_maxopenfiles(void) { return max_NC_open; } /* NC_get_maxopenfiles */ /* * Returns the maximum number of open files the system allows. */ intn NC_get_systemlimit(void) { return MAX_AVAIL_OPENFILES; } /* NC_get_systemlimit */ /* * Returns the number of files currently being opened. */ int NC_get_numopencdfs(void) { return _curr_opened; } /* NC_get_numopencdfs */ /* * Check validity of cdf handle, return pointer to NC struct or * NULL on error. */ NC * NC_check_id(int cdfid) { NC *handle; handle = (cdfid >= 0 && cdfid < _ncdf) ? _cdfs[cdfid] : NULL; if (handle == NULL) { NCadvise(NC_EBADID, "%d is not a valid cdfid", cdfid); return NULL; } return handle; } /* * Check to see if in define mode. * If 'iserr' arg is true, advise. */ bool_t NC_indefine(int cdfid, bool_t iserr) /* Should be a Macro ? */ { bool_t ret; ret = (cdfid >= 0 && cdfid < _ncdf) ? (bool_t)(_cdfs[cdfid]->flags & NC_INDEF) : FALSE; if (!ret && iserr) { if (cdfid < 0 || cdfid >= _ncdf) NCadvise(NC_EBADID, "%d is not a valid cdfid", cdfid); else NCadvise(NC_ENOTINDEFINE, "%s Not in define mode", _cdfs[cdfid]->path); } return ret; } /* * Common code for ncopen and nccreate. */ /* path - file name */ static int NC_open(const char *path, int mode) { NC *handle = NULL; int cdfid = -1; intn cdfs_size = -1; /* Allocate _cdfs, if it is already allocated, nothing will be done */ if (_cdfs == NULL) { if (FAIL == (cdfs_size = NC_reset_maxopenfiles(0))) { NCadvise(NC_ENFILE, "Could not reset max open files limit"); return -1; } } /* find first available id */ for (cdfid = 0; cdfid < _ncdf; cdfid++) if (_cdfs[cdfid] == NULL) break; /* if application attempts to open more files than the current max allows, increase the current max to the system limit, if it's not at the system limit yet */ if (cdfid == _ncdf && _ncdf >= max_NC_open) { /* if the current max already reaches the system limit, fail */ if (max_NC_open == MAX_AVAIL_OPENFILES) { NCadvise(NC_ENFILE, "maximum number of open cdfs allowed already reaches system limit %d", MAX_AVAIL_OPENFILES); return -1; } /* otherwise, increase the current max to the system limit */ if (FAIL == NC_reset_maxopenfiles(MAX_AVAIL_OPENFILES)) { NCadvise(NC_ENFILE, "Could not reset max open files limit"); return -1; } } handle = NC_new_cdf(path, mode); if (handle == NULL) { /* if the failure was due to "too many open files," simply return */ if (errno == EMFILE) { nc_serror("maximum number of open files allowed has been reached\"%s\"", path); return -1; } if ((mode & 0x0f) == NC_CLOBBER) { /* only attempt to remove the file if it's not currently in use - bugzilla #376 */ if (!HPisfile_in_use(path)) if (remove(path) != 0) nc_serror("couldn't remove filename \"%s\"", path); } return -1; } (void)strncpy(handle->path, path, FILENAME_MAX); _cdfs[cdfid] = handle; if (cdfid == _ncdf) _ncdf++; _curr_opened++; return cdfid; } /* NC_open */ int nccreate(const char *path, int cmode) /* path - file name */ { cdf_routine_name = "nccreate"; if (cmode & NC_CREAT) { return NC_open(path, cmode); } NCadvise(NC_EINVAL, "Bad Flag"); return -1; } int ncopen(const char *path, int mode) /* path - file name */ { cdf_routine_name = "ncopen"; if (mode & NC_CREAT) { NCadvise(NC_EINVAL, "Bad Flag"); return -1; } return NC_open(path, mode); } int ncsync(int cdfid) { NC *handle; cdf_routine_name = "ncsync"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; if (handle->flags & NC_INDEF) { NCadvise(NC_EINDEFINE, "Unfinished definition"); return -1; } if (handle->flags & NC_RDWR) { handle->xdrs->x_op = XDR_ENCODE; if (handle->flags & NC_HDIRTY) { if (!xdr_cdf(handle->xdrs, &handle)) return -1; handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) return -1; if (handle->file_type != HDF_FILE) handle->flags &= ~(NC_NDIRTY); } } else /* read only */ { /* assert(handle->xdrs->x_op == XDR_DECODE) ; */ /* free the stuff in handle that xdr_cdf allocates */ handle->xdrs->x_op = XDR_FREE; (void)xdr_cdf(handle->xdrs, &handle); handle->xdrs->x_op = XDR_DECODE; if (!xdr_cdf(handle->xdrs, &handle)) { nc_serror("xdr_cdf"); NC_free_cdf(handle); /* ?? what should we do now? */ return -1; } if (NC_computeshapes(handle) == -1) return -1; } (void)NCxdrfile_sync(handle->xdrs); return 0; } /* * In data mode, same as ncclose ; * In define mode, restore previous definition ; * In create, remove the file ; */ int ncabort(int cdfid) { NC *handle; char path[FILENAME_MAX + 1]; unsigned flags; intn file_type; cdf_routine_name = "ncabort"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; flags = handle->flags; /* need to save past free_cdf */ /* NC_CREAT implies NC_INDEF, in both cases need to remove handle->path */ if (flags & (NC_INDEF | NC_CREAT)) { (void)strncpy(path, handle->path, FILENAME_MAX); /* stash path */ if (!(flags & NC_CREAT)) /* redef */ { NC_free_cdf(STASH(cdfid)); _cdfs[handle->redefid] = NULL; if (handle->redefid == _ncdf - 1) _ncdf--; handle->redefid = -1; } } else if (handle->flags & NC_RDWR) { handle->xdrs->x_op = XDR_ENCODE; if (handle->flags & NC_HDIRTY) { if (!xdr_cdf(handle->xdrs, &handle)) return -1; } else if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) return -1; } } file_type = handle->file_type; NC_free_cdf(handle); /* calls fclose */ switch (file_type) { case netCDF_FILE: if (flags & (NC_INDEF | NC_CREAT)) { if (remove(path) != 0) nc_serror("couldn't remove filename \"%s\"", path); } break; case HDF_FILE: if (flags & NC_CREAT) { if (remove(path) != 0) nc_serror("couldn't remove filename \"%s\"", path); } break; } _cdfs[cdfid] = NULL; /* reset pointer */ /* if current file is at the top of the list, adjust the water mark */ if (cdfid == _ncdf - 1) _ncdf--; _curr_opened--; /* one less file currently being opened */ /* if the _cdf list is empty, deallocate and reset it to NULL */ if (_curr_opened == 0) ncreset_cdflist(); return 0; } /* ncabort */ /* * Deprecated function ; */ int ncnobuf(int cdfid) { NC *handle; cdf_routine_name = "ncnobuf"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; /* NOOP */ return 0; } /* * Given the path to a file "proto", * we replace the filename component with * a name like one would get from tmpnam(3S). * (Many implementations of tmpnam insist on giving us * a directory like /usr/tmp as well. Since we are making a copy which we * will eventually rename() back to proto, we want the return of NCtempname * and proto to dwell on the same filesystem.) */ static char * NCtempname(const char *proto) { #define TN_NACCES 1 #define TN_NDIGITS 4 unsigned int pid; /* OS/2 DOS (MicroSoft Lib) allows "negative" int pids */ static char seed[] = {'a', 'a', 'a', '\0'}; #define TN_NSEED (sizeof(seed) - 1) static char tnbuf[FILENAME_MAX + 1]; char *begin, *cp, *sp; /* assert(TN_NSEED > 0) ; */ strcpy(tnbuf, proto); #ifdef SEP if ((begin = strrchr(tnbuf, SEP)) == NULL) begin = tnbuf; else begin++; if (&tnbuf[FILENAME_MAX] - begin <= TN_NSEED + TN_NACCES + TN_NDIGITS) { /* not big enough */ tnbuf[0] = '\0'; return tnbuf; } #else begin = tnbuf; #endif /* SEP */ *begin = '\0'; (void)strcat(begin, seed); cp = begin + TN_NSEED + TN_NACCES + TN_NDIGITS; *cp = '\0'; pid = getpid(); while (--cp >= begin + TN_NSEED + TN_NACCES) { *cp = (pid % 10) + '0'; pid /= 10; } /* update seed for next call */ sp = seed; while (*sp == 'z') *sp++ = 'a'; if (*sp != '\0') ++*sp; for (*cp = 'a'; access(tnbuf, 0) == 0;) { if (++*cp > 'z') { /* ran out of tries */ tnbuf[0] = '\0'; return tnbuf; } } return tnbuf; } int ncredef(int cdfid) { NC *handle; NC *new; int id; char *scratchfile; cdf_routine_name = "ncredef"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; if (handle->flags & NC_INDEF) /* in define mode already */ { NC *stash = STASH(cdfid); if (stash) NCadvise(NC_EINDEFINE, "%s: in define mode already", stash->path); return -1; } if (!(handle->flags & NC_RDWR)) { NCadvise(NC_EPERM, "%s: NC_NOWRITE", handle->path); return -1; } if (handle->file_type == HDF_FILE) { handle->flags |= NC_INDEF; handle->redefid = TRUE; return 0; } /* find first available id */ for (id = 0; id < _ncdf; id++) if (_cdfs[id] == NULL) break; if (id == _ncdf && _ncdf >= max_NC_open) /* will need a new one */ { NCadvise(NC_ENFILE, "maximum number of open cdfs %d exceeded", _ncdf); return -1; } if (ncopts & NC_NOFILL) { /* fill last record */ handle->xdrs->x_op = XDR_ENCODE; if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) return -1; handle->flags &= ~(NC_NDIRTY); } } scratchfile = NCtempname(handle->path); new = NC_dup_cdf(scratchfile, NC_NOCLOBBER, handle); if (new == NULL) { return -1; } handle->flags |= NC_INDEF; (void)strncpy(new->path, scratchfile, FILENAME_MAX); /* put the old handle in the new id */ _cdfs[id] = handle; if (id == _ncdf) _ncdf++; _curr_opened++; /* put the new handle in old id */ _cdfs[cdfid] = new; new->redefid = id; return 0; } /* * Compute offsets and put into the header */ static void NC_begins(NC *handle) { unsigned ii; unsigned long index = 0; NC_var **vpp; NC_var *last = NULL; if (handle->vars == NULL) return; index = NC_xlen_cdf(handle); /* loop thru vars, first pass is for the 'non-record' vars */ vpp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, vpp++) { if (IS_RECVAR(*vpp)) { continue; /* skip record variables on this pass */ } (*vpp)->begin = index; index += (*vpp)->len; } handle->begin_rec = index; handle->recsize = 0; /* loop thru vars, second pass is for the 'non-record' vars */ vpp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, vpp++) { if (!IS_RECVAR(*vpp)) { continue; /* skip non-record variables on this pass */ } (*vpp)->begin = index; index += (*vpp)->len; handle->recsize += (*vpp)->len; last = (*vpp); } /* * for special case of exactly one record variable, pack values */ if (last != NULL && handle->recsize == last->len) handle->recsize = *last->dsizes; handle->numrecs = 0; } /* * Copy nbytes bytes from source to target. * Streams target and source should be positioned before the call. * opaque I/O, no XDR conversion performed (or needed). */ bool_t NC_dcpy(XDR *target, XDR *source, long nbytes) { /* you may wish to tune this: big on a cray, small on a PC? */ #define NC_DCP_BUFSIZE 8192 char buf[NC_DCP_BUFSIZE]; while (nbytes > sizeof(buf)) { if (!h4_xdr_getbytes(source, buf, sizeof(buf))) goto err; if (!h4_xdr_putbytes(target, buf, sizeof(buf))) goto err; nbytes -= sizeof(buf); } /* we know nbytes <= sizeof(buf) at this point */ if (!h4_xdr_getbytes(source, buf, nbytes)) goto err; if (!h4_xdr_putbytes(target, buf, nbytes)) goto err; return TRUE; err: NCadvise(NC_EXDR, "NC_dcpy"); return FALSE; } /* * XDR the data of varid in old, target is the new xdr strm */ static bool_t NC_vcpy(XDR *target, NC *old, int varid) { NC_var **vpp; vpp = (NC_var **)old->vars->values; vpp += varid; if (!h4_xdr_setpos(old->xdrs, (*vpp)->begin)) { NCadvise(NC_EXDR, "NC_vcpy: h4_xdr_setpos"); return FALSE; } return NC_dcpy(target, old->xdrs, (*vpp)->len); } /* * XDR the data of (varid, recnum) in old, target is the new xdr strm */ static bool_t NC_reccpy(XDR *target, NC *old, int varid, int recnum) { NC_var **vpp; vpp = (NC_var **)old->vars->values; vpp += varid; if (!h4_xdr_setpos(old->xdrs, (*vpp)->begin + old->recsize * recnum)) { NCadvise(NC_EXDR, "NC_reccpy: h4_xdr_setpos"); return FALSE; } return NC_dcpy(target, old->xdrs, (*vpp)->len); } /* * Common code for ncendef, ncclose(endef) */ static int NC_endef(int cdfid, NC *handle) { XDR *xdrs; unsigned ii; unsigned jj = 0; NC_var **vpp; NC *stash = STASH(cdfid); /* faster rvalue */ if (handle->file_type != HDF_FILE) NC_begins(handle); xdrs = handle->xdrs; xdrs->x_op = XDR_ENCODE; if (!xdr_cdf(xdrs, &handle)) { nc_serror("xdr_cdf"); return -1; } /* Get rid of the temporary buffer allocated for I/O */ SDPfreebuf(); if (handle->file_type == HDF_FILE) { handle->flags &= ~(NC_CREAT | NC_INDEF | NC_NDIRTY | NC_HDIRTY); return 0; } if (handle->vars == NULL) goto done; /* loop thru vars, first pass is for the 'non-record' vars */ vpp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, vpp++) { if (IS_RECVAR(*vpp)) { continue; /* skip record variables on this pass */ } if (!(handle->flags & NC_CREAT) && stash->vars != NULL && ii < stash->vars->count) { /* copy data */ if (!NC_vcpy(xdrs, stash, ii)) return -1; continue; } /* else */ if (!(handle->flags & NC_NOFILL)) if (!xdr_NC_fill(xdrs, *vpp)) return -1; } if (!(handle->flags & NC_CREAT)) /* after redefinition */ { for (jj = 0; jj < stash->numrecs; jj++) { vpp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, vpp++) { if (!IS_RECVAR(*vpp)) { continue; /* skip non-record variables on this pass */ } if (stash->vars != NULL && ii < stash->vars->count) { /* copy data */ if (!NC_reccpy(xdrs, stash, ii, jj)) return -1; continue; } /* else */ if (!(handle->flags & NC_NOFILL)) if (!xdr_NC_fill(xdrs, *vpp)) return -1; } } handle->numrecs = stash->numrecs; if (!xdr_numrecs(handle->xdrs, handle)) return -1; } if (!(handle->flags & NC_CREAT)) /* redefine */ { char realpath[FILENAME_MAX + 1]; strcpy(realpath, stash->path); /* close stash */ /* NC_free_cdf(stash) ; */ #ifdef H4_HAVE_WIN32_API h4_xdr_destroy(handle->xdrs); /* close handle */ if (remove(realpath) != 0) nc_serror("couldn't remove filename \"%s\"", realpath); #endif if (rename(handle->path, realpath) != 0) { nc_serror("rename %s -> %s failed", handle->path, realpath); /* try to restore state prior to redef */ _cdfs[cdfid] = stash; _cdfs[handle->redefid] = NULL; if (handle->redefid == _ncdf - 1) _ncdf--; _curr_opened--; /* one less file currently opened */ NC_free_cdf(handle); /* if the _cdf list is empty, deallocate and reset it to NULL */ if (_curr_opened == 0) ncreset_cdflist(); return -1; } (void)strncpy(handle->path, realpath, FILENAME_MAX); #ifdef H4_HAVE_WIN32_API if (NCxdrfile_create(handle->xdrs, handle->path, NC_WRITE) < 0) return -1; #endif NC_free_cdf(stash); _cdfs[handle->redefid] = NULL; if (handle->redefid == _ncdf - 1) _ncdf--; _curr_opened--; /* one less file currently opened */ handle->redefid = -1; /* if the _cdf list is empty, deallocate and reset it to NULL */ if (_curr_opened == 0) ncreset_cdflist(); } done: handle->flags &= ~(NC_CREAT | NC_INDEF | NC_NDIRTY | NC_HDIRTY); return 0; } int ncendef(int cdfid) { NC *handle; cdf_routine_name = "ncendef"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; if (!NC_indefine(cdfid, TRUE)) return -1; return NC_endef(cdfid, handle); } /* * This routine is called by SDend()? -GV */ int ncclose(int cdfid) { NC *handle; cdf_routine_name = "ncclose"; handle = NC_check_id(cdfid); if (handle == NULL) return -1; if (handle->flags & NC_INDEF) { if (NC_endef(cdfid, handle) == -1) { return ncabort(cdfid); } } else if (handle->flags & NC_RDWR) { handle->xdrs->x_op = XDR_ENCODE; if (handle->flags & NC_HDIRTY) { if (!xdr_cdf(handle->xdrs, &handle)) return -1; } else if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) return -1; } } if (handle->file_type == HDF_FILE) hdf_close(handle); NC_free_cdf(handle); /* calls fclose */ _cdfs[cdfid] = NULL; /* reset pointer */ /* update water mark */ if (cdfid == _ncdf - 1) _ncdf--; /* update number of files currently opened */ _curr_opened--; /* if the _cdf list is empty, deallocate and reset it to NULL */ if (_curr_opened == 0) ncreset_cdflist(); return 0; } int ncsetfill(int id, int fillmode) { NC *handle; int ret = 0; cdf_routine_name = "ncsetfill"; handle = NC_check_id(id); if (handle == NULL) return -1; if (!(handle->flags & NC_RDWR)) { /* file isn't writable */ NCadvise(NC_EPERM, "%s is not writable", handle->path); return -1; } ret = (handle->flags & NC_NOFILL) ? NC_NOFILL : NC_FILL; if (fillmode == NC_NOFILL) handle->flags |= NC_NOFILL; else if (fillmode == NC_FILL) { if (handle->flags & NC_NOFILL) { /* * We are changing back to fill mode * so do a sync */ /* save the original x_op */ enum xdr_op xdr_op = handle->xdrs->x_op; if (handle->flags & NC_RDWR) /* make sure we can write */ handle->xdrs->x_op = XDR_ENCODE; /* to the file */ if (handle->flags & NC_HDIRTY) { if (!xdr_cdf(handle->xdrs, &handle)) return -1; handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) return -1; if (handle->file_type != HDF_FILE) handle->flags &= ~(NC_NDIRTY); } handle->flags &= ~NC_NOFILL; /* re-store the x_op */ handle->xdrs->x_op = xdr_op; } } else { NCadvise(NC_EINVAL, "Bad fillmode"); return -1; } return ret; } int NCxdrfile_sync(XDR *xdrs) { return h4_xdr_sync(xdrs); } int NCxdrfile_create(XDR *xdrs, const char *path, int ncmode) { int fmode; int fd; enum xdr_op op; switch (ncmode & 0x0f) { case NC_NOCLOBBER: fmode = O_RDWR | O_CREAT | O_EXCL; break; case NC_CLOBBER: fmode = O_RDWR | O_CREAT | O_TRUNC; break; case NC_WRITE: fmode = O_RDWR; break; case NC_NOWRITE: fmode = O_RDONLY; break; default: NCadvise(NC_EINVAL, "Bad flag %0x", ncmode & 0x0f); return -1; } #ifdef H4_HAVE_WIN32_API /* Set default mode to binary to suppress the expansion of 0x0f into CRLF */ _fmode |= O_BINARY; #endif fd = open(path, fmode, 0666); if (fd == -1) { nc_serror("filename \"%s\"", path); return -1; } if (ncmode & NC_CREAT) { op = XDR_ENCODE; } else { op = XDR_DECODE; } if (h4_xdr_create(xdrs, fd, fmode, op) < 0) return -1; else return fd; } hdf4-hdf4.3.1/mfhdf/libsrc/globdef.c000066400000000000000000000034231503061704500171410ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * This file initializes all global variables. It's a separate file in order * to allow the creation of SunOS sharable-libraries. */ #include "nc_priv.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif int ncerr = NC_NOERR; /* * russ's last minute whistles * The error(3) subroutines emit no messages unless NC_VERBOSE bit is on. * The error(3) subroutines call exit() when NC_FATAL bit is on. */ int ncopts = (NC_FATAL | NC_VERBOSE); /* * Set to the the name of the current interface routine by the * interface routine. */ const char *cdf_routine_name = "netcdf"; hdf4-hdf4.3.1/mfhdf/libsrc/h4_xdr.c000066400000000000000000000410271503061704500167310ustar00rootroot00000000000000/* * Copyright (c) 2009, Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of Sun Microsystems, Inc. nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * xdr.c, Generic XDR routines implementation. * * Copyright (C) 1986, Sun Microsystems, Inc. * * These are the "generic" xdr routines used to serialize and de-serialize * most common data items. See xdr.h for more info on the interface to * xdr. */ #include "nc_priv.h" /* Which header files include htonl() ? */ #ifdef H4_HAVE_WIN32_API /* Use winsock on Win32 (including MinGW) * * This is included in hdf_priv.h to ensure winsock2.h is included before * windows.h. */ #else /* And normal network headers everywhere else */ #ifdef H4_HAVE_ARPA_INET_H #include #endif #ifdef H4_HAVE_NETINET_IN_H #include /* for htonl() */ #endif #endif #include "h4_xdr_priv.h" /* * This is the number of bytes per unit of external data. */ #define BYTES_PER_XDR_UNIT (4) /* * for unit alignment */ static const char xdr_zero[BYTES_PER_XDR_UNIT] = {0, 0, 0, 0}; /* Forward declarations */ static bool_t h4_xdr_get32(XDR *xdrs, uint32_t *up); static bool_t h4_xdr_put32(XDR *xdrs, const uint32_t *up); /******************/ /* XDR Type Calls */ /******************/ /* These per-type API calls encode/decode/free depending on the op field * in the XDR struct. They use the lower-level XDR calls found after the * I/O buffering code, below. */ /* * XDR integers */ bool_t h4_xdr_int(XDR *xdrs, int *ip) { switch (xdrs->x_op) { case XDR_ENCODE: return h4_xdr_put32(xdrs, (uint32_t *)ip); case XDR_DECODE: return h4_xdr_get32(xdrs, (uint32_t *)ip); case XDR_FREE: return TRUE; } /* NOTREACHED */ return FALSE; } /* * XDR unsigned integers */ bool_t h4_xdr_u_int(XDR *xdrs, unsigned *up) { switch (xdrs->x_op) { case XDR_ENCODE: return h4_xdr_put32(xdrs, up); case XDR_DECODE: return h4_xdr_get32(xdrs, up); case XDR_FREE: return TRUE; } /* NOTREACHED */ return FALSE; } /* * XDR opaque data * * Allows the specification of a fixed size sequence of opaque bytes. * cp points to the opaque object and cnt gives the byte length. */ bool_t h4_xdr_opaque(XDR *xdrs, char *cp, unsigned cnt) { unsigned rndup; static int crud[BYTES_PER_XDR_UNIT]; /* * if no data we are done */ if (cnt == 0) return TRUE; /* * round byte count to full xdr units */ rndup = cnt % BYTES_PER_XDR_UNIT; if (rndup > 0) rndup = BYTES_PER_XDR_UNIT - rndup; if (xdrs->x_op == XDR_DECODE) { if (!h4_xdr_getbytes(xdrs, cp, cnt)) return FALSE; if (rndup == 0) return TRUE; return h4_xdr_getbytes(xdrs, (char *)crud, rndup); } if (xdrs->x_op == XDR_ENCODE) { if (!h4_xdr_putbytes(xdrs, cp, cnt)) return FALSE; if (rndup == 0) return TRUE; return h4_xdr_putbytes(xdrs, xdr_zero, rndup); } if (xdrs->x_op == XDR_FREE) return TRUE; return FALSE; } /* * XDR counted bytes * * This is a special data structure that starts with the size, followed * by the raw bytes (as an opaque XDR type). * * For raw, uninterpreted byte I/O, see the xdr_put/getbytes() calls. * * *cpp is a pointer to the bytes, *sizep is the count. * If *cpp is NULL maxsize bytes are allocated */ bool_t h4_xdr_bytes(XDR *xdrs, char **cpp, unsigned *sizep, unsigned maxsize) { char *sp = *cpp; /* sp is the actual string pointer */ unsigned nodesize; bool_t ret; bool_t allocated = FALSE; /* * first deal with the length since xdr bytes are counted */ if (!h4_xdr_u_int(xdrs, sizep)) return FALSE; nodesize = *sizep; if ((nodesize > maxsize) && (xdrs->x_op != XDR_FREE)) return FALSE; /* * now deal with the actual bytes */ switch (xdrs->x_op) { case XDR_DECODE: if (nodesize == 0) return TRUE; if (sp == NULL) { *cpp = sp = calloc(1, nodesize); allocated = TRUE; } if (sp == NULL) { fprintf(stderr, "h4_xdr_bytes: out of memory\n"); return FALSE; } /* FALLTHROUGH */ case XDR_ENCODE: ret = h4_xdr_opaque(xdrs, sp, nodesize); if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { if (allocated == TRUE) { free(sp); *cpp = NULL; } } return ret; case XDR_FREE: if (sp != NULL) { free(sp); *cpp = NULL; } return TRUE; } /* NOTREACHED */ return FALSE; } /* * XDR 4-byte floats */ bool_t h4_xdr_float(XDR *xdrs, float *fp) { switch (xdrs->x_op) { case XDR_ENCODE: return h4_xdr_int(xdrs, (int *)fp); case XDR_DECODE: return h4_xdr_int(xdrs, (int *)fp); case XDR_FREE: return TRUE; } return FALSE; } /* * XDR 8-byte doubles * * Performed in two 32-bit operations because XDR does not have a 64-bit * I/O operation. */ bool_t h4_xdr_double(XDR *xdrs, double *dp) { int *ip; bool_t rv; if (!dp) return FALSE; switch (xdrs->x_op) { case XDR_ENCODE: ip = (int *)(void *)dp; #ifdef H4_WORDS_BIGENDIAN rv = h4_xdr_int(xdrs, ip); if (!rv) return rv; rv = h4_xdr_int(xdrs, ip + 1); #else rv = h4_xdr_int(xdrs, ip + 1); if (!rv) return rv; rv = h4_xdr_int(xdrs, ip); #endif return rv; break; case XDR_DECODE: ip = (int *)(void *)dp; #ifdef H4_WORDS_BIGENDIAN rv = h4_xdr_int(xdrs, ip); if (!rv) return rv; rv = h4_xdr_int(xdrs, ip + 1); #else rv = h4_xdr_int(xdrs, ip + 1); if (!rv) return rv; rv = h4_xdr_int(xdrs, ip); #endif return rv; break; case XDR_FREE: return TRUE; } return FALSE; } /****************************/ /* I/O Buffer Functionality */ /****************************/ /* As an optimization, the XDR I/O layer uses a single I/O buffer to * speed up nearby reads and writes ("bio" == Buffered I/O). * * TODO: This is not a very big cache! Bumping it might enhance I/O * performance. */ /* Size of the I/O buffer in bytes */ #define BIOBUFSIZ 8192 /* # of valid bytes in the buffer */ #define CNT(p) ((p)->ptr - (p)->base) /* # of unread bytes in buffer */ #define REM(p) ((p)->cnt - CNT(p)) /* Available space for write in buffer */ #define BREM(p) (BIOBUFSIZ - CNT(p)) /* POSIX and I/O buffer info * * Stored in the XDR struct's private data * * NOTE: off_t is 32-bits on Windows, but that shouldn't be a problem since * HDF4 files are limited to 4 GB. */ typedef struct biobuf { int fd; /* POSIX file descriptor */ int mode; /* File access mode, O_RDONLY, etc */ int isdirty; /* Dirty buffer flag */ off_t page; /* Location in the file */ int nread; /* Number of bytes successfully read */ int nwrote; /* Number of bytes last written */ int cnt; /* Number of valid bytes in buffer */ uint8_t *ptr; /* Next byte (pointer into base) */ uint8_t base[BIOBUFSIZ]; /* Data buffer */ } biobuf; /* * Initialize the POSIX/buffer XDR state */ static biobuf * bio_get_new(int fd, int fmode) { biobuf *biop = NULL; if (NULL == (biop = (biobuf *)calloc(1, sizeof(biobuf)))) return NULL; biop->fd = fd; biop->mode = fmode; biop->ptr = biop->base; return biop; } /* * Read a page from the file into the buffer */ static int bio_read_page(biobuf *biop) { /* Clear out the buffer */ memset(biop->base, 0, BIOBUFSIZ); if (biop->mode & O_WRONLY) { /* If we're only writing, the buffer is empty */ biop->cnt = 0; } else { if (biop->nwrote != BIOBUFSIZ) { /* Last write wasn't a full block, adjust position ahead */ if (lseek(biop->fd, biop->page * BIOBUFSIZ, SEEK_SET) == ((off_t)-1)) return -1; } /* Read from storage into the buffer */ biop->nread = biop->cnt = read(biop->fd, (void *)biop->base, BIOBUFSIZ); } biop->ptr = biop->base; return biop->cnt; } /* * Write a page from the buffer to the file */ static int bio_write_page(biobuf *biop) { if (!((biop->mode & O_WRONLY) || (biop->mode & O_RDWR)) || biop->cnt == 0) { biop->nwrote = 0; } else { if (biop->nread != 0) { /* If we read something, we have to adjust position back */ if (lseek(biop->fd, biop->page * BIOBUFSIZ, SEEK_SET) == ((off_t)-1)) return -1; } biop->nwrote = write(biop->fd, (void *)biop->base, biop->cnt); } biop->isdirty = 0; return biop->nwrote; } /* * Get the next page from the file * * Returns the number of valid bytes in the buffer */ static int bio_get_next_page(biobuf *biop) { /* Flush if dirty */ if (biop->isdirty) { if (bio_write_page(biop) < 0) return -1; } biop->page++; /* Read in the next page */ if (bio_read_page(biop) < 0) return -1; return biop->cnt; } /* * Read bytes from the file through the buffer */ static int bio_read(biobuf *biop, unsigned char *ptr, int nbytes) { int ngot = 0; size_t rem; if (nbytes == 0) return 0; while (nbytes > (rem = REM(biop))) { if (rem > 0) { (void)memcpy(ptr, biop->ptr, rem); ptr += rem; nbytes -= rem; ngot += rem; } if (bio_get_next_page(biop) <= 0) return ngot; } /* We know nbytes <= REM at this point */ (void)memcpy(ptr, biop->ptr, (size_t)nbytes); biop->ptr += nbytes; ngot += nbytes; return ngot; } /* * Write bytes to the file through the buffer */ static int bio_write(biobuf *biop, unsigned char *ptr, int nbytes) { size_t rem; int nwrote = 0; int cnt; if (!((biop->mode & O_WRONLY) || (biop->mode & O_RDWR))) return -1; while (nbytes > (rem = BREM(biop))) { if (rem > 0) { (void)memcpy(biop->ptr, ptr, rem); biop->isdirty = !0; biop->cnt = BIOBUFSIZ; ptr += rem; nbytes -= rem; nwrote += rem; } if (bio_get_next_page(biop) < 0) return nwrote; } /* We know nbytes <= BREM at this point */ (void)memcpy(biop->ptr, ptr, (size_t)nbytes); biop->isdirty = !0; biop->ptr += nbytes; if ((cnt = CNT(biop)) > biop->cnt) biop->cnt = cnt; nwrote += nbytes; return nwrote; } /***********************/ /* Low-Level XDR Calls */ /***********************/ /* * Read/write the number of bytes in a C long to the XDR file. 'uint32_t' is * being used in the sense of '4 bytes' and not a long integer value. */ static bool_t h4_xdr_get32(XDR *xdrs, uint32_t *up) { uint8_t *p = (uint8_t *)up; if (bio_read((biobuf *)xdrs->x_private, p, 4) < 4) return FALSE; #ifndef H4_WORDS_BIGENDIAN /* Reminder that ntohl returns a uint32_t on modern systems */ *up = ntohl(*up); #endif return TRUE; } static bool_t h4_xdr_put32(XDR *xdrs, const uint32_t *up) { uint8_t *p = (uint8_t *)up; #ifndef H4_WORDS_BIGENDIAN /* Reminder that htonl returns a uint32_t on modern systems */ uint32_t mycopy = htonl(*up); p = (uint8_t *)&mycopy; #endif if (bio_write((biobuf *)xdrs->x_private, p, 4) < 4) return FALSE; return TRUE; } /* * Read/Write a bunch of bytes to/from an XDR file * * NOTE: These deal with raw bytes, not "counted bytes", like h4_xdr_bytes() does! */ bool_t h4_xdr_getbytes(XDR *xdrs, char *addr, unsigned len) { if ((len != 0) && (bio_read((biobuf *)xdrs->x_private, (unsigned char *)addr, (int)len) != len)) return FALSE; return TRUE; } bool_t h4_xdr_putbytes(XDR *xdrs, const char *addr, unsigned len) { if ((len != 0) && (bio_write((biobuf *)xdrs->x_private, (unsigned char *)addr, (int)len) != len)) return FALSE; return TRUE; } /* * Get/set the position in an XDR file. Goes through the I/O buffer. */ unsigned h4_xdr_getpos(XDR *xdrs) { biobuf *biop = (biobuf *)xdrs->x_private; return BIOBUFSIZ * biop->page + CNT(biop); } bool_t h4_xdr_setpos(XDR *xdrs, unsigned pos) { biobuf *biop = (biobuf *)xdrs->x_private; if (biop != NULL) { off_t page; int index; int nread; page = pos / BIOBUFSIZ; index = pos % BIOBUFSIZ; if (page != biop->page) { if (biop->isdirty) { if (bio_write_page(biop) < 0) return FALSE; } if (page != biop->page + 1) biop->nwrote = 0; /* force seek in bio_read_page */ biop->page = page; nread = bio_read_page(biop); if (nread < 0 || ((biop->mode & O_RDONLY) && nread < index)) return FALSE; } biop->ptr = biop->base + index; return TRUE; } else return FALSE; } /************************/ /* XDR File State Calls */ /************************/ /* * Set up the I/O buffer in the passed-in XDR struct * * This is used in the netCDF code, which has a different way of setting * up the file. */ void h4_xdr_setup_nofile(XDR *xdrs, int ncop) { biobuf *biop = bio_get_new(-1, 0); if (ncop & NC_CREAT) xdrs->x_op = XDR_ENCODE; else xdrs->x_op = XDR_DECODE; xdrs->x_private = biop; } /* * Initialize a POSIX XDR file * * Sets up XDR to use the POSIX file descriptor fd * * Operation flag is initialized to op */ int h4_xdr_create(XDR *xdrs, int fd, int fmode, enum xdr_op op) { biobuf *biop = bio_get_new(fd, fmode); xdrs->x_op = op; xdrs->x_private = biop; if (biop == NULL) return -1; /* If write only, or just created (empty), done */ if ((biop->mode & O_WRONLY) || (biop->mode & O_CREAT)) return 0; /* Else, read the first bufferful */ return bio_read_page(biop); } /* * Flush the I/O buffer to the file */ int h4_xdr_sync(XDR *xdrs) { biobuf *biop = (biobuf *)xdrs->x_private; if (biop->isdirty) { /* Flush */ if (bio_write_page(biop) < 0) return -1; } biop->nwrote = 0; /* Force seek in bio_read_page */ /* Read it in */ if (bio_read_page(biop) < 0) return -1; return biop->cnt; } /* * Destroy a POSIX XDR stream * * Cleans up after h4_xdr_create() */ void h4_xdr_destroy(XDR *xdrs) { /* Flush */ biobuf *biop = (biobuf *)xdrs->x_private; if (biop != NULL) { if (biop->isdirty) { (void)bio_write_page(biop); } if (biop->fd != -1) (void)close(biop->fd); free(biop); } } hdf4-hdf4.3.1/mfhdf/libsrc/h4_xdr_priv.h000066400000000000000000000101411503061704500177670ustar00rootroot00000000000000/* * Copyright (c) 2009, Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of Sun Microsystems, Inc. nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * xdr.h, External Data Representation Serialization Routines. * * Copyright (C) 1984, Sun Microsystems, Inc. */ #ifndef H4_XDR_PRIV_H #define H4_XDR_PRIV_H #include "nc_priv.h" /* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE * * This is not a normal XDR implementation! * * XDR has caused a lot of problems due to the waning availability of the * library (removed from libc some time ago) and the variable size of long * integers and the way various XDR implementations handled that. * * What we have here is a stripped-down implementation of XDR that only * performs POSIX I/O to a file and removes the problematic XDR "long" * operations. * * In the future, this implementation will be replaced with something * even simpler. * * NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE */ /* XDR Boolean type */ typedef int32_t bool_t; /* * XDR operations * * - XDR_ENCODE causes the type to be encoded into the stream * - XDR_DECODE causes the type to be extracted from the stream * - XDR_FREE can be used to release the space allocated by an XDR_DECODE request */ enum xdr_op { XDR_ENCODE = 0, XDR_DECODE = 1, XDR_FREE = 2 }; /* Forward declaration */ struct biobuf; /* * The XDR handle * * Contains the operation which is being applied to the stream and a * private field. */ typedef struct xinfo { enum xdr_op x_op; /* Operation */ struct biobuf *x_private; /* Pointer to private data */ } XDR; #ifdef __cplusplus extern "C" { #endif /* NOTE! There are additional netCDF XDR ops scattered throughout the code! */ /* * Operations defined on an XDR handle */ HDFLIBAPI bool_t h4_xdr_getbytes(XDR *, char *, unsigned); HDFLIBAPI bool_t h4_xdr_putbytes(XDR *, const char *, unsigned); HDFLIBAPI unsigned h4_xdr_getpos(XDR *); HDFLIBAPI bool_t h4_xdr_setpos(XDR *, unsigned); /* * "Data type" XDR routines that read/write/free depending on the op * parameter of the XDR struct */ HDFLIBAPI bool_t h4_xdr_int(XDR *, int *); HDFLIBAPI bool_t h4_xdr_u_int(XDR *, unsigned *); HDFLIBAPI bool_t h4_xdr_bytes(XDR *, char **, unsigned *, unsigned); HDFLIBAPI bool_t h4_xdr_opaque(XDR *, char *, unsigned); HDFLIBAPI bool_t h4_xdr_float(XDR *, float *); HDFLIBAPI bool_t h4_xdr_double(XDR *, double *); /* XDR file manipulation */ HDFLIBAPI int h4_xdr_create(XDR *xdrs, int fd, int fmode, enum xdr_op op); HDFLIBAPI int h4_xdr_sync(XDR *xdrs); HDFLIBAPI void h4_xdr_destroy(XDR *); HDFLIBAPI void h4_xdr_setup_nofile(XDR *xdrs, int ncop); #ifdef __cplusplus } #endif #endif /* H4_XDR_PRIV_H */ hdf4-hdf4.3.1/mfhdf/libsrc/hdf2netcdf.h000066400000000000000000000064411503061704500175560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef MFH4_HDF_2_NETCDF_H #define MFH4_HDF_2_NETCDF_H #include "hdf.h" /* If we disable the HDF version of the netCDF API (ncxxx interface) (--disable-netcdf configure flag; the old way was to use -DHAVE_NETCDF compilation flag) ) we need to rename all the relevant function names In this version we exclude renaming the netCDF fortran API so the MFHDF side must be compiled without fortran support. */ #ifndef H4_HAVE_NETCDF #define HNAME(x) sd_##x /* pre-append 'sd_' to all netCDF fcn names */ #else /* !H4_HAVE_NETCDF i.e NOT USING HDF NETCDF */ #define HNAME(x) x #endif /* H4_HAVE_NETCDF i.e. USING HDF NETCDF */ /* If using the real netCDF library and API (use --disable-netcdf configure flag)) need to mangle the HDF versions of netCDF API function names to not conflict w/ oriinal netCDF ones */ #ifndef H4_HAVE_NETCDF #define ncerr HNAME(ncerr) #define ncopts HNAME(ncopts) #define nccreate HNAME(nccreate) #define ncopen HNAME(ncopen) #define ncredef HNAME(ncredef) #define ncendef HNAME(ncendef) #define ncclose HNAME(ncclose) #define ncinquire HNAME(ncinquire) #define ncsync HNAME(ncsync) #define ncabort HNAME(ncabort) #define ncdimdef HNAME(ncdimdef) #define ncdimid HNAME(ncdimid) #define ncdiminq HNAME(ncdiminq) #define ncdimrename HNAME(ncdimrename) #define ncvardef HNAME(ncvardef) #define ncvarid HNAME(ncvarid) #define ncvarinq HNAME(ncvarinq) #define ncvarput1 HNAME(ncvarput1) #define ncvarget1 HNAME(ncvarget1) #define ncvarput HNAME(ncvarput) #define ncvarget HNAME(ncvarget) #define ncvarputs HNAME(ncvarputs) #define ncvargets HNAME(ncvargets) #define ncvarputg HNAME(ncvarputg) #define ncvargetg HNAME(ncvargetg) #define ncvarrename HNAME(ncvarrename) #define ncattput HNAME(ncattput) #define ncattinq HNAME(ncattinq) #define ncattget HNAME(ncattget) #define ncattcopy HNAME(ncattcopy) #define ncattname HNAME(ncattname) #define ncattrename HNAME(ncattrename) #define ncattdel HNAME(ncattdel) #define nctypelen HNAME(nctypelen) #define ncsetfill HNAME(ncsetfill) #define ncrecinq HNAME(ncrecinq) #define ncrecget HNAME(ncrecget) #define ncrecput HNAME(ncrecput) #define ncnobuf HNAME(ncnobuf) /* no prototype for this one */ #endif /* !H4_HAVE_NETCDF i.e NOT USING HDF version of netCDF API */ #endif /* MFH4_HDF_2_NETCDF_H */ hdf4-hdf4.3.1/mfhdf/libsrc/hdfnctest.c000066400000000000000000000032421503061704500175200ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "hdftest.h" /* all test functions to be called in main */ extern int test_unlim(); extern int test_ncunlim(); int main(int argc, char *argv[]) { int status; /* status flag */ int num_errs = 0; /* number of errors so far */ /* Tests reading/writing datasets with unlimited dimension via HDF API (bugzilla 1378) -BMR, Jan 07, 2009 */ status = test_unlim(); /* in tunlim.c */ num_errs = num_errs + status; /* Tests reading/writing variables with unlimited dimension via nc API (bugzilla 1378) -BMR, Jan 07, 2009 */ status = test_ncunlim(); /* in tncunlim.c */ num_errs = num_errs + status; if (num_errs == 0) printf("*** HDF-nc test passes ***\n"); else printf("*** HDF-nc test fails ***\n"); return num_errs; } hdf4-hdf4.3.1/mfhdf/libsrc/hdfsds.c000066400000000000000000001507061503061704500170210ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*************************************************************************** * * This file contains the code to read old SDS objects out of HDF files * an pretend that they are netCDF / mutli-file SDS data objects * **************************************************************************/ /*************************************************************************** General Thoughts Will need to add a 'type' field to the variable structure so that we can how it was stored (basically will want to just store the tag of the object as well as the ref (which is already stored)). We can use the LUF record to get names of dimensions. If no info stored int the LUF then we will need to fake it. Will prolly be easiest to define a coordinate variable for every dimension even if it doesn't need any attributes or data values Scales are a problem. In HDF scales, are used to define the values for the coordinate variables. The problem is that all of the values for the scales in HDF are jammed into the same tag's storage. So, we will need to add an 'offset' field to the variable record so that we know where to start reading to get the data. If the offset == 0 then we should start reading from the beginning. If the offset == -1 then there is *NO* data (since a scale may not have data specified for it). LOCAL ROUTINES ============== hdf_query_seen_sdg hdf_register_seen_sdg hdf_read_ndgs hdf_check_nt These functions were added in 2.13, Jun, 2017 as a result of refactoring hdf_read_ndgs. hdf_read_rank hdf_read_dimsizes hdf_read_NT hdf_get_sdc hdf_get_pred_str_attr hdf_get_desc_annot hdf_get_label_annot hdf_luf_to_attrs hdf_get_rangeinfo hdf_get_cal PUBLIC ROUTINES =============== hdf_read_sds_ndgs NOTE: This file could use the current comments updated and more comments in parts of the code. I tried my best. -GV 9/10/97 **************************************************************************/ #include "nc_priv.h" #define SDG_MAX_INITIAL 100 /* local variables */ static intn sdgCurrent; static intn sdgMax; static uint16 *sdgTable = NULL; static uint8 *ptbuf = NULL; /* Local routines */ static intn hdf_query_seen_sdg(uint16 ndgRef); static intn hdf_register_seen_sdg(uint16 ndgRef); static intn hdf_read_ndgs(NC *handle); uint8 *hdf_get_pred_str_attr(NC *handle, uint16 stratt_tag, uint16 satt_ref, int null_count); /****************************************************************************** NAME hdf_query_seen_sdg DESCRIPTION The SDG with the given ref number might be part of an SDG-NDG combo if so, we return TRUE else FALSE. Attempt to discover if we've seen it in the most inefficient manner possible RETURNS TRUE / FALSE ******************************************************************************/ static intn hdf_query_seen_sdg(uint16 ndgRef) { intn i; if (!sdgTable) return FALSE; for (i = 0; i < sdgCurrent; i++) { if (sdgTable[i] == ndgRef) return TRUE; } return FALSE; } /* hdf_query_seen_sdg */ /****************************************************************************** NAME hdf_register_seen_sdg DESCRIPTION The SDG with the given ref is in an SDG-NDG combo. Add it to the seen table so we don't read it twice RETURNS SUCCEED / FAIL ******************************************************************************/ static intn hdf_register_seen_sdg(uint16 sdgRef) { intn ret_value = SUCCEED; /* check if table is allocated */ if (!sdgTable) { sdgMax = SDG_MAX_INITIAL; sdgTable = malloc(sdgMax * sizeof(uint16)); if (sdgTable == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } sdgCurrent = 0; } /* add ref to table */ sdgTable[sdgCurrent++] = sdgRef; /* check if we need to increase size of table */ if (sdgCurrent == sdgMax) { sdgMax *= 2; sdgTable = realloc(sdgTable, sdgMax * sizeof(uint16)); if (sdgTable == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } } done: return ret_value; } /* hdf_register_seen_sdg */ /****************************************************************************** NAME hdf_check_nt - Checks format of number type DESCRIPTION Test if data was stored in native format of different machine or in the LITEND format, and make sure the numbertype version numbers are the same so we don't read it twice (Refactored from hdf_read_ndgs) RETURNS SUCCEED / FAIL ******************************************************************************/ static intn hdf_check_nt(uint8 *ntstring, int32 *type) { intn ret_value = SUCCEED; if ((ntstring[0] != DFNT_VERSION) || ((ntstring[3] != DFNTF_NONE) && (ntstring[3] != DFNTF_IEEE))) { if (ntstring[3] == DFNTF_PC) /* Little Endian */ *type |= DFNT_LITEND; else { /* same machine type? */ if (ntstring[3] == DFKgetPNSC(*type, DF_MT)) *type |= DFNT_NATIVE; else /* different machine */ { ret_value = FAIL; } } /* machine type */ } /* Little Endian */ return (ret_value); } /* hdf_check_nt */ /****************************************************************************** NAME hdf_read_rank - Reads the rank from file DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS rank / FAIL DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_read_rank(int32 acc_id, int16 *rank) { uint8 *p, *local_buf = NULL; hdf_err_code_t ret_value = DFE_NONE; local_buf = malloc(2 * sizeof(uint8)); if (local_buf == NULL) { HGOTO_ERROR(DFE_NOSPACE, DFE_NOSPACE); } /* read and extract the rank */ if (Hread(acc_id, (int32)2, local_buf) == FAIL) { HGOTO_ERROR(DFE_READERROR, DFE_READERROR); } else { int16 temp_rank = 0; p = local_buf; INT16DECODE(p, temp_rank); if (temp_rank > 0) /* what about the case of rank=0? -BMR */ { *rank = temp_rank; free(local_buf); } else HGOTO_ERROR(DFE_RANGE, DFE_RANGE); } done: if (ret_value != DFE_NONE) { /* Failure cleanup */ free(local_buf); } /* return DFE_NONE or error code */ return (ret_value); } /* hdf_read_rank */ /****************************************************************************** NAME hdf_read_dimsizes - Reads the dimensions' size from file DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_read_dimsizes(int32 acc_id, int16 rank, int32 *dimsizes) { uint8 *p, *local_buf = NULL; intn i; hdf_err_code_t ret_value = DFE_NONE; local_buf = malloc(4 * (size_t)rank * sizeof(uint8)); if (local_buf == NULL) { HGOTO_ERROR(DFE_NOSPACE, DFE_NOSPACE); } /* read dimension record */ if (Hread(acc_id, (int32)4 * rank, local_buf) == FAIL) { HGOTO_ERROR(DFE_READERROR, DFE_READERROR); } p = local_buf; for (i = 0; i < rank; i++) { int32 dim_size = 0; INT32DECODE(p, dim_size); if (dim_size < 0) { HGOTO_ERROR(DFE_RANGE, DFE_RANGE); } else dimsizes[i] = dim_size; } free(local_buf); done: if (ret_value != DFE_NONE) { /* Failure cleanup */ free(local_buf); } /* return DFE_NONE or error code */ return (ret_value); } /* hdf_read_dimsizes */ /****************************************************************************** NAME hdf_read_NT - Reads NT from file and stores in provided buffer DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_read_NT(int32 acc_id, NC *handle, uint8 *ntstring_buf) { uint16 ntTag; uint16 ntRef; uint8 *p, *local_buf = NULL; hdf_err_code_t ret_value = DFE_NONE; local_buf = malloc(4 * sizeof(uint8)); if (local_buf == NULL) { HGOTO_ERROR(DFE_NOSPACE, DFE_NOSPACE); } if (Hread(acc_id, (int32)4, local_buf) == FAIL) { HGOTO_ERROR(DFE_READERROR, DFE_READERROR); } p = local_buf; UINT16DECODE(p, ntTag); UINT16DECODE(p, ntRef); /* read NT of this scale (dimension) */ if (Hgetelement(handle->hdf_file, ntTag, ntRef, ntstring_buf) == FAIL) { HGOTO_ERROR(DFE_GETELEM, DFE_GETELEM); } free(local_buf); done: if (ret_value != DFE_NONE) { /* Failure cleanup */ free(local_buf); } /* return DFE_NONE or error code */ return (ret_value); } /* hdf_read_NT */ /****************************************************************************** NAME hdf_get_sdc - Reads coordsys and stores in an attribute. DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_get_sdc(NC *handle, uint16 tmpRef, NC_attr **tmp_attr, intn *curr_attr) { uint8 *coordbuf = NULL; /* buffer to store coord system info */ int len; hdf_err_code_t ret_value = DFE_NONE; len = Hlength(handle->hdf_file, DFTAG_SDC, tmpRef); if (len == FAIL) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } coordbuf = malloc((uint32)len + 1); if (NULL == coordbuf) { HGOTO_ERROR(DFE_NOSPACE, DFE_NOSPACE); } if (Hgetelement(handle->hdf_file, DFTAG_SDC, tmpRef, coordbuf) == FAIL) { free(coordbuf); HGOTO_ERROR(DFE_GETELEM, DFE_GETELEM); } coordbuf[len] = '\0'; if (coordbuf[0] != '\0') { *tmp_attr = (NC_attr *)NC_new_attr(_HDF_CoordSys, NC_CHAR, strlen(coordbuf), coordbuf); if (*tmp_attr == NULL) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } } free(coordbuf); done: if (ret_value != DFE_NONE) { /* Failure cleanup */ if (coordbuf != NULL) free(coordbuf); } return ret_value; } /* hdf_get_sdc */ /****************************************************************************** NAME hdf_get_pred_str_attr - Reads predefined string. DESCRIPTION Reads predefined strings and returns the buffer containing the values. (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS Buffer of predefined string or NULL ******************************************************************************/ uint8 * hdf_get_pred_str_attr(NC *handle, uint16 stratt_tag, uint16 satt_ref, int null_count) { uint8 *tmpbuf = NULL; /* buffer to store predefined string attribute info */ intn i; uint8 *ret_value = NULL; if (satt_ref) { int len; /* * Add three NULLS to the end to account for a bug in HDF 3.2r1-3 */ len = Hlength(handle->hdf_file, stratt_tag, satt_ref); if (len == FAIL) { HGOTO_ERROR(DFE_INTERNAL, NULL); } tmpbuf = malloc((uint32)len + 3); if (NULL == tmpbuf) { HGOTO_ERROR(DFE_NOSPACE, NULL); } if (Hgetelement(handle->hdf_file, stratt_tag, satt_ref, tmpbuf) == FAIL) { HGOTO_ERROR(DFE_GETELEM, NULL); } for (i = null_count - 1; i >= 0; i--) tmpbuf[len + i] = '\0'; } ret_value = tmpbuf; done: if (ret_value == NULL) { /* Failure cleanup */ free(tmpbuf); } /* return the string attribute */ return (ret_value); } /* hdf_get_pred_str_attr */ /****************************************************************************** NAME hdf_get_desc_annot - Reads description annotation and stores in an attribute DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_get_desc_annot(NC *handle, uint16 ndgTag, uint16 ndgRef, NC_attr **tmp_attr, intn *curr_attr) { intn i; hdf_err_code_t ret_value = DFE_NONE; /* Re-vamped desc annotation handling to use new ANxxx interface * -georgev 6/11/97 */ int32 an_handle = FAIL; int32 *ddescs = NULL; char *ann_desc = NULL; int32 ann_len; intn num_ddescs; char hremark[30] = ""; /* should be big enough for new attribute */ /* start Annotation interface */ if ((an_handle = ANstart(handle->hdf_file)) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* Get number of data descs with this tag/ref */ num_ddescs = ANnumann(an_handle, AN_DATA_DESC, ndgTag, ndgRef); if (num_ddescs != 0) { /* allocate space for list of desc annotation id's with this tag/ref */ if ((ddescs = malloc(num_ddescs * sizeof(int32))) == NULL) { HGOTO_ERROR(DFE_NOSPACE, DFE_ANAPIERROR); } /* get list of desc annotations id's with this tag/ref */ if (ANannlist(an_handle, AN_DATA_DESC, ndgTag, ndgRef, ddescs) != num_ddescs) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* loop through desc list. */ for (i = 0; i < num_ddescs; i++) { if ((ann_len = ANannlen(ddescs[i])) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* allocate space for desc */ if (ann_desc == NULL) { if ((ann_desc = malloc((ann_len + 1) * sizeof(char))) == NULL) { HGOTO_ERROR(DFE_NOSPACE, DFE_NOSPACE); } memset(ann_desc, '\0', ann_len + 1); } /* read desc */ if (ANreadann(ddescs[i], ann_desc, ann_len + 1) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* make unique attribute */ sprintf(hremark, "%s-%d", _HDF_Remarks, i + 1); /* add it as an attribute */ *tmp_attr = (NC_attr *)NC_new_attr(hremark, NC_CHAR, strlen(ann_desc), ann_desc); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } /* end access */ ANendaccess(ddescs[i]); /* free buffer */ free(ann_desc); ann_desc = NULL; } } /* end if descs */ done: if (ret_value == DFE_NONE) { /* Failure cleanup */ free(ddescs); if (an_handle != FAIL) ANend(an_handle); } /* cleanup */ /* return the status */ return (ret_value); /* end annotation description conversion */ } /* hdf_get_desc_annot */ /****************************************************************************** NAME hdf_get_pred_str_attr - Reads label annotation and stores in an attribute DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_get_label_annot(NC *handle, uint16 ndgTag, uint16 ndgRef, NC_attr **tmp_attr, intn *curr_attr) { intn i; hdf_err_code_t ret_value = DFE_NONE; /* Re-vamped label annotation handling to use new ANxxx interface * -georgev 6/11/97 */ int32 an_handle = FAIL; int32 *dlabels = NULL; char *ann_label = NULL; int32 ann_len; intn num_dlabels; char hlabel[30] = ""; /* should be big enough for new attribute */ /* start Annotation interface */ if ((an_handle = ANstart(handle->hdf_file)) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* Get number of data labels with this tag/ref */ num_dlabels = ANnumann(an_handle, AN_DATA_LABEL, ndgTag, ndgRef); if (num_dlabels != 0) { /* allocate space for list of label annotation id's with this tag/ref */ if ((dlabels = malloc(num_dlabels * sizeof(int32))) == NULL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* get list of label annotations id's with this tag/ref */ if (ANannlist(an_handle, AN_DATA_LABEL, ndgTag, ndgRef, dlabels) != num_dlabels) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* loop through label list */ for (i = 0; i < num_dlabels; i++) { if ((ann_len = ANannlen(dlabels[i])) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* allocate space for label */ if (ann_label == NULL) { if ((ann_label = malloc((ann_len + 1) * sizeof(char))) == NULL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } memset(ann_label, '\0', ann_len + 1); } /* read label */ if (ANreadann(dlabels[i], ann_label, ann_len + 1) == FAIL) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } /* make unique attribute */ sprintf(hlabel, "%s-%d", _HDF_AnnoLabel, i + 1); /* add as attribute */ *tmp_attr = (NC_attr *)NC_new_attr(hlabel, NC_CHAR, strlen(ann_label), ann_label); if (NULL == tmp_attr) { HGOTO_ERROR(DFE_ANAPIERROR, DFE_ANAPIERROR); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } /* end access */ ANendaccess(dlabels[i]); /* free buffer */ free(ann_label); ann_label = NULL; } } /* end if labels */ done: if (ret_value == DFE_NONE) { /* Failure cleanup */ free(dlabels); if (an_handle != FAIL) ANend(an_handle); } /* cleanup */ /* return the status */ return (ret_value); /* end annotation label processing */ } /* hdf_get_label_annot */ /****************************************************************************** NAME hdf_luf_to_attrs - Reads label, unit, and format strings and converts them into attributes. DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_luf_to_attrs(char *labelstr, char *unitstr, char *formatstr, NC_attr **tmp_attr, intn *curr_attr) { hdf_err_code_t ret_value = DFE_NONE; /* label => "long_name" */ if (labelstr && (labelstr[0] != '\0') > 0) { *tmp_attr = (NC_attr *)NC_new_attr(_HDF_LongName, NC_CHAR, strlen((char *)labelstr), (Void *)labelstr); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } } /* Units => 'units' */ if (unitstr && (unitstr[0] != '\0') > 0) { *tmp_attr = (NC_attr *)NC_new_attr(_HDF_Units, NC_CHAR, strlen((char *)unitstr), (Void *)unitstr); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } } /* Format => 'format' */ if (formatstr && (formatstr[0] != '\0') > 0) { *tmp_attr = (NC_attr *)NC_new_attr(_HDF_Format, NC_CHAR, strlen((char *)formatstr), (Void *)formatstr); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, DFE_INTERNAL); } else { (*tmp_attr)->HDFtype = DFNT_CHAR; tmp_attr++; (*curr_attr)++; } } done: if (ret_value == DFE_NONE) { /* Failure cleanup */ } /* cleanup */ /* return the status */ return (ret_value); } /* hdf_luf_to_attrs */ /****************************************************************************** NAME hdf_get_rangeinfo - Reads range information and converts them into attributes DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_get_rangeinfo(nc_type nctype, int32 hdftype, NC_attr **tmp_attr, intn *curr_attr) { uint8 tBuf[128] = ""; intn idx = 0; /* index for tBuf */ hdf_err_code_t ret_value = DFE_NONE; if (FAIL == DFKconvert((void *)ptbuf, (void *)tBuf, hdftype, 2, DFACC_READ, 0, 0)) { HGOTO_ERROR(DFE_BADCONV, FAIL); } /* _HDF_ValidMax */ *tmp_attr = (NC_attr *)NC_new_attr(_HDF_ValidMax, nctype, 1, (Void *)tBuf); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } /* _HDF_ValidMin */ idx = DFKNTsize(hdftype | DFNT_NATIVE); *tmp_attr = (NC_attr *)NC_new_attr(_HDF_ValidMin, nctype, 1, (Void *)&(tBuf[idx])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } done: if (ret_value == DFE_NONE) { /* Failure cleanup */ } /* cleanup */ /* return the status */ return (ret_value); } /* hdf_get_rangeinfo */ /****************************************************************************** NAME hdf_get_cal - Reads calibration and stores them attributes DESCRIPTION (Refactored from hdf_read_ndgs - Jun, 2017) RETURNS DFE_NONE / ******************************************************************************/ static hdf_err_code_t hdf_get_cal(nc_type nctype, int32 hdftype, NC_attr **tmp_attr, intn *curr_attr) { uint8 tBuf[128] = ""; intn idx = 0; /* index for tBuf */ hdf_err_code_t ret_value = DFE_NONE; /* for DFNT_FLOAT32 based calibration */ intn incr = 4; /* increment 4 bytes */ int32 nt_hdftype = DFNT_INT16; nc_type nt_nctype = NC_SHORT; /* for DFNT_FLOAT64 based calibration */ if (hdftype == DFNT_FLOAT64) { incr = 8; /* increment 8 bytes */ nt_hdftype = DFNT_INT32; nt_nctype = NC_LONG; } if (FAIL == DFKconvert((void *)ptbuf, (void *)tBuf, hdftype, 4, DFACC_READ, 0, 0)) { HGOTO_ERROR(DFE_BADCONV, FAIL); } /* _HDF_ScaleFactor */ *tmp_attr = (NC_attr *)NC_new_attr(_HDF_ScaleFactor, nctype, 1, (Void *)&(tBuf[idx])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } /* _HDF_ScaleFactorErr */ idx = idx + incr; *tmp_attr = (NC_attr *)NC_new_attr(_HDF_ScaleFactorErr, nctype, 1, (Void *)&(tBuf[idx])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } /* _HDF_AddOffset */ idx = idx + incr; *tmp_attr = (NC_attr *)NC_new_attr(_HDF_AddOffset, nctype, 1, (Void *)&(tBuf[idx])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } /* _HDF_AddOffsetErr */ idx = idx + incr; *tmp_attr = (NC_attr *)NC_new_attr(_HDF_AddOffsetErr, nctype, 1, (Void *)&(tBuf[idx])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = hdftype; tmp_attr++; (*curr_attr)++; } /* don't forget number_type */ if (FAIL == DFKconvert((void *)(ptbuf + idx + incr), (void *)tBuf, nt_hdftype, 1, DFACC_READ, 0, 0)) { HGOTO_ERROR(DFE_BADCONV, FAIL); } *tmp_attr = (NC_attr *)NC_new_attr(_HDF_CalibratedNt, nt_nctype, 1, (Void *)&(tBuf[0])); if (NULL == *tmp_attr) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } else { (*tmp_attr)->HDFtype = nt_hdftype; tmp_attr++; (*curr_attr)++; } done: if (ret_value == DFE_NONE) { /* Failure cleanup */ } /* cleanup */ /* return the status */ return (ret_value); } /* hdf_get_cal */ /****************************************************************************** NAME hdf_read_ndgs DESCRIPTION Loop through all of the NDGs in the file and create data structures for them RETURNS SUCCEED / FAIL ******************************************************************************/ static intn hdf_read_ndgs(NC *handle) { char tmpname[80] = ""; uint8 ntstring[4] = ""; intn dimcount; intn dimattrcnt; /* info about NDG structure */ int32 GroupID; int32 aid; int32 aid1; uint16 ndgTag; uint16 ndgRef; uint16 lRef; uint16 uRef; uint16 fRef; uint16 sRef; uint16 sdRef; uint16 tmpTag; uint16 tmpRef; int16 rank = 0; nc_type type; int32 *dimsizes = NULL; int32 *scaletypes = NULL; int32 HDFtype; int32 temptype; hdf_err_code_t err_code; intn dim; intn max_thangs; intn current_dim; intn current_var; intn current_attr; intn *vardims = NULL; /* info about netCDF structures */ NC_dim **dims = NULL; /* hold list of dimensions as we create it */ NC_var **vars = NULL; /* hold variable list as we create it */ NC_attr **attrs = NULL; /* hold attribute list as we create it */ NC_attr *dimattrs[10]; /* for LUF and anno_label, anno_desc, 10 is enough */ uint8 *labelbuf = NULL; /* label should not be used as var name due to non-uniqueness */ uint8 *scalebuf = NULL; /* buffer to store scale info */ uint8 *unitbuf = NULL; /* buffer to store unit info */ uint8 *formatbuf = NULL; /* buffer to store format info */ intn new_dim; /* == new dim so create coord variable */ /* random book-keeping */ intn i; intn status; intn tag_index; uint8 *p = NULL; intn scale_offset; /* current offset into the scales record for the current dimension's values */ intn ret_value = SUCCEED; /* * Allocate the array to store the dimensions */ max_thangs = 1; /* what is this limit ? */ dims = malloc(sizeof(NC_dim *) * max_thangs); if (NULL == dims) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } vars = malloc(sizeof(NC_var *) * max_thangs); if (NULL == vars) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } attrs = malloc(sizeof(NC_attr *) * 100); if (NULL == attrs) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* no dimensions or variables yet */ current_dim = 0; current_var = 0; dimcount = 0; for (tag_index = 0; tag_index < 2; tag_index++) { if (tag_index == 0) ndgTag = DFTAG_NDG; else ndgTag = DFTAG_SDG; /* * Start from the beginning and look though */ aid = Hstartread(handle->hdf_file, ndgTag, DFREF_WILDCARD); if (aid == FAIL) continue; /* hmm if we fail we continue the loop? */ /* * Loop through all of the NDGs in the file */ status = SUCCEED; while (status == SUCCEED) { if (HQuerytagref(aid, &ndgTag, &ndgRef) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Test if its an SDG-NDG which we've processed already */ if ((ndgTag == DFTAG_SDG) && (hdf_query_seen_sdg(ndgRef))) { status = Hnextread(aid, ndgTag, DFREF_WILDCARD, DF_CURRENT); continue; /* go to next element */ } /* OK, now we need to get the relevant dimension structure */ /* read the group into memory */ if ((GroupID = DFdiread(handle->hdf_file, ndgTag, ndgRef)) < 0) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } lRef = uRef = fRef = sRef = sdRef = 0; /* default number type is Float32 */ type = NC_FLOAT; HDFtype = DFNT_FLOAT32; /* no attributes found yet */ current_attr = 0; /* no meta-data seen yet */ labelbuf = unitbuf = scalebuf = formatbuf = NULL; /* * Loop through the members of the group looking for stuff * * NOTE: Only generate attributes for meta-data which does * not depend on the rank of the data since we can not * be sure that we get the rank first. * If the meta-data depends on the rank, just remember * the ref number and read the element once this while * loop is finished. */ /* Check if temporary buffer has been allocated */ if (ptbuf == NULL) { ptbuf = malloc(TBUF_SZ * sizeof(uint8)); if (ptbuf == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } } while (!DFdiget(GroupID, &tmpTag, &tmpRef)) { switch (tmpTag) { case DFTAG_SDD: /* hdf_get_sdd(handle, tmpTag, tmpRef); */ aid1 = Hstartread(handle->hdf_file, tmpTag, tmpRef); if (aid1 == FAIL) { HGOTO_ERROR(DFE_CANTACCESS, FAIL); } /* read rank */ err_code = hdf_read_rank(aid1, &rank); if (err_code != DFE_NONE) HGOTO_ERROR(err_code, FAIL); /* get space for dimensions, variable dimensions, and scale types */ if (rank > 0) { dimsizes = malloc((uint32)rank * sizeof(int32)); vardims = malloc((uint32)rank * sizeof(intn)); scaletypes = malloc((uint32)rank * sizeof(int32)); } else { /* when rank = 0, use rank = 1, assuming the data is scalar */ dimsizes = malloc(sizeof(int32)); vardims = malloc(sizeof(intn)); scaletypes = malloc(sizeof(int32)); } if (dimsizes == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (vardims == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (scaletypes == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } /* read dimension record */ err_code = hdf_read_dimsizes(aid1, rank, dimsizes); if (err_code != DFE_NONE) HGOTO_ERROR(err_code, FAIL); /* read in number type string */ err_code = hdf_read_NT(aid1, handle, ntstring); if (err_code == FAIL) HGOTO_ERROR(err_code, FAIL); HDFtype = ntstring[1]; if ((type = hdf_unmap_type(HDFtype)) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Validate number type regarding platform/format */ if (hdf_check_nt(ntstring, &HDFtype) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* read in scale NTs */ for (i = 0; i < rank; i++) { err_code = hdf_read_NT(aid1, handle, ntstring); if (err_code != DFE_NONE) HGOTO_ERROR(err_code, FAIL); scaletypes[i] = ntstring[1]; /* temp preserve scaletype in case of error */ temptype = scaletypes[i]; /* check native format and LITEND */ if (hdf_check_nt(ntstring, &temptype) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* restore scaletype */ scaletypes[i] = temptype; } if (Hendaccess(aid1) == FAIL) { HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } break; case DFTAG_SDL: /* label */ lRef = tmpRef; break; case DFTAG_SDU: /* unit */ uRef = tmpRef; break; case DFTAG_SDF: /* format */ fRef = tmpRef; break; case DFTAG_SDC: /* coord */ /* * DFTAG_SDC => 'cordsys' */ { err_code = hdf_get_sdc(handle, tmpRef, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } } break; case DFTAG_SDS: /* scales */ sRef = tmpRef; break; case DFTAG_SD: /* actual data */ sdRef = tmpRef; break; case DFTAG_CAL: /* calibration info */ /* * DFTAG_CAL => 'scale_factor', 'add_offset', 'scale_factor_err', * 'add_offset_err' */ { if (Hgetelement(handle->hdf_file, tmpTag, tmpRef, ptbuf) == FAIL) { HGOTO_ERROR(DFE_GETELEM, FAIL); } if (Hlength(handle->hdf_file, tmpTag, tmpRef) == 36) { /* DFNT_FLOAT64 based calibration */ err_code = hdf_get_cal(NC_DOUBLE, DFNT_FLOAT64, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } } else { /* DFNT_FLOAT32 based calibration */ err_code = hdf_get_cal(NC_FLOAT, DFNT_FLOAT32, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } } break; } case DFTAG_SDM: /* valid range info */ if (Hgetelement(handle->hdf_file, tmpTag, tmpRef, ptbuf) == FAIL) { HGOTO_ERROR(DFE_GETELEM, FAIL); } err_code = hdf_get_rangeinfo(type, HDFtype, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } break; case DFTAG_SDLNK: if (ndgTag == DFTAG_SDG) continue; /* continue processing? */ if (Hgetelement(handle->hdf_file, tmpTag, tmpRef, ptbuf) == FAIL) { HGOTO_ERROR(DFE_GETELEM, FAIL); } else { uint16 sdgTag, sdgRef; p = ptbuf; /* the first two are for the NDG tag/ref */ UINT16DECODE(p, sdgTag); UINT16DECODE(p, sdgRef); /* now the ones we're interested in */ UINT16DECODE(p, sdgTag); UINT16DECODE(p, sdgRef); if (hdf_register_seen_sdg(sdgRef) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } break; default: break; } /* end switch 'tmpTag */ } /* end while 'DFdiget()'*/ /* Free local buffer */ free(ptbuf); ptbuf = NULL; /* * Get the predefined string attributes of the dataset. Note * that, in the first three attributes, we need to add three * NULLs to the end of the buffer to account for a bug in * HDF 3.2r1-3, hence, the last argument is 3. The last * attribute doesn't need the NULL characters. */ labelbuf = hdf_get_pred_str_attr(handle, DFTAG_SDL, lRef, 3); unitbuf = hdf_get_pred_str_attr(handle, DFTAG_SDU, uRef, 3); formatbuf = hdf_get_pred_str_attr(handle, DFTAG_SDF, fRef, 3); scalebuf = hdf_get_pred_str_attr(handle, DFTAG_SDS, sRef, 0); /* skip over the garbage at the beginning */ scale_offset = rank * sizeof(uint8); for (dim = 0; dim < rank; dim++) { intn this_dim = FAIL; char *labelvalue = NULL; char *unitvalue = NULL; char *formatvalue = NULL; /* now loop though each dimension - get the size from dimsize[i] - lref will give the ref of the label descriptor to see if has a real name else fake one based on the label of the NDG - look at uref for units information and fref for formatting info store both of these as attributes of the coordinate variable - Promote the dimension to a variable if any of the LUF or scales is assigned to this dimentsion. - The dimension variable name is the same as the dimension record name, fakeDim. */ new_dim = FAIL; tmpname[0] = '\0'; if (lRef) { labelvalue = (char *)labelbuf; for (i = 0; i < dim + 1; i++) labelvalue += strlen(labelvalue) + 1; if (labelvalue[0] != '\0') new_dim = SUCCEED; } if (uRef) { unitvalue = (char *)unitbuf; for (i = 0; i < dim + 1; i++) unitvalue += strlen(unitvalue) + 1; if (unitvalue[0] != '\0') new_dim = SUCCEED; } if (fRef) { formatvalue = (char *)formatbuf; for (i = 0; i < dim + 1; i++) formatvalue += strlen(formatvalue) + 1; if (formatvalue[0] != '\0') new_dim = SUCCEED; } sprintf(tmpname, "fakeDim%d", dimcount++); this_dim = current_dim++; if (current_dim == max_thangs) { /* need to allocate more space */ max_thangs *= 2; dims = realloc(dims, sizeof(NC_dim *) * max_thangs); if (NULL == dims) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } vars = realloc(vars, sizeof(NC_var *) * max_thangs); if (NULL == vars) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } } /* * Create a new dimension record for each dimension. * Each NC_dim takes 8 bytes in memory. */ dims[this_dim] = NC_new_dim(tmpname, dimsizes[dim]); if (NULL == dims[this_dim]) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* * It looks like were gonna have to do the variable define * here too cuz we need to remember the indices of where * we put the dimensions */ vardims[dim] = (intn)this_dim; /* * Look at the scale NTs since the scales may have * different number types. * Promote the dimension to a variable, but only if it * has meta-data stored with it. */ if (new_dim || (scalebuf && scalebuf[dim])) { nc_type stype; if ((stype = hdf_unmap_type(scaletypes[dim])) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } vars[current_var] = NC_new_var(tmpname, stype, 1, &this_dim); if (NULL == vars[current_var]) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } vars[current_var]->data_tag = DFTAG_SDS; /* not normal data */ vars[current_var]->data_ref = sRef; vars[current_var]->HDFtype = scaletypes[dim]; vars[current_var]->ndg_ref = Hnewref(handle->hdf_file); /* Indicate that it is unknown whether the current variable is an SDS or a coordinate variable. bugzilla 624 - BMR - 05/16/2007 */ /* vars[current_var]->var_type = UNKNOWN; */ /* It looks like this is a dimension variable for sure! -BMR 10/26/2010 */ vars[current_var]->var_type = IS_CRDVAR; /* * See if a scales record has been stored and if there have * been scale values provided */ if ((scalebuf) && (scalebuf[dim])) { vars[current_var]->numrecs = dimsizes[dim]; vars[current_var]->data_offset = scale_offset; scale_offset += dimsizes[dim] * DFKNTsize(scaletypes[dim]); } else { vars[current_var]->data_offset = -1; /* no values */ } /* * Convert dimstrs into attributes * label -- "long_name" (cuz SDsetdimstrs() assigns * "long_name" to label) * unit -- "units" * format -- "format" */ dimattrcnt = 0; err_code = hdf_luf_to_attrs(labelvalue, unitvalue, formatvalue, &dimattrs[dimattrcnt], &dimattrcnt); /* * Add the attributes to the variable */ if (dimattrcnt) { vars[current_var]->attrs = NC_new_array(NC_ATTRIBUTE, dimattrcnt, (Void *)dimattrs); if (NULL == vars[current_var]->attrs) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else vars[current_var]->attrs = NULL; current_var++; if (current_var == max_thangs) { /* need to allocate more space */ max_thangs *= 2; dims = realloc(dims, sizeof(NC_dim *) * max_thangs); if (NULL == dims) HGOTO_ERROR(DFE_NOSPACE, FAIL); vars = realloc(vars, sizeof(NC_var *) * max_thangs); if (NULL == vars) HGOTO_ERROR(DFE_NOSPACE, FAIL); } } /* end if 'new_dim' */ } /* end for 'dim' */ /* * Should the LUF-label be mapped as attr of "longname", to be * consistent with the dim vars? 8/18/94 * Should the annotation-label mapped to attr "anno-label", * if "longname" has been taken by LUF-label? 8/18/94. * * (If there is a data label, use that as the variable name * else) * Use the reference number of the NDG as part of * a made up name (Label is mapped as attr "longname" 9/2/94). * * Convert spaces in the name to underscores (yuck) otherwise * ncgen will barf on ncdumped files) */ sprintf(tmpname, "Data-Set-%d", ndgRef); vars[current_var] = NC_new_var(tmpname, type, (int)rank, vardims); if (NULL == vars[current_var]) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* * Fill in extra information so it will be easier to backtrack * when the user wants to lift data out */ vars[current_var]->data_tag = DATA_TAG; vars[current_var]->data_ref = sdRef; vars[current_var]->HDFtype = HDFtype; /* Indicate that it is unknown whether the current variable is an SDS or a coordinate variable. bugzilla 624 - BMR - 05/16/2007. This looks like a IS_CRDVAR because it's from vardim! -BMR - 6/1/16 */ vars[current_var]->var_type = UNKNOWN; /* * NOTE: If the user changes the file and saves setting this * to ndgRef will blow away the old ndgs (but they will get * rewritten). Otherwise calls to SDidtoref() will return * bogus values */ vars[current_var]->ndg_ref = ndgRef; /* * -------------------------------------------- * Convert HDF meta-data into netCDF attributes * -------------------------------------------- */ /* * If there is an annotation put in 'remarks' */ { err_code = DFE_NONE; err_code = hdf_get_desc_annot(handle, ndgTag, ndgRef, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } } /* end annotation description conversion */ /* * If there is a label, put it in attr 'anno_label' (note: * NOT 'long_name' 9/2/94) */ { err_code = DFE_NONE; err_code = hdf_get_label_annot(handle, ndgTag, ndgRef, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } } /* end annotation label processing */ /* Convert label, units, format strings to attributes */ err_code = hdf_luf_to_attrs((char *)labelbuf, (char *)unitbuf, (char *)formatbuf, &attrs[current_attr], ¤t_attr); if (err_code != DFE_NONE) { HGOTO_ERROR(err_code, FAIL); } /* * Add the attributes to the variable */ if (current_attr) { vars[current_var]->attrs = NC_new_array(NC_ATTRIBUTE, current_attr, (Void *)attrs); if (NULL == vars[current_var]->attrs) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else vars[current_var]->attrs = NULL; current_var++; if (current_var == max_thangs) { /* need to allocate more space */ max_thangs *= 2; dims = realloc(dims, sizeof(NC_dim *) * max_thangs); if (NULL == dims) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } vars = realloc(vars, sizeof(NC_var *) * max_thangs); if (NULL == vars) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } } /* * De-allocate temporary storage */ free(labelbuf); free(scalebuf); free(unitbuf); free(formatbuf); free(dimsizes); free(vardims); free(scaletypes); /* * Look for the next DataSet */ status = Hnextread(aid, ndgTag, DFREF_WILDCARD, DF_CURRENT); } /* while (more NDGs) */ if (Hendaccess(aid) == FAIL) { HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } } /* outermost for loop to loop between NDGs and SDGs */ /* * Set up the structures in the proper form */ if (current_dim) { handle->dims = NC_new_array(NC_DIMENSION, current_dim, (Void *)dims); if (NULL == handle->dims) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else handle->dims = NULL; if (current_var) { handle->vars = NC_new_array(NC_VARIABLE, current_var, (Void *)vars); if (NULL == handle->vars) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else handle->vars = NULL; done: if (ret_value == FAIL) { /* FAIL cleanup? */ free(labelbuf); free(scalebuf); free(unitbuf); free(formatbuf); free(dimsizes); free(vardims); free(scaletypes); free(ptbuf); } free(dims); free(vars); free(attrs); return ret_value; } /* hdf_read_ndgs */ /****************************************************************************** NAME hdf_read_sds_cdf DESCRIPTION Read SDSs out of an HDF file an pretend like they are netCDF objects We can already assume that the file is open and that it is in fact an HDF file RETURNS SUCCEED / FAIL ******************************************************************************/ intn hdf_read_sds_cdf(XDR *xdrs, NC **handlep) { intn status; NC *handle = NULL; intn ret_value = SUCCEED; (void)xdrs; /* * go through and treat each SDS as a separate variable */ /* * should we try to create an unlimited dimension somehow ??? */ /* we haven't seen any SDG-NDG combos yet */ free(sdgTable); sdgTable = NULL; handle = (*handlep); if (NULL == handle) { HGOTO_ERROR(DFE_ARGS, FAIL); } status = hdf_read_ndgs(handle); if (status == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* deallocate SDG-NDG space */ free(sdgTable); sdgTable = NULL; done: return ret_value; } /* hdf_read_sds_cdf */ hdf4-hdf4.3.1/mfhdf/libsrc/iarray.c000066400000000000000000000066111503061704500170300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" /* values: VAX C doesn't like values[] */ NC_iarray * NC_new_iarray(unsigned count, const int *values) { NC_iarray *ret; int *ip; size_t memlen; ret = malloc(sizeof(NC_iarray)); if (ret == NULL) goto alloc_err; ret->count = count; if (count != 0) /* allocate */ { memlen = count * sizeof(int); ret->values = malloc(memlen); if (ret->values == NULL) goto alloc_err; if (values != NULL) /* copy them in */ { for (ip = ret->values; count > 0; count--) *ip++ = *values++; } } else { ret->values = NULL; } return (ret); alloc_err: nc_serror("NC_new_iarray"); return (NULL); } /* * Free iarray and its values */ int NC_free_iarray(NC_iarray *iarray) { if (iarray != NULL) { free(iarray->values); free(iarray); } return SUCCEED; } bool_t xdr_NC_iarray(XDR *xdrs, NC_iarray **ipp) { int *ip; unsigned count = 0; bool_t stat = TRUE; switch (xdrs->x_op) { case XDR_FREE: NC_free_iarray((*ipp)); return (TRUE); case XDR_DECODE: /* need the length to pass to new */ if (!h4_xdr_u_int(xdrs, &count)) { return (FALSE); } (*ipp) = NC_new_iarray((unsigned)count, (int *)NULL); if ((*ipp) == NULL) return (FALSE); /* then deal with the array */ for (ip = (*ipp)->values; (count > 0) && stat; count--) stat = h4_xdr_int(xdrs, ip++); return (stat); case XDR_ENCODE: /* first deal with the length */ count = (*ipp)->count; if (!h4_xdr_u_int(xdrs, &count)) { return (FALSE); } /* then deal with the array */ for (ip = (*ipp)->values; (count > 0) && stat; count--) stat = h4_xdr_int(xdrs, ip++); return (stat); } return (FALSE); } /* * How much space will the xdr'd iarray take. */ int NC_xlen_iarray(NC_iarray *iarray) { int len = 4; if (iarray != NULL) { len += iarray->count * 4; } return (len); } hdf4-hdf4.3.1/mfhdf/libsrc/mf_priv.h000066400000000000000000000043121503061704500172040ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /****************************************************************************** file - mf_priv.h This file contains prototypes of private functions that are implemented in mfsd.c. Some of them are used by new functions in mfdatainfo.c. The new file mfdatainfo.c keeps raw-data-information related functions separately from the rest of the API. These functions were introduced by the hmap project. ******************************************************************************/ #ifndef MFH4_MF_PRIV_H #define MFH4_MF_PRIV_H #include "nc_priv.h" /* Get the dimension record */ NC_dim *SDIget_dim(NC *handle, int32 id); /* Get the handle from this object */ NC *SDIhandle_from_id(int32 id, intn typ); /* Get the variable record */ NC_var *SDIget_var(NC *handle, int32 sdsid); /* Put an attribute in an attribute list */ intn SDIputattr(NC_array **ap, const char *name, int32 nt, intn count, const void *data); /* Get index of coordinate variable */ int32 SDIgetcoordvar(NC *handle, NC_dim *dim, int32 id, int32 nt); /* Free a variables AID */ int32 SDIfreevarAID(NC *handle, int32 index); /* Get the attribute list */ intn SDIapfromid(int32 id, NC **handlep, NC_array ***app); /* Check permission on the file */ int SDI_can_clobber(const char *name); #endif /* MFH4_MF_PRIV_H */ hdf4-hdf4.3.1/mfhdf/libsrc/mfdatainfo.c000066400000000000000000001016331503061704500176510ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* NOTE: this file and other "datainfo" related files will be configured so that this feature will not be built by default. -BMR Update: THG and NASA had decided to include all features developed for the HDF Mapping Project in the library -BMR (~Jan 2011) */ /****************************************************************************** FILE mfdatainfo.c This file contains the multi-file SD interface functions that provide information about location and size of raw data. This type of information will allow applications to extract raw data from an HDF file without the use of HDF4 library. These features were developed to support the HDF4 Mapping project (2010-2011.) As with the rest of the SD API, these functions have names beginning with SD. EXPORTED ROUTINES ----------------- SDgetdatainfo -- retrieves location and size of an SDS' data SDgetattdatainfo -- retrieves location and size of an attribute's data SDgetoldattdatainfo -- retrieves location and size of an old-style attribute's data SDgetanndatainfo -- retrieves location and size of an annotation's data LOCAL ROUTINES -------------- get_attr_tag -- Convert the name of an attribute to its associated hdf tag ******************************************************************************/ #include "nc_priv.h" #include "mfhdf.h" #include "mf_priv.h" #ifdef H4_HAVE_LIBSZ /* we have the szip library */ #include "szlib.h" #endif /* Local function prototypes */ static intn get_attr_tag(char *attr_name, uint16 *attr_tag); /****************************************************************************** NAME SDgetdatainfo -- Retrieves location and size of data blocks. USAGE intn SDgetdatainfo(sdsid, chk_coord, start_block, info_count, offsetarray, lengtharray) int32 sdsid IN: dataset ID int32 *chk_coord IN: chunk coord array or NULL for non-chunk SDS int32 start_block IN: indicating where to start reading offsets uintn info_count IN: number of data blocks the arrays can hold int32 *offsetarray OUT: array for offsets int32 *lengtharray OUT: array for lengths RETURNS The number of data blocks retrieved if successful and FAIL, otherwise. DESCRIPTION SDgetdatainfo retrieves two lists, one containing offsets to sdsid's data blocks and the other containing the lengths of those blocks. If start_block is 0, SDgetdatainfo will start getting data info from the beginning of the data set's data. If start_block is greater than the number of blocks in the data set's data, SDgetdatainfo will return FAIL. When both offsetarray and lengtharray lists are NULL, SDgetdatainfo will call HDgetdatainfo passing in NULLs to return the actual number of blocks in the data set's data. Otherwise, it will pass in non-NULL arrays to retrieve the offset and length of data blocks in the specified data set. The non-NULL lists are assumed to be allocated sufficiently for holding info_count values. If info_count is larger than the actual number of offsets/lengths starting at start_block to the end of the data, then only the actual number offsets/lengths will be retrieved. MODIFICATION BMR - 2010/07/14: Revised to combine SDgetdatainfo and SDgetdatainfo_count ******************************************************************************/ intn SDgetdatainfo(int32 sdsid, int32 *chk_coord, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray) { NC *handle; NC_var *var; intn count = FAIL; /* number of data blocks */ intn ret_value = 0; /* Clear error stack */ HEclear(); /* Validate arguments */ /* Getting only offsets or lengths is not allowed */ if ((offsetarray != NULL && lengtharray == NULL) || (offsetarray == NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Just in case user forgot to allocate buffers */ if ((offsetarray == NULL && lengtharray == NULL) && (info_count > 0)) HGOTO_ERROR(DFE_NOTENOUGH, FAIL); /* Get NC_var record */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If the data ref# of the SDS is 0, there is no storage is created yet */ if (var->data_ref == 0) { count = 0; /* no blocks */ } else { /* If both arrays are NULL, get the number of data blocks and return */ if (offsetarray == NULL && lengtharray == NULL) { count = HDgetdatainfo(handle->hdf_file, var->data_tag, var->data_ref, chk_coord, start_block, info_count, NULL, NULL); if (count == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Application requests actual offsets/lengths */ else { count = HDgetdatainfo(handle->hdf_file, var->data_tag, var->data_ref, chk_coord, start_block, info_count, offsetarray, lengtharray); if (count == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* Returning number of data blocks */ ret_value = count; done: return ret_value; } /* SDgetdatainfo */ /****************************************************************************** NAME SDgetattdatainfo -- Retrieves location and size of attribute's data. USAGE intn SDgetattdatainfo(id, attrindex, offset, length) int32 id IN: file ID, SDS ID, or dimension ID int32 attrindex IN: index of the attribute being inquired int32 *offset OUT: offset of attribute's data int32 *length OUT: length of attribute's data RETURNS The number of data blocks retrieved, which should be 1, if successful and FAIL, otherwise. DESCRIPTION There are attributes created by SD API functions and those created by the DFSD API functions. When the searched attribute was created by the SD API, the attribute would be stored in a vdata. Thus, SDgetattdatainfo will use VSgetdatainfo to get the location and length of the attribute's. When the searched attribute was created by the DFSD API, it would be stored with the SDS via an attribute tag/ref pair. Refer to the function header of SDgetoldattdatainfo for more details. The application will need to call SDgetoldattdatainfo to get data info for this type of attributes. Thus, SDgetattdatainfo will return to caller with error code DFE_NOVGREP so caller can call SDgetoldattdatainfo to get to its attributes directly from the file. MODIFICATION 2010/10/14: Revised to remove the parameter attrname because, for hmap project, it makes sense to just provide the attribute index. -BMR ******************************************************************************/ intn SDgetattdatainfo(int32 id, int32 attrindex, int32 *offset, int32 *length) { NC *handle; NC_var *var; NC_dim *dim; int32 vg_ref = 0, /* ref# of the VG representing a file, SDS, or dim */ n_elements, /* number of elements in the file/SDS/dim vgroup */ vs_id = -1, /* VS id, needed while looking for _HDF_ATTRIBUTE */ vg_id = -1, /* id of the file/SDS/dimension vgroup */ var_idx; /* index of the variable representing the given dim */ char vsclass[H4_MAX_NC_CLASS] = "", /* vs class, is it _HDF_ATTRIBUTE? */ attrname[H4_MAX_NC_CLASS] = "", /* name of the given attribute */ vsname[H4_MAX_NC_CLASS] = ""; /* vs name to see if it's the inquired attr's name*/ int32 ntype = 0, /* need these because SDattrinfo doesn't... */ count = 0; /* ...take NULL pointers for not needed arguments */ int ii; intn status, /* returned value */ found, /* TRUE when attribute is found */ ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Validate arguments */ /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Index must be positive */ if (attrindex < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the attribute's name */ status = SDattrinfo(id, attrindex, attrname, &ntype, &count); if (status == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if the id given is a file id, or SDS id, or dimension id, and get appropriate info structure */ handle = SDIhandle_from_id(id, CDFTYPE); /* not a file id */ if (handle == NULL) { /* then check if it's SDS id */ handle = SDIhandle_from_id(id, SDSTYPE); /* not an SDS id */ if (handle == NULL) { /* then check if it's a dimension id */ handle = SDIhandle_from_id(id, DIMTYPE); /* not a dimension id either, return with an error */ if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* dimension id is given, get the dimension info */ dim = SDIget_dim(handle, id); if (dim == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* look for the variable representing this dimension, ie. coordinate variable */ var_idx = SDIgetcoordvar(handle, dim, id, (int32)0); if (var_idx == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the variable object */ var = NC_hlookupvar(handle, var_idx); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the ref number of the vgroup representing this dim */ vg_ref = var->vgid; /* If this dimension is not represented by a vgroup (old dimension, HDF 3.2, released in 1993) return to caller with error code DFE_NOVGREP so caller can call SDgetoldattdatainfo to get to its attributes directly from the file */ if (vg_ref == 0) HGOTO_DONE(DFE_NOVGREP); } /* SDS id is given */ else { /* get the variable record */ if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, id); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the reference number of the vgroup representing this SDS */ vg_ref = var->vgid; /* If this data set is not represented by a vgroup (old data set, HDF 3.2, released in 1993) return to caller with error code DFE_NOVGREP so caller can call SDgetoldattdatainfo to get to its attributes directly from the file */ if (vg_ref == 0) HGOTO_DONE(DFE_NOVGREP); } } /* File id is given */ else { /* make sure it is an HDF file */ if (handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the reference number of the vgroup representing the file */ vg_ref = handle->vgid; /* I believe file did not have the case of old pre-defined attributes, so no special handling for DFE_NOVGREP here. -BMR 2011/1/11 */ /* Validate the vgroup ref# */ if (vg_ref == 0) HGOTO_ERROR(DFE_ARGS, FAIL); } /* Get access to the vgroup and get the number of elements belong to it */ vg_id = Vattach(handle->hdf_file, vg_ref, "r"); if (vg_id == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); n_elements = Vntagrefs(vg_id); if (n_elements == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Look through the vgroup for vdatas of class _HDF_ATTRIBUTE. If one is found, check to see if its name matches the searched attribute. If it matches, use VSgetdatainfo to get offset and length of the attribute's data, then set flag to terminate the search */ found = FALSE; for (ii = 0; ii < n_elements && !found; ii++) { int32 elem_tag, elem_ref; /* get current tag/ref */ if (Vgettagref(vg_id, ii, &elem_tag, &elem_ref) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* current element is a vdata */ if (elem_tag == DFTAG_VH) { vs_id = VSattach(handle->hdf_file, elem_ref, "r"); if (vs_id == FAIL) HGOTO_ERROR(DFE_CANTATTACH, FAIL); /* get the vdata's class */ if (VSgetclass(vs_id, vsclass) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* current vdata represents an attribute */ if (!strcmp(vsclass, _HDF_ATTRIBUTE)) { /* get the vdata's name */ if (VSgetname(vs_id, vsname) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* the searched attribute if found */ if (!strcmp(attrname, vsname)) { intn info_count = 0; /* get offset/length of attribute's data */ info_count = VSgetdatainfo(vs_id, 0, 1, offset, length); /* attribute data should only be in 1 block */ if (info_count != 1) /* attribute data should only be in 1 block */ HGOTO_ERROR(DFE_INTERNAL, FAIL); /* set flag to terminate the search, and return info count*/ found = TRUE; ret_value = info_count; } } /* Close access to vdata */ if (VSdetach(vs_id) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); vs_id = -1; } } /* Close access to the vgroup */ if (Vdetach(vg_id) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); done: if (ret_value == FAIL) { /* Failure cleanup */ if (vs_id != -1) if (VSdetach(vs_id) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); if (vg_id != -1) if (Vdetach(vg_id) == FAIL) HGOTO_ERROR(DFE_CANTDETACH, FAIL); } return ret_value; } /* SDgetattdatainfo */ /****************************************************************************** NAME get_attr_tag -- Convert the name of a pre-defined attribute to its associated hdf tag (Private) USAGE intn get_attr_tag(attr_name, *attr_tag) char *attr_name IN: name of the luf attributes uint16 *attr_tag OUT: associated tag of luf RETURNS SUCCEED/FAIL DESCRIPTION In older files, when there were only pre-defined attributes, an attribute was not stored in vdata, but was located by an attribute tag/ref pair, which is an element of the group that represents the SDS. The values of the SDS's attribute are followed by the values of its dimensions' attributes, each separated by a null character. This function gives the associated tag of an attributes so that application can use tag/ref to read the attribute string. ******************************************************************************/ static intn get_attr_tag(char *attr_name, uint16 *attr_tag) { intn ret_value = SUCCEED; if (strcmp(_HDF_LongName, attr_name) == 0) *attr_tag = DFTAG_SDL; else if (strcmp(_HDF_Units, attr_name) == 0) *attr_tag = DFTAG_SDU; else if (strcmp(_HDF_Format, attr_name) == 0) *attr_tag = DFTAG_SDF; else if (strcmp(_HDF_CoordSys, attr_name) == 0) *attr_tag = DFTAG_SDC; else if ((strcmp(_HDF_ValidMin, attr_name) == 0) || (strcmp(_HDF_ValidMax, attr_name) == 0) || (strcmp(_HDF_ValidRange, attr_name) == 0)) *attr_tag = DFTAG_SDM; else if (strcmp(_FillValue, attr_name) == 0) *attr_tag = DFTAG_FV; else if ((strcmp(_HDF_CalibratedNt, attr_name) == 0) || (strcmp(_HDF_ScaleFactor, attr_name) == 0) || (strcmp(_HDF_ScaleFactorErr, attr_name) == 0) || (strcmp(_HDF_AddOffset, attr_name) == 0) || (strcmp(_HDF_AddOffsetErr, attr_name) == 0)) *attr_tag = DFTAG_CAL; /* We need to decide how to handle this attribute when we see it... else case DFTAG_SDLNK: */ else { ret_value = FAIL; fprintf(stderr, "get_attr_tag: attr_name = <%s> is not recognized currently\n", attr_name); } return ret_value; } /* get_attr_tag */ /****************************************************************************** NAME SDgetoldattdatainfo -- Retrieves location and size of old predefined attribute's data. USAGE intn SDgetoldattdatainfo(id, sdsid, attr_name, offset, length) int32 dim_id IN: dimension ID int32 sdsid IN: ID of dataset the dim belongs to char *attr_name IN: name of the attribute being inquired int32 *offset OUT: buffer for offset int32 *length OUT: buffer for length RETURNS The number of data blocks retrieved, which should be 1, if successful and FAIL, otherwise. DESCRIPTION In some older files, when data sets and dimensions were not stored as vgroup yet, the pre-defined attributes that belong to the data sets and dimensions were written as followed: attr_tag/attr_ref specify offset and length of the attribute string such as: "nullnullnull..." Some examples of attr_tag are: (refer to htags.h for more) DFTAG_SDL for Labels attribute DFTAG_SDU for Units attribute ... SDgetoldattdatainfo retrieves the offset and length of the attribute that belongs to a data set or a dimension. Note that only Label, Units, and Format (LUF) are applicable to dimensions. The other attributes are only available to the data set. DESIGN NOTE: This function could be modified to return lists of offsets and lengths for attributes of data set and dimension in one call, in the case of LUF. That approach would reduce the need to go over the attribute strings multiple times for each dimension. However, it is pending on how the map writer uses the function. -BMR (2011/1/13) It seemed to suit the writer so we stay with this design at this time. -BMR (2011/3/1) MODIFICATION 2011/1/11: Revised to handle offset/length of SDS' attribute too. -BMR ******************************************************************************/ intn SDgetoldattdatainfo(int32 dim_id, int32 sdsid, char *attr_name, int32 *offset, int32 *length) { NC *handle; NC_var *var; int32 off, len, dim_att_len = 0, sdsluf_len = 0, offp = 0; char *lufbuf = NULL, *lufp = NULL; uint16 att_tag, att_ref; intn dimidx_infile = 0, dimidx_invar = 0; intn isdim = 0; int ii; intn status, /* returned value */ ret_value = 0; /* Clear error stack */ HEclear(); /* Both buffers must be allocated */ if (offset == NULL || length == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Attribute name must be provided */ if (attr_name == NULL || attr_name[0] == '\0') HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if a dimension ID is given then set flag */ handle = SDIhandle_from_id(dim_id, DIMTYPE); if (handle != NULL) isdim = 1; /* Check if the given dataset ID really is a dataset ID; dataset ID must always be available */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the variable object of the dataset */ var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If this variable doesn't have a valid NDG ref, we cannot proceed */ if (var->ndg_ref == 0) HGOTO_ERROR(DFE_ARGS, FAIL); att_tag = 0; att_ref = var->ndg_ref; /* all elements of this var have the same ref# */ /* Convert a predefined attribute name into its corresponding HDF tag */ status = get_attr_tag(attr_name, &att_tag); if (status == FAIL) HGOTO_ERROR(DFE_ARGS, FAIL); if (att_tag != 0 && att_ref != 0) { /* Get offset/length of the attribute values. */ off = Hoffset(handle->hdf_file, att_tag, att_ref); if (off == FAIL) HGOTO_ERROR(DFE_BADOFFSET, FAIL); len = Hlength(handle->hdf_file, att_tag, att_ref); if (len == FAIL) HGOTO_ERROR(DFE_BADLEN, FAIL); /* If the attribute pointed to by "off" and "len" is a LUF string, which includes LUFs of the data set and its dimensions all together, then parse the string to obtain offsets/lengths of the data set's LUF and of the dimensions' LUFs. Otherwise, return "off" and "len" for the inquired attribute. */ if (att_tag != DFTAG_SDL && att_tag != DFTAG_SDU && att_tag != DFTAG_SDF) { *offset = off; *length = len; HGOTO_DONE(1); } if (len == 0) { HGOTO_DONE(0); } /* Read the luf string */ lufbuf = malloc(len + 1); if (lufbuf == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); Hgetelement(handle->hdf_file, att_tag, att_ref, (uint8 *)lufbuf); /* * Parse the luf string to obtain the offset/length of the requested luf */ /* Start at the beginning of the data set's luf */ lufp = lufbuf; /* Get the length of the data set's luf */ sdsluf_len = strlen(lufbuf); /* If data set's attribute is being inquired, then return with offset and length of the SDS' attribute's data only */ if (!isdim) { *offset = off; *length = sdsluf_len; } /* If a dimension's attribute is being inquired, then continue parsing the attribute string to get the appropriate dimension's attribute */ else { char *dim_att = NULL; /* to hold a dimension's attribute */ /* Move cursor forward to the first dimension's attribute */ lufp += sdsluf_len + 1; /* Convert dimension id back to index */ dimidx_infile = dim_id & 0xffff; /* The dimidx_infile is the index of the dimension relative to the file. We need to find the index of dim within the variable */ dimidx_invar = -1; for (ii = 0; ii < var->assoc->count && dimidx_invar != ii; ii++) if (var->assoc->values[ii] == dimidx_infile) dimidx_invar = ii; /* Walk through each dimension to find requested luf */ offp = 0; /* offset pointer */ for (ii = 0; ii <= dimidx_invar; ii++) { /* NOTE: Should make tests for all cases to make sure all empty attributes are covered -BMR */ /* If dimension doesn't have attribute, its attr len is 0 */ if (strlen(lufp) == 0) dim_att_len = 0; /* If dimension has attribute, calculate its attr length */ else { dim_att = malloc(strlen(lufp) + 1); if (dim_att == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Extract current dimension's attribute */ strcpy(dim_att, (char *)lufp); dim_att[strlen(lufp)] = 0; dim_att_len = strlen(dim_att); } /* Move forward if this is not the dim we're looking for */ if (ii != dimidx_invar) { /* move cursor forward to the next dimension's attribute */ lufp += dim_att_len + 1; /* <- 1 is for the NULL */ /* add the length to the offset so far */ offp += dim_att_len + 1; } free(dim_att); dim_att = NULL; } /* Calculate offset and length of the requested dimension's luf */ /* - off: offset where luf string starts, returned by Hoffset */ /* - sdsluf_len: length of the dataset luf + 1 for the null space */ /* - offp: offset accumulated of all dimension lufs before the */ /* requested one */ *offset = off + sdsluf_len + 1 + offp; *length = dim_att_len; } ret_value = 1; } free(lufbuf); done: if (ret_value == FAIL) { /* Failure cleanup */ free(lufbuf); } return ret_value; } /* SDgetoldattdatainfo */ /****************************************************************************** NAME SDgetanndatainfo -- Retrieves location and size of annotations' data. USAGE intn SDgetanndatainfo(sdsid, annot_type, size, offsetarray, lengtharray) int32 sdsid IN: SDS ID ann_type annot_type IN: type of annotations to retrieve data info uintn size IN: size of offsetarray and lengtharray int32 *offsetarray OUT: offsets of annotations' data int32 *lengtharray OUT: lengths of annotations' data RETURNS The number of annotation data info retrieved, if successful and FAIL, otherwise. DESCRIPTION SDgetanndatainfo retrieves the location and size specifying data of the annotations of the specified type from the dataset. There may be more than one annotations, but each annotation has only one block of data. IMPORTANT NOTE If caller provides buffers that are smaller than the number of annotations then SDgetanndatainfo only fills the buffers up to its size, and returns the number of annotations retrieved. That means, the rest of the annotations are not retrievable. However, this function is designed for hmap writer at this point, and such insufficient buffers situation is not anticipated, beside the fact that we're running out of time. In the future, or when such need arises, the function should be modified to include another parameter to allow retrieving partial annotations. -BMR 2011/1/9 ******************************************************************************/ intn SDgetanndatainfo(int32 sdsid, ann_type annot_type, uintn size, int32 *offsetarray, int32 *lengtharray) { int32 file_id = FAIL, /* file, AN API, annotation IDs */ an_id = FAIL, ann_id = FAIL; NC *handle = NULL; /* file structure */ int32 *dannots = NULL, /* list of data annotation IDs */ n_flabels = 0, /* number of file labels */ n_fdescs = 0, /* number of file descriptions */ n_dlabels = 0, /* number of object labels */ n_ddescs = 0; /* number of file descriptions */ uint16 elem_tag, elem_ref; /* tag/ref of dataset's NDG */ intn num_annots = -1, /* number of annotation of requested type */ ii, ret_value = 0; /* Clear error stack */ HEclear(); /* Validate array size */ if (size == 0 && (offsetarray != NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Getting only offsets or lengths is not allowed */ if ((offsetarray != NULL && lengtharray == NULL) || (offsetarray == NULL && lengtharray != NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if the given id is a file id */ handle = SDIhandle_from_id(sdsid, CDFTYPE); /* It is a file id, process its annotations appropriately */ if (handle != NULL) { /* Open file to start Annotation interface */ if ((file_id = Hopen(handle->path, DFACC_READ, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if ((an_id = ANstart(file_id)) == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Validate annotation type */ if (annot_type != AN_FILE_LABEL && annot_type != AN_FILE_DESC) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get numbers of file annotations */ ret_value = ANfileinfo(an_id, &n_flabels, &n_fdescs, &n_dlabels, &n_ddescs); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (annot_type == AN_FILE_LABEL) num_annots = n_flabels; else num_annots = n_fdescs; if (num_annots < 0) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* If offsets and lengths are not desired, return the number of annots */ if (offsetarray == NULL || lengtharray == NULL) HGOTO_DONE(num_annots); /* If more annotations than space in user's buffers, only fill up buffers */ if ((uintn)num_annots > size) num_annots = size; /* Get offset/length of each annotation of the specified type */ for (ii = 0; ii < num_annots; ii++) { intn status; /* Get access to an annotation of the specified type */ ann_id = ANselect(an_id, ii, annot_type); if (ann_id == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Get annotation's offset and length */ ret_value = ANgetdatainfo(ann_id, &offsetarray[ii], &lengtharray[ii]); /* Close the annotation (now, just in case ANgetdatainfo failed) */ status = ANendaccess(ann_id); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (status == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } } /* Not a file ID */ else { /* Check if the given dataset ID really is a dataset ID */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle != NULL) { /* Validate annotation type */ if (annot_type != AN_DATA_LABEL && annot_type != AN_DATA_DESC) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the NDG ref of this dataset */ elem_ref = SDidtoref(sdsid); elem_tag = DFTAG_NDG; /* If this var doesn't have a valid NDG ref, we cannot proceed */ if (elem_ref <= 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* Open file to start Annotation interface */ if ((file_id = Hopen(handle->path, DFACC_READ, 0)) == FAIL) HGOTO_ERROR(DFE_BADOPEN, FAIL); if ((an_id = ANstart(file_id)) == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* Get number of data descs or labels with this tag/ref */ num_annots = ANnumann(an_id, annot_type, elem_tag, elem_ref); if (num_annots == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); else if (num_annots == 0) /* then try SDG */ { elem_tag = DFTAG_SDG; num_annots = ANnumann(an_id, annot_type, elem_tag, elem_ref); /* If there are no SDG annotations either then return 0 */ if (num_annots == 0) HGOTO_DONE(0); } /* If offsets/lengths are not desired, return the number of annots */ if (offsetarray == NULL || lengtharray == NULL) HGOTO_DONE(num_annots); /* If more annotations than space in user's buffers, only fill up buffers */ if (num_annots > size) num_annots = size; /* Allocate space for list of annotation IDs on this tag/ref */ if ((dannots = malloc(num_annots * sizeof(int32))) == NULL) HGOTO_ERROR(DFE_NOSPACE, FAIL); /* Get list of annotations IDs on this tag/ref */ if (ANannlist(an_id, annot_type, elem_tag, elem_ref, dannots) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Note: these ann IDs seem to be closed by HAdestroy_group() but I'm not sure. MFAN needs to take care of them if not. -BMR */ /* Loop through the annotation list and get their offsets/lengths */ for (ii = 0; ii < num_annots; ii++) { /* Get annotation's offset and length */ ret_value = ANgetdatainfo(dannots[ii], &offsetarray[ii], &lengtharray[ii]); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* ID is an SDS */ } /* Not a file ID */ /* Return the number of annotations retrieved */ ret_value = num_annots; done: /* Release allocated memory */ free(dannots); /* Terminate access to the AN API and close the file if they are opened */ if (an_id != FAIL) ANend(an_id); if (file_id != FAIL) Hclose(file_id); return ret_value; } /* SDgetanndatainfo */ hdf4-hdf4.3.1/mfhdf/libsrc/mfdatainfo.h000066400000000000000000000026371503061704500176620ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef MFH4_MFDATAINFO_H #define MFH4_MFDATAINFO_H #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * * mfdatainfo.h * * The public APIs in this file were moved into mfhdf.h in version 4.3.0. * Applications don't need to and should no longer include this header file. * ******************************************************************************/ #ifdef __cplusplus } #endif #endif /* MFH4_MFDATAINFO_H */ hdf4-hdf4.3.1/mfhdf/libsrc/mfhdf.h000066400000000000000000000406151503061704500166340ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef MFH4_MFHDF_H #define MFH4_MFHDF_H /* Formerly used to divide up the HDF and netCDF code. The symbol is retained * since it's technically in the public API. */ #ifndef HDF #define HDF 1 #endif #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #define SD_UNLIMITED NC_UNLIMITED /* use this as marker for unlimited dimension */ #define SD_NOFILL NC_NOFILL #define SD_FILL NC_FILL #define SD_DIMVAL_BW_COMP 1 #define SD_DIMVAL_BW_INCOMP 0 #define SD_RAGGED -1 /* marker for ragged dimension */ /* enumerated type used to specify whether a variable is an SDS, coordinate * variable, or its type is unknown because it was created before HDF4.2r2 * * NOTE: Formerly in mfhdfi.h */ typedef enum { IS_SDSVAR = 0, /* variable is an actual SDS */ IS_CRDVAR = 1, /* variable is a coordinate variable */ UNKNOWN = 2 /* variable is created before HDF4.2r2, unknown type */ } hdf_vartype_t; /* used to indicate the type of the variable at an index */ typedef struct hdf_varlist { int32 var_index; /* index of the current variable */ hdf_vartype_t var_type; /* type of a variable (IS_SDSVAR, IS_CRDVAR, or UNKNOWN */ } hdf_varlist_t; /* enumerated types for various types of ids in SD interface */ typedef enum { NOT_SDAPI_ID = -1, /* not an SD API id */ SD_ID = 0, /* SD id */ SDS_ID, /* SDS id */ DIM_ID /* Dimension id */ } hdf_idtype_t; #ifdef __cplusplus extern "C" { #endif HDFLIBAPI int32 SDstart(const char *name, int32 accs); HDFLIBAPI intn SDend(int32 fid); HDFLIBAPI intn SDfileinfo(int32 fid, int32 *datasets, int32 *attrs); HDFLIBAPI int32 SDselect(int32 fid, int32 idx); HDFLIBAPI intn SDgetinfo(int32 sdsid, char *name, int32 *rank, int32 *dimsizes, int32 *nt, int32 *nattr); HDFLIBAPI intn SDreaddata(int32 sdsid, int32 *start, int32 *stride, int32 *end, void *data); HDFLIBAPI uint16 SDgerefnumber(int32 sdsid); HDFLIBAPI int32 SDnametoindex(int32 fid, const char *name); HDFLIBAPI intn SDnametoindices(int32 fid, const char *name, hdf_varlist_t *var_list); HDFLIBAPI intn SDgetnumvars_byname(int32 fid, const char *name, int32 *n_vars); HDFLIBAPI intn SDgetrange(int32 sdsid, void *pmax, void *pmin); HDFLIBAPI int32 SDcreate(int32 fid, const char *name, int32 nt, int32 rank, int32 *dimsizes); HDFLIBAPI int32 SDgetdimid(int32 sdsid, intn number); HDFLIBAPI intn SDsetdimname(int32 id, const char *name); HDFLIBAPI intn SDendaccess(int32 id); HDFLIBAPI intn SDsetrange(int32 sdsid, void *pmax, void *pmin); HDFLIBAPI intn SDsetattr(int32 id, const char *name, int32 nt, int32 count, const void *data); HDFLIBAPI intn SDattrinfo(int32 id, int32 idx, char *name, int32 *nt, int32 *count); HDFLIBAPI intn SDreadattr(int32 id, int32 idx, void *buf); HDFLIBAPI intn SDwritedata(int32 sdsid, int32 *start, int32 *stride, int32 *end, void *data); HDFLIBAPI intn SDsetdatastrs(int32 sdsid, const char *l, const char *u, const char *f, const char *c); HDFLIBAPI intn SDsetcal(int32 sdsid, float64 cal, float64 cale, float64 ioff, float64 ioffe, int32 nt); HDFLIBAPI intn SDsetfillvalue(int32 sdsid, void *val); HDFLIBAPI intn SDgetfillvalue(int32 sdsid, void *val); HDFLIBAPI intn SDsetfillmode(int32 id, intn fillmode); HDFLIBAPI intn SDgetdatastrs(int32 sdsid, char *l, char *u, char *f, char *c, intn len); HDFLIBAPI intn SDgetcal(int32 sdsid, float64 *cal, float64 *cale, float64 *ioff, float64 *ioffe, int32 *nt); HDFLIBAPI intn SDsetdimstrs(int32 id, const char *l, const char *u, const char *f); HDFLIBAPI intn SDsetdimscale(int32 id, int32 count, int32 nt, void *data); HDFLIBAPI intn SDgetdimscale(int32 id, void *data); HDFLIBAPI intn SDdiminfo(int32 id, char *name, int32 *size, int32 *nt, int32 *nattr); HDFLIBAPI intn SDgetdimstrs(int32 id, char *l, char *u, char *f, intn len); HDFLIBAPI intn SDgetexternalfile(int32 id, intn buf_size, char *ext_filename, int32 *offset); HDFLIBAPI intn SDgetexternalinfo(int32 id, uintn buf_size, char *ext_filename, int32 *offset, int32 *length); HDFLIBAPI intn SDsetexternalfile(int32 id, const char *filename, int32 offset); HDFLIBAPI intn SDsetnbitdataset(int32 id, intn start_bit, intn bit_len, intn sign_ext, intn fill_one); HDFLIBAPI intn SDsetcompress(int32 id, comp_coder_t type, comp_info *c_info); #ifndef H4_NO_DEPRECATED_SYMBOLS HDFLIBAPI intn SDgetcompress(int32 id, comp_coder_t *type, comp_info *c_info); #endif HDFLIBAPI intn SDgetcompinfo(int32 id, comp_coder_t *type, comp_info *c_info); HDFLIBAPI intn SDgetcomptype(int32 id, comp_coder_t *type); HDFLIBAPI int32 SDfindattr(int32 id, const char *attrname); HDFLIBAPI int32 SDidtoref(int32 id); HDFLIBAPI int32 SDreftoindex(int32 fid, int32 ref); HDFLIBAPI int32 SDisrecord(int32 id); HDFLIBAPI intn SDiscoordvar(int32 id); HDFLIBAPI intn SDsetaccesstype(int32 id, uintn accesstype); HDFLIBAPI intn SDsetblocksize(int32 sdsid, int32 block_size); HDFLIBAPI intn SDgetblocksize(int32 sdsid, int32 *block_size); HDFLIBAPI intn SDsetdimval_comp(int32 dimid, intn compt_mode); HDFLIBAPI intn SDisdimval_bwcomp(int32 dimid); HDFLIBAPI int32 SDcheckempty(int32 sdsid, intn *emptySDS); HDFLIBAPI hdf_idtype_t SDidtype(int32 an_id); HDFLIBAPI intn SDreset_maxopenfiles(intn req_max); HDFLIBAPI intn SDget_maxopenfiles(intn *curr_max, intn *sys_limit); HDFLIBAPI intn SDget_numopenfiles(void); HDFLIBAPI intn SDgetdatasize(int32 sdsid, int32 *comp_size, int32 *uncomp_size); HDFLIBAPI intn SDgetfilename(int32 fid, char *filename); HDFLIBAPI intn SDgetnamelen(int32 sdsid, uint16 *name_len); /*====================== Chunking Routines ================================*/ /* For definition of HDF_CHUNK_DEF union see hproto.h since this definition is also used by GRs. */ /****************************************************************************** NAME SDsetchunk -- make SDS a chunked SDS DESCRIPTION This routine makes the SDS a chunked SDS according to the chunk definition passed in. The dataset currently cannot be special already. i.e. NBIT, COMPRESSED, or EXTERNAL. This is an Error. The definition of the HDF_CHUNK_DEF union with relevant fields is: typedef union hdf_chunk_def_u { int32 chunk_lengths[H4_MAX_VAR_DIMS]; Chunk lengths along each dimension struct { int32 chunk_lengths[H4_MAX_VAR_DIMS]; Chunk lengths along each dimension int32 comp_type; Compression type comp_info cinfo; Compression info struct }comp; } HDF_CHUNK_DEF The simplest is the 'chunk_lengths' array specifying chunk lengths for each dimension where the 'flags' argument set to 'HDF_CHUNK'; COMPRESSION is set by using the 'HDF_CHUNK_DEF' structure to set the appropriate compression information along with the required chunk lengths for each dimension. The compression information is the same as that set in 'SDsetcompress()'. The bit-or'd'flags' argument' is set to 'HDF_CHUNK | HDF_COMP'. See the example in pseudo-C below for further usage. The maximum number of Chunks in an HDF file is 65,535. The dataset currently cannot have an UNLIMITED dimension. The performance of the SDxxx interface with chunking is greatly affected by the users access pattern over the dataset and by the maximum number of chunks set in the chunk cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. See the routine SDsetchunkcache() for further info on the chunk cache and how to set the maximum number of chunks in the chunk cache. A default chunk cache is always created. The following example shows the organization of chunks for a 2D array. e.g. 4x4 array with 2x2 chunks. The array shows the layout of chunks in the chunk array. 4 --------------------- | | | Y | (0,1) | (1,1) | ^ | | | | 2 --------------------- | | | | | | (0,0) | (1,0) | | | | | | --------------------- | 0 2 4 ---------------> X --Without compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set Chunking -- SDsetchunk(sdsid, chunk_def, HDF_CHUNK); ...... } --With compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths first -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set compression -- chunk_def.comp.cinfo.deflate.level = 9; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; -- Set Chunking with Compression -- SDsetchunk(sdsid, chunk_def, HDF_CHUNK | HDF_COMP); ...... } RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn SDsetchunk(int32 sdsid, /* IN: sds access id */ HDF_CHUNK_DEF chunk_def, /* IN: chunk definition */ int32 flags /* IN: flags */); /****************************************************************************** NAME SDgetchunkinfo -- get Info on SDS DESCRIPTION This routine gets any special information on the SDS. If its chunked, chunked and compressed or just a regular SDS. Currently it will only fill the array of chunk lengths for each dimension as specified in the 'HDF_CHUNK_DEF' union. It does not tell you the type of compression used or the compression parameters. You can pass in a NULL for 'chunk_def' if don't want the chunk lengths for each dimension. Additionally if successful it will return a bit-or'd value in 'flags' indicating if the SDS is: Chunked -> flags = HDF_CHUNK Chunked and compressed -> flags = HDF_CHUNK | HDF_COMP Non-chunked -> flags = HDF_NONE e.g. 4x4 array - Pseudo-C { int32 rcdims[3]; HDF_CHUNK_DEF rchunk_def; int32 cflags; ... rchunk_def.chunk_lengths = rcdims; SDgetchunkinfo(sdsid, &rchunk_def, &cflags); ... } RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn SDgetchunkinfo(int32 sdsid, /* IN: sds access id */ HDF_CHUNK_DEF *chunk_def, /* IN/OUT: chunk definition */ int32 *flags /* IN/OUT: flags */); /****************************************************************************** NAME SDwritechunk -- write the specified chunk to the SDS DESCRIPTION This routine writes a whole chunk of data to the chunked SDS specified by chunk 'origin' for the given SDS and can be used instead of SDwritedata() when this information is known. This routine has less overhead and is much faster than using SDwritedata(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See SDsetchunk() for a description of the organization of chunks in an SDS. RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn SDwritechunk(int32 sdsid, /* IN: sds access id */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */); /****************************************************************************** NAME SDreadchunk -- read the specified chunk to the SDS DESCRIPTION This routine reads a whole chunk of data from the chunked SDS specified by chunk 'origin' for the given SDS and can be used instead of SDreaddata() when this information is known. This routine has less overhead and is much faster than using SDreaddata(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See SDsetchunk() for a description of the organization of chunks in an SDS. RETURNS SUCCEED/FAIL ******************************************************************************/ HDFLIBAPI intn SDreadchunk(int32 sdsid, /* IN: sds access id */ int32 *origin, /* IN: origin of chunk to read */ void *datap /* IN/OUT: buffer for data */); /****************************************************************************** NAME SDsetchunkcache -- maximum number of chunks to cache DESCRIPTION Set the maximum number of chunks to cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. This routine allows the setting of maximum number of chunks that can be cached, 'maxcache'. The performance of the SDxxx interface with chunking is greatly affected by the users access pattern over the dataset and by the maximum number of chunks set in the chunk cache. The number chunks that can be set in the cache is process memory limited. It is a good idea to always set the maximum number of chunks in the cache as the default heuristic does not take into account the memory available for the application. By default when the SDS is promoted to a chunked element the maximum number of chunks in the cache 'maxcache' is set to the number of chunks along the last dimension. The values set here affects the current object's caching behaviour. If the chunk cache is full and 'maxcache' is greater then the current 'maxcache' value, then the chunk cache is reset to the new 'maxcache' value, else the chunk cache remains at the current 'maxcache' value. If the chunk cache is not full, then the chunk cache is set to the new 'maxcache' value only if the new 'maxcache' value is greater than the current number of chunks in the cache. Use flags argument of 'HDF_CACHEALL' if the whole object is to be cached in memory, otherwise pass in zero(0). Currently you can only pass in zero. See SDsetchunk() for a description of the organization of chunks in an SDS. RETURNS Returns the 'maxcache' value for the chunk cache if successful and FAIL otherwise ******************************************************************************/ HDFLIBAPI intn SDsetchunkcache(int32 sdsid, /* IN: sds access id */ int32 maxcache, /* IN: max number of chunks to cache */ int32 flags /* IN: flags = 0, HDF_CACHEALL */); /* ** Public functions for getting raw data information - from mfdatainfo.c */ HDFLIBAPI intn SDgetdatainfo(int32 sdsid, int32 *chk_coord, uintn start_block, uintn info_count, int32 *offsetarray, int32 *lengtharray); HDFLIBAPI intn SDgetattdatainfo(int32 id, int32 attrindex, int32 *offset, int32 *length); HDFLIBAPI intn SDgetoldattdatainfo(int32 dimid, int32 sdsid, char *attr_name, int32 *offset, int32 *length); HDFLIBAPI intn SDgetanndatainfo(int32 sdsid, ann_type annot_type, uintn size, int32 *offsetarray, int32 *lengtharray); #ifdef __cplusplus } #endif #endif /* MFH4_MFHDF_H */ hdf4-hdf4.3.1/mfhdf/libsrc/mfsd.c000066400000000000000000005576241503061704500165110ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /****************************************************************************** file - mfsd.c This file contains the HDF/netCDF based multi-file interface for SDSs All of the routines that make up this interface have names beginning with SD. Routines beginning with SDI are internal routines and should not be used outside of this module. SD interface: ------------------ --- open a file --- fid = SDstart(file name, access); --- get number of data sets and number of attributes in the file --- status = SDfileinfo(fid, *n_datasets, *n_attrs); --- select a data set for access --- sdsid = SDselect(fid, i, ...); 0 <= i < n_datasets --- return the name, rank, dimsizes, #of attr, datatype --- status = SDgetinfo(sdsid, ...); status = SDreaddata(sdsid, ...); status = SDgetrange(sdsid, ...); status = SDend(fid); status = SDisdimval_bwcomp(dimid); --- check whether a data set is empty status = SDcheckempty(sdsid, ...); --- retrieve the compression information of an SDS status = SDgetcompinfo(sdsid, ...); --- retrieve the compression method of an SDS status = SDgetcomptype(sdsid, ...); --- retrieve the compressed and uncompressed sizes of an SDS' data status = SDgetdatasize(sdsid, ...); --- take an id and determine if it is an SD id, SDS id, dim id, --- --- or none of the above --- id_type = SDidtype(an_id); --- reset the maximum number of files can be opened at a time. max_files = SDreset_maxopenfiles(req_max); --- retrieve the current number of opened files allowed in HDF and --- the maximum number of opened files allowed on a system. status = SDget_maxopenfiles(&curr_max, &sys_limit); --- return the number of files currently being opened. num_files = SDget_numopenfiles(); --- get the number of variables in the file having the given name. status = SDgetnumvars_byname(fid,...); --- map a dataset name to an index. index = SDnametoindex(int32 fid,...); --- retrieve a list of variables having the given name. status = SDnametoindices(fid,...); NOTE: This file needs to have the comments cleaned up for most of the functions here. -GV 9/10/97 ******************************************************************************/ #include "nc_priv.h" #include "mfhdf.h" #include "hfile_priv.h" #include "mf_priv.h" #ifdef H4_HAVE_LIBSZ /* we have the szip library */ #include "szlib.h" #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #endif /* Private function prototypes */ intn SDsetup_szip_parms(int32 id, NC *handle, comp_info *c_info, int32 *cdims); /* Whether we've installed the library termination function yet for this interface */ static intn library_terminate = FALSE; /****************************************************************************** NAME SDIhandle_from_id -- get the handle from this object DESCRIPTION Map an ID to the handle for this file RETURNS NULL or the handle ******************************************************************************/ NC * SDIhandle_from_id(int32 id, /* IN: an object (file, dim, dataset) ID */ intn typ /* IN: IN: the type of ID this is */) { int32 tmp; NC *ret_value = NULL; /* check that it is a valid id */ if (id == -1) HGOTO_ERROR(DFE_ARGS, NULL); /* check that it is the proper type of id */ tmp = (id >> 16) & 0x0f; if (tmp != typ) HGOTO_ERROR(DFE_ARGS, NULL); /* get the file from top 12 bits*/ tmp = (id >> 20) & 0xfff; ret_value = NC_check_id((int)tmp); done: return ret_value; } /* SDIhandle_from_id */ /****************************************************************************** NAME SDIget_var -- get the variable record DESCRIPTION Map an ID and a handle to the NC_var object for this dataset RETURNS NULL or the variable object ******************************************************************************/ NC_var * SDIget_var(NC *handle, /* IN: the handle for this file */ int32 sdsid /* IN: a dataset ID */) { int32 varid = -1; NC_array **ap = NULL; NC_var *ret_value = NULL; /* varid is low 16bits of sdsid */ varid = sdsid & 0xffff; if (handle->vars != NULL && varid >= 0 && varid < handle->vars->count) { ap = (NC_array **)handle->vars->values; ap += varid; } else HGOTO_ERROR(DFE_ARGS, NULL); ret_value = ((NC_var *)*ap); done: return ret_value; } /* SDIget_var */ /****************************************************************************** NAME SDIget_dim -- get the dimension record DESCRIPTION Map an ID and a handle to the NC_dim object for this dimension RETURNS NULL or the variable object ******************************************************************************/ NC_dim * SDIget_dim(NC *handle, /* IN: the handle for this file */ int32 id /* IN: a dimension ID */) { int32 dimindex; NC_array **ap = NULL; NC_dim *ret_value = NULL; /* dimindex is low 16bits of id */ dimindex = id & 0xffff; if (handle->dims != NULL && dimindex >= 0 && dimindex < handle->dims->count) { ap = (NC_array **)handle->dims->values; ap += dimindex; } else HGOTO_ERROR(DFE_ARGS, NULL); ret_value = ((NC_dim *)*ap); done: return ret_value; } /* SDIget_dim */ /****************************************************************************** NAME SDIstart -- initialize the SD interface DESCRIPTION Register the atexit callback function, etc. RETURNS SUCCEED/FAIL ******************************************************************************/ static intn SDIstart(void) { intn ret_value = SUCCEED; /* Don't call this routine again... */ library_terminate = TRUE; /* Install atexit() library cleanup routine */ if (HPregister_term_func(&SDPfreebuf) != 0) HGOTO_ERROR(DFE_CANTINIT, FAIL); done: return (ret_value); } /* end SDIstart() */ /****************************************************************************** NAME SDI_can_clobber -- check permission on the file DESCRIPTION Check the file permissions. If OK to clobber the file, return 1, else return 0. Called by SDstart. RETURNS 1 if OK to clobber 0 if not OK to overwrite ******************************************************************************/ int SDI_can_clobber(const char *name) { int res; struct stat buf; FILE *ff; res = stat(name, &buf); if (res < 0) { /* no such file, OK to try to create it */ return (1); } ff = HI_OPEN(name, DFACC_RDWR); if (ff != NULL) { /* OK to open for write, so OK to clobber it */ HI_CLOSE(ff); return (1); } /* no permission to write, don't do the create */ return (0); } /****************************************************************************** NAME SDstart -- open a file DESCRIPTION Open a file by calling ncopen() or nccreate() and return a file ID to the file. RETURNS A file ID or FAIL ******************************************************************************/ int32 SDstart(const char *name, /* IN: file name to open */ int32 HDFmode /* IN: access mode to open file with */) { intn cdfid = -1; int32 fid = -1; intn NCmode = -1; NC *handle = NULL; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* turn off annoying crash on error stuff */ ncopts = 0; /* Perform global, one-time initialization */ if (library_terminate == FALSE) if (SDIstart() == FAIL) HGOTO_ERROR(DFE_CANTINIT, FAIL); /* check access mode */ if (HDFmode & DFACC_WRITE) NCmode = NC_RDWR; else NCmode = NC_NOWRITE; if (HDFmode & DFACC_CREATE) { /* create file */ if (!SDI_can_clobber(name)) HGOTO_ERROR(DFE_DENIED, FAIL); cdfid = nccreate(name, NC_CLOBBER); } else { /* open the file */ cdfid = ncopen(name, NCmode); } /* check if bad create/open */ if (cdfid == -1) { /* catch what's on the stack; this is to catch specific error code, when the failure was due to "too many open files" -BMR- 2006/11/1 */ int16 err = HEvalue(1); HGOTO_ERROR(err, FAIL); } /* hmm.....*/ handle = NC_check_id(cdfid); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* set in 'define' mode? */ handle->flags &= ~(NC_INDEF); /* create file id to return */ fid = (((int32)cdfid) << 20) + (((int32)CDFTYPE) << 16) + cdfid; ret_value = fid; done: return ret_value; } /* SDstart */ /****************************************************************************** NAME SDend -- close a file DESCRIPTION Close the file RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDend(int32 id /* IN: file ID of file to close */) { intn cdfid; NC *handle = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get id? */ cdfid = (intn)id & 0xffff; /* get the handle */ handle = SDIhandle_from_id(id, CDFTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* make sure we can write to the file */ if (handle->flags & NC_RDWR) { handle->xdrs->x_op = XDR_ENCODE; /* see if the meta-data needs to be updated */ if (handle->flags & NC_HDIRTY) { if (!xdr_cdf(handle->xdrs, &handle)) HGOTO_ERROR(DFE_XDRERROR, FAIL); handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else { /* see if the numrecs info needs updating */ if (handle->flags & NC_NDIRTY) { if (!xdr_numrecs(handle->xdrs, handle)) { HGOTO_ERROR(DFE_XDRERROR, FAIL); } if (handle->file_type != HDF_FILE) handle->flags &= ~(NC_NDIRTY); } } } /* call netCDF close */ ret_value = ncclose(cdfid); done: return ret_value; } /* SDend */ /****************************************************************************** NAME SDfileinfo -- get info about an open file DESCRIPTION Return the number of datasets and global attributes in the file. NOTE: the number of datasets includes coordinate variable datasets. The routine SDiscoordvar() should be used if the distinction is important. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDfileinfo(int32 fid, /* IN: file ID */ int32 *datasets, /* OUT: number of datasets in the file */ int32 *attrs /* OUT: number of global attributes */) { NC *handle = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check that fid is valid and get file structure */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get number of data sets and global attributes */ *(int32 *)datasets = ((handle->vars != NULL) ? handle->vars->count : 0); *(int32 *)attrs = ((handle->attrs != NULL) ? handle->attrs->count : 0); done: return ret_value; } /* SDfileinfo */ /****************************************************************************** NAME SDselect -- get a dataset ID DESCRIPTION Return an id for the index-th data set in the file We've got 32bits, the current ID looks like: sdsID: 32 20 16 0 ---------------------------------------- | fid | id-type| position index | ---------------------------------------- fid is the netCDF based file ID (i.e. from ncopen). ID type is SDSTYPE defined in mfhdf.h and position index is the position in the file of this dataset. The position index is zero based RETURNS An ID to a dataset else FAIL ******************************************************************************/ int32 SDselect(int32 fid, /* IN: file ID */ int32 index /* IN: index of dataset to get ID for */) { NC *handle = NULL; int32 sdsid; /* the id we're gonna build */ int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* check that a data set with this index exists */ if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if ((unsigned)index >= handle->vars->count) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* create SDS id to return */ sdsid = (((int32)fid & 0xffff) << 20) + (((int32)SDSTYPE) << 16) + index; ret_value = sdsid; done: return ret_value; } /* SDselect */ /****************************************************************************** NAME SDgetinfo -- get info about a dataset DESCRIPTION The user is responsible for allocating space to hold the dataset name. It can be at most H4_MAX_NC_NAME characters in length. NULL can be passed for any of of the parameters if it is not required. dimsizes should be an array to hold the dimension sizes a dataset can have at most H4_MAX_VAR_DIMS dimensions. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetinfo(int32 sdsid, /* IN: dataset ID */ char *name, /* OUT: name of the dataset */ int32 *rank, /* OUT: rank of the dataset */ int32 *dimsizes, /* OUT: array of dimension siszes */ int32 *nt, /* OUT: number type of data */ int32 *nattrs /* OUT: the number of local attributes */) { intn i; NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* obtain the variable structure */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get sds name if it's requested */ if (name != NULL) { memcpy(name, var->name->values, var->name->len); name[var->name->len] = '\0'; } /* get sds' rank if it is requested */ if (rank != NULL) *rank = var->assoc->count; /* get sds' number type if it is requested */ if (nt != NULL) { if (!var->HDFtype) *nt = hdf_map_type(var->type); else *nt = var->HDFtype; } /* get sds' number of attributes if it is requested */ if (nattrs != NULL) *nattrs = (var->attrs ? var->attrs->count : 0); /* get sds' dimension sizes if they are requested */ if (dimsizes != NULL) { for (i = 0; i < var->assoc->count; i++) dimsizes[i] = (int32)var->shape[i]; if (dimsizes[0] == NC_UNLIMITED) { if (handle->file_type == HDF_FILE) dimsizes[0] = var->numrecs; else dimsizes[0] = handle->numrecs; } } done: return ret_value; } /* SDgetinfo */ /****************************************************************************** NAME SDreaddata -- read a hyperslab of data DESCRIPTION Read a hyperslab of data from the given variable. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDreaddata(int32 sdsid, /* IN: dataset ID */ int32 *start, /* IN: coords of starting point */ int32 *stride, /* IN: stride along each dimension */ int32 *end, /* IN: number of values to read per dimension */ void *data /* OUT: data buffer */) { NC *handle = NULL; NC_dim *dim = NULL; intn varid = -1; int32 status; comp_coder_t comp_type = COMP_CODE_INVALID; uint32 comp_config; NC_var *var = NULL; #ifdef H4_HAVE_LP64 long Start[H4_MAX_VAR_DIMS]; long End[H4_MAX_VAR_DIMS]; long Stride[H4_MAX_VAR_DIMS]; #else long *Start = NULL; long *End = NULL; long *Stride = NULL; #endif intn ret_value = SUCCEED; /* This decides how a dataset with unlimited dimension is read along the unlimited dimension; the behavior is different between SD and nc APIs */ cdf_routine_name = "SDreaddata"; /* Clear error stack */ HEclear(); /* Validate arguments */ if ((start == NULL) || (end == NULL) || (data == NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the NC_dim or NC_var depending on which id is given */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { handle = SDIhandle_from_id(sdsid, DIMTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); dim = SDIget_dim(handle, sdsid); } if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Dev note: empty SDS should have been checked here and SDreaddata would have failed, but since it wasn't, for backward compatibility, we won't do it now either. -BMR 2011 */ /* Check if compression method is enabled */ /* Make sure that the file is an HDF file before checking about compression */ if (handle->file_type == HDF_FILE) /* bug HDFFR-473 */ { status = HCPgetcomptype(handle->hdf_file, var->data_tag, var->data_ref, &comp_type); if (status != FAIL) if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_INVALID) { /* Must have decoder to read data */ HCget_config_info(comp_type, &comp_config); if ((comp_config & COMP_DECODER_ENABLED) == 0) { /* decoder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } } /* The case status=FAIL is not handled, not sure if it's intentional. -BMR */ } /* file is HDF */ /* Get ready to read */ handle->xdrs->x_op = XDR_DECODE; /* * Figure out the index of the variable to read from, * the user might have passed us a dimension, in which * case we want to reade from its coordinate variable */ if (dim) { varid = SDIgetcoordvar(handle, dim, (int32)(sdsid & 0xffff), (int32)0); } else { /* Derive the variable index from the SDS id, using the formula described in SDselect */ varid = (intn)sdsid & 0xffff; } /* * In general, (long) == int32 * In cases where it doesn't we need to convert */ #ifdef H4_HAVE_LP64 { int i; for (i = 0; i < var->assoc->count; i++) { Start[i] = (long)start[i]; End[i] = (long)end[i]; if (stride) Stride[i] = (long)stride[i]; } } #else Start = (long *)start; End = (long *)end; Stride = (long *)stride; #endif /* Validate stride value if given - make sure we don't try to "stride" */ /* beyond the dimension's end */ if (stride != NULL) { int i; int32 dimsize = (int32)var->shape[0]; /* Validate stride value of first dimension separately to catch */ /* unlimited dimension situation */ if (var->shape[0] == NC_UNLIMITED) { /* get the actual size */ if (handle->file_type == HDF_FILE) dimsize = var->numrecs; else dimsize = handle->numrecs; } if ((Stride[0] * (End[0] - 1)) >= (dimsize - Start[0])) HGOTO_ERROR(DFE_ARGS, FAIL); /* Validate subsequent dimensions if dataset is multi-dim */ for (i = 1; i < var->assoc->count; i++) if ((Stride[i] * (End[i] - 1)) >= ((int32)var->shape[i] - Start[i])) HGOTO_ERROR(DFE_ARGS, FAIL); } /* Call the readg routines if a stride is given */ if (stride == NULL) status = NCvario(handle, varid, Start, End, (Void *)data); else status = NCgenio(handle, varid, Start, End, Stride, NULL, (Void *)data); if (status == -1) ret_value = FAIL; else ret_value = SUCCEED; done: if (ret_value == FAIL) { if (var && var->aid != 0 && var->aid != FAIL) { Hendaccess(var->aid); var->aid = FAIL; } } return ret_value; } /* SDreaddata */ /****************************************************************************** NAME SDnametoindex -- map a dataset name to an index DESCRIPTION Given a data set name return the index (not ID) of the first data set whose name matches. There can be multiple data sets with the same name. In such a case, we only ever return the index of the first such dataset. Wildcards are not supported RETURNS Index of a dataset or FAIL ******************************************************************************/ int32 SDnametoindex(int32 fid, /* IN: file ID */ const char *name /* IN: name of dataset to search for */) { unsigned ii; intn len; NC *handle = NULL; NC_var **dp = NULL; int32 ret_value = FAIL; /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } len = strlen(name); dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, strlen(name)) == 0) { HGOTO_DONE((int32)ii); } } ret_value = FAIL; done: return ret_value; } /* SDnametoindex */ /****************************************************************************** NAME SDgetnumvars_byname -- get the number of variables in the file having the given name. DESCRIPTION Given a data set name, retrieve the number of variables in the file having the same name. Sometime, more than one SDS are named 'name' or a dimension of the SDS 'name' is also named 'name.' The user can use this function to find out how many of those having the same name. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetnumvars_byname(int32 fid, /* IN: file ID */ const char *name, /* IN: name of dataset to search for */ int32 *n_vars) { unsigned ii; intn len; int32 count = 0; NC *handle = NULL; NC_var **dp = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } len = strlen(name); dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, strlen(name)) == 0) count++; } *n_vars = count; done: return ret_value; } /* SDgetnumvars_byname */ /****************************************************************************** NAME SDnametoindices -- retrieves a list of variables having the given name. DESCRIPTION Given a data set name, retrieve a list of structures, each of which contains the index of a variable whose name matches the given name, and the type of the variable, which is either data set (IS_SDSVAR) or coordinate variable (IS_CRDVAR,) or (UNKNOWN.) UNKNOWN is for data created before the fix of a data corruption bug due to the library's inability to distinguish between those two types of variables. The fix was available starting in HDF4.2r2. This API is added to allow the user to examine all the variables having the given name and decide the correct one to gain access on. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDnametoindices(int32 fid, /* IN: file ID */ const char *name, /* IN: name of dataset to search for */ hdf_varlist_t *var_list) { unsigned ii; intn len; NC *handle = NULL; NC_var **dp = NULL; hdf_varlist_t *varlistp; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } len = strlen(name); dp = (NC_var **)handle->vars->values; varlistp = var_list; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, strlen(name)) == 0) { varlistp->var_index = (int32)ii; varlistp->var_type = (*dp)->var_type; varlistp++; } } done: return ret_value; } /* SDnametoindices */ /****************************************************************************** NAME SDgetrange -- simulate a call to DFSDgetrange DESCRIPTION If a "valid_range" attribute is provided return its values in pmax and pmin. Else if both a "valid max" AND a "valid min" exist return their values in pmax and pmin. Arrgghh, in HDF it was assumed that the max and min values were of the same data type as the rest of the data. So the user would know the amount of storage to send to get back the max and min values. This is not the case with netCDF. This routine will only work if they are already the same number types. RETURNS On error or missing attributes return FAIL else SUCCEED. ******************************************************************************/ intn SDgetrange(int32 sdsid, /* IN: dataset ID */ void *pmax, /* OUT: valid max */ void *pmin /* OUT: valid min */) { NC *handle = NULL; NC_var *var = NULL; NC_attr **attr = NULL; NC_attr **attr1 = NULL; NC_attr **attr2 = NULL; NC_array *array = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_ValidRange); if ((attr != NULL) && ((*attr)->data->type == var->type)) { /* BUG: this may be a pointer to a pointer */ array = (NC_array *)(*attr)->data; memcpy(pmin, array->values, array->szof); memcpy(pmax, array->values + array->szof, array->szof); } else { attr1 = (NC_attr **)NC_findattr(&(var->attrs), "valid_max"); attr2 = (NC_attr **)NC_findattr(&(var->attrs), "valid_min"); if ((attr1 == NULL) || (attr2 == NULL)) { HGOTO_ERROR(DFE_RANGE, FAIL); } if (((*attr1)->HDFtype != var->HDFtype) || ((*attr2)->HDFtype != var->HDFtype)) { HGOTO_ERROR(DFE_RANGE, FAIL); } NC_copy_arrayvals((char *)pmax, (*attr1)->data); NC_copy_arrayvals((char *)pmin, (*attr2)->data); } done: return ret_value; } /* SDgetrange */ /* -------------------------- CREATION INTERFACE -------------------------- */ /* --- create a new data set --- sdsid = SDcreate(fid, name, numbertype, rank, dimsizes); --- associate a name with a dimension. If a prev sdsid is --- --- provided then it is assumed that the current dimension is the --- --- same as the dimension with the same name of the previous sds --- status = SDsetdim(sdsid, dimnumber, dimname, [prev sdsid] ); --- note that it will be possible to store values for a --- --- dimension without having to name it --- status = SDsetdimvalues(sdsid, dimnumber, numbertype, count, data); --- set the units and format strings --- status = SDsetdimstrs(sdsid, dimnumber, unitstr, formatstr); --- we will need an SDendaccess() so that we know when it --- --- is safe to write the information out in this case --- status = SDendaccess(sdsid); --- set fill mode for a file open for write cur_mode = SDsetfillmode(fid, fillmode); --- set dimval backward compatible for write status = SDsetdimval_comp(dimid, compt_mode); */ /****************************************************************************** NAME SDcreate -- create a new dataset DESCRIPTION Simulate a call to ncvardef without having to be in define mode. name can be at most H4_MAX_NC_NAME characters. Rank can be at most H4_MAX_VAR_DIMS It looks like for the call to NC_new_var() we need to have dimension IDs already. So I guess we should just create the fake dimensions now and when optional information comes in (i.e. name, tying to other dimensions) we'll go in and modify the structure in place. This is gonna be heinous. Please do not attempt this at home See SDselect() for a discussion on how SDS IDs are set up. RETURNS An ID to the new dataset else FAIL ******************************************************************************/ int32 SDcreate(int32 fid, /* IN: file ID */ const char *name, /* IN: dataset name */ int32 nt, /* IN: dataset number type */ int32 rank, /* IN: rank of dataset */ int32 *dimsizes /* IN: array of dimension sizes */) { intn i; NC *handle = NULL; NC_var *var = NULL; NC_dim *newdim = NULL; int32 sdsid; nc_type nctype; char dimname[H4_MAX_NC_NAME]; intn num; intn *dims = NULL; intn is_ragged; int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* fudge the name since its optional */ if ((name == NULL) || (name[0] == ' ') || (name[0] == '\0')) name = "DataSet"; /* check if its a ragged array. Why is this code still here? -GV */ if ((rank > 1) && dimsizes[rank - 1] == SD_RAGGED) { rank--; is_ragged = TRUE; } else { is_ragged = FALSE; } /* make fake dimensions which may or may not be over-ridden later */ if (rank > 0) dims = malloc(rank * sizeof(intn)); else /* when rank = 0, use rank = 1, assuming the data is scalar */ dims = malloc(sizeof(intn)); if (dims == NULL) { HGOTO_ERROR(DFE_NOSPACE, FAIL); } if (rank > H4_MAX_VAR_DIMS) { HGOTO_ERROR(DFE_ARGS, FAIL); } for (i = 0; i < rank; i++) { num = (handle->dims ? handle->dims->count : 0); sprintf(dimname, "fakeDim%d", num); newdim = (NC_dim *)NC_new_dim(dimname, dimsizes[i]); if (newdim == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (handle->dims == NULL) { /* first time */ handle->dims = NC_new_array(NC_DIMENSION, (unsigned)1, (Void *)&newdim); if (handle->dims == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { if (NC_incr_array(handle->dims, (Void *)&newdim) == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } dims[i] = (intn)handle->dims->count - 1; } /* end for 'i < rank' */ /* create the actual variable */ if ((nctype = hdf_unmap_type((int)nt)) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } var = (NC_var *)NC_new_var(name, nctype, (int)rank, dims); if (var == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Set the "newly created" & "set length" flags for use in SDwritedata */ var->created = TRUE; var->set_length = FALSE; /* Indicate that this variable is an actual sds, not a coordinate variable (bugzilla 624) - BMR - 05/14/2007 */ var->var_type = IS_SDSVAR; /* NC_new_var strips off "nativeness" add it back in if appropriate */ var->HDFtype = nt; if (FAIL == (var->HDFsize = DFKNTsize(nt))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } var->cdf = handle; /* set cdf before calling NC_var_shape */ /* get a new NDG ref for this sucker */ var->ndg_ref = Hnewref(handle->hdf_file); /* set ragged status. Why is this still here -GV */ var->is_ragged = is_ragged; /* no ragged array info stored yet */ if (var->is_ragged) { var->rag_list = NULL; var->rag_fill = 0; } /* add it to the handle */ if (handle->vars == NULL) { /* first time */ handle->vars = NC_new_array(NC_VARIABLE, (unsigned)1, (Void *)&var); if (handle->vars == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { if (handle->vars->count >= H4_MAX_NC_VARS) { HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); } else { if (NC_incr_array(handle->vars, (Void *)&var) == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } } /* compute all of the shape information */ if (NC_var_shape(var, handle->dims) == -1) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* create a handle we can give back to the user */ sdsid = (((int32)fid) << 20) + (((int32)SDSTYPE) << 16); sdsid += handle->vars->count - 1; /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; /* free dims */ free(dims); ret_value = sdsid; done: return ret_value; } /* SDcreate */ /****************************************************************************** NAME SDgetdimid -- get a dimension ID DESCRIPTION Given an sdsid and a dimension number return a dimid. Index is a ZERO based quantity The dimID looks similar to the sdsID except DIMTYPE is substituted for SDSTYPE as the id-type: dimID: 32 20 16 0 ---------------------------------------- | fid | id-type| position index | ---------------------------------------- RETURNS An ID to the dimension else FAIL ******************************************************************************/ int32 SDgetdimid(int32 sdsid, /* IN: dataset ID */ intn number /* IN: index of dimension, in the SDS, ie. <= rank-1 */) { NC *handle = NULL; NC_var *var = NULL; int32 id; int32 dimindex; /* index of dim in the file, ie. dims of all SDSs */ int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* sanity check args */ if (number < 0) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the handle */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the variable */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* check if enough / too many dims */ if ((var->assoc == NULL) || (var->assoc->count < (unsigned)number)) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dim number out of the assoc array */ if (var->assoc->values == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } dimindex = var->assoc->values[number]; /* build the dim id */ id = (sdsid & 0xfff00000) + (((int32)DIMTYPE) << 16) + dimindex; ret_value = id; done: return ret_value; } /* SDgetdimid */ /****************************************************************************** NAME SDsetdimname -- give a name to a dimension DESCRIPTION Set the name of a dimension -- at most H4_MAX_NC_NAME characters. If this name is already in use we should point to the existing dimension with that name. If the sizes are different return an error. If this dimension already has a name throw it out and use the new one. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetdimname(int32 id, /* IN: dataset ID */ const char *name /* IN: dimension name */) { NC *handle = NULL; NC_dim *dim = NULL; NC_dim **dp = NULL; NC_string *old = NULL; NC_string *new = NULL; NC_array **ap = NULL; size_t len; unsigned ii; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* check for name in use */ len = strlen(name); dp = (NC_dim **)handle->dims->values; for (ii = 0; ii < handle->dims->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, strlen(name)) == 0) { if (dim != (*dp)) { /* a dimension with this name already exists */ /* so change to point to it */ if (dim->size != (*dp)->size) { HGOTO_ERROR(DFE_BADDIMNAME, FAIL); } ap = (NC_array **)handle->dims->values; ap += id & 0xffff; NC_free_dim(dim); (*dp)->count += 1; (*ap) = (NC_array *)(*dp); HGOTO_DONE(SUCCEED); } } } /* throw out the old name if it exists and create a new one */ old = dim->name; new = NC_new_string((unsigned)strlen(name), name); if (new == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } dim->name = new; NC_free_string(old); /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetdimname */ /****************************************************************************** NAME SDendaccess -- close a sds ID DESCRIPTION Close down this access ID to a data object RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDendaccess(int32 id /* IN: dataset ID */) { NC *handle; int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* free the AID */ ret_value = SDIfreevarAID(handle, id & 0xffff); done: return ret_value; } /* SDendaccess */ /****************************************************************************** NAME SDIputattr -- put an attribute in an attribute list DESCRIPTION Common code for adding an attribute to an attribute list. The list gets created if it had previously been empty RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDIputattr(NC_array **ap, /* IN/OUT: attribute list */ const char *name, /* IN: attribute name */ int32 nt, /* IN: attribute number type */ intn count, /* IN: number of attribute values */ const void *data /* IN: attribute values */) { NC_attr *attr = NULL; NC_attr **atp = NULL; NC_attr *old = NULL; nc_type type; /* unmap -- HDF type to NC type */ intn ret_value = SUCCEED; if ((type = hdf_unmap_type((int)nt)) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (*ap == NULL) { /* first time */ attr = (NC_attr *)NC_new_attr(name, type, (unsigned)count, data); if (attr == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } attr->HDFtype = nt; /* Add HDFtype */ *ap = NC_new_array(NC_ATTRIBUTE, (unsigned)1, (Void *)&attr); if (*ap == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { if ((atp = NC_findattr(ap, name)) != NULL) { /* name in use */ old = *atp; *atp = (NC_attr *)NC_new_attr(name, type, (unsigned)count, data); if (*atp == NULL) { *atp = old; HGOTO_ERROR(DFE_INTERNAL, FAIL); } (*atp)->HDFtype = nt; /* Add HDFtype */ NC_free_attr(old); } else { if ((*ap)->count >= H4_MAX_NC_ATTRS) { /* Too many */ HGOTO_ERROR(DFE_EXCEEDMAX, FAIL); } /* just add it */ attr = (NC_attr *)NC_new_attr(name, type, (unsigned)count, data); attr->HDFtype = nt; /* Add HDFtype */ if (attr == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (NC_incr_array((*ap), (Void *)&attr) == NULL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } } done: return ret_value; } /* SDIputattr */ /****************************************************************************** NAME SDsetrange -- simulate a call to DFSDsetrange DESCRIPTION Store range info for this variable in the valid_range attribute. If that attribute already exists overwrite the current values. It is assumed that the values are the same type as the data set. It is up to the user to decide what is meant by the "valid" max and min. RETURNS On error FAIL else SUCCEED. ******************************************************************************/ intn SDsetrange(int32 sdsid, /* IN: dataset ID */ void *pmax, /* IN: valid max */ void *pmin /* IN: valid min */) { NC *handle = NULL; NC_var *var = NULL; uint8 data[80]; intn sz; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if ((pmax == NULL) || (pmin == NULL)) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* move data values over */ if (FAIL == (sz = DFKNTsize(var->HDFtype | DFNT_NATIVE))) { HGOTO_ERROR(DFE_ARGS, FAIL); } memcpy(data, pmin, sz); memcpy(data + sz, pmax, sz); /* call common code */ if (SDIputattr(&var->attrs, _HDF_ValidRange, var->HDFtype, (intn)2, data) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); /* Should propagate error code */ } /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetrange */ /****************************************************************************** NAME SDIapfromid -- get the attribute list DESCRIPTION Given a ID figure out what the handle and attribute list pointer are for that object. RETURNS On error FAIL else SUCCEED. ******************************************************************************/ intn SDIapfromid(int32 id, /* IN: object ID */ NC **handlep, /* IN: handle for this file */ NC_array ***app /* OUT: attribute list */) { NC *handle = NULL; NC_var *var = NULL; NC_dim *dim = NULL; int32 varid = -1; intn ret_value = SUCCEED; /* see if its a variable ID */ handle = SDIhandle_from_id(id, SDSTYPE); if (handle != NULL) { /* find the variable */ var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } (*app) = &(var->attrs); (*handlep) = handle; HGOTO_DONE(SUCCEED); } /* see if its a file ID */ handle = SDIhandle_from_id(id, CDFTYPE); if (handle != NULL) { (*app) = &(handle->attrs); (*handlep) = handle; HGOTO_DONE(SUCCEED); } /* see if its a dimension ID */ handle = SDIhandle_from_id(id, DIMTYPE); if (handle != NULL) { /* find the dimension */ dim = SDIget_dim(handle, id); /* the ID is neither file, data set, nor dimension ID */ if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get index of coordinate variable */ varid = SDIgetcoordvar(handle, dim, (int32)(id & 0xffff), (int32)0); /* get the variable object */ var = NC_hlookupvar(handle, varid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } (*app) = &(var->attrs); (*handlep) = handle; HGOTO_DONE(SUCCEED); } ret_value = FAIL; done: return ret_value; } /* SDIapfromid */ /****************************************************************************** NAME SDsetattr -- user level function to create and set an attribute DESCRIPTION Given an ID and an attribute definition attach the attribute to the thing represented by the ID. For starters, the valid IDs could be variable, file or dimension IDs RETURNS On error FAIL else SUCCEED. ******************************************************************************/ intn SDsetattr(int32 id, /* IN: object ID */ const char *name, /* IN: attribute name */ int32 nt, /* IN: attribute number type */ int32 count, /* IN: number of attribute values */ const void *data /* IN: attribute values */) { NC_array **ap = NULL; NC *handle = NULL; intn sz; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Sanity check args */ if (name == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* This release doesn't support native number types for attr */ if (nt & DFNT_NATIVE) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Only positive count is valid (bug HDFFR-989) -BMR */ if (count <= 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Make sure that count is less than MAX_ORDER(Vdata) and total size is less than MAX_FIELD_SIZE(Vdata) */ if (FAIL == (sz = DFKNTsize(nt))) { HGOTO_ERROR(DFE_ARGS, FAIL); } if ((count > MAX_ORDER) || ((count * sz) > MAX_FIELD_SIZE)) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* determine what type of ID we've been given */ if (SDIapfromid(id, &handle, &ap) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* still no handle ? */ if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* hand over to SDIputattr */ if (SDIputattr(ap, name, nt, count, data) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetattr */ /****************************************************************************** NAME SDattrinfo -- get info about an attribute DESCRIPTION Inquire about an attribute. Attribute indexes are zero based. Given the ID of the attribute's parent and the attribute's index return the number type, name and count of the attribute so the user knows how much space to provide to read it RETURNS On error FAIL else SUCCEED. ******************************************************************************/ intn SDattrinfo(int32 id, /* IN: object ID */ int32 index, /* IN: attribute index */ char *name, /* OUT: attribute name */ int32 *nt, /* OUT: attribute number type */ int32 *count /* OUT: number of attribute values */) { NC_array *ap = NULL; NC_array **app = NULL; NC_attr **atp = NULL; NC *handle = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* sanity check args */ if ((name == NULL) || (nt == NULL) || (count == NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); /* determine what type of ID we've been given */ if (SDIapfromid(id, &handle, &app) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ap = (*app); if ((ap == NULL) || (index >= ap->count)) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* * ap is the proper attribute list now look up something with this * name */ atp = (NC_attr **)((char *)ap->values + index * ap->szof); if (*atp == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* move the information over */ if (name != NULL) { memcpy(name, (*atp)->name->values, (*atp)->name->len); name[(*atp)->name->len] = '\0'; } *count = (*atp)->data->count; *nt = (*atp)->HDFtype; done: return ret_value; } /* SDattrinfo */ /****************************************************************************** NAME SDreadattr -- read an attribute's values DESCRIPTION Read the actual contents of the given attribute Assume that the user has called SDinqattr() and so has allocated sufficient space RETURNS On error FAIL else SUCCEED. ******************************************************************************/ intn SDreadattr(int32 id, /* IN: object ID */ int32 index, /* IN: attribute index */ void *buf /* OUT: data buffer */) { NC_array *ap = NULL; NC_array **app = NULL; NC_attr **atp = NULL; NC *handle = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* sanity check args */ if (buf == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* determine what type of ID we've been given */ if (SDIapfromid(id, &handle, &app) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ap = (*app); if ((ap == NULL) || (index >= ap->count)) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* * ap is the proper attribute list now look up something with this * index */ atp = (NC_attr **)((char *)ap->values + index * ap->szof); if (*atp == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* move the information over */ memcpy(buf, (*atp)->data->values, (*atp)->data->count * (*atp)->data->szof); done: return ret_value; } /* SDreadattr */ /****************************************************************************** NAME SDwritedata -- write a hyperslab of data DESCRIPTION Write out a chunk o data. Except for the line setting the XDR op-code this is exactly the same as SDreaddata(). The two routines should really be combined at some point RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDwritedata(int32 sdsid, /* IN: dataset ID */ int32 *start, /* IN: coords of starting point */ int32 *stride, /* IN: stride along each dimension */ int32 *end, /* IN: number of values to write per dimension */ void *data /* IN: data buffer */) { intn varid = -1; int32 status; comp_coder_t comp_type; uint32 comp_config; NC_var *var = NULL; NC *handle = NULL; NC_dim *dim = NULL; #ifdef H4_HAVE_LP64 long Start[H4_MAX_VAR_DIMS]; long End[H4_MAX_VAR_DIMS]; long Stride[H4_MAX_VAR_DIMS]; #else long *Start = NULL; long *End = NULL; long *Stride = NULL; #endif intn no_strides = 0; intn ret_value = SUCCEED; int i; /* this decides how a dataset with unlimited dimension is written along the unlimited dimension; the behavior is different between SD and nc APIs */ cdf_routine_name = "SDwritedata"; /* clear error stack */ HEclear(); if ((start == NULL) || (end == NULL) || (data == NULL)) HGOTO_ERROR(DFE_ARGS, FAIL); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { handle = SDIhandle_from_id(sdsid, DIMTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); dim = SDIget_dim(handle, sdsid); } if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Check if compression method is enabled */ /* Make sure that the file is an HDF file before checking about compression */ if (handle->file_type == HDF_FILE) /* bug HDFFR-473 */ { status = HCPgetcomptype(handle->hdf_file, var->data_tag, var->data_ref, &comp_type); if (status != FAIL) if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_INVALID) { /* Must have encoder to write data */ HCget_config_info(comp_type, &comp_config); if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } } /* When HCPgetcomptype returns FAIL, assume no compression */ } /* file is HDF */ /* get ready to write */ handle->xdrs->x_op = XDR_ENCODE; /* * figure out the index of the variable to write to * the user might have passed us a dimension, in which * case we want to write to its coordinate variable */ if (dim) { varid = SDIgetcoordvar(handle, dim, (int32)(sdsid & 0xffff), (int32)0); } else { /* oops, how do we know this ? */ varid = (intn)sdsid & 0xffff; } /* Check for strides all set to '1', so it acts like NULL was passed */ if (stride != NULL) { var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } no_strides = 1; /* if the stride for any dim. is not '1', real stride processing has to occur */ for (i = 0; i < var->assoc->count; i++) { if (stride[i] != 1) no_strides = 0; } } /* end if */ /* * In general, (long) == int32 * In cases where it doesn't we need to convert */ #ifdef H4_HAVE_LP64 var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } for (i = 0; i < var->assoc->count; i++) { Start[i] = (long)start[i]; End[i] = (long)end[i]; if (stride) Stride[i] = (long)stride[i]; } #else Start = (long *)start; End = (long *)end; Stride = (long *)stride; #endif /* Check if this data is being written out to a newly created dataset */ var = SDIget_var(handle, sdsid); if (var->created) { if (!IS_RECVAR(var) && (handle->flags & NC_NOFILL)) { var->set_length = TRUE; } /* end if */ var->created = FALSE; } /* end if */ /* call the writeg routines if a stride is given */ if (stride == NULL || no_strides == 1) status = NCvario(handle, varid, Start, End, (Void *)data); else status = NCgenio(handle, varid, Start, End, Stride, NULL, data); if (status == -1) ret_value = FAIL; else ret_value = SUCCEED; done: if (ret_value == FAIL) { if (var && var->aid != 0 && var->aid != FAIL) { Hendaccess(var->aid); var->aid = FAIL; } } return ret_value; } /* SDwritedata */ /****************************************************************************** NAME SDsetdatastrs -- set "data strings" DESCRIPTION Store information about the 'label', 'units', 'format' and 'cordsys' attributes of a dataset. All of the values are optional. If no string is desired NULL should be passed in its place. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetdatastrs(int32 sdsid, /* IN: dataset ID */ const char *l, /* IN: label string ("long_name") */ const char *u, /* IN: units string ("units") */ const char *f, /* IN: format string ("format") */ const char *c /* IN: coordsys string ("coordsys") */) { NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (l && l[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_LongName, DFNT_CHAR, (intn)strlen(l), l) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } if (u && u[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_Units, DFNT_CHAR, (intn)strlen(u), u) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } if (f && f[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_Format, DFNT_CHAR, (intn)strlen(f), f) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } if (c && c[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_CoordSys, DFNT_CHAR, (intn)strlen(c), c) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } /* make sure it gets reflected in the file */ if (l || u || f || c) handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetdatastrs */ /****************************************************************************** NAME SDsetcal -- set calibration information DESCRIPTION Store calibration information. What is the formula? Good question -GV RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetcal(int32 sdsid, /* IN: dataset ID */ float64 cal, /* IN: multiplicative factor */ float64 cale, /* IN: multiplicative factor error */ float64 ioff, /* IN: integer offset */ float64 ioffe, /* IN: integer offset error */ int32 nt /* IN: number type of uncalibrated data */) { NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (SDIputattr(&var->attrs, _HDF_ScaleFactor, DFNT_FLOAT64, (intn)1, &cal) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } if (SDIputattr(&var->attrs, _HDF_ScaleFactorErr, DFNT_FLOAT64, (intn)1, &cale) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } if (SDIputattr(&var->attrs, _HDF_AddOffset, DFNT_FLOAT64, (intn)1, &ioff) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } if (SDIputattr(&var->attrs, _HDF_AddOffsetErr, DFNT_FLOAT64, (intn)1, &ioffe) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } if (SDIputattr(&var->attrs, _HDF_CalibratedNt, DFNT_INT32, (intn)1, &nt) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetcal */ /****************************************************************************** NAME SDsetfillvalue -- set the fill value DESCRIPTION Set the fill value for this data set. The fill value is assumed to have the same number type as the dataset RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetfillvalue(int32 sdsid, /* IN: dataset ID */ void *val /* IN: fillvalue */) { NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (SDIputattr(&var->attrs, _FillValue, var->HDFtype, (intn)1, val) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetfillvalue */ /****************************************************************************** NAME SDgetfillvalue -- get the fill value DESCRIPTION Retrieve the fill value for this data set if one has been stored. The fill value has the same number type as the dataset RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetfillvalue(int32 sdsid, /* IN: dataset ID */ void *val /* OUT: fillvalue */) { NC *handle = NULL; NC_var *var = NULL; NC_attr **attr = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* sanity check args */ if (val == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } attr = (NC_attr **)NC_findattr(&(var->attrs), _FillValue); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)val, (*attr)->data); done: return ret_value; } /* SDgetfillvalue */ /****************************************************************************** NAME SDgetdatastrs -- get "data strings" DESCRIPTION Read information about the 'label', 'units', 'format' and 'cordsys' attributes of a dataset. All of the values are optional. If no string is desired NULL should be passed in its place. Assume all buffers are len bytes long. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetdatastrs(int32 sdsid, /* IN: dataset ID */ char *l, /* OUT: label string ("long_name") */ char *u, /* OUT: units string ("units") */ char *f, /* OUT: format string ("format") */ char *c, /* OUT: coordsys string ("coordsys") */ intn len /* IN: buffer length */) { NC *handle = NULL; NC_var *var = NULL; NC_attr **attr = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (l) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_LongName); if (attr != NULL) { if ((*attr)->data->count < (unsigned)len) { strncpy((char *)l, (*attr)->data->values, (*attr)->data->count); l[(*attr)->data->count] = '\0'; } else strncpy((char *)l, (*attr)->data->values, len); } else l[0] = '\0'; } if (u) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_Units); if (attr != NULL) { if ((*attr)->data->count < (unsigned)len) { strncpy((char *)u, (*attr)->data->values, (*attr)->data->count); u[(*attr)->data->count] = '\0'; } else strncpy((char *)u, (*attr)->data->values, len); } else u[0] = '\0'; } if (f) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_Format); if (attr != NULL) { if ((*attr)->data->count < (unsigned)len) { strncpy((char *)f, (*attr)->data->values, (*attr)->data->count); f[(*attr)->data->count] = '\0'; } else strncpy((char *)f, (*attr)->data->values, len); } else f[0] = '\0'; } if (c) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_CoordSys); if (attr != NULL) { if ((*attr)->data->count < (unsigned)len) { strncpy((char *)c, (*attr)->data->values, (*attr)->data->count); c[(*attr)->data->count] = '\0'; } else strncpy((char *)c, (*attr)->data->values, len); } else c[0] = '\0'; } done: return ret_value; } /* SDgetdatastrs */ /****************************************************************************** NAME SDgetcal -- get calibration information DESCRIPTION Retrieve calibration information. What is the formula? RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetcal(int32 sdsid, /* IN: dataset ID */ float64 *cal, /* OUT: multiplicative factor */ float64 *cale, /* OUT: multiplicative factor error */ float64 *ioff, /* OUT: integer offset */ float64 *ioffe, /* OUT: integer offset error */ int32 *nt /* OUT: number type of uncalibrated data */) { NC *handle = NULL; NC_var *var = NULL; NC_attr **attr = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_ScaleFactor); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)cal, (*attr)->data); attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_ScaleFactorErr); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)cale, (*attr)->data); attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_AddOffset); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)ioff, (*attr)->data); attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_AddOffsetErr); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)ioffe, (*attr)->data); attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_CalibratedNt); if (attr == NULL) { HGOTO_ERROR(DFE_CANTGETATTR, FAIL); } NC_copy_arrayvals((char *)nt, (*attr)->data); done: return ret_value; } /* SDgetcal */ /****************************************************************************** NAME SDgetcoordvar -- get index of coordinate variable DESCRIPTION Given a dimension return the index of its coordinate variable creating one if needed. If we need to create a variable and an nt is not supplied (i.e. is equal to zero) use 32bit floats. If the variable already exists and the existing nt is different from the supplied one (and the supplied one is not zero) replace the nt by the new one. ID is needed so that we can set the dimension of the variable correctly if we need to. Yuck. RETURNS A variable index or FAIL on error ******************************************************************************/ int32 SDIgetcoordvar(NC *handle, /* IN: file handle */ NC_dim *dim, /* IN: dimension to find coord var of */ int32 id, /* IN: dimension ID */ int32 nt /* IN: number type to use if new variable*/) { unsigned ii; unsigned len; nc_type nctype; intn dimindex; NC_string *name = NULL; NC_var **dp = NULL; NC_var *var = NULL; int32 ret_value = FAIL; /* look for a variable with the same name */ name = dim->name; len = dim->name->len; dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { /* eliminate vars with rank > 1, coord vars only have rank 1 */ if ((*dp)->assoc->count == 1) if (len == (*dp)->name->len && strncmp(name->values, (*dp)->name->values, (size_t)len) == 0) /* only proceed if the file is a netCDF file (bugz 1644) or if this variable is a coordinate var or when the status is unknown due to its being created prior to the fix of bugzilla 624 - BMR 05/14/2007 */ if ((handle->file_type != HDF_FILE) || (*dp)->var_type == IS_CRDVAR || (*dp)->var_type == UNKNOWN) { /* see if we need to change the number type */ if ((nt != 0) && (nt != (*dp)->type)) { if (((*dp)->type = hdf_unmap_type((int)nt)) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } (*dp)->HDFtype = nt; (*dp)->cdf = handle; /* don't forget to reset the sizes */ (*dp)->szof = NC_typelen((*dp)->type); if (FAIL == ((*dp)->HDFsize = DFKNTsize(nt))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* recompute all of the shape information */ /* BUG: this may be a memory leak ??? */ if (NC_var_shape((*dp), handle->dims) == -1) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* found it? */ HGOTO_DONE((int32)ii); } } /* create a new var with this dim as only coord */ if (nt == 0) nt = DFNT_FLOAT32; if ((nctype = hdf_unmap_type((int)nt)) == FAIL) { /* replace it with NCAdvice or HERROR? */ HGOTO_ERROR(DFE_ARGS, FAIL); } dimindex = (intn)id; var = (NC_var *)NC_new_var(name->values, nctype, (unsigned)1, &dimindex); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Set flag to indicate that this variable is a coordinate variable - BMR - 05/14/2007 */ var->var_type = IS_CRDVAR; /* BMR: put back hdf type that was set wrong by NC_new_var; please refer to the cvs history of bug #172 for reason on this statement - 4/17/01*/ var->HDFtype = nt; /* get a new NDG ref for this sucker */ var->ndg_ref = Hnewref(handle->hdf_file); /* add it to the handle */ if (handle->vars->count >= H4_MAX_NC_VARS) { HGOTO_ERROR(DFE_ARGS, FAIL); } var->cdf = handle; /* set cdf before calling NC_var_shape */ /* compute all of the shape information */ if (NC_var_shape(var, handle->dims) == -1) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (NC_incr_array(handle->vars, (Void *)&var) == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ret_value = handle->vars->count - 1; done: return ret_value; } /* SDIgetcoordvar */ /****************************************************************************** NAME SDsetdimstrs -- set "dimension strings" DESCRIPTION Store information about the 'label', 'units' and 'format' attributes of a dimension. All three of the values are optional. If no string is desired NULL should be passed in its place. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetdimstrs(int32 id, /* IN: dimension ID */ const char *l, /* IN: label string ("long_name") */ const char *u, /* IN: units string ("units") */ const char *f /* IN: format string ("format") */) { intn varid = -1; NC *handle = NULL; NC_dim *dim = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* look for a variable with the same name */ varid = (intn)SDIgetcoordvar(handle, dim, (int32)(id & 0xffff), (int32)0); if (varid == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the variable object */ var = NC_hlookupvar(handle, varid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* set the attributes */ if (l && l[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_LongName, DFNT_CHAR, (intn)strlen(l), l) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } if (u && u[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_Units, DFNT_CHAR, (intn)strlen(u), u) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } if (f && f[0] != '\0') { if (SDIputattr(&var->attrs, _HDF_Format, DFNT_CHAR, (intn)strlen(f), f) == FAIL) { HGOTO_ERROR(DFE_CANTSETATTR, FAIL); } } /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; done: return ret_value; } /* SDsetdimstrs */ /****************************************************************************** NAME SDIfreevarAID -- free a variables AID DESCRIPTION Free the AID of the variable with the given index RETURNS SUCCEED / FAIL ******************************************************************************/ int32 SDIfreevarAID(NC *handle, /* IN: file handle */ int32 index /* IN: variable index */) { NC_array **ap = NULL; NC_var *var = NULL; int32 ret_value = SUCCEED; if (handle == NULL || !handle->vars) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (index < 0 || index > handle->vars->count) { HGOTO_ERROR(DFE_ARGS, FAIL); } ap = (NC_array **)handle->vars->values; ap += index; var = (NC_var *)*ap; if (var && var->aid != 0 && var->aid != FAIL) { if (Hendaccess(var->aid) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } } var->aid = FAIL; done: return ret_value; } /* SDIfreevarAID */ /****************************************************************************** NAME SDsetdimscale -- store scale information for the dimension DESCRIPTION Store information about the 'scales' of a dimension. Dimensions do not have to have the same number type as the dataset. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDsetdimscale(int32 id, /* IN: dimension ID */ int32 count, /* IN: number of values */ int32 nt, /* IN: number type of data */ void *data /* IN: scale values */) { NC *handle = NULL; NC_dim *dim = NULL; int32 status; intn varid = -1; long start[1]; long end[1]; intn ret_value = SUCCEED; /* this decides how a dataset with unlimited dimension is written along the unlimited dimension; the behavior is different between SD and nc APIs */ cdf_routine_name = "SDsetdimscales"; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* sanity check, if not SD_UNLIMITED */ if (dim->size != 0 && count != dim->size) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* look for a variable with the same name */ varid = (intn)SDIgetcoordvar(handle, dim, id & 0xffff, nt); if (varid == -1) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* store the data */ handle->xdrs->x_op = XDR_ENCODE; start[0] = 0; end[0] = count; status = NCvario(handle, varid, start, end, (Void *)data); if (status == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } done: /* free the AID */ status = SDIfreevarAID(handle, varid); if (status != FAIL) { handle->flags |= NC_HDIRTY; } return ret_value; } /* SDsetdimscale */ /****************************************************************************** NAME SDgetdimscale -- get scale information for the dimension DESCRIPTION Retrieve the scale information stored with a dimension. It is assumed that the user has called SDdiminfo() and that the data array is long enough to hold the values. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetdimscale(int32 id, /* IN: dimension ID */ void *data /* OUT: scale values */) { NC *handle = NULL; NC_dim *dim = NULL; NC_var *vp = NULL; int32 status; intn varid = -1; long start[1]; long end[1]; intn ret_value = SUCCEED; /* this decides how a dataset with unlimited dimension is read along the unlimited dimension; the behavior is different between SD and nc APIs */ cdf_routine_name = "SDgetdimscale"; /* clear error stack */ HEclear(); /* sanity check args */ if (data == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the handle */ handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* look for a variable with the same name */ /* assume type Float32 can be over-ridden later */ varid = (intn)SDIgetcoordvar(handle, dim, (int32)(id & 0xffff), (int32)0); if (varid == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* store the data */ handle->xdrs->x_op = XDR_DECODE; start[0] = 0; if (dim->size != 0) end[0] = dim->size; else { if (handle->file_type != HDF_FILE) end[0] = handle->numrecs; else { vp = SDIget_var(handle, varid); if (vp == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } end[0] = vp->numrecs; } } status = NCvario(handle, varid, start, end, (Void *)data); if (status == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } done: /* free the AID */ status = SDIfreevarAID(handle, varid); if (status != FAIL) { handle->flags |= NC_HDIRTY; } return ret_value; } /* SDgetdimscale */ /****************************************************************************** NAME SDdiminfo -- get info about a dimension DESCRIPTION Return basic information about a dimension (name, sizes, number of attributes, number type, etc...) The user is responsible for allocating space to hold the dataset name. It can be at most H4_MAX_NC_NAME characters in length. NULL can be passed for the name if it is not required. RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDdiminfo(int32 id, /* IN: dimension ID */ char *name, /* OUT: name of the dimension */ int32 *size, /* OUT: size of the dimension */ int32 *nt, /* OUT: number type of scales */ int32 *nattr /* OUT: the number of local attributes */) { NC *handle = NULL; NC_dim *dim = NULL; NC_var **dp = NULL; intn ii; intn len; int ret_value = SUCCEED; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->dims == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (name != NULL) { /* GeorgeV switched to use memcpy in r2739. Trying back to strncpy because it should be used to copy a string (emailed with QK 5/27/2016), but tests failed. Some strings are stored with NC_string, more time is needed to figure out the whole scheme. Switch back to using memcpy for now. -BMR, 5/30/2016 */ memcpy(name, dim->name->values, dim->name->len); name[dim->name->len] = '\0'; } else name = dim->name->values; /* Get dimension's size, which is the one application provided at SDcreate. Application must use SDgetinfo to get current size of unlimited dim */ *size = dim->size; /* assuming no number type and no attributes */ *nt = 0; *nattr = 0; /* In HDF files, number type and attribute info are only stored in the coordinate var of the dimension; so, if there is no coord var associated with the dimension being inquired, these info will not be available. */ if (handle->vars) { len = dim->name->len; dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { /* eliminate vars with rank > 1, coord vars only have rank 1 */ if ((*dp)->assoc->count == 1) { /* check if this variable matches the searched name */ if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, (*dp)->name->len) == 0) { if (handle->file_type == HDF_FILE) /* HDF file */ { /* only proceed if this variable is a coordinate var or when its status is unknown due to its being created prior to the fix of bugzilla 624 - BMR - 05/14/2007 */ if ((*dp)->var_type == IS_CRDVAR || (*dp)->var_type == UNKNOWN) { *nt = ((*dp)->numrecs ? (*dp)->HDFtype : 0); *nattr = ((*dp)->attrs ? (*dp)->attrs->count : 0); HGOTO_DONE(ret_value); } } else /* netCDF file */ { *nt = (*dp)->HDFtype; *nattr = ((*dp)->attrs ? (*dp)->attrs->count : 0); HGOTO_DONE(ret_value); } } /* name matched */ } /* rank = 1 */ } } done: return ret_value; } /* SDdiminfo */ /****************************************************************************** NAME SDgetdimstrs -- get "data strings" DESCRIPTION Read as many of the dimension strings as possible. Assume that if a pointer is not NULL that we have len bytes that we can use to return the values RETURNS SUCCEED / FAIL ******************************************************************************/ intn SDgetdimstrs(int32 id, /* IN: dataset ID */ char *l, /* OUT: label string ("long_name") */ char *u, /* OUT: units string ("units") */ char *f, /* OUT: format string ("format") */ intn len /* IN: buffer length */) { NC *handle = NULL; NC_var *var = NULL; NC_var **dp = NULL; NC_dim *dim = NULL; NC_attr **attr = NULL; char *name = NULL; int32 namelen; int ret_value = SUCCEED; /* clear error stack */ HEclear(); /* sanity check args */ if (len < 0) HGOTO_ERROR(DFE_ARGS, FAIL); handle = SDIhandle_from_id(id, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } dim = SDIget_dim(handle, id); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* need to get a pointer to the var now */ var = NULL; if (handle->vars) { name = dim->name->values; namelen = strlen(name); dp = (NC_var **)handle->vars->values; for (int i = 0; i < handle->vars->count; i++, dp++) { /* eliminate vars with rank > 1, coord vars only have rank 1 */ if ((*dp)->assoc->count == 1) { if (namelen == (*dp)->name->len && strncmp(name, (*dp)->name->values, strlen(name)) == 0) { /* because a dim was given, make sure that this is a coord var */ /* if it is an SDS, the function will fail */ if ((*dp)->var_type == IS_SDSVAR) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* only proceed if this variable is a coordinate var or when its status is unknown due to its being created prior to the fix of bugzilla 624 - BMR - 05/14/2007 */ else /* i.e., (*dp)->var_type == IS_CRDVAR || (*dp)->var_type == UNKNOWN) */ { var = (*dp); } } } } } if (var != NULL) { if (l) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_LongName); if (attr != NULL) { intn minlen; minlen = ((unsigned)len > (*attr)->data->count) ? (*attr)->data->count : (unsigned)len; strncpy((char *)l, (*attr)->data->values, minlen); if ((*attr)->data->count < (unsigned)len) l[(*attr)->data->count] = '\0'; } else l[0] = '\0'; } if (u) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_Units); if (attr != NULL) { intn minlen; minlen = (len > (*attr)->data->count) ? (*attr)->data->count : (unsigned)len; strncpy((char *)u, (*attr)->data->values, minlen); if ((*attr)->data->count < (unsigned)len) u[(*attr)->data->count] = '\0'; } else u[0] = '\0'; } if (f) { attr = (NC_attr **)NC_findattr(&(var->attrs), _HDF_Format); if (attr != NULL) { intn minlen; minlen = (len > (*attr)->data->count) ? (*attr)->data->count : (unsigned)len; strncpy((char *)f, (*attr)->data->values, minlen); if ((*attr)->data->count < (unsigned)len) f[(*attr)->data->count] = '\0'; } else f[0] = '\0'; } } /* the given dimension is not a coordinate variable, that means it doesn't have attribute attached to it, because if it did, then it would have been promoted to be a coordinate variable. */ else { if (l) l[0] = '\0'; if (u) u[0] = '\0'; if (f) f[0] = '\0'; } done: return ret_value; } /* SDgetdimstrs */ /****************************************************************************** NAME SDsetexternalfile -- store info in a separate file USAGE int32 SDsetexternalfile(id, filename, offset) int32 id; const char * filename; int32 offset; DESCRIPTION Specify that the actual data for this dataset be stored in a separate file (and "external file" in HDF terms). Only the data (as in SDwritedata()) will be stored externally. Attributes and such will still be in the main file IMPORTANT: It is the user's responsibility to see that the separate files are transported when the main file is moved. IMPORTANT: This can only be called *once* for a given dataset. The HDF utility 'hdfpack' may be able to undo it. IMPORTANT: This will only work on datasets stored in HDF files. FORTRAN - sfsextf RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetexternalfile(int32 id, /* IN: dataset ID */ const char *filename, /* IN: name of external file */ int32 offset /* IN: offset in external file */) { NC *handle = NULL; NC_var *var = NULL; intn extfname_len = 0; /* Length of external file's name */ intn status; int ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Call SDgetexternalinfo passing in 0 and NULLs to get only the length of the external filename if it exists. A positive value indicates an external file exists and SDsetexternalfile should not have any effect */ extfname_len = SDgetexternalinfo(id, 0, NULL, NULL, NULL); if (extfname_len > 0) HGOTO_DONE(DFE_NONE); if (NULL == filename || offset < 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* already exists */ if (var->data_ref) { /* no need to give a length since the element already exists */ status = (intn)HXcreate(handle->hdf_file, (uint16)DATA_TAG, (uint16)var->data_ref, filename, offset, (int32)0); } else { int32 length; /* look up the length */ length = var->len; /* element doesn't exist so we need a reference number */ var->data_ref = Hnewref(handle->hdf_file); if (var->data_ref == 0) { HGOTO_ERROR(DFE_NOREF, FAIL); } /* need to give a length since the element does not exist yet */ status = (intn)HXcreate(handle->hdf_file, (uint16)DATA_TAG, (uint16)var->data_ref, filename, offset, length); } if (status != FAIL) { if (var && (var->aid != 0) && (var->aid != FAIL)) { if (Hendaccess(var->aid) == FAIL) { HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } } var->aid = status; ret_value = SUCCEED; } else ret_value = FAIL; done: return ret_value; } /* SDsetexternalfile */ /****************************************************************************** NAME SDgetexternalinfo -- retrieves external file and data information USAGE int32 SDgetexternalinfo(id, buf_size, filename, offset, length) int32 id; intn buf_size; char *ext_filename; int32 *offset; int32 *length; DESCRIPTION SDgetexternalinfo gets the external file's name and the external data's offset and length, which specify the location and size of the data in the external file. buf_size specifies the size of the buffer ext_filename. When buf_size is 0, SDgetexternalinfo will simply return the length of the external file name, and not the file name itself. When the element is not special or special but not external, SDgetexternalinfo will return 0. If the element is SPECIAL_EXT, but the external file name doesn't exist, SDgetexternalinfo will return FAIL. IMPORTANT: It is the user's responsibility to see that the external files are located in the same directory with the main file. SDgetexternalinfo does not check that. RETURNS Returns length of the external file name or FAIL. If the SDS does not have external element, this length will be 0. ******************************************************************************/ intn SDgetexternalinfo(int32 id, /* IN: dataset ID */ uintn buf_size, /* IN: size of buffer for external file name */ char *ext_filename, /* IN: buffer for external file name */ int32 *offset, /* IN: offset in external file */ int32 *length /* IN: length of external data */) { NC *handle = NULL; NC_var *var = NULL; int32 aid = FAIL; intn actual_fname_len = 0; intn ret_value = SUCCEED; /* Clear error stack */ HEclear(); /* Get the var structure of the SDS */ handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, id); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* SDS exists */ if (var->data_ref) { int32 retcode = 0; sp_info_block_t info_block; /* special info block */ memset(&info_block, 0, sizeof(sp_info_block_t)); /* Get the access id and then its special info */ aid = Hstartread(handle->hdf_file, var->data_tag, var->data_ref); if (aid == FAIL) /* catch FAIL from Hstartread */ HGOTO_ERROR(DFE_ARGS, FAIL); retcode = HDget_special_info(aid, &info_block); /* When HDget_special_info returns FAIL, it could be the element is not special or some failure occur internally, info_block.key will be FAIL in the former case */ if (retcode == FAIL) { if (info_block.key == FAIL) ret_value = 0; /* not a special elem, no external file name */ /* Some failure occurred in HDget_special_info */ else HGOTO_ERROR(DFE_ARGS, FAIL); } /* If the SDS has external element, get the external info */ else if (info_block.key == SPECIAL_EXT) { /* If the file name is not available, something must be wrong, so we need to report it. */ if (info_block.path == NULL || strlen(info_block.path) <= 0) ret_value = FAIL; else { intn tmp_len = info_block.length_file_name; /* If caller requests the length of the external file name only, return the length */ if (buf_size == 0) actual_fname_len = tmp_len; else { /* Caller requests file name, so buffer must not be NULL */ if (ext_filename == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Compute the length of the name to be returned: if requested buffer size is smaller, use that value for name's length, but that means file name could be truncated! */ actual_fname_len = (intn)buf_size < tmp_len ? (intn)buf_size : tmp_len; /* Get the name */ strncpy(ext_filename, info_block.path, actual_fname_len); /* Get offset/length of the external data if requested */ if (offset != NULL) *offset = info_block.offset; if (length != NULL) *length = info_block.length; } /* buf_size != 0 */ ret_value = actual_fname_len; } } /* Special but not external, so no external file name */ else ret_value = 0; /* End access to the aid */ if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } else /* SDS doesn't exist */ HGOTO_ERROR(DFE_ARGS, FAIL); done: if (ret_value == FAIL) { /* Failure cleanup */ /* End access to the aid if necessary */ if (aid != FAIL) Hendaccess(aid); } return ret_value; } /* SDgetexternalinfo */ /************************** Deprecated ****************************** NAME SDgetexternalfile -- retrieves external file information (Deprecated in favor of SDgetexternalinfo) USAGE int32 SDgetexternalfile(id, filename, offset) int32 id; intn buf_size; char *filename; int32 *offset; DESCRIPTION SDgetexternalfile uses HDget_special_info to get the external file's name and offset, which indicates where the data starts in the external file. When the element is not special, SDgetexternalfile will return 0. If the element is SPECIAL_EXT, but the external file name doesn't exist, SDgetexternalfile will fail. IMPORTANT: It is the user's responsibility to see that the separate files are transported when the main file is moved. FORTRAN N/A RETURNS Returns length of the external file name or FAIL. If the SDS does not have external element, the length will be 0. NOTE: This function is replaced by SDgetexternalinfo because it had missed the "length" parameter. ******************************************************************************/ intn SDgetexternalfile(int32 id, /* IN: dataset ID */ intn buf_size, /* IN: name of external file */ char *ext_filename, /* IN: name of external file */ int32 *offset /* IN: offset in external file */) { NC *handle = NULL; NC_var *var = NULL; intn actual_len = 0; int ret_value = 0; /* Clear error stack */ HEclear(); /* Get the var structure */ handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, id); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* SDS exists */ if (var->data_ref) { int32 aid = -1; int32 retcode = 0; sp_info_block_t info_block; /* special info block */ /* Get the access id and then its special info */ aid = Hstartread(handle->hdf_file, var->data_tag, var->data_ref); retcode = HDget_special_info(aid, &info_block); if ((retcode == FAIL) || (info_block.key == FAIL)) HGOTO_ERROR(DFE_CANTMOD, FAIL); /* If the SDS has external element, return the external file info */ if (info_block.key == SPECIAL_EXT) { /* If the file name is not available, the file is probably corrupted, so we need to report it. */ if (info_block.path == NULL || strlen(info_block.path) <= 0) ret_value = FAIL; else { size_t ext_file_len = strlen(info_block.path); /* If caller requests the length of the external file name only, return the length */ if (buf_size == 0) actual_len = (intn)ext_file_len; else { /* Caller requests file name, so buffer must not be NULL */ if (ext_filename == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get the name and its length */ strncpy(ext_filename, info_block.path, buf_size); actual_len = buf_size < ext_file_len ? buf_size : ext_file_len; /* Get the offset in the external file if it's requested */ if (offset != NULL) *offset = info_block.offset; } /* buf_size != 0 */ ret_value = actual_len; } } /* Not external */ else ret_value = FAIL; /* End access to the aid */ if (Hendaccess(aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } done: return ret_value; } /* SDgetexternalfile (Deprecated) */ /****************************************************************************** NAME SDsetnbitdataset -- Create/convert a dataset to n-bit representation DESCRIPTION Specify that the actual data for this dataset be represented as a n-bit dataset internally in the HDF file. The start_bit parameter determines the lowest bit to write out, the bit_len parameter determines how many bits to write out. The bits in the data include the lowest bit (start_bit) and count up bit_len-1 bits to write out. For example, starting at bit 2 and writing 4 bits from the following bit data, "01111011", would write out the bit data, "1110", to the dataset on disk. The sign_ext parameter determines whether the top bit (highest bit #) is used to sign extend the bits whether data is read back from the disk. The fill_one parameter is used to determine whether to fill the "background bits" (the bits not in the data written to the file) with 1's or 0's when the data is read back from the file. Only the data (as in SDwritedata()) will be stored in n-bit representation. Attributes and such will still be stored normally. IMPORTANT: This will only work on datasets stored in HDF files. NOTE: n-bit "compression" is described more fully in the cnbit.c file. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetnbitdataset(int32 id, /* IN: dataset ID */ intn start_bit, /* IN: starting bit offset (lowest=0) */ intn bit_len, /* IN: # of bits to write */ intn sign_ext, /* IN: Whether to sign extend */ intn fill_one /* IN: Whether to fill background w/1's */) { NC *handle = NULL; NC_var *var = NULL; model_info m_info; /* modeling information for the HCcreate() call */ comp_info c_info; /* "compression" information for the HCcreate() call */ intn status; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); if (start_bit < 0 || bit_len <= 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* set up n-bit parameters */ c_info.nbit.nt = var->HDFtype; c_info.nbit.sign_ext = sign_ext; c_info.nbit.fill_one = fill_one; c_info.nbit.start_bit = start_bit; c_info.nbit.bit_len = bit_len; if (!var->data_ref) { /* doesn't exist */ /* element doesn't exist so we need a reference number */ var->data_ref = Hnewref(handle->hdf_file); if (var->data_ref == 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } } /* end if */ status = (intn)HCcreate(handle->hdf_file, (uint16)DATA_TAG, (uint16)var->data_ref, COMP_MODEL_STDIO, &m_info, COMP_CODE_NBIT, &c_info); if (status != FAIL) { if (var && (var->aid != 0) && (var->aid != FAIL)) { if (Hendaccess(var->aid) == FAIL) { HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } } var->aid = status; } /* end if */ ret_value = status; done: return ret_value; } /* SDsetnbitdataset */ #ifdef H4_HAVE_LIBSZ /* we have the library */ /****************************************************************************** NAME SDsetup_szip_parms -- check and set parameters for szip compression int32 id; IN: the varid NC *handle; IN: the SD handle comp_info *c_info; IN/OUT: the compression settings int32 *cdims; IN: the chunk dims, NULL if not chunked DESCRIPTION Collect the parameters and call HCPcszip_setup_parms to set the computed szip parameters. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetup_szip_parms(int32 id, NC *handle, comp_info *c_info, int32 *cdims) { NC_dim *dim = NULL; /* to check if the dimension is unlimited */ int32 dimindex; /* to obtain the NC_dim record */ NC_var *var = NULL; int32 ndims; int32 xdims[H4_MAX_VAR_DIMS]; int32 nt; int ret_value = SUCCEED; /* clear error stack */ HEclear(); if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ndims = var->assoc->count; for (int i = 0; i < ndims; i++) { dimindex = var->assoc->values[i]; dim = SDIget_dim(handle, dimindex); if (dim == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); xdims[i] = dim->size; } nt = var->HDFtype; ret_value = HCPsetup_szip_parms(c_info, nt, 1, ndims, xdims, cdims); done: return ret_value; } #endif /****************************************************************************** NAME SDsetcompress -- Create/convert a dataset to compressed representation DESCRIPTION Specify a compression scheme for an SD dataset. Valid compression types available for this interface are listed in hcomp.h as COMP_nnnn. IMPORTANT: This will only work on datasets stored in HDF files. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetcompress(int32 id, /* IN: dataset ID */ comp_coder_t comp_type, /* IN: the type of compression to perform on the next image */ comp_info *c_info /* IN: ptr to compression info struct*/) { NC *handle; NC_var *var = NULL; NC_dim *dim; /* to check if the dimension is unlimited */ int32 dimindex; /* to obtain the NC_dim record */ model_info m_info; /* modeling information for the HCcreate() call */ comp_info c_info_x; /* local copy */ uint32 comp_config; intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); if (comp_type < COMP_CODE_NONE || comp_type >= COMP_CODE_INVALID) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Must have encoder to set compression */ HCget_config_info(comp_type, &comp_config); if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } memcpy(&c_info_x, c_info, sizeof(comp_info)); handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* disallow setting compress for SDS with rank = 0 - BMR, bug #1045 */ if (var->shape == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* unlimited dimensions don't work with compression */ /* Get the index of the SDS' first dimension from the list of indices * branching out from NC_var. This index indicates where this dim * is in the "dims" list branching out from NC. */ dimindex = var->assoc->values[0]; /* Retrieve the NC_dim record to check for unlimited dimension */ dim = SDIget_dim(handle, dimindex); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* If this dimension is unlimited, then return FAIL; the subsequent * writing of this SDS will write uncompressed data */ if (dim->size == SD_UNLIMITED) { HGOTO_ERROR(DFE_ARGS, FAIL); } #ifdef H4_HAVE_LIBSZ /* we have the library */ if (comp_type == COMP_CODE_SZIP) { if (SDsetup_szip_parms(id, handle, &c_info_x, NULL) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } #else /* no SZIP */ /* probably covered by test at start */ if (comp_type == COMP_CODE_SZIP) { HGOTO_ERROR(DFE_BADCODER, FAIL); } #endif /* H4_HAVE_LIBSZ */ if (!var->data_ref) { /* doesn't exist */ /* element doesn't exist so we need a reference number */ var->data_ref = Hnewref(handle->hdf_file); if (var->data_ref == 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } } /* end if */ status = (intn)HCcreate(handle->hdf_file, (uint16)DATA_TAG, (uint16)var->data_ref, COMP_MODEL_STDIO, &m_info, comp_type, &c_info_x); if (status != FAIL) { if (var && (var->aid != 0) && (var->aid != FAIL)) { if (Hendaccess(var->aid) == FAIL) { HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); } } var->aid = status; } /* end if */ /* Insert data tag/ref into the variable's Vgroup */ if (var->vgid) { int32 vg; /* attach to the variable's Vgroup */ vg = Vattach(handle->hdf_file, var->vgid, "w"); if (vg == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* add new Vdata to existing Vgroup */ if (Vaddtagref(vg, (int32)DATA_TAG, (int32)var->data_ref) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* detach from the variable's VGroup --- will no longer need it */ if (Vdetach(vg) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } } /* added a new object -- make sure we flush the header */ handle->flags |= NC_HDIRTY; ret_value = (status != FAIL ? SUCCEED : FAIL); done: return ret_value; } /* SDsetcompress */ #ifndef H4_NO_DEPRECATED_SYMBOLS /****************************** Deprecated *********************************** NAME SDgetcompress -- Retrieves compression information of a dataset (Deprecated in favor of SDgetcompinfo) DESCRIPTION This routine uses HCPgetcompress to retrieve the compression type and the compression information of the identified dataset. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetcompress( int32 id, /* IN: dataset ID */ comp_coder_t *comp_type, /* OUT: the type of compression */ comp_info *c_info /* OUT: ptr to compression information structure for storing the retrieved info */ ) { intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); status = SDgetcompinfo(id, comp_type, c_info); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* SDgetcompress */ #endif /* H4_NO_DEPRECATED_SYMBOLS */ /****************************************************************************** NAME SDgetcompinfo -- Retrieves compression information of a dataset DESCRIPTION This routine uses HCPgetcompinfo to retrieve the compression type and the compression information of the identified dataset. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetcompinfo(int32 sdsid, /* IN: dataset ID */ comp_coder_t *comp_type, /* OUT: the type of compression */ comp_info *c_info /* OUT: ptr to compression information structure for storing the retrieved info */ ) { NC *handle; NC_var *var = NULL; intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); if (comp_type == NULL || c_info == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* return with SUCCEED if the data set is empty and not compressed; when the data set is set compressed, the data has a valid reference number */ if (!var->data_ref) { *comp_type = COMP_CODE_NONE; HGOTO_DONE(SUCCEED); } /* use lower-level routine to get the compression information */ status = HCPgetcompinfo(handle->hdf_file, var->data_tag, var->data_ref, comp_type, c_info); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* remove the szip special bit if necessary */ if (*comp_type == COMP_CODE_SZIP) { status = HCPrm_szip_special_bit(c_info); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } done: return ret_value; } /* SDgetcompinfo */ /****************************************************************************** NAME SDgetcomptype -- Retrieves compression method of a dataset DESCRIPTION This routine uses HCPgetcomptype to retrieve the compression type of the identified dataset. RETURNS SUCCEED/FAIL MODIFICATION Dec 2007: Added to work around the problem where an external library is missing, SDgetcompinfo will fail. This new API will not need to get the compression information but only the compression type, which sometime is the only thing an application needs - BMR ******************************************************************************/ intn SDgetcomptype(int32 sdsid, /* IN: dataset ID */ comp_coder_t *comp_type /* OUT: the type of compression */) { NC *handle; NC_var *var = NULL; intn status = FAIL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); if (comp_type == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* return with SUCCEED if the data set is empty and not compressed - when the data set was set to be compressed, the data would have had a valid reference number even there was no data written */ if (!var->data_ref) { *comp_type = COMP_CODE_NONE; HGOTO_DONE(SUCCEED); } /* use lower-level routine to get the compression method */ status = HCPgetcomptype(handle->hdf_file, var->data_tag, var->data_ref, comp_type); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); done: return ret_value; } /* SDgetcomptype */ /****************************************************************************** NAME SDgetdatasize -- Retrieves the sizes of original and compressed data. DESCRIPTION This routine uses HCPgetdatasize to retrievethe original data and compressed data sizes of the identified dataset. At least of the OUT arguments must be non-null and a null argument will be unchanged. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetdatasize(int32 sdsid, /* IN: dataset ID */ int32 *comp_size, /* OUT: size of compressed data */ int32 *orig_size) /* OUT: size of original data */ { NC *handle; NC_var *var = NULL; intn status = FAIL; intn ret_value = SUCCEED; int32 *comp_size_tmp = NULL; int32 *orig_size_tmp = NULL; /* clear error stack */ HEclear(); /* must have at least one non-null argument */ if (comp_size == NULL && orig_size == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* allocate temporary buffers so user's arguments can be kept intact until finished */ if (comp_size != NULL) comp_size_tmp = malloc(sizeof(int32)); if (orig_size != NULL) orig_size_tmp = malloc(sizeof(int32)); /* get NC_var record */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) HGOTO_ERROR(DFE_ARGS, FAIL); if (handle->vars == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* if the data ref# of the SDS is 0, it indicates that the SDS has not been written with data because no storage is created for the SDS data */ if (var->data_ref == 0) { *comp_size_tmp = *orig_size_tmp = 0; } else { /* use lower-level routine to get the data sizes */ status = HCPgetdatasize(handle->hdf_file, var->data_tag, var->data_ref, comp_size_tmp, orig_size_tmp); if (status == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Return the requested sizes */ if (comp_size != NULL) *comp_size = *comp_size_tmp; if (orig_size != NULL) *orig_size = *orig_size_tmp; done: free(comp_size_tmp); free(orig_size_tmp); if (ret_value == FAIL) { if (var && var->aid != 0 && var->aid != FAIL) { Hendaccess(var->aid); var->aid = FAIL; } } return ret_value; } /* SDgetdatasize */ /****************************************************************************** NAME SDfindattr -- find an attribute's index by name DESCRIPTION Given an ID to an object and an attribute name return the index of the attribute with that name. This does not support any form of wildcards / regular expressions RETURNS An attribute index or FAIL ******************************************************************************/ int32 SDfindattr(int32 id, /* IN: object ID */ const char *attrname /* IN: attribute name */) { NC_array *ap = NULL; NC_array **app = NULL; NC_attr **attr = NULL; NC *handle = NULL; int32 attrid; size_t len; int32 ret_value = FAIL; /* clear error stack */ HEclear(); /* determine what type of ID we've been given */ if (SDIapfromid(id, &handle, &app) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ap = (*app); if (ap == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* * ap is the proper attribute list now look up something with this * name */ attr = (NC_attr **)ap->values; len = strlen(attrname); for (attrid = 0; attrid < ap->count; attrid++, attr++) { if (len == (*attr)->name->len && strncmp(attrname, (*attr)->name->values, strlen(attrname)) == 0) { /* found it */ HGOTO_DONE(attrid); } } done: return ret_value; } /* SDfindattr */ /****************************************************************************** NAME SDidtoref -- get a unique reference number for this dataset DESCRIPTION Given an index return the ref of the associated NDG for inclusion in Vgroups and annotations RETURNS A reference number or FAIL ******************************************************************************/ int32 SDidtoref(int32 id /* IN: dataset ID */) { NC *handle = NULL; NC_var *var = NULL; int32 ret_value = FAIL; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } ret_value = (int32)var->ndg_ref; done: return ret_value; } /* SDidtoref */ /****************************************************************************** NAME SDreftoindex -- map a reference number to a dataset index DESCRIPTION Given a ref number return the index of the corresponding dataset RETURNS A dataset index or FAIL ******************************************************************************/ int32 SDreftoindex(int32 fid, /* IN: file ID */ int32 ref /* IN: reference number */) { NC *handle = NULL; NC_var **dp = NULL; intn ii; int32 ret_value = FAIL; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if ((*dp)->ndg_ref == ref) { HGOTO_ERROR(DFE_ARGS, ii); } } ret_value = FAIL; done: return ret_value; } /* SDreftoindex */ /****************************************************************************** NAME SDisrecord -- check is var is a record variable DESCRIPTION Return TRUE if the dataset in question is a record variable else FALSE RETURNS TRUE/FALSE ******************************************************************************/ int32 SDisrecord(int32 id /* IN: dataset ID */) { NC *handle; NC_var *var = NULL; int32 ret_value = TRUE; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FALSE); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FALSE); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FALSE); } if (var->shape == NULL) { /* EP thinks it should return true - BMR, bug #1045 */ HGOTO_ERROR(DFE_ARGS, TRUE); } if (var->shape[0] == SD_UNLIMITED) ret_value = TRUE; else ret_value = FALSE; done: return ret_value; } /* SDisrecord */ /****************************************************************************** NAME SDiscoordvar -- check is var is a coord var DESCRIPTION Return TRUE if the dataset in question is a coordinate variable RETURNS TRUE/FALSE ******************************************************************************/ intn SDiscoordvar(int32 id /* IN: dataset ID */) { NC *handle = NULL; NC_var *var = NULL; NC_dim *dim = NULL; int32 dimindex; intn ret_value = TRUE; /* clear error stack */ HEclear(); handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* check whether this var is an SDS or a coordinate variable, then return the appropriate value (if and else if) */ if (var->var_type == IS_SDSVAR) { HGOTO_DONE(FALSE); } else if (var->var_type == IS_CRDVAR) { HGOTO_DONE(TRUE); } /* whether or not this var is a coord var is unknown because the data was created by earlier version of the library which did not distinguish the two kinds of variables, SDS variable and coordinate variables. (see bugzilla 624) - BMR - 05/14/2007 */ else /* proceed exactly as before the fix of bugzilla 624 is available */ { dimindex = var->assoc->values[0]; dim = SDIget_dim(handle, dimindex); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FALSE); } if (var->name->len != dim->name->len) { HGOTO_ERROR(DFE_ARGS, FALSE); } if (strcmp(var->name->values, dim->name->values)) { HGOTO_ERROR(DFE_ARGS, FALSE); } ret_value = TRUE; } done: return ret_value; } /* SDiscoordvar */ /****************************************************************************** NAME SDsetaccesstype -- set the I/O access type of an SD DESCRIPTION Set the type of I/O (serial, parallel, ...) for accessing the data of the SD. Access types can be DFACC_SERIAL, DFACC_PARALLEL, DFACC_DEFAULT. RETURNS Return SUCCEED if the SD data can be accessed via accesstype. Otherwise return FAIL. ******************************************************************************/ intn SDsetaccesstype(int32 id, /* IN: dataset ID */ uintn accesstype /* IN: access type */) { NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); switch (accesstype) { case DFACC_DEFAULT: case DFACC_SERIAL: case DFACC_PARALLEL: break; default: HGOTO_ERROR(DFE_ARGS, FAIL); } handle = SDIhandle_from_id(id, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } var = SDIget_var(handle, id); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* if aid is not valid yet, there is no access_rec setup yet. */ /* Go ahead and try set it up. */ if (var->aid == FAIL && hdf_get_vp_aid(handle, var) == FAIL) ret_value = FAIL; else ret_value = (intn)Hsetaccesstype(var->aid, accesstype); done: return ret_value; } /* SDsetaccesstype */ /****************************************************************************** NAME SDsetblocksize -- set the size of the linked blocks created. DESCRIPTION Set the size of the blocks used for storing the data for unlimited dimension datasets. This is used when creating new datasets only, it does not have any affect on existing datasets. The block_size should probably be set to a multiple of the "slice" size. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetblocksize(int32 sdsid, /* IN: dataset ID */ int32 block_size /* IN: size of the block in bytes */) { NC *handle = NULL; NC_var *var = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the variable */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* set the block size */ var->block_size = block_size; done: return ret_value; } /* SDsetblocksize */ /****************************************************************************** NAME SDgetblocksize -- get the size of the linked blocks. DESCRIPTION Get the size of the blocks to be used for storing data of unlimited dimension datasets. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetblocksize(int32 sdsid, /* IN: dataset ID */ int32 *block_size /* OUT: size of the block in bytes */) { NC *handle = NULL; NC_var *var = NULL; int32 block_length = -1; int32 temp_aid = -1; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get the variable */ var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* Get access id using data tag/ref. Fail if data ref has not been defined; this happens when SDgetblocksize is called when no data has been written or no special element has been created. -BMR, 2013/12/17 */ temp_aid = var->aid; /* use temp to avoid messing up var->aid. -BMR */ if (temp_aid == FAIL) { if (var->data_ref == 0) /* no data means no linked-block storage */ HGOTO_ERROR(DFE_GENAPP, FAIL); /* Start read access on the element to acquire access id */ temp_aid = Hstartread(handle->hdf_file, var->data_tag, var->data_ref); if (temp_aid == FAIL) /* catch FAIL from Hstartread */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Use internal routine to do the actual retrieval */ if (HLgetblockinfo(temp_aid, &block_length, NULL) == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); if (block_length > 0) *block_size = block_length; /* End access to the temp_aid only when var->aid is -1, so we won't end access var->aid if it was valid. */ if (var->aid == FAIL && temp_aid != FAIL) Hendaccess(temp_aid); done: if (ret_value == FAIL) { /* Failure cleanup */ if (var && var->aid == FAIL && temp_aid != FAIL) Hendaccess(temp_aid); } return ret_value; } /* SDgetblocksize */ /****************************************************************************** NAME SDsetfillmode -- set fill mode as fill or nofill DESCRIPTION Calls ncsetfill(). RETURNS The current fill mode of the file, or FAIL for error. ******************************************************************************/ intn SDsetfillmode(int32 sd_id, /* IN: HDF file ID, returned from SDstart */ intn fillmode /* IN: Desired fill mode for the file, either SD_FILL or SD_NOFILL. SD_FILL is the default mode. */) { NC *handle = NULL; intn cdfid; intn ret_value = FAIL; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(sd_id, CDFTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } cdfid = (intn)sd_id & 0xffff; ret_value = ncsetfill(cdfid, fillmode); done: return ret_value; } /* SDsetfillmode() */ /****************************************************************************** NAME SDsetdimval_comp -- set dimval backward compatibility DESCRIPTION RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDsetdimval_comp(int32 dimid, /* IN: dimension ID, returned from SDgetdimid */ intn comp_mode /* IN: backward compatibility: SD_DIMVAL_BW_COMP -- compatible SD_DIMVAL_BW_INCOMP -- incompatible. (defined in mfhdf.h ) */) { NC *handle = NULL; NC_dim *dim = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(dimid, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, dimid); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* if (dim->size != SD_UNLIMITED && dim->dim00_compat != comp_mode ) */ if (dim->dim00_compat != comp_mode) { dim->dim00_compat = comp_mode; /* make sure it gets reflected in the file */ handle->flags |= NC_HDIRTY; } done: return ret_value; } /* SDsetdimval_comp */ /****************************************************************************** NAME SDisdimval_bwcomp -- get dimval backward compatibility DESCRIPTION RETURNS SD_DIMVAL_BW_COMP if dimval is backward compatible; SD_DIMVAL_BW_INCOMP for not compatible; FAIL for error. ******************************************************************************/ intn SDisdimval_bwcomp(int32 dimid /* IN: dimension ID, returned from SDgetdimid */) { NC *handle = NULL; NC_dim *dim = NULL; intn ret_value = FAIL; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(dimid, DIMTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the dimension structure */ dim = SDIget_dim(handle, dimid); if (dim == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Default is incompatible. Return dim->dim00_compat. if (dim->size == SD_UNLIMITED) ret_value = SD_DIMVAL_BW_COMP; else */ ret_value = dim->dim00_compat; done: return ret_value; } /* SDisdimval_bwcomp */ /*====================== Chunking Routines ================================*/ /****************************************************************************** NAME SDsetchunk -- make SDS a chunked SDS DESCRIPTION This routine makes the SDS a chunked SDS according to the chunk definition passed in. The dataset currently cannot be special already. i.e. NBIT, COMPRESSED, or EXTERNAL. This is an Error. The definition of the HDF_CHUNK_DEF union with relevant fields is: typedef union hdf_chunk_def_u { int32 chunk_lengths[H4_MAX_VAR_DIMS]; Chunk lengths along each dimension struct { int32 chunk_lengths[H4_MAX_VAR_DIMS]; Chunk lengths along each dimension int32 comp_type; Compression type comp_info cinfo; Compression info struct }comp; } HDF_CHUNK_DEF The variable argument 'flags' is a bit-or'd value which can currently be 'HDF_CHUNK' or 'HDF_CHUNK | HDF_COMP'. The simplest is the 'chunk_lengths' array specifying chunk lengths for each dimension where the 'flags' argument set to 'HDF_CHUNK'; COMPRESSION is set by using the 'HDF_CHUNK_DEF' union to set the appropriate compression information along with the required chunk lengths for each dimension. The compression information is the same as that set in 'SDsetcompress()'. The bit-or'd 'flags' argument' is set to 'HDF_CHUNK | HDF_COMP'. See the example in pseudo-C below for further usage. The maximum number of Chunks in an HDF file is 65,535. The dataset currently cannot have an UNLIMITED dimension. The performance of the SDxxx interface with chunking is greatly affected by the users access pattern over the dataset and by the maximum number of chunks set in the chunk cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. See the routine SDsetchunkcache() for further info on the chunk cache and how to set the maximum number of chunks in the chunk cache. A default chunk cache is always created. The following example shows the organization of chunks for a 2D array. e.g. 4x4 array with 2x2 chunks. The array shows the layout of chunks in the chunk array. 4 --------------------- | | | Y | (0,1) | (1,1) | ^ | | | | 2 --------------------- | | | | | | (0,0) | (1,0) | | | | | | --------------------- | 0 2 4 ---------------> X --Without compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set Chunking -- SDsetchunk(sdsid, chunk_def, HDF_CHUNK); ...... } --With compression--: { HDF_CHUNK_DEF chunk_def; ....... -- Set chunk lengths first -- chunk_def.chunk_lengths[0]= 2; chunk_def.chunk_lengths[1]= 2; -- Set compression -- chunk_def.comp.cinfo.deflate.level = 9; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; -- Set Chunking with Compression -- SDsetchunk(sdsid, chunk_def, HDF_CHUNK | HDF_COMP); ...... } NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn SDsetchunk(int32 sdsid, /* IN: sds access id */ HDF_CHUNK_DEF chunk_def, /* IN: chunk definition */ int32 flags /* IN: flags */) { NC *handle = NULL; /* file handle */ NC_var *var = NULL; /* SDS variable */ NC_attr **fill_attr = NULL; /* fill value attribute */ HCHUNK_DEF chunk[1]; /* H-level chunk definition */ HDF_CHUNK_DEF *cdef = NULL; /* SD Chunk definition */ model_info minfo; /* dummy model info struct */ comp_info cinfo; /* compression info - NBIT */ uint32 comp_config; int32 *cdims = NULL; /* array of chunk lengths */ int32 fill_val_len = 0; /* fill value length */ void *fill_val = NULL; /* fill value */ int32 ndims = 0; /* # dimensions i.e. rank */ uint8 nlevels = 1; /* default # levels is 1 */ int8 platntsubclass; /* the machine type of the current platform */ int8 outntsubclass; /* the data's machine type */ uintn convert; /* whether to convert or not */ int32 tBuf_size = 0; /* conversion buffer size */ void *tBuf = NULL; /* buffer used for conversion */ intn i; /* loop variable */ intn ret_value = SUCCEED; /* return value */ /* clear error stack */ HEclear(); /* make sure this is cleared */ memset(chunk, 0, sizeof(chunk[0])); /* get file handle and verify it is an HDF file we only handle dealing with SDS only not coordinate variables */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE || handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get variable from id */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* disallow setting chunk for SDS with rank = 0 - BMR, bug #1045 */ if (var->shape == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Decide type of definition passed in */ switch (flags) { case HDF_CHUNK: /* case where chunk_def only has chunk lengths */ cdef = (HDF_CHUNK_DEF *)&chunk_def; cdims = cdef->chunk_lengths; chunk[0].chunk_flag = 0; /* nothing set for this now */ chunk[0].comp_type = COMP_CODE_NONE; /* nothing set */ chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ chunk[0].cinfo = &cinfo; /* dummy */ chunk[0].minfo = &minfo; /* dummy */ break; case (HDF_CHUNK | HDF_COMP): /* EIP 9/11/03 * We have to take special care if SZIP library is not available; * For all other compression types do */ cdef = (HDF_CHUNK_DEF *)&chunk_def; HCget_config_info((comp_coder_t)cdef->comp.comp_type, &comp_config); if ((comp_config & (COMP_DECODER_ENABLED | COMP_ENCODER_ENABLED)) == 0) { /* coder not present?? */ HGOTO_ERROR(DFE_NOENCODER, FAIL); } if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } if ((comp_coder_t)cdef->comp.comp_type != COMP_CODE_SZIP) { cdims = cdef->comp.chunk_lengths; chunk[0].chunk_flag = SPECIAL_COMP; /* Compression */ chunk[0].comp_type = (comp_coder_t)cdef->comp.comp_type; chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ chunk[0].cinfo = &cdef->comp.cinfo; chunk[0].minfo = &minfo; /* dummy */ } else /* requested compression is SZIP */ #ifdef H4_HAVE_LIBSZ /* we have the library */ { cdims = cdef->comp.chunk_lengths; chunk[0].chunk_flag = SPECIAL_COMP; /* Compression */ chunk[0].comp_type = (comp_coder_t)cdef->comp.comp_type; chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ chunk[0].minfo = &minfo; /* dummy */ memcpy(&cinfo, &(cdef->comp.cinfo), sizeof(comp_info)); if (SDsetup_szip_parms(sdsid, handle, &cinfo, cdims) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } chunk[0].cinfo = &cinfo; } #else /* we do not have the SZIP library */ { HGOTO_ERROR(DFE_BADCODER, FAIL); } #endif /* H4_HAVE_LIBSZ */ break; case (HDF_CHUNK | HDF_NBIT): cdef = (HDF_CHUNK_DEF *)&chunk_def; cdims = cdef->nbit.chunk_lengths; chunk[0].chunk_flag = SPECIAL_COMP; /* NBIT is a type of compression */ chunk[0].comp_type = COMP_CODE_NBIT; /* Nbit compression? */ chunk[0].model_type = COMP_MODEL_STDIO; /* Default */ /* set up n-bit parameters */ cinfo.nbit.nt = var->HDFtype; cinfo.nbit.sign_ext = cdef->nbit.sign_ext; cinfo.nbit.fill_one = cdef->nbit.fill_one; cinfo.nbit.start_bit = cdef->nbit.start_bit; cinfo.nbit.bit_len = cdef->nbit.bit_len; chunk[0].cinfo = &cinfo; chunk[0].minfo = &minfo; /* dummy */ break; default: HGOTO_ERROR(DFE_ARGS, FAIL); } /* Does data exist yet */ if (!var->data_ref) { /* doesn't exist */ /* element doesn't exist so we need a reference number */ var->data_ref = Hnewref(handle->hdf_file); if (var->data_ref == 0) { HGOTO_ERROR(DFE_ARGS, FAIL); } } else /* data ref exists, Error since can't convert existing SDS to chunked */ { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Now start setting chunk info */ ndims = var->assoc->count; /* set number of dims i.e. rank */ /* allocate space for chunk dimensions */ if ((chunk[0].pdims = malloc(ndims * sizeof(DIM_DEF))) == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* initialize dataset/chunk sizes using CHUNK definition structure */ chunk[0].chunk_size = 1; chunk[0].num_dims = ndims; /* Developer's note: should move unlim check to the beginning and clean up this for loop */ for (i = 0; i < ndims; i++) { /* get dimension length from shape arrays */ /* check if dimension in unlimited since we don't handle that yet */ if (var->shape[i] != SD_UNLIMITED) chunk[0].pdims[i].dim_length = (int32)var->shape[i]; else { /* UNLIMITED dimension case */ HGOTO_ERROR(DFE_ARGS, FAIL); } /* set chunk lengths */ if (cdims[i] >= 1) chunk[0].pdims[i].chunk_length = cdims[i]; else { /* chunk length is less than 1 */ HGOTO_ERROR(DFE_ARGS, FAIL); } /* Data distribution along dimensions * Check dimension length against chunk length */ if (cdims[i] == (int32)var->shape[i]) chunk[0].pdims[i].distrib_type = 0; /* NONE */ else chunk[0].pdims[i].distrib_type = 1; /* BLOCK */ /* compute chunk size */ chunk[0].chunk_size *= cdims[i]; } /* end for ndims */ /* Set number type size i.e. size of data type */ chunk[0].nt_size = var->HDFsize; /* allocate space for fill value whose number type is the same as the dataset */ fill_val_len = var->HDFsize; if ((fill_val = malloc(fill_val_len)) == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get fill value if one is set for this Dataset. The number type is the same as that for the dataset. */ fill_attr = (NC_attr **)NC_findattr(&(var->attrs), _FillValue); if (fill_attr != NULL) { NC_copy_arrayvals((char *)fill_val, (*fill_attr)->data); } else /* copy standard default fill value for now */ { void *p = fill_val; switch (var->HDFtype & 0xff) { case DFNT_CHAR: case DFNT_UCHAR: *((uint8 *)p) = FILL_CHAR; break; case DFNT_INT8: case DFNT_UINT8: *((int8 *)p) = FILL_BYTE; break; case DFNT_INT16: case DFNT_UINT16: *((int16 *)p) = FILL_SHORT; break; case DFNT_INT32: case DFNT_UINT32: *((int32 *)p) = FILL_LONG; break; case DFNT_FLOAT32: *((float32 *)p) = FILL_FLOAT; break; case DFNT_FLOAT64: *((float64 *)p) = FILL_DOUBLE; break; default: HGOTO_ERROR(DFE_ARGS, FAIL); } } /* figure out if fill value has to be converted */ if (FAIL == (platntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (DFKisnativeNT(var->HDFtype)) { if (FAIL == (outntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { outntsubclass = DFKislitendNT(var->HDFtype) ? DFNTF_PC : DFNTF_HDFDEFAULT; } convert = (uintn)(platntsubclass != outntsubclass); /* make sure our tmp buffer is big enough to hold fill value */ if (convert && tBuf_size < fill_val_len) { free(tBuf); tBuf_size = fill_val_len; tBuf = malloc(tBuf_size); if (tBuf == NULL) { tBuf_size = 0; HGOTO_ERROR(DFE_NOSPACE, FAIL); } } if (convert) { /* convert fill value */ if (FAIL == DFKconvert(fill_val, tBuf, var->HDFtype, (uint32)(fill_val_len / var->HDFsize), DFACC_WRITE, 0, 0)) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* check to see already special. Error if already special since doubly special elements are not yet handled. HMCcreate should catch this....*/ /* Create SDS as chunked element */ ret_value = HMCcreate(handle->hdf_file, /* HDF file handle */ (uint16)DATA_TAG, /* Data tag */ (uint16)var->data_ref, /* Data ref */ nlevels, /* nlevels */ fill_val_len, /* fill value length */ tBuf, /* fill value */ (HCHUNK_DEF *)chunk /* chunk definition */); } else /* no need to convert fill value */ { /* check to see already special. Error if already special since doubly special elements are not yet handled. HMCcreate should catch this....*/ /* Create SDS as chunked element */ ret_value = HMCcreate(handle->hdf_file, /* HDF file handle */ (uint16)DATA_TAG, /* Data tag */ (uint16)var->data_ref, /* Data ref */ nlevels, /* nlevels */ fill_val_len, /* fill value length */ fill_val, /* fill value */ (HCHUNK_DEF *)chunk /* chunk definition */); } /* check return */ if (ret_value != FAIL) { /* close old aid and set new one ..hmm......maybe this is for the doubly special hack since this code framework came from SDsetcompress()....*/ if ((var->aid != 0) && (var->aid != FAIL)) { if (Hendaccess(var->aid) == FAIL) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } var->aid = ret_value; ret_value = SUCCEED; /* re-set to successful */ } /* end if */ done: /* free fill value */ free(fill_val); free(tBuf); /* free chunk dims */ free(chunk[0].pdims); return ret_value; } /* SDsetchunk */ /****************************************************************************** NAME SDgetchunkinfo -- get Info on SDS DESCRIPTION This routine gets any special information on the SDS. If its chunked, chunked and compressed or just a regular SDS. Currently it will only fill the array of chunk lengths for each dimension as specified in the 'HDF_CHUNK_DEF' union. It does not tell you the type of compression or the compression parameters used. You can pass in a NULL for 'chunk_def' if don't want the chunk lengths for each dimension. If successful it will return a bit-or'd value in 'flags' indicating if the SDS is chunked(HDF_CHUNK), chunked and compressed(HDF_CHUNK | HDF_COMP) or non-chunked(HDF_NONE). e.g. 4x4 array - Pseudo-C { HDF_CHUNK_DEF rchunk_def; int32 cflags; ... SDgetchunkinfo(sdsid, &rchunk_def, &cflags); ... } RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetchunkinfo(int32 sdsid, /* IN: sds access id */ HDF_CHUNK_DEF *chunk_def, /* IN/OUT: chunk definition */ int32 *flags /* IN/OUT: flags */) { NC *handle = NULL; /* file handle */ NC_var *var = NULL; /* SDS variable */ sp_info_block_t info_block; /* special info block */ comp_coder_t comp_type; comp_info c_info; int16 special; /* Special code */ intn i; /* loop variable */ intn ret_value = SUCCEED; /* return value */ /* Clear error stack */ HEclear(); /* Check args */ /* Get file handle and verify it is an HDF file we only handle dealing with SDS only not coordinate variables */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE || handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Get variable from id */ var = SDIget_var(handle, sdsid); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* If SDsetchunk had been called for this SDS, data_ref would have been a valid one. This is the case where data set is empty and not special */ if (var->data_ref == 0) { *flags = HDF_NONE; /* regular SDS */ HGOTO_DONE(SUCCEED); } #ifdef added_by_mistake /* Replaced this if statement by if (var->aid == FAIL) because it seemed that hdf_get_vp_aid was called here by mistake (perhaps, copy/paste.) For more info, see SVN log messages and bug HDFFR-171. -BMR, 2011/10 */ /* Check if data aid exists; if not, set up an access elt for reading */ if (var->aid == FAIL && hdf_get_vp_aid(handle, var) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } #endif /* Need to get access id for the subsequent calls */ if (var->aid == FAIL) { var->aid = Hstartread(handle->hdf_file, var->data_tag, var->data_ref); if (var->aid == FAIL) /* catch FAIL from Hstartread */ HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* Inquire about element's specialness */ ret_value = Hinquire(var->aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* Make sure it is chunked element */ if (special == SPECIAL_CHUNKED) { /* Get info about chunked element */ if ((ret_value = HDget_special_info(var->aid, &info_block)) != FAIL) { /* Does user want chunk/comp info back? */ /* If no compression, fill in chunk length, otherwise, fill in chunk length and compression info. */ switch (info_block.comp_type) { case COMP_CODE_NONE: *flags = HDF_CHUNK; /* if chunk info is requested */ if (chunk_def != NULL) { /* copy chunk lengths over */ for (i = 0; i < info_block.ndims; i++) chunk_def->chunk_lengths[i] = info_block.cdims[i]; } break; case COMP_CODE_NBIT: *flags = (HDF_CHUNK | HDF_NBIT); /* if chunk info is requested */ if (chunk_def != NULL) { /* copy chunk lengths over */ for (i = 0; i < info_block.ndims; i++) chunk_def->nbit.chunk_lengths[i] = info_block.cdims[i]; /* get the NBIT compression info */ ret_value = HCPgetcompinfo(handle->hdf_file, var->data_tag, var->data_ref, &comp_type, &c_info); /* For backward compatibility, it will not fail here. However, the compression information parameters will be set to -1 to indicate that there are no compression information retrieved - BMR - 2009/06 */ if (ret_value == FAIL) { chunk_def->nbit.start_bit = chunk_def->nbit.bit_len = chunk_def->nbit.sign_ext = chunk_def->nbit.fill_one = -1; } else { chunk_def->nbit.start_bit = c_info.nbit.start_bit; chunk_def->nbit.bit_len = c_info.nbit.bit_len; chunk_def->nbit.sign_ext = c_info.nbit.sign_ext; chunk_def->nbit.fill_one = c_info.nbit.fill_one; } } break; default: *flags = (HDF_CHUNK | HDF_COMP); /* if chunk info is requested */ if (chunk_def != NULL) { /* copy chunk lengths over */ for (i = 0; i < info_block.ndims; i++) { chunk_def->comp.chunk_lengths[i] = info_block.cdims[i]; } /* get the compression info */ ret_value = HCPgetcompinfo(handle->hdf_file, var->data_tag, var->data_ref, &comp_type, &c_info); /* For backward compatibility, it will not fail here. However, the compression information parameters will be set to -1 to indicate that there are no compression information retrieved - EIP/BMR - 2010/02 */ if (ret_value == FAIL) { chunk_def->comp.comp_type = info_block.comp_type; switch (info_block.comp_type) { case COMP_CODE_NBIT: chunk_def->comp.cinfo.nbit.nt = chunk_def->comp.cinfo.nbit.sign_ext = chunk_def->comp.cinfo.nbit.fill_one = chunk_def->comp.cinfo.nbit.start_bit = chunk_def->comp.cinfo.nbit.bit_len = -1; break; case COMP_CODE_SKPHUFF: chunk_def->comp.cinfo.skphuff.skp_size = -1; break; case COMP_CODE_DEFLATE: chunk_def->comp.cinfo.deflate.level = -1; break; case COMP_CODE_SZIP: chunk_def->comp.cinfo.szip.pixels = chunk_def->comp.cinfo.szip.pixels_per_scanline = chunk_def->comp.cinfo.szip.options_mask = chunk_def->comp.cinfo.szip.bits_per_pixel = chunk_def->comp.cinfo.szip.pixels_per_block = -1; break; /* What about JPEG? - BMR */ default: /* no additional info needed */ break; } /* end switch */ } else { memcpy(&(chunk_def->comp.cinfo), &c_info, sizeof(comp_info)); chunk_def->comp.comp_type = (int32)comp_type; /* remove the szip special bit if necessary */ if (comp_type == COMP_CODE_SZIP) { ret_value = HCPrm_szip_special_bit(&chunk_def->comp.cinfo); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } } /* chunk_def != NULL */ break; /* default */ } /* end of switch info_block.comp_type */ /* Free up info in special info block, allocated by the library */ free(info_block.cdims); } } else /* not special chunked element */ *flags = HDF_NONE; /* regular SDS */ /* End access to the access id */ if (Hendaccess(var->aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); var->aid = FAIL; done: if (ret_value == FAIL) { /* Failure cleanup */ /* End access to the aid if necessary */ if (var && var->aid != FAIL) { Hendaccess(var->aid); var->aid = FAIL; } } /* Normal cleanup */ return ret_value; } /* SDgetchunkinfo() */ /****************************************************************************** NAME SDwritechunk -- write the specified chunk to the SDS DESCRIPTION This routine writes a whole chunk of data to the chunked SDS specified by chunk 'origin' for the given SDS and can be used instead of SDwritedata() when this information is known. This routine has less overhead and is much faster than using SDwritedata(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See SDsetchunk() for a description of the organization of chunks in an SDS. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn SDwritechunk(int32 sdsid, /* IN: access aid to SDS */ int32 *origin, /* IN: origin of chunk to write */ const void *datap /* IN: buffer for data */) { NC *handle = NULL; /* file handle */ NC_var *var = NULL; /* SDS variable */ int16 special; /* Special code */ int32 csize; /* physical chunk size */ uint32 byte_count; /* bytes to write */ int8 platntsubclass; /* the machine type of the current platform */ int8 outntsubclass; /* the data's machine type */ uintn convert; /* whether to convert or not */ comp_coder_t comp_type; uint32 comp_config; int32 status; intn i; sp_info_block_t info_block; /* special info block */ uint32 tBuf_size = 0; /* conversion buffer size */ void *tBuf = NULL; /* buffer used for conversion */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); info_block.cdims = NULL; /* Check args */ if (origin == NULL || datap == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file handle and verify it is an HDF file we only handle writinng to SDS only not coordinate variables */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE || handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get variable from id */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Check to see if data aid exists? i.e. may need to create a ref for SDS */ if (var->aid == FAIL && hdf_get_vp_aid(handle, var) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Check compression method is enabled */ status = HCPgetcomptype(handle->hdf_file, var->data_tag, var->data_ref, &comp_type); if (status != FAIL) if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_INVALID) { /* Must have encoder to write */ HCget_config_info(comp_type, &comp_config); if ((comp_config & COMP_ENCODER_ENABLED) == 0) { /* encoder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } } /* inquire about element */ ret_value = Hinquire(var->aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) { /* yes */ /* get ready to write */ handle->xdrs->x_op = XDR_ENCODE; /* get info about chunked element */ if ((ret_value = HDget_special_info(var->aid, &info_block)) != FAIL) { /* calculate chunk size */ csize = 1; for (i = 0; i < info_block.ndims; i++) csize *= info_block.cdims[i]; /* adjust for number type size */ csize *= var->HDFsize; /* figure out if data needs to be converted */ byte_count = csize; if (FAIL == (platntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (DFKisnativeNT(var->HDFtype)) { if (FAIL == (outntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { ret_value = FAIL; HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { outntsubclass = DFKislitendNT(var->HDFtype) ? DFNTF_PC : DFNTF_HDFDEFAULT; } convert = (uintn)(platntsubclass != outntsubclass); /* make sure our tmp buffer is big enough to hold everything */ if (convert && tBuf_size < byte_count) { free(tBuf); tBuf_size = byte_count; tBuf = malloc(tBuf_size); if (tBuf == NULL) { tBuf_size = 0; ret_value = FAIL; HGOTO_ERROR(DFE_NOSPACE, FAIL); } } /* Write chunk out, */ if (convert) { /* convert it */ if (FAIL == DFKconvert((void *)datap, tBuf, var->HDFtype, (byte_count / var->HDFsize), DFACC_WRITE, 0, 0)) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } /* write it out now */ if ((ret_value = HMCwriteChunk(var->aid, origin, tBuf)) != FAIL) { HGOTO_DONE(SUCCEED); } /* need to make sure correctness - remove when done */ else HGOTO_ERROR(DFE_WRITEERROR, FAIL); } /* end if */ else { if ((ret_value = HMCwriteChunk(var->aid, origin, datap)) != FAIL) { HGOTO_DONE(SUCCEED); } /* need to make sure correctness - remove when done */ else HGOTO_ERROR(DFE_WRITEERROR, FAIL); } } /* end if get special info block */ } else /* not special CHUNKED */ ret_value = FAIL; } /* end if Hinquire */ done: /* Release resource */ free(info_block.cdims); free(tBuf); return ret_value; } /* SDwritechunk() */ /****************************************************************************** NAME SDreadchunk -- read the specified chunk to the SDS DESCRIPTION This routine reads a whole chunk of data from the chunked SDS specified by chunk 'origin' for the given SDS and can be used instead of SDreaddata() when this information is known. This routine has less overhead and is much faster than using SDreaddata(). Origin specifies the coordinates of the chunk according to the chunk position in the overall chunk array. 'datap' must point to a whole chunk of data. See SDsetchunk() for a description of the organization of chunks in an SDS. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS SUCCEED/FAIL AUTHOR -GeorgeV ******************************************************************************/ intn SDreadchunk(int32 sdsid, /* IN: access aid to SDS */ int32 *origin, /* IN: origin of chunk to write */ void *datap /* IN/OUT: buffer for data */) { NC *handle = NULL; /* file handle */ NC_var *var = NULL; /* SDS variable */ int16 special; /* Special code */ int32 csize; /* physical chunk size */ uint32 byte_count; /* bytes to read */ int8 platntsubclass; /* the machine type of the current platform */ int8 outntsubclass; /* the data's machine type */ uintn convert; /* whether to convert or not */ comp_coder_t comp_type; uint32 comp_config; int32 status; intn i; sp_info_block_t info_block; /* special info block */ uint32 tBuf_size = 0; /* conversion buffer size */ void *tBuf = NULL; /* buffer used for conversion */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); info_block.cdims = NULL; /* Check args */ if (origin == NULL || datap == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); /* get file handle and verify it is an HDF file we only handle reading from SDS only not coordinate variables */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE || handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get variable from id */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Dev note: empty SDS should have been checked here and SDreadchunk would have failed, but since it wasn't, for backward compatibility, we won't do it now either. -BMR 2011 */ #ifdef added_by_mistake /* Replaced this if statement by if (var->aid == FAIL) because it seemed that hdf_get_vp_aid was called here by mistake (perhaps, copy/paste.) For more info, see SVN log messages and bug HDFFR-171. -BMR, 2011/10 */ /* Check to see if data aid exists? i.e. may need to create a ref for SDS */ if (var->aid == FAIL && hdf_get_vp_aid(handle, var) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } #endif /* Check compression method is enabled */ status = HCPgetcomptype(handle->hdf_file, var->data_tag, var->data_ref, &comp_type); if (status != FAIL) if (comp_type != COMP_CODE_NONE && comp_type != COMP_CODE_INVALID) { /* Must have decoder to read data */ HCget_config_info(comp_type, &comp_config); if ((comp_config & COMP_DECODER_ENABLED) == 0) { /* decoder not present?? */ HGOTO_ERROR(DFE_BADCODER, FAIL); } } /* Need to get access id for the following calls */ if (var->aid == FAIL) { var->aid = Hstartread(handle->hdf_file, var->data_tag, var->data_ref); if (var->aid == FAIL) /* catch FAIL from Hstartread */ HGOTO_ERROR(DFE_CANTACCESS, FAIL); } /* inquire about element */ ret_value = Hinquire(var->aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) { /* yes */ /* get ready to read */ handle->xdrs->x_op = XDR_DECODE; /* get info about chunked element */ if ((ret_value = HDget_special_info(var->aid, &info_block)) != FAIL) { /* calculate chunk size */ csize = 1; for (i = 0; i < info_block.ndims; i++) csize *= info_block.cdims[i]; /* adjust for number type size */ csize *= var->HDFsize; /* figure out if data needs to be converted */ byte_count = csize; if (FAIL == (platntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (DFKisnativeNT(var->HDFtype)) { if (FAIL == (outntsubclass = DFKgetPNSC(var->HDFtype, DF_MT))) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } } else { outntsubclass = DFKislitendNT(var->HDFtype) ? DFNTF_PC : DFNTF_HDFDEFAULT; } convert = (uintn)(platntsubclass != outntsubclass); /* make sure our tmp buffer is big enough to hold everything */ if (convert && tBuf_size < byte_count) { free(tBuf); tBuf_size = byte_count; tBuf = malloc(tBuf_size); if (tBuf == NULL) { tBuf_size = 0; HGOTO_ERROR(DFE_NOSPACE, FAIL); } } /* read chunk in */ if (convert) { /* read it in */ if ((ret_value = HMCreadChunk(var->aid, origin, tBuf)) != FAIL) { /* convert chunk */ if (FAIL == DFKconvert(tBuf, datap, var->HDFtype, (byte_count / var->HDFsize), DFACC_READ, 0, 0)) { HGOTO_ERROR(DFE_INTERNAL, FAIL); } ret_value = SUCCEED; } else HGOTO_ERROR(DFE_READERROR, FAIL); } /* end if */ else { if ((ret_value = HMCreadChunk(var->aid, origin, datap)) != FAIL) { ret_value = SUCCEED; } else HGOTO_ERROR(DFE_READERROR, FAIL); } } /* end if get special info block */ } else /* not special CHUNKED */ ret_value = FAIL; } /* end if Hinquire */ /* End access to the access id */ if (Hendaccess(var->aid) == FAIL) HGOTO_ERROR(DFE_CANTENDACCESS, FAIL); var->aid = FAIL; done: if (ret_value == FAIL) { /* Failure cleanup */ /* End access to the aid if necessary */ if (var && var->aid != FAIL) { Hendaccess(var->aid); var->aid = FAIL; } } /* Release resource */ free(info_block.cdims); free(tBuf); return ret_value; } /* SDreadchunk() */ /****************************************************************************** NAME SDsetchunkcache - maximum number of chunks to cache DESCRIPTION Set the maximum number of chunks to cache. The cache contains the Least Recently Used(LRU cache replacement policy) chunks. This routine allows the setting of maximum number of chunks that can be cached, 'maxcache'. The performance of the SDxxx interface with chunking is greatly affected by the users access pattern over the dataset and by the maximum number of chunks set in the chunk cache. The number chunks that can be set in the cache is process memory limited. It is a good idea to always set the maximum number of chunks in the cache as the default heuristic does not take into account the memory available for the application. By default when the SDS is promoted to a chunked element the maximum number of chunks in the cache 'maxcache' is set to the number of chunks along the last dimension. The values set here affects the current SDS object's caching behaviour. If the chunk cache is full and 'maxcache' is greater then the current 'maxcache' value, then the chunk cache is reset to the new 'maxcache' value, else the chunk cache remains at the current 'maxcache' value. If the chunk cache is not full, then the chunk cache is set to the new 'maxcache' value only if the new 'maxcache' value is greater than the current number of chunks in the cache. Use flags argument of 'HDF_CACHEALL' if the whole object is to be cached in memory, otherwise pass in zero(0). Currently you can only pass in zero. See SDsetchunk() for a description of the organization of chunks in an SDS. NOTE: This routine directly calls a Special Chunked Element fcn HMCxxx. RETURNS Returns the 'maxcache' value for the chunk cache if successful and FAIL otherwise AUTHOR -GeorgeV ******************************************************************************/ intn SDsetchunkcache(int32 sdsid, /* IN: access aid to mess with */ int32 maxcache, /* IN: max number of chunks to cache */ int32 flags /* IN: flags = 0, HDF_CACHEALL */) { NC *handle = NULL; /* file handle */ NC_var *var = NULL; /* SDS variable */ int16 special; /* Special code */ intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Check args */ if (maxcache < 1) { HGOTO_ERROR(DFE_ARGS, FAIL); } if (flags != 0 && flags != HDF_CACHEALL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get file handle and verify it is an HDF file we only handle dealing with SDS only not coordinate variables */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL || handle->file_type != HDF_FILE || handle->vars == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get variable from id */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* Check to see if data aid exists? i.e. may need to create a ref for SDS */ if (var->aid == FAIL && hdf_get_vp_aid(handle, var) == FAIL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* inquire about element */ ret_value = Hinquire(var->aid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &special); if (ret_value != FAIL) { if (special == SPECIAL_CHUNKED) ret_value = HMCsetMaxcache(var->aid, maxcache, flags); /* set cache*/ else ret_value = FAIL; } done: return ret_value; } /* SDsetchunkcache() */ /****************************************************************************** NAME SDcheckempty -- checks whether an SDS is empty DESCRIPTION Given an sdsid, set the second parameter, emptySDS, to TRUE if the SDS has not been written with data, and FALSE, otherwise. RETURNS SUCCEED/FAIL ******************************************************************************/ int32 SDcheckempty(int32 sdsid, /* IN: dataset ID */ intn *emptySDS /* TRUE if SDS is empty */) { NC *handle = NULL; /* file record struct */ NC_var *var = NULL; /* variable record struct */ int32 ret_value = SUCCEED; /* clear error stack */ HEclear(); /* get the handle */ handle = SDIhandle_from_id(sdsid, SDSTYPE); if (handle == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* get the variable */ var = SDIget_var(handle, sdsid); if (var == NULL) { HGOTO_ERROR(DFE_ARGS, FAIL); } /* assume that the SDS is not empty until proving otherwise */ *emptySDS = FALSE; /* if the data ref# of the SDS is 0, it indicates that the SDS has not been written with data because no storage is created for the SDS data */ if (var->data_ref == 0) { *emptySDS = TRUE; } else { /* data_ref is not 0, so must check on special SDSs to determine if the SDS is empty */ /* check for unlimited dimension, assuming that unlimited dimension is still not allowed with other specialness, according to GeorgeV */ if (var->shape != NULL && var->shape[0] == NC_UNLIMITED) { /* if data has been written, var->numrecs will show the size of the unlimited dimension */ if (var->numrecs <= 0) *emptySDS = TRUE; } /* handle other specialness via lower level functions */ else { ret_value = HDcheck_empty(handle->hdf_file, var->data_tag, var->data_ref, emptySDS); if (ret_value == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } } /* var->data_ref != 0 */ done: return ret_value; } /* SDcheckempty */ /****************************************************************************** NAME SDidtype -- returns the type of an id DESCRIPTION Given an id, return its type, which is either an SD id, an SDS id, or a dimension id, or indicate that it is not a valid SD API id. RETURNS A value of type hdf_idtype_t, which can be either of the following: SD_ID, SDS_ID, DIM_ID, NOT_SDAPI_ID. ******************************************************************************/ hdf_idtype_t SDidtype(int32 an_id) { NC *handle = NULL; /* file record struct */ hdf_idtype_t ret_value = NOT_SDAPI_ID; /* clear error stack */ HEclear(); /* Assuming that the id is an SD id, get and check the handle */ handle = SDIhandle_from_id(an_id, CDFTYPE); /* If it is, indicate so */ if (handle != NULL) ret_value = SD_ID; /* otherwise, check further... */ else { /* Assuming that it is an SDS id, get and check the handle */ handle = SDIhandle_from_id(an_id, SDSTYPE); /* If it is, indicate so */ if (handle != NULL) ret_value = SDS_ID; /* otherwise, check if it is a dimension id, or just not valid */ else { handle = SDIhandle_from_id(an_id, DIMTYPE); if (handle != NULL) ret_value = DIM_ID; else ret_value = NOT_SDAPI_ID; } } return ret_value; } /* SDidtype */ /****************************************************************************** NAME SDreset_maxopenfiles -- resets the maximum number of files can be opened at a time. DESCRIPTION Uses NC local function NC_reset_maxopenfiles to change the maximum number of opened files allowed. This involves re-allocating of the internal cdf list. RETURNS The current maximum number of opened files allowed, or FAIL, if unable to reset it. ******************************************************************************/ intn SDreset_maxopenfiles(intn req_max) { intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Reset the max NC open and re-allocate cdf list appropriately */ ret_value = NC_reset_maxopenfiles(req_max); if (ret_value == -1) HGOTO_ERROR(DFE_INTERNAL, FAIL); /* should propagate error code */ done: return ret_value; } /* SDreset_maxopenfiles */ /****************************************************************************** NAME SDget_maxopenfiles -- retrieves the current number of opened files allowed in HDF and the maximum number of opened files allowed on a system. DESCRIPTION Uses NC_get_maxopenfiles. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDget_maxopenfiles(intn *curr_max, /* OUT: current # of open files allowed */ intn *sys_limit) /* OUT: max # of open files allowed on a system */ { intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Retrieve the current max and the system limit */ if (curr_max != NULL) { *curr_max = NC_get_maxopenfiles(); if (*curr_max == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } if (sys_limit != NULL) { *sys_limit = NC_get_systemlimit(); if (*sys_limit == FAIL) HGOTO_ERROR(DFE_INTERNAL, FAIL); } done: return ret_value; } /* SDget_maxopenfiles */ /****************************************************************************** NAME SDget_numopenfiles -- returns the number of files currently being opened. DESCRIPTION Uses NC_get_numopencdfs. RETURNS The number of files currently being opened or FAIL. ******************************************************************************/ intn SDget_numopenfiles(void) { intn ret_value = SUCCEED; /* clear error stack */ HEclear(); ret_value = (intn)NC_get_numopencdfs(); return ret_value; } /* SDget_numopenfiles */ /****************************************************************************** NAME SDgetfilename -- retrieves the name of the file given its ID. DESCRIPTION Given an ID to a file, returns its name via parameter 'filename.' The user is responsible for allocating sufficient space to hold the file name. It can be at most H4_MAX_NC_NAME characters in length. RETURNS Length of the file name, without '\0', on success, and FAIL, otherwise. ******************************************************************************/ intn SDgetfilename(int32 fid, /* IN: file ID */ char *filename /* OUT: name of the file */) { NC *handle = NULL; intn len; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* check that fid is valid */ handle = SDIhandle_from_id(fid, CDFTYPE); if (handle == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); len = strlen(handle->path); if (filename != NULL) { memcpy(filename, handle->path, len); filename[len] = '\0'; } ret_value = len; done: return ret_value; } /* SDgetfilename */ /****************************************************************************** NAME SDgetnamelen -- retrieves the length of the name of a file, a dataset, or a dimension. DESCRIPTION Given an id, retrieves the length of its name. RETURNS SUCCEED/FAIL ******************************************************************************/ intn SDgetnamelen(int32 id, /* IN: object ID */ uint16 *name_len /* OUT: buffer for name's length */) { NC *handle = NULL; NC_var *var = NULL; NC_dim *dim = NULL; intn ret_value = SUCCEED; /* clear error stack */ HEclear(); /* Assuming that the id is an SD id, get the file handle */ handle = SDIhandle_from_id(id, CDFTYPE); /* If it is, obtain the file name's length */ if (handle != NULL) *name_len = (uint16)strlen(handle->path); /* otherwise, check further... */ else { /* Assuming that it is an id of an SDS, get its file handle */ handle = SDIhandle_from_id(id, SDSTYPE); /* If it is, get the NC_var record, and obtain the SDS name's length */ if (handle != NULL) { var = SDIget_var(handle, id); if (var == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); *name_len = (uint16)var->name->len; } /* otherwise, check if it is a dimension id, or just not valid */ else { handle = SDIhandle_from_id(id, DIMTYPE); if (handle != NULL) { dim = SDIget_dim(handle, id); if (dim == NULL) HGOTO_ERROR(DFE_ARGS, FAIL); *name_len = (uint16)dim->name->len; } else /* invalid id */ HGOTO_ERROR(DFE_ARGS, FAIL); } } done: return ret_value; } /* SDgetnamelen */ hdf4-hdf4.3.1/mfhdf/libsrc/nc_priv.h000066400000000000000000000554531503061704500172160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef MFH4_LOCAL_NC_H #define MFH4_LOCAL_NC_H #include "hdf_priv.h" /* * netcdf library 'private' data structures, objects and interfaces */ #ifndef FILENAME_MAX #define FILENAME_MAX 255 #endif /* HDF4's stripped-down XDR implementation */ #include "h4_xdr_priv.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" /* needed for defs of nc_type, ncvoid, ... */ #else #include "hdf4_netcdf.h" #endif /* Constants for sizes of NC types */ #define NC_BYTE_SIZE 1 #define NC_CHAR_SIZE 1 #define NC_SHORT_SIZE 2 #define NC_LONG_SIZE 4 #define NC_FLOAT_SIZE 4 #define NC_DOUBLE_SIZE 8 #define NC_UNSPECIFIED_SIZE 0 /* ptr argument type in internal functions */ #define Void char /* * Include HDF stuff */ #include "vg.h" #include "hfile_priv.h" #include "mfhdf.h" #define ATTR_TAG DFTAG_VH #define DIM_TAG DFTAG_VG #define VAR_TAG DFTAG_VG #define DATA_TAG DFTAG_SD #define BOGUS_TAG ((uint16)721) #define DIMVAL_VERSION00 0 /* fake values */ #define DIMVAL_VERSION01 1 /* 1 elt with value of */ #define BLOCK_MULT 64 /* multiplier for bytes in linked blocks */ #define MAX_BLOCK_SIZE 65536 /* maximum size of block in linked blocks */ #define BLOCK_COUNT 128 /* size of linked block pointer objects */ /* from cdflib.h CDF 2.3 */ #ifndef MAX_VXR_ENTRIES #define MAX_VXR_ENTRIES 10 #endif /* MAX_VXR_ENTRIES */ /* VIX record for CDF variable data storage */ typedef struct vix_t_def { int32 nEntries; /* number of entries in this vix */ int32 nUsed; /* number of entries containing valid data */ int32 firstRec[MAX_VXR_ENTRIES]; /* number of first records */ int32 lastRec[MAX_VXR_ENTRIES]; /* number of last records */ int32 offset[MAX_VXR_ENTRIES]; /* file offset of records */ struct vix_t_def *next; /* next one in line */ } vix_t; /* like, a discriminated union in the sense of xdr */ typedef struct { nc_type type; /* the discriminant */ size_t len; /* the total length originally allocated */ size_t szof; /* sizeof each value */ unsigned count; /* length of the array */ Void *values; /* the actual data */ } NC_array; /* Counted string for names and such */ /* count is the actual size of the buffer for the string len is the length of the string in the buffer count != len when a string is resized to something smaller */ #define NC_compare_string(s1, s2) ((s1)->hash != (s2)->hash ? 1 : strcmp((s1)->values, (s2)->values)) typedef struct { unsigned count; unsigned len; uint32 hash; /* [non-perfect] hash value for faster comparisons */ char *values; } NC_string; /* Counted array of ints for assoc list */ typedef struct { unsigned count; int *values; } NC_iarray; /* NC dimension structure */ typedef struct { NC_string *name; int32 size; int32 dim00_compat; /* compatible with Dim0.0 */ int32 vgid; /* id of the Vgroup representing this dimension */ int32 count; /* Number of pointers to this dimension */ } NC_dim; /* NC attribute */ typedef struct { NC_string *name; NC_array *data; int32 HDFtype; /* it should be in NC_array *data. However, */ /* NC.dims and NC.vars are NC_array too. */ } NC_attr; typedef struct { char path[FILENAME_MAX + 1]; unsigned flags; XDR *xdrs; long begin_rec; /* (off_t) position of the first 'record' */ unsigned long recsize; /* length of 'record' */ int redefid; /* below gets xdr'd */ unsigned numrecs; /* number of 'records' allocated */ NC_array *dims; NC_array *attrs; NC_array *vars; int32 hdf_file; int file_type; int32 vgid; int hdf_mode; /* mode we are attached for */ hdf_file_t cdf_fp; /* file pointer used for CDF files */ } NC; /* NC variable: description and data */ typedef struct { NC_string *name; /* name->values shows data set's name */ NC_iarray *assoc; /* user definition */ unsigned long *shape; /* compiled info (Each holds a dimension size. -BMR) */ unsigned long *dsizes; /* compiled info (Each element holds the amount of space needed to hold values in that dimension, e.g., first dimension size is 10, value type is int32=4, then dsizes[0]=4*10=40. -BMR) */ NC_array *attrs; /* list of attribute structures */ nc_type type; /* the discriminant */ unsigned long len; /* the total length originally allocated */ size_t szof; /* sizeof each value */ long begin; /* seek index, often an off_t */ NC *cdf; /* handle of the file where this var belongs to */ int32 vgid; /* id of the variable's Vgroup */ uint16 data_ref; /* ref of the variable's data storage (if exists), default 0 */ uint16 data_tag; /* tag of the variable's data storage (if exists), default DATA_TAG */ uint16 ndg_ref; /* ref of ndg for this dataset */ hdf_vartype_t var_type; /* type of this variable, default UNKNOWN IS_SDSVAR == this var is an SDS variable IS_CRDVAR == this var is a coordinate variable UNKNOWN == because the var was created prior to this distinction. This is to distinguish b/w a one-dim data set and a coord var of the same name. It's less riskier than using a flag and change the file format, I think. -BMR */ intn data_offset; /* non-traditional data may not begin at 0 */ int32 block_size; /* size of the blocks for unlimited dim. datasets, default -1 */ int numrecs; /* number of records this has been filled up to, for unlimited dim */ int32 aid; /* aid for DFTAG_SD data */ int32 HDFtype; /* type of this variable as HDF thinks */ int32 HDFsize; /* size of this variable as HDF thinks */ /* These next two flags control when space in the file is allocated for a new dataset. They are used (currently) in SDwritedata() and hdf_get_vp_aid() to allocate the full length of a new fixed-size dataset which is not writing fill values, instead of letting them get created as an "appendable" dataset and probably get converted into a linked- block special element when they don't need to be one */ int32 created; /* BOOLEAN == is newly created */ int32 set_length; /* BOOLEAN == needs length set */ int32 is_ragged; /* BOOLEAN == is a ragged array */ int32 *rag_list; /* size of ragged array lines */ int32 rag_fill; /* last line in rag_list to be set */ vix_t *vixHead; /* list of VXR records for CDF data storage */ } NC_var; #define IS_RECVAR(vp) ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0) #define netCDF_FILE 0 #define HDF_FILE 1 #define CDF_FILE 2 HDFLIBAPI const char *cdf_routine_name; /* defined in lerror.c */ #define MAGICOFFSET 0 /* Offset where format version number is written */ /* Format version number for CDF file */ /* Written twice at the beginning of pre-2.6 CDF file */ #define CDFMAGIC 0x0000FFFF /* Format version number for HDF file */ #define HDFXMAGIC 0x0e031301 /* ^N^C^S^A */ /* Format version number for netCDF classic file */ #define NCMAGIC 0x43444601 /* C D F 1 */ /* Format version number for 64-bit offset file */ #define NCMAGIC64 0x43444602 /* C D F 2 */ /* Format version number for link file */ #define NCLINKMAGIC 0x43444c01 /* C D L 1 */ #ifdef __cplusplus extern "C" { #endif /* If using the real netCDF library and API (when --disable-netcdf configure flag is used) * need to mangle the HDF versions of netCDF API function names * to not conflict w/ oriinal netCDF ones */ #ifndef H4_HAVE_NETCDF #define nc_serror HNAME(nc_serror) #define NCadvise HNAME(NCadvise) #define NC_computeshapes HNAME(NC_computeshapes) #define NC_xtypelen HNAME(NC_xtypelen) #define NC_xlen_array HNAME(NC_xlen_array) #define NC_xlen_attr HNAME(NC_xlen_attr) #define NC_xlen_cdf HNAME(NC_xlen_cdf) #define NC_xlen_dim HNAME(NC_xlen_dim) #define NC_xlen_iarray HNAME(NC_xlen_iarray) #define NC_xlen_string HNAME(NC_xlen_string) #define NC_xlen_var HNAME(NC_xlen_var) #define NCmemset HNAME(NCmemset) #define NC_arrayfill HNAME(NC_arrayfill) #define NC_copy_arrayvals HNAME(NC_copy_arrayvals) #define NC_free_array HNAME(NC_free_array) #define NC_free_attr HNAME(NC_free_attr) #define NC_free_cdf HNAME(NC_free_cdf) #define NC_free_dim HNAME(NC_free_dim) #define NC_free_iarray HNAME(NC_free_iarray) #define NC_free_string HNAME(NC_free_string) #define NC_free_var HNAME(NC_free_var) #define NC_incr_array HNAME(NC_incr_array) #define NC_dimid HNAME(NC_dimid) #define NCcktype HNAME(NCcktype) #define NC_indefine HNAME(NC_indefine) #define xdr_cdf HNAME(xdr_cdf) #define xdr_numrecs HNAME(xdr_numrecs) #define xdr_shorts HNAME(xdr_shorts) #define xdr_NC_array HNAME(xdr_NC_array) #define xdr_NC_attr HNAME(xdr_NC_attr) #define xdr_NC_dim HNAME(xdr_NC_dim) #define xdr_NC_fill HNAME(xdr_NC_fill) #define xdr_NC_iarray HNAME(xdr_NC_iarray) #define xdr_NC_string HNAME(xdr_NC_string) #define xdr_NC_var HNAME(xdr_NC_var) #define NC_typelen HNAME(NC_typelen) #define NC_check_id HNAME(NC_check_id) #define NC_dup_cdf HNAME(NC_dup_cdf) #define NC_new_cdf HNAME(NC_new_cdf) #define NC_new_array HNAME(NC_new_array) #define NC_re_array HNAME(NC_re_array) #define NC_new_attr HNAME(NC_new_attr) #define NC_findattr HNAME(NC_findattr) #define NC_new_dim HNAME(NC_new_dim) #define NC_new_iarray HNAME(NC_new_iarray) #define NC_new_string HNAME(NC_new_string) #define NC_re_string HNAME(NC_re_string) #define NC_hlookupvar HNAME(NC_hlookupvar) #define NC_new_var HNAME(NC_new_var) #define NCvario HNAME(NCvario) #define NCcoordck HNAME(NCcoordck) #define xdr_NCvshort HNAME(xdr_NCvshort) #define NC_dcpy HNAME(NC_dcpy) #define NCxdrfile_sync HNAME(NCxdrfile_sync) #define NCxdrfile_create HNAME(NCxdrfile_create) #define NCgenio HNAME(NCgenio) /* from putgetg.c */ #define NC_var_shape HNAME(NC_var_shape) /* from var.c */ #endif /* !H4_HAVE_NETCDF ie. NOT USING HDF version of netCDF ncxxx API */ #define nncpopt H4_F77_FUNC(ncpopt, NCPOPT) #define nncgopt H4_F77_FUNC(ncgopt, NCGOPT) #define nnccre H4_F77_FUNC(nccre, NCCRE) #define nncopn H4_F77_FUNC(ncopn, NCOPN) #define nncddef H4_F77_FUNC(ncddef, NCDDEF) #define nncdid H4_F77_FUNC(ncdid, NCDID) #define nncvdef H4_F77_FUNC(ncvdef, NCVDEF) #define nncvid H4_F77_FUNC(ncvid, NCVID) #define nnctlen H4_F77_FUNC(nctlen, NCTLEN) #define nncclos H4_F77_FUNC(ncclos, NCCLOS) #define nncredf H4_F77_FUNC(ncredf, NCREDF) #define nncendf H4_F77_FUNC(ncendf, NCENDF) #define nncinq H4_F77_FUNC(ncinq, NCINQ) #define nncsnc H4_F77_FUNC(ncsnc, NCSNC) #define nncabor H4_F77_FUNC(ncabor, NCABOR) #define nncdinq H4_F77_FUNC(ncdinq, NCDINQ) #define nncdren H4_F77_FUNC(ncdren, NCDREN) #define nncvinq H4_F77_FUNC(ncvinq, NCVINQ) #define nncvpt1 H4_F77_FUNC(ncvpt1, NCVPT1) #define nncvp1c H4_F77_FUNC(ncvp1c, NCVP1C) #define nncvpt H4_F77_FUNC(ncvpt, NCVPT) #define nncvptc H4_F77_FUNC(ncvptc, NCVPTC) #define nncvptg H4_F77_FUNC(ncvptg, NCVPTG) #define nncvpgc H4_F77_FUNC(ncvpgc, NCVPGC) #define nncvgt1 H4_F77_FUNC(ncvgt1, NCVGT1) #define nncvg1c H4_F77_FUNC(ncvg1c, NCVG1C) #define nncvgt H4_F77_FUNC(ncvgt, NCVGT) #define nncvgtc H4_F77_FUNC(ncvgtc, NCVGTC) #define nncvgtg H4_F77_FUNC(ncvgtg, NCVGTG) #define nncvggc H4_F77_FUNC(ncvggc, NCVGGC) #define nncvren H4_F77_FUNC(ncvren, NCVREN) #define nncapt H4_F77_FUNC(ncapt, NCAPT) #define nncaptc H4_F77_FUNC(ncaptc, NCAPTC) #define nncainq H4_F77_FUNC(ncainq, NCAINQ) #define nncagt H4_F77_FUNC(ncagt, NCAGT) #define nncagtc H4_F77_FUNC(ncagtc, NCAGTC) #define nncacpy H4_F77_FUNC(ncacpy, NCACPY) #define nncanam H4_F77_FUNC(ncanam, NCANAM) #define nncaren H4_F77_FUNC(ncaren, NCAREN) #define nncadel H4_F77_FUNC(ncadel, NCADEL) #define nncsfil H4_F77_FUNC(ncsfil, NCSFIL) #ifdef WIN32 HDFFCLIBAPI void nncpopt(int *val); HDFFCLIBAPI void nncgopt(int *val); HDFFCLIBAPI int nnccre(char *pathname, int *clobmode, int *rcode, int pathnamelen); HDFFCLIBAPI int nncopn(char *pathname, int *rwmode, int *rcode, int pathnamelen); HDFFCLIBAPI int nncddef(int *cdfid, char *dimname, int *dimlen, int *rcode, int dimnamelen); HDFFCLIBAPI int nncdid(int *cdfid, char *dimname, int *rcode, int dimnamelen); HDFFCLIBAPI int nncvdef(int *cdfid, char *varname, int *datatype, int *ndims, int *dimarray, int *rcode, int varnamelen); HDFFCLIBAPI int nncvid(int *cdfid, char *varname, int *rcode, int varnamelen); HDFFCLIBAPI int nnctlen(int *datatype, int *rcode); HDFFCLIBAPI void nncclos(int *cdfid, int *rcode); HDFFCLIBAPI void nncredf(int *cdfid, int *rcode); HDFFCLIBAPI void nncendf(int *cdfid, int *rcode); HDFFCLIBAPI void nncinq(int *cdfid, int *ndims, int *nvars, int *natts, int *recdim, int *rcode); HDFFCLIBAPI void nncsnc(int *cdfid, int *rcode); HDFFCLIBAPI void nncabor(int *cdfid, int *rcode); HDFFCLIBAPI void nncdinq(int *cdfid, int *dimid, char *dimname, int *size, int *rcode, int dimnamelen); HDFFCLIBAPI void nncdren(int *cdfid, int *dimid, char *dimname, int *rcode, int dimnamelen); HDFFCLIBAPI void nncvinq(int *cdfid, int *varid, char *varname, int *datatype, int *ndims, int *dimarray, int *natts, int *rcode, int varnamelen); HDFFCLIBAPI void nncvpt1(int *cdfid, int *varid, int *indices, void *value, int *rcode); HDFFCLIBAPI void nncvp1c(int *cdfid, int *varid, int *indices, char *chval, int *rcode, int chvallen); HDFFCLIBAPI void nncvpt(int *cdfid, int *varid, int *start, int *count, void *value, int *rcode); HDFFCLIBAPI void nncvptc(int *cdfid, int *varid, int *start, int *count, char *string, int *lenstr, int *rcode, int stringlen); HDFFCLIBAPI void nncvptg(int *cdfid, int *varid, int *start, int *count, int *stride, int *basis, void *value, int *rcode); HDFFCLIBAPI void nncvpgc(int *cdfid, int *varid, int *start, int *count, int *stride, int *basis, char *string, int *rcode, int stringlen); HDFFCLIBAPI void nncvgt1(int *cdfid, int *varid, int *indices, void *value, int *rcode); HDFFCLIBAPI void nncvg1c(int *cdfid, int *varid, int *indices, char *chval, int *rcode, int chvallen); HDFFCLIBAPI void nncvgt(int *cdfid, int *varid, int *start, int *count, void *value, int *rcode); HDFFCLIBAPI void nncvgtc(int *cdfid, int *varid, int *start, int *count, char *string, int *lenstr, int *rcode, int stringlen); HDFFCLIBAPI void nncvgtg(int *cdfid, int *varid, int *start, int *count, int *stride, int *basis, void *value, int *rcode); HDFFCLIBAPI void nncvggc(int *cdfid, int *varid, int *start, int *count, int *stride, int *basis, char *string, int *rcode, int stringlen); HDFFCLIBAPI void nncvren(int *cdfid, int *varid, char *varname, int *rcode, int varnamelen); HDFFCLIBAPI void nncapt(int *cdfid, int *varid, char *attname, int *datatype, int *attlen, void *value, int *rcode, int attnamelen); HDFFCLIBAPI void nncaptc(int *cdfid, int *varid, char *attname, int *datatype, int *lenstr, char *string, int *rcode, int attnamelen, int stringlen); HDFFCLIBAPI void nncainq(int *cdfid, int *varid, char *attname, int *datatype, int *attlen, int *rcode, int attnamelen); HDFFCLIBAPI void nncagt(int *cdfid, int *varid, char *attname, void *value, int *rcode, int attnamelen); HDFFCLIBAPI void nncagtc(int *cdfid, int *varid, char *attname, char *string, int *lenstr, int *rcode, int attnamelen, int stringlen); HDFFCLIBAPI void nncacpy(int *incdfid, int *invarid, char *attname, int *outcdfid, int *outvarid, int *rcode, int attnamelen); HDFFCLIBAPI void nncanam(int *cdfid, int *varid, int *attnum, char *attname, int *rcode, int attnamelen); HDFFCLIBAPI void nncaren(int *cdfid, int *varid, char *attname, char *newname, int *rcode, int attnamelen, int newnamelen); HDFFCLIBAPI void nncadel(int *cdfid, int *varid, char *attname, int *rcode, int attnamelen); HDFFCLIBAPI int nncsfil(int *cdfid, int *fillmode, int *rcode); #endif HDFLIBAPI void nc_serror(const char *fmt, ...); HDFLIBAPI void NCadvise(int err, const char *fmt, ...); HDFLIBAPI int NC_computeshapes(NC *handle); HDFLIBAPI int NC_xtypelen(nc_type type); HDFLIBAPI int NC_xlen_array(NC_array *array); HDFLIBAPI int NC_xlen_attr(NC_attr **app); HDFLIBAPI int NC_xlen_cdf(NC *cdf); HDFLIBAPI int NC_xlen_dim(NC_dim **dpp); HDFLIBAPI int NC_xlen_iarray(NC_iarray *iarray); HDFLIBAPI int NC_xlen_string(NC_string *cdfstr); HDFLIBAPI int NC_xlen_var(NC_var **vpp); HDFLIBAPI char *NCmemset(char *s, int c, int n); HDFLIBAPI void NC_arrayfill(void *lo, size_t len, nc_type type); HDFLIBAPI void NC_copy_arrayvals(char *target, NC_array *array); HDFLIBAPI int NC_free_array(NC_array *array); HDFLIBAPI int NC_free_attr(NC_attr *attr); HDFLIBAPI int NC_free_cdf(NC *handle); HDFLIBAPI int NC_free_dim(NC_dim *dim); HDFLIBAPI int NC_free_iarray(NC_iarray *iarray); HDFLIBAPI int NC_free_string(NC_string *cdfstr); HDFLIBAPI int NC_free_var(NC_var *var); HDFLIBAPI Void *NC_incr_array(NC_array *array, Void *tail); HDFLIBAPI int NC_dimid(NC *handle, char *name); HDFLIBAPI bool_t NCcktype(nc_type datatype); HDFLIBAPI bool_t NC_indefine(int cdfid, bool_t iserr); HDFLIBAPI bool_t xdr_cdf(XDR *xdrs, NC **handlep); HDFLIBAPI bool_t xdr_numrecs(XDR *xdrs, NC *handle); HDFLIBAPI bool_t xdr_shorts(XDR *xdrs, short *sp, unsigned cnt); HDFLIBAPI bool_t xdr_NC_array(XDR *xdrs, NC_array **app); HDFLIBAPI bool_t xdr_NC_attr(XDR *xdrs, NC_attr **app); HDFLIBAPI bool_t xdr_NC_dim(XDR *xdrs, NC_dim **dpp); HDFLIBAPI bool_t xdr_NC_fill(XDR *xdrs, NC_var *vp); HDFLIBAPI bool_t xdr_NC_iarray(XDR *xdrs, NC_iarray **ipp); HDFLIBAPI bool_t xdr_NC_string(XDR *xdrs, NC_string **spp); HDFLIBAPI bool_t xdr_NC_var(XDR *xdrs, NC_var **vpp); HDFLIBAPI size_t NC_typelen(nc_type type); HDFLIBAPI NC *NC_check_id(int cdfid); HDFLIBAPI NC *NC_dup_cdf(const char *name, int mode, NC *old); HDFLIBAPI NC *NC_new_cdf(const char *name, int mode); HDFLIBAPI NC_array *NC_new_array(nc_type type, unsigned count, const void *values); HDFLIBAPI NC_array *NC_re_array(NC_array *old, nc_type type, unsigned count, const void *values); HDFLIBAPI NC_attr *NC_new_attr(const char *name, nc_type type, unsigned count, const void *values); HDFLIBAPI NC_attr **NC_findattr(NC_array **ap, const char *name); HDFLIBAPI NC_dim *NC_new_dim(const char *name, long size); HDFLIBAPI NC_iarray *NC_new_iarray(unsigned count, const int values[]); HDFLIBAPI NC_string *NC_new_string(unsigned count, const char *str); HDFLIBAPI NC_string *NC_re_string(NC_string *old, unsigned count, const char *str); HDFLIBAPI NC_var *NC_hlookupvar(NC *handle, int varid); HDFLIBAPI NC_var *NC_new_var(const char *name, nc_type type, int ndims, const int *dims); HDFLIBAPI int NCvario(NC *handle, int varid, const long *start, const long *edges, void *values); HDFLIBAPI bool_t NCcoordck(NC *handle, NC_var *vp, const long *coords); HDFLIBAPI bool_t xdr_NCvshort(XDR *xdrs, unsigned which, short *values); HDFLIBAPI bool_t NC_dcpy(XDR *target, XDR *source, long nbytes); HDFLIBAPI int NCxdrfile_sync(XDR *xdrs); HDFLIBAPI int NCxdrfile_create(XDR *xdrs, const char *path, int ncmode); HDFLIBAPI intn hdf_fill_array(Void *storage, int32 len, Void *value, int32 type); HDFLIBAPI intn hdf_get_data(NC *handle, NC_var *vp); HDFLIBAPI int32 hdf_get_vp_aid(NC *handle, NC_var *vp); HDFLIBAPI int hdf_map_type(nc_type); HDFLIBAPI nc_type hdf_unmap_type(int); HDFLIBAPI intn hdf_get_ref(NC *, int); HDFLIBAPI intn hdf_create_dim_vdata(XDR *, NC *, NC_dim *); HDFLIBAPI intn hdf_create_compat_dim_vdata(XDR *xdrs, NC *handle, NC_dim *dim, int32 dimval_ver); HDFLIBAPI intn hdf_write_attr(XDR *, NC *, NC_attr **); HDFLIBAPI int32 hdf_write_dim(XDR *, NC *, NC_dim **, int32); HDFLIBAPI int32 hdf_write_var(XDR *, NC *, NC_var **); HDFLIBAPI intn hdf_write_xdr_cdf(XDR *, NC **); HDFLIBAPI intn hdf_conv_scales(NC **); HDFLIBAPI intn hdf_read_dims(XDR *, NC *, int32); HDFLIBAPI NC_array *hdf_read_attrs(XDR *, NC *, int32); HDFLIBAPI intn hdf_read_vars(XDR *, NC *, int32); HDFLIBAPI intn hdf_read_xdr_cdf(XDR *, NC **); HDFLIBAPI intn hdf_xdr_cdf(XDR *, NC **); HDFLIBAPI intn hdf_vg_clobber(NC *, int); HDFLIBAPI intn hdf_cdf_clobber(NC *); HDFLIBAPI intn hdf_close(NC *); HDFLIBAPI intn hdf_read_sds_dims(NC *); HDFLIBAPI intn hdf_read_sds_cdf(XDR *, NC **); HDFLIBAPI intn SDPfreebuf(void); HDFLIBAPI intn NCgenio(NC *handle, int varid, const long *start, const long *count, const long *stride, const long *imap, void *values); HDFLIBAPI intn NC_var_shape(NC_var *var, NC_array *dims); HDFLIBAPI intn NC_reset_maxopenfiles(intn req_max); HDFLIBAPI intn NC_get_maxopenfiles(void); HDFLIBAPI intn NC_get_systemlimit(void); HDFLIBAPI int NC_get_numopencdfs(void); /* CDF stuff. don't need anymore? -GV */ HDFLIBAPI nc_type cdf_unmap_type(int type); HDFLIBAPI bool_t nssdc_read_cdf(XDR *xdrs, NC **handlep); HDFLIBAPI bool_t nssdc_write_cdf(XDR *xdrs, NC **handlep); HDFLIBAPI bool_t nssdc_xdr_cdf(XDR *xdrs, NC **handlep); HDFLIBAPI intn HDiscdf(const char *filename); HDFLIBAPI intn HDisnetcdf(const char *filename); HDFLIBAPI intn HDisnetcdf64(const char *filename); #ifdef __cplusplus } #endif #endif /* MFH4_LOCAL_NC_H */ hdf4-hdf4.3.1/mfhdf/libsrc/netcdf.h.in000066400000000000000000000353241503061704500174210ustar00rootroot00000000000000/* Generated automatically from netcdf.h.in by configure. */ /* * Copyright 1993, University Corporation for Atmospheric Research * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose without fee is hereby granted, provided * that the above copyright notice appear in all copies, that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of UCAR/Unidata not be used in * advertising or publicity pertaining to distribution of the software * without specific, written prior permission. UCAR makes no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. It is * provided with no support and without obligation on the part of UCAR * Unidata, to assist in its use, correction, modification, or enhancement. * */ #ifndef _NETCDF_ #define _NETCDF_ #include #include "H4api_adpt.h" /* * The definitions ncvoid and MAX_NC_OPEN, may need to be set * properly for your installation. */ /* * Argument type in user functions (deprecated, backward compatibility) */ #ifndef UD_NO_VOID #define ncvoid void #else /* system doesn't have void type */ #define ncvoid char #endif /* * The following macro is provided for backward compatibility only. If you * are a new user of netCDF, then you may safely ignore it. If, however, * you have an existing archive of netCDF files that use default * floating-point fill values, then you should know that the definition of * the default floating-point fill values changed with version 2.3 of the * netCDF package. Prior to this release, the default floating-point fill * values were not very portable: their correct behavior depended not only * upon the particular platform, but also upon the compilation * environment. This led to the definition of new, default floating-point * fill values that are portable across all platforms and compilation * environments. If you wish, however, to obtain the old, non-portable * floating-point fill values, then the following macro should have a true * value PRIOR TO BUILDING THE netCDF LIBRARY. * * Implementation details are contained in the section below on fill values. */ #define NC_OLD_FILLVALUES 0 /* * Fill values * These values are stuffed into newly allocated space as appropriate. * The hope is that one might use these to notice that a particular datum * has not been set. */ #define FILL_BYTE ((char)-127) /* Largest Negative value */ #define FILL_CHAR ((char)0) #define FILL_SHORT ((short)-32767) #define FILL_LONG ((long)-2147483647) #if !NC_OLD_FILLVALUES # define FILL_FLOAT 9.9692099683868690e+36F /* near 15 * 2^119 */ # define FILL_DOUBLE 9.9692099683868690e+36 #else /* NC_OLD_FILLVALUES below */ /* * This section is provided for backward compatibility only. Using * XDR infinities for floating-point fill values has caused more problems * than it has solved. We encourage you to define your own data-specific * fill values rather than use default ones (see `_FillValue' below). * If, however, you *must* use default fill values, then you should use * the above fill values rather than the ones in this section. */ /* * XDR_F_INFINITY is a float value whose EXTERNAL (xdr) * representation is ieee floating infinity. * XDR_D_INFINITY is a double value whose EXTERNAL (xdr) * representation is ieee double floating point infinity. * These are used as default fill values below. * * This section shows three techniques for setting these: * Direct assignment (vax, cray) - works for non IEEE machines * Doesn't work when IEEE machines don't allow * float or double constants whose values are infinity. * Use of a union (preferred portable method) - should work on * any ANSI compiler with IEEE floating point representations, * modulo byte order and sizeof() considerations. * Use of pointer puns - may work with many older compilers * which don't allow initialization of unions. * Often doesn't work with compilers which have strict * alignment rules. */ /* Direct assignment. All cases should be mutually exclusive */ #ifdef notdef /* you might want to try these, on an IEEE machine */ #define XDR_D_INFINITY 1.797693134862315900e+308 #define XDR_F_INFINITY 3.40282357e+38 #endif #ifdef __STDC__ /* Use of a union, assumes IEEE representation and 1 byte unsigned char */ #ifndef XDR_D_INFINITY #define USE_D_UNION union xdr_d_union {unsigned char bb[8]; double dd;} ; extern union xdr_d_union xdr_d_infs ; /* instantiated in array.c */ #define XDR_D_INFINITY (xdr_d_infs.dd) #endif /* !XDR_D_INFINITY */ #ifndef XDR_F_INFINITY #define USE_F_UNION union xdr_f_union {unsigned char bb[4]; float ff;} ; extern union xdr_f_union xdr_f_infs ; /* instantiated in array.c */ #define XDR_F_INFINITY (xdr_f_infs.ff) #endif /* !XDR_F_INFINITY */ #else /* __STDC__ */ /* Use of a pointer pun, assumes IEEE representation, 4 byte long */ #ifndef XDR_D_INFINITY #define USE_D_LONG_PUN extern long xdr_d_infinity[] ; /* instantiated in array.c */ #define XDR_D_INFINITY *(double *)xdr_d_infinity #endif /* !XDR_D_INFINITY */ #ifndef XDR_F_INFINITY #define USE_F_LONG_PUN extern long xdr_f_infinity ; /* instantiated in array.c */ #define XDR_F_INFINITY *((float *)&xdr_f_infinity) #endif /* !XDR_F_INFINITY */ #endif /* __STDC__ */ /* End of INFINITY section */ #define FILL_FLOAT XDR_F_INFINITY /* IEEE Infinity */ #define FILL_DOUBLE XDR_D_INFINITY #endif /* NC_OLD_FILLVALUES above */ /* * masks for the struct NC flags field; passed in as 'mode' arg to * nccreate and ncopen. * */ #define NC_RDWR 1 /* read/write, 0 => readonly */ #define NC_CREAT 2 /* in create phase, cleared by ncendef */ #define NC_EXCL 4 /* on create, don't destroy existing file */ #define NC_INDEF 8 /* in define mode, cleared by ncendef */ #define NC_NSYNC 0x10 /* synchronise numrecs on change */ #define NC_HSYNC 0x20 /* synchronise whole header on change */ #define NC_NDIRTY 0x40 /* numrecs has changed */ #define NC_HDIRTY 0x80 /* header info has changed */ #define NC_NOFILL 0x100 /* Don't fill vars on endef and increase of record */ #define NC_LINK 0x8000 /* isa link */ #define NC_FILL 0 /* argument to ncsetfill to clear NC_NOFILL */ /* * 'mode' arguments for nccreate and ncopen */ #define NC_NOWRITE 0 #define NC_WRITE NC_RDWR #define NC_CLOBBER (NC_INDEF | NC_CREAT | NC_RDWR) #define NC_NOCLOBBER (NC_INDEF | NC_EXCL | NC_CREAT | NC_RDWR) /* * 'size' argument to ncdimdef for an unlimited dimension */ #define NC_UNLIMITED 0L /* * attribute id to put/get a global attribute */ #define NC_GLOBAL -1 #ifndef HDF /* * This can be as large as the maximum number of stdio streams * you can have open on your system. */ #define MAX_NC_OPEN 32 /* * These maximums are enforced by the interface, to facilitate writing * applications and utilities. However, nothing is statically allocated to * these sizes internally. */ #define MAX_NC_DIMS 5000 /* max dimensions per file */ #define MAX_NC_ATTRS 3000 /* max global or per variable attributes */ #define MAX_NC_VARS 5000 /* max variables per file */ #define MAX_NC_NAME 256 /* max length of a name */ #define MAX_VAR_DIMS 32 /* max per variable dimensions */ /* * Added feature. * If you wish a variable to use a different value than the above * defaults, create an attribute with the same type as the variable * and the following reserved name. The value you give the attribute * will be used as the fill value for that variable. */ #define _FillValue "_FillValue" #else /* HDF */ #include "hlimits.h" /* Hard coded constants for HDF library */ #endif /* HDF */ /* This type used to be defined as an enum, but the C standard is a bit * vague as to which integer type you actually get to represent your enum * and passing that through a pointer caused failures on MacOS. */ typedef int nc_type ; #define NC_UNSPECIFIED 0 /* private */ #define NC_BYTE 1 #define NC_CHAR 2 #define NC_SHORT 3 #define NC_LONG 4 #define NC_FLOAT 5 #define NC_DOUBLE 6 /* private */ #define NC_BITFIELD 7 #define NC_STRING 8 #define NC_IARRAY 9 #define NC_DIMENSION 10 #define NC_VARIABLE 11 #define NC_ATTRIBUTE 12 /* * C data types corresponding to netCDF data types: */ /* Don't use these or the C++ interface gets confused typedef char ncchar; typedef char ncbyte; typedef short ncshort; typedef float ncfloat; typedef double ncdouble; */ /* * Variables/attributes of type NC_LONG should use the C type 'nclong', * which should map to a 32-bit integer. */ typedef int32_t nclong; /* * Global netcdf error status variable * Initialized in error.c */ #define NC_NOERR 0 /* No Error */ #define NC_EBADID 1 /* Not a netcdf id */ #define NC_ENFILE 2 /* Too many netcdfs open */ #define NC_EEXIST 3 /* netcdf file exists && NC_NOCLOBBER */ #define NC_EINVAL 4 /* Invalid Argument */ #define NC_EPERM 5 /* Write to read only */ #define NC_ENOTINDEFINE 6 /* Operation not allowed in data mode */ #define NC_EINDEFINE 7 /* Operation not allowed in define mode */ #define NC_EINVALCOORDS 8 /* Coordinates out of Domain */ #define NC_EMAXDIMS 9 /* MAX_NC_DIMS exceeded */ #define NC_ENAMEINUSE 10 /* String match to name in use */ #define NC_ENOTATT 11 /* Attribute not found */ #define NC_EMAXATTS 12 /* MAX_NC_ATTRS exceeded */ #define NC_EBADTYPE 13 /* Not a netcdf data type */ #define NC_EBADDIM 14 /* Invalid dimension id */ #define NC_EUNLIMPOS 15 /* NC_UNLIMITED in the wrong index */ #define NC_EMAXVARS 16 /* MAX_NC_VARS exceeded */ #define NC_ENOTVAR 17 /* Variable not found */ #define NC_EGLOBAL 18 /* Action prohibited on NC_GLOBAL varid */ #define NC_ENOTNC 19 /* Not a netcdf file */ #define NC_ESTS 20 /* In Fortran, string too short */ #define NC_EMAXNAME 21 /* MAX_NC_NAME exceeded */ #define NC_ENTOOL NC_EMAXNAME /* Backward compatibility */ #define NC_EUNLIMIT 22 /* NC_UNLIMITED size already in use */ #define NC_EXDR 32 /* */ #define NC_SYSERR -1 #include "hdf2netcdf.h" HDFLIBAPI int ncerr ; /* * Global options variable. Used to determine behavior of error handler. * Initialized in lerror.c */ #define NC_FATAL 1 #define NC_VERBOSE 2 HDFLIBAPI int ncopts ; /* default is (NC_FATAL | NC_VERBOSE) */ #ifdef __cplusplus extern "C" { #endif HDFLIBAPI int nccreate ( const char* path, int cmode ); HDFLIBAPI int ncopen ( const char* path, int mode ); HDFLIBAPI int ncredef ( int cdfid ); HDFLIBAPI int ncendef ( int cdfid ); HDFLIBAPI int ncclose ( int cdfid ); HDFLIBAPI int ncinquire ( int cdfid, int* ndims, int* nvars, int* natts, int* recdim ); HDFLIBAPI int ncsync ( int cdfid ); HDFLIBAPI int ncabort ( int cdfid ); HDFLIBAPI int ncnobuf ( int cdfid ); HDFLIBAPI int ncdimdef ( int cdfid, const char* name, long length ); HDFLIBAPI int ncdimid ( int cdfid, const char* name ); HDFLIBAPI int ncdiminq ( int cdfid, int dimid, char* name, long* length ); HDFLIBAPI int ncdimrename ( int cdfid, int dimid, const char* name ); HDFLIBAPI int ncvardef ( int cdfid, const char* name, nc_type datatype, int ndims, const int* dim ); HDFLIBAPI int ncvarid ( int cdfid, const char* name ); HDFLIBAPI int ncvarinq ( int cdfid, int varid, char* name, nc_type* datatype, int* ndims, int* dim, int* natts ); HDFLIBAPI int ncvarput1 ( int cdfid, int varid, const long* coords, const void* value ); HDFLIBAPI int ncvarget1 ( int cdfid, int varid, const long* coords, void* value ); HDFLIBAPI int ncvarput ( int cdfid, int varid, const long* start, const long* count, void* value ); HDFLIBAPI int ncvarget ( int cdfid, int varid, const long* start, const long* count, void* value ); HDFLIBAPI int ncvarputs ( int cdfid, int varid, const long* start, const long* count, const long* stride, void* values ); HDFLIBAPI int ncvargets ( int cdfid, int varid, const long* start, const long* count, const long* stride, void* values ); HDFLIBAPI int ncvarputg ( int cdfid, int varid, const long* start, const long* count, const long* stride, const long* imap, void* values ); HDFLIBAPI int ncvargetg ( int cdfid, int varid, const long* start, const long* count, const long* stride, const long* imap, void* values ); HDFLIBAPI int ncvarrename ( int cdfid, int varid, const char* name ); HDFLIBAPI int ncattput ( int cdfid, int varid, const char* name, nc_type datatype, int len, const void* value ); HDFLIBAPI int ncattinq ( int cdfid, int varid, const char* name, nc_type* datatype, int* len ); HDFLIBAPI int ncattget ( int cdfid, int varid, const char* name, void* value ); HDFLIBAPI int ncattcopy ( int incdf, int invar, const char* name, int outcdf, int outvar ); HDFLIBAPI int ncattname ( int cdfid, int varid, int attnum, char* name ); HDFLIBAPI int ncattrename ( int cdfid, int varid, const char* name, const char* newname ); HDFLIBAPI int ncattdel ( int cdfid, int varid, const char* name ); HDFLIBAPI int nctypelen ( nc_type datatype ); HDFLIBAPI int ncsetfill ( int cdfid, int fillmode ); HDFLIBAPI int ncrecinq ( int cdfid, int* nrecvars, int* recvarids, long* recsizes ); HDFLIBAPI int ncrecget ( int cdfid, long recnum, void** datap ); HDFLIBAPI int ncrecput ( int cdfid, long recnum, void* * datap ); #ifdef __cplusplus } #endif #endif /* _NETCDF_ */ hdf4-hdf4.3.1/mfhdf/libsrc/nssdc.c000066400000000000000000000650151503061704500166560ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" #include "hfile_priv.h" /* constants/macros pulled out of the CDF library source */ #define V2_CDR_OFFSET 8 #define VDRzVDR_RFUe_LEN 128 #define CDF_VAR_NAME_LEN 64 #define CDF_ATTR_NAME_LEN 64 #define CDF_FORMAT_BIT \ 1 /* format: set = single file, \ clear = multi file */ #define rVAR_RECVARY_BIT \ 0 /* record variance: \ set = VARY, \ clear = NOVARY */ #define rVAR_PADVALUE_BIT \ 1 /* pad value: \ set = specified, \ clear = not specified (use \ default) */ #define zVAR_RECVARY_BIT \ 0 /* record variance: \ set = VARY, \ clear = NOVARY */ #define zVAR_PADVALUE_BIT \ 1 /* pad value: \ set = specified, \ clear = not specified (use \ default) */ #define bitset(a, bit) (a & (1 << bit)) #define CDF_INT1 (long)1 #define CDF_INT2 (long)2 #define CDF_INT4 (long)4 #define CDF_UINT1 (long)11 #define CDF_UINT2 (long)12 #define CDF_UINT4 (long)14 #define CDF_REAL4 (long)21 #define CDF_REAL8 (long)22 #define CDF_EPOCH (long)31 /* NSSDC standard */ #define CDF_BYTE (long)41 /* same as CDF_INT1 (signed) */ #define CDF_FLOAT (long)44 /* same as CDF_REAL4 */ #define CDF_DOUBLE (long)45 /* same as CDF_REAL8 */ #define CDF_CHAR (long)51 /* a "string" data type */ #define CDF_UCHAR (long)52 /* a "string" data type */ #define NETWORK_ENCODING 1L #define SUN_ENCODING 2L #define VAX_ENCODING 3L #define DECSTATION_ENCODING 4L #define SGi_ENCODING 5L #define IBMPC_ENCODING 6L #define IBMRS_ENCODING 7L #define HOST_ENCODING 8L #define HP_ENCODING 11L #define NeXT_ENCODING 12L #define ALPHAOSF1_ENCODING 13L #define ALPHAVMSd_ENCODING 14L #define ALPHAVMSg_ENCODING 15L /* ---------------------------- cdf_unmap_type ---------------------------- */ /* UnMap a data type. I.e. go from a CDF type to an NC_ */ nc_type cdf_unmap_type(int type) { switch (type & 0xff) { case CDF_CHAR: case CDF_UCHAR: return NC_CHAR; case CDF_BYTE: case CDF_INT1: case CDF_UINT1: return NC_BYTE; case CDF_INT2: case CDF_UINT2: return NC_SHORT; case CDF_INT4: case CDF_UINT4: return NC_LONG; case CDF_REAL4: case CDF_FLOAT: return NC_FLOAT; case CDF_REAL8: case CDF_DOUBLE: case CDF_EPOCH: return NC_DOUBLE; default: return (nc_type)FAIL; /* need to return a better (legal) value */ } } /* cdf_unmap_type */ /* ---------------------------- nssdc_read_cdf ---------------------------- */ /* Read a NC structure out of a CDF file */ bool_t nssdc_read_cdf(XDR *xdrs, NC **handlep) { NC *handle; uint8 buffer[1000]; uint8 *b; int32 dummy; hdf_file_t fp; intn i, j; int32 rank, current_var, current_dim, hdftype; nc_type nctype; intn dims[H4_MAX_VAR_DIMS]; int32 dim_sz[H4_MAX_VAR_DIMS]; NC_dim *dim_rec[H4_MAX_VAR_DIMS]; NC_var *vars[H4_MAX_NC_VARS]; NC_var *var = NULL; /* shorthand for vars[current_var] */ vix_t *end; (void)xdrs; /* interesting stuff in CDR record */ int32 gdrOffset, vers, release, encoding, flags, inc; /* interesting stuff in GDR record */ int32 varNext, zVarNext, adrNext, numRVars, numAttrs, maxRec; int32 numDims, numZVars; /* interesting stuff in VDR record */ int32 nt, vMaxRec, vxrNext, VXRtail, vFlags, numElem, num; char name[CDF_VAR_NAME_LEN + 1]; /* interesting stuff in ADR record */ int32 scope, aedrNext, aedzNext; /* interesting stuff in AEDR record */ int32 count; handle = (*handlep); fp = handle->cdf_fp; current_var = 0; /* * pull in the CDR and see what we want out of it */ if (HI_SEEK(fp, V2_CDR_OFFSET) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 12 * sizeof(int32)) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, gdrOffset); /* offset of GDR record */ INT32DECODE(b, vers); /* version number */ INT32DECODE(b, release); /* release number */ INT32DECODE(b, encoding); /* type of encoding */ INT32DECODE(b, flags); /* special flags (uint32????) */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, inc); /* increment - do we care?? */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* rfuE */ /* * Only handle single file implementations for now */ if (!bitset(flags, CDF_FORMAT_BIT)) { return (FALSE); } /* Check the encoding */ if ((encoding != NETWORK_ENCODING) && (encoding != SUN_ENCODING) && (encoding != SGi_ENCODING) && (encoding != IBMRS_ENCODING) && (encoding != HP_ENCODING)) { return (FALSE); } /* * pull in the GDR and see what we want out of it */ if (HI_SEEK(fp, gdrOffset) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 15 * sizeof(int32)) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, varNext); /* start of next R variable */ INT32DECODE(b, zVarNext); /* start of Zvariables */ INT32DECODE(b, adrNext); /* start of attributes */ INT32DECODE(b, dummy); /* eof */ INT32DECODE(b, numRVars); /* number of R variables */ INT32DECODE(b, numAttrs); /* number of attributes */ INT32DECODE(b, maxRec); /* dunno */ INT32DECODE(b, numDims); /* number of dimensions */ INT32DECODE(b, numZVars); /* number of Z variables */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, dummy); /* rfuC */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* rfuE */ /* * dimension sizes are here */ if (numDims > H4_MAX_VAR_DIMS) return FALSE; if (HI_READ(fp, buffer, numDims * sizeof(int32)) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); /* * For each rVariable dimension size create a new dimension object */ b = buffer; current_dim = 0; for (i = 0; i < numDims; i++) { char tmpname[80]; INT32DECODE(b, dim_sz[i]); sprintf(tmpname, "CDFdim%d_%d", i, (int)dim_sz[i]); dim_rec[current_dim++] = NC_new_dim(tmpname, dim_sz[i]); } /* * Loop over Rvariables and read them in */ while (varNext != 0) { if (HI_SEEK(fp, varNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, varNext); /* start of next R variable */ INT32DECODE(b, nt); /* number type */ INT32DECODE(b, vMaxRec); /* number of records for this variable */ INT32DECODE(b, vxrNext); /* start of VXR records */ INT32DECODE(b, VXRtail); /* ??? */ INT32DECODE(b, vFlags); /* variable flags <---- record variance in here */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, dummy); /* rfuC */ INT32DECODE(b, dummy); /* rfuF */ b += VDRzVDR_RFUe_LEN; /* reserved field */ INT32DECODE(b, numElem); /* == 1 unless string variable */ INT32DECODE(b, num); /* */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* nextEndRecs */ memcpy(name, b, CDF_VAR_NAME_LEN); name[CDF_VAR_NAME_LEN] = '\0'; b += CDF_VAR_NAME_LEN; j = 0; while ((name[j] != ' ') && (name[j] != '\0')) j++; name[j] = '\0'; /* * Figure out which dimensions are meaningful * If we vary in the record dimension it is reflected in the variable's * flags * Variance in the other dimensions is specified singly as int32 * quantities in the file * Only define the variable in terms of dimensions in which it varies */ rank = 0; if (bitset(vFlags, rVAR_RECVARY_BIT)) { char dimname[1000]; sprintf(dimname, "%s_REC", name); if (numElem > 1) dim_rec[current_dim] = NC_new_dim(dimname, numElem); else if (maxRec > 0) dim_rec[current_dim] = NC_new_dim(dimname, maxRec); else dim_rec[current_dim] = NC_new_dim(dimname, NC_UNLIMITED); dims[rank++] = current_dim++; } for (j = 0; j < numDims; j++) { INT32DECODE(b, dummy); if (dummy) dims[rank++] = j; } /* map the CDF type into a netCDF type */ nctype = cdf_unmap_type(nt); /* define the variable */ var = vars[current_var] = NC_new_var((char *)name, nctype, (int)rank, dims); if (var == NULL) HRETURN_ERROR(DFE_NOSPACE, FALSE); /* if it is unsigned at least set the HDFtype to reflect it */ switch (nt) { case CDF_UINT1: var->HDFtype = DFNT_UINT8; break; case CDF_UINT2: var->HDFtype = DFNT_UINT16; break; case CDF_UINT4: var->HDFtype = DFNT_UINT32; break; default: break; } /* * Read the pad value if applicable */ if (bitset(vFlags, rVAR_PADVALUE_BIT)) { /* need to pull the pad value out of the file at current location */ /* make into _Fillvalue attribute */ } /* * Mess with setting up VXR records */ var->vixHead = end = NULL; while (vxrNext != 0) { vix_t *vix; vix = malloc(sizeof(vix_t)); if (vix == NULL) HRETURN_ERROR(DFE_NOSPACE, FALSE); /* stick vix at the end of our list and update end pointer */ if (end == NULL) var->vixHead = end = vix; else end = end->next = vix; vix->next = NULL; /* * Read the next record out of the file */ if (HI_SEEK(fp, vxrNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, vxrNext); /* next VXR record */ INT32DECODE(b, vix->nEntries); /* number of entries */ INT32DECODE(b, vix->nUsed); /* number of used entries */ for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->firstRec[i]); for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->lastRec[i]); for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->offset[i]); } current_var++; } /* * Loop over Zvariables and read them in */ while (zVarNext != 0) { if (HI_SEEK(fp, zVarNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, zVarNext); /* start of next R variable */ INT32DECODE(b, nt); /* number type */ INT32DECODE(b, vMaxRec); /* dunno */ INT32DECODE(b, vxrNext); /* start of VXR records */ INT32DECODE(b, VXRtail); /* ??? */ INT32DECODE(b, vFlags); /* variable flags <---- record variance in here */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, dummy); /* rfuC */ INT32DECODE(b, dummy); /* rfuF */ b += VDRzVDR_RFUe_LEN; /* reserved field */ INT32DECODE(b, numElem); /* */ INT32DECODE(b, num); /* */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* nextEndRecs */ memcpy(name, b, CDF_VAR_NAME_LEN); name[CDF_VAR_NAME_LEN] = '\0'; b += CDF_VAR_NAME_LEN; j = 0; while ((name[j] != ' ') && (name[j] != '\0')) j++; name[j] = '\0'; /* MORE STUFF */ /* * Get the number of dimensions defined with this dataset * This is not necessarily the rank since we may not vary in * some of them. In that case, do not create dimension * objects for them. */ INT32DECODE(b, numDims); /* number of dimensions */ /* * read dimension sizes * figure out which ones are actually used * create dimension objects for the dimensions that are used */ for (j = 0; j < numDims; j++) INT32DECODE(b, dim_sz[j]); rank = 0; for (j = 0; j < numDims; j++) { INT32DECODE(b, dummy); if (dummy) { char dimname[1000]; sprintf(dimname, "%s%d_%d", name, (int)rank, (int)dim_sz[j]); dim_rec[current_dim] = NC_new_dim(dimname, dim_sz[j]); dims[rank++] = current_dim++; } } /* map the CDF type into a netCDF type */ nctype = cdf_unmap_type(nt); /* define the variable */ var = vars[current_var] = NC_new_var((char *)name, nctype, (int)rank, dims); if (var == NULL) return (FALSE); /* if it is unsigned at least set the HDFtype to reflect it */ switch (nt) { case CDF_UINT1: var->HDFtype = DFNT_UINT8; break; case CDF_UINT2: var->HDFtype = DFNT_UINT16; break; case CDF_UINT4: var->HDFtype = DFNT_UINT32; break; default: break; } /* what's up with PadValues ??? */ /* * Mess with setting up VXR records */ var->vixHead = end = NULL; while (vxrNext != 0) { vix_t *vix; vix = malloc(sizeof(vix_t)); if (vix == NULL) HRETURN_ERROR(DFE_NOSPACE, FALSE); /* stick vix at the end of our list and update end pointer */ if (end == NULL) var->vixHead = end = vix; else end = end->next = vix; vix->next = NULL; /* * Read the next record out of the file */ if (HI_SEEK(fp, vxrNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, vxrNext); /* next VXR record */ INT32DECODE(b, vix->nEntries); /* number of entries */ INT32DECODE(b, vix->nUsed); /* number of used entries */ for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->firstRec[i]); for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->lastRec[i]); for (i = 0; i < vix->nEntries; i++) INT32DECODE(b, vix->offset[i]); } current_var++; } /* loop over zVariabes */ /* * Loop over Attributes and read them in */ for (i = 0; i < numAttrs; i++) { if (HI_SEEK(fp, adrNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, adrNext); /* start of next ADR record */ INT32DECODE(b, aedrNext); /* start of next AEDR object */ INT32DECODE(b, scope); /* scope 1==global 2==local */ INT32DECODE(b, dummy); /* num */ INT32DECODE(b, dummy); /* numR */ INT32DECODE(b, dummy); /* maxR */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, aedzNext); /* AzEDRhread */ INT32DECODE(b, dummy); /* NumZ */ INT32DECODE(b, dummy); /* MaxZ */ INT32DECODE(b, dummy); /* rfuE */ memcpy(name, b, CDF_ATTR_NAME_LEN); name[CDF_ATTR_NAME_LEN] = '\0'; /* * Read in the AEDR records now and add them to the appropriate object */ while (aedrNext != 0) { NC_array **ap; NC_attr *attr[1]; char *tBuf; int32 bsize; if (HI_SEEK(fp, aedrNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, aedrNext); /* start of next AEDR record */ INT32DECODE(b, num); /* attr (?) number */ INT32DECODE(b, nt); /* number type */ INT32DECODE(b, num); /* var (?) number */ INT32DECODE(b, count); /* number of elements */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, dummy); /* rfuC */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* rfuE */ /* map the CDF type into a netCDF type */ nctype = cdf_unmap_type(nt); hdftype = hdf_map_type(nctype); bsize = nctypelen(nctype) * count; tBuf = malloc((uint32)bsize); /* convert attribute values and create attr object */ DFKconvert((void *)b, (void *)tBuf, hdftype, count, DFACC_READ, 0, 0); attr[0] = NC_new_attr(name, nctype, count, tBuf); free(tBuf); /* make sure we got a valid attribute */ if (attr[0] == NULL) return (FALSE); /* find the appropriate attribute list */ if (scope == 1) { /* global attribute */ ap = &(handle->attrs); } else { /* local --- find the appropriate variable */ ap = &(vars[num]->attrs); } /* add the attribute to the list */ if (*ap == NULL) { /* first time */ (*ap) = NC_new_array(NC_ATTRIBUTE, (unsigned)1, (Void *)attr); if ((*ap) == NULL) return (FALSE); } else { if (NC_incr_array((*ap), (Void *)attr) == NULL) return (FALSE); } } /* AEDR loop */ /* * Read in the AEDZ records now and add them to the appropriate object * It is not clear to me how these are different from aedr records * except for that they are for Zvariables rather than Rvariables. * Any other reasons????? */ while (aedzNext != 0) { NC_array **ap; NC_attr *attr[1]; char *tBuf; int32 bsize; if (HI_SEEK(fp, aedzNext) == FAIL) HRETURN_ERROR(DFE_SEEKERROR, FALSE); if (HI_READ(fp, buffer, 4) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record size */ dummy -= 4; if (HI_READ(fp, buffer, dummy) == FAIL) HRETURN_ERROR(DFE_READERROR, FALSE); b = buffer; INT32DECODE(b, dummy); /* record type */ INT32DECODE(b, aedzNext); /* start of next AEDR record */ INT32DECODE(b, num); /* attr (?) number */ INT32DECODE(b, nt); /* number type */ INT32DECODE(b, num); /* var (?) number */ INT32DECODE(b, count); /* number of elements */ INT32DECODE(b, dummy); /* rfuA */ INT32DECODE(b, dummy); /* rfuB */ INT32DECODE(b, dummy); /* rfuC */ INT32DECODE(b, dummy); /* rfuD */ INT32DECODE(b, dummy); /* rfuE */ /* map the CDF type into a netCDF type */ nctype = cdf_unmap_type(nt); hdftype = hdf_map_type(nctype); bsize = nctypelen(nctype) * count; tBuf = malloc((uint32)bsize); /* convert attribute values and create attr object */ DFKconvert((void *)b, (void *)tBuf, hdftype, count, DFACC_READ, 0, 0); attr[0] = NC_new_attr(name, nctype, count, tBuf); free(tBuf); /* make sure we got a valid attribute */ if (attr[0] == NULL) return (FALSE); /* find the appropriate attribute list */ if (scope == 1) { /* global attribute */ ap = &(handle->attrs); } else { /* local --- find the appropriate variable */ ap = &(vars[num]->attrs); } /* add the attribute to the list */ if (*ap == NULL) { /* first time */ (*ap) = NC_new_array(NC_ATTRIBUTE, (unsigned)1, (Void *)attr); if ((*ap) == NULL) return (FALSE); } else { if (NC_incr_array((*ap), (Void *)attr) == NULL) return (FALSE); } } /* AEDZ loop */ } /* ADR loop */ /* * Set up the dimension list */ if (current_dim) handle->dims = NC_new_array(NC_DIMENSION, current_dim, (Void *)dim_rec); else handle->dims = NULL; /* * Set up the variable list define the variables */ if (current_var) handle->vars = NC_new_array(NC_VARIABLE, current_var, (Void *)vars); else handle->vars = NULL; return (TRUE); } /* nssdc_read_cdf */ /* ---------------------------- nssdc_write_cdf ---------------------------- */ /* Write a NC structure out to a CDF file */ bool_t nssdc_write_cdf(XDR *xdrs, NC **handlep) { (void)xdrs; (void)handlep; return (FALSE); } /* nssdc_write_cdf */ /* ---------------------------- nssdc_xdr_cdf ----------------------------- */ /* Handle basic I/O of the NC structure. CDF analogue of hdf_xdr_cdf and NC_xdr_cdf */ bool_t nssdc_xdr_cdf(XDR *xdrs, NC **handlep) { int status; switch (xdrs->x_op) { case XDR_ENCODE: status = nssdc_write_cdf(xdrs, handlep); break; case XDR_DECODE: status = nssdc_read_cdf(xdrs, handlep); break; case XDR_FREE: NC_free_cdf((*handlep)); status = TRUE; break; default: status = TRUE; } return (status); } /* nssdc_xdr_cdf */ hdf4-hdf4.3.1/mfhdf/libsrc/putget.c000066400000000000000000002123121503061704500170460ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" #include "hfile_priv.h" /* Local function prototypes */ static bool_t nssdc_xdr_NCvdata(NC *handle, NC_var *vp, unsigned long where, nc_type type, uint32 count, void *values); static intn hdf_xdr_NCvdata(NC *handle, NC_var *vp, unsigned long where, nc_type type, uint32 count, void *values); static intn hdf_xdr_NCv1data(NC *handle, NC_var *vp, unsigned long where, nc_type type, void *values); static intn SDIresizebuf(void **buf, int32 *buf_size, int32 size_wanted); static const long *NCvcmaxcontig(NC *, NC_var *, const long *, const long *); int NC_fill_buffer(NC *handle, int varid, const long *edges, void *values); #define xdr_NCsetpos(xdrs, pos) h4_xdr_setpos((xdrs), (pos)) /* * Check if an ncxxx function has called the current function */ static bool_t nc_API(const char *caller) { char *nc_api = NULL; nc_api = strstr(caller, "nc"); if (nc_api == caller) return TRUE; return FALSE; } /* * At the current position, add a record containing the fill values. */ static bool_t NCfillrecord(XDR *xdrs, NC_var **vpp, unsigned numvars) { unsigned ii; for (ii = 0; ii < numvars; ii++, vpp++) { if (!IS_RECVAR(*vpp)) { continue; /* skip non-record variables */ } /* compute sub size */ if (!xdr_NC_fill(xdrs, *vpp)) return (FALSE); } return (TRUE); } /* * Check whether coords are valid for the variable. * For 'record' variables: * + if the accessing is writing, add and fill records out with * user-provided fill values or predefined fill values to the * requested recno == coords[0], as a side effect. * + if the accessing is reading, fill records with fill values up * to the requested recno when an nc API (ie. ncvarget) leads to * this, and flag as an error when an SD API (ie. SDreaddata) does. * + update NC_var.numrecs to reflect the filled records * + update NC.numrecs to NC_var.numrecs if NC_var.numrecs is larger * -BMR, 12/09/2008 */ bool_t NCcoordck(NC *handle, NC_var *vp, const long *coords) { const long *ip; unsigned long *up; const long *boundary; long unfilled; /* number of records that need to be filled */ boundary = NULL; /* assuming no boundary check is needed */ if (IS_RECVAR(vp)) { /* For the variable with unlimited dimension we need to check that the size of the first dimension is non-negative, there is no upper bound for it; the sizes of the rest of the dimensions are checked as for the regular fixed size variable (see the "for" loop further down) EIP 01/13/09 */ /* Check that first dimension is non-negative */ if (*coords < 0) goto bad; /* Set up boundary to check the rest of the dims if there are more than one dim */ if (vp->assoc->count > 1) boundary = coords + 1; } else boundary = coords; /* no unlimited, boundary starts at first dim */ if (boundary != NULL) /* no unlimited dim or unlimited dim and more than one dim */ { up = vp->shape + vp->assoc->count - 1; /* pointer for dimension sizes */ ip = coords + vp->assoc->count - 1; /* pointer for start coords */ /* for each dimension, check if starting coord is within dim size */ for (; ip >= boundary; ip--, up--) { if (*ip < 0 || *ip >= (long)*up) goto bad; } } /* more than one dim */ /* Reset ip to coords for subsequent use */ ip = coords; /*******************************************************/ /* The following block is for hdf4 API and hdf4/nc API */ /*******************************************************/ /* If file is an HDF file (ie., not netCDF, created with HDF API or HDF/nc API) and the variable has unlimited dimension */ if (handle->file_type == HDF_FILE && IS_RECVAR(vp)) { void *strg = NULL; void *strg1 = NULL; NC_attr **attr = NULL; int count, byte_count; int len; /* Determine if fill values need to be written. For example, if vp's numrecs is 5, and the accessed index is 8 (*ip), then recs #5,6,7 will be filled with fill value. Note: maybe '<' should be "<=", but adding it alone caused ill-effects so a through study is needed, plus '<' doesn't really cause problem, it just meant when unfilled = 0, we'll fill 0 record below. -BMR, 12/8/2008*/ if ((unfilled = *ip - vp->numrecs) < 0) return TRUE; /* If we get here from an nc API, then reading beyond the end of the current variable will write fill values to the gap between the end of this variable and the max numrecs in the file. It will only fail for reading beyond the end if the calling function is from the SD API. */ /* check to see if we are trying to read beyond the end */ if (handle->xdrs->x_op != XDR_ENCODE) { if (!nc_API(cdf_routine_name)) /* from an SD API call */ goto bad; /* cannot read beyond the end of var */ else /* from an nc API call */ if (*ip >= handle->numrecs) goto bad; /* only fail if reading pass max numrecs in file */ } /* If NOFILL is not requested, proceed to write fill values */ if ((handle->flags & NC_NOFILL) == 0) { /* make sure we can write to this variable */ if (vp->aid == FAIL && hdf_get_vp_aid(handle, vp) == FAIL) return (FALSE); /* strg and strg1 are to hold fill value and its conversion */ len = (vp->len / vp->HDFsize) * vp->szof; strg = malloc(len); strg1 = malloc(len); if (NULL == strg || NULL == strg1) return FALSE; /* Find the attribute _FillValue to get the user's fill value */ attr = NC_findattr(&vp->attrs, _FillValue); /* If the attribute is found, fill strg with the fill value */ if (attr != NULL) HDmemfill(strg, (*attr)->data->values, vp->szof, (vp->len / vp->HDFsize)); /* otherwise, fill strg with predefined fill values such as FILL_SHORT, FILL_BYTE,... */ else NC_arrayfill(strg, len, vp->type); /* * Seek to correct location */ byte_count = vp->len; count = byte_count / vp->HDFsize; if (FAIL == Hseek(vp->aid, (vp->numrecs) * byte_count, DF_START)) return FALSE; /* * Write out the values */ if (FAIL == DFKconvert(strg, strg1, vp->HDFtype, count, DFACC_WRITE, 0, 0)) return FALSE; /* Write fill value to each record for all "unfilled" records */ for (; unfilled >= 0; unfilled--, vp->numrecs++) { if (FAIL == Hwrite(vp->aid, byte_count, (uint8 *)strg1)) return FALSE; } free(strg); free(strg1); strg = strg1 = NULL; } /* !SD_NOFILL */ vp->numrecs = MAX(vp->numrecs, (*ip + 1)); /* if NOFILL */ if ((*ip + 1) > (long)(handle->numrecs)) { handle->numrecs = *ip + 1; handle->flags |= NC_NDIRTY; } return (TRUE); } /**********************************************/ /* The following block is for netCDF API file */ /**********************************************/ if (IS_RECVAR(vp) && (unfilled = *ip - handle->numrecs) >= 0) { /* check to see if we are trying to read beyond the end */ if (handle->xdrs->x_op != XDR_ENCODE) goto bad; /* else */ handle->flags |= NC_NDIRTY; if (handle->flags & NC_NOFILL) { /* Go directly to jail, do not pass go */ handle->numrecs = *ip + 1; } else { /* fill out new records */ if (!xdr_NCsetpos(handle->xdrs, handle->begin_rec + handle->recsize * handle->numrecs)) { nc_serror("NCcoordck seek, var %s", vp->name->values); return (FALSE); } for (; unfilled >= 0; unfilled--, handle->numrecs++) { if (!NCfillrecord(handle->xdrs, (NC_var **)handle->vars->values, handle->vars->count)) { nc_serror("NCcoordck fill, var %s, rec %ld", vp->name->values, handle->numrecs); return (FALSE); } } } if (handle->flags & NC_NSYNC) /* write out header->numrecs NOW */ { if (!xdr_numrecs(handle->xdrs, handle)) return (FALSE); handle->flags &= ~NC_NDIRTY; } } return (TRUE); bad: NCadvise(NC_EINVALCOORDS, "%s: Invalid Coordinates", vp->name->values); return (FALSE); } /* * Translate the (variable, coords) pair into a seek index */ static unsigned long NC_varoffset(NC *handle, NC_var *vp, const long *coords) { unsigned long offset; const long *ip; unsigned long *up; const long *boundary; vix_t *vix; intn i; if (vp->assoc->count == 0) /* 'scaler' variable */ return (vp->begin); if (IS_RECVAR(vp)) boundary = coords + 1; else boundary = coords; up = vp->dsizes + vp->assoc->count - 1; ip = coords + vp->assoc->count - 1; for (offset = 0; ip >= boundary; ip--, up--) offset += *up * *ip; if (IS_RECVAR(vp)) { switch (handle->file_type) { case HDF_FILE: return (vp->dsizes[0] * *coords + offset); case netCDF_FILE: return (vp->begin + handle->recsize * *coords + offset); case CDF_FILE: return (0); } } else { switch (handle->file_type) { case HDF_FILE: return (offset); case netCDF_FILE: return (vp->begin + offset); case CDF_FILE: if ((vix = vp->vixHead) == NULL) return (-1); /* * Record data is stored in chunks. the firstRec and lastRec * fields give the indices of the first and last records * stored in a given chunk and the offset gives the offset in * the file of where that chunk starts. The local variable * 'offset' gives the offset into the entire variable space * where we want to read. To map find the correct location * we need to find the correct chunk and then get our offset * within that chunk */ while (vix) { for (i = 0; i < vix->nUsed; i++) { if ((vix->firstRec[i] <= *coords) && (vix->lastRec[i] >= *coords)) { /* found the record we want */ return (offset + vix->offset[i] - vix->firstRec[i] * vp->dsizes[0] + 8); } } /* loop over user entries in current vix record */ vix = vix->next; } /* loop over all vix records */ break; } } /* should never get to here */ return (0); } /* NC_varoffset */ /* * xdr 1 - 3 bytes, leaving adjoining bytes within the word ok. * (minimum unit of io is 4 bytes) */ static bool_t xdr_NCvbyte(XDR *xdrs, unsigned rem, unsigned count, char *values) { char buf[4]; unsigned long origin = 0; enum xdr_op x_op = xdrs->x_op; /* save state */ if (x_op == XDR_ENCODE) { /* * Since we only read/write multiples of four bytes, * We will read in the word to change one byte in it. */ origin = h4_xdr_getpos(xdrs); /* Next op is a get */ xdrs->x_op = XDR_DECODE; } if (!h4_xdr_opaque(xdrs, buf, 4)) { /* Get failed, assume we are trying to read off the end */ memset(buf, 0, sizeof(buf)); } if (x_op == XDR_ENCODE) /* back to encode */ xdrs->x_op = x_op; while (count-- != 0) { if (x_op == XDR_ENCODE) buf[rem] = *values; else *values = buf[rem]; rem++; values++; } if (x_op == XDR_ENCODE) { if (!h4_xdr_setpos(xdrs, origin)) return (FALSE); if (!h4_xdr_opaque(xdrs, buf, 4)) return (FALSE); } return (TRUE); } /* * xdr a short leaving adjoining short within the word ok. * (minimum unit of io is 4 bytes) */ bool_t xdr_NCvshort(XDR *xdrs, unsigned which, short *values) { unsigned char buf[4]; /* unsigned is important here */ unsigned long origin = 0; enum xdr_op x_op = xdrs->x_op; /* save state */ if (x_op == XDR_ENCODE) { origin = h4_xdr_getpos(xdrs); /* Next op is a get */ xdrs->x_op = XDR_DECODE; } if (!h4_xdr_opaque(xdrs, (char *)buf, 4)) { /* Get failed, assume we are trying to read off the end */ memset(buf, 0, sizeof(buf)); } if (x_op == XDR_ENCODE) /* back to encode */ xdrs->x_op = x_op; if (which != 0) which = 2; if (xdrs->x_op == XDR_ENCODE) { buf[which + 1] = *values % 256; buf[which] = (*values >> 8); if (!h4_xdr_setpos(xdrs, origin)) return (FALSE); if (!h4_xdr_opaque(xdrs, (char *)buf, 4)) return (FALSE); } else { *values = ((buf[which] & 0x7f) << 8) + buf[which + 1]; if (buf[which] & 0x80) { /* extern is neg */ *values -= 0x8000; } } return (TRUE); } /* * xdr a single datum of type 'type' at 'where' */ static bool_t xdr_NCv1data(XDR *xdrs, unsigned long where, nc_type type, Void *values) { unsigned long rem = 0; switch (type) { case NC_BYTE: case NC_CHAR: case NC_SHORT: rem = where % 4; where -= rem; /* round down to nearest word */ break; default: break; } if (!xdr_NCsetpos(xdrs, where)) return (FALSE); switch (type) { case NC_BYTE: case NC_CHAR: return (xdr_NCvbyte(xdrs, (unsigned)rem, (unsigned)1, (char *)values)); case NC_SHORT: return (xdr_NCvshort(xdrs, (unsigned)rem / 2, (short *)values)); case NC_LONG: /* nclong is defined to a 32-bit integer type in netcdf.h */ return (h4_xdr_int(xdrs, (nclong *)values)); case NC_FLOAT: return (h4_xdr_float(xdrs, (float *)values)); case NC_DOUBLE: return (h4_xdr_double(xdrs, (double *)values)); default: break; } return (FALSE); } /***************************************************************************** * * NCSA HDF / netCDF Project * May, 1993 * * NCSA HDF / netCDF source code and documentation are in the public domain. * Specifically, we give to the public domain all rights for future * licensing of the source code, all resale rights, and all publishing rights. * * We ask, but do not require, that the following message be included in all * derived works: * * Portions developed at the National Center for Supercomputing Applications at * the University of Illinois at Urbana-Champaign. Funding for this project * has come primarily from the National Science Foundation. * * THE UNIVERSITY OF ILLINOIS GIVES NO WARRANTY, EXPRESSED OR IMPLIED, FOR THE * SOFTWARE AND/OR DOCUMENTATION PROVIDED, INCLUDING, WITHOUT LIMITATION, * WARRANTY OF MERCHANTABILITY AND WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE * ****************************************************************************** * * Please report all bugs / comments to hdfhelp@ncsa.uiuc.edu * *****************************************************************************/ static int32 tBuf_size = 0; static int32 tValues_size = 0; static int8 *tBuf = NULL; static int8 *tValues = NULL; /* ------------------------------ SDPfreebuf ------------------------------ */ /* Throw away the temporary buffer we've allocated */ intn SDPfreebuf(void) { if (tBuf != NULL) { free(tBuf); tBuf = NULL; tBuf_size = 0; } if (tValues != NULL) { free(tValues); tValues = NULL; tValues_size = 0; } return SUCCEED; } /* ------------------------------ SDIresizebuf ------------------------------ */ /* Resize a temporary buffer to the proper size */ static intn SDIresizebuf(void **buf, int32 *buf_size, int32 size_wanted) { intn ret_value = SUCCEED; if (*buf_size < size_wanted) { free(*buf); *buf_size = size_wanted; *buf = calloc(1, size_wanted); if (*buf == NULL) { *buf_size = 0; ret_value = FAIL; goto done; } } done: return ret_value; } /* end SDIresizebuf() */ #define MAX_SIZE 1000000 /* ------------------------- hdf_get_data ------------------- */ /* * Given a variable vgid return the id of a valid data storage * If no data storage is found, hdf_get_data returns DFREF_NONE(0). * * NEW WAY: we delay filling until data is written out -QAK * */ intn hdf_get_data(NC *handle, NC_var *vp) { int32 vg = FAIL; int32 vsid = DFREF_NONE; int32 tag, t, n; int ret_value = DFREF_NONE; if (NULL == handle) { ret_value = DFREF_NONE; goto done; } if (NULL == vp) { ret_value = DFREF_NONE; goto done; } /* * if it is stored as NDGs we can't do any better than what was * originally stored in vp->data_ref */ if (vp->data_tag == DFTAG_SDS) { ret_value = vp->data_ref; goto done; } if (vp->vgid) { /* attach to the variable's Vgroup */ vg = Vattach(handle->hdf_file, vp->vgid, "r"); if (FAIL == vg) { ret_value = DFREF_NONE; goto done; } /* loop through looking for a data storage object */ n = Vntagrefs(vg); if (FAIL == n) { ret_value = DFREF_NONE; goto done; } for (t = 0; t < n; t++) { if (FAIL == Vgettagref(vg, t, &tag, &vsid)) { ret_value = DFREF_NONE; goto done; } if (tag == DATA_TAG) { /* detach */ if (FAIL == Vdetach(vg)) { ret_value = DFREF_NONE; goto done; } ret_value = vsid; goto done; } /* end if */ } /* don't forget to let go of vgroup */ if (FAIL == Vdetach(vg)) { ret_value = DFREF_NONE; goto done; } } /* are we only in read-only mode? */ if (handle->hdf_mode == DFACC_RDONLY) { /* yes, not good */ ret_value = DFREF_NONE; goto done; } /* * create a new data storage object */ /* -------------------------------------- * * allocate new data storage * * -------------------------------------- */ vsid = Hnewref(handle->hdf_file); /* if it is a record var might as well make it linked blocks now */ if (IS_RECVAR(vp)) { int32 block_size; /* the size of the linked blocks to use */ /* The block size is calculated according to the following heuristic: */ /* First, the block size the user set is used, if set. */ /* Second, the block size is calculated according to the size being */ /* written times the BLOCK_MULT value, in order to make */ /* bigger blocks if the slices are very small. */ /* Third, the calculated size is check if it is bigger than the */ /* MAX_BLOCK_SIZE value so that huge empty blocks are not */ /* created. If the calculated size is greater than */ /* MAX_BLOCK_SIZE, then MAX_BLOCK_SIZE is used */ /* These are very vague heuristics, but hopefully they should avoid */ /* some of the past problems... -QAK */ if (vp->block_size != (-1)) /* use value the user provided, if available */ block_size = vp->block_size; else { /* try figuring out a good value using some heuristics */ /* User's suggested fix for bug #602 - Apr, 2005 */ /* This check avoids overflowing the int32 block_size */ /* if the user has a huge value for vp->len */ if (vp->len > MAX_BLOCK_SIZE) block_size = MAX_BLOCK_SIZE; else { block_size = vp->len * BLOCK_MULT; if (block_size > MAX_BLOCK_SIZE) block_size = MAX_BLOCK_SIZE; } } /* end else */ vp->aid = HLcreate(handle->hdf_file, DATA_TAG, vsid, block_size, BLOCK_COUNT); if (vp->aid == FAIL) { ret_value = DFREF_NONE; goto done; } if (Hendaccess(vp->aid) == FAIL) { ret_value = DFREF_NONE; goto done; } } if (vp->vgid) { /* attach to the variable's Vgroup */ vg = Vattach(handle->hdf_file, vp->vgid, "w"); if (vg == FAIL) { ret_value = DFREF_NONE; goto done; } /* add new Vdata to existing Vgroup */ if (FAIL == Vaddtagref(vg, (int32)DATA_TAG, (int32)vsid)) { ret_value = DFREF_NONE; goto done; } /* detach from the variable's VGroup --- will no longer need it */ if (FAIL == Vdetach(vg)) { ret_value = DFREF_NONE; goto done; } } vp->aid = FAIL; /* added a new object -- make sure we flush the header */ handle->flags |= NC_HDIRTY; ret_value = vsid; done: if (ret_value == DFREF_NONE) { /* Failure cleanup */ if (vg != FAIL) { Vdetach(vg); /* no point in catch error here if we fail */ } } return ret_value; } /* hdf_get_data */ /* ---------------------------- hdf_get_vp_aid ---------------------------- */ /* Return an AID for the current variable. Return FAIL on error SUCCEED on success */ int32 hdf_get_vp_aid(NC *handle, NC_var *vp) { int32 ret_value = SUCCEED; /* attach to proper data storage*/ if (!vp->data_ref) vp->data_ref = hdf_get_data(handle, vp); /* * Fail if there is no data */ if (vp->data_ref == DFREF_NONE) { ret_value = FAIL; goto done; } if (handle->hdf_mode == DFACC_RDONLY) vp->aid = Hstartread(handle->hdf_file, vp->data_tag, vp->data_ref); else { if (!IS_RECVAR(vp)) { vp->aid = Hstartaccess(handle->hdf_file, vp->data_tag, vp->data_ref, DFACC_WRITE); if (vp->set_length == TRUE) { Hsetlength(vp->aid, vp->len); vp->set_length = FALSE; } } else vp->aid = Hstartaccess(handle->hdf_file, vp->data_tag, vp->data_ref, DFACC_WRITE | DFACC_APPENDABLE); } ret_value = vp->aid; done: return ret_value; } /* hdf_get_vp_aid */ /* --------------------------- hdf_xdr_NCvdata ---------------------------- */ /* * Read / write 'count' items of contiguous data of type 'type' at 'where' * * If we are not already attached to the VData representing the * data attach to it now. Since attaching / detaching is so * slow, stay attached for future reads / writes. As a result, * we must always attach with write access. * * The calling routine is responsible for calling DFKsetNT() as required. */ static intn hdf_xdr_NCvdata(NC *handle, NC_var *vp, unsigned long where, nc_type type, uint32 count, void *values) { NC_attr **attr = NULL; /* pointer to the fill-value attribute */ int32 status; int32 byte_count; /* total # of bytes of data to be processed */ int32 elements_left = 0; /* number of elements still left to be processed */ int32 data_size; /* size of data block being processed in bytes */ int32 new_count; /* computed by dividing number of elements 'count' by 2 since 'count' is too big to allocate temporary buffer */ int32 bytes_left; int32 elem_length; /* length of the element pointed to */ int8 platntsubclass; /* the machine type of the current platform */ int8 outntsubclass; /* the data's machine type */ uintn convert; /* whether to convert or not */ uint8 *pvalues; /* pointer to traverse user's buffer "values" */ int16 isspecial; intn ret_value = SUCCEED; int32 alloc_status = FAIL; /* no successful allocation yet */ (void)type; if (vp->aid == FAIL && hdf_get_vp_aid(handle, vp) == FAIL) { /* * Fail if there is no data *AND* we were trying to read... * Otherwise, we should fill with the fillvalue */ if (vp->data_ref == 0) { if (handle->hdf_mode == DFACC_RDONLY) { if (vp->data_tag == DATA_TAG || vp->data_tag == DFTAG_SDS) { if ((attr = NC_findattr(&vp->attrs, _FillValue)) != NULL) HDmemfill(values, (*attr)->data->values, vp->szof, count); else NC_arrayfill(values, count * vp->szof, vp->type); } ret_value = SUCCEED; goto done; } else { ret_value = FAIL; goto done; } } } /* Figure out if the tag/ref is a compressed special-element with no data. This "template" tag/ref is treated as if the tag/ref doesn't exist at all: reading from it fills a memory buffer and returns it to the user and writing to it fills up the buffer around the block to write. */ if (Hinquire(vp->aid, NULL, NULL, NULL, &elem_length, NULL, NULL, NULL, &isspecial) == FAIL) { ret_value = FAIL; goto done; } /* Check for zero-length compressed special element, i.e. a template */ if (elem_length <= 0) { attr = NC_findattr(&vp->attrs, _FillValue); /* Check for reading from template & fill memory buffer with fill-value */ if (handle->xdrs->x_op == XDR_DECODE) { if (attr != NULL) HDmemfill(values, (*attr)->data->values, vp->szof, count); else NC_arrayfill(values, count * vp->szof, vp->type); ret_value = SUCCEED; /* we are done */ goto done; } /* end if */ } /* end if */ /* Collect all the number-type size information, etc. */ byte_count = count * vp->HDFsize; if (FAIL == (platntsubclass = DFKgetPNSC(vp->HDFtype, DF_MT))) { ret_value = FAIL; goto done; } if (DFKisnativeNT(vp->HDFtype)) { if (FAIL == (outntsubclass = DFKgetPNSC(vp->HDFtype, DF_MT))) { ret_value = FAIL; goto done; } } else { outntsubclass = DFKislitendNT(vp->HDFtype) ? DFNTF_PC : DFNTF_HDFDEFAULT; } convert = (uintn)(platntsubclass != outntsubclass); /* BMR - bug#268: removed the block here that attempted to allocation large amount of space and failed. The allocation is not incorporated in the reading values, writing values, and writing fill values parts in this routine */ /* * It may be the case that the current does NOT begin at the start of the * data-object which is storing it. In that case compute the correct * location. * QAK: This shouldn't be an issue for compressed template objects. */ if (vp->data_offset > 0) { where += vp->data_offset; /* if the dataset doesn't exist yet, we need to fill in the dimension scale info */ if (elem_length <= 0 && (handle->flags & NC_NOFILL) == 0) { /* BMR: work around for the low memory problem by repeatedly processing smaller amount blocks of data */ /* compute the data block size and the # of elements*/ data_size = MAX(byte_count, where); new_count = vp->data_offset / vp->HDFsize; /* attempt to allocate the entire amount needed first, data_size bytes */ alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); /* if fail to allocate, repeatedly calculate a new amount and allocate until success or until no more memory available */ while (alloc_status == FAIL) { new_count = new_count / 2; /* try smaller number of elements */ if (new_count <= 0) /* unable to allocate any memory */ { ret_value = FAIL; goto done; } /* re-calculate the size of the data block using smaller # of elements */ data_size = new_count * vp->szof; alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); } /* while trying to allocate */ /* assume that all elements are to be processed */ elements_left = vp->data_offset / vp->HDFsize; /* repeatedly read, convert, and store blocks of data_size bytes of data into the user's buffer until no more elements left */ while (elements_left > 0) { /* Fill the temporary buffer with the fill-value */ if (attr != NULL) HDmemfill(tBuf, (*attr)->data->values, vp->szof, new_count); else NC_arrayfill(tBuf, data_size, vp->type); /* convert the fill-values, if necessary */ if (convert) { if (FAIL == DFKconvert(tBuf, tBuf, vp->HDFtype, (uint32)new_count, DFACC_WRITE, 0, 0)) { ret_value = FAIL; goto done; } } /* end if convert */ /* Write the fill-values out */ status = Hwrite(vp->aid, data_size, tBuf); if (data_size == status) { ret_value = FAIL; goto done; } /* compute the number of elements left to be processed */ elements_left = elements_left - new_count; /* adjust the # of elements in the final block and compute that block's size if necessary */ if (elements_left > 0 && elements_left < new_count) { new_count = elements_left; data_size = new_count * vp->szof; } } /* while more elements left to be processed */ SDPfreebuf(); /* free tBuf and tValues if any exists */ /* end of BMR part */ } /* end if */ } /* end if */ /* if we get here and the length is 0, we need to fill in the initial set of fill-values */ if (elem_length <= 0 && where > 0) { /* fill in the lead sequence of bytes with the fill values */ if ((handle->flags & NC_NOFILL) == 0 || isspecial == SPECIAL_COMP) { int32 buf_size = where; int32 chunk_size; int32 tempbuf_size; /* size to allocate buffer tBuf */ uint8 *write_buf = NULL; uint32 fill_count; /* number of fill values */ /* this block is to work around the failure caused by allocating a large chunk for the temporary buffers. First, try to allocate the desired chunk for both buffers; if any allocation fails, reduce the chunk size in half and try again until both buffers are successfully allocated - BMR */ chunk_size = MIN(buf_size, MAX_SIZE); /* initial chunk size */ alloc_status = FAIL; /* while any allocation fails */ while (alloc_status == FAIL) { /* try to allocate the buffer to hold the fill values after conversion */ alloc_status = SDIresizebuf((void **)&tValues, &tValues_size, chunk_size); /* then, if successful, try to allocate the temporary buffer that holds the fill values before conversion */ if (alloc_status != FAIL) { /* calculate the size needed to allocate tBuf by first calculating the number of fill values that cover the chunk in buffer tValues after conversion... */ fill_count = chunk_size / vp->HDFsize; /* then use that number to compute the size of the buffer to hold fill_count fill values of type vp->szof, i.e., before conversion */ tempbuf_size = fill_count * vp->szof; alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, tempbuf_size); } /* if first allocation successes */ if (alloc_status == FAIL) /* if any allocations fail */ chunk_size = chunk_size / 2; /* try smaller chunk size */ if (chunk_size <= 0) /* unable to allocate any memory */ { ret_value = FAIL; goto done; } } /* while any allocation fails */ /* Fill the temporary buffer tBuf with the fill-value specified in the attribute if one exists, otherwise, with the default value */ if (attr != NULL) HDmemfill(tBuf, (*attr)->data->values, vp->szof, fill_count); else NC_arrayfill(tBuf, tempbuf_size, vp->type); /* convert the fill-values, if necessary, and store them in the buffer tValues */ if (convert) { if (FAIL == DFKconvert(tBuf, tValues, vp->HDFtype, fill_count, DFACC_WRITE, 0, 0)) { ret_value = FAIL; goto done; } write_buf = (uint8 *)tValues; } /* end if */ else write_buf = (uint8 *)tBuf; do { /* Write the fill-values out */ status = Hwrite(vp->aid, chunk_size, write_buf); if (status != chunk_size) { ret_value = FAIL; goto done; } /* reduce the bytes to be written */ buf_size -= chunk_size; /* to take care of the last piece of data */ chunk_size = MIN(chunk_size, buf_size); } while (buf_size > 0); } /* end if */ else { /* don't write fill values, just seek to the correct location */ if (Hseek(vp->aid, where, DF_START) == FAIL) { ret_value = FAIL; goto done; } } /* end else */ } /* end if */ else { /* position ourselves correctly */ if (elem_length > 0) { if (Hseek(vp->aid, where, DF_START) == FAIL) { ret_value = FAIL; goto done; } } } /* end else */ /* Read or write the data into / from values */ if (handle->xdrs->x_op == XDR_DECODE) /* the read case */ { if (convert) /* if data need to be converted for this platform */ { data_size = byte_count; /* use data_size; preserve the byte count */ new_count = count; /* use new_count; preserve the # of elements */ /* attempt to allocate the entire amount needed first */ alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); /* if fail to allocate, repeatedly calculate a new amount and allocate until success or until no memory available */ while (alloc_status == FAIL) { new_count = new_count / 2; /* try smaller number of elements */ if (new_count <= 0) /* unable to allocate any memory */ { ret_value = FAIL; goto done; } /* re-calculate the size of the data block */ data_size = new_count * vp->szof; alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); } /* repeatedly read, convert, and store blocks of data_size bytes of data into the user's buffer until no more elements left */ /* number of elements left to be processed */ elements_left = count; /* put a ptr at the beginning of the user buffer for read data */ pvalues = values; while (elements_left > 0) { status = Hread(vp->aid, data_size, tBuf); if (status != data_size) /* amount read != amount specified */ { ret_value = FAIL; goto done; } /* convert and store new_count elements in tBuf into the buffer values, pointed to by pvalues */ if (FAIL == DFKconvert(tBuf, pvalues, vp->HDFtype, (uint32)new_count, DFACC_READ, 0, 0)) { ret_value = FAIL; goto done; } /* compute the number of elements left to be processed */ elements_left = elements_left - new_count; /* adjust the # of elements in the final block and compute that block's size if necessary */ if (elements_left > 0 && elements_left < new_count) { new_count = elements_left; data_size = new_count * vp->szof; } /* advance pvalues on buffer "values" for next batch of data */ pvalues = pvalues + data_size; } /* while more elements left to be processed */ SDPfreebuf(); /* free tBuf and tValues if any exist */ } /* end if convert */ else /* no convert, read directly into the user's buffer */ { status = Hread(vp->aid, byte_count, values); if (status != byte_count) { ret_value = FAIL; goto done; } } /* end else */ } /* end if XDR_DECODE */ else { /* XDR_ENCODE */ if (convert) /* if data need to be converted for this platform */ { data_size = byte_count; /* use data_size; preserve the byte count*/ new_count = count; /* use new_count; preserve the # of elements */ /* attempt to allocate the entire amount needed first */ alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); /* if fail to allocate, repeatedly calculate a new amount and allocate until success or no more memory left */ while (alloc_status == FAIL) { new_count = new_count / 2; /* try smaller number of elements */ if (new_count <= 0) /* unable to allocate any memory */ { ret_value = FAIL; goto done; } /* re-calculate the size of the data block */ data_size = new_count * vp->HDFsize; alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, data_size); } /* repeatedly convert, store blocks of data_size bytes of data from the user's buffer into the temporary buffer, and write out the temporary buffer until no more bytes left */ /* number of elements left to be processed */ elements_left = count; /* put a ptr at the beginning of the user buffer for read data */ pvalues = values; while (elements_left > 0) { /* convert new_count elements in the user's buffer values and write them into the temporary buffer */ if (FAIL == DFKconvert(pvalues, tBuf, vp->HDFtype, (uint32)new_count, DFACC_WRITE, 0, 0)) { ret_value = FAIL; goto done; } status = Hwrite(vp->aid, data_size, tBuf); if (status != data_size) { ret_value = FAIL; goto done; } /* compute the number of elements left to be processed */ elements_left = elements_left - new_count; /* adjust the # of elements in the final block and compute that block's size if necessary */ if (elements_left > 0 && elements_left < new_count) { new_count = elements_left; data_size = new_count * vp->szof; } /* advance pvalues on buffer "values" for next batch of data */ pvalues = pvalues + data_size; } /* while more elements left to be processed */ SDPfreebuf(); /* free tBuf and tValues if any exist */ } /* end if convert */ else { /* no convert, write directly from the user's buffer */ status = Hwrite(vp->aid, byte_count, values); if (status != byte_count) { ret_value = FAIL; goto done; } } /* no convert */ } /* XDR_ENCODE */ /* if we get here and the length is 0, we need to finish writing out the fill-values */ bytes_left = vp->len - (where + byte_count); if (elem_length <= 0 && bytes_left > 0) { if ((handle->flags & NC_NOFILL) == 0 || isspecial == SPECIAL_COMP) { int32 buf_size = bytes_left; int32 chunk_size; int32 tempbuf_size; /* num of bytes to allocate buffer tBuf */ uint8 *write_buf = NULL; uint32 fill_count; /* number of fill values */ /* this block is to work around the failure caused by allocating a large chunk for the temporary buffers. First, try to allocate the desired chunk for both buffers; if any allocation fails, reduce the chunk size in half and try again until both buffers are successfully allocated - BMR */ chunk_size = MIN(buf_size, MAX_SIZE); /* initial chunk size */ /* while any allocation fails */ alloc_status = FAIL; while (alloc_status == FAIL) { /* first, try to allocate the buffer to hold the fill values after conversion */ alloc_status = SDIresizebuf((void **)&tValues, &tValues_size, chunk_size); /* then, if successful, try to allocate the temporary buffer that holds the fill values before conversion */ if (alloc_status != FAIL) { /* calculate the size needed to allocate tBuf by first calculating the number of fill values that cover the chunk in buffer tValues after conversion...*/ fill_count = chunk_size / vp->HDFsize; /* then use that number to compute the size of the buffer to hold fill_count fill values of type vp->szof, i.e., before conversion */ tempbuf_size = fill_count * vp->szof; alloc_status = SDIresizebuf((void **)&tBuf, &tBuf_size, tempbuf_size); } /* if first allocation successes */ if (alloc_status == FAIL) /* if any allocations fail */ chunk_size = chunk_size / 2; /* try smaller chunk size */ if (chunk_size <= 0) /* unable to allocate any memory */ { ret_value = FAIL; goto done; } } /* while any allocation fails */ /* Fill the temporary buffer tBuf with the fill-value specified in the * attribute if one exists, otherwise, with the default value */ if (attr != NULL) HDmemfill(tBuf, (*attr)->data->values, vp->szof, fill_count); else NC_arrayfill(tBuf, tempbuf_size, vp->type); /* convert the fill-values, if necessary, and store them in the buffer tValues */ if (convert) { if (FAIL == DFKconvert(tBuf, tValues, vp->HDFtype, fill_count, DFACC_WRITE, 0, 0)) { ret_value = FAIL; goto done; } write_buf = (uint8 *)tValues; } /* end if */ else write_buf = (uint8 *)tBuf; do { /* Write the fill-values out */ status = Hwrite(vp->aid, chunk_size, write_buf); if (status != chunk_size) { ret_value = FAIL; goto done; } /* reduce the bytes still to be written */ buf_size -= chunk_size; /* to take care of the last piece of data */ chunk_size = MIN(chunk_size, buf_size); } while (buf_size > 0); } /* end if */ } /* end if */ done: return ret_value; } /* hdf_xdr_NCvdata */ /* ------------------------- hdf_xdr_NCv1data ------------------- */ /* * read / write a single datum of type 'type' at 'where' * This is designed to replace the xdr based routine of the * similar name * Return TRUE if everything worked, else FALSE */ static intn hdf_xdr_NCv1data(NC *handle, NC_var *vp, unsigned long where, nc_type type, void *values) { intn ret_value = SUCCEED; if (FAIL == DFKsetNT(vp->HDFtype)) { ret_value = FAIL; goto done; } ret_value = hdf_xdr_NCvdata(handle, vp, where, type, 1, values); done: return ret_value; } /* hdf_xdr_NCv1data */ /* -------------------------- nssdc_xdr_NCvdata --------------------------- */ /* * Read / write 'count' items of contiguous data of type 'type' at 'where' * out of a CDF file * * The calling routine is responsible for calling DFKsetNT() as required. * * NOTE: Do we really care about CDF anymore since we don't support * it 100 percent -GV */ static bool_t nssdc_xdr_NCvdata(NC *handle, NC_var *vp, unsigned long where, nc_type type, uint32 count, void *values) { int32 status; int32 byte_count; (void)type; (void)values; /* position ourselves correctly */ status = HI_SEEK((hdf_file_t)handle->cdf_fp, where); if (status == FAIL) return (FALSE); /* make sure our tmp buffer is big enough to hold everything */ byte_count = count * vp->HDFsize; if (SDIresizebuf((void **)&tBuf, &tBuf_size, byte_count) == FAIL) return (FALSE); return (TRUE); } /* nssdc_xdr_NCvdata */ static int NCvar1io(NC *handle, int varid, const long *coords, Void *value) { NC_var *vp; unsigned long offset; if (handle->flags & NC_INDEF) return (-1); if (handle->vars == NULL) return (-1); vp = NC_hlookupvar(handle, varid); if (vp == NULL) return (-1); if (vp->assoc->count == 0) /* 'scaler' variable */ { switch (handle->file_type) { case HDF_FILE: if (FAIL == hdf_xdr_NCv1data(handle, vp, vp->begin, vp->type, value)) return -1; else return 0; case netCDF_FILE: return (xdr_NCv1data(handle->xdrs, vp->begin, vp->type, value) ? 0 : -1); } } if (!NCcoordck(handle, vp, coords)) return (-1); offset = NC_varoffset(handle, vp, coords); switch (handle->file_type) { case HDF_FILE: if (FAIL == hdf_xdr_NCv1data(handle, vp, offset, vp->type, value)) return (-1); break; case netCDF_FILE: if (!xdr_NCv1data(handle->xdrs, offset, vp->type, value)) return (-1); break; } return (0); } int ncvarput1(int cdfid, int varid, const long *coords, const ncvoid *value) { NC *handle; cdf_routine_name = "ncvarput1"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) { NCadvise(NC_EPERM, "%s: NC_NOWRITE", handle->path); return (-1); } handle->xdrs->x_op = XDR_ENCODE; return (NCvar1io(handle, varid, coords, value)); } int ncvarget1(int cdfid, int varid, const long *coords, ncvoid *value) { NC *handle; cdf_routine_name = "ncvarget1"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); handle->xdrs->x_op = XDR_DECODE; return (NCvar1io(handle, varid, coords, (Void *)value)); } /* * xdr 'count' items of contiguous data of type 'type' at 'where' */ static bool_t xdr_NCvdata(XDR *xdrs, unsigned long where, nc_type type, unsigned count, Void *values) { unsigned long rem = 0; bool_t (*xdr_NC_fnct)(); bool_t stat; size_t szof; switch (type) { case NC_BYTE: case NC_CHAR: case NC_SHORT: rem = where % 4; where -= rem; /* round down to nearest word */ break; default: break; } if (!xdr_NCsetpos(xdrs, where)) return (FALSE); switch (type) { case NC_BYTE: case NC_CHAR: if (rem != 0) { unsigned vcount = MIN(count, 4 - rem); if (!xdr_NCvbyte(xdrs, (unsigned)rem, vcount, values)) return (FALSE); values += vcount; count -= vcount; } rem = count % 4; /* tail remainder */ count -= rem; if (!h4_xdr_opaque(xdrs, values, count)) return (FALSE); if (rem != 0) { values += count; if (!xdr_NCvbyte(xdrs, (unsigned)0, (unsigned)rem, values)) return (FALSE); return (TRUE); } /* else */ return (TRUE); case NC_SHORT: if (rem != 0) { if (!xdr_NCvshort(xdrs, (unsigned)1, (short *)values)) return (FALSE); values += sizeof(short); count -= 1; } rem = count % 2; /* tail remainder */ count -= rem; if (!xdr_shorts(xdrs, (short *)values, count)) return (FALSE); if (rem != 0) { values += (count * sizeof(short)); return (xdr_NCvshort(xdrs, (unsigned)0, (short *)values)); } /* else */ return (TRUE); case NC_LONG: xdr_NC_fnct = h4_xdr_int; szof = sizeof(nclong); break; case NC_FLOAT: xdr_NC_fnct = h4_xdr_float; szof = sizeof(float); break; case NC_DOUBLE: xdr_NC_fnct = h4_xdr_double; szof = sizeof(double); break; default: return (FALSE); } for (stat = TRUE; stat && (count > 0); count--) { stat = (*xdr_NC_fnct)(xdrs, values); values += szof; } return (stat); } /* * For a "hypercube" put/get, compute the largest contiguous block */ static const long * NCvcmaxcontig(NC *handle, NC_var *vp, const long *origin, const long *edges) { const long *edp, *orp; unsigned long *boundary, *shp; if (IS_RECVAR(vp)) { /* one dimensional && the only 'record' variable */ if (vp->assoc->count == 1 && handle->recsize <= vp->len) { return (edges); } /* else */ boundary = vp->shape + 1; } else boundary = vp->shape; /* find max contiguous */ shp = vp->shape + vp->assoc->count - 1; /* points to last dimension */ edp = edges + vp->assoc->count - 1; /* points to last edge */ orp = origin + vp->assoc->count - 1; /* Traverse shp back to the beginning of boundary while checking that each edge is within limit between start coord and max of dimension */ for (; shp >= boundary; shp--, edp--, orp--) { if (*edp > *shp - *orp || *edp < 0) { NCadvise(NC_EINVAL, "Invalid edge length %d", *edp); return (NULL); } if (*edp < *shp) { break; /* Why do we want to break here? What if the later edge is out of limit and we break out as soon as a smaller edge is reached? -BMR */ } } /* When all dimensions have been checked and shp has passed the first element in boundary and into undefined location, so did edp in edges, move edp forward once to point to the first element in edges. -BMR, 4/15/2013 */ if (shp < boundary) /* made it all the way */ edp++; /* shp, edp reference last index s.t. shape[ii] == edge[ii] */ return (edp); } static int NCsimplerecio(NC *handle, NC_var *vp, const long *start, const long *edges, Void *values) { long offset = -1; long newrecs; /* 'start' should be verified as valid upon prior to entry to this * routine */ if (*edges <= 0) { NCadvise(NC_EINVALCOORDS, "%s: Invalid edge length %ld", vp->name->values, *edges); return -1; } /* check to see if we are trying to read beyond the end; Modification: (BMR - 11/10/2006) - replaced "handle->numrecs" with "vp->numrecs" to fix bug 525, ie. writing two unlimited 1D datasets without closing the file in between the two writes caused the second dataset to contain garbage. */ /* After fixing HDFFR-1385, need to reassess this issue. -BMR */ newrecs = (*start + *edges) - vp->numrecs; if (handle->xdrs->x_op != XDR_ENCODE && newrecs > 0) { NCadvise(NC_EINVALCOORDS, "%s: Invalid Coordinates", vp->name->values); return -1; } offset = NC_varoffset(handle, vp, start); if (newrecs > 0) handle->flags |= NC_NDIRTY; switch (handle->file_type) { case HDF_FILE: DFKsetNT(vp->HDFtype); if (FAIL == hdf_xdr_NCvdata(handle, vp, offset, vp->type, (uint32)*edges, values)) return (-1); break; case CDF_FILE: DFKsetNT(vp->HDFtype); if (!nssdc_xdr_NCvdata(handle, vp, offset, vp->type, (uint32)*edges, values)) return (-1); break; case netCDF_FILE: if (!xdr_NCvdata(handle->xdrs, offset, vp->type, (unsigned)*edges, values)) return (-1); break; } if (newrecs > 0) { /* Update var's numrecs first and then handle->numrecs if the first exceeds the latter (part of bugzilla 1378, i.e., JIRA HDFFR-167) - BMR, 12/30/2008 */ vp->numrecs += newrecs; handle->numrecs = MAX(vp->numrecs, handle->numrecs); if (handle->flags & NC_NSYNC) /* write out header->numrecs NOW */ { if (!xdr_numrecs(handle->xdrs, handle)) return (-1); handle->flags &= ~NC_NDIRTY; } } return (0); } /* * The following routine is not `static' because it is used by the `putgetg' * module for generalized hyperslab access. */ int NCvario(NC *handle, int varid, const long *start, const long *edges, void *values) { NC_var *vp; const long *edp0, *edp; unsigned long iocount; if (handle->flags & NC_INDEF) return (-1); /* find the variable */ if (handle->vars == NULL) return (-1); vp = NC_hlookupvar(handle, varid); if (vp == NULL) return (-1); if (handle->file_type != netCDF_FILE) { if (FAIL == DFKsetNT(vp->HDFtype)) return -1; } if (vp->assoc->count == 0) /* 'scaler' variable */ { switch (handle->file_type) { case HDF_FILE: if (FAIL == hdf_xdr_NCv1data(handle, vp, vp->begin, vp->type, values)) return -1; else return 0; case netCDF_FILE: return (xdr_NCv1data(handle->xdrs, vp->begin, vp->type, values) ? 0 : -1); } } if (!NCcoordck(handle, vp, start)) return (-1); if (IS_RECVAR(vp) && vp->assoc->count == 1 && handle->recsize <= vp->len) { /* one dimensional && the only 'record' variable */ return (NCsimplerecio(handle, vp, start, edges, values)); } /* find max contiguous, check sanity of edges */ edp0 = NCvcmaxcontig(handle, vp, start, edges); if (edp0 == NULL) return (-1); /* now accumulate max count for a single io operation */ edp = edges + vp->assoc->count - 1; /* count is > 0 at this point */ iocount = 1; for (; edp >= edp0; edp--) iocount *= *edp; /* now edp = edp0 - 1 */ { /* inline */ long coords[H4_MAX_VAR_DIMS], upper[H4_MAX_VAR_DIMS]; long *cc; const long *mm; unsigned long offset; size_t szof = nctypelen(vp->type); /* copy in starting indices */ cc = coords; mm = start; while (cc < &coords[vp->assoc->count]) *cc++ = *mm++; /* set up in maximum indices */ cc = upper; mm = coords; edp = edges; while (cc < &upper[vp->assoc->count]) *cc++ = *mm++ + *edp++; /* ripple counter */ cc = coords; mm = upper; while (*coords < *upper) { while (*cc < *mm) { if (edp0 == edges || mm == &upper[edp0 - edges - 1]) { /* doit */ if (!NCcoordck(handle, vp, coords)) return (-1); offset = NC_varoffset(handle, vp, coords); switch (handle->file_type) { case HDF_FILE: if (FAIL == hdf_xdr_NCvdata(handle, vp, offset, vp->type, (uint32)iocount, values)) return (-1); break; case CDF_FILE: if (!nssdc_xdr_NCvdata(handle, vp, offset, vp->type, (uint32)iocount, values)) return (-1); break; case netCDF_FILE: if (!xdr_NCvdata(handle->xdrs, offset, vp->type, (unsigned)iocount, values)) return (-1); break; } values = (void *)((const uint8 *)values + iocount * szof); (*cc) += (edp0 == edges ? iocount : 1); continue; } cc++; mm++; } if (cc == coords) { break; } *cc = start[cc - coords]; cc--; mm--; (*cc)++; } /* * This is a kludge to work around the fact the NCcoordck() doesn't * get the upper limits on the slab to write out -QAK */ if (upper[0] > vp->numrecs) vp->numrecs = upper[0]; } /* end inline */ #ifdef NOTNOW /* Albert and I agree that this check below makes perfect sense, but it * causes the ncdiminq test to fail for unlimited length dimensions. * Perhaps someone with more time can look into this later. -QAK * Perhaps it is only true for netCDF files. -BMR (2013-06-24) */ /* HDFFR-1385: the fix for this bug may fix this problem too.-BMR */ if (handle->numrecs < vp->numrecs) handle->numrecs = vp->numrecs; #endif return (0); } int ncvarput(int cdfid, int varid, const long *start, const long *edges, ncvoid *values) { NC *handle; cdf_routine_name = "ncvarput"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) { NCadvise(NC_EPERM, "%s: NC_NOWRITE", handle->path); return (-1); } handle->xdrs->x_op = XDR_ENCODE; return (NCvario(handle, varid, start, edges, values)); } /* --------------------------- NC_fill_buffer ---------------------------- */ /* * Fills the provided array with user-defined fill value _FillValue or * the default one. The buffer size to be filled is computed using the * provided parameter 'edges'. * -BMR, 2013/8/29 */ /* handle - file structure */ /* varid - var number in handle->vars list */ /* edges - size of the array's edges */ /* values - buffer to be filled */ int NC_fill_buffer(NC *handle, int varid, const long *edges, void *values) { NC_var *vp = NULL; NC_attr **attr = NULL; unsigned long buf_size; /* Find the variable structure */ if (handle->vars == NULL) return -1; vp = NC_hlookupvar(handle, varid); if (vp == NULL) return -1; /* Compute the size of the buffer using the edges */ buf_size = 1; for (int ii = 0; ii < vp->assoc->count; ii++) buf_size = buf_size * edges[ii]; /* Find user-defined fill-value and fill the buffer with it */ attr = NC_findattr(&vp->attrs, _FillValue); if (attr != NULL) { if (HDmemfill(values, (*attr)->data->values, vp->szof, buf_size) == NULL) { return -1; } /* If no user-defined fill-value, fill the buffer with default fill-value */ else { NC_arrayfill(values, buf_size * vp->szof, vp->type); } } return 0; } /* ---------------------------- ncvarget ----------------------------- */ /* * Reads data from the variable 'varid'. The starting position and size * of the data are specified by parameters 'start' and 'edges'. * * If the requested size exceeds the boundary of the actual data, ncvarget * will fill the provided buffer with user-defined fill values or the * default fill values (via NC_fill_buffer.) * * If the requested size exceeds not only the boundary of the actual data, * but also the maximum number of records in the file, ncvarget will fail. * * -BMR, 2013/8/29 */ int ncvarget(int cdfid, int varid, const long *start, const long *edges, ncvoid *values) { NC *handle; int status = 0; cdf_routine_name = "ncvarget"; /* Get the file handle */ handle = NC_check_id(cdfid); if (handle == NULL) return (-1); /* Fill the buffer with fill-values before passing it into NCvario to read the requested data */ status = NC_fill_buffer(handle, varid, edges, values); if (status == FAIL) return (-1); handle->xdrs->x_op = XDR_DECODE; return (NCvario(handle, varid, start, edges, (Void *)values)); } /* This is the original ncvarget. Keep for a while just in case. -BMR int ncvarget(cdfid, varid, start, edges, values) int cdfid ; int varid ; const long *start ; const long *edges ; ncvoid *values ; { NC *handle ; cdf_routine_name = "ncvarget" ; handle = NC_check_id(cdfid) ; if(handle == NULL) return(-1) ; handle->xdrs->x_op = XDR_DECODE ; return( NCvario(handle, varid, start, edges, (Void *)values) ) ; } */ /* Begin recio */ /* * Returns number of record variables in an open netCDF file, * Optionally fills an array of record variable handles. * Optionally fills an array of record variable ids. * Returns -1 on error. */ static int NCnumrecvars(NC *handle, NC_var **vpp, int *recvarids) { NC_var **dp; int ii; int nrecvars = 0; if (handle->vars == NULL) return -1; dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (IS_RECVAR((*dp))) { if (vpp != NULL) vpp[nrecvars] = *dp; if (recvarids != NULL) recvarids[nrecvars] = ii; nrecvars++; } } return nrecvars; } static long NCelemsPerRec(NC_var *vp) { long nelems = 1; int jj; for (jj = 1; jj < vp->assoc->count; jj++) nelems *= vp->shape[jj]; return nelems; } /* * Retrieves the number of record variables, the record variable ids, and the * record size of each record variable. If any pointer to info to be returned * is null, the associated information is not returned. Returns -1 on error. */ int ncrecinq(int cdfid, int *nrecvars, int *recvarids, long *recsizes) { NC *handle; int nrvars; NC_var *rvp[H4_MAX_NC_VARS]; cdf_routine_name = "ncrecinq"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); nrvars = NCnumrecvars(handle, rvp, recvarids); if (nrvars == -1) return -1; if (nrecvars != NULL) *nrecvars = nrvars; if (recsizes != NULL) { int ii; for (ii = 0; ii < nrvars; ii++) { recsizes[ii] = nctypelen(rvp[ii]->type) * NCelemsPerRec(rvp[ii]); } } return nrvars; } static int NCrecio(NC *handle, long recnum, Void **datap) { int nrvars; NC_var *rvp[H4_MAX_NC_VARS]; int ii; long coords[H4_MAX_VAR_DIMS]; unsigned long offset; unsigned iocount; nrvars = NCnumrecvars(handle, rvp, (int *)NULL); if (nrvars == -1) return -1; /* TODO: what error message ?*/ memset(coords, 0, sizeof(coords)); coords[0] = recnum; for (ii = 0; ii < nrvars; ii++) { if (datap[ii] == NULL) continue; /* else */ offset = NC_varoffset(handle, rvp[ii], coords); iocount = NCelemsPerRec(rvp[ii]); switch (handle->file_type) { case HDF_FILE: DFKsetNT(rvp[ii]->HDFtype); if (FAIL == hdf_xdr_NCvdata(handle, rvp[ii], offset, rvp[ii]->type, (uint32)iocount, datap[ii])) return (-1); break; case CDF_FILE: DFKsetNT(rvp[ii]->HDFtype); if (!nssdc_xdr_NCvdata(handle, rvp[ii], offset, rvp[ii]->type, (uint32)iocount, datap[ii])) return (-1); break; case netCDF_FILE: if (!xdr_NCvdata(handle->xdrs, offset, rvp[ii]->type, iocount, datap[ii])) return (-1); break; } } return 0; } /* * Write one record's worth of data, except don't write to variables for which * the address of the data to be written is null. Return -1 on error. */ int ncrecput(int cdfid, long recnum, ncvoid **datap) { NC *handle; long unfilled; cdf_routine_name = "ncrecput"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (handle->flags & NC_INDEF) return (-1); if ((unfilled = recnum - handle->numrecs) >= 0) { handle->flags |= NC_NDIRTY; if (handle->flags & NC_NOFILL) { /* Go directly to jail, do not pass go */ handle->numrecs = recnum + 1; } else { /* fill out new records */ if (!xdr_NCsetpos(handle->xdrs, handle->begin_rec + handle->recsize * handle->numrecs)) { nc_serror("seek, rec %ld", handle->numrecs); return (FALSE); } for (; unfilled >= 0; unfilled--, handle->numrecs++) { if (!NCfillrecord(handle->xdrs, (NC_var **)handle->vars->values, handle->vars->count)) { nc_serror("NCfillrec, rec %ld", handle->numrecs); return (FALSE); } } } if (handle->flags & NC_NSYNC) /* write out header->numrecs NOW */ { if (!xdr_numrecs(handle->xdrs, handle)) return (FALSE); handle->flags &= ~NC_NDIRTY; } } handle->xdrs->x_op = XDR_ENCODE; return (NCrecio(handle, recnum, (Void **)datap)); } /* * Read one record's worth of data, except don't read from variables for which * the address of the data to be read is null. Return -1 on error; */ int ncrecget(int cdfid, long recnum, ncvoid **datap) { NC *handle; cdf_routine_name = "ncrecget"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (handle->flags & NC_INDEF) return (-1); handle->xdrs->x_op = XDR_DECODE; return (NCrecio(handle, recnum, (Void **)datap)); } hdf4-hdf4.3.1/mfhdf/libsrc/putgetg.c000066400000000000000000000163431503061704500172230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * This file supports netCDF variable I/O for generalized hyperslabs. * A generalized hyperslab is one in which the locations of the * memory-resident data values may be arbitrary, though they are * constrained to have a regular structure. In addition, the values * of the netCDF variable may be accessed using non-unity strides. * */ #include "nc_priv.h" /* * Perform I/O on a generalized hyperslab. The efficiency of this * implementation is dependent upon caching in the lower layers. */ /* start - NULL => first corner */ /* count - NULL => everything following start[] */ /* stride - NULL => unity strides */ /* imap - NULL => same structure as netCDF variable */ int NCgenio(NC *handle, int varid, const long *start, const long *count, const long *stride, const long *imap, void *values) { int maxidim; /* maximum dimensional index */ NC_var *vp = NC_hlookupvar(handle, varid); if (vp == NULL) return (-1); maxidim = vp->assoc->count - 1; if (maxidim < 0) { /* * The variable is a scalar; consequently, there's only one thing * to get and only one place to put it. (Why was I called?) */ return NCvario(handle, varid, start, count, values); } else { /* * The variable is an array. */ int idim; char *valp = values; long mycount[H4_MAX_VAR_DIMS]; long mystart[H4_MAX_VAR_DIMS]; long mystride[H4_MAX_VAR_DIMS]; long myimap[H4_MAX_VAR_DIMS]; long iocount[H4_MAX_VAR_DIMS]; /* count vector for NCvario() */ long stop[H4_MAX_VAR_DIMS]; /* stop indexes */ long length[H4_MAX_VAR_DIMS]; /* edge lengths in bytes */ /* * Verify stride argument. */ for (idim = 0; idim <= maxidim; ++idim) { if (stride != NULL && stride[idim] < 1) { NCadvise(NC_EINVAL, "Non-positive stride"); return (-1); } } /* * Initialize I/O parameters. */ for (idim = maxidim; idim >= 0; --idim) { mystart[idim] = start != NULL ? start[idim] : 0; mycount[idim] = count != NULL ? count[idim] : idim == 0 && IS_RECVAR(vp) ? handle->numrecs - mystart[idim] : vp->shape[idim] - mystart[idim]; mystride[idim] = stride != NULL ? stride[idim] : 1; myimap[idim] = imap != NULL ? imap[idim] : idim == maxidim ? vp->szof : myimap[idim + 1] * mycount[idim + 1]; iocount[idim] = 1; length[idim] = myimap[idim] * mycount[idim]; stop[idim] = mystart[idim] + mycount[idim] * mystride[idim]; } /* * As an optimization, adjust I/O parameters when the fastest * dimension has unity stride both externally and internally. * In this case, the user could have called a simpler routine * (i.e. ncvarget() or ncvarput()). */ if (mystride[maxidim] == 1 && myimap[maxidim] == vp->szof) { iocount[maxidim] = mycount[maxidim]; mystride[maxidim] = mycount[maxidim]; myimap[maxidim] = length[maxidim]; } /* * Perform I/O. Exit when done. */ for (;;) { int iostat = NCvario(handle, varid, mystart, iocount, (Void *)valp); if (iostat != 0) return iostat; /* * The following code permutes through the variable's external * start-index space and it's internal address space. At the * UPC, this algorithm is commonly called `odometer code'. */ idim = maxidim; carry: valp += myimap[idim]; mystart[idim] += mystride[idim]; if (mystart[idim] >= stop[idim]) { mystart[idim] = start[idim]; valp -= length[idim]; if (--idim < 0) return 0; goto carry; } } /* I/O loop */ } /* variable is array */ } /* * Generalized hyperslab output. */ int ncvarputg(int cdfid, int varid, const long *start, const long *count, const long *stride, const long *imap, ncvoid *values) { NC *handle; cdf_routine_name = "ncvarputg"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) { NCadvise(NC_EPERM, "%s: NC_NOWRITE", handle->path); return (-1); } handle->xdrs->x_op = XDR_ENCODE; return NCgenio(handle, varid, start, count, stride, imap, values); } /* * Generalized hyperslab input. */ int ncvargetg(int cdfid, int varid, const long *start, const long *count, const long *stride, const long *imap, ncvoid *values) { NC *handle; cdf_routine_name = "ncvargetg"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); handle->xdrs->x_op = XDR_DECODE; return NCgenio(handle, varid, start, count, stride, imap, (Void *)values); } /* * Stride-oriented hyperslab output. */ int ncvarputs(int cdfid, int varid, const long *start, const long *count, const long *stride, ncvoid *values) { NC *handle; cdf_routine_name = "ncvarputs"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) { NCadvise(NC_EPERM, "%s: NC_NOWRITE", handle->path); return (-1); } handle->xdrs->x_op = XDR_ENCODE; return NCgenio(handle, varid, start, count, stride, NULL, values); } /* * Stride-oriented hyperslab input. */ int ncvargets(int cdfid, int varid, const long *start, const long *count, const long *stride, ncvoid *values) { NC *handle; cdf_routine_name = "ncvargets"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); handle->xdrs->x_op = XDR_DECODE; return NCgenio(handle, varid, start, count, stride, (long *)0, (Void *)values); } hdf4-hdf4.3.1/mfhdf/libsrc/sharray.c000066400000000000000000000057031503061704500172130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" /* you may wish to tune this: big on a cray, small on a PC? */ #define NC_SHRT_BUFSIZ 8192 #define NC_NSHRTS_PER (NC_SHRT_BUFSIZ / 2) /* number of netshorts the buffer holds */ /* * internal function, bulk xdr of an even number of shorts, less than NC_NSHRTS_PER */ static bool_t NCxdr_shortsb(XDR *xdrs, short *sp, unsigned nshorts) { unsigned char buf[NC_SHRT_BUFSIZ]; unsigned char *cp; unsigned int nbytes = nshorts * 2; if (xdrs->x_op == XDR_ENCODE) { for (cp = buf; cp < &buf[nbytes]; sp++, cp += 2) { *(cp + 1) = *sp % 256; *cp = (*sp >> 8); } } if (!h4_xdr_opaque(xdrs, (char *)buf, nbytes)) return FALSE; if (xdrs->x_op == XDR_DECODE) { for (cp = buf; cp < &buf[nbytes]; sp++, cp += 2) { *sp = ((*cp & 0x7f) << 8) + *(cp + 1); if (*cp & 0x80) { /* extern is neg */ *sp -= 0x8000; } } } return TRUE; } /* * Translate an array of cnt short integers at sp. */ bool_t xdr_shorts(XDR *xdrs, short *sp, unsigned cnt) { int odd; /* 1 if cnt is odd, 0 otherwise */ if (cnt == 0) return TRUE; /* ? */ odd = cnt % 2; if (odd) cnt--; /* cnt is even, odd is set if apropos */ while (cnt > NC_NSHRTS_PER) { if (!NCxdr_shortsb(xdrs, sp, NC_NSHRTS_PER)) return FALSE; /* else */ sp += NC_NSHRTS_PER; cnt -= NC_NSHRTS_PER; } /* we know cnt <= NC_NSHRTS_PER at this point */ if (cnt != 0) { if (!NCxdr_shortsb(xdrs, sp, cnt)) return FALSE; /* else */ sp += cnt; cnt = 0; } if (odd) if (!xdr_NCvshort(xdrs, 0, sp)) return FALSE; return TRUE; } hdf4-hdf4.3.1/mfhdf/libsrc/string.c000066400000000000000000000117771503061704500170600ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" static uint32 compute_hash(unsigned count, const char *str) { uint32 ret = 0; uint32 temp; /* check if string is NULL */ if (str == NULL) return ret; while (count > sizeof(uint32)) { memcpy(&temp, str, sizeof(uint32)); ret += temp; str += sizeof(uint32); count -= sizeof(uint32); } /* end while */ if (count > 0) { temp = 0; memcpy(&temp, str, count); ret += temp; } /* end if */ return (ret); } /* end compute_hash() */ NC_string * NC_new_string(unsigned count, const char *str) { NC_string *ret; size_t memlen; if (count > H4_MAX_NC_NAME) { NCadvise(NC_EMAXNAME, "string \"%c%c%c%c%c%c ...\" length %d exceeds %d", str[0], str[1], str[2], str[3], str[4], str[5], count, H4_MAX_NC_NAME); return NULL; } ret = malloc(sizeof(NC_string)); if (ret == NULL) goto alloc_err; ret->count = count; ret->len = count; ret->hash = compute_hash(count, str); if (count != 0) /* allocate */ { memlen = count + 1; ret->values = malloc(memlen); if (ret->values == NULL) goto alloc_err; if (str != NULL) { memcpy(ret->values, str, (size_t)count); ret->values[count] = 0; } } else { /* use what what you were given */ ret->values = NULL; } return ret; alloc_err: nc_serror("NC_new_string"); free(ret); return NULL; } /* * Free string and its values */ int NC_free_string(NC_string *cdfstr) { if (cdfstr != NULL) { free(cdfstr->values); free(cdfstr); } return SUCCEED; } NC_string * NC_re_string(NC_string *old, unsigned count, const char *str) { if (old->count < count) /* punt */ { NCadvise(NC_ENOTINDEFINE, "Must be in define mode to increase name length %d", old->count); return (NULL); } if (str == NULL) return NULL; (void)memcpy(old->values, str, count); memset(old->values + count, 0, (int)old->count - (int)count + 1); /* make sure len is always == to the string length */ old->len = count; old->hash = compute_hash(count, str); return (old); } bool_t xdr_NC_string(XDR *xdrs, NC_string **spp) { unsigned count = 0; int status; switch (xdrs->x_op) { case XDR_FREE: NC_free_string((*spp)); return (TRUE); case XDR_DECODE: /* need the length to pass to new */ if (!h4_xdr_u_int(xdrs, &count)) { return (FALSE); } if (count == 0) { *spp = NULL; return (TRUE); } /* else */ (*spp) = NC_new_string((unsigned)count, (const char *)NULL); if ((*spp) == NULL) return (FALSE); (*spp)->values[count] = 0; /* then deal with the characters */ status = h4_xdr_opaque(xdrs, (*spp)->values, (*spp)->count); /* might be padded */ (*spp)->len = strlen((*spp)->values); return (status); case XDR_ENCODE: /* first deal with the length */ if (*spp == NULL) { count = 0; return (h4_xdr_u_int(xdrs, &count)); } /* else */ count = (*spp)->count; if (!h4_xdr_u_int(xdrs, &count)) { return (FALSE); } /* then deal with the characters */ return (h4_xdr_opaque(xdrs, (*spp)->values, (*spp)->count)); } return (FALSE); } /* * How much space will the xdr'd string take. * */ int NC_xlen_string(NC_string *cdfstr) { int len = 4; int rem; if (cdfstr != NULL) { len += cdfstr->count; if ((rem = len % 4) != 0) len += 4 - rem; } return len; } hdf4-hdf4.3.1/mfhdf/libsrc/var.c000066400000000000000000000355511503061704500163360ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright 1993, University Corporation for Atmospheric Research * * See netcdf/COPYRIGHT file for copying and redistribution conditions. * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "nc_priv.h" NC_var * NC_new_var(const char *name, nc_type type, int ndims, const int *dims) { NC_var *ret; ret = calloc(1, sizeof(NC_var)); if (ret == NULL) goto alloc_err; ret->name = NC_new_string((unsigned)strlen(name), name); if (ret->name == NULL) goto alloc_err; ret->assoc = NC_new_iarray((unsigned)ndims, dims); if (ret->assoc == NULL) goto alloc_err; ret->shape = NULL; ret->dsizes = NULL; ret->attrs = NULL; ret->type = type; ret->len = 0; ret->szof = NC_typelen(type); ret->begin = 0; ret->vgid = 0; ret->data_ref = 0; ret->data_tag = DATA_TAG; /* Assume normal data unless set */ ret->data_offset = 0; /* Assume data starts at beginning */ ret->block_size = -1; /* start off with no block size set */ ret->numrecs = 0; /* Only used in unlimited dimension case */ ret->aid = FAIL; ret->ndg_ref = 0; ret->var_type = UNKNOWN; /* Unknown whether this var is an SDS or a coord var */ ret->HDFtype = hdf_map_type(type); ret->HDFsize = DFKNTsize(ret->HDFtype); ret->is_ragged = FALSE; ret->created = FALSE; /* This is set in SDcreate() if it's a new SDS */ ret->set_length = FALSE; /* This is set in SDwritedata() if the data needs its length set */ return (ret); alloc_err: nc_serror("NC_new_var"); return (NULL); } /* * Free var * * NOTE: Changed return value to return 'int' * If successful returns SUCCEED else FAIL -GV 9/19/97 */ intn NC_free_var(NC_var *var) { intn ret_value = SUCCEED; if (var != NULL) { if (NC_free_string(var->name) == FAIL) { ret_value = FAIL; goto done; } if (NC_free_iarray(var->assoc) == FAIL) { ret_value = FAIL; goto done; } free(var->shape); free(var->dsizes); if (NC_free_array(var->attrs) == FAIL) { ret_value = FAIL; goto done; } free(var); } done: return ret_value; } /* * 'compile' the shape and len of a variable * return -1 on error */ int NC_var_shape(NC_var *var, NC_array *dims) { unsigned long *shape, *dsizes; int ii; unsigned long *shp, *dsp, *op; int *ip; NC_dim **dp; size_t xszof; xszof = var->HDFsize; /* Fixed memory leaks reported in bug# 418. BMR - Apr 8, 01 */ /* * Allocate the shape array */ ii = var->assoc->count; if (ii == 0) { /* scalar var, len == szof */ var->len = xszof; goto out; } shape = malloc(ii * sizeof(unsigned long)); if (shape == NULL) { nc_serror("NC_var_shape"); return (-1); } /* * use the user supplied dimension indices * to determine the shape */ for (ip = var->assoc->values, op = shape; ii > 0; ii--) { if (*ip < 0 || *ip >= ((dims != NULL) ? dims->count : 1)) { NCadvise(NC_EBADDIM, "Bad dimension id %d", *ip); free(shape); return (-1); } dp = (NC_dim **)dims->values + *ip; *op = (*dp)->size; if (*op == NC_UNLIMITED && ii != var->assoc->count) { NCadvise(NC_EUNLIMPOS, "NC_UNLIMITED size applied to index other than 0 %d", var->assoc->count - ii); free(shape); return (-1); } op++; ip++; } /* Free memory if this var already has shape previously allocated */ free(var->shape); var->shape = shape; /* * Allocate the dsizes array */ ii = var->assoc->count; dsizes = malloc(ii * sizeof(unsigned long)); if (dsizes == NULL) { free(shape); var->shape = NULL; nc_serror("NC_var_shape"); return (-1); } /* Free memory if this var already has dsizes previously allocated */ free(var->dsizes); var->dsizes = dsizes; /* * Compute var->len and the dsizes */ shp = shape + var->assoc->count - 1; /* count is > 0 here */ dsp = dsizes + var->assoc->count - 1; var->len = (*shp) ? (*shp) : 1; /* boundary condition for rec */ var->len = var->len * xszof; if (dsp != NULL) *dsp = xszof; for (shp--, dsp--; shp >= shape; shp--, dsp--) { *dsp = var->len; if (shp != shape || *shp) /* include last mult for non-rec vars */ var->len *= *shp; } out: /* don't round-up for HDF-encoded files */ if (var->cdf->file_type != HDF_FILE) switch (var->type) { case NC_BYTE: case NC_CHAR: case NC_SHORT: if (var->len % 4 != 0) { var->len += 4 - var->len % 4; /* round up */ /* *dsp += 4 - *dsp%4 ; */ } default: break; } return (var->assoc->count); } int ncvardef(int cdfid, const char *name, nc_type type, int ndims, const int dims[]) { NC *handle; NC_var *var[1]; NC_var **dp; int ii; int len; cdf_routine_name = "ncvardef"; if (!NC_indefine(cdfid, TRUE)) return (-1); handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!NCcktype(type)) return (-1); if (ndims < 0) /* 0 => scalar */ { NCadvise(NC_EINVAL, "Number of dimensions %d < 0", ndims); return (-1); } if (ndims > 0) { if (handle->dims == NULL || ndims > handle->dims->count) { NCadvise(NC_EINVAL, "Invalid number of dimensions %d > %d", ndims, (handle->dims != NULL) ? handle->dims->count : 0); return (-1); } } if (handle->vars == NULL) /* first time */ { var[0] = NC_new_var(name, type, ndims, dims); if (var[0] == NULL) return (-1); handle->vars = NC_new_array(NC_VARIABLE, (unsigned)1, (Void *)var); if (handle->vars == NULL) return (-1); } else if (handle->vars->count >= H4_MAX_NC_VARS) { NCadvise(NC_EMAXVARS, "maximum number of variables %d exceeded", handle->vars->count); return (-1); } else { /* check for name in use */ len = strlen(name); dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, len) == 0) { NCadvise(NC_ENAMEINUSE, "variable \"%s\" in use with index %d", (*dp)->name->values, ii); return (-1); } } var[0] = NC_new_var(name, type, ndims, dims); if (var[0] == NULL) return (-1); if (NC_incr_array(handle->vars, (Void *)var) == NULL) return (-1); } (*var)->cdf = handle; /* for NC_var_shape */ if (NC_var_shape(*var, handle->dims) != -1) { (*var)->ndg_ref = Hnewref(handle->hdf_file); return (handle->vars->count - 1); } /* unwind */ handle->vars->count--; NC_free_var(var[0]); return (-1); } /* * Recompute the shapes of all variables * Sets handle->begin_rec to start of first record variable * returns -1 on error */ int NC_computeshapes(NC *handle) { NC_var **vbase, **vpp; NC_var *first = NULL; handle->begin_rec = 0; handle->recsize = 0; if (handle->vars == NULL) return (0); vbase = (NC_var **)handle->vars->values; for (vpp = vbase; vpp < &vbase[handle->vars->count]; vpp++) { (*vpp)->cdf = handle; if (NC_var_shape(*vpp, handle->dims) == -1) return (-1); if (IS_RECVAR(*vpp)) { if (first == NULL) first = *vpp; handle->recsize += (*vpp)->len; } } if (first != NULL) { handle->begin_rec = first->begin; /* * for special case of exactly one record variable, pack values */ if (handle->recsize == first->len) handle->recsize = *first->dsizes; } return (handle->vars->count); } int ncvarid(int cdfid, const char *name) { NC *handle; NC_var **dp; int ii; int len; cdf_routine_name = "ncvarid"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (handle->vars == NULL) return (-1); len = strlen(name); dp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, dp++) { if (len == (*dp)->name->len && strncmp(name, (*dp)->name->values, len) == 0) { return (ii); } } NCadvise(NC_ENOTVAR, "variable \"%s\" not found", name); return (-1); } /* * Given valid handle and varid, return var * else NULL on error */ NC_var * NC_hlookupvar(NC *handle, int varid) { NC_array **ap; if (varid == NC_GLOBAL) /* Global is error in this context */ { return (NULL); } else if (handle->vars != NULL && varid >= 0 && varid < handle->vars->count) { ap = (NC_array **)handle->vars->values; ap += varid; } else { NCadvise(NC_ENOTVAR, "%d is not a valid variable id", varid); return (NULL); } return ((NC_var *)*ap); } /* * Given cdfid and varid, return var * else NULL on error */ static NC_var * NC_lookupvar(int cdfid, int varid) { NC *handle; handle = NC_check_id(cdfid); if (handle == NULL) return (NULL); return (NC_hlookupvar(handle, varid)); } int ncvarinq(int cdfid, int varid, char *name, nc_type *typep, int *ndimsp, int dims[], int *nattrsp) { NC_var *vp; int ii; cdf_routine_name = "ncvarinq"; vp = NC_lookupvar(cdfid, varid); if (vp == NULL) return (-1); if (name != NULL) { (void)memcpy(name, vp->name->values, vp->name->len); name[vp->name->len] = 0; } if (typep != NULL) *typep = vp->type; if (ndimsp != NULL) { *ndimsp = vp->assoc->count; } if (dims != NULL) { for (ii = 0; ii < vp->assoc->count; ii++) { dims[ii] = vp->assoc->values[ii]; } } if (nattrsp != NULL) { if (vp->attrs != NULL) { *nattrsp = vp->attrs->count; } else { *nattrsp = 0; } } return (varid); } int ncvarrename(int cdfid, int varid, const char *newname) { NC *handle; NC_var **vpp; int ii; int len; NC_string *old, *new; cdf_routine_name = "ncvarrename"; handle = NC_check_id(cdfid); if (handle == NULL) return (-1); if (!(handle->flags & NC_RDWR)) return (-1); /* check for name in use */ len = strlen(newname); vpp = (NC_var **)handle->vars->values; for (ii = 0; ii < handle->vars->count; ii++, vpp++) { if (len == (*vpp)->name->len && strncmp(newname, (*vpp)->name->values, len) == 0) { NCadvise(NC_ENAMEINUSE, "variable name \"%s\" in use with index %d", (*vpp)->name->values, ii); return (-1); } } if (varid == NC_GLOBAL) /* Global is error in this context */ { NCadvise(NC_EGLOBAL, "action prohibited on NC_GLOBAL varid"); return (-1); } else if (handle->vars != NULL && varid >= 0 && varid < handle->vars->count) { vpp = (NC_var **)handle->vars->values; vpp += varid; } else { NCadvise(NC_ENOTVAR, "%d is not a valid variable id", varid); return (-1); } old = (*vpp)->name; if (NC_indefine(cdfid, TRUE)) { new = NC_new_string((unsigned)strlen(newname), newname); if (new == NULL) return (-1); (*vpp)->name = new; NC_free_string(old); return (varid); } /* else */ new = NC_re_string(old, (unsigned)strlen(newname), newname); if (new == NULL) return (-1); if (handle->flags & NC_HSYNC) { handle->xdrs->x_op = XDR_ENCODE; if (!xdr_cdf(handle->xdrs, &handle)) return (-1); handle->flags &= ~(NC_NDIRTY | NC_HDIRTY); } else handle->flags |= NC_HDIRTY; return (varid); } bool_t xdr_NC_var(XDR *xdrs, NC_var **vpp) { unsigned begin = 0; int temp_type = 0; unsigned temp_len = 0; if (xdrs->x_op == XDR_FREE) { NC_free_var((*vpp)); return (TRUE); } if (xdrs->x_op == XDR_DECODE) { *vpp = calloc(1, sizeof(NC_var)); if (*vpp == NULL) { nc_serror("xdr_NC_var"); return (FALSE); } } if (!xdr_NC_string(xdrs, &((*vpp)->name))) return (FALSE); if (!xdr_NC_iarray(xdrs, &((*vpp)->assoc))) return (FALSE); if (!xdr_NC_array(xdrs, &((*vpp)->attrs))) return (FALSE); if (!h4_xdr_int(xdrs, &temp_type)) { return (FALSE); } (*vpp)->type = (nc_type)temp_type; if (!h4_xdr_u_int(xdrs, &temp_len)) { return (FALSE); } (*vpp)->len = (unsigned long)temp_len; if (xdrs->x_op == XDR_DECODE) (*vpp)->szof = NC_typelen((*vpp)->type); if (xdrs->x_op == XDR_ENCODE) begin = (*vpp)->begin; if (!h4_xdr_u_int(xdrs, &begin)) return (FALSE); if (xdrs->x_op == XDR_DECODE) (*vpp)->begin = begin; if (xdrs->x_op == XDR_DECODE) { (*vpp)->HDFtype = hdf_map_type((*vpp)->type); (*vpp)->HDFsize = DFKNTsize((*vpp)->HDFtype); (*vpp)->aid = FAIL; (*vpp)->is_ragged = FALSE; } return (TRUE); } /* * How much space will the xdr'd var take. * */ int NC_xlen_var(NC_var **vpp) { int len; if (*vpp == NULL) return (4); len = NC_xlen_string((*vpp)->name); len += NC_xlen_iarray((*vpp)->assoc); len += NC_xlen_array((*vpp)->attrs); len += 12; return (len); } hdf4-hdf4.3.1/mfhdf/ncdump/000077500000000000000000000000001503061704500154015ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/ncdump/CMakeLists.txt000066400000000000000000000032451503061704500201450ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_NCDUMP C) set (ncdump_SRCS ${HDF4_MFHDF_NCDUMP_SOURCE_DIR}/dumplib.c ${HDF4_MFHDF_NCDUMP_SOURCE_DIR}/ncdump.c ${HDF4_MFHDF_NCDUMP_SOURCE_DIR}/vardata.c ${HDF4_MFHDF_UTIL_DIR}/h4getopt.c ) add_executable (ncdump ${ncdump_SRCS}) target_include_directories (ncdump PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_MFHDF_UTIL_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (ncdump STATIC) target_link_libraries (ncdump PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (ncdump SHARED) target_link_libraries (ncdump PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (ncdump PROPERTIES COMPILE_DEFINITIONS "HDF") set (H4_DEP_EXECUTABLES ncdump) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/ncdump/CMakeTests.cmake000066400000000000000000000054221503061704500204110ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME NCDUMP-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove test0.nc test1.nc test1.cdl test2.cdl ) if (NOT "${last_test}" STREQUAL "") set_tests_properties (NCDUMP-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) else () set_tests_properties (NCDUMP-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) endif () set (last_test "NCDUMP-clearall-objects") HDFTEST_COPY_FILE("${HDF4_MFHDF_NCDUMP_SOURCE_DIR}/test0.cdl" "${PROJECT_BINARY_DIR}/test0.cdl" "ncdump_files") add_custom_target(ncdump_files ALL COMMENT "Copying files needed by ncdump tests" DEPENDS ${ncdump_files_list}) if (NCGEN_UTILITY) add_test ( NAME NCDUMP-test0.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -o test0.nc -n test0.cdl ) set_tests_properties (NCDUMP-test0.nc PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) set (last_test "NCDUMP-test0.nc") add_test ( NAME NCDUMP-test1.cdl COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=test0.nc" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test1.cdl" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCDUMP-test1.cdl PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) set (last_test "NCDUMP-test1.cdl") add_test ( NAME NCDUMP-test1.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -o test1.nc -n test1.cdl ) set_tests_properties (NCDUMP-test1.nc PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) set (last_test "NCDUMP-test1.nc") add_test ( NAME NCDUMP-test2.cdl COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-n;test0;test1.nc" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test2.cdl" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=test1.cdl" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCDUMP-test2.cdl PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) set (last_test "NCDUMP-test2.cdl") endif () hdf4-hdf4.3.1/mfhdf/ncdump/Makefile.am000066400000000000000000000030161503061704500174350ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. ncdump_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(ncdump_INCLUDES) $(DEFINES) ## Add ncdump specific linker flags here ncdump_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Programs to build ## ############################################################################# TEST_SCRIPT = testncdump.sh check_SCRIPTS = testncdump.sh bin_PROGRAMS = ncdump man1_MANS = ncdump.1 ## Information for building the "ncdump" program ncdump_SOURCES = dumplib.c ncdump.c vardata.c $(top_srcdir)/mfhdf/util/h4getopt.c ncdump_LDADD = $(LIBMFHDF) $(LIBHDF) ncdump_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += test0.nc nctest0.cdl DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/ncdump/Makefile.in000066400000000000000000001377551503061704500174700ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = ncdump$(EXEEXT) TESTS = $(TEST_SCRIPT) subdir = mfhdf/ncdump ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = testncdump.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_ncdump_OBJECTS = dumplib.$(OBJEXT) ncdump.$(OBJEXT) \ vardata.$(OBJEXT) h4getopt.$(OBJEXT) ncdump_OBJECTS = $(am_ncdump_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = ncdump_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ncdump_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dumplib.Po ./$(DEPDIR)/h4getopt.Po \ ./$(DEPDIR)/ncdump.Po ./$(DEPDIR)/vardata.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(ncdump_SOURCES) DIST_SOURCES = $(ncdump_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; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/testncdump.sh.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog test0.nc nctest0.cdl ncdump_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(ncdump_INCLUDES) $(DEFINES) ncdump_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ############################################################################# TEST_SCRIPT = testncdump.sh check_SCRIPTS = testncdump.sh man1_MANS = ncdump.1 ncdump_SOURCES = dumplib.c ncdump.c vardata.c $(top_srcdir)/mfhdf/util/h4getopt.c ncdump_LDADD = $(LIBMFHDF) $(LIBHDF) ncdump_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/ncdump/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/ncdump/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testncdump.sh: $(top_builddir)/config.status $(srcdir)/testncdump.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 ncdump$(EXEEXT): $(ncdump_OBJECTS) $(ncdump_DEPENDENCIES) $(EXTRA_ncdump_DEPENDENCIES) @rm -f ncdump$(EXEEXT) $(AM_V_CCLD)$(ncdump_LINK) $(ncdump_OBJECTS) $(ncdump_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dumplib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h4getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncdump.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vardata.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< h4getopt.o: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.o -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c h4getopt.obj: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.obj -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(MANS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dumplib.Po -rm -f ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/ncdump.Po -rm -f ./$(DEPDIR)/vardata.Po -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-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 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 ./$(DEPDIR)/dumplib.Po -rm -f ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/ncdump.Po -rm -f ./$(DEPDIR)/vardata.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS 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-man1 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/ncdump/dumplib.c000066400000000000000000000077721503061704500172160ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/README file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "dumplib.h" /* * Print error message to stderr, don't exit */ void error(const char *fmt, ...) { va_list args; fprintf(stderr, "*** %s: ", progname); va_start(args, fmt); (void)vfprintf(stderr, fmt, args); va_end(args); fprintf(stderr, "\n"); (void)fflush(stderr); /* to ensure log files are current */ } #define LINEPIND " " /* indent of continued lines */ static int linep; static int max_line_len; void set_indent(int in) { linep = in; } void set_max_len(int len) { max_line_len = len - 2; } void lput(const char *cp) { int nn = strlen(cp); if (nn + linep > max_line_len && nn > 2) { (void)fputs("\n", stdout); (void)fputs(LINEPIND, stdout); linep = strlen(LINEPIND); } (void)fputs(cp, stdout); linep += nn; } static char *formats[] = { "%d", /* bytes, shorts */ "%s", /* char arrays as strings */ "%ld", /* longs */ "%.7g ", /* floats */ "%.15g" /* doubles */ }; /* In case different formats specified with -d option, set them here. */ void set_formats(char *flt, char *dbl) { strcpy(formats[3], flt); strcpy(formats[4], dbl); } /* ncid - netcdf id */ /* varid - variable id */ static char * has_c_format_att(int ncid, int varid) { nc_type cfmt_type; int cfmt_len; int savopts; #define C_FMT_NAME "C_format" /* name of C format attribute */ #define MAX_CFMT_LEN 100 /* max length of C format attribute */ static char cfmt[MAX_CFMT_LEN]; /* * turn off error handling, we expect ncattinq to fail if there is no * C_format attribute */ savopts = ncopts; ncopts = 0; if (ncattinq(ncid, varid, "C_format", &cfmt_type, &cfmt_len) != -1) { ncopts = savopts; /* restore error handling */ if (cfmt_type == NC_CHAR && cfmt_len > 0 && cfmt_len < MAX_CFMT_LEN) { if (ncattget(ncid, varid, "C_format", (void *)cfmt) != -1) return &cfmt[0]; } } ncopts = savopts; /* restore error handling */ return 0; } /* * Determine print format to use for each value for this variable. Use value * of attribute C_format if it exists, otherwise a sensible default. */ /* ncid - netcdf id */ /* varid - variable id */ /* type - netCDF data type */ const char * get_fmt(int ncid, int varid, nc_type type) { char *c_format_att = has_c_format_att(ncid, varid); /* If C_format attribute exists, return it */ if (c_format_att) return c_format_att; /* Otherwise return sensible default. */ switch (type) { case NC_BYTE: return formats[0]; case NC_CHAR: return formats[1]; case NC_SHORT: return formats[0]; case NC_LONG: return formats[2]; case NC_FLOAT: return formats[3]; case NC_DOUBLE: return formats[4]; default: error("pr_vals: bad type"); return NULL; } } static vnode * newvnode() { vnode *newvp = (vnode *)malloc(sizeof(vnode)); if (!newvp) { error("out of memory!"); exit(EXIT_FAILURE); } return newvp; } vnode * newvlist() { vnode *vp = newvnode(); vp->next = 0; vp->id = -1; /* bad id */ return vp; } void varadd(vnode *vlist, int varid) { vnode *newvp = newvnode(); newvp->next = vlist->next; newvp->id = varid; vlist->next = newvp; } int varmember(vnode *vlist, int varid) { vnode *vp = vlist->next; for (; vp; vp = vp->next) if (vp->id == varid) return 1; return 0; } hdf4-hdf4.3.1/mfhdf/ncdump/dumplib.h000066400000000000000000000026601503061704500172120ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCDUMP_DUMPLIB_H #define NCDUMP_DUMPLIB_H extern char *progname; /* for error messages */ #ifdef __cplusplus extern "C" { #endif /* Print error message to stderr, don't exit */ extern void error(const char *fmt, ...); /* set position in line before lput() calls */ extern void set_indent(int indent); /* set maximum line length */ extern void set_max_len(int len); /* splits lines to keep them short */ extern void lput(const char *string); /* In case different formats specified with -d option, set them here. */ extern void set_formats(char *flt_fmt, char *dbl_fmt); /* Determine print format to use for each value for this variable. */ const char *get_fmt(int ncid, int varid, nc_type type); /* structure for list of variables specified with -v option */ struct vnode { struct vnode *next; int id; }; typedef struct vnode vnode; /* Get new variable list */ extern vnode *newvlist(void); /* Add a variable id to variable list */ extern void varadd(vnode *vlist, int varid); /* Test if a variable id is in variable list */ extern int varmember(vnode *vlist, int varid); #ifdef __cplusplus } #endif #endif /* NCDUMP_DUMPLIB_H */ hdf4-hdf4.3.1/mfhdf/ncdump/ncdump.1000066400000000000000000000173041503061704500167560ustar00rootroot00000000000000.TH NCDUMP 1 "$Date$" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA UTILITIES" .SH NAME ncdump \- Convert netCDF files to ASCII form (CDL) .SH SYNOPSIS .ft B .HP ncdump .nh \%[-c] \%[-h] \%[-v \fIvar1,...\fP] \%[-b \fIlang\fP] \%[-f \fIlang\fP] \%[-l \fIlen\fP] \%[-n \fIname\fP] \%[-d \fIf_digits[,d_digits]\fP] \%\fIfile\fP .hy .ft .SH DESCRIPTION \fBncdump\fP generates an ASCII representation of a specified netCDF file on standard output. The ASCII representation is in a form called CDL (``network Common Data form Language'') that can be viewed, edited, or serve as input to \fBncgen\fP. \fBncgen\fP is a companion program that can generate a binary netCDF file from a CDL file. Hence \fBncgen\fP and \fBncdump\fP can be used as inverses to transform the data representation between binary and ASCII representations. See \fBncgen\fP for a description of CDL and netCDF representations. .LP \fBncdump\fP defines a default format used for each type of netCDF data, but this can be changed if a `C_format' attribute is defined for a netCDF variable. In this case, \fBncdump\fP will use the `C_format' attribute to format each value. For example, if floating-point data for the netCDF variable `Z' is known to be accurate to only three significant digits, it would be appropriate to use the variable attribute .RS .HP Z:C_format = "%.3g" .RE .LP \fBncdump\fP may also be used as a simple browser for netCDF data files, to display the dimension names and sizes; variable names, types, and shapes; attribute names and values; and optionally, the values of data for all variables or selected variables in a netCDF file. .SH OPTIONS .IP "\fB-c\fP" Show the values of \fIcoordinate\fP variables (variables that are also dimensions) as well as the declarations of all dimensions, variables, and attribute values. Data values of non-coordinate variables are not included in the output. This is the most suitable option to use for a brief look at the structure and contents of a netCDF file. .IP "\fB-h\fP" Show only the \fIheader\fP information in the output, that is the declarations of dimensions, variables, and attributes but no data values for any variables. The output is identical to using the \fB-c\fP option except that the values of coordinate variables are not included. (At most one of \fB-c\fP or \fB-h\fP options may be present.) .IP "\fB-v\fP \fIvar1,...,varn\fP" The output will include data values for the specified variables, in addition to the declarations of all dimensions, variables, and attributes. One or more variables must be specified by name in the comma-delimited list following this option. The list must be a single argument to the command, hence cannot contain blanks or other white space characters. The named variables must be valid netCDF variables in the input-file. The default, without this option and in the absence of the \fB-c\fP or \fB-h\fP options, is to include data values for \fIall\fP variables in the output. .IP "\fB-b\fP \fIlang\fP" A brief annotation in the form of a CDL comment (text beginning with the characters ``//'') will be included in the data section of the output for each `row' of data, to help identify data values for multidimensional variables. If \fIlang\fP begins with `C' or `c', then C language conventions will be used (zero-based indices, last dimension varying fastest). If \fIlang\fP begins with `F' or `f', then Fortran language conventions will be used (one-based indices, first dimension varying fastest). In either case, the data will be presented in the same order; only the annotations will differ. This option is useful for browsing through large volumes of multidimensional data. .IP "\fB-f\fP \fIlang\fP" Full annotations in the form of trailing CDL comments (text beginning with the characters ``//'') for every data value (except individual characters in character arrays) will be included in the data section. If \fIlang\fP begins with `C' or `c', then C language conventions will be used (zero-based indices, last dimension varying fastest). If \fIlang\fP begins with `F' or `f', then Fortran language conventions will be used (one-based indices, first dimension varying fastest). In either case, the data will be presented in the same order; only the annotations will differ. This option may be useful for piping data into other filters, since each data value appears on a separate line, fully identified. .IP "\fB-l\fP \fIlen\fP" Changes the default maximum line length (80) used in formatting lists of non-character data values. .IP "\fB-n\fP \fIname\fP" CDL requires a name for a netCDF data set, for use by \fBncgen -b\fP in generating a default netCDF file name. By default, \fIncdump\fP constructs this name from the last component of the pathname of the input netCDF file by stripping off any extension it has. Use the \fB-n\fP option to specify a different name. Although the output file name used by \fBncgen -b\fP can be specified, it may be wise to have \fIncdump\fP change the default name to avoid inadvertently overwriting a valuable netCDF file when using \fBncdump\fP, editing the resulting CDL file, and using \fBncgen -b\fP to generate a new netCDF file from the edited CDL file. .IP "\fB-d\fP \fIfloat_digits[,double_digits]\fP" Specifies default number of significant digits to use in displaying floating-point or double precision data values for variables that don't have a `C_format' attribute. Floating-point data will be displayed with \fIfloat_digits\fP significant digits. If \fIdouble_digits\fP is also specified, double-precision values will be displayed with that many significant digits. If a variable has a `C_format' attribute, that overrides any specified floating-point default. In the absence of any \fB-d\fP specifications, floating-point and double-precision data are displayed with 7 and 15 significant digits respectively. CDL files can be made smaller if less precision is required. If both floating-point and double-presision precisions are specified, the two values must appear separated by a comma (no blanks) as a single argument to the command. If you really want every last bit of precision from the netCDF file represented in the CDL file for all possible floating-point values, you will have to specify this with \fB-d 9,17\fP (according to Theorem 15 of the paper listed under REFERENCES). .SH EXAMPLES .LP Look at the structure of the data in the netCDF file `\fBfoo.nc\fP': .RS .HP ncdump -c foo.nc .RE .LP Produce an annotated CDL version of the structure and data in the netCDF file `\fBfoo.nc\fP', using C-style indexing for the annotations: .RS .HP ncdump -b c foo.nc > foo.cdl .RE .LP Output data for only the variables `uwind' and `vwind' from the netCDF file `\fBfoo.nc\fP', and show the floating-point data with only three significant digits of precision: .RS .HP ncdump -v uwind,vwind -d 3 foo.nc .RE .LP Produce a fully-annotated (one data value per line) listing of the data for the variable `omega', using Fortran conventions for indices, and changing the netCDF dataset name in the resulting CDL file to `omega': .RS .HP ncdump -v omega -f fortran -n omega foo.nc > Z.cdl .RE .SH REFERENCES \fIWhat Every Computer Scientist should Know About Floating-Point Arithmetic\fP, D. Goldberg, \fBACM Computing Surveys, Vol. 23, No. 1\fP, March 1991, pp. 5-48. .SH "SEE ALSO" .LP .BR ncgen (1), .BR netcdf (3) .SH BUGS .LP Character arrays that contain a null-byte are treated like C strings, so no characters after the null byte appear in the output. Multidimensional character string arrays are not handled well, since the CDL syntax for breaking a long character string into several shorter lines is weak. There should be a way to specify that the data should be displayed in `record' order, that is with the all the values for `record' variables together that have the same value of the record dimension. hdf4-hdf4.3.1/mfhdf/ncdump/ncdump.c000066400000000000000000000536611503061704500170460ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/README file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include #include "nc_priv.h" #include "ncdump.h" #include "h4getopt.h" #include "dumplib.h" #include "vardata.h" static const char *type_name(nc_type type); char *progname; struct ncdim *dims = NULL; /* dimensions */ long *vdims = NULL; /* dimension sizes for a single variable */ static void usage() { printf("ncdump [-V|-c|-h|-u] [-v ...] [[-b|-f] [c|f]] [-l len] [-n name] [-d n[,n]] file\n"); printf("\t [-V] Display version of the HDF4 library and exit\n"); printf("\t [-c] Coordinate variable data and header information\n"); printf("\t [-h] Header information only, no data\n"); printf("\t [-u] Replace nonalpha-numerics in names with underscores\n"); printf("\t [-v var1[,...]] Data for variable(s) ,... only\n"); printf("\t [-b [c|f]] Brief annotations for C or Fortran indices in data\n"); printf("\t [-f [c|f]] Full annotations for C or Fortran indices in data\n"); printf("\t [-l len] Line length maximum in data section (default 80)\n"); printf("\t [-n name] Name for netCDF (default derived from file name)\n"); printf("\t [-d n[,n]] Approximate floating-point values with less precision\n"); printf("\t file File name of input netCDF file\n"); exit(EXIT_FAILURE); } /* * convert pathname of netcdf file into name for cdl unit, by taking * last component of path and stripping off any extension. */ static char * name_path(char *path) { char *cp, *new; #ifdef MSDOS #define FILE_DELIMITER '\\' #endif #ifndef FILE_DELIMITER /* default to unix */ #define FILE_DELIMITER '/' #endif cp = strrchr(path, FILE_DELIMITER); if (cp == 0) /* no delimiter */ cp = path; else /* skip delimeter */ cp++; new = (char *)malloc((unsigned)(strlen(cp) + 1)); if (new == 0) { error("out of memory!"); exit(EXIT_FAILURE); } (void)strcpy(new, cp); /* copy last component of path */ if ((cp = strrchr(new, '.')) != NULL) *cp = '\0'; /* strip off any extension */ return new; } static const char * type_name(nc_type type) { switch (type) { case NC_BYTE: return "byte"; case NC_CHAR: return "char"; case NC_SHORT: return "short"; case NC_LONG: return "long"; case NC_FLOAT: return "float"; case NC_DOUBLE: return "double"; default: error("type_name: bad type %d", type); return "bogus"; } } /* * Remove trailing zeros (after decimal point) but not trailing decimal * point from ss, a string representation of a floating-point number that * might include an exponent part. */ /* ss - returned string representing dd */ static void tztrim(char *ss) { char *cp, *ep; cp = ss; if (*cp == '-') cp++; while (isdigit((int)*cp) || *cp == '.') cp++; if (*--cp == '.') return; ep = cp + 1; while (*cp == '0') cp--; cp++; if (cp == ep) return; while (*ep) *cp++ = *ep++; *cp = '\0'; return; } /* * Print list of attribute values. Attribute values must be printed with * explicit type tags, because their types are not declared. */ static void pr_att_vals(nc_type type, int len, void *vals) { int iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; char *sp; unsigned char uc; char gps[30]; /* for ascii of a float or double precision */ const char *f_fmt = "%#.8g"; const char *d_fmt = "%#.16g"; switch (type) { case NC_BYTE: gp.cp = (char *)vals; for (iel = 0; iel < len; iel++) if (isprint(uc = (unsigned char)(*gp.cp++ & 0377))) printf("'%c'%s", uc, iel < len - 1 ? ", " : ""); else printf("'\\%o'%s", uc, iel < len - 1 ? ", " : ""); break; case NC_CHAR: gp.cp = (char *)vals; printf("\""); /* adjust len so trailing nulls don't get printed */ sp = gp.cp + len - 1; while (*sp-- == '\0' && len > 0) len--; for (iel = 0; iel < len; iel++) switch (uc = (unsigned char)(*gp.cp++ & 0377)) { case '\b': printf("\\b"); break; case '\f': printf("\\f"); break; case '\n': /* generate linebreaks after new-lines */ printf("\\n\",\n \""); break; case '\r': printf("\\r"); break; case '\t': printf("\\t"); break; case '\v': printf("\\v"); break; case '\\': printf("\\\\"); break; case '\'': printf("\\'"); break; case '\"': printf("\\\""); break; default: printf("%c", uc); break; } printf("\""); break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len; iel++) printf("%ds%s", *gp.sp++, iel < len - 1 ? ", " : ""); break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len; iel++) printf("%d%s", (int)*gp.lp++, iel < len - 1 ? ", " : ""); break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len; iel++) { size_t ll; (void)sprintf(gps, f_fmt, (double)*gp.fp++); /* append a trailing "f" for floating-point attributes */ ll = strlen(gps); gps[ll + 1] = '\0'; gps[ll] = 'f'; tztrim(gps); /* trim trailing 0's after '.' */ printf("%s%s", gps, iel < len - 1 ? ", " : ""); } break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len; iel++) { (void)sprintf(gps, d_fmt, *gp.dp++); tztrim(gps); /* trim trailing 0's after '.' */ printf("%s%s", gps, iel < len - 1 ? ", " : ""); } break; default: error("pr_att_vals: bad type"); } } /* * sanitize_string * * If the string contains characters other than alpha-numerics, * an underscore, or a hyphen, convert it to an underscore. */ char * sanitize_string(char *str, bool sanitize) { char *new_str = NULL; if (!str) return NULL; new_str = strdup(str); if (NULL == new_str) { error("Out of memory!"); return NULL; } if (sanitize) { char *ptr = new_str; /* Convert all non-alpha, non-numeric, non-hyphen, non-underscore * characters to underscores */ for (; *ptr; ptr++) if (!isalnum(*ptr) && *ptr != '_' && *ptr != '-') *ptr = '_'; } return new_str; } static void do_ncdump(char *path, struct fspec *specp) { int ndims; /* number of dimensions */ int nvars; /* number of variables */ int ngatts; /* number of global attributes */ int xdimid; /* id of unlimited dimension */ int dimid; /* dimension id */ int varid; /* variable id */ struct ncvar var; /* variable */ struct ncatt att; /* attribute */ int id; /* dimension number per variable */ int ia; /* attribute number */ int iv; /* variable number */ int is_coord; /* true if variable is a coordinate variable */ int isempty = 0; /* true if an old hdf dim has no scale values */ int ncid = ncopen(path, NC_NOWRITE); /* netCDF id */ vnode *vlist = newvlist(); /* list for vars specified with -v option */ /* don't crash on error */ ncopts = 0; if (ncid == -1) { error("ncopen failed on %s", path); return; } /* * If any vars were specified with -v option, get list of associated * variable ids */ for (iv = 0; iv < specp->nlvars; iv++) { varid = ncvarid(ncid, specp->lvars[iv]); varadd(vlist, varid); } /* if name not specified, derive it from path */ if (specp->name == NULL) specp->name = name_path(path); printf("netcdf %s {\n", specp->name); /* * get number of dimensions, number of variables, number of global * atts, and dimension id of unlimited dimension, if any */ (void)ncinquire(ncid, &ndims, &nvars, &ngatts, &xdimid); /* get dimension info */ if (ndims > 0) { printf("dimensions:\n"); for (dimid = 0; dimid < ndims; dimid++) { char *fixed_str = NULL; if (ncdiminq(ncid, dimid, dims[dimid].name, &dims[dimid].size) < 0) fprintf(stderr, "Error calling ncdiminq on dimid = %d\n", dimid); fixed_str = sanitize_string(dims[dimid].name, specp->fix_str); if (fixed_str == NULL) { (void)ncclose(ncid); return; } if (dimid == xdimid) printf("\t%s = %s ; // (%d currently)\n", fixed_str, "UNLIMITED", (int)dims[dimid].size); else printf("\t%s = %ld ;\n", fixed_str, dims[dimid].size); free(fixed_str); } } printf("\nvariables:\n"); /* get variable info, with variable attributes */ for (varid = 0; varid < nvars; varid++) { char *fixed_var; (void)ncvarinq(ncid, varid, var.name, &var.type, &var.ndims, var.dims, &var.natts); fixed_var = sanitize_string(var.name, specp->fix_str); if (fixed_var == NULL) { (void)ncclose(ncid); return; } printf("\t%s %s", type_name(var.type), fixed_var); if (var.ndims > 0) printf("("); for (id = 0; id < var.ndims; id++) { char *fixed_dim = sanitize_string(dims[var.dims[id]].name, specp->fix_str); if (fixed_dim == NULL) { (void)ncclose(ncid); free(fixed_var); return; } printf("%s%s", fixed_dim, id < var.ndims - 1 ? ", " : ")"); free(fixed_dim); } printf(" ;\n"); /* get variable attributes */ for (ia = 0; ia < var.natts; ia++) { char *fixed_att; (void)ncattname(ncid, varid, ia, att.name); fixed_att = sanitize_string(att.name, specp->fix_str); if (!fixed_att) { (void)ncclose(ncid); free(fixed_var); return; } printf("\t\t%s:%s = ", fixed_var, fixed_att); (void)ncattinq(ncid, varid, att.name, &att.type, &att.len); att.val = (void *)malloc((size_t)(att.len * nctypelen(att.type))); if (!att.val) { error("Out of memory!"); (void)ncclose(ncid); free(fixed_att); free(fixed_var); return; } (void)ncattget(ncid, varid, att.name, att.val); pr_att_vals(att.type, att.len, att.val); printf(" ;\n"); free(att.val); free(fixed_att); } free(fixed_var); } /* get global attributes */ if (ngatts > 0) printf("\n// global attributes:\n"); for (ia = 0; ia < ngatts; ia++) { char *fixed_att; (void)ncattname(ncid, NC_GLOBAL, ia, att.name); fixed_att = sanitize_string(att.name, specp->fix_str); if (!fixed_att) { (void)ncclose(ncid); return; } printf("\t\t:%s = ", fixed_att); (void)ncattinq(ncid, NC_GLOBAL, att.name, &att.type, &att.len); att.val = malloc((unsigned)(att.len * nctypelen(att.type))); if (!att.val) { error("Out of memory!"); (void)ncclose(ncid); free(fixed_att); return; } (void)ncattget(ncid, NC_GLOBAL, att.name, att.val); pr_att_vals(att.type, att.len, att.val); printf(" ;\n"); free(att.val); free(fixed_att); } if (!specp->header_only) { if (nvars > 0) printf("\ndata:\n"); /* output variable data */ for (varid = 0; varid < nvars; varid++) { /* if var list specified, test for membership */ if (specp->nlvars > 0 && !varmember(vlist, varid)) continue; (void)ncvarinq(ncid, varid, var.name, &var.type, &var.ndims, var.dims, &var.natts); if (specp->coord_vals) { /* Find out if this is a coordinate variable */ is_coord = 0; for (dimid = 0; dimid < ndims; dimid++) { if (strcmp(dims[dimid].name, var.name) == 0 && var.ndims == 1) { is_coord = 1; break; } } if (!is_coord) /* don't get data for non-coordinate vars */ continue; } /* * Only get data for variable if it is not a record variable, * or if it is a record variable and at least one record has * been written. */ /* skip the dimension vars which have dim strings only. */ { NC *handle; NC_var *vp; isempty = 0; handle = NC_check_id(ncid); if (handle->file_type == HDF_FILE) { vp = NC_hlookupvar(handle, varid); /* This is set up to take care of * cases where an array has been * defined but no data */ /* has yet been added. */ if ((vp->data_tag == DFTAG_SDS || vp->data_tag == DFTAG_SD) && (vp->data_ref == 0)) isempty = 1; } } if (isempty) continue; if (var.ndims == 0 || var.dims[0] != xdimid || dims[xdimid].size != 0) { int ret = 0; /* Collect variable's dim sizes */ for (id = 0; id < var.ndims; id++) vdims[id] = dims[var.dims[id]].size; /* if (vardata(&var, vdims, ncid, varid, specp) == -1) */ ret = vardata(&var, vdims, ncid, varid, specp); /* Keep the original failure detection until further improvement */ if (ret == -1) { error("can't output data for variable %s", var.name); (void)ncclose(ncid); return; } /* This failure indicates that vardata failed because ncvarget fails. (HDFFR-1468) -BMR, 2015/01/20) */ if (ret == ERR_READFAIL) { error("Reading failed for variable %s, possibly the data is corrupted.", var.name); (void)ncclose(ncid); return; } } } } free(vlist); printf("}\n"); (void)ncclose(ncid); } static void make_lvars(char *arg, struct fspec *fspecp) { char *cp = arg; int nvars = 1; char **cpp; /* compute number of variable names in comma-delimited list */ fspecp->nlvars = 1; while (*cp++) if (*cp == ',') nvars++; fspecp->lvars = (char **)malloc((size_t)nvars * sizeof(char *)); if (!fspecp->lvars) { error("out of memory"); exit(EXIT_FAILURE); } cpp = fspecp->lvars; /* copy variable names into list */ for (cp = strtok(arg, ","); cp != NULL; cp = strtok((char *)NULL, ",")) { *cpp = (char *)malloc(strlen(cp) + 1); if (!*cpp) { error("out of memory"); exit(EXIT_FAILURE); } strcpy(*cpp, cp); cpp++; } fspecp->nlvars = nvars; } /* * Extract the significant-digits specifiers from the -d argument on the * command-line and update the default data formats appropriately. */ static void set_sigdigs(char *arg) { char *ptr = arg; char *ptr2 = 0; long flt_digits = 7; /* default floating-point digits */ long dbl_digits = 15; /* default double-precision digits */ char flt_fmt[16]; char dbl_fmt[16]; if (arg != 0 && strlen(arg) > 0 && arg[0] != ',') flt_digits = strtol(arg, &ptr, 10); if (flt_digits < 1 || flt_digits > 10) { error("unreasonable value for float significant digits: %d", flt_digits); exit(EXIT_FAILURE); } if (*ptr == ',') dbl_digits = strtol(ptr + 1, &ptr2, 10); if (ptr2 == ptr + 1 || dbl_digits < 1 || dbl_digits > 20) { error("unreasonable value for double significant digits: %d", dbl_digits); exit(EXIT_FAILURE); } (void)sprintf(flt_fmt, "%%.%dg", (int)flt_digits); (void)sprintf(dbl_fmt, "%%.%dg", (int)dbl_digits); set_formats(flt_fmt, dbl_fmt); } int main(int argc, char *argv[]) { static struct fspec fspec = /* defaults, overridden on command line */ { 0, /* construct netcdf name from file name */ false, /* print header info only, no data? */ false, /* just print coord vars? */ false, /* brief comments in data section? */ false, /* full annotations in data section? */ false, /* replace nonalpha-numeric with underscore? */ LANG_NONE, /* language conventions for indices */ 0, /* if -v specified, number of variables */ 0 /* if -v specified, list of variable names */ }; int c; int i; int max_len = 80; /* default maximum line length */ h4opterr = 1; progname = argv[0]; if (1 == argc) /* if no arguments given, print help and exit */ usage(); dims = (struct ncdim *)calloc(H4_MAX_NC_DIMS, sizeof(struct ncdim)); /* dimensions */ vdims = (long *)calloc(H4_MAX_NC_DIMS, sizeof(long)); /* dimension sizes for a single variable */ if ((dims == NULL) || (vdims == NULL)) { error("Unable to allocate memory!\n"); exit(EXIT_FAILURE); } while ((c = h4getopt(argc, argv, "b:cf:hul:n:v:d:V")) != EOF) switch (c) { case 'V': /* display version of the library */ printf("%s, %s\n\n", argv[0], LIBVER_STRING); exit(EXIT_SUCCESS); case 'h': /* dump header only, no data */ fspec.header_only = true; break; case 'c': /* header, data only for coordinate dims */ fspec.coord_vals = true; break; case 'n': /* * provide different name than derived from * file name */ fspec.name = h4optarg; break; case 'u': /* replace nonalpha-numerics with underscores */ fspec.fix_str = true; break; case 'b': /* brief comments in data section */ fspec.brief_data_cmnts = true; switch (tolower(h4optarg[0])) { case 'c': fspec.data_lang = LANG_C; break; case 'f': fspec.data_lang = LANG_F; break; default: error("invalid value for -b option: %s", h4optarg); exit(EXIT_FAILURE); } break; case 'f': /* full comments in data section */ fspec.full_data_cmnts = true; switch (tolower(h4optarg[0])) { case 'c': fspec.data_lang = LANG_C; break; case 'f': fspec.data_lang = LANG_F; break; default: error("invalid value for -b option: %s", h4optarg); exit(EXIT_FAILURE); } break; case 'l': /* maximum line length */ max_len = (int)strtol(h4optarg, 0, 0); if (max_len < 10) { error("unreasonably small line length specified: %d", max_len); exit(EXIT_FAILURE); } break; case 'v': /* variable names */ /* make list of names of variables specified */ make_lvars(h4optarg, &fspec); break; case 'd': /* specify precision for floats */ set_sigdigs(h4optarg); break; case '?': usage(); break; } set_max_len(max_len); argc -= h4optind; argv += h4optind; i = 0; do { if (argc > 0) do_ncdump(argv[i], &fspec); } while (++i < argc); free(dims); free(vdims); return EXIT_SUCCESS; } hdf4-hdf4.3.1/mfhdf/ncdump/ncdump.h000066400000000000000000000062551503061704500170500ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCDUMP_H #define NCDUMP_H #define ERR_READFAIL \ -2 /* Used to return by vardata() to indicate that \ ncvarget() fails to read the data */ typedef enum { false = 0, true = 1 } bool; struct ncdim { /* dimension */ char name[H4_MAX_NC_NAME]; long size; }; struct ncvar { /* variable */ char name[H4_MAX_NC_NAME]; nc_type type; int ndims; int dims[H4_MAX_VAR_DIMS]; int natts; }; struct ncatt { /* attribute */ int var; char name[H4_MAX_NC_NAME]; nc_type type; int len; void *val; }; typedef enum { LANG_NONE, LANG_C, LANG_F } Nclang; struct fspec { /* specification for how to format dump */ char *name; /* * name specified with -n or derived from file * name */ bool header_only; /* * if true, don't print any variable data */ bool coord_vals; /* * if true, print header and coordinate * dimension values (values of variables that * are also dimensions), but no other variable * data */ bool brief_data_cmnts; /* * if true, put // comments in data section * identifying variable and indices, useful for * navigating through large multi-dimensional * data lists. */ bool full_data_cmnts; /* * if true, put // comments in data section * identifying every value, useful for * navigating through large multi-dimensional * data lists. */ bool fix_str; /* * if true, replace nonalpha-numeric * characters in a name with underscores */ Nclang data_lang; /* * Specifies index conventions used in data * comments, either LANG_C (C, 0-based, column * major) or LANG_F (Fortran, 1-based, row * major) */ int nlvars; /* * Number of variables specified with -v option * on command line */ char **lvars; /* * list of variable names specified with -v * option on command line */ }; #endif /* NCDUMP_H */ hdf4-hdf4.3.1/mfhdf/ncdump/test0.cdl000066400000000000000000000016041503061704500171250ustar00rootroot00000000000000netcdf test0 { dimensions: i = 2; j = 3; k = unlimited; l = 3 ; variables: char broiled(i,j,l); broiled:acc = 'a'; broiled:act = "text string\n\t123"; broiled:acb = '\n'; broiled:acs = -40s ; broiled:acl = 17000 ; broiled:acf = -2.0f, 1.f, 0.0f ; broiled:acd = -1.0, 2.7182818284590455; byte the_bullet(i,j); short order(i,j); long shot(i,j); float a_loan(i,j); double entendre(i,j); char cscalar; double dscalar; char cnodata(k); byte bnodata(i); short snodata(i); long lnodata(i); float fnodata(i); double dnodata(k,i,j); int i(i); float j(j); byte l(l); :glob = "Global attribute" ; data: broiled = "indistinguishable" ; the_bullet = -127,0,127,128,255; order = 1s, 2s, 3s, 4s, 5s, 6s; shot = 2, 3, 4, 5, 6, 7 ; a_loan = 3.f, 4.f, 5.f, 6.f, 7.f, 1.0e12f ; entendre = '\4', 5s, 6, 7.0f, 8.0, 1.0e30 ; i = 10, 20; j = 2, 4, 6; l = 10, 9, 8; } hdf4-hdf4.3.1/mfhdf/ncdump/testncdump.sh.in000066400000000000000000000052361503061704500205360ustar00rootroot00000000000000#! /bin/sh # Tests for the ncdump tool srcdir=@srcdir@ currentdir=`pwd` # Definitions of commands and variables NCDUMP='ncdump' # The tool name NCDUMP_BIN="${TESTS_ENVIRONMENT} "`pwd`/$NCDUMP # The path of the tool binary RM='rm -f' CMP='cmp -s' DIFF='diff -c' CP='cp' nerrors=0 verbose=yes $CP $srcdir/test0.cdl ./nctest0.cdl # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All ncdump tests passed" else MESG 0 "ncdump tests failed: $nerrors" fi exit $nerrors } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable # # XXX: This test is almost worthless since ncdump always returns EXIT_SUCCESS. # RUN() { # Run test. ${TESTS_ENVIRONMENT} ../ncgen/ncgen -o test0.nc -n nctest0.cdl RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi ${TESTS_ENVIRONMENT} $NCDUMP_BIN test0.nc > test1.cdl RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi ${TESTS_ENVIRONMENT} ../ncgen/ncgen -o test1.nc -n test1.cdl RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi ${TESTS_ENVIRONMENT} $NCDUMP_BIN -n test0 test1.nc > test2.cdl RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi $CMP test1.cdl test2.cdl cmpval=$? if [ "$cmpval" = 0 ] ; then echo " PASSED" else echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi $RM -f test1.nc test1.cdl test2.cdl } ############################################################################## ### T H E T E S T S ### ############################################################################## # Print a beginning banner MESG 0 "Running ncdump tests" # compare output RUN # End of test, return exit code FINISH hdf4-hdf4.3.1/mfhdf/ncdump/vardata.c000066400000000000000000000463741503061704500172050ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include #else #include #endif #include "ncdump.h" #include "dumplib.h" #include "vardata.h" /* * Function from ncdump.c. "Fixes" variable names to remove spaces and other * "illegal" characters. */ extern char *sanitize_string(char *str, bool fix_str); static void annotate(struct ncvar *vp, struct fspec *fsp, long cor[], long iel); #define VD_STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) /* * Print a row of variable values. Makes sure output lines aren't too long * by judiciously inserting newlines. */ /* vp - variable */ /* len - number of values to print */ /* fmt * printf format used for each value. If * nc_type is NC_CHAR and this is NULL, * character arrays will be printed as strings * enclosed in quotes. */ /* more * true if more data will follow, so add * trailing comma */ /* lastrow * true if this is the last row for this * variable, so terminate with ";" instead of * "," */ /* vals pointer to block of values */ static void pr_vals(struct ncvar *vp, long len, char *fmt, bool more, bool lastrow, void *vals) { long iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; char *sp; unsigned char uc; float fill_float; double fill_double; char sout[100]; /* temporary string for each encoded output */ fill_float = FILL_FLOAT; /* static initialization hits ultrix cc bug */ fill_double = FILL_DOUBLE; switch (vp->type) { case NC_BYTE: gp.cp = (char *)vals; for (iel = 0; iel < len - 1; iel++) { (void)sprintf(sout, fmt, *gp.cp++); (void)strcat(sout, ", "); lput(sout); } (void)sprintf(sout, fmt, *gp.cp++); lput(sout); break; case NC_CHAR: gp.cp = (char *)vals; if (fmt == 0 || VD_STREQ(fmt, "%s") || VD_STREQ(fmt, "")) { /* as string */ printf("\""); /* adjust len so trailing nulls don't get printed */ sp = gp.cp + len; while (len > 0 && *--sp == '\0') len--; for (iel = 0; iel < len; iel++) switch (uc = *gp.cp++ & 0377) { case '\b': printf("\\b"); break; case '\f': printf("\\f"); break; case '\n': /* generate linebreaks after new-lines */ printf("\\n\",\n \""); break; case '\r': printf("\\r"); break; case '\t': printf("\\t"); break; case '\v': printf("\\v"); break; case '\\': printf("\\\\"); break; case '\'': printf("\\\'"); break; case '\"': printf("\\\""); break; default: if (isprint(uc)) printf("%c", uc); else printf("\\%.3o", uc); break; } printf("\""); } else { /* use format from C_format attribute */ for (iel = 0; iel < len - 1; iel++) { (void)sprintf(sout, fmt, *gp.cp++); (void)strcat(sout, ", "); lput(sout); } (void)sprintf(sout, fmt, *gp.cp++); lput(sout); } break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len - 1; iel++) { (void)sprintf(sout, fmt, *gp.sp++); (void)strcat(sout, ", "); lput(sout); } (void)sprintf(sout, fmt, *gp.sp++); lput(sout); break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len - 1; iel++) { (void)sprintf(sout, fmt, *gp.lp++); (void)strcat(sout, ", "); lput(sout); } (void)sprintf(sout, fmt, *gp.lp++); lput(sout); break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len - 1; iel++) { if (*gp.fp >= fill_float) (void)sprintf(sout, "FloatInf, "); else { (void)sprintf(sout, fmt, (double)*gp.fp); (void)strcat(sout, ", "); } lput(sout); gp.fp++; } if (*gp.fp >= fill_float) (void)sprintf(sout, "FloatInf"); else (void)sprintf(sout, fmt, (double)*gp.fp); lput(sout); gp.fp++; break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len - 1; iel++) { if (*gp.dp >= fill_double) (void)sprintf(sout, "DoubleInf, "); else { (void)sprintf(sout, fmt, *gp.dp); (void)strcat(sout, ", "); } lput(sout); gp.dp++; } if (*gp.dp >= fill_double) (void)sprintf(sout, "DoubleInf"); else (void)sprintf(sout, fmt, *gp.dp); lput(sout); gp.dp++; break; default: error("pr_vals: bad type"); } if (more) { lput(", "); } else { if (lastrow) { lput(" ;"); lput("\n"); } else { lput(",\n"); lput(" "); } } } /* * print last delimiter in each line before annotation (, or ;) */ static void lastdelim(bool more, bool lastrow) { if (more) { printf(", "); } else { if (lastrow) { printf(";"); } else { printf(","); } } } /* * Annotates a value in data section with var name and indices in comment */ /* vp - variable */ /* fsp - formatting specs */ /* cor - corner coordinates */ /* iel - which element in current row */ static void annotate(struct ncvar *vp, struct fspec *fsp, long cor[], long iel) { int vrank = vp->ndims; int id; /* print indices according to data_lang */ printf(" // %s(", vp->name); switch (fsp->data_lang) { case LANG_C: /* C variable indices */ for (id = 0; id < vrank - 1; id++) printf("%d,", (int)cor[id]); printf("%d", (int)(cor[id] + iel)); break; case LANG_F: /* Fortran variable indices */ printf("%d", (int)(cor[vrank - 1] + iel + 1)); for (id = vrank - 2; id >= 0; id--) { printf(",%d", (int)(1 + cor[id])); } break; case LANG_NONE: default: /* Might want to make this an error */ break; } printf(")\n "); } /* * Print a number of commented variable values, where the comments for each * value identify the variable, and each dimension index. */ /* vp - variable */ /* len - number of values to print */ /* fmt * printf format used for each value. If * nc_type is NC_CHAR and this is NULL, * character arrays will be printed as strings * enclosed in quotes. */ /* more * true if more data for this row will follow, * so add trailing comma */ /* lastrow * true if this is the last row for this * variable, so terminate with ";" instead of * "," */ /* vals - pointer to block of values */ /* fsp - formatting specs */ /* cor - corner coordinates */ static void pr_cvals(struct ncvar *vp, long len, char *fmt, bool more, bool lastrow, void *vals, struct fspec *fsp, long cor[]) { long iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; char *sp; unsigned char uc; float fill_float; double fill_double; fill_float = FILL_FLOAT; /* static initialization hits ultrix cc bug */ fill_double = FILL_DOUBLE; switch (vp->type) { case NC_BYTE: gp.cp = (char *)vals; for (iel = 0; iel < len - 1; iel++) { printf(fmt, *gp.cp++); printf(", "); annotate(vp, fsp, cor, iel); } printf(fmt, *gp.cp++); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); break; case NC_CHAR: gp.cp = (char *)vals; if (fmt == 0 || VD_STREQ(fmt, "%s") || VD_STREQ(fmt, "")) { /* as string */ printf("\""); /* adjust len so trailing nulls don't get printed */ sp = gp.cp + len; while (len > 0 && *--sp == '\0') len--; for (iel = 0; iel < len; iel++) switch (uc = *gp.cp++ & 0377) { case '\b': printf("\\b"); break; case '\f': printf("\\f"); break; case '\n': /* generate linebreaks after new-lines */ printf("\\n\",\n \""); break; case '\r': printf("\\r"); break; case '\t': printf("\\t"); break; case '\v': printf("\\v"); break; case '\\': printf("\\\\"); break; case '\'': printf("\\\'"); break; case '\"': printf("\\\""); break; default: if (isprint(uc)) printf("%c", uc); else printf("\\%.3o", uc); break; } printf("\""); annotate(vp, fsp, cor, 0); } else { /* use format from C_format attribute */ for (iel = 0; iel < len - 1; iel++) { printf(fmt, *gp.cp++); printf(", "); annotate(vp, fsp, cor, iel); } printf(fmt, *gp.cp++); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); } break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len - 1; iel++) { printf(fmt, *gp.sp++); printf(", "); annotate(vp, fsp, cor, iel); } printf(fmt, *gp.sp++); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len - 1; iel++) { printf(fmt, *gp.lp++); printf(", "); annotate(vp, fsp, cor, iel); } printf(fmt, *gp.lp++); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len - 1; iel++) { if (*gp.fp >= fill_float) printf("FloatInf"); else printf(fmt, (double)*gp.fp); printf(","); annotate(vp, fsp, cor, iel); gp.fp++; } if (*gp.fp >= fill_float) printf("FloatInf"); else printf(fmt, (double)*gp.fp); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); gp.fp++; break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len - 1; iel++) { if (*gp.dp >= fill_double) printf("DoubleInf"); else { printf(fmt, *gp.dp); } printf(","); annotate(vp, fsp, cor, iel); gp.dp++; } if (*gp.dp >= fill_double) printf("DoubleInf"); else printf(fmt, *gp.dp); lastdelim(more, lastrow); annotate(vp, fsp, cor, iel); gp.dp++; break; default: error("pr_vals: bad type"); } } /* * Updates a vector of ints, odometer style. Returns 0 if odometer * overflowed, else 1. */ /* dims - The "odometer" limits for each dimension */ /* ndims - Number of dimensions */ /* odom - The "odometer" vector to be updated */ /* add - A vector to "add" to odom on each update */ static int upcorner(long *dims, int ndims, long *odom, long *add) { int id; int ret = 1; for (id = ndims - 1; id > 0; id--) { odom[id] += add[id]; if (odom[id] >= dims[id]) { odom[id - 1]++; odom[id] -= dims[id]; } } odom[0] += add[0]; if (odom[0] >= dims[0]) ret = 0; return ret; } /* vp - variable */ /* vdims - variable dimension sizes */ /* ncid - netcdf id */ /* varid - variable id */ /* fsp - formatting specs */ int vardata(struct ncvar *vp, long vdims[], int ncid, int varid, struct fspec *fsp) { long cor[H4_MAX_VAR_DIMS]; /* corner coordinates */ long edg[H4_MAX_VAR_DIMS]; /* edges of hypercube */ long add[H4_MAX_VAR_DIMS]; /* "odometer" increment to next "row" */ #define VALBUFSIZ 8192 double vals[VALBUFSIZ / sizeof(double)]; /* aligned buffer */ int gulp = VALBUFSIZ / nctypelen(vp->type); int id; int ir; long nels; long ncols; long nrows; int vrank = vp->ndims; char *fixed_var; int ret = 0, err_code = 0; /* printf format used to print each value */ const char *fmt = get_fmt(ncid, varid, vp->type); nels = 1; for (id = 0; id < vrank; id++) { cor[id] = 0; edg[id] = 1; nels *= vdims[id]; /* total number of values for variable */ } fixed_var = sanitize_string(vp->name, fsp->fix_str); if (vrank <= 1) { printf("\n %s = ", fixed_var); set_indent(strlen(fixed_var) + 4); } else { printf("\n %s =\n ", fixed_var); set_indent(2); } if (vrank < 1) { ncols = 1; } else { ncols = vdims[vrank - 1]; /* size of "row" along last dimension */ edg[vrank - 1] = vdims[vrank - 1]; for (id = 0; id < vrank; id++) add[id] = 0; if (vrank > 1) add[vrank - 2] = 1; } nrows = nels / ncols; /* number of "rows" */ for (ir = 0; ir < nrows; ir++) { /* * rather than just printing a whole row at once (which might exceed * the capacity of MSDOS platforms, for example), we break each row * into smaller chunks, if necessary. */ long corsav = 0; long left = ncols; bool lastrow; if (vrank > 0) { corsav = cor[vrank - 1]; if (fsp->brief_data_cmnts != false && vrank > 1 && left > 0) { /* print brief comment with indices range */ printf("// %s(", fixed_var); switch (fsp->data_lang) { case LANG_C: /* print brief comment with C variable indices */ for (id = 0; id < vrank - 1; id++) printf("%d,", (int)cor[id]); if (vdims[vrank - 1] == 1) printf("0"); else printf(" 0-%d", (int)vdims[vrank - 1] - 1); break; case LANG_F: /* print brief comment with Fortran variable indices */ if (vdims[vrank - 1] == 1) printf("1"); else printf("1-%d ", (int)vdims[vrank - 1]); for (id = vrank - 2; id >= 0; id--) { printf(",%d", (int)(1 + cor[id])); } break; case LANG_NONE: default: /* Might want to make this an error */ break; } printf(")\n "); set_indent(4); } } lastrow = (ir == nrows - 1) ? true : false; while (left > 0) { long toget = left < gulp ? left : gulp; if (vrank > 0) edg[vrank - 1] = toget; /* ncvarget was casted to (void), thus ncdump misinformed users that the reading succeeded even though the data was corrupted and reading in fact failed (HDFFR-1468.) Now when ncvarget fails, break out of the while loop and set error code to indicate this failure. -BMR, 2015/01/19 */ ret = ncvarget(ncid, varid, cor, edg, (void *)vals); if (ret == -1) { err_code = ERR_READFAIL; /* to be returned to caller to indicate that ncvarget fails */ break; } if (fsp->full_data_cmnts) pr_cvals(vp, toget, fmt, left > toget, lastrow, (void *)vals, fsp, cor); else pr_vals(vp, toget, fmt, left > toget, lastrow, (void *)vals); left -= toget; if (vrank > 0) cor[vrank - 1] += toget; } /* No failure occurs */ if (ret >= 0) { if (vrank > 0) cor[vrank - 1] = corsav; if (ir < nrows - 1) if (!upcorner(vdims, vp->ndims, cor, add)) error("vardata: odometer overflowed!"); set_indent(2); } } free(fixed_var); return (err_code); /* Previously, it was "return 0;" If this function is revised, this return statement may be changed appropriately. (HDFFR-1468) */ } hdf4-hdf4.3.1/mfhdf/ncdump/vardata.h000066400000000000000000000014741503061704500172020ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCDUMP_VARDATA_H #define NCDUMP_VARDATA_H extern char *progname; /* for error messages */ #ifdef __cplusplus extern "C" { #endif /* Output the data for a single variable, in CDL syntax. */ extern int vardata(struct ncvar *, /* variable */ long[], /* variable dimension sizes */ int, /* netcdf id */ int, /* variable id */ struct fspec * /* formatting specs */ ); #ifdef __cplusplus } #endif #endif /* NCDUMP_VARDATA_H */ hdf4-hdf4.3.1/mfhdf/ncgen/000077500000000000000000000000001503061704500152055ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/ncgen/CMakeLists.txt000066400000000000000000000040271503061704500177500ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_NCGEN C) INCLUDE_DIRECTORIES ( ${HDF4_MFHDF_NCGEN_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) set (ncgen_SRCS ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/close.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/escapes.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/generate.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/genlib.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/getfill.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/init.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/load.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/main.c ${HDF4_MFHDF_NCGEN_SOURCE_DIR}/ncgentab.c ${HDF4_MFHDF_UTIL_DIR}/h4getopt.c ) add_executable (ncgen ${ncgen_SRCS}) target_include_directories(ncgen PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_MFHDF_UTIL_DIR};${HDF4_BINARY_DIR}") if (HDF4_BUILD_STATIC_TOOLS) TARGET_C_PROPERTIES (ncgen STATIC) target_link_libraries (ncgen PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (ncgen SHARED) target_link_libraries (ncgen PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (ncgen PROPERTIES COMPILE_DEFINITIONS "HDF") set (H4_DEP_EXECUTABLES ncgen) if (BUILD_TESTING) include (CMakeTests.cmake) endif () ############################################################################## ############################################################################## ### I N S T A L L A T I O N ### ############################################################################## ############################################################################## #----------------------------------------------------------------------------- # Add file(s) to CMake Install #----------------------------------------------------------------------------- foreach (exec ${H4_DEP_EXECUTABLES}) INSTALL_PROGRAM_PDB (${exec} ${HDF4_INSTALL_TOOLS_BIN_DIR} toolsapplications) endforeach () install ( TARGETS ${H4_DEP_EXECUTABLES} RUNTIME DESTINATION ${HDF4_INSTALL_TOOLS_BIN_DIR} COMPONENT toolsapplications ) hdf4-hdf4.3.1/mfhdf/ncgen/CMakeTests.cmake000066400000000000000000000116731503061704500202220ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run add_test ( NAME NCGEN-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ctest0.nc ctest1.cdl ftest0.nc ftest1.cdl ncgentab.c ncgentab.h ncgenyy.c netcdf.inc test0.c test0.f test0.nc test1.cdl test1.nc test2.cdl ) HDFTEST_COPY_FILE("${HDF4_MFHDF_NCGEN_SOURCE_DIR}/test0.cdl" "${PROJECT_BINARY_DIR}/test0.cdl" "ncgen_files") add_custom_target(ncgen_files ALL COMMENT "Copying files needed by ncgen tests" DEPENDS ${ncgen_files_list}) #-- Adding test for ncgen add_test ( NAME NCGEN-test0.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -b -o test0.nc test0.cdl ) set_tests_properties (NCGEN-test0.nc PROPERTIES DEPENDS "NCGEN-clearall-objects" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test1.cdl COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-n;test1;test0.nc" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test1.cdl" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCGEN-test1.cdl PROPERTIES DEPENDS "NCGEN-test0.nc" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test1.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -b test1.cdl ) set_tests_properties (NCGEN-test1.nc PROPERTIES DEPENDS "NCGEN-test1.cdl" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test2.cdl COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=test1.nc" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test2.cdl" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=test1.cdl" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCGEN-test2.cdl PROPERTIES DEPENDS "NCGEN-test1.nc" LABELS ${PROJECT_NAME}) # #ctest0$(EXEEXT): ncgen$(EXEEXT) $(srcdir)/test0.cdl # $(TESTS_ENVIRONMENT) ./ncgen -c -o ctest0.nc $(srcdir)/test0.cdl > test0.c # $(COMPILE) -c -o ctest0$(EXEEXT).o test0.c # $(LINK) ctest0$(EXEEXT).o $(ctest0_LDADD) $(LDFLAGS) $(SHLIBLOC) $(LIBS) add_test ( NAME NCGEN-ctest0 COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-c;-o;ctest0.nc;test0.cdl" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test0.c" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCGEN-ctest0 PROPERTIES DEPENDS "NCGEN-test2.cdl" LABELS ${PROJECT_NAME}) # ## Test the "-c" option of ncgen #c-check: b-check ctest0 # $(TESTS_ENVIRONMENT) ./ctest0 # tests `-c' option, creates ctest0.nc # $(TESTS_ENVIRONMENT) $(NCDUMP) -n test1 ctest0.nc > ctest1.cdl # @if $(DIFF) test1.cdl ctest1.cdl; then \ # echo "*** ncgen -c test successful ***"; \ # else \ # echo "*** ncgen -c test failed ***"; \ # fi if (HDF4_BUILD_FORTRAN) # #ftest0$(EXEEXT): ncgen$(EXEEXT) test0.cdl netcdf.inc # $(TESTS_ENVIRONMENT) ./ncgen -f -o ftest0.nc $(srcdir)/test0.cdl > test0.f # $(F77) $(FFLAGS) -o $@ test0.f $(LDFLAGS) $(SHLIBLOC) $(LIBS) add_test ( NAME NCGEN-ftest0 COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-f;-o;ftest0.nc;test0.cdl" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=test0.f" -D "TEST_EXPECT=0" -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (NCGEN-ftest0 PROPERTIES DEPENDS "NCGEN-ctest0" LABELS ${PROJECT_NAME}) # Test the "-f" option of ncgen #f-check: b-check ftest0 # $(TESTS_ENVIRONMENT) ./ftest0 # $(TESTS_ENVIRONMENT) $(NCDUMP) -n test1 ftest0.nc > ftest1.cdl # @if $(DIFF) test1.cdl ftest1.cdl; then \ # echo "*** ncgen -f test successful ***"; \ # else \ # echo "*** ncgen -f test failed (but roundoff differences are OK) ***"; \ # fi endif () hdf4-hdf4.3.1/mfhdf/ncgen/Makefile.am000066400000000000000000000070631503061704500172470ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am if HDF_BUILD_SHARED SHLIBLOC = $(top_builddir)/mfhdf/libsrc/.libs/libmfhdf.$(SHARED_EXTENSION) $(top_builddir)/hdf/src/.libs/libdf.$(SHARED_EXTENSION) else SHLIBLOC = $(top_builddir)/mfhdf/libsrc/.libs/libmfhdf.a $(top_builddir)/hdf/src/.libs/libdf.a endif ## Setup the different includes and preprocessor #defines we need. ncgen_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(ncgen_INCLUDES) $(DEFINES) ## Add ncgen specific linker flags here ncgen_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ############################################################################# ## Programs to build ## ############################################################################# bin_PROGRAMS = ncgen if HDF_BUILD_NETCDF if HDF_BUILD_FORTRAN noinst_PROGRAMS = ctest0 ftest0 else noinst_PROGRAMS = ctest0 endif else noinst_PROGRAMS = ctest0 endif ## Information for building the "ncgen" program ncgen_SOURCES = close.c escapes.c generate.c genlib.c getfill.c init.c \ load.c main.c ncgentab.c $(top_srcdir)/mfhdf/util/h4getopt.c ncgen_LDADD = $(LIBMFHDF) $(LIBHDF) ncgen_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ctest0_SOURCES= ctest0_LDADD = $(LIBMFHDF) $(LIBHDF) ctest0_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ftest0_SOURCES= ############################################################################# ## Documentation ## ############################################################################# man1_MANS = ncgen.1 ############################################################################# ## Testing -- Here there be dragons. ## ############################################################################# NCDUMP=$(top_builddir)/mfhdf/ncdump/ncdump check_PROGRAMS = ctest0 if HDF_BUILD_NETCDF if HDF_BUILD_FORTRAN check_PROGRAMS += ftest0 netcdf.inc: ln -s $(top_builddir)/mfhdf/fortran/$@ . ftest0$(EXEEXT): ncgen$(EXEEXT) test0.cdl netcdf.inc $(TESTS_ENVIRONMENT) ./ncgen -f -o ftest0.nc $(srcdir)/test0.cdl > test0.f $(F77) $(FFLAGS) -o $@ test0.f $(LDFLAGS) $(SHLIBLOC) $(LIBS) endif endif ctest0$(EXEEXT): ncgen$(EXEEXT) $(srcdir)/test0.cdl $(TESTS_ENVIRONMENT) ./ncgen -c -o ctest0.nc $(srcdir)/test0.cdl > test0.c $(COMPILE) -c -o ctest0$(EXEEXT).o test0.c $(LINK) ctest0$(EXEEXT).o $(ctest0_LDADD) $(LDFLAGS) $(LIBS) TEST_SCRIPT = testncgen.sh check_SCRIPTS = testncgen.sh ############################################################################# ## Miscellaneous ## ############################################################################# ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += ctest1.cdl ftest1.cdl \ test0.nc test1.cdl test1.nc test2.cdl DISTCLEANFILES = ctest0$(EXEEXT) ctest0.nc ftest0$(EXEEXT) ftest0.nc \ netcdf.inc test0.c test0.f include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/ncgen/Makefile.in000066400000000000000000001511061503061704500172560ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ bin_PROGRAMS = ncgen$(EXEEXT) @HDF_BUILD_FORTRAN_FALSE@@HDF_BUILD_NETCDF_TRUE@noinst_PROGRAMS = ctest0$(EXEEXT) @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@noinst_PROGRAMS = ctest0$(EXEEXT) \ @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@ ftest0$(EXEEXT) @HDF_BUILD_NETCDF_FALSE@noinst_PROGRAMS = ctest0$(EXEEXT) check_PROGRAMS = ctest0$(EXEEXT) $(am__EXEEXT_1) @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@am__append_1 = ftest0 TESTS = $(TEST_SCRIPT) subdir = mfhdf/ncgen ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = testncgen.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@am__EXEEXT_1 = ftest0$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_ctest0_OBJECTS = ctest0_OBJECTS = $(am_ctest0_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_ftest0_OBJECTS = ftest0_OBJECTS = $(am_ftest0_OBJECTS) ftest0_LDADD = $(LDADD) am_ncgen_OBJECTS = close.$(OBJEXT) escapes.$(OBJEXT) \ generate.$(OBJEXT) genlib.$(OBJEXT) getfill.$(OBJEXT) \ init.$(OBJEXT) load.$(OBJEXT) main.$(OBJEXT) \ ncgentab.$(OBJEXT) h4getopt.$(OBJEXT) ncgen_OBJECTS = $(am_ncgen_OBJECTS) ncgen_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ncgen_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/close.Po ./$(DEPDIR)/escapes.Po \ ./$(DEPDIR)/generate.Po ./$(DEPDIR)/genlib.Po \ ./$(DEPDIR)/getfill.Po ./$(DEPDIR)/h4getopt.Po \ ./$(DEPDIR)/init.Po ./$(DEPDIR)/load.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/ncgentab.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(ctest0_SOURCES) $(ftest0_SOURCES) $(ncgen_SOURCES) DIST_SOURCES = $(ctest0_SOURCES) $(ftest0_SOURCES) $(ncgen_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; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/testncgen.sh.in \ $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/test-driver \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog ctest1.cdl ftest1.cdl test0.nc \ test1.cdl test1.nc test2.cdl @HDF_BUILD_SHARED_FALSE@SHLIBLOC = $(top_builddir)/mfhdf/libsrc/.libs/libmfhdf.a $(top_builddir)/hdf/src/.libs/libdf.a @HDF_BUILD_SHARED_TRUE@SHLIBLOC = $(top_builddir)/mfhdf/libsrc/.libs/libmfhdf.$(SHARED_EXTENSION) $(top_builddir)/hdf/src/.libs/libdf.$(SHARED_EXTENSION) ncgen_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_srcdir)/mfhdf/util \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(ncgen_INCLUDES) $(DEFINES) ncgen_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) ncgen_SOURCES = close.c escapes.c generate.c genlib.c getfill.c init.c \ load.c main.c ncgentab.c $(top_srcdir)/mfhdf/util/h4getopt.c ncgen_LDADD = $(LIBMFHDF) $(LIBHDF) ncgen_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ctest0_SOURCES = ctest0_LDADD = $(LIBMFHDF) $(LIBHDF) ctest0_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ftest0_SOURCES = ############################################################################# ############################################################################# man1_MANS = ncgen.1 ############################################################################# ############################################################################# NCDUMP = $(top_builddir)/mfhdf/ncdump/ncdump TEST_SCRIPT = testncgen.sh check_SCRIPTS = testncgen.sh DISTCLEANFILES = ctest0$(EXEEXT) ctest0.nc ftest0$(EXEEXT) ftest0.nc \ netcdf.inc test0.c test0.f # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/ncgen/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/ncgen/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testncgen.sh: $(top_builddir)/config.status $(srcdir)/testncgen.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_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 clean-checkPROGRAMS: @list='$(check_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 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 @HDF_BUILD_FORTRAN_FALSE@ftest0$(EXEEXT): $(ftest0_OBJECTS) $(ftest0_DEPENDENCIES) $(EXTRA_ftest0_DEPENDENCIES) @HDF_BUILD_FORTRAN_FALSE@ @rm -f ftest0$(EXEEXT) @HDF_BUILD_FORTRAN_FALSE@ $(AM_V_CCLD)$(LINK) $(ftest0_OBJECTS) $(ftest0_LDADD) $(LIBS) @HDF_BUILD_NETCDF_FALSE@ftest0$(EXEEXT): $(ftest0_OBJECTS) $(ftest0_DEPENDENCIES) $(EXTRA_ftest0_DEPENDENCIES) @HDF_BUILD_NETCDF_FALSE@ @rm -f ftest0$(EXEEXT) @HDF_BUILD_NETCDF_FALSE@ $(AM_V_CCLD)$(LINK) $(ftest0_OBJECTS) $(ftest0_LDADD) $(LIBS) ncgen$(EXEEXT): $(ncgen_OBJECTS) $(ncgen_DEPENDENCIES) $(EXTRA_ncgen_DEPENDENCIES) @rm -f ncgen$(EXEEXT) $(AM_V_CCLD)$(ncgen_LINK) $(ncgen_OBJECTS) $(ncgen_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escapes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genlib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getfill.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h4getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncgentab.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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 $@ $< h4getopt.o: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.o -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.o `test -f '$(top_srcdir)/mfhdf/util/h4getopt.c' || echo '$(srcdir)/'`$(top_srcdir)/mfhdf/util/h4getopt.c h4getopt.obj: $(top_srcdir)/mfhdf/util/h4getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h4getopt.obj -MD -MP -MF $(DEPDIR)/h4getopt.Tpo -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h4getopt.Tpo $(DEPDIR)/h4getopt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/mfhdf/util/h4getopt.c' object='h4getopt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h4getopt.obj `if test -f '$(top_srcdir)/mfhdf/util/h4getopt.c'; then $(CYGPATH_W) '$(top_srcdir)/mfhdf/util/h4getopt.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mfhdf/util/h4getopt.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(MANS) all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/close.Po -rm -f ./$(DEPDIR)/escapes.Po -rm -f ./$(DEPDIR)/generate.Po -rm -f ./$(DEPDIR)/genlib.Po -rm -f ./$(DEPDIR)/getfill.Po -rm -f ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/init.Po -rm -f ./$(DEPDIR)/load.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ncgentab.Po -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-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 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 ./$(DEPDIR)/close.Po -rm -f ./$(DEPDIR)/escapes.Po -rm -f ./$(DEPDIR)/generate.Po -rm -f ./$(DEPDIR)/genlib.Po -rm -f ./$(DEPDIR)/getfill.Po -rm -f ./$(DEPDIR)/h4getopt.Po -rm -f ./$(DEPDIR)/init.Po -rm -f ./$(DEPDIR)/load.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ncgentab.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS 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-man1 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 mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@netcdf.inc: @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@ ln -s $(top_builddir)/mfhdf/fortran/$@ . @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@ftest0$(EXEEXT): ncgen$(EXEEXT) test0.cdl netcdf.inc @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@ $(TESTS_ENVIRONMENT) ./ncgen -f -o ftest0.nc $(srcdir)/test0.cdl > test0.f @HDF_BUILD_FORTRAN_TRUE@@HDF_BUILD_NETCDF_TRUE@ $(F77) $(FFLAGS) -o $@ test0.f $(LDFLAGS) $(SHLIBLOC) $(LIBS) ctest0$(EXEEXT): ncgen$(EXEEXT) $(srcdir)/test0.cdl $(TESTS_ENVIRONMENT) ./ncgen -c -o ctest0.nc $(srcdir)/test0.cdl > test0.c $(COMPILE) -c -o ctest0$(EXEEXT).o test0.c $(LINK) ctest0$(EXEEXT).o $(ctest0_LDADD) $(LDFLAGS) $(LIBS) # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/ncgen/README000066400000000000000000000020341503061704500160640ustar00rootroot00000000000000This directory contains source code for ncgen, a netCDF utility that converts a CDL description of a netCDF file into a netCDF file, or that generates the C or FORTRAN source code required to create the netCDF file. Before compiling the sources in this directory, you must have already made the netCDF library from the ../src directory. For VMS, first make sure you have compiled [-.util]getopt.c, then type "@make". The make.com, make.opt, and *-vms files are for VMS only. For Microsoft MSDOS and OS/2 platforms, use the msoft.mk Makefile. To test ncgen, you should first make sure the appropriate FORTRAN jackets are compiled and installed in the netCDF library. Then "make test" will test creating a netCDF file from a test CDL file (in test0.cdl), creating the same netCDF file by generating C code and running it, and finally creating the same netCDF file by generating FORTRAN code and running it. If your FORTRAN compiler understands BYTE declarations, you can uncomment the byte declarations and data in test0.cdl before testing ncgen. hdf4-hdf4.3.1/mfhdf/ncgen/close.c000066400000000000000000000016561503061704500164660ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include "ncgen.h" #include "genlib.h" extern void fline(), cline(); extern int netcdf_flag; extern int c_flag; extern int fortran_flag; static void cl_netcdf() { if (ncclose(ncid) == -1) derror("error closing netcdf"); } static void cl_c() { cline(" ncclose (ncid);"); cline(" return 0;"); cline("}"); } static void cl_fortran() { fline("call ncclos (ncid, iret)"); fline("end"); } void close_netcdf() { if (netcdf_flag) cl_netcdf(); /* close netcdf */ if (c_flag) /* create C code to close netcdf */ cl_c(); if (fortran_flag) /* create Fortran code to close netcdf */ cl_fortran(); } hdf4-hdf4.3.1/mfhdf/ncgen/escapes.c000066400000000000000000000056511503061704500170030ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include /* * "Expands" valid escape sequences in yystring (read by lex) into the * apropriate characters in termstring. For example, the two character * sequence "\t" in yystring would be converted into a single tab character * in termstring. On return, termstring is properly terminated. */ /* termstring - returned, with escapes expanded */ void expand_escapes(char *termstring, char *yytext, int yyleng) { char *s, *t, *endp; yytext[yyleng - 1] = '\0'; /* don't copy quotes */ /* expand "\" escapes, e.g. "\t" to tab character */ s = termstring; t = yytext + 1; while (*t) { if (*t == '\\') { t++; switch (*t) { case 'a': *s++ = '\007'; t++; /* will use '\a' when STDC */ break; case 'b': *s++ = '\b'; t++; break; case 'f': *s++ = '\f'; t++; break; case 'n': *s++ = '\n'; t++; break; case 'r': *s++ = '\r'; t++; break; case 't': *s++ = '\t'; t++; break; case 'v': *s++ = '\v'; t++; break; case '\\': *s++ = '\\'; t++; break; case '?': *s++ = '\177'; t++; break; case '\'': *s++ = '\''; t++; break; case '\"': *s++ = '\"'; t++; break; case 'x': t++; /* now t points to one or more hex digits */ *s++ = (char)strtol(t, &endp, 16); t = endp; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': /* t now points to octal digits */ *s++ = (char)strtol(t, &endp, 8); t = endp; break; default: *s++ = *t++; break; } } else { *s++ = *t++; } } *s = '\0'; return; } hdf4-hdf4.3.1/mfhdf/ncgen/generate.c000066400000000000000000001021341503061704500171440ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include #include "ncgen.h" #include "genlib.h" extern char *netcdf_name; /* output netCDF filename, if on command line. */ static const char *ncftype(nc_type); static const char *ftypename(nc_type); static char *cstring(nc_type, void *, int); extern int netcdf_flag; extern int c_flag; extern int fortran_flag; /* create netCDF from in-memory structure */ /* filename - name for output netcdf file */ static void gen_netcdf(char *filename) { int idim, ivar, iatt; int istat; int dimids[H4_MAX_NC_DIMS]; int varids[H4_MAX_NC_VARS]; ncid = nccreate(filename, NC_CLOBBER); /* define dimensions from info in dims array */ for (idim = 0; idim < ndims; idim++) { dimids[idim] = ncdimdef(ncid, dims[idim].name, dims[idim].size); if (dimids[idim] == -1) derror("error defining dimension %s of size %ld", dims[idim].name, dims[idim].size); } /* define variables from info in vars array */ for (ivar = 0; ivar < nvars; ivar++) { varids[ivar] = ncvardef(ncid, vars[ivar].name, vars[ivar].type, vars[ivar].ndims, vars[ivar].dims); if (varids[ivar] == -1) derror("error defining variable %s", vars[ivar].name); } /* define attributes from info in atts array */ for (iatt = 0; iatt < natts; iatt++) { istat = ncattput(ncid, (atts[iatt].var == -1) ? NC_GLOBAL : atts[iatt].var, atts[iatt].name, atts[iatt].type, atts[iatt].len, atts[iatt].val); if (istat == -1) derror("error defining attribute %s for variable %s", atts[iatt].name, vars[atts[ivar].var].name); } istat = ncendef(ncid); if (istat == -1) { derror("error returned from ncendef, exiting ..."); exit(2); } } /* * Output a C statement. */ void cline(const char *stmnt) { FILE *cout = stdout; fputs(stmnt, cout); fputs("\n", cout); } /* generate C code for creating netCDF from in-memory structure */ static void gen_c(char *filename) { int idim, ivar, iatt, jatt, itype, maxdims; int scalar_atts, vector_atts; char *val_string; char stmnt[C_MAX_STMNT]; char s2[H4_MAX_NC_NAME + 2]; static const char *ctypes[] = {"char", "short", "nclong", "float", "double"}; int ntypes = (sizeof ctypes) / (sizeof ctypes[0]); /* wrap in main program */ cline("#include \"hdf.h\""); cline("#ifdef H4_HAVE_NETCDF"); cline("#include \"netcdf.h\""); cline("#else"); cline("#include \"hdf4_netcdf.h\""); cline("#endif"); /* cline("#include \"netcdf.h\""); */ cline(""); cline("int"); sprintf(stmnt, "main() {\t\t\t/* create %s */", filename); cline(stmnt); /* create necessary declarations */ cline(""); cline(" int ncid;\t\t\t/* netCDF id */"); if (ndims > 0) { cline(""); cline(" /* dimension ids */"); strcpy(stmnt, " int "); for (idim = 0; idim < ndims; idim++) { sprintf(s2, "%s_dim%s", dims[idim].name, idim == ndims - 1 ? ";" : ", "); if (strlen(stmnt) + strlen(s2) >= C_MAX_STMNT) { if (idim < ndims - 1) { stmnt[strlen(stmnt) - 2] = '\0'; /* truncate trailing ", " */ strcat(stmnt, ";"); cline(stmnt); strcpy(stmnt, " int "); } } strcat(stmnt, s2); } cline(stmnt); } maxdims = 0; /* most dimensions of any variable */ for (ivar = 0; ivar < nvars; ivar++) if (vars[ivar].ndims > maxdims) maxdims = vars[ivar].ndims; if (nvars > 0) { cline(""); cline(" /* variable ids */"); strcpy(stmnt, " int "); for (ivar = 0; ivar < nvars; ivar++) { sprintf(s2, "%s_id%s", vars[ivar].name, ivar == nvars - 1 ? ";" : ", "); if (strlen(stmnt) + strlen(s2) >= C_MAX_STMNT) { if (ivar < nvars - 1) { stmnt[strlen(stmnt) - 2] = '\0'; /* truncate trailing ", " */ strcat(stmnt, ";"); cline(stmnt); strcpy(stmnt, " int "); } } strcat(stmnt, s2); } cline(stmnt); if (maxdims > 0) { /* we have dimensioned variables */ cline(""); cline(" /* variable shapes */"); sprintf(stmnt, " int dims[%d];", maxdims); cline(stmnt); } } /* determine if any containers for scalar attributes needed */ scalar_atts = 0; for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].len == 1) { scalar_atts = 1; break; } } if (scalar_atts) { cline(""); cline(" /* containers for scalar attributes */"); for (itype = 0; itype < ntypes; itype++) { for (iatt = 0; iatt < natts; iatt++) { char type_name[12]; /* big enough for longest c typename */ (void)strcpy(type_name, ncctype(atts[iatt].type)); if (atts[iatt].len == 1 && strcmp(type_name, ctypes[itype]) == 0) { sprintf(stmnt, " %s %s_val;", type_name, type_name); cline(stmnt); break; } } } } /* determine if we need any attribute vectors */ vector_atts = 0; for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].len > 1 && atts[iatt].type != NC_CHAR) { vector_atts = 1; break; } } if (vector_atts) { cline(""); cline(" /* attribute vectors */"); for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].len > 1 && atts[iatt].type != NC_CHAR) { sprintf(stmnt, " %s %s_%s[%d];", ncctype(atts[iatt].type), atts[iatt].var == -1 ? "cdf" : vars[atts[iatt].var].name, atts[iatt].name, atts[iatt].len); cline(stmnt); } } } /* create netCDF file, uses NC_CLOBBER mode */ cline(""); cline(" /* enter define mode */"); sprintf(stmnt, " ncid = nccreate(\"%s\", NC_CLOBBER);", filename); cline(stmnt); /* define dimensions from info in dims array */ if (ndims > 0) { cline(""); cline(" /* define dimensions */"); } for (idim = 0; idim < ndims; idim++) { if (dims[idim].size == NC_UNLIMITED) sprintf(stmnt, " %s_dim = ncdimdef(ncid, \"%s\", NC_UNLIMITED);", dims[idim].name, dims[idim].name); else sprintf(stmnt, " %s_dim = ncdimdef(ncid, \"%s\", %dL);", dims[idim].name, dims[idim].name, (int)dims[idim].size); cline(stmnt); } /* define variables from info in vars array */ if (nvars > 0) { cline(""); cline(" /* define variables */"); for (ivar = 0; ivar < nvars; ivar++) { cline(""); for (idim = 0; idim < vars[ivar].ndims; idim++) { sprintf(stmnt, " dims[%d] = %s_dim;", idim, dims[vars[ivar].dims[idim]].name); cline(stmnt); } if (vars[ivar].ndims > 0) { /* a dimensioned variable */ sprintf(stmnt, " %s_id = ncvardef (ncid, \"%s\", %s, %d, dims);", vars[ivar].name, vars[ivar].name, nctype(vars[ivar].type), vars[ivar].ndims); } else { /* a scalar */ sprintf(stmnt, " %s_id = ncvardef (ncid, \"%s\", %s, %d, 0);", vars[ivar].name, vars[ivar].name, nctype(vars[ivar].type), vars[ivar].ndims); } cline(stmnt); } } /* define attributes from info in atts array */ if (natts > 0) { cline(""); cline(" /* assign attributes */"); for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].type == NC_CHAR && atts[iatt].len > 1) { /* string */ val_string = cstrstr((char *)atts[iatt].val, atts[iatt].len); sprintf(stmnt, " ncattput (ncid, %s%s, \"%s\", NC_CHAR, %d, (void *)%s);", atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].name, atts[iatt].var == -1 ? "" : "_id", atts[iatt].name, atts[iatt].len, val_string); cline(stmnt); free(val_string); } else if (atts[iatt].len <= 1) { /* scalar attribute */ val_string = cstring(atts[iatt].type, atts[iatt].val, 0); sprintf(stmnt, " %s_val = %s;", ncctype(atts[iatt].type), val_string); cline(stmnt); sprintf(stmnt, " ncattput (ncid, %s%s, \"%s\", %s, %d,(void *) &%s_val);", atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].name, atts[iatt].var == -1 ? "" : "_id", atts[iatt].name, nctype(atts[iatt].type), atts[iatt].len, ncctype(atts[iatt].type)); cline(stmnt); free(val_string); } else { /* vector attribute */ for (jatt = 0; jatt < atts[iatt].len; jatt++) { val_string = cstring(atts[iatt].type, atts[iatt].val, jatt); sprintf(stmnt, " %s_%s[%d] = %s;", atts[iatt].var == -1 ? "cdf" : vars[atts[iatt].var].name, atts[iatt].name, jatt, val_string); cline(stmnt); free(val_string); } sprintf(stmnt, " ncattput (ncid, %s%s, \"%s\", %s, %d, (void *) %s_%s);", atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].name, atts[iatt].var == -1 ? "" : "_id", atts[iatt].name, nctype(atts[iatt].type), atts[iatt].len, atts[iatt].var == -1 ? "cdf" : vars[atts[iatt].var].name, atts[iatt].name); cline(stmnt); } } } cline(""); cline(" /* leave define mode */"); cline(" ncendef (ncid);"); } /* * From a long line FORTRAN statment, generates the necessary FORTRAN * lines with continuation characters in column 6. If stmnt starts with "*", * it is treated as a one-line comment. Statement labels are *not* handled, * but since we don't generate any labels, we don't care. */ void fline(const char *stmnt) { FILE *fout = stdout; int len = (int)strlen(stmnt); /* type must allow negative values */ int line = 0; static char cont[] = {/* continuation characters */ ' ', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}; if (stmnt[0] == '*') { fputs(stmnt, fout); fputs("\n", fout); return; } while (len > 0) { if (line >= FORT_MAX_LINES) derror("FORTRAN statement too long: %s", stmnt); fprintf(fout, " %c", cont[line++]); fprintf(fout, "%.66s\n", stmnt); len -= 66; if (len > 0) stmnt += 66; } } /* generate FORTRAN code for creating netCDF from in-memory structure */ static void gen_fortran(char *filename) { int idim, ivar, iatt, jatt, itype, maxdims; int vector_atts; char *val_string; char stmnt[FORT_MAX_STMNT]; char s2[H4_MAX_NC_NAME + 2]; /* Need how many netCDF types there are, because we create an array * for each type of attribute. */ int ntypes = 6; /* number of netCDF types, NC_BYTE, ... */ nc_type types[6]; /* at least ntypes */ const char *ftypes[NC_DOUBLE + 1]; int max_atts[NC_DOUBLE + 1]; types[0] = NC_BYTE; types[1] = NC_CHAR; types[2] = NC_SHORT; types[3] = NC_LONG; types[4] = NC_FLOAT; types[5] = NC_DOUBLE; ftypes[(int)NC_BYTE] = "byte"; ftypes[(int)NC_CHAR] = "char"; ftypes[(int)NC_SHORT] = "short"; ftypes[(int)NC_LONG] = "nclong"; ftypes[(int)NC_FLOAT] = "float"; ftypes[(int)NC_DOUBLE] = "double"; /* wrap in main program */ #ifdef MSDOS printf("$include: \"msoft.int\"\n"); #endif sprintf(stmnt, "program fgennc"); fline(stmnt); #ifdef MSDOS printf("$include: \"netcdf.inc\"\n"); #else fline("include 'netcdf.inc'"); #endif /* create necessary declarations */ fline("integer iret"); fline("* netCDF id"); fline("integer ncid"); if (ndims > 0) { fline("* dimension ids"); strcpy(stmnt, "integer "); for (idim = 0; idim < ndims; idim++) { sprintf(s2, "%sdim%s", dims[idim].name, idim == ndims - 1 ? "" : ", "); if (strlen(stmnt) + strlen(s2) >= FORT_MAX_STMNT) { if (idim < ndims - 1) { stmnt[strlen(stmnt) - 2] = '\0'; /* truncate trailing ", " */ fline(stmnt); strcpy(stmnt, "integer "); } } strcat(stmnt, s2); } fline(stmnt); } maxdims = 0; /* most dimensions of any variable */ for (ivar = 0; ivar < nvars; ivar++) if (vars[ivar].ndims > maxdims) maxdims = vars[ivar].ndims; if (nvars > 0) { fline("* variable ids"); strcpy(stmnt, "integer "); for (ivar = 0; ivar < nvars; ivar++) { sprintf(s2, "%sid%s", vars[ivar].name, ivar == nvars - 1 ? "" : ", "); if (strlen(stmnt) + strlen(s2) >= FORT_MAX_STMNT) { if (ivar < nvars - 1) { stmnt[strlen(stmnt) - 2] = '\0'; /* truncate trailing ", " */ fline(stmnt); strcpy(stmnt, "integer "); } } strcat(stmnt, s2); } fline(stmnt); if (maxdims > 0) { /* we have dimensioned variables */ fline("* variable shapes"); sprintf(stmnt, "integer dims(%d)", maxdims); fline(stmnt); } } fline("* corners and edge lengths"); #ifdef MSDOS sprintf(stmnt, "integer*4 corner(%d), edges(%d)", maxdims, maxdims); #else sprintf(stmnt, "integer corner(%d), edges(%d)", maxdims, maxdims); #endif fline(stmnt); /* declarations for variables to be initialized */ if (nvars > 0) { /* we have variables */ fline("* data variables"); for (ivar = 0; ivar < nvars; ivar++) { if (vars[ivar].type != NC_CHAR) { if (vars[ivar].ndims == 0) { /* scalar */ sprintf(stmnt, "%s %s", ncftype(vars[ivar].type), vars[ivar].name); fline(stmnt); } else { sprintf(stmnt, "%s %s(", ncftype(vars[ivar].type), vars[ivar].name); /* reverse dimensions for FORTRAN */ for (idim = vars[ivar].ndims - 1; idim > 0; idim--) { sprintf(s2, "%d,", (int)dims[vars[ivar].dims[idim]].size); strcat(stmnt, s2); } if (vars[ivar].dims[0] == rec_dim) sprintf(s2, "%d)", 1); else sprintf(s2, "%d)", (int)dims[vars[ivar].dims[0]].size); strcat(stmnt, s2); fline(stmnt); } } else { /* for strings, declare multi-char variable */ long dimprod = 1; for (idim = vars[ivar].ndims - 1; idim > 0; idim--) dimprod *= dims[vars[ivar].dims[idim]].size; if (vars[ivar].ndims != 0) { /* not a scalar */ if (vars[ivar].dims[0] != rec_dim) dimprod *= dims[vars[ivar].dims[0]].size; } sprintf(stmnt, "%s*%ld %s", ncftype(vars[ivar].type), dimprod, vars[ivar].name); fline(stmnt); } } } /* determine what attribute vectors needed */ for (itype = 0; itype < ntypes; itype++) max_atts[(int)types[itype]] = 0; vector_atts = 0; for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].len > max_atts[(int)atts[iatt].type]) { max_atts[(int)atts[iatt].type] = atts[iatt].len; vector_atts = 1; } } if (vector_atts) { fline("* attribute vectors"); for (itype = 0; itype < ntypes; itype++) { if (types[itype] != NC_CHAR && max_atts[(int)types[itype]] > 0) { sprintf(stmnt, "%s %sval(%d)", ncftype(types[itype]), ftypes[(int)types[itype]], max_atts[(int)types[itype]]); fline(stmnt); } } } /* create netCDF file, uses NC_CLOBBER mode */ fline("* enter define mode"); sprintf(stmnt, "ncid = nccre (\'%s\', NCCLOB, iret)", filename); fline(stmnt); /* define dimensions from info in dims array */ if (ndims > 0) fline("* define dimensions"); for (idim = 0; idim < ndims; idim++) { if (dims[idim].size == NC_UNLIMITED) sprintf(stmnt, "%sdim = ncddef(ncid, \'%s\', NCUNLIM, iret)", dims[idim].name, dims[idim].name); else sprintf(stmnt, "%sdim = ncddef(ncid, \'%s\', %d, iret)", dims[idim].name, dims[idim].name, (int)dims[idim].size); fline(stmnt); } /* define variables from info in vars array */ if (nvars > 0) { fline("* define variables"); for (ivar = 0; ivar < nvars; ivar++) { for (idim = 0; idim < vars[ivar].ndims; idim++) { sprintf(stmnt, "dims(%d) = %sdim", vars[ivar].ndims - idim, /* reverse dimensions */ dims[vars[ivar].dims[idim]].name); fline(stmnt); } if (vars[ivar].ndims > 0) { /* a dimensioned variable */ sprintf(stmnt, "%sid = ncvdef (ncid, \'%s\', %s, %d, dims, iret)", vars[ivar].name, vars[ivar].name, ftypename(vars[ivar].type), vars[ivar].ndims); } else { /* a scalar */ sprintf(stmnt, "%sid = ncvdef (ncid, \'%s\', %s, %d, 0, iret)", vars[ivar].name, vars[ivar].name, ftypename(vars[ivar].type), vars[ivar].ndims); } fline(stmnt); } } /* define attributes from info in atts array */ if (natts > 0) { fline("* assign attributes"); for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].type == NC_CHAR && atts[iatt].len > 1) { /* string */ val_string = fstrstr((char *)atts[iatt].val, (long)atts[iatt].len); sprintf(stmnt, "call ncaptc(ncid, %s%s, \'%s\', NCCHAR, %d, %s, iret)", atts[iatt].var == -1 ? "NCGLOBAL" : vars[atts[iatt].var].name, atts[iatt].var == -1 ? "" : "id", atts[iatt].name, atts[iatt].len, val_string); fline(stmnt); free(val_string); } else { for (jatt = 0; jatt < atts[iatt].len; jatt++) { val_string = fstring(atts[iatt].type, atts[iatt].val, jatt); sprintf(stmnt, "%sval(%d) = %s", ftypes[(int)atts[iatt].type], jatt + 1, val_string); fline(stmnt); free(val_string); } sprintf(stmnt, "call ncapt(ncid, %s%s, \'%s\', %s, %d, %sval, iret)", atts[iatt].var == -1 ? "NCGLOBAL" : vars[atts[iatt].var].name, atts[iatt].var == -1 ? "" : "id", atts[iatt].name, ftypename(atts[iatt].type), atts[iatt].len, ftypes[(int)atts[iatt].type]); fline(stmnt); } } } fline("* leave define mode"); fline("call ncendf(ncid, iret)"); } /* return C name for netCDF type, given type code */ /* type - netCDF type code */ const char * nctype(nc_type type) { switch (type) { case NC_BYTE: return "NC_BYTE"; case NC_CHAR: return "NC_CHAR"; case NC_SHORT: return "NC_SHORT"; case NC_LONG: return "NC_LONG"; case NC_FLOAT: return "NC_FLOAT"; case NC_DOUBLE: return "NC_DOUBLE"; default: derror("nctype: bad type code"); return NULL; } } /* return FORTRAN name for netCDF type, given type code */ /* type - netCDF type code */ static const char * ftypename(nc_type type) { switch (type) { case NC_BYTE: return "NCBYTE"; case NC_CHAR: return "NCCHAR"; case NC_SHORT: return "NCSHORT"; case NC_LONG: return "NCLONG"; case NC_FLOAT: return "NCFLOAT"; case NC_DOUBLE: return "NCDOUBLE"; default: derror("ftypename: bad type code"); return NULL; } } /* return C type name for netCDF type, given type code */ /* type - netCDF type code */ const char * ncctype(nc_type type) { switch (type) { case NC_BYTE: return "char"; case NC_CHAR: return "char"; case NC_SHORT: return "short"; case NC_LONG: return "nclong"; case NC_FLOAT: return "float"; case NC_DOUBLE: return "double"; default: derror("ncctype: bad type code"); return NULL; } } /* return Fortran type name for netCDF type, given type code */ /* type - netCDF type code */ static const char * ncftype(nc_type type) { switch (type) { case NC_BYTE: return "byte"; /* non-standard */ case NC_CHAR: return "character"; case NC_SHORT: return "integer*2"; case NC_LONG: #ifdef MSDOS return "integer*4"; #else return "integer"; #endif case NC_FLOAT: return "real"; case NC_DOUBLE: return "double precision"; default: derror("ncctype: bad type code"); return NULL; } } /* * Given a netcdf type, a pointer to a vector of values of that type, * and the index of the vector element desired, returns a pointer to a * malloced string representing the value in C. */ /* type - netCDF type code */ /* valp - pointer to vector of values */ /* num - element of vector desired */ static char * cstring(nc_type type, void *valp, int num) { static char *cp, *sp, ch; char *bytep; short *shortp; nclong *longp; float *floatp; double *doublep; switch (type) { case NC_CHAR: sp = cp = (char *)emalloc(7); *cp++ = '\''; ch = *((char *)valp + num); switch (ch) { case '\b': *cp++ = '\\'; *cp++ = 'b'; break; case '\f': *cp++ = '\\'; *cp++ = 'f'; break; case '\n': *cp++ = '\\'; *cp++ = 'n'; break; case '\r': *cp++ = '\\'; *cp++ = 'r'; break; case '\t': *cp++ = '\\'; *cp++ = 't'; break; case '\v': *cp++ = '\\'; *cp++ = 'v'; break; case '\\': *cp++ = '\\'; *cp++ = '\\'; break; /*, tj case '\?': *cp++ = '\\'; *cp++ = '?'; break; */ case '\'': *cp++ = '\\'; *cp++ = '\''; break; default: /*, tj if (ch < '\040' || ch > '\176') { */ /* assumes ASCII */ if (!isprint((unsigned char)ch)) { static char octs[] = "01234567"; int rem = ((unsigned char)ch) % 64; *cp++ = '\\'; *cp++ = octs[((unsigned char)ch) / 64]; /* to get, e.g. '\177' */ *cp++ = octs[rem / 8]; *cp++ = octs[rem % 8]; } else { *cp++ = ch; } break; } *cp++ = '\''; *cp = '\0'; return sp; case NC_BYTE: cp = (char *)emalloc(7); bytep = (char *)valp; (void)sprintf(cp, "'\\%o'", *(bytep + num) & 0xff); return cp; case NC_SHORT: cp = (char *)emalloc(10); shortp = (short *)valp; (void)sprintf(cp, "%d", *(shortp + num)); return cp; case NC_LONG: cp = (char *)emalloc(20); longp = (nclong *)valp; (void)sprintf(cp, "%d", (int)*(longp + num)); return cp; case NC_FLOAT: cp = (char *)emalloc(20); floatp = (float *)valp; (void)sprintf(cp, "%.8g", (double)(*(floatp + num))); return cp; case NC_DOUBLE: cp = (char *)emalloc(20); doublep = (double *)valp; (void)sprintf(cp, "%.16g", *(doublep + num)); return cp; default: derror("cstring: bad type code"); return 0; } } /* * Given a netcdf type, a pointer to a vector of values of that type, * and the index of the vector element desired, returns a pointer to a * malloced string representing the value in FORTRAN. */ /* type - netCDF type code */ /* valp - pointer to vector of values */ /* num - element of vector desired */ char * fstring(nc_type type, void *valp, int num) { static char *cp, *sp; char ch; short *shortp; nclong *longp; float *floatp; double *doublep; switch (type) { case NC_CHAR: case NC_BYTE: sp = cp = (char *)emalloc(10); ch = *((char *)valp + num); if (isprint((unsigned char)ch)) { *cp++ = '\''; *cp++ = ch; *cp++ = '\''; *cp = '\0'; } else { sprintf(cp, "%d", (unsigned char)ch); /* char(%d) ? */ } return sp; case NC_SHORT: cp = (char *)emalloc(10); shortp = (short *)valp; (void)sprintf(cp, "%d", *(shortp + num)); return cp; case NC_LONG: cp = (char *)emalloc(20); longp = (nclong *)valp; (void)sprintf(cp, "%d", (int)*(longp + num)); return cp; case NC_FLOAT: cp = (char *)emalloc(20); floatp = (float *)valp; (void)sprintf(cp, "%.8g", (double)(*(floatp + num))); return cp; case NC_DOUBLE: cp = (char *)emalloc(20); doublep = (double *)valp; (void)sprintf(cp, "%.16g", *(doublep + num)); return cp; default: derror("fstring: bad type code"); return 0; } } /* * Given a pointer to a counted string, returns a pointer to a malloced string * representing the string as a C constant. */ /* valp - pointer to vector of characters*/ /* len - number of characters in valp */ char * cstrstr(char *valp, size_t len) { static char *sp; char *cp; char *istr, *istr0; /* for null-terminated copy */ if (4 * len + 3 != (unsigned)(4 * len + 3)) { derror("too much character data!"); exit(9); } istr0 = istr = (char *)emalloc(len + 1); strncpy(istr, valp, len); istr[len] = '\0'; sp = cp = (char *)emalloc(4 * len + 3); *cp++ = '"'; while (*istr != '\0') { switch (*istr) { case '\b': *cp++ = '\\'; *cp++ = 'b'; break; case '\f': *cp++ = '\\'; *cp++ = 'f'; break; case '\n': *cp++ = '\\'; *cp++ = 'n'; break; case '\r': *cp++ = '\\'; *cp++ = 'r'; break; case '\t': *cp++ = '\\'; *cp++ = 't'; break; case '\v': *cp++ = '\\'; *cp++ = 'v'; break; case '\\': *cp++ = '\\'; *cp++ = '\\'; break; /*, tj case '\?': *cp++ = '\\'; *cp++ = '?'; break; */ case '\'': *cp++ = '\\'; *cp++ = '\''; break; default: /*, tj if (*istr < '\040' || *istr > '\176') { */ /* assumes ASCII */ if (!isprint((unsigned char)*istr)) { static char octs[] = "01234567"; int rem = ((unsigned char)*istr) % 64; *cp++ = '\\'; *cp++ = octs[((unsigned char)*istr) / 64]; /* to get, e.g. '\177' */ *cp++ = octs[rem / 8]; *cp++ = octs[rem % 8]; } else { *cp++ = *istr; } break; } istr++; } *cp++ = '"'; *cp = '\0'; free(istr0); return sp; } /* * Given a pointer to a counted string (not necessarily null-terminated), * returns a pointer to a malloced string representing the string as a * FORTRAN string expression. For example, the string "don't" would yield * the FORTRAN string "'don''t'", and the string "ab\ncd" would yield * "'ab'//char(10)//'cd'". */ /* str - pointer to vector of characters */ /* ilen - number of characters in istr */ char * fstrstr(char *str, size_t ilen) { static char *ostr; char *cp, tstr[12]; int was_print = 0; /* true if last character was printable */ char *istr, *istr0; /* for null-terminated copy */ if (12 * ilen > UINT_MAX) { derror("too much character data!"); exit(9); } istr0 = istr = (char *)emalloc(ilen + 1); strncpy(istr, str, ilen); istr[ilen] = '\0'; ostr = cp = (char *)emalloc(12 * ilen); *ostr = '\0'; if (*istr == '\0') { /* empty string input, not legal in FORTRAN */ strcat(ostr, "' '"); free(istr0); return ostr; } if (isprint((unsigned char)*istr)) { /* handle first character in input */ *cp++ = '\''; if (*istr == '\'') { *cp++ = '\''; *cp++ = '\''; } else { *cp++ = *istr; } *cp = '\0'; was_print = 1; } else { sprintf(tstr, "char(%d)", (unsigned char)*istr); strcat(cp, tstr); cp += strlen(tstr); was_print = 0; } istr++; while (*istr != '\0') { /* handle subsequent characters in input */ if (isprint((unsigned char)*istr)) { if (!was_print) { strcat(cp, "//'"); cp += 3; } if (*istr == '\'') { *cp++ = '\''; *cp++ = '\''; } else { *cp++ = *istr; } *cp = '\0'; was_print = 1; } else { if (was_print) { *cp++ = '\''; *cp = '\0'; } sprintf(tstr, "//char(%d)", (unsigned char)*istr); strcat(cp, tstr); cp += strlen(tstr); was_print = 0; } istr++; } if (was_print) *cp++ = '\''; *cp = '\0'; free(istr0); return ostr; } /* invoke netcdf calls (or generate C or Fortran code) to create netcdf * from in-memory structure. */ void define_netcdf(char *netcdfname) { char *filename; /* output file name */ if (netcdf_name) { /* name given on command line */ filename = netcdf_name; } else { /* construct name from CDL name */ filename = (char *)emalloc(strlen(netcdfname) + 5); (void)strcpy(filename, netcdfname); if (netcdf_flag == 1) (void)strcat(filename, ".nc"); /* new, favored extension */ else if (netcdf_flag == -1) (void)strcat(filename, ".cdf"); /* old, deprecated extension */ } if (netcdf_flag) gen_netcdf(filename); /* create netcdf */ if (c_flag) /* create C code to create netcdf */ gen_c(filename); if (fortran_flag) /* create Fortran code to create netcdf */ gen_fortran(filename); } hdf4-hdf4.3.1/mfhdf/ncgen/generic.h000066400000000000000000000007431503061704500167760ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef H4NC_GENERIC_H #define H4NC_GENERIC_H union generic { /* used to hold any kind of fill_value */ double doublev; float floatv; nclong longv; short shortv; char charv; }; #endif /* H4NC_GENERIC_H */ hdf4-hdf4.3.1/mfhdf/ncgen/genlib.c000066400000000000000000000025221503061704500166120ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include "ncgen.h" #include "genlib.h" int lineno = 1; int derror_count = 0; /* * For logging error conditions. */ void derror(const char *fmt, ...) { va_list args; if (lineno == 1) fprintf(stderr, "%s: %s: ", progname, cdlname); else fprintf(stderr, "%s: %s line %d: ", progname, cdlname, lineno); va_start(args, fmt); (void)vfprintf(stderr, fmt, args); va_end(args); (void)fputc('\n', stderr); (void)fflush(stderr); /* to ensure log files are current */ derror_count++; } void * emalloc(size_t size) { void *p = NULL; if (size == 0) return NULL; p = (void *)malloc(size); if (p == NULL) { derror("out of memory\n"); exit(3); } return p; } /* Check return from realloc * * NOTE: realloc(NULL, 0) behavior is implementation-defined */ void * erealloc(void *ptr, size_t size) { void *p = NULL; p = (void *)realloc(ptr, size); if (p == NULL) { derror("out of memory"); exit(3); } return p; } hdf4-hdf4.3.1/mfhdf/ncgen/genlib.h000066400000000000000000000024731503061704500166240ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef H4NC_GENLIB_H #define H4NC_GENLIB_H extern char *progname; /* for error messages */ extern char *cdlname; /* for error messages */ #ifdef __cplusplus extern "C" { #endif extern void derror(const char *fmt, ...); extern void *emalloc(size_t size); extern void *erealloc(void *ptr, size_t size); extern void usage(void); extern void yyerror(char *); extern int yyparse(void); extern void put_variable(void *); /* generate.c */ void cline(const char *stmnt); void fline(const char *stmnt); const char *nctype(nc_type); const char *ncctype(nc_type); char *cstrstr(char *, size_t); char *fstrstr(char *, size_t); char *fstring(nc_type, void *, int); void define_netcdf(char *netcdfname); /* load.c */ void load_netcdf(void *rec_start); /* getfill.c */ void nc_fill(nc_type, long, void *, union generic); void nc_getfill(nc_type, union generic *); void nc_putfill(nc_type, void *, union generic *); /* init.c */ void init_netcdf(void); /* close.c */ void close_netcdf(void); #ifdef __cplusplus } #endif #endif /* H4NC_GENLIB_H */ hdf4-hdf4.3.1/mfhdf/ncgen/getfill.c000066400000000000000000000064201503061704500170010ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include "mfhdf.h" #include "generic.h" #include "genlib.h" /* * Given netCDF type, return a default fill_value appropriate for * that type. */ void nc_getfill(nc_type type, union generic *gval) { switch (type) { case NC_CHAR: gval->charv = FILL_CHAR; return; case NC_BYTE: gval->charv = FILL_BYTE; return; case NC_SHORT: gval->shortv = FILL_SHORT; return; case NC_LONG: gval->longv = FILL_LONG; return; case NC_FLOAT: gval->floatv = FILL_FLOAT; return; case NC_DOUBLE: gval->doublev = FILL_DOUBLE; return; default: derror("nc_getfill: unrecognized type"); } } /* type - netcdf type code */ /* num - number of values to fill */ /* datap - where to start filling */ /* fill_val - value to use */ void nc_fill(nc_type type, long num, void *datp, union generic fill_val) { char *char_valp = NULL; /* pointers used to accumulate data values */ short *short_valp = NULL; nclong *long_valp = NULL; float *float_valp = NULL; double *double_valp = NULL; switch (type) { case NC_CHAR: case NC_BYTE: char_valp = (char *)datp; break; case NC_SHORT: short_valp = (short *)datp; break; case NC_LONG: long_valp = (nclong *)datp; break; case NC_FLOAT: float_valp = (float *)datp; break; case NC_DOUBLE: double_valp = (double *)datp; break; default: break; } while (num--) { switch (type) { case NC_CHAR: case NC_BYTE: *char_valp++ = fill_val.charv; break; case NC_SHORT: *short_valp++ = fill_val.shortv; break; case NC_LONG: *long_valp++ = fill_val.longv; break; case NC_FLOAT: *float_valp++ = fill_val.floatv; break; case NC_DOUBLE: *double_valp++ = fill_val.doublev; break; default: break; } } } /* * Given netCDF type, put a value of that type into a fill_value */ /* val - value of type to be put */ /* gval - where the value is to be put */ void nc_putfill(nc_type type, void *val, union generic *gval) { switch (type) { case NC_CHAR: case NC_BYTE: gval->charv = *(char *)val; return; case NC_SHORT: gval->shortv = *(short *)val; return; case NC_LONG: gval->longv = *(nclong *)val; return; case NC_FLOAT: gval->floatv = *(float *)val; return; case NC_DOUBLE: gval->doublev = *(double *)val; return; default: derror("nc_putfill: unrecognized type"); } } hdf4-hdf4.3.1/mfhdf/ncgen/init.c000066400000000000000000000032031503061704500163120ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include "ncgen.h" #include "genlib.h" extern int netcdf_flag; extern int c_flag; extern int fortran_flag; struct dims dims[H4_MAX_NC_DIMS]; /* table of netcdf dimensions */ int ncid; /* handle for netCDF */ int ndims; /* number of dimensions declared for netcdf */ int nvars; /* number of variables declared for netcdf */ int natts; /* number of attributes */ int nvdims; /* number of dimensions for variables */ int dimnum; /* dimension number index for variables */ int varnum; /* variable number index for attributes */ int valnum; /* value number index for attributes */ int rec_dim; /* number of the unlimited dimension, if any */ long var_len; /* variable length (product of dimensions) */ int var_size; /* size of each element of variable */ long netcdf_record_number; /* current record number for variables */ struct vars vars[H4_MAX_NC_VARS]; /* should be a malloc'ed list, not an array */ struct atts atts[H4_MAX_NC_ATTRS]; /* should be a malloc'ed list, not an array */ extern void clearout(); void init_netcdf() { /* initialize global counts, flags */ clearout(); /* reset symbol table to empty */ ndims = 0; nvars = 0; rec_dim = -1; /* means no unlimited dimension (yet) */ } hdf4-hdf4.3.1/mfhdf/ncgen/load.c000066400000000000000000000421771503061704500163030ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include #include "ncgen.h" #include "genlib.h" extern int netcdf_flag; extern int c_flag; extern int fortran_flag; void load_netcdf(void *rec_start) /* write out record from in-memory structure */ { int idim; int istat = 0; long coords[H4_MAX_VAR_DIMS]; long edges[H4_MAX_VAR_DIMS]; char *charvalp = NULL; short *shortvalp = NULL; nclong *longvalp = NULL; float *floatvalp = NULL; double *doublevalp = NULL; /* load values into variable */ switch (vars[varnum].type) { case NC_CHAR: case NC_BYTE: charvalp = (char *)rec_start; break; case NC_SHORT: shortvalp = (short *)rec_start; break; case NC_LONG: longvalp = (nclong *)rec_start; break; case NC_FLOAT: floatvalp = (float *)rec_start; break; case NC_DOUBLE: doublevalp = (double *)rec_start; break; default: break; } /* initialize coords to upper left corner (0,0,0,...) */ if (vars[varnum].dims[0] == rec_dim) { coords[0] = netcdf_record_number; edges[0] = 1; } else { coords[0] = 0; edges[0] = dims[vars[varnum].dims[0]].size; } for (idim = 1; idim < vars[varnum].ndims; idim++) { coords[idim] = 0; edges[idim] = dims[vars[varnum].dims[idim]].size; } switch (vars[varnum].type) { case NC_CHAR: case NC_BYTE: istat = ncvarput(ncid, varnum, coords, edges, (void *)charvalp); break; case NC_SHORT: istat = ncvarput(ncid, varnum, coords, edges, (void *)shortvalp); break; case NC_LONG: istat = ncvarput(ncid, varnum, coords, edges, (void *)longvalp); break; case NC_FLOAT: istat = ncvarput(ncid, varnum, coords, edges, (void *)floatvalp); break; case NC_DOUBLE: istat = ncvarput(ncid, varnum, coords, edges, (void *)doublevalp); break; default: break; } if (istat == -1) derror("error putting value for variable %s", vars[varnum].name); } /* * Remove trailing zeros (after decimal point) but not trailing decimal * point from ss, a string representation of a floating-point number that * might include an exponent part. */ /* ss - returned string representing dd */ static void tztrim(char *ss) { char *cp, *ep; cp = ss; if (*cp == '-') cp++; while (isdigit((int)*cp) || *cp == '.') cp++; if (*--cp == '.') return; ep = cp + 1; while (*cp == '0') cp--; cp++; if (cp == ep) return; while (*ep) *cp++ = *ep++; *cp = '\0'; return; } /* generate C to put netCDF record from in-memory data */ static void gen_load_c(void *rec_start) { int idim, ival; char *val_string; char *charvalp = NULL; short *shortvalp = NULL; nclong *longvalp = NULL; float *floatvalp = NULL; double *doublevalp = NULL; char stmnt[C_MAX_STMNT]; size_t stmnt_len; char s2[H4_MAX_NC_NAME + 2]; /* initialize coords to upper left corner (rec_num,0,0,...) */ cline(""); sprintf(stmnt, " {\t\t\t/* store %s */", vars[varnum].name); cline(stmnt); if (vars[varnum].ndims > 0) { sprintf(stmnt, " static long %s_start[] = {", vars[varnum].name); if (vars[varnum].dims[0] == rec_dim) sprintf(s2, "%ld%s", netcdf_record_number, 0 < vars[varnum].ndims - 1 ? ", " : "};"); else sprintf(s2, "%d%s", 0, 0 < vars[varnum].ndims - 1 ? ", " : "};"); strcat(stmnt, s2); for (idim = 1; idim < vars[varnum].ndims; idim++) { sprintf(s2, "%d%s", 0, idim < vars[varnum].ndims - 1 ? ", " : "};"); strcat(stmnt, s2); } cline(stmnt); /* initialize edge lengths from upper left corner */ sprintf(stmnt, " static long %s_edges[] = {", vars[varnum].name); if (vars[varnum].dims[0] == rec_dim) sprintf(s2, "%d%s", 1, 0 < vars[varnum].ndims - 1 ? ", " : "};"); else sprintf(s2, "%ld%s", dims[vars[varnum].dims[0]].size, 0 < vars[varnum].ndims - 1 ? ", " : "};"); strcat(stmnt, s2); for (idim = 1; idim < vars[varnum].ndims; idim++) { sprintf(s2, "%ld%s", dims[vars[varnum].dims[idim]].size, idim < vars[varnum].ndims - 1 ? ", " : "};"); strcat(stmnt, s2); } cline(stmnt); /* load variable with data values using static initialization */ sprintf(stmnt, " static %s %s[] = {", ncctype(vars[varnum].type), vars[varnum].name); stmnt_len = strlen(stmnt); switch (vars[varnum].type) { case NC_CHAR: val_string = cstrstr((char *)rec_start, var_len); sprintf(s2, "%s", val_string); strcat(stmnt, s2); free(val_string); break; default: switch (vars[varnum].type) { case NC_BYTE: charvalp = (char *)rec_start; break; case NC_SHORT: shortvalp = (short *)rec_start; break; case NC_LONG: longvalp = (nclong *)rec_start; break; case NC_FLOAT: floatvalp = (float *)rec_start; break; case NC_DOUBLE: doublevalp = (double *)rec_start; break; default: break; } for (ival = 0; ival < var_len - 1; ival++) { switch (vars[varnum].type) { case NC_BYTE: sprintf(s2, "%d, ", *charvalp++); break; case NC_SHORT: sprintf(s2, "%d, ", *shortvalp++); break; case NC_LONG: sprintf(s2, "%d, ", (int)*longvalp++); break; case NC_FLOAT: sprintf(s2, "%.8g, ", (double)(*floatvalp++)); break; case NC_DOUBLE: sprintf(s2, "%#.16g", *doublevalp++); tztrim(s2); strcat(s2, ", "); break; default: break; } stmnt_len += strlen(s2); if (stmnt_len < C_MAX_STMNT) strcat(stmnt, s2); else { cline(stmnt); strcpy(stmnt, s2); stmnt_len = strlen(stmnt); } } for (; ival < var_len; ival++) { switch (vars[varnum].type) { case NC_BYTE: sprintf(s2, "%d", *charvalp); break; case NC_SHORT: sprintf(s2, "%d", *shortvalp); break; case NC_LONG: sprintf(s2, "%d", (int)*longvalp); break; case NC_FLOAT: sprintf(s2, "%.8g", (double)(*floatvalp)); break; case NC_DOUBLE: sprintf(s2, "%#.16g", *doublevalp++); tztrim(s2); break; default: break; } stmnt_len += strlen(s2); if (stmnt_len < C_MAX_STMNT) strcat(stmnt, s2); else { cline(stmnt); strcpy(stmnt, s2); stmnt_len = strlen(stmnt); } } break; } strcat(stmnt, "};"); cline(stmnt); sprintf(stmnt, " ncvarput(ncid, %s_id, %s_start, %s_edges, (void *)%s);", vars[varnum].name, vars[varnum].name, vars[varnum].name, vars[varnum].name); cline(stmnt); cline(" }"); } else { /* scalar variables */ /* load variable with data values using static initialization */ sprintf(stmnt, " static %s %s = {", ncctype(vars[varnum].type), vars[varnum].name); switch (vars[varnum].type) { case NC_CHAR: val_string = cstrstr((char *)rec_start, var_len); sprintf(s2, "%s", val_string); strcat(stmnt, s2); free(val_string); break; case NC_BYTE: charvalp = (char *)rec_start; sprintf(s2, "%d", *charvalp); strcat(stmnt, s2); break; case NC_SHORT: shortvalp = (short *)rec_start; sprintf(s2, "%d", *shortvalp); strcat(stmnt, s2); break; case NC_LONG: longvalp = (nclong *)rec_start; sprintf(s2, "%d", (int)*longvalp); strcat(stmnt, s2); break; case NC_FLOAT: floatvalp = (float *)rec_start; sprintf(s2, "%.8g", (double)(*floatvalp)); strcat(stmnt, s2); break; case NC_DOUBLE: doublevalp = (double *)rec_start; sprintf(s2, "%#.16g", *doublevalp++); tztrim(s2); strcat(stmnt, s2); break; default: break; } strcat(stmnt, "};"); cline(stmnt); sprintf(stmnt, " ncvarput1(ncid, %s_id, (long *)0, (void *)&%s);", vars[varnum].name, vars[varnum].name); cline(stmnt); cline(" }"); } } /* * Add to a partial Fortran statement, checking if it's too long. If it is too * long, output the first part of it as a single statement with continuation * characters and start a new (probably invalid) statement with the remainder. * This will cause a Fortran compiler error, but at least all the information * will be available. */ /* s - source string of stement being built */ /* t - string to be appended to source */ /* slenp - pointer to length of source string */ static void fstrcat(char *s, const char *t, size_t *slenp) { *slenp += strlen(t); if (*slenp >= FORT_MAX_STMNT) { derror("FORTRAN statement too long: %s", s); fline(s); strcpy(s, t); *slenp = strlen(s); } else { strcat(s, t); } } static void gen_load_fortran(void *rec_start) /* make Fortran to put record */ { int idim, ival; char *val_string; char *charvalp; short *shortvalp; nclong *longvalp; float *floatvalp; double *doublevalp; char stmnt[FORT_MAX_STMNT]; size_t stmnt_len; char s2[H4_MAX_NC_NAME + 2]; /* initialize coords to upper left corner (1,1,...,rec_num) */ sprintf(stmnt, "* store %s", vars[varnum].name); fline(stmnt); if (vars[varnum].ndims > 0) { for (idim = 1; idim < vars[varnum].ndims; idim++) { sprintf(stmnt, "corner(%d) = 1", idim); fline(stmnt); } if (vars[varnum].dims[0] == rec_dim) { sprintf(stmnt, "corner(%d) = %d", idim, (int)(netcdf_record_number + 1)); fline(stmnt); } else { sprintf(stmnt, "corner(%d) = 1", idim); fline(stmnt); } for (idim = vars[varnum].ndims - 1; idim > 0; idim--) { sprintf(stmnt, "edges(%d) = %d", vars[varnum].ndims - idim, (int)dims[vars[varnum].dims[idim]].size); fline(stmnt); } if (vars[varnum].dims[0] == rec_dim) { sprintf(stmnt, "edges(%d) = 1", vars[varnum].ndims - idim); fline(stmnt); } else { sprintf(stmnt, "edges(%d) = %d", vars[varnum].ndims - idim, (int)dims[vars[varnum].dims[0]].size); fline(stmnt); } } else { /* scalar variables */ fline("corner(1) = 1"); fline("edges(1) = 1"); } /* load variable with data values */ if (vars[varnum].type != NC_CHAR) { sprintf(stmnt, "data %s /", vars[varnum].name); stmnt_len = strlen(stmnt); switch (vars[varnum].type) { case NC_BYTE: charvalp = (char *)rec_start; for (ival = 0; ival < var_len - 1; ival++) { val_string = fstring(NC_BYTE, (void *)charvalp++, 0); sprintf(s2, "%s, ", val_string); fstrcat(stmnt, s2, &stmnt_len); free(val_string); } val_string = fstring(NC_BYTE, (void *)charvalp++, 0); fstrcat(stmnt, val_string, &stmnt_len); free(val_string); break; case NC_SHORT: shortvalp = (short *)rec_start; for (ival = 0; ival < var_len - 1; ival++) { sprintf(s2, "%d, ", *shortvalp++); fstrcat(stmnt, s2, &stmnt_len); } sprintf(s2, "%d", *shortvalp); fstrcat(stmnt, s2, &stmnt_len); break; case NC_LONG: longvalp = (nclong *)rec_start; for (ival = 0; ival < var_len - 1; ival++) { sprintf(s2, "%d, ", (int)*longvalp++); fstrcat(stmnt, s2, &stmnt_len); } sprintf(s2, "%d", (int)*longvalp); fstrcat(stmnt, s2, &stmnt_len); break; case NC_FLOAT: floatvalp = (float *)rec_start; for (ival = 0; ival < var_len - 1; ival++) { sprintf(s2, "%.8g, ", (double)(*floatvalp++)); fstrcat(stmnt, s2, &stmnt_len); } sprintf(s2, "%.8g", (double)(*floatvalp)); fstrcat(stmnt, s2, &stmnt_len); break; case NC_DOUBLE: doublevalp = (double *)rec_start; for (ival = 0; ival < var_len - 1; ival++) { sprintf(s2, "%#.16g", *doublevalp++); tztrim(s2); fstrcat(s2, ", ", &stmnt_len); fstrcat(stmnt, s2, &stmnt_len); } sprintf(s2, "%#.16g", *doublevalp++); tztrim(s2); fstrcat(stmnt, s2, &stmnt_len); break; default: break; } fstrcat(stmnt, "/", &stmnt_len); fline(stmnt); sprintf(stmnt, "call ncvpt(ncid, %sid, corner, edges, %s, iret)", vars[varnum].name, vars[varnum].name); } else { /* for strings, call ncvptc() */ long dimprod = 1; val_string = fstrstr((char *)rec_start, var_len); sprintf(stmnt, "%s = %s", vars[varnum].name, val_string); free(val_string); stmnt_len = strlen(stmnt); fstrcat(stmnt, " // char(0)", &stmnt_len); fline(stmnt); for (idim = vars[varnum].ndims - 1; idim > 0; idim--) dimprod *= dims[vars[varnum].dims[idim]].size; if (vars[varnum].dims[0] != rec_dim) dimprod *= dims[vars[varnum].dims[0]].size; sprintf(stmnt, "call ncvptc(ncid, %sid, corner, edges, %s, %ld, iret)", vars[varnum].name, vars[varnum].name, dimprod); } fline(stmnt); } /* invoke netcdf calls (or generate C or Fortran code) to load netcdf variable * from in-memory data. Assumes following global variables set from yacc * parser: * int varnum - number of variable to be loaded. * struct vars[varnum] - structure containing info on variable, specifically * name, type, ndims, dims, fill_value, has_data * int rec_dim - id of record dimension, or -1 if none * struct dims[] - structure containing name and size of dimensions. * int netcdf_record_number - number of current record for this variable. */ /* rec_start - points to data to be loaded */ void put_variable(void *rec_start) { if (netcdf_flag) load_netcdf(rec_start); /* put variable values (one record's worth) */ if (c_flag) /* create C code to put values */ gen_load_c(rec_start); if (fortran_flag) /* create Fortran code to put values */ gen_load_fortran(rec_start); } hdf4-hdf4.3.1/mfhdf/ncgen/main.c000066400000000000000000000061051503061704500162770ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include "h4getopt.h" #include "ncgen.h" #include "genlib.h" char *progname; /* for error messages */ char *cdlname; int c_flag; int fortran_flag; int netcdf_flag; char *netcdf_name = NULL; /* name of output netCDF file to write */ extern FILE *yyin; extern FILE *yyout; void usage() { fprintf(stderr, "Usage: %s [-V] [ -b ] [ -c ] [ -f ] [ -o outfile] [ file ... ]\n", progname); fprintf(stderr, " [-V]\t\t Display version of the HDF4 library and exit\n"); fprintf(stderr, " [-b]\t\t For binary netCDF output, '.nc' extension\n"); fprintf(stderr, " [-c]\t\t For C output\n"); fprintf(stderr, " [-f]\t\t For Fortran output\n"); fprintf(stderr, " [-o ] Explicitly specify output file name\n"); exit(8); } int main(int argc, char *argv[]) { int c; FILE *fp; yyin = stdin; yyout = stdout; h4opterr = 1; /* print error message if bad option */ progname = argv[0]; cdlname = "-"; c_flag = 0; fortran_flag = 0; netcdf_flag = 0; while ((c = h4getopt(argc, argv, "Vbcfno:")) != EOF) switch (c) { case 'V': /* for c output */ printf("%s, %s\n\n", argv[0], LIBVER_STRING); ; exit(EXIT_SUCCESS); case 'c': /* for c output */ c_flag = 1; break; case 'f': /* for fortran output */ fortran_flag = 1; break; case 'b': /* for binary netcdf output, ".nc" extension */ netcdf_flag = 1; break; case 'n': /* old version of -b, uses ".cdf" extension */ netcdf_flag = -1; break; case 'o': /* to explicitly specify output name */ netcdf_flag = 1; netcdf_name = (char *)emalloc(strlen(h4optarg) + 1); if (!netcdf_name) { derror("%s: out of memory", progname); exit(1); } strcpy(netcdf_name, h4optarg); break; case '?': usage(); break; } if (fortran_flag && c_flag) { derror("Only one of -c or -f may be specified"); exit(8); } argc -= h4optind; argv += h4optind; if (argc > 1) { derror("%s: only one input file argument permitted", progname); exit(6); } fp = stdin; if (argc > 0 && strcmp(argv[0], "-") != 0) { if ((fp = fopen(argv[0], "r")) == NULL) { derror("can't open file %s for reading: ", argv[0]); perror(""); exit(7); } cdlname = (char *)emalloc(1 + strlen(argv[0])); strcpy(cdlname, argv[0]); } yyin = fp; return (yyparse()); } hdf4-hdf4.3.1/mfhdf/ncgen/ncgen.1000066400000000000000000000335511503061704500163700ustar00rootroot00000000000000.TH NCGEN 1 "$Date$" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA UTILITIES" .SH NAME ncgen \- From a CDL file generate a netCDF file, a C program, or a Fortran program .SH SYNOPSIS .HP ncgen .nh \%[-b] \%[-c] \%[-f] \%[-n] \%[-o \fIoutput_file\fP] \%\fIinput_file\fP .hy .ft .SH DESCRIPTION \fBncgen\fP generates either a netCDF file, or C or Fortran source code to create a netCDF file. The input to \fBncgen\fP is a description of a netCDF file in a small language known as CDL (network Common Data form Language), described below. If no options are specified in invoking \fBncgen\fP, it merely checks the syntax of the input CDL file, producing error messages for any violations of CDL syntax. Other options can be used to create the corresponding netCDF file, to generate a C program that uses the netCDF C interface to create the netCDF file, or to generate a Fortran program that uses the netCDF Fortran interface to create the same netCDF file. .LP \fBncgen\fP may be used with the companion program \fBncdump\fP to perform some simple operations on netCDF files. For example, to rename a dimension in a netCDF file, use \fBncdump\fP to get a CDL version of the netCDF file, edit the CDL file to change the name of the dimensions, and use \fBncgen\fP to generate the corresponding netCDF file from the edited CDL file. .SH OPTIONS .IP "\fB-b\fP" Create a (binary) netCDF file. If the \fB-o\fP option is absent, a default file name will be constructed from the netCDF name (specified after the \fBnetcdf\fP keyword in the input) by appending the `.nc' extension. If a file already exists with the specified name, it will be overwritten. .IP "\fB-c\fP" Generate .B C source code that will create a netCDF file matching the netCDF specification. The C source code is written to standard output. .IP "\fB-f\fP" Generate .B Fortran source code that will create a netCDF file matching the netCDF specification. The Fortran source code is written to standard output. .IP "\fB-o\fP \fRoutputfile\fP" Name for the netCDF file created. If this option is specified, it implies the "\fB-b\fP" option. (This option is necessary because netCDF files cannot be written directly to standard output, since standard output is not seekable.) .IP "\fB-n\fP" Like \fB-b\fP option, except creates netCDF file with the obsolete `.cdf' extension instead of the `.nc' extension, in the absence of an output filename specified by the \fB-O\fP option. This option is only supported for backward compatibility. .SH EXAMPLES .LP Check the syntax of the CDL file `\fBfoo.cdl\fP': .RS .HP ncgen foo.cdl .RE .LP From the CDL file `\fBfoo.cdl\fP', generate an equivalent binary netCDF file named `\fBx.nc\fP': .RS .HP ncgen -o x.nc foo.cdl .RE .LP From the CDL file `\fBfoo.cdl\fP', generate a C program containing the netCDF function invocations necessary to create an equivalent binary netCDF file named `\fBx.nc\fP': .RS .HP ncgen -c -o x.nc foo.cdl .RE .LP .SH USAGE .SS "CDL Syntax Summary" .LP Below is an example of CDL syntax, describing a netCDF file with several named dimensions (lat, lon, and time), variables (Z, t, p, rh, lat, lon, time), variable attributes (units, long_name, valid_range, _FillValue), and some data. CDL keywords are in boldface. (This example is intended to illustrate the syntax; a real CDL file would have a more complete set of attributes so that the data would be more completely self-describing.) .RS .nf \fBnetcdf\fP foo { // an example netCDF specification in CDL \fBdimensions\fP: lat = 10, lon = 5, time = \fBunlimited\fP ; \fBvariables\fP: \fBlong\fP lat(lat), lon(lon), time(time); \fBfloat\fP Z(time,lat,lon), t(time,lat,lon); \fBdouble\fP p(time,lat,lon); \fBlong\fP rh(time,lat,lon); // variable attributes lat:long_name = "latitude"; lat:units = "degrees_north"; lon:long_name = "longitude"; lon:units = "degrees_east"; time:units = "seconds since 1992-1-1 00:00:00"; Z:units = "geopotential meters"; Z:valid_range = 0., 5000.; p:_FillValue = -9999.; rh:_FillValue = -1; \fBdata\fP: lat = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90; lon = -140, -118, -96, -84, -52; } .fi .RE .LP All CDL statements are terminated by a semicolon. Spaces, tabs, and newlines can be used freely for readability. Comments may follow the characters `//' on any line. .LP A CDL description consists of three optional parts: \fIdimensions\fP, \fIvariables\fP, and \fIdata\fP, beginning with the keyword .BR dimensions: , .BR variables: , and .BR data , respectively. The variable part may contain \fIvariable declarations\fP and \fIattribute assignments\fP. .LP A netCDF \fIdimension\fP is used to define the shape of one or more of the multidimensional variables contained in the netCDF file. A netCDF dimension has a name and a size. At most one dimension in a netCDF file can have the \fBunlimited\fP size, which means a variable using this dimension can grow to any length (like a record number in a file). .LP A \fIvariable\fP represents a multidimensional array of values of the same type. A variable has a name, a data type, and a shape described by its list of dimensions. Each variable may also have associated \fIattributes\fP (see below) as well as data values. The name, data type, and shape of a variable are specified by its declaration in the \fIvariable\fP section of a CDL description. A variable may have the same name as a dimension; by convention such a variable is one-dimensional and contains coordinates of the dimension it names. Dimensions need not have corresponding variables. .LP A netCDF \fIattribute\fP contains information about a netCDF variable or about the whole netCDF dataset. Attributes are used to specify such properties as units, special values, maximum and minimum valid values, scaling factors, offsets, and parameters. Attribute information is represented by single values or arrays of values. For example, "units" is an attribute represented by a character array such as "celsius". An attribute has an associated variable, a name, a data type, a length, and a value. In contrast to variables that are intended for data, attributes are intended for metadata (data about data). .LP In CDL, an attribute is designated by a variable and attribute name, separated by `:'. It is possible to assign \fIglobal\fP attributes not associated with any variable to the netCDF as a whole by using `:' before the attribute name. The data type of an attribute in CDL is derived from the type of the value assigned to it. The length of an attribute is the number of data values assigned to it, or the number of characters in the character string assigned to it. Multiple values are assigned to non-character attributes by separating the values with commas. All values assigned to an attribute must be of the same type. .LP The names for CDL dimensions, variables, and attributes must begin with an alphabetic character or `_', and subsequent characters may be alphanumeric or `_' or `-'. .LP The optional \fIdata\fP section of a CDL specification is where netCDF variables may be initialized. The syntax of an initialization is simple: a variable name, an equals sign, and a comma-delimited list of constants (possibly separated by spaces, tabs and newlines) terminated with a semicolon. For multi-dimensional arrays, the last dimension varies fastest. Thus row-order rather than column order is used for matrices. If fewer values are supplied than are needed to fill a variable, it is extended with a type-dependent `fill value', which can be overridden by supplying a value for a distinguished variable attribute named `_FillValue'. The types of constants need not match the type declared for a variable; coercions are done to convert integers to floating point, for example. .SS "Primitive Data Types" .LP .RS .nf \fBchar\fP characters \fBbyte\fP 8-bit data \fBshort\fP 16-bit signed integers \fBlong\fP 32-bit signed integers \fBint\fP (synonymous with \fBlong\fP) \fBfloat\fP IEEE single precision floating point (32 bits) \fBreal\fP (synonymous with \fBfloat\fP) \fBdouble\fP IEEE double precision floating point (64 bits) .fi .RE .LP Except for the added data-type \fBbyte\fP and the lack of \fBunsigned\fP, CDL supports the same primitive data types as C. The names for the primitive data types are reserved words in CDL, so the names of variables, dimensions, and attributes must not be type names. In declarations, type names may be specified in either upper or lower case. .LP Bytes differ from characters in that they are intended to hold a full eight bits of data, and the zero byte has no special significance, as it does for character data. \fBncgen\fP converts \fBbyte\fP declarations to \fBchar\fP declarations in the output C code and to the nonstandard \fBBYTE\fP declaration in output Fortran code. .LP Shorts can hold values between -32768 and 32767. \fBncgen\fP converts \fBshort\fP declarations to \fBshort\fP declarations in the output C code and to the nonstandard \fBINTEGER*2\fP declaration in output Fortran code. .LP Longs can hold values between -2147483648 and 2147483647. \fBncgen\fP converts \fBlong\fP declarations to \fBlong\fP declarations in the output C code and to \fBINTEGER\fP declarations in output Fortran code. \fBint\fP and \fBinteger\fP are accepted as synonyms for \fBlong\fP in CDL declarations. Now that there are platforms with 64-bit representations for C longs, it may be better to use the \fBint\fP synonym to avoid confusion. .LP Floats can hold values between about -3.4+38 and 3.4+38. Their external representation is as 32-bit IEEE normalized single-precision floating point numbers. \fBncgen\fP converts \fBfloat\fP declarations to \fBfloat\fP declarations in the output C code and to \fBREAL\fP declarations in output Fortran code. \fBreal\fP is accepted as a synonym for \fBfloat\fP in CDL declarations. .LP Doubles can hold values between about -1.7+308 and 1.7+308. Their external representation is as 64-bit IEEE standard normalized double-precision floating point numbers. \fBncgen\fP converts \fBdouble\fP declarations to \fBdouble\fP declarations in the output C code and to \fBDOUBLE PRECISION\fP declarations in output Fortran code. .LP .SS "CDL Constants" .LP Constants assigned to attributes or variables may be of any of the basic netCDF types. The syntax for constants is similar to C syntax, except that type suffixes must be appended to shorts and floats to distinguish them from longs and doubles. .LP A \fIbyte\fP constant is represented by a single character or multiple character escape sequence enclosed in single quotes. For example, .RS .nf 'a' // ASCII `a' '\\0' // a zero byte '\\n' // ASCII newline character '\\33' // ASCII escape character (33 octal) '\\x2b' // ASCII plus (2b hex) '\\377' // 377 octal = 255 decimal, non-ASCII .fi .RE .LP Character constants are enclosed in double quotes. A character array may be represented as a string enclosed in double quotes. The usual C string escape conventions are honored. For example .RS .nf "a" // ASCII `a' "Two\\nlines\\n" // a 10-character string with two embedded newlines "a bell:\\007" // a string containing an ASCII bell .fi .RE Note that the netCDF character array "a" would fit in a one-element variable, since no terminating NULL character is assumed. However, a zero byte in a character array is interpreted as the end of the significant characters by the \fBncdump\fP program, following the C convention. Therefore, a NULL byte should not be embedded in a character string unless at the end: use the \fIbyte\fP data type instead for byte arrays that contain the zero byte. NetCDF and CDL have no string type, but only fixed-length character arrays, which may be multi-dimensional. .LP \fIshort\fP integer constants are intended for representing 16-bit signed quantities. The form of a \fIshort\fP constant is an integer constant with an `s' or `S' appended. If a \fIshort\fP constant begins with `0', it is interpreted as octal, except that if it begins with `0x', it is interpreted as a hexadecimal constant. For example: .RS .nf -2s // a short -2 0123s // octal 0x7ffs //hexadecimal .fi .RE .LP \fILong\fP integer constants are intended for representing 32-bit signed quantities. The form of a \fIlong\fP constant is an ordinary integer constant, although it is acceptable to append an optional `l' or `L'. If a \fIlong\fP constant begins with `0', it is interpreted as octal, except that if it begins with `0x', it is interpreted as a hexadecimal constant. Examples of valid \fIlong\fP constants include: .RS .nf -2 1234567890L 0123 // octal 0x7ff // hexadecimal .fi .RE .LP Floating point constants of type \fIfloat\fP are appropriate for representing floating point data with about seven significant digits of precision. The form of a \fIfloat\fP constant is the same as a C floating point constant with an `f' or `F' appended. For example the following are all acceptable \fIfloat\fP constants: .RS .nf -2.0f 3.14159265358979f // will be truncated to less precision 1.f \[char46]1f .fi .RE .LP Floating point constants of type \fIdouble\fP are appropriate for representing floating point data with about sixteen significant digits of precision. The form of a \fIdouble\fP constant is the same as a C floating point constant. An optional `d' or `D' may be appended. For example the following are all acceptable \fIdouble\fP constants: .RS .nf -2.0 3.141592653589793 1.0e-20 1.d .fi .RE .SH BUGS .LP The programs generated by \fBncgen\fP when using the \fB-c\fP or \fB-f\fP use initialization statements to store data in variables, and will fail to produce compilable programs if you try to use them for large datasets, since the resulting statements may exceed the line length or number of continuation statements permitted by the compiler. .LP The CDL syntax makes it easy to assign what looks like an array of variable-length strings to a netCDF variable, but the strings will simply be concatenated into a single array of characters, since netCDF cannot represent an array of variable-length strings in one netCDF variable. .LP NetCDF and CDL do not yet support a type corresponding to a 64-bit integer. hdf4-hdf4.3.1/mfhdf/ncgen/ncgen.h000066400000000000000000000051701503061704500164530ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef H4NC_NCGEN_H #define H4NC_NCGEN_H #include "nc_priv.h" #include "generic.h" /* defines union generic */ #define H4_MAX_NC_ATTSIZE 2000 /* max size in bytes of an attribute */ #define MAXTRST 500 /* maximum size of a single string value */ #define FORT_MAX_LINES 20 /* max lines in FORTRAN statement */ #define FORT_MAX_STMNT 66 * FORT_MAX_LINES /* max chars in FORTRAN statement */ #define C_MAX_STMNT FORT_MAX_STMNT /* until we fix to break up C lines */ /* Decorated with NC_ to distinguish it from the library's STREQ, which * differs slightly. */ #define NC_STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) extern struct dims { /* dimensions */ long size; char *name; } dims[H4_MAX_NC_DIMS]; /* table of netcdf dimensions */ extern int ncid; /* handle for netCDF */ extern int ndims; /* number of dimensions declared for netcdf */ extern int nvars; /* number of variables declared for netcdf */ extern int natts; /* number of attributes */ extern int nvdims; /* number of dimensions for variables */ extern int dimnum; /* dimension number index for variables */ extern int varnum; /* variable number index for attributes */ extern int valnum; /* value number index for attributes */ extern int rec_dim; /* number of the unlimited dimension, if any */ extern long var_len; /* variable length (product of dimensions) */ extern int var_size; /* size of each element of variable */ extern long netcdf_record_number; /* current record number for variables */ extern struct vars { /* variables */ char *name; nc_type type; int ndims; int dims[H4_MAX_VAR_DIMS]; /* should be a malloc'ed list, not an array */ union generic fill_value; /* set to value of _FillValue attribute */ int has_data; /* 1 if data specified, 0 otherwise */ } vars[H4_MAX_NC_VARS]; /* should be a malloc'ed list, not an array */ extern struct atts { int var; /* number of variable for this attribute */ char *name; nc_type type; int len; void *val; } atts[H4_MAX_NC_ATTRS]; /* should be a malloc'ed list, not an array */ #endif /* H4NC_NCGEN_H */ hdf4-hdf4.3.1/mfhdf/ncgen/ncgen.l000066400000000000000000000121061503061704500164540ustar00rootroot00000000000000%{ /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ /* lex specification for tokens for ncgen */ char errstr[100]; /* for short error messages */ void expand_escapes(); #include #include #include #include #include "ncgentab.h" %} escquote \\\" nonquotes ([^"]|{escquote})* exp ([eE][+-]?[0-9]+) %% \/\/.* /* comment */ ; \"{nonquotes}\" { if(yyleng > MAXTRST) { yyerror("string too long, truncated\n"); yytext[MAXTRST-1] = '\0'; } expand_escapes(termstring,yytext,yyleng); return (TERMSTRING); } float|FLOAT|real|REAL {return (FLOAT_K);} char|CHAR {return (CHAR_K);} byte|BYTE {return (BYTE_K);} short|SHORT {return (SHORT_K);} long|LONG|int|INT|integer|INTEGER {return (LONG_K);} double|DOUBLE {return (DOUBLE_K);} unlimited|UNLIMITED {long_val = -1; return (NC_UNLIMITED_K);} dimensions:|DIMENSIONS: {return (DIMENSIONS);} variables:|VARIABLES: {return (VARIABLES);} data:|DATA: {return (DATA);} (netcdf|NETCDF|netCDF)[^\{]+ { char *s = (char*)yytext+strlen("netcdf"); char *t = (char*)yytext+yyleng-1; while (isspace(*s)) s++; while (isspace(*t)) t--; t++; netcdfname = (char *) emalloc(t-s+1); (void) strncpy(netcdfname, s, t-s); netcdfname[t-s] = '\0'; return (NETCDF); } DoubleInf|-?NaN { /* double missing values */ double_val = FILL_DOUBLE; /* IEEE double infinity */ return (DOUBLE_CONST); } FloatInf|Infinity|Inf { /* float missing values */ float_val = FILL_FLOAT; /* IEEE float infinity */ return (FLOAT_CONST); } [A-Za-z_][A-Za-z_0-9-]* { if ((yylval = lookup(yytext)) == NULL) { yylval = install(yytext); } return (IDENT); } \n { lineno++ ; } [+-]?[0-9]*\.[0-9]*{exp}?[LlDd]?|[+-]?[0-9]*{exp}[LlDd]? { if (sscanf((char*)yytext, "%le", &double_val) != 1) { sprintf(errstr,"bad long or double constant: %s",(char*)yytext); yyerror(errstr); } return (DOUBLE_CONST); } [+-]?[0-9]*\.[0-9]*{exp}?[Ff]|[+-]?[0-9]*{exp}[Ff] { if (sscanf((char*)yytext, "%e", &float_val) != 1) { sprintf(errstr,"bad float constant: %s",(char*)yytext); yyerror(errstr); } return (FLOAT_CONST); } [+-]?[0-9]+[sS]|0[xX][0-9a-fA-F]+[sS] { if (sscanf((char*)yytext, "%hd", &short_val) != 1) { sprintf(errstr,"bad short constant: %s",(char*)yytext); yyerror(errstr); } return (SHORT_CONST); } [+-]?[1-9][0-9]*[lL]?|0[lL]? { /* machines where doubles have more precision than longs. */ /* * Because strtol and sscanf with "%ld" may silently give * bad results from undetected overflow for strings like * "30000000000", we scan as double first. */ double dd; if (sscanf((char*)yytext, "%le", &dd) != 1) { sprintf(errstr,"bad long constant: %s",(char*)yytext); yyerror(errstr); } if (dd < INT32_MIN || dd > INT32_MAX) { double_val = dd; return DOUBLE_CONST; } else { long_val = dd; return LONG_CONST; } } 0[xX]?[0-9a-fA-F]+[lL]? { long dd; if (sscanf((char*)yytext, "%li", &dd) != 1) { sprintf(errstr,"bad long constant: %s",(char*)yytext); yyerror(errstr); } long_val = dd; return LONG_CONST; } \'[^\\]\' { (void) sscanf((char*)&yytext[1],"%c",&byte_val); return (BYTE_CONST); } \'\\[0-7][0-7]?[0-7]?\' { byte_val = strtol((char*)&yytext[2], (char **) 0, 8); return (BYTE_CONST); } \'\\x[0-9a-fA-F][0-9a-fA-F]?\' { byte_val = strtol((char*)&yytext[2], (char **) 0, 16); return (BYTE_CONST); } \'\\.\' { switch ((char)yytext[2]) { case 'a': byte_val = '\007'; break; /* not everyone under- * stands '\a' yet */ case 'b': byte_val = '\b'; break; case 'f': byte_val = '\f'; break; case 'n': byte_val = '\n'; break; case 'r': byte_val = '\r'; break; case 't': byte_val = '\t'; break; case 'v': byte_val = '\v'; break; case '\\': byte_val = '\\'; break; case '?': byte_val = '\177'; break; case '\'': byte_val = '\''; break; default: byte_val = (char)yytext[2]; } return (BYTE_CONST); } [ \t\f]+ {/* whitespace */ ; } . return (yytext[0]) ; hdf4-hdf4.3.1/mfhdf/ncgen/ncgen.y000066400000000000000000000466131503061704500165030ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ /* yacc source for "ncgen", a netCDL parser and netCDF generator */ %{ #include #include #include "ncgen.h" int yylex(void); void yyerror(char* s); typedef struct Symbol { /* symbol table entry */ char *name; struct Symbol *next; unsigned is_dim : 1; /* appears as netCDF dimension */ unsigned is_var : 1; /* appears as netCDF variable */ unsigned is_att : 1; /* appears as netCDF attribute */ int dnum; /* handle as a dimension */ int vnum; /* handle as a variable */ } *YYSTYPE1; #define YYSTYPE YYSTYPE1 YYSTYPE install(char *sname), lookup(char *sname); YYSTYPE symlist; /* symbol table: linked list */ void init_netcdf(void); /* initializes netcdf counts (e.g. nvars) */ void define_netcdf(char *netcdfname); /* generates all define mode stuff */ void load_netcdf(void *rec_start); /* generates variable puts */ void close_netcdf(void); /* generates close */ const char *nctype(nc_type); void derror(const char *fmt, ...); /* varargs message emitter */ void *emalloc(int size), *erealloc(void *ptr, int size); /* malloc that checks for memory exhausted */ void clearout(void); /* initializes symbol table */ void nc_getfill(nc_type, union generic *); /* to get fill value for various types */ void nc_putfill(nc_type, void *, union generic *); /* to get fill value for various types */ void nc_fill(nc_type, long, void *, union generic); /* fills a generic array with a value */ int put_variable(void *); /* invoke nc calls or generate code to put */ /* variable values */ extern int derror_count; /* counts errors in netcdf definition */ extern int lineno; /* line number for error messages */ static int not_a_string; /* whether last constant read was a string */ static char termstring[MAXTRST]; /* last terminal string read */ static double double_val; /* last double value read */ static float float_val; /* last float value read */ static nclong long_val; /* last long value read */ static short short_val; /* last short value read */ static char char_val; /* last char value read */ static char byte_val; /* last byte value read */ static nc_type type_code; /* holds declared type for variables */ static nc_type atype_code; /* holds derived type for attributes */ static char *netcdfname; /* to construct netcdf file name */ static void *att_space; /* pointer to block for attribute values */ static nc_type valtype; /* type code for list of attribute values */ static char *char_valp; /* pointers used to accumulate data values */ static char *byte_valp; static short *short_valp; static nclong *long_valp; static float *float_valp; static double *double_valp; static void *rec_cur; /* pointer to where next data value goes */ static void *rec_start; /* start of space for a record of data */ %} /* DECLARATIONS */ %token NC_UNLIMITED_K /* keyword for unbounded record dimension */ BYTE_K /* keyword for byte datatype */ CHAR_K /* keyword for char datatype */ SHORT_K /* keyword for short datatype */ LONG_K /* keyword for long datatype */ FLOAT_K /* keyword for float datatype */ DOUBLE_K /* keyword for double datatype */ IDENT /* name for a dimension, variable, or attribute */ TERMSTRING /* terminal string */ BYTE_CONST /* byte constant */ CHAR_CONST /* char constant */ SHORT_CONST /* short constant */ LONG_CONST /* long constant */ FLOAT_CONST /* float constant */ DOUBLE_CONST /* double constant */ DIMENSIONS /* keyword starting dimensions section, if any */ VARIABLES /* keyword starting variables section, if any */ NETCDF /* keyword declaring netcdf name */ DATA /* keyword starting data section, if any */ %start ncdesc /* start symbol for grammar */ %% /* RULES */ ncdesc: NETCDF '{' { init_netcdf(); } dimsection /* dimension declarations */ { if (ndims > H4_MAX_NC_DIMS) derror("Too many dimensions"); } vasection /* variable and attribute declarations */ { if (derror_count == 0) define_netcdf(netcdfname); } datasection /* data, variables loaded as encountered */ '}' { if (derror_count == 0) close_netcdf(); } ; dimsection: /* empty */ | DIMENSIONS dimdecls ; dimdecls: dimdecline ';' | dimdecls dimdecline ';' ; dimdecline: dimdecl | dimdecline ',' dimdecl ; dimdecl: dimd '=' LONG_CONST { if (long_val <= 0) derror("negative dimension size"); dims[ndims].size = long_val; ndims++; } | dimd '=' NC_UNLIMITED_K { if (rec_dim != -1) derror("only one NC_UNLIMITED dimension allowed"); rec_dim = ndims; /* the unlimited (record) dimension */ dims[ndims].size = NC_UNLIMITED; ndims++; } ; dimd: dim { if ($1->is_dim == 1) { derror( "duplicate dimension declaration for %s", $1->name); } $1->is_dim = 1; $1->dnum = ndims; dims[ndims].name = (char *) emalloc(strlen($1->name)+1); (void) strcpy(dims[ndims].name, $1->name); } ; dim: IDENT ; vasection: /* empty */ | VARIABLES vadecls ; vadecls: vadecl ';' | vadecls vadecl ';' ; vadecl: vardecl | attdecl ; vardecl: type varlist ; type: BYTE_K { type_code = NC_BYTE; } | CHAR_K { type_code = NC_CHAR; } | SHORT_K { type_code = NC_SHORT; } | LONG_K { type_code = NC_LONG; } | FLOAT_K { type_code = NC_FLOAT; } | DOUBLE_K { type_code = NC_DOUBLE; } ; varlist: varspec | varlist ',' varspec ; varspec: var { if (nvars >= H4_MAX_NC_VARS) derror("too many variables"); nvdims = 0; /* make sure variable not re-declared */ if ($1->is_var == 1) { derror( "duplicate variable declaration for %s", $1->name); } $1->is_var = 1; $1->vnum = nvars; vars[nvars].name = (char *) emalloc(strlen($1->name)+1); (void) strcpy(vars[nvars].name, $1->name); vars[nvars].type = type_code; /* set default fill value. You can override this with * the variable attribute "_FillValue". */ nc_getfill(type_code, &vars[nvars].fill_value); vars[nvars].has_data = 0; /* has no data (yet) */ } dimspec { vars[nvars].ndims = nvdims; nvars++; } ; var: IDENT ; dimspec: /* empty */ | '(' dimlist ')' ; dimlist: vdim | dimlist ',' vdim ; vdim: dim { if (nvdims >= H4_MAX_VAR_DIMS) { derror("%s has too many dimensions",vars[nvars].name); } if ($1->is_dim == 1) dimnum = $1->dnum; else { derror( "%s is not declared as a dimension", $1->name); dimnum = ndims; } if (rec_dim != -1 && dimnum == rec_dim && nvdims != 0) { derror("unlimited dimension must be first"); } vars[nvars].dims[nvdims] = dimnum; nvdims++; } ; attdecl: att { valnum = 0; valtype = NC_UNSPECIFIED; /* get a large block for attributes, realloc later */ att_space = emalloc(H4_MAX_NC_ATTSIZE); /* make all kinds of pointers point to it */ char_valp = (char *) att_space; byte_valp = (char *) att_space; short_valp = (short *) att_space; long_valp = (nclong *) att_space; float_valp = (float *) att_space; double_valp = (double *) att_space; } '=' attvallist { if (natts >= H4_MAX_NC_ATTRS) derror("too many attributes"); atts[natts].var = varnum ; atts[natts].type = valtype; atts[natts].len = valnum; /* shrink space down to what was really needed */ att_space = erealloc(att_space, valnum*nctypelen(valtype)); atts[natts].val = att_space; if (NC_STREQ(atts[natts].name, _FillValue)) { nc_putfill(atts[natts].type, atts[natts].val, &vars[atts[natts].var].fill_value); } natts++; } ; att: avar ':' attr | ':' attr { varnum = -1; /* handle of "global" attribute */ } ; avar: var { if ($1->is_var == 1) varnum = $1->vnum; else { derror("%s not declared as a variable, fatal error", $1->name); YYABORT; } } ; attr: IDENT { atts[natts].name = (char *) emalloc(strlen($1->name)+1); (void) strcpy(atts[natts].name,$1->name); } ; attvallist: aconst | attvallist ',' aconst ; aconst: attconst { if (valtype == NC_UNSPECIFIED) valtype = atype_code; if (valtype != atype_code) derror("values for attribute must be all of same type"); } ; attconst: CHAR_CONST { atype_code = NC_CHAR; *char_valp++ = char_val; valnum++; } | TERMSTRING { atype_code = NC_CHAR; { /* don't null-terminate attribute strings */ int len = strlen(termstring); valnum += len; (void)strncpy(char_valp,termstring,len); char_valp += len; } } | BYTE_CONST { atype_code = NC_BYTE; *byte_valp++ = byte_val; valnum++; } | SHORT_CONST { atype_code = NC_SHORT; *short_valp++ = short_val; valnum++; } | LONG_CONST { atype_code = NC_LONG; *long_valp++ = long_val; valnum++; } | FLOAT_CONST { atype_code = NC_FLOAT; *float_valp++ = float_val; valnum++; } | DOUBLE_CONST { atype_code = NC_DOUBLE; *double_valp++ = double_val; valnum++; } ; datasection: /* empty */ | DATA datadecls ; datadecls: datadecl ';' | datadecls datadecl ';' ; datadecl: avar { valtype = vars[varnum].type; /* variable type */ valnum = 0; /* values accumulated for variable */ vars[varnum].has_data = 1; /* compute dimensions product (size of a "record") */ var_size = nctypelen(valtype); if (vars[varnum].ndims == 0) var_len = 1; else if (vars[varnum].dims[0] == rec_dim) { var_len = 1; /* one record for unlimited vars */ netcdf_record_number = 0; } else var_len = dims[vars[varnum].dims[0]].size; for(dimnum = 1; dimnum < vars[varnum].ndims; dimnum++) var_len = var_len*dims[vars[varnum].dims[dimnum]].size; /* allocate memory for a record of variable data */ if (var_len*var_size != (unsigned)(var_len*var_size)) { derror("too much data for this machine"); exit(9); } rec_start = malloc ((unsigned)(var_len*var_size)); if (rec_start == 0) { derror ("out of memory\n"); exit(3); } rec_cur = rec_start; switch (valtype) { case NC_CHAR: char_valp = (char *) rec_start; break; case NC_BYTE: byte_valp = (char *) rec_start; break; case NC_SHORT: short_valp = (short *) rec_start; break; case NC_LONG: long_valp = (nclong *) rec_start; break; case NC_FLOAT: float_valp = (float *) rec_start; break; case NC_DOUBLE: double_valp = (double *) rec_start; break; } } '=' constlist { if (valnum > 0 && valnum < var_len) { /* leftovers */ nc_fill(valtype, var_len - valnum, rec_cur, vars[varnum].fill_value); /* put out record of var_len values */ if (derror_count == 0) put_variable(rec_start); } free ((char *) rec_start); } ; constlist: dconst | constlist ',' dconst ; dconst: { if(valnum >= var_len) { derror("too many values for this variable"); exit (4); } not_a_string = 1; } const { if (not_a_string) { switch (valtype) { case NC_CHAR: rec_cur = (void *) char_valp; break; case NC_BYTE: rec_cur = (void *) byte_valp; break; case NC_SHORT: rec_cur = (void *) short_valp; break; case NC_LONG: rec_cur = (void *) long_valp; break; case NC_FLOAT: rec_cur = (void *) float_valp; break; case NC_DOUBLE: rec_cur = (void *) double_valp; break; } } if (valnum >= var_len) { /* put out record of var_len elements */ if (derror_count == 0) put_variable(rec_start); /* if this variable is unbounded, reset for */ /* next record */ if (vars[varnum].dims[0] == rec_dim) { valnum = 0; netcdf_record_number++; rec_cur = rec_start; switch (valtype) { case NC_CHAR: char_valp = (char *) rec_start; break; case NC_BYTE: byte_valp = (char *) rec_start; break; case NC_SHORT: short_valp = (short *) rec_start; break; case NC_LONG: long_valp = (nclong *) rec_start; break; case NC_FLOAT: float_valp = (float *) rec_start; break; case NC_DOUBLE: double_valp = (double *) rec_start; break; } } } } ; const: CHAR_CONST { atype_code = NC_CHAR; switch (valtype) { case NC_CHAR: *char_valp++ = char_val; break; case NC_BYTE: *byte_valp++ = char_val; break; case NC_SHORT: *short_valp++ = char_val; break; case NC_LONG: *long_valp++ = char_val; break; case NC_FLOAT: *float_valp++ = char_val; break; case NC_DOUBLE: *double_valp++ = char_val; break; } valnum++; } | TERMSTRING { not_a_string = 0; atype_code = NC_CHAR; { int len = strlen(termstring); valnum += len; if(valnum > var_len) { derror("string won't fit in this variable"); exit (5); } switch (valtype) { case NC_CHAR: (void)strncpy(char_valp,termstring,len); char_valp += len; rec_cur = (void *) char_valp; break; case NC_BYTE: (void)strncpy(byte_valp,termstring,len); byte_valp += len; rec_cur = (void *) byte_valp; break; case NC_SHORT: case NC_LONG: case NC_FLOAT: case NC_DOUBLE: derror("string value invalid for %s variable", nctype(valtype)); break; } } } | BYTE_CONST { atype_code = NC_BYTE; switch (valtype) { case NC_CHAR: *char_valp++ = byte_val; break; case NC_BYTE: *byte_valp++ = byte_val; break; case NC_SHORT: *short_valp++ = byte_val; break; case NC_LONG: *long_valp++ = byte_val; break; case NC_FLOAT: *float_valp++ = byte_val; break; case NC_DOUBLE: *double_valp++ = byte_val; break; } valnum++; } | SHORT_CONST { atype_code = NC_SHORT; switch (valtype) { case NC_CHAR: *char_valp++ = short_val; break; case NC_BYTE: *byte_valp++ = short_val; break; case NC_SHORT: *short_valp++ = short_val; break; case NC_LONG: *long_valp++ = short_val; break; case NC_FLOAT: *float_valp++ = short_val; break; case NC_DOUBLE: *double_valp++ = short_val; break; } valnum++; } | LONG_CONST { atype_code = NC_LONG; switch (valtype) { case NC_CHAR: *char_valp++ = long_val; break; case NC_BYTE: *byte_valp++ = long_val; break; case NC_SHORT: *short_valp++ = long_val; break; case NC_LONG: *long_valp++ = long_val; break; case NC_FLOAT: *float_valp++ = long_val; break; case NC_DOUBLE: *double_valp++ = long_val; break; } valnum++; } | FLOAT_CONST { atype_code = NC_FLOAT; switch (valtype) { case NC_CHAR: *char_valp++ = float_val; break; case NC_BYTE: *byte_valp++ = float_val; break; case NC_SHORT: *short_valp++ = float_val; break; case NC_LONG: *long_valp++ = float_val; break; case NC_FLOAT: *float_valp++ = float_val; break; case NC_DOUBLE: *double_valp++ = float_val; break; } valnum++; } | DOUBLE_CONST { atype_code = NC_DOUBLE; switch (valtype) { case NC_CHAR: *char_valp++ = double_val; break; case NC_BYTE: *byte_valp++ = double_val; break; case NC_SHORT: *short_valp++ = double_val; break; case NC_LONG: *long_valp++ = double_val; break; case NC_FLOAT: if (double_val == FILL_DOUBLE) *float_valp++ = FILL_FLOAT; else *float_valp++ = double_val; break; case NC_DOUBLE: *double_valp++ = double_val; break; } valnum++; } ; /* END OF RULES */ %% /* PROGRAMS */ /* get lexical input routine generated by lex */ #include "ncgenyy.c" void derror(const char *fmt, ...); void yyerror(s) /* called for yacc syntax error */ char *s; { derror(s); } #ifndef yywrap int yywrap() /* returns 1 on EOF if no more input */ { return 1; } #endif /* yywrap() */ /* Symbol table operations for ncgen tool */ YYSTYPE lookup(char *sname) /* find sname in symbol table (linear search) */ { YYSTYPE sp; for (sp = symlist; sp != (YYSTYPE) 0; sp = sp -> next) if (NC_STREQ(sp -> name, sname)) { return sp; } return 0; /* 0 ==> not found */ } YYSTYPE install(char *sname) /* install sname in symbol table */ { YYSTYPE sp; sp = (YYSTYPE) emalloc (sizeof (struct Symbol)); sp -> name = (char *) emalloc (strlen (sname) + 1);/* +1 for '\0' */ (void) strcpy (sp -> name, sname); sp -> next = symlist; /* put at front of list */ sp -> is_dim = 0; sp -> is_var = 0; sp -> is_att = 0; symlist = sp; return sp; } void clearout() /* reset symbol table to empty */ { YYSTYPE sp, tp; for (sp = symlist; sp != (YYSTYPE) 0;) { tp = sp -> next; free (sp -> name); free ((char *) sp); sp = tp; } symlist = 0; } hdf4-hdf4.3.1/mfhdf/ncgen/ncgentab.c000066400000000000000000002221201503061704500171310ustar00rootroot00000000000000/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ #define YYBISON 30802 /* Bison version string. */ #define YYBISON_VERSION "3.8.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* First part of user prologue. */ #line 8 "mfhdf/ncgen/ncgen.y" #include #include #include "ncgen.h" int yylex(void); void yyerror(char *s); typedef struct Symbol { /* symbol table entry */ char *name; struct Symbol *next; unsigned is_dim : 1; /* appears as netCDF dimension */ unsigned is_var : 1; /* appears as netCDF variable */ unsigned is_att : 1; /* appears as netCDF attribute */ int dnum; /* handle as a dimension */ int vnum; /* handle as a variable */ } * YYSTYPE1; #define YYSTYPE YYSTYPE1 YYSTYPE install(char *sname), lookup(char *sname); YYSTYPE symlist; /* symbol table: linked list */ void init_netcdf(void); /* initializes netcdf counts (e.g. nvars) */ void define_netcdf(char *netcdfname); /* generates all define mode stuff */ void load_netcdf(void *rec_start); /* generates variable puts */ void close_netcdf(void); /* generates close */ const char *nctype(nc_type); void derror(const char *fmt, ...); /* varargs message emitter */ void *emalloc(int size), *erealloc(void *ptr, int size); /* malloc that checks for memory exhausted */ void clearout(void); /* initializes symbol table */ void nc_getfill(nc_type, union generic *); /* to get fill value for various types */ void nc_putfill(nc_type, void *, union generic *); /* to get fill value for various types */ void nc_fill(nc_type, long, void *, union generic); /* fills a generic array with a value */ int put_variable(void *); /* invoke nc calls or generate code to put */ /* variable values */ extern int derror_count; /* counts errors in netcdf definition */ extern int lineno; /* line number for error messages */ static int not_a_string; /* whether last constant read was a string */ static char termstring[MAXTRST]; /* last terminal string read */ static double double_val; /* last double value read */ static float float_val; /* last float value read */ static nclong long_val; /* last long value read */ static short short_val; /* last short value read */ static char char_val; /* last char value read */ static char byte_val; /* last byte value read */ static nc_type type_code; /* holds declared type for variables */ static nc_type atype_code; /* holds derived type for attributes */ static char *netcdfname; /* to construct netcdf file name */ static void *att_space; /* pointer to block for attribute values */ static nc_type valtype; /* type code for list of attribute values */ static char *char_valp; /* pointers used to accumulate data values */ static char *byte_valp; static short *short_valp; static nclong *long_valp; static float *float_valp; static double *double_valp; static void *rec_cur; /* pointer to where next data value goes */ static void *rec_start; /* start of space for a record of data */ #line 135 "mfhdf/ncgen/ncgentab.c" #ifndef YY_CAST #ifdef __cplusplus #define YY_CAST(Type, Val) static_cast(Val) #define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast(Val) #else #define YY_CAST(Type, Val) ((Type)(Val)) #define YY_REINTERPRET_CAST(Type, Val) ((Type)(Val)) #endif #endif #ifndef YY_NULLPTR #if defined __cplusplus #if 201103L <= __cplusplus #define YY_NULLPTR nullptr #else #define YY_NULLPTR 0 #endif #else #define YY_NULLPTR ((void *)0) #endif #endif #include "ncgentab.h" /* Symbol kind. */ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYerror = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ YYSYMBOL_NC_UNLIMITED_K = 3, /* NC_UNLIMITED_K */ YYSYMBOL_BYTE_K = 4, /* BYTE_K */ YYSYMBOL_CHAR_K = 5, /* CHAR_K */ YYSYMBOL_SHORT_K = 6, /* SHORT_K */ YYSYMBOL_LONG_K = 7, /* LONG_K */ YYSYMBOL_FLOAT_K = 8, /* FLOAT_K */ YYSYMBOL_DOUBLE_K = 9, /* DOUBLE_K */ YYSYMBOL_IDENT = 10, /* IDENT */ YYSYMBOL_TERMSTRING = 11, /* TERMSTRING */ YYSYMBOL_BYTE_CONST = 12, /* BYTE_CONST */ YYSYMBOL_CHAR_CONST = 13, /* CHAR_CONST */ YYSYMBOL_SHORT_CONST = 14, /* SHORT_CONST */ YYSYMBOL_LONG_CONST = 15, /* LONG_CONST */ YYSYMBOL_FLOAT_CONST = 16, /* FLOAT_CONST */ YYSYMBOL_DOUBLE_CONST = 17, /* DOUBLE_CONST */ YYSYMBOL_DIMENSIONS = 18, /* DIMENSIONS */ YYSYMBOL_VARIABLES = 19, /* VARIABLES */ YYSYMBOL_NETCDF = 20, /* NETCDF */ YYSYMBOL_DATA = 21, /* DATA */ YYSYMBOL_22_ = 22, /* '{' */ YYSYMBOL_23_ = 23, /* '}' */ YYSYMBOL_24_ = 24, /* ';' */ YYSYMBOL_25_ = 25, /* ',' */ YYSYMBOL_26_ = 26, /* '=' */ YYSYMBOL_27_ = 27, /* '(' */ YYSYMBOL_28_ = 28, /* ')' */ YYSYMBOL_29_ = 29, /* ':' */ YYSYMBOL_YYACCEPT = 30, /* $accept */ YYSYMBOL_ncdesc = 31, /* ncdesc */ YYSYMBOL_32_1 = 32, /* $@1 */ YYSYMBOL_33_2 = 33, /* $@2 */ YYSYMBOL_34_3 = 34, /* $@3 */ YYSYMBOL_dimsection = 35, /* dimsection */ YYSYMBOL_dimdecls = 36, /* dimdecls */ YYSYMBOL_dimdecline = 37, /* dimdecline */ YYSYMBOL_dimdecl = 38, /* dimdecl */ YYSYMBOL_dimd = 39, /* dimd */ YYSYMBOL_dim = 40, /* dim */ YYSYMBOL_vasection = 41, /* vasection */ YYSYMBOL_vadecls = 42, /* vadecls */ YYSYMBOL_vadecl = 43, /* vadecl */ YYSYMBOL_vardecl = 44, /* vardecl */ YYSYMBOL_type = 45, /* type */ YYSYMBOL_varlist = 46, /* varlist */ YYSYMBOL_varspec = 47, /* varspec */ YYSYMBOL_48_4 = 48, /* $@4 */ YYSYMBOL_var = 49, /* var */ YYSYMBOL_dimspec = 50, /* dimspec */ YYSYMBOL_dimlist = 51, /* dimlist */ YYSYMBOL_vdim = 52, /* vdim */ YYSYMBOL_attdecl = 53, /* attdecl */ YYSYMBOL_54_5 = 54, /* $@5 */ YYSYMBOL_att = 55, /* att */ YYSYMBOL_avar = 56, /* avar */ YYSYMBOL_attr = 57, /* attr */ YYSYMBOL_attvallist = 58, /* attvallist */ YYSYMBOL_aconst = 59, /* aconst */ YYSYMBOL_attconst = 60, /* attconst */ YYSYMBOL_datasection = 61, /* datasection */ YYSYMBOL_datadecls = 62, /* datadecls */ YYSYMBOL_datadecl = 63, /* datadecl */ YYSYMBOL_64_6 = 64, /* $@6 */ YYSYMBOL_constlist = 65, /* constlist */ YYSYMBOL_dconst = 66, /* dconst */ YYSYMBOL_67_7 = 67, /* $@7 */ YYSYMBOL_const = 68 /* const */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; #ifdef short #undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure and (if available) are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ #include /* INFRINGES ON USER NAME SPACE */ #if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ #include /* INFRINGES ON USER NAME SPACE */ #define YY_STDINT_H #endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif /* Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants. This workaround can likely be removed in 2023, as HPE has promised support for HP-UX 11.23 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of . */ #ifdef __hpux #undef UINT_LEAST8_MAX #undef UINT_LEAST16_MAX #define UINT_LEAST8_MAX 255 #define UINT_LEAST16_MAX 65535 #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T #if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ #define YYPTRDIFF_T __PTRDIFF_TYPE__ #define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ #elif defined PTRDIFF_MAX #ifndef ptrdiff_t #include /* INFRINGES ON USER NAME SPACE */ #endif #define YYPTRDIFF_T ptrdiff_t #define YYPTRDIFF_MAXIMUM PTRDIFF_MAX #else #define YYPTRDIFF_T long #define YYPTRDIFF_MAXIMUM LONG_MAX #endif #endif #ifndef YYSIZE_T #ifdef __SIZE_TYPE__ #define YYSIZE_T __SIZE_TYPE__ #elif defined size_t #define YYSIZE_T size_t #elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #else #define YYSIZE_T unsigned #endif #endif #define YYSIZE_MAXIMUM \ YY_CAST(YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST(YYSIZE_T, -1) ? YYPTRDIFF_MAXIMUM : YY_CAST(YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST(YYPTRDIFF_T, sizeof(X)) /* Stored state numbers (used for stacks). */ typedef yytype_int8 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ #if defined YYENABLE_NLS && YYENABLE_NLS #if ENABLE_NLS #include /* INFRINGES ON USER NAME SPACE */ #define YY_(Msgid) dgettext("bison-runtime", Msgid) #endif #endif #ifndef YY_ #define YY_(Msgid) Msgid #endif #endif #ifndef YY_ATTRIBUTE_PURE #if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) #define YY_ATTRIBUTE_PURE __attribute__((__pure__)) #else #define YY_ATTRIBUTE_PURE #endif #endif #ifndef YY_ATTRIBUTE_UNUSED #if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) #define YY_ATTRIBUTE_UNUSED __attribute__((__unused__)) #else #define YY_ATTRIBUTE_UNUSED #endif #endif /* Suppress unused-variable warnings by "using" E. */ #if !defined lint || defined __GNUC__ #define YY_USE(E) ((void)(E)) #else #define YY_USE(E) /* empty */ #endif /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #if defined __GNUC__ && !defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ #if __GNUC__ * 100 + __GNUC_MINOR__ < 407 #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") #else #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") #endif #define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop") #else #define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE #define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && !defined __ICC && 6 <= __GNUC__ #define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuseless-cast\"") #define YY_IGNORE_USELESS_CAST_END _Pragma("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN #define YY_IGNORE_USELESS_CAST_BEGIN #define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void)(0 && (E))) #if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ #ifdef YYSTACK_USE_ALLOCA #if YYSTACK_USE_ALLOCA #ifdef __GNUC__ #define YYSTACK_ALLOC __builtin_alloca #elif defined __BUILTIN_VA_ARG_INCR #include /* INFRINGES ON USER NAME SPACE */ #elif defined _AIX #define YYSTACK_ALLOC __alloca #elif defined _MSC_VER #include /* INFRINGES ON USER NAME SPACE */ #define alloca _alloca #else #define YYSTACK_ALLOC alloca #if !defined _ALLOCA_H && !defined EXIT_SUCCESS #include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #endif #endif #endif #ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ #define YYSTACK_FREE(Ptr) \ do { /* empty */ \ ; \ } while (0) #ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ #define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ #endif #else #define YYSTACK_ALLOC YYMALLOC #define YYSTACK_FREE YYFREE #ifndef YYSTACK_ALLOC_MAXIMUM #define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM #endif #if (defined __cplusplus && !defined EXIT_SUCCESS && \ !((defined YYMALLOC || defined malloc) && (defined YYFREE || defined free))) #include /* INFRINGES ON USER NAME SPACE */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #ifndef YYMALLOC #define YYMALLOC malloc #if !defined malloc && !defined EXIT_SUCCESS void *malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ #endif #endif #ifndef YYFREE #define YYFREE free #if !defined free && !defined EXIT_SUCCESS void free(void *); /* INFRINGES ON USER NAME SPACE */ #endif #endif #endif #endif /* !defined yyoverflow */ #if (!defined yyoverflow && (!defined __cplusplus || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ #define YYSTACK_GAP_MAXIMUM (YYSIZEOF(union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ #define YYSTACK_BYTES(N) ((N) * (YYSIZEOF(yy_state_t) + YYSIZEOF(YYSTYPE)) + YYSTACK_GAP_MAXIMUM) #define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ #define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do { \ YYPTRDIFF_T yynewbytes; \ YYCOPY(&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF(*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF(*yyptr); \ } while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ #ifndef YYCOPY #if defined __GNUC__ && 1 < __GNUC__ #define YYCOPY(Dst, Src, Count) __builtin_memcpy(Dst, Src, YY_CAST(YYSIZE_T, (Count)) * sizeof(*(Src))) #else #define YYCOPY(Dst, Src, Count) \ do { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } while (0) #endif #endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 70 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 30 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 39 /* YYNRULES -- Number of rules. */ #define YYNRULES 71 /* YYNSTATES -- Number of states. */ #define YYNSTATES 101 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 276 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK ? YY_CAST(yysymbol_kind_t, yytranslate[YYX]) : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 27, 28, 2, 2, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 29, 24, 2, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 2, 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 103, 103, 105, 110, 101, 121, 122, 124, 125, 127, 128, 130, 136, 144, 155, 157, 158, 160, 161, 163, 163, 165, 167, 168, 169, 170, 171, 172, 174, 175, 178, 177, 203, 205, 206, 208, 209, 211, 231, 230, 262, 263, 269, 279, 285, 286, 288, 297, 303, 314, 320, 326, 332, 338, 346, 347, 350, 351, 354, 353, 416, 417, 420, 420, 486, 511, 544, 569, 594, 619, 644}; #endif /** Accessing symbol of state STATE. */ #define YY_ACCESSING_SYMBOL(State) YY_CAST(yysymbol_kind_t, yystos[State]) #if YYDEBUG || 0 /* The user-facing name of the symbol whose (internal) number is YYSYMBOL. No bounds checking. */ static const char *yysymbol_name(yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = {"\"end of file\"", "error", "\"invalid token\"", "NC_UNLIMITED_K", "BYTE_K", "CHAR_K", "SHORT_K", "LONG_K", "FLOAT_K", "DOUBLE_K", "IDENT", "TERMSTRING", "BYTE_CONST", "CHAR_CONST", "SHORT_CONST", "LONG_CONST", "FLOAT_CONST", "DOUBLE_CONST", "DIMENSIONS", "VARIABLES", "NETCDF", "DATA", "'{'", "'}'", "';'", "','", "'='", "'('", "')'", "':'", "$accept", "ncdesc", "$@1", "$@2", "$@3", "dimsection", "dimdecls", "dimdecline", "dimdecl", "dimd", "dim", "vasection", "vadecls", "vadecl", "vardecl", "type", "varlist", "varspec", "$@4", "var", "dimspec", "dimlist", "vdim", "attdecl", "$@5", "att", "avar", "attr", "attvallist", "aconst", "attconst", "datasection", "datadecls", "datadecl", "$@6", "constlist", "dconst", "$@7", "const", YY_NULLPTR}; static const char * yysymbol_name(yysymbol_kind_t yysymbol) { return yytname[yysymbol]; } #endif #define YYPACT_NINF (-57) #define yypact_value_is_default(Yyn) ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-1) #define yytable_value_is_error(Yyn) 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int8 yypact[] = { 7, -2, 38, -57, -57, 21, 30, -57, -57, 30, -1, -57, 15, -57, 23, 12, -57, 30, 6, -4, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 33, -4, 20, -57, 35, -57, -57, -57, 17, 26, -57, -57, 24, -57, 25, -57, -57, 27, 33, 35, 28, -57, 35, 22, 0, -57, -57, 35, 31, -57, -57, 30, -57, -57, -57, -57, -57, -57, -57, -57, 29, -57, -57, 32, 36, -57, -57, -6, -57, 0, -57, -57, 30, -57, -57, 34, -57, 18, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57}; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int8 yydefact[] = { 0, 0, 0, 2, 1, 6, 0, 3, 15, 7, 0, 10, 0, 14, 16, 0, 8, 0, 0, 0, 4, 9, 11, 13, 12, 23, 24, 25, 26, 27, 28, 33, 0, 17, 0, 20, 0, 43, 21, 39, 0, 55, 44, 42, 0, 18, 22, 29, 31, 0, 0, 0, 0, 19, 0, 34, 0, 41, 59, 56, 0, 5, 30, 0, 32, 49, 50, 48, 51, 52, 53, 54, 40, 45, 47, 0, 0, 57, 38, 0, 36, 0, 63, 58, 0, 35, 46, 60, 61, 0, 37, 63, 66, 67, 65, 68, 69, 70, 71, 64, 62}; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = {-57, -57, -57, -57, -57, -57, -57, 43, 39, -57, -56, -57, -57, 37, -57, -57, -57, 3, -57, -28, -57, -57, -23, -57, -57, -57, -41, 13, -57, -19, -57, -57, -57, 5, -57, -57, -26, -57, -57}; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = {0, 2, 5, 14, 41, 7, 9, 10, 11, 12, 13, 20, 33, 34, 35, 36, 46, 47, 55, 37, 64, 79, 80, 38, 49, 39, 40, 43, 72, 73, 74, 52, 59, 60, 75, 87, 88, 89, 99}; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = {25, 26, 27, 28, 29, 30, 31, 78, 48, 23, 58, 65, 66, 67, 68, 69, 70, 71, 58, 84, 3, 24, 85, 16, 17, 32, 48, 1, 78, 92, 93, 94, 95, 96, 97, 98, 21, 17, 4, 6, 8, 18, 19, 42, 45, 31, 50, 51, 53, 63, 54, 61, 15, 56, 81, 77, 22, 62, 82, 91, 83, 90, 86, 57, 76, 100, 0, 0, 0, 0, 44}; static const yytype_int8 yycheck[] = {4, 5, 6, 7, 8, 9, 10, 63, 36, 3, 51, 11, 12, 13, 14, 15, 16, 17, 59, 25, 22, 15, 28, 24, 25, 29, 54, 20, 84, 11, 12, 13, 14, 15, 16, 17, 24, 25, 0, 18, 10, 26, 19, 10, 24, 10, 29, 21, 24, 27, 25, 23, 9, 26, 25, 24, 17, 54, 26, 25, 24, 84, 81, 50, 59, 91, -1, -1, -1, -1, 33}; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int8 yystos[] = { 0, 20, 31, 22, 0, 32, 18, 35, 10, 36, 37, 38, 39, 40, 33, 37, 24, 25, 26, 19, 41, 24, 38, 3, 15, 4, 5, 6, 7, 8, 9, 10, 29, 42, 43, 44, 45, 49, 53, 55, 56, 34, 10, 57, 43, 24, 46, 47, 49, 54, 29, 21, 61, 24, 25, 48, 26, 57, 56, 62, 63, 23, 47, 27, 50, 11, 12, 13, 14, 15, 16, 17, 58, 59, 60, 64, 63, 24, 40, 51, 52, 25, 26, 24, 25, 28, 59, 65, 66, 67, 52, 25, 11, 12, 13, 14, 15, 16, 17, 68, 66}; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int8 yyr1[] = {0, 30, 32, 33, 34, 31, 35, 35, 36, 36, 37, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 43, 44, 45, 45, 45, 45, 45, 45, 46, 46, 48, 47, 49, 50, 50, 51, 51, 52, 54, 53, 55, 55, 56, 57, 58, 58, 59, 60, 60, 60, 60, 60, 60, 60, 61, 61, 62, 62, 64, 63, 65, 65, 67, 66, 68, 68, 68, 68, 68, 68, 68}; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = {0, 2, 0, 0, 0, 9, 0, 2, 2, 3, 1, 3, 3, 3, 1, 1, 0, 2, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 0, 3, 1, 0, 3, 1, 3, 1, 0, 4, 3, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 3, 0, 4, 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1}; enum { YYENOMEM = -2 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYNOMEM goto yyexhaustedlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK(yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else { \ yyerror(YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Backward compatibility with an undocumented macro. Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF /* Enable debugging if requested. */ #if YYDEBUG #ifndef YYFPRINTF #include /* INFRINGES ON USER NAME SPACE */ #define YYFPRINTF fprintf #endif #define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) #define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) { \ YYFPRINTF(stderr, "%s ", Title); \ yy_symbol_print(stderr, Kind, Value); \ YYFPRINTF(stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print(FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const *const yyvaluep) { FILE *yyoutput = yyo; YY_USE(yyoutput); if (!yyvaluep) return; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_USE(yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print(FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const *const yyvaluep) { YYFPRINTF(yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name(yykind)); yy_symbol_value_print(yyo, yykind, yyvaluep); YYFPRINTF(yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print(yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF(stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF(stderr, " %d", yybot); } YYFPRINTF(stderr, "\n"); } #define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print(yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF(stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF(stderr, " $%d = ", yyi + 1); yy_symbol_print(stderr, YY_ACCESSING_SYMBOL(+yyssp[yyi + 1 - yynrhs]), &yyvsp[(yyi + 1) - (yynrhs)]); YYFPRINTF(stderr, "\n"); } } #define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print(yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ #define YYDPRINTF(Args) ((void)0) #define YY_SYMBOL_PRINT(Title, Kind, Value, Location) #define YY_STACK_PRINT(Bottom, Top) #define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct(const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep) { YY_USE(yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT(yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_USE(yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* Lookahead token kind. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse(void) { yy_state_fast_t yystate = 0; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus = 0; /* Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* Their size. */ YYPTRDIFF_T yystacksize = YYINITDEPTH; /* The state stack: array, bottom, top. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss = yyssa; yy_state_t *yyssp = yyss; /* The semantic value stack: array, bottom, top. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp = yyvs; int yyn; /* The return value of yyparse. */ int yyresult; /* Lookahead symbol kind. */ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF((stderr, "Entering state %d\n", yystate)); YY_ASSERT(0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST(yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END YY_STACK_PRINT(yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE YYNOMEM; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = yyssp - yyss + 1; #if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow(YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF(*yyssp), &yyvs1, yysize * YYSIZEOF(*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) YYNOMEM; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST(union yyalloc *, YYSTACK_ALLOC(YY_CAST(YYSIZE_T, YYSTACK_BYTES(yystacksize)))); if (!yyptr) YYNOMEM; YYSTACK_RELOCATE(yyss_alloc, yyss); YYSTACK_RELOCATE(yyvs_alloc, yyvs); #undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE(yyss1); } #endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF((stderr, "Stack size increased to %ld\n", YY_CAST(long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default(yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { YYDPRINTF((stderr, "Reading a token\n")); yychar = yylex(); } if (yychar <= YYEOF) { yychar = YYEOF; yytoken = YYSYMBOL_YYEOF; YYDPRINTF((stderr, "Now at end of input.\n")); } else if (yychar == YYerror) { /* The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; goto yyerrlab1; } else { yytoken = YYTRANSLATE(yychar); YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error(yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1 - yylen]; YY_REDUCE_PRINT(yyn); switch (yyn) { case 2: /* $@1: %empty */ #line 103 "mfhdf/ncgen/ncgen.y" { init_netcdf(); } #line 1258 "mfhdf/ncgen/ncgentab.c" break; case 3: /* $@2: %empty */ #line 105 "mfhdf/ncgen/ncgen.y" { if (ndims > H4_MAX_NC_DIMS) derror("Too many dimensions"); } #line 1267 "mfhdf/ncgen/ncgentab.c" break; case 4: /* $@3: %empty */ #line 110 "mfhdf/ncgen/ncgen.y" { if (derror_count == 0) define_netcdf(netcdfname); } #line 1276 "mfhdf/ncgen/ncgentab.c" break; case 5: /* ncdesc: NETCDF '{' $@1 dimsection $@2 vasection $@3 datasection '}' */ #line 116 "mfhdf/ncgen/ncgen.y" { if (derror_count == 0) close_netcdf(); } #line 1285 "mfhdf/ncgen/ncgentab.c" break; case 12: /* dimdecl: dimd '=' LONG_CONST */ #line 131 "mfhdf/ncgen/ncgen.y" { if (long_val <= 0) derror("negative dimension size"); dims[ndims].size = long_val; ndims++; } #line 1295 "mfhdf/ncgen/ncgentab.c" break; case 13: /* dimdecl: dimd '=' NC_UNLIMITED_K */ #line 137 "mfhdf/ncgen/ncgen.y" { if (rec_dim != -1) derror("only one NC_UNLIMITED dimension allowed"); rec_dim = ndims; /* the unlimited (record) dimension */ dims[ndims].size = NC_UNLIMITED; ndims++; } #line 1306 "mfhdf/ncgen/ncgentab.c" break; case 14: /* dimd: dim */ #line 145 "mfhdf/ncgen/ncgen.y" { if (yyvsp[0]->is_dim == 1) { derror("duplicate dimension declaration for %s", yyvsp[0]->name); } yyvsp[0]->is_dim = 1; yyvsp[0]->dnum = ndims; dims[ndims].name = (char *)emalloc(strlen(yyvsp[0]->name) + 1); (void)strcpy(dims[ndims].name, yyvsp[0]->name); } #line 1320 "mfhdf/ncgen/ncgentab.c" break; case 23: /* type: BYTE_K */ #line 167 "mfhdf/ncgen/ncgen.y" { type_code = NC_BYTE; } #line 1326 "mfhdf/ncgen/ncgentab.c" break; case 24: /* type: CHAR_K */ #line 168 "mfhdf/ncgen/ncgen.y" { type_code = NC_CHAR; } #line 1332 "mfhdf/ncgen/ncgentab.c" break; case 25: /* type: SHORT_K */ #line 169 "mfhdf/ncgen/ncgen.y" { type_code = NC_SHORT; } #line 1338 "mfhdf/ncgen/ncgentab.c" break; case 26: /* type: LONG_K */ #line 170 "mfhdf/ncgen/ncgen.y" { type_code = NC_LONG; } #line 1344 "mfhdf/ncgen/ncgentab.c" break; case 27: /* type: FLOAT_K */ #line 171 "mfhdf/ncgen/ncgen.y" { type_code = NC_FLOAT; } #line 1350 "mfhdf/ncgen/ncgentab.c" break; case 28: /* type: DOUBLE_K */ #line 172 "mfhdf/ncgen/ncgen.y" { type_code = NC_DOUBLE; } #line 1356 "mfhdf/ncgen/ncgentab.c" break; case 31: /* $@4: %empty */ #line 178 "mfhdf/ncgen/ncgen.y" { if (nvars >= H4_MAX_NC_VARS) derror("too many variables"); nvdims = 0; /* make sure variable not re-declared */ if (yyvsp[0]->is_var == 1) { derror("duplicate variable declaration for %s", yyvsp[0]->name); } yyvsp[0]->is_var = 1; yyvsp[0]->vnum = nvars; vars[nvars].name = (char *)emalloc(strlen(yyvsp[0]->name) + 1); (void)strcpy(vars[nvars].name, yyvsp[0]->name); vars[nvars].type = type_code; /* set default fill value. You can override this with * the variable attribute "_FillValue". */ nc_getfill(type_code, &vars[nvars].fill_value); vars[nvars].has_data = 0; /* has no data (yet) */ } #line 1380 "mfhdf/ncgen/ncgentab.c" break; case 32: /* varspec: var $@4 dimspec */ #line 198 "mfhdf/ncgen/ncgen.y" { vars[nvars].ndims = nvdims; nvars++; } #line 1389 "mfhdf/ncgen/ncgentab.c" break; case 38: /* vdim: dim */ #line 212 "mfhdf/ncgen/ncgen.y" { if (nvdims >= H4_MAX_VAR_DIMS) { derror("%s has too many dimensions", vars[nvars].name); } if (yyvsp[0]->is_dim == 1) dimnum = yyvsp[0]->dnum; else { derror("%s is not declared as a dimension", yyvsp[0]->name); dimnum = ndims; } if (rec_dim != -1 && dimnum == rec_dim && nvdims != 0) { derror("unlimited dimension must be first"); } vars[nvars].dims[nvdims] = dimnum; nvdims++; } #line 1411 "mfhdf/ncgen/ncgentab.c" break; case 39: /* $@5: %empty */ #line 231 "mfhdf/ncgen/ncgen.y" { valnum = 0; valtype = NC_UNSPECIFIED; /* get a large block for attributes, realloc later */ att_space = emalloc(H4_MAX_NC_ATTSIZE); /* make all kinds of pointers point to it */ char_valp = (char *)att_space; byte_valp = (char *)att_space; short_valp = (short *)att_space; long_valp = (nclong *)att_space; float_valp = (float *)att_space; double_valp = (double *)att_space; } #line 1429 "mfhdf/ncgen/ncgentab.c" break; case 40: /* attdecl: att $@5 '=' attvallist */ #line 245 "mfhdf/ncgen/ncgen.y" { if (natts >= H4_MAX_NC_ATTRS) derror("too many attributes"); atts[natts].var = varnum; atts[natts].type = valtype; atts[natts].len = valnum; /* shrink space down to what was really needed */ att_space = erealloc(att_space, valnum * nctypelen(valtype)); atts[natts].val = att_space; if (NC_STREQ(atts[natts].name, _FillValue)) { nc_putfill(atts[natts].type, atts[natts].val, &vars[atts[natts].var].fill_value); } natts++; } #line 1450 "mfhdf/ncgen/ncgentab.c" break; case 42: /* att: ':' attr */ #line 264 "mfhdf/ncgen/ncgen.y" { varnum = -1; /* handle of "global" attribute */ } #line 1458 "mfhdf/ncgen/ncgentab.c" break; case 43: /* avar: var */ #line 270 "mfhdf/ncgen/ncgen.y" { if (yyvsp[0]->is_var == 1) varnum = yyvsp[0]->vnum; else { derror("%s not declared as a variable, fatal error", yyvsp[0]->name); YYABORT; } } #line 1471 "mfhdf/ncgen/ncgentab.c" break; case 44: /* attr: IDENT */ #line 280 "mfhdf/ncgen/ncgen.y" { atts[natts].name = (char *)emalloc(strlen(yyvsp[0]->name) + 1); (void)strcpy(atts[natts].name, yyvsp[0]->name); } #line 1480 "mfhdf/ncgen/ncgentab.c" break; case 47: /* aconst: attconst */ #line 289 "mfhdf/ncgen/ncgen.y" { if (valtype == NC_UNSPECIFIED) valtype = atype_code; if (valtype != atype_code) derror("values for attribute must be all of same type"); } #line 1491 "mfhdf/ncgen/ncgentab.c" break; case 48: /* attconst: CHAR_CONST */ #line 298 "mfhdf/ncgen/ncgen.y" { atype_code = NC_CHAR; *char_valp++ = char_val; valnum++; } #line 1501 "mfhdf/ncgen/ncgentab.c" break; case 49: /* attconst: TERMSTRING */ #line 304 "mfhdf/ncgen/ncgen.y" { atype_code = NC_CHAR; { /* don't null-terminate attribute strings */ int len = strlen(termstring); valnum += len; (void)strncpy(char_valp, termstring, len); char_valp += len; } } #line 1516 "mfhdf/ncgen/ncgentab.c" break; case 50: /* attconst: BYTE_CONST */ #line 315 "mfhdf/ncgen/ncgen.y" { atype_code = NC_BYTE; *byte_valp++ = byte_val; valnum++; } #line 1526 "mfhdf/ncgen/ncgentab.c" break; case 51: /* attconst: SHORT_CONST */ #line 321 "mfhdf/ncgen/ncgen.y" { atype_code = NC_SHORT; *short_valp++ = short_val; valnum++; } #line 1536 "mfhdf/ncgen/ncgentab.c" break; case 52: /* attconst: LONG_CONST */ #line 327 "mfhdf/ncgen/ncgen.y" { atype_code = NC_LONG; *long_valp++ = long_val; valnum++; } #line 1546 "mfhdf/ncgen/ncgentab.c" break; case 53: /* attconst: FLOAT_CONST */ #line 333 "mfhdf/ncgen/ncgen.y" { atype_code = NC_FLOAT; *float_valp++ = float_val; valnum++; } #line 1556 "mfhdf/ncgen/ncgentab.c" break; case 54: /* attconst: DOUBLE_CONST */ #line 339 "mfhdf/ncgen/ncgen.y" { atype_code = NC_DOUBLE; *double_valp++ = double_val; valnum++; } #line 1566 "mfhdf/ncgen/ncgentab.c" break; case 59: /* $@6: %empty */ #line 354 "mfhdf/ncgen/ncgen.y" { valtype = vars[varnum].type; /* variable type */ valnum = 0; /* values accumulated for variable */ vars[varnum].has_data = 1; /* compute dimensions product (size of a "record") */ var_size = nctypelen(valtype); if (vars[varnum].ndims == 0) var_len = 1; else if (vars[varnum].dims[0] == rec_dim) { var_len = 1; /* one record for unlimited vars */ netcdf_record_number = 0; } else var_len = dims[vars[varnum].dims[0]].size; for (dimnum = 1; dimnum < vars[varnum].ndims; dimnum++) var_len = var_len * dims[vars[varnum].dims[dimnum]].size; /* allocate memory for a record of variable data */ if (var_len * var_size != (unsigned)(var_len * var_size)) { derror("too much data for this machine"); exit(9); } rec_start = malloc((unsigned)(var_len * var_size)); if (rec_start == 0) { derror("out of memory\n"); exit(3); } rec_cur = rec_start; switch (valtype) { case NC_CHAR: char_valp = (char *)rec_start; break; case NC_BYTE: byte_valp = (char *)rec_start; break; case NC_SHORT: short_valp = (short *)rec_start; break; case NC_LONG: long_valp = (nclong *)rec_start; break; case NC_FLOAT: float_valp = (float *)rec_start; break; case NC_DOUBLE: double_valp = (double *)rec_start; break; } } #line 1619 "mfhdf/ncgen/ncgentab.c" break; case 60: /* datadecl: avar $@6 '=' constlist */ #line 403 "mfhdf/ncgen/ncgen.y" { if (valnum > 0 && valnum < var_len) { /* leftovers */ nc_fill(valtype, var_len - valnum, rec_cur, vars[varnum].fill_value); /* put out record of var_len values */ if (derror_count == 0) put_variable(rec_start); } free((char *)rec_start); } #line 1636 "mfhdf/ncgen/ncgentab.c" break; case 63: /* $@7: %empty */ #line 420 "mfhdf/ncgen/ncgen.y" { if (valnum >= var_len) { derror("too many values for this variable"); exit(4); } not_a_string = 1; } #line 1648 "mfhdf/ncgen/ncgentab.c" break; case 64: /* dconst: $@7 const */ #line 428 "mfhdf/ncgen/ncgen.y" { if (not_a_string) { switch (valtype) { case NC_CHAR: rec_cur = (void *)char_valp; break; case NC_BYTE: rec_cur = (void *)byte_valp; break; case NC_SHORT: rec_cur = (void *)short_valp; break; case NC_LONG: rec_cur = (void *)long_valp; break; case NC_FLOAT: rec_cur = (void *)float_valp; break; case NC_DOUBLE: rec_cur = (void *)double_valp; break; } } if (valnum >= var_len) { /* put out record of var_len elements */ if (derror_count == 0) put_variable(rec_start); /* if this variable is unbounded, reset for */ /* next record */ if (vars[varnum].dims[0] == rec_dim) { valnum = 0; netcdf_record_number++; rec_cur = rec_start; switch (valtype) { case NC_CHAR: char_valp = (char *)rec_start; break; case NC_BYTE: byte_valp = (char *)rec_start; break; case NC_SHORT: short_valp = (short *)rec_start; break; case NC_LONG: long_valp = (nclong *)rec_start; break; case NC_FLOAT: float_valp = (float *)rec_start; break; case NC_DOUBLE: double_valp = (double *)rec_start; break; } } } } #line 1709 "mfhdf/ncgen/ncgentab.c" break; case 65: /* const: CHAR_CONST */ #line 487 "mfhdf/ncgen/ncgen.y" { atype_code = NC_CHAR; switch (valtype) { case NC_CHAR: *char_valp++ = char_val; break; case NC_BYTE: *byte_valp++ = char_val; break; case NC_SHORT: *short_valp++ = char_val; break; case NC_LONG: *long_valp++ = char_val; break; case NC_FLOAT: *float_valp++ = char_val; break; case NC_DOUBLE: *double_valp++ = char_val; break; } valnum++; } #line 1738 "mfhdf/ncgen/ncgentab.c" break; case 66: /* const: TERMSTRING */ #line 512 "mfhdf/ncgen/ncgen.y" { not_a_string = 0; atype_code = NC_CHAR; { int len = strlen(termstring); valnum += len; if (valnum > var_len) { derror("string won't fit in this variable"); exit(5); } switch (valtype) { case NC_CHAR: (void)strncpy(char_valp, termstring, len); char_valp += len; rec_cur = (void *)char_valp; break; case NC_BYTE: (void)strncpy(byte_valp, termstring, len); byte_valp += len; rec_cur = (void *)byte_valp; break; case NC_SHORT: case NC_LONG: case NC_FLOAT: case NC_DOUBLE: derror("string value invalid for %s variable", nctype(valtype)); break; } } } #line 1775 "mfhdf/ncgen/ncgentab.c" break; case 67: /* const: BYTE_CONST */ #line 545 "mfhdf/ncgen/ncgen.y" { atype_code = NC_BYTE; switch (valtype) { case NC_CHAR: *char_valp++ = byte_val; break; case NC_BYTE: *byte_valp++ = byte_val; break; case NC_SHORT: *short_valp++ = byte_val; break; case NC_LONG: *long_valp++ = byte_val; break; case NC_FLOAT: *float_valp++ = byte_val; break; case NC_DOUBLE: *double_valp++ = byte_val; break; } valnum++; } #line 1804 "mfhdf/ncgen/ncgentab.c" break; case 68: /* const: SHORT_CONST */ #line 570 "mfhdf/ncgen/ncgen.y" { atype_code = NC_SHORT; switch (valtype) { case NC_CHAR: *char_valp++ = short_val; break; case NC_BYTE: *byte_valp++ = short_val; break; case NC_SHORT: *short_valp++ = short_val; break; case NC_LONG: *long_valp++ = short_val; break; case NC_FLOAT: *float_valp++ = short_val; break; case NC_DOUBLE: *double_valp++ = short_val; break; } valnum++; } #line 1833 "mfhdf/ncgen/ncgentab.c" break; case 69: /* const: LONG_CONST */ #line 595 "mfhdf/ncgen/ncgen.y" { atype_code = NC_LONG; switch (valtype) { case NC_CHAR: *char_valp++ = long_val; break; case NC_BYTE: *byte_valp++ = long_val; break; case NC_SHORT: *short_valp++ = long_val; break; case NC_LONG: *long_valp++ = long_val; break; case NC_FLOAT: *float_valp++ = long_val; break; case NC_DOUBLE: *double_valp++ = long_val; break; } valnum++; } #line 1862 "mfhdf/ncgen/ncgentab.c" break; case 70: /* const: FLOAT_CONST */ #line 620 "mfhdf/ncgen/ncgen.y" { atype_code = NC_FLOAT; switch (valtype) { case NC_CHAR: *char_valp++ = float_val; break; case NC_BYTE: *byte_valp++ = float_val; break; case NC_SHORT: *short_valp++ = float_val; break; case NC_LONG: *long_valp++ = float_val; break; case NC_FLOAT: *float_valp++ = float_val; break; case NC_DOUBLE: *double_valp++ = float_val; break; } valnum++; } #line 1891 "mfhdf/ncgen/ncgentab.c" break; case 71: /* const: DOUBLE_CONST */ #line 645 "mfhdf/ncgen/ncgen.y" { atype_code = NC_DOUBLE; switch (valtype) { case NC_CHAR: *char_valp++ = double_val; break; case NC_BYTE: *byte_valp++ = double_val; break; case NC_SHORT: *short_valp++ = double_val; break; case NC_LONG: *long_valp++ = double_val; break; case NC_FLOAT: if (double_val == FILL_DOUBLE) *float_valp++ = FILL_FLOAT; else *float_valp++ = double_val; break; case NC_DOUBLE: *double_valp++ = double_val; break; } valnum++; } #line 1923 "mfhdf/ncgen/ncgentab.c" break; #line 1927 "mfhdf/ncgen/ncgentab.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT("-> $$ =", YY_CAST(yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK(yylen); yylen = 0; *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE(yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; yyerror(YY_("syntax error")); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; ++yynerrs; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default(yyn)) { yyn += YYSYMBOL_YYerror; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct("Error: popping", YY_ACCESSING_SYMBOL(yystate), yyvsp); YYPOPSTACK(1); yystate = *yyssp; YY_STACK_PRINT(yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT("Shifting", YY_ACCESSING_SYMBOL(yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturnlab; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturnlab; /*-----------------------------------------------------------. | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | `-----------------------------------------------------------*/ yyexhaustedlab: yyerror(YY_("memory exhausted")); yyresult = 2; goto yyreturnlab; /*----------------------------------------------------------. | yyreturnlab -- parsing is finished, clean up and return. | `----------------------------------------------------------*/ yyreturnlab: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE(yychar); yydestruct("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK(yylen); YY_STACK_PRINT(yyss, yyssp); while (yyssp != yyss) { yydestruct("Cleanup: popping", YY_ACCESSING_SYMBOL(+*yyssp), yyvsp); YYPOPSTACK(1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE(yyss); #endif return yyresult; } #line 676 "mfhdf/ncgen/ncgen.y" /* PROGRAMS */ /* get lexical input routine generated by lex */ #include "ncgenyy.c" void derror(const char *fmt, ...); void yyerror(s) /* called for yacc syntax error */ char *s; { derror(s); } #ifndef yywrap int yywrap() /* returns 1 on EOF if no more input */ { return 1; } #endif /* yywrap() */ /* Symbol table operations for ncgen tool */ YYSTYPE lookup(char *sname) /* find sname in symbol table (linear search) */ { YYSTYPE sp; for (sp = symlist; sp != (YYSTYPE)0; sp = sp->next) if (NC_STREQ(sp->name, sname)) { return sp; } return 0; /* 0 ==> not found */ } YYSTYPE install(char *sname) /* install sname in symbol table */ { YYSTYPE sp; sp = (YYSTYPE)emalloc(sizeof(struct Symbol)); sp->name = (char *)emalloc(strlen(sname) + 1); /* +1 for '\0' */ (void)strcpy(sp->name, sname); sp->next = symlist; /* put at front of list */ sp->is_dim = 0; sp->is_var = 0; sp->is_att = 0; symlist = sp; return sp; } void clearout() /* reset symbol table to empty */ { YYSTYPE sp, tp; for (sp = symlist; sp != (YYSTYPE)0;) { tp = sp->next; free(sp->name); free((char *)sp); sp = tp; } symlist = 0; } hdf4-hdf4.3.1/mfhdf/ncgen/ncgentab.h000066400000000000000000000063461503061704500171500ustar00rootroot00000000000000/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_YY_MFHDF_NCGEN_NCGENTAB_H_INCLUDED #define YY_YY_MFHDF_NCGEN_NCGENTAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG #define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE #define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ NC_UNLIMITED_K = 258, /* NC_UNLIMITED_K */ BYTE_K = 259, /* BYTE_K */ CHAR_K = 260, /* CHAR_K */ SHORT_K = 261, /* SHORT_K */ LONG_K = 262, /* LONG_K */ FLOAT_K = 263, /* FLOAT_K */ DOUBLE_K = 264, /* DOUBLE_K */ IDENT = 265, /* IDENT */ TERMSTRING = 266, /* TERMSTRING */ BYTE_CONST = 267, /* BYTE_CONST */ CHAR_CONST = 268, /* CHAR_CONST */ SHORT_CONST = 269, /* SHORT_CONST */ LONG_CONST = 270, /* LONG_CONST */ FLOAT_CONST = 271, /* FLOAT_CONST */ DOUBLE_CONST = 272, /* DOUBLE_CONST */ DIMENSIONS = 273, /* DIMENSIONS */ VARIABLES = 274, /* VARIABLES */ NETCDF = 275, /* NETCDF */ DATA = 276 /* DATA */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if !defined YYSTYPE && !defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; #define YYSTYPE_IS_TRIVIAL 1 #define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse(void); #endif /* !YY_YY_MFHDF_NCGEN_NCGENTAB_H_INCLUDED */ hdf4-hdf4.3.1/mfhdf/ncgen/ncgenyy.c000066400000000000000000001705771503061704500170460ustar00rootroot00000000000000#line 2 "mfhdf/ncgen/ncgenyy.c" #line 4 "mfhdf/ncgen/ncgenyy.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart ( FILE *input_file ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); void yy_delete_buffer ( YY_BUFFER_STATE b ); void yy_flush_buffer ( YY_BUFFER_STATE b ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); void yypop_buffer_state ( void ); static void yyensure_buffer_stack ( void ); static void yy_load_buffer_state ( void ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); void *yyalloc ( yy_size_t ); void *yyrealloc ( void *, yy_size_t ); void yyfree ( void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) typedef flex_uint8_t YY_CHAR; FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif #define yytext_ptr yytext static yy_state_type yy_get_previous_state ( void ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); static int yy_get_next_buffer ( void ); static void yynoreturn yy_fatal_error ( const char* msg ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 29 #define YY_END_OF_BUFFER 30 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[241] = { 0, 0, 0, 30, 28, 27, 17, 28, 28, 28, 28, 18, 28, 21, 21, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 27, 0, 2, 0, 0, 0, 18, 0, 21, 0, 0, 18, 18, 0, 19, 1, 22, 22, 22, 21, 20, 0, 21, 21, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 23, 0, 0, 0, 18, 0, 0, 18, 1, 22, 18, 22, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 7, 15, 16, 16, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 7, 16, 16, 16, 16, 16, 16, 26, 24, 0, 0, 18, 14, 18, 19, 18, 5, 4, 16, 16, 16, 16, 16, 16, 16, 16, 7, 16, 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 24, 0, 25, 0, 12, 16, 16, 16, 16, 16, 16, 16, 6, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 13, 13, 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 9, 16, 16, 16, 16, 11, 16, 10, 0 } ; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 1, 5, 1, 1, 1, 6, 1, 7, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 13, 1, 1, 1, 1, 1, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 26, 27, 23, 23, 28, 29, 30, 31, 32, 23, 33, 34, 23, 1, 35, 1, 1, 23, 1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 23, 23, 45, 46, 47, 48, 23, 23, 49, 50, 51, 52, 53, 23, 54, 55, 23, 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const YY_CHAR yy_meta[57] = { 0, 1, 1, 2, 1, 3, 1, 4, 1, 1, 5, 5, 5, 1, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6 } ; static const flex_int16_t yy_base[251] = { 0, 0, 0, 411, 465, 408, 465, 53, 374, 50, 55, 86, 399, 124, 171, 0, 373, 385, 58, 64, 54, 53, 378, 41, 386, 382, 376, 387, 344, 355, 65, 352, 347, 338, 345, 344, 340, 335, 345, 378, 79, 465, 80, 374, 76, 0, 180, 0, 110, 342, 0, 465, 139, 465, 0, 123, 194, 160, 465, 465, 0, 0, 465, 0, 347, 362, 345, 349, 342, 320, 81, 174, 235, 344, 322, 339, 327, 341, 336, 338, 349, 335, 335, 323, 299, 313, 296, 299, 292, 295, 291, 294, 289, 303, 290, 292, 287, 98, 465, 330, 113, 329, 271, 307, 203, 307, 0, 465, 212, 130, 314, 302, 315, 310, 312, 288, 0, 0, 309, 286, 303, 276, 295, 298, 0, 289, 283, 287, 286, 267, 257, 269, 264, 266, 266, 261, 258, 73, 254, 249, 253, 252, 465, 465, 217, 289, 465, 465, 0, 0, 465, 0, 0, 280, 266, 267, 244, 257, 235, 265, 237, 0, 262, 0, 248, 252, 261, 260, 225, 226, 219, 227, 251, 228, 215, 219, 228, 465, 258, 465, 257, 465, 232, 242, 218, 234, 237, 206, 230, 0, 226, 228, 192, 201, 200, 220, 197, 193, 198, 211, 0, 210, 179, 197, 173, 352, 187, 186, 164, 158, 152, 156, 172, 150, 155, 139, 0, 387, 175, 169, 128, 133, 118, 129, 111, 0, 127, 108, 82, 89, 69, 83, 0, 95, 57, 81, 69, 465, 56, 465, 465, 422, 428, 431, 436, 442, 59, 446, 449, 454, 459 } ; static const flex_int16_t yy_def[251] = { 0, 240, 1, 240, 240, 240, 240, 241, 242, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240, 241, 240, 241, 240, 244, 11, 240, 14, 240, 240, 11, 240, 240, 240, 245, 13, 55, 56, 240, 240, 246, 14, 240, 243, 243, 243, 243, 243, 243, 243, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 241, 240, 240, 240, 247, 240, 240, 240, 240, 245, 240, 57, 246, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240, 240, 240, 248, 240, 240, 56, 56, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 249, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 250, 249, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240, 243, 240, 0, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 } ; static const flex_int16_t yy_nxt[522] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 4, 15, 16, 17, 18, 19, 20, 15, 15, 21, 15, 22, 15, 23, 15, 24, 25, 15, 26, 27, 15, 15, 4, 15, 28, 29, 30, 19, 31, 15, 15, 32, 33, 15, 34, 15, 35, 36, 15, 37, 38, 15, 15, 4, 41, 45, 78, 46, 47, 47, 45, 109, 46, 47, 47, 48, 239, 70, 71, 66, 48, 72, 72, 72, 79, 73, 75, 67, 49, 239, 41, 97, 68, 100, 100, 42, 172, 48, 102, 102, 102, 237, 48, 50, 50, 50, 74, 76, 86, 41, 51, 52, 53, 69, 238, 237, 87, 51, 173, 236, 88, 42, 42, 70, 70, 143, 235, 102, 102, 102, 144, 144, 51, 52, 53, 232, 234, 101, 51, 45, 42, 55, 55, 55, 233, 56, 56, 56, 56, 57, 56, 232, 104, 104, 107, 58, 105, 105, 105, 124, 59, 107, 231, 240, 60, 230, 59, 56, 56, 56, 56, 57, 56, 70, 70, 107, 58, 108, 108, 108, 229, 59, 107, 228, 240, 60, 45, 59, 61, 61, 61, 72, 72, 72, 227, 45, 48, 46, 46, 46, 226, 225, 62, 225, 224, 48, 223, 59, 222, 240, 221, 56, 56, 56, 161, 220, 59, 219, 48, 56, 105, 105, 105, 62, 218, 240, 240, 48, 59, 177, 240, 215, 161, 214, 178, 178, 148, 59, 149, 213, 212, 56, 211, 150, 210, 205, 205, 209, 200, 208, 207, 240, 72, 72, 72, 206, 205, 204, 148, 116, 149, 117, 203, 202, 150, 201, 116, 200, 199, 179, 177, 198, 197, 189, 196, 195, 194, 163, 193, 192, 181, 116, 191, 117, 190, 189, 188, 116, 102, 102, 102, 187, 186, 185, 163, 146, 184, 53, 183, 182, 181, 179, 146, 176, 175, 174, 163, 161, 171, 170, 169, 168, 167, 152, 151, 166, 165, 146, 164, 53, 163, 162, 161, 146, 105, 105, 105, 160, 159, 158, 157, 51, 156, 53, 155, 154, 153, 152, 51, 151, 147, 142, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 51, 131, 53, 130, 129, 128, 51, 216, 216, 216, 216, 216, 216, 127, 216, 216, 126, 125, 124, 216, 123, 122, 121, 120, 119, 118, 115, 114, 113, 112, 111, 110, 103, 98, 39, 96, 95, 94, 93, 92, 91, 216, 216, 216, 216, 216, 216, 216, 90, 216, 216, 89, 85, 84, 216, 83, 82, 81, 80, 77, 65, 64, 54, 44, 39, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 216, 40, 40, 40, 40, 40, 40, 43, 43, 43, 43, 43, 43, 63, 63, 99, 240, 99, 99, 99, 99, 106, 240, 106, 106, 106, 106, 145, 240, 145, 180, 240, 180, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216, 3, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 } ; static const flex_int16_t yy_chk[522] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 23, 9, 9, 9, 10, 246, 10, 10, 10, 9, 238, 19, 19, 18, 10, 19, 19, 19, 23, 20, 21, 18, 10, 236, 40, 42, 18, 44, 44, 7, 137, 9, 70, 70, 70, 235, 10, 11, 11, 11, 20, 21, 30, 97, 11, 11, 11, 18, 234, 233, 30, 11, 137, 231, 30, 40, 42, 48, 48, 100, 230, 48, 48, 48, 100, 100, 11, 11, 11, 229, 228, 44, 11, 13, 97, 13, 13, 13, 227, 13, 13, 13, 13, 13, 13, 226, 52, 52, 55, 13, 52, 52, 52, 224, 13, 109, 223, 55, 13, 222, 109, 13, 13, 13, 13, 13, 13, 57, 57, 55, 13, 57, 57, 57, 221, 13, 109, 220, 55, 13, 14, 109, 14, 14, 14, 71, 71, 71, 219, 46, 14, 46, 46, 46, 218, 215, 14, 214, 213, 46, 212, 14, 211, 56, 210, 56, 56, 56, 209, 208, 46, 207, 14, 56, 104, 104, 104, 14, 206, 108, 108, 46, 14, 144, 56, 204, 203, 202, 144, 144, 108, 46, 108, 201, 199, 56, 198, 108, 197, 196, 195, 194, 193, 192, 191, 56, 72, 72, 72, 190, 188, 187, 108, 72, 108, 72, 186, 185, 108, 184, 72, 183, 182, 180, 178, 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 72, 166, 72, 165, 164, 162, 72, 102, 102, 102, 160, 159, 158, 157, 102, 156, 102, 155, 154, 153, 145, 102, 141, 140, 139, 138, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 102, 126, 102, 125, 123, 122, 102, 105, 105, 105, 121, 120, 119, 118, 105, 115, 105, 114, 113, 112, 111, 105, 110, 103, 101, 99, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 105, 86, 105, 85, 84, 83, 105, 205, 205, 205, 205, 205, 205, 82, 205, 205, 81, 80, 79, 205, 78, 77, 76, 75, 74, 73, 69, 68, 67, 66, 65, 64, 49, 43, 39, 38, 37, 36, 35, 34, 33, 205, 217, 217, 217, 217, 217, 217, 32, 217, 217, 31, 29, 28, 217, 27, 26, 25, 24, 22, 17, 16, 12, 8, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 243, 243, 244, 0, 244, 244, 244, 244, 245, 0, 245, 245, 245, 245, 247, 0, 247, 248, 0, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "mfhdf/ncgen/ncgen.l" #line 2 "mfhdf/ncgen/ncgen.l" /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ /* lex specification for tokens for ncgen */ char errstr[100]; /* for short error messages */ void expand_escapes(); #include #include #include #include #include "ncgentab.h" #line 653 "mfhdf/ncgen/ncgenyy.c" #line 654 "mfhdf/ncgen/ncgenyy.c" #define INITIAL 0 #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals ( void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy ( void ); int yyget_debug ( void ); void yyset_debug ( int debug_flag ); YY_EXTRA_TYPE yyget_extra ( void ); void yyset_extra ( YY_EXTRA_TYPE user_defined ); FILE *yyget_in ( void ); void yyset_in ( FILE * _in_str ); FILE *yyget_out ( void ); void yyset_out ( FILE * _out_str ); int yyget_leng ( void ); char *yyget_text ( void ); int yyget_lineno ( void ); void yyset_lineno ( int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap ( void ); #else extern int yywrap ( void ); #endif #endif #ifndef YY_NO_UNPUT static void yyunput ( int c, char *buf_ptr ); #endif #ifndef yytext_ptr static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput ( void ); #else static int input ( void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } { #line 22 "mfhdf/ncgen/ncgen.l" #line 865 "mfhdf/ncgen/ncgenyy.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 241 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 465 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 23 "mfhdf/ncgen/ncgen.l" /* comment */ ; YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 25 "mfhdf/ncgen/ncgen.l" { if(yyleng > MAXTRST) { yyerror("string too long, truncated\n"); yytext[MAXTRST-1] = '\0'; } expand_escapes(termstring,yytext,yyleng); return (TERMSTRING); } YY_BREAK case 3: YY_RULE_SETUP #line 34 "mfhdf/ncgen/ncgen.l" {return (FLOAT_K);} YY_BREAK case 4: YY_RULE_SETUP #line 35 "mfhdf/ncgen/ncgen.l" {return (CHAR_K);} YY_BREAK case 5: YY_RULE_SETUP #line 36 "mfhdf/ncgen/ncgen.l" {return (BYTE_K);} YY_BREAK case 6: YY_RULE_SETUP #line 37 "mfhdf/ncgen/ncgen.l" {return (SHORT_K);} YY_BREAK case 7: YY_RULE_SETUP #line 38 "mfhdf/ncgen/ncgen.l" {return (LONG_K);} YY_BREAK case 8: YY_RULE_SETUP #line 39 "mfhdf/ncgen/ncgen.l" {return (DOUBLE_K);} YY_BREAK case 9: YY_RULE_SETUP #line 40 "mfhdf/ncgen/ncgen.l" {long_val = -1; return (NC_UNLIMITED_K);} YY_BREAK case 10: YY_RULE_SETUP #line 43 "mfhdf/ncgen/ncgen.l" {return (DIMENSIONS);} YY_BREAK case 11: YY_RULE_SETUP #line 44 "mfhdf/ncgen/ncgen.l" {return (VARIABLES);} YY_BREAK case 12: YY_RULE_SETUP #line 45 "mfhdf/ncgen/ncgen.l" {return (DATA);} YY_BREAK case 13: /* rule 13 can match eol */ YY_RULE_SETUP #line 46 "mfhdf/ncgen/ncgen.l" { char *s = (char*)yytext+strlen("netcdf"); char *t = (char*)yytext+yyleng-1; while (isspace(*s)) s++; while (isspace(*t)) t--; t++; netcdfname = (char *) emalloc(t-s+1); (void) strncpy(netcdfname, s, t-s); netcdfname[t-s] = '\0'; return (NETCDF); } YY_BREAK case 14: YY_RULE_SETUP #line 60 "mfhdf/ncgen/ncgen.l" { /* double missing values */ double_val = FILL_DOUBLE; /* IEEE double infinity */ return (DOUBLE_CONST); } YY_BREAK case 15: YY_RULE_SETUP #line 65 "mfhdf/ncgen/ncgen.l" { /* float missing values */ float_val = FILL_FLOAT; /* IEEE float infinity */ return (FLOAT_CONST); } YY_BREAK case 16: YY_RULE_SETUP #line 69 "mfhdf/ncgen/ncgen.l" { if ((yylval = lookup(yytext)) == NULL) { yylval = install(yytext); } return (IDENT); } YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP #line 76 "mfhdf/ncgen/ncgen.l" { lineno++ ; } YY_BREAK case 18: YY_RULE_SETUP #line 79 "mfhdf/ncgen/ncgen.l" { if (sscanf((char*)yytext, "%le", &double_val) != 1) { sprintf(errstr,"bad long or double constant: %s",(char*)yytext); yyerror(errstr); } return (DOUBLE_CONST); } YY_BREAK case 19: YY_RULE_SETUP #line 86 "mfhdf/ncgen/ncgen.l" { if (sscanf((char*)yytext, "%e", &float_val) != 1) { sprintf(errstr,"bad float constant: %s",(char*)yytext); yyerror(errstr); } return (FLOAT_CONST); } YY_BREAK case 20: YY_RULE_SETUP #line 93 "mfhdf/ncgen/ncgen.l" { if (sscanf((char*)yytext, "%hd", &short_val) != 1) { sprintf(errstr,"bad short constant: %s",(char*)yytext); yyerror(errstr); } return (SHORT_CONST); } YY_BREAK case 21: YY_RULE_SETUP #line 100 "mfhdf/ncgen/ncgen.l" { /* machines where doubles have more precision than longs. */ /* * Because strtol and sscanf with "%ld" may silently give * bad results from undetected overflow for strings like * "30000000000", we scan as double first. */ double dd; if (sscanf((char*)yytext, "%le", &dd) != 1) { sprintf(errstr,"bad long constant: %s",(char*)yytext); yyerror(errstr); } if (dd < INT32_MIN || dd > INT32_MAX) { double_val = dd; return DOUBLE_CONST; } else { long_val = dd; return LONG_CONST; } } YY_BREAK case 22: YY_RULE_SETUP #line 122 "mfhdf/ncgen/ncgen.l" { long dd; if (sscanf((char*)yytext, "%li", &dd) != 1) { sprintf(errstr,"bad long constant: %s",(char*)yytext); yyerror(errstr); } long_val = dd; return LONG_CONST; } YY_BREAK case 23: /* rule 23 can match eol */ YY_RULE_SETUP #line 131 "mfhdf/ncgen/ncgen.l" { (void) sscanf((char*)&yytext[1],"%c",&byte_val); return (BYTE_CONST); } YY_BREAK case 24: YY_RULE_SETUP #line 135 "mfhdf/ncgen/ncgen.l" { byte_val = strtol((char*)&yytext[2], (char **) 0, 8); return (BYTE_CONST); } YY_BREAK case 25: YY_RULE_SETUP #line 139 "mfhdf/ncgen/ncgen.l" { byte_val = strtol((char*)&yytext[2], (char **) 0, 16); return (BYTE_CONST); } YY_BREAK case 26: YY_RULE_SETUP #line 143 "mfhdf/ncgen/ncgen.l" { switch ((char)yytext[2]) { case 'a': byte_val = '\007'; break; /* not everyone under- * stands '\a' yet */ case 'b': byte_val = '\b'; break; case 'f': byte_val = '\f'; break; case 'n': byte_val = '\n'; break; case 'r': byte_val = '\r'; break; case 't': byte_val = '\t'; break; case 'v': byte_val = '\v'; break; case '\\': byte_val = '\\'; break; case '?': byte_val = '\177'; break; case '\'': byte_val = '\''; break; default: byte_val = (char)yytext[2]; } return (BYTE_CONST); } YY_BREAK case 27: YY_RULE_SETUP #line 161 "mfhdf/ncgen/ncgen.l" {/* whitespace */ ; } YY_BREAK case 28: YY_RULE_SETUP #line 163 "mfhdf/ncgen/ncgen.l" return (yytext[0]) ; YY_BREAK case 29: YY_RULE_SETUP #line 164 "mfhdf/ncgen/ncgen.l" ECHO; YY_BREAK #line 1177 "mfhdf/ncgen/ncgenyy.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc( (void *) b->yy_ch_buf, (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { yy_state_type yy_current_state; char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 241 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { int yy_is_jam; char *yy_cp = (yy_c_buf_p); YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 241 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 240); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT static void yyunput (int c, char * yy_bp ) { char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ int number_to_move = (yy_n_chars) + 2; char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree( (void *) b->yy_ch_buf ); yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (const char * yystr ) { return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error (const char* msg ) { fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param _line_number line number * */ void yyset_lineno (int _line_number ) { yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str ) { yyin = _in_str ; } void yyset_out (FILE * _out_str ) { yyout = _out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int _bdebug ) { yy_flex_debug = _bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 164 "mfhdf/ncgen/ncgen.l" hdf4-hdf4.3.1/mfhdf/ncgen/test0.cdl000066400000000000000000000016211503061704500167300ustar00rootroot00000000000000netcdf test0 { dimensions: i = 2; j = 3; k = unlimited; l = 3 ; variables: char bears(i,j,l); bears:act = "text string\n\t123"; // bears:acb = '\n'; // "byte" type not in some FORTRANs bears:acs = -40s ; bears:acl = 17000 ; bears:acf = -2.0f, 1.f, 0.0f ; bears:acd = -1.0, 0.75 ; // byte dust(i,j); // "byte" type short order(i,j); long shot(i,j); float aloan(i,j); double cross(i,j); int i(i); float j(j); short l(l); :history = "This is an example of a multi-line global\n", "attribute. It could be used for representing the\n", "processing history of the data, for example." ; data: bears = "indistinguishable" ; // dust = -127,0,127,128,255; // "byte" type order = 1s, 2s, 3s, 4s, 5s, 6s; shot = 2, 3, 4, 5, 6, 7 ; aloan = 3.f, 4.f, 5.f, 6.f, 7.f, 1.0e12f ; cross = '\4', 5s, 0.000244140625, 7.0f, 8.0, 1.0e10 ; i = 10, 20; j = 2, 4, 6; l = 10, 9, 8; } hdf4-hdf4.3.1/mfhdf/ncgen/testncgen.sh.in000066400000000000000000000057731503061704500201540ustar00rootroot00000000000000#! /bin/sh # Tests for ncgen srcdir=@srcdir@ NCDUMP='../ncdump/ncdump' RM='rm -f' CMP='cmp -s' DIFF='diff -c' CP='cp' nerrors=0 verbose=yes # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All ncgen tests passed" else MESG 0 "ncgen tests failed: $nerrors" fi exit $nerrors } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } bcheck() { ## Test the "-b" option of ncgen ${TESTS_ENVIRONMENT} ./ncgen -b test1.cdl ${TESTS_ENVIRONMENT} $NCDUMP test1.nc > test2.cdl $DIFF test1.cdl test2.cdl RET=$? if [ $RET -eq 0 ]; then echo "*** ncgen -b test successful ***" else echo "*** ncgen -b test failed ***" nerrors="`expr $nerrors + 1`" fi } ccheck() { ## Test the "-c" option of ncgen ${TESTS_ENVIRONMENT} ./ctest0 # tests `-c' option, creates ctest0.nc ${TESTS_ENVIRONMENT} $NCDUMP -n test1 ctest0.nc > ctest1.cdl $DIFF test1.cdl ctest1.cdl RET=$? if [ $RET -eq 0 ]; then echo "*** ncgen -c test successful ***" else echo "*** ncgen -c test failed ***" nerrors="`expr $nerrors + 1`" fi } fcheck() { ## Test the "-f" option of ncgen ${TESTS_ENVIRONMENT} ./ftest0 ${TESTS_ENVIRONMENT} $NCDUMP -n test1 ftest0.nc > ftest1.cdl $DIFF test1.cdl ftest1.cdl RET=$? if [ $RET -eq 0 ]; then echo "*** ncgen -f test successful ***" else echo "*** ncgen -f test failed (but roundoff differences are OK) ***" nerrors="`expr $nerrors + 1`" fi } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable # RUN() { # create test files ${TESTS_ENVIRONMENT} ./ncgen -b -o test0.nc $srcdir/test0.cdl ${TESTS_ENVIRONMENT} $NCDUMP -n test1 test0.nc > test1.cdl # Run test. if [ "$HDF_BUILD_NETCDF" = "0" ]; then if [ "$HDF_BUILD_FORTRAN" = "0" ]; then bcheck ccheck fcheck else bcheck ccheck fi else bcheck ccheck fi } ############################################################################## ### T H E T E S T S ### ############################################################################## # Print a beginning banner MESG 0 "Running ncgen tests" # compare output RUN # End of test, return exit code FINISH hdf4-hdf4.3.1/mfhdf/nctest/000077500000000000000000000000001503061704500154135ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/nctest/CMakeLists.txt000066400000000000000000000027251503061704500201610ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_NCTEST C) set (nctest_SRCS ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/add.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/atttests.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/cdftests.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/dimtests.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/driver.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/emalloc.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/error.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/misctest.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/rec.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/slabs.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/val.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/varget_unlim.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/varget.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/vargetg.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/varput.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/varputg.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/vardef.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/vartests.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/vputget.c ${HDF4_MFHDF_NCTEST_SOURCE_DIR}/vputgetg.c ) add_executable (nctest ${nctest_SRCS}) target_include_directories(nctest PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (nctest STATIC) target_link_libraries (nctest PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (nctest SHARED) target_link_libraries (nctest PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (nctest PROPERTIES COMPILE_DEFINITIONS "HDF") include (CMakeTests.cmake) hdf4-hdf4.3.1/mfhdf/nctest/CMakeTests.cmake000066400000000000000000000021731503061704500204230ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## set (HDF4_NC_TEST_FILES test_unlim.cdl test_unlim.nc ) foreach (h4_file ${HDF4_NC_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_NCTEST_SOURCE_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/${h4_file}" "nc_test_files") endforeach () add_custom_target(nc_test_files ALL COMMENT "Copying files needed by nc tests" DEPENDS ${nc_test_files_list}) # Remove any output file left over from previous test run add_test ( NAME NC_TEST-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove test.nc test2.nc ) #-- Adding test for nctest add_test (NAME NC_TEST-nctest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set_tests_properties (NC_TEST-nctest PROPERTIES DEPENDS NC_TEST-clearall-objects LABELS ${PROJECT_NAME}) hdf4-hdf4.3.1/mfhdf/nctest/Makefile.am000066400000000000000000000030031503061704500174430ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. nctest_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(nctest_INCLUDES) $(DEFINES) ############################################################################# ## Programs to build ## ############################################################################# TEST_PROG = nctest check_PROGRAMS = nctest # Information for building the "ncgen" program nctest_SOURCES = add.c atttests.c cdftests.c dimtests.c driver.c emalloc.c \ error.c misctest.c rec.c slabs.c val.c varget_unlim.c \ varget.c vargetg.c varput.c varputg.c vardef.c vartests.c \ vputget.c vputgetg.c nctest_LDADD = $(LIBMFHDF) $(LIBHDF) nctest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += test2.nc test.nc DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/nctest/Makefile.in000066400000000000000000001332201503061704500174610ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ check_PROGRAMS = nctest$(EXEEXT) TESTS = $(am__EXEEXT_1) subdir = mfhdf/nctest ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_nctest_OBJECTS = add.$(OBJEXT) atttests.$(OBJEXT) \ cdftests.$(OBJEXT) dimtests.$(OBJEXT) driver.$(OBJEXT) \ emalloc.$(OBJEXT) error.$(OBJEXT) misctest.$(OBJEXT) \ rec.$(OBJEXT) slabs.$(OBJEXT) val.$(OBJEXT) \ varget_unlim.$(OBJEXT) varget.$(OBJEXT) vargetg.$(OBJEXT) \ varput.$(OBJEXT) varputg.$(OBJEXT) vardef.$(OBJEXT) \ vartests.$(OBJEXT) vputget.$(OBJEXT) vputgetg.$(OBJEXT) nctest_OBJECTS = $(am_nctest_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/add.Po ./$(DEPDIR)/atttests.Po \ ./$(DEPDIR)/cdftests.Po ./$(DEPDIR)/dimtests.Po \ ./$(DEPDIR)/driver.Po ./$(DEPDIR)/emalloc.Po \ ./$(DEPDIR)/error.Po ./$(DEPDIR)/misctest.Po \ ./$(DEPDIR)/rec.Po ./$(DEPDIR)/slabs.Po ./$(DEPDIR)/val.Po \ ./$(DEPDIR)/vardef.Po ./$(DEPDIR)/varget.Po \ ./$(DEPDIR)/varget_unlim.Po ./$(DEPDIR)/vargetg.Po \ ./$(DEPDIR)/varput.Po ./$(DEPDIR)/varputg.Po \ ./$(DEPDIR)/vartests.Po ./$(DEPDIR)/vputget.Po \ ./$(DEPDIR)/vputgetg.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(nctest_SOURCES) DIST_SOURCES = $(nctest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = nctest$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/depcomp \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog test2.nc test.nc nctest_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(nctest_INCLUDES) $(DEFINES) ############################################################################# ############################################################################# TEST_PROG = nctest # Information for building the "ncgen" program nctest_SOURCES = add.c atttests.c cdftests.c dimtests.c driver.c emalloc.c \ error.c misctest.c rec.c slabs.c val.c varget_unlim.c \ varget.c vargetg.c varput.c varputg.c vardef.c vartests.c \ vputget.c vputgetg.c nctest_LDADD = $(LIBMFHDF) $(LIBHDF) nctest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/nctest/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/nctest/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_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 nctest$(EXEEXT): $(nctest_OBJECTS) $(nctest_DEPENDENCIES) $(EXTRA_nctest_DEPENDENCIES) @rm -f nctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nctest_OBJECTS) $(nctest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atttests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdftests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimtests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driver.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emalloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misctest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slabs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/val.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vardef.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varget_unlim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vargetg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varputg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vartests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vputget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vputgetg.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? nctest.log: nctest$(EXEEXT) @p='nctest$(EXEEXT)'; \ b='nctest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile all-local 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/add.Po -rm -f ./$(DEPDIR)/atttests.Po -rm -f ./$(DEPDIR)/cdftests.Po -rm -f ./$(DEPDIR)/dimtests.Po -rm -f ./$(DEPDIR)/driver.Po -rm -f ./$(DEPDIR)/emalloc.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/misctest.Po -rm -f ./$(DEPDIR)/rec.Po -rm -f ./$(DEPDIR)/slabs.Po -rm -f ./$(DEPDIR)/val.Po -rm -f ./$(DEPDIR)/vardef.Po -rm -f ./$(DEPDIR)/varget.Po -rm -f ./$(DEPDIR)/varget_unlim.Po -rm -f ./$(DEPDIR)/vargetg.Po -rm -f ./$(DEPDIR)/varput.Po -rm -f ./$(DEPDIR)/varputg.Po -rm -f ./$(DEPDIR)/vartests.Po -rm -f ./$(DEPDIR)/vputget.Po -rm -f ./$(DEPDIR)/vputgetg.Po -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 -f ./$(DEPDIR)/add.Po -rm -f ./$(DEPDIR)/atttests.Po -rm -f ./$(DEPDIR)/cdftests.Po -rm -f ./$(DEPDIR)/dimtests.Po -rm -f ./$(DEPDIR)/driver.Po -rm -f ./$(DEPDIR)/emalloc.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/misctest.Po -rm -f ./$(DEPDIR)/rec.Po -rm -f ./$(DEPDIR)/slabs.Po -rm -f ./$(DEPDIR)/val.Po -rm -f ./$(DEPDIR)/vardef.Po -rm -f ./$(DEPDIR)/varget.Po -rm -f ./$(DEPDIR)/varget_unlim.Po -rm -f ./$(DEPDIR)/vargetg.Po -rm -f ./$(DEPDIR)/varput.Po -rm -f ./$(DEPDIR)/varputg.Po -rm -f ./$(DEPDIR)/vartests.Po -rm -f ./$(DEPDIR)/vputget.Po -rm -f ./$(DEPDIR)/vputgetg.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am 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 \ mostlyclean-local pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/nctest/README000066400000000000000000000021031503061704500162670ustar00rootroot00000000000000This directory contains source code for nctest, an extensive test program for the entire netCDF library. Before compiling the sources in this directory, you must have already made the netCDF library from the ../src directory. For UNIX, just type "make". Then, when "nctest" is successfully made, invoke it with "nctest". Output from the test program should look like the following: --- Testing nccreate ... --- Testing ncopen ... --- Testing ncredef ... --- Testing ncendef ... --- Testing ncclose ... --- Testing ncinquire ... --- Testing ncsync ... --- Testing ncabort ... --- Testing ncdimdef ... --- Testing ncdimid ... --- Testing ncdiminq ... --- Testing ncdimrename ... --- Testing ncvardef ... --- Testing ncvarid ... --- Testing ncvarinq ... --- Testing ncvarput1 ... --- Testing ncvarget1 ... --- Testing ncvarput ... --- Testing ncvarget ... --- Testing ncvarrename ... --- Testing ncattput ... --- Testing ncattinq ... --- Testing ncattget ... --- Testing ncattcopy ... --- Testing ncattname ... --- Testing ncattrename ... --- Testing ncattdel ... --- Testing nctypelen ... hdf4-hdf4.3.1/mfhdf/nctest/add.c000066400000000000000000000127651503061704500163220ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ /* * utility functions to update in-memory netcdf by adding new * dimensions, variables, and attributes. */ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" #include "add.h" #include "emalloc.h" /* add the dimension idim to the netcdf test */ void add_dim(struct netcdf *test, struct cdfdim *idim) { static char pname[] = "add_dim"; if (test->ndims >= H4_MAX_NC_DIMS) { fprintf(stderr, "%s: too many dimensions (%d)", pname, test->ndims); return; } test->dims[test->ndims].size = idim->size; test->dims[test->ndims].name = (char *)emalloc(strlen(idim->name) + 1); (void)strcpy(test->dims[test->ndims].name, idim->name); if (idim->size == NC_UNLIMITED) test->xdimid = test->ndims; test->ndims++; } /* add the variable ivar to the netcdf test */ void add_var(struct netcdf *test, struct cdfvar *ivar) { static char pname[] = "add_var"; int i; if (test->nvars >= H4_MAX_NC_VARS) { fprintf(stderr, "%s: too many variables (%d)", pname, test->nvars); return; } test->vars[test->nvars].name = (char *)emalloc(strlen(ivar->name) + 1); (void)strcpy(test->vars[test->nvars].name, ivar->name); test->vars[test->nvars].type = ivar->type; test->vars[test->nvars].ndims = ivar->ndims; test->vars[test->nvars].dims = (int *)emalloc(sizeof(int) * ivar->ndims); for (i = 0; i < ivar->ndims; i++) test->vars[test->nvars].dims[i] = ivar->dims[i]; test->vars[test->nvars].natts = 0; test->nvars++; } /* add attribute iatt to the netcdf test */ void add_att(struct netcdf *test, int varid, struct cdfatt *iatt) { static char pname[] = "add_att"; int ia; /* attribute number */ if (test->natts >= MAX_TEST_ATTS) { fprintf(stderr, "%s: too many attributes (%d)", pname, test->natts); return; } /* if already defined, change existing attribute and return */ for (ia = 0; ia < test->natts; ia++) { if (test->atts[ia].var == varid && strcmp(test->atts[ia].name, iatt->name) == 0) { test->atts[ia].type = iatt->type; test->atts[ia].len = iatt->len; test->atts[ia].val = iatt->val; return; } } /* otherwise, add new attribute to list */ test->atts[test->natts].var = varid; test->atts[test->natts].name = (char *)emalloc(strlen(iatt->name) + 1); (void)strcpy(test->atts[test->natts].name, iatt->name); test->atts[test->natts].type = iatt->type; test->atts[test->natts].len = iatt->len; test->atts[test->natts].val = iatt->val; test->natts++; if (varid == NC_GLOBAL) test->ngatts++; else test->vars[varid].natts++; } /* reset in-memory netcdf test to empty */ void add_reset(struct netcdf *test) { test->ndims = 0; test->nvars = 0; test->natts = 0; test->ngatts = 0; test->xdimid = -1; /* no unlimited dimension */ } /* delete attribute iatt in the netcdf test */ void del_att(struct netcdf *test, int varid, struct cdfatt *iatt) { static char pname[] = "del_att"; int ia, ib; /* attribute number */ for (ia = 0; ia < test->natts; ia++) { /* find attribute to delete */ if (test->atts[ia].var == varid && strcmp(test->atts[ia].name, iatt->name) == 0) { free(test->atts[ia].name); for (ib = ia + 1; ib < test->natts; ib++) { /* move down */ test->atts[ib - 1].var = test->atts[ib].var; test->atts[ib - 1].name = test->atts[ib].name; test->atts[ib - 1].type = test->atts[ib].type; test->atts[ib - 1].len = test->atts[ib].len; test->atts[ib - 1].val = test->atts[ib].val; } test->natts--; if (varid == NC_GLOBAL) test->ngatts--; else test->vars[varid].natts--; return; } } /* not found */ fprintf(stderr, "%s: no such attribute as (%s, %s)", pname, test->vars[varid].name, iatt->name); } /* keep max record written updated */ void add_data(struct netcdf *test, int varid, long start[], long edges[]) { if (varid != test->xdimid) /* not a record variable */ return; if (start[0] + edges[0] > test->dims[test->xdimid].size) test->dims[test->xdimid].size = start[0] + edges[0]; } void errvar(struct netcdf *cdfp, struct cdfvar *varp) { const char *types; int id; switch (varp->type) { case NC_BYTE: types = "NC_BYTE"; break; case NC_CHAR: types = "NC_CHAR"; break; case NC_SHORT: types = "NC_SHORT"; break; case NC_LONG: types = "NC_LONG"; break; case NC_FLOAT: types = "NC_FLOAT"; break; case NC_DOUBLE: types = "NC_DOUBLE "; break; default: types = "UNKNOWN"; break; } fprintf(stderr, " name=%s type=%s dims=(", varp->name, types); for (id = 0; id < varp->ndims; id++) fprintf(stderr, "%d%s", (int)cdfp->dims[varp->dims[id]].size, id < varp->ndims - 1 ? ", " : ""); fprintf(stderr, ")\n"); } hdf4-hdf4.3.1/mfhdf/nctest/add.h000066400000000000000000000022071503061704500163150ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_ADD_H #define NCTEST_ADD_H #ifdef __cplusplus extern "C" { #endif /* add a dimension to an in-memory netcdf structure */ extern void add_dim(struct netcdf *, struct cdfdim *); /* add a variable var to an in-memory netcdf structure */ extern void add_var(struct netcdf *, struct cdfvar *); /* add an attribute att to an in-memory netcdf structure */ extern void add_att(struct netcdf *, int, struct cdfatt *); /* reset in-memory netcdf structure to empty */ extern void add_reset(struct netcdf *); /* delete an attribute att from an in-memory netcdf structure */ extern void del_att(struct netcdf *, int, struct cdfatt *); /* keep max record written updated */ extern void add_data(struct netcdf *, int, long[], long[]); /* display info about variable, for error messages */ extern void errvar(struct netcdf *, struct cdfvar *); #ifdef __cplusplus } #endif #endif /* NCTEST_ADD_H */ hdf4-hdf4.3.1/mfhdf/nctest/atttests.c000066400000000000000000001536301503061704500174420ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "emalloc.h" #include "tests.h" #include "val.h" #define LEN_OF(array) ((sizeof array) / (sizeof array[0])) /* * Test ncattput * check that new attribute put works in define mode * check that NC_GLOBAL variable id works * check that changing type of existing attribute works in define mode * check that increasing length of attribute works in define mode * check that changing value of existing attribute works in define mode * try with bad datatype, should fail * try with negative length, should fail * try increasing length of attribute in data mode, should fail * try putting new attribute in data mode, should fail * check that changing type of existing attribute works in data mode * check that decreasing length of attribute works in data mode * check that changing value of existing attribute works in data mode * try with bad variable handle, should fail * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncattput(char *path) { int nerrs = 0; static char pname[] = "test_ncattput"; int cdfid; /* netcdf id */ int ndims; /* number of dimensions */ int nvars; /* number of variables */ int ngatts_prev, ngatts; /* number of global attributes */ int xdimid; /* id of unlimited dimension */ int ia, id; static char byte_vals[] = {'a', 'b'}; static char char_vals[] = "chars"; static short short_vals[] = {-999, 0, 999}; static nclong long_vals[] = {10, 20}; static float float_vals[] = {1.5, 2.5, 3.5}; static double double_vals[] = {4.5, 5.5, 6.5, 7.5}; /* * test attributes; it is important for this test that the size * required for the attribute values increases monotonically. */ static struct cdfatt atts[] = {{___, "att0", NC_BYTE, LEN_OF(byte_vals), (void *)byte_vals}, {___, "att1", NC_CHAR, LEN_OF(char_vals), (void *)char_vals}, {___, "att2", NC_SHORT, LEN_OF(short_vals), (void *)short_vals}, {___, "att3", NC_LONG, LEN_OF(long_vals), (void *)long_vals}, {___, "att4", NC_FLOAT, LEN_OF(float_vals), (void *)float_vals}, {___, "att5", NC_DOUBLE, LEN_OF(double_vals), (void *)double_vals}}; int na = LEN_OF(atts); /* number of test attributes */ int ww_id; /* variable id */ static struct cdfvar ww = /* new variable */ {"ww", NC_LONG, 1, ___, 0}; static struct cdfatt tmp; /* attribute */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* get count of global attributes */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts, &xdimid) == -1) { error("%s: ncinquire failed", pname); ncclose(cdfid); return; } ngatts_prev = ngatts; /* in define mode, add global attributes of every type */ for (ia = 0; ia < na; ia++) { if (ncattput(cdfid, NC_GLOBAL, atts[ia].name, atts[ia].type, atts[ia].len, atts[ia].val) == -1) { error("%s: ncattput of NC_GLOBAL attribute failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &atts[ia]); /* keep in-memory netcdf updated */ } /* make sure count of global attributes has been updated */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts, &xdimid) == -1) { error("%s: ncinquire failed", pname); ncclose(cdfid); return; } if (ngatts != ngatts_prev + na) { error("%s: number of global = %d, expected %d", pname, ngatts, ngatts_prev + na); nerrs++; } /* check with ncattinq and ncattget that NC_GLOBAL attributes put OK */ for (ia = 0; ia < na; ia++) { if (ncattinq(cdfid, NC_GLOBAL, atts[ia].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of global attribute failed", pname); ncclose(cdfid); return; } if (atts[ia].type != tmp.type || atts[ia].len != tmp.len) { error("%s: NC_GLOBAL ncattinq got unexpected type or len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); if (ncattget(cdfid, NC_GLOBAL, atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atts[ia].val) != 0) { error("%s: ncattget got bad values after put of NC_GLOBAL attrs", pname); nerrs++; } free(tmp.val); } /* add a variable, then variable attributes of every type */ ww.dims = (int *)emalloc(sizeof(int) * ww.ndims); for (id = 0; id < ww.ndims; id++) ww.dims[id] = id; if ((ww_id = ncvardef(cdfid, ww.name, ww.type, ww.ndims, ww.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &ww); /* keep in-memory netcdf in sync */ for (ia = 0; ia < na; ia++) { if (ncattput(cdfid, ww_id, atts[ia].name, atts[ia].type, atts[ia].len, atts[ia].val) == -1) { error("%s: ncattput of variable attribute failed", pname); ncclose(cdfid); return; } add_att(test_g, ww_id, &atts[ia]); /* keep in-memory netcdf updated */ } /* check with ncattinq and ncattget that variable attributes put OK */ for (ia = 0; ia < na; ia++) { if (ncattinq(cdfid, ww_id, atts[ia].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of variable attribute failed", pname); ncclose(cdfid); return; } if (atts[ia].type != tmp.type || atts[ia].len != tmp.len) { error("%s: ncattinq for new attribute got bad type or len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); if (ncattget(cdfid, ww_id, atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atts[ia].val) != 0) { error("%s: ncattget got bad values after put of variable attrs", pname); nerrs++; } free(tmp.val); } /* * check that changing type of existing attribute, increasing * length of attribute, and changing value of existing attribute * work OK in define mode. */ tmp.name = (char *)emalloc(H4_MAX_NC_NAME); for (ia = 1; ia < na; ia++) { if (ncattput(cdfid, ww_id, atts[ia - 1].name, atts[ia].type, atts[ia].len, atts[ia].val) == -1) { error("%s: ncattput of larger attribute failed", pname); ncclose(cdfid); return; } tmp.var = atts[ia].var; (void)strcpy(tmp.name, atts[ia - 1].name); tmp.type = atts[ia].type; tmp.len = atts[ia].len; tmp.val = atts[ia].val; add_att(test_g, ww_id, &tmp); /* keep in-memory netcdf updated */ } /* check with ncattinq and ncattget that variable attributes put OK */ for (ia = 1; ia < na; ia++) { if (ncattinq(cdfid, ww_id, atts[ia - 1].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of larger attribute failed", pname); ncclose(cdfid); return; } if (atts[ia].type != tmp.type || atts[ia].len != tmp.len) { error("%s: ncattinq for larger attribute got bad type or len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); if (ncattget(cdfid, ww_id, atts[ia - 1].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atts[ia].val) != 0) { error("%s: ncattget got bad values after put of larger attrs", pname); nerrs++; } free(tmp.val); } /* try with bad datatype, should fail */ if (ncattput(cdfid, ww_id, "bogus_att1", BAD_TYPE, atts[0].len, atts[0].val) != -1) { error("%s: ncattput should fail with bad type", pname); nerrs++; } /* try with negative length, should fail */ if (ncattput(cdfid, ww_id, "bogus_att2", atts[0].type, -1, atts[0].val) != -1) { error("%s: ncattput should fail with bad length", pname); nerrs++; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode try increasing length of attribute, should fail */ if (ncattput(cdfid, ww_id, atts[0].name, atts[0].type, atts[0].len + 10, atts[0].val) != -1) { error("%s: ncattput should fail with increased length in data mode", pname); nerrs++; /* reset to correct length for later tests */ if (ncattput(cdfid, ww_id, atts[0].name, atts[0].type, atts[0].len, atts[0].val) != -1) { error("%s: ncattput failed to reset length in data mode", pname); nerrs++; } } /* try creating new attribute in data mode, should fail */ if (ncattput(cdfid, ww_id, "new_name", atts[0].type, atts[0].len, atts[0].val) != -1) { error("%s: ncattput of new attribute in data mode should fail", pname); ncclose(cdfid); return; } /* * check that changing type of existing attribute, decreasing * length of attribute, and changing value of existing attribute * work OK in data mode */ for (ia = 0; ia < na - 1; ia++) { if (ncattput(cdfid, ww_id, atts[ia + 1].name, atts[ia].type, atts[ia].len, atts[ia].val) == -1) { error("%s: ncattput of smaller attribute failed in data mode", pname); ncclose(cdfid); return; } tmp.var = atts[ia].var; (void)strcpy(tmp.name, atts[ia + 1].name); tmp.type = atts[ia].type; tmp.len = atts[ia].len; tmp.val = atts[ia].val; add_att(test_g, ww_id, &tmp); /* keep in-memory netcdf updated */ } /* check with ncattinq and ncattget that variable attributes put OK */ for (ia = 0; ia < na - 1; ia++) { if (ncattinq(cdfid, ww_id, atts[ia + 1].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of variable attribute failed in data mode", pname); ncclose(cdfid); return; } if (atts[ia].type != tmp.type || atts[ia].len != tmp.len) { error("%s: VARIABLE ncattinq got bad type or len in data mode", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); if (ncattget(cdfid, ww_id, atts[ia + 1].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in data mode", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atts[ia].val) != 0) { error("%s: ncattget got bad values in data mode", pname); nerrs++; } free(tmp.val); } /* try with bad variable handle, should fail */ if (ncattput(cdfid, test_g->nvars, atts[0].name, atts[0].type, atts[0].len, atts[0].val) != -1) { error("%s: ncattput should fail with bad variable handle", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netcdf handle, should fail */ if (ncattput(cdfid, ww_id, atts[0].name, atts[0].type, atts[0].len, atts[0].val) != -1) { error("%s: ncattput should fail with bad netcdf handle", pname); ncclose(cdfid); return; } free(tmp.name); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattinq * check returned values of properly created attributes * try with nonexisting attribute, check error * try with bad variable handle, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncattinq(char *path) { int nerrs = 0; static char pname[] = "test_ncattinq"; int cdfid; /* netcdf id */ int ia, id; /* attribute number */ nc_type type; int len; int vv_id; /* variable id */ static struct cdfvar vv = /* new variable */ {"vv", NC_SHORT, 2, ___, 0}; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* in data mode, check all attributes against test netcdf */ for (ia = 0; ia < test_g->natts; ia++) { if (ncattinq(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, &type, &len) == -1) { error("%s: ncattinq failed", pname); ncclose(cdfid); return; } if (type != test_g->atts[ia].type) { error("%s: ncattinq returned wrong type", pname); ncclose(cdfid); return; } if (len != test_g->atts[ia].len) { error("%s: ncattinq returned wrong len", pname); ncclose(cdfid); return; } } /* enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode, add a variable */ vv.dims = (int *)emalloc(sizeof(int) * vv.ndims); for (id = 0; id < vv.ndims; id++) vv.dims[id] = id; /* assumes vv.ndims <= test_g->ndims */ if ((vv_id = ncvardef(cdfid, vv.name, vv.type, vv.ndims, vv.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &vv); /* keep in-memory netcdf in sync */ /* try with nonexisting attribute, should fail */ if (ncattinq(cdfid, vv_id, "nonesuch", &type, &len) != -1) { error("%s: ncattinq should fail with nonexisting attribute", pname); ncclose(cdfid); return; } /* try with bad variable handle, should fail */ if (ncattinq(cdfid, test_g->nvars, test_g->atts[0].name, &type, &len) != -1) { error("%s: ncattinq should fail with bad variable id", pname); ncclose(cdfid); return; } /* in define mode check all attributes against test netcdf */ for (ia = 0; ia < test_g->natts; ia++) { if (ncattinq(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, &type, &len) == -1) { error("%s: ncattinq in define mode failed", pname); ncclose(cdfid); return; } if (type != test_g->atts[ia].type) { error("%s: ncattinq in define mode returned wrong type", pname); ncclose(cdfid); return; } if (len != test_g->atts[ia].len) { error("%s: ncattinq in define mode returned wrong len", pname); ncclose(cdfid); return; } } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } if (ncattinq(cdfid, NC_GLOBAL, test_g->atts[0].name, &type, &len) != -1) { error("%s: ncattinq should fail with bad cdfid", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattget * check that NC_GLOBAL variable id works * check in both modes * check that proper call worked after ncattput * try with bad variable handle, check error * try with nonexisting attribute, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncattget(char *path) { int nerrs = 0; int cdfid; /* netcdf id */ int ia, id; static struct cdfatt tmp; /* attribute */ int uu_id; /* variable id */ static struct cdfvar uu = /* variable */ {"uu", NC_LONG, 2, ___, 0}; static nclong uumax = 1000; /* attribute value */ static struct cdfatt vmax = /* attribute */ {___, "valid_max", NC_LONG, 1, (void *)&uumax}; static char pname[] = "test_ncattget"; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* add a variable */ uu.dims = (int *)emalloc(sizeof(int) * uu.ndims); for (id = 0; id < uu.ndims; id++) uu.dims[id] = id; if ((uu_id = ncvardef(cdfid, uu.name, uu.type, uu.ndims, uu.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &uu); /* keep in-memory netcdf in sync */ /* add an attribute */ if (ncattput(cdfid, uu_id, vmax.name, vmax.type, vmax.len, vmax.val) == -1) { error("%s: ncattput of variable attribute failed", pname); ncclose(cdfid); return; } add_att(test_g, uu_id, &vmax); /* keep in-memory netcdf updated */ /* in define mode, check all attributes values against test netcdf */ for (ia = 0; ia < test_g->natts; ia++) { if (ncattinq(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq in define mode failed", pname); ncclose(cdfid); return; } if (tmp.type != test_g->atts[ia].type) { error("%s: ncattinq in define mode returned wrong type", pname); ncclose(cdfid); return; } if (tmp.len != test_g->atts[ia].len) { error("%s: ncattinq in define mode returned wrong len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(tmp.len * nctypelen(tmp.type)); if (ncattget(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in define mode", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, test_g->atts[ia].val) != 0) { error("%s: ncattget got bad values in define mode", pname); error(" cdfid=%d, varname=%s, attname=%s, type=%d, len=%d", cdfid, test_g->vars[test_g->atts[ia].var].name, test_g->atts[ia].name, test_g->atts[ia].type, test_g->atts[ia].len); fprintf(stderr, "should have got:"); val_out(test_g->atts[ia].type, test_g->atts[ia].len, test_g->atts[ia].val); fprintf(stderr, " instead got:"); val_out(tmp.type, tmp.len, tmp.val); nerrs++; } free(tmp.val); } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode, check all attributes values against test netcdf */ for (ia = 0; ia < test_g->natts; ia++) { if (ncattinq(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq failed", pname); ncclose(cdfid); return; } if (tmp.type != test_g->atts[ia].type) { error("%s: ncattinq returned wrong type", pname); ncclose(cdfid); return; } if (tmp.len != test_g->atts[ia].len) { error("%s: ncattinq returned wrong len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(tmp.len * nctypelen(tmp.type)); if (ncattget(cdfid, test_g->atts[ia].var, test_g->atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in data mode", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, test_g->atts[ia].val) != 0) { error("%s: ncattget got bad values in data mode", pname); error(" cdfid=%d, varname=%s, attname=%s, type=%d, len=%d", cdfid, test_g->vars[test_g->atts[ia].var].name, test_g->atts[ia].name, test_g->atts[ia].type, test_g->atts[ia].len); fprintf(stderr, "should have got:"); val_out(test_g->atts[ia].type, test_g->atts[ia].len, test_g->atts[ia].val); fprintf(stderr, " instead got:"); val_out(tmp.type, tmp.len, tmp.val); nerrs++; } free(tmp.val); } /* try with bad variable handle, should fail */ if (ncattget(cdfid, test_g->nvars, vmax.name, vmax.val) != -1) { error("%s: ncattget should fail with bad variable handle", pname); ncclose(cdfid); return; } /* try getting non-existent attribute, should fail */ if (ncattget(cdfid, uu_id, "nonesuch", vmax.val) != -1) { error("%s: ncattget should fail with nonexistant attribute", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netcdf handle, should fail */ if (ncattget(cdfid, uu_id, vmax.name, vmax.val) != -1) { error("%s: ncattput should fail with bad netcdf handle", pname); ncclose(cdfid); return; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattcopy * check that NC_GLOBAL variable for source or target works * check that new attribute put works with target in define mode * check that old attribute put works with target in data mode * check that changing type and length of an attribute work OK * try with same cdfid for source and target, different variables * try with same cdfid for source and target, same variable * try with nonexisting attribute, check error * try with bad source or target netCDF handles, check error * try with bad source or target variable handle, check error */ /* path1 - name of input netcdf file to open */ /* path2 - name of output netcdf file to create */ void test_ncattcopy(char *path1, const char *path2) { int nerrs = 0; static char pname[] = "test_ncattcopy"; int cdfid, cdfid2; /* netcdf id */ int id; /* dimension id */ int tt_id; /* variable id */ static struct cdfvar tt = /* new variable for source netcdf */ {"tt", NC_LONG, 1, ___, 0}; int tu_id, tu2_id; /* variable ids */ static struct cdfvar tu = /* new variable for target netcdf */ {"tu", NC_DOUBLE, 2, ___, 0}; static double double_vals[] = {-1., -2.}; static float float_vals[] = {-1., -2.}; static struct cdfatt att = /* attribute */ {___, "att", NC_DOUBLE, LEN_OF(double_vals), (void *)double_vals}; static struct cdfatt att2 = /* attribute */ {___, "att", NC_FLOAT, LEN_OF(float_vals), (void *)float_vals}; static struct cdfatt tmp; /* attribute */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path1, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened OK, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed on source", pname); ncclose(cdfid); return; } /* in define mode, add a global attribute, a variable and an attribute */ if (ncattput(cdfid, NC_GLOBAL, att.name, att.type, att.len, att.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &att); /* keep in-memory netcdf consistent */ tt.dims = (int *)emalloc(sizeof(int) * tt.ndims); for (id = 0; id < tt.ndims; id++) tt.dims[0] = id; if ((tt_id = ncvardef(cdfid, tt.name, tt.type, tt.ndims, tt.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &tt); /* keep in-memory netcdf consistent */ if (ncattput(cdfid, tt_id, att.name, att.type, att.len, att.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, tt_id, &att); /* keep in-memory netcdf consistent */ tu.dims = (int *)emalloc(sizeof(int) * tu.ndims); for (id = 0; id < tu.ndims; id++) tu.dims[id] = id; if ((tu_id = ncvardef(cdfid, tu.name, tu.type, tu.ndims, tu.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &tu); /* keep in-memory netcdf consistent */ if (ncattput(cdfid, tu_id, att.name, att.type, att.len, att.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, tu_id, &att); /* keep in-memory netcdf consistent */ if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* first (source) netcdf is in data mode */ /* create second netCDF to copy attributes to */ if ((cdfid2 = nccreate(path2, NC_CLOBBER)) == -1) { error("%s: nccreate failed", pname); return; } /* create dimensions and variable in second netcdf */ for (id = 0; id < tu.ndims; id++) { /* copy dimensions from source */ if ((tu.dims[id] = ncdimdef(cdfid2, test_g->dims[id].name, test_g->dims[id].size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } } if ((tu2_id = ncvardef(cdfid2, tu.name, tu.type, tu.ndims, tu.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* try copying NC_GLOBAL attribute from source to target */ if (ncattcopy(cdfid, NC_GLOBAL, att.name, cdfid2, NC_GLOBAL) == -1) { error("%s: ncattcopy on NC_GLOBAL attribute '%s' failed", pname, att.name); ncclose(cdfid); ncclose(cdfid2); return; } /* check that copy worked with ncattinq and ncattget */ if (ncattinq(cdfid2, NC_GLOBAL, att.name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of NC_GLOBAL attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (att.type != tmp.type || att.len != tmp.len) { error("%s: NC_GLOBAL ncattinq got unexpected type or len", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(att.len * nctypelen(att.type)); if (ncattget(cdfid2, NC_GLOBAL, att.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, att.val) != 0) { error("%s: ncattget got bad values after put of NC_GLOBAL attrs", pname); nerrs++; } free(tmp.val); /* try copying variable attribute from source to target */ if (ncattcopy(cdfid, tt_id, att.name, cdfid2, tu2_id) == -1) { error("%s: ncattcopy failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* check that copy worked with ncattinq and ncattget */ if (ncattinq(cdfid2, tu2_id, att.name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (att.type != tmp.type || att.len != tmp.len) { error("%s: variable ncattinq got unexpected type or len", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(att.len * nctypelen(att.type)); if (ncattget(cdfid2, tu2_id, att.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, att.val) != 0) { error("%s: ncattget got bad values after copy of variable attrs", pname); nerrs++; } free(tmp.val); /* * check that old attribute put works with target in data mode, * also checks that changing type and length of an attribute works OK */ if (ncendef(cdfid2) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* change attribute to shorter attribute */ if (ncattput(cdfid, NC_GLOBAL, att2.name, att2.type, att2.len, att2.val) == -1) { error("%s: ncattput of shorter NC_GLOBAL attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } add_att(test_g, NC_GLOBAL, &att2); /* keep in-memory netcdf consistent */ /* copy shorter attribute on existing attribute */ if (ncattcopy(cdfid, NC_GLOBAL, att2.name, cdfid2, tu2_id) == -1) { error("%s: ncattcopy of shorter attribute on old attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* check that copy worked with ncattinq and ncattget */ if (ncattinq(cdfid2, tu2_id, att2.name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (att2.type != tmp.type || att2.len != tmp.len) { error("%s: variable ncattinq got unexpected type or len", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(att2.len * nctypelen(att2.type)); if (ncattget(cdfid2, tu2_id, att2.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, att2.val) != 0) { error("%s: ncattget got bad values after copy of variable attrs", pname); nerrs++; } free(tmp.val); /* try copying with same source and target netcdf, different variables */ /* copy shorter attribute on existing attribute */ if (ncattcopy(cdfid, NC_GLOBAL, att2.name, cdfid, tu_id) == -1) { error("%s: ncattcopy of shorter NC_GLOBAL attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } add_att(test_g, tu_id, &att2); /* keep in-memory netcdf consistent */ /* check that copy worked with ncattinq and ncattget */ if (ncattinq(cdfid, tu_id, att2.name, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (att2.type != tmp.type || att2.len != tmp.len) { error("%s: variable ncattinq got unexpected type or len", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(att2.len * nctypelen(att2.type)); if (ncattget(cdfid, tu_id, att2.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, att2.val) != 0) { error("%s: ncattget got bad values after copy of variable attrs", pname); nerrs++; } free(tmp.val); /* try with same cdfid for source and target, same variable */ if (ncattcopy(cdfid, tu_id, att.name, cdfid, tu_id) == -1) { error("%s: ncattcopy failed with identical source and target", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* try with nonexisting attribute, check error */ if (ncattcopy(cdfid, tt_id, "nonesuch", cdfid, tu_id) != -1) { error("%s: ncattcopy should fail with bad attribute name", pname); ncclose(cdfid); ncclose(cdfid2); return; } /* try with bad source or target variable handle, check error */ if (ncattcopy(cdfid, test_g->nvars, att.name, cdfid, tu_id) != -1) { error("%s: ncattcopy should fail with bad source variable id", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (ncattcopy(cdfid, tt_id, att.name, cdfid, 2) != -1) { error("%s: ncattcopy should fail with bad target variable id", pname); ncclose(cdfid); ncclose(cdfid2); return; } if (ncclose(cdfid2) == -1) { error("%s: ncclose failed", pname); ncclose(cdfid); return; } /* try with bad source or target netCDF handles, check error */ if (ncattcopy(cdfid, tt_id, att.name, cdfid2, tu_id) != -1) { error("%s: ncattcopy should fail with bad target netcdf id", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } if (ncattcopy(cdfid, tt_id, att.name, cdfid2, tu_id) != -1) { error("%s: ncattcopy should fail with bad netcdf id", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattname * check that NC_GLOBAL variable id works * check in both modes * check that proper call worked after ncattput * try with bad netCDF handle, check error * try with bad variable handle, check error * try with bad attribute number, check error */ /* path - name of writable netcdf file to open */ void test_ncattname(char *path) { int nerrs = 0; static char pname[] = "test_ncattname"; int cdfid; /* netcdf id */ struct cdfatt tmp; /* attributes */ int ia, ib; /* attribute numbers */ int iv; /* variable id */ static short short_vals[] = {3, 4, 5}; static struct cdfatt att = /* attribute */ {___, ___, NC_SHORT, LEN_OF(short_vals), (void *)short_vals}; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened OK, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* for each NC_GLOBAL attribute, get name and compare with expected name */ att.name = (char *)emalloc(H4_MAX_NC_NAME); ib = 0; for (ia = 0; ia < test_g->ngatts; ia++) { if (ncattname(cdfid, NC_GLOBAL, ia, att.name) == -1) { error("%s: ncattname failed on global attribute", pname); ncclose(cdfid); return; } /* find number of next global attribute */ while (ib < test_g->natts && test_g->atts[ib].var != NC_GLOBAL) ib++; if (ib >= test_g->natts) { error("%s: test problem, expected global attribute not found", pname); ncclose(cdfid); return; } if (strcmp(att.name, test_g->atts[ib].name) != 0) { error("%s: NC_GLOBAL attribute name `%s' instead of expected `%s'", pname, att.name, test_g->atts[ib].name); nerrs++; } ib++; } /* for each variable attribute, get name and compare with expected name */ for (iv = 0; iv < test_g->nvars; iv++) { ib = 0; for (ia = 0; ia < test_g->vars[iv].natts; ia++) { if (ncattname(cdfid, iv, ia, att.name) == -1) { error("%s: ncattname failed on variable attribute", pname); ncclose(cdfid); return; } /* find number of next attribute */ while (ib < test_g->natts && test_g->atts[ib].var != iv) ib++; if (ib >= test_g->natts) { error("%s: problem in test, expected attribute not found", pname); ncclose(cdfid); return; } if (strcmp(att.name, test_g->atts[ib].name) != 0) { error("%s: variable '%s' name `%s' instead of expected `%s'", pname, test_g->vars[iv].name, att.name, test_g->atts[ib].name); nerrs++; } ib++; } } /* in define mode, add a global attribute */ (void)strcpy(att.name, "attx"); if (ncattput(cdfid, NC_GLOBAL, att.name, att.type, att.len, att.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &att); /* keep in-memory netcdf consistent */ /* test that ncattname works immediately after ncattput */ tmp.name = (char *)emalloc(H4_MAX_NC_NAME); if (ncattname(cdfid, NC_GLOBAL, test_g->ngatts - 1, tmp.name) == -1) { error("%s: ncattname failed on variable attribute", pname); ncclose(cdfid); return; } if (strcmp(att.name, tmp.name) != 0) { error("%s: immediate NC_GLOBAL name `%s' instead of expected `%s'", pname, tmp.name, att.name); nerrs++; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode */ /* for each NC_GLOBAL attribute, get name and compare with expected name */ ib = 0; for (ia = 0; ia < test_g->ngatts; ia++) { if (ncattname(cdfid, NC_GLOBAL, ia, att.name) == -1) { error("%s: ncattname failed on global attribute", pname); ncclose(cdfid); return; } /* find number of next global attribute */ while (ib < test_g->natts && test_g->atts[ib].var != NC_GLOBAL) ib++; if (ib >= test_g->natts) { error("%s: test problem, expected global attribute not found", pname); ncclose(cdfid); return; } if (strcmp(att.name, test_g->atts[ib].name) != 0) { error("%s: NC_GLOBAL attribute name `%s' instead of expected `%s'", pname, att.name, test_g->atts[ib].name); nerrs++; } ib++; } /* for each variable attribute, get name and compare with expected name */ for (iv = 0; iv < test_g->nvars; iv++) { ib = 0; for (ia = 0; ia < test_g->vars[iv].natts; ia++) { if (ncattname(cdfid, iv, ia, att.name) == -1) { error("%s: ncattname failed on variable attribute", pname); ncclose(cdfid); return; } /* find number of next attribute */ while (ib < test_g->natts && test_g->atts[ib].var != iv) ib++; if (ib >= test_g->natts) { error("%s: problem in test, expected attribute not found", pname); ncclose(cdfid); return; } if (strcmp(att.name, test_g->atts[ib].name) != 0) { error("%s: variable '%s' name `%s' instead of expected `%s'", pname, test_g->vars[iv].name, att.name, test_g->atts[ib].name); nerrs++; } ib++; } } /* try with bad variable handle, check error */ if (ncattname(cdfid, test_g->nvars, 0, att.name) != -1) { error("%s: ncattname should fail with bad variable handle", pname); ncclose(cdfid); return; } /* try with bad attribute number, check error */ if (ncattname(cdfid, NC_GLOBAL, -1, att.name) != -1) { error("%s: ncattname should fail with negative number", pname); ncclose(cdfid); return; } if (ncattname(cdfid, NC_GLOBAL, test_g->ngatts, att.name) != -1) { error("%s: ncattname should fail with too-high number", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); nerrs++; return; } /* try with bad netCDF handle, check error */ if (ncattname(cdfid, NC_GLOBAL, 0, att.name) != -1) { error("%s: ncattname shoul fail with bad cdfid", pname); nerrs++; } free(tmp.name); free(att.name); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattrename * check that proper rename worked with ncattinq, ncattget * try renaming to existing attribute name, check error * try with nonexisting attribute, check error * try with bad variable handle, check error * try in data mode, check error * try with bad netCDF handle, check error */ /* name of writable netcdf file to open */ void test_ncattrename(char *path) { int nerrs = 0; static char pname[] = "test_ncattrename"; int cdfid; /* netcdf id */ static char newname[] = "shorter"; static char longername[] = "longer_name"; struct cdfatt tmp; /* attributes */ static short short_vals[] = {3, 4, 5}; static struct cdfatt atty = /* attribute */ {___, "long_name", NC_SHORT, LEN_OF(short_vals), (void *)short_vals}; static struct cdfatt attz = /* attribute */ {___, "arggh", NC_SHORT, LEN_OF(short_vals), (void *)short_vals}; int ynum; /* attribute number */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened OK, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode, add two attributes */ if (ncattput(cdfid, NC_GLOBAL, atty.name, atty.type, atty.len, atty.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &atty); /* keep in-memory netcdf in sync */ ynum = test_g->natts - 1; /* number of attribute just put */ if (ncattput(cdfid, NC_GLOBAL, attz.name, attz.type, attz.len, attz.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &attz); /* keep in-memory netcdf in sync */ /* rename first attribute to shorter name */ if (ncattrename(cdfid, NC_GLOBAL, atty.name, newname) == -1) { error("%s: ncattrename failed", pname); ncclose(cdfid); return; } (void)strcpy(test_g->atts[ynum].name, newname); /* keep test consistent */ /* check new name with ncattinq */ if (ncattinq(cdfid, NC_GLOBAL, newname, &tmp.type, &tmp.len) == -1) { error("%s: ncattinq of renamed attribute failed", pname); ncclose(cdfid); return; } if (atty.type != tmp.type || atty.len != tmp.len) { error("%s: NC_GLOBAL ncattinq got unexpected type or len", pname); ncclose(cdfid); return; } /* allocate space to hold the attribute value to be retrieved */ tmp.val = emalloc(atty.len * nctypelen(atty.type)); if (ncattget(cdfid, NC_GLOBAL, newname, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atty.val) != 0) { error("%s: ncattget got bad values after rename attrs", pname); nerrs++; } if (ncattinq(cdfid, NC_GLOBAL, atty.name, &tmp.type, &tmp.len) != -1) { error("%s: ncattrename left attribute with old name", pname); ncclose(cdfid); return; } /* try to rename second attribute same as first, should fail */ if (ncattrename(cdfid, NC_GLOBAL, attz.name, newname) != -1) { error("%s: ncattrename should have failed with used name", pname); ncclose(cdfid); return; } /* try to rename second attribute with a longer name */ if (ncattrename(cdfid, NC_GLOBAL, attz.name, longername) == -1) { error("%s: ncattrename failed with longer name", pname); ncclose(cdfid); return; } /* try with bad variable handle, check for failure */ if (ncattrename(cdfid, test_g->nvars, newname, atty.name) != -1) { error("%s: ncattrename should have failed on bad variable id", pname); ncclose(cdfid); return; } /* try with bad attribute name, check for failure */ if (ncattrename(cdfid, NC_GLOBAL, "nonesuch", newname) != -1) { error("%s: ncattrename should have failed on bad attribute name", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode change name to even shorter and check value */ if (ncattrename(cdfid, NC_GLOBAL, newname, "short") == -1) { error("%s: ncattrename to shorter name failed in data mode", pname); ncclose(cdfid); return; } if (ncattrename(cdfid, NC_GLOBAL, "short", "plugh") == -1) { error("%s: ncattrename to same length failed in data mode", pname); ncclose(cdfid); return; } if (ncattget(cdfid, NC_GLOBAL, "plugh", tmp.val) == -1) { error("%s: ncgetatt of renamed attribute failed in data mode", pname); ncclose(cdfid); return; } if (val_cmp(tmp.type, tmp.len, tmp.val, atty.val) != 0) { error("%s: ncattget got bad values after data mode rename", pname); nerrs++; } free(tmp.val); if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (ncattrename(cdfid, NC_GLOBAL, newname, atty.name) != -1) { error("%s: ncattrename should fail with bad cdfid", pname); ncclose(cdfid); return; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncattdel * check that proper delete worked * try with bad netCDF handle, check error * try with bad variable handle, check error * try with nonexisting attribute, check error * try in data mode, check error */ /* path - name of writable netcdf file to open */ void test_ncattdel(char *path) { int nerrs = 0; static char pname[] = "test_ncattdel"; int cdfid; /* netcdf id */ static short short_vals[] = {-1, -2, -3}; static struct cdfatt yaa = /* attribute */ {___, "yet_another_attribute", NC_SHORT, LEN_OF(short_vals), (void *)short_vals}; int id; /* dimension id */ int yav_id; /* variable id */ static struct cdfvar yav = /* new variable for target netcdf */ {"yet_another_variable", NC_DOUBLE, 2, ___, 0}; struct cdfvar vtmp; /* variable */ struct cdfatt atmp; /* attribute */ int ndims; /* number of dimensions */ int nvars; /* number of variables */ int ngatts1, ngatts2; /* number of global attributes */ int natts; /* number of variable attributes */ int xdimid; /* id of unlimited dimension */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened OK, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode, add global attribute, variable, variable attribute */ if (ncattput(cdfid, NC_GLOBAL, yaa.name, yaa.type, yaa.len, yaa.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &yaa); /* keep in-memory netcdf in sync */ yav.dims = (int *)emalloc(sizeof(int) * yav.ndims); for (id = 0; id < yav.ndims; id++) yav.dims[id] = id; if ((yav_id = ncvardef(cdfid, yav.name, yav.type, yav.ndims, yav.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &yav); /* keep in-memory netcdf consistent */ if (ncattput(cdfid, yav_id, yaa.name, yaa.type, yaa.len, yaa.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, yav_id, &yaa); /* keep in-memory netcdf consistent */ /* get number of global attributes, number of attributes for variable */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts1, &xdimid) == -1) { error("%s: ncinquire in data mode failed", pname); ncclose(cdfid); return; } vtmp.dims = (int *)emalloc(sizeof(int) * H4_MAX_VAR_DIMS); vtmp.name = (char *)emalloc(H4_MAX_NC_NAME); if (ncvarinq(cdfid, yav_id, vtmp.name, &vtmp.type, &vtmp.ndims, vtmp.dims, &natts) == -1) { error("%s: ncvarinq failed", pname); ncclose(cdfid); return; } /* delete global attribute and check that it's gone */ if (ncattdel(cdfid, NC_GLOBAL, yaa.name) == -1) { error("%s: ncattdel failed", pname); ncclose(cdfid); return; } del_att(test_g, NC_GLOBAL, &yaa); /* keep in-memory netcdf consistent */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts2, &xdimid) == -1) { error("%s: ncinquire failed", pname); ncclose(cdfid); return; } if (ngatts2 != ngatts1 - 1) { error("%s: NC_GLOBAL attribute deleted, but ngatts did not decrement", pname); ncclose(cdfid); return; } if (ncattinq(cdfid, NC_GLOBAL, yaa.name, &atmp.type, &atmp.len) != -1) { error("%s: ncattinq on deleted NC_GLOBAL attribute should fail", pname); ncclose(cdfid); return; } /* delete variable attribute and check that it's gone */ if (ncattdel(cdfid, yav_id, yaa.name) == -1) { error("%s: ncattdel failed", pname); ncclose(cdfid); return; } del_att(test_g, yav_id, &yaa); /* keep in-memory netcdf consistent */ if (ncvarinq(cdfid, yav_id, vtmp.name, &vtmp.type, &vtmp.ndims, vtmp.dims, &vtmp.natts) == -1) { error("%s: ncvarinq failed", pname); ncclose(cdfid); return; } if (vtmp.natts != natts - 1) { error("%s: NC_GLOBAL attribute deleted, but ngatts did not decrement", pname); ncclose(cdfid); return; } if (ncattinq(cdfid, yav_id, yaa.name, &atmp.type, &atmp.len) != -1) { error("%s: ncattinq on deleted variable attribute should fail", pname); ncclose(cdfid); return; } /* re-add global attribute, variable, variable attribute */ if (ncattput(cdfid, NC_GLOBAL, yaa.name, yaa.type, yaa.len, yaa.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, NC_GLOBAL, &yaa); /* keep in-memory netcdf in sync */ if (ncattput(cdfid, yav_id, yaa.name, yaa.type, yaa.len, yaa.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, yav_id, &yaa); /* keep in-memory netcdf consistent */ /* try on nonexistent attribute, should fail */ if (ncattdel(cdfid, yav_id, "nonesuch") != -1) { error("%s: ncattdel should fail on bogus attribute", pname); ncclose(cdfid); return; } /* try on bad variable id, should fail */ if (ncattdel(cdfid, test_g->nvars, yaa.name) != -1) { error("%s: ncattdel should fail on bad variable id", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode, should fail */ if (ncattdel(cdfid, NC_GLOBAL, yaa.name) != -1) { error("%s: ncattdel in data mode should fail", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try on bad netcdf handle, should fail */ if (ncattdel(cdfid, yav_id, yaa.name) != -1) { error("%s: ncattdel should fail on bad netcdf id", pname); nerrs++; } free(vtmp.dims); free(vtmp.name); free(yav.dims); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/cdftests.c000066400000000000000000000614221503061704500174030ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test netcdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" #include "emalloc.h" #define LEN_OF(array) ((sizeof array) / (sizeof array[0])) /* * Test nccreate * create a netcdf with no data, close it, test that it can be opened * try again with NC_CLOBBER mode, check that no errors occurred * try again with NC_NOCLOBBER mode, check error return * On exit, netcdf files are closed. * Uses: nccreate, ncendef, ncclose, ncopen. */ /* path - name of cdf file to create */ void test_nccreate(char *path) { int nerrs = 0; static char pname[] = "test_nccreate"; int cdfid; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = nccreate(path, NC_CLOBBER)) == -1) { error("%s: nccreate failed to NC_CLOBBER", pname); return; } /* created OK */ if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); nerrs++; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); nerrs++; } if ((cdfid = ncopen(path, NC_NOWRITE)) == -1) { error("%s: ncopen of newly created netcdf failed", pname); return; } /* opened OK */ if (ncclose(cdfid) == -1) { error("%s: second ncclose failed", pname); nerrs++; } /* this call should fail, since we're using NC_NOCLOBBER mode */ if ((cdfid = nccreate(path, NC_NOCLOBBER)) != -1) { error("%s: nccreate failed to honor NC_NOCLOBBER mode", pname); nerrs++; } /* Initialize in-memory netcdf to empty */ add_reset(test_g); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncopen * try to open a non-existent netCDF, check error return * open a netCDF with NC_WRITE mode, write something, close it * open a netCDF with NC_NOWRITE mode, write something and check error * try to open a netcdf twice, check whether returned cdf ids different * On exit, netcdf files are closed. * Uses: ncopen, ncredef, ncattput, ncendef, ncclose. */ /* path - name of writable netcdf file to open */ void test_ncopen(char *path) { int nerrs = 0; static char pname[] = "test_ncopen"; int cdfid0, cdfid1; static char title_val[] = "test netcdf"; static char xpath[] = "tooth-fairy.cdf"; /* must not exist */ static struct cdfatt title = /* attribute */ {NC_GLOBAL, "title", NC_CHAR, LEN_OF(title_val), (void *)title_val}; fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid0 = ncopen(xpath, NC_NOWRITE)) != -1) { error("%s: ncopen should fail opening nonexistent file", pname); return; } if ((cdfid0 = ncopen(xpath, NC_WRITE)) != -1) { error("%s: ncopen should fail writing nonexistent file", pname); return; } if ((cdfid0 = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed with NC_WRITE mode", pname); return; } /* opened */ if (ncredef(cdfid0) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid0); return; } /* in define mode */ if (ncattput(cdfid0, NC_GLOBAL, "title", NC_CHAR, title.len, title.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid0); return; } add_att(test_g, NC_GLOBAL, &title); /* keep in-memory netcdf updated */ if (ncendef(cdfid0) == -1) { error("%s: ncendef failed after ncattput", pname); ncclose(cdfid0); return; } if (ncclose(cdfid0) == -1) { error("%s: ncclose failed in NC_WRITE mode", pname); return; } if ((cdfid0 = ncopen(path, NC_NOWRITE)) == -1) { error("%s: ncopen failed with NC_NOWRITE mode", pname); return; } /* opened */ /* this should fail, since in NC_NOWRITE mode */ if (ncredef(cdfid0) != -1) { error("%s: cdredef should fail after NC_NOWRITE open", pname); ncclose(cdfid0); return; } if ((cdfid1 = ncopen(path, NC_WRITE)) == -1) { error("%s: second ncopen failed", pname); nerrs++; } else { /* second open OK */ if (cdfid0 == cdfid1) { error("%s: ncopen should return new cdfid on second open", pname); nerrs++; } if (ncclose(cdfid1) == -1) { error("%s: ncclose failed to close after second open", pname); nerrs++; } } if (ncclose(cdfid0) == -1) { error("%s: ncclose failed in NC_NOWRITE mode", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncredef * open a netCDF, enter define mode, add dimension, variable, attribute * try ncredef from within define mode, check error * leave define mode and close, releasing netcdf handle * try ncredef with old handle, check error * On exit netcdf files are closed. * Uses: ncopen, ncredef, ncdimdef, ncvardef, ncattput, ncclose */ /* path - name of writable netcdf file to open */ void test_ncredef(char *path) { int nerrs = 0; static char pname[] = "test_ncredef"; int cdfid; /* netcdf id */ int ii_dim; /* dimension id */ static struct cdfdim ii = /* dimension */ {"ii", 4}; int aa_id; /* variable id */ static struct cdfvar aa = /* variable */ {"aa", NC_LONG, 1, ___, 0}; static char units_val[] = "furlongs"; static struct cdfatt aa_units = /* attribute */ {___, "units", NC_CHAR, LEN_OF(units_val), (void *)units_val}; fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened OK, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode OK, add a dimension */ if ((ii_dim = ncdimdef(cdfid, ii.name, ii.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &ii); /* keep in-memory netcdf in sync */ /* dimension added OK, add a variable */ aa.dims = (int *)emalloc(sizeof(int) * aa.ndims); aa.dims[0] = ii_dim; if ((aa_id = ncvardef(cdfid, aa.name, aa.type, aa.ndims, aa.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &aa); /* keep in-memory netcdf in sync */ /* variable added OK, add a variable attribute */ aa_units.var = aa_id; if (ncattput(cdfid, aa_units.var, aa_units.name, aa_units.type, aa_units.len, (void *)aa_units.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, aa_id, &aa_units); /* keep in-memory netcdf in sync */ if (ncredef(cdfid) != -1) { error("%s: cdredef in define mode should have failed", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } if (ncredef(cdfid) != -1) { error("%s: ncredef failed to report bad cdf handle", pname); nerrs++; } free(aa.dims); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncendef * check return from proper cdfendif after define mode * try ncendef when in data mode, check error * try ncendef with bad handle, check error * On exit netcdf files are closed. * Uses: ncopen, ncredef, ncdimdef, ncvardef, ncattput, ncendef, ncclose */ /* path - name of writable netcdf file to open */ void test_ncendef(char *path) { int nerrs = 0; static char pname[] = "test_ncendef"; int cdfid; /* netcdf id */ int jj_dim, kk_dim; /* dimension ids */ int bb_id; /* variable id */ static struct cdfdim kk = /* dimension */ {"kk", 3}; static struct cdfdim jj = /* dimension */ {"jj", 3}; static struct cdfvar bb = /* variable */ {"bb", NC_LONG, 2, ___, 0}; static float bb_rangev[2] = {0., 100.}; /* attribute vector */ static struct cdfatt bb_range = /* attribute */ {___, "valid_range", NC_FLOAT, LEN_OF(bb_rangev), (void *)bb_rangev}; fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, add dimensions */ if ((jj_dim = ncdimdef(cdfid, jj.name, jj.size)) == -1 || (kk_dim = ncdimdef(cdfid, kk.name, kk.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &jj); /* keep in-memory netcdf in sync */ add_dim(test_g, &kk); /* keep in-memory netcdf in sync */ /* dimensions added OK, add a variable */ bb.dims = (int *)emalloc(sizeof(int) * bb.ndims); bb.dims[0] = kk_dim; bb.dims[1] = jj_dim; if ((bb_id = ncvardef(cdfid, bb.name, bb.type, bb.ndims, bb.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &bb); /* keep in-memory netcdf in sync */ /* variable added OK, add a variable attribute */ if (ncattput(cdfid, bb_id, bb_range.name, bb_range.type, bb_range.len, (void *)bb_range.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, bb_id, &bb_range); /* keep in-memory netcdf in sync */ if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode */ if (ncendef(cdfid) != -1) { /* should fail in data mode */ error("%s: ncendef in data mode should have failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail on a bad handle */ if (ncendef(cdfid) != -1) { error("ncendef failed to report bad netcdf handle"); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncclose * try on open netCDF * try in define mode and data mode * try with bad handle, check error * On exit netcdf files are closed. */ /* path - name of writable netcdf file to open */ void test_ncclose(char *path) { int nerrs = 0; static char pname[] = "test_ncclose"; int cdfid; /* netcdf id */ fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode */ if (ncclose(cdfid) == -1) { error("%s: ncclose in define mode failed", pname); nerrs++; } if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* in data mode */ if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); nerrs++; } if (ncclose(cdfid) != -1) { /* should fail, since cdfid is a bad handle */ error("%s: ncclose failed to report bad cdf handle ", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncinquire * try in data mode, check returned values * try in define mode, after adding an unlimited dimension, variable * try with bad handle, check error * On exit netcdf files are closed. */ /* path - name of writable netcdf file to open */ void test_ncinquire(char *path) { int nerrs = 0; static char pname[] = "test_ncinquire"; int cdfid; /* netcdf id */ int ndims; /* number of dimensions */ int nvars; /* number of variables */ int ngatts; /* number of global attributes */ int xdimid; /* id of unlimited dimension */ int rec_dim; /* dimension id */ static struct cdfdim rec = /* dimension */ {"rec", NC_UNLIMITED}; static struct cdfdim dims[] = {/* dimensions */ {"i1", 5}, {"i2", 3}, {"i3", 7}}; int id, nd = LEN_OF(dims); /* number of dimensions */ int dimids[LEN_OF(dims)]; int cc_id; /* variable id */ static struct cdfvar cc[] = {/* record variables of various sizes */ {"cc", NC_LONG, 1, ___, 0}, {"cd", NC_SHORT, 2, ___, 0}, {"ce", NC_FLOAT, 3, ___, 0}}; int iv; int nv = LEN_OF(cc); /* number of record variables */ static char units_val[] = "moles"; static struct cdfatt cc_units = /* attribute */ {___, "units", NC_CHAR, LEN_OF(units_val), (void *)units_val}; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, in data mode */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts, &xdimid) == -1) { error("%s: ncinquire in data mode failed", pname); ncclose(cdfid); return; } /* compare returned with expected values */ if (ndims != test_g->ndims) { error("%s: ndims returned as %d, expected %d", pname, ndims, test_g->ndims); nerrs++; } if (nvars != test_g->nvars) { error("%s: nvars returned as %d, expected %d", pname, nvars, test_g->nvars); nerrs++; } if (ngatts != test_g->ngatts) { error("%s: ngatts returned as %d, expected %d", pname, ngatts, test_g->ngatts); nerrs++; } if (xdimid != test_g->xdimid) { error("%s: xdimid returned as %d, expected %d", pname, xdimid, test_g->xdimid); nerrs++; } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* add dimensions */ for (id = 0; id < nd; id++) { if ((dimids[id] = ncdimdef(cdfid, dims[id].name, dims[id].size)) == -1) { error("%s: ncdimdef failed on normal dimension", pname); ncclose(cdfid); return; } add_dim(test_g, &dims[id]); } /* add an unlimited dimension */ if ((rec_dim = ncdimdef(cdfid, rec.name, rec.size)) == -1) { error("%s: ncdimdef failed on NC_UNLIMITED dimension", pname); ncclose(cdfid); return; } add_dim(test_g, &rec); /* add some record variables */ for (iv = 0; iv < nv; iv++) { cc[iv].dims = (int *)emalloc(sizeof(int) * cc[iv].ndims); cc[iv].dims[0] = rec_dim; /* first dimension unlimited */ for (id = 1; id < cc[iv].ndims; id++) cc[iv].dims[id] = dimids[id]; if ((cc_id = ncvardef(cdfid, cc[iv].name, cc[iv].type, cc[iv].ndims, cc[iv].dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &cc[iv]); /* add a variable attribute */ if (ncattput(cdfid, cc_id, cc_units.name, cc_units.type, cc_units.len, (void *)cc_units.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } add_att(test_g, cc_id, &cc_units); } /* try calling from define mode, compare returned values to expected */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts, &xdimid) == -1) { error("%s: ncinquire in define mode failed", pname); ncclose(cdfid); return; } /* compare returned with expected values */ if (ndims != test_g->ndims) { error("%s: ndims returned as %d, expected %d", pname, ndims, test_g->ndims); nerrs++; } if (nvars != test_g->nvars) { error("%s: nvars returned as %d, expected %d", pname, nvars, test_g->nvars); nerrs++; } if (ngatts != test_g->ngatts) { error("%s: ngatts returned as %d, expected %d", pname, ngatts, test_g->ngatts); nerrs++; } if (xdimid != test_g->xdimid) { error("%s: xdimid returned as %d, expected %d", pname, xdimid, test_g->xdimid); nerrs++; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (ncinquire(cdfid, &ndims, &nvars, &ngatts, &xdimid) != -1) { error("%s: ncinquire failed to report bad netcdf handle ", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncsync * try in define mode, check error * try writing with one handle, reading with another on same netCDF * try with bad handle, check error * On exit netcdf files are closed. */ /* path - name of writable netcdf file to open */ void test_ncsync(char *path) { int nerrs = 0; static char pname[] = "test_ncsync"; int cdfid0, cdfid1; /* netcdf ids */ int ll_dim; /* dimension id */ static struct cdfdim ll = /* dimension */ {"ll", 3}; int dd_id; /* variable id */ static struct cdfvar dd = /* variable */ {"dd", NC_SHORT, 1, ___, 0}; static short dd_fill_valv[] = {-999}; static struct cdfatt dd_fill_val = /* attribute */ {___, "fill_value", NC_SHORT, LEN_OF(dd_fill_valv), (void *)dd_fill_valv}; fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid0 = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen in NC_WRITE mode failed", pname); return; } /* opened */ if (ncredef(cdfid0) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid0); return; } /* in define mode, add a dimension, variable, and attribute */ if ((ll_dim = ncdimdef(cdfid0, ll.name, ll.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid0); return; } add_dim(test_g, &ll); dd.dims = (int *)emalloc(sizeof(int) * dd.ndims); dd.dims[0] = ll_dim; if ((dd_id = ncvardef(cdfid0, dd.name, dd.type, dd.ndims, dd.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid0); return; } add_var(test_g, &dd); if (ncattput(cdfid0, dd_id, dd_fill_val.name, dd_fill_val.type, dd_fill_val.len, (void *)dd_fill_val.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid0); return; } add_att(test_g, dd_id, &dd_fill_val); if (ncsync(cdfid0) != -1) { error("%s: ncsync in define mode should fail", pname); nerrs++; } if (ncendef(cdfid0) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid0); return; } /* in data mode */ if (ncsync(cdfid0) == -1) { error("%s: ncsync in data mode failed", pname); nerrs++; } /* put some data into a variable */ { static long dd_start[] = {0}; static long dd_edges[] = {2}; static short dd_vals[] = {1, 2}; short got_vals[2]; if (ncvarput(cdfid0, dd_id, dd_start, dd_edges, (void *)dd_vals) == -1) { error("%s: ncvarput failed", pname); ncclose(cdfid0); return; } add_data(test_g, dd_id, dd_start, dd_edges); /* keep test in sync */ if (ncsync(cdfid0) == -1) { error("%s: ncsync after putting data failed", pname); nerrs++; } if ((cdfid1 = ncopen(path, NC_NOWRITE)) == -1) { error("%s: second ncopen failed", pname); nerrs++; } else { if (cdfid0 == cdfid1) { error("%s: second ncopen should return distinct handle", pname); nerrs++; } /* read data just put after a sync, should succeed */ if (ncvarget(cdfid1, dd_id, dd_start, dd_edges, (void *)got_vals) == -1) { error("%s: ncvarget failed", pname); nerrs++; } if (dd_vals[0] != got_vals[0] || dd_vals[1] != got_vals[1]) { error("%s: ncvarget succeeded but data values wrong", pname); } if (ncclose(cdfid1) == -1) { error("%s: ncclose failed", pname); nerrs++; } } } if (ncclose(cdfid0) == -1) { error("%s: ncclose failed", pname); nerrs++; } if (ncsync(cdfid0) != -1) { /* should fail, since cdfid0 is bad handle */ error("%s: ncsync failed to report bad cdf handle ", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncabort * try in define mode, check that file was deleted * try after writing variable * try with bad handle, check error * On exit netcdf files are closed. */ /* path - name of writable netcdf file to open */ void test_ncabort(char *path) { int nerrs = 0; static char pname[] = "test_ncabort"; static char fpath[] = "ufo.cdf"; static short attv[] = {3}; static struct cdfatt att = /* attribute */ {___, "temp", NC_SHORT, LEN_OF(attv), (void *)attv}; int cdfid; /* netcdf id */ fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, add a new global attribute */ if (ncattput(cdfid, NC_GLOBAL, att.name, att.type, att.len, att.val) == -1) { error("%s: ncattput failed", pname); ncclose(cdfid); return; } /* abort in define mode, should restore to state before define mode */ if (ncabort(cdfid) == -1) { error("%s: ncabort in define mode failed", pname); ncclose(cdfid); return; } if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen after ncabort failed", pname); return; } /* check that new global attribute was not added */ if (ncattinq(cdfid, NC_GLOBAL, att.name, &att.type, &att.len) != -1) { error("%s: ncabort should have restored state before ncredef", pname); ncclose(cdfid); return; } /* in data mode not being created, should just close */ if (ncabort(cdfid) == -1) { error("%s: ncabort in define mode failed", pname); return; } if ((cdfid = nccreate(fpath, NC_CLOBBER)) == -1) { error("%s: nccreate failed to NC_CLOBBER", pname); return; } /* in define mode being created, should delete */ if (ncabort(cdfid) == -1) { error("%s: ncabort after nccreate failed", pname); return; } /* check with ncopen that file doesn't exist */ if (ncopen(fpath, NC_NOWRITE) != -1) { error("%s: ncabort deleted file, but ncopen found it", pname); return; } if (ncabort(cdfid) != -1) { /* should fail, cdfid is bad handle */ error("%s: ncclose failed to report bad cdf handle ", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/dimtests.c000066400000000000000000000343351503061704500174230ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" #include "emalloc.h" /* * Test ncdimdef * try in data mode, check error * check that returned id is one more than previous id * try adding same dimension twice, check error * try with illegal sizes, check error * make sure unlimited size works, shows up in ncinquire(...,*xtendim) * try to define a second unlimited dimension, check error */ /* path - name of writable netcdf to open */ void test_ncdimdef(char *path) { int nerrs = 0; static char pname[] = "test_ncdimdef"; int cdfid; /* netcdf id */ static struct cdfdim mm = /* dimension */ {"mm", 1}; /* 1 should be a valid dimension size */ static struct cdfdim nn = /* dimension */ {"bogus", ___}; /* used for testing invalid dimension sizes */ static struct cdfdim rec = /* dimension */ {"rec", NC_UNLIMITED}; int ndims; /* number of dimensions */ int nvars; /* number of variables */ int natts; /* number of attributes */ int xdimid; /* id of unlimited dimension, or -1 if none */ int dimid; /* dimension id */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, defining a dimension should fail in data mode */ if (ncdimdef(cdfid, mm.name, mm.size) != -1) { error("%s: ncdimdef should have failed in data mode", pname); ncclose(cdfid); return; } /* enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode OK, add a dimension */ if ((dimid = ncdimdef(cdfid, mm.name, mm.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &mm); /* keep in-memory netcdf in sync */ /* check that dim id returned is one more than previous dim id */ if (dimid != test_g->ndims - 1) { error("%s: ncdimdef returned %d for dim id, expected %d", pname, dimid, test_g->ndims - 1); ncclose(cdfid); return; } /* try adding same dimension again, this should fail */ if (ncdimdef(cdfid, mm.name, mm.size) != -1) { error("%s: ncdimdef should not have allowed redefinition", pname); ncclose(cdfid); return; } /* try adding dimension with negative size, this should fail */ if (ncdimdef(cdfid, nn.name, (long)-10) != -1) { error("%s: ncdimdef should not allow negative size dimension", pname); ncclose(cdfid); return; } /* if there is not already an unlimited size dimension, try adding one */ if (ncinquire(cdfid, &ndims, &nvars, &natts, &xdimid) == -1) { error("%s: ncinquire failed", pname); ncclose(cdfid); return; } if (xdimid == -1) { if (ncdimdef(cdfid, rec.name, rec.size) == -1) { error("%s: ncdimdef failed on NC_UNLIMITED dimension", pname); ncclose(cdfid); return; } add_dim(test_g, &rec); } /* try adding another unlimited dimension, which should fail */ if (ncdimdef(cdfid, "rec2", rec.size) != -1) { error("%s: ncdimdef should not allow second NC_UNLIMITED dimension", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } if (ncdimdef(cdfid, "rec2", rec.size) != -1) { error("%s: ncdimdef should fail on bad netCDF id", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncdimid * check return with defined dimension in both modes * try with undefined dimension, check error * check return with unlimited size dimension * try with bad handle, check error */ /* path - name of writable netcdf to open */ void test_ncdimid(char *path) { int nerrs = 0; static char pname[] = "test_ncdimid"; int cdfid; /* netcdf id */ int nn_dim; /* dimension id */ static struct cdfdim nn = /* dimension */ {"nn", 1}; /* 1 should be a valid dimension size */ fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode OK, add a dimension */ if ((nn_dim = ncdimdef(cdfid, nn.name, nn.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &nn); /* keep in-memory netcdf in sync */ /* check id returned for name matches id returned from definition */ if (ncdimid(cdfid, nn.name) != nn_dim) { error("%s: ncdimid returned wrong value in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode, check returned id for dimension just added */ if (ncdimid(cdfid, nn.name) != nn_dim) { error("%s: ncdimid returned wrong value in data mode", pname); ncclose(cdfid); return; } /* try with undefined dimension, should fail */ if (ncdimid(cdfid, "easter-bunny") != -1) { error("%s: ncdimid with bogus name should have failed ", pname); ncclose(cdfid); return; } /* try with unlimited dimension, assumed to be "rec" from earlier calls */ if (ncdimid(cdfid, "rec") != test_g->xdimid) { error("%s: ncdimid returned bad value for record dimension", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try on bad handle, should fail */ if (ncdimid(cdfid, nn.name) != -1) { error("%s: ncdimid failed to report bad netcdf handle", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncdiminq * try in both modes * check returned name and size against defined name and size * try with bad dimension handle, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf to open */ void test_ncdiminq(char *path) { int nerrs = 0; static char pname[] = "test_ncdiminq"; int cdfid; /* netcdf id */ int dimid; /* dimension id */ struct cdfdim dim; /* dimension */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, in data mode */ dim.name = (char *)emalloc(H4_MAX_NC_NAME); for (dimid = 0; dimid < test_g->ndims; dimid++) { /* loop on all dim ids */ if (ncdiminq(cdfid, dimid, dim.name, &dim.size) == -1) { error("%s: ncdiminq in data mode failed on dim id %d", pname, dimid); ncclose(cdfid); return; } /* compare returned with expected values */ if (strcmp(dim.name, test_g->dims[dimid].name) != 0) { error("%s: ncdiminq (data mode), name %s, expected %s for id = %d", pname, dim.name, test_g->dims[dimid].name, dimid); nerrs++; } if (dim.size != test_g->dims[dimid].size) { error("%s: ncdiminq (data mode), size %d, expected %d for id = %d", pname, dim.size, test_g->dims[dimid].size, dimid); nerrs++; } } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, compare returned with expected values again */ for (dimid = 0; dimid < test_g->ndims; dimid++) { /* loop on all dim ids */ if (ncdiminq(cdfid, dimid, dim.name, &dim.size) == -1) { error("%s: ncdiminq in define mode failed on dim id %d", pname, dimid); ncclose(cdfid); return; } /* compare returned with expected values */ if (strcmp(dim.name, test_g->dims[dimid].name) != 0) { error("%s: ncdiminq (define), name %s, expected %s for id = %d", pname, dim.name, test_g->dims[dimid].name, dimid); nerrs++; } if (dim.size != test_g->dims[dimid].size) { error("%s: ncdiminq (define), size %d, expected %d for id = %d", pname, dim.size, test_g->dims[dimid].size, dimid); nerrs++; } } /* try with bad dimension handles, check for failure */ if (ncdiminq(cdfid, -1, dim.name, &dim.size) != -1 || ncdiminq(cdfid, test_g->ndims, dim.name, &dim.size) != -1) { error("%s: ncdiminq should have failed on bad dimension ids", pname, dimid); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (test_g->ndims >= 1) { /* if any dimensions have been defined */ if (ncdiminq(cdfid, 0, dim.name, &dim.size) != -1) { error("%s: ncdiminq failed to report bad netcdf handle ", pname); nerrs++; } } free(dim.name); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncdimrename * check that proper rename worked with ncdiminq * try renaming to existing dimension name, check error * try with bad dimension handle, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf to open */ void test_ncdimrename(char *path) { int nerrs = 0; static char pname[] = "test_ncdimrename"; int cdfid; /* netcdf id */ int pp_dim; /* dimension id */ static struct cdfdim pp = /* dimension */ {"pp", 7}; static char newname[H4_MAX_NC_NAME] = /* dimension name */ "new_name"; struct cdfdim dim; /* dimension */ static struct cdfdim qq = /* dimension */ {"qq", 10}; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, add two dimensions */ if ((pp_dim = ncdimdef(cdfid, pp.name, pp.size)) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &pp); /* keep in-memory netcdf in sync */ if (ncdimdef(cdfid, qq.name, qq.size) == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return; } add_dim(test_g, &qq); /* keep in-memory netcdf in sync */ /* rename first dimension */ if (ncdimrename(cdfid, pp_dim, newname) == -1) { error("%s: ncdimrename failed", pname); ncclose(cdfid); return; } /* check new name with ncdiminq */ dim.name = (char *)emalloc(H4_MAX_NC_NAME); if (ncdiminq(cdfid, pp_dim, dim.name, &dim.size) == -1) { error("%s: ncdiminq failed", pname); ncclose(cdfid); return; } if (strcmp(dim.name, pp.name) == 0) { error("%s: ncdimrename failed to change name", pname); ncclose(cdfid); return; } if (strcmp(dim.name, newname) != 0) { error("%s: ncdimrename changed name to %s instead of %s", pname, dim.name, newname); ncclose(cdfid); return; } test_g->dims[pp_dim].name = (char *)erealloc((void *)test_g->dims[pp_dim].name, strlen(newname) + 1); (void)strcpy(test_g->dims[pp_dim].name, newname); /* keep test consistent */ /* try to rename second dimension same as first, should fail */ if (ncdimrename(cdfid, pp_dim, qq.name) != -1) { error("%s: ncdimrename should have failed with used name", pname); ncclose(cdfid); return; } /* try with bad dimension handles, check for failure */ if (ncdimrename(cdfid, -1, dim.name) != -1 || ncdimrename(cdfid, test_g->ndims, dim.name) != -1) { error("%s: ncdimrename should have failed on bad dimension ids", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode, restore old name */ if (ncdimrename(cdfid, pp_dim, pp.name) == -1) { error("%s: ncdimrename failed in data mode", pname); ncclose(cdfid); return; } test_g->dims[pp_dim].name = (char *)erealloc((void *)test_g->dims[pp_dim].name, strlen(pp.name) + 1); (void)strcpy(test_g->dims[pp_dim].name, pp.name); /* keep test consistent */ if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (ncdimrename(cdfid, 0, dim.name) != -1) { error("%s: ncdimrename failed to report bad netcdf handle ", pname); nerrs++; } free(dim.name); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/driver.c000066400000000000000000000053761503061704500170650ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "emalloc.h" #include "testcdf.h" #include "tests.h" /* #define MDEBUG 1 */ /* * Test driver for netCDF implementation. This program performs * tests against the netCDF specification for all user-level * functions in an implementation of the netCDF library. Must be * invoked from a directory in which the invoker has write * permission. */ #include #include #include /* to remove warnings, HDFFR-1434 */ /* In-memory netcdf structure, kept in sync with disk netcdf */ struct netcdf *test_g = NULL; int main(void) { static char testfile[] = "test.nc"; static char unlim_testfile_name[] = "test_unlim.nc"; ncopts &= ~NC_FATAL; /* make errors nonfatal */ ncopts &= ~NC_VERBOSE; /* turn off error messages */ ncopts |= NC_VERBOSE; /* turn error messages on--AKC */ ncopts &= ~NC_VERBOSE; /* turn off error messages */ test_g = (struct netcdf *)emalloc(sizeof(struct netcdf)); memset(test_g, 0, sizeof(struct netcdf)); test_nccreate(testfile); test_ncopen(testfile); test_ncredef(testfile); test_ncendef(testfile); test_ncclose(testfile); test_ncinquire(testfile); #if (!defined _MSC_VER) || (_MSC_VER < 1400) test_ncsync(testfile); #endif test_ncabort(testfile); test_ncdimdef(testfile); test_ncdimid(testfile); test_ncdiminq(testfile); test_ncdimrename(testfile); test_ncvardef(testfile); test_ncvarid(testfile); test_ncvarinq(testfile); test_ncvarput1(testfile); test_ncvarget1(testfile); test_ncvarput(testfile); test_ncvarget(testfile); test_ncvarget_unlim(unlim_testfile_name); test_ncvarputg(testfile); test_ncvargetg(testfile); test_ncrecinq(testfile); test_ncrecput(testfile); test_ncrecget(testfile); test_ncvarrename(testfile); test_ncattput(testfile); test_ncattinq(testfile); test_ncattget(testfile); test_ncattcopy(testfile, "test2.nc"); test_ncattname(testfile); test_ncattrename(testfile); test_ncattdel(testfile); test_nctypelen(); for (int i = 0; i < test_g->ndims; i++) { free(test_g->dims[i].name); } for (int i = 0; i < test_g->nvars; i++) { free(test_g->vars[i].name); free(test_g->vars[i].dims); } for (int i = 0; i < test_g->natts; i++) { free(test_g->atts[i].name); } free(test_g); return EXIT_SUCCESS; } hdf4-hdf4.3.1/mfhdf/nctest/emalloc.c000066400000000000000000000015751503061704500172030ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "error.h" #include "emalloc.h" /* Check return from malloc */ void * emalloc(size_t size) { void *p = NULL; if (size == 0) return NULL; p = (void *)malloc(size); if (p == NULL) { error("out of memory\n"); exit(EXIT_FAILURE); } return p; } /* Check return from realloc * * NOTE: realloc(NULL, 0) behavior is implementation-defined */ void * erealloc(void *ptr, size_t size) { void *p = NULL; p = (void *)realloc(ptr, size); if (p == NULL) { error("out of memory"); exit(EXIT_FAILURE); } return p; } hdf4-hdf4.3.1/mfhdf/nctest/emalloc.h000066400000000000000000000010111503061704500171710ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_EMALLOC_H #define NCTEST_EMALLOC_H #ifdef __cplusplus extern "C" { #endif extern void *emalloc(size_t size); extern void *erealloc(void *ptr, size_t size); #ifdef __cplusplus } #endif #endif /* NCTEST_EMALLOC_H */ hdf4-hdf4.3.1/mfhdf/nctest/error.c000066400000000000000000000023421503061704500167110ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "error.h" int error_count = 0; /* * Use for logging error conditions. */ void error(const char *fmt, ...) { va_list args; fprintf(stderr, "*** "); va_start(args, fmt); (void)vfprintf(stderr, fmt, args); va_end(args); fprintf(stderr, "\n"); error_count++; } /* * Turn off netCDF library handling of errors. Caller must check all error * returns after calling this, until on_errs() is called. */ void off_errs(void) { ncopts &= ~NC_FATAL; /* make errors nonfatal */ ncopts &= ~NC_VERBOSE; /* turn off error messages */ } /* * Let netCDF library handle subsequent errors. Callers don't need to check * error returns after this. (This is the initial default.) */ void on_errs(void) { ncopts |= NC_FATAL; /* make errors fatal */ ncopts |= NC_VERBOSE; /* library prints error messages */ } hdf4-hdf4.3.1/mfhdf/nctest/error.h000066400000000000000000000016341503061704500167210ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_ERROR_H #define NCTEST_ERROR_H #include "hdf.h" #ifdef __cplusplus extern "C" { #endif /* Print error message to stderr, don't exit */ extern void derror(const char *fmt, ...); extern void error(const char *fmt, ...); /* * Turn off netCDF library handling of errors. Caller must check all error * returns after calling this, until on_errs() is called. */ extern void off_errs(void); /* * Let netCDF library handle subsequent errors. Callers don't need to check * error returns after this. (This is the initial default.) */ extern void on_errs(void); #ifdef __cplusplus } #endif #endif /* NCTEST_ERROR_H */ hdf4-hdf4.3.1/mfhdf/nctest/misctest.c000066400000000000000000000032651503061704500174200ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" /* * Test nctypelen * try with bad datatype, check error * check returned values for each proper datatype */ void test_nctypelen() { int nerrs = 0; static char pname[] = "test_nctypelen"; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if (nctypelen(NC_BYTE) != sizeof(char)) { error("%s: nctypelen failed for NC_BYTE", pname); nerrs++; } if (nctypelen(NC_CHAR) != sizeof(char)) { error("%s: nctypelen failed for NC_CHAR", pname); nerrs++; } if (nctypelen(NC_SHORT) != sizeof(short)) { error("%s: nctypelen failed for NC_SHORT", pname); nerrs++; } if (nctypelen(NC_LONG) != sizeof(nclong)) { error("%s: nctypelen failed for NC_LONG", pname); nerrs++; } if (nctypelen(NC_FLOAT) != sizeof(float)) { error("%s: nctypelen failed for NC_FLOAT", pname); nerrs++; } if (nctypelen(NC_DOUBLE) != sizeof(double)) { error("%s: nctypelen failed for NC_DOUBLE", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/nctest.def000066400000000000000000000032431503061704500173750ustar00rootroot00000000000000; ; CL.DEF - Default .def file for C Windows applications ; ; Copyright (C) Microsoft Corp 1991. All rights reserved. ; NAME WINDOWAPI ; ; The NAME statement tells the linker that a Windows application is being ; built. The linker supplies the actual name of the application from the ; base name of the executable file. ; EXETYPE WINDOWS 3.0 ; ; The EXETYPE statement tells the linker to build a Windows 3.0 executable ; file. This statement should be used in all applications built with ; C 7.0 for Windows 3.0. ; PROTMODE ; ; The PROTMODE statement tells the linker to mark the application for execution ; in Windows standard or enhanced mode. ; CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE ; ; The CODE and DATA statements set the attributes of the applications CODE and ; DATA segments. ; HEAPSIZE 1024 STACKSIZE 8096 ; ; The HEAPSIZE and STACKSIZE statements set the applications near heap and ; stack sizes. The values specified are recomended for QuickWin applications. ; ; ; Uncomment these lines for DLL module definition file model. ; ;EXPORTS ; WEP @1 RESIDENTNAME ; ;SEGMENTS 'WEP_TEXT' FIXED PRELOAD ; ; ; The above section should be uncommented if this .DEF file is to be used as ; a model for a C 7.0 dynamic-link library (DLL) .DEF file. The WEP ; routine is included in the C 7.0 startup code, but the symbol must ; be explicitly exported. If a DLL already has a user-defined WEP routine, ; the routine should be renamed _WEP. The startup code will call _WEP, ; if present, during DLL termination. For additional information concerning ; the WEP function, see the C 7.0 and Windows 3.0 SDK documentation. ; hdf4-hdf4.3.1/mfhdf/nctest/nctest.lnk000066400000000000000000000002341503061704500174200ustar00rootroot00000000000000driver vartests cdftests dimtests atttests misctest nctest /noi nctest nctest.lib ..\libsrc\netcdf.lib \hdf\hdf\lib\df.lib /NOD:llibce llibcewq libw nctest hdf4-hdf4.3.1/mfhdf/nctest/rec.c000066400000000000000000000427071503061704500163420ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, University Corporation for Atmospheric Research * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "val.h" #include "error.h" #include "tests.h" #include "emalloc.h" #define VARS 100 /* * Returns number of record variables in an open netCDF file, and an array of * the record variable ids, if the array parameter is non-null. Returns -1 on * error. */ static int numrecvars(int ncid, int *recvarids) { int ndims, iv, nvars; int nrecvars; int recdimid; int dimids[H4_MAX_VAR_DIMS]; if (ncinquire(ncid, NULL, &nvars, NULL, &recdimid) == -1) return -1; if (recdimid == -1) return 0; nrecvars = 0; for (iv = 0; iv < nvars; iv++) { if (ncvarinq(ncid, iv, NULL, NULL, &ndims, dimids, NULL) == -1) return -1; if (ndims > 0 && dimids[0] == recdimid) { if (recvarids) recvarids[nrecvars] = iv; nrecvars++; } } return nrecvars; } /* * Returns record size (in bytes) of the record variable with a specified * variable id. Returns 0 if not a record variable. Returns -1 on error. */ static long ncrecsize(int ncid, int vid) { int recdimid; nc_type type; int ndims; int dimids[H4_MAX_VAR_DIMS]; int id; long size; if (ncinquire(ncid, NULL, NULL, NULL, &recdimid) == -1) return -1; if (ncvarinq(ncid, vid, 0, &type, &ndims, dimids, NULL) == -1) return -1; if (ndims == 0 || dimids[0] != recdimid) return 0; size = nctypelen(type); for (id = 1; id < ndims; id++) { long len; (void)ncdiminq(ncid, dimids[id], 0, &len); size *= len; } return size; } /* * Retrieves the number of record variables, the record variable ids, and the * record size of each record variable. If any pointer to info to be returned * is null, the associated information is not returned. Returns -1 on error. * This is the same as the ncrecinq() in the library, except that can handle * errors better. */ static int recinq(int ncid, int *nrecvars, int *recvarids, long *recsizes) { int iv; int rvarids[VARS]; int nrvars = numrecvars(ncid, rvarids); if (nrvars == -1) return -1; if (nrecvars) *nrecvars = nrvars; if (recvarids) for (iv = 0; iv < nrvars; iv++) recvarids[iv] = rvarids[iv]; if (recsizes) for (iv = 0; iv < nrvars; iv++) recsizes[iv] = ncrecsize(ncid, rvarids[iv]); return 0; } /* * Test ncrecinq * try in both data and define modes * check returned values against independently computed values * try with bad netCDF handle, check error */ /* path - name of netcdf file to open */ void test_ncrecinq(char *path) { int nerrs = 0; static char pname[] = "test_ncrecinq"; int ncid; int nrvars; /* number of record variables */ int rvarids[VARS]; /* id of each record variable */ long rvarsizes[VARS]; /* record size of each record variable */ int tnrvars; /* true number of record variables */ int trvarids[VARS]; /* true id of each record variable */ long trvarsizes[VARS]; /* true rec size of each record variable */ int iv; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((ncid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* First compute independently what ncrecinq should return */ if (recinq(ncid, &tnrvars, trvarids, trvarsizes) == -1) { error("%s: recinq failed", pname); ncclose(ncid); return; } /* check that ncrecinq() returns correct information in data mode */ if (ncrecinq(ncid, &nrvars, rvarids, rvarsizes) == -1) { error("%s: ncrecinq failed", pname); ncclose(ncid); return; } if (nrvars != tnrvars) { error("ncrecinq returned wrong number of rec vars, %d != %d", nrvars, tnrvars); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (rvarids[iv] != trvarids[iv]) { error("ncrecinq returned wrong record id for var %d", trvarids[iv]); nerrs++; } if (rvarsizes[iv] != trvarsizes[iv]) { error("ncrecinq returned wrong record size for var %d", trvarids[iv]); nerrs++; } } if (ncredef(ncid) == -1) { error("%s: ncredef failed", pname); ncclose(ncid); return; } /* check that ncrecinq() returns correct information in define mode too */ if (ncrecinq(ncid, &nrvars, rvarids, rvarsizes) == -1) { error("%s: ncrecinq failed in define mode", pname); ncclose(ncid); return; } if (nrvars != tnrvars) { error("define mode, ncrecinq returned wrong num of rec vars, %d != %d", nrvars, tnrvars); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (rvarids[iv] != trvarids[iv]) { error("define mode, ncrecinq returned wrong record id for var %d", trvarids[iv]); nerrs++; } if (rvarsizes[iv] != trvarsizes[iv]) { error("define mode, ncrecinq returned wrong rec size for var %d", trvarids[iv]); nerrs++; } } if (ncclose(ncid) == -1) { error("%s: ncclose failed", pname); return; } if (ncrecinq(ncid, &nrvars, rvarids, rvarsizes) != -1) { error("%s: ncrecinq failed to report bad handle", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Retrieves the dimension sizes of a variable with a specified variable id in * an open netCDF file. Returns -1 on error. */ static int dimsizes(int ncid, int varid, long *sizes) { int ndims; int id; int dimids[H4_MAX_VAR_DIMS]; if (ncvarinq(ncid, varid, 0, NULL, &ndims, dimids, NULL) == -1) return -1; if (ndims == 0 || sizes == 0) return 0; for (id = 0; id < ndims; id++) (void)ncdiminq(ncid, dimids[id], 0, &sizes[id]); return 0; } /* * Write one record's worth of data, except don't write to variables for which * the address of the data to be written is NULL. Return -1 on error. This is * the same as the ncrecput() in the library, except that can handle errors * better. */ static int recput(int ncid, long recnum, void **datap) { int iv; int rvids[VARS]; int nrvars = numrecvars(ncid, rvids); long start[H4_MAX_VAR_DIMS]; long edges[H4_MAX_VAR_DIMS]; if (nrvars == -1) return -1; start[0] = recnum; for (iv = 1; iv < nrvars; iv++) start[iv] = 0; for (iv = 0; iv < nrvars; iv++) { if (datap[iv] != 0) { (void)dimsizes(ncid, rvids[iv], edges); edges[0] = 1; /* only 1 record's worth */ if (ncvarput(ncid, rvids[iv], start, edges, datap[iv]) == -1) return -1; } } return 0; } /* * Read one record's worth of data, except don't read from variables for which * the address of the data to be read is null. Return -1 on error. This is * the same as the ncrecget() in the library, except that can handle errors * better. */ static int recget(int ncid, int recnum, void **datap) { int iv; int rvids[VARS]; int nrvars = numrecvars(ncid, rvids); long start[H4_MAX_VAR_DIMS]; long edges[H4_MAX_VAR_DIMS]; if (nrvars == -1) return -1; start[0] = recnum; for (iv = 1; iv < nrvars; iv++) start[iv] = 0; for (iv = 0; iv < nrvars; iv++) { if (datap[iv] != 0) { (void)dimsizes(ncid, rvids[iv], edges); edges[0] = 1; /* only 1 record's worth */ if (ncvarget(ncid, rvids[iv], start, edges, datap[iv]) == -1) return -1; } } return 0; } /* * Test ncrecput * check that proper call works putting all recoerd variables * try putting only a proper subset of variables * try putting the empty subset of variables * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncrecput(char *path) { int nerrs = 0; static char pname[] = "test_ncrecput"; int nrvars; /* number of record variables */ int rvarids[VARS]; /* id of each record variable */ long rvarsizes[VARS]; /* record size of each record variable */ int ncid; /* netcdf id */ void *datap[VARS]; /* array of address pointers for rec vars */ void *datar[VARS]; /* pointers for comparison data */ long recnum = 1; /* we'll write the second record */ int iv; long recsize[VARS]; /* record size in data elements */ nc_type vartype[VARS]; void *zeros[VARS]; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((ncid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } if (ncrecinq(ncid, &nrvars, rvarids, rvarsizes) == -1) { error("%s: ncrecinq failed", pname); ncclose(ncid); return; } /* get a block of data of the right type for each record variable */ for (iv = 0; iv < nrvars; iv++) { datap[iv] = emalloc(rvarsizes[iv]); datar[iv] = emalloc(rvarsizes[iv]); /* for comparison values */ if (ncvarinq(ncid, rvarids[iv], 0, &vartype[iv], NULL, NULL, NULL) == -1) { error("%s: ncvarinq failed", pname); ncclose(ncid); return; } recsize[iv] = rvarsizes[iv] / nctypelen(vartype[iv]); /* Fill data blocks with 0,1,2,3,... */ val_fill(vartype[iv], recsize[iv], datap[iv]); /* Zero out comparison data */ val_fill_zero(vartype[iv], recsize[iv], datar[iv]); } /* Zero data in recnum record, before trying to put non-zero data */ if (recput(ncid, recnum, datar) == -1) { error("%s: recput failed", pname); ncclose(ncid); return; } /* opened in data mode, try putting a complete record */ if (ncrecput(ncid, recnum, datap) == -1) { error("%s: ncrecput failed on complete record", pname); nerrs++; } /* Check that right values were put */ if (recget(ncid, recnum, datar) == -1) { error("%s: recget failed", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (val_cmp(vartype[iv], recsize[iv], datap[iv], datar[iv]) != 0) { error("%s: bad values written by recput", pname); nerrs++; } val_fill_zero(vartype[iv], recsize[iv], datap[iv]); val_fill_zero(vartype[iv], recsize[iv], datar[iv]); zeros[iv] = 0; } if (nrvars > 0) { void *datap0 = datap[0]; /* put a partial record, everything but first record variable */ datap[0] = 0; val_fill(vartype[0], recsize[0], datar[0]); if (ncrecput(ncid, recnum, datap) == -1) { error("%s: ncrecput failed on partial record", pname); nerrs++; } /* Check right values were put, first record variable undisturbed */ datap[0] = datap0; if (recget(ncid, recnum, datap) == -1) { error("%s: recget failed after partial record put", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (val_cmp(vartype[iv], recsize[iv], datap[iv], datar[iv]) != 0) { error("%s: bad values written by partial recput", pname); nerrs++; } } } /* Put an empty record, check that values remain undisturbed */ if (ncrecput(ncid, recnum, zeros) == -1) { error("%s: ncrecput failed on empty record", pname); nerrs++; } if (recget(ncid, recnum, datap) == -1) { error("%s: recget failed after empty record put", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (val_cmp(vartype[iv], recsize[iv], datap[iv], datar[iv]) != 0) { error("%s: bad values written by empty recput", pname); nerrs++; } } /* try in define mode, check error */ if (ncredef(ncid) == -1) { error("%s: ncredef failed", pname); ncclose(ncid); return; } if (ncrecput(ncid, recnum, datap) != -1) { error("%s: ncrecput should fail in define mode", pname); nerrs++; } /* try with bad netCDF handle, check error */ if (ncclose(ncid) == -1) { error("%s: ncclose failed", pname); return; } if (ncrecput(ncid, recnum, datap) != -1) { error("%s: ncrecput failed to report bad handle", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { free(datap[iv]); free(datar[iv]); } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncrecget * check that proper call works getting all record variables * try getting only a proper subset of variables * try getting the empty subset of variables * try with bad netCDF handle, check error */ /* path - name of netcdf file to open */ void test_ncrecget(char *path) { int nerrs = 0; static char pname[] = "test_ncrecget"; int nrvars; /* number of record variables */ int rvarids[VARS]; /* id of each record variable */ long rvarsizes[VARS]; /* record size of each record variable */ int ncid; /* netcdf id */ void *datap[VARS]; /* array of address pointers for rec vars */ void *datar[VARS]; /* pointers for comparison data */ long recnum = 1; /* we'll write the second record */ int iv; long recsize[VARS]; /* record size in data elements */ nc_type vartype[VARS]; void *zeros[VARS]; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((ncid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } if (ncrecinq(ncid, &nrvars, rvarids, rvarsizes) == -1) { error("%s: ncrecinq failed", pname); ncclose(ncid); return; } /* get a block of data of the right type for each record variable */ for (iv = 0; iv < nrvars; iv++) { datap[iv] = emalloc(rvarsizes[iv]); datar[iv] = emalloc(rvarsizes[iv]); /* for comparison values */ if (ncvarinq(ncid, rvarids[iv], 0, &vartype[iv], NULL, NULL, NULL) == -1) { error("%s: ncvarinq failed", pname); ncclose(ncid); return; } recsize[iv] = rvarsizes[iv] / nctypelen(vartype[iv]); /* Fill data blocks with 0,1,2,3,... */ val_fill(vartype[iv], recsize[iv], datap[iv]); /* Zero out comparison data */ val_fill_zero(vartype[iv], recsize[iv], datar[iv]); } if (recput(ncid, recnum, datap) == -1) { error("%s: recput failed", pname); ncclose(ncid); return; } /* opened in data mode, try getting a complete record */ if (recget(ncid, recnum, datap) == -1) { error("%s: recget failed on complete record", pname); nerrs++; } if (ncrecget(ncid, recnum, datar) == -1) { error("%s: ncrecget failed on complete record", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { if (val_cmp(vartype[iv], recsize[iv], datap[iv], datar[iv]) != 0) { error("%s: bad values written by recget", pname); nerrs++; } val_fill_zero(vartype[iv], recsize[iv], datap[iv]); val_fill_zero(vartype[iv], recsize[iv], datar[iv]); zeros[iv] = 0; } if (nrvars > 0) { void *datap0 = datap[0]; void *datar0 = datar[0]; /* get a partial record, everything but first record variable */ datap[0] = 0; if (ncrecget(ncid, recnum, datap) == -1) { error("%s: ncrecget failed on partial record", pname); nerrs++; } datar[0] = 0; if (recget(ncid, recnum, datar) == -1) { error("%s: recget failed on partial record", pname); nerrs++; } /* Check right values were got, first record variable undisturbed */ datap[0] = datap0; datar[0] = datar0; for (iv = 0; iv < nrvars; iv++) { if (val_cmp(vartype[iv], recsize[iv], datap[iv], datar[iv]) != 0) { error("%s: bad values read by partial recget", pname); nerrs++; } } } /* Get an empty record */ if (ncrecget(ncid, recnum, zeros) == -1) { error("%s: ncrecget failed on empty record", pname); nerrs++; } /* try with bad netCDF handle, check error */ if (ncclose(ncid) == -1) { error("%s: ncclose failed", pname); return; } if (ncrecget(ncid, recnum, datap) != -1) { error("%s: ncrecget failed to report bad handle", pname); nerrs++; } for (iv = 0; iv < nrvars; iv++) { free(datap[iv]); free(datar[iv]); } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/slabs.c000066400000000000000000000341541503061704500166720ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" #include "emalloc.h" #define LEN_OF(array) ((sizeof array) / (sizeof array[0])) /* dimension sizes */ #define NDIMS 4 /* number of dimensions */ #define WSIZE 7 /* sizes of dimensions */ #define XSIZE 5 #define YSIZE 6 #define ZSIZE 4 /* Added new function for character and byte so we will not overflow; pgcc compiler screamed at VF macro */ #define VFC(w) (1000 * w[0] + 100 * w[1] + 10 * w[2] + w[3]) % 64 + 48 /* Any function that maps dimension values 1-1 to values is OK here */ #define VF(w) (1000 * w[0] + 100 * w[1] + 10 * w[2] + w[3]) #define NVARS 6 /* number of variables */ /* * Fill typed array element with specified value, that is * * v[ii] = val; */ /* type - netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ /* v - array of specified type */ /* ii - it's v[ii] we want to store into */ /* val - value to store */ static void val_stuff(nc_type type, void *v, int ii, long val) /* v[ii] = val */ { static char pname[] = "val_stuff"; switch (type) { case NC_BYTE: case NC_CHAR: ((char *)v)[ii] = (char)val; break; case NC_SHORT: ((short *)v)[ii] = (short)val; break; case NC_LONG: ((nclong *)v)[ii] = (nclong)val; break; case NC_FLOAT: ((float *)v)[ii] = (float)val; break; case NC_DOUBLE: ((double *)v)[ii] = (double)val; break; default: error("%s: bad type, test program error", pname); } } /* * Compare typed array element with specified value, that is return * * (v[ii] != val) * * returns 0 if equal, 1 if not equal */ /* type - netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ /* v - array of specified type */ /* ii - it's v[ii] we want to compare */ /* val - value to compare with */ static int val_diff(nc_type type, void *v, int ii, long val) /* v[ii] != val */ { static char pname[] = "val_diff"; switch (type) { case NC_BYTE: case NC_CHAR: return (((char *)v)[ii] != (char)val); case NC_SHORT: return (((short *)v)[ii] != (short)val); case NC_LONG: return (((nclong *)v)[ii] != (nclong)val); case NC_FLOAT: return (((float *)v)[ii] != (float)val); case NC_DOUBLE: return (((double *)v)[ii] != (double)val); default: error("%s: bad type, test program error", pname); return (-1); } } /* * For each type of variable, put a four-dimensional hypercube of values * with a single call to ncvarput. Then use ncvarget to retrieve a single * interior value, an interior vector of values along each of the four * dimensions, an interior plane of values along each of the six pairs of * dimensions, and an interior cube of values along each of the four * triples of dimensions. In each case, compare the retrieved values with * the written values. */ /* cdfid - handle of netcdf open and in data mode */ int test_slabs(int cdfid) { int nerrs = 0; static char pname[] = "test_slabs"; static struct cdfdim dims[NDIMS] = {{"w", WSIZE}, {"x", XSIZE}, {"y", YSIZE}, {"z", ZSIZE}}; int dimids[NDIMS]; /* dimension ids */ long corner[NDIMS], edge[NDIMS], point[NDIMS]; static struct cdfvar va[NVARS] = { /* variables of all types */ {"bytevar", NC_BYTE, NDIMS, ___, 0}, {"charvar", NC_CHAR, NDIMS, ___, 0}, {"shortvar", NC_SHORT, NDIMS, ___, 0}, {"longvar", NC_LONG, NDIMS, ___, 0}, {"floatvar", NC_FLOAT, NDIMS, ___, 0}, {"doublevar", NC_DOUBLE, NDIMS, ___, 0}, }; void *v; int varid[NVARS], iv; /* variable id */ int idim, jdim, kdim, ldim; int iw, ix, iy, iz, ii, jj, kk; if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return 1; } /* back in define mode OK, now add dimensions */ for (idim = 0; idim < NDIMS; idim++) { dimids[idim] = ncdimdef(cdfid, dims[idim].name, dims[idim].size); if (dimids[idim] == -1) { error("%s: ncdimdef failed", pname); ncclose(cdfid); return 1; } add_dim(test_g, &dims[idim]); } /* define a multi-dimensional variable of each type */ for (iv = 0; iv < NVARS; iv++) { va[iv].dims = (int *)emalloc(sizeof(int) * va[iv].ndims); for (idim = 0; idim < va[iv].ndims; idim++) va[iv].dims[idim] = dimids[idim]; varid[iv] = ncvardef(cdfid, va[iv].name, va[iv].type, va[iv].ndims, va[iv].dims); if (varid[iv] == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return 1; } add_var(test_g, &va[iv]); /* keep in-memory netcdf in sync */ } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return 1; } for (iv = 0; iv < NVARS; iv++) { /* test each type of variable */ v = emalloc(WSIZE * XSIZE * YSIZE * ZSIZE * nctypelen(va[iv].type)); /* fill it with values using a function of dimension indices */ ii = 0; for (iw = 0; iw < WSIZE; iw++) { corner[0] = iw; for (ix = 0; ix < XSIZE; ix++) { corner[1] = ix; for (iy = 0; iy < YSIZE; iy++) { corner[2] = iy; for (iz = 0; iz < ZSIZE; iz++) { corner[3] = iz; /* v[ii++] = VF(corner); */ if (va[iv].type == NC_BYTE || va[iv].type == NC_CHAR) val_stuff(va[iv].type, v, ii, VFC(corner)); else val_stuff(va[iv].type, v, ii, VF(corner)); ii++; } } } } for (idim = 0; idim < NDIMS; idim++) { corner[idim] = 0; edge[idim] = dims[idim].size; } /* ncvarput the whole variable */ if (ncvarput(cdfid, varid[iv], corner, edge, (void *)v) == -1) { error("%s: ncvarput failed", pname); nerrs++; } add_data(test_g, varid[iv], corner, edge); /* keep test in sync */ /* * For several combinations of fixed dimensions, get a slab and compare * values to function values. */ /* get an interior point */ for (idim = 0; idim < NDIMS; idim++) { corner[idim] = dims[idim].size / 2; edge[idim] = 1; point[idim] = corner[idim]; } if (ncvarget(cdfid, varid[iv], corner, edge, (void *)v) == -1) { error("%s: ncvarget of one point failed", pname); nerrs++; } /* if (v[0] != VF(point)) */ if (va[iv].type == NC_BYTE || va[iv].type == NC_CHAR) { if (val_diff(va[iv].type, v, 0, VFC(point))) { error("%s: ncvarget got wrong value for point", pname); nerrs++; } } else { if (val_diff(va[iv].type, v, 0, VF(point))) { error("%s: ncvarget got wrong value for point", pname); nerrs++; } } /*endif NC_BYTE || NC_CHAR */ /* get an interior vector in each direction */ for (idim = 0; idim < NDIMS; idim++) { for (jdim = 0; jdim < NDIMS; jdim++) { corner[jdim] = dims[jdim].size / 2; edge[jdim] = 1; point[jdim] = corner[jdim]; } corner[idim] = 1; /* get vector along dimension idim */ edge[idim] = dims[idim].size - 2; if (ncvarget(cdfid, varid[iv], corner, edge, (void *)v) == -1) { error("%s: ncvarget of vector failed", pname); nerrs++; } for (ii = corner[idim]; ii <= edge[idim]; ii++) { point[idim] = ii; /* if (v[ii-1] != VF(point)) */ if (va[iv].type == NC_BYTE || va[iv].type == NC_CHAR) { if (val_diff(va[iv].type, v, ii - 1, VFC(point))) { error("%s: ncvarget got wrong value for vector", pname); nerrs++; } } else { if (val_diff(va[iv].type, v, ii - 1, VF(point))) { error("%s: ncvarget got wrong value for vector", pname); nerrs++; } } } } /* get an interior plane in each direction */ for (idim = 0; idim < NDIMS; idim++) { for (jdim = idim + 1; jdim < NDIMS; jdim++) { for (kdim = 0; kdim < NDIMS; kdim++) { /* reset corners and edges */ corner[kdim] = dims[kdim].size / 2; edge[kdim] = 1; point[kdim] = corner[kdim]; } corner[idim] = 1; /* interior plane along dimensions idim jdim */ corner[jdim] = 1; edge[idim] = dims[idim].size - 2; edge[jdim] = dims[jdim].size - 2; if (ncvarget(cdfid, varid[iv], corner, edge, (void *)v) == -1) { error("%s: ncvarget of plane failed", pname); nerrs++; } for (ii = corner[idim]; ii <= edge[idim]; ii++) { for (jj = corner[jdim]; jj <= edge[jdim]; jj++) { point[idim] = ii; point[jdim] = jj; /* if (v[(ii-1)*edge[jdim]+jj-1] != VF(point)) { */ if (va[iv].type == NC_BYTE || va[iv].type == NC_CHAR) { if (val_diff(va[iv].type, v, (ii - 1) * (int)edge[jdim] + jj - 1, VFC(point))) { error("%s: ncvarget got wrong value in plane", pname); error("idim=%d,jdim=%d,ii=%d,jj=%d", idim, jdim, ii, jj); nerrs++; } } else { if (val_diff(va[iv].type, v, (ii - 1) * (int)edge[jdim] + jj - 1, VF(point))) { error("%s: ncvarget got wrong value in plane", pname); error("idim=%d,jdim=%d,ii=%d,jj=%d", idim, jdim, ii, jj); nerrs++; } } } } } } /* get an interior cube in each direction */ for (idim = 0; idim < NDIMS; idim++) { for (jdim = idim + 1; jdim < NDIMS; jdim++) { for (kdim = jdim + 1; kdim < NDIMS; kdim++) { for (ldim = 0; ldim < NDIMS; ldim++) { /* reset corners, edges */ corner[ldim] = dims[ldim].size / 2; edge[ldim] = 1; point[ldim] = corner[ldim]; } corner[idim] = 1; /* intr. cube along idim jdim kdim */ corner[jdim] = 1; corner[kdim] = 1; edge[idim] = dims[idim].size - 2; edge[jdim] = dims[jdim].size - 2; edge[kdim] = dims[kdim].size - 2; if (ncvarget(cdfid, varid[iv], corner, edge, (void *)v) == -1) { error("%s: ncvarget of cube failed", pname); nerrs++; } for (ii = corner[idim]; ii <= edge[idim]; ii++) { for (jj = corner[jdim]; jj <= edge[jdim]; jj++) { for (kk = corner[kdim]; kk <= edge[kdim]; kk++) { point[idim] = ii; point[jdim] = jj; point[kdim] = kk; /* if (v[((ii-1)*edge[jdim]+jj-1)* edge[kdim]+kk-1] != VF(point)) { */ if (va[iv].type == NC_BYTE || va[iv].type == NC_CHAR) { if (val_diff(va[iv].type, v, ((ii - 1) * (int)edge[jdim] + jj - 1) * (int)edge[kdim] + kk - 1, VFC(point))) { error("%s: ncvarget got wrong value in cube", pname); error("idim=%d,jdim=%d,kdim=%d,ii=%d,jj=%d,kk=%d", idim, jdim, kdim, ii, jj, kk); nerrs++; } } else { if (val_diff(va[iv].type, v, ((ii - 1) * (int)edge[jdim] + jj - 1) * (int)edge[kdim] + kk - 1, VF(point))) { error("%s: ncvarget got wrong value in cube", pname); error("idim=%d,jdim=%d,kdim=%d,ii=%d,jj=%d,kk=%d", idim, jdim, kdim, ii, jj, kk); nerrs++; } } } } } } } } free(v); } return nerrs; } hdf4-hdf4.3.1/mfhdf/nctest/test_unlim.cdl000066400000000000000000000013071503061704500202630ustar00rootroot00000000000000netcdf new { dimensions: x = 2; y = 3; time = UNLIMITED ; // (12 currently) variables: float a(x,y); int date(time) ; int time(time) ; short b(time, y, x); data: a = 1.0, 2.0, 3.0, 4.0, 5.0, 6.0; date = 840116, 840214, 840316, 840415, 840516, 840615, 840716, 840816, 840915, 841016, 841115, 841216 ; time = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; b = 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 ; } hdf4-hdf4.3.1/mfhdf/nctest/test_unlim.nc000066400000000000000000000007501503061704500201220ustar00rootroot00000000000000CDF xytime aàdateøtimeüb ?€@@@@€@ @À Ñ´ Ò Ò| Òß ÓD  Ó§ Ô  Ôp ÔÓ  Õ8  Õ› !!"" Ö ##$$%%hdf4-hdf4.3.1/mfhdf/nctest/testcdf.h000066400000000000000000000046441503061704500172300ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_TESTCDF_H #define NCTEST_TESTCDF_H /* * In-memory structure holding netcdf structure for comparing with * on-disk netcdf. Whenever a disk netcdf is updated in the test * package, this structure should be updated at the same time, to keep * them in sync. */ #include #include #include #include "mfhdf.h" #define ___ 0 /* marker for structure place-holder */ #define BAD_TYPE NC_UNSPECIFIED /* must be distinct from valid types */ struct cdfdim { /* dimension */ char *name; long size; }; struct cdfvar { /* variable */ char *name; nc_type type; int ndims; int *dims; int natts; }; struct cdfatt { /* attribute */ int var; char *name; nc_type type; int len; void *val; }; #define MAX_TEST_DIMS 32 #define MAX_TEST_VARS 32 #define MAX_TEST_ATTS 32 struct netcdf { int ndims; /* number of dimensions declared for netcdf */ int nvars; /* number of variables declared for netcdf */ int natts; /* number of attributes */ int ngatts; /* number of global attributes */ int xdimid; /* number of the unlimited dimension, if any */ struct cdfdim dims[MAX_TEST_DIMS]; /* dimensions */ struct cdfvar vars[MAX_TEST_VARS]; /* variables */ struct cdfatt atts[MAX_TEST_ATTS]; /* attributes */ }; /* In-memory netcdf structure, kept in sync with disk netcdf */ extern struct netcdf *test_g; /* * Methods to compare the equality of floating-point values: * * 1. H4_XXX_ABS_EQUAL - check if the difference is smaller than the * Epsilon value. The Epsilon values, FLT_EPSILON, DBL_EPSILON, * and LDBL_EPSILON, are defined by compiler in float.h. * * HDF5 (from whence these macros came) also includes macros that * use relative error. Those will be brought over only if needed. */ #define H4_FLT_ABS_EQUAL(X, Y) (fabsf((X) - (Y)) < FLT_EPSILON) #define H4_DBL_ABS_EQUAL(X, Y) (fabs((X) - (Y)) < DBL_EPSILON) #define H4_LDBL_ABS_EQUAL(X, Y) (fabsl((X) - (Y)) < LDBL_EPSILON) #endif /* NCTEST_TESTCDF_H */ hdf4-hdf4.3.1/mfhdf/nctest/tests.h000066400000000000000000000032541503061704500167320ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_TESTS_H #define NCTEST_TESTS_H #ifdef __cplusplus extern "C" { #endif extern void test_nccreate(char *); extern void test_ncopen(char *); extern void test_ncredef(char *); extern void test_ncendef(char *); extern void test_ncclose(char *); extern void test_ncinquire(char *); extern void test_ncsync(char *); extern void test_ncabort(char *); extern void test_ncdimdef(char *); extern void test_ncdimid(char *); extern void test_ncdiminq(char *); extern void test_ncdimrename(char *); extern void test_ncvardef(char *); extern void test_ncvarid(char *); extern void test_ncvarinq(char *); extern void test_ncvarput1(char *); extern void test_ncvarget1(char *); extern void test_ncvarput(char *); extern void test_ncvarget(char *); extern void test_ncvarputg(char *); extern void test_ncvargetg(char *); extern void test_ncvarget_unlim(char *); extern void test_ncrecinq(char *); extern void test_ncrecput(char *); extern void test_ncrecget(char *); extern void test_ncvarrename(char *); extern void test_ncattput(char *); extern void test_ncattinq(char *); extern void test_ncattget(char *); extern void test_ncattcopy(char *, const char *); extern void test_ncattname(char *); extern void test_ncattrename(char *); extern void test_ncattdel(char *); extern void test_nctypelen(void); extern int test_varputget(int); extern int test_varputgetg(int); extern int test_slabs(int); #ifdef __cplusplus } #endif #endif /* NCTEST_TESTS_H */ hdf4-hdf4.3.1/mfhdf/nctest/val.c000066400000000000000000000156671503061704500163600ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" #include "val.h" #include "error.h" /* fill typed value block with values of specified type */ /* type - netcdf type, NC_BYTE, ..., NC_DOUBLE */ /* len - number of elements to fill with */ /* vals - start of first block of values */ void val_fill(nc_type type, long len, void *vals) { static char pname[] = "val_fill"; int iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; switch (type) { case NC_BYTE: case NC_CHAR: gp.cp = (char *)vals; for (iel = 0; iel < len; iel++) *gp.cp++ = (char)iel; break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len; iel++) *gp.sp++ = (short)(iel - len / 2); /* negative and positive values */ break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len; iel++) *gp.lp++ = (nclong)(iel - len / 2); break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len; iel++) *gp.fp++ = (float)(iel + 1); break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len; iel++) *gp.dp++ = (double)(iel - len / 2); break; default: error("%s: bad type, test program error", pname); } } /* fill typed value block with zeros of specified type */ /* type - netcdf type, NC_BYTE, ..., NC_DOUBLE */ /* len - number of elements to fill with */ /* vals - start of first block of values */ void val_fill_zero(nc_type type, long len, void *vals) { static char pname[] = "val_fill_zero"; int iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; switch (type) { case NC_BYTE: case NC_CHAR: gp.cp = (char *)vals; for (iel = 0; iel < len; iel++) *gp.cp++ = (char)0; break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len; iel++) *gp.sp++ = (short)0; break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len; iel++) *gp.lp++ = (nclong)0; break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len; iel++) *gp.fp++ = (float)0; break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len; iel++) *gp.dp++ = (double)0; break; default: error("%s: bad type, test program error", pname); } } /* * compare two typed value blocks, return 0 if equal, 1+n otherwise, * where n is the index of the first differing element. */ /* type - netcdf type, NC_BYTE, ..., NC_DOUBLE */ /* len - number of elements of type to compare */ /* v1 - start of first block of values */ /* v2 - start of second block of values */ int val_cmp(nc_type type, long len, void *v1, void *v2) { static char pname[] = "val_cmp"; int iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp, hp; switch (type) { case NC_CHAR: case NC_BYTE: gp.cp = (char *)v1; hp.cp = (char *)v2; for (iel = 0; iel < len; iel++) { if (*gp.cp != *hp.cp) return (iel + 1); gp.cp++; hp.cp++; } break; case NC_SHORT: gp.sp = (short *)v1; hp.sp = (short *)v2; for (iel = 0; iel < len; iel++) { if (*gp.sp != *hp.sp) return (iel + 1); gp.sp++; hp.sp++; } break; case NC_LONG: gp.lp = (nclong *)v1; hp.lp = (nclong *)v2; for (iel = 0; iel < len; iel++) { if (*gp.lp != *hp.lp) return (iel + 1); gp.lp++; hp.lp++; } break; case NC_FLOAT: gp.fp = (float *)v1; hp.fp = (float *)v2; for (iel = 0; iel < len; iel++) { if (!H4_FLT_ABS_EQUAL(*gp.fp, *hp.fp)) return (iel + 1); gp.fp++; hp.fp++; } break; case NC_DOUBLE: gp.dp = (double *)v1; hp.dp = (double *)v2; for (iel = 0; iel < len; iel++) { if (!H4_DBL_ABS_EQUAL(*gp.dp, *hp.dp)) return (iel + 1); gp.dp++; hp.dp++; } break; default: error("%s: bad type, test program error", pname); } return 0; /* all values agree */ } /* print typed value block with values of specified type */ /* type - netcdf type, NC_BYTE, ..., NC_DOUBLE */ /* len - number of elements to fill with */ /* vals - start of first block of values */ void val_out(nc_type type, long len, void *vals) { static char pname[] = "val_oout"; int iel; union { char *cp; short *sp; nclong *lp; float *fp; double *dp; } gp; fprintf(stderr, " "); switch (type) { case NC_BYTE: case NC_CHAR: gp.cp = (char *)vals; for (iel = 0; iel < len; iel++) fprintf(stderr, "%d%s", *gp.cp++, iel < len - 1 ? ", " : ""); break; case NC_SHORT: gp.sp = (short *)vals; for (iel = 0; iel < len; iel++) fprintf(stderr, "%d%s", *gp.sp++, iel < len - 1 ? ", " : ""); break; case NC_LONG: gp.lp = (nclong *)vals; for (iel = 0; iel < len; iel++) fprintf(stderr, "%d%s", (int)*gp.lp++, iel < len - 1 ? ", " : ""); break; case NC_FLOAT: gp.fp = (float *)vals; for (iel = 0; iel < len; iel++) fprintf(stderr, "%g%s", (double)*gp.fp++, iel < len - 1 ? ", " : ""); break; case NC_DOUBLE: gp.dp = (double *)vals; for (iel = 0; iel < len; iel++) fprintf(stderr, "%g%s", *gp.dp++, iel < len - 1 ? ", " : ""); break; default: error("%s: bad type, test program error", pname); } (void)putc('\n', stderr); } hdf4-hdf4.3.1/mfhdf/nctest/val.h000066400000000000000000000015751503061704500163560ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #ifndef NCTEST_VAL_H #define NCTEST_VAL_H #ifdef __cplusplus extern "C" { #endif /* fill typed value block with values of specified type */ extern void val_fill(nc_type, long, void *); /* fill typed value block with zeros of specified type */ extern void val_fill_zero(nc_type, long, void *); /* * compare two typed value blocks, return 0 if equal, 1+n otherwise, * where n is the index of the first differing element. */ extern int val_cmp(nc_type, long, void *, void *); /* print typed value block with values of specified type */ extern void val_out(nc_type, long, void *); #ifdef __cplusplus } #endif #endif /* NCTEST_VAL_H */ hdf4-hdf4.3.1/mfhdf/nctest/vardef.c000066400000000000000000000251011503061704500170250ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" #include "emalloc.h" #define LEN_OF(array) ((sizeof array) / (sizeof array[0])) #define EPS64 ((float64)1.0E-14) #define EPS32 ((float32)1.0E-7) /* * Test ncvardef * check that proper define worked with ncvarinq * check that returned id is one more than previous id * try redefining an existing variable, check error * try adding scalar variable (no dimensions) * try with bad datatype, check error * try with bad number of dimensions, check error * try with bad dimension ids, check error * try in data mode, check error */ /* path - name of writable netcdf file to open */ void test_ncvardef(char *path) { int nerrs = 0; int cdfid; /* netcdf id */ static char pname[] = "test_ncvardef"; int id, iv; static struct cdfvar va[] = {/* variables of all shapes and sizes */ {"bytev", NC_BYTE, 6, ___, 0}, {"charv", NC_CHAR, 5, ___, 0}, {"shortv", NC_SHORT, 4, ___, 0}, {"longv", NC_LONG, 3, ___, 0}, {"floatv", NC_FLOAT, 2, ___, 0}, {"doublev", NC_DOUBLE, 1, ___, 0}, {"scalarv", NC_DOUBLE, 0, ___, 0}}; int nv = LEN_OF(va); /* number of variables to define */ int va_id[LEN_OF(va)]; /* variable ids */ static struct cdfvar tmp = /* variable for testing bad types, etc. */ {"tmpv", NC_DOUBLE, 1, ___, 0}; /* if d5 >= 91 in following, problem on machines with 16-bit ints ??? */ static struct cdfdim di[] = {/* a bunch of dimensions */ {"d0", 2}, {"d1", 3}, {"d2", 5}, {"d3", 6}, {"d4", 4}, {"d5", 31}}; int nd = LEN_OF(di); /* number of dimensions */ int di_id[LEN_OF(di)]; /* dimension ids */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, defining a variable should fail in data mode */ if (ncvardef(cdfid, va[0].name, va[0].type, va[0].ndims, va[0].dims) != -1) { error("%s: ncvardef should have failed in data mode", pname); ncclose(cdfid); return; } /* enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* Add nd more dimensions */ for (id = 0; id < nd; id++) { if ((di_id[id] = ncdimdef(cdfid, di[id].name, di[id].size)) == -1) { error("%s: ncdimdef failed for %s, size %d", pname, di[id].name, di[id].size); ncclose(cdfid); return; } add_dim(test_g, &di[id]); /* keep in-memory netcdf in sync */ } tmp.dims = (int *)emalloc(sizeof(int) * H4_MAX_VAR_DIMS); tmp.name = (char *)emalloc(H4_MAX_NC_NAME); /* in define mode, add variables of each type with various shapes */ for (iv = 0; iv < nv; iv++) { /* set shape to use subset of dimensions previously defined */ va[iv].dims = (int *)emalloc(sizeof(int) * va[iv].ndims); for (id = 0; id < va[iv].ndims; id++) va[iv].dims[id] = di_id[id]; if ((va_id[iv] = ncvardef(cdfid, va[iv].name, va[iv].type, va[iv].ndims, va[iv].dims)) == -1) { error("%s: ncvardef failed", pname); errvar(test_g, &va[iv]); /* prints details about variable */ ncclose(cdfid); return; } add_var(test_g, &va[iv]); /* keep in-memory netcdf in sync */ /* check that var id returned is one more than previous var id */ if (va_id[iv] != test_g->nvars - 1) { error("%s: ncvardef returned %d for var id, expected %d", pname, va_id[iv], test_g->nvars - 1); ncclose(cdfid); return; } /* use ncvarinq to get values just set and compare values */ if (ncvarinq(cdfid, va_id[iv], tmp.name, &tmp.type, &tmp.ndims, tmp.dims, &tmp.natts) == -1) { error("%s: ncvarinq failed", pname); errvar(test_g, &va[iv]); /* prints details about variable */ ncclose(cdfid); return; } if (strcmp(tmp.name, va[iv].name) != 0 || tmp.type != va[iv].type || tmp.ndims != va[iv].ndims || tmp.natts != va[iv].natts) { error("%s: ncvardef and ncvarinq don't agree for %s", pname, va[iv].name); nerrs++; errvar(test_g, &va[iv]); errvar(test_g, &tmp); } for (id = 0; id < va[iv].ndims; id++) { if (tmp.dims[id] != va[iv].dims[id]) { error("%s: ncvardef and ncvarinq don't agree on shape of %s", pname, va[iv].name); nerrs++; errvar(test_g, &va[iv]); errvar(test_g, &tmp); } } } /* try adding same variable again, this should fail */ if (ncvardef(cdfid, va[0].name, va[0].type, va[0].ndims, va[0].dims) != -1) { error("%s: ncvardef should not allow redefinition", pname); ncclose(cdfid); return; } /* try bad type, should fail */ if (ncvardef(cdfid, "badtype", BAD_TYPE, va[0].ndims, va[0].dims) != -1) { error("%s: ncvardef should have failed on bad type", pname); ncclose(cdfid); return; } /* try bad ndims, should fail */ if (ncvardef(cdfid, "badndims", va[0].type, -1, va[0].dims) != -1) { error("%s: ncvardef should have failed on bad ndims", pname); ncclose(cdfid); return; } /* try bad ids in dims vector, should fail */ id = va[0].dims[0]; va[0].dims[va[0].ndims - 1] = -1; if (ncvardef(cdfid, "baddims", va[0].type, va[0].ndims, va[0].dims) != -1) { error("%s: ncvardef should have failed on negative dim id in dims", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* try reading a value of each type, should get appropriate fill value */ for (iv = 0; iv < nv; iv++) { static long where[] = {0, 0, 0, 0, 0, 0}; switch (va[iv].type) { case NC_BYTE: { char val, fillval = FILL_BYTE; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if (val != fillval) { error("%s: unwritten byte not FILL_BYTE", pname); nerrs++; } } else { error("%s: ncvarget1 failure for byte", pname); nerrs++; } } break; case NC_CHAR: { char val, fillval = FILL_CHAR; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if (val != fillval) { error("%s: unwritten char not FILL_CHAR", pname); nerrs++; } } else { error("%s: ncvarget1 failure for char", pname); nerrs++; } } break; case NC_SHORT: { short val, fillval = FILL_SHORT; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if (val != fillval) { error("%s: unwritten short not FILL_SHORT", pname); nerrs++; } } else { error("%s: ncvarget1 failure for short", pname); nerrs++; } } break; case NC_LONG: { nclong val, fillval; val = 0; fillval = 0; fillval = FILL_LONG; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if ((nclong)val != (nclong)fillval) { nclong a, b; printf("\n\n Was expecting %d instead got a %d\n", (int)fillval, (int)val); a = (nclong)val; b = (nclong)fillval; printf("\n\n After cast %d %d\n", (int)a, (int)b); error("%s: unwritten long not FILL_LONG", pname); nerrs++; } } else { error("%s: ncvarget1 failure for long", pname); nerrs++; } } break; case NC_FLOAT: { float val, fillval = FILL_FLOAT; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if (fabs((double)(val - fillval)) > fabs((double)(fillval * EPS32))) { error("%s: unwritten float not FILL_FLOAT", pname); nerrs++; } } else { error("%s: ncvarget1 failure for float", pname); nerrs++; } } break; case NC_DOUBLE: { double val, fillval = FILL_DOUBLE; if (ncvarget1(cdfid, va_id[iv], where, (void *)&val) != -1) { if (fabs((double)(val - fillval)) > fabs((double)(fillval * EPS64))) { error("%s: unwritten double not FILL_DOUBLE", pname); nerrs++; } } else { error("%s: ncvarget1 failure for double", pname); nerrs++; } } break; default: break; } } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } free(tmp.dims); free(tmp.name); for (iv = 0; iv < nv; iv++) free(va[iv].dims); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/varget.c000066400000000000000000000120111503061704500170420ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "error.h" #include "tests.h" #include "emalloc.h" /* * Test ncvarget * check that proper call worked after ncvarput * try with negative coords, edges, check error * try with too-large coords, edges, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarget(char *path) { int nerrs = 0; static char pname[] = "test_ncvarget"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc; /* test hypercube */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting hypercubes of each type */ nerrs += test_varputget(cdfid); /* try putting hypercube and getting various interior slabs */ nerrs += test_slabs(cdfid); /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is varid of variable with dimensions */ int tmp; /* set coords */ int id; /* dimension id */ for (id = 0; id < test_g->vars[iv].ndims; id++) { hc.cor[id] = 0; hc.edg[id] = 1; } /* get space for vals */ hc.vals = emalloc(nctypelen(test_g->vars[iv].type) + 8); id = test_g->vars[iv].ndims - 1; tmp = hc.cor[id]; hc.cor[id] = -1; /* try negative coordinate, should fail */ if (ncvarget(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail for negative corner", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = -1; /* try negative edge, should fail */ if (ncvarget(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail for negative edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; { long mqv = test_g->vars[iv].ndims - 1; int dim = test_g->vars[iv].dims[mqv]; tmp = hc.cor[mqv]; hc.cor[mqv] = test_g->dims[dim].size; /* try big coordinate, should fail */ if (ncvarget(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail for too-high coordinate", pname); ncclose(cdfid); return; } hc.cor[mqv] = tmp; tmp = hc.edg[mqv]; hc.edg[mqv] = test_g->dims[dim].size + 1; /* try big edge, should fail */ if (ncvarget(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail for too-high edge", pname); ncclose(cdfid); return; } hc.edg[mqv] = tmp; } /* mqv block */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (ncvarget(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } } /* try with bad variable handle, should fail */ if (ncvarget(cdfid, -1, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (ncvarget(cdfid, 0, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarget failed to report bad netcdf handle", pname); nerrs++; } free(hc.vals); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/varget_unlim.c000066400000000000000000000106001503061704500202500ustar00rootroot00000000000000/* * This tests uses HDF NetCDF APIs to read the NetCDF file test_unlim.nc * generated with the NetCDF Library v3.5 from test_unlim.cdl */ #include #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "error.h" #include "tests.h" #include "emalloc.h" float a_val[2][3] = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}}; int date_val[12] = {840116, 840214, 840316, 840415, 840516, 840615, 840716, 840816, 840915, 841016, 841115, 841216}; int time_val[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; short b_val[][3][2] = { {{1, 1}, {2, 2}, {3, 3}}, {{4, 4}, {5, 5}, {6, 6}}, {{7, 7}, {8, 8}, {9, 9}}, {{10, 10}, {11, 11}, {12, 12}}, {{13, 13}, {14, 14}, {15, 15}}, {{16, 16}, {17, 17}, {18, 18}}, {{19, 19}, {20, 20}, {21, 22}}, {{23, 23}, {24, 24}, {25, 25}}, {{26, 26}, {27, 27}, {28, 28}}, {{29, 29}, {30, 30}, {31, 31}}, {{32, 32}, {33, 33}, {34, 34}}, {{35, 35}, {36, 36}, {37, 37}}}; /* * Test ncvarget for variables with unlimited dimensions (bug #897) */ /* basefile - name of writable netcdf file to open */ void test_ncvarget_unlim(char *basefile) { int nerrs = 0; static char pname[] = "test_ncvarget_unlim"; char testfile[512]; char *srcdir = getenv("srcdir"); int status; int ncid; int var_id; float a[2][3]; int date[12]; int time[12]; short val[12][3][2]; long start[3], count[3]; int i, j, n; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if (srcdir) { strcpy(testfile, srcdir); if (srcdir[strlen(srcdir) - 1] != '/') strcat(testfile, "/"); } else strcpy(testfile, "./"); strcat(testfile, basefile); if ((ncid = ncopen(testfile, NC_NOWRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* Reading 3D array with unlimited dimension */ var_id = ncvarid(ncid, "b"); start[0] = 0; start[1] = 0; start[2] = 0; count[0] = 12; count[1] = 3; count[2] = 2; if ((status = ncvarget(ncid, var_id, start, count, val)) == -1) { error("%s: ncvarget failed for variable b in ", pname); ncclose(ncid); return; } for (n = 0; n < 12; n++) { for (i = 0; i < 3; i++) { for (j = 0; j < 2; j++) { if (val[n][i][j] != b_val[n][i][j]) { nerrs++; printf(" Wrong value of variable b at index %d,%d,%d\n", n, i, j); } } } } /* Reading 2D array */ var_id = ncvarid(ncid, "a"); start[0] = 0; start[1] = 0; count[0] = 2; count[1] = 3; if ((status = ncvarget(ncid, var_id, start, count, a)) == -1) { error("%s: ncvarget failed for variable a in ", pname); ncclose(ncid); return; } for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { if (!H4_FLT_ABS_EQUAL(a[i][j], a_val[i][j])) { nerrs++; printf(" Wrong value of variable a at index %d,%d\n", i, j); } } } /* Reading 1D array with unlimited dimension */ var_id = ncvarid(ncid, "date"); start[0] = 0; count[0] = 12; if ((status = ncvarget(ncid, var_id, start, count, date)) == -1) { error("%s: ncvarget failed for variable date in ", pname); ncclose(ncid); return; } for (n = 0; n < 12; n++) { if (date[n] != date_val[n]) { nerrs++; printf(" Wrong value of variable date at index %d: %d vs %d\n", n, date[n], date_val[n]); } } /* Reading 1D array with unlimited dimension */ var_id = ncvarid(ncid, "time"); start[0] = 0; count[0] = 12; if ((status = ncvarget(ncid, var_id, start, count, time)) == -1) { error("%s: ncvarget failed varaible time in ", pname); ncclose(ncid); return; } for (n = 0; n < 12; n++) { if (time[n] != time_val[n]) { nerrs++; printf(" Wrong value of variable time at index %d\n", n); } } status = ncclose(ncid); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/vargetg.c000066400000000000000000000120251503061704500172160ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "error.h" #include "tests.h" #include "emalloc.h" /* * Test ncvargetg * check that proper call worked after ncvarputg * try with negative coords, edges, check error * try with non-positive strides, check error * try with too-large coords, edges, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvargetg(char *path) { int nerrs = 0; static char pname[] = "test_ncvargetg"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc; /* test hypercube */ long strides[H4_MAX_VAR_DIMS]; /* external, I/O strides */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting hypercubes of each type */ nerrs += test_varputgetg(cdfid); /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is varid of variable with dimensions */ long tmp; int id; /* dimension id */ /* set coords and strides */ for (id = 0; id < test_g->vars[iv].ndims; id++) { hc.cor[id] = 0; hc.edg[id] = 1; strides[id] = 1; } /* get space for vals */ hc.vals = emalloc(nctypelen(test_g->vars[iv].type) + 8); #define TEST_FAILS(varid) (ncvarputg(cdfid, varid, hc.cor, hc.edg, strides, (long *)NULL, hc.vals) != -1) id = test_g->vars[iv].ndims - 1; tmp = hc.cor[id]; hc.cor[id] = -1; /* try negative coordinate, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail for negative corner", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = -1; /* try negative edge, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail for negative edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; tmp = hc.cor[id]; hc.cor[id] = test_g->dims[id].size; /* try big coordinate, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail for too-high coordinate", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = test_g->dims[id].size + 1; /* try big edge, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail for too-high edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; tmp = strides[id]; strides[id] = -1; /* try non-positive stride, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail for non-positive stride", pname); ncclose(cdfid); return; } strides[id] = tmp; if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvargetg should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } } /* try with bad variable handle, should fail */ if (TEST_FAILS(-1)) { error("%s: ncvargetg should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (TEST_FAILS(0)) { error("%s: ncvargetg failed to report bad netcdf handle", pname); nerrs++; } free(hc.vals); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/varput.c000066400000000000000000000123371503061704500171060ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "val.h" #include "error.h" #include "tests.h" #include "emalloc.h" /* * Test ncvarput * check that proper call worked with ncvarget * try with negative coords, edges, check error * try with too-large coords, edges, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarput(char *path) { int nerrs = 0; static char pname[] = "test_ncvarput"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc; /* test hypercube */ int tmp; int id; /* dimension id */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); /* handle case where struct netcdf test is uninitialised */ hc.cor[0] = 0; hc.edg[0] = 1; hc.vals = 0; if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting hypercubes of each type */ nerrs += test_varputget(cdfid); /* prints messages for discrepencies */ /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is first varid of var with dimensions */ /* set coords */ for (id = 0; id < test_g->vars[iv].ndims; id++) { hc.cor[id] = 0; hc.edg[id] = 1; } /* fill in vals with value of appropriate type */ hc.vals = emalloc(nctypelen(test_g->vars[iv].type)); val_fill(test_g->vars[iv].type, 1, hc.vals); id = test_g->vars[iv].ndims - 1; tmp = hc.cor[id]; hc.cor[id] = -1; /* try negative coordinate, should fail */ if (ncvarput(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail for negative corner", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = -1; /* try negative edge, should fail */ if (ncvarput(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail for negative edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; { long mqv = test_g->vars[iv].ndims - 1; int dim = test_g->vars[iv].dims[mqv]; tmp = hc.cor[mqv]; hc.cor[mqv] = test_g->dims[dim].size; /* try big coordinate, should fail */ if (ncvarput(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail for too-high coordinate", pname); ncclose(cdfid); return; } hc.cor[mqv] = tmp; tmp = hc.edg[mqv]; hc.edg[mqv] = test_g->dims[dim].size + 1; /* try big edge, should fail */ if (ncvarput(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail for too-high edge", pname); ncclose(cdfid); return; } hc.edg[mqv] = tmp; } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (ncvarput(cdfid, iv, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } } else error("\"struct netcdf test\" uninitialized, no tests performed"); /* try with bad variable handle, should fail */ if (ncvarput(cdfid, -1, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (ncvarput(cdfid, 0, hc.cor, hc.edg, hc.vals) != -1) { error("%s: ncvarput failed to report bad netcdf handle", pname); nerrs++; } free(hc.vals); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/varputg.c000066400000000000000000000122561503061704500172550ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "val.h" #include "error.h" #include "tests.h" #include "emalloc.h" /* * Test ncvarputg * check that proper call worked with ncvargetg * try with negative coords, edges, check error * try with too-large coords, edges, check error * try with non-positive strides, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarputg(char *path) { int nerrs = 0; static char pname[] = "test_ncvarputg"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc; /* test hypercube */ long tmp; int id; /* dimension id */ long strides[H4_MAX_VAR_DIMS]; /* external, I/O strides */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting hypercubes of each type. * prints out messages for discrepencies */ nerrs += test_varputgetg(cdfid); /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is first varid of var with dimensions */ /* set coords and strides */ for (id = 0; id < test_g->vars[iv].ndims; id++) { hc.cor[id] = 0; hc.edg[id] = 1; strides[id] = 1; } /* fill in vals with value of appropriate type */ hc.vals = emalloc(nctypelen(test_g->vars[iv].type)); val_fill(test_g->vars[iv].type, 1, hc.vals); #define TEST_FAILS(varid) (ncvarputg(cdfid, varid, hc.cor, hc.edg, strides, (long *)NULL, hc.vals) != -1) id = test_g->vars[iv].ndims - 1; tmp = hc.cor[id]; hc.cor[id] = -1; /* try negative coordinate, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail for negative corner", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = -1; /* try negative edge, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail for negative edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; tmp = hc.cor[id]; hc.cor[id] = test_g->dims[id].size; /* try big coordinate, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail for too-high coordinate", pname); ncclose(cdfid); return; } hc.cor[id] = tmp; tmp = hc.edg[id]; hc.edg[id] = test_g->dims[id].size + 1; /* try big edge, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail for too-high edge", pname); ncclose(cdfid); return; } hc.edg[id] = tmp; tmp = strides[id]; strides[id] = -1; /* try non-positive stride, * should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail for non-positive stride", pname); ncclose(cdfid); return; } strides[id] = tmp; if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (TEST_FAILS(iv)) { error("%s: ncvarputg should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } } /* try with bad variable handle, should fail */ if (TEST_FAILS(-1)) { error("%s: ncvarputg should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (TEST_FAILS(0)) { error("%s: ncvarputg failed to report bad netcdf handle", pname); nerrs++; } free(hc.vals); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/vartests.c000066400000000000000000000602011503061704500174310ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "error.h" #include "tests.h" #include "emalloc.h" #define LEN_OF(array) ((sizeof array) / (sizeof array[0])) #define min(A, B) ((A) < (B) ? (A) : (B)) #define max(A, B) ((A) > (B) ? (A) : (B)) /* * Test ncvarid * check that proper variable handle returned in both modes * try with undefined name, check error * try with bad handle, check error */ /* pathname of writable netcdf file to open */ void test_ncvarid(char *path) { int nerrs = 0; static char pname[] = "test_ncvarid"; int cdfid; /* netcdf id */ int id; int varid; /* variable id */ static struct cdfvar xx = /* variable */ {"xx", NC_FLOAT, 1, ___, 0}; fprintf(stderr, "*** Testing %s ...\t\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, enter define mode */ if (ncredef(cdfid) == -1) { error("%s: cdredef failed", pname); ncclose(cdfid); return; } /* in define mode, add a variable */ xx.dims = (int *)emalloc(sizeof(int) * xx.ndims); for (id = 0; id < xx.ndims; id++) xx.dims[id] = id; if ((varid = ncvardef(cdfid, xx.name, xx.type, xx.ndims, xx.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &xx); /* keep in-memory netcdf in sync */ /* check id returned for name matches id returned from definition */ if (ncvarid(cdfid, xx.name) != varid) { error("%s: ncvarid returned wrong value in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode, check returned id for variable just added */ if (ncvarid(cdfid, xx.name) != varid) { error("%s: ncvarid returned wrong value in data mode", pname); ncclose(cdfid); return; } /* try with undefined variable, should fail */ if (ncvarid(cdfid, "santa-claus") != -1) { error("%s: ncvarid with bogus name should have failed ", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try on bad handle, should fail */ if (ncvarid(cdfid, xx.name) != -1) { error("%s: ncvarid failed to report bad netcdf handle", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncvarinq * try in both modes * check returned values against defined values * try with bad variable handle, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarinq(char *path) { int nerrs = 0; static char pname[] = "test_ncvarinq"; int cdfid; /* netcdf id */ int varid; /* variable id */ struct cdfvar var; /* variable */ int idim; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened, in data mode */ var.dims = (int *)emalloc(sizeof(int) * H4_MAX_VAR_DIMS); var.name = (char *)emalloc(H4_MAX_NC_NAME); for (varid = 0; varid < test_g->nvars; varid++) { /* loop on all var ids */ if (ncvarinq(cdfid, varid, var.name, &var.type, &var.ndims, var.dims, &var.natts) == -1) { error("%s: ncvarinq in data mode failed on var id %d", pname, varid); ncclose(cdfid); return; } /* compare returned with expected values */ if (strcmp(var.name, test_g->vars[varid].name) != 0) { error("%s: ncvarinq (data mode), name %s, expected %s for id = %d", pname, var.name, test_g->vars[varid].name, varid); nerrs++; } if (var.type != test_g->vars[varid].type) { error("%s: ncvarinq (data mode), type %d, expected %d for id = %d", pname, var.type, test_g->vars[varid].type, varid); nerrs++; } if (var.ndims != test_g->vars[varid].ndims) { error("%s: ncvarinq (data mode), ndims %d, expected %d for id = %d", pname, var.ndims, test_g->vars[varid].ndims, varid); nerrs++; } else { /* if ndims OK, compare dims */ for (idim = 0; idim < var.ndims; idim++) if (var.dims[idim] != test_g->vars[varid].dims[idim]) { error("%s: ncvarinq (data mode), dims[%d]=%d, expected %d", pname, idim, var.dims[idim], test_g->vars[varid].dims[idim]); nerrs++; } } } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, compare returned with expected values again */ for (varid = 0; varid < test_g->nvars; varid++) { /* loop on all var ids */ if (ncvarinq(cdfid, varid, var.name, &var.type, &var.ndims, var.dims, &var.natts) == -1) { error("%s: ncvarinq in data mode failed on var id %d", pname, varid); ncclose(cdfid); return; } if (strcmp(var.name, test_g->vars[varid].name) != 0) { error("%s: ncvarinq (define mode), name %s, expected %s for id = %d", pname, var.name, test_g->vars[varid].name, varid); nerrs++; } if (var.type != test_g->vars[varid].type) { error("%s: ncvarinq (define mode), type %d, expected %d for id = %d", pname, var.type, test_g->vars[varid].type, varid); nerrs++; } if (var.ndims != test_g->vars[varid].ndims) { error("%s: ncvarinq (define mode), ndims %d, expected %d for id = %d", pname, var.ndims, test_g->vars[varid].ndims, varid); nerrs++; } else { /* if ndims OK, compare dims */ for (idim = 0; idim < var.ndims; idim++) if (var.dims[idim] != test_g->vars[varid].dims[idim]) { error("%s: ncvarinq (define mode), dims[%d]=%d, expected %d", pname, idim, var.dims[idim], test_g->vars[varid].dims[idim]); nerrs++; } } } /* try with bad variable handles, check for failure */ if (ncvarinq(cdfid, -1, var.name, &var.type, &var.ndims, var.dims, &var.natts) != -1 || ncvarinq(cdfid, test_g->nvars, var.name, &var.type, &var.ndims, var.dims, &var.natts) != -1) { error("%s: ncvarinq should have failed on bad variable ids", pname, varid); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (test_g->nvars >= 1) { /* if any variables have been defined */ if (ncvarinq(cdfid, varid, var.name, &var.type, &var.ndims, var.dims, &var.natts) != -1) { error("%s: ncvarinq failed to report bad netcdf handle ", pname); nerrs++; } } free(var.dims); free(var.name); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } struct cdfelm { /* coordinates and generic value */ long coords[H4_MAX_VAR_DIMS]; union generic { char by; char ch; short sh; nclong lo; float fl; double db; } val; }; /* * Test both ncvarput1 and ncvarget1 with all types of data * use points in "lower-left", "middle", and "upper-right" * for each existing variable, put values of its type at each point * get values and compare with put values */ /* cdfid - handle of netcdf open and in data mode */ static int test_varputget1(int cdfid) { int nerrs = 0; static char pname[] = "test_varputget1"; int id, ie, iv; int ne = 3; /* number of test points */ struct cdfelm elm[3]; /* coordinates and values of test points */ static long edges[] = {1}; void *voidp = NULL; void *tmpp = NULL; char chval; short shval; nclong loval; float flval; double dbval; for (iv = 0; iv < test_g->nvars; iv++) { /* for each var in netcdf */ for (id = 0; id < test_g->vars[iv].ndims; id++) { /* set corners */ int dsize; /* max dimension size, used for u-r corner */ /* "lower-left" corner */ elm[0].coords[id] = 0; /* if unlimited dimension, choose record 3 for max, arbitrarily */ dsize = test_g->dims[test_g->vars[iv].dims[id]].size; if (dsize == NC_UNLIMITED) dsize = 3; /* middle */ elm[1].coords[id] = dsize / 2; /* "upper-right" corner */ elm[2].coords[id] = dsize - 1; } for (ie = 0; ie < ne; ie++) { /* for each of ne points */ switch (test_g->vars[iv].type) { /* get values of right type to put */ case NC_BYTE: case NC_CHAR: elm[ie].val.by = (char)(ie + 1); voidp = (void *)&elm[ie].val.by; tmpp = (void *)&chval; break; case NC_SHORT: elm[ie].val.sh = (short)(ie - 1); voidp = (void *)&elm[ie].val.sh; tmpp = (void *)&shval; break; case NC_LONG: elm[ie].val.lo = (nclong)(ie - 3); voidp = (void *)&elm[ie].val.lo; tmpp = (void *)&loval; break; case NC_FLOAT: elm[ie].val.fl = (float)(ie + 1); voidp = (void *)&elm[ie].val.fl; tmpp = (void *)&flval; break; case NC_DOUBLE: elm[ie].val.db = (double)(ie - 1); voidp = (void *)&elm[ie].val.db; tmpp = (void *)&dbval; break; default: error("%s: bad type, test program error", pname); } if (ncvarput1(cdfid, iv, elm[ie].coords, voidp) == -1) { error("%s: ncvarput1 failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); ncclose(cdfid); return 1; } add_data(test_g, iv, elm[ie].coords, edges); /* keep test in sync */ if (ncvarget1(cdfid, iv, elm[ie].coords, tmpp) == -1) { error("%s: ncvarget1 failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); ncclose(cdfid); return 1; } switch (test_g->vars[iv].type) { /* compare values of right type */ case NC_BYTE: case NC_CHAR: if (elm[ie].val.by != chval) { error("%s: ncvarget1 returned char %d, expected %d", pname, chval, elm[ie].val.by); nerrs++; } break; case NC_SHORT: if (elm[ie].val.sh != shval) { error("%s: ncvarget1 returned short %d, expected %d", pname, shval, elm[ie].val.sh); nerrs++; } break; case NC_LONG: if (elm[ie].val.lo != loval) { error("%s: ncvarget1 returned long %ld, expected %d", pname, loval, elm[ie].val.lo); nerrs++; } break; case NC_FLOAT: if (!H4_FLT_ABS_EQUAL(elm[ie].val.fl, flval)) { error("%s: ncvarget1 returned float %g, expected %g", pname, (double)flval, (double)elm[ie].val.fl); nerrs++; } break; case NC_DOUBLE: if (!H4_DBL_ABS_EQUAL(elm[ie].val.db, dbval)) { error("%s: ncvarget1 returned double %g, expected %g", pname, dbval, elm[ie].val.db); nerrs++; } break; default: error("%s: bad type, test program error", pname); } } } return nerrs; } /* * Test ncvarput1 * check that proper call worked with ncvarget1 * try with negative coords, check error * try with too-large coords, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarput1(char *path) { int nerrs = 0; static char pname[] = "test_ncvarput1"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfelm elm; /* coordinates and value of test point */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting values of each type */ nerrs += test_varputget1(cdfid); /* tests ncvarput1 and ncvarget1 */ /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is varid of variable with dimensions */ /* set coords */ int id; /* dimension id */ for (id = 0; id < test_g->vars[iv].ndims; id++) elm.coords[id] = 0; /* try invalid coordinates, should fail */ elm.coords[test_g->vars[iv].ndims / 2] = -1; if (ncvarput1(cdfid, iv, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarput1 should fail for negative coordinate", pname); ncclose(cdfid); return; } elm.coords[test_g->vars[iv].ndims / 2] = test_g->dims[test_g->vars[iv].dims[test_g->vars[iv].ndims / 2]].size; if (ncvarput1(cdfid, iv, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarput1 should fail for too-high coordinate", pname); ncclose(cdfid); return; } } /* try with bad variable handle, should fail */ if (ncvarput1(cdfid, -1, elm.coords, (void *)&elm.val) != -1 || ncvarput1(cdfid, test_g->nvars, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarput1 should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (test_g->nvars > 0) if (ncvarput1(cdfid, 0, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarput1 should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (ncvarput1(cdfid, 0, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarput1 failed to report bad netcdf handle", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncvarget1 * check that proper call worked after ncvarput1 * try with negative coords, check error * try with too-large coords, check error * try with bad variable handle, check error * try in define mode, check error * try with bad netCDF handle, check error */ /* path - name of writable netcdf file to open */ void test_ncvarget1(char *path) { int nerrs = 0; static char pname[] = "test_ncvarget1"; int cdfid; /* netcdf id */ int iv; /* variable id */ struct cdfelm elm; /* coordinates and value of test point */ fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened in data mode, try putting and getting values of each type */ nerrs += test_varputget1(cdfid); /* tests ncvarput1 and ncvarget1 */ /* find a variable with at least one dimension */ iv = 0; while (test_g->vars[iv].ndims <= 0 && iv < test_g->nvars) iv++; if (iv < test_g->nvars) { /* iv is varid of variable with dimensions */ /* set coords */ int id; /* dimension id */ for (id = 0; id < test_g->vars[iv].ndims; id++) elm.coords[id] = 0; /* try invalid coordinates, should fail */ elm.coords[test_g->vars[iv].ndims / 2] = -1; if (ncvarget1(cdfid, iv, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarget1 should fail for negative coordinate", pname); ncclose(cdfid); return; } elm.coords[test_g->vars[iv].ndims / 2] = test_g->dims[test_g->vars[iv].dims[test_g->vars[iv].ndims / 2]].size; if (ncvarget1(cdfid, iv, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarget1 should fail for too-high coordinate", pname); ncclose(cdfid); return; } } /* try with bad variable handle, should fail */ if (ncvarget1(cdfid, -1, elm.coords, (void *)&elm.val) != -1 || ncvarget1(cdfid, test_g->nvars, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarget1 should fail for bad variable handle", pname); ncclose(cdfid); return; } if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* try in define mode, should fail */ if (test_g->nvars > 0) if (ncvarget1(cdfid, 0, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarget1 should fail in define mode", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* try with bad netCDF handle, should fail */ if (ncvarget1(cdfid, 0, elm.coords, (void *)&elm.val) != -1) { error("%s: ncvarget1 failed to report bad netcdf handle", pname); nerrs++; } if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } /* * Test ncvarrename * check that proper rename worked with ncvarinq * try with bad netCDF handle, check error * try in data mode, check error * try with bad variable handle, check error * try renaming to existing variable name, check error */ /* path - name of writable netcdf file to open */ void test_ncvarrename(char *path) { int nerrs = 0; static char pname[] = "test_ncvarrename"; int cdfid; /* netcdf id */ int id; /* dimension id */ int yy_id; /* variable id */ static struct cdfvar yy = /* variable */ {"old_name", NC_SHORT, 1, ___, 0}; static char newname[] = "yyy"; /* variable name */ static char shortname[] = "yy"; /* variable name */ struct cdfvar var; /* variable */ static struct cdfvar zz = /* variable */ {"zz", NC_BYTE, 2, ___, 0}; fprintf(stderr, "*** Testing %s ...\t", &pname[5]); if ((cdfid = ncopen(path, NC_WRITE)) == -1) { error("%s: ncopen failed", pname); return; } /* opened */ if (ncredef(cdfid) == -1) { error("%s: ncredef failed", pname); ncclose(cdfid); return; } /* in define mode, add two variables */ yy.dims = (int *)emalloc(sizeof(int) * yy.ndims); for (id = 0; id < yy.ndims; id++) yy.dims[id] = id; if ((yy_id = ncvardef(cdfid, yy.name, yy.type, yy.ndims, yy.dims)) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &yy); /* keep in-memory netcdf in sync */ zz.dims = (int *)emalloc(sizeof(int) * zz.ndims); for (id = 0; id < zz.ndims; id++) zz.dims[id] = id; if (ncvardef(cdfid, zz.name, zz.type, zz.ndims, zz.dims) == -1) { error("%s: ncvardef failed", pname); ncclose(cdfid); return; } add_var(test_g, &zz); /* keep in-memory netcdf in sync */ /* rename first variable */ if (ncvarrename(cdfid, yy_id, newname) == -1) { error("%s: ncvarrename failed", pname); ncclose(cdfid); return; } /* check new name with ncvarid, ncvarinq */ if (yy_id != ncvarid(cdfid, newname)) { error("%s: lookup by name failed after ncvarrename", pname); } var.dims = (int *)emalloc(sizeof(int) * H4_MAX_VAR_DIMS); var.name = (char *)emalloc(H4_MAX_NC_NAME); if (ncvarinq(cdfid, yy_id, var.name, &var.type, &var.ndims, var.dims, &var.natts) == -1) { error("%s: ncvarinq failed", pname); ncclose(cdfid); return; } if (strcmp(var.name, yy.name) == 0) { error("%s: ncvarrename failed to change name", pname); ncclose(cdfid); return; } if (strcmp(var.name, newname) != 0) { error("%s: ncvarrename changed name to %s instead of %s", pname, var.name, newname); ncclose(cdfid); return; } (void)strcpy(test_g->vars[yy_id].name, newname); /* keep test consistent */ /* try to rename second variable same as first, should fail */ if (ncvarrename(cdfid, yy_id, zz.name) != -1) { error("%s: ncvarrename should have failed with used name", pname); ncclose(cdfid); return; } /* try with bad variable handles, check for failure */ if (ncvarrename(cdfid, -1, var.name) != -1 || ncvarrename(cdfid, test_g->nvars, var.name) != -1) { error("%s: ncvarrename should have failed on bad variable ids", pname); ncclose(cdfid); return; } if (ncendef(cdfid) == -1) { error("%s: ncendef failed", pname); ncclose(cdfid); return; } /* in data mode */ if (ncvarrename(cdfid, yy_id, "a_longer_name") != -1) { error("%s: ncvarrename to longer should fail in data mode", pname); ncclose(cdfid); return; } if (ncvarrename(cdfid, yy_id, shortname) == -1) { error("%s: ncvarrename to shorter should succeed in data mode", pname); ncclose(cdfid); return; } (void)strcpy(test_g->vars[yy_id].name, shortname); /* keep test consistent */ if (ncclose(cdfid) == -1) { error("%s: ncclose failed", pname); return; } /* should fail, since bad handle */ if (ncvarrename(cdfid, 0, var.name) != -1) { error("%s: ncvarrename failed to report bad netcdf handle ", pname); nerrs++; } free(var.name); free(var.dims); if (nerrs > 0) fprintf(stderr, "FAILED! ***\n"); else fprintf(stderr, "ok ***\n"); } hdf4-hdf4.3.1/mfhdf/nctest/vputget.c000066400000000000000000000117121503061704500172570ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "val.h" #include "error.h" #include "tests.h" #include "emalloc.h" #define max(A, B) ((A) > (B) ? (A) : (B)) /* * For every variable in open netcdf, puts and gets three hypercubes * of data of the appropriate type, comparing values from get to * values put to check that both ncvarput and ncvarget worked. The * three hypercubes are * - a large hypercube from (0, 0, ...) to the far corner (diagonally * opposite (0, 0, ...), * - a size 1 hypercube from the far corner with edge lengths of 1 * in every direction, and * - a hypercube starting about 1/3 of the way along the diagonal * from (0,0,...) extending 1/3 of the way in every direction * toward the far corner. */ /* cdfid - handle of netcdf open and in data mode */ int test_varputget(int cdfid) { int nerrs = 0; static char pname[] = "test_varputget"; int id, ie, iv; /* loop indices */ int ne = 3; /* number of test hypercubes for each var */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc[3], tmp; /* test hypercubes */ int nel[3]; /* number of elements in hypercube */ for (iv = 0; iv < test_g->nvars; iv++) { /* for each var in netcdf */ for (ie = 0; ie < ne; ie++) nel[ie] = 1; /* to compute space for hypercube values */ for (id = 0; id < test_g->vars[iv].ndims; id++) { /* set cubes */ /* max dimension size, 5 for records */ int dsize = test_g->dims[test_g->vars[iv].dims[id]].size; if (dsize == NC_UNLIMITED) dsize = 5; /* start at "lower-left" corner, do whole variable */ hc[0].cor[id] = 0; hc[0].edg[id] = dsize; nel[0] *= hc[0].edg[id]; /* start at "upper-right" corner, do one point */ hc[1].cor[id] = dsize - 1; hc[1].edg[id] = 1; nel[1] *= hc[1].edg[id]; /* start about 1/3 way along diagonal, do 1/3 in each direction */ hc[2].cor[id] = dsize / 3; hc[2].edg[id] = max(dsize / 3, 1); nel[2] *= hc[2].edg[id]; } for (ie = 0; ie < ne; ie++) { /* for each of ne points */ /* allocate space for the cube of values */ hc[ie].vals = emalloc(nel[ie] * nctypelen(test_g->vars[iv].type) + 8); tmp.vals = emalloc(nel[ie] * nctypelen(test_g->vars[iv].type) + 8); /* fill allocated space with different values of right type */ val_fill(test_g->vars[iv].type, nel[ie], hc[ie].vals); if (ncvarput(cdfid, iv, hc[ie].cor, hc[ie].edg, hc[ie].vals) == -1) { error("%s: ncvarput failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); nerrs++; errvar(test_g, &test_g->vars[iv]); fprintf(stderr, " corner = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)hc[ie].cor[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); fprintf(stderr, " edge = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)hc[ie].edg[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); } else { add_data(test_g, iv, hc[ie].cor, hc[ie].edg); /* keep test in sync */ if (ncvarget(cdfid, iv, hc[ie].cor, hc[ie].edg, tmp.vals) == -1) { error("%s: ncvarget failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); nerrs++; } else { if (val_cmp(test_g->vars[iv].type, nel[ie], hc[ie].vals, tmp.vals) != 0) { error("%s: bad values returned from ncvarget", pname); nerrs++; errvar(test_g, &test_g->vars[iv]); /* describe var */ } } } free(hc[ie].vals); free(tmp.vals); } } return nerrs; } hdf4-hdf4.3.1/mfhdf/nctest/vputgetg.c000066400000000000000000000161141503061704500174270ustar00rootroot00000000000000/********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. *********************************************************************/ #include #include #include "hdf.h" #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #include "testcdf.h" /* defines in-memory test cdf structure */ #include "add.h" /* functions to update in-memory netcdf */ #include "val.h" #include "error.h" #include "tests.h" #include "emalloc.h" #define max(A, B) ((A) > (B) ? (A) : (B)) /* * For every variable in open netcdf, puts and gets three hypercubes * of data of the appropriate type, comparing values from get to * values put to check that both ncvarputg and ncvargetg worked. The * three hypercubes are * - a large hypercube from (0, 0, ...) to the far corner (diagonally * opposite (0, 0, ...), * - a size 1 hypercube from the far corner with edge lengths of 1 * in every direction, and * - a hypercube starting about 1/3 of the way along the diagonal * from (0,0,...) extending 1/3 of the way in every direction * toward the far corner. */ /* cdfid - handle of netcdf open and in data mode */ int test_varputgetg(int cdfid) { int nerrs = 0; static char pname[] = "test_varputgetg"; int id, ie, iv; /* loop indices */ int ne = 3; /* number of test hypercubes for each var */ struct cdfhc { /* a hypercube with generic values */ long cor[H4_MAX_VAR_DIMS]; /* netcdf coordinates for lower corner */ long edg[H4_MAX_VAR_DIMS]; /* netcdf edge lengths to upper corner */ void *vals; /* pointer to block of values */ } hc[3], tmp; /* test hypercubes */ long nel[3]; /* number of elements in hypercube */ long strides[H4_MAX_VAR_DIMS]; /* external strides */ long basis[H4_MAX_VAR_DIMS]; /* internal array, element-access basis vector */ for (iv = 0; iv < test_g->nvars; iv++) { /* for each var in netcdf */ long tmpbasis; for (ie = 0; ie < ne; ie++) nel[ie] = 1; /* to compute space for hypercube values */ /* * The following macro returns the size of a dimension for a * variable with a maximum dimension size of 5 for the record * dimension. */ #define EXTNPTS(varid, idim) \ (test_g->dims[test_g->vars[varid].dims[id]].size == NC_UNLIMITED \ ? 5 \ : test_g->dims[test_g->vars[varid].dims[id]].size) #define STRIDE(idim) (idim + 2) #define INTNPTS(extnpts, idim) (1 + (extnpts - 1) / STRIDE(idim)) for (id = 0; id < test_g->vars[iv].ndims; id++) { /* set cubes */ strides[id] = STRIDE(id); /* start at "lower-left" corner, do whole variable */ hc[0].cor[id] = 0; hc[0].edg[id] = INTNPTS(EXTNPTS(iv, id), id); nel[0] *= hc[0].edg[id]; /* start at "upper-right" corner, do one point */ hc[1].cor[id] = EXTNPTS(iv, id) - 1; hc[1].edg[id] = 1; nel[1] *= hc[1].edg[id]; /* start about 1/3 way along diagonal, do 1/3 in each direction */ hc[2].cor[id] = EXTNPTS(iv, id) / 3; hc[2].edg[id] = INTNPTS(max(EXTNPTS(iv, id) / 3, 1), id); nel[2] *= hc[2].edg[id]; } for (ie = 0; ie < ne; ie++) { /* for each of ne points */ int nelms = nel[ie] * nctypelen(test_g->vars[iv].type) + 8; /* allocate space for the cube of values */ hc[ie].vals = emalloc(nelms); tmp.vals = emalloc(nelms); /* fill allocated space with different values of right type */ val_fill(test_g->vars[iv].type, nel[ie], hc[ie].vals); /* * Set internal-array element-access basis vector to be negative * of natural storage so as to access the elements of the array * backwards. */ tmpbasis = nctypelen(test_g->vars[iv].type); for (id = test_g->vars[iv].ndims - 1; id >= 0; --id) { basis[id] = -tmpbasis; tmpbasis *= hc[ie].edg[id]; } if (ncvarputg(cdfid, iv, hc[ie].cor, hc[ie].edg, strides, basis, (char *)hc[ie].vals + (nel[ie] - 1) * nctypelen(test_g->vars[iv].type)) == -1) { error("%s: ncvarputg failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); nerrs++; errvar(test_g, &test_g->vars[iv]); fprintf(stderr, " corner = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)hc[ie].cor[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); fprintf(stderr, " edge = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)hc[ie].edg[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); fprintf(stderr, " external strides = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)strides[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); fprintf(stderr, " internal basis vector = ("); for (id = 0; id < test_g->vars[iv].ndims; id++) fprintf(stderr, "%d%s", (int)basis[id], (id < test_g->vars[iv].ndims - 1) ? ", " : ""); fprintf(stderr, ")\n"); } else { long dsize[H4_MAX_VAR_DIMS]; for (id = 0; id < test_g->vars[iv].ndims; id++) dsize[id] = EXTNPTS(iv, id); add_data(test_g, iv, hc[ie].cor, dsize); /* keep test in sync */ if (ncvargetg(cdfid, iv, hc[ie].cor, hc[ie].edg, strides, basis, (char *)tmp.vals + (nel[ie] - 1) * nctypelen(test_g->vars[iv].type)) == -1) { error("%s: ncvargetg failed for point %d, variable %s", pname, ie, test_g->vars[iv].name); nerrs++; } else { if (val_cmp(test_g->vars[iv].type, nel[ie], hc[ie].vals, tmp.vals) != 0) { error("%s: bad values returned from ncvargetg", pname); nerrs++; errvar(test_g, &test_g->vars[iv]); /* describe var */ } } } free(hc[ie].vals); free(tmp.vals); } } return nerrs; } hdf4-hdf4.3.1/mfhdf/test/000077500000000000000000000000001503061704500150725ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/test/CMakeLists.txt000066400000000000000000000060741503061704500176410ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.18) project (HDF4_MFHDF_TEST C) #----------------------------------------------------------------------------- # Generate the srcdir_str.h file #----------------------------------------------------------------------------- set (srcdir ${HDF4_MFHDF_TEST_SOURCE_DIR}) configure_file (${HDF4_MFHDF_TEST_SOURCE_DIR}/srcdir_str.h.in srcdir_str.h @ONLY) set (hdftest_SRCS ${HDF4_MFHDF_TEST_SOURCE_DIR}/hdftest.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tchunk.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tcomp.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tcoordvar.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tdim.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/temptySDSs.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tattributes.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tfile.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tmixed_apis.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tnetcdf.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/trank0.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tsd.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tsdsprops.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tszip.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tattdatainfo.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tdatainfo.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tdatasizes.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/texternal.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tutils.c ) #-- Adding test for hdftest add_executable (hdftest ${hdftest_SRCS}) target_include_directories(hdftest PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_COMP_INCLUDE_DIRECTORIES};${HDF4_BINARY_DIR};${CMAKE_CURRENT_BINARY_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (hdftest STATIC) target_link_libraries (hdftest PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdftest SHARED) target_link_libraries (hdftest PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (hdftest PROPERTIES FOLDER test COMPILE_DEFINITIONS "HDF") #-- Adding test for cdftest add_executable (cdftest ${HDF4_MFHDF_TEST_SOURCE_DIR}/cdftest.c) target_include_directories(cdftest PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (cdftest STATIC) target_link_libraries (cdftest PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (cdftest SHARED) target_link_libraries (cdftest PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (cdftest PROPERTIES FOLDER test COMPILE_DEFINITIONS "HDF") #-- Adding test for hdfnctest set (hdfnctest_SRCS ${HDF4_MFHDF_TEST_SOURCE_DIR}/hdfnctest.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tunlim.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tncunlim.c ${HDF4_MFHDF_TEST_SOURCE_DIR}/tncvargetfill.c ) add_executable (hdfnctest ${hdfnctest_SRCS}) target_include_directories(hdfnctest PRIVATE "${HDF4_HDFSOURCE_DIR};${HDF4_MFHDFSOURCE_DIR};${HDF4_BINARY_DIR}") if (NOT BUILD_SHARED_LIBS) TARGET_C_PROPERTIES (hdfnctest STATIC) target_link_libraries (hdfnctest PRIVATE ${HDF4_MF_LIB_TARGET}) else () TARGET_C_PROPERTIES (hdfnctest SHARED) target_link_libraries (hdfnctest PRIVATE ${HDF4_MF_LIBSH_TARGET}) endif () set_target_properties (hdfnctest PROPERTIES FOLDER test COMPILE_DEFINITIONS "HDF") include (CMakeTests.cmake) hdf4-hdf4.3.1/mfhdf/test/CMakeTests.cmake000066400000000000000000000103151503061704500200770ustar00rootroot00000000000000 ############################################################################## ############################################################################## ### T E S T I N G ### ############################################################################## ############################################################################## file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/TEST") #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE_TEST_FILES sds_szipped.dat smallslice.0000.nc test1.nc Roy.nc Roy-64.nc ) #-- Copy all the dat files from the test directory into the source directory set (HDF4_REFERENCE2_TEST_FILES testout.sav ) foreach (h4_file ${HDF4_REFERENCE_TEST_FILES} ${HDF4_REFERENCE2_TEST_FILES}) HDFTEST_COPY_FILE("${HDF4_MFHDF_TEST_DIR}/${h4_file}" "${PROJECT_BINARY_DIR}/TEST/${h4_file}" "mfhdf_test_files") endforeach () add_custom_target(mfhdf_test_files ALL COMMENT "Copying files needed by mfhdf tests" DEPENDS ${mfhdf_test_files_list}) ############################################################################## ############################################################################## ### T H E T E S T S ### ############################################################################## ############################################################################## # Remove any output file left over from previous test run set (HDF4_TESTMFHDF_FILES b150.hdf bug376.hdf cdfout.new cdfout.new.err chkbit.hdf chktst.hdf comptst1.hdf comptst2.hdf comptst3.hdf comptst4.hdf comptst5.hdf comptst6.hdf comptst7.hdf datainfo_chk.hdf datainfo_chkcmp.hdf datainfo_cmp.hdf datainfo_extend.hdf datainfo_nodata.hdf datainfo_simple.hdf datasizes.hdf dim.hdf emptySDSs.hdf extfile.hdf exttst.hdf idtypes.hdf multidimvar.nc nbit.hdf onedimmultivars.nc onedimonevar.nc scaletst.hdf sds1_dim1_samename.hdf sds2_dim1_samename.hdf SDS_8_sziped.hdf SDS_16_sziped.hdf SDS_32_sziped.hdf sds_compressed.hdf SD_externals SDS_fl32_sziped.hdf SDS_fl64_sziped.hdf sds_szipped.hdf SDSchunkedsziped.hdf SDSchunkedsziped3d.hdf SDSlongname.hdf SDSunlimitedsziped.hdf test.cdf test1.hdf test2.hdf test_arguments.hdf 'This file name has quite a few characters because it is used to test the fix of bugzilla 1331. It has to be at least this long to see.' Unlim_dim.hdf Unlim_inloop.hdf vars_samename.hdf tdfanndg.hdf tdfansdg.hdf ) add_test ( NAME MFHDF_TEST-clearall-objects COMMAND ${CMAKE_COMMAND} -E remove ${HDF4_TESTMFHDF_FILES} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST ) set_tests_properties (MFHDF_TEST-clearall-objects PROPERTIES FIXTURES_SETUP clear_MFHDF_TEST) add_test (NAME MFHDF_TEST-hdftest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (passRegex "HDF-SD test passes") set_tests_properties (MFHDF_TEST-hdftest PROPERTIES PASS_REGULAR_EXPRESSION "${passRegex}" FIXTURES_REQUIRED clear_MFHDF_TEST WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST LABELS ${PROJECT_NAME} ) add_test ( NAME MFHDF_TEST-cdftest COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/TEST" -D "TEST_OUTPUT=cdfout.new" -D "TEST_EXPECT=0" -D "TEST_REFERENCE=testout.sav" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) set_tests_properties (MFHDF_TEST-cdftest PROPERTIES FIXTURES_REQUIRED clear_MFHDF_TEST DEPENDS MFHDF_TEST-hdftest WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/TEST LABELS ${PROJECT_NAME} ) add_test (NAME MFHDF_TEST-hdfnctest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) set (NCpassRegex "HDF-nc test passes") set_tests_properties (MFHDF_TEST-hdfnctest PROPERTIES PASS_REGULAR_EXPRESSION "${NCpassRegex}" FIXTURES_REQUIRED clear_MFHDF_TEST DEPENDS MFHDF_TEST-cdftest LABELS ${PROJECT_NAME} ) hdf4-hdf4.3.1/mfhdf/test/Makefile.am000066400000000000000000000034551503061704500171350ustar00rootroot00000000000000############################################################################# ## Setup for building programs ## ############################################################################# include $(top_srcdir)/config/commence.am ## Setup the different includes and preprocessor #defines we need. test_INCLUDES=-I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES=-DHDF AM_CPPFLAGS=$(test_INCLUDES) $(DEFINES) ############################################################################# ## Testing ## ############################################################################# TEST_PROG = cdftest hdfnctest hdftest TEST_SCRIPT = testmfhdf.sh check_PROGRAMS = cdftest hdfnctest hdftest check_SCRIPTS = testmfhdf.sh cdftest_SOURCES = cdftest.c cdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdfnctest_SOURCES = hdfnctest.c tutils.c tncvargetfill.c tunlim.c \ tncunlim.c hdfnctest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest_SOURCES = hdftest.c tutils.c tchunk.c tcomp.c tcoordvar.c \ tdim.c temptySDSs.c tattributes.c texternal.c tfile.c \ tmixed_apis.c tnetcdf.c trank0.c tsd.c tsdsprops.c \ tszip.c tattdatainfo.c tdatainfo.c tdatasizes.c hdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ ############################################################################# ## And the cleanup ## ############################################################################# CHECK_CLEANFILES += *.new *.hdf *.cdf *.cdl netcdf.h This* onedimmultivars.nc \ onedimonevar.nc multidimvar.nc SD_externals DISTCLEANFILES = include $(top_srcdir)/config/conclude.am hdf4-hdf4.3.1/mfhdf/test/Makefile.in000066400000000000000000001411031503061704500171370ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ check_PROGRAMS = cdftest$(EXEEXT) hdfnctest$(EXEEXT) hdftest$(EXEEXT) TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT) subdir = mfhdf/test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_class.m4 \ $(top_srcdir)/m4/ax_check_classpath.m4 \ $(top_srcdir)/m4/ax_check_java_home.m4 \ $(top_srcdir)/m4/ax_check_junit.m4 \ $(top_srcdir)/m4/ax_java_options.m4 \ $(top_srcdir)/m4/ax_jni_include_dir.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/ax_prog_jar.m4 \ $(top_srcdir)/m4/ax_prog_java.m4 \ $(top_srcdir)/m4/ax_prog_java_works.m4 \ $(top_srcdir)/m4/ax_prog_javac.m4 \ $(top_srcdir)/m4/ax_prog_javac_works.m4 \ $(top_srcdir)/m4/ax_prog_javadoc.m4 \ $(top_srcdir)/m4/ax_try_compile_java.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/hdf/src/h4config.h CONFIG_CLEAN_FILES = srcdir_str.h testmfhdf.sh CONFIG_CLEAN_VPATH_FILES = am_cdftest_OBJECTS = cdftest.$(OBJEXT) cdftest_OBJECTS = $(am_cdftest_OBJECTS) cdftest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_hdfnctest_OBJECTS = hdfnctest.$(OBJEXT) tutils.$(OBJEXT) \ tncvargetfill.$(OBJEXT) tunlim.$(OBJEXT) tncunlim.$(OBJEXT) hdfnctest_OBJECTS = $(am_hdfnctest_OBJECTS) hdfnctest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) am_hdftest_OBJECTS = hdftest.$(OBJEXT) tutils.$(OBJEXT) \ tchunk.$(OBJEXT) tcomp.$(OBJEXT) tcoordvar.$(OBJEXT) \ tdim.$(OBJEXT) temptySDSs.$(OBJEXT) tattributes.$(OBJEXT) \ texternal.$(OBJEXT) tfile.$(OBJEXT) tmixed_apis.$(OBJEXT) \ tnetcdf.$(OBJEXT) trank0.$(OBJEXT) tsd.$(OBJEXT) \ tsdsprops.$(OBJEXT) tszip.$(OBJEXT) tattdatainfo.$(OBJEXT) \ tdatainfo.$(OBJEXT) tdatasizes.$(OBJEXT) hdftest_OBJECTS = $(am_hdftest_OBJECTS) hdftest_DEPENDENCIES = $(LIBMFHDF) $(LIBHDF) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/hdf/src depcomp = $(SHELL) $(top_srcdir)/bin/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cdftest.Po ./$(DEPDIR)/hdfnctest.Po \ ./$(DEPDIR)/hdftest.Po ./$(DEPDIR)/tattdatainfo.Po \ ./$(DEPDIR)/tattributes.Po ./$(DEPDIR)/tchunk.Po \ ./$(DEPDIR)/tcomp.Po ./$(DEPDIR)/tcoordvar.Po \ ./$(DEPDIR)/tdatainfo.Po ./$(DEPDIR)/tdatasizes.Po \ ./$(DEPDIR)/tdim.Po ./$(DEPDIR)/temptySDSs.Po \ ./$(DEPDIR)/texternal.Po ./$(DEPDIR)/tfile.Po \ ./$(DEPDIR)/tmixed_apis.Po ./$(DEPDIR)/tncunlim.Po \ ./$(DEPDIR)/tncvargetfill.Po ./$(DEPDIR)/tnetcdf.Po \ ./$(DEPDIR)/trank0.Po ./$(DEPDIR)/tsd.Po \ ./$(DEPDIR)/tsdsprops.Po ./$(DEPDIR)/tszip.Po \ ./$(DEPDIR)/tunlim.Po ./$(DEPDIR)/tutils.Po 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_CC_1 = 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_CCLD_1 = SOURCES = $(cdftest_SOURCES) $(hdfnctest_SOURCES) $(hdftest_SOURCES) DIST_SOURCES = $(cdftest_SOURCES) $(hdfnctest_SOURCES) \ $(hdftest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = cdftest$(EXEEXT) hdfnctest$(EXEEXT) hdftest$(EXEEXT) TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/srcdir_str.h.in \ $(srcdir)/testmfhdf.sh.in $(top_srcdir)/bin/depcomp \ $(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_FORTRAN = @BUILD_FORTRAN@ BUILD_NETCDF = @BUILD_NETCDF@ BUILD_NETCDF_TOOLS = @BUILD_NETCDF_TOOLS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CONFIG_MODE = @CONFIG_MODE@ CONFIG_USER = @CONFIG_USER@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ DIFF = @DIFF@ DLLTOOL = @DLLTOOL@ DOXYGEN_DIR = @DOXYGEN_DIR@ DOXYGEN_EXAMPLES_DIRECTORY = @DOXYGEN_EXAMPLES_DIRECTORY@ DOXYGEN_EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@ DOXYGEN_HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@ DOXYGEN_HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@ DOXYGEN_HTML_FOOTER = @DOXYGEN_HTML_FOOTER@ DOXYGEN_HTML_HEADER = @DOXYGEN_HTML_HEADER@ DOXYGEN_INCLUDE_ALIASES = @DOXYGEN_INCLUDE_ALIASES@ DOXYGEN_INPUT_DIRECTORY = @DOXYGEN_INPUT_DIRECTORY@ DOXYGEN_LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@ DOXYGEN_MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@ DOXYGEN_OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ DOXYGEN_PACKAGE = @DOXYGEN_PACKAGE@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DOXYGEN_PREDEFINED = @DOXYGEN_PREDEFINED@ DOXYGEN_PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@ DOXYGEN_PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@ DOXYGEN_SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@ DOXYGEN_SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@ DOXYGEN_STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@ DOXYGEN_STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@ DOXYGEN_TAG_FILE = @DOXYGEN_TAG_FILE@ DOXYGEN_VERSION_STRING = @DOXYGEN_VERSION_STRING@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ F77_VERSION = @F77_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GREP = @GREP@ H4_CLASSPATH = @H4_CLASSPATH@ H4_JAVACFLAGS = @H4_JAVACFLAGS@ H4_JAVAFLAGS = @H4_JAVAFLAGS@ H4_VERSION = @H4_VERSION@ HDF4_DOXYGEN = @HDF4_DOXYGEN@ HDF4_DOXY_WARNINGS = @HDF4_DOXY_WARNINGS@ HDF_JAVA = @HDF_JAVA@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVACFLAGS = @JAVACFLAGS@ JAVADOC = @JAVADOC@ JAVAFLAGS = @JAVAFLAGS@ JAVAPREFIX = @JAVAPREFIX@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_PATH_NAME = @JAVA_PATH_NAME@ JAVA_VERSION = @JAVA_VERSION@ JNIFLAGS = @JNIFLAGS@ JUNIT = @JUNIT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LL_PATH = @LL_PATH@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_STATIC_EXEC = @LT_STATIC_EXEC@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEQN = @NEQN@ 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@ SED = @SED@ SETX = @SETX@ SET_MAKE = @SET_MAKE@ SHARED_EXTENSION = @SHARED_EXTENSION@ SHELL = @SHELL@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRIP = @STRIP@ SZIP_HAS_ENCODER = @SZIP_HAS_ENCODER@ SZIP_INFO = @SZIP_INFO@ TBL = @TBL@ TESTS_JUNIT = @TESTS_JUNIT@ TEST_FORTRAN_NETCDF = @TEST_FORTRAN_NETCDF@ UNAME_INFO = @UNAME_INFO@ USE_COMP_SZIP = @USE_COMP_SZIP@ VERSION = @VERSION@ _ACJNI_JAVAC = @_ACJNI_JAVAC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ 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@ enable_shared = @enable_shared@ enable_static = @enable_static@ 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@ runstatedir = @runstatedir@ 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@ # Shell commands used in Makefiles RM = rm -f CP = cp # Libraries to link to while building LIBHDF = $(top_builddir)/hdf/src/libdf.la LIBMFHDF = $(top_builddir)/mfhdf/libsrc/libmfhdf.la H4CC = ${DESTDIR}$(bindir)/h4cc H4FC = ${DESTDIR}$(bindir)/h4fc @HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = -R$(abs_top_builddir)/mfhdf/libsrc/.libs -R$(abs_top_builddir)/hdf/src/.libs ACLOCAL_AMFLAGS = "-I m4" # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. ############################################################################# ############################################################################# CHECK_CLEANFILES = *.chkexe *.chklog *.new *.hdf *.cdf *.cdl netcdf.h \ This* onedimmultivars.nc onedimonevar.nc multidimvar.nc \ SD_externals test_INCLUDES = -I$(top_srcdir)/hdf/src \ -I$(top_srcdir)/mfhdf/libsrc \ -I$(top_builddir)/mfhdf/libsrc DEFINES = -DHDF AM_CPPFLAGS = $(test_INCLUDES) $(DEFINES) ############################################################################# ############################################################################# TEST_PROG = cdftest hdfnctest hdftest TEST_SCRIPT = testmfhdf.sh check_SCRIPTS = testmfhdf.sh cdftest_SOURCES = cdftest.c cdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdfnctest_SOURCES = hdfnctest.c tutils.c tncvargetfill.c tunlim.c \ tncunlim.c hdfnctest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ hdftest_SOURCES = hdftest.c tutils.c tchunk.c tcomp.c tcoordvar.c \ tdim.c temptySDSs.c tattributes.c texternal.c tfile.c \ tmixed_apis.c tnetcdf.c trank0.c tsd.c tsdsprops.c \ tszip.c tattdatainfo.c tdatainfo.c tdatasizes.c hdftest_LDADD = $(LIBMFHDF) $(LIBHDF) @LIBS@ DISTCLEANFILES = # Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) TEST_EXTENSIONS = .sh SH_LOG_COMPILER = $(SHELL) AM_SH_LOG_FLAGS = TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.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 mfhdf/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mfhdf/test/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): srcdir_str.h: $(top_builddir)/config.status $(srcdir)/srcdir_str.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ testmfhdf.sh: $(top_builddir)/config.status $(srcdir)/testmfhdf.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: @list='$(check_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 cdftest$(EXEEXT): $(cdftest_OBJECTS) $(cdftest_DEPENDENCIES) $(EXTRA_cdftest_DEPENDENCIES) @rm -f cdftest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cdftest_OBJECTS) $(cdftest_LDADD) $(LIBS) hdfnctest$(EXEEXT): $(hdfnctest_OBJECTS) $(hdfnctest_DEPENDENCIES) $(EXTRA_hdfnctest_DEPENDENCIES) @rm -f hdfnctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hdfnctest_OBJECTS) $(hdfnctest_LDADD) $(LIBS) hdftest$(EXEEXT): $(hdftest_OBJECTS) $(hdftest_DEPENDENCIES) $(EXTRA_hdftest_DEPENDENCIES) @rm -f hdftest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hdftest_OBJECTS) $(hdftest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdftest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdfnctest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdftest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattdatainfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattributes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tchunk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcomp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcoordvar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdatainfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdatasizes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/temptySDSs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texternal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmixed_apis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tncunlim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tncvargetfill.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnetcdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trank0.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsdsprops.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tszip.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tunlim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutils.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .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 -o $@ $< .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 -o $@ `$(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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? cdftest.log: cdftest$(EXEEXT) @p='cdftest$(EXEEXT)'; \ b='cdftest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) hdfnctest.log: hdfnctest$(EXEEXT) @p='hdfnctest$(EXEEXT)'; \ b='hdfnctest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) hdftest.log: hdftest$(EXEEXT) @p='hdftest$(EXEEXT)'; \ b='hdftest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile all-local 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cdftest.Po -rm -f ./$(DEPDIR)/hdfnctest.Po -rm -f ./$(DEPDIR)/hdftest.Po -rm -f ./$(DEPDIR)/tattdatainfo.Po -rm -f ./$(DEPDIR)/tattributes.Po -rm -f ./$(DEPDIR)/tchunk.Po -rm -f ./$(DEPDIR)/tcomp.Po -rm -f ./$(DEPDIR)/tcoordvar.Po -rm -f ./$(DEPDIR)/tdatainfo.Po -rm -f ./$(DEPDIR)/tdatasizes.Po -rm -f ./$(DEPDIR)/tdim.Po -rm -f ./$(DEPDIR)/temptySDSs.Po -rm -f ./$(DEPDIR)/texternal.Po -rm -f ./$(DEPDIR)/tfile.Po -rm -f ./$(DEPDIR)/tmixed_apis.Po -rm -f ./$(DEPDIR)/tncunlim.Po -rm -f ./$(DEPDIR)/tncvargetfill.Po -rm -f ./$(DEPDIR)/tnetcdf.Po -rm -f ./$(DEPDIR)/trank0.Po -rm -f ./$(DEPDIR)/tsd.Po -rm -f ./$(DEPDIR)/tsdsprops.Po -rm -f ./$(DEPDIR)/tszip.Po -rm -f ./$(DEPDIR)/tunlim.Po -rm -f ./$(DEPDIR)/tutils.Po -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 -f ./$(DEPDIR)/cdftest.Po -rm -f ./$(DEPDIR)/hdfnctest.Po -rm -f ./$(DEPDIR)/hdftest.Po -rm -f ./$(DEPDIR)/tattdatainfo.Po -rm -f ./$(DEPDIR)/tattributes.Po -rm -f ./$(DEPDIR)/tchunk.Po -rm -f ./$(DEPDIR)/tcomp.Po -rm -f ./$(DEPDIR)/tcoordvar.Po -rm -f ./$(DEPDIR)/tdatainfo.Po -rm -f ./$(DEPDIR)/tdatasizes.Po -rm -f ./$(DEPDIR)/tdim.Po -rm -f ./$(DEPDIR)/temptySDSs.Po -rm -f ./$(DEPDIR)/texternal.Po -rm -f ./$(DEPDIR)/tfile.Po -rm -f ./$(DEPDIR)/tmixed_apis.Po -rm -f ./$(DEPDIR)/tncunlim.Po -rm -f ./$(DEPDIR)/tncvargetfill.Po -rm -f ./$(DEPDIR)/tnetcdf.Po -rm -f ./$(DEPDIR)/trank0.Po -rm -f ./$(DEPDIR)/tsd.Po -rm -f ./$(DEPDIR)/tsdsprops.Po -rm -f ./$(DEPDIR)/tszip.Po -rm -f ./$(DEPDIR)/tunlim.Po -rm -f ./$(DEPDIR)/tutils.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-TESTS check-am clean clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am 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 \ mostlyclean-local pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(chk_TESTS) # General rule for recursive building targets. # BUILT_SOURCES contain targets that need to be built before anything else # in the directory (e.g., for Fortran type detection) lib progs tests check-s :: $(BUILT_SOURCES) @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target # is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) # run check-clean whenever mostlyclean is run mostlyclean-local: build-check-clean # check-install is just a synonym for installcheck check-install: installcheck # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # # Note that targets in chk_TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(chk_TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo ""; \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "----------------------------" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "----------------------------" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (cat $${log} && false) || exit 1; \ echo "----------------------------" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(FORTRAN_API)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # 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: hdf4-hdf4.3.1/mfhdf/test/Roy-64.nc000066400000000000000000000076651503061704500164320ustar00rootroot00000000000000CDF0 lonlatref_time sourceCOADS CMR5 DATASET DATA_TYPE MONTHLY MEANS COORD_SYSTEM GEOGRAPHICALCOMMENTQmonth since 1980-1-1 00:00:00, Latitudes: 32.0, 36.0 Longitudes: -140.0,-136.0Platform_Types All Platforms lon  long_name longitudeFORTRAN_formatf6.1units degrees_eastälat  long_namelatitudeFORTRAN_formatf6.1units degrees_northìref_time  long_namereference timeFORTRAN_formati10unitsmonthsôSST  long_nameMean Sea Surface Temperature _FillValueÆ?öunits degrees CtrimmingALL instrumentunknown bucket implied bucket øSST_obs  long_name1Number of Observations of Sea Surface Temperature _FillValueÆ?öunits number_of_obstrimmingALL instrumentunknown bucket implied bucket SST_var  long_name0Variance of Sea Surface Temperature Observations _FillValueÆ?öunitsvariancetrimmingALL instrumentunknown bucket implied bucket à à BBA„•sA† xADDAu*BB$B@BlB£æBh5xBâ—æCFø?€A¡ÌAÛ$A‰çGAŽS3AÈAÈAèBA×ê²B#7BQ•BQwý@AwSˆApâ[A…òßAˆ(BBBB8B¢´C%éýB‰éjBT‡‚@@Az¾,Az¦ÄAˆHIA‰äÔB(B BBDBºJ¡Bô—BŠ C¢A@€A}Y™A†|ŠAŠ»AŒ’HBBAøB(B—Ó CK´CSBìÏÅ@ A5åA‘|A“¥äAffA˜A AÈB0AŠˆåAeÙBË4 B£ž¼@ÀA•„ A–[ŸAŸwwAœØ~A˜A˜AB B‚úBTÿvAìQíB›Ö}@àAœó3A™çŸAŸPuA¢rÏA€A¨A`BApµÅB(w@ܵWBÊÌ/AA ²`A¢'bA«34A£NÆAøAÐBBPB(8+Bv(Bÿ(úB—áAA¥¸A ÌÌA¦ðÇA£¤B AðBB<Bt¼BÁÌÍBˆC˜¢A A•§÷A—E~AŸ°ßA³¿BdB`B0B<CgäBµœrBµ qC>éŽA0A‘©üA“PuA™¬ÎA–ºnAÈAàBBB¹(#Cþ†BƒÚ·C8Ë[A@AŠ66A†S2A“šA“dBBAÀBBšö]CKw”B«ÅÁBÆÆ¼APAsh¡Aw+A€QíAŽÔA¸AÈAÈBCØšBÖ–C°¸WCßA`Atd7Ax ¡AƒÕ€AƒxB<BLBTBlC êBñR¸Bù§ŸBëbkApA{¤úAt""AóƒA€µLBAÀB$BtCbé…BC—åCD½²C$A€A‚ézA‡ˆA•bûAëNAÈAˆAðB<By«“Aö^BoQC+³AˆAž¤uA—m·AdÂA£ícBA¨AøBB…kfB—I&CÒž¡B¨"lAA èA„ A ÌÌAœ2A¸A˜A˜BBÜVÑBýeOB× CÁC{A˜A¤P#AŸsA¦ÌÍA¦Ž A¸B A AøBLaCƇAm…#Bµ7€A A´ZA­¶ÛA³‘A¨^†AÈA¨AÀAÐB% ÞA–ÄB)[ºCÛlA¨A©JRA¨¢¥Aª»%A«ñAøBAèBBKOCE`.B¹žæBÎÑ‹A°Aš€A˜PõA¡k‡A¢'¶B B,B BDCUŸ·BŒ>ÌBäðŒCiA¸A‡m¶A‰ÈÜA’5äA–=qB BBB Bž2B„æCYBB«›ªAÀAu°\A\ÂAŠRçA‹… AAA¨AÈC®³ÄD.]A´lBÿùAÈAsÂAtNÆAA‰½8A APAˆA¸B4æîADšdB Ž*B@“AÐA}×ðAvffA~A+A…ÌÍA¸AÐA°BB¶$ñBfõÀC€ŒCλAØAmå AffgA€(öA{Z6A˜A¸ApA¨Aó‡CB±=oB(“BEE¹AàA|ÁA½AŒ5æAƒDDBB$A˜AÀC„ºBäl£BÕ'WBK¬bAèAŒÛlA“ ÷A•>“AäpBŒA0AAÐC îA¸ÅZAóà1BÉéŽA0A‘©üA“PuA™¬ÎA–ºnAÈAàBBB¹(#Cþ†BƒÚ·C8Ë[A@AŠ66A†S2A“šA“dBBAÀBBšö]CKw”B«ÅÁBÆÆ¼APAsh¡Aw+A€QíAŽÔA¸AÈAÈBCØšBÖ–C°¸WCßA`Atd7Ax ¡AƒÕ€AƒxB<BLBTBlC êBñR¸Bù§ŸBëbkApA{¤úAt""AóƒA€µLBAÀB$BtCbé…BC—åCD½²C$A€A‚ézA‡ˆA•bûAëNAÈAˆAðB<By«“Aö^BoQC+³AˆAž¤uA—m·AdÂA£ícBA¨AøBB…kfB—I&CÒž¡B¨"lAA èA„ A ÌÌAœ2A¸A˜A˜BBÜVÑBýeOB× CÁC{A˜A¤P#AŸsA¦ÌÍA¦Ž A¸B A AøBLaCƇAm…#Bµ7€A A´ZA­¶ÛA³‘A¨^†AÈA¨AÀAÐB% ÞA–ÄB)[ºCÛlA¨A©JRA¨¢¥Aª»%A«ñAøBAèBBKOCE`.B¹žæBÎÑ‹A°Aš€A˜PõA¡k‡A¢'¶B B,B BDCUŸ·BŒ>ÌBäðŒCiA¸A‡m¶A‰ÈÜA’5äA–=qB BBB Bž2B„æCYBB«›ªAÀAu°\A\ÂAŠRçA‹… AAA¨AÈC®³ÄD.]A´lBÿùAÈAsÂAtNÆAA‰½8A APAˆA¸B4æîADšdB Ž*B@“AÐA}×ðAvffA~A+A…ÌÍA¸AÐA°BB¶$ñBfõÀC€ŒCλAØAmå AffgA€(öA{Z6A˜A¸ApA¨Aó‡CB±=oB(“BEE¹AàA|ÁA½AŒ5æAƒDDBB$A˜AÀC„ºBäl£BÕ'WBK¬bAèAŒÛlA“ ÷A•>“AäpBŒA0AAÐC îA¸ÅZAóà1BÉ #include #include #include #ifdef H4_HAVE_NETCDF #include "netcdf.h" #else #include "hdf4_netcdf.h" #endif #define CDFMAXSHORT 32767 #define CDFMAXLONG 2147483647 #define CDFMAXBYTE 127 #define FILENAME "test.cdf" #define NUM_DIMS 3 #define DONT_CARE -1 /* make these numbers big when you want to give this a real workout */ #define NUM_RECS 8 #define SIZE_1 7 #define SIZE_2 8 #define cdf_assert(ex) \ { \ if (!(ex)) { \ fprintf(stderr, "Assertion failed: file %s, line %d\n", __FILE__, __LINE__); \ exit(EXIT_FAILURE); \ } \ } struct { int num_dims; int num_vars; int num_attrs; int xtendim; } cdesc[1]; struct { char mnem[H4_MAX_NC_NAME]; nc_type type; int ndims; int dims[H4_MAX_VAR_DIMS]; int num_attrs; } vdesc[1]; struct { char mnem[H4_MAX_NC_NAME]; nc_type type; int len; } adesc[1]; union getret { char by[8]; short sh[4]; nclong lng[2]; float fl[2]; double dbl; }; static void chkgot(nc_type type, union getret got, double check) { switch (type) { case NC_BYTE: cdf_assert((char)check == got.by[0]); break; case NC_SHORT: cdf_assert((short)check == got.sh[0]); break; case NC_LONG: cdf_assert((nclong)check == got.lng[0]); break; case NC_FLOAT: cdf_assert((float)check == got.fl[0]); break; case NC_DOUBLE: cdf_assert(check == got.dbl); break; } } const char *fname = FILENAME; int num_dims_g = NUM_DIMS; long sizes_g[] = {NC_UNLIMITED, SIZE_1, SIZE_2}; const char *dim_names_g[] = {"record", "ixx", "iyy"}; static void createtestdims(int cdfid, int num_dims, long *sizes, const char *dim_names[]) { while (num_dims--) { cdf_assert(ncdimdef(cdfid, *dim_names++, *sizes) >= 0); sizes++; } } static void testdims(int cdfid, int num_dims, long *sizes, const char *dim_names[]) { int ii; long size; char cp[H4_MAX_NC_NAME]; for (ii = 0; ii < num_dims; ii++, sizes++) { cdf_assert(ncdiminq(cdfid, ii, cp, &size) >= 0); if (size != *sizes) fprintf(stderr, "%d: %ld != %ld\n", (int)ii, (long)size, (long)*sizes); cdf_assert(size == *sizes); cdf_assert(strcmp(cp, *dim_names++) == 0); } } const char *reqattr[] = {"UNITS", "VALIDMIN", "VALIDMAX", "SCALEMIN", "SCALEMAX", "FIELDNAM", _FillValue}; #define NUM_RATTRS 6 struct tcdfvar { const char *mnem; nc_type type; const char *fieldnam; double validmin; double validmax; double scalemin; double scalemax; const char *units; int ndims; int dims[NUM_DIMS]; } testvars_g[] = { #define Byte_id 0 {"Byte", NC_BYTE, "Byte sized integer variable", -CDFMAXBYTE, CDFMAXBYTE, -CDFMAXBYTE, CDFMAXBYTE, "ones", 2, {0, 1, DONT_CARE}}, #define Short_id 1 {"Short", NC_SHORT, "Short variable", -CDFMAXSHORT, CDFMAXSHORT, -CDFMAXSHORT, CDFMAXSHORT, "ones", 2, {0, 2, DONT_CARE}}, #define Long_id 2 {"Long", NC_LONG, "Long Integer variable", -CDFMAXLONG, CDFMAXLONG, -CDFMAXLONG, CDFMAXLONG, "ones", 2, {1, 2, DONT_CARE}}, #define Float_id 3 {"Float", NC_FLOAT, "Single Precision Floating Point variable", -CDFMAXLONG, CDFMAXLONG, -CDFMAXLONG, CDFMAXLONG, "flots", 3, {0, 1, 2}}, #define Double_id 4 {"Double", NC_DOUBLE, "Double Precision Floating Point variable", -CDFMAXLONG, CDFMAXLONG, -CDFMAXLONG, CDFMAXLONG, "dflots", 3, {0, 1, 2}}, }; #define NUM_TESTVARS 5 static void createtestvars(int id, struct tcdfvar *testvars, int count) { int ii; struct tcdfvar *vp = testvars; for (ii = 0; ii < count; ii++, vp++) { cdf_assert(ncvardef(id, vp->mnem, vp->type, vp->ndims, vp->dims) == ii); cdf_assert(ncattput(id, ii, reqattr[0], NC_CHAR, strlen(vp->units), vp->units) == 0); cdf_assert(ncattput(id, ii, reqattr[1], NC_DOUBLE, 1, (ncvoid *)&(vp->validmin)) == 1); cdf_assert(ncattput(id, ii, reqattr[2], NC_DOUBLE, 1, (ncvoid *)&(vp->validmax)) == 2); cdf_assert(ncattput(id, ii, reqattr[3], NC_DOUBLE, 1, (ncvoid *)&(vp->scalemin)) == 3); cdf_assert(ncattput(id, ii, reqattr[4], NC_DOUBLE, 1, (ncvoid *)&(vp->scalemax)) == 4); cdf_assert(ncattput(id, ii, reqattr[5], NC_CHAR, strlen(vp->fieldnam), vp->fieldnam) == 5); } } static void parray(const char *label, unsigned count, const long array[]) { fprintf(stdout, "%s", label); fputc('\t', stdout); for (; count > 0; count--, array++) fprintf(stdout, " %ld", *array); } static void fill_seq(int id) { long vindices[NUM_DIMS]; long *cc, *mm; float val; int ii = 0; sizes_g[0] = NUM_RECS; /* zero the indices */ cc = vindices; while (cc <= &vindices[num_dims_g - 1]) *cc++ = 0; /* ripple counter */ cc = vindices; mm = sizes_g; while (*vindices < *sizes_g) { while (*cc < *mm) { if (mm == &sizes_g[num_dims_g - 1]) { val = ii; #ifdef VDEBUG parray("indices", NUM_DIMS, vindices); printf("\t val %f\n", val); #endif cdf_assert(ncvarput1(id, Float_id, vindices, (ncvoid *)&val) != -1); (*cc)++; ii++; continue; } cc++; mm++; } if (cc == vindices) break; *cc = 0; cc--; mm--; (*cc)++; } } static void check_fill_seq(int id) { long vindices[NUM_DIMS]; long *cc, *mm; union getret got; int ii = 0; float val; sizes_g[0] = NUM_RECS; cc = vindices; while (cc <= &vindices[num_dims_g - 1]) *cc++ = 0; /* ripple counter */ cc = vindices; mm = sizes_g; while (*vindices < *sizes_g) { while (*cc < *mm) { if (mm == &sizes_g[num_dims_g - 1]) { if (ncvarget1(id, Float_id, vindices, (ncvoid *)&got) == -1) goto bad_ret; val = ii; if (val != got.fl[0]) { parray("indices", (unsigned)NUM_DIMS, vindices); printf("\t%f != %f\n", (double)val, (double)got.fl[0]); } (*cc)++; ii++; continue; } cc++; mm++; } if (cc == vindices) break; *cc = 0; cc--; mm--; (*cc)++; } return; bad_ret: printf("couldn't get a var in check_fill_seq() %d\n", (int)ii); return; } long indices[][3] = { {0, 1, 3}, {0, 3, 0}, {1, 2, 3}, {3, 2, 1}, {2, 1, 3}, {1, 0, 0}, {0, 0, 0}, }; char chs[] = {'A', 'B', ((char)0xff)}; long s_start[] = {0, 1}; long s_edges[] = {NUM_RECS, SIZE_1 - 1}; char sentence[NUM_RECS * SIZE_1 - 1] = "The red death had long devastated the country."; short shs[] = {97, 99}; nclong birthday = 82555; float e = 2.7182818284590452354F; double pinot = 3.25; double zed = 0.0; int main(void) { int ret; int id; char new[256]; #ifdef SYNCDEBUG char *str = "one"; #endif int ii; long iilong; struct tcdfvar *tvp = testvars_g; union getret got; ncopts = NC_VERBOSE; /* errors non fatal */ id = nccreate(fname, NC_NOCLOBBER); if (id == -1) { fprintf(stderr, "trying again\n"); id = nccreate(fname, NC_CLOBBER); } if (id == -1) exit(errno); #ifdef NOBUF cdf_assert(ncnobuf(id) != 1); #endif /* NOBUF */ cdf_assert(ncattput(id, NC_GLOBAL, "TITLE", NC_CHAR, 12, "another name") != -1); cdf_assert(ncattget(id, NC_GLOBAL, "TITLE", (ncvoid *)new) != -1); /* printf("title 1 \"%s\"\n", new) ; */ cdf_assert(ncattput(id, NC_GLOBAL, "TITLE", NC_CHAR, strlen(fname), fname) != -1); cdf_assert(ncattget(id, NC_GLOBAL, "TITLE", (ncvoid *)new) != -1); new[strlen(fname)] = 0; /* printf("title 2 \"%s\"\n", new) ; */ cdf_assert(strcmp(fname, new) == 0); cdf_assert(ncattput(id, NC_GLOBAL, "RCSID", NC_CHAR, strlen(mrcsid), (ncvoid *)mrcsid) != -1); createtestdims(id, NUM_DIMS, sizes_g, dim_names_g); testdims(id, NUM_DIMS, sizes_g, dim_names_g); createtestvars(id, testvars_g, NUM_TESTVARS); { long lfill = -1; double dfill = -9999; cdf_assert(ncattput(id, Long_id, _FillValue, NC_LONG, 1, (ncvoid *)&lfill) != -1); cdf_assert(ncattput(id, Double_id, _FillValue, NC_DOUBLE, 1, (ncvoid *)&dfill) != -1); } #ifdef REDEF cdf_assert(ncendef(id) != -1); cdf_assert(ncvarput1(id, Long_id, indices[3], (ncvoid *)&birthday) != -1); fill_seq(id); cdf_assert(ncredef(id) != -1); #endif cdf_assert(ncdimrename(id, 1, "IXX") >= 0); cdf_assert(ncdiminq(id, 1, new, &iilong) >= 0); printf("dimrename: %s\n", new); cdf_assert(ncdimrename(id, 1, dim_names_g[1]) >= 0); #ifdef ATTRX cdf_assert(ncattrename(id, 1, "UNITS", "units") != -1); cdf_assert(ncattdel(id, 4, "FIELDNAM") != -1); cdf_assert(ncattdel(id, 2, "SCALEMIN") != -1); cdf_assert(ncattdel(id, 2, "SCALEMAX") != -1); #endif /* ATTRX */ cdf_assert(ncendef(id) != -1); #ifndef REDEF fill_seq(id); cdf_assert(ncvarput1(id, Long_id, indices[3], (char *)&birthday) != -1); #endif cdf_assert(ncvarput(id, Byte_id, s_start, s_edges, (ncvoid *)sentence) != -1); cdf_assert(ncvarput1(id, Byte_id, indices[6], (ncvoid *)(chs + 1)) != -1); cdf_assert(ncvarput1(id, Byte_id, indices[5], (ncvoid *)chs) != -1); cdf_assert(ncvarput1(id, Short_id, indices[4], (ncvoid *)shs) != -1); cdf_assert(ncvarput1(id, Float_id, indices[2], (ncvoid *)&e) != -1); cdf_assert(ncvarput1(id, Double_id, indices[1], (ncvoid *)&zed) != -1); cdf_assert(ncvarput1(id, Double_id, indices[0], (ncvoid *)&pinot) != -1); #ifdef SYNCDEBUG printf("Hit Return to sync\n"); gets(str); ncsync(id, 0); printf("Sync done. Hit Return to continue\n"); gets(str); #endif /* SYNCDEBUG */ ret = ncclose(id); printf("ncclose ret = %d\n\n", (int)ret); /* * read it */ id = ncopen(fname, NC_NOWRITE); if (id == -1) { printf("Could not open %s\n", fname); exit(1); } printf("reopen id = %d for filename %s\n", (int)id, fname); #ifdef NOBUF cdf_assert(ncnobuf(id) != 1); #endif /* NOBUF */ /* NC */ printf("NC "); cdf_assert( ncinquire(id, &(cdesc->num_dims), &(cdesc->num_vars), &(cdesc->num_attrs), &(cdesc->xtendim)) == id); if (cdesc->num_dims != num_dims_g) { printf(" num_dims : %d != %d\n", cdesc->num_dims, num_dims_g); exit(1); } cdf_assert(cdesc->num_vars == NUM_TESTVARS); printf("done\n"); /* GATTR */ printf("GATTR "); cdf_assert(cdesc->num_attrs == 2); cdf_assert(ncattname(id, NC_GLOBAL, 0, adesc->mnem) == 0); cdf_assert(strcmp("TITLE", adesc->mnem) == 0); cdf_assert(ncattinq(id, NC_GLOBAL, adesc->mnem, &(adesc->type), &(adesc->len)) != -1); cdf_assert(adesc->type == NC_CHAR); cdf_assert(adesc->len == strlen(fname)); cdf_assert(ncattget(id, NC_GLOBAL, "TITLE", (ncvoid *)new) != -1); new[adesc->len] = 0; cdf_assert(strcmp(fname, new) == 0); /* printf("Global %s %s\n", adesc->mnem, new) ; */ cdf_assert(ncattname(id, NC_GLOBAL, 1, adesc->mnem) == 1); cdf_assert(strcmp("RCSID", adesc->mnem) == 0); cdf_assert(ncattinq(id, NC_GLOBAL, adesc->mnem, &(adesc->type), &(adesc->len)) != -1); cdf_assert(adesc->type == NC_CHAR); cdf_assert(adesc->len == strlen(mrcsid)); cdf_assert(ncattget(id, NC_GLOBAL, "RCSID", (ncvoid *)new) != -1); new[adesc->len] = 0; cdf_assert(strcmp(mrcsid, new) == 0); /* printf("Global %s %s\n", adesc->mnem, new) ; */ /* VAR */ printf("VAR "); cdf_assert(cdesc->num_vars == NUM_TESTVARS); for (ii = 0; ii < cdesc->num_vars; ii++, tvp++) { int jj; cdf_assert(ncvarinq(id, ii, vdesc->mnem, &(vdesc->type), &(vdesc->ndims), vdesc->dims, &(vdesc->num_attrs)) == ii); if (strcmp(tvp->mnem, vdesc->mnem) != 0) { printf("attr %d mnem mismatch %s, %s\n", (int)ii, tvp->mnem, vdesc->mnem); continue; } if (tvp->type != vdesc->type) { printf("attr %d type mismatch %d, %d\n", (int)ii, tvp->type, (int)vdesc->type); continue; } for (jj = 0; jj < vdesc->ndims; jj++) { if (tvp->dims[jj] != vdesc->dims[jj]) { printf("inconsistent dim[%d] for variable %d: %d != %d\n", (int)jj, (int)ii, (int)tvp->dims[jj], (int)vdesc->dims[jj]); continue; } } /* VATTR */ printf("VATTR\n"); for (jj = 0; jj < vdesc->num_attrs; jj++) { cdf_assert(ncattname(id, ii, jj, adesc->mnem) == jj); if (strcmp(adesc->mnem, reqattr[jj]) != 0) { printf("var %d attr %d mismatch %s != %s\n", (int)ii, (int)jj, adesc->mnem, reqattr[jj]); break; } } if (ncattinq(id, ii, reqattr[0], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_CHAR); cdf_assert(adesc->len == strlen(tvp->units)); cdf_assert(ncattget(id, ii, reqattr[0], (ncvoid *)new) != -1); new[adesc->len] = 0; cdf_assert(strcmp(tvp->units, new) == 0); } if (ncattinq(id, ii, reqattr[1], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_DOUBLE); cdf_assert(adesc->len == 1); cdf_assert(ncattget(id, ii, reqattr[1], (ncvoid *)&got) != -1); chkgot(adesc->type, got, tvp->validmin); } if (ncattinq(id, ii, reqattr[2], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_DOUBLE); cdf_assert(adesc->len == 1); cdf_assert(ncattget(id, ii, reqattr[2], (ncvoid *)&got) != -1); chkgot(adesc->type, got, tvp->validmax); } if (ncattinq(id, ii, reqattr[3], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_DOUBLE); cdf_assert(adesc->len == 1); cdf_assert(ncattget(id, ii, reqattr[3], (ncvoid *)&got) != -1); chkgot(adesc->type, got, tvp->scalemin); } if (ncattinq(id, ii, reqattr[4], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_DOUBLE); cdf_assert(adesc->len == 1); cdf_assert(ncattget(id, ii, reqattr[4], (ncvoid *)&got) != -1); chkgot(adesc->type, got, tvp->scalemax); } if (ncattinq(id, ii, reqattr[5], &(adesc->type), &(adesc->len)) != -1) { cdf_assert(adesc->type == NC_CHAR); cdf_assert(adesc->len == strlen(tvp->fieldnam)); cdf_assert(ncattget(id, ii, reqattr[5], (ncvoid *)new) != -1); new[adesc->len] = 0; cdf_assert(strcmp(tvp->fieldnam, new) == 0); } } printf("fill_seq "); check_fill_seq(id); printf("Done\n"); cdf_assert(ncvarget1(id, Double_id, indices[0], (ncvoid *)&got) != -1); printf("got val = %f\n", got.dbl); cdf_assert(ncvarget1(id, Double_id, indices[1], (ncvoid *)&got) != -1); printf("got val = %f\n", got.dbl); cdf_assert(ncvarget1(id, Float_id, indices[2], (ncvoid *)&got) != -1); printf("got val = %f\n", (double)got.fl[0]); cdf_assert(ncvarget1(id, Long_id, indices[3], (ncvoid *)&got) != -1); printf("got val = %ld\n", (long)got.lng[0]); cdf_assert(ncvarget1(id, Short_id, indices[4], (ncvoid *)&got) != -1); printf("got val = %d\n", (int)got.sh[0]); cdf_assert(ncvarget1(id, Byte_id, indices[5], (ncvoid *)&got) != -1); printf("got val = %c (0x%02x) \n", got.by[0], got.by[0]); cdf_assert(ncvarget1(id, Byte_id, indices[6], (ncvoid *)&got) != -1); printf("got val = %c (0x%02x) \n", got.by[0], got.by[0]); /* memset(new,0,256) ; */ { char *cp = new; for (; cp < &new[sizeof(new) - 1]; *cp++ = 0) ; } cdf_assert(ncvarget(id, Byte_id, s_start, s_edges, (ncvoid *)new) != -1); printf("got val = \"%s\"\n", new); ret = ncclose(id); printf("re ncclose ret = %d\n", (int)ret); return EXIT_SUCCESS; } hdf4-hdf4.3.1/mfhdf/test/gen_sds_szipped.c000066400000000000000000000106301503061704500204160ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * This program generates the data file "sds_szipped.dat" which contains * some szipped compressed SDSs. (currently only one dataset but more can be * added for future tests.) This data file is used by the following test * files: * tcomp.c: to test getting compression information with only decoder * tdatasizes.c: to test getting compressed data size with only decoder * * This program must be compiled with an h4cc version that was built with * szip encoder enabled. (2008-10-09 - BMR) * ****************************************************************************/ #include "mfhdf.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif #include "hdftest.h" #define FILE_NAME "sds_szipped.dat" #define SDS1_NAME "TwoDimsInt32" #define X_LENGTH 5 #define Y_LENGTH 16 #define RANK 2 /* * Generate szipped data to test reading szipped data and compression info. */ intn main() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; intn status; int32 comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 start[2], edges[2], dim_sizes[2]; int32 pixels_per_scanline; intn num_errs = 0; /* number of errors in compression test so far */ int i, j; int32 data[Y_LENGTH][X_LENGTH] = { 100, 100, 200, 200, 300, 0, 0, 0, 0, 0, 100, 100, 200, 200, 300, 400, 300, 200, 100, 0, 300, 300, 0, 400, 300, 300, 300, 0, 400, 300, 300, 300, 0, 400, 300, 0, 0, 600, 600, 300, 500, 500, 600, 600, 300, 0, 0, 600, 600, 300, 0, 0, 600, 600, 300, 0, 0, 600, 600, 300, 0, 0, 600, 600, 300, 500, 500, 600, 600, 300, 500, 500, 600, 600, 300, 500, 500, 600, 600, 300}; /********************* End of variable declaration ***********************/ dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* Create the file and initialize the SD interface. */ sd_id = SDstart(FILE_NAME, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Define the location and size of the data set to be written to the file. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Create 3rd data set for SZIP compression. */ sds_id = SDcreate(sd_id, SDS1_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); /* Set data set SDS1_NAME to use SZIP compression. */ comp_type = COMP_CODE_SZIP; pixels_per_scanline = dim_sizes[1]; c_info.szip.pixels = dim_sizes[0] * dim_sizes[1]; ; c_info.szip.pixels_per_block = 2; if (pixels_per_scanline >= 2048) c_info.szip.pixels_per_scanline = 512; else c_info.szip.pixels_per_scanline = dim_sizes[1]; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 64; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write the stored data to the 3rd data set. */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the 3rd data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* main */ hdf4-hdf4.3.1/mfhdf/test/hdfnctest.c000066400000000000000000000035521503061704500172250ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "mfhdf.h" #include "hdftest.h" /* all test functions to be called in main */ extern int test_unlim(); extern int test_ncunlim(); extern int test_ncvargetfill(); int main(void) { intn status; /* status flag */ int num_errs = 0; /* number of errors so far */ /* Tests reading/writing datasets with unlimited dimension via HDF API */ status = test_unlim(); /* in tunlim.c */ num_errs = num_errs + status; /* Tests reading/writing variables with unlimited dimension via nc API */ status = test_ncunlim(); /* in tncunlim.c */ num_errs = num_errs + status; /* Tests ncvarget in filling fill-values where appropriate (HDFFR-1390) */ status = test_ncvargetfill(); /* in tncvargetfill.c */ num_errs = num_errs + status; if (num_errs == 0) { printf("*** HDF-nc test passes ***\n"); return EXIT_SUCCESS; } else { printf("*** HDF-nc test fails ***\n"); return EXIT_FAILURE; } } hdf4-hdf4.3.1/mfhdf/test/hdftest.c000066400000000000000000001304531503061704500167050ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "mfhdf.h" #include "hdftest.h" #define UFOFILE "file.UFO" /* non-existing file */ #define FILE1 "test1.hdf" #define FILE2 "test2.hdf" #define EXTTST "exttst.hdf" /* main file for external file test */ #define EXTFILE "SD_externals" /* external file created in test */ #define NBITFILE "nbit.hdf" #define COMPFILE1 "comptst1.hdf" #define COMPFILE2 "comptst2.hdf" #define COMPFILE3 "comptst3.hdf" #define COMPFILE4 "comptst4.hdf" #define COMPFILE5 "comptst5.hdf" #define COMPFILE6 "comptst6.hdf" #define COMPFILE7 "comptst7.hdf" #define CHKFILE "chktst.hdf" /* Chunking test file */ #define CNBITFILE "chknbit.hdf" /* Chunking w/ NBIT compression */ /* Which tests to run? */ #define EXTERNAL_TEST #define NBIT_TEST #define COMP_TEST #define CHUNK_TEST /* commented out for now because of 'long' handling on 64-bit machines by this version of the netCDF library is broken. The new version of the netCDF library(2.4.3?) has fixed this I think. To fix it here requires merging in those fixes.*/ #define NETCDF_READ_TEST /* all test functions to be called in main */ extern int test_netcdf_reading(); extern int test_szip_compression(); extern int test_checkempty(); extern int test_idtest(); /* extern int test_sd(); - removed temporarily, see note in main(...) */ extern int test_mixed_apis(); extern int test_files(); extern int test_rank0(); extern int test_SDSprops(); extern int test_coordvar(); extern int test_chunk(); extern int test_compression(); extern int test_dimensions(); extern int test_attributes(); extern int test_datasizes(); extern int test_datainfo(); extern int test_external(); extern int test_att_ann_datainfo(); int main(void) { int32 f1, f2, fnbit; /* File handles */ int32 nt; /* Number type */ int32 dimsize[10]; /* dimension sizes */ int32 newsds, newsds2, newsds3; /* SDS handles */ int32 sdsid; /* SDS handle */ int32 dimid, dimid1, dimid2; /* Dimension handles */ int32 num_sds; /* number of SDS in file */ int32 num_gattr; /* Number of global attributes */ int32 index; /* Index of dataset in file */ int32 ival; int32 sdid; /* another SDS handle */ int32 rank; /* rank of SDS */ intn status; /* status flag */ intn nattrs; /* Number of attributes again? */ char name[90]; char text[256]; int32 start[10], end[10], stride[10]; /* start, end, stride arrays */ int32 scale[10]; char l[80], u[80], fmt[80], c[80]; int32 count; int32 fillval = 0, readval = 0; int32 idata[100]; int32 rdata[100]; int16 sdata[100], outdata[100]; int32 ndg_saved_ref; /* used to save a ref of an SDS in one of the test */ uint8 iuval; float32 *data = NULL; float32 max, min, imax, imin; float64 cal, cale, ioff, ioffe; int num_errs = 0; /* number of errors so far */ ncopts = NC_VERBOSE; data = (float32 *)calloc(1000, sizeof(float32)); CHECK_ALLOC(data, "data", "main"); /* Testing SDstart */ /* Try start non-existing file with RDONLY and RDWR. Both should fail. */ f1 = SDstart(UFOFILE, DFACC_RDONLY); if (f1 != FAIL) { fprintf(stderr, "SDstart(..., RDONLY) should fail\n"); num_errs++; SDend(f1); } f1 = SDstart(UFOFILE, DFACC_RDWR); if (f1 != FAIL) { fprintf(stderr, "SDstart(..., RDWR) should fail\n"); num_errs++; SDend(f1); } /* -------hmm what are testing here?----------------- */ /* Create two files */ f1 = SDstart(FILE1, DFACC_CREATE); CHECK(f1, FAIL, "SDstart"); f2 = SDstart(FILE2, DFACC_CREATE); CHECK(f2, FAIL, "SDstart"); /* what's in these empty files */ status = SDfileinfo(f1, &num_sds, &num_gattr); CHECK(status, FAIL, "SDfileinfo"); if (num_gattr != 0) { fprintf(stderr, "File %s still has stuff in it\n", FILE1); num_errs++; } /* create a 4 by 8 dataset called DataSetAlpha in file test1.hdf */ dimsize[0] = 4; dimsize[1] = 8; newsds = SDcreate(f1, "DataSetAlpha", DFNT_FLOAT32, 2, dimsize); CHECK(newsds, FAIL, "SDcreate: Failed to create a new data set DataSetAlpha "); /* save the ref number for the first dataset --- will check at very end */ ndg_saved_ref = SDidtoref(newsds); CHECK(ndg_saved_ref, 0, "SDidtoref: Failed to get NDG ref for DataSetAlpha "); /* create dataset DataSetGamma in file test1.hdf */ newsds3 = SDcreate(f1, "DataSetGamma", DFNT_FLOAT64, 1, dimsize); CHECK(newsds3, FAIL, "SDcreate:Failed to create a new data set gamma"); /* get info on number of datasets and global attributes in file */ status = SDfileinfo(f1, &num_sds, &num_gattr); CHECK(status, FAIL, "SDfileinfo"); if (num_sds != 2) { fprintf(stderr, "Wrong number of datasets in file 1\n"); num_errs++; } /* get dimension handle for first dimension? of DataSetGamma */ dimid = SDgetdimid(newsds3, 0); CHECK(dimid, FAIL, "SDgetdimid:Failed to get dimension id"); /* reset the dimension name to Mydim? */ status = SDsetdimname(dimid, "MyDim"); CHECK(status, FAIL, "SDsetdimname: Failed to set dimension name to 'MyDim'"); /* Set dimension attribute to 'TRUE' */ status = SDsetattr(dimid, "DimensionAttribute", DFNT_CHAR8, 4, "TRUE"); CHECK(status, FAIL, "SDsetattr: Failed to set Dimension attribute"); /* hmm. look it back up again. */ status = SDfindattr(dimid, "DimensionAttribute"); if (status != 0) { fprintf(stderr, "SDfindattr: Bad index for finding 'DimensionAttribute' %d\n", status); num_errs++; } /* Find out info about first attribute for dimension */ status = SDattrinfo(dimid, (int32)0, name, &nt, &count); CHECK(status, FAIL, "SDattrinfo"); /* read first attribute in, assume CHAR here. */ status = SDreadattr(dimid, 0, text); CHECK(status, FAIL, "SDreadattr"); /* Compare value reterieved to what was written */ if (strncmp(text, "TRUE", count)) { fprintf(stderr, "SDreadattr: Invalid dimension attribute read <%s>\n", text); num_errs++; } /* get First dimension of dataset 'DataSetAlpha' */ dimid = SDgetdimid(newsds, 0); CHECK(dimid, FAIL, "SDgetdimid: Failed to get dimension id"); /* Set this name of this dimension to 'Mydim' */ status = SDsetdimname(dimid, "MyDim"); CHECK(status, FAIL, "SDsetdimname"); /* Set the scales for this dimension also */ scale[0] = 1; scale[1] = 5; scale[2] = 7; scale[3] = 24; status = SDsetdimscale(dimid, 4, DFNT_INT32, (void *)scale); CHECK(status, FAIL, "SDsetdimscale"); /* Set the dimension strings for the dimension also */ status = SDsetdimstrs(dimid, "DimLabel", NULL, "TheFormat"); CHECK(status, FAIL, "SDsetdimstrs"); /* verify that we can read the dimensions values with SDreaddata */ start[0] = 0; end[0] = 4; status = SDreaddata(dimid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDreaddata"); /* compare retrieved values for scale */ for (int i = 0; i < 4; i++) { if (idata[i] != scale[i]) { fprintf(stderr, "SDreaddata() returned %ld not %ld in location %d\n", (long)idata[i], (long)scale[i], i); num_errs++; } } /* hmm...lets store an attribute here for the dimension */ max = (float32)3.1415; status = SDsetattr(dimid, "DimAttr", DFNT_FLOAT32, 1, (void *)&max); CHECK(status, FAIL, "SDsetattr"); /* lets make sure we can read it too */ status = SDattrinfo(dimid, 3, name, &nt, &count); CHECK(status, FAIL, "SDattrinfo"); if (nt != DFNT_FLOAT32) { fprintf(stderr, "Wrong number type for SDattrinfo(dim)\n"); num_errs++; } if (count != 1) { fprintf(stderr, "Wrong count for SDattrinfo(dim)\n"); num_errs++; } if (strcmp(name, "DimAttr")) { fprintf(stderr, "Wrong name for SDattrinfo(dim)\n"); num_errs++; } /* get second dimension of data set 'DataSetAlpha' */ dimid2 = SDgetdimid(newsds, 1); CHECK(dimid2, FAIL, "SDgetdimid: Failed to get second dimension id"); /* lets store an attribute for the dimension without explicitly creating the coord var first */ ival = -256; status = SDsetattr(dimid2, "Integer", DFNT_INT32, 1, (void *)&ival); CHECK(status, FAIL, "SDsetattr"); /* lets make sure we can read it too */ status = SDattrinfo(dimid2, 0, name, &nt, &count); CHECK(status, FAIL, "SDattrinfo"); if (nt != DFNT_INT32) { fprintf(stderr, "Wrong number type for SDattrinfo(dim)\n"); num_errs++; } if (count != 1) { fprintf(stderr, "Wrong count for SDattrinfo(dim)\n"); num_errs++; } if (strcmp(name, "Integer")) { fprintf(stderr, "Wrong name for SDattrinfo(dim)\n"); num_errs++; } /* read dimension attribute back in */ ival = 0; status = SDreadattr(dimid2, 0, (void *)&ival); CHECK(status, FAIL, "SDreatattr"); if (ival != -256) { fprintf(stderr, "Wrong value for SDreadattr(dim)\n"); num_errs++; } /* add an unsigned integer as an dimension attribute */ iuval = 253; status = SDsetattr(dimid2, "UnsignedInteger", DFNT_UINT8, 1, (void *)&iuval); CHECK(status, FAIL, "SDsetattr"); /* lets make sure we can read it too */ status = SDattrinfo(dimid2, 1, name, &nt, &count); CHECK(status, FAIL, "SDattrinfo"); if (nt != DFNT_UINT8) { fprintf(stderr, "Wrong number type for SDattrinfo(dim)\n"); num_errs++; } if (count != 1) { fprintf(stderr, "Wrong count for SDattrinfo(dim)\n"); num_errs++; } if (strcmp(name, "UnsignedInteger")) { fprintf(stderr, "Wrong name for SDattrinfo(dim)\n"); num_errs++; } /* read second dimension attribute back in */ iuval = 0; status = SDreadattr(dimid2, 1, (void *)&iuval); CHECK(status, FAIL, "SDreatattr"); if (iuval != 253) { fprintf(stderr, "Wrong value for SDreadattr(dim)\n"); num_errs++; } /* Find index of data set 'DataSetAlpha' in file test1.hdf */ status = SDnametoindex(f1, "DataSetAlpha"); if (status != 0) { fprintf(stderr, "Couldn't find data set in file 1\n"); num_errs++; } /* Try finding data set in test2.hdf, should fail? */ status = SDnametoindex(f2, "DataSetAlpha"); if (status != FAIL) { fprintf(stderr, "Found data set in wrong file 2\n"); num_errs++; } /* Try finding non-existent dataset in file, should fail */ status = SDnametoindex(f1, "BogusDataSet"); if (status != FAIL) { fprintf(stderr, "Found bogus data set in file 1\n"); num_errs++; } /* Set fill value for data set 'DataSetAlpha' assume we still have valid handle at this point...*/ max = -17.5; status = SDsetfillvalue(newsds, (void *)&max); CHECK(status, FAIL, "SDsetfillvalue"); /* initialize array to write out */ for (int i = 0; i < 10; i++) data[i] = (float32)i; /* write out (1,1)->(3,3) array out */ start[0] = start[1] = 1; end[0] = end[1] = 3; status = SDwritedata(newsds, start, NULL, end, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* set the range for data set 'DataSetAlpha' */ max = (float32)10.0; min = (float32)4.6; status = SDsetrange(newsds, (void *)&max, (void *)&min); CHECK(status, FAIL, "SDsetrange"); /* Brilliant...., retrieve it right back....*/ status = SDgetrange(newsds, (void *)&imax, (void *)&imin); CHECK(status, FAIL, "SDsetrange"); /* set a character attribute for data set 'DataSetAlpha' */ status = SDsetattr(newsds, "spam", DFNT_CHAR8, 6, "Hi mom"); CHECK(status, FAIL, "SDsetattr"); /* Set the data strings for data set 'DataSetAlpha' */ status = SDsetdatastrs(newsds, "TheLabel", "TheUnits", NULL, "TheCordsys"); CHECK(status, FAIL, "SDsetdatastrs"); /* Brilliant.....retrieve them right back */ status = SDgetdatastrs(newsds, l, u, fmt, c, 80); CHECK(status, FAIL, "SDgetdatastrs"); if (strcmp(l, "TheLabel")) { fprintf(stderr, "Bogus label returned (%s)\n", l); num_errs++; } if (strcmp(u, "TheUnits")) { fprintf(stderr, "Bogus units returned (%s)\n", u); num_errs++; } if (strcmp(fmt, "")) { fprintf(stderr, "Bogus format returned\n"); num_errs++; } if (strcmp(c, "TheCordsys")) { fprintf(stderr, "Bogus cordsys returned\n"); num_errs++; } /* retrieve CHAR attribute for 'DataSetAlpha' */ status = SDfindattr(newsds, "spam"); if (status != 2) { fprintf(stderr, "Bad index for SDfindattr\n"); num_errs++; } /* retrieve non-existent CHAR attribute for 'DataSetAlpha'. Should fail. */ status = SDfindattr(newsds, "blarf"); if (status != FAIL) { fprintf(stderr, "SDfindattr found non-existent attribute\n"); num_errs++; } /* hmm....set global attributes for File 'test1.hdf' */ status = SDsetattr(f1, "F-attr", DFNT_CHAR8, 10, "globulator"); CHECK(status, FAIL, "SDsetattr"); /* get info about the global attribute just created....*/ status = SDattrinfo(f1, (int32)0, name, &nt, &count); CHECK(status, FAIL, "SDattrinfo"); /* read this global attribute back in ....*/ status = SDreadattr(f1, 0, text); CHECK(status, FAIL, "SDreadattr"); if (strncmp(text, "globulator", count)) { fprintf(stderr, "Invalid global attribute read <%s>\n", text); num_errs++; } /* Get number of SDS and global attributes in file 'test2.hdf'. It should be empty...*/ status = SDfileinfo(f2, &num_sds, &num_gattr); if (num_sds != 0) { fprintf(stderr, "File2 still has stuff in it\n"); num_errs++; } /* Set calibration info for dataset 'DataSetGamma' in file 'test1.hdf' */ cal = 1.0; cale = 5.0; ioff = 3.0; ioffe = 2.5; nt = DFNT_INT8; status = SDsetcal(newsds3, cal, cale, ioff, ioffe, nt); CHECK(status, FAIL, "SDsetcal"); /* create a record variable in file 'test2.hdf' */ dimsize[0] = SD_UNLIMITED; dimsize[1] = 6; newsds2 = SDcreate(f2, "DataSetBeta", DFNT_INT16, 2, dimsize); CHECK(newsds2, FAIL, "SDcreate: Failed to create new data set 'DataSetBeta'"); /* get info on number of SDSs and global attributes in file 'test2.hdf' There should be only 1 SDS */ status = SDfileinfo(f2, &num_sds, &num_gattr); if (num_sds != 1) { fprintf(stderr, "Wrong number of datasets in file 2\n"); num_errs++; } for (int16 i = 0; i < 50; i++) sdata[i] = i; /* Write data to dataset 'DataSetBeta' in file 'test2.hdf' */ start[0] = start[1] = 0; end[0] = 8; end[1] = 6; status = SDwritedata(newsds2, start, NULL, end, (void *)sdata); CHECK(status, FAIL, "SDwritedata"); /* Now read part of an earlier dataset,'DataSetAlpha', back in from file 'test1.hdf' */ start[0] = start[1] = 0; end[0] = end[1] = 3; status = SDreaddata(newsds, start, NULL, end, (void *)data); CHECK(status, FAIL, "SDreaddata"); /* verify the data values retrieved from 'DataSetAlpha' */ if (!H4_FLT_ABS_EQUAL(data[0], -17.5F)) { fprintf(stderr, "Wrong value returned loc 0: %f\n", (double)data[0]); num_errs++; } if (!H4_FLT_ABS_EQUAL(data[3], -17.5F)) { fprintf(stderr, "Wrong value returned loc 3: %f\n", (double)data[3]); num_errs++; } if (!H4_FLT_ABS_EQUAL(data[5], 1.0F)) { fprintf(stderr, "Wrong value returned loc 5: %f\n", (double)data[5]); num_errs++; } if (!H4_FLT_ABS_EQUAL(data[6], -17.5F)) { fprintf(stderr, "Wrong value returned loc 6: %f\n", (double)data[6]); num_errs++; } if (!H4_FLT_ABS_EQUAL(data[8], 4.0F)) { fprintf(stderr, "Wrong value returned loc 8: %f\n", (double)data[8]); num_errs++; } for (int i = 0; i < 50; i++) outdata[i] = 0; /* read data back in from 'DataSetBeta' from file 'test2.hdf' */ start[0] = start[1] = 1; end[0] = 3; end[1] = 3; stride[0] = 2; stride[1] = 2; status = SDreaddata(newsds2, start, stride, end, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); { /* verify read values; should be 7 9 11 19 21 23 31 33 35 */ int i, j; /* indexing the two dimensions */ int k, m; /* counters = number of elements read on each dimension */ int n = 0; /* indexing the outdata array */ for (i = 1, m = 0; m < 3; i = i + 2, m++) for (j = (i * 6) + 1, k = 0; k < 3; j = j + 2, k++, n++) { if (n < 10) /* number of elements read is 9 */ if (outdata[n] != sdata[j]) { fprintf(stderr, "line %d, wrong value: should be %d, got %d\n", __LINE__, sdata[j], outdata[n]); num_errs++; } } } /* why do we set calibration info and then use SDgetcal() on dataset 'DataSetGamma' ? */ cal = 1.0; cale = 5.0; ioff = 3.0; ioffe = 2.5; nt = DFNT_INT8; status = SDgetcal(newsds3, &cal, &cale, &ioff, &ioffe, &nt); CHECK(status, FAIL, "SDgetcal"); /* Verify calibration data for data set 'DataSetGamma' */ if (!H4_DBL_ABS_EQUAL(cal, 1.0)) { fprintf(stderr, "Wrong calibration info\n"); num_errs++; } if (!H4_DBL_ABS_EQUAL(cale, 5.0)) { fprintf(stderr, "Wrong calibration info\n"); num_errs++; } if (!H4_DBL_ABS_EQUAL(ioff, 3.0)) { fprintf(stderr, "Wrong calibration info\n"); num_errs++; } if (!H4_DBL_ABS_EQUAL(ioffe, 2.5)) { fprintf(stderr, "Wrong calibration info\n"); num_errs++; } if (nt != DFNT_INT8) { fprintf(stderr, "Wrong calibration info\n"); num_errs++; } /* end access to data set 'DataSetAlpha' */ status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* end access to data set 'DataSetBeta' */ status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); /* end access to data set 'DataSetGamma' */ status = SDendaccess(newsds3); CHECK(status, FAIL, "SDendaccess"); /* Close access to file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* Close access to file 'test2.hdf' */ status = SDend(f2); CHECK(status, FAIL, "SDend"); /* * New set of tests?..... */ /* test SDsetfillmode */ /* test fixed size SDS */ /* create an empty SDS, set SD_NOFILL. Change the fill mode to SD_FILL, and write a slab of data */ /* open file 'test1.hdf' */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart (again)"); /* Set fill mode on file to not write out fill values */ status = SDsetfillmode(f1, SD_NOFILL); CHECK(status, FAIL, "SDsetfillmode: (SD_NOFILL)"); /* Create data set 'FIXED1' in file test1.hdf */ dimsize[0] = 5; dimsize[1] = 6; sdid = SDcreate(f1, "FIXED1", DFNT_INT32, 2, dimsize); CHECK(sdid, FAIL, "SDcreate:Fail to create data set 'FIXED1' in 'test1.hdf'"); for (int i = 0; i < 30; i++) idata[i] = i + 100; /* Set fill value attribute for data set 'FIXED1' using SDsetattr(). Same affect as using SDsetfillvalue(). */ fillval = -300; status = SDsetattr(sdid, "_FillValue", DFNT_INT32, 1, (void *)&fillval); /* can use SDsetfillvalue */ CHECK(status, FAIL, "SDsetattr"); /* Test get compression info when the data set is empty and not set to be compressed */ { comp_coder_t comp_type; /* type of compression */ comp_info cinfo; /* compression information */ status = SDgetcompinfo(sdid, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_NONE, "SDgetcompinfo"); } /* end access to data set 'FIXED1' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* get index of dataset in file 'test1.hdf' called 'FIXED1' */ index = SDnametoindex(f1, "FIXED1"); CHECK(index, FAIL, "SDnametoindex"); /* Select data set 'FIXED1' based on it's index */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect"); /* change the fill mode for the file back to writing out the fill values. */ status = SDsetfillmode(f1, SD_FILL); CHECK(status, FAIL, "SDsetfillmode"); /* Write data to data set 'FIXED1'. Note that SD_FILL mode is on. */ start[0] = 2; start[1] = 0; end[0] = 1; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata: (SD_FILL)"); /* Test get compression info when the data set is not empty and compressed */ { comp_coder_t comp_type; /* type of compression */ comp_info cinfo; /* compression information */ status = SDgetcompinfo(sdid, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_NONE, "SDgetcompinfo"); } /* end access to data set 'FIXED1' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* set the fill mode for 'test1.hdf' to no-fill */ status = SDsetfillmode(f1, SD_NOFILL); CHECK(status, FAIL, "SDsetfillmode (SD_NOFILL)"); /* create a data set 'FIXED' in file 'test1.hdf' */ sdid = SDcreate(f1, "FIXED", DFNT_INT32, 2, dimsize); CHECK(sdid, FAIL, "SDcreate:Failed to create data set 'FIXED' in file 'test1.hdf'"); for (int i = 0; i < 30; i++) idata[i] = i + 100; /* Set fill value for data set 'FIXED' using SDsetfillvalue() */ fillval = -300; status = SDsetfillvalue(sdid, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); /* write out the first 2 records to data set 'FIXED' with SD_NOFILL mode */ start[0] = 2; start[1] = 0; end[0] = 1; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata: (SD_NOFILL)"); /* end access to data set 'FIXED' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* open again, write record 4 with SD_FILL mode */ /* fill values already written out in the first SDwritedata, fillmode changes should not affect the fill values */ /* open file 'test1.hdf' */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart: test1.hdf"); /* Set fill mode to SD_FILL */ status = SDsetfillmode(f1, SD_FILL); CHECK(status, FAIL, "SDsetfillmode: (SD_FILL)"); /* get index of data set 'FIXED' */ index = SDnametoindex(f1, "FIXED"); CHECK(index, FAIL, "SDnametoindex: (FIXED)"); /* Select the data set 'FIXED' based on its index */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect: (FIXED)"); /* Get its fill value */ status = SDgetfillvalue(sdid, &readval); CHECK(status, FAIL, "SDgetfillvalue: (FIXED)"); VERIFY(readval, -300, "SDgetfillvalue"); /* Write record 4 */ start[0] = 4; start[1] = 0; end[0] = 1; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata (SD_FILL)"); /* end access to data set 'FIXED' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* read back and check fill values */ /* open file 'test1.hdf' back up */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart: test1.hdf"); /* get index of data set 'FIXED' */ index = SDnametoindex(f1, "FIXED"); CHECK(index, FAIL, "SDnametoindex (FIXED)"); /* Select the data set 'FIXED' based on its index */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect (FIXED)"); /* read data back in from data set 'FIXED' */ start[0] = 0; start[1] = 0; end[0] = 5; end[1] = 6; status = SDreaddata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDreaddata(FIXED)"); /* verify the data */ for (int i = 12; i < 18; i++) { if ((idata[i] != 100 + (i - 12)) || (idata[i + 12] != 100 + (i - 12))) { fprintf(stderr, "line %d, wrong value: should be %d, got %d %d\n", __LINE__, 100 + i - 12, (int)idata[i], (int)idata[i + 12]); num_errs++; } } for (int i = 18; i < 24; i++) { if (idata[i] == fillval) { fprintf(stderr, "line %d, wrong value: should not be %d, got %d\n", __LINE__, (int)fillval, (int)idata[i]); num_errs++; } } /* end access to data set 'FIXED' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* read back in data set 'FIXED1' , with fill values */ /* get index of data set 'FIXED1' from file 'test1.hdf' */ index = SDnametoindex(f1, "FIXED1"); CHECK(index, FAIL, "SDnametoindex (FIXED1)"); /* select dataset 'FIXED1' based on its index in the file */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect (FIXED1)"); /* read data from data set 'FIXED1' */ start[0] = 0; start[1] = 0; end[0] = 5; end[1] = 6; status = SDreaddata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDreaddata(FIXED)"); /* verify the data */ for (int i = 12; i < 18; i++) { if (idata[i] != (100 + (i - 12))) { fprintf(stderr, "line %d, wrong value: should be %d, got %d \n", __LINE__, 100 + i - 12, (int)idata[i]); num_errs++; } } for (int i = 18; i < 24; i++) { if (idata[i] != fillval) { fprintf(stderr, "line %d, wrong value: should be %d, got %d\n", __LINE__, (int)fillval, (int)idata[i]); num_errs++; } } /* end access to data set 'FIXED1' in file 'test1.hdf' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* * test UNLIMITED size SDS */ /* open file 'test1.hdf' */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart (file1)"); /* set fill mode to no-fill */ status = SDsetfillmode(f1, SD_NOFILL); CHECK(status, FAIL, "SDsetfillmode (SD_NOFILL)"); /* Set first dimension to UNLIMITED. Create data set 'UNLIMITED_SDS' in file 'test1.hdf' */ dimsize[0] = SD_UNLIMITED; dimsize[1] = 6; sdid = SDcreate(f1, "UNLIMITED_SDS", DFNT_INT32, 2, dimsize); CHECK(sdid, FAIL, "SDcreate:Failed to create data set 'UNLIMITED_SDS' in file 'test1.hdf'"); for (int i = 0; i < 24; i++) idata[i] = i; /* Set fill value for data set 'UNLIMITED_SDS' */ fillval = -300; status = SDsetfillvalue(sdid, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); /* write out the third record with SD_NOFILL mode on */ start[0] = 2; start[1] = 0; end[0] = 1; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata: (SD_NOFILL, UNLIMITED)"); /* end access to data set 'UNLIMITED_SDS' in file 'test1.hdf' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* Close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* open again, write record 4 with SD_FILL mode */ /* open file 'test1.hdf' again */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart: test1.hdf"); /* set fill mode to SD_FILL */ status = SDsetfillmode(f1, SD_FILL); CHECK(status, FAIL, "SDsetfillmode: (SD_FILL)"); /* get index of data set 'UNLIMITED_SDS' */ index = SDnametoindex(f1, "UNLIMITED_SDS"); CHECK(index, FAIL, "SDnametoindex: (UNLIMITED)"); /* select data set 'UNLIMITED_SDS' based on its index in the file */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect: (UNLIMITED)"); /* write 4?th record to data set */ start[0] = 4; start[1] = 0; end[0] = 1; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata: (SD_FILL)"); /* end access to data set 'UNLIMITED_SDS' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* read back and check fill values */ /* open file 'test1.hdf' again */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart: (test1.hdf)"); /* get index of data set 'UNLIMITED_SDS' */ index = SDnametoindex(f1, "UNLIMITED_SDS"); CHECK(index, FAIL, "SDnametoindex: (UNLIMITED_SDS)"); /* select data set 'UNLIMITED_SDS' based on it's index in the file */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect: (UNLIMITED_SDS)"); /* read data from data set 'UNLIMITED_SDS' */ start[0] = 0; start[1] = 0; end[0] = 5; end[1] = 6; status = SDreaddata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata(NO_FILL)"); /* verify the data */ for (int i = 12; i < 18; i++) { if ((idata[i] != (i - 12)) || (idata[i + 12] != (i - 12))) { fprintf(stderr, "line %d, wrong value for %d: should be %d, got %d\n", __LINE__, i - 12, (int)idata[i], (int)idata[i + 12]); num_errs++; } } for (int i = 18; i < 24; i++) { if (idata[i] != fillval) { fprintf(stderr, "line %d, wrong value: should be %d, got %d\n", __LINE__, (int)fillval, (int)idata[i]); num_errs++; } } /* end access to data set 'UNLIMITED_SDS' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* * test SDsetdimval_incomp() */ /* open file 'test1.hdf' */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart (file1)"); /* set first dimension to be UNLIMITED. Create data set 'dimval_1_compat' */ dimsize[0] = SD_UNLIMITED; dimsize[1] = 6; sdid = SDcreate(f1, "dimval_1_compat", DFNT_INT32, 2, dimsize); CHECK(sdid, FAIL, "SDcreate:Failed to create data set 'dimval_1_compat' in file 'test1.hdf'"); /* get handle for first dimension of data set 'dimval_1_compat' */ dimid = SDgetdimid(sdid, 0); CHECK(dimid, FAIL, "SDgetdimid"); /* get handle for second dimension of data set 'dimval_1_compat' */ dimid1 = SDgetdimid(sdid, 1); CHECK(dimid1, FAIL, "SDgetdimid"); /* set second dimension as being backward compatible, default is non-compatible */ status = SDsetdimval_comp(dimid1, SD_DIMVAL_BW_COMP); CHECK(status, FAIL, "SDsetdimval_comp"); for (int i = 0; i < 6; i++) scale[i] = i * 5; /* set the scale for the second dimension */ status = SDsetdimscale(dimid1, 6, DFNT_INT32, scale); CHECK(status, FAIL, "SDsetdimscale"); for (int i = 0; i < 24; i++) idata[i] = i; /* write data to data set 'dimval_1_compat' in file 'test1.hdf' */ start[0] = 0; start[1] = 0; end[0] = 4; end[1] = 6; status = SDwritedata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* end access to data set 'dimval_1_compat' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* read back and change dimval compatibility */ /* open file 'test1.hdf' again */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart: (again2)"); /* get index of data set 'dimval_1_compat' in file 'test1.hdf' */ index = SDnametoindex(f1, "dimval_1_compat"); CHECK(index, FAIL, "SDnametoindex: failed to get index for data set 'dimval_non_compat' in file 'test1.hdf'"); /* select data set 'dimval_1_compat' based on it's index in file */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect:Failed to select data set 'dimval_1_compat' in file 'test1.hdf'"); /* info on data set 'dimval_1_compat' */ status = SDgetinfo(sdid, name, (int32 *)&rank, dimsize, &nt, (int32 *)&nattrs); CHECK(status, FAIL, "SDgetinfo"); /* verify correctness of information */ if (rank != 2 || dimsize[0] != 4 || dimsize[1] != 6 || nt != DFNT_INT32) { fprintf(stderr, "SDgetinfo returned wrong values\n"); num_errs++; } /* get handle for first dimension of data set 'dimval_1_compat' */ dimid = SDgetdimid(sdid, 0); CHECK(dimid, FAIL, "SDgetdimid"); /* get dimension info for first dimension */ status = SDdiminfo(dimid, name, (int32 *)&dimsize[0], &nt, (int32 *)&nattrs); CHECK(status, FAIL, "SDdiminfo"); /* verify correctness of information */ if (dimsize[0] != SD_UNLIMITED || nt != 0) { fprintf(stderr, "SDdiminfo returned wrong values\n"); num_errs++; } /* is it backward non-compatible? */ status = SDisdimval_bwcomp(dimid); if (status != SD_DIMVAL_BW_INCOMP) { fprintf(stderr, "SDisdimvalcomp returned wrong value for dimension.\n"); num_errs++; } /* re-set first dimension as backward compatible */ status = SDsetdimval_comp(dimid, SD_DIMVAL_BW_COMP); CHECK(status, FAIL, "SDsetdimval_comp"); /* get handle for second dimension of data set 'dimval_1_compat' */ dimid1 = SDgetdimid(sdid, 1); CHECK(dimid1, FAIL, "SDgetdimid"); /* get dimension info for second dimension */ status = SDdiminfo(dimid1, name, (int32 *)&dimsize[1], &nt, (int32 *)&nattrs); CHECK(status, FAIL, "SDdiminfo"); /* verify correctness of information */ if (dimsize[1] != 6 || nt != DFNT_INT32) { fprintf(stderr, "Failed on SDgetinfo call\n"); num_errs++; } /* read data back from data set 'dimval_1_compat' */ status = SDreaddata(sdid, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* verify data */ for (int i = 0; i < 24; i++) { if (idata[i] != i) { fprintf(stderr, "line %d, wrong value: should be %d, got %d\n", __LINE__, i, (int)idata[i]); num_errs++; } } /* see if second dimension is backward compatible. should be compatible */ status = SDisdimval_bwcomp(dimid1); if (status != SD_DIMVAL_BW_COMP) { fprintf(stderr, "SDisdimvalcomp returned wrong value for dimension\n"); num_errs++; } /* re-set second dimension as backward non-compatible */ status = SDsetdimval_comp(dimid1, SD_DIMVAL_BW_INCOMP); CHECK(status, FAIL, "SDsetdimval_comp"); /* end access to data set 'dimval_1_compat' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); /* open one last time to check that NDG ref has been constant */ /* check SDsetdimval_compat */ /* open file 'test1.hdf' again */ f1 = SDstart(FILE1, DFACC_RDWR); CHECK(f1, FAIL, "SDstart (again3)"); /* get index of data set 'dimval_1_compat' in file 'test1.hdf' */ index = SDnametoindex(f1, "dimval_1_compat"); CHECK(index, FAIL, "SDnametoindex: failed to get index for data set 'dimval_1_compat' in file 'test1.hdf'"); /* select data set 'dimval_1_compat' based on it's index in file */ sdid = SDselect(f1, index); CHECK(sdid, FAIL, "SDselect:Failed to select data set 'dimval_1_compat' in file 'test1.hdf'"); /* info on data set 'dimval_1_compat' */ status = SDgetinfo(sdid, name, (int32 *)&rank, dimsize, &nt, (int32 *)&nattrs); CHECK(status, FAIL, "SDgetinfo"); /* verify correctness of information */ if (rank != 2 || dimsize[0] != 4 || dimsize[1] != 6 || nt != DFNT_INT32) { fprintf(stderr, "SDgetinfo returned wrong values\n"); num_errs++; } /* get handle for second dimension of data set 'dimval_1_compat' */ dimid1 = SDgetdimid(sdid, 1); CHECK(dimid1, FAIL, "SDgetdimid"); /* get dimension info for second dimension */ status = SDdiminfo(dimid1, name, (int32 *)&dimsize[1], &nt, (int32 *)&nattrs); CHECK(status, FAIL, "SDdiminfo"); /* verify correctness of information */ if (dimsize[1] != 6 || nt != DFNT_INT32) { fprintf(stderr, "Failed on SDgetinfo call\n"); num_errs++; } /* see if second dimensionis backward compatible. should be backward non-compatible */ status = SDisdimval_bwcomp(dimid1); if (status != SD_DIMVAL_BW_INCOMP) { fprintf(stderr, "SDisdimvalcomp returned wrong value\n"); num_errs++; } /* re-set second dimension as backward compatible */ status = SDsetdimval_comp(dimid1, SD_DIMVAL_BW_COMP); CHECK(status, FAIL, "SDsetdimval_comp"); /* end access to data set 'dimval_1_compat' */ status = SDendaccess(sdid); CHECK(status, FAIL, "SDendaccess"); /* * used saved ref at the beginning to retrieve the data set */ /* get the index of the data set to which this 'ref' belongs to */ index = SDreftoindex(f1, ndg_saved_ref); CHECK(index, FAIL, "SDreftoindex: failed to get index for 'ndg_saved_ref'"); /* get handle for this data set (DataSetAlpha) */ sdsid = SDselect(f1, index); CHECK(sdsid, FAIL, "SDselect: Failed to get handle for data set 'DataSetAlpha' "); /* check if ref of this is the same as the one saved earlier */ if (ndg_saved_ref != SDidtoref(sdsid)) { fprintf(stderr, "Saved NDG ref != to SDindextoref of same\n"); num_errs++; } /* end access to data set 'DataSetAlpha' in file 'test1.hdf' */ status = SDendaccess(sdsid); CHECK(status, FAIL, "SDendaccess"); /* close file 'test1.hdf' */ status = SDend(f1); CHECK(status, FAIL, "SDend"); #ifdef NBIT_TEST /* * Test the N-Bit storage stuff */ /* Create file 'nbit.hdf' */ fnbit = SDstart(NBITFILE, DFACC_CREATE); CHECK(fnbit, FAIL, "SDstart"); /* Create data set 'NBitDataSet' in file 'nbit.hdf' */ nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fnbit, "NBitDataSet", nt, 2, dimsize); CHECK(newsds, FAIL, "SDcreate:Failed to create a new data set('NBitDataSet') for n-bit testing"); /* Initialize data to write out */ for (int i = 0; i < 25; i++) idata[i] = i * 10; /* Promote the data set 'NBitDataSet' to an NBIT data set */ status = SDsetnbitdataset(newsds, 6, 7, FALSE, FALSE); CHECK(status, FAIL, "SDsetnbitdataset"); /* Write data to the NBIT data set 'NBitDataSet' */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* end access to NBIT data set 'NBitDataSet' */ status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush n-bit info to file. hmm... */ status = SDend(fnbit); CHECK(status, FAIL, "SDend"); /* read the n-bit data back in */ fnbit = SDstart(NBITFILE, DFACC_RDWR); CHECK(fnbit, FAIL, "SDstart (again)"); /* Select the NBIT data set back in, assume it is the first one */ newsds2 = SDselect(fnbit, 0); CHECK(newsds2, FAIL, "SDselect:Failed to select a data set for n-bit access"); /* read data back in from the NBIT data set */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); /* verify the data */ for (int i = 0; i < 25; i++) { if ((idata[i] & 0x7f) != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in n-bit dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } } /* end access to NBIT data set */ status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); /* close file 'nbit.hdf' */ status = SDend(fnbit); CHECK(status, FAIL, "SDend"); #endif /* NBIT_TEST */ #ifdef COMP_TEST /* * Test the compressed storage routines */ status = test_compression(); CHECK(status, FAIL, "test_compression"); num_errs = num_errs + status; #endif /* COMP_TEST */ #ifdef CHUNK_TEST status = test_chunk(); CHECK(status, FAIL, "test_chunk"); num_errs = num_errs + status; #endif /* CHUNK_TEST */ #ifdef NETCDF_READ_TEST status = test_netcdf_reading(); CHECK(status, FAIL, "test_netcdf_reading"); num_errs = num_errs + status; #endif /* NETCDF_READ_TEST */ /* Tests dimension functions (in tdim.c) */ status = test_dimensions(); num_errs = num_errs + status; /* Tests SDcheckempty (in temptySDSs.c) */ status = test_checkempty(); num_errs = num_errs + status; /* Tests attribute functions (in tattributes.c) */ status = test_attributes(); num_errs = num_errs + status; /* Tests SDgetdatasize (in tdatasizes.c) */ status = test_datasizes(); num_errs = num_errs + status; /* Tests getting SDS data information (in tdatainfo.c) */ status = test_datainfo(); num_errs = num_errs + status; /* Tests getting attribute and annotation data information (in tattdatainfo.c) */ status = test_att_ann_datainfo(); num_errs = num_errs + status; /* Tests SDidtype and V/VS APIs on vgroups/vdatas associated with an sds (in tidtypes.c) */ status = test_mixed_apis(); num_errs = num_errs + status; /* Tests miscellaneous file-related APIs (in tfiles.c) */ status = test_files(); num_errs = num_errs + status; /* BMR: Added a test routine dedicated for testing the behavior of * several functions when the SDS has rank=0. (in trank0.c) - 02/4/05 */ /* BMR: SDcreate fails on Copper when rank=0. EP decided to remove * this test until further study can be made on this feature. */ status = test_rank0(); num_errs = num_errs + status; /* Tests functionality related to SDS' properties (in tsdsprops.c) */ status = test_SDSprops(); num_errs = num_errs + status; /* Tests functionality related to coordinate variables (in tcoordvar.c) */ status = test_coordvar(); num_errs = num_errs + status; /* Tests functionality related to external data (in textdata.c) */ status = test_external(); num_errs = num_errs + status; /* Verifies that some functions will not fail even though SZIP library is not present or only decoder is available. */ status = test_szip_compression(); /* in tszip.c */ num_errs = num_errs + status; /* BMR: This test fails on some systems when the user are logged in * as root. We decided to comment it out until further work can be * attempted. (in tsd.c) 11/04/05 */ /* status = test_sd(); */ /* num_errs = num_errs + status; */ free(data); if (num_errs == 0) { printf("*** HDF-SD test passes ***\n"); return EXIT_SUCCESS; } else { printf("*** HDF-SD test fails ***\n"); return EXIT_FAILURE; } } hdf4-hdf4.3.1/mfhdf/test/hdftest.h000066400000000000000000000232631503061704500167120ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef HDFTEST_H #define HDFTEST_H #include #include #include /* The name of the test is printed by saying TESTING("something") which will * result in the string `Testing something' being flushed to standard output. * If a test passes, fails, or is skipped then the PASSED(), H4_FAILED(), or * SKIPPED() macro should be called. After H4_FAILED(), the caller * should print additional information to stdout indented by at least four * spaces. */ #define TESTING(WHAT) \ { \ printf("Testing %-62s", WHAT); \ fflush(stdout); \ } #define PASSED() \ do { \ puts(" PASSED"); \ fflush(stdout); \ } while (0) #define H4_FAILED() \ do { \ puts("*FAILED*"); \ fflush(stdout); \ } while (0) #define H4_WARNING() \ { \ puts("*WARNING*"); \ fflush(stdout); \ } #define SKIPPED() \ { \ puts(" -SKIP-"); \ fflush(stdout); \ } /* Check status value and print error message */ #define CHECK(status, fail_value, name) \ { \ if (status == fail_value) { \ fprintf(stderr, "*** Routine %s FAILED at line %d ***\n", name, __LINE__); \ num_errs++; \ } \ } /* Check status value and print error message, including index */ #define CHECK_IND(status, fail_value, name, index) \ { \ if (status == fail_value) { \ fprintf(stderr, "*** Routine %s FAILED at line %d for SDS index %d ***\n", name, __LINE__, \ index); \ num_errs++; \ } \ } /* Verify that a value is as expected and, if not, print error message */ #define VERIFY(item, value, test_name) \ { \ if (item != value) { \ fprintf(stderr, "*** UNEXPECTED VALUE from %s is %ld at line %4d in %s\n", test_name, \ (long)item, (int)__LINE__, __FILE__); \ num_errs++; \ } \ } /* Verify that a value of type char* is as expected and, if not, print error message */ #define VERIFY_CHAR(item, value, test_name) \ { \ if (strcmp(item, value) != 0) { \ fprintf(stderr, "*** UNEXPECTED VALUE from %s is <%s> at line %4d in %s\n", test_name, item, \ (int)__LINE__, __FILE__); \ num_errs++; \ } \ } /* Used to validate that 'buffer' has been successfully allocated */ #define CHECK_ALLOC(buffer, buf_name, func_name) \ { \ if (buffer == NULL) { \ fprintf(stderr, "in %s: space allocation for %s failed. Terminated!\n", func_name, buf_name); \ exit(1); \ } \ } /* * Methods to compare the equality of floating-point values: * * 1. H4_XXX_ABS_EQUAL - check if the difference is smaller than the * Epsilon value. The Epsilon values, FLT_EPSILON, DBL_EPSILON, * and LDBL_EPSILON, are defined by compiler in float.h. * * HDF5 (from whence these macros came) also includes macros that * use relative error. Those will be brought over only if needed. */ #define H4_FLT_ABS_EQUAL(X, Y) (fabsf((X) - (Y)) < FLT_EPSILON) #define H4_DBL_ABS_EQUAL(X, Y) (fabs((X) - (Y)) < DBL_EPSILON) #define H4_LDBL_ABS_EQUAL(X, Y) (fabsl((X) - (Y)) < LDBL_EPSILON) /*************************** Utility Functions ***************************/ /* Just return the srcdir path */ const char *get_srcdir(void); /* Append the test file name to the srcdir path and return the whole string */ const char *get_srcdir_filename(const char *filename); /* Generates the correct name of the source path */ intn make_sourcepath(char *src_path, unsigned int size); /* Calls SDcreate, SDwritedata, and SDendaccess */ int32 make_SDS(int32 sd_id, char *sds_name, int32 type, int32 rank, int32 *dim_sizes, int32 unlim_dim, void *written_data); /* Calls SDcreate, SDsetcompress, SDwritedata, and SDendaccess */ int32 make_CompSDS(int32 sd_id, char *sds_name, int32 type, int32 rank, int32 *dim_sizes, void *written_data); /* Calls SDcreate, SDsetexternalfile, SDwritedata, and SDendaccess */ int32 make_Ext3D_SDS(int32 sd_id, char *sds_name, int32 type, int32 rank, int32 *dim_sizes, void *written_data, int32 offset, char *ext_file_name); /* Calls get_SDSbyName, SDwritedata, and SDendaccess */ int32 append_Data2SDS(int32 sd_id, char *sds_name, int32 *start, int32 *edges, void *ap_data); /* Calls SDgetdatasize then verify the size against data_size */ intn verify_datasize(int32 sds_id, int32 data_size, char *sds_name); /* Verifies the unlimited dimension's size and the variable's data. */ int verify_info_data(int32 sds_id, int32 expected_dimsize, int16 *result); /* Find and open an SDS by name */ int32 get_SDSbyName(int32 sd_id, const char *sds_name); #endif /* HDFTEST_H */ hdf4-hdf4.3.1/mfhdf/test/sds_szipped.dat000066400000000000000000000060221503061704500201130ustar00rootroot00000000000000È j\B¾ Æ( ⟫ ª …<­ Á!« ⪠æ<­ "!«ÿÿÿÿÿÿÿÿª C7j z½ ~Ð ”­ ¤=­ á0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHDF Version 4.2 Release 3-snap0, January 31, 2008@P„ š @ @ @ @P ŠT¦ŠTÑJš(I"•$ŠH¡$ŠH¡$ŠT’)RH¥I"öFO‘‘Oddùð #include #include "mfhdf.h" #include "hdftest.h" #ifdef H4_HAVE_SYS_TYPES_H #include /* Windows off_t */ #endif static intn test_attrs(); static intn test_dfannots(); static intn test_dfsdattrs(); /* Reads character string data from HDF file without the use of HDF4 library */ intn readnoHDF_char(const char *filename, const int32 offset, const int32 length, const char *orig_buf); #define ATTR_FILE "attdatainfo.hdf" /* data file */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 #define ISFIRST (int)1 #define NOTFIRST (int)0 /**************************************************************************** Name: test_attrs() - tests getting attribute's data info Description: This routine creates and writes data to non-special SDSs and verifies data and data information with SDgetattdatainfo. The tests include the following SDSs: - a 2-dim 5x8 element SDS, float32, with no data - a 1-dim 10-element SDS, int32, with 10 values - a 2-dim 5x8 element SDS, float32, with 5x8 values - a 1-dim 20-element SDS, char, with 20 values SDgetattdatainfo will retrieve the number of blocks in the data sets and the offsets and lengths of the blocks. Then the data will be read back from the file at the previously retrieved offsets/lengths, without the use of the HDF4 library, and will be verified against the original data buffers. ****************************************************************************/ #define SDS1_NAME "First SDS" #define SDS2_NAME "Second SDS" #define RANK1 1 #define RANK2 2 #define LENGTH1_X 10 #define LENGTH2_X 5 #define LENGTH2_Y 8 #define LENGTH3_X 21 #define FILE_ATTR_NAME "File_contents" #define SDS_ATTR_NAME1 "Valid_range 1" #define SDS_ATTR_NAME2 "Valid_range 2" #define DIM_ATTR_NAME "Dim_metric" static intn test_attrs() { int32 sd_id, sds_id, dim_id, dim_idx, att_idx; int32 dimsizes[2], starts[2], edges[2]; int32 data1[LENGTH1_X]; float data2[LENGTH2_X][LENGTH2_Y]; char sds_name[20]; int32 n_values, nattrs; int32 offset = 0, length = 0; char8 file_values[] = "Storm_track_data"; float32 sds_values[2] = {2., 10.}; char8 dim_values[] = "Seconds"; intn status; int ii, jj; intn num_errs = 0; /* number of errors so far */ /* Create the file and initialize the SD interface */ sd_id = SDstart(ATTR_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_attrs: SDstart"); /* Set an attribute that describes the file contents. */ n_values = 16; status = SDsetattr(sd_id, FILE_ATTR_NAME, DFNT_CHAR8, n_values, (void *)file_values); CHECK(status, FAIL, "SDsetattr") /*************************************************************** Create and write non-special SDSs ***************************************************************/ /* Create a 2x2 data set called "EmptyDataset" */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; /* * Create a 1-dim 10-element SDS, type int32, then write 10 values * to it */ dimsizes[0] = LENGTH1_X; sds_id = SDcreate(sd_id, SDS1_NAME, DFNT_INT32, RANK1, dimsizes); CHECK(sds_id, FAIL, "SDcreate"); for (ii = 0; ii < LENGTH1_X; ii++) data1[ii] = 1000 * ii; starts[0] = 0; edges[0] = LENGTH1_X; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data1); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Assign two attributes to the first SDS. */ n_values = 2; status = SDsetattr(sds_id, SDS_ATTR_NAME1, DFNT_FLOAT32, n_values, (void *)sds_values); CHECK(status, FAIL, "SDsetattr") n_values = 7; status = SDsetattr(sds_id, SDS_ATTR_NAME2, DFNT_CHAR8, n_values, (void *)dim_values); CHECK(status, FAIL, "SDsetattr") /* * Create a 2-dim 5x8 element SDS, type float32, then write 5x8 values * to it */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, SDS2_NAME, DFNT_FLOAT32, RANK2, dimsizes); CHECK(sds_id, FAIL, "SDcreate"); for (ii = 0; ii < LENGTH2_X; ii++) for (jj = 0; jj < LENGTH2_Y; jj++) data2[ii][jj] = 500.50 * (ii + jj); starts[0] = 0; starts[1] = 0; edges[0] = LENGTH2_X; edges[1] = LENGTH2_Y; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data2); CHECK(status, FAIL, "SDwritedata"); /* Get the the second dimension identifier of the SDS. */ dim_idx = 1; dim_id = SDgetdimid(sds_id, dim_idx); CHECK(dim_id, FAIL, "SDgetdimid") /* Set an attribute of the dimension that specifies the dimension metric. */ n_values = 7; status = SDsetattr(dim_id, DIM_ATTR_NAME, DFNT_CHAR8, n_values, (void *)dim_values); CHECK(status, FAIL, "SDsetattr") status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /*********************************************************************** Read data info for later accessing data without the use of HDF4 library ***********************************************************************/ /* Re-open the file */ sd_id = SDstart(ATTR_FILE, DFACC_RDWR); CHECK(sd_id, FAIL, "test_attrs: SDstart"); /* Open the second data set, verify that number of data block is 1, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "test_attrs: SDselect SDS index 1"); /* Get SDS' rank */ status = SDgetinfo(sds_id, sds_name, NULL, NULL, NULL, &nattrs); CHECK(status, FAIL, "test_attrs: SDgetinfo SDS index 0"); VERIFY(nattrs, 2, "test_attrs: SDgetinfo SDS index 0"); for (att_idx = 0; att_idx < nattrs; att_idx++) { status = SDgetattdatainfo(sds_id, att_idx, &offset, &length); CHECK(status, FAIL, "test_attrs: SDgetattdatainfo"); } status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /****************************************************************** Read data using previously obtained data info without HDF4 library ******************************************************************/ /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_attrs */ /*************************************************************************** Test getting data info of annotations from DFAN There are several utility functions to help generating and verifying the data. The actual test function is test_dfannots() that follows those. ***************************************************************************/ #define DFAN_NDG_FILE "tdfanndg.hdf" #define DFAN_SDG_FILE "tdfansdg.hdf" /* only for SDG annotation tests */ #define MAXLEN_LAB 50 #define MAXLEN_DESC 200 #define ROWS 10 #define COLS 10 #define REPS 2 /* Utility functions: */ /* to generate data set's data */ static void gen2Dfloat(int height, int width, float *data); /* to verify data of labels and descriptions */ static intn check_lab_desc(char *fname, uint16 tag, uint16 ref, char *label, char *desc); /**************************************************************** ** ** gen2Dfloat: generate 2-D data array ** ****************************************************************/ static void gen2Dfloat(int height, int width, float *data) { int i, j; float *pdata; /* store one value per row, increasing by one for each row */ pdata = data; for (i = 0; i < height; i++) for (j = 0; j < width; j++) *pdata++ = (float)(i + 1); } /**************************************************************** ** ** check_lab_desc: read and compare label and description ** with expected ones ** ****************************************************************/ static intn check_lab_desc(char *fname, uint16 tag, uint16 ref, char *label, char *desc) { int32 inlablen, indesclen, ret; char inlabel[MAXLEN_LAB], *indesc; intn num_errs = 0; inlablen = DFANgetlablen(fname, tag, ref); CHECK(inlablen, FAIL, "check_lab_desc: DFANgetlablen"); ret = DFANgetlabel(fname, tag, ref, inlabel, MAXLEN_LAB); CHECK(ret, FAIL, "check_lab_desc: DFANgetlabel"); VERIFY_CHAR(inlabel, label, "check_lab_desc: DFANgetlabel"); indesclen = DFANgetdesclen(fname, tag, ref); CHECK(indesclen, FAIL, "check_lab_desc: DFANgetdesclen"); if (indesclen >= 0) { indesc = (char *)malloc(indesclen + 1); ret = DFANgetdesc(fname, tag, ref, indesc, MAXLEN_DESC); CHECK(ret, FAIL, "check_lab_desc: DFANgetdesc"); indesc[indesclen] = '\0'; VERIFY_CHAR(indesc, desc, "check_lab_desc: DFANgetdesc"); free(indesc); } return (num_errs); } /**************************************************************** ** ** add_sdfile_annotations: Adds file labels and descriptions with ** DFAN API, then reads them back and verifies that they are ** written correctly. This function also creates the file. ** ****************************************************************/ intn add_sdfile_annotations() { int32 file_id; char labels[2][MAXLEN_LAB], descs[2][MAXLEN_DESC], tempstr[MAXLEN_DESC]; intn ret; intn num_errs = 0; /* set up file labels and descriptions */ strcpy(labels[0], "File Label #1"); strcpy(labels[1], "File Label #2"); strcpy(descs[0], "File Descr #1: This is a file label, added\n"); strcat(descs[0], " by the DFAN interface...**END SDS 1 DESCR**\n"); strcpy(descs[1], "File Descr #2: This is another file label added\n"); strcat(descs[1], " by the DFAN API as well.**END SDS 2 DESCR**\n"); /******** Write file labels and descriptions *********/ file_id = Hopen(DFAN_NDG_FILE, DFACC_CREATE, 0); if (file_id == FAIL) printf("\nUnable to open file %s for writing.\n\n", DFAN_NDG_FILE); ret = DFANaddfid(file_id, labels[0]); CHECK(ret, FAIL, "DFANaddfid"); ret = DFANaddfid(file_id, labels[1]); CHECK(ret, FAIL, "DFANaddfid"); ret = DFANaddfds(file_id, descs[0], (int32)strlen(descs[0])); CHECK(ret, FAIL, "DFANaddfds"); ret = DFANaddfds(file_id, descs[1], (int32)strlen(descs[1])); CHECK(ret, FAIL, "DFANaddfds"); if (FAIL == Hclose(file_id)) printf("\nUnable to close file %s after writing.\n\n", DFAN_NDG_FILE); /******** Read file labels *********/ file_id = Hopen(DFAN_NDG_FILE, DFACC_READ, 0); if (file_id == FAIL) printf("\n\nUnable to open file %s for reading.\n\n", DFAN_NDG_FILE); ret = DFANgetfidlen(file_id, ISFIRST); CHECK(ret, FAIL, "DFANgetfidlen"); VERIFY(ret, strlen(labels[0]), "DFANgetfidlen first file label"); ret = DFANgetfid(file_id, tempstr, MAXLEN_LAB, ISFIRST); CHECK(ret, FAIL, "DFANgetfid"); VERIFY_CHAR(labels[0], tempstr, "DFANgetfid first file label"); ret = DFANgetfidlen(file_id, NOTFIRST); CHECK(ret, FAIL, "DFANgetfidlen"); VERIFY(ret, strlen(labels[1]), "DFANgetfidlen second file label"); ret = DFANgetfid(file_id, tempstr, MAXLEN_LAB, NOTFIRST); CHECK(ret, FAIL, "DFANgetfid"); VERIFY_CHAR(labels[1], tempstr, "DFANgetfid second file label"); /******** Read file descriptions *********/ ret = DFANgetfdslen(file_id, ISFIRST); CHECK(ret, FAIL, "DFANgetfdslen"); VERIFY(ret, strlen(descs[0]), "DFANgetfdslen first file description"); ret = DFANgetfds(file_id, tempstr, MAXLEN_DESC, ISFIRST); CHECK(ret, FAIL, "DFANgetfds"); VERIFY_CHAR(tempstr, descs[0], "DFANgetfds first file description"); ret = DFANgetfdslen(file_id, NOTFIRST); CHECK(ret, FAIL, "DFANgetfdslen"); VERIFY(ret, strlen(descs[1]), "DFANgetfdslen second file description"); ret = DFANgetfds(file_id, tempstr, MAXLEN_DESC, NOTFIRST); CHECK(ret, FAIL, "DFANgetfds"); VERIFY_CHAR(tempstr, descs[1], "DFANgetfds second file description"); if (FAIL == Hclose(file_id)) printf("\n\nUnable to close file %s after reading.\n\n", DFAN_NDG_FILE); return (num_errs); } /* add_sdfile_annotations */ /**************************************************************** ** ** add_sdsNDG_annotations: Adds data labels and descriptions with ** DFAN API, then reads them back and verifies that they are ** written correctly. The data object in this function is ** DFTAG_NDG. ** ****************************************************************/ intn add_sdsNDG_annotations() { char labels[2][MAXLEN_LAB], descs[2][MAXLEN_DESC]; uint16 refnum; int32 ret; intn rank; int jj; int32 dimsizes[2]; float *data; intn num_errs = 0; /* set up object labels and descriptions */ strcpy(labels[0], "Object label #1: sds"); strcpy(labels[1], "Object label #2: sds"); strcpy(descs[0], "Object Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 \n"); strcat(descs[0], " 13 14 15 16 17 18 19 20 **END SDS 1 DESCR**\n"); strcpy(descs[1], "Object Descr #2: a b c d e f g h i j k l m n o p \n"); strcat(descs[1], " q r s t u v w x y z ??? **END SDS 2 DESCR**\n"); /***** generate float array *****/ data = (float *)malloc(ROWS * COLS * sizeof(float)); dimsizes[0] = ROWS; dimsizes[1] = COLS; /* Generate data for data sets */ gen2Dfloat(ROWS, COLS, data); /* Set rank and dimension sizes for subsequent SDSs */ DFSDsetdims(2, dimsizes); /******** Write labels and descriptions *********/ /* Write REPS data sets and add a label and a description to each data set */ for (jj = 0; jj < REPS; jj++) { /* write out scientific data set */ ret = DFSDadddata(DFAN_NDG_FILE, 2, dimsizes, (void *)data); CHECK(ret, FAIL, "add_sdsNDG_annotations: DFSDadddata"); refnum = DFSDlastref(); /* Add label and description to this data set */ ret = DFANputlabel(DFAN_NDG_FILE, DFTAG_NDG, refnum, labels[jj]); CHECK(ret, FAIL, "add_sdsNDG_annotations: DFANputlabel"); ret = DFANputdesc(DFAN_NDG_FILE, DFTAG_NDG, refnum, descs[jj], (int32)strlen(descs[jj])); CHECK(ret, FAIL, "add_sdsNDG_annotations: DFANputdesc"); } /******** Read labels and descriptions *********/ for (jj = 0; jj < REPS; jj++) { ret = DFSDgetdims(DFAN_NDG_FILE, &rank, dimsizes, 3); CHECK(ret, FAIL, "add_sdsNDG_annotations: DFSDgetdims"); refnum = DFSDlastref(); /* Verify data of labels and descriptions */ num_errs = check_lab_desc(DFAN_NDG_FILE, DFTAG_NDG, refnum, labels[jj], descs[jj]); } free(data); return (num_errs); } /* add_sdsNDG_annotations */ /**************************************************************** ** ** add_sdsSDG_annotations: Adds data labels and descriptions with ** DFAN API, then reads them back and verifies that they are ** written correctly. The data object in this function is ** DFTAG_SDG. ** ****************************************************************/ intn add_sdsSDG_annotations() { char labsds[MAXLEN_LAB], descsds[MAXLEN_DESC], descris[MAXLEN_DESC]; uint16 refnum; intn rank; int j; int32 dimsizes[2]; float *data; /* set up object labels and descriptions */ strcpy(labsds, "sdsSDG label #1: sds"); strcpy(descsds, "sdsSDG Descr #1: 1 2 3 4 5 6 7 8 9 10 11 12 \n"); strcat(descsds, " 13 14 15 16 17 18 19 20 **END SDS DESCR**\n"); strcpy(descris, "sdsSDG Descr #2: A B C D E F G H I J K L \n"); strcat(descris, " M N O **END IMAGE DESCR **\n"); /***** generate float array and image *****/ data = (float *)malloc(ROWS * COLS * sizeof(float)); dimsizes[0] = ROWS; dimsizes[1] = COLS; gen2Dfloat(ROWS, COLS, data); DFSDsetdims(2, dimsizes); /******** Write labels and descriptions *********/ for (j = 0; j < REPS; j++) { /* write out scientific data set */ DFSDadddata(DFAN_SDG_FILE, 2, dimsizes, (void *)data); /* write out annotations for 2 out of every 3 */ refnum = DFSDlastref(); DFANputlabel(DFAN_SDG_FILE, DFTAG_SDG, refnum, labsds); DFANputdesc(DFAN_SDG_FILE, DFTAG_SDG, refnum, descsds, (int32)strlen(descsds)); } /******** Read labels and descriptions *********/ for (j = 0; j < REPS; j++) { DFSDgetdims(DFAN_SDG_FILE, &rank, dimsizes, 3); refnum = DFSDlastref(); if ((j % 3) != 0) /* read in annotations for 2 out of every 3 */ check_lab_desc(DFAN_SDG_FILE, DFTAG_SDG, refnum, labsds, descsds); } free(data); return 0; } /**************************************************************** ** ** get_ann_datainfo: Gets data info of annotations and verifies ** against the provided offsets/lengths. ** ****************************************************************/ intn get_ann_datainfo(int32 id, ann_type annot_type, int32 *chk_offsets, int32 *chk_lengths) { int32 *offsetarray = NULL, *lengtharray = NULL; int32 num_annots; intn ii, num_errs = 0; num_annots = SDgetanndatainfo(id, annot_type, 0, NULL, NULL); CHECK(num_annots, FAIL, "get_ann_datainfo: SDgetanndatainfo annot_type with NULL buffers"); if (num_annots > 0) { offsetarray = (int32 *)malloc(num_annots * sizeof(int32)); if (offsetarray == NULL) exit(-1); lengtharray = (int32 *)malloc(num_annots * sizeof(int32)); if (lengtharray == NULL) exit(-1); num_annots = SDgetanndatainfo(id, annot_type, num_annots, offsetarray, lengtharray); CHECK(num_annots, FAIL, "get_ann_datainfo: SDgetanndatainfo"); /* Verify offsets and lengths of annotations */ for (ii = 0; ii < num_annots; ii++) { VERIFY(offsetarray[ii], chk_offsets[ii], "get_ann_datainfo: SDgetanndatainfo"); VERIFY(lengtharray[ii], chk_lengths[ii], "get_ann_datainfo: SDgetanndatainfo"); } free(offsetarray); free(lengtharray); } return (num_errs); } /*************************************************************************** Name: test_dfannots() - tests getting data info of annotations from DFAN Description: This routine uses several utility routines to - create various file's and data's annotations - retrieve and verify the offsets/lengths of these annotations ***************************************************************************/ static int test_dfannots(void) { int32 sd_id, sds_id, sds_index; intn status; int32 n_datasets, n_file_attr; int32 chk_offsets[10], chk_lengths[10]; intn num_errs = 0; /* Add file annotations */ status = add_sdfile_annotations(); if (status > 0) fprintf(stderr, "test_dfannots: errors while adding file annotations\n"); /* Add SDS annotations via NDG */ status = add_sdsNDG_annotations(); if (status > 0) fprintf(stderr, "test_dfannots: errors while adding NDG annotations\n"); /* Add SDS annotations via SDG in a separate file */ status = add_sdsSDG_annotations(); if (status > 0) fprintf(stderr, "test_dfannots: errors while adding SDG annotations\n"); /********************************************************************** * Using SD API to get offset/length of data from file annotations * * and data set annotations in file DFAN_NDG_FILE to test NDG annots * **********************************************************************/ /* Open the file and initialize the SD interface. */ sd_id = SDstart(DFAN_NDG_FILE, DFACC_READ); CHECK(sd_id, FAIL, "test_dfannots: SDstart"); /* BMR: need better checking algorithm here! */ /* Get data info of file labels and verify them against chk_offsets and chk_lengths */ chk_offsets[0] = 307; chk_offsets[1] = 294; /* verified with UNIX command */ chk_lengths[0] = 13; chk_lengths[1] = 13; /* "od --format=a" */ status = get_ann_datainfo(sd_id, AN_FILE_LABEL, chk_offsets, chk_lengths); if (status > 0) fprintf(stderr, "test_dfannots: errors while verifying annotations\n"); /* Get data info of file descs and verify them against chk_offsets and chk_lengths */ chk_offsets[0] = 414; chk_offsets[1] = 320; /* verified with UNIX command */ chk_lengths[0] = 99; chk_lengths[1] = 94; /* "od --format=a" */ status = get_ann_datainfo(sd_id, AN_FILE_DESC, chk_offsets, chk_lengths); if (status > 0) fprintf(stderr, "test_dfannots: errors while verifying annotations\n"); /* Obtain information about the file. */ status = SDfileinfo(sd_id, &n_datasets, &n_file_attr); CHECK(status, FAIL, "test_dfannots: SDfileinfo"); /* Get annotation information of each SDS in the file. */ for (sds_index = 0; sds_index < n_datasets; sds_index++) { sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_dfannots: SDselect"); /* Only data sets have annotations */ if (!SDiscoordvar(sds_id)) { /* Get data info of object descs and verify them against chk_offsets and chk_lengths */ if (sds_index == 2) /* first data set, not dimension var */ { chk_offsets[0] = 987; /* verified with UNIX */ chk_lengths[0] = 96; /* command "od --format=a" */ } else if (sds_index == 5) /* second data set, not dimension var */ { chk_offsets[0] = 1729; /* verified with UNIX */ chk_lengths[0] = 101; /* command "od --format=a" */ } status = get_ann_datainfo(sds_id, AN_DATA_DESC, chk_offsets, chk_lengths); if (status > 0) fprintf(stderr, "test_dfannots: errors while verifying annotations\n"); /* Get data info of object labels and verify them against chk_offsets and chk_lengths */ if (sds_index == 2) /* first data set */ { chk_offsets[0] = 963; /* verified with UNIX */ chk_lengths[0] = 20; /* command "od --format=a" */ } else if (sds_index == 5) /* second data set */ { chk_offsets[0] = 1705; /* verified with UNIX */ chk_lengths[0] = 20; /* command "od --format=a" */ } status = get_ann_datainfo(sds_id, AN_DATA_LABEL, chk_offsets, chk_lengths); if (status > 0) fprintf(stderr, "test_dfannots: errors while verifying annotations\n"); } /* SDS is not coordinate var */ /* Terminate access to the selected data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_dfannots: SDendaccess"); } /* for each data set */ /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "test_dfannots: SDend"); /********************************************************************** * Using SD API to get offset/length of data from file annotations * * and data set annotations in file DFAN_NDG_FILE to test NDG annots * * -Not doing now because there are no such data in NASA files and we * * are running out of time. * **********************************************************************/ /* Return the number of errors that's been kept track of so far */ return num_errs; } /*************************************************************************** Name: test_dfsdattrs() - tests getting data info of attributes from DFSD Description: This routine creates and writes a dataset and several attributes with the DFSD API to test the API function SDgetoldattdatainfo. In the DFSD API, an SDS attribute is stored using tag/ref approach, unlike the newer attributes which were introduced in Apr, 1993 and are stored in Vdatas. The dimension attributes are stored following the SDS attribute. All attributes are separated by null characters. In this test, SDgetoldattdatainfo will retrieve the offsets and lengths of several attributes. Then the data will be read back from the file at the retrieved offsets/lengths, without the use of the HDF4 library, and will be verified against the original data buffers. ***************************************************************************/ #define OLDATTFILE "tdfsdatts.hdf" #define XX 6 #define YY 6 /* Compares a string against the original buffer, returns 0 if equals, or -1 */ intn compare(const char *outstring, const char *instring); static intn test_dfsdattrs() { int i, j, ret; intn rank; int32 dims[2]; float32 f32[XX][YY], tf32[XX][YY]; intn info_count = 0; int32 offset = 0, length = 0; int32 fid = -1, sdsid = -1, dimid = -1; intn status = 0; intn num_errs = 0; /* number of errors so far */ const char *datalabel = "Datalabel", *dataunit = "Dataunit", *datafmt = "Datafmt", *coordsys = "coordsys"; char in_datalabel[256], in_dataunit[256], in_datafmt[256], in_coordsys[256]; const char *dimlabels[2], *dimunits[2], *dimfmts[2]; char in_dimlabels[2][256], in_dimunits[2][256], in_dimfmts[2][256]; /* float32 scplnf32[XX] = {(float32) 0.0, (float32) 100.0, (float32) 0.1, (float32) 101.0, (float32) 0.2, (float32) 102.0}; float32 scrowf32[YY] = {(float32) 0.0, (float32) 10.0, (float32) 20.0, (float32) 1.0, (float32) 11.0, (float32) 21.0}; uncomment these when the calls to DFSDsetdimscale are uncommented. */ rank = 2; dims[0] = XX; dims[1] = YY; dimlabels[0] = ""; dimunits[0] = "c_dim1_unit"; dimfmts[0] = "c_dim1_fmt"; dimlabels[1] = "c_dim2_label"; dimunits[1] = "c_dim2_unit"; dimfmts[1] = "c_dim2_fmt"; for (i = 0; i < XX; i++) { for (j = 0; j < YY; j++) { f32[i][j] = (float32)((i * XX) + j); /* range: 0 ~ 4-billion */ } } ret = DFSDsetdims(rank, dims); CHECK(ret, FAIL, "DFSDsetdims"); /* individual files */ ret = DFSDsetNT(DFNT_NFLOAT32); CHECK(ret, FAIL, "DFSDsetNT"); ret = DFSDsetdims(rank, dims); CHECK(ret, FAIL, "DFSDsetdims"); /* Set attributes to the dataset and its dimensions */ ret = DFSDsetdatastrs(datalabel, dataunit, datafmt, coordsys); CHECK(ret, FAIL, "DFSDsetdatastrs"); ret = DFSDsetdimstrs(1, dimlabels[0], dimunits[0], dimfmts[0]); CHECK(ret, FAIL, "DFSDsetdimstrs"); ret = DFSDsetdimstrs(2, dimlabels[1], dimunits[1], dimfmts[1]); CHECK(ret, FAIL, "DFSDsetdimstrs"); /* Note: Setting attribute to a dimension with DFSD API doesn't make the dimension become a coordinate variable, only setting dimension scale does. Thus, when no setting scale is done, the dumper will not show the dimension variables. However, the dimension attributes are there and SDgetoldattdatainfo will still find them. For a demo, the two calls to DFSDsetdimscale can be uncommented, then dumper will show the dimension variables and their attributes. -BMR, Mar 13, 2011 */ /* Set dimension scales */ /* ret = DFSDsetdimscale(1, dims[0], (void *) scplnf32); CHECK(ret, FAIL, "DFSDsetdimscale"); ret = DFSDsetdimscale(2, dims[1], (void *) scrowf32); CHECK(ret, FAIL, "DFSDsetdimscale"); */ /* Write/Read data to/from SDS */ ret = DFSDputdata(OLDATTFILE, rank, dims, (void *)f32); CHECK(ret, FAIL, "DFSDputdata"); ret = DFSDgetdata(OLDATTFILE, rank, dims, (void *)tf32); CHECK(ret, FAIL, "DFSDgetdata"); /* Read attributes from the dataset and its dimensions */ ret = DFSDgetdatastrs(in_datalabel, in_dataunit, in_datafmt, in_coordsys); CHECK(ret, FAIL, "DFSDgetdatastrs"); ret = DFSDgetdimstrs(1, in_dimlabels[0], in_dimunits[0], in_dimfmts[0]); CHECK(ret, FAIL, "DFSDgetdimstrs"); ret = DFSDgetdimstrs(2, in_dimlabels[1], in_dimunits[1], in_dimfmts[1]); CHECK(ret, FAIL, "DFSDgetdimstrs"); /* Verify a few */ ret = compare(in_datalabel, datalabel); /* SDS' label */ CHECK(ret, FAIL, "compare"); ret = compare(in_dimunits[0], dimunits[0]); /* first dim's units */ CHECK(ret, FAIL, "compare"); ret = compare(in_dimlabels[1], dimlabels[1]); /* first dim's label */ CHECK(ret, FAIL, "compare"); /* Using SD API to get the offsets and lengths of various attributes, then read them from the file without the use of HDF4 library and verify them against the original buffers */ /* Open the file with SD API */ fid = SDstart(OLDATTFILE, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Get the first dataset (and only one) */ sdsid = SDselect(fid, 0); CHECK(sdsid, FAIL, "SDselect"); /* Test SDgetoldattdatainfo with dataset's attribute string _HDF_LongName */ info_count = SDgetoldattdatainfo(0, sdsid, _HDF_LongName, &offset, &length); CHECK(info_count, FAIL, "SDgetoldattdatainfo"); status = readnoHDF_char(OLDATTFILE, offset, length, datalabel); CHECK(status, FAIL, "readnoHDF_char"); /* Test with attribute string _HDF_LongName of dataset's first dimension */ dimid = SDgetdimid(sdsid, 0); CHECK(dimid, FAIL, "SDgetdimid"); info_count = SDgetoldattdatainfo(dimid, sdsid, _HDF_LongName, &offset, &length); CHECK(info_count, FAIL, "SDgetoldattdatainfo"); /* This dimension doesn't have an _HDF_LongName attribute, so length must be 0, and readnoHDF_char will not be needed to verify the attribute values */ VERIFY(length, 0, "SDgetoldattdatainfo"); /* Test with attribute string _HDF_Format of dataset's second dimension */ dimid = SDgetdimid(sdsid, 1); CHECK(dimid, FAIL, "SDgetdimid"); info_count = SDgetoldattdatainfo(dimid, sdsid, _HDF_Format, &offset, &length); CHECK(info_count, FAIL, "SDgetoldattdatainfo"); status = readnoHDF_char(OLDATTFILE, offset, length, dimfmts[1]); CHECK(status, FAIL, "readnoHDF_char"); /* Test with dataset's attribute string _HDF_CoordSys */ info_count = SDgetoldattdatainfo(0, sdsid, _HDF_CoordSys, &offset, &length); CHECK(info_count, FAIL, "SDgetoldattdatainfo"); status = readnoHDF_char(OLDATTFILE, offset, length, coordsys); CHECK(status, FAIL, "readnoHDF_char"); /* Note: coordsys' length has 1 more than the number of actual chars. We'll need to study that to document better. */ /* Terminate access to the dataset and close the file */ status = SDendaccess(sdsid); CHECK(status, FAIL, "SDendaccess"); status = SDend(fid); CHECK(status, FAIL, "SDend"); return (num_errs); } intn compare(const char *outstring, const char *instring) { intn status = 0; if (strcmp(outstring, instring) != 0) { fprintf(stderr, ">>> Test failed for %s\n", outstring); fprintf(stderr, " Input string = %s\n", instring); status = -1; } return (status); } /******************************************************************* Name: readnoHDF_char - utility routine to read and verify character data without HDF4 library Description: readnoHDF_char opens the file and reads in data at the specified offset. The read data is compared against the original data passed by caller. If any mismatch occurs, an error message will be displayed but the process will continue. Parameters: char *filename IN: name of the file int32 offset IN: where to start read data int32 length IN: how long to read the data char *orig_buf IN: original data buffer to compare against Return value: SUCCEED/FAIL ********************************************************************/ intn readnoHDF_char(const char *filename, const int32 offset, const int32 length, const char *orig_buf) { FILE *fd; /* file descriptor */ size_t readlen = 0; /* number of bytes actually read */ char *readcbuf; intn ret_value = SUCCEED; /* Open the file for reading without SD API */ fd = fopen(filename, "r"); if (fd == NULL) { fprintf(stderr, "readnoHDF_char: unable to open file %s", filename); exit(1); } /* Forward to the position of the first block of data */ if (fseek(fd, (off_t)offset, SEEK_SET) == -1) { fprintf(stderr, "readnoHDF_char: unable to seek offset %d\n", (int)offset); exit(1); } /* Allocate buffers for SDS' data */ readcbuf = (char *)malloc(length * sizeof(char)); CHECK_ALLOC(readcbuf, "readcbuf", "readnoHDF_char"); /* Read in this block of data */ readlen = fread((void *)readcbuf, 1, length, fd); if (readlen > 0) { /* Compare data read without HDF4 lib against the original buffer */ if (strncmp(readcbuf, orig_buf, readlen) != 0) fprintf(stderr, "Failure: non-HDF reading got different values than written values\n >>> written = " "%s\n >>> read = %s\n", orig_buf, readcbuf); } free(readcbuf); /* Close the file */ if (fclose(fd) == -1) { fprintf(stderr, "readnoHDF_char: unable to close file %s", filename); exit(1); } return ret_value; } /* Test driver for testing the public functions SDgetattdatainfo(), SDgetoldattdatainfo(), and SDgetanndatainfo() */ extern int test_att_ann_datainfo() { int num_errs = 0; /* Output message about test being performed */ TESTING("getting location info of attr and annot data (tattdatainfo.c)"); /* Test getting data info of attributes for SDSs */ num_errs = num_errs + test_attrs(); /* Test getting data info of annotations added by DFAN API */ num_errs = num_errs + test_dfannots(); /* Test getting data info of annotations added by AN API */ /* num_errs = num_errs + test_mfannots(); not needed right now */ /* Test getting data info of old attributes added by DFSD API */ num_errs += test_dfsdattrs(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tattributes.c000066400000000000000000000252011503061704500176100ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tattributes.c - tests attribute features * (currently only SDsetattr with count = 0) * Structure of the file: * test_attributes - test driver * test_count - tests that SDsetattr fails when the parameter * "count" is set to 0. (HDFFD-989 and 227: SDsetattr didn't * fail but, eventually, SDend did) * ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" /******************************************************************** Name: test_count() - tests that SDsetattr fails when the parameter "count" is passed into SDsetattr as 0 and the requested attribute is not created. Description: In the past, when the parameter "count" was set to 0, SDsetattr didn't fail but, eventually, SDend failed when the vdata storing the attribute was being created. With the knowledge that existing applications would have failed eventually at SDend if such calls existed, and if SDend failure is not detected, the file will be corrupted, we decided to change so that SDsetattr now fails when "count" is 0. The main contents of the test are listed below. - create a one-dim SDS, named VAR1_NAME - name its dimension VAR1_NAME - get file information and verify that there is only 1 variable, dataset VAR1_NAME - set attribute to dimension "Variable 1" (SDsetattr) - set attribute to SDS "Variable 1" (SDsetattr) - get file information and verify that there are 2 variable, dataset VAR1_NAME and coordinate variable VAR1_NAME - write data to the SDS - close all and reopen the file - open dataset "Variable 1" (SDnametoindex) - verify that this variable is not a coordinate variable (SDiscoordvar) - read and verify its attribute information and values - get access to the dataset's first dimension - read and verify its attribute information and values - read data and verify that the data is not corrupted Return value: The number of errors occurred in this routine. *********************************************************************/ #define FILE_SATTR "tattributes.hdf" #define VAR1_NAME "Variable 1" #define DIM1_NAME "Dimension 1" #define ATTR1_NAME "Attribute Dimension 1" #define ATTR2_NAME "Attribute SDS 1" #define ATTR3_NAME "Attribute Zero" #define ATTR1_VAL "This is a good attr" #define ATTR2_VAL "This is a another attr" #define ATTR1_LEN 20 #define ATTR2_LEN 23 #define ATTR3_LEN 5 #define ATTR_ZERO "ZERO" #define ATTR_LEN_ZERO 0 static intn test_count(void) { char sds_name[20], dim_name[20]; float32 sds1_data[] = {0.1, 2.3, 4.5, 6.7, 8.9}; int32 dimsize[1], size; int32 sds_id, file_id, dim_id, index; int32 start = 0, stride = 1; int32 ntype, rank, count; int32 nattrs = 0; intn status = 0; char attr_name[H4_MAX_NC_NAME], attr_values[80]; intn num_errs = 0; /* number of errors so far */ file_id = SDstart(FILE_SATTR, DFACC_CREATE); CHECK(file_id, FAIL, "SDstart"); /* Create a one-dim dataset named VAR1_NAME, of type DFNT_FLOAT32. */ dimsize[0] = 5; sds_id = SDcreate(file_id, VAR1_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds_id, FAIL, "SDcreate"); /* Set the dimension name. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); status = SDsetdimname(dim_id, DIM1_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Attempt to set a string attr to dim passing in count=0, should fail. */ status = SDsetattr(dim_id, ATTR_ZERO, DFNT_CHAR8, ATTR_LEN_ZERO, ATTR1_VAL); VERIFY(status, FAIL, "SDsetattr"); /* To verify that this attribute is not created, SDend must be called and the file is opened again. */ /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Open the file again to check attributes */ file_id = SDstart(FILE_SATTR, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); /* Get index of dataset VAR1_NAME */ index = SDnametoindex(file_id, VAR1_NAME); CHECK(index, FAIL, "SDnametoindex"); sds_id = SDselect(file_id, index); CHECK(sds_id, FAIL, "SDselect"); /* Get access to the SDS' first dimension. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); /* Get dimension information to verify there are no attrs set */ status = SDdiminfo(dim_id, dim_name, &size, &ntype, &nattrs); VERIFY(nattrs, 0, "SDdiminfo"); /* Set an attribute to dimension DIM1_NAME. */ status = SDsetattr(dim_id, ATTR1_NAME, DFNT_CHAR8, ATTR1_LEN, ATTR1_VAL); CHECK(status, FAIL, "SDsetattr"); /* Attempt to set a string attr to SDS passing in count=0, should fail. */ status = SDsetattr(sds_id, ATTR_ZERO, DFNT_CHAR8, ATTR_LEN_ZERO, ATTR2_VAL); VERIFY(status, FAIL, "SDsetattr"); /* Attempt to set a float attr to SDS passing in count=0, should fail. */ status = SDsetattr(sds_id, ATTR_ZERO, DFNT_FLOAT32, ATTR_LEN_ZERO, ATTR2_VAL); VERIFY(status, FAIL, "SDsetattr"); /* Close the file and reopen it to verify the number of attributes for SDS and for the dimension. */ /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Open the file again to check attributes */ file_id = SDstart(FILE_SATTR, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); /* Get index of dataset VAR1_NAME */ index = SDnametoindex(file_id, VAR1_NAME); CHECK(index, FAIL, "SDnametoindex"); sds_id = SDselect(file_id, index); CHECK(sds_id, FAIL, "SDselect"); /* Get access to the SDS' first dimension. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); /* Get dimension information to verify there is one attribute set */ status = SDdiminfo(dim_id, dim_name, &size, &ntype, &nattrs); VERIFY(nattrs, 1, "SDdiminfo"); /* Get SDS info to verify there is no SDS attribute yet. */ status = SDgetinfo(sds_id, sds_name, &rank, dimsize, &ntype, &nattrs); VERIFY(nattrs, 0, "SDsetattr"); /* Set an attribute to dataset VAR1_NAME. */ status = SDsetattr(sds_id, ATTR2_NAME, DFNT_CHAR8, ATTR2_LEN, ATTR2_VAL); CHECK(status, FAIL, "SDsetattr"); /* Write data to the SDS */ status = SDwritedata(sds_id, &start, &stride, dimsize, (void *)sds1_data); CHECK(status, FAIL, "SDwritedata"); /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Open the file again to check attributes */ file_id = SDstart(FILE_SATTR, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); /* Get index of dataset VAR1_NAME */ index = SDnametoindex(file_id, VAR1_NAME); CHECK(index, FAIL, "SDnametoindex"); sds_id = SDselect(file_id, index); CHECK(sds_id, FAIL, "SDselect"); /* Get dataset information to verify that there is one attribute set. */ status = SDgetinfo(sds_id, sds_name, &rank, dimsize, &ntype, &nattrs); VERIFY(nattrs, 1, "SDsetattr"); /* Read and verify the information of the SDS' first attribute. */ status = SDattrinfo(sds_id, 0, attr_name, &ntype, &count); CHECK(status, FAIL, "SDattrinfo"); VERIFY(count, ATTR2_LEN, "SDattrinfo"); VERIFY(strncmp(attr_name, ATTR2_NAME, 14), 0, "SDattrinfo"); /* Read and verify the values of the SDS' first attribute. */ status = SDreadattr(sds_id, 0, attr_values); CHECK(status, FAIL, "SDreadattr"); if (strncmp(attr_values, ATTR2_VAL, ATTR2_LEN) != 0) { fprintf(stderr, "Unmatched attribute values for SDS %s: is <%s>, should be <%s>\n", VAR1_NAME, attr_values, ATTR2_VAL); num_errs++; } /* Get access to the SDS' first dimension. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); /* Get dimension information to verify number of attrs */ status = SDdiminfo(dim_id, dim_name, &size, &ntype, &nattrs); VERIFY(nattrs, 1, "SDattrinfo"); /* Read and verify the information of the dimension's first attribute. */ status = SDattrinfo(dim_id, 0, attr_name, &ntype, &count); CHECK(status, FAIL, "SDattrinfo"); VERIFY(count, ATTR1_LEN, "SDattrinfo"); VERIFY(strncmp(attr_name, ATTR1_NAME, ATTR1_LEN), 0, "SDattrinfo"); /* Read and verify the values of the dimension's first attribute. */ status = SDreadattr(dim_id, 0, attr_values); CHECK(status, FAIL, "SDreadattr"); if (strncmp(attr_values, ATTR1_VAL, ATTR1_LEN) != 0) { fprintf(stderr, "Unmatched attribute values for dimension %s: is <%s>, should be <%s>\n", VAR1_NAME, attr_values, ATTR1_VAL); num_errs++; } /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_count */ /* Test driver for testing SD attributes. */ extern int test_attributes() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("various setting attribute features (tattributes.c)"); /* test when count is passed into SDsetattr as 0 */ num_errs = num_errs + test_count(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tchunk.c000066400000000000000000001406631503061704500165440ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "hdftest.h" #define CHKFILE "chktst.hdf" /* Chunking test file */ #define CNBITFILE "chknbit.hdf" /* Chunking w/ NBIT compression */ /* Dimensions of slab */ static int32 edge_dims[3] = {2, 3, 4}; /* size of slab dims */ static int32 start_dims[3] = {0, 0, 0}; /* starting dims */ static int32 d_dims[3] = {2, 3, 4}; static int32 cdims[3] = {1, 2, 3}; /* chunk lengths */ /* Chunk teseting - arrays for chunk writes */ /* uint16 chunk arrays used in example 1 */ static uint16 chunk1_2u16[6] = {11, 21, 12, 22, 13, 23}; static uint16 chunk2_2u16[6] = {31, 41, 32, 42, 33, 43}; static uint16 chunk3_2u16[6] = {14, 24, 15, 25, 16, 26}; static uint16 chunk4_2u16[6] = {34, 44, 35, 45, 36, 46}; static uint16 chunk5_2u16[6] = {17, 27, 18, 28, 19, 29}; static uint16 chunk6_2u16[6] = {37, 47, 38, 48, 39, 49}; /* for visual layout in Example 1*/ static uint16 u16_2data[9][4] = { {11, 21, 31, 41}, {12, 22, 32, 42}, {13, 23, 33, 43}, {14, 24, 34, 44}, {15, 25, 35, 45}, {16, 26, 36, 46}, {17, 27, 37, 47}, {18, 28, 38, 48}, {19, 29, 39, 49}, }; /* for comparison in example 1 */ static uint16 u16_2cdata[5][2] = {{23, 33}, {24, 34}, {25, 35}, {26, 36}, {27, 37}}; /* uint8 arrays */ static uint8 chunk1_u8[4] = {0, 1, 2, 3}; static uint8 chunk2_u8[4] = {10, 11, 12, 13}; static uint8 chunk3_u8[4] = {20, 21, 22, 23}; static uint8 chunk4_u8[4] = {100, 101, 102, 103}; static uint8 chunk5_u8[4] = {110, 111, 112, 113}; static uint8 chunk6_u8[4] = {120, 121, 122, 123}; /* data arrays laid out in memory */ /* for comparison */ static float32 f32_data[2][3][4] = {{{(float32)0.0, (float32)1.0, (float32)2.0, (float32)3.0}, {(float32)10.0, (float32)11.0, (float32)12.0, (float32)13.0}, {(float32)20.0, (float32)21.0, (float32)22.0, (float32)23.0}}, {{(float32)100.0, (float32)101.0, (float32)102.0, (float32)103.0}, {(float32)110.0, (float32)111.0, (float32)112.0, (float32)113.0}, {(float32)120.0, (float32)121.0, (float32)122.0, (float32)123.0}}}; static uint16 u16_data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; static uint8 u8_data[2][3][4] = {{{0, 1, 2, 3}, {10, 11, 12, 13}, {20, 21, 22, 23}}, {{100, 101, 102, 103}, {110, 111, 112, 113}, {120, 121, 122, 123}}}; extern int test_chunk() { int32 fchk; /* File handles */ int32 nt; /* Number type */ int32 dimsize[10]; /* dimension sizes */ int32 newsds1, newsds2, newsds3, newsds4, newsds5, newsds6, newsds7, newsds8; /* Chunked SDS ids */ float32 inbuf_f32[2][3][4]; /* float32 Data array read from from file */ uint16 inbuf_u16[2][3][4]; /* uint16 Data array read from from file */ uint16 inbuf1_2u16[9][4]; /* Data array read for Example 1 */ uint16 inbuf_2u16[5][2]; /* Data array read for Example 1 */ uint8 inbuf_u8[2][3][4]; /* uint8 Data array read from from file */ uint8 ru8_data[4]; /* chunk input buffer */ int32 *rcdims; /* for SDgetchunkinfo() */ uint16 fill_u16 = 0; /* fill value */ HDF_CHUNK_DEF chunk_def; /* Chunk definition set */ HDF_CHUNK_DEF chunk_def_out; /* Chunk definition set */ HDF_CHUNK_DEF rchunk_def; /* Chunk definition read */ comp_coder_t comp_type; /* to retrieve compression type into */ comp_info cinfo; /* compression information structure */ int32 cflags; /* chunk flags */ int32 c_flags; /* chunk flags to set */ int32 c_flags_out; /* chunk flags retrieved */ int32 index; /* Index of dataset in file */ intn status; /* status flag */ intn i, j, k; /* loop variables */ int32 start[10], end[10]; /* start, end, stride arrays */ int32 idata[100]; int32 rdata[100]; float32 max; int num_errs = 0; /* number of errors so far */ /* Output message about test being performed */ TESTING("create/read/write chunked datasets (tchunk.c)"); /* Create file 'chktst.hdf' */ fchk = SDstart(CHKFILE, DFACC_CREATE); CHECK(fchk, FAIL, "SDstart"); /* * Test 1. Create a 9x4 SDS of uint16 in file 1 * With chunks of 3x2, will create 6 chunks. */ d_dims[0] = 9; d_dims[1] = 4; newsds1 = SDcreate(fchk, "DataSetChunked_2D_1", DFNT_UINT16, 2, d_dims); if (newsds1 == FAIL) { fprintf(stderr, "Chunk Test 1. Failed to create a new data set \n"); num_errs++; goto test2; } /* set fill value */ fill_u16 = 0; status = SDsetfillvalue(newsds1, (void *)&fill_u16); CHECK(status, FAIL, "Chunk Test 1. SDsetfillvalue"); /* Verifies fix for HDFFR-5/HDFFR-171. */ c_flags_out = 0; status = SDgetchunkinfo(newsds1, NULL, &c_flags_out); CHECK(status, FAIL, "Chunk Test 1. SDgetchunkinfo on empty SDS"); VERIFY(c_flags_out, (HDF_NONE), "Chunk Test 1. SDgetchunkinfo on empty SDS"); /* Create chunked SDS chunk is 3x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 3; cdims[1] = chunk_def.chunk_lengths[1] = 2; status = SDsetchunk(newsds1, chunk_def, HDF_CHUNK); if (status == FAIL) { fprintf(stderr, "Chunk Test 1. Failed to create new chunked data set\n"); num_errs++; goto test2; } /* Check getting chunked/compressed flag only with SDgetchunkinfo */ c_flags_out = 0; status = SDgetchunkinfo(newsds1, NULL, &c_flags_out); CHECK(status, FAIL, "Chunk Test 1. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK), "Chunk Test 1. SDgetchunkinfo"); /* Check getting compression info with SDgetchunkinfo */ memset(&chunk_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(newsds1, &chunk_def_out, &c_flags_out); CHECK(status, FAIL, "Chunk Test 1. SDgetchunkinfo"); VERIFY(chunk_def_out.chunk_lengths[0], chunk_def.chunk_lengths[0], "SDgetchunkinfo"); VERIFY(chunk_def_out.chunk_lengths[1], chunk_def.chunk_lengths[1], "SDgetchunkinfo"); /* Set Chunk cache to hold 2 chunks */ status = SDsetchunkcache(newsds1, 2, 0); if (status == FAIL) { fprintf(stderr, "Chunk Test 1. SDsetchunkcache failed\n"); num_errs++; goto test2; } /* Write data */ start_dims[0] = 0; start_dims[1] = 0; edge_dims[0] = 9; edge_dims[1] = 4; status = SDwritedata(newsds1, start_dims, NULL, edge_dims, (void *)u16_2data); if (status == FAIL) { fprintf(stderr, "Chunk Test 1. Failed to write u16_2data to new chunked data set\n"); num_errs++; goto test2; } /* Read a portion of data back in using SDreaddata */ start_dims[0] = 0; start_dims[1] = 0; edge_dims[0] = 9; edge_dims[1] = 4; status = SDreaddata(newsds1, start_dims, NULL, edge_dims, (void *)inbuf1_2u16); CHECK(status, FAIL, "Chunk Test 1. SDreaddata"); for (i = 0; i < 9; i++) { for (j = 0; j < 4; j++) { if (inbuf1_2u16[i][j] != u16_2data[i][j]) { fprintf(stderr, "Chunk Test 1. inbuf1_2u16[%d][%d]=%d,", i, j, inbuf1_2u16[i][j]); fprintf(stderr, "u16_cdata[%d][%d]=%d,", i, j, u16_2data[i][j]); fprintf(stderr, "\n"); num_errs++; } } } /* Get chunk lengths */ status = SDgetchunkinfo(newsds1, &rchunk_def, &cflags); if (status == FAIL) { fprintf(stderr, "Chunk Test 1. SDgetchunkinfo failed \n"); num_errs++; goto test2; } rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and to see if SDS is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test 1. SDgetchunkinfo returned wrong values\n"); num_errs++; goto test2; } /* Close down this SDS*/ status = SDendaccess(newsds1); CHECK(status, FAIL, "Chunk Test 1. SDendaccess"); /* Test 2. 2-D 9x4 SDS of uint16 with 3x2 chunks Write data using SDwritechunk(). Read data using SDreaddata(). */ test2: /* create a 9x4 SDS of uint16 in file 1 */ d_dims[0] = 9; d_dims[1] = 4; newsds2 = SDcreate(fchk, "DataSetChunked_2D_2", DFNT_UINT16, 2, d_dims); if (newsds2 == FAIL) { fprintf(stderr, "Chunk Test 2. Failed to create a new data set \n"); num_errs++; goto test3; } /* set fill value */ fill_u16 = 0; status = SDsetfillvalue(newsds2, (void *)&fill_u16); CHECK(status, FAIL, "Chunk Test 2. SDsetfillvalue"); /* Create chunked SDS chunk is 3x2 which will create 6 chunks */ cdims[0] = chunk_def.chunk_lengths[0] = 3; cdims[1] = chunk_def.chunk_lengths[1] = 2; status = SDsetchunk(newsds2, chunk_def, HDF_CHUNK); if (status == FAIL) { fprintf(stderr, "Chunk Test 2. Failed to create new chunked data set\n"); num_errs++; goto test3; } /* Set Chunk cache to hold 2 chunks */ status = SDsetchunkcache(newsds2, 2, 0); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDsetchunkcache failed\n"); num_errs++; goto test3; } /* Write data use SDwriteChunk */ /* Write chunk 1 */ start_dims[0] = 0; start_dims[1] = 0; status = SDwritechunk(newsds2, start_dims, (void *)chunk1_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 1\n"); num_errs++; goto test3; } /* Write chunk 4 */ start_dims[0] = 1; start_dims[1] = 1; status = SDwritechunk(newsds2, start_dims, (void *)chunk4_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 4\n"); num_errs++; goto test3; } /* Write chunk 2 */ start_dims[0] = 0; start_dims[1] = 1; status = SDwritechunk(newsds2, start_dims, (void *)chunk2_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 2\n"); num_errs++; goto test3; } /* Write chunk 5 */ start_dims[0] = 2; start_dims[1] = 0; status = SDwritechunk(newsds2, start_dims, (void *)chunk5_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 5\n"); num_errs++; goto test3; } /* Write chunk 3 */ start_dims[0] = 1; start_dims[1] = 0; status = SDwritechunk(newsds2, start_dims, (void *)chunk3_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 3\n"); num_errs++; goto test3; } /* Write chunk 6 */ start_dims[0] = 2; start_dims[1] = 1; status = SDwritechunk(newsds2, start_dims, (void *)chunk6_2u16); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDwritechunk failed to write chunk 6\n"); num_errs++; goto test3; } /* read a portion of data back in using SDreaddata i.e 5x2 subset of the whole array */ start_dims[0] = 2; start_dims[1] = 1; edge_dims[0] = 5; edge_dims[1] = 2; status = SDreaddata(newsds2, start_dims, NULL, edge_dims, (void *)inbuf_2u16); CHECK(status, FAIL, "Chunk Test 2. SDreaddata"); /* This 5x2 array should look somethink like this {{23, 24, 25, 26, 27}, {33, 34, 35, 36, 37}} */ for (i = 0; i < 5; i++) { for (j = 0; j < 2; j++) { if (inbuf_2u16[i][j] != u16_2cdata[i][j]) { fprintf(stderr, "Chunk Test 2. inbuf_2u16[%d][%d]=%d,", i, j, inbuf_2u16[i][j]); fprintf(stderr, "u16_2cdata[%d][%d]=%d,", i, j, u16_2cdata[i][j]); fprintf(stderr, "\n"); num_errs++; } } } /* Get chunk lengths */ status = SDgetchunkinfo(newsds2, &rchunk_def, &cflags); if (status == FAIL) { fprintf(stderr, "Chunk Test 2.SDgetchunkinfo failed \n"); num_errs++; goto test3; } rcdims = rchunk_def.chunk_lengths; /* check chunk lengths and see if SDS is chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test 2.SDgetchunkinfo returned wrong values\n"); num_errs++; goto test3; } /* Close down this SDS*/ status = SDendaccess(newsds2); CHECK(status, FAIL, "Chunk Test 2. SDendaccess"); /* * Next 3 different number types are tested with 3-D arrays */ test3: /* * Test 3. create a new chunked SDS of float32 in file 1 */ d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; newsds3 = SDcreate(fchk, "DataSetChunked_3D_1", DFNT_FLOAT32, 3, d_dims); if (newsds3 == FAIL) { fprintf(stderr, "Chunk Test 3. Failed to create a new 3D float32 data set \n"); num_errs++; goto test4; } max = 0.0; status = SDsetfillvalue(newsds3, (void *)&max); CHECK(status, FAIL, "Chunk Test 3. SDsetfillvalue"); /* Set chunking */ cdims[0] = chunk_def.chunk_lengths[0] = 1; cdims[1] = chunk_def.chunk_lengths[1] = 2; cdims[2] = chunk_def.chunk_lengths[2] = 3; status = SDsetchunk(newsds3, chunk_def, HDF_CHUNK); if (status == FAIL) { fprintf(stderr, "Chunk Test 3. Failed to create new chunked data set\n"); num_errs++; goto test4; } /* Write data out */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDwritedata(newsds3, start_dims, NULL, edge_dims, (void *)f32_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 3. Failed to write f32_data to new chunked data set\n"); num_errs++; goto test4; } /* read data back in */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDreaddata(newsds3, start_dims, NULL, edge_dims, (void *)inbuf_f32); CHECK(status, FAIL, "Chunk Test 3. SDreaddata"); for (i = 0; i < d_dims[0]; i++) { for (j = 0; j < d_dims[1]; j++) { for (k = 0; k < d_dims[2]; k++) { if (!H4_FLT_ABS_EQUAL(inbuf_f32[i][j][k], f32_data[i][j][k])) { fprintf(stderr, "Chunk Test 3. inbuf_f32[%d][%d][%d]=%f,", i, j, k, (double)inbuf_f32[i][j][k]); fprintf(stderr, "f32_data[%d][%d][%d]=%f,", i, j, k, (double)f32_data[i][j][k]); fprintf(stderr, "\n"); num_errs++; } } } } /* Close down SDS*/ status = SDendaccess(newsds3); CHECK(status, FAIL, "Chunk Test 3. SDendaccess"); /* * Test 4. Create a new chunked SDS of uint16 in file 1 */ test4: d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; newsds4 = SDcreate(fchk, "DataSetChunked_3D_2", DFNT_UINT16, 3, d_dims); if (newsds4 == FAIL) { fprintf(stderr, "Chunk Test 4. Failed to set a new uint16 3D data set chunked\n"); num_errs++; goto test5; } /* set fill value */ fill_u16 = 0; status = SDsetfillvalue(newsds4, (void *)&fill_u16); CHECK(status, FAIL, "Chunk Test 4. SDsetfillvalue"); /* Set chunking, chunk is 1x2x3 */ cdims[0] = chunk_def.chunk_lengths[0] = 1; cdims[1] = chunk_def.chunk_lengths[1] = 2; cdims[2] = chunk_def.chunk_lengths[2] = 3; status = SDsetchunk(newsds4, chunk_def, HDF_CHUNK); if (status == FAIL) { fprintf(stderr, "Chunk Test 4. Failed to create new chunked data set\n"); num_errs++; goto test5; } /* Set Chunk cache */ status = SDsetchunkcache(newsds4, 4, 0); if (status == FAIL) { fprintf(stderr, "Chunk Test 4. SDsetchunkcache failed\n"); num_errs++; goto test5; } /* Write data */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDwritedata(newsds4, start_dims, NULL, edge_dims, (void *)u16_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 4. Failed to write u16_data to new chunked data set\n"); num_errs++; goto test5; } /* read data back in */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDreaddata(newsds4, start_dims, NULL, edge_dims, (void *)inbuf_u16); CHECK(status, FAIL, "Chunk Test 4. SDreaddata"); for (i = 0; i < d_dims[0]; i++) { for (j = 0; j < d_dims[1]; j++) { for (k = 0; k < d_dims[2]; k++) { if (inbuf_u16[i][j][k] != u16_data[i][j][k]) { fprintf(stderr, "Chunk Test 4. inbuf_u16[%d][%d][%d]=%d,", i, j, k, inbuf_u16[i][j][k]); fprintf(stderr, "u16_data[%d][%d][%d]=%d,", i, j, k, u16_data[i][j][k]); fprintf(stderr, "\n"); num_errs++; } } } } /* Check getting chunked flag */ status = SDgetchunkinfo(newsds4, NULL, &cflags); CHECK(status, FAIL, "Chunk Test 4. SDgetchunkinfo"); VERIFY(cflags, HDF_CHUNK, "Chunk Test 4. SDgetchunkinfo"); /* Check chunk info */ status = SDgetchunkinfo(newsds4, &rchunk_def, &cflags); if (status == FAIL) { fprintf(stderr, "Chunk Test 4. SDgetchunkinfo failed \n"); num_errs++; goto test5; } rcdims = rchunk_def.chunk_lengths; if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cdims[2] != rcdims[2] || cflags != HDF_CHUNK) { fprintf(stderr, "Chunk Test 4. SDgetchunkinfo returned wrong values\n"); num_errs++; goto test5; } /* Close down SDS*/ status = SDendaccess(newsds4); CHECK(status, FAIL, "Chunk Test 4. SDendaccess"); /* * Test 5. Create a new chunked SDS of uint8 in file 1 */ test5: d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; newsds5 = SDcreate(fchk, "DataSetChunked_3D_3", DFNT_UINT8, 3, d_dims); if (newsds5 == FAIL) { fprintf(stderr, "Chunk Test 5. Failed to set a new uint8 3D data set chunked\n"); num_errs++; goto test6; } /* Set chunking, chunk is 1x1x4 */ cdims[0] = chunk_def.chunk_lengths[0] = 1; cdims[1] = chunk_def.chunk_lengths[1] = 1; cdims[2] = chunk_def.chunk_lengths[2] = 4; status = SDsetchunk(newsds5, chunk_def, HDF_CHUNK); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. Failed to create new chunked data set\n"); num_errs++; goto test6; } /* Write data use SDwriteChunk */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk1_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 1\n"); num_errs++; goto test6; } start_dims[0] = 1; start_dims[1] = 0; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk4_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 4\n"); num_errs++; goto test6; } start_dims[0] = 0; start_dims[1] = 1; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk2_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 2\n"); num_errs++; goto test6; } start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk5_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 5\n"); num_errs++; goto test6; } start_dims[0] = 0; start_dims[1] = 2; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk3_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 3\n"); num_errs++; goto test6; } start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 0; status = SDwritechunk(newsds5, start_dims, (void *)chunk6_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDwritechunk failed to write chunk 6\n"); num_errs++; goto test6; } /* read data back in */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDreaddata(newsds5, start_dims, NULL, edge_dims, (void *)inbuf_u8); CHECK(status, FAIL, "Chunk Test 5. SDreaddata"); for (i = 0; i < d_dims[0]; i++) { for (j = 0; j < d_dims[1]; j++) { for (k = 0; k < d_dims[2]; k++) { if (inbuf_u8[i][j][k] != u8_data[i][j][k]) { fprintf(stderr, "Chunk Test 5. inbuf_u8[%d][%d][%d]=%d,", i, j, k, inbuf_u8[i][j][k]); fprintf(stderr, "u8_data[%d][%d][%d]=%d,", i, j, k, u8_data[i][j][k]); fprintf(stderr, "\n"); num_errs++; } } } } start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 1\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk1_u8[i]) { printf("Chunk Test 5. chunk1_u8: Wrong data at %d, out %d in %d\n", i, chunk1_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 0; start_dims[1] = 1; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 2\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk2_u8[i]) { printf("Chunk Test 5. chunk2_u8: Wrong data at %d, out %d in %d\n", i, chunk2_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 0; start_dims[1] = 2; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 3\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk3_u8[i]) { printf("Chunk Test 5. chunk3_u8: Wrong data at %d, out %d in %d\n", i, chunk3_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 0; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 4\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk4_u8[i]) { printf("Chunk Test 5. chunk4_u8: Wrong data at %d, out %d in %d\n", i, chunk4_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 5\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk5_u8[i]) { printf("Chunk Test 5. chunk5_u8: Wrong data at %d, out %d in %d\n", i, chunk5_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 0; status = SDreadchunk(newsds5, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 5. SDreadchunk failed to read chunk 6\n"); num_errs++; goto test6; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk6_u8[i]) { printf("Chunk Test 5. chunk6_u8: Wrong data at %d, out %d in %d\n", i, chunk6_u8[i], ru8_data[i]); num_errs++; } } /* Close down SDS*/ status = SDendaccess(newsds5); CHECK(status, FAIL, "Chunk Test 5. SDendaccess"); /* --------------------------------------------------------------- * Chunking with Compression ----------------------------------------------------------------*/ /* * Test 6. Create a new chunked SDS of uint8 in file 1 * Compress using Skipping Huffman. Write using SDwriteChunk * Read back in using SDreaddata and SDreadChunk. * Retrieve and verify the compression information. * Use Skipping Huffman compression * Note: a template is created first then the SDS * is re-slected for writing/reading. */ test6: d_dims[0] = 2; d_dims[1] = 3; d_dims[2] = 4; newsds6 = SDcreate(fchk, "DataSetChunked_3D_SKIP_HUF_2", DFNT_UINT8, 3, d_dims); if (newsds6 == FAIL) { fprintf(stderr, "Chunk Test 6. Failed to set a new uint8 3D data set chunked\n"); num_errs++; goto test7; } /* Set chunking, chunk is 1x1x4 */ cdims[0] = chunk_def.comp.chunk_lengths[0] = 1; cdims[1] = chunk_def.comp.chunk_lengths[1] = 1; cdims[2] = chunk_def.comp.chunk_lengths[2] = 4; chunk_def.comp.comp_type = COMP_CODE_SKPHUFF; /* Skipping Huffman */ chunk_def.comp.cinfo.skphuff.skp_size = sizeof(uint16); status = SDsetchunk(newsds6, chunk_def, HDF_CHUNK | HDF_COMP); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. Failed to create new chunked, Skipping Huffman compressed data set\n"); num_errs++; goto test7; } /* Close down SDS ie. template creation*/ status = SDendaccess(newsds6); CHECK(status, FAIL, "Chunk Test 6. SDendaccess"); newsds6 = FAIL; /* Select same SDS again, first get index */ if ((index = SDnametoindex(fchk, "DataSetChunked_3D_SKIP_HUF_2")) == FAIL) { fprintf(stderr, "Chunk Test 6. SDnametoindex Failed for Skipping Huffman compressed data set\n"); num_errs++; goto test7; } if ((newsds6 = SDselect(fchk, index)) == FAIL) { fprintf( stderr, "Chunk Test 6. SDselect Failed to re-select new chunked, Skipping Huffman compressed data set\n"); num_errs++; goto test7; } /* Retrieve and verify the compression type */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds6, &comp_type); CHECK(status, FAIL, "Chunk Test 6. SDgetcomptype"); VERIFY(comp_type, chunk_def.comp.comp_type, "Chunk Test 6. SDgetcomptype"); /* Retrieve and verify the compression info - bug# 307 and bugzilla# 130 */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds6, &comp_type, &cinfo); CHECK(status, FAIL, "Chunk Test 6. SDgetcompinfo"); VERIFY(comp_type, chunk_def.comp.comp_type, "Chunk Test 6. SDgetcompinfo"); VERIFY(cinfo.skphuff.skp_size, chunk_def.comp.cinfo.skphuff.skp_size, "Chunk Test 6. SDgetcompinfo"); /* Write data use SDwriteChunk */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk1_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 1\n"); num_errs++; goto test7; } start_dims[0] = 1; start_dims[1] = 0; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk4_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 4\n"); num_errs++; goto test7; } start_dims[0] = 0; start_dims[1] = 1; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk2_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 2\n"); num_errs++; goto test7; } start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk5_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 5\n"); num_errs++; goto test7; } start_dims[0] = 0; start_dims[1] = 2; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk3_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 3\n"); num_errs++; goto test7; } start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 0; status = SDwritechunk(newsds6, start_dims, (void *)chunk6_u8); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDwritechunk failed to write chunk 6\n"); num_errs++; goto test7; } /* Read data back in */ start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; edge_dims[0] = 2; edge_dims[1] = 3; edge_dims[2] = 4; status = SDreaddata(newsds6, start_dims, NULL, edge_dims, (void *)inbuf_u8); CHECK(status, FAIL, "Chunk Test 6. SDreaddata"); for (i = 0; i < d_dims[0]; i++) { for (j = 0; j < d_dims[1]; j++) { for (k = 0; k < d_dims[2]; k++) { if (inbuf_u8[i][j][k] != u8_data[i][j][k]) { fprintf(stderr, "Chunk Test 6. inbuf_u8[%d][%d][%d]=%d,", i, j, k, inbuf_u8[i][j][k]); fprintf(stderr, "u8_data[%d][%d][%d]=%d,", i, j, k, u8_data[i][j][k]); fprintf(stderr, "\n"); num_errs++; } } } } start_dims[0] = 0; start_dims[1] = 0; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDreadchunk failed to read chunk 1\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk1_u8[i]) { printf("Chunk Test 6. chunk1_u8: Wrong data at %d, out %d in %d\n", i, chunk1_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 0; start_dims[1] = 1; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDreadchunk failed to read chunk 2\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk2_u8[i]) { printf("Chunk Test 6. chunk2_u8: Wrong data at %d, out %d in %d\n", i, chunk2_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 0; start_dims[1] = 2; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDreadchunk failed to read chunk 3\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk3_u8[i]) { printf("Chunk Test 6. chunk3_u8: Wrong data at %d, out %d in %d\n", i, chunk3_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 0; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "SDreadchunk failed to read chunk 4\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk4_u8[i]) { printf("Chunk Test 6. chunk4_u8: Wrong data at %d, out %d in %d\n", i, chunk4_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 1; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDreadchunk failed to read chunk 5\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk5_u8[i]) { printf("Chunk Test 6. chunk5_u8: Wrong data at %d, out %d in %d\n", i, chunk5_u8[i], ru8_data[i]); num_errs++; } } start_dims[0] = 1; start_dims[1] = 2; start_dims[2] = 0; status = SDreadchunk(newsds6, start_dims, (void *)ru8_data); if (status == FAIL) { fprintf(stderr, "Chunk Test 6. SDreadchunk failed to read chunk 6\n"); num_errs++; goto test7; } /* Verify chunk */ for (i = 0; i < 4; i++) { if (ru8_data[i] != chunk6_u8[i]) { printf("Chunk Test 6. chunk6_u8: Wrong data at %d, out %d in %d\n", i, chunk6_u8[i], ru8_data[i]); num_errs++; } } /* Check getting chunked/compressed flag only with SDgetchunkinfo */ c_flags_out = 0; status = SDgetchunkinfo(newsds6, NULL, &c_flags_out); CHECK(status, FAIL, "Chunk Test 6. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_COMP), "Chunk Test 6. SDgetchunkinfo"); /* Check getting compression info with SDgetchunkinfo */ memset(&chunk_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(newsds6, &chunk_def_out, &c_flags_out); CHECK(status, FAIL, "Chunk Test 6. SDgetchunkinfo"); VERIFY(chunk_def_out.comp.comp_type, comp_type, "Chunk Test 6. SDgetchunkinfo"); VERIFY(chunk_def_out.comp.cinfo.skphuff.skp_size, chunk_def.comp.cinfo.skphuff.skp_size, "Chunk Test 6. chunkinfo_new"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_COMP), "Chunk Test 6. SDgetchunkinfo"); /* Close down SDS*/ status = SDendaccess(newsds6); CHECK(status, FAIL, "Chunk Test 6. SDendaccess"); newsds6 = FAIL; /* Select same SDS again, first get index */ if ((index = SDnametoindex(fchk, "DataSetChunked_3D_SKIP_HUF_2")) == FAIL) { fprintf(stderr, "Chunk Test 6. SDnametoindex Failed for Skipping Huffman compressed data set\n"); num_errs++; goto test7; } if ((newsds6 = SDselect(fchk, index)) == FAIL) { fprintf( stderr, "Chunk Test 6. SDselect Failed to re-select new chunked, Skipping Huffman compressed data set\n"); num_errs++; goto test7; } /* * Retrieve and verify the compression type */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds6, &comp_type); CHECK(status, FAIL, "Chunk Test 6. SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "Chunk Test 6. SDgetcomptype"); /* Close down SDS*/ status = SDendaccess(newsds6); CHECK(status, FAIL, "Chunk Test 6. SDendaccess"); /* * Test 7. Create a 9x4 SDS of uint16 in file 1 * Write using SDwritedata, read back in using SDreaddata * Use GZIP compression. */ test7: d_dims[0] = 9; d_dims[1] = 4; newsds7 = SDcreate(fchk, "DataSetChunked_2D_GZIP_1", DFNT_UINT16, 2, d_dims); if (newsds7 == FAIL) { fprintf(stderr, "Chunk Test 7. Failed to create a new 2D uint16 data set \n"); num_errs++; goto test8; } /* set fill value */ fill_u16 = 0; status = SDsetfillvalue(newsds7, (void *)&fill_u16); CHECK(status, FAIL, "Chunk Test 7. SDsetfillvalue"); /* Create chunked SDS chunk is 3x2 which will create 6 chunks. Use GZIP compression */ cdims[0] = chunk_def.comp.chunk_lengths[0] = 3; cdims[1] = chunk_def.comp.chunk_lengths[1] = 2; chunk_def.comp.comp_type = COMP_CODE_DEFLATE; /* GZIP */ chunk_def.comp.cinfo.deflate.level = 6; status = SDsetchunk(newsds7, chunk_def, HDF_CHUNK | HDF_COMP); if (status == FAIL) { fprintf(stderr, "Chunk Test 7. Failed to create new chunked, GZIP Compressed data set\n"); num_errs++; goto test8; } /* Set Chunk cache to hold 2 chunks */ status = SDsetchunkcache(newsds7, 2, 0); if (status == FAIL) { fprintf(stderr, "Chunk Test 7. SDsetchunkcache failed\n"); num_errs++; goto test8; } /* Check getting chunked/compressed flag only with SDgetchunkinfo */ c_flags_out = 0; status = SDgetchunkinfo(newsds7, NULL, &c_flags_out); CHECK(status, FAIL, "Chunk Test 7. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_COMP), "Chunk Test 7. SDgetchunkinfo"); memset(&chunk_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(newsds7, &chunk_def_out, &c_flags_out); CHECK(status, FAIL, "Chunk Test 7. SDgetchunkinfo"); VERIFY(chunk_def_out.comp.cinfo.deflate.level, chunk_def.comp.cinfo.deflate.level, "Chunk Test 7. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_COMP), "Chunk Test 7. SDgetchunkinfo"); /* Write data */ start_dims[0] = 0; start_dims[1] = 0; edge_dims[0] = 9; edge_dims[1] = 4; status = SDwritedata(newsds7, start_dims, NULL, edge_dims, (void *)u16_2data); if (status == FAIL) { fprintf(stderr, "Chunk Test 7. Failed to write u16_2data to new chunked data set\n"); num_errs++; goto test8; } /* read a portion of data back in using SDreaddata*/ start_dims[0] = 0; start_dims[1] = 0; edge_dims[0] = 9; edge_dims[1] = 4; status = SDreaddata(newsds7, start_dims, NULL, edge_dims, (void *)inbuf1_2u16); CHECK(status, FAIL, "Chunk Test 7. SDreaddata"); for (i = 0; i < 9; i++) { for (j = 0; j < 4; j++) { if (inbuf1_2u16[i][j] != u16_2data[i][j]) { fprintf(stderr, "Chunk Test 7. inbuf1_2u16[%d][%d]=%d,", i, j, inbuf1_2u16[i][j]); fprintf(stderr, "u16_cdata[%d][%d]=%d,", i, j, u16_2data[i][j]); fprintf(stderr, "\n"); num_errs++; } } } /* Get chunk lengths */ status = SDgetchunkinfo(newsds7, &rchunk_def, &cflags); if (status == FAIL) { fprintf(stderr, "Chunk Test 7. SDgetchunkinfo failed \n"); num_errs++; goto test8; } rcdims = rchunk_def.comp.chunk_lengths; /* check chunk lengths and see if SDS is compressed and chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != (HDF_CHUNK | HDF_COMP)) { fprintf(stderr, "Chunk Test 7. SDgetchunkinfo returned wrong values\n"); num_errs++; goto test8; } /* Close down this SDS*/ status = SDendaccess(newsds7); CHECK(status, FAIL, "Chunk Test 7. SDendaccess"); /* * Test getting compression information for chunked SDS - bug# 307 */ /* Select same SDS again, first get index */ if ((index = SDnametoindex(fchk, "DataSetChunked_2D_GZIP_1")) == FAIL) { fprintf(stderr, "Chunk Test 7. SDnametoindex Failed for GZIP compressed data set\n"); num_errs++; goto test8; } if ((newsds7 = SDselect(fchk, index)) == FAIL) { fprintf(stderr, "Chunk Test 7. SDselect Failed to re-select new chunked, GZIP compressed data set\n"); num_errs++; goto test8; } /* Retrieve and verify the compression info - bug# 307 and bugzilla# 130 */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds7, &comp_type, &cinfo); CHECK(status, FAIL, "Chunk Test 6. SDgetcompinfo"); VERIFY(comp_type, chunk_def.comp.comp_type, "Chunk Test 6. SDgetcompinfo"); VERIFY(cinfo.deflate.level, chunk_def.comp.cinfo.deflate.level, "Chunk Test 6. SDgetcompinfo"); /* Retrieve and verify the compression type */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds7, &comp_type); CHECK(status, FAIL, "Chunk Test 7. SDgetcomptype"); VERIFY(comp_type, chunk_def.comp.comp_type, "Chunk Test 7. SDgetcomptype"); /* Close down SDS*/ status = SDendaccess(newsds7); CHECK(status, FAIL, "Chunk Test 7. SDendaccess"); /* Close down file 'chktst.hdf' */ status = SDend(fchk); CHECK(status, FAIL, "SDend"); /* --------------------------------------------------------------- * Chunking with NBIT Compression ----------------------------------------------------------------*/ /* * Chunking with NBIT */ test8: /* Create file */ fchk = SDstart(CNBITFILE, DFACC_CREATE); CHECK(fchk, FAIL, "Chunk Test 8. SDstart"); /* Create dataset */ nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds8 = SDcreate(fchk, "Chunked_NBitDataSet", nt, 2, dimsize); if (newsds8 == FAIL) { fprintf(stderr, "Chunk Test 8. SDcreate Failed to create a new chunked, nbit data set \n"); num_errs++; goto done; } for (i = 0; i < 25; i++) idata[i] = i * 10; /* Create chunked SDS with NBIT compression. chunk is 2x2 which will create 9 chunks.*/ cdims[0] = chunk_def.nbit.chunk_lengths[0] = 2; cdims[1] = chunk_def.nbit.chunk_lengths[1] = 2; chunk_def.nbit.start_bit = 6; chunk_def.nbit.bit_len = 7; chunk_def.nbit.sign_ext = FALSE; chunk_def.nbit.fill_one = FALSE; c_flags = HDF_CHUNK | HDF_NBIT; status = SDsetchunk(newsds8, chunk_def, c_flags); if (status == FAIL) { fprintf(stderr, "Chunk Test 8. SDsetchunk Failed to create new chunked, NBIT data set\n"); num_errs++; goto done; } /* write out the data */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds8, start, NULL, end, (void *)idata); CHECK(status, FAIL, "Chunk Test 8. SDwritedata"); /* Check getting chunked/compressed flag only with SDgetchunkinfo */ c_flags_out = 0; status = SDgetchunkinfo(newsds8, NULL, &c_flags_out); CHECK(status, FAIL, "Chunk Test 8. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_NBIT), "Chunk Test 8. SDgetchunkinfo"); /* Check getting compression info with SDgetchunkinfo */ c_flags_out = 0; memset(&chunk_def_out, 0, sizeof(HDF_CHUNK_DEF)); status = SDgetchunkinfo(newsds8, &chunk_def_out, &c_flags_out); CHECK(status, FAIL, "Chunk Test 8. SDgetchunkinfo"); VERIFY(c_flags_out, (HDF_CHUNK | HDF_NBIT), "Chunk Test 8. SDgetchunkinfo"); VERIFY(chunk_def_out.nbit.start_bit, chunk_def.nbit.start_bit, "Chunk Test 8. SDgetchunkinfo"); VERIFY(chunk_def_out.nbit.bit_len, chunk_def.nbit.bit_len, "Chunk Test 8. SDgetchunkinfo"); VERIFY(chunk_def_out.nbit.sign_ext, chunk_def.nbit.sign_ext, "Chunk Test 8. SDgetchunkinfo"); VERIFY(chunk_def_out.nbit.fill_one, chunk_def.nbit.fill_one, "Chunk Test 8. SDgetchunkinfo"); /* end access to SDS */ status = SDendaccess(newsds8); CHECK(status, FAIL, "Chunk Test 8. SDendaccess"); /* need to close to flush n-bit info to file */ status = SDend(fchk); CHECK(status, FAIL, "Chunk Test 8. SDend"); /* open file again */ fchk = SDstart(CNBITFILE, DFACC_RDWR); CHECK(fchk, FAIL, "Chunk Test 8. SDstart (again)"); /* Select SDS */ newsds8 = SDselect(fchk, 0); if (newsds8 == FAIL) { fprintf(stderr, "Chunk Test 8. Failed to select a data set for n-bit access\n"); num_errs++; goto done; } /* read the n-bit data back in */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds8, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "Chunk Test 8. SDreaddata"); /* Verify the data */ for (i = 0; i < 25; i++) { if ((idata[i] & 0x7f) != rdata[i]) { fprintf(stderr, "Chunk Test 8. Bogus val in loc %d in n-bit dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } } /* Get chunk lengths */ status = SDgetchunkinfo(newsds8, &rchunk_def, &cflags); if (status == FAIL) { fprintf(stderr, "Chunk Test 8. SDgetchunkinfo failed \n"); num_errs++; goto done; } rcdims = rchunk_def.nbit.chunk_lengths; /* check chunk lengths and see if SDS is nbit-compressed and chunked */ if (cdims[0] != rcdims[0] || cdims[1] != rcdims[1] || cflags != (HDF_CHUNK | HDF_NBIT)) { fprintf(stderr, "Chunk Test 8. SDgetchunkinfo returned wrong values\n"); fprintf(stderr, "Chunk Test 8. cflags =%d \n", (int)cflags); fprintf(stderr, "Chunk Test 8. cdims[%d] =%d \n", 0, (int)cdims[0]); fprintf(stderr, "Chunk Test 8. cdims[%d] =%d \n", 1, (int)cdims[1]); fprintf(stderr, "Chunk Test 8. rcdims[%d] =%d \n", 0, (int)rcdims[0]); fprintf(stderr, "Chunk Test 8. rcdims[%d] =%d \n", 1, (int)cdims[1]); num_errs++; goto done; } /* * Retrieve and verify the compression type */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds8, &comp_type); CHECK(status, FAIL, "Chunk Test 8. SDgetcomptype"); VERIFY(comp_type, COMP_CODE_NBIT, "Chunk Test 8. SDgetcomptype"); /* Retrieve and verify the compression info - bug# 307 and bugzilla# 130 */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds8, &comp_type, &cinfo); CHECK(status, FAIL, "Chunk Test 8. SDgetcompinfo"); /* Note: the struct nbit in the union HDF_CHUNK_DEF seems like an extra thing since comp_info also has nbit, but the HDF_CHUNK_DEF.nbit was used to set the compression info so it's also used here to verify */ VERIFY(comp_type, COMP_CODE_NBIT, "Chunk Test 8. SDgetcompinfo"); VERIFY(cinfo.nbit.sign_ext, chunk_def.nbit.sign_ext, "Chunk Test 8. SDgetcompinfo"); VERIFY(cinfo.nbit.fill_one, chunk_def.nbit.fill_one, "Chunk Test 8. SDgetcompinfo"); VERIFY(cinfo.nbit.start_bit, chunk_def.nbit.start_bit, "Chunk Test 8. SDgetcompinfo"); VERIFY(cinfo.nbit.bit_len, chunk_def.nbit.bit_len, "Chunk Test 8. SDgetcompinfo"); /* end of test for bug# 307 and bugzilla# 130 */ /* end access to SDS */ status = SDendaccess(newsds8); CHECK(status, FAIL, "Chunk Test 8. SDendaccess"); /* close file */ status = SDend(fchk); CHECK(status, FAIL, "Chunk Test 8. SDend"); if (num_errs == 0) PASSED(); done: return num_errs; } /* test_chunk() */ hdf4-hdf4.3.1/mfhdf/test/tcomp.c000066400000000000000000000670611503061704500163720ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tcomp.c - tests various compression functionality * Structure of the file: * test_compression - test driver * test_various_comps - creates several data sets with different * compression methods. * ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" /******************************************************************** Name: test_various_comps() - creates several data sets with different compression methods. Description: This function creates and writes data to 3 data sets using three compression methods, deflate, skipping huffman, and szip, in that order. The output file can be used to test display tools like hdp. Return value: The number of errors occurred in this routine. *********************************************************************/ #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif #define FILE_NAME "sds_compressed.hdf" #define SDS1_NAME "SDSgzip" #define SDS2_NAME "SDSskiphuff" #define SDS3_NAME "SDSszip" #define X_LENGTH 5 #define Y_LENGTH 16 #define RANK 2 static intn test_various_comps() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 start[2], edges[2], dim_sizes[2]; int32 data[Y_LENGTH][X_LENGTH]; int32 pixels_per_scanline; intn num_errs = 0; /* number of errors in compression test so far */ int i, j; /********************* End of variable declaration ***********************/ /* Buffer array data and define array dimensions. */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* Create the file and initialize the SD interface. */ sd_id = SDstart(FILE_NAME, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Define the location and size of the data set to be written to the file. */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Create 1st data set for GZIP compression. */ sds_id = SDcreate(sd_id, SDS1_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); /* Set data set SDS1_NAME to use GZIP compression. */ memset(&c_info, 0, sizeof(c_info)); comp_type = COMP_CODE_DEFLATE; c_info.deflate.level = 6; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write the stored data to the 1st data set. */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the 1st data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Create 2nd data set for Skipping Huffman compression. */ sds_id = SDcreate(sd_id, SDS2_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); /* Set data set SDS2_NAME to use Skipping Huffman compression. */ memset(&c_info, 0, sizeof(c_info)); comp_type = COMP_CODE_SKPHUFF; c_info.skphuff.skp_size = 4; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write the stored data to the 2nd data set. */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the 2nd data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); #ifdef H4_HAVE_SZIP_ENCODER /* we have szip library with encoder */ /* Create 3rd data set for SZIP compression. */ sds_id = SDcreate(sd_id, SDS3_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); /* Set data set SDS3_NAME to use SZIP compression. */ comp_type = COMP_CODE_SZIP; pixels_per_scanline = dim_sizes[1]; c_info.szip.pixels = dim_sizes[0] * dim_sizes[1]; ; c_info.szip.pixels_per_block = 2; if (pixels_per_scanline >= 2048) c_info.szip.pixels_per_scanline = 512; else c_info.szip.pixels_per_scanline = dim_sizes[1]; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 64; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write the stored data to the 3rd data set. */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the 3rd data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); #endif /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_various_comps */ #define COMPFILE1 "comptst1.hdf" #define COMPFILE2 "comptst2.hdf" #define COMPFILE3 "comptst3.hdf" #define COMPFILE4 "comptst4.hdf" #define COMPFILE5 "comptst5.hdf" #define COMPFILE6 "comptst6.hdf" #define COMPFILE7 "comptst7.hdf" static int test_compressed_data() { int32 fcomp; /* File handle */ int32 index; /* Index of a dataset */ int32 nt; /* Number type */ int32 dimsize[10]; /* dimension sizes */ int32 newsds, newsds2; /* SDS handles */ comp_coder_t comp_type; /* to retrieve compression type into */ comp_info cinfo; /* compression information structure */ int32 idata[100]; int32 rdata[100]; int32 fillval; intn i; intn num_errs = 0; /* number of errors in compression test so far */ intn status; /* status flag */ int32 start[10], end[10]; /* start and end arrays */ /* * Writing 1st compressed dataset, basic skipping huffman. */ fcomp = SDstart(COMPFILE1, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet1", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } for (i = 0; i < 25; i++) idata[i] = i * 10; /* Set the dataset to be compressed with skipping huffman */ cinfo.skphuff.skp_size = 4; status = SDsetcompress(newsds, COMP_CODE_SKPHUFF, &cinfo); CHECK(status, FAIL, "SDcompress"); /* Test get compression info when the data set is empty but set to be compressed */ status = SDgetcompinfo(newsds, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "SDgetcompinfo"); /* Only get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds, &comp_type); CHECK(status, FAIL, "SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "SDgetcomptype"); /* Write data to the dataset */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* End access to the dataset */ status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read and verify the compressed data and information */ fcomp = SDstart(COMPFILE1, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } /* * Retrieve and verify the compression info - bug# 307 */ #ifndef H4_NO_DEPRECATED_SYMBOLS comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompress(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompress"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "SDgetcompress"); VERIFY(cinfo.skphuff.skp_size, 4, "SDgetcompress"); #endif /* H4_NO_DEPRECATED_SYMBOLS */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "SDgetcompinfo"); VERIFY(cinfo.skphuff.skp_size, 4, "SDgetcompinfo"); /* Only get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds2, &comp_type); CHECK(status, FAIL, "SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "SDgetcomptype"); /* Read and verify the compressed data */ start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "thisone: Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } /* End access to the dataset and the file */ status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Writing 2nd compressed dataset, partially filled & skipping huffman */ fcomp = SDstart(COMPFILE2, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet2", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } /* Set fill value */ fillval = 43; status = SDsetfillvalue(newsds, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); /* Set the dataset to be compressed with skipping huffman */ cinfo.skphuff.skp_size = 4; status = SDsetcompress(newsds, COMP_CODE_SKPHUFF, &cinfo); CHECK(status, FAIL, "SDsetcompress"); /* fill the array with the standard info */ for (i = 0; i < 25; i++) idata[i] = i * 10; /* overwrite selected portions with the fill value */ for (i = 0; i < 5; i++) idata[i] = fillval; for (i = 20; i < 25; i++) idata[i] = fillval; /* Write to the dataset */ start[0] = 1; start[1] = 0; end[0] = 3; end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)&idata[5]); CHECK(status, FAIL, "SDwritedata"); /* End access to the datase */ status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read and verify the compressed data and information */ fcomp = SDstart(COMPFILE2, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); /* Get the dataset by its name */ index = SDnametoindex(fcomp, "CompDataSet2"); CHECK(index, FAIL, "SDnametoindex"); newsds2 = SDselect(fcomp, index); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Creating 3rd compressed dataset, compressed template & skipping huffman */ fcomp = SDstart(COMPFILE3, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet3", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } fillval = 56; status = SDsetfillvalue(newsds, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); cinfo.skphuff.skp_size = 4; status = SDsetcompress(newsds, COMP_CODE_SKPHUFF, &cinfo); CHECK(status, FAIL, "SDsetcompress"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read the compressed data back in */ fcomp = SDstart(COMPFILE3, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (fillval != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Creating 4th compressed dataset, compressed template read, then * partial write & skipping huffman */ fcomp = SDstart(COMPFILE4, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet4", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } fillval = 67; status = SDsetfillvalue(newsds, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); cinfo.skphuff.skp_size = 4; status = SDsetcompress(newsds, COMP_CODE_SKPHUFF, &cinfo); CHECK(status, FAIL, "SDsetcompress"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read the compressed data back in */ fcomp = SDstart(COMPFILE4, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (fillval != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Modifying first compressed dataset. */ fcomp = SDstart(COMPFILE4, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } /* fill the array with the standard info */ for (i = 0; i < 25; i++) idata[i] = i * 10; /* overwrite selected portions with the fill value */ for (i = 0; i < 10; i++) idata[i] = fillval; for (i = 20; i < 25; i++) idata[i] = fillval; start[0] = 2; start[1] = 0; end[0] = 2; end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)&idata[10]); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); fcomp = SDstart(COMPFILE4, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Writing 5th compressed dataset, basic RLE. */ fcomp = SDstart(COMPFILE5, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet5", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } for (i = 0; i < 25; i++) idata[i] = i * 10; status = SDsetcompress(newsds, COMP_CODE_RLE, &cinfo); CHECK(status, FAIL, "SDcompress"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read the compressed data back in. */ fcomp = SDstart(COMPFILE5, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } /* * Retrieve and verify the compression info - bug# 307 */ #ifndef H4_NO_DEPRECATED_SYMBOLS comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompress(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompress"); VERIFY(comp_type, COMP_CODE_RLE, "SDgetcompress"); #endif /* H4_NO_DEPRECATED_SYMBOLS */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_RLE, "SDgetcompinfo"); /* Only get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds2, &comp_type); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_RLE, "SDgetcompinfo"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Writing 6th compressed dataset, no encoding */ fcomp = SDstart(COMPFILE6, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet6", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } for (i = 0; i < 25; i++) idata[i] = i * 10; status = SDsetcompress(newsds, COMP_CODE_NONE, &cinfo); CHECK(status, FAIL, "SDcompress"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read the compressed data back in. */ fcomp = SDstart(COMPFILE6, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } /* * Retrieve and verify the compression info - bug# 307 */ #ifndef H4_NO_DEPRECATED_SYMBOLS comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompress(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompress"); VERIFY(comp_type, COMP_CODE_NONE, "SDgetcompress"); #endif /* H4_NO_DEPRECATED_SYMBOLS */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_NONE, "SDgetcompinfo"); /* Only get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds2, &comp_type); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_NONE, "SDgetcompinfo"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Writing 7th compressed dataset, deflate encoding. */ fcomp = SDstart(COMPFILE7, DFACC_CREATE); CHECK(fcomp, FAIL, "SDstart"); nt = DFNT_INT32; dimsize[0] = 5; dimsize[1] = 5; newsds = SDcreate(fcomp, "CompDataSet7", nt, 2, dimsize); if (newsds == FAIL) { fprintf(stderr, "Failed to create a new data set for compression testing\n"); num_errs++; } for (i = 0; i < 25; i++) idata[i] = i * 10; cinfo.deflate.level = 6; status = SDsetcompress(newsds, COMP_CODE_DEFLATE, &cinfo); CHECK(status, FAIL, "SDcompress"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDwritedata(newsds, start, NULL, end, (void *)idata); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(newsds); CHECK(status, FAIL, "SDendaccess"); /* need to close to flush compressed info to file */ status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* * Read the compressed data back in. */ fcomp = SDstart(COMPFILE7, DFACC_RDWR); CHECK(fcomp, FAIL, "SDstart (again)"); newsds2 = SDselect(fcomp, 0); if (newsds == FAIL) { fprintf(stderr, "Failed to select a data set for compressed access\n"); num_errs++; } /* * Retrieve and verify the compression info - bug# 307 */ #ifndef H4_NO_DEPRECATED_SYMBOLS comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompress(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompress"); VERIFY(comp_type, COMP_CODE_DEFLATE, "SDgetcompress"); VERIFY(cinfo.deflate.level, 6, "SDgetcompress"); #endif /* H4_NO_DEPRECATED_SYMBOLS */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(newsds2, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_DEFLATE, "SDgetcompinfo"); VERIFY(cinfo.deflate.level, 6, "SDgetcompinfo"); /* Only get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(newsds2, &comp_type); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_DEFLATE, "SDgetcompinfo"); start[0] = start[1] = 0; end[0] = end[1] = 5; status = SDreaddata(newsds2, start, NULL, end, (void *)rdata); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < 25; i++) if (idata[i] != rdata[i]) { fprintf(stderr, "Bogus val in loc %d in compressed dset want %ld got %ld\n", i, (long)idata[i], (long)rdata[i]); num_errs++; } status = SDendaccess(newsds2); CHECK(status, FAIL, "SDendaccess"); status = SDend(fcomp); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* end test_compressed_data */ extern int test_compression() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("create/read/write compressed datasets (tcomp.c)"); /* create various data sets with different compression methods */ num_errs = num_errs + test_various_comps(); /* test writing and reading data sets with compression */ num_errs = num_errs + test_compressed_data(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tcoordvar.c000066400000000000000000000623501503061704500172470ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tcoordvar.c - tests some aspects of coordinate variables * Structure of the file: * test_coordvar - test driver * test_dim1_SDS1 - tests that data is not corrupted when the * dimension of SDS #1 is named the same as that of SDS #1. * (previous bug: writing to the dimension would corrupt the SDS) * * test_dim1_SDS2 - tests that data is not corrupted when the * dimension of SDS #1 is named the same as that of SDS #2. * (previous bug: writing to the SDS #2 would corrupt the * dimension) * * test_named_vars - tests that all variables of a given name are * account for. * (problem: SDnametoindex only returns the first SDS of the * inquired name. Two new APIs provide number of all variables * of the same name and retrieve a list of indices of the * named variables.) ****************************************************************************/ #include #include #include "mfhdf.h" #include "hdftest.h" /******************************************************************** Name: test_dim1_SDS1() - tests that data is not corrupted when a dimension is named the same as its SDS. Description: In the past, naming a dimension the same as its SD and writing dimension scale to it will corrupt the SDS' data. This routine tests the provided fix (bugzilla 624) for this situation. The main contents are listed below. Note that when a function name appears in the parentheses, it indicates that the associate step specifically tests the changes made to that function. - create a one-dim SDS, named VAR1_NAME - name its dimension VAR1_NAME - get file information and verify that there is only 1 variable, dataset VAR1_NAME - set attribute to dimension "Variable 1" (SDsetattr) - set attribute to SDS "Variable 1" (SDsetattr) - get file information and verify that there are 2 variable, dataset VAR1_NAME and coordinate variable VAR1_NAME - write data to the SDS - close all and reopen the file - open dataset "Variable 1" (SDnametoindex) - verify that this variable is not a coordinate variable (SDiscoordvar) - read and verify its attribute information and values - get access to the dataset's first dimension - read and verify its attribute information and values - read data and verify that the data is not corrupted Return value: The number of errors occurred in this routine. *********************************************************************/ #define VAR1_NAME "Variable 1" #define ATTR1_NAME "Attribute Dimension 1" #define ATTR2_NAME "Attribute SDS 1" #define ATTR1_VAL "This is a coord var" #define ATTR2_VAL "This is not a coord var" #define ATTR1_LEN 19 #define ATTR2_LEN 23 #define FILE1 "sds1_dim1_samename.hdf" static intn test_dim1_SDS1(void) { float32 sds1_data[] = {0.1F, 2.3F, 4.5F, 6.7F, 8.9F}; float32 out_data[5]; int32 dimsize[1]; int32 sds_id, file_id, dim_id; int32 index = FAIL; int32 start = 0, stride = 1; int32 num_type, count; int32 n_datasets, n_file_attrs, n_vars = 0; intn status = 0, idx, idx1; hdf_varlist_t *var_list = NULL; intn is_coord = FALSE; char attr_name[H4_MAX_NC_NAME], attr_values[80]; intn num_errs = 0; /* number of errors so far */ file_id = SDstart(FILE1, DFACC_CREATE); CHECK(file_id, FAIL, "SDstart"); /* Create a one-dim dataset named VAR1_NAME, of type DFNT_FLOAT32. */ dimsize[0] = 5; sds_id = SDcreate(file_id, VAR1_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds_id, FAIL, "SDcreate"); /* Set the dimension name to be the same as its dataset. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); status = SDsetdimname(dim_id, VAR1_NAME); /* status = SDsetdimname(dim_id, VAR1_NAME); */ CHECK(status, FAIL, "SDsetdimname"); /* Get file info and verify that there is 1 dataset in the file. */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 1, "SDfileinfo"); /* Set an attribute to dimension VAR1_NAME. */ status = SDsetattr(dim_id, ATTR1_NAME, DFNT_CHAR8, ATTR1_LEN, ATTR1_VAL); CHECK(status, FAIL, "SDsetattr"); /* Set an attribute to dataset VAR1_NAME. */ status = SDsetattr(sds_id, ATTR2_NAME, DFNT_CHAR8, ATTR2_LEN, ATTR2_VAL); CHECK(status, FAIL, "SDsetattr"); /* Get file info and verify that there are 2 datasets in the file: 1 SDS and 1 coordinate variable (because of SDsetattr dim) */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 2, "SDfileinfo"); /* Write data to the SDS */ status = SDwritedata(sds_id, &start, &stride, dimsize, (void *)sds1_data); CHECK(status, FAIL, "SDwritedata"); /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Open the file again to check its data */ file_id = SDstart(FILE1, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); /* Check variable type and attributes of each element in the file */ /* Get the number of variables of name VAR1_NAME */ status = SDgetnumvars_byname(file_id, VAR1_NAME, &n_vars); if (n_vars == 1) { /* Get index of dataset VAR1_NAME */ index = SDnametoindex(file_id, VAR1_NAME); CHECK(index, FAIL, "SDnametoindex"); } else { /* Get the list of all variables of named VAR1_NAME */ var_list = (hdf_varlist_t *)malloc(n_vars * sizeof(hdf_varlist_t)); status = SDnametoindices(file_id, VAR1_NAME, var_list); /* In this case, the first variable is a dataset */ for (idx = 0; idx < n_vars; idx++) { if (var_list[idx].var_type == IS_SDSVAR) { index = var_list[idx].var_index; VERIFY(index, 0, "SDnametoindices"); } } } free(var_list); sds_id = SDselect(file_id, index); CHECK(sds_id, FAIL, "SDselect"); /* Verify that this variable is a dataset. */ is_coord = SDiscoordvar(sds_id); VERIFY(is_coord, FALSE, "SDiscoordvar"); /* Read and verify the information of the SDS' first attribute. */ status = SDattrinfo(sds_id, 0, attr_name, &num_type, &count); CHECK(status, FAIL, "SDattrinfo"); VERIFY(count, ATTR2_LEN, "SDattrinfo"); VERIFY(strncmp(attr_name, ATTR2_NAME, 14), 0, "SDattrinfo"); /* Read and verify the values of the SDS' first attribute. */ status = SDreadattr(sds_id, 0, attr_values); CHECK(status, FAIL, "SDreadattr"); if (strncmp(attr_values, ATTR2_VAL, ATTR2_LEN) != 0) { fprintf(stderr, "Unmatched attribute values for SDS %s: is <%s>, should be <%s>\n", VAR1_NAME, attr_values, ATTR2_VAL); num_errs++; } /* Get access to the SDS' first dimension. */ dim_id = SDgetdimid(sds_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); /* Read and verify the information of the dimension's first attribute. */ status = SDattrinfo(dim_id, 0, attr_name, &num_type, &count); CHECK(status, FAIL, "SDattrinfo"); VERIFY(count, 19, "SDattrinfo"); VERIFY(strncmp(attr_name, ATTR1_NAME, 21), 0, "SDattrinfo"); /* Read and verify the values of the dimension's first attribute. */ status = SDreadattr(dim_id, 0, attr_values); CHECK(status, FAIL, "SDreadattr"); if (strncmp(attr_values, ATTR1_VAL, ATTR1_LEN) != 0) { fprintf(stderr, "Unmatched attribute values for dimension %s: is <%s>, should be <%s>\n", VAR1_NAME, attr_values, ATTR1_VAL); num_errs++; } /* Verify again that the number of datasets in the file is 2, 1 SDS and 1 coordinate variable */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 2, "SDfileinfo"); VERIFY(n_file_attrs, 0, "SDfileinfo"); /* Read and verify the dataset's data */ status = SDreaddata(sds_id, &start, NULL, dimsize, &out_data); CHECK(status, FAIL, "SDreaddata"); for (idx1 = 0; idx1 < dimsize[0]; idx1++) if (!H4_FLT_ABS_EQUAL(out_data[idx1], sds1_data[idx1])) { fprintf(stderr, "Read value (%f) differs from written (%f) at [%d]\n", (double)out_data[idx1], (double)sds1_data[idx1], idx1); num_errs++; } /* Close dataset and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_dim1_SDS1 */ /******************************************************************** Name: test_dim1_SDS2() - tests that data is not corrupted when a dimension is named the same as that of another SDS. Description: In the past, naming a dimension the same as an SDS and writing dimension scale to it will corrupt the SDS' data. This routine tests the provided fix (bugzilla 624) for this situation. The main contents are listed below. Note that when a function name appears in the parentheses, it indicates that the associate step specifically tests the changes made to that function. - create a one-dim SDS, named "Variable 1" - name its dimension "Variable 2" - create a two-dim SDS, named "Variable 2", and write data to it - set dimension scale to dimension "Variable 2" (SDsetdimscale) - write data to dataset "Variable 1" - close all and reopen the file - open dataset "Variable 1" (SDnametoindex) - get/verify the first dimension's scales of SDS (SDgetdimscale) - open dataset "Variable 2" (SDnametoindex) - read data and verify that the data is not corrupted Return value: The number of errors occurred in this routine. *********************************************************************/ #define VAR1_NAME "Variable 1" #define VAR2_NAME "Variable 2" #define FILE2 "sds2_dim1_samename.hdf" static intn test_dim1_SDS2(void) { char sds_name[20]; float32 sds2_data[2][3] = {{0.1F, 2.3F, 4.5F}, {4.5F, 6.7F, 8.9F}}; int32 dimsize[1], dimsize2[2]; int32 sds1_id, sds2_id, file_id, dim_id, index; int32 start2[2] = {0, 0}, stride2[2] = {1, 1}; int32 scale1[5] = {101, 102, 103, 104, 105}, scale1_out[5]; int32 num_type, array_rank; int32 n_datasets, n_file_attrs, n_local_attrs; float32 out_data2[2][3]; intn status = 0, idx, idx1, idx2; intn num_errs = 0; /* number of errors so far */ file_id = SDstart(FILE2, DFACC_CREATE); CHECK(file_id, FAIL, "SDstart"); dimsize[0] = 5; dimsize2[0] = 2; dimsize2[1] = 3; sds1_id = SDcreate(file_id, VAR1_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds1_id, FAIL, "SDcreate"); /* Set the dimension name to be the same as the next dataset (not created yet) */ dim_id = SDgetdimid(sds1_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); status = SDsetdimname(dim_id, VAR2_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Get file info and verify that there is 1 dataset in the file */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 1, "SDfileinfo"); /* Create and write data to the second dataset VAR2_NAME */ sds2_id = SDcreate(file_id, VAR2_NAME, DFNT_FLOAT32, 2, dimsize2); CHECK(sds2_id, FAIL, "SDcreate"); status = SDwritedata(sds2_id, start2, stride2, dimsize2, sds2_data); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(sds2_id); CHECK(status, FAIL, "SDendaccess"); /* Get file info and verify that there are 2 datasets in the file. */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 2, "SDfileinfo"); /* Write values to the dimension VAR2_NAME (same name as VAR2_NAME) */ status = SDsetdimscale(dim_id, dimsize[0], DFNT_INT32, scale1); CHECK(status, FAIL, "SDsetdimscale"); /* Get file info and verify that there are 3 datasets in the file: 2 SDS and 1 coordinate variable */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 3, "SDfileinfo"); /* Close dataset and file */ status = SDendaccess(sds1_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Open the file again to check its data */ file_id = SDstart(FILE2, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); /* Verify dimension scale of the first dimension of SDS VAR1_NAME */ /* Get access to dataset VAR1_NAME */ index = SDnametoindex(file_id, VAR1_NAME); CHECK(index, FAIL, "SDnametoindex"); sds1_id = SDselect(file_id, index); CHECK(sds1_id, FAIL, "SDselect"); /* Get access to its first dimension */ dim_id = SDgetdimid(sds1_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); /* Get dimension scale and verify the values */ status = SDgetdimscale(dim_id, scale1_out); CHECK(status, FAIL, "SDgetdimscale"); for (idx = 0; idx < dimsize[0]; idx++) if (scale1_out[idx] != scale1[idx]) { fprintf(stderr, "Read value (%d) differs from written (%d) at [%d]\n", scale1_out[idx], scale1[idx], idx); num_errs++; } /* End verifying dimension scale */ /* Verify dimension scale of the first dimension of SDS VAR1_NAME */ /* Get access to dataset VAR2_NAME */ index = SDnametoindex(file_id, VAR2_NAME); CHECK(index, FAIL, "SDnametoindex"); sds2_id = SDselect(file_id, index); CHECK(sds2_id, FAIL, "SDselect"); /* Get dataset's info and verify them */ status = SDgetinfo(sds2_id, sds_name, &array_rank, dimsize2, &num_type, &n_local_attrs); CHECK(status, FAIL, "SDgetinfo"); VERIFY(array_rank, 2, "SDfileinfo"); VERIFY(num_type, DFNT_FLOAT32, "SDfileinfo"); VERIFY(n_local_attrs, 0, "SDfileinfo"); /* Read and verify the dataset's data */ status = SDreaddata(sds2_id, start2, NULL, dimsize2, &out_data2); CHECK(status, FAIL, "SDreaddata"); for (idx1 = 0; idx1 < dimsize2[0]; idx1++) for (idx2 = 0; idx2 < dimsize2[1]; idx2++) { if (!H4_FLT_ABS_EQUAL(out_data2[idx1][idx2], sds2_data[idx1][idx2])) { fprintf(stderr, "Read value (%f) differs from written (%f) at [%d][%d]\n", (double)out_data2[idx1][idx2], (double)sds2_data[idx1][idx2], idx1, idx2); num_errs++; } } /* Verify again that the number of datasets in the file is 3, 2 SDSs and 1 coordinate variable */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 3, "SDfileinfo"); status = SDendaccess(sds1_id); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(sds2_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_dim1_SDS2 */ /******************************************************************** Name: test_named_vars() - tests that data is not corrupted when a dimension is named the same as that of another SDS. Description: In the past, SDnametoindex returns the index of the first variable of the inquired name although there might be more than one variable having such name. After the fix of bugzilla 624, SDnametoindex was modified to return the first SDS variable of the given name if the name is not unique. Two new APIs, SDgetnumvars_byname and SDnametoindices, will provide the number of variables of a given name, and a list of indices for those variables. This test will concentrate on these new APIs. The main contents are listed below: - create two two-dim SDS, named "Common Name" <- 2 "Common Name"s - create a one-dim SDS, named "One Dimension" <- 1 "One Dimension" - name its dimension "Common Name" <- still 2 "Common Name"s - set dimension scale to dimension "Common Name" <- 3 "Common Name"s - create a one-dim SDS, named "One Dimension" <- 2 "One Dimension"s - name its dimension "Another Name" - create a one-dim SDS, named "Another Name" <- still 1 "Another Name"s - set attribute to dimension "Another Name" <- 2 "Another Name"s - close all and reopen the file - open dataset "Common Name" (SDnametoindex) - this will have two dimensions - get number of variables of name "Common Name" and verify that it's 3 - get the list of indices of "Common Name" and it should be [0, IS_SDSVAR], [1, IS_SDSVAR], [3, IS_CRDVAR] - get number of variables of name "Another Name" and verify that it's 2 - get the list of indices of "Another Name" and it should be [5, IS_SDSVAR], [6, IS_CRDVAR] - get/verify the dimension scales of dimension "Common Name" - get/verify the attribute value of dimension "Another Name" The file contains these items: Index Var Type Name Dimensions 0 SDS "Common Name" 2-dim 1 SDS "Common Name" 2-dim 2 SDS "One Dimension" 1-dim 3 Coordinate "Common Name" 1-dim 4 SDS "One Dimension" 1-dim 5 SDS "Another Name" 1-dim 6 Coordinate "Another Name" 1-dim If someone changes the file contents in this test, please update this table appropriately. Return value: The number of errors occurred in this routine. *********************************************************************/ #define COMMON_NAME "Common Name" #define ONEDIM_NAME "One Dimension" #define ANOTHER_NAME "Another Name" #define FILE3 "vars_samename.hdf" static intn test_named_vars(void) { char sds_name[20]; int32 dimsize[1], dimsize2[2]; int32 sds_id, sds1_id, sds2_id, sds3_id, sds4_id, sds5_id; int32 file_id, dim_id; int32 scale1[5] = {101, 102, 103, 104, 105}; int32 array_rank; int32 n_datasets, n_file_attrs, n_vars = 0; intn status = 0, idx; intn is_coordvar = FALSE; hdf_varlist_t *allvars; intn num_errs = 0; /* number of errors so far */ char line[40]; char contents[7][40] = {"#0 SDS 2-dim 'Common Name'", "#1 SDS 2-dim 'Common Name'", "#2 SDS 1-dim 'One Dimension'", "#3 Coordinate 1-dim 'Common Name'", "#4 SDS 1-dim 'One Dimension'", "#5 SDS 1-dim 'Another Name'", "#6 Coordinate 1-dim 'Another Name'"}; file_id = SDstart(FILE3, DFACC_CREATE); CHECK(file_id, FAIL, "SDstart"); dimsize2[0] = 2; dimsize2[1] = 3; /* Create first COMMON_NAME data set. */ sds1_id = SDcreate(file_id, COMMON_NAME, DFNT_FLOAT32, 2, dimsize2); CHECK(sds1_id, FAIL, "SDcreate"); status = SDendaccess(sds1_id); CHECK(status, FAIL, "SDendaccess"); /* Create second COMMON_NAME data set. */ sds2_id = SDcreate(file_id, COMMON_NAME, DFNT_FLOAT32, 2, dimsize2); CHECK(sds2_id, FAIL, "SDcreate"); status = SDendaccess(sds2_id); CHECK(status, FAIL, "SDendaccess"); dimsize[0] = 5; sds3_id = SDcreate(file_id, ONEDIM_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds3_id, FAIL, "SDcreate"); /* Set the dimension name to be the same as the previous 2 datasets */ dim_id = SDgetdimid(sds3_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); status = SDsetdimname(dim_id, COMMON_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Get file info and verify that there are 3 datasets in the file */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 3, "SDfileinfo"); /* Write values to the dimension COMMON_NAME (same name as first 2 datasets) */ status = SDsetdimscale(dim_id, dimsize[0], DFNT_INT32, scale1); CHECK(status, FAIL, "SDsetdimscale"); /* Get file info and verify that there are 4 datasets in the file */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 4, "SDfileinfo"); dimsize[0] = 8; sds4_id = SDcreate(file_id, ONEDIM_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds4_id, FAIL, "SDcreate"); /* Set the dimension name to be the same as the previous 2 datasets */ dim_id = SDgetdimid(sds4_id, 0); CHECK(dim_id, FAIL, "SDgetdimid"); status = SDsetdimname(dim_id, ANOTHER_NAME); CHECK(status, FAIL, "SDsetdimname"); sds5_id = SDcreate(file_id, ANOTHER_NAME, DFNT_FLOAT32, 1, dimsize); CHECK(sds5_id, FAIL, "SDcreate"); /* Get file info and verify that there are 6 datasets in the file */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 6, "SDfileinfo"); status = SDsetattr(dim_id, ATTR1_NAME, DFNT_CHAR8, ATTR1_LEN, ATTR1_VAL); CHECK(status, FAIL, "SDsetattr"); /* Get file info and verify that there are 7 datasets in the file */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 7, "SDfileinfo"); /* Verify again that the number of datasets in the file is 7 */ status = SDfileinfo(file_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "SDfileinfo"); VERIFY(n_datasets, 7, "SDfileinfo"); /* There are 3 variables of name COMMON_NAME */ status = SDgetnumvars_byname(file_id, COMMON_NAME, &n_vars); CHECK(status, FAIL, "SDgetnumvars_byname"); VERIFY(n_vars, 3, "SDgetnumvars_byname"); allvars = (hdf_varlist_t *)malloc(n_vars * sizeof(hdf_varlist_t)); status = SDnametoindices(file_id, COMMON_NAME, allvars); CHECK(status, FAIL, "SDnametoindices"); VERIFY(allvars[0].var_type, IS_SDSVAR, "SDnametoindices"); VERIFY(allvars[1].var_type, IS_SDSVAR, "SDnametoindices"); VERIFY(allvars[2].var_type, IS_CRDVAR, "SDnametoindices"); free(allvars); /* Compare file contents with predefined text to verify */ for (idx = 0; idx < n_datasets; idx++) { int count; sds_id = SDselect(file_id, idx); CHECK(sds_id, FAIL, "SDselect"); status = SDgetinfo(sds_id, sds_name, &array_rank, NULL, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); is_coordvar = SDiscoordvar(sds_id); if (is_coordvar) count = snprintf(line, 40, "#%d Coordinate %d-dim '%s'\n", idx, array_rank, sds_name); else count = snprintf(line, 40, "#%d SDS %d-dim '%s'\n", idx, array_rank, sds_name); CHECK(count, -1, "snprintf error"); VERIFY((count <= 40), TRUE, "snprintf truncation"); if (strncmp(contents[idx], line, strlen(contents[idx])) != 0) { fprintf(stderr, "File contents are incorrect in testing variable types at variable of index %d\n", idx); } } status = SDend(file_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_named_vars */ /* Test driver for testing various coordinate variable features. */ extern int test_coordvar() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("various coordinate variable features (tcoordvar.c)"); /* test when a dimension being named the same as an SDS */ num_errs = num_errs + test_dim1_SDS1(); num_errs = num_errs + test_dim1_SDS2(); num_errs = num_errs + test_named_vars(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tdatainfo.c000066400000000000000000001754401503061704500172220ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tdatainfo.c - tests the function SDgetdatainfo. * Structure of the file: * test_datainfo - test driver * test_nonspecial_SDSs - tests nonspecial SDSs * test_compressed_SDSs - tests compressed SDSs without closing file * test_empty_SDSs - tests on empty chunked and chunked/comp SDSs * test_chunked_partial - tests on chunked and partially written SDS * test_chkcmp_SDSs - tests chunked/compressed SDSs * test_extend_SDSs - tests SDSs with unlimited dimensions * -BMR, Jul 2010 ****************************************************************************/ #include #include #include #include "hdf_priv.h" #include "mfhdf.h" #ifdef H4_HAVE_FCNTL_H #include #endif #ifdef H4_HAVE_UNISTD_H #include #endif #ifdef H4_HAVE_SYS_STAT_H #include #endif #ifdef H4_HAVE_SYS_TYPES_H #include #endif #if defined H4_HAVE_WIN32_API #define snprintf sprintf_s #define ssize_t int32 #endif #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif #include "hdftest.h" static intn test_nonspecial_SDSs(); static intn test_compressed_SDSs(); static intn test_empty_SDSs(); static intn test_chunked_partial(); static intn test_chkcmp_SDSs(); static intn test_extend_SDSs(); #define SIMPLE_FILE "datainfo_simple.hdf" /* data file */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 typedef struct { int32 numtype; /* number type of the SDS' data */ int32 n_values; /* number of values the SDS can hold */ int32 *offsets; /* offset(s) of data block(s) */ int32 *lengths; /* length(s) of data block(s) */ int32 *dimsizes; /* sizes of dimensions */ } t_hdf_datainfo_t; /* alloc_info is a utility function that allocates hdf_datainfo_t's members*/ static int alloc_info(t_hdf_datainfo_t *info, unsigned info_count, int32 n_dims) { memset(info, 0, sizeof(*info)); /* info_count can be zero, which is a special "don't care" * case. In this case, we just set the arrays to NULL */ if (0 == info_count) { info->offsets = NULL; info->lengths = NULL; } else { info->offsets = (int32 *)malloc(info_count * sizeof(int32)); if (info->offsets == NULL) return -1; info->lengths = (int32 *)malloc(info_count * sizeof(int32)); if (info->lengths == NULL) return -1; } info->dimsizes = (int32 *)malloc(n_dims * sizeof(int32)); if (info->dimsizes == NULL) return -1; return 0; } void free_info(t_hdf_datainfo_t *info) { if (info != NULL) { free(info->offsets); free(info->lengths); free(info->dimsizes); } } /* Calculates the number of values in an SDS using the dimensions and rank */ static int32 comp_n_values(int32 rank, int32 *dimsizes) { int ii; int32 n_values = 1; for (ii = 0; ii < rank; ii++) n_values = n_values * dimsizes[ii]; return (n_values); } /**************************************************************************** Name: test_nonspecial_SDSs() - tests non-special SDSs Description: This routine creates and writes data to non-special SDSs and verifies data and data information with SDgetdatainfo. The tests include the following SDSs: - a 2-dim 5x8 element SDS, float32, with no data - a 1-dim 10-element SDS, int32, with 10 values - a 2-dim 5x8 element SDS, float32, with 5x8 values - a 1-dim 20-element SDS, char, with 20 values SDgetdatainfo will retrieve the number of blocks in the datasets and the offsets and lengths of the blocks. Then the data will be read back from the file at the previously retrieved offsets/lengths, without the use of the HDF4 library, and will be verified against the original data buffers. BMR - Jul 2010 ****************************************************************************/ #define SDS1_NAME "Simple_data_1dim_int32" #define SDS2_NAME "Simple_data_2dims_float32" #define SDS3_NAME "Simple_data_1dim_char" #define RANK1 1 #define RANK2 2 #define LENGTH1_X 10 #define LENGTH2_X 5 #define LENGTH2_Y 8 #define LENGTH3_X 21 static intn test_nonspecial_SDSs() { int32 sd_id, sds_id; int32 dimsizes[2], starts[2], edges[2], rank = 0; int32 data1[LENGTH1_X]; float data2[LENGTH2_X][LENGTH2_Y]; char data3[LENGTH3_X]; t_hdf_datainfo_t sds1_info, sds2_info, sds3_info; uintn info_count = 0; intn status; intn num_errs = 0; /* number of errors so far */ /* Create the file and initialize the SD interface */ sd_id = SDstart(SIMPLE_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_nonspecial_SDSs: SDstart"); /*************************************************************** Create and write non-special SDSs ***************************************************************/ /* Create a 2x2 dataset called "EmptyDataset" */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, "EmptyDataset", DFNT_FLOAT32, 2, dimsizes); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* Open that first dataset and verify that number of data block is 0 */ sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDselect"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); VERIFY(info_count, 0, "test_nonspecial_SDSs: SDgetdatainfo"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* * Create a 1-dim 10-element SDS, type int32, then write 10 values * to it */ dimsizes[0] = LENGTH1_X; sds_id = SDcreate(sd_id, SDS1_NAME, DFNT_INT32, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate"); for (int ii = 0; ii < LENGTH1_X; ii++) data1[ii] = 1000 * ii; starts[0] = 0; edges[0] = LENGTH1_X; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data1); CHECK(status, FAIL, "test_nonspecial_SDSs: SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* * Create a 2-dim 5x8 element SDS, type float32, then write 5x8 values * to it */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, SDS2_NAME, DFNT_FLOAT32, RANK2, dimsizes); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate"); for (int ii = 0; ii < LENGTH2_X; ii++) for (int jj = 0; jj < LENGTH2_Y; jj++) data2[ii][jj] = 500.50 * (ii + jj); starts[0] = 0; starts[1] = 0; edges[0] = LENGTH2_X; edges[1] = LENGTH2_Y; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data2); CHECK(status, FAIL, "test_nonspecial_SDSs: SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* * Create a 1-dim 20-element SDS, type char, then write 20 values * to it */ dimsizes[0] = LENGTH3_X; sds_id = SDcreate(sd_id, SDS3_NAME, DFNT_CHAR, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate"); strcpy(data3, "The data of 3rd SDS."); starts[0] = 0; edges[0] = LENGTH3_X; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data3); CHECK(status, FAIL, "test_nonspecial_SDSs: SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /*********************************************************************** Read data info for later accessing data without the use of HDF4 library ***********************************************************************/ /* Open the second dataset, verify that number of data block is 1, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 1); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDselect SDS index 1"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_nonspecial_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 1"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds1_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, &rank, sds1_info.dimsizes, &(sds1_info.numtype), NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 1"); /* Record number of values the SDS can have */ sds1_info.n_values = comp_n_values(rank, sds1_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds1_info.offsets, sds1_info.lengths); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* Open the third dataset, verify that number of data block is 1, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 2); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDselect SDS index 2"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_nonspecial_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 1"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds2_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds2_info.dimsizes, &(sds2_info.numtype), NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 2"); /* Record number of values the SDS can have */ sds2_info.n_values = comp_n_values(rank, sds2_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds2_info.offsets, sds2_info.lengths); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); /* Close SDS index 2 */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* Open the last dataset, verify that number of data block is 1, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 3); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDselect SDS index 3"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_nonspecial_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 1"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds3_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds3_info.dimsizes, &(sds3_info.numtype), NULL); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetinfo SDS index 3"); /* Record number of values the SDS can have */ sds3_info.n_values = comp_n_values(rank, sds3_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds3_info.offsets, sds3_info.lengths); CHECK(status, FAIL, "test_nonspecial_SDSs: SDgetdatainfo"); /* Close SDS index 3 */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDend"); /****************************************************************** Read data using previously obtained data info without HDF4 library ******************************************************************/ /* Open file and read in data without using SD API */ { int fd; /* for open */ int32 ret32; /* for DFKconvert */ ssize_t readlen = 0; /* for read */ int32 *readibuf, *readibuf_swapped; float *readfbuf, *readfbuf_swapped; int kk; /* Open the file for reading without SD API */ fd = open(SIMPLE_FILE, O_RDONLY); if (fd == -1) { fprintf(stderr, "test_nonspecial_SDSs: unable to open file %s", SIMPLE_FILE); num_errs++; return num_errs; } /* Forward to the position of the data of SDS at index 1 */ if (lseek(fd, (off_t)sds1_info.offsets[0], SEEK_SET) == -1) { fprintf(stderr, "test_nonspecial_SDSs: unable to seek offset %d\n", (int)sds1_info.offsets[0]); num_errs++; return num_errs; } /* Allocate buffers for SDS' data */ readibuf = (int32 *)malloc(sds1_info.n_values * sizeof(int32)); readibuf_swapped = (int32 *)malloc(sds1_info.n_values * sizeof(int32)); /* Read in this block of data */ readlen = read(fd, (void *)readibuf, (size_t)sds1_info.lengths[0]); CHECK(readlen, FAIL, "DFKconvert"); ret32 = DFKconvert(readibuf, readibuf_swapped, sds1_info.numtype, (uint32)sds1_info.n_values, DFACC_WRITE, 0, 0); CHECK(ret32, FAIL, "DFKconvert"); if (ret32 > 0) { /* Compare data read without SD API against the original buffer */ for (int ii = 0; ii < sds1_info.n_values; ii++) { if (readibuf_swapped[ii] != data1[ii]) fprintf(stderr, "At value# %d: written = %d read = %d\n", ii, data1[ii], readibuf_swapped[ii]); } } free(readibuf_swapped); free(readibuf); /* Forward to the position of the data of SDS at index 2 */ if (lseek(fd, (off_t)sds2_info.offsets[0], SEEK_SET) == -1) { fprintf(stderr, "test_nonspecial_SDSs: unable to seek offset %d\n", (int)sds2_info.offsets[0]); num_errs++; return num_errs; } /* Allocate buffers for SDS' data */ readfbuf = (float32 *)malloc(sds2_info.n_values * sizeof(float32)); readfbuf_swapped = (float32 *)malloc(sds2_info.n_values * sizeof(float32)); /* Read in this block of data */ readlen = read(fd, (void *)readfbuf, (size_t)sds2_info.lengths[0]); CHECK(readlen, FAIL, "DFKconvert"); ret32 = DFKconvert(readfbuf, readfbuf_swapped, sds2_info.numtype, (uint32)sds2_info.n_values, DFACC_WRITE, 0, 0); CHECK(ret32, FAIL, "DFKconvert"); /* Compare data read without SD API against the original buffer */ kk = 0; for (int jj = 0; jj < sds2_info.dimsizes[0]; jj++) for (int ii = 0; ii < sds2_info.dimsizes[1]; ii++) { /* Flag if the two numbers are not close enough */ if (fabs(readfbuf_swapped[kk] - data2[jj][ii]) > 0.00001) fprintf(stderr, "At value# %d: written = %f read = %f\n", ii, (double)data2[jj][ii], (double)readfbuf_swapped[kk]); if (kk < sds2_info.n_values) kk++; } free(readfbuf_swapped); free(readfbuf); /* Forward to the position of the data of SDS at index 3 */ if (lseek(fd, (off_t)sds3_info.offsets[0], SEEK_SET) == -1) { fprintf(stderr, "test_nonspecial_SDSs: unable to seek offset %d\n", (int)sds3_info.offsets[0]); num_errs++; return num_errs; } /* Allocate buffers for SDS' data */ readibuf = (int32 *)malloc(sds3_info.n_values * sizeof(int32)); readibuf_swapped = (int32 *)malloc(sds3_info.n_values * sizeof(int32)); /* Read in this block of data */ readlen = read(fd, (void *)readibuf, (size_t)sds3_info.lengths[0]); CHECK(readlen, FAIL, "DFKconvert"); ret32 = DFKconvert(readibuf, readibuf_swapped, sds3_info.numtype, (uint32)sds3_info.n_values, DFACC_WRITE, 0, 0); CHECK(ret32, FAIL, "DFKconvert"); if (ret32 > 0) { /* Compare data read without SD API against the original buffer */ for (int ii = 0; ii < sds3_info.n_values; ii++) { if (readibuf_swapped[ii] != data3[ii]) fprintf(stderr, "At value# %d: written = %d read = %d\n", ii, data3[ii], readibuf_swapped[ii]); } } free(readibuf_swapped); free(readibuf); if (close(fd) == -1) { fprintf(stderr, "test_nonspecial_SDSs: unable to close file %s", SIMPLE_FILE); num_errs++; return num_errs; } } free_info(&sds1_info); free_info(&sds2_info); free_info(&sds3_info); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_nonspecial_SDSs */ /**************************************************************************** Name: test_compressed_SDSs() - tests compressed SDSs Description: This routine creates and writes data to compressed SDSs and verifies data and data information with SDgetdatainfo. The tests include the following SDSs: - a 2-dim 5x8 element SDS, float32, NBIT compression, no data - a 1-dim 10-element SDS, int32, Deflate compression, with 10 values - a 2-dim 5x8 element SDS, float32, SZIP compression, with 5x8 values - a 1-dim 20-element SDS, char, Skipping Huffman compression, with 20 values SDgetdatainfo will retrieve the number of blocks in the datasets and the offsets and lengths of the blocks. Then the data will be read back from the file at the previously retrieved offsets/lengths, without the use of the HDF4 library, and will be verified against the original data buffers. BMR - Jul 2010 ****************************************************************************/ #define COMP_FILE "datainfo_cmp.hdf" /* data file */ static intn test_compressed_SDSs() { int32 sd_id, sds_id; int32 starts[2], edges[2], dimsizes[2], rank = 0; comp_coder_t comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 data1[LENGTH1_X]; float data2[LENGTH2_X][LENGTH2_Y]; char data3[LENGTH3_X]; t_hdf_datainfo_t sds1_info, sds2_info, sds3_info; int32 pixels_per_scanline; uintn info_count = 0; intn status; int ii, jj; int num_errs = 0; /* number of errors so far */ /* Create the file and initialize the SD interface */ sd_id = SDstart(COMP_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_compressed_SDSs: SDstart"); /*************************************************************** Create and write compressed SDSs ***************************************************************/ /* Create data set 'NBit-No-Data' */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, "NBit-No-Data", DFNT_INT32, 2, dimsizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'NBit-No-Data'"); /* Promote the data set 'NBit-No-Data' to an NBIT data set */ status = SDsetnbitdataset(sds_id, 6, 7, FALSE, FALSE); CHECK(status, FAIL, "test_compressed_SDSs: SDsetnbitdataset"); /* End access to 'NBit-No-Data' */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess"); /* * Create a 1-dim 10-element SDS, type int32, set Deflate compression, * then write 10 values to it */ dimsizes[0] = LENGTH1_X; sds_id = SDcreate(sd_id, "Deflate-Data", DFNT_INT32, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'Deflate-Data'"); comp_type = COMP_CODE_DEFLATE; memset(&c_info, 0, sizeof(c_info)); c_info.deflate.level = 6; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "test_compressed_SDSs: SDsetcompress 'Deflate-Data'"); for (ii = 0; ii < LENGTH1_X; ii++) data1[ii] = 1000 * ii; starts[0] = 0; edges[0] = LENGTH1_X; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data1); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata 'Deflate-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'Deflate-Data'"); for (ii = 0; ii < LENGTH2_X; ii++) for (jj = 0; jj < LENGTH2_Y; jj++) data2[ii][jj] = 500.50 * (ii + jj); #ifdef H4_HAVE_SZIP_ENCODER /* * Create a 2-dim 5x8 element SDS, type float32, set SZIP compression, * then write 5x8 values to it */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, "SZIP-Data", DFNT_FLOAT32, RANK2, dimsizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'SZIP-Data'"); comp_type = COMP_CODE_SZIP; memset(&c_info, 0, sizeof(c_info)); pixels_per_scanline = dimsizes[1]; c_info.szip.pixels = dimsizes[0] * dimsizes[1]; ; c_info.szip.pixels_per_block = 2; if (pixels_per_scanline >= 2048) c_info.szip.pixels_per_scanline = 512; else c_info.szip.pixels_per_scanline = dimsizes[1]; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 64; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "test_compressed_SDSs: SDsetcompress 'SZIP-Data'"); starts[0] = starts[1] = 0; edges[0] = LENGTH2_X; edges[1] = LENGTH2_Y; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data2); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata 'SZIP-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'SZIP-Data'"); #else /* SZIP lib not available */ /* * Create a 2-dim 5x8 element SDS, type float32, set SZIP compression, * then write 5x8 values to it */ dimsizes[0] = LENGTH2_X; dimsizes[1] = LENGTH2_Y; sds_id = SDcreate(sd_id, "NBIT-Data", DFNT_FLOAT32, RANK2, dimsizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'NBIT-Data'"); /* Promote the data set 'NBit-No-Data' to an NBIT data set */ status = SDsetnbitdataset(sds_id, 6, 7, FALSE, FALSE); CHECK(status, FAIL, "test_compressed_SDSs: SDsetnbitdataset"); /* Initialize data to write out */ /* for(ii = 0; ii < LENGTH2_X*LENGTH2_Y; ii++) idata[ii] = ii*10; */ /* Write data to the NBIT data set 'NBitDataSet' */ starts[0] = starts[1] = 0; edges[0] = LENGTH2_X; edges[1] = LENGTH2_Y; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data2); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'SZIP-Data'"); #endif /* SZIP lib available */ /* * Create a 1-dim 20-element SDS, type char, set Skipping Huffman * compression, then write 20 values to it */ dimsizes[0] = LENGTH3_X; sds_id = SDcreate(sd_id, "SKPHUFF-Data", DFNT_CHAR, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'SKPHUFF-Data'"); memset(&c_info, 0, sizeof(c_info)); comp_type = COMP_CODE_SKPHUFF; c_info.skphuff.skp_size = 4; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "test_compressed_SDSs: SDsetcompress 'SKPHUFF-Data'"); strcpy(data3, "The data of 3rd SDS."); starts[0] = 0; edges[0] = LENGTH3_X; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data3); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata 'SKPHUFF-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'SKPHUFF-Data'"); status = SDend(sd_id); CHECK(status, FAIL, "test_compressed_SDSs: SDend COMP_FILE"); /*********************************************************************** Read data info for later accessing data without the use of HDF4 library ***********************************************************************/ /* Open the file to get data info of the SDSs */ sd_id = SDstart(COMP_FILE, DFACC_RDONLY); CHECK(sd_id, FAIL, "test_compressed_SDSs: SDstart COMP_FILE"); /* Open the first dataset, verify that number of data block is 0, then verify its compression type is NBIT */ sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDselect SDS index 0"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_compressed_SDSs: SDgetdatainfo"); VERIFY(info_count, 0, "test_compressed_SDSs: SDgetdatainfo"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "test_compressed_SDSs: SDgetcomptype"); VERIFY(comp_type, COMP_CODE_NBIT, "test_compressed_SDSs: SDgetcomptype"); /* Open the second dataset, verify that number of data block is 1, verify its comp type is Deflate, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 1); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDselect SDS index 1"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_compressed_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_compressed_SDSs: SDgetdatainfo"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "test_compressed_SDSs: SDgetcomptype"); VERIFY(comp_type, COMP_CODE_DEFLATE, "test_compressed_SDSs: SDgetcomptype"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 1"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds1_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds1_info.dimsizes, &(sds1_info.numtype), NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 1"); /* Record number of values the SDS can have */ sds1_info.n_values = comp_n_values(rank, sds1_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds1_info.offsets, sds1_info.lengths); CHECK(status, FAIL, "test_compressed_SDSs: SDgetdatainfo"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess"); /* Open the third dataset, verify that number of data block is 1, verify its comp type is SZIP or NBIT, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 2); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDselect SDS index 2"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_compressed_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_compressed_SDSs: SDgetdatainfo"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "test_compressed_SDSs: SDgetcomptype"); #ifdef H4_HAVE_SZIP_ENCODER VERIFY(comp_type, COMP_CODE_SZIP, "test_compressed_SDSs: SDgetcomptype"); #else VERIFY(comp_type, COMP_CODE_NBIT, "test_compressed_SDSs: SDgetcomptype"); #endif /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 2"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds2_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds2_info.dimsizes, &(sds2_info.numtype), NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 2"); /* Record number of values the SDS can have */ sds2_info.n_values = comp_n_values(rank, sds2_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds2_info.offsets, sds2_info.lengths); CHECK(status, FAIL, "test_compressed_SDSs: SDgetdatainfo"); /* Close SDS index 2 */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess"); /* Open the third dataset, verify that number of data block is 1, verify its comp type is Skipping Huffman, then retrieve and record the offset/length */ sds_id = SDselect(sd_id, 3); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDselect SDS index 3"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_compressed_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_compressed_SDSs: SDgetdatainfo"); comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "test_compressed_SDSs: SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SKPHUFF, "test_compressed_SDSs: SDgetcomptype"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 3"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds3_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds3_info.dimsizes, &(sds3_info.numtype), NULL); CHECK(status, FAIL, "test_compressed_SDSs: SDgetinfo SDS index 3"); /* Record number of values the SDS can have */ sds3_info.n_values = comp_n_values(rank, sds3_info.dimsizes); /* Retrieve the offset and length of the data block */ status = SDgetdatainfo(sds_id, NULL, 0, info_count, sds3_info.offsets, sds3_info.lengths); CHECK(status, FAIL, "test_compressed_SDSs: SDgetdatainfo"); /* Close SDS index 3 */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess"); /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "test_compressed_SDSs: SDend"); /****************************************************************** Read data using previously obtained data info without HDF4 library ******************************************************************/ free_info(&sds1_info); free_info(&sds2_info); free_info(&sds3_info); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_compressed_SDSs */ /* * Test with empty SDSs. This routine creates a "Chunked Empty" SDS and a * "Chunked Compressed Empty" SDS then uses SDgetdatainfo to get the * number of blocks for data, which should be 0. */ /**************************************************************************** Name: test_empty_SDSs() - tests special but empty SDSs Description: This routine creates special SDSs but does not write data to any of the SDSs, then uses SDgetdatainfo to verify that the number of data blocks of each SDS is 0. BMR - Jul 2010 ****************************************************************************/ #define X_LENGTH2 4 #define Y_LENGTH2 9 #define CHK_X 3 #define CHK_Y 2 #define NUM_SDS 3 #define NODATA_FILE "datainfo_nodata.hdf" /* data file */ static intn test_empty_SDSs() { int32 sd_id, sds_id; int32 dimsizes[RANK]; uintn info_count = 0; comp_coder_t comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int ii; intn status; int num_errs = 0; /* number of errors so far */ /* Use the same file as in test_compressed_SDSs */ sd_id = SDstart(NODATA_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_empty_SDSs: SDstart"); /* * Create compressed, chunked, chunked/compressed, and expandible SDSs * without writing data to any of them */ dimsizes[0] = Y_LENGTH2; dimsizes[1] = X_LENGTH2; /* Contiguous-No-Data */ sds_id = SDcreate(sd_id, "Contiguous-No-Data", DFNT_INT16, RANK, dimsizes); CHECK(sds_id, FAIL, "test_empty_SDSs: SDcreate 'Contiguous-No-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_empty_SDSs: SDendaccess 'Contiguous-No-Data'"); /* Compressed-No-Data */ sds_id = SDcreate(sd_id, "Compressed-No-Data", DFNT_INT16, RANK, dimsizes); CHECK(sds_id, FAIL, "test_empty_SDSs: SDcreate 'Compressed-No-Data'"); memset(&c_info, 0, sizeof(c_info)); comp_type = COMP_CODE_SKPHUFF; c_info.skphuff.skp_size = 4; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "test_empty_SDSs: SDsetcompress 'Compressed-No-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_empty_SDSs: SDendaccess 'Compressed-No-Data'"); /* Extend-No-Data */ dimsizes[0] = SD_UNLIMITED; sds_id = SDcreate(sd_id, "Extend-No-Data", DFNT_INT16, RANK, dimsizes); CHECK(sds_id, FAIL, "test_empty_SDSs: SDcreate 'Extend-No-Data'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_empty_SDSs: SDendaccess 'Extend-No-Data'"); /* Verify that the number of data block is 0 for all data sets */ for (ii = 0; ii < NUM_SDS; ii++) { sds_id = SDselect(sd_id, ii); CHECK_IND(sds_id, FAIL, "test_empty_SDSs: SDselect", ii); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK_IND(info_count, FAIL, "test_empty_SDSs: SDgetdatainfo", ii); VERIFY(info_count, 0, "test_empty_SDSs: SDgetdatainfo"); status = SDendaccess(sds_id); CHECK_IND(status, FAIL, "test_empty_SDSs: SDendaccess", ii); } /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "test_empty_SDSs: SDend"); /* Reopen the file and check again to make sure that it is still correct after flushing the metadata */ sd_id = SDstart(NODATA_FILE, DFACC_READ); CHECK(sd_id, FAIL, "test_empty_SDSs: SDstart"); /* Verify that the number of data block is 0 for all data sets */ for (ii = 0; ii < NUM_SDS; ii++) { sds_id = SDselect(sd_id, ii); CHECK_IND(sds_id, FAIL, "test_empty_SDSs: SDselect", ii); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK_IND(info_count, FAIL, "test_empty_SDSs: SDgetdatainfo", ii); VERIFY(info_count, 0, "test_empty_SDSs: SDgetdatainfo"); status = SDendaccess(sds_id); CHECK_IND(status, FAIL, "test_empty_SDSs: SDendaccess", ii); } /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "test_empty_SDSs: SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_empty_SDSs */ /**************************************************************************** Name: test_chunked_partial() - tests writing partially to chunked SDSs Description: This routine creates and writes data to compressed SDSs and verifies data and data information with SDgetdatainfo. The tests include the following SDSs: - a 2-dim 5x8 element SDS, float32, NBIT compression, no data - a 1-dim 10-element SDS, int32, Deflate compression, with 10 values - a 2-dim 5x8 element SDS, float32, SZIP compression, with 5x8 values - a 1-dim 20-element SDS, char, Skipping Huffman compression, with 20 values SDgetdatainfo will retrieve the number of blocks in the datasets and the offsets and lengths of the blocks. Then the data will be read back from the file at the previously retrieved offsets/lengths, without the use of the HDF4 library, and will be verified against the original data buffers. BMR - Jul 2010 ****************************************************************************/ #define CHK_FILE "datainfo_chk.hdf" /* data file */ static intn test_chunked_partial() { int32 sd_id, sds_id, sds_index; int32 dimsizes[RANK], origin[RANK], starts[RANK], rank = 0, edges[RANK]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ uintn info_count = 0; t_hdf_datainfo_t sds_info; int32 data[Y_LENGTH][X_LENGTH]; int fd; /* for open */ int chk_num; int num_errs = 0; /* number of errors so far */ intn status; /* Declare chunks data type and initialize some of them. */ int32 chunk_1dim[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; /* Create the file and initialize the SD interface */ sd_id = SDstart(CHK_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_chunked_partial: SDstart"); /* Initialize chunk size */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = 10; /* - Create a 1-dim 100-element SDS with chunk size 10, write 2 chunks, first and last, close it - Create a 2-dim (5x5)-element non-special SDS, write all the data, close it - Call SDgetdatainfo on the first dataset to locate the data written (what about fill values?) - Open first SDS then write 1 more chunk after the first chunk - Call SDgetdatainfo (investigate!) */ /* Create a one-dim chunked SDS to be written partially */ dimsizes[0] = 100; sds_id = SDcreate(sd_id, "Chunked-Partial-Data", DFNT_INT32, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_chunked_partial: SDcreate"); /* Fill the SDS array with fill value */ /* status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chunked_partial: SDsetfillvalue"); */ /* Set info for chunking */ status = SDsetchunk(sds_id, c_def, HDF_CHUNK); CHECK(status, FAIL, "test_chunked_partial: SDsetchunk"); /* Write partially to 'Chunked-Partial-Data' and check the sizes */ /* Write the chunk with the coordinates (0) */ origin[0] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk_1dim); CHECK(status, FAIL, "test_chunked_partial: SDwritechunk"); /* Write the chunk with the coordinates (4) */ origin[0] = 4; status = SDwritechunk(sds_id, origin, (void *)chunk_1dim); CHECK(status, FAIL, "test_chunked_partial: SDwritechunk"); /* Terminate access to 'Chunked-Partial-Data' */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chunked_partial: SDendaccess"); /* Create a 2x2 dataset called 'Non-Special-Data 1' */ dimsizes[0] = Y_LENGTH; dimsizes[1] = X_LENGTH; sds_id = SDcreate(sd_id, "Non-Special-Data 1", DFNT_INT32, 2, dimsizes); CHECK(sds_id, FAIL, "test_chunked_partial: SDcreate"); /* Initialize data for the dataset */ for (int jj = 0; jj < Y_LENGTH; jj++) { for (int ii = 0; ii < X_LENGTH; ii++) data[jj][ii] = (ii + jj) + 1; } /* Write the stored data to the dataset */ starts[0] = starts[1] = 0; edges[0] = dimsizes[0]; edges[1] = dimsizes[1]; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data); CHECK(status, FAIL, "test_chunked_partial: SDwritedata"); /* Get access to the chunked SDS that was written partially earlier */ sds_index = SDnametoindex(sd_id, "Chunked-Partial-Data"); CHECK(sds_index, FAIL, "test_chunked_partial: SDnametoindex"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_chunked_partial: SDselect 'Chunked-Partial-Data'"); /* Verify that only two chunks had been written */ /* Write another chunk at the coordinate (6) */ origin[0] = 6; status = SDwritechunk(sds_id, origin, (void *)chunk_1dim); CHECK(status, FAIL, "test_chunked_partial: SDwritechunk"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chunked_partial: SDendaccess"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_chunked_partial: SDselect 'Chunked-Partial-Data'"); /* Verify new number of chunks written */ /* Retrieve the offset and length of the chunks */ /* Get SDS' rank to know how much to allocate space for sds_info */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_chunked_partial: SDgetinfo"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds_info.dimsizes, &(sds_info.numtype), NULL); CHECK(status, FAIL, "test_chunked_partial: SDgetinfo"); /* Record number of values the SDS can have */ sds_info.n_values = 1 * 10; /* chunk has 1 dim of size 10 */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chunked_partial: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_chunked_partial: SDend"); /* Open file and read in data without using SD API */ fd = open(CHK_FILE, O_RDONLY); if (fd == -1) { fprintf(stderr, "test_chunked_partial: unable to open file %s", CHK_FILE); num_errs++; return num_errs; } /* Read each chunk and compare values */ for (chk_num = 0; chk_num < info_count; chk_num++) { int32 ret32; /* for DFKconvert */ ssize_t readlen = 0; /* for read */ int32 *readibuf, *readibuf_swapped; /* Forward to the position of the data of the SDS */ if (lseek(fd, (off_t)sds_info.offsets[chk_num], SEEK_SET) == -1) { fprintf(stderr, "test_chunked_partial: unable to seek offset %d\n", (int)sds_info.offsets[chk_num]); num_errs++; return num_errs; } /* Allocate buffers for SDS' data */ readibuf = (int32 *)malloc(sds_info.lengths[chk_num]); readibuf_swapped = (int32 *)malloc(sds_info.lengths[chk_num]); /* readibuf = (int32 *) malloc(sds_info.n_values * sizeof(int32)); readibuf_swapped = (int32 *) malloc(sds_info.n_values * sizeof(int32)); */ /* Read in this block of data */ readlen = read(fd, (void *)readibuf, (size_t)sds_info.lengths[chk_num]); CHECK(readlen, FAIL, "test_chunked_partial: read"); ret32 = DFKconvert(readibuf, readibuf_swapped, sds_info.numtype, 10, DFACC_WRITE, 0, 0); /* (uint32)sds_info.n_values, DFACC_WRITE, 0, 0); */ CHECK(ret32, FAIL, "test_chunked_partial: DFKconvert"); /* Compare data read without SD API against the original buffer */ for (int ii = 0; ii < sds_info.n_values; ii++) { if (readibuf_swapped[ii] != chunk_1dim[ii]) fprintf(stderr, "At value# %d: written = %d read = %d\n", ii, chunk_1dim[ii], readibuf_swapped[ii]); } free(readibuf_swapped); free(readibuf); } free_info(&sds_info); if (close(fd) == -1) { fprintf(stderr, "test_chunked_partial: unable to close file %s", CHK_FILE); num_errs++; return num_errs; } /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_chunked_partial */ /* * Test with chunked and compressed SDS. This routine creates * "Chunked-Deflate-Data" and "Chunked-NoDeflate-Data" SDSs and writes the same * data to both. It will then use SDgetdatainfo to verify the number of * data blocks. */ #define CHKCMP_FILE "datainfo_chkcmp.hdf" /* data file */ static intn test_chkcmp_SDSs() { int32 sd_id, sds_id, sds_index; int32 cmpsds_id, cmpsds_index; int32 flag; int32 dimsizes[RANK], origin[RANK], rank = 0; HDF_CHUNK_DEF c_def; /* Chunking definitions */ t_hdf_datainfo_t sds_info, cmpsds_info; int32 fill_value = 0; /* Fill value */ int32 chk_coord[2]; uintn info_count = 0; intn status; int num_errs = 0; /* number of errors so far */ /* Declare chunks data type and initialize some of them. */ int32 chunk1[CHK_X][CHK_Y] = {{1, 1}, {1, 1}, {1, 1}}; int32 chunk3[CHK_X][CHK_Y] = {{3, 3}, {3, 3}, {3, 3}}; int32 chunk2[CHK_X][CHK_Y] = {{2, 2}, {2, 2}, {2, 2}}; /* Initialize chunk size */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; /* Create the file and initialize the SD interface */ sd_id = SDstart(CHKCMP_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_chkcmp_SDSs: SDstart"); /* Create Y_LENGTH2 x X_LENGTH2 SDS */ dimsizes[0] = Y_LENGTH2; dimsizes[1] = X_LENGTH2; cmpsds_id = SDcreate(sd_id, "Chunked-Deflate-Data", DFNT_INT32, RANK, dimsizes); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDcreate"); sds_id = SDcreate(sd_id, "Chunked-NoDeflate-Data", DFNT_INT32, RANK, dimsizes); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDcreate"); /* Fill the SDS array with the fill value */ status = SDsetfillvalue(cmpsds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetfillvalue"); status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetfillvalue"); /* Set info for chunking and compression */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; flag = HDF_CHUNK | HDF_COMP; c_def.comp.comp_type = COMP_CODE_DEFLATE; c_def.comp.cinfo.deflate.level = 6; status = SDsetchunk(cmpsds_id, c_def, flag); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetchunk"); memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; flag = HDF_CHUNK; status = SDsetchunk(sds_id, c_def, flag); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetchunk"); /* Set chunk cache to hold maximum of 3 chunks maxcache = 1; new_maxcache = SDsetchunkcache(cmpsds_id, maxcache, 0); CHECK(new_maxcache, FAIL, "test_chkcmp_SDSs: SDsetchunkcache"); new_maxcache = SDsetchunkcache(sds_id, maxcache, 0); CHECK(new_maxcache, FAIL, "test_chkcmp_SDSs: SDsetchunkcache"); */ /* Terminate access to the dataset before writing data to it. */ status = SDendaccess(cmpsds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); /* Re-select the datasets, write chunks using SDwritechunk function, then check their data sizes */ /* Get index of dataset using its name */ cmpsds_index = SDnametoindex(sd_id, "Chunked-Deflate-Data"); CHECK(cmpsds_index, FAIL, "test_chkcmp_SDSs: SDnametoindex"); sds_index = SDnametoindex(sd_id, "Chunked-NoDeflate-Data"); CHECK(sds_index, FAIL, "test_chkcmp_SDSs: SDnametoindex"); /* Select the datasets for access */ cmpsds_id = SDselect(sd_id, cmpsds_index); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDselect"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDselect"); /* Write the chunk with the coordinates (0,0) */ origin[0] = 0; origin[1] = 0; status = SDwritechunk(cmpsds_id, origin, (void *)chunk1); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); status = SDwritechunk(sds_id, origin, (void *)chunk1); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); /* Write the chunk with the coordinates (1,0) */ origin[0] = 1; origin[1] = 0; status = SDwritechunk(cmpsds_id, origin, (void *)chunk3); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); status = SDwritechunk(sds_id, origin, (void *)chunk3); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); /* Write the chunk with the coordinates (0,1) */ origin[0] = 0; origin[1] = 1; status = SDwritechunk(cmpsds_id, origin, (void *)chunk2); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); status = SDwritechunk(sds_id, origin, (void *)chunk2); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk"); /* Terminate access to the datasets */ status = SDendaccess(cmpsds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDend"); /* Retrieve the offset and length of the chunks of both SDSs */ /* Create the file and initialize the SD interface */ sd_id = SDstart(CHKCMP_FILE, DFACC_RDWR); CHECK(sd_id, FAIL, "test_chkcmp_SDSs: SDstart"); /* Open dataset 'Chunked-Deflate-Data' */ cmpsds_id = SDselect(sd_id, cmpsds_index); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDselect"); /* Open dataset 'Chunked-NoDeflate-Data' */ sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDselect"); /* * "Chunked-NoDeflate-Data" */ chk_coord[0] = chk_coord[1] = 0; info_count = SDgetdatainfo(sds_id, chk_coord, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_chkcmp_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_chkcmp_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetinfo SDS index 3"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds_info.dimsizes, &(sds_info.numtype), NULL); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetinfo"); /* Record number of values the SDS can have */ sds_info.n_values = comp_n_values(rank, sds_info.dimsizes); status = SDgetdatainfo(sds_id, chk_coord, 0, info_count, sds_info.offsets, sds_info.lengths); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetdatainfo"); free_info(&sds_info); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); /* * "Chunked-Deflate-Data" */ chk_coord[0] = 0; chk_coord[1] = 1; info_count = SDgetdatainfo(cmpsds_id, chk_coord, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_chkcmp_SDSs: SDgetdatainfo"); VERIFY(info_count, 1, "test_chkcmp_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(cmpsds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetinfo"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&cmpsds_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(cmpsds_id, NULL, NULL, cmpsds_info.dimsizes, &(cmpsds_info.numtype), NULL); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetinfo"); /* Record number of values the SDS can have */ cmpsds_info.n_values = comp_n_values(rank, cmpsds_info.dimsizes); status = SDgetdatainfo(cmpsds_id, chk_coord, 0, info_count, cmpsds_info.offsets, cmpsds_info.lengths); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetdatainfo"); free_info(&cmpsds_info); status = SDendaccess(cmpsds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_chkcmp_SDSs */ /* * Test SDSs with unlimited dimensions. This routine creates SDSs with * unlimited dimensions, writes data to them, and use SDgetdatainfo to * verify the number of data blocks. */ #define EXTEND_FILE "datainfo_extend.hdf" /* data file */ #define BLOCK_SIZE 400 static intn test_extend_SDSs() { int32 sd_id, sds_id, sds_index; int32 dimsizes[2], starts[2], edges[2], rank = 0; int32 start1[1], edges1[1]; int32 data1[Y_LENGTH][X_LENGTH]; int32 data2[Y_LENGTH][X_LENGTH]; int32 data3[Y_LENGTH][X_LENGTH]; float fdata[Y_LENGTH]; int32 output[Y_LENGTH * 3][X_LENGTH]; uintn info_count = 0; t_hdf_datainfo_t sds_info; int32 block_size = 0; intn status; int i, j, kk; int num_errs = 0; /* number of errors so far */ /* Initialize data for the dataset */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) data1[j][i] = (i + j) + 1; for (j = 0; j < Y_LENGTH; j++) { fdata[j] = -1.0F; } /* Create the file and initialize the SD interface */ sd_id = SDstart(EXTEND_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "test_extend_SDSs: SDstart"); /* Create a 2x2 dataset called "Extend-Data 1" */ dimsizes[0] = SD_UNLIMITED; dimsizes[1] = X_LENGTH; sds_id = SDcreate(sd_id, "Extend-Data 1", DFNT_INT32, RANK2, dimsizes); CHECK(sds_id, FAIL, "test_extend_SDSs: SDcreate"); status = SDsetblocksize(sds_id, BLOCK_SIZE); /* to force linked blocks */ CHECK(status, FAIL, "test_extend_SDSs: SDsetblocksize"); /* Write the first batch of data to the dataset */ starts[0] = starts[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data1); CHECK(status, FAIL, "test_extend_SDSs: SDwritedata"); /* Get the block size of "Extend-Data 1" right after writing data */ status = SDgetblocksize(sds_id, &block_size); CHECK(status, FAIL, "test_extend_SDSs: SDgetblocksize"); VERIFY(block_size, BLOCK_SIZE, "SDgetblocksize"); /* Check data. */ memset(&output, 0, sizeof(output)); status = SDreaddata(sds_id, starts, NULL, edges, (void *)output); CHECK(status, FAIL, "test_extend_SDSs: SDreaddata"); /* Verify first batch of data in the unlimited dimension SDS */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) if (output[j][i] != data1[j][i]) fprintf(stderr, "Read value (%d) differs from written (%d) at [%d,%d]\n", output[j][i], data1[j][i], j, i); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Create another dataset with 1 unlimited dimension */ sds_id = SDcreate(sd_id, "Extend-Data 2", DFNT_FLOAT32, RANK1, dimsizes); CHECK(sds_id, FAIL, "test_extend_SDSs: SDcreate"); /* Define the location and size of the data to be written to the dataset */ start1[0] = 0; edges1[0] = Y_LENGTH; /* Write the stored data to 'Extend-Data 2' */ status = SDwritedata(sds_id, start1, NULL, edges1, (void *)fdata); CHECK(status, FAIL, "test_extend_SDSs: SDwritedata"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Select the dataset "Extend-Data 1", then write more data to it */ sds_index = SDnametoindex(sd_id, "Extend-Data 1"); CHECK(sds_index, FAIL, "test_extend_SDSs: SDnametoindex"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_extend_SDSs: SDselect"); /* Get the block size of "Extend-Data 1" */ status = SDgetblocksize(sds_id, &block_size); CHECK(status, FAIL, "test_extend_SDSs: SDgetblocksize"); VERIFY(block_size, BLOCK_SIZE, "SDgetblocksize"); /* Initialize second batch of data for the extendable dataset */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) data2[j][i] = (i + j) + 10; /* Append the stored data to dataset "Extend-Data 1" */ starts[0] = Y_LENGTH; starts[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data2); CHECK(status, FAIL, "test_extend_SDSs: SDwritedata"); /* Initialize third batch of data for the extendable dataset */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) data3[j][i] = (i + j) + 100; starts[0] = Y_LENGTH + Y_LENGTH; starts[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; status = SDwritedata(sds_id, starts, NULL, edges, (void *)data3); CHECK(status, FAIL, "test_extend_SDSs: SDwritedata"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Open "Extend-Data 1" again and check data. */ sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_extend_SDSs: SDselect"); starts[0] = 0; starts[1] = 0; edges[0] = Y_LENGTH + Y_LENGTH + Y_LENGTH; edges[1] = X_LENGTH; memset(&output, 0, sizeof(output)); status = SDreaddata(sds_id, starts, NULL, edges, (void *)output); CHECK(status, FAIL, "test_extend_SDSs: SDreaddata"); /* Check data against first batch */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) if (output[j][i] != data1[j][i]) fprintf(stderr, "Read value (%d) differs from written (%d) at [%d,%d]\n", output[j][i], data1[j][i], j, i); /* Check against second batch */ kk = Y_LENGTH; for (j = 0; j < Y_LENGTH; j++, kk++) for (i = 0; i < X_LENGTH; i++) if (output[kk][i] != data2[j][i]) fprintf(stderr, "Read value (%d) differs from written (%d) at [%d,%d]\n", output[kk][i], data2[j][i], kk, i); /* Check against third batch */ kk = Y_LENGTH + Y_LENGTH; for (j = 0; j < Y_LENGTH; j++, kk++) for (i = 0; i < X_LENGTH; i++) if (output[kk][i] != data3[j][i]) fprintf(stderr, "Read value (%d) differs from written (%d) at [%d,%d]\n", output[kk][i], data3[j][i], kk, i); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Select the dataset "Extend-Data 1", then get offsets and lengths of its data blocks */ sds_index = SDnametoindex(sd_id, "Extend-Data 1"); CHECK(sds_index, FAIL, "test_extend_SDSs: SDnametoindex"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_extend_SDSs: SDselect"); info_count = SDgetdatainfo(sds_id, NULL, 0, 0, NULL, NULL); CHECK(info_count, FAIL, "test_extend_SDSs: SDgetdatainfo"); VERIFY(info_count, 3, "test_extend_SDSs: SDgetdatainfo"); /* Get SDS' rank */ status = SDgetinfo(sds_id, NULL, &rank, NULL, NULL, NULL); CHECK(status, FAIL, "test_extend_SDSs: SDgetinfo"); /* Allocate space to record the SDS' data info for later use */ alloc_info(&sds_info, info_count, rank); /* Get SDS' information */ status = SDgetinfo(sds_id, NULL, NULL, sds_info.dimsizes, &(sds_info.numtype), NULL); CHECK(status, FAIL, "test_extend_SDSs: SDgetinfo"); /* Record number of values the SDS can have */ sds_info.n_values = comp_n_values(rank, sds_info.dimsizes); /* Get offsets and lengths of the data */ info_count = SDgetdatainfo(sds_id, NULL, 0, info_count, sds_info.offsets, sds_info.lengths); { /* Verify the offsets and lengths returned by SDgetdatainfo */ /* NOTE: if "datainfo_extend.hdf" is changed, the following initialization of the offsets must be updated accordingly. -BMR */ int32 check_offsets[3] = {2776, 3706, 4106}; int32 check_lengths[3] = {400, 400, 400}; VERIFY(info_count, 3, "test_extend_SDSs: SDgetdatainfo"); for (kk = 0; kk < info_count; kk++) { if (sds_info.offsets[kk] != check_offsets[kk]) { fprintf(stderr, "\ntest_extend_SDSs: incorrect offset %d for block #%d\n", sds_info.offsets[kk], kk); num_errs++; } if (sds_info.lengths[kk] != check_lengths[kk]) { fprintf(stderr, "\ntest_extend_SDSs: incorrect length %d for block #%d\n", sds_info.lengths[kk], kk); num_errs++; } } } /* done verifying offsets and lengths */ /* Release memory */ free_info(&sds_info); /* Close this SDS and the SD interface */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_extend_SDSs: SDend"); /* * Reopen the file and verify that "Extend-Data 1" has the correct * block size that was set earlier. */ /* Create the file and initialize the SD interface */ sd_id = SDstart(EXTEND_FILE, DFACC_RDONLY); CHECK(sd_id, FAIL, "test_extend_SDSs: SDstart"); /* Select the dataset "Extend-Data 1" */ sds_index = SDnametoindex(sd_id, "Extend-Data 1"); CHECK(sds_index, FAIL, "test_extend_SDSs: SDnametoindex"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "test_extend_SDSs: SDselect"); /* Verify that the block size is still as set earlier */ status = SDgetblocksize(sds_id, &block_size); CHECK(status, FAIL, "test_extend_SDSs: SDgetblocksize"); VERIFY(block_size, BLOCK_SIZE, "SDgetblocksize"); /* Close this SDS and the SD interface */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "test_extend_SDSs: SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_extend_SDSs */ /* Test driver for testing the public function SDgetdatainfo. */ extern int test_datainfo() { int num_errs = 0; /* Output message about test being performed */ TESTING("getting location info of data (tdatainfo.c)"); /* Test nonspecial SDSs */ num_errs = num_errs + test_nonspecial_SDSs(); /* Test compressed SDSs */ num_errs = num_errs + test_compressed_SDSs(); /* Test chunked empty SDSs */ num_errs = num_errs + test_empty_SDSs(); /* Test chunked_partial SDSs */ num_errs = num_errs + test_chunked_partial(); /* Test chunked SDSs */ num_errs = num_errs + test_chkcmp_SDSs(); /* Test extendable SDSs */ num_errs = num_errs + test_extend_SDSs(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tdatasizes.c000066400000000000000000000613021503061704500174130ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tdatasizes.c - tests the API SDgetdatasize. * Structure of the file: * test_datasizes - test driver * test_nonspecial_SDSs - tests nonspecial SDSs * test_compressed_SDSs - tests compressed SDSs without closing file * test_empty_SDSs - tests on empty chunked and chunked/comp SDSs * test_chunked_partial - tests on chunked and partially written SDS * test_chkcmp_SDSs - tests chunked/compressed SDSs * test_extend_SDSs - tests SDSs with unlimited dimensions * check_datasizes - utility routine that calls SDgetdatasize and verifies * the retrieved data sizes. * NOTE: At this time, SDgetdatasize will not return the correct compressed * size unless SDreaddata or SDendaccess is called between SDwritedata * and SDgetdatasize. ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" #define FILE_NAME "datasizes.hdf" /* data file to test empty SDSs */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 /* Utility routine that selects that named SDS, then calls SDgetdatasize * and verifies the returned values. */ static void check_datasizes(int32 fid, /* file id */ const char *sds_name, /* name of the inquired SDS */ int32 comp_size_check, /* expected compressed data size */ int32 uncomp_size_check, /* expected non-compressed data size */ int *ret_num_errs /* current number of errors */) { int32 sds_id, sds_index; intn status; int num_errs = 0; char mesg[80]; int32 uncomp_size = 0, comp_size = 0; /* Get index of dataset using its name */ sds_index = SDnametoindex(fid, sds_name); sprintf(mesg, "check_datasizes: SDnametoindex (%s)", sds_name); CHECK(sds_index, FAIL, mesg); /* Select the dataset */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "check_datasizes: SDselect"); /* The retrieved values from SDgetdatasize are verified against 'comp_size_check' and 'uncomp_size_check' */ status = SDgetdatasize(sds_id, &comp_size, &uncomp_size); sprintf(mesg, "SDgetdatasize: SDS named (%s)", sds_name); CHECK(status, FAIL, mesg); VERIFY(comp_size, comp_size_check, mesg); VERIFY(uncomp_size, uncomp_size_check, mesg); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "check_datasizes: SDendaccess"); *ret_num_errs = num_errs; } /* check_datasizes */ /* Test non-special SDSs. This routine creates non-special SDSs, writes * data to one of the SDSs, and checks the sizes returned by SDgetdatasize */ static intn test_nonspecial_SDSs(int32 fid) { int32 sds_id; int32 dimsize[2], start[2], edges[2]; int32 data[Y_LENGTH][X_LENGTH]; intn status; int i, j; int num_errs = 0; /* number of errors so far */ /* Initialize data for the dataset */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } /* Create a 2x2 dataset called "EmptyDataset" */ dimsize[0] = Y_LENGTH; dimsize[1] = X_LENGTH; sds_id = SDcreate(fid, "EmptyDataset", DFNT_FLOAT32, 2, dimsize); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate 'EmptyDataset'"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* Check that this SDS is empty */ check_datasizes(fid, "EmptyDataset", 0, 0, &num_errs); /* Create another 2x2 dataset called "WrittenDataset" */ sds_id = SDcreate(fid, "WrittenDataset", DFNT_INT32, 2, dimsize); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDcreate 'WrittenDataset'"); /* Define the location and size of the data to be written to the dataset */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Write the stored data to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(sds_id, FAIL, "test_nonspecial_SDSs: SDwritedata"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_nonspecial_SDSs: SDendaccess"); /* Check the size of the data of this SDS */ check_datasizes(fid, "WrittenDataset", Y_LENGTH * X_LENGTH * SIZE_INT32, Y_LENGTH * X_LENGTH * SIZE_INT32, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_nonspecial_SDSs */ /* Test compressed SDSs. This routine creates "Compressed-No-Data" and creates * and writes to "CompressedData" and "Non-CompressedData" SDSs. It will then * check the sizes returned from SDgetdatasize calls. */ static intn test_compressed_SDSs(int32 fid) { int32 sds_id, esds_id, usds_id; int32 start[2], edges[2], dim_sizes[2]; comp_coder_t comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 data[Y_LENGTH][X_LENGTH]; intn status; int i, j; int num_errs = 0; /* number of errors so far */ /* Buffer array data and define array dimensions */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* Create datasets, one to be written with data, the other not */ sds_id = SDcreate(fid, "CompressedData", DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "test_compressed_SDSs: SDcreate 'CompressedData'"); esds_id = SDcreate(fid, "Compressed-No-Data", DFNT_INT32, RANK, dim_sizes); CHECK(esds_id, FAIL, "test_compressed_SDSs: SDcreate 'Compressed-No-Data'"); usds_id = SDcreate(fid, "Non-CompressedData", DFNT_INT32, RANK, dim_sizes); CHECK(usds_id, FAIL, "test_compressed_SDSs: SDcreate 'Non-CompressedData'"); comp_type = COMP_CODE_DEFLATE; c_info.deflate.level = 6; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "test_compressed_SDSs: SDsetcompress 'CompressedData'"); status = SDsetcompress(esds_id, comp_type, &c_info); CHECK(status, FAIL, "test_compressed_SDSs: SDsetcompress 'Compressed-No-Data'"); /* Define the location and size of the dataset to be written to the file */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Write the stored data to the compressed dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata"); /* Write the stored data to the dataset non-compressed dataset */ status = SDwritedata(usds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "test_compressed_SDSs: SDwritedata"); /* Close the SDSs */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'CompressedData'"); status = SDendaccess(esds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'Compressed-No-Data'"); status = SDendaccess(usds_id); CHECK(status, FAIL, "test_compressed_SDSs: SDendaccess 'Non-CompressedData'"); /* Check the size of the data of this SDS - 59 is from examining previously */ check_datasizes(fid, "CompressedData", 59, Y_LENGTH * X_LENGTH * SIZE_INT32, &num_errs); /* Check the size of the data of this SDS */ check_datasizes(fid, "Compressed-No-Data", 0, 0, &num_errs); /* Check the size of the data of this SDS */ check_datasizes(fid, "Non-CompressedData", Y_LENGTH * X_LENGTH * SIZE_INT32, Y_LENGTH * X_LENGTH * SIZE_INT32, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_compressed_SDSs */ /* Test with empty SDSs. This routine creates a "Chunked Empty" SDS and a * "Chunked Compressed Empty" SDS then uses SDgetdatasize to verify that they * don't have data. */ #define X_LENGTH2 4 #define Y_LENGTH2 9 #define CHK_X 3 #define CHK_Y 2 static intn test_empty_SDSs(int32 fid) { int32 ch_sds_id, chcp_sds_id; int32 dim_sizes[RANK]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ int32 flag; intn status; int num_errs = 0; /* number of errors so far */ c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; /* Create Y_LENGTH2 x X_LENGTH2 empty chunked and chunked/compressed SDSs */ dim_sizes[0] = Y_LENGTH2; dim_sizes[1] = X_LENGTH2; ch_sds_id = SDcreate(fid, "Chunked Empty", DFNT_INT16, RANK, dim_sizes); CHECK(ch_sds_id, FAIL, "test_empty_SDSs: SDcreate 'Chunked Empty'"); chcp_sds_id = SDcreate(fid, "Chunked Compressed Empty", DFNT_INT16, RANK, dim_sizes); CHECK(chcp_sds_id, FAIL, "test_empty_SDSs: SDcreate 'Chunked Compressed Empty'"); /* Set info for chunking */ flag = HDF_CHUNK; status = SDsetchunk(ch_sds_id, c_def, flag); CHECK(status, FAIL, "test_empty_SDSs: SDsetchunk"); /* Set info for chunking and compression */ flag = HDF_CHUNK | HDF_COMP; c_def.comp.comp_type = COMP_CODE_DEFLATE; c_def.comp.cinfo.deflate.level = 6; status = SDsetchunk(chcp_sds_id, c_def, flag); CHECK(status, FAIL, "test_empty_SDSs: SDsetchunk"); /* Terminate access to the datasets */ status = SDendaccess(ch_sds_id); CHECK(status, FAIL, "test_empty_SDSs: SDendaccess 'Chunked Empty'"); status = SDendaccess(chcp_sds_id); CHECK(status, FAIL, "test_empty_SDSs: SDendaccess 'Chunked Compressed Empty'"); /* Check the size of the data of 'Chunked Empty' */ check_datasizes(fid, "Chunked Empty", 0, 0, &num_errs); /* Check the size of the data of 'Chunked Compressed Empty' */ check_datasizes(fid, "Chunked Compressed Empty", 0, 0, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_empty_SDSs */ /* Test with chunked and partially written SDS. This routine creates a * "Chunked Not Empty" SDS and writes some chunks but not all to it. It will * then call SDgetdatasize to verify the sizes. */ static intn test_chunked_partial(int32 fid) { int32 sds_id; int32 dim_sizes[RANK], origin[RANK]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ int32 flag; /* Chunking flag */ int16 fill_value = 0; /* Fill value */ intn status; int num_errs = 0; /* number of errors so far */ /* Declare chunks data type and initialize some of them. */ int16 chunk1[CHK_X][CHK_Y] = {{1, 1}, {1, 1}, {1, 1}}; int16 chunk3[CHK_X][CHK_Y] = {{3, 3}, {3, 3}, {3, 3}}; /* Initialize chunk size */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; /* Create Y_LENGTH2 x X_LENGTH2 SDS */ dim_sizes[0] = X_LENGTH2; dim_sizes[1] = Y_LENGTH2; sds_id = SDcreate(fid, "Chunked Not Empty", DFNT_INT16, RANK, dim_sizes); CHECK(sds_id, FAIL, "test_chunked_partial: SDcreate 'Chunked Not Empty'"); /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chunked_partial: SDsetfillvalue"); /* Set info for chunking */ flag = HDF_CHUNK; status = SDsetchunk(sds_id, c_def, flag); CHECK(status, FAIL, "test_chunked_partial: SDsetchunk"); /* Write partially to 'Chunked Not Empty' and check the sizes */ /* Write the chunk with the coordinates (0,0) */ origin[0] = 0; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk1); CHECK(status, FAIL, "test_chunked_partial: SDwritechunk"); /* Write the chunk with the coordinates (1,0) */ origin[0] = 1; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk3); CHECK(status, FAIL, "test_chunked_partial: SDwritechunk"); /* Terminate access to the "Chunked Not Empty" dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chunked_partial: SDendaccess 'Chunked Not Empty'"); /* Check the size of the data of this SDS - only chunked, not compressed, so both values should be the same; there are two chunks of size CHK_X*CHK_Y in type int16 written */ check_datasizes(fid, "Chunked Not Empty", CHK_X * CHK_Y * SIZE_INT16 * 2, CHK_X * CHK_Y * SIZE_INT16 * 2, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_chunked_partial */ /* Test with chunked and compressed SDS. This routine creates * "ChunkedDeflateData" and "ChunkedNoDeflateData" SDSs and writes the same * data to both. It will then use SDgetdatasize to verify the sizes. */ static intn test_chkcmp_SDSs(int32 fid) { int32 sds_id, sds_index; int32 cmpsds_id, cmpsds_index; int32 flag, maxcache, new_maxcache; int32 dim_sizes[RANK], origin[RANK]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ int32 fill_value = 0; /* Fill value */ int32 comp_size1 = 0, uncomp_size1 = 0; int32 comp_size2 = 0, uncomp_size2 = 0; intn status; int num_errs = 0; /* number of errors so far */ /* Declare chunks data type and initialize some of them. */ int32 chunk1[CHK_X][CHK_Y] = {{1, 1}, {1, 1}, {1, 1}}; int32 chunk3[CHK_X][CHK_Y] = {{3, 3}, {3, 3}, {3, 3}}; int32 chunk2[CHK_X][CHK_Y] = {{2, 2}, {2, 2}, {2, 2}}; /* Initialize chunk size */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; /* Create Y_LENGTH2 x X_LENGTH2 SDS */ dim_sizes[0] = Y_LENGTH2; dim_sizes[1] = X_LENGTH2; cmpsds_id = SDcreate(fid, "ChunkedDeflateData", DFNT_INT32, RANK, dim_sizes); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDcreate 'ChunkedDeflateData'"); sds_id = SDcreate(fid, "ChunkedNoDeflateData", DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDcreate 'ChunkedNoDeflateData'"); /* Fill the SDS array with the fill value */ status = SDsetfillvalue(cmpsds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetfillvalue 'ChunkedDeflateData'"); status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetfillvalue 'ChunkedNoDeflateData'"); /* Set info for chunking and compression */ flag = HDF_CHUNK | HDF_COMP; c_def.comp.comp_type = COMP_CODE_DEFLATE; c_def.comp.cinfo.deflate.level = 6; status = SDsetchunk(cmpsds_id, c_def, flag); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetchunk 'ChunkedDeflateData'"); /* Set info for chunking and compression */ memset(&c_def, 0, sizeof(c_def)); c_def.chunk_lengths[0] = CHK_X; c_def.chunk_lengths[1] = CHK_Y; flag = HDF_CHUNK; status = SDsetchunk(sds_id, c_def, flag); CHECK(status, FAIL, "test_chkcmp_SDSs: SDsetchunk 'ChunkedNoDeflateData'"); /* Set chunk cache to hold maximum of 3 chunks */ maxcache = 3; flag = 0; new_maxcache = SDsetchunkcache(cmpsds_id, maxcache, flag); CHECK(new_maxcache, FAIL, "test_chkcmp_SDSs: SDsetchunkcache 'ChunkedDeflateData'"); new_maxcache = SDsetchunkcache(sds_id, maxcache, flag); CHECK(new_maxcache, FAIL, "test_chkcmp_SDSs: SDsetchunkcache 'ChunkedNoDeflateData'"); /* Terminate access to the dataset before writing data to it. */ status = SDendaccess(cmpsds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedDeflateData'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedNoDeflateData'"); /* Check that this SDS is still empty after the call to SDsetchunk */ check_datasizes(fid, "ChunkedDeflateData", 0, 0, &num_errs); check_datasizes(fid, "ChunkedNoDeflateData", 0, 0, &num_errs); /* Re-select the datasets, write chunks using SDwritechunk function, then check their data sizes */ /* Get index of dataset using its name */ cmpsds_index = SDnametoindex(fid, "ChunkedDeflateData"); CHECK(cmpsds_index, FAIL, "test_chkcmp_SDSs: SDnametoindex 'ChunkedDeflateData'"); sds_index = SDnametoindex(fid, "ChunkedNoDeflateData"); CHECK(sds_index, FAIL, "test_chkcmp_SDSs: SDnametoindex 'ChunkedNoDeflateData'"); /* Select the datasets for access */ cmpsds_id = SDselect(fid, cmpsds_index); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDselect 'ChunkedDeflateData'"); sds_id = SDselect(fid, sds_index); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDselect 'ChunkedNoDeflateData'"); /* Write the chunk with the coordinates (0,0) */ origin[0] = 0; origin[1] = 0; status = SDwritechunk(cmpsds_id, origin, (void *)chunk1); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedDeflateData'"); status = SDwritechunk(sds_id, origin, (void *)chunk1); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedNoDeflateData'"); /* Write the chunk with the coordinates (1,0) */ origin[0] = 1; origin[1] = 0; status = SDwritechunk(cmpsds_id, origin, (void *)chunk3); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedDeflateData'"); status = SDwritechunk(sds_id, origin, (void *)chunk3); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedNoDeflateData'"); /* Write the chunk with the coordinates (0,1) */ origin[0] = 0; origin[1] = 1; status = SDwritechunk(cmpsds_id, origin, (void *)chunk2); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedDeflateData'"); status = SDwritechunk(sds_id, origin, (void *)chunk2); CHECK(status, FAIL, "test_chkcmp_SDSs: SDwritechunk 'ChunkedNoDeflateData'"); /* Terminate access to the datasets */ status = SDendaccess(cmpsds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedDeflateData'"); status = SDendaccess(sds_id); CHECK(status, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedNoDeflateData'"); /* Verify the compressed and non-compressed data sizes of the datasets */ /* Open dataset 'ChunkedDeflateData' */ cmpsds_id = SDselect(fid, cmpsds_index); CHECK(cmpsds_id, FAIL, "test_chkcmp_SDSs: SDselect 'ChunkedDeflateData'"); /* Get the data sizes */ status = SDgetdatasize(cmpsds_id, &comp_size1, &uncomp_size1); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetdatasize 'ChunkedDeflateData'"); /* Open dataset 'ChunkedNoDeflateData' */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDselect 'ChunkedNoDeflateData'"); /* Get the data sizes */ status = SDgetdatasize(sds_id, &comp_size2, &uncomp_size2); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetdatasize 'ChunkedNoDeflateData'"); /* Non-compressed data sizes of the two datasets should be the same */ VERIFY(uncomp_size1, uncomp_size2, "test_chkcmp_SDSs: non-compressed data sizes might be incorrect"); /* In this test, compressed data size should be smaller than non-compressed data size */ if (comp_size1 >= uncomp_size1) { printf("*** Routine test_chkcmp_SDSs: FAILED at line %d ***\n", __LINE__); printf(" In this test, compressed data size (%d) should be smaller than non-compressed data size " "(%d)\n", comp_size1, uncomp_size1); num_errs++; } /* Terminate access to the data sets. */ status = SDendaccess(sds_id); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedNoDeflateData'"); status = SDendaccess(cmpsds_id); CHECK(sds_id, FAIL, "test_chkcmp_SDSs: SDendaccess 'ChunkedDeflateData'"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_chkcmp_SDSs */ /* Test SDSs with unlimited dimensions. This routine creates SDSs with unlimited dimensions, writes data to it, and checks the sizes returned by SDgetdatasize */ static intn test_extend_SDSs(int32 fid) { int32 sds_id = -1; int32 dimsize[2] = {-1, -1}; int32 start[2] = {-1, -1}; int32 edges[2] = {-1, -1}; int32 start1[1] = {-1}; int32 edges1[1] = {-1}; int32 data[Y_LENGTH][X_LENGTH]; float fdata[Y_LENGTH]; int32 output[Y_LENGTH][X_LENGTH]; intn status = -1; int i, j; int num_errs = 0; /* number of errors so far */ /* Initialize data for the dataset */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } for (j = 0; j < Y_LENGTH; j++) { fdata[j] = -1.0F; } /* Create a 2x2 dataset called "EmptyDataset" */ dimsize[0] = SD_UNLIMITED; dimsize[1] = X_LENGTH; sds_id = SDcreate(fid, "AppendableDataset 1", DFNT_INT32, 2, dimsize); CHECK(sds_id, FAIL, "test_extend_SDSs: SDcreate 'AppendableDataset 1'"); /* Write the stored data to the dataset */ start[0] = start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(sds_id, FAIL, "test_extend_SDSs: SDwritedata"); /* Check data. */ memset(&output, 0, sizeof(output)); status = SDreaddata(sds_id, start, NULL, edges, (void *)output); CHECK(sds_id, FAIL, "test_extend_SDSs: SDreaddata"); /* Initialize data for the dataset */ for (j = 0; j < Y_LENGTH; j++) for (i = 0; i < X_LENGTH; i++) if (output[j][i] != data[j][i]) fprintf(stderr, "Read value (%d) differs from written (%d) at [%d,%d]\n", output[j][i], data[j][i], j, i); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Check that this SDS is empty */ check_datasizes(fid, "AppendableDataset 1", Y_LENGTH * X_LENGTH * SIZE_INT32, Y_LENGTH * X_LENGTH * SIZE_INT32, &num_errs); /* Create another dataset with 1 unlimited dimension */ sds_id = SDcreate(fid, "AppendableDataset 2", DFNT_FLOAT32, 1, dimsize); CHECK(sds_id, FAIL, "test_extend_SDSs: SDcreate 'AppendableDataset 2'"); /* Define the location and size of the data to be written to the dataset */ start1[0] = 0; edges1[0] = Y_LENGTH; /* Write the stored data to the dataset */ status = SDwritedata(sds_id, start1, NULL, edges1, (void *)fdata); CHECK(sds_id, FAIL, "test_extend_SDSs: SDwritedata"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_extend_SDSs: SDendaccess"); /* Check the size of the data of this SDS */ check_datasizes(fid, "AppendableDataset 2", Y_LENGTH * SIZE_FLOAT32, Y_LENGTH * SIZE_FLOAT32, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_extend_SDSs */ /* Test driver for testing the API SDgetdatasize. */ extern int test_datasizes() { int32 fid = -1; intn status = -1; int num_errs = 0; /* Output message about test being performed */ TESTING("getting data size of special data (tdatasizes.c)"); /* Open the file and initialize the SD interface */ fid = SDstart(FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "test_datasizes: SDstart"); /* Test nonspecial SDSs */ num_errs = num_errs + test_nonspecial_SDSs(fid); /* Test compressed SDSs */ num_errs = num_errs + test_compressed_SDSs(fid); /* Test chunked empty SDSs */ num_errs = num_errs + test_empty_SDSs(fid); /* Test chunked_partial SDSs */ num_errs = num_errs + test_chunked_partial(fid); /* Test chunked SDSs */ num_errs = num_errs + test_chkcmp_SDSs(fid); /* Test extendable SDSs */ num_errs = num_errs + test_extend_SDSs(fid); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "test_datasizes: SDend"); if (num_errs == 0) PASSED(); return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tdim.c000066400000000000000000000666131503061704500162070ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /******************************************************************** * tdim.c - tests dimension functionality * Structure of this file: * test_dimensions - test driver * test_dim_basics - tests basic dimension operations * test_dim_scales - tests basic dimension scale operations * test_dim_strs - tests SDsetdimstrs and SDgetdimstrs * *********************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" /******************************************************************** Name: test_dim_basics() Description: This test routine is used to test various dimension operations. The main contents include: - creates SDS #1 of size LENGTH0xLENGTH1, and sets values to its dims - creates SDS #2 of size LENGTH2xLENGTH3, and sets values to its first dimension The following are included in this test routine: - SDgetdimid - SDsetdimname - SDdiminfo Return value: The number of errors occurred in this routine. *********************************************************************/ #define BASIC_FILE "dim.hdf" #define LENGTH0 15 /* dimensions of SDSs #1 and #3 */ #define LENGTH1 10 #define LENGTH2 2 /* dimensions of SDSs #2 and #4 */ #define LENGTH3 3 #define RANK2 2 /* ranks */ #define DS0_NAME "HDF Data 0" /* SDS #1 name */ #define DS1_NAME "HDF Data 1" /* SDS #2 name */ #define DIM0_NAME "Dimension 0" /* name of first SDS' first dim */ #define DIM1_NAME "Dimension 1" /* name of first SDS' second dim */ #define DIM2_NAME "Dimension 2" /* name of second SDS' first dim */ #define DIM3_NAME "Dimension 3" /* name of third SDS' first dim */ static intn test_basic_dim() { int32 fid, sds_id, status, dim0_id, dim1_id, sds_idx; int32 dims[2], start[2], edges[2], rank; int16 array1_data[LENGTH0][LENGTH1]; /* data for first SDS */ int32 dim_sizes[H4_MAX_VAR_DIMS]; /* read dimensions */ intn i, j; int32 array_rank, num_type, attributes; char dim_name[H4_MAX_NC_NAME], name[H4_MAX_NC_NAME]; uint8 scale0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 255}; int32 size, dim_data_type, dim_num_attrs; int num_errs = 0; /* number of errors so far */ /* Create the file defined by BASIC_FILE and initiate the SD interface. */ fid = SDstart(BASIC_FILE, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* * Add a LENGTH0 x LENGTH1 array, which is named by DS0_NAME and of * type 16-bit signed integer, to the file... */ /* Define the rank and dimensions of the data set. */ rank = RANK2; dims[0] = LENGTH0; dims[1] = LENGTH1; /* Create the array data set. */ sds_id = SDcreate(fid, DS0_NAME, DFNT_INT16, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* * Settings for the first dimension. Note that all these settings * are done before writing the data to the dataset; just to make sure * that it's possible... */ /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Set the first dimension name to the name defined by DIM0_NAME */ status = SDsetdimname(dim0_id, DIM0_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Set scale of type unsigned int-8 for the first dimension */ status = SDsetdimscale(dim0_id, dims[0], DFNT_UINT8, scale0); CHECK(status, FAIL, "SDsetdimscale"); /* Read the first dimension and verify its information */ status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(strcmp(dim_name, DIM0_NAME), 0, "SDdiminfo"); VERIFY(size, dims[0], "SDdiminfo"); VERIFY(dim_data_type, DFNT_UINT8, "SDdiminfo"); /* bug #172 is fixed! */ VERIFY(dim_num_attrs, 0, "SDdiminfo"); /* * Write the data to the dataset... */ /* Fill the buffer with values. */ for (j = 0; j < LENGTH0; j++) { for (i = 0; i < LENGTH1; i++) array1_data[j][i] = (i + j) + 1; } /* Define the area for writing to the dataset */ for (i = 0; i < rank; i++) { start[i] = 0; edges[i] = dims[i]; } status = SDwritedata(sds_id, start, NULL, edges, (void *)array1_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open BASIC_FILE in W mode */ fid = SDstart(BASIC_FILE, DFACC_WRITE); CHECK(fid, FAIL, "SDstart"); /* Look for DS0_NAME dataset */ sds_idx = SDnametoindex(fid, DS0_NAME); CHECK(sds_idx, FAIL, "SDnametoindex"); /* Select that dataset */ sds_id = SDselect(fid, sds_idx); CHECK(sds_id, FAIL, "SDselect"); /* Get info of the dataset and verify them: it is a LENGTH0 x LENGTH1 array of type DFNT_INT16 and is named by DS0_NAME */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); VERIFY(strcmp(name, DS0_NAME), 0, "SDgetinfo"); VERIFY(array_rank, rank, "SDgetinfo"); VERIFY(num_type, DFNT_INT16, "SDgetinfo"); VERIFY(dim_sizes[0], LENGTH0, "SDgetinfo"); VERIFY(dim_sizes[1], LENGTH1, "SDgetinfo"); /* * Setting name for the second dimension */ /* Get the second dimension id */ dim1_id = SDgetdimid(sds_id, 1); CHECK(dim1_id, FAIL, "SDgetdimid"); /* Set the second dimension name to the name defined by DIM1_NAME */ status = SDsetdimname(dim1_id, DIM1_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Read the second dimension and verify its information; since the scale of this dimension is not set yet, its number type should be 0 */ status = SDdiminfo(dim1_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(strcmp(dim_name, DIM1_NAME), 0, "SDdiminfo"); VERIFY(size, dims[1], "SDdiminfo"); VERIFY(dim_data_type, 0, "SDdiminfo"); VERIFY(dim_num_attrs, 0, "SDdiminfo"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* * Add another dataset to the file; this dataset is a LENGTH2 x LENGTH3 * array, named by DS1_NAME and of type 32-bit unsigned integer... */ /* Define the rank and dimensions of the data set */ rank = RANK2; dims[0] = LENGTH2; dims[1] = LENGTH3; for (i = 0; i < rank; i++) edges[i] = dims[i]; /* Create the data set */ sds_id = SDcreate(fid, DS1_NAME, DFNT_UINT32, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* * Verify the default name of the first dimension, then set it to the * name DIM2_NAME and verify its new name. */ /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(strcmp(dim_name, "fakeDim2"), 0, "SDdiminfo"); /* Set the first dimension name to DIM2_NAME */ status = SDsetdimname(dim0_id, DIM2_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Verify new name. */ status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(strcmp(dim_name, DIM2_NAME), 0, "SDdiminfo"); VERIFY(size, dims[0], "SDdiminfo"); VERIFY(dim_data_type, 0, "SDdiminfo"); VERIFY(dim_num_attrs, 0, "SDdiminfo"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_dim_basics */ /******************************************************************** Name: test_dim_scales() Description: This test routine is used to test dimension scale operations. The main contents include: - creates SDS #1 of size LENGTH0xLENGTH1, and sets values to its dims - creates SDS #2 of size LENGTH2xLENGTH3, and sets values to its first dimension The following are included in this test routine: - SDgetdimscale - SDsetdimscale with the following situations: (NOT all done yet) + not called before SDdiminfo + called with number type=0 -> type is then set to DFNT_FLOAT32 + called with an unsigned number type + called with the dataset's number type + called before writing data to dataset + called after closing dataset and file, and then reopening Return value: The number of errors occurred in this routine. *********************************************************************/ #define SCALES_FILE "scaletst.hdf" /* file to test dimension scales */ static intn test_dim_scales() { int32 fid, sds_id, status, dim0_id, dim1_id, sds_idx; int32 dims[2], start[2], edges[2], rank; int16 array1_data[LENGTH0][LENGTH1]; /* data for first SDS */ uint32 array2_data[LENGTH2][LENGTH3]; /* data for second SDS */ int32 dim_sizes[H4_MAX_VAR_DIMS]; /* read dimensions */ intn i, j; int32 array_rank, num_type, attributes; char dim_name[H4_MAX_NC_NAME], name[H4_MAX_NC_NAME]; uint8 scale0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 255}; int16 scale1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; char8 scale2[] = {'d', 'i', 'm', '2'}, scale2_out[4]; float32 scalef[] = {1., 2., 3., 4.}; int32 size, dim_data_type, dim_num_attrs; int num_errs = 0; /* number of errors so far */ /* Create the file defined by SCALES_FILE and initiate the SD interface. */ fid = SDstart(SCALES_FILE, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* * Add a LENGTH0 x LENGTH1 array, which is named by DS0_NAME and of * type 16-bit signed integer, to the file... */ /* Define the rank and dimensions of the data set. */ rank = RANK2; dims[0] = LENGTH0; dims[1] = LENGTH1; /* Create the array data set. */ sds_id = SDcreate(fid, DS0_NAME, DFNT_INT16, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Set the first dimension name to DIM0_NAME */ status = SDsetdimname(dim0_id, DIM0_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Set scale of type unsigned int-8 for the first dimension */ status = SDsetdimscale(dim0_id, dims[0], DFNT_UINT8, scale0); CHECK(status, FAIL, "SDsetdimscale"); /* * Write the data to the dataset... */ /* Fill the buffer with values. */ for (j = 0; j < LENGTH0; j++) { for (i = 0; i < LENGTH1; i++) array1_data[j][i] = (i + j) + 1; } /* Define the area for writing to the dataset */ for (i = 0; i < rank; i++) { start[i] = 0; edges[i] = dims[i]; } status = SDwritedata(sds_id, start, NULL, edges, (void *)array1_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open SCALES_FILE in W mode */ fid = SDstart(SCALES_FILE, DFACC_WRITE); CHECK(fid, FAIL, "SDstart"); /* Look for DS0_NAME dataset */ sds_idx = SDnametoindex(fid, DS0_NAME); CHECK(sds_idx, FAIL, "SDnametoindex"); /* Select that dataset */ sds_id = SDselect(fid, sds_idx); CHECK(sds_id, FAIL, "SDselect"); /* Get info of the dataset and verify its dimensions */ status = SDgetinfo(sds_id, NULL, &array_rank, dim_sizes, &num_type, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(array_rank, rank, "SDgetinfo"); VERIFY(num_type, DFNT_INT16, "SDgetinfo"); VERIFY(dim_sizes[0], LENGTH0, "SDgetinfo"); VERIFY(dim_sizes[1], LENGTH1, "SDgetinfo"); /* * Check dimension's number type before setting scales */ /* Get the second dimension id */ dim1_id = SDgetdimid(sds_id, 1); CHECK(dim1_id, FAIL, "SDgetdimid"); /* Set the second dimension name to DIM1_NAME */ status = SDsetdimname(dim1_id, DIM1_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Read the second dimension and verify its information; since the scale of this dimension is not set yet, the number type should be 0 */ status = SDdiminfo(dim1_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(dim_data_type, 0, "SDdiminfo"); /* Set dimension scale for the second dimension; its type will be the same as that of the dataset */ status = SDsetdimscale(dim1_id, dim_sizes[1], num_type, scale1); CHECK(status, FAIL, "SDsetdimscale"); /* Read the second dimension and verify its number type; since the scale of this dimension is now set, the number type should be the same as its dataset, i.e. num_type above */ status = SDdiminfo(dim1_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(dim_data_type, num_type, "SDdiminfo"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* * Add another dataset to the file; this dataset is a LENGTH2 x LENGTH3 * array, named by DS1_NAME and of type 32-bit unsigned integer... */ /* Define the rank and dimensions of the data set */ rank = RANK2; dims[0] = LENGTH2; dims[1] = LENGTH3; for (i = 0; i < rank; i++) edges[i] = dims[i]; /* Create the data set */ sds_id = SDcreate(fid, DS1_NAME, DFNT_UINT32, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* Fill the stored-data array with values. */ for (j = 0; j < LENGTH2; j++) { for (i = 0; i < LENGTH3; i++) array2_data[j][i] = 10 * (j + i); } /* Write the data stored in the array 'array2_data' to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)array2_data); CHECK(status, FAIL, "SDwritedata"); /* Get info of the dataset and verify its type */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); VERIFY(strcmp(name, DS1_NAME), 0, "SDgetinfo"); VERIFY(array_rank, rank, "SDgetinfo"); VERIFY(num_type, DFNT_UINT32, "SDgetinfo"); VERIFY(dim_sizes[0], LENGTH2, "SDgetinfo"); VERIFY(dim_sizes[1], LENGTH3, "SDgetinfo"); /* * Verify that when 0 is passed into SDsetdimscale for number type, then * the number type of the dimension scale will be set to DFNT_FLOAT32. */ /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Set the first dimension name to DIM2_NAME */ status = SDsetdimname(dim0_id, DIM2_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Pass 0 into SDsetdimscale for number type */ status = SDsetdimscale(dim0_id, dims[0], 0, scalef); CHECK(status, FAIL, "SDsetdimscale"); status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(strcmp(dim_name, DIM2_NAME), 0, "SDdiminfo"); VERIFY(dim_data_type, DFNT_FLOAT32, "SDdiminfo"); /* * Now, set dimension scale for that first dimension again, but this * time, to 8-bit signed char; then verify the type and the scale values */ /* Set scale of type 8-bit signed char for this dimension */ status = SDsetdimscale(dim0_id, dims[0], DFNT_CHAR, scale2); CHECK(status, FAIL, "SDsetdimscale"); /* Read the info of this dimension and verify its new number type */ status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(dim_data_type, DFNT_CHAR, "SDdiminfo"); /* Read dimension scale values and verify them */ status = SDgetdimscale(dim0_id, (void *)scale2_out); CHECK(status, FAIL, "SDgetdimscale"); for (i = 0; i < LENGTH2; i++) VERIFY(scale2_out[i], scale2[i], "SDgetdimscale"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_dim_scales */ /******************************************************************** Name: test_dim_strs() Description: This test routine is used to test SDsetdimstrs and SDgetdimstrs.i It uses BASIC_FILE. The main contents include: - creates SDS #3 of size LENGTH0xLENGTH1 and named DS2_NAME - then sets/gets all predefined attributes to/from first dimension - tries to get predefined attributes from second dimension, should get '\0' as first character in the parameters - now sets just 1 predefined attribute to second dimension then tries to call SDgetdimstrs again - creates SDS #4 of size LENGTH4 x LENGTH5 and named DS3_NAME - set dim scales to the first dimension, named DIM3_NAME - now, test that SDgetdimstrs returns strings containing '\0' for this coordinate variable because SDsetdimstrs had not been called on it. Return value: The number of errors occurred in this routine. *********************************************************************/ #define LENGTH4 4 #define LENGTH5 5 #define RANK4 4 #define DS2_NAME "HDF Data 2" /* SDS #3 name */ #define DS3_NAME "HDF Data 3" /* SDS #4 name */ #define LABEL "DimLabel" #define UNITS "Units" #define FORMAT "TheFormat" #define DIMSTRS_LEN 20 /* length of the dimension string buffers */ static intn test_dim_strs() { int32 fid, sds_id, status, dim0_id, dim1_id, sds_idx, coord_var_id; int32 dims[2], start[2], edges[2], rank; int16 array1_data[LENGTH0][LENGTH1]; /* data for first SDS */ uint32 array2_data[LENGTH2][LENGTH3]; /* data for second SDS */ int32 dim_sizes[H4_MAX_VAR_DIMS]; /* read dimensions */ intn i, j; int32 array_rank, num_type, attributes; char dim_name[H4_MAX_NC_NAME], name[H4_MAX_NC_NAME]; char8 scale2[] = {'d', 'i', 'm', '2'}; int32 size, dim_data_type, dim_num_attrs; char label[DIMSTRS_LEN], unit[DIMSTRS_LEN], format[DIMSTRS_LEN]; int num_errs = 0; /* number of errors so far */ /* Open the file defined by BASIC_FILE and initiate the SD interface. */ fid = SDstart(BASIC_FILE, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* * Add a LENGTH0 x LENGTH1 array, which is named by DS2_NAME and of * type 16-bit signed integer, to the file... */ /* Define the rank and dimensions of the data set. */ rank = RANK2; dims[0] = LENGTH0; dims[1] = LENGTH1; /* Create the array data set. */ sds_id = SDcreate(fid, DS2_NAME, DFNT_INT16, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* * Settings predefined attributes for the first dimension. */ /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Set the dimension strings for the dimension */ status = SDsetdimstrs(dim0_id, LABEL, UNITS, FORMAT); CHECK(status, FAIL, "SDsetdimstrs"); /* Read the first dimension and verify its information */ status = SDdiminfo(dim0_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY(size, dims[0], "SDdiminfo"); VERIFY(dim_data_type, DFNT_NONE, "SDdiminfo"); /* number type not set */ VERIFY(dim_num_attrs, 3, "SDdiminfo"); /* * Write the data stored in the array 'array1_data' to the dataset... */ /* Fill the buffer with values. */ for (j = 0; j < LENGTH0; j++) { for (i = 0; i < LENGTH1; i++) array1_data[j][i] = (i + j) + 1; } /* Define the area for writing to the dataset */ for (i = 0; i < rank; i++) { start[i] = 0; edges[i] = dims[i]; } status = SDwritedata(sds_id, start, NULL, edges, (void *)array1_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open BASIC_FILE in W mode and select the dataset named by DS0_NAME */ fid = SDstart(BASIC_FILE, DFACC_WRITE); CHECK(fid, FAIL, "SDstart"); /* Look for DS0_NAME dataset */ sds_idx = SDnametoindex(fid, DS2_NAME); CHECK(sds_idx, FAIL, "SDnametoindex"); /* Select that dataset */ sds_id = SDselect(fid, sds_idx); CHECK(sds_id, FAIL, "SDselect"); /* * Verify predefined attributes of the first dimension of this dataset. * They were set previously. */ /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Get and verify the predefined attributes label, unit, and format */ status = SDgetdimstrs(dim0_id, label, unit, format, DIMSTRS_LEN); CHECK(status, FAIL, "SDgetdimstrs"); VERIFY_CHAR(label, LABEL, "SDgetdimstrs"); VERIFY_CHAR(unit, UNITS, "SDgetdimstrs"); VERIFY_CHAR(format, FORMAT, "SDgetdimstrs"); /* * Verify that the second dimension of SDS DS2_NAME does not have * predefined attributes */ /* Get the second dimension id */ dim1_id = SDgetdimid(sds_id, 1); CHECK(dim1_id, FAIL, "SDgetdimid"); /* Get and verify that predefined attributes label, unit, and format are not assigned to this dimension */ memset(label, 0, DIMSTRS_LEN); memset(unit, 0, DIMSTRS_LEN); memset(format, 0, DIMSTRS_LEN); status = SDgetdimstrs(dim1_id, label, unit, format, DIMSTRS_LEN); CHECK(status, FAIL, "SDgetdimstrs"); VERIFY(label[0], '\0', "SDgetdimstrs"); VERIFY(unit[0], '\0', "SDgetdimstrs"); VERIFY(format[0], '\0', "SDgetdimstrs"); /* Assign predefined attribute UNITS to this dimension and check again. */ status = SDsetdimstrs(dim1_id, NULL, UNITS, NULL); CHECK(status, FAIL, "SDsetdimstrs"); /* Get and verify that only the predefined attributes unit is assigned to this dimension */ status = SDgetdimstrs(dim1_id, label, unit, format, DIMSTRS_LEN); CHECK(status, FAIL, "SDgetdimstrs"); VERIFY(label[0], '\0', "SDgetdimstrs"); VERIFY_CHAR(unit, UNITS, "SDgetdimstrs"); VERIFY(format[0], '\0', "SDgetdimstrs"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* * Test that a dimension is a coordinate variable but does not have * predefined attributes Label, Unit, or Format assigned to it. */ /* * Add another dataset to the file; this dataset is a LENGTH4 x LENGTH5 * array, named by DS3_NAME and of type 32-bit unsigned integer... */ /* Define the rank and dimensions of the data set */ rank = RANK2; dims[0] = LENGTH4; dims[1] = LENGTH5; edges[0] = LENGTH2; edges[1] = LENGTH3; /* Create the data set */ sds_id = SDcreate(fid, DS3_NAME, DFNT_UINT32, rank, dims); CHECK(sds_id, FAIL, "SDcreate"); /* Fill the stored-data array with values. */ for (j = 0; j < LENGTH2; j++) { for (i = 0; i < LENGTH3; i++) array2_data[j][i] = 10 * (j + i); } /* Write the data stored in the array 'array2_data' to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)array2_data); CHECK(status, FAIL, "SDwritedata"); /* Get the first dimension id */ dim0_id = SDgetdimid(sds_id, 0); CHECK(dim0_id, FAIL, "SDgetdimid"); /* Set the first dimension name to the name defined by DIM3_NAME */ status = SDsetdimname(dim0_id, DIM3_NAME); CHECK(status, FAIL, "SDsetdimname"); /* Set dimension scale for that first dimension. It is now should be a coordinate variable. */ status = SDsetdimscale(dim0_id, dims[0], DFNT_CHAR, scale2); CHECK(status, FAIL, "SDsetdimscale"); /* * Get access to that coordinate variable and verify its information */ /* Look for DIM3_NAME dataset */ sds_idx = SDnametoindex(fid, DIM3_NAME); CHECK(sds_idx, FAIL, "SDnametoindex"); /* Select that coordinate variable */ coord_var_id = SDselect(fid, sds_idx); CHECK(coord_var_id, FAIL, "SDselect"); /* Get info of the coord var and verify them: it is a LENGTH4 x LENGTH5 array of type DFNT_CHAR and is named by DIM3_NAME */ status = SDgetinfo(coord_var_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); VERIFY(strcmp(name, DIM3_NAME), 0, "SDgetinfo"); VERIFY(array_rank, 1, "SDgetinfo"); VERIFY(num_type, DFNT_CHAR, "SDgetinfo"); VERIFY(dim_sizes[0], dims[0], "SDgetinfo"); /* Terminate access to the array. */ status = SDendaccess(coord_var_id); CHECK(status, FAIL, "SDendaccess"); /* Get and verify that predefined attributes label, unit, and format are not assigned to this dimension */ memset(label, 0, DIMSTRS_LEN); memset(unit, 0, DIMSTRS_LEN); memset(format, 0, DIMSTRS_LEN); status = SDgetdimstrs(dim0_id, label, unit, format, DIMSTRS_LEN); CHECK(status, FAIL, "SDgetdimstrs"); VERIFY(label[0], '\0', "SDgetdimstrs"); VERIFY(unit[0], '\0', "SDgetdimstrs"); VERIFY(format[0], '\0', "SDgetdimstrs"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_dim_strs */ /* Test driver for testing dimension functionality */ extern int test_dimensions() { int num_errs = 0; /* Output message about test being performed */ TESTING("functionality of dimensions (tdim.c)"); /* Test basic dimension functionality */ num_errs = num_errs + test_basic_dim(); /* Test dimension scale functionality */ num_errs = num_errs + test_dim_scales(); /* Test SD[set/get]dimstrs */ num_errs = num_errs + test_dim_strs(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/temptySDSs.c000066400000000000000000000516061503061704500173250ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * temptySDS.c - tests the API SDcheckempty. * Structure of the file: * test_checkempty - test driver * test_nonspecial_SDSs - tests nonspecial SDSs without closing file * test_compressed_SDSs - tests compressed SDSs without closing file * test_chunked_SDSs - tests chunked SDSs without closing file * test_unlimited_SDSs - tests unlimited dim SDSs without closing file * test_with_existing_file - tests all SDSs in file after closing the * file and reopening it * check_empty_SDS - utility routine that calls SDcheckempty and verifies * values * check_getchunkinfo - utility routine that calls SDgetchunkinfo and * verifies that function did not fail on empty SDS and the file * is opened as read-only. (bug HDFFR-171) ****************************************************************************/ #include "mfhdf.h" #include "hdftest.h" #define FILE_NAME "emptySDSs.hdf" /* data file to test empty SDSs */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 /* Utility routine that selects that named SDS, then calls SDcheckempty * and verifies the returned values. */ static void check_empty_SDS(int32 fid, /* file id */ const char *sds_name, /* name of the inquired SDS */ int32 verify_value, /* expected value of 'emptySDS' from SDcheckempty */ int *ret_num_errs /* current number of errors */) { int32 sds_id, sds_index, status_32; intn status, emptySDS; int num_errs = 0; char mesg[80]; /* Get index of dataset using its name */ sds_index = SDnametoindex(fid, sds_name); sprintf(mesg, "In check_empty_SDS: SDnametoindex (%s)", sds_name); CHECK(sds_index, FAIL, mesg); /* Select the dataset */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "In check_empty_SDS: SDselect"); /* The returned value from SDcheckempty is CHECKed for FAIL and 'emptySDS' is verified to be verify_value, which can be TRUE or FALSE. */ status_32 = SDcheckempty(sds_id, &emptySDS); CHECK(status_32, FAIL, "SDcheckempty"); VERIFY(emptySDS, verify_value, "SDcheckempty"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In check_empty_SDS: SDendaccess"); *ret_num_errs = num_errs; } /* check_empty_SDS */ /* Utility routine that selects that named SDS, then calls SDgetchunkinfo and * verify the returned values. The routine also verifies that SDgetchunkinfo * did not fail when the file is opened as read-only (bug HDFFR-171) */ static void check_getchunkinfo(int32 fid, /* file id */ const char *sds_name, /* name of the inquired SDS */ int32 verify_value, /* expected value of 'flags' from SDgetchunkinfo */ int *ret_num_errs /* current number of errors */) { int32 sds_id, sds_index; HDF_CHUNK_DEF c_def_out; /* Chunking definitions */ int32 c_flags; intn status; int num_errs = 0; char mesg[80]; /* Get index of dataset using its name */ sds_index = SDnametoindex(fid, sds_name); sprintf(mesg, "In check_getchunkinfo: SDnametoindex (%s)", sds_name); CHECK(sds_index, FAIL, mesg); /* Select the dataset */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "In check_getchunkinfo: SDselect"); /* The returned value from SDgetchunkinfo is CHECKed for FAIL and 'c_flags' is VERIFied to be verify_value, which can be HDF_NONE, HDF_CHUNK, or HDF_CHUNK | HDF_COMP. */ status = SDgetchunkinfo(sds_id, &c_def_out, &c_flags); CHECK(status, FAIL, "SDgetchunkinfo"); VERIFY(c_flags, verify_value, "SDgetchunkinfo"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In check_getchunkinfo: SDendaccess"); *ret_num_errs = num_errs; } /* check_getchunkinfo */ /* Test non-special SDSs. This routine creates non-special SDSs, writes * data to one of the SDSs, and checks for emptiness on each without closing * the file. */ static intn test_nonspecial_SDSs(int32 fid) { int32 sds_id; int32 dimsize[2], start[2], edges[2]; int32 data[Y_LENGTH][X_LENGTH]; intn status; int i, j; int num_errs = 0; /* number of errors so far */ /* Initialize data for the dataset */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } /* Create a 2x2 dataset called "EmptyDataset" */ dimsize[0] = Y_LENGTH; dimsize[1] = X_LENGTH; sds_id = SDcreate(fid, "EmptyDataset", DFNT_FLOAT32, 2, dimsize); CHECK(sds_id, FAIL, "In test_nonspecial_SDSs: SDcreate 'EmptyDataset'"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_nonspecial_SDSs: SDendaccess"); /* Check that this SDS is empty */ check_empty_SDS(fid, "EmptyDataset", TRUE, &num_errs); /* Create another 2x2 dataset called "WrittenDataset" */ sds_id = SDcreate(fid, "WrittenDataset", DFNT_INT32, 2, dimsize); CHECK(sds_id, FAIL, "In test_nonspecial_SDSs: SDcreate 'WrittenDataset'"); /* Define the location and size of the data to be written to the dataset */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Write the stored data to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(sds_id, FAIL, "In test_nonspecial_SDSs: SDwritedata"); /* Close this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_nonspecial_SDSs: SDendaccess"); /* Check that this SDS is NOT empty */ check_empty_SDS(fid, "WrittenDataset", FALSE, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_nonspecial_SDSs */ /* Test compressed SDSs. This routine creates compressed SDSs, writes * data to one of the SDSs, and checks for emptiness on each without closing * the file. */ static intn test_compressed_SDSs(int32 fid) { int32 sds_id, esds_id; int32 start[2], edges[2], dim_sizes[2]; int32 comp_type; /* Compression flag */ comp_info c_info; /* Compression structure */ int32 data[Y_LENGTH][X_LENGTH]; intn status; int i, j; int num_errs = 0; /* number of errors so far */ /* Buffer array data and define array dimensions */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + j) + 1; } dim_sizes[0] = Y_LENGTH; dim_sizes[1] = X_LENGTH; /* Create datasets, one to be written with data, the other not */ sds_id = SDcreate(fid, "CompressedData", DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "In test_compressed_SDSs: SDcreate 'CompressedData'"); esds_id = SDcreate(fid, "Compressed-No-Data", DFNT_INT32, RANK, dim_sizes); CHECK(esds_id, FAIL, "In test_compressed_SDSs: SDcreate 'Compressed-No-Data'"); comp_type = COMP_CODE_DEFLATE; c_info.deflate.level = 6; status = SDsetcompress(sds_id, comp_type, &c_info); CHECK(status, FAIL, "In test_compressed_SDSs: SDsetcompress 'CompressedData'"); status = SDsetcompress(esds_id, comp_type, &c_info); CHECK(status, FAIL, "In test_compressed_SDSs: SDsetcompress 'Compressed-No-Data'"); /* Define the location and size of the dataset to be written to the file */ start[0] = 0; start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Write the stored data to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "In test_compressed_SDSs: SDwritedata"); /* Close the SDSs */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_compressed_SDSs: SDendaccess 'CompressedData'"); status = SDendaccess(esds_id); CHECK(status, FAIL, "In test_compressed_SDSs: SDendaccess 'Compressed-No-Data'"); /* Check that this SDS is NOT empty */ check_empty_SDS(fid, "CompressedData", FALSE, &num_errs); /* Check that this SDS is empty */ check_empty_SDS(fid, "Compressed-No-Data", TRUE, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_compressed_SDSs */ /* Test chunked SDSs. This routine creates chunked SDSs, writes data * to one of the SDSs, and checks for emptiness on each without closing * the file. */ #define X_CHUNKED_LENGTH 4 #define Y_CHUNKED_LENGTH 9 static intn test_chunked_SDSs(int32 fid) { int32 sds_id, esds_id, sds_index; int32 flag, maxcache, new_maxcache; int32 dim_sizes[RANK], origin[RANK]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ int32 comp_flag; int16 fill_value = 0; /* Fill value */ intn status; int num_errs = 0; /* number of errors so far */ /* Declare chunks data type and initialize some of them. */ int16 chunk1[3][2] = {{1, 1}, {1, 1}, {1, 1}}; int16 chunk2[3][2] = {{2, 2}, {2, 2}, {2, 2}}; int16 chunk3[3][2] = {{3, 3}, {3, 3}, {3, 3}}; c_def.chunk_lengths[0] = 3; c_def.chunk_lengths[1] = 2; /* Create Y_CHUNKED_LENGTH x X_CHUNKED_LENGTH SDS */ dim_sizes[0] = Y_CHUNKED_LENGTH; dim_sizes[1] = X_CHUNKED_LENGTH; esds_id = SDcreate(fid, "Chunked-No-Data", DFNT_INT16, RANK, dim_sizes); CHECK(esds_id, FAIL, "In test_chunked_SDSs: SDcreate 'Chunked-No-Data'"); /* Set info for chunking */ comp_flag = HDF_CHUNK; status = SDsetchunk(esds_id, c_def, comp_flag); CHECK(status, FAIL, "In test_chunked_SDSs: SDsetchunk"); /* Terminate access to the "Chunked-No-Data" dataset */ status = SDendaccess(esds_id); CHECK(status, FAIL, "In test_chunked_SDSs: SDendaccess 'Chunked-No-Data'"); /* Check that this SDS is empty */ check_empty_SDS(fid, "Chunked-No-Data", TRUE, &num_errs); /* Create another Y_CHUNKED_LENGTH x X_CHUNKED_LENGTH SDS but this one will be written with chunks */ sds_id = SDcreate(fid, "ChunkedData", DFNT_INT16, RANK, dim_sizes); CHECK(sds_id, FAIL, "In test_chunked_SDSs: SDcreate 'ChunkedData'"); /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "In test_chunked_SDSs: SDsetfillvalue"); /* Set info for chunking */ comp_flag = HDF_CHUNK; status = SDsetchunk(sds_id, c_def, comp_flag); CHECK(status, FAIL, "In test_chunked_SDSs: SDsetchunk"); /* Set chunk cache to hold maximum of 3 chunks */ maxcache = 3; flag = 0; new_maxcache = SDsetchunkcache(sds_id, maxcache, flag); CHECK(new_maxcache, FAIL, "In test_chunked_SDSs: SDsetchunkcache"); /* Terminate access to the dataset then check if it's empty - and it should be, before writing data to it. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_chunked_SDSs: SDendaccess"); /* Check that this SDS is still empty after the call to SDsetchunk */ check_empty_SDS(fid, "ChunkedData", TRUE, &num_errs); /* Re-select the "ChunkedData" SDS, then write chunks using SDwritechunk function */ /* Get index of dataset using its name */ sds_index = SDnametoindex(fid, "ChunkedData"); CHECK(sds_index, FAIL, "In test_chunked_SDSs: SDnametoindex"); /* Select the dataset */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "In test_chunked_SDSs: SDselect"); /* Write the chunk with the coordinates (0,0) */ origin[0] = 0; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk1); CHECK(status, FAIL, "In test_chunked_SDSs: SDwritechunk"); /* Write the chunk with the coordinates (1,0) */ origin[0] = 1; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk3); CHECK(status, FAIL, "In test_chunked_SDSs: SDwritechunk"); /* Write the chunk with the coordinates (0,1) */ origin[0] = 0; origin[1] = 1; status = SDwritechunk(sds_id, origin, (void *)chunk2); CHECK(status, FAIL, "In test_chunked_SDSs: SDwritechunk"); /* Terminate access to the dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_chunked_SDSs: SDendaccess"); /* Check that this SDS is NOT empty */ check_empty_SDS(fid, "ChunkedData", FALSE, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_chunked_SDSs */ /* Test unlimited dimension SDSs. This routine creates unlimited * dimension SDSs, writes data to one of the SDSs, and checks for * emptiness on each without closing the file. */ static intn test_unlimited_SDSs(int32 fid) { int32 sds_id, esds_id, sds_index; int32 dim_sizes[2]; int32 data[Y_LENGTH][X_LENGTH], append_data[X_LENGTH]; int32 start[2], edges[2]; intn status; int i, j; int num_errs = 0; /* number of errors so far */ /* Data initialization */ for (j = 0; j < Y_LENGTH; j++) { for (i = 0; i < X_LENGTH; i++) data[j][i] = (i + 1) + (j + 1); } /* Define dimensions of the array. Make the first dimension appendable by defining its length to be unlimited */ dim_sizes[0] = SD_UNLIMITED; dim_sizes[1] = X_LENGTH; /* Create the array datasets */ esds_id = SDcreate(fid, "Appendable-No-Data", DFNT_INT32, RANK, dim_sizes); CHECK(esds_id, FAIL, "In test_unlimited_SDSs: SDcreate 'Appendable-No-Data'"); sds_id = SDcreate(fid, "AppendableData", DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "In test_unlimited_SDSs: SDcreate 'AppendableData'"); /* Terminate access to the dataset "Appendable-No-Data" */ status = SDendaccess(esds_id); /* Define the location and the size of the data to be written to the second dataset */ start[0] = start[1] = 0; edges[0] = Y_LENGTH; edges[1] = X_LENGTH; /* Write the data */ status = SDwritedata(sds_id, start, NULL, edges, (void *)data); CHECK(status, FAIL, "In test_unlimited_SDSs: SDwritedata"); /* Terminate access to the unlimited dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_unlimited_SDSs: SDendaccess"); /* Check that this SDS is NOT empty */ check_empty_SDS(fid, "AppendableData", FALSE, &num_errs); /* Store the array values to be appended to the dataset */ for (i = 0; i < X_LENGTH; i++) append_data[i] = 1000 + i; /* Get index of the dataset using its name */ sds_index = SDnametoindex(fid, "AppendableData"); CHECK(sds_index, FAIL, "In test_unlimited_SDSs: SDnametoindex"); /* Select the "AppendableData" dataset */ sds_id = SDselect(fid, sds_index); CHECK(sds_id, FAIL, "In test_unlimited_SDSs: SDselect 'AppendableData'"); /* Check if selected SDS is unlimited. If it is not, then terminate access to the SDS */ if (SDisrecord(sds_id)) { /* Define the location of the append to start at the first column * of the 11th row of the dataset and to stop at the end of the * eleventh row. */ start[0] = Y_LENGTH; start[1] = 0; edges[0] = 1; edges[1] = X_LENGTH; /* Append data to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)append_data); CHECK(status, FAIL, "In test_unlimited_SDSs: SDwritedata"); } /* Terminate access to the dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "In test_unlimited_SDSs: SDendaccess"); /* Check that this SDS is NOT empty */ check_empty_SDS(fid, "AppendableData", FALSE, &num_errs); /* Check that this SDS is empty */ check_empty_SDS(fid, "Appendable-No-Data", TRUE, &num_errs); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_unlimited_SDSs */ /* This function checks which of the SDSs in the file are empty/written, * just as in the previous individual tests. The difference is these * SDSs are read back in after the file is closed and reopened. */ static intn test_with_existing_file() { int32 fid; intn status; int num_errs = 0; /* number of errors so far */ /* Open the file and initialize the SD interface */ fid = SDstart(FILE_NAME, DFACC_READ); CHECK(fid, FAIL, "In test_with_existing_file: SDstart"); /* Check that SDS named "EmptyDataset" is empty */ check_empty_SDS(fid, "EmptyDataset", TRUE, &num_errs); /* Check that SDS named "AppendableData" is NOT empty */ check_empty_SDS(fid, "AppendableData", FALSE, &num_errs); /* Check that SDS named "Appendable-No-Data" is empty */ check_empty_SDS(fid, "Appendable-No-Data", TRUE, &num_errs); /* Check that SDS named "CompressedData" is NOT empty */ check_empty_SDS(fid, "CompressedData", FALSE, &num_errs); /* Check that SDS named "Compressed-No-Data" is empty */ check_empty_SDS(fid, "Compressed-No-Data", TRUE, &num_errs); /* Check that SDS named "ChunkedData" is NOT empty */ check_empty_SDS(fid, "ChunkedData", FALSE, &num_errs); /* Check that SDS named "Chunked-No-Data" is empty */ check_empty_SDS(fid, "Chunked-No-Data", TRUE, &num_errs); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "In test_with_existing_file: SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_with_existing_file */ /* This function verifies that the bug HDFFR-171 is fixed. It opens the file as read-only, then calls SDgetchunkinfo on some empty SDS's. SDgetchunkinfo should not fail and should return HDF_NONE for the flag. */ static intn test_getchunkinfo() { int32 fid; intn status; int num_errs = 0; /* number of errors so far */ /* Open the file and initialize the SD interface */ fid = SDstart(FILE_NAME, DFACC_RDONLY); CHECK(fid, FAIL, "In check_getchunkinfo: SDstart"); /* Check that SDS named "EmptyDataset" is empty */ check_getchunkinfo(fid, "EmptyDataset", HDF_NONE, &num_errs); /* Check that SDS named "AppendableData" is NOT empty */ check_getchunkinfo(fid, "AppendableData", HDF_NONE, &num_errs); /* Check that SDS named "Appendable-No-Data" is empty */ check_getchunkinfo(fid, "Appendable-No-Data", HDF_NONE, &num_errs); /* Check that SDS named "CompressedData" is NOT empty */ check_getchunkinfo(fid, "CompressedData", HDF_NONE, &num_errs); /* Check that SDS named "Compressed-No-Data" is empty */ check_getchunkinfo(fid, "Compressed-No-Data", HDF_NONE, &num_errs); /* Check that SDS named "ChunkedData" is NOT empty */ check_getchunkinfo(fid, "ChunkedData", HDF_CHUNK, &num_errs); /* Check that SDS named "Chunked-No-Data" is empty */ check_getchunkinfo(fid, "Chunked-No-Data", HDF_CHUNK, &num_errs); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "In check_getchunkinfo: SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_getchunkinfo */ /* Test drive for testing the API SDcheckempty. */ extern int test_checkempty() { int32 fid; intn status; int num_errs = 0; /* Output message about test being performed */ TESTING("functions involving empty data sets (temptySDSs.c)"); /* Open the file and initialize the SD interface */ fid = SDstart(FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "In test_checkempty: SDstart"); num_errs = num_errs + test_nonspecial_SDSs(fid); num_errs = num_errs + test_compressed_SDSs(fid); num_errs = num_errs + test_chunked_SDSs(fid); num_errs = num_errs + test_unlimited_SDSs(fid); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "In test_checkempty: SDend"); /* This function will reopen the file and check the SDSs in it */ num_errs = num_errs + test_with_existing_file(); /* This function will reopen the file as read-only to test SDgetchunkinfo on empty SDS's */ num_errs = num_errs + test_getchunkinfo(); if (num_errs == 0) PASSED(); return num_errs; } hdf4-hdf4.3.1/mfhdf/test/test1.nc000066400000000000000000000015241503061704500164560ustar00rootroot00000000000000CDF ijkl historyˆThis is an example of a multi-line global attribute. It could be used for representing the processing history of the data, for example. bears acttext string 123acsÿØaclBhacfÀ?€acd¿ð?è¸order ÌshotØaloanðcross0i8j @lLindistinguishable@@@€@ @À@àShÔ¥@@?0@@ B _ @@€@À €hdf4-hdf4.3.1/mfhdf/test/testmfhdf.sh.in000066400000000000000000000047771503061704500200360ustar00rootroot00000000000000#! /bin/sh # Tests for the hdiff tool srcdir=@srcdir@ CMP='cmp -s' DIFF='diff -c' nerrors=0 verbose=yes # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All mfhdf tests passed" else MESG 0 "mfhdf tests failed: $nerrors" fi exit $nerrors } # Print a line-line message left justified in a field of 70 characters # beginning with the word "Testing". # TESTING() { SPACES=" " echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable # RUN() { # Run test. # Tflops interprets "$@" as "" when no parameter is given (e.g., the # case of missing file name). Changed it to use $@ till Tflops fixes it. MESG 0 "HDF-SD C interface tests" ${TESTS_ENVIRONMENT} ./hdftest RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi MESG 0 "HDF-nc C interface tests" ${TESTS_ENVIRONMENT} ./hdfnctest RET=$? if [ $RET -eq 1 ]; then echo "*FAILED*" nerrors="`expr $nerrors + 1`" fi MESG 0 "netCDF formatted tests" ${TESTS_ENVIRONMENT} ./cdftest > cdfout.new cmd="$DIFF cdfout.new $srcdir/testout.sav"; \ echo $cmd; \ if $cmd; then \ echo "*** netCDF passes formatted test ***"; \ else \ echo "*** netCDF fails formatted test ***"; \ echo "The above differences are OK if small" fi } ############################################################################## ### T H E T E S T S ### ############################################################################## # Print a beginning banner MESG 0 "Running mfhdf tests" # compare output RUN # End of test, return exit code FINISH hdf4-hdf4.3.1/mfhdf/test/testout.sav000066400000000000000000000005631503061704500173200ustar00rootroot00000000000000dimrename: IXX ncclose ret = 0 reopen id = 0 for filename test.cdf NC done GATTR VAR VATTR VATTR VATTR VATTR VATTR fill_seq indices 1 2 3 75.000000 != 2.718282 Done got val = 3.250000 got val = 0.000000 got val = 2.718282 got val = 82555 got val = 97 got val = A (0x41) got val = B (0x42) got val = "The red death had long devastated the country." re ncclose ret = 0 hdf4-hdf4.3.1/mfhdf/test/texternal.c000066400000000000000000001225171503061704500172540ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include /* Need to pick up H4_HAVE_SYS_STAT_H from mfhdf.h */ #include "hdf_priv.h" #include "mfhdf.h" #ifdef H4_HAVE_UNISTD_H #include #endif #ifdef H4_HAVE_SYS_STAT_H #include #endif #include "hdftest.h" #define EXTTST "exttst.hdf" /* main file for external file test */ #define EXTFILE "SD_external_file" /* file to contain external data */ #define EXTFILE1 "SD_external_file 2" /* file to contain external data */ #define EXTSDS "ExternalDataSet" /* data set written with external data right after creation */ #define EXTSDS2 "ExternalDataSet 2" /* data set first empty then written with external data */ #define WRAPSDS "WrapperDataSet" /* data set pointing to external data */ #define NOEXTSDS "NoExternalDataSet" /* data set with data in main file */ #define EXTFILE2 "ExternalSDSexisting" /* data set having data */ #define EXTFILE3 "ShouldNotHappen" /* data set already is external */ #define OFFSET 24 #define NUM_SDS 4 #define SDS1 "Dataset 1" #define SDS2 "Dataset 2" #define SDS3 "Dataset 3" #define SDS4 "Dataset 4" #define RANK3 3 #define X_LENGTH 4 #define Y_LENGTH 5 #define Z_LENGTH 6 #define RANK2 2 #define DIM1 5 #define DIM2 5 void verify_data(int32 sd_id, int32 sds_ind); /* Same set of data for every 3-dim data set. Initialized in test_external(). */ int32 written_data[Z_LENGTH][Y_LENGTH][X_LENGTH]; /* Appended data or hyperslab */ int32 ap_data[1][Y_LENGTH][X_LENGTH]; /******************************************************************** Name: test_setexternal() - tests basic functionalities in storing data in an external file Description: This function tests three scenarios: - Data written in main file then moved to external file and modified - Data in external file is pointed to by a "wrapper" data set - Empty data set is written with data in the external file The main contents include: - Data written in main file then moved and modified + create and write the entire data set in the main file + move the data to the external file with SDsetexternalfile + modify this external data - Data in external file pointed to by a "wrapper" data set + create a data set in the main file, i.e., the wrapper data set + have the wrapper pointed to part of the external data that belongs to the external data set above + read the wrapper's data and verify - Empty data set is written with data in the external file + create a data set in the main file and close it + re-open the data set + promote it to external data set, i.e., SDsetexternalfile + write data to the data set Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_setexternal() { int32 sd_id, sds_id; int32 start[2], edges[2], dimsizes[2], nt, offset; int32 idata[DIM1 * DIM2]; int ii; intn status; intn num_errs = 0; /* number of errors in compression test so far */ /* Create an HDF file */ sd_id = SDstart(EXTTST, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create a data set in the HDF file */ nt = DFNT_INT32 | DFNT_NATIVE; dimsizes[0] = DIM1; dimsizes[1] = DIM2; sds_id = SDcreate(sd_id, EXTSDS, nt, RANK2, dimsizes); CHECK(sds_id, FAIL, "SDcreate: Failed to create a new data set 'ExternalDataSet' for external promotion"); /* Initialize data to write out */ for (ii = 0; ii < dimsizes[0] * dimsizes[1]; ii++) idata[ii] = ii; /* Write data to the entire data set */ start[0] = start[1] = 0; edges[0] = dimsizes[0]; edges[1] = dimsizes[1]; status = SDwritedata(sds_id, start, NULL, edges, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* Promote the data set to an external data set by storing its data in the external file EXTFILE */ status = SDsetexternalfile(sds_id, EXTFILE, 0); CHECK(status, FAIL, "SDsetexternalfile"); for (ii = 0; ii < 3 * dimsizes[1]; ii++) idata[ii] = ii * 10; /* Write data to part of the newly promoted data set which now contains data in the external file */ start[0] = start[1] = 0; edges[0] = 3; edges[1] = dimsizes[1]; status = SDwritedata(sds_id, start, NULL, edges, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* End access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Need to close to flush external info to the HDF file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Open the HDF file again */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(sd_id, FAIL, "SDstart (again)"); /* Create a data set in the HDF file */ dimsizes[0] = 3; dimsizes[1] = 3; sds_id = SDcreate(sd_id, WRAPSDS, nt, 2, dimsizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a new data set('WrapperDataSet') for external wrapping"); /* Promote the regular data set to a "wrapper" one by making it point to the actual data in the external file 'extfile.hdf'. Note that only a subset of the existing data (which belongs to the previous data set, EXTSDS) is pointed to by the "wrapper" data set. The subset is specified by dimsizes array */ offset = DFKNTsize(nt) * 2; status = SDsetexternalfile(sds_id, EXTFILE, offset); CHECK(status, FAIL, "SDsetexternalfile"); /* End access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Need to close to flush external info to the HDF, or main, file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Open the HDF file again */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(sd_id, FAIL, "SDstart (again)"); /* Select the named data set, id is checked by callee */ sds_id = get_SDSbyName(sd_id, WRAPSDS); /* Read and verify data via the "wrapper" data set */ { int32 odata[9]; /* Read data back from this "wrapper" data set */ start[0] = start[1] = 0; edges[0] = 3; edges[1] = 3; status = SDreaddata(sds_id, start, NULL, edges, (void *)odata); CHECK(status, FAIL, "SDreaddata"); /* Verify data read back in */ for (ii = 0; ii < edges[0] * edges[1]; ii++) { if (odata[ii] != (ii + 2) * 10) { fprintf(stderr, "Bogus val in loc %d in wrapper dset want %d got %ld\n", ii, (ii + 2) * 10, (long)odata[ii]); num_errs++; } } } /* End access to the wrapper data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Create an empty data set then write external data to it */ /* Create data set EXTSDS2 */ nt = DFNT_INT32 | DFNT_NATIVE; dimsizes[0] = X_LENGTH; dimsizes[1] = Y_LENGTH; sds_id = SDcreate(sd_id, EXTSDS2, nt, 2, dimsizes); CHECK(sds_id, FAIL, "SDcreate: Failed to create a new data set for testing writing external data to an empty data set"); /* Close data sets */ status = SDendaccess(sds_id); /* Re-open the named data set, id is checked by callee */ sds_id = get_SDSbyName(sd_id, EXTSDS2); /* Make this data set to have external data in a new file */ status = SDsetexternalfile(sds_id, EXTFILE1, 0); /* initialize data to write out */ for (ii = 0; ii < dimsizes[0] * dimsizes[1]; ii++) idata[ii] = ii; /* Write data to all of data set EXTSDS2 in the file EXTFILE1 */ start[0] = start[1] = 0; edges[0] = dimsizes[0]; edges[1] = dimsizes[1]; status = SDwritedata(sds_id, start, NULL, edges, (void *)idata); CHECK(status, FAIL, "SDwritedata"); /* Close data sets */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Close HDF file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_setexternal() */ /******************************************************************** Name: test_getexternal() - tests getting external file info on various data sets Description: The main contents include: - Create and write a data set in the main file only, i.e., non-external data set - Get and verify external file info for external data set and wrapper data set - Verifying that there is no external file info from the non-external data set Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_getexternal() { int32 sd_id, sds_id, noextsds; intn name_len = 0; char *extfile_name; int32 offset = 0, length = 0; int32 start[2], edges[2], dimsizes[2], nt; int32 idata[DIM1 * DIM2]; int ii; intn num_errs = 0; /* number of errors in compression test so far */ intn status = SUCCEED; /* Open file 'exttst.hdf' again */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(sd_id, FAIL, "SDstart (again)"); /* Create and write a data set in the main file */ /* Create data set NOEXTSDS */ nt = DFNT_INT32 | DFNT_NATIVE; dimsizes[0] = DIM1; dimsizes[1] = DIM2; noextsds = SDcreate(sd_id, NOEXTSDS, nt, 2, dimsizes); CHECK(noextsds, FAIL, "SDcreate: Failed to create a new data set 'NoExternalDataSet' for testing SDSgetexternalfile on a " "non-external element"); /* initialize data to write out */ for (ii = 0; ii < 25; ii++) idata[ii] = ii; /* Write data to all of data set NOEXTSDS in main file */ start[0] = start[1] = 0; edges[0] = edges[1] = DIM1; status = SDwritedata(noextsds, start, NULL, edges, (void *)idata); CHECK(status, FAIL, NOEXTSDS); CHECK(status, FAIL, "SDwritedata"); /* Close data sets */ status = SDendaccess(noextsds); CHECK(status, FAIL, "SDendaccess"); /* * Test getting external info on an external data set; should return the * external file information successfully. */ /* Get access to the data set named EXTSDS, id is checked by callee */ sds_id = get_SDSbyName(sd_id, EXTSDS); /* Call SDgetexternalfile the first time passing in 0 for external file name length to get the actual length - SDgetexternalfile is deprecated as of 4.2.7 because it missed the length argument */ { /* deprecated */ name_len = SDgetexternalfile(sds_id, 0, NULL, NULL); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalfile"); extfile_name = (char *)malloc(sizeof(char *) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "SDgetexternalfile"); memset(extfile_name, '\0', name_len + 1); /* Call SDgetexternalfile again and get the external file info */ name_len = SDgetexternalfile(sds_id, name_len + 1, extfile_name, &offset); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalfile"); VERIFY_CHAR(EXTFILE, extfile_name, "SDgetexternalfile"); free(extfile_name); } /* Call SDgetexternalinfo the first time passing in 0 for external file name length to get the actual length */ name_len = SDgetexternalinfo(sds_id, 0, NULL, NULL, NULL); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalinfo"); /* Test passing in NULL pointer for external file name buffer, should fail gracefully */ { char *null_buffer = NULL; intn ret_code = 0; ret_code = SDgetexternalinfo(sds_id, name_len + 1, null_buffer, &offset, &length); VERIFY(ret_code, FAIL, "SDgetexternalinfo"); } /* Prepare buffer for external file name */ extfile_name = (char *)malloc(sizeof(char *) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "test_getexternal"); memset(extfile_name, '\0', name_len + 1); /* Call SDgetexternalinfo again and get the external file info */ name_len = SDgetexternalinfo(sds_id, name_len + 1, extfile_name, &offset, &length); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalinfo"); VERIFY_CHAR(EXTFILE, extfile_name, "SDgetexternalinfo"); /* Test passing in smaller buffer for external file name than actual; name should be truncated */ { char *short_name = (char *)malloc(sizeof(char *) * (name_len)); CHECK_ALLOC(short_name, "short_name", "test_getexternal"); memset(short_name, '\0', name_len); strncpy(short_name, EXTFILE, name_len - 2); memset(extfile_name, '\0', name_len); /* Call SDgetexternalinfo again with smaller buffer size and verify that SDgetexternalinfo reads the name truncated to the given buffer size*/ name_len = SDgetexternalinfo(sds_id, name_len - 2, extfile_name, &offset, &length); VERIFY(name_len, (intn)strlen(extfile_name), "SDgetexternalinfo"); VERIFY_CHAR(short_name, extfile_name, "SDgetexternalinfo"); free(short_name); } free(extfile_name); /* Close the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* * Test getting external info on a wrapper data set; should return the * external file information successfully. */ /* Get access to the data set named WRAPSDS, id is checked by callee */ sds_id = get_SDSbyName(sd_id, WRAPSDS); /* Call SDgetexternalinfo the first time passing in 0 for external file name length to get the actual length */ name_len = SDgetexternalinfo(sds_id, 0, NULL, NULL, NULL); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalinfo"); /* Test passing in NULL pointer for external file name buffer, should fail gracefully */ { char *null_buffer = NULL; intn ret_code = 0; ret_code = SDgetexternalinfo(sds_id, name_len + 1, null_buffer, &offset, &length); VERIFY(ret_code, FAIL, "SDgetexternalinfo"); } extfile_name = (char *)malloc(sizeof(char *) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "test_getexternal"); memset(extfile_name, '\0', name_len + 1); /* Call SDgetexternalinfo again and get the external file info */ name_len = SDgetexternalinfo(sds_id, name_len + 1, extfile_name, &offset, &length); VERIFY(name_len, (intn)strlen(EXTFILE), "SDgetexternalinfo"); VERIFY_CHAR(EXTFILE, extfile_name, "SDgetexternalinfo"); free(extfile_name); /* * Test getting external info on a non-external data set; should return * no external file information */ /* Get access to the data set named NOEXTSDS, id is checked by callee */ noextsds = get_SDSbyName(sd_id, NOEXTSDS); /* Call SDgetexternalinfo on the SDS that doesn't have external element, should return 0 for length of external file name */ name_len = SDgetexternalinfo(noextsds, 0, NULL, NULL, NULL); VERIFY(name_len, 0, "SDgetexternalinfo"); status = SDendaccess(noextsds); CHECK(status, FAIL, "SDendaccess"); /* Close file 'exttst.hdf' */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_getexternal() */ /******************************************************************** Name: test_mult_setexternal() - tests setting external multiple times Description: The main contents include: - Create and write an external data set to FILE_NAME, then close it and the file. - Re-open the file - Call SDsetexternal on the data set, which is already an external SDS. This is to make sure HDFFR-1516 is fixed. - Re-open the file and verify data of each data set. Return value: The number of errors occurred in this routine. *********************************************************************/ int test_mult_setexternal() { int32 sd_id, sds1_id; int32 dim_sizes[3]; int32 size_written = 0; char *extfile_name = NULL; intn name_len = 0; intn status = SUCCEED; intn num_errs = 0; /* number of errors in compression test so far */ /* Create the file and initialize the SD interface */ sd_id = SDstart(EXTTST, DFACC_CREATE); CHECK(status, FAIL, "SDstart"); dim_sizes[0] = Z_LENGTH; dim_sizes[1] = Y_LENGTH; dim_sizes[2] = X_LENGTH; /* Create data set SDS1 and write data to the external file; the returned value is the size of the data had been written for this sds */ size_written = make_Ext3D_SDS(sd_id, SDS1, DFNT_INT32, 3, dim_sizes, (void *)written_data, OFFSET, EXTFILE2); CHECK(size_written, FAIL, "make_Ext3D_SDS"); /* Close the file to flush */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Re-open the file */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(status, FAIL, "SDstart"); /* Move data from an external data set, SDS1, into the external file again. This simulates the situation of the example being run more than once, causing failure in daily test. This action should have no effect now. (HDFFR-1521) */ /* Select the named data set, id is checked by callee */ sds1_id = get_SDSbyName(sd_id, SDS1); /* Try to move it to the external file again; should neither fail, nor have any effect. External file name should still be EXTFILE2 */ status = SDsetexternalfile(sds1_id, EXTFILE3, OFFSET); if (status < 0) fprintf(stderr, "SDsetexternalfile still fail when called more than once on an SDS\n"); /* Verify that external file still is EXTFILE2, and not EXTFILE3 */ /* Call SDgetexternalinfo the first time passing in 0 for external file name length to get the actual length */ name_len = SDgetexternalinfo(sds1_id, 0, NULL, NULL, NULL); if (name_len <= 0) fprintf(stderr, "SDsetexternalfile should return length greater than 0\n"); /* Prepare buffer for external file name */ extfile_name = malloc(sizeof(char *) * (name_len + 1)); CHECK_ALLOC(extfile_name, "extfile_name", "test_getexternal"); memset(extfile_name, '\0', name_len + 1); /* Call SDgetexternalinfo again and get the external file info */ name_len = SDgetexternalinfo(sds1_id, name_len + 1, extfile_name, NULL, NULL); VERIFY(name_len, (intn)strlen(EXTFILE2), "SDgetexternalinfo"); VERIFY_CHAR(EXTFILE2, extfile_name, "SDgetexternalinfo"); /* Close the data set and the file */ status = SDendaccess(sds1_id); CHECK(status, FAIL, "SDendaccess SDS1"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Re-open the file to verify written data */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(status, FAIL, "SDstart"); /* Read data of the data set and verify against the original */ verify_data(sd_id, 0); free(extfile_name); /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_mult_setexternal() */ /******************************************************************** Name: test_special_combos() - tests combining other specialness with external data feature. Description: The main contents include: - Open the file from test_mult_setexternal - Create and write two unlimited-dimension data sets, SDS2 and SDS3 - Append data to the first unlimited-dimension data set, SDS2, to create linked-block element. - Move data of the first unlimited-dim data set, SDS2, to the external file to test the combination of SPECIAL_LINKED and SPECIAL_EXT. - Move data of SDS3 to the external file to test unlimited and SPECIAL_EXT without linked-block element. - Make a compressed data set, SDS4, in the main file. - Attempt to move data of SDS4 to the external file should fail, because SPECIAL_COMP and SPECIAL_EXT combo is not supported. - Close everything. - Re-open the file and verify data of each data set in the file. Return value: The number of errors occurred in this routine. *********************************************************************/ int test_special_combos() { int32 sd_id, sds2_id, sds3_id, sds4_id; int32 num_sds = 0, num_attrs = 0; int32 ap_start[3], ap_edges[3], dim_sizes[3]; int32 sds2_size = 0, sds3_size = 0, sds4_size = 0, size_written = 0; intn status = 0; int ii, jj, kk; intn num_errs = 0; /* number of errors in compression test so far */ /* Create the file and initialize the SD interface */ sd_id = SDstart(EXTTST, DFACC_CREATE); CHECK(status, FAIL, "SDstart"); dim_sizes[0] = SD_UNLIMITED; dim_sizes[1] = Y_LENGTH; dim_sizes[2] = X_LENGTH; /* Create and write two unlimited-dimension data sets, SDS2 and SDS3, in the main file. Z_LENGTH is passed for unlimited dimension. */ sds2_size = make_SDS(sd_id, SDS2, DFNT_INT32, 3, dim_sizes, Z_LENGTH, (void *)written_data); sds3_size = make_SDS(sd_id, SDS3, DFNT_INT32, 3, dim_sizes, Z_LENGTH, (void *)written_data); /* Close the file to flush */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Re-open the file */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(status, FAIL, "SDstart"); /* Start appending data at the end of the unlimited dimension */ ap_start[0] = Z_LENGTH; ap_start[1] = ap_start[2] = 0; ap_edges[0] = 1; ap_edges[1] = Y_LENGTH; ap_edges[2] = X_LENGTH; /* Data initialization, a hyperslab 1xY_LENGTHxX_LENGTH */ for (kk = 0; kk < ap_edges[0]; kk++) for (jj = 0; jj < ap_edges[1]; jj++) for (ii = 0; ii < ap_edges[2]; ii++) ap_data[kk][jj][ii] = (ii + 1) + (jj + 1) + (kk + 1); /* Append data to the unlimited-dimension data set SDS2. This should */ /* produce a linked-block element, because SDS3 had been written */ sds2_size = append_Data2SDS(sd_id, SDS2, ap_start, ap_edges, (void *)ap_data); CHECK(sds2_size, FAIL, "append_Data2SDS"); /* Select the named data set, id is checked by callee */ sds2_id = get_SDSbyName(sd_id, SDS2); /* Now, move SDS2's data to the external file, then check its size This tests the combo: SPECIAL_LINKED and SPECIAL_EXT. 1600 is just a random number that is more than enough to go pass the existing data. This action verifies the fix in HDFFR-1516. SDsetexternalfile does not fail. Note that there is no test for the case where calling SDsetexternalfile on an external SDS failed, because SDsetexternalfile is modified to have no effect if it is called more than once on an SDS, see HDFFR-1521. */ status = SDsetexternalfile(sds2_id, EXTFILE2, 1600); CHECK(status, FAIL, "SDsetexternalfile"); /* Verify data size */ status = verify_datasize(sds2_id, sds2_size, SDS2); CHECK(status, FAIL, "verify_datasize"); /* Move data of an existing contiguous data set to the external file */ /* Select the named data set, id is checked by callee */ sds3_id = get_SDSbyName(sd_id, SDS3); /* Move SDS3's data to the external file, then check its size. This also */ /* tests moving an existing unlimited-dimension data set to external file */ status = SDsetexternalfile(sds3_id, EXTFILE2, 2500); /* random spot */ CHECK(status, FAIL, "SDsetexternalfile"); status = verify_datasize(sds3_id, sds3_size, SDS3); CHECK(status, FAIL, "verify_datasize"); /* Attempt to move a compressed data set to an external file; should fail */ /* Create and write to a compressed data set */ sds4_size = make_SDS(sd_id, SDS4, DFNT_INT32, 3, dim_sizes, Z_LENGTH, (void *)written_data); /* Select the named data set, id is checked by callee */ sds4_id = get_SDSbyName(sd_id, SDS4); /* Try to move SDS4's data to the external file, should fail because HDF4 doesn't support compressed and external data together */ status = SDsetexternalfile(sds4_id, EXTFILE2, 4000); /* random spot */ CHECK(status, FAIL, "SDsetexternalfile"); /* Check the data length of each data set */ status = verify_datasize(sds2_id, sds2_size, SDS2); CHECK(status, FAIL, "verify_datasize"); status = verify_datasize(sds3_id, sds3_size, SDS3); CHECK(status, FAIL, "verify_datasize"); status = verify_datasize(sds4_id, sds4_size, SDS4); CHECK(status, FAIL, "verify_datasize"); status = SDendaccess(sds2_id); CHECK(status, FAIL, "SDendaccess SDS2"); status = SDendaccess(sds3_id); CHECK(status, FAIL, "SDendaccess SDS3"); status = SDendaccess(sds4_id); CHECK(status, FAIL, "SDendaccess SDS4"); /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Re-open the file to verify written data */ sd_id = SDstart(EXTTST, DFACC_RDWR); CHECK(status, FAIL, "SDstart"); status = SDfileinfo(sd_id, &num_sds, &num_attrs); CHECK(status, FAIL, "SDfileinfo"); /* Read data of each data sets and verify against the original */ for (ii = 0; ii < num_sds; ii++) { verify_data(sd_id, ii); } /* Close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_special_combos() */ /******************************************************************** Name: test_change_extdir() - tests re-setting external directory with valid and invalid values. Description: The main contents include: - Create an HDF file and a dataset in it - Set create external directory to the source test directory - Promote the dataset to an external element - Try setting the external directory to various values and verify the behavior of SDreaddata each time - Remove the data file and the external file Return value: The number of errors occurred in this routine. *********************************************************************/ #define MAIN_FILE "tmainfile.hdf" /* file where the SDS is created */ #define EXT_FILE "textfile.txt" /* file where the external data is stored */ #define SDS_NAME "ExternalDS" /* dataset will have data in an external file */ #define RANK 1 #define TMP_DIR "EXT_tempdir/" /* temporary dir to create the external file in */ static int test_change_extdir(void) { int32 sd_id; int32 sds_id; float sds_data[] = {0.1f, 2.3f, 4.5f, 6.7f, 8.9f}; float sds1_out[5]; int32 start = 0, stride = 1, edge; int32 dimsize[RANK]; char dir_name[MAX_PATH_LEN]; /* directory from srcdir */ size_t dir_name_len; char *another_path = NULL; /* another path to test reading external file */ char *temp_dir = NULL; /* temp dir to create the external file in */ char *created_file_path = NULL; /* path to the created external file */ int32 sds_index; int command_ret = 0; /* retvalue from system commands */ intn status = 0; intn num_errs = 0; /* number of errors in compression test so far */ status = make_sourcepath(dir_name, MAX_PATH_LEN); CHECK(status, FAIL, "make_sourcepath"); /* When srcdir is not available, make up a directory to create the external file to cause subsequent reads to look outside of the current directory */ if (!strcmp(dir_name, "./")) { /* Facilitate the removal of the temporary directory later */ temp_dir = (char *)calloc(strlen(TMP_DIR) + 1, sizeof(char)); CHECK_ALLOC(temp_dir, "temp_dir", "test_change_extdir"); strcpy(temp_dir, TMP_DIR); #if defined H4_HAVE_WIN32_API command_ret = mkdir(temp_dir); #else command_ret = mkdir(temp_dir, 0755); #endif CHECK(command_ret, (-1), "mkdir temp_dir"); strcat(dir_name, temp_dir); } /* Create the main file */ sd_id = SDstart(MAIN_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Set the directory to put the external file in */ status = HXsetcreatedir(dir_name); CHECK(status, FAIL, "HXsetcreatedir"); /* Create a one-dim dataset named SDS_NAME */ dimsize[0] = 5; edge = dimsize[0]; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_FLOAT32, RANK, dimsize); CHECK(sds_id, FAIL, "SDcreate"); /* Promote the data set to an external data set by storing its data in the external file EXT_FILE */ status = SDsetexternalfile(sds_id, EXT_FILE, 0); CHECK(status, FAIL, "SDsetexternalfile"); /* Write to the dataset, the data will be stored in the external file EXT_FILE */ status = SDwritedata(sds_id, &start, &stride, &edge, sds_data); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Open the file to read */ sd_id = SDstart(MAIN_FILE, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); /* Determine the index of the dataset */ sds_index = SDnametoindex(sd_id, SDS_NAME); CHECK(sds_index, FAIL, "SDnametoindex"); /* Dataset identifier */ sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "SDselect"); /* Unset the target directory and read the variable */ status = HXsetdir(NULL); CHECK(status, FAIL, "HXsetdir NULL"); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, FAIL, "SDreaddata"); /* Set the target directory to the location of the external file and read the dataset */ status = HXsetdir(dir_name); CHECK(status, FAIL, "HXsetdir dir_name"); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, SUCCEED, "SDreaddata"); /* Unset the target directory again and read the variable */ status = HXsetdir("."); CHECK(status, FAIL, "HXsetdir ."); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, FAIL, "SDreaddata"); dir_name_len = strlen(dir_name); another_path = (char *)malloc(sizeof(char) * dir_name_len + 20); strcpy(another_path, dir_name); strcat(another_path, "non-existing-dir"); status = HXsetdir(another_path); CHECK(status, FAIL, "HXsetdir another_path"); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, FAIL, "SDreaddata"); free(another_path); status = HXsetdir(dir_name); CHECK(status, FAIL, "HXsetdir dir_name"); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, SUCCEED, "SDreaddata"); status = HXsetdir(NULL); CHECK(status, FAIL, "HXsetdir NULL"); status = SDreaddata(sds_id, &start, &stride, &edge, sds1_out); VERIFY(status, FAIL, "SDreaddata"); /* Terminates access to the SD interface and closes the file */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Remove external data file */ created_file_path = (char *)malloc(strlen(dir_name) + strlen(EXT_FILE) + 1); CHECK_ALLOC(created_file_path, "created_file_path", "test_change_extdir"); strcpy(created_file_path, dir_name); strcat(created_file_path, EXT_FILE); command_ret = remove(created_file_path); CHECK(command_ret, FAIL, "remove created_file_path"); free(created_file_path); /* Remove hdf file */ command_ret = remove(MAIN_FILE); CHECK(command_ret, FAIL, "remove MAIN_FILE"); /* Remove temporary directory used in case no src_dir */ if (temp_dir) { command_ret = rmdir(temp_dir); CHECK(command_ret, (-1), "remove temp_dir"); free(temp_dir); } /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_change_extdir */ /******************************************************************** Name: test_HDFFR_1609() - tests writing after creating external file and without specifying external dir Description: The main contents include: - HXsetdir to a location other than the directory where the external file is going to be created - Create a new hdf file and a new dataset - Set create external directory to the source test directory - Create the external file by calling SDsetexternalfile - Write to the dataset with external data, should succeed (this failed before the fix) - Remove the data file and the external file Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_HDFFR_1609(void) { int32 sd_id; int32 sds_id; float sds_data[] = {0.1f, 2.3f, 4.5f, 6.7f, 8.9f}; int32 start = 0, stride = 1, edge; int32 dimsize[RANK]; char dir_name[MAX_PATH_LEN]; /* directory from srcdir */ char *temp_dir = NULL; /* temp dir to create the external file in */ char *created_file_path = NULL; /* path to the created external file */ int command_ret = 0; /* retvalue from system commands */ intn status = 0; intn num_errs = 0; /* number of errors in compression test so far */ status = make_sourcepath(dir_name, MAX_PATH_LEN); CHECK(status, FAIL, "make_sourcepath"); /* When srcdir is not available, make up a directory to create the external file to cause subsequent reads to look outside of the current directory */ if (!strcmp(dir_name, "./")) { /* Facilitate the removal of the temporary directory later */ temp_dir = (char *)calloc(strlen(TMP_DIR) + 1, sizeof(char)); CHECK_ALLOC(temp_dir, "temp_dir", "test_HDFFR_1609"); strcpy(temp_dir, TMP_DIR); #if defined H4_HAVE_WIN32_API command_ret = mkdir(temp_dir); #else command_ret = mkdir(temp_dir, 0755); #endif CHECK(command_ret, (-1), "mkdir temp_dir"); strcat(dir_name, temp_dir); } /* Unset the target directory and read the variable */ status = HXsetdir(NULL); CHECK(status, FAIL, "HXsetdir"); /* Create the main file */ sd_id = SDstart(MAIN_FILE, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Set the directory to put the external file in */ status = HXsetcreatedir(dir_name); CHECK(status, FAIL, "HXsetcreatedir"); /* Create a one-dim dataset named SDS_NAME */ dimsize[0] = 5; edge = dimsize[0]; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_FLOAT32, RANK, dimsize); CHECK(sds_id, FAIL, "SDcreate"); /* Promote the data set to an external data set by storing its data in the external file EXT_FILE */ status = SDsetexternalfile(sds_id, EXT_FILE, 0); CHECK(status, FAIL, "SDsetexternalfile"); /* Write to the dataset, the data will be stored in the external file EXT_FILE */ status = SDwritedata(sds_id, &start, &stride, &edge, sds_data); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Remove external data file */ created_file_path = (char *)malloc(strlen(dir_name) + strlen(EXT_FILE) + 1); CHECK_ALLOC(created_file_path, "created_file_path", "test_HDFFR_1609"); strcpy(created_file_path, dir_name); strcat(created_file_path, EXT_FILE); command_ret = remove(created_file_path); CHECK(command_ret, FAIL, "remove created_file_path"); free(created_file_path); /* Remove hdf file */ command_ret = remove(MAIN_FILE); CHECK(command_ret, FAIL, "remove MAIN_FILE"); /* Remove temporary directory used in case no src_dir */ if (temp_dir) { command_ret = rmdir(temp_dir); CHECK(command_ret, (-1), "remove temp_dir"); free(temp_dir); } /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_HDFFR_1609 */ /* Test driver for testing external file functions */ extern int test_external() { int ii, jj, kk; intn num_errs = 0; /* number of errors */ /* Data initialization */ for (kk = 0; kk < Z_LENGTH; kk++) for (jj = 0; jj < Y_LENGTH; jj++) for (ii = 0; ii < X_LENGTH; ii++) written_data[kk][jj][ii] = (ii + 1) + (jj + 1) + (kk + 1); /* Output message about test being performed */ TESTING("external file functions (texternal.c)"); /* Test SDsetexternalfile basic functionality (modified from hdftest.c) */ num_errs = num_errs + test_setexternal(); /* Test SDgetexternalfile basic functionality */ num_errs = num_errs + test_getexternal(); /* Test calling SDsetexternalfile repeatedly */ num_errs = num_errs + test_mult_setexternal(); /* Test multiple specialness */ num_errs = num_errs + test_special_combos(); /* Test reading external elements with multiple HXsetdir calls */ num_errs = num_errs + test_change_extdir(); /* Test HDFFR_1609 fix */ num_errs = num_errs + test_HDFFR_1609(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } /*********************** Local utility functions ***********************/ /******************************************************************** Name: verify_data() - Verifies the written data, given the SDS' index. Description: Calls SDselect, SDgetinfo, and SDreaddata to verify the sds_ind'th data against the original buffer. Return value: None. *********************************************************************/ void verify_data(int32 sd_id, int32 sds_ind) { int32 sds_id; int32 *ptr; char name[80]; int32 data_size, rank1; int32 start[3], edges[3], dims[3]; intn status; int32 *outdata = NULL, num_elems; intn num_errs = 0; /* number of errors in compression test so far */ int32 data_wappended[Z_LENGTH + 1][Y_LENGTH] [X_LENGTH]; /* Buffer for first written data + appended data */ /* Select the data set. */ sds_id = SDselect(sd_id, sds_ind); CHECK(sds_id, FAIL, "SDselect"); /* Set the parameters start and edges to read */ edges[1] = Y_LENGTH; edges[2] = X_LENGTH; start[0] = start[1] = start[2] = 0; /* Get the name of the data set */ status = SDgetinfo(sds_id, name, &rank1, dims, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); /* The data set SDS2 has appended data so the written data is different from the rest of the data sets in the file */ if (!strncmp(name, SDS2, strlen(SDS2))) { /* Number of elements in first written data + appended data */ num_elems = Z_LENGTH * Y_LENGTH * X_LENGTH + 1 * Y_LENGTH * X_LENGTH; /* Copy buffer of first written data to data_wappended */ memcpy(data_wappended, written_data, (Z_LENGTH * Y_LENGTH * X_LENGTH) * sizeof(int)); /* Forward to the end of first written data */ ptr = &data_wappended[Z_LENGTH][0][0]; /* Copy appended data to data_wappended */ memcpy(ptr, ap_data, (1 * Y_LENGTH * X_LENGTH) * sizeof(int)); /* Back to the beginning of data_wappended */ ptr = &data_wappended[0][0][0]; /* Size of data written including appended data */ data_size = ((Z_LENGTH + 1) * Y_LENGTH * X_LENGTH) * sizeof(int); edges[0] = Z_LENGTH + 1; } /* with appended data */ /* Everyone else */ else { /* Point to written data buffer */ ptr = &written_data[0][0][0]; /* Number of elements */ num_elems = Z_LENGTH * Y_LENGTH * X_LENGTH; /* Size of data written */ data_size = num_elems * sizeof(int); edges[0] = Z_LENGTH; } /* Allocate buffer for reading, after establishing the data size */ outdata = (int32 *)malloc(data_size); CHECK_ALLOC(outdata, "outdata", "verify_data"); /* Read the entire sds and verify that the data is as the original buffer */ status = SDreaddata(sds_id, start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); /* Verify that data is correct comparing against the written data */ { int num; int32 *out = outdata; for (num = 0; num < num_elems; num++, ptr++, out++) { if (*ptr != *out) { fprintf(stderr, "Data read (%d) is different than written (%d) for SDS #%d, name = %s\n", *out, *ptr, sds_ind, name); } } } /* Release resource */ free(outdata); /* Terminate access to the data set, SD interface, and file. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); } /* verify_data */ hdf4-hdf4.3.1/mfhdf/test/tfile.c000066400000000000000000000433121503061704500163440ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "mfhdf.h" #include "hdftest.h" #include "nc_priv.h" /******************************************************************** Name: test_file_inuse() - tests preventing of an in-use file being removed at cleanup time. (bugzilla #376) Description: Sometime, when an error occurs, the cleanup process attempts to remove a file, which might still be in use (part of bugzilla #376.) The routine test_file_inuse is to test the fix that provides the underlying call to HPisfile_in_use, which should successfully determines whether a file is still in use before an attempt to remove. The main contents include: - a loop that repeatedly calls SDstart/DFACC_CREATE; only the first SDstart succeeds, the subsequent ones should fail. - SDcreate, SDwritedata, SDendaccess follow - outside of that loop is another loop to call SDend corresponding to the previous SDstart's - then, at the end, the file will be reopened; if the file doesn't exist and causes SDstart to fail, the test will fail. Before the fix, when the 2nd SDstart/DFACC_CREATE was called and failed because the file was being in use from the first call to SDstart/DFACC_CREATE, the cleaning process removed the file. Return value: The number of errors occurred in this routine. *********************************************************************/ #define FILE_NAME "bug376.hdf" /* data file to test */ #define DIM0 10 static intn test_file_inuse() { int32 file_id, sd_id[5], sds_id[5]; intn statusn; int32 dims[1], start[1], edges[1], rank; int16 array_data[DIM0]; const char *names[5] = {"data1", "data2", "data3", "data4", "data5"}; intn i, j; intn num_errs = 0; /* number of errors so far */ for (i = 0; i < 5; i++) { /* Create and open the file and initiate the SD interface. */ sd_id[i] = SDstart(FILE_NAME, DFACC_CREATE); if (i == 0) { CHECK(sd_id[i], FAIL, "SDstart"); } /* 1st SDstart must pass */ else { VERIFY(sd_id[i], FAIL, "SDstart"); } /* subsequent SDstart should fail, which causes the following calls to fail as well */ /* Define the rank and dimensions of the data sets to be created. */ rank = 1; dims[0] = DIM0; start[0] = 0; edges[0] = DIM0; /* Create the array data set. */ sds_id[i] = SDcreate(sd_id[i], names[i], DFNT_INT16, rank, dims); if (i == 0) { CHECK(sds_id[i], FAIL, "SDcreate"); } /* 1st SDcreate must pass */ else VERIFY(sds_id[i], FAIL, "SDcreate"); /* Fill the stored-data array with values. */ for (j = 0; j < DIM0; j++) { /* Max values: i = 5, j = DIM0 (10), so the largest value * stored is 6 * 11 = 66 */ array_data[j] = (int16)((i + 1) * (j + 1)); } /* Write data to the data set */ statusn = SDwritedata(sds_id[i], start, NULL, edges, (void *)array_data); if (i == 0) { CHECK(statusn, FAIL, "SDwritedata"); } /* 1st SDwritedata must pass */ else VERIFY(statusn, FAIL, "SDwritedata"); /* Terminate access to the data sets. */ statusn = SDendaccess(sds_id[i]); if (i == 0) { CHECK(statusn, FAIL, "SDendaccess"); } /* 1st SDendaccess must pass */ else VERIFY(statusn, FAIL, "SDendaccess"); } /* for i */ for (i = 0; i < 5; i++) { /* Terminate access to the SD interface and close the file. */ statusn = SDend(sd_id[i]); if (i == 0) { CHECK(statusn, FAIL, "SDend"); } /* 1st SDend must pass */ else VERIFY(statusn, FAIL, "SDend"); } /* Try to open the file, which should exist */ file_id = SDstart(FILE_NAME, DFACC_RDWR); CHECK(file_id, FAIL, "SDstart"); statusn = SDend(file_id); CHECK(statusn, FAIL, "SDend"); return num_errs; } /* test_file_inuse */ /******************************************************************** Name: test_max_open_files() - tests the new API SDreset_maxopenfiles, SDget_maxopenfiles, SDget_numopenfiles, and SDgetfilename. (bugzilla #396 and #440) Description: There were multiple requests from the users to increase the maximum number of opened files allowed. SDreset_maxopenfiles is added to allow the user to reset that value. The current default value is 32. This API can be called anytime to increase it. This test routine will carry out the following tests: - Get the current max, should be the default (32,) and the system limit - Reset current max to an arbitrary number that is larger than the default and verify - Try to create more files than the current max and all should succeed, because NC_open resets the current max to system limit automatically, when the number of opened files exceeds the current max - Get the current max and system limit and verify, current max should be the system limit - Get the current max another way, it should be the system limit again - Get the current number of files being opened - Reset current max to a value that is smaller than the current number of opened files; it shouldn't reset - Reset current max again to a value that is smaller than the current max but larger than the current number of opened files, that should work for there is no information loss - Try to create more files up to the system limit or NUM_FILES_HI, because the arrays have max NUM_FILES_HI elements in this test - Close all the files, then try opening all again to verify their names, this is to test bugzilla 440 Return value: The number of errors occurred in this routine. *********************************************************************/ #define NUM_FILES_LOW 35 #define NUM_FILES_HI 1024 static int test_max_open_files() { int32 fids[NUM_FILES_HI]; /* holds IDs of opened files */ char filename[NUM_FILES_HI][10]; /* holds generated file names */ char readfname[H4_MAX_NC_NAME]; /* file name retrieved from file id */ intn index, status, curr_max, /* curr maximum number of open files allowed in HDF */ sys_limit, /* maximum number of open files allowed by system */ curr_max_bk, /* back up of curr_max */ curr_opened, /* number of files currently being opened */ temp_limit, /* temp var - num of files to be opened in this test */ num_errs = 0; /* number of errors so far */ /* Get the current max and system limit */ status = SDget_maxopenfiles(&curr_max, &sys_limit); CHECK(status, FAIL, "test_max_open_files: SDget_maxopenfiles"); VERIFY(curr_max, H4_MAX_NC_OPEN, "test_max_open_files: SDget_maxopenfiles"); /* Reset current max to an arbitrary number and check */ curr_max = SDreset_maxopenfiles(33); VERIFY(curr_max, 33, "test_max_open_files: SDreset_maxopenfiles"); /* Try to create more files than the default max (currently, 32) and all should succeed */ for (index = 0; index < NUM_FILES_LOW; index++) { /* Create a file */ sprintf(filename[index], "file%i", index); fids[index] = SDstart(filename[index], DFACC_CREATE); CHECK(fids[index], FAIL, "test_max_open_files: SDstart"); } /* Verify that NUM_FILES_LOW files are opened */ curr_opened = SDget_numopenfiles(); VERIFY(curr_opened, NUM_FILES_LOW, "test_max_open_files: SDget_numopenfiles"); /* Now randomly close 3 files and check number of opened files */ status = SDend(fids[5]); CHECK(status, FAIL, "test_max_open_files: SDend"); status = SDend(fids[15]); CHECK(status, FAIL, "test_max_open_files: SDend"); status = SDend(fids[25]); CHECK(status, FAIL, "test_max_open_files: SDend"); curr_opened = SDget_numopenfiles(); VERIFY(curr_opened, NUM_FILES_LOW - 3, "test_max_open_files: SDget_numopenfiles"); /* Get the current max and system limit */ status = SDget_maxopenfiles(&curr_max, &sys_limit); CHECK(status, FAIL, "test_max_open_files: SDget_maxopenfiles"); VERIFY(curr_max, sys_limit, "test_max_open_files: SDget_maxopenfiles"); /* Get the current max another way, it should be the system limit */ curr_max = SDreset_maxopenfiles(0); VERIFY(curr_max, sys_limit, "test_max_open_files: SDreset_maxopenfiles"); /* Reopen the 3 files above, and check the number of opened files again */ fids[5] = SDstart(filename[5], DFACC_RDWR); CHECK(fids[5], FAIL, "test_max_open_files: SDstart"); fids[15] = SDstart(filename[15], DFACC_RDWR); CHECK(fids[15], FAIL, "test_max_open_files: SDstart"); fids[25] = SDstart(filename[25], DFACC_RDWR); CHECK(fids[25], FAIL, "test_max_open_files: SDstart"); curr_opened = SDget_numopenfiles(); VERIFY(curr_opened, NUM_FILES_LOW, "test_max_open_files: SDget_numopenfiles"); /* Reset current max to a value that is smaller than the current number of opened files; it shouldn't reset */ curr_max_bk = curr_max; curr_max = SDreset_maxopenfiles(curr_opened - 1); VERIFY(curr_max, curr_max_bk, "test_max_open_files: SDreset_maxopenfiles"); /* Reset current max again to a value that is smaller than the current max but larger than the current number of opened files, that should work for there is no information loss */ curr_max = SDreset_maxopenfiles(curr_opened + 3); VERIFY(curr_max, curr_opened + 3, "test_max_open_files: SDreset_maxopenfiles"); /* Try to create more files up to the system limit or NUM_FILES_HI, because the arrays have max NUM_FILES_HI elements in this test */ temp_limit = sys_limit / 2; temp_limit = temp_limit > NUM_FILES_HI ? NUM_FILES_HI : temp_limit; for (index = NUM_FILES_LOW; index < temp_limit; index++) { /* Create a file */ sprintf(filename[index], "file%i", index); fids[index] = SDstart(filename[index], DFACC_CREATE); /* if SDstart fails due to "too many open files," then adjust temp_limit so that further failure can be prevented, i.e. following SDend and SDstart */ if ((fids[index] == FAIL) && (HEvalue(1) == DFE_TOOMANY)) temp_limit = index; /* only CHECK returned value from SDstart if the failure wasn't because of "too many open files" */ else CHECK(fids[index], FAIL, "test_max_open_files: SDstart"); } /* Close all the files, then try opening all again to verify their names, this is to test bugzilla 440 */ for (index = 0; index < temp_limit; index++) { status = SDend(fids[index]); CHECK(status, FAIL, "test_max_open_files: SDend"); fids[index] = SDstart(filename[index], DFACC_RDWR); CHECK(fids[index], FAIL, "test_max_open_files: SDstart"); } /* Verify their names */ for (index = 0; index < temp_limit; index++) { status = SDgetfilename(fids[index], readfname); CHECK(status, FAIL, "test_max_open_files: SDgetfilename"); /* Verify the file name retrieved against the original */ if (strcmp(readfname, filename[index])) { fprintf(stderr, "SDgetfilename: incorrect file being opened - expected <%s>, retrieved <%s>\n", filename[index], readfname); } } /* Close then remove all the files */ for (index = 0; index < temp_limit; index++) { status = SDend(fids[index]); CHECK(status, FAIL, "test_max_open_files: SDend"); remove(filename[index]); } return num_errs; } /******************************************************************** Name: test_longfilename() - tests that the library can handle a very long file name (bugzilla 1331.) Description: The main contents include: - create a file with very long name - create a dataset and close it (this is to activate the failure) - SDend to close the file, and it would cause segfault before the fix was applied. Return value: The number of errors occurred in this routine. *********************************************************************/ #define NX 2 #define NY 3 static int test_longfilename() { int32 fid; /* file id */ int32 dset1; /* dataset ids */ int32 dims[2]; /* variable shapes */ char dsname[10]; char filename[256]; intn status = 0; /* status returned by called functions */ intn num_errs = 0; /* number of errors so far */ strcpy(dsname, "dataset 1"); strcpy(filename, "This file name has quite a few characters because it is used to test the fix of " "bugzilla 1331. It has to be at least this long to see."); /* enter define mode */ fid = SDstart(filename, DFACC_CREATE); CHECK(fid, FAIL, "test_longfilename: SDstart"); /* Define dimension of the data set to be created. */ dims[0] = NX; dims[1] = NY; /* Create a dataset to reproduce the problem before the fix */ dset1 = SDcreate(fid, dsname, DFNT_FLOAT32, 2, dims); CHECK(dset1, FAIL, "test_longfilename: SDcreate"); status = SDendaccess(dset1); CHECK(status, FAIL, "test_longfilename: SDendaccess"); status = SDend(fid); CHECK(status, FAIL, "test_longfilename: SDend"); return num_errs; } /******************************************************************** Name: test_fileformat() - tests that a file format can be determined (HDFFR-1519) Description: The main contents include: - call Hishdf() on an hdf file and a non-hdf file - call HDiscdf() on a cdf file and a non-cdf file - call HDisnetcdf() on a netCDF file and a non-netCDF file - call HDisnetcdf64() on a 64-bit netCDF file and a classic netCDF file Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_fileformat() { int32 fid; /* file id */ intn ishdf = 0; /* true if file has HDF format */ intn isnetcdf = 0; /* true if file has classic netCDF format */ intn isnetcdf64 = 0; /* true if file has 64-bit netCDF format */ intn num_errs = 0; /* number of errors so far */ const char *hdf_basename = "hdffile.hdf"; /* hdf file to test */ intn status = 0; /* status returned by called functions */ /* Create an empty HDF file to test Hishdf. */ fid = SDstart(hdf_basename, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); status = SDend(fid); CHECK(status, FAIL, "test_longfilename: SDend"); /* Verify that this is an HDF file */ ishdf = Hishdf(hdf_basename); VERIFY(ishdf, TRUE, "test_fileformat: Hishdf"); /* Verify that this is not a netCDF 64-bit file */ isnetcdf64 = HDisnetcdf64(hdf_basename); VERIFY(isnetcdf64, FALSE, "test_fileformat: HDisnetcdf64"); /* Test a classic netCDF file */ { const char *netcdf_filename = get_srcdir_filename("Roy.nc"); /* Verify that this is not an HDF file */ ishdf = Hishdf(netcdf_filename); VERIFY(ishdf, FALSE, "test_fileformat: Hishdf"); /* Verify that this is a classic netCDF file */ isnetcdf = HDisnetcdf(netcdf_filename); VERIFY(isnetcdf, TRUE, "test_fileformat: HDisnetcdf"); } /* Test a 64-bit netCDF file */ { const char *netcdf_filename = get_srcdir_filename("Roy-64.nc"); /* Verify that this is a netCDF 64-bit file */ isnetcdf64 = HDisnetcdf64(netcdf_filename); VERIFY(isnetcdf64, TRUE, "test_fileformat: HDisnetcdf64"); /* Verify that this is not a classic netCDF file */ isnetcdf = HDisnetcdf(netcdf_filename); VERIFY(isnetcdf, FALSE, "test_fileformat: HDisnetcdf"); } return num_errs; } /* Test driver for testing miscellaneous file related APIs. */ extern int test_files() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("miscellaneous file related functions (tfile.c)"); /* Test that an in-use file is not removed in certain failure cleanup. */ num_errs = num_errs + test_file_inuse(); /* Test handling of number of open files */ num_errs = num_errs + test_max_open_files(); /* Test file with very long name */ num_errs = num_errs + test_longfilename(); /* Test determining of file format */ num_errs = num_errs + test_fileformat(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tmixed_apis.c000066400000000000000000000466061503061704500175600ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tmixed_apis.c - tests the API functions: * SDidtype * Vgetvgroups * VSgetvdatas * Vgisinternal * Structure of the file: * test_mixed_apis - test driver * test_SDAPI_ids - tests SDidtype on SD API ids: sd, sds, dim ids * test_nonSDAPI_ids - tests SDidtype on non SD API ids and invalid id * test_vdatavgroups - tests Vgetvgroups and VSgetvdatas * test_vgisinternal - tests Vgisinternal ****************************************************************************/ #include #include #include "mfhdf.h" #include "hdftest.h" #define IDTYPE_FILE "idtypes.hdf" /* data file to test ID types */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 /* Tests SDidtype on SD API ids: sd, sds, dim ids */ static intn test_SDAPI_ids() { int32 fid, dset1, dset2, dim_id; int32 dimsize[RANK]; hdf_idtype_t id_type; intn status; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(IDTYPE_FILE, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Create an X_LENGTH by Y_LENGTH dataset, called DataSet_1 */ dimsize[0] = X_LENGTH; dimsize[1] = Y_LENGTH; dset1 = SDcreate(fid, "DataSet_1", DFNT_INT32, RANK, dimsize); CHECK(dset1, FAIL, "SDcreate"); /* Create another X_LENGTH by Y_LENGTH dataset, called DataSet_2 */ dset2 = SDcreate(fid, "DataSet_2", DFNT_FLOAT64, RANK, dimsize); CHECK(dset2, FAIL, "SDcreate"); /* Test SDidtype on the second dataset */ id_type = SDidtype(dset2); VERIFY(id_type, SDS_ID, "SDidtype: id_type"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open the file to test SDidtype more */ fid = SDstart(IDTYPE_FILE, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Test SDidtype on the SD id */ id_type = SDidtype(fid); VERIFY(id_type, SD_ID, "SDidtype: id_type"); /* Get access to the first dataset and test SDidtype on the SDS id */ dset1 = SDselect(fid, 0); CHECK(dset1, FAIL, "SDselect"); id_type = SDidtype(dset1); VERIFY(id_type, SDS_ID, "SDidtype: id_type"); /* Get access to the second dataset and test SDidtype on the SDS id */ dset2 = SDselect(fid, 1); CHECK(dset2, FAIL, "SDselect"); id_type = SDidtype(dset2); VERIFY(id_type, SDS_ID, "SDidtype: id_type"); /* Get dimension handle for first dimension of DataSet_1 and test SDidtype on the dimension id */ dim_id = SDgetdimid(dset1, 0); CHECK(dim_id, FAIL, "SDgetdimid"); id_type = SDidtype(dim_id); VERIFY(id_type, DIM_ID, "SDidtype dim_id"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_SDAPI_ids */ /* Tests SDidtype on non SD API ids and invalid id. */ static intn test_nonSDAPI_ids() { int32 fid, gr_id, vdata_id, ri_id; int32 vdata_ref; intn status; int32 dims[2] = {4, 5}; /* dimensions for the empty image */ hdf_idtype_t id_type; intn num_errs = 0; /* number of errors so far */ /* Open the HDF file */ fid = Hopen(IDTYPE_FILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen: tidtype.hdf"); /* Initialize HDF for subsequent vdata access */ status = Vstart(fid); CHECK(status, FAIL, "Vstart"); /* Create a new vdata and give it a name */ vdata_id = VSattach(fid, -1, "w"); CHECK(vdata_id, FAIL, "VSattach"); status = VSsetname(vdata_id, "Vdata_1"); CHECK(status, FAIL, "VSsetname"); /* Terminate access to the vdata */ status = VSdetach(vdata_id); CHECK(status, FAIL, "VSdetach"); /* Terminate access to the Vxxx interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Open the HDF file again to test SDidtype */ fid = Hopen(IDTYPE_FILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen: tidtype.hdf"); /* Initialize HDF for subsequent vdata accesses */ status = Vstart(fid); CHECK(status, FAIL, "Vstart"); /* Get access to the vdata "Vdata_1" via its reference number */ vdata_ref = VSfind(fid, "Vdata_1"); CHECK(vdata_ref, FAIL, "VSfind"); vdata_id = VSattach(fid, vdata_ref, "w"); CHECK(vdata_id, FAIL, "VSattach"); /* Test SDidtype on the vdata id */ id_type = SDidtype(vdata_id); VERIFY(id_type, NOT_SDAPI_ID, "SDidtype: id_type"); /* Terminate access to the vdata */ status = VSdetach(vdata_id); CHECK(status, FAIL, "VSdetach"); /* Terminate access to the Vxxx interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Test SDidtype on a GR raster image */ /* Open file and initialize the GR interface */ fid = Hopen(IDTYPE_FILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen: tidtype.hdf"); gr_id = GRstart(fid); CHECK(gr_id, FAIL, "GRstart"); /* Create an empty image with default fill value */ ri_id = GRcreate(gr_id, "Empty Image", 3, DFNT_FLOAT32, MFGR_INTERLACE_PIXEL, dims); CHECK(ri_id, FAIL, "GRcreate"); /* Test SDidtype on the GR raster image id */ id_type = SDidtype(ri_id); VERIFY(id_type, NOT_SDAPI_ID, "SDidtype: id_type"); /* Close the image */ status = GRendaccess(ri_id); CHECK(status, FAIL, "GRendaccess"); /* Shut down the GR interface and close the file */ status = GRend(gr_id); CHECK(status, FAIL, "GRend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_nonSDAPI_ids */ /**************************************************************************** * test_vdatavgroups - tests the API functions Vgetvgroups and VSgetvdatas. * - Create an SD file and several datasets * - Set attributes to some dimensions to promote them to coordinate * variables, which will be represented by internally created vgroups. * The datasets are also represented by internally created vgroups * - Close the file then re-open it with V API * - Create several vgroups and vdatas then close the file * - The file now contains beside the vgroups and vdatas previously created * by the application. * + a vgroup of class CDF0.0 to represent the SD file * + various vgroups of class "Var0.0" for SDSs and coordinate variables * + various vdatas of class "Dim0.0" for dimensions * + various vdatas of class "Attr0.0" for attributes * + and more * - Reopen the file using V API * - Verify that Vgetvgroups and VSgetvdatas return only the vgroups and * vdatas that were created by the application. * ****************************************************************************/ /* data file to test getting vgs/vds from an SD file */ #define VVS_FILE "tvdatasvgroups_SD.hdf" #define ATTR1_NAME "Valid_range 1" #define ATTR2_NAME "Unit" #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 #define NUM_VGS 3 #define NUM_VDS 1 static intn test_vdatavgroups() { int32 fid, dset1, dset2, dset3, dimid, vgroup_id, vdata_id; int32 num_allvdatas; intn num_vgroups, num_vdatas; int32 dimsize[RANK]; float32 att1_values[2] = {2., 10.}; char8 att2_values[] = "Seconds"; uint16 *refarray = NULL; uint16 name_len = 0; intn ii, status; char *vg_name = NULL, vd_name[10]; const char *check_vg_names[3] = {"Vgroup_1", "Vgroup_2", "Vgroup_3"}; const char *check_vd_names[1] = {"Vdata_1"}; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(VVS_FILE, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Create an X_LENGTH by Y_LENGTH dataset, called DataSet_1 */ dimsize[0] = X_LENGTH; dimsize[1] = Y_LENGTH; dset1 = SDcreate(fid, "DataSet_1", DFNT_INT32, RANK, dimsize); CHECK(dset1, FAIL, "SDcreate"); /* Set attribute to first dimension of first data set */ dimid = SDgetdimid(dset1, 0); CHECK(dimid, FAIL, "SDgetdimid"); status = SDsetattr(dimid, ATTR1_NAME, DFNT_FLOAT32, 2, (void *)att1_values); CHECK(status, FAIL, "SDsetattr"); /* Create another X_LENGTH by Y_LENGTH dataset, called DataSet_2 */ dset2 = SDcreate(fid, "DataSet_2", DFNT_FLOAT64, RANK, dimsize); CHECK(dset2, FAIL, "SDcreate"); /* Set attribute to second dimension of second data set */ dimid = SDgetdimid(dset2, 1); CHECK(dimid, FAIL, "SDgetdimid"); status = SDsetattr(dimid, ATTR2_NAME, DFNT_CHAR, 7, (void *)att2_values); CHECK(status, FAIL, "SDsetattr"); /* Create another X_LENGTH by Y_LENGTH dataset, called DataSet_2 */ dset3 = SDcreate(fid, "DataSet_3", DFNT_FLOAT64, RANK, dimsize); CHECK(dset3, FAIL, "SDcreate"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset3); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Open the HDF file and initialize the V interface */ fid = Hopen(VVS_FILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen: tidtype.hdf"); status = Vstart(fid); CHECK(status, FAIL, "Vstart"); /* num_allvgroups = Hnumber(fid, DFTAG_VG); CHECK(num_allvgroups, FAIL, "Hnumber"); keep for debugging only */ /* Get the number of user-created vgroups */ num_vgroups = Vgetvgroups(fid, 0, 0, NULL); CHECK(num_vgroups, FAIL, "Vgetvgroups"); VERIFY(num_vgroups, 0, "Vgetvgroups"); /* There are internally created vds because of attributes and dimensions */ num_allvdatas = Hnumber(fid, DFTAG_VH); CHECK(num_allvdatas, FAIL, "Hnumber"); CHECK(num_allvdatas, 0, "Hnumber"); /* so num_allvdatas shouldn't be 0 */ /* Get the number of user-created vdatas */ num_vdatas = VSgetvdatas(fid, 0, 0, NULL); CHECK(num_vdatas, FAIL, "VSgetvdatas"); VERIFY(num_vdatas, 0, "VSgetvdatas"); /* Create several vgroups and vdatas and give them a name */ vgroup_id = Vattach(fid, -1, "w"); CHECK(vgroup_id, FAIL, "Vattach"); status = Vsetname(vgroup_id, "Vgroup_1"); CHECK(status, FAIL, "Vsetname"); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); vgroup_id = Vattach(fid, -1, "w"); CHECK(vgroup_id, FAIL, "Vattach"); status = Vsetname(vgroup_id, "Vgroup_2"); CHECK(status, FAIL, "Vsetname"); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); vgroup_id = Vattach(fid, -1, "w"); CHECK(vgroup_id, FAIL, "Vattach"); status = Vsetname(vgroup_id, "Vgroup_3"); CHECK(status, FAIL, "Vsetname"); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); vdata_id = VSattach(fid, -1, "w"); CHECK(vdata_id, FAIL, "VSattach"); status = VSsetname(vdata_id, "Vdata_1"); CHECK(status, FAIL, "VSsetname"); status = VSdetach(vdata_id); CHECK(status, FAIL, "VSdetach"); /* Terminate access to the Vxxx interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Open the HDF file again to test Vgetvgroups */ fid = Hopen(VVS_FILE, DFACC_RDWR, 0); CHECK(fid, FAIL, "Hopen: tidtype.hdf"); status = Vstart(fid); CHECK(status, FAIL, "Vstart"); /* Get the number of user-created vgroups */ num_vgroups = Vgetvgroups(fid, 0, 0, NULL); CHECK(num_vgroups, FAIL, "Vgetvgroups"); VERIFY(num_vgroups, NUM_VGS, "Vgetvgroups"); /* Allocate sufficient memory to hold the list of user-created vg refs */ refarray = (uint16 *)malloc(sizeof(uint16) * num_vgroups); CHECK_ALLOC(refarray, "refarray", "test_vdatavgroups"); /* Now, get the user-created vgroup refs */ status = Vgetvgroups(fid, 0, num_vgroups, refarray); CHECK(status, FAIL, "Vgetvgroups"); VERIFY(status, num_vgroups, "Vgetvgroups"); /* Verify the name of these user-created vgroups */ for (ii = 0; ii < num_vgroups; ii++) { vgroup_id = Vattach(fid, refarray[ii], "r"); CHECK(vgroup_id, FAIL, "Vattach"); status = Vgetnamelen(vgroup_id, &name_len); CHECK(status, FAIL, "Vgetnamelen"); vg_name = (char *)malloc((sizeof(char) * name_len) + 1); CHECK_ALLOC(vg_name, "vg_name", "test_vdatavgroups"); status = Vgetname(vgroup_id, vg_name); CHECK(status, FAIL, "Vgetname"); VERIFY_CHAR(vg_name, check_vg_names[ii], ""); if (strncmp(vg_name, check_vg_names[ii], name_len) != 0) fprintf(stderr, "vg %d: name is %s, should be %s\n", ii, vg_name, check_vg_names[ii]); /* Release resource */ free(vg_name); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); } /* Release resource */ free(refarray); /* Get the number of user-created vdatas */ num_vdatas = VSgetvdatas(fid, 0, 0, NULL); CHECK(num_vdatas, FAIL, "VSgetvdatas"); VERIFY(num_vdatas, NUM_VDS, "VSgetvdatas"); /* Allocate sufficient memory to hold the list of user-created vd refs */ refarray = (uint16 *)malloc(sizeof(uint16) * (unsigned)num_vdatas); CHECK_ALLOC(refarray, "refarray", "test_vdatavgroups"); /* Now, get the user-created vdata refs */ status = VSgetvdatas(fid, 0, num_vdatas, refarray); CHECK(num_vdatas, FAIL, "VSgetvdatas"); VERIFY(status, num_vdatas, "VSgetvdatas"); /* Verify the name of these user-created vdatas */ for (ii = 0; ii < num_vdatas; ii++) { vdata_id = VSattach(fid, refarray[ii], "r"); CHECK(vdata_id, FAIL, "VSattach"); status = VSgetname(vdata_id, vd_name); CHECK(status, FAIL, "VSgetname"); VERIFY_CHAR(vd_name, check_vd_names[ii], ""); if (strncmp(vd_name, check_vd_names[ii], name_len) != 0) fprintf(stderr, "vd %d: name is %s, should be %s\n", ii, vd_name, check_vd_names[ii]); status = VSdetach(vdata_id); CHECK(status, FAIL, "VSdetach"); } /* Release resource */ free(refarray); /* Terminate access to the Vxxx interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_vdatavgroups */ /**************************************************************************** * test_vgisinternal - tests the API function Vgisinternal * - Use the existing files created by test_vdatavgroups * - Get the number of vgroups in the file * - For each vgroup, verify that it is internal or not * ****************************************************************************/ #define VVS_FILE "tvdatasvgroups_SD.hdf" #define GR_FILE "grtdfui83.hdf" static intn test_vgisinternal() { int32 fid, vgroup_id; intn is_internal = FALSE; int32 vref = -1; intn ii, status; char internal_array1[20] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE}; char internal_array2[9] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}; intn num_errs = 0; /* number of errors so far */ /* Open the HDF file and initialize the V interface */ fid = Hopen(VVS_FILE, DFACC_READ, 0); CHECK(fid, FAIL, "Hopen: tvdatasvgroups_SD.hdf"); status = Vstart(fid); CHECK(status, FAIL, "Vstart"); ii = 0; while ((vref = Vgetid(fid, vref)) != FAIL) { /* until no more vgroups */ vgroup_id = Vattach(fid, vref, "r"); /* attach to vgroup */ /* Test that the current vgroup is or is not internal as specified in the array */ is_internal = Vgisinternal(vgroup_id); CHECK(is_internal, FAIL, "Vgisinternal"); VERIFY(is_internal, internal_array1[ii], "Vgisinternal"); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); ii++; } /* Terminate access to the V interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Use a GR file to test Vgisinternal on internal vgroups */ /* Open the old HDF file and initialize the V interface */ fid = Hopen(IDTYPE_FILE, DFACC_READ, 0); CHECK(fid, FAIL, "Hopen: idtypes.hdf"); status = Vstart(fid); CHECK(status, FAIL, "Vstart"); ii = 0; while ((vref = Vgetid(fid, vref)) != FAIL) { /* until no more vgroups */ vgroup_id = Vattach(fid, vref, "r"); /* attach to vgroup */ /* Test that the current vgroup is or is not internal as specified in the array */ is_internal = Vgisinternal(vgroup_id); CHECK(is_internal, FAIL, "Vgisinternal"); VERIFY(is_internal, internal_array2[ii], "Vgisinternal"); status = Vdetach(vgroup_id); CHECK(status, FAIL, "Vdetach"); ii++; /* increment vgroup index */ } /* Terminate access to the V interface and close the file */ status = Vend(fid); CHECK(status, FAIL, "Vend"); status = Hclose(fid); CHECK(status, FAIL, "Hclose"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_vgisinternal */ /* Test driver for testing the API functions SDidtype, Vgetvgroups, VSgetvdatas, and Vgisinternal. */ extern int test_mixed_apis() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("a mix of SD, V, and VS functions (tmixed_apis.c)"); num_errs = num_errs + test_SDAPI_ids(); num_errs = num_errs + test_nonSDAPI_ids(); /* Test Vgetvgroups and VSgetvdatas */ num_errs = num_errs + test_vdatavgroups(); /* Test Vgisinternal */ num_errs = num_errs + test_vgisinternal(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tncunlim.c000066400000000000000000001107601503061704500170740ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tncunlim.c - tests reading/writing variables with unlimited dimension using * nc API. The tests here are added to test the behavior of the * library when dealing with unlimited dimensions via nc API. The * tests show that the data is correctly written/read when: * + data added immediately after last record * + data added skipping one or more records * + data overridden existing data * + data read pass the end of that variable but not the max in * all the variables in the file (on going) * * Structure of the file: * test_ncunlim - test driver * test_1dim_singlevar - tests on a single variable with only 1 dimension * test_1dim_multivars - tests on multiple variables with only 1 dimension * test_multidim_singlevar - tests on single variable with multiple dimensions * ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" /******************************************************************** Name: test_1dim_singlevar() - tests on a single variable with only 1 dimension Description: The main contents include: - write 4 elements starting at index 0 - append 2 elements starting at index 6, that is indices 4 and 5 will be written with fill value - append 3 elements immediately at the end of the data - overwrite indices 0 and 1 Return value: The number of errors occurred in this routine. *********************************************************************/ #define DIM0 20 #define FILENAME1 "onedimonevar.nc" static int test_1dim_singlevar() { int ncid; /* file id */ int varid; /* variable id */ int time_dim; /* unlimited dimension */ int dims[1]; /* variable shapes */ long dimsize = 0; /* dimension size buffer */ short outdata[DIM0]; /* data read back */ char varname[11]; /* variable name */ nc_type rh_type; /* variable type */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ int rh_natts; /* number of attributes */ int ii; short fillval = 99; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data; the first two elements will be changed to "1,2" later for the last test. */ short result[] = {320, 301, 301, 302, 99, 99, 30, 31, 801, 802, 803}; /* Enter define mode */ ncid = nccreate(FILENAME1, NC_CLOBBER); CHECK(ncid, -1, "nccreate"); /* Variables will be filled with fill values when data is missing */ status = ncsetfill(ncid, NC_FILL); CHECK(status, -1, "ncsetfill"); /* Define the unlimited dimension */ time_dim = ncdimdef(ncid, "time", NC_UNLIMITED); CHECK(status, -1, "ncdimdef"); /* Define the variable */ dims[0] = time_dim; varid = ncvardef(ncid, "Variable 1", NC_SHORT, 1, dims); CHECK(varid, -1, "ncvardef"); /* write the fill value attribute */ status = ncattput(ncid, varid, "_FillValue", NC_SHORT, 1, &fillval); CHECK(status, -1, "ncattput"); /* leave define mode */ status = ncendef(ncid); CHECK(status, -1, "ncendef"); { /* write data the first time */ long rh_start[] = {0}; /* starting writing at beginning, index 0 */ long rh_edges[] = {4}; /* four elements */ short data[] = {320, 301, 301, 302}; /* write 4 elements starting at index 0 */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get variable information and size of the unlimited dimension */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); /* Open file for reading and writing */ ncid = ncopen(FILENAME1, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Get access to the variable */ varid = ncvarid(ncid, "Variable 1"); CHECK(varid, -1, "ncvarid"); /* Get and verify variable info and size of the unlimited dimension again */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); { /* read and verify data of the variable */ long start[] = {0}; long edges[1]; edges[0] = dimsize; memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be "320 301 301 302" */ for (ii = 0; ii < dimsize; ii++) { if (outdata[ii] != result[ii]) fprintf(stderr, "test_1dim_singlevar: Read data %d doesn't match input %d at index %d\n", outdata[ii], result[ii], ii); } } /* end read data */ { /* Append data to variable pass the end */ long rh_start[] = {6}; /* the end is 3 */ long rh_edges[] = {2}; /* two elements */ short data[] = {30, 31}; /* write 2 values starting at index 6 */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get and verify variable info and size of the unlimited dimension again */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 8, "ncdiminq"); { /* read variable after appending with gap */ long start[] = {0}; long edges[1]; edges[0] = dimsize; memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be "320,301,301,302,99,99,30,31" where 99 is fillvalue */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result[ii]) fprintf(stderr, "test_1dim_singlevar: Read data %d doesn't match input %d at index %d\n", outdata[ii], result[ii], ii); } } /* end read data */ { /* write variable immediately pass the end */ long rh_start[] = {0}; long rh_edges[] = {3}; short data[] = {801, 802, 803}; rh_start[0] = dimsize; /* starting immediately pass dimension size */ /* write 3 elements to the variable starting at 'dimsize' */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get and verify variable info and size of the unlimited dimension */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 11, "ncdiminq"); { /* read variable */ long start[] = {0}; long edges[1]; edges[0] = dimsize; memset(outdata, 0, DIM0 + 2); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be "320,301,301,302,99,99,30,31,801,802,803" where 99 is fill value */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result[ii]) fprintf(stderr, "test_1dim_singlevar: Read data %d doesn't match input %d at index %d\n", outdata[ii], result[ii], ii); } } /* end read data */ { /* write variable to override current values */ long rh_start[] = {0}; /* starting at the beginning */ long rh_edges[] = {2}; /* two values */ short data[] = {1, 2}; /* write 2 elements overriding the first two values */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); /* change expected data too */ result[0] = 1; result[1] = 2; } /* Get and verify variable info and size of the unlimited dimension */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 11, "ncdiminq"); { /* read and verify data */ long start[] = {0}; long edges[1]; edges[0] = dimsize; memset(outdata, 0, DIM0 + 2); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be "1,2,301,302,99,99,30,31,801,802,803" where 99 is fill value, and first and second values are new */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result[ii]) fprintf(stderr, "test_1dim_singlevar: Read data %d doesn't match input %d at index %d\n", outdata[ii], result[ii], ii); } } /* end read data */ /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); return 0; } /* test_1dim_singlevar */ /******************************************************************** Name: test_1dim_multivars() - tests reading/writing on multiple variables, each has 1 dimension Description: The main contents include: - write 4 elements starting at index 0 to variable #1 - write 2 elements starting at index 0 to variable #2 - close file and reopen for read/write - append 2 elements to variable #1, immediately after last written record - write 3 elements to variable #2, starting at index 4 - append 3 elements to variable #1, skipping 5 records after the last written record Return value: The number of errors occurred in this routine. *********************************************************************/ #define FILENAME2 "onedimmultivars.nc" static int test_1dim_multivars() { int ncid; /* file id */ int varid1, varid2; /* variable id */ int time_dim; /* unlimited dimension */ int dims[1]; /* variable shapes */ long dimsize = 0; /* dimension size buffer */ short outdata[DIM0]; /* data read back */ char varname[11]; /* variable name */ nc_type rh_type; /* variable type */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ int rh_natts; /* number of attributes */ int ii; short var1_fillval = -1; /* fill value for the variable */ short var2_fillval = -2; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data; the first two elements will be changed to "1,2" later for the last test. */ short result1[] = {300, 301, 302, 303, 400, 401, -1, -1, -1, -1, -1, -1, 500, 501, 502}; short result2[] = {102, 104, -2, -2, 200, 201, 202, -2, -2, -2, -2, -2, -2, -2, -2}; /* Enter define mode */ ncid = nccreate(FILENAME2, NC_CLOBBER); CHECK(ncid, -1, "nccreate"); /* Variables will be filled with fill values when data is missing */ status = ncsetfill(ncid, NC_FILL); CHECK(status, -1, "ncsetfill"); /* Define the unlimited dimension */ time_dim = ncdimdef(ncid, "time", NC_UNLIMITED); CHECK(time_dim, -1, "ncdimdef"); /* Define two 1-dim variables, named "Variable 1" and "Variable 2" */ dims[0] = time_dim; varid1 = ncvardef(ncid, "Variable 1", NC_SHORT, 1, dims); CHECK(varid1, -1, "ncvardef"); varid2 = ncvardef(ncid, "Variable 2", NC_SHORT, 1, dims); CHECK(varid2, -1, "ncvardef"); /* write the fill value attribute of the two variables */ status = ncattput(ncid, varid1, "_FillValue", NC_SHORT, 1, &var1_fillval); CHECK(status, -1, "ncattput"); status = ncattput(ncid, varid2, "_FillValue", NC_SHORT, 1, &var2_fillval); CHECK(status, -1, "ncattput"); /* leave define mode */ status = ncendef(ncid); CHECK(status, -1, "ncendef"); { /* Write data to both variables */ long rh_start[] = {0}; long rh_edges[] = {4}; short data1[] = {300, 301, 302, 303}; short data2[] = {102, 104}; /* write 4 elements to Variable 1 starting at index 0 */ status = ncvarput(ncid, varid1, rh_start, rh_edges, (void *)data1); CHECK(status, -1, "ncvarput"); /* write 2 elements to Variable 2 starting at index 0 */ rh_edges[0] = 2; status = ncvarput(ncid, varid2, rh_start, rh_edges, (void *)data2); CHECK(status, -1, "ncvarput"); } /* Get Variable 1's information and size of the unlimited dimension */ status = ncvarinq(ncid, varid1, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); /* Get Variable 2's information and size of the unlimited dimension */ status = ncvarinq(ncid, varid2, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); /* Open file for reading and writing */ ncid = ncopen(FILENAME2, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Get access to the two variables */ varid1 = ncvarid(ncid, "Variable 1"); CHECK(varid1, -1, "ncvarid"); varid2 = ncvarid(ncid, "Variable 2"); CHECK(varid2, -1, "ncvarid"); /* Get Variable 1's information and size of the unlimited dimension */ status = ncvarinq(ncid, varid1, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); /* Get Variable 2's information and size of the unlimited dimension */ status = ncvarinq(ncid, varid2, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); { /* Read data of the variables */ long start[] = {0}; long edges[1]; edges[0] = dimsize; memset(outdata, 0, DIM0 * sizeof(short)); /* Read and verify data of Variable 1 */ status = ncvarget(ncid, varid1, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* Verify data of Variable 1, should be "320 301 301 302" */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result1[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 1\n", outdata[ii], result1[ii], ii); } /* Read and verify data of Variable 2 */ edges[0] = 2; /* only reading what written to this variable so far */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid2, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* Verify data of Variable 2, should be "102 104" */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result2[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 2\n", outdata[ii], result2[ii], ii); } /* Try to read again but up to the max number of records, 4 in this case because the other variable in the file has 4 elements written */ edges[0] = dimsize; memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid2, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* Verify data of Variable 2, should be "102 104 -2 -2" */ for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result2[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 2\n", outdata[ii], result2[ii], ii); } } /* end read data */ { /* Write to variable immediately after last written record */ long rh_start[] = {0}; long rh_edges[] = {2}; short data2[] = {400, 401}; /* Write 2 elements to Variable 1 at index 'dimsize' */ rh_start[0] = dimsize; status = ncvarput(ncid, varid1, rh_start, rh_edges, (void *)data2); CHECK(status, -1, "ncvarput"); } /* Get information of Variable 1 and size of the unlimited dimension */ status = ncvarinq(ncid, varid1, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 6, "ncdiminq"); { /* Read variables */ long start[] = {0}; long edges[] = {0}; /* Current data of Variable 2 should look like this, because of the extension with fill value to match the max number of records in the file */ short tempresult[] = {102, 104, -2, -2, -2, -2}; /* Read up to max number of records in the file */ edges[0] = dimsize; /* Read and verify data of Variable 1 */ /* read data should be: 300 301 302 303 400 401 */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid1, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result1[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 1\n", outdata[ii], result1[ii], ii); } /* Read and verify data of Variable 2 */ /* read data should be: 102 104 -2 -2 -2 -2 */ edges[0] = 2; memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid2, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != tempresult[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 2\n", outdata[ii], result2[ii], ii); } } /* end read data */ { /* Append to variable with gap */ long rh_start[] = {4}; long rh_edges[] = {3}; short data2[] = {200, 201, 202}; /* Write 3 elements to Variable 2 at index 4 */ status = ncvarput(ncid, varid2, rh_start, rh_edges, (void *)data2); CHECK(status, -1, "ncvarget"); } /* Get variable information and size of the unlimited dimension */ status = ncvarinq(ncid, varid2, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 7, "ncdiminq"); { /* Read both variables */ long start[] = {0}; long edges[1]; edges[0] = dimsize - 1; /* Read and verify data of Variable 1 */ /* read data should be: 300 301 302 303 400 401 -1 */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid1, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result1[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 1\n", outdata[ii], result1[ii], ii); } /* Read and verify data of Variable 1 */ /* read data should be: 102 104 -2 -2 200 201 202 */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid2, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result2[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 2\n", outdata[ii], result2[ii], ii); } } /* end read data */ { /* Append to a variable, with gap */ long rh_start[] = {0}; long rh_edges[] = {3}; short data2[] = {500, 501, 502}; rh_start[0] = dimsize + 5; /* Write 3 elements to Variable 1 at index 'dimsize+5', leaving a gap of 5 records that will be filled with fill value */ status = ncvarput(ncid, varid1, rh_start, rh_edges, (void *)data2); CHECK(status, -1, "ncvarput"); /* data now: 300 301 302 303 400 401 -1 -1 -1 -1 -1 -1 500 501 502 */ } /* Get variable information and size of the unlimited dimension */ status = ncvarinq(ncid, varid2, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 15, "ncdiminq"); { /* Read both variables */ long start[] = {0}; long edges[1]; edges[0] = dimsize; /* Read and verify data of Variable 1; read data should be: */ /* 300 301 302 303 400 401 -1 -1 -1 -1 -1 -1 500 501 502 */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid1, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result1[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 1\n", outdata[ii], result1[ii], ii); } /* Read and verify data of Variable 2; read data should be: */ /* 102 104 -2 -2 200 201 202 -2 -2 -2 -2 -2 -2 -2 -2 */ memset(outdata, 0, DIM0 * sizeof(short)); status = ncvarget(ncid, varid2, start, edges, outdata); CHECK(status, -1, "ncvarget"); for (ii = 0; ii < edges[0]; ii++) { if (outdata[ii] != result2[ii]) fprintf( stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d in Variable 2\n", outdata[ii], result2[ii], ii); } } /* end read data */ #if 0 /* The following test is to verify that attempting to read pass the maximum number of records in the file will fail. However, because ncvarget leads to the internal function NCcoordck which uses NCadvise to display the error and exit() so the test is disabled but the code should remain here for future testing. */ { /* Read both variables pass the end by 2 records, should fail */ long start[] = {0}; long edges[1]; edges[0] = dimsize + 2; /* read data of Variable 1; should fail */ memset(outdata, 0, DIM0); status = ncvarget(ncid, varid1, start, edges, outdata); VERIFY(status, -1, "ncvarget"); /* read data of Variable 1; should fail */ memset(outdata, 0, DIM0); status = ncvarget(ncid, varid2, start, edges, outdata); VERIFY(status, -1, "ncvarget"); } /* end read data */ #endif /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); return num_errs; } /* test_1dim_multivars */ /******************************************************************** Name: test_multidim_singlevar() - tests on a single variable with more than one dimension Description: The main contents include: - create a 3-D variable with 1 unlimited dimension and the others 3x2 - write 4x1x1 elements starting at index {0,0,0} - append 2x1x1 elements along the unlimited dimension starting at index 6, that is slabs at indices 4 and 5 will be written with fill value - append 1x3x2 elements immediately at the end of the data Return value: The number of errors occurred in this routine. *********************************************************************/ #define DIM1 3 #define DIM2 2 #define FILENAME3 "multidimvar.nc" static int test_multidim_singlevar() { int ncid; /* file id */ int varid; /* variable id */ int time_dim; /* unlimited dimension */ int dim1, dim2; /* other dimension ids */ int dims[3]; /* variable shapes */ long dimsize = 0, /* unlimited dimension size */ dimsize1 = 0, dimsize2 = 0; /* other dimension sizes */ short outdata[DIM0][DIM1][DIM2]; /* data read back */ char varname[12]; /* variable name */ nc_type rh_type; /* variable type */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ int rh_natts; /* number of attributes */ int ii, jj, kk; short fillval = -3; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data; the first two elements will be changed to "1,2" later for the last test. */ short result[DIM0][DIM1][DIM2] = {{{300, -3}, {-3, -3}, {-3, -3}}, {{301, -3}, {-3, -3}, {-3, -3}}, {{302, -3}, {-3, -3}, {-3, -3}}, {{303, -3}, {-3, -3}, {-3, -3}}, {{-3, -3}, {-3, -3}, {-3, -3}}, {{-3, -3}, {-3, -3}, {-3, -3}}, {{400, -3}, {-3, -3}, {-3, -3}}, {{401, -3}, {-3, -3}, {-3, -3}}, {{800, 801}, {802, 803}, {804, 805}}}; /* Enter define mode */ ncid = nccreate(FILENAME3, NC_CLOBBER); CHECK(ncid, -1, "nccreate"); /* variables will be filled with fill values when data is missing */ status = ncsetfill(ncid, NC_FILL); CHECK(status, -1, "ncsetfill"); /* Define the unlimited dimension */ time_dim = ncdimdef(ncid, "time", NC_UNLIMITED); CHECK(status, -1, "ncdimdef"); dim1 = ncdimdef(ncid, "dimension 1", 3L); CHECK(dim1, -1, "ncdimdef"); dim2 = ncdimdef(ncid, "dimension 2", 2L); CHECK(dim2, -1, "ncdimdef"); /* Define the variable */ dims[0] = time_dim; dims[1] = dim1; dims[2] = dim2; varid = ncvardef(ncid, "Variable 3D", NC_SHORT, 3, dims); CHECK(varid, -1, "ncvardef"); /* Write the fill value attribute */ status = ncattput(ncid, varid, "_FillValue", NC_SHORT, 1, &fillval); CHECK(status, -1, "ncattput"); /* Leave define mode */ status = ncendef(ncid); CHECK(status, -1, "ncendef"); { /* Write data the first time */ long rh_start[] = {0, 0, 0}; /* starting writing at beginning */ long rh_edges[] = {4, 1, 1}; /* 4x1x1 slab */ short data[] = {300, 301, 302, 303}; /* Write 4 elements starting at index 0 */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get variable information and size of the unlimited dimension */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); /* Open file for reading and writing */ ncid = ncopen(FILENAME3, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Get access to the variable */ varid = ncvarid(ncid, "Variable 3D"); CHECK(varid, -1, "ncvarid"); /* Get and verify variable info and size of the unlimited dimension again */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 4, "ncdiminq"); status = ncdiminq(ncid, rh_dims[1], 0, &dimsize1); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize1, DIM1, "ncdiminq"); status = ncdiminq(ncid, rh_dims[2], 0, &dimsize2); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize2, DIM2, "ncdiminq"); { /* Read and verify data of the variable */ long start[] = {0, 0, 0}; long edges[] = {0, DIM1, DIM2}; edges[0] = dimsize; memset(outdata, 0, DIM0 * DIM1 * DIM2); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* Verify data, should be: 300 -3 301 -3 302 -3 303 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 unlimited dimension ----> (-3 is fill value) */ for (ii = 0; ii < edges[0]; ii++) for (jj = 0; jj < DIM1; jj++) for (kk = 0; kk < DIM2; kk++) if (outdata[ii][jj][kk] != result[ii][jj][kk]) fprintf(stderr, "test_multidim_singlevar: Read data %d doesn't match input %d at indices " "%d,%d,%d\n", outdata[ii][jj][kk], result[ii][jj][kk], ii, jj, kk); } /* end read data */ { /* Append data to variable pass the end */ long rh_start[] = {6, 0, 0}; /* the end is 3 */ long rh_edges[] = {2, 1, 1}; /* two slabs */ short data[] = {400, 401}; /* Write 2 values starting at index 6 */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get and verify variable info and size of the unlimited dimension again */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 8, "ncdiminq"); { /* Read variable after appending with gap */ long start[] = {0, 0, 0}; long edges[] = {0, DIM1, DIM2}; edges[0] = dimsize; memset(outdata, 0, DIM0 * DIM1 * DIM2); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be 300 -3 301 -3 302 -3 303 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... ... -3 -3 -3 -3 400 -3 401 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 unlimited dimension ----> (-3 is fill value) */ for (ii = 0; ii < edges[0]; ii++) for (jj = 0; jj < DIM1; jj++) for (kk = 0; kk < DIM2; kk++) if (outdata[ii][jj][kk] != result[ii][jj][kk]) fprintf(stderr, "test_multidim_singlevar: Read data %d doesn't match input %d at indices " "%d,%d,%d\n", outdata[ii][jj][kk], result[ii][jj][kk], ii, jj, kk); } /* end read data */ { /* Write variable immediately pass the end */ long rh_start[] = {0, 0, 0}; /* the end is 3 */ long rh_edges[] = {1, 3, 2}; /* two elements */ short data[] = {800, 801, 802, 803, 804, 805}; rh_start[0] = dimsize; /* starting immediately pass dimension size */ /* Write 3 elements to the variable starting at 'dimsize' */ status = ncvarput(ncid, varid, rh_start, rh_edges, (void *)data); CHECK(status, -1, "ncvarput"); } /* Get and verify variable info and size of the unlimited dimension */ status = ncvarinq(ncid, varid, varname, &rh_type, &rh_ndims, rh_dims, &rh_natts); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], 0, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, 9, "ncdiminq"); { /* read variable */ long start[] = {0, 0, 0}; long edges[] = {0, DIM1, DIM2}; edges[0] = dimsize; memset(outdata, 0, DIM0 * DIM1 * DIM2); status = ncvarget(ncid, varid, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be 300 -3 301 -3 302 -3 303 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... ... -3 -3 -3 -3 400 -3 401 -3 800 801 ... -3 -3 -3 -3 -3 -3 -3 -3 802 803 ... -3 -3 -3 -3 -3 -3 -3 -3 804 805 unlimited dimension ----> (-3 is fill value) */ for (ii = 0; ii < edges[0]; ii++) for (jj = 0; jj < DIM1; jj++) for (kk = 0; kk < DIM2; kk++) if (outdata[ii][jj][kk] != result[ii][jj][kk]) fprintf(stderr, "test_multidim_singlevar: Read data %d doesn't match input %d at indices " "%d,%d,%d\n", outdata[ii][jj][kk], result[ii][jj][kk], ii, jj, kk); } /* end read data */ /* Close file */ status = ncclose(ncid); CHECK(status, -1, "ncclose"); return 0; } /* Test driver for testing reading/writing variables with unlimited dimension using nc API. */ extern int test_ncunlim() { int num_errs = 0; /* Output message about test being performed */ TESTING("read/write variables with unlimited dims via nc API (tncunlim.c)"); /* Test single variable with 1 unlimited dimension */ num_errs = num_errs + test_1dim_singlevar(); /* Test multiple variables with 1 unlimited dimension */ num_errs = num_errs + test_1dim_multivars(); /* Test multiple variables with multiple dimensions */ num_errs = num_errs + test_multidim_singlevar(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tncvargetfill.c000066400000000000000000000773731503061704500201230ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tncvargetfill.c - tests that ncvarget fills user buffers with fill-values * where data is not present. * The tests show that the fill-values are filled correctly in * the following situations: * + reading passed written data of a variable but still less * than the maximum number of records in the file * + reading passed the maximum number of records in the file * * Structure of the file: * test_vargetfill - test driver * test_1dim_multivars - tests on multiple variables with only 1 dimension * test_multidims - tests on variables with multiple dimensions * test_readings - tests reading passed written data and max number * of records in the file. * ****************************************************************************/ #include #include #include "mfhdf.h" #include "hdftest.h" /* Used to declare a larger buffer for when attempting to read past the maximum number of records in the file */ #define DIM0 20 /******************************************************************** Name: test_1dim_multivars() - tests reading/writing on multiple variables, each has 1 dimension Description: The main contents include: - write 4 elements to var #1, starting at index 0 - write 2 elements to var #2, starting at index 0 - add 2 more elements to var #1, starting at idx 6, skipping 2 elems - close file and reopen for using nc API - read var #1, data should show fill-values are in the skipping elems - read var #2, data should show all fill-values after first 2 elems written previously, until idx 6, which is the max numrecs in the file Return value: The number of errors occurred in this test. *********************************************************************/ #define FILENAME1 "onedimmultivars.hdf" #define SDS1_NAME "Variable 1" #define SDS2_NAME "Variable 2" #define D1_NUMRECS 8 #define D2_NUMRECS 2 /* * Helper function: Read and verify data of the variables with nc API */ static int read_verify_nc_api_1dim(void) { long start[1]; /* where to start reading */ long edges[1]; /* length of data to be read */ int ncid; /* file id */ int var1id, var2id; /* variable ids */ long dimsize = 0; /* dimension size buffer */ short outdata[DIM0]; /* data read back */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ char varname[H4_MAX_NC_NAME]; /* variable name */ int16 ncresult1[] = {300, 301, 302, 303, -1, -1, 306, 307}; /* same as sd result */ int16 ncresult2[] = {102, 104, -2, -2, -2, -2, -2, -2}; int status = 0; /* returned by called functions */ int num_errs = 0; /* number of errors so far */ /* Open the file for reading and writing with nc API */ ncid = ncopen(FILENAME1, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Verify variable info and data of first variable */ /* Get access to the first variable, named SDS1_NAME */ var1id = ncvarid(ncid, SDS1_NAME); CHECK(var1id, -1, "ncvarid"); /* Get and verify variable info and size of the unlim dimension again */ status = ncvarinq(ncid, var1id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], NULL, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, D1_NUMRECS, "ncdiminq"); /* Read the entire variable */ start[0] = 0; edges[0] = dimsize; memset(outdata, 0, edges[0]); status = ncvarget(ncid, var1id, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* Verify data, should be as ncresult1: 300 301 301 302 -1 -1 306 307 */ for (int i = 0; i < dimsize; i++) { if (outdata[i] != ncresult1[i]) fprintf(stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d\n", outdata[i], ncresult1[i], i); } /* Verify variable info and data of second variable */ /* Get access to the second variable, named SDS2_NAME */ var2id = ncvarid(ncid, SDS2_NAME); CHECK(var2id, -1, "ncvarid"); /* Get and verify variable info and size of the unlim dimension again */ status = ncvarinq(ncid, var2id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], NULL, &dimsize); CHECK(status, -1, "ncdiminq"); VERIFY(dimsize, D1_NUMRECS, "ncdiminq"); /* Note: only 2 written, but netCDF uses the max number of records in the file for all unlim dims in the file */ start[0] = 0; edges[0] = dimsize; memset(outdata, 0, edges[0]); status = ncvarget(ncid, var2id, start, edges, outdata); CHECK(status, -1, "ncvarget"); /* verify data, should be as in ncresult2: "102 104 -2 -2 -2 -2" */ for (int i = 0; i < dimsize; i++) { if (outdata[i] != ncresult2[i]) fprintf(stderr, "test_1dim_multivars: Read data %d doesn't match input %d at index %d\n", outdata[i], ncresult2[i], i); } status = ncclose(ncid); CHECK(status, -1, "ncclose"); return num_errs; } /* end read data */ static int test_1dim_multivars() { int32 fid; /* file id */ int32 dset1, dset2; /* dataset ids */ int32 dimsizes[1]; /* dimension size buffer */ int32 start[1], /* where to start writing */ edges[1]; /* length of data to be read/written */ int32 rank = 1; /* rank of the 1-D data sets */ int16 fillval1 = -1; /* fill value for the variable */ int16 fillval2 = -2; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ int16 sdresult1[] = {300, 301, 302, 303, -1, -1, 306, 307}; int16 sdresult2[] = {102, 104}; /* Create a new file */ fid = SDstart(FILENAME1, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define an unlimited dimension and rank for the data sets */ dimsizes[0] = SD_UNLIMITED; rank = 1; /* Create two 1-D array data sets */ dset1 = SDcreate(fid, SDS1_NAME, DFNT_INT16, rank, dimsizes); CHECK(dset1, FAIL, "SDcreate"); dset2 = SDcreate(fid, SDS2_NAME, DFNT_INT16, rank, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Data sets will be filled with fill-values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval1); CHECK(status, FAIL, "SDsetfillvalue"); status = SDsetfillvalue(dset2, (void *)&fillval2); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data */ int16 data[] = {300, 301, 302, 303}; int16 appdata[] = {306, 307}; int16 data2[] = {102, 104}; /* Write 4 elements to first data set starting at index 0 */ start[0] = 0; edges[0] = 4; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Write 2 elements to second data set starting at index 0 */ start[0] = 0; edges[0] = 2; status = SDwritedata(dset2, start, NULL, edges, (void *)data2); CHECK(status, FAIL, "SDwritedata"); /* Add 2 more elements to first dataset starting at index 6, i.e., skipping 2 elements, which will be filled with fill-values. */ start[0] = 6; edges[0] = 2; status = SDwritedata(dset1, start, NULL, edges, (void *)appdata); CHECK(status, FAIL, "SDwritedata"); } /* Get info of the first data set, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset1, D1_NUMRECS, sdresult1); /* Get info of the second dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset2, D2_NUMRECS, sdresult2); /* Close the data sets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Read and verify the data through the netCDF API */ status = read_verify_nc_api_1dim(); CHECK(status, -1, "read_verify_nc_api_1dim"); return num_errs; } /* test_1dim_multivars */ /******************************************************************** Name: test_multidims() - tests on variables with more than one dimension Description: The main contents include: - create a 3-D variable, named VAR3D, with the first dimension unlimited and the others have sizes 3x2 - create 2 1-D variables, named VAR1D and VAREMPTY, both have UDim - write 4x1x1 elements to VAR3D, starting at index {0,0,0} - write 4 elements to VAR1D starting at index 2 - close and reopen the file - append 1x3x2 elements along the unlimited dimension starting at index {7,0,0}, i.e., slabs at indices 4, 5 and 6 will be written with fill-value - create another 1-D variable, named VARDOZEN, and write 12 values to it -> 12 became the new max number of records in the file - close and reopen the file in nc API - read and verify VAR3D, its buffer should have fill-values between elements 9-12 - read and verify VAR1D, its buffer should have fill-values after the 6th element - read and verify VAREMPTY, its buffer should contain all 12 fill-values Return value: The number of errors occurred in this routine. *********************************************************************/ #define DIM00 10 #define DIM1 3 #define DIM2 2 #define RANK3 3 #define RANK1 1 #define MAX_NUMRECS 12 #define FILENAME2 "multidimmixed.hdf" #define VAR3D "Variable 3D" #define VAR1D "Variable 1D" #define VAREMPTY "Variable EMPTY" #define VARDOZEN "Variable Dozen Records" /* * Helper function: Read and verify data of the variables with nc API */ static int read_verify_nc_api_multidims(void) { long start[3]; long edges[3]; int ncid; /* file id */ int var1id, var2id, var3id; /* variable ids */ long dims[3]; /* dimension size buffer */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ char varname[H4_MAX_NC_NAME]; /* variable name */ int16 outdata1D[DIM0]; /* 1-D data read back */ int16 outdata3D[DIM0][DIM1][DIM2]; /* 3-D data read back */ int status = 0; /* returned by called functions */ int num_errs = 0; /* number of errors so far */ /* After the fourth data set (VARDOZEN) was added, the maximum number of records became 12. Thus, the results must be changed to reflect the behavior in nc API. */ /* clang-format off */ int16 result3D[DIM0][DIM1][DIM2] = { {{300, -3}, { -3, -3}, { -3, -3}}, {{301, -3}, { -3, -3}, { -3, -3}}, {{302, -3}, { -3, -3}, { -3, -3}}, {{303, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{800, 801}, {802, 803}, {804, 805}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}} }; /* clang-format on */ int16 ncresult1D[] = {-1, -1, 300, 301, 302, 303, -1, -1, -1, -1, -1, -1}; int16 ncresult1Ddozen[] = {-10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10}; /* Open the file with nc API */ ncid = ncopen(FILENAME2, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Verify variable info and data of first data set */ /* Get access to the variable VAR3D */ var1id = ncvarid(ncid, VAR3D); CHECK(var1id, -1, "ncvarid"); /* Get variable info */ status = ncvarinq(ncid, var1id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); VERIFY(rh_ndims, RANK3, "ncvarinq"); for (int i = 0; i < rh_ndims; i++) { status = ncdiminq(ncid, rh_dims[i], NULL, &dims[i]); CHECK(status, -1, "ncdiminq"); /* Initialize parameters for reading data */ edges[i] = dims[i]; start[i] = 0; } /* Verify that the current unlimited dimension is MAX_NUMRECS */ VERIFY(dims[0], MAX_NUMRECS, "ncdiminq"); /* Get data */ memset(outdata3D, 0, edges[0] * edges[1] * edges[2] * sizeof(int16)); status = ncvarget(ncid, var1id, start, edges, outdata3D); CHECK(status, -1, "ncvarget"); /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata3D, result3D, edges[0] * edges[1] * edges[2] * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* Verify variable info and data of second data set */ /* Get access to the second variable VAR1D */ var2id = ncvarid(ncid, VAR1D); CHECK(var2id, -1, "ncvarid"); /* Get and verify variable info */ status = ncvarinq(ncid, var2id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], NULL, &dims[0]); CHECK(status, -1, "ncdiminq"); VERIFY(dims[0], MAX_NUMRECS, "ncdiminq"); /* Note: only written up to 6th element, but netCDF uses the max number of records in the file, which is currently 12, due to data set VARDOZEN */ /* Get data */ edges[0] = dims[0]; memset(outdata1D, 0, edges[0] * sizeof(int16)); status = ncvarget(ncid, var2id, start, edges, outdata1D); CHECK(status, -1, "ncvarget"); /* Verify data, should be "-1,-1,300,301,302,303,-1,-1,-1,-1,-1,-1". The first two -1s are due to the skipped elements by SDwritedata. The last six -1s are added by nc API to match the max numrecs in the file. */ for (int i = 0; i < dims[0]; i++) { if (outdata1D[i] != ncresult1D[i]) fprintf(stderr, "test_1dims: at line %d- Read data %d doesn't match input %d at index %d\n", __LINE__, outdata1D[i], ncresult1D[i], i); } /* Get access to the second variable */ var3id = ncvarid(ncid, VAREMPTY); CHECK(var3id, -1, "ncvarid"); /* Get and verify variable info */ status = ncvarinq(ncid, var3id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], NULL, &dims[0]); CHECK(status, -1, "ncdiminq"); VERIFY(dims[0], MAX_NUMRECS, "ncdiminq"); /* Note: no data written, but netCDF uses the max number of records in the file for all unlim dims in the file */ /* Get data */ start[0] = 0; edges[0] = dims[0]; memset(outdata1D, 0, edges[0] * sizeof(int16)); status = ncvarget(ncid, var3id, start, edges, outdata1D); CHECK(status, -1, "ncvarget"); /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata1D, ncresult1Ddozen, edges[0] * sizeof(int16)); VERIFY(status, 0, "memcmp"); status = ncclose(ncid); CHECK(status, -1, "ncclose"); return num_errs; } /* end read data with nc API */ static int test_multidims() { int32 fid; /* file id */ int32 dset1, dset2, dset3; /* dataset ids */ int32 dset_index; /* dataset index */ int32 dimsizes3D[3]; /* dimension size buffer for first SDS */ int32 dimsize1D[1]; /* dimension size buffer for second SDS */ int32 start[3], /* where to start reading */ edges[3]; /* length of data to be read */ int16 outdata3D[DIM0][DIM1][DIM2]; /* 3-D data read back */ int16 outdata1D[DIM0]; /* 1-D data read back */ int16 *outdata3; /* for dynamically allocated buffer */ int16 fillval1 = -3; /* fill value for the 3-D variable */ int16 fillval2 = -1; /* fill value for the 1-D variable */ int16 fillval3 = -10; /* fill value for the 1-D variable */ int status = 0; /* returned by called functions */ int num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ /* clang-format off */ int16 result3D[DIM00][DIM1][DIM2] = { {{300, -3}, { -3, -3}, { -3, -3}}, {{301, -3}, { -3, -3}, { -3, -3}}, {{302, -3}, { -3, -3}, { -3, -3}}, {{303, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{ -3, -3}, { -3, -3}, { -3, -3}}, {{800, 801}, {802, 803}, {804, 805}} }; /* clang-format on */ int16 sdresult1D[] = {-1, -1, 300, 301, 302, 303}; /* Create a new file */ fid = SDstart(FILENAME2, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define dimensions of the data sets to be created */ dimsizes3D[0] = SD_UNLIMITED; dimsizes3D[1] = DIM1; dimsizes3D[2] = DIM2; dimsize1D[0] = SD_UNLIMITED; /* Create array data sets */ dset1 = SDcreate(fid, VAR3D, DFNT_INT16, RANK3, dimsizes3D); /* 3-D */ CHECK(dset1, FAIL, "SDcreate"); dset2 = SDcreate(fid, VAR1D, DFNT_INT16, RANK1, dimsize1D); /* 1-D */ CHECK(dset2, FAIL, "SDcreate"); dset3 = SDcreate(fid, VAREMPTY, DFNT_INT16, RANK1, dimsize1D); /* 1-D */ CHECK(dset3, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval1); CHECK(status, FAIL, "SDsetfillvalue"); status = SDsetfillvalue(dset2, (void *)&fillval2); CHECK(status, FAIL, "SDsetfillvalue"); status = SDsetfillvalue(dset3, (void *)&fillval3); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data to first data set */ int16 data[] = {300, 301, 302, 303}; /* Write 4 elements starting at index 0 */ start[0] = start[1] = start[2] = 0; /* starting writing at {0,0,0} */ edges[0] = 4; /* 4x1x1 slab */ edges[1] = 1; edges[2] = 1; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ status = SDgetinfo(dset1, NULL, NULL, dimsizes3D, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(dimsizes3D[0], 4, "SDgetinfo"); /* Read and verify data of the dataset */ start[0] = start[1] = start[2] = 0; edges[0] = dimsizes3D[0]; edges[1] = dimsizes3D[1]; edges[2] = dimsizes3D[2]; outdata3 = (int16 *)calloc(edges[0] * edges[1] * edges[2], sizeof(int16)); CHECK_ALLOC(outdata3, "outdata3", "test_multidims"); status = SDreaddata(dset1, start, NULL, edges, (void *)outdata3); CHECK(status, FAIL, "SDreaddata"); /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata3, result3D, edges[0] * edges[1] * edges[2] * sizeof(int16)); VERIFY(status, 0, "memcmp"); free(outdata3); { /* Add data to second data set, i.e. 1-D var */ int16 data[] = {300, 301, 302, 303}; /* Write 4 elements starting at index 2 */ start[0] = 2; /* skip first two elements */ edges[0] = 4; /* write 4 elements */ status = SDwritedata(dset2, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Close the data sets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset3); CHECK(status, FAIL, "SDendaccess"); status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Reopen file and first data set, VAR3D */ fid = SDstart(FILENAME2, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); dset_index = SDnametoindex(fid, VAR3D); CHECK(dset_index, FAIL, "SDnametoindex"); dset1 = SDselect(fid, dset_index); CHECK(dset1, FAIL, "SDselect"); /* Append data to the dataset past the end */ { int16 data[] = {800, 801, 802, 803, 804, 805}; start[0] = 7; start[1] = start[2] = 0; /* writing at {7,0,0} */ edges[0] = 1; edges[1] = DIM1; edges[2] = DIM2; /* Write 1 slab starting at index 7 */ status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* VAR3D now has 8 (D1_NUMRECS) records */ /* Get information of the dataset, and verify its dimension */ status = SDgetinfo(dset1, NULL, NULL, dimsizes3D, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(dimsizes3D[0], D1_NUMRECS, "SDgetinfo"); /* Read and verify data of the dataset */ start[0] = start[1] = start[2] = 0; edges[0] = dimsizes3D[0]; edges[1] = dimsizes3D[1]; edges[2] = dimsizes3D[2]; status = SDreaddata(dset1, start, NULL, edges, (void *)outdata3D); CHECK(status, FAIL, "SDreaddata"); /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata3D, result3D, edges[0] * edges[1] * edges[2] * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* Data should be 300 -3 301 -3 302 -3 303 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... ... -3 -3 -3 -3 -3 -3 800 801 ... -3 -3 -3 -3 -3 -3 802 803 ... -3 -3 -3 -3 -3 -3 804 805 unlimited dimension ----> (-3 is fill value) */ /* Reopen the 1-D dataset VAR1D */ dset_index = SDnametoindex(fid, VAR1D); CHECK(dset_index, FAIL, "SDnametoindex"); dset2 = SDselect(fid, dset_index); CHECK(dset2, FAIL, "SDselect"); /* Read and verify data of the dataset. Data should be: -1 -1 300 301 302 303 */ start[0] = 0; edges[0] = dimsize1D[0]; status = SDreaddata(dset2, start, NULL, edges, (void *)outdata1D); CHECK(status, FAIL, "SDreaddata"); /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata1D, sdresult1D, edges[0] * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Create the fourth data set, named VARDOZEN and with unlimited dimension. This data set will have more records than the current number of records in the file. */ dimsize1D[0] = SD_UNLIMITED; dset1 = SDcreate(fid, VARDOZEN, DFNT_INT16, RANK1, dimsize1D); CHECK(dset1, FAIL, "SDcreate"); { /* Write data to the fourth dataset, exceeding the current number of records in the file */ int16 data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; /* Write 12 elements starting at index 0 */ start[0] = 0; edges[0] = 12; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* This number of elements will cause the nc number of records to be 12. */ /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Read and verify the data through the netCDF API */ status = read_verify_nc_api_multidims(); CHECK(status, -1, "read_verify_nc_api_multidims"); return num_errs; } /*************************************************************************** Name: test_readings() - tests reading passed actually written data and then passed the maximum number of records in the file with nc API. Description: - open the file and data sets using nc API - read VAR3D passing actually written data, then verify that data is read and fill-values are filled correctly - read VAR3D passing the max number of records, and function will fail - do the same for VAR1D Return value: The number of errors occurred in this test. *********************************************************************/ static int test_readings(long max_numrecs) { int ncid; /* file id */ int var1id, var2id; /* variable ids */ long start[3]; long edges[3]; long dims[3]; /* dimension size buffer */ int rh_ndims; /* number of dims */ int rh_dims[H4_MAX_VAR_DIMS]; /* variable shape */ char varname[H4_MAX_NC_NAME]; /* variable name */ int16 outdata3D[DIM0][DIM1][DIM2]; /* 3-D data read back */ int16 outdata1D[DIM0]; /* 1-D data read back */ int32 dimsizes3D[3]; /* dimension size buffer for first SDS */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ /* data resulted from reading at start=[4,0,0] for edges=[6,1,1] */ int16 result3D_start400_edge611[6] = {-3, -3, -3, 800, -3, -3}; /* Open the file for reading and writing with nc API */ ncid = ncopen(FILENAME2, NC_RDWR); CHECK(ncid, -1, "ncopen"); /* Verify variable info and data of first data set */ /* Get access to the variable VAR3D */ var1id = ncvarid(ncid, VAR3D); CHECK(var1id, -1, "ncvarid"); /* Initialize dimensions to compare */ dimsizes3D[0] = max_numrecs; dimsizes3D[1] = DIM1; dimsizes3D[2] = DIM2; /* Get variable dimensions */ status = ncvarinq(ncid, var1id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); VERIFY(rh_ndims, RANK3, "ncvarinq"); for (int i = 0; i < rh_ndims; i++) { status = ncdiminq(ncid, rh_dims[i], NULL, &dims[i]); CHECK(status, -1, "ncdiminq"); VERIFY(dims[i], dimsizes3D[i], "ncdiminq"); /* Initialize parameters for reading data */ edges[i] = dims[i]; start[i] = 0; } /* Data written by SD API: {300,-3,-3,-3,-3,-3, 301,-3,-3,-3,-3,-3, 302,-3,-3,-3,-3,-3, 303,-3,-3,-3,-3,-3, -3,-3,-3,-3,-3,-3, -3,-3,-3,-3,-3,-3, -3,-3,-3,-3,-3,-3, 800,801,802,803,804,805 } */ /* Read data past the written data, but before max numrecs in the file */ start[0] = 4; start[1] = start[2] = 0; edges[0] = 6; edges[1] = 1; edges[2] = 1; memset(outdata3D, 0, edges[0] * edges[1] * edges[2] * sizeof(int16)); status = ncvarget(ncid, var1id, start, edges, outdata3D); CHECK(status, -1, "ncvarget"); /* Verify data, should be "-3,-3,-3, 800,-3,-3". The first four values are the actual values from the variable. The last two -3s are added by nc API to fill up to the provided buffer. Note that the first three -3s were filled at the writing time due to skipping during writing */ /* Verify against the result buffer within the size of the read data */ status = memcmp(outdata3D, result3D_start400_edge611, edges[0] * edges[1] * edges[2] * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* Read data past the max numrecs in the file, ncvarget should fail */ start[0] = 4; start[1] = start[2] = 0; edges[0] = 10; edges[1] = edges[2] = 1; memset(outdata3D, 0, edges[0] * edges[1] * edges[2] * sizeof(int16)); status = ncvarget(ncid, var1id, start, edges, outdata3D); VERIFY(status, -1, "ncvarget"); /* Read 2nd variable passing its written data and then passing the file's max numrecs */ /* Get access to the second variable */ var2id = ncvarid(ncid, VAR1D); CHECK(var2id, -1, "ncvarid"); /* Get and verify variable info */ status = ncvarinq(ncid, var2id, varname, NULL, &rh_ndims, rh_dims, NULL); CHECK(status, -1, "ncvarinq"); status = ncdiminq(ncid, rh_dims[0], NULL, &dims[0]); CHECK(status, -1, "ncdiminq"); VERIFY(dims[0], MAX_NUMRECS, "ncdiminq"); /* Note: only written up to 6th element, but netCDF uses the max number of records in the file, which is 12 currently */ /* Data written by SD API: {-1,-1,300,301,302,303} */ /* Read data past the written data, but before max numrecs in the file */ start[0] = 4; edges[0] = 6; memset(outdata1D, 0, edges[0] * sizeof(int16)); status = ncvarget(ncid, var2id, start, edges, outdata1D); CHECK(status, -1, "ncvarget"); /* Verify data, should be "302,303,-1,-1,-1,-1". The first two values are the actual values from the variable. The last four -1s are added by nc API to fill up to the provided buffer. */ /* Read data past the max numrecs in the file, ncvarget should fail */ start[0] = 4; edges[0] = 10; memset(outdata1D, 0, edges[0] * sizeof(int16)); status = ncvarget(ncid, var2id, start, edges, outdata1D); VERIFY(status, -1, "ncvarget"); status = ncclose(ncid); CHECK(status, -1, "ncclose"); return num_errs; } /* Test driver for testing ncvarget in filling fill-values where appropriate */ extern int test_ncvargetfill() { int num_errs = 0; /* Output message about test being performed */ TESTING("ncvarget fills buffer when reading UDim HDF data sets (tncvarget.c)"); /* Test multiple variables with 1 unlimited dimension */ num_errs = num_errs + test_1dim_multivars(); /* Test multiple variables with multiple dimensions */ num_errs = num_errs + test_multidims(); /* Test reading passed written data and maximum numrecs in the file */ /* Note: MAX_NUMRECS is the number of records written to data set VARDOZEN in test_multidims; it is the maximum number of records in FILENAME2 that is going to be read by this test_readings */ num_errs = num_errs + test_readings(MAX_NUMRECS); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tnetcdf.c000066400000000000000000000203561503061704500166730ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "mfhdf.h" #include "hdftest.h" #define NETCDF_READ_TEST #ifdef NETCDF_READ_TEST /* Get the srcdir string to locate the input files */ #define srcdir getenv("srcdir") /******************************************************************** Name: test_read_dim() - tests reading a dimension scale in a netCDF file. Description: The fix to detect a dimension scale/coordinate variable in HDF file caused incorrect result when attempting to retrieve the dimension scale's number type from a netCDF file (bugzilla #1644.) This test verifies that the number type of dimension scale is retrieved correctly after the fix. Return value: The number of errors occurred in this routine. BMR - Sep 23, 2009 *********************************************************************/ /* Note: This file was generated by the netCDF ncgen tool from a CDL file. The CDL file was first generated by the netCDF ncdump tool from the netCDF file slice.0000.nc in bugzilla 1644 report; then it was edited to change the dimensions to much smaller values. */ #define NC_FILE "smallslice.0000.nc" static intn test_read_dim() { int32 fid, sds_id, status, dim1_id; int32 dim_sizes[H4_MAX_VAR_DIMS]; /* read dimensions */ int32 array_rank, num_type, attributes; char dim_name[H4_MAX_NC_NAME], name[H4_MAX_NC_NAME]; int32 size, dim_data_type, dim_num_attrs; intn num_errs = 0; /* number of errors so far */ const char *testfile = get_srcdir_filename(NC_FILE); /* Create the file defined by BASIC_FILE and initiate the SD interface. */ fid = SDstart(testfile, DFACC_READ); CHECK(fid, FAIL, "SDstart"); if (fid != FAIL) /* solution to stop hundreds of errors */ { /* Access first dataset to see what it is */ sds_id = SDselect(fid, 0); CHECK(sds_id, FAIL, "SDselect"); /* Get info of the dataset and verify them: it is a LENGTH0 x LENGTH1 array of type DFNT_INT16 and is named by DS0_NAME */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Get the first dimension id */ dim1_id = SDgetdimid(sds_id, 0); CHECK(dim1_id, FAIL, "SDgetdimid"); /* Read the dimension information */ status = SDdiminfo(dim1_id, dim_name, &size, &dim_data_type, &dim_num_attrs); CHECK(status, FAIL, "SDdiminfo"); VERIFY_CHAR(dim_name, "LON", "SDdiminfo"); VERIFY(dim_data_type, 6, "SDdiminfo"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); } /* SDstart failed */ /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_read_dim */ static int16 netcdf_u16[2][3] = {{1, 2, 3}, {4, 5, 6}}; /* Tests reading of netCDF file 'test1.nc' using the SDxxx interface. Note not all features of reading SDS from netCDF files are tested here. Hopefully more tests will be added over time as needed/required. */ extern intn test_netcdf_reading() { int32 sd_id; int32 sds_id; int32 n_datasets; int32 n_file_attrs; int32 index; int32 rank; int32 num_type; int32 attributes; int32 dim_sizes[H4_MAX_VAR_DIMS]; int32 start[H4_MAX_VAR_DIMS]; int32 edges[H4_MAX_VAR_DIMS]; int16 array_data[2][3]; char name[H4_MAX_NC_NAME]; int32 status; intn i, j; intn num_errs = 0; /* number of errors so far */ const char *testfile = get_srcdir_filename("test1.nc"); /* Output message about test being performed */ TESTING("reading of netCDF file using the SDxxx interface (tnetcdf.c)"); /* Open the file 'test1.nc' and initialize the SD interface. */ sd_id = SDstart(testfile, DFACC_RDONLY); CHECK(sd_id, FAIL, "netCDF Read Test 1. SDstart failed on file test1.nc"); if (sd_id != FAIL) /* temporary solution to stop hundreds of errors */ { /* Determine the contents of the file. */ status = SDfileinfo(sd_id, &n_datasets, &n_file_attrs); CHECK(status, FAIL, "netCDF Read Test 1. SDfileinfo failed on file test1.nc"); /* There should be 8 datasets in the file and 1 file level attribute */ if (n_datasets != 8) { fprintf(stderr, "netCDF Read Test 1: SDfileinfo returned wrong number of datasets in file test1.nc \n"); num_errs++; } if (n_file_attrs != 1) { fprintf(stderr, "netCDF Read Test 1: SDfileinfo returned wrong number of file attributes in file " "test1.nc \n"); num_errs++; } /* Access and find the 2-dim dataset of data-type shorts(DFNT_INT16). in the file while querying every data set in the file. There should only be one dataset that matches and is named 'order'.*/ for (index = 0; index < n_datasets; index++) { sds_id = SDselect(sd_id, index); CHECK(sds_id, FAIL, "netCDF Read Test 1. SDselect failed for dataset in file test1.nc"); status = SDgetinfo(sds_id, name, &rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "netCDF Read Test 1. SDgetinfo failed for dataset in file test1.nc"); /* look for the dataset 'order' based on rank and number type */ if (rank == 2 && num_type == (int32)DFNT_INT16) { /* should only be one of these */ start[0] = start[1] = 0; edges[0] = dim_sizes[0]; edges[1] = dim_sizes[1]; status = SDreaddata(sds_id, start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "netCDF Read Test 1. SDreaddata failed for dataset in file test1.nc"); /* check the data against our buffer 'netcdf_u16[][]' */ for (j = 0; j < dim_sizes[0]; j++) { for (i = 0; i < dim_sizes[1]; i++) { if (array_data[j][i] != netcdf_u16[j][i]) { fprintf(stderr, "netCDF Read Test 1: bogus val read: wanted netcdf[%d][%d]=%d, read " "array[%d][%d]=%d \n", j, i, netcdf_u16[j][i], j, i, array_data[j][i]); } } /* end for inner */ } /* end for outer */ } /* end access to this SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "netCDF Read Test 1. SDendaccess failed for dataset in file test1.nc"); } /* end querying every dataset in file */ /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "netCDF Read Test 1. SDend failed for file test1.nc"); } /* SDstart failed */ /* Test reading dimension scale - bugzilla 1644 */ num_errs = num_errs + test_read_dim(); if (num_errs == 0) PASSED(); return num_errs; } /* test_netcdf_reading() */ #endif /* NETCDF_READ_TEST */ hdf4-hdf4.3.1/mfhdf/test/trank0.c000066400000000000000000000134701503061704500164420ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * trank0.c - tests that several APIs behave "correctly" when an SDS has * rank = 0. * Structure of the file: * test_rank0 - test routine, called in hdftest.c * Description: * When rank=0, use rank=1 with size=1 as for scalar data. See issue * HDFFR-1291 for decision on behavior of API functions. ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" #define FILE_NAME "trank0.hdf" /* data file to test for rank=0 */ #define X_LENGTH 0 #define RANK 0 /* Test routine for testing the several APIs with SDS having rank = 0. */ extern int test_rank0() { int32 fid, sds1_id, sds2_id, sds_id; int32 dim_sizes[1], array_rank, num_type, attributes; int32 start[1], edges[1]; comp_coder_t comp_type; /* to retrieve compression type into */ comp_info c_info; /* compression information structure */ int32 comp_flag; /* compression flag */ HDF_CHUNK_DEF c_def; /* Chunking definitions */ int32 inbuf[1]; int32 outbuf[1]; intn status; int32 status_32; intn num_errs = 0; /* number of errors so far */ /* Output message about test being performed */ TESTING("several APIs with SDS having rank = 0 (trank0.c)"); /* Create a file */ fid = SDstart(FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "test_rank0: SDstart"); /**** Verify that SDsetcompress fails when dataset has rank 0 ****/ /* Create an X_LENGTH dataset, called DataSet_1 */ dim_sizes[0] = 1; sds1_id = SDcreate(fid, "DataSet_1", DFNT_INT32, RANK, dim_sizes); CHECK(sds1_id, FAIL, "test_rank0: SDcreate"); /* Attempt to set compress but should fail */ comp_type = COMP_CODE_DEFLATE; c_info.deflate.level = 6; status = SDsetcompress(sds1_id, comp_type, &c_info); VERIFY(status, FAIL, "test_rank0: SDsetcompress"); /**** Verify that SDsetchunk fails when dataset has rank 0 ****/ /* Create an X_LENGTH dataset, called DataSet_2 */ sds2_id = SDcreate(fid, "DataSet_2", DFNT_INT32, RANK, dim_sizes); CHECK(sds2_id, FAIL, "test_rank0: SDcreate"); /* Attempt to set chunk but should fail */ memset(&c_def, 0, sizeof(HDF_CHUNK_DEF)); comp_flag = HDF_CHUNK; status = SDsetchunk(sds2_id, c_def, comp_flag); VERIFY(status, FAIL, "test_rank0: SDsetchunk"); /* Close the SDSs */ status = SDendaccess(sds1_id); CHECK(status, FAIL, "test_rank0: SDendaccess"); status = SDendaccess(sds2_id); CHECK(status, FAIL, "test_rank0: SDendaccess"); /**** Verify that SDwritedata succeeds when dataset has rank 0 ****/ /* Initialize input buffer to write, and output buffer to verify the reading */ inbuf[0] = 99; outbuf[0] = 0; /* Select the first dataset */ sds_id = SDselect(fid, 0); CHECK(sds_id, FAIL, "test_rank0: SDselect"); /* Define the location and size of the dataset to be written to the file */ start[0] = 0; edges[0] = dim_sizes[0]; /* Write the stored data to the dataset */ status = SDwritedata(sds_id, start, NULL, edges, (void *)inbuf); CHECK(status, FAIL, "test_rank0:SDwritedata"); /* Close the SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_rank0: SDendaccess"); /**** Verify that SDreaddata doesn't corrupt user's buffer, when dataset has rank 0; at this time, it does (buf[0][0] changed), but EP said to just document it for now 2/8/05 - BMR ****/ /* Select the first dataset */ sds_id = SDselect(fid, 0); CHECK(sds_id, FAIL, "test_rank0: SDselect"); /* Read the data set */ start[0] = 0; edges[0] = X_LENGTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)outbuf); CHECK(status, FAIL, "test_rank0: SDreaddata"); VERIFY(inbuf[0], outbuf[0], "test_rank0: SDreaddata"); /* Close the SDS */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_rank0: SDendaccess"); /**** Verify various functions ****/ /* Select the second dataset */ sds_id = SDselect(fid, 1); CHECK(sds_id, FAIL, "test_rank0: SDselect"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, NULL, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "test_rank0: SDgetinfo"); VERIFY(array_rank, 0, "test_rank0: SDgetinfo"); /* Verify that SDisrecord doesn't cause seg. fault */ status_32 = SDisrecord(sds_id); VERIFY(status_32, TRUE, "test_rank0: SDisrecord"); /* Close the SDSs */ status = SDendaccess(sds_id); CHECK(status, FAIL, "test_rank0: SDendaccess"); /* Close the SD interface */ status = SDend(fid); CHECK(status, FAIL, "test_rank0: SDend"); if (num_errs == 0) PASSED(); return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tsd.c000066400000000000000000000047201503061704500160330ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tsd.c - tests SDstart for file with no write permission ****************************************************************************/ #include "mfhdf.h" #include "hdftest.h" #include "hfile_priv.h" #define FILE_NAME "sdtest.hdf" /* data file to test ID types */ extern int test_sd() { int32 fid; intn status; #if defined H4_HAVE_WIN32_API int mode; #else mode_t mode; #endif FILE *ff; intn num_errs = 0; /* number of errors so far */ /* Output message about test being performed */ TESTING("SDstart for file with no write permission (tsd.c)"); /* delete the file just to be sure */ unlink(FILE_NAME); /* Create a file */ fid = SDstart(FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); #if defined H4_HAVE_WIN32_API mode = _S_IREAD; #else mode = S_IRUSR; #endif status = chmod(FILE_NAME, mode); CHECK(status, FAIL, "chmod"); /* Create a protected file */ fid = SDstart(FILE_NAME, DFACC_CREATE); VERIFY(fid, FAIL, "second SDstart"); ff = HI_OPEN(FILE_NAME, DFACC_READ); CHECK(ff, NULL, "fopen"); if (ff != NULL) { HI_CLOSE(ff); } #if defined H4_HAVE_WIN32_API mode = _S_IWRITE; #else mode = S_IWUSR; #endif status = chmod(FILE_NAME, mode); CHECK(status, FAIL, "chmod"); if (num_errs == 0) PASSED(); return num_errs; } /* test_SDAPI_ids */ hdf4-hdf4.3.1/mfhdf/test/tsdsprops.c000066400000000000000000000645711503061704500173140ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tsdsprops.c - tests functionality regarding an SDS' properties, such * name, dimensions, type, size,... * Structure of the file: * test_SDSprops - test driver * test_SDSnames - tests that an SDS name can be more than * previously hardcoded at 64 characters; now length is variable. * test_unlim_dim - tests that writing two unlimited 1D datasets, * without closing the file between writes, will not cause the * second dataset to contain garbage anymore. (bug 525) * test_unlim_inloop - tests that appending unlimited data to more * than one dataset within a loop stores data correctly. (bug 801) * test_valid_args - tests that when some invalid arguments were passed * into an API, they can be caught and handled properly. * (bugzilla 150) ****************************************************************************/ #include #include #include "mfhdf.h" #include "hdftest.h" /*************************************************************************** Name: test_SDSnames() - tests that SDS name is no longer restricted to 64 characters only. (bugzilla 516) Description: The main contents include: - create data sets with very short and very long names - close the file, then reopen it, get SDS' info, and verify the names Return value: The number of errors occurred in this routine. ****************************************************************************/ #define FILE_NAME "SDSlongname.hdf" /* data file to test SDS names */ #define X_LENGTH 10 #define Y_LENGTH 10 #define RANK 2 #define NAME_LEN1 93 /* the length of longname_ds below */ #define NAME_LEN2 1 /* the length of shortname_ds below */ #define longname_ds \ "The name of this dataset is long, and it is used to test the new variable length name feature" #define shortname_ds "A" static intn test_SDSnames() { int32 fid, dset1, dset2; int32 rank, dtype, nattrs, dimsizes[RANK]; char *ds_name; uint16 name_len; intn status; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Create an X_LENGTH by Y_LENGTH dataset, called DataSet_1 */ dimsizes[0] = X_LENGTH; dimsizes[1] = Y_LENGTH; dset1 = SDcreate(fid, longname_ds, DFNT_INT32, RANK, dimsizes); CHECK(dset1, FAIL, "SDcreate"); dset2 = SDcreate(fid, shortname_ds, DFNT_INT32, RANK, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open the file to check on the SDS name */ fid = SDstart(FILE_NAME, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Get access to the first dataset */ dset1 = SDselect(fid, 0); CHECK(dset1, FAIL, "SDselect"); /* Get and verify the length of its name */ status = SDgetnamelen(dset1, &name_len); CHECK(status, FAIL, "SDgetnamelen"); VERIFY(name_len, NAME_LEN1, "SDgetnamelen"); /* Allocate buffer to get its name */ ds_name = (char *)malloc(name_len + 1); CHECK_ALLOC(ds_name, "ds_name", "test_SDSnames"); /* Get information of the first dataset, and verify its name */ status = SDgetinfo(dset1, ds_name, &rank, dimsizes, &dtype, &nattrs); CHECK(status, FAIL, "SDgetinfo"); VERIFY_CHAR(ds_name, longname_ds, "SDgetinfo"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Release allocated memory */ free(ds_name); /* Get access to the second dataset */ dset2 = SDselect(fid, 1); CHECK(dset2, FAIL, "SDselect"); /* Get and verify the length of its name */ name_len = 0; status = SDgetnamelen(dset2, &name_len); CHECK(status, FAIL, "SDgetnamelen"); VERIFY(name_len, NAME_LEN2, "SDgetnamelen"); /* Allocate buffer to get its name */ ds_name = (char *)malloc(name_len + 1); CHECK_ALLOC(ds_name, "ds_name", "test_SDSnames"); /* Get information of the second dataset, and verify its name */ status = SDgetinfo(dset2, ds_name, &rank, dimsizes, &dtype, &nattrs); CHECK(status, FAIL, "SDgetinfo"); VERIFY_CHAR(ds_name, shortname_ds, "SDgetinfo"); /* Close the datasets */ status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Release allocated memory */ free(ds_name); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of, so far */ return num_errs; } /* test_SDSnames */ /*************************************************************************** Name: test_unlim_dim() - tests that writing two unlimited 1D datasets, without closing the file between writes, will not cause the second dataset to contain garbage anymore. (bug 525) Description: The main contents include: - create and write to two datasets - append data to both without closing anything - close the datasets and the file - reopen the file, get the data sets and their info - read and verify the data Return value: The number of errors occurred in this routine. ****************************************************************************/ #define UD_FILE_NAME "Unlim_dim.hdf" /* data file to test unlimited dim */ #define DS1_NAME "data 1" #define DS2_NAME "data 2" #define DIM0 10 static intn test_unlim_dim() { int32 fid, dset1, dset2; int32 rank, start[1], edges[1], dtype, nattrs, dimsizes[1]; int16 array_data[DIM0], /* data to be written to both datasets */ append_data[DIM0], /* data to be appended to both datasets */ outdata[DIM0 + DIM0], outdata1[DIM0 + DIM0]; /* data read */ char ds_name[20]; intn idx, status; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(UD_FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define the rank and dimensions of the data set to be created. */ rank = 1; dimsizes[0] = SD_UNLIMITED; /* Create two array data sets. */ dset1 = SDcreate(fid, DS1_NAME, DFNT_INT16, rank, dimsizes); CHECK(dset1, FAIL, "SDcreate"); dset2 = SDcreate(fid, DS2_NAME, DFNT_INT16, rank, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Fill the stored-data array with values. */ for (idx = 0; idx < DIM0; idx++) { array_data[idx] = idx + 1; } /* Define the location, pattern, and size of the data sets */ start[0] = 0; edges[0] = DIM0; status = SDwritedata(dset1, start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "SDwritedata"); status = SDwritedata(dset2, start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "SDwritedata"); /* Store array values to be appended */ for (idx = 0; idx < DIM0; idx++) append_data[idx] = DIM0 + idx; /* Define the location of the append */ start[0] = DIM0; /* start from the end of the previous write */ edges[0] = DIM0; /* append the same number of elements as the write */ /* Append data to file */ status = SDwritedata(dset1, start, NULL, edges, (void *)append_data); CHECK(status, FAIL, "SDwritedata"); status = SDwritedata(dset2, start, NULL, edges, (void *)append_data); CHECK(status, FAIL, "SDwritedata"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open the file to check on the SDS names */ fid = SDstart(UD_FILE_NAME, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Get access to the datasets */ dset1 = SDselect(fid, 0); CHECK(dset1, FAIL, "SDselect"); dset2 = SDselect(fid, 1); CHECK(dset1, FAIL, "SDselect"); /* Get information of the first dataset, and verify its name */ status = SDgetinfo(dset1, ds_name, &rank, dimsizes, &dtype, &nattrs); CHECK(status, FAIL, "SDgetinfo"); /* Define the location to read */ start[0] = 0; edges[0] = DIM0 + DIM0; /* Read and check first dataset */ status = SDreaddata(dset1, start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); for (idx = 0; idx < DIM0; idx++) { VERIFY(outdata[idx], array_data[idx], "SDreaddata first dataset"); } for (idx = DIM0; idx < edges[0]; idx++) { VERIFY(outdata[idx], append_data[idx - DIM0], "SDreaddata first dataset"); } /* Read and check second dataset */ status = SDreaddata(dset2, start, NULL, edges, (void *)outdata1); CHECK(status, FAIL, "SDreaddata"); for (idx = 0; idx < DIM0; idx++) { VERIFY(outdata1[idx], array_data[idx], "SDreaddata first dataset"); } for (idx = DIM0; idx < edges[0]; idx++) { VERIFY(outdata1[idx], append_data[idx - DIM0], "SDreaddata first dataset"); } /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the datasets */ status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of, so far */ return num_errs; } /* test_unlim_dim */ /*************************************************************************** Name: test_unlim_inloop() - tests that appending unlimited data to more than one dataset within a loop stores data correctly. (bug 801) Description: The main contents include: - create two data sets - write to the data sets in a loop - close the file, then reopen it - in another loop, read the data sets and verify their data Return value: The number of errors occurred in this routine. ****************************************************************************/ #define UDIL_FILE_NAME "Unlim_inloop.hdf" /* file to test unlim dims in loop */ #define SIZE 5 #define N_DSETS 2 #define RANK1 1 static intn test_unlim_inloop() { int32 fid; int32 sds_id[N_DSETS]; int32 start[RANK1], edges[RANK1], rank, dimsizes[RANK1]; int32 dtype, nattrs; char sds_name[20]; int i, n_writes; /* number of times writing to the data sets */ /*int32 n,m, mm;*/ intn status; float64 array_data[SIZE]; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(UDIL_FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); dimsizes[0] = SD_UNLIMITED; /* Create N_DSETS data sets in a loop */ for (i = 0; i < N_DSETS; i++) { sprintf(sds_name, "test%d", i); sds_id[i] = SDcreate(fid, sds_name, DFNT_FLOAT64, 1, dimsizes); CHECK(sds_id[i], FAIL, "SDcreate"); status = SDendaccess(sds_id[i]); CHECK(status, FAIL, "SDendaccess"); } /* Making up data to write */ for (i = 0; i < SIZE; i++) { array_data[i] = i + 1; } /* write and append to the data sets */ n_writes = 0; edges[0] = SIZE; while (n_writes < 2) { /* i.e, start at 0 first time and at SIZE second time*/ start[0] = SIZE * n_writes; for (i = 0; i < N_DSETS; i++) { sds_id[i] = SDselect(fid, i); CHECK(sds_id[i], FAIL, "SDselect"); status = SDwritedata(sds_id[i], start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "SDwritedata"); status = SDendaccess(sds_id[i]); CHECK(status, FAIL, "SDendaccess"); } n_writes++; } /* close the file */ status = SDend(fid); CHECK(status, FAIL, "SDcreate"); /* Re-open the file to check on the SDS name */ fid = SDstart(UDIL_FILE_NAME, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); for (i = 0; i < N_DSETS; i++) { float64 outdata[SIZE * 2]; /* Get access to the datasets */ sds_id[i] = SDselect(fid, i); /* Get information of the first dataset, and verify its name */ status = SDgetinfo(sds_id[i], sds_name, &rank, dimsizes, &dtype, &nattrs); CHECK(status, FAIL, "SDgetinfo"); /* Define the location to read */ start[0] = 0; edges[0] = SIZE * n_writes; /* Read and check first dataset */ status = SDreaddata(sds_id[i], start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); /* Verify the read data */ n_writes = 0; while (n_writes < 2) { intn in, out; for (in = 0, out = 0 + (SIZE * n_writes); in < SIZE; in++, out++) { VERIFY(outdata[out], array_data[in], "SDreaddata"); } n_writes++; } /* Close the datasets */ status = SDendaccess(sds_id[i]); CHECK(status, FAIL, "SDendaccess"); } /* close the file */ status = SDend(fid); CHECK(status, FAIL, "SDcreate"); /* Return the number of errors that's been kept track of, so far */ return num_errs; } /* test_unlim_inloop */ /*************************************************************************** Name: test_valid_args() - tests that when some invalid arguments were passed into an API, they can be caught and handled properly. (bugzilla 150) Description: The main contents include: - create a data set of size X_LENGTH x Y_LENGTH - write to the data set - close the file, then reopen it - read the dataset giving a stride value, that goes beyond the dimension size - when SDreaddata failed, try to check for error code DFE_ARGS and handle the failure properly - close all. Return value: The number of errors occurred in this routine. ****************************************************************************/ #define ARGS_FILE_NAME "test_arguments.hdf" /* file to test validating args */ static intn test_valid_args() { int32 fid, dset1, dset2; int32 start[2], edges[2], dtype, nattrs, dimsizes[2], rank, strides[2]; int16 array_data[X_LENGTH][Y_LENGTH], /* data to be written to datasets */ outdata[X_LENGTH][Y_LENGTH]; /* data read */ char ds_name[20]; intn idxx, idxy, status; intn num_errs = 0; /* number of errors so far */ /* Create a file */ fid = SDstart(ARGS_FILE_NAME, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Create two array data sets. */ dimsizes[0] = X_LENGTH; dimsizes[1] = Y_LENGTH; dset1 = SDcreate(fid, DS1_NAME, DFNT_INT16, RANK, dimsizes); CHECK(dset1, FAIL, "SDcreate"); dimsizes[0] = SD_UNLIMITED; dset2 = SDcreate(fid, DS2_NAME, DFNT_INT16, RANK, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Fill the stored-data array with values. */ for (idxx = 0; idxx < X_LENGTH; idxx++) { for (idxy = 0; idxy < Y_LENGTH; idxy++) { array_data[idxx][idxy] = idxx * idxy + 1; } } /* Define the location, pattern, and size of the data sets */ start[0] = 0; start[1] = 0; edges[0] = X_LENGTH; edges[1] = Y_LENGTH; status = SDwritedata(dset1, start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "SDwritedata"); status = SDwritedata(dset2, start, NULL, edges, (void *)array_data); CHECK(status, FAIL, "SDwritedata"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Re-open the file to check on the SDS names */ fid = SDstart(ARGS_FILE_NAME, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Get access to the datasets */ dset1 = SDselect(fid, 0); CHECK(dset1, FAIL, "SDselect"); dset2 = SDselect(fid, 1); CHECK(dset1, FAIL, "SDselect"); /* Get information of the first dataset, and verify its name */ status = SDgetinfo(dset1, ds_name, &rank, dimsizes, &dtype, &nattrs); CHECK(status, FAIL, "SDgetinfo"); /* Define the location to read */ strides[0] = X_LENGTH; /* simulate a mistake here, should have -1 */ strides[1] = Y_LENGTH - 1; /* Attempt to read first dataset, it should fail with invalid an argument error */ status = SDreaddata(dset1, start, strides, edges, (void *)outdata); VERIFY(status, FAIL, "SDreaddata"); VERIFY(HEvalue(1), DFE_ARGS, "SDreaddata"); /* Show that the error was also caught for the dataset with unlimited dimension */ status = SDreaddata(dset2, start, strides, edges, (void *)outdata); VERIFY(status, FAIL, "SDreaddata"); VERIFY(HEvalue(1), DFE_ARGS, "SDreaddata"); /* Close the datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the datasets */ status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of, so far */ return num_errs; } /* test_valid_args */ /******************************************************************* Name: test_valid_args2() - tests that when some invalid arguments were passed into SDreaddata, causing the function to attempt to read beyond the dimension size, can be caught and handled properly. (more for bugzilla 150) Description: The main contents include: - creates a file and three datasets: + "data1" dimsizes=[1] int32 read the one element + "data2" dimsizes=[202,271] + "data3" dimsizes=[10,3,2] - close the file and reopen it to check reading data - read the datasets as followed to test error checkings on parameters + "data1" - attempts to read with incorrect stride value + "data1" - attempts to read with incorrect count value + "data1" - reads again with all arguments in bounds + "data2" - attempts to read with strides[1]=D2_Y (correct: D2_Y-1) + "data2" - attempts to read with count[1]=3 (correct: 2) + "data3" - attempts to read with incorrect combination of stride and count + "data3" - reads again with all arguments in bounds ********************************************************************/ #define D1_X 1 #define D2_X 202 #define D2_Y 271 #define D3_X 10 #define D3_Y 3 #define D3_Z 2 /* Helper function to test_valid_args2 creates and writes to a dataset */ static intn makeSDS(int32 sd_id, char *name, int32 dtype, int32 rank, int32 *dimsizes, int32 *start, int32 *strides, int32 *count, void *data) { int32 sds_id; intn status; intn num_errs = 0; /* number of errors so far */ /* Create the named dataset */ sds_id = SDcreate(sd_id, name, dtype, rank, dimsizes); CHECK(sds_id, FAIL, "SDcreate"); /* Write to it */ status = SDwritedata(sds_id, start, strides, count, data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the array. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); return (status); } static intn test_valid_args2() { int32 sd_id, sds_id; int32 dim[1], dims2[2], dims3[3], d1start[1], d2start[2], d3start[3]; int32 d1count[1], d2count[2], d3count[3]; int32 d1stride[1], d2stride[2], d3stride[3]; float32 data1 = 32.0, outdata1; int32 data2[D2_X][D2_Y], outdata2[D2_X][D2_Y]; int16 data3[D3_X][D3_Y][D3_Z], outdata3[D3_X][D3_Y][D3_Z]; intn i, j, k, status; intn num_errs = 0; /* number of errors so far */ /* Create and open the file and initiate the SD interface. */ sd_id = SDstart("b150.hdf", DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the first dataset */ dim[0] = D1_X; d1start[0] = 0; d1count[0] = 1; data1 = 32.0; status = makeSDS(sd_id, "data1", DFNT_FLOAT32, 1, dim, d1start, NULL, d1count, &data1); CHECK(status, FAIL, "makeSDS data1"); /* Create and write to second dataset */ dims2[0] = D2_X; dims2[1] = D2_Y; d2start[0] = d2start[1] = 0; d2count[0] = dims2[0]; d2count[1] = dims2[1]; for (i = 0; i < D2_X; i++) for (j = 0; j < D2_Y; j++) data2[i][j] = i * j; status = makeSDS(sd_id, "data2", DFNT_INT32, 2, dims2, d2start, NULL, d2count, data2); CHECK(status, FAIL, "makeSDS data2"); /* Create and write to third dataset */ dims3[0] = D3_X; dims3[1] = D3_Y; dims3[2] = D3_Z; d3start[0] = d3start[1] = d3start[2] = 0; d3count[0] = dims3[0]; d3count[1] = dims3[1]; d3count[2] = dims3[2]; for (i = 0; i < D3_X; i++) for (j = 0; j < D3_Y; j++) for (k = 0; k < D3_Z; k++) data3[i][j][k] = i * j * k; status = makeSDS(sd_id, "data3", DFNT_INT16, 3, dims3, d3start, NULL, d3count, data3); CHECK(status, FAIL, "makeSDS data3"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Reopen the file and read in some of the data */ sd_id = SDstart("b150.hdf", DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); /* Read first dataset with incorrect stride value, but shouldn't fail */ sds_id = SDselect(sd_id, 0); d1start[0] = 0; d1stride[0] = 2; /* irrelevant because only 1 value to be read */ d1count[0] = 1; status = SDreaddata(sds_id, d1start, d1stride, d1count, &outdata1); CHECK(status, FAIL, "SDreaddata"); /* Read first dataset with incorrect count value */ d1start[0] = 0; d1stride[0] = 1; d1count[0] = 2; /* array only has 1 value */ status = SDreaddata(sds_id, d1start, d1stride, d1count, &outdata1); VERIFY(status, FAIL, "SDreaddata"); /* Read again with "correct" arguments */ d1count[0] = 1; status = SDreaddata(sds_id, d1start, d1stride, d1count, &outdata1); CHECK(status, FAIL, "SDreaddata"); VERIFY(outdata1, data1, "SDreaddata first dataset"); /* Terminate access to the first dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Read second dataset with out of bound stride */ sds_id = SDselect(sd_id, 1); d2start[0] = d2start[1] = 0; d2stride[0] = 1; d2stride[1] = D2_Y; /* should be D2_Y - 1 */ d2count[0] = D2_X; d2count[1] = 2; status = SDreaddata(sds_id, d2start, d2stride, d2count, (void *)outdata2); VERIFY(status, FAIL, "SDreaddata"); /* Read second dataset with too many values requested */ d2stride[1] = D2_Y - 1; d2count[1] = 3; /* should be 2 */ status = SDreaddata(sds_id, d2start, d2stride, d2count, (void *)outdata2); VERIFY(status, FAIL, "SDreaddata"); /* Terminate access to the second dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Read third dataset with too many values requested */ sds_id = SDselect(sd_id, 2); d3start[0] = 1; d3start[1] = d3start[2] = 0; d3stride[0] = 3; d3stride[1] = 2; d3stride[2] = 1; d3count[0] = 4; /* should be 3 max or smaller stride */ d3count[1] = 2; d3count[2] = 2; status = SDreaddata(sds_id, d3start, d3stride, d3count, (void *)outdata3); VERIFY(status, FAIL, "SDreaddata"); /* Read again with "correct" arguments */ d3start[0] = 1; d3start[1] = d3start[2] = 0; d3stride[0] = 3; d3stride[1] = 2; d3stride[2] = 1; d3count[0] = 3; d3count[1] = 2; d3count[2] = 2; status = SDreaddata(sds_id, d3start, d3stride, d3count, (void *)outdata3); CHECK(status, FAIL, "SDreaddata"); /* Terminate access to the third dataset */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of, so far */ return num_errs; } /* test_valid_args2 */ /* Test driver for testing various SDS' properties. */ extern int test_SDSprops() { intn num_errs = 0; /* number of errors */ /* Output message about test being performed */ TESTING("various SDS' properties (tsdsprops.c)"); num_errs = num_errs + test_SDSnames(); num_errs = num_errs + test_unlim_dim(); num_errs = num_errs + test_unlim_inloop(); num_errs = num_errs + test_valid_args(); num_errs = num_errs + test_valid_args2(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tszip.c000066400000000000000000001447611503061704500164240ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include "mfhdf.h" #include "hdftest.h" #ifdef H4_HAVE_LIBSZ #include "szlib.h" #endif #define FILE_NAME8 "SDS_8_sziped.hdf" #define FILE_NAME16 "SDS_16_sziped.hdf" #define FILE_NAME32 "SDS_32_sziped.hdf" #define FILE_NAMEfl32 "SDS_fl32_sziped.hdf" #define FILE_NAMEfl64 "SDS_fl64_sziped.hdf" #define SDS_NAME "SzipedData" #define RANK 2 #define WIDTH 6 #define LENGTH 9 #ifdef H4_HAVE_SZIP_ENCODER /* only compile all these test functions when \ encoder is available */ static intn test_szip_SDS8bit() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; /* Compression parameters - union */ comp_info c_info_out; /* Compression parameters to retrieve into */ int32 start[2], edges[2]; int8 fill_value = 0; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ comp_coder_t comp_type; /* Compression type to retrieve into */ int8 out_data[LENGTH][WIDTH]; int8 in_data[LENGTH][WIDTH] = {{1, 1, 2, 2, 3, 4}, {1, 1, 2, 2, 3, 4}, {1, 1, 2, 2, 3, 4}, {3, 3, 0, 4, 3, 4}, {3, 3, 0, 4, 3, 4}, {3, 3, 0, 4, 3, 4}, {0, 0, 6, 6, 3, 4}, {5, 5, 6, 6, 3, 4}, {0, 0, 6, 6, 3, 4}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAME8, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT8, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; edges[i] = dim_sizes[i]; } /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialization for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Set the compression */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write data to the SDS */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAME8, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Retrieve compression informayion about the dataset */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&c_info_out, 0, sizeof(c_info_out)); status = SDgetcompinfo(sds_id, &comp_type, &c_info_out); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcompinfo"); VERIFY(c_info_out.szip.options_mask, c_info.szip.options_mask, "SDgetcompinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (out_data[j][i] != in_data[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_SDS8bit */ static intn test_szip_SDS16bit() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; int32 start[2], edges[2]; int16 fill_value = 0; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ int16 out_data[LENGTH][WIDTH]; int16 in_data[LENGTH][WIDTH] = { {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {0, 0, 600, 600, 300, 400}, {500, 500, 600, 600, 300, 400}, {0, 0, 600, 600, 300, 400}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAME16, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT16, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; edges[i] = dim_sizes[i]; } /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialize for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Set the compression */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write data to the SDS */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAME16, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (out_data[j][i] != in_data[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_SDS16bit */ static intn test_szip_SDS32bit() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; int32 start[2], edges[2]; int32 fill_value = 0; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ int32 out_data[LENGTH][WIDTH]; int32 in_data[LENGTH][WIDTH] = { {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {0, 0, 600, 600, 300, 400}, {500, 500, 600, 600, 300, 400}, {0, 0, 600, 600, 300, 400}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAME32, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; edges[i] = dim_sizes[i]; } /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialize for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Set the compression */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write data to the SDS */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAME32, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (out_data[j][i] != in_data[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_SDS32bit */ static intn test_szip_SDSfl32bit() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; int32 start[2], edges[2]; float32 fill_value = 0.0F; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ float32 out_data[LENGTH][WIDTH]; float32 in_data[LENGTH][WIDTH] = { {100.0F, 100.0F, 200.0F, 200.0F, 300.0F, 400.0F}, {100.0F, 100.0F, 200.0F, 200.0F, 300.0F, 400.0F}, {100.0F, 100.0F, 200.0F, 200.0F, 300.0F, 400.0F}, {300.0F, 300.0F, 0.0F, 400.0F, 300.0F, 400.0F}, {300.0F, 300.0F, 0.0F, 400.0F, 300.0F, 400.0F}, {300.0F, 300.0F, 0.0F, 400.0F, 300.0F, 400.0F}, {0.0F, 0.0F, 600.0F, 600.0F, 300.0F, 400.0F}, {500.0F, 500.0F, 600.0F, 600.0F, 300.0F, 400.0F}, {0.0F, 0.0F, 600.0F, 600.0F, 300.0F, 400.0F}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAMEfl32, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_FLOAT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; edges[i] = dim_sizes[i]; } /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialize for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Set the compression */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write data to the SDS */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAMEfl32, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (!H4_FLT_ABS_EQUAL(out_data[j][i], in_data[j][i])) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_SDSfl32bit */ static intn test_szip_SDSfl64bit() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; int32 start[2], edges[2]; float64 fill_value = 0; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ float64 out_data[LENGTH][WIDTH]; float64 in_data[LENGTH][WIDTH] = { {100.0, 100.0, 200.0, 200.0, 300.0, 400.0}, {100.0, 100.0, 200.0, 200.0, 300.0, 400.0}, {100.0, 100.0, 200.0, 200.0, 300.0, 400.0}, {300.0, 300.0, 0.0, 400.0, 300.0, 400.0}, {300.0, 300.0, 0.0, 400.0, 300.0, 400.0}, {300.0, 300.0, 0.0, 400.0, 300.0, 400.0}, {0.0, 0.0, 600.0, 600.0, 300.0, 400.0}, {500.0, 500.0, 600.0, 600.0, 300.0, 400.0}, {0.0, 0.0, 600.0, 600.0, 300.0, 400.0}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAMEfl64, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = LENGTH; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_FLOAT64, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; edges[i] = dim_sizes[i]; } /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialization for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Set the compression */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); CHECK(status, FAIL, "SDsetcompress"); /* Write data to the SDS */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAMEfl64, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (!H4_DBL_ABS_EQUAL(out_data[j][i], in_data[j][i])) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_SDSfl64bit */ #define FILE_NAME "SDSchunkedsziped.hdf" #define SDS_NAME_CH "ChunkedData" #define RANK_CH 2 /* rank of the chunked data set */ #define WIDTH_CH 4 /* width of the chunked data set */ #define LENGTH_CH 9 /* length of the chunked data set */ #define CWIDTH 2 /* width of the chunk */ #define CLENGTH 3 /* length of the chunk */ static intn test_szip_chunk() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; intn status; int32 flag, maxcache, new_maxcache; int32 dim_sizes[2], origin[2]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ HDF_CHUNK_DEF c_def_out; /* Chunking definitions */ int32 c_flags, c_flags_out; int32 all_data[LENGTH_CH][WIDTH_CH]; int32 start[2], edges[2]; int32 comp_size = 0, uncomp_size = 0; int32 chunk_out[CLENGTH][CWIDTH]; int32 row[CWIDTH] = {5, 5}; int32 column[CLENGTH] = {4, 4, 4}; int32 fill_value = 0; /* Fill value */ comp_coder_t comp_type; /* to retrieve compression type into */ comp_info cinfo_out; /* compression information structure */ int num_errs = 0; /* number of errors so far */ int i, j; /* * Define all chunks. Note that chunks 4 & 5 are not used to write, * only to verify the read data. The 'row' and 'column' are used * to write in the place of these chunks. */ int32 chunk1[CLENGTH][CWIDTH] = {{1, 1}, {1, 1}, {1, 1}}; int32 chunk2[CLENGTH][CWIDTH] = {{2, 2}, {2, 2}, {2, 2}}; int32 chunk3[CLENGTH][CWIDTH] = {{3, 3}, {3, 3}, {3, 3}}; int32 chunk4[CLENGTH][CWIDTH] = {{0, 4}, {0, 4}, {0, 4}}; int32 chunk5[CLENGTH][CWIDTH] = {{0, 0}, {5, 5}, {0, 0}}; int32 chunk6[CLENGTH][CWIDTH] = {{6, 6}, {6, 6}, {6, 6}}; /* Initialize chunk lengths. */ c_def.comp.chunk_lengths[0] = CLENGTH; c_def.comp.chunk_lengths[1] = CWIDTH; /* Create the file and initialize SD interface. */ sd_id = SDstart(FILE_NAME, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create LENGTH_CHxWIDTH_CH SDS. */ dim_sizes[0] = LENGTH_CH; dim_sizes[1] = WIDTH_CH; sds_id = SDcreate(sd_id, SDS_NAME_CH, DFNT_INT32, RANK_CH, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for chunking/szip compression testing"); /* Fill the SDS array with the fill value. */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Set parameters for Chunking/SZIP */ c_def.comp.comp_type = COMP_CODE_SZIP; c_def.comp.cinfo.szip.pixels_per_block = 2; c_def.comp.cinfo.szip.options_mask = SZ_EC_OPTION_MASK; c_def.comp.cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; c_def.comp.cinfo.szip.bits_per_pixel = 0; c_def.comp.cinfo.szip.pixels = 0; c_def.comp.cinfo.szip.pixels_per_scanline = 0; c_flags = HDF_CHUNK | HDF_COMP; status = SDsetchunk(sds_id, c_def, c_flags); CHECK(status, FAIL, "SDsetchunk"); /* Set chunk cache to hold maximum of 3 chunks. */ maxcache = 3; flag = 0; new_maxcache = SDsetchunkcache(sds_id, maxcache, flag); CHECK(new_maxcache, FAIL, "SDsetchunkcache"); memset(&c_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(sds_id, &c_def_out, &c_flags_out); CHECK(status, FAIL, "SDgetchunkinfo"); VERIFY(c_flags_out, c_flags, "SDgetchunkinfo"); VERIFY(c_def_out.comp.comp_type, COMP_CODE_SZIP, "SDgetchunkinfo"); VERIFY(c_def_out.comp.cinfo.szip.options_mask, c_def.comp.cinfo.szip.options_mask, "SDgetchunkinfo"); /* * Write chunks using SDwritechunk function. Chunks can be written * in any order. */ /* Write the chunk with the coordinates (0,0). */ origin[0] = 0; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk1); CHECK(status, FAIL, "SDwritechunk"); /* Write the chunk with the coordinates (1,0). */ origin[0] = 1; origin[1] = 0; status = SDwritechunk(sds_id, origin, (void *)chunk3); CHECK(status, FAIL, "SDwritechunk"); /* Write the chunk with the coordinates (0,1). */ origin[0] = 0; origin[1] = 1; status = SDwritechunk(sds_id, origin, (void *)chunk2); CHECK(status, FAIL, "SDwritechunk"); /* Write chunk with the coordinates (1,2) using SDwritedata function. */ start[0] = 6; start[1] = 2; edges[0] = 3; edges[1] = 2; status = SDwritedata(sds_id, start, NULL, edges, (void *)chunk6); CHECK(status, FAIL, "SDwritedata"); /* Fill second column in the chunk with the coordinates (1,1) using * SDwritedata function. */ start[0] = 3; start[1] = 3; edges[0] = 3; edges[1] = 1; status = SDwritedata(sds_id, start, NULL, edges, (void *)column); CHECK(status, FAIL, "SDwritedata"); /* Fill second row in the chunk with the coordinates (0,2) using * SDwritedata function. */ start[0] = 7; start[1] = 0; edges[0] = 1; edges[1] = 2; status = SDwritedata(sds_id, start, NULL, edges, (void *)row); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and access the first data set. */ sd_id = SDstart(FILE_NAME, DFACC_READ); sds_index = 0; sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for chunking/szip compression testing"); /* Retrieve compression information about the dataset */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo_out, 0, sizeof(cinfo_out)); status = SDgetcompinfo(sds_id, &comp_type, &cinfo_out); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcompinfo"); VERIFY(cinfo_out.szip.options_mask, c_def.comp.cinfo.szip.options_mask, "SDgetcompinfo"); /* Retrieve compression method alone from the dataset */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcomptype"); /* Read the entire data set using SDreaddata function. */ start[0] = 0; start[1] = 0; edges[0] = LENGTH_CH; edges[1] = WIDTH_CH; status = SDreaddata(sds_id, start, NULL, edges, (void *)all_data); CHECK(status, FAIL, "SDreaddata"); /* * This is how the entire array should look like: * * 1 1 2 2 * 1 1 2 2 * 1 1 2 2 * 3 3 0 4 * 3 3 0 4 * 3 3 0 4 * 0 0 6 6 * 5 5 6 6 * 0 0 6 6 */ /* Read chunk #4 with the coordinates (1,1) and verify it. */ origin[0] = 1; origin[1] = 1; status = SDreadchunk(sds_id, origin, chunk_out); CHECK(status, FAIL, "SDreadchunk"); for (j = 0; j < CLENGTH; j++) { for (i = 0; i < CWIDTH; i++) { if (chunk_out[j][i] != chunk4[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in chunk #4, want %d got %d\n", j, i, chunk4[j][i], chunk_out[j][i]); num_errs++; } } } /* * Read chunk #5 with the coordinates (2,0) and verify it. */ origin[0] = 2; origin[1] = 0; status = SDreadchunk(sds_id, origin, chunk_out); CHECK(status, FAIL, "SDreadchunk"); for (j = 0; j < CLENGTH; j++) { for (i = 0; i < CWIDTH; i++) if (chunk_out[j][i] != chunk5[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in chunk #5, want %d got %d\n", j, i, chunk5[j][i], chunk_out[j][i]); num_errs++; } } /* Get the data sizes */ status = SDgetdatasize(sds_id, &comp_size, &uncomp_size); CHECK(status, FAIL, "test_chkcmp_SDSs: SDgetdatasize"); /* Terminate access to the data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_chunk */ #define FILE_NAME_3D "SDSchunkedsziped3d.hdf" #define SDS_NAME_CH3D "3D Chunked Szipped" #define SDS_NAME_CH0 "3D Chunked Szipped Empty" #define RANK_CH3 3 /* rank of the chunked data set */ #define SDS_DIM1 4 /* first dimension of the chunked data set */ #define SDS_DIM0 9 /* second dimension of the chunked data set */ #define SDS_DIM2 11 /* third dimension of the chunked data set */ #define CHK_DIM0 9 /* first dimension of the chunk */ #define CHK_DIM1 2 /* second dimension of the chunk */ #define CHK_DIM2 2 /* third dimension of the chunk */ static intn test_szip_chunk_3d() { /************************* Variable declaration **************************/ int32 sd_id, sds_id0, sds_id, sds_index; intn status; int32 dim_sizes[3]; HDF_CHUNK_DEF c_def; /* Chunking definitions */ HDF_CHUNK_DEF c_def_out; /* Chunking definitions */ int32 c_flags, c_flags_out; int32 start[3], edges[3]; int16 fill_value = 0; /* Fill value */ comp_coder_t comp_type; /* to retrieve compression type into */ comp_info cinfo; /* compression information structure */ int16 all_data[SDS_DIM0][SDS_DIM1][SDS_DIM2]; int16 out_data[SDS_DIM0][SDS_DIM1][SDS_DIM2]; int num_errs = 0; /* number of errors so far */ int i, j, k; for (i = 0; i < SDS_DIM0; i++) { for (j = 0; j < SDS_DIM1; j++) { for (k = 0; k < SDS_DIM2; k++) { out_data[i][j][k] = i * 100 + j * 10 + k; } } } /* Initialize chunk lengths. */ c_def.comp.chunk_lengths[0] = CHK_DIM0; c_def.comp.chunk_lengths[1] = CHK_DIM1; c_def.comp.chunk_lengths[2] = CHK_DIM2; /* Create the file and initialize SD interface. */ sd_id = SDstart(FILE_NAME_3D, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create SDS_DIM0xSDS_DIM1 SDS. */ dim_sizes[0] = SDS_DIM0; dim_sizes[1] = SDS_DIM1; dim_sizes[2] = SDS_DIM2; sds_id = SDcreate(sd_id, SDS_NAME_CH3D, DFNT_INT16, RANK_CH3, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for chunking/szip compression testing"); /* Create a similar SDS and will make it chunked, but will not write data to it */ sds_id0 = SDcreate(sd_id, SDS_NAME_CH0, DFNT_INT16, RANK_CH3, dim_sizes); CHECK(sds_id0, FAIL, "SDcreate:Failed to create a data set for chunking/szip compression testing"); /* Fill the SDS array with the fill value. */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Set parameters for Chunking/SZIP */ c_def.comp.comp_type = COMP_CODE_SZIP; c_def.comp.cinfo.szip.pixels_per_block = 2; c_def.comp.cinfo.szip.options_mask = SZ_EC_OPTION_MASK; c_def.comp.cinfo.szip.options_mask |= SZ_MSB_OPTION_MASK; c_def.comp.cinfo.szip.bits_per_pixel = 2; c_def.comp.cinfo.szip.pixels = 16; c_def.comp.cinfo.szip.pixels_per_scanline = 2; c_flags = HDF_CHUNK | HDF_COMP; status = SDsetchunk(sds_id0, c_def, c_flags); status = SDsetchunk(sds_id, c_def, c_flags); CHECK(status, FAIL, "SDsetchunk"); start[0] = 0; start[1] = 0; start[2] = 0; edges[0] = SDS_DIM0; edges[1] = SDS_DIM1; edges[2] = SDS_DIM2; status = SDwritedata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDwritedata"); memset(&c_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(sds_id0, &c_def_out, &c_flags_out); CHECK(status, FAIL, "SDgetchunkinfo"); VERIFY(c_flags_out, c_flags, "SDgetchunkinfo"); VERIFY(c_def_out.comp.comp_type, COMP_CODE_SZIP, "SDgetchunkinfo"); memset(&c_def_out, 0, sizeof(HDF_CHUNK_DEF)); c_flags_out = 0; status = SDgetchunkinfo(sds_id, &c_def_out, &c_flags_out); CHECK(status, FAIL, "SDgetchunkinfo"); VERIFY(c_flags_out, c_flags, "SDgetchunkinfo"); VERIFY(c_def_out.comp.comp_type, COMP_CODE_SZIP, "SDgetchunkinfo"); /* Terminate access to the data sets. */ status = SDendaccess(sds_id0); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the compressed data */ /* Reopen the file and access the first data set. */ sd_id = SDstart(FILE_NAME_3D, DFACC_READ); sds_index = 0; sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for chunking/szip compression testing"); /* Retrieve compression information about the dataset */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ memset(&cinfo, 0, sizeof(cinfo)); status = SDgetcompinfo(sds_id, &comp_type, &cinfo); CHECK(status, FAIL, "SDgetcompinfo"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcompinfo"); /* Retrieve compression method alone from the dataset */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcomptype"); start[0] = 0; start[1] = 0; start[2] = 0; edges[0] = SDS_DIM0; edges[1] = SDS_DIM1; edges[2] = SDS_DIM2; status = SDreaddata(sds_id, start, NULL, edges, (void *)all_data); CHECK(status, FAIL, "SDreaddata"); for (i = 0; i < SDS_DIM0; i++) { for (j = 0; j < SDS_DIM1; j++) { for (k = 0; k < SDS_DIM2; k++) { if (out_data[i][j][k] != all_data[i][j][k]) { fprintf(stderr, "Bogus val in loc [%d][%d][%d] want %d got %d\n", i, j, k, out_data[i][j][k], all_data[i][j][k]); num_errs++; } } } } /* Terminate access to the data set. */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file. */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_chunk_3D */ /* * At this time, the use of SZIP compression with unlimited dimension SDSs * is unavailable. This test program is to verify that the feature is * correctly disabled. */ #define FILE_NAME_UNLIM "SDSunlimitedsziped.hdf" #define SDS_NAME_UNLIM "UnlimitedData" static intn test_szip_unlimited() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; comp_info c_info; int32 start[2], edges[2]; int32 fill_value = 0; /* Fill value */ int i, j; int num_errs = 0; /* number of errors so far */ int32 out_data[LENGTH][WIDTH]; int32 in_data[LENGTH][WIDTH] = { {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {100, 100, 200, 200, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {300, 300, 0, 400, 300, 400}, {0, 0, 600, 600, 300, 400}, {500, 500, 600, 600, 300, 400}, {0, 0, 600, 600, 300, 400}}; /********************* End of variable declaration ***********************/ /* Create the file and initialize SD interface */ sd_id = SDstart(FILE_NAME_UNLIM, DFACC_CREATE); CHECK(sd_id, FAIL, "SDstart"); /* Create the SDS */ dim_sizes[0] = SD_UNLIMITED; dim_sizes[1] = WIDTH; sds_id = SDcreate(sd_id, SDS_NAME, DFNT_INT32, RANK, dim_sizes); CHECK(sds_id, FAIL, "SDcreate:Failed to create a data set for szip compression testing"); /* Define the location, pattern, and size of the data set */ for (i = 0; i < RANK; i++) { start[i] = 0; } edges[0] = LENGTH; edges[1] = WIDTH; /* Fill the SDS array with the fill value */ status = SDsetfillvalue(sds_id, (void *)&fill_value); CHECK(status, FAIL, "SDsetfillvalue"); /* Initialize for SZIP */ c_info.szip.pixels_per_block = 2; c_info.szip.options_mask = SZ_EC_OPTION_MASK; c_info.szip.options_mask |= SZ_RAW_OPTION_MASK; c_info.szip.bits_per_pixel = 0; c_info.szip.pixels = 0; c_info.szip.pixels_per_scanline = 0; /* Attempting to set SZIP compression will fail because SZIP is * not available with unlimited dimension yet */ status = SDsetcompress(sds_id, COMP_CODE_SZIP, &c_info); VERIFY(status, FAIL, "SDsetcompress"); /* Write data to the SDS; data will be uncompressed */ status = SDwritedata(sds_id, start, NULL, edges, (void *)in_data); CHECK(status, FAIL, "SDwritedata"); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file to flush the compressed info to the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* * Verify the written data */ /* Reopen the file and select the first SDS */ sd_id = SDstart(FILE_NAME_UNLIM, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for testing szip compression with unlimited dimension"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ start[0] = 0; start[1] = 0; edges[0] = LENGTH; edges[1] = WIDTH; status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < LENGTH; j++) { for (i = 0; i < WIDTH; i++) if (out_data[j][i] != in_data[j][i]) { fprintf(stderr, "Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_szip_unlimited */ #endif /* only compile all the above test functions when encoder is available */ /******************************************************************** Name: test_getszipinfo() - verifies that some functions will not fail even though SZIP library is not present or only decoder is available. Description: In the past, some SD APIs will fail if szlib was not present. These functions have been revised so that they are no longer depending on SZIP library. New APIs are designed to function correctly as well. The functions below are being tested here: - SDgetcomptype - SDgetdatasize This test function opens an existing file containing datasets with SZIP compression and verifies that the above APIs will work with or without SZIP library. The input file, sds_szipped.dat, is generated by the program mfhdf/libsrc/gen_sds_szipped.c Return value: The number of errors occurred in this routine. *********************************************************************/ #define SZIP_FILE "sds_szipped.dat" /* generated by gen_sds_szipped.c */ #define SDS1_NAME "TwoDimsInt32" #define RANK 2 #define SZ_WIDTH 5 #define SZ_LENGTH 16 static intn test_getszipinfo() { /************************* Variable declaration **************************/ int32 sd_id, sds_id, sds_index; intn status; int32 dim_sizes[2] = {-1, -1}; int32 array_rank = -1; int32 num_type = -1; int32 attributes = -1; char name[H4_MAX_NC_NAME]; comp_coder_t comp_type; int32 comp_size = -1; int32 uncomp_size = -1; int32 orig_size = -1; int num_errs = 0; /* number of errors so far */ const char *testfile = get_srcdir_filename("sds_szipped.dat"); /********************* End of variable declaration ***********************/ /* Open the file and select dataset SDS1_NAME */ sd_id = SDstart(testfile, DFACC_RDONLY); CHECK(sd_id, FAIL, "SDstart"); sds_index = SDnametoindex(sd_id, SDS1_NAME); CHECK(sds_index, FAIL, "SDnametoindex"); sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve and verify information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); VERIFY(array_rank, RANK, "SDgetinfo"); VERIFY(dim_sizes[0], SZ_LENGTH, "SDgetinfo"); VERIFY(dim_sizes[1], SZ_WIDTH, "SDgetinfo"); VERIFY(num_type, DFNT_INT32, "SDgetinfo"); VERIFY(attributes, 0, "SDgetinfo"); /* Get the compression method and verify it */ comp_type = COMP_CODE_INVALID; /* reset variables before retrieving info */ status = SDgetcomptype(sds_id, &comp_type); CHECK(status, FAIL, "SDgetcomptype"); VERIFY(comp_type, COMP_CODE_SZIP, "SDgetcomptype"); /* Get the compressed data size and non-compressed data size */ status = SDgetdatasize(sds_id, &comp_size, &uncomp_size); CHECK(status, FAIL, "SDgetdatasize"); /* Compute the uncompressed/original size of the data for comparison */ orig_size = SZ_WIDTH * SZ_LENGTH * SIZE_INT32; VERIFY(uncomp_size, orig_size, "SDgetdatasize"); /* In this test, compressed data size should be smaller than non-compressed data size */ if (comp_size >= uncomp_size) { printf("*** Routine test_getszipinfo: FAILED at line %d ***\n", __LINE__); printf(" In this test, compressed data size (%d) should be smaller than non-compressed data size " "(%d)\n", comp_size, uncomp_size); num_errs++; } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_getszipinfo */ /******************************************************************** Name: test_getszipdata() - verifies that SZIP compressed data can be read when either SZIP library encoder or only decoder is present Description: This test function opens the existing file "sds_szipped.dat" that contains a dataset with SZIP compression and verifies that the SZIP compressed data can be read with or without the encoder as long as the szlib is available. The input file, sds_szipped.dat, is generated by the program mfhdf/libsrc/gen_sds_szipped.c Return value: The number of errors occurred in this routine. *********************************************************************/ #ifdef H4_HAVE_LIBSZ /* needed to read data, either decoder or encoder */ static intn test_getszipdata() { /************************* Variable declaration **************************/ int32 sd_id, sds_id; intn status; int32 dim_sizes[2], array_rank, num_type, attributes; char name[H4_MAX_NC_NAME]; int32 start[2], edges[2]; int i, j; int num_errs = 0; /* number of errors so far */ int32 out_data[SZ_LENGTH][SZ_WIDTH]; const char *testfile = get_srcdir_filename("sds_szipped.dat"); /* data to compare against read data from sds_szipped.dat */ int32 in_data[SZ_LENGTH][SZ_WIDTH] = { {100, 100, 200, 200, 300}, {0, 0, 0, 0, 0}, {100, 100, 200, 200, 300}, {400, 300, 200, 100, 0}, {300, 300, 0, 400, 300}, {300, 300, 0, 400, 300}, {300, 300, 0, 400, 300}, {0, 0, 600, 600, 300}, {500, 500, 600, 600, 300}, {0, 0, 600, 600, 300}, {0, 0, 600, 600, 300}, {0, 0, 600, 600, 300}, {0, 0, 600, 600, 300}, {500, 500, 600, 600, 300}, {500, 500, 600, 600, 300}, {500, 500, 600, 600, 300}}; /********************* End of variable declaration ***********************/ /* Open the file */ sd_id = SDstart(testfile, DFACC_READ); CHECK(sd_id, FAIL, "SDstart"); /* Get the first SDS */ sds_id = SDselect(sd_id, 0); CHECK(sds_id, FAIL, "SDselect:Failed to select a data set for szip compression testing"); /* Retrieve information of the data set */ status = SDgetinfo(sds_id, name, &array_rank, dim_sizes, &num_type, &attributes); CHECK(status, FAIL, "SDgetinfo"); /* Prepare for reading */ start[0] = 0; start[1] = 0; edges[0] = dim_sizes[0]; edges[1] = dim_sizes[1]; /* Wipe out the output buffer */ memset(&out_data, 0, sizeof(out_data)); /* Read the data set */ status = SDreaddata(sds_id, start, NULL, edges, (void *)out_data); CHECK(status, FAIL, "SDreaddata"); /* Compare read data against input data */ for (j = 0; j < SZ_LENGTH; j++) { for (i = 0; i < SZ_WIDTH; i++) if (out_data[j][i] != in_data[j][i]) { fprintf(stderr, "This one: Bogus val in loc [%d][%d] in compressed dset, want %ld got %ld\n", j, i, (long)in_data[j][i], (long)out_data[j][i]); num_errs++; } } /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Terminate access to the SD interface and close the file */ status = SDend(sd_id); CHECK(status, FAIL, "SDend"); /* Return the number of errors that's been kept track of so far */ return num_errs; } /* test_getszipdata */ #endif /* ifdef H4_HAVE_LIBSZ */ /* * Test drive for testing the szip compression feature with SD interface */ extern int test_szip_compression() { int num_errs = 0; /* Output message about test being performed */ TESTING("szip compression for datasets (tszip.c)"); #ifdef H4_HAVE_SZIP_ENCODER /* Test creating and writing SZIP compressed data only when szlib encoder is available */ num_errs = num_errs + test_szip_SDS8bit(); num_errs = num_errs + test_szip_SDS16bit(); num_errs = num_errs + test_szip_SDS32bit(); num_errs = num_errs + test_szip_SDSfl32bit(); num_errs = num_errs + test_szip_SDSfl64bit(); num_errs = num_errs + test_szip_chunk(); num_errs = num_errs + test_szip_unlimited(); num_errs = num_errs + test_szip_chunk_3d(); #else /* printf("Test creating and writing SZIP compressed data \tSKIPPED\n"); */ #endif #ifdef H4_HAVE_LIBSZ /* Test reading szipped data when szlib is available, either with encoder or only decoder */ num_errs = num_errs + test_getszipdata(); #else /* printf("Test reading SZIP compressed data \tSKIPPED\n"); */ #endif /* Test reading szip compression information and should pass with or without SZIP library */ num_errs = num_errs + test_getszipinfo(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tunlim.c000066400000000000000000000672671503061704500165700ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**************************************************************************** * tunlim.c - tests reading/writing variables with unlimited dimension using * SD API. The tests here are added to test the behavior of the * library when dealing with unlimited dimensions with nc API. The * tests show that the data is correctly written when: * + data added immediately after last record * + data added skipping one or more records * + data overridden existing data * + data read pass the end of that variable but not the max in * all the variables in the file * * Structure of the file: * test_unlim - test driver * test_1dim_singlevar - tests on a single variable with only 1 dimension * test_1dim_multivars - tests on multiple variables with only 1 dimension * test_multidim_singlevar - tests on single variable with multiple * dimensions * test_1dim_multivars_addon - tests multiple 1-dim variables that were * added on to existing file * ****************************************************************************/ #include #include "mfhdf.h" #include "hdftest.h" #define DIM0 20 /******************************************************************** Name: verify_info_data() - utility function that verifies the unlimited dimension's size and the variable's data. Description: This utility function carries out the following tasks: - SDgetinfo to get the size of the unlimited dimension - SDreaddata to read the variable up to the unlimited dimension's size, that is the max number of records in the file - memcmp to verify that the read buffer is as expected It is used by only test_1dim_singlevar, test_1dim_multivars, and test_1dim_multivars_addon because it only handles 1-dim dataset and number type int16. It can be revised for multi-dim datasets or any number types, if desired. Return value: The number of errors occurred in this routine. *********************************************************************/ int verify_info_data(int32 sds_id, int32 expected_dimsize, int16 *result) { int32 dimsizes[1]; /* dimension size buffer */ int32 start[1], /* where to start reading */ edges[1]; /* length of data to be read/written */ char info[40]; /* holds brief info where failure occurs */ int16 outdata[DIM0]; /* data read back */ char ds_name[20]; /* dataset name */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors */ /* Get information of the first dataset, and verify its dimension */ status = SDgetinfo(sds_id, ds_name, NULL, dimsizes, NULL, NULL); sprintf(info, "%s on <%s>", "SDgetinfo", ds_name); CHECK(status, FAIL, info); VERIFY(dimsizes[0], expected_dimsize, info); /* Read back data and verify */ start[0] = 0; edges[0] = dimsizes[0]; status = SDreaddata(sds_id, start, NULL, edges, (void *)outdata); sprintf(info, "%s on <%s>", "SDreaddata", ds_name); CHECK(status, FAIL, info); /* Verify read data by comparing the output buffer against expected data */ status = memcmp(outdata, result, edges[0] * SIZE_INT16); if (status != 0) fprintf(stderr, "For SDS %s: Read data doesn't match input\n", ds_name); /* Return the number of errors occurred here */ return (num_errs); } /******************************************************************** Name: test_1dim_singlevar() - tests on a single variable with only 1 dimension Description: The main contents include: - write 4 elements starting at index 0 - try reading 2 elements pass the end, should fail - append 2 elements starting at index 6, that is indices 4 and 5 will be written with fill value - append 3 elements immediately at the end of the data - overwrite indices 0 and 1 Return value: The number of errors occurred in this routine. *********************************************************************/ #define FILENAME1 "onedimonevar.nc" static int test_1dim_singlevar() { int32 fid; /* file id */ int32 dset1; /* dataset ids */ int32 dimsizes[1]; /* dimension size buffer */ int32 start[1], /* where to start writing */ edges[1]; /* length of data to be read/written */ int16 fillval = 99; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data; the first two elements will be changed to "1,2" later for the last test. */ int16 result[] = {300, 301, 302, 303, 99, 99, 30, 31, 801, 802, 803}; /* enter define mode */ fid = SDstart(FILENAME1, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define dimension of the data set to be created. */ dimsizes[0] = SD_UNLIMITED; /* Create an array data sets. */ dset1 = SDcreate(fid, "Variable 1", DFNT_INT16, 1, dimsizes); CHECK(dset1, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data */ int16 data[] = {300, 301, 302, 303}; /* Write 4 elements starting at index 0 */ start[0] = 0; edges[0] = 4; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its data and dim size */ num_errs = num_errs + verify_info_data(dset1, 4, result); { /* Append data to dataset pass the end */ int16 data[] = {30, 31}; /* Write 2 values starting at index 6 */ start[0] = 6; edges[0] = 2; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ num_errs = num_errs + verify_info_data(dset1, 8, result); { /* Append data to dataset at the end */ int16 data[] = {801, 802, 803}; /* Write 3 values starting at index 8, at the end */ start[0] = 8; edges[0] = 3; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ num_errs = num_errs + verify_info_data(dset1, 11, result); { /* Override the first 2 elements */ int16 data[] = {1, 2}; /* Write 2 values starting at 0 */ start[0] = 0; edges[0] = 2; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Modify the first 2 elements of the result buffer appropriately */ result[0] = 1; result[1] = 2; /* Get information of the dataset, and verify its dimension */ num_errs = num_errs + verify_info_data(dset1, 11, result); /* Close the dataset */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); return 0; } /******************************************************************** Name: test_1dim_multivars() - tests reading/writing on multiple variables, each has 1 dimension Description: The main contents include: - write 4 elements starting at index 0 to variable #1 - write 2 elements starting at index 0 to variable #2 - close file and reopen for read/write - append 2 elements to variable #1, immediately after last written record - write 3 elements to variable #2, starting at index 4 - append 3 elements to variable #1, skipping 5 records after the last written record Return value: The number of errors occurred in this routine. *********************************************************************/ #define FILENAME2 "onedimmultivars.nc" static int test_1dim_multivars() { int32 fid; /* file id */ int32 dset1, dset2; /* dataset ids */ int32 dimsizes[1]; /* dimension size buffer */ int32 start[1], /* where to start writing */ edges[1]; /* length of data to be read/written */ int16 outdata[DIM0]; /* data read back */ int16 fillval1 = -1; /* fill value for the variable */ int16 fillval2 = -2; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ int16 result1[] = {300, 301, 302, 303, -1, -1, 400, 401, 500, 501, 502}; int16 result2[] = {102, 104, -2, -2, -2, -2, -2, -2, 200, 201, 202, 800, 801, 802, 803}; /* enter define mode */ fid = SDstart(FILENAME2, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define dimension of the data set to be created. */ dimsizes[0] = SD_UNLIMITED; /* Create two array data sets. */ dset1 = SDcreate(fid, "Variable 1", DFNT_INT16, 1, dimsizes); CHECK(dset1, FAIL, "SDcreate"); dset2 = SDcreate(fid, "Variable 2", DFNT_INT16, 1, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval1); CHECK(status, FAIL, "SDsetfillvalue"); status = SDsetfillvalue(dset2, (void *)&fillval2); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data */ int16 data[] = {300, 301, 302, 303}; int16 data2[] = {102, 104}; /* Write 4 elements to first dataset starting at index 0 */ start[0] = 0; edges[0] = 4; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Write 2 elements to second dataset starting at index 0 */ edges[0] = 2; status = SDwritedata(dset2, start, NULL, edges, (void *)data2); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the first dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset1, 4, result1); /* Get information of the second dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset2, 2, result2); /* Try reading pass the end, should fail */ edges[0] = 6; status = SDreaddata(dset1, start, NULL, edges, (void *)outdata); VERIFY(status, FAIL, "SDreaddata"); { /* Append data to first dataset pass the end */ int16 data[] = {400, 401}; /* Write 2 values starting at index 6 */ start[0] = 6; edges[0] = 2; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the first dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset1, 8, result1); /* Get information of the second dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset2, 2, result2); { /* Append data to first dataset at the end */ int16 data[] = {500, 501, 502}; /* Write 3 values starting at index 8 */ start[0] = 8; edges[0] = 3; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the first dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset1, 11, result1); { /* Append data to second dataset pass its end */ int16 data[] = {200, 201, 202}; /* Write 2 values starting at index 8 */ start[0] = 8; edges[0] = 3; status = SDwritedata(dset2, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the second dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset2, 11, result2); { /* Append data to second dataset at its end */ int16 data[] = {800, 801, 802, 803}; /* Write 2 values starting at index 11 */ start[0] = 11; edges[0] = 4; status = SDwritedata(dset2, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the first dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset1, 11, result1); /* Get information of the second dataset, and verify its data and dimsize */ num_errs = num_errs + verify_info_data(dset2, 15, result2); /* Close the dataset */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); return 0; } /******************************************************************** Name: test_multidim_singlevar() - tests on a single variable with more than one dimension Description: The main contents include: - create a 3-D variable with 1 unlimited dimension and the others 3x2 - write 4x1x1 elements starting at index {0,0,0} - append 2x1x1 elements along the unlimited dimension starting at index 6, that is slabs at indices 4 and 5 will be written with fill value - append 1x3x2 elements immediately at the end of the data Return value: The number of errors occurred in this routine. *********************************************************************/ #define DIM00 10 #define DIM1 3 #define DIM2 2 #define FILENAME3 "multidimvar.nc" static int test_multidim_singlevar() { int32 fid; /* file id */ int32 dset1; /* dataset id */ int32 dset_index; /* dataset index */ int32 dimsizes[3]; /* dimension size buffer */ int32 start[3], /* where to start reading */ edges[3]; /* length of data to be read */ int16 outdata[DIM0][DIM1][DIM2]; /* data read back */ int16 fillval = -3; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ int16 result[DIM00][DIM1][DIM2] = {{{300, -3}, {-3, -3}, {-3, -3}}, {{301, -3}, {-3, -3}, {-3, -3}}, {{302, -3}, {-3, -3}, {-3, -3}}, {{303, -3}, {-3, -3}, {-3, -3}}, {{-3, -3}, {-3, -3}, {-3, -3}}, {{-3, -3}, {-3, -3}, {-3, -3}}, {{400, -3}, {-3, -3}, {-3, -3}}, {{401, -3}, {-3, -3}, {-3, -3}}, {{800, 801}, {802, 803}, {804, 805}}}; /* result data to compare against read data; the first two elements will be changed to "1,2" later for the last test. */ /* enter define mode */ fid = SDstart(FILENAME3, DFACC_CREATE); CHECK(fid, FAIL, "SDstart"); /* Define dimension of the data set to be created. */ dimsizes[0] = SD_UNLIMITED; dimsizes[1] = DIM1; dimsizes[2] = DIM2; /* Create an array data sets. */ dset1 = SDcreate(fid, "Variable 3D", DFNT_INT16, 3, dimsizes); CHECK(dset1, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data */ int16 data[] = {300, 301, 302, 303}; int32 startw[3], edgesw[3]; /* Write 4 elements starting at index 0 */ startw[0] = startw[1] = startw[2] = 0; /* starting writing at {0,0,0} */ edgesw[0] = 4; /* 4x1x1 slab */ edgesw[1] = 1; edgesw[2] = 1; status = SDwritedata(dset1, startw, NULL, edgesw, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ status = SDgetinfo(dset1, NULL, NULL, dimsizes, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(dimsizes[0], 4, "SDgetinfo"); /* Read and verify data of the dataset */ start[0] = start[1] = start[2] = 0; edges[0] = dimsizes[0]; edges[1] = DIM1; edges[2] = DIM2; status = SDreaddata(dset1, start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); status = memcmp(outdata, result, edges[0] * DIM1 * DIM2 * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* Close the dataset */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Reopen file and dataset */ fid = SDstart(FILENAME3, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); dset_index = SDnametoindex(fid, "Variable 3D"); CHECK(dset_index, FAIL, "SDnametoindex"); dset1 = SDselect(fid, dset_index); CHECK(dset1, FAIL, "SDselect"); { /* Append data to the dataset pass the end */ int16 data[] = {400, 401}; int32 startw[3], edgesw[3]; startw[0] = 6; /* the end is at 3 */ startw[1] = startw[2] = 0; /* writing at {6,0,0} */ edgesw[0] = 2; /* two slabs */ edgesw[1] = edgesw[2] = 1; /* Write 2 slabs starting at index 6 */ status = SDwritedata(dset1, startw, NULL, edgesw, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ status = SDgetinfo(dset1, NULL, NULL, dimsizes, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(dimsizes[0], 8, "SDgetinfo"); /* Read and verify data of the dataset */ /* start[], edges[1], and edges[2] same as last reading */ edges[0] = dimsizes[0]; status = SDreaddata(dset1, start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); status = memcmp(outdata, result, edges[0] * DIM1 * DIM2 * sizeof(int16)); VERIFY(status, 0, "memcmp"); { /* Append data to the dataset at the end */ int16 data[] = {800, 801, 802, 803, 804, 805}; int32 startw[3], edgesw[3]; startw[0] = dimsizes[0]; /* writing at the end */ startw[1] = startw[2] = 0; /* writing at {8,0,0} */ edgesw[0] = 1; /* 1 slab */ edgesw[1] = DIM1; edgesw[2] = DIM2; /* Write 2 slabs starting at index 8 */ status = SDwritedata(dset1, startw, NULL, edgesw, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its dimension */ status = SDgetinfo(dset1, NULL, NULL, dimsizes, NULL, NULL); CHECK(status, FAIL, "SDgetinfo"); VERIFY(dimsizes[0], 9, "SDgetinfo"); /* Read and verify data of the dataset */ /* start[], edges[1], and edges[2] same as last reading */ edges[0] = dimsizes[0]; status = SDreaddata(dset1, start, NULL, edges, (void *)outdata); CHECK(status, FAIL, "SDreaddata"); status = memcmp(outdata, result, edges[0] * DIM1 * DIM2 * sizeof(int16)); VERIFY(status, 0, "memcmp"); /* data should be 300 -3 301 -3 302 -3 303 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... -3 -3 -3 -3 -3 -3 -3 -3 ... ... -3 -3 -3 -3 400 -3 401 -3 800 801 ... -3 -3 -3 -3 -3 -3 -3 -3 802 803 ... -3 -3 -3 -3 -3 -3 -3 -3 804 805 unlimited dimension ----> (-3 is fill value) */ /* Close the dataset */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); return 0; } /******************************************************************** Name: test_1dim_multivars_addon() - tests adding unlimited dimension dataset to an existing file Description: The main contents include: - open FILENAME2 - create a 1-dim unlimited dimension dataset - close the file, then reopen it - open the previous dataset and create another one - write 4 elements to first and 3 to second, starting at index 0 - append 2 elements to first dataset, starting at index 6, that is passed the end - append 3 elements to first dataset, immediately at the end of the data - append 3 elements to second dataset, skipping 5 elements - verify data in various places Return value: The number of errors occurred in this routine. *********************************************************************/ static int test_1dim_multivars_addon() { int32 fid; /* file id */ int32 dset1, dset2; /* dataset ids */ int32 dset_index; /* dataset index */ int32 dimsizes[1]; /* dimension size buffer */ int32 start[1], /* where to start writing */ edges[1]; /* length of data to be read/written */ int16 fillval = -3; /* fill value for the variable */ intn status = 0; /* returned by called functions */ intn num_errs = 0; /* number of errors so far */ /* result data to compare against read data */ int16 result3[] = {300, 301, 302, 303, -3, -3, 30, 31, 801, 802, 803}; int16 result4[] = {300, 301, 302, -3, -3, -3, -3, -3, 801, 802, 803}; /* enter define mode */ fid = SDstart(FILENAME2, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); /* Define dimension of the data set to be created. */ dimsizes[0] = SD_UNLIMITED; /* Create an array data sets. */ dset1 = SDcreate(fid, "Variable 3", DFNT_INT16, 1, dimsizes); CHECK(dset1, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset1, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); /* Close dataset and file */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDend(fid); CHECK(status, FAIL, "SDend"); /* Reopen file and dataset */ fid = SDstart(FILENAME2, DFACC_RDWR); CHECK(fid, FAIL, "SDstart"); dset_index = SDnametoindex(fid, "Variable 3"); CHECK(dset_index, FAIL, "SDnametoindex"); dset1 = SDselect(fid, dset_index); CHECK(dset1, FAIL, "SDselect"); /* Create another dataset */ dset2 = SDcreate(fid, "Variable 4", DFNT_INT16, 1, dimsizes); CHECK(dset2, FAIL, "SDcreate"); /* Datasets will be filled with fill values when data is missing */ status = SDsetfillvalue(dset2, (void *)&fillval); CHECK(status, FAIL, "SDsetfillvalue"); { /* Add data */ int16 data[] = {300, 301, 302, 303}; /* Write 4 elements to "Variable 3" starting at index 0 */ start[0] = 0; edges[0] = 4; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); /* Write 3 elements to "Variable 4" starting at index 0 */ edges[0] = 3; status = SDwritedata(dset2, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the datasets, and verify their data and dim sizes */ num_errs = num_errs + verify_info_data(dset1, 4, result3); num_errs = num_errs + verify_info_data(dset2, 3, result4); { /* Append data to "Variable 3" pass the end */ int16 data[] = {30, 31}; /* Write 2 values starting at index 6, skipping indices 4 and 5 */ start[0] = 6; edges[0] = 2; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the dataset, and verify its data and dim size */ num_errs = num_errs + verify_info_data(dset1, 8, result3); { /* Append data to "Variable 3" again, but right at the end */ int16 data[] = {801, 802, 803}; /* Write 3 values starting at index 8, at the end */ start[0] = 8; edges[0] = 3; status = SDwritedata(dset1, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of "Variable 3", and verify its dimension */ num_errs = num_errs + verify_info_data(dset1, 11, result3); { /* Append data to "Variable 4" at an arbitrary index, skipping a few */ int16 data[] = {801, 802, 803}; /* Write 3 values starting at index 8, at the end */ start[0] = 8; edges[0] = 3; status = SDwritedata(dset2, start, NULL, edges, (void *)data); CHECK(status, FAIL, "SDwritedata"); } /* Get information of the "Variable 4" and verify its data and dim size */ num_errs = num_errs + verify_info_data(dset2, 11, result4); { /* Read and verify data from dataset "Variable 2" that was created in test_1dim_multivars */ int32 dset; int16 result2[] = {102, 104, -2, -2, -2, -2, -2, -2, 200, 201, 202, 800, 801, 802, 803}; /* Get access to dataset "Variable 2" */ dset_index = SDnametoindex(fid, "Variable 2"); CHECK(dset_index, FAIL, "SDnametoindex"); dset = SDselect(fid, dset_index); CHECK(dset, FAIL, "SDselect"); /* Get its information and verify its data and dimension size */ num_errs = num_errs + verify_info_data(dset, 15, result2); /* Close "Variable 2" */ status = SDendaccess(dset); CHECK(status, FAIL, "SDendaccess"); } /* end reading "Variable 2" */ /* Close all datasets */ status = SDendaccess(dset1); CHECK(status, FAIL, "SDendaccess"); status = SDendaccess(dset2); CHECK(status, FAIL, "SDendaccess"); /* Close the file */ status = SDend(fid); CHECK(status, FAIL, "SDend"); return 0; } /* test_1dim_multivars_addon */ /* Test driver for testing reading/writing variables with unlimited dimension using SD API. */ extern int test_unlim() { int num_errs = 0; /* Output message about test being performed */ TESTING("read/write datasets with unlimited dims via SD API (tunlim.c)"); /* Test single variable with 1 unlimited dimension */ num_errs = num_errs + test_1dim_singlevar(); /* Test multiple variables with 1 unlimited dimension */ num_errs = num_errs + test_1dim_multivars(); /* Test multiple variables with multiple dimensions */ num_errs = num_errs + test_multidim_singlevar(); /* Test multiple variables created at different time */ num_errs = num_errs + test_1dim_multivars_addon(); if (num_errs == 0) PASSED(); else H4_FAILED(); /* Return the number of errors that's been kept track of so far */ return num_errs; } hdf4-hdf4.3.1/mfhdf/test/tutils.c000066400000000000000000000267351503061704500165770ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "mfhdf.h" #include "hdftest.h" #include "srcdir_str.h" /* Buffer to construct path in and return pointer to */ static char srcdir_path[1024]; /* Buffer to construct file in and return pointer to */ static char srcdir_testpath[1024]; /*------------------------------------------------------------------------- * Function: get_srcdir_filename * * Purpose: Append the test file name to the srcdir path and return the whole string * * Return: The string or NULL (errors or not enough space) * *------------------------------------------------------------------------- */ const char * get_srcdir_filename(const char *filename) { const char *srcdir = get_srcdir(); /* Check for error */ if (NULL == srcdir) return NULL; /* Build path to test file */ if ((strlen(srcdir) + strlen(filename) + 1) < sizeof(srcdir_testpath)) { snprintf(srcdir_testpath, sizeof(srcdir_testpath), "%s/%s", srcdir, filename); return srcdir_testpath; } /* If not enough space, just return NULL */ return NULL; } /* end get_srcdir_filename() */ /*------------------------------------------------------------------------- * Function: get_srcdir * * Purpose: Just return the srcdir path * * Return: The string * *------------------------------------------------------------------------- */ const char * get_srcdir(void) { const char *srcdir = getenv("srcdir"); /* Check for using the srcdir from configure time */ if (NULL == srcdir) srcdir = config_srcdir; /* Build path to all test files */ if ((strlen(srcdir) + 2) < sizeof(srcdir_path)) { snprintf(srcdir_path, sizeof(srcdir_path), "%s/", srcdir); return (srcdir_path); } else return NULL; } /* end get_srcdir() */ /******************************************************************** Name: make_sourcepath() - Generates the source path Description: Generate the path of srcdir if it exists, otherwise, assume it is the current directory. Return value: Returns SUCCEED if the source path is generated successfully, or FAIL, otherwise. *********************************************************************/ intn make_sourcepath(char *src_path, unsigned int size) { char *srcdir = getenv("srcdir"); char *tempdir = NULL; tempdir = (char *)malloc(size * sizeof(char)); CHECK_ALLOC(tempdir, "tempdir", "make_sourcepath"); memset(tempdir, 0, size); /* Generate the source path */ if (srcdir && ((strlen(srcdir)) + 1) < size) { strcpy(tempdir, srcdir); strcat(tempdir, "/"); strcat(tempdir, "\0"); } /* No srcdir option */ if (srcdir == NULL) strcpy(tempdir, "./"); /* Verify that source path is not NULL */ if (tempdir == NULL || tempdir[0] == '\0') return FAIL; strcpy(src_path, tempdir); free(tempdir); return SUCCEED; } /******************************************************************** Name: make_SDS() - Creates and writes a 3-D unlimited SDS. Description: Calls SDcreate, SDwritedata, and SDendaccess to create a 3-D unlimited SDS, then close it. (Note: should be modified for more different ranks.) Return value: Returns the size of the data that had been written successfully, of FAIL. *********************************************************************/ int32 make_SDS(int32 sd_id, char *sds_name, int32 type, int32 rank, int32 *dim_sizes, int32 unlim_dim, void *written_data) { int32 sds_id; int32 *start, *edges; int32 sds_size = 0, count = 0; intn status, ii; intn num_errs = 0; /* number of errors in compression test so far */ start = (int32 *)malloc(sizeof(int32) * rank); CHECK_ALLOC(start, "start", "make_SDS"); edges = (int32 *)malloc(sizeof(int32) * rank); CHECK_ALLOC(edges, "edges", "make_SDS"); /* Create the array with the name defined in SDS_NAME */ sds_id = SDcreate(sd_id, sds_name, type, rank, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); /* Set the parameters start and edges to write */ for (ii = 0; ii < rank; ii++) { start[ii] = 0; edges[ii] = dim_sizes[ii]; } /* Give real size to the unlimited dimension */ if (dim_sizes[0] == SD_UNLIMITED) edges[0] = unlim_dim; /* Write the data */ status = SDwritedata(sds_id, start, NULL, edges, written_data); CHECK(status, FAIL, "SDwritedata"); /* Calculate data set's size to verify later */ for (ii = 0; ii < rank; ii++) { if (ii == 0) count = edges[0]; else count = count * edges[ii]; } sds_size = count * DFKNTsize(type); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); free(edges); free(start); /* Return the size of data being written if no error */ if (num_errs == 0) return (sds_size); else return FAIL; } /* make_SDS */ /******************************************************************** Name: make_Ext3D_SDS() - Creates and writes a 3D SDS with external data. Description: Calls SDcreate, SDsetexternalfile, SDwritedata, and SDendaccess to create a 3-D SDS with external data storage, then close it. (Note: should be modified for different ranks.) Return value: Returns the size of the data that had been written successfully. Return value: None. *********************************************************************/ int32 make_Ext3D_SDS(int32 sd_id, char *sds_name, int32 type, int32 rank, int32 *dim_sizes, void *written_data, int32 offset, char *ext_file_name) { int32 sds_id; int32 *start, *edges; int32 sds_size = 0, count; intn status = 0, ii; intn num_errs = 0; /* number of errors in compression test so far */ start = (int32 *)malloc(sizeof(int32) * rank); CHECK_ALLOC(start, "start", "make_Ext3D_SDS"); edges = (int32 *)malloc(sizeof(int32) * rank); CHECK_ALLOC(edges, "edges", "make_Ext3D_SDS"); /* Set the parameters start and edges to write */ for (ii = 0; ii < rank; ii++) { start[ii] = 0; edges[ii] = dim_sizes[ii]; } /* Create the array with the name defined in SDS_NAME. */ sds_id = SDcreate(sd_id, sds_name, type, rank, dim_sizes); CHECK(sds_id, FAIL, "SDcreate"); status = SDsetexternalfile(sds_id, ext_file_name, offset); CHECK(status, FAIL, "SDsetexternalfile"); /* Write the data */ status = SDwritedata(sds_id, start, NULL, edges, written_data); CHECK(status, FAIL, "SDwritedata"); /* Calculate data set's size to verify later */ count = 1; for (ii = 0; ii < rank; ii++) { count = count * dim_sizes[ii]; } sds_size = count * DFKNTsize(type); /* Terminate access to the data set */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); free(edges); free(start); /* Return the size of data being written if no error */ if (num_errs == 0) return (sds_size); else return FAIL; } /* make_Ext3D_SDS */ /******************************************************************** Name: get_SDSbyName() - Find and open an SDS by name. Description: Calls SDnametoindex and SDselect to open a data set by its name. Return value: Returns the SDS' identifier if successful, or FAIL, otherwise. *********************************************************************/ int32 get_SDSbyName(int32 sd_id, const char *sds_name) { int32 sds_id, sds_index; intn num_errs = 0; /* number of errors in compression test so far */ sds_index = SDnametoindex(sd_id, sds_name); CHECK(sds_index, FAIL, "SDnametoindex"); /* Select the data set */ sds_id = SDselect(sd_id, sds_index); CHECK(sds_id, FAIL, "SDselect"); /* Return the data set id or FAIL */ return (sds_id); } /* get_SDSbyName */ /******************************************************************** Name: append_Data2SDS() - Selects a data set by name then write data to it. Description: Uses the helper function get_SDSbyName to find and open the data set, then calls SDwritedata to append data, and SDendaccess to close it. Return value: Returns the size of the data that had been written successfully, or FAIL. *********************************************************************/ int32 append_Data2SDS(int32 sd_id, char *sds_name, int32 *start, int32 *edges, void *ap_data) { int32 sds_id; int32 sds_size, ntype; int32 comp_size = 0, uncomp_size = 0; char name[80]; intn status = 0; intn num_errs = 0; /* number of errors in compression test so far */ /* Find and select the data set */ sds_id = get_SDSbyName(sd_id, sds_name); CHECK(sds_id, FAIL, "get_SDSbyName"); /* Get the current size of this dataset */ status = SDgetinfo(sds_id, name, NULL, NULL, &ntype, NULL); CHECK(status, FAIL, "SDgetinfo"); status = SDgetdatasize(sds_id, &comp_size, &uncomp_size); CHECK(status, FAIL, "SDgetdatasize"); /* Append data to it */ status = SDwritedata(sds_id, start, NULL, edges, (void *)ap_data); CHECK(status, FAIL, "SDwritedata"); /* Calculate data set's size to verify later */ sds_size = uncomp_size + edges[0] * edges[1] * edges[2] * DFKNTsize(ntype); /* Terminate access to the data set and file */ status = SDendaccess(sds_id); CHECK(status, FAIL, "SDendaccess"); /* Return the size of data being written if no error */ if (num_errs == 0) return (sds_size); else return FAIL; } /* append_Data2SDS */ /******************************************************************** Name: verify_datasize() - Checks data size Description: Calls SDgetdatasize then verifies the data size against the given data_size and reports if they are different. Return value: SUCCEED or FAIL *********************************************************************/ intn verify_datasize(int32 sds_id, int32 data_size, char *sds_name) { int32 comp_size = 0, uncomp_size = 0; char msg[80]; intn status = 0; intn num_errs = 0; /* number of errors in compression test so far */ /* Get the size of data set's data */ status = SDgetdatasize(sds_id, &comp_size, &uncomp_size); CHECK(status, FAIL, "SDgetdatasize"); sprintf(msg, "%s on data set %s\n", "SDgetdatasize", sds_name); VERIFY(data_size, uncomp_size, msg); if (num_errs == 0) return SUCCEED; else return FAIL; } /* verify_datasize */ hdf4-hdf4.3.1/mfhdf/util/000077500000000000000000000000001503061704500150705ustar00rootroot00000000000000hdf4-hdf4.3.1/mfhdf/util/h4getopt.c000066400000000000000000000102101503061704500167640ustar00rootroot00000000000000/* * Copyright (c) 1987, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "h4getopt.h" #include #include int h4opterr = 1; /* if error message should be printed */ int h4optind = 1; /* index into parent argv vector */ int h4optopt = 0; /* character checked for validity */ int h4optreset = 0; /* reset getopt */ char *h4optarg = NULL; /* argument associated with option */ #define BADCH (int)'?' #define BADARG (int)':' #define EMSG "" /* * getopt -- * Parse argc/argv argument vector. */ int h4getopt(int argc, char *const argv[], const char *optstring) { static char *place = EMSG; /* option letter processing */ char *oli; /* option letter list index */ if (h4optreset || *place == 0) { /* update scanning pointer */ h4optreset = 0; place = argv[h4optind]; if (h4optind >= argc || *place++ != '-') { /* Argument is absent or is not an option */ place = EMSG; return -1; } h4optopt = *place++; if (h4optopt == '-' && *place == 0) { /* "--" => end of options */ ++h4optind; place = EMSG; return -1; } if (h4optopt == 0) { /* Solitary '-', treat as a '-' option if the program (eg su) is looking for it. */ place = EMSG; if (strchr(optstring, '-') == NULL) return -1; h4optopt = '-'; } } else h4optopt = *place++; /* See if option letter is one the caller wanted... */ if (h4optopt == ':' || (oli = strchr(optstring, h4optopt)) == NULL) { if (*place == 0) ++h4optind; if (h4opterr && *optstring != ':') fprintf(stderr, "unknown option -- %c\n", h4optopt); return BADCH; } /* Does this option need an argument? */ if (oli[1] != ':') { /* don't need argument */ h4optarg = NULL; if (*place == 0) ++h4optind; } else { /* Option-argument is either the rest of this argument or the entire next argument. */ if (*place) h4optarg = place; else if (argc > ++h4optind) h4optarg = argv[h4optind]; else { /* option-argument absent */ place = EMSG; if (*optstring == ':') return BADARG; if (h4opterr) fprintf(stderr, "option requires an argument -- %c\n", h4optopt); return BADCH; } place = EMSG; ++h4optind; } return h4optopt; /* return option letter */ } hdf4-hdf4.3.1/mfhdf/util/h4getopt.h000066400000000000000000000031711503061704500170010ustar00rootroot00000000000000/* * Copyright (c) 2009 Frank Warmerdam * * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. * * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #ifndef H4GETOPT_H_ #define H4GETOPT_H_ /* Instead of relying on the system getopt(), HDF4 includes its own, with all * symbols prefixed with 'h4'. Be careful replacing this! Getting the ifdefs * correct for Windows-y POSIX platforms like MinGW and Cygwin is tricky. */ int h4getopt(int argc, char *const argv[], const char *optstring); extern char *h4optarg; extern int h4opterr; extern int h4optind; extern int h4optopt; extern int h4optreset; #endif /* ifndef H4GETOPT_H_ */ hdf4-hdf4.3.1/release_notes/000077500000000000000000000000001503061704500156575ustar00rootroot00000000000000hdf4-hdf4.3.1/release_notes/HISTORY.txt000066400000000000000000012346651503061704500176020ustar00rootroot00000000000000========================================================================== = = = This file contains a history of the HDF4.* releases. = = = = To find information about a particular release search = = for %%%4.#.# string, for example 4.2.6, or = = for %%%4.#r# string, for example 4.1r2, prior to 2010. = = List of all releases is at the top of this file. = = = = Documents in this file refer to several *.txt files that were = = originally stored in the release_notes directory of the HDF4 = = source tree. Those file are now combined into one misc_docs.txt = = file in the same directory. = = = ========================================================================== List of the HDF4 releases 4.3.0 February 2024 4.2.16-2 June 2023 /* patch release */ 4.2.16 February 2023 4.2.15 February 2020 4.2.14 June 2018 4.2.13 June 2017 4.2.12 June 2016 /* delayed dues to 1.10 and 1.8.17 releases */ 4.2.11 February 2015 4.2.10 February 2014 4.2.9 February 2013 4.2.8 August 2012 4.2.7 February 2012 4.2.6 June 2011 4.2.5 February 2010 4.2r4 January 2009 4.2r3 January 2008 4.2r2 October 2007 4.2r1 February 2005 4.2r0 December 2003 4.2r0-Beta September 2003 4.1r5 November 2001 4.1r4 October 2000 4.1r3 May 1999 4.1r2 March 1998 4.1r1 February 1997 4.1b1 December 1996 4.0r2 July 1996 4.0r1 February 1996 4.0b2 November 1995 4.0b1 July 1995 4.0.alpha November 1994 ========================================================================== %%%4.3.0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.3.0 released on 2024-02-29 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.2.16-2 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/downloads/index.html If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration -- C Library - Bugs fixed since HDF 4.2.16-2 -- Configuration -- Library -- Utilities - Documentation - Platforms Tested - Known problems New features and changes ======================== Configuration: ------------- - Changed minimum CMake version to 3.18 Requirement for CMake 3.18 allows removal of special checks for message, EOL checks and Visual Studio 2019 version. Visual Studio 2022 requires CMake version 3.21. - Added versioning support to CMake builds Added config/lt.vers.am file with soversion numbers for each library. - Removed CMake's HDF_ENABLE_LARGE_FILE option We now assume that LFS exists, as in the Autotools. - New option for building and naming tools in CMake The following option has been added: HDF4_BUILD_STATIC_TOOLS "Build Static Tools Not Shared Tools" OFF The default will build shared tools unless BUILD_SHARED_LIBS = OFF. - XDR changes We now only support building HDF4 with the XDR implementation packaged with the HDF4 source, which is always built with the mfhdf library. The following options have been removed: Autotools: --enable-hdf4-xdr CMake: HDF4_BUILD_XDR_LIB The following header files are no longer deployed: types.h, xdr.h The XDR functionality has been incorporated into the mfhdf library, so a separate XDR library is no longer distributed with either build system. - Man pages were removed The few man pages in the HDF4 library are woefully incomplete and/or outdated. We have no resources to properly update those and to add the missing ones. Instead, we will try to create better man pages from Doxygen. - Incorporated HDF4 examples repository into HDF4 library. The HDF4Examples folder is equivalent to the repository hdf4-examples. As such it can build and test the examples during library build or after the library is installed. Previously, the hdf4-repository archives were downloaded for packaging with the library. Now the examples can be built and tested without a packaged install of the library. However to maintain the ability to use the HDF4Examples with an installed library, it is necessary to translate or synch the option names from those used by the library to those used by the examples. The typical pattern is: = HDF_BUILD_JAVA = ${HDF4_BUILD_JAVA} - Autotools and CMake target added to produce doxygen generated documentation The default is OFF or disabled. Autoconf option is '--enable-doxygen' autotools make target is 'doxygen' and will build all doxygen targets CMake configure option is 'HDF4_BUILD_DOC'. CMake target is 'doxygen' for all available doxygen targets CMake target is 'hdf4lib_doc' for the src subdirectory - Added support for CMake presets file. CMake supports two main files, CMakePresets.json and CMakeUserPresets.json, that allow users to specify common configure options and share them with others. HDF added a CMakePresets.json file of a typical configuration and support file, config/cmake-presets/hidden-presets.json. Also added a section to INSTALL_CMake.txt with very basic explanation of the process to use CMakePresets. - Private headers are no longer deployed * dfi.h - Declared private, unused, undocumented in UG/RM/DG, has been removed from the library entirely. - Dropped support for MacFS I/O MacFS was an obscure I/O system from the late 90s used to access HFS volumes on MacOS 9 and earlier (publication CMU-CS-98-145 can be found via an internet search). HDF4 allows a library builder to manually specify the FILELIB symbol found in hdfi.h to use C standard library buffered I/O (fopen, etc.), POSIX unbuffered I/O (open, etc.), or MacFS I/O (mopen, etc.). The library default is to use C buffered I/O and there is no obvious build-time or run-time option to change that. The FILELIB value is then used to map HI_OPEN, etc. to appropriate I/O calls. The "alternative" I/O schemes (POSIX unbuffered and MacFS) are not tested. Due to its age and obscurity, MacFS support is being dropped. The POSIX unbuffered I/O scheme will remain in place for now since it might be interesting to profile that vs C stdio.h calls. This change will have *NO IMPACT* on modern Macs. Files created using MacFS in the 90s and early 2000s can be accessed using C standard library I/O. C Library: ---------- - Private headers are no longer deployed The following private headers are not a part of the public API and will no longer be deployed when installing the library: atom.h bitvect.h cdeflate.h cnbit.h cnone.h crle.h cskphuff.h cszip.h dfan.h dfgr.h dfrig.h dfsd.h dfufp2i.h dynarray.h hchunks.h hcompi.h hconv.h hdfi.h hfile.h hkit.h linklist.h local_nc.h mfani.h mfgri.h mstdio.h tbbt.h - Most of hbitio.h moved to hbitio_priv.h Still in hbitio.h: * BITNUM #define * Hputbit() function-like macro These are referenced in older versions of the reference manual, e.g., in the Hendbitaccess() entry. Moved to hbitio_priv.h: * BITBUF_SIZE, DATANUM #defines * bitrec_t struct * maskc and maskl variable declarations - Most of hfile.h moved to hfile_priv.h Still in hfile.h: LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE LIBVER_SUBRELEASE LIBVER_STRING LIBVSTR_LEN LIBVER_LEN Everything else has been moved to hfile_priv.h NOTE that hfile.h is NOT included via hdf.h and must be included separately, which is the same behavior as HDF 4.2.x. - hdfi.h is no longer included by hdf.h In the past, hdfi.h (an internal header file) was included in the public hdf.h header. This is no longer the case. Anything that should be public has been moved from hdfi.h to hdf.h, including: * The C99-like types (e.g., float32) * The archaic VOID/VOIDP macros * The intf Fortran integer type * The HD library macros (e.g., HDmalloc) All of these things are considered obsolete and we only maintain them in the public header so that old code does not have to be modified. It is unwise to use them in new code. NOTE: hdfi.h included many POSIX, Windows, and C standard library headers. *** THESE WILL NO LONGER BE BROUGHT IN BY INCLUDING HDF.H!!! *** If you have been relying on hdf.h to bring in headers like stdlib.h, windows.h, or unistd.h, you will need to update your code when you move to HDF 4.3.0. Bugs fixed since HDF 4.2.16-2 =========================== - Corrected handling of SDgetcompress() SDgetcompress() was deprecated in HDF 4.2.9 (2013) and hidden behind ifdefs controlled by the --enable-deprecated-symbols (Autotools) and HDF4_ENABLE_DEPRECATED_SYMBOLS (CMake) options. These ifdefs were incompletely propagated throughout the library. In this release: * CMake builds did not expose H4_NO_DEPRECATED_SYMBOLS via h4config.h * The mfhdf.h header now hides the SDgetcompress() call behind an H4_NO_DEPRECATED_SYMBOLS ifdef (pulled in via h4config.h via hdf.h) * The Java wrappers now correctly exclude SDgetcompress() when deprecated symbols are disabled * The libhdf4.settings file now indicates whether HDF4 was built with or without deprecated symbols - Fix --with-szlib with no paths not detecting the encoder The --with-szlib option in the Autotools has been broken when used without include/library paths for the past decade (git blame says 11 years ago). A misnamed variable and a missing setting would skip the encoder check, so the library could only be added in decode-only mode. This has been fixed and szip encoding will now be detected normally. - Build fortran with -fallow-argument-mismatch w/ gcc 10+ The gfortran configuration checks checked the version via a variable that was never set, preventing -fallow-argument-mismatch from being set w/ gcc 10+, which would prevent building the fortran interface. Fixes HDFFR-1582 - JNI SDSreaddata functions for float and double used mismatched buffer macros The SDreaddata_double and SDreaddata_float function created data buffers with PIN_DOUBLE_ARRAY_CRITICAL and PIN_FLOAT_ARRAY_CRITICAL macros then tried to free the buffers with UNPIN_DOUBLE_ARRAY and UNPIN_FLOAT_ARRAY macros. This caused free() call to use an invalid pointer. Change the macros PIN_DOUBLE_ARRAY_CRITICAL to PIN_DOUBLE_ARRAY and PIN_FLOAT_ARRAY_CRITICAL to PIN_DOUBLE_ARRAY. Github issue #355 - Vstart/Vinitialize did not fail as expected User simulated a failure in Vstart while using hrepack, but the function did not fail as expected. This is now fixed. Github issue #354 - DF24getimage caused a segfault when reading corrupted file When jpeg_start_decompress failed to decompress a corrupted file, the JPEG library exit with failure, causing a segfault in user's application. The library now overrides the JPEG routine error_exit to return an error code instead. Github issue #295 - SDgetcompinfo returned incorrect option masks for szip compression A special bit, SZ_H4_REV_2, was used to indicate that the szip info was stored in a new way. This bit was set in the options mask field of the szip info struct. As a result, the value of options mask became incorrect. For example, an option mask value was 132 but with the special bit set, it was returned as 65668. In this release, the special bit is removed from the option mask before it is returned to the application. This change does not affect the data format in the file. JIRA issue HDFFR-82 Documentation ============= Platforms Tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 6.7.4 GNU gcc (GCC) 13.2.1 Fedora 39 Clang version 17.0.6 Linux 5.15.0 GNU gcc (GCC) 11.3.0, 11.4.0, 12 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 11.3.0, 12 Ubuntu 22.04 Clang version 14.0.0 Intel OneApi 2023.1.0, 2023.2.0, 2024.0 Nvidia nvc 23.9 AOCC 4.1.0, Clang 16.0.3 Mingw, GNU GCC 10.0.0 (cmake and autotools) Linux 5.13.0 GNU gcc (GCC) 9.4.0 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 9.4.0 Ubuntu 20.04 Clang version 10.0.0 Intel OneApi 2023.1.0 (cmake and autotools) Linux 4.18.0-348.7.1.el8_5 gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) CentOS8 clang version 12.0.1 (Red Hat 12.0.1) Intel OneApi 2023.1.0 (cmake and autotools) Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) #1 SMP ppc64 GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) IBM XL C/C++ V13.1 IBM XL Fortran V15.1f Linux 3.10.0-327.18.2.el7.x86_64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP x86_64, GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4) (jelly/moohan) Version 5.3.0, 6.3.0, 7.2.0, 8.3.0, 9.1.0, 10.2.0 Intel(R) C (icc) and Fortran (ifort) compilers: Version 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux 2.6.32-754.11.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem macOS Sonoma 14 Apple clang version 15.0.7 Darwin 23.2.0 arm64 Clang 17.0.0 macOS Ventura 13.6.4 Apple clang version 15.0.0 Darwin 22.6.0 x86_64 macOS Monterey 12 Apple clang version 14.0.0 Darwin 21.6.0 x86_64 gfortran GNU Fortran (Homebrew GCC 13.2.0) 13.2.0 (philo) Intel icc/icpc/ifort version 2021.10.0 20230609 macOS Apple M1 11.7.3 Apple clang version 13.0.0 (clang-1300.0.29.30) Darwin 20.6.0 arm64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (macmini-m1) Intel icc/icpc/ifort version 2021.8.0 20221120 macOS Big Sur 11.7.3 Apple clang version 12.0.5 (clang-1205.0.22.9) Darwin 20.4.0 x86_64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (bigsur-1) Intel icc/icpc/ifort version 2021.7.1 20221019 Windows 10 x64 Visual Studio 2019 w/ clang 12.0.0 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2019 w/ Intel C/C++/Fortran oneAPI 2024 (cmake) Visual Studio 2022 w/ clang 17.0.1 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2022 w/ Intel C/C++/Fortran oneAPI 2024 (cmake) Known problems ============== o The Fortran interface does not work on 64-bit systems as it stores addresses in memory as Fortran INTEGER values, which are typically 32-bit. The Fortran interface is currently disabled by default due to this. It should only be enabled on 32-bit systems. o Builds with the autotools option --enable-hdf4-xdr fail on Solaris and on IBM ppc64 with the xlc compiler. The option should not be used on those platforms. o A number of tools and tests fail to free small amounts of memory if they are just going to exit anyway.  This doesn't appear to be a memory leak in the core library.  We're planning to fix these leaks in future releases, likely by modifying these tools to have a single point of return, where resource cleanup will be carried out.  o CMake files do not behave correctly with paths containing spaces. Do not use spaces in paths because the required escaping for handling spaces results in very complex and fragile build files. ADB - 2019/05/07 o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.16-2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.16-2 released on 2023-06-30 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.2.16 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/display/support/Download+HDF4 If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.16 -- Configuration -- Library -- Utilities - Documentation - Platforms Tested - Known problems New features and changes ======================== None since HDF 4.2.16, see HDF 4.2.16 history for the complete list since HDF 4.2.15. This is only a patch release of HDF 4.2.16. Support for new platforms and compilers ======================================= - CMake added support for clang 12.0.0 with MSVC-like command line in VS2019, and for VS2022 with clang 15.0.1 and with Intel oneAPI 2022 - Ubuntu 22.04, Linux 5.15.0 with GCC 11.3.0 and clang version 14.0.0-1 - Ubuntu 20.04, Linux 5.13.0 with GCC 9.4.0 and clang version 10.0.0-4 - macOS M1 11.7.3, Darwin 20.6.0 with Apple clang version 13.0.0 and Intel icc/icpc/ifort version 2021.8.0 - macOS Big Sur 11.7.3, Darwin 20.4.0 with Apple clang version 12.0.5 and Intel icc/icpc/ifort version 2021.7.1 Bugs fixed since HDF 4.2.16 =========================== - Fixed an external file bug introduced in 4.2.16 Fixing HDFFR-1607 introduced a bug where the flag that indicates whether the external file directory has been changed from the previous location was not reset properly. Reset the flag after building a filename path for an external element. Fixes HDFFR-1609 - Build fortran with -fallow-argument-mismatch w/ gcc 10+ The gfortran configuration checks checked the version via a variable that was never set, preventing -fallow-argument-mismatch from being set w/ gcc 10+, which would prevent building the fortran interface. Fixes HDFFR-1582 - JNI SDSreaddata functions for float and double used mismatched buffer macros The SDreaddata_double and SDreaddata_float function created data buffers with PIN_DOUBLE_ARRAY_CRITICAL and PIN_FLOAT_ARRAY_CRITICAL macros then tried to free the buffers with UNPIN_DOUBLE_ARRAY and UNPIN_FLOAT_ARRAY macros. This caused free() call to use an invalid pointer. Change the macros PIN_DOUBLE_ARRAY_CRITICAL to PIN_DOUBLE_ARRAY and PIN_FLOAT_ARRAY_CRITICAL to PIN_FLOAT_ARRAY. Github issue #355 Documentation ============= Platforms Tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 5.15.0-1026-aws gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 #30-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 Ubuntu 22.04 Ubuntu clang version 14.0.0-1ubuntu1 (cmake and autotools) Linux 5.15.0 GNU gcc (GCC) 11.3.0 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 11.3.0- Ubuntu 22.04 Ubuntu clang version 10.0.0-4 (mingw64) (cmake and autotools) Linux 5.13.0-1031-aws GNU gcc (GCC) 9.4.0-1ubuntu1 #35-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 9.4.0-1ubuntu1 Ubuntu 20.04 clang version 10.0.0-4ubuntu1 (cmake and autotools) Linux 4.18.0-348.7.1.el8_5 gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) CentOS8 clang version 12.0.1 (Red Hat 12.0.1) (cmake and autotools) Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) #1 SMP ppc64 GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) IBM XL C/C++ V13.1 IBM XL Fortran V15.1 Linux 3.10.0-327.18.2.el7.x86_64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP x86_64, GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4) jelly/moohan) Version 4.9.3, 5.3.0, 6.2.0, 7.1.0, 8.3.0 Intel(R) C (icc) and Fortran (ifort) compilers: Version 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux 2.6.32-754.11.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem macOS Apple M1 11.7.3 Apple clang version 13.0.0 (clang-1300.0.29.30) Darwin 20.6.0 arm64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (macmini-m1) Intel icc/icpc/ifort version 2021.8.0 20221120 macOS Big Sur 11.7.3 Apple clang version 12.0.5 (clang-1205.0.22.9) Darwin 20.4.0 x86_64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (bigsur-1) Intel icc/icpc/ifort version 2021.7.1 20221019 macOS High Sierra 10.13.6 Apple LLVM version 10.0.0 (clang-1000.10.44.4) 64-bit gfortran GNU Fortran (GCC) 6.3.0 (bear) Intel icc/icpc/ifort version 18.0.4.233 20190416 macOS Sierra 10.12.6 Apple LLVM version 9.0.0 (clang-900.39.2) 64-bit gfortran GNU Fortran (GCC) 7.4.0 (kite) Intel icc/icpc/ifort version 17.0.2 Mac OS X El Capitan 10.11.5 Apple clang version 7.3 from Xcode 7.3 Darwin 15.6.0 x86_64 gfortran GNU Fortran (GCC) 5.2.0 (osx1011test) Intel icc and ifort version 15.0.3 Windows 10 x64 Visual Studio 2019 w/ clang 12.0.0 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2019 w/ Intel C/C++/Fortran oneAPI 2023 (cmake) Visual Studio 2022 w/ clang 15.0.1 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2022 w/ Intel C/C++/Fortran oneAPI 2023 (cmake) Known problems ============== o The Fortran interface does not work on 64-bit systems as it stores addresses in memory as Fortran INTEGER values, which are typically 32-bit. The Fortran interface is currently disabled by default due to this. It should only be enabled on 32-bit systems. o Builds with the autotools option --enable-hdf4-xdr fail on Solaris and on IBM ppc64 with the xlc compiler. The option should not be used on those platforms. o When building HDF4 in 32-bit mode on 64-bit Linux platforms with the -m32 flag, many tests fail with errors converting data. We have not seen these test failures building on 32-bit systems. The problem seems to be caused specifically by building with the -m32 flag on 64-bit systems. It will be investigated; the -m32 flag on 64-bit systems should not be used with this HDF4 release. o A number of tools and tests fail to free small amounts of memory if they are just going to exit anyway.  This doesn't appear to be a memory leak in the core library.  We're planning to fix these leaks in future releases, likely by modifying these tools to have a single point of return, where resource cleanup will be carried out.  o CMake files do not behave correctly with paths containing spaces. Do not use spaces in paths because the required escaping for handling spaces results in very complex and fragile build files. ADB - 2019/05/07 o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.16%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.16 released on 2023-03-06 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.2.15 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/display/support/Download+HDF4 If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.15 -- Configuration -- Library -- Utilities - Documentation - Platforms Tested - Known problems New features and changes ======================== Configuration: ------------- - The Autotools no longer strip -g from production CFLAGS configure would strip -g from CFLAGS when --enable-production was specified. This is no longer the case. (DER - 2023/03/01) - The Autotools now set -DNDEBUG/-UNDEBUG via build mode Several makefiles set -DNDEBUG for all build modes. This is now set via the build mode configure options. Production sets -DNDEBUG and development sets -UNDEBUG. (DER - 2023/03/01) - Tools are now built by default in CMake The option to build and test the HDF4 tools hdiff, hrepack, hdfimport, and dumper was disabled by default. It is now enabled by default. This option also controls the ability to build the netCDF tools. (DER - 2023/02/28) - Added an option to disable building the netCDF tools ncdump and ncgen HDF4 builds netCDF 2.3.2 versions of ncdump and ncgen. These can conflict with the official versions so an option to disable building them has been added. CMake: HDF_ENABLE_NETCDF_TOOLS Autotools: --enable-netcdf-tools This option can be set independently of the option that controls netCDF name mangling (HDF_ENABLE_NETCDF / --enable-netcdf) as no C library functionality is affected by that option. This option is enabled by default. HDF4_BUILD_TOOLS must be enabled to build the netCDF tools. (DER - 2023/02/28) - Removed checks for flex/lex and bison/yacc in the Autotools flex and bison are only needed to regenerate the ncgen parser files. This is done via bin/genparser and not using Makefiles, so the checks for these programs have been removed from configure (they were never checked for in CMake). (DER - 2023/02/23) - Removed VOID and VOIDP from hdfi.h These were typedef'd to void and void *, respectively. Although they did not appear in the public API, they were used in the examples. (DER - 2023/02/05) - Added Intel OneAPI compiler support to the configuration files The CMake toolchain file for Intel was updated to allow the LLVM based compilers to be chosen. The autotools config for Intel check for the new compiler name; icx. (ADB - 2023/02/02) - Updated the warnings flags for compilers with files for gcc, clang and Intel compilers. As explained in a README file in config, the warnings are generally version-specific based on a common file. Warnings that are no longer an issue are configured to generate an error if it is accidentally introduced. Other compilers could be added. (ADB - 2023/01/31) - The FreeBSD Autotools config was updated to work like MacOS and Linux The config/freebsd file was updated to try a variety of compilers and the default was set to 'cc', which should map to clang. Fortran is less well tested due to its issues with 64-bit systems, but the default of 'f77' was left alone. It may be necessary to specify --with-jpeg=/usr/local if libjpeg was installed via the package manager. (DER - 2023/01/25) - The vattr.h header file is no longer distributed This header file was empty aside from including hdf.h and vg.h. (DER - 2023/01/22) - Better Autotools compiler support on Linux and MacOS The machine configuration files have been split into machine and compiler files, which have been updated with additional warning flags and compiler support. Both Linux and MacOS now support: * gcc * clang * icc/icx (DER - 2023/01/20) - The Fortran interface is considered deprecated The Fortran interface is broken on 64-bit systems (see the known problems section) and is currently disabled by default. It may be removed in a future version of the library or replaced with an alternative Fortran wrapper, possibly as early as 4.2.17. (DER - 2023/01/15) - Fixed-width HDF4 types like int16 now map to C99 types under the hood In an effort to make HDF4 more maintainable and "just work" for more platforms, the scheme where HDF4 fixed-width integer types like int16 were mapped to C native types like int and short has been replaced with a system that maps them to equivalent C99 types. (DER - 2023/01/15) - Changed how maintainer mode works in the Autotools The macro has changed from AM_MAINTAINER_MODE to AM_MAINTAINER_MODE([enable]) in master and AM_MAINTAINER_MODE([disable]) at release time. The main change is that build dependencies will be ON by default in master so out-of-date configure, Makefile.in will be regenerated when their input files (configure.ac, Makefile.am, etc.) change. We previously used the macro with no parameter since we checked in the Autotools-generated files. This allowed switching on maintainer mode with a command-line option, but left maintainer mode off to avoid regenerating the build files when checking out from git did not preserve timestamps, making the files look out-of-date. Now that we no longer check in Autotools-geneated files, we can turn the dependencies on. Detailed comments about the behavior of this macro have been added to configure.ac where we define the macro. (DER - 2023/01/13) - Removed the hdf/util/MacProjects directory It's unclear what build system these were for, but they have been unmaintained for some time and have been removed. MacOS users can build with the Autotools or CMake. (DER - 2023/01/13) - Dropped support for many obsolete platforms HDF4 uses pre-defined machine configurations instead of configure tests to include header files, set up typedefs, etc. In the future, the library will be adapted to use a flexible configure test scheme like HDF5, but in the meantime we have simplified the machine configuration header by dropping configurations for the following platforms: - Irix / MIPS - Itanium - Intel i860 - Fujitsu VP - Convex - "K&R Sun" and Solaris on x86 - DEC Alpha - Apollo - HP-UX / HP-9000 - Motorola m88k - NeXT - MacOS on PowerPC chipsets - IBM RS/6000 In addition, many #defines have been updated to reflect modern usage, particularly on Windows and MacOS. (DER - 2023/01/13) - Added new option to build jpeg, libaec and zlib inline with CMake. Using the CMake FetchContent module, the external filters can populate content at configure time via any method supported by the ExternalProject module. Whereas ExternalProject_Add() downloads at build time, the FetchContent module makes content available immediately, allowing the configure step to use the content in commands like add_subdirectory(), include() or file() operations. The HDF options (and defaults) for using this are: BUILD_JPEG_WITH_FETCHCONTENT:BOOL=OFF JPEG_USE_LOCALCONTENT:BOOL=OFF BUILD_SZIP_WITH_FETCHCONTENT:BOOL=OFF LIBAEC_USE_LOCALCONTENT:BOOL=OFF BUILD_ZLIB_WITH_FETCHCONTENT:BOOL=OFF ZLIB_USE_LOCALCONTENT:BOOL=OFF The CMake variables to control the path and file names: JPEG_TGZ_ORIGPATH:STRING JPEG_TGZ_ORIGNAME:STRING LIBAEC_TGZ_ORIGPATH:STRING LIBAEC_TGZ_ORIGNAME:STRING ZLIB_TGZ_ORIGPATH:STRING ZLIB_TGZ_ORIGNAME:STRING See the CMakeFilters.cmake and config/cmake/cacheinit.cmake files for usage. (ADB - 2023/01/13) - Removed all references to C++ HDF4 does not have a C++ wrapper and, like HDF5, we do not support building the library with a C++ compiler since the languages are diverging. Despite this, some parts of the build system checked for a C++ compiler, manipulated CXXFLAGS, etc. This was mainly in files that were brought over from HDF5. This build system code has been removed. As a part of this C++ cleanup, the extern "C" ifdefs in the header files no longer test for c_plusplus. (DER - 2023/01/13) - The Fortran interface is disabled by default The Fortran interface is unsafe on 32-bit systems as it stores pointers in 32-bit integers. It will be removed in a future release, but for now it will be disabled by default in both CMake and the Autotools. (DER - 2023/01/12) - Add new CMake configuration variable HDF4_USE_GNU_DIRS HDF4_USE_GNU_DIRS (default OFF) selects the use of GNU Coding Standard install directory variables by including the CMake module, GNUInstallDirs(see CMake documentation for details). The HDF_DIR_PATHS macro in the HDFMacros.cmake file sets various PATH variables for use during the build, test and install processes. By default, the historical settings for these variables will be used. (ADB - 2022/10/21) - Corrected path searched by CMake find_package command The install path for cmake find_package files had been changed to use "share/cmake" on all platforms. However, the trailing "hdf4" directory was not removed at that time. This "hdf4" additional directory has been removed from all the install paths. (ADB - 2021/09/27) - Corrected pkg-config compile script It was discovered that the position of the "$@" argument for the command in the compile script may fail on some platforms and configurations. The position of the "$@"command argument was moved to a position before the pkg-config sub command. (ADB - 2021/08/30) - CMake option to use AEC (open source SZip) library instead of SZip The open source AEC library is a replacement library for SZip. In order to use it for hdf4 the libaec CMake source was changed to add "-fPIC" and exclude test files. Autotools does not build the compression libraries within hdf4 builds. New option USE_LIBAEC is required to compensate for the different files produced by AEC build. (ADB - 2020/04/22, OESS-65) Support for new platforms and compilers ======================================= - CMake added support for clang 12.0.0 with MSVC-like command line in VS2019, and for VS2022 with clang 15.0.1 and with Intel oneAPI 2022 - Ubuntu 22.04, Linux 5.15.0 with GCC 11.3.0 and clang version 14.0.0-1 - Ubuntu 20.04, Linux 5.13.0 with GCC 9.4.0 and clang version 10.0.0-4 - macOS M1 11.7.3, Darwin 20.6.0 with Apple clang version 13.0.0 and Intel icc/icpc/ifort version 2021.8.0 - macOS Big Sur 11.7.3, Darwin 20.4.0 with Apple clang version 12.0.5 and Intel icc/icpc/ifort version 2021.7.1 Bugs fixed since HDF 4.2.15 =========================== - Applied a user's patch to fix a failure with SDwritedata The access to an internal element was not terminated in one of the SD APIs causing the subsequent call to SDwritedata to fail. The user's patch ended access to the element. (BMR - 2023/03/01, HDFFR-1573) - Corrected the setting of directory for external file When application called HXsetdir after a read of an external data, the new setting of the external directory did not have any effect because the library would just use the currently opened file. The library now closes the opened external file and reopens it at the new location if the external directory is changed. (BMR - 2023/02/22, HDFFR-1607) - Correct theCMake generated pkg-config file The pkg-config file generated by CMake had the order and placement of the libraries wrong. Also added support for debug library names. Changed the order of Libs.private libraries so that dependencies come after dependents. Did not move the compression libraries into Requires.private because there was not a way to determine if the compression libraries had supported pkconfig files. Still recommend that the CMake config file method be used for building projects with CMake. (ADB - 2023/02/16) - Fixed a small memory leak in the atom code The atom list hast table of each atom group list was not cleaned up at library shutdown, leading to a small memory leak (at most, a few kB). (DER - 2023/01/29) - Specifying CC on the command line works correctly in the Autotools The CC variable was processed incorrectly in the Autotools build files which led to minimal CFLAGS, etc. flags being specified when anything other than CC=gcc was specified. (DER - 2023/01/20) - --enable-production in the Autotools works correctly The variable that was checked when processing --enable-production in the Autotools was spelled incorrectly, leading an Autotools build to default to a "user defined" build that specified minimal flags in CFLAGS, etc. (DER - 2023/01/20) - A segfault is replaced by a failure A segfault had occurred when reading a user's file. Examining the file contents showed that the value for the number of fields in one of the vdata had been corrupted and became larger than the maximum number of fields allowed in a vdata. The library now detects such situation and fails instead of producing a segfault. (BMR - 2023/01/19, HDFFR-1593) - jpeglib.h `boolean` type no longer conflicts with windows.h jpeglib.h defines a `boolean` type that conflicts with the `boolean` type defined in windows.h. In previous versions of the library, this could cause compilation errors when the types clashed. We now ensure that `HAVE_BOOLEAN` is defined before jpeglib.h when building on Windows, which avoids the redefinition. (DER - 2022/01/15) Documentation ============= Platforms Tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 5.15.0-1026-aws gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 #30-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 Ubuntu 22.04 Ubuntu clang version 14.0.0-1ubuntu1 (cmake and autotools) Linux 5.15.0 GNU gcc (GCC) 11.3.0 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 11.3.0- Ubuntu 22.04 Ubuntu clang version 10.0.0-4 (mingw64) (cmake and autotools) Linux 5.13.0-1031-aws GNU gcc (GCC) 9.4.0-1ubuntu1 #35-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 9.4.0-1ubuntu1 Ubuntu 20.04 clang version 10.0.0-4ubuntu1 (cmake and autotools) Linux 4.18.0-348.7.1.el8_5 gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) CentOS8 clang version 12.0.1 (Red Hat 12.0.1) (cmake and autotools) Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) #1 SMP ppc64 GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) IBM XL C/C++ V13.1 IBM XL Fortran V15.1 Linux 3.10.0-327.18.2.el7.x86_64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP x86_64, GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4) jelly/moohan) Version 4.9.3, 5.3.0, 6.2.0, 7.1.0, 8.3.0 Intel(R) C (icc) and Fortran (ifort) compilers: Version 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux 2.6.32-754.11.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem macOS Apple M1 11.7.3 Apple clang version 13.0.0 (clang-1300.0.29.30) Darwin 20.6.0 arm64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (macmini-m1) Intel icc/icpc/ifort version 2021.8.0 20221120 macOS Big Sur 11.7.3 Apple clang version 12.0.5 (clang-1205.0.22.9) Darwin 20.4.0 x86_64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (bigsur-1) Intel icc/icpc/ifort version 2021.7.1 20221019 macOS High Sierra 10.13.6 Apple LLVM version 10.0.0 (clang-1000.10.44.4) 64-bit gfortran GNU Fortran (GCC) 6.3.0 (bear) Intel icc/icpc/ifort version 18.0.4.233 20190416 macOS Sierra 10.12.6 Apple LLVM version 9.0.0 (clang-900.39.2) 64-bit gfortran GNU Fortran (GCC) 7.4.0 (kite) Intel icc/icpc/ifort version 17.0.2 Mac OS X El Capitan 10.11.5 Apple clang version 7.3 from Xcode 7.3 Darwin 15.6.0 x86_64 gfortran GNU Fortran (GCC) 5.2.0 (osx1011test) Intel icc and ifort version 15.0.3 Windows 10 x64 Visual Studio 2015 (cmake) Visual Studio 2017 w/ Intel C/C++/Fortran 19 (cmake) Visual Studio 2019 w/ clang 12.0.0 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2019 w/ Intel C/C++/Fortran oneAPI 2022 (cmake) Visual Studio 2022 w/ clang 15.0.1 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2022 w/ Intel C/C++/Fortran oneAPI 2022 (cmake) Known problems ============== o The Fortran interface does not work on 64-bit systems as it stores addresses in memory as Fortran INTEGER values, which are typically 32-bit. The Fortran interface is currently disabled by default due to this. It should only be enabled on 32-bit systems. o Builds with the autotools option --enable-hdf4-xdr fail on Solaris and on IBM ppc64 with the xlc compiler. The option should not be used on those platforms. o A number of tools and tests fail to free small amounts of memory if they are just going to exit anyway.  This doesn't appear to be a memory leak in the core library.  We're planning to fix these leaks in future releases, likely by modifying these tools to have a single point of return, where resource cleanup will be carried out.  o CMake files do not behave correctly with paths containing spaces. Do not use spaces in paths because the required escaping for handling spaces results in very complex and fragile build files. ADB - 2019/05/07 o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.15%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.15 released on 2020-02-12 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.2.14 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/display/support/Download+HDF4 If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.14 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration: ------------- - Updated configuration for both build systems Synchronized configuration variables between build systems to create the same variables in h4config.h. Replaced the defines used in #ifdef blocks with the appropriate H4_XXX defines. Updated the internal xdr code to handle the different size of integers across platforms. Also removed the restriction on building 64-bit platforms. Users on macOS platforms (10.13 and newer) must build with the hdf4 xdr by adding the following options during configuration: autotools add "--enable-hdf4-xdr" CMake add "HDF4_BUILD_XDR_LIB:BOOL=ON" See INSTALL file for details on configure options. (ADB - 2020/02/21) - Update CMake for VS2019 support CMake added support for VS2019 in version 3.15. Changes to the CMake generator setting required changes to scripts. Also updated version references in CMake files as necessary. (ADB - 2019/11/18, HDFFR-1581) - Update CMake tests to use FIXTURES CMake test fixtures allow setup/cleanup tests and other dependency requirements as properties for tests. This is more flexible for modern CMake code. (ADB - 2019/07/23, HDFFV-10529) - Windows PDB files are always installed There are build configuration or flag settings for Windows that may not generate PDB files. If those files are not generated then the install utility will fail because those PDB files are not found. An optional variable, DISABLE_PDB_FILES, was added to not install PDB files. (ADB - 2019/07/17, HDFFV-10424) - Add mingw CMake support with a toolchain file There has been a number of mingw issues that has been linked under HDFFV-10845. It has been decided to implement the CMake cross-compiling technique of toolchain files. We will use a linux platform with the mingw compiler stack for testing. Only the C language is fully supported, and the error tests are skipped. The C++ language works for static but shared builds has a shared library issue with the mingw Standard Exception Handling library, which is not available on Windows. Fortran has a common cross-compile problem with the fortran configure tests. (ADB - 2019/07/12, HDFFV-10845, HDFFV-10595) - Windows PDB files are installed incorrectly For static builds, the PDB files for windows should be installed next to the static libraries in the lib folder. Also the debug versions of libraries and PDB files are now correctly built using the default CMAKE_DEBUG_POSTFIX setting. (ADB - 2019/07/09, HDFFV-10581) - Add option to build only shared libs A request was made to prevent building static libraries and only build shared. A new option was added to CMake, HDF4_ONLY_SHARED_LIBS, which will skip building static libraries. Certain utility functions will build with static libs but are not published. Tests are adjusted to use the correct libraries depending on SHARED/STATIC settings. (ADB - 2019/06/12, HDFFV-10805) Support for new platforms and compilers ======================================= - CMake added support for VS2019 in version 3.15. Updated scripts. - macOS 10.13.6, Darwin 17.7.0 with Apple clang LLVM version 10.0.0 - macOS 10.14.6, Darwin 18.7.0 with Apple clang LLVM version 10.0.1 Bugs fixed since HDF 4.2.14 =========================== - netCDF test failed on multiple Mac The netCDF test in the hdf4 library had failed either with segfault or incorrect reading data on multiple versions of Mac machines, when compiling with -O2. The segfault appeared to happen during the use of various system XDR functions. In previous releases, -O0 level optimization was used to avoid this problem. In this release, the hdf4's internal xdr library has been updated to handle the different size of integers across platforms, based on the newer tirpc library code and netCDF xdr code. (ADB/BMR/LRK - 2020/02/15, EED-439) - Several memory leaks are fixed There were memory leaks caused by the allocated xdr structure not released and several missing to free allocated buffers in tests. These are now fixed. (BMR - 2019/11/15) Documentation ============= Platforms tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 2.6.32-754.11.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (mayll/platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem Linux, 3.10.0-327.18.2.el7.x86_64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP x86_64, GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4) jelly/moohan) Version 4.9.3, 5.3.0, 6.2.0, 7.1.0, 8.3.0 Intel(R) C (icc) and Fortran (ifort) compilers: Version 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux, 2.6.32-573.18.1.el6.ppc64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP, ppc64 (ostrich) Version 4.4.7 20120313 (Red Hat 4.4.7-18) Fortran (xlf) for Linux Version 15.1 SunOS 5.11 (32- and 64-bit) Sun C 5.12 SunOS_sparc 2011/11/16 11.1, sparc, sun4v (emu) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 x64 Visual Studio 2015 w/ Intel C, Fortran 2018 (cmake) Windows 10 x64 Visual Studio 2015 w/ Intel C, Fortran 2018 (cmake) Visual Studio 2017 w/ Intel C, Fortran 2019 (cmake) Visual Studio 2019 w/ Intel C, Fortran 2019 (cmake) Mac OS X 10.11.5, Darwin, 15.6.0 Apple clang version 7.3 from Xcode 7.3 x86_64 gfortran GNU Fortran (GCC) 5.2.0 (osx1011test) Intel icc and ifort version 15.0.3 macOS Sierra 10.12.5, Darwin, Apple clang version 8.1.0 from Xcode 8.3 16.6.0, x86_64 gfortran GNU Fortran (GCC) 7.4.0 (kite) Intel icc and ifort version 17.0.2 macOS 10.13.6, Darwin, Apple clang LLVM version 10.0.0 17.7.0, x86_64 gfortran GNU Fortran (GCC) 6.3.0 (bear) Intel icc and ifort version 19.0.4 macOS 10.14.6, Darwin, Apple clang LLVM version 10.0.1 18.7.0, x86_64 gfortran GNU Fortran (GCC) 6.3.0 (bobcat) Intel icc version 19.0.4 Fedora30 5.3.11-200.fc30.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1 20190827) GNU Fortran (GCC) 9.2.1 20190827 (Red Hat 9.2.1 20190827) (cmake and autotools) Linux, 4.15.0-1051-aws #53-Ubuntu SMP, x86_64, x86_64 gcc (Ubuntu 7.4.0-1ubuntu18.04.1) 7.4.0 GNU Fortran (Ubuntu 7.4.0-1ubuntu18.04.1) 7.4.0 (cmake and autotools) Known problems ============== o Builds with the autotools option --enable-hdf4-xdr fail on Solaris and on IBM ppc64 with the xlc compiler. The option should not be used on those platforms. o CMake files do not behave correctly with paths containing spaces. Do not use spaces in paths because the required escaping for handling spaces results in very complex and fragile build files. ADB - 2019/05/07 o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion, 10.8 Mountain Lion, 10.9 Mavericks, 10.10 Yosemite, and 10.11 El Capitan, when compiling with -O2, some xdr functions might cause memory corruption. This happened for GCC, Intel and Clang compilers. Currently, -O0 level optimization is used to avoid this problem. (HDFFR-1318,1327,1358,1425) EIP - 2013/02/05, BMR - 2016/06/24 Update: This issue has been addressed in 4.2.15. BMR - 2020/02/24 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.14 released on 2018-06-26 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.2.13 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/display/support/Download+HDF4 If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.13 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration: ------------- - CMake Refactor use of CMAKE_BUILD_TYPE for new variable, which understands the type of generator in use. Added new configuration macros to use new HDF_BUILD_TYPE variable. This variable is set correctly for the type of generator being used for the build. Changes follow from hdf5. (ADB - 2018/01/08, HDFFV-10385, HDFFV-10296) - XDR glibc stopped installing rpc headers by default back in 2011: versions 2.14 and 2.15 never install them, versions 2.16 and higher require the configuration option --enable-obsolete-rpc. Most distros still install the headers for backwards compatibility, but Fedora 28 has now stopped support. The preferred library is libtirpc. On Fedora 28, install the libtirpc-devel package. (ADB - 2018/05/29, HDFFR-1568) Support for new platforms and compilers ======================================= Bugs fixed since HDF 4.2.13 =========================== Configuration: ------------- - CMake Update CMake commands configuration. A number of improvements were made to the CMake commands. Most changes simplify usage or eliminate unused constructs. Also, some changes support better cross-platform support. Changes follow from hdf5. (ADB - 2018/02/01, HDFFV-10398) - CMake Correct usage of CMAKE_BUILD_TYPE variable. The use of the CMAKE_BUILD_TYPE is incorrect for multi-config generators (Visual Studio and XCode) and is optional for single config generators. Created a new macro to check GLOBAL PROPERTY -> GENERATOR_IS_MULTI_CONFIG Created two new HDF variable, HDF_BUILD_TYPE and HDF_CFG_BUILD_TYPE. Defaults for these variables is "Release". Changes follow from hdf5. Library: -------- - Removal of a memory leak HTPendaccess was missing from HRPendaccess and resulting in a memory leak. This is now fixed. (BMR - 2018/06/18, HDFFR-1560) - Fortran Changed array data constructor to be g77 compatible. Updated INSTALL notes about FFLAGS for g77. (MSB - 2018/05/23, HDFFR-1553) - Java JNI functions called routine with wrong interface. GRsetchunk, GRsetchunkcache changed from SD in hdfgrImp.c. SDfileinfo changed from SD in hdfsdsImp.c. (ADB - 2018/05/29, HDFFR-1565) - Java JNI functions used wrong constants. MAX_VAR_DIMS and MAX_NC_NAME should have been H4_MAX_VAR_DIMS and H4_MAX_NC_NAME. MAX_VAR_DIMS used in Java source is assigned the H4_MAX_VAR_DIMS value. (ADB - 2018/05/29, HDFFR-1563) Documentation ============= - Various minor improvements are made to the User's Guide and Reference Manual. (BMR - 2018/06/26) Platforms tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 2.6.32-573.22.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (mayll/platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem Linux, 3.10.0-327.10.1.el7.x86_64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) #1 SMP x86_64, GNU/Linux GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) (jelly/moohan) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux, 2.6.32-573.18.1.el6.ppc64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) #1 SMP, ppc64 (ostrich) (1) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) (2) IBM XL Fortran for Linux, V15.1 (64-bit mode) SunOS 5.11 (32- and 64-bit) Sun C 5.12 SunOS_sparc 2011/11/16 11.1, sparc, sun4v (emu) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Windows 7 x64 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Visual Studio 2015 w/ Intel C, Fortran 2017 (cmake) Windows 10 Visual Studio 2015 w/ Intel Fortran 16 (cmake) Cygwin(CYGWIN_NT-6.1 2.8.0(0.309/5/3) gcc and gfortran compilers (GCC 5.4.0) (cmake and autotools) Windows 10 x64 Visual Studio 2015 w/ Intel Fortran 16 (cmake) Mac OS X 10.10.5, Darwin, 14.5.0 Apple clang version 6.1 from Xcode 7.0 x86_64 gfortran GNU Fortran (GCC) 4.9.2 (osx1010dev) Intel icc and ifort version 15.0.3 Mac OS X 10.11.5, Darwin, 15.6.0 Apple clang version 7.3 from Xcode 7.3 x86_64 gfortran GNU Fortran (GCC) 5.2.0 (osx1010dev) Intel icc and ifort version 15.0.3 macOS Sierra 10.12.5, Darwin, Apple clang version 8.1.0 from Xcode 8.3 16.6.0, x86_64 gfortran GNU Fortran (GCC) 7.1.0 (kite) Intel icc and ifort version 17.0.2 Debian 8.6.0 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2, x86_64 GNU/Linux gcc (Debian 4.9.2-10) 4.9.2 GNU Fortran (Debian 4.9.2-10) 4.9.2 (cmake and autotools) Fedora24 4.7.2-201.fc24.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3) GNU Fortran (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3) (cmake and autotools) Ubuntu 16.04.1 4.4.0-38-generic #57-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu 5.4.0-6ubuntu16.04.4) 5.4.0 GNU Fortran (Ubuntu 5.4.0-6ubuntu16.04.4) 5.4.0 (cmake and autotools) Known problems ============== o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion, 10.8 Mountain Lion, 10.9 Mavericks, 10.10 Yosemite, and 10.11 El Capitan, when compiling with -O2, some xdr functions might cause memory corruption. This happened for GCC, Intel and Clang compilers. Currently, -O0 level optimization is used to avoid this problem. (HDFFR-1318,1327,1358,1425) EIP - 2013/02/05, BMR - 2016/06/24 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.13%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.13 released on 2017-06-24 ==================================================== INTRODUCTION This document describes the differences between HDF 4.2.12 and HDF 4.2.13. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.13. The HDF 4.2.13 documentation can be found on the The HDF Group's website at: https://www.hdfgroup.org/release4/doc/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: https://support.hdfgroup.org/products/hdf4/ CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.12 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - CMake CMake minimum version is 3.2.2 Support for new platforms and compilers ======================================= - Support for macOS Sierra 10.12.5 was added (LK - 2017/06/23, HDFFR-1558) Bugs fixed since HDF 4.2.12 ========================= Library ========= - Several memory leaks occurred in an SD API internal function. These leaks are now removed. (BMR - 2017/06/23, HDFFR-1534) - Memory leaks occurred because memory returned by HDstrdup were not freed. This is now fixed. (BMR - 2017/06/23, HDFFR-1536) Documentation ============= - Minor improvements were made to the User's Guide, Reference Manual, and Specification and Developer’s Guide. (BMR - 2017/06/23) Platforms tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 2.6.32-573.22.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (mayll/platypus) icc (ICC) 15.0.3.187 Build 20150407 ifort (IFORT) 15.0.3.187 Build 20150407 pgcc and pgf90 15.7-0 64-bit target on x86-64 Linux -tp nehalem Linux, 3.10.0-327.10.1.el7.x86_64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) #1 SMP x86_64, GNU/Linux GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) (kituo/moohan) icc (ICC) 15.0.3.187 Build 20150407 ifort (IFORT) 15.0.3.187 Build 20150407 Linux, 2.6.32-573.18.1.el6.ppc64 (1) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) #1 SMP, ppc64 (ostrich) (2) IBM XL Fortran for Linux, V15.1 (64-bit mode) SunOS 5.11 (32- and 64-bit) Sun C 5.12 SunOS_sparc 2011/11/16 11.1, sparc, sun4v (emu) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Windows 7 x64 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Visual Studio 2015 w/ Intel C, Fortran 2017 (cmake) Windows 10 Visual Studio 2015 w/ Intel Fortran 16 (cmake) Cygwin(CYGWIN_NT-6.1 2.8.0(0.309/5/3) gcc and gfortran compilers (GCC 5.4.0) (cmake and autotools) Windows 10 x64 Visual Studio 2015 w/ Intel Fortran 16 (cmake) Mac OS X 10.9.5, Darwin, 13.4.0 Apple clang version 6.0 from Xcode 6.2 x86_64 gfortran GNU Fortran (GCC) 4.9.2 (wren,quail) Intel icc and ifort Version 15.0.3 Mac OS X 10.10.5, Darwin, 14.5.0 Apple clang version 6.1 from Xcode 7.0 x86_64 gfortran GNU Fortran (GCC) 4.9.2 (osx1010dev) Intel icc and ifort version 15.0.3 Mac OS X 10.11.5, Darwin, 15.6.0 Apple clang version 7.3 from Xcode 7.3 x86_64 gfortran GNU Fortran (GCC) 5.2.0 (osx1010dev) Intel icc and ifort version 15.0.3 macOS Sierra 10.12.5, Darwin, Apple clang version 8.1.0 from Xcode 8.3 16.6.0, x86_64 gfortran GNU Fortran (GCC) 7.1.0 (kite) Intel icc and ifort version 17.0.2 Debian 8.6.0 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2, x86_64 GNU/Linux gcc (Debian 4.9.2-10) 4.9.2 GNU Fortran (Debian 4.9.2-10) 4.9.2 (cmake and autotools) Fedora24 4.7.2-201.fc24.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3) GNU Fortran (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3) (cmake and autotools) SUSE Server 12 SP1 3.12.49-1 #1 SMP x86_64 GNU/Linux gcc (SUSE Linux) 4.8.5 GNU Fortran (SUSE Linux) 4.8.5 (cmake and autotools) Ubuntu 14.04 4.4.0-81-generic #104-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu 5.4.0-6ubuntu16.04.4) 5.4.0 GNU Fortran (Ubuntu 5.4.0-6ubuntu16.04.4) 5.4.0 (cmake and autotools) Known problems ============== o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option.. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion, 10.8 Mountain Lion, 10.9 Mavericks, 10.10 Yosemite, and 10.11 El Capitan, when compiling with -O2, some xdr functions might cause memory corruption. This happened for GCC, Intel and Clang compilers. Currently, -O0 level optimization is used to avoid this problem. (HDFFR-1318,1327,1358,1425) EIP - 2013/02/05, BMR - 2016/06/24 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.12 released on 2016-06-29 ==================================================== INTRODUCTION This document describes the differences between HDF 4.2.11 and HDF 4.2.12. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.12. The HDF 4.2.11 documentation can be found on the The HDF Group's website at: https://www.hdfgroup.org/release4/doc/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: https://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: https://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.11 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - None Library ========= - Behavior of HDstrdup changed HDstrdup now checks the input string for NULL. (BMR, 2016/05/12) - Behavior of SDsetexternalfile changed Previously, when SDsetexternalfile was called more than once on a data set, the library would repeatedly store the external file information in the main file, at different offsets. SDsetexternalfile is now fixed to cause no effect when the data set is already external. (BMR, 2016/05/30) - Added new utility function HDisnetcdf64 for use in tools HDisnetcdf64 returns TRUE(1) or FALSE(0) if a file is a netCDF 64-bit file or not. intn HDisnetcdf64(const char *filename) (BMR, 2016/06/14) Utilities ========= - hdp: detection of netCDF 64-bit file The utility hdp simply failed when the input file was a netCDF 64-bit file. It now reports that it cannot read a netCDF 64-bit file then exits or continue to the next input file. (BMR, 2016/06/14) Support for new platforms and compilers ======================================= - Support for Mac OS X Yosemeti 10.10 added (AKC - 2015/03/04, HDFFR-1500) - Support for Mac OS X El Capitan 10.11 added (AKC - 2015/11/18, HDFFR-1425) (BMR, added for AKC, 2016/06/24) Java Wrapper Library -------------------- The Java HDF JNI library has been integrated into the HDF repository. The configure option is "--enable-java", and the CMake option is HDF4_BUILD_JAVA:BOOL=ON. The package hierarchy has changed from the HDF 4 JNI, which was "ncsa.hdf.hdflib", to HDF 4.2.12, "hdf.hdflib". Bugs fixed since HDF 4.2.11 ========================= Configuration ============= - Examples from mfhdf and hdf will now be installed according to $DESTDIR when it is supplied. (LRK, 2016/06/29, HDFFR-1491) Library ========= - SDsetexternalfile on special elements When the data element is already special, incorrect data length was used for the element in subsequent calls to SDsetexternalfile, causing failures sometimes. This is now fixed. (BMR, 2016/01/04, HDFFR-1516) Utilities ========= - None Documentation ============= - In addition to minor improvements in the contents, user documentation have a new format to improve usability. (BMR, 2016/06/24) Platforms tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 2.6.32-573.22.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (mayll/platypus) icc (ICC) 15.0.3.187 Build 20150407 ifort (IFORT) 15.0.3.187 Build 20150407 pgcc and pgf90 15.7-0 64-bit target on x86-64 Linux -tp nehalem Linux, 3.10.0-327.10.1.el7.x86_64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) #1 SMP x86_64, GNU/Linux GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) (kituo/moohan) icc (ICC) 15.0.3.187 Build 20150407 ifort (IFORT) 15.0.3.187 Build 20150407 Linux, 2.6.32-573.18.1.el6.ppc64 (1) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) #1 SMP, ppc64 (ostrich) (2) IBM XL Fortran for Linux, V15.1 (64-bit mode) SunOS 5.11 (32- and 64-bit) Sun C 5.12 SunOS_sparc 2011/11/16 11.1, sparc, sun4v (emu) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Cygwin(CYGWIN_NT-6.1 2.2.1(0.289/5/3) gcc(4.9.3) compiler and gfortran) (cmake and autotools) Windows 7 x64 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Visual Studio 2015 w/ Intel Fortran 16 (cmake) Windows 8.1 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Windows 8.1 x64 Visual Studio 2012 w/ Intel Fortran 15 (cmake) Visual Studio 2013 w/ Intel Fortran 15 (cmake) Mac OS X 10.8.5, Darwin, 12.6.0 Apple clang version 5.1 from Xcode 5.1 12.6.0, x86_64 gfortran GNU Fortran (GCC) 4.8.2 (swallow,kite) Intel icc and ifort Version 15.0.3 Mac OS X 10.9.5, Darwin, 13.4.0 Apple clang version 6.0 from Xcode 6.2 13.4.0, x86_64 gfortran GNU Fortran (GCC) 4.9.2 (wren,quail) Intel icc and ifort Version 15.0.3 Mac OS X 10.10.5, Darwin, 14.5.0 Apple clang version 6.0 from Xcode 7.0 14.5.0, x86_64 666666 gfortran GNU Fortran (GCC) 4.9.2 (osx1010dev) Intel icc and ifort version 15.0.3 Mac OS X 10.11.5, Darwin, 15.4.0 Apple clang version 7.3 from Xcode 7.3 15.5.0, x86_64 666666 gfortran GNU Fortran (GCC) 5.2.0 (osx1010dev) Intel icc and ifort version 15.0.3 Debian7.5.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1, x86_64 GNU/Linux gcc (Debian 4.7.2-5) 4.7.2 GNU Fortran (Debian 4.7.2-5) 4.7.2 (cmake and autotools) Fedora20 3.15.3-200.fc20.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1) GNU Fortran (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1) (cmake and autotools) SUSE 13.1 3.11.10-17-desktop #1 SMP PREEMPT x86_64 GNU/Linux gcc (SUSE Linux) 4.8.1 GNU Fortran (SUSE Linux) 4.8.1 (cmake and autotools) Ubuntu 14.04 3.13.0-35-generic #62-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1 GNU Fortran (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1 (cmake and autotools) Known problems ============== o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake builds in Windows uses the same pre-generated ncgen*.[ch] files from the yacc/lex input files. The generated file, ncgenyy.c, uses the header file that Windows does not support. This must be blocked out in order for Windows to use it. AKC 2014-02-03, HDFFR-1424 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion, 10.8 Mountain Lion, 10.9 Mavericks, 10.10 Yosemite, and 10.11 El Capitan, when compiling with -O2, some xdr functions might cause memory corruption. This happened for GCC, Intel and Clang compilers. Currently, -O0 level optimization is used to avoid this problem. (HDFFR-1318,1327,1358,1425) EIP - 2013/02/05, BMR - 2016/06/24 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.11%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.11 released on 2015-02-09 ============================================== INTRODUCTION This document describes the differences between HDF 4.2.10 and HDF 4.2.11. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.11. The HDF 4.2.11 documentation can be found on the The HDF Group's website at: http://www.hdfgroup.org/release4/doc/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.10 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - None Support for new platforms and compilers ======================================= - None Bugs fixed since HDF 4.2.10 ========================= Configuration ============= - Windows installer incorrect display of PATH environment variable. In the Windows installer, the dialog box where the user can elect to add the product's bin path to the %PATH% environment variable displayed an incorrect path. This path was missing the C:\Program Files part and used the POSIX file separator '/' before the bin (/bin, instead of \bin). The dialog box text was changed to simply say that the product's bin path would be added instead of explicitly displaying the path. This is in line with most installers. The reason for not fixing the displayed path instead is that it is difficult to pass the correct path from CPack to the NSIS installer for display. Note that this was never a code issue - it was just a display problem. The installer always did the right thing when updating the environment variable. (DER - 2014/11/14, HDFFV-9016) Library ========= - Warning "array subscript is below array bounds" Applied user's patch to remove the warning. (BMR 2014/06/02, HDFFR-1379) Utilities ========= - Detection of read failure in ncdump Previously, ncdump did not detect failure from ncvarget because the returned value from ncvarget was not checked, and the calling function simply returned 0. The error code ERR_READFAIL (-2) is added to ncdump only to indicate this failure within ncdump, which will display this message: "Reading failed for variable , the data is possibly corrupted." (BMR 2015/01/21, HDFFR-1468) - Improvement of the ncgen's usage statement. Previously, ncgen's usage looked like this: ncgen: -: Usage: ncgen [-V] [ -b ] [ -c ] [ -f ] [ -o outfile] [ file... ] More details are added to the usage to improve clarity. Now, it is more clear, and consistent with ncdump, like this: Usage: ncgen [-V] [ -b ] [ -c ] [ -f ] [ -o outfile] [ file ... ] [-V] Display version of the HDF4 library and exit [-b] For binary netCDF output, '.nc' extension [-c] For C output [-f] For Fortran output [-o ] Explicitly specify output file name (BMR 2015/01/19, HDFFR-1459) - Output of hrepack containing an unnecessary vgroup of class RIG0.0 When the input file did not have any GR elements, hrepack still opened and closed the output file using the GR API, which caused the RIG0.0 vgroup to be written to the output file. Hrepack now skips accessing the output file using GR API, when the input file doesn't have any images and any GR attributes. (BMR 2015/01/18, HDFFR-1428) - Compliance with Fedora standard regarding printf/fprintf statements Users sent patches for the problem where the format string is missing from the printf/fprintf statements. This is in compliance with Fedora standard. For more information, see https://fedoraproject.org/wiki/Format-Security-FAQ. In the context where this problem occurred, the benefit of using puts/fputs over printf/fprintf is insignificant. Thus, the fix was adding "%s" to those printf/fprintf statements that don't have the format string instead of switching to puts/fputs. (BMR 2014/12/16, HDFFR-1423 and HDFFR-1475) - Failure of hdp on some hdfeos generated files Attribute vdatas created by hdfeos API have the field named "AttrValues". The utility functions Vattrhdfsize and VSattrhdfsize, in hdp.c, used ATTR_FIELD_NAME ("VALUES") to verify that a vdata is storing an attribute, causing failure on some hdfeos generated files. In addition, when this failure occurred, the calling function tried to free allocated resources prematurely. The check against ATTR_FIELD_NAME and the premature resource deallocation are removed. (BMR 2014/12/08, HDFFR-1471) - nclong versus long in tests Applied the user's patch to remove a test failure. (BMR 2014/10/21, HDFFR-1378) Documentation ============= - Updated Reference Manual and User's Guide The documents were updated to contain information of the changes to the tools. In addition, various improvements were applied. (BMR 2015/2/04) Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.32-358.18.1 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) .el6.ppc64 #1 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) SMP ppc64 GNU/Linux IBM XL Fortran for Linux, V15.1 (64-bit mode) (ostrich) Linux 2.6.18-308.13.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) SMP i686 i386 GNU Fortran (GCC) 4.1.2 20080704 (jam) (Red Hat 4.1.2-55) pgcc and pgf90 14.10-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 15.0.1 20141022 Intel(R) Fortran Compiler, Version 15.0.1 Linux 2.6.18-398.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.1.2 20080704 (koala) (Red Hat 4.1.2-55) icc (ICC) 15.0.1 20141022 ifort (IFORT) 15.0.1 20141022 Linux 2.6.32-504.1.3.el6 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.4.7 20120313 (platypus) (Red Hat 4.4.7-11) icc (ICC) 15.0.1 20141022 ifort (IFORT) 15.0.1 20141022 pgcc and pgf90 14.10-0 64-bit target on x86-64 Linux -tp nehalem Linux 3.10.0-123.8.1.el7 gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-16) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.8.2 20140120 (aws ec2 CentOS 7 image) (Red Hat 4.8.2-16) SunOS 5.11 32- and 64-bit Sun C 5.12 SunOS_sparc 2011/11/16 (emu) (see "Known problem" section) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2008 (cmake) Visual Studio 2010 w/ Intel Fortran 14 (cmake) Visual Studio 2012 w/ Intel Fortran 14 (cmake) Visual Studio 2013 w/ Intel Fortran 14 (cmake) Cygwin(CYGWIN_NT-6.1 1.7.32(0.274/5/3) gcc(4.8.3) compiler and gfortran) (cmake and autotools) Windows 7 x64 Visual Studio 2008 (cmake) Visual Studio 2010 w/ Intel Fortran 14 (cmake) Visual Studio 2012 w/ Intel Fortran 14 (cmake) Visual Studio 2013 w/ Intel Fortran 14 (cmake) Windows 8.1 Visual Studio 2012 w/ Intel Fortran 14 (cmake) Visual Studio 2013 w/ Intel Fortran 14 (cmake) Windows 8.1 x64 Visual Studio 2012 w/ Intel Fortran 14 (cmake) Visual Studio 2013 w/ Intel Fortran 14 (cmake) Mac OS X 10.7.5 Apple clang version 3.0 from Xcode 4.6.1 Darwin 11.4.2 gfortran GNU Fortran (GCC) 4.8.2 (duck) icc and ifort Version 13.0.3 20130606 Mac OS X 10.8.5 Apple clang version 5.1 from Xcode 5.1 Darwin 12.5.0 gfortran GNU Fortran (GCC) 4.8.2 (swallow,kite) icc and ifort Version 14.0.4 20140805 Mac OS X 10.9.5 Apple clang version 6.0 from Xcode 6.0.1 Darwin 13.4.0 gfortran GNU Fortran (GCC) 4.8.2 (wren,quail) icc and ifort Version 15.0.1 20141022 Debian7.5.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux gcc (Debian 4.7.2-5) 4.7.2 GNU Fortran (Debian 4.7.2-5) 4.7.2 (cmake and autotools) Fedora20 3.15.3-200.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1) GNU Fortran (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1) (cmake and autotools) SUSE 13.1 3.11.10-17-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.8.1 GNU Fortran (SUSE Linux) 4.8.1 (cmake and autotools) Ubuntu 14.04 3.13.0-35-generic #62-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1 GNU Fortran (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1 (cmake and autotools) Known problems ============== o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake builds in Windows uses the same pre-generated ncgen*.[ch] files from the yacc/lex input files. The generated file, ncgenyy.c, uses the header file that Windows does not support. This must be blocked out in order for Windows to use it. AKC 2014-02-03, HDFFR-1424 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion and on 10.8 Mountain Lion, several tests fail with GCC, Intel and Clang compilers. Currently, this situation is detected and -O0 level optimization is used. (HDFFR-1318,1358) EIP - 2013/02/05 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.10 released on 2014-02-09 ============================================== INTRODUCTION This document describes the differences between HDF 4.2.9 and HDF 4.2.10. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.10. The HDF 4.2.10 documentation can be found on the The HDF Group's website at: http://www.hdfgroup.org/doc.html Previous versions of the documentation are available from the FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.9 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= CMake - Added support to create dmg bundles on Mac. (ADB 2013/9/12) CMake - Added support to use Windows /MT option. (ADB 2013/6/10) Support for new platforms and compilers ======================================= - Visual Studio 2012 w/ Intel Fortran 13 on Windows 7 and Windows 8 - Mac OS X Mavericks with clang and gfortran Bugs fixed since HDF 4.2.9 ========================= Configuration ============= - Removed the requirement of yacc/lex like tools. The ncgenXXX.* files generated files from yacc and lex input files are pre-created in the source code to build the ncgen tool. The msoft*.[ch] files were for Windows build but was out of dated. Cmake uses the pre-created files instead. See known problem below. (AKC 2014/02/02 HDFFR-1419) - Removed old Macintosh platform codes that are not used any more. (AKC 2014/01/21 HDFFR-1340) - Changed Mac platforms to use the Apple supported clang compiler as the default C compiler. (AKC 2014/01/15 HDFFR-1318) - Removed the following individual platform specific files and have them to be produced by configure using corresponding *.in files. mfhdf/libsrc/config/netcdf-XXX.h by mfhdf/libsrc/netcdf.h.in mfhdf/fortran/config/ftest-XXX.f by mfhdf/fortran/ftest.f.in mfhdf/fortran/config/jackets-XXX.c by mfhdf/fortran/jackets.c.in mfhdf/fortran/config/netcdf-XXX.inc by mfhdf/fortran/netcdf.inc.in (AKC 2013/12/31 HDFFR-1320/476) - The following platforms are old and no longer available. Removed their support code from the configure files: alpha, convex, dec, fujivp, hpux, ia64, irix32, irix4, irix5, irix6, mac, solarisx86, sun, t3e, unicos. (AKC 2013/12/26 HDFFR-1320) - Removed -Xc (strict ansi standard) from the default CFLAGS of Solaris since the latest Sun Compiler version 5.11 and 5.12 have a conflict with the system header file. Since the current versions of C compiler should be at least ANSI (aka C89) compliant, the removal of -Xc should be safe. This also fixes a previous known problem of needing to use -xc99 to build HDF4. (AKC 2013/12/20 HDFFR-1361) - CMake - Changed name of TGZ_PATH to TGZPATH. (ADB 2013/9/12) - CMake - Removed extra flag POSIX_SOURCE as it caused failures on Apple Mac builds. (ADB 2013/8/7) Library ========= - SDsetblocksize and VSsetblocksize would not change the block size if the sds/vdata did not use linked-block before it was closed. The problem is now fixed. (BMR 2013/1/15 - HDFFR-1357) - Patches from user are applied to the C test to correct an overflow variable and to the Fortran source for some missing declarations. (BMR/EP 2014/1/15 - HDFFR-1367) - Examples GR_write_chunks.c and GR_read_chunks.c were added. (BMR 2014/12/30 - HDFFR-1402) Utilities ========= - ncdump displayed garbage in place of fill-values when a variable had unlimited dimension and had been written with less number of records than the largest number of records in the file. This is now fixed. (BMR 2014/12/16 - HDFFR-1390) Documentation ============= - None Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.32-358.18.1 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) .el6.ppc64 #1 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) SMP ppc64 GNU/Linux IBM XL Fortran for Linux, V13.1 (64-bit mode) (ostrich) Linux 2.6.18-308.13.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) SMP i686 i386 GNU Fortran (GCC) 4.1.2 20080704 (jam) (Red Hat 4.1.2-52) pgcc and pgf90 13.7-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 13.1.3 20130607 Intel(R) Fortran Compiler, Version 13.1.3 Linux 2.6.18-308.24.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.1.2 20080704 (koala) (Red Hat 4.1.2-54) icc (ICC) 13.1.3 20130607 ifort (IFORT) 13.1.3 20130607 pgcc and pgf90 13.7-0 64-bit target on x86-64 Linux -tp nehalem Linux 2.6.32-431.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.4.7 20120313 (platypus) (Red Hat 4.4.7-4) icc (ICC) 13.1.3 20130607 ifort (IFORT) 13.1.3 20130607 SunOS 5.11 32- and 64-bit Sun C 5.12 SunOS_sparc 2011/11/16 (emu) (see "Known problem" section) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Visual Studio 2012 w/ Intel Fortran 13 (cmake) Cygwin(CYGWIN_NT-6.1 1.7.25(0.270/5/3) gcc(4.7.3) compiler and gfortran) (cmake and autotools) Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Visual Studio 2012 w/ Intel Fortran 13 (cmake) Windows 8 Visual Studio 2012 w/ Intel Fortran 13 (cmake) Windows 8 x64 Visual Studio 2012 w/ Intel Fortran 13 (cmake) Mac OS X Intel 10.6.8 Apple clang version 1.7 from Xcode 3.2.6 Darwin 10.8.0 gfortran GNU Fortran (GCC) 4.6.2 (fred) icc and ifort Version 12.1.6 20120928 Mac OS X 10.7.5 Apple clang version 3.0 from Xcode 4.6.1 Darwin 11.4.2 gfortran GNU Fortran (GCC) 4.6.2 (duck) icc and ifort Version 13.0.3 20130606 Mac OS X 10.8.5 Apple clang version 4.2 from Xcode 4.6.1 Darwin 12.2.0 gfortran GNU Fortran (GCC) 4.6.2 (wren) icc and ifort Version 13.0.3 20130606 Mac OS X 10.8.5 Apple clang version 5.0 from Xcode 5.0.2 Darwin 12.2.0 gfortran GNU Fortran (GCC) 4.6.2 (swallow,kite) icc and ifort Version 14.0.1 20131010 Mac OS X 10.9.1 Apple LLVM version 5.0 (clang-500.2.79) Darwin 13.0.0 (based on LLVM 3.3svn) gfortran GNU Fortran (GCC) 4.6.2 Debian7.2.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux gcc (Debian 4.7.2-5) 4.7.2 GNU Fortran (Debian 4.7.2-5) 4.7.2 (cmake and autotools) Fedora20 3.11.10-301.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) GNU Fortran (GCC) 4.8.2 20130603 (Red Hat 4.8.2-7) (cmake and autotools) SUSE 13.1 3.11.6-4-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.8.1 GNU Fortran (SUSE Linux) 4.8.1 (cmake and autotools) Ubuntu 13.10 3.11.0-13-generic #20-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 GNU Fortran (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 (cmake and autotools) Known problems ============== o CMake builds in Windows uses the same pre-generated ncgen*.[ch] files from the yacc/lex input files. The generated file, ncgenyy.c, uses the header file that Windows does not support. This must be blocked out in order for Windows to use it. (AKC 2014-02-03 HDFFR-1424). o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o CMake does not install these man pages: hdf.1, ncdump.1, ncgen.1 AKC/BMR - 2014/02/02 o For Mac OS X 10.7 Lion and on 10.8 Mountain Lion, several tests fail with GCC, Intel and Clang compilers. Currently, this situation is detected and -O0 level optimization is used. We will work on the issue for the next release. (HDFFR-1318,1358) EIP - 2013/02/05 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 %%%4.2.9%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.9 released on 2013-02-07 ============================================= INTRODUCTION This document describes the differences between HDF 4.2.8 and HDF 4.2.9. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.9. The HDF 4.2.9 documentation can be found on the The HDF Group's website at: http://www.hdfgroup.org/doc.html Previous versions of the documentation are available from the FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration - Support for new platforms and compilers - Bugs fixed since HDF 4.2.8 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - The macro H4_NO_DEPRECATED_SYMBOLS was added to handle deprecated functions/features. To use deprecated functions/features, the library must be configured with option HDF4_ENABLE_DEPRECATED_SYMBOLS. (ADB, BMR 2013/1/25) Support for new platforms and compilers ======================================= - Ported to Mac OSX 10.8 (Mountain Lion) with Clang as the default C compiler. (AKC 2013/1/19) - Ported to Mac OSX 10.8 (Mountain Lion) with Intel compilers. (EIP 2013/02/05) Bugs fixed since HDF 4.2.8 ========================= Configuration ============= - Cygwin >= 1.7.7; The SunRPC of the glibc has been replaced by a TI-RPC (Transport Independent RPC) library to support IPv6. Configure has been updated to look for the tirpc library instead of rpc. (ADB 2012/11/09) Library ========= - SDgetcompress is now deprecated and not available by default. Its availability can be activated using option HDF4_ENABLE_DEPRECATED_SYMBOLS. (BMR 2012/1/25) - Some memory leaks were fixed. (BMR 2012/10/01) Utilities ========= - Vnattrs/Vattrinfo/Vgetattr are replaced with Vnattrs2/Vattrinfo2/Vgetattr2 in various tools to ensure attributes that are not created by Vsetattr can still be detected and accessed. The Reference Manual and User's Guide provide details about this issue. (BMR 2012/12/25) Documentation ============= - The Reference Manual and User's Guide have minor updates. - The Specification and Developer's Guide is extensively updated. Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.32-279.19.1 gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) .el6.ppc64 #1 GNU Fortran (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) SMP ppc64 GNU/Linux IBM XL Fortran for Linux, V13.1 (64-bit mode) (ostrich) Linux 2.6.18-308.13.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) SMP i686 i386 GNU Fortran (GCC) 4.1.2 20080704 (jam) (Red Hat 4.1.2-52) pgcc and pgf90 11.9-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 12.1.0 20110811 Intel(R) Fortran Compiler, Version 12.1.0 Linux 2.6.18-308.24.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.1.2 20080704 (koala) (Red Hat 4.1.2-52) icc (ICC) 12.1.0 20110811 ifort (IFORT) 12.1.0 20110811 pgcc and pgf90 11.9-0 64-bit target on x86-64 Linux -tp nehalem SunOS 5.10 32- and 64-bit Sun C 5.9 SunOS_sparc Patch 124867-16 2010/08/11 (linew) Sun Fortran 95 8.3 SunOS_sparc Patch 127000-13 2010/01/26 Sun C 5.11 SunOS_sparc 2010/08/13 Sun Fortran 95 8.5 SunOS_sparc 2010/08/13 SunOS 5.11 32- and 64-bit Sun C 5.12 SunOS_sparc 2011/11/16 (emu) (see "Known problem" section) Sun Fortran 95 8.6 SunOS_sparc 2011/11/16 Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(CYGWIN_NT-6.1 1.7.15(0.260/5/3) gcc(4.5.3) compiler and gfortran) Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(CYGWIN_NT-6.1 1.7.15(0.260/5/3) gcc(4.5.3) compiler and gfortran) MAC OS X Intel 10.6.8 icc (ICC) 12.1 Build 20120928 (64-bit) ifort (IFORT) 12.1 Build 20120928 Darwin 10.8.0 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (fred) GNU Fortran (GCC) 4.6.2 20111019 Apple clang version 1.7 (tags/Apple/clang-77) (based on LLVM 2.9svn) MAC OS X Intel 10.7.5 i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (64 bit) GNU Fortran (GCC) 4.6.2 20111019 Darwin 11.4.2 icc and ifort Version 13.0 Build 20121010 (duck) Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn) Mac OS X 10.8.2 Apple LLVM version 4.2 (clang-425.0.24) Darwin 12.2.0 gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (wren) gfortran GNU Fortran (GCC) 4.6.2 icc and ifort Version 13.0.1.119 Build 20121010 Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Fedora17 3.5.2-1.fc17.i6866 #1 SMP i686 i686 i386 GNU/Linux gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5) GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5) Fedora17 3.5.2-1.fc17.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5) GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5) SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux gcc (SUSE Linux) 4.7.1 GNU Fortran (SUSE Linux) 4.7.1 SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.7.1 GNU Fortran (SUSE Linux) 4.7.1 Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP i686 GNU/Linux gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Known problems ============== o On SunOS 5.11, the -xc99 flag has to be used with the cc compiler to avoid compilation errors. Future releases will automatically detect the system and add the flag. (HDFFR-1361) EIP - 2013/02/05 o For Mac OS X 10.7 Lion and on 10.8 Mountain Lion, several tests fail with GCC, Intel and Clang compilers. Currently, this situation is detected and -O0 level optimization is used. We will work on the issue for the next release. (HDFFR-1358,1327,1358) EIP - 2013/02/05 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of the jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc versions (e.g., V7.0) still fail, but newer xlc versions (e.g., V9.0) pass. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. %%%4.2.8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.8 released on 2012-08-03 =================================================== INTRODUCTION This document describes the differences between HDF 4.2.7 and HDF 4.2.8. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.8. The HDF 4.2.8 documentation can be found on the The HDF Group's FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Source distribution -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF 4.2.7 -- Configuration -- Library -- Utilities - Documentation - Platforms tested - Known problems New features and changes ======================== Source distribution =================== - [None. PPM - YYYY/MM/DD] Configuration ============= - [None] Library ========= - It was discovered by the HDF Mapping Project that there were certain type of palettes that cannot be retrieved by existing functions. A new function, GRgetpalinfo, was added to allow applications to get information about palettes. Please refer to the HDF User's Guide and Reference Manual for more information regarding this palette issue. BMR - 2012/07/26 - It was also discovered that the IMCOMP compression was not detected. Although IMCOMP is no longer supported in new data, HDF still needs to detect IMCOMP compression from existing data. We added COMP_CODE_IMCOMP to comp_coder_t with value 12 (same as COMP_IMCOMP.) The library and hdp now can detect IMCOMP compression. However, writing IMCOMP compressed images is not allowed. BMR - 2012/07/26 - Added GRgetcomptype to return image's compression, which can include IMCOMP. BMR - 2012/07/26 Test ==== - [None] Utilities ========= - [None] Support for new platforms and compilers ======================================= - Mac OS X 10.7.4 with GNU gcc and gfortran compilers Bugs fixed since HDF 4.2.7 ========================= Configuration ============= - Add config/apple-darwin11.4.0 customized for Mac OS X 10.7 Lion. This one set production CFLAGS to -O0 to eliminate the test errors encountered in Lion systems only. This one lets HDF4 to be build and run in Lion systems. More investigate needed to locate the exact locations of the errors. (HDFFR-1327 and HDFFR-1328) AKC - 2012/07/03 - The USE_ENUM in mfhdf/libsrc/netcdf.h, which is copied from config/netcdf-apple.h, which generated an error due to xdr_enum overwrote memory outside of its designated enum variable. This happened only to the apple provided compiler (i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1). We decided to not define USE_ENUM for all apple OS for now. (HDFFR-1318) AKC - 2012/07/01 Library ========= - [None] Utilities ========= - Added test file IMCOMP.hdf and sample file dumpgr-20.out for IMCOMP test for testing the detection of IMCOMP compressed image in hdp. BMR - 2012/07/26 Documentation ============== - The Reference Manual and User's Guide have been updated to include new functions: + GRgetpalinfo + GRgetcomptype BMR - 2012/07/26 Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.32-279.2.1 gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) .el6.ppc64 #1 GNU Fortran (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) SMP ppc64 GNU/Linux IBM XL Fortran for Linux, V13.1 (64-bit mode) (ostrich) Linux 2.6.18-194.3.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) SMP i686 i386 GNU Fortran (GCC) 4.1.2 20080704 (jam) (Red Hat 4.1.2-52) pgcc and pgf90 11.9-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 12.1.0 20110811 Intel(R) Fortran Compiler, Version 12.1.0 Linux 2.6.18-274.17.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51) SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.1.2 20080704 (koala) (Red Hat 4.1.2-51) icc (ICC) 12.1.0 20110811 ifort (IFORT) 12.1.0 20110811 pgcc and pgf90 11.9-0 64-bit target on x86-64 Linux -tp nehalem SunOS 5.10 32- and 64-bit Sun C 5.9 SunOS_sparc Patch 124867-16 2010/08/11 (linew) Sun Fortran 95 8.3 SunOS_sparc Patch 127000-13 2010/01/26 Xeon Linux 2.6.32.24-0.2.1.2230.2.PTF-default #1 SMP x86_64 Intel(R) C Compiler Version 11.1.073 20100806 SGI Altix UV Intel(R) Fortran Compiler Version 11.1.073 (ember) gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973 GNU Fortran (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(1.7.15 native gcc(4.5.3) compiler and gfortran) Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(1.7.15 native gcc(4.5.3) compiler and gfortran) MAC OS X Intel 10.6.8 Darwin 10.8.0 (32 bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (tejeda) GNU Fortran (GCC) 4.6.1 icc (ICC) 12.1.0 20110811 ifort (IFORT) 12.1.0 20110811 MAC OS X Intel 10.6.8 Darwin 10.8.0 (64 bit) icc (ICC) 12.1.0 20110811 (fred) ifort (IFORT) 12.1.0 20110811 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 GNU Fortran (GCC) 4.6.2 MAC OS X Intel 10.7.4 Darwin 11.4.0 (64 bit) i686-apple-darwin11-llvm-gcc-4.2.1 (GCC) 4.2.1 (hdf-duck) gcc (GCC) 4.6.2 GNU Fortran (GCC) 4.6.2 Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Fedora15 3.2.9-2.fc16.i686.PAE #1 SMP i686 i686 i386 GNU/Linux gcc (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1) GNU Fortran (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1) Fedora15 3.2.9-2.fc16.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1) GNU Fortran (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1) SUSE 12.1 3.1.9-1.4-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux gcc (SUSE Linux) 4.6.2 GNU Fortran (SUSE Linux) 4.6.2 SUSE 12.1 3.1.9-1.4-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.6.2 GNU Fortran (SUSE Linux) 4.6.2 Ubuntu 11.10 3.2.0-26-generic #23-Ubuntu SMP i686 GNU/Linux gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Ubuntu 11.10 3.2.0-26-generic #23-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Known problems ============== o For Mac OS X 10.7 Lion, the test suite on the mfhdf side encounters 2 errors, when optimization is used, whether with the Apple GCC compiler or with the GNU GCC compiler. CFLAGS must be set to use no optimization (-O0 or -g) to avoid these failures. config/apple-darwin11.4.0 is added to direct configure to use -O0 for CFLAGS for Mac OS X 10.7 Lion. We hope to fix the bug in the next release. (HDFFR-1327 and HDFFR-1328) AKC - 2012/07/03 o On IBM PowerPC 64 hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure will fail when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc (e.g., V7.0) still fails but newer xlc (e.g., V9.0) passes. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. %%%4.2.7%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.7 released on 2012-02-06 =================================================== INTRODUCTION This document describes the differences between HDF 4.2.6 and HDF 4.2.7. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.7. The HDF 4.2.7 documentation can be found on the The HDF Group's FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Source distribution -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2.6 -- Utilities -- Library -- Configuration - Documentation - Platforms tested - Known problems New features and changes ======================== Source distribution =================== - None Configuration ============= - Fortran fort_ps folders are now obsolete, and VS2008 project files have been updated. CMake was tested on Windows, Linux, and Cygwin. ADB - 2012/1/20 Library ========= - Fortran fort_ps folders are obsolete and have been removed. ADB - 2012/1/20 - VSgetexternalfile and SDgetexternalfile are superseded by VSgetexternalinfo and SDgetexternalinfo because their prototypes missed the parameter "length" for external data length. (part 1 in bug HDFFR-1297) BMR - 2012/1/15 - Visinternal is superseded by Vgisinternal, which allows the handling of special cases in old data. (part 2 in bug HDFFR-1297) BMR - 2012/1/15 - Fortran wrappers vfgvgroups and vsfgvdatas have been added for Vgetvgroups and VSgetvdatas, respectively. MSB - 2012/1/5 Test ==== - The following files were added: ./hdf/test/test_files/README: special notes on data files in this directory ./hdf/test/test_files/grtdfui83.hdf: file to test old data situations ./mfhdf/test/tutils.c: added to provide common code for various tests BMR - 2011/1/21 - The following file was removed: ./mfhdf/test/tidtypes.c: changed to tmixed_apis.c for broader contents BMR - 2011/1/21 Utilities ========= - The following files were added: ./mfhdf/dumper/testfiles/Roy.nc: file to test skipping compression check in a netCDF file ./mfhdf/dumper/testfiles/dumpsds-18.out: output of testing netCDF file ./hdf/test/tvnameclass.c: tests issues involving vgroup/vdata names/classes BMR - 2011/1/21 Support for new platforms and compilers ======================================= - IBM XL Fortran for Linux 64-bit, V13.1 on Linux PowerPC 64 EIP - 2012-02-01 Bugs fixed since HDF4.2.6 ========================= Utilities ========= - hrepack: Version HDF4 2.6 does not allow the combination of unlimited dimensions and compression, which is wrong. - Freeing incorrect buffers caused segfault. It was previously commented out, thus resulted in memory leaks. This is now fixed. (HDFFR-479) BMR - 2011/11/3 - hdp: fixed to skip netCDF files when checking for compression. (HDFFR-473) BMR - 2011/11/1 Library ========= - SDgetchunkinfo and SDreadchunk failed on an empty SDS when the file is opened as read-only (HDFFR-171). This is now fixed. BMR - 2011/10/20 - SDcheckempty was fixed to return "empty" when detecting a pair of DFTAG_SD/ that is associated with offset=INVALID_OFFSET and length=INVALID_LENGTH. BMR - 2011/10/9 - Vgetclass and Vgetname were fixed to return vgclass and vgname with null terminated character when the class or name is not set. (HDFFR-1288) BMR - 2011/9/19 Configuration ============= - [None] Documentation ============== - The Reference Manual and User's Guide have been updated to include new functions: + VSgetexternalinfo and SDgetexternalinfo + Vgisinternal + Fortran wrappers vfgvgroups and vsfgvdatas BMR - 2012/1/22 Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.32-220.2.1 gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3) .el6.ppc64 #1 GNU Fortran (GCC) 4.4.6 20110731 SMP ppc64 GNU/Linux IBM XL Fortran for Linux, V13.1 (64-bit mode) (ostrich) Linux 2.6.18-194.3.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) SMP i686 i386 GNU Fortran (GCC) 4.1.2 20080704 (jam) (Red Hat 4.1.2-51) pgcc and pgf90 11.8-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 12.0.4 20110427 Intel(R) Fortran Compiler, Version 12.0.4 Linux 2.6.18-274.17.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51) SMP x86_64 GNU/Linux GNU Fortran (GCC) 4.1.2 20080704 (koala) (Red Hat 4.1.2-51) icc (ICC) 12.0.4 20110427 ifort (IFORT) 12.0.4 20110427 pgcc and pgf90 11.8-0 64-bit target on x86-64 Linux -tp nehalem SunOS 5.10 32- and 64-bit Sun C 5.9 SunOS_sparc Patch 124867-16 2010/08/11 (linew) Sun Fortran 95 8.3 SunOS_sparc Patch 127000-13 2010/01/26 Xeon Linux 2.6.32.24-0.2.1.2230.2.PTF-default #1 SMP x86_64 Intel(R) C Compiler Version 11.1.073 20100806 SGI Altix UV Intel(R) Fortran Compiler Version 11.1.073 (ember) Windows XP Visual Studio 2008 w/ Intel Fortran 10.1 (project files) Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran) Windows XP x64 Visual Studio 2008 w/ Intel Fortran 10.1 (project files) Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran) Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 w/ Intel Fortran 12 (cmake) MAC OS X Intel 10.6.8 Darwin 10.8.0 (32 bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (tejeda) GNU Fortran (GCC) 4.6.1 icc (ICC) 12.1.0 20110811 ifort (IFORT) 12.1.0 20110811 MAC OS X Intel 10.6.8 Darwin 10.8.0 (64 bit) icc (ICC) 12.1.0 20110811 (fred) ifort (IFORT) 12.1.0 20110811 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 GNU Fortran (GCC) 4.6.1 Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Fedora15 2.6.41.4-1.fc15.i686.PAE #1 SMP i686 i686 i386 GNU/Linux gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9) GNU Fortran (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9) Fedora15 2.6.41.4-1.fc15.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9) GNU Fortran (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9) SUSE 11.4 2.6.37.6-0.9-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux gcc (SUSE Linux) 4.5.1 20101208 GNU Fortran (SUSE Linux) 4.5.1 20101208 SUSE 11.4 2.6.37.6-0.9-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.5.1 20101208 GNU Fortran (SUSE Linux) 4.5.1 20101208 Ubuntu 11.10 3.0.0-14-generic #23-Ubuntu SMP i686 GNU/Linux gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 GNU Fortran (Ubuntu/Linaro 4.6.4-9ubuntu3) 4.6.1 Ubuntu 11.10 3.0.0-14-generic #23-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 GNU Fortran (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Known problems ============== o On IBM PowerPC 64 hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure fails when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of jpeg library have HAVE_STDLIB_H defined in the jconfig.h header file. Without the -qlanglvl=ansi, some older xlc (e.g., V7.0) still fails but newer xlc (e.g., V9.0) passes. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. %%%4.2.6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.6 released on 2011-06-15 =================================================== INTRODUCTION This document describes the differences between HDF 4.2.5 and HDF 4.2.6. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.6. The HDF 4.2.6 documentation can be found on the The HDF Group's FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Source distribution -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2.5 -- Utilities -- Library -- Configuration - Documentation - Platforms tested - Known problems New features and changes ======================== Source distribution =================== - [None] Configuration ============= - CMake support has been added. Current version recommemded is CMake 2.8.4. ADB - 2011/06/14 - Specified explicit version of the netCDF API (v 2.3.2) used by HDF in configure help and in configuration SUMMARY. Library ========= - Prior to HDF version 4.2.6, passing 0 for count caused failure; however, the failure did not occur in SDsetattr but was delayed until SDend. This can potentially cause file corruption. Starting from release 4.2.6, SDsetattr will fail when count is 0. BMR - 2011/06/09 - The function Vnattrs only processes attributes created by Vsetattr. It is not aware of attributes created by the pre-Vsetattr methods. The following functions are added to work around the limitation of Vnattrs: + Vnattrs2 gives number of new- and old-style attributes + Vattrinfo2 gives information about an old or new style attribute + Vgetattr2 reads values of an old or new style attribute BMR - 2011/06/09 - The following functions were added to support the HDF4 Mapping project specifically: + VSgetdatainfo gives offsets/lengths of a vdata's data + ANgetdatainfo gives offset/length of an annotation's data + SDgetdatainfo gives offsets/lengths of a data set's data + GRgetdatainfo gives offsets/lengths of a raster image's data + VSgetattdatainfo gives offset/length of vdata attribute's data + VGgetattdatainfo gives offset/length of vgroup attribute's data + GRgetattdatainfo gives offset/length of raster image attribute's data + SDgetattdatainfo gives offset/length of data set attribute's data + SDgetoldattdatainfo gives offset/length of a pre-defined attribute in old format + SDgetanndatainfo gives offset/length of an annotation belonging to an SDS + Vgetvgroups gives a list of user-created vgroups + VSgetvdatas gives a list of user-created vdatas + VSofclass gives a list of vdatas of a specific class + Hgetntinfo gives some information about a number type + GR2bmapped indicates whether a raster image should be mapped BMR - 2011/06/09 - Two functions are added to provide information of an external file: VSgetexternalfile for a vdata and SDgetexternalfile for a data set. BMR - 2011/06/09 Utilities ========= - [None] Support for new platforms and compilers ======================================= - [None] Bugs fixed since HDF4.2.5 ========================= Utilities ========= - hdp dumpvd and dumpsds now provide the name of the external file in the error message when reading fails due to missing the external file. BMR - 2011/06/10 - The problem where hdiff displays zeroes for Vdata values that are non-zero had been fixed. BMR - 2011/06/09 - hdp had been fixed for the problems of + dumpvd printing Name/Class incorrectly + dumprig giving wrong info about RIS24 and palettes + dumpvg missing some items in the Graphical representation BMR - 2011/06/09 Library ========= - The JPEG test failure due to the different versions of the JPEG library had been fixed. HDF4 is expected to build and pass regression tests for any version of the JPEG library available on the user's systems. BMR - 2011/06/09 Configuration ============= - [None] Documentation ============== The updated HDF Reference Manual is now available in HTML format. Platforms tested ================ This version has been tested in the following platforms: Linux 2.6.18-194.3.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) SMP i686 i386 G95 (GCC 4.0.3 (g95 0.92!) Jun 24 2009) (jam) g77 (GCC) 3.4.6 20060404 pgcc and pgf90 10.6-0 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 11.1 Intel(R) Fortran Compiler, Version 11.1 GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) Linux 2.6.18-238.9.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) SMP x86_64 GNU/Linux G95 (GCC 4.0.3 (g95 0.93!) Apr 21 2010) (koala) icc (ICC) 12.0.3 20110309 ifort (IFORT) 12.0.3 20110309 pgcc and pgf90 11.3-0 64-bit target on x86-64 Linux -tp nehalem GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) SunOS 5.10 32- and 64-bit Sun C 5.9 SunOS_sparc Patch 124867-16 (linew) Sun Fortran 95 8.3 SunOS_sparc Patch 127000-13 Xeon Linux 2.6.32.24-0.2.1.2230.2.PTF-default #1 SMP x86_64 Intel(R) C Compiler Version 11.1.073 SGI Altix UV Intel(R) Fortran Compiler Version 11.1.073 (ember) AIX 6.1 (32/64 bit) IBM XL C/C++ for AIX, V11.1 (NCSA bp-login) IBM XL Fortran for AIX, V13.1 Windows XP Visual Studio 2008 w/ Intel Fortran 10.1 (project files) Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 (cmake) Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran) Windows XP x64 Visual Studio 2008 w/ Intel Fortran 10.1 (project files) Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Visual Studio 2010 (cmake) Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran) Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake) MAC OS X Intel 10.6.2 Darwin 10.7.0 (32 bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (tejeda) GNU Fortran (GCC) 4.4.0 20090123 MAC OS X Intel 10.6.2 Darwin 10.7.0 (64 bit) Intel C icc (ICC) 12.0 20101110 (fred) Intel Fortran ifort (IFORT) 12.0 20101110 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 GNU Fortran (GCC) 4.6.0 Debian6.01 2.6.32-5-686 #1 SMP i686 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Debian6.01 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux gcc (Debian 4.4.5-8) 4.4.5 GNU Fortran (Debian 4.4.5-8) 4.4.5 Fedora14 2.6.35.12-88.fc14.i686.PAE #1 SMP i686 i686 i386 GNU/Linux gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) Fedora14 2.6.35.12-88.fc14.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux gcc (SUSE Linux) 4.5.1 20101208 GNU Fortran (SUSE Linux) 4.5.1 20101208 SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux gcc (SUSE Linux) 4.5.1 20101208 GNU Fortran (SUSE Linux) 4.5.1 20101208 Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP i686 GNU/Linux gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP x86_64 GNU/Linux gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 Known problems ============== o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure fails when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of jpeg library has HAVE_STDLIB_H defined in its jconfig.h header file. Without the -qlanglvl=ansi, some older xlc (e.g., V7.0) still fails but newer xlc (e.g., V9.0) passes. AKC - 2010/02/17 o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files into the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale were created with the same name, subsequent accesses to the dimension scale or to the SDS might corrupt the data. HDF4 Library Releases 4.2r2 and later do not allow this conflict to occur. On the other hand, recent libraries are also unable to detect such conflicts that already exist in a file. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata), after being written and before SDgetdatasize is called. %%%4.2.5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF version 4.2.5 released on Wed Feb 24 13:00:16 CST 2010 =================================================== INTRODUCTION This document describes the differences between HDF 4.2.4 and HDF 4.2.5 It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2.5 The HDF 4.2.5 documentation can be found on the The HDF Group's FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Source distribution -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2.4 -- Utilities -- Library -- Configuration - Documentation - Platforms tested - Known problems - Appendix: List of the removed files New features and changes ======================== Source distribution =================== - For the complete list of the removed obsolete files see Appendix. - Removed obsolete mfhdf/port and mfhdf/c++ directories and related code (EIP - 2010/1/18) - Removed obsolete hdf/fmpool directory and related code - Removed obsolete constants PCIO, WINIO, PAGEBIFIO, and WINNTIO from hdfi.h and hfile.h (EIP - 2009/12/31) - INSTALL* files were moved to the release_notes directory (EIP - 2009/12/29) - SD tests were moved from mfhdf/libsrc to mfhdf/test. (BMR - 2009/09/10) Configuration ============= - Added a configure check that will fail when jpeg version 7 is used, as this is not yet supported in HDF4. (MAM - 2010/01/28) - Configure suite now built with the following versions of the autotools: Automake 1.11.1, Autoconf 2.65, and Libtool 2.2.6b (MAM - 2009/12/14) Library ========= - SDgetchunkinfo now contains compression type and compression information. If failure occurs while getting compression information, the associate compression parameters will be set to -1 to indicate that no compression information is retrieved, instead of SDgetchunkinfo simply fails. This is to support backward compatibility. (BMR - 2010/02/04) - Vgroup name and class name can now be more than the previous limit of 64 characters. Two public functions are provided for applications to be able to allocate sufficient space for these items. int32 Vgetnamelen (int32 vkey, uint16 *name_len); int32 Vgetclassnamelen (int32 vkey, uint16 *classname_len); Please refer to the Reference Manual and User's Guide for details. (BMR - 2010/01/27) - SDreset_maxopenfiles allows users to reset the number of the files that can be open at the same time to the system limit minus 3. On AIX 6.1 system limit is 2GB-1 causing HDF4 to choke. Source code was modified to put a cap on the system limit to not exceed H4_MAX_AVAIL_OPENFILES (currently 20000). (EIP - 2010/02/01) - "make installcheck" builds and tests examples using h4cc and h4fc scripts (MAM, BMR and MSB - 2009/12) - HDF Fortran examples were added to hdf/fortran/examples. (MAM - 2009/12/14) - SD examples were added to mfhdf/examples. (BMR - 2009/08/28) - HDF C examples were added to hdf/examples. (BMR - 2009/11/07) Test ==== - Added tests for GRfindattr, GRattrinfo, and GRgetattr (BMR - 2009/11/15) - Moved SD tests out of mfhdf/libsrc into the new directory mfhdf/test (BMR - 2009/09/10) Utilities ========= - Added flag -k to hdp dumpsds to keep the order of the outputted SDSs the same as the order they were specified on the command line. The default (without -k) is SDSs are printed in the order in which they were added to the file (ie., indices.) (BMR - 2010/02/03) - Added -V flag to hdiff, hrepack, hdfimport, ncdump and ncgen; when specified, tool prints library version string and exits. (EIP - 2010/01/28) - Hrepack: set default value for JPEG's quality factor to 75 to prevent image distortion when the factor is not provided by user (BMR - 2010/01/14) Daily Test and Release ====================== Added h4vers and release scripts and Snapshot Release capability. Support for new platforms and compilers ======================================= Added support for 64-bit Mac Intel with gcc, gfortran and Intel C and Fortran compilers. Added support for AIX 6.1 using IBM XL C and Fortran compilers. (EIP - 2010/1/29) Bugs fixed since HDF4.2.4 ========================= Utilities ========= - None Library ========= - The problem where incorrect result occurred when attempting to retrieve the dimension scale's number type from a netCDF file was fixed (bugzilla #1644.) (BMR - 2009/09/25) - The problem where pieces of an image get written multiple times at different locations in the 2-D array had been fixed. The cause was the pointer to user's buffer was not advanced properly. This was part of bugzilla 1547. (BMR - 2009/06/10) - The problem which SDgetdimstrs failed if there are no attributes attached to the dimension had been fixed. SDgetdimstrs now returns the attribute strings containing '\0' for the first character, as specified in the documentation. (BMR - 2009/08/28) Configuration ============= - The mfhdf/ncgen/Makefile.in now has $(EXEEXT) appended to the ncgen program whenever it is referenced in a build rule dependency. This fixes some compile problems on Cygwin, where the .exe is necessary. (MAM - 2009/12/17). - Configure will now fail if the yacc or flex utilities are not available (as opposed to failing sometime during make when they are used). (MAM - 2009/12/17). - Configure will now properly check for the rpc library when on Cygwin, and fail gracefully if it is not found. (MAM - 2009/12/17) - Configure will no longer try to use a Fortran compiler to set up aspects of the build environment when Fortran has been disabled, as configure now deliberately sets the F77 environment variable to 'no' when Fortran is disabled. This should no longer cause build problems on Cygwin when no Fortran compiler is available. (MAM - 2009/12/14) - './configure --help' will now correctly indicate that shared libraries are disabled by default. (MAM - 2009/12/14) Documentation ============== The updated HDF Reference Manual is now available in HTML format. Platforms tested ================ HDF 4.2.5 has been tested in the following platforms: FreeBSD 6.3-STABLE i386 gcc 3.4.6 [FreeBSD] 20060305 (duty) f77 (gcc) 3.4.6 gcc (GCC) 4.4.4 20100126 (prerelease) GNU Fortran (GCC) 4.4.4 20100126 (prerelease) FreeBSD 6.3-STABLE amd64 gcc 3.4.6 [FreeBSD] 20060305 (liberty) f77 (gcc) 3.4.6 gcc (GCC) 4.4.4 20100126 (prerelease) GNU Fortran (GCC) 4.4.4 20100126 (prerelease) Linux jam 2.6.18-164.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) SMP i686 i386 G95 (GCC 4.0.3 (g95 0.92!) Jun 24 2009) (jam) g77 (GCC) 3.4.6 20060404 pgcc and pgf90 8.0-5 32-bit target on x86 Linux -tp penryn Intel(R) C Compiler, Version 11.0 Intel(R) Fortran Compiler, Version 11.0 Linux 2.6.18-164.11.1.el5 #1 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) SMP x86_64 GNU/Linux G95 (GCC 4.0.3 (g95 0.92!) Jun 24 2009) (amani) icc (ICC) 11.1 20090827 ifort (IFORT) 11.1 20090827 pgcc and pgf90 9.0-4 64-bit target on x86-64 Linux -tp k8-64e GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) SunOS 5.10 32- and 64-bit Sun C 5.9 SunOS_sparc Patch 124867-12 (linew) Sun Fortran 95 8.3 SunOS_sparc Patch 127000-12 Linux 2.6.16.54-0.2.5 #1 Intel(R) C Compiler Version 10.1.017 Altix SMP ia64 Intel(R) Fortran Itanium(R) Version 10.1.017 (cobalt) SGI MPI 1.16 Xeon Linux 2.6.18-92.1.10.el5_lustre.1.6.6smp-perfctr #2 SMP x86_64 Intel(R) C Compiler Version 10.0.026 (abe) Intel(R) Fortran Compiler Version 10.0.026 IA-64 Linux 2.4.21.SuSE_292.til1 ia64 (NCSA tg-login) Intel(R) C Compiler Version 8.1.037 Intel(R) Fortran Compiler Version 8.1.033 AIX 5.3 (32/64 bit) IBM XL C/C++ for AIX, V9.0 (LLNL Up) IBM XL Fortran for AIX, V11.1 AIX 6.1 (32/64 bit) IBM XL C/C++ for AIX, V10.1 (NCSA bp-login) IBM XL Fortran for AIX, V12.1 Windows XP Visual Studio 2005 (with Intel Fortran 9.1/10.1) Visual Studio 2008 (with Intel Fortran 10.1) cygwin (gcc 4.3.4) Windows XP(64 bit) Visual Studio 2005 (with Intel Fortran 9.1/10.1) Visual Studio 2008 (with Intel Fortran 10.1) Windows Vista Visual Studio 2008 (with Intel Fortran 10.1) Windows Vista(64 bit) Visual Studio 2008 (with Intel Fortran 10.1) MAC OS X Intel 10.6.2 Darwin 10.2.0 Intel C icc (ICC) 11.1 20091130 Intel Fortran ifort (IFORT) 11.1 20091130 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 GNU Fortran (GCC) 4.5.0 20090910 Linux 2.6.31.12-174.2.3.fc12.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 4.4.2 (Fedora 12) gfortran GNU Fortran (GCC) 4.4.2 20091222 (Red Hat 4.4.2-20) Linux 2.6.31-17-generic #54-Ubuntu SMP x86_64 GNU/Linux gcc (GCC) 4.4.1 (Ubuntu 9.10) gfortran GNU Fortran (GCC) 4.4.1 Linux 2.6.31.8-0.1-desktop #1 SMP x86_64 GNU/Linux gcc (GCC) 4.4.1 (OpenSuse 11.2) gfortran GNU Fortran (GCC) 4.4.1 Known problems ============== o When building in AIX systems, if CC is xlc with -qlanglvl=ansi, configure fails when checking for the jpeglib.h header due to the duplicated macro definition of HAVE_STDLIB_H. This is because some newer builds of jpeg library has HAVE_STDLIB_H defined in its jconfig.h header file. Without the -qlanglvl=ansi, some older xlc (e.g., V7.0) still fails but newer xlc (e.g., V9.0) passes. (AKC - 2010/02/17) o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files into the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale were created with the same name, subsequent accesses to the dimension scale or to the SDS might corrupt the data. HDF4 Library Releases 4.2r2 and later do not allow this conflict to occur. On the other hand, recent libraries are also unable to detect such conflicts that already exist in a file. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata), after being written and before SDgetdatasize is called. Appendix: List of the removed files =================================== mfhdf/CHANGES mfhdf/CUSTOMIZE mfhdf/INSTALL mfhdf/MANIFEST mfhdf/ORIGIN mfhdf/README mfhdf/README.HDF mfhdf/README.HDF.33 mfhdf/VERSION mfhdf/macros.mk mfhdf/mfhdf.mak mfhdf/msoft.mk mfhdf/c++/README mfhdf/c++/example.c mfhdf/c++/example.cc mfhdf/c++/example.cdl mfhdf/c++/expected mfhdf/c++/nc.info mfhdf/c++/nc.txn mfhdf/c++/nctst.cc mfhdf/c++/ncvalues.cc mfhdf/c++/ncvalues.hh mfhdf/c++/netcdf.cc mfhdf/c++/netcdf.hh mfhdf/fortran/fortc mfhdf/fortran/fortc1.sed mfhdf/fortran/fortc2.sed mfhdf/fortran/ftest.lnk mfhdf/fortran/msoft/ mfhdf/fortran/Linux.m4 mfhdf/fortran/README mfhdf/fortran/aix.m4 mfhdf/fortran/common.m4 mfhdf/fortran/convex.m4 mfhdf/fortran/craympp.m4 mfhdf/fortran/descrip.mms mfhdf/fortran/freebsd.m4 mfhdf/fortran/fujivp.m4 mfhdf/fortran/hpux.m4 mfhdf/fortran/irix.m4 mfhdf/fortran/msoft.m4 mfhdf/fortran/msoft.mk mfhdf/fortran/osf.m4 mfhdf/fortran/solaris.m4 mfhdf/fortran/sunos.m4 mfhdf/fortran/ultrix.m4 mfhdf/fortran/unicos.m4 mfhdf/fortran/vax-ultrix.m4 mfhdf/fortran/vms.m4 mfhdf/libsrc/README mfhdf/libsrc/cdftest.c mfhdf/libsrc/cdftest.mak mfhdf/libsrc/cdftest.project.hqx mfhdf/libsrc/descrip.mms mfhdf/libsrc/gen_sds_szipped.c mfhdf/libsrc/hdftest.c mfhdf/libsrc/hdftest.h mfhdf/libsrc/hdftest.mak mfhdf/libsrc/hdftest.project.hqx mfhdf/libsrc/htons.mar mfhdf/libsrc/mfhdflib.project.hqx mfhdf/libsrc/msoft.mk mfhdf/libsrc/ntohs.mar mfhdf/libsrc/sds_szipped.dat mfhdf/libsrc/tchunk.c mfhdf/libsrc/tcomp.c mfhdf/libsrc/tcoordvar.c mfhdf/libsrc/tdatasizes.c mfhdf/libsrc/tdim.c mfhdf/libsrc/temptySDSs.c mfhdf/libsrc/tfile.c mfhdf/libsrc/tidtypes.c mfhdf/libsrc/tncunlim.c mfhdf/libsrc/tnetcdf.c mfhdf/libsrc/trank0.c mfhdf/libsrc/tsd.c mfhdf/libsrc/tsdsprops.c mfhdf/libsrc/tszip.c mfhdf/libsrc/tunlim.c mfhdf/libsrc/win32cdf.h mfhdf/libsrc/win32cdf.mak mfhdf/ncdump/ncdump.mak mfhdf/ncdump/msoft.mk mfhdf/ncdump/msofttab.c mfhdf/ncdump/ctest0.mak mfhdf/ncdump/ncdump.lnk mfhdf/ncgen/test0.lnk mfhdf/ncgen/ncgen.opt mfhdf/ncgen/msoft.mk mfhdf/ncgen/ncgen.mak mfhdf/ncgen/ctest0.mak mfhdf/ncgen/descrip.mms mfhdf/port/COPYRIGHT mfhdf/port/CUSTOMIZE mfhdf/port/HISTORY mfhdf/port/Makefile.am mfhdf/port/Makefile.in mfhdf/port/VERSION mfhdf/port/aclocal.m4 mfhdf/port/configure mfhdf/port/configure.in mfhdf/port/depend mfhdf/port/mast_mk.in mfhdf/port/master.mk.in mfhdf/port/uddummy.c mfhdf/port/udposix.h.in mfhdf/port/udposixh.in mfhdf/port/which hdf/COPYING hdf/COPYRIGHT hdf/README hdf/README.33r4 hdf/fmpool/Makefile.in hdf/fmpool/README hdf/fmpool/cdefs.h hdf/fmpool/compat.h hdf/fmpool/config.guess hdf/fmpool/config.sub hdf/fmpool/configure hdf/fmpool/configure.in hdf/fmpool/fmpio.3 hdf/fmpool/fmpio.c hdf/fmpool/fmpio.h hdf/fmpool/fmpool.3 hdf/fmpool/fmpool.c hdf/fmpool/fmpool.h hdf/fmpool/fmptypes.h hdf/fmpool/move-if-change hdf/fmpool/queue.h hdf/fmpool/test_fmpio.c hdf/fmpool/tfmpio_read.c hdf/fmpool/tfmpio_write.c hdf/fmpool/config/fmpaix.h hdf/fmpool/config/fmpalpha.h hdf/fmpool/config/fmpconvex.h hdf/fmpool/config/fmpdec.h hdf/fmpool/config/fmpfbsd.h hdf/fmpool/config/fmpfujivp.h hdf/fmpool/config/fmphpux.h hdf/fmpool/config/fmpia64.h hdf/fmpool/config/fmpirix32.h hdf/fmpool/config/fmpirix4.h hdf/fmpool/config/fmpirix5.h hdf/fmpool/config/fmpirix6.h hdf/fmpool/config/fmplinux.h hdf/fmpool/config/fmpmac.h hdf/fmpool/config/fmpsolaris.h hdf/fmpool/config/fmpsun.h hdf/fmpool/config/fmpt3e.h hdf/fmpool/config/fmpunicos.h hdf/fmpool/config/mh-aix hdf/fmpool/config/mh-alpha hdf/fmpool/config/mh-convex hdf/fmpool/config/mh-decstation hdf/fmpool/config/mh-fbsd hdf/fmpool/config/mh-fujivp hdf/fmpool/config/mh-hpux hdf/fmpool/config/mh-ia64 hdf/fmpool/config/mh-irix32 hdf/fmpool/config/mh-irix4 hdf/fmpool/config/mh-irix5 hdf/fmpool/config/mh-irix6 hdf/fmpool/config/mh-linux hdf/fmpool/config/mh-mac hdf/fmpool/config/mh-solaris hdf/fmpool/config/mh-sun hdf/fmpool/config/mh-t3e hdf/fmpool/config/mh-unicos hdf/src/hdf.bld hdf/src/hdflib.project.hqx hdf/src/hdfnof.bld hdf/src/hdfnofw3.lbc hdf/src/hdfnofwc.lbc hdf/src/hdfw386.lbc hdf/src/hdfwcc.lbc hdf/src/makepc.386 hdf/src/makepc.msc hdf/src/makepc.wcc hdf/src/makewin.msc hdf/src/win32hdf.mak hdf/util/fp2hdf.mak hdf/util/hdf24to8.mak hdf/util/hdf2jpeg.mak hdf/util/hdf8to24.mak hdf/util/hdfcomp.mak hdf/util/hdfed.mak hdf/util/hdfls.mak hdf/util/hdfpack.mak hdf/util/hdftopal.mak hdf/util/hdftor8.mak hdf/util/hdfunpac.mak hdf/util/jpeg2hdf.mak hdf/util/makepc.386 hdf/util/makepc.msc hdf/util/paltohdf.mak hdf/util/r8tohdf.mak hdf/util/ristosds.mak hdf/util/vcompat.mak hdf/util/vmake.mak hdf/util/vshow.mak hdf/test/MAKECOM.OLD hdf/test/makepc.386 hdf/test/makepc.msc hdf/test/makewin.msc hdf/test/makewin.new hdf/test/testhdf.386 hdf/test/testhdf.def hdf/test/testhdf.lnk hdf/test/testhdf.pc hdf/test/testhdf.project.hqx hdf/test/win32tst.mak %%%4.2r4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF 4.2 Release 4 ================= January 25, 2009 INTRODUCTION This document describes the differences between HDF 4.2r3 and HDF 4.2r4 It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r4 The HDF 4.2r4 documentation can be found on the The HDF Group's FTP server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2r3 -- Utilities -- Library -- Configuration - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - Automake 1.10.1 used to generate Makefile.in files, and Autoconf 2.61 used to generate configure script. MAM - 2008/10/09 - Libtool support (2.2.6a) has been added, and HDF4 shared C libraries can now be built. To build, use the --enable-shared configuration flag. This needs to be used in conjunction with the --disable-fortran flag, as Fortran shared libraries are not supported. Shared libraries are disabled by default. MAM - 2008/10/09 - Added SZIP information to end of configure summary, which indicates whether SZIP is present and, if SZIP is present, whether the SZIP encoder is present. MAM - 2008/10/06 Library ========= - Added new API SDgetdatasize to retrieve the compressed and original sizes of an SDS' data. Its limitation is listed in the "Known problems" section at the end of this document. intn SDgetdatasize(int32 sdsid, int32* comp_size, int32* orig_size) sdsid - IN: dataset ID comp_size - OUT: size of compressed data orig_size - OUT: size of original data BMR - 2008/10/15 - The following Fortran APIs were added in this release: sfgetname sfgetnamelen sfgmaxopenf sfgnumopenf sfrmaxopenf sfidtype sfgnvars_byname sfn2indices Please see HDF Reference Manual for functions description. Note: These APIs are not available on Windows. Utilities ========= - hrepack output now includes dataset compression ratios. PVN - 2008/10/30 - hdp now displays various parameters of Gzip, Szip, and Skipping Huffman compressions when a dataset is compressed. (Bugzilla 1202) BMR - 2008/10/03 Support for new platforms and compilers ======================================= Linux 2.6.27 x86_64 Fedora 10 with GNU C and gfortran Ubuntu 8.10 with GNU C and gfortran OpenSuse 11.1 with GNU C and gfortran Mac Intel with GNU C, gfortran, g95 and Intel 10.1 32-bit C and Fortran compilers Note: Only the 32-bit version of the Intel compiler is supported. One has to run configuration scripts, which can be found under the bin directories in the Intel compiler installation directory tree (e.g., /opt/intel/cc/10.1.006/bin/iccvars.csh and /opt/intel/fc/10.1.006/bin/ifortvars.csh), to enable the 32-bit version of the compiler before configuring and building HDF4. Known problems: Due to a known bug in the Intel 10.1 icc compiler, one has to use -no-multibyte-chars flag with icc. O0 flag with ifort is required to build Fortran APIs and tests. This restriction is probably due to very old Fortran code and will be lifted for future releases. Bugs fixed since HDF4.2r3 ========================= Utilities ========= - hrepack previously failed to preserve unlimited dataset dimensions; they are now preserved. PVN - 2008/11/19 Library ========= - SDreaddata now checks for out-of-range values in the parameter 'stride' and fails when invalid values are given (Bugzilla 150.) This bug was actually fixed right before the HDF4.2r2 release. BMR - 2008/07/14 - Reading a record variable using nc API fills the buffer with fill values up to the maximum number of records of all unlimited dimension variables in the file, as in netCDF. It used to fail before (Bugzilla 1378.) - BMR 2009/01/21 - When the file name is too long, some SD APIs caused a segmentation fault (Bugzilla 1331.) This problem is now fixed. - BMR 2009/01/23 Configuration ============= - hdiff_array.c now gets linked against libm.a library. Documentation ============== The updated HDF Reference Manual is now available in HTML format. Platforms tested ================ HDF 4.2 Release 4 has been tested on the following platforms: FreeBSD 6.3-STABLE i386 gcc 3.4.6 [FreeBSD] 20060305 (duty) g++ 3.4.6 [FreeBSD] 20060305 f77 (gcc) 3.4.6 gcc 4.2.5 20080702 g++ 4.2.5 20080702 gfortran 4.2.5 20080702 FreeBSD 6.3-STABLE amd64 gcc 3.4.6 [FreeBSD] 20060305 (liberty) g++ 3.4.6 [FreeBSD] 20060305 f77 (gcc) 3.4.6 gcc 4.2.5 20080702 g++ 4.2.5 20080702 gfortran 4.2.5 20080702 IRIX64 6.5 MIPSpro cc 7.4.4m (ucar mop1 64 & n32) F90 MIPSpro 7.4.4m Linux 2.6.18-92.1.22.el5xen gcc (GCC) 4.1.2 20071124 #1 SMP i686 i686 i386 gG95 (GCC 4.0.3 (g95 0.92!) July 1 2008) (jam) g77 (GCC) 3.4.6 20060404 PGI C, Fortran, C++ 7.2-5 32-bit Intel(R) C Compiler for 32-bit applications, Version 10.1.018 Intel(R) Fortran Compiler for 32-bit applications, Version 10.1.018 Linux 2.6.9-42.0.10.ELsmp #1 gcc (GCC) 3.4.6 SMP i686 i386 g++ (GCC) 3.4.6 (kagiso) G95 (GCC 4.0.3 (g95 0.92!) April 18 2007) Linux 2.6.16.46-0.12-debug #1 Intel(R) C Compiler Version 10.0.025 SMP ia64 GNU/Linux Intel(R) Fortran Itanium(R) Version 10.0.025 (ucar hir1) Linux 2.6.16.46-0.14-smp #1 gcc (GCC) 4.1.2 20070115 (SUSE Linux) SMP x86_64 GNU/Linux G95 (GCC 4.0.3 (g95 0.92!) July 1 2008) (smirom) Intel(R) C Compiler for Intel(R) EM64T Ver. 10.1.013 Intel(R) Fortran Intel(R) EM64T Ver. 10.1.013 PGI C, Fortran Version 7.2-1 for 64-bit target on x86-64 Linux 2.6.16.54-0.2.5 #1 Intel(R) C Compiler Version 10.1.017 Altix SMP ia64 Intel(R) Fortran Itanium(R) Version 10.1.017 (cobalt) SGI MPI 1.16 SunOS 5.10 32- and 64-bit Sun WorkShop 6 update 2 C 5.8 Patch 121015-06 (linew) Sun WorkShop 6 update 2 Fortran 95 8.2 Patch 121019-09 Xeon Linux 2.6.18-92.1.10.el5_lustre.1.6.6smp-perfctr #2 SMP x86_64 Intel(R) C Compiler Version 10.0.026 (abe) Intel(R) Fortran Compiler Version 10.0.026 IA-64 Linux 2.4.21.SuSE_292.til1 ia64 (NCSA tg-login) Intel(R) C Compiler Version 8.1.037 Intel(R) Fortran Compiler Version 8.1.033 Windows XP Visual Studio 6.0 Visual Studio .NET (with Intel Fortran 9.1) Visual Studio 2005 (with Intel Fortran 9.1/10.1) Visual Studio 2008 (with Intel Fortran 10.1) cygwin (gcc 3.4.4 and g95 0.90!) Windows XP(64 bit) Visual Studio 2005 (with Intel Fortran 9.1/10.1) Visual Studio 2008 (with Intel Fortran 10.1) Windows Vista Visual Studio 2008 (with Intel Fortran 10.1) cygwin (gcc 3.4.4 and g95 0.90!) Windows Vista(64 bit) Visual Studio 2008 (with Intel Fortran 10.1) MAC OS X Intel Darwin 9.4.0 i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 G95 (GCC 4.0.3 (g95 0.91!) Apr 24 2008) gfortran GNU Fortran (GCC) 4.3.0 20070810 Intel 10.1 32-bit version Linux 2.6.27.9-159.fc10.x86_64 #1 SMP x86_64 GNU/Linux gcc (GCC) 4.3.2 (Fedora 10) gfortran GNU Fortran (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7) Linux 2.6.27-9-generic #1 SMP x86_64 GNU/Linux gcc (GCC) 4.3.2 (Ubuntu 8.10) gfortran GNU Fortran (GCC) 4.3.2 Linux 2.6.27.7-9-default #1 SMP x86_64 GNU/Linux gcc (GCC) 4.3.2 (OpenSuse 11.1) gfortran GNU Fortran (GCC) 4.3.2 Known problems ============== o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale were created with the same name, subsequent accesses to the dimension scale or to the SDS might corrupt the data. HDF4 Library Releases 4.2r2 and later do not allow this conflict to occur. On the other hand, recent libraries are also unable to detect such conflicts that already exist in a file. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. o This release does not support VMS systems. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the new API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata), after being written and before SDgetdatasize is called. o On a fedora x86_64 GNU/Linux machine with gfortran 4.3.2, the flag -fno-range-check needs to be used to work around old code. o On Windows with Visual Studio .NET 2003, a minor bug in the hdfnctest test causes it to fail. The failure is non-critical, and so the test has been disabled by default for all Windows compilers. ========================================================================== %%%4.2r3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF 4.2 Release 3 ================= January 28, 2008 INTRODUCTION This document describes the differences between HDF 4.2r2 and HDF 4.2r3. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r3. The HDF 4.2r3 documentation can be found on the THG ftp server: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the HDF FAQ, which can be reached from the HDF product home page: http://hdfgroup.org/products/hdf4/ If you have any questions or comments, please see the HDF Support page: http://hdfgroup.org/services/support.html CONTENTS - New features and changes -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2r2 -- Utilities -- Library -- Configuration - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= None Library ========= - Modified the HDF4 mfhdf library and configure to work in the absence of the NetCDF-3 header files when the HDF4 library is configured with the --disable-netcdf flag. This feature is required when building the ESDIS Toolkit in the presence of the NetCDF-3 library. In this case, the HDF4 file netcdf.h is used to build the HDF4 libraries and is installed under the name "hdf4_netcdf.h" to avoid a name clash with the NetCDF-3 file netcdf.h. EIP 2007-10-30 - Note that the previous change to SDnametoindex was backed out. It only returns the first variable of the requested name, as did the original version of this function. The variable can be an SDS or a coordinate variable. With this behavior, if there is more than one variable with the same name in the file, care must be taken to retrieve the desired variable. Please see new APIs in the next item for a way to handle non-uniquely named variables. The behavior of SDnametoindex will be documented in FAQs, documentation, and the newsletter. BMR 2008-01-17 - Added new APIs to SD interface: + SDgetnumvars_byname: Given a name, returns the number of variables in a file with that same name. + SDnametoindices: Given a name, returns a list of indices of all the variables in a file with that same name. With these new APIs, users can determine when an SDS name or a coordinate variable's name is not unique, retrieve the named variables, and examine them. BMR 2008-01-17 Utilities ========= None Support for new platforms and compilers ======================================= Support for Windows XP 64-bit with Visual Studio 2005 and Intel Fortran compiler was added. Bugs fixed since HDF4.2r2 ========================= Utilities ========= None Library ========= None Configuration ============= - libhdf4.settings file was not installed by make install command; fixed EIP, 2007-10-09 Documentation ============== Descriptions of the new functions SDgetnumvars_byname and SDnametoindices have been added to the documentation. Platforms tested ================ HDF 4.2 Release 3 has been tested on the following platforms: AIX 5.2 (32/64 bit) xlc 8.0.0.11 (datstar) xlf 10.01.0000.0002 FreeBSD 6.2 (32- and 64-bit) gcc and f77 GNU 3.4.6 (duty and liberty) GNU Fortran (GCC) 4.2.3 20080123 IRIX64 6.5 MIPSpro cc 7.4.4m (ucar mop1 64 & n32) F90 MIPSpro 7.4.4m Linux 2.4.21-47.ELsmp #1 SMP gcc and g77 3.2.3 i686 i386 GNU/Linux (osage) Linux 2.6.9-42.0.10.ELsmp #1 gcc (GCC) 3.4.6 SMP i686 i386 G95 (GCC 4.0.3 (g95 0.91!) April 18 2007) (kagiso) PGI C, Fortran 7.0-7 32-bit icc (ICC) 9.1 Intel(R) Fortran Compiler for 32-bit applications, Version 9.1 Linux 2.6.16.46-0.12-debug #1 Intel(R) C++ Version 10.0.025 SMP ia64 GNU/Linux Intel(R) Fortran Itanium(R) Version 10.0.025 (ucar hir1) Linux 2.6.16.46-0.14-smp #1 Intel(R) C for Intel(R) EM64T Ver. 9.1.037 SMP x86_64 GNU/Linux Intel(R) Fortran Intel(R) EM64T Ver. 9.1.031 (smirom) gcc (GCC) 4.1.2 20070115 (SUSE Linux) G95 (GCC 4.0.3 (g95 0.91!) Apr 19 2007) Linux 2.6.5-7.283-rtgfx Altix Intel(R) C++ Version 9.0.032 SMP ia64 Intel(R) Fortran Itanium(R) Version 9.0.033 (cobalt) SunOS 5.8 32- and 64-bit Sun WorkShop 6 update 2 C 5.3 (sol) Sun WorkShop 6 update 2 Fortran 77 5.3 SunOS 5.10 32- and 64-bit Sun WorkShop 6 update 2 C 5.8 Patch 121015-06 (linew) Sun WorkShop 6 update 2 Fortran 95 8.2 Patch 121019-09 IA-64 Linux 2.4.21.SuSE_292.til1 ia64 (NCSA tg-login) Intel(R) C++ Version 8.1.037 Intel(R) Fortran Compiler Version 8.1.033 Windows XP Visual Studio 6.0 Visual Studio .NET (with Intel Fortran 9.1) Visual Studio 2005 (with Intel Fortran 9.1) cygwin (gcc 3.4.4) Windows XP(64 bit) Visual Studio 2005(with Intel Fortran 9.1) Windows Vista Visual Studio 2005 (no fortran) MAC OS X Intel Darwin 8.10.1 i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 g95 0.91 gfortran GNU Fortran (GCC) 4.3.0 20070518 Known problems ============== o hdfcomp fails on HPUX 11.23 for the 64-bit version of the library. o This release does not support VMS systems. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o For existing data prior to HDF 4.2r2, when a one-dimensional SDS has the same name as the dimension scale, subsequent accesses to the dimension scale or the SDS might produce undesired results. It is recommended to check for name duplication first. See "New features and changes" section for details. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... %%%4.2r2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF 4.2 Release 2 October 4, 2007 INTRODUCTION This document describes the differences between HDF 4.2r1 and HDF 4.2r2. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r2. The HDF 4.2r2 documentation can be found on the THG ftp server (ftp.hdfgroup.org) in the directory: ftp://ftp.hdfgroup.org/HDF/Documentation/ First-time HDF users are encouraged to read the FAQ for this release for more information about HDF. Also see the home page for HDF at: http://hdfgroup.org/ If you have any questions or comments, please send them to: help@hdfgroup.org CONTENTS - New features and changes -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2r1 -- Utilities -- Library - Documentation - Platforms tested - Known problems New features and changes ======================== Configuration ============= - The default installation directory name was changed from "NewHDF" to "hdf4". EIP - 2007/08/06 - Introduced --enable-netcdf configure flag to provide an option to enable/disable "HDF4-NetCDF"-like interfaces. By default, the HDF4 netcdf feature is enabled. Use the --disable-netcdf configuration flag to build HDF4 C and Fortran libraries that can be used by NetCDF-3 applications. There is no longer a need to specify the -DHAVE_NETCDF compilation flag. This feature is not yet supported on Windows. EIP - 2007/09/05 - Updated versions of autotools. HDF4 now uses automake 1.10.0, autoconf 2.61, and libtool 1.5.22. MAM - 2007/7/25. - The Fortran part of the HDF4 library uses the F77_FUNC macro to mangle names of C functions called from Fortran APIs. This should help with HDF4 code portability to different Fortran compilers. EIP - 2006/12/19 Library ========= - SZIP compression is supported now for GR C interfaces EIP - 2007/09/15 - Added new Fortran function hconfinf that determines whether the SZIP compression method is present and whether encoding is available. - Added support for SZIP compression in Fortran. EIP - 2007/09/01 - The following APIs were added; see "Bugs fixed" section for details. SDreset_maxopenfiles -- Resets the maximum number of files that can be open at a time. SDget_maxopenfiles -- Retrieves the current number of open files allowed in HDF and the maximum number of open files allowed on a system. SDget_numopenfiles -- Returns the number of files currently open. SDgetcompinfo -- Replaces SDgetcompress. GRgetcompinfo -- Replaces GRgetcompress. SDgetfilename -- Retrieves the name of the file, given its ID. SDgetnamelen -- Retrieves the name length of the object, given its ID. Note: Fortran wrappers for these new APIs are not available in this release. BMR - 2007/09/23 - SDS and vgroup names are no longer limited to 64 characters (Bugzilla #516). Note that when an older version of the library reads a new name that is longer than 64 characters, the name will contain some garbage after 64 characters. BMR - 2006/10/12 - User reported that SDreaddata went into an infinite loop when reading some corrupted compressed data. This problem is fixed. Two new error codes were added, consequently: DFE_READCOMP - when the zlib function returns Z_ERRNO (-1) or Z_STREAM_ERROR (-2) or Z_DATA_ERROR (-3) or Z_MEM_ERROR (-4) or Z_BUF_ERROR (-5) DFE_COMPVERSION - when the zlib function returns Z_VERSION_ERROR (-6) Utilities ========= - hrepack repacks by hyperslabs for large (non-compressed) datasets. PVN - 2007/7/10 - hdiff enables reading by hyperslabs. This feature was added to handle very large datasets, where available memory is an issue. PVN - 2007/6/13 - hdiff now shows indices in multidimensional array notation. PVN - 2007/4/5 - hdiff now shows the name of the array when printing differences. PVN - 2007/4/5 - hdiff now shows a list of all objects in verbose mode. PVN - 2007/4/5 - hdiff return code is now 1 if differences are found, 0 if no differences are found, and -1 for an error. PVN - 2007/4/5 - hdiff has a new option, -p, for relative error. See usage. PVN - 2007/4/5 - hrepack now prints chunk information along with the compression type in verbose mode. PVN - 2007/4/5 Support for new platforms and compilers ======================================= - Added support for gfortran and g95 on Mac Intel. EIP 2007/09/14 - Added support for gfortran on FreeBSD for both 32- and 64-bit. - Added support for FreeBSD on AMD64 with gcc compilers. EIP 2007/05/24 - Added support for MAC OS X Intel with gcc and g95 compilers. - Added support for SUNOS 5.10 on Intel with SUN compilers (32- and 64-bit modes). EIP 2006/12/14 - Added support for HPUX 11.23 (32- and 64-bit modes). EIP 2006/12/19 Bugs fixed since HDF4.2r1 ========================= Utilities ========= - hrepack: Repeated vgroup insertions (duplicated links) were not being replicated. PVN - 2007/9/10 - hrepack: Improved performance for large number of SDSs, through the elimination of redundant file open calls. PVN - 2007/4/5 - hrepack: Fixed a bug in the -t option so that it now accepts multiple comma-separated names. PVN - 2007/4/5 - hrepack: Now duplicates dimension SDSs that are not accessed from any other SDSs. PVN - 2007/4/5 - hrepack: Fixed a bug that caused the unchunking of a dataset when uncompressing was requested. PVN - 2007/4/5 Library ========= - Added display of the compression method to hdp dumpsds and dumpgr (Bugzilla #130). BMR - 2005/4/4 - The current SDgetcompress and GRgetcompress APIs have severe flaws. Two new APIs, SDgetcompinfo and GRgetcompinfo, were added to provide better functionality and will eventually replace SDgetcompress and GRgetcompress. BMR - 2005/4/4 - Applied user's patch to fix bug #602. BMR - 2005/4/23 - Added a switch ('u') to ncdump to replace nonalpha-numeric characters with underscores. Thus, the SDS names won't be changed automatically unless the user so requests (Access bug #934/Bugzilla #381). BMR - 2005/7/17 - In HDF4.2r0, SDwritedata failed when the SDS had rank=0 (bug #1045). This change was retracted; writing to an SDS with rank=0 is allowed again. BMR - 2005/8/23 - When a dimension has the same name as an SDS, depending on the order in which they were created, either the SDS or the dimension will be corrupted if certain operations occur, such as a SDsetdimscale or SDsetattr call to the dimension. With this bugfix, the current situation can be summarized as below: + Data that has already been corrupted cannot be recovered. + For existing data that has not yet been corrupted, the problem has been fixed for multi-dimensional SDSs only. If the SDS had only one dimension, the results of subsequent accesses to the dimension would still be unpredictable (Bugzilla #328). BMR - 2005/8/23 + For future data, the problem has been fixed (Bugzilla #624). BMR - 2007/6/24 - Allowing the maximum number of open files to be increased revealed a problem: having more than 255 files open will cause file corruption (Bugzilla #440). Specifically, file number (255*m)+n will overwrite file number n, where n is [0..255] and m is [1..p], where (255*p) <= maximum system allowed. This problem is fixed. In addition, a new API is added for convenience: SDgetfilename -- retrieves the name of the file given its ID. BMR - 2005/10/05 - Prior to this release, the maximum number of files that can be open at the same time was only 32. This limit was implemented as a defined constant in the library, which users could not change without recompiling the library. In this release, if this limit is reached, the library will increase it to the system limit, minus 3 to account for stdin, stdout, and stderr. In addition, three APIs are added for more flexibility (Bugzilla #396/Access bug #935): SDreset_maxopenfiles -- Resets the maximum number of files that can be open at a time. SDget_maxopenfiles -- Retrieves the current number of open files allowed in HDF and the maximum number of open files allowed on a system. SDget_numopenfiles -- Returns the number of files currently open. Note: (1) Because there are also stdin, stdout, and stderr, the maximum limit that can be set must only be (system limit) - 3. (2) If the system maximum limit is reached, the library will push the error code DFE_TOOMANY onto the error stack. The user application can detect this after an SDstart fails. BMR - 2005/10/21 - The problem where ncgen failed with "too many attributes" on some user files is fixed (Bugzilla #373). BMR - 2005/10/28 - The problem where SDcheckempty returns "not empty" for empty chunked and compressed datasets is fixed (Bugzilla #218). BMR - 2005/10/31 - If a VSgetattr was called twice for an attribute, the second call would fail (Bugzilla #486). This problem is fixed. BMR - 2005/12/30 - A bug with reading metadata in hdfimport is fixed (Bugzilla #558). BMR - 2006/9/23 - The problem of writing to two unlimited 1-D arrays is fixed (Access bug #525). BMR - 2006/11/11 Documentation ============== Documentation contains multiple bug fixes and improvements. Platforms tested ================ HDF 4.2 Release 2 has been tested on the following platforms: AIX 5.3 (32/64 bit) xlc 7.0.0.0 (copper) xlf 9.1.0.3 FreeBSD 6.2 (32- and 64-bit) gcc and f77 GNU 3.4.6 (duty and liberty) GNU Fortran (GCC) 4.2.2 20070905 HP-UX B.11.23 (32- and 64-bit)HP aC++/ANSI C B3910B A.06.02 (sirius) HP F90 v3.1 IRIX64 6.5 MIPSpro cc 7.4.4m (ucar mop1 64 & n32) F90 MIPSpro 7.4.4m Linux 2.4.21-47.ELsmp #1 SMP gcc and f77 3.2.3 i686 i386 GNU/Linux (osage) Linux 2.6.9-42.0.10.ELsmp #1 gcc (GCC) 3.4.6 SMP i686 i386 G95 (GCC 4.0.3 (g95 0.91!) Nov 21 2006) (kagiso) PGI C, Fortran, C++ 6.2-5 32-bit icc (ICC) 9.1 Intel(R) Fortran Compiler for 32-bit applications, Version 9.1 Linux 2.6.16.46-0.12-debug #1 SMP ia64 GNU/Linux Intel(R) C++ Version 10.0.025 (ucar hir1) Intel(R) Fortran Itanium(R) Version 10.0.025 Linux 2.6.16.46-0.14-smp #1 Intel(R) C++ for Intel(R) EM64T Ver. 9.1.037 SMP x86_64 GNU/Linux Intel(R) Fortran Intel(R) EM64T Ver. 9.1.031 (smirom) gcc (GCC) 4.1.2 20070115 (SUSE Linux) G95 (GCC 4.0.3 (g95 0.91!) Apr 19 2007) Linux 2.6.5-7.283-rtgfx Altix SMP ia64 Intel(R) C++ Version 9.0 (cobalt) Intel(R) Fortran Itanium(R) Version 9.0 SunOS 5.8 32- and 64-bit Sun WorkShop 6 update 2 C 5.3 (sol) Sun WorkShop 6 update 2 Fortran 95 6.2 SunOS 5.10 32- and 64-bit Sun WorkShop 6 update 2 C 5.8 (linew) Sun WorkShop 6 update 2 Fortran 95 8.2 Patch 121019-06 IA-64 Linux 2.4.21.SuSE_292.til1 ia64 gcc (GCC) 3.2.2 (NCSA tg-login) Intel(R) C++ Version 8.0 Intel(R) Fortran Compiler Version 8.0 Windows XP Visual Studio 6.0 Visual Studio .NET (with Intel Fortran 9.1) Visual Studio 2005 (with Intel Fortran 9.1) cygwin (gcc 3.4.4) Windows Vista Visual Studio 2005 (no fortran) MAC OS X Intel Darwin 8.10.1 i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 g95 0.91 gfortran GNU Fortran (GCC) 4.3.0 20070518 Known problems ============== o hdfcomp fails on HPUX 11.23 for the 64-bit version of the library o This release does not support VMS systems. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When a one-dimensional SDS has the same name as the dimension, subsequent accesses to the dimension produce unpredictable results. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with JPEG built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... %%%4.2r1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF 4.2 Release 1 February, 2005 INTRODUCTION This document describes the differences between HDF 4.2r0 and HDF 4.2r1. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r1 The HDF 4.2r1 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: ftp://hdf.ncsa.uiuc.edu/HDF/Documentation/ First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes -- Configuration -- Library -- Utilities - Support for new platforms and compilers - Bugs fixed since HDF4.2r1 - Documentation - Platforms Tested - Known problems New Features and Changes: ======================== Configuration ============= * By default HDF4 libraries and utilities are installed under /NewHDF 12/01/2004 EIP * Windows configuration, build and testing procedures have been changed. Please see INSTALL_WINDOWS.txt file for more information 02/12/2005 EIP Library ========= * New API SDidtype was added to the library (bug #766) 01/23/2005 EIP for BMR * HCgetcompress renamed to HCPgetcompress * New API HCget_config_info added * The default chunk cache size was changed for 2D and higher chunks * Pablo instrumentation was removed Utilities ========= * hdiff and hrepack are supported on Windows. * Substantial performance improvements in hdiff and hrepack Support for new platforms and compilers ======================================= * Fortran IBM xlf v 8.1 and Absoft f95 version 8.2 compilers are supported on Mac OSX. 12/07/2004 EIP * Absoft Fortran compiler f95 version 9.0 is supported on Linux 2.4 12/07/2004 EIP * PGI C and Fortran compilers are supported on Linux 2.4 * Intel C and Fortran compilers are supported on Linux 2.4 * AMD Opteron is supported Bugs fixed since HDF4.2r0 ========================= * VERY IMPORTANT: Data compressed with SZIP may be corrupted; fixed. For more information see "HDF4.2r1 SZIP Release Notes" available at http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/SZIP_HDF4_2r1.pdf 02/12/2005 EIP * Fortran couldn't read names with spaces when NetCDF interfaces were used; fixed 02/12/2005 EIP * Library failed to compile in presence of the NetCDF library; fixed 11/22/2004 EIP * h4fc couldn't create object files; fixed 01/23/2005 EIP * When rank of SDS is 0, some SD APIs give segmentation fault (bug 1045); fixed 01/23/2005 EIP for BMR * Some GR images with special elements are read in as duplicate (bug 814); fixed 02/14/2005 BMR * Many bugs fixed in hdiff and hrepack utilities Documentation ============== Documentation contains multiple bug fixes and improvements. Platforms Tested ================ HDF 4.2 Release 1 has been tested on the following platforms: AIX 5.1 (32 and 64-bit) xlc 6.0.0.6 xlf 8.1.1.6 AIX 5.2 (32 and 64-bit) xlc 6.0.0.8 xlf 8.1.1.7 Cray SV1 10.0.1.2 Cray Standard C Version 6.6.0.3.6 Cray Fortran: Version 3.6.0.3.1 Cray TS IEEE Cray Standard C Version 6.4.0.3 Cray Fortran: Version 3.4.0.0 FreeBSD 4.9 gcc 2.95.4 GNU Fortran 0.5.25 HP-UX B.11.00 HP C HP92453-01 A.11.01.20 HP F90 v2.4 HP ANSI C++ B3910B A.03.13 IRIX64 6.5 (64 & n32) MIPSpro cc 7.3.1.3m F90 MIPSpro 7.3.1.3m Linux 2.4.20.28 gcc 2.96, GNU Fortran 0.5.25, Absoft Fortran 9.0 Intel(R) C++ and Fortran Compilers Version 8.1 Linux 2.4.21-268-smp #1 SMP x86_64 (AMD) gcc 3.3.1 GNU Fortran (GCC) 3.3.1 Intel(R) C++ and Fortran Compilers Version 8.1 PGI C and Fortran Compilers Version 5.2-1 Linux 2.4.21-27.0.1.ELsmp #1 SMP gcc 3.2.3 PGI C and Fortran Compilers Version 5.2-1 Linux 2.4.21-sgi303rp05012313_10138 (Altix) Intel C++ and Intel Fortran Version 8.1 Linux 2.4.20-31.9smp_perfctr_lustre (IA-32) Intel(R) C++ Version 8.0 Intel(R) Fortran Compiler Version 8.0 Linux 2.4.21.SuSE_241.bef1 (IA-64) Intel(R) C++ Version 8.0 Intel(R) Fortran Compiler Version 8.0 OSF1 V5.1 Compaq C V6.5-303 HP Fortran V5.5A-3548 HP Fortran Compiler X5.5A-4085-48E1K SunOS 5.7(32 and 64 bit) WorkShop Compilers 5.0 98/12/15 C 5.0 (Solaris 2.7) WorkShop Compilers 5.0 99/09/16 FORTRAN 77 5.0 patch 107596-03 gcc 3.2.2 g77 GNU Fortran (GCC 3.2.2) 3.2.2 SunOS 5.8(32 and 64 bit) Sun WorkShop 6 update 2 C 5.3 (Solaris 2.8) Sun WorkShop 6 update 2 Fortran 77 5.3 SunOS 5.9 (32 and 64 bit) Sun C 5.6 compiler, Sun Fortran 95 8.0 Windows 2000 (NT5.0) MSVC++ 6.0 DEC Visual Fortran 6.0 Intel C and F90 compilers version 7.1 Windows XP MSVC++.NET, Intel Fortran 8.1 (static libraries only) MAC OS X Darwin 7.7 gcc 3.3 IBM Fortran xlf 8.1 Absoft Fortran 8.2 Known problems ============== o SZIP Library is not available for Crays SV1 and TS Fortran APIs do not support SZIP compression. o SZIP compression cannot be used with GR interfaces. For more information see "HDF4.2r1 SZIP Release Notes" available at http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/SZIP_HDF4_2r1.pdf o This release doesn't support VMS system. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets doesn't work. o SDgetdimscale incorrectly returns FAIL and or returns incorrect data when the associated SDS has the same name as the dimension. o When using PGI compilers make sure that JPEG library is also compiled with PGI C compiler; linking with JPEG built with gcc causes JPEG library tests to fail. To bypass the problem x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... %%%4.2r0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% HDF 4.2 Release 0 December 2003 INTRODUCTION This document describes the differences between HDF 4.1r5 and HDF 4.2r0. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r0 The HDF 4.2r0 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: ftp://hdf.ncsa.uiuc.edu/HDF/Documentation/ First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Support for new platforms - Bugs fixed since HDF4.1r5 - Documentation - Platforms Tested - Known problems New Features and Changes: ======================== o IMPORTANT: HDF4 HAS A NEW CONFIGURATION ZLIB and JPEG libraries were removed from the HDF4 distribution source. ZLIB and JPEG have to be installed on the system before HDF4 library can be built or HDF4 precompiled binaries can be used. Please read INSTALL in the top HDF4 directory for instructions how to build the HDF4 library and applications. o HDF4 has an optional SZIP compression method; in order to use SZIP compression, SZIP library has to be installed on the system. Please refer to the INSTALL file for instructions on how to build with/without the SZIP Library. SZIP in HDF4 is free for non-commercial use; see http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/Commercial_szip.html for information regarding commercial use. For more information about SZIP compression see http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/ and the "HDF4 Reference Manual" entries for the GRsetcompress and SDsetcompress functions. o IMPORTANT note about prebuild binaries: NCSA precompiled binaries has SZIP compression method enabled for all platforms except Crays T3E and SV1 and Linux 2.4 SuSE x86_64. To use the binaries download the SZIP library from http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/ o The following new tools have been added hrepack hdiff hdfimport See "HDF4 Reference Manual" in the HDF 4.2r0 documentation set for more information. o fp2hdf is removed. It is replaced with hdfimport. o Helper scripts to facilitate HDF4 installation and compilation were added: h4cc - to compile C application with the HDF4 Libraries h4fc - to compiler Fortran applications with the HDF4 Libraries h4redeploy - to fix binary installation See "HDF4 Reference Manual" in the HDF 4.2r0 documentation set for more information. Support for new platforms ========================= o HDF4 was ported to the following platforms AIX 5.1 64-bit version MacOSX Linux 2.4 RH8 and RH9 Linux 2.4 RH8 64-bit, SuSE 64-bit Linux 2.4 ia64 Linux 2.4 SGI (Altrix) Bugs fixed since HDF4.1r5 ========================= 1. "hdp dumpgr" and "hdp dumpsds" have two new options: -g to suppress the data of global (or file) attributes -l to suppress the data of local attributes 2. The problem where hdp failed on a very long file name has been fixed. (bug #693) 3. The problem where VSinquire failed when being called on a vdata that had no fields defined, has been fixed. (bug #626) 4. When the values of VGNAMELENMAX and VSNAMELENMAX are changed the hdp output doesn't reflect the change. This problem is now fixed. (bug #606) 5. hdp dumpvg sometimes failed when reading a file that had a vgroup being inserted into another. This has been fixed. (bug #477) 6. hdf2gif failed when a user tried it on JPEG compressed images. (Bug #601). The problem is now fixed. An error message is displayed if the image is not 8-bit. If the image is 24-bit, the message suggests using hdf2jpeg. 7. ncdump failed to read NetCDF files 3.5 when there was more than one variable with unlimited dimensions. Fixed. 8. The NetCDF part of the HDF4 library was not ported to Compaq True64 system. Fixed. 9. The hdp commands dumpsds, dumpgr, dumpvd, and dumpvg now display an informative message when a non-HDF file is given as input. (Bug #817) 10. The compilation warnings and error on the macro HDFclose are fixed. (Bug #818) Documentation ============== Entries for new utilities hdiff, hrepack, hdfimport and helper scripts h4cc, h4fc, and h4redeply were added to the Reference Manual. Platforms Tested ================ HDF 4.2 Release 0 has been tested on the following platforms: AIX 5.1 (32 and 64-bit) xlc 6.0.0.2 xlf 8.1.1 Cray T3E sn6606 2.0.6.08 Cray Standard C Version 6.6.0.2 Cray Fortran Version 3.6.0.2 Cray SV1 sn9617 10.0.1.2 Cray Standard C Version 6.6.0.2 Cray Fortran Version 3.6.0.2 FreeBSD 4.9 gcc 2.95.4 g++ 2.95.4 HP-UX B.11.00 HP C HP92453-01 A.11.01.20 HP F90 v2.4 HP ANSI C++ B3910B A.03.13 IRIX64 6.5 (64 & n32) MIPSpro cc 7.3.1.3m F90 MIPSpro 7.3.1.3m Linux 2.4.20-20.7 (RH8) gcc 3.3.1 Intel(R) C++ Version 7.1 Intel(R) Fortran Compiler Version 7.1 Linux 2.4.20-20.9 (RH9) gcc 3.2.2 Linux 2.4.21-2.9.5ws x86_64 gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-16) g77 based on gcc version 3.2.3 Linux 2.4.19-SMP #1 x86_64 gcc version 3.3.2 (SuSE Linux) g77 version 3.3.2 OSF1 V5.1 Compaq C V6.4-014 Compaq Fortran V5.5-1877 SunOS 5.7(32 and 64 bit) WorkShop Compilers 5.0 98/12/15 C 5.0 (Solaris 2.7) WorkShop Compilers 5.0 98/10/25 FORTRAN 77 5.0 gcc 3.2.2 g77 GNU Fortran (GCC 3.2.2) 3.2.2 SunOS 5.8(32 and 64 bit) Sun WorkShop 6 update 2 C 5.3 (Solaris 2.8) Sun WorkShop 6 update 2 Fortran 77 5.3 IA-32 Linux 2.4.9-31pctr Intel(R) C++ Version 7.0 Intel(R) Fortran Compiler Version 7.0 IA-64 Linux 2.4.16 ia64 Intel(R) C++ Version 7.0 Intel(R) Fortran Compiler Version 7.0 IA-64 Linux 2.4.19-SMP Intel(R) C++ Version 7.1 Intel(R) Fortran Compiler Version 7.1 gcc 3.2 g77 GNU Fortran (GCC 3.2) 3.2 IA-64 Linux 2.4.21-sgi Intel(R) C++ Version 7.1 (Altrix) Intel(R) Fortran Compiler Version 7.1 Windows 2000 (NT5.0) MSVC++ 6.0 DEC Visual Fortran 6.0 Intel C and F90 compilers version 7.1 Windows XP MSVC++.NET MAC OS X Darwin 6.8 gcc Apple Computer, Inc. GCC version 1175, based on gcc version 3.1 Known problems ============== o SZIP Library is not available for Crays SV1 and T3E Fortran APIs do not support SZIP compression. o NetCDF tests nctest (C) and ftest (Fortran) fail to read from NetCDF 3.5 files o On Linux RH8 64-bit SZIP tests fail if library is compiled in production mode. All tests pass in the debug mode. o This release doesn't support VMS system. o On Linux with gcc compilers Fortran NetCDF APIs cannot read attributes, variables, and dimensions when name contain spaces. o HDF4 Library cannot be built with PGI compilers. o N-Bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets doesn't work. o --prefix defines where the installation path is. This version has the default set as /usr/local which is different from previous versions. o New utilities hdiff and hrepack are not available for Windows 2000. %%%4.2r0-Beta%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF 4.2 Release 0-Beta September 2003 INTRODUCTION This document describes the differences between HDF 4.1r5 and HDF 4.2r0-Beta. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.2r0-Beta The HDF 4.2r0-Beta documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/pub/outgoing/hdf4/4.2-Beta/ First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested New Features and Changes: ======================== o ZLIB and JPEG libraries were removed from the HDF4 distribution source. Please read INSTALL-4.2r0-Beta in the top HDF4 directory for instructions how to build HDF4 Library and applications. o HDF4 has an optional SZIP compression; please refer to the INSTALL-4.2r0-Beta file for instructions how to build with/without the SZIP Library. SZIP in HDF4 is free for non-commercial use; see http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/Commercial_szip.html for information regarding commercial use. For more information about SZIP compression see http://hdf.ncsa.uiuc.edu/HDF4/doc_resource/SZIP/ and the "HDF4 Reference Manual" entries for the GRsetcompress and SDsetcompress functions. o The following new tools have been added hrepack hdiff hdfimport See "HDF4 Reference Manual" in the HDF 4.2r0-Beta documentation set for more information. o HDF4 was ported to the following platforms AIX 5.1 64-bit version MacOSX Linux 2.4 RH8 and RH9 Please refer to the bugs_fixed.txt file for more details on bugs that were fixed. Platforms Tested: ================ HDF 4.2 Release 0-Beta has been tested on the following platforms: FreeBSD 4.9 HP-UX B.11.00 AIX 5.1 (32 and 64-bit) IRIX64 6.5 (-n32, -64) Linux 2.4 Solaris 2.7, 2.8 (32 and 64-bit) MacOSX No precompiled binaries is available for this release. %%%4.1r5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF 4.1 Release 5 November 2001 INTRODUCTION This document describes the differences between HDF 4.1r4 and HDF 4.1r5. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1r5. The HDF 4.1r5 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/HDF/Documentation/HDF4.1r5/ First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested New Features and Changes: ======================== o The following Vdata routines were added: VSsetblocksize/vsfsetblsz -- sets the block size of the linked-block element. VSsetnumblocks/vsfsetnmbl -- sets the number of blocks for a linked-block element. VSgetblockinfo/vsfgetblinfo -- retrieves the block size and the number of blocks of a linked-block element. o Two routines were added to get compression information for the SD and GR interfaces, including chunked elements: SDgetcompress/sfgcompress and GRgetcompress/mggcompress. Note: - For a JPEG image, GRgetcompress only returns the compression type, not the compression information (i.e, quantity and force_baseline). This information is not currently retrievable. - Getting compression type for JPEG chunked images is not working yet. o "hdp dumpgr" has a new option, -pd, to print palette data only. Also, whenever option -p or -pd is given, only palettes are printed, and no images or file attributes. o A new FORTRAN function, heprntf (HEprint), was added. It takes two arguments: file name and level. If the file name string has 0 length, then error messages will be printed to standard output. o On Windows, the unresolved symbol (error_top) error has been fixed when calling HEclear and linking with the DLL. Users who want to use the HDF DLL should define HDFAPDLL in their applications. Simply go to Project Settings and add HDFAPDLL as the predefined constant. o A memory leak in the netCDF portion of the HDF/mfhdf distribution was fixed. o The "#define NULL" was removed since ANSI C compilers are required to define NULL. o When using "hdp dumpgr", data was being printed in the range of 0-250 when it should have been between 0-168. This problem is now fixed. Please refer to the bugs_fixed.txt file for more details on bugs that were fixed. Platforms Tested: ================ HDF 4.1 Release 5 has been tested on the following platforms: Cray SV1 10.0.0.8 Cray T3E sn6711 2.0.5.55 Compaq Tru64 Unix (OSF1) 5.1 DEC Alpha/OpenVMS AXP 7.2-1 FreeBSD 4.4 HP-UX B.11.00 IBM SP 4.3 IRIX 6.5 IRIX64 6.5 (-n32, -64) Linux 2.2.18smp Solaris 2.7, 2.8 Windows NT/98/2000 For more information on the platforms that were tested and for which we provide pre-compiled binaries, please refer to the following web page (accessible from the HDF home page): http://hdf.ncsa.uiuc.edu/platforms.html Known problems: Writing n-bit datasets from FORTRAN with the SD interface is not working. SDgetchunkinfo does not return compression coding or modelling type. Using both fill-values and compression on SD datasets is not currently working, don't use one or the other. Dumping compressed Vdatas with vshow or hdp is not working. Reading or writing compressed images with the GR interface is not working. %%%4.1r4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF 4.1 Release 4 October 2000 INTRODUCTION This document describes the differences between HDF 4.1r3 and HDF 4.1r4. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1r4. The HDF 4.1r4 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/HDF/Documentation/HDF4.1r4/ First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems New Features and Changes: ======================== This release focuses on new features and changes added to the GR interface. o Two new utilities have been added to HDF, gif2hdf and hdf2gif. The gif2hdf utility will convert a GIF image into an HDF file containing a GR image. The hdf2gif utility will convert an HDF GR image into a GIF image. o Chunking and chunking with compression have been added to the GR interface. o JPEG compression with the GR interface was not working properly. This problem has been fixed. Several hdp options have been added: o Added -s option to dumpgr and dumpsds to allow printing data as a stream instead of breaking the lines at 65 characters. o Added option -c to dumpgr and dumpsds to allow printing clean output for attributes with type DFNT_CHAR. With this option, hdp will print space characters, such as horizontal tabs, CRs, and LFs, as they are instead of "\digit" (still the default.) This option also prints "..." for one or more null characters among the data. o Added option -l to dumpgr to allow printing data in different interlace modes. Platforms Tested: ================ HDF 4.1 Release 4 has been tested on the following platforms: Cray J90 (available after initial 4.1r4 release) Cray T3E DEC Alpha/Digital Unix DEC Alpha/OpenVMS Exemplar FreeBSD HP-UX IRIX IRIX64 (-n32, -64) Linux Solaris Solaris x86 SP Windows NT/98/2000 For more information on the platforms that were tested and for which we provide pre-compiled binaries, please refer to the following web page (accessible from the HDF home page): http://hdf.ncsa.uiuc.edu/platforms.html Known Problems: ============== o The ncgen utility fails on the IBM SP. %%%4.1r3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF 4.1 Release 3 May 7, 1999 INTRODUCTION This document describes the differences between HDF 4.1r2 and HDF 4.1r3. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1r3. The release notes provide more in-depth information concerning the topics discussed here. The HDF 4.1r3 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/HDF/Documentation/HDF4.1r3 First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems - Acknowledgements New Features and Changes: ======================== o HDF 4.1r2 was unable to properly read HDF SDSs created with HDF 3.3x. It did not read the correct SDS names. This problem has been fixed. o Many problems have been fixed with the GR interface, including the following: - The GR interface can now read compressed files created with the DFR8 and DF24 interfaces, except for those which were compressed with IMCOMP compression. - The GR interface can read and write images compressed with RLE, GZIP and Skipping Huffman compression methods. - Palettes can now be written and read properly with the GR interface. - 24-bit raster images can now be read by the GR interface. o You can now create an SDS with a name up to 256 characters in length. The previous limit was 64. o HDF now supports IJP JPEG version 6b and Gzip version 1.1.3. o Numerous hdp problems have been fixed, including the following: - hdp no longer fails on an HDF file which contains a vdata that no records have been written to. - hdp no longer fails on the PC and Mactinosh dumping large SDSs. - GR file attributes can now be displayed. - A palette can now be dumped with the GR command. o SDfileinfo no longer returns the wrong number of datasets for old files created with the DFSD interface. o This will be the last release that SunOS 4.1.4 is supported. Check the ./bugs_fixed.txt for other changes that are not listed here. Platforms Tested: ================ HDF 4.1 Release 3 has been tested on the following platforms: Cray J90 Cray T90 (CFP, IEEE) Cray T3E DEC Alpha/Digital Unix DEC Alpha/OpenVMS DEC Alpha NT VAX OpenVMS Exemplar FreeBSD HP-UX 10.2 IRIX 6.5 IRIX64 6.5 (-n32, -64) Linux Macintosh Solaris Solaris x86 SP SunOS 4.1.4 Windows NT/95 For more information on the platforms that were tested and for which we provide pre-compiled binaries, please refer to the following web page (accessible from the HDF home page): http://hdf.ncsa.uiuc.edu/platforms.html Known Problems: ============== o On Alpha OpenVMS version 6.2, the DF.OLB and MFHDF.OLB Libraries should be created with optimization turned off. Otherwise hdftest fails (the sfgichnk function returns incorrect information). o On VAX Open VMS 6.2, the ncgen utility core dumps and an error occurs when reading GR image data with user-defined fill values. o If you encounter problems building on a platform, please be sure to check the INSTALL file at the top of the HDF source tree, in case these problems are documented in section 2.5, Platform-specific Notes. o On the NT, the hdp utility fails in the debug version when using the list command. Acknowledgements: ================ Fortner Software LLC ("Fortner") created the reference implementations for the Macintosh and Windows NT/95 of the HDF 4.1r3 library. For more information, please refer to the macintosh.txt and windows.txt files in the ./release_notes/ directory. %%%4.1r2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF 4.1 Release 2 March 16, 1998 INTRODUCTION This document describes the differences between HDF 4.1r1 and HDF 4.1r2. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1r2. The release notes provide more in-depth information concerning the topics discussed here. The HDF 4.1r2 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/Documentation/HDF4.1r2 First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems - Important Fixes - Acknowledgements New Features and Changes: ======================== o Data chunking is now supported with the GR interface. New routines for creating and manipulating chunked GR images have been added. Please refer to the ./release_notes/new_functions.txt file and HDF Reference Manual for information on using chunked GRs. o In previous releases, many C routines existed for which there were no Fortran counterparts. With HDF 4.1r2, we have added a Fortran routine for most C routines. Please check the ./release_notes/new_functions.txt file for a list of the new functions added to HDF. o This is the first release in which the Java Products (the Java-based HDF Viewer (JHV) and the Java HDF interface (JHI)) are incorporated in the HDF release itself. For information on the Java Products, please refer to the HDF home page under Information about HDF (http://hdf.ncsa.uiuc.edu/about.html). o In the SD interface, HDF now defaults to ONLY storing the new version of the dimension representation added in HDF 4.0r1. When the dimension representation was changed in 4.0r1, the HDF library defaulted to include both the new and old dimension representations in an HDF file. Now, this new dimension representation is stored by default. The SDsetdimval_comp function can be used to change the dimension representation stored. Following is a detailed description of the difference between the new and old representations: Prior to HDF 4.0r1, a vgroup was used to represent a dimension. The vgroup had a single field vdata with a class of "DimVal0.0". The vdata had number of records, with each record having a fake value from 0, 1, 2 ... , ( - 1). The fake values were not really required and took up a large amount of space. For applications that created large one dimensional array datasets, the disk space taken by these fake values almost doubled the size of the HDF file. In order to omit the fake values, the new version for a dimension vdata was implemented. The new version uses the same structure as the old version. The only differences are that the vdata has only 1 record with a value of and that the vdata's class is "DimVal0.1", to distinguish it from the old version. o Platforms dropped with this release: Cray Y-MP, T3D, and Linux (a.out) o Extensive changes have been made to the Reference Manual and User's Guide. The updated Reference Manual is available with this release. The updated User's Guide will be available in the near future. Platforms Tested: ================ HDF 4.1 Release 2 has been tested on the following platforms: Cray T90 (CFP, IEEE) IRIX 6.2 Cray T3E IRIX64 6.4 (-n32, -64) DEC Alpha/Digital Unix Linux (elf) Exemplar Solaris FreeBSD Solaris x86 HP-UX 9.03 SP2 HP-UX 10.2 SunOS IRIX 5.3 ** The Windows NT/95, Macintosh, Dec Alpha OpenVMS and VAX OpenVMS releases are not available with this release of HDF4.1r2. Separate releases for these platforms will be available in the near future. For more information on the platforms that were tested and for which we provide pre-compiled binaries, please refer to the following web page (accessible from the HDF home page): http://hdf.ncsa.uiuc.edu/platforms.html Known Problems: ============== o Writing n-bit datasets from FORTRAN with the SD interface is not working. o SDgetchunkinfo does not return compression coding or modeling type. o Using both fill-values and compression on SD datasets is not currently working; don't use one or the other. o Dumping compressed Vdatas with vshow or hdp is not working. o Reading or writing compressed images with the GR interface is not working. o With the GR interface, you cannot create a raster image without writing data to it. Important Fixes: =============== o HDF no longer core dumps when reading a NetCDF file. o HDF now supports little-endian conversion for VAX and Dec Alpha OpenVMS. o The problems that occurred on the Cray with HDF 4.1r1 have been corrected. See the ./release_notes/bugs_fixed.txt file for more information on bugs fixed in this release. Acknowledgements: ================ Fortner Software LLC ("Fortner") created the reference implementations for Macintosh and Windows NT/95 of the HDF 4.1r2 library, which will be available in the near future. For more information, please refer to the macintosh.txt and windows.txt files [in the ./release_notes/ directory]. (see above). ==================new_functions.txt================================== This file contains a list of the new functions added with HDF 4.1r2. The functions in parenthesis were already present in the HDF library, and are included for clarity. C FORTRAN Description -------------------------------------------------------------------------------- (SDsetcompress) sfscompress compresses SDS (SDwritechunk) sfwchnk writes the specified chunk of NUMERIC data to the SDS (SDwritechunk) sfwcchnk writes the specified chunk of CHARACTER data to the SDS (SDreadchunk) sfrchnk reads the specified chunk of NUMERIC data to the SDS (SDreadchunk) sfrcchnk reads the specified chunk of CHARACTER data to the SDS (SDsetchunk) sfschnk makes the SDS a chunked SDS (SDsetchunkcache) sfscchnk sets the maximum number of chunks to cache (SDgetchunkinfo) sfgichnk gets info on SDS (SDsetblocksize) sfsblsz sets block size (SDisrecord) sfisrcrd checks if an SDS is unlimited (GRsetcompress) mgscompress compresses raster image GRsetchunk mgschnk makes a raster image a chunked raster image GRgetchunkinfo mggichnk gets info on a raster image GRsetchunkcache mgscchnk sets the maximum number of chunks to cache (Hgetlibversion) hglibver gets version of the HDF Library (Hgetfileversion) hgfilver gets version of the HDF file Vdeletetagref vfdtr deletes tag/ref pair ( HDF object) from a vgroup (VSfindclass) vsffcls finds class with a specified name in a vdata VSdelete vsfdlte deletes a vdata Vdelete vdelete deletes a vgroup ===================================================================== %%%4.1r1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.1 Release 1 February 21, 1997 INTRODUCTION This document describes the differences between HDF 4.0r2 and HDF 4.1r1. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1r1. The release notes provide more in-depth information concerning the topics discussed here. The HDF 4.1r1 documentation can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory: /HDF/Documentation/HDF4.1r1 First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems - Important Fixes New Features and Changes: ======================== o Attributes are now supported in both the vdata and vgroup APIs. In the vdata API, attributes can be attached to either vdata fields or vdatas; in the vgroup API, attributes can be attached to vgroups. This new functionality can also be used to attach attributes to vdatas and vgroups created by earlier versions of the HDF library. However, the old versions of the HDF library cannot read the new version vdatas and vgroups. A vdata/vgroup having attributes will become a new version vdata/vgroup. For more information, please refer to the file ../release_notes/vattr.txt, the man pages for the new functions, and the HDF 4.1 User's Guide. o Data chunking is now supported in SD scientific data sets. When data chunking is used, an n-dimensional SDS is stored as a series of n-dimensional chunks, improving performance on certain types of partial read operations. New routines for creating and manipulating chunked SD scientific data sets have been provided, and two preexisting SD I/O routines, SDreaddata and SDwritedata, have also been modified to work with chunked SDSs. For more information, please refer to the file ../release_notes/sd_chunk_examples.txt, the man page for sd_chunk, and the HDF 4.1 User's Guide. o Due to certain limitations in the way compressed SDS datasets are stored, data which has been compressed is not completely writable in ways that uncompressed datasets are. The "rules" for writing to a compressed dataset are as follows: (1) Write an entire dataset that is to be compressed. i.e. build the dataset entirely in memory, then write it out with a single call. (2) Append to a compressed dataset. i.e. write to a compressed dataset that has already been written out by adding to the unlimited dimension for that dataset. (3) For users of HDF 4.1, write to any subset of a compressed dataset that is also chunked. Please refer to the HDF 4.1 User's Guide for more information. o HDF now creates free format FORTRAN include files. In order to make FORTRAN 90 programs be able to use HDF include files (*.inc), HDF4.1r1 creates F90 versions of these files during the 'make' process on UNIX platforms, by replacing 'C' or 'c' in column 1 with '!'. Continuation lines in hdf.inc have been eliminated. The F90 version files are named as hdf.f90, dffunc.f90 and netcdf.f90. o Several performance improvements have been added. Test programs on SPARC 20/Solaris 2.5 show that when creating an hdf file with 2500 3D (10x10x10) float32 SDSs, the program execution speed is improved by 2.5 - 4.8 times, and SDend is faster by 4.3 - 20 times. o A new function, SDsetfillmode, has been added. It can be used to prevent SDwritedata from pre-filling the dataset with a user defined or default fill value, so that better performance can be obtained. o SGI has changed some compiler default settings in IRIX 6.2. We decided to explicitly define the settings of various ABI related options. For the 64 bit OS ("uname -s" returns IRIX64), HDF uses "-64 -mips4" code. For the traditional 32 bit OS ("uname -s" returns IRIX), HDF uses "-32 -mips2". To use n32 mode on IRIX64, HDF uses "-n32 -mips3" code. Note that in the previous release (4.0r2), HDF used only "-n32". In IRIX 6.1 and before, "-n32" defaulted to "-mips4" code but in IRIX 6.2, it defaults to mips3 or mips4 code. We decided to explicitly set it to "-n32 -mips3". Therefore, applications linking with the HDF library must be compiled with the same explicit ABI options. o This will be the last release that we support the CM5. HDF 4.1 Beta 1 USERS ONLY ------------------------- o The SD chunking routine names were changed to be more consistent with the SD interface. The names of the routines are now in lower case, after the two initial "SD" characters. For example, SDwriteChunk() has been changed to SDwritechunk(). o The _HDF_ENTIRE_VDATA variable has been changed to _HDF_VDATA. For those users already using it, a macro called _HDF_ENTIRE_VDATA has been added, which is defined as _HDF_VDATA. o You can now create an empty compressed SDS. Please refer to the ../release_notes/bugs_fixed.txt file for changes in this release. Platforms Tested: ================ HDF 4.1 Release 1 has been tested on the following platforms: CM5 Parallel I/O, 4.1.3_U1 DEC Alpha/Digital Unix 3.2 DEC Alpha/OpenVMS AXP 6.2 DEC VAX OpenVMS 6.2 Exemplar 9.03 Free BSD 2.2 HP-UX 9.03 HP-UX 10.10 IRIX 5.3 IRIX 6.2_64 IRIX 6.2_n32 IRIX 6.4_64 IRIX 6.4_n32 Linux A.OUT 1.2.4 Linux ELF 2.0.27 (C only) Macintosh PowerPC (C only) SP2 4.1 Solaris 2.5 Solaris_x86 2.5 (C only) SunOS 4.1.3 Windows NT/95 (C only) Known Problems: ============== o With the SD interface, you are unable to overwrite existing compressed data, that is not stored in "chunked" form. This is due to compression algorithms not being suitable for "local" modifications in a compressed datastream. o There are no plans to add the DF24writeref function to the DF24 interface. This function will be removed from the documentation. Important Fixes: =============== o If you opened a file in Read Only mode with the SD interface (using SDstart), it would create the file if the file did not exist. This no longer occurs. o HDF 4.0r2 did not recognize JPEG images created by HDF 3.3r4. This has been fixed. See the ../release_notes/bugs_fixed.txt file for more information on bugs fixed in this release. %%%4.1b1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.1 Beta 1 December 6, 1996 INTRODUCTION This document describes the differences between HDF 4.0r2 and HDF 4.1b1. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.1b1. The release notes provide more in-depth information concerning the topics discussed here. For documentation, please refer to the HDF 4.0r2 documentation which can be found on the NCSA ftp server (ftp.ncsa.uiuc.edu) in the directory /HDF/Documentation/HDF4.0r2. First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems - Important Fixes New Features and Changes: ------------------------- o Attributes are now supported in both the vdata and vgroup APIs. In the vdata API, attributes can be attached to either vdata fields or vdatas; in the vgroup API, attributes can be attached to vgroups. This new functionality can be used to attach attributes to vdatas and vgroups created by earlier versions of the HDF library. However, the old versions of the HDF library cannot read the new version vdatas and vgroups. A vdata/vgroup having attributes will become a new version vdata/vgroup. For more information, please refer to the file ../release_notes/vattr.txt, as well as the man pages for the new functions. o Data chunking is now supported in SD scientific data sets. When data chunking is used, an n-dimensional SDS is stored as a series of n-dimensional chunks, improving performance on certain types of partial read operations. New routines for creating and manipulating chunked SD scientific data sets have been provided, and two preexisting SD I/O routines, SDreaddata and SDwritedata, have also been modified to work with chunked SDSs. For more information, please refer to the file ../release_notes/sd_chunk_examples.txt, as well as the man page for sd_chunk. More information will be included in the HDF 4.1 documentation, which will be available with the release of HDF 4.1. o Due to certain limitations in the way compressed SDS datasets are stored, data which has been compressed is not completely writable in ways that uncompressed datasets are. The "rules" for writing to a compressed dataset are as follows: (1) Write an entire dataset that is to be compressed. i.e. build the dataset entirely in memory, then write it out with a single call. (2) Append to a compressed dataset. i.e. write to a compressed dataset that has already been written out by adding to the unlimited dimension for that dataset. (3) For users of HDF 4.1, write to any subset of a compressed dataset that is also chunked. Please refer to the ../release_notes/comp_SDS.txt file for more information. o A new file, ../release_notes/compile.txt, contains instructions on compiling applications on the supported platforms. If you encounter problems with it, please let us know at hdfhelp@ncsa.uiuc.edu. o SGI has changed some compiler default settings in IRIX 6.2. We decided to explicitly define the settings of various ABI related options. For the 64 bit OS ("uname -s" returns IRIX64), HDF uses "-64 -mips4" code. For the traditional 32 bit OS ("uname -s" returns IRIX), HDF uses "-32 -mips2". To use n32 mode on IRIX64, HDF uses "-n32 -mips3" code. Note that in the previous release (4.0r2), HDF used only "-n32". In IRIX 6.1 and before, "-n32" defaulted to "-mips4" code but in IRIX 6.2, it defaults to mips3 or mips4 code. We decided to explicitly set it to "-n32 -mips3". Therefore, applications linking with the HDF library must be compiled with the same explicit ABI options. Platforms Tested: ----------------- HDF 4.1b1 has been tested on the following platforms: DEC Alpha/Digital Unix 3.2 DEC Alpha/OpenVMS AXP v6.2 DEC VAX OpenVMS v6.2 Free BSD 2.2 HP-UX 9.03 IRIX 5.3 IRIX 6.2_64 IRIX 6.2_n32 Linux ELF 1.2.13 (C only) Macintosh PowerPC (C only) (not ready yet) SP2 4.1 Solaris 2.5 SunOS 4.1.3 Windows NT/95 (C only) YMP 9.0.2asC Known Problems: --------------- o With the SD interface, you are unable to overwrite existing compressed data, that is not stored in "chunked" form. This is due to compression algorithms not being suitable for "local" modifications in a compressed datastream. For more information, please refer to the ../release_notes/comp_SDS.txt file. o With 4.0r1p1, you could type "hdp list -a to get a list of the file attributes associated with a file. This does not currently work. o There are no plans to add the DF24writeref function to the DF24 interface. This function will be removed from the documentation. o When running "make test" on OpenVMS, Test 3 (float32) of the chunking tests fails, and has therefore been commented out. o When running the tests on Window NT/95, Test 2 (uint16) of the chunking tests fails, and will be commented out. Important Fixes: ---------------- o If you opened a file in Read Only mode with the SD interface (using SDstart), it would create the file if the file did not exist. This no longer occurs. o HDF 4.0r2 did not recognize JPEG images created by HDF 3.3r4. This has been fixed. See the ../release_notes/bug_fixed.txt file for more information on bugs fixed in this release. %%%4.0r2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.0 Release 2 July 19, 1996 INTRODUCTION This document describes the differences between HDF 4.0r1p1 and HDF 4.0r2. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF 4.0r2. The documentation and release notes provide more in-depth information concerning the topics discussed here. The HDF 4.0 documentation can be found on the NCSA ftp server in the directory /HDF/Documentation/HDF4.0/Users_Guide. First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - New Features and Changes - Platforms Tested - Known Problems New Features and Changes: ------------------------- o HDF now supports unlimited number of access IDs and files IDs. o The vdata field size limit has been increased from 32000 to 65535. o The hdp utility has been updated to: - view a GR object - recognize the new compression methods - view descriptive annotations - display the library version of the HDF file o SDsetattr and GRsetattr now check for both MAX_ORDER and MAX_FIELD_SIZE. o The handling of DFNT_CHAR in all Fortran interfaces has been cleaned up. See release_notes/Fortran_APIs.txt for more information. o When appending compressed data onto the end of an unlimited dimension SDS, the SD interface no longer writes the fill-values in locations where they will immediately be over-written by data. This was done for the compression layer, but has the added enhancement of improving performance. o On the Cray, there were boundary problems when foreign data did not start from the 64-bit boundary. This has been fixed. o There are no longer the following name collisions with the HDF libraries: - AVS (HPread, HPwrite) - Windows SDK (_hread) - ODL library (_HDF_) o The 32-bit mode for IRIX 6.1 previously used the '-32' option which produces mips1 code. It has been changed to use '-n32' which produces mips4 code. This runs faster on the Power Challenges. Users who must use the '-32' option can link their code with the IRIX 5.3 HDF library. o The compression problems have been fixed when using HDF on IRIX 6.1 with the -n32 (see Known Problems below). o The zlib and jpeg libraries have been updated. The versions included with HDF 4.0 Release 2 are: zlib version 1.0.2 jpeg version 6a (7-Feb-96) o The hdfls utility has been updated to: - support the new compression modes - display the library version of the HDF file o Support for the 16-bit architecture has been pulled out of HDF. o The directories separator in the directory variable used by the function HXsetdir (Fortran equivalent: hxsdir) is the verticle bar ('|') now. It used to be the colon (':') symbol, but a colon is a legal symbol for a file pathname in the MacOS system. o The code has been rearranged so that most applications' binaries will be smaller. o A new routine, VSfpack(), has been added. Please see the HDF man page on how to use this routine. o A new routine, GRluttoref(), has been added. Please see the HDF man page on how to use this routine. o Several internal problems have been fixed with the GR interface. Changes in Compiling the Source Code: o A new compile option, '-DHAVE_NETCDF', has been added, to avoid conflicts in linking the HDF/MFHDF library with the original netCDF library. This is only available for the C-interface. However, keep in mind that you cannot read/write HDF files using the netCDF libraries. See section 2.4.3.2 in the INSTALL file for more information. o When compiling and installing HDF, the default location to place the binaries, has been changed from /usr/local/bin to NewHDF in the source directory. For example, assuming the library source is loaded at /usr/local/src/hdf, the following commands will result in the HDF binaries being placed in the directory /usr/local/src/hdf/dev/NewHDF. cd dev ./configure -v make make test make install o The Fortran test output has been cleaned up and shortened, when running "make test". Previously, the Fortran tests on the hdf/ side consisted of multiple Fortran programs invoked by a C frontend. The test programs were changed to subroutines and combined as one Fortran program. The C frontend was also changed to produce a 'directive' file, called fortest.arg, which contains directives to run the Fortran test program. Platforms Tested: ----------------- HDF 4.0r2 has been tested on the following platforms: AIX Linux ELF C90 MAC CM5 SP2 (single node) Digital Unix 3.2 Solaris_2.4 Exemplar 9.03 Solaris 2.5 Free BSD Solaris_x86 2.4 (C only) Fujitsu (C only) SunOS 4.1.4 HP-UX T3D (C only) IRIX 6.1 w/-n32 bit option VMS IRIX 6.1 w/-64 bit option Windows NT/95 IRIX 5.3 YMP Linux A.OUT Known Problems: --------------- o On the SunOS platform, there is a bug when using sfscal()/sfgcal() routines with gcc and f77. o On the VMS platform, there is a bug with float64 data. o For IRIX 6.1, the stdio.h file gives a false warning message if both the '-n32' and '-ansi' options are used for the C compiler. We have temporarily removed the '-ansi' option from our autoconfiguration for the Irix6_32 system, to avoid these messages. We have verified that the culprit in stdio.h has been corrected in IRIX 6.2, and plan to put the '-ansi' option back in our next release. o The compression tests produce errors for FLOAT32 data if the '-O' option is used on IRIX 6.1, for both the '-64' bit and '-n32' bit modes. It did not produce errors when using the '-32' bit option or when not using the '-O' option. We are unsure whether the errors are due to the compression code or the IRIX C optimizer. For now, we have chosen to compile the HDF library without the '-O' option, while we investigate the problem. %%%4.0r1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.0 Release 1 February 7, 1996 INTRODUCTION This document describes the differences between HDF4.0r1 and HDF3.3r4. It is written for people who are familiar with previous releases of HDF and wish to migrate to HDF4.0r1. The documentation and release notes provide more in-depth information concerning the topics discussed here. The HDF 4.0 documentation can be found on the NCSA ftp server in the directory /HDF/Documentation/HDF4.0/Users_Guide. For more history behind the implementation of the items listed here, refer to the ABOUT_4.0.alpha, ABOUT_4.0b1 and ABOUT_4.0b2 files. First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: http://hdf.ncsa.uiuc.edu/ If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu CONTENTS - Important Changes (that will affect you) - New Features and Changes - Changes in Utilities - Known Problems Important Changes: ----------------- 1. Several changes have been made to the libraries in HDF4.0 which affect the way that users compile and link their programs: * The mfhdf library has been renamed to libmfhdf.a from libnetcdf.a in previous releases. * HDF 4.0 libraries now use v5 of the Independent JPEG Group (IJG) JPEG file access library. * Gzip library libz.a is added in HDF4.0r1, in order to support "deflate" style compression of any object in HDF files. Due to these changes, users are required to specify four libraries when compiling and linking a program: libmfhdf.a, libdf.a, libjpeg.a and libz.a, even if your program does not use JPEG or GZIP compression. For example: For C: cc -o myprog myprog.c -I \ \ or cc -o myprog myprog.c -I \ -L -lmfhdf -ldf -ljpeg -lz For FORTRAN: f77 -o myprog myprog.f \ \ or f77 -o myprog myprog.f -L \ -lmfhdf -ldf -ljpeg -lz NOTE: The order of the libraries is important: libmfhdf.a first, then libdf.a, followed by libjpeg.a and libz.a. This is also discussed in Items 1, 2, and 3 of the New Features and Changes section of this document. 2. The HDF 4.0 library will ONLY compile with ANSI C compilers. See Item 4 in the New Features and Changes section of this document for more information. 3. The HDF library and netCDF library on Unix systems can now be automatically configured and built with one command. See Item 5 in the New Features and Changes section of this document for more information. 4. In HDF 4.0, the FORTRAN programs dffunct.i and constant.i have been changed to dffunct.inc and hdf.inc. See Item 16 in the New Features and Changes section of this document for more information. 5. Platforms tested on: IRIX (5.3, 6.1 (32 bit and 64 bit)), SunOS 4.1.4, Solaris (ver 2.4, 2.5), Solaris x86, HP-UX, Digital Unix, AIX, LINUX (A.OUT), CM5, YMP, FreeBSD, C90, Exemplar, Open VMS, and SP2 (single node only). HDF 4.0 is not yet available on the Macintosh for HDF4.0r1. 6. The HDF 4.0 binaries for each tested platform are available. Unix binaries are located in the bin/ directory. Binaries for Windows NT are located in the zip/ directory. New Features and Changes: ------------------------ 1. Changes to the mfhdf library The mfhdf library has been renamed to libmfhdf.a from libnetcdf.a in previous releases. To link a program with HDF4.0r1 libraries, four libraries are required: libmfhdf.a, libdf.a, libjpeg.a and libz.a. See Item 1 of 'Important Changes' for examples of how you would compile and link your programs. 2. JPEG Group v5b library HDF Version 4.0 libraries now use v5 of the Independent JPEG Group (IJG) JPEG file access library. The JPEG library will need to be linked with user's applications whether they are compressed with JPEG or not. See Item 1 of 'Important Changes' for examples of how you would compile and link your programs. 3. Gzip library added New with this release is support for gzip "deflate" style compression of any object in an HDF file. This is supported through the standard compression interface function calls (HCcreate, SDsetcompress, GRsetcompress). The ABOUT_4.0b2 file contains additional information on this. See Item 1 of 'Important Changes' for examples of how you would compile and link your programs. 4. ANSI C only As was previously noted in the HDF newsletters, this release of the HDF library will compile only with ANSI C compilers. This shift to ANSI C compliance has been accompanied by a large clean up in the source code. An attempt has been made to remove all warnings and informational messages that the compilers on supported platforms occasionally emit, but this may not be completely clean for all user sites. 5. Auto configuration Both the HDF library and netCDF library on Unix systems now use the same configure script and can be configured uniformally with one command. See the README and the INSTALL files at the top level of HDF4.0r1 for detailed instructions on configuration and installation. A consequence of the auto configuration is that on UNIX systems without FORTRAN installed, the top level config/mh- will need to have the 'FC' macros defined to "NONE" for correct configuration. 6. New version of dimension record In HDF4.0b1 and previous releases of the SDS interface, a vgroup was used to represent a dimension. The vgroup had a single field vdata with a class of "DimVal0.0". The vdata had number of records, with each record having a fake value from 0, 1, 2 ... , ( - 1). The fake values were not really required and took up a large amount of space. For applications that created large one dimensional array datasets, the disk space taken by these fake values almost doubled the size of the HDF file. In order to omit the fake values, a new version of dimension vdata was implemented. The new version uses the same structure as the old version. The only differences are that the vdata has only 1 record with a value of and that the vdata's class is "DimVal0.1", to distinguish it from the old version. No change was made in unlimited dimensions. Functions added to support this are: - SDsetdimval_comp -- sets backward compatibility mode for a dimension. The default mode is compatible in HDF4.0r1, and will be incompatible in HDF4.1. See the man page of SDsetdimval_comp(3) for detail. - SDisdimval_bwcomp(dimid) -- gets the backward compatibility mode of a dimension. See the man page of SDisdimval_bwcomp(3) for detail. 7. Reading CDF files With HDF 4.0 limited support for reading CDF files was added to the library. This support is still somewhat in the development stage and is therefore limited. To begin with, unlike the netCDF merger, the CDF API is not supported. Rather, the SD and netCDF APIs can be used to access information pulled out of CDF files. The type of files supported are limited to CDF 2.X files. The header information is different between CDF 1.X and 2.X files. In addition, all of the files must be stored as single-file CDFs in network encoding. If there is user demand, and support, the types of CDF files that are readable may be increased in the future. 8. Parallel I/O interface on CM5 An extension using the parallel IO in CM5 has been added to the SDS interface. Initial tests have resulted in about 25 MBytes/second IO throughput using the SDA (Scalable Disk Array) file system. The library provides interfaces for both C* and CMF programming languages. The ABOUT_4.0.alpha file has more information concerning this. Users will find some examples in the directory mfhdf/CM5/Examples. The parallel I/O interface stores scientific datasets in external files. New options have been added to hdfls and hdfpack to handle them. A new utility, hdfunpac, was created for external files handling, too. 9. Support for SGI Power Challenge running IRIX6.1 Power Challenge is now supported, both in the native 64-bit and the 32-bit objects modes. Note that the Power Challenge native 64 bits objects use 64 bits long integers. Users should be careful when using the netcdf interface. They should declare their variables as "nclong", not "long". 10. Multi-file Annotation Interface (ANxxx) The multi-file annotation Interface is for accessing file labels and descriptions, and object labels and descriptions. It allows users to keep open more than one file at a time, and to access more than one annotation at a time. It also allows multiple labels and multiple descriptions to be applied to an HDF object or HDF file. 11. Multi-file Raster Image (GRxxx) interface The new Generic Raster (GR) interface provides a set of functions for manipulating raster images of all kinds. This interface allows users to keep open more than one file at a time, and to "attach" more than one raster image at a time. It supports a general framework for attributes within the RIS data-model, allowing 'name = value' style metadata. It allows access to subsamples and subsets of images. The GRreqlutil and GRreqimageil functions allow for different methods of interlacing images in memory. The images are interlaced in memory only, and are actually written to disk in "pixel" interlacing. 12. Compression for HDF SDS Two new compression functions have been added to the SD interface for HDF 4.0: SDsetcompress and SDsetnbitdataset. SDsetcompress allows users to compress a scientific dataset using any of several compression methods. Initially three schemes, RLE encoding, an adaptive Huffman compression algorithm, and gzip 'deflation' compression are available. SDsetnbitdataset allows for storing a scientific dataset using integers whose size is any number of bits between 1 and 32 (instead of being restricted to 8, 16 or 32-bit sizes). Access to the data stored in an n-bit data item is transparent to the calling program. The ABOUT_4.0.alpha file has an in-depth description concerning this ("n-bit SDS" listed under Item 2). 13. External Path Handling New functions have been added to allow applications to specify directories to create or search for external files. - HXsetcreatedir (hxscdir for FORTRAN) - HXsetdir (hxsdir for FORTRAN) 14. I/O performance improvement HDF 4.0 unofficially supports file page buffering. With HDF 4.1 it will be officially supported. The file page buffering allows the file to be mapped to user memory on a per page basis i.e. a memory pool of the file. With regards to the file system, page sizes can be allocated based on the file system page-size or in a multiple of the file system page-size. This allows for fewer pages to be managed as well as accommodating the user's file usage pattern. See the top level INSTALL file and the release_notes/page_buf.txt file for creating the library with this support and using it. 15. Improvement in memory usage and general optimizations Considerable effort was put into this release (since the b2 release) to reduce the amount of memory used per file and by the library in general. In general terms, we believe that the library should have at least half as large of a memory footprint during the course of its execution and is more frugal about allocating large chunks of memory. Much time was spent optimizing the low-level HDF routines for this release to be faster than they have been in the past also. Applications which make use of files with many (1000+) datasets should notice significant improvements in execution speed. 16. In hdf/ there are two files for FORTRAN programs to include the values and functions defined in HDF. They were originally named as constant.i and dffunct.i. The extension .i caused problems on some machines since *.i is used by cc as an "intermediate" file produced by the cpp preprocessor. In HDF 4.0 dffunct.i has been changed to dffunct.inc, and constant.i has been changed to hdf.inc. Users' existing FORTRAN application programs need to make the corresponding changes, if they include the .i files, in order to compile with HDF4.0. 17. Limits file A new file, limits.txt, has been added to the ftp server. It is aimed at HDF applications programmers and defines the upper bounds of HDF 4.0. This information is also found in the hdf/src/hlimits.h file. Refer to the ABOUT_4.0.alpha for historical information concerning this. 18. Pablo available HDF4.0 supports creating an instrumented version of the HDF library(libdf-inst.a). This library, along with the Pablo performance data capture libraries, can be used to gather data about I/O behavior and procedure execution times. See the top level INSTALL file and the hdf/pablo/README.Pablo file for further information. 19. Support for the IBM SP-2 The HDF library has been ported to run in a single SP2 node. It does not support the parallel or distributed computing for multiple SP-2 nodes yet. 20. Miscellaneous fixes - To avoid conflicts with C++, internal structures' fields which were named 'new' have been renamed. - The maximum number of fields in a vdata now is decided by VSFIELDMAX. - The platform number subclass problem when an external data file was in Little_endian format has been fixed. - Unlimited dimension was not handled correctly by the HDF3.3r4 FORTRAN interface. This problem has been fixed in HDF4.0r1. Changes to utilities: -------------------- o hdf/util/ristosds Ristosds now converts several raster images into a 3D uint8, instead of float32, SDS. o hdf/util/hdfls New options have been added to support the parallel I/O interface on CM5. o hdf/util/hdfpack New options have been added to support the parallel I/O interface on CM5. o hdf/util/hdfunpac This is a new utility for external file handling for the parallel I/O interface on CM5. o mfhdf/dumper/hdp Hdp is a new command line utility designed for quick display of contents and data objects. It can list the contents of hdf files at various levels with different details. It can also dump the data of one or more specific objects in the file. See hdp.txt in the release notes for more information. Known Problems: -------------- o On the IRIX4 platform, fp2hdf creates float32 and float64 values incorrectly. o On the SP2, the hdp command gives a false message of "Failure to allocate space" when the hdf file has no annotations to list. o On the C90, hdfed fails inconsistently when opening hdf files more than once in the same hdfed session. o Currently there is a problem in re-writing data in the middle of compressed objects. o VMS gives an error on the test for Little Endian float64. o If the external element test in hdf/test/testhdf fails and there is no subdirectory "testdir" in hdf/test/, create one via "mkdir" and run the test again. (The "testdir" should have been created by "make". But the "make" in some old systems does not support the creation commands.) %%%4.0b2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.0 Beta 2 Nov 14, 1995 CONTENTS 1. The mfhdf side library is renamed to libmfhdf.a, versus libnetcdf.a in previous releases 2. New version of dimension record 3. New features GR interface Gzip library is added Unified configuration of library I/O performance improvement 4. New functions added Fortran functions hxscdir and hxsdir SDsetdimval_comp SDisdimval_bwcomp 5. SGI Power Challenge running IRIX6.1 is now supported 6. Pablo available 7. Platforms tested 8. Changes in release notes 9. Bug fixes and Known problems 1. The mfhdf side library is renamed to libmfhdf.a, versus libnetcdf.a in previous releases. To link a program with HDF4.0b2 libraries, one needs four libraries, libmfhdf.a, libdf.a, libjpeg.a and libz.a (see "Gzip library is added" in item 3 below): cc -o myprog myprog.c -I \ libmfhdf.a libdf.a libjpeg.a libz.a Note, the order of the libraries is important. 2. New version of dimension record HDF4.0b1 and previous releases use a vgroup to represent a dimension. The vgroup has a single field vdata with class "DimVal0.0". The vdata has number of records, each record has a fake value from 0, 1, 2 ... , ( - 1 ). The fake values are not really required and take a lot of space. For applications that create large one dimensional array datasets the disk space taken by these fake values almost double the size of the HDF file. In order to omit the fake values, a new version of dimension vdata is proposed. The new version uses the same structure as the old version. The only differences are that the vdata has only 1 record with value and that the vdata's class is "DimVal0.1" to distinguish it from the old version. No change is made in Unlimited dimensions. See file dimval.txt in subdirectoy release_notes/ of HDF4.0b2 release for our policy on the backward compatibility of this dimension version. 3. New features . New with this beta release is the support for different methods of interlacing images in memory. This feature is supported through the GRreqlutil and GRreqimageil functions rescribed in the mf_ris.txt document in this directory. Please note that the images are interlaced in memory only, all images are actually written to disk in "pixel" interlacing. . Gzip library is added New with this release is support for gzip "deflate" style compression of any object in an HDF file. This is supported through the standard compression interface function calls (HCcreate, SDsetcompress, GRsetcompress) by using the COMP_CODE_DEFLATE parameter for the coding type. The comp_info structure has a new member, deflate.level, which specifies how much effort to expend trying to compress data. Values for deflate.level must be between 1-9, with 1 being small amounts of effort (time) and 9 being maximum effort (most time and compression), the default value is 6. Currently, due to our use of the gzip "zlib" library for support of this feature, users must link with the "libz.a" library produced by zlib. (See item1 above). cc -o myprog myprog.c -I \ libmfhdf.a libdf.a libjpeg.a libz.a Note, the order of the libraries is important. Also, this method of compression currently has several known bugs when used on a 64-bit architecture (DEC Alpha processors, Cray machines, and SGI Power Challenge machines in 64-bit "mode"). . Unified configuration of library Both sides of the library now use the same configure script and can be configured uniformly through one makefile fragment. Please see the top-level INSTALL file in the distribution for further details. . I/O performance improvement This version of the distribution also has preliminary support for file page buffering. Note that is a *Beta* release and is not supported officially. As such it is is provided as is. The file page buffering allows the file to be mapped to user memory on a per page basis i.e a memory pool of the file. With regards to the file system, page sizes can be allocated based on the file system page-size or if the user wants in some multiple of the file system page-size. This allows for fewer pages to be managed along with accommodating the users file usage pattern. Please see the documentation in 'release_notes/page_buf.txt'. We have also reduced the memory requirements for several of the internal HDF library data structures, for greater efficiency. 4. Functions added . Fortran interface functions added for the set external path features. They are hxscdir and hxsdir. See the man page of HXsetcreatedir(3) and HXsetdir(3) for detail. . SDsetdimval_comp -- sets backward compatibility mode for a dimension. The default mode is compatible in HDF4.0b2, and will be incompatible in HDF4.1. See the man page of SDsetdimval_comp(3) for detail. . SDisdimval_bwcomp(dimid) -- gets the backward compatibility mode of a dimension. See the man page of SDisdimval_bwcomp(3) for detail. 5. SGI Power Challenge running IRIX6.1 is now supported Power Challenge is now supported, both in the native 64-bit and the 32-bit objects modes. Note that the Power Challenge native 64 bits objects use 64 bits long integers, users should be careful when using the netcdf interface. They should declare their variables as "nclong", not "long". 6. Pablo available This version of the distribution has support to create an instrumented version of the HDF library(libdf-inst.a). This library along the Pablo performance data capture libraries can be used to gather data about I/O behaviour and procedure execution times. Please see the documentation release_notes/Pablo.txt in the distribution for further details. 7. Platforms tested HDF4.0b2 has been tested on the following systems: SunOS 4.1.3, SunOS 5.3 and 5.4(Solaris 2.3 and 2.4), Linux_a.out, Linux_elf, SGI/IRIX5.2, SGI/IRIX5.3, SGI Power Challenge/IRIX6.1 (32- and 64-bit), HP/UX 9.01, IBM RS6000/AIX, Cray C90, Cray YMP, DEC alpha/UNIX (OSF), DecStation/MIPSEL (ncdump doesn't work), Free BSD 2.0, Solaris_x86, Convex Exemplar/HPUX, and CM5 parallel I/O. See the INSTALL file at the top level of HDF4.0b2 for more details. 8. Changes in release notes The directory release_notes/ contains writeups for the alpha and beta releases of HDF4.0. Those files can be used as temporary documents for HDF4.0 before the official documentation is available. Newly added: ABOUT_4.0b2, Pablo.txt, dimval.txt, and page_buf.txt Files changed: bug_fixed.txt and parallel_CM5.txt. AOUBT_4.0.alpha is also included. 9. Fixes and Known problems Problems fixed: . To avoid conflicts with C++, internal structures' fields which were named 'new' have been renamed. . Maximum number of fields in a vdata now is decided by VSFIELDMAX. . Vshow and hdp are fixed. Now they can handle as many fields as defined by VSFIELDMAX. . Fixed platform number subclass problem when external data file was in Little_endian format. . A file hdf/src/hlimits.h has been added to hold definitions for maximum number of open files and other limits. . Miscelianeous fixes Known problems: . Hfidinquire not included in binaries . Gzip doesn't work on 64-bit machines. . Currently there is a problem in appending data to compressed objects. . Hfidinquire is in the source code, but it is not included in the pre-compiled code. If your program uses Hfidinquire, you need to re-compile libdf.a. %%%4.0b1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT HDF4.0 Beta 1 July 25, 1995 CONTENTS 1. New features in the HDF4.0 Beta 1 release 2. Bugs fixed and known problems 3. Platforms tested 4. Installation of HDF4.0 Beta 1 on WindowsNT/95 5. Known problems in compilation, testing and installation of HDF4.0b1 6. Installing without FORTRAN support 1. New features in HDF4.0 Beta 1 release o Auto configuration It is now possible to automatically configure and build both the HDF library and netCDF library with one command. See the README and the INSTALL files at the top level of HDF4.0beta1 for detailed instructions on configuring and installation. o Multi-file Annotation Interface (ANxxx) The multi-file annotation Interface is for accessing file labels and descriptions, and object labels and descriptions. It allows users to keep open more than one file at a time, and to access more than one annotation at a time. It also allows multiple labels and multiple descriptions to be applied to an HDF object or HDF file. A draft of the documentation for this interface is in ./mf_anno.txt. o Multi-file Raster Image (GRxxx) interface The new Generic Raster (GR) interface provides a set of functions for manipulating raster images of all kinds. This interface allows users to keep open more than one file at a time, and to "attach" more than one raster image at a time. It supports a general framework for attributes within the RIS data-model, allowing 'name = value' style metadata. It allows access to subsamples and subsets of images. HDF4.0beta1 includes a C interface only. The Fortran interface will be available in the next release. A draft of the documentation for this interface is in ./mf_ris.txt. o New Compression Algorithms and interface A new low-level compression interface has been added to HDF which allows any data-object to be compressed using a variety of algorithms. Currently only two compression algorithms are supported: Run-Length Encoding (RLE) and adaptive Huffman. A draft of the documentation for this interface is in ./compression.txt o JPEG Group v5b library HDF Version 4.0 libraries now use v5 of the Independent JPEG Group (IJG) JPEG file access library. For more details about JPEG library see ./JPEG_v5b.txt The JPEG library will need to be linked with a user's applications whether they are compressed with JPEG or not. For example on a SUN SPARC, if the .h files are in the directory "incdir", and all libraries are in "libdir," the following command should be used to compile a C program "myprog.c": cc -DSUN -DHDF -Iincdir myprog.c libdir/libnetcdf.a \ libdir/libdf.a /libdir/libjpeg.a -o myprog or cc -DSUN -DHDF -Iincdir myprog.c -L libdir -lnetcdf \ -ldf -ljpeg -o myprog Note that the order is important: libnetcdf.a must occur first, then libdf.a, and then libjpeg.a. For FORTRAN programs, use command line: f77 -o myprogf myprogf.f libdir/libnetcdf.a \ libdir/libdf.a libdir/libjpeg.a or f77 -o myprogf myprogf.f -L libdir -lnetcdf -ldf -ljpeg Note that the order is important: libnetcdf.a, then libdf.a and then libjpeg.a. o Compression for HDF SDS (not completely working) Work is almost complete on the addition of two new compression functions to the SD interface. One function, which still has some known bugs, will allow users to compress a scientific dataset using any of several compression methods. Initially two schemes, RLE encoding and an adaptive Huffman compression algorithms, will be available. A second function is available for storing a scientific dataset using integers whose size is any number of bits between 1 and 32 (instead of being restricted to 8, 16 or 32-bit sizes). A draft of the documentation for these functions is in ./comp_SDS.txt o External Path Handling New functions have been added to allow applications to specify directories to create or search for external files. More explanation can be found in: ./external_path.txt. o Parallel I/O for the CM5 An extension using the parallel I/O facilities on a CM5 has been added to the SDS interface. Initial tests have resulted in about 25 MBytes/second I/O throughput using the SDA (Scalable Disk Array) file system. The library provides interfaces for both C* and CMF programming languages. See: ./parallel_CM5.txt for details. o HDF dumper Hdp is a command line utility designed for quick display of contents and data of HDF3.3 objects, RIS, SDS, Vdata, and Vgroup. It can list the contents of hdf files at various levels with different details. It can also dump the data of one or more specific objects in the file. See: ./hdp.txt for details. Currently hdp works on SunOS and LINUX only. 2. Bugs fixed and known problems Several bugs or problems, such as failure in setting and getting scales for unlimited dimensions, missing Fortran version of VSQxxxx functions, failure in defining more than 36 fields in Vdatas, etc. were fixed in this beta release. For more details about fixed and un-fixed bugs and problems please see: ./bug_fixed.txt. 3. HDF4.0 Beta 1 has been tested on the following systems: SunOS 4.1.3, SunOS 5.3 (Solaris 2.3), Linux, SGI/IRIX5.3, SGI Power Challenge/IRIX6.0 (32-bit mode only), HP/UX 9.01, IBM RS6000/AIX (C only), C3880/ConvexOS,11.0, CM5, Cray C90, DEC alpha/OSF (C only), DecStation/MIPSEL (C only), Windows NT, Free BSD 2.0, and Convex Exemplar/HPUX. See the INSTALL file at the top level of HDF4.0b1 for more details. 4. Installing HDF4.0 Beta 1 on Windows NT and Windows 95 Since Windows NT, Windows '95 (Chicago) and Windows 3.1 (with the Win 32s extensions) all are designed to run the same 32-bit code, we have decided to support only 32-bit libraries and code on the MS-Windows platform. To build the HDF, JPEG and netCDF libraries and utilities, follow the instructions listed in: ./install_winNT.txt. 5. Known problems in compilation,testing and installation of HDF4.0b1: . On SunOS, tsdmmsf.f in hdf/test/fortest fails . On C90, mfhdf/fortran test doesn't configure correctly. The adaptive Huffman algorithm does not work right either. Due to this problem, when running hdf/test/testhdf the test module comp prints out error messages. . On DecStation/MIPSEL, ncdump gives a segmentation fault. . The Fortran interface has not been tested on IBM RS6000, DecStation/MIPSEL, and Dec Alpha/OSF because a Fortran compiler is not available on those machines in our group. . If the external element test in hdf/test/testhdf fails and there is no subdirectory "testdir" in hdf/test/, create one via "mkdir" and run the test again. (The "testdir" should have been created by "make". But the "make" in some old systems does not support the creation commands.) . A bug was found in the "mfhdf.h" file late in the testing stage. The error occurred in the CM5 parallel I/O extension only. The fix is not included in the source release, but it is available in the binary release for the CM5 version. Please retrieve the fix there. . SDsetcompress does not work correctly. . Hdp now works on SunOS and LINUX only. Commands dumpsds, dumpvd and dumpvg have different problems on other platforms. See mfhdf/dumper/README for more details. 6. Installing without FORTRAN support: . On UNIX systems without a FORTRAN system installed, the config/mh- will need to have the 'FC' macros defined to "NONE" for correct configuration and the target "allnofortran" should be used to build the distribution, instead of the target "all". %%%4.0alpha%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABOUT_4.0.alpha This file was last updated: November 8, 1994 INTRODUCTION This is a preliminary document describing the differences between HDF4.0 (Alpha) and HDF3.3r3. It is written for people who already use HDF3.3r3 or earlier versions and wish to be HDF4.0 Alpha testers. Special emphasis is given to changes that might be required in existing code. The files ABOUT_3.3r3, ABOUT_3.3r2 and ABOUT_3.3r1 which were released along with previous releases contain detailed descriptions of HDF3.3. Those files can be found in this directory. First-time HDF users are encouraged to read the FAQ file in directory HDF/ for more information about HDF and where to get HDF documentation. If you have any questions or comments, please send them to: hdfhelp@ncsa.uiuc.edu. Contents 1. Changes in include file names for FORTRAN programs 2. New features supported by HDF4.0 ANSI C only n-bit SDS Reading CDF files Parallel I/O interface on CM5 Installing HDF Libraries With CM5 Parallel IO Extension 3. Changes in HDF utilities hdp -- HDF dumper ristosds hdfls hdfpack hdfunpac 4. Platforms tested 5. Limits of the current release 1. Changes in include file names for FORTRAN programs In hdf/ there are two files for FORTRAN programs to include the values and functions defined in HDF. They were originally named as constant.i and dffunct.i. The extension .i causes problems on some machines since *.i is used by cc as an "intermediate" file produced by the cpp preprocessor. In HDF 4.0 dffunct.i is changed to dffunct.inc, and constant.i is changed to hdf.inc. Users' existing FORTRAN application programs need to make the corresponding changes, if they include the .i files, in order to compile with HDF4.0. 2. New Features supported by HDF4.0 ANSI C only As previously noted in the HDF newsletters, the next major release of the HDF library will compile only with ANSI C compilers. Backward compatibility will be provided through an ANSI->K&R filter which will need to be run on each source file in order to convert the ANSI style code into K&R style code. Currently the entire HDF library has been converted to ANSI code, but the filter is not yet in place. Future alpha releases may have the code filter in place, but it will definitely be in place for the first beta release. This shift to ANSI C compliance has been accompanied by a large cleanup in the source code. An attempt has been made to remove all warnings and informational messages that the compilers on supported platforms occasionally emit, but this may not be completely clean for all user sites. n-bit SDS Support for n-bit integer data has been incorporated into this release of the HDF library. The n-bit support is currently incorporated into the call to SDsetnbitdataset, future releases may incorporate high level access through the DFSD interface also. Access to the data stored in an n-bit data item is transparent to the calling program. For example to store an unsigned 12-bit integer (which is represented unpacked in memory as an unsigned 16-bit integer), with no sign extension or bit filling and which starts at bit 14 (counting from the right with bit zero being the lowest) the following setup & call would be appropriate: intn sign_ext = FALSE; intn fill_one = FALSE; intn start_bit= 14; intn bit_len = 12; SDsetnbitdataset(sds_id,start_bit,bit_len,sign_ext,fill_one); Further reads and writes to this dataset would transparently convert the 16-bit unsigned integers from memory into 12-bit unsigned integers stored on disk. The corresponding FORTRAN function name is sfsnbit which takes the same parameters in the same order. A breakdown of the parameters to the SDsetnbitdataset call is as follows: int32 sds_id - The id of a scientific dataset returned from SDcreate or SDselect. intn start_bit - This value determines the bit position of the highest end of the n-bit data to write out. Bits in all number- types are counted from the right starting with 0. For example, in the following bit data, "01111011", bits 2 and 7 are set to 0 and all the other bits are set to one. intn bit_len - The number of bits in the n-bit data to write, including the starting bit, counting towards the right (i.e. lower bit numbers). For example, starting at bit 5 and writing 4 bits from the following bit data, "01111011", would write out the bit data, "1110", to the dataset on disk. intn sign_ext - Whether to use the top bit of the n-bit data to sign-extend to the highest bit in the memory representation of of the data. For example, if 9-bit signed integer data is being extracted from bits 17-25 (nt=DFNT_INT32, start_bit=25, bit_len=9, see below for full information about start_bit & bit_len parameters) and the bit in position 25 is a 1, then when the data is read back in from the disk, bits 26-31 will be set to a 1, otherwise bit 25 will be a zero and bits 26-31 will be set to 0. This bit-filling takes higher precedence (i.e. is performed after) the fill_one (see below) bit-filling. intn fill_one - Whether to fill the "background" bits with 1's or 0's. The "background" bits of a n-bit dataset are those bits in the in-memory representation which fall outside of the actual n-bit field stored on disk. For example, if 5 bits of an unsigned 16-bit integer (in-memory) dataset located in bits 5-9 are written to disk with the fill_one parameter set to TRUE (or 1), then when the data is read back into memory at a future time, bits 0-4 and 10-15 would be set to 1. If the same 5-bit data was written with a fill_one value of FALSE (or 0), then bits 0-4 and 10-15 would be set to 0. This setting has a lower precedence (i.e. is performed first) than the sign_ext setting. For example, using the sign_ext example above, bits 0-16 and 26-31 will first be set to either 1 or 0 based on the fill_one parameter, and then bits 26-31 will be set to 1 or 0 based on bit-25's value. Reading CDF files With HDF 4.0 limited support for reading CDF files was added to the library. This support is still somewhat in the development stage and is therefore limited. To begin with, unlike the netCDF merger, the CDF API is not supported. Rather, the SD and netCDF APIs can be used to access information pulled out of CDF files. The type of files supported are limited to CDF 2.X files. The header information is different between CDF 1.X and 2.X files. In addition, all of the files must be stored as single-file CDFs in network encoding. If there is user demand, and support, the types of CDF files readable may be increased in the future. Parallel I/O interface on CM5 An extension using the parallel IO in CM5 is added to the SDS interface. Initial tests have resulted in about 25 MBytes/second IO throughput using the SDA (Scalable Disk Array) file system. The library provides interfaces for both C* and CMF programming languages. Read the section "Installing HDF Libraries With CM5 Parallel IO Extension" below for specific installation instructions. Users will find some examples in the directory mfhdf/CM5/Examples. Please send comments, bugs reports, etc. to acheng@ncsa.uiuc.edu. The parallel I/O interface stores scientific datasets in external files. New options have been added to hdfls and hdfpack to handle them. A new utility program, hdfunpac, is created for external files handling too. See the man pages for details. Installing HDF Libraries With CM5 Parallel IO Extension The current alpha version requires two major steps to install the HDF libraries (libdf.a and libnetcdf.a). Works are in progress to make it simpler in the production release. Bear with us for now. 1) Compile and install the ordinary HDF libraries, include files and utilities according to the instructions for a Sun Microsystem machine. 2) To make the HDF library with CM5 parallel IO extension: There are two new libraries, libdfcm5.a and libnetcdfcm5.a that are similar to libdf.a and libnetcdf.a. For libdf.a cd hdf cp MAKE.CM5 Makefile cp src/Makefile.CM5 src/Makefile make libdf # create the parallel IO libdf.a # to install it in /usr/local/lib cp src/libdf.a /usr/local/lib/libdfcm5.a ranlib /usr/local/lib/libdfcm5.a For libnetcdf.a cd mfhdf # edit CUSTOMIZE to use "gcc" as the CC compiler # and add "-DCM5" to the CFLAGS variable. ./configure (cd libsrc; make ) # compile the library # to install it in /usr/local/lib cp libsrc/libnetcdf.a /usr/local/lib/libnetcdfcm5.a ranlib /usr/local/lib/libnetcdfcm5.a 3. Changes in HDF utilities hdp -- HDF dumper A new utility hdp is under development to list contents of HDF files and to dump data of HDF objects. A prototype is included in HDF4.0 Alpha for users to play with and comment on. Development will continue based on users' feedback. More information is contained in HDF/HDF4.0.alpha/mfhdf/dumper/README. ristosds Ristosds now converts several raster images into a 3D uint8, instead of float32, SDS. hdfls New options to recognize external elements. hdfpack New options to pack external elements back into the main file. hdfunpac New utility program to unpack scientific datasets to external elements. Can be used to prepare for CM5 parallel IO access. 4. HDF 4.0 Alpha has been tested on the following machines Platform 'base library' HDF/netCDF --------------------------------------------------------------- Sun4/SunOs X X Sun4/SOLARIS X X IBM/RS6000 X X SGI/IRIX4 X X Convex/ConvexOS * X X Cray Y-MP/UNICOS X X Cray/C90 X X NeXT/NeXTSTEP X X HP/UX 9.01 X X DecStation/MIPSEL X X IBM PC - MSDOS ** *** IBM PC - Windows 3.1 ** *** IBM PC - Windows NT X X DEC Alpha/OSF X X CM5/ X X Fujitsu VP/UXPM X Intel i860 X Mac/MacOS VMS * When compiling the mfhdf section of the library on a Convex3 you will need to set the environment variable 'MACHINE' to 'c3' before running the configure script. ** There is no FORTRAN support for either PC version of HDF4.0 Alpha *** The netCDF half of the HDF/netCDF merger is not working correctly, but the multi-file SD interface is working correctly. 5. Limits of the current release Sometimes it is important for HDF users to be aware of certain limits in using HDF files and HDF libraries. This section is aimed at HDF applications programmers and reflects upperbounds as of HDF 4.0. Limits that are #define'd are fully capitalized and the file where the symbol is defined is given in parentheses at the end of the sentence. If the #define's are changed in order to meet the needs of an application, it is important to make sure that all other users, who would share the HDF library and the hdf files of the application, are aware of the changes. If a limit has no #define, the size of the maximum storage allocated for that item is given; it would, generally, require a large amount of modification of the HDF library to change. If a limit is listed as a number type (e.g. int16) then it refers to the largest number that can be represented using that type. That is: int16 -- 32,767 int32 -- 2,147,483,647. H-Level Limits -------------- MAX_FILE files open at a single time (hfile.h) MAX_ACC access records open at a single time (hfile.h) int16 total tags (fixed) int32 max length and offset of an element in an HDF file (fixed) Vgroup Limits ------------- MAX_VFILE vset files open at a single time (hdf.h) int16 elements in a Vgroup (fixed) VGNAMELENMAX max length of a Vgroup name or class (vg.h) Vdata Limits ------------ MAX_VFILE vset files open at a single time (hdf.h) VSFIELDMAX fields in a Vdata (hdf.h) FIELDNAMELENMAX characters in a single field name (hdf.h) MAX_ORDER max field order in a Vdata (hdf.h) VSNAMELENMAX max length of a Vdata name or class (hdf.h) int16 max width in bytes of a Vdata record. (fixed) Vdatas can have a maximum field width of MAX_FIELD_SIZE bytes. (hdf.h) Raster Images ------------- int32 width or height of a raster image. (fixed) SD Limits --------- MAX_VAR_DIMS dimensions per dataset (defined in netcdf.h included by mfhdf.h) int32 maximum dimension length (fixed) MAX_NC_ATTRS attributes for a given object (defined in netcdf.h included by mfhdf.h) MAX_NC_NAME maximum length of a name of a dataset (defined in netcdf.h included by mfhdf.h) Other Conventions / Issues -------------------------- Some utility programs (e.g. ncgen) expect dataset names to be composed of only alphanumeric, '-' and '_' characters. hdf4-hdf4.3.1/release_notes/INSTALL000066400000000000000000000077271503061704500167250ustar00rootroot00000000000000************************************************************************* * Installation Instructions for HDF4 * ************************************************************************* Instructions for the Installation of HDF4 Software ================================================== This file provides instructions for installing the HDF4 software. For help with installing, questions can be posted to the HDF Forum or sent to the HDF Helpdesk: HDF Forum: https://forum.hdfgroup.org/ HDF Helpdesk: https://hdfgroup.atlassian.net/servicedesk/customer/portals CONTENTS -------- 1. Obtaining HDF4 2. Third-party Software Requirements 2.1. Optional Szip Compression Library 3. HDF4 Source Code and Precompiled Binaries 3.1. Build and Install HDF4 C and Fortran Libraries and tools with CMake 4. Quick Start Presets ***************************************************************************** 1. Obtaining HDF4 The latest supported public releases of HDF4 are available on https://github.com/HDFGroup/hdf4. 2. Third-party Software Requirements JPEG Distribution Release 6b or later. The source code can be downloaded from "https://www.ijg.org/filesz". ZLIB 1.1.4 or later. The software can be downloaded from: "https://github.com/madler/zlib.git" 2.1. Optional Szip Compression Library HDF4 may be configured to use the Szip compression library. The open source software can be downloaded from: "https://github.com/MathisRosenhauer/libaec.git" 3. HDF4 Source Code and Precompiled Binaries The HDF Group provides source code and pre-compiled binaries from the HDF4 github releases page: https://github.com/HDFGroup/hdf4/releases 3.1. Build and Install HDF4 C and Fortran Libraries and tools with CMake see the release_notes/INSTALL_CMake.txt file. 4. Quick Start Presets You want to build HDF4 with CMake or use an installed HDF4 binary with CMake, but there are so many options to consider. 4.1. Solution CMake introduced presets in version 3.19. HDF Group provides a file in the source, CMakePresets.json, requiring CMake 3.25 or higher. This file is in the HDF4 library source as well as the HDF4Examples source of the installed binary. The library source file will build HDF4 with the options for building a typical shared library with the common languages for a platform. The features include building the tools, examples, and the shared and static libraries. The HDF4Examples source file will build the examples with the components that were enabled by the options selected when the install HDF4 library was built. The typical library built by HDF and available from the HDF4 Releases page include C, Java, and Fortran compilers along with the tools, examples, and the shared and static libraries. 4.2. Discussion The CMakePresets.json file is located in the root directory of the HDF4 source and the HDF4Examples source of the installed binary. It is from here you will execute the cmake command to build HDF4. The following example shows how to build HDF4 or examples with the CMakePresets.json file: - change directory to the source folder - execute "cmake --workflow --preset ci-StdShar- --fresh" where "" is GNUC, MSVC, Clang The above example will create a "build" folder in the source parent directory, which will contain the results of the build, including installation package files when the library is built. 4.3. Customization See the HDF4 documentation for more on presets, especially the presets section in: - release_notes/INSTALL_CMake.txt file 4.4. See Also See CMake documentation for details on presets: - https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html hdf4-hdf4.3.1/release_notes/INSTALL_Auto.txt000066400000000000000000000123611503061704500205210ustar00rootroot00000000000000************************************************************************* * Installation Instructions for HDF4 using Autotools * ************************************************************************* Table of Contents Section I. Preconditions Section II: Unix and Mac OSX Configuration and Build Section III: Using HDF/MFHDF Libraries with the netCDF Library Section IV: Windows Configuration and Build ************************************************************************ For help with installing, questions can be posted to the HDF Forum or sent to the HDF Helpdesk: HDF Forum: https://forum.hdfgroup.org/ HDF Helpdesk: https://hdfgroup.atlassian.net/servicedesk/customer/portals ======================================================================== I. Preconditions ======================================================================== Obtaining HDF4 source code 1. Create a directory for your development; for example, "myhdfstuff". 2. Obtain HDF4 source from Github development branch: https://github.com/HDFGroup/hdf4 last release: https://github.com/HDFGroup/hdf4/releases/latest hdf-4_3_"X".tar.gz or hdf-4_3_"X".zip and put it in "myhdfstuff". Uncompress the file. There should be a hdf-4.3."X" folder. ======================================================================== II. Unix and Mac OSX Configuration and Build ======================================================================== See RELEASE.txt in the release_notes/ directory for the list of platforms tested for this release. Before You Start: 1) Make sure that the ZLIB and JPEG libraries are installed on your system. 2) Optional: Install the Szip version 2.1 library (you may use Szip 2.0 binaries). 3) Extract the source from the hdf-X.Y.Z.tar file and change directory to hdf-X.Y.Z. 4) Fortran Notes: 4.a) g77 may require compiler flag, FFLAGS, "-fno-second-underscore" To Configure: 4) Use the configure command in the top level HDF4 directory hdf-X.Y.Z: ./configure --with-zlib=/path_to_ZLIB_install_directory --with-jpeg=/path_to_JPEG_install_directory [--with-szlib=/path_to_SZIP_install_directory] --prefix=/path_to_HDF4_install_directory * Please note that when the szlib option is not used, the Szip library will not be configured in and Szip compression will not be enabled. * If your system has the ZLIB and/or JPEG libraries installed under a system library directory (such as /usr/lib), configure will automatically find the library. In this case, the corresponding configure flag may be omitted. * Note that --prefix defines where the installation path is. The default is set as /hdf4. To Build and Test: 5) To build the library: gmake >& gmake.out 6) To build and run the tests: gmake check >& check.out To Install: 7) To install the HDF4 library and tools: gmake install 8) To install C and Fortran examples: gmake install-examples 9) To test the installation: gmake installcheck 10) By default, the current configuration uses vendor compilers; to use another compiler, run the following commands before running configure: setenv CC "foo -flags" setenv F77 "fffoo -flags" See the configure help page (configure --help) for a list of environment variables that have an affect on building the library. 11) You may build HDF4 in a directory other than hdf-X.Y.Z by using the "srcdir" option. Simply create a build directory and type: /configure ... where "..." are your configuration options. ======================================================================== III. Using HDF/MFHDF Libraries with the netCDF Library ======================================================================== To use the HDF/MFHDF libraries (libdf.a, libmfhdf.a) with the netCDF library (libnetcdf.a), the HDF4 distribution must be configured with the --disable-netcdf configuration flag. When this flag is used, the HDF versions of the C netCDF functions (as of netCDF version 2.3.2) are renamed from ncxxx to sd_ncxxx, and HDF Fortran netCDF wrappers are disabled to avoid name clashes with the netCDF C and Fortran functions from libnetcdf.a. Please report all problems to help@hdfgroup.org. ======================================================================== IV. Windows Configuration and Build ======================================================================== See RELEASE.txt in the release_notes/ directory for the list of platforms tested for this release. We now recommend that users build, test, and install HDF4 using CMake. Instructions for building and testing HDF4 using CMake can be found in the INSTALL_CMake.txt file found in this folder. For instructions on building and testing an application with HDF4, see the USING_HDF4_CMake.txt file found in this folder. Users who want to build and run an application with HDF4 in Visual Studio without using CMake should consult the USING_HDF4_VS.txt file. hdf4-hdf4.3.1/release_notes/INSTALL_CMake.txt000066400000000000000000001362511503061704500205760ustar00rootroot00000000000000************************************************************************* * Build and Install HDF4 C and Fortran Libraries and tools with CMake * ************************************************************************* Table of Contents Section I: Preconditions Section II: Quick Step Building HDF4 Libraries with CMake Script Mode Section III: Quick Step Building HDF4 Libraries with CMake Command Mode Section IV: Further Considerations Section V: Options for building HDF4 Libraries with CMake Command Line Section VI: CMake option defaults for HDF4 Section VII: User Defined Options for HDF4 Libraries with CMake Section VIII: Using CMakePresets.json for Compiling Section IX: Using the Library Section X: Autotools Configuration and Build ************************************************************************ ======================================================================== I. Preconditions ======================================================================== Obtaining HDF4 source code 1. Create a directory for your development; for example, "myhdfstuff". 2. Obtain HDF4 source from Github development branch: https://github.com/HDFGroup/hdf4 last release: https://github.com/HDFGroup/hdf4/releases/latest hdf-4_3_"X".tar.gz or hdf-4_3_"X".zip and put it in "myhdfstuff". Uncompress the file. There should be a hdf-4.3"X" folder. CMake version 1. We suggest you obtain the latest CMake from the Kitware web site. The HDF 4.3"X" product requires a minimum CMake version 3.18, where "X" is the current HDF4 release version. If you are using VS2022, the minimum version is 3.21. CMakePresets requires CMake 3.25. Note: To change the install prefix from the platform defaults initialize the CMake variable, CMAKE_INSTALL_PREFIX. Users of build scripts will use the INSTALLDIR option. ======================================================================== II. Quick Step Building HDF4 Libraries with CMake Script Mode ======================================================================== This short set of instructions is written for users who want to quickly build the HDF4 C and Fortran shared libraries and tools from the HDF4 source code package using the CMake tools. This procedure will use the default settings in the config/cmake/cacheinit.cmake file. The HDF Group recommends using the presets process to build HDF4. NOTE: if you are using CMake 3.25 or later, you can use the presets process. The CMakePresets.json file in the source directory will configure, build, test, and package HDF4 with the same options that are set in the cacheinit.cmake file. In addition, it will get the optional files listed below that are needed, from the appropriate repositories. See Section VIII: Using CMakePresets.json for compiling ------------------------------------------------------------------------- ------------------------------------------------------------------------- Individual files needed as mentioned in this document ------------------------------------------------------------------------- CMake build script from https://github.com/HDFGroup/hdf4/tree/master/config/cmake/scripts: CTestScript.cmake -- CMake build script Configuration files from https://github.com/HDFGroup/hdf4/tree/master/config/cmake/scripts: HDF4config.cmake -- CMake configuration script HDF4options.cmake -- CMake configuration options script External compression szip, jpeg, and zlib libraries: JPEG "https://www.ijg.org/filesz"/jpegsrc.v9e.tar.gz" ZLIB "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz" ZLIBNG "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.2.2.tar.gz" LIBAEC "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3/libaec-1.1.3.tar.gz" ------------------------------------------------------------------------- ------------------------------------------------------------------------- Build scripts for windows or linux ----------------------------------------------- To build HDF4 with the SZIP, ZLIB and JPEG external libraries you will need to: 1. Change to the development directory "myhdfstuff". 2. Download/copy the individual files mentioned above to "myhdfstuff". Do not uncompress the tar.gz files. 3. Change to the source directory "hdf-4.3.x". CTestScript.cmake file should not be modified. 4. Edit the platform configuration file, HDF4options.cmake, if you want to change the default build environment. The file is a compilation of the most used options and by commenting/uncommenting lines the options can easily be changed. 5. From the "myhdfstuff" directory execute the CTest Script with the following options: On 32-bit Windows with Visual Studio 2022, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2022 -C Release -VV -O hdf4.log On 64-bit Windows with Visual Studio 2022, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS202264 -C Release -VV -O hdf4.log On 32-bit Windows with Visual Studio 2019, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2019 -C Release -VV -O hdf4.log On 64-bit Windows with Visual Studio 2019, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201964 -C Release -VV -O hdf4.log On 32-bit Windows with Visual Studio 2017, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2017 -C Release -VV -O hdf4.log On 64-bit Windows with Visual Studio 2017, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201764 -C Release -VV -O hdf4.log On 32-bit Windows with Visual Studio 2015, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS2015 -C Release -VV -O hdf4.log On 64-bit Windows with Visual Studio 2015, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=VS201564 -C Release -VV -O hdf4.log On Linux and Mac, execute: ctest -S HDF4config.cmake,BUILD_GENERATOR=Unix -C Release -VV -O hdf4.log The supplied build scripts are versions of the above. The command above will configure, build, test, and create an install package in the myhdfstuff folder. It will have the format: HDF-4.3.NN-. On Unix, will be "Linux". A similar .sh file will also be created. On Windows, will be "win64" or "win32". If you have an installer on your system, you will also see a similar file that ends in either .exe (NSIS) or .msi (WiX). Notes on the command line options. The -S option uses the script version of ctest. The value for the -C option (as shown above, "-C Release") must match the setting for CTEST_CONFIGURATION_TYPE in the platform configuration file. The -VV option is for most verbose; use -V for less verbose. The "-O hdf4.log" option saves the output to a log file hdf4.log. 6. To install, "X" is the current release version On Windows (with WiX installed), execute: HDF-4.3."X"-win32.exe or HDF-4.3."X"-win64.exe By default this program will install the hdf4 library into the "C:\Program Files" directory and will create the following directory structure: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------cmake On Linux, change to the install destination directory (create it if doesn't exist) and execute: /myhdfstuff/HDF-4.3."X"-Linux.sh After accepting the license, the script will prompt: By default the HDF4 will be installed in: "/HDF-4.3."X"-Linux" Do you want to include the subdirectory HDF-4.3."X"-Linux? Saying no will install in: "" [Yn]: Note that the script will create the following directory structure relative to the install point: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------share On Mac you will find HDF-4.3"X"-Darwin.dmg in the myhdfstuff folder. Click on the dmg file to proceed with installation. After accepting the license, there will be a folder with the following structure: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------share By default the installation will create the bin, include, lib and cmake folders in the /HDF_Group/HDF/4.3."X" The depends on the build platform; Windows will set the default to: C:/Program Files/HDF_Group/HDF/4.3."X" Linux will set the default to: "myhdfstuff/HDF_Group/HDF/4.3."X" The default can be changed by adding ",INSTALLDIR=" to the "ctest -S HDF4config.cmake..." command. For example on linux: ctest -S HDF4config.cmake,INSTALLDIR=/usr/local/myhdf4,BUILD_GENERATOR=Unix -C Release -VV -O hdf4.log ======================================================================== III. Quick Step Building HDF4 C Static Libraries and Tools with CMake ======================================================================== Notes: This short set of instructions is written for users who want to quickly build just the HDF4 C static library and tools from the HDF4 source code package using the CMake command line tools. Avoid the use of drive letters in paths on Windows. Go through these steps: 1. Change to the development directory "myhdfstuff". 2. Uncompress the HDF4 source file 3. Create a folder "build" in the "myhdfstuff" directory. 4. Change into the "build" folder. 5. Configure the C library, tools and tests with one of the following commands: On Windows 32 bit cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF4_BUILD_TOOLS:BOOL=ON ..\hdf-4.3"X" On Windows 64 bit cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF4_BUILD_TOOLS:BOOL=ON ..\hdf-4.3"X" On Linux and Mac cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF4_BUILD_TOOLS:BOOL=ON ../hdf-4.3"X" where "X" is the current release version. 6. Build the C library, tools and tests with this command: cmake --build . --config Release 7. Test the C library and tools with this command: ctest . -C Release 8. Create an install image with this command: cpack -C Release CPackConfig.cmake 9. To install On Windows (with WiX installed), execute: HDF-4.3."X"-win32.msi or HDF-4.3."X"-win64.msi By default this program will install the hdf4 library into the "C:\Program Files" directory and will create the following directory structure: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------cmake On Linux, change to the install destination directory (create if doesn't exist) and execute: /myhdfstuff/build/HDF-4.3."X"-Linux.sh After accepting the license, the script will prompt: By default the HDF4 will be installed in: "/HDF-4.3."X"-Linux" Do you want to include the subdirectory HDF-4.3."X"-Linux? Saying no will install in: "" [Yn]: Note that the script will create the following directory structure relative to the install point: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------share On Mac you will find HDF-4.3."X"-Darwin.dmg in the build folder. Click on the dmg file to proceed with installation. After accepting the license, there will be a folder with the following structure: HDF_Group --HDF ----4.3."X" ------bin ------include ------lib ------share ======================================================================== IV. Further Considerations ======================================================================== 1. We suggest you obtain the latest CMake for windows from the Kitware web site. The HDF 4.3"X" product requires a minimum CMake version 3.18. If you are using VS2022, the CMake minimum version is 3.21. CMakePresets requires CMake 3.25. 2. HDF4 requires Zlib and JPEG. Szip (aka libaec) is optional: A. Download the binary packages and install them in a central location. For example on Windows, create a folder extlibs and install the packages there. Add the following CMake options: -DJPEG_LIBRARY:FILEPATH=some_location/lib/jpeg.lib -DJPEG_INCLUDE_DIR:PATH=some_location/include -DJPEG_USE_EXTERNAL:BOOL=OFF -DZLIB_LIBRARY:FILEPATH=some_location/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=some_location/include -DZLIB_USE_EXTERNAL:BOOL=OFF -DSZIP_LIBRARY:FILEPATH=some_location/lib/libszaec.lib -DSZIP_INCLUDE_DIR:PATH=some_location/include -Dlibaec_LIBRARY:FILEPATH=some_location/lib/libaec.lib -Dlibaec_INCLUDE_DIR:PATH=some_location/include -DSZIP_USE_EXTERNAL:BOOL=OFF where "some_location" is the full path to the extlibs folder. Also if the appropriate environment variable is set, the above options are not required; set(ENV{JPEG_ROOT} "some_location") set(ENV{ZLIB_ROOT} "some_location") set(ENV{SZIP_ROOT} "some_location") set(ENV{libaec_ROOT} "some_location") Note that if there is a problem finding the libraries, try adding the CMake variable CMAKE_FIND_DEBUG_MODE:BOOL=ON to the command line. B. Use source packages from an GIT server by adding the following CMake options: HDF4_ALLOW_EXTERNAL_SUPPORT:STRING="GIT" JPEG_GIT_URL:STRING="https://some_location/jpeg" JPEG_GIT_BRANCH="some_branch" ZLIB_GIT_URL:STRING="https://some_location/zlib" ZLIB_GIT_BRANCH="some_branch" SZIP_GIT_URL:STRING="https://some_location/szip" SZIP_GIT_BRANCH="some_branch" LIBAEC_GIT_URL:STRING="https://some_location/libaec" LIBAEC_GIT_BRANCH="some_branch" where "some_location" is the URL to the GIT repository and "some_branch" is a branch in the repository, usually the default. Also set CMAKE_BUILD_TYPE to the configuration type. C. Use source packages from a compressed file by adding the following CMake options: HDF4_ALLOW_EXTERNAL_SUPPORT:STRING="TGZ" JPEG_TGZ_NAME:STRING="jpeg_src.ext" ZLIB_TGZ_NAME:STRING="zlib_src.ext" LIBAEC_TGZ_NAME:STRING="libaec_src.ext" TGZPATH:STRING="some_location" where "some_location" is the URL or full path to the compressed file and ext is the type of compression file. Also set CMAKE_BUILD_TYPE to the configuration type during configuration. See the settings in the config/cmake/cacheinit.cmake file HDF uses for testing. D. Use original source packages from a compressed file by adding the following CMake options: JPEG_TGZ_NAME:STRING="jpeg_src.ext" JPEG_TGZ_ORIGPATH:STRING="some_location" LIBAEC_TGZ_NAME:STRING="szip_src.ext" LIBAEC_TGZ_ORIGPATH:STRING="some_location" ZLIB_TGZ_NAME:STRING="zlib_src.ext" ZLIB_TGZ_ORIGPATH:STRING="some_location" HDF4_ALLOW_EXTERNAL_SUPPORT:STRING="TGZ" where "some_location" is the URL and by setting JPEG_USE_LOCALCONTENT:BOOL=ON ZLIB_USE_LOCALCONTENT:BOOL=OFF LIBAEC_USE_LOCALCONTENT:BOOL=OFF or full path to the compressed file and ext is the type of compression file. Also set CMAKE_BUILD_TYPE to the configuration type during configuration. See the settings in the config/cmake/cacheinit.cmake file HDF uses for testing. The files can also be retrieved from a local path if necessary TGZPATH:STRING="some_location" by setting JPEG_USE_LOCALCONTENT:BOOL=ON ZLIB_USE_LOCALCONTENT:BOOL=ON LIBAEC_USE_LOCALCONTENT:BOOL=ON 3. If you are building on Apple Darwin platforms, you should add the following options: Compiler choice - use xcode by setting the ENV variables of CC Shared Fortran is not supported, build static: BUILD_SHARED_LIBS:BOOL=OFF Additional options: BUILD_JPEG_WITH_PIC:BOOL=ON CTEST_USE_LAUNCHERS:BOOL=ON CMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF 4. Windows developers should install NSIS or WiX to create an install image with CPack. Visual Studio Express users will not be able to package HDF4 into an install image executable. 5. Developers can copy the config/cmake/cacheinit.cmake file and alter the the settings for the developers' environment. Then the only options needed on the command line are those options that are different. Example using HDF default cache file: cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 16 2019" \ -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=OFF -DHDF4_ENABLE_EXAMPLES:BOOL=OFF \ -DCMAKE_BUILD_TYPE:STRING=Release .. 6. CMake uses a toolchain of utilities to compile, link libraries and create archives, and other tasks to drive the build. The toolchain utilities available are determined by the languages enabled. In normal builds, CMake automatically determines the toolchain for host builds based on system introspection and defaults. In cross-compiling scenarios, a toolchain file may be specified with information about compiler and utility paths. Variables and Properties Several variables relate to the language components of a toolchain which are enabled. CMAKE__COMPILER is the full path to the compiler used for . CMAKE__COMPILER_ID is the identifier used by CMake for the compiler and CMAKE__COMPILER_VERSION is the version of the compiler. The CMAKE__FLAGS variables and the configuration-specific equivalents contain flags that will be added to the compile command when compiling a file of a particular language. As the linker is invoked by the compiler driver, CMake needs a way to determine which compiler to use to invoke the linker. This is calculated by the LANGUAGE of source files in the target, and in the case of static libraries, the language of the dependent libraries. The choice CMake makes may be overridden with the LINKER_LANGUAGE target property. See the CMake help for more information on using toolchain files. To use a toolchain file with the supplied cmake scripts, see the HDF4options.cmake file under the toolchain section. Notes: CMake and HDF4 1. CMake support for HDF4 development should be usable on any system where CMake is supported. Please send us any comments on how CMake support can be improved on any system. Visit the Kitware site for more information about CMake. 2. Build and test results can be submitted to our CDash server: The CDash server for community submissions of hdf is at https://my.cdash.org. We ask that all submissions include the configuration information and contact information in the CTest Notes Files upload step. See the current reports on CDash for examples. Please follow the convention that "NIGHTLY" submissions maintain the same configuration every time. "EXPERIMENTAL" submissions can be expected to be different for each submission. 3. See the appendix at the bottom of this file for examples of using a ctest script for building and testing. Using a ctest script is preferred because of its flexibility. Notes: CMake in General 1. More information about using CMake can be found at the Kitware site at www.cmake.org. 2. CMake uses the command line; however, the visual CMake tool is available for the configuration step. The steps are similar for all the operating systems supported by CMake. 3. Setting the installation location from the command line at configure time a. Using the --install-prefix command line option, which is available since CMake version 3.21: cmake --install-prefix /my/folder/to/install/to .. b. Using -DCMAKE_INSTALL_PREFIX : cmake -DCMAKE_INSTALL_PREFIX=/my/folder/to/install/to .. c. Using the CMAKE_INSTALL_PREFIX environment variable, which is available since CMake version 3.29: CMAKE_INSTALL_PREFIX=/my/folder/to/install/to cmake .. ======================================================================== V. Options for Building HDF4 Libraries with the CMake Command Line ======================================================================== To build the HDF4 Libraries with CMake, go through these five steps: 1. Run CMake 2. Configure the cache settings 3. Build HDF4 4. Test HDF4 5. Package HDF4 (create install image) These five steps are described in detail below. ======================================================================== 1. Run CMake The visual CMake executable is named "cmake-gui.exe" on Windows and should be available in your Start menu. For Linux, UNIX, and Mac users the executable is named "cmake-gui" and can be found where CMake was installed. Another option is to use the presets file, CMakePresets.json, to configure, build, test, and package HDF4. See section VIII: Using CMakePresets.json for compiling for use of that file. You can create a CMakeUserPresets.json file to create a specific configuration for your environment. Note that Visual Studio and XCode can use the presets files. Specify the source and build directories. ***** Make the build and source directories different. ****** For example on Windows, if the source is at c:\MyHDFstuff\hdf4, then use c:\MyHDFstuff\hdf4\build or c:\MyHDFstuff\build\hdf4 as the build directory. RECOMMENDED: Users can perform the configuration step without using the visual cmake-gui program. We use the file cacheinit.cmake in the config/cmake source folder for our testing. This file enables all of the basic options and we turn specific options on or off for testing using the following command line within the build directory: cmake -C /config/cmake/cacheinit.cmake -G "" [-D] Where is * MinGW Makefiles * NMake Makefiles * Unix Makefiles * Ninja * Visual Studio 15 2017 * Visual Studio 15 2017 Win64 * Visual Studio 16 2019 * Visual Studio 17 2022 is: For installed SZIP/libaec: * SZIP_INCLUDE_DIR:PATH= * SZIP_LIBRARY:FILEPATH= * libaec_INCLUDE_DIR:PATH= * libaec_LIBRARY:FILEPATH= or * SZIP_ROOT:PATH= * libaec_ROOT:PATH= For installed ZLIB/ZLIBNG: * ZLIB_INCLUDE_DIR:PATH= * ZLIB_LIBRARY:FILEPATH= or * ZLIB_ROOT:PATH= For installed JPEG: * JPEG_INCLUDE_DIR:PATH= * JPEG_LIBRARY:FILEPATH= or * JPEG_ROOT:PATH= * :BOOL=[ON | OFF] is: # This is the CMakeCache file. ######################## # EXTERNAL cache entries ######################## set (CMAKE_INSTALL_FRAMEWORK_PREFIX "Library/Frameworks" CACHE STRING "Frameworks installation directory" FORCE) set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE) set (HDF_PACKAGE_NAMESPACE "hdf4::" CACHE STRING "Name for HDF package namespace" FORCE) set (HDF4_BUILD_EXAMPLES ON CACHE BOOL "Build HDF4 Library Examples" FORCE) set (HDF4_BUILD_JAVA ON CACHE BOOL "Build HDF4 Java" FORCE) set (HDF4_BUILD_UTILS ON CACHE BOOL "Build HDF4 Library Utilities" FORCE) set (HDF4_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE) set (HDF4_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE) set (HDF4_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE) set (HDF4_ALLOW_EXTERNAL_SUPPORT "TGZ" CACHE STRING "Allow External Library Building (NO GIT TGZ)" FORCE) set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) ######################## # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE) set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (HDF4_USE_ZLIB_NG OFF CACHE BOOL "Use zlib-ng library as zlib library" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) set (ZLIBNG_TGZ_NAME "2.2.4.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE) set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE) set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE) set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE) set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from GitHub repository" FORCE) set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE) set (JPEG_PACKAGE_NAME "jpeg" CACHE STRING "Name of JPEG package" FORCE) set (JPEG_TGZ_ORIGPATH "https://www.ijg.org/filesz" CACHE STRING "Use JPEG from original location" FORCE) set (JPEG_TGZ_NAME "jpegsrc.v9e.tar.gz" CACHE STRING "Use JPEG from original compressed file" FORCE) set (JPEG_USE_LOCALCONTENT ON CACHE BOOL "Use local file for JPEG FetchContent" FORCE) set (JPEG_GIT_URL "https://github.com/libjpeg-turbo/libjpeg-turbo.git" CACHE STRING "Use JPEG from TurboJPEG" FORCE) set (JPEG_GIT_BRANCH "jpeg-9e" CACHE STRING "" FORCE) #set (JPEG_GIT_URL "https://github.com/LuaDist/libjpeg.git" CACHE STRING "Use JPEG from ILG" FORCE) #set (JPEG_GIT_BRANCH "master" CACHE STRING "" FORCE) 2. Configure the cache settings 2.1 Visual CMake users, click the Configure button. If this is the first time you are running cmake-gui in this directory, you will be prompted for the generator you wish to use (for example on Windows, Visual Studio 14). CMake will read in the CMakeLists.txt files from the source directory and display options for the HDF4 project. After the first configure you can adjust the cache settings and/or specify the locations of other programs. Any conflicts or new values will be highlighted by the configure process in red. Once you are happy with all the settings and there are no more values in red, click the Generate button to produce the appropriate build files. On Windows, if you are using a Visual Studio generator, the solution and project files will be created in the build folder. On linux, if you are using the Unix Makefiles generator, the Makefiles will be created in the build folder. 2.2 Preferred command line example on Windows in c:\MyHDFstuff\hdf4\build directory: cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 16 2019" "-Ax64" \ -DHDF4_ENABLE_SZIP_SUPPORT:BOOL=OFF -DCMAKE_BUILD_TYPE:STRING=Release .. 2.3 On Windows, if you are using a Visual Studio Express version you must be sure that the following two options are correctly set/unset: HDF4_NO_PACKAGES:BOOL=ON HDF4_USE_FOLDERS:BOOL=OFF 3. Build HDF4 On Windows, you can build HDF4 using either the Visual Studio Environment or the command line. The command line can be used on all platforms; Windows, linux, Unix, and Mac. To build from the command line, navigate to your build directory and execute the following: cmake --build . --config {Debug | Release} NOTE: "--config {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release on Windows. 3.1 If you wish to use the Visual Studio environment, open the solution file in your build directory. Be sure to select either Debug or Release and build the solution. 3.2.1 The external libraries (zlib, szip, and jpeg) can be configured to allow building the libraries by downloading from a GIT repository. The option is 'HDF4_ALLOW_EXTERNAL_SUPPORT'; by adding the following configuration option: -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING="GIT" The options to control the GIT URL (config/cmake/cacheinit.cmake file) are: JPEG_GIT_URL:STRING="https://${git_url}/jpeg9e" JPEG_GIT_BRANCH="${git_branch}" ZLIB_GIT_URL:STRING="https://${git_url}/zlib" ZLIB_GIT_BRANCH="${git_branch}" SZIP_GIT_URL:STRING="https://${git_url}/szip" SZIP_GIT_BRANCH="${git_branch}" LIBAEC_GIT_URL:STRING="https://${git_url}/libaec" LIBAEC_GIT_BRANCH="${git_branch}" ${git_url} should be changed to your location and ${git_branch} is your branch in the repository. Also define CMAKE_BUILD_TYPE to be the configuration type. 3.2.2 Or the external libraries (zlib, szip, and jpeg) can be configured to allow building the libraries by using a compressed file. The option is 'HDF4_ALLOW_EXTERNAL_SUPPORT' and is enabled by adding the following configuration option: -DHDF4_ALLOW_EXTERNAL_SUPPORT:STRING="TGZ" The options to control the TGZ URL (config/cmake/cacheinit.cmake file) are: JPEG_TGZ_NAME:STRING="jpeg_src.ext" ZLIB_TGZ_NAME:STRING="zlib_src.ext" LIBAEC_TGZ_NAME:STRING="libaec_src.ext" TGZPATH:STRING="some_location" where "some_location/xxxx_src.ext" is the URL or full path to the compressed file and where ext is the type of the compression file such as .bz2, .tar, .tar.gz, .tgz, or .zip. Also define CMAKE_BUILD_TYPE to be the configuration type. NOTE: the file named by LIBAEC_TGZ_NAME is used to build SZIP. 4. Test HDF4 To test the build, navigate to your build directory and execute: ctest . -C {Debug | Release} NOTE: "-C {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release to match the build step on Windows. 5. Packaging HDF4 (create an install image) To package the build into a simple installer using WiX toolset or the NullSoft installer NSIS on Windows, or into compressed files (.tar.gz, .sh, .zip), use the CPack tool. To package the build, navigate to your build directory and execute; cpack -C {Debug | Release} CPackConfig.cmake NOTE: See note 8 of this document for NSIS information. See note 9 of this document for WiX information. Also, if you are using a Visual Studio Express version or want to disable the packaging components, set HDF4_NO_PACKAGES to ON (on the command line add -DHDF4_NO_PACKAGES:BOOL=ON) 6. The files that support building HDF4 with CMake are all the files in the config/cmake folder, the CMakeLists.txt files in each source folder, and CTestConfig.cmake. CTestConfig.cmake is specific to the internal testing performed by The HDF Group. It should be altered for the user's installation and needs. The cacheinit.cmake file settings are used by The HDF Group for daily testing. It should be altered/ignored for the user's installation and needs. 7. More information about using CMake can be found at the Kitware site, www.cmake.org. 8. Nullsoft Scriptable Install System The Nullsoft Scriptable Install System (NSIS) is an open source installation system. It was created by the WinAmp authors to distribute that application, but it is now a general-purpose system which anyone might use. NSIS installers recognize /S for silent installation and /D=dir to specify the "output directory", which is where the program will be installed. These options are case-sensitive, so be sure to type them in upper case. 9. WiX Toolset WiX--the Windows Installer XML toolset--lets developers create installers for Windows Installer, the Windows installation engine. See http://wixtoolset.org. ======================================================================== VI. CMake Option Defaults for HDF4 ======================================================================== In the options listed below, there are three columns of information: Option Name, Option Description, and Option Default. The config/cmake/cacheinit.cmake or CMakePresets.json file can override the following values. ---------------- General Build Options ------------------------------------- BUILD_SHARED_LIBS "Build Shared Libraries" ON BUILD_STATIC_LIBS "Build Static Libraries" ON BUILD_TESTING "Build HDF4 Unit Testing" ON ---------------- HDF4 Build Options ---------------------------------------- HDF4_BUILD_EXAMPLES "Build HDF4 Library Examples" OFF HDF4_BUILD_FORTRAN "Build FORTRAN support" OFF HDF4_BUILD_TOOLS "Build HDF4 Tools" ON HDF4_BUILD_UTILS "Build HDF4 Utilities" OFF HDF4_ENABLE_NETCDF "Build HDF4 versions of NetCDF-3 APIS" ON HDF4_BUILD_JAVA "Build Java HDF Library" OFF HDF4_BUILD_NETCDF_TOOLS "Build HDF4 versions of ncdump and ncgen" ON HDF4_BUILD_STATIC_TOOLS "Build Static Tools Not Shared Tools" OFF ---------------- HDF4 Folder Build Options --------------------------------- Defaults relative to $ HDF4_INSTALL_BIN_DIR "bin" HDF4_INSTALL_LIB_DIR "lib" HDF4_INSTALL_INCLUDE_DIR "include" HDF4_INSTALL_MODULE_DIR "mod" HDF4_INSTALL_CMAKE_DIR "cmake" if (MSVC) HDF4_INSTALL_DATA_DIR "." else () HDF4_INSTALL_DATA_DIR "share" HDF4_INSTALL_DOC_DIR "HDF4_INSTALL_DATA_DIR" HDF4_USE_GNU_DIRS "ON to use GNU Coding Standard install directory variables, OFF to use historical settings" OFF Defaults as defined by the `GNU Coding Standards` HDF4_INSTALL_BIN_DIR "bin" HDF4_INSTALL_LIB_DIR "lib" HDF4_INSTALL_INCLUDE_DIR "include" HDF4_INSTALL_MODULE_DIR "HDF4_INSTALL_INCLUDE_DIR/mod" HDF4_INSTALL_CMAKE_DIR "HDF4_INSTALL_LIB_DIR/cmake" HDF4_INSTALL_DATA_DIR "share" HDF4_INSTALL_DOC_DIR "HDF4_INSTALL_DATA_DIR/doc/hdf" ---------------- HDF4 Advanced Options --------------------- HDF4_ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF HDF4_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF HDF4_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF HDF4_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols" ON HDF4_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON HDF4_NO_PACKAGES "Do not include CPack Packaging" OFF HDF4_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF HDF4_USE_FOLDERS "Enable folder grouping of projects in IDEs." OFF HDF4_MSVC_NAMING_CONVENTION "Use MSVC Naming conventions for Shared Libraries" OFF HDF4_MINGW_STATIC_GCC_LIBS "Statically link libgcc/libstdc++" OFF if (APPLE) HDF4_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF if (WIN32) HDF_LEGACY_NAMING "Use Legacy Names for Libraries and Programs" OFF HDF4_ENABLE_NETCDF "Build HDF4 versions of NetCDF-3 APIS" ON HDF4_BUILD_DOC "Build documentation" OFF HDF4_ENABLE_DOXY_WARNINGS "Enable fail if doxygen parsing has warnings." OFF HDF4_USING_ANALYSIS_TOOL "Indicate that an analysis checker is used" ON ---------------- External Library Options --------------------- HDF4_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building" "NO" HDF4_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF JPEG_USE_EXTERNAL "Use External Library Building for JPEG" OFF JPEG_TGZ_ORIGPATH "Use JPEG from original location" "https://www.ijg.org/filesz" JPEG_TGZ_NAME "Use JPEG from original compressed file" "jpegsrc.v9e.tar.gz" JPEG_USE_LOCALCONTENT "Use local file for JPEG FetchContent" OFF if (HDF4_USE_ZLIB_NG) ZLIBNG_USE_EXTERNAL "Use External Library Building for ZLIBNG" OFF ZLIBNG_TGZ_ORIGPATH "Use ZLIBNG from original location" "https://github.com/zlib-ng/zlib-ng/releases/tag/2.2.2" ZLIBNG_TGZ_NAME "Use ZLIBNG from original compressed file" "2.2.2.tar.gz" else ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" OFF ZLIB_TGZ_ORIGPATH "Use ZLIB from original location" "https://github.com/madler/zlib/releases/download/v1.3.1" ZLIB_TGZ_NAME "Use ZLIB from original compressed file" "zlib-1.3.1.tar.gz" ZLIB_USE_LOCALCONTENT "Use local file for ZLIB FetchContent" ON HDF4_USE_ZLIB_STATIC "Find static zlib library" OFF SZIP_USE_EXTERNAL "Use External Library Building for SZIP" OFF if (HDF4_ENABLE_SZIP_SUPPORT) HDF4_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF LIBAEC_TGZ_ORIGPATH "Use LIBAEC from original location" "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" LIBAEC_TGZ_NAME "Use LIBAEC from original compressed file" "libaec-1.1.3.tar.gz" LIBAEC_USE_LOCALCONTENT "Use local file for LIBAEC FetchContent" ON HDF4_USE_LIBAEC_STATIC "Find static AEC library" OFF NOTE: The HDF4_USE_GNU_DIRS option is usually recommended for linux platforms, but may be useful on other platforms. See the CMake documentation for more details. ======================================================================== VII. User Defined Options for HDF4 Libraries with CMake ======================================================================== Support for User Defined macros and options has been added. The file UserMacros.cmake has an example of the technique. Replace the template code with your macro in the UserMacros.cmake file. Then enable the option to the CMake configuration, build and test process. ======================================================================== VIII: Using CMakePresets.json for Compiling ======================================================================== One problem that CMake users often face is sharing settings with other people for common ways to configure a project. This may be done to support CI builds, or for users who frequently use the same build. CMake supports two main files, CMakePresets.json and CMakeUserPresets.json, that allow users to specify common configure options and share them with others. CMake also supports files included with the include field. CMakePresets.json and CMakeUserPresets.json live in the project's root directory. They both have exactly the same format, and both are optional (though at least one must be present if --preset is specified). CMakePresets.json is meant to specify project-wide build details, while CMakeUserPresets.json is meant for developers to specify their own local build details. See CMake documentation for details: https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html HDF-provided CMakePresets.json ------------------------------- The CMakePresets.json provided by HDF requires CMake version 3.25, which supports package and workflow presets, and ninja build system. The top-level configuration group is intended to be a standard set of options to produce a package of shared and staic libraries and tools. Other configurations used for inheriting settings are in the included json file in "config/cmake-presets/hidden-presets.json". Available configurations presets can be displayed by executing: cmake -S --list-presets Using individual command presets (where is GNUC or MSVC or Clang): change directory to the hdf4 source folder cmake --preset ci-StdShar- cmake --build --preset ci-StdShar- ctest --preset ci-StdShar- cpack --preset ci-StdShar- Using the workflow preset to configure, build, test and package the standard configuration: change directory to the hdf4 source folder execute "cmake --workflow --preset ci-StdShar- --fresh" where is GNUC or MSVC or Clang Creating your own configurations -------------------------------- The quickest way is to copy CMakePresets.json to CMakeUserPresets.json and edit CMakeUserPresets.json configuration names from ci-* to my-*. Change the "configurePresets" section "inherits" field only for those that you have alternate options. Then change the "configurePreset" field entries in the "buildPresets", "testPresets", "packagePresets" sections to match your my-StdShar-. And finally the names settings in the "workflowPresets" steps will also need the ci-* to my-* change. For instance, to change the support files to use a local directory, edit CMakeUserPresets.json: ...... { "name": "my-base-tgz", "hidden": true, "inherits": "ci-base", "cacheVariables": { "HDF4_ALLOW_EXTERNAL_SUPPORT": {"type": "STRING", "value": "TGZ"}, "TGZPATH": {"type": "PATH", "value": "${sourceParentDir}/temp"} } }, { "name": "my-StdCompression", "hidden": true, "inherits": "my-base-tgz", "cacheVariables": { ...... { "name": "my-StdShar", "hidden": true, "inherits": "my-StdCompression", "cacheVariables": { ...... { "name": "my-StdShar-GNUC", "description": "GNUC Standard Config for x64 (Release)", "inherits": [ "ci-x64-Release-GNUC", "ci-Java", "my-StdShar", "my-StdExamples" ] } ...... Then you can change or add options for your specific case. ======================================================================== IX. Using the Library ======================================================================== For information on using HDF4 see the documentation, tutorials and examples found here: https://support.hdfgroup.org/documentation/index.html A summary of the features included in the built HDF4 installation can be found in the libhdf4.settings file in the same directory as the static and/or shared HDF5 libraries. However CMake provides a programmable method to determine the features of the library. The CMake installation will provide a CMake package configuration file, located in the installation folder, cmake/hdf4-config.cmake, and can be used to determine the features of the library. The file is accessed by using the find_package command in your CMakeLists.txt file. 1. Set the HDF5_ROOT CMake variable, -DHDF4_ROOT= or environment variable, set(ENV{HDF4_ROOT} "") to the installed location of HDF4. On Windows: HDF4_ROOT=C:/Program Files/HDF_Group/HDF4/z.y.x/ On unix: HDF4_ROOT=/HDF_Group/HDF4/z.y.x/ If you are using shared libraries, you may need to add to the path environment variable. Set the path environment variable to the installed location of the library files for HDF4. On Windows (*.dll): PATH=%PATH%;C:/Program Files/HDF_Group/HDF4/z.y.x/bin On unix (*.so): LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF4/z.y.x/lib (Note there are no quote characters used on Windows and all platforms use forward slashes) 2. Add the following to your CMakeLists.txt file: find_package (HDF4 NAMES hdf4 COMPONENTS C shared) The components are optional and can be omitted if not needed. The components are: shared, static, C, Fortran, Java and Tools. ======================================================================== X. Autotools Configuration and Build ======================================================================== See RELEASE.txt in the release_notes/ directory for the list of platforms tested for this release. Instructions for building and testing HDF4 using autotools can be found in the INSTALL_Auto.txt file found in this folder. ======================================================================== For further assistance, send email to help@hdfgroup.org ======================================================================== hdf4-hdf4.3.1/release_notes/INSTALL_WINDOWS.txt000066400000000000000000000027041503061704500207430ustar00rootroot00000000000000 *********************************************************************** * HDF4 Build and Install Instructions for Windows * * (Full Version) * *********************************************************************** We now recommend that users build, test and install HDF4 using CMake. Instructions for building and testing HDF4 using CMake can be found in the INSTALL_CMake.txt file found in this folder. For instructions of building and testing an application with HDF4, see USING_HDF4_CMake.txt file found in this folder. Users who want to build and run an application with HDF4 in Visual Studio without using CMake should consult the USING_HDF4_VS.txt file. Building applications with the dynamic/shared hdf4 libraries requires that the "H4_BUILT_AS_DYNAMIC_LIB" compile definition be used. Additional Third-party Software Requirements: 1) Flex and Bison programs are required to regenerate the ncgen parsers. This is not required to build the library and is only necessary if you change the input files. 2) The Win flex-bison project, a port of Flex & Bison tools to the Windows platform, is recommended. Download from: http://sourceforge.net/projects/winflexbison 3) CMake version 3.21 or higher is needed to use Win flex-bison. Using an earlier version of CMake will require renaming the executables without the "win_" prefix. hdf4-hdf4.3.1/release_notes/RELEASE.txt000066400000000000000000000261401503061704500175030ustar00rootroot00000000000000HDF version 4.3.1 released on 2025-06-30 ==================================================== INTRODUCTION This document describes the differences between this release and the HDF 4.3.0 release. It is written for people who are familiar with previous releases of HDF and wish to migrate to this version of HDF. Note that the HDF4 documentation will be updated at the time of each final release and can be found on the HDF4 support page at: https://portal.hdfgroup.org/display/HDF4 The official HDF4 releases can be obtained from: https://portal.hdfgroup.org/downloads/index.html If you have any questions or comments, please send them to the HDF Help Desk: help@hdfgroup.org CONTENTS - New features and changes -- Configuration -- C Library - Bugs fixed since HDF 4.3.0 -- Configuration -- Library - Documentation - Platforms Tested - Known problems New features and changes ======================== Configuration: ------------- None C Library: ------------- None Bugs fixed since HDF 4.3.0 =========================== Configuration: ------------- None Library: ------- - Fixed various uninitialized memory occurrences Valgrind reported "Conditional jump or move depends on uninitialised value(s)" errors in some of the jpeg tests even though the buffers were initialized properly prior to calling the JPEG read function. This was due to some optimizations/alignments by the JPEG library. Using the environment variable JSIMD_FORCENONE=1 to disable SIMD (Single Instruction Multiple Data) optimizations will help removing the errors, if desired. However, because these optimizations take advantage of hardware capabilities to speed up JPEG compression and decompression, disabling them might cause the opposite effect. Addresses GH-818 - Fixed memory leaks in Vgroup and Vdata APIs The code that destroys the atom groups for Vdatas and Vgroups was placed after the free lists had already been freed, resulting in more released memory being added to the free lists, which were never freed, again. Fixed. Addresses GH-819 - Fixed memory leaks in SD API The SD API internal code contained some memory leaks. This is now fixed. Addresses GH-825 Utilities: --------- - Fixed hdp to display variables with rank = 0 properly Previously the tool did not handle variables with rank = 0 correctly. Thus, it simply skipped printing these variables. Addresses HDFFR-1293 Documentation ============= Platforms Tested ================ This version has been tested in the following platforms: (Format: uname -s, uname -r uname -v, uname -p, uname -m) Linux 6.7.4 GNU gcc (GCC) 13.2.1 Fedora 39 Clang version 17.0.6 Linux 5.15.0 GNU gcc (GCC) 11.3.0, 11.4.0, 12 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 11.3.0, 12 Ubuntu 22.04 Clang version 14.0.0 Intel OneApi 2023.1.0, 2023.2.0, 2024.0 Nvidia nvc 23.9 AOCC 4.1.0, Clang 16.0.3 Mingw, GNU GCC 10.0.0 (cmake and autotools) Linux 5.13.0 GNU gcc (GCC) 9.4.0 Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 9.4.0 Ubuntu 20.04 Clang version 10.0.0 Intel OneApi 2023.1.0 (cmake and autotools) Linux 4.18.0-348.7.1.el8_5 gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) #1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) CentOS8 clang version 12.0.1 (Red Hat 12.0.1) Intel OneApi 2023.1.0 (cmake and autotools) Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) #1 SMP ppc64 GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) IBM XL C/C++ V13.1 IBM XL Fortran V15.1f Linux 3.10.0-327.18.2.el7.x86_64 GNU C (gcc) and Fortran (gfortran) compilers: #1 SMP x86_64, GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4) (jelly/moohan) Version 5.3.0, 6.3.0, 7.2.0, 8.3.0, 9.1.0, 10.2.0 Intel(R) C (icc) and Fortran (ifort) compilers: Version 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp haswell Linux 2.6.32-754.11.1.el6.x86_64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) #1 SMP, x86_64 GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) (platypus) icc (ICC) 17.0.0.098 Build 20160721 ifort (IFORT) 17.0.0.098 Build 20160721 pgcc and pgf90 17.10-0 64-bit target on x86-64 Linux -tp nehalem macOS Sonoma 14 Apple clang version 15.0.7 Darwin 23.2.0 arm64 Clang 17.0.0 macOS Ventura 13.6.4 Apple clang version 15.0.0 Darwin 22.6.0 x86_64 macOS Monterey 12 Apple clang version 14.0.0 Darwin 21.6.0 x86_64 gfortran GNU Fortran (Homebrew GCC 13.2.0) 13.2.0 (philo) Intel icc/icpc/ifort version 2021.10.0 20230609 macOS Apple M1 11.7.3 Apple clang version 13.0.0 (clang-1300.0.29.30) Darwin 20.6.0 arm64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (macmini-m1) Intel icc/icpc/ifort version 2021.8.0 20221120 macOS Big Sur 11.7.3 Apple clang version 12.0.5 (clang-1205.0.22.9) Darwin 20.4.0 x86_64 gfortran GNU Fortran (Homebrew GCC 12.2.0) 12.2.0 (bigsur-1) Intel icc/icpc/ifort version 2021.7.1 20221019 Windows 10 x64 Visual Studio 2019 w/ clang 12.0.0 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2019 w/ Intel C/C++/Fortran oneAPI 2024 (cmake) Visual Studio 2022 w/ clang 17.0.1 with MSVC-like command-line (C/C++ only - cmake) Visual Studio 2022 w/ Intel C/C++/Fortran oneAPI 2024 (cmake) Known problems ============== o The Fortran interface does not work on 64-bit systems as it stores addresses in memory as Fortran INTEGER values, which are typically 32-bit. The Fortran interface is currently disabled by default due to this. It should only be enabled on 32-bit systems. o Builds with the autotools option --enable-hdf4-xdr fail on Solaris and on IBM ppc64 with the xlc compiler. The option should not be used on those platforms. o A number of tools and tests fail to free small amounts of memory if they are just going to exit anyway.  This doesn't appear to be a memory leak in the core library.  We're planning to fix these leaks in future releases, likely by modifying these tools to have a single point of return, where resource cleanup will be carried out.  o CMake files do not behave correctly with paths containing spaces. Do not use spaces in paths because the required escaping for handling spaces results in very complex and fragile build files. ADB - 2019/05/07 o Several Fortran examples print "^@" when displaying strings (for example, names of the attributes). This happens because Fortran application doesn't know the length of the strings passed from the C library. EIP - 2015-01-11, HDFFR-1477 o CMake fails to set the full path to the install location on Windows: The configuration file for examples, HDF4_Examples.cmake, must be updated with the correct value by editing the file or using the INSTALLDIR option. This issue is because of spaces in the path. ADB - 2014/02/03 o CMake "make install" fails installing the tools: Use CPack to create an install package. ADB - 2014/02/03 o On IBM PowerPC 64, hdftest fails when gcc 4.4.6 is used with -O3 optimization level. o When building on Linux/UNIX platforms, the szip shared library files must be in the system library path. This can be done by adding a link to the libsz.* files in the /usr/lib folder or by adding the library location to the LD_LIBRARY_PATH environment variable. Ex. export LD_LIBRARY_PATH=path_to_szip_lib:$LD_LIBRARY_PATH Optionally, one can use the static szip library files by adding '-static' to the CFLAGS environment variable. o Existing data written by an HDF4 Library prior to HDF 4.2r2: When a one-dimensional SDS and a dimension scale have the same name, subsequent accesses to the dimension scale or to the SDS might produce undesired results because the libraries could not distinguish between the two objects. In the case of writing, data might even be corrupted. For example, SDS data might be written to a dimension variable or vice versa. (bugzilla #624) HDF4 Library Releases 4.2r2 and later make a distinction between an SDS and a dimension variable. However, as with older versions, these recent versions are unable to detect such conflicts in files created by earlier releases. It is therefore STRONGLY recommended to check for such name duplication before working with data created with a pre-4.2r2 library. The functions SDgetnumvars_byname and SDnametoindices are provided to help detect such name conflicts and select the correct object to access, respectively; see the HDF Reference Manual entries for further details. FB - 2009/01/26 BMR - revised 2011/06/24 o N-bit compression is not supported with Fortran APIs. o Using both fill-value and compression on SD datasets does not work. o When using PGI compilers, make sure that the JPEG library is also compiled with a PGI C compiler; linking with a JPEG library built with gcc causes JPEG library tests to fail. To bypass the problem: x Set LIBS flag to $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a where $PGI_JPEG_INSTALL_DIR points to the installation directory for the PGI-compiled JPEG library: setenv LIBS $PGI_JPEG_INSTALL_DIR/lib/libjpeg.a x Use the --with-jpeg=$PGI_JPEG_INSTALL_DIR configure flag to configure with the PGI-compiled JPEG library: ./configure --with-jpeg=$PGI_JPEG_INSTALL_DIR --with-zlib.... o In order for the API SDgetdatasize to get the correct compressed size of the data, the dataset needs to be closed (SDendaccess) or read (SDreaddata) after being written and before SDgetdatasize is called. BMR - 2008/11/22 hdf4-hdf4.3.1/release_notes/USING_CMake_Examples.txt000066400000000000000000000162771503061704500222200ustar00rootroot00000000000000************************************************************************ * Build and Test HDF4 Examples with CMake * ************************************************************************ Notes: This short instruction is written for users who want to quickly test the installation of HDF4 by using the CMake tools to build and test the HDF4 Examples. The following instructions will show the default usage and then present common changes for non-default installations. For more information, see the USING_HDF4_CMake.txt file. More information about using CMake can be found at the Kitware site, www.cmake.org. Table of Contents Section I: Preconditions Section II: Building HDF4 Examples with CMake 1. Using presets 2. Using CTestScript.cmake Section III: Defaults in the CMakePresets.json file Section IV: Defaults in the HDF4_Examples_options.cmake file ======================================================================== I. Preconditions ======================================================================== 1. We suggest you obtain the latest CMake for your platform from the Kitware web site. The HDF 4.3.x product requires a minimum CMake version of 3.18. If you are using VS2022, the minimum CMake version is 3.21. CMakePresets.json, requires CMake 3.25 or higher. 2. You have installed the HDF4 library built with CMake, by executing the HDF Install Utility (the *.msi file in the binary package for Windows or the *.sh on Linux). You can obtain pre-built binaries from The HDF Group's website at www.hdfgroup.org. 3. Set the HDF4_ROOT CMake variable, -DHDF4_ROOT= or environment variable, set(ENV{HDF4_ROOT} "") to the installed location of HDF4. On Windows: HDF4_ROOT=C:/Program Files/HDF_Group/HDF4/z.y.x/ On unix: HDF4_ROOT=/HDF_Group/HDF4/z.y.x/ If you are using shared libraries, you may need to add to the path environment variable. Set the path environment variable to the installed location of the library files for HDF4. On Windows (*.dll): PATH=%PATH%;C:/Program Files/HDF_Group/HDF4/z.y.x/bin On unix (*.so): LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF4/z.y.x/lib (Note there are no quote characters used on Windows and all platforms use forward slashes) ======================================================================== II. Building HDF4 Examples with CMake ======================================================================== 1. Using presets Files in the HDF4 install/HDF5Examples directory: CMakePresets.json Default build process: Create a directory to run the examples, i.e. \test_hdf4. Copy the HDF4Examples folder to this directory. Change into the HDF4Examples directory where CMakePresets.json exists. Other options can be changed by creating a CMakeUsersPresets.json file. (Advanced usage) Available configurations presets can be displayed by executing: cmake -S --list-presets Using individual command presets (where is GNUC or MSVC or Clang): cmake --preset ci-StdShar- cmake --build --preset ci-StdShar- ctest --preset ci-StdShar- cpack --preset ci-StdShar- Using the workflow preset to configure, build, and testthe standard configuration: execute "cmake --workflow --preset ci-StdShar- --fresh" where is GNUC or MSVC or Clang 2. Using CTestScript.cmake Files in the HDF4 install directory: HDF4Examples folder CTestScript.cmake HDF4_Examples.cmake HDF4_Examples_options.cmake Default build process: Create a directory to run the examples, i.e. \test_hdf4. Copy HDF4Examples folder to this directory. Copy CTestScript.cmake to this directory. Copy HDF4_Examples.cmake to this directory. Copy HDF4_Examples_options.cmake to this directory. The default source folder is defined as "HDF4Examples". It can be changed with the CTEST_SOURCE_NAME script option. The default installation folder is defined for the platform. It can be changed with the INSTALLDIR script option. (Note: Windows has issues with spaces and paths -The path will need to be set correctly.) The default ctest configuration is defined as "Release". It can be changed with the CTEST_CONFIGURATION_TYPE script option. Note that this must be the same as the value used with the -C command line option. On Windows, you can set the CTEST_VSVERS script option to either 64_VS2022 or 64_VS2019. Alternately, you can set the script CTEST_CMAKE_GENERATOR option to "Visual Studio 16 2019" or "Visual Studio 17 2022", and the CMAKE_GENERATOR_ARCHITECTURE script option to "x64". The default build configuration is defined to build and use static libraries. Shared libraries can be used with the STATIC_ONLY script option set to "NO". Shared libraries and other options can be changed by editing the HDF4_Examples_options.cmake file. If the defaults are okay, execute from this directory: ctest -S HDF4_Examples.cmake -C Release -VV -O test.log If the defaults need change, execute from this directory: ctest -S HDF4_Examples.cmake,CTEST_SOURCE_NAME=MyExamples,INSTALLDIR=MyLocation -C Release -VV -O test.log When executed, the ctest script will save the results to the log file, test.log, as indicated by the ctest command. If you wish to see more build and test information, add "-VV" to the ctest command. The output should show; 100% tests passed, 0 tests failed out of 49. ======================================================================== III. Defaults in the CMakeUsersPresets.json file ======================================================================== #### DEFAULT: #### "generator": "Ninja" #### "binaryDir": "${sourceParentDir}/build/${presetName}" #### "name": "ci-StdShar" #### "BUILD_SHARED_LIBS": "ON", #### "USE_SHARED_LIBS": "ON" #### "CMAKE_BUILD_TYPE": "RelWithDebInfo" #### "H4EX_BUILD_FORTRAN": "OFF" #### "H4EX_BUILD_JAVA": "ON" #### "HDF4_NAMESPACE": {"type": "STRING", "value": "hdf4::"}, #### "HDF4_PACKAGE_NAME": {"type": "STRING", "value": "hdf4"}, #### "H4EX_BUILD_TESTING": "ON" ======================================================================== IV. Defaults in the HDF4_Examples_options.cmake file ======================================================================== #### DEFAULT: #### BUILD_SHARED_LIBS:BOOL=OFF #### H4EX_BUILD_C:BOOL=ON #### H4EX_BUILD_FORTRAN:BOOL=OFF #### H4EX_BUILD_JAVA:BOOL=OFF #### H4EX_BUILD_TESTING:BOOL=OFF hdf4-hdf4.3.1/release_notes/USING_HDF4_CMake.txt000066400000000000000000000235211503061704500211150ustar00rootroot00000000000000************************************************************************ * Build and Install HDF4 Applications with CMake * ************************************************************************ Notes: This short instruction is written for users who want to quickly build HDF4 applications using the CMake tools. Users can adapt these instructions for their own applications. For more information, see the "Minimum C Project Files for CMake" section. More information about using CMake can be found at the Kitware site, www.cmake.org. CMake uses the command line; however, the visual CMake tool is available for the configuration step. The steps are similar for all of the operating systems supported by CMake. NOTES: 1. CMake for HDF4 development should be usable on any system where CMake is supported. Please send us any comments on how CMake support can be improved on any system. 2. See the appendix at the bottom of this file for an example of using a ctest script for building and testing. See INSTALL_CMake.txt for more information. 3. See https://cmake.org/cmake/help/latest/command/find_package.html for more information on the CMake "Config Mode Search Procedure". ======================================================================== I. Preconditions ======================================================================== 1. We suggest you obtain the latest CMake for your platform from the Kitware web site. The HDF 4.3.x product requires a minimum CMake version of 3.18. If you are using VS2022, the minimum CMake version is 3.21. CMakePresets.json, requires CMake 3.25 or higher. 2. You have installed the HDF4 library built with CMake, by executing the HDF Install Utility (the *.msi file in the binary package for Windows or the *.sh on Linux). You can obtain pre-built binaries from The HDF Group's website at www.hdfgroup.org. 3. Set the HDF4_ROOT CMake variable, -DHDF4_ROOT= or environment variable, set(ENV{HDF4_ROOT} "") to the installed location of HDF4. On Windows: HDF4_ROOT=C:/Program Files/HDF_Group/HDF/4.3.x/ On unix: HDF4_ROOT=/HDF_Group/HDF/4.3.x/ If you are using shared libraries, you may need to add to the path environment variable. Set the path environment variable to the installed location of the library files for HDF4. On Windows (*.dll): PATH=%PATH%;C:/Program Files/HDF_Group/HDF/4.3.x/bin On unix (*.so): LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF/4.3.x/lib (Note there are no quote characters used on Windows and all platforms use forward slashes) 4. Created separate source and build directories. (CMake commands are executed in the build directory) 5. Created a CMakeLists.txt file(s) for your source. See Section III below. ======================================================================== II. Building HDF4 Applications with CMake ======================================================================== Go through these steps to build HDF4 applications with CMake. (The application must support building with CMake.) 1. Run CMake 2. Configure the cache settings 3. Build HDF4 Applications 4. Test HDF4 Applications These steps are described in more detail below. 1. Run CMake The visual CMake executable is named "cmake-gui.exe" on Windows and should be available in your Start menu. For Linux, UNIX, and Mac users the executable is named "cmake-gui" and can be found where CMake was installed. Specify the source and build directories. Make the build and source directories different. For example on Windows, if the source is at c:\MyHDFstuff\hdf4, then use c:\MyHDFstuff\hdf4\build or c:\MyHDFstuff\build\hdf4 for the build directory. PREFERRED: Users can perform the configuration step without using the visual cmake-gui program. The following is an example command line configuration step executed within the build directory: cmake -G "" [-D] Where is * MinGW Makefiles * NMake Makefiles * Unix Makefiles * Visual Studio 15 2017 * Visual Studio 15 2017 Win64 * Visual Studio 16 2019 * ... in addition VS2019 will need to set the "-A" option, * ... [Win32, x64, ARM, ARM64] * Visual Studio 17 2022 * ... in addition VS2022 will need to set the "-A" option, * ... [Win32, x64, ARM, ARM64] is: * BUILD_TESTING:BOOL=ON * BUILD_SHARED_LIBS:BOOL=[ON | OFF] 2. Configure the cache settings 2.1 Visual CMake users, click the Configure button. If this is the first time you are running cmake-gui in this directory, you will be prompted for the generator you wish to use (for example on Windows, Visual Studio 16 2019). CMake will read in the CMakeLists.txt files from the source directory and display options for the HDF4 project. After the first configure you can adjust the cache settings and/or specify locations of other programs. Any conflicts or new values will be highlighted by the configure process in red. Once you are happy with all the settings and there are no more values in red, click the Generate button to produce the appropriate build files. On Windows, if you are using a Visual Studio generator, the solution and project files will be created in the build folder. On linux, if you are using the Unix Makefiles generator, the Makefiles will be created in the build folder. 2.2 Alternative command line example on Windows in c:\MyHDFstuff\hdf4\build directory: cmake -G "Visual Studio 16 2019" -A "x64" -DBUILD_TESTING:BOOL=ON .. 3. Build HDF4 Applications On Windows, you can build HDF4 applications using either the Visual Studio Environment or the command line. The command line is normally used on linux, Unix, and Mac. To build from the command line, navigate to your build directory and execute the following: cmake --build . --config {Debug | Release} NOTE: "--config {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release on Windows. If you are using the pre-built binaries from HDF, use Release. 3.1 If you wish to use the Visual Studio environment, open the solution file in your build directory. Be sure to select either Debug or Release and build the solution. 4. Test HDF4 Applications To test the build, navigate to your build directory and execute: ctest . -C {Debug | Release} NOTE: "-C {Debug | Release}" may be optional on your platform. We recommend choosing either Debug or Release to match the build step on Windows. 5. The files that support building with CMake are all of the files in the config/cmake folder, the CMakeLists.txt files in each source folder, and CTestConfig.cmake. CTestConfig.cmake is specific to the internal testing performed by The HDF Group. It should be altered for the user's installation and needs. The cacheinit.cmake file settings are used by The HDF Group for daily testing. It should be altered/ignored for the user's installation and needs. ======================================================================== III. Minimum C Project Files for CMake ======================================================================== Given the preconditions in section I, create a CMakeLists.txt file at the source root. Include the following text in the file: ########################################################## cmake_minimum_required (VERSION 3.18) project (HDF4MyApp C) set (LIB_TYPE STATIC) # or SHARED string(TOLOWER ${LIB_TYPE} SEARCH_TYPE) find_package (HDF4 NAMES hdf4 COMPONENTS C ${SEARCH_TYPE}) # find_package (HDF4) # Find non-cmake built HDF4 set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF4_INCLUDE_DIR}") set (LINK_LIBS ${LINK_LIBS} ${HDF4_C_${LIB_TYPE}_LIBRARY}) set (example hdf_example) add_executable (${example} ${PROJECT_SOURCE_DIR}/${example}.c) target_link_libraries (${example} ${LINK_LIBS}) enable_testing () include (CTest) add_test (NAME test_example COMMAND ${example}) ########################################################## ======================================================================== IV. APPENDIX ======================================================================== Below is an example of a ctest script that can be used to build the examples. Adjust the values as necessary. Note that the defaults can be entered on the command line and the build folder is created as a sub-folder. Windows should adjust the forward slash to double backslashes, except for the HDF_DIR environment variable. NOTE: this file is available in the HDF4 repository, for more information see: https://github.com/HDFGroup/hdf4/blob/master/release_notes/USING_CMake_Examples.txt ctest -S HDF4_Examples.cmake -C Release -V -O test.log Also available at the HDF web site is a CMake application framework template. You can quickly add files to the framework and execute the script to compile your application with an installed HDF4 binary. ======================================================================== For further assistance, send email to help@hdfgroup.org ======================================================================== hdf4-hdf4.3.1/release_notes/USING_HDF4_VS.txt000066400000000000000000000077131503061704500204720ustar00rootroot00000000000000 *********************************************************************** * HDF4 Build and Install Suggestions for Windows and Visual Studio * * (Full Version) * *********************************************************************** These suggestions are for Visual Studio users. Instructions for building and testing HDF4 applications using CMake can be found in the USING_HDF4_CMake.txt file found in this folder. NOTE: Building applications with the dynamic/shared hdf4 libraries requires that the "H4_BUILT_AS_DYNAMIC_LIB" compile definition be used. Go to "Project" and select "Properties", find "Configuration Properties", and then "C/C++"and then "Preprocessor". Add H4_BUILT_AS_DYNAMIC_LIB to Preprocessor definitions. The following two sections are helpful if you do not use CMake to build your applications. ============================================================================================== Using Visual Studio 2010 and above with HDF4 Libraries built with Visual Studio 2010 and above ============================================================================================== 1. Set up path for external libraries and headers The path settings will need to be in the project property sheets per project. Go to "Project" and select "Properties", find "Configuration Properties", and then "VC++ Directories". 1.1 If you are building on 64-bit Windows, find the "Platform" dropdown and select "x64". 1.2 Add the header path to the "Include Directories" setting. 1.3 Add the library path to the "Library Directories" setting. 1.4 Select Linker->Input and beginning with the "Additional Dependencies" line, enter the library names. The external libraries should be listed first followed by the HDF4 libraries. For example, enter: hdfdll.lib mfhdfdll.lib For static linking: HDF4 libraries: hdfdll.lib mfhdfdll.lib Compression libraries: libszaec.lib libaec.lib libzlib.lib libjpeg.lib ========================================================================== Using Visual Studio 2008 with HDF4 Libraries built with Visual Studio 2008 ========================================================================== 2. Set up the path for external libraries and headers Invoke Microsoft Visual Studio and go to "Tools" and select "Options", find "Projects", and then "VC++ Directories". 2.1 If you are building on 64-bit Windows, find the "Platform" dropdown and select "x64". 2.2 Find the box "Show directories for", choose "Include files", add the header path (i.e. c:\Program Files\HDF_Group\HDF\4.3.x\include) to the included directories. 2.3 Find the box "Show directories for", choose "Library files", add the library path (i.e. c:\Program Files\HDF_Group\HDF\4.3.x\lib) to the library directories. 2.4 If using Fortran libraries, you will also need to setup the path for the Intel Fortran compiler. 2.5 Select Project->Properties->Linker->Input and beginning with the "Additional Dependencies" line, enter the library names. The external libraries should be listed first followed by the HDF4 libraries. For example, enter: hdfdll.lib mfhdfdll.lib For static linking: HDF4 libraries: hdfdll.lib mfhdfdll.lib Compression libraries: libszaec.lib libaec.lib libzlib.lib libjpeg.lib ======================================================================== 3. Helpful Pointers ======================================================================== 3.1 FAQ Community support forum available, please see: https://forum.hdfgroup.org/c/hdf4/21 ************************************************************************ Please send email to help@hdfgroup.org for further assistance. hdf4-hdf4.3.1/release_notes/bugs_fixed.txt000066400000000000000000000401611503061704500205410ustar00rootroot00000000000000This file contains some historical information; please do not edit. EIP 2007-09-23 For bugs fixed in the current release see RELEASE.txt file For bugs fixed in all releases after HDF4.2r0-Beta see HISTORY.txt file. HDF4.2r0-Beta ======== 1. "hdp dumpgr" and "hdp dumpsds" have two new options: -g to suppress the data of global (or file) attributes -l to suppress the data of local attributes 2. The problem where hdp failed on very long file name has been fixed. (bug #693) 3. The problem where VSinquire failed when being called on a vdata that has no fields defined, has been fixed. (bug #626) 4. A user attempted to change the values of VGNAMELENMAX and VSNAMELENMAX to 256 for her own use, but the hdp output showed that the change was not in effect. This problem is now fixed. (bug #606) 5. hdp dumpvg failed sometimes when reading a file that has a vgroup being inserted into another. This has been fixed. (bug #477) 6. fp2hdf when used with -p option did the opposite of what it was supposed to do with palette files. This problem is now fixed. (bug #800). However the utility hdfimport should be used in the future instead of fp2hdf. 7. hdf2gif failed when a user tried it on JPEG compressed images. (Bug #601). The problem is now fixed. An error message is displayed if the image is not 8-bit. If the image is 24-bit, the message suggests using hdf2jpeg. 8. ncdump failed to read NetCDF files 3.5 when there were more than one variable with unlimited dimensions. Fixed. 9. NetCDF part of the HDF4 Library was not ported to Compaq True64 system. Fixed. 10. The hdp commands dumpsds, dumpgr, dumpvd, and dumpvg now display an informative message when a non-HDF file is given as input. (Bug #817) 11. The compilation warnings and error on the macro HDFclose are fixed. (Bug #818) HDF4.1r5 ======== 1. The following VS routines are added as requested (bug #267): VSsetblocksize/vsfsetblsz -- sets the block size of the linked-block element. VSsetnumblocks/vsfsetnmbl -- sets the number of blocks for a linked-block element. VSgetblockinfo/vsfgetblinfo -- retrieves the block size and the number of blocks of a linked-block element. 2. When using SDsetdimscale to set the data type for a dimension to an unsigned type, the type became signed inadvertently (bug #172). This problem is now fixed. 3. The memory leak in the netCDF part of the HDF/mfhdf distribution is fixed. (bug #418) 4. When using "hdp dumpgr", data was being printed in the range of 0-250 when it should be 0-168 (bug #422). This problem is now fixed. 5. hdp dumpgr has a new option to print palette data only -pd. Also, whenever option -p or -pd is given, only palettes are printed, no images nor file attributes. (bug #439) 6. The "#define NULL" was removed since ANSI C compilers are required to define NULL. (bug #448) 7. Giving NULL to the fieldname argument in VSsetfields now returns FAIL instead of causing segmentation fault. (bug #554) 8. Giving a NULL to the argument name in several name setting routines now returns FAIL instead of causing segmentation fault. (bug #514) 9. Two routines were added to get compression information for the SD and GR interfaces, including chunked elements: SDgetcompress/sfgcompress and GRgetcompress/mggcompress. (bug #307) Note: - for a JPEG image, GRgetcompress only returns the compression type, not the compression information (i.e, quantity and force_baseline) because this information currently is not retrievable. - getting compression type for JPEG chunked images is not working yet. 10. Added new fortran function heprntf (HEprint) that takes two arguments: file name and level. If file name string has 0 length error messages will be printed to the standard output. 11. Fix the linking bug of unresolved symbol(error_top) DLL when HEclear was called by users. Users who want to use hdf DLL should define HDFAPDLL in their applications. Simply going to project setting and adding HDFAPDLL as the predefined constant should work. HDF4.1r4 ======== 1. Fixed GR JPEG compression problem. 2. Added -s, -c and -l options to hdp. HDF4.1r3 ========= 1. HDF 4.1r2 was unable to properly read HDF SDSs created with HDF 3.3x. It did not read the correct SDS names. This problem has been fixed. 2. Many problems with the GR interface were fixed: - The GR interface can now read compressed files created with the DFR8 and DF24 interfaces, except for those which were compressed with IMCOMP compression. - The GR interface can read and write images compressed with RLE, GZIP and Skipping Huffman compression methods. - Palettes can now be written and read properly with the GR interface. - 24-bit raster images can now be read by the GR interface. 3. You can now create an SDS with a name up to 256 characters in length. The previous limit was 64. 4. SDfileinfo no longer returns the wrong number of datasets for old files created with the DFSD interface. 5. The Vdata/Vgroup interfaces in HDF did not check return values, which caused problems on the Macintosh, and could have potentially caused problems on all platforms. HDF now checks all return values properly. 6. Several missing Fortran functions have been added to the ./include/dffunc.inc file. 7. Calling SDreaddata after setting the fill value and before doing an SDendaccess and SDend caused a core dump on IRIX6.x with the -64 bit option. This problem has been fixed. 8. Many hdp fixes were made: - Options 'o' and 'b' or 'x': it used to be that you had to give -o in order for -b or -x to be valid; now you can just give -b or -x and the output will go to the screen. Basically, you can have either binary or ASCII text to the screen now where it used to be just ASCII. - Options (-r,-i,-n,-c) can be given on the same command line; previously the last option overrode all the previous ones. - Added printing of GR file attributes (bug #192) - Added printing of a palette to the dumpgr command (bug #252) with the new option -p -p : print palette info and data -p -h : print palette info -p -d : print palette data - Added printing of SD file attributes to the dumpsds command - The -c option for dumpvd used to only show the first vdata; now all vdatas of the same class show for option -c. Also, multiple class names listed with this option are searched; they used to be ignored. - Added printing file annotations to the dumpvd command. - Improved output wording for the dumpvd command. For example, gets printed instead of nothing, or FULL_INTERLACE/NO_INTERLACE is printed instead of "0/1". - In one case the dumpvg command would get into an infinite loop. This problem has been fixed. - With the dumpvg command, all vgroups of the same class show for option -c; previously only the first one was shown. Also, multiple class names listed with this option are now searched; they used to be ignored. - File annotations can now be printed with the dumpvg command. - With the dumpvg command, occasionally a core dump occurred when printing the Graphical Representation part if multiple hdf files were given. This has been fixed. HDF4.1r2 ======== 1. The hdp utility can now dump data properly to a binary file (using the -b option). 2. HDF no longer core dumps when reading a NetCDF file. 3. HDF now supports little-endian conversion for VAX and Dec Alpha OpenVMS. 4. The SD interface can now properly handle writing to a one-dimensional array that is unlimited. 5. The SD interface can now properly handle attributes with a data type of Little Endian. 6. HDF will no longer fail if you write data to a vdata that had no data written to it when it was first created. 7. The problems that occurred on the Crays with HDF 4.1r1 have been corrected. HDF4.1r1 ======== 1. A bug was fixed where you would receive an error if you changed the name of a Vdata to a name that was longer than the original name. 2. The FORTRAN equivalents have been added for several ANxx utility routines (ANget_tagref, ANid2tagref ...). 3. A bug was fixed where old data (DFSD) in native and little endian format could not be read by the SD interface correctly. 4. The variable _HDF_ENTIRE_VDATA has been changed to _HDF_VDATA, to avoid confusion. This variable had been added to HDF 4.1b1. For those users who are already using it, a macro called _HDF_ENTIRE_VDATA has been added, which is defined as _HDF_VDATA. 5. SD_FILL and SD_NOFILL were added as file fillmodes. 6. In HDF 4.0r2, you could create an empty compressed SDS. With 4.1b1 you could not. This was fixed in the 4.1 release. 7. There was a bug in hdp where 'hdp list -a' did not list the file attributes. This was fixed. 8. In 4.1b1, the SD chunking routine names contained upper case characters after the initial two "SD" characters (for eg. SDwriteChunk). With 4.1r1 the SD chunking routine names were changed to lower case after the initial "SD" characters, to be consistent with the SD interface naming scheme (for eg. SDwritechunk). HDF4.1b1 ======== 1. If you opened a file in read only mode with the SD interface, it would create the file if the file did not exist. This has been fixed. 2. There was a problem with GRstart, which caused GRend to trigger a segmentation fault when it was called twice. This has been fixed. 3. DFNT_UCHAR has been added to hdf_unmap_type. 4. A problem was fixed in HDc2fstr, which caused garbage to be attached to a converted string. 5. The multi-file annotation functions were added to dffunc.inc. 6. A bug was fixed in the DFPnpals function, where it would return the wrong number of palettes. 7. A problem was fixed with the gzip compression, where an error occurred if you attempted to write to an SDS that you have created, and then performed an SDendaccess, followed by a SDselect. 8. HDF4.0r2 did not recognize JPEG images created by HDF 3.3r4. This has been fixed. 9. The newest SGI cc compiler (7.0) has eliminated the compression code errors when '-O' option is used. HDF4.0r2 ======== 1. SDstart (, DFACC_RDWR) no longer fails. It will create a file now. 2. When appending compressed data onto the end of an unlimited dimension SDS, the SD interface no longer writes the fill- values in locations where they will immediately be over- written by data. 3. dfkcray.c, IEG2JPEG and JPEG2IEG do not work if the foreign data does not start from the 64-bit boundary. 4. On IRIX 6.1 with -n32, hdf/test/comp.c gave error messages. Fix: Not to use '-O' option (for now). 5. Problem when running 'make test' on UNICOS has been fixed (bug was in hdf/util/he_main.c). 6. The RIG tag was not getting written out when creating a GR object, so you couldn't view it with "hdp list". The hdp command has been updated. HDF4.0r1p1 ========== 1. Fixed a bug in SDS interface which caused a wrong number of records for UNLIMITED dimensions when ncsync was called to write data to hdf files. 2. A bug has been fixed in the UNLIMITED dimension record to improve backward compatibility. 3. Parameter 'class' in vffndcls() has been changed to 'vgclass' to avoid conflicts with C++ reserved word 'class'. HDF4.0r1 ======== 1. Fixed Fortran character string handling under UNICOS. 2. Added checks on the return values of HDmalloc calls. 3. The automatic test of hdf utilities (in hdf/util/) is added to the Makefile and will be executed by 'make test' at the top level. 4. Thanks to Mark W. Dalton for his contribution to the fix of the adaptive Huffman compression on the CRAY YMP. His fix is merged into 4.0r1. 5. Added check in SDsetattr() to make sure that the argument 'count' < MAX_ORDER. HDF4.0b2 ======== 1. To avoid conflicts with C++, field name 'new' in vgroup_desc of vg.h is changed to 'new_vg', and in accrec_t 'new' of hfile.h is changed to 'new_elem'. 2. Fixed the max number of fields of vdata in vparse.c, vshow.c and show.c (in mfhdf/dumper/). Now vshow and hdp can dump VSFIELDMAX number of fields. 3. Fixed platform number subclass problem when external data file was written in Little_endian format (IBM-PC). 4. Fixed the core-dump on some machines when writing large number of big SDS by holding the buffer instead of freeing it every time. 5. The max number of files which can be open at one time was defined in hdf.h, hfile.h and netcdf.h. Now there is only one definition by MAX_FILE in hdf/src/hlimits.h. 6. A bug in SDsetnbitdataset is fixed. 7. Uninitialized memory reads in SDIputattr and hdf_create_dim_vdata are fixed. HDF4.0b1 ======== 1. Added support to unsigned integers for attributes. 2. Bug fixed in SDsetdimscale if dim strings or other attributes already assigned to that dimension and if the size of the number type is not 4 bytes. 3. Bug fixed in SDgetdimscale. For dimensions that have no dim scale SDgetdimscale now returns 0 for nt to indicate that no-scale was assigned. 4. Several buffers allocated by Hxxxx, SDxxxx, and VSxxxx functions were used through the entire execution time of HDF application programs. In previous releases those buffers were not freed by HDF. Some debugging tools list those buffers as memory leaks. In HDF4.0b1 those buffers are freed by HDF when the programs exit. The fix doesn't work on SunOS. 5. Added Fortran version of VSQueryxxxx and VSfind: vsqfnelt -- VSQuerycount vsqfintr -- VSQueryinterlace vsqfflds -- VSQueryfields vsqfvsiz -- VSQuerysize vsqfname -- VSQueryname vsffnd -- VSfind 6. SDsetdimscale () did not set scales for unlimited dimension. After appending records to the unlimited dimension, the number of records was not updated. The bug is fixed. 7. In previous releases, the Vdata interface couldn't define more than 36 fields even though VSFIELDMAX was defined as 64 in hdf.h. The bug is fixed. Now the maximum number of fields is decided by VSFIELDMAX. 8. The Fortran function sfgdinfo now returns nattr correctly. 9. hdfrseq is moved out from the HDF release. It is now available on the NCSA ftp server in directory: /HDF/contrib/NCSA/hdfrseq/. 10. If the same file is accessed twice with DFSDputdata (i.e. the file is first destroyed), the first call to DFANputlabel after the second call to DFSDputdata fails. To fix this problem, a new function DFANclear has been added. ----------------------------------------------------------------- Name: DFANclear Purpose: Clear DFAN interface Inputs: void Returns: SUCCEED if ok; FAIL otherwise. Remarks: When a file is re-created in a single run, user should call DFANclear() before the file is re-created to reset DFAN interface structures. Example: main() { int ret; dump(0); /* DFSDputdata("myfile.hdf",...) is called */ /* in dump() to create myfile.hdf */ ret = DFANclear(); dump(1); /* DFSDputdata("myfile.hdf",...) is called */ /* again to re-create a file with the same */ /* name myfile.hdf */ } 11. A bug is fixed in SDgetcal, which failed in getting number_type from old hdf files, created by DFSDxxxx calls. 12. hdf.inc missing constants and commas 13. HDgettagname() can't recognize DFTAG_FV and DFTAG_COMPRESSED in hkit.c 14. fp2hdf is back in hdf/util/. -------------------------------------------------------------- Known problems: 1. Need Fortran version of VFfieldxxxx functions. 2. Need an easy way to append to a vdata. One solution would be to make all FULL_INTERLACE vdatas appendable. 3. Need a high level function to create external Vdata, similar to SDsetexternalfile(). 4. SDxxxx interface creates dummy values for dimension records. For multi-dimensional SDS this isn't too bad. However, for 1-D SDS it doubles the size of the file. hdf4-hdf4.3.1/release_notes/misc_docs.txt000066400000000000000000003463471503061704500204040ustar00rootroot00000000000000 This file was created for the HDF4.2r0. release to store the documents that were in the release_notes directory of the main HDF4 source tree since the 4.0.alpha release. See also HISTORY.txt file for more information. File contains the following *.txt files: Fortran_APIs.txt JPEG.txt Pablo.txt comp_SDS.txt compile.txt compression.txt dimval.txt external_path.txt hdp.txt install_winNT.txt macintosh.txt mf_anno.txt mf_ris.txt new_functions.txt page_buf.txt sd_chunk_examples.txt vattr.txt windows.txt To search for a particular document use "filename.txt=" string, for example to search for the beginning of the new_functions.txt file, use "new_functions.txt=" string ================================Fortran_APIs.txt============================ Problem: ======== In HDF4.0r1 and previous versions of HDF several Fortran routines declared a formal parameter as character*(*) or integer while the actual parameter was a character or a numeric type. This caused problems on some systems, such as VMS and T3D. With HDF 4.0r2 and later releases, these routines have either been replaced by 2 routines, one for character type parameters and another for numeric type parameters; or, a new routine has been added for char type parameters and the old routine is used for numeric type parameters only. Those routines that were replaced by two routines should be phased out in the future. However, in order to not break currently working applications they are still supported. New applications should use the new routines. Routines and parameters affected: ================================ 1. Write vdata Old: vsfwrit(vsid, databuf, n_rec, interlace) character*(*) databuf HDF4.0r2: Write to a vdata from a character buffer: vsfwrtc(vsid, cbuf, n_rec, interlace) character*(*) cbuf Write to a vdata from an integer buffer (for numeric values): vsfwrt(vsid, buf, n_rec, interlace) integer buf 2. Read vdata Old: vsfread(vsid, buf, n_recs, interlace) character*(*) buf HDF4.0r2: Read records into a character buffer: vsfrdc(vsid, cbuf, n_recs, interlace) character*(*) cbuf Read records into an integer buffer (for numeric values): vsfrd(vsid, buf, n_recs, interlace) integer buf 3. High level function for creating a single field single component vdata Old: vhfsd(f, field, buf, n, dtype, vsname, vsclass) integer buf HDF4.0r2: Store a simple character dataset in a vdata: vhfscd(f,field,cbuf,n,dtype,vsname,vsclass) character*(*) cbuf Store a simple numeric dataset in a vdata vhfsd(f, field, buf, n, dtype, vsname, vsclass) integer buf 4. High level function for creating a single field multi- component vdata Old: vhfsdm (f,field,buf,n,dtype,vsname,vsclass,order) integer buf HDF4.0r2: Store an aggregate char dataset in a vadata: vhfscdm (f,field,cbuf,n,dtype,vsname,vsclass,order) character*(*) cbuf Store a simple numeric dataset in a vdata vhfsdm(f,field,buf,n,dtype,vsname,vsclass,order) integer buf 5. Write GR image Old: mgwrimg(riid, start,stride,count,data) data HDF4.0r2: Write character type image data mgwcimg(riid, start, stride, count, cdata) character*(*) cdata Write numeric type image data mgwrimg(riid, start,stride,count,data) data 6. Read GR image Old: mgrdimg(riid,start,stride,count,data) integer data HDF4.0r2: Read character type image data mgrcimg(riid,start,stride,count,cdata) character*(*) cdata Read numeric type image data mgrdimg(riid,start,stride,count,data) data 7. Write LUT Old: mgwrlut(lutid,ncomp,data_type,interlace,nentries,data) data HDF4.0r2: Write character type palette: mgwclut(lutid,ncomp,data_type,interlace,nentries,cdata) character*(*) cdata Write numeric type palette: mgwrlut(lutid,ncomp,data_type,interlace,nentries,data) data 8. Read LUT Old: mgrdlut(lutid, data) data HDF4.0r2: Read char type palette: mgrclut(lutid,cdata) character*(*) cdata Read numeric type palette: mgrdlut(lutid, data) data 9. Set GR attribute Old: mgsattr(riid, name, nt, count, data) character*(*) data HDF4.0r2: Add char type attribute to a raster image mgscatt(riid, name, nt, count, cdata) character*(*) cdata Add a numeric attribute to a raster image mgsnatt(riid, name, nt, count, data) integer data 10. Get GR attribute Old: mggattr(riid, index, data) data HDF4.0r2: Get a char type attribute: mggcatt(riid, index, cdata) character*(*) cdata Get a numeric type attribute: mggnatt(riid, index, data) integer data 11. Write SDS data Old: sfwdata(sdsid,start,stride,end,values) values HDF4.0r2 Write char type SDS data sfwcdata(sdsid,start,stride,end,cvalues) character*(*) cvalues Write numeric type SDS data sfwdata(sdsid,start,stride,end,values) values 12. Read SDS data Old: sfrdata(sdsid,start,stride,end,values) values HDF4.0r2 Read char type SDS data sfrcdata(sdsid,start,stride,end,cvalues) character*(*) cvalues Read numeric type SDS data sfrdata(sdsid,start,stride,end,values) values 13. Add an attribute to an object in SD interface Old: sfsattr(id, name, nt, count, data) character*(*) data HDF4.0r2 Add a char type attribute to an object sfscatt(id, name, nt, count, cdata) character*(*) cdata Add a numeric type attribute to an object sfsnatt(id, name,nt, count,data) integer data 14. Get contents of an attribute Old: sfrattr(id, index, buf) buf HDF4.0r2: Get a char type attribute sfrcatt(id, index, cbuf) character*(*) cbuf Get a numeric type attribute sfrnatt(id, index, buf) buf 15. Set fill value Old: sfsfill(id, val) val HDF4.0r2 Set a char type fill value sfscfill(id, cval) character cval Set a numeric type fill value sfsfill(id, val) val 16. Get fill value Old: sfgfill(id, val) val HDF4.0r2 Get char type fill value sfgcfill(id, cval) character cval Get numeric type fill value sfgfill(id, val) val ============================================================================ ================================JPEG.txt==================================== Independent JPEG Group library Version 4.1b of the HDF-netCDF library uses v6a of the Independent JPEG Group (IJG) JPEG file access library. For most users of the HDF library, this will be completely transparent. For users who are integrating the HDF library into an existing application which uses the IJG's JPEG library, linking with the HDF library is now much simpler and should be completely painless. The JPEG library will need to be linked with user's applications when raster images are being used (whether they are compressed with JPEG or not). cc -o myprog.c -I \ Note: order of the libraries is important, the mfhdf library must be first and be followed by the hdf library. ============================================================================ ================================Pablo.txt=================================== Pablo Instrumentation of HDF =========================== This version of the distribution has support to create an instrumented version of the HDF library(libdf-inst.a). This library along with the Pablo performance data capture libraries can be used to gather data about I/O behavior and procedure execution times. More detailed documentation on how to use the instrumented version of the HDF library with Pablo can be found in the Pablo directory '$(toplevel)/hdf/pablo'. See the provided '$(toplevel)/hdf/pablo/README.Pablo' and the Postscript file '$(toplevel)/hdf/pablo/Pablo.ps'. At this time only an instrumented version of the core HDF library libdf.a can be created. Future versions will have support for the SDxx interface found in libmfhdf.a. Current interfaces supported are ANxx, GRxx, DFSDxx, DFANxx, DFPxx, DFR8xx, DF24xx, Hxx, Vxx, and VSxx. To enable the creation of an instrumented library the following section in the makefile fragment($(toplevel)/config/mh-) must be uncommented and set. # ------------ Macros for Pablo Instrumentation -------------------- # Uncomment the following lines to create a Pablo Instrumentation # version of the HDF core library called 'libdf-inst.a' # See the documentation in the directory 'hdf/pablo' for further # information about Pablo and what platforms it is supported on # before enabling. # You need to set 'PABLO_INCLUDE' to the Pablo distribution # include directory to get the files 'IOTrace.h' and 'IOTrace_SD.h'. #PABLO_FLAGS = -DHAVE_PABLO #PABLO_INCLUDE = -I/hdf2/Pablo/Instrument.HP/include After setting these values you must re-run the top-level 'configure' script. Make sure that your start from a clean re-build(i.e. 'make clean') after re-running the toplevel 'configure' script and then run 'make'. Details on running configure can be found in the section 'General Configuration/Installation - Unix' found in the top-level installation file '$(toplevel)/INSTALL'. ============================================================================ ================================comp_SDS.txt================================ Limitations of compressed SDS datasets Due to certain limitations in the way compressed datasets are stored, data which has been compressed is not completely writable in ways that uncompressed datasets are. The "rules" for writing to a compressed dataset are as follows: (1) Write an entire dataset that is to be compressed. I.e. build the dataset entirely in memory, then write it out with a single call. (2) Append to a compressed dataset. I.e. write to a compressed dataset that has already been written out by adding to the unlimited dimension for that dataset. (3) For users of HDF 4.1, write to any subset of a compressed dataset that is also chunked. Generally speaking, these mean that it is impossible to overwrite existing compressed data which is not stored in "chunked" form. This is due to compression algorithms not being suitable for "local" modifications in a compressed datastream. Please send questions about compression to the general HDF support e-mail address: help@hdfgroup.org Compression for HDF SDS The SDsetcompress and SDsetnbitdataset functions are used as higher-level routines to access the HCcreate function (HCcreate is described in the reference manual). SDsetnbitdataset allows for the storage of 1-32 bit integer values (instead of being restricted to 8, 16 or 32-bit sizes) in a scientific dataset. SDsetcompress can be used to compress a scientific dataset through the SD interface instead of dropping down to the lower-level H interface. N-bit SDS using SDsetnbitdataset: The interface to SDsetnbitdataset is described below: intn SDsetnbitdataset(sds_id,start_bit,bit_len,sign_ext,fill_one); int32 sds_id - The id of a scientific dataset returned from SDcreate or SDselect. intn start_bit - This value determines the bit position of the highest end of the n-bit data to write out. Bits in all number-types are counted from the right starting with 0. For example, in the following bit data, "01111011", bits 2 and 7 are set to 0 and all the other bits are set to one. intn bit_len - The number of bits in the n-bit data to write, including the starting bit, counting towards the right (i.e. lower bit numbers). For example, starting at bit 5 and writing 4 bits from the following bit data, "01111011", would write out the bit data, "1110", to the dataset on disk. intn sign_ext - Whether to use the top bit of the n-bit data to sign-extend to the highest bit in the memory representation of the data. For example, if 9-bit signed integer data is being extracted from bits 17-25 (nt=DFNT_INT32, start_bit=25, bit_len=9, see below for full information about start_bit & bit_len parameters) and the bit in position 25 is a 1, then when the data is read back in from the disk, bits 26-31 will be set to a 1, otherwise bit 25 will be a zero and bits 26-31 will be set to 0. This bit-filling takes higher precedence (i.e. is performed after) the fill_one (see below) bit-filling. intn fill_one - Whether to fill the "background" bits with 1's or 0's. The "background" bits of a n-bit dataset are those bits in the in-memory representation which fall outside of the actual n-bit field stored on disk. For example, if 5 bits of an unsigned 16-bit integer (in-memory) dataset located in bits 5-9 are written to disk with the fill_one parameter set to TRUE (or 1), then when the data is read back into memory at a future time, bits 0-4 and 10-15 would be set to 1. If the same 5-bit data was written with a fill_one value of FALSE (or 0), then bits 0-4 and 10-15 would be set to 0. This setting has a lower precedence (i.e. is performed first) than the sign_ext setting. For example, using the sign_ext example above, bits 0-16 and 26-31 will first be set to either 1 or 0 based on the fill_one parameter, and then bits 26-31 will be set to 1 or 0 based on bit-25's value. RETURNS - SUCCEED (0) or FAIL (-1) for success/failure. The corresponding FORTRAN function name is sfsnbit which takes the same parameters in the same order. For example, to store an unsigned 12-bit integer (which is represented unpacked in memory as an unsigned 16-bit integer), with no sign extension or bit filling and which starts at bit 14 (counting from the right with bit zero being the lowest) the following setup & call would be appropriate: intn sign_ext = FALSE; intn fill_one = FALSE; intn start_bit= 14; intn bit_len = 12; SDsetnbitdataset(sds_id,start_bit,bit_len,sign_ext,fill_one); Further reads and writes to this dataset would transparently convert the 16-bit unsigned integers from memory into 12-bit unsigned integers stored on disk. More details about this function can be found in the HDF library reference manual. Compressed SDS data using SDsetcompress: The SDsetcompress function call contains a subset of the parameters to the HCcreate function call described in compression.txt and performs the same types of compression. The interface to SDsetcompress is described below: intn SDsetcompress(sds_id,comp_type,c_info); int32 sds_id - The id of a scientific dataset returned from SDcreate or SDselect. int32 comp_type - The type of compression to encode the dataset with. The values are the same as for HCcreate: COMP_CODE_NONE - for no compression COMP_CODE_RLE - for RLE encoding COMP_CODE_SKPHUFF - for adaptive Huffman COMP_CODE_DEFLATE - for gzip 'deflation' comp_info *c_info - Information needed for the encoding type chosen. For COMP_CODE_NONE and COMP_CODE_RLE, this is unused and can be set to NULL. For COMP_CODE_SKPHUFF, the structure skphuff in this union needs information about the size of the data elements in bytes (see example below). For COMP_CODE_DEFLATE, the structure deflate in this union need information about "effort" to try to compress with (see example below). For more information about the types of compression see the compression.txt document in this directory. RETURNS - SUCCEED (0) or FAIL (-1) for success/failure. Similarly to the HCcreate function, SDsetcompress can be used to create compressed dataset or to compress existing ones. For example, to compress unsigned 16-bit integer data using the adaptive Huffman algorithm, the following setup and call would be used: comp_info c_info; c_info.skphuff.skp_size=sizeof(uint16); SDsetcompress(sds_id,COMP_CODE_SKPHUFF,&c_info); Further reads and writes to this dataset would transparently convert the 16-bit unsigned integers from memory into a compressed representation on disk. For example, to compress a dataset using the gzip deflation algorithm, with the maximum effort to compress the data, the following setup and call would be used: comp_info c_info; c_info.deflate.level=9; SDsetcompress(sds_id,COMP_CODE_DEFLATE,&c_info); Currently, SDsetcompress is limited to creating new datasets or appending new slices/slabs onto existing datasets. Overwriting existing data in a dataset will be supported at some point in the future. More details about this function can be found in the HDF library reference manual. ============================================================================ ================================compile.txt================================= COMPILING A PROGRAM Following are instructions for compiling an application program on the platforms supported by HDF, using the binaries that we provide. For Unix, the information on options to specify comes from the configuration files (mh-*) in the HDF source code (under ../HDF4.1r5/config). In general, you compile your program as shown below. If your platform is not specified in the section, "INSTRUCTIONS FOR SPECIFIC PLATFORMS", then use these instructions. If you are unable to compile your program on Unix, please check the configuration file for your platform for the correct options. C: cc -o .c -I\ -L -lmfhdf -ldf -ljpeg -lz or cc -o .c -I \ \ FORTRAN: f77 -o .f \ -L -lmfhdf -ldf -ljpeg -lz or f77 -o .f \ \ NOTE: The order of the libraries is important: libmfhdf.a first, followed by libdf.a, then libjpeg.a and libz.a. The libjpeg.a library is optional. INSTRUCTIONS FOR SPECIFIC PLATFORMS =================================== FreeBSD: ------- C: cc -ansi -Wall -pedantic -o .c \ -I \ -L -lmfhdf -ldf -ljpeg -lz FORTRAN: f77 -O -o .f \ -L -lmfhdf -ldf -ljpeg -lz Linux: ----- C: gcc -ansi -D_BSD_SOURCE -o .c \ -I \ -L -lmfhdf -ldf -ljpeg -lz FORTRAN: g77 -o .f \ -L -lmfhdf -ldf -ljpeg -lz Solaris: ------- The -lnsl is necessary in order to include the xdr library. C: cc -Xc -xO2 -o .c \ -I\ -L -lmfhdf -ldf -ljpeg -lz \ -L/usr/lib -lnsl FORTRAN: f77 -O -o .f \ -L -lmfhdf -ldf -ljpeg -lz \ -L/usr/lib -lnsl Windows NT/98/2000: ------------------ Using Microsoft Visual C++ version 6.x: Under Tools->Options, select the folder, Directories: Under "Show directories for", select "Include files". Add the following directories: C:\INCLUDE Under "Show directories for", select "Library files": Add the following directories: C:\LIB Under Project->Settings, select folder, Link: Add the following libraries to the beginning of the list of Object/Library Modules: hd415.lib hm415.lib (single-threaded release version) hd415d.lib hm415d.lib (single-threaded debug version) hd415m.lib hm415m.lib (multi-threaded release version) hd415md.lib hm415md.lib (multi-threaded debug version) ============================================================================ ================================compression.txt============================= Compression Algorithms and interface The low-level compression interface allows any data object to be compressed using a variety of algorithms. This is completely transparent to users once the data has been compressed initially - further data written to an object or read from it are compressed or decompressed internally to the library, without user intervention. (For information on compressing SDS datasets, see the ../release_notes/comp_SDS.txt file.) Currently only three compression algorithms are supported: Run-Length Encoding (RLE), adaptive Huffman, and an LZ-77 dictionary coder (the gzip 'deflation' algorithm). Plans for future algorithms include an Lempel/Ziv-78 dictionary coding, an arithmetic coder and a faster Huffman algorithm. The public interface for this routine is contained in the user-level function call, HCcreate. The interface to HCcreate is described below: int32 HCcreate(id,tag,ref,model_type,m_info,coder_type,c_info); int32 id; IN: the file id to create the data in (from Hopen) uint16 tag,ref; IN: the tag/ref pair of the data object which is to be compressed comp_model_t model_type; IN: the type of modeling to use, currently only COMP_MODEL_STDIO is supported, which indicates data is transferred in the same way as C I/O functions operate. model_info *m_info; IN: Information needed for the modeling type chosen Nothing needed for COMP_MODEL_STDIO, so NULL can be used. comp_coder_t coder_type; IN: the type of encoding to use from the following: COMP_CODE_NONE - for no compression COMP_CODE_RLE - for RLE encoding COMP_CODE_SKPHUFF - for adaptive Huffman COMP_CODE_DEFLATE - for gzip 'deflation' comp_info *c_info; IN: Information needed for the encoding type chosen For COMP_CODE_NONE and COMP_CODE_RLE, this is unused and can be set to NULL. For COMP_CODE_SKPHUFF, the structure skphuff in this union needs information about the size of the data elements in bytes (see examples below). For COMP_CODE_DEFLATE, the structure deflate in this union needs information about the "effort" to encode data with. Higher values of 'level' member indicate more compression effort. Values may range from 0 (minimal compression, fastest time) to 9 (maximum compression, slowest time). RETURNS Return an AID to the newly created compressed element, FAIL on error. HCcreate will compress an existing data object with the specified compression method, or it can create a new data object which will contain compressed data when it is written to. In either case, Hendaccess must be called to release the AID allocated by HCcreate. In the first two examples below the datasets already exist, in the final example the dataset is created by the HCcreate call. There is currently no FORTRAN equivalent for this function. More details about this function can be found in the HDF reference manual. The following example shows how to compress a scientific dataset data object (which is composed of multi-dimensional 32-bit integer data) using the adaptive Huffman encoding: { int32 aid; comp_info c_info; c_info.skphuff.skp_size=sizeof(int32); aid=HCcreate(file_id, DFTAG_SD, ref, COMP_MODEL_STDIO, NULL, COMP_CODE_SKPHUFF,&c_info); . . . . Hendaccess(aid); } The following example shows show to compress a raster image data object using the RLE algorithm: { int32 aid; aid=HCcreate(file_id, DFTAG_RI, ref, COMP_MODEL_STDIO, NULL, COMP_CODE_RLE,NULL); . . . . Hendaccess(aid); } The following example shows how to create a new data object whose data will compressed as it is written: { int32 aid; aid=HCcreate(file_id, DFTAG_RI, ref, COMP_MODEL_STDIO, NULL, COMP_CODE_RLE,NULL); . . Hwrite(aid,len,data); . . Hendaccess(aid); } ============================================================================ ================================dimval.txt================================== New Version of Dimension Values =============================== HDF4.0b1 and previous releases use a vgroup to represent a dimension. The vgroup has a single field vdata with class "DimVal0.0". The vdata has number of records, each record has a fake value from 0, 1, 2 ... , ( - 1 ). The fake values are not really required and take a lot of space. For applications that create large one dimensional array datasets the disk space taken by these fake values almost double the size of the HDF file. In order to omit the fake values, a new version of dimension vdata has been proposed. The new version uses the same structure as the old version. The only differences are that the vdata has only 1 record with value and that the vdata's class is "DimVal0.1" to distinguish it from the old version. However, existing tools and utilities which were compiled with the old version can't recognize the new dimensions of hdf files created using HDF4.0b2 or later version. This could cause problems for HDF users. To solve this problem, we are planning to implement a transitional policy: 1. Starting from HDF4.0b2 both versions of the dimension will be created by default. The old tools recognize the "DimVal0.0" dimension. 2. A new function SDsetdimval_comp (sfsdmvc) is added which can be called for a specific dimension to suppress the creation of the "DimVal0.0" vdata for that dimension. Users who store big 1D arrays should use this function to create "DimVal0.1" only. See the man page for sdsetdimval_comp.3. 3. A new function SDisdimval_bwcomp (sfisdmvc) is added which can be called to get the current compatibility mode of a dimension. See the man page for sdisdimval_bwcomp.3. 4. HDF4.0b2 and later version of HDF libraries can recognize both old and new versions of dimensions. This means old HDF files can always be read by new HDF libraries. 5. HDF4.1 will create only "DimVal0.1" by default and function SDsetdimval_comp should be called if "DimVal0.0" is also desired. The transition time period is ended. 6. Existing tools and utilities should be re-compiled with HDF4.0b2 or later releases during that transition time period. 7. A new utility will be written to remove redundant "DimVal0.0" from the files created during the transition time period. 8. A new utility will be written to convert "DimVal0.1" to "DimVal0.0" for special cases. Please send bug reports, comments and suggestions to help@hdfgroup.org. ============================================================================ ================================external_path.txt=========================== User Settable File Location for External Elements Users sometimes encounter situations (e.g., disk space shortage, different filesystem names) that the external file containing the data of the external element has to reside in a directory different from the one it was created. The user may set up symbolic pointers to forward the file locations but this does not work if the external filename is an absolute path type containing directory components that do not exist in the local system. A new feature is added such that an application can provide a list of directories for the HDF library to search for the external file. This is set by the function call HXsetdir or via the environment variable $HDFEXTDIR. See the man page HXsetdir(3) for details. A similar feature is also added to direct the HDF library to create the external file of a _new_ external element in the given directory. An example for the need of this feature is that an application wants to create multiple external element files with certain naming conventions (e.g., Data950101, Data950102) while all these files share a common parent directory (project123/DataVault). Different users will have a different choice of the common parent directory. This can be set by the function call HXsetcreatedir or the environment variable $HDFEXTCREATEDIR. See the man page for HXsetcreatedir (1) for detail. ============================================================================ ================================hdp.txt===================================== hdp -- HDF dumper NAME hdp - HDF dumper SYNOPSIS hdp [hdp options] hdp command [command options] DESCRIPTION hdp is a command line utility designed for quick display of contents and data of HDF3.3 objects. It can list the contents of hdf files at various levels with different details. It can also dump the data of one or more specific objects in the file. HDP OPTIONS Currently, there is only one option. -H Display usage information about the specified command. If no command is specified, -H lists all available commands. HDP COMMANDS hdp currently has two types of commands: list and dump. Other types of commands such as those for editing may be added in the future. hdp list lists contents of files in hdp dumpsds displays data of NDGs and SDGs in the listed files. hdp dumpvd displays data of vdatas in the listed files. hdp dumpvg displays data of objects in vgroups in the listed files. hdp dumprig displays data of RIGs in the listed files. hdp dumpgr displays data of general RIGs in the listed files. HDP COMMAND OPTIONS (Note: options preceded by an * have not yet been implemented.) hdp list [format options] [content ops] [filter ops] [order ops] -------------------------------------------------------------------------- Format options decide how the info of objects will be presented on the screen. -s (short format) under each tag #, all ref's of that tag are listed in one or more lines, same as the output of hdfls. (default) -l (long format) one object per line. Each line contains tag-name, tag/ref and the index of this tag in the file.(e.g., the ith NDG in the file). -d debug format, one object per line. Each line contains tag_name, tag/ref, index, offset, and length, same as the output of hdfls -d. no tagname tag ref index/tag offset length -- ------- --- --- --------- ------ ------ 1 DFTAG_NT 106 2 1 2 DFTAG_SD 701 3 1 ... Content options allow contents be displayed. -n display the name or label of the object, if there is any. -n puts you in -l format automatically. -c display the class of the object, if there is any. -l format. -a display description of the object, if there is any. -l format. Filter options select certain type of objects to display, default is all. -g display groups only. Objects which do not belong to any group will not be displayed. Nested groups will be displayed in tree format. -t display objects with specified tag number . e.g. 720 for NDG. -t display objects with specified tag name. Order options sort the output list in different orders. -ot by tag # (default) -of by the order in file DDlist. -og by group -on by name(label) hdp dumpsds [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which SDS to dump. -i dump SDS's with indices specified in ; indices correspond to the order of the SDS in the file -r dump SDS's with reference numbers specified in -n dump SDS's with names specified in -a dump all SDS's in the file. (default) Options -i, -r, and -n can be used inclusively to specify different SDS's. Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref These options are exclusive. Output options -o specify as output file name -b binary output -x ascii text output (default) Options -b and -x are exclusive, but each can be used with option -o. Format options -c print space characters as they are, not \digit -g do not print data of file (global) attributes -l do not print data of local attributes -s do not add carriage return to a long line - dump as a stream Options in this category can be used inclusively. Note: Any combination of an option from each of the categories can be used as long as the criteria of that category are met. hdp dumpvd [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which vdata to dump. -i dump vdatas with indices in ; indices correspond to the order of the vdatas in the files -r dump vdatas with reference numbers specified in -n dump vdatas with names specified in -c dump vdatas with classes specified in -a dump all vdatas in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref -f dump data of specified fields Output options -o specify fn as output file name * -b binary file -t text ascii file (default) hdp dumpvg [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which vgroups to dump. -i dump vgroups with indices specified in ; indices correspond to the order of the vgroups specified in the files -r dump vgroups with reference numbers specified in -n dump vgroups with names specified in -c dump vgroups with classes specified in -a dump all vgroups in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only Output options -o specify fn as output file name * -b binary file -t text ascii file (default) Note: Unless the "-d" option is specified, a graphical representation of the file will be given after the data has been displayed. hdp dumprig [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which RIG to dump. -i dump RIGs with indices specified in ; indices correspond to the order of the RIGs specified in the files -r dump RIGs with reference numbers specified in -a dump all RIGs in the file. (default) -m 8|24 dump the RIGs of 8-bit or 24-bit. By default all RIGs in the file will be dumped Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only Output options -o specify fn as output file name -b binary file -t text ascii file (default) hdp dumpgr [filter ops] [contents ops] [output ops] -------------------------------------------------------------------- Filter options specify which general RIGs to dump. -i dump general RIG's with indices specified in ; indices correspond to the order of the RIG in the file -r dump general RIG's with reference numbers specified in -n dump general RIG's with names specified in -a dump all general RIG's in the file. (default) Content options -v display everything including all annotations (default) -h header only, no annotation for elements or data -d data only, no tag/ref Output options -o specify fn as output file name -b binary file -t ascii text file (default) Note: any combination of an option from each of the three categories can be used; but no more than one option from one category is allowed. ============================================================================ ================================install_winNT.txt=========================== Install HDF4.1 Release 2 on Windows NT and Windows 95, and Alpha NT. Since Windows NT, Windows '95 (Chicago) and Windows 3.1 (with the Win 32s extensions) all are designed to run the same 32-bit code, our decision is to support only 32-bit libraries and code on the MS-Windows platform. We are not planning on supporting any 16-bit versions in the foreseeable future. The instructions which follow assume that you will be using one of the 'zip' files that we provide, either the binary code release (hdf41r2.zip) or the source code release (hdf41r2s.zip). In building HDF from source code you may select between two build environment options depending on your application and environment needs. Each option has it's own zip file: Option I, (select Win32nof.zip) Test and Utility configuration : HDF library, tests, and utilities, no fortran, available for Win32 Intel platform only. Option II, (select Win32full.zip) Full configuration : HDF library, tests, and utilities, with fortran This version has been built and tested using DEC Visual Fortran on both the Win32 Intel platform and the Win32 Alpha platform. Building from Binary Code Release (hdf41r2.zip) =============================================== To install the HDF, JPEG, zlib and mfhdf libraries and utilities, it is assumed that you have done the following: 1. Create a directory structure to unpack the library. For example: c:\ (any drive) MyHDFstuff\ (any folder name) 2. Copy the binary archive (HDF41r2.zip) to that directory and unpack it by running WinZip on HDF41r2.zip (the binary archive). This should create a directory called 'HDF41r2' which contains the following files and directories. c:\MyHDFstuff\HDF41r2\lib ( Debug and Release versions of HDF libraries ) c:\MyHDFstuff\HDF41r2\include ( HDF include files ) c:\MyHDFstuff\HDF41r2\bin ( HDF utilities files ) c:\MyHDFstuff\HDF41r2\release_notes ( release notes ) c:\MyHDFstuff\HDF41r2\install_NT_95 ( this file) 3. If you are building an application that uses the HDF library the following locations will need to be specified for locating header files and linking in the HDF libraries: C:\MyHDFstuff\HDF41r2\lib C:\MyHDFstuff\HDF41r2\include Building from Source Code Release (hdf41r2s.zip) =============================================== STEP I: Preconditions To build the HDF, JPEG, zlib and mfhdf libraries and utilities, it is assumed that you have done the following: 1. Installed MicroSoft Developer Studio, and Visual C++ 5.0. Visual Fortran 5.0 is needed if you are going to build the full HDF Library with Fortran support. 2. Set up a directory structure to unpack the library. For example: c:\ (any drive) MyHDFstuff\ (any folder name) 3. Copy the source distribution archive to that directory and unpack it using the appropriate archiver options to create a directory hierarchy. Run WinZip on HDF41r2s.zip (the entire source tree). This should create a directory called 'HDF41r2' which contains several files and directories. ( Note for those using the Win32 Alpha platform: If you do not have a Winzip utility for your Alpha system you can download the needed executables from: http://www.cdrom.com/pub/infozip ) STEP II: Select Installation type and Build. You may select one of 2 ways to build the HDF library and utilities, depending on your environment and application needs. Option I, (select Win32nof.zip) Test and Utility configuration : HDF library, tests, and utilities, no fortran Option II, (select Win32full.zip) Full configuration : HDF library, tests, and utilities, with fortran STEP III: Follow Instructions for Option I, or II INSTRUCTIONS FOR OPTION I, TEST AND UTILITY INSTALLATION, NO FORTRAN (Win32 Intel platform only) *** Builds hdf library, hdf utilities, *** test programs and batch files. No fortran code. 1. You will use Win32nof.zip Unpack dev\win32nof.zip in directory dev\ Run WinZip on c:\myHDFstuff\HDF41r2\Win32nof.zip This archive contains a Developer Studio project "dev" and two batch files. 40 project files (*.dsp files) will be created when Win32nof.zip is expanded. 2. Invoke Microsoft Visial C++ 5.0, go to "File" and select "Open Workspace" option. Then open c:\myHDFstuff\HDF41r2\dev.dsw workspace. 3. Select "Build", then Select "Set Active Configuration". Select "dev -- Win32Debug" as active configuration. Select "Build" and "Build dev.exe" to build the Debug version of the HDF41r2 tree. 4. Select "Build", then Select "Set Active Configuration". Select "dev -- Win32Release" as active configuration. Select "Build" and "Build dev.exe" to build the Release version of the HDF41r2 tree. 5. In command prompt window run the test batch file win32noftst.bat in directory HDF41r2\. 6. If all tests passed, run the installation batch file win32ins.bat in directory HDF41r2\. Commands in this file will create subdirectories bin\, include\ and lib\ in HDF41r2\. The bin directory will contain the HDF utilities, the include directory will contain header files, and the lib directory will contain: jpeg.lib - JPEG Library jpegd.lib - JPEG Library with DEBUG option libsrc.lib - multi-file SDS Interface routines libsrcd.lib - multi-file SDS Interface routines with DEBUG option src.lib - multi-file Vdata Interface Vgroup Interface AN Interface GR Interface routines srcd.lib - multi-file Vdata Interface Vgroup Interface AN Interface GR Interface routines with DEBUG option xdr.lib - XDR Library xdrd.lib - XDR Library with DEBUG option zlib.lib - GNU Zip Library zlibd.lib - GNU Zip Library with DEBUG option INSTRUCTIONS FOR OPTION II, FULL INSTALLATION WITH FORTRAN *** Builds the hdf library, hdf utility programs, test programs, *** and batch files. Includes fortran source code to be *** compiled with Digital Visual Fortran on either a Win32 Intel *** machine or a Win32 Alpha machine. 1. Unpack HDF41r2\Win32full.zip in directory HDF41r2\. 2. Invoke Microsoft Visial C++ 5.0, go to "File" and select "Open Workspace" option. Then open c:\myHDFstuff\HDF41r2\dev.dsw workspace. 3. Select "Build", then Select "Set Active Configuration". Select as the active configuration "dev -- Win32Debug" if you have a Win32 Intel processor OR select "dev-Win32AlphaDbg" if you have a Win32 Alpha processor. Select "Build" and "Build dev.exe" to build the Debug version of the HDF41r2 tree. You will see that Digital Visual Fortran compiler is invoked by Visual C++ Development environment in compiling the fortran code. 4. Select "Build", then Select "Set Active Configuration". Select as the active configuration"dev -- Win32Release" if you have a Win32 Intel processor OR select "dev-Win32AlphaRel" if you have a Win32 Alpha processor. Select "Build" and "Build dev.exe" to build the Release version of the HDF41r2 tree. 5. In command prompt window run the test batch file which resides in the HDF41r2 directory. Run win32tst.bat if you have a Win32 Intel platform OR run win32ALPHAtst.bat if you have the Win32 Alpha platform. 6. If all tests passed, run the installation batch file which resides in the HDF41r2 directory Run win32ins.bat if you have a Win32 Intel platform OR run win32ALPHAins.bat if you have a Win32 Alpha platform. Commands in these files will create subdirectories bin\, include\ and lib\ in HDF41r2\. The bin directory will contain the HDF utilities, include directory will contain header files, and the lib directory will contain: jpeg.lib - JPEG Library jpegd.lib - JPEG Library with DEBUG option libsrc.lib - multi-file SDS Interface routines libsrcd.lib - multi-file SDS Interface routines with DEBUG option src.lib - multi-file Vdata Interface Vgroup Interface AN Interface GR Interface routines srcd.lib - multi-file Vdata Interface Vgroup Interface AN Interface xdrd.lib - XDR Library with DEBUG option zlib.lib - GNU Zip Library zlibd.lib - GNU Zip Library with DEBUG option STEP IV: BUILDING AN APPLICATION USING THE HDF LIBRARY - SOME HELPFUL POINTERS ===================================================================== If you are building an application that uses the HDF library the following locations will need to be specified for locating header files and linking in the HDF libraries: \lib \include where may be C:\myHDFstuff\dev or C:\MyHDFstuff\HDF41r2\ Please refer to the \release_notes\compile.txt file for more information on compiling an application with the HDF libraries. MORE HELPFUL POINTERS ===================== (as described in terms of installing the nofortran configuration) Here are some notes that may be of help if you are not familiar with using the Visual C++ Development Environment. Project name and location issues: The files in Win32nof.zip must end up in the HDF41r2\ directory installed by HDF41r2s.zip If you must install dev.dsw and dev.dsp in another directory, relative to HDF41r2\ , you will be asked to locate the above 5 sub-project files, when you open the project dev.dsw. If you want to rename dev (the entire project), you will need to modify two files dev.dsw and dev.dsp as text (contrary to the explicit warnings in the files). You can also modify dev.dsw and dev.dsp as text, to allow these 2 files to be installed in another directory. Settings... details: If you create your own project, the necessary settings can be read from the dev.dsp file(as text), or from the Project Settings in the Developer Studio project settings dialog. Project Settings C/C++ Category PreProcessor Code Generation Use run-time Library These are all set to use Single-Threaded. or Single-Threaded debug. ============================================================================ ================================macintosh.txt=============================== Fortner Software LLC ("Fortner") created the reference implementation for Macintosh of the HDF 4.1r3 library, providing C-language bindings to all 4.1r3 features. The Macintosh reference implementation of the HDF 4.1r3 library was implemented and tested on a PowerMac Model 7600/120 running MacOS 8.5.1 using Metrowerks CodeWarrior Pro1. The library has also been run on a PowerMac G3. Fortner cannot be certain that the libraries will run on other versions of Macintoshes (or clones) or MacOS versions, or when built using other development tools. (In particular, this Macintosh implementation has not addressed use with non-PowerPC versions of Macintosh [i.e., 680x0-based Macintoshes]). Migrating the Macintosh reference implementation to other development and/or run-time environments is the responsibility of the library user. First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: https://www.hdfgroup.org/ Please send questions, comments, and recommendations regarding the Macintosh version of the HDF library to: help@hdfgroup.org ============================================================================ ================================mf_anno.txt================================= Annotation access through the Multi-file Annotation Interface(ANxxx) ==================================================================== These routines are for accessing file labels, file descriptions, data labels and data descriptions (i.e. all are annotations). General access requires the routines Hopen() and ANstart() to be called first and the last call to be ANend() and Hclose() which ends annotation handling on the file and closes the file. Basic annotation manipulation involves dealing with handles(ann_id's) for each annotation and annotation interface handle(an_id). NOTES: Note that the annotation types are enumerated. TYPE here refers to file/data label/description types They are AN_FILE_LABEL, AN_FILE_DESC, AN_DATA_LABEL, AN_DATA_DESC The tag/ref refers to data tag/ref. AN_DATA_LABEL = 0, /* Data label */ AN_DATA_DESC = 1, /* Data description */ AN_FILE_LABEL = 2, /* File label */ AN_FILE_DESC = 3 /* File description */ In C-code you need to declare the annotation type using the enumerated type definition. e.g. C-code fragment to write a File label #include "hdf.h" ... .. char fname[10] = {"ann.hdf"}; char *file_lab[1] = {"File label #1: This is a file label"}; int32 file_id; /* file id */ int32 an_id; /* annotation interface id */ int32 ann_id; /* annotation id */ ann_type myanntype; /* annotation type */ /* Start Annotation interface and create file */ file_id = Hopen(fname, DFACC_CREATE,0); an_id = ANstart(file_id); /* Set annotation type to file label */ myanntype = AN_FILE_LABEL; /* Create id for file label */ ann_id = ANcreatef(an_id, myanntype); /* Write file label */ ANwriteann(ann_id, file_lab[0], HDstrlen(file_lab[0])); /* end access to file label */ ANendaccess(ann_id); /* end access to file and close it*/ ANend(an_id); Hclose(file_id); .... ... NOTE: You could also call ANcreatef() like this ANcreatef(an_handle, AN_FILE_LABEL); without using the intermediate variable. ROUTINES NEEDED: ================ Hopen - Opening the file, returns a file handle Hclose - Close the file. NEW ROUTINES: =============== ANstart - open file for annotation handling, returns annotation interface id ANfileinfo - get number of file/data annotations in file. Indices returned are used in ANselect() calls. ANend - end access to annotation handling on file ANcreate - create a new data annotation and return an id(ann_id) ANcreatef - create a new file annotation and return an id(ann_id) ANselect - returns an annotation id(ann_id) from index for a particular annotation TYPE. This id is then used for calls like ANwriteann(), ANreadann(), ANannlen(),..etc ANnumann - return number of annotations that match TYPE/tag/ref ANannlist - return list of id's(ann_id's) that match TYPE/tag/ref ANannlen - get length of annotation given id(ann_id) ANreadann - read annotation given id(ann_id) ANwriteann - write annotation given id(ann_id) ANendaccess - end access to annotation using id(ann_id) Routines: ---------- C: /* ------------------------------- ANstart -------------------------------- NAME ANstart -- open file for annotation handling USAGE int32 ANstart(file_id) int32 file_id; IN: file id RETURNS An annotation interface ID or FAIL DESCRIPTION Start annotation handling on the file and return an interface id. Fortran: afstart(file_id) /*------------------------------- ANfileinfo ---------------------------- NAME ANfileinfo PURPOSE Report high-level information about the ANxxx interface for a given file. USAGE intn ANfileinfo(an_id, n_file_label, n_file_desc, n_data_label, n_data_desc) int32 an_id; IN: annotation interface ID int32 *n_file_label; OUT: the # of file labels int32 *n_file_desc; OUT: the # of file descriptions int32 *n_data_label; OUT: the # of data labels int32 *n_data_desc; OUT: the # of data descriptions RETURNS SUCCEED/FAIL DESCRIPTION Reports general information about the number of file and data annotations in the file. This routine is generally used to find the range of acceptable indices for ANselect calls. Fortran: affileinfo(an_id, num_flabel, num_fdesc, num_dlabel, num_ddesc) /* -------------------------------- ANend --------------------------------- NAME ANend -- close annotation handling on a file USAGE int32 ANend(an_id) int32 an_id; IN: annotation interface ID for the file RETURNS SUCCEED / FAIL DESCRIPTION Closes annotation handling on the gvien annotation interface id. Fortran: afend(an_id) /* ------------------------------ ANcreate ---------------------------- NAME ANcreate - create a new data annotation for the specified item USAGE int32 ANcreate(an_id, tag, ref, type ) int32 an_id; IN: annotation interface ID uint16 tag; IN: tag of the item uint16 ref; IN: reference number of the item ann_type type: IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, RETURNS An ID to an annotation which can either be a label or description DESCRIPTION Creates a data annotation, returns an 'ann_id' to work with the new annotation which can either be a label or description. Fortran: afcreate(an_id, tag, ref, type) /* ------------------------------ ANcreatef ---------------------------- NAME ANcreatef - create a new file annotation and return an id USAGE int32 ANcreatef(an_id, type ) int32 an_id; IN: annotation interface ID ann_type type: IN: AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions. RETURNS An ID to an annotation which can either be a file label or description DESCRIPTION Creates a file annotation, returns an 'ann_id' to work with the new file annotation which can either be a label or description. Fortran: afcreatef(an_id, type) /* ------------------------------- ANselect ------------------------------- NAME ANselect -- get an annotation ID from index of 'type' USAGE int32 ANselect(an_id, index, type) int32 an_id; IN: annotation interface ID int32 index; IN: index of annottion to get ID for ann_type type: IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions. RETURNS An ID to an annotation type which can either be a label or description DESCRIPTION The position index is ZERO based Fortran: afselect(an_id, index, type) /*------------------------------- ANnumann --------------------------------- NAME ANnumann -- find number of annotation of 'type' that match the given element tag/ref USAGE intn ANnumann(an_id, type, elem_tag, elem_ref) int32 an_id; IN: annotation interface ID int type: IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions. uint16 elem_tag,: IN: tag of item of which this is annotation uint16 elem_ref; IN: ref of item of which this is annotation RETURNS number of annotation found if successful and FAIL (-1) otherwise DESCRIPTION Find number of annotation of 'type' for the given element tag/ref pair. Here an element is either a file label/desc or data label/desc. Fortran: afnumann(an_id, type, tag, ref) /*-------------------------------------------------------------------------- NAME ANannlist -- generate list of annotation ids of 'type' that match the given element tag/ref USAGE intn ANannlist(an_id, type, elm_tag, elem_ref, ann_list[]) int32 an_id; IN: annotation interface ID ann_type type: IN: AN_DATA_LABEL for data labels, AN_DATA_DESC for data descriptions, AN_FILE_LABEL for file labels, AN_FILE_DESC for file descriptions. uint16 elem_tag,: IN: tag of element of which this is annotation uint16 elem_ref; IN: ref of element of which this is annotation int32 ann_list[]; OUT: array of ann_id's that match criteria. RETURNS number of annotations ids found if successful and FAIL (-1) otherwise DESCRIPTION Find and generate list of annotation ids of 'type' for the given element tag/ref pair Fortran: afannlist(an_id,type, tag, ref, alist[]) /*-------------------------------------------------------------------------- NAME ANannlen -- get length of annotation given annotation id USAGE int32 ANannlen(ann_id) int32 ann_id; IN: annotation id RETURNS length of annotation if successful and FAIL (-1) otherwise DESCRIPTION Get the length of the annotation specified. Fortran: afannlen(ann_id) /*-------------------------------------------------------------------------- NAME ANwriteann -- write annotation given ann_id USAGE intn ANwriteann(ann_id, ann, ann_len) char *ann_id; IN: annotation id char *ann; IN: annotation to write int32 ann_len; IN: length of annotation RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Checks for pre-existence of given annotation, replacing old one if it exists. Writes out annotation. Fortran: afwriteann(ann_id, ann, annlen) /*-------------------------------------------------------------------------- NAME ANreadann -- read annotation given ann_id USAGE intn ANreadann(ann_id, ann, maxlen) int32 ann_id; IN: annotation id (handle) char *ann; OUT: space to return annotation in int32 maxlen; IN: size of space to return annotation in RETURNS SUCCEED (0) if successful and FAIL (-1) otherwise DESCRIPTION Gets tag and ref of annotation. Finds DD for that annotation. Reads the annotation, taking care of NULL terminator, if necessary. Fortran: afreadann(ann_id, ann, maxlen) /* ----------------------------------------------------------------------- NAME ANendaccess -- end access to an annotation given it's id USAGE intn ANendaccess(ann_id) int32 an_id; IN: annotation id RETURNS SUCCEED or FAIL DESCRIPTION Terminates access to an annotation. Fortran: afendaccess(ann_id) ============================================================================ ================================mf_ris.txt================================== The multi-file RIS interface ============================= Contents: Introduction How to access files and images in the new interface "Name = value" attributes in the new interface Dealing with annotations in the new interface Work not yet completed, bugs, limitations A listing or routines Descriptions of GR routines File level interface Dataset Manipulation ID/Ref/Index Functions Interlace Request Functions LUT/Palette I/O Functions Special Element Functions Attribute Functions Introduction ============ The new Generic Raster (GR) interface provides a set of functions for manipulating raster images of all kinds. This new interface is meant to replace the older RIS8 and RIS24 interfaces, although these older interfaces will continue to be supported. Generic raster images are composed of "pixels" which can have multiple components, including but not limited to 8-bit unsigned integers. Each image can have multiple palettes associated with it and other 'attributes' in the same "name=value" style as the SD*() routines have. The new GR interface was motivated by a number of needs: o The need for multi-file, multi-object access to raster images, allowing users to keep open more than one file at a time, and to "attach" more than one raster image at a time. o A need to further integrate the netCDF data-model with the HDF data-models. o A need for a more general framework for attributes within the RIS data-model (allowing 'name = value' style metadata). o A need to be able to access subsamples and subsets of images. IMPORTANT: The added functionality represented by this new interface has necessitated a change in how raster images are physically represented on disk. As a result programs using the old single-file RIS interfaces will only be able to read the data out of files produced by the new interface. The metadata / attributes will not be accessible. The following chart represents what can be done with the various interfaces available in HDF 4.0b1: old RIS-API new GR-API old RIS CRW CRW HDF files new RIS r CRW HDF files 'R' means read, 'W' means write and 'C' means create. Entries with dashes '-' represent functionality which has not yet been implemented. 'r' stands for the ability to only read the data, not the metadata. Work not yet completed, bugs, limitations =========================================== Misc. stuff left to do: Deal with special elements for images. GRrename for images. GRsetflags to suppress writing fill data and to suppress fillvalue attr. Features not supported: Full support for multiple palettes with each RI. Support for named palettes with each RI. Support for palettes with non-standard formats. Deletion of attributes or images (would require changing the way index numbers are handled) Other limitations: Currently the following design limitations are still in place: 1 - Cannot have pixels or palette entries which contain mixed variable types, i.e. all the pixel/palette components must be of the same number type. 2 - Currently all the components must be of valid HDF number types, fractional bytes (i.e. 6-bit components) or 'plain' multiple byte values are not handled, although they can be packed into the next larger sized number type in order to hold them. How to access files and images in the new interface ====================================================== Here are the steps involved in accessing images in the new interface: 1. Open or create the file using Hopen. This provides you with a file ID to be used in step 2. 2. Activate the GR interface for the file with the file ID obtained from step 1, using GRstart. This provides you with a GR interface ID (GR ID). 3. Optionally obtain information about the raster images in the file and global GR attributes using GRfileinfo. Use the GR ID from step 2 to refer to the image file. 4. Optionally find the index of a raster image, by name using GRnametoindex, or by reference number using GRreftoindex. 5. Select for access an image with a given index, using GRselect for each image. Each call to GRselect returns a raster image ID (RI ID) for subsequent accesses involving the corresponding image. 5. Access the image by its RI ID, using routines such as GRgetiminfo (to get information about the image) and GRreadimage (to read all or part of an image). 6. Terminate access to a given image using GRendaccess. 7. Terminate access to the GR interface for the file, using GRend. 8. Close the file using Hclose. Notice that in the GR interface, images are identified in several ways. Before an image is accessible ("attached"), it is identified by index, name, and reference number. The index describes the relative position of the image in the file. The name is a character string associated with the image, and the reference number is a unique integer. An image's name is assigned by the program when it is created, and the reference number is assigned by the HDF library when it is created. After an image is attached , it is identified by an raster image identifier, or RI ID. The following code fragment illustrates the steps involved in accessing the image in a file and printing information about them. /* Open the file and initialize the GR interface */ hdf_file_id=Hopen(TESTFILE,DFACC_RDWR,0); grid=GRstart(hdf_file_id); /* Obtain information about the images in the file */ GRfileinfo(grid,&n_datasets,&n_attrs); /* Attach to each image and print information about it */ for(i=0; i version more extra_byte 4 2/2 If no attributes or other new features were assigned, version number is still VSET_VERSION and the old vdata header will be written out. 2. In the old implementation the 'version' and 'more' fields follow the 'exref' field. In order to not break existing applications the new implementation keeps these two fields and adds a duplication of 'version' and 'more' at the end, along with an extra byte which was not documented in the old documentation. 3. The field "flags" of uint32: bit 0 -- has attr bit 1 -- 15 -- unused. o Fields follow the 'flags' are: total_number_of_attrs this vdata has (4 bytes) vs_attr_list (#_attrs * 8 bytes (4+2+2)) (field_index, attr_vdata_tag, attr_vdata_ref) the flags and attribute fields are added after the first 'more' fields. Changes in the vgroup data in HDF files --------------------------------------- 1. If has attribute(s): o add a flag field, uint16, bit 0 -- has attr bit 1-15 -- unused. o version number will be changed to 4 o fields following the flag are: number_of_attrs vg_attr_list the above fields are added preceding the version field o vg_attr_list consists of a list of attribute_tag/ref pairs If no attribute: No changes in vgroup data and version number is still 3 ============================================================================ ================================windows.txt================================= Fortner Software LLC ("Fortner") created the reference implementation for Windows of the HDF 4.1r3 library, providing C-language bindings to all 4.1r3 features. The Windows reference implementation of the 4.1r3 library was implemented and tested on a Pentium PC running Windows95 4.00.950 using Microsoft Developers Studio 97 Visual C++ Version 5.00. The library has also been run on Pentium PC running WindowsNT version 4.0. Fortner cannot be certain that the libraries will run on other versions of Windows or when built using other development tools. (In particular, this Windows implementation has not addressed use with Windows 3.x, or non-PC versions of WindowsNT). Migrating the Windows reference implementation to other development and/or run-time environments is the responsibility of the library user. First-time HDF users are encouraged to read the FAQ in this release for more information about HDF. Users can also look at the home page for HDF at: https://www.hdfgroup.org/ Please send questions, comments, and recommendations regarding the Windows version of the HDF library to: help@hdfgroup.org ============================================================================